From e90f0536f9be39ada0bef0aeb0d275dec3b2fb5b Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Fri, 29 Jul 2011 18:12:19 -0700 Subject: [PATCH] Imported Upstream version 2.14.2 --- .gitignore | 11 +- .mailmap | 197 + AUTHORS.txt | 204 +- COPYING | 933 +- COPYING.FDL | 451 + Documentation/GNUmakefile | 392 +- Documentation/bibliography/GNUmakefile | 34 - Documentation/bibliography/colorado.bib | 524 - .../bibliography/computer-notation.bib | 771 - Documentation/bibliography/engraving.bib | 357 - Documentation/bibliography/html-long.bst | 1374 -- Documentation/bibliography/index.html.in | 30 - Documentation/changes.tely | 677 + Documentation/common-macros.itexi | 123 +- Documentation/contributor.texi | 95 + Documentation/contributor/GNUmakefile | 5 + .../contributor/administration.itexi | 876 + Documentation/contributor/build-notes.itexi | 736 + Documentation/contributor/compiling.itexi | 9 + .../contributor/doc-translation-list.itexi | 96 + Documentation/contributor/doc-work.itexi | 2298 ++ Documentation/contributor/introduction.itexi | 191 + Documentation/contributor/issues.itexi | 872 + Documentation/contributor/lsr-work.itexi | 312 + .../contributor/programming-work.itexi | 2064 ++ Documentation/contributor/quick-start.itexi | 502 + Documentation/contributor/regressions.itexi | 455 + Documentation/contributor/release-work.itexi | 471 + Documentation/contributor/source-code.itexi | 2017 ++ Documentation/contributor/website-work.itexi | 280 + Documentation/cs/GNUmakefile | 10 + Documentation/cs/download.itexi | 607 + Documentation/cs/essay/GNUmakefile | 5 + Documentation/cs/essay/literature.itely | 103 + Documentation/cs/learning.tely | 121 + Documentation/cs/learning/GNUmakefile | 5 + .../cs/learning/common-notation.itely | 1533 ++ Documentation/cs/learning/fundamental.itely | 3464 +++ Documentation/cs/learning/preface.itely | 61 + Documentation/cs/learning/templates.itely | 239 + Documentation/cs/learning/tutorial.itely | 832 + Documentation/cs/learning/tweaks.itely | 4558 ++++ Documentation/cs/macros.itexi | 787 + Documentation/cs/texidocs/GNUmakefile | 5 + Documentation/cs/translations.itexi | 394 + Documentation/cs/usage/GNUmakefile | 5 + Documentation/cs/usage/external.itely | 662 + Documentation/cs/usage/lilypond-book.itely | 1312 ++ Documentation/cs/usage/running.itely | 878 + Documentation/cs/usage/setup.itely | 357 + Documentation/cs/usage/suggestions.itely | 638 + Documentation/cs/usage/updating.itely | 269 + Documentation/cs/web.texi | 315 + Documentation/cs/web/GNUmakefile | 5 + Documentation/cs/web/community.itexi | 855 + Documentation/cs/web/download.itexi | 608 + Documentation/cs/web/introduction.itexi | 1252 + Documentation/cs/web/manuals.itexi | 605 + Documentation/cs/web/news-front.itexi | 16 + Documentation/css/GNUmakefile | 6 + Documentation/{ => css}/lilypond-ie-fixes.css | 0 Documentation/css/lilypond-manuals.css | 467 + Documentation/css/lilypond-website.css | 979 + Documentation/de/GNUmakefile | 6 +- Documentation/de/essay.tely | 70 + Documentation/de/essay/GNUmakefile | 5 + Documentation/de/essay/engraving.itely | 1831 ++ Documentation/de/essay/literature.itely | 103 + Documentation/de/extending.tely | 79 + Documentation/de/extending/GNUmakefile | 4 + .../de/extending/programming-interface.itely | 1122 + .../de/extending/scheme-tutorial.itely | 1466 ++ Documentation/de/included/GNUmakefile | 10 + Documentation/de/included/authors.itexi | 452 + .../de/included/generating-output.itexi | 241 + Documentation/de/included/helpus.itexi | 169 + Documentation/de/index.html.in | 148 - Documentation/de/learning.tely | 122 + Documentation/de/learning/GNUmakefile | 5 + .../de/learning/common-notation.itely | 1524 ++ Documentation/de/learning/fundamental.itely | 3474 +++ Documentation/de/learning/preface.itely | 67 + Documentation/de/learning/templates.itely | 258 + Documentation/de/learning/tutorial.itely | 848 + Documentation/de/learning/tweaks.itely | 4507 ++++ Documentation/de/macros.itexi | 819 + Documentation/de/notation.tely | 130 + Documentation/de/notation/GNUmakefile | 5 + Documentation/de/notation/ancient.itely | 2797 +++ .../de/notation/changing-defaults.itely | 4075 ++++ Documentation/de/notation/cheatsheet.itely | 303 + Documentation/de/notation/chords.itely | 1174 + Documentation/de/notation/contemporary.itely | 255 + Documentation/de/notation/editorial.itely | 722 + Documentation/de/notation/expressive.itely | 1355 ++ .../de/notation/fretted-strings.itely | 1939 ++ Documentation/de/notation/input.itely | 2394 ++ Documentation/de/notation/keyboards.itely | 718 + .../de/notation/notation-appendices.itely | 1435 ++ Documentation/de/notation/notation.itely | 39 + Documentation/de/notation/percussion.itely | 628 + Documentation/de/notation/pitches.itely | 3073 +++ Documentation/de/notation/repeats.itely | 738 + Documentation/de/notation/rhythms.itely | 3506 +++ Documentation/de/notation/simultaneous.itely | 1106 + Documentation/de/notation/spacing.itely | 3638 +++ Documentation/de/notation/specialist.itely | 43 + Documentation/de/notation/staff.itely | 1473 ++ Documentation/de/notation/text.itely | 1627 ++ .../de/notation/unfretted-strings.itely | 220 + Documentation/de/notation/vocal.itely | 3321 +++ Documentation/de/notation/wind.itely | 476 + Documentation/de/notation/world.itely | 605 + Documentation/de/search-box.ihtml | 21 + Documentation/de/texidocs/GNUmakefile | 5 + .../accordion-discant-symbols.texidoc | 7 + .../texidocs/adding-ambitus-per-voice.texidoc | 7 + ...ng-bar-lines-to-chordnames-context.texidoc | 7 + ...g-orchestral-cues-to-a-vocal-score.texidoc | 19 + ...olta-brackets-to-additional-staves.texidoc | 10 + ...itional-voices-to-avoid-collisions.texidoc | 10 + ...sting-the-shape-of-falls-and-doits.texidoc | 7 + .../de/texidocs/aligning-bar-numbers.texidoc | 13 + ...arks-with-various-notation-objects.texidoc | 16 + ...ngs-to-be-printed-inside-the-staff.texidoc | 7 + .../ambitus-with-multiple-voices.texidoc | 7 + ...n-transcription-of-gregorian-music.texidoc | 10 + ...rn-transcription-of-mensural-music.texidoc | 14 + .../texidocs/anglican-psalm-template.texidoc | 10 + ...depending-on-the-step-of-the-scale.texidoc | 21 + .../de/texidocs/arabic-improvisation.texidoc | 12 + .../beam-endings-in-score-context.texidoc | 10 + .../beam-grouping-in-7-8-time.texidoc | 10 + .../texidocs/beams-across-line-breaks.texidoc | 9 + .../changing--flageolet-mark-size.texidoc | 7 + .../texidocs/changing-beam-knee-gap.texidoc | 14 + .../texidocs/changing-chord-separator.texidoc | 7 + ...anging-form-of-multi-measure-rests.texidoc | 11 + .../changing-partcombine-texts.texidoc | 7 + ...d-spanner-styles-for-text-dynamics.texidoc | 11 + .../changing-the-breath-mark-symbol.texidoc | 8 + ...itions-of-figured-bass-alterations.texidoc | 8 + ...ging-the-size-of-woodwind-diagrams.texidoc | 9 + ...the-tempo-without-a-metronome-mark.texidoc | 8 + ...ture-without-affecting-the-beaming.texidoc | 13 + .../changing-the-tuplet-number.texidoc | 11 + .../texidocs/chant-or-psalms-notation.texidoc | 9 + .../chord-glissando-in-tablature.texidoc | 10 + .../de/texidocs/chord-name-exceptions.texidoc | 7 + .../de/texidocs/chord-name-major7.texidoc | 9 + .../chordchanges-for-fretboards.texidoc | 8 + ...bining-two-parts-on-the-same-staff.texidoc | 19 + .../texidocs/compound-time-signatures.texidoc | 12 + ...ting-signs,-measure-grouping-signs.texidoc | 17 + .../texidocs/contemporary-glissando.texidoc | 7 + ...-the-placement-of-chord-fingerings.texidoc | 6 + ...g-the-vertical-ordering-of-scripts.texidoc | 14 + .../texidocs/creating-a-delayed-turn.texidoc | 11 + ...s-across-notes-in-different-voices.texidoc | 8 + ...s-staff-arpeggios-in-a-piano-staff.texidoc | 8 + ...-staff-arpeggios-in-other-contexts.texidoc | 9 + ...ing-metronome-marks-in-markup-mode.texidoc | 8 + ...ustomizing-fretboard-fret-diagrams.texidoc | 11 + .../customizing-markup-fret-diagrams.texidoc | 9 + ...ms-on-the-center-line-of-the-staff.texidoc | 7 + ...d-fretboards-for-other-instruments.texidoc | 17 + ...et-with-only-one-staff-in-a-system.texidoc | 13 + ...s-for-each-note-including-naturals.texidoc | 12 + ...namics-custom-text-spanner-postfix.texidoc | 11 + .../dynamics-text-spanner-postfix.texidoc | 13 + .../texidocs/engraving-ties-manually.texidoc | 12 + ...lets-using-only-one--times-command.texidoc | 16 + ...cations,-and-right-hand-fingerings.texidoc | 7 + .../texidocs/flat-flags-and-beam-nibs.texidoc | 30 + .../forcing-horizontal-shift-of-notes.texidoc | 8 + .../formatting-lyrics-syllables.texidoc | 7 + .../fretboards-alternate-tables.texidoc | 19 + ...tted-string-harmonics-in-tablature.texidoc | 5 + ...aphical-and-text-woodwind-diagrams.texidoc | 12 + ...d-lines--changing-their-appearance.texidoc | 7 + .../de/texidocs/grouping-beats.texidoc | 9 + .../de/texidocs/guitar-strum-rhythms.texidoc | 9 + ...he-extender-line-for-text-dynamics.texidoc | 8 + .../de/texidocs/hymn-template.texidoc | 11 + ...staff-chords-with-arpeggio-bracket.texidoc | 12 + .../de/texidocs/inserting-a-caesura.texidoc | 7 + .../texidocs/isolated-percent-repeats.texidoc | 8 + .../de/texidocs/jazz-combo-template.texidoc | 10 + .../de/texidocs/lyrics-alignment.texidoc | 12 + .../lyrics-old-spacing-settings.texidoc | 11 + .../de/texidocs/makam-example.texidoc | 10 + ...-slurs-with-complex-dash-structure.texidoc | 19 + ...taff-lines-thicker-than-the-others.texidoc | 10 + ...ayout-bar-lines-between-the-staves.texidoc | 9 + ...or-articulation-shorthand-notation.texidoc | 13 + .../multi-measure-rest-markup.texidoc | 17 + .../de/texidocs/nesting-staves.texidoc | 15 + .../non-default-tuplet-numbers.texidoc | 9 + .../non-traditional-key-signatures.texidoc | 22 + ...open-string-harmonics-in-tablature.texidoc | 5 + ...rchestra,-choir-and-piano-template.texidoc | 14 + Documentation/de/texidocs/ottava-text.texidoc | 11 + .../partcombine-and-autobeamoff.texidoc | 31 + .../percent-repeat-count-visibility.texidoc | 6 + .../texidocs/percent-repeat-counter.texidoc | 7 + ...-line-breaks-within-beamed-tuplets.texidoc | 11 + .../de/texidocs/piano-template-simple.texidoc | 6 + ...no-template-with-centered-dynamics.texidoc | 8 + ...iano-template-with-centered-lyrics.texidoc | 7 + ...no-template-with-melody-and-lyrics.texidoc | 8 + ...placement-of-right-hand-fingerings.texidoc | 8 + .../texidocs/polyphony-in-tablature.texidoc | 7 + ...ng-grace-notes-with-floating-space.texidoc | 12 + .../positioning-multi-measure-rests.texidoc | 12 + ...itioning-text-markups-inside-slurs.texidoc | 7 + ...als-from-being-automatically-added.texidoc | 10 + ...ted-when-the-key-signature-changes.texidoc | 9 + ...t-sign-at-the-beginning-of-a-piece.texidoc | 7 + ...g-bar-numbers-at-regular-intervals.texidoc | 11 + ...ar-numbers-inside-boxes-or-circles.texidoc | 8 + ...-hairpins-using-al-niente-notation.texidoc | 9 + ...ks-at-the-end-of-a-line-or-a-score.texidoc | 12 + .../printing-marks-on-every-staff.texidoc | 7 + ...nd-rehearsal-marks-below-the-staff.texidoc | 8 + ...e-bar-number-for-the-first-measure.texidoc | 13 + ...g-another-voice-with-transposition.texidoc | 10 + .../de/texidocs/quoting-another-voice.texidoc | 13 + ...efining-grace-note-global-defaults.texidoc | 14 + .../removing-bar-numbers-from-a-score.texidoc | 10 + .../removing-the-first-empty-line.texidoc | 15 + Documentation/de/texidocs/rest-styles.texidoc | 8 + .../reverting-default-beam-endings.texidoc | 10 + .../satb-choir-template---four-staves.texidoc | 8 + ...ting-hairpin-behavior-at-bar-lines.texidoc | 8 + ...ing-the-minimum-length-of-hairpins.texidoc | 8 + .../shortening-volta-brackets.texidoc | 9 + .../showing-chords-at-changes.texidoc | 7 + .../de/texidocs/simple-lead-sheet.texidoc | 6 + ...ate-with-notes,-lyrics,-and-chords.texidoc | 8 + ...aff-template-with-notes-and-chords.texidoc | 8 + ...aff-template-with-notes-and-lyrics.texidoc | 13 + ...gle-staff-template-with-only-notes.texidoc | 10 + .../de/texidocs/slides-in-tablature.texidoc | 5 + .../snap-pizzicato-bartok-pizzicato.texidoc | 11 + ...ecifying-context-with-beatgrouping.texidoc | 11 + .../stand-alone-two-column-markup.texidoc | 7 + ...tem-and-beam-behavior-in-tablature.texidoc | 8 + .../string-quartet-template-simple.texidoc | 9 + ...artet-template-with-separate-parts.texidoc | 19 + .../de/texidocs/sub-dividing-beams.texidoc | 14 + ...inimum-accidentals-smart-transpose.texidoc | 29 + .../texidocs/tweaking-clef-properties.texidoc | 32 + ...tweaking-grace-layout-within-music.texidoc | 12 + ...cket-at-the-start-of-a-staff-group.texidoc | 8 + ...racket-to-make-divisi-more-visible.texidoc | 10 + .../using-beatlength-and-beatgrouping.texidoc | 13 + ...ing-double-slurs-for-legato-chords.texidoc | 7 + .../using-ties-with-arpeggios.texidoc | 12 + ...y-aligned-dynamics-and-textscripts.texidoc | 14 + ...tically-aligning-ossias-and-lyrics.texidoc | 8 + ...ate-with-automatic-piano-reduction.texidoc | 9 + ...aligned-below-and-above-the-staves.texidoc | 9 + ...le-template-with-verse-and-refrain.texidoc | 11 + .../texidocs/vocal-ensemble-template.texidoc | 10 + .../de/texidocs/volta-below-chords.texidoc | 8 + .../woodwind-diagrams-key-lists.texidoc | 10 + .../woodwind-diagrams-listing.texidoc | 10 + Documentation/de/translations.html.in | 427 - Documentation/de/translations.itexi | 1584 ++ .../de/translations.template.html.in | 49 - Documentation/de/usage.tely | 87 + Documentation/de/usage/GNUmakefile | 5 + Documentation/de/usage/external.itely | 661 + Documentation/de/usage/lilypond-book.itely | 1336 ++ Documentation/de/usage/running.itely | 876 + Documentation/de/usage/setup.itely | 357 + Documentation/de/usage/suggestions.itely | 638 + Documentation/de/usage/updating.itely | 270 + Documentation/de/user/GNUmakefile | 4 - Documentation/de/user/ancient.itely | 2067 -- Documentation/de/user/changing-defaults.itely | 391 - Documentation/de/user/cheatsheet.itely | 298 - Documentation/de/user/chords.itely | 1111 - Documentation/de/user/converters.itely | 378 - Documentation/de/user/dedication.itely | 18 - Documentation/de/user/editorial.itely | 689 - Documentation/de/user/expressive.itely | 1056 - Documentation/de/user/fretted-strings.itely | 1354 -- Documentation/de/user/fundamental.itely | 3136 --- Documentation/de/user/input.itely | 2025 -- Documentation/de/user/install.itely | 90 - Documentation/de/user/introduction.itely | 1169 - Documentation/de/user/keyboards.itely | 661 - Documentation/de/user/lilypond-book.itely | 1109 - Documentation/de/user/lilypond-learning.tely | 207 - Documentation/de/user/lilypond-program.tely | 202 - Documentation/de/user/lilypond.tely | 270 - Documentation/de/user/literature.itely | 84 - Documentation/de/user/macros.itexi | 366 - .../de/user/notation-appendices.itely | 667 - Documentation/de/user/notation.itely | 35 - Documentation/de/user/percussion.itely | 609 - Documentation/de/user/pitches.itely | 2478 -- Documentation/de/user/preface.itely | 65 - .../de/user/programming-interface.itely | 226 - Documentation/de/user/repeats.itely | 542 - Documentation/de/user/rhythms.itely | 2943 --- Documentation/de/user/running.itely | 694 - Documentation/de/user/scheme-tutorial.itely | 296 - Documentation/de/user/setup.itely | 345 - Documentation/de/user/simultaneous.itely | 863 - Documentation/de/user/spacing.itely | 343 - Documentation/de/user/specialist.itely | 37 - Documentation/de/user/staff.itely | 1390 -- Documentation/de/user/templates.itely | 326 - Documentation/de/user/text.itely | 1437 -- Documentation/de/user/tutorial.itely | 2161 -- Documentation/de/user/tweaks.itely | 4065 ---- Documentation/de/user/unfretted-strings.itely | 194 - Documentation/de/user/vocal.itely | 1361 -- Documentation/de/user/wind.itely | 239 - Documentation/de/user/working.itely | 861 - Documentation/de/user/world.itely | 391 - Documentation/de/web.texi | 319 + Documentation/de/web/GNUmakefile | 4 + Documentation/de/web/community.itexi | 874 + Documentation/de/web/download.itexi | 611 + Documentation/de/web/introduction.itexi | 1297 ++ Documentation/de/web/manuals.itexi | 609 + Documentation/devel/GNUmakefile | 39 - Documentation/devel/compiling.itexi | 73 - Documentation/devel/contrib-guide.texi | 124 - .../devel/doc-translation-list.itexi | 85 - Documentation/devel/doc-work.itexi | 1676 -- Documentation/devel/git-starting.itexi | 904 - Documentation/devel/index.html.in | 92 - Documentation/devel/issues.itexi | 38 - Documentation/devel/lsr-work.itexi | 260 - Documentation/devel/programming-work.itexi | 669 - Documentation/devel/release-work.itexi | 183 - Documentation/devel/website-work.itexi | 22 - Documentation/es/GNUmakefile | 7 +- Documentation/es/changes.tely | 723 + Documentation/es/essay.tely | 71 + Documentation/es/essay/GNUmakefile | 5 + Documentation/es/essay/engraving.itely | 1840 ++ Documentation/es/essay/literature.itely | 101 + Documentation/es/extending.tely | 78 + Documentation/es/extending/GNUmakefile | 5 + .../es/extending/programming-interface.itely | 1085 + .../es/extending/scheme-tutorial.itely | 1470 ++ Documentation/es/included/GNUmakefile | 10 + .../es/included/generating-output.itexi | 242 + Documentation/es/included/helpus.itexi | 162 + Documentation/es/index.html.in | 143 - Documentation/es/learning.tely | 84 + Documentation/es/learning/GNUmakefile | 5 + .../es/learning/common-notation.itely | 1527 ++ Documentation/es/learning/fundamental.itely | 3336 +++ Documentation/es/learning/preface.itely | 65 + Documentation/es/learning/templates.itely | 174 + Documentation/es/learning/tutorial.itely | 826 + Documentation/es/learning/tweaks.itely | 4320 ++++ Documentation/es/macros.itexi | 825 + Documentation/es/notation.tely | 126 + Documentation/es/notation/GNUmakefile | 5 + Documentation/es/notation/ancient.itely | 2742 +++ .../es/notation/changing-defaults.itely | 3947 ++++ Documentation/es/notation/cheatsheet.itely | 301 + Documentation/es/notation/chords.itely | 1201 + Documentation/es/notation/contemporary.itely | 246 + Documentation/es/notation/editorial.itely | 733 + Documentation/es/notation/expressive.itely | 1368 ++ .../es/notation/fretted-strings.itely | 1971 ++ Documentation/es/notation/input.itely | 2664 +++ Documentation/es/notation/keyboards.itely | 729 + .../es/notation/notation-appendices.itely | 1482 ++ Documentation/es/notation/notation.itely | 37 + Documentation/es/notation/percussion.itely | 645 + Documentation/es/notation/pitches.itely | 3043 +++ Documentation/es/notation/repeats.itely | 750 + Documentation/es/notation/rhythms.itely | 3511 +++ Documentation/es/notation/simultaneous.itely | 1105 + Documentation/es/notation/spacing.itely | 3621 +++ Documentation/es/notation/specialist.itely | 41 + Documentation/es/notation/staff.itely | 1453 ++ Documentation/es/notation/text.itely | 1608 ++ .../es/notation/unfretted-strings.itely | 238 + Documentation/es/notation/vocal.itely | 3364 +++ Documentation/es/notation/wind.itely | 443 + Documentation/es/notation/world.itely | 612 + Documentation/es/search-box.ihtml | 20 + Documentation/es/texidocs/GNUmakefile | 5 + .../accordion-discant-symbols.texidoc | 9 + ...ured-bass-above-or-below-the-notes.texidoc | 17 + .../texidocs/adding-ambitus-per-voice.texidoc | 7 + ...ing-an-extra-staff-at-a-line-break.texidoc | 11 + .../es/texidocs/adding-an-extra-staff.texidoc | 7 + ...ng-bar-lines-to-chordnames-context.texidoc | 9 + ...sing-tuplet-and-non-tuplet-rhythms.texidoc | 1 + .../es/texidocs/adding-drum-parts.texidoc | 13 + .../adding-fingerings-to-tablatures.texidoc | 8 + ...g-orchestral-cues-to-a-vocal-score.texidoc | 22 + ...an-expressive-mark-or-chordal-note.texidoc | 7 + ...adding-the-current-date-to-a-score.texidoc | 7 + ...olta-brackets-to-additional-staves.texidoc | 12 + ...itional-voices-to-avoid-collisions.texidoc | 10 + .../adjusting-grace-note-spacing.texidoc | 8 + .../adjusting-lyrics-vertical-spacing.texidoc | 8 + ...sting-the-shape-of-falls-and-doits.texidoc | 9 + ...ing-and-centering-instrument-names.texidoc | 11 + .../es/texidocs/aligning-bar-numbers.texidoc | 14 + ...arks-with-various-notation-objects.texidoc | 16 + ...ngs-to-be-printed-inside-the-staff.texidoc | 12 + ...ltering-the-length-of-beamed-stems.texidoc | 17 + .../ambitus-with-multiple-voices.texidoc | 9 + .../analysis-brackets-above-the-staff.texidoc | 1 + .../es/texidocs/ancient-fonts.texidoc | 9 + ...n-transcription-of-gregorian-music.texidoc | 10 + ...rn-transcription-of-mensural-music.texidoc | 15 + .../texidocs/ancient-time-signatures.texidoc | 6 + ...depending-on-the-step-of-the-scale.texidoc | 24 + .../es/texidocs/arabic-improvisation.texidoc | 12 + .../es/texidocs/asymmetric-slurs.texidoc | 9 + .../automatic-beam-subdivisions.texidoc | 1 + ...g-collisions-with-chord-fingerings.texidoc | 14 + .../beam-endings-in-score-context.texidoc | 10 + .../beam-grouping-in-7-8-time.texidoc | 11 + .../texidocs/beams-across-line-breaks.texidoc | 9 + ...-lines-using-the--whiteout-command.texidoc | 1 + .../texidocs/broken-crescendo-hairpin.texidoc | 1 + .../caesura-railtracks-with-fermata.texidoc | 9 + ...center-text-below-hairpin-dynamics.texidoc | 9 + .../changing--flageolet-mark-size.texidoc | 8 + ...ing-a-single-notes-size-in-a-chord.texidoc | 12 + .../texidocs/changing-beam-knee-gap.texidoc | 14 + .../texidocs/changing-chord-separator.texidoc | 8 + ...anging-form-of-multi-measure-rests.texidoc | 11 + .../changing-fret-orientations.texidoc | 12 + ...di-output-to-one-channel-per-voice.texidoc | 18 + .../changing-partcombine-texts.texidoc | 9 + ...d-spanner-styles-for-text-dynamics.texidoc | 15 + .../texidocs/changing-the-ambitus-gap.texidoc | 8 + ...lur-from-solid-to-dotted-or-dashed.texidoc | 7 + .../changing-the-breath-mark-symbol.texidoc | 9 + ...-to-german-or-semi-german-notation.texidoc | 9 + ...mber-of-augmentation-dots-per-note.texidoc | 9 + ...itions-of-figured-bass-alterations.texidoc | 10 + ...ging-the-size-of-woodwind-diagrams.texidoc | 10 + ...the-tempo-without-a-metronome-mark.texidoc | 9 + ...ging-the-text-for-sustain-markings.texidoc | 12 + ...ture-without-affecting-the-beaming.texidoc | 13 + .../changing-the-tuplet-number.texidoc | 12 + ...tric-section-using--scaledurations.texidoc | 1 + .../texidocs/chant-or-psalms-notation.texidoc | 7 + .../chord-glissando-in-tablature.texidoc | 12 + .../es/texidocs/chord-name-exceptions.texidoc | 9 + .../es/texidocs/chord-name-major7.texidoc | 8 + .../chordchanges-for-fretboards.texidoc | 9 + .../es/texidocs/clip-systems.texidoc | 26 + Documentation/es/texidocs/clusters.texidoc | 7 + ...mbining-dynamics-with-markup-texts.texidoc | 8 + ...bining-two-parts-on-the-same-staff.texidoc | 22 + .../texidocs/compound-time-signatures.texidoc | 14 + ...ting-signs,-measure-grouping-signs.texidoc | 28 + .../texidocs/contemporary-glissando.texidoc | 8 + ...nner-visibility-after-a-line-break.texidoc | 21 + ...-the-placement-of-chord-fingerings.texidoc | 12 + ...g-the-vertical-ordering-of-scripts.texidoc | 16 + ...trolling-tuplet-bracket-visibility.texidoc | 14 + .../texidocs/creating-a-delayed-turn.texidoc | 15 + ...quence-of-notes-on-various-pitches.texidoc | 1 + ...s-across-notes-in-different-voices.texidoc | 10 + .../es/texidocs/creating-blank-staves.texidoc | 10 + ...s-staff-arpeggios-in-a-piano-staff.texidoc | 9 + ...-staff-arpeggios-in-other-contexts.texidoc | 10 + ...ing-metronome-marks-in-markup-mode.texidoc | 8 + ...eating-real-parenthesized-dynamics.texidoc | 18 + ...ating-simultaneous-rehearsal-marks.texidoc | 1 + .../creating-slurs-across-voices.texidoc | 1 + .../texidocs/creating-text-spanners.texidoc | 1 + .../es/texidocs/cross-staff-tremolos.texidoc | 12 + Documentation/es/texidocs/custodes.texidoc | 6 + ...ustomizing-fretboard-fret-diagrams.texidoc | 13 + .../customizing-markup-fret-diagrams.texidoc | 10 + ...ms-on-the-center-line-of-the-staff.texidoc | 9 + ...ngraver-in-scheme-ambitus-engraver.texidoc | 12 + ...d-fretboards-for-other-instruments.texidoc | 19 + ...et-with-only-one-staff-in-a-system.texidoc | 16 + .../displaying-complex-chords.texidoc | 8 + .../texidocs/displaying-grob-ancestry.texidoc | 69 + ...s-for-each-note-including-naturals.texidoc | 15 + ...namics-custom-text-spanner-postfix.texidoc | 11 + .../dynamics-text-spanner-postfix.texidoc | 14 + ...tive-postscript-in-a--markup-block.texidoc | 7 + .../es/texidocs/engravers-one-by-one.texidoc | 28 + .../texidocs/engraving-ties-manually.texidoc | 11 + ...lets-using-only-one--times-command.texidoc | 18 + .../faking-a-hammer-in-tablatures.texidoc | 9 + ...ering-symbols-for-wind-instruments.texidoc | 7 + ...cations,-and-right-hand-fingerings.texidoc | 9 + .../es/texidocs/flamenco-notation.texidoc | 39 + .../texidocs/flat-flags-and-beam-nibs.texidoc | 35 + .../forcing-horizontal-shift-of-notes.texidoc | 11 + .../forcing-hyphens-to-be-shown.texidoc | 11 + .../fretboards-alternate-tables.texidoc | 18 + ...tted-string-harmonics-in-tablature.texidoc | 7 + .../texidocs/generating-random-notes.texidoc | 1 + ...aphical-and-text-woodwind-diagrams.texidoc | 9 + ...d-lines--changing-their-appearance.texidoc | 8 + ...-rhythms-and-notes-synchronization.texidoc | 1 + .../es/texidocs/grouping-beats.texidoc | 8 + .../es/texidocs/guitar-slides.texidoc | 12 + .../es/texidocs/guitar-strum-rhythms.texidoc | 8 + ...airpins-with-different-line-styles.texidoc | 9 + ...notes-at-the-start-of-a-new-system.texidoc | 10 + ...he-extender-line-for-text-dynamics.texidoc | 9 + .../es/texidocs/hymn-template.texidoc | 9 + Documentation/es/texidocs/incipit.texidoc | 7 + ...staff-chords-with-arpeggio-bracket.texidoc | 13 + .../es/texidocs/inserting-a-caesura.texidoc | 9 + .../texidocs/isolated-percent-repeats.texidoc | 7 + .../es/texidocs/jazz-combo-template.texidoc | 11 + .../keep-change-clefs-full-sized.texidoc | 10 + .../letter-tablature-formatting.texidoc | 7 + Documentation/es/texidocs/line-arrows.texidoc | 7 + .../es/texidocs/lyrics-alignment.texidoc | 10 + .../es/texidocs/makam-example.texidoc | 13 + ...-slurs-with-complex-dash-structure.texidoc | 28 + ...taff-lines-thicker-than-the-others.texidoc | 11 + .../es/texidocs/measure-counter.texidoc | 8 + ...ayout-bar-lines-between-the-staves.texidoc | 12 + .../es/texidocs/modern-tab-text-clef.texidoc | 7 + ...or-articulation-shorthand-notation.texidoc | 15 + .../moving-dotted-notes-in-polyphony.texidoc | 11 + .../moving-slur-positions-vertically.texidoc | 18 + .../multi-measure-rest-markup.texidoc | 19 + .../es/texidocs/nesting-staves.texidoc | 18 + .../non-default-tuplet-numbers.texidoc | 11 + .../non-traditional-key-signatures.texidoc | 28 + .../numbers-as-easy-note-heads.texidoc | 15 + ...open-string-harmonics-in-tablature.texidoc | 6 + ...rchestra,-choir-and-piano-template.texidoc | 10 + Documentation/es/texidocs/ottava-text.texidoc | 13 + .../partcombine-and-autobeamoff.texidoc | 38 + .../percent-repeat-count-visibility.texidoc | 9 + .../texidocs/percent-repeat-counter.texidoc | 9 + ...-line-breaks-within-beamed-tuplets.texidoc | 10 + .../es/texidocs/piano-template-simple.texidoc | 8 + ...no-template-with-centered-dynamics.texidoc | 10 + ...iano-template-with-centered-lyrics.texidoc | 8 + ...no-template-with-melody-and-lyrics.texidoc | 8 + ...placement-of-right-hand-fingerings.texidoc | 10 + .../texidocs/polyphony-in-tablature.texidoc | 8 + .../es/texidocs/positioning-arpeggios.texidoc | 9 + ...at-the-height-of-normal-note-beams.texidoc | 13 + ...ng-grace-notes-with-floating-space.texidoc | 15 + .../positioning-multi-measure-rests.texidoc | 13 + ...itioning-text-markups-inside-slurs.texidoc | 10 + ...als-from-being-automatically-added.texidoc | 13 + ...ted-when-the-key-signature-changes.texidoc | 12 + ...t-sign-at-the-beginning-of-a-piece.texidoc | 8 + ...g-bar-numbers-at-regular-intervals.texidoc | 13 + ...ar-numbers-inside-boxes-or-circles.texidoc | 9 + ...-hairpins-using-al-niente-notation.texidoc | 9 + ...rinting-marks-at-the-end-of-a-line.texidoc | 10 + .../printing-marks-on-every-staff.texidoc | 9 + ...nd-rehearsal-marks-below-the-staff.texidoc | 13 + ...-with-and-without-an-octave-marker.texidoc | 10 + ...e-bar-number-for-the-first-measure.texidoc | 15 + ...g-another-voice-with-transposition.texidoc | 13 + .../es/texidocs/quoting-another-voice.texidoc | 19 + .../texidocs/recorder-fingering-chart.texidoc | 9 + ...efining-grace-note-global-defaults.texidoc | 16 + .../removing-bar-numbers-from-a-score.texidoc | 11 + ...ffgroup,-pianostaff,-or-grandstaff.texidoc | 10 + .../removing-the-first-empty-line.texidoc | 17 + Documentation/es/texidocs/rest-styles.texidoc | 5 + .../reverting-default-beam-endings.texidoc | 9 + .../es/texidocs/script-chart.texidoc | 5 + ...ting-hairpin-behavior-at-bar-lines.texidoc | 10 + .../setting-system-separators.texidoc | 11 + ...he-double-repeat-default-for-volte.texidoc | 11 + ...ing-the-minimum-length-of-hairpins.texidoc | 9 + .../shortening-volta-brackets.texidoc | 11 + .../showing-chords-at-changes.texidoc | 8 + .../es/texidocs/simple-lead-sheet.texidoc | 8 + ...ate-with-notes,-lyrics,-and-chords.texidoc | 8 + ...th-notes,-lyrics,-chords-and-frets.texidoc | 1 + ...aff-template-with-notes-and-chords.texidoc | 9 + ...aff-template-with-notes-and-lyrics.texidoc | 11 + ...gle-staff-template-with-only-notes.texidoc | 9 + .../es/texidocs/slides-in-tablature.texidoc | 9 + .../snap-pizzicato-bartok-pizzicato.texidoc | 12 + .../stand-alone-two-column-markup.texidoc | 8 + ...tem-and-beam-behavior-in-tablature.texidoc | 9 + .../string-quartet-template-simple.texidoc | 8 + ...artet-template-with-separate-parts.texidoc | 21 + .../es/texidocs/subdividing-beams.texidoc | 22 + ...s-a-number-instead-of-the-fraction.texidoc | 14 + ...tion-of-ancient-music-with-incipit.texidoc | 1 + ...inimum-accidentals-smart-transpose.texidoc | 31 + .../texidocs/tweaking-clef-properties.texidoc | 35 + ...tweaking-grace-layout-within-music.texidoc | 16 + ...cket-at-the-start-of-a-staff-group.texidoc | 9 + .../using-alternative-flag-styles.texidoc | 12 + ...racket-to-make-divisi-more-visible.texidoc | 10 + ...ing-double-slurs-for-legato-chords.texidoc | 8 + ...ace-note-slashes-with-normal-heads.texidoc | 11 + ...object-to-access-grobs-with--tweak.texidoc | 39 + .../using-the-whiteout-property.texidoc | 24 + .../using-ties-with-arpeggios.texidoc | 12 + ...y-aligned-dynamics-and-textscripts.texidoc | 15 + ...ing-dynamics-across-multiple-notes.texidoc | 1 + ...tically-aligning-ossias-and-lyrics.texidoc | 9 + ...ring-paired-figured-bass-extenders.texidoc | 12 + ...ate-with-automatic-piano-reduction.texidoc | 13 + ...aligned-below-and-above-the-staves.texidoc | 10 + ...le-template-with-verse-and-refrain.texidoc | 12 + .../texidocs/vocal-ensemble-template.texidoc | 11 + .../es/texidocs/volta-below-chords.texidoc | 10 + .../woodwind-diagrams-key-lists.texidoc | 14 + .../woodwind-diagrams-listing.texidoc | 8 + Documentation/es/topdocs/GNUmakefile | 8 - Documentation/es/topdocs/NEWS.tely | 602 - Documentation/es/translations.html.in | 437 - Documentation/es/translations.itexi | 1642 ++ .../es/translations.template.html.in | 45 - Documentation/es/usage.tely | 86 + Documentation/es/usage/GNUmakefile | 5 + Documentation/es/usage/external.itely | 656 + Documentation/es/usage/lilypond-book.itely | 1348 ++ Documentation/es/usage/running.itely | 857 + Documentation/es/usage/suggestions.itely | 628 + Documentation/es/usage/updating.itely | 278 + Documentation/es/user/GNUmakefile | 4 - Documentation/es/user/ancient.itely | 2519 -- Documentation/es/user/changing-defaults.itely | 3155 --- Documentation/es/user/cheatsheet.itely | 298 - Documentation/es/user/chords.itely | 1134 - Documentation/es/user/converters.itely | 360 - Documentation/es/user/dedication.itely | 17 - Documentation/es/user/editorial.itely | 704 - Documentation/es/user/expressive.itely | 1046 - Documentation/es/user/fretted-strings.itely | 1360 -- Documentation/es/user/fundamental.itely | 2994 --- Documentation/es/user/input.itely | 2035 -- Documentation/es/user/install.itely | 90 - Documentation/es/user/introduction.itely | 1187 - Documentation/es/user/keyboards.itely | 674 - Documentation/es/user/lilypond-book.itely | 1104 - Documentation/es/user/lilypond-learning.tely | 207 - Documentation/es/user/lilypond-program.tely | 202 - Documentation/es/user/lilypond.tely | 274 - Documentation/es/user/literature.itely | 84 - Documentation/es/user/macros.itexi | 344 - .../es/user/notation-appendices.itely | 671 - Documentation/es/user/notation.itely | 35 - Documentation/es/user/percussion.itely | 621 - Documentation/es/user/pitches.itely | 2441 -- Documentation/es/user/preface.itely | 63 - .../es/user/programming-interface.itely | 1530 -- Documentation/es/user/repeats.itely | 566 - Documentation/es/user/rhythms.itely | 2941 --- Documentation/es/user/running.itely | 676 - Documentation/es/user/scheme-tutorial.itely | 295 - Documentation/es/user/setup.itely | 340 - Documentation/es/user/simultaneous.itely | 855 - Documentation/es/user/spacing.itely | 2680 --- Documentation/es/user/specialist.itely | 37 - Documentation/es/user/staff.itely | 1340 -- Documentation/es/user/templates.itely | 243 - Documentation/es/user/text.itely | 1405 -- Documentation/es/user/tutorial.itely | 2146 -- Documentation/es/user/tweaks.itely | 3868 ---- Documentation/es/user/unfretted-strings.itely | 213 - Documentation/es/user/vocal.itely | 1327 -- Documentation/es/user/wind.itely | 216 - Documentation/es/user/working.itely | 829 - Documentation/es/user/world.itely | 391 - Documentation/es/web.texi | 321 + Documentation/es/web/GNUmakefile | 5 + Documentation/es/web/community.itexi | 862 + Documentation/es/web/download.itexi | 619 + Documentation/es/web/introduction.itexi | 1313 ++ Documentation/es/web/manuals.itexi | 600 + Documentation/es/web/news-front.itexi | 96 + Documentation/es/web/news.itexi | 4282 ++++ Documentation/essay.tely | 69 + Documentation/essay/GNUmakefile | 40 + Documentation/essay/colorado.bib | 500 + Documentation/essay/computer-notation.bib | 660 + Documentation/essay/engraving.itely | 1734 ++ Documentation/essay/engravingbib.bib | 323 + Documentation/essay/literature.itely | 98 + Documentation/extending.tely | 75 + Documentation/extending/GNUmakefile | 7 + .../extending/programming-interface.itely | 1019 + Documentation/extending/scheme-tutorial.itely | 1406 ++ Documentation/fdl.itexi | 511 + Documentation/fr/GNUmakefile | 6 +- Documentation/fr/essay.tely | 72 + Documentation/fr/essay/GNUmakefile | 5 + Documentation/fr/essay/engraving.itely | 1840 ++ Documentation/fr/essay/literature.itely | 115 + Documentation/fr/extending/GNUmakefile | 5 + .../fr/extending/programming-interface.itely | 393 + Documentation/fr/included/GNUmakefile | 10 + .../fr/included/generating-output.itexi | 236 + Documentation/fr/included/helpus.itexi | 172 + Documentation/fr/index.html.in | 142 - Documentation/fr/learning.tely | 88 + Documentation/fr/learning/GNUmakefile | 5 + .../fr/learning/common-notation.itely | 1523 ++ Documentation/fr/learning/fundamental.itely | 3299 +++ Documentation/fr/learning/preface.itely | 69 + Documentation/fr/learning/templates.itely | 174 + Documentation/fr/learning/tutorial.itely | 817 + Documentation/fr/learning/tweaks.itely | 4336 ++++ Documentation/fr/macros.itexi | 846 + Documentation/fr/notation.tely | 129 + Documentation/fr/notation/GNUmakefile | 5 + Documentation/fr/notation/ancient.itely | 2213 ++ .../fr/notation/changing-defaults.itely | 1703 ++ Documentation/fr/notation/cheatsheet.itely | 302 + Documentation/fr/notation/chords.itely | 665 + Documentation/fr/notation/editorial.itely | 738 + Documentation/fr/notation/expressive.itely | 1365 ++ .../fr/notation/fretted-strings.itely | 1535 ++ Documentation/fr/notation/input.itely | 2447 ++ Documentation/fr/notation/keyboards.itely | 726 + .../fr/notation/notation-appendices.itely | 1071 + Documentation/fr/notation/notation.itely | 37 + Documentation/fr/notation/percussion.itely | 339 + Documentation/fr/notation/pitches.itely | 2758 +++ Documentation/fr/notation/repeats.itely | 708 + Documentation/fr/notation/rhythms.itely | 3429 +++ Documentation/fr/notation/simultaneous.itely | 968 + Documentation/fr/notation/spacing.itely | 3662 +++ Documentation/fr/notation/specialist.itely | 41 + Documentation/fr/notation/staff.itely | 1431 ++ Documentation/fr/notation/text.itely | 1626 ++ .../fr/notation/unfretted-strings.itely | 233 + Documentation/fr/notation/vocal.itely | 3363 +++ Documentation/fr/notation/wind.itely | 478 + Documentation/fr/notation/world.itely | 536 + Documentation/fr/search-box.ihtml | 20 + Documentation/fr/texidocs/GNUmakefile | 5 + ...ured-bass-above-or-below-the-notes.texidoc | 2 + .../texidocs/adding-ambitus-per-voice.texidoc | 8 + .../fr/texidocs/adding-drum-parts.texidoc | 14 + .../adding-fingerings-to-tablatures.texidoc | 7 + ...g-orchestral-cues-to-a-vocal-score.texidoc | 19 + ...adding-the-current-date-to-a-score.texidoc | 7 + ...olta-brackets-to-additional-staves.texidoc | 11 + ...itional-voices-to-avoid-collisions.texidoc | 10 + .../adjusting-lyrics-vertical-spacing.texidoc | 8 + ...sting-the-shape-of-falls-and-doits.texidoc | 8 + .../fr/texidocs/aligning-bar-numbers.texidoc | 9 + ...arks-with-various-notation-objects.texidoc | 23 + ...ngs-to-be-printed-inside-the-staff.texidoc | 8 + .../ambitus-with-multiple-voices.texidoc | 9 + .../fr/texidocs/ancient-fonts.texidoc | 7 + ...n-transcription-of-gregorian-music.texidoc | 9 + ...rn-transcription-of-mensural-music.texidoc | 12 + .../texidocs/anglican-psalm-template.texidoc | 11 + ...depending-on-the-step-of-the-scale.texidoc | 20 + ...r-two-in-4-4-or-2-2-time-signature.texidoc | 11 + .../beam-endings-in-score-context.texidoc | 8 + .../beam-grouping-in-7-8-time.texidoc | 9 + .../texidocs/beams-across-line-breaks.texidoc | 8 + .../changing--flageolet-mark-size.texidoc | 9 + .../texidocs/changing-beam-knee-gap.texidoc | 11 + ...anging-form-of-multi-measure-rests.texidoc | 9 + ...di-output-to-one-channel-per-voice.texidoc | 15 + .../changing-partcombine-texts.texidoc | 9 + ...d-spanner-styles-for-text-dynamics.texidoc | 12 + .../texidocs/changing-the-ambitus-gap.texidoc | 7 + .../changing-the-breath-mark-symbol.texidoc | 9 + ...mber-of-augmentation-dots-per-note.texidoc | 8 + ...ging-the-size-of-woodwind-diagrams.texidoc | 9 + ...the-tempo-without-a-metronome-mark.texidoc | 9 + ...ture-without-affecting-the-beaming.texidoc | 12 + .../changing-the-tuplet-number.texidoc | 10 + .../texidocs/chant-or-psalms-notation.texidoc | 8 + ...bining-two-parts-on-the-same-staff.texidoc | 20 + .../texidocs/compound-time-signatures.texidoc | 10 + ...ting-signs,-measure-grouping-signs.texidoc | 24 + .../texidocs/contemporary-glissando.texidoc | 9 + ...-the-placement-of-chord-fingerings.texidoc | 9 + ...g-the-vertical-ordering-of-scripts.texidoc | 15 + ...trolling-tuplet-bracket-visibility.texidoc | 14 + .../texidocs/creating-a-delayed-turn.texidoc | 12 + ...s-across-notes-in-different-voices.texidoc | 8 + ...s-staff-arpeggios-in-a-piano-staff.texidoc | 9 + ...-staff-arpeggios-in-other-contexts.texidoc | 9 + ...ing-metronome-marks-in-markup-mode.texidoc | 9 + .../fr/texidocs/cross-staff-tremolos.texidoc | 10 + .../customizing-markup-fret-diagrams.texidoc | 12 + ...d-fretboards-for-other-instruments.texidoc | 18 + ...et-with-only-one-staff-in-a-system.texidoc | 15 + ...s-for-each-note-including-naturals.texidoc | 14 + ...namics-custom-text-spanner-postfix.texidoc | 12 + .../dynamics-text-spanner-postfix.texidoc | 13 + .../texidocs/engraving-ties-manually.texidoc | 9 + ...lets-using-only-one--times-command.texidoc | 14 + ...ering-symbols-for-wind-instruments.texidoc | 8 + ...cations,-and-right-hand-fingerings.texidoc | 9 + .../texidocs/flat-flags-and-beam-nibs.texidoc | 30 + .../forcing-horizontal-shift-of-notes.texidoc | 10 + ...aphical-and-text-woodwind-diagrams.texidoc | 8 + ...d-lines--changing-their-appearance.texidoc | 8 + .../fr/texidocs/grouping-beats.texidoc | 7 + .../fr/texidocs/guitar-strum-rhythms.texidoc | 8 + ...notes-at-the-start-of-a-new-system.texidoc | 8 + ...he-extender-line-for-text-dynamics.texidoc | 9 + .../fr/texidocs/hymn-template.texidoc | 10 + .../fr/texidocs/inserting-a-caesura.texidoc | 9 + .../texidocs/isolated-percent-repeats.texidoc | 8 + .../fr/texidocs/jazz-combo-template.texidoc | 10 + .../fr/texidocs/lyrics-alignment.texidoc | 11 + .../lyrics-old-spacing-settings.texidoc | 12 + .../fr/texidocs/makam-example.texidoc | 10 + ...-slurs-with-complex-dash-structure.texidoc | 21 + ...taff-lines-thicker-than-the-others.texidoc | 12 + ...ayout-bar-lines-between-the-staves.texidoc | 10 + ...or-articulation-shorthand-notation.texidoc | 15 + .../multi-measure-rest-markup.texidoc | 15 + .../fr/texidocs/nesting-staves.texidoc | 16 + .../non-default-tuplet-numbers.texidoc | 8 + .../non-traditional-key-signatures.texidoc | 28 + ...rchestra,-choir-and-piano-template.texidoc | 12 + Documentation/fr/texidocs/ottava-text.texidoc | 12 + .../partcombine-and-autobeamoff.texidoc | 31 + .../percent-repeat-count-visibility.texidoc | 8 + .../texidocs/percent-repeat-counter.texidoc | 9 + ...-line-breaks-within-beamed-tuplets.texidoc | 8 + .../fr/texidocs/piano-template-simple.texidoc | 6 + ...no-template-with-centered-dynamics.texidoc | 8 + ...iano-template-with-centered-lyrics.texidoc | 8 + ...no-template-with-melody-and-lyrics.texidoc | 7 + ...placement-of-right-hand-fingerings.texidoc | 10 + .../texidocs/polyphony-in-tablature.texidoc | 9 + ...ng-grace-notes-with-floating-space.texidoc | 10 + .../positioning-multi-measure-rests.texidoc | 10 + ...itioning-text-markups-inside-slurs.texidoc | 8 + ...als-from-being-automatically-added.texidoc | 9 + ...ted-when-the-key-signature-changes.texidoc | 11 + ...t-sign-at-the-beginning-of-a-piece.texidoc | 9 + ...g-bar-numbers-at-regular-intervals.texidoc | 9 + ...ar-numbers-inside-boxes-or-circles.texidoc | 6 + ...-hairpins-using-al-niente-notation.texidoc | 9 + ...rinting-marks-at-the-end-of-a-line.texidoc | 9 + .../printing-marks-on-every-staff.texidoc | 9 + ...nd-rehearsal-marks-below-the-staff.texidoc | 10 + ...e-bar-number-for-the-first-measure.texidoc | 12 + ...g-another-voice-with-transposition.texidoc | 13 + .../fr/texidocs/quoting-another-voice.texidoc | 16 + .../texidocs/recorder-fingering-chart.texidoc | 8 + ...efining-grace-note-global-defaults.texidoc | 10 + .../removing-bar-numbers-from-a-score.texidoc | 9 + .../removing-the-first-empty-line.texidoc | 18 + Documentation/fr/texidocs/rest-styles.texidoc | 6 + .../reverting-default-beam-endings.texidoc | 8 + .../satb-choir-template---four-staves.texidoc | 9 + ...ting-hairpin-behavior-at-bar-lines.texidoc | 12 + ...he-double-repeat-default-for-volte.texidoc | 9 + ...ing-the-minimum-length-of-hairpins.texidoc | 8 + .../shortening-volta-brackets.texidoc | 10 + .../fr/texidocs/simple-lead-sheet.texidoc | 7 + ...ate-with-notes,-lyrics,-and-chords.texidoc | 7 + ...aff-template-with-notes-and-chords.texidoc | 8 + ...aff-template-with-notes-and-lyrics.texidoc | 11 + ...gle-staff-template-with-only-notes.texidoc | 9 + ...ecifying-context-with-beatgrouping.texidoc | 10 + .../stand-alone-two-column-markup.texidoc | 8 + ...tem-and-beam-behavior-in-tablature.texidoc | 10 + .../string-quartet-template-simple.texidoc | 7 + ...artet-template-with-separate-parts.texidoc | 20 + .../fr/texidocs/subdividing-beams.texidoc | 19 + ...s-a-number-instead-of-the-fraction.texidoc | 16 + ...inimum-accidentals-smart-transpose.texidoc | 29 + .../texidocs/tweaking-clef-properties.texidoc | 35 + ...tweaking-grace-layout-within-music.texidoc | 11 + ...cket-at-the-start-of-a-staff-group.texidoc | 10 + ...racket-to-make-divisi-more-visible.texidoc | 11 + .../using-beatlength-and-beatgrouping.texidoc | 10 + ...ing-double-slurs-for-legato-chords.texidoc | 9 + ...ace-note-slashes-with-normal-heads.texidoc | 8 + ...-generate-special-note-head-shapes.texidoc | 1 + .../using-ties-with-arpeggios.texidoc | 9 + ...y-aligned-dynamics-and-textscripts.texidoc | 14 + ...tically-aligning-ossias-and-lyrics.texidoc | 9 + ...ate-with-automatic-piano-reduction.texidoc | 10 + ...aligned-below-and-above-the-staves.texidoc | 8 + ...le-template-with-verse-and-refrain.texidoc | 10 + .../texidocs/vocal-ensemble-template.texidoc | 12 + .../woodwind-diagrams-key-lists.texidoc | 9 + .../woodwind-diagrams-listing.texidoc | 7 + Documentation/fr/translations.html.in | 456 - Documentation/fr/translations.itexi | 1547 ++ .../fr/translations.template.html.in | 44 - Documentation/fr/usage.tely | 90 + Documentation/fr/usage/GNUmakefile | 5 + Documentation/fr/usage/external.itely | 665 + Documentation/fr/usage/lilypond-book.itely | 1363 ++ Documentation/fr/usage/running.itely | 890 + Documentation/fr/usage/suggestions.itely | 641 + Documentation/fr/usage/updating.itely | 280 + Documentation/fr/user/GNUmakefile | 4 - Documentation/fr/user/ancient.itely | 2138 -- Documentation/fr/user/changing-defaults.itely | 1504 -- Documentation/fr/user/cheatsheet.itely | 298 - Documentation/fr/user/chords.itely | 646 - Documentation/fr/user/converters.itely | 357 - Documentation/fr/user/dedication.itely | 18 - Documentation/fr/user/editorial.itely | 476 - Documentation/fr/user/expressive.itely | 681 - Documentation/fr/user/fretted-strings.itely | 1361 -- Documentation/fr/user/fundamental.itely | 2919 --- Documentation/fr/user/input.itely | 342 - Documentation/fr/user/install.itely | 85 - Documentation/fr/user/introduction.itely | 1184 - Documentation/fr/user/keyboards.itely | 662 - Documentation/fr/user/lilypond-book.itely | 129 - Documentation/fr/user/lilypond-learning.tely | 212 - Documentation/fr/user/lilypond-program.tely | 180 - Documentation/fr/user/lilypond.tely | 200 - Documentation/fr/user/literature.itely | 18 - Documentation/fr/user/macros.itexi | 361 - .../fr/user/notation-appendices.itely | 171 - Documentation/fr/user/notation.itely | 35 - Documentation/fr/user/percussion.itely | 333 - Documentation/fr/user/pitches.itely | 1349 -- Documentation/fr/user/preface.itely | 67 - .../fr/user/programming-interface.itely | 355 - Documentation/fr/user/repeats.itely | 406 - Documentation/fr/user/rhythms.itely | 2074 -- Documentation/fr/user/running.itely | 91 - Documentation/fr/user/scheme-tutorial.itely | 28 - Documentation/fr/user/setup.itely | 350 - Documentation/fr/user/simultaneous.itely | 468 - Documentation/fr/user/spacing.itely | 359 - Documentation/fr/user/specialist.itely | 37 - Documentation/fr/user/staff.itely | 656 - Documentation/fr/user/templates.itely | 90 - Documentation/fr/user/text.itely | 793 - Documentation/fr/user/tutorial.itely | 2100 -- Documentation/fr/user/tweaks.itely | 3766 --- Documentation/fr/user/unfretted-strings.itely | 199 - Documentation/fr/user/vocal.itely | 1144 - Documentation/fr/user/wind.itely | 140 - Documentation/fr/user/working.itely | 817 - Documentation/fr/user/world.itely | 73 - Documentation/fr/web.texi | 316 + Documentation/fr/web/GNUmakefile | 5 + Documentation/fr/web/community.itexi | 930 + Documentation/fr/web/download.itexi | 629 + Documentation/fr/web/introduction.itexi | 1308 ++ Documentation/fr/web/manuals.itexi | 610 + Documentation/gpl.itexi | 717 + Documentation/hu/GNUmakefile | 9 + Documentation/hu/learning.tely | 82 + Documentation/hu/learning/GNUmakefile | 5 + .../hu/learning/common-notation.itely | 1351 ++ Documentation/hu/learning/fundamental.itely | 3267 +++ Documentation/hu/learning/templates.itely | 106 + Documentation/hu/learning/tutorial.itely | 660 + Documentation/hu/learning/tweaks.itely | 724 + Documentation/hu/macros.itexi | 755 + Documentation/hu/search-box.ihtml | 13 + Documentation/hu/texidocs/GNUmakefile | 5 + Documentation/hu/translations.itexi | 514 + Documentation/hu/usage.tely | 84 + Documentation/hu/usage/GNUmakefile | 5 + Documentation/hu/usage/lilypond-book.itely | 1256 + Documentation/hu/usage/running.itely | 611 + Documentation/hu/usage/updating.itely | 256 + Documentation/hu/web.texi | 315 + Documentation/hu/web/GNUmakefile | 5 + Documentation/hu/web/basic-authors.itexi | 390 + Documentation/hu/web/community.itexi | 986 + Documentation/hu/web/download.itexi | 440 + Documentation/hu/web/introduction.itexi | 975 + Documentation/hu/web/manuals.itexi | 568 + Documentation/included/GNUmakefile | 11 + Documentation/included/README | 13 + Documentation/included/authors.itexi | 449 + .../included}/chord-names-jazz.ly | 38 +- .../included/chord-names-languages.ly | 47 + Documentation/included/compile.itexi | 1116 + .../display-predefined-fretboards.ly | 9 +- .../display-predefined-mandolin-fretboards.ly | 74 + .../display-predefined-string-tunings.ly | 87 + .../display-predefined-ukulele-fretboards.ly | 74 + .../included}/engraver-example.ily | 0 Documentation/included/font-table.ly | 163 + .../included/generating-output.itexi | 221 + Documentation/included/gonville.ly | 62 + Documentation/included/helpus.itexi | 138 + .../included}/note-head-style.ly | 30 +- .../included}/percussion-chart.ly | 14 +- Documentation/included/script-chart.ly | 194 + {input => Documentation/included}/simple.ly | 2 +- Documentation/index.html.in | 146 - Documentation/it/GNUmakefile | 9 + Documentation/it/learning.tely | 86 + Documentation/it/learning/GNUmakefile | 5 + .../it/learning/common-notation.itely | 1458 ++ Documentation/it/learning/fundamental.itely | 3197 +++ Documentation/it/learning/preface.itely | 63 + Documentation/it/learning/templates.itely | 241 + Documentation/it/learning/tutorial.itely | 769 + Documentation/it/macros.itexi | 815 + Documentation/it/search-box.ihtml | 20 + Documentation/it/texidocs/GNUmakefile | 5 + ...n-transcription-of-gregorian-music.texidoc | 9 + ...rn-transcription-of-mensural-music.texidoc | 12 + .../texidocs/anglican-psalm-template.texidoc | 9 + .../it/texidocs/hymn-template.texidoc | 8 + .../it/texidocs/jazz-combo-template.texidoc | 9 + ...rchestra,-choir-and-piano-template.texidoc | 9 + .../it/texidocs/piano-template-simple.texidoc | 6 + ...no-template-with-centered-dynamics.texidoc | 8 + ...iano-template-with-centered-lyrics.texidoc | 7 + ...no-template-with-melody-and-lyrics.texidoc | 7 + .../satb-choir-template---four-staves.texidoc | 6 + ...ate-with-notes,-lyrics,-and-chords.texidoc | 8 + ...aff-template-with-notes-and-chords.texidoc | 7 + ...aff-template-with-notes-and-lyrics.texidoc | 10 + ...gle-staff-template-with-only-notes.texidoc | 8 + .../string-quartet-template-simple.texidoc | 7 + ...artet-template-with-separate-parts.texidoc | 18 + ...ate-with-automatic-piano-reduction.texidoc | 10 + ...aligned-below-and-above-the-staves.texidoc | 8 + ...le-template-with-verse-and-refrain.texidoc | 9 + .../texidocs/vocal-ensemble-template.texidoc | 9 + Documentation/it/translations.itexi | 340 + Documentation/it/usage.tely | 87 + Documentation/it/usage/GNUmakefile | 5 + Documentation/it/usage/external.itely | 619 + Documentation/it/usage/lilypond-book.itely | 1296 ++ Documentation/it/usage/running.itely | 831 + Documentation/it/usage/suggestions.itely | 608 + Documentation/it/usage/updating.itely | 267 + Documentation/it/web.texi | 313 + Documentation/it/web/GNUmakefile | 5 + Documentation/it/web/community.itexi | 834 + Documentation/it/web/download.itexi | 611 + Documentation/it/web/introduction.itexi | 1245 + Documentation/it/web/manuals.itexi | 584 + Documentation/it/web/news-front.itexi | 70 + Documentation/ja/GNUmakefile | 7 +- Documentation/ja/dedication.itely | 23 + Documentation/ja/included/GNUmakefile | 10 + .../ja/included/generating-output.itexi | 219 + Documentation/ja/index.html.in | 146 - Documentation/ja/learning.tely | 90 + Documentation/ja/learning/GNUmakefile | 5 + .../ja/learning/common-notation.itely | 1539 ++ Documentation/ja/learning/fundamental.itely | 3325 +++ Documentation/ja/learning/preface.itely | 61 + Documentation/ja/learning/templates.itely | 246 + Documentation/ja/learning/tutorial.itely | 827 + Documentation/ja/learning/tweaks.itely | 4379 ++++ Documentation/ja/macros.itexi | 796 + Documentation/ja/notation.tely | 141 + Documentation/ja/notation/GNUmakefile | 5 + Documentation/ja/notation/editorial.itely | 746 + Documentation/ja/notation/expressive.itely | 1351 ++ Documentation/ja/notation/notation.itely | 39 + Documentation/ja/notation/pitches.itely | 3102 +++ Documentation/ja/notation/repeats.itely | 725 + Documentation/ja/notation/rhythms.itely | 3383 +++ Documentation/ja/notation/simultaneous.itely | 1106 + Documentation/ja/notation/staff.itely | 1503 ++ Documentation/ja/notation/text.itely | 1607 ++ Documentation/ja/texidocs/GNUmakefile | 5 + ...no-template-with-centered-dynamics.texidoc | 6 + ...iano-template-with-centered-lyrics.texidoc | 4 + ...no-template-with-melody-and-lyrics.texidoc | 4 + ...ate-with-notes,-lyrics,-and-chords.texidoc | 4 + ...aff-template-with-notes-and-chords.texidoc | 4 + ...aff-template-with-notes-and-lyrics.texidoc | 8 + ...gle-staff-template-with-only-notes.texidoc | 6 + .../string-quartet-template-simple.texidoc | 5 + ...artet-template-with-separate-parts.texidoc | 14 + ...ate-with-automatic-piano-reduction.texidoc | 7 + ...aligned-below-and-above-the-staves.texidoc | 5 + .../texidocs/vocal-ensemble-template.texidoc | 6 + Documentation/ja/translations.html.in | 171 - Documentation/ja/translations.itexi | 802 + .../ja/translations.template.html.in | 25 - Documentation/ja/usage.tely | 87 + Documentation/ja/usage/GNUmakefile | 5 + Documentation/ja/usage/external.itely | 643 + Documentation/ja/usage/lilypond-book.itely | 1084 + Documentation/ja/usage/running.itely | 837 + Documentation/ja/usage/suggestions.itely | 645 + Documentation/ja/usage/updating.itely | 286 + Documentation/ja/user/GNUmakefile | 7 - Documentation/ja/user/fundamental.itely | 171 - Documentation/ja/user/introduction.itely | 715 - Documentation/ja/user/lilypond-learning.tely | 204 - Documentation/ja/user/macros.itexi | 323 - Documentation/ja/user/preface.itely | 31 - Documentation/ja/user/scheme-tutorial.itely | 28 - Documentation/ja/user/templates.itely | 88 - Documentation/ja/user/tutorial.itely | 259 - Documentation/ja/user/tweaks.itely | 250 - Documentation/ja/user/working.itely | 104 - Documentation/ja/web.texi | 315 + Documentation/ja/web/GNUmakefile | 5 + Documentation/ja/web/community.itexi | 857 + Documentation/ja/web/download.itexi | 620 + Documentation/ja/web/introduction.itexi | 1295 ++ Documentation/ja/web/manuals.itexi | 585 + Documentation/learning.tely | 83 + Documentation/learning/GNUmakefile | 5 + Documentation/learning/common-notation.itely | 1433 ++ Documentation/learning/fundamental.itely | 3213 +++ Documentation/learning/preface.itely | 60 + Documentation/learning/templates.itely | 236 + Documentation/learning/tutorial.itely | 766 + Documentation/learning/tweaks.itely | 4165 ++++ Documentation/lily-bib.bst | 400 + Documentation/lily_index_search.php | 62 + Documentation/lily_search.js | 101 + Documentation/lilypond-blue.css | 355 - Documentation/lilypond-mccarty.css | 415 - Documentation/lilypond-texi2html.init | 1235 +- Documentation/lilypond.css | 216 - Documentation/logo/GNUmakefile | 27 + .../{pictures => logo}/lelie-logo.xpm | 0 Documentation/{pictures => logo}/lilypond.xpm | 0 Documentation/{pictures => logo}/ly.xpm | 0 Documentation/macros.itexi | 546 +- Documentation/misc/GNUmakefile | 4 +- Documentation/{user => }/music-glossary.tely | 1177 +- Documentation/nl/GNUmakefile | 18 + Documentation/nl/included/GNUmakefile | 10 + .../nl/included/generating-output.itexi | 255 + Documentation/nl/learning.tely | 92 + Documentation/nl/learning/GNUmakefile | 5 + .../nl/learning/common-notation.itely | 1552 ++ Documentation/nl/learning/fundamental.itely | 3159 +++ Documentation/nl/learning/tutorial.itely | 801 + Documentation/nl/macros.itexi | 804 + Documentation/nl/search-box.ihtml | 20 + Documentation/nl/texidocs/GNUmakefile | 5 + Documentation/nl/translations.itexi | 313 + Documentation/nl/web.texi | 319 + Documentation/nl/web/GNUmakefile | 5 + Documentation/nl/web/download.itexi | 631 + Documentation/nl/web/introduction.itexi | 1256 + Documentation/nl/web/manuals.itexi | 595 + Documentation/notation.tely | 125 + Documentation/notation/GNUmakefile | 5 + Documentation/notation/ancient.itely | 2692 +++ .../notation/changing-defaults.itely | 3862 +++ Documentation/notation/cheatsheet.itely | 300 + Documentation/notation/chords.itely | 1182 + Documentation/notation/contemporary.itely | 226 + Documentation/notation/editorial.itely | 714 + Documentation/notation/expressive.itely | 1326 ++ Documentation/notation/fretted-strings.itely | 1905 ++ Documentation/notation/input.itely | 2540 ++ Documentation/notation/keyboards.itely | 688 + .../notation/notation-appendices.itely | 1389 ++ Documentation/notation/notation.itely | 36 + Documentation/notation/percussion.itely | 620 + Documentation/notation/pitches.itely | 3007 +++ Documentation/notation/repeats.itely | 715 + Documentation/notation/rhythms.itely | 3400 +++ Documentation/notation/simultaneous.itely | 1094 + Documentation/notation/spacing.itely | 3457 +++ Documentation/notation/specialist.itely | 41 + Documentation/notation/staff.itely | 1527 ++ Documentation/notation/text.itely | 1549 ++ .../notation/unfretted-strings.itely | 221 + Documentation/notation/vocal.itely | 3243 +++ Documentation/notation/wind.itely | 436 + Documentation/notation/world.itely | 588 + Documentation/pictures/GNUmakefile | 52 +- Documentation/pictures/Gonville_after.png | Bin 0 -> 23632 bytes Documentation/pictures/Gonville_before.png | Bin 0 -> 52967 bytes .../pictures/Learning_Macos_Compiling_log.png | Bin 0 -> 33176 bytes .../pictures/Learning_Macos_New_menu.png | Bin 0 -> 87955 bytes .../Learning_Macos_Open_Dialog_box.png | Bin 0 -> 43443 bytes .../pictures/Learning_Macos_Open_menu.png | Bin 0 -> 86376 bytes .../Learning_Macos_Save_file_with_name.png | Bin 0 -> 26407 bytes .../pictures/Learning_Macos_Save_menu.png | Bin 0 -> 89219 bytes .../pictures/Learning_Macos_Typeset_menu.png | Bin 0 -> 90417 bytes .../pictures/Learning_Macos_pdf_output.png | Bin 0 -> 18870 bytes .../pictures/Learning_Macos_welcome.png | Bin 0 -> 51699 bytes .../Learning_Win7_All_Files_Created.png | Bin 0 -> 59081 bytes .../pictures/Learning_Win7_Log_File.png | Bin 0 -> 76164 bytes .../pictures/Learning_Win7_New_Menu.png | Bin 0 -> 42837 bytes .../Learning_Win7_Open_Context_Menu.png | Bin 0 -> 88444 bytes .../pictures/Learning_Win7_Open_Dragndrop.png | Bin 0 -> 52799 bytes .../pictures/Learning_Win7_Open_Menu.png | Bin 0 -> 44304 bytes .../pictures/Learning_Win7_Pdf_Output.png | Bin 0 -> 43223 bytes .../Learning_Win7_Save_File_With_Name.png | Bin 0 -> 36663 bytes .../pictures/Learning_Win7_Save_Menu.png | Bin 0 -> 41904 bytes .../Learning_Win7_Welcome_File_Whole.png | Bin 0 -> 101733 bytes Documentation/pictures/OpusAndFeta.png | Bin 0 -> 13234 bytes Documentation/pictures/VTlogo_ITF.png | Bin 0 -> 4216 bytes .../pictures/architecture-diagram.png | Bin 0 -> 79300 bytes Documentation/pictures/background-image.png | Bin 0 -> 57961 bytes .../{user => pictures}/baer-flat-bw.png | Bin Documentation/pictures/baer-flat-gray.png | Bin 0 -> 29101 bytes Documentation/pictures/baer-ledger.png | Bin 0 -> 43630 bytes .../pictures/baer-sarabande-hires.png | Bin 0 -> 33864 bytes .../pictures/baer-sarabande-original.jpg | Bin 0 -> 2133715 bytes Documentation/pictures/baer-sarabande.png | Bin 0 -> 12780 bytes .../pictures/baer-suite1-fullpage-hires.png | Bin 0 -> 169227 bytes .../pictures/baer-suite1-fullpage.png | Bin 0 -> 109067 bytes Documentation/pictures/baer-suite1-line.png | Bin 0 -> 38055 bytes .../pictures/beam-scoring-example.png | Bin 0 -> 2249 bytes Documentation/pictures/bench-morgenlied.png | Bin 0 -> 63616 bytes .../pictures/bwv861-baer-alt-small.png | Bin 0 -> 46776 bytes Documentation/pictures/bwv861-baer-alt.png | Bin 0 -> 66207 bytes Documentation/pictures/bwv861-baer-small.png | Bin 0 -> 47320 bytes Documentation/pictures/bwv861-baer.png | Bin 0 -> 66292 bytes .../pictures/bwv861-breitkopf-small.png | Bin 0 -> 53974 bytes Documentation/pictures/bwv861-breitkopf.png | Bin 0 -> 32424 bytes Documentation/pictures/bwv861-finale2008a.png | Bin 0 -> 18780 bytes .../pictures/bwv861-gessellschaft-small.png | Bin 0 -> 52239 bytes .../pictures/bwv861-gessellschaft.png | Bin 0 -> 26683 bytes Documentation/pictures/bwv861mm28-29.png | Bin 0 -> 9677 bytes .../pictures/bwv861mm33-34-annotate.png | Bin 0 -> 13635 bytes .../pictures/bwv861mm33-34-annotate.svg | 744 + Documentation/pictures/bwv861mm33-34.png | Bin 0 -> 12404 bytes Documentation/pictures/carter-brey.jpg | Bin 0 -> 7629 bytes Documentation/pictures/color1-active.png | Bin 0 -> 241 bytes Documentation/pictures/color1-bg.png | Bin 0 -> 251 bytes Documentation/pictures/color1-hover.png | Bin 0 -> 230 bytes Documentation/pictures/color2-active.png | Bin 0 -> 164 bytes Documentation/pictures/color2-bg.png | Bin 0 -> 174 bytes Documentation/pictures/color2-hover.png | Bin 0 -> 226 bytes Documentation/pictures/color3-active.png | Bin 0 -> 159 bytes Documentation/pictures/color3-bg.png | Bin 0 -> 188 bytes Documentation/pictures/color3-hover.png | Bin 0 -> 232 bytes Documentation/pictures/color4-active.png | Bin 0 -> 170 bytes Documentation/pictures/color4-bg.png | Bin 0 -> 179 bytes Documentation/pictures/color4-hover.png | Bin 0 -> 231 bytes .../{user => pictures}/context-example.eps | 0 Documentation/pictures/darius-blasband.jpg | Bin 0 -> 10375 bytes Documentation/pictures/directions-updown.png | Bin 0 -> 5840 bytes .../pictures/double-lily-modified3.png | Bin 0 -> 51802 bytes Documentation/pictures/engraver-acc.png | Bin 0 -> 7826 bytes Documentation/pictures/engraver-clef.png | Bin 0 -> 3889 bytes Documentation/pictures/engraver-final.png | Bin 0 -> 14266 bytes Documentation/pictures/engraver-noteheads.png | Bin 0 -> 2087 bytes Documentation/pictures/engraver-score.png | Bin 0 -> 19624 bytes Documentation/pictures/engraver-slur.png | Bin 0 -> 7168 bytes Documentation/pictures/engraver-staff.png | Bin 0 -> 1290 bytes Documentation/pictures/engraver-stem.png | Bin 0 -> 6224 bytes Documentation/pictures/finale-beam-detail.png | Bin 0 -> 5455 bytes .../pictures/finale-flat-correct.png | Bin 0 -> 4258 bytes Documentation/pictures/finale-flat-detail.png | Bin 0 -> 3007 bytes .../pictures/finale-sarabande-full.png | Bin 0 -> 21408 bytes Documentation/pictures/flat-design.png | Bin 0 -> 19144 bytes .../frescobaldi-lilypond-editor-small.png | Bin 0 -> 54944 bytes .../pictures/frescobaldi-lilypond-editor.png | Bin 0 -> 273615 bytes Documentation/pictures/hader-collage.jpg | Bin 0 -> 28954 bytes Documentation/pictures/hader-collage.png | Bin 0 -> 200751 bytes Documentation/pictures/hader-slaan.jpg | Bin 0 -> 26170 bytes Documentation/pictures/hader-slaan.png | Bin 0 -> 120505 bytes .../{user => pictures}/henle-flat-bw.png | Bin Documentation/pictures/henle-flat-gray.png | Bin 0 -> 16068 bytes Documentation/pictures/henle-ledger.png | Bin 0 -> 16286 bytes .../pictures/henle-suite1-fullpage-hires.png | Bin 0 -> 125820 bytes .../pictures/henle-suite1-fullpage.png | Bin 0 -> 82185 bytes Documentation/pictures/henle-suite1-line.png | Bin 0 -> 29694 bytes .../pictures/lao_banner_06_on_white_demo.png | Bin 0 -> 5433 bytes Documentation/pictures/lelie.png | Bin 0 -> 17397 bytes Documentation/pictures/lily-flat-bw.png | Bin 0 -> 4168 bytes .../pictures/lily-home-nav-active.png | Bin 0 -> 2704 bytes Documentation/pictures/lily-home-nav-bg.png | Bin 0 -> 2626 bytes .../pictures/lily-home-nav-hover.png | Bin 0 -> 2652 bytes Documentation/pictures/lily-home.png | Bin 0 -> 2728 bytes Documentation/pictures/lily-ledger.png | Bin 0 -> 3379 bytes .../lily14-sarabande-annotated-hires.png | Bin 0 -> 140674 bytes .../pictures/lily14-sarabande-annotated.png | Bin 0 -> 21149 bytes .../pictures/lily14-sarabande-correct.png | Bin 0 -> 33698 bytes .../pictures/lily14-sarabande-hires.png | Bin 0 -> 22005 bytes Documentation/pictures/lily14-sarabande.png | Bin 0 -> 7394 bytes Documentation/pictures/lily17-sarabande.png | Bin 0 -> 21695 bytes .../pictures/lilykde-screenshot-small.png | Bin 0 -> 104976 bytes Documentation/pictures/lilykde-screenshot.png | Bin 0 -> 223563 bytes Documentation/pictures/lilypond-book.png | Bin 0 -> 81677 bytes .../lilypondtool-2.12-screenshot-400wide.png | Bin 0 -> 105572 bytes .../pictures/lilypondtool-2.12-screenshot.png | Bin 0 -> 120058 bytes Documentation/pictures/logo-debian.png | Bin 0 -> 3099 bytes Documentation/pictures/logo-fedora.png | Bin 0 -> 5824 bytes Documentation/pictures/logo-freebsd.png | Bin 0 -> 5708 bytes .../logo-lilypond_Snell-Roundhead-Heaven.png | Bin 0 -> 4805 bytes Documentation/pictures/logo-linux.png | Bin 0 -> 2951 bytes Documentation/pictures/logo-macosx.png | Bin 0 -> 1655 bytes Documentation/pictures/logo-slackware.png | Bin 0 -> 1061 bytes Documentation/pictures/logo-suse.png | Bin 0 -> 1361 bytes Documentation/pictures/logo-ubuntu.png | Bin 0 -> 1725 bytes Documentation/pictures/logo-windows.png | Bin 0 -> 548 bytes Documentation/pictures/mc-squared.png | Bin 0 -> 5317 bytes Documentation/pictures/morgenlied-crop-2.jpg | Bin 0 -> 40543 bytes Documentation/pictures/morgenlied-crop-2.png | Bin 0 -> 90947 bytes .../pictures/morgenlied-ly-crop2.png | Bin 0 -> 31804 bytes Documentation/pictures/naive-notation-uml.png | Bin 0 -> 2489 bytes Documentation/pictures/naive-notation.png | Bin 0 -> 9700 bytes Documentation/pictures/nav-active-2.png | Bin 0 -> 223 bytes Documentation/pictures/nav-active.png | Bin 0 -> 242 bytes Documentation/pictures/nav-bg-2.png | Bin 0 -> 229 bytes Documentation/pictures/nav-bg.png | Bin 0 -> 234 bytes Documentation/pictures/nav-hover-2.png | Bin 0 -> 244 bytes Documentation/pictures/nav-hover.png | Bin 0 -> 250 bytes Documentation/pictures/nereid-shot-small.png | Bin 0 -> 65518 bytes Documentation/pictures/nereid-shot.png | Bin 0 -> 47944 bytes Documentation/pictures/nestedboxes.png | Bin 0 -> 1523 bytes Documentation/pictures/nestedboxes.svg | 237 + Documentation/pictures/nonnaive-notation.png | Bin 0 -> 8934 bytes Documentation/pictures/orm-finnendahl.jpg | Bin 0 -> 3246 bytes .../pictures/page-layout-comparison.png | Bin 0 -> 3309 bytes .../pictures/page-layout-comparison.svg | 305 + Documentation/pictures/pdf/GNUmakefile | 12 + Documentation/pictures/pdf/OpusAndFeta.pdf | Bin 0 -> 9912 bytes .../pictures/pdf/bwv861-finale2008a.pdf | Bin 0 -> 24175 bytes Documentation/pictures/pdf/bwv861mm28-29.pdf | Bin 0 -> 15306 bytes .../pictures/pdf/bwv861mm33-34-annotate.pdf | Bin 0 -> 9270 bytes Documentation/pictures/pdf/bwv861mm33-34.pdf | Bin 0 -> 6179 bytes .../pictures/pdf/lily14-sarabande.pdf | Bin 0 -> 3967 bytes Documentation/pictures/pdf/nestedboxes.pdf | Bin 0 -> 1430 bytes .../pictures/pdf/page-layout-comparison.pdf | Bin 0 -> 1775 bytes Documentation/pictures/pdf/size11.pdf | Bin 0 -> 10404 bytes Documentation/pictures/pdf/size26.pdf | Bin 0 -> 10144 bytes Documentation/pictures/ross-beam-scan.jpg | Bin 0 -> 18607 bytes .../pictures/screenshot-denemo-small.png | Bin 0 -> 43746 bytes Documentation/pictures/screenshot-denemo.png | Bin 0 -> 165004 bytes Documentation/pictures/simple-notation.png | Bin 0 -> 2221 bytes Documentation/pictures/simultaneous-0.png | Bin 0 -> 4715 bytes Documentation/pictures/simultaneous-1.png | Bin 0 -> 4365 bytes Documentation/pictures/simultaneous-2.png | Bin 0 -> 4850 bytes Documentation/pictures/simultaneous-3.png | Bin 0 -> 5450 bytes Documentation/pictures/size11.png | Bin 0 -> 5429 bytes Documentation/pictures/size26.png | Bin 0 -> 5273 bytes .../pictures/slur-esthetics-annotate-1.png | Bin 0 -> 4839 bytes .../pictures/slur-esthetics-annotate-2.png | Bin 0 -> 5795 bytes .../pictures/slur-esthetics-annotate-3.png | Bin 0 -> 5434 bytes Documentation/pictures/slur-esthetics.png | Bin 0 -> 4681 bytes Documentation/pictures/spacing-no-corr.png | Bin 0 -> 5627 bytes Documentation/pictures/spacing-with-corr.png | Bin 0 -> 5618 bytes Documentation/pictures/squiggle.jpg | Bin 0 -> 3052 bytes Documentation/pictures/stone-distance.png | Bin 0 -> 8419 bytes Documentation/pictures/summary-gradient.png | Bin 0 -> 504 bytes .../pictures/text-input-1-annotate-de.png | Bin 0 -> 18403 bytes .../pictures/text-input-1-annotate-de.svg | 217 + .../pictures/text-input-1-annotate-es.png | Bin 0 -> 15052 bytes .../pictures/text-input-1-annotate-es.svg | 214 + .../pictures/text-input-1-annotate-fr.png | Bin 0 -> 18772 bytes .../pictures/text-input-1-annotate-fr.svg | 215 + .../pictures/text-input-1-annotate-hu.png | Bin 0 -> 27966 bytes .../pictures/text-input-1-annotate-hu.svg | 217 + .../pictures/text-input-1-annotate-it.png | Bin 0 -> 24960 bytes .../pictures/text-input-1-annotate-it.svg | 211 + .../pictures/text-input-1-annotate-nl.png | Bin 0 -> 27053 bytes .../pictures/text-input-1-annotate.png | Bin 0 -> 21267 bytes .../pictures/text-input-1-annotate.svg | 211 + .../pictures/text-input-1-output.png | Bin 0 -> 1631 bytes .../pictures/text-input-2-annotate-de.png | Bin 0 -> 30281 bytes .../pictures/text-input-2-annotate-de.svg | 276 + .../pictures/text-input-2-annotate-es.png | Bin 0 -> 25612 bytes .../pictures/text-input-2-annotate-es.svg | 263 + .../pictures/text-input-2-annotate-fr.png | Bin 0 -> 28081 bytes .../pictures/text-input-2-annotate-fr.svg | 264 + .../pictures/text-input-2-annotate-hu.png | Bin 0 -> 36182 bytes .../pictures/text-input-2-annotate-hu.svg | 268 + .../pictures/text-input-2-annotate-it.png | Bin 0 -> 42740 bytes .../pictures/text-input-2-annotate-it.svg | 266 + .../pictures/text-input-2-annotate-nl.png | Bin 0 -> 41138 bytes .../pictures/text-input-2-annotate.png | Bin 0 -> 31305 bytes .../pictures/text-input-2-annotate.svg | 262 + .../pictures/text-input-2-output.png | Bin 0 -> 8826 bytes .../text-input-parts-both-annotate-de.png | Bin 0 -> 30248 bytes .../text-input-parts-both-annotate-de.svg | 190 + .../text-input-parts-both-annotate-es.png | Bin 0 -> 23841 bytes .../text-input-parts-both-annotate-es.svg | 174 + .../text-input-parts-both-annotate-fr.png | Bin 0 -> 28383 bytes .../text-input-parts-both-annotate-fr.svg | 176 + .../text-input-parts-both-annotate-hu.png | Bin 0 -> 33830 bytes .../text-input-parts-both-annotate-hu.svg | 177 + .../text-input-parts-both-annotate-it.png | Bin 0 -> 40272 bytes .../text-input-parts-both-annotate-it.svg | 179 + .../text-input-parts-both-annotate-nl.png | Bin 0 -> 39800 bytes .../text-input-parts-both-annotate.png | Bin 0 -> 31507 bytes .../text-input-parts-both-annotate.svg | 174 + .../text-input-parts-single-annotate-de.png | Bin 0 -> 23876 bytes .../text-input-parts-single-annotate-de.svg | 177 + .../text-input-parts-single-annotate-es.png | Bin 0 -> 16311 bytes .../text-input-parts-single-annotate-es.svg | 163 + .../text-input-parts-single-annotate-fr.png | Bin 0 -> 18721 bytes .../text-input-parts-single-annotate-fr.svg | 165 + .../text-input-parts-single-annotate-hu.png | Bin 0 -> 30541 bytes .../text-input-parts-single-annotate-hu.svg | 169 + .../text-input-parts-single-annotate-it.png | Bin 0 -> 32371 bytes .../text-input-parts-single-annotate-it.svg | 169 + .../text-input-parts-single-annotate-nl.png | Bin 0 -> 38200 bytes .../text-input-parts-single-annotate.png | Bin 0 -> 21980 bytes .../text-input-parts-single-annotate.svg | 163 + .../text-input-parts-single-output.png | Bin 0 -> 3447 bytes .../pictures/text-input-pop-annotate-de.png | Bin 0 -> 37385 bytes .../pictures/text-input-pop-annotate-de.svg | 236 + .../pictures/text-input-pop-annotate-es.png | Bin 0 -> 28303 bytes .../pictures/text-input-pop-annotate-es.svg | 226 + .../pictures/text-input-pop-annotate-fr.png | Bin 0 -> 31518 bytes .../pictures/text-input-pop-annotate-fr.svg | 228 + .../pictures/text-input-pop-annotate-hu.png | Bin 0 -> 51061 bytes .../pictures/text-input-pop-annotate-hu.svg | 232 + .../pictures/text-input-pop-annotate-it.png | Bin 0 -> 52483 bytes .../pictures/text-input-pop-annotate-it.svg | 233 + .../pictures/text-input-pop-annotate-nl.png | Bin 0 -> 44977 bytes .../pictures/text-input-pop-annotate.png | Bin 0 -> 36897 bytes .../pictures/text-input-pop-annotate.svg | 226 + .../pictures/text-input-pop-output.png | Bin 0 -> 7910 bytes .../pictures/text-input-score-annotate-de.png | Bin 0 -> 17449 bytes .../pictures/text-input-score-annotate-de.svg | 150 + .../pictures/text-input-score-annotate-es.png | Bin 0 -> 11744 bytes .../pictures/text-input-score-annotate-es.svg | 144 + .../pictures/text-input-score-annotate-fr.png | Bin 0 -> 13882 bytes .../pictures/text-input-score-annotate-fr.svg | 147 + .../pictures/text-input-score-annotate-hu.png | Bin 0 -> 22141 bytes .../pictures/text-input-score-annotate-hu.svg | 150 + .../pictures/text-input-score-annotate-it.png | Bin 0 -> 24725 bytes .../pictures/text-input-score-annotate-it.svg | 143 + .../pictures/text-input-score-annotate-nl.png | Bin 0 -> 28423 bytes .../pictures/text-input-score-annotate.png | Bin 0 -> 16478 bytes .../pictures/text-input-score-annotate.svg | 144 + .../pictures/text-input-score-output.png | Bin 0 -> 5420 bytes Documentation/pictures/thickness-tweaks.png | Bin 0 -> 6556 bytes .../pictures/ties-scoring-example.png | Bin 0 -> 2793 bytes Documentation/po/GNUmakefile | 20 +- Documentation/po/cs.po | 11530 +++++++++ Documentation/po/de.po | 19318 ++++++++-------- Documentation/po/es.po | 17647 +++++++------- Documentation/po/fr.po | 16744 ++++++-------- Documentation/po/hu.po | 10469 +++++++++ Documentation/po/it.po | 10072 ++++++++ Documentation/po/ja.po | 17500 ++++++-------- Documentation/po/lilypond-doc.pot | 12468 +--------- Documentation/po/nl.po | 10095 ++++++++ Documentation/po/zh.po | 10045 ++++++++ Documentation/search-box.ihtml | 13 + Documentation/snippets.tely | 131 + Documentation/snippets/GNUmakefile | 8 + Documentation/snippets/README | 5 + .../snippets}/accordion-discant-symbols.ly | 19 +- ...a-figured-bass-above-or-below-the-notes.ly | 70 + .../snippets/adding-ambitus-per-voice.ly | 62 + .../adding-an-extra-staff-at-a-line-break.ly | 59 + .../snippets/adding-an-extra-staff.ly | 50 + .../adding-bar-lines-to-chordnames-context.ly | 46 + ...hen-using-tuplet-and-non-tuplet-rhythms.ly | 51 + .../snippets}/adding-drum-parts.ly | 23 +- .../snippets/adding-fingerings-to-a-score.ly | 22 + .../adding-fingerings-to-tablatures.ly | 62 + ...to-staves-which-get-split-after-a-break.ly | 105 + ...adding-orchestral-cues-to-a-vocal-score.ly | 149 + ...ound-an-expressive-mark-or-chordal-note.ly | 35 + .../adding-the-current-date-to-a-score.ly | 54 + ...ing-volta-brackets-to-additional-staves.ly | 65 + .../additional-voices-to-avoid-collisions.ly | 91 + .../snippets/adjusting-grace-note-spacing.ly | 42 + .../adjusting-lyrics-vertical-spacing.ly | 59 + .../adjusting-the-shape-of-falls-and-doits.ly | 54 + ...aligning-and-centering-instrument-names.ly | 78 + .../snippets/aligning-bar-numbers.ly | 76 + ...ing-marks-with-various-notation-objects.ly | 137 + ...-objects-created-with-the--mark-command.ly | 32 + ...ngerings-to-be-printed-inside-the-staff.ly | 56 + .../altering-the-length-of-beamed-stems.ly | 55 + .../snippets/alternative-breve-note.ly | 21 + .../snippets/ambitus-with-multiple-voices.ly | 65 + Documentation/snippets/ambitus.ly | 45 + .../analysis-brackets-above-the-staff.ly | 41 + .../snippets}/ancient-fonts.ly | 59 +- Documentation/snippets/ancient-headword.ly | 142 + .../snippets}/ancient-notation-intro.itely | 0 ...modern-transcription-of-gregorian-music.ly | 102 + ...-modern-transcription-of-mensural-music.ly | 66 +- .../snippets}/ancient-notation.snippet-list | 0 .../snippets/ancient-time-signatures.ly | 32 + .../snippets/anglican-psalm-template.ly | 170 + ...yles-depending-on-the-step-of-the-scale.ly | 125 + .../snippets/arabic-improvisation.ly | 56 + Documentation/snippets/asymmetric-slurs.ly | 39 + .../snippets/automatic-beam-subdivisions.ly | 56 + ...oiding-collisions-with-chord-fingerings.ly | 58 + ...-notation-for-guitar--with-text-spanner.ly | 90 + .../snippets/beam-endings-in-score-context.ly | 82 + .../snippets/beam-grouping-in-7-8-time.ly | 61 + .../snippets/beams-across-line-breaks.ly | 55 + ...staff-lines-using-the--whiteout-command.ly | 37 + .../snippets}/book-parts.ly | 15 +- .../snippets}/breaks.snippet-list | 0 .../snippets}/breathing-signs.ly | 16 +- .../snippets/broken-crescendo-hairpin.ly | 84 + .../caesura-railtracks-with-fermata.ly | 46 + .../center-text-below-hairpin-dynamics.ly | 54 + ...ring-markup-on-note-heads-automatically.ly | 71 + .../snippets/changing--flageolet-mark-size.ly | 60 + ...changing-a-single-notes-size-in-a-chord.ly | 45 + .../snippets/changing-beam-knee-gap.ly | 72 + .../snippets/changing-chord-separator.ly | 43 + .../changing-form-of-multi-measure-rests.ly | 62 + .../snippets/changing-fret-orientations.ly | 58 + ...ng-midi-output-to-one-channel-per-voice.ly | 100 + .../snippets/changing-partcombine-texts.ly | 62 + ...hanging-properties-for-individual-grobs.ly | 8 +- .../snippets/changing-stanza-fonts.ly | 36 + ...xt-and-spanner-styles-for-text-dynamics.ly | 73 + .../snippets/changing-the-ambitus-gap.ly | 65 + ...f-a-slur-from-solid-to-dotted-or-dashed.ly | 39 + .../changing-the-breath-mark-symbol.ly | 55 + ...names-to-german-or-semi-german-notation.ly | 63 + .../changing-the-default-text-font-family.ly | 56 + ...ging-the-interval-of-lines-on-the-stave.ly | 42 + ...he-number-of-augmentation-dots-per-note.ly | 44 + ...changing-the-number-of-lines-in-a-staff.ly | 43 + ...e-positions-of-figured-bass-alterations.ly | 50 + .../changing-the-size-of-woodwind-diagrams.ly | 70 + .../snippets/changing-the-staff-size.ly | 37 + ...ging-the-tempo-without-a-metronome-mark.ly | 61 + .../changing-the-text-for-sustain-markings.ly | 47 + ...signature-without-affecting-the-beaming.ly | 68 + .../snippets/changing-the-tuplet-number.ly | 66 + ...olymetric-section-using--scaledurations.ly | 9 +- .../snippets/chant-or-psalms-notation.ly | 63 + .../snippets/chord-glissando-in-tablature.ly | 60 + .../snippets/chord-name-exceptions.ly | 63 + Documentation/snippets/chord-name-major7.ly | 43 + .../snippets/chordchanges-for-fretboards.ly | 50 + Documentation/snippets/chords-headword.ly | 109 + .../snippets}/chords-intro.itely | 0 .../snippets}/chords.snippet-list | 2 + ...-can-be-transposed-by-arbitrary-amounts.ly | 29 + Documentation/snippets/clip-systems.ly | 123 + Documentation/snippets/clusters.ly | 38 + ...coloring-notes-depending-on-their-pitch.ly | 62 + .../combining-dynamics-with-markup-texts.ly | 36 + .../combining-two-parts-on-the-same-staff.ly | 135 + .../snippets/compound-time-signatures.ly | 78 + ...onducting-signs,-measure-grouping-signs.ly | 130 + .../snippets/contemporary-glissando.ly | 59 + .../contexts-and-engravers-intro.itely | 0 .../contexts-and-engravers.snippet-list | 3 + ...g-spanner-visibility-after-a-line-break.ly | 67 + ...lling-the-placement-of-chord-fingerings.ly | 66 + ...olling-the-vertical-ordering-of-scripts.ly | 81 + .../controlling-tuplet-bracket-visibility.ly | 72 + .../snippets/creating-a-delayed-turn.ly | 76 + ...-a-sequence-of-notes-on-various-pitches.ly | 18 +- ...eggios-across-notes-in-different-voices.ly | 61 + .../snippets/creating-blank-staves.ly | 62 + ...-cross-staff-arpeggios-in-a-piano-staff.ly | 65 + ...cross-staff-arpeggios-in-other-contexts.ly | 76 + ...creating-metronome-marks-in-markup-mode.ly | 60 + .../creating-real-parenthesized-dynamics.ly | 55 + .../creating-simultaneous-rehearsal-marks.ly | 20 +- .../snippets}/creating-slurs-across-voices.ly | 9 +- .../snippets}/creating-text-spanners.ly | 16 +- .../snippets/cross-staff-tremolos.ly | 66 + Documentation/snippets/custodes.ly | 47 + .../customizing-fretboard-fret-diagrams.ly | 24 +- .../customizing-markup-fret-diagrams.ly | 33 +- ...f-stems-on-the-center-line-of-the-staff.ly | 45 + ...-an-engraver-in-scheme-ambitus-engraver.ly | 344 + ...efined-fretboards-for-other-instruments.ly | 232 + .../snippets}/demo-midiinstruments.ly | 12 +- .../snippets}/demonstrating-all-headers.ly | 8 +- ...bracket-with-only-one-staff-in-a-system.ly | 96 + .../snippets/displaying-complex-chords.ly | 42 + .../snippets/displaying-grob-ancestry.ly | 210 + ...entals-for-each-note-including-naturals.ly | 75 + Documentation/snippets/dotted-harmonics.ly | 28 + Documentation/snippets/double-glissando.ly | 37 + .../snippets/drawing-boxes-around-grobs.ly | 38 + .../drawing-circles-around-note-heads.ly | 29 + .../drawing-circles-around-various-objects.ly | 9 +- .../dynamics-custom-text-spanner-postfix.ly | 80 + .../snippets/dynamics-text-spanner-postfix.ly | 76 + .../editorial-annotations-intro.itely | 0 .../editorial-annotations.snippet-list | 5 + Documentation/snippets/editorial-headword.ly | 107 + ...ng-native-postscript-in-a--markup-block.ly | 38 + .../snippets/engravers-one-by-one.ly | 310 + .../snippets/engraving-ties-manually.ly | 63 + .../engraving-tremolos-with-floating-beams.ly | 8 +- ...l-tuplets-using-only-one--times-command.ly | 85 + Documentation/snippets/expressive-headword.ly | 278 + .../snippets}/expressive-marks-intro.itely | 0 .../snippets/expressive-marks.snippet-list | 54 + .../snippets/faking-a-hammer-in-tablatures.ly | 37 + .../snippets/figured-bass-headword.ly | 120 + .../snippets/fine-tuning-pedal-brackets.ly | 29 + .../fingering-symbols-for-wind-instruments.ly | 58 + ...-indications,-and-right-hand-fingerings.ly | 57 + Documentation/snippets/flamenco-notation.ly | 298 + .../snippets/flat-flags-and-beam-nibs.ly | 192 + Documentation/snippets/flute-slap-notation.ly | 46 + .../forcing-a-clef-symbol-to-be-displayed.ly | 32 + .../forcing-horizontal-shift-of-notes.ly | 64 + .../snippets/forcing-hyphens-to-be-shown.ly | 47 + ...-width-to-adapt-to-metronomemarks-width.ly | 43 + ...-to-start-from-a-given-letter-or-number.ly | 41 + .../snippets/formatting-lyrics-syllables.ly | 36 + .../fret-diagrams-explained-and-developed.ly | 44 +- .../snippets/fretboards-alternate-tables.ly | 122 + Documentation/snippets/fretted-headword.ly | 156 + .../fretted-string-harmonics-in-tablature.ly | 96 + .../snippets}/fretted-strings-intro.itely | 0 .../snippets/fretted-strings.snippet-list | 30 + .../snippets/generating-custom-flags.ly | 66 + .../snippets}/generating-random-notes.ly | 9 +- .../graphical-and-text-woodwind-diagrams.ly | 70 + .../grid-lines--changing-their-appearance.ly | 87 + ...izing-rhythms-and-notes-synchronization.ly | 11 +- Documentation/snippets/grouping-beats.ly | 50 + Documentation/snippets/guitar-slides.ly | 66 + .../snippets/guitar-strum-rhythms.ly | 86 + .../hairpins-with-different-line-styles.ly | 45 + ...y-customized-polymetric-time-signatures.ly | 60 + ...tied-notes-at-the-start-of-a-new-system.ly | 43 + ...ing-the-extender-line-for-text-dynamics.ly | 55 + ...ynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly | 177 + .../how-to-change-fret-diagram-position.ly | 12 +- ...ove-and-below-the-same-barline-method-1.ly | 53 + ...ove-and-below-the-same-barline-method-2.ly | 58 + ...to-put-ties-between-syllables-in-lyrics.ly | 22 + Documentation/snippets/hymn-template.ly | 153 + Documentation/snippets/incipit.ly | 292 + ...ross-staff-chords-with-arpeggio-bracket.ly | 80 + Documentation/snippets/inserting-a-caesura.ly | 59 + ...ore-fragments-above-a-staff,-as-markups.ly | 46 + .../snippets/isolated-percent-repeats.ly | 54 + .../snippets}/jazz-combo-template.ly | 53 +- .../snippets/keep-change-clefs-full-sized.ly | 49 + Documentation/snippets/keyboard-headword.ly | 256 + .../snippets}/keyboards-intro.itely | 0 .../snippets}/keyboards.snippet-list | 2 + Documentation/snippets/laissez-vibrer-ties.ly | 32 + .../snippets/letter-tablature-formatting.ly | 46 + .../snippets}/line-arrows.ly | 13 +- Documentation/snippets/lyrics-alignment.ly | 73 + .../snippets/lyrics-old-spacing-settings.ly | 129 + Documentation/snippets/makam-example.ly | 66 + ...invisible-with-the-transparent-property.ly | 44 + ...aking-slurs-with-complex-dash-structure.ly | 115 + ...ome-staff-lines-thicker-than-the-others.ly | 63 + ...ed-bass-extenders-for-only-some-numbers.ly | 34 + .../manually-controlling-beam-positions.ly | 33 + ...f-spoken-parts-with-a-cross-on-the-stem.ly | 54 + .../snippets}/markup-lines.ly | 8 +- Documentation/snippets/measure-counter.ly | 44 + ...che-layout-bar-lines-between-the-staves.ly | 69 + ...ulti-measure-rests-in-a-polyphonic-part.ly | 42 + .../snippets}/midi-intro.itely | 0 .../snippets}/midi.snippet-list | 0 .../snippets/modern-tab-text-clef.ly | 32 + ...ues-for-articulation-shorthand-notation.ly | 77 + .../modifying-tuplet-bracket-length.ly | 8 +- .../moving-dotted-notes-in-polyphony.ly | 44 + .../moving-slur-positions-vertically.ly | 70 + .../snippets/multi-measure-rest-markup.ly | 93 + Documentation/snippets/nesting-staves.ly | 91 + Documentation/snippets/new/GNUmakefile | 6 + Documentation/snippets/new/README | 6 + .../new/adding-fingerings-to-tablatures.ly | 37 + .../new/adjusting-lyrics-vertical-spacing.ly | 33 + .../snippets/new/alternative-breve-note.ly | 13 + .../snippets/new/ancient-headword.ly | 134 + .../new/automatic-beam-subdivisions.ly | 39 + .../new/beam-endings-in-score-context.ly | 43 + .../snippets/new/beam-grouping-in-7-8-time.ly | 20 + ...ring-markup-on-note-heads-automatically.ly | 63 + .../snippets/new/changing-the-ambitus-gap.ly | 40 + ...he-number-of-augmentation-dots-per-note.ly | 17 + .../changing-the-size-of-woodwind-diagrams.ly | 31 + ...signature-without-affecting-the-beaming.ly | 19 + .../new/chord-glissando-in-tablature.ly | 29 + .../new/chordchanges-for-fretboards.ly | 23 + Documentation/snippets/new/chords-headword.ly | 101 + Documentation/snippets/new/clip-systems.ly | 88 + .../snippets/new/compound-time-signatures.ly | 31 + ...onducting-signs,-measure-grouping-signs.ly | 50 + ...g-spanner-visibility-after-a-line-break.ly | 37 + ...-an-engraver-in-scheme-ambitus-engraver.ly | 323 + ...efined-fretboards-for-other-instruments.ly | 167 + .../snippets/new/displaying-complex-chords.ly | 25 + .../snippets/new/displaying-grob-ancestry.ly | 132 + ...entals-for-each-note-including-naturals.ly | 23 + .../dynamics-custom-text-spanner-postfix.ly | 35 + .../new/dynamics-text-spanner-postfix.ly | 25 + .../snippets/new/editorial-headword.ly | 99 + .../snippets/new/engravers-one-by-one.ly | 273 + .../snippets/new/expressive-headword.ly | 270 + .../new/faking-a-hammer-in-tablatures.ly | 19 + .../snippets/new/figured-bass-headword.ly | 112 + .../snippets/new/flamenco-notation.ly | 250 + .../new/fretboards-alternate-tables.ly | 75 + .../snippets/new/fretted-headword.ly | 148 + .../fretted-string-harmonics-in-tablature.ly | 74 + .../graphical-and-text-woodwind-diagrams.ly | 30 + Documentation/snippets/new/grouping-beats.ly | 15 + Documentation/snippets/new/guitar-slides.ly | 45 + ...tied-notes-at-the-start-of-a-new-system.ly | 15 + Documentation/snippets/new/incipit.ly | 276 + .../snippets/new/keyboard-headword.ly | 248 + .../new/letter-tablature-formatting.ly | 30 + .../new/lyrics-old-spacing-settings.ly | 96 + Documentation/snippets/new/makam-example.ly | 22 + ...aking-slurs-with-complex-dash-structure.ly | 36 + .../snippets/new/modern-tab-text-clef.ly | 16 + .../new/non-default-tuplet-numbers.ly | 41 + .../new/non-traditional-key-signatures.ly | 36 + .../new/numbers-as-easy-note-heads.ly | 56 + .../new/open-string-harmonics-in-tablature.ly | 64 + .../piano-template-with-centered-dynamics.ly | 53 + .../snippets/new/pitches-headword.ly | 143 + .../snippets/new/repeats-headword.ly | 131 + .../new/reverting-default-beam-endings.ly | 21 + .../snippets/new/rhythms-headword.ly | 216 + Documentation/snippets/new/screech-boink.ly | 73 + ...ing-the-double-repeat-default-for-volte.ly | 19 + ...ulation-above-and-below-a-note-or-chord.ly | 36 + .../snippets/new/simultaneous-headword.ly | 314 + .../snippets/new/slides-in-tablature.ly | 38 + .../new/snap-pizzicato-bartok-pizzicato.ly | 20 + Documentation/snippets/new/staff-headword.ly | 126 + .../stem-and-beam-behavior-in-tablature.ly | 21 + .../snippets/new/subdividing-beams.ly | 40 + Documentation/snippets/new/text-headword.ly | 234 + .../snippets/new/unfretted-headword.ly | 230 + ...grob-object-to-access-grobs-with--tweak.ly | 75 + .../new/using-the-whiteout-property.ly | 30 + ...template-with-automatic-piano-reduction.ly | 101 + ...nsemble-template-with-verse-and-refrain.ly | 99 + .../snippets/new/vocal-ensemble-template.ly | 94 + Documentation/snippets/new/vocal-headword.ly | 73 + Documentation/snippets/new/wind-headword.ly | 52 + .../new/woodwind-diagrams-key-lists.ly | 25 + .../snippets/new/woodwind-diagrams-listing.ly | 95 + .../snippets/non-default-tuplet-numbers.ly | 80 + .../non-traditional-key-signatures.ly | 125 + .../snippets/numbers-as-easy-note-heads.ly | 80 + .../open-string-harmonics-in-tablature.ly | 85 + .../orchestra,-choir-and-piano-template.ly | 202 + Documentation/snippets/ottava-text.ly | 71 + .../snippets/outputting-the-version-number.ly | 32 + .../snippets}/page-label.ly | 8 +- .../snippets}/paper-and-layout-intro.itely | 0 .../snippets}/paper-and-layout.snippet-list | 1 + .../snippets/partcombine-and-autobeamoff.ly | 163 + .../percent-repeat-count-visibility.ly | 52 + .../snippets/percent-repeat-counter.ly | 52 + .../snippets}/percussion-beaters.ly | 12 +- .../snippets}/percussion-intro.itely | 0 .../snippets}/percussion.snippet-list | 0 ...tting-line-breaks-within-beamed-tuplets.ly | 70 + .../snippets/piano-template-simple.ly | 77 + .../piano-template-with-centered-dynamics.ly | 106 + .../piano-template-with-centered-lyrics.ly | 100 + .../piano-template-with-melody-and-lyrics.ly | 104 + Documentation/snippets/pitches-headword.ly | 151 + .../snippets}/pitches-intro.itely | 0 Documentation/snippets/pitches.snippet-list | 26 + .../placement-of-right-hand-fingerings.ly | 66 + .../snippets/polyphony-in-tablature.ly | 75 + .../snippets/positioning-arpeggios.ly | 38 + ...tioning-fingering-indications-precisely.ly | 8 +- ...eams-at-the-height-of-normal-note-beams.ly | 46 + ...tioning-grace-notes-with-floating-space.ly | 75 + .../positioning-multi-measure-rests.ly | 88 + ...itioning-segno-and-coda-with-line-break.ly | 56 +- .../positioning-text-markups-inside-slurs.ly | 54 + ...naturals-from-being-automatically-added.ly | 64 + ...g-final-mark-from-removing-final-tuplet.ly | 47 + ...-printed-when-the-key-signature-changes.ly | 68 + ...repeat-sign-at-the-beginning-of-a-piece.ly | 69 + ...inting-bar-numbers-at-regular-intervals.ly | 68 + ...ing-bar-numbers-inside-boxes-or-circles.ly | 63 + ...nting-hairpins-using-al-niente-notation.ly | 56 + .../printing-marks-at-the-end-of-a-line.ly | 51 + .../snippets/printing-marks-on-every-staff.ly | 66 + ...ome-and-rehearsal-marks-below-the-staff.ly | 68 + ...ng-music-with-different-time-signatures.ly | 159 + ...names-with-and-without-an-octave-marker.ly | 54 + .../printing-text-from-right-to-left.ly | 29 + ...ng-the-bar-number-for-the-first-measure.ly | 72 + .../proportional-strict-notespacing.ly | 33 + .../putting-lyrics-inside-the-staff.ly | 32 + ...uoting-another-voice-with-transposition.ly | 88 + .../snippets/quoting-another-voice.ly | 111 + .../snippets/recorder-fingering-chart.ly | 85 + .../redefining-grace-note-global-defaults.ly | 82 + .../removing-bar-numbers-from-a-score.ly | 64 + ...n-staffgroup,-pianostaff,-or-grandstaff.ly | 49 + .../snippets/removing-the-first-empty-line.ly | 111 + Documentation/snippets/repeats-headword.ly | 139 + .../snippets}/repeats-intro.itely | 0 .../snippets}/repeats.snippet-list | 2 + Documentation/snippets/rest-styles.ly | 73 + .../reverting-default-beam-endings.ly | 59 + Documentation/snippets/rhythmic-slashes.ly | 55 + Documentation/snippets/rhythms-headword.ly | 224 + .../snippets}/rhythms-intro.itely | 0 .../snippets}/rhythms.snippet-list | 18 +- .../satb-choir-template---four-staves.ly | 104 + .../snippets/score-for-diatonic-accordion.ly | 246 + Documentation/snippets/screech-boink.ly | 81 + ...ancellations-from-key-signature-changes.ly | 14 +- .../setting-hairpin-behavior-at-bar-lines.ly | 60 + .../snippets/setting-system-separators.ly | 51 + ...ing-the-double-repeat-default-for-volte.ly | 49 + .../setting-the-minimum-length-of-hairpins.ly | 53 + .../snippets/shortening-volta-brackets.ly | 68 + .../snippets/showing-chords-at-changes.ly | 49 + ...ulation-above-and-below-a-note-or-chord.ly | 44 + Documentation/snippets/simple-lead-sheet.ly | 51 + .../snippets/simultaneous-headword.ly | 322 + .../snippets}/simultaneous-notes-intro.itely | 0 .../snippets}/simultaneous-notes.snippet-list | 1 + ...template-with-notes,-lyrics,-and-chords.ly | 91 + ...te-with-notes,-lyrics,-chords-and-frets.ly | 69 + ...le-staff-template-with-notes-and-chords.ly | 89 + ...le-staff-template-with-notes-and-lyrics.ly | 106 + .../single-staff-template-with-only-notes.ly | 84 + .../snippets/skips-in-lyric-mode-2.ly | 25 + Documentation/snippets/skips-in-lyric-mode.ly | 25 + Documentation/snippets/slides-in-tablature.ly | 62 + .../snap-pizzicato-bartok-pizzicato.ly | 53 + .../snippets}/spacing-intro.itely | 0 .../snippets}/spacing.snippet-list | 0 Documentation/snippets/staff-headword.ly | 134 + .../snippets}/staff-notation-intro.itely | 0 .../snippets/staff-notation.snippet-list | 33 + .../snippets/stand-alone-two-column-markup.ly | 68 + .../stem-and-beam-behavior-in-tablature.ly | 59 + Documentation/snippets/stemlets.ly | 47 + .../snippets/string-number-extender-lines.ly | 40 + .../string-quartet-template-simple.ly | 117 + ...ng-quartet-template-with-separate-parts.ly | 273 + Documentation/snippets/subdividing-beams.ly | 91 + ...sing-warnings-for-clashing-note-columns.ly | 33 + Documentation/snippets/table-of-contents.ly | 40 + .../snippets}/template-intro.itely | 0 .../snippets}/template.snippet-list | 4 + Documentation/snippets/text-headword.ly | 242 + .../snippets}/text-intro.itely | 0 .../snippets}/text.snippet-list | 5 +- Documentation/snippets/three-sided-box.ly | 55 + Documentation/snippets/tick-bar-lines.ly | 27 + .../snippets/time-signature-in-parentheses.ly | 25 + ...tor-as-a-number-instead-of-the-fraction.ly | 77 + .../snippets}/titles-intro.itely | 0 .../snippets}/titles.snippet-list | 0 ...scription-of-ancient-music-with-incipit.ly | 300 + ...ith-minimum-accidentals-smart-transpose.ly | 184 + .../snippets/tweaking-clef-properties.ly | 199 + .../tweaking-grace-layout-within-music.ly | 75 + .../tweaks-and-overrides-intro.itely | 0 .../tweaks-and-overrides.snippet-list | 79 + Documentation/snippets/unfretted-headword.ly | 238 + .../snippets}/unfretted-strings-intro.itely | 0 .../snippets}/unfretted-strings.snippet-list | 2 +- ...e-bracket-at-the-start-of-a-staff-group.ly | 58 + .../snippets/using-alternative-flag-styles.ly | 52 + ...ggiobracket-to-make-divisi-more-visible.ly | 83 + .../using-double-slurs-for-legato-chords.ly | 51 + ...ng-grace-note-slashes-with-normal-heads.ly | 45 + ...grob-object-to-access-grobs-with--tweak.ly | 123 + ...pt-to-generate-special-note-head-shapes.ly | 13 +- ...tweak-command-to-tweak-individual-grobs.ly | 30 + .../snippets/using-the-whiteout-property.ly | 63 + .../snippets/using-ties-with-arpeggios.ly | 70 + .../lsr => Documentation/snippets}/utf-8.ly | 14 +- ...cal-line-as-a-baroque-articulation-mark.ly | 36 + ...ically-aligned-dynamics-and-textscripts.ly | 86 + ...aligning-dynamics-across-multiple-notes.ly | 38 + .../vertically-aligning-ossias-and-lyrics.ly | 78 + .../vertically-centered-common-lyrics.ly | 8 +- ...centering-paired-figured-bass-extenders.ly | 53 + ...template-with-automatic-piano-reduction.ly | 163 + ...rics-aligned-below-and-above-the-staves.ly | 125 + ...nsemble-template-with-verse-and-refrain.ly | 153 + .../snippets/vocal-ensemble-template.ly | 155 + Documentation/snippets/vocal-headword.ly | 81 + .../snippets}/vocal-music-intro.itely | 0 .../snippets/vocal-music.snippet-list | 33 + Documentation/snippets/volta-below-chords.ly | 60 + Documentation/snippets/volta-multi-staff.ly | 41 + .../volta-text-markup-using-repeatcommands.ly | 11 +- Documentation/snippets/wind-headword.ly | 60 + .../snippets}/winds-intro.itely | 0 Documentation/snippets/winds.snippet-list | 7 + .../snippets/woodwind-diagrams-key-lists.ly | 69 + .../snippets/woodwind-diagrams-listing.ly | 131 + .../snippets}/world-music-intro.itely | 0 .../snippets}/world-music.snippet-list | 0 Documentation/texinfo.css | 106 - Documentation/topdocs/AUTHORS.texi | 227 +- Documentation/topdocs/GNUmakefile | 6 +- Documentation/topdocs/INSTALL.texi | 2 +- Documentation/topdocs/NEWS.tely | 611 - Documentation/topdocs/README.texi | 14 +- Documentation/translations.html.in | 768 - Documentation/translations.itexi | 9057 ++++++++ Documentation/translations.template.html.in | 40 - Documentation/usage.tely | 83 + Documentation/usage/GNUmakefile | 10 + Documentation/usage/external.itely | 599 + .../{user => usage}/latex-example.latex | 4 +- .../latex-lilypond-example.latex | 32 +- Documentation/usage/lilypond-book.itely | 1281 + Documentation/usage/running.itely | 813 + Documentation/usage/suggestions.itely | 609 + Documentation/usage/updating.itely | 262 + Documentation/user/GNUmakefile | 155 - Documentation/user/README.txt | 5 - Documentation/user/ancient.itely | 2562 -- Documentation/user/baer-flat-gray.png | Bin 45277 -> 0 bytes Documentation/user/changing-defaults.itely | 3182 --- Documentation/user/cheatsheet.itely | 298 - Documentation/user/chords.itely | 1129 - Documentation/user/compile.itely | 511 - Documentation/user/converters.itely | 342 - Documentation/user/dedication.itely | 17 - Documentation/user/editorial.itely | 697 - Documentation/user/expressive.itely | 1040 - Documentation/user/fdl.itexi | 403 - Documentation/user/fretted-strings.itely | 1332 -- Documentation/user/fundamental.itely | 2905 --- Documentation/user/glossary.html.in | 8 - Documentation/user/henle-flat-gray.png | Bin 25619 -> 0 bytes Documentation/user/input.itely | 1966 -- Documentation/user/install.itely | 85 - Documentation/user/introduction.itely | 1137 - Documentation/user/keyboards.itely | 646 - Documentation/user/lily-flat-bw.png | Bin 2973 -> 0 bytes Documentation/user/lilypond-book.itely | 1046 - Documentation/user/lilypond-learning.tely | 153 - Documentation/user/lilypond-program.tely | 149 - Documentation/user/lilypond.tely | 229 - Documentation/user/literature.itely | 84 - Documentation/user/notation-appendices.itely | 914 - Documentation/user/notation.itely | 35 - Documentation/user/percussion.itely | 595 - Documentation/user/pitches.itely | 2445 -- Documentation/user/preface.itely | 59 - .../user/programming-interface.itely | 1510 -- Documentation/user/repeats.itely | 528 - Documentation/user/rhythms.itely | 2860 --- Documentation/user/running.itely | 686 - Documentation/user/scheme-tutorial.itely | 288 - Documentation/user/setup.itely | 328 - Documentation/user/simultaneous.itely | 838 - Documentation/user/spacing.itely | 2634 --- Documentation/user/specialist.itely | 38 - Documentation/user/staff.itely | 1322 -- Documentation/user/templates.itely | 316 - Documentation/user/text.itely | 1388 -- Documentation/user/tutorial.itely | 1988 -- Documentation/user/tweaks.itely | 3753 --- Documentation/user/unfretted-strings.itely | 202 - Documentation/user/vocal.itely | 1333 -- Documentation/user/wind.itely | 223 - Documentation/user/working.itely | 831 - Documentation/user/world.itely | 384 - Documentation/web.texi | 313 + Documentation/web/GNUmakefile | 11 + Documentation/web/community.itexi | 848 + Documentation/web/download.itexi | 615 + Documentation/web/introduction.itexi | 1259 + Documentation/web/ly-examples/GNUmakefile | 22 + .../web/ly-examples/ancient-headword.ly | 124 + .../web/ly-examples/aucun-snippet.ly | 257 + Documentation/web/ly-examples/bach-bwv610.ly | 183 + .../web/ly-examples/bach-schenker.ly | 271 + Documentation/web/ly-examples/cary-layout.ily | 105 + .../web/ly-examples}/cary.ly | 24 +- Documentation/web/ly-examples/chart.ly | 44 + .../web/ly-examples/example-header.ily | 12 + Documentation/web/ly-examples/granados.ly | 148 + Documentation/web/ly-examples/orchestra.ly | 574 + Documentation/web/ly-examples/sesto-full.ly | 69 + Documentation/web/ly-examples/sesto-piano.ly | 46 + Documentation/web/ly-examples/sesto-violin.ly | 27 + Documentation/web/ly-examples/sesto.ily | 219 + Documentation/web/ly-examples/tab-example.ly | 90 + Documentation/web/ly-examples/theory.ly | 63 + Documentation/web/manuals.itexi | 573 + Documentation/web/news-front.itexi | 133 + Documentation/web/news.itexi | 4361 ++++ Documentation/web/others-did.bib | 39 + Documentation/web/server/GNUmakefile | 7 + Documentation/web/server/favicon.ico | Bin 0 -> 318 bytes .../web/server/lilypond.org.htaccess | 127 + Documentation/web/server/robots.txt | 19 + Documentation/web/server/website-dir.htaccess | 2 + Documentation/web/we-wrote.bib | 30 + Documentation/zh/GNUmakefile | 10 + Documentation/zh/macros.itexi | 801 + Documentation/zh/search-box.ihtml | 13 + Documentation/zh/texidocs/GNUmakefile | 5 + Documentation/zh/translations.itexi | 175 + Documentation/zh/web.texi | 311 + Documentation/zh/web/GNUmakefile | 5 + Documentation/zh/web/community.itexi | 122 + Documentation/zh/web/download.itexi | 632 + Documentation/zh/web/introduction.itexi | 140 + Documentation/zh/web/manuals.itexi | 545 + Documentation/zh/web/news-front.itexi | 16 + GNUmakefile.in | 69 +- INSTALL.txt | 855 +- LICENSE | 34 + LICENSE.DOCUMENTATION | 19 + NEWS.txt | 462 +- README.txt | 14 +- ROADMAP | 141 +- THANKS | 50 + VERSION | 7 +- aclocal.m4 | 118 +- autogen.sh | 25 +- config.hh.in | 19 +- config.make.in | 11 +- configure | 3492 +-- configure.in | 87 +- elisp/lilypond-mode.el | 32 +- elisp/lilypond-song.el | 40 +- elisp/lilypond-what-beat.el | 524 +- flower/README | 6 +- flower/TODO | 2 - flower/cpu-timer.cc | 17 +- flower/file-name.cc | 19 +- flower/file-path.cc | 19 +- flower/getopt-long.cc | 17 +- flower/include/arithmetic-operator.hh | 17 +- flower/include/axis.hh | 17 +- flower/include/compare.hh | 17 +- flower/include/cpu-timer.hh | 17 +- flower/include/direction.hh | 25 +- flower/include/drul-array.hh | 17 +- flower/include/file-name.hh | 17 +- flower/include/file-path.hh | 17 +- flower/include/flower-proto.hh | 17 +- flower/include/guile-compatibility.hh | 102 +- flower/include/international.hh | 19 +- flower/include/interval-set.hh | 17 +- flower/include/interval.hh | 26 +- flower/include/interval.tcc | 42 +- flower/include/libc-extension.hh | 17 +- flower/include/matrix.hh | 17 +- flower/include/memory-stream.hh | 17 +- flower/include/offset.hh | 17 +- flower/include/parray.hh | 17 +- flower/include/polynomial.hh | 22 +- flower/include/pqueue.hh | 17 +- flower/include/rational.hh | 17 +- flower/include/real.hh | 17 +- flower/include/std-string.hh | 17 +- flower/include/std-vector.hh | 48 +- flower/include/string-convert.hh | 1 + flower/include/tuple.hh | 16 +- flower/include/virtual-methods.hh | 21 +- flower/include/warn.hh | 18 +- flower/international.cc | 17 +- flower/interval-set.cc | 17 +- flower/interval.cc | 17 +- flower/libc-extension.cc | 23 +- flower/memory-stream.cc | 17 +- flower/offset.cc | 17 +- flower/polynomial.cc | 17 +- flower/rational.cc | 21 +- flower/real.cc | 8 +- flower/rtti.cc | 13 - flower/std-string.cc | 20 +- flower/string-convert.cc | 15 +- flower/warn.cc | 24 +- input/GNUmakefile | 7 +- input/bach-schenker.ly | 258 - input/cary-layout.ly | 104 - input/example-1.ly | 21 - input/example-2.ly | 21 - input/example-3.ly | 36 - input/lsr/GNUmakefile | 70 - input/lsr/README | 20 - ...a-figured-bass-above-or-below-the-notes.ly | 63 - input/lsr/adding-ambitus-per-voice.ly | 47 - .../adding-an-extra-staff-at-a-line-break.ly | 61 - input/lsr/adding-an-extra-staff.ly | 39 - .../adding-bar-lines-to-chordnames-context.ly | 32 - ...hen-using-tuplet-and-non-tuplet-rhythms.ly | 46 - input/lsr/adding-fingerings-to-a-score.ly | 18 - input/lsr/adding-fingerings-to-tablatures.ly | 47 - ...ound-an-expressive-mark-or-chordal-note.ly | 32 - .../lsr/adding-the-current-date-to-a-score.ly | 47 - ...ing-volta-brackets-to-additional-staves.ly | 36 - .../additional-voices-to-avoid-collisions.ly | 53 - .../lsr/adjusting-lyrics-vertical-spacing.ly | 53 - .../adjusting-the-shape-of-falls-and-doits.ly | 39 - ...aligning-and-centering-instrument-names.ly | 86 - input/lsr/aligning-bar-numbers.ly | 33 - ...ing-marks-with-various-notation-objects.ly | 90 - ...-objects-created-with-the--mark-command.ly | 28 - ...ngerings-to-be-printed-inside-the-staff.ly | 36 - input/lsr/ambitus-with-multiple-voices.ly | 48 - input/lsr/ambitus.ly | 41 - .../lsr/analysis-brackets-above-the-staff.ly | 36 - ...modern-transcription-of-gregorian-music.ly | 70 - input/lsr/ancient-time-signatures.ly | 27 - ...yles-depending-on-the-step-of-the-scale.ly | 100 - input/lsr/arabic-improvisation.ly | 37 - input/lsr/automatic-beam-subdivisions.ly | 47 - ...oiding-collisions-with-chord-fingerings.ly | 39 - input/lsr/beam-endings-in-score-context.ly | 59 - input/lsr/beam-grouping-in-7-8-time.ly | 46 - input/lsr/beams-across-line-breaks.ly | 39 - ...staff-lines-using-the--whiteout-command.ly | 32 - input/lsr/broken-crescendo-hairpin.ly | 76 - input/lsr/caesura-railtracks-with-fermata.ly | 41 - .../lsr/center-text-below-hairpin-dynamics.ly | 49 - input/lsr/changing--flageolet-mark-size.ly | 37 - ...changing-a-single-notes-size-in-a-chord.ly | 41 - input/lsr/changing-beam-knee-gap.ly | 52 - input/lsr/changing-chord-separator.ly | 29 - .../changing-form-of-multi-measure-rests.ly | 43 - ...ng-midi-output-to-one-channel-per-voice.ly | 78 - input/lsr/changing-partcombine-texts.ly | 38 - input/lsr/changing-stanza-fonts.ly | 32 - ...xt-and-spanner-styles-for-text-dynamics.ly | 54 - ...f-a-slur-from-solid-to-dotted-or-dashed.ly | 34 - input/lsr/changing-the-breath-mark-symbol.ly | 39 - ...names-to-german-or-semi-german-notation.ly | 55 - .../changing-the-default-text-font-family.ly | 52 - ...changing-the-number-of-lines-in-a-staff.ly | 39 - ...e-positions-of-figured-bass-alterations.ly | 35 - input/lsr/changing-the-staff-size.ly | 33 - ...ging-the-tempo-without-a-metronome-mark.ly | 36 - ...signature-without-affecting-the-beaming.ly | 44 - input/lsr/changing-the-tuplet-number.ly | 47 - input/lsr/chant-or-psalms-notation.ly | 39 - input/lsr/chord-name-exceptions.ly | 49 - input/lsr/chord-name-major7.ly | 20 - input/lsr/clip-systems.ly | 91 - input/lsr/clusters.ly | 33 - ...coloring-notes-depending-on-their-pitch.ly | 57 - .../combining-dynamics-with-markup-texts.ly | 30 - .../combining-two-parts-on-the-same-staff.ly | 89 - input/lsr/compound-time-signatures.ly | 60 - ...onducting-signs,-measure-grouping-signs.ly | 56 - input/lsr/contemporary-glissando.ly | 43 - ...lling-the-placement-of-chord-fingerings.ly | 45 - ...olling-the-vertical-ordering-of-scripts.ly | 59 - .../controlling-tuplet-bracket-visibility.ly | 38 - input/lsr/creating-a-delayed-turn.ly | 44 - ...eggios-across-notes-in-different-voices.ly | 45 - input/lsr/creating-blank-staves.ly | 58 - ...-cross-staff-arpeggios-in-a-piano-staff.ly | 49 - ...cross-staff-arpeggios-in-other-contexts.ly | 59 - ...creating-metronome-marks-in-markup-mode.ly | 36 - .../creating-real-parenthesized-dynamics.ly | 50 - input/lsr/custodes.ly | 42 - ...f-stems-on-the-center-line-of-the-staff.ly | 31 - ...efined-fretboards-for-other-instruments.ly | 146 - ...bracket-with-only-one-staff-in-a-system.ly | 60 - input/lsr/displaying-complex-chords.ly | 31 - ...entals-for-each-note-including-naturals.ly | 63 - input/lsr/dotted-harmonics.ly | 24 - input/lsr/double-glissando.ly | 33 - input/lsr/drawing-boxes-around-grobs.ly | 34 - ...ng-native-postscript-in-a--markup-block.ly | 33 - input/lsr/engravers-one-by-one.ly | 317 - input/lsr/engraving-ties-manually.ly | 45 - ...l-tuplets-using-only-one--times-command.ly | 62 - input/lsr/expressive-marks.snippet-list | 39 - input/lsr/faking-a-hammer-in-tablatures.ly | 24 - input/lsr/fine-tuning-pedal-brackets.ly | 25 - ...-indications,-and-right-hand-fingerings.ly | 43 - input/lsr/flamenco-notation.ly | 249 - input/lsr/flat-flags-and-beam-nibs.ly | 144 - input/lsr/flute-slap-notation.ly | 32 - .../lsr/forcing-horizontal-shift-of-notes.ly | 36 - ...-to-start-from-a-given-letter-or-number.ly | 37 - input/lsr/formatting-lyrics-syllables.ly | 32 - input/lsr/fretted-strings.snippet-list | 20 - .../grid-lines--changing-their-appearance.ly | 64 - input/lsr/grouping-beats.ly | 39 - input/lsr/guitar-strum-rhythms.ly | 68 - ...y-customized-polymetric-time-signatures.ly | 57 - ...ing-the-extender-line-for-text-dynamics.ly | 39 - ...ynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly | 161 - ...to-put-ties-between-syllables-in-lyrics.ly | 18 - input/lsr/incipit.ly | 281 - ...ross-staff-chords-with-arpeggio-bracket.ly | 61 - input/lsr/inserting-a-caesura.ly | 43 - ...ore-fragments-above-a-staff,-as-markups.ly | 41 - input/lsr/isolated-percent-repeats.ly | 30 - input/lsr/laissez-vibrer-ties.ly | 28 - input/lsr/letter-tablature-formatting.ly | 42 - input/lsr/lilypond-snippets.tely | 216 - input/lsr/lyrics-alignment.ly | 43 - input/lsr/makam-example.ly | 36 - ...invisible-with-the-transparent-property.ly | 40 - ...ome-staff-lines-thicker-than-the-others.ly | 33 - ...ed-bass-extenders-for-only-some-numbers.ly | 30 - .../manually-controlling-beam-positions.ly | 29 - ...f-spoken-parts-with-a-cross-on-the-stem.ly | 49 - input/lsr/measure-counter.ly | 39 - ...che-layout-bar-lines-between-the-staves.ly | 42 - ...ulti-measure-rests-in-a-polyphonic-part.ly | 38 - input/lsr/modern-tab-text-clef.ly | 33 - ...ues-for-articulation-shorthand-notation.ly | 53 - input/lsr/multi-measure-rest-markup.ly | 52 - input/lsr/nesting-staves.ly | 52 - input/lsr/non-traditional-key-signatures.ly | 92 - .../orchestra,-choir-and-piano-template.ly | 163 - input/lsr/ottava-text.ly | 49 - input/lsr/outputting-the-version-number.ly | 28 - input/lsr/percent-repeat-count-visibility.ly | 30 - input/lsr/percent-repeat-counter.ly | 28 - ...tting-line-breaks-within-beamed-tuplets.ly | 53 - input/lsr/piano-template-simple.ly | 53 - .../piano-template-with-centered-dynamics.ly | 100 - .../piano-template-with-centered-lyrics.ly | 67 - .../piano-template-with-melody-and-lyrics.ly | 70 - input/lsr/pitches.snippet-list | 17 - .../lsr/placement-of-right-hand-fingerings.ly | 50 - input/lsr/polyphony-in-tablature.ly | 60 - ...tioning-grace-notes-with-floating-space.ly | 31 - input/lsr/positioning-multi-measure-rests.ly | 67 - .../positioning-text-markups-inside-slurs.ly | 31 - ...naturals-from-being-automatically-added.ly | 51 - ...-printed-when-the-key-signature-changes.ly | 47 - ...repeat-sign-at-the-beginning-of-a-piece.ly | 41 - ...inting-bar-numbers-at-regular-intervals.ly | 28 - ...ing-bar-numbers-inside-boxes-or-circles.ly | 33 - ...nting-hairpins-using-al-niente-notation.ly | 40 - ...g-marks-at-the-end-of-a-line-or-a-score.ly | 45 - input/lsr/printing-marks-on-every-staff.ly | 42 - ...ome-and-rehearsal-marks-below-the-staff.ly | 41 - ...ng-music-with-different-time-signatures.ly | 145 - input/lsr/printing-text-from-right-to-left.ly | 25 - ...ng-the-bar-number-for-the-first-measure.ly | 24 - input/lsr/proportional-strict-notespacing.ly | 29 - ...uoting-another-voice-with-transposition.ly | 56 - input/lsr/quoting-another-voice.ly | 63 - .../redefining-grace-note-global-defaults.ly | 35 - .../lsr/removing-bar-numbers-from-a-score.ly | 27 - input/lsr/removing-the-first-empty-line.ly | 70 - input/lsr/rest-styles.ly | 57 - input/lsr/reverting-default-beam-endings.ly | 44 - input/lsr/rhythmic-slashes.ly | 51 - input/lsr/score-for-diatonic-accordion.ly | 234 - .../setting-hairpin-behavior-at-bar-lines.ly | 41 - .../setting-the-minimum-length-of-hairpins.ly | 38 - input/lsr/shortening-volta-brackets.ly | 41 - input/lsr/showing-chords-at-changes.ly | 35 - input/lsr/simple-lead-sheet.ly | 30 - ...template-with-notes,-lyrics,-and-chords.ly | 56 - ...te-with-notes,-lyrics,-chords-and-frets.ly | 64 - ...le-staff-template-with-notes-and-chords.ly | 54 - ...le-staff-template-with-notes-and-lyrics.ly | 61 - .../single-staff-template-with-only-notes.ly | 45 - input/lsr/skips-in-lyric-mode-2.ly | 21 - input/lsr/skips-in-lyric-mode.ly | 21 - .../snap-pizzicato-markup-bartok-pizzicato.ly | 66 - .../specifying-context-with-beatgrouping.ly | 44 - input/lsr/staff-notation.snippet-list | 28 - input/lsr/stand-alone-two-column-markup.ly | 45 - .../stem-and-beam-behavior-in-tablature.ly | 43 - input/lsr/stemlets.ly | 42 - input/lsr/string-quartet-template-simple.ly | 82 - ...ng-quartet-template-with-separate-parts.ly | 164 - input/lsr/sub-dividing-beams.ly | 58 - ...sing-warnings-for-clashing-note-columns.ly | 29 - input/lsr/table-of-contents.ly | 36 - input/lsr/three-sided-box.ly | 52 - input/lsr/tick-bar-lines.ly | 23 - input/lsr/time-signature-in-parentheses.ly | 21 - ...tor-as-a-number-instead-of-the-fraction.ly | 40 - ...scription-of-ancient-music-with-incipit.ly | 291 - ...ith-minimum-accidentals-smart-transpose.ly | 147 - input/lsr/tweaking-clef-properties.ly | 156 - .../lsr/tweaking-grace-layout-within-music.ly | 29 - input/lsr/tweaks-and-overrides.snippet-list | 55 - ...e-bracket-at-the-start-of-a-staff-group.ly | 32 - .../lsr/using-beatlength-and-beatgrouping.ly | 65 - .../using-double-slurs-for-legato-chords.ly | 35 - ...ng-grace-note-slashes-with-normal-heads.ly | 20 - ...tweak-command-to-tweak-individual-grobs.ly | 26 - input/lsr/using-ties-with-arpeggios.ly | 53 - ...cal-line-as-a-baroque-articulation-mark.ly | 36 - ...ically-aligned-dynamics-and-textscripts.ly | 62 - ...aligning-dynamics-across-multiple-notes.ly | 33 - .../vertically-aligning-ossias-and-lyrics.ly | 53 - ...template-with-automatic-piano-reduction.ly | 118 - ...rics-aligned-below-and-above-the-staves.ly | 96 - input/lsr/vocal-ensemble-template.ly | 109 - input/lsr/vocal-music.snippet-list | 21 - input/lsr/volta-below-chords.ly | 44 - input/lsr/volta-multi-staff.ly | 36 - input/lsr/winds.snippet-list | 1 - input/manual/GNUmakefile | 9 - input/manual/README | 5 - input/manual/ancient-headword.ly | 135 - input/manual/chord-names-languages.ly | 47 - input/manual/chords-headword.ly | 101 - input/manual/divisiones.ly | 42 - input/manual/editorial-headword.ly | 101 - input/manual/expressive-headword.ly | 263 - input/manual/figured-bass-headword.ly | 117 - input/manual/font-table.ly | 224 - input/manual/fretted-headword.ly | 144 - input/manual/keyboard-headword.ly | 241 - input/manual/pitches-headword.ly | 143 - input/manual/repeats-headword.ly | 124 - input/manual/rhythms-headword.ly | 209 - input/manual/screech-boink.ly | 73 - input/manual/script-chart.ly | 58 - input/manual/simultaneous-headword.ly | 313 - input/manual/staff-headword.ly | 119 - input/manual/text-headword.ly | 236 - input/manual/unfretted-headword.ly | 223 - input/manual/wind-headword.ly | 46 - input/mutopia-header.ly | 37 - input/mutopia/E.Satie/GNUmakefile | 9 - .../E.Satie/petite-ouverture-a-danser.ly | 157 - input/mutopia/F.Schubert/GNUmakefile | 8 - input/mutopia/F.Schubert/standchen.ly | 461 - input/mutopia/GNUmakefile | 9 - input/mutopia/J.S.Bach/GNUmakefile | 11 - input/mutopia/J.S.Bach/bwv940.ly | 172 - input/mutopia/J.S.Bach/wtk1-fugue2.ly | 232 - input/mutopia/R.Schumann/GNUmakefile | 8 - input/mutopia/R.Schumann/romanze-op28-2.ly | 298 - input/mutopia/W.A.Mozart/GNUmakefile | 10 - input/mutopia/claop.py | 308 - input/new/GNUmakefile | 7 - input/new/README | 17 - input/paddy.abc | 16 - input/proportional.ly | 127 - input/puer-fragment.ly | 286 - input/regression/AAA-intro-regression.tely | 4 +- input/regression/GNUmakefile | 2 +- input/regression/abc2ly/GNUmakefile | 14 + input/regression/abc2ly/clefs.abc | 13 + input/regression/abc2ly/grace.abc | 6 + input/regression/abc2ly/kirchentonarten.abc | 6 + input/regression/abc2ly/tempo.abc | 7 + input/regression/abc2ly/tuplet-slur.abc | 5 + input/regression/accidental-ancient.ly | 2 +- .../accidental-broken-tie-spacing.ly | 2 +- input/regression/accidental-cautionary.ly | 2 +- input/regression/accidental-clef-change.ly | 9 +- input/regression/accidental-collision.ly | 2 +- input/regression/accidental-contemporary.ly | 2 +- input/regression/accidental-double.ly | 2 +- .../accidental-forced-tie-barline.ly | 2 +- input/regression/accidental-forced-tie.ly | 8 +- input/regression/accidental-ledger.ly | 2 +- input/regression/accidental-octave.ly | 2 +- input/regression/accidental-piano.ly | 2 +- .../accidental-placement-padding.ly | 12 + .../accidental-placement-samepitch.ly | 2 +- input/regression/accidental-placement.ly | 2 +- input/regression/accidental-quarter.ly | 2 +- input/regression/accidental-single-double.ly | 2 +- input/regression/accidental-suggestions.ly | 2 +- input/regression/accidental-tie-overridden.ly | 23 + input/regression/accidental-tie.ly | 2 +- .../accidental-unbroken-tie-spacing.ly | 8 +- input/regression/accidental-voice.ly | 2 +- input/regression/accidental.ly | 4 +- input/regression/alignment-order.ly | 2 +- .../alignment-vertical-manual-setting.ly | 12 +- .../regression/alignment-vertical-spacing.ly | 51 - input/regression/ambitus-gap.ly | 20 + input/regression/ambitus-percussion-staves.ly | 2 +- input/regression/ambitus-pitch-ordering.ly | 14 +- input/regression/ambitus-with-ligature.ly | 15 + input/regression/ambitus.ly | 39 +- input/regression/apply-context.ly | 2 +- input/regression/apply-output.ly | 4 +- input/regression/arpeggio-bracket.ly | 2 +- input/regression/arpeggio-collision.ly | 2 +- input/regression/arpeggio-no-overshoot.ly | 2 +- input/regression/arpeggio-no-staff-symbol.ly | 10 + input/regression/arpeggio-parenthesis.ly | 11 +- input/regression/arpeggio-span-collision.ly | 25 + input/regression/arpeggio-span-one-staff.ly | 2 +- input/regression/arpeggio.ly | 2 +- .../regression/articulation-snappizzicato.ly | 6 + input/regression/augmentum.ly | 2 +- input/regression/auto-beam-bar.ly | 2 +- .../regression/auto-beam-beaming-override.ly | 4 +- input/regression/auto-beam-beat-grouping.ly | 30 - input/regression/auto-beam-breathe.ly | 16 + input/regression/auto-beam-no-beam.ly | 6 +- input/regression/auto-beam-partial-grace.ly | 13 + input/regression/auto-beam-partial.ly | 13 + input/regression/auto-beam-recheck.ly | 15 + input/regression/auto-beam-triplet.ly | 2 +- input/regression/auto-beam-tuplets.ly | 2 +- input/regression/auto-beam.ly | 2 +- input/regression/auto-change.ly | 2 +- input/regression/autobeam-nobeam.ly | 14 + input/regression/autobeam-show-defaults.ly | 144 + ...am-start-at-beginning-of-measure-in-3-4.ly | 19 + .../automatic-polyphony-context-id.ly | 36 + .../automatic-polyphony-drumstaff.ly | 15 + .../automatic-polyphony-tabstaff.ly | 18 + input/regression/backend-excercise.ly | 12 +- input/regression/backend-svg.ly | 2 +- .../baerenreiter-sarabande.ly | 47 +- input/regression/balloon.ly | 21 +- input/regression/bar-check-redefine.ly | 2 +- input/regression/bar-extent.ly | 88 + input/regression/bar-line-dashed.ly | 2 +- input/regression/bar-line-dotted.ly | 2 +- input/regression/bar-line-segno.ly | 25 + input/regression/bar-line-thick.ly | 15 + input/regression/bar-line-tick.ly | 2 +- input/regression/bar-number.ly | 2 +- input/regression/bar-scripts.ly | 2 +- input/regression/beam-auto-knee.ly | 2 +- input/regression/beam-auto.ly | 2 +- input/regression/beam-beamlet-break.ly | 6 +- input/regression/beam-beamlet-grace.ly | 2 +- input/regression/beam-beat-grouping.ly | 9 +- input/regression/beam-break-no-bar.ly | 2 +- input/regression/beam-break.ly | 2 +- input/regression/beam-center-slope.ly | 2 +- .../regression/beam-collision-accidentals.ly | 12 + input/regression/beam-collision-basic.ly | 90 + input/regression/beam-collision-beamcount.ly | 41 + input/regression/beam-collision-classic.ly | 58 + .../regression/beam-collision-cross-staff.ly | 26 + .../beam-collision-feasible-region.ly | 42 + input/regression/beam-collision-grace.ly | 16 + .../regression/beam-collision-large-object.ly | 15 + input/regression/beam-collision-off.ly | 32 + .../beam-collision-opposite-stem.ly | 29 + .../beam-collision-prefatory-matter.ly | 31 + .../regression/beam-collision-scaled-staff.ly | 14 + input/regression/beam-collision-voice-only.ly | 14 + input/regression/beam-concave-chord.ly | 49 +- input/regression/beam-concave-damped.ly | 2 +- input/regression/beam-concave.ly | 4 +- .../regression/beam-cross-staff-auto-knee.ly | 2 +- input/regression/beam-cross-staff-script.ly | 2 +- input/regression/beam-cross-staff-slope.ly | 2 +- input/regression/beam-cross-staff.ly | 2 +- input/regression/beam-damp.ly | 2 +- input/regression/beam-default-lengths.ly | 2 +- input/regression/beam-extreme.ly | 2 +- input/regression/beam-feather-breaking.ly | 137 + .../beam-feather-knee-stem-length.ly | 2 +- input/regression/beam-feather.ly | 4 +- .../regression/beam-flat-retain-direction.ly | 2 +- input/regression/beam-forced-direction.ly | 12 + input/regression/beam-french.ly | 2 +- input/regression/beam-funky-beamlet.ly | 2 +- input/regression/beam-funky.ly | 2 +- input/regression/beam-isknee.ly | 2 +- input/regression/beam-knee-symmetry.ly | 2 +- input/regression/beam-length.ly | 2 +- input/regression/beam-manual-beaming.ly | 2 +- input/regression/beam-multiple-cross-staff.ly | 2 +- .../beam-multiplicity-over-rests.ly | 2 +- input/regression/beam-outside-beamlets.ly | 2 +- input/regression/beam-over-barline.ly | 2 +- input/regression/beam-position.ly | 2 +- input/regression/beam-quant-standard.ly | 64 +- input/regression/beam-quanting-32nd.ly | 2 +- input/regression/beam-quanting-horizontal.ly | 2 +- input/regression/beam-quarter.ly | 9 +- input/regression/beam-rest.ly | 2 +- input/regression/beam-second.ly | 2 +- input/regression/beam-shortened-lengths.ly | 2 +- input/regression/beam-single-stem.ly | 2 +- input/regression/beam-skip.ly | 22 + input/regression/beam-slope-stemlet.ly | 2 +- input/regression/beam-unconnected-beamlets.ly | 2 +- input/regression/beaming-ternary-metrum.ly | 14 +- input/regression/beaming.ly | 2 +- input/regression/beams.ly | 2 +- input/regression/bend-after.ly | 2 +- input/regression/bend-dot.ly | 2 +- input/regression/book-identifier-markup.ly | 14 + input/regression/book-label-no-segfault.ly | 10 + input/regression/bookpart-variable.ly | 19 + input/regression/bookparts.ly | 2 +- .../break-alignment-anchor-alignment.ly | 2 +- input/regression/break-alignment-anchors.ly | 2 +- input/regression/break.ly | 2 +- input/regression/breathing-sign-ancient.ly | 2 +- .../regression/breathing-sign-custom-staff.ly | 13 + input/regression/breathing-sign.ly | 2 +- input/regression/center-title.ly | 17 + input/regression/chord-changes.ly | 2 +- input/regression/chord-name-entry-11.ly | 2 +- input/regression/chord-name-entry.ly | 4 +- input/regression/chord-name-exceptions.ly | 2 +- input/regression/chord-name-major7.ly | 2 +- input/regression/chord-names-bass.ly | 2 +- .../regression/chord-names-in-grand-staff.ly | 29 + input/regression/chord-names-languages.ly | 10 +- .../chord-names-lower-case-minor.ly | 15 + input/regression/chord-repetition-relative.ly | 13 + .../chord-repetition-script-stack.ly | 11 + input/regression/chord-repetition.ly | 13 + input/regression/chord-scripts.ly | 25 +- .../regression/chord-tremolo-articulations.ly | 22 + .../chord-tremolo-other-commands.ly | 24 + .../chord-tremolo-scaled-durations.ly | 2 +- input/regression/chord-tremolo-short.ly | 2 +- input/regression/chord-tremolo-single.ly | 2 +- .../chord-tremolo-stem-direction.ly | 8 +- input/regression/chord-tremolo-whole.ly | 2 +- input/regression/chord-tremolo.ly | 2 +- input/regression/chordnames-nochord.ly | 30 + input/regression/chords-funky-ignatzek.ly | 2 +- input/regression/chromatic-scales.ly | 4 +- input/regression/clef-oct-visibility.ly | 28 + input/regression/clef-oct.ly | 2 +- input/regression/clef-octavation.ly | 18 + input/regression/clef-ottava.ly | 2 +- input/regression/clef-warn.ly | 10 +- input/regression/clefs.ly | 2 +- input/regression/clip-systems.ly | 9 +- input/regression/cluster-break.ly | 2 +- input/regression/cluster-cross-staff.ly | 2 +- input/regression/cluster-single-note.ly | 2 +- input/regression/cluster-style.ly | 2 +- input/regression/cluster.ly | 2 +- input/regression/collision-2.ly | 2 +- input/regression/collision-alignment.ly | 2 +- input/regression/collision-dots-invert.ly | 2 +- input/regression/collision-dots-move.ly | 2 +- .../collision-dots-up-space-dotted.ly | 2 +- input/regression/collision-dots.ly | 2 +- .../regression/collision-harmonic-no-dots.ly | 2 +- input/regression/collision-head-chords.ly | 2 +- input/regression/collision-head-solfa-fa.ly | 21 +- input/regression/collision-heads.ly | 2 +- input/regression/collision-manual.ly | 4 +- .../collision-merge-differently-dotted.ly | 2 +- .../collision-merge-differently-headed.ly | 2 +- input/regression/collision-merge-dots.ly | 2 +- input/regression/collision-mesh.ly | 2 +- input/regression/collision-seconds.ly | 2 +- input/regression/collision-whole.ly | 2 +- input/regression/collisions.ly | 2 +- input/regression/color.ly | 6 +- input/regression/completion-heads-factor.ly | 26 + input/regression/completion-heads-lyrics.ly | 4 +- .../completion-heads-multiple-ties.ly | 2 +- .../completion-heads-polyphony-2.ly | 21 + .../regression/completion-heads-polyphony.ly | 2 +- input/regression/completion-heads-tie.ly | 2 +- input/regression/completion-heads-tuplets.ly | 20 + input/regression/completion-heads.ly | 2 +- input/regression/completion-rest.ly | 26 + input/regression/compound-time-signatures.ly | 44 + input/regression/context-die-staff.ly | 2 +- input/regression/context-mod-context.ly | 43 + input/regression/context-mod-with.ly | 45 + input/regression/context-nested-staffgroup.ly | 2 +- input/regression/cue-clef-begin-of-score.ly | 20 + input/regression/cue-clef-keysignature.ly | 17 + input/regression/cue-clef-new-line.ly | 30 + input/regression/cue-clef-octavation.ly | 26 + input/regression/cue-clef.ly | 25 + input/regression/custos.ly | 2 +- input/regression/dead-notes.ly | 39 + input/regression/display-lily-tests.ly | 36 +- input/regression/dot-column-note-collision.ly | 9 + input/regression/dot-column-rest-collision.ly | 2 +- input/regression/dot-dot-count-override.ly | 2 +- input/regression/dot-flag-collision.ly | 2 +- input/regression/dot-rest-beam-trigger.ly | 2 +- .../regression/dot-rest-horizontal-spacing.ly | 8 + input/regression/dot-up-voice-collision.ly | 2 +- input/regression/dots.ly | 2 +- .../regression/double-repeat-default-volta.ly | 2 +- input/regression/double-repeat.ly | 2 +- input/regression/drums.ly | 4 +- .../duration-identifier-compressed.ly | 15 + .../regression/dynamics-alignment-breaker.ly | 21 + .../regression/dynamics-alignment-no-line.ly | 16 + input/regression/dynamics-broken-hairpin.ly | 2 +- input/regression/dynamics-context-textspan.ly | 19 + .../dynamics-custom-text-spanner-postfix.ly | 26 + input/regression/dynamics-glyphs.ly | 2 +- input/regression/dynamics-hairpin-length.ly | 2 +- input/regression/dynamics-line.ly | 2 +- input/regression/dynamics-rest-positioning.ly | 11 + .../dynamics-text-left-text-alignment.ly | 13 + .../regression/dynamics-text-right-padding.ly | 12 + .../dynamics-text-spanner-abs-dynamic.ly | 2 +- .../dynamics-text-spanner-padding.ly | 2 +- .../dynamics-text-spanner-postfix.ly | 20 + input/regression/dynamics-unbound-hairpin.ly | 2 +- input/regression/easy-notation-accidentals.ly | 13 + input/regression/easy-notation.ly | 4 +- input/regression/episema.ly | 16 + input/regression/fermata-rest-position.ly | 2 +- input/regression/figured-bass-alteration.ly | 2 +- .../figured-bass-continuation-center.ly | 2 +- .../figured-bass-continuation-end-position.ly | 18 + .../figured-bass-continuation-forbid.ly | 2 +- .../figured-bass-continuation-modifiers.ly | 2 +- input/regression/figured-bass-continuation.ly | 2 +- input/regression/figured-bass-durations.ly | 29 + .../figured-bass-extenders-markup.ly | 27 + input/regression/figured-bass-ignore-rest.ly | 37 + input/regression/figured-bass-implicit.ly | 2 +- .../figured-bass-slashed-numbers.ly | 8 +- input/regression/figured-bass-staff.ly | 2 +- input/regression/figured-bass.ly | 4 +- input/regression/fill-line-test.ly | 2 +- input/regression/filter-translators.ly | 21 + input/regression/finger-chords-accidental.ly | 4 +- input/regression/finger-chords-dot.ly | 2 +- input/regression/finger-chords-order.ly | 4 +- input/regression/finger-chords.ly | 2 +- input/regression/fingering-cross-staff.ly | 2 +- input/regression/fingering.ly | 2 +- input/regression/flags-default.ly | 2 +- input/regression/flags-in-scheme.ly | 2 +- .../flags-straight-stockhausen-boulez.ly | 11 +- input/regression/flags-straight.ly | 2 +- input/regression/follow-voice-break.ly | 2 +- input/regression/follow-voice-consecutive.ly | 2 +- input/regression/font-bogus-ligature.ly | 15 +- input/regression/font-family-override.ly | 44 +- input/regression/font-kern.ly | 2 +- input/regression/font-name-font-size.ly | 20 + input/regression/font-name.ly | 3 +- input/regression/font-postscript.ly | 2 +- input/regression/footnote-break-visibility.ly | 25 + input/regression/footnote-footer-padding.ly | 32 + input/regression/footnote-spanner.ly | 60 + input/regression/footnote.ly | 33 + input/regression/fret-board-alignment.ly | 2 +- input/regression/fret-boards.ly | 2 +- input/regression/fret-diagram-origins.ly | 2 +- input/regression/fret-diagrams-capo.ly | 2 +- input/regression/fret-diagrams-dots.ly | 2 +- input/regression/fret-diagrams-fingering.ly | 31 +- input/regression/fret-diagrams-fret-label.ly | 18 +- input/regression/fret-diagrams-landscape.ly | 2 +- .../fret-diagrams-opposing-landscape.ly | 2 +- input/regression/fret-diagrams-size.ly | 26 + .../regression/fret-diagrams-string-frets.ly | 6 +- .../fret-diagrams-string-thickness.ly | 2 +- input/regression/fret-diagrams-xo-label.ly | 26 +- input/regression/fretboard-chordchanges.ly | 21 + input/regression/full-measure-rest-fermata.ly | 25 + input/regression/general-scheme-bindings.ly | 2 +- input/regression/generic-output-property.ly | 2 +- input/regression/glissando-broken-unkilled.ly | 36 + input/regression/glissando-broken.ly | 2 +- input/regression/glissando-chord-linebreak.ly | 27 + input/regression/glissando-chord.ly | 18 + input/regression/glissando-consecutive.ly | 13 + input/regression/glissando-index.ly | 14 + input/regression/glissando-no-break.ly | 4 +- input/regression/glissando.ly | 2 +- input/regression/grace-auto-beam.ly | 2 +- input/regression/grace-bar-line.ly | 2 +- input/regression/grace-bar-number.ly | 2 +- input/regression/grace-beam.ly | 2 +- input/regression/grace-direction-polyphony.ly | 4 +- input/regression/grace-end-2.ly | 9 +- input/regression/grace-end.ly | 20 +- input/regression/grace-nest1.ly | 2 +- input/regression/grace-nest2.ly | 2 +- input/regression/grace-nest3.ly | 2 +- input/regression/grace-nest4.ly | 2 +- input/regression/grace-nest5.ly | 2 +- input/regression/grace-part-combine.ly | 2 +- input/regression/grace-partial.ly | 2 +- input/regression/grace-staff-length.ly | 2 +- input/regression/grace-start.ly | 2 +- input/regression/grace-stem-length.ly | 2 +- input/regression/grace-stems.ly | 2 +- input/regression/grace-sync.ly | 2 +- input/regression/grace-types.ly | 2 +- input/regression/grace-unfold-repeat.ly | 2 +- input/regression/grace-volta-repeat-2.ly | 2 +- input/regression/grace-volta-repeat.ly | 2 +- input/regression/grace.ly | 4 +- input/regression/graphviz.ly | 2 +- input/regression/grid-lines.ly | 24 +- input/regression/grob-tweak.ly | 2 +- input/regression/hairpin-barline-break.ly | 2 +- input/regression/hairpin-circled.ly | 14 +- input/regression/hairpin-dashed.ly | 2 +- input/regression/hairpin-ending.ly | 3 +- .../hairpin-neighboring-span-dynamics.ly | 27 + input/regression/hairpin-to-barline-mark.ly | 2 +- input/regression/hairpin-to-barline.ly | 2 +- input/regression/hairpin-to-rest.ly | 2 +- input/regression/hara-kiri-alive-with.ly | 23 + input/regression/hara-kiri-drumstaff.ly | 49 + .../hara-kiri-keep-previous-settings.ly | 43 + input/regression/hara-kiri-percent-repeat.ly | 23 +- input/regression/hara-kiri-pianostaff.ly | 36 - input/regression/hara-kiri-rhythmicstaff.ly | 45 + input/regression/hara-kiri-staff.ly | 34 + input/regression/hara-kiri-stanza-number.ly | 2 +- input/regression/hara-kiri-tabstaff.ly | 44 + input/regression/harp-pedals-sanity-checks.ly | 5 +- input/regression/harp-pedals-tweaking.ly | 3 +- input/regression/harp-pedals.ly | 4 +- input/regression/horizontal-bracket-break.ly | 2 +- input/regression/horizontal-bracket-tweak.ly | 20 + input/regression/horizontal-bracket.ly | 2 +- .../identifier-following-chordmode.ly | 4 +- input/regression/identifiers.ly | 2 +- input/regression/incipit.ly | 80 +- input/regression/include-string.ly | 8 + input/regression/incompatible-stem-warning.ly | 22 + input/regression/instrument-cue-name.ly | 18 + input/regression/instrument-name-dynamic.ly | 4 +- input/regression/instrument-name-groups.ly | 39 + input/regression/instrument-name-hara-kiri.ly | 29 +- input/regression/instrument-name-markup.ly | 2 +- input/regression/instrument-name-partial.ly | 2 +- input/regression/instrument-name-volta.ly | 40 + input/regression/instrument-name-x-align.ly | 4 +- input/regression/instrument-name.ly | 2 +- input/regression/instrument-switch.ly | 2 +- input/regression/invalid-engraver.ly | 16 + input/regression/key-clefs.ly | 2 +- ...ey-signature-cancellation-extra-natural.ly | 23 - .../regression/key-signature-cancellation.ly | 2 +- input/regression/key-signature-left-edge.ly | 22 + input/regression/key-signature-padding.ly | 4 +- .../key-signature-scordatura-persist.ly | 2 +- input/regression/key-signature-scordatura.ly | 6 +- input/regression/key-signature-space.ly | 19 + input/regression/keys.ly | 4 +- input/regression/laissez-vibrer-arpeggio.ly | 15 + input/regression/laissez-vibrer-tie-beam.ly | 4 +- .../laissez-vibrer-tie-head-direction.ly | 14 + input/regression/laissez-vibrer-ties.ly | 6 +- input/regression/landscape.ly | 4 +- input/regression/ledger-line-minimum.ly | 2 +- input/regression/ledger-line-shorten.ly | 4 +- .../regression/ledger-lines-varying-staves.ly | 2 +- input/{ => regression}/les-nereides.ly | 86 +- input/regression/ligature-bracket.ly | 2 +- input/regression/lily-in-scheme.ly | 6 +- input/regression/lilypond-book/GNUmakefile | 10 + .../html-include-space-after-tag.html | 9 + .../html-inline-newline-during-tag.html | 6 + .../lilypond-book/html-inline-no-options.html | 4 + .../lilypond-book/html-inline-option.html | 4 + .../lilypond-book/html-lilypond-block.html | 10 + .../lilypond-book/html-newline-after-tag.html | 10 + .../lilypond-book/html-space-after-tag.html | 8 + .../lilypond-book/html-version-newline.html | 6 + .../lilypond-book/html-version.html | 5 + input/regression/lilypond-book/include.ly | 4 + input/regression/lilypond-book/include2.ly | 4 + input/regression/lilypond-book/include3.ily | 15 + .../lilypond-book/papersize-docs.tely | 43 + .../regression/lilypond-book/suffix-html.html | 8 + .../lilypond-book/suffix-htmly.htmly | 8 + .../lilypond-book/suffix-itely.itely | 14 + .../lilypond-book/suffix-latex.latex | 7 + .../lilypond-book/suffix-lytex.lytex | 7 + .../lilypond-book/suffix-lyxml.lyxml | 14 + .../regression/lilypond-book/suffix-tely.tely | 14 + input/regression/lilypond-book/suffix-tex.tex | 7 + .../regression/lilypond-book/suffix-texi.texi | 14 + .../lilypond-book/suffix-texinfo.texinfo | 14 + input/regression/lilypond-book/suffix-xml.xml | 8 + .../lilypond-book/tex-auto-linebreak.lytex | 22 + .../lilypond-book/tex-comment-firstline.lytex | 17 + .../lilypond-book/tex-comments.lytex | 28 + .../tex-compatibility-mode.lytex | 10 + .../lilypond-book/tex-footnote.lytex | 11 + .../lilypond-book/tex-fragment.lytex | 19 + .../tex-graphics-package-added.lytex | 10 + .../lilypond-book/tex-include-file.lytex | 5 + .../lilypond-book/tex-include-options.lytex | 5 + .../lilypond-book/tex-inline-lilypond.lytex | 4 + .../lilypond-book/tex-lilypond-block.lytex | 15 + .../tex-lilypond-inside-itemize.lytex | 21 + .../tex-lilypond-inside-table.lytex | 20 + .../lilypond-book/tex-lilypondversion.lytex | 10 + .../lilypond-book/tex-paragraphs.lytex | 30 + .../lilypond-book/tex-snippet-options.lytex | 38 + .../lilypond-book/tex-twocolumn.lytex | 17 + .../lilypond-book/tex-verbatim.lytex | 45 + .../lilypond-book/tex-version.lytex | 4 + ...-include-language-detection-included.itely | 2 + .../texinfo-include-language-detection.tely | 13 + .../texinfo-language-detection.tely | 15 + input/regression/line-arrows.ly | 2 +- input/regression/line-dash-small-period.ly | 4 +- input/regression/line-dashed-period.ly | 3 +- input/regression/line-style-zigzag-spacing.ly | 2 +- input/regression/line-style.ly | 14 +- .../regression/lyric-combine-empty-warning.ly | 23 + input/regression/lyric-combine-new.ly | 2 +- input/regression/lyric-combine-polyphonic.ly | 4 +- .../lyric-combine-switch-voice-2.ly | 2 +- .../regression/lyric-combine-switch-voice.ly | 2 +- input/regression/lyric-combine.ly | 2 +- input/regression/lyric-extender-broken.ly | 2 +- input/regression/lyric-extender-completion.ly | 21 + .../lyric-extender-includegraces.ly | 17 + input/regression/lyric-extender-no-heads.ly | 2 +- input/regression/lyric-extender-rest.ly | 2 +- .../regression/lyric-extender-right-margin.ly | 5 +- input/regression/lyric-extender.ly | 2 +- input/regression/lyric-hyphen-break.ly | 2 +- input/regression/lyric-hyphen-grace.ly | 31 + input/regression/lyric-hyphen-retain.ly | 4 +- input/regression/lyric-hyphen.ly | 2 +- .../lyric-ignore-melisma-alignment.ly | 2 +- input/regression/lyric-melisma-alignment.ly | 18 + input/regression/lyric-melisma-manual.ly | 24 +- input/regression/lyric-melisma-melisma.ly | 11 + .../regression/lyric-no-association-rhythm.ly | 2 +- input/regression/lyric-phrasing.ly | 2 +- input/regression/lyric-tie.ly | 2 +- input/regression/lyrics-after-grace.ly | 2 +- ...yrics-aligned-above-stay-close-to-staff.ly | 45 + input/regression/lyrics-bar.ly | 38 +- input/regression/lyrics-includegraces.ly | 26 + input/regression/lyrics-melisma-beam.ly | 11 +- input/regression/lyrics-no-notes.ly | 3 +- input/regression/lyrics-tenor-clef.ly | 17 +- input/regression/markup-arrows.ly | 2 +- .../markup-bidi-explicit-embedding.ly | 19 + .../markup-bidi-explicit-overrides.ly | 19 + .../regression/markup-bidi-implicit-marks.ly | 18 + input/regression/markup-bidi-pango.ly | 10 +- input/regression/markup-brace-warning.ly | 17 + input/regression/markup-braces.ly | 15 + input/regression/markup-column-align.ly | 2 +- input/regression/markup-commands.ly | 57 +- input/regression/markup-diacritic-marks.ly | 19 + input/regression/markup-eps.ly | 2 +- input/regression/markup-eyeglasses.ly | 6 + input/regression/markup-line-thickness.ly | 2 +- input/regression/markup-lines-identifier.ly | 19 + input/regression/markup-lines.ly | 64 +- input/regression/markup-music-glyph.ly | 22 +- input/regression/markup-note-dot.ly | 2 +- input/regression/markup-note-grob-style.ly | 20 + input/regression/markup-note-styles.ly | 38 + input/regression/markup-note.ly | 104 +- input/regression/markup-path-fill.ly | 17 + input/regression/markup-path-linecap.ly | 26 + input/regression/markup-path-linejoin.ly | 26 + input/regression/markup-path.ly | 23 + input/regression/markup-scheme.ly | 2 +- input/regression/markup-score-multi-system.ly | 22 + input/regression/markup-score.ly | 10 +- input/regression/markup-stack.ly | 2 +- input/regression/markup-syntax.ly | 90 +- input/regression/markup-user.ly | 17 +- input/regression/markup-word-wrap.ly | 4 +- input/regression/measure-grouping.ly | 2 +- input/regression/mensural-ligatures.ly | 96 +- input/regression/mensural.ly | 2 +- .../regression/metronome-mark-loose-column.ly | 27 + .../metronome-marking-align-order.ly | 28 + .../metronome-marking-break-align.ly | 35 + input/regression/metronome-marking.ly | 2 +- ...metronome-multimeasure-rest-no-segfault.ly | 27 + input/regression/metronome-parenthesized.ly | 2 +- input/regression/metronome-range.ly | 18 + input/regression/metronome-text.ly | 39 +- input/regression/midi-drums.ly | 2 +- input/regression/midi-dynamics.ly | 4 +- input/regression/midi-grace.ly | 2 +- input/regression/midi-key-signature.ly | 15 + input/regression/midi-lyric-barcheck.ly | 2 +- input/regression/midi-microtone-off.ly | 6 +- input/regression/midi-microtone.ly | 2 +- input/regression/midi-notes.ly | 21 + input/regression/midi-partial.ly | 2 +- input/regression/midi-pedal.ly | 4 +- input/regression/midi-scales.ly | 2 +- input/regression/midi-transposition.ly | 2 +- input/regression/midi-tuplets.ly | 2 +- input/regression/midi-unisons.ly | 20 + input/regression/midi-volume-equaliser.ly | 2 +- input/regression/midi/GNUmakefile | 13 + input/regression/midi/key-initial.ly | 85 + .../regression/midi/key-option-all-staves.ly | 24 + input/regression/midi/key-option.ly | 81 + input/regression/midi/lyrics-addlyrics.ly | 40 + input/regression/midi/partcombine.ly | 46 + input/regression/midi/quantize-duration-2.ly | 65 + input/regression/midi/quantize-duration.ly | 62 + input/regression/midi/quantize-start.ly | 62 + input/regression/midi/rest-dynamic.ly | 13 + input/regression/midi/rest.ly | 69 + input/regression/midi/staff-map-instrument.ly | 45 + input/regression/midi/staff-map-voice.ly | 45 + input/regression/midi/voice-2.ly | 75 + input/regression/midi/voice-4.ly | 91 + input/regression/midi/voice-5.ly | 98 + input/regression/mm-rests2.ly | 2 +- input/regression/modal-transforms.ly | 36 + input/regression/modern-tab-clef-scaled.ly | 39 + input/regression/modern-tab-clef.ly | 44 + .../F.Schubert => regression}/morgenlied.ly | 8 +- .../W.A.Mozart => regression}/mozart-hrn-3.ly | 27 +- .../mozart-hrn3-allegro.ily | 12 +- .../mozart-hrn3-defs.ily | 6 - .../mozart-hrn3-romanze.ily | 0 .../mozart-hrn3-rondo.ily | 17 +- input/regression/multi-measure-rest-center.ly | 2 +- .../regression/multi-measure-rest-center2.ly | 2 +- input/regression/multi-measure-rest-grace.ly | 2 +- .../multi-measure-rest-instr-name.ly | 2 +- .../multi-measure-rest-multi-staff-center.ly | 36 +- .../regression/multi-measure-rest-spacing.ly | 2 +- input/regression/multi-measure-rest-text.ly | 2 +- .../regression/multi-measure-rest-usebreve.ly | 2 +- input/regression/multi-measure-rest.ly | 26 +- .../regression/multiple-time-sig-settings.ly | 34 + .../regression/music-function-end-spanners.ly | 2 +- input/regression/music-function-post-event.ly | 22 + .../music-function-string-markup.ly | 17 + input/regression/music-function.ly | 6 +- input/regression/music-map.ly | 8 +- .../regression/musicxml/00-Introduction.itexi | 7 + .../01e-Pitches-ParenthesizedAccidentals.xml | 223 + ...ches-ParenthesizedMicrotoneAccidentals.xml | 224 + .../musicxml/03a-Rhythm-Durations.xml | 6 +- .../03d-Rhythm-DottedDurations-Factors.xml | 306 + .../11c-TimeSignatures-CompoundSimple.xml | 1 - .../13c-KeySignatures-NonTraditional.xml | 16 +- .../musicxml/13d-KeySignatures-Microtones.xml | 14 +- .../musicxml/14-Staff-Details.itexi | 2 + .../musicxml/14a-StaffDetails-LineChanges.xml | 154 + .../musicxml/21f-Chord-ElementInBetween.xml | 2 +- .../musicxml/22d-Parenthesized-Noteheads.xml | 14 +- .../23c-Tuplet-Display-NonStandard.xml | 2 + input/regression/musicxml/24d-AfterGrace.xml | 4 +- input/regression/musicxml/31a-Directions.xml | 8 +- input/regression/musicxml/32a-Notations.xml | 4 +- input/regression/musicxml/33a-Spanners.xml | 14 +- .../regression/musicxml/33i-Ties-NotEnded.xml | 134 + .../musicxml/41i-PartNameDisplay-Override.xml | 88 + .../musicxml/46f-IncompleteMeasures.xml | 146 + ...g-PickupMeasure-Chordnames-FiguredBass.xml | 107 + input/regression/musicxml/51d-EmptyTitle.xml | 36 + input/regression/musicxml/52b-Breaks.xml | 64 + input/regression/musicxml/71e-TabStaves.xml | 8 +- .../regression/musicxml/71f-AllChordTypes.xml | 1 - .../musicxml/71g-MultipleChordnames.xml | 78 + .../72c-TransposingInstruments-Change.xml | 96 + input/regression/musicxml/GNUmakefile | 6 +- input/regression/musicxml/LICENSE | 23 + input/regression/nested-fill-lines.ly | 16 + input/regression/nested-property-revert.ly | 18 + .../newaddlyrics-music-identifiers.ly | 14 + input/regression/newaddlyrics.ly | 12 +- input/regression/no-header.ly | 6 + input/regression/no-staff.ly | 2 +- input/regression/non-centered-bar-lines.ly | 2 +- input/regression/non-empty-text.ly | 2 +- input/regression/note-head-aiken.ly | 15 + input/regression/note-head-chord.ly | 2 +- input/regression/note-head-funk.ly | 15 + input/regression/note-head-harmonic-dotted.ly | 2 +- input/regression/note-head-harmonic-whole.ly | 2 +- input/regression/note-head-harmonic.ly | 2 +- input/regression/note-head-sacred-harp.ly | 15 + input/regression/note-head-shape-minor.ly | 18 + input/regression/note-head-solfa.ly | 4 +- .../regression/note-head-southern-harmony.ly | 15 + input/regression/note-head-style.ly | 30 +- input/regression/note-head-walker.ly | 20 + input/regression/note-line.ly | 2 +- input/regression/note-names-context.ly | 37 + input/regression/note-names.ly | 27 + input/regression/number-staff-lines.ly | 2 +- .../optimal-page-breaking-hstretch.ly | 21 +- input/regression/option-help.ly | 2 +- input/regression/ottava-broken.ly | 2 +- input/regression/ottava-edge.ly | 2 +- input/regression/ottava.ly | 2 +- input/regression/override-nest-scheme.ly | 16 + input/regression/override-nest.ly | 4 +- input/regression/page-break-between-scores.ly | 2 +- input/regression/page-break-turn-toplevel.ly | 2 +- input/regression/page-break-warn-forbidden.ly | 2 +- .../page-breaking-good-estimation.ly | 33 + .../page-breaking-markup-padding.ly | 18 + .../page-breaking-markup-padding2.ly | 18 + .../page-breaking-markup-padding3.ly | 21 + .../page-breaking-max-systems-per-page.ly | 19 + .../regression/page-breaking-min-distance.ly | 18 + .../regression/page-breaking-min-distance2.ly | 25 + .../regression/page-breaking-min-distance3.ly | 23 + .../page-breaking-min-systems-per-page1.ly | 17 + .../page-breaking-min-systems-per-page2.ly | 19 + .../page-breaking-outside-staff-estimation.ly | 13 + ...page-breaking-outside-staff-estimation2.ly | 12 + input/regression/page-breaking-page-count1.ly | 2 +- input/regression/page-breaking-page-count2.ly | 2 +- input/regression/page-breaking-page-count3.ly | 2 +- .../page-breaking-rehearsal-mark.ly | 13 + ...page-breaking-system-count-forced-break.ly | 20 + .../page-breaking-systems-per-page.ly | 17 + input/regression/page-breaks.ly | 2 +- input/regression/page-label-loose-column.ly | 21 + input/regression/page-label.ly | 2 +- .../regression/page-layout-manual-position.ly | 2 +- input/regression/page-layout-twopass.ly | 32 - input/regression/page-layout.ly | 12 +- input/regression/page-limited-space.ly | 2 +- input/regression/page-links-nolabel.ly | 11 + input/regression/page-links.ly | 31 + .../page-minimal-page-breaking-last-page.ly | 2 +- .../regression/page-minimal-page-breaking.ly | 2 +- input/regression/page-overflow-compression.ly | 17 + input/regression/page-spacing-bass-figures.ly | 19 + .../regression/page-spacing-bottom-spring.ly | 20 + input/regression/page-spacing-dynamics.ly | 20 + input/regression/page-spacing-markups.ly | 16 + .../page-spacing-nonstaff-lines-and-markup.ly | 21 + ...-spacing-nonstaff-lines-between-systems.ly | 24 + .../page-spacing-nonstaff-lines-between.ly | 31 + .../page-spacing-nonstaff-lines-bottom.ly | 26 + ...e-spacing-nonstaff-lines-header-padding.ly | 32 + ...page-spacing-nonstaff-lines-independent.ly | 25 + .../page-spacing-nonstaff-lines-top.ly | 28 + .../page-spacing-nonstaff-lines-unrelated.ly | 16 + .../regression/page-spacing-rehearsal-mark.ly | 22 + .../page-spacing-staff-group-hara-kiri.ly | 29 + .../page-spacing-staff-group-nested.ly | 32 + input/regression/page-spacing-staff-group.ly | 30 + .../regression/page-spacing-stretchability.ly | 21 + .../page-spacing-system-count-overfull.ly | 14 + input/regression/page-spacing-system-count.ly | 22 + .../regression/page-spacing-tall-headfoot.ly | 19 + .../page-spacing-top-markup-spacing.ly | 20 + .../page-spacing-top-system-spacing.ly | 19 + input/regression/page-spacing.ly | 16 +- input/regression/page-top-space.ly | 7 +- ...page-turn-page-breaking-auto-first-page.ly | 6 +- ...age-turn-page-breaking-auto-first-page2.ly | 8 +- .../page-turn-page-breaking-badturns.ly | 4 +- .../page-turn-page-breaking-repeats.ly | 6 +- input/regression/page-turn-page-breaking.ly | 4 +- input/regression/palm-mute.ly | 36 + input/regression/paper-default-margins-a6.ly | 24 + input/regression/paper-default-margins-def.ly | 25 + input/regression/paper-margins-consistency.ly | 21 + input/regression/paper-margins-left-margin.ly | 16 + input/regression/paper-margins-line-width.ly | 15 + input/regression/paper-margins-no-checks.ly | 20 + input/regression/paper-margins-overrun.ly | 20 + .../regression/paper-margins-right-margin.ly | 16 + input/regression/paper-margins.ly | 18 + input/regression/paper-nested-override.ly | 11 + input/regression/paper-nested-override2.ly | 17 + input/regression/paper-twosided-bcorr.ly | 20 + input/regression/paper-twosided.ly | 19 + input/regression/parenthesize-markup.ly | 31 + .../parenthesize-singlenotes-chords-rests.ly | 2 +- input/regression/parenthesize.ly | 4 +- input/regression/part-combine-a2.ly | 8 +- input/regression/part-combine-cross.ly | 2 +- .../part-combine-force-mmrest-position.ly | 26 + input/regression/part-combine-force-once.ly | 30 + input/regression/part-combine-force.ly | 34 + input/regression/part-combine-global.ly | 2 +- input/regression/part-combine-markup.ly | 2 +- .../part-combine-mmrest-after-solo.ly | 2 +- input/regression/part-combine-solo-end.ly | 2 +- input/regression/part-combine-solo-global.ly | 2 +- input/regression/part-combine-solo.ly | 2 +- input/regression/part-combine-text-wait.ly | 26 + input/regression/part-combine-text.ly | 2 +- input/regression/part-combine-tuplet-end.ly | 2 +- .../regression/part-combine-tuplet-single.ly | 2 +- input/regression/part-combine.ly | 2 +- input/regression/partial-polymetric.ly | 33 + input/regression/pdfmark-metadata-unicode.ly | 26 + input/regression/pdfmark-metadata.ly | 20 + input/regression/pedal-bracket.ly | 2 +- input/regression/pedal-end.ly | 2 +- input/regression/pedal-ped.ly | 2 +- input/regression/phrasing-slur-dash.ly | 13 +- input/regression/phrasing-slur-multiple.ly | 21 + input/regression/phrasing-slur-slur-avoid.ly | 2 +- input/regression/phrasing-slur-tuplet.ly | 2 +- .../predefined-fretboards-transpose.ly | 2 +- input/regression/predefined-fretboards.ly | 11 +- input/regression/prefatory-empty-spacing.ly | 2 +- input/regression/prefatory-separation.ly | 27 + input/regression/prefatory-spacing-matter.ly | 2 +- input/regression/profile-property-access.ly | 7 +- input/regression/property-grace-polyphony.ly | 2 +- input/regression/property-nested-override.ly | 2 +- input/regression/property-nested-revert.ly | 4 +- input/regression/property-once.ly | 2 +- input/regression/quote-cue-during.ly | 4 +- input/regression/quote-cue-event-types.ly | 37 + input/regression/quote-cyclic.ly | 15 +- input/regression/quote-during.ly | 6 +- input/regression/quote-grace.ly | 2 +- input/regression/quote-kill-cues.ly | 18 + input/regression/quote-overrides.ly | 49 + input/regression/quote-tie.ly | 20 +- input/regression/quote-transposition.ly | 2 +- input/regression/quote-tuplet-end.ly | 2 +- input/regression/quote-tuplet.ly | 4 +- input/regression/quote.ly | 6 +- input/regression/ragged-bottom-one-page.ly | 2 +- input/regression/ragged-right-compressed.ly | 2 +- input/regression/ragged-right-disabled.ly | 2 +- input/regression/ragged-right-one-line.ly | 2 +- .../rehearsal-mark-align-priority.ly | 4 +- .../rehearsal-mark-align-staff-context.ly | 4 +- input/regression/rehearsal-mark-align.ly | 4 +- input/regression/rehearsal-mark-direction.ly | 16 + .../regression/rehearsal-mark-final-score.ly | 12 + input/regression/rehearsal-mark-letter.ly | 4 +- input/regression/rehearsal-mark-number.ly | 2 +- input/regression/relative-repeat.ly | 4 +- .../remove-empty-staves-auto-knee.ly | 48 + .../remove-empty-staves-with-rests.ly | 24 + input/regression/repeat-line-break.ly | 2 +- .../repeat-percent-count-visibility.ly | 2 +- input/regression/repeat-percent-count.ly | 2 +- input/regression/repeat-percent-grace.ly | 2 +- input/regression/repeat-percent-kerning.ly | 2 +- input/regression/repeat-percent-skipbars.ly | 2 +- input/regression/repeat-percent.ly | 2 +- input/regression/repeat-slash-mixed.ly | 18 + input/regression/repeat-slash-multi.ly | 11 + input/regression/repeat-slash.ly | 2 +- input/regression/repeat-tie.ly | 2 +- input/regression/repeat-tremolo-beams.ly | 2 +- input/regression/repeat-tremolo-chord-rep.ly | 12 + input/regression/repeat-tremolo-dots.ly | 2 +- .../repeat-tremolo-one-note-articulation.ly | 19 + .../regression/repeat-tremolo-three-notes.ly | 19 + input/regression/repeat-unfold-all.ly | 4 +- input/regression/repeat-unfold-tremolo.ly | 35 +- input/regression/repeat-unfold.ly | 2 +- .../repeat-volta-skip-alternatives.ly | 2 +- input/regression/repeat-volta.ly | 2 +- input/regression/rest-collision-beam-note.ly | 2 +- .../rest-collision-beam-quantized.ly | 2 +- .../regression/rest-collision-beam-restdir.ly | 2 +- input/regression/rest-collision-beam.ly | 2 +- .../rest-collision-note-duration.ly | 2 +- input/regression/rest-collision.ly | 2 +- input/regression/rest-dot-position.ly | 2 +- input/regression/rest-ledger.ly | 2 +- input/regression/rest-note-collision.ly | 2 +- input/regression/rest-pitch.ly | 2 +- input/regression/rest-pitched-beam.ly | 2 +- input/regression/rest-polyphonic-2.ly | 19 + input/regression/rest-polyphonic.ly | 2 +- input/regression/rest.ly | 2 +- input/regression/rhythmic-staff.ly | 2 +- input/regression/safe.ly | 2 +- input/regression/scheme-book-scores.ly | 62 + input/regression/scheme-engraver-instance.ly | 36 + input/regression/scheme-engraver.ly | 75 + input/regression/scheme-text-spanner.ly | 206 + input/regression/score-text.ly | 10 +- input/regression/script-center-seconds.ly | 2 +- input/regression/script-collision.ly | 2 +- input/regression/script-horizontal-slur.ly | 2 +- input/regression/script-shift.ly | 2 +- input/regression/script-stack-horizontal.ly | 2 +- input/regression/script-stack-order.ly | 10 +- input/regression/script-stacked.ly | 2 +- input/regression/script-stem-tremolo.ly | 2 +- input/regression/semi-tie-manual-direction.ly | 2 +- input/regression/size11.ly | 2 +- input/regression/size13.ly | 2 +- input/regression/size16.ly | 2 +- input/regression/size20.ly | 2 +- input/regression/size23.ly | 2 +- input/regression/size26.ly | 2 +- input/regression/skip-of-length.ly | 2 +- input/regression/skiptypesetting-all-true.ly | 15 + input/regression/skiptypesetting-bar-check.ly | 4 +- .../skiptypesetting-multimeasurerest.ly | 23 + .../skiptypesetting-show-first-and-last.ly | 2 +- .../regression/skiptypesetting-show-first.ly | 2 +- input/regression/skiptypesetting-show-last.ly | 2 +- input/regression/skiptypesetting-tuplet.ly | 2 +- input/regression/skyline-debug.ly | 2 +- .../regression/skyline-horizontal-padding.ly | 27 + .../regression/skyline-vertical-placement.ly | 3 +- input/regression/skyline-vertical-spacing.ly | 2 +- input/regression/slur-broken-trend.ly | 4 +- input/regression/slur-clef.ly | 2 +- input/regression/slur-cross-staff-beam.ly | 8 +- input/regression/slur-cross-staff.ly | 2 +- input/regression/slur-dash.ly | 23 +- input/regression/slur-dots.ly | 2 +- input/regression/slur-double.ly | 4 +- input/regression/slur-dynamics.ly | 2 +- input/regression/slur-extreme.ly | 2 +- input/regression/slur-grace.ly | 12 + input/regression/slur-manual.ly | 4 +- input/regression/slur-multiple-linebreak.ly | 26 + input/regression/slur-multiple.ly | 21 + input/regression/slur-nice.ly | 2 +- input/regression/slur-rest.ly | 2 +- input/regression/slur-scoring.ly | 24 +- input/regression/slur-script-inside.ly | 2 +- input/regression/slur-script.ly | 2 +- input/regression/slur-symmetry-1.ly | 2 +- input/regression/slur-symmetry.ly | 2 +- input/regression/slur-tilt.ly | 2 +- input/regression/slur-tuplet.ly | 4 +- input/regression/song-associated-voice.ly | 8 +- input/regression/song-basic-nonenglish.ly | 10 +- input/regression/song-basic.ly | 10 +- input/regression/song-breathe.ly | 10 +- input/regression/song-melisma.ly | 8 +- input/regression/song-reordering.ly | 8 +- input/regression/song-reordering2.ly | 8 +- input/regression/song-repetition.ly | 8 +- input/regression/song-skip-noword.ly | 10 +- input/regression/song-skip.ly | 10 +- input/regression/song-slurs.ly | 8 +- input/regression/song-splitpart.ly | 8 +- input/regression/song-stanzas.ly | 10 +- input/regression/song-tempo.ly | 10 +- input/regression/spacing-accidental-rest.ly | 8 + input/regression/spacing-accidental-staffs.ly | 2 +- .../regression/spacing-accidental-stretch.ly | 2 +- input/regression/spacing-accidental-tie.ly | 2 +- input/regression/spacing-accidental.ly | 2 +- input/regression/spacing-bar-accidental.ly | 2 +- input/regression/spacing-bar-arpeggio.ly | 2 +- input/regression/spacing-bar-stem.ly | 2 +- input/regression/spacing-bar-whole-measure.ly | 4 +- input/regression/spacing-clef-first-note.ly | 2 +- .../spacing-correction-accidentals.ly | 2 +- input/regression/spacing-empty-bar.ly | 10 + input/regression/spacing-end-of-line.ly | 2 +- input/regression/spacing-ended-voice.ly | 2 +- .../spacing-folded-clef-cross-staff.ly | 2 +- input/regression/spacing-folded-clef.ly | 2 +- input/regression/spacing-folded-clef2.ly | 2 +- input/regression/spacing-folded-clef3.ly | 2 +- input/regression/spacing-grace-duration.ly | 2 +- input/regression/spacing-grace.ly | 2 +- .../spacing-horizontal-skyline-grace.ly | 2 +- .../regression/spacing-horizontal-skyline.ly | 10 +- input/regression/spacing-knee-compressed.ly | 10 +- input/regression/spacing-knee.ly | 2 +- input/regression/spacing-loose-grace-error.ly | 2 +- .../spacing-loose-grace-linebreak.ly | 16 +- input/regression/spacing-loose-grace.ly | 2 +- input/regression/spacing-mark-width.ly | 2 +- input/regression/spacing-measure-length.ly | 2 +- input/regression/spacing-multi-tuplet.ly | 13 +- input/regression/spacing-no-note.ly | 2 +- .../spacing-non-adjacent-columns1.ly | 2 +- .../spacing-non-adjacent-columns2.ly | 2 +- input/regression/spacing-note-flags.ly | 2 +- input/regression/spacing-packed.ly | 4 +- .../spacing-paper-column-padding.ly | 2 +- input/regression/spacing-proportional.ly | 2 +- input/regression/spacing-ragged-last.ly | 2 +- input/regression/spacing-rest.ly | 2 +- input/regression/spacing-section.ly | 6 +- input/regression/spacing-short-notes.ly | 2 +- input/regression/spacing-space-to-barline.ly | 2 +- input/regression/spacing-stem-bar.ly | 2 +- input/regression/spacing-stem-direction.ly | 2 +- .../regression/spacing-stem-same-direction.ly | 2 +- input/regression/spacing-stick-out.ly | 11 +- .../regression/spacing-strict-notespacing.ly | 2 +- .../spacing-strict-spacing-grace.ly | 2 +- input/regression/spacing-to-empty-barline.ly | 5 +- input/regression/spacing-to-grace.ly | 2 +- .../regression/spacing-uniform-stretching.ly | 2 +- input/regression/span-bar-break.ly | 2 +- input/regression/span-bar-partial.ly | 2 +- input/regression/span-bar-spacing.ly | 2 +- input/regression/span-bar.ly | 2 +- .../regression/spanner-after-line-breaking.ly | 36 + .../regression/spanner-break-beyond-parent.ly | 2 +- input/regression/spanner-break-overshoot.ly | 10 +- input/regression/staccato-pos.ly | 2 +- input/regression/staff-halfway.ly | 2 +- input/regression/staff-line-positions.ly | 2 +- input/regression/staff-mixed-size.ly | 16 +- .../regression/staff-online-symbol-absence.ly | 2 +- input/regression/staff-tabstaff-spacing.ly | 31 + input/regression/staff-tweak.ly | 2 +- input/regression/stanza-number.ly | 2 +- input/regression/stem-direction-context.ly | 2 +- input/regression/stem-direction.ly | 2 +- input/regression/stem-length-estimation.ly | 38 + input/regression/stem-shorten.ly | 2 +- input/regression/stem-stemlet-whole.ly | 2 +- input/regression/stem-stemlet.ly | 4 +- input/regression/stem-tremolo-forced-dir.ly | 10 +- input/regression/stem-tremolo-position.ly | 2 +- input/regression/stem-tremolo-staff-space.ly | 2 +- input/regression/stem-tremolo.ly | 2 +- input/regression/stencil-color-rotation.ly | 2 +- input/regression/stencil-hacking.ly | 2 +- input/regression/stencil-scale.ly | 23 + input/regression/string-number-around-slur.ly | 2 +- input/regression/string-number.ly | 4 +- input/regression/system-extents.ly | 2 +- input/regression/system-overstrike.ly | 25 +- .../system-separator-spaceable-staves.ly | 31 + input/regression/system-separator.ly | 2 +- input/regression/system-start-bracket.ly | 2 +- input/regression/system-start-heavy-bar.ly | 2 +- input/regression/system-start-nesting.ly | 2 +- input/regression/tablature-banjo.ly | 2 +- .../regression/tablature-chord-repetition.ly | 30 + input/regression/tablature-default-strings.ly | 31 + input/regression/tablature-dot-placement.ly | 29 + .../tablature-fretboard-open-string.ly | 41 + input/regression/tablature-full-notation.ly | 43 + input/regression/tablature-glissando.ly | 23 + input/regression/tablature-grace-notes.ly | 24 + .../tablature-harmonic-functions.ly | 50 + input/regression/tablature-harmonic-tie.ly | 18 + input/regression/tablature-harmonic.ly | 12 +- input/regression/tablature-letter.ly | 43 + input/regression/tablature-negative-fret.ly | 32 + input/regression/tablature-slide.ly | 2 +- input/regression/tablature-string-tunings.ly | 11 +- input/regression/tablature-tie-behaviour.ly | 63 + input/regression/tablature-tie-spanner.ly | 31 + input/regression/tablature-tremolo.ly | 41 + input/regression/tablature-zero-finger.ly | 27 + input/regression/tablature.ly | 5 +- input/regression/tag-filter.ly | 2 +- input/regression/test-output-distance.ly | 4 +- .../text-spanner-attachment-alignment.ly | 2 +- input/regression/text-spanner-full-rest.ly | 12 + .../regression/text-spanner-override-order.ly | 2 +- input/regression/text-spanner.ly | 2 +- input/regression/tie-accidental.ly | 2 +- input/regression/tie-arpeggio-collision.ly | 2 +- input/regression/tie-arpeggio.ly | 4 +- input/regression/tie-broken-minimum-length.ly | 4 +- input/regression/tie-broken-other-staff.ly | 2 +- input/regression/tie-broken.ly | 2 +- input/regression/tie-chord-broken-extremal.ly | 2 +- input/regression/tie-chord-debug.ly | 2 +- input/regression/tie-chord-partial.ly | 4 +- input/regression/tie-chord.ly | 2 +- input/regression/tie-dash.ly | 33 + input/regression/tie-direction-broken.ly | 2 +- input/regression/tie-direction-manual.ly | 2 +- input/regression/tie-dot.ly | 2 +- input/regression/tie-grace.ly | 2 +- input/regression/tie-manual-vertical-tune.ly | 2 +- input/regression/tie-manual.ly | 2 +- input/regression/tie-pitched-trill.ly | 12 + input/regression/tie-semi-single.ly | 2 +- input/regression/tie-single-chord.ly | 2 +- input/regression/tie-single-manual.ly | 2 +- input/regression/tie-single.ly | 2 +- input/regression/tie-unterminated.ly | 14 + input/regression/tie-whole.ly | 2 +- .../time-signature-settings-by-staff.ly | 45 + input/regression/to-xml.ly | 2 +- input/regression/toc.ly | 5 +- input/regression/trill-spanner-auto-stop.ly | 2 +- input/regression/trill-spanner-broken.ly | 2 +- input/regression/trill-spanner-chained.ly | 2 +- input/regression/trill-spanner-grace.ly | 2 +- .../trill-spanner-pitched-consecutive.ly | 2 +- .../trill-spanner-pitched-forced.ly | 2 +- input/regression/trill-spanner-pitched.ly | 4 +- input/regression/trill-spanner-scaled.ly | 22 + input/regression/trill-spanner.ly | 2 +- input/regression/tuplet-beam.ly | 2 +- .../regression/tuplet-bracket-cross-staff.ly | 2 +- input/regression/tuplet-bracket-visibility.ly | 39 + input/regression/tuplet-broken.ly | 2 +- input/regression/tuplet-full-length-extent.ly | 2 +- input/regression/tuplet-full-length-note.ly | 2 +- input/regression/tuplet-full-length.ly | 2 +- input/regression/tuplet-gap.ly | 2 +- input/regression/tuplet-nest-beam.ly | 2 +- input/regression/tuplet-nest.ly | 2 +- input/regression/tuplet-no-stems.ly | 2 +- input/regression/tuplet-properties.ly | 38 +- input/regression/tuplet-rest.ly | 2 +- input/regression/tuplet-single-note.ly | 2 +- input/regression/tuplet-slope.ly | 2 +- .../regression/tuplet-staffline-collision.ly | 2 +- .../tuplet-text-different-numbers.ly | 15 + .../tuplet-text-fraction-with-notes.ly | 12 + input/regression/tuplet-text-note-appended.ly | 13 + input/regression/tuplets.ly | 2 +- input/{ => regression}/typography-demo.ly | 8 +- input/regression/utf-8-mixed-text.ly | 4 +- input/regression/utf-8.ly | 20 +- input/regression/voice-follower.ly | 2 +- input/regression/volta-broken-left-edge.ly | 2 +- input/regression/volta-markup-text.ly | 2 +- .../volta-multi-staff-inner-staff.ly | 2 +- input/regression/volta-multi-staff.ly | 2 +- .../warn-conflicting-key-signatures.ly | 2 +- .../warn-unterminated-span-dynamic.ly | 4 +- input/regression/whiteout-lower-layers.ly | 21 + input/regression/whiteout.ly | 2 +- input/regression/woodwind-diagrams-empty.ly | 70 + .../regression/woodwind-diagrams-key-lists.ly | 18 + input/regression/zero-staff-space.ly | 15 + input/sakura-sakura.ly | 66 - input/simple-song.ly | 17 - input/texidocs/GNUmakefile | 5 - .../accordion-discant-symbols.texidoc | 14 - ...ured-bass-above-or-below-the-notes.texidoc | 17 - .../texidocs/adding-ambitus-per-voice.texidoc | 13 - ...ing-an-extra-staff-at-a-line-break.texidoc | 12 - input/texidocs/adding-an-extra-staff.texidoc | 6 - ...ng-bar-lines-to-chordnames-context.texidoc | 7 - input/texidocs/adding-drum-parts.texidoc | 25 - .../adding-fingerings-to-tablatures.texidoc | 6 - ...an-expressive-mark-or-chordal-note.texidoc | 7 - ...adding-the-current-date-to-a-score.texidoc | 12 - ...olta-brackets-to-additional-staves.texidoc | 10 - ...itional-voices-to-avoid-collisions.texidoc | 8 - .../adjusting-lyrics-vertical-spacing.texidoc | 14 - ...sting-the-shape-of-falls-and-doits.texidoc | 15 - ...ing-and-centering-instrument-names.texidoc | 23 - input/texidocs/aligning-lyrics.texidoc | 9 - ...arks-with-various-notation-objects.texidoc | 14 - .../alignment-vertical-spacing.texidoc | 16 - ...ngs-to-be-printed-inside-the-staff.texidoc | 14 - .../ambitus-with-multiple-voices.texidoc | 14 - input/texidocs/ancient-fonts.texidoc | 14 - ...n-transcription-of-gregorian-music.texidoc | 16 - ...rn-transcription-of-mensural-music.texidoc | 37 - .../texidocs/ancient-time-signatures.texidoc | 5 - ...depending-on-the-step-of-the-scale.texidoc | 43 - input/texidocs/arabic-improvisation.texidoc | 10 - ...r-two-in-4-4-or-2-2-time-signature.texidoc | 21 - ...ions-of-chord-fingering-with-beams.texidoc | 20 - .../beam-endings-in-score-context.texidoc | 8 - .../beam-grouping-in-7-8-time.texidoc | 19 - .../texidocs/beams-across-line-breaks.texidoc | 16 - .../caesura-railtracks-with-fermata.texidoc | 8 - ...center-text-below-hairpin-dynamics.texidoc | 8 - .../changing--flageolet-mark-size.texidoc | 6 - ...ing-a-single-notes-size-in-a-chord.texidoc | 12 - input/texidocs/changing-beam-knee-gap.texidoc | 25 - .../texidocs/changing-chord-separator.texidoc | 6 - ...anging-form-of-multi-measure-rests.texidoc | 18 - ...di-output-to-one-channel-per-voice.texidoc | 16 - .../changing-partcombine-texts.texidoc | 7 - ...d-spanner-styles-for-text-dynamics.texidoc | 25 - ...lur-from-solid-to-dotted-or-dashed.texidoc | 6 - .../changing-the-breath-mark-symbol.texidoc | 16 - ...-to-german-or-semi-german-notation.texidoc | 8 - ...itions-of-figured-bass-alterations.texidoc | 8 - ...the-tempo-without-a-metronome-mark.texidoc | 7 - ...ture-without-affecting-the-beaming.texidoc | 10 - .../changing-the-tuplet-number.texidoc | 20 - .../texidocs/chant-or-psalms-notation.texidoc | 6 - input/texidocs/chord-name-exceptions.texidoc | 7 - input/texidocs/clusters.texidoc | 6 - ...mbining-dynamics-with-markup-texts.texidoc | 7 - ...bining-two-parts-on-the-same-staff.texidoc | 20 - .../texidocs/compound-time-signatures.texidoc | 23 - ...ting-signs,-measure-grouping-signs.texidoc | 15 - input/texidocs/contemporary-glissando.texidoc | 14 - ...-the-placement-of-chord-fingerings.texidoc | 14 - ...g-the-vertical-ordering-of-scripts.texidoc | 29 - .../texidocs/creating-a-delayed-turn.texidoc | 12 - ...s-across-notes-in-different-voices.texidoc | 17 - input/texidocs/creating-blank-staves.texidoc | 10 - ...s-staff-arpeggios-in-a-piano-staff.texidoc | 16 - ...-staff-arpeggios-in-other-contexts.texidoc | 17 - ...ing-metronome-marks-in-markup-mode.texidoc | 7 - ...eating-real-parenthesized-dynamics.texidoc | 17 - input/texidocs/custodes.texidoc | 5 - ...ustomizing-fretboard-fret-diagrams.texidoc | 11 - .../customizing-markup-fret-diagrams.texidoc | 20 - ...ms-on-the-center-line-of-the-staff.texidoc | 7 - ...d-fretboards-for-other-instruments.texidoc | 36 - ...et-with-only-one-staff-in-a-system.texidoc | 14 - ...s-for-each-note-including-naturals.texidoc | 26 - ...tive-postscript-in-a--markup-block.texidoc | 6 - input/texidocs/engravers-one-by-one.texidoc | 30 - .../texidocs/engraving-ties-manually.texidoc | 20 - ...lets-using-only-one--times-command.texidoc | 31 - ...cations,-and-right-hand-fingerings.texidoc | 17 - .../texidocs/flat-flags-and-beam-nibs.texidoc | 50 - .../forcing-horizontal-shift-of-notes.texidoc | 8 - ...d-lines--changing-their-appearance.texidoc | 6 - input/texidocs/grouping-beats.texidoc | 14 - input/texidocs/guitar-strum-rhythms.texidoc | 14 - ...he-extender-line-for-text-dynamics.texidoc | 16 - input/texidocs/incipit.texidoc | 6 - ...staff-chords-with-arpeggio-bracket.texidoc | 11 - input/texidocs/inserting-a-caesura.texidoc | 15 - .../texidocs/isolated-percent-repeats.texidoc | 7 - input/texidocs/jazz-combo-template.texidoc | 19 - input/texidocs/line-arrows.texidoc | 6 - input/texidocs/lyrics-alignment.texidoc | 9 - input/texidocs/makam-example.texidoc | 10 - ...taff-lines-thicker-than-the-others.texidoc | 9 - input/texidocs/measure-counter.texidoc | 7 - ...ayout-bar-lines-between-the-staves.texidoc | 10 - ...or-articulation-shorthand-notation.texidoc | 27 - .../multi-measure-rest-markup.texidoc | 17 - input/texidocs/nesting-staves.texidoc | 16 - .../non-traditional-key-signatures.texidoc | 45 - input/texidocs/ottava-text.texidoc | 20 - .../percent-repeat-count-visibility.texidoc | 7 - input/texidocs/percent-repeat-counter.texidoc | 7 - ...-line-breaks-within-beamed-tuplets.texidoc | 18 - input/texidocs/piano-template-simple.texidoc | 12 - ...no-template-with-centered-dynamics.texidoc | 15 - ...iano-template-with-centered-lyrics.texidoc | 12 - ...no-template-with-melody-and-lyrics.texidoc | 11 - ...placement-of-right-hand-fingerings.texidoc | 18 - input/texidocs/polyphony-in-tablature.texidoc | 15 - .../positioning-multi-measure-rests.texidoc | 21 - ...itioning-text-markups-inside-slurs.texidoc | 8 - ...als-from-being-automatically-added.texidoc | 25 - ...ted-when-the-key-signature-changes.texidoc | 17 - ...t-sign-at-the-beginning-of-a-piece.texidoc | 6 - ...-hairpins-using-al-niente-notation.texidoc | 17 - ...ks-at-the-end-of-a-line-or-a-score.texidoc | 12 - .../printing-marks-on-every-staff.texidoc | 7 - ...nd-rehearsal-marks-below-the-staff.texidoc | 10 - ...g-another-voice-with-transposition.texidoc | 11 - input/texidocs/quoting-another-voice.texidoc | 11 - .../removing-the-first-empty-line.texidoc | 15 - input/texidocs/rest-styles.texidoc | 9 - .../reverting-default-beam-endings.texidoc | 8 - ...ting-hairpin-behavior-at-bar-lines.texidoc | 17 - ...ing-the-minimum-length-of-hairpins.texidoc | 16 - .../shortening-volta-brackets.texidoc | 9 - .../showing-chords-at-changes.texidoc | 6 - input/texidocs/simple-lead-sheet.texidoc | 6 - ...ate-with-notes,-lyrics,-and-chords.texidoc | 11 - ...aff-template-with-notes-and-chords.texidoc | 12 - ...aff-template-with-notes-and-lyrics.texidoc | 19 - ...gle-staff-template-with-only-notes.texidoc | 14 - ...-pizzicato-markup-bartok-pizzicato.texidoc | 21 - ...ecifying-context-with-beatgrouping.texidoc | 8 - .../stand-alone-two-column-markup.texidoc | 6 - ...tem-and-beam-behavior-in-tablature.texidoc | 17 - .../string-quartet-template-simple.texidoc | 12 - ...artet-template-with-separate-parts.texidoc | 35 - input/texidocs/sub-dividing-beams.texidoc | 17 - ...ings-when-two-glissandos-intersect.texidoc | 8 - ...inimum-accidentals-smart-transpose.texidoc | 59 - .../texidocs/tweaking-clef-properties.texidoc | 65 - ...cket-at-the-start-of-a-staff-group.texidoc | 7 - .../using-beatlength-and-beatgrouping.texidoc | 11 - ...ing-double-slurs-for-legato-chords.texidoc | 14 - .../using-ties-with-arpeggios.texidoc | 22 - ...y-aligned-dynamics-and-textscripts.texidoc | 28 - ...tically-aligning-ossias-and-lyrics.texidoc | 7 - ...ate-with-automatic-piano-reduction.texidoc | 18 - ...aligned-below-and-above-the-staves.texidoc | 14 - .../texidocs/vocal-ensemble-template.texidoc | 16 - input/texidocs/volta-below-chords.texidoc | 7 - input/tutorial/GNUmakefile | 9 - input/tutorial/lbook-html-test.html | 34 - input/tutorial/lbook-latex-test.tex | 48 - input/tutorial/lbook-texi-test.texi | 34 - input/twinkle-pop.ly | 67 - input/wilhelmus.ly | 179 - input/xiao-haizi-guai-guai.ly | 42 - lily/GNUmakefile | 14 +- lily/accidental-engraver.cc | 34 +- lily/accidental-placement.cc | 108 +- lily/accidental.cc | 28 +- lily/align-interface.cc | 361 +- lily/all-font-metrics-scheme.cc | 26 +- lily/all-font-metrics.cc | 25 +- lily/ambitus-engraver.cc | 63 +- lily/ambitus.cc | 78 - lily/apply-context-iterator.cc | 17 +- lily/arpeggio-engraver.cc | 17 +- lily/arpeggio.cc | 89 +- lily/articulations.cc | 85 + lily/audio-column.cc | 18 +- lily/audio-element-info.cc | 17 +- lily/audio-element.cc | 17 +- lily/audio-item.cc | 52 +- lily/audio-staff.cc | 30 +- lily/auto-beam-engraver.cc | 233 +- lily/auto-change-iterator.cc | 17 +- lily/axis-group-engraver.cc | 24 +- lily/axis-group-interface-scheme.cc | 27 +- lily/axis-group-interface.cc | 419 +- lily/balloon-engraver.cc | 24 +- lily/balloon.cc | 75 +- lily/bar-check-iterator.cc | 17 +- lily/bar-engraver.cc | 19 +- lily/bar-line.cc | 275 +- lily/bar-number-engraver.cc | 41 +- lily/beam-collision-engraver.cc | 191 + lily/beam-concave.cc | 24 +- lily/beam-engraver.cc | 82 +- lily/beam-performer.cc | 17 +- lily/beam-quanting.cc | 810 +- lily/beam.cc | 535 +- lily/beaming-pattern.cc | 89 +- lily/bend-engraver.cc | 17 +- lily/bezier-bow.cc | 17 +- lily/bezier.cc | 66 +- lily/book-scheme.cc | 55 +- lily/book.cc | 58 +- lily/box.cc | 17 +- lily/break-align-engraver.cc | 26 +- lily/break-alignment-interface.cc | 18 +- lily/break-substitution.cc | 21 +- lily/breathing-sign-engraver.cc | 19 +- lily/breathing-sign.cc | 48 +- lily/change-iterator.cc | 17 +- lily/chord-name-engraver.cc | 135 +- lily/chord-name.cc | 19 +- lily/chord-tremolo-engraver.cc | 64 +- lily/chord-tremolo-iterator.cc | 26 +- lily/clef-engraver.cc | 43 +- lily/clef.cc | 17 +- lily/cluster-engraver.cc | 18 +- lily/cluster.cc | 18 +- lily/coherent-ligature-engraver.cc | 17 +- lily/collision-engraver.cc | 17 +- lily/column-x-positions.cc | 17 +- lily/completion-note-heads-engraver.cc | 155 +- lily/completion-rest-engraver.cc | 249 + lily/constrained-breaking.cc | 300 +- lily/context-def.cc | 29 +- lily/context-handle.cc | 17 +- lily/context-mod-scheme.cc | 46 + lily/context-mod.cc | 76 + lily/context-property.cc | 43 +- lily/context-scheme.cc | 56 +- lily/context-specced-music-iterator.cc | 18 +- lily/context.cc | 44 +- lily/control-track-performer.cc | 2 - lily/cue-clef-engraver.cc | 230 + lily/custos-engraver.cc | 19 +- lily/custos.cc | 17 +- lily/default-bar-line-engraver.cc | 18 +- lily/dimension-cache.cc | 17 +- lily/dimensions-scheme.cc | 17 +- lily/directional-element-interface.cc | 20 +- lily/dispatcher-scheme.cc | 17 +- lily/dispatcher.cc | 25 +- lily/dot-column-engraver.cc | 17 +- lily/dot-column.cc | 50 +- lily/dot-configuration.cc | 19 +- lily/dot-formatting-problem.cc | 21 +- lily/dots-engraver.cc | 24 +- lily/dots.cc | 17 +- lily/double-percent-repeat-engraver.cc | 113 + lily/drum-note-engraver.cc | 28 +- lily/drum-note-performer.cc | 22 +- lily/duration-scheme.cc | 19 +- lily/duration.cc | 23 +- lily/dynamic-align-engraver.cc | 125 +- lily/dynamic-engraver.cc | 17 +- lily/dynamic-performer.cc | 18 +- lily/easy-notation.cc | 104 - lily/enclosing-bracket.cc | 17 +- lily/engraver-group.cc | 28 +- lily/engraver-scheme.cc | 56 + lily/engraver.cc | 78 +- lily/episema-engraver.cc | 179 + lily/event-chord-iterator.cc | 17 +- lily/event-iterator.cc | 17 +- lily/extender-engraver.cc | 45 +- lily/figured-bass-continuation.cc | 17 +- lily/figured-bass-engraver.cc | 586 +- lily/figured-bass-position-engraver.cc | 17 +- lily/file-name-map.cc | 17 +- lily/fingering-engraver.cc | 20 +- lily/font-config-scheme.cc | 16 +- lily/font-config.cc | 46 +- lily/font-interface.cc | 17 +- lily/font-metric-scheme.cc | 64 +- lily/font-metric.cc | 74 +- lily/font-select.cc | 17 +- lily/font-size-engraver.cc | 17 +- lily/footnote-engraver.cc | 136 + lily/forbid-break-engraver.cc | 17 +- lily/freetype-error.cc | 27 +- lily/freetype.cc | 19 +- lily/fretboard-engraver.cc | 96 +- lily/function-documentation.cc | 29 +- lily/general-scheme.cc | 316 +- lily/glissando-engraver.cc | 121 +- lily/global-context-scheme.cc | 35 +- lily/global-context.cc | 19 +- lily/global-ctor.cc | 17 +- lily/grace-engraver.cc | 23 +- lily/grace-iterator.cc | 17 +- lily/grace-music.cc | 17 +- lily/grace-spacing-engraver.cc | 17 +- lily/gregorian-ligature-engraver.cc | 17 +- lily/gregorian-ligature.cc | 17 +- lily/grid-line-interface.cc | 17 +- lily/grid-line-span-engraver.cc | 17 +- lily/grid-point-engraver.cc | 17 +- lily/grob-array-scheme.cc | 31 +- lily/grob-array.cc | 30 +- lily/grob-info.cc | 25 +- lily/grob-interface-scheme.cc | 34 +- lily/grob-interface.cc | 17 +- lily/grob-pq-engraver.cc | 17 +- lily/grob-property.cc | 20 + lily/grob-scheme.cc | 113 +- lily/grob-smob.cc | 17 +- lily/grob.cc | 89 +- lily/guile-init.cc | 23 +- lily/hairpin.cc | 132 +- lily/hara-kiri-engraver.cc | 17 +- lily/hara-kiri-group-spanner.cc | 34 +- lily/horizontal-bracket-engraver.cc | 60 +- lily/horizontal-bracket.cc | 17 +- lily/hyphen-engraver.cc | 27 +- lily/identifier-smob.cc | 18 +- lily/includable-lexer.cc | 23 +- lily/include/accidental-interface.hh | 17 +- lily/include/accidental-placement.hh | 17 +- lily/include/align-interface.hh | 43 +- lily/include/all-font-metrics.hh | 17 +- lily/include/ambitus.hh | 24 - lily/include/arpeggio.hh | 18 +- lily/include/articulations.hh | 31 + lily/include/audio-column.hh | 17 +- lily/include/audio-element-info.hh | 17 +- lily/include/audio-element.hh | 17 +- lily/include/audio-item.hh | 26 +- lily/include/audio-staff.hh | 24 +- lily/include/axis-group-engraver.hh | 19 +- lily/include/axis-group-interface.hh | 33 +- lily/include/bar-line.hh | 35 +- lily/include/bar.hh | 28 - lily/include/beam-scoring-problem.hh | 187 + lily/include/beam.hh | 69 +- lily/include/beaming-pattern.hh | 31 +- lily/include/bezier.hh | 19 +- lily/include/book.hh | 22 +- lily/include/break-align-interface.hh | 17 +- lily/include/breathing-sign.hh | 2 +- lily/include/change-iterator.hh | 17 +- lily/include/chord-name.hh | 17 +- lily/include/chord-tremolo-iterator.hh | 17 +- lily/include/clef.hh | 17 +- lily/include/cluster.hh | 17 +- lily/include/coherent-ligature-engraver.hh | 17 +- lily/include/column-x-positions.hh | 17 +- lily/include/constrained-breaking.hh | 105 +- lily/include/context-def.hh | 17 +- lily/include/context-handle.hh | 17 +- lily/include/context-mod.hh | 58 + lily/include/context.hh | 25 +- lily/include/custos.hh | 17 +- lily/include/dimension-cache.hh | 17 +- lily/include/directional-element-interface.hh | 17 +- lily/include/dispatcher.hh | 17 +- lily/include/dot-column.hh | 17 +- lily/include/dot-configuration.hh | 19 +- lily/include/dots.hh | 17 +- lily/include/duration.hh | 17 +- lily/include/engraver-group.hh | 17 +- lily/include/engraver.hh | 23 +- lily/include/event-chord-iterator.hh | 17 +- lily/include/event-iterator.hh | 19 +- lily/include/file-name-map.hh | 17 +- lily/include/font-interface.hh | 17 +- lily/include/font-metric.hh | 49 +- lily/include/freetype.hh | 19 +- lily/include/global-context.hh | 19 +- lily/include/global-ctor.hh | 17 +- lily/include/grace-fixup.hh | 17 +- lily/include/grace-iterator.hh | 17 +- lily/include/gregorian-ligature-engraver.hh | 17 +- lily/include/gregorian-ligature.hh | 29 +- lily/include/grid-line-interface.hh | 17 +- lily/include/grob-array.hh | 18 +- lily/include/grob-info.hh | 27 +- lily/include/grob-interface.hh | 17 +- lily/include/grob.hh | 27 +- lily/include/group-interface.hh | 17 +- lily/include/hairpin.hh | 20 +- lily/include/hara-kiri-group-spanner.hh | 18 +- lily/include/horizontal-bracket.hh | 17 +- lily/include/identifier-smob.hh | 17 +- lily/include/includable-lexer.hh | 19 +- lily/include/input.hh | 19 +- lily/include/item.hh | 20 +- lily/include/keyword.hh | 17 +- lily/include/least-squares.hh | 17 +- lily/include/ligature-engraver.hh | 19 +- lily/include/lily-guile-macros.hh | 44 +- lily/include/lily-guile.hh | 23 +- lily/include/lily-lexer.hh | 40 +- lily/include/lily-parser.hh | 18 +- lily/include/lily-proto.hh | 31 +- lily/include/lily-version.hh | 17 +- lily/include/lilypond-version.hh | 17 +- lily/include/line-interface.hh | 17 +- lily/include/listener.hh | 17 +- lily/include/lookup.hh | 26 +- lily/include/ly-module.hh | 31 +- lily/include/ly-smobs.icc | 20 +- lily/include/lyric-extender.hh | 2 +- lily/include/lyric-hyphen.hh | 17 +- lily/include/main.hh | 17 +- lily/include/measure-grouping-spanner.hh | 17 +- lily/include/melody-spanner.hh | 16 +- lily/include/mensural-ligature.hh | 23 +- lily/include/midi-chunk.hh | 33 +- lily/include/midi-item.hh | 43 +- lily/include/midi-stream.hh | 17 +- lily/include/midi-walker.hh | 25 +- lily/include/mingw-compatibility.hh | 17 +- lily/include/minimal-page-breaking.hh | 19 +- lily/include/misc.hh | 18 +- lily/include/modified-font-metric.hh | 25 +- lily/include/moment.hh | 17 +- lily/include/multi-measure-rest.hh | 17 +- lily/include/music-function.hh | 17 +- lily/include/music-iterator.hh | 17 +- lily/include/music-output.hh | 17 +- lily/include/music-sequence.hh | 18 +- lily/include/music-wrapper-iterator.hh | 17 +- lily/include/music-wrapper.hh | 17 +- lily/include/music.hh | 17 +- lily/include/note-collision.hh | 17 +- lily/include/note-column.hh | 18 +- lily/include/note-head.hh | 18 +- lily/include/note-spacing.hh | 17 +- lily/include/open-type-font.hh | 19 +- lily/include/optimal-page-breaking.hh | 19 +- lily/include/output-def.hh | 30 +- lily/include/page-breaking.hh | 78 +- lily/include/page-layout-problem.hh | 98 + lily/include/page-marker.hh | 22 +- lily/include/page-spacing-result.hh | 36 +- lily/include/page-spacing.hh | 58 +- lily/include/page-turn-page-breaking.hh | 19 +- lily/include/pango-font.hh | 24 +- lily/include/paper-book.hh | 17 +- lily/include/paper-column-engraver.hh | 18 +- lily/include/paper-column.hh | 23 +- lily/include/paper-outputter.hh | 27 +- lily/include/paper-score.hh | 21 +- lily/include/paper-system.hh | 18 +- lily/include/parse-scm.hh | 17 +- lily/include/percent-repeat-item.hh | 19 +- lily/include/performance.hh | 20 +- lily/include/performer-group.hh | 17 +- lily/include/performer.hh | 19 +- lily/include/pitch-interval.hh | 17 +- lily/include/pitch.hh | 56 +- lily/include/pointer-group-interface.hh | 17 +- lily/include/prob.hh | 19 +- lily/include/profile.hh | 17 +- lily/include/program-option.hh | 17 +- lily/include/property-iterator.hh | 17 +- lily/include/protected-scm.hh | 17 +- lily/include/relocate.hh | 16 +- lily/include/repeated-music.hh | 17 +- lily/include/rest-collision.hh | 18 +- lily/include/rest.hh | 18 +- lily/include/rhythmic-head.hh | 17 +- lily/include/rod.hh | 17 +- lily/include/scale.hh | 24 +- lily/include/scheme-engraver.hh | 79 + lily/include/scheme-listener.hh | 17 +- lily/include/scm-hash.hh | 17 +- lily/include/score-engraver.hh | 17 +- lily/include/score-performer.hh | 17 +- lily/include/score.hh | 27 +- lily/include/script-column.hh | 17 +- lily/include/script-interface.hh | 19 +- lily/include/self-alignment-interface.hh | 21 +- lily/include/semi-tie-column.hh | 17 +- lily/include/semi-tie.hh | 16 +- lily/include/separation-item.hh | 17 +- lily/include/sequential-iterator.hh | 17 +- lily/include/side-position-interface.hh | 19 +- lily/include/simple-closure.hh | 16 +- lily/include/simple-music-iterator.hh | 17 +- lily/include/simple-spacer.hh | 17 +- lily/include/simultaneous-music-iterator.hh | 17 +- lily/include/skyline-pair.hh | 24 +- lily/include/skyline.hh | 25 +- lily/include/slur-configuration.hh | 59 +- lily/include/slur-score-parameters.hh | 16 +- lily/include/slur-scoring.hh | 24 +- lily/include/slur.hh | 17 +- lily/include/smobs.hh | 33 +- lily/include/source-file.hh | 19 +- lily/include/sources.hh | 17 +- lily/include/spaceable-grob.hh | 17 +- lily/include/spacing-interface.hh | 17 +- lily/include/spacing-options.hh | 24 +- lily/include/spacing-spanner.hh | 17 +- lily/include/span-bar.hh | 18 +- lily/include/spanner.hh | 25 +- lily/include/spring.hh | 20 +- lily/include/staff-grouper-interface.hh | 33 + lily/include/staff-spacing.hh | 17 +- lily/include/staff-symbol-referencer.hh | 19 +- lily/include/staff-symbol.hh | 18 +- lily/include/stem-info.hh | 17 +- lily/include/stem-tremolo.hh | 17 +- lily/include/stem.hh | 17 +- lily/include/stencil.hh | 18 +- lily/include/stream-event.hh | 18 +- lily/include/stream.hh | 17 +- lily/include/system-start-delimiter.hh | 17 +- lily/include/system.hh | 42 +- lily/include/text-interface.hh | 19 +- lily/include/tie-column-format.hh | 16 +- lily/include/tie-column.hh | 17 +- lily/include/tie-configuration.hh | 16 +- lily/include/tie-details.hh | 16 +- lily/include/tie-formatting-problem.hh | 16 +- lily/include/tie-specification.hh | 24 +- lily/include/tie.hh | 17 +- lily/include/time-scaled-music-iterator.hh | 19 +- lily/include/time-signature.hh | 17 +- lily/include/timing-translator.hh | 17 +- lily/include/translator-dispatch-list.hh | 17 +- lily/include/translator-group.hh | 17 +- lily/include/translator.hh | 62 +- lily/include/translator.icc | 42 +- lily/include/tuplet-bracket.hh | 22 +- lily/include/type-swallow-translator.hh | 44 - lily/include/vaticana-ligature.hh | 17 +- lily/include/volta-bracket.hh | 17 +- lily/input-scheme.cc | 23 +- lily/input-smob.cc | 17 +- lily/input.cc | 43 +- lily/instrument-name-engraver.cc | 50 +- lily/instrument-switch-engraver.cc | 35 +- lily/item-scheme.cc | 17 +- lily/item.cc | 23 +- lily/keep-alive-together-engraver.cc | 85 + lily/key-engraver.cc | 40 +- lily/key-performer.cc | 17 +- lily/key-signature-interface.cc | 19 +- lily/laissez-vibrer-engraver.cc | 39 +- lily/least-squares.cc | 17 +- lily/ledger-line-engraver.cc | 17 +- lily/ledger-line-spanner.cc | 19 +- lily/lexer.ll | 138 +- lily/ligature-bracket-engraver.cc | 20 +- lily/ligature-engraver.cc | 30 +- lily/lily-guile.cc | 27 +- lily/lily-lexer-scheme.cc | 23 +- lily/lily-lexer.cc | 70 +- lily/lily-parser-scheme.cc | 63 +- lily/lily-parser.cc | 49 +- lily/lily-version.cc | 17 +- lily/lilypond-version.cc | 17 +- lily/lilypond.rc.in | 2 +- lily/line-interface.cc | 62 +- lily/line-spanner.cc | 105 +- lily/listener.cc | 19 +- lily/lookup.cc | 135 +- lily/ly-module.cc | 154 +- lily/lyric-combine-music-iterator.cc | 35 +- lily/lyric-combine-music.cc | 17 +- lily/lyric-engraver.cc | 56 +- lily/lyric-extender.cc | 18 +- lily/lyric-hyphen.cc | 17 +- lily/lyric-performer.cc | 17 +- lily/main.cc | 77 +- lily/mark-engraver.cc | 40 +- lily/measure-grouping-engraver.cc | 53 +- lily/measure-grouping-spanner.cc | 17 +- lily/melody-engraver.cc | 17 +- lily/melody-spanner.cc | 17 +- lily/mensural-ligature-engraver.cc | 296 +- lily/mensural-ligature.cc | 181 +- lily/metronome-engraver.cc | 159 +- lily/midi-chunk.cc | 36 +- lily/midi-item.cc | 53 +- lily/midi-stream.cc | 17 +- lily/midi-walker.cc | 80 +- lily/minimal-page-breaking.cc | 27 +- lily/misc.cc | 39 +- lily/modified-font-metric.cc | 63 +- lily/module-scheme.cc | 30 +- lily/moment-scheme.cc | 17 +- lily/moment.cc | 17 +- lily/multi-measure-rest-engraver.cc | 18 +- lily/multi-measure-rest.cc | 60 +- lily/music-function-scheme.cc | 4 +- lily/music-function.cc | 17 +- lily/music-iterator.cc | 17 +- lily/music-output.cc | 17 +- lily/music-scheme.cc | 33 +- lily/music-sequence.cc | 72 +- lily/music-wrapper-iterator.cc | 17 +- lily/music-wrapper.cc | 17 +- lily/music.cc | 47 +- lily/nested-property.cc | 56 +- lily/new-dynamic-engraver.cc | 120 +- lily/new-fingering-engraver.cc | 41 +- lily/note-collision.cc | 43 +- lily/note-column-scheme.cc | 48 + lily/note-column.cc | 37 +- lily/note-head-line-engraver.cc | 17 +- lily/note-head-scheme.cc | 17 +- lily/note-head.cc | 48 +- lily/note-heads-engraver.cc | 42 +- lily/note-name-engraver.cc | 22 +- lily/note-performer.cc | 17 +- lily/note-spacing-engraver.cc | 24 +- lily/note-spacing.cc | 116 +- lily/open-type-font-scheme.cc | 60 +- lily/open-type-font.cc | 68 +- lily/optimal-page-breaking.cc | 118 +- lily/ottava-bracket.cc | 17 +- lily/ottava-engraver.cc | 26 +- lily/out/parser.cc | 4060 ++-- lily/out/parser.hh | 366 +- lily/output-def-scheme.cc | 87 +- lily/output-def.cc | 139 +- lily/output-property-engraver.cc | 26 +- lily/page-breaking-scheme.cc | 18 +- lily/page-breaking.cc | 877 +- lily/page-layout-problem.cc | 917 + lily/page-marker-scheme.cc | 19 +- lily/page-marker.cc | 31 +- lily/page-spacing-result.cc | 34 +- lily/page-spacing.cc | 212 +- lily/page-turn-engraver.cc | 17 +- lily/page-turn-page-breaking.cc | 45 +- lily/pango-font-scheme.cc | 17 +- lily/pango-font.cc | 167 +- lily/pango-select-scheme.cc | 17 +- lily/pango-select.cc | 17 +- lily/paper-book-scheme.cc | 58 +- lily/paper-book.cc | 135 +- lily/paper-column-engraver.cc | 40 +- lily/paper-column.cc | 117 +- lily/paper-def.cc | 19 +- lily/paper-outputter-scheme.cc | 27 +- lily/paper-outputter.cc | 43 +- lily/paper-score-scheme.cc | 17 +- lily/paper-score.cc | 51 +- lily/paper-system-scheme.cc | 26 +- lily/paper-system.cc | 75 +- lily/parenthesis-engraver.cc | 17 +- lily/parse-scm.cc | 19 +- lily/parser.yy | 432 +- lily/part-combine-engraver.cc | 88 +- lily/part-combine-iterator.cc | 165 +- lily/partial-iterator.cc | 56 + lily/pdf-scheme.cc | 83 + lily/percent-repeat-engraver.cc | 198 +- lily/percent-repeat-item.cc | 53 +- lily/percent-repeat-iterator.cc | 50 +- lily/performance-scheme.cc | 17 +- lily/performance.cc | 53 +- lily/performer-group.cc | 19 +- lily/performer.cc | 26 +- lily/pfb-scheme.cc | 3 +- lily/pfb.cc | 17 +- lily/phrasing-slur-engraver.cc | 122 +- lily/piano-pedal-align-engraver.cc | 23 +- lily/piano-pedal-bracket.cc | 17 +- lily/piano-pedal-engraver.cc | 25 +- lily/piano-pedal-performer.cc | 19 +- lily/pitch-interval.cc | 17 +- lily/pitch-scheme.cc | 21 +- lily/pitch-squash-engraver.cc | 17 +- lily/pitch.cc | 29 +- lily/pitched-trill-engraver.cc | 17 +- lily/pointer-group-interface-scheme.cc | 36 + lily/pointer-group-interface.cc | 17 +- lily/prob-scheme.cc | 37 +- lily/prob.cc | 31 +- lily/profile.cc | 17 +- lily/program-option-scheme.cc | 28 +- lily/program-option.cc | 23 +- lily/property-iterator.cc | 17 +- lily/protected-scm.cc | 17 +- lily/quote-iterator.cc | 36 +- lily/relative-octave-check.cc | 17 +- lily/relative-octave-music.cc | 17 +- lily/relocate.cc | 25 +- lily/repeat-acknowledge-engraver.cc | 17 +- lily/repeat-tie-engraver.cc | 17 +- lily/repeated-music.cc | 17 +- lily/rest-collision-engraver.cc | 17 +- lily/rest-collision.cc | 203 +- lily/rest-engraver.cc | 17 +- lily/rest.cc | 32 +- lily/rhythmic-column-engraver.cc | 17 +- lily/rhythmic-head.cc | 17 +- lily/rod.cc | 17 +- lily/scale.cc | 23 +- lily/scheme-engraver.cc | 256 + lily/scheme-listener-scheme.cc | 17 +- lily/scheme-listener.cc | 17 +- lily/scm-hash.cc | 23 +- lily/score-engraver.cc | 20 +- lily/score-performer.cc | 20 +- lily/score-scheme.cc | 26 +- lily/score.cc | 21 +- lily/script-column-engraver.cc | 17 +- lily/script-column.cc | 72 +- lily/script-engraver.cc | 21 +- lily/script-interface.cc | 39 +- lily/script-row-engraver.cc | 23 +- lily/self-aligment-interface.cc | 158 - lily/self-alignment-interface.cc | 171 + lily/semi-tie-column.cc | 17 +- lily/semi-tie.cc | 17 +- lily/separating-line-group-engraver.cc | 17 +- lily/separation-item.cc | 29 +- lily/sequential-iterator.cc | 17 +- lily/side-position-interface.cc | 124 +- lily/simple-closure.cc | 23 +- lily/simple-music-iterator.cc | 17 +- lily/simple-spacer-scheme.cc | 17 +- lily/simple-spacer.cc | 25 +- lily/simultaneous-music-iterator.cc | 17 +- lily/skyline-pair.cc | 23 +- lily/skyline.cc | 102 +- lily/slash-repeat-engraver.cc | 59 +- lily/slur-configuration.cc | 70 +- lily/slur-engraver.cc | 116 +- lily/slur-performer.cc | 17 +- lily/slur-score-parameters.cc | 17 +- lily/slur-scoring.cc | 199 +- lily/slur.cc | 125 +- lily/smobs.cc | 17 +- lily/source-file.cc | 82 +- lily/sources.cc | 17 +- lily/spaceable-grob.cc | 21 +- lily/spacing-basic.cc | 55 +- lily/spacing-determine-loose-columns.cc | 190 +- lily/spacing-engraver.cc | 17 +- lily/spacing-interface.cc | 57 +- lily/spacing-loose-columns.cc | 48 +- lily/spacing-options.cc | 17 +- lily/spacing-spanner.cc | 56 +- lily/span-arpeggio-engraver.cc | 19 +- lily/span-bar-engraver.cc | 19 +- lily/span-bar.cc | 58 +- lily/spanner-break-forbid-engraver.cc | 23 +- lily/spanner-scheme.cc | 40 +- lily/spanner.cc | 196 +- lily/spring-smob.cc | 17 +- lily/spring.cc | 71 +- lily/staff-collecting-engraver.cc | 17 +- lily/staff-grouper-interface.cc | 58 + lily/staff-performer.cc | 240 +- lily/staff-spacing.cc | 17 +- lily/staff-symbol-engraver.cc | 43 +- lily/staff-symbol-referencer-scheme.cc | 42 +- lily/staff-symbol-referencer.cc | 24 +- lily/staff-symbol.cc | 35 +- lily/stanza-number-align-engraver.cc | 17 +- lily/stanza-number-engraver.cc | 17 +- lily/stem-engraver.cc | 33 +- lily/stem-tremolo.cc | 17 +- lily/stem.cc | 100 +- lily/stencil-expression.cc | 18 +- lily/stencil-interpret.cc | 35 +- lily/stencil-scheme.cc | 34 +- lily/stencil.cc | 28 +- lily/stream-event-scheme.cc | 28 +- lily/stream-event.cc | 19 +- lily/string-number-engraver.cc | 52 - lily/sustain-pedal.cc | 17 +- lily/swallow-engraver.cc | 45 - lily/swallow-perf.cc | 46 - lily/system-scheme.cc | 43 - lily/system-start-delimiter-engraver.cc | 91 +- lily/system-start-delimiter.cc | 37 +- lily/system-start-text.cc | 121 - lily/system.cc | 432 +- lily/tab-harmonic-engraver.cc | 79 - lily/tab-note-heads-engraver.cc | 174 +- lily/tab-staff-symbol-engraver.cc | 17 +- lily/tab-tie-follow-engraver.cc | 131 + lily/template5.cc | 17 +- lily/tempo-performer.cc | 17 +- lily/text-engraver.cc | 30 +- lily/text-interface.cc | 70 +- lily/text-spanner-engraver.cc | 52 +- lily/tie-column.cc | 24 +- lily/tie-configuration.cc | 17 +- lily/tie-details.cc | 17 +- lily/tie-engraver.cc | 141 +- lily/tie-formatting-problem.cc | 19 +- lily/tie-performer.cc | 109 +- lily/tie.cc | 144 +- lily/time-scaled-music-iterator.cc | 142 - lily/time-signature-engraver.cc | 17 +- lily/time-signature-performer.cc | 17 +- lily/time-signature.cc | 19 +- lily/timing-translator.cc | 24 +- lily/translator-ctors.cc | 17 +- lily/translator-dispatch-list.cc | 17 +- lily/translator-group-ctors.cc | 17 +- lily/translator-group.cc | 75 +- lily/translator-scheme.cc | 29 +- lily/translator.cc | 36 +- lily/trill-spanner-engraver.cc | 17 +- lily/ttf.cc | 83 +- lily/tuplet-bracket.cc | 239 +- lily/tuplet-engraver.cc | 19 +- lily/tuplet-iterator.cc | 149 + lily/tuplet-number.cc | 17 +- lily/tweak-engraver.cc | 17 +- lily/type-swallow-translator.cc | 92 - lily/unfolded-repeat-iterator.cc | 17 +- lily/vaticana-ligature-engraver.cc | 55 +- lily/vaticana-ligature.cc | 23 +- lily/vertical-align-engraver.cc | 39 +- lily/vertically-spaced-context-engraver.cc | 70 - lily/volta-bracket.cc | 26 +- lily/volta-engraver.cc | 17 +- lily/volta-repeat-iterator.cc | 16 +- ly/GNUmakefile | 2 +- ly/Welcome-to-LilyPond-MacOS.ly | 2 +- ly/Welcome_to_LilyPond.ly | 4 +- ly/arabic.ly | 54 +- ly/articulate.ly | 636 + ly/bagpipe.ly | 374 +- ly/catalan.ly | 102 +- ly/chord-modifiers-init.ly | 10 +- ly/chord-repetition-init.ly | 79 + ly/declarations-init.ly | 87 +- ly/deutsch.ly | 112 +- ly/drumpitch-init.ly | 2 +- ly/dynamic-scripts-init.ly | 5 +- ly/english.ly | 158 +- ly/engraver-init.ly | 498 +- ly/espanol.ly | 86 +- ly/festival.ly | 41 +- ly/generate-documentation.ly | 2 +- ly/generate-interface-doc-init.ly | 2 +- ly/grace-init.ly | 13 +- ly/graphviz-init.ly | 2 +- ly/gregorian.ly | 15 +- ly/guile-debugger.ly | 55 + ly/init.ly | 20 +- ly/italiano.ly | 114 +- ly/lilypond-book-preamble.ly | 2 +- ly/makam.ly | 2 +- ly/markup-init.ly | 120 - ly/midi-init.ly | 20 +- ly/music-functions-init.ly | 1148 +- ly/nederlands.ly | 111 +- ly/norsk.ly | 133 +- ly/paper-defaults-init.ly | 275 +- ly/params-init.ly | 2 - ly/performer-init.ly | 285 +- ly/portugues.ly | 114 +- ly/predefined-fretboards-init.ly | 50 +- ly/predefined-guitar-fretboards.ly | 713 +- ly/predefined-guitar-ninth-fretboards.ly | 61 +- ly/predefined-mandolin-fretboards.ly | 876 + ly/predefined-ukulele-fretboards.ly | 809 + ly/property-init.ly | 733 +- ly/scale-definitions-init.ly | 2 +- ly/script-init.ly | 75 +- ly/spanners-init.ly | 31 +- ly/string-tunings-init.ly | 135 + ly/suomi.ly | 71 +- ly/svenska.ly | 64 +- ly/titling-init.ly | 52 +- ly/toc-init.ly | 12 +- ly/vlaams.ly | 85 +- make/abc-rules.make | 4 + make/abc-targets.make | 1 + make/abc-vars.make | 7 + make/doc-i18n-root-rules.make | 58 +- make/doc-i18n-root-targets.make | 16 +- make/doc-i18n-root-vars.make | 75 +- make/doc-i18n-topdocs-rules.make | 14 - make/doc-i18n-topdocs-targets.make | 9 - make/doc-i18n-topdocs-vars.make | 26 - make/doc-i18n-user-rules.make | 39 - make/doc-i18n-user-targets.make | 16 - make/doc-i18n-user-vars.make | 46 - make/generic-vars.make | 2 +- make/lilypond-book-rules.make | 56 + make/lilypond-book-targets.make | 1 + make/lilypond-book-vars.make | 62 + make/lilypond-vars.make | 11 +- make/ly-rules.make | 12 +- make/ly-vars.make | 3 +- make/lysdoc-rules.make | 3 +- make/lysdoc-targets.make | 2 +- make/lysdoc-vars.make | 5 + make/midi-rules.make | 18 + make/midi-targets.make | 7 + make/midi-vars.make | 10 + make/mutopia-targets.make | 2 +- make/mutopia-vars.make | 8 +- make/toplevel-version.make | 4 + make/website.make | 148 + mf/GNUmakefile | 69 +- mf/README | 2 +- mf/aybabtu.pe.in | 84 - mf/bigcheese.pe.in | 1 + mf/emmentaler-brace.pe.in | 85 + mf/feta-accidentals.mf | 1321 ++ mf/feta-accordion.mf | 136 +- mf/feta-alphabet.mf | 6 +- mf/feta-arrow.mf | 169 - mf/feta-arrowheads.mf | 180 + mf/feta-autometric.mf | 24 +- mf/feta-banier.mf | 550 - mf/feta-beugel.mf | 147 - mf/feta-bolletjes.mf | 1497 -- mf/feta-braces-a.mf | 25 +- mf/feta-braces-b.mf | 25 +- mf/feta-braces-c.mf | 25 +- mf/feta-braces-d.mf | 25 +- mf/feta-braces-e.mf | 25 +- mf/feta-braces-f.mf | 25 +- mf/feta-braces-g.mf | 25 +- mf/feta-braces-h.mf | 25 +- mf/feta-braces-i.mf | 25 +- mf/feta-braces.mf | 164 + mf/feta-brackettips.mf | 102 + mf/feta-clefs.mf | 740 + mf/feta-din-code.mf | 791 - mf/feta-dots.mf | 37 + mf/feta-dynamics.mf | 801 + mf/feta-eindelijk.mf | 593 - mf/feta-flags.mf | 574 + mf/feta-generic.mf | 49 +- mf/feta-haak.mf | 92 - mf/feta-klef.mf | 698 - mf/feta-macros.mf | 17 +- mf/feta-noteheads-generic.mf | 57 + mf/feta-noteheads-test-generic.mf | 7 + mf/feta-noteheads.mf | 2940 +++ mf/feta-noteheads11.mf | 13 + mf/feta-noteheads13.mf | 13 + mf/feta-noteheads14.mf | 13 + mf/feta-noteheads16.mf | 13 + mf/feta-noteheads18.mf | 13 + mf/feta-noteheads20.mf | 13 + mf/feta-noteheads23.mf | 13 + mf/feta-noteheads26.mf | 13 + mf/feta-numbers.mf | 909 + mf/feta-nummer-code.mf | 899 - mf/feta-params.mf | 31 +- mf/feta-pedals.mf | 357 + mf/feta-pendaal.mf | 348 - mf/feta-puntje.mf | 26 - mf/feta-rests.mf | 603 + mf/feta-schrift.mf | 1560 -- mf/feta-scripts.mf | 1751 ++ mf/feta-slag.mf | 315 - mf/feta-test-generic.mf | 24 +- mf/feta-timesig.mf | 108 - mf/feta-timesignatures.mf | 119 + mf/feta-toevallig.mf | 1308 -- mf/feta-trills.mf | 325 + mf/parmesan-accidentals.mf | 23 +- mf/parmesan-clefs.mf | 21 +- mf/parmesan-custodes.mf | 29 +- mf/parmesan-dots.mf | 23 +- mf/parmesan-flags.mf | 23 +- mf/parmesan-generic.mf | 24 +- mf/parmesan-heads.mf | 1492 -- mf/parmesan-macros.mf | 23 +- mf/parmesan-noteheads.mf | 1579 ++ mf/parmesan-rests.mf | 23 +- mf/parmesan-scripts.mf | 23 +- mf/parmesan-timesig.mf | 395 - mf/parmesan-timesignatures.mf | 406 + out/ChangeLog | 2 +- out/RELEASE-COMMIT | 120 +- po/de.po | 3922 ++-- po/el.po | 3413 +++ po/es.po | 3910 ++-- po/fr.po | 4155 ++-- po/it.po | 4472 ++-- po/lilypond.pot | 3000 ++- po/nl.po | 2893 ++- po/uk.po | 2 +- po/vi.po | 690 +- ps/GNUmakefile | 11 +- ps/music-drawing-routines.ps | 76 +- python/auxiliar/buildlib.py | 53 +- python/auxiliar/manuals_definitions.py | 15 +- python/auxiliar/postprocess_html.py | 89 +- python/book_base.py | 193 + python/book_docbook.py | 133 + python/book_html.py | 143 + python/book_latex.py | 270 + python/book_snippets.py | 854 + python/book_texinfo.py | 266 + python/convertrules.py | 377 +- python/langdefs.py | 20 +- python/lilylib.py | 79 +- python/midi.c | 95 +- python/musicexp.py | 270 +- python/musicxml.py | 29 +- scm/GNUmakefile | 4 +- scm/auto-beam.scm | 381 +- scm/autochange.scm | 2 +- scm/backend-library.scm | 238 +- scm/bezier-tools.scm | 105 + scm/c++.scm | 36 +- scm/chord-entry.scm | 36 +- scm/chord-generic-names.scm | 60 +- scm/chord-ignatzek-names.scm | 90 +- scm/chord-name.scm | 74 +- scm/clip-region.scm | 93 +- scm/coverage.scm | 2 + scm/define-context-properties.scm | 193 +- scm/define-event-classes.scm | 71 +- scm/define-grob-interfaces.scm | 84 +- scm/define-grob-properties.scm | 372 +- scm/define-grobs.scm | 2366 +- scm/define-markup-commands.scm | 1710 +- scm/define-music-callbacks.scm | 89 + scm/define-music-display-methods.scm | 273 +- scm/define-music-properties.scm | 95 +- scm/define-music-types.scm | 193 +- scm/define-note-names.scm | 972 + scm/define-stencil-commands.scm | 122 +- scm/define-woodwind-diagrams.scm | 1231 + scm/display-lily.scm | 53 +- scm/display-woodwind-diagrams.scm | 1989 ++ scm/document-backend.scm | 77 +- scm/document-functions.scm | 21 +- scm/document-identifiers.scm | 26 +- scm/document-markup.scm | 57 +- scm/document-music.scm | 35 +- scm/document-translation.scm | 92 +- scm/document-type-predicates.scm | 69 + scm/documentation-generate.scm | 72 +- scm/documentation-lib.scm | 67 +- scm/editor.scm | 21 +- scm/encoding.scm | 19 +- scm/file-cache.scm | 17 +- scm/flag-styles.scm | 113 +- scm/font.scm | 155 +- scm/framework-eps.scm | 118 +- scm/framework-null.scm | 2 +- scm/framework-ps.scm | 228 +- scm/framework-scm.scm | 48 +- scm/framework-socket.scm | 72 +- scm/framework-svg.scm | 283 +- scm/fret-diagrams.scm | 128 +- scm/graphviz.scm | 17 +- scm/guile-debugger.scm | 90 + scm/harp-pedals.scm | 148 +- scm/kpathsea.scm | 48 - scm/layout-beam.scm | 33 +- scm/layout-page-dump.scm | 147 - scm/layout-page-layout.scm | 478 - scm/layout-slur.scm | 19 +- scm/lily-library.scm | 534 +- scm/lily-sort.scm | 116 + scm/lily.scm | 363 +- scm/ly-syntax-constructors.scm | 151 +- scm/markup.scm | 416 +- scm/memory-trace.scm | 16 +- scm/midi.scm | 462 +- scm/modal-transforms.scm | 239 + scm/music-functions.scm | 758 +- scm/output-lib.scm | 1022 +- scm/output-ps.scm | 167 +- scm/output-socket.scm | 162 +- scm/output-svg.scm | 815 +- scm/page.scm | 221 +- scm/paper-system.scm | 120 +- scm/paper.scm | 177 +- scm/parser-clef.scm | 102 +- scm/parser-ly-from-scheme.scm | 29 +- scm/part-combiner.scm | 222 +- scm/predefined-fretboards.scm | 30 +- scm/ps-to-png.scm | 38 +- scm/safe-lily.scm | 21 +- scm/script.scm | 611 +- scm/song-util.scm | 66 +- scm/song.scm | 93 +- scm/standalone.scm | 19 +- scm/stencil.scm | 538 +- scm/tablature.scm | 377 + scm/time-signature-settings.scm | 391 + scm/titling.scm | 36 +- scm/to-xml.scm | 23 +- scm/translation-functions.scm | 767 +- scm/x11-color.scm | 17 +- scripts/abc2ly.py | 237 +- scripts/auxiliar/GNUmakefile | 2 + scripts/auxiliar/build-coverage.sh | 8 +- scripts/auxiliar/build-profile.sh | 14 +- scripts/auxiliar/cg-section.sh | 73 + scripts/auxiliar/check_texi_refs.py | 5 +- scripts/auxiliar/check_translation.py | 111 +- scripts/auxiliar/doc-section.sh | 97 + scripts/auxiliar/fixcc.py | 50 +- scripts/auxiliar/lily-git.tcl | 440 + scripts/auxiliar/makelsr.py | 351 +- scripts/auxiliar/node-menuify.py | 91 + scripts/auxiliar/ref_check.py | 188 + scripts/auxiliar/ref_check.tely | 70 + scripts/auxiliar/split-texidocs.py | 20 + scripts/auxiliar/strip-whitespace.py | 16 + scripts/auxiliar/tely-gettext.py | 20 +- scripts/auxiliar/texi-langutils.py | 58 +- scripts/auxiliar/translations-status.py | 580 +- scripts/auxiliar/update-patch-version.sh | 24 + scripts/auxiliar/update-with-convert-ly.sh | 29 + scripts/auxiliar/yyout2grammar.py | 104 - scripts/build/GNUmakefile | 4 + scripts/build/bib2html.py | 76 - scripts/build/bib2texi.py | 81 + scripts/build/create-version-itexi.py | 74 + scripts/build/create-weblinks-itexi.py | 511 + scripts/build/extract_texi_filenames.py | 51 +- scripts/build/gen-emmentaler-scripts.py | 12 +- scripts/build/grand-replace.py | 38 +- scripts/build/html-gettext.py | 126 - scripts/build/html-to-texi.py | 94 + scripts/build/lilypond-words.py | 35 +- scripts/build/lys-to-tely.py | 29 +- scripts/build/mf-to-table.py | 33 +- scripts/build/output-distance.py | 274 +- scripts/build/pytt.py | 14 +- scripts/build/texi-gettext.py | 77 - scripts/build/website-known-missing-files.txt | 39 + scripts/build/website_post.py | 215 + scripts/build/www_post.py | 24 +- scripts/build/yyout2grammar.py | 162 + scripts/convert-ly.py | 65 +- scripts/etf2ly.py | 17 +- scripts/lilymidi.py | 20 +- scripts/lilypond-book.py | 1704 +- scripts/lilypond-invoke-editor.scm | 24 +- scripts/lilysong.py | 19 +- scripts/midi2ly.py | 906 +- scripts/musicxml2ly.py | 544 +- stepmake/README | 7 +- stepmake/aclocal.m4 | 118 +- stepmake/autogen.sh | 25 +- stepmake/bin/config.guess | 1015 +- stepmake/bin/config.sub | 516 +- stepmake/stepmake/documentation-vars.make | 5 +- stepmake/stepmake/generic-rules.make | 2 + stepmake/stepmake/generic-targets.make | 59 +- stepmake/stepmake/generic-vars.make | 9 +- stepmake/stepmake/install-targets.make | 2 +- stepmake/stepmake/makedir-vars.make | 2 +- stepmake/stepmake/metafont-rules.make | 4 + stepmake/stepmake/omf-targets.make | 4 +- stepmake/stepmake/script-vars.make | 2 +- stepmake/stepmake/texinfo-rules.make | 67 +- stepmake/stepmake/texinfo-targets.make | 15 +- stepmake/stepmake/texinfo-vars.make | 26 +- stepmake/stepmake/topdocs-targets.make | 2 +- stepmake/stepmake/topdocs-vars.make | 6 +- stepmake/stepmake/toplevel-targets.make | 51 +- tex/GNUmakefile | 2 +- tex/texinfo.tex | 315 +- tex/txi-hu.tex | 87 + tex/txi-it.tex | 70 + vim/lilypond-ftdetect.vim | 2 +- vim/lilypond-ftplugin.vim | 13 +- vim/lilypond-indent.vim | 17 +- vim/lilypond-syntax.vim | 14 +- 4602 files changed, 613092 insertions(+), 300731 deletions(-) create mode 100644 .mailmap create mode 100644 COPYING.FDL delete mode 100644 Documentation/bibliography/GNUmakefile delete mode 100644 Documentation/bibliography/colorado.bib delete mode 100644 Documentation/bibliography/computer-notation.bib delete mode 100644 Documentation/bibliography/engraving.bib delete mode 100644 Documentation/bibliography/html-long.bst delete mode 100644 Documentation/bibliography/index.html.in create mode 100644 Documentation/changes.tely create mode 100644 Documentation/contributor.texi create mode 100644 Documentation/contributor/GNUmakefile create mode 100644 Documentation/contributor/administration.itexi create mode 100644 Documentation/contributor/build-notes.itexi create mode 100644 Documentation/contributor/compiling.itexi create mode 100644 Documentation/contributor/doc-translation-list.itexi create mode 100644 Documentation/contributor/doc-work.itexi create mode 100644 Documentation/contributor/introduction.itexi create mode 100644 Documentation/contributor/issues.itexi create mode 100644 Documentation/contributor/lsr-work.itexi create mode 100644 Documentation/contributor/programming-work.itexi create mode 100644 Documentation/contributor/quick-start.itexi create mode 100644 Documentation/contributor/regressions.itexi create mode 100644 Documentation/contributor/release-work.itexi create mode 100644 Documentation/contributor/source-code.itexi create mode 100644 Documentation/contributor/website-work.itexi create mode 100644 Documentation/cs/GNUmakefile create mode 100644 Documentation/cs/download.itexi create mode 100644 Documentation/cs/essay/GNUmakefile create mode 100644 Documentation/cs/essay/literature.itely create mode 100755 Documentation/cs/learning.tely create mode 100644 Documentation/cs/learning/GNUmakefile create mode 100644 Documentation/cs/learning/common-notation.itely create mode 100644 Documentation/cs/learning/fundamental.itely create mode 100644 Documentation/cs/learning/preface.itely create mode 100644 Documentation/cs/learning/templates.itely create mode 100644 Documentation/cs/learning/tutorial.itely create mode 100644 Documentation/cs/learning/tweaks.itely create mode 100755 Documentation/cs/macros.itexi create mode 100644 Documentation/cs/texidocs/GNUmakefile create mode 100644 Documentation/cs/translations.itexi create mode 100644 Documentation/cs/usage/GNUmakefile create mode 100644 Documentation/cs/usage/external.itely create mode 100644 Documentation/cs/usage/lilypond-book.itely create mode 100644 Documentation/cs/usage/running.itely create mode 100644 Documentation/cs/usage/setup.itely create mode 100644 Documentation/cs/usage/suggestions.itely create mode 100644 Documentation/cs/usage/updating.itely create mode 100644 Documentation/cs/web.texi create mode 100644 Documentation/cs/web/GNUmakefile create mode 100644 Documentation/cs/web/community.itexi create mode 100755 Documentation/cs/web/download.itexi create mode 100644 Documentation/cs/web/introduction.itexi create mode 100755 Documentation/cs/web/manuals.itexi create mode 100644 Documentation/cs/web/news-front.itexi create mode 100644 Documentation/css/GNUmakefile rename Documentation/{ => css}/lilypond-ie-fixes.css (100%) create mode 100644 Documentation/css/lilypond-manuals.css create mode 100644 Documentation/css/lilypond-website.css create mode 100644 Documentation/de/essay.tely create mode 100644 Documentation/de/essay/GNUmakefile create mode 100644 Documentation/de/essay/engraving.itely create mode 100644 Documentation/de/essay/literature.itely create mode 100644 Documentation/de/extending.tely create mode 100644 Documentation/de/extending/GNUmakefile create mode 100644 Documentation/de/extending/programming-interface.itely create mode 100644 Documentation/de/extending/scheme-tutorial.itely create mode 100644 Documentation/de/included/GNUmakefile create mode 100644 Documentation/de/included/authors.itexi create mode 100644 Documentation/de/included/generating-output.itexi create mode 100644 Documentation/de/included/helpus.itexi delete mode 100644 Documentation/de/index.html.in create mode 100644 Documentation/de/learning.tely create mode 100644 Documentation/de/learning/GNUmakefile create mode 100644 Documentation/de/learning/common-notation.itely create mode 100644 Documentation/de/learning/fundamental.itely create mode 100644 Documentation/de/learning/preface.itely create mode 100644 Documentation/de/learning/templates.itely create mode 100644 Documentation/de/learning/tutorial.itely create mode 100644 Documentation/de/learning/tweaks.itely create mode 100644 Documentation/de/macros.itexi create mode 100644 Documentation/de/notation.tely create mode 100644 Documentation/de/notation/GNUmakefile create mode 100644 Documentation/de/notation/ancient.itely create mode 100644 Documentation/de/notation/changing-defaults.itely create mode 100644 Documentation/de/notation/cheatsheet.itely create mode 100644 Documentation/de/notation/chords.itely create mode 100644 Documentation/de/notation/contemporary.itely create mode 100644 Documentation/de/notation/editorial.itely create mode 100644 Documentation/de/notation/expressive.itely create mode 100644 Documentation/de/notation/fretted-strings.itely create mode 100644 Documentation/de/notation/input.itely create mode 100644 Documentation/de/notation/keyboards.itely create mode 100644 Documentation/de/notation/notation-appendices.itely create mode 100644 Documentation/de/notation/notation.itely create mode 100644 Documentation/de/notation/percussion.itely create mode 100644 Documentation/de/notation/pitches.itely create mode 100644 Documentation/de/notation/repeats.itely create mode 100644 Documentation/de/notation/rhythms.itely create mode 100644 Documentation/de/notation/simultaneous.itely create mode 100644 Documentation/de/notation/spacing.itely create mode 100644 Documentation/de/notation/specialist.itely create mode 100644 Documentation/de/notation/staff.itely create mode 100644 Documentation/de/notation/text.itely create mode 100644 Documentation/de/notation/unfretted-strings.itely create mode 100644 Documentation/de/notation/vocal.itely create mode 100644 Documentation/de/notation/wind.itely create mode 100644 Documentation/de/notation/world.itely create mode 100644 Documentation/de/search-box.ihtml create mode 100644 Documentation/de/texidocs/GNUmakefile create mode 100644 Documentation/de/texidocs/accordion-discant-symbols.texidoc create mode 100644 Documentation/de/texidocs/adding-ambitus-per-voice.texidoc create mode 100644 Documentation/de/texidocs/adding-bar-lines-to-chordnames-context.texidoc create mode 100644 Documentation/de/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc create mode 100644 Documentation/de/texidocs/adding-volta-brackets-to-additional-staves.texidoc create mode 100644 Documentation/de/texidocs/additional-voices-to-avoid-collisions.texidoc create mode 100644 Documentation/de/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc create mode 100644 Documentation/de/texidocs/aligning-bar-numbers.texidoc create mode 100644 Documentation/de/texidocs/aligning-marks-with-various-notation-objects.texidoc create mode 100644 Documentation/de/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc create mode 100644 Documentation/de/texidocs/ambitus-with-multiple-voices.texidoc create mode 100644 Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc create mode 100644 Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc create mode 100644 Documentation/de/texidocs/anglican-psalm-template.texidoc create mode 100644 Documentation/de/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc create mode 100644 Documentation/de/texidocs/arabic-improvisation.texidoc create mode 100644 Documentation/de/texidocs/beam-endings-in-score-context.texidoc create mode 100644 Documentation/de/texidocs/beam-grouping-in-7-8-time.texidoc create mode 100644 Documentation/de/texidocs/beams-across-line-breaks.texidoc create mode 100644 Documentation/de/texidocs/changing--flageolet-mark-size.texidoc create mode 100644 Documentation/de/texidocs/changing-beam-knee-gap.texidoc create mode 100644 Documentation/de/texidocs/changing-chord-separator.texidoc create mode 100644 Documentation/de/texidocs/changing-form-of-multi-measure-rests.texidoc create mode 100644 Documentation/de/texidocs/changing-partcombine-texts.texidoc create mode 100644 Documentation/de/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc create mode 100644 Documentation/de/texidocs/changing-the-breath-mark-symbol.texidoc create mode 100644 Documentation/de/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc create mode 100644 Documentation/de/texidocs/changing-the-size-of-woodwind-diagrams.texidoc create mode 100644 Documentation/de/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc create mode 100644 Documentation/de/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc create mode 100644 Documentation/de/texidocs/changing-the-tuplet-number.texidoc create mode 100644 Documentation/de/texidocs/chant-or-psalms-notation.texidoc create mode 100644 Documentation/de/texidocs/chord-glissando-in-tablature.texidoc create mode 100644 Documentation/de/texidocs/chord-name-exceptions.texidoc create mode 100644 Documentation/de/texidocs/chord-name-major7.texidoc create mode 100644 Documentation/de/texidocs/chordchanges-for-fretboards.texidoc create mode 100644 Documentation/de/texidocs/combining-two-parts-on-the-same-staff.texidoc create mode 100644 Documentation/de/texidocs/compound-time-signatures.texidoc create mode 100644 Documentation/de/texidocs/conducting-signs,-measure-grouping-signs.texidoc create mode 100644 Documentation/de/texidocs/contemporary-glissando.texidoc create mode 100644 Documentation/de/texidocs/controlling-the-placement-of-chord-fingerings.texidoc create mode 100644 Documentation/de/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc create mode 100644 Documentation/de/texidocs/creating-a-delayed-turn.texidoc create mode 100644 Documentation/de/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc create mode 100644 Documentation/de/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc create mode 100644 Documentation/de/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc create mode 100644 Documentation/de/texidocs/creating-metronome-marks-in-markup-mode.texidoc create mode 100644 Documentation/de/texidocs/customizing-fretboard-fret-diagrams.texidoc create mode 100644 Documentation/de/texidocs/customizing-markup-fret-diagrams.texidoc create mode 100644 Documentation/de/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc create mode 100644 Documentation/de/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc create mode 100644 Documentation/de/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc create mode 100644 Documentation/de/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc create mode 100644 Documentation/de/texidocs/dynamics-custom-text-spanner-postfix.texidoc create mode 100644 Documentation/de/texidocs/dynamics-text-spanner-postfix.texidoc create mode 100644 Documentation/de/texidocs/engraving-ties-manually.texidoc create mode 100644 Documentation/de/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc create mode 100644 Documentation/de/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc create mode 100644 Documentation/de/texidocs/flat-flags-and-beam-nibs.texidoc create mode 100644 Documentation/de/texidocs/forcing-horizontal-shift-of-notes.texidoc create mode 100644 Documentation/de/texidocs/formatting-lyrics-syllables.texidoc create mode 100644 Documentation/de/texidocs/fretboards-alternate-tables.texidoc create mode 100644 Documentation/de/texidocs/fretted-string-harmonics-in-tablature.texidoc create mode 100644 Documentation/de/texidocs/graphical-and-text-woodwind-diagrams.texidoc create mode 100644 Documentation/de/texidocs/grid-lines--changing-their-appearance.texidoc create mode 100644 Documentation/de/texidocs/grouping-beats.texidoc create mode 100644 Documentation/de/texidocs/guitar-strum-rhythms.texidoc create mode 100644 Documentation/de/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc create mode 100644 Documentation/de/texidocs/hymn-template.texidoc create mode 100644 Documentation/de/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc create mode 100644 Documentation/de/texidocs/inserting-a-caesura.texidoc create mode 100644 Documentation/de/texidocs/isolated-percent-repeats.texidoc create mode 100644 Documentation/de/texidocs/jazz-combo-template.texidoc create mode 100644 Documentation/de/texidocs/lyrics-alignment.texidoc create mode 100644 Documentation/de/texidocs/lyrics-old-spacing-settings.texidoc create mode 100644 Documentation/de/texidocs/makam-example.texidoc create mode 100644 Documentation/de/texidocs/making-slurs-with-complex-dash-structure.texidoc create mode 100644 Documentation/de/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc create mode 100644 Documentation/de/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc create mode 100644 Documentation/de/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc create mode 100644 Documentation/de/texidocs/multi-measure-rest-markup.texidoc create mode 100644 Documentation/de/texidocs/nesting-staves.texidoc create mode 100644 Documentation/de/texidocs/non-default-tuplet-numbers.texidoc create mode 100644 Documentation/de/texidocs/non-traditional-key-signatures.texidoc create mode 100644 Documentation/de/texidocs/open-string-harmonics-in-tablature.texidoc create mode 100644 Documentation/de/texidocs/orchestra,-choir-and-piano-template.texidoc create mode 100644 Documentation/de/texidocs/ottava-text.texidoc create mode 100644 Documentation/de/texidocs/partcombine-and-autobeamoff.texidoc create mode 100644 Documentation/de/texidocs/percent-repeat-count-visibility.texidoc create mode 100644 Documentation/de/texidocs/percent-repeat-counter.texidoc create mode 100644 Documentation/de/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc create mode 100644 Documentation/de/texidocs/piano-template-simple.texidoc create mode 100644 Documentation/de/texidocs/piano-template-with-centered-dynamics.texidoc create mode 100644 Documentation/de/texidocs/piano-template-with-centered-lyrics.texidoc create mode 100644 Documentation/de/texidocs/piano-template-with-melody-and-lyrics.texidoc create mode 100644 Documentation/de/texidocs/placement-of-right-hand-fingerings.texidoc create mode 100644 Documentation/de/texidocs/polyphony-in-tablature.texidoc create mode 100644 Documentation/de/texidocs/positioning-grace-notes-with-floating-space.texidoc create mode 100644 Documentation/de/texidocs/positioning-multi-measure-rests.texidoc create mode 100644 Documentation/de/texidocs/positioning-text-markups-inside-slurs.texidoc create mode 100644 Documentation/de/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc create mode 100644 Documentation/de/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc create mode 100644 Documentation/de/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc create mode 100644 Documentation/de/texidocs/printing-bar-numbers-at-regular-intervals.texidoc create mode 100644 Documentation/de/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc create mode 100644 Documentation/de/texidocs/printing-hairpins-using-al-niente-notation.texidoc create mode 100644 Documentation/de/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc create mode 100644 Documentation/de/texidocs/printing-marks-on-every-staff.texidoc create mode 100644 Documentation/de/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc create mode 100644 Documentation/de/texidocs/printing-the-bar-number-for-the-first-measure.texidoc create mode 100644 Documentation/de/texidocs/quoting-another-voice-with-transposition.texidoc create mode 100644 Documentation/de/texidocs/quoting-another-voice.texidoc create mode 100644 Documentation/de/texidocs/redefining-grace-note-global-defaults.texidoc create mode 100644 Documentation/de/texidocs/removing-bar-numbers-from-a-score.texidoc create mode 100644 Documentation/de/texidocs/removing-the-first-empty-line.texidoc create mode 100644 Documentation/de/texidocs/rest-styles.texidoc create mode 100644 Documentation/de/texidocs/reverting-default-beam-endings.texidoc create mode 100644 Documentation/de/texidocs/satb-choir-template---four-staves.texidoc create mode 100644 Documentation/de/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc create mode 100644 Documentation/de/texidocs/setting-the-minimum-length-of-hairpins.texidoc create mode 100644 Documentation/de/texidocs/shortening-volta-brackets.texidoc create mode 100644 Documentation/de/texidocs/showing-chords-at-changes.texidoc create mode 100644 Documentation/de/texidocs/simple-lead-sheet.texidoc create mode 100644 Documentation/de/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc create mode 100644 Documentation/de/texidocs/single-staff-template-with-notes-and-chords.texidoc create mode 100644 Documentation/de/texidocs/single-staff-template-with-notes-and-lyrics.texidoc create mode 100644 Documentation/de/texidocs/single-staff-template-with-only-notes.texidoc create mode 100644 Documentation/de/texidocs/slides-in-tablature.texidoc create mode 100644 Documentation/de/texidocs/snap-pizzicato-bartok-pizzicato.texidoc create mode 100644 Documentation/de/texidocs/specifying-context-with-beatgrouping.texidoc create mode 100644 Documentation/de/texidocs/stand-alone-two-column-markup.texidoc create mode 100644 Documentation/de/texidocs/stem-and-beam-behavior-in-tablature.texidoc create mode 100644 Documentation/de/texidocs/string-quartet-template-simple.texidoc create mode 100644 Documentation/de/texidocs/string-quartet-template-with-separate-parts.texidoc create mode 100644 Documentation/de/texidocs/sub-dividing-beams.texidoc create mode 100644 Documentation/de/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc create mode 100644 Documentation/de/texidocs/tweaking-clef-properties.texidoc create mode 100644 Documentation/de/texidocs/tweaking-grace-layout-within-music.texidoc create mode 100644 Documentation/de/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc create mode 100644 Documentation/de/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc create mode 100644 Documentation/de/texidocs/using-beatlength-and-beatgrouping.texidoc create mode 100644 Documentation/de/texidocs/using-double-slurs-for-legato-chords.texidoc create mode 100644 Documentation/de/texidocs/using-ties-with-arpeggios.texidoc create mode 100644 Documentation/de/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc create mode 100644 Documentation/de/texidocs/vertically-aligning-ossias-and-lyrics.texidoc create mode 100644 Documentation/de/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc create mode 100644 Documentation/de/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc create mode 100644 Documentation/de/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc create mode 100644 Documentation/de/texidocs/vocal-ensemble-template.texidoc create mode 100644 Documentation/de/texidocs/volta-below-chords.texidoc create mode 100644 Documentation/de/texidocs/woodwind-diagrams-key-lists.texidoc create mode 100644 Documentation/de/texidocs/woodwind-diagrams-listing.texidoc delete mode 100644 Documentation/de/translations.html.in create mode 100644 Documentation/de/translations.itexi delete mode 100644 Documentation/de/translations.template.html.in create mode 100644 Documentation/de/usage.tely create mode 100644 Documentation/de/usage/GNUmakefile create mode 100644 Documentation/de/usage/external.itely create mode 100644 Documentation/de/usage/lilypond-book.itely create mode 100644 Documentation/de/usage/running.itely create mode 100644 Documentation/de/usage/setup.itely create mode 100644 Documentation/de/usage/suggestions.itely create mode 100644 Documentation/de/usage/updating.itely delete mode 100644 Documentation/de/user/GNUmakefile delete mode 100644 Documentation/de/user/ancient.itely delete mode 100644 Documentation/de/user/changing-defaults.itely delete mode 100644 Documentation/de/user/cheatsheet.itely delete mode 100644 Documentation/de/user/chords.itely delete mode 100644 Documentation/de/user/converters.itely delete mode 100644 Documentation/de/user/dedication.itely delete mode 100644 Documentation/de/user/editorial.itely delete mode 100644 Documentation/de/user/expressive.itely delete mode 100644 Documentation/de/user/fretted-strings.itely delete mode 100644 Documentation/de/user/fundamental.itely delete mode 100644 Documentation/de/user/input.itely delete mode 100644 Documentation/de/user/install.itely delete mode 100644 Documentation/de/user/introduction.itely delete mode 100644 Documentation/de/user/keyboards.itely delete mode 100644 Documentation/de/user/lilypond-book.itely delete mode 100644 Documentation/de/user/lilypond-learning.tely delete mode 100644 Documentation/de/user/lilypond-program.tely delete mode 100644 Documentation/de/user/lilypond.tely delete mode 100644 Documentation/de/user/literature.itely delete mode 100644 Documentation/de/user/macros.itexi delete mode 100644 Documentation/de/user/notation-appendices.itely delete mode 100644 Documentation/de/user/notation.itely delete mode 100644 Documentation/de/user/percussion.itely delete mode 100644 Documentation/de/user/pitches.itely delete mode 100644 Documentation/de/user/preface.itely delete mode 100644 Documentation/de/user/programming-interface.itely delete mode 100644 Documentation/de/user/repeats.itely delete mode 100644 Documentation/de/user/rhythms.itely delete mode 100644 Documentation/de/user/running.itely delete mode 100644 Documentation/de/user/scheme-tutorial.itely delete mode 100644 Documentation/de/user/setup.itely delete mode 100644 Documentation/de/user/simultaneous.itely delete mode 100644 Documentation/de/user/spacing.itely delete mode 100644 Documentation/de/user/specialist.itely delete mode 100644 Documentation/de/user/staff.itely delete mode 100644 Documentation/de/user/templates.itely delete mode 100644 Documentation/de/user/text.itely delete mode 100644 Documentation/de/user/tutorial.itely delete mode 100644 Documentation/de/user/tweaks.itely delete mode 100644 Documentation/de/user/unfretted-strings.itely delete mode 100644 Documentation/de/user/vocal.itely delete mode 100644 Documentation/de/user/wind.itely delete mode 100644 Documentation/de/user/working.itely delete mode 100644 Documentation/de/user/world.itely create mode 100644 Documentation/de/web.texi create mode 100644 Documentation/de/web/GNUmakefile create mode 100644 Documentation/de/web/community.itexi create mode 100644 Documentation/de/web/download.itexi create mode 100644 Documentation/de/web/introduction.itexi create mode 100644 Documentation/de/web/manuals.itexi delete mode 100644 Documentation/devel/GNUmakefile delete mode 100644 Documentation/devel/compiling.itexi delete mode 100644 Documentation/devel/contrib-guide.texi delete mode 100644 Documentation/devel/doc-translation-list.itexi delete mode 100644 Documentation/devel/doc-work.itexi delete mode 100644 Documentation/devel/git-starting.itexi delete mode 100644 Documentation/devel/index.html.in delete mode 100644 Documentation/devel/issues.itexi delete mode 100644 Documentation/devel/lsr-work.itexi delete mode 100644 Documentation/devel/programming-work.itexi delete mode 100644 Documentation/devel/release-work.itexi delete mode 100644 Documentation/devel/website-work.itexi create mode 100644 Documentation/es/changes.tely create mode 100644 Documentation/es/essay.tely create mode 100644 Documentation/es/essay/GNUmakefile create mode 100644 Documentation/es/essay/engraving.itely create mode 100644 Documentation/es/essay/literature.itely create mode 100644 Documentation/es/extending.tely create mode 100644 Documentation/es/extending/GNUmakefile create mode 100644 Documentation/es/extending/programming-interface.itely create mode 100644 Documentation/es/extending/scheme-tutorial.itely create mode 100644 Documentation/es/included/GNUmakefile create mode 100644 Documentation/es/included/generating-output.itexi create mode 100644 Documentation/es/included/helpus.itexi delete mode 100644 Documentation/es/index.html.in create mode 100644 Documentation/es/learning.tely create mode 100644 Documentation/es/learning/GNUmakefile create mode 100644 Documentation/es/learning/common-notation.itely create mode 100644 Documentation/es/learning/fundamental.itely create mode 100644 Documentation/es/learning/preface.itely create mode 100644 Documentation/es/learning/templates.itely create mode 100644 Documentation/es/learning/tutorial.itely create mode 100644 Documentation/es/learning/tweaks.itely create mode 100644 Documentation/es/macros.itexi create mode 100644 Documentation/es/notation.tely create mode 100644 Documentation/es/notation/GNUmakefile create mode 100644 Documentation/es/notation/ancient.itely create mode 100644 Documentation/es/notation/changing-defaults.itely create mode 100644 Documentation/es/notation/cheatsheet.itely create mode 100644 Documentation/es/notation/chords.itely create mode 100644 Documentation/es/notation/contemporary.itely create mode 100644 Documentation/es/notation/editorial.itely create mode 100644 Documentation/es/notation/expressive.itely create mode 100644 Documentation/es/notation/fretted-strings.itely create mode 100644 Documentation/es/notation/input.itely create mode 100644 Documentation/es/notation/keyboards.itely create mode 100644 Documentation/es/notation/notation-appendices.itely create mode 100644 Documentation/es/notation/notation.itely create mode 100644 Documentation/es/notation/percussion.itely create mode 100644 Documentation/es/notation/pitches.itely create mode 100644 Documentation/es/notation/repeats.itely create mode 100644 Documentation/es/notation/rhythms.itely create mode 100644 Documentation/es/notation/simultaneous.itely create mode 100644 Documentation/es/notation/spacing.itely create mode 100644 Documentation/es/notation/specialist.itely create mode 100644 Documentation/es/notation/staff.itely create mode 100644 Documentation/es/notation/text.itely create mode 100644 Documentation/es/notation/unfretted-strings.itely create mode 100644 Documentation/es/notation/vocal.itely create mode 100644 Documentation/es/notation/wind.itely create mode 100644 Documentation/es/notation/world.itely create mode 100644 Documentation/es/search-box.ihtml create mode 100644 Documentation/es/texidocs/GNUmakefile create mode 100644 Documentation/es/texidocs/accordion-discant-symbols.texidoc create mode 100644 Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc create mode 100644 Documentation/es/texidocs/adding-ambitus-per-voice.texidoc create mode 100644 Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc create mode 100644 Documentation/es/texidocs/adding-an-extra-staff.texidoc create mode 100644 Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc rename {input => Documentation/es}/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc (92%) create mode 100644 Documentation/es/texidocs/adding-drum-parts.texidoc create mode 100644 Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc create mode 100644 Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc create mode 100644 Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc create mode 100644 Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc create mode 100644 Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc create mode 100644 Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc create mode 100644 Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc create mode 100644 Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc create mode 100644 Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc create mode 100644 Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc create mode 100644 Documentation/es/texidocs/aligning-bar-numbers.texidoc create mode 100644 Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc create mode 100644 Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc create mode 100644 Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc create mode 100644 Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc rename {input => Documentation/es}/texidocs/analysis-brackets-above-the-staff.texidoc (76%) create mode 100644 Documentation/es/texidocs/ancient-fonts.texidoc create mode 100644 Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc create mode 100644 Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc create mode 100644 Documentation/es/texidocs/ancient-time-signatures.texidoc create mode 100644 Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc create mode 100644 Documentation/es/texidocs/arabic-improvisation.texidoc create mode 100644 Documentation/es/texidocs/asymmetric-slurs.texidoc rename {input => Documentation/es}/texidocs/automatic-beam-subdivisions.texidoc (78%) create mode 100644 Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc create mode 100644 Documentation/es/texidocs/beam-endings-in-score-context.texidoc create mode 100644 Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc create mode 100644 Documentation/es/texidocs/beams-across-line-breaks.texidoc rename {input => Documentation/es}/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc (83%) rename {input => Documentation/es}/texidocs/broken-crescendo-hairpin.texidoc (92%) create mode 100644 Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc create mode 100644 Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc create mode 100644 Documentation/es/texidocs/changing--flageolet-mark-size.texidoc create mode 100644 Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc create mode 100644 Documentation/es/texidocs/changing-beam-knee-gap.texidoc create mode 100644 Documentation/es/texidocs/changing-chord-separator.texidoc create mode 100644 Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc create mode 100644 Documentation/es/texidocs/changing-fret-orientations.texidoc create mode 100644 Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc create mode 100644 Documentation/es/texidocs/changing-partcombine-texts.texidoc create mode 100644 Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc create mode 100644 Documentation/es/texidocs/changing-the-ambitus-gap.texidoc create mode 100644 Documentation/es/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc create mode 100644 Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc create mode 100644 Documentation/es/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc create mode 100644 Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc create mode 100644 Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc create mode 100644 Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc create mode 100644 Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc create mode 100644 Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc create mode 100644 Documentation/es/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc create mode 100644 Documentation/es/texidocs/changing-the-tuplet-number.texidoc rename {input => Documentation/es}/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc (89%) create mode 100644 Documentation/es/texidocs/chant-or-psalms-notation.texidoc create mode 100644 Documentation/es/texidocs/chord-glissando-in-tablature.texidoc create mode 100644 Documentation/es/texidocs/chord-name-exceptions.texidoc create mode 100644 Documentation/es/texidocs/chord-name-major7.texidoc create mode 100644 Documentation/es/texidocs/chordchanges-for-fretboards.texidoc create mode 100644 Documentation/es/texidocs/clip-systems.texidoc create mode 100644 Documentation/es/texidocs/clusters.texidoc create mode 100644 Documentation/es/texidocs/combining-dynamics-with-markup-texts.texidoc create mode 100644 Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc create mode 100644 Documentation/es/texidocs/compound-time-signatures.texidoc create mode 100644 Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc create mode 100644 Documentation/es/texidocs/contemporary-glissando.texidoc create mode 100644 Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc create mode 100644 Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc create mode 100644 Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc create mode 100644 Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc create mode 100644 Documentation/es/texidocs/creating-a-delayed-turn.texidoc rename {input => Documentation/es}/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc (87%) create mode 100644 Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc create mode 100644 Documentation/es/texidocs/creating-blank-staves.texidoc create mode 100644 Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc create mode 100644 Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc create mode 100644 Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc create mode 100644 Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc rename {input => Documentation/es}/texidocs/creating-simultaneous-rehearsal-marks.texidoc (87%) rename {input => Documentation/es}/texidocs/creating-slurs-across-voices.texidoc (83%) rename {input => Documentation/es}/texidocs/creating-text-spanners.texidoc (82%) create mode 100644 Documentation/es/texidocs/cross-staff-tremolos.texidoc create mode 100644 Documentation/es/texidocs/custodes.texidoc create mode 100644 Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc create mode 100644 Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc create mode 100644 Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc create mode 100644 Documentation/es/texidocs/defining-an-engraver-in-scheme-ambitus-engraver.texidoc create mode 100644 Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc create mode 100644 Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc create mode 100644 Documentation/es/texidocs/displaying-complex-chords.texidoc create mode 100644 Documentation/es/texidocs/displaying-grob-ancestry.texidoc create mode 100644 Documentation/es/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc create mode 100644 Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc create mode 100644 Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc create mode 100644 Documentation/es/texidocs/embedding-native-postscript-in-a--markup-block.texidoc create mode 100644 Documentation/es/texidocs/engravers-one-by-one.texidoc create mode 100644 Documentation/es/texidocs/engraving-ties-manually.texidoc create mode 100644 Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc create mode 100644 Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc create mode 100644 Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc create mode 100644 Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc create mode 100644 Documentation/es/texidocs/flamenco-notation.texidoc create mode 100644 Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc create mode 100644 Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc create mode 100644 Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc create mode 100644 Documentation/es/texidocs/fretboards-alternate-tables.texidoc create mode 100644 Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc rename {input => Documentation/es}/texidocs/generating-random-notes.texidoc (84%) create mode 100644 Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc create mode 100644 Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc rename {input => Documentation/es}/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc (83%) create mode 100644 Documentation/es/texidocs/grouping-beats.texidoc create mode 100644 Documentation/es/texidocs/guitar-slides.texidoc create mode 100644 Documentation/es/texidocs/guitar-strum-rhythms.texidoc create mode 100644 Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc create mode 100644 Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc create mode 100644 Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc create mode 100644 Documentation/es/texidocs/hymn-template.texidoc create mode 100644 Documentation/es/texidocs/incipit.texidoc create mode 100644 Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc create mode 100644 Documentation/es/texidocs/inserting-a-caesura.texidoc create mode 100644 Documentation/es/texidocs/isolated-percent-repeats.texidoc create mode 100644 Documentation/es/texidocs/jazz-combo-template.texidoc create mode 100644 Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc create mode 100644 Documentation/es/texidocs/letter-tablature-formatting.texidoc create mode 100644 Documentation/es/texidocs/line-arrows.texidoc create mode 100644 Documentation/es/texidocs/lyrics-alignment.texidoc create mode 100644 Documentation/es/texidocs/makam-example.texidoc create mode 100644 Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc create mode 100644 Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc create mode 100644 Documentation/es/texidocs/measure-counter.texidoc create mode 100644 Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc create mode 100644 Documentation/es/texidocs/modern-tab-text-clef.texidoc create mode 100644 Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc create mode 100644 Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc create mode 100644 Documentation/es/texidocs/moving-slur-positions-vertically.texidoc create mode 100644 Documentation/es/texidocs/multi-measure-rest-markup.texidoc create mode 100644 Documentation/es/texidocs/nesting-staves.texidoc create mode 100644 Documentation/es/texidocs/non-default-tuplet-numbers.texidoc create mode 100644 Documentation/es/texidocs/non-traditional-key-signatures.texidoc create mode 100644 Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc create mode 100644 Documentation/es/texidocs/open-string-harmonics-in-tablature.texidoc create mode 100644 Documentation/es/texidocs/orchestra,-choir-and-piano-template.texidoc create mode 100644 Documentation/es/texidocs/ottava-text.texidoc create mode 100644 Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc create mode 100644 Documentation/es/texidocs/percent-repeat-count-visibility.texidoc create mode 100644 Documentation/es/texidocs/percent-repeat-counter.texidoc create mode 100644 Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc create mode 100644 Documentation/es/texidocs/piano-template-simple.texidoc create mode 100644 Documentation/es/texidocs/piano-template-with-centered-dynamics.texidoc create mode 100644 Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc create mode 100644 Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc create mode 100644 Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc create mode 100644 Documentation/es/texidocs/polyphony-in-tablature.texidoc create mode 100644 Documentation/es/texidocs/positioning-arpeggios.texidoc create mode 100644 Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc create mode 100644 Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc create mode 100644 Documentation/es/texidocs/positioning-multi-measure-rests.texidoc create mode 100644 Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc create mode 100644 Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc create mode 100644 Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc create mode 100644 Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc create mode 100644 Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc create mode 100644 Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc create mode 100644 Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc create mode 100644 Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc create mode 100644 Documentation/es/texidocs/printing-marks-on-every-staff.texidoc create mode 100644 Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc create mode 100644 Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc create mode 100644 Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc create mode 100644 Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc create mode 100644 Documentation/es/texidocs/quoting-another-voice.texidoc create mode 100644 Documentation/es/texidocs/recorder-fingering-chart.texidoc create mode 100644 Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc create mode 100644 Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc create mode 100644 Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc create mode 100644 Documentation/es/texidocs/removing-the-first-empty-line.texidoc create mode 100644 Documentation/es/texidocs/rest-styles.texidoc create mode 100644 Documentation/es/texidocs/reverting-default-beam-endings.texidoc create mode 100644 Documentation/es/texidocs/script-chart.texidoc create mode 100644 Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc create mode 100644 Documentation/es/texidocs/setting-system-separators.texidoc create mode 100644 Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc create mode 100644 Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc create mode 100644 Documentation/es/texidocs/shortening-volta-brackets.texidoc create mode 100644 Documentation/es/texidocs/showing-chords-at-changes.texidoc create mode 100644 Documentation/es/texidocs/simple-lead-sheet.texidoc create mode 100644 Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc rename {input => Documentation/es}/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc (76%) create mode 100644 Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc create mode 100644 Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc create mode 100644 Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc create mode 100644 Documentation/es/texidocs/slides-in-tablature.texidoc create mode 100644 Documentation/es/texidocs/snap-pizzicato-bartok-pizzicato.texidoc create mode 100644 Documentation/es/texidocs/stand-alone-two-column-markup.texidoc create mode 100644 Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc create mode 100644 Documentation/es/texidocs/string-quartet-template-simple.texidoc create mode 100644 Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc create mode 100644 Documentation/es/texidocs/subdividing-beams.texidoc create mode 100644 Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc rename {input => Documentation/es}/texidocs/transcription-of-ancient-music-with-incipit.texidoc (85%) create mode 100644 Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc create mode 100644 Documentation/es/texidocs/tweaking-clef-properties.texidoc create mode 100644 Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc create mode 100644 Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc create mode 100644 Documentation/es/texidocs/using-alternative-flag-styles.texidoc create mode 100644 Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc create mode 100644 Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc create mode 100644 Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc create mode 100644 Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc create mode 100644 Documentation/es/texidocs/using-the-whiteout-property.texidoc create mode 100644 Documentation/es/texidocs/using-ties-with-arpeggios.texidoc create mode 100644 Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc rename {input => Documentation/es}/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc (84%) create mode 100644 Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc create mode 100644 Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc create mode 100644 Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc create mode 100644 Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc create mode 100644 Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc create mode 100644 Documentation/es/texidocs/vocal-ensemble-template.texidoc create mode 100644 Documentation/es/texidocs/volta-below-chords.texidoc create mode 100644 Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc create mode 100644 Documentation/es/texidocs/woodwind-diagrams-listing.texidoc delete mode 100644 Documentation/es/topdocs/GNUmakefile delete mode 100644 Documentation/es/topdocs/NEWS.tely delete mode 100644 Documentation/es/translations.html.in create mode 100644 Documentation/es/translations.itexi delete mode 100644 Documentation/es/translations.template.html.in create mode 100644 Documentation/es/usage.tely create mode 100644 Documentation/es/usage/GNUmakefile create mode 100644 Documentation/es/usage/external.itely create mode 100644 Documentation/es/usage/lilypond-book.itely create mode 100644 Documentation/es/usage/running.itely create mode 100644 Documentation/es/usage/suggestions.itely create mode 100644 Documentation/es/usage/updating.itely delete mode 100644 Documentation/es/user/GNUmakefile delete mode 100644 Documentation/es/user/ancient.itely delete mode 100644 Documentation/es/user/changing-defaults.itely delete mode 100644 Documentation/es/user/cheatsheet.itely delete mode 100644 Documentation/es/user/chords.itely delete mode 100644 Documentation/es/user/converters.itely delete mode 100644 Documentation/es/user/dedication.itely delete mode 100644 Documentation/es/user/editorial.itely delete mode 100644 Documentation/es/user/expressive.itely delete mode 100644 Documentation/es/user/fretted-strings.itely delete mode 100644 Documentation/es/user/fundamental.itely delete mode 100644 Documentation/es/user/input.itely delete mode 100644 Documentation/es/user/install.itely delete mode 100644 Documentation/es/user/introduction.itely delete mode 100644 Documentation/es/user/keyboards.itely delete mode 100644 Documentation/es/user/lilypond-book.itely delete mode 100644 Documentation/es/user/lilypond-learning.tely delete mode 100644 Documentation/es/user/lilypond-program.tely delete mode 100644 Documentation/es/user/lilypond.tely delete mode 100644 Documentation/es/user/literature.itely delete mode 100644 Documentation/es/user/macros.itexi delete mode 100644 Documentation/es/user/notation-appendices.itely delete mode 100644 Documentation/es/user/notation.itely delete mode 100644 Documentation/es/user/percussion.itely delete mode 100644 Documentation/es/user/pitches.itely delete mode 100644 Documentation/es/user/preface.itely delete mode 100644 Documentation/es/user/programming-interface.itely delete mode 100644 Documentation/es/user/repeats.itely delete mode 100644 Documentation/es/user/rhythms.itely delete mode 100644 Documentation/es/user/running.itely delete mode 100644 Documentation/es/user/scheme-tutorial.itely delete mode 100644 Documentation/es/user/setup.itely delete mode 100644 Documentation/es/user/simultaneous.itely delete mode 100644 Documentation/es/user/spacing.itely delete mode 100644 Documentation/es/user/specialist.itely delete mode 100644 Documentation/es/user/staff.itely delete mode 100644 Documentation/es/user/templates.itely delete mode 100644 Documentation/es/user/text.itely delete mode 100644 Documentation/es/user/tutorial.itely delete mode 100644 Documentation/es/user/tweaks.itely delete mode 100644 Documentation/es/user/unfretted-strings.itely delete mode 100644 Documentation/es/user/vocal.itely delete mode 100644 Documentation/es/user/wind.itely delete mode 100644 Documentation/es/user/working.itely delete mode 100644 Documentation/es/user/world.itely create mode 100644 Documentation/es/web.texi create mode 100644 Documentation/es/web/GNUmakefile create mode 100644 Documentation/es/web/community.itexi create mode 100644 Documentation/es/web/download.itexi create mode 100644 Documentation/es/web/introduction.itexi create mode 100644 Documentation/es/web/manuals.itexi create mode 100644 Documentation/es/web/news-front.itexi create mode 100644 Documentation/es/web/news.itexi create mode 100644 Documentation/essay.tely create mode 100644 Documentation/essay/GNUmakefile create mode 100644 Documentation/essay/colorado.bib create mode 100644 Documentation/essay/computer-notation.bib create mode 100644 Documentation/essay/engraving.itely create mode 100644 Documentation/essay/engravingbib.bib create mode 100644 Documentation/essay/literature.itely create mode 100644 Documentation/extending.tely create mode 100644 Documentation/extending/GNUmakefile create mode 100644 Documentation/extending/programming-interface.itely create mode 100644 Documentation/extending/scheme-tutorial.itely create mode 100644 Documentation/fdl.itexi create mode 100644 Documentation/fr/essay.tely create mode 100644 Documentation/fr/essay/GNUmakefile create mode 100644 Documentation/fr/essay/engraving.itely create mode 100644 Documentation/fr/essay/literature.itely create mode 100644 Documentation/fr/extending/GNUmakefile create mode 100644 Documentation/fr/extending/programming-interface.itely create mode 100644 Documentation/fr/included/GNUmakefile create mode 100644 Documentation/fr/included/generating-output.itexi create mode 100644 Documentation/fr/included/helpus.itexi delete mode 100644 Documentation/fr/index.html.in create mode 100644 Documentation/fr/learning.tely create mode 100644 Documentation/fr/learning/GNUmakefile create mode 100644 Documentation/fr/learning/common-notation.itely create mode 100644 Documentation/fr/learning/fundamental.itely create mode 100644 Documentation/fr/learning/preface.itely create mode 100644 Documentation/fr/learning/templates.itely create mode 100644 Documentation/fr/learning/tutorial.itely create mode 100644 Documentation/fr/learning/tweaks.itely create mode 100644 Documentation/fr/macros.itexi create mode 100644 Documentation/fr/notation.tely create mode 100644 Documentation/fr/notation/GNUmakefile create mode 100644 Documentation/fr/notation/ancient.itely create mode 100644 Documentation/fr/notation/changing-defaults.itely create mode 100644 Documentation/fr/notation/cheatsheet.itely create mode 100644 Documentation/fr/notation/chords.itely create mode 100644 Documentation/fr/notation/editorial.itely create mode 100644 Documentation/fr/notation/expressive.itely create mode 100644 Documentation/fr/notation/fretted-strings.itely create mode 100644 Documentation/fr/notation/input.itely create mode 100644 Documentation/fr/notation/keyboards.itely create mode 100644 Documentation/fr/notation/notation-appendices.itely create mode 100644 Documentation/fr/notation/notation.itely create mode 100644 Documentation/fr/notation/percussion.itely create mode 100644 Documentation/fr/notation/pitches.itely create mode 100644 Documentation/fr/notation/repeats.itely create mode 100644 Documentation/fr/notation/rhythms.itely create mode 100644 Documentation/fr/notation/simultaneous.itely create mode 100644 Documentation/fr/notation/spacing.itely create mode 100644 Documentation/fr/notation/specialist.itely create mode 100644 Documentation/fr/notation/staff.itely create mode 100644 Documentation/fr/notation/text.itely create mode 100644 Documentation/fr/notation/unfretted-strings.itely create mode 100644 Documentation/fr/notation/vocal.itely create mode 100644 Documentation/fr/notation/wind.itely create mode 100644 Documentation/fr/notation/world.itely create mode 100644 Documentation/fr/search-box.ihtml create mode 100644 Documentation/fr/texidocs/GNUmakefile create mode 100644 Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc create mode 100644 Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc create mode 100644 Documentation/fr/texidocs/adding-drum-parts.texidoc create mode 100644 Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc create mode 100644 Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc create mode 100644 Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc create mode 100644 Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc create mode 100644 Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc create mode 100644 Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc create mode 100644 Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc create mode 100644 Documentation/fr/texidocs/aligning-bar-numbers.texidoc create mode 100644 Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc create mode 100644 Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc create mode 100644 Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc create mode 100644 Documentation/fr/texidocs/ancient-fonts.texidoc create mode 100644 Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc create mode 100644 Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc create mode 100644 Documentation/fr/texidocs/anglican-psalm-template.texidoc create mode 100644 Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc create mode 100644 Documentation/fr/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc create mode 100644 Documentation/fr/texidocs/beam-endings-in-score-context.texidoc create mode 100644 Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc create mode 100644 Documentation/fr/texidocs/beams-across-line-breaks.texidoc create mode 100644 Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc create mode 100644 Documentation/fr/texidocs/changing-beam-knee-gap.texidoc create mode 100644 Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc create mode 100644 Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc create mode 100644 Documentation/fr/texidocs/changing-partcombine-texts.texidoc create mode 100644 Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc create mode 100644 Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc create mode 100644 Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc create mode 100644 Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc create mode 100644 Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc create mode 100644 Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc create mode 100644 Documentation/fr/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc create mode 100644 Documentation/fr/texidocs/changing-the-tuplet-number.texidoc create mode 100644 Documentation/fr/texidocs/chant-or-psalms-notation.texidoc create mode 100644 Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc create mode 100644 Documentation/fr/texidocs/compound-time-signatures.texidoc create mode 100644 Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc create mode 100644 Documentation/fr/texidocs/contemporary-glissando.texidoc create mode 100644 Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc create mode 100644 Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc create mode 100644 Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc create mode 100644 Documentation/fr/texidocs/creating-a-delayed-turn.texidoc create mode 100644 Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc create mode 100644 Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc create mode 100644 Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc create mode 100644 Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc create mode 100644 Documentation/fr/texidocs/cross-staff-tremolos.texidoc create mode 100644 Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc create mode 100644 Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc create mode 100644 Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc create mode 100644 Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc create mode 100644 Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc create mode 100644 Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc create mode 100644 Documentation/fr/texidocs/engraving-ties-manually.texidoc create mode 100644 Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc create mode 100644 Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc create mode 100644 Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc create mode 100644 Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc create mode 100644 Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc create mode 100644 Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc create mode 100644 Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc create mode 100644 Documentation/fr/texidocs/grouping-beats.texidoc create mode 100644 Documentation/fr/texidocs/guitar-strum-rhythms.texidoc create mode 100644 Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc create mode 100644 Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc create mode 100644 Documentation/fr/texidocs/hymn-template.texidoc create mode 100644 Documentation/fr/texidocs/inserting-a-caesura.texidoc create mode 100644 Documentation/fr/texidocs/isolated-percent-repeats.texidoc create mode 100644 Documentation/fr/texidocs/jazz-combo-template.texidoc create mode 100644 Documentation/fr/texidocs/lyrics-alignment.texidoc create mode 100644 Documentation/fr/texidocs/lyrics-old-spacing-settings.texidoc create mode 100644 Documentation/fr/texidocs/makam-example.texidoc create mode 100644 Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc create mode 100644 Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc create mode 100644 Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc create mode 100644 Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc create mode 100644 Documentation/fr/texidocs/multi-measure-rest-markup.texidoc create mode 100644 Documentation/fr/texidocs/nesting-staves.texidoc create mode 100644 Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc create mode 100644 Documentation/fr/texidocs/non-traditional-key-signatures.texidoc create mode 100644 Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc create mode 100644 Documentation/fr/texidocs/ottava-text.texidoc create mode 100644 Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc create mode 100644 Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc create mode 100644 Documentation/fr/texidocs/percent-repeat-counter.texidoc create mode 100644 Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc create mode 100644 Documentation/fr/texidocs/piano-template-simple.texidoc create mode 100644 Documentation/fr/texidocs/piano-template-with-centered-dynamics.texidoc create mode 100644 Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc create mode 100644 Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc create mode 100644 Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc create mode 100644 Documentation/fr/texidocs/polyphony-in-tablature.texidoc create mode 100644 Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc create mode 100644 Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc create mode 100644 Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc create mode 100644 Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc create mode 100644 Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc create mode 100644 Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc create mode 100644 Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc create mode 100644 Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc create mode 100644 Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc create mode 100644 Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc create mode 100644 Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc create mode 100644 Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc create mode 100644 Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc create mode 100644 Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc create mode 100644 Documentation/fr/texidocs/quoting-another-voice.texidoc create mode 100644 Documentation/fr/texidocs/recorder-fingering-chart.texidoc create mode 100644 Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc create mode 100644 Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc create mode 100644 Documentation/fr/texidocs/removing-the-first-empty-line.texidoc create mode 100644 Documentation/fr/texidocs/rest-styles.texidoc create mode 100644 Documentation/fr/texidocs/reverting-default-beam-endings.texidoc create mode 100644 Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc create mode 100644 Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc create mode 100644 Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc create mode 100644 Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc create mode 100644 Documentation/fr/texidocs/shortening-volta-brackets.texidoc create mode 100644 Documentation/fr/texidocs/simple-lead-sheet.texidoc create mode 100644 Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc create mode 100644 Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc create mode 100644 Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc create mode 100644 Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc create mode 100644 Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc create mode 100644 Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc create mode 100644 Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc create mode 100644 Documentation/fr/texidocs/string-quartet-template-simple.texidoc create mode 100644 Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc create mode 100644 Documentation/fr/texidocs/subdividing-beams.texidoc create mode 100644 Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc create mode 100644 Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc create mode 100644 Documentation/fr/texidocs/tweaking-clef-properties.texidoc create mode 100644 Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc create mode 100644 Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc create mode 100644 Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc create mode 100644 Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc create mode 100644 Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc create mode 100644 Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc rename {input => Documentation/fr}/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc (83%) create mode 100644 Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc create mode 100644 Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc create mode 100644 Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc create mode 100644 Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc create mode 100644 Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc create mode 100644 Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc create mode 100644 Documentation/fr/texidocs/vocal-ensemble-template.texidoc create mode 100644 Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc create mode 100644 Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc delete mode 100644 Documentation/fr/translations.html.in create mode 100644 Documentation/fr/translations.itexi delete mode 100644 Documentation/fr/translations.template.html.in create mode 100644 Documentation/fr/usage.tely create mode 100644 Documentation/fr/usage/GNUmakefile create mode 100644 Documentation/fr/usage/external.itely create mode 100644 Documentation/fr/usage/lilypond-book.itely create mode 100644 Documentation/fr/usage/running.itely create mode 100644 Documentation/fr/usage/suggestions.itely create mode 100644 Documentation/fr/usage/updating.itely delete mode 100644 Documentation/fr/user/GNUmakefile delete mode 100644 Documentation/fr/user/ancient.itely delete mode 100644 Documentation/fr/user/changing-defaults.itely delete mode 100644 Documentation/fr/user/cheatsheet.itely delete mode 100644 Documentation/fr/user/chords.itely delete mode 100644 Documentation/fr/user/converters.itely delete mode 100644 Documentation/fr/user/dedication.itely delete mode 100644 Documentation/fr/user/editorial.itely delete mode 100644 Documentation/fr/user/expressive.itely delete mode 100644 Documentation/fr/user/fretted-strings.itely delete mode 100644 Documentation/fr/user/fundamental.itely delete mode 100644 Documentation/fr/user/input.itely delete mode 100644 Documentation/fr/user/install.itely delete mode 100644 Documentation/fr/user/introduction.itely delete mode 100644 Documentation/fr/user/keyboards.itely delete mode 100644 Documentation/fr/user/lilypond-book.itely delete mode 100644 Documentation/fr/user/lilypond-learning.tely delete mode 100644 Documentation/fr/user/lilypond-program.tely delete mode 100644 Documentation/fr/user/lilypond.tely delete mode 100644 Documentation/fr/user/literature.itely delete mode 100644 Documentation/fr/user/macros.itexi delete mode 100644 Documentation/fr/user/notation-appendices.itely delete mode 100644 Documentation/fr/user/notation.itely delete mode 100644 Documentation/fr/user/percussion.itely delete mode 100644 Documentation/fr/user/pitches.itely delete mode 100644 Documentation/fr/user/preface.itely delete mode 100644 Documentation/fr/user/programming-interface.itely delete mode 100644 Documentation/fr/user/repeats.itely delete mode 100644 Documentation/fr/user/rhythms.itely delete mode 100644 Documentation/fr/user/running.itely delete mode 100644 Documentation/fr/user/scheme-tutorial.itely delete mode 100644 Documentation/fr/user/setup.itely delete mode 100644 Documentation/fr/user/simultaneous.itely delete mode 100644 Documentation/fr/user/spacing.itely delete mode 100644 Documentation/fr/user/specialist.itely delete mode 100644 Documentation/fr/user/staff.itely delete mode 100644 Documentation/fr/user/templates.itely delete mode 100644 Documentation/fr/user/text.itely delete mode 100644 Documentation/fr/user/tutorial.itely delete mode 100644 Documentation/fr/user/tweaks.itely delete mode 100644 Documentation/fr/user/unfretted-strings.itely delete mode 100644 Documentation/fr/user/vocal.itely delete mode 100644 Documentation/fr/user/wind.itely delete mode 100644 Documentation/fr/user/working.itely delete mode 100644 Documentation/fr/user/world.itely create mode 100644 Documentation/fr/web.texi create mode 100644 Documentation/fr/web/GNUmakefile create mode 100644 Documentation/fr/web/community.itexi create mode 100644 Documentation/fr/web/download.itexi create mode 100644 Documentation/fr/web/introduction.itexi create mode 100644 Documentation/fr/web/manuals.itexi create mode 100644 Documentation/gpl.itexi create mode 100644 Documentation/hu/GNUmakefile create mode 100644 Documentation/hu/learning.tely create mode 100644 Documentation/hu/learning/GNUmakefile create mode 100644 Documentation/hu/learning/common-notation.itely create mode 100644 Documentation/hu/learning/fundamental.itely create mode 100644 Documentation/hu/learning/templates.itely create mode 100644 Documentation/hu/learning/tutorial.itely create mode 100644 Documentation/hu/learning/tweaks.itely create mode 100644 Documentation/hu/macros.itexi create mode 100644 Documentation/hu/search-box.ihtml create mode 100644 Documentation/hu/texidocs/GNUmakefile create mode 100644 Documentation/hu/translations.itexi create mode 100644 Documentation/hu/usage.tely create mode 100644 Documentation/hu/usage/GNUmakefile create mode 100644 Documentation/hu/usage/lilypond-book.itely create mode 100644 Documentation/hu/usage/running.itely create mode 100644 Documentation/hu/usage/updating.itely create mode 100644 Documentation/hu/web.texi create mode 100644 Documentation/hu/web/GNUmakefile create mode 100644 Documentation/hu/web/basic-authors.itexi create mode 100644 Documentation/hu/web/community.itexi create mode 100644 Documentation/hu/web/download.itexi create mode 100644 Documentation/hu/web/introduction.itexi create mode 100644 Documentation/hu/web/manuals.itexi create mode 100644 Documentation/included/GNUmakefile create mode 100644 Documentation/included/README create mode 100644 Documentation/included/authors.itexi rename {input/manual => Documentation/included}/chord-names-jazz.ly (87%) create mode 100644 Documentation/included/chord-names-languages.ly create mode 100644 Documentation/included/compile.itexi rename {input/manual => Documentation/included}/display-predefined-fretboards.ly (85%) create mode 100644 Documentation/included/display-predefined-mandolin-fretboards.ly create mode 100644 Documentation/included/display-predefined-string-tunings.ly create mode 100644 Documentation/included/display-predefined-ukulele-fretboards.ly rename {input/manual => Documentation/included}/engraver-example.ily (100%) create mode 100644 Documentation/included/font-table.ly create mode 100644 Documentation/included/generating-output.itexi create mode 100644 Documentation/included/gonville.ly create mode 100644 Documentation/included/helpus.itexi rename {input/manual => Documentation/included}/note-head-style.ly (94%) rename {input/manual => Documentation/included}/percussion-chart.ly (95%) create mode 100644 Documentation/included/script-chart.ly rename {input => Documentation/included}/simple.ly (89%) delete mode 100644 Documentation/index.html.in create mode 100644 Documentation/it/GNUmakefile create mode 100644 Documentation/it/learning.tely create mode 100644 Documentation/it/learning/GNUmakefile create mode 100644 Documentation/it/learning/common-notation.itely create mode 100644 Documentation/it/learning/fundamental.itely create mode 100644 Documentation/it/learning/preface.itely create mode 100644 Documentation/it/learning/templates.itely create mode 100644 Documentation/it/learning/tutorial.itely create mode 100644 Documentation/it/macros.itexi create mode 100644 Documentation/it/search-box.ihtml create mode 100644 Documentation/it/texidocs/GNUmakefile create mode 100644 Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc create mode 100644 Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc create mode 100644 Documentation/it/texidocs/anglican-psalm-template.texidoc create mode 100644 Documentation/it/texidocs/hymn-template.texidoc create mode 100644 Documentation/it/texidocs/jazz-combo-template.texidoc create mode 100644 Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc create mode 100644 Documentation/it/texidocs/piano-template-simple.texidoc create mode 100644 Documentation/it/texidocs/piano-template-with-centered-dynamics.texidoc create mode 100644 Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc create mode 100644 Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc create mode 100644 Documentation/it/texidocs/satb-choir-template---four-staves.texidoc create mode 100644 Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc create mode 100644 Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc create mode 100644 Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc create mode 100644 Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc create mode 100644 Documentation/it/texidocs/string-quartet-template-simple.texidoc create mode 100644 Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc create mode 100644 Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc create mode 100644 Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc create mode 100644 Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc create mode 100644 Documentation/it/texidocs/vocal-ensemble-template.texidoc create mode 100644 Documentation/it/translations.itexi create mode 100644 Documentation/it/usage.tely create mode 100644 Documentation/it/usage/GNUmakefile create mode 100644 Documentation/it/usage/external.itely create mode 100644 Documentation/it/usage/lilypond-book.itely create mode 100644 Documentation/it/usage/running.itely create mode 100644 Documentation/it/usage/suggestions.itely create mode 100644 Documentation/it/usage/updating.itely create mode 100644 Documentation/it/web.texi create mode 100644 Documentation/it/web/GNUmakefile create mode 100644 Documentation/it/web/community.itexi create mode 100644 Documentation/it/web/download.itexi create mode 100644 Documentation/it/web/introduction.itexi create mode 100644 Documentation/it/web/manuals.itexi create mode 100644 Documentation/it/web/news-front.itexi create mode 100644 Documentation/ja/dedication.itely create mode 100644 Documentation/ja/included/GNUmakefile create mode 100644 Documentation/ja/included/generating-output.itexi delete mode 100644 Documentation/ja/index.html.in create mode 100644 Documentation/ja/learning.tely create mode 100644 Documentation/ja/learning/GNUmakefile create mode 100644 Documentation/ja/learning/common-notation.itely create mode 100644 Documentation/ja/learning/fundamental.itely create mode 100644 Documentation/ja/learning/preface.itely create mode 100644 Documentation/ja/learning/templates.itely create mode 100644 Documentation/ja/learning/tutorial.itely create mode 100644 Documentation/ja/learning/tweaks.itely create mode 100644 Documentation/ja/macros.itexi create mode 100644 Documentation/ja/notation.tely create mode 100644 Documentation/ja/notation/GNUmakefile create mode 100644 Documentation/ja/notation/editorial.itely create mode 100644 Documentation/ja/notation/expressive.itely create mode 100644 Documentation/ja/notation/notation.itely create mode 100644 Documentation/ja/notation/pitches.itely create mode 100644 Documentation/ja/notation/repeats.itely create mode 100644 Documentation/ja/notation/rhythms.itely create mode 100644 Documentation/ja/notation/simultaneous.itely create mode 100644 Documentation/ja/notation/staff.itely create mode 100644 Documentation/ja/notation/text.itely create mode 100644 Documentation/ja/texidocs/GNUmakefile create mode 100644 Documentation/ja/texidocs/piano-template-with-centered-dynamics.texidoc create mode 100644 Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc create mode 100644 Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc create mode 100644 Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc create mode 100644 Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc create mode 100644 Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc create mode 100644 Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc create mode 100644 Documentation/ja/texidocs/string-quartet-template-simple.texidoc create mode 100644 Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc create mode 100644 Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc create mode 100644 Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc create mode 100644 Documentation/ja/texidocs/vocal-ensemble-template.texidoc delete mode 100644 Documentation/ja/translations.html.in create mode 100644 Documentation/ja/translations.itexi delete mode 100644 Documentation/ja/translations.template.html.in create mode 100644 Documentation/ja/usage.tely create mode 100644 Documentation/ja/usage/GNUmakefile create mode 100644 Documentation/ja/usage/external.itely create mode 100644 Documentation/ja/usage/lilypond-book.itely create mode 100644 Documentation/ja/usage/running.itely create mode 100644 Documentation/ja/usage/suggestions.itely create mode 100644 Documentation/ja/usage/updating.itely delete mode 100644 Documentation/ja/user/GNUmakefile delete mode 100644 Documentation/ja/user/fundamental.itely delete mode 100644 Documentation/ja/user/introduction.itely delete mode 100644 Documentation/ja/user/lilypond-learning.tely delete mode 100644 Documentation/ja/user/macros.itexi delete mode 100644 Documentation/ja/user/preface.itely delete mode 100644 Documentation/ja/user/scheme-tutorial.itely delete mode 100644 Documentation/ja/user/templates.itely delete mode 100644 Documentation/ja/user/tutorial.itely delete mode 100644 Documentation/ja/user/tweaks.itely delete mode 100644 Documentation/ja/user/working.itely create mode 100644 Documentation/ja/web.texi create mode 100644 Documentation/ja/web/GNUmakefile create mode 100644 Documentation/ja/web/community.itexi create mode 100644 Documentation/ja/web/download.itexi create mode 100644 Documentation/ja/web/introduction.itexi create mode 100644 Documentation/ja/web/manuals.itexi create mode 100644 Documentation/learning.tely create mode 100644 Documentation/learning/GNUmakefile create mode 100644 Documentation/learning/common-notation.itely create mode 100644 Documentation/learning/fundamental.itely create mode 100644 Documentation/learning/preface.itely create mode 100644 Documentation/learning/templates.itely create mode 100644 Documentation/learning/tutorial.itely create mode 100644 Documentation/learning/tweaks.itely create mode 100644 Documentation/lily-bib.bst create mode 100644 Documentation/lily_index_search.php create mode 100644 Documentation/lily_search.js delete mode 100644 Documentation/lilypond-blue.css delete mode 100644 Documentation/lilypond-mccarty.css delete mode 100644 Documentation/lilypond.css create mode 100644 Documentation/logo/GNUmakefile rename Documentation/{pictures => logo}/lelie-logo.xpm (100%) rename Documentation/{pictures => logo}/lilypond.xpm (100%) rename Documentation/{pictures => logo}/ly.xpm (100%) rename Documentation/{user => }/music-glossary.tely (90%) create mode 100644 Documentation/nl/GNUmakefile create mode 100644 Documentation/nl/included/GNUmakefile create mode 100644 Documentation/nl/included/generating-output.itexi create mode 100644 Documentation/nl/learning.tely create mode 100644 Documentation/nl/learning/GNUmakefile create mode 100644 Documentation/nl/learning/common-notation.itely create mode 100644 Documentation/nl/learning/fundamental.itely create mode 100644 Documentation/nl/learning/tutorial.itely create mode 100644 Documentation/nl/macros.itexi create mode 100644 Documentation/nl/search-box.ihtml create mode 100644 Documentation/nl/texidocs/GNUmakefile create mode 100644 Documentation/nl/translations.itexi create mode 100644 Documentation/nl/web.texi create mode 100644 Documentation/nl/web/GNUmakefile create mode 100644 Documentation/nl/web/download.itexi create mode 100644 Documentation/nl/web/introduction.itexi create mode 100644 Documentation/nl/web/manuals.itexi create mode 100644 Documentation/notation.tely create mode 100644 Documentation/notation/GNUmakefile create mode 100644 Documentation/notation/ancient.itely create mode 100644 Documentation/notation/changing-defaults.itely create mode 100644 Documentation/notation/cheatsheet.itely create mode 100644 Documentation/notation/chords.itely create mode 100644 Documentation/notation/contemporary.itely create mode 100644 Documentation/notation/editorial.itely create mode 100644 Documentation/notation/expressive.itely create mode 100644 Documentation/notation/fretted-strings.itely create mode 100644 Documentation/notation/input.itely create mode 100644 Documentation/notation/keyboards.itely create mode 100644 Documentation/notation/notation-appendices.itely create mode 100644 Documentation/notation/notation.itely create mode 100644 Documentation/notation/percussion.itely create mode 100644 Documentation/notation/pitches.itely create mode 100644 Documentation/notation/repeats.itely create mode 100644 Documentation/notation/rhythms.itely create mode 100644 Documentation/notation/simultaneous.itely create mode 100644 Documentation/notation/spacing.itely create mode 100644 Documentation/notation/specialist.itely create mode 100644 Documentation/notation/staff.itely create mode 100644 Documentation/notation/text.itely create mode 100644 Documentation/notation/unfretted-strings.itely create mode 100644 Documentation/notation/vocal.itely create mode 100644 Documentation/notation/wind.itely create mode 100644 Documentation/notation/world.itely create mode 100644 Documentation/pictures/Gonville_after.png create mode 100644 Documentation/pictures/Gonville_before.png create mode 100644 Documentation/pictures/Learning_Macos_Compiling_log.png create mode 100644 Documentation/pictures/Learning_Macos_New_menu.png create mode 100644 Documentation/pictures/Learning_Macos_Open_Dialog_box.png create mode 100644 Documentation/pictures/Learning_Macos_Open_menu.png create mode 100644 Documentation/pictures/Learning_Macos_Save_file_with_name.png create mode 100644 Documentation/pictures/Learning_Macos_Save_menu.png create mode 100644 Documentation/pictures/Learning_Macos_Typeset_menu.png create mode 100644 Documentation/pictures/Learning_Macos_pdf_output.png create mode 100644 Documentation/pictures/Learning_Macos_welcome.png create mode 100644 Documentation/pictures/Learning_Win7_All_Files_Created.png create mode 100644 Documentation/pictures/Learning_Win7_Log_File.png create mode 100644 Documentation/pictures/Learning_Win7_New_Menu.png create mode 100644 Documentation/pictures/Learning_Win7_Open_Context_Menu.png create mode 100644 Documentation/pictures/Learning_Win7_Open_Dragndrop.png create mode 100644 Documentation/pictures/Learning_Win7_Open_Menu.png create mode 100644 Documentation/pictures/Learning_Win7_Pdf_Output.png create mode 100644 Documentation/pictures/Learning_Win7_Save_File_With_Name.png create mode 100644 Documentation/pictures/Learning_Win7_Save_Menu.png create mode 100644 Documentation/pictures/Learning_Win7_Welcome_File_Whole.png create mode 100644 Documentation/pictures/OpusAndFeta.png create mode 100644 Documentation/pictures/VTlogo_ITF.png create mode 100644 Documentation/pictures/architecture-diagram.png create mode 100644 Documentation/pictures/background-image.png rename Documentation/{user => pictures}/baer-flat-bw.png (100%) create mode 100644 Documentation/pictures/baer-flat-gray.png create mode 100644 Documentation/pictures/baer-ledger.png create mode 100644 Documentation/pictures/baer-sarabande-hires.png create mode 100644 Documentation/pictures/baer-sarabande-original.jpg create mode 100644 Documentation/pictures/baer-sarabande.png create mode 100644 Documentation/pictures/baer-suite1-fullpage-hires.png create mode 100644 Documentation/pictures/baer-suite1-fullpage.png create mode 100644 Documentation/pictures/baer-suite1-line.png create mode 100644 Documentation/pictures/beam-scoring-example.png create mode 100644 Documentation/pictures/bench-morgenlied.png create mode 100644 Documentation/pictures/bwv861-baer-alt-small.png create mode 100644 Documentation/pictures/bwv861-baer-alt.png create mode 100644 Documentation/pictures/bwv861-baer-small.png create mode 100644 Documentation/pictures/bwv861-baer.png create mode 100644 Documentation/pictures/bwv861-breitkopf-small.png create mode 100644 Documentation/pictures/bwv861-breitkopf.png create mode 100644 Documentation/pictures/bwv861-finale2008a.png create mode 100644 Documentation/pictures/bwv861-gessellschaft-small.png create mode 100644 Documentation/pictures/bwv861-gessellschaft.png create mode 100644 Documentation/pictures/bwv861mm28-29.png create mode 100644 Documentation/pictures/bwv861mm33-34-annotate.png create mode 100644 Documentation/pictures/bwv861mm33-34-annotate.svg create mode 100644 Documentation/pictures/bwv861mm33-34.png create mode 100644 Documentation/pictures/carter-brey.jpg create mode 100644 Documentation/pictures/color1-active.png create mode 100644 Documentation/pictures/color1-bg.png create mode 100644 Documentation/pictures/color1-hover.png create mode 100644 Documentation/pictures/color2-active.png create mode 100644 Documentation/pictures/color2-bg.png create mode 100644 Documentation/pictures/color2-hover.png create mode 100644 Documentation/pictures/color3-active.png create mode 100644 Documentation/pictures/color3-bg.png create mode 100644 Documentation/pictures/color3-hover.png create mode 100644 Documentation/pictures/color4-active.png create mode 100644 Documentation/pictures/color4-bg.png create mode 100644 Documentation/pictures/color4-hover.png rename Documentation/{user => pictures}/context-example.eps (100%) create mode 100644 Documentation/pictures/darius-blasband.jpg create mode 100644 Documentation/pictures/directions-updown.png create mode 100644 Documentation/pictures/double-lily-modified3.png create mode 100644 Documentation/pictures/engraver-acc.png create mode 100644 Documentation/pictures/engraver-clef.png create mode 100644 Documentation/pictures/engraver-final.png create mode 100644 Documentation/pictures/engraver-noteheads.png create mode 100644 Documentation/pictures/engraver-score.png create mode 100644 Documentation/pictures/engraver-slur.png create mode 100644 Documentation/pictures/engraver-staff.png create mode 100644 Documentation/pictures/engraver-stem.png create mode 100644 Documentation/pictures/finale-beam-detail.png create mode 100644 Documentation/pictures/finale-flat-correct.png create mode 100644 Documentation/pictures/finale-flat-detail.png create mode 100644 Documentation/pictures/finale-sarabande-full.png create mode 100644 Documentation/pictures/flat-design.png create mode 100644 Documentation/pictures/frescobaldi-lilypond-editor-small.png create mode 100644 Documentation/pictures/frescobaldi-lilypond-editor.png create mode 100644 Documentation/pictures/hader-collage.jpg create mode 100644 Documentation/pictures/hader-collage.png create mode 100644 Documentation/pictures/hader-slaan.jpg create mode 100644 Documentation/pictures/hader-slaan.png rename Documentation/{user => pictures}/henle-flat-bw.png (100%) create mode 100644 Documentation/pictures/henle-flat-gray.png create mode 100644 Documentation/pictures/henle-ledger.png create mode 100644 Documentation/pictures/henle-suite1-fullpage-hires.png create mode 100644 Documentation/pictures/henle-suite1-fullpage.png create mode 100644 Documentation/pictures/henle-suite1-line.png create mode 100644 Documentation/pictures/lao_banner_06_on_white_demo.png create mode 100644 Documentation/pictures/lelie.png create mode 100644 Documentation/pictures/lily-flat-bw.png create mode 100644 Documentation/pictures/lily-home-nav-active.png create mode 100644 Documentation/pictures/lily-home-nav-bg.png create mode 100644 Documentation/pictures/lily-home-nav-hover.png create mode 100644 Documentation/pictures/lily-home.png create mode 100644 Documentation/pictures/lily-ledger.png create mode 100644 Documentation/pictures/lily14-sarabande-annotated-hires.png create mode 100644 Documentation/pictures/lily14-sarabande-annotated.png create mode 100644 Documentation/pictures/lily14-sarabande-correct.png create mode 100644 Documentation/pictures/lily14-sarabande-hires.png create mode 100644 Documentation/pictures/lily14-sarabande.png create mode 100644 Documentation/pictures/lily17-sarabande.png create mode 100644 Documentation/pictures/lilykde-screenshot-small.png create mode 100644 Documentation/pictures/lilykde-screenshot.png create mode 100644 Documentation/pictures/lilypond-book.png create mode 100644 Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png create mode 100644 Documentation/pictures/lilypondtool-2.12-screenshot.png create mode 100644 Documentation/pictures/logo-debian.png create mode 100644 Documentation/pictures/logo-fedora.png create mode 100644 Documentation/pictures/logo-freebsd.png create mode 100644 Documentation/pictures/logo-lilypond_Snell-Roundhead-Heaven.png create mode 100644 Documentation/pictures/logo-linux.png create mode 100644 Documentation/pictures/logo-macosx.png create mode 100644 Documentation/pictures/logo-slackware.png create mode 100644 Documentation/pictures/logo-suse.png create mode 100644 Documentation/pictures/logo-ubuntu.png create mode 100644 Documentation/pictures/logo-windows.png create mode 100644 Documentation/pictures/mc-squared.png create mode 100644 Documentation/pictures/morgenlied-crop-2.jpg create mode 100644 Documentation/pictures/morgenlied-crop-2.png create mode 100644 Documentation/pictures/morgenlied-ly-crop2.png create mode 100644 Documentation/pictures/naive-notation-uml.png create mode 100644 Documentation/pictures/naive-notation.png create mode 100644 Documentation/pictures/nav-active-2.png create mode 100644 Documentation/pictures/nav-active.png create mode 100644 Documentation/pictures/nav-bg-2.png create mode 100644 Documentation/pictures/nav-bg.png create mode 100644 Documentation/pictures/nav-hover-2.png create mode 100644 Documentation/pictures/nav-hover.png create mode 100644 Documentation/pictures/nereid-shot-small.png create mode 100644 Documentation/pictures/nereid-shot.png create mode 100644 Documentation/pictures/nestedboxes.png create mode 100644 Documentation/pictures/nestedboxes.svg create mode 100644 Documentation/pictures/nonnaive-notation.png create mode 100644 Documentation/pictures/orm-finnendahl.jpg create mode 100644 Documentation/pictures/page-layout-comparison.png create mode 100644 Documentation/pictures/page-layout-comparison.svg create mode 100644 Documentation/pictures/pdf/GNUmakefile create mode 100644 Documentation/pictures/pdf/OpusAndFeta.pdf create mode 100755 Documentation/pictures/pdf/bwv861-finale2008a.pdf create mode 100644 Documentation/pictures/pdf/bwv861mm28-29.pdf create mode 100644 Documentation/pictures/pdf/bwv861mm33-34-annotate.pdf create mode 100644 Documentation/pictures/pdf/bwv861mm33-34.pdf create mode 100644 Documentation/pictures/pdf/lily14-sarabande.pdf create mode 100644 Documentation/pictures/pdf/nestedboxes.pdf create mode 100644 Documentation/pictures/pdf/page-layout-comparison.pdf create mode 100644 Documentation/pictures/pdf/size11.pdf create mode 100644 Documentation/pictures/pdf/size26.pdf create mode 100644 Documentation/pictures/ross-beam-scan.jpg create mode 100644 Documentation/pictures/screenshot-denemo-small.png create mode 100644 Documentation/pictures/screenshot-denemo.png create mode 100644 Documentation/pictures/simple-notation.png create mode 100644 Documentation/pictures/simultaneous-0.png create mode 100644 Documentation/pictures/simultaneous-1.png create mode 100644 Documentation/pictures/simultaneous-2.png create mode 100644 Documentation/pictures/simultaneous-3.png create mode 100644 Documentation/pictures/size11.png create mode 100644 Documentation/pictures/size26.png create mode 100644 Documentation/pictures/slur-esthetics-annotate-1.png create mode 100644 Documentation/pictures/slur-esthetics-annotate-2.png create mode 100644 Documentation/pictures/slur-esthetics-annotate-3.png create mode 100644 Documentation/pictures/slur-esthetics.png create mode 100644 Documentation/pictures/spacing-no-corr.png create mode 100644 Documentation/pictures/spacing-with-corr.png create mode 100644 Documentation/pictures/squiggle.jpg create mode 100644 Documentation/pictures/stone-distance.png create mode 100644 Documentation/pictures/summary-gradient.png create mode 100644 Documentation/pictures/text-input-1-annotate-de.png create mode 100644 Documentation/pictures/text-input-1-annotate-de.svg create mode 100644 Documentation/pictures/text-input-1-annotate-es.png create mode 100644 Documentation/pictures/text-input-1-annotate-es.svg create mode 100644 Documentation/pictures/text-input-1-annotate-fr.png create mode 100644 Documentation/pictures/text-input-1-annotate-fr.svg create mode 100644 Documentation/pictures/text-input-1-annotate-hu.png create mode 100644 Documentation/pictures/text-input-1-annotate-hu.svg create mode 100644 Documentation/pictures/text-input-1-annotate-it.png create mode 100644 Documentation/pictures/text-input-1-annotate-it.svg create mode 100644 Documentation/pictures/text-input-1-annotate-nl.png create mode 100644 Documentation/pictures/text-input-1-annotate.png create mode 100644 Documentation/pictures/text-input-1-annotate.svg create mode 100644 Documentation/pictures/text-input-1-output.png create mode 100644 Documentation/pictures/text-input-2-annotate-de.png create mode 100644 Documentation/pictures/text-input-2-annotate-de.svg create mode 100644 Documentation/pictures/text-input-2-annotate-es.png create mode 100644 Documentation/pictures/text-input-2-annotate-es.svg create mode 100644 Documentation/pictures/text-input-2-annotate-fr.png create mode 100644 Documentation/pictures/text-input-2-annotate-fr.svg create mode 100644 Documentation/pictures/text-input-2-annotate-hu.png create mode 100644 Documentation/pictures/text-input-2-annotate-hu.svg create mode 100644 Documentation/pictures/text-input-2-annotate-it.png create mode 100644 Documentation/pictures/text-input-2-annotate-it.svg create mode 100644 Documentation/pictures/text-input-2-annotate-nl.png create mode 100644 Documentation/pictures/text-input-2-annotate.png create mode 100644 Documentation/pictures/text-input-2-annotate.svg create mode 100644 Documentation/pictures/text-input-2-output.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate-de.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate-de.svg create mode 100644 Documentation/pictures/text-input-parts-both-annotate-es.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate-es.svg create mode 100644 Documentation/pictures/text-input-parts-both-annotate-fr.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate-fr.svg create mode 100644 Documentation/pictures/text-input-parts-both-annotate-hu.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate-hu.svg create mode 100644 Documentation/pictures/text-input-parts-both-annotate-it.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate-it.svg create mode 100644 Documentation/pictures/text-input-parts-both-annotate-nl.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate.png create mode 100644 Documentation/pictures/text-input-parts-both-annotate.svg create mode 100644 Documentation/pictures/text-input-parts-single-annotate-de.png create mode 100644 Documentation/pictures/text-input-parts-single-annotate-de.svg create mode 100644 Documentation/pictures/text-input-parts-single-annotate-es.png create mode 100644 Documentation/pictures/text-input-parts-single-annotate-es.svg create mode 100644 Documentation/pictures/text-input-parts-single-annotate-fr.png create mode 100644 Documentation/pictures/text-input-parts-single-annotate-fr.svg create mode 100644 Documentation/pictures/text-input-parts-single-annotate-hu.png create mode 100644 Documentation/pictures/text-input-parts-single-annotate-hu.svg create mode 100644 Documentation/pictures/text-input-parts-single-annotate-it.png create mode 100644 Documentation/pictures/text-input-parts-single-annotate-it.svg create mode 100644 Documentation/pictures/text-input-parts-single-annotate-nl.png create mode 100644 Documentation/pictures/text-input-parts-single-annotate.png create mode 100644 Documentation/pictures/text-input-parts-single-annotate.svg create mode 100644 Documentation/pictures/text-input-parts-single-output.png create mode 100644 Documentation/pictures/text-input-pop-annotate-de.png create mode 100644 Documentation/pictures/text-input-pop-annotate-de.svg create mode 100644 Documentation/pictures/text-input-pop-annotate-es.png create mode 100644 Documentation/pictures/text-input-pop-annotate-es.svg create mode 100644 Documentation/pictures/text-input-pop-annotate-fr.png create mode 100644 Documentation/pictures/text-input-pop-annotate-fr.svg create mode 100644 Documentation/pictures/text-input-pop-annotate-hu.png create mode 100644 Documentation/pictures/text-input-pop-annotate-hu.svg create mode 100644 Documentation/pictures/text-input-pop-annotate-it.png create mode 100644 Documentation/pictures/text-input-pop-annotate-it.svg create mode 100644 Documentation/pictures/text-input-pop-annotate-nl.png create mode 100644 Documentation/pictures/text-input-pop-annotate.png create mode 100644 Documentation/pictures/text-input-pop-annotate.svg create mode 100644 Documentation/pictures/text-input-pop-output.png create mode 100644 Documentation/pictures/text-input-score-annotate-de.png create mode 100644 Documentation/pictures/text-input-score-annotate-de.svg create mode 100644 Documentation/pictures/text-input-score-annotate-es.png create mode 100644 Documentation/pictures/text-input-score-annotate-es.svg create mode 100644 Documentation/pictures/text-input-score-annotate-fr.png create mode 100644 Documentation/pictures/text-input-score-annotate-fr.svg create mode 100644 Documentation/pictures/text-input-score-annotate-hu.png create mode 100644 Documentation/pictures/text-input-score-annotate-hu.svg create mode 100644 Documentation/pictures/text-input-score-annotate-it.png create mode 100644 Documentation/pictures/text-input-score-annotate-it.svg create mode 100644 Documentation/pictures/text-input-score-annotate-nl.png create mode 100644 Documentation/pictures/text-input-score-annotate.png create mode 100644 Documentation/pictures/text-input-score-annotate.svg create mode 100644 Documentation/pictures/text-input-score-output.png create mode 100644 Documentation/pictures/thickness-tweaks.png create mode 100644 Documentation/pictures/ties-scoring-example.png create mode 100644 Documentation/po/cs.po create mode 100644 Documentation/po/hu.po create mode 100644 Documentation/po/it.po create mode 100644 Documentation/po/nl.po create mode 100644 Documentation/po/zh.po create mode 100644 Documentation/search-box.ihtml create mode 100644 Documentation/snippets.tely create mode 100644 Documentation/snippets/GNUmakefile create mode 100644 Documentation/snippets/README rename {input/lsr => Documentation/snippets}/accordion-discant-symbols.ly (87%) create mode 100644 Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly create mode 100644 Documentation/snippets/adding-ambitus-per-voice.ly create mode 100644 Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly create mode 100644 Documentation/snippets/adding-an-extra-staff.ly create mode 100644 Documentation/snippets/adding-bar-lines-to-chordnames-context.ly create mode 100644 Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly rename {input/lsr => Documentation/snippets}/adding-drum-parts.ly (80%) create mode 100644 Documentation/snippets/adding-fingerings-to-a-score.ly create mode 100644 Documentation/snippets/adding-fingerings-to-tablatures.ly create mode 100644 Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly create mode 100644 Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly create mode 100644 Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly create mode 100644 Documentation/snippets/adding-the-current-date-to-a-score.ly create mode 100644 Documentation/snippets/adding-volta-brackets-to-additional-staves.ly create mode 100644 Documentation/snippets/additional-voices-to-avoid-collisions.ly create mode 100644 Documentation/snippets/adjusting-grace-note-spacing.ly create mode 100644 Documentation/snippets/adjusting-lyrics-vertical-spacing.ly create mode 100644 Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly create mode 100644 Documentation/snippets/aligning-and-centering-instrument-names.ly create mode 100644 Documentation/snippets/aligning-bar-numbers.ly create mode 100644 Documentation/snippets/aligning-marks-with-various-notation-objects.ly create mode 100644 Documentation/snippets/aligning-objects-created-with-the--mark-command.ly create mode 100644 Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly create mode 100644 Documentation/snippets/altering-the-length-of-beamed-stems.ly create mode 100644 Documentation/snippets/alternative-breve-note.ly create mode 100644 Documentation/snippets/ambitus-with-multiple-voices.ly create mode 100644 Documentation/snippets/ambitus.ly create mode 100644 Documentation/snippets/analysis-brackets-above-the-staff.ly rename {input/lsr => Documentation/snippets}/ancient-fonts.ly (91%) create mode 100644 Documentation/snippets/ancient-headword.ly rename {input/lsr => Documentation/snippets}/ancient-notation-intro.itely (100%) create mode 100644 Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly rename {input/lsr => Documentation/snippets}/ancient-notation-template----modern-transcription-of-mensural-music.ly (77%) rename {input/lsr => Documentation/snippets}/ancient-notation.snippet-list (100%) create mode 100644 Documentation/snippets/ancient-time-signatures.ly create mode 100644 Documentation/snippets/anglican-psalm-template.ly create mode 100644 Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly create mode 100644 Documentation/snippets/arabic-improvisation.ly create mode 100644 Documentation/snippets/asymmetric-slurs.ly create mode 100644 Documentation/snippets/automatic-beam-subdivisions.ly create mode 100644 Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly create mode 100644 Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly create mode 100644 Documentation/snippets/beam-endings-in-score-context.ly create mode 100644 Documentation/snippets/beam-grouping-in-7-8-time.ly create mode 100644 Documentation/snippets/beams-across-line-breaks.ly create mode 100644 Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly rename {input/lsr => Documentation/snippets}/book-parts.ly (85%) rename {input/lsr => Documentation/snippets}/breaks.snippet-list (100%) rename {input/lsr => Documentation/snippets}/breathing-signs.ly (79%) create mode 100644 Documentation/snippets/broken-crescendo-hairpin.ly create mode 100644 Documentation/snippets/caesura-railtracks-with-fermata.ly create mode 100644 Documentation/snippets/center-text-below-hairpin-dynamics.ly create mode 100644 Documentation/snippets/centering-markup-on-note-heads-automatically.ly create mode 100644 Documentation/snippets/changing--flageolet-mark-size.ly create mode 100644 Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly create mode 100644 Documentation/snippets/changing-beam-knee-gap.ly create mode 100644 Documentation/snippets/changing-chord-separator.ly create mode 100644 Documentation/snippets/changing-form-of-multi-measure-rests.ly create mode 100644 Documentation/snippets/changing-fret-orientations.ly create mode 100644 Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly create mode 100644 Documentation/snippets/changing-partcombine-texts.ly rename {input/lsr => Documentation/snippets}/changing-properties-for-individual-grobs.ly (78%) create mode 100644 Documentation/snippets/changing-stanza-fonts.ly create mode 100644 Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly create mode 100644 Documentation/snippets/changing-the-ambitus-gap.ly create mode 100644 Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly create mode 100644 Documentation/snippets/changing-the-breath-mark-symbol.ly create mode 100644 Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly create mode 100644 Documentation/snippets/changing-the-default-text-font-family.ly create mode 100644 Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly create mode 100644 Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly create mode 100644 Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly create mode 100644 Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly create mode 100644 Documentation/snippets/changing-the-size-of-woodwind-diagrams.ly create mode 100644 Documentation/snippets/changing-the-staff-size.ly create mode 100644 Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly create mode 100644 Documentation/snippets/changing-the-text-for-sustain-markings.ly create mode 100644 Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly create mode 100644 Documentation/snippets/changing-the-tuplet-number.ly rename {input/lsr => Documentation/snippets}/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly (85%) create mode 100644 Documentation/snippets/chant-or-psalms-notation.ly create mode 100644 Documentation/snippets/chord-glissando-in-tablature.ly create mode 100644 Documentation/snippets/chord-name-exceptions.ly create mode 100644 Documentation/snippets/chord-name-major7.ly create mode 100644 Documentation/snippets/chordchanges-for-fretboards.ly create mode 100644 Documentation/snippets/chords-headword.ly rename {input/lsr => Documentation/snippets}/chords-intro.itely (100%) rename {input/lsr => Documentation/snippets}/chords.snippet-list (87%) create mode 100644 Documentation/snippets/clefs-can-be-transposed-by-arbitrary-amounts.ly create mode 100644 Documentation/snippets/clip-systems.ly create mode 100644 Documentation/snippets/clusters.ly create mode 100644 Documentation/snippets/coloring-notes-depending-on-their-pitch.ly create mode 100644 Documentation/snippets/combining-dynamics-with-markup-texts.ly create mode 100644 Documentation/snippets/combining-two-parts-on-the-same-staff.ly create mode 100644 Documentation/snippets/compound-time-signatures.ly create mode 100644 Documentation/snippets/conducting-signs,-measure-grouping-signs.ly create mode 100644 Documentation/snippets/contemporary-glissando.ly rename {input/lsr => Documentation/snippets}/contexts-and-engravers-intro.itely (100%) rename {input/lsr => Documentation/snippets}/contexts-and-engravers.snippet-list (78%) create mode 100644 Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly create mode 100644 Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly create mode 100644 Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly create mode 100644 Documentation/snippets/controlling-tuplet-bracket-visibility.ly create mode 100644 Documentation/snippets/creating-a-delayed-turn.ly rename {input/lsr => Documentation/snippets}/creating-a-sequence-of-notes-on-various-pitches.ly (81%) create mode 100644 Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly create mode 100644 Documentation/snippets/creating-blank-staves.ly create mode 100644 Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly create mode 100644 Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly create mode 100644 Documentation/snippets/creating-metronome-marks-in-markup-mode.ly create mode 100644 Documentation/snippets/creating-real-parenthesized-dynamics.ly rename {input/lsr => Documentation/snippets}/creating-simultaneous-rehearsal-marks.ly (78%) rename {input/lsr => Documentation/snippets}/creating-slurs-across-voices.ly (79%) rename {input/lsr => Documentation/snippets}/creating-text-spanners.ly (84%) create mode 100644 Documentation/snippets/cross-staff-tremolos.ly create mode 100644 Documentation/snippets/custodes.ly rename {input/lsr => Documentation/snippets}/customizing-fretboard-fret-diagrams.ly (75%) rename {input/lsr => Documentation/snippets}/customizing-markup-fret-diagrams.ly (80%) create mode 100644 Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly create mode 100644 Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly create mode 100644 Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly rename {input/lsr => Documentation/snippets}/demo-midiinstruments.ly (96%) rename {input/lsr => Documentation/snippets}/demonstrating-all-headers.ly (80%) create mode 100644 Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly create mode 100644 Documentation/snippets/displaying-complex-chords.ly create mode 100644 Documentation/snippets/displaying-grob-ancestry.ly create mode 100644 Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly create mode 100644 Documentation/snippets/dotted-harmonics.ly create mode 100644 Documentation/snippets/double-glissando.ly create mode 100644 Documentation/snippets/drawing-boxes-around-grobs.ly create mode 100644 Documentation/snippets/drawing-circles-around-note-heads.ly rename {input/lsr => Documentation/snippets}/drawing-circles-around-various-objects.ly (78%) create mode 100644 Documentation/snippets/dynamics-custom-text-spanner-postfix.ly create mode 100644 Documentation/snippets/dynamics-text-spanner-postfix.ly rename {input/lsr => Documentation/snippets}/editorial-annotations-intro.itely (100%) rename {input/lsr => Documentation/snippets}/editorial-annotations.snippet-list (81%) create mode 100644 Documentation/snippets/editorial-headword.ly create mode 100644 Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly create mode 100644 Documentation/snippets/engravers-one-by-one.ly create mode 100644 Documentation/snippets/engraving-ties-manually.ly rename {input/lsr => Documentation/snippets}/engraving-tremolos-with-floating-beams.ly (83%) create mode 100644 Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly create mode 100644 Documentation/snippets/expressive-headword.ly rename {input/lsr => Documentation/snippets}/expressive-marks-intro.itely (100%) create mode 100644 Documentation/snippets/expressive-marks.snippet-list create mode 100644 Documentation/snippets/faking-a-hammer-in-tablatures.ly create mode 100644 Documentation/snippets/figured-bass-headword.ly create mode 100644 Documentation/snippets/fine-tuning-pedal-brackets.ly create mode 100644 Documentation/snippets/fingering-symbols-for-wind-instruments.ly create mode 100644 Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly create mode 100644 Documentation/snippets/flamenco-notation.ly create mode 100644 Documentation/snippets/flat-flags-and-beam-nibs.ly create mode 100644 Documentation/snippets/flute-slap-notation.ly create mode 100644 Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly create mode 100644 Documentation/snippets/forcing-horizontal-shift-of-notes.ly create mode 100644 Documentation/snippets/forcing-hyphens-to-be-shown.ly create mode 100644 Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly create mode 100644 Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly create mode 100644 Documentation/snippets/formatting-lyrics-syllables.ly rename {input/lsr => Documentation/snippets}/fret-diagrams-explained-and-developed.ly (96%) create mode 100644 Documentation/snippets/fretboards-alternate-tables.ly create mode 100644 Documentation/snippets/fretted-headword.ly create mode 100644 Documentation/snippets/fretted-string-harmonics-in-tablature.ly rename {input/lsr => Documentation/snippets}/fretted-strings-intro.itely (100%) create mode 100644 Documentation/snippets/fretted-strings.snippet-list create mode 100644 Documentation/snippets/generating-custom-flags.ly rename {input/lsr => Documentation/snippets}/generating-random-notes.ly (82%) create mode 100644 Documentation/snippets/graphical-and-text-woodwind-diagrams.ly create mode 100644 Documentation/snippets/grid-lines--changing-their-appearance.ly rename {input/lsr => Documentation/snippets}/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly (87%) create mode 100644 Documentation/snippets/grouping-beats.ly create mode 100644 Documentation/snippets/guitar-slides.ly create mode 100644 Documentation/snippets/guitar-strum-rhythms.ly create mode 100644 Documentation/snippets/hairpins-with-different-line-styles.ly create mode 100644 Documentation/snippets/heavily-customized-polymetric-time-signatures.ly create mode 100644 Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly create mode 100644 Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly create mode 100644 Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly rename {input/lsr => Documentation/snippets}/how-to-change-fret-diagram-position.ly (84%) create mode 100644 Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly create mode 100644 Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly create mode 100644 Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.ly create mode 100644 Documentation/snippets/hymn-template.ly create mode 100644 Documentation/snippets/incipit.ly create mode 100644 Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly create mode 100644 Documentation/snippets/inserting-a-caesura.ly create mode 100644 Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly create mode 100644 Documentation/snippets/isolated-percent-repeats.ly rename {input/lsr => Documentation/snippets}/jazz-combo-template.ly (76%) create mode 100644 Documentation/snippets/keep-change-clefs-full-sized.ly create mode 100644 Documentation/snippets/keyboard-headword.ly rename {input/lsr => Documentation/snippets}/keyboards-intro.itely (100%) rename {input/lsr => Documentation/snippets}/keyboards.snippet-list (87%) create mode 100644 Documentation/snippets/laissez-vibrer-ties.ly create mode 100644 Documentation/snippets/letter-tablature-formatting.ly rename {input/lsr => Documentation/snippets}/line-arrows.ly (78%) create mode 100644 Documentation/snippets/lyrics-alignment.ly create mode 100644 Documentation/snippets/lyrics-old-spacing-settings.ly create mode 100644 Documentation/snippets/makam-example.ly create mode 100644 Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly create mode 100644 Documentation/snippets/making-slurs-with-complex-dash-structure.ly create mode 100644 Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly create mode 100644 Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly create mode 100644 Documentation/snippets/manually-controlling-beam-positions.ly create mode 100644 Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly rename {input/lsr => Documentation/snippets}/markup-lines.ly (88%) create mode 100644 Documentation/snippets/measure-counter.ly create mode 100644 Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly create mode 100644 Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly rename {input/lsr => Documentation/snippets}/midi-intro.itely (100%) rename {input/lsr => Documentation/snippets}/midi.snippet-list (100%) create mode 100644 Documentation/snippets/modern-tab-text-clef.ly create mode 100644 Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly rename {input/lsr => Documentation/snippets}/modifying-tuplet-bracket-length.ly (80%) create mode 100644 Documentation/snippets/moving-dotted-notes-in-polyphony.ly create mode 100644 Documentation/snippets/moving-slur-positions-vertically.ly create mode 100644 Documentation/snippets/multi-measure-rest-markup.ly create mode 100644 Documentation/snippets/nesting-staves.ly create mode 100644 Documentation/snippets/new/GNUmakefile create mode 100644 Documentation/snippets/new/README create mode 100644 Documentation/snippets/new/adding-fingerings-to-tablatures.ly create mode 100644 Documentation/snippets/new/adjusting-lyrics-vertical-spacing.ly create mode 100644 Documentation/snippets/new/alternative-breve-note.ly create mode 100644 Documentation/snippets/new/ancient-headword.ly create mode 100644 Documentation/snippets/new/automatic-beam-subdivisions.ly create mode 100644 Documentation/snippets/new/beam-endings-in-score-context.ly create mode 100644 Documentation/snippets/new/beam-grouping-in-7-8-time.ly create mode 100644 Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly create mode 100644 Documentation/snippets/new/changing-the-ambitus-gap.ly create mode 100644 Documentation/snippets/new/changing-the-number-of-augmentation-dots-per-note.ly create mode 100644 Documentation/snippets/new/changing-the-size-of-woodwind-diagrams.ly create mode 100644 Documentation/snippets/new/changing-the-time-signature-without-affecting-the-beaming.ly create mode 100644 Documentation/snippets/new/chord-glissando-in-tablature.ly create mode 100644 Documentation/snippets/new/chordchanges-for-fretboards.ly create mode 100644 Documentation/snippets/new/chords-headword.ly create mode 100644 Documentation/snippets/new/clip-systems.ly create mode 100644 Documentation/snippets/new/compound-time-signatures.ly create mode 100644 Documentation/snippets/new/conducting-signs,-measure-grouping-signs.ly create mode 100644 Documentation/snippets/new/controlling-spanner-visibility-after-a-line-break.ly create mode 100644 Documentation/snippets/new/defining-an-engraver-in-scheme-ambitus-engraver.ly create mode 100644 Documentation/snippets/new/defining-predefined-fretboards-for-other-instruments.ly create mode 100644 Documentation/snippets/new/displaying-complex-chords.ly create mode 100644 Documentation/snippets/new/displaying-grob-ancestry.ly create mode 100644 Documentation/snippets/new/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly create mode 100644 Documentation/snippets/new/dynamics-custom-text-spanner-postfix.ly create mode 100644 Documentation/snippets/new/dynamics-text-spanner-postfix.ly create mode 100644 Documentation/snippets/new/editorial-headword.ly create mode 100644 Documentation/snippets/new/engravers-one-by-one.ly create mode 100644 Documentation/snippets/new/expressive-headword.ly create mode 100644 Documentation/snippets/new/faking-a-hammer-in-tablatures.ly create mode 100644 Documentation/snippets/new/figured-bass-headword.ly create mode 100644 Documentation/snippets/new/flamenco-notation.ly create mode 100644 Documentation/snippets/new/fretboards-alternate-tables.ly create mode 100644 Documentation/snippets/new/fretted-headword.ly create mode 100644 Documentation/snippets/new/fretted-string-harmonics-in-tablature.ly create mode 100644 Documentation/snippets/new/graphical-and-text-woodwind-diagrams.ly create mode 100644 Documentation/snippets/new/grouping-beats.ly create mode 100644 Documentation/snippets/new/guitar-slides.ly create mode 100644 Documentation/snippets/new/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly create mode 100644 Documentation/snippets/new/incipit.ly create mode 100644 Documentation/snippets/new/keyboard-headword.ly create mode 100644 Documentation/snippets/new/letter-tablature-formatting.ly create mode 100644 Documentation/snippets/new/lyrics-old-spacing-settings.ly create mode 100644 Documentation/snippets/new/makam-example.ly create mode 100644 Documentation/snippets/new/making-slurs-with-complex-dash-structure.ly create mode 100644 Documentation/snippets/new/modern-tab-text-clef.ly create mode 100644 Documentation/snippets/new/non-default-tuplet-numbers.ly create mode 100644 Documentation/snippets/new/non-traditional-key-signatures.ly create mode 100644 Documentation/snippets/new/numbers-as-easy-note-heads.ly create mode 100644 Documentation/snippets/new/open-string-harmonics-in-tablature.ly create mode 100644 Documentation/snippets/new/piano-template-with-centered-dynamics.ly create mode 100644 Documentation/snippets/new/pitches-headword.ly create mode 100644 Documentation/snippets/new/repeats-headword.ly create mode 100644 Documentation/snippets/new/reverting-default-beam-endings.ly create mode 100644 Documentation/snippets/new/rhythms-headword.ly create mode 100644 Documentation/snippets/new/screech-boink.ly create mode 100644 Documentation/snippets/new/setting-the-double-repeat-default-for-volte.ly create mode 100644 Documentation/snippets/new/showing-the-same-articulation-above-and-below-a-note-or-chord.ly create mode 100644 Documentation/snippets/new/simultaneous-headword.ly create mode 100644 Documentation/snippets/new/slides-in-tablature.ly create mode 100644 Documentation/snippets/new/snap-pizzicato-bartok-pizzicato.ly create mode 100644 Documentation/snippets/new/staff-headword.ly create mode 100644 Documentation/snippets/new/stem-and-beam-behavior-in-tablature.ly create mode 100644 Documentation/snippets/new/subdividing-beams.ly create mode 100644 Documentation/snippets/new/text-headword.ly create mode 100644 Documentation/snippets/new/unfretted-headword.ly create mode 100644 Documentation/snippets/new/using-ly-grob-object-to-access-grobs-with--tweak.ly create mode 100644 Documentation/snippets/new/using-the-whiteout-property.ly create mode 100644 Documentation/snippets/new/vocal-ensemble-template-with-automatic-piano-reduction.ly create mode 100644 Documentation/snippets/new/vocal-ensemble-template-with-verse-and-refrain.ly create mode 100644 Documentation/snippets/new/vocal-ensemble-template.ly create mode 100644 Documentation/snippets/new/vocal-headword.ly create mode 100644 Documentation/snippets/new/wind-headword.ly create mode 100644 Documentation/snippets/new/woodwind-diagrams-key-lists.ly create mode 100644 Documentation/snippets/new/woodwind-diagrams-listing.ly create mode 100644 Documentation/snippets/non-default-tuplet-numbers.ly create mode 100644 Documentation/snippets/non-traditional-key-signatures.ly create mode 100644 Documentation/snippets/numbers-as-easy-note-heads.ly create mode 100644 Documentation/snippets/open-string-harmonics-in-tablature.ly create mode 100644 Documentation/snippets/orchestra,-choir-and-piano-template.ly create mode 100644 Documentation/snippets/ottava-text.ly create mode 100644 Documentation/snippets/outputting-the-version-number.ly rename {input/lsr => Documentation/snippets}/page-label.ly (84%) rename {input/lsr => Documentation/snippets}/paper-and-layout-intro.itely (100%) rename {input/lsr => Documentation/snippets}/paper-and-layout.snippet-list (85%) create mode 100644 Documentation/snippets/partcombine-and-autobeamoff.ly create mode 100644 Documentation/snippets/percent-repeat-count-visibility.ly create mode 100644 Documentation/snippets/percent-repeat-counter.ly rename {input/lsr => Documentation/snippets}/percussion-beaters.ly (93%) rename {input/lsr => Documentation/snippets}/percussion-intro.itely (100%) rename {input/lsr => Documentation/snippets}/percussion.snippet-list (100%) create mode 100644 Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly create mode 100644 Documentation/snippets/piano-template-simple.ly create mode 100644 Documentation/snippets/piano-template-with-centered-dynamics.ly create mode 100644 Documentation/snippets/piano-template-with-centered-lyrics.ly create mode 100644 Documentation/snippets/piano-template-with-melody-and-lyrics.ly create mode 100644 Documentation/snippets/pitches-headword.ly rename {input/lsr => Documentation/snippets}/pitches-intro.itely (100%) create mode 100644 Documentation/snippets/pitches.snippet-list create mode 100644 Documentation/snippets/placement-of-right-hand-fingerings.ly create mode 100644 Documentation/snippets/polyphony-in-tablature.ly create mode 100644 Documentation/snippets/positioning-arpeggios.ly rename {input/lsr => Documentation/snippets}/positioning-fingering-indications-precisely.ly (79%) create mode 100644 Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly create mode 100644 Documentation/snippets/positioning-grace-notes-with-floating-space.ly create mode 100644 Documentation/snippets/positioning-multi-measure-rests.ly rename {input/lsr => Documentation/snippets}/positioning-segno-and-coda-with-line-break.ly (86%) create mode 100644 Documentation/snippets/positioning-text-markups-inside-slurs.ly create mode 100644 Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly create mode 100644 Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly create mode 100644 Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly create mode 100644 Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly create mode 100644 Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly create mode 100644 Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly create mode 100644 Documentation/snippets/printing-hairpins-using-al-niente-notation.ly create mode 100644 Documentation/snippets/printing-marks-at-the-end-of-a-line.ly create mode 100644 Documentation/snippets/printing-marks-on-every-staff.ly create mode 100644 Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly create mode 100644 Documentation/snippets/printing-music-with-different-time-signatures.ly create mode 100644 Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly create mode 100644 Documentation/snippets/printing-text-from-right-to-left.ly create mode 100644 Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly create mode 100644 Documentation/snippets/proportional-strict-notespacing.ly create mode 100644 Documentation/snippets/putting-lyrics-inside-the-staff.ly create mode 100644 Documentation/snippets/quoting-another-voice-with-transposition.ly create mode 100644 Documentation/snippets/quoting-another-voice.ly create mode 100644 Documentation/snippets/recorder-fingering-chart.ly create mode 100644 Documentation/snippets/redefining-grace-note-global-defaults.ly create mode 100644 Documentation/snippets/removing-bar-numbers-from-a-score.ly create mode 100644 Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly create mode 100644 Documentation/snippets/removing-the-first-empty-line.ly create mode 100644 Documentation/snippets/repeats-headword.ly rename {input/lsr => Documentation/snippets}/repeats-intro.itely (100%) rename {input/lsr => Documentation/snippets}/repeats.snippet-list (85%) create mode 100644 Documentation/snippets/rest-styles.ly create mode 100644 Documentation/snippets/reverting-default-beam-endings.ly create mode 100644 Documentation/snippets/rhythmic-slashes.ly create mode 100644 Documentation/snippets/rhythms-headword.ly rename {input/lsr => Documentation/snippets}/rhythms-intro.itely (100%) rename {input/lsr => Documentation/snippets}/rhythms.snippet-list (76%) create mode 100644 Documentation/snippets/satb-choir-template---four-staves.ly create mode 100644 Documentation/snippets/score-for-diatonic-accordion.ly create mode 100644 Documentation/snippets/screech-boink.ly rename {input/lsr => Documentation/snippets}/separating-key-cancellations-from-key-signature-changes.ly (83%) create mode 100644 Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly create mode 100644 Documentation/snippets/setting-system-separators.ly create mode 100644 Documentation/snippets/setting-the-double-repeat-default-for-volte.ly create mode 100644 Documentation/snippets/setting-the-minimum-length-of-hairpins.ly create mode 100644 Documentation/snippets/shortening-volta-brackets.ly create mode 100644 Documentation/snippets/showing-chords-at-changes.ly create mode 100644 Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly create mode 100644 Documentation/snippets/simple-lead-sheet.ly create mode 100644 Documentation/snippets/simultaneous-headword.ly rename {input/lsr => Documentation/snippets}/simultaneous-notes-intro.itely (100%) rename {input/lsr => Documentation/snippets}/simultaneous-notes.snippet-list (90%) create mode 100644 Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly create mode 100644 Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly create mode 100644 Documentation/snippets/single-staff-template-with-notes-and-chords.ly create mode 100644 Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly create mode 100644 Documentation/snippets/single-staff-template-with-only-notes.ly create mode 100644 Documentation/snippets/skips-in-lyric-mode-2.ly create mode 100644 Documentation/snippets/skips-in-lyric-mode.ly create mode 100644 Documentation/snippets/slides-in-tablature.ly create mode 100644 Documentation/snippets/snap-pizzicato-bartok-pizzicato.ly rename {input/lsr => Documentation/snippets}/spacing-intro.itely (100%) rename {input/lsr => Documentation/snippets}/spacing.snippet-list (100%) create mode 100644 Documentation/snippets/staff-headword.ly rename {input/lsr => Documentation/snippets}/staff-notation-intro.itely (100%) create mode 100644 Documentation/snippets/staff-notation.snippet-list create mode 100644 Documentation/snippets/stand-alone-two-column-markup.ly create mode 100644 Documentation/snippets/stem-and-beam-behavior-in-tablature.ly create mode 100644 Documentation/snippets/stemlets.ly create mode 100644 Documentation/snippets/string-number-extender-lines.ly create mode 100644 Documentation/snippets/string-quartet-template-simple.ly create mode 100644 Documentation/snippets/string-quartet-template-with-separate-parts.ly create mode 100644 Documentation/snippets/subdividing-beams.ly create mode 100644 Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly create mode 100644 Documentation/snippets/table-of-contents.ly rename {input/lsr => Documentation/snippets}/template-intro.itely (100%) rename {input/lsr => Documentation/snippets}/template.snippet-list (86%) create mode 100644 Documentation/snippets/text-headword.ly rename {input/lsr => Documentation/snippets}/text-intro.itely (100%) rename {input/lsr => Documentation/snippets}/text.snippet-list (87%) create mode 100644 Documentation/snippets/three-sided-box.ly create mode 100644 Documentation/snippets/tick-bar-lines.ly create mode 100644 Documentation/snippets/time-signature-in-parentheses.ly create mode 100644 Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly rename {input/lsr => Documentation/snippets}/titles-intro.itely (100%) rename {input/lsr => Documentation/snippets}/titles.snippet-list (100%) create mode 100644 Documentation/snippets/transcription-of-ancient-music-with-incipit.ly create mode 100644 Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly create mode 100644 Documentation/snippets/tweaking-clef-properties.ly create mode 100644 Documentation/snippets/tweaking-grace-layout-within-music.ly rename {input/lsr => Documentation/snippets}/tweaks-and-overrides-intro.itely (100%) create mode 100644 Documentation/snippets/tweaks-and-overrides.snippet-list create mode 100644 Documentation/snippets/unfretted-headword.ly rename {input/lsr => Documentation/snippets}/unfretted-strings-intro.itely (100%) rename {input/lsr => Documentation/snippets}/unfretted-strings.snippet-list (79%) create mode 100644 Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly create mode 100644 Documentation/snippets/using-alternative-flag-styles.ly create mode 100644 Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly create mode 100644 Documentation/snippets/using-double-slurs-for-legato-chords.ly create mode 100644 Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly create mode 100644 Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly rename {input/lsr => Documentation/snippets}/using-postscript-to-generate-special-note-head-shapes.ly (80%) create mode 100644 Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly create mode 100644 Documentation/snippets/using-the-whiteout-property.ly create mode 100644 Documentation/snippets/using-ties-with-arpeggios.ly rename {input/lsr => Documentation/snippets}/utf-8.ly (81%) create mode 100644 Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly create mode 100644 Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly create mode 100644 Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly create mode 100644 Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly rename {input/lsr => Documentation/snippets}/vertically-centered-common-lyrics.ly (86%) create mode 100644 Documentation/snippets/vertically-centering-paired-figured-bass-extenders.ly create mode 100644 Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly create mode 100644 Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly create mode 100644 Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly create mode 100644 Documentation/snippets/vocal-ensemble-template.ly create mode 100644 Documentation/snippets/vocal-headword.ly rename {input/lsr => Documentation/snippets}/vocal-music-intro.itely (100%) create mode 100644 Documentation/snippets/vocal-music.snippet-list create mode 100644 Documentation/snippets/volta-below-chords.ly create mode 100644 Documentation/snippets/volta-multi-staff.ly rename {input/lsr => Documentation/snippets}/volta-text-markup-using-repeatcommands.ly (78%) create mode 100644 Documentation/snippets/wind-headword.ly rename {input/lsr => Documentation/snippets}/winds-intro.itely (100%) create mode 100644 Documentation/snippets/winds.snippet-list create mode 100644 Documentation/snippets/woodwind-diagrams-key-lists.ly create mode 100644 Documentation/snippets/woodwind-diagrams-listing.ly rename {input/lsr => Documentation/snippets}/world-music-intro.itely (100%) rename {input/lsr => Documentation/snippets}/world-music.snippet-list (100%) delete mode 100644 Documentation/texinfo.css delete mode 100644 Documentation/topdocs/NEWS.tely delete mode 100644 Documentation/translations.html.in create mode 100644 Documentation/translations.itexi delete mode 100644 Documentation/translations.template.html.in create mode 100644 Documentation/usage.tely create mode 100644 Documentation/usage/GNUmakefile create mode 100644 Documentation/usage/external.itely rename Documentation/{user => usage}/latex-example.latex (92%) rename Documentation/{user => usage}/latex-lilypond-example.latex (82%) create mode 100644 Documentation/usage/lilypond-book.itely create mode 100644 Documentation/usage/running.itely create mode 100644 Documentation/usage/suggestions.itely create mode 100644 Documentation/usage/updating.itely delete mode 100644 Documentation/user/GNUmakefile delete mode 100644 Documentation/user/README.txt delete mode 100644 Documentation/user/ancient.itely delete mode 100644 Documentation/user/baer-flat-gray.png delete mode 100644 Documentation/user/changing-defaults.itely delete mode 100644 Documentation/user/cheatsheet.itely delete mode 100644 Documentation/user/chords.itely delete mode 100644 Documentation/user/compile.itely delete mode 100644 Documentation/user/converters.itely delete mode 100644 Documentation/user/dedication.itely delete mode 100644 Documentation/user/editorial.itely delete mode 100644 Documentation/user/expressive.itely delete mode 100644 Documentation/user/fdl.itexi delete mode 100644 Documentation/user/fretted-strings.itely delete mode 100644 Documentation/user/fundamental.itely delete mode 100644 Documentation/user/glossary.html.in delete mode 100644 Documentation/user/henle-flat-gray.png delete mode 100644 Documentation/user/input.itely delete mode 100644 Documentation/user/install.itely delete mode 100644 Documentation/user/introduction.itely delete mode 100644 Documentation/user/keyboards.itely delete mode 100644 Documentation/user/lily-flat-bw.png delete mode 100644 Documentation/user/lilypond-book.itely delete mode 100644 Documentation/user/lilypond-learning.tely delete mode 100644 Documentation/user/lilypond-program.tely delete mode 100644 Documentation/user/lilypond.tely delete mode 100644 Documentation/user/literature.itely delete mode 100644 Documentation/user/notation-appendices.itely delete mode 100644 Documentation/user/notation.itely delete mode 100644 Documentation/user/percussion.itely delete mode 100644 Documentation/user/pitches.itely delete mode 100644 Documentation/user/preface.itely delete mode 100644 Documentation/user/programming-interface.itely delete mode 100644 Documentation/user/repeats.itely delete mode 100644 Documentation/user/rhythms.itely delete mode 100644 Documentation/user/running.itely delete mode 100644 Documentation/user/scheme-tutorial.itely delete mode 100644 Documentation/user/setup.itely delete mode 100644 Documentation/user/simultaneous.itely delete mode 100644 Documentation/user/spacing.itely delete mode 100644 Documentation/user/specialist.itely delete mode 100644 Documentation/user/staff.itely delete mode 100644 Documentation/user/templates.itely delete mode 100644 Documentation/user/text.itely delete mode 100644 Documentation/user/tutorial.itely delete mode 100644 Documentation/user/tweaks.itely delete mode 100644 Documentation/user/unfretted-strings.itely delete mode 100644 Documentation/user/vocal.itely delete mode 100644 Documentation/user/wind.itely delete mode 100644 Documentation/user/working.itely delete mode 100644 Documentation/user/world.itely create mode 100644 Documentation/web.texi create mode 100644 Documentation/web/GNUmakefile create mode 100644 Documentation/web/community.itexi create mode 100644 Documentation/web/download.itexi create mode 100644 Documentation/web/introduction.itexi create mode 100644 Documentation/web/ly-examples/GNUmakefile create mode 100644 Documentation/web/ly-examples/ancient-headword.ly create mode 100644 Documentation/web/ly-examples/aucun-snippet.ly create mode 100644 Documentation/web/ly-examples/bach-bwv610.ly create mode 100644 Documentation/web/ly-examples/bach-schenker.ly create mode 100644 Documentation/web/ly-examples/cary-layout.ily rename {input => Documentation/web/ly-examples}/cary.ly (96%) create mode 100644 Documentation/web/ly-examples/chart.ly create mode 100644 Documentation/web/ly-examples/example-header.ily create mode 100644 Documentation/web/ly-examples/granados.ly create mode 100644 Documentation/web/ly-examples/orchestra.ly create mode 100644 Documentation/web/ly-examples/sesto-full.ly create mode 100644 Documentation/web/ly-examples/sesto-piano.ly create mode 100644 Documentation/web/ly-examples/sesto-violin.ly create mode 100644 Documentation/web/ly-examples/sesto.ily create mode 100644 Documentation/web/ly-examples/tab-example.ly create mode 100644 Documentation/web/ly-examples/theory.ly create mode 100644 Documentation/web/manuals.itexi create mode 100644 Documentation/web/news-front.itexi create mode 100644 Documentation/web/news.itexi create mode 100644 Documentation/web/others-did.bib create mode 100644 Documentation/web/server/GNUmakefile create mode 100644 Documentation/web/server/favicon.ico create mode 100644 Documentation/web/server/lilypond.org.htaccess create mode 100644 Documentation/web/server/robots.txt create mode 100644 Documentation/web/server/website-dir.htaccess create mode 100644 Documentation/web/we-wrote.bib create mode 100644 Documentation/zh/GNUmakefile create mode 100644 Documentation/zh/macros.itexi create mode 100644 Documentation/zh/search-box.ihtml create mode 100644 Documentation/zh/texidocs/GNUmakefile create mode 100644 Documentation/zh/translations.itexi create mode 100644 Documentation/zh/web.texi create mode 100644 Documentation/zh/web/GNUmakefile create mode 100644 Documentation/zh/web/community.itexi create mode 100644 Documentation/zh/web/download.itexi create mode 100644 Documentation/zh/web/introduction.itexi create mode 100644 Documentation/zh/web/manuals.itexi create mode 100644 Documentation/zh/web/news-front.itexi create mode 100644 LICENSE create mode 100644 LICENSE.DOCUMENTATION delete mode 100644 flower/rtti.cc delete mode 100644 input/bach-schenker.ly delete mode 100644 input/cary-layout.ly delete mode 100644 input/example-1.ly delete mode 100644 input/example-2.ly delete mode 100644 input/example-3.ly delete mode 100644 input/lsr/GNUmakefile delete mode 100644 input/lsr/README delete mode 100644 input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly delete mode 100644 input/lsr/adding-ambitus-per-voice.ly delete mode 100644 input/lsr/adding-an-extra-staff-at-a-line-break.ly delete mode 100644 input/lsr/adding-an-extra-staff.ly delete mode 100644 input/lsr/adding-bar-lines-to-chordnames-context.ly delete mode 100644 input/lsr/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly delete mode 100644 input/lsr/adding-fingerings-to-a-score.ly delete mode 100644 input/lsr/adding-fingerings-to-tablatures.ly delete mode 100644 input/lsr/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly delete mode 100644 input/lsr/adding-the-current-date-to-a-score.ly delete mode 100644 input/lsr/adding-volta-brackets-to-additional-staves.ly delete mode 100644 input/lsr/additional-voices-to-avoid-collisions.ly delete mode 100644 input/lsr/adjusting-lyrics-vertical-spacing.ly delete mode 100644 input/lsr/adjusting-the-shape-of-falls-and-doits.ly delete mode 100644 input/lsr/aligning-and-centering-instrument-names.ly delete mode 100644 input/lsr/aligning-bar-numbers.ly delete mode 100644 input/lsr/aligning-marks-with-various-notation-objects.ly delete mode 100644 input/lsr/aligning-objects-created-with-the--mark-command.ly delete mode 100644 input/lsr/allowing-fingerings-to-be-printed-inside-the-staff.ly delete mode 100644 input/lsr/ambitus-with-multiple-voices.ly delete mode 100644 input/lsr/ambitus.ly delete mode 100644 input/lsr/analysis-brackets-above-the-staff.ly delete mode 100644 input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly delete mode 100644 input/lsr/ancient-time-signatures.ly delete mode 100644 input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly delete mode 100644 input/lsr/arabic-improvisation.ly delete mode 100644 input/lsr/automatic-beam-subdivisions.ly delete mode 100644 input/lsr/avoiding-collisions-with-chord-fingerings.ly delete mode 100644 input/lsr/beam-endings-in-score-context.ly delete mode 100644 input/lsr/beam-grouping-in-7-8-time.ly delete mode 100644 input/lsr/beams-across-line-breaks.ly delete mode 100644 input/lsr/blanking-staff-lines-using-the--whiteout-command.ly delete mode 100644 input/lsr/broken-crescendo-hairpin.ly delete mode 100644 input/lsr/caesura-railtracks-with-fermata.ly delete mode 100644 input/lsr/center-text-below-hairpin-dynamics.ly delete mode 100644 input/lsr/changing--flageolet-mark-size.ly delete mode 100644 input/lsr/changing-a-single-notes-size-in-a-chord.ly delete mode 100644 input/lsr/changing-beam-knee-gap.ly delete mode 100644 input/lsr/changing-chord-separator.ly delete mode 100644 input/lsr/changing-form-of-multi-measure-rests.ly delete mode 100644 input/lsr/changing-midi-output-to-one-channel-per-voice.ly delete mode 100644 input/lsr/changing-partcombine-texts.ly delete mode 100644 input/lsr/changing-stanza-fonts.ly delete mode 100644 input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly delete mode 100644 input/lsr/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly delete mode 100644 input/lsr/changing-the-breath-mark-symbol.ly delete mode 100644 input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly delete mode 100644 input/lsr/changing-the-default-text-font-family.ly delete mode 100644 input/lsr/changing-the-number-of-lines-in-a-staff.ly delete mode 100644 input/lsr/changing-the-positions-of-figured-bass-alterations.ly delete mode 100644 input/lsr/changing-the-staff-size.ly delete mode 100644 input/lsr/changing-the-tempo-without-a-metronome-mark.ly delete mode 100644 input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly delete mode 100644 input/lsr/changing-the-tuplet-number.ly delete mode 100644 input/lsr/chant-or-psalms-notation.ly delete mode 100644 input/lsr/chord-name-exceptions.ly delete mode 100644 input/lsr/chord-name-major7.ly delete mode 100644 input/lsr/clip-systems.ly delete mode 100644 input/lsr/clusters.ly delete mode 100644 input/lsr/coloring-notes-depending-on-their-pitch.ly delete mode 100644 input/lsr/combining-dynamics-with-markup-texts.ly delete mode 100644 input/lsr/combining-two-parts-on-the-same-staff.ly delete mode 100644 input/lsr/compound-time-signatures.ly delete mode 100644 input/lsr/conducting-signs,-measure-grouping-signs.ly delete mode 100644 input/lsr/contemporary-glissando.ly delete mode 100644 input/lsr/controlling-the-placement-of-chord-fingerings.ly delete mode 100644 input/lsr/controlling-the-vertical-ordering-of-scripts.ly delete mode 100644 input/lsr/controlling-tuplet-bracket-visibility.ly delete mode 100644 input/lsr/creating-a-delayed-turn.ly delete mode 100644 input/lsr/creating-arpeggios-across-notes-in-different-voices.ly delete mode 100644 input/lsr/creating-blank-staves.ly delete mode 100644 input/lsr/creating-cross-staff-arpeggios-in-a-piano-staff.ly delete mode 100644 input/lsr/creating-cross-staff-arpeggios-in-other-contexts.ly delete mode 100644 input/lsr/creating-metronome-marks-in-markup-mode.ly delete mode 100644 input/lsr/creating-real-parenthesized-dynamics.ly delete mode 100644 input/lsr/custodes.ly delete mode 100644 input/lsr/default-direction-of-stems-on-the-center-line-of-the-staff.ly delete mode 100644 input/lsr/defining-predefined-fretboards-for-other-instruments.ly delete mode 100644 input/lsr/display-bracket-with-only-one-staff-in-a-system.ly delete mode 100644 input/lsr/displaying-complex-chords.ly delete mode 100644 input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly delete mode 100644 input/lsr/dotted-harmonics.ly delete mode 100644 input/lsr/double-glissando.ly delete mode 100644 input/lsr/drawing-boxes-around-grobs.ly delete mode 100644 input/lsr/embedding-native-postscript-in-a--markup-block.ly delete mode 100644 input/lsr/engravers-one-by-one.ly delete mode 100644 input/lsr/engraving-ties-manually.ly delete mode 100644 input/lsr/entering-several-tuplets-using-only-one--times-command.ly delete mode 100644 input/lsr/expressive-marks.snippet-list delete mode 100644 input/lsr/faking-a-hammer-in-tablatures.ly delete mode 100644 input/lsr/fine-tuning-pedal-brackets.ly delete mode 100644 input/lsr/fingerings,-string-indications,-and-right-hand-fingerings.ly delete mode 100644 input/lsr/flamenco-notation.ly delete mode 100644 input/lsr/flat-flags-and-beam-nibs.ly delete mode 100644 input/lsr/flute-slap-notation.ly delete mode 100644 input/lsr/forcing-horizontal-shift-of-notes.ly delete mode 100644 input/lsr/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly delete mode 100644 input/lsr/formatting-lyrics-syllables.ly delete mode 100644 input/lsr/fretted-strings.snippet-list delete mode 100644 input/lsr/grid-lines--changing-their-appearance.ly delete mode 100644 input/lsr/grouping-beats.ly delete mode 100644 input/lsr/guitar-strum-rhythms.ly delete mode 100644 input/lsr/heavily-customized-polymetric-time-signatures.ly delete mode 100644 input/lsr/hiding-the-extender-line-for-text-dynamics.ly delete mode 100644 input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly delete mode 100644 input/lsr/how-to-put-ties-between-syllables-in-lyrics.ly delete mode 100644 input/lsr/incipit.ly delete mode 100644 input/lsr/indicating-cross-staff-chords-with-arpeggio-bracket.ly delete mode 100644 input/lsr/inserting-a-caesura.ly delete mode 100644 input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly delete mode 100644 input/lsr/isolated-percent-repeats.ly delete mode 100644 input/lsr/laissez-vibrer-ties.ly delete mode 100644 input/lsr/letter-tablature-formatting.ly delete mode 100644 input/lsr/lilypond-snippets.tely delete mode 100644 input/lsr/lyrics-alignment.ly delete mode 100644 input/lsr/makam-example.ly delete mode 100644 input/lsr/making-an-object-invisible-with-the-transparent-property.ly delete mode 100644 input/lsr/making-some-staff-lines-thicker-than-the-others.ly delete mode 100644 input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly delete mode 100644 input/lsr/manually-controlling-beam-positions.ly delete mode 100644 input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly delete mode 100644 input/lsr/measure-counter.ly delete mode 100644 input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly delete mode 100644 input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly delete mode 100644 input/lsr/modern-tab-text-clef.ly delete mode 100644 input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly delete mode 100644 input/lsr/multi-measure-rest-markup.ly delete mode 100644 input/lsr/nesting-staves.ly delete mode 100644 input/lsr/non-traditional-key-signatures.ly delete mode 100644 input/lsr/orchestra,-choir-and-piano-template.ly delete mode 100644 input/lsr/ottava-text.ly delete mode 100644 input/lsr/outputting-the-version-number.ly delete mode 100644 input/lsr/percent-repeat-count-visibility.ly delete mode 100644 input/lsr/percent-repeat-counter.ly delete mode 100644 input/lsr/permitting-line-breaks-within-beamed-tuplets.ly delete mode 100644 input/lsr/piano-template-simple.ly delete mode 100644 input/lsr/piano-template-with-centered-dynamics.ly delete mode 100644 input/lsr/piano-template-with-centered-lyrics.ly delete mode 100644 input/lsr/piano-template-with-melody-and-lyrics.ly delete mode 100644 input/lsr/pitches.snippet-list delete mode 100644 input/lsr/placement-of-right-hand-fingerings.ly delete mode 100644 input/lsr/polyphony-in-tablature.ly delete mode 100644 input/lsr/positioning-grace-notes-with-floating-space.ly delete mode 100644 input/lsr/positioning-multi-measure-rests.ly delete mode 100644 input/lsr/positioning-text-markups-inside-slurs.ly delete mode 100644 input/lsr/preventing-extra-naturals-from-being-automatically-added.ly delete mode 100644 input/lsr/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly delete mode 100644 input/lsr/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly delete mode 100644 input/lsr/printing-bar-numbers-at-regular-intervals.ly delete mode 100644 input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly delete mode 100644 input/lsr/printing-hairpins-using-al-niente-notation.ly delete mode 100644 input/lsr/printing-marks-at-the-end-of-a-line-or-a-score.ly delete mode 100644 input/lsr/printing-marks-on-every-staff.ly delete mode 100644 input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly delete mode 100644 input/lsr/printing-music-with-different-time-signatures.ly delete mode 100644 input/lsr/printing-text-from-right-to-left.ly delete mode 100644 input/lsr/printing-the-bar-number-for-the-first-measure.ly delete mode 100644 input/lsr/proportional-strict-notespacing.ly delete mode 100644 input/lsr/quoting-another-voice-with-transposition.ly delete mode 100644 input/lsr/quoting-another-voice.ly delete mode 100644 input/lsr/redefining-grace-note-global-defaults.ly delete mode 100644 input/lsr/removing-bar-numbers-from-a-score.ly delete mode 100644 input/lsr/removing-the-first-empty-line.ly delete mode 100644 input/lsr/rest-styles.ly delete mode 100644 input/lsr/reverting-default-beam-endings.ly delete mode 100644 input/lsr/rhythmic-slashes.ly delete mode 100644 input/lsr/score-for-diatonic-accordion.ly delete mode 100644 input/lsr/setting-hairpin-behavior-at-bar-lines.ly delete mode 100644 input/lsr/setting-the-minimum-length-of-hairpins.ly delete mode 100644 input/lsr/shortening-volta-brackets.ly delete mode 100644 input/lsr/showing-chords-at-changes.ly delete mode 100644 input/lsr/simple-lead-sheet.ly delete mode 100644 input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly delete mode 100644 input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly delete mode 100644 input/lsr/single-staff-template-with-notes-and-chords.ly delete mode 100644 input/lsr/single-staff-template-with-notes-and-lyrics.ly delete mode 100644 input/lsr/single-staff-template-with-only-notes.ly delete mode 100644 input/lsr/skips-in-lyric-mode-2.ly delete mode 100644 input/lsr/skips-in-lyric-mode.ly delete mode 100644 input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly delete mode 100644 input/lsr/specifying-context-with-beatgrouping.ly delete mode 100644 input/lsr/staff-notation.snippet-list delete mode 100644 input/lsr/stand-alone-two-column-markup.ly delete mode 100644 input/lsr/stem-and-beam-behavior-in-tablature.ly delete mode 100644 input/lsr/stemlets.ly delete mode 100644 input/lsr/string-quartet-template-simple.ly delete mode 100644 input/lsr/string-quartet-template-with-separate-parts.ly delete mode 100644 input/lsr/sub-dividing-beams.ly delete mode 100644 input/lsr/suppressing-warnings-for-clashing-note-columns.ly delete mode 100644 input/lsr/table-of-contents.ly delete mode 100644 input/lsr/three-sided-box.ly delete mode 100644 input/lsr/tick-bar-lines.ly delete mode 100644 input/lsr/time-signature-in-parentheses.ly delete mode 100644 input/lsr/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly delete mode 100644 input/lsr/transcription-of-ancient-music-with-incipit.ly delete mode 100644 input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly delete mode 100644 input/lsr/tweaking-clef-properties.ly delete mode 100644 input/lsr/tweaking-grace-layout-within-music.ly delete mode 100644 input/lsr/tweaks-and-overrides.snippet-list delete mode 100644 input/lsr/use-square-bracket-at-the-start-of-a-staff-group.ly delete mode 100644 input/lsr/using-beatlength-and-beatgrouping.ly delete mode 100644 input/lsr/using-double-slurs-for-legato-chords.ly delete mode 100644 input/lsr/using-grace-note-slashes-with-normal-heads.ly delete mode 100644 input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly delete mode 100644 input/lsr/using-ties-with-arpeggios.ly delete mode 100644 input/lsr/vertical-line-as-a-baroque-articulation-mark.ly delete mode 100644 input/lsr/vertically-aligned-dynamics-and-textscripts.ly delete mode 100644 input/lsr/vertically-aligning-dynamics-across-multiple-notes.ly delete mode 100644 input/lsr/vertically-aligning-ossias-and-lyrics.ly delete mode 100644 input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly delete mode 100644 input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly delete mode 100644 input/lsr/vocal-ensemble-template.ly delete mode 100644 input/lsr/vocal-music.snippet-list delete mode 100644 input/lsr/volta-below-chords.ly delete mode 100644 input/lsr/volta-multi-staff.ly delete mode 100644 input/lsr/winds.snippet-list delete mode 100644 input/manual/GNUmakefile delete mode 100644 input/manual/README delete mode 100644 input/manual/ancient-headword.ly delete mode 100644 input/manual/chord-names-languages.ly delete mode 100644 input/manual/chords-headword.ly delete mode 100644 input/manual/divisiones.ly delete mode 100644 input/manual/editorial-headword.ly delete mode 100644 input/manual/expressive-headword.ly delete mode 100644 input/manual/figured-bass-headword.ly delete mode 100644 input/manual/font-table.ly delete mode 100644 input/manual/fretted-headword.ly delete mode 100644 input/manual/keyboard-headword.ly delete mode 100644 input/manual/pitches-headword.ly delete mode 100644 input/manual/repeats-headword.ly delete mode 100644 input/manual/rhythms-headword.ly delete mode 100644 input/manual/screech-boink.ly delete mode 100644 input/manual/script-chart.ly delete mode 100644 input/manual/simultaneous-headword.ly delete mode 100644 input/manual/staff-headword.ly delete mode 100644 input/manual/text-headword.ly delete mode 100644 input/manual/unfretted-headword.ly delete mode 100644 input/manual/wind-headword.ly delete mode 100644 input/mutopia-header.ly delete mode 100644 input/mutopia/E.Satie/GNUmakefile delete mode 100644 input/mutopia/E.Satie/petite-ouverture-a-danser.ly delete mode 100644 input/mutopia/F.Schubert/GNUmakefile delete mode 100644 input/mutopia/F.Schubert/standchen.ly delete mode 100644 input/mutopia/GNUmakefile delete mode 100644 input/mutopia/J.S.Bach/GNUmakefile delete mode 100644 input/mutopia/J.S.Bach/bwv940.ly delete mode 100644 input/mutopia/J.S.Bach/wtk1-fugue2.ly delete mode 100644 input/mutopia/R.Schumann/GNUmakefile delete mode 100644 input/mutopia/R.Schumann/romanze-op28-2.ly delete mode 100644 input/mutopia/W.A.Mozart/GNUmakefile delete mode 100644 input/mutopia/claop.py delete mode 100644 input/new/GNUmakefile delete mode 100644 input/new/README delete mode 100644 input/paddy.abc delete mode 100644 input/proportional.ly delete mode 100644 input/puer-fragment.ly mode change 100644 => 100755 input/regression/AAA-intro-regression.tely create mode 100644 input/regression/abc2ly/GNUmakefile create mode 100644 input/regression/abc2ly/clefs.abc create mode 100644 input/regression/abc2ly/grace.abc create mode 100644 input/regression/abc2ly/kirchentonarten.abc create mode 100644 input/regression/abc2ly/tempo.abc create mode 100644 input/regression/abc2ly/tuplet-slur.abc create mode 100644 input/regression/accidental-placement-padding.ly create mode 100644 input/regression/accidental-tie-overridden.ly delete mode 100644 input/regression/alignment-vertical-spacing.ly create mode 100644 input/regression/ambitus-gap.ly create mode 100644 input/regression/ambitus-with-ligature.ly create mode 100644 input/regression/arpeggio-no-staff-symbol.ly create mode 100644 input/regression/arpeggio-span-collision.ly create mode 100644 input/regression/articulation-snappizzicato.ly delete mode 100644 input/regression/auto-beam-beat-grouping.ly create mode 100644 input/regression/auto-beam-breathe.ly create mode 100644 input/regression/auto-beam-partial-grace.ly create mode 100644 input/regression/auto-beam-partial.ly create mode 100644 input/regression/auto-beam-recheck.ly create mode 100644 input/regression/autobeam-nobeam.ly create mode 100644 input/regression/autobeam-show-defaults.ly create mode 100644 input/regression/autobeam-start-at-beginning-of-measure-in-3-4.ly create mode 100644 input/regression/automatic-polyphony-context-id.ly create mode 100644 input/regression/automatic-polyphony-drumstaff.ly create mode 100644 input/regression/automatic-polyphony-tabstaff.ly rename input/{mutopia/J.S.Bach => regression}/baerenreiter-sarabande.ly (81%) create mode 100644 input/regression/bar-extent.ly create mode 100644 input/regression/bar-line-segno.ly create mode 100644 input/regression/bar-line-thick.ly create mode 100644 input/regression/beam-collision-accidentals.ly create mode 100644 input/regression/beam-collision-basic.ly create mode 100644 input/regression/beam-collision-beamcount.ly create mode 100644 input/regression/beam-collision-classic.ly create mode 100644 input/regression/beam-collision-cross-staff.ly create mode 100644 input/regression/beam-collision-feasible-region.ly create mode 100644 input/regression/beam-collision-grace.ly create mode 100644 input/regression/beam-collision-large-object.ly create mode 100644 input/regression/beam-collision-off.ly create mode 100644 input/regression/beam-collision-opposite-stem.ly create mode 100644 input/regression/beam-collision-prefatory-matter.ly create mode 100644 input/regression/beam-collision-scaled-staff.ly create mode 100644 input/regression/beam-collision-voice-only.ly create mode 100644 input/regression/beam-feather-breaking.ly create mode 100644 input/regression/beam-forced-direction.ly create mode 100644 input/regression/beam-skip.ly create mode 100644 input/regression/book-identifier-markup.ly create mode 100644 input/regression/book-label-no-segfault.ly create mode 100644 input/regression/bookpart-variable.ly create mode 100644 input/regression/breathing-sign-custom-staff.ly create mode 100644 input/regression/center-title.ly create mode 100644 input/regression/chord-names-in-grand-staff.ly create mode 100644 input/regression/chord-names-lower-case-minor.ly create mode 100644 input/regression/chord-repetition-relative.ly create mode 100644 input/regression/chord-repetition-script-stack.ly create mode 100644 input/regression/chord-repetition.ly create mode 100644 input/regression/chord-tremolo-articulations.ly create mode 100644 input/regression/chord-tremolo-other-commands.ly create mode 100644 input/regression/chordnames-nochord.ly create mode 100644 input/regression/clef-oct-visibility.ly create mode 100644 input/regression/clef-octavation.ly create mode 100644 input/regression/completion-heads-factor.ly create mode 100644 input/regression/completion-heads-polyphony-2.ly create mode 100644 input/regression/completion-heads-tuplets.ly create mode 100644 input/regression/completion-rest.ly create mode 100644 input/regression/compound-time-signatures.ly create mode 100644 input/regression/context-mod-context.ly create mode 100644 input/regression/context-mod-with.ly create mode 100644 input/regression/cue-clef-begin-of-score.ly create mode 100644 input/regression/cue-clef-keysignature.ly create mode 100644 input/regression/cue-clef-new-line.ly create mode 100644 input/regression/cue-clef-octavation.ly create mode 100644 input/regression/cue-clef.ly create mode 100644 input/regression/dead-notes.ly create mode 100644 input/regression/dot-column-note-collision.ly create mode 100644 input/regression/dot-rest-horizontal-spacing.ly create mode 100644 input/regression/duration-identifier-compressed.ly create mode 100644 input/regression/dynamics-alignment-breaker.ly create mode 100644 input/regression/dynamics-alignment-no-line.ly create mode 100644 input/regression/dynamics-context-textspan.ly create mode 100644 input/regression/dynamics-custom-text-spanner-postfix.ly create mode 100644 input/regression/dynamics-rest-positioning.ly create mode 100644 input/regression/dynamics-text-left-text-alignment.ly create mode 100644 input/regression/dynamics-text-right-padding.ly create mode 100644 input/regression/dynamics-text-spanner-postfix.ly create mode 100644 input/regression/easy-notation-accidentals.ly create mode 100644 input/regression/episema.ly create mode 100644 input/regression/figured-bass-continuation-end-position.ly create mode 100644 input/regression/figured-bass-durations.ly create mode 100644 input/regression/figured-bass-extenders-markup.ly create mode 100644 input/regression/figured-bass-ignore-rest.ly create mode 100644 input/regression/filter-translators.ly create mode 100644 input/regression/font-name-font-size.ly create mode 100644 input/regression/footnote-break-visibility.ly create mode 100644 input/regression/footnote-footer-padding.ly create mode 100644 input/regression/footnote-spanner.ly create mode 100644 input/regression/footnote.ly create mode 100644 input/regression/fret-diagrams-size.ly create mode 100644 input/regression/fretboard-chordchanges.ly create mode 100644 input/regression/full-measure-rest-fermata.ly create mode 100644 input/regression/glissando-broken-unkilled.ly create mode 100644 input/regression/glissando-chord-linebreak.ly create mode 100644 input/regression/glissando-chord.ly create mode 100644 input/regression/glissando-consecutive.ly create mode 100644 input/regression/glissando-index.ly create mode 100644 input/regression/hairpin-neighboring-span-dynamics.ly create mode 100644 input/regression/hara-kiri-alive-with.ly create mode 100644 input/regression/hara-kiri-drumstaff.ly create mode 100644 input/regression/hara-kiri-keep-previous-settings.ly delete mode 100644 input/regression/hara-kiri-pianostaff.ly create mode 100644 input/regression/hara-kiri-rhythmicstaff.ly create mode 100644 input/regression/hara-kiri-staff.ly create mode 100644 input/regression/hara-kiri-tabstaff.ly create mode 100644 input/regression/horizontal-bracket-tweak.ly create mode 100644 input/regression/include-string.ly create mode 100644 input/regression/incompatible-stem-warning.ly create mode 100644 input/regression/instrument-cue-name.ly create mode 100644 input/regression/instrument-name-groups.ly create mode 100644 input/regression/instrument-name-volta.ly create mode 100644 input/regression/invalid-engraver.ly delete mode 100644 input/regression/key-signature-cancellation-extra-natural.ly create mode 100644 input/regression/key-signature-left-edge.ly create mode 100644 input/regression/key-signature-space.ly create mode 100644 input/regression/laissez-vibrer-arpeggio.ly create mode 100644 input/regression/laissez-vibrer-tie-head-direction.ly rename input/{ => regression}/les-nereides.ly (85%) create mode 100644 input/regression/lilypond-book/GNUmakefile create mode 100644 input/regression/lilypond-book/html-include-space-after-tag.html create mode 100644 input/regression/lilypond-book/html-inline-newline-during-tag.html create mode 100644 input/regression/lilypond-book/html-inline-no-options.html create mode 100644 input/regression/lilypond-book/html-inline-option.html create mode 100644 input/regression/lilypond-book/html-lilypond-block.html create mode 100644 input/regression/lilypond-book/html-newline-after-tag.html create mode 100644 input/regression/lilypond-book/html-space-after-tag.html create mode 100644 input/regression/lilypond-book/html-version-newline.html create mode 100644 input/regression/lilypond-book/html-version.html create mode 100644 input/regression/lilypond-book/include.ly create mode 100644 input/regression/lilypond-book/include2.ly create mode 100644 input/regression/lilypond-book/include3.ily create mode 100644 input/regression/lilypond-book/papersize-docs.tely create mode 100644 input/regression/lilypond-book/suffix-html.html create mode 100644 input/regression/lilypond-book/suffix-htmly.htmly create mode 100644 input/regression/lilypond-book/suffix-itely.itely create mode 100644 input/regression/lilypond-book/suffix-latex.latex create mode 100644 input/regression/lilypond-book/suffix-lytex.lytex create mode 100644 input/regression/lilypond-book/suffix-lyxml.lyxml create mode 100644 input/regression/lilypond-book/suffix-tely.tely create mode 100644 input/regression/lilypond-book/suffix-tex.tex create mode 100644 input/regression/lilypond-book/suffix-texi.texi create mode 100644 input/regression/lilypond-book/suffix-texinfo.texinfo create mode 100644 input/regression/lilypond-book/suffix-xml.xml create mode 100644 input/regression/lilypond-book/tex-auto-linebreak.lytex create mode 100644 input/regression/lilypond-book/tex-comment-firstline.lytex create mode 100644 input/regression/lilypond-book/tex-comments.lytex create mode 100644 input/regression/lilypond-book/tex-compatibility-mode.lytex create mode 100644 input/regression/lilypond-book/tex-footnote.lytex create mode 100644 input/regression/lilypond-book/tex-fragment.lytex create mode 100644 input/regression/lilypond-book/tex-graphics-package-added.lytex create mode 100644 input/regression/lilypond-book/tex-include-file.lytex create mode 100644 input/regression/lilypond-book/tex-include-options.lytex create mode 100644 input/regression/lilypond-book/tex-inline-lilypond.lytex create mode 100644 input/regression/lilypond-book/tex-lilypond-block.lytex create mode 100644 input/regression/lilypond-book/tex-lilypond-inside-itemize.lytex create mode 100644 input/regression/lilypond-book/tex-lilypond-inside-table.lytex create mode 100644 input/regression/lilypond-book/tex-lilypondversion.lytex create mode 100644 input/regression/lilypond-book/tex-paragraphs.lytex create mode 100644 input/regression/lilypond-book/tex-snippet-options.lytex create mode 100644 input/regression/lilypond-book/tex-twocolumn.lytex create mode 100644 input/regression/lilypond-book/tex-verbatim.lytex create mode 100644 input/regression/lilypond-book/tex-version.lytex create mode 100644 input/regression/lilypond-book/texinfo-include-language-detection-included.itely create mode 100644 input/regression/lilypond-book/texinfo-include-language-detection.tely create mode 100644 input/regression/lilypond-book/texinfo-language-detection.tely create mode 100644 input/regression/lyric-combine-empty-warning.ly create mode 100644 input/regression/lyric-extender-completion.ly create mode 100644 input/regression/lyric-extender-includegraces.ly create mode 100644 input/regression/lyric-hyphen-grace.ly create mode 100644 input/regression/lyric-melisma-alignment.ly create mode 100644 input/regression/lyric-melisma-melisma.ly create mode 100644 input/regression/lyrics-aligned-above-stay-close-to-staff.ly create mode 100644 input/regression/lyrics-includegraces.ly create mode 100644 input/regression/markup-bidi-explicit-embedding.ly create mode 100644 input/regression/markup-bidi-explicit-overrides.ly create mode 100644 input/regression/markup-bidi-implicit-marks.ly create mode 100644 input/regression/markup-brace-warning.ly create mode 100644 input/regression/markup-braces.ly create mode 100644 input/regression/markup-diacritic-marks.ly create mode 100644 input/regression/markup-eyeglasses.ly create mode 100644 input/regression/markup-lines-identifier.ly create mode 100644 input/regression/markup-note-grob-style.ly create mode 100644 input/regression/markup-note-styles.ly create mode 100644 input/regression/markup-path-fill.ly create mode 100644 input/regression/markup-path-linecap.ly create mode 100644 input/regression/markup-path-linejoin.ly create mode 100644 input/regression/markup-path.ly create mode 100644 input/regression/markup-score-multi-system.ly create mode 100644 input/regression/metronome-mark-loose-column.ly create mode 100644 input/regression/metronome-marking-align-order.ly create mode 100644 input/regression/metronome-marking-break-align.ly create mode 100644 input/regression/metronome-multimeasure-rest-no-segfault.ly create mode 100644 input/regression/metronome-range.ly create mode 100644 input/regression/midi-key-signature.ly create mode 100644 input/regression/midi-notes.ly create mode 100644 input/regression/midi-unisons.ly create mode 100644 input/regression/midi/GNUmakefile create mode 100644 input/regression/midi/key-initial.ly create mode 100644 input/regression/midi/key-option-all-staves.ly create mode 100644 input/regression/midi/key-option.ly create mode 100644 input/regression/midi/lyrics-addlyrics.ly create mode 100644 input/regression/midi/partcombine.ly create mode 100644 input/regression/midi/quantize-duration-2.ly create mode 100644 input/regression/midi/quantize-duration.ly create mode 100644 input/regression/midi/quantize-start.ly create mode 100644 input/regression/midi/rest-dynamic.ly create mode 100644 input/regression/midi/rest.ly create mode 100644 input/regression/midi/staff-map-instrument.ly create mode 100644 input/regression/midi/staff-map-voice.ly create mode 100644 input/regression/midi/voice-2.ly create mode 100644 input/regression/midi/voice-4.ly create mode 100644 input/regression/midi/voice-5.ly create mode 100644 input/regression/modal-transforms.ly create mode 100644 input/regression/modern-tab-clef-scaled.ly create mode 100644 input/regression/modern-tab-clef.ly rename input/{mutopia/F.Schubert => regression}/morgenlied.ly (96%) rename input/{mutopia/W.A.Mozart => regression}/mozart-hrn-3.ly (82%) rename input/{mutopia/W.A.Mozart => regression}/mozart-hrn3-allegro.ily (93%) rename input/{mutopia/W.A.Mozart => regression}/mozart-hrn3-defs.ily (83%) rename input/{mutopia/W.A.Mozart => regression}/mozart-hrn3-romanze.ily (100%) rename input/{mutopia/W.A.Mozart => regression}/mozart-hrn3-rondo.ily (91%) create mode 100644 input/regression/multiple-time-sig-settings.ly create mode 100644 input/regression/music-function-post-event.ly create mode 100644 input/regression/music-function-string-markup.ly create mode 100644 input/regression/musicxml/01e-Pitches-ParenthesizedAccidentals.xml create mode 100644 input/regression/musicxml/01f-Pitches-ParenthesizedMicrotoneAccidentals.xml create mode 100644 input/regression/musicxml/03d-Rhythm-DottedDurations-Factors.xml create mode 100644 input/regression/musicxml/14-Staff-Details.itexi create mode 100644 input/regression/musicxml/14a-StaffDetails-LineChanges.xml create mode 100644 input/regression/musicxml/33i-Ties-NotEnded.xml create mode 100644 input/regression/musicxml/41i-PartNameDisplay-Override.xml create mode 100644 input/regression/musicxml/46f-IncompleteMeasures.xml create mode 100644 input/regression/musicxml/46g-PickupMeasure-Chordnames-FiguredBass.xml create mode 100644 input/regression/musicxml/51d-EmptyTitle.xml create mode 100644 input/regression/musicxml/52b-Breaks.xml create mode 100644 input/regression/musicxml/71g-MultipleChordnames.xml create mode 100644 input/regression/musicxml/72c-TransposingInstruments-Change.xml create mode 100644 input/regression/musicxml/LICENSE create mode 100644 input/regression/nested-fill-lines.ly create mode 100644 input/regression/nested-property-revert.ly create mode 100644 input/regression/newaddlyrics-music-identifiers.ly create mode 100644 input/regression/no-header.ly create mode 100644 input/regression/note-head-aiken.ly create mode 100644 input/regression/note-head-funk.ly create mode 100644 input/regression/note-head-sacred-harp.ly create mode 100644 input/regression/note-head-shape-minor.ly create mode 100644 input/regression/note-head-southern-harmony.ly create mode 100644 input/regression/note-head-walker.ly create mode 100644 input/regression/note-names-context.ly create mode 100644 input/regression/note-names.ly create mode 100644 input/regression/override-nest-scheme.ly create mode 100644 input/regression/page-breaking-good-estimation.ly create mode 100644 input/regression/page-breaking-markup-padding.ly create mode 100644 input/regression/page-breaking-markup-padding2.ly create mode 100644 input/regression/page-breaking-markup-padding3.ly create mode 100644 input/regression/page-breaking-max-systems-per-page.ly create mode 100644 input/regression/page-breaking-min-distance.ly create mode 100644 input/regression/page-breaking-min-distance2.ly create mode 100644 input/regression/page-breaking-min-distance3.ly create mode 100644 input/regression/page-breaking-min-systems-per-page1.ly create mode 100644 input/regression/page-breaking-min-systems-per-page2.ly create mode 100644 input/regression/page-breaking-outside-staff-estimation.ly create mode 100644 input/regression/page-breaking-outside-staff-estimation2.ly create mode 100644 input/regression/page-breaking-rehearsal-mark.ly create mode 100644 input/regression/page-breaking-system-count-forced-break.ly create mode 100644 input/regression/page-breaking-systems-per-page.ly create mode 100644 input/regression/page-label-loose-column.ly delete mode 100644 input/regression/page-layout-twopass.ly create mode 100644 input/regression/page-links-nolabel.ly create mode 100644 input/regression/page-links.ly create mode 100644 input/regression/page-overflow-compression.ly create mode 100644 input/regression/page-spacing-bass-figures.ly create mode 100644 input/regression/page-spacing-bottom-spring.ly create mode 100644 input/regression/page-spacing-dynamics.ly create mode 100644 input/regression/page-spacing-markups.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-and-markup.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-between-systems.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-between.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-bottom.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-header-padding.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-independent.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-top.ly create mode 100644 input/regression/page-spacing-nonstaff-lines-unrelated.ly create mode 100644 input/regression/page-spacing-rehearsal-mark.ly create mode 100644 input/regression/page-spacing-staff-group-hara-kiri.ly create mode 100644 input/regression/page-spacing-staff-group-nested.ly create mode 100644 input/regression/page-spacing-staff-group.ly create mode 100644 input/regression/page-spacing-stretchability.ly create mode 100644 input/regression/page-spacing-system-count-overfull.ly create mode 100644 input/regression/page-spacing-system-count.ly create mode 100644 input/regression/page-spacing-tall-headfoot.ly create mode 100644 input/regression/page-spacing-top-markup-spacing.ly create mode 100644 input/regression/page-spacing-top-system-spacing.ly create mode 100644 input/regression/palm-mute.ly create mode 100644 input/regression/paper-default-margins-a6.ly create mode 100644 input/regression/paper-default-margins-def.ly create mode 100644 input/regression/paper-margins-consistency.ly create mode 100644 input/regression/paper-margins-left-margin.ly create mode 100644 input/regression/paper-margins-line-width.ly create mode 100644 input/regression/paper-margins-no-checks.ly create mode 100644 input/regression/paper-margins-overrun.ly create mode 100644 input/regression/paper-margins-right-margin.ly create mode 100644 input/regression/paper-margins.ly create mode 100644 input/regression/paper-nested-override.ly create mode 100644 input/regression/paper-nested-override2.ly create mode 100644 input/regression/paper-twosided-bcorr.ly create mode 100644 input/regression/paper-twosided.ly create mode 100644 input/regression/parenthesize-markup.ly create mode 100644 input/regression/part-combine-force-mmrest-position.ly create mode 100644 input/regression/part-combine-force-once.ly create mode 100644 input/regression/part-combine-force.ly create mode 100644 input/regression/part-combine-text-wait.ly create mode 100644 input/regression/partial-polymetric.ly create mode 100644 input/regression/pdfmark-metadata-unicode.ly create mode 100644 input/regression/pdfmark-metadata.ly create mode 100644 input/regression/phrasing-slur-multiple.ly create mode 100644 input/regression/prefatory-separation.ly create mode 100644 input/regression/quote-cue-event-types.ly create mode 100644 input/regression/quote-kill-cues.ly create mode 100644 input/regression/quote-overrides.ly create mode 100644 input/regression/rehearsal-mark-direction.ly create mode 100644 input/regression/rehearsal-mark-final-score.ly create mode 100644 input/regression/remove-empty-staves-auto-knee.ly create mode 100644 input/regression/remove-empty-staves-with-rests.ly create mode 100644 input/regression/repeat-slash-mixed.ly create mode 100644 input/regression/repeat-slash-multi.ly create mode 100644 input/regression/repeat-tremolo-chord-rep.ly create mode 100644 input/regression/repeat-tremolo-one-note-articulation.ly create mode 100644 input/regression/repeat-tremolo-three-notes.ly create mode 100644 input/regression/rest-polyphonic-2.ly create mode 100644 input/regression/scheme-book-scores.ly create mode 100644 input/regression/scheme-engraver-instance.ly create mode 100644 input/regression/scheme-engraver.ly create mode 100644 input/regression/scheme-text-spanner.ly create mode 100644 input/regression/skiptypesetting-all-true.ly create mode 100644 input/regression/skiptypesetting-multimeasurerest.ly create mode 100644 input/regression/skyline-horizontal-padding.ly create mode 100644 input/regression/slur-grace.ly create mode 100644 input/regression/slur-multiple-linebreak.ly create mode 100644 input/regression/slur-multiple.ly create mode 100644 input/regression/spacing-accidental-rest.ly create mode 100644 input/regression/spacing-empty-bar.ly create mode 100644 input/regression/spanner-after-line-breaking.ly create mode 100644 input/regression/staff-tabstaff-spacing.ly create mode 100644 input/regression/stem-length-estimation.ly create mode 100644 input/regression/stencil-scale.ly create mode 100644 input/regression/system-separator-spaceable-staves.ly create mode 100644 input/regression/tablature-chord-repetition.ly create mode 100644 input/regression/tablature-default-strings.ly create mode 100644 input/regression/tablature-dot-placement.ly create mode 100644 input/regression/tablature-fretboard-open-string.ly create mode 100644 input/regression/tablature-full-notation.ly create mode 100644 input/regression/tablature-glissando.ly create mode 100644 input/regression/tablature-grace-notes.ly create mode 100644 input/regression/tablature-harmonic-functions.ly create mode 100644 input/regression/tablature-harmonic-tie.ly create mode 100644 input/regression/tablature-letter.ly create mode 100644 input/regression/tablature-negative-fret.ly create mode 100644 input/regression/tablature-tie-behaviour.ly create mode 100644 input/regression/tablature-tie-spanner.ly create mode 100644 input/regression/tablature-tremolo.ly create mode 100644 input/regression/tablature-zero-finger.ly create mode 100644 input/regression/text-spanner-full-rest.ly create mode 100644 input/regression/tie-dash.ly create mode 100644 input/regression/tie-pitched-trill.ly create mode 100644 input/regression/tie-unterminated.ly create mode 100644 input/regression/time-signature-settings-by-staff.ly create mode 100644 input/regression/trill-spanner-scaled.ly create mode 100644 input/regression/tuplet-bracket-visibility.ly create mode 100644 input/regression/tuplet-text-different-numbers.ly create mode 100644 input/regression/tuplet-text-fraction-with-notes.ly create mode 100644 input/regression/tuplet-text-note-appended.ly rename input/{ => regression}/typography-demo.ly (95%) create mode 100644 input/regression/whiteout-lower-layers.ly create mode 100644 input/regression/woodwind-diagrams-empty.ly create mode 100644 input/regression/woodwind-diagrams-key-lists.ly create mode 100644 input/regression/zero-staff-space.ly delete mode 100644 input/sakura-sakura.ly delete mode 100644 input/simple-song.ly delete mode 100644 input/texidocs/GNUmakefile delete mode 100644 input/texidocs/accordion-discant-symbols.texidoc delete mode 100644 input/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc delete mode 100644 input/texidocs/adding-ambitus-per-voice.texidoc delete mode 100644 input/texidocs/adding-an-extra-staff-at-a-line-break.texidoc delete mode 100644 input/texidocs/adding-an-extra-staff.texidoc delete mode 100644 input/texidocs/adding-bar-lines-to-chordnames-context.texidoc delete mode 100644 input/texidocs/adding-drum-parts.texidoc delete mode 100644 input/texidocs/adding-fingerings-to-tablatures.texidoc delete mode 100644 input/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc delete mode 100644 input/texidocs/adding-the-current-date-to-a-score.texidoc delete mode 100644 input/texidocs/adding-volta-brackets-to-additional-staves.texidoc delete mode 100644 input/texidocs/additional-voices-to-avoid-collisions.texidoc delete mode 100644 input/texidocs/adjusting-lyrics-vertical-spacing.texidoc delete mode 100644 input/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc delete mode 100644 input/texidocs/aligning-and-centering-instrument-names.texidoc delete mode 100644 input/texidocs/aligning-lyrics.texidoc delete mode 100644 input/texidocs/aligning-marks-with-various-notation-objects.texidoc delete mode 100644 input/texidocs/alignment-vertical-spacing.texidoc delete mode 100644 input/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc delete mode 100644 input/texidocs/ambitus-with-multiple-voices.texidoc delete mode 100644 input/texidocs/ancient-fonts.texidoc delete mode 100644 input/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc delete mode 100644 input/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc delete mode 100644 input/texidocs/ancient-time-signatures.texidoc delete mode 100644 input/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc delete mode 100644 input/texidocs/arabic-improvisation.texidoc delete mode 100644 input/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc delete mode 100644 input/texidocs/avoiding-collisions-of-chord-fingering-with-beams.texidoc delete mode 100644 input/texidocs/beam-endings-in-score-context.texidoc delete mode 100644 input/texidocs/beam-grouping-in-7-8-time.texidoc delete mode 100644 input/texidocs/beams-across-line-breaks.texidoc delete mode 100644 input/texidocs/caesura-railtracks-with-fermata.texidoc delete mode 100644 input/texidocs/center-text-below-hairpin-dynamics.texidoc delete mode 100644 input/texidocs/changing--flageolet-mark-size.texidoc delete mode 100644 input/texidocs/changing-a-single-notes-size-in-a-chord.texidoc delete mode 100644 input/texidocs/changing-beam-knee-gap.texidoc delete mode 100644 input/texidocs/changing-chord-separator.texidoc delete mode 100644 input/texidocs/changing-form-of-multi-measure-rests.texidoc delete mode 100644 input/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc delete mode 100644 input/texidocs/changing-partcombine-texts.texidoc delete mode 100644 input/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc delete mode 100644 input/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc delete mode 100644 input/texidocs/changing-the-breath-mark-symbol.texidoc delete mode 100644 input/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc delete mode 100644 input/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc delete mode 100644 input/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc delete mode 100644 input/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc delete mode 100644 input/texidocs/changing-the-tuplet-number.texidoc delete mode 100644 input/texidocs/chant-or-psalms-notation.texidoc delete mode 100644 input/texidocs/chord-name-exceptions.texidoc delete mode 100644 input/texidocs/clusters.texidoc delete mode 100644 input/texidocs/combining-dynamics-with-markup-texts.texidoc delete mode 100644 input/texidocs/combining-two-parts-on-the-same-staff.texidoc delete mode 100644 input/texidocs/compound-time-signatures.texidoc delete mode 100644 input/texidocs/conducting-signs,-measure-grouping-signs.texidoc delete mode 100644 input/texidocs/contemporary-glissando.texidoc delete mode 100644 input/texidocs/controlling-the-placement-of-chord-fingerings.texidoc delete mode 100644 input/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc delete mode 100644 input/texidocs/creating-a-delayed-turn.texidoc delete mode 100644 input/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc delete mode 100644 input/texidocs/creating-blank-staves.texidoc delete mode 100644 input/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc delete mode 100644 input/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc delete mode 100644 input/texidocs/creating-metronome-marks-in-markup-mode.texidoc delete mode 100644 input/texidocs/creating-real-parenthesized-dynamics.texidoc delete mode 100644 input/texidocs/custodes.texidoc delete mode 100644 input/texidocs/customizing-fretboard-fret-diagrams.texidoc delete mode 100644 input/texidocs/customizing-markup-fret-diagrams.texidoc delete mode 100644 input/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc delete mode 100644 input/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc delete mode 100644 input/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc delete mode 100644 input/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc delete mode 100644 input/texidocs/embedding-native-postscript-in-a--markup-block.texidoc delete mode 100644 input/texidocs/engravers-one-by-one.texidoc delete mode 100644 input/texidocs/engraving-ties-manually.texidoc delete mode 100644 input/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc delete mode 100644 input/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc delete mode 100644 input/texidocs/flat-flags-and-beam-nibs.texidoc delete mode 100644 input/texidocs/forcing-horizontal-shift-of-notes.texidoc delete mode 100644 input/texidocs/grid-lines--changing-their-appearance.texidoc delete mode 100644 input/texidocs/grouping-beats.texidoc delete mode 100644 input/texidocs/guitar-strum-rhythms.texidoc delete mode 100644 input/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc delete mode 100644 input/texidocs/incipit.texidoc delete mode 100644 input/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc delete mode 100644 input/texidocs/inserting-a-caesura.texidoc delete mode 100644 input/texidocs/isolated-percent-repeats.texidoc delete mode 100644 input/texidocs/jazz-combo-template.texidoc delete mode 100644 input/texidocs/line-arrows.texidoc delete mode 100644 input/texidocs/lyrics-alignment.texidoc delete mode 100644 input/texidocs/makam-example.texidoc delete mode 100644 input/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc delete mode 100644 input/texidocs/measure-counter.texidoc delete mode 100644 input/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc delete mode 100644 input/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc delete mode 100644 input/texidocs/multi-measure-rest-markup.texidoc delete mode 100644 input/texidocs/nesting-staves.texidoc delete mode 100644 input/texidocs/non-traditional-key-signatures.texidoc delete mode 100644 input/texidocs/ottava-text.texidoc delete mode 100644 input/texidocs/percent-repeat-count-visibility.texidoc delete mode 100644 input/texidocs/percent-repeat-counter.texidoc delete mode 100644 input/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc delete mode 100644 input/texidocs/piano-template-simple.texidoc delete mode 100644 input/texidocs/piano-template-with-centered-dynamics.texidoc delete mode 100644 input/texidocs/piano-template-with-centered-lyrics.texidoc delete mode 100644 input/texidocs/piano-template-with-melody-and-lyrics.texidoc delete mode 100644 input/texidocs/placement-of-right-hand-fingerings.texidoc delete mode 100644 input/texidocs/polyphony-in-tablature.texidoc delete mode 100644 input/texidocs/positioning-multi-measure-rests.texidoc delete mode 100644 input/texidocs/positioning-text-markups-inside-slurs.texidoc delete mode 100644 input/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc delete mode 100644 input/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc delete mode 100644 input/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc delete mode 100644 input/texidocs/printing-hairpins-using-al-niente-notation.texidoc delete mode 100644 input/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc delete mode 100644 input/texidocs/printing-marks-on-every-staff.texidoc delete mode 100644 input/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc delete mode 100644 input/texidocs/quoting-another-voice-with-transposition.texidoc delete mode 100644 input/texidocs/quoting-another-voice.texidoc delete mode 100644 input/texidocs/removing-the-first-empty-line.texidoc delete mode 100644 input/texidocs/rest-styles.texidoc delete mode 100644 input/texidocs/reverting-default-beam-endings.texidoc delete mode 100644 input/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc delete mode 100644 input/texidocs/setting-the-minimum-length-of-hairpins.texidoc delete mode 100644 input/texidocs/shortening-volta-brackets.texidoc delete mode 100644 input/texidocs/showing-chords-at-changes.texidoc delete mode 100644 input/texidocs/simple-lead-sheet.texidoc delete mode 100644 input/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc delete mode 100644 input/texidocs/single-staff-template-with-notes-and-chords.texidoc delete mode 100644 input/texidocs/single-staff-template-with-notes-and-lyrics.texidoc delete mode 100644 input/texidocs/single-staff-template-with-only-notes.texidoc delete mode 100644 input/texidocs/snap-pizzicato-markup-bartok-pizzicato.texidoc delete mode 100644 input/texidocs/specifying-context-with-beatgrouping.texidoc delete mode 100644 input/texidocs/stand-alone-two-column-markup.texidoc delete mode 100644 input/texidocs/stem-and-beam-behavior-in-tablature.texidoc delete mode 100644 input/texidocs/string-quartet-template-simple.texidoc delete mode 100644 input/texidocs/string-quartet-template-with-separate-parts.texidoc delete mode 100644 input/texidocs/sub-dividing-beams.texidoc delete mode 100644 input/texidocs/suppressing-compiler-warnings-when-two-glissandos-intersect.texidoc delete mode 100644 input/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc delete mode 100644 input/texidocs/tweaking-clef-properties.texidoc delete mode 100644 input/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc delete mode 100644 input/texidocs/using-beatlength-and-beatgrouping.texidoc delete mode 100644 input/texidocs/using-double-slurs-for-legato-chords.texidoc delete mode 100644 input/texidocs/using-ties-with-arpeggios.texidoc delete mode 100644 input/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc delete mode 100644 input/texidocs/vertically-aligning-ossias-and-lyrics.texidoc delete mode 100644 input/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc delete mode 100644 input/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc delete mode 100644 input/texidocs/vocal-ensemble-template.texidoc delete mode 100644 input/texidocs/volta-below-chords.texidoc delete mode 100644 input/tutorial/GNUmakefile delete mode 100644 input/tutorial/lbook-html-test.html delete mode 100644 input/tutorial/lbook-latex-test.tex delete mode 100644 input/tutorial/lbook-texi-test.texi delete mode 100644 input/twinkle-pop.ly delete mode 100644 input/wilhelmus.ly delete mode 100644 input/xiao-haizi-guai-guai.ly delete mode 100644 lily/ambitus.cc create mode 100644 lily/articulations.cc create mode 100644 lily/beam-collision-engraver.cc create mode 100644 lily/completion-rest-engraver.cc create mode 100644 lily/context-mod-scheme.cc create mode 100644 lily/context-mod.cc create mode 100644 lily/cue-clef-engraver.cc create mode 100644 lily/double-percent-repeat-engraver.cc delete mode 100644 lily/easy-notation.cc create mode 100644 lily/engraver-scheme.cc create mode 100644 lily/episema-engraver.cc create mode 100644 lily/footnote-engraver.cc delete mode 100644 lily/include/ambitus.hh create mode 100644 lily/include/articulations.hh delete mode 100644 lily/include/bar.hh create mode 100644 lily/include/beam-scoring-problem.hh create mode 100644 lily/include/context-mod.hh create mode 100644 lily/include/page-layout-problem.hh create mode 100644 lily/include/scheme-engraver.hh create mode 100644 lily/include/staff-grouper-interface.hh delete mode 100644 lily/include/type-swallow-translator.hh create mode 100644 lily/keep-alive-together-engraver.cc create mode 100644 lily/note-column-scheme.cc create mode 100644 lily/page-layout-problem.cc create mode 100644 lily/partial-iterator.cc create mode 100644 lily/pdf-scheme.cc create mode 100644 lily/pointer-group-interface-scheme.cc create mode 100644 lily/scheme-engraver.cc delete mode 100644 lily/self-aligment-interface.cc create mode 100644 lily/self-alignment-interface.cc create mode 100644 lily/staff-grouper-interface.cc delete mode 100644 lily/string-number-engraver.cc delete mode 100644 lily/swallow-engraver.cc delete mode 100644 lily/swallow-perf.cc delete mode 100644 lily/system-scheme.cc delete mode 100644 lily/system-start-text.cc delete mode 100644 lily/tab-harmonic-engraver.cc create mode 100644 lily/tab-tie-follow-engraver.cc delete mode 100644 lily/time-scaled-music-iterator.cc create mode 100644 lily/tuplet-iterator.cc delete mode 100644 lily/type-swallow-translator.cc delete mode 100644 lily/vertically-spaced-context-engraver.cc create mode 100644 ly/articulate.ly create mode 100644 ly/chord-repetition-init.ly create mode 100644 ly/guile-debugger.ly delete mode 100644 ly/markup-init.ly delete mode 100644 ly/params-init.ly create mode 100644 ly/predefined-mandolin-fretboards.ly create mode 100644 ly/predefined-ukulele-fretboards.ly create mode 100644 ly/string-tunings-init.ly create mode 100644 make/abc-rules.make create mode 100644 make/abc-targets.make create mode 100644 make/abc-vars.make delete mode 100644 make/doc-i18n-topdocs-rules.make delete mode 100644 make/doc-i18n-topdocs-targets.make delete mode 100644 make/doc-i18n-topdocs-vars.make delete mode 100644 make/doc-i18n-user-rules.make delete mode 100644 make/doc-i18n-user-targets.make delete mode 100644 make/doc-i18n-user-vars.make create mode 100644 make/lilypond-book-rules.make create mode 100644 make/lilypond-book-targets.make create mode 100644 make/lilypond-book-vars.make create mode 100644 make/midi-rules.make create mode 100644 make/midi-targets.make create mode 100644 make/midi-vars.make create mode 100644 make/website.make delete mode 100644 mf/aybabtu.pe.in create mode 100644 mf/emmentaler-brace.pe.in create mode 100644 mf/feta-accidentals.mf delete mode 100644 mf/feta-arrow.mf create mode 100644 mf/feta-arrowheads.mf delete mode 100644 mf/feta-banier.mf delete mode 100644 mf/feta-beugel.mf delete mode 100644 mf/feta-bolletjes.mf create mode 100644 mf/feta-braces.mf create mode 100644 mf/feta-brackettips.mf create mode 100644 mf/feta-clefs.mf delete mode 100644 mf/feta-din-code.mf create mode 100644 mf/feta-dots.mf create mode 100644 mf/feta-dynamics.mf delete mode 100644 mf/feta-eindelijk.mf create mode 100644 mf/feta-flags.mf delete mode 100644 mf/feta-haak.mf delete mode 100644 mf/feta-klef.mf create mode 100644 mf/feta-noteheads-generic.mf create mode 100644 mf/feta-noteheads-test-generic.mf create mode 100644 mf/feta-noteheads.mf create mode 100644 mf/feta-noteheads11.mf create mode 100644 mf/feta-noteheads13.mf create mode 100644 mf/feta-noteheads14.mf create mode 100644 mf/feta-noteheads16.mf create mode 100644 mf/feta-noteheads18.mf create mode 100644 mf/feta-noteheads20.mf create mode 100644 mf/feta-noteheads23.mf create mode 100644 mf/feta-noteheads26.mf create mode 100644 mf/feta-numbers.mf delete mode 100644 mf/feta-nummer-code.mf create mode 100644 mf/feta-pedals.mf delete mode 100644 mf/feta-pendaal.mf delete mode 100644 mf/feta-puntje.mf create mode 100644 mf/feta-rests.mf delete mode 100644 mf/feta-schrift.mf create mode 100644 mf/feta-scripts.mf delete mode 100644 mf/feta-slag.mf delete mode 100644 mf/feta-timesig.mf create mode 100644 mf/feta-timesignatures.mf delete mode 100644 mf/feta-toevallig.mf create mode 100644 mf/feta-trills.mf delete mode 100644 mf/parmesan-heads.mf create mode 100644 mf/parmesan-noteheads.mf delete mode 100644 mf/parmesan-timesig.mf create mode 100644 mf/parmesan-timesignatures.mf create mode 100644 po/el.po create mode 100644 python/book_base.py create mode 100644 python/book_docbook.py create mode 100644 python/book_html.py create mode 100644 python/book_latex.py create mode 100644 python/book_snippets.py create mode 100644 python/book_texinfo.py create mode 100644 scm/bezier-tools.scm create mode 100644 scm/define-music-callbacks.scm create mode 100644 scm/define-note-names.scm create mode 100644 scm/define-woodwind-diagrams.scm create mode 100644 scm/display-woodwind-diagrams.scm create mode 100644 scm/document-type-predicates.scm create mode 100644 scm/guile-debugger.scm delete mode 100644 scm/kpathsea.scm delete mode 100644 scm/layout-page-dump.scm delete mode 100644 scm/layout-page-layout.scm create mode 100644 scm/lily-sort.scm create mode 100644 scm/modal-transforms.scm create mode 100644 scm/tablature.scm create mode 100644 scm/time-signature-settings.scm create mode 100755 scripts/auxiliar/cg-section.sh create mode 100755 scripts/auxiliar/doc-section.sh create mode 100755 scripts/auxiliar/lily-git.tcl create mode 100755 scripts/auxiliar/node-menuify.py create mode 100755 scripts/auxiliar/ref_check.py create mode 100644 scripts/auxiliar/ref_check.tely create mode 100644 scripts/auxiliar/split-texidocs.py create mode 100755 scripts/auxiliar/strip-whitespace.py create mode 100755 scripts/auxiliar/update-patch-version.sh create mode 100755 scripts/auxiliar/update-with-convert-ly.sh delete mode 100755 scripts/auxiliar/yyout2grammar.py delete mode 100644 scripts/build/bib2html.py create mode 100644 scripts/build/bib2texi.py create mode 100644 scripts/build/create-version-itexi.py create mode 100644 scripts/build/create-weblinks-itexi.py delete mode 100644 scripts/build/html-gettext.py create mode 100644 scripts/build/html-to-texi.py delete mode 100644 scripts/build/texi-gettext.py create mode 100644 scripts/build/website-known-missing-files.txt create mode 100644 scripts/build/website_post.py create mode 100755 scripts/build/yyout2grammar.py create mode 100644 tex/txi-hu.tex create mode 100644 tex/txi-it.tex diff --git a/.gitignore b/.gitignore index 5f51beb6fe..e0fae2d1e4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ *.gcno *.gcov *.graph +*.info *.log *.midi *.new @@ -67,13 +68,13 @@ lily-[0-9a-f][0-9a-f][0-9a-f]* lsr-unsafe.txt nohup.out out -out-cov -out-scons -out-test +out-* pats tags test-output-distance ChangeLog RELEASE-COMMIT -Documentation/user/lilypond -input/lsr/lilypond-snippets +Documentation/lilypond +semantic.cache +.lock-wscript +build/ diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..ac9bad1028 --- /dev/null +++ b/.mailmap @@ -0,0 +1,197 @@ +Andrew Hawryluk +Andrew Hawryluk +Andrew Wilson +Arjan Bos +Boris Shingarov +Boris Shingarov +Carl D. Sorensen +Carl D. Sorensen +Chris Snyder +Damien Heurtebise +Daniel Johnson +Daniel Tonda Castillo +David Kastrup +Dénes Harmath +Dénes Harmath +Dieter Grollmann +Ed Catmur +Erik Sandberg +Erlend Aasland +Erlend Aasland +Erlend Aasland +Erlend Aasland +Eyolf Østrem +Francisco Vila # AKA Paco Vila +Francisco Vila +Francisco Vila +Francisco Vila +Frédéric Bron +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Graham Percival +Hajo Dezelski +Han-Wen Nienhuys and Jan Nieuwenhuizen # see note below +Han-Wen Nienhuys +Han-Wen Nienhuys +Han-Wen Nienhuys +Han-Wen Nienhuys #? +Heikki Junes +Heikki Junes +Heikki Junes +Hu Haipeng +Ian Hulin +James E. Bailey +James Lowe +James Lowe +James Lowe +James Lowe +Jan Nieuwenhuizen +Jan Nieuwenhuizen +Jan Nieuwenhuizen +Jan Nieuwenhuizen +Jay Anderson +Jean-Charles Malahieude +Jean-Charles Malahieude +Jean-Charles Malahieude +Jean-Charles Malahieude +Jean-Charles Malahieude +Jean-Charles Malahieude +Jean-Charles Malahieude +Joe Neeman +Joe Neeman +Joe Neeman +Joe Neeman +Joe Neeman +John Mandereau +John Mandereau +John Mandereau +John Mandereau +Jonathan Kulp +Jonathan Kulp +Joseph Wakeling +Jürgen Reuter +Jürgen Reuter +Keith OHara +Kevin Dalley +Kieren MacMillan +Kurt Kroon +Laura Conrad +Marc Hohl +Mark Polesky +Martin Tarenskeen +Mats Bengtsson +Mats Bengtsson +Mats Bengtsson +Matthew Rowles +Matthias Kilian +Matthieu Jacquot +Maximilian Albert +Maximilian Albert +Maximilian Albert +Maximilian Albert +Maximiliano García de Veas +Maximiliano García de Veas +Michael Käppler +Michael Welsh Duggan +Milan Zamazal +Neil Puttock +Nicolas Sceaux +Nicolas Sceaux +Nicolas Sceaux +Patrick McCarty +Patrick Schmidt +Paul Jarc +Pedro Kroger +Ralph Palmer +Ralph Palmer +Ralph Palmer +Reinhold Kainhofer +Reinhold Kainhofer +Reinhold Kainhofer +Reinhold Kainhofer +Risto Vääräniemi +Rune Zedeler +Rune Zedeler +Rune Zedeler +Simon Bailey +Simon Bailey +Stefan Weil +Till Rettig +Till Rettig +Travis Briggs +Trevor Bača +Trevor Daniels +Trevor Daniels +Trevor Daniels +Valentin Villenave +Valentin Villenave +Valentin Villenave +Vegard Nossum +Werner Lemberg +Werner Lemberg +Werner Lemberg +Werner Lemberg +Werner Lemberg +Wilbert Berendsen +Wilbert Berendsen +Yoshiki Sawada +Yoshiki Sawada + +# Note on : http://lists.gnu.org/archive/html/lilypond-devel/2009-02/msg00035.html diff --git a/AUTHORS.txt b/AUTHORS.txt index 28220a94ed..20876cb11a 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,151 +1,169 @@ -AUTHORS - who did what on GNU LilyPond- +AUTHORS - who did what for GNU LilyPond *************************************** -AUTHORS -******* +Table of Contents +***************** -This file lists authors of LilyPond, and what they wrote. This list is -alphabetically ordered by surname. This file lists people that have -contributed over 100 lines of code. +AUTHORS - who did what for GNU LilyPond - Core code: - * Erlend Aasland Color support, tablature - improvements, trivial \mark stuff, al-niente hairpins. +This file lists authors of LilyPond, and what they wrote. This list is +alphabetically ordered by surname. This file lists people that have +contributed over 100 lines of code or the equivalent. - * Pal Benko , Ancient notation. +Current Development Team +------------------------ - * Juliusz Chroboczek , Type42 code. + * Trevor Daniels: , Assistant documentation + editor - * David Feuer , PS output code - refactoring. + * Reinhold Kainhofer: , + `http://reinhold.kainhofer.com', Core developer, Music2xml wrangler - * Bernard Hurley , X11 color. + * David Kastrup: Code worrier, support fighter, + accordionist - * Chris Jackson , Piano pedals, - directed arpeggios. + * Jonathan Kulp: Assistant documentation editor - * Heikki Junes , Fine tuning for quarter - tones in midi output. + * Werner Lemberg, , Fonts, bug squasher - * Reinhold Kainhofer , - `http://reinhold.kainhofer.com', Musicxml2ly development, - various features and fixes. + * John Mandereau: , Translations - * Michael Krause , Breathing signs. + * Patrick McCarty: SVG guru, bug squad member, bug squasher, text + handling - * Jean-Baptiste Lamy , Tablature support. + * Joe Neeman: Core developer - * Werner Lemberg , TeX glue code. + * Han-Wen Nienhuys: , + `http://www.xs4all.nl/~hanwen/', Main author - * Joe Neeman , Constrained line breaking. + * Jan Nieuwenhuizen: , `http://JoyofSource.com', + `http://AvatarAcademy.nl', Main author - * Han-Wen Nienhuys , - `http://www.xs4all.nl/~hanwen/', Main author. + * Graham Percival: `http://percival-music.ca', Project manager, + Documentation Editor - * Jan Nieuwenhuizen , - `http://www.xs4all.nl/~jantien/', Main author. + * Mark Polesky: Assistant documentation editor, Code cleanup - * Jürgen Reuter , - `http://www.juergen-reuter.de', Ancient notation support - (mensural notation, Gregorian chant notation), ambitus, - clusters. + * Neil Puttock: Core developer - * Nicolas Sceaux , Scheme macros, - \markup syntax. + * Mike Solomon: , Contemporary music attaché - * Carl Sorensen , Fret diagrams. + * Carl Sorensen: , Core developer, Frog meister - * Rune Zedeler <>, Auto-accidental code, zigzag glissandi, rest - bugfixes, minimum fret, `subdivideBeams'. + * Francisco Vila: Translation Meister - Font + * Valentin Villenave: LSR editor and Bug squad member - * Jürgen Reuter , - `http://www.juergen-reuter.de', Ancient notation font - Exact Type1 font outlines for feta, feta-alphabet. - * Chris Jackson , Arpeggio arrow +Previous Development Team +------------------------- - * Rune Zedeler <>, 16th and shorter rests, + * Mats Bengtsson: , + `http://www.s3.kth.se/~mabe/', Support guru - * Han-Wen Nienhuys , - `http://www.xs4all.nl/~hanwen/', Main author. + * Pedro Kroeger: Build meister - * Jan Nieuwenhuizen , - `http://www.xs4all.nl/~jantien/', Main author. + * John Mandereau: , Translation meister - * Tom Cato Amundsen , Accordion symbols. + * Graham Percival: `http://percival-music.ca', Bug meister, Grand + Documentation Project leader - * Arno Waschk , "espressivo" mark. + * Jürgen Reuter: , `http://www.juergen-reuter.de', + Ancient notation - Documentation and examples + * Erik Sandberg: Bug meister - * Mats Bengtsson , - `http://www.s3.kth.se/~mabe/', Example files, documentation + * Nicolas Sceaux: Core developer, Schemer extraordinaire - * Heikki Junes , Cleanups in docs and - example files. - * John Mandereau , Internationalization. +Current Contributors +-------------------- - * Christian Mondrup , Glossary. +Programming +........... - * Han-Wen Nienhuys , - `http://www.xs4all.nl/~hanwen/', Main author. +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 - * Jan Nieuwenhuizen , - `http://www.xs4all.nl/~jantien/', Main author. +Font +.... - * Graham Percival , - `http://percival-music.ca', Documentation Editor. +Keith OHara, Marc Hohl, Alexander Kobel, Carsten Steger - * François Pinard , - `http://www.iro.umontreal.ca/~pinard/', Parts of - Documentation/user/glossary*, started internationalization - stuff. +Documentation +............. - * Rune Zedeler <>, Schumann example. +Colin Campbell, Andrew Hawryluk, James Lowe, Mike Moral, Ralph Palmer, +David Pounder, Patrick Schmidt - Support (distributions, editor support, lilypond-book) +Bug squad +......... - * Anthony Fok , Debian package: debian/*. +James E. Bailey, Colin Campbell, Phil Holmes, Urs Liska, Ralph Palmer, +Kieren MacMillan, Dmytro O. Redchuk - * Chris Jackson , Emacs mode - indentation. +Support +....... - * Heikki Junes , Major Emacs- and Vim-mode - updates. +Christian Hitz - * David Svoboda , what-beat emacs module. +Translation +........... - Translations +Federico Bruni, Dénes Harmath, Jean-Charles Malahieude, Tineke de +Munnik, Till Paala, Ralf Wildenhues, Yoshiki Sawada - * Bjoern Jacke , German glossary - translations. +Past Contributors +----------------- - * Neil Jerram , Glossary translations. +Programming +........... - * Heikki Junes , Finnish translations. +Erlend Aasland, Maximilian Albert, Guido Amoruso, Kristof Bastiaensen, +Pál Benkő, Juliusz Chroboczek, Angelo Contardi, David Feuer, Bertalan +Fodor, Mathieu Giraud, Yuval Harel, Bernard Hurley, Yoshinobu Ishizaki, +Chris Jackson, David Jedlinsky, Heikki Junes, Michael Krause, +Jean-Baptiste Lamy, Jonatan Liljedahl, Peter Lutek, Hendrik Maryns, Joe +Neeman, Matthias Neeracher, Tatsuya Ono, Lisa Opus Goldstein, Guy +Gascoigne-Piggford, Stan Sanderson, Edward Sanford Sutton, Andreas +Scherer, Johannes Schindelin, Kim Shrier, Vicente Solsona Della, David +Svoboda, Sebastiano Vigna, Arno Waschk, Michael Welsh Duggan, John +Williams, Milan Zamazal, Rune Zedeler - * Tineke de Munnik , Dutch website translation. +Font +.... - * August S. Sigov , Russian translation. +Tom Cato Amundsen, Chris Jackson, Arno Waschk, Rune Zedeler - * David González <>, Spanish glossary translations. +Documentation +............. - * Nicolas Grandclaude , French - documentation translation. +Erlend Aasland, Trevor Bača, Alard de Boer, Jay Hamilton, Andrew +Hawryluk, Joseph Harfouch, Cameron Horsburgh, Geoff Horton, Ian Hulin, +Heikki Junes, Kurtis Kroon, Dave Luttinen, Kieren MacMillan, Christian +Mondrup, Eyolf Østrem, Ralph Palmer, François Pinard, Eduardo Vieira, +Michael Rasmussen, Till Rettig, Carl D. Sorensen, Anh Hai Trinh, Rune +Zedeler - * Jean-Charles Malahieude , French - translation of messages, website and documentation. +Support +....... - * John Mandereau , French translation of - messages, website and documentation +Anthony Fok, Chris Jackson, Heikki Junes, David Svoboda - * Gauvain Pocentek , French website - translation. +Translation +........... - * Ludovic Sardain , French - documentation translation. +Frédéric Chiasson, Abel Cheung, Alard de Boer, Simon Dahlbacka, Orm +Finnendahl, David González, Nicolas Grandclaude, Damien Heurtebise, +Matthieu Jacquot, Bjoern Jacke, Neil Jerram, Heikki Junes, Nicolas +Klutchnikoff, Jean-Charles Malahieude, Adrian Mariano, Christian +Mondrup, Tineke de Munnik, Steven Michael Murphy, François Pinard, +Gauvain Pocentek, Till Rettig, Ludovic Sardain, Yoshiki Sawada, Thomas +Scharkowski, Clytie Siddall, August S. Sigov, Roland Stigge, Risto +Vääräniemi, Andrea Valle, Olcay Yıldırım diff --git a/COPYING b/COPYING index 32f7714f79..94a9ed024d 100644 --- a/COPYING +++ b/COPYING @@ -1,305 +1,626 @@ -If you want to redistribute LilyPond, you must comply with the GNU -General Public License (reproduced below). This license applies to -LilyPond with the following exceptions: + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 -- It does not apply to example input files (which are in -the subdirectory input/) that explicitly specify another license. - -- If you create a document which uses fonts included in LilyPond, and -embed this font or unaltered portions of this font into the document, -then this font does not by itself cause the resulting document to be -covered by the GNU General Public License. This exception does not -however invalidate any other reasons why the document might be covered -by the GNU General Public License. If you modify this font, you may -extend this exception to your version of the font, but you are not -obligated to do so. If you do not wish to do so, delete this exception -statement from your version. - - - - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble + Preamble - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of this License. - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it @@ -307,15 +628,15 @@ free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least +state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - Copyright (C) 19yy + Copyright (C) - This program is free software; you can redistribute it and/or modify + 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 2 of the License, or + 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, @@ -324,36 +645,30 @@ the "copyright" line and a pointer to where the full notice is found. 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, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA. + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/COPYING.FDL b/COPYING.FDL new file mode 100644 index 0000000000..ec15076979 --- /dev/null +++ b/COPYING.FDL @@ -0,0 +1,451 @@ + + GNU Free Documentation License + Version 1.3, 3 November 2008 + + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The "publisher" means any person or entity that distributes copies of +the Document to the public. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no +other conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to +give them a chance to provide you with an updated version of the +Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other +documents released under this License, and replace the individual +copies of this License in the various documents with a single copy +that is included in the collection, provided that you follow the rules +of this License for verbatim copying of each of the documents in all +other respects. + +You may extract a single document from such a collection, and +distribute it individually under this License, provided you insert a +copy of this License into the extracted document, and follow this +License in all other respects regarding verbatim copying of that +document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions of the +GNU Free Documentation License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in +detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +11. RELICENSING + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the site +means any set of copyrightable works thus published on the MMC site. + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +"Incorporate" means to publish or republish a Document, in whole or in +part, as part of another Document. + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole or +in part into the MMC, (1) had no cover texts or invariant sections, and +(2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile index 12f25fefc9..19ae577698 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -1,46 +1,303 @@ depth = .. +######################## +# Documentation build # +######################## + +############# +### Variables + NAME = documentation LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py) -SUBDIRS=devel user bibliography pictures topdocs misc po $(LANGS) -STEPMAKE_TEMPLATES=documentation texinfo tex -LOCALSTEPMAKE_TEMPLATES=lilypond ly -LILYPOND_BOOK_FLAGS=--extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"' +MANUALS_SUBDIRS = usage contributor essay \ + web learning notation extending +SUBDIRS = $(MANUALS_SUBDIRS) snippets logo pictures misc po css topdocs \ + included $(LANGS) +STEPMAKE_TEMPLATES = documentation texinfo tex omf +LOCALSTEPMAKE_TEMPLATES = lilypond ly + +### Extra flags + +LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"' +TEXI2PDF_FLAGS = \ + -I $(outdir) \ + -I $(top-build-dir)/Documentation/$(outconfbase) +$(outdir)/snippets-big-page.html: TEXI2HTML_FLAGS += -D short_toc +$(outdir)/snippets/index..html: TEXI2HTML_FLAGS += -D short_toc + +### Extra source files + README_TOP_FILES= DEDICATION THANKS -EXTRA_DIST_FILES = lilypond-texi2html.init + +IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely) +SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly) + +EXTRA_DIST_FILES = $(call src-wildcard,*.init) $(call src-wildcard,*.bst) + +### Out files + +# Dependencies +GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely) + +XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map +OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf + +# Main manuals +TEXINFO_MANUALS = internals\ + $(TELY_FILES:%.tely=%)\ + $(TEXI_FILES:%.texi=%) +OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi) + +## CHAIN_RULE hack: keep the following line *before* including +# stepmake.make, so the Internals Reference is built before the +# Notation Reference, thus providing automatically generated sections +# of the NR +TEXI_FILES_FROM_TELY = $(outdir)/internals.texi + +PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf) + +TOPDIR_HTML_MANUALS = +UNSPLITTED_HTML_MANUALS = +SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\ + $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual))) +NOT_TOPDIR_HTML_MANUALS = $(foreach manual, $(SPLITTED_HTML_MANUALS),\ + $(if $(findstring $(manual), $(TOPDIR_HTML_MANUALS)),,$(manual))) + +OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\ + $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html) +DEEP_HTML_FILES = $(NOT_TOPDIR_HTML_MANUALS:%=$(outdir)/%/index.html) + +# Symlinks to refer to external source documents from split and non-split HTML +source-links = $(outdir)/source\ + $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source) + +# Other out files + +MAIN_INFO_DOC = lilypond-web +INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \ + lilypond-essay lilypond-learning lilypond-notation music-glossary \ + lilypond-web lilypond-extending +ifeq ($(out),www) +INFO_DOCS += lilypond-snippets +endif +INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info) + +ifeq ($(out),www) +INFO_IMAGES_DIR = lilypond +DEST_INFO_IMAGES_SUBDIR = Documentation +endif include $(depth)/make/stepmake.make -HTML_PAGE_NAMES= index translations -OUT_HTML_FILES= $(HTML_PAGE_NAMES:%=$(outdir)/%.html) -OUT_CSS_FILES= $(CSS_FILES:%.css=$(outdir)/%.css) +OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES))) + + +### Web site idiosyncrasies +$(XREF_MAPS_DIR)/web.xref-map: XREF_MAP_FLAGS += --split=node + +### AJAX scripts +JS_FILES = $(call src-wildcard,*.js) +PHP_FILES = $(call src-wildcard,*.php) +EXTRA_DIST_FILES += $(JS_FILES) $(PHP_FILES) + +OUT_JS_FILES = $(JS_FILES:%.js=$(outdir)/%.js) +OUT_PHP_FILES = $(PHP_FILES:%.php=$(outdir)/%.php) + + -default: local-doc +### bad hack for badly-integrated roadmap. +$(outdir)/ROADMAP: + cp $(top-src-dir)/ROADMAP $(outdir) +$(outdir)/contributor.texi: $(outdir)/ROADMAP + +### bad hack for badly-integrated bibliography +$(outdir)/colorado.itexi: + BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(outdir)/colorado.itexi \ + $(src-dir)/essay/colorado.bib + +$(outdir)/computer-notation.itexi: + BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(outdir)/computer-notation.itexi \ + $(src-dir)/essay/computer-notation.bib + +$(outdir)/engravingbib.itexi: + BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(outdir)/engravingbib.itexi \ + $(src-dir)/essay/engravingbib.bib + +$(outdir)/essay.texi: \ + $(outdir)/colorado.itexi \ + $(outdir)/computer-notation.itexi \ + $(outdir)/engravingbib.itexi + +$(outdir)/others-did.itexi: + BSTINPUTS=$(src-dir)/web/ $(buildscript-dir)/bib2texi \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(outdir)/others-did.itexi \ + $(src-dir)/web/others-did.bib + +$(outdir)/we-wrote.itexi: + BSTINPUTS=$(src-dir)/web/ $(buildscript-dir)/bib2texi \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(outdir)/we-wrote.itexi \ + $(src-dir)/web/we-wrote.bib + + +########### +### Targets + +default: local-txt-doc + +local-help: extra-local-help + +extra-local-help: + @echo " check-xrefs [ISOLANG=LL] validate Texinfo cross-references" + @echo " fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references" + @echo " (use with caution)" + @echo " info update info pages" + @echo " xml update Docbook xml documentation" + @echo + @echo "Translations specific targets (see TRANSLATION for details):" + @echo " new-lang ISOLANG=LL create and initialize" + @echo " subdirectory \'LL' for language \'LL" + @echo " (if \'LL exists, update missing file)" + @echo " po-update update and replace PO files for" + @echo " documentation with msgmerged versions" + @echo " check-translation ISOLANG=LL show changes in English docs since" + @echo " last translation update" + @echo " update-translation ISOLANG=LL call $$$$EDITOR to help updating" + @echo " the translation" + @echo " snippet-update ISOLANG=LL update ly snippets in Texinfo translation" + @echo " according to docs in English" + @echo " (use with caution)" + @echo + @echo " LL refers to the desired locale" + @echo " (most often only the ISO 639 language code)." + @echo + +info: $(INFO_FILES) + @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR) + @echo export PYTHONPATH=$(PYTHONPATH) + +xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml + + +local-clean: + rm -f $(INFO_IMAGES_DIR) + +### Web targets ifeq ($(out),www) -local-WWW-2: txt-to-html $(OUT_HTML_FILES) +local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info -local-WWW-clean: deep-WWW-clean +ifeq ($(AJAX_SEARCH),1) +local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(OUT_JS_FILES) $(OUT_PHP_FILES) $(source-links) $(OMF_FILES) +else +local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES) +endif -deep-WWW-clean: - rm -rf $(outdir)/wiki-dump endif -OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES))) + +######### +### Rules + +$(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi $(outdir)/weblinks.itexi + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $< # cd $(outdir) rule gets bit hairy for --srcdir configure builds txt-to-html: $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES) -$(OUT_HTML_FILES): $(OUT_CSS_FILES) +ifeq ($(out),www) +## Extra images dependencies +$(OUT_TEXINFO_MANUALS): $(outdir)/pictures + +$(outdir)/pictures: + $(MAKE) -C pictures WWW-1 + ln -sf ../pictures/$(outdir) $@ + +$(outdir)/ly-examples: + $(MAKE) -C web/ly-examples + ln -sf ../web/ly-examples/$(outdir) $@ +endif + +ifeq ($(out),www) +$(outdir)/web.texi: $(outdir)/ly-examples $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi +else +# duplicate (without ly-examples) +$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi +endif + + +# Ugh, using '%' twice not possible +$(outdir)/notation/notation.xml: $(outdir)/notation.texi + mkdir -p $(dir $@) + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $< + +$(outdir)/internals/internals.xml: $(outdir)/internals.texi + mkdir -p $(dir $@) + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $< + +$(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES) + +$(foreach manual, $(MANUAL_SUBDIRS),\ +$(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??))) + -$(outdir)/%.css: %.css + +$(outdir)/source: + @rm -f $(@) + ln -sf $(depth) $(@) + +$(outdir)/%/source: + @rm -f $(@) + mkdir -p $(dir $@) + ln -sf $(depth)/.. $(@) + + +## Snippets rules idiosyncrasies +$(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list + xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^) + +$(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES) + +$(outdir)/%.bib: %.bib + ln -f $< $@ + +$(outdir)/%.js: %.js + ln -f $< $@ + +$(outdir)/%.php: %.php ln -f $< $@ +## notation.texi deps +$(top-build-dir)/mf/$(outconfbase)/feta16list.ly: + $(MAKE) -C $(top-src-dir)/mf -### Translations maintenance targets +$(outdir)/notation.texi: $(outdir)/ly-grammar.txt +## Rules for the automatically generated documentation +$(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy + cd $(outdir) && $(BISON) -v $< + $(buildscript-dir)/yyout2grammar $(outdir)/parser.output $@ + +# There used to be a dependency on a dummy target, to force a rebuild +# of internals every time. however, this triggers +# compilation during install, which is a bad thing (tm). + +$(outdir)/internals.texi: $(LILYPOND_BINARY) + cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation + + +############################################### +# Documentation and translations maintenance # +############################################### po-update: make -C po po-update @@ -52,82 +309,79 @@ CHECK_TRANSLATION_FLAGS = --no-color endif ifneq ($(ISOLANG),) -new-lang: - @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \ - then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \ - exit 3 ; \ - fi - mkdir -p $(ISOLANG)/user +new-lang-dir: + mkdir -p $(ISOLANG)/$(DIR) cp fr/GNUmakefile $(ISOLANG) - cp fr/user/GNUmakefile $(ISOLANG)/user - sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/user/GNUmakefile - $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../user/lilypond-learning.tely - mv $(outdir)/*.*tely $(ISOLANG)/user + cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR) + sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile + rm -f $(outdir)/*.*tely $(outdir)/*.*texi + $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi) + for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\ + test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\ + done + rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi + for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\ + test -e $(ISOLANG)/$(DIR)/$$i\ + || test -e $(ISOLANG)/$$i\ + || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\ + done + +new-lang: +# Also for updating/adding missing files + mkdir -p $(ISOLANG) + $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) : msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot - cp po/lilypond-doc.pot po/$(ISOLANG).po + test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***" -CHECKED_FILES = $(ISOLANG)/index.html.in $(shell find $(ISOLANG)/user/ -maxdepth 1 -name '*.*te??') \ - $(shell find $(depth)/input/texidocs/ -name '*.texidoc') +TRANSLATION_DIRS = web texidocs +TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile) +TEXI_LANGUTIL_FLAGS += --skeleton -TELY_FILES = $(call src-wildcard,$(ISOLANG)/user/*.tely) +TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely) skeleton-update: - $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/user/%.tely=../user/%.tely) - $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG)/user $(outdir) + @echo "$@ has been discontinued" + @echo "simply copy .texi, .itexi files you want to translate" + exit 2 + mkdir -p $(ISOLANG) + $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) $(TEXI_LANGUTIL_FLAGS) $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely) + $(PYTHON) $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir) snippet-update: - $(auxscript-dir)/update-snippets.py user $(ISOLANG)/user '*.itely' + $(PYTHON) $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely' -DOCUMENTS_INCLUDES:=-I $(ISOLANG)/user \ --I $(top-build-dir)/Documentation/$(ISOLANG)/user/out-www \ --I $(top-src-dir)/input/lsr \ --I $(top-build-dir)/input/lsr/out-www \ --I user -I $(top-build-dir)/Documentation/user/out-www +DOCUMENTS_INCLUDES:=-I $(ISOLANG) \ +-I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \ +-I $(top-src-dir)/Documentation/snippets \ +-I $(top-build-dir)/Documentation/out-www \ +-I $(top-build-dir)/Documentation/out else # ISOLANG is empty -DOCUMENTS_INCLUDES:=-I user \ --I $(top-build-dir)/Documentation/user/out-www \ --I $(top-src-dir)/input/lsr \ --I $(top-build-dir)/input/lsr/out-www +DOCUMENTS_INCLUDES:=-I . \ +-I $(top-build-dir)/Documentation/out-www \ +-I $(top-src-dir)/Documentation/snippets \ +-I $(top-build-dir)/Documentation/snippets/out-www \ +-I $(top-build-dir)/Documentation/out endif # ISOLANG check-xrefs: - $(auxscript-dir)/check_texi_refs.py --batch \ + $(PYTHON) $(auxscript-dir)/check_texi_refs.py --batch \ $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py fix-xrefs: - $(auxscript-dir)/check_texi_refs.py --auto-fix \ + $(PYTHON) $(auxscript-dir)/check_texi_refs.py --auto-fix \ $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py check-translation: - ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES) + ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES) update-translation: - ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES) + ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES) +# what's it gonna be, boy...tranlationS-/translation- translation-status: - make -C po out=www messages - $(auxscript-dir)/translations-status.py + PYTHONPATH=$(top-src-dir)/python:$(top-src-dir)/python/auxiliar $(PYTHON) $(top-src-dir)/scripts/auxiliar/translations-status.py -local-help: extra-local-help - -extra-local-help: - @echo -e "\ - check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\ - fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\ -\n\ -Translations specific targets (see TRANSLATION for details):\n\ - new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\ - po-update update and replace PO files for documentation with msgmerged versions\n\ - check-translation ISOLANG=LL show changes in English docs since last translation update\n\ - update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\ - skeleton-update ISOLANG=LL update Texinfo skeleton files\n\ - snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\ - docs in English (use with caution)\n\ -\n\ -LL refers to the desired locale (most often only the ISO 639 language code).\n" - -info: - $(MAKE) -C user info +.SECONDARY: diff --git a/Documentation/bibliography/GNUmakefile b/Documentation/bibliography/GNUmakefile deleted file mode 100644 index 06055b5808..0000000000 --- a/Documentation/bibliography/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# Documentation/bibliography/Makefile - -depth=../.. - -OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES)) -EXTRA_DIST_FILES= $(BIB_FILES) $(call src-wildcard,*.bst) -BIB_FILES= $(call src-wildcard,*.bib) - -STEPMAKE_TEMPLATES=tex documentation -LOCALSTEPMAKE_TEMPLATES=lilypond ly - -include $(depth)/make/stepmake.make - -dvi: $(DVI_FILES) $(OUT_BIB_FILES) - -ps: $(PS_FILES) - -default: - -GENHTMLS = engraving colorado computer-notation -OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) - -ifeq ($(out),www) -local-WWW-2: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html) index.html) -endif - -$(outdir)/%.bib: %.bib - ln -f $< $@ - -$(outdir)/%.html: %.bib - BSTINPUTS=$(src-dir) $(buildscript-dir)/bib2html -o $@ $< - -local-clean: - rm -f fonts.aux fonts.log feta*.tfm feta*.*pk diff --git a/Documentation/bibliography/colorado.bib b/Documentation/bibliography/colorado.bib deleted file mode 100644 index f72fa189d8..0000000000 --- a/Documentation/bibliography/colorado.bib +++ /dev/null @@ -1,524 +0,0 @@ -% -% TITLE=University of Colorado Engraving music bibliography -% AUTHOR=Alyssa Lamb (edited & converted to bibtex by HWN) -% - -@Book {jacob47:_music, - author ={Jacob, Archibald}, - year=1947, - title = {Musical handwriting : or, How to put music on paper : A handbook for all musicians, professional and amateur}, - address ={London}, - publisher ={Oxford University Press}, - note = {subject: Musical notation}, -} - -@Book{brandt:_stand_chord_symbol_notat, - author ={Carl Brandt and Clinton Roemer}, - title = {Standardized Chord Symbol Notation}, - address={Sherman Oaks, CA}, - publisher={Roerick Music Co.}, - note ={subject: musical notation}, -} - -@Book{johnson46:_how, - author = {Johnson, Harold M}, - year = 1946, - title = {How to write music manuscript an exercise-method handbook for the music student, copyist, arranger, composer, teacher}, - publisher={Carl Fischer, Inc.}, - address= {New York}, - note = {subject: Musical notation --Handbooks, manuals}, -} - -@Book{sadie90:_music_print_publis, - title = {Music Printing & Publishing}, - author ={Donald W. Krummel \& Stanley Sadie}, - year = 1990, - publisher= {Macmillan Press}, - note ={subject: musical notation}, -} - -@Book{foss:_music_print, - author={Foss, Hubert}, - title = {Music Printing}, - series = {Practical Printing and Binding}, - address={London}, - publisher={Oldhams Press Ltd., Long Acre}, - note ={subject: musical notation}, -} - -@Book{steele03:_earlies_englis_music_print, - author = {Steele, Robert}, - year = 1903, - title = {The Earliest English Music Printing}, - address={London}, - note= {subject: history of music printing and engraving}, -} - -@Book{austin:_story_music_print, - author={Austin, Ernest}, - title = {The Story of Music Printing}, - address={London}, - publisher={Lowe and Brydone Printers, Ltd.}, - note= {subject: history of music printing and engraving}, - -} - - - -@Book{?:_pictor_histor_music_print, - author={?}, - title = {Pictoral History of Music Printing}, - address={Elhardt, Indiana}, - publisher={H. and A. Selmer, Inc.}, - note= {subject: history of music printing and engraving}, - -} - -@Book{wintermitz55:_music_autog_montev_hindem, - author = {Wintermitz, Emmanuel}, - year = 1955, - title = {Musical Autographs from Monteverdi to Hindemith}, - address={Princeton}, - publisher={Princeton University Press}, - note= {subject: history of music printing and engraving}, - -} - - -@Book{novello47:_some_accoun_method_music_print, - - author = {Novello, A}, - year = 1847, - title = {Some Account of the Methods of Musick Printing, with Specimens of the Various Sizes of Moveable Types and of Other Matters}, - address={London}, - note={ subject: history of music printing and engraving}, -} - -@Book{chrsander18:_sketc_histor_music, - author={Chrsander, F.}, - year={18??}, - title={A Sketch of the HIstory of Music printing, from the 15th to the 16th century}, - note={ subject: history of music printing and engraving}, -} - -@Article {squire1897, - author = {Squire, W}, - year = 1897, - title = {Notes on Early Music Printing}, - journal = {Bibliographica}, - volume={iii}, - number=99, - note={ subject: history of music printing and engraving}, - -} - -@Article{meyer35:_print_music, - author = {Meyer, K. and O'Meara, J}, - year = 1935, - title = {The Printing of Music, 1473-1934}, - journal = {The Dolphin}, - volume={ ii}, - pages={ 171--207}, - note={ subject: history of music printing and engraving}, - -} -%% 4th ver., -@Article{pattison39:_notes_early_music_print, - author = {Pattison, B}, - year = 1939, - title = {Notes on Early Music Printing}, - journal = {The Library}, - note={subject: history of music printing and engraving}, - volume={xix}, - pages={389-421}, -} - -@Book{king64:_four_hundr_years_music_print, - author = {King, H}, - year = 1964, - title = {Four Hundred Years of Music Printing}, - address={London}, - note={ subject: history of music printing and engraving}, -} - - -%(Rev.1961). -@Book{deutsch46:_music_number, - author={Deutsch, O.F.}, - year =1946, - title = {Music Publishers' Numbers}, - address={London}, - note={ subject: history of music printing and engraving}, -} - -@Book{marco62:_earlies_music_print_contin_europ, - author = {Marco, G.A}, - year = 1962, - title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work}, - address={Charlottesville, Virginia}, - note={ subject: history of music printing and engraving}, -} - -@Article{kinkeldey32:_music_and_music_print_incun, - author = {Kinkeldey, O}, - year = 1932, - title = {Music And Music Printing in Incunabula}, - journal = {Papers of the Bibliographical Society of America}, - volume={ xxvi}, - pages={89-118}, - note={ subject: history of music printing and engraving}, -} - -@Book{oldman34:_collec_music_first_edition, - author = {Oldman, C.B}, - year = 1934, - title = {Collecting Musical First Editions}, - address={London}, - note={ subject: history of music printing and engraving}, -} - -@Book{carter34:_new_paths_book_collec, - author={Carter, J}, - year=1934, - title = {New Paths in Book Collecting}, - address={London}, - note={ subject: history of music printing and engraving}, -} - -@Book{krummel58:_graph_analy_applic_early_americ_engrav_music, - author={Krummel, D.W.}, - year=1958, - month=9, - title = {Graphic Analysis in Application to Early American Engraved Music}, - journal = {Notes}, - volume={xvi}, - pages=213, - note={ subject: history of music printing and engraving}, -} - -@Book{krummel71:_oblon_format_early_music_books, - author = {Krummel, D.W}, - year = 1971, - title = {Oblong Format in Early Music Books}, - journal = {The Library}, - volume={5th ser., xxvi}, - pages=312, - note={ subject: history of music printing and engraving}, -} - -@Book{king73:_anniv_music_print, - author = {King, A.H}, - year = 1973, - title = {The 50th Anniversary of Music Printing}, -} - -@Book{rastall82:_wester, - author={Rastall, Richard}, - year=1982, - title = {The notation of Western music : an introduction}, - address={New York, N.Y.}, - publisher={St. Martin's Press}, - note = {Musical notation}, - - -} - -@Book{tappolet47:_la_notat_music, - author = {Tappolet, Willy}, - year = 1947, - title = {La Notation Musicale}, - address={Paris}, - note={subject: general notation}, - publisher={Neuch\^atel}, -} - -@Book{williams03:_story_notat, - author = {Williams, C.F. Abdy}, - year = 1903, - title = {The Story of Notation}, - address={New York}, - publisher={Charles Scribner's Sons}, - note={subject: general notation}, -} - -@Book{apel53, - author={Apel, Willi}, - year=1953, - title = {The notation of polyphonic music, 900-1600}, - address={Cambridge, Mass}, - institution={Mediaeval Academy of America}, - note = {Musical notation}, -} - -@Book{berger93:_mensur, - author={Berger, Anna Maria Busse}, - year=1993, - title = {Mensuration and proportion signs : origins and evolution}, - address={Oxford, England}, - publisher={Clarendon Press}, - scnd_address={New York}, - scnd_publisher={Oxford University Press }, - note={subject: early notation}, -} - -@Book{parrish57, - author={Parrish, Carl}, - year=1957, - title = {The notation of medieval music}, - address={New York}, - publisher={Norton}, - note = {Musical notation}, - - -} - -@Book{parrish46:_notat_mediev_music, - author = {Parrish, Carl}, - year = 1946, - title = {The Notation of Medieval Music}, - address={New York}, - publisher={Carl Fischer, Inc.}, - note={subject: early notation}, -} - -@Book{patch49:_genes_music, - author = {Patch, Harry}, - year = 1949, - title = {Genesis of a Music}, - address={Madison}, - publisher={University of Wisconsin Press}, - note={subject: early notation}, -} - -@Book{cage69:_notat, - author={Cage, John}, - year=1969, - title = {Notations}, - address={New York}, - publisher={Something Else Press}, - note = {Music, Manuscripts, Facsimiles. - - Facsimiles of holographs from the Foundation for Contemporary - Performance Arts, with text by 269 composers, but rearranged using - chance operations.,V)} }, - -@Book{gaburo77:_notat, - author = {Gaburo, Virginia}, - year = 1977, - title = {Notation}, - address={publisher= {Lingua Press}, - publisher={La Jolla, California}}, - note = {A Lecture about notation, new ideas about}, -} - -@Book{risatti75:_new_music_vocab, - author = {Risatti, Howard}, - year = 1975, - title = {New Music Vocabulary}, - address={Urbana, Illinois}, - publisher={University of Illinois Press}, - note = {A Guide to Notational Signs for Contemporary Music}, -} - - - -@Book{cowell30:_new_music_resour, - author = {Cowell, Henry}, - year = 1930, - title = {New Musical Resources}, - address={New York}, - publisher={Alfred A. Knopf, Inc.}, - note={subject: 20th century notation}, -} - -@Article{cowell27:_our_inadeq_notat, - author = {Cowell, Henry}, - year = 1927, - title = {Our Inadequate Notation}, - journal = {Modern Music}, - volume=4, - number=3, - note={subject: 20th century notation}, - -} - -@Book{bowers92:_music_letter, - author = {Bowers, Roger}, - year = 1992, - title = {Music & Letters}, - volume=73, - number=3, - month={August}, - pages={347(52)}, - note={Some reflection upon notation and proportion in Monteverdi's mass and vespers}, -} - -@Book{brainard92:_curren_music, - author = {Brainard, Paul}, - year = 1992, - title = {Current Musicology}, - number=50, - month={July-Dec}, - pages={21(26)}, - note={Proportional notation in the music of Schutz and his contemporaries in the 17th Century}, -} - -@Book{monelle89:_compar_liter, - author = {Monelle, Raymond}, - year = 1989, - title = {Comparative Literature}, - volume=41, number=3, - month={Summer}, - pages={252(18)}, - - note={Music notation and the poetic foot}, -} - -@Book{pinegar93:_curren_music, - author = {Pinegar, Sandra}, - year = 1993, - title = {Current Musicology}, - number=53, - month={July}, - pages={99(10)}, - note={The seeds of notation and music paleography.}, -} - -@Book{smith90:_curren_music, - author = {Smith, Norman E}, - year = 1990, - title = {Current Musicology}, - number={45-47}, - month={Jan-Dec}, - pages={283(22)}, - note={The notation of fractio modi.}, -} - -@Book{treitler92:_journ_music, - author = {Treitler, Leo}, - year = 1992, - title = {The Journal of Musicology}, - volume=10, - number=2, - month={Spring}, - pages={131(61)}, - - note={ The unwritten and written transmission, of medieval chant - and the start-up of musical notation. - - Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition.}, -} - -@Book{west94:_music_letter, - author = {West, M.L}, - year = 1994, - title = {Music & Letters}, - volume=75, - number=2, - month={May}, - pages={161(19)}, - note={The Babylonian musical notation and the Hurrian melodic texts. - - A new way of deciphering the ancient Babylonian musical notation. -} -} - -@Book{brown86:_music_quart, - author = {Brown, Earle}, - year = 1986, - title = {Musical Quarterly}, - volume=72, - month={Spring}, - pages={180(22)}, - note={The notation and performance of new music.}, -} - -@Book{eggleston94:_notes, - author = {Eggleston, Suzanne}, - year = 1994, - title = {Notes}, - volume=51, - number=2, - month={Dec}, - pages={657(7)}, - journal={New periodicals}, - note={A list of new music periodicals covering the period - Jun.-Dec. 1994. Includes aims, formats and a description of the - contents of each listed periodical. Includes Music Notation News}, - -} - -@Book{fuller89:_journ_music, - author = {Fuller, David}, - year = 1989, - title = {The Journal of Musicology}, - volume=7, - number=1, - month={Winter}, - pages={21(8)}, - note={ - Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation). -}}, - -@Book{jones90:_persp_new_music, - - author = {Jones, David Evan}, - year = 1990, - title = {Perspectives of New Music}, - note={Speech extrapolated. (includes notation)} -} - -@Book{lependorf89, - author = {Lependorf, Jeffrey}, - year = 1989, - journal={Perspectives of New Music}, - volume=27, - title = {?}, - number=2, - month={Summer}, - pages={232(20)}, - note={Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan) }, - -} - -@Book{rastall93:_music_letter, - author = {Rastall, Richard}, - year = 1993, - title = {Music & Letters}, - volume=74, number=4, - month={November}, - pages={639(2)}, - - note={Equal Temperament Music Notation: The Ailler-Brennink - Chromatic Notation. Results and Conclusions of the Music Notation - Refor by the Chroma Foundation (book reviews). }, -} - -@Article {Francois92, - author={Francois, Jean-Charles}, - journal = {Perspectives of New Music}, - volume={30}, - number={1}, month={Winter}, - pages={6(15)}, - year={1992}, - - note={subject: Modern music has outgrown notation. While the - computer is used to write down music with accuracy never - before achieved, the range of modern sounds has surpassed - the relevance of the computer...}, - - title={Writing without representation, and unreadable notation.}, -} - -@Book{hamel89, - author = {Hamel, Keith A}, - year = 1989, - journal = {Perspectives of New Music}, - volume=27, - number=1, - month={Winter}, - pages={70(14)}, - - title={A design for music editing and printing software based -on notational syntax}, } - diff --git a/Documentation/bibliography/computer-notation.bib b/Documentation/bibliography/computer-notation.bib deleted file mode 100644 index b5887cbd29..0000000000 --- a/Documentation/bibliography/computer-notation.bib +++ /dev/null @@ -1,771 +0,0 @@ -% -% TITLE=The music notation with computer bibliography -% AUTHOR=Han-Wen Nienhuys -% - -@String{CitH = {Computing and the Humanities}} -@String{CMJ = {Computer Music Journal}} - - - -@Book {smith73, - year = {1973}, - title = {Editing and Printing Music by Computer}, - author = {Leland Smith}, - totalentry = {Journal of Music Theory}, - volume={17}, - pages ={292-309}, - - note = {Gourlay\cite{gourlay86} writes: A discussion of Smith's -music-printing system SCORE} - -} - -@Article {byrd74, - year = {1974}, - title = {A System for Music Printing by Computer}, - author = {Donald Byrd}, - journal = {Computers and the Humanities}, - volume ={8}, - pages ={161-72}, -} - - -@Article{ericson75, - author = {R. F. Ericson}, - title = {The DARMS Project: A status report}, - journal = {Computing in the humanities}, - year = 1975, - volume = 9, - number = 6, - pages = {291--298}, - note = {Gourlay\cite{gourlay86} writes: A discussion of the design - and potential uses of the DARMS music-description language.} -} - -% Gomberg -@PhdThesis {gomber75, - year = {1975}, - title = {A Computer-Oriented System for Music Printing}, - author = {David A. Gomberg}, - school = {Washington University}, -} - -@Book {gomberg, - title = {A Computer-oriented System for Music Printing}, - author = {David A. Gomberg}, - journal = CitH, - volume={11}, - month = {march}, - year = {1977}, - pages = {63-80}, - - note = {Gourlay \cite{gourlay86} writes: "A discussion of the - problems of representing the conventions of musical notation in - computer algorithms."} -} - - -@TechReport{Ornstein83, - author={Ornstein, Severo M. and John Turner Maxwell III}, - title={Mockingbird: A Composer's Amanuensis}, - institution={Xerox Palo Alto Research Center}, - address={3333 Coyote Hill Road, Palo Alto, CA, 94304}, - number={CSL-83-2}, - month={January}, - year={1983} -} - -@Article{Ornstein84, - author={Ornstein, Severo M. and John Turner Maxwell III}, - title={Mockingbird: A Composer's Amanuensis}, - journal= {Byte}, - volume= 9, - month = {January}, - year= { 1984}, - - note={A discussion of an interactive and graphical computer system -for music composition} - -} - -% byrd -@PhdThesis {byrd85, - year = {1985}, - title = {Music Notation by Computer}, - author = {Donald Byrd}, - school = {Indiana University}, - - note = {Describes the SMUT (sic) system for automated music printout.} -} - -@InProceedings{assayaag86, - author = {G. Assayaag and D. Timis}, - title = {A Toolbox for music notation}, - booktitle = {Proceedings of the 1986 International Computer Music Conference}, - year = 1986 -} - -@TechReport{roush88, - year = {1988}, - title = {Music Formatting Guidelines}, - author = {D. Roush}, - number = {OSU-CISRC-3/88-TR10}, - institution = {Department of Computer and Information Science, The Ohio State University}, - - note = {Rules on formatting music formulated for use in - computers. Mainly distilled from [Ross] HWN}, - -} - - -@Article{byrd94, - author = {Donald Byrd}, - title = {Music Notation Software and Intelligence}, - journal = {Computer Music Journal}, -year = 1994, -pages = {17--20}, - volume = 18, - number = 1, - - note = {Byrd (author of Nightinggale) shows four problematic -fragments of notation, and rants about notation programs that try to -exhibit intelligent behaviour. HWN} -} - - -@Article{field-richards93, - author = {H.S. Field-Richards}, - title = {Cadenza: A Music Description Language}, - journal = CMJ, - year = 1993, - volume = 17, - number = 4, - - note = {A description through examples of a music entry language. -Apparently it has no formal semantics. There is also no -implementation of notation convertor. HWN} - -} - -@Article{bielawa93, - author = {Herbert Bielawa}, - title = {Review of Sibelius 7}, - journal = CMJ, - year = {1993?}, - - note = {A raving review/tutorial of Sibelius 7 for Acorn. (And did -they seriously program a RISC chip in ... assembler ?!) HWN} - - -} - -@Article{sloan93, - author = {Donald Sloan}, - title = {Aspects of Music Representation in HyTime/SMDL}, - journal = CMJ, - year = 1993, - volume = 17, - number = 4, - -note = {An introduction into HyTime and its score description variant -SMDL. With a short example that is quite lengthy in SMDL} - -} - -@Article{wiggins93, - author = {Geraint Wiggins and Eduardo Miranda and Alaaaan Smaill and Mitch Harris}, - title = {A Framework for the evaluation of music representation systems}, - journal = CMJ, - year = 1993, - volume = 17, - number = 3, - - note = {A categorisation of music representation systems (languages, -OO systems etc) splitted into high level and low level expressiveness. -The discussion of Charm and parallel processing for music -representation is rather vague. HWN} - -} - - - -@Article{dannenberg93, - author = {Roger B. Dannenberg}, - title = {Music Representation: Issues, Techniques, and Systems}, - journal = CMJ, - year = 1993, - volume = 17, - number = 3, - url = {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.6067}, - - note = {This article points to some problems and solutions with music -representation. HWN}, - -} - -@Article{rothstein93, - author = {Joseph Rothstein}, - title = {Review of Passport Designs' Encore Music Notation Software}, - journal = CMJ, - year = {?}, - - -} - - - -@Article{belkin94, - author = {Alan Belkin}, - title = {Macintosh Notation Software: Present and Future}, - journal = CMJ, - year = 1994, - volume = 18, - number = 1, - - note = {Some music notation systems are analysed for ease of use, - MIDI handling. The article ends with a plea for a standard notation - format. HWN}, - -} - -@InProceedings{montel97, - author = {Dominique Montel}, - title = {La gravure de la musique, lisibilit\'e esth\'etique, respect de l'oevre}, - booktitle = {Musique \& Notations}, - year = 1997, - address={Lyon}, - editors ={Genevois \& Orlarey} -} - - - - -@Book {CASR, - note = {Annual editions since 1985, many containing surveys of music typesetting technology. SP}, - title = {Directory of Computer Assisted Research in Musicology}, - author = {Walter B Hewlett and Eleanor Selfridge-Field}, - totalentry = {Menlo Park, CA: Center for Computer Assisted Research in the Humanities}, -} - - -@Book{selfridge-field97:_beyon_midi, - title = {Beyond MIDI: the handbook of musical codes}, - editor = {Eleanor Selfridge-Field}, - publisher = {MIT Press}, - year = 1997, - - note = {A description of various music interchange formats.} -} - - -@InProceedings{hoos98:_guido_music_notat_format, -title={The {GUIDO} Music Notation Format---A Novel Approach -for Adequately Representing Score-level Music}, -author = {H. H. Hoos and K. A. Hamel and K. Renz and J. Kilian}, -booktitle = {Proceedings of International Computer Music Conference}, -year = 1998, -pages = {451--454}, -} - -@Article {blostein91, - - note = {This paper provides a overview of the algorithm used in LIME - for spacing individual lines. HWN}, - - year = {1991}, - title = {Justification of Printed Music}, - author = {Dorothea Blostein and Lippold Haken}, - journal = {Communications of the ACM}, - volume= {J34}, - number= {3}, - month= {March}, - pages = {88-99}, -} - - -@Article {haken93, - year = {1993}, - title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor}, - author = {Lippold Haken and Dorothea Blostein}, - journal = {Computer Music Journal}, - volume= {17}, - number={3}, - pages = {43--58}, -} -@Article{blostein94, - author = {Dorothea Blostein and Lippold Haken}, - title = {The Lime Music Editor: A Diagram Editor Involving Complex - Translations}, - journal = {Software Practice and Experience}, - year = {1994}, - volume = {24}, - number = {3}, - month = {march}, - pages = {289--306}, - - note = {A description of various conversions, decisions and issues -relating to this interactive editor HWN}, - -} - - - -@InProceedings{haken95, - year = {1995}, - title = {A New Algorithm for Horizontal Spacing of Printed Music}, - author = {Lippold Haken and Dorothea Blostein}, - booktitle = {International Computer Music Conference}, - address={Banff}, - month={Sept}, - pages = {118-119}, - - note = {This describes an algorithm which uses springs between -adjacent columns. }, } - - -@InProceedings{bouzaiene98:_une, - author = {Nabil Bouzaiene and Lo\"ic Le Gall and Emmanuel Saint-James}, - title = {Une biblioth\`eque pour la notation musicale baroque}, - booktitle = {EP '98}, - year = 1998, - series = {LNCS}, - - note = {Describes ATYS, an extension to Berlioz, that can mimick - handwritten baroque style beams} -} - - - - -@InProceedings{balaban88, - author = {M. Balaban}, - title = {A Music Workstation Based on Multiple Hierarchical Views of Music}, - booktitle = {Proceedings of the 1988 International Computer Music Conference}, - year = 1988, - address = {San Francisco}, - organization = {International Computer Music Association} -} - -% -% MusiCopy -% -@TechReport {gourlay87-spacing, -annote = {Algorithm for generating spacing in one line of (polyphonic) music, tailored for use with MusiCopy. LilyPond uses a variant of it.}, - year = {1987}, - title = {Spacing a Line of Music,}, - author = {John S. Gourlay}, - number = {OSU-CISRC-10/87-TR35}, - institution ={Department of Computer and Information Science, The Ohio State University}, -} - - -@TechReport {parish87, - annote = {A brief overview of {MusiCopy}}, - year = {1987}, - title = {{MusiCopy}: An automated Music Formatting System}, - author = {Allen Parish and Wael A. Hegazy and John S. Gourlay and Dean K. Roush and F. Javier Sola}, - totalentry = {OSU-CISRC-10/87-TR29}, - institution ={Department of Computer and Information Science, The Ohio State University}, -} - - -@TechReport {gourlay87-formatting, - note = {This paper discusses the development of algorithms for the -formatting of musical scores (from abstract). It also appeared at -PROTEXT III, Ireland 1986}, - - year = {1987}, - title = {Computer Formatting of Music}, - author = {John S. Gourlay and A. Parrish -and D. Roush and F. Sola and Y. Tien}, - number = {OSU-CISRC-2/87-TR3}, - institution ={Department of Computer and Information Science, -The Ohio State University}, -} - - -@TechReport {hegazy87, - year = {1987}, - title = {On the Implementation of the {MusiCopy} Language Processor,}, - - author = {Wael A. Hegazy}, - number = {OSU-CISRC-10/87-TR34}, - institution={Department of Computer and Information Science, The Ohio State University}, - - note = {Describes the "parser" which converts {MusiCopy} MDL to - MusiCopy Simultaneities and columns. - -MDL is short for Music Description Language\cite{gourlay86}. It -accepts music descriptions that are organised into measures filled -with voices, which are filled with notes. The measures can be arranged -simultaneously or sequentially. To address the 2-dimensionality, -almost all constructs in MDL must be labeled. - -MDL uses begin/end markers for attribute values and spanners. -Rightfully the author concludes that MusiCopy must administrate a -"state" variable containing both properties and current spanning symbols. - -MusiCopy attaches graphic information to the objects constructed in -the input: the elements of the input are partially complete graphic -objects. - -}, - -} - - -@TechReport {hegazy87-breaking-tr, - -annote = {This generalizes \TeX's breaking algorithm to music. It also -appeared in Document Manipulation and Typography, J.C. van Vliet (ed) -1988}, - - year = {1987}, - - title = {Optimal line breaking in music}, - author = {Wael A. Hegazy and John S. Gourlay}, - number = {OSU-CISRC-8/87-TR33}, - institution={Department of Computer and Information Science, The Ohio State University,}, -} - -@InProceedings{hegazy88:_optim, - author = {Wael A. Hegazy and John S. Gourlay}, -booktitle = {Proceedings of the International Conference on -Electronic Publishing, Document Manipulation and Typography. Nice (France)}, -month = {April}, -year =1988, -editor={J. C. van Vliet}, -publisher = {Cambridge University Press}, -ISBN={0-521-36294-6}, - title = {Optimal line breaking in music}, -} - - -@TechReport {roush87, - note = {User manual of MusiCopy. }, - - year = {1987}, - title = {Using {MusiCopy}}, - author = {Dean K. Roush}, - number = {OSU-CISRC-18/87-TR31}, - institution={Department of Computer and Information Science, The Ohio State University}, -} - - -@TechReport {parrish87-simultaneities, - -note = {This note discusses - placement of balls, stems, dots which occur at the same moment - ("Simultaneity")}, - - year = {1987}, - title = {Computer Formatting of Musical Simultaneities,}, - author = {A. Parrish and John S. Gourlay}, - institution={Department of Computer and Information Science, The Ohio State University}, - number = {OSU-CISRC-10/87-TR28}, -} - - -@TechReport {sola87, - note = {Overview of a procedure for generating slurs}, - year = {1987}, - title = {Computer Design of Musical Slurs, Ties and Phrase Marks,}, - author = {F. Sola}, - institution={Department of Computer and Information Science, The Ohio State University}, - number = {OSU-CISRC-10/87-TR32}, -} - - -@Article {gourlay86, - note = {This paper describes the {MusiCopy} musicsetting system and an input language to go with it.}, - - year = {1986}, - title = {A language for music printing}, - author = {John. S. Gourlay}, - journal = {Communications of the ACM}, - volume= {29}, - number ={5}, - pages = {388--401}, -} - - -@TechReport {sola87-beams, - -institution={Department of Computer and Information Science, The Ohio -State University}, - - note = {Calculating beam slopes HWN}, - year = {1987}, - title = {Design of Musical Beams,}, - author = {F. Sola and D. Roush}, - number = {OSU-CISRC-10/87-TR30}, -} - - -@PhdThesis {page88, - note = {Don't ask Stephen for a copy. Write to the Bodleian Library, Oxford, or to the British Library, instead. SP}, - year = {1988}, - title = {Computer Tools for Music Information Retrieval}, - author = {Stephen Dowland Page}, - school ={Dissertation University of Oxford}, -} - - -% -% three part study by John Gr/over -@TechReport{grover89-symbols, - author = {John Gr\/over}, - title = {A computer-oriented description of Music Notation. Part I. The Symbol Inventory}, - institution = {Department of informatics, University of Oslo}, - year = 1989, - number = 133, - -note = {The goal of this series of reports is a full description of -music formatting. As these largely depend on parameters of fonts, it -starts with a verbose description of music symbols. - - The subject is treated backwards: from general rules of typesetting -the author tries to extract dimensions for characters, whereas the -rules of typesetting (in a particular font) follow from the dimensions -of the symbols. His symbols do not match (the stringent) constraints -formulated by eg. \cite{wanske}} } - -@TechReport{grover89-twovoices, - author = {John Gr\/over}, - title = {A computer-oriented description of Music Notation. Part II: Two Voice Sharing a Staff, Leger Line Rules, Dot Positioning}, - - institution = {Department of informatics, University of Oslo}, - year = 1989, - number = 134, - - note = {A lot rules for what is in the title are formulated. The -descriptions are long and verbose. The verbosity shows that -formulating specific rules is not the proper way to approach the -problem. Instead, the formulated rules should follow from more -general rules, similar to\cite{parrish87-simultaneities}}, -} - -@TechReport{grover89-accidentals, - author = {John Gr\/over}, - title = {A computer-oriented description of Music Notation. Part III: Accidental Positioning}, - institution = {Department of informatics, University of Oslo}, - year = 1989, - number = 135, - -note = {Placement of accidentals crystallised in an enormous set of -rules. Same remarks as for \cite{grover89-twovoices} applies} } - - -@PhdThesis{mueller90:_inter_bearb_musik, - author = {Giovanni M\"uller}, - title = {Interaktive Bearbeitung konventioneller Musiknotation}, - school = {Eidgen\"ossischen Technischen Hochschule Z\"urich}, - year = 1990, - -note = {This is about engraver-quality typesetting with computers. It -accepts the axiom that notation is too difficult to generate -automatically. The result is that a notation program should be a -WYSIWYG editor that allows one to tweak everything. -} - -} - - - - - -@MastersThesis{roelofs91, - -note = {This dutch thesis describes a monophonic typesetting system, - and focuses on the breaking algorithm, which is taken from Hegazy & - Gourlay }, - - year = {1991}, - title = {Een Geautomatiseerd Systeem voor het Afdrukken van Muziek}, - author = {Ren\'e Roelofs}, - school={Erasmus Universiteit Rotterdam}, - number={45327}, - translation = {``An automated system for printing music'' Master's Thesis Managerial Computer Science.}, -} - - -@Article {filgueiras93, - year = {1993}, - title = {Representation and manipulation of music documents in SceX}, - author = {Miguel Filgueiras and Jos\'e Paulo Leal}, - journal= {Electronic Publishing}, - volume={6}, - number={4}, pages = {507--518}, - url={http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.1480}, -} - - -@Article {foxley87, - -note = {A paper on a simple TROFF preprocessor to typeset music. }, - - year = {1987}, - title = {Music --- A language for typesetting music scores}, - author = {Eric Foxley}, - journal = {Software --- Practice and Experience}, - volume = {17}, - number = {8}, - pages = {485-502}, -} - -@Article {Langston90, - - note = {This paper deals with some command-line - tools for music editing and playback. }, - - year = {1990}, - title = {Unix music tools at Bellcore}, - author = {Peter S. Langston}, - journal={Software --- Practice and Experience}, - volume={20}, - number={S1}, - pages={47--61}, -} - - -@Book {filgueiras96, - year = {1996}, - title = {Implementing a Symbolic Music Processing System}, - author = {Miguel Filgueiras}, - totalentry = {LIACC, Universidade do Porto, 1996; submitted}, -} - -@Book {filgueiras?, - title = {Some Music Typesetting Algorithms}, - author = {Miguel Filgueiras}, - totalentry = {Miguel Filgueiras. ``Some Music Typesetting Algorithms''. LIACC, Universidade do Porto, forthcoming}, -} - - -@Article {colorado-web, - author ={Alyssa Lamb}, - - note = {Webpages about engraving (designed with finale -users in mind) (sic) HWN}, - - institution = {The University of Colorado}, - title ={The University of Colorado Music Engraving page.}, - HTML={http://www.cc.colorado.edu/Dept/MU/Musicpress/}, - year={1996} -} - -@Article {tablature-web, - note = {FAQ (with answers) about TAB, the ASCII variant of Tablature. HWN}, - title = {how to read and write tab: a guide to tab notation}, - author = {Howard Wright}, - email={Howard.Wright@ed.ac.uk}, - url={http://www.guitartabs.cc/tabfaq.shtml}, -} - -@Article {niff-web, - - note = {Specs for NIFF, a reasonably comprehensive but binary - format for notation HWN}, - - year = {1995}, - title = {NIFF6a Notation Interchange File Format}, - author = {Cindy Grande}, - publisher={Grande Software Inc.}, - HTML= {http://www.jtauber.com/music/encoding/niff/}, - ftp = {ftp://blackbox.cartah.washington.edu} -} - -@Article {smdl-web, - author = {International Organization for Standardization (ISO)}, - title = {Information Technology - Document Description and Processing Languages - Standard Music Description Language (SMDL)}, - pdf= {ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf}, - number={ISO/IEC DIS 10743}, - year = {1992}, - annote = {SGML instance for describing music. Very comprehensive in music -definition, but no support for notation / performance whatsoever (They -basically say: "You can embed a NIFF or MIDI file")} -} - - -@Article {rader96, - - note = {Describes a system called MusicEase, and explains that it - uses "constraints" (which go unexplained) to automatically position - various elements. }, - html={http://mesastate.edu/~grader/ieeeme.pdf}, - year = {1996}, - title = {Creating Printed Music Automatically}, - author = {Gary M. Rader}, - journal = {Computer}, - volume={29}, - number={6}, - month={June}, - pages = {61--69}, -} - - -@MastersThesis{gall97:_creat, - author = {Lo\"ic Le Gall}, - title = {Cr\'eation d'une police adapt\'ee \`a la notation musicale baroque}, - school = {\'Ecole Estienne}, - year = 1997, -} - -@TechReport{droettboom00:_study_notat_descr_languag, - author = {Michael Droettboom}, - title = {Study of music Notation Description Languages}, - year = 2000, - url= {http://www.music.mcgill.ca/~ich/research/omr/levy/format.pdf}, - - note ={GUIDO and lilypond compared. LilyPond wins on practical -issues as usability and availability of tools, GUIDO wins on -implementation simplicity.} } - -@PhdThesis{gieseking01:_code_gener_noten, - author = {Martin Gieseking}, - title = {Code-basierte Generierung interaktiver Notengraphik - -}, - school = {Universit\"at Osnabr\"uck}, - year = 2001, - isbn = {ISBN 3-923486-30-8} -} - -@Book{hewlett01:_virtual_score, - editor = {Walter B. Hewlett and Eleanor Selfridge-Field}, - title = {The Virtual Score; representation, retrieval and restoration}, - publisher = {MIT Press}, -series = {Computing in Musicology}, - year = 2001 -} - - - -@PhdThesis{renz02:_algor_guido, - author = {Kai Renz}, - title = {Algorithms and data structures for a music notation system based on GUIDO music notation}, - school = {Universit\"at Darmstadt}, - year = 2002 -} - -@InBook{powell02:_music, - author = {Steven Powell}, - title = {Music engraving today}, - publisher = {Brichtmark}, - year = 2002, - - note = {A "How Steven uses Finale" manual.} -} - - -@InProceedings{nienhuys03:_lilyp, - author = {Han-Wen Nienhuys and Jan Nieuwenhuizen}, - title = {LilyPond, a system for automated music engraving}, - booktitle = {XIV Colloquium on Musical Informatics}, - year = 2003, - pages = {167--172}, - address = {Firenze}, - month = {May} -} - diff --git a/Documentation/bibliography/engraving.bib b/Documentation/bibliography/engraving.bib deleted file mode 100644 index 6d8e0e9e71..0000000000 --- a/Documentation/bibliography/engraving.bib +++ /dev/null @@ -1,357 +0,0 @@ -% -% TITLE=The engraving bibliography -% AUTHOR=Han-Wen Nienhuys -% - - -@Book{banter, - author = {Harald Banter}, - title = {Akkord Lexikon}, - publisher = {Schott's S\"ohne}, - year = {1987}, - isbn = {ISBN 3-7957-2095-8}, - note = {Comprehensive overview of commonly used - chords. Suggests (and uses) a unification for all different kinds - of chord names.}, - address = {Mainz, Germany}, -} - - - -@Book{rastall, - author = {Richard Rastall}, - ALTeditor = {}, - title = {The Notation of Western Music: an - Introduction}, - publisher = {J. M. Dent \& Sons London}, - year = {1983}, - note = {Interesting account of the evolution and origin of common notation starting from neumes, and ending with modern innovations HWN}, -} - - -@Book{ignatzek95:_jazzm_klavier, - author = {Klaus Ignatzek}, - title = {Die Jazzmethode f\"ur Klavier 1}, - publisher = {Schott}, - year = 1995, - note = {This book contains a system for denoting chords that is used in LilyPond.} -} - -@Book{mcgrain, - author = {Mark Mc Grain}, - title = {Music notation}, - year = 1991, - publisher={Hal Leonard Publishing Corporation}, -isbn ={0793508479}, -note={HWN writes: `Book' edition of lecture notes from XXX school of -music. The book looks like it is xeroxed from bad printouts. The -content has nothing you won't find in other books like\cite{read} or -\cite{heussenstamm}. } -} - -@Book{ross, - author = {Ted Ross}, - title = {Teach yourself the art of music engraving and processing}, - publisher = {Hansen House}, - year = 1987, -annote = {This is about engraving, i.e. professional typesetting. It contains - directions on good typesetting, but the sections on reproduction - technicalities, how to use pens and history are interesting. - Especially the section on Music Typewriters is amusing HWN}, - address = {Miami, Florida}, -} - -@Book {read78, - note = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN}, - year = {1978}, - title = {Modern Rhythmic Notation}, - author = {Gardner Read}, - publisher = {Indiana University Press}, -} - -@Book {read-notation, - note = {This is as close to the ``standard'' - reference work for music notation issues as one is likely to get.}, - - title = {Music Notation: a Manual of Modern Practice}, - author = {Gardner Read}, - totalentry = {(2nd edition)}, - year = 1979, - publisher ={Taplinger Publishing}, - address ={New York}, -} - -@Book {weaner93, - year = {1993}, - title = {Standard Music Notation Practice}, - author = {Maxwell Weaner and Walter Boelke}, - totalentry = {revised edition by Arnold Broido and Daniel Dorff.}, - publisher = {Music Publisher's Association of the United States Inc}, - address = {New York} -} - - -@Book {wanske, - - annote = {I. A very thorough overview of engraving practices of various - craftsmen. It includes detailed specs of characters, dimensions - etc. II. a thorough overview of a anonymous (by now antiquated) - automated system. EDV Means e(lektronischen) D(aten)v(erarbeitung), - electronic data processing HWN.}, - - year = {1988}, - title = {Musiknotation --- Von der Syntax des - Notenstichs zum EDV-gesteuerten Notensatz}, - author = {Helene Wanske}, - publisher = {Schott-Verlag}, - address = {Mainz}, - isbn = {ISBN 3-7957-2886-x}, -} - - -@Book {hader48, - year = {1948}, - title = {Aus der Werkstatt eines Notenstechers}, - author = {Karl Hader}, - publisher = {Waldheim--Eberle Verlag}, - address ={Vienna}, - - note = {Hader was a chief-engraver in a Viennese engraving -workshop. This beautiful booklet was intended as an introduction for -laymen on the art of engraving. It contains a step by step, in-depth -explanation of how to cut and stamp music into zinc plates. It also -contains a few compactly formulated rules on musical orthography. Out -of print. } - - -} - -@Book{gamble23:_music_engrav, - author = {William Gamble}, - title = {Music Engraving and printing. Historical and Technical Treatise}, - publisher = {Sir Isaac Pitman & Sons, ltd.}, - year = 1923, - note = {This pattriotic book was an attempt to promote and help - British music engravers. It is somewhat similar to Hader's - book\cite{hader48} in scope and style, but Gamble focuses more on - technical details (Which French punch cutters are worth buying from, - etc.), and does not treat typographical details, such as optical - illusions. It is available as reprint from Da Capo Press, New York - (1971).} -} - - -@Booklet {mpa96, - note = {Pamphlet explaining a few fine points in music font design HWN}, - year = {1996}, - title = {Standard music notation specifications for computer programming.}, - month = {December}, - author ={mpa}, - publisher = {MPA}, -} - - -@Book {donato63, - year = {1963}, - author = {Anthony Donato}, - title ={Preparing Music Manuscript}, - address ={Englewood Cliffs, NJ}, - publisher={Prentice-Hall}, -} - - -@Book {Karkoshka72, - year = {1972}, - title = {Notation in New Music; a critical guide to interpretation and realisation}, - author = {Erdhard Karkoshka}, - translator={Ruth Koenig}, - publisher={Praeger Publishers}, - address={New York}, - note ={(Out of print)}, -} - - -@Book {Roemer84, - year = {1984}, - title = {The Art of Music Copying}, - author = {Clinton Roemer}, - publisher={Roerick music co.}, - address= {Sherman Oaks (CA)}, - - note ={Out of print. Heussenstamm writes: an instructional manual - which specializes in methods used in the commercial field. }, - edition={2nd}, -} - - -@Book {Rosecrans79, - year = {1979}, - title = {Music Notation Primer}, - author = {Glen Rosecrans}, - publisher={Passantino}, - address={New York}, - note={Heussenstamm writes: Limited in scope, similar to \cite{Roemer84}} -} - -@Book {donemus1982, - year = {1982}, - title = {Uitgeven van muziek}, -subtitle = {Handleiding voor componisten en copiisten}, - author = {Donemus}, - publisher= {Donemus Amsterdam}, - - note = {Manual on copying for composers and copyists at the Dutch - publishing house Donemus. Besides general comments on copying, it - also contains a lot of hands-on advice for making performance - material for modern pieces.} - -} - - -@Book{vinci, -author={Vinci, Albert C.}, -title={Fundamentals of Traditional Music Notation}, -publisher={Kent State University Press}, -year={1989} -} - -@Book{schirmer90, - author={{G. Schirmer, Inc.}}, - title={The G. Schirmer Manual of Style and Usage}, - address={New York}, - publisher={The G. Schirmer Publications Department}, - year={2001}, -note={This is the style guide for Schirmer publications. This manual -specifically focuses on preparing print for publication by -Schirmer. It discusses many details that are not in other, normal -notation books. It als gives a good idea of what is necessary to bring -printouts to publication quality. -It can be ordered from the rental department. - - -} -} - - -@Book {Stone80, - year = {1980}, - title = {Music Notation in the Twentieth Century}, - author = {Kurt Stone}, - publisher= {Norton}, - address={New York}, - note ={Heussenstamm writes: The most important book on notation in recent years. }, - -} -@Book {Heussenstamm87, - year = {1987}, - title = {The Norton Manual of Music Notation}, - author = {George Heussenstamm}, - address= {New York}, - publisher={Norton}, - note={Hands-on instruction book for copying (ie. handwriting) music. Fairly complete. HWN} -} - - -@Book {gerou96, - note = {A cheap, concise, alphabetically ordered list of typesetting and music (notation) issues with a rather simplistic attitude but in most cases "good-enough" answers JCN}, - year = {1996}, - title = {Essential Dictionary of Music Notation}, - author = {Tom Gerou and Linda Lusk}, - publisher = {Alfred Publishing}, - address ={Van Nuys CA}, - isbn ={ISBN 0-88284-768-6}, -} - - -@Book {chlapik87, - note = {An clearly written book for the casually interested - reader. It shows some of the conventions and difficulties in - printing music HWN}, - - year = {1987}, - title = {Die Praxis des Notengraphikers}, - author = {Herbert Chlapik}, - publisher = {Doblinger}, - isbn ={ISBN 3-9000 035-96-2}, -} - - - -@Book {barksdale57, - author = {Barksdale, A}, - year = {1957}, - title = {The Printed Note: 500 Years of Music Printing and Engraving}, - address={Toledo, Ohio}, - month = {January}, - note={`The exhibition "The Printed Note" attempts to show the various processes used since the second of the 15th century for reproducing music mechanically ... '. The illustration mostly feature ancient music}, - publisher={The Toledo Museum of Art}, -} - - -@Book {wolf19, - author = {Wolf, Johannes}, - year = {1919}, - title = {Handbuch der Notationskunde}, - address={Leipzig}, - publisher={Breitkopf & Hartel}, - note= {Very thorough treatment (in two volumes) of the history of music notation}, -} - -@Book {rosenthal67, - author = {Rosenthal, Carl A}, - year = {1967}, - title = {A Practical Guide to Music Notation}, - address={New York}, - publisher={MCA Music}, - note={Heussenstamm writes: Informative in terms of traditional notation. Does not concern score preparation} -} - - -@Book {Boehm61, - author = {Boehm, Laszlo}, - year = {1961}, - title={Modern Music Notation}, - address={New York}, - publisher={G. Schirmer, Inc.}, - note ={Heussenstamm writes: A handy compact reference book in basic notation. } -} -@Book{button20:_system_music_notat, - author = {Button, H. Elliot}, - title = {System in Musical Notation}, - publisher = {Novello and co.}, - year = 1920, - address = {London} -} - -@Book{johnson46:_how, - author = {Johnson, Harold}, - title = {How to write music manuscript}, - publisher = {Carl Fischer, Inc.}, - year = 1946, - address = {New York} -} - - - -@Book{tyboni94:_noter_handb_i_tradit_noter, - author = {B\"orje Tyboni}, - title = {Noter Handbok I Traditionell Notering}, - publisher = {Gehrmans Musikf\"orlag}, - year = 1994, - address = {Stockholm}, - note = {Swedish book on music notation.} -} - -@Book{jaschinski00:_notat, - editor = {Andreas Jaschinski}, - title = {Notation}, - publisher = {Bärenreiter Verlag}, - year = 2000, - number = {BVK1625}, - - annote = {Articles from "Musik in Geschichte und Gegenwart" -pertaining to notation. Both "alternative" notation and ancient -notation is treated in depth, while "common" notation is not. } -} - - diff --git a/Documentation/bibliography/html-long.bst b/Documentation/bibliography/html-long.bst deleted file mode 100644 index e01f1fa51a..0000000000 --- a/Documentation/bibliography/html-long.bst +++ /dev/null @@ -1,1374 +0,0 @@ -% BibTeX bibliography style `html-long' -% spits out HTML-formatted bibliography in place of bbl output -% by David Kotz dfk@cs.dartmouth.edu -% $Id: html-long.bst,v 1.4 2005/07/21 21:29:50 hjunes Exp $ -% modified from -% BibTeX standard bibliography style `alpha' - % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. - % Copyright (C) 1985, all rights reserved. - % Copying of this file is authorized only if either - % (1) you make absolutely no changes to your copy, including name, or - % (2) if you do make changes, you name it something other than - % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst. - % This restriction helps ensure that all standard styles are identical. - % The file btxbst.doc has the documentation for this style. - -% DFK added abstract, comment, earlier, keyword, later, URL -ENTRY - { abstract - address - author - booktitle - chapter - comment - earlier - edition - editor - howpublished - institution - journal - key - keyword - later - month - note - number - organization - pages - private - publisher - school - series - title - type - URL - volume - year - } - {} - { label extra.label sort.label } - -INTEGERS { output.state before.all mid.sentence after.sentence after.block } - -FUNCTION {init.state.consts} -{ #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := -} - -STRINGS { s t } - -FUNCTION {output.nonnull} -{ 's := - output.state mid.sentence = - { ", " * write$ } - { output.state after.block = - { add.period$ write$ - newline$ - } - { output.state before.all = - 'write$ - { add.period$ " " * write$ } - if$ - } - if$ - mid.sentence 'output.state := - } - if$ - s -} - -FUNCTION {output} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull - if$ -} - -FUNCTION {output.check} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull - if$ -} - -% DFK changed to use cite$ for the label -% DFK changed to HTML, and use URL to make cite key a link -FUNCTION {output.bibitem} -{ newline$ - URL empty$ - { "
" * cite$ * ":
" * write$ - } - { "
" * cite$ * ":
" * write$ - } - if$ - newline$ - "
" write$ newline$ - "" - before.all 'output.state := -} - -% DFK changed to HTML -FUNCTION {fin.entry} -{ add.period$ - write$ - newline$ - earlier empty$ - 'skip$ - { "
" write$ newline$ - "See also earlier version " * earlier * "." * write$ newline$ - } - if$ - later empty$ - 'skip$ - { "
" write$ newline$ - "See also later version " * later * "." * write$ newline$ - } - if$ - "
" write$ newline$ -} - -FUNCTION {new.block} -{ output.state before.all = - 'skip$ - { after.block 'output.state := } - if$ -} - -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } - if$ - } - if$ -} - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} - -FUNCTION {and} -{ 'skip$ - { pop$ #0 } - if$ -} - -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ -} - -FUNCTION {new.block.checka} -{ empty$ - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.block.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.sentence.checka} -{ empty$ - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {new.sentence.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} - -% DFK changed to HTML -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "" swap$ * "" * } - if$ -} - -% DFK added for HTML strong emphasis -FUNCTION {strong} -{ duplicate$ empty$ - { pop$ "" } - { "" swap$ * "" * } - if$ -} - -INTEGERS { nameptr namesleft numnames } - -% DFK added this, to strip {} and ~ from titles and authors -% It's not a great idea, because it will screw up in math mode and some -% special characters... but it makes most things much prettier. -FUNCTION {author.title.purify} -{ 't := - "" - { t empty$ not } - { t #1 #1 substring$ "{" = - t #1 #1 substring$ "}" = or - 'skip$ - { t #1 #1 substring$ "~" = - { " " * } - { t #1 #1 substring$ * } - if$ - } - if$ - t #2 global.max$ substring$ 't := - } - while$ -} - -FUNCTION {format.names} -{ 's := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et al." * } - { " and " * t * } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {format.authors} -{ author empty$ - { "" } - { author format.names author.title.purify } - if$ -} - -FUNCTION {format.editors} -{ editor empty$ - { "" } - { editor format.names - editor num.names$ #1 > - { ", editors" * } - { ", editor" * } - if$ - } - if$ -} - -% DFK added strong, so it will be bold. -FUNCTION {format.title} -{ title empty$ - { "" } - { title "t" change.case$ author.title.purify strong } - if$ -} - -FUNCTION {n.dashify} -{ 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - } - { { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - -FUNCTION {format.date} -{ year empty$ - { month empty$ - { "" } - { "there's a month but no year in " cite$ * warning$ - month - } - if$ - } - { month empty$ - 'year - { month " " * year * } - if$ - } - if$ -} - -% DFK changed emphasize to strong -FUNCTION {format.btitle} -{ title author.title.purify strong -} - -FUNCTION {tie.or.space.connect} -{ duplicate$ text.length$ #3 < - { " " } - { " " } - if$ - swap$ * * -} - -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} - -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { "volume" volume tie.or.space.connect - series empty$ - 'skip$ - { " of " * series emphasize * } - if$ - "volume and number" number either.or.check - } - if$ -} - -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { output.state mid.sentence = - { "number" } - { "Number" } - if$ - number tie.or.space.connect - series empty$ - { "there's a number but no series in " cite$ * warning$ } - { " in " * series * } - if$ - } - if$ - } - { "" } - if$ -} - -FUNCTION {format.edition} -{ edition empty$ - { "" } - { output.state mid.sentence = - { edition "l" change.case$ " edition" * } - { edition "t" change.case$ " edition" * } - if$ - } - if$ -} - -INTEGERS { multiresult } - -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} - -FUNCTION {format.pages} -{ pages empty$ - { "" } - { pages multi.page.check - { "pages" pages n.dashify tie.or.space.connect } - { "page" pages tie.or.space.connect } - if$ - } - if$ -} - -FUNCTION {format.vol.num.pages} -{ volume field.or.null - number empty$ - 'skip$ - { "(" number * ")" * * - volume empty$ - { "there's a number but no volume in " cite$ * warning$ } - 'skip$ - if$ - } - if$ - pages empty$ - 'skip$ - { duplicate$ empty$ - { pop$ format.pages } - { ":" * pages n.dashify * } - if$ - } - if$ -} - -FUNCTION {format.chapter.pages} -{ chapter empty$ - 'format.pages - { type empty$ - { "chapter" } - { type "l" change.case$ } - if$ - chapter tie.or.space.connect - pages empty$ - 'skip$ - { ", " * format.pages * } - if$ - } - if$ -} - -FUNCTION {format.in.ed.booktitle} -{ booktitle empty$ - { "" } - { editor empty$ - { "In " booktitle emphasize * } - { "In " format.editors * ", " * booktitle emphasize * } - if$ - } - if$ -} - -FUNCTION {empty.misc.check} -{ author empty$ title empty$ howpublished empty$ - month empty$ year empty$ note empty$ - and and and and and - key empty$ not and - { "all relevant fields are empty in " cite$ * warning$ } - 'skip$ - if$ -} - -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type "t" change.case$ - } - if$ -} - -FUNCTION {format.tr.number} -{ type empty$ - { "Technical Report" } - 'type - if$ - number empty$ - { "t" change.case$ } - { number tie.or.space.connect } - if$ -} - -FUNCTION {format.article.crossref} -{ key empty$ - { journal empty$ - { "need key or journal for " cite$ * " to crossref " * crossref * - warning$ - "" - } - { "In {\em " journal * "\/}" * } - if$ - } - { "In " key * } - if$ - " \cite{" * crossref * "}" * -} - -FUNCTION {format.crossref.editor} -{ editor #1 "{vv~}{ll}" format.name$ - editor num.names$ duplicate$ - #2 > - { pop$ " et al." * } - { #2 < - 'skip$ - { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { " et al." * } - { " and " * editor #2 "{vv~}{ll}" format.name$ * } - if$ - } - if$ - } - if$ -} - -FUNCTION {format.book.crossref} -{ volume empty$ - { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ - "In " - } - { "Volume" volume tie.or.space.connect - " of " * - } - if$ - editor empty$ - editor field.or.null author field.or.null = - or - { key empty$ - { series empty$ - { "need editor, key, or series for " cite$ * " to crossref " * - crossref * warning$ - "" * - } - { "{\em " * series * "\/}" * } - if$ - } - { key * } - if$ - } - { format.crossref.editor * } - if$ - " \cite{" * crossref * "}" * -} - -FUNCTION {format.incoll.inproc.crossref} -{ editor empty$ - editor field.or.null author field.or.null = - or - { key empty$ - { booktitle empty$ - { "need editor, key, or booktitle for " cite$ * " to crossref " * - crossref * warning$ - "" - } - { "In {\em " booktitle * "\/}" * } - if$ - } - { "In " key * } - if$ - } - { "In " format.crossref.editor * } - if$ - " \cite{" * crossref * "}" * -} - - -% DFK added -% top of stack is the string we want to be a quoted paragraph -FUNCTION {format.quotedParagraph} -{ duplicate$ empty$ - { skip$ } - { "

" swap$ * "

" *} - if$ -} - - -% DFK added, to support comment, private, keyword, etc -% next-to-top is field name (eg, "Comment") -% top is field value (eg, value of comment) -% both are popped; resulting top is either empty, -% or string describing field -FUNCTION {format.dfkfield} -{ duplicate$ empty$ - { pop$ pop$ "" } - { swap$ - " " swap$ * ": " * swap$ * } - if$ -} - -% DFK added -FUNCTION {dfk.stuff} -{ new.block - "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$ - "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$ - "Comment" comment format.dfkfield format.quotedParagraph write$ newline$ -} - -% DFK: added a call to dfk.stuff in all entry-type functions below - -FUNCTION {article} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - crossref missing$ - { journal emphasize "journal" output.check - format.vol.num.pages output - format.date "year" output.check - } - { format.article.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {book} -{ output.bibitem - author empty$ - { format.editors "author and editor" output.check } - { format.authors output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - new.block - format.btitle "title" output.check - crossref missing$ - { format.bvolume output - new.block - format.number.series output - new.sentence - publisher "publisher" output.check - address output - } - { new.block - format.book.crossref output.nonnull - } - if$ - format.edition output - format.date "year" output.check - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {booklet} -{ output.bibitem - format.authors output - new.block - format.title "title" output.check - howpublished address new.block.checkb - howpublished output - address output - format.date output - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {inbook} -{ output.bibitem - author empty$ - { format.editors "author and editor" output.check } - { format.authors output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - new.block - format.btitle "title" output.check - crossref missing$ - { format.bvolume output - format.chapter.pages "chapter and pages" output.check - new.block - format.number.series output - new.sentence - publisher "publisher" output.check - address output - } - { format.chapter.pages "chapter and pages" output.check - new.block - format.book.crossref output.nonnull - } - if$ - format.edition output - format.date "year" output.check - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {incollection} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - format.bvolume output - format.number.series output - format.chapter.pages output - new.sentence - publisher "publisher" output.check - address output - format.edition output - format.date "year" output.check - } - { format.incoll.inproc.crossref output.nonnull - format.chapter.pages output - } - if$ - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {inproceedings} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - format.bvolume output - format.number.series output - format.pages output - address empty$ - { organization publisher new.sentence.checkb - organization output - publisher output - format.date "year" output.check - } - { address output.nonnull - format.date "year" output.check - new.sentence - organization output - publisher output - } - if$ - } - { format.incoll.inproc.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {conference} { inproceedings } - -FUNCTION {manual} -{ output.bibitem - author empty$ - { organization empty$ - 'skip$ - { organization output.nonnull - address output - } - if$ - } - { format.authors output.nonnull } - if$ - new.block - format.btitle "title" output.check - author empty$ - { organization empty$ - { address new.block.checka - address output - } - 'skip$ - if$ - } - { organization address new.block.checkb - organization output - address output - } - if$ - format.edition output - format.date output - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - "Master's thesis" format.thesis.type output.nonnull - school "school" output.check - address output - format.date "year" output.check - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - title howpublished new.block.checkb - format.title output - howpublished new.block.checka - howpublished output - format.date output - new.block - note output - fin.entry - dfk.stuff - empty.misc.check -} - -FUNCTION {phdthesis} -{ output.bibitem - format.authors "author" output.check - new.block - format.btitle "title" output.check - new.block - "PhD thesis" format.thesis.type output.nonnull - school "school" output.check - address output - format.date "year" output.check - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {proceedings} -{ output.bibitem - editor empty$ - { organization output } - { format.editors output.nonnull } - if$ - new.block - format.btitle "title" output.check - format.bvolume output - format.number.series output - address empty$ - { editor empty$ - { publisher new.sentence.checka } - { organization publisher new.sentence.checkb - organization output - } - if$ - publisher output - format.date "year" output.check - } - { address output.nonnull - format.date "year" output.check - new.sentence - editor empty$ - 'skip$ - { organization output } - if$ - publisher output - } - if$ - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {techreport} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - format.tr.number output.nonnull - institution "institution" output.check - address output - format.date "year" output.check - new.block - note output - fin.entry - dfk.stuff -} - -FUNCTION {unpublished} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - note "note" output.check - format.date output - fin.entry - dfk.stuff -} - -FUNCTION {default.type} { misc } - -MACRO {jan} {"January"} - -MACRO {feb} {"February"} - -MACRO {mar} {"March"} - -MACRO {apr} {"April"} - -MACRO {may} {"May"} - -MACRO {jun} {"June"} - -MACRO {jul} {"July"} - -MACRO {aug} {"August"} - -MACRO {sep} {"September"} - -MACRO {oct} {"October"} - -MACRO {nov} {"November"} - -MACRO {dec} {"December"} - -MACRO {acmcs} {"ACM Computing Surveys"} - -MACRO {acta} {"Acta Informatica"} - -MACRO {cacm} {"Communications of the ACM"} - -MACRO {ibmjrd} {"IBM Journal of Research and Development"} - -MACRO {ibmsj} {"IBM Systems Journal"} - -MACRO {ieeese} {"IEEE Transactions on Software Engineering"} - -MACRO {ieeetc} {"IEEE Transactions on Computers"} - -MACRO {ieeetcad} - {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} - -MACRO {ipl} {"Information Processing Letters"} - -MACRO {jacm} {"Journal of the ACM"} - -MACRO {jcss} {"Journal of Computer and System Sciences"} - -MACRO {scp} {"Science of Computer Programming"} - -MACRO {sicomp} {"SIAM Journal on Computing"} - -MACRO {tocs} {"ACM Transactions on Computer Systems"} - -MACRO {tods} {"ACM Transactions on Database Systems"} - -MACRO {tog} {"ACM Transactions on Graphics"} - -MACRO {toms} {"ACM Transactions on Mathematical Software"} - -MACRO {toois} {"ACM Transactions on Office Information Systems"} - -MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} - -MACRO {tcs} {"Theoretical Computer Science"} - -READ - -FUNCTION {sortify} -{ purify$ - "l" change.case$ -} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} - -INTEGERS { et.al.char.used } - -FUNCTION {initialize.et.al.char.used} -{ #0 'et.al.char.used := -} - -EXECUTE {initialize.et.al.char.used} - -FUNCTION {format.lab.names} -{ 's := - s num.names$ 'numnames := - numnames #1 > - { numnames #4 > - { #3 'namesleft := } - { numnames 'namesleft := } - if$ - #1 'nameptr := - "" - { namesleft #0 > } - { nameptr numnames = - { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { "{\etalchar{+}}" * - #1 'et.al.char.used := - } - { s nameptr "{v{}}{l{}}" format.name$ * } - if$ - } - { s nameptr "{v{}}{l{}}" format.name$ * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - numnames #4 > - { "{\etalchar{+}}" * - #1 'et.al.char.used := - } - 'skip$ - if$ - } - { s #1 "{v{}}{l{}}" format.name$ - duplicate$ text.length$ #2 < - { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } - 'skip$ - if$ - } - if$ -} - -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - { key #3 text.prefix$ } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - { key #3 text.prefix$ } - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.key.organization.label} -{ author empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - { key #3 text.prefix$ } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.organization.label} -{ editor empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - { key #3 text.prefix$ } - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {calc.label} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.organization.label - { type$ "manual" = - 'author.key.organization.label - 'author.key.label - if$ - } - if$ - } - if$ - duplicate$ - year field.or.null purify$ #-1 #2 substring$ - * - 'label := - year field.or.null purify$ #-1 #4 substring$ - * - sortify 'sort.label := -} - -FUNCTION {sort.format.names} -{ 's := - #1 'nameptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { nameptr #1 > - { " " * } - 'skip$ - if$ - s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := - nameptr numnames = t "others" = and - { "et al" * } - { t sortify * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {sort.format.title} -{ 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} - -FUNCTION {author.sort} -{ author empty$ - { key empty$ - { "to sort, need author or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {author.editor.sort} -{ author empty$ - { editor empty$ - { key empty$ - { "to sort, need author, editor, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {author.organization.sort} -{ author empty$ - { organization empty$ - { key empty$ - { "to sort, need author, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { "The " #4 organization chop.word sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {editor.organization.sort} -{ editor empty$ - { organization empty$ - { key empty$ - { "to sort, need editor, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { "The " #4 organization chop.word sortify } - if$ - } - { editor sort.format.names } - if$ -} - -FUNCTION {presort} -{ calc.label - sort.label - " " - * - type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "proceedings" = - 'editor.organization.sort - { type$ "manual" = - 'author.organization.sort - 'author.sort - if$ - } - if$ - } - if$ - * - " " - * - year field.or.null sortify - * - " " - * - title field.or.null - sort.format.title - * -% DFK throw away stuff above and use cite$ for sort key - pop$ - cite$ - #1 entry.max$ substring$ - 'sort.key$ := -} - -ITERATE {presort} - -SORT - -STRINGS { longest.label last.sort.label next.extra } - -INTEGERS { longest.label.width last.extra.num } - -FUNCTION {initialize.longest.label} -{ "" 'longest.label := - #0 int.to.chr$ 'last.sort.label := - "" 'next.extra := - #0 'longest.label.width := - #0 'last.extra.num := -} - -FUNCTION {forward.pass} -{ last.sort.label sort.label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := - } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - sort.label 'last.sort.label := - } - if$ -} - -FUNCTION {reverse.pass} -{ next.extra "b" = - { "a" 'extra.label := } - 'skip$ - if$ - label extra.label * 'label := - label width$ longest.label.width > - { label 'longest.label := - label width$ 'longest.label.width := - } - 'skip$ - if$ - extra.label 'next.extra := -} - -EXECUTE {initialize.longest.label} - -ITERATE {forward.pass} - -REVERSE {reverse.pass} - -% DFK removed code about et.al.char -% DFK changed to HTML -FUNCTION {begin.bib} -{ "" write$ newline$ - " Bibliography " write$ newline$ - "" write$ newline$ - "" write$ newline$ - "
" write$ newline$ -} - -EXECUTE {begin.bib} - -EXECUTE {init.state.consts} - -ITERATE {call.type$} - -% DFK changed to HTML -FUNCTION {end.bib} -{ newline$ - "
" write$ newline$ - "" write$ newline$ - "" write$ newline$ -} - -EXECUTE {end.bib} diff --git a/Documentation/bibliography/index.html.in b/Documentation/bibliography/index.html.in deleted file mode 100644 index d851dc8b81..0000000000 --- a/Documentation/bibliography/index.html.in +++ /dev/null @@ -1,30 +0,0 @@ - - References on Music Notation - - -

References on Music Notation

-
    -
  • colorado.bib: - University of Colorado Engraving music bibliography -

    - by Alyssa Lamb (edited & converted to bibtex by HWN) -

    - (HTML) -
  • -
  • computer-notation.bib: - The music notation with computer bibliography -

    - by Han-Wen Nienhuys -

    - (HTML) -
  • -
  • engraving.bib: - The engraving bibliography -

    - by Han-Wen Nienhuys -

    - (HTML) -
  • -
- - diff --git a/Documentation/changes.tely b/Documentation/changes.tely new file mode 100644 index 0000000000..babd796462 --- /dev/null +++ b/Documentation/changes.tely @@ -0,0 +1,677 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename lilypond-changes.info +@settitle LilyPond Changes + +@include macros.itexi + +@ifhtml +@macro inputfileref{DIR,NAME} +@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c +@end macro +@macro usermanref{NAME} +@inforef{\NAME\,,../user/lilypond/lilypond}@c +@end macro +@end ifhtml + +@ifnothtml +@macro inputfileref{DIR,NAME} +@file{\DIR\/\NAME\}@c +@end macro +@macro usermanref{NAME} +See user manual, \NAME\ +@end macro +@end ifnothtml + +@macro textanchor{NAME} +@html + +@end html +@end macro + + +@documentencoding utf-8 +@documentlanguage en +@afourpaper + +@finalout + +@node Top +@top New features in 2.14 since 2.12 + +@allowcodebreaks false + +@itemize @bullet + +@ignore + +HINTS + +* add new items at the top + +* only show verbatim input for syntax/input changes + +* try to be as brief possible in those cases + +* don't try to provide real-world examples, they often get too big, +which scares away people. + +* Write complete sentences. + +* only show user-visible changes. + +@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 } + +\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")) + 4. 8 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] +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. + +@end itemize + + + +@ifhtml +For older news, go to +@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. + + +@end ifhtml + +@bye diff --git a/Documentation/common-macros.itexi b/Documentation/common-macros.itexi index a971723ab7..11bae886e4 100644 --- a/Documentation/common-macros.itexi +++ b/Documentation/common-macros.itexi @@ -1,6 +1,9 @@ @c -*- coding: utf-8; mode: texinfo; -*- +@c *********************************************** +@c SEE MACRO DEFINITION GUIDELINES IN macros.itexi +@c *********************************************** @c Don't replace quotes with directed quotes. @@ -50,7 +53,7 @@ @ifnotinfo @macro sourceimage{FILENAME,WIDTH,HEIGHT,ALTTEXT} -@image{\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} +@image{pictures/\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} @end macro @end ifnotinfo @@ -58,7 +61,7 @@ @ifinfo @macro sourceimage{FILENAME,WIDTH,HEIGHT,ALTTEXT} -@image{lilypond/\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} +@image{lilypond/pictures/\FILENAME\,\WIDTH\,\HEIGHT\,\ALTTEXT\} @end macro @end ifinfo @@ -66,10 +69,12 @@ @c ***** Headers ***** +@ifclear snippets-sections @macro lydoctitle {TEXT} +@need 600 @emph{\TEXT\} @end macro - +@end ifclear @c ***** Indexing ***** @@ -123,3 +128,115 @@ UNTRANSLATED NODE: IGNORE ME @end macro @end ifnothtml + + +@c ***** Macros specific to the web site ***** + +@ifset web + +@c make link to bugfixes for news.itexi +@c use underscores for version: @bugfixes{2_13_13,} +@c use specifier arg when listing multiple versions +@c (see September 20, 2007 post for an example) +@macro bugfixes{version,specifier} +@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_\version\&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +\specifier\} +@end macro + +@macro divId {ID} +@html +
+@end html +@end macro + +@macro divClass {CLASS} +@html +
+@end html +@end macro + +@macro divEnd +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@macro spanClass {CLASS} +@html + +@end html +@end macro + +@macro spanEnd +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + + +@c not strictly necessary, but it makes things easier for updating news +@macro newsItem +@html +
+@end html +@end macro + +@macro newsEnd +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + + +@macro imageClickable{IMAGE-FILE, EXT, MORE-TEXT, CLICK-FILE, CLICK-EXT, POSITION} +@html +
+ + \IMAGE-FILE\ + +

+ \MORE-TEXT\ +

+
+@end html +@iftex +@image{pictures/\IMAGE-FILE\,,,\IMAGE-FILE\} +@end iftex +@ifinfo +@image{lilypond/pictures/\IMAGE-FILE\,,,\IMAGE-FILE\} +@end ifinfo +@end macro + +@macro imageFloat{IMAGE-FILE, EXT, POSITION} +@html +\IMAGE-FILE\ +@end html +@iftex +@image{pictures/\IMAGE-FILE\,,,\IMAGE-FILE\,\EXT\} +@end iftex +@ifinfo +@image{lilypond/pictures/\IMAGE-FILE\,,,\EXT\} +@end ifinfo +@end macro + +@macro imageId{ID, IMAGE-FILE, EXT, ALT} +@html +
+ \ALT\ +
+@end html +@iftex +@image{pictures/\IMAGE-FILE\,,,\ALT\} +@end iftex +@ifinfo +@image{lilypond/pictures/\IMAGE-FILE\,,,\ALT\} +@end ifinfo +@end macro + +@end ifset diff --git a/Documentation/contributor.texi b/Documentation/contributor.texi new file mode 100644 index 0000000000..26b3a26fbb --- /dev/null +++ b/Documentation/contributor.texi @@ -0,0 +1,95 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-contributor.info +@settitle LilyPond Contributor's Guide +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@macro manualIntro +This manual documents contributing to LilyPond version +@version{}. It discusses technical issues and policies that +contributors should follow. + +This manual is not intended to be read sequentially; new contributors +should only read the sections which are relevant to them. For more +information about different jobs, see @rweb{Help us}. +@end macro + +@c `Contributor's Guide' was born 2007-09-15 with git commit 48f3356... +@macro copyrightDeclare +Copyright @copyright{} 2007--2011 by the authors. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator LilyPond Development Team +@omfdescription Contributor's Guide of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Contributor's Guide} + + +@c TOC -- non-tex +@ifnottex + +@menu +* Introduction to contributing:: +* Quick start:: +* Working with source code:: +* Compiling:: +* Documentation work:: +* Website work:: +* LSR work:: +* Issues:: +* Regression tests:: +* Programming work:: +* Release work:: +* Build system notes:: +* Administrative policies:: + +Appendices + +* GNU Free Documentation License:: License of this document. +@end menu + +@docMain +@end ifnottex + +@contents + +@allowcodebreaks false + +@include contributor/introduction.itexi +@include contributor/quick-start.itexi +@include contributor/source-code.itexi +@include contributor/compiling.itexi +@include contributor/doc-work.itexi +@include contributor/website-work.itexi +@include contributor/lsr-work.itexi +@include contributor/issues.itexi +@include contributor/regressions.itexi +@include contributor/programming-work.itexi +@include contributor/release-work.itexi +@include contributor/build-notes.itexi +@include contributor/administration.itexi + +@include fdl.itexi + +@bye + diff --git a/Documentation/contributor/GNUmakefile b/Documentation/contributor/GNUmakefile new file mode 100644 index 0000000000..c93c9e0624 --- /dev/null +++ b/Documentation/contributor/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/contributor/administration.itexi b/Documentation/contributor/administration.itexi new file mode 100644 index 0000000000..980c2141fe --- /dev/null +++ b/Documentation/contributor/administration.itexi @@ -0,0 +1,876 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Administrative policies +@chapter Administrative policies + +This chapter discusses miscellaneous administrative issues which +don't fit anywhere else. + +@menu +* Meta-policy for this document:: +* Meisters:: +* Administrative mailing list:: +* Grand Organization Project (GOP):: +* Grand LilyPond Input Syntax Standardization (GLISS):: +* Unsorted policies:: +@end menu + +@node Meta-policy for this document +@section Meta-policy for this document + +The Contributor's Guide as a whole is still a work in progress, +but some chapters are much more complete than others. Chapters +which are @qq{almost finished} should not have major changes +without a discussion on @code{-devel}; in other chapters, a +disorganized @qq{wiki-style dump} of information is encouraged. + +Do not change (other than spelling mistakes) without discussion: + +@itemize + +@item +@ref{Introduction to contributing} + +@item +@ref{Working with source code} + +@end itemize + +Please dump info in an appropriate @@section within these manuals, +but discuss any large-scale reorganization: + +@itemize + +@item +@ref{Compiling} + +@item +@ref{Documentation work} + +@item +@ref{Issues} + +@item +@ref{Regression tests} + +@item +@ref{Programming work} + + +@end itemize + +Totally disorganized; do whatever the mao you want: + +@itemize + +@item +@ref{Website work} + +@item +@ref{LSR work} + +@item +@ref{Release work} + +@item +@ref{Administrative policies} + +@end itemize + + + +@node Meisters +@section Meisters + +We have four jobs for organizing a team of contributors: + +@itemize + +@item +Bug Meister: trains new Bug Squad volunteers, organizes who works +on which part of their job, checks to make sure that everything is +running smoothly, and has final say on our policy for Issues. + +Currently: Phil + +@item +Doc Meister: trains new doc editors/writers, organizes who works +on which part of the job, checks to make sure that everything is +running smoothly, and has final say on our policy for +Documentation. Also includes LSR work. + +Currently: Graham + +@item +Translation Meister: trains new translators, updates the +translation priority list, and handles merging branches (in both +directions). + +Currently: Francisco + +@item +Frog Meister: is responsible for code patches from (relatively) +inexperienced contributors. Keeps track of patches, does initial +reviewing of those patches, sends them to @code{-devel} when +they've had some initial review on the Frog list, pesters the +@code{-devel} community into actually reviewing said patches, and +finally pushes the patches once they're accepted. This person is +@emph{not} responsible for training new programmers, because that +would be far too much work -- he job is @qq{only} to guide +completed patches through our process. + +Currently: Carl + +@end itemize + +@node Administrative mailing list +@section Administrative mailing list + +An mailing list for administrative issues is maintained at +@code{lilypond-hackers@@gnu.org}. + +This list is intended to be used for discussions that should be kept +private. Therefore, the archives are closed to the public. + +Subscription to this list is limited to certain senior developers. + +At the present time, the list is dormant. + +Details about the criteria for membership, the types of discussion +to take place on the list, and other policies for the hackers list +will be finalized during the +@ref{Grand Organization Project (GOP)}. + + + +@node Grand Organization Project (GOP) +@section Grand Organization Project (GOP) + +GOP has two goals: + +@itemize +@item +Clarify the various development tasks by writing down the polices +and techniques and/or simplifying the tasks directly. + +@item +Get more people involved in development: specifically, find people +to do easy tasks to allow advanced developers to concentrate on +difficult tasks. + +@end itemize + +@menu +* Motivation:: +* Ongoing jobs:: +* Policy decisions:: +@end menu + +@node Motivation +@subsection Motivation + +Most readers are probably familiar with the LilyPond Grand +Documentation Project, which ran from Aug 2007 to Aug 2008. This +project involved over 20 people and resulted in an almost complete +rewrite of the documentation. Most of those contributors were +normal users who decided to volunteer their time and effort to +improve lilypond for everybody. By any measure, it was a great +success. + +The Grand Organization Project aims to do the same thing with a +larger scope -- instead of focusing purely on documentation, the +project aims to improve all parts of LilyPond and its community. +Just as with GDP, the main goal is to encourage and train users to +become more involved. + +If you have never contributed to an open-source project before -- +especially if you use Windows or OSX and do not know how to +program or compile programs -- you may be wondering if there's +anything you can do. Rest assured that you @emph{can} help. + +@subheading "Trickle-up" development + +One of the reasons I'm organizing GOP is "trickle-up" +development. The idea is this: doing easy tasks frees up advanced +developers to do harder tasks. Don't ask "am I the @emph{best} +person for this job"; instead, ask "am I @emph{capable} of doing +this job, so that the current person can do stuff I @emph{can't} +do?". + +For example, consider lilypond's poor handling of grace notes in +conjunction with clef and tempo changes. Fixing this will require +a fair amount of code rewriting, and would take an advanced +developer a few weeks to do. It's clearly beyond the scope of a +normal user, so we might as well sit back and do nothing, right? + +No; we @emph{can} help, indirectly. Suppose that our normal user +starts answering more emails on lilypond-user. This in turn means +that documentation writers don't need to answer those emails, so +they can spend more time improving the docs. I've noticed that all +doc writers tackle harder and harder subjects, and when they start +writing docs on scheme programming and advanced tweaks, they start +contributing bug fixes to lilypond. Having people performing these +easy-to-moderate bug fixes frees up the advanced developers to +work on the really hard stuff... like rewriting the grace note +code. + +Having 1 more normal user answering emails on lilypond-user won't +have a dramatic trick-up affect all by himself, of course. But if +we had 8 users volunteering to answer emails, 6 users starting to +write documentation, and 2 users editing LSR... well, that would +free up a lot of current bug-fixing-capable contributors to focus +on that, and we could start to make a real dent in the number of +bugs in lilypond. Quite apart from the eased workload, having that +many new helpers will provide a great moral boost! + +@node Ongoing jobs +@subsection Ongoing jobs + +Although GOP is a short-term project, the main goal is to train +more people to handle ongoing jobs. The more people doing these +jobs, the ligher the work will be, and the more we can get done +with lilypond! + +Also, it would be nice if we had at least one "replacement" / +"understudy" for each role -- too many tasks are only being done +by one person, so if that person goes on vacation or gets very +busy with other matters, work in that area grinds to a halt. + +@subheading Jobs for normal users + +@itemize +@item Consultant: +LilyPond is sometimes critized for not listening to users, but +whenever we ask for opinions about specific issues, we never get +enough feedback. This is somewhat aggravating. +We need a group of users to make a dedicated effort to test and +give feedback. If there's new documentation, read it. If there's +an experimental binary, download it and try compiling a score with +it. If we're trying to name a new command, think about it and give +serious suggestions. + +@item lilypond-user support: +I think it would be nice if we had an official team of users +helping other users. + +@item LilyPond Report: +Keeping a monthly newsletter running is a non-trivial task. A lot +of work is needed to organize it; it would be great if we could +split up the work. One person could write the Snippet of the +Month, another person could do Quotes of the Month, another person +could do interviews, etc. + +@item Documentation: +Although GDP (the Grand Documentation Project) did great work, +there's still many tasks remaining. + +@item Translations: +Keeping the documentation translations is a monumental task; we +need all the help we can get! + +@end itemize + +@subheading Jobs for advanced users for developers + +@itemize +@item Git help for writers: +We often receive reports of typos and minor text updates to the +documentation. It would be great if somebody could create +properly-formatted patches for these corrections. + +Technical requirements: ability to run @ref{Lilydev}. + +@item LSR editor: +LSR contains many useful examples of lilypond, but some snippets +are out of date and need updating. Other snippets need to be +advertized, and new snippets need to be sorted. We could use +another person to handle LSR. + +Technical requirements: use of a web browser. LilyPond +requirements: you should be familiar with most of Notation +chapters 1 and 2 (or be willing to read the docs to find out). + +@item Join the Frogs: +"Frogs" are a team of bug-fixers (because frogs eat bugs, and you +often find them in Ponds of Lilies) and new feature implementors. + +Technical requirements: development environment (such as +@ref{Lilydev}), ability to read+write scheme and/or C++ code. + +@end itemize + + +@node Policy decisions +@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. + +@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.} + +Note that the presence of an item on this list does @emph{not} +mean that everybody thinks that something needs to be done. +Inclusion in this simply means that one developer thinks that we +should discuss it. We are not going to filter this list; if any +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. + +There are some item(s) not displayed here; these are questions +that were posed to me privately, and I do not feel justified in +discussing them publicly without the consent of the person(s) that +brought them up. They will initially be discussed privately on the +lilypond-hackers mailing list -- but the first question will be +"do we absolutely need to do this privately", and if not, the +discussion will take place on lilypond-devel like the other items. + +In most policy discussions in lilypond over the past few years, +the first half (or more) is wasted arguing on the basis of +incorrect or incomplete data; once all the relevant facts are +brought to light, the argument is generally resolved fairly +quickly. In order to keep the GOP discussions focused, each topic +will be introduced with a collection of relevant facts and/or +proposals. It is, of course, impossible to predict exactly which +facts will be relevant to the discussion -- but spending an hour +or two collecting information could still save hours of +discussion. + +@warning{The estimated time required for "prep work", and the +following discussion, has been added to each item. At the moment, +there is an estimated 30 hours of prep work and 140 hours of +discussion.} + +@itemize +@item @strong{Patch reviewing}: +At the time of this writing, we have 23 (known) patches waiting +for review. Some from main developers; some from new developers. +We desperately need more people helping with lilypond, but +ignoring patches is the best way to drive potential contributors +away. This is not good. + +(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? + +(prep: 1 hour. discuss: 15 hours) + +@item @strong{lilypond-hackers mailing list}: +Should we have a private mailing list for senior developers? If +so, who should be on it? + +(prep: 2 hours+3 weeks. discuss: 10 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 +branches that aren't related to the master? i.e. should we +restrict a git branch to code which is an actual "branch" of +development? Also, some of our code (notably the windows and osx +lilypad) isn't in a git repository at all. +We can add new repositories very easily; should make repositories +like +@example +git://git.sv.gnu.org/lilypond/gub.git +git://git.sv.gnu.org/lilypond/lilypad.git +git://git.sv.gnu.org/lilypond/misc.git +@end example +? More information here: +@uref{http://code.google.com/p/lilypond/issues/detail?id=980} + +(prep: 2 hours. discuss: 10 hours) + +@item @strong{Roadmap of future development}: +Many projects have a roadmap of planned (or desired) future work. +Should we use one? If so, what should go on it, bearing in mind +our volunteer status? Is there any way of having a roadmap that +isn't vaporware? + +(prep: 1 hour. discuss: 5 hours) + +@item @strong{Official links to other organizations?}: +There's something called the "software freedom conservancy", and +in general, there's a bunch of "umbrella organizations". Joining +some of these might give us more visibility, possibly leading to +more users, more developers, maybe even financial grants or use in +schools, etc. + +(prep: 2 hours. discuss: 5 hours) + +@item @strong{Mailing lists}: +We currently have a mix of official GNU mailing lists and lilynet +lists. Is there a strong rationale for having separate mailing +list servers? Why not pick one place, and put all our lists there? +(or at least, all "permanent" lists?) + +(prep: 1 hour. discuss: 5 hours) + +@item @strong{Issue tracking with google code}: +We use the google issue tracker, but this means that we are +relying on a commercial entity for a large part of our +development. Would it be better (safer in the long run) to use the +savannah bug tracker? + +(prep: 1 hour. discuss: 5 hours) + +@item @strong{Patch review tool}: +Reitveld is inconvenient in some respects: it requires a google +account, and there's no way to see all patches relating to +lilypond. Should we switch to something like gerritt? +@uref{http://code.google.com/p/lilypond/issues/detail?id=1184} + +(prep: 5 hours. discuss: 15 hours) + +@item @strong{Subdomains of *.lilypond.org}: +Unless Jan has a really weird DNS hosting setup, there are no +technical barriers to having names like lsr.lilypond.org, +frog.lilypond.org, or news.lilypond.org. Is this something that we +want to do? + +(prep: 1 hours+2 weeks. discuss: 5 hours) + +@item @strong{Authorship in source files}: +Our documentation currently does not attempt to track individual +authors of each file, while our source code makes a confused and +jumbled attempt to track this. A number of guidelines for F/OSS +projects explicitly recommends _not_ tracking this in individual +files, since the code repository will track that for you. + +(prep: 2 hours. discuss: 15 hours) + +@item @strong{Clarity for sponsorships}: +We currently do not advertize bounties and sponsorships on the +webpage. How much advertising do we want, and what type? +Should we change the "structure" / "framework" for bounties? + +(prep: 2 hours. discuss: 10 hours) + +@item @strong{Separate branches for active development}: +it might be good to have @emph{everybody} working on separate +branches. This complicates the git setup, but with sufficient +logic in lily-git.tcl, we can probably make it transparent to +newbies. However, we'd need a reliable person to handle all the +required merging and stuff. + +(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. +Clarify. + +There is also a wider question how to organize the regtests, such +as where to put interesting-console-output regtests, including +stuff like lilypond-book and midi2ly in a sensible manner, and +possibly including regtests for currently-broken functionality. + +(prep: 2 hours. discuss: 5 hours) + +@end itemize + + + +@node Grand LilyPond Input Syntax Standardization (GLISS) +@section Grand LilyPond Input Syntax Standardization (GLISS) + +@subheading Summary + +@itemize +@item +Start: sortly after 2.14 comes out, which is currently estimated +to happen in January 2011. + +@item +Length: 6-12 months. We're not going to rush this. + +@item +Goal: define an input which we commit to being +machine-updateable for the forseeable future. Any future patches +which change the syntax in a non-convert-ly-able format will be +rejected. (subject to the limitations, below) +Once this is finished, we will release lilypond 3.0. + +@end itemize + + +@subheading The Problem + +One of the biggest complaints people have with lilypond -- other +than silly thing like "there's no gui" -- is the changing syntax. +Now, inventing a language or standards is difficult. If you set +it in stone too soon, you risk being stuck with decisions which +may limit matters. If you keep on updating the syntax, +interaction with older data (and other programs!) becomes complex. + +@subheading Scope and Limitations + +@itemize +@item +tweaks will not be included. Anything with \override, \set, +\overrideProperty, \tweak, \revert, \unset... including even those +command names themselves... is still fair game for NOT_SMART +convert-ly updates. + +@item +other than that, everything is on the table. Is it a problem to +have the tagline inside \header? What should the default behavior +of \include be? When we abolish \times, do we move to \tuplet 3:2 +or \tuplet 2/3 or what (for typical triplets in 4/4 time)? + +@item +we need to get standards for command names. This will help users +remember them, and reduce the options for future names (and +potential renamings later on). \commandOn and \commandOff seem to +work well (should we *always* have an Off command?), but what +about the "command" part? Should it be \nounVerbOn, or +\verbNounOn ? Or \verbNotesWithExtraInformationOn ? + +@item +we need standards for the location of commands. Ligature +brackets, I'm looking at you. (non-postfix notation must die!) + +@item +this Grand Project doesn't affect whether we have a 2.16 or not. +The main problem will be deciding what to do (with a bit of +messiness anticipated for \tuplet); we should definitely release a +2.16 before merging _any_ of these changes. + +@item +we obviously can't /guarantee/ that we'll /never/ make any +non-convert-ly changes in the basic format. But we *can* +guarantee that such changes would force lilypond 4.0, and that we +would only do so for overwhelmingly good reasons. + +@end itemize + +@subheading Workflow + +@itemize +@item +We're going to have lots and lots of emails flying around. The +vast majority won't really fit into either -devel or -user, so +we'll use a list devoted to syntax issues. + +@item +Once we have a serious proposal that gained general acceptance +from the separate syntax mailing list, I'll bring it to -devel. +We're not going to make any changes without discussing it on +-devel, but if we're going to have huge threads about English +grammar and silly ideas, and I don't want to clutter up -devel. +Once whatever chaotic silliness on the syntax list is settled +down, I'll bring the ideas to -devel. + +@item +as with GDP, I'll moderate the discussion. Not as with mailist +moderation, but rather by introducing issues at specific times. +We don't want a free-for-all discussion of all parts of the syntax +at once; nothing will get resolved. + +@item +Whenever possible, we'll decide on policies at the highest level +of abstraction. For example, consider \numericTimeSignature, +\slurUp, \xNotesOn, \startTextSpan, and \verylongfermata. One of +them starts with the name of the notation first (slur). One has +an abbreviation (x instead of cross). One has the verb at the end +(On), another has it at the beginning (start). The adjective can +come at the beginning (numeric, x) or end (Up). Most are in +camelCase, but one isn't (verylongfermata). + +@item +Instead of arguing about each individual command, we'll decide on +abstract questions. Should each command begin the notation-noun, +or the verb? Should all commands be in camelCase, or should we +make everything other than articulations in camelCase but make +articulations all lower-case? Are abbreviations allowed? + +@item +Once we've answered such fundamental questions, most of the syntax +should fall into place pretty easily. There might be a few odd +questions left ("is it a span, or a spanner?"), but those can be +settled fairly quickly. + +@end itemize + +@subheading Implementation + +Nothing until the project is finished, then we declare the next +stable release (2.16.0 or 2.18.0 ?) to be the final 2.x version, +release it, then apply all the GLISS syntax changes and start +testing a beta for 3.0 a week or two later. + +@subheading Discussion + +Don't respond to any of the specifics yet. Yes, we all have our +pet irritations (like "what's up with \paper and \layout?!"). +There will be plenty of time to discuss them once GLISS starts. + +That said, we have a list of specific items that people really +wanted to have written down. See @ref{Specific GLISS issues}. + +@menu +* Specific GLISS issues:: +@end menu + + +@node Specific GLISS issues +@subsection Specific GLISS issues + +@itemize +@item +add regtests for every piece of syntax (not one-command-per-file, +but making a few files which, between them, use every single piece +of syntax.) This is a great test for convert-ly. + +@item +should GLISS cover suggested conventions? (indentation, +one-bar-per-line, etc -- the kind of stuff we list for the +lilypond formatting in the docs ?) + +@item +how much (if any) syntactic sugar should we add? i.e. +@example + \instrumentName #'foo +% instead of + \set Staff.instrumentName +@end example +? Carl: maybe yes, Neil: no. (for example, it fails for +pianostaff) + +@item +the values that are used as arguments to common used overrides. +Sometimes they are a symbol (e.g. #'around), sometimes a +predefined variable referring to a Scheme value or object (e.g. +#LEFT, #all-visible ). The main trouble is that for novice users +it is not clear when there should be an apostrophe and when not. + +@item +When do we need -\command and when is it just \command ? + + +@item +Command-line options to the lilypond binary. -dfoo counts as a +tweak; we won't be trying to pin those down. + +@item +@verbatim +\layout { + \context { \Score +% vs. +\layout { + \context { + \Score +@end verbatim + +@item +If would be pedagogically simpler to realize this difference if +the syntax was separate if you define a context from scratch (as +is the case with \RemoveEmptyStaffContext) or if it's defined by +adding onto an existing context. For example, a syntax like + +@verbatim +\context{ + % Copy the current settings of the Staff context: + \use Staff + % do whatever additional settings +} +%%% could be used to distinguish from +\context{ + % Take settings from a variable: + \Variable + % do whatever additional settings +} + +%%% and + +\context{ + % Start from scratch: + \type ... + \name ... + \consists ... + ... +} +@end verbatim + +@item +Capitalization of identifiers: \VoiceOne ? + +@item +@verbatim +%%% Allow +{ music expression } * 4 +%%% instead of +\repeat unfold 4 { music expression } +@end verbatim + +? patch here: +@uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-04/msg00467.html} + +@item +Personally, I find it easier to understand when there's a repeated +8 in the half-bar position; it's much easier to see that you have +two groups of 4: + +@example +c8 c c c c8 c c c +%%% instead of one group of eight: +c8 c c c c c c c +@end example + +@item +trivially simple bar-lines: + +c1 | c1 | + +encourage, allow, or discourage, or disallow? + +@item +indentation of \\ inside a @{@} construct. + + +@item +barline checks at the end of line should be preceded by at least 2 +spaces? barline checks should line up if possible (i.e. if you +can use less than 4, 8, X empty spaces before a barline check to +make them line up?) + +@item +Why doesn't \transpose respect \relative mode? + + +@item +on \score vs. \new Score + +But in the light of a consistent syntax and semantic, I see no +reason (from the users POV) to disallow it. After all, the real +top-level context is a \book @{@}, isn't it, and I don't see a point +in disallowing a \new Score construct just like \new Staff. + +From a syntactical POV, I see the following pros for \new Score: +- You can write \with @{ ... @} for every other context but \Score, +which (for consistency) should also work with \new Score. +- When there's a \new Foo Bar, there's also a \context Foo Bar, + which makes the same as a parallel instantiation of all Bar's. +- [Quoting Rune from +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/msg14713.html} + "I know that the \score-statement is a syntactical construct, +but I think it would be nice to hide this fact from the users. I +think we could make the use of score-block much more intuitive if +changing the syntax to \new \Score and adding an implicit +sequential-statement to the score." + + +@item +Discussion on +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 + +@item +should engravers be pluralized (note_heads_engraver) or not +(note_head_engraver) ? + +@item +should we allow numbers in identifier names? Issue: +http://code.google.com/p/lilypond/issues/detail?id=1670 + +@item +should we officially allow accented characters? in general, how +do we feel about utf-8 stuff? + +@item +for the sake of completeness/simplicity, what about *disallowing* +the "one-note" form of a music expression? i.e. only allowing +stuff like +@verbatim + \transpose c d { e1 } + \transpose c d << e1 >> +@end verbatim + +and never allowing +@verbatim + \transpose c d e1 +@end verbatim + +@end itemize + + +@node Unsorted policies +@section Unsorted policies + +@subsubheading Language-specific mailing lists + +A translator can ask for an official lilypond-xy mailing list once +they've finished all @qq{priority 1} translation items. + +@subsubheading Performing yearly copyright update (@qq{grand-replace}) + +At the start of each year, copyright notices for all source files +should be refreshed by running the following command from the top of +the source tree: + +@example +make grand-replace +@end example + +Internally, this invokes the script @file{scripts/build/grand-replace.py}, +which performs a regular expression substitution for old-year -> new-year +wherever it finds a valid copyright notice. + +Note that snapshots of third party files such as @file{texinfo.tex} should +not be included in the automatic update; @file{grand-replace.py} ignores these +files if they are listed in the variable @code{copied_files}. + + +@subsubheading Push git access + +Git access is given out when a contributor has a significant +record of patches being accepted without problems. If existing +developers are tired of pushing patches for a contributor, we'll +discuss giving them push access. Unsolicited requests from +contributors for access will almost always be turned down. + diff --git a/Documentation/contributor/build-notes.itexi b/Documentation/contributor/build-notes.itexi new file mode 100644 index 0000000000..073cbcb540 --- /dev/null +++ b/Documentation/contributor/build-notes.itexi @@ -0,0 +1,736 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + + +@node Build system notes +@chapter Build system notes + +@warning{This chapter is in high flux, and is being run in a +@qq{wiki-like} fashion. Do not trust anything you read in this +chapter.} + +@menu +* Build system overview:: +* Tips for working on the build system:: +* General build system notes:: +* Doc build:: +* Website build:: +* Building an Ubuntu distro:: +@end menu + + +@node Build system overview +@section Build system overview + +Build system is currently GNU make, with an extra "stepmake" layer +on top. Look at files in @file{make/} and @file{stepmake/} and +all @file{GNUmakefile}s. + +There is wide-spread dissatisfaction with this system, and we are +considering changing. This would be a huge undertaking (estimated +200+ hours). This change will probably involve not using GNU make +any more -- but a discussion about the precise build system will +have to wait. Before we reach that point, we need to figure out +(at least approximately) what the current build system does. + +Fundamentally, a build system does two things: + +@enumerate +@item +Constructs command-line commands, for example: + +@example +lilypond-book \ + --tons --of --options \ + pitches.itely +texi2pdf \ + --more --imperial --and --metric --tons --of --options \ + pitches.texi +@end example + +@item +If there was a previous build, it decides which parts of the +system need to be rebuilt. + +@end enumerate + +When I try to do anything in the build system, it helps to remind +myself of this. The "end result" is just a series of command-line +commands. All the black magick is just an attempt to construct +those commands. + +@node Tips for working on the build system +@section Tips for working on the build system + +@itemize +@item +Add: + +@example +echo "aaa" + +echo "bbb" +@end example + +to the build system files in various places. This will let you +track where the program is, in various points of the build. + +PH note. There are lots of places where Make doesn't let you put +echo commands. My top tip for tracing how make runs is to put + +@example +$(error Some Text to display) +@end example + +This will stop make running and print the text @code{Some Text to +display}. + +End PH note. + +@item +First task: understand how @code{make website} works, +@emph{without} the translations. Looking at the english-only +website is the best introduction to the build system... it only +covers about 5% of the whole thing, but even that will likely take +10 hours or more. + +@end itemize + + +@node General build system notes +@section General build system notes + +@menu +* How stepmake works:: +@end menu + +@node How stepmake works +@subsection How stepmake works + +Typing make website runs the file @file{GNUmakefile} from the +build directory. This only contains 3 lines: + +@example +depth = . +include config$(if $(conf),-$(conf),).make +include $(configure-srcdir)/GNUmakefile.in +@end example + +The variable @code{depth} is used throughout the make system to +track how far down the directory structure the make is. The first +include sets lots of variables but doesn't "do" anything. The +second runs the file @file{GNUmakefile.in} from the top level +source directory. + +This sets another load of variables, and then includes (i.e. +immediately runs) @file{stepmake.make} from the @file{make} +subdirectory. This sets a load of other variables, does some +testing to see if SCONS (another build tool?) is being used, and +then runs @file{make/config.make} - which doesn't seem to exist... + +GP: scons is indeed a different build tool; I think that Jan +experimented with it 5 years ago or something. It seems like we +still have bits and pieces of it floating around. + +Next, it runs @file{make/toplevel-version.make}, which sets the +version variables for major, minor, patch, stable, development and +mypatchlevel (which seems to be used for patch numbers for +non-stable versions only?). + +Next - @file{make/local.make}, which doesn't exist. + +Then a few more variable and the interesting comment: + +@example +# Don't try to outsmart us, you puny computer! +# Well, UGH. This only removes builtin rules from +@end example + +and then tests to see whether BUILTINS_REMOVED is defined. It +appears to be when I run make, and so +@file{stepmake/stepmake/no-builtin-rules.make} is run. The +comment at the head of this file says: + +@example +# UGH. GNU make comes with implicit rules. +# We don't want any of them, and can't force users to run +# --no-builtin-rules +@end example + +I've not studied that file at length, but assume it removes all +make's build-in rules (e.g. @file{*.c} files are run through the +GNU C compiler) - there's a lot of them in here, and a lot of +comments, and I'd guess most of it isn't needed. + +We return to @file{stepmake.make}, where we hit the make rule all: +The first line of this is: + +@example +-include $(addprefix $(depth)/make/,$(addsuffix -inclusions.make, $(LOCALSTEPMAKE_TEMPLATES))) +@end example + +which, when the variables are substituted, gives: + +@example +./make/generic-inclusions.make +./make/lilypond-inclusions.make. +@end example + +(Note - according to the make documentation, -include is only +different from include in that it doesn't produce any kind of +error message when the included file doesn't exist). + +And the first file doesn't exist. Nor the second. Next: + +@example +-include $(addprefix $(stepdir)/,$(addsuffix -inclusions.make, $(STEPMAKE_TEMPLATES))) +@end example + +which expands to the following files: + +@example +/home/phil/lilypond-git/stepmake/stepmake/generic-inclusions.make +/home/phil/lilypond-git/stepmake/stepmake/toplevel-inclusions.make +/home/phil/lilypond-git/stepmake/stepmake/po-inclusions.make +/home/phil/lilypond-git/stepmake/stepmake/install-inclusions.make. +@end example + +One little feature to notice here - these are all absolute file +locations - the line prior to this used relative locations. And +none of these files exist, either. (Further note - I'm assuming +all these lines of make I'm following are autogenerated, but +that'll be something else to discover.) + +Next in @file{stepmake.make}: + +@example +include $(addprefix $(stepdir)/,$(addsuffix -vars.make, $(STEPMAKE_TEMPLATES))) +@end example + +which expands to: + +@example +/home/phil/lilypond-git/stepmake/stepmake/generic-vars.make +/home/phil/lilypond-git/stepmake/stepmake/toplevel-vars.make +/home/phil/lilypond-git/stepmake/stepmake/po-vars.make +/home/phil/lilypond-git/stepmake/stepmake/install-vars.make. +@end example + +Woo. They all exist (they should as there's no - in front of the +include). @file{generic-vars.make} sets loads of variables +(funnily enough). @file{toplevel-vars.make} is very short - one +line commented as @code{# override Generic_vars.make:} and 2 as +follows: + +@example +# urg? +include $(stepdir)/documentation-vars.make +@end example + +I assume the urg comment refers to the fact that this should +really just create more variables, but it actually sends us off to +@file{/home/phil/lilypond-git/stepmake/stepmake/documentation-vars.make}. + +That file is a 3 line variable setting one. + +@file{po-vars.make} has the one-line comment @code{# empty}, as +does @file{install-vars.make}. + +So now we're back to @file{stepmake.make}. + +The next lines are +: +@example +# ugh. need to do this because of PATH :=$(top-src-dir)/..:$(PATH) +include $(addprefix $(depth)/make/,$(addsuffix -vars.make, $(LOCALSTEPMAKE_TEMPLATES))) +@end example + +and the include expands to: + +@example +include ./make/generic-vars.make ./make/lilypond-vars.make. +@end example + +These again set variables, and in some cases export them to allow +child @code{make} processes to use them. + +The final 4 lines of @file{stepmake.make} are: + +@example +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 + +which expand as follows: + +@example +include ./make/generic-rules.make ./make/lilypond-rules.make +include + /home/phil/lilypond-git/stepmake/stepmake/generic-rules.make + /home/phil/lilypond-git/stepmake/stepmake/toplevel-rules.make + /home/phil/lilypond-git/stepmake/stepmake/po-rules.make + /home/phil/lilypond-git/stepmake/stepmake/install-rules.make +include ./make/generic-targets.make ./make/lilypond-targets.make +include + /home/phil/lilypond-git/stepmake/stepmake/generic-targets.make + /home/phil/lilypond-git/stepmake/stepmake/toplevel-targets.make + /home/phil/lilypond-git/stepmake/stepmake/po-targets.make + /home/phil/lilypond-git/stepmake/stepmake/install-targets.make +@end example + +@file{lilypond-rules.make} is @code{#empty} + +@file{generic-rules.make} does seem to have 2 rules in it. They +are: + +@example +$(outdir)/%.ly: %.lym4 + $(M4) $< | sed "s/\`/,/g" > $@ + +$(outdir)/%: %.in + rm -f $@ + cat $< | sed $(sed-atfiles) | sed $(sed-atvariables) > $@ +@end example + +I believe the first rule is for *.ly files, and has a prerequisite +that *.lym4 files must be built first. The recipe is @code{m4 | +sed "s/\`/,/g" >}. Perhaps someone with more Unix/make knowledge +can comment on exactly what the rules mean/do. + +@file{toplevel-rules.make} is @code{#empty} + +@file{po-rules.make} is @code{#empty} + +@file{install-rules.make} is @code{#empty} + +@file{generic-targets.make} contains 2 lines of comments. + +@file{lilypond-targets.make} contains only: + +@example +## TODO: fail dist or web if no \version present. +check-version: + grep -L version $(LY_FILES) +@end example + +@file{stepmake/generic-targets.make} contains lots of rules - too +many to list here - it seems to be the main file for rules. (FWIW +I haven't actually found a rule for website: anywhere, although +it clearly exists. I have also found that you can display a rule +in the terminal by typing, say @code{make -n website}. This is +probably common knowledge. + +@file{stepmake/toplevel-targets.make} adds a load of other (and +occasionally the same) rules to the gernric-targets. + +@file{stepmake/po-targets.make} is rules for po* makes. + +@file{stepmake/install-targets.make} has rules for local-install*. + +And that's the end of stepmake.make. Back to +@file{GNUmakefile.in}. + +A bit more info from 27 March. I've put some error traces into +@code{GNUmakefile} in the build directory, and it looks like the +following lines actually cause the make to run (putting an error +call above them - no make; below them - make): + +@example +ifeq ($(out),www) +# All web targets, except info image symlinks and info docs are +# installed in non-recursing target from TOP-SRC-DIR +install-WWW: + -$(INSTALL) -m 755 -d $(DESTDIR)$(webdir) + rsync -rl --exclude='*.signature' $(outdir)/offline-root $(DESTDIR)$(webdir) + $(MAKE) -C Documentation omf-local-install +@end example + +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 +@end example + +End of work for Sunday 27th. + +Another alterative approach to understanding the website build +would be to redirect @code{make -n website} and @code{make website} +to a text file and work through a) what it does and b) where the +errors are occurring. + +GP: wow, all the above is much more complicated than I've ever +looked at stuff -- I tend to do a "back first" approach (where I +begin from the command-line that I want to modify, figure out +where it's generated, and then figure out how to change the +generated command-line), rather than a "front first" (where you +begin from the "make" command). + + +@node Doc build +@section Doc build + +@menu +* Building a bibliography:: +@end menu + +@node Building a bibliography +@subsection Building a bibliography + +Bibliography files contain a list of citations, like this: + +@example +@@Book@{vinci, + author = @{Vinci, Albert C.@}, + title = @{Fundamentals of Traditional Music Notation@}, + publisher = @{Kent State University Press@}, + year = @{1989@} +@} +@end example + +There are a variety of types of citation (e.g. Book (as above), +article, publication). Each cited publication has a list of +entries that can be used to identify the publication. +Bibliograpies are normally stored as files with a .bib +extension. One part of the doc-build process is transforming the +bibliography information into @code{texinfo} files. The commands +to do this are in the @file{GNUmakefile} in the +@file{Documentation} directory. + +A typical line of the makefile to translate a single bibliography +is: + +@example +$(outdir)/colorado.itexi: + BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(outdir)/colorado.itexi \ + $(src-dir)/essay/colorado.bib +@end example + +Line by line: + +@example +$(outdir)/colorado.itexi: +@end example + +We're making the file @file{colorado.itexi} and so this is the +make instruction. + +@example + BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \ +@end example + +It's in the @file{essay} directory and we want to run the +bib2texi.py script against it. + +@example + -s $(top-src-dir)/Documentation/lily-bib \ +@end example + +The style template is @file{lily-bib.bst} and is found in the +@file{Documentation} directory. + +@example + -o $(outdir)/colorado.itexi \ +@end example + +The output file in @file{colorado.itexi}. + +@example + $(src-dir)/essay/colorado.bib +@end example + +The input file is @file{colorado.bib} in the @file{essay} +directory. + +The @code{bib2texi} Python script used to be used with a variety +of options, but now is always called using the same options, as +above. Its job is to create the file containing the options for +@code{bibtex} (the program that actually does the translation), +run bibtex, and then clean up some temporary files. Its main +"value add" is the creation of the options file, using this code: + +@example +open (tmpfile + '.aux', 'w').write (r''' +\relax +\citation@{*@} +\bibstyle@{%(style)s@} +\bibdata@{%(files)s@}''' % vars ()) +@end example + +The key items are the style file (now always lily-bib for us) and +the input file. + +The style file is written in its own specialised language, +described to some extent at + +@example +@uref{http://amath.colorado.edu/documentation/LaTeX/reference/faq/bibtex.pdf} +@end example + +The file @file{lily-bib.bst} also has fairly extensive commenting. + +@node Website build +@section Website build + +Start here: @file{make/website.make} + +The overall build system begins with @ref{How stepmake works}. +Summary: when you type @code{make website} this ends up running +@file{GNUmakefile.in} in the @file{git} directory. Right at the +bottom, this has the lines: + +@example +# we want this separate for security; see CG 4.2. -gp +website: + $(MAKE) config_make=$(config_make) \ + top-src-dir=$(top-src-dir) \ + -f $(top-src-dir)/make/website.make \ + website +@end example + +On my system this expands to: + +@example +make --no-builtin-rules config_make=./config.make \ + top-src-dir=/home/phil/lilypond-git \ + -f /home/phil/lilypond-git/make/website.make \ + website +@end example + +We see that the @code{$(MAKE)} expands to +@code{make --no-builtin-rules} which is how @code{MAKE} is +defined higher up the makefile. The -f switch defines the +makefile to be used - in this case +@file{git/make/website.make}. That's where all the action +happens. + +We believe that note that *none* of the variables that +are loaded (from depth to version numbers to whatever) are used in +@file{website.make}. Instead, @file{website.make} sets up its own +variables at the top of the file. If you're wondering if there's +some smart reason for this, then the answer is "no". It's because +I (GP) didn't know/trust the original variables when I was writing +that file. + +Website build includes @ref{Building a bibliography}. + +@subsubheading Output from @code{make -n website} + +Sorry, including this output directly produces problems in the +build system. Please run: + +@example +make -n website &> my-file.txt +@end example + +to see the full output from the make. + +@subsubheading website.make variables + +The file begins by setting up some variables. These +may/might/probably mirror existing variables, but lacking any docs +about those variables, I thought it would be simpler to keep +everything in the same file. + +Note that for security reasons, we @strong{don't} call scripts in +the git dir when building on the web server. See @ref{Uploading +and security}. So we definitely want to keep those definitions +for the WEBSITE_ONLY_BUILD. + +After some split WEBSITE_ONLY_BUILD vs. normal build definitions, +there's another bunch of lines setting up generic variables. + +@subsubheading website.make building parts + +Parts of @file{website.make}: + +@itemize + +@item +@code{website:} +this is the "master" rule. It calls the other rules in order, +then copies some extra files around - see below for further +of the process it produces. + +@item +@code{website-version}: +this calls the python scripts below: + +@itemize +@item +@example +scripts/build/create-version-itexi.py +@end example + +This writes a @@version, @@versionStable, and @@versionDevel based +on the top-level VERSIONS file, to +@code{out-website/version.itexi} + +@item +@example +scripts/build/create-weblinks-itexi.py +@end example + +This creates a ton of macros in @code{out-website/weblinks.itexi}. +Stuff like @@downloadStableLinuxNormal, @@downloadStableWidows, +@code{@@stableDocsNotationPdf@{@}}, @@downloadDevelSourch-zh. + +It's quite monstrous because it deals with combinations of +stable/devel, source/docs, lang/lang/lang*10, etc. + +@end itemize + + +@item +@code{website-xrefs:} +creates files used for complicated "out-of-build" references to +@code{out-website/*.xref-map} + +If you just write @@ref@{@}, then all's groovy and we wouldn't +need this. But if you write @@rlearning@{@}, then our custom +texi2html init file needs to know about our custom xref file +format, which tells our custom texi2html init file how to create +the link. + +GP: we should have a separate @@node to discuss xrefs. Also, take a +quick look at a generated xref file -- it's basically just a list +of @@node's [sic teenager pluralization rule] from the file. + +@item +@code{website-bib:} +generates the bibliography texinfo files from the .bib files - in +the case of the website build these are @file{others-did.bib} and +@file{we-wrote.bib}. + +@item +@code{website-texinfo:} +this is the main part; it calles texi2html to generate the actual +html. It also has a ton of options to texi2html to pass info to +our custom init file. + +We have somewhere between 2-4 different ways "to pass info to our +custom init file". This is highly Not Good (tm), but that's how +things work at the moment. + +After texi2html, it does some black magick to deal with +untranslated nodes in the translations. Despite writing that +part, I can't remember how it works. But in theory, you could +figure it out by copy&pasting each part of the command (by "part", +I mean "stuff before each | pipe"), substituting the variables, +then looking at the text that's output. For example, + +@example + ls $(OUT)/$$l/*.html +@end example + +is going to print a list of all html files, in all languages, in +the build directory. Then more stuff happens to each of those +files (that's what xargs does). + +@item +@code{website-css:} +just copies files to the build dir. + +@item +@code{website-pictures, website-examples:} +more file copies, with an if statement to handle if you don't have +any generated pictures/examples. + +@item +@code{web-post:} +runs: + +@example +scripts/build/website_post.py +@end example + +which, it adds the "this page is translated in klingon" to the +bottom of html pages, and adds the google analytics javascript. +It also has hard-coded lilypond version numbers, which is Bad +(tm). + +@end itemize + +Here's a summary of what gets called, in what order, when we run +@code{make website} + +@example +website: + website-texinfo: + website-version: + creates version.itexi and weblinks.itexi + website-xrefs: + runs extract_texi_filenames.py + website-bibs: + creates bibliography files, described above + website-css: + copies css files + website-pictures: + copies pictures + website-examples: + copies examples + web-post: + runs website_post.py + Then some file copying +@end example + +@node Building an Ubuntu distro +@section Building an Ubuntu distro + +@enumerate +@item +Install ubuntu, reboot +@item +Run all updates, reboot if asked +@item +Enable src repos, refresh package lists +@item +Install LilyPond build deps: +@example + sudo apt-get build-dep lilypond +@end example +@item +Install git and autoconf: +@example + sudo apt-get install git-core gitk autoconf +@end example + +@item +TEST TO SEE WHETHER EVERYTHING WORKS NOW: +@enumerate +@item +Use lily-git.tcl to grab source files +@item +Go to source dir and do "./autogen.sh" ; make ; make doc +@item +If all compiles, move on to iso creation... + +@end enumerate + +@item +Download & install "remastersys": +@example + http://sourceforge.net/projects/remastersys/ +@end example +@item +Copy lily-git.tcl script file into /etc/skel/ +@item +Modify /etc/remastersys.conf as desired (change .iso name, default +live session username, etc) +@item +Remove non-essential desktop software as desired +@item +Create iso: sudo remastersys dist +@item +New iso is in /home/remastersys/remastersys/ +@item +Test iso by installing in VM and repeating steps above for +getting source files and building lp and docs +@end enumerate + + + diff --git a/Documentation/contributor/compiling.itexi b/Documentation/contributor/compiling.itexi new file mode 100644 index 0000000000..f1a35d09a7 --- /dev/null +++ b/Documentation/contributor/compiling.itexi @@ -0,0 +1,9 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@node Compiling +@chapter Compiling + +This chapter describes the process of compiling the LilyPond +program from source files. + +@include included/compile.itexi diff --git a/Documentation/contributor/doc-translation-list.itexi b/Documentation/contributor/doc-translation-list.itexi new file mode 100644 index 0000000000..f9234502a7 --- /dev/null +++ b/Documentation/contributor/doc-translation-list.itexi @@ -0,0 +1,96 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@c Word counts are updated automatically by translations-status.py + +Translation of @file{Documentation/foo/bar} should be +@file{Documentation/@var{LANG}/foo/bar}. Unmentioned files should not +be translated. + +Priorities: +@itemize +@item 1. delivery, +@item 2. 3. 4. 5. 6. later, +@item 7. optional. +@end itemize + +Files of priority 1 should be submitted along all files generated by +starting a new language in the same commit and thus a unique patch, and +the translation of files marked with priority 2 should be committed to +Git at the same time and thus sent in a single patch. Files +marked with priority 3 or more may be submitted individually. Word +counts (excluding LilyPond snippets) are given for each file. For +knowing how to commit your work to Git, then make patches of your new +translations as well as corrections and updates, see @ref{Basic Git +procedures}. + +@example +-1- Web site +585 web.texi +4506 web/introduction.itexi +1183 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 + +-2- Tutorial +1200 web/manuals.itexi +124 learning.tely +2535 learning/tutorial.itely +4184 learning/common-notation.itely +8043 total + +-3- Fundamental Concepts, starting of Usage and Community +11139 learning/fundamental.itely -- Fundamental concepts +135 usage.tely +3622 usage/running.itely +1189 usage/updating.itely +1755 web/community.itexi +17840 total + +-4- Rest of Learning manual and Suggestions on writing LilyPond files +15408 learning/tweaks.itely -- Tweaking output +225 learning/templates.itely -- Templates +2694 usage/suggestions.itely -- Suggestions on writing LilyPond files +18327 total + +-5- Notation reference +355 notation.tely +91 notation/notation.itely -- Musical notation +4479 notation/pitches.itely +6048 notation/rhythms.itely +1726 notation/expressive.itely +930 notation/repeats.itely +2163 notation/simultaneous.itely +2056 notation/staff.itely +931 notation/editorial.itely +2716 notation/text.itely +81 notation/specialist.itely -- Specialist notation +4807 notation/vocal.itely +1855 notation/chords.itely +702 notation/piano.itely +806 notation/percussion.itely +826 notation/guitar.itely +66 notation/strings.itely +242 notation/bagpipes.itely +4752 notation/ancient.itely +7069 notation/input.itely -- Input syntax +2164 notation/non-music.itely -- Non-musical notation +11017 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 + +-6- Rest of Application Usage +3764 usage/lilypond-book.itely -- LilyPond-book +1122 usage/converters.itely -- Converting from other formats +4886 total + +-7- Appendices whose translation is optional +326 essay/literature.itely +1222 learning/scheme-tutorial.itely (should be revised first) +1548 total +@end example diff --git a/Documentation/contributor/doc-work.itexi b/Documentation/contributor/doc-work.itexi new file mode 100644 index 0000000000..4658c0d74d --- /dev/null +++ b/Documentation/contributor/doc-work.itexi @@ -0,0 +1,2298 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Documentation work +@chapter Documentation work + +There are currently 11 manuals for LilyPond, not including the +translations. Each book is available in HTML, PDF, and info. The +documentation is written in a language called @code{texinfo} -- +this allows us to generate different output formats from a single +set of source files. + +To organize multiple authors working on the documentation, we use a +Version Control System (VCS) called git, previously discussed in +@ref{Starting with Git}. + +@menu +* Introduction to documentation work:: +* Documentation suggestions:: +* Texinfo introduction and usage policy:: +* Documentation policy:: +* Tips for writing docs:: +* Scripts to ease doc work:: +* Docstrings in scheme:: +* Translating the documentation:: +@end menu + + +@node Introduction to documentation work +@section Introduction to documentation work + +Our documentation tries to adhere to our @ref{Documentation +policy}. This policy contains a few items which may seem odd. +One policy in particular is often questioned by potential +contributors: we do not repeat material in the Notation Reference, +and instead provide links to the @qq{definitive} presentation of +that information. Some people point out, with good reason, that +this makes the documentation harder to read. If we repeated +certain information in relevant places, readers would be less +likely to miss that information. + +That reasoning is sound, but we have two counter-arguments. +First, the Notation Reference -- one of @emph{five} manuals for +users to read -- is already over 500 pages long. If we repeated +material, we could easily exceed 1000 pages! Second, and much +more importantly, LilyPond is an evolving project. New features +are added, bugs are fixed, and bugs are discovered and documented. +If features are discussed in multiple places, the documentation +team must find every instance. Since the manual is so large, it +is impossible for one person to have the location of every piece +of information memorized, so any attempt to update the +documentation will invariably omit a few places. This second +concern is not at all theoretical; the documentation used to be +plagued with inconsistent information. + +If the documentation were targeted for a specific version -- say, +LilyPond 2.10.5 -- and we had unlimited resources to spend on +documentation, then we could avoid this second problem. But since +LilyPond evolves (and that is a very good thing!), and since we +have quite limited resources, this policy remains in place. + +A few other policies (such as not permitting the use of tweaks in +the main portion of NR 1+2) may also seem counter-intuitive, but +they also stem from attempting to find the most effective use of +limited documentation help. + +Before undertaking any large documentation work, contributors are +encouraged to contact the @ref{Meisters, Documentation Meister}. + + +@node Documentation suggestions +@section Documentation suggestions + +@subheading Small additions + +For additions to the documentation, + +@enumerate + +@item +Tell us where the addition should be placed. Please include both +the section number and title (i.e. "LM 2.13 Printing lyrics"). + +@item +Please write exact changes to the text. + +@item +A formal patch to the source code is @emph{not} required; we can +take care of the technical details. + +@item +Send the suggestions to the @code{bug-lilypond} mailing list as +discussed in @rweb{Contact}. + +@item +Here is an example of a perfect documentation report: + +@verbatim +To: bug-lilypond@gnu.org +From: helpful-user@example.net +Subject: doc addition + +In LM 2.13 (printing lyrics), above the last line ("More options, +like..."), please add: + +---- +To add lyrics to a divided part, use blah blah blah. For example, + +\score { + \notes {blah <> } + \lyrics {blah <> } + blah blah blah +} +---- + +In addition, the second sentence of the first paragraph is +confusing. Please delete that sentence (it begins "Users +often...") and replace it with this: +---- +To align lyrics with something, do this thing. +---- + +Have a nice day, +Helpful User +@end verbatim + +@end enumerate + + +@subheading Larger contributions + +To replace large sections of the documentation, the guidelines are +stricter. We cannot remove parts of the current documentation +unless we are certain that the new version is an improvement. + +@enumerate + +@item +Ask on the lilypond-devel mailing list if such a rewrite is necessary; +somebody else might already be working on this issue! + +@item +Split your work into small sections; this makes it much easier to +compare the new and old documentation. + +@item +Please prepare a formal git patch. + +@end enumerate + +Once you have followed these guidelines, please send a message to +lilypond-devel with your documentation submissions. Unfortunately +there is a strict “no top-posting” check on the mailing list; to avoid +this, add: + +> I'm not top posting. + +(you must include the > ) to the top of your documentation +addition. + +We may edit your suggestion for spelling, grammar, or style, and +we may not place the material exactly where you suggested, but if +you give us some material to work with, we can improve the manual +much faster. Thanks for your interest! + + +@node Texinfo introduction and usage policy +@section Texinfo introduction and usage policy + +@menu +* Texinfo introduction:: +* Documentation files:: +* Sectioning commands:: +* LilyPond formatting:: +* Text formatting:: +* Syntax survey:: +* Other text concerns:: +@end menu + + +@node Texinfo introduction +@subsection Texinfo introduction + +The language is called Texinfo; you can see its manual here: + +@uref{http://www.gnu.org/software/texinfo/manual/texinfo/} + +However, you don't need to read those docs. The most important +thing to notice is that text is text. If you see a mistake in the +text, you can fix it. If you want to change the order of +something, you can cut-and-paste that stuff into a new location. + +@warning{Rule of thumb: follow the examples in the existing docs. +You can learn most of what you need to know from this; if you want +to do anything fancy, discuss it on @code{lilypond-devel} first.} + + +@node Documentation files +@subsection Documentation files + +All manuals live in @file{Documentation/}. + +In particular, there are four user manuals, their respective master +source files are @file{learning.tely} (LM, Learning Manual), +@file{notation.tely} (NR, Notation Reference), +@file{music-glossary.tely} (MG, Music Glossary), and +@file{lilypond-program} (AU). Each chapter is written in a separate +file, ending in @file{.itely} for files containing lilypond code, and +@file{.itexi} for files without lilypond code, located in a subdirectory +associated to the manual (@file{learning/} for @file{learning.tely}, and +so on); list the subdirectory of each manual to determine the filename +of the specific chapter you wish to modify. + +Developer manuals live in @file{Documentation/} too. Currently there is +only one: the Contributor's Guide @file{contrib-guide.texi} you are +reading. + +Snippet files are part of documentation, and the Snippet List (SL) lives +in @file{Documentation/} just like the manuals. For information about +how to modify the snippet files and SL, see @ref{LSR work}. + + +@node Sectioning commands +@subsection Sectioning commands + +Most of the manual operates at the + +@example +@@node Foo +@@subsubsection Foo +@end example + +@noindent +level. Sections are created with + +@example +@@node Foo +@@subsection Foo +@end example + +@itemize +@item +Please leave two blank lines above a @code{@@node}; this makes it +easier to find sections in texinfo. + +@item +Do not use any @code{@@} commands for a @code{@@node}. They may be +used for any @code{@@sub...} sections or headings however. + +@example +not: +@@node @@code@{Foo@} Bar +@@subsection @@code@{Foo@} Bar + +but instead: +@@node Foo Bar +@@subsection @@code@{Foo@} Bar +@end example + +@item +If a heading is desired without creating a @code{@@node}, please use +the following: + +@example +@@subheading Foo +@end example + +@item +Sectioning commands (@code{@@node} and @code{@@section}) must not appear +inside an @code{@@ignore}. Separate those commands with a space, ie +@code{@@n}@tie{}@code{ode}. + +@end itemize + +Nodes must be included inside a + +@example +@@menu +* foo:: +* bar:: +@@end menu +@end example + +@noindent +construct. These are easily constructed with automatic tools; see +@ref{Scripts to ease doc work}. + + +@node LilyPond formatting +@subsection LilyPond formatting + +@itemize + +@item +Most LilyPond examples throughout the documentation can be produced +with: + +@example +@@lilypond[verbatim,quote,relative=1] +@end example + +or + +@example +@@lilypond[verbatim,quote,relative=2] +@end example + +If using any combination of @code{\header@{@}}, @code{\score@{@}} or +@code{\layout@{@}} in your example, then you must omit the +@code{relative} variable and either use absolute entry mode or an +explicit @code{\relative@{@}} construction. + +If using @code{\book@{@}} in your example then you must also omit the +@code{relative} variable and either use absolute entry mode or an +explicit @code{\relative@{@}} construction. However, you must also +include the @code{papersize=X} variable, where @code{X} is a defined +paper size from within @file{scm/paper.scm}. This is to avoid the +default @code{a4} paper size being used and leaving too much unnecessary +whitespace and potentially awkward page breaks in the PDFs. + +The preferred @code{papersize}s are @code{a5}, @code{a6} or +@code{a8landscape}. + +@code{a8landscape} works best for a single measure with a single title +and/or single @code{tagline}: + +@example +@@lilypond[papersize=a8landscape,verbatim] +\book @{ + \header @{ + title = "A scale in LilyPond" + @} + \relative @{ + c d e f + @} +@} +@@end lilypond +@end example + +and can also be used to easily show features that require page breaks +(i.e. page numbers) without taking large amounts of space within the +documentation. Do not use the @code{quote} option with this paper size. + +@code{a5} or @code{a6} paper sizes are best used for examples that have +more than two measures of music or require multiple staves (i.e. to +illustrate cross-staff features, RH and LH parts etc.) and where +@code{\book@{@}} constructions are required or where @code{a8landscape} +produces an example that is too cramped. Depending on the example the +@code{quote} option may need to be omitted. + +In rare cases, other options may be used (or omitted), but ask first. + +@item +Please avoid using extra spacing either after or within the +@code{@@lilypond} parameters. + +@example +not: @@lilypond [verbatim, quote, relative=1] +but instead: @@lilypond[verbatim,quote,relative=1] +@end example + +@item +Inspirational headwords are produced with: + +@example +@@lilypondfile[quote,ragged-right,line-width=16\cm,staffsize=16] +@{pitches-headword.ly@} +@end example + +@item +LSR snippets are linked with: + +@example +@@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +@{filename.ly@} +@end example + +@item +Use two spaces for indentation in lilypond examples (no tabs). + +@item +All engravers should have double-quotes around them: + +@example +\consists "Spans_arpeggio_engraver" +@end example + +LilyPond does not strictly require this, but it is a useful +convention to follow. + +@item +All context or layout object strings should be prefaced with @code{#}. +Again, LilyPond does not strictly require this, but it is helpful +to get users accustomed to this scheme construct, i.e. @code{\set +Staff.instrumentName = #"cello"} + +@item +Try to avoid using @code{#'} or @code{#`} within when describing +context or layout properties outside of an @code{@@example} or @code{@@lilypond}, unless +the description explicitly requires it. + +i.e. @qq{...setting the @code{transparent} property leaves the object where it +is, but makes it invisible.} + +@item +If possible, only write one bar per line. + +@item +If you only have one bar per line, omit bar checks. If you +must put more than one bar per line (not recommended), then include bar +checks. + +@item +Tweaks should, if possible, also occur on their own line. +@example +not: \override TextScript #'padding = #3 c1^"hi" +but instead: \override TextScript #'padding = #3 + c1^"hi" +@end example + +@noindent +excepted in Templates, where `doctitle' may be omitted. + +@item +Avoid long stretches of input code. Nobody is going to read +them in print. Create small examples. However, this does not mean +it has be minimal. + +@item +Specify durations for at least the first note of every bar. + +@item +If possible, end with a complete bar. + +@item +Comments should go on their own line, and be placed before +the line(s) to which they refer. + +@item +For clarity, always use @{ @} marks even if they are not technically +required; i.e. + +@example +not: + +\context Voice \repeat unfold 2 \relative c' @{ + c2 d +@} + +but instead: + +\context Voice @{ + \repeat unfold 2 @{ + \relative c' @{ + c2 d + @} + @} +@} +@end example + +@item +Add a space around @{ @} marks; i.e. + +@example +not: \chordmode@{c e g@} +but instead: \chordmode @{ c e g @} +@end example + +@item +Use @{ @} marks for additional @code{\markup} format commands; i.e. + +@example +not: c^\markup \tiny\sharp +but instead: c^\markup @{ \tiny \sharp @} +@end example + +@item +Remove any space around @code{<} @code{>} marks; i.e. + +@example +not: < c e g > 4 +but instead: 4 +@end example + +@item +Beam, slur and tie marks should begin immediately after the first +note with beam and phrase marks ending immediately after the last. + +@example +a8\( ais16[ b cis( d] b) cis4~ b' cis,\) +@end example + +@item +If you want to work on an example outside of the manual (for +easier/faster processing), use this header: + +@example +\paper @{ + indent = 0\mm + line-width = 160\mm - 2.0 * 0.4\in + ragged-right = ##t + force-assignment = #"" + line-width = #(- line-width (* mm 3.000000)) +@} + +\layout @{ +@} +@end example + +You may not change any of these values. If you are making an +example demonstrating special @code{\paper@{@}} values, contact the +Documentation Editor. + +@end itemize + + +@node Text formatting +@subsection Text formatting + +@itemize +@item +Lines should be less than 72 characters long. (We personally +recommend writing with 66-char lines, but do not bother modifying +existing material). Also see the recommendations for fixed-width +fonts in the @ref{Syntax survey}. + +@item +Do not use tabs. + +@item +Do not use spaces at the beginning of a line (except in +@code{@@example} or @code{@@verbatim} environments), and do not +use more than a single space between words. @q{makeinfo} copies +the input lines verbatim without removing those spaces. + +@item +Use two spaces after a period. + +@item +In examples of syntax, use @code{@@var@{@var{musicexpr}@}} for a +music expression. + +@item +Don't use @code{@@rinternals@{@}} in the main text. If you're +tempted to do so, you're probably getting too close to @qq{talking +through the code}. If you really want to refer to a context, use +@code{@@code@{@}} in the main text and @code{@@rinternals@{@}} in +the @code{@@seealso}. +@end itemize + + +@node Syntax survey +@subsection Syntax survey + + +@menu +* Comments:: +* Cross references:: +* External links:: +* Fixed-width font:: +* Indexing:: +* Lists:: +* Special characters:: +* Miscellany:: +@end menu + + +@node Comments +@unnumberedsubsubsec Comments + +@itemize +@item +@code{@@c @dots{}} --- single line comment. @samp{@@c NOTE:} is a +comment which should remain in the final version. (gp only +command ;) + +@item +@code{@@ignore} --- multi-line comment: + +@example +@@ignore +@dots{} +@@end ignore +@end example +@end itemize + + +@node Cross references +@unnumberedsubsubsec Cross references + +Enter the exact @code{@@node} name of the target reference between +the brackets (eg.@tie{}@w{@samp{@@ref@{Syntax survey@}}}). Do not +split a cross-reference across two lines -- this causes the +cross-reference to be rendered incorrectly in html documents. + +@itemize +@item +@code{@@ref@{@dots{}@}} --- link within current manual. + +@item +@code{@@rchanges@{@dots{}@}} --- link to Changes. + +@item +@code{@@rcontrib@{@dots{}@}} --- link to Contributor's Guide. + +@item +@code{@@ressay@{@dots{}@}} --- link to Engraving Essay. + +@item +@code{@@rextend@{@dots{}@}} --- link to Extending LilyPond. + +@item +@code{@@rglos@{@dots{}@}} --- link to the Music Glossary. + +@item +@code{@@rinternals@{@dots{}@}} --- link to the Internals Reference. + +@item +@code{@@rlearning@{@dots{}@}} --- link to Learning Manual. + +@item +@code{@@rlsr@{@dots{}@}} --- link to a Snippet section. + +@item +@code{@@rprogram@{@dots{}@}} --- link to Application Usage. + +@item +@code{@@ruser@{@dots{}@}} --- link to Notation Reference. + +@item +@code{@@rweb@{@dots{}@}} --- link to General Information. +@end itemize + + +@node External links +@unnumberedsubsubsec External links + +@itemize +@item +@code{@@email@{@dots{}@}} --- create a @code{mailto:} E-mail link. + +@item +@code{@@uref@{@var{URL}[, @var{link text}]@}} --- link to an +external url. Use within an @code{@@example ... @@end example}. + +@example +@@example +@@uref@{URL [, link text ]@} +@@end example +@end example +@end itemize + + +@node Fixed-width font +@unnumberedsubsubsec Fixed-width font + +@itemize +@item +@code{@@code@{@dots{}@}}, @code{@@samp@{@dots{}@}} --- + +Use the @code{@@code@{@dots{}@}} command when referring to +individual language-specific tokens (keywords, commands, +engravers, scheme symbols, etc.) in the text. Ideally, a single +@code{@@code@{@dots{}@}} block should fit within one line in the +PDF output. + +Use the @code{@@samp@{@dots{}@}} command when you have a short +example of user input, unless it constitutes an entire +@code{@@item} by itself, in which case @code{@@code@{@dots{}@}} is +preferable. Otherwise, both should only be used when part of a +larger sentence within a paragraph or @code{@@item}. Do not use +@code{@@code@{@dots{}@}} or @code{@@samp@{@dots{}@}} inside an +@code{@@example} block, and do not use either as a free-standing +paragraph; use @code{@@example} instead. + +A single unindented line in the PDF has space for about 79 +fixed-width characters (76 if indented). Within an @code{@@item} +there is space for about 75 fixed-width characters. Each +additional level of @code{@@itemize} or @code{@@enumerate} +shortens the line by about 4 columns. + +However, even short blocks of @code{@@code@{@dots{}@}} and +@code{@@samp@{@dots{}@}} can run into the margin if the Texinfo +line-breaking algorithm gets confused. Additionally, blocks that +are longer than this may in fact print nicely; it all depends +where the line breaks end up. If you compile the docs yourself, +check the PDF output to make sure the line breaks are +satisfactory. + +The Texinfo setting @code{@@allowcodebreaks} is set to +@code{false} in the manuals, so lines within +@code{@@code@{@dots{}@}} or @code{@@samp@{@dots{}@}} blocks will +only break at spaces, not at hyphens or underscores. If the block +contains spaces, use @code{@@w@{@@code@{@dots{}@}@}} or +@code{@@w@{@@samp@{@dots{}@}@}} to prevent unexpected line breaks. + +The Texinfo settings @code{txicodequoteundirected} and +@code{txicodequotebacktick} are both set in the manuals, so +backticks (@code{`}) and apostrophes (@code{'}) placed within +blocks of @code{@@code}, @code{@@example}, or @code{@@verbatim} +are not converted to left- and right-angled quotes +(@code{@quoteleft{} @quoteright{}}) as they normally are within +the text, so the apostrophes in +@q{@w{@code{@@w@{@@code@{@bs{}relative c''@}@}}}} will display +correctly. However, these settings do not affect the PDF output +for anything within a @code{@@samp} block (even if it includes a +nested @code{@@code} block), so entering +@q{@code{@@w@{@@samp@{@bs{}relative c''@}@}}} wrongly produces +@q{@w{@code{@bs{}relative c@quoteright{}@quoteright{}}}} in PDF. +Consequently, if you want to use a @code{@@samp@{@dots{}@}} block +which contains backticks or apostrophes, you should instead use +@q{@code{@@q@{@@code@{@dots{}@}@}}} (or +@q{@code{@@q@{@@w@{@@code@{@dots{}@}@}@}}} if the block also +contains spaces). Note that backslashes within +@code{@@q@{@dots{}@}} blocks must be entered as @samp{@@bs@{@}}, +so the example above would be coded as +@q{@code{@@q@{@@w@{@@code@{@@bs@{@}relative c''@}@}@}}}. + +@item +@code{@@command@{@dots{}@}} --- Use when referring to command-line +commands within the text (eg. @samp{@@command@{convert-ly@}}). Do +not use inside an @code{@@example} block. + +@item +@code{@@example} --- Use for examples of program code. Do not add +extraneous indentation (i.e. don't start every line with +whitespace). Use the following layout (notice the use of blank +lines). Omit the @code{@@noindent} if the text following the +example starts a new paragraph: + +@example +@var{@dots{}text leading into the example@dots{}} + +@@example +@dots{} +@@end example + +@@noindent +@var{continuation of the text@dots{}} +@end example + +Individual lines within an @code{@@example} block should not +exceed 74 characters; otherwise they will run into the margin in +the PDF output, and may get clipped. If an @code{@@example} block +is part of an @code{@@item}, individual lines in the +@code{@@example} block should not exceed 70 columns. Each +additional level of @code{@@itemize} or @code{@@enumerate} +shortens the line by about 4 columns. + +For long command line examples, if possible, use a trailing +backslash to break up a single line, indenting the next line with +2 spaces. If this isn't feasible, use @samp{@@smallexample +@dots{} @@end@tie{}smallexample} instead, which uses a smaller +fontsize. Use @code{@@example} whenever possible, but if needed, +@code{@@smallexample} can fit up to 90 characters per line before +running into the PDF margin. Each additional level of +@code{@@itemize} or @code{@@enumerate} shortens a +@code{@@smallexample} line by about 5 columns. + +@item +@code{@@file@{@dots{}@}} --- Use when referring to filenames and +directories in the text. Do not use inside an @code{@@example} +block. + +@item +@code{@@option@{@dots{}@}} --- Use when referring to command-line +options in the text (eg. @samp{@@option@{--format@}}). Do not use +inside an @code{@@example} block. + +@item +@code{@@verbatim} --- Prints the block exactly as it appears in +the source file (including whitespace, etc.). For program code +examples, use @code{@@example} instead. @code{@@verbatim} uses +the same format as @code{@@example}. + +Individual lines within an @code{@@verbatim} block should not +exceed 74 characters; otherwise they will run into the margin in +the PDF output, and may get clipped. If an @code{@@verbatim} +block is part of an @code{@@item}, individual lines in the +@code{@@verbatim} block should not exceed 70 columns. Each +additional level of @code{@@itemize} or @code{@@enumerate} +shortens the line by about 4 columns. +@end itemize + + +@node Indexing +@unnumberedsubsubsec Indexing + +@itemize +@item +@code{@@cindex @dots{}} --- General index. Please add as many as you can. +Don't capitalize the first word. + +@item +@code{@@funindex @dots{}} --- is for a \lilycommand. +@end itemize + + +@node Lists +@unnumberedsubsubsec Lists + +@itemize +@item +@code{@@enumerate} --- Create an ordered list (with numbers). +Always put @samp{@@item} on its own line. As an exception, if all +the items in the list are short enough to fit on single lines, placing +them on the @samp{@@item} lines is also permissible. @samp{@@item} +and @samp{@@end@tie{}enumerate} should always be preceded by a blank +line. + +@example +@@enumerate + +@@item +A long multi-line item like this one must begin +on a line of its own and all the other items in +the list must do so too. + +@@item +Even short ones + +@@end enumerate +@end example + +@example +@@enumerate + +@@item Short item + +@@item Short item + +@@end enumerate +@end example + +@item +@code{@@itemize} --- Create an unordered list (with bullets). Use +the same format as @code{@@enumerate}. Do not use +@samp{@@itemize@tie{}@@bullet}. +@end itemize + + +@node Special characters +@unnumberedsubsubsec Special characters + +@itemize +@item +@code{--}, @code{---} --- Create an en dash (--) or an em dash +(---) in the text. To print two or three literal hyphens in a +row, wrap one of them in a @code{@@w@{@dots{}@}} (eg. +@samp{-@@w@{-@}-}). + +@item +@code{@@@@}, @code{@@@{}, @code{@@@}} --- Create an at-sign (@@), +a left curly bracket (@{), or a right curly bracket (@}). + +@item +@code{@@bs@{@}} --- Create a backslash within a +@code{@@q@{@dots{}@}}, @code{@@qq@{@dots{}@}}, or +@code{@@warning@{@dots{}@}} block. This is a custom LilyPond +macro, not a builtin @@-command in Texinfo. Texinfo would also +allow @samp{\\}, but this breaks the PDF output. + +@item +@code{@@tie@{@}} --- Create a @emph{variable-width} non-breaking +space in the text (use @w{@samp{@@w@{ @}}} for a single +@emph{fixed-width} non-breaking space). Variables or numbers +which consist of a single character (probably followed by a +punctuation mark) should be tied properly, either to the previous +or the next word. Example: @samp{The letter@@tie@{@}@@q@{I@} is +skipped} +@end itemize + + +@node Miscellany +@unnumberedsubsubsec Miscellany + +@itemize +@item +@code{@@notation@{@dots{}@}} --- refers to pieces of notation, e.g. +@samp{@@notation@{clef@}}. Also use for specific lyrics +(@samp{the @@notation@{A@tie{}-@tie{}men@} is centered}). +Only use once per subsection per term. + +@item +@code{@@q@{@dots{}@}} --- Single quotes. Used for +@quoteleft{}vague@quoteright{} terms. To get a backslash +(\), you must use @samp{@@bs@{@}}. + +@item +@code{@@qq@{@dots{}@}} --- Double quotes. Used for actual quotes +(@qq{he said}) or for introducing special input modes. To get a +backslash (\), you must use @samp{@@bs@{@}}. + +@item +@code{@@var@{@dots{}@}} --- Use for metasyntactic variables (such +as @code{@var{foo}}, @code{@var{bar}}, @code{@var{arg1}}, etc.). +In most cases, when the @code{@@var@{@dots{}@}} command appears in +the text (and not in an @code{@@example} block) it should be +wrapped with an appropriate texinfo code-highlighting command +(such as @code{@@code}, @code{@@samp}, @code{@@file}, +@code{@@command}, etc.). For example: +@samp{@@code@{@@var@{foo@}@}}, +@samp{@@file@{@@var@{myfile.ly@}@}}, +@w{@samp{@@samp@{git checkout @@var@{branch@}@}}}, etc. This +improves readability in the PDF and HTML output. + +@item +@code{@@version@{@}} --- Return the current LilyPond version +string. Use @samp{@@w@{@@version@{@}@}} if it's at the end of a +line (to prevent an ugly line break in PDF); use +@samp{@@w@{"@@version@{@}"@}} if you need it in quotes. + +@item +@code{@@w@{@dots{}@}} --- Do not allow any line breaks. + +@item +@code{@@warning@{@dots{}@}} --- produces a @qq{Note:@tie{}} box. +Use for important messages. To get a backslash (\), you must use +@samp{@@bs@{@}}. +@end itemize + + +@node Other text concerns +@subsection Other text concerns + +@itemize +@item +References must occur at the end of a sentence, for more +information see the +@uref{http://www.gnu.org/software/texinfo/manual/texinfo/,texinfo +manual}. Ideally this should also be the final sentence of a +paragraph, but this is not required. Any link in a doc section +must be duplicated in the @code{@@seealso} section at the bottom. + +@item +Introducing examples must be done with + +@example +. (i.e. finish the previous sentence/paragraph) +: (i.e. `in this example:') +, (i.e. `may add foo with the blah construct,') +@end example + +The old @qq{sentence runs directly into the example} method is not +allowed any more. + +@item +Abbrevs in caps, e.g., HTML, DVI, MIDI, etc. + +@item +Colon usage + +@enumerate +@item +To introduce lists + +@item +When beginning a quote: @qq{So, he said,...}. + +This usage is rarer. Americans often just use a comma. + +@item +When adding a defining example at the end of a sentence. +@end enumerate + +@item +Non-ASCII characters which are in utf-8 should be directly used; +this is, don't say @samp{Ba@@ss@{@}tuba} but @samp{Baßtuba}. This +ensures that all such characters appear in all output formats. +@end itemize + + +@node Documentation policy +@section Documentation policy + +@menu +* Books:: +* Section organization:: +* Checking cross-references:: +* General writing:: +* Technical writing style:: +@end menu + +@node Books +@subsection Books + +There are four parts to the documentation: the Learning Manual, +the Notation Reference, the Program Reference, and the Music +Glossary. + +@itemize + +@item +Learning Manual: + +The LM is written in a tutorial style which introduces the most +important concepts, structure and syntax of the elements of a +LilyPond score in a carefully graded sequence of steps. +Explanations of all musical concepts used in the Manual can be +found in the Music Glossary, and readers are assumed to have no +prior knowledge of LilyPond. The objective is to take readers to +a level where the Notation Reference can be understood and +employed to both adapt the templates in the Appendix to their +needs and to begin to construct their own scores. Commonly used +tweaks are introduced and explained. Examples are provided +throughout which, while being focussed on the topic being +introduced, are long enough to seem real in order to retain the +readers' interest. Each example builds on the previous material, +and comments are used liberally. Every new aspect is thoroughly +explained before it is used. + +Users are encouraged to read the complete Learning Manual from +start-to-finish. + + +@item +Notation Reference: a (hopefully complete) description of LilyPond +input notation. Some material from here may be duplicated in the +Learning Manual (for teaching), but consider the NR to be the +"definitive" description of each notation element, with the LM +being an "extra". The goal is _not_ to provide a step-by-step +learning environment -- do not avoid using notation that has not +be introduced previously in the NR (for example, use \break if +appropriate). This section is written in formal technical writing +style. + +Avoid duplication. Although users are not expected to read this +manual from start to finish, they should be familiar with the +material in the Learning Manual (particularly ``Fundamental +Concepts''), so do not repeat that material in each section of +this book. Also watch out for common constructs, like ^ - _ for +directions -- those are explained in NR 3. In NR 1, you can +write: DYNAMICS may be manually placed above or below the staff, +see @@ref@{Controlling direction and placement@}. + +Most tweaks should be added to LSR and not placed directly in the +@file{.itely} file. In some cases, tweaks may be placed in the main +text, but ask about this first. + +Finally, you should assume that users know what the notation +means; explaining musical concepts happens in the Music Glossary. + + +@item +Application Usage: information about using the program lilypond +with other programs (lilypond-book, operating systems, GUIs, +convert-ly, etc). This section is written in formal technical +writing style. + +Users are not expected to read this manual from start to finish. + + +@item +Music Glossary: information about the music notation itself. +Explanations and translations about notation terms go here. + +Users are not expected to read this manual from start to finish. + +@item +Internals Reference: not really a documentation book, since it is +automagically generated from the source, but this is its name. + +@end itemize + + +@node Section organization +@subsection Section organization + +@itemize + +@item +The order of headings inside documentation sections should +be: + +@example +main docs +@@predefined +@@endpredefined +@@snippets +@@seealso +@@knownissues +@end example + +@item +You @emph{must} include a @@seealso. + +@itemize +@item +The order of items inside the @@seealso section is + +@example +Music Glossary: +@@rglos@{foo@}, +@@rglos@{bar@}. + +Learning Manual: +@@rlearning@{baz@}, +@@rlearning@{foozle@}. + +Notation Reference: +@@ruser@{faazle@}, +@@ruser@{boo@}. + +Application Usage: +@@rprogram@{blah@}. + +Essay on automated music engraving: +@@ressay@{yadda@}. + +Extending LilyPond: +@@rextend@{frob@}. + +Installed Files: +@@file@{path/to/dir/blahz@}. + +Snippets: @@rlsr@{section@}. + +Internals Reference: +@@rinternals@{fazzle@}, +@@rinternals@{booar@}. +@end example + +@item +If there are multiple entries, separate them by commas but do not +include an `and'. + +@item +Always end with a period. + +@item +Place each link on a new line as above; this makes it much easier +to add or remove links. In the output, they appear on a single +line. + +("Snippets" is REQUIRED; the others are optional) + +@item +Any new concepts or links which require an explanation should go +as a full sentence(s) in the main text. + +@item +Don't insert an empty line between @@seealso and the first entry! +Otherwise there is excessive vertical space in the PDF output. + +@end itemize + +@item +To create links, use @@ref@{@} if the link is within the same +manual. + +@item +@@predefined ... @@endpredefined is for commands in +@file{ly/*-init.ly} + +@item +Do not include any real info in second-level sections (i.e. 1.1 +Pitches). A first-level section may have introductory material, +but other than that all material goes into third-level sections +(i.e. 1.1.1 Writing Pitches). + +@item +The @@knownissues should not discuss any issues that are in the +tracker, unless the issue is Priority-Postponed. The goal is to +discuss any overall architecture or syntax decisions which may be +interpreted as bugs. Normal bugs should not be discussed here, +because we have so many bugs that it would be a huge task to keep +the @@knownissues current and accurate all the time. + +@end itemize + + +@node Checking cross-references +@subsection Checking cross-references + +Cross-references between different manuals are heavily used in the +documentation, but they are not checked during compilation. +However, if you compile the documentation, a script called +check_texi_refs can help you with checking and fixing these +cross-references; for information on usage, cd into a source tree +where documentation has been built, cd into Documentation and run: + +@example +make check-xrefs +make fix-xrefs +@end example + +Note that you have to find yourself the source files to fix +cross-references in the generated documentation such as the +Internals Reference; e.g. you can grep scm/ and lily/. + +@c temporary? how long will kainhofer be used? -gp +Also of interest may be the linkdoc checks on kainhofer.com. Be +warned that these docs are not completely rebuilt every day, so it +might not accurately reflect the current state of the docs. + +@example +@uref{http://kainhofer.com/~lilypond/linkdoc/} +@end example + + +@node General writing +@subsection General writing + +@itemize + +@item +Do not forget to create @@cindex entries for new sections of text. +Enter commands with @@funindex, i.e. + +@example +@@cindex pitches, writing in different octaves +@@funindex \relative +@end example + +@noindent +Do not bother with the @@code@{@} (they are added automatically). +These items are added to both the command index and the unified +index. Both index commands should go in front of the actual material. + +@item +@@cindex entries should not be capitalized, i.e. + +@example +@@cindex time signature +@end example + +@noindent +is preferred instead of @qq{Time signature}. Only use capital +letters for musical terms which demand them, e.g. +@qq{D.S. al Fine}. + +@item +For scheme function index entries, only include the final part, i.e. + +@example +@@funindex modern-voice-cautionary + and NOT +@@funindex #(set-accidental-style modern-voice-cautionary) +@end example + +@item +Use American spelling. LilyPond's internal property +names use this convention. + +@item +Here is a list of preferred terms to be used: + +@itemize +@item +@emph{Simultaneous} NOT concurrent. + +@item +@emph{Measure}: the unit of music. + +@item +@emph{Bar line}: the symbol delimiting a measure NOT barline. + +@item +@emph{Note head} NOT notehead. + +@item +@emph{Chord construct} NOT just chord (when referring to < ... >) + +@item +@emph{Staff} NOT stave. + +@item +@emph{Staves} NOT Staffs: +Phrases such as +@q{multiple @@internalsref@{Staff@}s} +should be rephrased to +@q{multiple @@internalsref@{Staff@} contexts}. + +@end itemize + + +@end itemize + + +@node Technical writing style +@subsection Technical writing style + +These refer to the NR. The LM uses a more gentle, colloquial +style. + +@itemize + +@item +Do not refer to LilyPond in the text. The reader knows what the +manual is about. If you do, capitalization is LilyPond. + +@item +If you explicitly refer to @q{lilypond} the program (or any other +command to be executed), write @code{@@command@{lilypond@}}. + +@item +Do not explicitly refer to the reader/user. There is no one else +besides the reader and the writer. + +@item +Avoid contractions (don't, won't, etc.). Spell the words out completely. + +@item +Avoid abbreviations, except for commonly used abbreviations of foreign +language terms such as etc. and i.e. + +@item +Avoid fluff (@qq{Notice that,} @qq{as you can see,} +@qq{Currently,}). + +@item +The use of the word @q{illegal} is inappropriate in most cases. +Say @q{invalid} instead. + +@end itemize + + +@node Tips for writing docs +@section Tips for writing docs + +In the NR, I highly recommend focusing on one subsection at a +time. For each subsection, + +@itemize + +@item +check the mundane formatting. Are the headings (@@predefined, +@@seealso, etc.) in the right order? + +@item +add any appropriate index entries. + +@item +check the links in the @@seealso section -- links to music +glossary, internal references, and other NR sections are the main +concern. Check for potential additions. + +@item +move LSR-worthy material into LSR. Add the snippet, delete the +material from the @file{.itely} file, and add a @@lilypondfile command. + +@item +check the examples and descriptions. Do they still work? +@strong{Do not} assume that the existing text is +accurate/complete; some of the manual is highly out of date. + +@item +is the material in the @@knownissues still accurate? + +@item +can the examples be improved (made more explanatory), or is there +any missing info? (feel free to ask specific questions on -user; +a couple of people claimed to be interesting in being +@qq{consultants} who would help with such questions) + +@end itemize + +In general, I favor short text explanations with good examples -- +@qq{an example is worth a thousand words}. When I worked on the +docs, I spent about half my time just working on those tiny +lilypond examples. Making easily-understandable examples is much +harder than it looks. + + +@subsubheading Tweaks + +In general, any \set or \override commands should go in the +@qq{select snippets} section, which means that they should go in +LSR and not the @file{.itely} file. For some cases, the command +obviously belongs in the @qq{main text} (i.e. not inside +@@predefined or @@seealso or whatever) -- instrument names are a +good example of this. + +@example +\set Staff.instrumentName = #"foo" +@end example + +On the other side of this, + +@example +\override Score.Hairpin #'after-line-breaking = ##t +@end example + +clearly belongs in LSR. + +I'm quite willing to discuss specific cases if you think that a +tweaks needs to be in the main text. But items that can go into +LSR are easier to maintain, so I'd like to move as much as +possible into there. + + +It would be @qq{nice} if you spent a lot of time crafting nice +tweaks for users@dots{} but my recommendation is @strong{not} to do +this. There's a lot of doc work to do without adding examples of +tweaks. Tweak examples can easily be added by normal users by adding +them to the LSR. + +One place where a documentation writer can profitably spend time writing +or upgrading tweaks is creating tweaks to deal with known issues. It +would be ideal if every significant known issue had a workaround to avoid +the difficulty. + +@seealso +@ref{Adding and editing snippets}. + + +@node Scripts to ease doc work +@section Scripts to ease doc work + +@subheading Building only one section of the documentation + +In order to save build time, a script is available to build only +one section of the documentation in English with a default html +appearance. + +The script is available as: + +@example +scripts/auxiliar/doc-section.sh +@end example + +This script will require customization for your site if your +LilyPond git repository is anyplace but @code{$HOME/lilypond}. + +Assuming that no customization is required, you can setup the +single section build with: + +@example +mkdir $HOME/lilypond/tempdocs +cp $HOME/lilypond/Documentation/out/version.itexi $HOME/lilypond/tempdocs +@end example + +You can then build a section of the documentation with: + +@example +scripts/auxiliar/doc-section.sh MANUAL SECTION +@end example + +@noindent +where @code{SECTION} is the name of the file containing the section +to be built, and @code{MANUAL} is replaced by the name of the directory +containing the section. So, for example, to build section 1.1 of the +Notation Reference, use the command: + +@example +scripts/auxiliar/doc-section.sh notation pitches +@end example + +This script will not work for building sections of the +Contributors' guide. For building sections of the Contributors' +Guide, use: + +@example +scripts/auxiliar/cg-section.sh SECTION +@end example + +@noindent +where @code{SECTION} is the name of the file containing the sections +to be built. For example, to build section 4 of the Contributors' guide, +use: + +@example +scripts/auxiliar/cg-section.sh doc-work +@end example + +Like @code{doc-section.sh}, @code{cg-section.sh} may need to be customized +for your installation. + +@subheading Stripping whitespace and generating menus + +@warning{This script assumes that the file conforms to our doc +policy; a few files still need work in this regard.} + +To automatically regenerate @code{@@menu} portions and strip +whitespace, use: + +@example +scripts/auxiliar/node-menuify.py @var{FILENAME} +@end example + + +@subheading Stripping whitespace only + +@c TODO: should this be documented elsewhere? It's useful for +@c more than just docs. +To remove extra whitespace from the ends of lines, run + +@example +scripts/auxiliar/strip-whitespace.py Documentation/FILENAME +@end example + + +@subheading Updating doc with @command{convert-ly} + +Don't. This should be done by programmers when they add new +features. If you notice that it hasn't been done, complain to +@code{lilypond-devel}. + + +@node Docstrings in scheme +@section Docstrings in scheme + +Material in the Internals reference is generated automatically +from our source code. Any doc work on Internals therefore +requires modifying files in @file{scm/*.scm}. Texinfo is allowed +in these docstrings. + +Most documentation writers never touch these, though. If you want +to work on them, please ask for help. + + +@node Translating the documentation +@section Translating the documentation + +The mailing list @code{translations@@lilynet.net} is dedicated to +LilyPond web site and documentation translation; on this list, you will +get support from the Translations Meister and experienced translators, +and we regularly discuss translation issues common to all languages. +All people interested in LilyPond translations are invited to subscribe +to this list regardless of the amount of their contribution, by sending +an email to @code{translations-request@@lilynet.net} with subject +@code{subscribe} and an empty message body. Unless mentioned explicitly, +or except if a translations coordinator contacts you privately, you +should send questions, remarks and patches to the list +@code{translations@@lilynet.net}. Please note that traffic is high +on the English-speaking list @code{lilypond-user@@gnu.org}, so it may +take some time before your request or contribution is handled. + +@menu +* Getting started with documentation translation:: +* Documentation translation details:: +* Documentation translation maintenance:: +* Translations management policies:: +* Technical background:: +@end menu + +@node Getting started with documentation translation +@subsection Getting started with documentation translation + +First, get the sources of branch @code{lilypond/translation} from the +Git repository, see @ref{Starting with Git}. + +@menu +* Translation requirements:: +* Which documentation can be translated:: +* Starting translation in a new language:: +@end menu + +@node Translation requirements +@unnumberedsubsubsec Translation requirements + +Working on LilyPond documentation translations requires the following +pieces of software, in order to make use of dedicated helper tools: + +@itemize +@item Python 2.4 or higher, +@item GNU Make, +@item Gettext, +@item Git. +@end itemize + +It is not required to build LilyPond and the documentation to +translate the documentation. However, if you have enough time and +motivation and a suitable system, it can be very useful to build at +least the documentation so that you can check the output yourself and +more quickly; if you are interested, see @ref{Compiling}. + +Before undertaking any large translation work, contributors are +encouraged to contact the @ref{Meisters, Translation Meister}. + + +@node Which documentation can be translated +@unnumberedsubsubsec Which documentation can be translated + +The makefiles and scripts infrastructure currently supports translation +of the following documentation: + +@itemize +@item the web site, the Learning Manual, the Notation Reference and +Application Usage -- Texinfo source, PDF and HTML output; Info output +might be added if there is enough demand for it; +@item the Changes document. +@end itemize + +Support for translating the following pieces of documentation should be +added soon, by decreasing order of priority: + +@itemize +@item automatically generated documentation: markup commands, +predefined music functions; +@item the Snippets List; +@item the Internals Reference. +@end itemize + + +@node Starting translation in a new language +@unnumberedsubsubsec Starting translation in a new language + +At top of the source directory, do + +@example +./autogen.sh +@end example + +@noindent +or (if you want to install your self-compiled LilyPond locally) + +@example +./autogen.sh --prefix=$HOME +@end example + +@noindent +If you want to compile LilyPond -- which is almost required to build +the documentation, but is not required to do translation only -- fix +all dependencies and rerun @command{./configure} (with the same +options as for @command{autogen.sh}). + +Then @command{cd} into @file{Documentation/} and run + +@example +make ISOLANG=@var{MY-LANGUAGE} new-lang +@end example + +@noindent +where @var{MY-LANGUAGE} is the ISO 639 language code. + +Finally, add a language definition for your language in +@file{python/langdefs.py}. + + +@node Documentation translation details +@subsection Documentation translation details + +Please follow all the instructions with care to ensure quality work. + +All files should be encoded in UTF-8. + +@menu +* Files to be translated:: +* Translating the Web site and other Texinfo documentation:: +* Adding a Texinfo manual:: +@end menu + +@node Files to be translated +@unnumberedsubsubsec Files to be translated + +@include contributor/doc-translation-list.itexi + +In addition, not listed above, Snippets' titles and descriptions +should be translated; they are a part of the Notation Reference and +therefore their priority is 5. + +@node Translating the Web site and other Texinfo documentation +@unnumberedsubsubsec Translating the Web site and other Texinfo documentation + +Every piece of text should be translated in the source file, except +Texinfo comments, text in @code{@@lilypond} blocks and a few cases +mentioned below. + +Node names are translated, but the original node name in English should +be kept as the argument of @code{@@translationof} put after the section +title; that is, every piece in the original file like + +@example +@@node Foo bar +@@@var{section_command} Bar baz +@end example + +@noindent +should be translated as + +@example +@@node @var{translation of Foo bar} +@@@var{section_command} @var{translation of Bar baz} +@@translationof Foo bar +@end example + +The argument of @code{@@rglos} commands and the first argument of +@code{@@rglosnamed} commands must not be translated, as it is the node +name of an entry in Music Glossary. + +Every time you translate a node name in a cross-reference, i.e. the +argument of commands @code{@@ref, @@rprogram, @@rlearning, @@rlsr, +@@ruser} or the first argument of their @code{@var{*}named} variants, +you should make sure the target node is defined in the correct source +file; if you do not intend to translate the target node right now, you +should at least write the node definition (that is, the @code{@@node +@@@var{section_commmand} @@translationof} trio mentioned above) in the +expected source file and define all its parent nodes; for each node you +have defined this way but have not translated, insert a line that +contains @code{@@untranslated}. That is, you should end up +for each untranslated node with something like + +@example +@@node @var{translation of Foo bar} +@@@var{section_command} @var{translation of Bar baz} +@@translationof Foo bar + +@@untranslated +@end example + +@warning{you do not have to translate the node name of a cross-reference +to a node that you do not have translated. If you do, you must define +an @qq{empty} node like explained just above; this will produce a +cross-reference with the translated node name in output, although the +target node will still be in English. On the opposite, if all +cross-references that refer to an untranslated node use the node name in +English, then you do not have to define such an @qq{empty} node, and the +cross-reference text will appear in English in the output. The choice +between these two strategies implies its particular maintenance +requirements and is left to the translators, although the opinion of the +Translation meister leans towards not translating these +cross-references.} + +Please think of the fact that it may not make sense translating +everything in some Texinfo files, and you may take distance from the +original text; for instance, in the translation of the web site section +Community, you may take this into account depending on what you know the +community in your language is willing to support, which is possible only +if you personally assume this support, or there exists a public forum +or mailing list listed in Community for LilyPond in your language: + +@itemize +@item @rweb{Bug reports}: this page should be translated only if you +know that every bug report sent on your language's mailing list or forum +will be handled by someone who will translate it to English and send it +on bug-lilypond or add an issue in the tracker, then translate back the +reply from developers. + +@item @rweb{Help us}: this page should be translated very freely, +and possibly not at all: ask help for contributing to LilyPond for tasks +that LilyPond community in your language is able and going to handle. +@end itemize + +@noindent +In any case, please mark in your work the sections which do not result +from the direct translation of a piece of English translation, using +comments i.e. lines starting with @q{@code{@@c}}. + +Finally, press in Emacs @key{C-c C-u C-a} to update or generate +menus. This process should be made easier in the future, when the helper +script @command{texi-langutils.py} and the makefile target are updated. + +Some pieces of text manipulated by build scripts that appear in the +output are translated in a @file{.po} file -- just like LilyPond output +messages -- in @file{Documentation/po}. The Gettext domain is named +@code{lilypond-doc}, and unlike @code{lilypond} domain it is not managed +through the Free Translation Project. + + +Take care of using typographic rules for your language, especially in +@file{macros.itexi}. + +If you wonder whether a word, phrase or larger piece of text should be +translated, whether it is an argument of a Texinfo command or a small +piece sandwiched between two Texinfo commands, try to track whether and +where it appears in PDF and/or HTML output as visible text. This piece +of advice is especially useful for translating @file{macros.itexi}. + +Please keep verbatim copies of music snippets (in @code{@@lilypond} +blocs). However, some music snippets containing text that shows in +the rendered music, and sometimes translating this text really helps +the user to understand the documentation; in this case, and only in +this case, you may as an exception translate text in the music +snippet, and then you must add a line immediately before the +@code{@@lilypond} block, starting with + +@example +@@c KEEP LY +@end example + +@noindent +Otherwise the music snippet would be reset to the same content as the +English version at next @command{make snippet-update} run -- see +@ref{Updating documentation translation}. + +When you encounter + +@example +@@lilypondfile[,texidoc]@{@var{filename.ly}@} +@end example + +@noindent +in the source, open @file{Documentation/snippets/@var{filename}.ly}, +translate the @code{texidoc} header field it contains, enclose it with +@code{texidoc@var{MY-LANGUAGE} = "} and @code{"}, and write it into +@file{Documentation/@var{MY-LANGUAGE}/texidocs/@/@var{filename}.texidoc}. +Additionally, you may translate the snippet's title in @code{doctitle} +header field, in case @code{doctitle} is a fragment option used in +@code{@@lilypondfile}; you can do this exactly the same way as +@code{texidoc}. For instance, +@file{Documentation/@var{MY-LANGUAGE}/texidocs/@/@var{filename}.texidoc} +may contain + +@example +doctitlees = "Spanish title baz" +texidoces = " +Spanish translation blah +" +@end example + +@noindent +Then, you should get these translated strings into compiled snippets in +@file{Documentation/snippets}, see @q{General guidelines} in @ref{Adding +and editing snippets}. + +@code{@@example} blocks need not be verbatim copies, e.g. variable +names, file names and comments should be translated. + +Finally, please carefully apply every rule exposed in @ref{Texinfo +introduction and usage policy}, and @ref{Documentation policy}. If one +of these rules conflicts with a rule specific to your language, please +ask the Translation meister on @email{translations@@lilynet.net} list +and/or the Documentation Editors on @email{lilypond-devel@@gnu.org} +list. + + +@node Adding a Texinfo manual +@unnumberedsubsubsec Adding a Texinfo manual + +In order to start translating a new manual whose basename is @var{FOO}, +do + +@example +cd Documentation/@var{MY-LANGUAGE} +cp ../@var{FOO}.tely . +mkdir @var{FOO} +cp web/GNUmakefile @var{FOO} +@end example + +@noindent +then append @var{FOO} to variable @code{SUBDIRS} in +Documentation/@var{MY-LANGUAGE}/GNUmakefile, then translate file +@var{MY-LANGUAGE}/@var{FOO}.tely and run @code{skeleton-update}: + +@example +cd Documentation/ +make ISOLANG=@var{MY-LANGUAGE} TEXI_LANGUTIL_FLAGS=--head-only skeleton-update +@end example + +@noindent +Your are now ready to translate the new manual exactly like the web site +or the Learning Manual. + + +@node Documentation translation maintenance +@subsection Documentation translation maintenance + +Several tools have been developed to make translations maintenance +easier. These helper scripts make use of the power of Git, the +version control system used for LilyPond development. + +You should use them whenever you would like to update the translation in +your language, which you may do at the frequency that fits your and your +cotranslators' respective available times. In the case your translation +is up-do-date (which you can discover in the first subsection below), it +is enough to check its state every one or two weeks. If you feel +overwhelmed by the quantity of documentation to be updated, see +@ref{Maintaining without updating translations}. + +@menu +* Check state of translation:: +* Updating documentation translation:: +* Updating translation committishes:: +@end menu + +@macro seeCommittishesUpdate{} +@warning{do not forget to update the committish in each file you have +completely updated, see @ref{Updating translation committishes}.} +@end macro + +@node Check state of translation +@unnumberedsubsubsec Check state of translation + +First pull from Git -- see @ref{Pulling and rebasing}, but DO NOT rebase +unless you are sure to master the translation state checking and +updating system -- then cd into @file{Documentation/} (or at top of the +source tree, replace @command{make} with @command{make -C +Documentation}) and run + +@example +make ISOLANG=@var{MY_LANGUAGE} check-translation +@end example + +@noindent +This presents a diff of the original files since the most recent +revision of the translation. To check a single file, cd into +@file{Documentation/} and run + +@example +make CHECKED_FILES=@var{MY_LANGUAGE}/@var{manual}/@var{foo}.itely check-translation +@end example + +@noindent +In case this file has been renamed since you last updated the +translation, you should specify both old and new file names, e.g. +@code{CHECKED_FILES=@var{MY_LANGUAGE}/@{@var{manual},user@}/@var{foo}.itely}. + +To see only which files need to be updated, do + +@example +make ISOLANG=@var{MY_LANGUAGE} check-translation | grep 'diff --git' +@end example + +To avoid printing terminal colors control characters, which is often +desirable when you redirect output to a file, run + +@example +make ISOLANG=@var{MY_LANGUAGE} NO_COLOR=1 check-translation +@end example + +You can see the diffs generated by the commands above as changes that +you should make in your language to the existing translation, in order +to make your translation up to date. + +@seeCommittishesUpdate + +Global state of the translation is recorded in +@file{Documentation/translations.itexi}, which is used to generate +Translations status page. To update that page, do from +@file{Documentation/} + +@example +make translation-status +@end example + +This will also leave @file{out/translations-status.txt}, which contains +up-to-dateness percentages for each translated file, and update word +counts of documentation files in this Guide. + +@seealso +@ref{Maintaining without updating translations}. + +@node Updating documentation translation +@unnumberedsubsubsec Updating documentation translation + +Instead of running @code{check-translation}, you may want to run +@code{update-translation}, which will run your favorite text editor to +update files. First, make sure environment variable @code{EDITOR} is +set to a text editor command, then run from @file{Documentation/} + +@example +make ISOLANG=@var{MY_LANGUAGE} update-translation +@end example + +@noindent +or to update a single file + +@example +make CHECKED_FILES=@var{MY_LANGUAGE/@var{manual}/foo.itely} update-translation +@end example + +For each file to be updated, @code{update-translation} will open your +text editor with this file and a diff of the file in English; if the +diff cannot be generated or is bigger than the file in English itself, +the full file in English will be opened instead. + +@seeCommittishesUpdate + +Texinfo skeleton files, i.e. @file{.itely} files not yet translated, +containing only the first node of the original file in English can be +updated automatically: whenever @command{make check-translation} shows +that such files should be updated, run from @file{Documentation/} + +@example +make ISOLANG=@var{MY_LANGUAGE} skeleton-update +@end example + +@file{.po} message catalogs in @file{Documentation/po/} may be updated +by issuing from @file{Documentation/} or @file{Documentation/po/} + +@example +make po-update +@end example + +@warning{if you run po-update and somebody else does the same and +pushes before you push or send a patch to be applied, there will be a +conflict when you pull. Therefore, it is better that only the +Translation meister runs this command.} + +Updating music snippets can quickly become cumbersome, as most +snippets should be identical in all languages. Fortunately, there is +a script that can do this odd job for you (run from +@file{Documentation/}): + +@example +make ISOLANG=@var{MY_LANGUAGE} snippet-update +@end example + +This script overwrites music snippets in +@file{@var{MY_LANGUAGE/foo/every.itely}} with music snippets from +@file{@var{foo/every.itely}}. It ignores skeleton files, and keeps +intact music snippets preceded with a line starting with @code{@@c +KEEP LY}; it reports an error for each @file{.itely} that has not the +same music snippet count in both languages. Always use this script +with a lot of care, i.e. run it on a clean Git working tree, and check +the changes it made with @command{git diff} before committing; if you +don't do so, some @code{@@lilypond} snippets might be broken or make +no sense in their context. + +When you have updated texidocs in +@file{Documentation/@var{MY-LANGUAGE}/texidocs}, you can get these +changes into compiled snippets in @file{Documentation/snippets}, see +@q{General guidelines} in @ref{Adding and editing snippets}. + +Finally, a command runs the three update processes above for all +enabled languages (from @file{Documentation/}): + +@example +make all-translations-update +@end example + +Use this command with caution, and keep in mind it will not be really +useful until translations are stabilized after the end of GDP and GOP. + +@seealso +@ref{Maintaining without updating translations}, +@ref{Adding and editing snippets}. + + +@node Updating translation committishes +@unnumberedsubsubsec Updating translation committishes + +At the beginning of each translated file except PO files, there is a +committish which represents the revision of the sources which you have +used to translate this file from the file in English. + +When you have pulled and updated a translation, it is very important to +update this committish in the files you have completely updated (and +only these); to do this, first commit possible changes to any +documentation in English which you are sure to have done in your +translation as well, then replace in the up-to-date translated files the +old committish by the committish of latest commit, which can be obtained +by doing + +@example +git rev-list HEAD |head -1 +@end example + +A special case is updating Snippet documentation strings in +@file{Documentation/@var{MY-LANGUAGE}/texidocs}. For these to be +correctly marked as up-to-date, first run @code{makelsr.py} as +explained in @ref{Adding and editing snippets}, and commit the +resulting compiled snippets left in @file{Documentation/snippets/}. +Say the SHA1 ID code of this commit is . Now edit again your +translated files in @file{Documentation/@var{MY-LANGUAGE}/texidocs} +adjusting the 40-digit committish that appears in the text to be ; +finally, commit these updated files. Not doing so would result in +changes made both to your updates and original snippets to +persistently appear in the check-translation output as if they were +out of sync. + +This two-phase mechanism avoids the (practically) unsolvable problem +of guessing what committish will have our update, and pretending to +put this very committish on the files in the same commit. + +@c http://lists.gnu.org/archive/html/lilypond-devel/2009-01/msg00245.html +@c contains a helper script which could be used to perform massive +@c committish updates. + + +@seealso +@ref{LSR work}. + +@node Translations management policies +@subsection Translations management policies + +These policies show the general intent of how the translations should +be managed, they aim at helping translators, developers and +coordinators work efficiently. + +@menu +* Maintaining without updating translations:: +* Managing documentation translation with Git:: +@end menu + +@node Maintaining without updating translations +@unnumberedsubsubsec Maintaining without updating translations + +Keeping translations up to date under heavy changes in the documentation +in English may be almost impossible, especially as during the former +Grand Documentation Project (GDP) or the Grand Organization Project +(GOP) when a lot of contributors brings changes. In addition, +translators may be --- and that is a very good thing --- involved in +these projects too. + +it is possible --- and even recommended --- to perform some maintenance +that keeps translated documentation usable and eases future translation +updating. The rationale below the tasks list motivates this plan. + +The following tasks are listed in decreasing priority order. + +@enumerate +@item Update macros.itexi. +For each obsolete macro definition, if it is possible to update macro +usage in documentation with an automatic text or regexp substitution, +do it and delete the macro definition from @file{macros.itexi}; otherwise, +mark this macro definition as obsolete with a comment, and keep it in +@file{macros.itexi} until the documentation translation has been updated and +no longer uses this macro. + +@item Update @file{*.tely} files completely with +@command{make check-translation} -- you may want to redirect output +to a file because of overwhelming output, or call check-translation.py +on individual files, see @ref{Check state of translation}. + +@item In @file{.itelys}, match sections and .itely file names with those from +English docs, which possibly involves moving nodes contents in block +between files, without updating contents itself. In other words, the +game is catching where has gone each section. In Learning manual, and +in Notation Reference sections which have been revised in GDP, there may +be completely new sections: in this case, copy @code{@@node} and +@code{@@section}-command from English docs, and add the marker for +untranslated status @code{@@untranslated} on a single line. Note that +it is not possible to exactly match subsections or subsubsections of +documentation in English, when contents has been deeply revised; in this +case, keep obsolete (sub)subsections in the translation, marking them +with a line @code{@@c obsolete} just before the node. + +Emacs with Texinfo mode makes this step easier: + +@itemize +@item without Emacs AucTeX installed, @key{C-c C-s} shows structure of current +Texinfo file in a new buffer @code{*Occur*}; to show structure of two files +simultaneously, first split Emacs window in 4 tiles (with @key{C-x 1} +and @key{C-x 2}), press @key{C-c C-s} to show structure of one file +(e.g. the translated file), copy @code{*Occur*} contents into +@code{*Scratch*}, then press @key{C-c C-s} for the other file. + +If you happen to have installed AucTeX, you can either call the macro +by doing @key{M-x texinfo-show-structure} or create a key binding in your +@file{~/.emacs}, by adding the four following lines: + +@example +(add-hook 'Texinfo-mode-hook + '(lambda () + (define-key Texinfo-mode-map "\C-cs" + 'texinfo-show-structure))) +@end example + +@noindent +and then obtain the structure in the @code{*Occur*} buffer with @key{C-c +s}. + +@item Do not bother updating @code{@@menu}s when all menu entries are in the same +file, just do @key{C-c C-u C-a} (@qq{update all menus}) when you have +updated all the rest of the file. + +@item Moving to next or previous node using incremental search: press +@key{C-s} and type @code{node} (or @key{C-s @@node} if the text +contains the word @q{node}) then press @key{C-s} to move to next node +or @key{C-r} to move to previous node. Similar operation can be used +to move to the next/previous section. Note that every cursor move +exits incremental search, and hitting @key{C-s} twice starts +incremental search with the text entered in previous incremental +search. + +@item Moving a whole node (or even a sequence of nodes): jump to beginning +of the node (quit incremental search by pressing an arrow), press +@key{C-SPACE}, press @key{C-s node} and repeat @key{C-s} until you +have selected enough text, cut it with @key{C-w} or @key{C-x}, jump to +the right place (moving between nodes with the previous hint is often +useful) and paste with @key{C-y} or @key{C-v}. +@end itemize + +@item Update sections finished in the English documentation; check +sections status at +@uref{http://lilypondwiki.tuxfamily.org/index.php?title=Documentation_coordination}. + +@item Update documentation PO. It is recommended not to update +strings which come from documentation that is currently deeply revised +in English, to avoid doing the work more than once. + +@item Fix broken cross-references by running (from @file{Documentation/}) + +@example +make ISOLANG=@var{YOUR-LANGUAGE} fix-xrefs +@end example + +@noindent +This step requires a successful documentation build (with @command{make +doc}). Some cross-references are broken because they point to a node +that exists in the documentation in English, which has not been added +to the translation; in this case, do not fix the cross-reference but +keep it "broken", so that the resulting HTML link will point to an +existing page of documentation in English. +@end enumerate + +@subsubheading Rationale + +You may wonder if it would not be better to leave translations as-is +until you can really start updating translations. There are several +reasons to do these maintenance tasks right now. + +@itemize +@item This will have to be done sooner or later anyway, before updating +translation of documentation contents, and this can already be done +without needing to be redone later, as sections of documentation in +English are mostly revised once. However, note that not all +documentation sectioning has been revised in one go, so all this +maintenance plan has to be repeated whenever a big reorganization is +made. + +@item This just makes translated documentation take advantage of the new +organization, which is better than the old one. + +@item Moving and renaming sections to match sectioning of documentation in +English simplify future updating work: it allows updating the +translation by side-by-side comparison, without bothering whether +cross-reference names already exist in the translation. + +@item Each maintenance task except @q{Updating PO files} can be done by +the same person for all languages, which saves overall time spent by +translators to achieve this task: the node names and section titles +are in English, so you can do. It is important to take advantage of +this now, as it will be more complicated (but still possible) to do +step 3 in all languages when documentation is compiled with +@command{texi2html} and node names are directly translated in source +files. +@end itemize + + +@node Managing documentation translation with Git +@unnumberedsubsubsec Managing documentation translation with Git + +This policy explains how to manage Git branches and commit +translations to Git. + +@itemize +@item Translation changes matching master branch are preferably made on +@code{lilypond/translation} branch; they may be pushed directly to +@code{master} only if they do not break compilation of LilyPond and +its documentation, and in this case they should be pushed to +@code{lilypond/translation} too. Similarly, changes matching +@code{stable/X.Y} are preferably made on +@code{lilypond/X.Ytranslation}. + +@item @code{lilypond/translation} Git branch may be merged into +master only if LilyPond (@command{make all}) and documentation +(@command{make doc}) compile successfully. + +@item @code{master} Git branch may be merged into +@code{lilypond/translation} whenever @command{make} and @command{make +doc} are successful (in order to ease documentation compilation by +translators), or when significant changes had been made in +documentation in English in master branch. + +@item General maintenance may be done by anybody who knows what he does +in documentation in all languages, without informing translators +first. General maintenance include simple text substitutions +(e.g. automated by sed), compilation fixes, updating Texinfo or +lilypond-book commands, updating macros, updating ly code, fixing +cross-references, and operations described in @ref{Maintaining +without updating translations}. +@end itemize + + +@node Technical background +@subsection Technical background + +A number of Python scripts handle a part of the documentation +translation process. All scripts used to maintain the translations +are located in @file{scripts/auxiliar/}. + +@itemize +@item @file{check_translation.py} -- show diff to update a translation, +@item @file{texi-langutils.py} -- quickly and dirtily parse Texinfo files to +make message catalogs and Texinfo skeleton files, +@item @file{texi-skeleton-update.py} -- update Texinfo skeleton files, +@item @file{update-snippets.py} -- synchronize ly snippets with those +from English docs, +@item @file{translations-status.py} -- update translations status pages and word +counts in the file you are reading, +@item @file{tely-gettext.py} -- gettext node names, section titles and references +in the sources; WARNING only use this script once for each file, when support for +"makeinfo --html" has been dropped. +@end itemize + +Other scripts are used in the build process, in @file{scripts/build/}: + +@itemize +@item @file{mass-link.py} -- link or symlink files between English documentation +and documentation in other languages. +@end itemize + +Python modules used by scripts in @file{scripts/auxiliar/} or @file{scripts/build/} (but +not by installed Python scripts) are located in @file{python/auxiliar/}: +@itemize +@item @file{manuals_definitions.py} -- define manual names and name of +cross-reference Texinfo macros, +@item @file{buildlib.py} -- common functions (read piped output +of a shell command, use Git), +@item @file{postprocess_html.py} (module imported by @file{www_post.py}) -- add footer and +tweak links in HTML pages. +@end itemize + +And finally +@itemize +@item @file{python/langdefs.py} -- language definitions module +@end itemize diff --git a/Documentation/contributor/introduction.itexi b/Documentation/contributor/introduction.itexi new file mode 100644 index 0000000000..61905d060a --- /dev/null +++ b/Documentation/contributor/introduction.itexi @@ -0,0 +1,191 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@include included/helpus.itexi + +@node Introduction to contributing +@chapter Introduction to contributing + +This chapter presents a quick overview of ways that people can +help LilyPond. + +@menu +* Help us:: +* Overview of work flow:: +* Mentors:: +@end menu + + +@node Help us +@section Help us + +@helpusNeed + +@helpusTasks + +@helpusProjects + + +@node Overview of work flow +@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 +with Texinfo, after pre-processing with @code{lilypond-book}. +Send well-formed patches to @email{lilypond-devel@@gnu.org}. +@end cartouche + +Git is a @emph{version control system} that tracks the history of +a program's source code. The LilyPond source code is maintained +as a Git repository, which contains: + +@itemize +@item +all of the source files needed to build LilyPond, and + +@item +a record of the entire history of every change made to every file +since the program was born. +@end itemize + +The @q{official} LilyPond Git repository is hosted by the GNU +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). + +Changes made within one contributor's copy of the repository can +be shared with other contributors using @emph{patches}. A patch +is a simple text file generated by the @command{git} program that +indicates what changes have been made (using a special format). +If a contributor's patch is approved for inclusion (usually +through the mailing list), someone on the current development team +will @emph{push} the patch to the official repository. + +The Savannah software forge provides two separate interfaces for +viewing the LilyPond Git repository online: @emph{cgit} and +@emph{gitweb}. The cgit interface should work faster than gitweb +in most situations, but only gitweb allows you to search through +the source code using @command{grep}, which you may find useful. +The cgit interface is at +@uref{http://git.sv.gnu.org/cgit/lilypond.git/} and the gitweb +interface is at +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git}. + +Git is a complex and powerful tool, but tends to be confusing at +first, particularly for users not familiar with the command line +and/or version control systems. We have created the +@command{lily-git} graphical user interface to ease this +difficulty. + +@emph{Compiling} (@q{building}) LilyPond allows developers to see +how changes to the source code affect the program itself. +Compiling is also needed to package the program for specific +operating systems or distributions. LilyPond can be compiled from +a local Git repository (for developers), or from a downloaded +tarball (for packagers). Compiling LilyPond is a rather involved +process, and most contributor tasks do not require it. + +Contributors can contact the developers through the +@q{lilypond-devel} mailing list. The mailing list archive is +located at +@uref{http://lists.gnu.org/archive/html/lilypond-devel/}. If you +have a question for the developers, search the archives first to +see if the issue has already been discussed. Otherwise, send an +email to @email{lilypond-devel@@gnu.org}. You can subscribe to +the developers' mailing list here: +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel}. + +@warning{Contributors on Windows or MacOS X wishing to compile +code or documentation are strongly advised to use our Ubuntu +LilyPond Developer Remix, as discussed in @ref{Quick start}.} + + +@node Mentors +@section Mentors + +We have a semi-formal system of mentorship, similar to the +medieval @qq{journeyman/master} training system. New contributors +will have a dedicated mentor to help them @qq{learn the ropes}. + +@warning{This is subject to the availability of mentors; certain +jobs have more potential mentors than others.} + +@subheading Contributor responsibilities + +@enumerate + +@item +Ask your mentor which sections of the CG you should read. + +@item +If you get stuck for longer than 10 minutes, ask your mentor. +They might not be able to help you with all problems, but we find +that new contributors often get stuck with something that could be +solved/explained with 2 or 3 sentences from a mentor. + +@item +If you have been working on a task much longer than was originally +estimated, stop and ask your mentor. There may have been a +miscommunication, or there may be some time-saving tips that could +vastly simply your task. + +@item +Send patches to your mentor for initial comments. + +@item +Inform your mentor if you're going to be away for a month, or if +you leave entirely. Contributing to lilypond isn't for everybody; +just let your mentor know so that we can reassign that work to +somebody else. + +@item +Inform your mentor if you're willing to do more work -- we always +have way more work than we have helpers available. We try to +avoid overwhelming new contributors, so you'll be given less work +than we think you can handle. + +@end enumerate + + +@subheading Mentor responsibilities + +@enumerate + +@item +Respond to questions from your contributor(s) promptly, even if +the response is just @qq{sorry, I don't know} or @qq{sorry, I'm +very busy for the next 3 days; I'll get back to you then}. Make +sure they feel valued. + +@item +Inform your contributor(s) about the expected turnaround for your +emails -- do you work on lilypond every day, or every weekend, or +what? Also, if you'll be unavailable for longer than usual (say, +if you normally reply within 24 hours, but you'll be at a +conference for a week), let your contributors know. Again, make +sure they feel valued, and that your silence (if they ask a +question during that period) isn't their fault. + +@item +Inform your contributor(s) if they need to do anything unusual for +the builds, such as doing a @qq{make clean / doc-clean} or +switching git branches (not expected, but just in case...) + +@item +You don't need to be able to completely approve patches. Make +sure the patch meets whatever you know of the guidelines (for doc +style, code indentation, whatever), and then send it on to the +frog list or -devel for more comments. If you feel confident +about the patch, you can push it directly (this is mainly intended +for docs and translations; code patches should almost always go to +-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. + +@end enumerate + + diff --git a/Documentation/contributor/issues.itexi b/Documentation/contributor/issues.itexi new file mode 100644 index 0000000000..5ea4b952d3 --- /dev/null +++ b/Documentation/contributor/issues.itexi @@ -0,0 +1,872 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Issues +@chapter Issues + +This chapter deals with defects, feature requests, and +miscellaneous development tasks. + +@menu +* Introduction to issues:: +* Bug Squad setup:: +* Bug Squad checklists:: +* Issue classification:: +* Adding issues to the tracker:: +* Patch handling:: +* Summary of project status:: +@end menu + + +@node Introduction to issues +@section Introduction to issues + +@warning{Unless otherwise specified, all the tasks in this chapter +are @qq{simple} tasks: they can be done by a normal user with +nothing more than a web browser, email, and lilypond.} + +@qq{Issues} isn't just a politically-correct term for @qq{bug}. +We use the same tracker for feature requests and code TODOs, so +the term @qq{bug} wouldn't be accurate. Despite the difference +between @qq{issue} and @qq{bug}, we call our team of contributors +who organize issues the @emph{Bug Squad}. + +The Bug Squad is mainly composed of non-programmers -- their job +is to @emph{organize} issues, not solve them. Their duties +include removing false bug reports, ensuring that any real bug +report contains enough information for developers, and checking +that a developer's fix actually resolves the problem. + +New volunteers for the Bug Squad should contact the +@ref{Meisters, Bug Meister}. + + +@node Bug Squad setup +@section Bug Squad setup + +We highly recommend that you configure your email to use effective +sorting; this can reduce your workload @emph{immensely}. The +email folders names were chosen specifically to make them work if +you sort your folders alphabetically. + +@enumerate + +@item +Read every section of this chapter, @ref{Issues}. + +@item +If you do not have one already, create a gmail account and send +the email address to the @ref{Meisters, Bug Meister}. + +@item +Subscribe your gmail account to @code{bug-lilypond}. + +@item +Configure your google code account: + +@enumerate + +@item +Wait until your gmail account is listed in: + +@example +@uref{http://code.google.com/p/lilypond/people/list} +@end example + +@item +Sign in to google code by clicking in the top-right corner of: + +@example +@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. + +@item +Go to your @qq{Profile}, and select @qq{Settings}. + +@item +Scroll down to @qq{Issue change notification}, and make sure that +you have @emph{selected} @qq{If I starred the issue}. + +@end enumerate + +@item +Configure your email client: + +@enumerate + +@item +Any email sent with your gmail address in the @code{To:} or +@code{CC:} fields should go to a @code{bug-answers} folder. + +When setting up your filtering rules, be aware that Google Code +might use different versions of your email address, such as ones +ending in @code{@@googlemail.com} or @code{@@gmail.com}. + +@item +Any other email either from, or CC'd to, + +@example +lilypond@@googlecode.com +@end example + +@noindent +should go into a separate @code{bug-ignore} folder. Alternately, +you may automatically delete these emails. + +You will @strong{not read} these emails as part of your Bug Squad +duties. If you are curious, go ahead and read them later, but it +does @strong{not} count as Bug Squad work. + +@item +Any other email sent to (or CC'd to): + +@example +bug-lilypond +@end example + +@noindent +should go into a separate @code{bug-current} folder. + +@end enumerate + +@end enumerate + + +@node Bug Squad checklists +@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. + +Please use the email sorting described in @ref{Bug Squad setup}. +This means that (as Bug Squad members) you will only ever respond +to emails sent or CC'd to the @code{bug-lilypond} mailing list. + + +@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 +(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. + +@example +Sunday: Colin +Monday: Dmytro +Tuesday: James Bailey +Wednesday: Ralph +Thursday: Patrick +Friday: Urs +Saturday: Kieren +@end example + + +@subsubheading Emails to @code{bug-answers} + +Some of these emails will be comments on issues that you added to +the tracker. + +@itemize +If they are asking for more information, give the additional +information. + +@item +If the email says that the issue was classified in some other +manner, read the rationale given and take that into account for +the next issue you add. + +@item +Otherwise, move them to your @code{bug-ignore} folder. + +@end itemize + +Some of these emails will be discussions about Bug Squad work; +read those. + + +@subsubheading Emails to @code{bug-current} + +Dealing with these emails is your main task. Your job is to get +rid of these emails in the first method which is applicable: + +@enumerate +@item +If the email has already been handled by a Bug Squad member (i.e. +check to see who else has replied to it), delete it. + +@item +If the email is a question about how to use LilyPond, reply with +this response: + +@example +For questions about how to use LilyPond, please read our +documentation available from: + @uref{http://lilypond.org/website/manuals.html} +or ask the lilypond-user mailing list. +@end example + +@item +If the email mentions @qq{the latest git}, or any version number +that has not yet been officially released, forward it to +@code{lilypond-devel}. + +@item +If a bug report is not in the form of a Tiny example, direct the +user to resubmit the report with this response: + +@example +I'm sorry, but due to our limited resources for handling bugs, we +can only accept reports in the form of Tiny examples. Please see +step 2 in our bug reporting guidelines: + @uref{http://lilypond.org/website/bug-reports.html} +@end example + +@item +If anything is unclear, ask the user for more information. + +How does the graphical output differ from what the user expected? +What version of lilypond was used (if not given) and operating +system (if this is a suspected cause of the problem)? In short, +if you cannot understand what the problem is, ask the user to +explain more. It is the user's responsibility to explain the +problem, not your responsibility to understand it. + +@item +If the behavior is expected, the user should be told to read the +documentation: + +@example +I believe that this is the expected behaviour -- please read our +documentation about this topic. If you think that it really is a +mistake, please explain in more detail. If you think that the +docs are unclear, please suggest an improvement as described by +@qq{Simple tasks -- Documentation} on: + @uref{http://lilypond.org/website/help-us.html} +@end example + +@item +If the issue already exists in the tracker, send an email to that +effect: + +@example +This issue has already been reported; you can follow the +discussion and be notified about fixes here: +@end example + +@noindent +(copy+paste the google code issue URL) + +@item +Accept the report as described in +@ref{Adding issues to the tracker}. + +@end enumerate + +All emails should be CC'd to the @code{bug-lilypond} list so that +other Bug Squad members know that you have processed the email. + +@warning{There is no option for @qq{ignore the bug report} -- if +you cannot find a reason to reject the report, you must accept +it.} + + +@ignore +@c Try omitting this from Bug Squad duties + +@subheading Updates / discussion about issues + +We try to keep discussions about issues on the tracker, but +sometimes it spills over onto email. If discussion has ended with +no patch / resolution and at least @strong{3 days} have passed, +then either: + +@itemize + +@item +Summarize the recent discussion on the tracker, and add a link to +the original discussion. + +@item +Add the comment @qq{there was some technical discussion which I +could not understand}, and include a link to the original +discussion. + +We do not expect Bug Squad members to be programmers, or even to +be moderately-skilled users. Your job is to keep track of issue +reports; it is @emph{perfectly acceptable} to not understand +discussions between advanced users and/or developers. + +@end itemize +@end ignore + + +@subheading Regular maintenance + +After @strong{every release} (both stable and unstable): + +@itemize + +@item +Regression test comparison: if anything has changed suspiciously, +ask if it was deliberate. The official comparison is online, at: + +@c NOTE: leave this here. In this case, it's worth duplicating +@c the link. -gp +@example +@uref{http://lilypond.org/test/} +@end example + +More information is available from in +@ref{Precompiled regression tests}. + + +@item +Issues to verify: try to reproduce the bug with the latest +official GUB version; if you cannot reproduce the bug, mark the +item @qq{Verified} (i.e. @qq{the fix has been verified to work}). + +@example +@uref{http://code.google.com/p/lilypond/issues/list?can=7} +@end example + +A few (approximately 10%) of these fixed issues relate to the +build system or fundamental architecture changes; there is no way +for you to verify these. Leave those issues alone; somebody else +will handle them. + +@item +Check for any incorrectly-classified items in the tracker. This +generally just means looking at the grid to see any items without +a Type or Priority. + +@end itemize + + +@ignore +@c try omitting from daily tasks for now. -gp + +@subheading Irregular maintenance + +@warning{These tasks are a lot of work; gathering more volunteers +to help is definitely recommended. However, the Bug Squad should +handle the organization and training of new volunteers.} + +Once every year or two: + +@itemize + +@item +Checking all regtests: although we have a system for checking the +regtests between two versions, occasionally a bug will slip +through the cracks. It is therefore good to manually examine all +the regtests (compare the images to the text description). More +information is available from in @ref{Regression tests}. + + +@item +Checking all issues: we try to mark each Issue @q{fixed} when we +fix it, but occasionally one or two issues will slip through the +cracks. It is therefore good to check all Issues. If you see the +same (broken) output as the initial report, then simply post a +@qq{Problem still exists in 2.x.y} message to the issue. + +@end itemize + +@end ignore + + +@node Issue classification +@section Issue classification + +The Bug Squad should classify issues according to the guidelines +given by developers. Every issue should have a Status, Type, and +Priority; the other fields are optional. + +@subheading Status (mandatory) + +Open issues: + +@itemize + +@item +New: the item was added by a non-member, despite numerous warnings +not to do this. Should be reviewed by a member of the Bug Squad. + +@item +Accepted: the Bug Squad added it, or reviewed the item. + +@item +Started: a contributor is working on a fix. Owner should change +to be this contributor. + +@end itemize + + +Closed issues: + +@itemize + +@item +Invalid: issue should not have been added in the current state. + +@item +Duplicate: issue already exists in the tracker. + +@item +Fixed: a contributor claims to have fixed the bug. The Bug +Squad should check the fix with the next official binary release +(not by compiling the source from git). Owner should be set to +that contributor. + +@item +Verified: Bug Squad has confirmed that the issue is closed. This +means that nobody should ever need look at the report again -- if +there is any information in the issue that should be kept, open a +new issue for that info. + +@end itemize + + +@subheading Owner (optional) + +Newly-added issues should have @emph{no owner}. When a +contributor indicates that he has Started or Fixed an item, he +should become the owner. + + +@subheading Type (mandatory) + +The issue's Type should be the first relevant item in this list. + +@itemize + +@item +Type-Collision: overlapping notation. + +@item +Type-Defect: a problem in the core program. (the @code{lilypond} +binary, scm files, fonts, etc). + +@item +Type-Documentation: inaccurate, missing, confusing, or desired +additional info. Must be fixable by editing a texinfo, ly, or scm +file. + +@item +Type-Build: problem or desired features in the build system. This +includes the makefiles, stepmake, python scripts, and GUB. + +@item +Type-Scripts: problem or desired feature in the non-build-system +scripts. Mostly used for convert-ly, lilypond-book, etc. + +@item +Type-Enhancement: a feature request for the core program. The +distinction between enhancement and defect isn't extremely clear; +when in doubt, mark it as enhancement. + +@item +Type-Other: anything else. + +@end itemize + + +@subheading Priority (mandatory) + +Currently, only Critical items will block a stable release. + +@itemize + +@item +Priority-Critical: LilyPond segfaults, a regression (see below) +against a previous stable version or a regression against a fix +developed for this version. This does not apply where the +@qq{regression} occurred because a feature was removed +deliberately - this is not a bug. + +@item +Priority-High: An issue which produces output which does not +accurately reflect the input (e.g. where the user would expect +an accidental, but none is shown) or which produces aesthetically +poor output in a situation which could be expected to crop up +frequently in real-world music. It should not be used where the +problem can be avoided with a simple workaround. It can also +be used to flag where new code in a development version is not +functioning as it should. This level is also used for issues +which produce no output and fail to give the user a clue about +what's wrong. + +@item +Priority-Medium: Normal priority - use this as the default. + +@item +Priority-Low: A minor problem which produces slightly undesirable +output, or which will only occur in contrived examples, or which +is very easily worked around. + +@item +Priority-Postponed: no fix planned. Generally used for things +which nobody wants to touch. + +@end itemize + +Note that these are initial classifications and can be subject +to change by others in the development team. For example, a +regression against an old stable version which hasn't been +noticed for a long time and which is unlikely to get fixed could +be downgraded from Priority-Critical by one of the programmers. + +@subheading Opsys (optional) + +Issues that only affect specific operating systems. + +@subheading Patch (optional) + +Normal Bug Squad members should not add or modify Patch issues; +leave them to the Patch Meister. + +@itemize + +@item +Patch-new: the patch has not been checked for @qq{obvious} +mistakes. When in doubt, use this tag. + +@item +Patch-review: the patch has no @qq{obvious} mistakes (as checked +by the Patch Meister), and is ready for review from main +developers. + +Developers with git push ability can use this category, skipping +over @code{patch-new}. + +@item +Patch-needs_work: a developer has some concerns about the patch. +This does not necessarily mean that the patch must be changed; in +some cases, the developer's concerns can be resolved simply by +discussion the situation or providing notation examples. + +If the patch is updated, the category should be changed to +@code{patch-new} (for normal contributors) or @code{patch-new} +(for developers who are very confident about their patch). + +@item +Patch-abandoned: the author has not responded to review comments +for a few months. + +@end itemize + +@subheading Other items (optional) + +Other labels: + +@itemize + +@item +Regression: it used to work intentionally in an earlier +stable release. If the earlier output was accidental (i.e. we +didn't try to stop a collision, but it just so happened that two +grobs didn't collide), then breaking it does not count as a +regression. + +To help decide whether the change is a regression, and therefore +should be Priority-Critical, please adopt the following process: + +@enumerate + +@item +Are you certain the change is OK? If so, do nothing. + +@item +Are you certain that the change is bad? Add it to the tracker +as a Critical issue, regression. + +@item +If you're not certain either way, add it to the tracker as a +Critical issue, regression but be aware that it may be +recategorised or marked invalid. + +@end enumerate + +In particular, anything that breaks a regression test is a +regression. + +@item +Frog: the fix is believed to be suitable for a new contributor +(does not require a great deal of knowledge about LilyPond). The +issue should also have an estimated time in a comment. + +@item +Maintainability: hinders development of LilyPond. For example, +improvements to the build system, or @qq{helper} python scripts. + +@item +Bounty: somebody is willing to pay for the fix. Only add this tag +if somebody has offered an exact figure in US dollars or euros. + +@item +Warning: graphical output is fine, but lilypond prints a +false/misleading warning message. Alternately, a warning should +be printed (such as a bar line error), but was not. Also applies +to warnings when compiling the source code or generating +documentation. + +@item +Security: might potentially be used. + +@item +Performance: might potentially be used. + +@end itemize + +If you particularly want to add a label not in the list, go +ahead, but this is not recommended. + + +@node Adding issues to the tracker +@section Adding issues to the tracker + +@warning{This should only be done by the Bug Squad or experienced +developers. Normal users should not do this; instead, they should +follow the guidelines for @rweb{Bug reports}.} + +In order to assign labels to issues, Bug Squad members should log +in to their google account before adding an item. + +@enumerate + +@item +Check if the issue falls into any previous category given on the +relevant checklists in @ref{Bug Squad checklists}. If in doubt, +add a new issue for a report. We would prefer to have some +incorrectly-added issues rather than lose information that should +have been added. + +@item +Add the issue and classify it according to the guidelines in +@ref{Issue classification}. In particular, the item should have +@code{Status}, @code{Type-}, and @code{Priority-} labels. + +Include output with the first applicable method: + +@itemize + +@item +If the issue has a notation example which fits in one system, +generate a small @file{bug.preview.png} file with: + +@example +lilypond -dpreview bug.ly +@end example + +@item +If the issue has an example which requires more than one system +(i.e. a spacing bug), generate a @file{bug.png} file with: + +@example +lilypond --png bug.ly +@end example + +@item +If the issue requires one or two pages of output, then generate a +@file{bug.png} file with the normal: + +@example +lilypond --png bug.ly +@end example + +@item +If the issue cannot be shown with less than three pages, then +generate a @file{bug.pdf} file with: + +@example +lilypond --pdf bug.ly +@end example + +Note that this is likely to be extremely rare; most bugs should fit +into the first two categories above. + + +@end itemize + +@item +After adding the issue, please send a response email to the same +group(s) that the initial patch was sent to. If the initial email +was sent to multiple mailing lists (such as both @code{user} and +@code{bugs}), then reply to all those mailing lists as well. The +email should contain a link to the issue you just added. + +@end enumerate + + + +@node Patch handling +@section Patch handling + +@warning{This is not a Bug Squad responsibility; we have a +separate person handling this task.} + +There is a single Patch Meister, and a number of Patch Helpers +(rename this?). The list of known patches awaiting review is: + +@example +@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch&sort=patch} +@end example + + +@subheading Helpers: adding patches + +The primary duty is to add patches to the google tracker; we have +a bad track record of losing patches in email. Patches generally +come to the @code{lilypond-devel} mailing list, but are sometimes +sent to @code{bug-lilypond}, @code{lilypond-users}, or +@code{frogs} mailing list instead. + +@itemize +@item +Unless a patch is clearly in response to an existing issue, add a +new issue with the @code{Patch-new} label and a link to the patch +(either on the mailing list archives or the codereview url). + +Issue numbers are cheap; losing developers because they got fed up +with us losing their hard work is expensive. + +@c if we enter patches immediately, I don't think this is relevant. +@ignore +@item +Before adding a patch-reminder issue, do a quick check to see if +it was pushed without sending any email. This can be checked for +searching for relevant terms (from the patch subject or commit +message) on the webgit page: + +@example +@uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git} +@end example +@end ignore + +@item +If the patch is clearly in response to an existing issue, then +update that issue with the @code{Patch-new} label and a link to +the patch (either on the mailing list archives or the codereview +url). + +@item +After adding the issue, please send a response email to the same +group(s) that the initial patch was sent to. + +If the initial email was sent to multiple mailing lists (such as +both @code{bugs} and @code{devel}), then reply to all those +mailing lists as well. The email should contain a link to the +issue you just added. + +@end itemize + +@subheading Helpers: @code{Patch-review} label + +The secondary duty is to do make sure that every issue in the +tracker with a @code{Patch-review} label has passed these +@qq{obvious} tests: + +@itemize +@item +Applies automatically to git master. + +It's ok to have offsets, but not conflicts. + +@item +Regtest comparison looks ok; no unexpected changes. + +@item +Descriptive subject line. + +Avoid subjects like @qq{fixes 123}; instead write @qq{Doc: discuss +stacking-dir for BassFigureAlignment (fix 123)}. + +@item +Compiles docs from scratch. Only check this if you have reason to +suspect it might not work. + +@item +(maybe) + +Check code indentation and style. This should be easier post-GOP +when we have a better-defined code style. + +@end itemize + + +@subheading Patch Meister + +The Patch Meister will: + +@itemize + +@item +send @qq{countdown} emails to +@code{lilypond-devel} when patches appear to be ready. + +@item +send general requests to review patches, or even nasty requests to +review patches. + +@item +downgrade patches from @code{Patch-review} to +@code{Patch-needs_work} as appropriate. + +@item +downgrade patches from @code{Patch-needs_work} to +@code{Patch-abandoned} if no actions have been taken in four +weeks. + +@end itemize + + + + +@node Summary of project status +@section Summary of project status + +@subsubheading Project overview + +Grid view provides the best overview: + +@example +@uref{http://code.google.com/p/lilypond/issues/list?mode=grid&y=Priority&x=Type&cells=ids} +@end example + +@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 + +@subsubheading Easy tasks + +Issues tagged with @code{Frog} indicates a task suitable for a +relatively new contributor. The time given is a quick +(inaccurate) estimate of the time required for somebody who is +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 + +@subsubheading Patches to review + +Patches which have no @qq{obvious} problems: + +@example +@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch-review} +@end example + + + diff --git a/Documentation/contributor/lsr-work.itexi b/Documentation/contributor/lsr-work.itexi new file mode 100644 index 0000000000..27349b3625 --- /dev/null +++ b/Documentation/contributor/lsr-work.itexi @@ -0,0 +1,312 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node LSR work +@chapter LSR work + +@menu +* Introduction to LSR:: +* Adding and editing snippets:: +* Approving snippets:: +* LSR to Git:: +* Fixing snippets in LilyPond sources:: +* Renaming a snippet:: +* Updating LSR to a new version:: +@end menu + + +@node Introduction to LSR +@section Introduction to LSR + +The +@uref{http://lsr.dsi.unimi.it/, LilyPond Snippet Repository (LSR)} +is a collection of lilypond examples. A subset of these examples +are automatically imported into the documentation, making it easy +for users to contribute to the docs without learning Git and +Texinfo. + + +@node Adding and editing snippets +@section Adding and editing snippets + +@subheading General guidelines + +When you create (or find!) a nice snippet, if it supported by LilyPond +version running on LSR, please add it to LSR. Go to +@uref{http://lsr.dsi.unimi.it/, LSR} and log in -- if you haven't +already, create an account. Follow the instructions on the website. +These instructions also explain how to modify existing snippets. + +If you think the snippet is particularly informative and you think it +should be included in the documentation, tag it with @qq{docs} and one +or more other categories, or ask somebody who has editing permissions to +do it on the development list. + +Please make sure that the lilypond code follows the guidelines in +@ref{LilyPond formatting}. + +If a new snippet created for documentation purposes compiles with +LilyPond version currently on LSR, it should be added to LSR, and a +reference to the snippet should be added to the documentation. + +If the new snippet uses new features that are not available in the +current LSR version, the snippet should be added to +@file{Documentation/snippets/new} and a reference should be added to the +manual. + +Snippets created or updated in @file{Documentation/snippets/new} should +be copied to @file{Documentation/snippets} by invoking at top of the +source tree + +@example +scripts/auxiliar/makelsr.py +@end example + +@noindent +This also copies translated texidoc fields and snippet titles into +snippets in @file{Documentation/snippets}. Note: this, in turn, could +make the translated texidoc fields to appear as out of sync when you +run @code{make check-translation}, if the originals changed from the +last translation update, even if the translations are also updated; +see @ref{Documentation translation maintenance} for details about +updating the docs; in particular, see @ref{Updating translation +committishes} to learn how to mark these translated fields as fully +updated. + +Be sure that @command{make doc} runs successfully before submitting a +patch, to prevent breaking compilation. + +@subheading Formatting snippets in @file{Documentation/snippets/new} + +When adding a file to this directory, please start the file with + +@example +\version "2.x.y" +\header @{ +% Use existing LSR tags other than 'docs'; see makelsr.py for +% the list of tags used to sort snippets. E.g.: + lsrtags = "rhythms,expressive-marks" +% This texidoc string will be formatted by Texinfo + texidoc = " +This code demonstrates ... +" +% Please put doctitle last so that the '% begin verbatim' +% mark will be added correctly by makelsr.py. + doctitle = "Snippet title" +@} +@end example + +\noindent +and name the file @file{snippet-title.ly}. + + +@node Approving snippets +@section Approving snippets + +The main task of LSR editors is approving snippets. To find a list of +unapproved snippets, log into @uref{http://lsr.dsi.unimi.it/, LSR} and +select @qq{No} from the dropdown menu to the right of the word +@qq{Approved} at the bottom of the interface, then click +@qq{Enable filter}. + +Check each snippet: + +@enumerate + +@item +Does the snippet make sense and does what the author claims that +it does? If you think the snippet is particularly helpful, add +the @qq{docs} tag and at least one other tag. + +@item +If the snippet is tagged with @qq{docs}, check to see if it +matches our guidelines for @ref{LilyPond formatting}. + +Also, snippets tagged with @qq{docs} should not be explaining +(replicating) existing material in the docs. They should not +refer to the docs; the docs should refer to them. + +@item +If the snippet uses scheme, check that everything looks good and +there are no security risks. + +@warning{Somebody could sneak a @code{#'(system "rm -rf /")} +command into our source tree if you do not do this! Take this +step @strong{VERY SERIOUSLY}.} + +@end enumerate + + +@node LSR to Git +@section LSR to Git + +@enumerate + +@item +Make sure that @command{convert-ly} and @command{lilypond} commands in +current PATH are in a bleeding edge version -- latest release from +master branch, or even better a fresh snapshot from Git master branch. + +@item +From the top source directory, run: + +@example +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 + +@noindent +where @var{YYYY-MM-DD} is the current date, e.g. 2009-02-28. + +@item +Follow the instructions printed on the console to manually check for +unsafe files. + +@warning{Somebody could sneak a @code{#'(system "rm -rf /")} +command into our source tree if you do not do this! Take this +step @strong{VERY SERIOUSLY}.} + +@item +Do a git add / commit / push. + +@end enumerate + +Note that whenever there is one snippet from +@file{Documentation/snippets/new} and the other from LSR with the same +file name, the one from @file{Documentation/snippets/new} will be copied +by @command{makelsr.py}. + + +@node Fixing snippets in LilyPond sources +@section Fixing snippets in LilyPond sources + +In case some snippet from @file{Documentation/snippets} causes the +documentation compilation to fail, the following steps should be +followed to fix it reliably. + +@enumerate + +@item +Look up the snippet filename @file{@var{foo}.ly} in the error output +or log, then fix the file @file{Documentation/snippets/@var{foo}.ly} to make the +documentation build successfully. + +@item +Determine where it comes from by looking at its first line, e.g. run + +@example +head -1 Documentation/snippets/@var{foo}.ly +@end example + +@item +@strong{In case the snippet comes from LSR}, apply the fix to the +snippet in LSR and send a notification email to a LSR editor with CC to +the development list -- see @ref{Adding and editing snippets}. The +failure may sometimes not be caused by the snippet in LSR but by the +syntax conversion made by @command{convert-ly}; in this case, try to fix +@command{convert-ly} or report the problem on the development list, then +run @command{makelsr.py} again, see @ref{LSR to Git}. In some cases, +when some features has been introduced or vastly changed so it requires +(or takes significant advantage of) important changes in the snippet, it +is simpler and recommended to write a new version of the snippet in +@file{Documentation/snippets/new}, then run @command{makelsr.py}. + +@item +@strong{In case the snippet comes from} +@file{Documentation/snippets/new}, apply in +@file{Documentation/snippets/new/@var{foo}.ly} the same fix you did in +@file{Documentation/snippets/@var{foo}.ly}. In case the build failure +was caused by a translation string, you may have to fix +@file{input/texidocs/@var{foo}.texidoc} instead. + +@item +In any case, commit all changes to Git. + +@end enumerate + + +@node Renaming a snippet +@section Renaming a snippet + +Due to the potential duality of snippets (i.e. they may exist both +in the LSR database, and in @code{Documentation/snippets/new/}), +this process is a bit more involved than we might like. + +@enumerate +@item +Send an email LSR editor, requesting the renaming. + +@item +The LSR editor does the renaming (or debates the topic with you), +then warns the LSR-to-git person (wanted: better title) about the +renaming. + +@item +LSR-to-git person does his normal job, but then also renames any +copies of the snippets in @code{Documentation/snippets/new/}, and +any instances of the snippet name in the documentation. + +@code{git grep} is highly recommended for this task. + +@end enumerate + + +@node Updating LSR to a new version +@section Updating LSR to a new version + +To update LSR, perform the following steps: + +@enumerate + +@item +Download the latest snippet tarball, extract it, and run +@code{convert-ly} on all files using the command-line option +@code{--to=VERSION} to ensure snippets are updated to the +correct stable version. + +@item +Copy relevant snippets (i.e., snippets whose version is equal to or less +than the new version of LilyPond) from +@file{Documentation/snippets/new/} into the tarball. + +You must not rename any files during this, or the next, stage. + +@item +Verify that all files compile with the new version of LilyPond, +ideally without any warnings or errors. To ease the process, +you may use the shell script that appears after this list. + +Due to the workload involved, we @emph{do not} require that you +verify that all snippets produce the expected output. If you +happen to notice any such snippets and can fix them, great; but as +long as all snippets compile, don't delay this step due to some +weird output. If a snippet is broken, the hordes of willing +web-2.0 volunteers will fix it. It's not our problem. + +@item +Create a tarball and send it back to Sebastiano. + +@item +When LSR has been updated, download another snippet tarball, verify that +the relevant snippets from @file{Documentation/snippets/new/} were +included, then delete those snippets from +@file{Documentation/snippets/new/}. + +@end enumerate + + +Here is a shell script to run all @file{.ly} files in a directory +and redirect terminal output to text files, which are then +searched for the word "failed" to see which snippets do not compile. + +@example +#!/bin/bash + +for LILYFILE in *.ly +do + STEM=$(basename "$LILYFILE" .ly) + echo "running $LILYFILE..." + lilypond --format=png -ddelete-intermediate-files "$LILYFILE" >& "$STEM".txt +done + +grep failed *.txt +@end example diff --git a/Documentation/contributor/programming-work.itexi b/Documentation/contributor/programming-work.itexi new file mode 100644 index 0000000000..6f3bbb824a --- /dev/null +++ b/Documentation/contributor/programming-work.itexi @@ -0,0 +1,2064 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Programming work +@chapter Programming work + +@menu +* Overview of LilyPond architecture:: +* LilyPond programming languages:: +* Programming without compiling:: +* Finding functions:: +* Code style:: +* Debugging LilyPond:: +* Tracing object relationships:: +* Adding or modifying features:: +* Iterator tutorial:: +* Engraver tutorial:: +* Callback tutorial:: +* LilyPond scoping:: +* LilyPond miscellany:: +@end menu + +@node Overview of LilyPond architecture +@section Overview of LilyPond architecture + +LilyPond processes the input file into graphical and musical output in a +number of stages. This process, along with the types of routines that +accomplish the various stages of the process, is described in this section. A +more complete description of the LilyPond architecture and internal program +execution is found in Erik Sandberg's +@uref{http://lilypond.org/web/images/thesis-erik-sandberg.pdf, master's +thesis}. + +The first stage of LilyPond processing is @emph{parsing}. In the parsing +process, music expressions in LilyPond input format are converted to music +expressions in Scheme format. In Scheme format, a music expression is a list +in tree form, with nodes that indicate the relationships between various music +events. The LilyPond parser is written in Bison. + +The second stage of LilyPond processing is @emph{iterating}. Iterating +assigns each music event to a context, which is the environment in which the +music will be finally engraved. The context is responsible for all further +processing of the music. It is during the iteration stage that contexts are +created as necessary to ensure that every note has a Voice type context (e.g. +Voice, TabVoice, DrumVoice, CueVoice, MensuralVoice, VaticanaVoice, +GregorianTranscriptionVoice), that the Voice type contexts exist in +appropriate Staff type contexts, and that parallel Staff type contexts exist +in StaffGroup type contexts. In addition, during the iteration stage each +music event is assigned a moment, or a time in the music when the event +begins. + +Each type of music event has an associated iterator. Iterators are defined in +@file{*-iterator.cc}. During iteration, an +event's iterator is called to deliver that music event to the appropriate +context(s). + +The final stage of LilyPond processing is @emph{translation}. During +translation, music events are prepared for graphical or midi output. The +translation step is accomplished by the polymorphic base class Translator +through its two derived classes: Engraver (for graphical output) and +Performer (for midi output). + +Translators are defined in C++ files named @file{*-engraver.cc} +and @file{*-performer.cc}. +Much of the work of translating is handled by Scheme functions, +which is one of the keys to LilyPond's exceptional flexibility. + +@sourceimage{architecture-diagram,,,png} + + +@node LilyPond programming languages +@section LilyPond programming languages + +Programming in LilyPond is done in a variety of programming languages. Each +language is used for a specific purpose or purposes. This section describes +the languages used and provides links to reference manuals and tutorials for +the relevant language. + +@subsection C++ + +The core functionality of LilyPond is implemented in C++. + +C++ is so ubiquitous that it is difficult to identify either a reference +manual or a tutorial. Programmers unfamiliar with C++ will need to spend some +time to learn the language before attempting to modify the C++ code. + +The C++ code calls Scheme/GUILE through the GUILE interface, which is +documented in the +@uref{http://www.gnu.org/software/guile/manual/html_node/index.html, GUILE + Reference Manual}. + +@subsection Flex + +The LilyPond lexer is implemented in Flex, an implementation of the Unix lex +lexical analyser generator. Resources for Flex can be found +@uref{http://flex.sourceforge.net/, here}. + +@subsection GNU Bison + +The LilyPond parser is implemented in Bison, a GNU parser generator. The +Bison homepage is found at @uref{http://www.gnu.org/software/bison/, +gnu.org}. The manual (which includes both a reference and tutorial) is +@uref{http://www.gnu.org/software/bison/manual/index.html, available} in a +variety of formats. + +@subsection GNU Make + +GNU Make is used to control the compiling process and to build the +documentation and the website. GNU Make documentation is available at +@uref{http://www.gnu.org/software/make/manual/, the GNU website}. + +@subsection GUILE or Scheme + +GUILE is the dialect of Scheme that is used as LilyPond's extension language. +Many extensions to LilyPond are written entirely in GUILE. The +@uref{http://www.gnu.org/software/guile/manual/html_node/index.html, +GUILE Reference Manual} is available online. + +@uref{http://mitpress.mit.edu/sicp/full-text/book/book.html, Structure and +Interpretation of Computer Programs}, a popular textbook used to teach +programming in Scheme is available in its entirety online. + +An introduction to Guile/Scheme as used in LilyPond can be found in the +@rextend{Scheme tutorial}. + +@subsection MetaFont + +MetaFont is used to create the music fonts used by LilyPond. A MetaFont +tutorial is available at @uref{http://metafont.tutorial.free.fr/, the +METAFONT tutorial page}. + +@subsection PostScript + +PostScript is used to generate graphical output. A brief PostScript tutorial +is @uref{http://local.wasp.uwa.edu.au/~pbourke/dataformats/postscript/, +available online}. The +@uref{http://www.adobe.com/devnet/postscript/pdfs/PLRM.pdf, PostScript Language +Reference} is available online in PDF format. + +@subsection Python + +Python is used for XML2ly and is used for building the documentation and the +website. + +Python documentation is available at @uref{http://www.python.org/doc/, +python.org}. + +@node Programming without compiling +@section Programming without compiling + +Much of the development work in LilyPond takes place by changing @file{*.ly} or +@file{*.scm} files. These changes can be made without compiling LilyPond. Such +changes are described in this section. + + +@subsection Modifying distribution files + +Much of LilyPond is written in Scheme or LilyPond input files. These +files are interpreted when the program is run, rather than being compiled +when the program is built, and are present in all LilyPond distributions. +You will find @file{.ly} files in the @file{ly/} directory and the Scheme files in the +@file{scm/} directory. Both Scheme files and @file{.ly} files can be modified and +saved with any text editor. It's probably wise to make a backup copy of +your files before you modify them, although you can reinstall if the +files become corrupted. + +Once you've modified the files, you can test the changes just by running +LilyPond on some input file. It's a good idea to create a file that +demonstrates the feature you're trying to add. This file will eventually +become a regression test and will be part of the LilyPond distribution. + +@subsection Desired file formatting + +Files that are part of the LilyPond distribution have Unix-style line +endings (LF), rather than DOS (CR+LF) or MacOS 9 and earlier (CR). Make +sure you use the necessary tools to ensure that Unix-style line endings are +preserved in the patches you create. + +Tab characters should not be included in files for distribution. All +indentation should be done with spaces. Most editors have settings to +allow the setting of tab stops and ensuring that no tab characters are +included in the file. + +Scheme files and LilyPond files should be written according to standard +style guidelines. Scheme file guidelines can be found at +@uref{http://community.schemewiki.org/?scheme-style}. Following these +guidelines will make your code easier to read. Both you and others that +work on your code will be glad you followed these guidelines. + +For LilyPond files, you should follow the guidelines for LilyPond snippets +in the documentation. You can find these guidelines at +@ref{Texinfo introduction and usage policy}. + +@node Finding functions +@section Finding functions + +When making changes or fixing bugs in LilyPond, one of the initial +challenges is finding out where in the code tree the functions to +be modified live. With nearly 3000 files in the source tree, +trial-and-error searching is generally ineffective. This section +describes a process for finding interesting code. + +@subsection Using the ROADMAP + +The file ROADMAP is located in the main directory of the lilypond source. +ROADMAP lists all of the directories in the LilyPond source tree, along +with a brief description of the kind of files found in each directory. +This can be a very helpful tool for deciding which directories to search +when looking for a function. + + +@subsection Using grep to search + +Having identified a likely subdirectory to search, the grep utility can +be used to search for a function name. The format of the grep command is + +@example +grep -i functionName subdirectory/* +@end example + +This command will search all the contents of the directory subdirectory/ +and display every line in any of the files that contains +functionName. The @code{-i} option makes @command{grep} ignore +case -- this can be very useful if you are not yet familiar with +our capitalization conventions. + +The most likely directories to grep for function names are @file{scm/} for +scheme files, ly/ for lilypond input (@file{*.ly}) files, and @file{lily/} for C++ +files. + + +@subsection Using git grep to search + +If you have used git to obtain the source, you have access to a +powerful tool to search for functions. The command: + +@example +git grep functionName +@end example + +will search through all of the files that are present in the git +repository looking for functionName. It also presents the results +of the search using @code{less}, so the results are displayed one page +at a time. + +@subsection Searching on the git repository at Savannah + +You can also use the equivalent of git grep on the Savannah server. + +@itemize + +@item +Go to http://git.sv.gnu.org/gitweb/?p=lilypond.git + +@item +In the pulldown box that says commit, select grep. + +@item +Type functionName in the search box, and hit enter/return + +@end itemize + +This will initiate a search of the remote git repository. + + +@node Code style +@section Code style + +This section describes style guidelines for LilyPond +source code. + +@menu +* Languages:: +* Filenames:: +* Indentation:: +* Naming conventions:: +* Broken code:: +* Code comments:: +* Handling errors:: +* Localization:: +@end menu + + +@node Languages +@subsection Languages + +C++ and Python are preferred. Python code should use PEP 8. + + +@node Filenames +@subsection Filenames + +Definitions of classes that are only accessed via pointers (*) or +references (&) shall not be included as include files. + +@verbatim + filenames + + ".hh" Include files + ".cc" Implementation files + ".icc" Inline definition files + ".tcc" non inline Template defs + + in emacs: + + (setq auto-mode-alist + (append '(("\\.make$" . makefile-mode) + ("\\.cc$" . c++-mode) + ("\\.icc$" . c++-mode) + ("\\.tcc$" . c++-mode) + ("\\.hh$" . c++-mode) + ("\\.pod$" . text-mode) + ) + auto-mode-alist)) +@end verbatim + +The class Class_name is coded in @q{class-name.*} + + +@node Indentation +@subsection Indentation + +Standard GNU coding style is used. In emacs: + +@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}: + +@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: + +@example +scripts/auxiliar/fixcc.py lily/my-test-file.cc +@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. + + +@subheading Indenting files with emacs in script mode + +@c email to wl@gnu.org when I get here. + +@warning{this is pending some confirmation on -devel. July 2009 -gp} + +Command-line script to format stuff with emacs: + +@example +#!/bin/sh +emacs $1 -batch --eval '(indent-region (point-min) (point-max) nil)' -f save-buffer +@end example + +(that's all on one line) + +Save it as a shell script, then run on the file(s) you modified. + + +@subheading Indenting with vim + +Although emacs indentation is the LilyPond standard, acceptable +indentation can usually be accomplished with vim. Some hints for +vim are as follows: + +A workable .vimrc: + +@verbatim +set cindent +set smartindent +set autoindent +set expandtab +set softtabstop=2 +set shiftwidth=2 +filetype plugin indent on +set incsearch +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 laststatus=2 +set number +" Remove trailing whitespace on write +autocmd BufWritePre * :%s/\s\+$//e +@end verbatim + +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 =. + +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. + +@verbatim +" Additional Guile-specific 'forms' +syn keyword schemeSyntax define-public define*-public +syn keyword schemeSyntax define* lambda* let-keywords* +syn keyword schemeSyntax defmacro defmacro* define-macro +syn keyword schemeSyntax defmacro-public defmacro*-public +syn keyword schemeSyntax use-modules define-module +syn keyword schemeSyntax define-method define-class + +" Additional LilyPond-specific 'forms' +syn keyword schemeSyntax define-markup-command define-markup-list-command +syn keyword schemeSyntax define-safe-public define-music-function +syn keyword schemeSyntax def-grace-function + +" All of the above should influence indenting too +set lw+=define-public,define*-public +set lw+=define*,lambda*,let-keywords* +set lw+=defmacro,defmacro*,define-macro +set lw+=defmacro-public,defmacro*-public +set lw+=use-modules,define-module +set lw+=define-method,define-class +set lw+=define-markup-command,define-markup-list-command +set lw+=define-safe-public,define-music-function +set lw+=def-grace-function + +" These forms should not influence indenting +set lw-=if +set lw-=set! + +" Try to highlight all ly: procedures +syn match schemeFunc "ly:[^) ]\+" +@end verbatim + + +@node Naming conventions +@subsection Naming Conventions + +Naming conventions have been established for LilyPond +source code. + +@subheading Classes and Types + +Classes begin with an uppercase letter, and words +in class names are separated with @code{_}: + +@verbatim +This_is_a_class +@end verbatim + +@subheading Members + +Member variable names end with an underscore: + +@verbatim +Type Class::member_ +@end verbatim + +@subheading Macros + +Macro names should be written in uppercase completely, +with words separated by @code{_}: + +@verbatim +THIS_IS_A_MACRO +@end verbatim + +@subheading Variables + +Variable names should be complete words, rather than abbreviations. +For example, it is preferred to use @code{thickness} rather than +@code{th} or @code{t}. + +Multi-word variable names in C++ should have the words separated +by the underscore character (@q{_}): + +@verbatim +cxx_multiword_variable +@end verbatim + +Multi-word variable names in Scheme should have the words separated +by a hyphen (@q{-}): + +@verbatim +scheme-multiword-variable +@end verbatim + +@node Broken code +@subsection Broken code + +Do not write broken code. This includes hardwired dependencies, +hardwired constants, slow algorithms and obvious limitations. If +you can not avoid it, mark the place clearly, and add a comment +explaining shortcomings of the code. + +Ideally, the comment marking the shortcoming would include +TODO, so that it is marked for future fixing. + +We reject broken-in-advance on principle. + + +@node Code comments +@subsection Code comments + +Comments may not be needed if descriptive variable names are used +in the code and the logic is straightforward. However, if the +logic is difficult to follow, and particularly if non-obvious +code has been included to resolve a bug, a comment describing +the logic and/or the need for the non-obvious code should be included. + +There are instances where the current code could be commented better. +If significant time is required to understand the code as part of +preparing a patch, it would be wise to add comments reflecting your +understanding to make future work easier. + + +@node Handling errors +@subsection Handling errors + +As a general rule, you should always try to continue computations, +even if there is some kind of error. When the program stops, it +is often very hard for a user to pinpoint what part of the input +causes an error. Finding the culprit is much easier if there is +some viewable output. + +So functions and methods do not return errorcodes, they never +crash, but report a programming_error and try to carry on. + +Error and warning messages need to be localized. + + +@node Localization +@subsection Localization + +This document provides some guidelines to help programmers write +proper user +messages. To help translations, user messages must follow +uniform conventions. Follow these rules when coding for LilyPond. +Hopefully, this can be replaced by general GNU guidelines in the +future. Even better would be to have an English (en_BR, en_AM) +guide helping programmers writing consistent messages for all GNU +programs. + +Non-preferred messages are marked with `+'. By convention, +ungrammatical examples are marked with `*'. However, such ungrammatical +examples may still be preferred. + +@itemize + +@item +Every message to the user should be localized (and thus be marked +for localization). This includes warning and error messages. + +@item +Do not localize/gettextify: + +@itemize +@item +`programming_error ()'s + +@item +`programming_warning ()'s + +@item +debug strings + +@item +output strings (PostScript, TeX, etc.) + +@end itemize + +@item +Messages to be localized must be encapsulated in `_ (STRING)' or +`_f (FORMAT, ...)'. E.g.: + +@example +warning (_ ("need music in a score")); +error (_f ("cannot open file: `%s'", file_name)); +@end example + +In some rare cases you may need to call `gettext ()' by hand. This +happens when you pre-define (a list of) string constants for later +use. In that case, you'll probably also need to mark these string +constants for translation, using `_i (STRING)'. The `_i' macro is +a no-op, it only serves as a marker for `xgettext'. + +@example +char const* messages[] = @{ + _i ("enable debugging output"), + _i ("ignore lilypond version"), + 0 +@}; + +void +foo (int i) +@{ + puts (gettext (messages i)); +@} +@end example + +See also @file{flower/getopt-long.cc} and @file{lily/main.cc}. + +@item +Do not use leading or trailing whitespace in messages. If you need +whitespace to be printed, prepend or append it to the translated +message + +@example +message ("Calculating line breaks..." + " "); +@end example + +@item +Error or warning messages displayed with a file name and line +number never start with a capital, eg, + +@example +foo.ly: 12: not a duration: 3 +@end example + +Messages containing a final verb, or a gerund (`-ing'-form) always +start with a capital. Other (simpler) messages start with a +lowercase letter + +@example +Processing foo.ly... +`foo': not declared. +Not declaring: `foo'. +@end example + +@item +Avoid abbreviations or short forms, use `cannot' and `do not' +rather than `can't' or `don't' +To avoid having a number of different messages for the same +situation, well will use quoting like this `"message: `%s'"' for all +strings. Numbers are not quoted: + +@example +_f ("cannot open file: `%s'", name_str) +_f ("cannot find character number: %d", i) +@end example + +@item +Think about translation issues. In a lot of cases, it is better to +translate a whole message. English grammar must not be imposed on the +translator. So, instead of + +@example +stem at + moment.str () + does not fit in beam +@end example + +have + +@example +_f ("stem at %s does not fit in beam", moment.str ()) +@end example + +@item +Split up multi-sentence messages, whenever possible. Instead of + +@example +warning (_f ("out of tune! Can't find: `%s'", "Key_engraver")); +warning (_f ("cannot find font `%s', loading default", font_name)); +@end example + +rather say: + +@example +warning (_ ("out of tune:")); +warning (_f ("cannot find: `%s', "Key_engraver")); +warning (_f ("cannot find font: `%s', font_name)); +warning (_f ("Loading default font")); +@end example + +@item +If you must have multiple-sentence messages, use full punctuation. +Use two spaces after end of sentence punctuation. No punctuation +(esp. period) is used at the end of simple messages. + +@example +_f ("Non-matching braces in text `%s', adding braces", text) +_ ("Debug output disabled. Compiled with NPRINT.") +_f ("Huh? Not a Request: `%s'. Ignoring.", request) +@end example + +@item +Do not modularize too much; words frequently cannot be translated +without context. It is probably safe to treat most occurrences of +words like stem, beam, crescendo as separately translatable words. + +@item +When translating, it is preferable to put interesting information +at the end of the message, rather than embedded in the middle. +This especially applies to frequently used messages, even if this +would mean sacrificing a bit of eloquency. This holds for original +messages too, of course. + +@example +en: cannot open: `foo.ly' ++ nl: kan `foo.ly' niet openen (1) +kan niet openen: `foo.ly'* (2) +niet te openen: `foo.ly'* (3) +@end example + + +The first nl message, although grammatically and stylistically +correct, is not friendly for parsing by humans (even if they speak +dutch). I guess we would prefer something like (2) or (3). + +@item +Do not run make po/po-update with GNU gettext < 0.10.35 + +@end itemize + + + +@node Debugging LilyPond +@section Debugging LilyPond + +The most commonly used tool for debugging LilyPond is the GNU +debugger gdb. The gdb tool is used for investigating and debugging +core Lilypond code written in C++. Another tool is available for +debugging Scheme code using the Guile debugger. This section +describes how to use both gdb and the Guile Debugger. + +@menu +* Debugging overview:: +* Debugging C++ code:: +* Debugging Scheme code:: +@end menu + +@node Debugging overview +@subsection Debugging overview + +Using a debugger simplifies troubleshooting in at least two ways. + +First, breakpoints can be set to pause execution at any desired point. +Then, when execution has paused, debugger commands can be issued to +explore the values of various variables or to execute functions. + +Second, the debugger can display a stack trace, which shows the +sequence in which functions have been called and the arguments +passed to the called functions. + +@node Debugging C++ code +@subsection Debugging C++ code + +The GNU debugger, gdb, is the principal tool for debugging C++ code. + +@subheading Compiling LilyPond for use with gdb + +In order to use gdb with LilyPond, it is necessary to compile +LilyPond with debugging information. This is accomplished by running +the following commands in the main LilyPond source directory. + +@example +./configure --disable-optimising +make +@end example + +This will create a version of LilyPond containing debugging +information that will allow the debugger to tie the source code +to the compiled code. + +You should not do @var{make install} if you want to use a debugger +with LilyPond. The @var{make install} command will strip debugging +information from the LilyPond binary. + +@subheading Typical gdb usage + +Once you have compiled the Lilypond image with the necessary +debugging information it will have been written to a location in a +subfolder of your current working directory: + +@example +out/bin/lilypond +@end example + +This is important as you will need to let gdb know where to find the +image containing the symbol tables. You can invoke gdb from the +command line using the following: + +@example +gdb out/bin/lilypond +@end example +@noindent +This loads the LilyPond symbol tables into gdb. Then, to run +LilyPond on @file{test.ly} under the debugger, enter the following: + +@example +run test.ly +@end example + +@noindent +at the gdb prompt. + +As an alternative to running gdb at the command line you may try +a graphical interface to gdb such as ddd: + +@example +ddd out/bin/lilypond +@end example + +You can also use sets of standard gdb commands stored in a .gdbinit +file (see next section). + +@subheading Typical .gdbinit files + +The behavior of gdb can be readily customized through the use of a +@var{.gdbinit} file. A @var{.gdbinit} file is a file named +@var{.gdbinit} (notice the @qq{.} at the beginning of the file name) +that is placed in a user's home directory. + +The @var{.gdbinit} file below is from Han-Wen. It sets breakpoints +for all errors and defines functions for displaying scheme objects +(ps), grobs (pgrob), and parsed music expressions (pmusic). + +@example +file lily/out/lilypond +b programming_error +b Grob::programming_error + +define ps + print ly_display_scm($arg0) +end +define pgrob + print ly_display_scm($arg0->self_scm_) + print ly_display_scm($arg0->mutable_property_alist_) + print ly_display_scm($arg0->immutable_property_alist_) + print ly_display_scm($arg0->object_alist_) +end +define pmusic + print ly_display_scm($arg0->self_scm_) + print ly_display_scm($arg0->mutable_property_alist_) + print ly_display_scm($arg0->immutable_property_alist_) +end +@end example + +@node Debugging Scheme code +@subsection Debugging Scheme code + +Scheme code can be developed using the Guile command line +interpreter @code{top-repl}. You can either investigate +interactively using just Guile or you can use the debugging +tools available within Guile. + +@subheading Using Guile interactively with LilyPond + +In order to experiment with Scheme programming in the LilyPond +environment, it is necessary to have a Guile interpreter that +has all the LilyPond modules loaded. This requires the following +steps. + +First, define a Scheme symbol for the active module in the @file{.ly} file: + +@example +#(module-define! (resolve-module '(guile-user)) + 'lilypond-module (current-module)) +@end example + +Now place a Scheme function in the @file{.ly} file that gives an +interactive Guile prompt: + +@example +#(top-repl) +@end example + +When the @file{.ly} file is compiled, this causes the compilation to be +interrupted and an interactive guile prompt to appear. Once the +guile prompt appears, the LilyPond active module must be set as the +current guile module: + +@example +guile> (set-current-module lilypond-module) +@end example + +You can demonstrate these commands are operating properly by typing the name +of a LilyPond public scheme function to check it has been defined: + +@example +guile> fret-diagram-verbose-markup +# +@end example + +If the LilyPond module has not been correctly loaded, an error +message will be generated: + +@example +guile> fret-diagram-verbose-markup +ERROR: Unbound variable: fret-diagram-verbose-markup +ABORT: (unbound-variable) +@end example + +Once the module is properly loaded, any valid LilyPond Scheme +expression can be entered at the interactive prompt. + +After the investigation is complete, the interactive guile +interpreter can be exited: + +@example +guile> (quit) +@end example + +The compilation of the @file{.ly} file will then continue. + +@subheading Using the Guile debugger + +To set breakpoints and/or enable tracing in Scheme functions, put + +@example +\include "guile-debugger.ly" +@end example + +in your input file after any scheme procedures you have defined in +that file. This will invoke the Guile command-line after having set +up the environment for the debug command-line. When your input file +is processed, a guile prompt will be displayed. You may now enter +commands to set up breakpoints and enable tracing by the Guile debugger. + +@subheading Using breakpoints + +At the guile prompt, you can set breakpoints with +the @code{set-break!} procedure: + +@example +guile> (set-break! my-scheme-procedure) +@end example + +Once you have set the desired breakpoints, you exit the guile repl frame +by typing: + +@example +guile> (quit) +@end example + +Then, when one of the scheme routines for which you have set +breakpoints is entered, guile will interrupt execution in a debug +frame. At this point you will have access to Guile debugging +commands. For a listing of these commands, type: + +@example +debug> help +@end example + +Alternatively you may code the breakpoints in your Lilypond source +file using a command such as: + +@example +#(set-break! my-scheme-procedure) +@end example + +immediately after the @code{\include} statement. In this case the +breakpoint will be set straight after you enter the @code{(quit)} +command at the guile prompt. + +Embedding breakpoint commands like this is particularly useful if +you want to look at how the Scheme procedures in the @file{.scm} +files supplied with LilyPond work. To do this, edit the file in +the relevant directory to add this line near the top: + +@example +(use-modules (scm guile-debugger)) +@end example + +Now you can set a breakpoint after the procedure you are interested +in has been declared. For example, if you are working on routines +called by @var{print-book-with} in @file{lily-library.scm}: + +@example +(define (print-book-with parser book process-procedure) + (let* ((paper (ly:parser-lookup parser '$defaultpaper)) + (layout (ly:parser-lookup parser '$defaultlayout)) + (outfile-name (get-outfile-name parser))) + (process-procedure book paper layout outfile-name))) + +(define-public (print-book-with-defaults parser book) + (print-book-with parser book ly:book-process)) + +(define-public (print-book-with-defaults-as-systems parser book) + (print-book-with parser book ly:book-process-to-systems)) + +@end example + +At this point in the code you could add this to set a breakpoint at +print-book-with: + +@example +(set-break! print-book-with) +@end example + +@subheading Tracing procedure calls and evaluator steps + +Two forms of trace are available: + +@example +(set-trace-call! my-scheme-procedure) +@end example + +and + +@example +(set-trace-subtree! my-scheme-procedure) +@end example + +@code{set-trace-call!} causes Scheme to log a line to the standard +output to show when the procedure is called and when it exits. + +@code{set-trace-subtree!} traces every step the Scheme evaluator +performs in evaluating the procedure. + +@node Tracing object relationships +@section Tracing object relationships + +Understanding the LilyPond source often boils down to figuring out what +is happening to the Grobs. Where (and why) are they being created, +modified and destroyed? Tracing Lily through a debugger in order to +identify these relationships can be time-consuming and tedious. + +In order to simplify this process, a facility has been added to +display the grobs that are created and the properties that are set +and modified. Although it can be complex to get set up, once set up +it easily provides detailed information about the life of grobs +in the form of a network graph. + +Each of the steps necessary to use the graphviz utility +is described below. + +@enumerate + +@item Installing graphviz + +In order to create the graph of the object relationships, it is +first necessary to install Graphviz. graphviz is available for a +number of different platforms: + +@example +@uref{http://www.graphviz.org/Download..php} +@end example + +@item Modifying config.make + +In order for the Graphviz tool to work, config.make must be modified. +It is probably a good idea to first save a copy of config.make under +a different name. Then, edit config.make by removing every occurrence +of @code{-DNDEBUG}. + +@item Rebuilding LilyPond + +The executable code of LilyPond must be rebuilt from scratch: + +@example +make -C lily clean && make -C lily +@end example + +@item Create a graphviz-compatible @file{.ly} file + +In order to use the graphviz utility, the @file{.ly} file must include +@file{ly/graphviz-init.ly}, and should then specify the +grobs and symbols that should be tracked. An example of this +is found in @file{input/regression/graphviz.ly}. + +@item Run lilypond with output sent to a log file + +The Graphviz data is sent to stderr by lilypond, so it is +necessary to redirect stderr to a logfile: + +@example +lilypond graphviz.ly 2> graphviz.log +@end example + +@item Edit the logfile + +The logfile has standard lilypond output, as well as the Graphviz +output data. Delete everything from the beginning of the file +up to but not including the first occurrence of @code{digraph}. + +Also, delete the final liypond message about successs from the end +of the file. + +@item Process the logfile with @code{dot} + +The directed graph is created from the log file with the program +@code{dot}: + +@example +dot -Tpdf graphviz.log > graphviz.pdf +@end example + +@end enumerate + +The pdf file can then be viewed with any pdf viewer. + +When compiled without @code{-DNDEBUG}, lilypond may run slower +than normal. The original configuration can be restored by either +renaming the saved copy of @code{config.make} or rerunning +@code{configure}. Then rebuild lilypond with + +@example +make -C lily clean && make -C lily +@end example + + +@node Adding or modifying features +@section Adding or modifying features + +When a new feature is to be added to LilyPond, it is necessary to +ensure that the feature is properly integrated to maintain +its long-term support. This section describes the steps necessary +for feature addition and modification. + + +@menu +* Write the code:: +* Write regression tests:: +* Write convert-ly rule:: +* Automatically update documentation:: +* Manually update documentation:: +* Edit changes.tely:: +* Verify successful build:: +* Verify regression tests:: +* Post patch for comments:: +* Push patch:: +* Closing the issues:: +@end menu + +@node Write the code +@subsection Write the code + +You should probably create a new git branch for writing the code, as that +will separate it from the master branch and allow you to continue +to work on small projects related to master. + +Please be sure to follow the rules for programming style discussed +earlier in this chapter. + + +@node Write regression tests +@subsection Write regression tests + +In order to demonstrate that the code works properly, you will +need to write one or more regression tests. These tests are +typically @file{.ly} files that are found in @file{input/regression}. + +Regression tests should be as brief as possible to demonstrate the +functionality of the code. + +Regression tests should generally cover one issue per test. Several +short, single-issue regression tests are preferred to a single, long, +multiple-issue regression test. + +Use existing regression tests as templates to demonstrate the type of +header information that should be included in a regression test. + + +@node Write convert-ly rule +@subsection Write convert-ly rule + +If the modification changes the input syntax, a convert-ly rule +should be written to automatically update input files from older +versions. + +convert-ly rules are found in python/convertrules.py + +If possible, the convert-ly rule should allow automatic updating +of the file. In some cases, this will not be possible, so the +rule will simply point out to the user that the feature needs +manual correction. + +@subsubheading Updating version numbers + +If a development release occurs between you writing your patch and +having it approved+pushed, you will need to update the version +numbers in your tree. This can be done with: + +@example +scripts/auxiliar/update-patch-version old.version.number new.version.number +@end example + +It will change all files in git, so use with caution and examine +the resulting diff. + + +@node Automatically update documentation +@subsection Automatically update documentation + +@command{convert-ly} should be used to update the documentation, +the snippets, and the regression tests. This not only makes the +necessary syntax changes, it also tests the @command{convert-ly} +rules. + +The automatic updating is performed by moving to the top-level +source directory, then running: + +@example +scripts/auxiliar/update-with-convert-ly.sh +@end example + +If you did an out-of-tree build, pass in the relative path: + +@example +BUILD_DIR=../build-lilypond/ scripts/auxiliar/update-with-convert-ly.sh +@end example + + +@node Manually update documentation +@subsection Manually update documentation + +Where the convert-ly rule is not able to automatically update the inline +lilypond code in the documentation (i.e. if a NOT_SMART rule is used), the +documentation must be manually updated. The inline snippets that require +changing must be changed in the English version of the docs and all +translated versions. If the inline code is not changed in the +translated documentation, the old snippets will show up in the +English version of the documentation. + +Where the convert-ly rule is not able to automatically update snippets +in Documentation/snippets/, those snippets must be manually updated. +Those snippets should be copied to Documentation/snippets/new. The +comments at the top of the snippet describing its automatic generation +should be removed. All translated texidoc strings should be removed. +The comment @qq{% begin verbatim} should be removed. The syntax of +the snippet should then be manually edited. + +Where snippets in Documentation/snippets are made obsolete, the snippet +should be copied to Documentation/snippets/new. The comments and +texidoc strings should be removed as described above. Then the body +of the snippet should be changed to: + +@example +\markup @{ + This snippet is deprecated as of version X.Y.Z and + will be removed from the documentation. +@} +@end example + +@noindent +where X.Y.Z is the version number for which the convert-ly rule was +written. + +Update the snippet files by running: + +@example +scripts/auxiliar/makelsr.py +@end example + +Where the convert-ly rule is not able to automatically update regression +tests, the regression tests in input/regression should be manually +edited. + +Although it is not required, it is helpful if the developer +can write relevant material for inclusion in the Notation +Reference. If the developer does not feel qualified to write +the documentation, a documentation editor will be able to +write it from the regression tests. The text that is added to +or removed from the documentation should be changed only in +the English version. + + +@node Edit changes.tely +@subsection Edit changes.tely + +An entry should be added to Documentation/changes.tely to describe +the feature changes to be implemented. This is especially important +for changes that change input file syntax. + +Hints for changes.tely entries are given at the top of the file. + +New entries in changes.tely go at the top of the file. + +The changes.tely entry should be written to show how the new change +improves LilyPond, if possible. + + +@node Verify successful build +@subsection Verify successful build + +When the changes have been made, successful completion must be +verified by doing + +@example +make all +make doc +@end example + +When these commands complete without error, the patch is +considered to function successfully. + +Developers on Windows who are unable to build LilyPond should +get help from a Linux or OSX developer to do the make tests. + + +@node Verify regression tests +@subsection Verify regression tests + +In order to avoid breaking LilyPond, it is important to verify that +the regression tests succeed, and that no unwanted changes are +introduced into the output. This process is described in +@ref{Regtest comparison}. + +@subheading Typical developer's edit/compile/test cycle + +TODO: is @code{[-j@var{X} CPU_COUNT=@var{X}]} useful for +@code{test-baseline}, @code{check}, @code{clean}, +@code{test-redo}? Neil Puttock says it is useful for +everything but @code{clean}, which is disk-limited. +Need to check formally. + +@itemize +@item +Initial test: + +@example +make [-j@var{X}] +make test-baseline +make [-j@var{X} CPU_COUNT=@var{X}] check +@end example + +@item +Edit/compile/test cycle: + +@example +@emph{## edit source files, then...} + +make clean @emph{## only if needed (see below)} +make [-j@var{X}] @emph{## only if needed (see below)} +make test-redo @emph{## redo files differing from baseline} +make [-j@var{X} CPU_COUNT=@var{X}] check @emph{## CPU_COUNT here?} +@end example + +@item +Reset: + +@example +make test-clean +@end example +@end itemize + +If you modify any source files that have to be compiled (such as +@file{.cc} or @file{.hh} files in @file{flower/} or @file{lily/}), +then you must run @command{make} before @command{make test-redo}, +so @command{make} can compile the modified files and relink all +the object files. If you only modify files which are interpreted, +like those in the @file{scm/} and @file{ly/} directories, then +@command{make} is not needed before @command{make test-redo}. + +TODO: Fix the following paragraph. You can do @command{rm mf/out/*} +instead of make clean, and you can probably do +@command{make -C mf/ clean} as well, but I haven't checked it -- cds + +Also, if you modify any font definitions in the @file{mf/} +directory then you must run @command{make clean} and +@command{make} before running @command{make test-redo}. This will +recompile everything, whether modified or not, and takes a lot +longer. + +Running @command{make@tie{}check} will leave an HTML page +@file{out/test-results/index.html}. This page shows all the +important differences that your change introduced, whether in the +layout, MIDI, performance or error reporting. + + + + +@node Post patch for comments +@subsection Post patch for comments + +See @ref{Uploading a patch for review}. + + +@node Push patch +@subsection Push patch + +Once all the comments have been addressed, the patch can be pushed. + +If the author has push privileges, the author will push the patch. +Otherwise, a developer with push privileges will push the patch. + + +@node Closing the issues +@subsection Closing the issues + +Once the patch has been pushed, all the relevant issues should be +closed. + +On Rietveld, the author should log in an close the issue either by +using the @q{Edit Issue} link, or by clicking the circled x icon +to the left of the issue name. + +If the changes were in response to a feature request on the Google +issue tracker for LilyPond, the author should change the status to +Fixed and a tag @q{fixed_x_y_z} should be added, where the patch was +fixed in version x.y.z. If +the author does not have privileges to change the status, an email +should be sent to bug-lilypond requesting the BugMeister to change +the status. + + +@node Iterator tutorial +@section Iterator tutorial + +TODO -- this is a placeholder for a tutorial on iterators + +Iterators are routines written in C++ that process music expressions +and sent the music events to the appropriate engravers and/or +performers. + + +@node Engraver tutorial +@section Engraver tutorial + +Engravers are C++ classes that catch music events and +create the appropriate grobs for display on the page. Though the +majority of engravers are responsible for the creation of a single grob, +in some cases (e.g. @code{New_fingering_engraver}), several different grobs +may be created. + +Engravers listen for events and acknowledge grobs. Events are passed to +the engraver in time-step order during the iteration phase. Grobs are +made available to the engraver when they are created by other engravers +during the iteration phase. + + +@menu +* Useful methods for information processing:: +* Translation process:: +* Preventing garbage collection for SCM member variables:: +* Listening to music events:: +* Acknowledging grobs:: +* Engraver declaration/documentation:: +@end menu + +@node Useful methods for information processing +@subsection Useful methods for information processing + +An engraver inherits the following public methods from the Translator +base class, which can be used to process listened events and acknowledged +grobs: + +@itemize +@item @code{virtual void initialize ()} +@item @code{void start_translation_timestep ()} +@item @code{void process_music ()} +@item @code{void process_acknowledged ()} +@item @code{void stop_translation_timestep ()} +@item @code{virtual void finalize ()} +@end itemize + +These methods are listed in order of translation time, with +@code{initialize ()} and @code{finalize ()} bookending the whole +process. @code{initialize ()} can be used for one-time initialization +of context properties before translation starts, whereas +@code{finalize ()} is often used to tie up loose ends at the end of +translation: for example, an unterminated spanner might be completed +automatically or reported with a warning message. + + +@node Translation process +@subsection Translation process + +At each timestep in the music, translation proceeds by calling the +following methods in turn: + +@code{start_translation_timestep ()} is called before any user +information enters the translators, i.e., no property operations +(\set, \override, etc.) or events have been processed yet. + +@code{process_music ()} and @code{process_acknowledged ()} are called +after all events in the current time step have been heard, or all +grobs in the current time step have been acknowledged. The latter +tends to be used exclusively with engravers which only acknowledge +grobs, whereas the former is the default method for main processing +within engravers. + +@code{stop_translation_timestep ()} is called after all user +information has been processed prior to beginning the translation for +the next timestep. + + +@node Preventing garbage collection for SCM member variables +@subsection Preventing garbage collection for SCM member variables + +In certain cases, an engraver might need to ensure private Scheme +variables (with type SCM) do not get swept away by Guile's garbage +collector: for example, a cache of the previous key signature which +must persist between timesteps. The method +@code{virtual derived_mark () const} can be used in such cases: + +@example +Engraver_name::derived_mark () +@{ + scm_gc_mark (private_scm_member_) +@} +@end example + + +@node Listening to music events +@subsection Listening to music events + +External interfaces to the engraver are implemented by protected +macros including one or more of the following: + +@itemize +@item @code{DECLARE_TRANSLATOR_LISTENER (event_name)} +@item @code{IMPLEMENT_TRANSLATOR_LISTENER (Engraver_name, event_name)} +@end itemize + +@noindent +where @var{event_name} is the type of event required to provide the +input the engraver needs and @var{Engraver_name} is the name of the +engraver. + +Following declaration of a listener, the method is implemented as follows: + +@example +IMPLEMENT_TRANSLATOR_LISTENER (Engraver_name, event_name) +void +Engraver_name::listen_event_name (Stream event *event) +@{ + ...body of listener method... +@} +@end example + + +@node Acknowledging grobs +@subsection Acknowledging grobs + +Some engravers also need information from grobs as they are created +and as they terminate. The mechanism and methods to obtain this +information are set up by the macros: + +@itemize +@item @code{DECLARE_ACKNOWLEDGER (grob_interface)} +@item @code{DECLARE_END_ACKNOWLEDGER (grob_interface)} +@end itemize + +where @var{grob_interface} is an interface supported by the +grob(s) which should be acknowledged. For example, the following +code would declare acknowledgers for a @code{NoteHead} grob (via the +@code{note-head-interface}) and any grobs which support the +@code{side-position-interface}: + +@example +@code{DECLARE_ACKNOWLEDGER (note_head)} +@code{DECLARE_ACKNOWLEDGER (side_position)} +@end example + +The @code{DECLARE_END_ACKNOWLEDGER ()} macro sets up a spanner-specific +acknowledger which will be called whenever a spanner ends. + +Following declaration of an acknowledger, the method is coded as follows: + +@example +void +Engraver_name::acknowledge_interface_name (Grob_info info) +@{ + ...body of acknowledger method... +@} +@end example + + +@node Engraver declaration/documentation +@subsection Engraver declaration/documentation + +An engraver must have a public macro + +@itemize +@item @code{TRANSLATOR_DECLARATIONS (Engraver_name)} +@end itemize + +@noindent +where @code{Engraver_name} is the name of the engraver. This +defines the common variables and methods used by every engraver. + +At the end of the engraver file, one or both of the following +macros are generally called to document the engraver in the +Internals Reference: + +@itemize +@item @code{ADD_ACKNOWLEDGER (Engraver_name, grob_interface)} +@item @code{ADD_TRANSLATOR (Engraver_name, Engraver_doc, + Engraver_creates, Engraver_reads, Engraver_writes)} +@end itemize + +@noindent +where @code{Engraver_name} is the name of the engraver, @code{grob_interface} +is the name of the interface that will be acknowledged, +@code{Engraver_doc} is a docstring for the engraver, +@code{Engraver_creates} is the set of grobs created by the engraver, +@code{Engraver_reads} is the set of properties read by the engraver, +and @code{Engraver_writes} is the set of properties written by +the engraver. + +The @code{ADD_ACKNOWLEDGER} and @code{ADD_TRANSLATOR} macros use a +non-standard indentation system. Each interface, grob, read property, +and write property is on its own line, and the closing parenthesis +and semicolon for the macro all occupy a separate line beneath the final +interface or write property. See existing engraver files for more +information. + + +@node Callback tutorial +@section Callback tutorial + +TODO -- This is a placeholder for a tutorial on callback functions. + +@node LilyPond scoping +@section LilyPond scoping + +The Lilypond language has a concept of scoping, i.e. you can do + +@example +foo = 1 + +#(begin + (display (+ foo 2))) +@end example + +@noindent with @code{\paper}, @code{\midi} and @code{\header} being +nested scope inside the @file{.ly} file-level scope. @w{@code{foo = 1}} +is translated in to a scheme variable definition. + +This implemented using modules, with each scope being an anonymous +module that imports its enclosing scope's module. + +Lilypond's core, loaded from @file{.scm} files, is usually placed in the +@code{lily} module, outside the @file{.ly} level. In the case of + +@example +lilypond a.ly b.ly +@end example + +@noindent +we want to reuse the built-in definitions, without changes effected in +user-level @file{a.ly} leaking into the processing of @file{b.ly}. + +The user-accessible definition commands have to take care to avoid +memory leaks that could occur when running multiple files. All +information belonging to user-defined commands and markups is stored in +a manner that allows it to be garbage-collected when the module is +dispersed, either by being stored module-locally, or in weak hash +tables. + +@node LilyPond miscellany +@section LilyPond miscellany + +This is a place to dump information that may be of use to developers +but doesn't yet have a proper home. Ideally, the length of this section +would become zero as items are moved to other homes. + + +@menu +* Spacing algorithms:: +* Info from Han-Wen email:: +* Music functions and GUILE debugging:: +@end menu + +@node Spacing algorithms +@subsection Spacing algorithms + +Here is information from an email exchange about spacing algorithms. + +On Thu, 2010-02-04 at 15:33 -0500, Boris Shingarov wrote: +I am experimenting with some modifications to the line breaking code, +and I am stuck trying to understand how some of it works. So far my +understanding is that Simple_spacer operates on a vector of Grobs, and +it is a well-known Constrained-QP problem (rods = constraints, springs += quadratic function to minimize). What I don't understand is, if the +spacer operates at the level of Grobs, which are built at an earlier +stage in the pipeline, how are the changes necessitated by differences +in line breaking, taken into account? in other words, if I take the +last measure of a line and place it on the next line, it is not just a +matter of literally moving that graphic to where the start of the next +line is, but I also need to draw a clef, key signature, and possibly +other fundamental things -- but at that stage in the rendering +pipeline, is it not too late?? + +Joe Neeman answered: + +We create lots of extra grobs (eg. a BarNumber at every bar line) but +most of them are not drawn. See the break-visibility property in +item-interface. + + +@node Info from Han-Wen email +@subsection Info from Han-Wen email + +In 2004, Douglas Linhardt decided to try starting a document that would +explain LilyPond architecture and design principles. The material below +is extracted from that email, which can be found at +@uref{http://thread.gmane.org/gmane.comp.gnu.lilypond.devel/2992}. +The headings reflect questions from Doug or comments from Han-Wen; +the body text are Han-Wen's answers. + +@subheading Figuring out how things work. + +I must admit that when I want to know how a program works, I use grep +and emacs and dive into the source code. The comments and the code +itself are usually more revealing than technical documents. + +@subheading What's a grob, and how is one used? + +Graphical object - they are created from within engravers, either as +Spanners (derived class) -slurs, beams- or Items (also a derived +class) -notes, clefs, etc. + +There are two other derived classes System (derived from Spanner, +containing a "line of music") and Paper_column (derived from Item, it +contains all items that happen at the same moment). They are separate +classes because they play a special role in the linebreaking process. + +@subheading What's a smob, and how is one used? + +A C(++) object that is encapsulated so it can be used as a Scheme +object. See GUILE info, "19.3 Defining New Types (Smobs)" + +@@subheading When is each C++ class constructed and used + +@itemize + +@item +Music classes + +In the parser.yy see the macro calls MAKE_MUSIC_BY_NAME(). + +@item +Contexts + +Constructed during "interpreting" phase. + +@item +Engravers + +Executive branch of Contexts, plugins that create grobs, usually one +engraver per grob type. Created together with context. + +@item +Layout Objects + += grobs + +@item +Grob Interfaces + +These are not C++ classes per se. The idea of a Grob interface hasn't +crystallized well. ATM, an interface is a symbol, with a bunch of grob +properties. They are not objects that are created or destroyed. + +@item +Iterators + +Objects that walk through different music classes, and deliver events +in a synchronized way, so that notes that play together are processed +at the same moment and (as a result) end up on the same horizontal position. + +Created during interpreting phase. + +BTW, the entry point for interpreting is ly:run-translator +(ly_run_translator on the C++ side) + +@end itemize + +@subheading Can you get to Context properties from a Music object? + +You can create music object with a Scheme function that reads context +properties (the \applycontext syntax). However, that function is +executed during Interpreting, so you can not really get Context +properties from Music objects, since music objects are not directly +connected to Contexts. That connection is made by the Music_iterators + +@subheading Can you get to Music properties from a Context object? + +Yes, if you are given the music object within a Context +object. Normally, the music objects enter Contexts in synchronized +fashion, and the synchronization is done by Music_iterators. + +@subheading What is the relationship between C++ classes and Scheme objects? + +Smobs are C++ objects in Scheme. Scheme objects (lists, functions) are +manipulated from C++ as well using the GUILE C function interface +(prefix: scm_) + +@subheading How do Scheme procedures get called from C++ functions? + +scm_call_*, where * is an integer from 0 to 4. +Also scm_c_eval_string (), scm_eval () + +@subheading How do C++ functions get called from Scheme procedures? + +Export a C++ function to Scheme with LY_DEFINE. + +@subheading What is the flow of control in the program? + +Good question. Things used to be clear-cut, but we have Scheme +and SMOBs now, which means that interactions do not follow a very +rigid format anymore. See below for an overview, though. + +@subheading Does the parser make Scheme procedure calls or C++ function calls? + +Both. And the Scheme calls can call C++ and vice versa. It's nested, +with the SCM datatype as lubrication between the interactions + +(I think the word "lubrication" describes the process better than the +traditional word "glue") + +@subheading How do the front-end and back-end get started? + +Front-end: a file is parsed, the rest follows from that. Specifically, + +Parsing leads to a Music + Music_output_def object (see parser.yy, +definition of toplevel_expression ) + +A Music + Music_output_def object leads to a Global_context object (see +ly_run_translator ()) + +During interpreting, Global_context + Music leads to a bunch of +Contexts (see Global_translator::run_iterator_on_me ()). + +After interpreting, Global_context contains a Score_context (which +contains staves, lyrics etc.) as a child. Score_context::get_output () +spews a Music_output object (either a Paper_score object for notation +or Performance object for MIDI). + +The Music_output object is the entry point for the backend (see +ly_render_output ()). + +The main steps of the backend itself are in + +@itemize + +@item +@file{paper-score.cc} , Paper_score::process_ + +@item +@file{system.cc} , System::get_lines() + +@item +The step, where things go from grobs to output, is in +System::get_line(): each grob delivers a Stencil (a Device +independent output description), which is interpreted by our +outputting backends (@file{scm/output-tex.scm} and +@file{scm/output-ps.scm}) to produce TeX and PS. + +@end itemize + +Interactions between grobs and putting things into .tex and .ps files +have gotten a little more complex lately. Jan has implemented +page-breaking, so now the backend also involves Paper_book, +Paper_lines and other things. This area is still heavily in flux, and +perhaps not something you should want to look at. + +@subheading How do the front-end and back-end communicate? + +There is no communication from backend to front-end. From front-end to +backend is simply the program flow: music + definitions gives +contexts, contexts yield output, after processing, output is written +to disk. + +@subheading Where is the functionality associated with KEYWORDs? + +See @file{my-lily-lexer.cc} (keywords, there aren't that many) +and @file{ly/*.ly} (most of the other backslashed @code{/\words} are identifiers) + +@subheading What Contexts/Properties/Music/etc. are available when they are processed? + +What do you mean exactly with this question? + +See @file{ly/engraver-init.ly} for contexts, +see @file{scm/define-*.scm} for other objects. + +@subheading How do you decide if something is a Music, Context, or Grob property? +Why is part-combine-status a Music property when it seems (IMO) +to be related to the Staff context? + +The Music_iterators and Context communicate through two channels + +Music_iterators can set and read context properties, idem for +Engravers and Contexts + +Music_iterators can send "synthetic" music events (which aren't in +the input) to a context. These are caught by Engravers. This is +mostly a one way communication channel. + +part-combine-status is part of such a synthetic event, used by +Part_combine_iterator to communicate with Part_combine_engraver. + + +@subheading Deciding between context and music properties + +I'm adding a property to affect how \autochange works. It seems to +me that it should be a context property, but the Scheme autochange +procedure has a Music argument. Does this mean I should use +a Music property? + +\autochange is one of these extra strange beasts: it requires +look-ahead to decide when to change staves. This is achieved by +running the interpreting step twice (see +@file{scm/part-combiner.scm} , at the bottom), and +storing the result of the first step (where to switch +staves) in a Music property. Since you want to influence that +where-to-switch list, your must affect the code in +make-autochange-music (@file{scm/part-combiner.scm}). +That code is called directly from the parser and there are no +official "parsing properties" yet, so there is no generic way +to tune \autochange. We would have to invent something new +for this, or add a separate argument, + +@example + \autochange #around-central-C ..music.. +@end example + +@noindent +where around-central-C is some function that is called from +make-autochange-music. + +@subheading More on context and music properties + +From Neil Puttock, in response to a question about transposition: + +Context properties (using \set & \unset) are tied to engravers: they +provide information relevant to the generation of graphical objects. + +Since transposition occurs at the music interpretation stage, it has +no direct connection with engravers: the pitch of a note is fixed +before a notehead is created. Consider the following minimal snippet: + +@example +@{ c' @} +@end example + +This generates (simplified) a NoteEvent, with its pitch and duration +as event properties, + +@example +(make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0) +@end example + +which the Note_heads_engraver hears. It passes this information on to +the NoteHead grob it creates from the event, so the head's correct +position and duration-log can be determined once it's ready for +printing. + +If we transpose the snippet, + +@example +\transpose c d @{ c' @} +@end example + +the pitch is changed before it reaches the engraver (in fact, it +happens just after the parsing stage with the creation of a +TransposedMusic music object): + +@example +(make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 1 0) +@end example + +You can see an example of a music property relevant to transposition: +untransposable. + +@example +\transpose c d @{ c'2 \withMusicProperty #'untransposable ##t c' @} +@end example + +-> the second c' remains untransposed. + +Take a look at @file{lily/music.cc} to see where the transposition takes place. + + +@subheading How do I tell about the execution environment? + +I get lost figuring out what environment the code I'm looking at is in when it +executes. I found both the C++ and Scheme autochange code. Then I was trying +to figure out where the code got called from. I finally figured out that the +Scheme procedure was called before the C++ iterator code, but it took me a +while to figure that out, and I still didn't know who did the calling in the +first place. I only know a little bit about Flex and Bison, so reading those +files helped only a little bit. + +@emph{Han-Wen:} GDB can be of help here. Set a breakpoint in C++, and run. When you +hit the breakpoint, do a backtrace. You can inspect Scheme objects +along the way by doing + +@example +p ly_display_scm(obj) +@end example + +this will display OBJ through GUILE. + +@node Music functions and GUILE debugging +@subsection Music functions and GUILE debugging + +Ian Hulin was trying to do some debugging in music functions, and +came up with the following question + +HI all, +I'm working on the Guile Debugger Stuff, and would like to try +debugging a music function definition such as: + +@example +conditionalMark = #(define-music-function (parser location) () +    #@{ \tag #'instrumental-part @{\mark \default@}  #@} ) +@end example + +It appears conditionalMark does not get set up as an +equivalent of a Scheme + +@example +(define conditionalMark = define-music-function(parser location () ... +@end example + +@noindent +although something gets defined because Scheme apparently recognizes + +@example +#(set-break! conditionalMark) +@end example + +@noindent +later on in the file without signalling any Guile errors. + +However the breakpoint trap is never encountered as +define-music-function passed things on to ly:make-music-function, +which is really C++ code ly_make_music_function, so Guile never +finds out about the breakpoint. + +Han-Wen answered as follows: + +You can see the definition by doing + +@example +#(display conditionalMark) +@end example + +noindent +inside the @file{.ly} file. + +The breakpoint failing may have to do with the call sequence. See +@file{parser.yy}, run_music_function(). The function is called directly from +C++, without going through the GUILE evaluator, so I think that is why +there is no debugger trap. diff --git a/Documentation/contributor/quick-start.itexi b/Documentation/contributor/quick-start.itexi new file mode 100644 index 0000000000..526d415c12 --- /dev/null +++ b/Documentation/contributor/quick-start.itexi @@ -0,0 +1,502 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@node Quick start +@chapter Quick start + +Want to submit a patch for LilyPond? Great! This chapter is +designed to let you do this as quickly and easily as possible. + +It is not possible to compile LilyPond on Windows, and extremely +difficulty to compile it on MacOS X. We have therefore made a +@q{remix} of Ubuntu which includes all necessary dependencies to +compile both LilyPond and the documentation. This can be run +inside a virtual machine without disturbing your main operating +system. The full name is @qq{Ubuntu LilyPond Developer Remix}, +but we refer to it as @qq{lilydev} for short. + +@advanced{experienced developers may prefer to use their own +development environment. It may be instructive to skim over these +instructions, but be aware that this chapter is intended for +helpful users who may have never created a patch before.} + +@menu +* Lilydev:: +* Using lily-git:: +* Compiling with lilydev:: +* Now start work!:: +@end menu + +@node Lilydev +@section Lilydev + +This section discusses how to install and use the Ubuntu LilyPond +Development Remix. + +@menu +* Installing lilydev:: +* Configuring lilydev in virtualbox:: +* Using lilydev:: +@end menu + +@node Installing lilydev +@subsection Installing lilydev + +@enumerate +@item +Install some virtualization software. + +Any virtualization tool can be used, but we recommend VirtualBox: + +@example +@uref{http://@/www.virtualbox.org/@/wiki/@/Downloads} +@end example + +In virtualization terminology, your main operating system is the +@qq{host}, while lilydev is the @qq{guest}. + +@item +Download the Ubuntu LilyPond Developer Remix disk image: +(approximately 1 GB) + +@example +@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.1.iso} +@end example + +@advanced{Some users might want these files, but if you don't +recognize what they are, then you don't want them: +@* +@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.1.iso.md5} +@c @* +@c @uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso.torrent} +} + +@item +Create a music new @qq{virtual machine} inside your virtualization +software. + +If possible, use at least 700 MB of RAM (1GB would be better) for +the virtual machine, and use @qq{dynamically expanding storage} +for the virtual hard drive. A complete compile of everything +(code, docs, regression tests) can reach 10 GB. + +@item +Install @file{ubuntu-lilydev-remix-1.1.iso} as the @qq{guest} +operating system on your virtualized system. + +@enumerate + +@item +When @file{ubuntu-lilydev-remix-1.1.iso} boots, it shows an +ISOLINUX @code{boot:} prompt. Type: + +@example +install +@end example + +@item +At the @qq{Prepare disk space} stage, do not be afraid to select +@qq{Erase and use the entire disk}, since this refers to your +@emph{virtual disk}, not your machine's actual hard drive. + +@item +When prompted to remove the installation CD, go to +@clicksequence{Devices @click{} CD/DVD Devices} and de-select +@file{ubuntu-lilydev-remix-1.1.iso}. + +@end enumerate + +@advanced{ +The latest version of lilydev is based on Ubuntu 10.04.1; if you +encounter any difficulties installing it, search for one of the +many tutorials for installing that particular version of Ubuntu as +a guest operating system. +} + +@item +Do any extra configuration for your virtualization software. + +There are additional instructions for VirtualBox in +@ref{Configuring lilydev in virtualbox}. + +If you use other virtualization software, then follow the normal +procedures for your virtualization software with Ubuntu as the +client. + +@end enumerate + +@knownissues + +Not all hardware is supported in all virtualization tools. In +particular, some contributors have reported problems with USB +devices. If you would like to investigate further, then look for +help for your virtualization tool using your normal OS as the +@qq{host} and Ubuntu as the @qq{client}. + + +@node Configuring lilydev in virtualbox +@subsection Configuring lilydev in virtualbox + +VirtualBox has extra @qq{guest additions} which can make the +virtualization easier to use (full-screen, easy file sharing +between host and guest operating systems, shared clipboards, etc). + +@enumerate + +@item +In @emph{VirtualBox}, select @clicksequence{Devices @click{} +Install Guest Additions...}. + +@item +In @emph{Ubuntu}, select @clicksequence{Places @click{} +VBOXADDITIONS_}. A file-system window will open. + +@item +Double-click on the @file{autorun.sh} file, then select @qq{Run in +Terminal}, and enter your password when prompted. + +@item +Once the script is finished, @qq{eject} the virtual CD, and then +go to @clicksequence{Devices @click{} CD/DVD Devices} and +de-select @file{VBoxGuestAdditions.iso}. + +@item +Restart Ubuntu to complete the installation. + +@advanced{If you do any kernel upgrades, you may need to re-run +these VBOXADDITIONS instructions.} +@end enumerate + +Some other steps may be helpful: + +@itemize +@item +In the settings for the virtual machine, set the network to +Bridged mode to allow you to access shared folders on your Windows +host. + +@item +Set up any additional features, such as @q{Shared Folders} between +your main operating system and ubuntu. This is distinct from the +networked share folders in Windows. Consult external +documentation for this step. + +Some longtime contributors have reported that @q{shared folders} +are rarely useful and not worth the fuss, particularly since files +can be shared over a network instead. + +@end itemize + + +@node Using lilydev +@subsection Using lilydev + +If you are not familiar with Linux, it may be beneficial to read a +couple of @qq{introduction to Ubuntu} webpages. + +@itemize +@item +One particular change from Windows and MacOS X is that most +software should be installed with your @qq{package manager}; this +vastly simplifies the process of installing and configuring +software. Go to @clicksequence{Applications @click{} Ubuntu +Software Center}. + +@item +The rest of this manual assumes that you are using the +command-line; double-click on the @q{Terminal} icon on the +desktop. + +@item +Pasting into a terminal is done with @code{Ctrl+Shift+v}. + +@item +The @qq{Places} top-menu has shortcuts to a graphical +@qq{navigator} like Windows Explorer or the MacOS X Finder. + +@item +Right-click allows you to edit a file with gedit. We recommend +using gedit. + +@item +Some contributors have recommended: (pdf available for free) + +@example +@uref{http://www.ubuntupocketguide.com/} +@end example + +@end itemize + + +@node Using lily-git +@section Using lily-git + +@command{lily-git.tcl} is a graphical tool to help you access and +share changes to the lilypond source code. + +@menu +* Install and configuration of lily-git.tcl:: +* Daily use of lily-git.tcl:: +@end menu + +@node Install and configuration of lily-git.tcl +@unnumberedsubsec Install and configuration of @command{lily-git.tcl} + +@warning{The rest of this manual assumes that you are using the +command-line; double-click on the @q{Terminal} icon on the +desktop.} + +@enumerate +@item +Type (or copy&paste) into the Terminal: + +@example +lily-git.tcl +@end example + +@item +Click on the @qq{Get source} button. + +This will create a directory called @file{lilypond-git/} within +your home directory, and will download the source code into that +directory (around 55Mb). When the process is finished, the +@qq{Command output} window will display @qq{Done}, and the button +label will change to say @qq{Update source}. + +@warning{Some contributors have reported that nothing happens at +this step. If this occurs, then try again in a few minutes -- we +suspect that this is an intermittant network problem. If the +problem persists, please ask for help.} + +@item +Navigate to the @file{lilypond-git/} directory to view the source +files. + +@end enumerate + +You should now progress to @ref{Compiling with lilydev}. + +@warning{Throughout the rest of this manual, most command-line +input should be entered from @file{~/lilypond-git/}. This is +referred to as the @emph{top source directory}.} + +@advanced{the @qq{Get source} button does not fetch the entire +history of the git repository, so utilities like @command{gitk} +will only be able to display the most recent additions. As you +continue to work with @command{lily-git.tcl}, the @qq{Update +source} button will take any new additions and add it to whatever +is currently in your repository's history.} + + +@node Daily use of lily-git.tcl +@unnumberedsubsec Daily use of @command{lily-git.tcl} + +@warning{Only work on one set of changes at once. Do not start +work on any new changes until your first set has been accepted.} + +@subsubheading 1. Update source + +At the beginning of each session of lilypond work, you should +click the @qq{Update source} button to get the latest changes to +the source code. + +@warning{In some rare and unfortunate circumstances, this will +result in a @emph{merge conflict}. If this occurs, follow the +instructions for @qq{Abort changes}, below. Your work will not be +lost.} + + +@subsubheading 2a. New local commit + +A single commit typically represents one logical set of related +changes (such as a bug-fix), and may incorporate changes to +multiple files at the same time. + +When you're finished making the changes for a commit, click the +@qq{New local commit} button. This will open the @qq{Git Commit +Message} window. The message header is required, and the message +body is optional. + +After entering a commit message, click @qq{OK} to finalize the +commit. + +@advanced{for more information regarding commits and commit +messages, see @ref{Commits and patches}.} + + +@subsubheading 2b. Amend previous commit + +You can go back and make changes to the most recent commit with +the @qq{Amend previous commit} button. This is useful if a +mistake is found after you have clicked the @qq{New local commit} +button. + +To amend the most recent commit, re-edit the source files as +needed and then click the @qq{Amend previous commit} button. The +earlier version of the commit is not saved, but is replaced by the +new one. + +@warning{This does not update the patch @strong{files}; if you +have a patch file from an earlier version of the commit, you will +need to make another patch set when using this feature. The old +patch file will not be saved, but will be replaced by the new one +after you click on @qq{Make patch set}.} + + +@subsubheading 3. Make patch set + +Before making a patch set from any commits, you should click the +@qq{Update source} button to make sure the commits are based on +the most recent remote snapshot. + +When you click the @qq{Make patch set} button, +@command{lily-git.tcl} will produce patch files for any new +commits, saving them to the current directory. The command output +will display the name of the new patch files near the end of the +output: + +@example +0001-CG-add-lily-git-instructions.patch +Done. +@end example + +Send patch files to the appropriate place: + +@itemize +@item +If you have a mentor, send it to them via email. + +@item +New contributors should send the patch attached to an email to +@email{frogs@@lilynet.net}. Please add @qq{[PATCH]} to the +subject line. + +@item +Translators should send patches to +@email{translations@@lilynet.net}. + +@item +More experienced contributors should upload the patch for +web-based review. This requires additional software and use of +the command-line; see @ref{Uploading a patch for review}. + +@end itemize + + +@subsubheading The @qq{Abort changes -- Reset to origin} button + +@warning{Only use this if your local commit history gets +hopelessly confused!} + +The button labeled @qq{Abort changes -- Reset to origin} will copy +all changed files to a subdirectory of @file{lilypond-git/} named +@file{aborted_edits/}, and will reset the repository to the +current state of the remote repository (at @code{git.sv.gnu.org}). + + + +@node Compiling with lilydev +@section Compiling with lilydev + +Lilydev is our @q{remix} of Ubuntu which contains all the +necessary dependencies to do lilypond development; for more +information, see @rcontrib{Lilydev}. + +@subsubheading Preparing the build + +To prepare the build directory, enter (or copy&paste) the below +text. This should take less than a minute. + +@c we heavily recommend the out-of-tree build; do not change this! + +@example +cd ~/lilypond-git/ +sh autogen.sh --noconfigure +mkdir -p build/ +cd build/ +../configure +@end example + +@subsubheading Building @code{lilypond} + +Compiling lilypond will likely take between 5 and 60 minutes, +depending on your computer's speed and available RAM. We +recommend that you minimize the terminal window while it is +building; this can have a non-negligible effect on compilation +speed. + +@example +cd ~/lilypond-git/build/ +make +@end example + +You may run the compiled @code{lilypond} with: + +@example +cd ~/lilypond-git/build/ +out/bin/lilypond my-file.ly +@end example + +@subsubheading Building the documentation + +Compiling the documentation is a much more involved process, and +will likely take 2 to 10 hours. + +@example +cd ~/lilypond-git/build/ +make doc +@end example + +The documentation is put in @file{out-www/offline-root/}. You may +view the html files by entering the below text; we recommend that +you bookmark the resulting page: + +@example +firefox ~/lilypond-git/build/out-www/offline-root/index.html +@end example + +@subsubheading Installing + +Don't. There is no reason to install lilypond within lilydev. +All development work can (and should) stay within the +@file{$HOME/lilypond-git/} directory, and any personal composition +or typesetting work should be done with an official GUB release. + + +@subsubheading Problems and other options + +To select different build options, or isolate certain parts of the +build, or to use multiple CPUs while building, read +@ref{Compiling}. + +In particular, contributors working on the documentation should be +aware of some bugs in the build system, and should read the +workarounds in @ref{Generating documentation}. + + +@node Now start work! +@section Now start work! + +Lilydev users may now skip to the chapter which is aimed at +their intended contributions: + +@itemize +@item @ref{Documentation work} +@item @ref{Translating the documentation} +@item @ref{Website work} +@item @ref{Regression tests} +@item @ref{Programming work} +@end itemize + +These chapters are mainly intended for people not using LilyDev, +but they contain extra information about the +@qq{behind-the-scenes} activities. We recommend that you read +these at your leisure, a few weeks after beginning work with +LilyDev. + +@itemize +@item @ref{Working with source code} +@item @ref{Compiling} +@end itemize + + + diff --git a/Documentation/contributor/regressions.itexi b/Documentation/contributor/regressions.itexi new file mode 100644 index 0000000000..3ec39d49cf --- /dev/null +++ b/Documentation/contributor/regressions.itexi @@ -0,0 +1,455 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Regression tests +@chapter Regression tests + +@menu +* Introduction to regression tests:: +* Precompiled regression tests:: +* Compiling regression tests:: +* Regtest comparison:: +* Finding the cause of a regression:: +* Memory and coverage tests:: +* MusicXML tests:: +@end menu + + +@node Introduction to regression tests +@section Introduction to regression tests + +LilyPond has a complete suite of regression tests that are used +to ensure that changes to the code do not break existing behavior. +These regression tests comprise small LilyPond snippets that test +the functionality of each part of LilyPond. + +Regression tests are added when new functionality is added to +LilyPond. +We do not yet have a policy on when it is appropriate to add or +modify a regtest when bugs are fixed. Individual developers +should use their best judgement until this is clarified during the +@ref{Grand Organization Project (GOP)}. + +The regression tests are compiled using special @code{make} +targets. There are three primary uses for the regression +tests. First, successful completion of the regression tests means +that LilyPond has been properly built. Second, the output of the +regression tests can be manually checked to ensure that +the graphical output matches the description of the intended +output. Third, the regression test output from two different +versions of LilyPond can be automatically compared to identify +any differences. These differences should then be manually +checked to ensure that the differences are intended. + +Regression tests (@qq{regtests}) are available in precompiled form +as part of the documentation. Regtests can also be compiled +on any machine that has a properly configured LilyPond build +system. + + +@node Precompiled regression tests +@section Precompiled regression tests + +@subheading Regression test output + +As part of the release process, the regression tests are run +for every LilyPond release. Full regression test output is +available for every stable version and the most recent development +version. + +Regression test output is available in HTML and PDF format. Links +to the regression test output are available at the developer's +resources page for the version of interest. + +The latest stable version of the regtests is found at: + +@example +@uref{http://lilypond.org/doc/stable/input/regression/collated-files.html} +@end example + +The latest development version of the regtests is found at: + +@example +@uref{http://lilypond.org/doc/latest/input/regression/collated-files.html} +@end example + + +@subheading Regression test comparison + +Each time a new version is released, the regtests are +compiled and the output is automatically compared with the +output of the previous release. The result of these +comparisons is archived online: + +@example +@uref{http://lilypond.org/test/} +@end example + +Checking these pages is a very important task for the LilyPond project. +You are invited to report anything that looks broken, or any case +where the output quality is not on par with the previous release, +as described in @rweb{Bug reports}. + +@warning{ The special regression test +@file{test-output-distance.ly} will always show up as a +regression. This test changes each time it is run, and serves to +verify that the regression tests have, in fact, run.} + + +@subheading What to look for + +The test comparison shows all of the changes that occurred between +the current release and the prior release. Each test that has a +significant difference in output is displayed, with the old +version on the left and the new version on the right. + +Regression tests whose output is the same for both versions are +not shown in the test comparison. + +@itemize +@item +Images: green blurs in the new version show the approximate +location of elements in the old version. + +There are often minor adjustments in spacing which do not indicate +any problem. + +@item +Log files: show the difference in command-line output. + +The main thing to examine are any changes in page counts -- if a +file used to fit on 1 page but now requires 4 or 5 pages, +something is suspicious! + +@item +Profile files: give information about +TODO? I don't know what they're for. + +@end itemize + +@warning{ +The automatic comparison of the regtests checks the LilyPond +bounding boxes. This means that Ghostscript changes and changes +in lyrics or text are not found. +} + +@node Compiling regression tests +@section Compiling regression tests + +Developers may wish to see the output of the complete regression +test suite for the current version of the source repository +between releases. Current source code is available; see +@ref{Working with source code}. Then you will need +to build the LilyPond binary; see @ref{Compiling LilyPond}. + +Uninstalling the previous LilyPond version is not necessary, nor is +running @code{make install}, since the tests will automatically be +compiled with the LilyPond binary you have just built in your source +directory. + +From this point, the regtests are compiled with: + +@example +make test +@end example + +If you have a multi-core machine you may want to use the @option{-j} +option and @var{CPU_COUT} variable, as +described in @ref{Saving time with CPU_COUNT}. +For a quad-core processor the complete command would be: + +@example +make -j5 CPU_COUNT=5 test +@end example + +The regtest output will then be available in +@file{input/regression/out-test}. +@file{input/regression/out-test/collated-examples.html} +contains a listing of all the regression tests that were run, +but none of the images are included. Individual images are +also available in this directory. + +The primary use of @samp{make@tie{}test} is to verify that the +regression tests all run without error. The regression test +page that is part of the documentation is created only when the +documentation is built, as described in @ref{Generating documentation}. +Note that building the documentation requires more installed components +than building the source code, as described in +@ref{Requirements for building documentation}. + + +@node Regtest comparison +@section Regtest comparison + +Before modified code is committed to master, a regression test +comparison must be completed to ensure that the changes have +not caused problems with previously working code. The comparison +is made automatically upon compiling the regression test suite +twice. + +@enumerate + +@item +Before making changes, a baseline should be established by +running: + +@example +make test-baseline +@end example + +@item +Make your changes, or apply the patch(es) to consider. + +@item +Compile the source with @samp{make} as usual. + +@item +Check for unintentional changes to the regtests: + +@example +make check +@end example + +After this has finished, a regression test comparison will be +available at: + +@example +out/test-results/index.html +@end example + +For each regression test that differs between the baseline and the +changed code, a regression test entry will displayed. Ideally, +the only changes would be the changes that you were working on. +If regressions are introduced, they must be fixed before +committing the code. + +@warning{ +The special regression test @file{test-output-distance.ly} will always +show up as a regression. This test changes each time it is run, and +serves to verify that the regression tests have, in fact, run.} + +@item +If you are happy with the results, then stop now. + +If you want to continue programming, then make any additional code +changes, and continue. + +@item +Compile the source with @samp{make} as usual. + +@item +To re-check files that differed between the initial +@samp{make@tie{}test-baseline} and your post-changes +@samp{make@tie{}check}, run: + +@example +make test-redo +@end example + +This updates the regression list at @file{out/test-results/index.html}. +It does @emph{not} redo @file{test-output-distance.ly}. + +@item +When all regressions have been resolved, the output list will be empty. + +@item +Once all regressions have been resolved, a final check should be completed +by running: + +@example +make test-clean +make check +@end example + +This cleans the results of the previous @samp{make@tie{}check}, then does the +automatic regression comparison again. + +@end enumerate + + +@node Finding the cause of a regression +@section Finding the cause of a regression + +Git has special functionality to help tracking down the exact +commit which causes a problem. See the git manual page for +@code{git bisect}. This is a job that non-programmers can do, +although it requires familiarity with git, ability to compile +LilyPond, and generally a fair amount of technical knowledge. A +brief summary is given below, but you may need to consult other +documentation for in-depth explanations. + +Even if you are not familiar with git or are not able to compile +LilyPond you can still help to narrow down the cause of a +regression simply by downloading the binary releases of different +LilyPond versions and testing them for the regression. Knowing +which version of LilyPond first exhibited the regression is +helpful to a developer as it shortens the @code{git bisect} +procedure. + +Once a problematic commit is identified, the programmers' job is +much easier. In fact, for most regression bugs, the majority of +the time is spent simply finding the problematic commit. + +More information is in @ref{Regression tests}. + +@subheading git bisect setup + +We need to set up the bisect for each problem we want to +investigate. + +Suppose we have an input file which compiled in version 2.13.32, +but fails in version 2.13.38 and above. + +@enumerate +@item +Begin the process: + +@example +git bisect start +@end example + +@item +Give it the earliest known bad tag: + +@example +git bisect bad release/2.13.38-1 +@end example + +(you can see tags with: @code{git tag} ) + +@item +Give it the latest known good tag: + +@example +git bisect good release/2.13.32-1 +@end example + +You should now see something like: +@example +Bisecting: 195 revisions left to test after this (roughly 8 steps) +[b17e2f3d7a5853a30f7d5a3cdc6b5079e77a3d2a] Web: Announcement +update for the new @qq{LilyPond Report}. +@end example + +@end enumerate + +@subheading git bisect actual + +@enumerate + +@item +Compile the source: + +@example +make +@end example + +@item +Test your input file: + +@example +out/bin/lilypond test.ly +@end example + +@item +Test results? + +@itemize +@item +Does it crash, or is the output bad? If so: + +@example +git bisect bad +@end example + +@item +Does your input file produce good output? If so: + +@example +git bisect good +@end example + +@end itemize + +@item +Once the exact problem commit has been identified, git will inform +you with a message like: + +@example +6d28aebbaaab1be9961a00bf15a1ef93acb91e30 is the first bad commit +%%% ... blah blah blah ... +@end example + +If there is still a range of commits, then git will automatically +select a new version for you to test. Go to step #1. + +@end enumerate + +@subheading Recommendation: use two terminal windows + +@itemize +@item +One window is open to the @code{build/} directory, and alternates +between these commands: + +@example +make +out/bin/lilypond test.ly +@end example + +@item +One window is open to the top source directory, and alternates +between these commands: + +@example +git bisect good +git bisect bad +@end example + +@end itemize + + +@node Memory and coverage tests +@section Memory and coverage tests + +In addition to the graphical output of the regression tests, it is +possible to test memory usage and to determine how much of the source +code has been exercised by the tests. + +@subheading Memory usage + +For tracking memory usage as part of this test, you will need +GUILE CVS; especially the following patch: +@uref{http://www.lilypond.org/vc/old/gub.darcs/patches/guile-1.9-gcstats.patch}. + +@subheading Code coverage + +For checking the coverage of the test suite, do the following + +@example +./scripts/auxiliar/build-coverage.sh +@emph{# uncovered files, least covered first} +./scripts/auxiliar/coverage.py --summary out-cov/*.cc +@emph{# consecutive uncovered lines, longest first} +./scripts/auxiliar/coverage.py --uncovered out-cov/*.cc +@end example + + +@node MusicXML tests +@section MusicXML tests + + +LilyPond comes with a complete set of regtests for the +@uref{http://www.musicxml.org/,MusicXML} language. Originally +developed to test @samp{musicxml2ly}, these regression tests +can be used to test any MusicXML implementation. + +The MusicXML regression tests are found at +@file{input/regression/musicxml/}. + +The output resulting from running these tests +through @samp{muscxml2ly} followed by @samp{lilypond} is +available in the LilyPond documentation: + +@example +@uref{http://lilypond.org/doc/latest/input/regression/musicxml/collated-files} +@end example + diff --git a/Documentation/contributor/release-work.itexi b/Documentation/contributor/release-work.itexi new file mode 100644 index 0000000000..92cd87ab67 --- /dev/null +++ b/Documentation/contributor/release-work.itexi @@ -0,0 +1,471 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Release work +@chapter Release work + +@menu +* Development phases:: +* Minor release checklist:: +* Major release checklist:: +* Release extra notes:: +@end menu + + +@node Development phases +@section Development phases + +There are 2 states of development on @code{master}: + +@enumerate + +@item @strong{Normal development}: +Any commits are fine. + +@item @strong{Build-frozen}: +Do not require any additional or updated libraries or make +non-trivial changes to the build process. Any such patch (or +branch) may not be merged with master during this period. + +This should occur approximately 1 month before any alpha version +of the next stable release, and ends when the next unstable branch +begins. + +@end enumerate + + +After announcing a beta release, branch @code{stable/2.x}. There +are 2 states of development for this branch: + +@enumerate +@item @strong{Normal maintenance}: +The following patches @strong{MAY NOT} be merged with this branch: + +@itemize +@item Any change to the input syntax. If a file compiled with a +previous @code{2.x} (beta) version, then it must compile in the +new version. + +Exception: any bugfix to a Critical issue. + +@item New features with new syntax @emph{may be committed}, +although once committed that syntax cannot change during the +remainder of the stable phase. + +@item Any change to the build dependencies (including programming +libraries, documentation process programs, or python modules used +in the buildscripts). If a contributor could compile a previous +lilypond @code{2.x}, then he must be able to compile the new +version. + +@end itemize + +@item @strong{Release prep}: +Only translation updates and important bugfixes are allowed. + +@end enumerate + + +@node Minor release checklist +@section Minor release checklist + +A @qq{minor release} means an update of @code{y} in @code{2.x.y}. + +@subheading Pre-release + +@enumerate + +@item +Switch to the release branch, get changes, prep release +announcement: + +@example +git checkout release/unstable +git merge origin +vi Documentation/web/news-front.itexi Documentation/web/news.itexi +@end example + +@item +Commit, push, switch back to master: + +@example +git commit -m "Release: update news." Documentation/web/ +git push origin +@end example + +@item +If you do not have the previous release test-output tarball, download +it and put it in @code{regtests/} + +@item Build release on GUB by running: + +@example +make LILYPOND_BRANCH=release/unstable lilypond +@end example + +@noindent +or something like: + +@example +make LILYPOND_BRANCH=stable/2.12 lilypond +@end example + +@item Check the regtest comparison in @file{uploads/webtest/} for +any unintentional breakage. More info in +@ref{Precompiled regression tests}. + +@item If any work was done on GUB since the last release, upload +binaries to a temporary location, ask for feedback, and wait a day +or two in case there's any major problems. + +@warning{Always do this for a stable release.} + +@end enumerate + + +@subheading Actual release + +@enumerate + +@item If you're not the right user on the webserver, remove the +@code{t} from the rsync command in: + +@example +test-lily/rsync-lily-doc.py +test-lily/rsync-test.py +@end example + +@code{graham} owns v2.13; @code{han-wen} owns v2.12. + +@item Upload GUB by running: + +@example +make lilypond-upload \ + LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \ + LILYPOND_BRANCH=release/unstable +@end example + +@noindent +or something like: + +@example +make lilypond-upload \ + LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \ + LILYPOND_BRANCH=stable/2.12 +@end example + +@end enumerate + + +@subheading Post release + +@enumerate + +@item Switch back to master and get the updated news: + +@example +git checkout master +git merge release/unstable +@end example + +@item Update @file{VERSION} in lilypond git and upload changes: + +@example +vi VERSION +@end example + +@itemize +@item +VERSION = what you just did +0.0.1 + +@item +DEVEL_VERSION = what you just did (i.e. is now online) + +@item +STABLE_VERSION = what's online (probably no change here) + +@end itemize + +@example +git commit -m "Release: bump version." VERSION +git push origin +@end example + + +@item (for now) do a @code{make doc} and manually upload: + +@example +### upload-lily-web-media.sh +#!/bin/sh +BUILD_DIR=$HOME/src/build-lilypond + +PICS=$BUILD_DIR/Documentation/pictures/out-www/ +EXAMPLES=$BUILD_DIR/Documentation/web/ly-examples/out-www/ + +cd $BUILD_DIR +rsync -a $PICS graham@@lilypond.org:media/pictures +rsync -a $EXAMPLES graham@@lilypond.org:media/ly-examples +@end example + +@item Wait a few hours for the website to update. + +@item Email release notice to @code{info-lilypond} + +@end enumerate + + + +@node Major release checklist +@section Major release checklist + +A @qq{major release} means an update of @code{x} in @code{2.x.0}. + +@subheading Main requirements + +This is the current official guidelines. + +@itemize +@item +0 Critical issues for two weeks (14 days) after the latest release +candidate. + +@end itemize + + +@subheading Potential requirements + +These might become official guidelines in the future. + +@itemize +@item +Check reg test + +@item +Check all 2ly scripts + +@item +Check for emergencies the docs: + +@example +grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \ + --exclude "snippets/*" ????*/* +@end example + +@item +Check for altered regtests, and document as necessary. (update +numbers in the following command as appropriate) + +@example +git diff -u -r release/2.12.0-1 -r release/2.13.13-1 input/regression/ +@end example + +@end itemize + + +@subheading Housekeeping requirements + +Before the release: + +@itemize +@item +write release notes. note: stringent size requirements for +various websites, so be brief. + +@item +Run convert-ly on all files, bump parser minimum version. + +@item +Make FTP directories on lilypond.org + +@item +Website: + +@itemize +@item +make a link from the old unstable to the next stable in +lilypond.org's /doc/ dir. Keep all previous unstable->stable doc +symlinks. + +Also, make the old docs self-contained -- if there's a redirect in +/doc/v2.12/Documentation/index.html , replace it with the +index.html.old-2.12 files. + +The post-2.13 docs will need another way of handling the +self-containment. It won't be hard to whip up a python script +that changes the link to ../../../../manuals.html to +../website/manuals.html , but it's still a 30-minute task that +needs to be done before 2.16. + +@item +doc auto redirects to v2.LATEST-STABLE + +@item +add these two lines to http://www.lilypond.org/robots.txt: + +@example +Disallow: /doc/v2.PREVIOUS-STABLE/ +Disallow: /doc/v2.CURRENT-DEVELOPMENT/ +@end example + +@end itemize + +@end itemize + +@subheading Unsorted + +@itemize +@item +submit pots for translation: send url of tarball to +translation@@iro.umontreal.ca, mentioning lilypond-VERSION.pot + +@item +update links to distros providing lilypond packages? link in: +@file{Documentation/web/download.itexi} + +This has nothing to do with the release, but it's a "periodic +maintenance" task that might make sense to include with releases. + +@item +Send announcements to... + +News: + +@example +comp.music.research +comp.os.linux.announce + +comp.text.tex +rec.music.compose +@end example + +Mail: + +@example +info-lilypond@@gnu.org + +linux-audio-announce@@lists.linuxaudio.org +linux-audio-user@@lists.linuxaudio.org +linux-audio-dev@@lists.linuxaudio.org + +tex-music@@icking-music-archive.org + +--- non-existant? +abcusers@@blackmill.net + +rosegarden-user@@lists.sourceforge.net +info-gnu@@gnu.org +noteedit-user@@berlios.de + +gmane.comp.audio.fomus.devel +gmane.linux.audio.users +gmane.linux.audio.announce +gmane.comp.audio.rosegarden.devel +@end example + +Web: + +@example +lilypond.org +freshmeat.net +linuxfr.com +http://www.apple.com/downloads +harmony-central.com (news@@harmony-central.com) +versiontracker.com [auto] +hitsquad.com [auto] +http://www.svgx.org +https://savannah.gnu.org/news/submit.php?group_id=1673 @c => planet.gnu.org +@end example + +@end itemize + + +@node Release extra notes +@section Release extra notes + +@subsubheading Regenerating regression tests + +Regenerating regtests (if the lilypond-book naming has changed): + +@itemize + +@item +git checkout release/lilypond-X.Y.Z-A + +@item +take lilypond-book and any related makefile updates from the +latest git. + +@item +configure; make; make test + +@item +tar -cjf lilypond-X.Y.Z-A.test-output.tar.bz2 input/regression/out-test/ + +@item +mv lilypond-X.Y.Z-A.test-output.tar.bz2 ../gub/regtests/ + +@item +cd ../gub/regtests/ + +@item +make lilypond + +@end itemize + + +@subsubheading stable/2.12 + +If releasing stable/2.12, then: + +@itemize + +@item +apply doc patch: patches/rsync-lily.patch (or something like +that) + +@item +change infodir in gub/specs/lilypond-doc.py from "lilypond.info" +to "lilypond-web.info" +@end itemize + +@subsubheading Updating a release (changing a in x.y.z-a) + +Really tentative instructions, almost certainly can be done +better. + +@enumerate + +@item +change the VERSION back to release you want. push change. +(hopefully you'll have forgotten to update it when you made your +last release) + +@item +make sure that there aren't any lilypond files floating around in +target/ (like usr/bin/lilypond). + +@item +build the specific package(s) you want, i.e. + +@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' +@end example + +or + +build everything with the normal "make lilypond", then (maybe) +manually delete stuff you don't want to upload. + +@item +manually upload them. good luck figuring out the rsync +command(s). Hints are in test-lily/ + +or + +run the normal lilypond-upload command, and (maybe) manually +delete stuff you didn't want to upload from the server. + +@end enumerate + + + diff --git a/Documentation/contributor/source-code.itexi b/Documentation/contributor/source-code.itexi new file mode 100644 index 0000000000..79833e13d9 --- /dev/null +++ b/Documentation/contributor/source-code.itexi @@ -0,0 +1,2017 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + + +@node Working with source code +@chapter Working with source code + +@warning{New contributors should read @ref{Quick start}, and in +particular @ref{Using lily-git}, instead of this chapter.} + +Advanced contributors will find this material quite useful, +particularly if they are working on major new features. + +@menu +* Manually installing lily-git.tcl:: +* Starting with Git:: +* Basic Git procedures:: +* Advanced Git procedures:: +* Git on Windows:: +* Repository directory structure:: +* Other Git documentation:: +@end menu + + +@node Manually installing lily-git.tcl +@section Manually installing lily-git.tcl + +We have created an easy-to-use GUI to simplify git for new +contributors. If you are comfortable with the command-line, then +skip ahead to @ref{Starting with Git}. + +@warning{These instructions are only for people who are @emph{not} +using @ref{Lilydev}.} + +@c there's some duplication in this section with stuff covered in +@c Quick Start, but moving it into a macro inside included/ would +@c be getting a bit icky. -gp + +@enumerate +@item +If you haven't already, download and install Git. + +@itemize + +@item Windows users: download the @code{.exe} file labeled +@qq{Full installer for official Git} from: + +@example +@uref{http://code.google.com/p/msysgit/downloads/list} +@end example + +@item Other operating systems: either install @command{git} with +your package manager, or download it from the @qq{Binaries} +section of: + +@example +@uref{http://git-scm.com/download} +@end example + +@end itemize + + +@item +Download the @command{lily-git.tcl} script from: + +@c don't change the cgit link below to gitweb; gitweb uses +@c long filenames like "scripts_auxiliar_lily-git.tcl" + +@example +@uref{http://git.sv.gnu.org/cgit/lilypond.git/plain/scripts/auxiliar/lily-git.tcl} +@end example + +@item +To run the program from the command line, navigate to the +directory containing @command{lily-git.tcl} and enter: + +@example +wish lily-git.tcl +@end example + +@item +Click on the @qq{Get source} button. + +This will create a directory called @file{lilypond-git/} within +your home directory, and will download the source code into that +directory (around 55Mb). When the process is finished, the +@qq{Command output} window will display @qq{Done}, and the button +label will change to say @qq{Update source}. + +@item +Navigate to the @file{lilypond-git/} directory to view the source +files. + +@end enumerate + +@warning{Throughout the rest of this manual, most command-line +input should be entered from @file{~/lilypond-git/}. This is +referred to as the @emph{top source directory}.} + +Further instructions are in @ref{Daily use of lily-git.tcl}. + +@advanced{the @qq{Get source} button does not fetch the entire +history of the git repository, so utilities like @command{gitk} +will only be able to display the most recent additions. As you +continue to work with @command{lily-git.tcl}, the @qq{Update +source} button will take any new additions and add it to whatever +is currently in your repository's history.} + + +@node Starting with Git +@section Starting with Git + +Using the Git program directly (as opposed to using the +@command{lily-git.tcl} GUI) allows you to have much greater control +over the contributing process. You should consider using Git if +you want to work on complex projects, or if you want to work on +multiple projects concurrently. + + +@menu +* Setting up:: +* Downloading remote branches:: +@end menu + + +@node Setting up +@subsection Setting up + + +TODO: Remove this note if incorporating Windows instructions +throughout this section: + +@warning{These instructions assume that you are using the +command-line version of Git 1.5 or higher. Windows users should +skip to @ref{Git on Windows}.} + +@menu +* Installing Git:: +* Initializing a repository:: +* Configuring Git:: +@end menu + + +@node Installing Git +@unnumberedsubsubsec Installing Git + + +If you are using a Unix-based machine, the easiest way to download +and install Git is through a package manager such as @command{rpm} +or @command{apt-get}---the installation is generally automatic. +The only required package is (usually) called @command{git-core}, +although some of the auxiliary @command{git@var{*}} packages are +also useful (such as @command{gitk}). + +Alternatively, you can visit the Git website +(@uref{http://git-scm.com/}) for downloadable binaries and +tarballs. + +TODO: add Windows installation instructions (or @@ref@{Git on +Windows@}). + + +@node Initializing a repository +@unnumberedsubsubsec Initializing a repository + + +Once Git is installed, you'll need to create a new directory where +your initial repository will be stored (the example below uses +@file{~/lilypond-git/}, where @code{~} represents your home +directory). Run @command{git@tie{}init} from within the new +directory to initialize an empty repository: + +@example +mkdir ~/lilypond-git/; cd ~/lilypond-git/ +git init +@end example + +@subsubheading Technical details + +This creates (within the @file{~/lilypond-git/} directory) a +subdirectory called @file{.git/}, which Git uses to keep track of +changes to the repository, among other things. Normally you don't +need to access it, but it's good to know it's there. + + +@node Configuring Git +@unnumberedsubsubsec Configuring Git + +@warning{Throughout the rest of this manual, all command-line +input should be entered from the top directory of the Git +repository being discussed (eg. @file{~/lilypond-git/}). This is +referred to as the @emph{top source directory}.} + +Before downloading a copy of the main LilyPond repository, you +should configure some basic settings with the +@command{git@tie{}config} command. Git allows you to set both +global and repository-specific options. + +To configure settings that affect all repositories, use the +@command{--global} command line option. For example, the first +two options that you should always set are your @var{name} and +@var{email}, since Git needs these to keep track of commit +authors: + +@example +git config --global user.name "@var{John Smith}" +git config --global user.email @var{john@@example.com} +@end example + +To configure Git to use colored output where possible, use: + +@example +git config --global color.ui auto +@end example + +The text editor that opens when using @command{git@tie{}commit} +can also be changed. If none of your editor-related environment +variables are set ($GIT_EDITOR, $VISUAL, or $EDITOR), the default +editor is usually @command{vi} or @command{vim}. If you're not +familiar with either of these, you should probably change the +default to an editor that you know how to use. For example, to +change the default editor to @command{nano}, enter: + +@example +git config --global core.editor @var{nano} +@end example + +TODO: Add instructions for changing the editor on Windows, which +is a little different, I think. -mp + +@subsubheading Technical details + +Git stores the information entered with +@command{git@tie{}config@tie{}--global} in the file +@file{.gitconfig}, located in your home directory. This file can +also be modified directly, without using +@command{git@tie{}config}. The @file{.gitconfig} file generated +by the above commands would look like this: + +@example +[user] + name = John Smith + email = john@@example.com +[color] + ui = auto +[core] + editor = nano +@end example + +Using the @command{git@tie{}config} command @emph{without} the +@command{--global} option configures repository-specific settings, +which are stored in the file @file{.git/config}. This file is +created when a repository is initialized (using +@command{git@tie{}init}), and by default contains these lines: + +@example +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +@end example + +However, since different repository-specific options are +recommended for different development tasks, it is best to avoid +setting any now. Specific recommendations will be mentioned later +in this manual. + + +@node Downloading remote branches +@subsection Downloading remote branches + + +@menu +* Organization of remote branches:: +* LilyPond repository sources:: +* Downloading individual branches:: +* Downloading all remote branches:: +* Other branches:: +@end menu + + +@node Organization of remote branches +@unnumberedsubsubsec Organization of remote branches + + +The main LilyPond repository is organized into @emph{branches} to +facilitate development. These are often called @emph{remote} +branches to distinguish them from @emph{local} branches you might +create yourself (see @ref{Using local branches}). + +The @code{master} branch contains all the source files used to +build LilyPond, which includes the program itself (both stable and +development releases), the documentation (and its translations), +and the website. Generally, the @code{master} branch is expected +to compile successfully. + +The @code{lilypond/translation} branch is a side branch that +allows translators to work without needing to worry about +compilation problems. Periodically, the Translation Meister +(after verifying that it doesn't break compilation), will +@emph{merge} this branch back into @code{master} to incorporate +recent translations. Similarly, the @code{master} branch is +usually merged into the @code{lilypond/translation} branch after +significant changes to the English documentation. See +@ref{Translating the documentation} for details. + + +@node LilyPond repository sources +@unnumberedsubsubsec LilyPond repository sources + + +The recommended source for downloading a copy of the main +repository is: + +@example +git://git.sv.gnu.org/lilypond.git +@end example + +However, if your internet router filters out connections using the +GIT protocol, or if you experience difficulty connecting via GIT, +you can try these other sources: + +@example +ssh://git.sv.gnu.org/srv/git/lilypond.git +http://git.sv.gnu.org/r/lilypond.git +@end example + +The SSH protocol can only be used if your system is properly set +up to use it. Also, the HTTP protocol is slowest, so it should +only be used as a last resort. + + +@node Downloading individual branches +@unnumberedsubsubsec Downloading individual branches + + +Once you have initialized an empty Git repository on your system +(see @ref{Initializing a repository}), you can download a remote +branch into it. Make sure you know which branch you want to start +with. + +To download the @code{master} branch, enter the following: + +@example +git remote add -ft master -m master \ + origin git://git.sv.gnu.org/lilypond.git/ +@end example + +To download the @code{lilypond/translation} branch, enter: + +@example +git remote add -ft lilypond/translation -m \ + lilypond/translation origin git://git.sv.gnu.org/lilypond.git/ +@end example + +The @command{git@tie{}remote@tie{}add} process could take up to +ten minutes, depending on the speed of your connection. The +output will be something like this: + +@example +Updating origin +remote: Counting objects: 235967, done. +remote: Compressing objects: 100% (42721/42721), done. +remote: Total 235967 (delta 195098), reused 233311 (delta 192772) +Receiving objects: 100% (235967/235967), 68.37 MiB | 479 KiB/s, done. +Resolving deltas: 100% (195098/195098), done. +From git://git.sv.gnu.org/lilypond + * [new branch] master -> origin/master +From git://git.sv.gnu.org/lilypond + * [new tag] flower/1.0.1 -> flower/1.0.1 + * [new tag] flower/1.0.10 -> flower/1.0.10 +⋮ + * [new tag] release/2.9.6 -> release/2.9.6 + * [new tag] release/2.9.7 -> release/2.9.7 +@end example + +When @command{git@tie{}remote@tie{}add} is finished, the remote +branch should be downloaded into your repository---though not yet +in a form that you can use. In order to browse the source code +files, you need to @emph{create} and @emph{checkout} your own +local branch. In this case, however, it is easier to have Git +create the branch automatically by using the @command{checkout} +command on a non-existent branch. Enter the following: + +@example +git checkout -b @var{branch} origin/@var{branch} +@end example + +@noindent +where @code{@var{branch}} is the name of your tracking branch, +either @code{master} or @code{lilypond/translation}. + +Git will issue some warnings; this is normal: + +@example +warning: You appear to be on a branch yet to be born. +warning: Forcing checkout of origin/master. +Branch master set up to track remote branch master from origin. +Already on 'master' +@end example + +By now the source files should be accessible---you should be able +to edit any files in the @file{lilypond-git/} directory using a +text editor of your choice. But don't start just yet! Before +editing any source files, learn how to keep your changes organized +and prevent problems later---read @ref{Basic Git procedures}. + +@subsubheading Technical Details + +The @command{git@tie{}remote@tie{}add} command should add some +lines to your local repository's @file{.git/config} file: + +@example +[remote "origin"] + url = git://git.sv.gnu.org/lilypond.git/ + fetch = +refs/heads/master:refs/remotes/origin/master +@end example + + +@node Downloading all remote branches +@unnumberedsubsubsec Downloading all remote branches + + +To download all remote branches at once, you can @command{clone} +the entire repository: + +@example +git clone git://git.sv.gnu.org/lilypond.git +@end example + + +@node Other branches +@unnumberedsubsubsec Other branches + +Most contributors will never need to touch the other branches. If +you wish to do so, you will need more familiarity with Git; please +see @ref{Other Git documentation}. + +@itemize +@item @code{dev/XYZ}: +These branches are for individual developers. They store code +which is not yet stable enough to be added to the @code{master} +branch. + +@item @code{stable/XYZ}: +The branches are kept for archival reasons. + +@end itemize + +Another item of interest might be the Grand Unified Builder, our +cross-platform building tool. Since it is used by projects as +well, it is not stored in our gub repository. For more info, see +@uref{http://lilypond.org/gub}. The git location is +@uref{http://github.com/janneke/gub}. + + +@node Basic Git procedures +@section Basic Git procedures + + +@menu +* The Git contributor's cycle:: +* Pulling and rebasing:: +* Using local branches:: +* Commits and patches:: +@end menu + + +@node The Git contributor's cycle +@subsection The Git contributor's cycle + + +Here is a simplified view of the contribution process on Git: + +@enumerate +@item +Update your local repository by @emph{pulling} the most recent +updates from the remote repository. + +@item +Edit source files within your local repository's @emph{working +directory}. + +@item +@emph{Commit} the changes you've made to a local @emph{branch}. + +@item +Generate a @emph{patch} to share your changes with the developers. +@end enumerate + + +@node Pulling and rebasing +@subsection Pulling and rebasing + + +When developers push new patches to the @code{git.sv.gnu.org} +repository, your local repository is @strong{not} automatically +updated. It is important to keep your repository up-to-date by +periodically @emph{pulling} the most recent @emph{commits} from +the remote branch. Developers expect patches to be as current as +possible, since outdated patches require extra work before they +can be used. + +Occasionally you may need to rework some of your own modifications +to match changes made to the remote branch (see @ref{Resolving +conflicts}), and it's considerably easier to rework things +incrementally. If you don't update your repository along the way, +you may have to spend a lot of time resolving branch conflicts and +reconfiguring much of the work you've already done. + +Fortunately, Git is able to resolve certain types of branch +conflicts automatically with a process called @emph{rebasing}. +When rebasing, Git tries to modify your old commits so they appear +as new commits (based on the latest updates). For a more involved +explanation, see the @command{git-rebase} man page. + +To pull without rebasing (recommended for translators), use the +following command: + +@example +git pull # recommended for translators +@end example + +If you're tracking the remote @code{master} branch, you should add +the @code{-r} option (short for @code{--rebase}) to keep commits +on your local branch current: + +@example +git pull -r # use with caution when translating +@end example + +If you don't edit translated documentation and don't want to type +@code{-r} every time, configure the master branch to rebase by +default with this command: + +@example +git config branch.master.rebase true +@end example + +If pull fails because of a message like + +@example +error: Your local changes to 'Documentation/learning/tutorial.itely' +would be overwritten by merge. Aborting. +@end example + +@noindent +or + +@example +Documentation/learning/tutorial.itely: needs update +refusing to pull with rebase: your working tree is not up-to-date +@end example + +@noindent +it means that you have modified some files in you working tree +without committing changes (see @ref{Commits and patches}); you +can use the @command{git@tie{}stash} command to work around this: + +@example +git stash # save uncommitted changes +git pull -r # pull using rebase (translators omit "-r") +git stash pop # reapply previously saved changes +@end example + +Note that @command{git@tie{}stash@tie{}pop} will try to apply a +patch, and this may create a conflict. If this happens, see +@ref{Resolving conflicts}. + +TODO: I think the next paragraph is confusing. Perhaps prepare +the reader for new terms `committish' and `head'? -mp + +@warning{translators and documentation editors, if you have +changed committishes in the head of translated files using commits +you have not yet pushed to @code{git.sv.gnu.org}, please do not +rebase. If you want to avoid wondering whether you should rebase +each time you pull, please always use committishes from master +and/or lilypond/translation branch on @code{git.sv.gnu.org}, which +in particular implies that you must push your changes to +documentation except committishes updates (possibly after having +rebased), then update the committishes and push them.} + +TODO: when committishes automatic conditional update have been +tested and documented, append the following to the warning above: +Note that using update-committishes make target generally touches +committishes. + +@subsubheading Technical details + +The @command{git@tie{}config} command mentioned above adds the +line @code{rebase = true} to the master branch in your local +repository's @file{.git/config} file: + +@example +[branch "master"] + remote = origin + merge = refs/heads/master + rebase = true +@end example + + +@node Using local branches +@subsection Using local branches + + +@menu +* Creating and removing branches:: +* Listing branches and remotes:: +* Checking out branches:: +* Merging branches:: +@end menu + + +@node Creating and removing branches +@unnumberedsubsubsec Creating and removing branches + + +Local branches are useful when you're working on several different +projects concurrently. To create a new branch, enter: + +@example +git branch @var{name} +@end example + +To delete a branch, enter: + +@example +git branch -d @var{name} +@end example + +Git will ask you for confirmation if it sees that data would be +lost by deleting the branch. Use @code{-D} instead of @code{-d} +to bypass this. Note that you cannot delete a branch if it is +currently checked out. + + +@node Listing branches and remotes +@unnumberedsubsubsec Listing branches and remotes + +You can get the exact path or URL of all remote branches by +running: + +@example +git remote -v +@end example + +To list Git branches on your local repositories, run + +@example +git branch # list local branches only +git branch -r # list remote branches +git branch -a # list all branches +@end example + + +@node Checking out branches +@unnumberedsubsubsec Checking out branches + +To know the currently checked out branch, i.e. the branch whose +source files are present in your working tree, read the first line +of the output of + +@example +git status +@end example + +@noindent +The currently checked out branch is also marked with an asterisk +in the output of @command{git branch}. + +You can check out another branch @code{@var{other_branch}}, i.e. +check out @code{@var{other_branch}} to the working tree, by +running + +@example +git checkout @var{other_branch} +@end example + +Note that it is possible to check out another branch while having +uncommitted changes, but it is not recommended unless you know +what you are doing; it is recommended to run @command{git status} +to check this kind of issue before checking out another branch. + +@node Merging branches +@unnumberedsubsubsec Merging branches + +To merge branch @code{@var{foo}} into branch @code{@var{bar}}, +i.e. to @qq{add} all changes made in branch @code{@var{foo}} to +branch @code{@var{bar}}, run + +@example +git checkout @var{bar} +git merge @var{foo} +@end example + +If any conflict happens, see @ref{Resolving conflicts}. + +There are common usage cases for merging: as a translator, you +will often want to merge @code{master} into +@code{lilypond/translation}; on the other hand, the Translations +meister wants to merge @code{lilypond/translation} into +@code{master} whenever he has checked that +@code{lilypond/translation} builds successfully. + + +@node Commits and patches +@subsection Commits and patches + + +@menu +* Understanding commits:: +* Making commits:: +* Commit messages:: +* Making patches:: +* Uploading a patch for review:: +@end menu + + +@node Understanding commits +@unnumberedsubsubsec Understanding commits + +Technically, a @emph{commit} is a single point in the history of a +branch, but most developers use the term to mean a @emph{commit +object}, which stores information about a particular revision. A +single commit can record changes to multiple source files, and +typically represents one logical set of related changes (such as a +bug-fix). You can list the ten most recent commits in your +current branch with this command: + +@example +git log -10 --oneline +@end example + +If you're using an older version of Git and get an @q{unrecognized +argument} error, use this instead: + +@example +git log -10 --pretty=oneline --abbrev-commit +@end example + +More interactive lists of the commits on the remote @code{master} +branch are available at +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=shortlog} and +@uref{http://git.sv.gnu.org/cgit/lilypond.git/log/}. + + +@node Making commits +@unnumberedsubsubsec Making commits + + +Once you have modified some source files in your working +directory, you can make a commit with the following procedure: + +@enumerate +@item +Make sure you've configured Git properly (see @ref{Configuring +Git}). Check that your changes meet the requirements described in +@ref{Code style} and/or @ref{Documentation policy}. For advanced +edits, you may also want to verify that the changes don't break +the compilation process. + +@item +Run the following command: + +@example +git status +@end example + +@noindent +to make sure you're on the right branch, and to see which files +have been modified, added or removed, etc. You may need to tell +Git about any files you've added by running one of these: + +@example +git add @var{file} # add untracked @var{file} individually +git add . # add all untracked files in current directory +@end example + +@noindent +After @command{git@tie{}add}, run @command{git@tie{}status} again +to make sure you got everything. You may also need to modify +@file{GNUmakefile}. + +@item +Preview the changes about to be committed (to make sure everything +looks right) with: + +@example +git diff HEAD +@end example + +@noindent +The @code{HEAD} argument refers to the most recent commit on the +currently checked-out branch. + +@item +Generate the commit with: + +@example +git commit -a +@end example + +@noindent +The @code{-a} is short for @code{--all} which includes modified +and deleted files, but only those newly created files that have +previously been added. + +@end enumerate + + +@node Commit messages +@unnumberedsubsubsec Commit messages + + +When you run the @command{git@tie{}commit@tie{}-a} command, Git +automatically opens the default text editor so you can enter a +@emph{commit message}. If you find yourself in a foreign editing +environment, you're probably in @command{vi} or @command{vim}. If +you want to switch to an editor you're more familiar with, quit by +typing @code{:q!} and pressing @code{}. See +@ref{Configuring Git} for instructions on changing the default +editor. + +In any case, Git will open a text file for your commit message +that looks like this: + +@example + +# Please enter the commit message for your changes. Lines starting +# with '#' will be ignored, and an empty message aborts the commit. +# On branch master +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: working.itexi +# +@end example + +Your commit message should begin with a one-line summary +describing the change (no more than 50 characters long), and if +necessary a blank line followed by several lines giving the +details: + +@c $ git log -1 --pretty=medium 4d6f1e5 +@example +Doc: add Baerenreiter and Henle solo cello suites + +Added comparison of solo cello suite engravings to new essay with +high-res images, fixed cropping on Finale example. +@end example + +Commit messages often start with a short prefix describing the +general location of the changes. If a commit affects the +documentation in English (or in several languages simultaneously) +the commit message should be prefixed with @qq{Doc:@tie{}}. If +the commit affects only one of the translations, the commit +message should be prefixed with @qq{Doc-@var{**}:@tie{}}, where +@var{**} is the two-letter language code. Commits that affect the +website should use @qq{Web:@tie{}} for English, and +@qq{Web-@var{**}:@tie{}} for the other languages. Also, changes +to a single file are often prefixed with the name of the file +involved. Visit the links listed in @ref{Understanding commits} +for examples. + + +@node Making patches +@unnumberedsubsubsec Making patches + +If you want to share your changes with other contributors and +developers, you need to generate @emph{patches} from your commits. +We prefer it if you follow the instructions in +@ref{Uploading a patch for review}. However, we present an +alternate method here. + +You should always run @command{git@tie{}pull@tie{}-r} (translators +should leave off the @code{-r}) before doing this to ensure that +your patches are as current as possible. + +Once you have made one or more commits in your local repository, +and pulled the most recent commits from the remote branch, you can +generate patches from your local commits with the command: + +@example +git format-patch origin +@end example + +The @code{origin} argument refers to the remote tracking branch at +@code{git.sv.gnu.org}. This command generates a separate patch +for each commit that's in the current branch but not in the remote +branch. Patches are placed in the current working directory and +will have names that look something like this: + +@example +0001-Doc-Fix-typos.patch +0002-Web-Remove-dead-links.patch +⋮ +@end example + +Send an email (must be less than 64 KB) to +@email{lilypond-devel@@gnu.org} briefly explaining your work, with +the patch files attached. Translators should send patches to +@email{translations@@lilynet.net}. After your patches are +reviewed, the developers may push one or more of them to the main +repository or discuss them with you. + + +@node Uploading a patch for review +@unnumberedsubsubsec Uploading a patch for review + +Any non-trivial change should be uploaded to our @qq{Rietveld} +code review website: + +@example +@uref{http://codereview.appspot.com/} +@end example + +@subsubheading @command{git-cl} install + +LilyDev users should skip over these @q{install} instructions. + +@enumerate + +@item +Install @command{git-cl} by entering: + +@example +git clone git://neugierig.org/git-cl.git +@end example + +@item +Add the @file{git-cl/} directory to your PATH, or create a +symbolic link to the @command{git-cl} and @command{upload.py} +scripts in one of your PATH directories (such as +@file{$HOME/bin}). + +@end enumerate + +@subsubheading @command{git-cl} configuration + +LilyDev users should perform these @q{configuration} instructions. + +@enumerate +@item +You must have a gmail account; please create one if you do not +have one already. + +@item +Move into the top source directory and then configure @command{git +cl} with the following commands. If you do not understand any +question, just answer with a newline (CR). + +@example +cd $HOME/lilypond-git/ +git cl config +@end example + +The @qq{CC list} question should be answered with: + +@example +lilypond-devel@@gnu.org +@end example + +@end enumerate + +@subsubheading Uploading patch set + +@warning{Unless you are familiar with branches, only work on one +set of changes at once.} + +There are two methods, depending on your git setup. + +@itemize +@item +@strong{Master branch}: (easy option, and used in @command{lily-git.tcl}) + +If you added your patch to @code{master}, then: + +@example +git pull -r +git cl upload origin/master +@end example + +If you have git push ability, make sure that you @emph{remove} +your patch (with @command{git rebase} or @command{git reset}) +before pushing other stuff. + +@item +@strong{Separate branch}: (complicated option) + +Ensure your changes are committed in a separate branch, which +should differ from the reference branch to be used by just the +changes to be uploaded. If the reference branch is to be +origin/master, ensure this is up-to-date. If necessary, use git +rebase to rebase the branch containing the changes to the head of +origin/master. Finally, check out branch with the changes and +enter the command: + +@example +git cl upload +@end example + +@noindent +where is the SHA1 ID of the commit to be used +as a reference source for the patch. Generally, this will be the +SHA1 ID of origin/master, and in that case the command: + +@example +git cl upload origin/master +@end example + +@noindent +can be used. + +@end itemize + +After prompting for your Google email address and password, the +patch set will be posted to Rietveld, and you will be given a URL +for your patch. + +@warning{Some installations of git-cl fail when uploading a patch +set that includes a .scm file. When this happens, it can +generally be fixed by editing the file @file{/etc/mime.types}. +Add a line to this file containing @code{text/x-script.scheme scm}.} + +@subsubheading Announcing your patch set + +You should then announce the patch by logging into the code review +issue webpage and using @qq{Publish + Mail Comments} to add a +(mostly bogus) comment to your issue. The text of your comment +will be sent to our developer mailing list. + +@warning{There is no automatic notification of a new patch; you +must add a comment yourself.} + +@subsubheading Revisions + +As revisions are made in response to comments, successive patch sets +for the same issue can be uploaded by reissuing the git-cl command +with the modified branch checked out. + +Sometimes in response to comments on revisions, the best way to +work may require creation of a new branch in git. In order to +associate the new branch with an existing Rietveld issue, +the following command can be used: + +@example +git cl issue issue-number +@end example + +@noindent +where @code{issue-number} is the number of the existing Rietveld +issue. + +@subsubheading Resetting git cl + +If @command{git cl} becomes confused, you can @qq{reset} it by +running: + +@example +git cl issue 0 +@end example + + +@node Advanced Git procedures +@section Advanced Git procedures + + +@warning{This section is not necessary for normal contributors; +these commands are presented for information for people interested +in learning more about git.} + +It is possible to work with several branches on the same local Git +repository; this is especially useful for translators who may have +to deal with both @code{lilypond/translation} and a stable branch, +e.g. @code{stable/2.12}. + +Some Git commands are introduced first, then a workflow with +several Git branches of LilyPond source code is presented. + + +@menu +* Advanced Git concepts:: +* Resolving conflicts:: +* Reverting all local changes:: +* Working with remote branches:: +* Git log:: +* Applying remote patches:: +* Sending and receiving patches via email:: +* Cleaning up multiple patches:: +* Commit access:: +@end menu + + +@node Advanced Git concepts +@subsection Advanced Git concepts + + +A bit of Git vocabulary will be explained below. The following is +only introductory; for a better understanding of Git concepts, you +may wish to read @ref{Other Git documentation}. + +The @code{git@tie{}pull@tie{}origin} command above is just a +shortcut for this command: + +@example +git pull git://git.sv.gnu.org/lilypond.git/ @var{branch}:origin/@var{branch} +@end example + +@noindent +where @code{@var{branch}} is typically @code{master} or +@code{lilypond/translation}; if you do not know or remember, see +@ref{Downloading remote branches} to remember which commands you +issued or which source code you wanted to get. + +A @emph{commit} is a set of changes made to the sources; it also +includes the committish of the parent commit, the name and e-mail +of the @emph{author} (the person who wrote the changes), the name +and e-mail of the @emph{committer} (the person who brings these +changes into the Git repository), and a commit message. + +A @emph{committish} is the SHA1 checksum of a commit, a number +made of 40 hexadecimal digits, which acts as the internal unique +identifier for this commit. To refer to a particular revision, +don't use vague references like the (approximative) date, simply +copy and paste the committish. + +A @emph{branch} is nothing more than a pointer to a particular +commit, which is called the @emph{head} of the branch; when +referring to a branch, one often actually thinks about its head +and the ancestor commits of the head. + +Now we will explain the two last commands you used to get the +source code from Git---see @ref{Downloading individual branches}. + +@example +git remote add -ft @var{branch} -m @var{branch} \ + origin git://git.sv.gnu.org/lilypond.git/ + +git checkout -b @var{branch} origin/@var{branch} +@end example + +The @command{git@tie{}remote} has created a branch called +@code{origin/@var{branch}} in your local Git repository. As this +branch is a copy of the remote branch web from git.sv.gnu.org +LilyPond repository, it is called a @emph{remote branch}, and is +meant to track the changes on the branch from git.sv.gnu.org: it +will be updated every time you run +@command{git@tie{}pull@tie{}origin} or +@command{git@tie{}fetch@tie{}origin}. + +The @command{git@tie{}checkout} command has created a branch named +@code{@var{branch}}. At the beginning, this branch is identical +to @code{origin/@var{branch}}, but it will differ as soon as you +make changes, e.g. adding newly translated pages or editing some +documentation or code source file. Whenever you pull, you merge +the changes from @code{origin/@var{branch}} and +@code{@var{branch}} since the last pulling. If you do not have +push (i.e. @qq{write}) access on git.sv.gnu.org, your +@code{@var{branch}} will always differ from +@code{origin/@var{branch}}. In this case, remember that other +people working like you with the remote branch @code{@var{branch}} +of git://git.sv.gnu.org/lilypond.git/ (called +@code{origin/@var{branch}} on your local repository) know nothing +about your own @code{@var{branch}}: this means that whenever you +use a committish or make a patch, others expect you to take the +latest commit of @code{origin/@var{branch}} as a reference. + +Finally, please remember to read the man page of every Git command +you will find in this manual in case you want to discover +alternate methods or just understand how it works. + + +@node Resolving conflicts +@subsection Resolving conflicts + + +Occasionally an update may result in conflicts -- this happens +when you and somebody else have modified the same part of the same +file and git cannot figure out how to merge the two versions +together. When this happens, you must manually merge the two +versions. + +If you need some documentation to understand and resolve +conflicts, see paragraphs @emph{How conflicts are presented} and +@emph{How to resolve conflicts} in @command{git merge} man page. + +If all else fails, you can follow the instructions in +@ref{Reverting all local changes}. Be aware that this eliminates +any changes you have made! + + +@node Reverting all local changes +@subsection Reverting all local changes + +Sometimes git will become hopelessly confused, and you just want +to get back to a known, stable state. This command destroys any +local changes you have made, but at least you get back to the +current online version: + +@example +git reset --hard origin/master +@end example + + +@node Working with remote branches +@subsection Working with remote branches + + +@subsubheading Fetching new branches from git.sv.gnu.org + +To fetch and check out a new branch named @code{@var{branch}} on +git.sv.gnu.org, run from top of the Git repository + +@example +git config --add remote.origin.fetch \ + +refs/heads/@var{branch}:refs/remotes/origin/@var{branch} + +git checkout --track -b @var{branch} origin/@var{branch} +@end example + +After this, you can pull @code{@var{branch}} from git.sv.gnu.org +with: + +@example +git pull +@end example + +Note that this command generally fetches all branches you added +with @command{git@tie{}remote@tie{}add} (when you initialized the +repository) or @command{git@tie{}config@tie{}--add}, i.e. it +updates all remote branches from remote @code{origin}, then it +merges the remote branch tracked by the current branch into the +current branch. For example, if your current branch is +@code{master}, @code{origin/master} will be merged into +@code{master}. + + +@subsubheading Local clones, or having several working trees + +If you play with several Git branches, e.g. @code{master}, +@code{lilypond/translation}, @code{stable/2.12}), you may want to +have one source and build tree for each branch; this is possible +with subdirectories of your local Git repository, used as local +cloned subrepositories. To create a local clone for the branch +named @code{@var{branch}}, run + +@example +git checkout @var{branch} +git clone -lsn . @var{subdir} +cd @var{subdir} +git reset --hard +@end example + +Note that @code{@var{subdir}} must be a directory name which does +not already exist. In @code{@var{subdir}}, you can use all Git +commands to browse revisions history, commit and uncommit changes; +to update the cloned subrepository with changes made on the main +repository, cd into @code{@var{subdir}} and run +@command{git@tie{}pull}; to send changes made on the subrepository +back to the main repository, run @command{git@tie{}push} from +@code{@var{subdir}}. Note that only one branch (the currently +checked out branch) is created in the subrepository by default; it +is possible to have several branches in a subrepository and do +usual operations (checkout, merge, create, delete...) on these +branches, but this possibility is not detailed here. + +When you push @code{@var{branch}} from @code{@var{subdir}} to the +main repository, and @code{@var{branch}} is checked out in the +main repository, you must save uncommitted changes (see +@command{git@tie{}stash}) and do +@command{git@tie{}reset@tie{}--hard} in the main repository in +order to apply pushed changes in the working tree of the main +repository. + + +@node Git log +@subsection Git log + + +The commands above don't only bring you the latest version of the +sources, but also the full history of revisions (revisions, also +called commits, are changes made to the sources), stored in the +@file{.git} directory. You can browse this history with + +@example +git log # only shows the logs (author, committish and commit message) +git log -p # also shows diffs +gitk # shows history graphically +@end example + +@warning{The @code{gitk} command may require a separate +@code{gitk} package, available in the appropriate distribution's +repositories.} + + +@node Applying remote patches +@subsection Applying remote patches + + +TODO: Explain how to determine if a patch was created with +@code{git@tie{}format-patch}. + +Well-formed git patches created with @code{git@tie{}format-patch} +should be committed with the following command: + +@example +git am @var{patch} +@end example + +Patches created without @code{git@tie{}format-patch} can be +applied in two steps. The first step is to apply the patch to the +working tree: + +@example +git apply @var{patch} +@end example + +@noindent +The second step is to commit the changes and give credit to the +author of the patch. This can be done with the following command: + +@example +git commit -a --author="@var{John Smith} <@var{john@@example.com}>" +@end example + + +@node Sending and receiving patches via email +@subsection Sending and receiving patches via email + + +The default @code{x-diff} MIME type associated with patch files +(i.e., files whose name ends in @code{.patch}) means that the +encoding of line endings may be changed from UNIX to DOS format +when they are sent as attachments. Attempting to apply such an +inadvertently altered patch will cause git to fail with a message +about @q{whitespace errors}. + +The solution to such problems is surprisingly simple---just change +the default file extension of patches generated by git to end in +@code{.txt}, for example: + +@example +git config format.suffix '.patch.txt' +@end example + +This should cause email programs to apply the correct base64 +encoding to attached patches. + +If you receive a patch with DOS instead of UNIX line-endings, it +can be converted back using the @code{dos2unix} utility. + +Lots of useful information on email complications with patches is +provided on the Wine wiki at +@uref{http://wiki.winehq.org/GitWine}. + + +@node Cleaning up multiple patches +@subsection Cleaning up multiple patches + +If you have been developing on your own branch for a while, you +may have more commmits than is really sensible. To revise your +work and condense commits, use: + +@example +git rebase origin/master +git rebase -i origin/master +@end example + +@warning{Be a bit cautious -- if you completely remove commits +during the interactive session, you will... err... completely +remove those commits.} + + +@node Commit access +@subsection Commit access + + +Most contributors are not able to commit patches directly to the +main repository---only members of the LilyPond development team +have @emph{commit access}. If you are a contributor and are +interested in joining the development team, contact the Project +Manager through the mailing list +(@email{lilypond-devel@@gnu.org}). Generally, only contributors +who have already provided a number of patches which have been +pushed to the main repository will be considered for membership. + +If you have been approved by the Project Manager, use the +following procedure to obtain commit access: + +@enumerate +@item +If you don't already have one, set up a Savannah user account at +@uref{https://savannah.gnu.org/account/register.php}. If your web +browser responds with an @qq{untrusted connection} message when +you visit the link, follow the steps for including the CAcert root +certificate in your browser, given at +@uref{http://savannah.gnu.org/tls/tutorial/}. + +@warning{Savannah will silently put your username in lower-case -- +do not try to use capital letters.} + + +@item +After registering, if you are not logged in automatically, login +at @uref{https://savannah.gnu.org/account/login.php}---this should +take you to your @qq{my} page +(@uref{https://savannah.gnu.org/my/}). + + +@item +Click on the @qq{My Groups} link to access the @qq{My Group +Membership} page. From there, find the @qq{Request for Inclusion} +box and search for @qq{LilyPond}. Among the search results, check +the box labeled @qq{GNU LilyPond Music Typesetter} and write a +brief (required) message for the Project Manager (@qq{Hey it's +me!} should be fine). + +Note that you will not have commit access until the Project +Manager activates your membership. Once your membership is +activated, LilyPond should appear under the heading @qq{Groups I'm +Contributor of} on your @qq{My Group Membership} page. + + +@item +Generate an SSH @q{dsa} key pair. Enter the following at the +command prompt: + +@example +ssh-keygen -t dsa +@end example + +When prompted for a location to save the key, press to +accept the default location (@file{~/.ssh/id_dsa}). + +Next you are asked to enter an optional passphrase. On most +systems, if you use a passphrase, you will likely be prompted for +it every time you use @command{git@tie{}push} or +@command{git@tie{}pull}. You may prefer this since it can protect +you from your own mistakes (like pushing when you mean to pull), +though you may find it tedious to keep re-entering it. + +You can change/enable/disable your passphrase at any time with: + +@example +ssh-keygen -f ~/.ssh/id_dsa -p +@end example + +Note that the GNOME desktop has a feature which stores your +passphrase for you for an entire GNOME session. If you use a +passphrase to @qq{protect you from yourself}, you will want to +disable this feature, since you'll only be prompted once. Run the +following command, then logout of GNOME and log back in: + +@example +gconftool-2 --set -t bool \ + /apps/gnome-keyring/daemon-components/ssh false +@end example + +After setting up your passphrase, your private key is saved as +@file{~/.ssh/id_dsa} and your public key is saved as +@file{~/.ssh/id_dsa.pub}. + + +@item +Register your public SSH @q{dsa} key with Savannah. From the +@qq{My Account Configuration} page, click on @qq{Edit SSH Keys}, +then paste the contents of your @file{~/.ssh/id_dsa.pub} file into +one of the @qq{Authorized keys} text fields, and click +@qq{Update}. + +Savannah should respond with something like: + +@example +Success: Key #1 seen Keys registered +@end example + + +@item +Configure Git to use the SSH protocol (instead of the GIT +protocol). From your local Git repository, enter: + +@example +git config remote.origin.url \ + ssh://@var{user}@@git.sv.gnu.org/srv/git/lilypond.git +@end example + +@noindent +where @var{user} is your username on Savannah. + + +@item +After your membership has been activated and you've configured Git +to use SSH, test the connection with: + +@example +git pull --verbose +@end example + +SSH should issue the following warning: + +@example +The authenticity of host 'git.sv.gnu.org (140.186.70.72)' can't +be established. +RSA key fingerprint is +80:5a:b0:0c:ec:93:66:29:49:7e:04:2b:fd:ba:2c:d5. +Are you sure you want to continue connecting (yes/no)? +@end example + +Make sure the RSA key fingerprint displayed matches the one above. +If it doesn't, respond @qq{no} and check that you configured Git +properly in the previous step. If it does match, respond +@qq{yes}. SSH should then issue another warning: + +@example +Warning: Permanently added 'git.sv.gnu.org,140.186.70.72' (RSA) to +the list of known hosts. +@end example + +The list of known hosts is stored in the file +@file{~/.ssh/known_hosts}. + +At this point, you are prompted for your passphrase if you have +one, then Git will attempt a pull. + +If @command{git@tie{}pull@tie{}--verbose} fails, you should see +error messages like these: + +@example +Permission denied (publickey). +fatal: The remote end hung up unexpectedly +@end example + +If you get the above error, you may have made a mistake when +registering your SSH key at Savannah. If the key is properly +registered, you probably just need to wait for the Savannah server +to activate it. It usually takes a few minutes for the key to be +active after registering it, but if it still doesn't work after an +hour, ask for help on the mailing list. + +If @command{git@tie{}pull@tie{}--verbose} succeeds, the output +will include a @q{From} line that shows @q{ssh} as the protocol: + +@example +From ssh://@var{user}@@git.sv.gnu.org/srv/git/lilypond +@end example + +If the protocol shown is not @q{ssh}, check that you configured +Git properly in the previous step. + + +@item +Test your commit access with a dry run: + +@example +git push --dry-run --verbose +@end example + +Note that recent versions of Git (Git 1.6.3 or later) will issue a +big warning if the above command is used. The simplest solution +is to tell Git to push all matching branches by default: + +@example +git config push.default matching +@end example + +@noindent +Then @code{git@tie{}push} should work as before. For more +details, consult the @code{git@tie{}push} man page. +@end enumerate + + +@subsubheading Technical details + +@itemize +@item +On Firefox, to view or remove the CAcert root certificate, go to: +Edit > Preferences > Advanced > Encryption > View Certificates > +Authorities > Certificate Name > Root CA > CA Cert Signing +Authority. + +@item +The @command{git@tie{}config} commands above should modify your +local repository's @file{.git/config} file. These lines: + +@example +[remote "origin"] + url = git://git.sv.gnu.org/lilypond.git/ +@end example + +@noindent +should now be changed to: + +@example +[remote "origin"] + url = ssh://@var{user}@@git.sv.gnu.org/srv/git/lilypond.git +@end example + +@noindent +where @var{user} is your login name on Savannah. + +@item +Similarly, the +@command{git@tie{}config@tie{}push.default@tie{}matching} command +should add these lines to @file{.git/config}: + +@example +[push] + default = matching +@end example +@end itemize + +@knownissues +Encryption protocols, including ssh, generally do not permit packet +fragmentation to avoid introducing a point of insecurity. This +means that the maximum packet size must not exceed the smallest +MTU (Maximum Transmission Unit) set in the routers along the path. +This smallest MTU is determined by a procedure during call set-up +which relies on the transmission over the path of ICMP packets. +If any of the routers in the path block ICMP packets this mechanism +fails, resulting in the possibility of packets being transmitted +which exceed the MTU of one of the routers. If this happens the +packet is discarded, causing the ssh session to hang, timeout or +terminate with the error message + +@example +ssh: connect to host port 22: Bad file number +fatal: The remote end hung up unexpectedly +@end example + +depending on precisely when in the proceedings the first large +packet is transmitted. Most routers on the internet have MTU +set to 1500, but routers installed in homes to connect via +broadband may use a slightly smaller MTU for efficient transmission +over ATM. If this problem is encountered a possible work-around is +to set the MTU in the local router to 1500. + +@node Git on Windows +@section Git on Windows + +@c Some of this may duplicate stuff in other sections +@c But it is probably best for windows users to have it all together +@c If necessary, clear this up later -td + +TODO: Decide what to do with this... Pare it down? Move +paragraphs next to analogous Unix instructions? -mp + +@subsection Background to nomenclature + +Git is a system for tracking the changes made to source files by a +distributed set of editors. It is designed to work without a +master repository, but we have chosen to have a master repository +for LilyPond files. Editors hold a local copy of the master +repository together with any changes they have made locally. +Local changes are held in a local @q{branch}, of which there may +be several, but these instructions assume you are using just one. +The files visible in the local repository always correspond to +those on the currently @q{checked out} local branch. + +Files are edited on a local branch, and in that state the changes +are said to be @q{unstaged}. When editing is complete, the +changes are moved to being @q{staged for commit}, and finally the +changes are @q{committed} to the local branch. Once committed, +the changes (called a @q{commit}) are given a unique 40-digit +hexadecimal reference number called the @q{Committish} or @q{SHA1 +ID} which identifies the commit to Git. Such committed changes +can be sent to the master repository by @q{pushing} them (if you +have write permission) or by sending them by email to someone who +has, either as a complete file or as a @q{diff} or @q{patch} +(which send just the differences from the master repository). + +@subsection Installing git + +Obtain Git from +@uref{http://code.google.com/p/msysgit/downloads/list} (note, not +msysGit, which is for Git developers and not PortableGit, which is +not a full git installation) and install it. + +Note that most users will not need to install SSH. That is not +required until you have been granted direct push permissions to +the master git repository. + +Start Git by clicking on the desktop icon. This will bring up a +command line bash shell. This may be unfamiliar to Windows users. +If so, follow these instructions carefully. Commands are entered +at a $ prompt and are terminated by keying a newline. + +@subsection Initialising Git + +Decide where you wish to place your local Git repository, creating +the folders in Windows as necessary. Here we call the folder to +contain the repository @code{[path]/Git}, but if you intend using +Git for other projects a directory name like @code{lilypond-git} +might be better. You will need to have space for around +100Mbytes. + +Start the Git bash shell by clicking on the desk-top icon +installed with Git and type + +@example +cd [path]/Git +@end example + +to position the shell at your new Git repository. + +Note: if [path] contains folders with names containing spaces use + +@example +cd "[path]/Git" +@end example + +Then type + +@example +git init +@end example + +to initialize your Git repository. + +Then type (all on one line; the shell will wrap automatically) + +@example +git remote add -ft master origin git://git.sv.gnu.org/lilypond.git +@end example + +to download the lilypond master files. + +@warning{Be patient! Even on a broadband connection this can take +10 minutes or more. Wait for lots of [new tag] messages and the $ +prompt.} + +We now need to generate a local copy of the downloaded files in a +new local branch. Your local branch needs to have a name. It is +usual to call it @q{master} and we shall do that here. + +To do this, type + +@example +git checkout -b master origin/master +@end example + +This creates a second branch called @q{master}. You will see two +warnings (ignore these), and a message advising you that your +local branch @q{master} has been set up to track the remote +branch. You now have two branches, a local branch called +@q{master}, and a tracking branch called @q{origin/master}, which +is a shortened form of @q{remotes/origin/master}. + +Return to Windows Explorer and look in your Git repository. You +should see lots of folders. For example, the LilyPond +documentation can be found in [path]/Git/Documentation/. + +The Git bash shell is terminated by typing @code{exit} or by +clicking on the usual Windows close-window widget. + +@subsection Git GUI + +Almost all subsequent work will use the Git Graphical User +Interface, which avoids having to type command line commands. To +start Git GUI first start the Git bash shell by clicking on the +desktop icon, and type + +@example +cd [path]/Git +git gui +@end example + +The Git GUI will open in a new window. It contains four panels +and 7 pull-down menus. At this stage do not use any of the +commands under Branch, Commit, Merge or Remote. These will be +explained later. + +The top panel on the left contains the names of files which you +are in the process of editing (Unstaged Changes), and the lower +panel on the left contains the names of files you have finished +editing and have staged ready for committing (Staged Changes). At +present, these panels will be empty as you have not yet made any +changes to any file. After a file has been edited and saved the +top panel on the right will display the differences between the +edited file selected in one of the panels on the left and the last +version committed on the current branch. + +The panel at bottom right is used to enter a descriptive message +about the change before committing it. + +The Git GUI is terminated by entering CNTL-Q while it is the +active window or by clicking on the usual Windows close-window +widget. + +@subsection Personalising your local git repository + +Open the Git GUI, click on + +@example +Edit -> Options +@end example + +and enter your name and email address in the left-hand (Git +Repository) panel. Leave everything else unchanged and save it. + +Note that Windows users must leave the default setting for line +endings unchanged. All files in a git repository must have lines +terminated by just a LF, as this is required for Merge to work, +but Windows files are terminated by CRLF by default. The git +default setting causes the line endings of files in a Windows git +repository to be flipped automatically between LF and CRLF as +required. This enables files to be edited by any Windows editor +without causing problems in the git repository. + +@subsection Checking out a branch + +At this stage you have two branches in your local repository, +both identical. To see them click on + +@example +Branch -> Checkout +@end example + +You should have one local branch called @q{master} and one +tracking branch called @q{origin/master}. The latter is your +local copy of the @q{remotes/origin/master} branch in the master +LilyPond repository. The local @q{master} branch is where you +will make your local changes. + +When a particular branch is selected, i.e., checked out, the files +visible in your repository are changed to reflect the state of the +files on that branch. + +@subsection Updating files from @q{remote/origin/master} + +Before starting the editing of a file, ensure your local +repository contains the latest version of the files in the remote +repository by first clicking + +@example +Remote -> Fetch from -> origin +@end example + +@noindent +in the Git GUI. + +This will place the latest version of every file, including all +the changes made by others, into the @q{origin/master} branch of +the tracking branches in your git repository. You can see these +files by checking out this branch, but you must @emph{never} edit +any files while this branch is checked out. Check out your local +@q{master} branch again. + +You then need to merge these fetched files into your local +@q{master} branch by clicking on + +@example +Merge -> Local Merge +@end example + +@noindent +and if necessary select the local @q{master} branch. + +Note that a merge cannot be completed if you have made any local +changes which have not yet been committed. + +This merge will update all the files in the @q{master} branch to +reflect the current state of the @q{origin/master} branch. If any +of the changes conflict with changes you have made yourself +recently you will be notified of the conflict (see below). + +@subsection Editing files + +First ensure your @q{master} branch is checked out, then simply +edit the files in your local Git repository with your favourite +editor and save them back there. If any file contains non-ASCII +characters ensure you save it in UTF-8 format. Git will detect +any changes whenever you restart Git GUI and the file names will +then be listed in the Unstaged Changes panel. Or you can click +the Rescan button to refresh the panel contents at any time. You +may break off and resume editing any time. + +The changes you have made may be displayed in diff form in the top +right-hand panel of Git GUI by clicking on the file name shown in +one of the left panels. + +When your editing is complete, move the files from being Unstaged +to Staged by clicking the document symbol to the left of each +name. If you change your mind it can be moved back by clicking on +the ticked box to the left of the name. + +Finally the changes you have made may be committed to your +@q{master} branch by entering a brief message in the Commit +Message box and clicking the Commit button. + +If you wish to amend your changes after a commit has been made, +the original version and the changes you made in that commit may +be recovered by selecting + +@example +Commit -> Amend Last Commit +@end example + +@noindent +or by checking the Amend Last Commit radio button at bottom right. +This will return the changes to the Staged state, so further +editing made be carried out within that commit. This must only be +done @emph{before} the changes have been Pushed or sent to your +mentor for Pushing - after that it is too late and corrections +have to be made as a separate commit. + + +@subsection Sending changes to @q{remotes/origin/master} + +If you do not have write access to @q{remotes/origin/master} you +will need to send your changes by email to someone who does. + +First you need to create a diff or patch file containing your +changes. To create this, the file must first be committed. Then +terminate the Git GUI. In the git bash shell first cd to your Git +repository with + +@example +cd [path]/Git +@end example + +if necessary, then produce the patch with + +@example +git format-patch origin +@end example + +This will create a patch file for all the locally committed files +which differ from @q{origin/master}. The patch file can be found +in [path]/Git and will have a name formed from the commit message. + +@subsection Resolving merge conflicts + +As soon as you have committed a changed file your local +@code{master} branch has diverged from @code{origin/master}, and +will remain diverged until your changes have been committed in +@code{remotes/origin/master} and Fetched back into your +@code{origin/master} branch. Similarly, if a new commit has been +made to @code{remotes/origin/master} by someone else and Fetched, +your local @code{master} branch is divergent. You can detect a +divergent branch by clicking on + +@example +Repository -> Visualise all branch history +@end example + +This opens up a very useful new window called @q{gitk}. Use this +to browse all the commits made by yourself and others. + +If the diagram at top left of the resulting window does not show +your @code{master} tag on the same node as the +@code{remotes/origin/master} tag your branch has diverged from +@code{origin/master}. This is quite normal if files you have +modified yourself have not yet been Pushed to +@code{remotes/origin/master} and Fetched, or if files modified and +committed by others have been Fetched since you last Merged +@code{origin/master} into your local @code{master} branch. + +If a file being merged from @code{origin/master} differs from one +you have modified in a way that cannot be resolved automatically +by git, Merge will report a Conflict which you must resolve by +editing the file to create the version you wish to keep. + +This could happen if the person updating +@code{remotes/origin/master} for you has added some changes of his +own before committing your changes to +@code{remotes/origin/master}, or if someone else has changed the +same file since you last fetched the file from +@code{remotes/origin/master}. + +Open the file in your editor and look for sections which are +delimited with ... + +[to be completed when I next have a merge conflict to be sure I +give the right instructions -td] + + +@subsection Other actions + +The instructions above describe the simplest way of using git on +Windows. Other git facilities which may usefully supplement these +include + +@itemize +@item Using multiple local branches (Create, Rename, Delete) +@item Resetting branches +@item Cherry-picking commits +@item Pushing commits to @w{remote/origin/master} +@item Using gitk to review history +@end itemize + +Once familiarity with using git on Windows has been gained the +standard git manuals can be used to learn about these. + + +@node Repository directory structure +@section Repository directory structure + + +@c TODO: integrate the roadmap better +@verbatiminclude ROADMAP + + +@node Other Git documentation +@section Other Git documentation + +@itemize +@item +Official git man pages: +@uref{http://www.kernel.org/pub/software/scm/git/docs/} + +@item +More in-depth tutorials: @uref{http://git-scm.com/documentation} + +@item +Book about git: @uref{http://progit.org/,Pro Git} +@end itemize + diff --git a/Documentation/contributor/website-work.itexi b/Documentation/contributor/website-work.itexi new file mode 100644 index 0000000000..bb8c19fe94 --- /dev/null +++ b/Documentation/contributor/website-work.itexi @@ -0,0 +1,280 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@node Website work +@chapter Website work + +@menu +* Introduction to website work:: +* Uploading and security:: +* Debugging website and docs locally:: +* Translating the website:: +@end menu + + +@node Introduction to website work +@section Introduction to website work + +The website is @emph{not} written directly in HTML; +instead, the source is Texinfo, which is then generated into HTML, +PDF, and Info formats. The sources are + +@example +Documentation/web.texi +Documentation/web/*.texi +@end example + +Unless otherwise specified, follow the instructions and policies +given in @ref{Documentation work}. That chapter also contains a +quick introduction to Texinfo; consulting an external Texinfo +manual should be not necessary. + +@subheading Exceptions to the documentation policies + +@itemize + +@item +Sectioning: the website only uses chapters and sections; no +subsections or subsubsections. + +@item +@@ref@{@}s to other manuals (@@ruser, @@rlearning, etc): you can't +link to any pieces of automatically generated documentation, like +the IR or certain NR appendices. + +@item +The bibliography in Community->Publications is generated automatically +from @file{.bib} files; formatting is done automatically by +@file{texi-web.bst}. + +@item +@dots{} + +@item +For anything not listed here, just follow the same style as the +existing website texinfo files. + +@end itemize + + +@node Uploading and security +@section Uploading and security + +The website is generated hourly by user @code{graham} the host +@code{lilypond.org}. For security reasons, we do not use the +makefiles and scripts directly from git; copies of the relevant +scripts are examined and copied to +@code{~graham/lilypond/trusted-scripts/} + +@subheading Initial setup + +You should symlink your own @file{~/lilypond/} to +@file{~graham/lilypond/} + +If this directory does not exist, make it. Git master should go +in @file{~/lilypond/lilypond-git/} but make sure you enable: + +@example +git config core.filemode false +@end example + +If you have created any files in @file{~graham/lilypond/} then +please run: + +@example +chgrp lilypond ~graham/lilypond/ -R +chmod 775 ~graham/lilypond/ -R +@end example + +To reduce the CPU burden on the shared host (as well as some +security concerns), the @file{Documentation/pictures/} and +@file{Documentation/web/ly-examples/} directories are +@strong{not} compiled. You need to upload them, and if they ever +change, a user in the @code{lilypond} group must upload them to +@file{~graham/lilypond/media} on the host. + +Upload latest pictures/ and ly-examples/ (local script): + +@warning{You may need to change a number of items in the below +script.} + +@verbatim +### upload-lily-web-media.sh +#!/bin/sh +BUILD_DIR=$HOME/src/build-lilypond + +PICS=$BUILD_DIR/Documentation/pictures/out-www/ +EXAMPLES=$BUILD_DIR/Documentation/web/ly-examples/out-www/ + +cd $BUILD_DIR +rsync -a $PICS graham@lilypond.org:lilypond/media/pictures +rsync -a $EXAMPLES graham@lilypond.org:lilypond/media/ly-examples +@end verbatim + + + +@subheading Normal maintenance + +Get latest source code: + +@verbatim +### update-git.sh +#!/bin/sh +cd $HOME/lilypond/lilypond-git +git fetch origin +git merge origin/master +@end verbatim + +Check for any updates to trusted scripts / files: + +@verbatim +### check-git.sh +#!/bin/sh +GIT=$HOME/lilypond/lilypond-git +DEST=$HOME/lilypond/trusted-scripts +diff -u $DEST/website.make $GIT/make/website.make +diff -u $DEST/lilypond-texi2html.init $GIT/Documentation/lilypond-texi2html.init +diff -u $DEST/extract_texi_filenames.py $GIT/scripts/build/extract_texi_filenames.py +diff -u $DEST/create-version-itexi.py $GIT/scripts/build/create-version-itexi.py +diff -u $DEST/create-weblinks-itexi.py $GIT/scripts/build/create-weblinks-itexi.py +diff -u $DEST/mass-link.py $GIT/scripts/build/mass-link.py +diff -u $DEST/website_post.py $GIT/scripts/build/website_post.py +diff -u $DEST/bib2texi.py $GIT/scripts/build/bib2texi.py +diff -u $DEST/lilypond.org.htaccess $GIT/Documentation/web/server/lilypond.org.htaccess +diff -u $DEST/website-dir.htaccess $GIT/Documentation/web/server/website-dir.htaccess +@end verbatim + +If the changes look ok, make them trusted: + +@verbatim +### copy-from-git.sh +#!/bin/sh +GIT=$HOME/lilypond/lilypond-git +DEST=$HOME/lilypond/trusted-scripts +cp $GIT/make/website.make $DEST/website.make +cp $GIT/Documentation/lilypond-texi2html.init $DEST/lilypond-texi2html.init +cp $GIT/scripts/build/extract_texi_filenames.py $DEST/extract_texi_filenames.py +cp $GIT/scripts/build/create-version-itexi.py $DEST/create-version-itexi.py +cp $GIT/scripts/build/create-weblinks-itexi.py $DEST/create-weblinks-itexi.py +cp $GIT/scripts/build/mass-link.py $DEST/mass-link.py +cp $GIT/scripts/build/website_post.py $DEST/website_post.py +cp $GIT/scripts/build/bib2texi.py $DEST/bib2texi.py +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 + +Build the website: + +@verbatim +### make-website.sh +#!/bin/sh +DEST=$HOME/web/ +BUILD=$HOME/lilypond/build-website +mkdir -p $BUILD +cd $BUILD +cp $HOME/lilypond/trusted-scripts/website.make . + +make -f website.make WEBSITE_ONLY_BUILD=1 website +rsync -raO $BUILD/out-website/website/ $DEST/website/ +cp $BUILD/out-website/pictures $DEST +cp $BUILD/out-website/.htaccess $DEST +@end verbatim + +Cronjob to automate the trusted portions: + +@verbatim +# website-rebuild.cron +11 * * * * $HOME/lilypond/trusted-scripts/update-git.sh >/dev/null 2>&1 +22 * * * * $HOME/lilypond/trusted-scripts/make-website.sh >/dev/null 2>&1 +@end verbatim + + +@subsubheading Additional information + +Some information about the website is stored in +@file{~graham/lilypond/*.txt}; this information should not be +shared with people without trusted access to the server. + + +@node Debugging website and docs locally +@section Debugging website and docs locally + +@itemize +@item +Install apache2, or any other http server. These instructions +assume that you also enable @code{mod_userdir}, and use +@code{$HOME/public_html} as the location. + +@item +Build the online docs and website: + +@example +make WEB_TARGETS="offline online" doc +make website +@end example + + +@item +Move the built stuff into those directories. It's highly +recommended to have your build dir and www dir on the same +partition. (make @code{$HOME/public_html/} a symlink if +necessary) + +@example +mv out-website/website/ $HOME/public_html +mv $HOME/public_html/website/pictures $HOME/public_html/ +mkdir -p $HOME/public_html/doc/v2.13/ +mv out-www/online-root/* $HOME/public_html/doc/v2.13/ +@end example + +@end itemize + + +@node Translating the website +@section Translating the website + +As it has much more audience, the website should be translated before +the documentation; see @ref{Translating the documentation}. + +In addition to the normal documentation translation practices, +there are a few additional things to note: + +@itemize + +@item +Build the website with: + +@example +make website +@end example + +@noindent +however, please note that this command is not designed for being +run multiple times. If you see unexpected output (mainly the page +footers getting all messed up), then delete your +@file{out-website} directory and run @code{make website} again. + +@item +Some of the translation infrastructure is defined in python files; +you must look at the @code{### translation data} sections in: + +@example +scripts/build/create-weblinks-itexi.py +scripts/build/website_post.py +@end example + +@item +Translations are not included by default in @code{make website}. +To test your translation, edit the @code{WEB_LANGS} line in +@file{make/website.make}. Do not submit a patch to add your language +to this file unless @code{make website} completes with less than 5 +warnings. + +@item +Links to manuals are done with macros like +@code{@@manualDevelLearningSplit}. To get translated links, you +must change that to @code{@@manualDevelLearningSplit-es} (for +es/Spanish translations, for example). + +@end itemize + + + diff --git a/Documentation/cs/GNUmakefile b/Documentation/cs/GNUmakefile new file mode 100644 index 0000000000..2b7f1a1ec4 --- /dev/null +++ b/Documentation/cs/GNUmakefile @@ -0,0 +1,10 @@ +ISOLANG = cs +depth = ../.. +# SUBDIRS = web learning notation texidocs usage included essay extending +SUBDIRS = web learning texidocs essay usage +STEPMAKE_TEMPLATES = documentation +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root +NO_PDF_FILES = 1 +EXTRA_DIST_FILES = web.texi + +include $(depth)/make/stepmake.make diff --git a/Documentation/cs/download.itexi b/Documentation/cs/download.itexi new file mode 100644 index 0000000000..154c57f9e3 --- /dev/null +++ b/Documentation/cs/download.itexi @@ -0,0 +1,607 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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 Translators: Pavel Fric + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond je @strong{textově založený} programm pro notový zápis, +podobá se spíše programovacímu jazyku než nějakému grafickému +programu pro sazbu not. Předtím než si LilyPond stáhnete, přečtěte si, +prosím, o naší @ref{Text-Eingabe}.} +@end macro + +@node Stažení +@unnumbered Stažení +@translationof Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want verisonDevel here, since the online links + @c for @version won't be up yet! + @heading Downloads for LilyPond @versionDevel + +Odkazy na stálou verzi LilyPondu se nacházejí na +@uref{http://lilypond.org, lilypond.org} +@end ifclear +@ifset web_version + @heading Stažení pro LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{column-left-top} +@subheading Pro uživatele + +@itemize + +@item +@c TODO: duplicate to avoid underlined refs in HTML? icky. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux und FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Pro vývojáře + +@itemize + +@item +@ref{Zdroje}: +Pro tvůrce balíčků + +@item +@ref{Stará stažení}: +Staré verze + +@item @ref{Vývoj}: +Poslední nestálá verze + +@end itemize +@divEnd + + +@divClass{column-center-bottom} + +@subheading Povolení k programu + +LilyPond je zveřejněn pod +@ref{GPL, GNU General Public License}. +@divEnd + + +@divClass{color1} + +@subheading Sponzoři + +Velmi děkujeme @uref{http://www.vt.edu/, Virginia Tech} a +@uref{http://www.linuxaudio.org/, linuxaudio.org}, kteří +platí šířku pásma. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Zdroje:: +* Stará stažení:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Generické balíčky nebo distribuční balíčky? + +Mnohé distribuce LilyPond obsahují ve svém běžném systému +balíčků. Tyto verze se jednoduše instalují a naopak lépe +odstraňují než generické balíčky, ale mohou být starší. +Pokud chcete používat naše generické balíčky, nejprve ze svého +systému pomocí správce balíčků odstraňte veřejnou verzi. Přečtěte si +dokumentaci ke své distribuci věnovanou nastavení správce balíčků. + +@divEnd + + +@divClass{column-left-top} +@subheading Generické balíčky + +@subsubheading Stažení + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(Máte-li pochybnosti, potom) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Instalace + +V příkazovém řádku napište + +@example +cd CESTA_K_ADRESÁŘI_SE_STAŽENÝMI_SOUBORY +sh lilypond-@versionStable{}-OS-ART.sh +@end example + +@subsubheading Odstranění + +V příkazovém řádku napište + +@example +uninstall-lilypond +@end example + +@divEnd + +@divClass{column-right-top} +@subheading Sestavení souboru + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Zvláštní distribuční balíčky + +Použijte, prosím, správce balíčků své distribuce k +nainstalování nebo aktualizaci této verze. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.2} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.2} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://download.opensuse.org/repositories/openSUSE:/Factory:/Contrib/standard/, +openSUSE: LilyPond 2.12.2} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Balíčky + +@subsubheading Stažení + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Pro procesory značky Intel (máte-li pochybnosti, používejte tut verzi). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +Pro procesory G3 a G4 (staré počítače Apple). + +@end itemize + +@subsubheading Instalace + +Dvakrát klepněte na stažený soubor, pak je táhněte +tam, kde chcete program uložit. + +@subsubheading Odstranění + +Odstraňte adresář LilyPond.app. + +@divEnd + + +@divClass{column-right-top} +@subheading Sestavení souboru + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Používání v příkazovém řádku + +@warning{Pokud jste spokojen s rozhraním, těchto příkazů, +prosím, nevšímejte.} + + +@subsubheading MacOS X v příkazovém řádku + +Nejjednodušším způsobem, jak vyvolat lilypondovské skripty, je nějaké +@qq{Pomocnéskripty} vytvořit. + +@enumerate + +@item +Vytvořte adresář, ve kterém budou tyto skripty uloženy: + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Vytvořte soubor s názvem @command{lilypond} a +obsahem: + +@help obvious css issue to be dealt with. :( +@c we need a small font here to fit. -gp +@smallexample +exec @var{ADR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end smallexample + +@warning{@var{ADR} je obvykle @code{/Applications/}} + + +@item +Vytvořte podobné soubory @command{lilypond-book}, +@command{convert-ly} a další skripty, jež hodláte používat, +přičemž nahraďte @command{bin/lilypond} pomocí @command{bin/convert-ly} +(nebo jinými názvy programů). + + +@item +Udělejte soubor spustitelný: + +@example +chmod u+x lilypond +@end example + + +@item +Nyní adresář musíte přidat do vaší cesty. Změňte +(nebo vytvořte) soubor s názvem @code{.profile} ve +svém domovském adresáři (home), takže obsahuje: + +@example +export PATH=$PATH:~/bin +@end example + +Tento soubor by měl končit jedním prázdným řádkem. + +@end enumerate + + +@subsubheading Vyvolání jednotlivých skriptů + +Skripty -- jako @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly} a také sám @command{lilypond} -- jsou obsaženy +v souboru @code{.app} pro MacOS@tie{}X. + +Skripty mohou být stejně tak vyvolány z příkazového řádku tak, +že člověk je vyvolá přímo: + +@example +@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond +@end example + +Totéž platí i pro všechny ostatní skripty v tomto adresáři, jako jsou +@command{lilypond-book} a @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Balíčky + +@subsubheading Stažení + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Für Windows 2000, XP, Vista, and Windows 7. + +@end itemize + +@subsubheading Instalace + +@enumerate + +@item +najděte stažený soubor a dvakrát poklepejte, abyste spustil +instalační program. Následujte pokyny, které vám instalátor +dává; doporučujeme vám přijmout všechny instalační volby +a souhlasit s výchozím instalačním adresářem. +Když je instalátor hotov, klepněte na @qq{Fertigstellen}. +LilyPond je nyní nainstalován. + +@end enumerate + +@subsubheading Odstranění + +Pro odstranění LilyPondu, můžete buď + +@enumerate + +@item +vyhledat adresář s LilyPondem ve spouštěcí nabídce a klepnout na @qq{Odinstalovat}. +Když je odinstalátor hotov, klepněte na @qq{Dokončit}, + +@item +nebo přes správu systému přejděte na správu programů, najděte +záznam s LilyPondem a zvolte jeho odstranění. Když je odinstalátor hotov, +klepněte na @qq{Dokončit}. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Sestavení souboru + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Používání v příkazovém řádku + +@warning{Pokud jste spokojen s rozhraním, těchto příkazů, +prosím, nevšímejte.} + +@subsubheading Windows v příkazovém řádku + +Nejjednodušším způsobem, jak LilyPond používat, je, přidat instalační +adresář do proměnné prostředí @qq{Cesta}. + + +@enumerate +@item +Otevřete @qq{Systém} ze správy systému, vyberte kartu +@qq{Pokročilé} a klepněte na proměnné prostředí. + +@item +Vyberte proměnnou @qq{Cesta} v seznamu s proměnnými prostředí +a klepněte na Upravit. Obdržíte okno s nadpisem +@qq{Upravit systémovou proměnnou}, do pole +@qq{Hodnota proměnné} přidejte název adresáře s programem, +nějak tak: + +@example +[@var{přednastavená cesta - PATH}];@var{ADR}\LilyPond\usr\bin +@end example + +@warning{@var{ADR} je obvykle @code{C:\Program Files}.} + +@noindent +a klepněte na @qq{OK} pro uzavření okna. + +@end enumerate + +@subsubheading Vyvolání jednotlivých programů + +LilyPond-Programme +-- jak mohou být lilypond, lilypond-book, convert-ly a tak dále -- +vyvolány z příkazového řádku: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Zdroje +@unnumberedsec Zdroje +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{Doporučujeme @strong{nicht}, abyste si sám vyzkoušel +sestavení LilyPondu ze zdrojových souborů. Téměř všichni +uživatelé mají více výhod z používání předsestavených verzí.} + +@divClass{column-left-bottom} +@subheading Zdrojová koule v táru + +@downloadStableSource-de{} + +Na důkladný seznam se všemi verzemi (starými a novými) se podívejte na +naše +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, Stránky pro stažení}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Příkazy pro sestavování + +Příkazy se nacházejí v @rcontribnamed{Compiling LilyPond,Sestavení LilyPondu}. + +@divEnd + + +@node Stará stažení +@unnumberedsec Stará stažení +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Všechny verze + +Na důkladný seznam se všemi verzemi (starými a novými) se podívejte na +@uref{http://download.linuxaudio.org/lilypond/binaries/, Stránky pro stažení}. + +@divEnd + + +@node GPL +@unnumberedsec GPL +@translationof GPL + +@divClass{column-center-top} +@subheading Povolení k programu + +GNU LilyPond je zveřejněn pod GNU General Public License. +Úvod do povolení a naše důvody pro tuto volbu +naleznete v @ref{Svoboda}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd + + + diff --git a/Documentation/cs/essay/GNUmakefile b/Documentation/cs/essay/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/cs/essay/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/cs/essay/literature.itely b/Documentation/cs/essay/literature.itely new file mode 100644 index 0000000000..d83438e23a --- /dev/null +++ b/Documentation/cs/essay/literature.itely @@ -0,0 +1,103 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437 + + 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" + +@c Translators: Pavel Fric + + +@node Seznam literatury +@chapter Seznam literatury +@translationof Literature list + +Zde je seznam literatury, die in LilyPond benutzt wurde: + +@menu +* Krátký seznam literatury:: +* Dlouhý seznam literatury:: +@end menu + +@node Krátký seznam literatury +@section Krátký seznam literatury +@translationof Short literature list + +Wenn Sie mehr über Notation und den Notenstich erfahren wollen, sind +hier einige interessante Titel gesammelt. + + +@table @cite + +@item Ignatzek 1995 +Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne +1995. Mainz, Germany ISBN 3-7957-5140-3. + +Eine praktische Einführung zum Spielen von Jazz auf dem Klavier. Eins der +ersten Kapitel enthält einen Überblick über die Akkorde, die im Jazz +verwendet werden. + +@item Gerou 1996 + +Tom Gerou and Linda Lusk, Essential Dictionary of Music +Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. + +Eine ausführliche, alphabetische Liste vieler Belange des Musiksatzes +und der Notation; die üblichen Fälle werden behandelt. + +@item Read 1968 +Gardner Read, Music Notation: A Manual of Modern Practice. +Taplinger Publishing, New York (2nd edition). + +Ein Klassiker für die Musiknotation. + +@item Ross 1987 +Ted Ross, Teach yourself the art of music engraving and processing. +Hansen House, Miami, Florida 1987. + +Dieses Buch handelt vom Musiksatz, also vom professionellen Notenstich. +Hier sind Anweisungen über Stempel, die Benutzung von Stiften und +nationale Konventionen versammelt. Die Kapitel zu Reproduktionstechniken +und der historische Überblick sind auch interessant. + +@item Schirmer 2001 +The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. + +Dieses Handbuch setzt den Fokus auf die Herstellung von Drucksachen für den +Schirmer-Verlag. Hier werden viele Details behandelt, die sich in anderen +Notationshandbüchern nicht finden. Es gibt auch einen guten Überblick, was +nötig ist, um Drucke in publikationstauglicher Qualität zu produzieren. + +@item Stone 1980 + +Kurt Stone, Music Notation in the Twentieth Century. +Norton, New York 1980. + +Dieses Buch enthält einen Überblick über die Notation von moderner E-Musik, +beginnt aber mit einem Überblick über bereits existente Praktiken. + +@end table + + +@node Dlouhý seznam literatury +@section Dlouhý seznam literatury +@translationof Long literatur list + +@subheading Colorado + +@include colorado.itexi + +@subheading Computernotation + +@include computer-notation.itexi + +@subheading Notensatz + +@include engravingbib.itexi + + diff --git a/Documentation/cs/learning.tely b/Documentation/cs/learning.tely new file mode 100755 index 0000000000..ddf058918f --- /dev/null +++ b/Documentation/cs/learning.tely @@ -0,0 +1,121 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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 +@documentencoding UTF-8 +@documentlanguage cs +@setfilename lilypond-learning.info +@settitle Příručka k učení se +@afourpaper + +@macro manualIntro +Tento soubor poskytuje úvod pro LilyPond verze +@version{}. +@end macro + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Autorské právo @copyright{} 1999--2010 autoři. +@end macro + +@set FDL +@include macros.itexi + + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen a Graham Percival +@omfdescription Příručka k učení se systému pro sazbu not LilyPond +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Czech +@end ignore + +@c Translators: Pavel Fric + +@lilyTitlePage{Learning Manual} + +@c TOC -- non-tex + + +@ignore +@ifhtml +@ifclear bigpage +Tento dokument je dostupný i jako +@uref{source/Documentation/learning.cs.pdf,PDF} a jako +@uref{source/Documentation/learning-big-page.cs.html,velká stránka}. +@end ifclear +@ifset bigpage +Tento dokument je dostupný i jako +@uref{source/Documentation/learning.cs.pdf,PDF} a jako +@uref{source/Documentation/learning/index.cs.html,oddělené stránky HTML s rejstříkem}. +@end ifset +@end ifhtml + + +@ifnottex +Toto je příručka k naučení se pro GNU LilyPond verze @version{}. +Kvůli přehledu o celé dokumentaci k LilyPondu a o záměru této příručky +se podívejte na @ref{O dokumentaci}. + +@cindex Internetové stránky +@cindex URL + +Více informací lze najít na +@uref{http://@/www@/.lilypond@/.org/}. Na internetových stránkách +naleznete kopii tohoto a dalších souborů s dokumentací. +@end ignore + + +@ifnottex +@menu +@c * Předmluva:: Předmluva. +* Cvičení:: Cvičení na úvod. +* Běžný notový zápis:: Nejčastější případy notového zápisu. +* Základní pojmy:: Základní pojmy, které jsou potřeba kvůli přečtení zbytku této příručky. +* Ladění výstupu:: Úvod do ovlivňování obrazu notového zápisu. +@c * Práce na projektech LilyPondu:: Používání programu ve skutečném životě. + + +Přílohy + +* Předlohy:: Předlohy ihned k použití. +* GNU Free Documentation License:: Licence této příručky. +* Rejstřík k LilyPondu:: +@end menu + +@docMain +@end ifnottex + +@c TOC - tex +@contents + +@allowcodebreaks false + +@c INCLUDES + +@c @include learning/preface.itely +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely +@c @include learning/working.itely +@c moved to application.tely + +@include learning/templates.itely +@c @include learning/scheme-tutorial.itely +@c moved to extending.tely +@include fdl.itexi + +@node Rejstřík k LilyPondu +@appendix Rejstřík k LilyPondu +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/cs/learning/GNUmakefile b/Documentation/cs/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/cs/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/cs/learning/common-notation.itely b/Documentation/cs/learning/common-notation.itely new file mode 100644 index 0000000000..3b46081113 --- /dev/null +++ b/Documentation/cs/learning/common-notation.itely @@ -0,0 +1,1533 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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" + +@ignore +Tutorial guidelines: +- unless you have a really good reason, use either + @l ilypond[quote,verbatim] + or + @l ilypond[quote,verbatim,fragment,relative=2] + (without spaces) + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "aes". I know it's not + correct Dutch naming, but let's not confuse people with this until + we get to the Basic notation chapter. +- addition for German users to the pitches chapter about naming of pitches. +@end ignore + + +@node Běžný notový zápis +@chapter Běžný notový zápis +@translationof Common notation + +V této části je vysvětleno, jak lze vytvořit překrásnou notovou sazbu, +která obsahuje nejčastěji se vyskytující symboly notového zápisu. +Část se zakládá na @ref{Cvičení,,cvičení}. + + +@menu +* Notový zápis v jedné notové osnově:: +* Více not najednou:: +* Písničky:: +* Poslední úpravy:: +@end menu + + +@node Notový zápis v jedné notové osnově +@section Notový zápis v jedné notové osnově +@translationof Single staff notation + +V této kapitole jsou vyučovány základní složky notového zápisu, +jež se používají pro jeden hlas v jedné notové osnově. + +@menu +* Přezkoušení taktů +* Předznamenání a označení tóniny (předznamenání):: +* Ligatury a legatové obloučky:: +* Artikulační znaménka a hlasitost:: +* Přidání textu:: +* Automatické a ruční trámce:: +* Dodatečné rytmické příkazy:: +@end menu + + +@node Přezkoušení taktů +@subsection Přezkoušení taktů +@translationof Bar checks + +I když nejsou předepsána, měla by se přezkoušení taktů ve vstupním +souboru používat, aby se ukázalo, kde by měly za běžných okolností +být taktové čáry. Jsou zapsány symbolem @qq{svislítka}, +( @code{|}) (klávesa AltCtrl + <). S pomocí přezkoušení taktů +může program zajistit, že zadané délky not dají celé takty +na správných místech. Přezkoušení taktů rovněž ulehčuje +čtení zadaného textu, jelikož do textu přináší pořádek. + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +Doporučení pro notový zápis: +@ruser{Přezkoušení taktů a počtu taktů}. + + +@node Předznamenání a označení tóniny (předznamenání) +@subsection Předznamenání a označení tóniny (předznamenání) +@translationof Accidentals and key signatures + +@subheading Předznamenání +@cindex Předznamenání +@cindex Akzidentien +@cindex Křížek +@cindex Dvojitý křížek +@cindex B +@cindex Dvojité b + +@funindex es +@funindex is +@funindex eses +@funindex isis + + +Slovníček: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, +@rglos{double flat}, @rglos{accidental}. + +Předznamenání @notation{křížku}@footnote{V německém hovorovém jazyku +se předznamenání (das Versetzungszeichen) často říká předznamenání (Vorzeichen). Do češtiny se překládá stejně. V této příručce +se však rozlišuje mezi předznamenáním jako obecným udáním tóniny +a předznamenáními (posuvkami), jež se objevují přímo v notovém textu. V angličtině jsou obojí značky odlišeny tím, že pro stanovení tóniny se používá slova key signature, což se překládá jako předznamenání, a pro předznamenání na různých místech přímo v notovém zápisu má angličtina výraz accidental, což se překládá jako posuvka.} se zadává tím, že se k názvu noty připojí +@q{is}, předznamenání @notation{bé} +se provede připojením @q{es}. Logicky se potom + @notation{dvojitý křížek} nebo @notation{dvojité bé} zapíše připojením +@q{isis} nebo @q{eses}. Tato skladba odpovídá zvyklosti prostředí +českého jazyka, a tudíž není pro české uživatele žádným problémem. +Je ovšem možné používat název pro +@notation{předznamenání} v jiných jazycích. +Podívejte se na @ruser{Označení not v jiných jazycích}. + +@lilypond[verbatim,quote,relative=2] +cis4 ees fisis, aeses +@end lilypond + + +@subheading Označení tóniny (předznamenání) + +@cindex Tónina, nastavení +@cindex Předznamenání +@cindex Dur +@cindex Moll +@cindex Předznamenání (posuvky) a předznamenání (tónina) +@cindex Obsah a zobrazení +@cindex Zobrazení a obsah + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +Slovníček: @rglos{key signature}, @rglos{major}, +@rglos{minor}. + +@notation{Tónina} díla se vytvoří příkazem +@code{\key}, který je následován označením noty a +@code{\major} (pro Dur) nebo @code{\minor} +(pro moll). + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 | +\key c \minor +a1 | +@end lilypond + +@smallspace + +@subheading Varování: označení tóniny a výšky tónů + +Slovníček: @rglos{accidental}, @rglos{key signature}, +@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, +@rglos{transposition}, @rglos{Pitch names}. + +Aby se určilo, zda se má předznamenání objevit před určitou notou, +zkoumá LilyPond výšky not a tóninu. Tónina +ovlivňuje jen @emph{otisknutá} předznamenání, nikoli +skutečné výšky tónů! Tato zvláštnost se na začátku jeví +často jako matoucí, takže je zde sledována důkladněji. + +LilyPond přísně rozlišuje mezi hudebním obsahem a +sazbou. Alterace (@notation{bé}, +@notation{křížek} nebo @notation{odrážka}) jedné noty kromě toho +náleží k výšce tónu, a je proto hudebním obsahem. +Zda se předznamenání (posuvka: čili @emph{otisknutý} křížek, bé +nebo odrážka) objeví před odpovídající notou, +je věcí sazby (úpravy). Úprava je něčím, co poslouchá určitá pravidla, +takže předznamenání (posuvky) +jsou sázena automaticky podle těchto pravidel. Výšky tónů ve +vašich notách jsou uměleckým dílem, a tak nebudou přidávány automaticky. +Nerozhoduje se automaticky, kde se objeví, a musíte zadat tón, +který chcete @emph{slyšet}. + +V tomto příkladu + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +nemá předznamenání žádná z not, přesto musí být ve zdrojovém textu +zapsáno @q{is} pro @code{cis} a @code{fis}. + +Kód @q{bé} (podle holandského způsobu označování not se H sází +@code{b}) tedy neznamená: @qq{Nakresli jednu černou tečku +na prostřední linku notové osnovy.} Přesněji řečeno to znamená: + @qq{Zde se má vysázet nota s výškou tónu H.} +V tónině As Dur @emph{dostane} předznamenání (posuvku): + + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +Zapsat všechna tato předznamenání výslovně, možná znamená o něco +více písemné práce, má to ale tu velkou výhodu, že +@notation{transpozice}, převod, se dělá mnohem snadněji, a že +tisk předznamenání (posuvek) se může uskutečnit podle rozdílných +pravidel. Podívejte se na +@ruser{Automatické předznamenání} na několik příkladů, jak mohou být +předznamenání (posuvky) na základě různých pravidel vytisknuta. + + +@seealso +Doporučení pro notový zápis: +@ruser{Označení not v jiných jazycích}, +@ruser{Předznamenání}, +@ruser{Automatické předznamenání}, +@ruser{Označení tóniny}. + + +@node Ligatury a legatové obloučky +@subsection Ligatury a legatové obloučky +@translationof Ties and slurs + +@cindex Legatové obloučky +@cindex Oblouček, legato +@cindex Ligatury +@cindex Frázovací obloučky +@cindex Legatové obloučky, frázování + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + + +@subheading Ligatury + +Slovníček: @rglos{tie}. + +@notation{Ligatura} se zapíše tak, že se k první z not, které se mají +spojit, připojí vlnovka @code{~}. + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4~ c8 a~ a2 +@end lilypond + + +@subheading Legatové obloučky + +Slovníček: @rglos{slur}. + +@notation{Legatový oblouček} je oblouček, který se rozprostírá přes +více not. Jeho počáteční a koncová nota se značí +@q{(} popřípadě @q{)}. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@subheading Frázovací obloučky + +Slovníček: @rglos{slur}, @rglos{phrasing}. + +Obloučky, které označují delší jednotky frázování +(frázovací obloučky), se zadávají pomocí @code{\(} a +@code{\)}. Současně se mohou vyskytovat jak legatové obloučky +tak frázovací obloučky, ale nemůže se současně dát více než právě +jeden legatový oblouček a jeden frázovací oblouček. + +@lilypond[verbatim,quote,relative=2] +g4\( g8( a) b( c) b4\) +@end lilypond + +@sp 1 + +@cindex Ligatura proti legatovému obloučku +@subheading Varování: ligatury nejsou legatovými obloučky + +Slovníček: @rglos{articulation}, @rglos{slur}, @rglos{tie}. + +Legatový oblouček vypadá jako @rglos{tie}, má ale jiný význam. +Ligatura prodlužuje pouze předcházející notu a může se +také používat jen u dvou not, jež mají stejnou výšku tónu. +Legatové obloučky proti tomu ukazují artikulaci not a mohou být +zapsány pro větší skupiny not. Ligatury a legatové obloučky mohou +být naskládány do sebe. + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + + +@seealso +Doporučení pro notový zápis: +@ruser{Ligatury}, +@ruser{Legatové obloučky}, +@ruser{Obloučky frázování}. + + +@node Artikulační znaménka a hlasitost +@subsection Artikulační znaménka a hlasitost +@translationof Articulation and dynamics + +@subheading Artikulační znaménka + +@cindex Artikulace +@cindex Důrazy +@cindex Staccato + +Slovníček: +@rglos{articulation}. + +Běžná @notation{artikulační znaménka} mohou být zadána pomocí +doplnění minus (@q{-}) a odpovídajícího znaménka: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +@subheading Prstoklad + +@cindex Prstoklad + +@funindex ^ +@funindex _ + +Slovníček: @rglos{fingering}. + +Stejným způsobem lze přidat označení prstokladu tím, +že se po minus (@q{-}) zapíše číslo: + +@lilypond[verbatim,quote,relative=2] +c4-3 e-5 b-2 a-1 +@end lilypond + +Artikulační znaménka a prstoklady jsou obvykle umísťovány +automaticky, ale jejich místo lze zadat pomocí +znaku @q{^} (nahoru) nebo @q{_} (dolů) namísto znaku minus. +K jedné notě je možné připojit i více +artikulačních znamének. +Většinou ale najde LilyPond sám tu nejlepší možnost, +jak se mají artikulační znaménka umístit. + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Dynamika + +@cindex Dynamika +@cindex Crescendo +@cindex Hlasitost +@cindex Decrescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Slovníček: +@rglos{dynamics}, +@rglos{crescendo}, +@rglos{decrescendo}. + +Dynamika (značky určující hlasitost) se do díla zadává tím, že se k notě +připojují značky (s obráceným lomítkem): + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + +@notation{Crescendo} a @notation{decrescendo} začínají +příkazem @code{\<} +případně @code{\>}. Další absolutní značka určující hlasitost, +například @code{\f}, (de)crescendo ukončuje. +Může se přesně ukončit i příkazem @code{\!}. + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +Doporučení pro notový zápis: +@ruser{Artikulační znaménka a ozdoby}, +@ruser{Příkazy pro prstoklad}, +@ruser{Dynamika}. + + +@node Přidání textu +@subsection Přidání textu +@translationof Adding text + +@cindex Text, přidání +@cindex Vložení textu +@cindex Přidání textu +@cindex Textový popis +@cindex markup + +@funindex \markup +@funindex markup + +Text můžete do notového zápisu vložit následujícím způsobem: + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +Dodatečné formátování lze nasadit, když použijete příkaz +@code{\markup}: + +@lilypond[verbatim,quote,relative=2] +c2^\markup { \bold espr } +a2_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Doporučení pro notový zápis: +@ruser{Zadání textu}. + + +@node Automatické a ruční trámce +@subsection Automatické a ruční trámce +@translationof Automatic and manual beams + +@cindex Trámce, ruční +@cindex automatické trámce +@cindex Trámce, automatické +@cindex ruční trámce + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Všechny @notation{trámce} se zapisují automaticky: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@end lilypond + +@noindent +Když nejsou tyto automaticky zapisované trámce chtěné, +mohou být změněny ručně. Když se musí tu a tam opravit +jen jeden trámec, dostane nota, na níž trámec začíná +@q{[} (AltGr+8), a ta, na níž má končit, dostane +@q{]} (AltGr+9). + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +Když chcete automatické trámce vypnout úplně nebo +pro delší část, používáte +příkaz @code{\autoBeamOff}, abyste trámce vypnul, +a @code{\autoBeamOn}, abyste je opět zapnul. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +Doporučení pro notový zápis: +@ruser{Automatické trámce}, +@ruser{Ruční trámce}. + + +@node Dodatečné rytmické příkazy +@subsection Dodatečné rytmické příkazy +@translationof Advanced rhythmic commands + +@subheading Předtaktí + +@cindex Předtaktí +@funindex \partial +@funindex partial + +@notation{Předtaktí} se zadává příkazem @code{\partial}. +Potom následuje délka předtaktí: @code{\partial 4} +znamená jednu čtvrťovou notu předtaktí a @code{\partial 8} jednu osminovou notu. + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + + +@subheading Jiná rytmická rozdělení + +@cindex N-toly +@cindex Trioly +@cindex Rytmická rozdělení + +@funindex \times +@funindex times + +Slovníček: @rglos{note value}, @rglos{triplet}. + +@notation{Trioly} a @notation{n-toly} se vytváří příkazem +@code{\times}. Potřeba jsou k tomu dva argumenty: +zlomek a noty, na něž se odvolává. +Trvání not se zlomkem znásobuje. +V jedné triole trvají noty 2/3 jejich zapsané délky, +takže triola má 2/3 jako svůj zlomek: + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Ozdoby + +@cindex Ozdoby +@cindex Příraz +@cindex Prodleva + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Slovníček: @rglos{grace notes}, @rglos{acciaccatura}, +@rglos{appoggiatura}. + +Melodické ozdoby se zadávají příkazem @code{\grace}, ačkoli se také dají +vytvářet uvozením hudebního výrazu příkazem @code{\appoggiatura} (dlouhý +příraz, prodleva) a @code{\acciaccatura} (příraz, krátká appogiatura). + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +Doporučení pro notový zápis: +@ruser{Ozdoby}, +@ruser{Jiná rytmická rozdělení}, +@ruser{Předtaktí}. + + +@node Více not najednou +@section Více not najednou +@translationof Multiple notes at once + +V této kapitole bude ukázáno, jak lze zapsat více než jednu +notu k stejné době: v různých notových osnovách +pro různé nástroje nebo pro jeden nástroj (např. klavír) +a v akordech. + +Vícehlasostí (polyfonie) se v hudbě nazývá výskyt více než jednoho +hlasu v jednom díle. +Vícehlasost (polyfonie) ovšem pro LilyPond znamená +výskyt více než jednoho hlasu ve stejné notové osnově. + +@menu +* Vysvětlení hudebních výrazů:: +* Více notových osnov:: +* Seskupení notových osnov:: +* Spojení not do akordů:: +* Vícehlasost v jedné notové osnově:: +@end menu + + +@node Vysvětlení hudebních výrazů +@subsection Vysvětlení hudebních výrazů +@translationof Music expressions explained + +@cindex Hudební výraz +@cindex Výraz, hudební +@cindex složený hudební výraz + +Ve zdrojových souborech LilyPondu se hudba znázorňuje +pomocí @emph{hudebních výrazů}. Jedna nota je jedním hudebním +výrazem. + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +Skupina not uvnitř závorek tvoří nový výraz. +Tento je nyní @emph{složeným hudebním výrazem}. +Zde byl jeden takový složený hudební výraz +se dvěmi notami vytvořen: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +Když je skupina hudebních výrazů (například not) +zapsána do složených závorek, znamená to, že jsou +seřazeny v řadě (tj. každý následuje po předchozím). Výsledkem je další +hudební výraz. + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f4 g } +@end lilypond + + +@subheading Obdoba: matematické výrazy + +Uspořádání výrazů pracuje podobně jako matematické +rovnice. Delší rovnice vzejde ze spojení +menších rovnic. Takovým rovnicím se říká též +výraz a jejich vymezení je rekurzivní, +takže mohou být vytvářeny jakkoli složité a dlouhé výrazy. +Přibližně tak, jak je to zde: + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +Je to řada (matematických) výrazů, v nichž je každý +výraz obsažen v následujícím (větším). Nejjednoduššími výrazy +jsou čísla, a větší vznikají spojením +výrazů za pomoci operátorů (jako @q{+}, +@q{*} a @q{/}) stejně jako závorky. Přesně jako matematické +výrazy mohou být i hudební výrazy jakkoli hluboce členité. +Je to potřeba pro složitou hudbu s mnoha hlasy. + + +@subheading Souběžné hudební výrazy: více notových osnov + +@cindex více notových osnov +@cindex Notové osnovy, více +@cindex Polyphonie +@cindex Vícehlasost +@cindex paralelní výrazy +@cindex Výrazy, paralelní +@cindex relativní noty a souběžně probíhající hudba +@cindex současné noty a relativní režim + +@funindex << +@funindex >> +@funindex << ... >> + +Slovníček: @rglos{polyphony}. + + +S touto technikou lze @notation{vícehlasou} hudbu zapisovat. +Hudební výrazy jsou jednoduše spojeny jako současně probíhající, a +v důsledku toho jsou současně zapsány jako vlastní +hlasy ve stejné notové osnově. Pro označení toho, že se dva hlasy mají +hrát ve stejnou dobu, jednoduše zadejte souběžné spojení hudebních výrazů +Je jen třeba vložit znak pro spojení. +Souběžně jsou hudební výrazy spojeny tak, že jsou uzavřeny uvnitř +@code{<<} a @code{>>}. V následujícím příkladu jsou souběžně spojeny +tři výrazy (každý obsahuje dvě oddělené noty): + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +Ještě je třeba poznamenat, že jsme zde pro každou úroveň uvnitř +zdrojového souboru zapsali jiné odsazení. Pro LilyPond nehraje +žádnou úlohu, kolik prázdných znaků je na začátku řádku, +ale pro člověka je volikou pomocí, když hned vidí, které +části zdrojového textu patří dohromady. + +@warning{Každá nota v souboru se vztahuje k předcházející +a nesouvisí s dvoučárkovaným C (@code{c''}), které je zadáno v +příkazu @code{@bs{}relative}. Závorky na to nemají žádný +vliv.} + + +@subheading Souběžné hudební výrazy: jedna notová osnova + +Aby určil počet notových osnov, provádí LilyPond rozbor +začátku prvního výrazu. Když se zde nachází jednotlivá nota, +zapíše se pouze jedna notová osnova, když se jedná o souběžné seřazení +výrazů, zapíše se více než jedna notová osnova. Následující +příklad začíná jednou notou: + + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e f } { c <> } >> | +} +@end lilypond + + +@node Více notových osnov +@subsection Více notových osnov +@translationof Multiple staves + +@cindex více osnov +@cindex Osnovy, více +@cindex Prostředí +@cindex Prostředí notového zápisu + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +Jak jsme viděli ve @ref{Vysvětlení hudebních výrazů,,vysvětlení hudebních výrazů}, jsou +zdrojové soubory LilyPondu sestaveny z hudebních výrazů. +Když zadání not začíná souběžným výrazem, vytváří se více notových +osnov. Je ale jistější a jednodušší +porozumět tomu, kdy jsou tyto notové osnovy vytvářeny otevřeně. + +Aby se napsala více než jedna notová osnova, je ke každému notovému výrazu, +který má stát ve vlastní notové osnově, vpředu připojen příkaz +@code{\new Staff}. Tyto součásti @code{Staff} (anglické slovo pro notovou +osnovu) jsou potom uspořádány souběžně se znaky @code{<<} a +@code{>>}: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +Příkaz @code{\new} začíná nové @qq{prostředí notového zápisu}. +Prostředím notového zápisu je prostředí, v němž jsou vykládány +hudební události (jako jsou noty nebo příkaz pro @code{\clef} (klíč)). +Pro jednoduché části jsou tato prostředí vytvářena automaticky. +U složitější hudby je ale nejlepší tato prostředí vytvořit otevřeně. + +Jsou různé typy prostředí. @code{Score} (notový zápis), +@code{Staff} (notová osnova) a @code{Voice} (hlas) +zpracovávají zadání not, zatímco prostředí @code{Lyrics} +(text) se používá k zapisování textů písní a +prostředí @code{ChordNames} (názvy akordů) se používá +k zapisování značek akordů. + +Tím, že se @code{\new} zapíše před nějakým hudebním výrazem, +se vytvoří větší výraz. V tomto smyslu skladba příkazu +@code{\new} připomíná znaménko minus v matematice. +Tak jako @math{(4+5)} je jeden výraz, který byl pomocí +@math{-(4+5)} rozšířen do většího výrazu, +jsou také hudební výrazy rozšiřovány pomocí příkazu @code{\new}. + +Označení taktů, která jsou zadána v jedné notové osnově, se +projevují u všech ostatních notových osnov. Předznamenání (údaj o +tónině) v jedné notové osnově oproti tomu @emph{neovlivňuje} tóninu +jiných notových osnov. Toto počínání je založeno na tom, že +notové zápisy s převeditelnými nástroji jsou častější než +notové zápisy s rozdílnými druhy taktů. + + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + +@node Seskupení notových osnov +@subsection Seskupení notových osnov +@translationof Staff groups + +@cindex Akoláda +@cindex Osnova pro klavír +@cindex Notová osnova pro klavír +@cindex Notová osnova pro sbor +@cindex Notový zápis pro sbor +@cindex Změna osnovy, ruční +@cindex Změna mezi osnovami, ruční +@cindex Změna hlasu mezi osnovami, ruční +@cindex Sborový notový zápis +@cindex Klavírní osnova +@cindex Notový zápis + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Slovníček: @rglos{brace}. + +Hudba pro klavír se obvykle zapisuje do dvou notových osnov, +které jsou spojeny @notation{složenými závorkami} +(akoláda). Pro vytvoření takové notové osnovy si člověk počíná +podobně jako v příkladu z +@ref{Více notových osnov,,více notových osnov}, jenže celý výraz je +nyní vložen do prostředí @code{PianoStaff}. + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> >> +@end example + +Zde je jeden malý příklad: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef "bass" c,,4 c' | e c | } + >> +} +@end lilypond + +Jiné typické skupiny notových osnov je možné vytvořit příkazy +@code{\new StaffGroup} pro orchestrální sazby a +@code{\new ChoirStaff} pro sborové notové osnovy. +Každá z těchto skupin notových osnov vytváří nové prostředí, +které se stará o to, aby závorky byly vytvořeny na začátku +notové osnovy, a který dodatečně rozhoduje i o tom, +zda jsou taktové čáry zapsány jen na notové osnově +nebo také mezi notovými osnovami. + + +@seealso +Doporučení pro notový zápis: +@ruser{Klávesové nástroje a jiné nástroje s více notovými osnovami}, +@ruser{Nechat ukázat osnovy}. + + +@node Spojení not do akordů +@subsection Spojení not do akordů +@translationof Combining notes into chords + +Slovníček: @rglos{chord} + +@cindex Akordy +@cindex Délka not v akordech + +@funindex < +@funindex > +@funindex < ... > + +Viděli jsme již nahoře, jak se dají vytvářet akordy tím, že +jsou uzavřeny dvojitými špičatými závorkami, a tak označeny jako +současně zaznívající. Obvyklým způsobem notového zápisu +akordů je ale jejich uzavření +@emph{jednoduchými} špičatými závorkami (@q{<} a @q{>}). +Dávejte pozor si na to, že všechny noty jednoho akordu +musejí mít stejnou dobu trvání a že tato doba trvání +se zapisuje po uzavírajících závorkách. + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +Akordy jsou v základě rovnocenné s jednoduchými notami: +téměř všechny značky, které je možné připojit k jednoduchým notám, +se dají připojit i k akordům. +Tak je možné s akordy spojit značky, jako jsou trámce nebo obloučky. +Avšak musí se zapsat vně špičatých závorek. + +@lilypond[verbatim,quote,relative=2] +8[ ] \>[ ]\! | +r4 8.\p 16( 4-. ) | +@end lilypond + +@seealso +Doporučení pro notový zápis: +@ruser{Akordové noty}. + + +@node Vícehlasost v jedné notové osnově +@subsection Vícehlasost v jedné notové osnově +@translationof Single staff polyphony + +@cindex Vícehlasost +@cindex více hlasů +@cindex Hlasy, více v jedné notové osnově +@cindex neviditelné noty +@cindex Zástupné noty +@cindex Noty, neviditelné + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +Vícehlasý notový zápis v LilyPondu není těžký, používá však určité +pojmy, o kterých se zde ještě nepojednávalo a které zde neměly být +vysvětleny. Místo toho následující části do těchto pojmů uvádějí +a podrobně je vysvětlují. + + +@seealso +Příručka k učení se: +@ref{Hlas obsahuje noty}. + +Doporučení pro notový zápis: +@ruser{Současně se objevující noty}. + + +@node Písničky +@section Písničky +@translationof Songs + +@cindex Text písně, zápis + +@funindex \addlyrics +@funindex addlyrics + +V této kapitole je laskavý čtenář uveden do spojení not s textem +a je ukázáno, jak se vytváří jednodušší listy s písničkami. + +@menu +* Zápis jednoduchých písní:: +* Vyrovnání textu s melodií:: +* Text pro více osnov:: +@end menu + + +@node Zápis jednoduchých písní +@subsection Zápis jednoduchých písní +@translationof Setting simple songs + +@cindex Text +@cindex Písničky +@cindex Text písně + +@funindex \addlyrics +@funindex addlyrics + +Slovníček: @rglos{lyrics}. + +Zde je začátek jednoduché dětské písně, +@notation{Dívky a chlapci jdou ven, aby si hráli}: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +K těmto notám je možné přidat text tím, že obojí +je spojeno příkazem @code{\addlyrics}. Text +se zadá tak, že každá slabika je oddělena prázdným znakem. + +@c KEEP LY +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Dívky a chlapci jdou | ven, aby si hráli, + } +>> +@end lilypond + +@warning{Je velmi důležité, aby byla poslední slabika oddělena prázdným +znakem nebo novým řádkem od uzavírajících složených závorek. +Pokud to tak uděláno není, je závorka vykládána jako část +slabiky, což vede k zvláštní chybě. Podívejte se také na +@rprogram{Apparent error in ../ly/init.ly}.} + +Jak noty tak také text jsou pokaždé orámovány složenými +závorkami a celý výraz je umístěn mezi +@w{@code{<< ... >>}}. Tím se zaručuje, že +text a noty jsou zapsány současně. + + +@node Vyrovnání textu s melodií +@subsection Vyrovnání textu s melodií +@translationof Aligning lyrics to a melody + +@cindex Text písně, vyrovnání +@cindex Vyrovnání textu písně +@cindex Slova s více slabikami +@cindex více slabik v textu písně +@cindex Melisma +@cindex Podtržení +@cindex Spojovník +@cindex Vyplňovací čára + +Slovníček: @rglos{melisma}, @rglos{extender line}. + +Další řádek písně pro děti zní: +@notation{A ten měsíc svítí tak jasně jako den}. Zapsaná vypadá +takto: + +@c KEEP LY +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Dívky a chlapci jdou | ven si hrát, + A | měsíc svítí tak | jasně jako den; | + } +>> +@end lilypond + +V anglickém originále je to: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +Když se kód hořejšího příkladu sestaví, měla by se ve výstupu +konzole/v souboru se zápisem objevit podobná varování: + +@example +song.ly:12:29: warning: barcheck failed at: 5/8 + The | moon doth shine as + | bright as day; | +song.ly:12:46: warning: barcheck failed at: 3/8 + The | moon doth shine as | bright as day; + | +@end example + +Toto je dobrý příklad užití přezkoušení taktů. Zde máme český překlad, ale když se na noty s anglickým původním textem podíváme +pečlivěji, je nám jasné, že nový textový řádek není srovnán s notami +správně. Slova @notation{měsíc} a @notation{svítí} (v angličtině jsou tu slovní obrat "moon doth" a slovo "shine"), by se měla +zpívat na dvě noty, ne na jednu. Říká se tomu @notation{melisma}, jednoslabičný +text pro více not, řada tónů zpívaná na jednu slabiku textu. Je více +možností, jak jednu slabiku prodloužit přes více not. Tou nejjednodušší +je zapsat kolem dotčených not legatový oblouček. Na +podrobnosti se podívejte v části @ref{Ligatury a legatové obloučky}. + +@c KEEP LY +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Dívky a chlapci jdou | ven si hrát, + A | měsíc svítí tak | jasně jako den; | + } +>> +@end lilypond + +Slova nyní jdou správně s notami, +ale automatický trámec pro noty u +@notation{svítí tak}, nevypadá správně. +Můžeme to opravit tak, že délku trámce vymezíme ručně, +aby odpovídala běžnému způsobu notového zápisu zpěvu. +Na podrobnosti se podívejte v části @ref{Automatické a ruční trámce}. + +@c KEEP LY +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Dívky a chlapci jdou | ven si hrát, + A | měsíc svítí tak | jasně jako den; | + } +>> +@end lilypond + +Jinak může být melisma zapsána i v textu tak, že +pro každou notu, která se má přeskočit, se v textu zapíže +podtržítko @code{_}: + +@c KEEP LY +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Dívky a chlapci jdou | ven si hrát, + A | měsíc svítí _ tak | jasně jako den; | + } +>> +@end lilypond + +Když se poslední slabika slova rozprostírá přes více not nebo přes +jednu velmi dlouhou notu, zapisuje se obvykle vyplňovací čára, +která se rozprostírá přes všechny noty, které ke slabice +patří. Tato vyplňovací čára se zapíše pomocí dvou podtržítek @code{__}. +Zde je příklad prvních tří taktů z +@notation{Didonina nářku}, +Purcellova díla @notation{Dido a Æneas}@footnote{Když jsem | položen, +jsem | položen __ na | zemi.}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +Žádný z dosavadních příkladů doposud nepoužil slova, jež by byla +delší než jedna slabika. +Taková slova se obvykle rozdělují na více +not, jedna slabika na notu, se spojovníky mezi slabikami. +Tyto slabiky se zapisují pomocí dvou znamének minus a +jsou LilyPondem napsány jako vystředěný spojovník mezi dvěma slabikami. +Zde je příklad, který ukazuje tento a všechny další triky, +jimiž lze vyrovnat text s notami: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +Některé texty, obzvláště v jazyce italském, potřebují opak: +více než jedna slabika se musí zapsat k jedné notě. +To je možné tak, že slabiky jsou spřáhnuty dohromady pomocí +jednoho podtržení @code{_}. Mezi tím se nesmí nacházet žádné prázdné +znaky, nebo tím, že se +rozhodující slabiky zapíší v uvozovkách @code{"}. +Zde je příklad z opery @notation{Figaro} od Rossiniho, kde se slabika +@notation{al} musí zazpívat na té samé notě @notation{go} slova @notation{Largo} +ve Figarově árii @notation{Largo al factotum}. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef "bass" + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + + +@seealso +Doporučení pro notový zápis: +@ruser{Notový zápis zpěvu}. + + +@node Text pro více osnov +@subsection Text pro více osnov +@translationof Lyrics to multiple staves + +@cindex Text písně ve více osnovách +@cindex Více osnov a text písně + +Lze použít jednoduché řešení s @code{\addlyrics}, aby byl text +zapsán v jedné nebo ve více notových osnovách. Zde je příklad z +Händelova díla @notation{Judas Maccabeus}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + +Ale notové zápisy, jež jsou složitější, než je tento příklad, +se lépe zapisují tak, že se stavba osnov oddělí od not +a textu zpěvu pomocí proměnných. Používání proměnných +se vysvětluje v části @ref{Pořádání děl pomocí proměnných}. + + +@seealso +Doporučení pro notový zápis: +@ruser{Notový zápis zpěvu}. + + +@node Poslední úpravy +@section Poslední úpravy +@translationof Final touches + +Toto je poslední kapitola cvičení. Zde se má předvést, +jak se u jednoduchých děl uplatňují poslední úpravy. +Současně slouží jako úvod pro zbytek příručky. + +@menu +* Pořádání děl pomocí proměnných:: +* Přidání názvu:: +* Absolutní označení not:: +* Po cvičení:: +@end menu + + +@node Pořádání děl pomocí proměnných +@subsection Pořádání děl pomocí proměnných +@translationof Organizing pieces with variables + +@cindex Proměnná +@cindex Značka +@cindex Makro +@cindex Přidělit proměnné +@cindex Používání proměnných +@cindex Přidělení proměnných +@cindex Proměnná, povolené znaky +@cindex Znaky, povolené v proměnných + +Když se všechny ty složky, o kterých se mluvilo, spojí ve větší +soubory, stanou se i hudební výrazy o hodně většími. +Ve vícehlasých souborech s mnoha osnovami to může vypadat velmi +neuspořádaně. Zmatek je ale možné velmi zřetelně omezit, +když se vymezí a používají @code{Proměnné}. + +Proměnné (označované i jako značky nebo makra) +mohou pojmout část not. Vymezují se tak, jak je popsáno následně: + +@example +označenéNoty = @{ @dots{} @} +@end example + +Obsah hudebního výrazu @code{označenéNoty} se pak může opět použít +později tím, že se před ně zapíše obrácené lomítko +(@code{\označenéNoty}), přesně tak, jak se to dělá u každého příkazu LilyPond. + +@lilypond[verbatim,quote] +violin = \new Staff { + \relative c'' { + a4 b c b + } +} + +cello = \new Staff { + \relative c { + \clef "bass" + e2 d + } +} + +{ + << + \violin + \cello + >> +} +@end lilypond + +@noindent +V názvech proměnných mohou být použita jen písmena abecedy, +žádná čísla nebo čárky. + +Proměnné se musejí vymezit @emph{před} vlastním hudebním +výrazem. Potom se ale mohou používat libovolně často, jakmile +už jednou byly vymezeny. Mohou být dokonce ustaveny, aby později +v souboru vytvořily novou proměnnou. Tím se dá písemná práce +ulehčit, když se skupiny not často opakují. + +@lilypond[verbatim,quote] +tripletA = \times 2/3 { c,8 e g } +barA = { \tripletA \tripletA \tripletA \tripletA } + +\relative c'' { + \barA \barA +} +@end lilypond + +Tyto proměnné se dají používat i pro mnoho dalších předmětů, +například: + +@example +Šířka = 4.5\cm +Name = "Tim" +aPětPapír = \paper @{ paperheight = 21.0 \cm @} +@end example + +Podle souvislostí lze takovou značku používat na různých +místech. V následujícím příkladu je ukázáno použití +právě vymezené značky: + +@example +\paper @{ + \aPětPapír + line-width = \Šířka +@} + +@{ + c4^\Name +@} +@end example + + + +@node Přidání názvu +@subsection Přidání názvu +@translationof Adding titles + +@cindex Název +@cindex header +@cindex Hlavička +@cindex Úvodní stránka + +@funindex \header +@funindex header + +Název, skladatel, číslo opusu a podobné údaje se vkládají +do prostředí @code{\header}. Toto prostředí se nachází mimo +hudební výrazy, většinou se prostředí +@code{\header} vkládá přímo do @ref{Číslo verze,,čísla verze}. + +@example +\version @w{"@version{}"} + +\header @{ + title = "Symphony" + composer = "Já" + opus = "Op. 9" +@} + +@{ + @dots{} Noty @dots{} +@} +@end example + +Když je soubor přeložen, jsou název a hudební skladatel +nadepsáni nad noty. Více informací o úvodním listu se nachází +v kapitole @ruser{Vytvoření názvu}. + + +@node Absolutní označení not +@subsection Absolutní označení not +@translationof Absolute note names + +@cindex Označení not +@cindex absolutní režim +@cindex absolutní hodnoty pro výšky tónů +@cindex Výšky tónů, absolutní hodnoty + +Až doteď jsme vždy používali @code{\relative}, abychom určili výšky tónů. +To je nejjednodušší způsob zadávání u většiny not. +Je ale ještě jiná možnost, jak popsat výšky tónů: pomocí +absolutního označení. + +Když se @code{\relative} vypustí, vykládají se všechny výšky tónů LilyPondu +jako absolutní hodnoty. @code{c'} je potom vždy jednočárkovaným +C, @code{b} je vždy malým h pod jednočárkovaným +C, a @code{g,} je vždy velkým G -- tedy notou +na poslední lince v basovém klíči. + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +Zde je stupnice přes čtyři oktávy: + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +Jak můžete vidět, musí se napsat velmi mnoho odsuvníků (jednoduchých uvozovek), +když se melodie zapisuje v sopránovém klíči. Podívejte se například na +tento Mozartův zlomek: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +Všechny tyto odsuvníky činí zdrojový text špatně čitelný a jsou +možným zdrojem chyb. Pomocí příkazu @code{\relative} je tento příklad +mnohem jednodušeji čitelný: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 | + b8. cis16 b8 d4 d8 | +} +@end lilypond + +Když člověk udělá chybu kvůli značce pro oktávu (@code{'} +nebo @code{,}) v režimu @code{\relative}, dá se najít velice +rychle, protože mnohé noty budou po sobě v nesprávné oktávě. +V absolutním režimu naproti tomu není jednotlivá chyba tak zřetelná, +a proto se nedá tak snadno najít. + +Přese všechno je absolutní režim dobrý pro noty s velmi velkými +skoky a především pro počítačem vytvářené soubory LilyPondu. + + +@node Po cvičení +@subsection Po cvičení +@translationof After the tutorial + +Když jste zvládli toto cvičení, měli byste se nejlépe sami +pokusit napsat několik kousků. Začněte s +@ref{Předlohy,,předlohami} a jednoduše do nich přidejte několik svých +not. Kdybyste potřeboval cokoliv, o čem se v cvičení nemluvilo, +podívejte se na část Doporučení k notovém zápisu, počínaje +@ruser{Hudební notový zápis,,hudebním notovým zápisem}. +Pokud budete chtít napsat noty pro nějaký nástroj nebo +soubor, pro který není žádná předloha, podívejte se na +@ref{Rozšíření příkladů}. + +Když už jste napsal několik krátkých skladeb, přečtěte si +zbytek příručky k učení se (Kapitola 3 až 5). Přirozeně +můžete ihned číst dále. Další kapitoly jsou ale napsány s +předpokladem, že ovládáte zadávací jazyk +LilyPondu. Další kapitoly také můžete zběžně prohlédnout +a pak se k nim opět vrátit, až získáte nějaké zkušenosti +s notovým zápisem. + +V tomto cvičení, stejně tak jako v celé příručce k učení se, +se na konci každé části nachází část @strong{Podívejte se také na}, +kde se nacházejí odkazy na jiné části. +Tyto odkazy byste po prvním přečtení neměl následovat; +teprve až si přečtete celou příručku k učení se, +můžete v případě potřeby následovat těchto odkazů, abyste si +prohloubili vědomosti k námětu. + +Nyní si, prosím, přečtěte +@ref{Přehled o příručkách}, jestliže jste to až doteď neudělal. +O LilyPondu je závratné množství informací, takže začátečníci se +jich hned správně nedopátrají. Když strávíte byť jen několik minut čtením +této části, můžete si ušetřit hodiny hledání na nesprávných místech +provázené pocity marnosti! + diff --git a/Documentation/cs/learning/fundamental.itely b/Documentation/cs/learning/fundamental.itely new file mode 100644 index 0000000000..76b5cff508 --- /dev/null +++ b/Documentation/cs/learning/fundamental.itely @@ -0,0 +1,3464 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + 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" +@c Translators: Pavel Fric + +@node Základní pojmy +@chapter Základní pojmy +@translationof Fundamental concepts + +Poté co ve cvičení bylo ukázáno, jak lze z jednoduchého textového souboru +vytvořit překrásně formátované hudební noty, jsou v této kapitole +představeny koncepty a techniky, jak se dají tvořit i složitější +notové zápisy. + +@menu +* Jak pracují vstupní soubory LilyPondu:: +* Hlasy obsahují noty:: +* Prostředí a rytci:: +* Rozšíření příkladů:: +@end menu + +@node Jak pracují vstupní soubory LilyPondu +@section Jak pracují vstupní soubory LilyPondu +@translationof How LilyPond input files work + +Vstupní formát pro LilyPond měl poměrně volnou podobu, takže +zkušení uživatele tu mají hodně volnosti v ovlivnění stavby jejich +zdrojových souborů. Pro nováčky ale tato ohebnost může být zprvu +matoucí. V této kapitole by proto z toho důvodu měla být představena +část z těchto staveb. Mnohé ale bude pro zjednodušení +vynecháno. Na úplný popis vstupního formátu se podívejte +na @ruser{Stavba souboru}. + +Většinu příkladů v této příručce představují malé úryvky, jako +je tento: + +@example +c4 a b c +@end example + +Jak je snad známo, nedá se takový úryvek v této podobě +přeložit. Tyto příklady jsou tedy jen zkrácenou formou +skutečných příkladů. Přinejmenším se musí dodatečně uzavřít ve +složených závorkách. + +@example +@{ + c4 a b c +@} +@end example + +Většina příkladů rovněž používá příkaz @code{\relative c'}. +Ten pro překlad souborů není nezbytný, ale ve většině případů +tak notová sazba vypadá zřídka, když se tento příkaz +vynechá. + +@lilypond[quote,fragment,ragged-right,verbatim] +\relative c'' { + c4 a b c +} +@end lilypond + +Úplné vymezení vstupního formátu se nachází +v kapitole @ruser{Stavba souboru}. + +@menu +* Uvedení do stavby souboru v LilyPondu:: +* Notový zápis je jedním (jediným) složeným hudebním výrazem:: +* Naskládání hudebních výrazů do sebe:: +* O ne-naskládatelnosti závorek a ligatur:: +@end menu + +@node Uvedení do stavby souboru v LilyPondu +@subsection Uvedení do stavby souboru v LilyPondu +@translationof Introduction to the LilyPond file structure + +@cindex Vstupní formát +@cindex Stavba souboru +@cindex Stavba, soubor + +Základní příklad vstupního souboru pro LilyPond zní: + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...složený hudební výraz...} % Celé noty přijdou sem! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Na základě pružnosti LilyPond je mnoho obměn tohoto schématu, +ale tento příklad slouží jako jednoduchý výchozí bod. + +@funindex \book +@funindex \score +@funindex book +@funindex score +@cindex book +@cindex score + +Až dosud ještě žádný z příkladů příkaz @code{\score@{@}} +nepoužil, neboť Lilypond takové dodatečné příkazy automaticky +vkládá v případě potřeby, když má vstupní soubor jednoduchou +stavbu. + +Podívejme se na jeden takový jednoduchý příklad: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +Na pozadí k tomu přichází ještě několik rovin: LilyPondovský kód +v hořejší podobě je ve skutečnosti zestručněním. I když by se +takové soubory daly napsat a také správně zapsat, znamená +úplný kód, který je zde míněn, vlastně: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +@noindent +Jinými slovy: Když vstupní soubor obsahuje nějaký jednoduchý výraz, +LilyPond bude soubor vykládat tak, jakoby byl onen výraz zadán uvnitř +výše ukázaných příkazů. Tato nutná stavba je vytvořena automaticky +v paměti při vyvolání LilyPondu, +aniž by si uživatel něčeho z toho všiml. + +@cindex Skrytá prostředí +@cindex Prostředí, skrytá + +@strong{Slovo varování je však vysloveno!} Mnohé z příkladů +v dokumentaci k LilyPondu vědomě vynechávají příklady @code{\new Staff} +a @code{\new Voice} k vytvoření notové osnovy a hlasu (obojí je v +LilyPondu tak zvané prostředí), +aby byla LilyPondem v paměti vytvořena skrytě. +Pro jednoduché dokumenty to obecně pracuje velmi dobře, u +složitějších notových zápisů z toho ale mohou povstat neočekávané +výsledky, částečně dokonce neočekávané prázdné notové osnovy. Jak +otevřeně vytvářet odpovídající prostředí v takovém případě, +se podívejte na @ref{Prostředí a rytci,,prostředí a rytce}. + +@warning{Když se zadává více jak dvojice notových řádků, +doporučuje se vytvořit notové osnovy a hlasy vždy otevřeně +pomocí @code{\new Staff} a @code{\new Voice}.} + +V této chvíli se ale chceme vrátit k našemu prvnímu příkladu a +blíže se podívat jen na příkaz @code{\score}. + +Notový zápis (@code{\score}) musí vždy začínat nějakým hudebním +výrazem. To je koneckonců každá hudba, počínaje jednotlivou +notou až po rostoucí notový zápis s mnoha notovými osnovami +(zde označeno pomocí @code{GrandStaff}): + +@example +@{ + \new GrandStaff << + @var{...zde celý notový zápis...} + >> +@} +@end example + +@noindent +Protože se vše nachází uvnitř složených závorek @code{@{ ... @}}, +zachází se s tím jako s jediným hudebním výrazem. + + +Jak již bylo řečeno předtím, může blok @code{\score} obsahovat i jiné věci, jako například + +@example +\score @{ + @{ c'4 a b c' @} + \layout @{ @} + \midi @{ @} + \header @{ @} +@} +@end example + +@funindex \header +@funindex \layout +@funindex \midi +@funindex header +@funindex layout +@funindex midi +@cindex header +@cindex midi +@cindex Layout +@cindex Hlavička + +@noindent +Jak je vidět, jsou ty tři příkazy @code{\header}, @code{\layout} a +@code{\midi} zvláštní povahy: V protikladu k mnoha jiným příkazům, +které také začínají zpětným lomítkem @code{\}, @emph{nejsou} hudebním výrazem +a také nejsou částí nějakého hudebního výrazu. Z toho důvodu mohou být umístěny +jak dovnitř bloku @code{\score} tak mimo +něj. Ve skutečnosti jsou tyto příkazy většinou umisťovány mimo blok +@code{\score}, například se příkaz @code{\header} nachází +velice často nad prostředím @code{\score}, jak ukazuje příklad na +začátku tohoto oddílu. Pracuje to právě tak dobře. + +Dvěma dosud neviděnými příkazy jsou +@code{\layout @{ @}} a @code{\midi @{@}}. Když se objeví v nějakém +souboru, vede to k tomu, že Lilypond vytvoří tisknutelný soubor PDF +popřípadě soubor MIDI. Přesněji jsou popsány v uživatelské příručce - +doporučení k notovému zápisu -- @ruser{Rozvržení notového zápisu} a +@ruser{Vytváření souborů MIDI}. + +@cindex Notové zápisy, více +@cindex Prostředí book, skryté +@cindex Skryté prostředí book +@funindex \book +@funindex book + +Váš LilyPondovský kód může obsahovat více bloků @code{\score}. +Každý z nich je vykládán jako samostatný notový zápis, ovšem +všechny jsou umístěny v tomtéž výstupním souboru. +Příkaz @code{\book} není otevřeně nezbytný -- je vytvořen +skrytě. Když však má být vytvořen pro každý blok @code{\score} v +souboru @file{.ly} vlastní výstupní soubor, +potom se musí každý z těchto bloků zapsat do vlastního bloku @code{\book}: + Každý blok @code{\book} pak vytváří vlastní výstupní soubor. + +Shrnutí: + +Každý blok @code{\book} vytváří vlastní výstupní soubor (např. soubor +PDF). Pokud jste otevřeně žádný takový blok nezadali, +LilyPond celý obsah souboru zapíše dovnitř jednoho jediného +skrytého bloku @code{\book}. + +Každý blok @code{\score} popiseje jeden samostatný hudební kus +uvnitř bloku @code{\book}. + +@cindex Prostředí Layout, umístění +@cindex Umístění prostředí layout + +Každý blok @code{\layout} ovlivňuje @code{\score} nebo +@code{\book}, ve kterém se vyskytuje. Tak působí například blok +@code{\layout} uvnitř bloku @code{\score} jen na tento jeden +blok a celý jeho obsah, blok @code{\layout} mimo +blok @code{\score} (a proto uvnitř skrytě vytvořeného +otevřeně zadaného bloku @code{\book}) však na +všechny bloky @code{\score} uvnitř tohoto bloku @code{\book}. + +Více podrobností se nachází v části @ruser{Více notových zápisů v knize}. + +@cindex Proměnné +@cindex Identifikátor + +Dobrou možností pro zjednodušení jsou vlastní vymezené proměnné, +jak je to také ukázáno v @ref{Pořádání děl pomocí proměnných}. +Všechny předlohy používají tuto možnost: + +@example +melodie = \relative c' @{ + c4 a b c +@} + +\score @{ + @{ \melodie @} +@} +@end example + +Když LilyPond zpracovává tento soubor, bere obsah +z @code{melodie} (vše po rovnítku) a vkládá to, +kdykoli vidí @code{\melodie}. Názvy jsou +volně volitelné, proměnná se právě tak dobře může +jmenovat @code{melodie}, @code{GLOBAL}, @code{praváRukaKlavír}, +nebo @code{cokoliDalšího}. +Jako název proměnné se dá použít skoro jakýkoli oblíbený název, +musí se v něm ovšem vyskytovat jen písmena (takže žádná čísla, podtržítka, +zvláštní znaky, atd.) a nesmí znít jako příkaz pro LilyPond. Pro více +informací se podívejte na +@ref{Úspora psaní na stroji pomocí proměnných a funkcí,,úsporu psaní na stroji pomocí proměnných a funkcí}. Přesně jsou +tato omezení popsána v části @ruser{Stavba souboru}. + + +@seealso +Úplné vymezení vstupního souboru se nachází v +@ruser{Stavba souboru}. + + +@node Notový zápis je jedním (jediným) složeným hudebním výrazem +@subsection Notový zápis je jedním (jediným) složeným hudebním výrazem +@translationof Score is a (single) compound musical expression + +@funindex \score +@funindex score +@cindex score +@cindex Notový zápis +@cindex Hudební kus +@cindex Složený hudební výraz +@cindex Hudební výraz, složený + + +V předchozí kapitole, @ref{Uvedení do stavby souboru v LilyPondu}, +byla popsána obecná stavba jednoho LilyPondovského zdrojového +souboru. Ale zjevně jsme vypustili nejdůležitější +otázku, totiž jak se zjistí, co se má napsat +po @code{\score}. + +Ve skutečnosti to ale není vůbec žádným tajemstvím. Tento +řádek je odpovědí: + +@quotation +@emph{Notový zápis začíná vždy @code{\score}, který je následován +jedním hudebním výrazem.} +@end quotation + +@noindent +Možná byste si měl ještě jednou zběžně přečíst, abyste pochopil, co jsou to hudební výrazy, +@ref{Vysvětlení hudebních výrazů,,vysvětlení hudebních výrazů}. V této +kapitole bylo ukázáno, jak se velké hudební výrazy +skládají z malých částí. Noty mohou být spojeny s akordy +atd. Nyní ale jdeme v jiném směru a pozorujeme, +jak se dá rozložit velký hudební výraz. Kvůli zjednodušení +v našem příkladu použijeme jen jednoho zpěváka a +klavír. Nepotřebujeme žádnou skupinu +osnov (@code{StaffGroup}), která jednoduše způsobeje jen to, +že osnovy jsou spojeny závorkami, seskupuje je; ty tedy budou +odstraněny. @emph{Potřebujeme} ale osnovy pro zpěváka a klavír. + +@example +\score @{ + @{ + << + \new Staff = "Zpěvák" << + >> + \new PianoStaff = "Klavír" << + >> + >> + @} + \layout @{ @} +@} +@end example + +Zde byly osnovy pojmenovány: @qq{Zpěvák} a +@qq{Klavír}. To v tomto případě není přímo nutné, +ale je dobré zvyknout si na tento způsob psaní, aby se hned +poznalo, o kterou osnovu se jedná. + +K zapamatování: @code{<<} a @code{>>} jsou noty vysázeny +zároveň. To způsobuje, že se hlasová část a klavírní osnova objevují +v notovém zápisu nad sebou. Konstrukce @code{<< ... >>} pro zpěvákovu osnovu +v příkladu výše není nutná, protože zde se mají vkládat noty jen +jednoho hlasu, ale @code{<< ... >>} +namísto závorek jsou nezbytné, hned jak se má vkládat +více než jeden hlas, tedy dva a více současných výrazů, nebo jeden notový hlas a text +písně. V našem případě se má zapsat jeden hlas s textem písně, +takže jsou potřeba špičaté závorky. Noty přidáme teprve později, +pro teď tedy přidáme nějaké noty a text. Pokud si nevzpomínáte, +jak se text písně zapisuje, přečtěte si ještě +jednou o @code{\addlyrics} v @ref{Zápis jednoduchých písní,,zápisu jednoduchých písní}. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +Nyní máme mnohem více podrobností. Máme osnovu (angl. staff) +pro jednoho zpěváka, ve které se zase nachází jeden hlas +(angl. voice). @code{Voice} znamená pro LilyPond hlas (jak +zazpívaný tak zahraný; prostě soubor not, nikoli nutně zpívaných zpěvákem + -- například housle hrají jeden hlas) a případně dodatečný text. Dodatečně +se zapíší dvě notové osnovy pro klavír příkazem @code{\new +PianoStaff}. @code{PianoStaff} označuje prostředí klavíru (procházející +taktové čáry a složené závorky na začátku), v němž se potom opět +zřizují dvě vlastní osnovy ("nahoře" pro pravou ruku a +"dole" pro levou), i když spodní osnova musí ještě dostat +basový klíč. + +Nyní bychom do tohoto prostředí mohli začít vkládat noty. Uvnitř +složených závorek vedle @code{\new Voice = "Zpěvní hlas"} +bychom mohli zapisovat + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +@noindent +Ale když se soubor píše takto přímo, začne být +část @code{\score} velmi dlouhá a je dosti obtížné porozumět tomu, +jak vše souvisí. Z toho důvodu se nabízí použití identifikátorů +(nebo jinak také proměnných). Byly vysvětleny na začátku předchozí +části, jak si zajisté vzpomínáte? Abychom zajistili, +že obsah proměnné @code{text} je vykládán jako text písně, +interpretiert wird, uvedeme jej @code{\lyricmode}. Tak jako +@code{\addlyrics}, je tímto vstupní režim přepnut na +text písně. Bez tohoto příkazu by se LilyPond pokoušel vykládat obsah +proměnné jako noty a přitom by docházelo k vytváření +množství chyb. (Kromě toho je dostupných ještě několik dalších +zadávacích režimů, podívejte se na @ruser{Vstupní režimy}.) + +Takže nyní máme, když přidáme několik not a basový klíč +pro levou ruku, následující příklad: + +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e } + +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond + +Při zapisování (nebo při čtení) prostředí @code{\score} +by se mělo postupovat pomalu a pečlivě. Nejlepší je začít s největšími +útvary, a pak vymezit v nich obsažené menší útvary. Také pomáhá velice +dbát na přesné odsazení, aby každý řádek, jenž přísluší k +téže úrovni, skutečně vodorovně začínal na tom +samém místě. + + +@seealso +Doporučení k notovému zápisu: @ruser{Stavba notového zápisu}. + + +@node Naskládání hudebních výrazů do sebe +@subsection Naskládání hudebních výrazů do sebe +@translationof Nesting music expressions + +@cindex Notové osnovy, dočasné +@cindex Ossia +@cindex Dočasné notové osnovy + +Notové osnovy (prostředí @q{Staff}) není bezpodmínečně potřeba +vytvořit hned na začátku -- mohou být uvedeny i kdykoli +později. To je obzvláště užitečné při vytváření oddílů +@rglosnamed{ossia,Ossias}. Zde následuje krátký příklad toho, +jak je možné vytvořit dodatečnou dočasnou notovou osnovu +jen pro dobu trvání tří not: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Jak je vidět, velikost notového klíče je tatáž, jaká se vyskytuje +i při změně klíče -- o něco menší, než +jakou má klíč na začátku notové osnovy. Toto je obvyklé u +notových klíčů, které jsou zapsány uvnitř notové osnovy. + +@cindex Notová osnova, umístění +@cindex Umístění notové osnovy + +Oddíl ossia může být zapsán i mimo hlavní notovou +osnovu: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } { f8 f c } + >> + r4 | + } +} +@end lilypond + +Tento příklad používá příkaz @code{\with}, který bude později +gvysvětlen ještě přesněji. Jím lze měnit výchozí chování jedné +notové osnovy: Zde se jednoduše říká, že nová notová osnova +se má umístit nad již jsoucí osnovu s názvem +@qq{main} namísto výchozího umístění, které je +pod ní. + + +@seealso +Ossia jsou často tisknuta bez notového klíče a bez taktového označení, +většinou také o něco menší, než jiné osnovy. Toto je přirozeně možné +i v LilyPondu, vyžaduje to ale příkazy, jež dosud ještě nebyly +představeny. Podívejte se na @ref{Velikost předmětů,,velikosti předmětů} +a @ruser{Osnovy ossia}. + + +@node O ne-naskládatelnosti závorek a ligatur +@subsection O ne-naskládatelnosti závorek a ligatur +@translationof On the un-nestedness of brackets and ties + +@cindex Závorky, naskládání +@cindex Naskládání závorek +@cindex Typy závorek + +Již jste při psaní vstupního souboru pro LilyPond poznali +četné různé druhy závorek a staveb na způsob závorek. Tyto +se řídí různými pravidly, která mohou zpočátku působit +matoucím dojmem. Předtím než budou představena přesná pravidla, +pojďme si tyto různé druhy závorek a staveb na způsob závorek +krátce projít znovu: + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Druh závorek + @tab Funkce +@item @code{@{ .. @}} + @tab Uzavírá postupnou část hudby +@item @code{< .. >} + @tab Uzavírá noty jednoho akkordu +@item @code{<< .. >>} + @tab Uzavírá souběžné hudební výrazy +@item @code{( .. )} + @tab Označuje začátek a konec obloučku +@item @code{\( .. \)} + @tab Označuje začátek a konec frázovacího obloučku +@item @code{[ .. ]} + @tab Označuje začátek a konec ručně vytvořeného trámce +@end multitable + +Dodatečně by snad měly být ještě dále zmíněny některé další +konstrukce, které noty ať už jakkoli spojují: +ligatury (označované vlnovkou @code{~}), +trioly (psané jako @code{\times x/y @{..@}}) und +ozdoby (poznamenávané jako @code{\grace@{..@}}). + +Mimo LilyPond vyžaduje běžné používání závorek, +aby byly jejich odpovídající druhy správně seskládány, +jako je tomu například tady @code{<< [ @{ ( .. ) @} ] >>}. Uzavírající +závorky přitom přicházejí v obráceném pořadí k +otevírajícím závorkám. Toto je také v LilyPondu +@strong{nutnost} pro ony tři druhy závorek, jež byly v hořejší +tabulce popsány slovem @q{uzavírá} -- musí být správně +vkládány. +Nicméně zbývající stavby na způsob závorek (v tabulce popsány +slovem @q{označuje}), ligatury a trioly +bezpodmínečně s jinými závorkami nebo stavbami na způsob závorek +seskládány být čistě @strong{nemusí}. Vlastně také ani nejsou nějakými +závorkami v tom smyslu, že by něco svíraly, nýbrž mnohem více +jsou ukazateli, na kterém místě určitý hudební předmět +začíná nebo končí. + +Tak tedy může například takový frázovací oblouček začínat před +ručně vloženým trámcem, a přece končit již před jeho koncem. +Toto sice může z hudebního pohledu dávat málo smyslu, ale v LilyPondu +je možné i toto: + +@lilypond[quote,verbatim,ragged-right,relative=2] +{ g8\( a b[ c b\) a] g4 } +@end lilypond + +Ve všeobecnosti se dá říct, že mohou být různé druhy závorek, +staveb na způsob závorek, legatových obloučků, +triol a ozdob libovolně dávány dohromady. +Následující příklad ukazuje trámec, který sahá až k triole +(řádek 1), ligaturu, která rovněž dosahuje k triole +(řádek 2), trámec a ligaturu sahající k triole, +oblouček, který běží přes dvě trioly, jakož i frázovací +oblouček, který začíná u trioly (řádky 3 a 4). + +@lilypond[quote,verbatim,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.\) +} +@end lilypond + + +@node Hlasy obsahují noty +@section Hlasy obsahují noty +@translationof Voices contain music + +Zpěváci potřebují ke zpívání hlasy, a LilyPond je potřebuje také: +ve skutečnosti jsou všechny noty pro všechny nástroje zapsány v +v notovém zápisu uvnitř hlasů. Hlas je v LilyPondu +tím nejzákladnějším pojmem. + +@menu +* Slyším hlasy:: +* Přímo vyjádřené začátky hlasů:: +* Hlasy a zpěvy:: +@end menu + +@node Slyším hlasy +@subsection Slyším hlasy +@translationof I'm hearing Voices + +@cindex Vícehlasost +@cindex Úrovně +@cindex Vícehlasy +@cindex Hlasy, více +@cindex Voice context +@cindex context, Voice +@cindex Prostředí hlasu +@cindex Prostředí, hlas +@cindex Současné noty +@cindex Hlasy proti akordům +@cindex Akordy proti hlasům +@cindex Noty současně + +Nejnižší, nejzákladnější a nejvnitřnější úrovně v LilyPondovském notovém +zápisu jsou nazvány @qq{Voice context} (prostředí hlasu) nebo také jen @qq{Voice} +(hlas). Hlasy jsou v jiných notačních programech někdy označovány +jako @qq{layer} (úroveň). + +Skutečně je úroveň hlasu tou jedinou, která opravdu může obsahovat +noty. Pokud není otevřeně vytvořeno žádné prostředí hlasu, +je jedno vytvořeno automaticky, jak to bylo ukázáno na začátku +této kapitoly. Některé nástroje, jako je tomu například u hoboje, mohou +zároveň zahrát jen jednu notu. Noty pro takové nástroje jsou jednohlasé +a potřebují jen jeden hlas. Nástroje, které současně dokáží zahrát +více not, jako klavír, naproti tomu často potřebují více +hlasů, aby mohly popsat různé současně zaznívající noty +s často rozdílnými rytmy. + +Jeden hlas přirozeně může v jednom akordu obsahovat více not +-- takže kdy přesně je potřeba více hlasů? Podívejme se nejprve na +tento příklad se čtyřmi akordy: + +@lilypond[quote,verbatim,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +To lze vyjádřit tak, že se pro ukázání akordů použijí jednoduché špičaté +závorky @code{< ... >}. A pro to je potřeba jen jednoho +hlasu. Ale předpokládejme, že by Fis bylo vlastně osminovou +notou, kterou následuje osminová nota G (jako průchodný tón +k A)? Zde máme dvě noty, které začínají ve stejnou dobu, +ale mají rozdílné doby trvání: čtvrťová nota D a osminová nota +Fis. Jak by je šlo zapsat? Jako akord je napsat nejde, +protože v jednom akordu musejí mít všechny noty stejnou +délku. Ani nemohou být zapsány jako po sobě jdoucí noty, +neboť začínají v ten samý čas. V takovém případě tedy potřebujeme dva +hlasy. + +Jak se to ale vyjádří v LilyPondovské skladbě? + +@funindex << \\ >> +@funindex \\ + +Nejjednodušším způsobem, jak provést zápis částí s více než jedním hlasem +na osnovu, je hlasy zapsat za sebou (pokaždé se závorkami +@code{@{ ... @}}), a pak je souběžně spojit špičatými závorkami +(@code{<<...>>}). Obě části ještě dodatečně musejí být jedna od druhé +odděleny dvěma zpětnými lomítky (@code{\\}), +aby byly rozpoznány jako dva různé hlasy. Bez těchto oddělovačů by +byly zapsány jako jeden hlas. Tato technika je obzvláště vhodná, když +se jedná o noty, které jsou jako hudba především jednohlasé, +v nichž se ale příležitostně sem tam vyskytují místa, která jsou +vícehlasá. + +Takto to vypadá, když jsou akordy rozděleny do dvou hlasů +a k průchodnému tónu je ještě přidán legatový oblouček: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Všimněte si, že nožičky druhého hlasu nyní ukazují dolů. + +Tady je jiný jednoduchý příklad: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> +<< { a2. r4 } \\ { fis2. s4 } >> +@end lilypond + +Není nutné používat pro každý takt vlastní stavbu +@code{<< \\ >>}. U hudby s jen málo notami na takt to může +zdrojový soubor udělat čitelnějším, ale když se v jednom taktu vyskytuje +mnoho not, může být lepší napsat každý hlas odděleně, +jako zde: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + +Tento příklad má jen dva hlasy, ale stejné stavby lze použít, +když máme tři nebo více hlasů, tak, že přidáme více oddělovačů, +zpětných lomítek. + +Hlasová prostředí nesou názvy @code{"1"}, @code{"2"} atd. V každém +z těchto prostředí je nastaven svislý směr nožiček, legatových obloučků, +ligatur, značek pro dynamiku atd. tak, jak se patří. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> | + << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | +} +@end lilypond + +Tyto hlasy jsou všechny odděleny od hlavního hlasu, který obsahuje noty +mimo stavbu @code{<< .. >>}. Pojmenujme ji +@emph{souběžná stavba}. Ligatury a legatové obloučky +mohou dohromady spojovat pouze noty uvnitř těchže hlasů a nemohou tedy +přesahovat do souběžné stavby a ze souběžné stavby. Obráceně platí, +že současné hlasy z vlastní souběžné stavby ve stejné notové osnově +jsou týmiž hlasy. Na všechny souběžné stavby se vztahují i jiné +s prostředím hlasu spojené vlastnosti. Zde je stejný příklad, +ale s různými barvami a hlavičkami not pro každý hlas. +Všimněte si, že změny v jednom hlasu se nevztahují na jiné hlasy, +ale nadále trvají v tomtéž hlase a jsou v něm přítomny ještě později. +Všimněte si také, že spojené noty mohou být rozděleny přes stejný hlas +do dvou staveb, jak je to ukázáno zde na modrém trojúhelníkovém hlase. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Příkazy @code{\voiceXXXStyle} jsou tu především k tomu, aby se používaly +v vzdělávacích dokumentech, jako je tento. +Mění barvu notové hlavičky, nožičky a trámce, a dodatečně +podobu notové hlavičky, takže se hlasy dají snadno od sebe +rozlišit. První hlas je nastaven jako červený kosočtverec, +druhý hlas je nastaven jako modrý trojúhelník, třetí hlas je +nastaven jako zelený kruh s křížkem a čtvrtý hlas (který tu použit +není) má tmavěčervený kříž. @code{\voiceNeutralStyle} (zde také +není použit) změny vrací zpět na výchozí styl. Později bude +ukázáno, jak mohou být příkazy, jako je tento, vytvářeny samotným +uživatelem. Podívejte se také na @ref{Viditelnost a barva předmětů} a +@ref{Použití proměnných pro ladění}. + +@cindex Vícehlasost a relativní notační režim +@cindex Relativní notační režim a vícehlasost + +Vícehlasost nemění vztahy not uvnitř bloku +@code{\relative}. Každá nota je nadále počítána ve vztahu k +předchozí notě, nebo poměrně k první notě předchozího +akordu. Tak například zde je spočítáno + +@example +\relative c' @{ NoteA << < NoteB NoteC > \\ NoteD >> NoteE @} +@end example + +@noindent +@code{NoteB} se zřetelem na @code{NoteA} @* +@code{NoteC} se zřetelem na @code{NoteB}, ne @code{noteA}; @* +@code{NoteD} se zřetelem na @code{NoteB}, ne @code{NoteA} oder +@code{NoteC}; @* +@code{NoteE} se zřetelem na @code{NoteD}, ne @code{NoteA}. + +Jinou možností je umístit příkaz @code{\relative} na začátek +před každý hlas. To se nabízí, když jsou hlasy od sebe ve větší +vzdálenosti. Může to být, když jsou noty v hlasech +široce odděleny, přehlednější. + +@example +\relative c' @{ NoteA ... @} +<< + \relative c'' @{ < NoteB NoteC > ... @} +\\ + \relative g' @{ NoteD ... @} +>> +\relative c' @{ NoteE ... @} +@end example + +Pojďme konečně rozebrat hlasy ve složitějším kuse hudby. +Zde jsou noty prvních dvou taktů Chopinových +@notation{Deux Nocturnes}, Op. 32. Tento příklad bude později použit +v této a další kapitole, aby na něm byly názorně ukázány různé techniky, +jak vytvářet noty. Proto si na tomto místě v kódu nevšímejte čehokoli, +co by vám přišlo záhadné, a soustřeďte se jen na noty +a hlasy. Složitější věci budou vysvětleny v pozdějších částech. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +Die Richtung der Hälse wird oft benutzt, um anzuzeigen, dass zwei +gleichzeitige Melodien sich fortsetzen. Hier zeigen die Hälse aller +oberen Noten nach oben und die Hälse aller unteren Noten nach unten. +Das ist der erste Anhaltspunkt, dass mehr als eine Stimme benötigt +wird. + +Aber die wirkliche Notwendigkeit für mehrere Stimmen tritt erst +dann auf, wenn unterschiedliche Noten gleichzeitig erklingen, aber +unterschiedliche Dauern besitzen. Schauen Sie sich die Noten +auf dem dritten Schlag im ersten Takt an. Das As ist eine punktierte +Viertel, das F ist eine Viertel und das Des eine Halbe. Sie können +nicht als Akkord geschrieben werden, denn alle Noten in einem Akkord +besitzen die gleiche Dauer. Sie können aber auch nicht nacheinander +geschrieben werden, denn sie beginnen auf der gleichen Taktzeit. Dieser +Taktabschnitt benötigt drei Stimmen, und normalerweise schreibt man +drei Stimmen für den ganzen Takt, wie im Beispiel unten zu sehen ist; +hier sind unterschiedliche Köpfe und Farben für die verschiedenen Stimmen +eingesetzt. Noch einmal: der Quellcode für dieses Beispiel wird später +erklärt werden, deshalb ignorieren Sie alles, was Sie hier nicht +verstehen können. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> + 1 +} +@end lilypond + +Versuchen wir also, diese Musik selber zu notieren. Wie wir sehen +werden, beinhaltet das einige Schwierigkeiten. Fangen wir an, wie +wir es gelernt haben, indem wir mit der @code{<< \\ >>}-Konstruktion +die drei Stimmen des ersten Taktes notieren: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des } + >> | + 1 | +} +@end lilypond + +@cindex Hals nach unten +@cindex Hals nach oben +@cindex Notenhals, Richtung +@cindex Richtung des Notenhalses +@cindex Notenhalsrichtung +@cindex Stimmen und Notenhalsrichtung +@cindex Notenhalsrichtung in Stimmen + +Die Richtung des Notenhalses wird automatisch zugewiesen; die ungeraden +Stimmen tragen Hälse nach oben, die gerade Hälse nach unten. Die Hälse +für die Stimmen 1 und 2 stimmen, aber die Hälse in der dritten Stimme +sollen in diesem Beispiel eigentlich nach unten zeigen. Wir können das +korrigieren, indem wir die dritte Stimme einfach auslassen und die +Noten in die vierte Stimme verschieben. Das wird einfach vorgenommen, +indem noch ein Paar @code{\\}-Stimmen hinzugefügt wird. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des } + >> | + 1 | +} +@end lilypond + +@noindent +Wie zu sehen ist, ändert das die Richtung der Hälse, aber zeigt ein +anderes Problem auf, auf das man manchmal bei mehreren Stimmen stößt: +Die Hälse einer Stimme können mit den Hälsen anderer Stimmen kollidieren. +LilyPond erlaubt Noten in verschiedenen Stimmen sich auf der gleichen +vertikalen Position zu befinden, wenn die Hälse in entgegengesetzte +Richtungen zeigen, und positioniert die dritte und vierte Stimme dann +so, dass Zusammenstöße möglichst vermieden werden. Das funktioniert +gewöhnlich recht gut, aber in diesem Beispiel sind die Noten der untersten +Stimme eindeutig standardmäßig schlecht positioniert. LilyPond bietet +verschiedene Möglichkeiten, die horizontale Position von Noten +anzupassen. Wir sind aber noch nicht so weit, dass wir diese Funktionen +anwenden könnten. Darum heben wir uns das Problem für einen späteren Abschnitt auf; siehe @code{force-hshift}-Eigenschaft in +@ref{Oprava překrývajících se not}. + + +@seealso +Notationsreferenz: @ruser{Mehrere Stimmen}. + + +@node Přímo vyjádřené začátky hlasů +@subsection Přímo vyjádřené začátky hlasů +@translationof Explicitly instantiating voices + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex Voice context, erstellen von +@cindex Stimmenkontexte, erstellen von + +Voice-Kontexte können auch manuell innerhalb +eines @code{<< >>}-Abschnittes initiiert werden. Mit den Befehlen +@code{\voiceOne} bis hin zu @code{\voiceFour} kann jeder Stimme +entsprechendes Verhalten von vertikaler Verschiebung und Richtung +von Hälsen und anderen Objekten hinzugefügt werden. In längeren +Partituren können die Stimmen damit besser auseinander gehalten +werden. + +Die @code{<< \\ >>}-Konstruktion, die wir im vorigen Abschnitt +verwendet haben: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +ist identisch mit + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Beide würden folgendes Notenbild erzeugen: + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex Stimmen, mehrere zu einer zusammenführen +@cindex eine Stimme wiederherstellen + +Der @code{\voiceXXX}-Befehl setzt die Richtung von Hälsen, +Bögen, Artikulationszeichen, Text, Punktierungen und Fingersätzen. +@code{\voiceOne} und @code{\voiceThree} lassen diese Objekte +nach oben zeigen, @code{\voiceTwo} und @code{\voiceFour} +dagegen lassen sie abwärts zeigen. Diese Befehle erzeugen eine +horizontale Verschiebung, wenn es erforderlich ist, um Zusammenstöße +zu vermeiden. Der Befehl +@code{\oneVoice} stellt wieder auf das normale Verhalten um. + +Schauen wir uns in einigen einfachen Beispielen an, was genau +die Befehle @code{\oneVoice}, @code{\voiceOne} und @code{voiceTwo} +mit Text, Bögen und Dynamikbezeichnung anstellen: + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +Schauen wir und nun drei unterschiedliche Arten an, den gleichen +Abschnitt polyphoner Musik zu notieren, jede Art mit ihren +Vorteilen in unterschiedlichen Situationen. Wir benutzen dabei +das Beispiel vom vorherigen Abschnitt. + +Ein Ausdruck, der direkt innerhalb einer @code{<< >>}-Umgebung +auftritt, gehört der Hauptstimme an. Das ist nützlich, wenn zusätzliche +Stimme auftreten, während die Hauptstimme sich fortsetzt. Hier also +eine bessere Version des Beispiels aus dem vorigen Abschnitt. Die +farbigen Kreuz-Notenköpfe zeigen, dass die Hauptstimme sich jetzt in +einem einzigen Stimmen (@code{voice})-Kontext befindet. Somit kann ein +Phrasierungsbogen ober sie gesetzt werden. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b4 c2 | + } + >> +} +@end lilypond + +@cindex Verschachteln von musikalischen Ausdrücken +@cindex Verschachteln von gleichzeitigen Ausdrücken +@cindex Ausdrücke, Verschachteln von +@cindex Stimmen, temporär +@cindex Stimmen, Verschachteln von +@cindex Verschachteln von Stimmen +@cindex temporäre Stimmen + +Tiefer verschachtelte polyphone Konstrukte sind möglich, und +wenn eine Stimme nur kurz auftaucht, kann das der bessere Weg +sein, Noten zu setzen: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e2) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b4 c2 | + } + >> + } + >> +} +@end lilypond + +@cindex Platzhalternoten +@cindex unsichtbare Noten +@cindex Noten verstecken + +Diese Methode, neue Stimmen kurzzeitig zu verschachteln, bietet sich +an, wenn nur sehr kleine Abschnitte polyphonisch gesetzt sind. Wenn +aber die ganze Partitur polyphon ist, ist es meistens klarer, direkt +unterschiedliche Stimmen über die gesamte Partitur hinweg einzusetzen. +Hierbei kann man mit unsichtbaren Noten dann die Stellen überspringen, +an denen die Stimme nicht auftaucht, wie etwa hier: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b c2 | + } +>> +@end lilypond + +@subsubheading Notenkolumnen + +@cindex Notenkolumne +@cindex Notenkollision +@cindex Zusammenstöße von Noten +@cindex Kollisionen von Noten +@cindex Vertikale Position +@cindex shift-Befehle +@cindex Verschieben von Noten +@funindex \shiftOff +@funindex \shiftOn +@funindex \shiftOnn +@funindex \shiftOnnn +@funindex shiftOff +@funindex shiftOn +@funindex shiftOnn +@funindex shiftOnnn + +Dicht notierte Noten in einem Akkord, oder Noten auf der gleichen +Taktzeit aber in unterschiedlichen Stimmen, werden in zwei, manchmal +auch mehreren Kolumnen gesetzt, um die Noten am Überschneiden zu +hindern. Wir bezeichnen sie als Notenkolumnen. Jede Stimme hat +eine eigene Kolumne, und ein stimmenabhängiger Verschiebunsbefehl (engl. +shift) wird eingesetzt, wenn eine Kollision auftreten könnte. +Das zeigt das Beispiel oben. Im zweiten Takt wird das C der zweiten +Stimme nach rechts verschoben, relativ gesehen zum D der ersten Stimme, +und im letzten Akkord wird das C der dritten Stimme auch nach +rechts verschoben im Verhältnis zu den anderen Stimmen. + +Die Befehle @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} und +@code{\shiftOff} bestimmen den Grad, zu dem Noten und Akkorde +verschoben werden sollen, wenn sich sonst eine Kollision nicht +vermeiden ließe. Die Standardeinstellung ist, dass die äußeren +Stimmen (also normalerweise Stimme 1 und 2) @code{\shiftOff} +eingestellt haben, während für die inneren Stimmen (3 und 4) +@code{\shiftOn} eingeschaltet ist. Wenn eine Verschiebung +auftritt, werden Stimmen 1 und 3 nach rechts und Stimmen 2 und 4 +nach links verschoben. + +@code{\shiftOnn} und @code{\shiftOnnn} definieren weitere +Verschiebungsebenen, die man kurzzeitig anwählen kann, um +Zusammenstöße in komplexen Situationen aufzulösen, siehe auch +@ref{Příklady ze života}. + +Eine Notenkolumne kann nur eine Note (oder einen Akkord) von +einer Stimme mit Hälsen nach oben und eine Note (oder einen +Akkord) von einer Stimme mit Hälsen nach unten tragen. Wenn +Noten von zwei Stimmen mit den Hälsen in die gleiche Richtung +an der selben Stelle auftreten und in beiden Stimmen ist +keine Verschiebung oder die gleiche Verschiebungsebene +definiert, wird die Fehlermeldung +@qq{zu viele kollidierende Notenspalten werden ignoriert} +ausgegeben. + + +@seealso +Notationsreferenz: @ruser{Mehrere Stimmen}. + + +@node Hlasy a zpěvy +@subsection Hlasy a zpěvy +@translationof Voices and vocals + +Die Notation von Vokalmusik ihre eigene Schwierigkeit, nämlich +die Kombination von zwei Ausdrücken: den Noten und dem Text. +Achtung: Der Gesangstext wird auf Englisch @qq{lyrics} genannt. + + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics context, erstellen +@cindex Gesangtext, Verbindung mit Noten + +Wir haben schon den @code{\addlyrics@{@}}-Befehl betrachtet, +mit dem einfache Partituren gut erstellt werden können. +Diese Methode ist jedoch recht eingeschränkt. Wenn der Notensatz +komplexer wird, muss der Gesangstext mit einem neuen +@code{Lyrics}-Kontext begonnen werden (mit dem Befehl +@code{\new Lyrics}) und durch den Befehl @code{\lyricsto@{@}} +mit einer bestimmten Stimme verknüpft werden, indem die +Bezeichnung der Stimme benutzt wird. + +@lilypond[quote,verbatim] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +Beachten Sie, dass der Notentext nur mit einem @code{Voice}-Kontext +verknüpft werden kann, nicht mit einem @code{Staff}-Kontext. +In diesem Fall also müssen Sie ein System (@code{Staff}) und +eine Stimme (@code{Voice}) explizit erstellen, damit alles +funktioniert. + +@cindex Gesangstext und Balken +@cindex Text und Balken +@cindex Balken und Text +@funindex \autoBeamOff +@funindex autoBeamOff + +Die automatischen Balken, die LilyPond in der Standardeinstellung +setzt, eignen sich sehr gut für instrumentale Musik, aber nicht +so gut für Musik mit Text, wo man entweder gar keine Balken +benutzt oder sie einsetzt, um Melismen zu verdeutlichen. +Im Beispiel oben wird deshalb der Befehl @code{\autoBeamOff} +eingesetzt um die automatischen Balken (engl. beam) auszuschalten. + +@funindex \new ChoirStaff +@funindex \lyricmode +@funindex ChoirStaff +@funindex lyricmode +@cindex Vokalpartitur, Aufbau +@cindex Chorpartitur, Aufbau + +Wir wollen das frühere Beispiel von @notation{Judas Maccabæus} +benutzen, um diese flexiblere Technik für Gesangstexte +zu illustrieren. Das Beispiel wurde so umgeformt, dass jetzt +Variablen eingesetzt werden, um den Text und die Noten +von der Partiturstruktur zu trennen. Es wurde zusätzlich +eine Chorpartiturklammer hinzugefügt. Der Gesangtext muss mit +@code{\lyricmode} eingegeben werden, damit er als Text und +nicht als Noten interpretiert werden kann. + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +Dies ist die Grundstruktur für alle Chorpartituren. Mehr +Systeme können hinzugefügt werden, wenn sie gebraucht werden, mehr +Stimmen können zu jedem System hinzugefügt werden, mehr +Strophen können zum Text hinzugefügt werden, und schließlich +können die Variablen schnell in eine eigene Datei verschoben +werden, wenn sie zu lang werden sollten. + +@cindex Choralnotation +@cindex Hymnus-Notation +@cindex SATB-Partitur +@cindex mehrere Strophen +@cindex Strophen, mehrere +@cindex Choral mit mehreren Strophen + +Hier ein Beispiel der ersten Zeile eines Chorals mit vier +Strophen für gemischten Chor. In diesem Fall ist der Text +für alle vier Stimmen identisch. Beachten Sie, wie die +Variablen eingesetzt werden, um Inhalt (Noten und Text) und Form +(die Partitur) voneinander zu trennen. Eine Variable wurde +eingesetzt, um die Elemente, die auf beiden Systemen auftauchen, +aufzunehmen, nämlich Taktart und Tonart. Solch eine +Variable wird oft auch mit @qq{global} bezeichnet. + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@seealso +Notation Reference: @ruser{Notation von Gesang}. + + +@node Prostředí a rytci +@section Prostředí a rytci +@translationof Contexts and engravers + +Prostředí a rytci (@qq{Stempel}) sind in den vorherigen +Abschnitten schon aufgetaucht; hier wollen wir uns ihnen +nun etwas ausführlicher widmen, denn sie sind sehr +wichtig, um Feineinstellungen in der LilyPond-Notenausgabe +vornehmen zu können. + +@menu +* Vysvětlení prostředí:: +* Vytvoření prostředí:: +* Vysvětlení rytců:: +* Změna vlastností prostředí:: +* Přidání a odstranění rytců:: +@end menu + +@node Vysvětlení prostředí +@subsection Vysvětlení prostředí +@translationof Contexts explained + +@cindex Kontexte erklärt + +Wenn Noten gesetzt werden, müssen viele Elemente zu der Notenausgabe +hinzugefügt werden, +die im Quellcode gar nicht explizit vorkommen. Vergleichen Sie +etwa den Quellcode und die Notenausgabe des folgenden Beispiels: + +@lilypond[quote,verbatim,relative=2] +cis4 cis2. | a4 a2. | +@end lilypond + +Der Quellcode ist sehr kurz und knapp, während in der +Notenausgabe Taktlinien, Vorzeichen, ein Schlüssel und +eine Taktart hinzugefügt wurden. Während LilyPond +den Eingabetext @emph{interpretiert}, wird die +musikalische Information von rechts nach links gelesen, +in etwa, wie man eine Partitur von links nach +rechts liest. Während das Programm den Code liest, +merkt es sich, wo sich Taktgrenzen befinden und +für welche Tonhöhen Versetzungszeichen gesetzt werden +müssen. Diese Information muss auf mehreren Ebenen +gehandhabt werden, denn Versetzungszeichen etwa +beziehen sich nur auf ein System, Taktlinien dagegen +üblicherweise auf die gesamte Partitur. + +Innerhalb von LilyPond sind diese Regeln und +Informationshappen in @emph{Kontexten} (engl. +contexts) gruppiert. Der @code{Voice} (Stimmen)-Kontext +wurde schon vorgestellt. Daneben +gibt es noch die @code{Staff} (Notensystem-) und +@code{Score} (Partitur)-Kontexte. Kontexte sind +hierarchisch geschichtet um die hierarchische +Struktur einer Partitur zu spiegeln. Ein @code{Staff}-Kontext +kann zum Beispiel viele @code{Voice}-Kontexte beinhalten, +und ein @code{Score}-Kontext kann viele +@code{Staff}-Kontexte beinhalten. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Jeder Kontext hat die Aufgabe, bestimmte Notationsregeln +zu erzwingen, bestimmte Notationsobjekte zu erstellen und +verbundene Elemente zu ordnen. Der @code{Voice}-Kontext +zum Beispiel kann eine Vorzeichenregel einführen und der +@code{Staff}-Kontext hält diese Regel dann aufrecht, um +einzuordnen, ob ein Versetzungszeichen gesetzt werden +muss oder nicht. + +Ein anderes Beispiel: die Synchronisation der Taktlinien ist +standardmäßig im @code{Score}-Kontext verankert. Manchmal sollen +die Systeme einer Partitur aber unterschiedliche Taktarten +enthalten, etwa in einer polymetrischen Partitur mit +4/4- und 3/4-Takt. In diesem Fall müssen also die Standardeinstellungen +der @code{Score}- und @code{Staff}-Kontexte verändert werden. + +In einfachen Partituren werden die Kontexte implizit erstellt, +und es kann sein, dass Sie sich dessen gar nicht bewusst sind. +Für etwas größere Projekte, etwa mit vielen Systemen, müssen +die Kontexte aber explizit erstellt werden, um sicher zu gehen, +dass man auch wirklich die erwünschte Zahl an Systemen in der +richtigen Reihenfolge erhält. Wenn Stücke mit spezialisierter +Notation gesetzt werden sollen, ist es üblich, die existierenden +Kontexte zu verändern oder gar gänzlich neue zu definieren. + +Zusätzlich zu den @code{Score,} @code{Staff} und +@code{Voice}-Kontexten gibt es noch Kontexte, die zwischen +der Partitur- und Systemebene liegen und Gruppen von Systemen +kontrollieren. Das sind beispielsweise der +@code{PianoStaff} und @code{ChoirStaff}-Kontext. Es gibt zusätzlich +alternative Kontexte für Systeme und Stimmen sowie eigene Kontexte +für Gesangstexte, Perkussion, Griffsymbole, Generalbass usw. + +Die Bezeichnungen all dieser Kontexte werden von einem oder mehreren +englischen +Wörtern gebildet, dabei wird jedes Wort mit einem Großbuchstaben +begonnen und direkt an das folgende ohne Bindestrich oder Unterstrich +angeschlossen, etwa +@code{GregorianTranscriptionStaff}. + + +@seealso +Notationreferenz: @ruser{Vysvětlení prostředí}. + + +@node Vytvoření prostředí +@subsection Vytvoření prostředí +@translationof Creating contexts + +@funindex \new +@funindex new +@cindex Neue Kontexte +@cindex Erstellen von Kontexten +@cindex Kontexte, Erstellen + +In einer Eingabedatei enthält eine @code{Score}-Umgebung (einen +Kontext), die mit +dem Befehl @code{\score} eingeleitet wird, nur einen einzigen +musikalischen Ausdruck und mit ihm verknüpft eine Ausgabedefinition +(entweder eine @code{\layout}- oder eine @code{\midi}-Umgebung). +Üblicherweise wird der @code{Score}-Kontext automatisch von +LilyPond erstellt, wenn der musikalische Ausdruck interpretiert +wird. + +Wenn nur ein System vorhanden ist, kann man es ruhig +LilyPond überlassen, auch die @code{Voice}- und @code{Staff}-Kontexte +zu erstellen, aber für komplexere Partituren ist es notwendig, +sie mit einem Befehl zu erstellen. Der einfachste Befehl +hierzu ist @code{\new}. Er wird dem musikalischen Ausdruck +vorangestellt, etwa so: + +@example +\new @var{Typ} @var{musikalischer Ausdruck} +@end example + +@noindent +wobei @var{Typ} eine Kontextbezeichnung (wie etwa @code{Staff} oder +@code{Voice}) ist. Dieser Befehl erstellt einen neuen Kontext und +beginnt, den @var{muskalischen Ausdruck} innerhalb dieses +Kontexts auszuwerten. + +@warning{Der @bs{}@code{new Score}-Befehl sollte nicht benutzt werden, +weil der Partitur-(Score)-Kontext der obersten Ebene +normalerweise automatisch erstellt wird, wenn der musikalische Ausdruck +innerhalb der @code{\score}-Umgebung interpretiert wird. Standard-Werte +von Kontexteigenschaften, die für einen bestimmten @code{Score} gelten +sollen, können innerhalb der @bs{}@code{layout}-Umgebung definiert werden. +Siehe @ref{Změna vlastností prostředí,,změnu vlastností prostředí}.} + +Wir haben schon viele explizite Beispiel gesehen, in denen +neue @code{Staff}- und @code{Voice}-Kontexte erstellt wurden, aber +um noch einmal ins Gedächtnis zu rufen, wie diese Befehle benutzt +werden, hier ein kommentiertes Beispiel aus dem richtigen Leben: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \clef "treble" + \key g \minor + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. + d4 ees16 c8. + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \clef "bass" + \key g \minor + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, + g8 ees, + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees + g4 ees + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Beachten Sie, dass wir hier alle Zeilen, die eine neue +Umgebung entweder mit einer geschweiften Klammer (@code{@{}) +oder doppelten spitzen Klammern (@code{<<}) öffnen, mit +jeweils zwei Leerzeichen, und die entsprechenden +schließenden Klammern mit der gleichen Anzahl Leerzeichen +eingerückt werden. Dies ist nicht erforderlich, es wird aber +zu einem großen Teil die nicht passenden Klammerpaar-Fehler +eliminieren und ist darum sehr empfohlen. Es macht es +möglich, die Struktur einer Partitur auf einen Blick zu +verstehen, und alle nicht passenden Klammern +erschließen sich schnell. Beachten Sie auch, dass das +untere Notensystem mit eckigen Klammern erstellt wird, +denn innerhalb dieses Systems brauchen wir zwei Stimmen, +um die Noten darzustellen. Das obere System braucht +nur einen einzigen musikalischen Ausdruck und ist deshalb +von geschweiften Klammern umschlossen.) + +@cindex Kontexte, Benennung +@cindex Benennung von Kontexten + +Der @code{\new}-Befehl kann einem Kontext auch einen +Namen zur Identifikation geben, um ihn von anderen Kontexten des +selben Typs zu unterscheiden: + +@example +\new @var{Typ} = @var{Name} @var{musikalischer Ausdruck} +@end example + +Beachten Sie den Unterschied zwischen der Bezeichnung des +Kontexttyps (@code{Staff}, @code{Voice}, usw.) und dem +Namen, der aus beliebigen Buchstaben bestehen kann +und vom Benutzer frei erfunden werden kann. Zahlen und +Leerzeichen können auch benutzt werden, in dem Fall +muss der Name aber von doppelten Anführungszeichen +umgeben werden, also etwa +@code{\new Staff = "Mein System 1" @var{musikalischer Ausdruck}}. +Der Name wird +benutzt, um später auf genau diesen spezifischen Kontext +zu verweisen. Dieses Vorgehen wurde schon in dem Abschnitt +zu Gesangstexten angewandt, siehe @ref{Hlasy a zpěvy,,hlasy a zpěvy}. + + +@seealso +Notationsreferenz: @ruser{Vytvoření prostředí}. + + +@node Vysvětlení rytců +@subsection Vysvětlení rytců +@translationof Engravers explained + +@cindex Engraver +@cindex Stempel (Engraver) + +Jedes Zeichen des fertigen Notensatzes von LilyPond wird +von einem @code{Engraver} (Stempel) produziert. Es gibt +also einen Engraver, der die Systeme erstellt, einen, der die +Notenköpfe ausgibt, einen für die Hälse, einen für die +Balken usw. Insgesamt gibt es über 120 Engraver! Zum +Glück braucht man für die meisten Partituren nur ein +paar Engraver, und für einfache Partituren muss man eigentlich +überhaupt nichts über sie wissen. + +Engraver leben und wirken aus den Kontexten heraus. Engraver +wie der @code{Metronome_mark_engraver}, dessen Aktion +und Ausgabe sich auf die gesamte Partitur bezieht, wirken +in der obersten Kontextebene -- dem @code{Score}-Kontext. + +Der @code{Clef_engraver} (Schlüssel-Stempel) und der +@code{Key_engraver} (Vorzeichen-Stempel) finden sich in +jedem @code{Staff}-Kontext, denn unterschiedliche Systeme +könnten unterschiedliche Tonarten und Notenschlüssel +brauchen. + +Der @code{Note_heads_engraver} (Notenkopf-Stempel) und der +@code{Stem_engraver} (Hals-Stempel) befinden sich in jedem +@code{Voice}-Kontext, der untersten Kontextebene. + +Jeder Engraver bearbeitet die bestimmten Objekte, die mit +seiner Funktion assoziiert sind, und verwaltet die Eigenschaften +dieser Funktion. Diese Eigenschaften, wie etwa die Eigenschaften, +die mit Kontexten assoziiert sind, können verändert werden, +um die Wirkungsweise des Engravers oder das Erscheinungsbild +der von ihm produzierten Elemente in der Partitur zu ändern. + +Alle Engraver haben zusammengesetzte Bezeichnung, die aus +den (englischen) Wörtern ihrer Funktionsweise bestehen. Nur +das erste Wort hat einen Großbuchstaben, und die restlichen +Wörter werden mit einem Unterstrich angefügt. Ein +@code{Staff_symbol_engraver} verantwortet also die Erstellung +der Notenlinien, ein @code{Clef_engraver} entscheidet über die +Art der Notenschlüssel und setzt die entsprechenden Symbole; damit +wird gleichzeitig die Referenztonhöhe auf dem Notensystem festgelegt. + +Hier die meistgebräuchlichen Engraver mit ihrer Funktion. +Sie werden sehen, dass es mit etwas Englischkenntnissen +einfach ist, die Funktion eines Engravers von seiner Bezeichnung +abzuleiten. + +@multitable @columnfractions .3 .7 +@headitem Engraver + @tab Funktion +@item Accidental_engraver + @tab Erstellt Versetzungszeichen, vorgeschlagene und Warnversetzungszeichen. +@item Beam_engraver + @tab Erstellt Balken. +@item Clef_engraver + @tab Erstellt Notenschlüssel. +@item Completion_heads_engraver + @tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen. +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Erstellt Dynamik-Klammern und Dynamik-Texte. +@item Forbid_line_break_engraver + @tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist. +@item Key_engraver + @tab Erstellt die Vorzeichen. +@item Metronome_mark_engraver + @tab Erstellt Metronom-Bezeichnungen. +@item Note_heads_engraver + @tab Erstellt Notenköpfe. +@item Rest_engraver + @tab Erstellt Pausen. +@item Staff_symbol_engraver + @tab Ersetllt die (standardmäßig) fünf Notenlinien des Systems. +@item Stem_engraver + @tab Erstellt die Notenhälse und Tremolos mit einem Hals. +@item Time_signature_engraver + @tab Erstellt die Taktartbezeichnung. +@end multitable + +@smallspace + +Es soll später gezeigt werden, wie die LilyPond-Ausgabe +verändert werden kann, indem die Wirkungsweise der +Engraver beeinflusst wird. + + +@seealso +Referenz der Interna: @rinternals{Engravers and Performers}. + + +@node Změna vlastností prostředí +@subsection Změna vlastností prostředí +@translationof Modifying context properties + +@cindex Kontext-Eigenschaften, Verändern +@cindex Eigenschaften von Kontexten +@cindex Verändern von Kontext-Eigenschaften +@funindex \set +@funindex \unset +@funindex set +@funindex unset + +Kontexte sind dafür verantwortlich, die Werte bestimmter +Kontext-@emph{Eigenschaften} zu speichern. Viele davon +können verändert werden, um die Interpretation der +Eingabe zu beeinflussen und die Ausgabe zu verändern. +Kontexte werden mit dem @code{\set}-Befehl geändert. +Er wird in Form + +@example +\set @var{KontextBezeichnung}.@var{eigenschaftsBezeichnung} = #@var{Wert} +@end example + +@noindent +verwendet, wobei @var{KontextBezeichnung} üblicherweise +@code{Score}, +@code{Staff} oder @code{Voice} ist. Der erste Teil kann auch +ausgelassen werden; in diesem Fall wird der aktuelle +Kontext (üblicherweise @code{Voice}) eingesetzt. + +Die Bezeichnung von Kontexten-Eigenschaften besteht +aus zwei Wörtern, die ohne Unterstrich oder Bindestrich +verbunden sind. Alle außer dem ersten werden am Anfang +groß geschrieben. Hier einige Beispiele der gebräuchlichsten +Kontext-Eigenschaften. Es gibt sehr viel mehr. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem eigenschaftsBezeichnung + @tab Typ + @tab Funktion + @tab Beispiel-Wert +@item extraNatural + @tab boolescher Wert + @tab Wenn wahr, werden zusätzliche Auflösungszeichen vor Versetzungszeichen gesetzt. + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Integer + @tab Setzt die aktuelle Taktnummer. + @tab @code{50} +@item doubleSlurs + @tab boolescher Wert + @tab Wenn wahr, werden Legatobögen über und unter die Noten gesetzt. + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Text + @tab Setzt die Instrumentenbezeichnung am Anfang eines Systems. + @tab @code{"Cello I"} +@item fontSize + @tab reale Zahl + @tab Vergrößert oder verkleinert die Schriftgröße. + @tab @code{2.4} +@item stanza + @tab Text + @tab Setzt den Text zu Beginn einer Strophe. + @tab @code{"2"} +@end multitable + +@noindent +Ein boolescher Wert ist entweder wahr (@code{#t}) +oder falsch (@code{#f}), +ein Integer eine positive ganze Zahl, ein Real (reelle Zahl) eine positive +oder negative Dezimalzahl, und Text wird in doppelte +Anführungszeichen (Shift+2) eingeschlossen. Beachten Sie +das Vorkommen des Rautenzeichens +(@code{#}) an unterschiedlichen Stellen: als Teil eines +booleschen Wertes vor dem @code{t} oder @code{f}, aber +auch vor einem @emph{Wert} in der +@code{\set}-Befehlskette. Wenn ein boolescher Wert +eingegeben werden soll, braucht man also zwei +Rautenzeichen, z. B. @code{##t}. + +@cindex Eigenschaften in Kontexten +@cindex Veränderung von Eigenschaften in Kontexten + +Bevor eine Eigenschaft geändert werden kann, muss man wissen, +in welchem Kontext sie sich befindet. Manchmal versteht das +sich von selbst, aber in einigen Fällen kann es zunächst +unverständlich erscheinen. Wenn der falsche Kontext angegeben +wird, wird keine Fehlermeldung produziert, aber die +Veränderung wird einfach nicht ausgeführt. +@code{instrumentName} befindet sich offensichtlich innerhalb +von einem @code{Staff}-Kontext, denn das Notensystem soll +benannt werden. In dem folgenden Beispiel erhält das erste +System korrekt die Instrumentenbezeichnung, das zweite aber +nicht, weil der Kontext ausgelassen wurde. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c2 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d2 d + } +>> +@end lilypond + +Denken Sie daran, dass der Standardkontext @code{Voice} ist; in dem +zweiten @code{\set}-Befehl wird also die Eigenschaft @code{instrumentName} +im @code{Voice}-Kontext auf @qq{Alto}, gesetzt, aber weil LilyPond diese +Eigenschaft nicht im @code{Voice}-Kontext vermutet, passiert einfach +gar nichts. Das ist kein Fehler, und darum wird auch keine Fehlermeldung +produziert. + +Ebenso gibt es keine Fehlermeldung, wenn die Kontext-Bezeichnung +falsch geschrieben wird und die Änderung also nicht ausgeführt werden +kann. Tatsächlich kann eine beliebige (ausgedachte) Kontextbezeichnung +mit dem @code{\set}-Befehl eingesetzt werden, genauso wie die, die +wirklich existieren. Aber wenn LilyPond diese Bezeichnung nicht +zuordnen kann, bewirkt der Befehl einfach gar nichts. Manche Editoren, +die Unterstützung für LilyPond-Befehle mitbringen, markieren existierende +Kontextbezeichnungen mit einem Punkt, wenn man mit der Maus darüber +fährt (wie etwa JEdit mit dem LilyPondTool), oder markieren +unbekannte Bezeichnungen anders (wie ConTEXT). Wenn Sie keinen +Editor mit LilyPond-Unterstützung einsetzen, wird empfohlen, die +Bezeichnungen in der Interna-Referenz zu überprüfen: siehe +@rinternals{Tunable context properties}, oder +@rinternals{Contexts}. + +Die Eigenschaft @code{instrumentName} wird erst aktiv, wenn sie +in einem @code{Staff}-Kontext gesetzt wird, aber manche Eigenschaften +können in mehr als einem Kontext benutzt werden. Als Beispiel mag die +@code{extraNatural}-Eigenschaft dienen, die zusätzliche Erniedrigungszeichen +setzt. Die Standardeinstellung ist ##t (wahr) in allen Systemen. +Wenn sie nur in einem @code{Staff} (Notensystem) auf ##f (falsch) +gesetzt wird, wirkt sie sich auf alle Noten in diesem System aus. Wird +sie dagegen in der @code{Score}-Umgebung gesetzt, wirkt sich das +auf alle darin enthaltenen Systeme aus. + +Das also bewirkt, dass die zusätzlichen Erniedrigungszeichen in einem System +ausgeschaltet sind: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +während das dazu dient, sie in allen Systemen auszuschalten: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +Ein anderes Beispiel ist die Eigenschaft @code{clefOctavation}: +wenn sie im @code{Score}-Kontext gesetzt wird, ändert sich sofort +der Wert der Oktavierung in allen aktuellen Systemen und wird +auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt. + +Der gegenteilige Befehl, @code{\unset}, entfernt die Eigenschaft +effektiv wieder von dem Kontext: in den meisten Fällen wird der +Kontext auf ihre Standardeinstellungen zurückgesetzt. +Normalerweise wird aber @code{\unset} nicht benötigt, +denn ein neues @code{\set} erledigt alles, was man braucht. + +Die @code{\set}- und @code{\unset}-Befehle könne überall im +Eingabequelltext erscheinen und werden aktiv von dem Moment, an +dem sie auftreten bis zum Ende der Partitur oder bis die Eigenschaft +mit @code{\set} oder @code{\unset} neu gesetzt wird. Versuchen +wir als Beispiel, die Schriftgröße mehrmals zu ändern, was sich unter anderem +auf die Notenköpfe auswirkt. Die Änderung bezieht sich immer auf den Standard, +nicht vom letzten gesetzten Wert. + +@lilypond[quote,verbatim,ragged-right,relative=1] +c4 d +% make note heads smaller +\set fontSize = #-4 +e4 f | +% make note heads larger +\set fontSize = #2.5 +g4 a +% return to default size +\unset fontSize +b4 c | +@end lilypond + +Wir haben jetzt gesehen, wie sich die Werte von unterschiedlichen +Eigenschaften ändern lassen. Beachten Sie, dass Integer und +Zahlen immer mit einem Rautenzeichen beginnen, während +die Werte wahr und falsch (mit @code{##t} und @code{##f} +notiert) immer mit zwei Rauten beginnen. Eine Eigenschaft, die +aus Text besteht, muss in doppelte Anführungsstriche gesetzt werden, +auch wenn wir später sehen werden, dass Text auf eine sehr viel +allgemeinere und mächtigere Art mit dem @code{\markup}-Befehl +eingegeben werden kann. + +@subsubheading Kontexteigenschaften mit @code{\with} setzen + +@funindex \with +@funindex with +@cindex Kontexteigenschaft, setzen mit \with + +Die Standardwerte von Kontexteigenschaften können zu dem Zeitpunkt +definiert werden, an welchem der Kontext erstellt wird. Manchmal +ist das eine saubere Weise, eine Eigenschaft zu bestimmen, die für +die gesamte Partitur erhalten bleichen soll. Wenn ein Kontext mit +einem @code{\new}-Befehl erstellt wird, können in einer +direkt folgenden @code{\with @{ .. @}}-Umgebung die Eigenschaften +bestimmt werden. Wenn also die zusätzlichen +Auflösungszeichen für eine ganze Partitur gelten sollen, könnte +man schreiben: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +etwa so: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff + \relative c'' { + gis4 ges aes ais + } + \new Staff \with { extraNatural = ##f } { + \relative c'' { + gis ges aes ais + } + } +>> +@end lilypond + +Eigenschaften, die auf diese Arte gesetzt werden, können immer noch +dynamisch mit dem @code{\set}-Befehl geändert werden und mit +@code{\unset} auf ihre Standardeinstellungen zurückgesetzt werden, +wie sie vorher in der @code{\with}-Umgebung definiert wurden. + +@cindex Schriftgröße, Standardeinstellung +@cindex fontSize (Schriftgröße), Standardeinstellung + +Wenn also die @code{fontSize}-Eigenschaft in einer @code{\with}-Umgebung +definiert wird, wird der Standardwert für die Schriftgröße +festgelegt. Wenn dieser Wert später mit @code{\set} verändert +wird, kann dieser neue Standardwert mit dem Befehl +@code{\unset fontSize} wieder erreicht werden. + +@subsubheading Kontexteigenschaften mit @code{\context} setzen + +@cindex Kontexteigenschaften, mit \context setzen +@cindex Eigenschaften von Kontexten, mit \context setzen +@funindex \context +@funindex context + +Die Werte von Kontext-Eigenschaften können in @emph{allen} Kontexten +eines bestimmten Typs (etwa alle @code{Staff}-Kontexte) +gleichzeitig mit einem Befehl gesetzt werden. Der Kontext wird +spezifiziert, indem seine Bezeichnung benutzt wird, also etwa +@code{Staff}, mit einem Backslash davor: @code{\Staff}. Der Befehl +für die Eigenschaft ist der gleiche, wie er auch in der +@code{\with}-Konstruktion benutzt wird, wie oben gezeigt. Er wird in +eine @code{\context}-Umgebung eingebettet, welche wiederum innerhalb +von einer @code{\layout}-Umgebung steht. Jede @code{\context}-Umgebung +wirkt sich auf alle Kontexte dieses Types aus, welche sich in der +aktuellen Partitur befinden (d. h. innerhalb einer @code{\score}- +oder @code{\book}-Umgebung). Hier ist ein Beispiel, wie man diese +Funktion anwendet: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond + +Wenn die Veränderung der Eigenschaft sich auf alle Systeme einer +@code{score}-Umgebung beziehen soll: + +@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 +Kontext-Eigenschaften, die auf diese Weise gesetzt werden, können für +bestimmten Kontexte überschrieben werden, indem die +@code{\with}-Konstruktion eingesetzt wird, oder mit @code{\set}-Befehlen +innerhalb der aktuellen Noten. + + +@seealso +Notationsreferenz: +@ruser{Die Standardeinstellungen von Kontexten ändern}, +@ruser{Der set-Befehl}. + +Referenz der Interna: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Přidání a odstranění rytců +@subsection Přidání a odstranění rytců +@translationof Adding and removing engravers + +@cindex Engraver, Hinzufügen von +@cindex Engraver, Entfernen von +@cindex Hinzufügen von Engravern +@cindex Entfernen von Engravern + +@funindex \consists +@funindex \remove +@funindex consists +@funindex remove + +Wir haben gesehen, dass jeder Kontext eine Anzahl an Engravern +(Stempeln) beinhaltet, von denen ein jeder einen bestimmten +Teil des fertigen Notensatzes produziert, wie z. B. Taktlinien, +Notenlinien, Notenköpfe, Hälse usw. Wenn ein Engraver aus +einem Kontext entfernt wird, kann er seine Objekte nicht +länger produzieren. Das ist eine eher grobe Methode, die +Notenausgabe zu beeinflussen, aber es kann von großem +Nutzen sein. + + +@subsubheading Einen einzelnen Kontext verändern + +Um einen Engraver von einem einzelnen Kontext zu entfernen, +wir der @code{\with}-Befehl eingesetzt, direkt hinter +den Befehl zur Kontext-Erstellung geschrieben, wie +in dem vorigen Abschnitt gezeigt. + +Als ein Beispiel wollen wir das Beispiel aus dem letzten +Abschnitt produzieren, aber die Notenlinien entfernen. Erinnern +Sie sich, dass die Notenlinien vom @code{Staff_symbol_engraver} +erstellt werden. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % make note heads smaller + e4 f | + \set fontSize = #2.5 % make note heads larger + g4 a + \unset fontSize % return to default size + b4 c | +} +@end lilypond + +@cindex Ambitus-Engraver + +Engraver können auch zu einem bestimmten +Kontext hinzugefügt werden. Dies geschieht +mit dem Befehl + +@code{\consists @var{Engraver_bezeichnung}} + +@noindent +welcher auch wieder innerhalb der @code{\with}-Umgebung +gesetzt wird. Einige Chorpartituren zeigen einen +Ambitus direkt zu Beginn der ersten Notenzeile, um +den Stimmumfang des Stückes anzuzeigen, siehe auch +@rglos{ambitus}. Der Ambitus wird vom +@code{Ambitus_engraver} erstellt, der normalerweise +in keinem Kontext enthalten ist. Wenn wir +ihn zum @code{Voice}-Kontext hinzufügen, errechnet +er automatisch den Stimmumfang für diese einzelne Stimme +und zeigt ihn an: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +wenn wir den Ambitus-Engraver allerdings zum +@code{Staff}-Kontext hinzufügen, wird der Stimmumfang aller +Stimmen in diesem Notensystem errechnet: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + + +@subsubheading Alle Kontexte des gleichen Typs verändern + +@funindex \layout + +Die vorigen Beispiele zeigen, wie man Engraver in einem +bestimmten Kontext hinzufügen oder entfernen kann. Es ist +auch möglich, Engraver in jedem Kontext eines bestimmten +Typs hinzuzufügen oder zu entfernen. Dazu werden die +Befehle in dem entsprechenden Kontext in einer +@code{\layout}-Umgebung gesetzt. Wenn wir also z. B. +den Ambitus für jedes Notensystem in einer Partitur +mit vier Systemen anzeigen wollen, könnte das so aussehen: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +Die Werte der Kontext-Eigenschaften können auch für +alle Kontexte eines bestimmten Typs auf die gleiche +Weise geändert werden, indem der @code{\set}-Befehl in +einer @code{\context}-Umgebung angewendet wird. + + +@seealso +Notationsreferenz: @ruser{Umgebungs-Plugins verändern}, +@ruser{Die Standardeinstellungen von Kontexten ändern}. + +@knownissues +Die @code{Stem_engraver} und @code{Beam_engraver} fügen ihre +Objekte an Notenköpfe an. Wenn der @code{Note_heads_engraver} +entfernt wird, werden keine Notenköpfe erstellt und demzufolge auch keine +Hälse oder Bögen dargestellt. + + +@node Rozšíření příkladů +@section Rozšíření příkladů +@translationof Extending the templates + +Sie haben sich durch die Übung gearbeitet, Sie +wissen jetzt, wie Sie Notensatz produzieren, und Sie +haben die grundlegenden Konzepte verstanden. Aber wie +erhalten Sie genau die Systeme, die Sie brauchen? Es +gibt eine ganze Anzahl an fertigen Vorlagen +(siehe @ref{Předlohy}), mit denen Sie beginnen +können. Aber was, wenn Sie nicht genau das finden, +was Sie brauchen? Lesen Sie weiter. + +@menu +* Soprán a violoncello:: +* Čtyřhlasý notový zápis SATB:: +* Vytvoření notového zápisu od základu:: +* Úspora psaní na stroji pomocí proměnných a funkcí:: +* Notové zápisy a hlasy:: +@end menu + + +@node Soprán a violoncello +@subsection Soprán a violoncello +@translationof Soprano and cello + +@cindex Template, Verändern von +@cindex Vorlage, Verändern von +@cindex Veränderung von Vorlagen + +Beginnen Sie mit der Vorlage, die Ihren Vorstellungen +am nächsten kommt. Nehmen wir einmal an, Sie wollen +ein Stück für Soprán a violoncello schreiben. In diesem +Fall könnten Sie mit der Vorlage @qq{Noten und Text} +(für die Sopran-Stimme) beginnen. + +@example +\version @w{"@version{}"} +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +text = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melody + @} + \new Lyrics \lyricsto "one" \text + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Jetzt wollen wir die Cello-Stimme hinzufügen. Schauen wir uns das +Beispiel @qq{Nur Noten} an: + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melody + \layout @{ @} + \midi @{ @} +@} +@end example + +Wir brauchen den @code{\version}-Befehl nicht zweimal. Wir +brauchen aber den @code{melody}-Abschnitt. Wir wollen +keine zwei @code{\score} (Partitur)-Abschnitte -- mit zwei +@code{\score}-Abschnitten würden wir zwei Stimmen +getrennt voneinander erhalten. In diesem Fall wollen wir +sie aber zusammen, als Duett. Schließlich brauchen wir +innerhalb des @code{\score}-Abschnittes nur einmal die +Befehle @code{\layout} und @code{\midi}. + +Wenn wir jetzt einfach zwei @code{melody}-Abschnitte in +unsere Datei kopieren würden, hätten wir zwei @code{melody}-Variable. +Das würde zu keinem Fehler führen, aber die zweite von ihnen +würde für beide Melodien eingesetzt werden. Wir müssen +ihnen also andere Bezeichnungen zuweisen, um sie voneinander +zu unterscheiden. Nennen wir die Abschnitte also @code{SopranNoten} +für den Sopran und @code{CelloNoten} für die Cellostimme. Wenn +wir schon dabei sind, können wir @code{text}auch nach +@code{SoprText} umbenennen. Denken Sie daran, beide +Vorkommen der Bezeichnung zu ändern: einmal die Definition +gleich am Anfang (@code{melody = \relative c' @{ }) und +dann auch noch die Benutzung der Variable innerhalb des +@code{\score}-Abschnittes. + +Gleichzeitig können wir auch noch das Notensystem für das +Cello ändern -- das Cello hat normalerweise einen Bassschlüssel. +Wir ändern auch die Noten etwas ab. + +@example +\version @w{"@version{}"} + +SopranNoten = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +SoprText = \lyricmode @{ + Aaa Bee Cee Dee +@} + +CelloNoten = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "eins" @{ + \autoBeamOff + \SopranNoten + @} + \new Lyrics \lyricsto "eins" \Soprantext + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Das sieht schon vielversprechend aus, aber die Cello-Stimme +erscheint noch nicht im Notensatz -- wir haben vergessen, +sie in den @code{\score}-Abschnitt einzufügen. Wenn die +Cello-Stimme unterhalb des Soprans erscheinen soll, müssen +wir + +@example +\new Staff \CelloNoten +@end example + +@noindent +unter dem Befehl für den Sopran hinzufügen. Wir brauchen auch +die spitzen Klammern (@code{<<} und @code{>>}) um die +Noten, denn damit wird LilyPond mitgeteilt, dass mehr als +ein Ereignis gleichzeitig stattfindet (in diesem Fall sind es +zwei @code{Staff}-Instanzen). Der @code{\score}-Abschnitt +sieht jetzt so aus: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "eins" @{ + \autoBeamOff + \SopranNoten + @} + \new Lyrics \lyricsto "eins" \SoprText + >> + \new Staff \CelloNoten + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Das sieht etwas unschön aus, vor allem die Einrückung stimmt +nicht mehr. Das können wir aber schnell in Ordnung bringen. +Hier also die gesamte Vorlage für Soprán a violoncello: + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +Die Vorlagen, mit denen wir begonnen haben, können im +Anhang @qq{Předlohy} gefunden werden, siehe +@ref{Jedna notová osnova}. + + +@node Čtyřhlasý notový zápis SATB +@subsection Čtyřhlasý notový zápis SATB +@translationof Four-part SATB vocal score + +@cindex Vorlage, SATB +@cindex Vorlage, Chorpartitur +@cindex SATB-Vorlage +@cindex Chorpartitur, Vorlage + +Die meisten Partituren für vierstimmigen gemischten Chor +mit Orchesterbegleitung (wie etwa Mendelssohns @notation{Elias} +oder Händels @notation{Messias}) sind so aufgebaut, dass +für jede der vier Stimmen ein eigenes System besteht und +die Orchesterbegleitung dann als Klavierauszug darunter +notiert wird. Hier ein Beispiel aus Händels @notation{Messias}: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +Keine der Vorlage bietet diesen Aufbau direkt an. Die Vorlage, die +am nächsten daran liegt, ist @qq{SATB-Partitur und automatischer +Klavierauszug}, siehe @ref{Vokální soubor}. Wir müssen diese +Vorlage aber so anpassen, dass die Noten für das Klavier nicht +automatisch aus dem Chorsatz generiert werden. Die Variablen +für die Noten und den Text des Chores sind in Ordnung, wir +müssen nun noch Variablen für die Klaviernoten hinzufügen. + +Die Reihenfolge, in welcher die Variablen in das Chorsystem +(@code{ChoirStaff}) eingefügt werden, entspricht nicht der +in dem Beispiel oben. Wir wollen sie so sortieren, dass die +Texte jeder Stimme direkt unter den Noten notiert werden. +Alle Stimmen sollten als @code{\voiceOne} notiert werden, +welches die Standardeinstellung ist; wir können also die +@code{\voiceXXX}-Befehle entfernen. Wir müssen auch noch +den Schlüssel für den Tenor ändern. Die Methode, mit der +der Text den Stimmen zugewiesen wird, ist uns noch nicht +bekannt, darum wollen wir sie umändern auf die Weise, die +wir schon kennen. Wir fügen auch noch Instrumentbezeichnungen +zu den Systemen hinzu. + +Damit erhalten wir folgenden @code{ChoirStaff}: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Sopran" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alt" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} +>> % end ChoirStaff +@end example + +Als nächstes müssen wir das Klaviersystem bearbeiten. +Das ist einfach: wir nehmen einfach den Klavierteil +aus der @qq{Piano solo}-Vorlage: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "oben" \oben + \new Staff = "unten" \unten +>> +@end example + +@noindent +und fügen die Variablen @code{oben} +und @code{unten} hinzu. + +Das Chorsystem und das Pianosystem müssen mit +spitzen Klammern kombiniert werden, damit beide +übereinander erscheinen: + +@example +<< % ChoirStaff und PianoStaff parallel kombinieren + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Alles miteinander kombiniert und mit den Noten für drei +Takte sieht unser Beispiel nun so aus: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { + \key d \major + \time 4/4 +} +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Vytvoření notového zápisu od základu +@subsection Vytvoření notového zápisu od základu +@translationof Building a score from scratch + +@cindex Template, eigene schreiben +@cindex Vorlagen, eigene schreiben +@cindex eigene Vorlagen erstellen +@cindex Erstellen von eigenen Vorlagen +@cindex Schreiben von eigenen Vorlagen + +Wenn Sie einige Fertigkeit im Schreiben von LilyPond-Code +gewonnen haben, werden Sie vielleicht feststellen, dass es +manchmal einfacher ist, von Grund auf anzufangen, anstatt +die fertigen Vorlagen zu verändern. Auf diese Art könne Sie +auch Ihren eigenen Stil entwickeln, und ihn der Musik anpassen, +die Sie notieren wollen. Als Beispiel wollen wir demonstrieren, +wie man die Partitur für ein Orgelpreludium von Grund auf +konstruiert. + +Beginnen wir mit dem Kopf, dem @code{header}-Abschnitt. +Hier notieren wir den Titel, den Namen des Komponisten usw. +Danach schreiben wir die einzelnen Variablen auf und +schließlich am Ende die eigentliche Partitur, den +@code{\score}-Abschnitt. Beginnen wir mit einer groben +Struktur, in die wir dann die Einzelheiten nach und nach +eintragen. + +Als Beispiel benutzen wir zwei Takte aus dem Orgelpreludium +@notation{Jesu, meine Freude} von J. S. Bach, notiert +für zwei Manuale und Pedal. Sie können die Noten am Ende +dieses Abschnittes sehen. Das obere Manual trägt zwei Stimmen, +das untere und das Pedalsystem jeweils nur eine. Wir +brauchen also vier Variablen für die Noten und eine, um +Taktart und Tonart zu definieren. + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J. S. Bach" +@} +keyTime = @{ \key c \minor \time 4/4 @} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +Im Moment haben wir eine unsichtbare +Note in jede Stimme eingesetzt (@code{s1}). +Die Noten werden später hinzugefügt. + +Als nächstes schauen wir uns an, was in die +Partitur (die @code{\score}-Umgebung) +kommt. Dazu wird einfach die Notensystemstruktur +konstruiert, die wir benötigen. Orgelmusik +wird meistens auf drei Systemen notiert, eins +für jedes Manual und ein drittes für die Pedalnoten. +Die Systeme für die Manuale werden mit einer +geschweiften Klammer verbunden, wir +benutzen hier also ein @code{PianoStaff}. +Das erste Manualsystem braucht zwei Stimmen, +das zweite nur eine. + +@example +\new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % Ende ManualOne Systemkontext + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % Ende ManualTwo Systemkontext +>> % Ende PianoStaff Kontext +@end example + +Als nächstes soll das System für das Pedal hinzugefügt +werden. Es soll unter das Klaviersystem gesetzt +werden, aber muss gleichzeitig mit ihm erscheinen. +Wir brauchen also spitze Klammern um beide +Definitionen. Sie wegzulassen würde eine Fehlermeldung +in der Log-Datei hervorrufen. Das ist ein sehr +häufiger Fehler, der wohl auch Ihnen früher +oder später unterläuft. Sie können das fertige +Beispiel am Ende des Abschnittes kopieren und die +Klammern entfernen, um zu sehen, wie die +Fehlermeldung aussehen kann, die Sie in solch +einem Fall erhalten würden. + +@example +<< % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +Es ist nicht notwendig, die simultane Konstruktion +@code{<< .. >>} innerhalb des zweiten Manualsystems +und des Pedalsystems zu benutzen, denn sie enthalten +nur eine Stimme. Andererseits schadet es nichts, sie +zu schreiben, und es ist eine gute Angewohnheit, immer +die spitzen Klammern nach einem @code{\new Staff} zu +schreiben, wenn mehr als eine Stimme vorkommen könnten. +Für Stimmen (@code{Voice}) dagegen gilt genau das +Gegenteil: eine neue Stimme sollte immer von +geschweiften Klammern (@code{@{ .. @}}) gefolgt +werden, falls Sie ihre Noten in mehrere Variable aufteilen, +die nacheinander gesetzt werden sollen. + +Fügen wir also diese Struktur zu der @code{\score}-Umgebung +hinzu und bringen wir die Einzüge in Ordnung. Gleichzeitig +wollen wir die richtigen Schlüssel setzen und die Richtung der +Hälse und Bögen in den Stimmen des oberen Systems +kontrollieren, indem die obere Stimme ein +@code{\voiceOne}, die untere dagegen ein @code{\voiceTwo} +erhält. Die Taktart und Tonart werden mit unserer fertigen +Variable @code{\keyTime} eingefügt. + +@example +\score @{ + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % set time signature and key + \clef "treble" + \new Voice @{ + \voiceOne + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \voiceTwo + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \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 + +@cindex Spreizbarkeit von Systemen +@cindex Dehnung von Systemen, vertikal +@cindex Systeme, vertikales Dehnen + +Das Layout des Orgelsystems oben ist fast perfekt, es hat jedoch einen kleinen +Fehler, den man nicht bemerken kann, wenn man nur ein einzelnes System +betrachtet: Der Abstand des Pedalsystems zum System der linken Hand +sollte in etwa der gleiche sein wie der Abstand zwischen den Systemen +der linken und rechten Hand. Die Dehnbarkeit von Systemen in einem +Klaviersystem (@code{PianoStaff})-Kontext ist beschränkt (sodass der +Abstand zwischen den Systemen der linken und rechten Hand nicht zu groß +wird), und das Pedalsystem sollte sich genauso verhalten. + +@cindex Untereigenschaft +@cindex sub-properties +@cindex graphische Objekte +@cindex Grobs +@cindex Objekte, graphische + +Die Spreizbarkeit von Systemen kann mit der @code{staff-staff-spacing}-Eigenschaft +des @code{VerticalAxisGroup}-@qq{graphischen Objekts} (üblicherweise als +@qq{Grob} innerhalb der LilyPond-Dokumentation bezeichnet) kontrolliert +werden. An dieser Stelle brauchen Sie sich um die Details nicht zu +sorgen, sie werden später erklärt. Sehr Neugierige können sich den +Abschnitt @ruser{Grundlagen zum Verändern von Eigenschaften} anschauen. Im Moment +kann man nicht nur die @code{strechability} (Spreizbarkeit)-Untereigenschaft verändern, +darum müssen hier auch die anderen Untereigenschaften kopiert werden. Die +Standardeinstellungen dieser Untereigenschaften finden sich in der Datei +@file{scm/define-grobs.scm} in den Definitionen für den +@code{VerticalAxisGroup}-Grob. Der Wert für @code{strechability} wird aus +der Definition für das Klaviersystem (@code{PianoStaff}) entnommen +(in der Datei @file{ly/engraver-init.ly}), damit die Werte identisch +sind. + +@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 + +Damit ist das Grundgerüst fertig. Jede Orgelmusik mit drei +Systemen hat die gleiche Struktur, auch wenn die Anzahl der Stimmen +in einem System sich ändern kann. Jetzt müssen wir nur noch +die Noten einfügen und alle Teile zusammenfügen, indem wir +die Variablen mit einem Backslash in die Partitur einbauen. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c2 | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\score { + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % set time signature and key + \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 context + >> +} % end Score context +@end lilypond + +@seealso +Glossar: +@rglos{system}. + + +@node Úspora psaní na stroji pomocí proměnných a funkcí +@subsection Úspora psaní na stroji pomocí proměnných a funkcí +@translationof Saving typing with variables and functions + +@cindex Variablen + +Bis jetzt wurde immer derartige Notation vorgestellt: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } + +\score { + { + \hornNotes + } +} +@end lilypond + +Sie können sich vorstellen, dass das etwa für minimalistische +Musik sehr nützlich sein könnte: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } +violin = \new Staff { + \fragmentA \fragmentA | + \fragmentB \fragmentA | +} + +\score { + { + \violin + } +} +@end lilypond + +Diese Variablen (die man auch als Makros oder Benutzer-Befehl +bezeichnet) können jedoch auch für eigene Anpassungen eingesetzt +werden: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } +padText = { \once \override TextScript #'padding = #5.0 } +fthenp=_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b + \padText + c4.^"hi there!" d8 e' f g d + c,4.\fthenp b8 c4 c-. + } +} + +\score { + { + \violin + } + \layout{ragged-right=##t} +} +@end lilypond + +Derartige Variablen sind offensichtlich sehr nützlich, zu Tipparbeit zu ersparen. Aber es lohnt sich schon, sie zu +benutzen, wenn man sie nur einmal benutzen will, denn sie +vereinfachen die Struktur einer Datei sehr stark. Hier das +vorige Beispiel ohne jede Benutzung von Variablen. Es ist +sehr viel schwerer lesbar, besonders die letzte Zeile. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +Bisher haben wir vor allem statische Ersetzungen betrachtet: +wenn LilyPond etwa @code{\padText} sieht, wird es ersetzt mit +all dem Code, mit dem wir es definiert haben (also alles, +was sich rechts von @code{padtext=} befindet). + +LilyPond kann auch nicht-statische Ersetzungen bewältigen. Man +kann sie sich als Funktionen vorstellen. + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +Die Benutzung von Variablen ist auch eine gute Möglichkeit, +Arbeit zu vermeiden, wenn sich einmal die Syntax von LilyPond +ändern sollte (siehe auch @rprogram{Updating old input files +with convert-ly}). +Wenn man eine einzige Definition hat (wie etwa @code{\dolce}), +die für alle Vorkommen in der Notation eingesetzt wird, muss +man auch nur einmal diese Definition aktualisieren, anstatt +dass man sie in jeder @file{.ly}-Datei einzeln ändern müsste. + + +@node Notové zápisy a hlasy +@subsection Notové zápisy a hlasy +@translationof Scores and parts + +In Orchestermusik werden alle Noten zweimal gedruckt. Einmal +in einer Stimme für die Spieler, und einmal ein der Partitur +für den Dirigenten. Variablen können benutzen, um sich doppelte +Arbeit zu ersparen. Die Noten werden nur einmal eingegeben und +in einer Variable abgelegt. Der Inhalt der Variable wird dann +benutzt um sowohl die Stimme als auch die Partitur zu erstellen. + +Es bietet sich an, die Noten in einer extra Datei abzulegen. +Nehmen wir an, dass die Datei @file{horn-music.ly} folgende +Noten eines Horn/@/Fagott-Duos enthält: + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e4 d | +@} +@end example + +@noindent +Eine Stimme wird also erstellt, indem man folgendes in eine +Datei schreibt: + +@example +\include "horn-music.ly" + +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +Die Zeile + +@example +\include "horn-music.ly" +@end example + +@noindent +ersetzt den Inhalt von @file{horn-music.ly} an dieser Position +in der Datei, sodass @code{hornNotes} im Folgenden definiert +ist. Der Befehl @code{\transpose f@tie{}c'} zeigt an, dass +das Argument (@code{\hornNotes}) eine Quinte nach oben transponiert +werden soll. Klingendes @code{f} wird als @code{c'}, wie es +die Stimmung eines normalen F-Hornes verlangt. Die Transposition +kann in folgender Notenausgabe gesehen werden: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +In Ensemblestücken sind manche Stimmen für viele Takte stumm. +Das wird durch eine besondere Pause notiert, die Mehrtaktpause. +Sie wird mit einem großen @code{R} notiert, gefolgt von der +Dauer (@code{1}@tie{}für eine Ganze, @code{2}@tie{}für eine Halbe usw.). Indem man die Dauern multipliziert, kann man auch +längere Dauern erzeugen. Diese Pause etwa dauert drei Takte +in einem 2/4-Takt: + +@example +R2*3 +@end example + +Wenn die Stimme gesetzt wird, werden Mehrtaktpausen komprimiert. Das geschieht, indem man folgendes in die Datei +schreibt: + +@example +\set Score.skipBars = ##t +@end example + +@noindent +Dieser Befehl setzt die Eigenschaft @code{skipBars} im +@code{Score}-Kontext auf wahr (@code{##t}). Die Pause und diese Option zu der Musik von oben hinzugefügt, ergibt folgendes +Beispiel: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +Die Partitur wird erstellt, indem man alle Noten kombiniert. +Angenommen, die andere Stimme ist in @code{bassoonNotes} +in der Datei @file{bassoon-music.ly} definiert, würde eine +Partitur erstellt mit: + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +woraus sich ergibt: + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond diff --git a/Documentation/cs/learning/preface.itely b/Documentation/cs/learning/preface.itely new file mode 100644 index 0000000000..7a1261f993 --- /dev/null +++ b/Documentation/cs/learning/preface.itely @@ -0,0 +1,61 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: 940a3955254888e14a8c5ef7e835225e5cc3852c + + 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 Předmluva +@unnumbered Předmluva +@translationof Preface + +Muselo to být nejspíš během zkoušky EJE (Eindhovenského orchestru mladých) +asi v roce 1995, když Jan, jeden ze zvláštních violistů, řekl +Han-Wenovi, jednomu z hráčů na lesní roh, o svém velkolepém novém projektu, +na kterém právě pracoval. Měl to být automatizovaný systém +pro sazbu notového zápisu (abychom byli přesní, +šlo o MPP, preprocesor pro MusiXTeX). Náhodou zrovna chtěl Han-Wen +vytisknout některé pasáže notového zápisu, +a tak se začal dívat po nějakém tom programu a rychle podlehl nadšení. +Bylo rozhodnuto, že MPP vede do slepé uličky, +a po mnohém filozofování a žhavé výměně e-mailů začal +Han-Wen s LilyPondem v roce 1996. Tentokrát byl Jan vtažen do +Han-Wenova nového projektu. + +Vývoj počítačového programu je v mnohém podobný učení se hře +na hudební nástroj. Na začátku je zábavné přicházet na to, jak vše pracuje, +a věci, které neumíte představují dobrodružství. Po počátečním vzrušení však +musíte cvičit a cvičit. Stupnice a etudy mohou být nezáživné, a +a pokud nejste motivován ostatními učiteli, dirigenty nebo +posluchači je velmi lákavé vzdát se. Pokračujete, a pozvolna +se hraní stává součástí vašeho života. Některé dny to jde přirozeně, a +a je to skvělé, a někdy to prostě nejde, ale vy hrajete dále, +den za dnem. + +A tak jako dělání hudby i práce na LilyPondu může být nudnou prací, a +někdy to vypadá jako pachtění se skrzevá močál plný chyb. +Nicméně se stal částí našeho života, a my pokračujeme v práci na něm. +Pravděpodobně nejdůležitější motivací je, že náš program skutečně +dělá něco, co je pro lidi užitečné. Když procházíme internetem, nacházíme +mnoho lidí, kteří LilyPond používají, a vytváří působivá díla notového +zápisu. Pohled na ně vypadá neskutečně, ale velice příjemným způsobem. + +Naši uživatelé nám nejenže dávají dobré pocity plynoucí z toho, že používají náš program, +mnoho z nich nám pomáhá předkládáním návrhů a posíláním hlášení o chybách, a +účastní se mnoha jinými způsoby. Těm všem bychom na tomto místě rádi poděkovali +za to, co pro LilyPond dělají. + +Hra hudby a tisk hudby na papír jsou více než hezkou podobností. Společné programování +je hodně zábavné, a možnost pomáhat lidem je hluboce uspokojující, ale +vposledku nám jde o to, že práce na LilyPondu je cestou, jak vyjádřit naši hlubokou lásku +k hudbě. Doufáme, že vám pomůže vytvořit hodně překrásné hudby! + +Han-Wen a Jan + +Utrecht/Eindhoven, Nizozemí, červenec 2002. + diff --git a/Documentation/cs/learning/templates.itely b/Documentation/cs/learning/templates.itely new file mode 100644 index 0000000000..c8b6940b3a --- /dev/null +++ b/Documentation/cs/learning/templates.itely @@ -0,0 +1,239 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b + + 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" + +@c Translators: Pavel Fric + +@node Předlohy +@appendix Předlohy +@translationof Templates + +Tento úryvek příručky obsahuje předlohy, v nichž je notový zápis +LilyPondu již nastaven. Jen ještě musíte vložit své noty, +soubor přeložit LilyPondem a těšit se z krásného obrazu +not! + +@c bad node name for ancient notation to avoid conflict +@menu +* Jednotlivá notová osnova:: +* Klavírní předlohy:: +* Smyčcový kvartet:: +* Vokální soubor:: +* Orchestrální předloha:: +* Předlohy pro starý notový zápis:: +* Jiné předlohy:: +@end menu + + +@node Jednotlivá notová osnova +@appendixsec Jednotlivá notová osnova +@translationof Single staff + +@appendixsubsec Pouze noty + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-only-notes.ly} + + +@appendixsubsec Noty a text + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-notes-and-lyrics.ly} + + +@appendixsubsec Noty a názvy akordů + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes-and-chords.ly} + + +@appendixsubsec Noty, text a názvy akordů + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes,-lyrics,-and-chords.ly} + + +@node Klavírní předlohy +@appendixsec Klavírní předlohy +@translationof Piano templates + +@appendixsubsec Klavírní sólo + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-simple.ly} + + +@appendixsubsec Klavír a hlas zpěvu + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-melody-and-lyrics.ly} + + +@appendixsubsec Klavír s vystředěným textem + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-lyrics.ly} + + +@appendixsubsec Klavír s vystředěným označením hlasitosti + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-dynamics.ly} + + +@node Smyčcový kvartet +@appendixsec Smyčcový kvartet +@translationof String quartet + +@appendixsubsec Smyčcový kvartet + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-simple.ly} + + +@appendixsubsec Hlasy smyčcového kvartetu + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-with-separate-parts.ly} + + +@node Vokální soubor +@appendixsec Vokální soubor +@translationof Vocal ensembles + +@appendixsubsec Notový zápis SATB + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template.ly} + + +@appendixsubsec Notový zápis SATB a automatický klavírní výtah + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-automatic-piano-reduction.ly} + + +@appendixsubsec SATB s příslušnými prostředími + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} + +@appendixsubsec Sólový zpěv a dvojhlasný refrén + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-verse-and-refrain.ly} + + +@node Orchestrální předloha +@appendixsec Orchestrální předloha +@translationof Orchestral templates + +@appendixsubsec Orchestr, sbor a klavír +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{orchestra,-choir-and-piano-template.ly} + + +@c bad node name to avoid node name conflict +@node Předlohy pro starý notový zápis +@appendixsec Předlohy pro starý notový zápis +@translationof Ancient notation templates + +@appendixsubsec Přepis menzurální hudby + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-mensural-music.ly} + + +@appendixsubsec Předlohy pro přepis gregorianik + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + +@node Jiné předlohy +@appendixsec Jiné předlohy +@translationof Other templates + + +@appendixsubsec Džezová skupina +@translationof Jazz combo + +@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 diff --git a/Documentation/cs/learning/tutorial.itely b/Documentation/cs/learning/tutorial.itely new file mode 100644 index 0000000000..f16502799b --- /dev/null +++ b/Documentation/cs/learning/tutorial.itely @@ -0,0 +1,832 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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 + +@include included/generating-output.itexi + +@c \version "2.14.0" +@c Translators: Pavel Fric + +@node Cvičení +@chapter Cvičení +@translationof Tutorial + +Tato kapitola čtenáři představuje základní práci s LilyPondem. + +@menu +* Přeložení zdrojového souboru:: +* Jak se píší vstupní soubory:: +* Vypořádání se s chybami:: +* Jak číst příručky:: +@end menu + + +@node Přeložení zdrojového souboru +@subsection Přeložení zdrojového souboru +@translationof Compiling a file + +Tento úryvek uvádí do @qq{sestavování} -- do procesu zpracování +LilyPondovských vstupních souborů (napsaných vámi), který popisuje, +aby byl vytvořen výstupní soubor. + +@menu +* Zadání not:: +* MacOS X:: +* Windows:: +* Příkazový řádek:: +@end menu + +@node Zadání not +@subsection Zadání not +@translationof Entering input + +@cindex Sestavení +@cindex První příklad +@cindex Příklad, první +@cindex Přeložení zdrojového souboru +@cindex Psaní velkých a malých písmen +@cindex Zdrojový text, překlad +@cindex Velká písmena +@cindex Malá písmena + +@qq{Sestavení} je pojem, který se používá pro +přeměnu vstupního souboru pro Lilypond programem LilyPond do +notového výstupu. Výstupními soubory jsou v první řadě soubory +PDF (pro prohlížení a tisku), MIDI (pro přehrávání) +a PNG (pro používání na internetových stránkách). Vstupními soubory +pro LilyPond jsou prosté textové soubory. + +První příklad ukazuje, jak takový +jednoduchý vstupní soubor může vypadat. + +@example +@{ + c' e' g' e' +@} +@end example + +Obrazovým výstupem je: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@warning{V každém souboru LilyPond musejí být nastaveny +@strong{@{ kulaté závorky @}} kolem not nebo +písňového textu. +Před a za závorkami mají být zadány prázdné znaky, +aby ve spojení s vlastními symboly not nevznikly +žádné nejasnosti. +Na začátku a na konci řádku mohou být tyto prázdné znaky +vynechány také. Může se stát, že v této příručce +závorky v některých příkladech chybí, ale je třeba vždy +myslet na to, aby se ve vlastních souborech používaly! +Více informací ke znázornění příkladů v této příručce +podává úryvek @ref{Jak číst příručky}.} + +Dodatečně LilyPond rozlišuje @strong{Psaní velkých a malých písmen}. +@w{@samp{ @{ c d e @}}} je přípustný kód, +@w{@samp{ @{ C D E @}}} naproti tomu vede k chybovému hlášení. + + +@smallspace + +@subheading Pohled na výsledky + +@cindex Soubor PDF +@cindex Ukázat noty +@cindex Ukázání not +@cindex Pohled s notami +@cindex Editory +@cindex Textové editory +@cindex LilyPond pod MacOS X +@cindex MacOS X, spuštění LilyPondu +@cindex Spuštění LilyPondu + +Tvorba notového výstupu závisí na tom, jaký operační systém +a které programy se používají. + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (obrazově) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (obrazově) + +@item +@ref{Příkazový řádek, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Příkazový řádek, všechny operační systémy} (Příkazový řádek) + +@end itemize + +Vezměte na vědomí, že lepší výsledky jsou u textových editorů s +podporou pro LilyPond. Více k tomu v úryvku +@rweb{Snadnější úpravy}. + +@warning{Poprvé, když použijete LilyPond, může spuštění trvat minutu +nebo i déle, protože program nejprve vyhledává všechna písma, +LilyPond běží o mnoho rychleji.} + + +@node MacOS X +@subsection MacOS X +@translationof MacOS X + +@cindex Spuštění programu, MacOS X +@cindex MacOS X, spuštění LilyPondu + +@lilypadOSX + + +@node Windows +@subsection Windows +@translationof Windows + +@cindex Windows, spuštění LilyPondu + +@lilypadWindows + + +@node Příkazový řádek +@subsection Příkazový řádek +@translationof Command-line + +@cindex Unix, spuštění LilyPondu + +@lilypadCommandLine + +@node Jak se píší vstupní soubory +@section Jak se píší vstupní soubory +@translationof How to write input files + +Tento úryvek vysvětluje základní skladbu LilyPondu a pomáhá +na začátku se zápisem vstupního souboru pro LilyPond. + +@menu +* Jednoduchý notový zápis:: +* Práce na vstupních souborech:: +@end menu + + +@node Jednoduchý notový zápis +@subsection Jednoduchý notový zápis +@translationof Simple notation + +@cindex jednoduchý notový zápis +@cindex Notový zápis, jednoduchý + +LilyPond přidává některé části notového zápisu automaticky. V +následujícím příkladu jsou zadány jen čtyři výšky tónů, ale LilyPond přesto +zapíše klíč, taktové označení a rytmus (délky not). + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +Tato nastavení je možné změnit, ale ve většině případů +jsou automatické hodnoty v zásadě použitelné. + + +@subheading Výšky tónů + +@cindex Výšky tónů +@cindex Vztažný režim +@cindex Odsuvník (apostrof) +@cindex Čárka +@cindex Předznamenání a vztažný režim +@cindex Vztažný režim a předznamenání + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +Slovníček: @rglos{pitch}, @rglos{interval}, +@rglos{scale}, @rglos{middle C}, @rglos{octave}, +@rglos{accidental}. + +@c Addition for czech users about pitch naming conventions +Výšky tónů se zadávají malými písmeny, která odpovídají názvu noty. +Je ale důležité znát, že LilyPond ve svém výchozím nastavení +používá anglické názvy not. Až na výjimku tyto odpovídají +českým, proto se přednastavení LilyPondu pro toto +cvičení ponechává. Touto @emph{výjimkou} je nota h -- v +LilyPondu se musí na místo toho napsat písmeno b! České bé je naproti +tomu zapsáno jako bes, his se proti tomu zapíše jako bis. Podívejte se také na +@ruser{Předznamenání} a @ruser{Názvy not v jiných řečích}. Zde se popisuje, +jak se používají české názvy not. +@c end addition + +Nejjednoduššeji lze noty zadávat v režimu @code{\relative}. +V tomto režimu je oktáva noty vbrána automaticky s tím, že se +předpokládá, že následující nota je zapsána vždy tak blízko, jak +je to jen možné, ve vztahu k předchozí notě, což znamená, že je +zapsána nanejvýš o tři notové řádky výše nebo níže než předchozí +nota. Začneme naším prvním nejzákladnějším příkladem notového zápisu, +což je @notation{stupnice}, kde stojí další nota +vždy jen o jeden notový řádek nad předchozím. + +@c KEEP LY +@lilypond[verbatim,quote] +% Počáteční bod napsat na jednočárkovaném C +\relative c' { + c d e f + g a b c +} +@end lilypond + +První notou je @notation{jednočárkované C}. Každá následující nota +se nachází tak blízko, jak je to jen možné za předchozí -- první +@q{C} se takto počítá jako C od +jednočárkovaného C. Nato následuje nejbližší možné +D ve vztahu k předcházející notě. S těmito pravidly lze v +režimu @code{\relative} zobrazit i melodie s většími +intervaly: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +Není nutné, aby první nota melodie začínala +notou, která udává první notovou výšku. +První nota (@q{D}) z předchozího příkladu je následujícím D, +počítáno od jednočárkovaného C. + +Tím, že člověk přidává odsuvníky (apostrofy) @code{'} +(klávesa Shift+#) nebo čárky @code{,} k @w{@code{\relative c' @{}}, nebo +je odstraňuje, může být oktáva první výšky tónu změněna: + +@c KEEP LY +@lilypond[verbatim,quote] +% dvoučárkované C +\relative c'' { + e c a c +} +@end lilypond + +Vztažný režim se může zpočátku jevit matoucí, ale je to ten +nejjednodušší způsob, jak zapsat většinu melodií. Podívejme se na to, +H (@code{b} ve skladbě LilyPondu), které se v houslovém klíči +nachází na prostřední lince, můžeme směrem vzhůru napsat C, D a E, +a A, G a F směrem dolů pod H. Když tedy notou, která následuje po +H, je C, D nebo E, napíše ji LilyPond nad +H, když je to A, G nebo F, je napsáno pod ním. + +@c KEEP LY +@lilypond[verbatim,quote] +\relative c'' { + b c % c je 1 řádek nahoru, tedy c nad b + b d % d je 2 řádky nahoru, nebo 5 dolů, tedy d nad b + b e % e je 3 nahoru, nebo 4 dolů, tedy e pod b + b a % a je 6 nahoru, nebo 1 dolů, tedy a pod b + b g % g je 5 nahoru, nebo 2 dolů, tedy g pod b + b f % f je 4 nahoru, nebo 3 dolů, tedy f pod b +} +@end lilypond + +Stejný výpočet se provádí i tehdy, když je jedna z not zvýšena +nebo snížena. @notation{Předznamenání} jsou +při výpočtu @strong{zcela přehlížena}. Přesně ten samý +výpočet se obdobně provádí od každé následující výšky tónu po +další výšku tónu znovu. + +Aby se zapsaly intervaly, které jsou větší než tři notové řádky, lze oktávy změnit. Odsuvníkem (apostrofem) @code{'} (klávesa Shift+#) +posazeným přímo za název noty se oktáva zvýší o jednu, čárkou @code{,} se oktáva o jednu sníží. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +Kvůli změně výšky noty o dvě (či více!) oktávy, +se používají postupné odsuvníky @code{''} nebo @code{,,} -- přitom se musí +jednat skutečně o dva odsuvníky a ne o uvozovky +@code{"}@tie{} (klávesa Shift+2)! + + +@subheading Délky tónů (rytmy) + +@cindex Délky not +@cindex Délky +@cindex Rytmus +@cindex Celé noty +@cindex Půlové noty +@cindex Čtvrťové noty +@cindex Tečkované noty + +Slovníček: @rglos{beam}, @rglos{duration}, +@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, +@rglos{dotted note}. + +@notation{Délka} se označuje číslem, jež je zadáno +přímo k názvu noty. +@code{1} pro @notation{Celá nota}, @code{2} pro +@notation{Půlová nota}, @code{4} pro @notation{Čtvrťová nota} +a tak dále. @notation{Notové nožičky} a @notation{Trámce} jsou +přidávány automaticky. + +Není-li označena žádná délka, používá se délka předcházející noty. +Pro první notu je jako výchozí určena čtvrťová nota. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +Aby se vytvořila @notation{Tečkovaná nota} +napíše se tečka @code{.} za délkou noty. Délka +tečkované noty musí být udána výslovně, tudíž včetně +čísla. + +@lilypond[verbatim,quote] +\relative c'' { + a4 a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Pomlky + +@cindex Pomlky +@cindex psaní pomlk +@cindex notový zápis pomlk + +@notation{Pomlka} se zadává tím samým způsobem, jakým se zadává nota; jejím +označením je @code{r}@tie{}: + +@lilypond[verbatim,quote] +\relative c'' { + a4 r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Taktové označení + +@cindex Druh taktu + +@funindex \time +@funindex time + +Slovníček: @rglos{time signature}. + +@notation{Druh taktu} lze určit příkazem +@code{\time}: + +@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 Vyznačení tempa + +@cindex Vyznačení tempa +@cindex Údaj metronomu + +@funindex \tempo +@funindex tempo + +Slovníček: @rglos{tempo indication}, @rglos{metronome}. + +@notation{Vyznačení tempa} a @notation{údaj metronomu} lze +zapsat příkazem @code{\tempo}: + +@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 + + +@subheading Notový klíč + +@cindex Klíč +@cindex Alt +@cindex Soprán +@cindex Tenor +@cindex Bas + +@funindex \clef +@funindex clef + +Slovníček: @rglos{clef}. + +@notation{Notový klíč} lze zapsat příkazem +@code{\clef}: + +@lilypond[verbatim,quote] +\relative c' { + \clef "treble" + c1 + \clef "alto" + c1 + \clef "tenor" + c1 + \clef "bass" + c1 +} +@end lilypond + + +@subheading Vše dohromady + +Zde je malý příklad, který obsahuje všechna tato vymezení: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + \tempo "Andante" 4 = 120 + c2 e8 c' + g'2. + f4 e d + c4 c, r4 +} +@end lilypond + + +@seealso +Doporučení pro notový zápis: @ruser{Nastavení výšek tónů}, +@ruser{Zadání rytmu}, @ruser{Zadání pomlk}, +@ruser{Udání taktu}, @ruser{Notový klíč}. + + +@node Práce na vstupních souborech +@subsection Práce na vstupních souborech +@translationof Working on input files + +@cindex kulaté závorky +@cindex Závorky, kulaté +@cindex Poznámky +@cindex Řádkové poznámky +@cindex Blokové poznámky +@cindex Psaní velkých a malých písmen +@cindex Výrazy +@cindex Velká písmena +@cindex Malá písmena + +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + + +Zdrojové soubory LilyPondu jsou si podobné se soubory ve většině +programovacích jazyků: Obsahují označení verze, +je třeba dávat pozor na psaní velkých a malých písmen +a prázdné znaky jsou přehlíženy. Výrazy jsou uzavřeny +do složených závorek @w{@code{@{ @}}} a poznámky +jsou značeny znakem procenta @code{%} +nebo obklopeny @w{@code{%@{ @dots{} %@}}}. + +Zdá-li se to nyní být nesrozumitelné, zde je vysvětlení: + +@itemize +@item +@strong{Označení verze}: +Každý soubor LilyPondu musí obsahovat označení verze. +Označení verze je jeden řádek, který vyhlašuje tu verzi LilyPondu, +pro kterou byl onen soubor napsán, jak je to zřejmé na +příkladu: + +@example +\version "@w{@version{}}" +@end example + +Obvykle je označení verze v souboru napsáno +nahoře. + +Označení verze je velice důležité ze dvou důvodů: 1. s jeho pomocí +se lze pustit do automatické aktualizace vstupních souborů, +když je třeba změnit skladbu LilyPondu. 2. je zde zapsána +ta verze LilyPondu, která je nutná pro sestavení +souboru. + +Když označení verze v souboru chybí, vydá LilyPond +během sestavování souboru varování. + +@item +@strong{Psaní velkých a malých písmen:} +Význam znaku se mění podle toho, zda je zapsáno +velké (@w{@code{A, B, S, T}}) nebo malé + (@w{@code{a, b, s, t}}). Noty se vždy musí zapisovat +malými písmeny, @w{@samp{@{ c d e @}}} se chová vhodně, +zatímco @w{@samp{@{ C D E @}}} vyrábí chybu. + +@item @strong{Prázdné znaky:} +Nehraje žádnou úlohu, kolik prázdných znaků nebo tabulátorů nebo +prázdných řádků se nachází mezi znaky zdrojového souboru. +@w{@samp{@{ c d e @}}} znamená totéž co +@w{@samp{@{ c @ @ @ @ @ d e @}}} nebo +@example +@{ c4 d + e @} +@end example + +@noindent +Přirozeně se poslední příklad čte o něco hůře. Dobrým pravidlem je +odsazovat bloky kódu dvěma prázdnými znaky: +@example +@{ + c4 d e +@} +@end example + +Prázdné znaky @emph{jsou} však nezbytné kvůli oddělení četných +skladebných prvků od sebe. Prázdné znaky tedy mohou být @emph{přidány} +vždy, ale nesmějí být @emph{odstraněny}. Jelikož chybějící +prázdné znaky mohou způsobit velmi podivná chybová hlášení. +Je záhodno přidat jeden prázdný znak vždy před a po skladebném +prvku, zhruba před a po složených závorkách. + +@item @strong{Výrazy:} +I ten nejmenší úryvek kódu LilyPondu musí být uzavřen ve +@strong{@{@tie{}složených@tie{}závorkách@tie{}@}}. Tyto +závorky LilyPondu ukazují, že se jedná o hudební výraz patřící +k sobě, právě tak jako k sobě patří kulaté závorky @q{()} v matematice. +Závorky by měly být pokaždé obklopeny prázdným znakem, abychom se vyhnuli +dvojznačnostem. Má to pak ještě být tak, aby se nacházely +na začátku nebo na konci řádku. + +Příkaz pro LilyPond následovaný jednoduchým výrazem +v závorkách (jako například @q{@w{@code{@bs{}relative c' @{ @dots{} @}}}}) +je též hodnocen jako jednotlivý hudební výraz. + +@cindex Poznámky +@cindex Řádkové poznámky +@cindex Blokové poznámky + +@item +@strong{Poznámky:} +Poznámka je připomínkou lidskému čtenáři zdrojového souboru. +Při zpracování souboru je programem přehlížena, takže na tiskový +výstup not nemá žádný účinek. +Jsou dva rozdílné druhy poznámek. Znak procenta +@q{%} předchází řádkové poznámce: vše po tomto znaku +je v tomto řádku přehlíženo. +Obvykle je řádková poznámka připsána @emph{nad} kódem, +ke kterému se vztahuje. + +@example +a4 a a a +% Tato poznámka se odvolává na H +b2 b +@end example + + +Bloková poznámka je celým úryvkem s poznámkou. +Vše, co je obklopeno @code{%@{} +a @code{%@}}, se přehlíží. Znamená to, +že jedna bloková poznámka se nemůže nacházet v jiné +blokové poznámce. Když byste to zkusili, +ukončí již první @code{%@}} @emph{obě} +blokové poznámky. Následující příklad ukazuje jedno +možné použití poznámek: + +@example +% Noty pro zajiskření zajiskření zde + c4 c g' g a a g2 + +%@{ + Tyto řádky a noty dole jsou přehlíženy, + protože se nacházejí v jedné blokové + poznámce. + + f4 f e e d d c2 +%@} +@end example + +@end itemize + + +@node Vypořádání se s chybami +@section Vypořádání se s chybami +@translationof Dealing with errors + +@cindex Řešení chyb + +Někdy LilyPond nevytvoří notový obraz takový, jaký jste očekávali. Tento +úryvek poskytuje několik odkazů, aby vám pomohl při řešení +potíží, se kterými byste se mohli setkat. + + +@menu +* Obecné rady k řešení chyb:: +* Některé časté chyby:: +@end menu + +@node Obecné rady k řešení chyb +@subsection Obecné rady k řešení chyb +@translationof General troubleshooting tips + +Řešení chyb při potížích s LilyPondem může pro člověka, který je +zvyklý na obrazové uživatelské rozhraní, představovat velkou výzvu, protože +neplatné vstupní soubory vytvořeny být mohou. Když se tak stane, je +logický postup pustit se do toho, potíže určit a řešit, tou nejlepší +cestou. Některé směrnice, jak se tyto potíže můžete naučit řešit, +se nacházejí v @rprogram{Řešení potíží}. + + +@node Některé časté chyby +@subsection Některé časté chyby +@translationof Some common errors + +@cindex časté chyby +@cindex Chyby, časté + +Jsou některé běžné chyby, které se dají vyřešit obtížně, když má člověk +jen hlášení chyb v souboru s chybami. Blíže budou osvětleny v +@rprogram{Časté chyby}. + + + +@node Jak číst příručky +@section Jak číst příručky +@translationof How to read the manuals + +Tato část ukazuje, jak lze dokumentaci číst účinně, +a vysvětluje také některé užitečné vlastnosti internetové +verze. + +@menu +* Vypuštěný materiál:: +* Klepnutelné příklady:: +* Přehled o příručkách:: +@end menu + + +@node Vypuštěný materiál +@subsection Vypuštěný materiál +@translationof Omitted material + +@cindex Příručka, čtení +@cindex Jak číst příručky +@cindex Čtení příručky +@cindex Příklady, klepnutelné +@cindex Klepnutelné příklady +@cindex Předlohy +@cindex Předlohy +@cindex Sestavit soubory, odkazy +@cindex Sestavení souborů, odkazy +@cindex Odkazy pro sestavení souborů + +LilyPondovský kód musí být vždy obklopen znaky složených závorek @code{@{ @}} nebo +kódem @w{@code{@bs{}relative c'' @{ @dots{} @}}}, jak je to ukázáno +v části @ref{Práce na vstupních souborech,,práci na vstupních souborech}. +Ve zbytku této příručky se toho ovšem většina příkladů vzdá. +Abyste tyto příklady napodobil, můžete zkopírovat odpovídající zdrojový +kód a vložit jej do textového souboru, ale přitom +@strong{musíte} vložit +@w{@code{@bs{}relative c'' @{ @dots{} @}}}, jak je to ukázáno zde: + +@example +\relative c'' @{ + @dots{}zde přijde příklad@dots{} +@} +@end example + +Proč se zde většinou vynechávají závorky? Většina příkladů +může být nakopírována do delšího hudebního díla, a potom přirozeně +není smysluplné, když se k tomu nachomýtne +@w{@code{@bs{}relative c'' @{ @dots{} @}}}; @code{\relative} nesmí +být zapsán uvnitř jiného @code{\relative}, +proto je zde vynechán, aby příklady pracovaly i v jiném +prostředí. Kdyby byla u každého příkladu zapsána +@w{@code{@bs{}relative c'' @{ @dots{} @}}}, +nemohly by se malé příklady z dokumentace jednoduše přidat +do vašeho vlastního notového textu. Většina uživatelů chce noty +přidat do již jsoucího souboru někde vprostřed, a z toho důvodu +byl vztažný režim v příkladech v příručce +vynechán. + +Myslete také na to, že každý soubor LilyPondu má mít označení verze +příkazem @code{\version}. Protože jsou příklady v příručkách úryvky +a nikoli úplnými soubory, chybí zde označení verze. Vždy byste je ale +do svých vlastních souborů měli vložit. + + +@node Klepnutelné příklady +@subsection Klepnutelné příklady +@translationof Clickable examples + +@warning{Tato vlastnost je pouze v dokumentaci HTML.} + +Mnoho lidí se učí programům tím, že se v nich jednoduše vrtají. Jde +to i s LilyPondem. Když ve verzi HTML této příručky klepnete na +nějaké vyobrazení, obdržíte přesný kód LilyPondu, jenž byl +použit pro sazbu obrázku. Vyzkoušejte to s tímto +vyobrazením: + +@c no verbatim here +@c KEEP LY +@lilypond[quote] +\relative c'' { + c4-\markup { \bold \huge { Klepněte sem! } } +} +@end lilypond + +Když zkopírujete jednoduše vše, co se nachází v úryvku + @qq{ly snippet}, a vložíte to do textového souboru, +máte již hotovou předlohu pro další pokusy. +Experimente. Abyste sám dosáhl téhož vzhledu, jaký je v příkladu, +musíte zkopírovat vše od řádku @qq{Start +cut-&-pastable section} až do konce souboru. + + +@ignore + +@n ode Navádění klávesnicí +@s ubsection Navádění klávesnicí +@translationof Keyboard navigation + +@warning{Tato funkce je pouze ve verzi HTML příručky.} + +@c TODO: once this is figured out, insert it here. + +V současnosti se na této funkci pracuje. +@end ignore + + +@node Přehled o příručkách +@subsection Přehled o příručkách +@translationof Overview of manuals + + +Pro LilyPond je hodně dokumentace. Noví uživatelé jsou často popleteni +tím, které části z ní mají číst, a tak se stává, že někdy nejsou +čteny její důležité části. + +@warning{Nepřeskakujte, prosím, žádné důležité části +dokumentace. Jinak pro vás bude později o hodně těžší +rozumět pozdějším částem.} + +@itemize + +@item +@strong{Předtím než @emph{cokoli} vyzkoušíte}: Přečtěte si části +@ref{Cvičení} a @ref{Běžný notový zápis}. Když narazíte +na hudební odborné pojmy, které neznáte, +podívejte se na ně v části @rglosnamed{Začátek, Slovníček}. + +@item +@strong{Předtím než napíšete úplný kousek}: Přečtěte si část +@ref{Základní pojmy} v příručce k učení se. +Potom se můžete na pro váš projekt důležité části podívat +v @rusernamed{Začátek, Doporučení pro notový zápis}. + +@item +@strong{Předtím než se pokusíte měnit obvyklý notový zápis}: +Přečtěte si @ref{Ladění výstupu,,o ladění výstupu} v příručce k učení se. + +@item +@strong{Předtím než se pustíte do většího projektu}: Přečtěte si část +@rprogram{Návrhy, jak psát soubory} +v části věnované používání programu. + +@end itemize + diff --git a/Documentation/cs/learning/tweaks.itely b/Documentation/cs/learning/tweaks.itely new file mode 100644 index 0000000000..64592c60fa --- /dev/null +++ b/Documentation/cs/learning/tweaks.itely @@ -0,0 +1,4558 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + 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 Ladění výstupu +@chapter Ladění výstupu +@translationof Tweaking output + +In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern +kann. In LilyPond kann man sehr viel konfigurieren, fast jedes +Notenfragment kann geändert werden. + + +@menu +* Základy pro ladění:: +* Vnitřní referenční příručka:: +* Vzhled předmětů:: +* Umístění předmětů:: +* Střety předmětů:: +* Další ladění:: +@end menu + + +@node Základy pro ladění +@section Základy pro ladění +@translationof Tweaking basics + +@menu +* Úvod do ladění:: +* Předměty a rozhraní:: +* Pravidla pro pojmenovávání předmětů a vlastností:: +* Postupy při ladění:: +@end menu + +@node Úvod do ladění +@subsection Úvod do ladění +@translationof Introduction to tweaks + +@qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die +verschiedenen Methoden, die Aktionen zu beeinflussen, die während +der Kompilation einer Notationsdatei vorgenommen werden sowie auf +das Notenbild einzuwirken. Einige dieser Optimierungen sind sehr +einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das +System an Optimierungen so gut wie alle möglichen Erscheinungsformen +für die Notenausgabe. + +In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt, +um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen +Befehlen bereitgestellt werden, die einfach in die Quelldatei +kopiert werden können um den selben Effekt wie im Beispiel +zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle +konstruiert werden, so dass Sie in der Lage sein werden, eigene +Befehle auf dieser Grundlage zu entwickeln. + +Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den +Abschnitt @ref{Prostředí a rytci} interessieren, dann +prostředí a rytci sowie die Eigenschaften, die mit ihnen +verknüpft sind, sind die Voraussetzung, um die Funktionsweise +von Optimierungen verstehen zu können. + + +@node Předměty a rozhraní +@subsection Předměty a rozhraní +@translationof Objects and interfaces + +@cindex Objekte +@cindex Grobs +@cindex Spanners +@cindex Interfaces +@cindex Strecker +@cindex Schnittstellen +@cindex graphische Objekte (Grob) +@cindex Objekteigenschaften +@cindex Layout-Objekt +@cindex Objekt, Layout- +@cindex Eigenschaften von Objekten + +Optimierung bedeutet, die internen Operationen und Strukturen +des LilyPond-Programmes zu verändern, darum sollen hier +zunächst die wichtigsten Begriffe erklärt werden, die zur +Beschreibung dieser Operationen und Strukturen benutzt werden. + +Der Begriff @qq{Objekt} ist ein allgemeiner Begriff, mit dem +die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond +während der Bearbeitung des Quelltextes erstellt. Wenn etwa +ein Befehl wie @code{\new Staff} auftritt, wird ein neues Objekt +vom Typ @code{Staff} erstellt. Dieses Objekt @code{Staff} enthält +dann alle Eigenschaften, die mit diesem speziellen Notensystem +verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und +spezifische Angaben über die Engraver, die innerhalb dieses Systems +eingesetzt werden. Für alle anderen Kontexte gibt es genauso +Objekte, die deren Eigenschaften beinhalten, beispielsweise für +@code{Voice}-Objekte, @code{Score}-Objekte, @code{Lyrics}-Objekte, +aber auch für Objekte, die Notationselemente wie die Taktlinien, +Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes +Objekt hat eine eigene Gruppe an Eigenschaftswerten. + +Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die +Notationselemente der gesetzten Ausgabe repräsentieren, also +Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden +@qq{Layout-Objekte}, oft auch @qq{Graphische Objekte} genannt. +Daraus resultiert die künstliche Abkürzung @qq{Grob}. +Diese sind auch Objekte im allgemeinen Sinn und haben genauso +Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position, +Farbe usw. + +Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen, +Crescendo-Klammern, Oktavierungszeichen und viele andere +Grobs sind nicht an einer Stelle plaziert -- sie haben vielmehr +einen Anfangspunkt, einen Endpunkt und eventuell noch andere +Eigenschaften, die ihre Form bestimmen. Objekte mit solch +einer erweiterten Gestalt werden als @qq{Strecker} (engl. Spanners) +bezeichnet. + +Es bleibt uns noch übrig zu erklären, was @qq{Schnittstellen} +(engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich +sind, haben sie doch oft gemeinsame Eigenschaften, die auf +die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise +haben eine Farbe, eine Größe, eine Position usw. und alle +diese Eigenschaften werden von LilyPond auf die gleiche Weise +verarbeitet, während der Quelltext in Notensatz umgesetzt wird. +Um die internen Operationen zu vereinfachen, sind alle diese +gemeinsamen Prozesse und Eigenschaften in einem Objekt +mit der Bezeichnung @code{grob-interface} (Schnittstelle eines +graphischen Objektes) zusammengefasst. Es gibt viele andere +Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung +besitzen, welche auf @code{-interface} endet. Insgesamt +gibt es über 100 dieser Schnittstellen. Wir werden später sehen, +was es damit auf sich hat. + +Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung +kommen sollen. + + +@node Pravidla pro pojmenovávání předmětů a vlastností +@subsection Pravidla pro pojmenovávání předmětů a vlastností +@translationof Naming conventions of objects and properties + +@cindex Benennungskonventionen für Objekte +@cindex Benennungskonventionen für Eigenschaften +@cindex Objekte, Benennungskonventionen +@cindex Eigenschaften, Benennungskonventionen +@cindex Regeln zur Benennung von Objekten/Eigenschaften + +Es wurden schon früher einige Regeln zur Benennung von +Objekten vorgestellt, siehe +@ref{Prostředí a rytci}. Hier eine Referenzliste der +häufigsten Objekt- und Eigenschaftsbezeichnungen mit +den Regeln für ihre Bezeichnung und +illustrierenden echten Bezeichnungen. Es wurde @qq{A} +für einen beliebigen Großbuchstaben und @qq{aaa} für eine +beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere +Zeichen werden explizit angegeben. + +@multitable @columnfractions .33 .33 .33 +@headitem Objekt-/Eigenschaftstyp + @tab Naming convention + @tab Beispiele +@item Kontexte + @tab Aaaa oder AaaaAaaaAaaa + @tab Staff, GrandStaff +@item Layout-Objekte + @tab Aaaa oder AaaaAaaaAaaa + @tab Slur, NoteHead +@item Engraver + @tab Aaaa_aaa_engraver + @tab Clef_engraver, Note_heads_engraver +@item Schnittstellen + @tab aaa-aaa-interface + @tab grob-interface, break-aligned-interface +@item Kontext-Eigenschaften + @tab aaa oder aaaAaaaAaaa + @tab alignAboveContext, skipBars +@item Layout-Objekt-Eigenschaften + @tab aaa oder aaa-aaa-aaa + @tab direction, beam-thickness +@end multitable + +Es wird bald ersichtlich werden, dass die Eigenschaften von +unterschiedlichen Objekttypen mit unterschiedlichen Befehlen +geändert werden. Deshalb ist es nützlich, aus der +Schreibweise zu erkennen, um was +für ein Objekt es sich handelt, um den entsprechenden +Befehl einsetzen zu können. + + +@node Postupy při ladění +@subsection Postupy při ladění +@translationof Tweaking methods + +@cindex override-Befehl +@funindex \override +@funindex override + +@strong{Der \override-Befehl} + +Wir haben uns schon mit den Befehlen @code{\set} +und @code{\with} bekannt gemacht, mit welchen +Eigenschaften von @strong{Kontexten} verändert +und @strong{Engraver} entfernt oder hinzugefügt +werden können. Siehe dazu +@ref{Změna vlastností prostředí} und @ref{Přidání a odstranění rytců}. Jetzt wollen wir uns weitere +wichtige Befehle anschauen. + +Der Befehl, um die Eigenschaften von @strong{Layout-Objekten} +zu ändern, ist @code{\override}. Weil dieser Befehl interne +Eigenschaften tief in der Programmstruktur von LilyPond +verändern muss, ist seine Syntax nicht so einfach wie die der +bisherigen Befehle. Man muss genau wissen, welche Eigenschaft +welches Objektes in welchem Kontext geändert werden soll, +und welches der neu zu setzende Wert dann ist. Schauen wir +uns an, wie das vor sich geht. + +Die allgemeine Syntax dieses Befehles ist: + +@example +\override @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} = +#@var{Wert} +@end example + +@noindent +Damit wir die Eigenschaft mit der Bezeichnung @var{layout-property} +das Layout-Objektes mit der Bezeichnung@var{LayoutObject}, +welches ein Mitglied des @var{Kontext}-Kontextes ist, auf den +Wert @var{value}. + +Der @var{Kontext} kann (und wird auch normalerweise) ausgelassen +werden, wenn der benötigte Kontext eindeutig impliziert ist und einer +der untersten Kontexte ist, also etwa @code{Voice}, @code{ChordNames} +oder @code{Lyrics}. Auch in diesem Text wird der Kontext oft ausgelassen +werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich +definiert werden muss. + +Spätere Abschnitte behandeln umfassend Eigenschaften und ihre +Werte, aber um ihre Funktion und ihr Format zu demonstrieren, +werden wir hier nur einige einfache Eigenschaften und Werte einsetzen, +die einfach zu verstehen sind. + +Für den Moment könne Sie die @code{#'}-Zeichen ignorieren, die vor jeder +Layout-Eigenschaft, und die @code{#}-Zeichen, die vor jedem Wert +stehen. Sie müssen immer in genau dieser Form geschrieben werden. +Das ist der am häufigsten gebrauchte Befehl für die Optimierung, +und der größte Teil dieses Abschnittes wird dazu benutzt, seine Benutzung +zu erläutern. Hier ein einfaches Beispiel, um die Farbe des Notenkopfes +zu ändern: + +@cindex color-Eigenschaft, Beispiel +@cindex Farb-Eigenschaft, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a b c | +@end lilypond + + +@strong{Der \revert-Befehl} + +@cindex revert-Befehl +@funindex \revert +@funindex revert + +Wenn eine Eigenschaft einmal überschrieben wurde, wird ihr +neuer Wert so lange bewahrt, bis er noch einmal überschrieben +wird oder ein @code{\revert}-Befehl vorkommt. Der +@code{\revert}-Befehl hat die folgende Syntax und setzt den +Wert der Eigenschaft zurück auf den Standardwert, nicht +jedoch auf den vorigen Wert, wenn mehrere +@code{\override}-Befehle benutzt wurden. + +@example +\revert @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} +@end example + +Wiederum, genauso wie der @var{Kontext} bei dem @code{\override}-Befehl, +wird @var{Kontext} oft nicht benötigt. Er wird in vielen der folgenden +Beispiele ausgelassen. Im nächsten Beispiel wird die Farbe des Notenkopfes +wieder auf den Standardwert für die letzten zwei Noten gesetzt. + +@cindex color-Eigenschaft, Beispiel +@cindex Farb-Eigenschaft, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a +\revert NoteHead #'color +b4 c | +@end lilypond + +@strong{\once-Präfix} + +@funindex \once +@funindex once + +Sowohl der @code{\override}-Befehl als auch der @code{\set}-Befehl können mit +dem Präfix @code{\once} (@emph{einmal}) versehen werden. Dadurch wird +der folgende @code{\override}- oder @code{\set}-Befehl nur für den aktuellen +Musik-Moment wirksam, bevor sich wieder der Standard einstellt. Am gleichen +Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes +geändert werden: + +@cindex color-Eigenschaft, Beispiel +@cindex Farb-Eigenschaft, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\once \override NoteHead #'color = #red +e4 f | +\once \override NoteHead #'color = #green +g4 a b c | +@end lilypond + + +@strong{Der \overrideProperty-Befehl} + +@cindex overrideProperty-Befehl + +@funindex \overrideProperty +@funindex overrideProperty + +Es gibt eine andere Form des @code{override}-Befehls, +@code{\overrideProperty} (überschreibe Eigenschaft), +welcher ab und zu benötigt wird. Es wird hier nur der +Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert +in @rextend{Schwierige Korrekturen}. +@c Maybe explain in a later iteration -td + + +@strong{Der \tweak-Befehl} + +@cindex tweak-Befehl +@funindex \tweak +@funindex tweak + +Der letzte Optimierungsbefehl in LilyPond ist @code{\tweak} +(engl. optimieren). Er wird eingesetzt um Eigenschaften +von Objekten zu verändern, die zum selben Musik-Moment +auftreten, wie etwa die Noten eines Akkordes. Ein +@code{\override} würde alle Noten des Akkords beeinflussen, +während mit @code{\tweak} nur das nächste Objekt der +Eingabe geändert wird. + +Hier ein Beispiel. Angenommen, die Größe des mittleren +Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert +werden. Schauen wir zuerst, was wir mit +@code{\once \override} erhalten: + +@cindex Schriftgröße, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +\once \override NoteHead #'font-size = #-3 +4 +4 +@end lilypond + +Wie man sehen kann, beeinflusst @code{override} @emph{alle} +Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten +eines Akkordes zum selben Musik-Moment auftreten und +die Funktion von @code{\once} ist es, die Optimierung auf +an allen Objekten auszuführen, die zum selben Musik-Moment +auftreten wie der @code{\override}-Befehl. + +Der @code{\tweak}-Befehl funktioniert anders. Er bezieht sich +auf das direkt folgende Element in der Eingabe-Datei. Es wirkt +aber auch nur mit Objekten, die direkt von der Eingabe kreiert +werden, insbesondere Notenköpfe und Artikulationszeichen. +Objekte wie etwa Hälse oder Versetzungszeichen werden erst +später erstellt und lassen sich nicht auf diese Weise ändern. +Zusätzlich @emph{müssen} sich etwa Notenköpfe innerhalb +eines Akkordes befinden, d. h. sie müssen von einfachen spitzen +Klammern umschlossen sein. Um also eine einzelne Note +mit @code{\tweak} zu verändern, muss der Befehl innerhalb +der spitzen Klammern zusammen mit der Note eingegeben werden. + +Um also zu unserem Beispiel zurückzukommen, könnte man die +mittlere Note eines Akkordes auf diese Weise ändern: + +@cindex font-size-Eigenschaft, Beispiel +@cindex Schriftgröße, Beispiel +@cindex @code{\tweak}-Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +4 +@end lilypond + +Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich +von der des @code{\override}-Befehls unterscheidet. Weder +Kontext noch Layout-Objekt können angegeben werden, denn +das würde zu einem Fehler führen. Beide Angaben sind +durch das folgende Element impliziert. Hier sollte auch +kein Gleichheitszeichen vorhanden sein. Die verallgemeinerte +Syntax des @code{\tweak}-Befehls ist also einfach + +@example +\tweak #'@var{layout-eigenschaft} #@var{Wert} +@end example + +Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur +eine von mehreren Artikulationen zu ändern, wie im nächsten +Beispiel zu sehen ist. + +@cindex Farb-Eigenschaft, Beispiel +@cindex @code{\tweak}-Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4^"Black" + -\tweak #'color #red ^"Red" + -\tweak #'color #green _"Green" +@end lilypond + +@noindent +Beachten Sie, dass dem @code{\tweak}-Befehl ein Artikulationsmodifikator +vorangestellt werden muss, ganz als ob er selbst ein Artikulationszeichen +wäre. + +@cindex Triolen, geschachtelt +@cindex N-tolen, geschachtelt +@cindex Klammer, Triole +@cindex Triolenklammer +@cindex N-tolenklammer +@cindex Komplizierte Rhythmen, Schachtelung von +@funindex TupletBracket + +Der @code{\tweak}-Befehl muss auch benutzt werden, wenn das +Aussehen einer vor mehreren geschachtelten Triolenklammern +geändert werden soll, die zum selben Zeitpunkt beginnen. +Im folgenden Beispiel beginnen die lange Klammer und die +erste Triolenklammer zum selben Zeitpunkt, sodass ein +@code{\override}-Befehl sich auf beide beziehen würde. +In dem Beispiel wird @code{\tweak} benutzt, um zwischen +ihnen zu unterscheiden. Der erste @code{\tweak}Befehl +gibt an, dass die lange Klammer über den Noten gesetzt +werden soll, und der zweite, dass die Zahl der rhythmischen +Aufteilung für die erste der kurzen Klammern in rot +gesetzt wird. + +@cindex Farb-Eigenschaft, Beispiel +@cindex @code{\tweak}-Beispiel +@cindex Richtungs-Eigenschaft, Beispiel +@cindex color-Eigenschaft, Beispiel +@cindex direction-Eigenschaft, Beispiel + +@lilypond[quote,ragged-right,verbatim,fragment,relative=2] +\tweak #'direction #up +\times 4/3 { + \tweak #'color #red + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + +Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt +beginnen, kann ihr Aussehen auf die übliche Art mit dem +@code{\override}-Befehl geändert werden: + +@cindex text-Eigenschaft, Beispiel +@cindex tuplet-number-Funktion, Beispiel +@cindex transparent-Eigenschaft, Beispiel +@cindex TupletNumber, Beispiel zur Veränderung +@cindex Triolennummer, Beispiel zur Veränderung +@cindex Triolen-Nummer-Funktion, Beispiel + +@c NOTE Tuplet brackets collide if notes are high on staff +@c See issue 509 +@lilypond[quote,ragged-right,verbatim,fragment,relative=1] +\times 2/3 { c8[ c c] } +\once \override TupletNumber + #'text = #tuplet-number::calc-fraction-text +\times 2/3 { + c8[ c] + c8[ c] + \once \override TupletNumber #'transparent = ##t + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Der tweak-Befehl}. + + +@node Vnitřní referenční příručka +@section Vnitřní referenční příručka +@translationof The Internals Reference manual + +@menu +* Vlastnosti předmětů v rozvržení:: +* Vlastnosti nacházející se v rozhraních:: +* Typy vlastností:: +@end menu + +@node Vlastnosti předmětů v rozvržení +@subsection Vlastnosti předmětů v rozvržení +@translationof Properties of layout objects + +@cindex Eigenschaften von Layout-Objekten +@cindex Eigenschaften von Grobs +@cindex Grobs, Eigenschaften von +@cindex Layout-Objekte, Eigenschaften von +@cindex Property (Layout-Objekte, Grobs) +@cindex Regerenz der Interna + +Angenommen, in Ihrer Partitur tritt ein Legatobogen +auf, der Ihrer Meinung nach zu dünn ausgefallen ist. +Sie würden ihn gerne etwas schwerer gezeichnet +sehen. Wie gehen Sie vor? Von den Anmerkungen in +früheren Abschnitten wissen Sie schon, dass LilyPond +sehr flexibel ist und eine derartige Modifikation +möglich sein sollte, und Sie erraten vielleicht, +dass ein @code{\override}-Befehl angebracht ist. +Aber gibt es eine Eigenschaft für die Dicke eines +Legatobogens (engl. slur), und wenn es sie gibt, +auf welche Weise lässt sie sich verändern? Hier +kommt die Referenz der Interna zur Geltung. Dort +finden sich alle Informationen, um den beschriebenen +und alle anderen @code{\override}-Befehle zu +konstruieren. + +Bevor Sie jetzt in die Referenz der Interna wechseln, ist +eine Warnung angebracht. Es handelt sich um ein +@strong{Referenz}dokument, was heißt, dass es sehr +wenig oder gar keine Erklärungen enthält: seine Aufgabe +ist es, Information klar und genau darzustellen. Das +bedeutet, dass es auf den ersten Blick entmutigend +wirkt. Die Einführung und Erklärung in diesem Abschnitt +wird Ihnen aber schnell ermöglichen, genau die Information +aus der Referenz zu entnehmen, die Sie benötigen. +@c For German users +Beachten Sie, dass die Referenz der Interna nur auf Englisch +existiert. Um die Eigenschaftsbezeichnung eines bestimmten +Objektes zu finden, können Sie das Glossar (siehe +@rglosnamed{Top,Musikglossar}) + verwenden, in dem +die englischen Begriffe in viele andere Sprachen übersetzt sind. + +@cindex Override-Beispiel +@cindex Referenz der Interna, Benutzung +@cindex IR (Referenz der Interna), Benutzung +@cindex @code{\addlyrics}-Beispiel + +Das Vorgehen soll an einem konkreten Beispiel einer echten +Komposition demonstriert werden. Hier das Beispiel: + +@c Mozart, Die Zauberflöte Nr. 7 Duett + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +Angenommen also, wir wollen die Legatobögen etwas +dicker setzten. Ist das möglich? Die Legatobögen sind mit +Sicherheit ein Layout-Objekt, die Frage muss also lauten: +@qq{Gibt es eine Eigenschaft von Legatobögen, die die +Dicke bestimmt?} Um diese Frage zu beantworten, müssen +wir in der Referenz der Interna ( kurz IR) nachschauen. + +Die IR für die LilyPond-Version, die Sie benutzen, findet sich +auf der LilyPond-Webseite unter der Adresse +@uref{http://lilypond.org}. Gehen Sie zur Dokumentationsseite +und klicken Sie auf den Link zur Referenz der Interna. +@c Addition for German users +Die Sprache ändert sich ab hier nach englisch. Für diese Übung +sollten Sie die HTML-Version benutzen, nicht die +@qq{auf einer großen Seite} oder die PDF-Version. +Damit Sie die nächsten Absätze verstehen können, müssen Sie +genauso vorgehen, während Sie weiterlesen. + +Unter der Überschrift @strong{Top} befinden sich fünf Links. +Wählen Sie den Link zum @emph{Backend}, wo sich die Information +über Layout-Objekte befindet. Hier, unter der Überschrift +@strong{Backend}, wählen Sie den Link @emph{All layout objects}. +Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte, +die in Ihrerer LilyPond-Version benutzt werden, in alphabetischer +Ordnung. Wählen Sie den Link @emph{Slur} und die Eigenschaften +der Legatobögen (engl. slur) werden aufgelistet. + +Eine alternative Methode, auf diese Seite zu gelangen, ist von +der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen +findet sich ein Link zur Referenz der Interna. Dieser Link führt +Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben, +wie die Bezeichnung des Layout-Objektes lauten könnte, das sie +ändern wollen, ist es oft schneller, direkt zur IR zu gehen und +dort nachzuschlagen. + +Aus der Slur-Seite in der IR könne wir entnehmen, dass +Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt +werden. Dann werden die Standardeinstellungen aufgelistet. +Beachten Sie, dass diese @strong{nicht} in alphabetischer Reihenfolge +geordnet sind. Schauen Sie sich die Liste an, ob sie eine Eigenschaft +enthält, mit der die Dicke von Legatobögen kontrolliert werden kann. +Sie sollten folgendes finden: + +@example +@code{thickness} (number) + @code{1.2} + Line thickness, generally measured in @code{line-thickness} +@end example + +Das sieht ganz danach aus, als ob damit die Dicke geändert +werden kann. Es bedeutet, dass der Wert von +@code{thickness} einfach eine Zahl (@emph{number}) ist, +dass der Standardwert 1.2 ist, und dass die Einheit +für die Dicke eine andere Eigenschaft mit der +Bezeichnung @code{line-thickness} ist. + +Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen +in der IR, aber wir haben schon genug Informationen, um +zu versuchen, die Dicke eines Legatobogens zu ändern. Die +Bezeichnung des Layout-Objekts ist offensichtlich +@code{Slur} und die Bezeichnung der Eigenschaft, die geändert +werden soll +@code{thickness}. Der neue Wert sollte etwas mehr als 1.2 sein, +denn der Bogen soll ja dicker werden. + +Den benötigten @code{\override}-Befehl können wir jetzt einfach +konstruieren, indem wir die Werte für die Bezeichnungen in den +Modellbefehl einfügen und den Kontext auslassen. Setzen wir +einmal einen sehr großen Wert für die Dicke um zu sehen, ob der +Befehl auch funktioniert. Also: + +@example +\override Slur #'thickness = #5.0 +@end example + +Vergessen Sie nicht das Rautenzeichen und Apostroph +(@code{#'}) vor der Eigenschaftsbezeichnung und das +Rautenzeichen vor dem neuen Wert! + +Die nächste Frage ist nun: @qq{Wohin soll dieser Befehl geschrieben +werden?} Solange wir uns noch im Lernstadium befinden, ist +die beste Antwort: @qq{Innerhalb der Noten, vor den ersten +Legatobogen und nahe bei ihm.} Also etwa so: + +@cindex Legatobogen, Beispiel für Veränderung +@cindex thickness-Eigenschaft, Beispiel +@cindex Dicke-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +und wirklich wird der Legatobogen dicker. + +Das ist also die grundlegende Herangehensweise, +@code{\override}-Befehl zu formulieren. Es gibt einige +zusätzliche Komplikationen, denen wir uns später widmen +werden, aber Sie haben jetzt das Handwerkszeug, um Ihre +eigenen Befehle zu konstruieren -- wenn Sie auch noch etwas +Übung benötigen. Die sollen Sie durch die folgenden Übungen +erhalten. + + +@subheading Den Kontext finden + +@cindex Kontext, Finden und identifizieren + +Manchmal muss dennoch der Kontext spezifiziert werden. +Welcher aber ist der richtige Kontext? Wir könnten raten, +dass Legatobögen sich im @code{Voice}-Kontext befinden, +denn sie sind immer einzelnen Melodielinien zugewiesen. +Aber wir können uns dessen nicht sicher sein. Um unsere +Annahme zu überprüfen, gehen wir wieder zu der Seite im +IR, die die Legatobögen beschreibt und die Überschrift +@emph{Slur} hat. Dort steht: @qq{Slur objects are created +by: Slur engraver}. Legatobögen werden also in dem Kontext +erstellt, in dem sich der @code{Slur_engraver} befindet. +Folgen Sie dem Link zu der @code{Slur_engraver}-Seite. +Unten auf der Seite steht, dass der @code{Slur_engraver} +sich in fünf Stimmen-Kontexten befindet, unter anderem +auch im normalen @code{Voice}-Kontext. Unsere Annahme +war also richtig. Und weil @code{Voice} einer der Kontexte +der untersten Ebene ist, welcher eindeutig schon dadurch +definiert ist, dass wir Noten eingeben, kann er an dieser Stelle +auch weggelassen werden. + + +@subheading Nur einmal mit \override verändern + +@cindex Override nur einmal +@cindex once override +@funindex \once +@funindex once + +Im Beispiel oben wurden @emph{alle} Legatobögen dicker +gesetzt. Vielleicht wollen Sie aber nur den ersten Bogen +dicker haben. Das können Sie mit dem @code{\once}-Befehl +erreichen. Er wird direkt vor den @code{\override}-Befehl +gesetzt und bewirkt, dass nur der Bogen geändert wird, der +@strong{unmittelbar an der nächsten Note beginnt.} Wenn +die nächste Note keinen Bogenbeginn hat, dann passiert +gar nichts -- der Befehl wird nicht gespeichert, sondern einfach +vergessen. Der Befehl, mit @code{\once} zusammen benutzt, +muss also wie folgt positioniert werden: + +@cindex Legatobogen, Beispiel zur Veränderung +@cindex thickness-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \time 6/8 + { + \key es \major + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes8[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Jetzt bezieht er sich nur noch auf den ersten Legatobogen. + +Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl +eingesetzt werden. + + +@subheading Rückgängig machen + +@cindex Revert +@cindex Rückgängig machen +@cindex Wiederherstellen von Standardeinstellungen +@cindex Standardeinstellungen, Wiederherstellen +@funindex \revert +@funindex revert + +Eine weitere Möglichkeit: nur die beiden ersten Legatobögen sollen +dicker gesetzt werden. Gut, wir könnten jetzt zwei Befehle benutzen, +jeden mit dem @code{\once}-Präfix und direkt vor die entsprechende +Note gestellt, an welcher der Bogen beginnt: + +@cindex Legatobogen, Beispiel zur Veränderung +@cindex thickness-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes[( g]) g | + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle +dessen später den @code{\revert}-Befehl einsetzen, um die +@code{thickness}-Eigenschaft wieder auf ihren Standardwert zurückzusetzen: + +@cindex Legatobogen, Beispiel zur Veränderung +@cindex thickness-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + bes[( g]) g | + g8[( es]) es + % Revert thickness of all following slurs to default of 1.2 + \revert Slur #'thickness + d8[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Der @code{\revert}-Befehl kann benutzt werden, um eine beliebige +Eigenschaft, die mit @code{\override} geändert worden ist, wieder in +ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können +Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche +Resultat. + +Damit endet die Einleitung in die Referenz der Interna (IR) und die +grundlegenden postupy při ladění. Einige Beispiele folgen in späteren +Abschnitten dieses Kapitel, einerseits um Sie mit weiteren Möglichkeiten +der IR bekanntzumachen, andererseits um Ihnen mehr Übungsmöglichkeiten +zu geben, die relevante Information dort zu finden. Die Beispiele werden +Schritt für Schritt immer weniger Erklärungen beinhalten. + + +@node Vlastnosti nacházející se v rozhraních +@subsection Vlastnosti nacházející se v rozhraních +@translationof Properties found in interfaces + +@cindex Interface-Eigenschaften +@cindex Eigenschaften von Interfaces +@cindex Schnittstellen, Eigenschaften von +@cindex Eigenschaften von Schnittstellen + +Der Text unseres Beispiels soll jetzt kursiv gesetzt werden. Was für +ein @code{\override}-Befehl wird dazu benötigt? Schauen wir +uns zunächst das Inhaltsverzeichnis in der IR an: @qq{All layout objects}, +wie auch schon zuvor. Welches Objekt könnte die Darstellung des +Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag @code{LyricText}, +das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften +an, die verändert werden können. Dazu gehört +@code{font-series} und @code{font-size}, aber nichts, womit man kursiven +Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen +Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzelnen +Layout-Objekt aufgelistet, sondern ist mit anderen ähnlichen Eigenschaften +zusammen in einem @strong{Interface} -- einer Schnittstelle -- verortet; +in diesem Fall das +@code{font-interface}. + +Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden +und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften +benutzen. + +Schauen Sie sich noch einmal die Seite in der IR an, die @code{LyricText} +beschreibt. Unten auf der Seite ist eine klickbare Liste (in der HTML-Version +der IR) an Eigenschaften, die von @code{LyricText} unterstützt +werden. Diese Liste enthält sieben Einträge, darunter auch +@code{font-interface}. Ein Klick hierauf bringt uns zu den Eigenschaften, +die mit dieser Schnittstelle verbunden sind, also auch @code{LyricText}. + +Jetzt sehen wir alle die Eigenschaften, die der Benutzer verändern kann, +um die Schriftartendarstellung zu beeinflussen. Dazu gehört nun auch +@code{font-shape(symbol)}, wobei @code{symbol} auf die Werte +@code{upright} (gerade), @code{italics} (kursiv) oder @code{caps} +(Kapitälchen) gesetzt werden kann. + +Sie werden gemerkt haben, dass @code{font-series} und @code{font-size} +hier auch aufgelistet sind. Es stellt sich die Frage, warum diese +allgemeinen Schriftarteigenschaften @code{font-series} und +@code{font-size} sowohl unter der Überschrift +@code{LyricText} als unter dem @code{font-interface} aufgelistet +sind, aber @code{font-shape} befindet sich nur im +@code{font-interface}? Die Antwort ist: Die globalen Einstellungen +von @code{font-series} und @code{font-size} werden geändert, wenn +ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape} +wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der +Überschrift @code{LyricText} beinhalten dann die Werte der +Standardeinstellungen dieser zwei Eigenschaften, wenn es sich +um ein @code{LyricText}-Objekt handelt. Andere Objekte, +die auch das @code{font-interface} unterstützen, setzen diese +Eigenschaften anders, wenn sie erstellt werden. + +Versuchen wir nun einen @code{\override}-Befehl zu konstruieren, +der den Gesangstext kursiv setzt. Das Objekt hat die Bezeichnung +@code{LyricText}, die Eigenschaft ist @code{font-shape} +und der Wert @code{italic}. Wie vorher schon lassen wir den +Kontext aus. + +Am Rande sei angemerkt, dass die Werte der @code{font-shape}-Eigenschaft +mit einem Apostroph (@code{'}) gekennzeichnet werden +müssen, weil es sich um Symbole handelt. Aus dem gleichen +Grund mussten auch für @code{thickness} weiter oben im +Text ein Apostroph gesetzt werden. Symbole sind besondere +Bezeichnungen, die LilyPond intern bekannt sind. Einige +sind Bezeichnungen von Eigenschaften, wie eben @code{thickness} +oder @code{font-shape}. Andere sind besondere Werte, +die an Eigenschaften übergeben werden können, wie +@code{italic}. Im Unterschied hierzu gibt es auch beliebige +Zeichenketten, die immer mit Anführungszeichen, also +als @code{"Zeichenkette"} auftreten. Für weitere +Einzelheiten zu Zeichenketten und Werten, siehe +@rextend{Scheme-Übung}. + +Gut, der @code{\override}-Befehl, mit dem der Gesangstext +kursiv gesetzt wird, lautet: + +@example +\override LyricText #'font-shape = #'italic +@end example + +@noindent +und er muss direkt vor den Text gesetzt werden, auf den er sich +bezieht, etwa so: + +@cindex font-shape-Eigenschaft, Beispiel +@cindex LyricText, Beispiel zur Veränderung +@cindex kursiv, Beispiel +@cindex @code{\addlyrics}, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + \override LyricText #'font-shape = #'italic + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Jetzt wird der Text kursiv gesetzt. + + +@subheading Den Kontext im Liedtextmodus bestimmen + + +@cindex Kontext im Gesangstextmodus angeben +@cindex Gesangstextmodus, Kontext angeben + +Bei Gesangstexten funktioniert der @code{\override}-Befehl +nicht mehr, wenn Sie den Kontext im oben dargestellten +Format angeben. Eine Silbe wird im Gesangtextmodus +(lyricmode) entweder von einem Leerzeichen, einer +neuen Zeile oder einer Zahl beendet. Alle anderen +Zeichen werden als Teil der Silbe integriert. Aus diesem +Grund muss auch vor der schließenden Klammer +@code{@}} ein Leerzeichen gesetzt oder eine neue +Zeile begonnen werden. Genauso müssen Leerzeichen +vor und nach einem Punkt benutzt werden, um die +Kontext-Bezeichnung von der Objekt-Bezeichnung zu +trennen, denn sonst würden beide Bezeichnungen als +ein Begriff interpretiert und von LilyPond nicht verstanden +werden. Der Befehl muss also lauten: + +@example +\override Lyrics . LyricText #'font-shape = #'italic +@end example + +@warning{Innerhalb von Gesangstext muss immer ein +Leerzeichen zwischen der letzten Silbe und der schließenden +Klammer gesetzt werden.} + +@warning{Innerhalb von @code{\override}-Befehlen in +Gesangstexten müssen Leerzeichen um Punkte zwischen +Kontext- und Objektbezeichnungen gesetzt werden.} + +@seealso +Erweitern: @rextend{Scheme-Übung}. + + +@node Typy vlastností +@subsection Typy vlastností +@translationof Types of properties + +@cindex Eigenschaftsarten + +Bis jetzt hatten wir es mit zwei Arten von Eigenschaften zu +tun: @code{number} (Zahl) und @code{symbol}. Damit +ein Befehl funktioniert, muss der Wert einer Eigenschaft +vom richtigen Typ sein und die Regeln befolgen, die +für diesen Typ gelten. Der Eigenschaftstyp ist in der +IR in Klammern hinter der Eigenschaftsbezeichnung +angegeben. Hier eine Liste der Typen, die Sie vielleicht +benötigen werden, mit den Regeln, die für den jeweiligen +Typ gelten und einigen Beispielen. Sie müssen immer +ein Rautenzeichen (@code{#}) vor den Typeintrag setzen, +wenn sie in einem @code{\override}-Befehl benutzt werden. + +@multitable @columnfractions .2 .45 .35 +@headitem Eigenschaftstyp + @tab Regeln + @tab Beispiele +@item Boolesch + @tab Entweder wahr oder falsch, dargestellt als #t oder #f + @tab @code{#t}, @code{#f} +@item Dimension (in Notenlinienabständen) + @tab Eine positive Dezimalzahl (in Notenlinienabstand-Einheiten) + @tab @code{2.5}, @code{0.34} +@item Richtung + @tab Eine gültige Richtungskonstante oder das numerische Äquivalent + @tab @code{LEFT}, @code{CENTER}, @code{UP}, + @code{1}, @code{-1} +@item Integer + @tab Eine positive ganze Zahl + @tab @code{3}, @code{1} +@item Liste + @tab Eine eingeklammerte Anzahl von Einträgen, mit Klammern getrennt + und angeführt von einem Apostroph + @tab @code{'(left-edge staff-bar)}, @code{'(1)}, + @code{'(1.0 0.25 0.5)} +@item Textbeschriftung (markup) + @tab Beliebige gültige Beschriftung + @tab @code{\markup @{ \italic "cresc." @}} +@item Moment + @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion + konstruiert + @tab @code{(ly:make-moment 1 4)}, + @code{(ly:make-moment 3 8)} +@item Zahl + @tab Eine beliebige positive oder negative Dezimalzahl + @tab @code{3.5}, @code{-2.45} +@item Paar (Zahlenpaar) + @tab Zwei Zahlen getrennt von @qq{Leerzeichen . Leerzeichen}, eingeklammert + und angeführt von einem Apostroph + @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} +@item Symbol + @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft + gültig sind, angeführt von einem Apostroph + @tab @code{'italic}, @code{'inside} +@item Unbekannt + @tab Eine Prozedur oder @code{#f} (um keine Aktion hervorzurufen) + @tab @code{bend::print}, @code{ly:text-interface::print}, + @code{#f} +@item Vektor + @tab Eine Liste mit drei Einträgen, eingeklammert und mit + Apostroph-Raute ( @code{'#}) angeführt. + @tab @code{'#(#t #t #f)} +@end multitable + + +@seealso +Erweitern: @rextend{Scheme-Übung}. + + +@node Vzhled předmětů +@section Vzhled předmětů +@translationof Appearance of objects + +In diesem Abschnitt wollen wir zeigen, wie die Kenntnisse der +vorigen Abschnitte in der Praxis angewandt werden können, +um das Aussehen des Musiksatzes zu beeinflussen. + +@menu +* Viditelnost a barva předmětů:: +* Velikost předmětů:: +* Délka a tloušťka předmětů:: +@end menu + + +@node Viditelnost a barva předmětů +@subsection Viditelnost a barva předmětů +@translationof Visibility and color of objects + +In Unterrichtsmaterial für den Musikunterricht wird oft +eine Partitur dargestellt, in der bestimmte Notationselemente +fehlen, so dass der Schüler die Aufgabe bekommt, die +nachzutragen. Ein einfaches Beispiel ist etwa, die +Taktlinien zu entfernen, damit der Schüler sie selber zeichnen +kann. Aber die Tatklinien werden normalerweise automatisch +eingefügt. Wie verhindern wir, dass sie ausgegeben werden? + +Bevor wir uns hieran machen, sei daran erinnert, dass +Objekteigenschaften in sogenannten @emph{Schnittstellen} +-- engl. interface -- gruppiert sind, siehe auch +@ref{Vlastnosti nacházející se v rozhraních,,vlastnosti nacházející se v rozhraních}. Das dient ganz einfach +dazu, die Eigenschaften zusammenzufassen, die üblicherweise +zusammen benötigt werden -- wenn eine davon für ein Objekt +gilt, dann auch die anderen. Manche Objekte brauchen die +Eigenschaften von der einen Schnittstelle, andere von einer +anderen. Die Schnittstellen, die die Eigenschaften von einem +bestimmten Grob beinhalten, sind in der IR unten auf der +Seite aufgelistet, die dieses Grob beschreibt. Die Eigenschaften +können betrachtet werden, indem die Seite der entsprechenden +Schnittstelle geöffnet wird. + +Zu Information, wie man Eigenschaften von Grobs findet, siehe +@ref{Vlastnosti předmětů v rozvržení,,vlastnosti předmětů v rozvržení}. Wir benutzen also jetzt +die selbe Methode um in der IR das Layout-Objekt zu finden, +dass für die Tatklinien zuständig ist. Über die Überschriften +@emph{Backend} und @emph{All layout objects} kommen +wir zu einem Layout-Objekt mit der Bezeichnung +@code{BarLine} (engl. TaktLinie). Seine Eigenschaften +beinhalten zwei, die über die Sichtbarkeit entscheiden: +@code{break-visibility} und @code{stencil}. +@code{BarLine} unterstützt auch einige Schnittstellen, +unter anderem @code{grob-interface}, wo wir eine +@code{transparent} und eine @code{color}-Eigenschaft +finden. Alle können die Sichtbarkeit von Taktlinien (und +natürlich auch die Sichtbarkeit von vielen anderen Objekten) +beeinflussen. Schauen wir uns diese Eigenschaften eine +nach der anderen an. + +@subheading stencil (Matrize) + +@cindex Stencil-Eigenschaft +@cindex Matrizen-Eigenschaft + +Diese Eigenschaft kontrolliert die Erscheinung der Taktlinien, +indem sie das Symbol bestimmt, das ausgegeben werden soll. +Wie bei vielen anderen Eigenschaften auch, kann sie so +eingestellt werden, dass sie nichts ausgibt, indem ihr Wert +auf @code{#f} (falsch) gesetzt wird. Ein Versuch also, +wie vorher, indem wir den impliziten Kontext (@code{Voice}) +auslassen: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex stencil-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override BarLine #'stencil = ##f + c4 b8 c d16 c d8 + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Die Taktlinien werden aber immer noch angezeigt. Was ist da +falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf +die Seite, die die Eigenschaften für @code{BarLine} angibt. +Oben auf der Seite steht: @qq{Barline objects are created +by: Bar_engraver}. Schauen Sie sich die +@code{Bar_engraver}-Seite an. Unten auf der Seite steht +eine Liste der Kontexte, in denen der Takt-Engraver +funktioniert. Alle Kontexte sind @code{Staff}-Typen (also +Notensystem-Typen). Der Grund, warum der +@code{\override}-Befehl nicht funktioniert hat, liegt +also darin, dass das Taktlinie-Objekt (@code{BarLine}) sich nicht +im @code{Voice}-Kontext befindet. Wenn der Kontext +falsch angegeben wird, bewirkt der Befehl einfach gar +nichts. Keine Fehlermeldung wird ausgegeben und auch +nichts in die Log-Datei geschrieben. Versuchen wir also, +den richtigen Kontext mit anzugeben: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex stencil-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'stencil = ##f + c4 b8 c d16 c d8 + g,8 a16 b8 c d4 e16 + e8 +} +@end lilypond + +@noindent +Jetzt sind die Taktlinien wirklich verschwunden. + +Es sollte jedoch beachtet werden, dass das Setzen der +@code{stencil}-Eigenschaft auf @code{#f} zu Fehlerhinweisen führen +kann, wenn die Dimensionen des Objekts für die richtige Behandlung +benötigt werden. Zum Beispiel werden Fehler ausgegeben, wenn +die @code{stencil}-Eigenschaft des @code{NoteHead}-Objekts auf +@code{#f} gesetzt wird. Wenn dieser Fall auftritt, kann anstatt +dessen die @code{point-stencil}-Funktion benutzt werden, welche +den Stencil auf ein Objekt mit der Größe Null setzt: + +@lilypond[quote,verbatim,relative=2] +{ + c4 c + \once \override NoteHead #'stencil = #point-stencil + c4 c +} +@end lilypond + + +@subheading break-visibility (unsichtbar machen) + +@cindex break-visibility-Eigenschaft +@cindex Unsichtbar machen (break-visibility) + +Aus der Beschreibung der Eigenschaften für @code{BarLine} +in der IR geht hervor, dass die @code{break-visibility}-Eigenschaft +einen Vektor mit drei Booleschen Werten benötigt. Diese +kontrollieren jeweils, ob die Taktlinien am Ende einer Zeile, +in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben +werden. Wenn also alle Taktlinien unsichtbar sein sollen, wie in +unserem Beispiel, brauchen wir den Wert @code{'#(#f #f #f)}. +Versuchen wir es also, und berücksichtigen wir auch den +@code{Staff}-Kontext. Beachten Sie auch, dass Sie @code{#'#} +vor der öffnenden Klammer schreiben müssen: +@code{'#} wird benötigt als Teil des Wertes, um einen Vektor zu +signalisieren, und das erste @code{#} wird benötigt, um +den Wert in einem @code{\override}-Befehl anzuführen. + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex break-visibility-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'break-visibility = #'#(#f #f #f) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Auch auf diesem Weg gelingt es, die Taktlinien unsichtbar zu machen. + + +@subheading transparent (durchsichtig) + +@cindex transparent-Eigenschaft +@cindex Durchsichtig machen (transparent) + +Aus den Eigenschaftsdefinitionen auf der @code{grob-interface}-Seite +in der IR geht hervor, dass die @code{transparent}-Eigenschaft +boolesch ist. Mit @code{#t} (wahr) wird also ein Grob durchsichtig +gemacht. Im unserem Beispiel soll jetzt die Taktart durchsichtig +gemacht werden, anstatt die Taktlinien durchsichtig zu machen. +Wir brauchen also wieder die Grob-Bezeichnung für die Taktart. +Auf der @qq{All layout objects}-Seite in der IR müssen wir die +Eigenschaften des @code{TimeSignature}-Layout-Objekts suchen +Das Objekt wird vom @code{Time_signature_engraver} erstellt, +der sich auch im @code{Staff}-Kontext befindet und genauso das +@code{grob-interface} unterstützt, wie Sie sich +überzeugen können. Der Befehl, um die Taktangabe unsichtbar zu +machen, ist also: + +@cindex Taktart, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'transparent = ##t + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Die Taktangabe ist verschwunden, aber mit diesem Befehl wird ein +freier Platz gelassen, wo sich die Taktangabe eigentlich befinden +würde. Das braucht man vielleicht für eine Schulaufgabe, in der +die richtige Taktangabe eingefügt werden soll, aber in anderen +Fällen ist diese Lücke nicht schön. Um auch die Lücke zu entfernen, +muss die Matrize (stencil) der Taktangabe auf @code{#f} (falsch) +gesetzt werden: + +@cindex Taktart, Beispiel zur Veränderung +@cindex stencil-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Und der Unterschied wird deutlich: hiermit wird das gesamte Objekt +entfernt, während man mit @code{transparent} ein Objekt +unsichtbar machen kann, es aber an seinem Platz gelassen wird. + + +@subheading color (Farbe) + +@cindex color-Eigenschaft +@cindex Farb-Eigenschaft + +Abschließend wollen wir die Taktlinien unsichtbar machen, indem +wir sie weiß einfärben. (Es gibt hier eine Schwierigkeit: die weiße +Taktlinie übermalt manchmal die Taktlinien, wo sie sie kreuzt, +manchmal aber auch nicht. Sie können in den Beispielen unten +sehen, dass das nicht vorhersagbar ist. Die Einzelheiten dazu, warum +das passiert und wie sie es kontrollieren können, werden dargestellt +in @ruser{Objekte weiß malen}. Im Moment wollen wir lernen, wie +man mit Farbe arbeitet, akzeptieren Sie bitte an dieser Stelle die +Beschränkung.) + +Das @code{grob-interface} bestimmt, dass der Wert der Farb-Eigenschaft +eine Liste ist, aber es gibt keine Erklärung, was für eine Liste das +sein soll. Die Liste, die benötigt wird, ist eine Liste mit Werten in +internen Einheiten, aber damit Sie nicht wissen müssen, wie diese +aussehen, gibt es mehrere Wege, Farben anzugeben. Der erste +Weg ist es, @qq{normale} Farben zu benutzen, wie sie in der +Tabelle in @ruser{Liste der Farben} aufgelistet sind. Beachten Sie, +dass die Bezeichnungen auf Englisch sind. Um die Taktlinien auf +weiß zu setzen, können Sie schreiben: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex color-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #white + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +und die Taktlinien verschwinden in der Tat. Beachten Sie, +dass @emph{white} nicht mit einem Apostroph angeführt +wird -- es ist kein Symbol, sondern eine @emph{Funktion}. +Wenn sie aufgerufen wird, stellt sie eine Liste mit internen +Werten zu Verfügung, mit welcher die Farbe auf weiß +gestellt wird. Die anderen Farben in der Liste sind auch +Funktionen. Um sich zu überzeugen, dass der Befehl auch +wirklich funktioniert, können Sie die Farbe auf eine der +anderen Funktionen dieser Liste abändern. + +@cindex Farben, X11 +@cindex X11-Farben +@funindex x11-color + +Die zweite Art die Farbe zu ändern geschieht, indem die Liste +der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste +in @ruser{Liste der Farben}. Diesen Farben muss jedoch eine +andere Funktion vorangestellt werden, die die X11-Farbbezeichnungen +in interne Werte konvertiert: +@code{x11-color}. Das geschieht wie folgt: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex color-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(x11-color 'white) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +In diesem Fall hat die Funktion @code{x11-color} ein Symbol +als Argument, darum muss dem Symbol ein Apostroph vorangestellt +und beide zusammen in Klammern gesetzt werden. + +@cindex RGB-Farben +@cindex Farben, RGB +@funindex rgb-color + +Es gibt noch eine dritte Funktion, die RGB-Werte in die +internen Werte übersetzt -- die @code{rgb-color}-Funktion. Sie +braucht drei Argumente, um die Stärke von Rot, Grün und +Blau darzustellen. Die Werte befinden sich zwischen +0 und 1. Um also die Farbe Rot darzustellen, muss der +Wert der Funktion lauten: @code{(rgb-color 1 0 0)}, weiß +würde sein: @code{(rgb-color 1 1 1)}. + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex color-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(rgb-color 1 1 1) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Schließlich gibt es noch eine Grauskala, die zu den X11-Farben +gehört. Sie reicht von schwarz (@code{'grey0'}) bis +weiß (@code{'grey100}), in Einerschritten. Wir wollen das +illustrieren, indem alle Layout-Objekte im Beispiel +verschiede Grauschattierungen erhalten: + +@cindex StaffSymbol, Beispiel zur Veränderung +@cindex TimeSignature, Beispiel zur Veränderung +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Notenhals, Beispiel zur Veränderung +@cindex Taktlinie, Beispiel zur Veränderung +@cindex Farbeigenschaft, Beispiel +@cindex x11-Farben, Beispiel +@cindex Taktlinien, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung +@cindex Clef, Beispiel zur Veränderung +@cindex Stem, Beispiel zur Veränderung +@cindex NoteHead, Beispiel zur Veränderung +@cindex Notenkopf, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.StaffSymbol #'color = #(x11-color 'grey30) + \override Staff.TimeSignature #'color = #(x11-color 'grey60) + \override Staff.Clef #'color = #(x11-color 'grey60) + \override Voice.NoteHead #'color = #(x11-color 'grey85) + \override Voice.Stem #'color = #(x11-color 'grey85) + \override Staff.BarLine #'color = #(x11-color 'grey10) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt +verbunden sind. Es ist wichtig, den richtigen Kontext einzusetzen, +damit die Befehle funktionieren. Denken Sie daran, dass der +Kontext sich daran orientiert, wo sich der entsprechende +Engraver befindet. Den Standardkontext für Engraver finden +Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver +gehen, der es produziert und auf der Seite des Engravers in der +IR finden Sie Information, in welchem Kontext sich der +Engraver normalerweise befindet. + + +@node Velikost předmětů +@subsection Velikost předmětů +@translationof Size of objects + +@cindex Veränderung von Objektgrößen +@cindex Objektgrößen, verändern +@cindex Größen von Objekten verändern + +Als Startpunkt wollen wir wieder ein früheres Beispiel +wählen, siehe @ref{Naskládání hudebních výrazů do sebe}. Hier wurde +ein neues Notensystem erstellt, wie man es für ein @rglos{ossia} +braucht. + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Ossia-Systeme werden normalerweise ohne Schlüssel und Taktangabe +geschrieben, und sie werden etwas kleiner als das Hauptsystem gesetzt. +Wie man Schlüssel und Taktangabe entfernt, wissen wir schon: +wir setzen den Stencil von beiden auf @code{#f}: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } + { + \override Staff.Clef #'stencil = ##f + \override Staff.TimeSignature #'stencil = ##f + { f8 f c } + } + >> + r4 + } +} +@end lilypond + +@noindent +wobei ein zusätzliches Klammerpaar nach der @code{\with}-Konstruktion +erforderlich ist um sicherzugehen, dass die Modifikation und +die Noten sich auch auf das Ossia-System beziehen. + +Was für einen Unterschied macht es, ob man den @code{Staff}-Kontext +mit @code{\with} verändert, oder ob man die Stencils mit +@code{\override} beeinflusst? Der größte Unterschied liegt +darin, dass Änderungen, die mit @code{\with} eingeführt werden, +während der Erstellung des Kontextes miterzeugt werden und +als @strong{Standardeinstellungen} für diesen Kontext während seiner +gesamten Dauer gelten, während @code{\set}- oder @code{\override}-Befehle +dynamisch in die Noten eingebettet werden -- sie führen die +Änderungen synchron mit einem bestimmten Zeitpunkt in +der Musik aus. Wenn die Änderungen mit @code{\unset} +oder @code{\revert} rückgängig gemacht werden, werden +wieder die Standardwerte eingesetzt, die also die sind, die +mit einer @code{\with}-Konstruktion definiert wurden, oder +wenn hier keine definiert worden sind, die normalen +Standardwerte. + +Manche Kontexteigenschaften können nur ein einer +@code{\with}-Konstruktion verändert werden. Das sind +Eigenschaften, die nicht sinnvoll mitten im System geändert +werden können. @code{alignAboveContext} (Orientierung +über dem Kontext) und die Parallele, +@code{alignBelowContext} (Orientierung unter dem Kontext) +sind zwei derartige Eigenschaften -- wenn das Notensystem +einmal erstellt wurde, ist die Orientierung schon bestimmt +und es wäre nicht sinnvoll, sie später zu ändern. + +Die Standardwerte für Layout-Objekt-Eigenschaften können +auch in der @code{\with}-Konstruktion gesetzt werden. +Benutzen Sie einfach den normalen @code{\override}-Befehl +ohne den Kontext, denn der Kontext ist eindeutig definiert +durch die Stelle, an welcher sich @code{\with} befindet. +Wenn an dieser Stelle ein Kontext angegeben wird, produziert LilyPond +eine Fehlermeldung. + +Das obige Beispiel könnte also auch so aussehen: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + % Don't print clefs in this staff + \override Clef #'stencil = ##f + % Don't print time signatures in this staff + \override TimeSignature #'stencil = ##f + } + { f8 f c } + >> + r4 + } +} +@end lilypond + +Nun können wir daran gehen, auch wirklich die +Größe der Objekte zu ändern. + +Manche Layout-Objekte werden aus Glyphen erstellt, +die sich in einer Schriftartdatei befinden. Dazu gehören +die Notenköpfe, Versetzungszeichen, Text, Schlüssel, +Taktbezeichnung, Dynamik und Gesangstext. Ihre +Größe wird verändert, indem die +@code{font-size}- (Schriftgröße)-Eigenschaft geändert wird, wie +wir bald sehen werden. Andere Layout-Objekte, wie +Bögen -- oder allgemein Strecker-Objekte -- werden +individuell gezeichnet, es gibt dazu also keine +@code{font-size}, die mit ihnen verknüpft wäre. +Weitere Eigenschaften wie die Länge von Hälsen und +Taktlinien, Dicke von Balken und anderen Linien und +der Abstand der Notenlinien voneinander müssen auf +spezielle Weise verändert werden. + +In unserem Ossia-Beispiel wollen wir zuerst die +Schriftgröße verändern. Das ist auf zwei Arten möglich. +Entweder wir ändern die Schriftgröße für jede Objektart +mit einem eigenen Befehl, etwa: + +@example +\override NoteHead #'font-size = #-2 +@end example + +@noindent +oder wir ändern die Größe aller Schriftobjekte, indem wir +den Wert einer besonderen Eigenschaft, @code{fontSize}, +mit dem @code{\set}-Befehl bestimmen oder sie in +eine @code{\with}-Konstruktion (ohne @code{\set} einschließen. + +@example +\set fontSize = #-2 +@end example + +Beide Beispiele reduzieren die Schriftgröße um zwei Schritte +im Vergleich zum vorigen Wert, wobei jeder Schritt die +Schriftgröße um etwa 12% verändert. + +Setzen wir das also in unserem Ossia-Beispiel ein: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + % Reduce all font sizes by ~24% + fontSize = #-2 + } + { f8 f c } + >> + r4 + } +} +@end lilypond + +Das sieht aber immer noch nicht richtig aus. Die Notenköpfe +und Fähnchen sind kleiner, aber die Hälse im Vergleich +dazu zu lang und die Notenlinien zu weit auseinander. +Sie müssen auch proportional zur Schriftart verkleinert +werden. Der nächste Abschnitt behandelt diese Anpassung. + + +@node Délka a tloušťka předmětů +@subsection Délka a tloušťka předmětů +@translationof Length and thickness of objects + +@cindex Entfernungen +@cindex Dicke +@cindex Länge +@funindex magstep +@cindex Größe, verändern +@cindex Notenhalslänge, verändern +@cindex Hälse, Länge verändern +@cindex Notenlinien, Länge verändern + +Abstände und Längen werden in LilyPond üblicherweise +in Notenlinienabständen (engl. staff-spaces) gemessen. +Das ist der Abstand zwischen zwei Notenlinien im System. +Die meisten Dicken (engl. thickness) dagegen werden in +einer internen Einheit Linien-Dicke (engl. line-thickness) +gemessen. Die Linien von Dynamikklammern zum Beispiel +haben standardmäßig eine Dicke von einer Einheit +@code{line-thickness}, während die Dicke eines +Notenhalses 1,3 ist. Beachten Sie jedoch, dass sich +manche Dicken anders verhalten: die Dicke von +Balken etwa wird in Notenlinienabständen gemessen. + +Wie also werden Längen skaliert um der Schriftgröße +zu entsprechen? Das kann mit einer besonderen Funktion +@code{magstep} vorgenommen werden, die genau für +diesen Zweck vorhanden ist. Sie nimmt ein Argument auf, +die Änderung der Schriftgröße (#-2 im obigen Beispiel) +und gibt einen Skalierungsfaktor aus, der dazu dient, +Objekte proportionell zueinander zu verändern. So wird +sie benutzt: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung +@cindex Notenlinienabstände verändern +@cindex staff-space-Eigenschaft verändern +@cindex magstep-Funktion, Beispiel +@cindex Schriftart-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + fontSize = #-2 + % Reduce stem length and line spacing to match + \override StaffSymbol #'staff-space = #(magstep -2) + } + { f8 f c } + >> + r4 + } +} +@end lilypond + +@noindent +Da die Länge eines Halses und viele andere Längeneigenschaften +relativ zum Wert des Notenlinienabstands (@code{staff-space}) +errechnet werden, werden sie auch automatisch verkleinert. +Das wirkt sich jedoch nur auf die vertikale Skalierung des Ossias +aus -- die horizontale Skala ist durch das Layout des Haupsystems +bestimmt und wird also von diesen Größenänderungen nicht +betroffen. Wenn natürlich die Größe der gesamten Noten reduziert +würde, würde sich auch die horizontalen Abstände ändern. Dass +wird später im Layout-Abschnitt betrachtet. + +Mit dieser Änderung ist unser Ossia fertig. Die Größen und Längen +aller anderen Objekte können auf analoge Weise geändert +werden. + +Für kleine Größenänderungen, wie in dem obigen Beispiel, +braucht die Dicke der verschiedenen Linien, wie Taktlinien, +Notenlinien, Balken, Dynamikklammern usw. normalerweise +keine spezielle Anpassung. Wenn die Dicke eines bestimmten +Layout-Objektes angepasst werden muss, kann man das erreichen, +indem die entsprechende @code{thickness}-Eigenschaft des +Objekts mit @code{\override} verändert wird. Ein Beispiel, +wie man die Dicke von Bögen ändert, wurde schon gezeigt, +siehe @ref{Vlastnosti předmětů v rozvržení,,vlastnosti předmětů v rozvržení}. Die Dicke aller +gezeichneten Objekte (die also nicht aus einer Schriftart +stammen) können auf gleiche Weise geändert werden. + + +@node Umístění předmětů +@section Umístění předmětů +@translationof Placement of objects + +@menu +* Automatické chování:: +* Předměty uvnitř notové osnovy:: +* Předměty vně notové osnovy:: +@end menu + + +@node Automatické chování +@subsection Automatické chování +@translationof Automatic behavior + +@cindex within-staff-předměty +@cindex outside-staff-předměty +@cindex Předměty uvnitř notové osnovy +@cindex Předměty vně notové osnovy + +Es gibt Objekte der Notation, die zum Notensystem gehören, und +andere, die außerhalb des Systems gesetzt werden müssen. Sie +werden @code{within-staff}-Objekte bzw. +@code{outside-staff}-Objekte genannt. + +@code{within-staff}-Objekte werden innerhalb des Notensystems +(engl. staff) gesetzt: Notenköpfe, Hälse, Versetzungszeichen +usw. Ihre Position ist üblicherweise durch die notierte Musik +bestimmt -- sie werden vertikal auf bestimmten Linien notiert +oder sind an andere Objekte gebunden, die vertikal festgelegt +sind. Kollisionen von Notenköpfen, Hälsen und Versetzungszeichen +werden normalerweise automatisch vermieden. Es gibt +Befehle, um dieses automatische Verhalten zu verändern, wie +unten gezeigt werden soll. + +Objekte, die außerhalb des Notensystems gesetzt werden, sind +unter Anderem Übungsmarkierungen, Text und Dynamikzeichen. +LilyPonds Regel für ihre vertikale Positionierung lautet, sie so nah wie +möglich am Notensystem zu setzen, aber nicht so nah, dass +sie mit anderen Objekten kollidieren. Dabei wird die +@code{outside-staff-priority}-(Priorität außerhalb des Notensystems)-Eigenschaft +eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden +sollen. + +Zuerst werden alle Innersystemobjekte von LilyPond gesetzt. +Dann werden die Objekte außerhalb des Systems nach +ihrer +@code{outside-staff-priority} geordnet. Die @code{outside-staff}-Objekte +werden dann nacheinander gesetzt, mit der niedrigsten +Priorität beginnend, und so gesetzt, dass sie nicht mit anderen +Objekten kollidieren, die schon gesetzt wurden. Wenn also zwei +@code{outside-staff}-Objekte um den selben Platz streiten, +wird das mit der geringeren @code{outside-staff-priority} näher +am System gesetzt werden. Wenn zwei Objekte die selbe Priorität +haben, wird das näher am System gesetzt, welches zuerst +auftritt. + +Im folgenden Beispiel haben alle Textbeschriftungen die gleiche +Priorität (weil sie nicht explizit gesetzt worden ist). Beachten Sie, +dass @qq{Text3} wieder dicht am System gesetzt wurde, weil +er unter @qq{Text2} passt. + +@cindex Textbeschriftungsbeispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" +c2^"Text3" +c2^"Text4" +@end lilypond + +Notensysteme werden in den Standardeinstellungen auch so dicht +beieinander gesetzt wie es möglich ist (mit einem minimalen Abstand). +Wenn Noten sehr weit aus einem System herausragen, zwingen sie +das nächste System weiter weg, wenn eine Kollision drohen würde. +Im nächsten Beispiel sehen Sie, wie Noten auf zwei Systemen +@qq{ineinander greifen}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \relative c' { c4 a, } + } + \new Staff { + \relative c'''' { c4 a, } + } +>> +@end lilypond + + +@node Předměty uvnitř notové osnovy +@subsection Předměty uvnitř notové osnovy +@translationof Within-staff objects + +Es wurde schon gezeigt, wie die Befehle @code{\voiceXXX} die Richtung +von Bögen, Fingersatz und allen anderen Objekten beeinflusst, +die von der Richtung der Notenhälsen abhängen. Diese Befehle +sind nötig, wenn polyphone Musik geschrieben wird, damit sich +die einzelnen Melodielinien klar abzeichnen. Es kann aber von Zeit +zu Zeit nötig sein, dieses automatische Verhalten zu verändern. Das +kann entweder für ganze Abschnitte, aber genauso auch nur für eine +einzelne Note vorgenommen werden. Die Eigenschaft, die die Richtung +bestimmt, ist die @code{direction}-Eigenschaft jedes Layout-Objekts. +Es soll erst erklärt werden, was sie bewirkt und dann eine Anzahl +an fertigen Befehlen für die üblicheren Situationen präsentiert werden, +mit denen Sie gleich loslegen können. + +Manche Layout-Objekte, wie Legato- und Bindebögen, biegen sich +oder zeigen entweder nach oben oder nach unten, andere, wie +Hälse und Fähnchen, verändern auch die Position rechts oder links, +je nach der Richtung, in die sie zeigen. Das wird automatisch +berücksichtigt, wenn die @code{direction}-Eigenschaft verändert +wird. + +@funindex down +@funindex up +@funindex center +@funindex neutral +@cindex hoch-Eigenschaft +@cindex runter-Eigenschaft +@cindex zentriert-Eigenschaft +@cindex neutral-Eigenschaft + +Das folgende Beispiel zeigt im ersten Takt die Standardeinstellung +für Hälse, die bei hohen Noten nach unten zeigen und bei tiefen +noten nach oben. Im nächsten Takt werden alle Hälse nach unten +gezwungen, im dritten Takt nach oben, und im vierten wird wieder +der Standard eingestellt. + +@cindex Notenhals, Beispiel zur Veränderung +@cindex Richtungseigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +a4 g c a +\override Stem #'direction = #DOWN +a4 g c a +\override Stem #'direction = #UP +a4 g c a +\revert Stem #'direction +a4 g c a +@end lilypond + +Hier werden die Konstanten @code{DOWN} und @code{UP} +eingesetzt. Sie haben die Werte @code{-1} bzw. @code{+1}, und +diese numerischen Werte können ebenso benutzt werden. Auch +der Wert @code{0} kann in manchen Fällen benutzt werden. Er +bedeutet für die Hälse das gleiche wie @code{UP}, für einige +andere Objekte jedoch @qq{zentriert}. Es gibt hierzu die Konstante +@code{CENTER}, die den Wert @code{0} hat. + +Es gibt aber einfachere Befehle, die normalerweise benutzt werden. +Hier eine Tabelle der häufigsten. Die Bedeutung des Befehls wird +erklärt, wenn sie nicht selbstverständlich ist. + +@multitable @columnfractions .2 .2 .25 .35 +@headitem Runter/Links + @tab Rauf/Rechts + @tab Rückgängig + @tab Wirkung +@item @code{\arpeggioArrowDown} + @tab @code{\arpeggioArrowUp} + @tab @code{\arpeggioNormal} + @tab Arpeggio mit Pfeil nach unten, oben oder ohne Pfeil +@item @code{\dotsDown} + @tab @code{\dotsUp} + @tab @code{\dotsNeutral} + @tab Richtung der Verschiebung eines Punktes, um Notenlinien zu vermeiden +@item @code{\dynamicDown} + @tab @code{\dynamicUp} + @tab @code{\dynamicNeutral} + @tab Position der Dynamik-Bezeichnung relativ zum System +@item @code{\phrasingSlurDown} + @tab @code{\phrasingSlurUp} + @tab @code{\phrasingSlurNeutral} + @tab Befehl für Richtung von Phrasierungsbögen +@item @code{\slurDown} + @tab @code{\slurUp} + @tab @code{\slurNeutral} + @tab Befehl für Richtung von Legatobögen +@item @code{\stemDown} + @tab @code{\stemUp} + @tab @code{\stemNeutral} + @tab Befehl für Richtung von Hälsen +@item @code{\textSpannerDown} + @tab @code{\textSpannerUp} + @tab @code{\textSpannerNeutral} + @tab Position von Textbeschriftungen, die als Strecker eingegeben werden +@item @code{\tieDown} + @tab @code{\tieUp} + @tab @code{\tieNeutral} + @tab Befehl für Richtung von Bindebögen +@item @code{\tupletDown} + @tab @code{\tupletUp} + @tab @code{\tupletNeutral} + @tab Befehl für Richtung von Klammern/Zahlen der N-tolen +@end multitable + +Diese vordefinierten Befehl können allerdings @strong{nicht} +zusammen mit @code{\once} benutzt werden. Wenn Sie die +Wirkung eines Befehl auf eine einzige Noten begrenzen wollen, +müssen Sie den entsprechenden +@code{\once \override}-Befehl benutzen oder den definierten +Befehl, gefolgt von dem entsprechenden neutralisierenden +@code{xxxNeutral}-Befehl nach der Note. + + +@subheading Fingersatz + +@cindex Fingersatz, Positionierung +@cindex Fingersatz, Akkorde + +Die Positionierung von Fingersatz kann auch durch den Wert +seiner @code{direction}-Eigenschaft beeinflusst werden, aber +eine Veränderung von @code{direction} hat keinen Einfluss auf +Akkorde. es gibt auch hier +besondere Befehle, mit denen der Fingersatz von einzelnen +Noten in Akkorden kontrolliert werden kann, wobei mögliche +Positionen über, unter der Note und rechts bzw. links von +ihr sind. + +Zunächst die Wirkungsweise von @code{direction} auf +den Fingersatz: im ersten Takt der Standard, dann +die Wirkung von @code{DOWN} (runter) und @code{UP} +(hinauf). + +@cindex Fingersatz, Beispiel zur Veränderung +@cindex direction-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 +\override Fingering #'direction = #DOWN +c4-5 a-3 f-1 c'-5 +\override Fingering #'direction = #UP +c4-5 a-3 f-1 c'-5 +@end lilypond + +Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch +nicht die einfachste Art, Fingersatzbezeichnungen manuell über oder +unter das System zu setzen. Normalerweise bietet es sich an, +@code{_} oder @code{^} anstelle von @code{-} vor der Fingersatz-Zahl +zu benutzen. Hier das vorherigen Beispiel mit dieser Methode: + +@cindex Fingersatz-Beispiel + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 +c4_5 a_3 f_1 c'_5 +c4^5 a^3 f^1 c'^5 +@end lilypond + +Die @code{direction}-Eigenschaft wirkt sich nicht auf +Akkorde aus, während die Präfixe @code{_} und @code{^} funktionieren. +Standardmäßig wird der Fingersatz automatisch entweder +über oder unter dem Akkord gesetzt: + +@cindex Fingersatz-Beispiel + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +@noindent +aber das kann manuell geändert werden, um einzelne Fingersatzanweisungen +nach oben oder unten zu zwingen: + +@cindex Fingersatz-Beispiel + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +Noch bessere Kontrolle über die Positionierung von Fingersatz für +einzelne Noten in einem Akkord ist mit dem +@code{\set fingeringOrientations}-Befehl möglich. Die Syntax +lautet: + +@example +@code{\set fingeringOrientations = #'([up] [left/right] [down])} +@end example + +@noindent +@code{\set}wird benutzt, weil @code{fingeringOrientations} eine +Eigenschaft des @code{Voice}-Kontextes ist, erstellt und eingesetzt +vom @code{New_fingering_engraver}. + +Die Eigenschaft kann als Wert eine Liste mit einem bis drei Einträgen +haben. Damit wird bestimmt, ob Fingersatz oberhalb gesetzt +werden kann (wenn @code{up} in der Liste auftaucht), darunter +(wenn@code{down} auftaucht), links (wenn @code{left} auftaucht) +oder rechts (wenn @code{right} auftaucht). Wenn andererseits +ein Wert nicht auftaucht, wir auch kein Fingersatz in dieser Richtung +gesetzt. LilyPond nimmt diese Beschränkung als Bedingung und +errechnet die besten Positionen für die Noten des nächsten Akkordes. +Die seitliche Positionierung kann nur auf einer Seite des Akkordes +geschehen, nicht auf beiden gleichzeitig, es kann also nur entweder +@code{left} oder @code{right} auftreten, nicht beide gleichzeitig. + +@warning{Damit eine einzelne Note mit diesem Befehl beeinflusst werden +kann, muss sie als ein @qq{Ein-Noten-Akkord} geschrieben +werden, indem einfache spitze Klammern um die Note positioniert +werden.} + +Hier ein paar Beispiele: + +@cindex Fingersatz-Beispiel +@cindex @code{\set}, Benutzungsbeispiel +@cindex fingerOrientations-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=1] +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + +@noindent +Wenn die Fingersatzbezeichnung zu gedrungen aussieht, +kann auch die Schriftgröße (@code{font-size}) verringert +werden. Der Standardwert kann aus dem +@code{Fingering}-Objekt in der IR entnommen werden, +er ist @code{-5}, versuchen wir es also mit @code{-7}. + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\override Fingering #'font-size = #-7 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + + + +@node Předměty vně notové osnovy +@subsection Předměty vně notové osnovy +@translationof Outside-staff objects + +Předměty vně notové osnovy werden automatisch gesetzt, +um Kollisionen zu vermeiden. Objekten mit einem geringeren +Prioritätswert der Eigenschaft @code{outside-staff-priority} +werden näher an das System gesetzt, und andere Objekte außerhalb +des Systems werden dann soweit vom System entfernt gesetzt, dass +Zusammenstöße vermieden werden. Die +@code{outside-staff-priority}-Eigenschaft ist im +@code{grob-interface} definiert und ist also eine Eigenschaft +von allen Layout-Objekten. Standardmäßig ist sie für alle Objekte +auf falsch (@code{#f}) gesetzt; dieser Wert wird in einen numerischen +Wert dem Objekt entsprechend geändert, wenn das Objekt für die +Notenausgabe erstellt wird. Die Tabelle unten zeigt die +Standardwerte für die meistbenutzten @code{outside-staff}-Objekte, +die den Voreinstellungen nach im @code{Staff}- oder +@code{Voice}-Kontext gesetzt werden. + +@cindex spanners +@cindex Strecker + +Achtung bei einigen ungewöhnlichen Objektbezeichnungen: Strecker-Objekte +werden automatisch erstellt, um die vertikale Position von Grobs +zu kontrollieren, die an unterschiedlichen musikalischen Momenten +beginnen und enden (könnten). Wenn also @code{outside-staff-priority} +des darunterliegenden Grobs geändert wird, hat das keine Auswirkung. +Zum Beispiel bringt das Ändern von @code{outside-staff-priority} +des @code{Hairpin}-(Dynamikklammer)-Objekts keine Änderung in der +vertikalen Position von Crescendo-Klammern -- anstatt dessen muss +@code{outside-staff-priority} des hiermit assoziierten +@code{DynamicLineSpanne}-Objekts geändert werden. Dieser +@code{\override}-Befehl muss zu Beginn des Streckers gesetzt werden, +welcher womöglich mehrere verbundene Dynamikklammern und Dynamikbezeichnung +beinhaltet. + +@multitable @columnfractions .3 .3 .3 +@headitem Layout-Objekt + @tab Priorität + @tab Kontrolliert Position von: +@item @code{MultiMeasureRestText} + @tab @code{450} + @tab Text über Ganztaktpausen +@item @code{TextScript} + @tab @code{450} + @tab Textbeschriftung +@item @code{OttavaBracket} + @tab @code{400} + @tab Ottava (Oktavierungsklammern) +@item @code{TextSpanner} + @tab @code{350} + @tab Text-Strecker +@item @code{DynamicLineSpanner} + @tab @code{250} + @tab Alle Dynamik-Bezeichnungen +@item @code{VoltaBracketSpanner} + @tab @code{100} + @tab Volta-Klammern +@item @code{TrillSpanner} + @tab @code{50} + @tab Triller-Strecker +@end multitable + +Hier ein Beispiel, das die Standardpositionierung von einigen +Objekten zeigt. + +@cindex Text-Strecker +@cindex Text-Spanner +@funindex \startTextSpan +@funindex \stopTextSpan +@funindex startTextSpan +@funindex stopTextSpan +@cindex Ottava-Klammer +@cindex Oktavierungsklammer + +@cindex TextSpanner, Beispiel zur Veränderung +@cindex bound-details-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text and hairpin +c4\pp\< +c4 +% Add Text Script +c4^Text +c4 c +% Add Dynamic Text and terminate hairpin +c4\ff c \stopTextSpan +% Stop Ottava Bracket +\ottava #0 +c,4 c c c +@end lilypond + +Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h. +Text mit Bindestrichen, der sich über eine bestimmte Länge +erstreckt. Der Strecker beginnt mit dem +@code{\startTextSpan}-Befehl und endet mit dem +@code{\stopTextSpan}-Befehl, und das Format des Textes +wird mit dem @code{\override TextSpanner}-Befehl bestimmt. +Mehr Einzelheiten siehe @ruser{Text mit Verbindungslinien}. + +Im Beispiel wird auch gezeigt, wie Oktavierungsklammern +(Ottava) erstellt werden. + +@cindex Taktzahlposition verändern +@cindex Verändern der Taktzahlposition +@cindex Position der Taktzahl, verändern +@cindex Metronom-Bezeichnungsposition verändern +@cindex Verändern der Metronom-Bezeichnungsposition +@cindex Übungszeichenposition verändern +@cindex Verändern der Übungszeichenposition + +Beachten Sie, dass Taktnummern, Metronombezeichnungen +und Übungszeichen nicht gezeigt werden. Sie werden +standardmäßig im @code{Score}-(Partitur)-Kontext +erstellt und ihre @code{outside-staff-priority} wird +in Bezug auf die Layout-Objekte, die im @code{Staff}-Kontext +erstellt werden, ignoriert. Wenn Sie Taktnummern, +Metronombezeichnungen oder Übungszeichen entsprechend +ihrer Außersystem-Priorität setzen wollen, müssen Sie +die entsprechenden Engraver (@code{Bar_number_engraver}, +@code{Metronome_mark_engraver} oder @code{Mark_engraver}) +vom @code{Score}-Kontext entfernen und dem +@code{Staff}-Kontext hinzufügen. Wenn die Engraver so +geändert werden, erhalten sie folgenden Werte für +@code{outside-staff-priority}: + +@multitable @columnfractions .3 .3 +@headitem Layout-Objekt @tab Priorität +@item @code{RehearsalMark} @tab @code{1500} +@item @code{MetronomeMark} @tab @code{1000} +@item @code{BarNumber} @tab @code{ 100} +@end multitable + +Wenn die Standardwerte der @code{outside-staff-priority} nicht +die Positionierung hervorrufen, die Sie wünschen, kann die +Priorität eines jeden Objektes geändert werden. Als Beispiel +wollen wir zeigen, wie sich die Oktavierungsklammer unter +den Textstrecker des vorigen Beispiels setzen lässt. Wir müssen +nur die Priorität des +@code{OttavaBracket}-Objektes in der IR oder der Tabelle oben +herausfinden und einen kleineren Wert angeben als der Wert, den +das @code{TextSpanner}-(Strecker)-Objekt bekommt, wobei noch daran +zu denken ist, dass @code{OttavaBracket} im @code{Staff}-Kontext +erstellt wird: + +@cindex TextSpanner, Beispiel zur Veränderung +@cindex bound-details-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Place following Ottava Bracket below Text Spanners +\once \override Staff.OttavaBracket #'outside-staff-priority = #340 +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text +c4\pp +% Add Dynamic Line Spanner +c4\< +% Add Text Script +c4^Text +c4 c +% Add Dynamic Text +c4\ff c \stopTextSpan +% Stop Ottava Bracket +\ottava #0 +c,4 c c c +@end lilypond + +@cindex Legatobögen und outside-staff-priority +@cindex Legatobögen und Artikulationszeichen +@cindex Artikulationszeichen und Legatobögen + +Legatobögen werden als Innersystem-Objekte klassifiziert, aber +sie erscheinen oft auch über dem System, wenn die Noten, an die +sie verbunden sind, sehr hoch im System notiert sind. Dadurch +können Außersystem-Objekte, wie Artikulationszeichen, zu hoch +gerückt werden. Die @code{avoid-slur}-Eigenschaft hat nur +eine Auswirkung, wenn auch die @code{outside-staff-priority} +auf @code{#f} gesetzt ist. Alternativ kann die +@code{outside-staff-priority} des Legatobogens auf einen +numerischen Wert gesetzt werden, sodass er mit anderen +Außersystem-Objekten anhand dieses Wertes gesetzt wird. +Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht: + +@lilypond[quote,verbatim,relative=2] +c4( c^\markup { \tiny \sharp } d4.) c8 +c4( +\once \override TextScript #'avoid-slur = #'inside +\once \override TextScript #'outside-staff-priority = ##f +c4^\markup { \tiny \sharp } d4.) c8 +\once \override Slur #'outside-staff-priority = #500 +c4( c^\markup { \tiny \sharp } d4.) c8 +@end lilypond + +Eine Änderung der @code{outside-staff-priority} kann auch dazu +benutzt werden, die vertikale Plazierung von individuellen Objekten +zu kontrollieren, auch wenn das Ergebnis nicht immer optimal +ist. Im nächsten Beispiel soll @qq{Text3} oberhalb von @qq{Text4} +gesetzt werden, das Beispiel wurde behandelt in +@ref{Automatické chování,,automatickém chování}. Der Wert der Priorität muss also für +die Eigenschaft @code{TextScript} entweder in der IR oder in der +Tabelle oben festgestellt werden und dann die Priorität für +@qq{Text3} höher eingestellt werden: + +@cindex TextScript, Beispiel zur Veränderung +@cindex outside-staff-priority-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +\once \override TextScript #'outside-staff-priority = #500 +c2^"Text3" +c2^"Text4" | +@end lilypond + +Damit wird zwar @qq{Text3} ganz richtig über @qq{Text4} +platziert, aber auch über @qq{Text2}, und @qq{Text4} +wird jetzt weiter unten gesetzt. Eigentlich sollten ja alle +diese Anmerkungen gleichweit vom System entfernt sein. +Dazu muss offensichtlich horizontal etwas Platz gemacht +werden. Das kann erreicht werden mit dem +@code{textLengthOn}-(Textlänge an)-Befehl. + +@subheading \textLengthOn (Textlänge berücksichtigen) + +@cindex Noten, durch Text gespreizt +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +Standardmäßig wird Text, der mit dem Beschriftungsbefehl +@code{\markup} bzw. Äquivalenten erstellt wird, kein +zusätzlicher Platz in Bezug auf die Positionierung der Noten +zugestanden. Der @code{\textLengthOn}-Befehl ändert +dieses Verhalten, so dass die Noten gespreizt werden, wenn +die Breite des Textes es erfordert: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\textLengthOn % Cause notes to space out to accommodate text +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl +rückgängig gemacht. Erinnern Sie sich, dass @code{\once} nur mit +@code{\override}, @code{\set}, @code{\revert} oder @code{unset} +funktioniert, der Befehl kann also nicht zusammen mit +@code{\textLengthOn} benutzt werden. + +@cindex Textbeschriftung, Vermeidung von Zusammenstößen +@cindex Zusammenstöße vermeiden mit Textbeschriftung + +Textbeschriftung vermeidet auch Noten, die über das System hinausstehen. +Wenn das nicht gewünscht ist, kann die automatische Verschiebung +nach oben hin auch vollständig ausgeschaltet werden, indem die +Priorität auf @code{#f} gesetzt wird. Hier ein Beispiel, wie +eine Textbeschriftung mit diesen Noten reagiert: + +@cindex Textbeschriftung, Beispiel zur Veränderung +@cindex outside-staff-priority-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +% This markup is short enough to fit without collision +c2^"Tex" c'' | +R1 | + +% This is too long to fit, so it is displaced upwards +c,,2^"Text" c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +c,,2^"Long Text " c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\textLengthOn % and turn on textLengthOn +c,,2^"Long Text " % Spaces at end are honored +c''2 | +@end lilypond + + +@subheading Dynamik + +@cindex Verändern der Positionierung von Dynamikzeichen +@cindex Dynamikzeichen: Positionierung verändern + +Dynamikbezeichnung wird üblicherweise unter dem System +gesetzt, kann aber auch nach oben mit dem Befehl +@code{dynamicUp} gezwungen werden. Die Bezeichnung +wird vertikal relativ zu der Note positioniert, an die sie angefügt +wurde. Sie wird vertikal variabel gesetzt in Bezug zu +Innersystemobjekten wie Bögen oder Taktnummern. Damit +können oft recht gute Resultate erreicht werden, wie im +folgenden Beispiel: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\clef "bass" +\key aes \major +\time 9/8 +\dynamicUp +bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! +ees,2.~\)\mf ees4 r8 +@end lilypond + +Wenn aber Noten und Dynamikzeichen sehr dicht beieinander +stehen, positioniert die automatische Kollisionsvermeidung +später kommende Dynamikzeichen weiter weg, was allerdings +nicht immer die beste Möglichkeit ist, wie in dem folgenden, +etwas gewollten Beispiel zu sehen ist: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +a4\f b\mf c\mp b\p | +@end lilypond + +@noindent +Wenn eine ähnliche Situation in @qq{echter} Musik auftaucht, +kann es nötig sein, die Noten etwas zu spreizen, damit die +Dynamikzeichen alle auf der selben vertikalen Position +gesetzt werden können. Dieses Verhalten war im Falle von +Textbeschriftungen möglich mit dem @code{\textLengthOn}-Befehl, +aber es gibt keinen entsprechenden Befehl für Dynamik. Wir +müssen also unsere eigenen Befehle mit @code{\override} +konstruieren. + + +@subheading Verändern der Größe von grobs + +@cindex Grob, Größenveränderung +@cindex Größenveränderung von grobs + +Zuallererst müssen wir lernen, wie die Größe von Grobs verändert +wird. Alle Grobs besitzen einen Referenzpunkt, der +benutzt wird, um ihre Position in Relation zu ihnen übergeordneten +Objekten zu bestimmen. Dieser Punkt innerhalb des Grobs wird dann +auf einer horizontalen Position (@code{X-offset}) und einer +vertikalen Position (@code{Y-offset}) ausgerichtet, immer bezüglich +des übergeordneten Objektes. Eine horizontale Strecke wird +durch ein Zahlenpaar angegeben (@code{X-extent}), welche +die linke und rechte Grenze relativ zum übergeordneten Objekt +bezeichnen. Die vertikale Strecke wir genauso durch ein +Zahlenpaar (@code{Y-extent}) definiert. Diese Eigenschaften +gehören zu allen Grobs, die das +@code{grob-interface} unterstützen. + +@cindex @code{extra-spacing-width} + +Standardmäßig haben Außersystemobjekte eine Länge von Null, +so dass sie sich in horizontaler Richtung überlappen können. Das +geschieht, indem dem linken Rand Unendlich zugewiesen wird +und dem rechten Rand minus Unendlich (der Code der +@code{extra-spacing-width}-(zusätzliche Positionierungslänge)-Eigenschaft +lautet: @code{'(+inf.0 . -inf.0)}). +Damit sich diese Objekte also horizontal nicht überschneiden, muss +der Wert von @code{extra-spacing-width} auf +@code{'(0 . 0)} gesetzt werden, sodass die wirkliche Länge eines +Objektes zur Geltung kommt. Mit diesem Befehl wird das für +Dynamik-Zeichen erledigt: + +@example +\override DynamicText #'extra-spacing-width = #'(0 . 0) +@end example + +@noindent +Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert: + +@cindex DynamicText, Beispiel zur Veränderung +@cindex extra-spacing-width-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +\override DynamicText #'extra-spacing-width = #'(0 . 0) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Damit werden die Dynamik-Zeichen also wirklich nebeneinander +gesetzt, aber es gibt noch zwei Probleme. Die Zeichen sollten +etwas weiter außeinander stehen und es wäre gut, wenn sie alle +den gleichen Abstand zum System hätte. Das erste Problem ist +einfach behoben. Anstatt der @code{extra-spacing-width}-Eigenschaft +Null zuzuweisen, können wir auch einen etwas größeren Wert +wählen. Die Einheit wird gemessen in dem Abstand zwischen zwei +Notenlinien, es scheint also gut, den rechten und linken +Rand eine halbe Einheit zu vergrößern: + +@cindex DynamicText, Beispiel zur Veränderung +@cindex extra-spacing-width-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 staff space +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Das sieht schon besser aus, aber es wäre noch besser, wenn die +Dynamik-Zeichen alle an einer Linie ausgerichtet wären, anstatt +höher und tiefer zu sitzen. Das kann mit der +@code{staff-padding}-Eigenschaft erreicht werden, +die wir uns im folgenden Abschnitt genauer anschauen werden. + + + +@node Střety předmětů +@section Střety předmětů +@translationof Collisions of objects + +@menu +* Přesouvání předmětů:: +* Oprava překrývajících se not:: +* Příklady ze života:: +@end menu + +@node Přesouvání předmětů +@subsection Přesouvání předmětů +@translationof Moving objects + +@cindex Verschieben von überschneidenden Objekten +@cindex Verschieben von Zusammenstößen +@cindex Zusammenstöße vermeiden +@cindex Objekte, verschieben von Zusammestößen +@cindex Vermeiden von Zusammenstößen + +Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht +perfekt. Einige Notationselemente können sich überschneiden. Das +ist nicht schön, aber zum Glück sehr selten. Normalerweise müssen +die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben +werden -- sie könnten besser aussehen, wenn sie etwas zusätzlichen +Platz erhalten. + +Es gibt im Grunde drei Herangehensweisen, überlappende Notation +zu verbessern. Man sollte sie in der folgenden Reihenfolge +anwenden: + +@enumerate +@item +Die @strong{Richtung} eines der überlappenden Objekte kann +geändert werden, indem die vordefinierten Befehle für +Innersystemobjekte verwendet werden, wie beschrieben in +@ref{Předměty uvnitř notové osnovy,,předmětech uvnitř notové osnovy)}. Hälse, Bögen, Balken, Dynamik-Zeichen +und Triolen können auf diese Weise einfach umgeordnet +werden. Beschränkt ist diese Methode insofern, als es nur +zwei Möglichkeiten zur Veränderung gibt: oben oder unten. + +@item +Die @strong{Objekteigenschaft}, die LilyPond benutzt um die +Layout-Objekte zu platzieren, können mit dem +@code{\override}-Befehl positioniert werden. Die Vorteile +von Änderungen dieser Art sind a) dass einige Objekte +automatisch verschoben werden, wenn es nötig ist Platz zu +schaffen und b) ein einziges @code{\override} sich auf +alle Fälle eines Objekttyps bezieht. Zu diesen Eigenschaften +gehören: + +@itemize + +@item +@code{direction} (Richtung) + +Das wurde schon detailliert behandelt, siehe +@ref{Předměty uvnitř notové osnovy,,předměty uvnitř notové osnovy}. + +@item +@code{padding}, @code{right-padding}, @code{staff-padding} (Verschiebung) + +@cindex Padding-Eigenschaft +@cindex right-padding-Eigenschaft +@cindex staff-padding-Eigenschaft +@cindex Verschieben (padding) +@cindex Füllung (padding) +@cindex padding (Füllung) + +Wenn ein Objekt platziert wird, bestimmt der Wert seiner +@code{padding}-(Füllungs)-Eigenschaft die Größe des +Abstandes, der zwischen dem Objekt selber und dem +Objekt, relativ zu welchem es positioniert wird, gelassen +werden muss. Dabei zählt der @code{padding}-Wert +des Objektes, das platziert werden soll, der @code{padding}-Wert +des Objektes, das schon gesetzt wurde, wird hingegen +ignoriert. Abstände mit @code{padding} können zu +allen Objekten hinzugefügt werden, die das +@code{side-position-interface} unterstützen. + +Anstelle von @code{padding} wird die Position von +Versetzungszeichengruppen durch die Eigenschaften +@code{right-padding} bestimmt. Diese Eigenschaft wird im +@code{AccidentalPlacement}-(Versetzungszeichen-Positionierungs)-Objekt +gefunden, das sich innerhalb des @strong{Staff}-Kontexts +befindet. Während des Notensatzes werden die Notenköpfe +zuerst gesetzt und dann die Versetzungszeichen, wenn denn +welche gesetzt werden, durch die @code{right-padding}-Eigenschaft +auf die linke Seite der Notenköpfe positioniert, um die Entfernung +von den Notenköpfen und zwischen den einzelnen Versetzungszeichen zu +bestimmen. Also nur die @code{right-padding}-(Verschiebung nach rechts)-Eigenschaft +des @code{AccidentalPlacement}-Objekts hat Einfluss auf die +Positionierung der Versetzungszeichen. + +Die @code{staff-padding}-(Verschiebung zum System)-Eigenschaft +ist sehr ähnlich wie die @code{padding}-Eigenschaft: +@code{padding} bestimmt den Minimalabstand zwischen +einem Objekt, das das @code{side-position-interface} +unterstützt, und dem nächsten anderen Objekt (normalerweise +die Note oder Notenlinie); @code{staff-padding} dagegen +wirkt nur auf Objekte die immer außerhalb des Notensystems +sind -- damit wird der minimale Abstand bestimmt, der +zwischen dem Objekt und dem Notensystem gelassen werden +soll. @code{staff-padding} hat also @strong{keinen Einfluss} +auf Objekte, die relativ zu einer Note positioniert werden, sondern +nur auf solche, die zum System relativ stehen. Wenn es mit einem +anderen Objekt eingesetzt wird, erhält man keine Fehlermeldung, aber +der Befehl hat auch keine Auswirkungen. + +Um herauszufinden, welche @code{padding}-Eigenschaft für +das bestimmte Objekt nötig, ist, das Sie verschieben wollen, +müssen Sie in der IR nach den Objekt-Eigenschaften schauen. +Dabei sollten Sie bedenken, dass sich die @code{padding}-Eigenschaften +nicht unbedingt in dem Objekt selber befinden, schauen Sie +also auch in Objekten nach, die offensichtlich Ähnlichkeiten +haben. + +Alle @code{padding}-Werte werden in Notenlinienabständen +gemessen. Für die meisten Objekte ist der Wert ungefähr auf +1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt). +Der Wert kann geändert werden, wenn ein größerer (oder +kleinerer) Abstand gewünscht wird. + +@item +@code{self-alignment-X} (Selbstpositionierung) + +@cindex self-alignment-X-Eigenschaft +@cindex Samoumístění předmětů +@cindex Ausrichtung von Objekten + +Diese Eigenschaft kann benutzt werden, um ein Objekt +nach links, rechts oder zentriert an dem Referenzpunkt des Objekts +auszurichten, an das es verknüpft ist. Es kann bei allen +Objekten benutzt werden, die das @code{self-alignment-interface} +unterstützen. Das sind üblicherweise Objekte, die Text +enthalten. Die möglichen Werte der Eigenschaft sind @code{LEFT}, +@code{RIGHT} oder @code{CENTER}. Alternativ kann ein +numerischer Wert zwischen @code{-1} und @code{+1} +bestimmt werden: @code{-1} heißt linksbündig, @code{+1} +rechtsbündig und Zahlen dazwischen bewegen den Text +schrittweise von links nach rechts. Zahlen größer als +@code{1} können angegeben werden, um den Text +noch weiter nach links zu bewegen, oder weniger als @code{-1}, +um ihn weiter nach rechts zu schieben. Eine Änderung +um @code{1} des Wertes entspricht einer Bewegung um +die halbe Textbreite. + +@item +@code{extra-spacing-width} (zusätzliche Breite) + +@cindex extra-spacing-width-Eigenschaft + +Diese Eigenschaft steht für alle Objekte zur Verfügung, die +das @code{item-interface} unterstützen. Es braucht zwei +Zahlen als Argument, die erste wird zur rechten Ausdehnung, +die zweite zur linken Ausdehnung hinzugerechnet. Negative +Zahlen verschieben die Ausdehnung nach rechts, positive nach +links, um also ein Objekt zu verbreitern, muss die erste +Zahl negativ und die zweite positiv sein. Allerdings beachten +nicht alle Objekte beide Zahlen. Das +@code{accidental}-(Versetzungszeichen)-Objekt etwa beachtet +nur erste Zahl für die linke Ausdehnung. + +@item +@code{staff-position} (Notensystempositionierung) + +@cindex staff-position-Eigenschaft + +@code{staff-position} ist eine Eigenschaft des +@code{staff-symbol-referencer-interface}, die von Objekten unterstützt +wird, die relativ zum Notensystem (engl. staff) positioniert werden. +Hiermit wird die vertikale Position eines Objekts relativ zur +Mittellinie des Systems in halben Notenlinienabständen angegeben. +Das ist sehr nützlich, um Zusammenstöße zwischen Layout-Objekten +wie Ganztaktpausen, Bögen und Noten in verschiedenen Stimmen +zu lösen. + +@item +@code{force-hshift} (vertikale Verschiebung erzwingen) + +@cindex force-hshift-Eigenschaft + +Eng beieinander stehende Noten in einem Akkord oder Noten, die zum +gleichen Zeitpunkt in unterschiedlichen Stimmen stehen, werden +in zwei oder manchmal auch mehr Kolumnen gesetzt, um Kollisionen +zu umgehen. Diese Kolumnen werden Notenkolumnen genannt; +ein @code{NoteColumn}-Objekt wird erstellt um die Noten in den +Kolumnen zu setzen. + +Die @code{force-hshift}-(erzwinge horizontale Verschiebung)-Eigenschaft +ist eine Eigenschaft von @code{NoteColumn} (bzw. vom +@code{note-column-interface}). Eine Veränderung dieser Eigenschaft +macht es möglich, eine Notenkolumne zu verschieben, dabei gilt als +Einheit die Breite einer Kolumne, also die Breite des Notenkopfes der +ersten Stimme. Diese Eigenschaft kann in Situationen benutzt werden, +in denen die normalen @code{\shiftOn}-Befehle (siehe auch +@ref{Přímo vyjádřené začátky hlasů}) das Problem nicht beseitigen. +Diese Eigenschaft ist besser in solchen Fällen zu verwenden als die +@code{extra-offset}-Eigenschaft, weil man die richtige Entfernung nicht +in Notenlinienabständen ausrechnen muss. Wenn eine Note in eine +Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere +Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen. + +@end itemize + +@item +Zu guter Letzt, wenn alles andere nicht funktioniert, können Objekte auch +manuell positioniert werden, entweder vertikal in Bezug auf die +Mittellinie des Systems, oder indem sie einen beliebigen Abstand weit +auf eine neue Position verschoben werden. Der Nachteil ist, dass die +richtigen Werte für eine gute Position manuell ausprobiert werden müssen, +meistens durch Herantasten an den richtigen Wert, und das für jedes +einzelne Objekt extra. Und weil diese Verschiebungen erst vorgenommen +werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als +Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt. +Am schwerwiegendsten ist aber die Tatsache, dass die +Verschiebungskoordinaten wahrscheinlich neu errechnet oder +ausprobiert werden müssen, wenn sich an den Noten und deren +Layout später irgend etwas ändert. Die Eigenschaften, die für diese +Arte der manuellen Verschiebung verwendet werden können, sind: + +@table @code +@item extra-offset (zusätzlicher Abstand) + +@cindex extra-offset-Eigenschaft + +Diese Eigenschaft gehört zu jedem Layout-Objekt, das das +@code{grob-interface} unterstützt. Sie braucht ein Zahlenpaar, +das die exakte Verschiebung in horizontaler und vertikaler Richtung +bezeichnet. Negative Zahlen verschieben das Objekt nach links oder +unten. Die Einheit sind Notenlinienabstände. Die zusätzliche +Positionierung wird vorgenommen, nachdem alle anderen Objekte +platziert sind, weshalb ein Objekt irgendwohin verschoben werden +kann, ohne den restlichen Satz zu beeinflussen. + +@item positions (Position) + +@cindex positions-Eigenschaft + +Diese Eigenschaft ist am sinnvollsten, um die Steigung und die +Höhe von Balken, Bögen und Triolenklammern anzupassen. +Sie braucht ein Zahlenpaar, das die Position des rechten und linken +Endes relativ zur Mittellinie des Notensystems bestimmt. Die +Einheit sind Notenlinienabstände. Bögen allerdings können nicht +beliebig weit weg positioniert werden. LilyPond erstellt zunächst eine +Liste an möglichen Positionen für den Bogen und findet normalerweise +die Version, die @qq{am besten aussieht}. Wenn die +@code{positions}-Eigenschaft verändert worden ist, wird der +Bogen aus der Liste gewählt, der der gewünschten Position am +nächsten kommt. +@end table + +@end enumerate + +Ein bestimmtes Objekt hat vielleicht nicht alle dieser Eigenschaften. +Darum ist es nötig, in der IR nachzuschlagen, welche Eigenschaften +ein bestimmtes Objekt unterstützt. + +Hier ist eine Liste an Objekten, die am wahrscheinlichsten an einer +Kollision beteiligt sind, daneben findet sich die Bezeichnung des +Objektes, mit der Sie es in der IR finden, um zu bestimmen, +welche Eigenschaften benutzt werden können, um es zu verschieben. + +@multitable @columnfractions .5 .5 +@headitem Objekttyp @tab Objektbezeichnung +@item Articulationszeichen @tab @code{Script} +@item Balken @tab @code{Beam} +@item Dynamikzeichen (vertikal) @tab @code{DynamicLineSpanner} +@item Dynamikzeichen (horizontal) @tab @code{DynamicText} +@item Fingersatz @tab @code{Fingering} +@item Übungs-/Textmarken @tab @code{RehearsalMark} +@item Legatobögen @tab @code{Slur} +@item Text z. B. @code{^"text"} @tab @code{TextScript} +@item Bindebögen @tab @code{Tie} +@item N-tolen @tab @code{TupletBracket} +@end multitable + + +@node Oprava překrývajících se not +@subsection Oprava překrývajících se not +@translationof Fixing overlapping notation + +Hier soll nun gezeigt werden, wie die Eigenschaften, die im +vorigen Abschnitt vorgestellt wurden, bei der Problemlösung +mit sich überschneidenden Notationselementen eingesetzt +werden können. + +@subheading padding (Fülleigenschafte) + +@cindex padding (Verschiebungs-Eigenschaft) +@cindex Überschneidende Notation korrigieren +@cindex Korrigieren von überschneidender Notation + +Die @code{padding}-(Verschiebungs-)Eigenschaft kann benutzt +werden, um den Abstand zwischen Symbolen zu vergößern (oder +zu verkleinern), die über oder unter den Noten gesetzt werden. + +@cindex Script, Beispiel zur Veränderung +@cindex Verschiebungs-Eigenschaft, Beispiel +@cindex padding (Verschiebuns-Eigenschaft), Beispiel + +@lilypond[quote,fragment,relative=1,verbatim] +c2\fermata +\override Script #'padding = #3 +b2\fermata +@end lilypond + +@cindex MetronomMark, Beispiel zur Veränderung +@cindex Verschiebungs-Eigenschaft, Beispiel +@cindex padding (Verschiebuns-Eigenschaft), Beispiel + +@lilypond[quote,fragment,relative=1,verbatim] +% This will not work, see below +\override MetronomeMark #'padding = #3 +\tempo 4 = 120 +c1 | +% This works +\override Score.MetronomeMark #'padding = #3 +\tempo 4 = 80 +d1 | +@end lilypond + +Im zweiten Beispiel können Sie sehen, wie wichtig es ist den richtigen +Kontext anzugeben. Weil das @code{MetronomeMark}-Objekt +sich im @code{Score}-Kontext befindet, werden Eigenschaftsänderungen +im @code{Voice}-Kontext einfach ignoriert. Für mehr Einzelheiten siehe +@ruser{Eigenschaften verändern}. + +Wenn die @code{padding}-Eigenschaft eines Objektes erhöht wird, das +sich in einem Stapel von Objekten befindet, die nach ihrer +Außersystempriorität (@code{outside-staff-priority}) positioniert werden, +werden das Objekt und alle, die sich außerhalb davon befinden, +entsprechend verschoben. + +@subheading right-padding (Verschieben nach links) + +@cindex Verschiebung nach rechts +@cindex right-padding-Eigenschaft (Verschiebung nach rechts) + +Die @code{right-padding}-Eigenschaft wirkt sich auf den Abstand +zwischen einem Versetzungszeichen und der Note, auf das sie sich +bezieht, aus. Sie wird nicht sehr oft benötigt, aber die +Standardanordnung kann für einige spezielle Versetzungszeichen-Glyphen +oder Kombinationsglyphen, +wie sie für Mikrotonale Musik benutzt werden, falsch sein. Derartige +Glyphen müssen notiert werden, indem man den Stencil des +Versetzungszeichens mit einer Textbeschriftung (Markup) ersetzt, +wie im folgenden Beispiel: + +@cindex Versetzungszeichen, Beispiel zur Veränderung +@cindex Accidental, Beispiel zur Veränderung +@cindex Text-Eigenschaft, Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex AccidentalPlacement, Beispiel zur Veränderung +@cindex right-padding-Eigenschaft, Beispiel +@cindex Verschiebung nach rechts (rigth-padding), Beispiel + +@lilypond[quote,ragged-right,verbatim] +sesquisharp = \markup { \sesquisharp } + \relative c'' { + c4 + % This prints a sesquisharp but the spacing is too small + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 c + % This improves the spacing + \once \override Score.AccidentalPlacement #'right-padding = #0.6 + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 +} +@end lilypond + +@noindent +Dazu ist aber ein @code{\override}-Befehl für den Stencil des +Versetzungszeichens nötig, der bisher nicht behandelt wurde. +Der Typ des Stencils muss eine Prozedur sein, die hier geändert +wurde, um den Inhalt der @code{text}-Eigenschaft des +@code{Accidental} (Versetzungszeichen)-Objekts zu setzen. Die +@code{text}-Eigenschaft wiederum wird als @code{sesquisharp}-Glyph +definiert. Dieser Glyph wird dann weiter vom Notenkopf entfernt +durch die Veränderung von @code{right-padding} mit einem +@code{\override}-Befehl. + +@subheading staff-padding (Systemfüllungseigenschaft) + +@cindex staff-padding-Eigenschaft +@cindex Objekte an der Grundlinie ausrichten +@cindex Ausrichten von Objekten an der Grundlinie + +@code{staff-padding} (Verschiebung zum Notensystem) kann +verwendet werden um Objekte wie Dynamikzeichen an einer +Grundlinie auf einer bestimmten Höhe über dem System +auszurichten, sodass sie nicht von der Position der Note abhängen, +an die sie angehängt sind. Diese Verschiebung ist keine Eigenschaft +von @code{DynamicText}, sondern von @code{DynamicLineSpanner}. +Das liegt daran, dass die Grundlinie sich gleicherweise auf +@strong{alle} Dynamikzeichen beziehen soll, also auch auf die, +die als Strecker erstellt wurden. Hier also die Lösung, die Dynamikzeichen +aus dem Beispiel des vorigen Abschnitts auszurichten: + +@cindex DynamikText, Beispiel zur Veränderung +@cindex extra-spacing-width-Eigenschaft, Beispiel +@cindex DynamicLineSpanner, Beispiel zur Veränderung +@cindex staff-padding-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 unit +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +% Align dynamics to a base line 2 units above staff +\override DynamicLineSpanner #'staff-padding = #2 +a4\f b\mf c\mp b\p +@end lilypond + + +@subheading self-alignment-X (Selbstausrichtung-X-Eigenschaft) + +@cindex self-alignment-X-Eigenschaft + +Das nächste Beispiel zeigt, wie man den Zusammenstoß +einer Fingersatzbezeichnung mit einem Notenhals +verhindern kann, indem die rechte Ecke an dem +Referenzpunkt der abhängigen Note angeordnet wird: + +@cindex StringNumber, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=3] +\voiceOne +< a\2 > +\once \override StringNumber #'self-alignment-X = #RIGHT +< a\2 > +@end lilypond + + +@subheading staff-position (Position innerhalb des Systems) + +@cindex staff-position-Eigenschaft +@cindex Notensystem-Position-Eigenschaft +@cindex Střety předmětů v osnově +@cindex Zusammenstöße von Objekten im System + +Vieltaktpausen in einer Stimmen können mit Noten in anderen +Stimmen kollidieren. Da diese Pausen zentriert zwischen den +Taktlinien gesetzt werden, würde es für LilyPond eine recht große +Anstrengung bedeuten herauszufinden, welche Noten mit ihnen +zusammenstoßen könnten, denn alle Kollisionsvermeidung +für Noten und Pausen funktioniert nur für Noten bzw. Pausen, die +zur selben Zeit auftreten. Hier ein typisches Beispiel für eine +Kollision dieser Art: + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< { c4 c c c } \\ { R1 } >> +@end lilypond + +Die beste Lösung ist es, die Ganztaktpause nach unten zu +schieben, denn die Pause ist in der zweiten Stimme. Per +Standardeinstellung für die zweite Stimme (@code{\voiceTwo}, +also die zweite Stimme in der +@code{<<@{...@} \\ @{...@}>>}-Konstruktion) wird die +Position auf dem System (@code{staff-position}) auf -4 +für @code{MultiMeasureRest}, in unserem Beispiel muss +es also bspw. auf die Position @code{-8} gesetzt werden, +d.h. vier halbe Notenlinienabstände weiter nach unten: + +@cindex MultiMeasureRest, Beispiel zur Veränderung +@cindex Ganztaktpausen, Beispiel zur Veränderung +@cindex staff-position-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< + { c4 c c c } + \\ + \override MultiMeasureRest #'staff-position = #-8 + { R1 } +>> +@end lilypond + +Das ist besser, als etwa @code{extra-offset} zu benutzen, denn +in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt. + + +@subheading extra-offset (Genaues Positionieren) + +@cindex extra-offset-Eigenschaft +@cindex Zusätzlicher Abstand, Positionierung +@cindex Umístění předmětů +@cindex Objekte, Positionierung + +Die @code{extra-offset}-Eigenschaft bietet vollständige Kontrolle +über die umístění předmětů in horizontaler und vertikaler +Richtung. + +Im Beispiel unten ist das zweite Fingersatzzeichen (@code{Fingering}) etwas nach +links und 1,8 Notenlinienabstände nach unten verschoben: + +@cindex Fingersatz, Beispiel zur Veränderung +@cindex extra-offset-Eigenschaft, Beispiel + +@lilypond[quote,fragment,relative=1,verbatim] +\stemUp +f4-5 +\once \override Fingering #'extra-offset = #'(-0.3 . -1.8) +f4-5 +@end lilypond + + +@subheading Ausrichtungseigenschaft + +@cindex positions-Eigenschaft +@cindex Kontrolle über Triolen, Bögen und Balken manuell +@cindex manuelle Kontrolle über Triolen, Bögen, Balken +@cindex Balken, manuelle Kontrolle +@cindex Bögen, manuelle Kontrolle +@cindex Legatobögen, manuelle Kontrolle +@cindex Phrasierungsbögen, manuelle Kontrolle +@cindex Triollen-Klammer, manuelle Kontrolle + +Die @code{positions}-Eigenschaft erlaubt die Kontrolle von Position und +Steigung von Balken, Legato- und Phrasierungsbögen sowie Triolenklammern. +Hier ein Beispiel, in der ein unschöner Phrasierungsbogen auftritt, weil +er den Bogen des Vorschlags vermeidet: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 \acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +Man könnte einfach den Phrasierungsbogen oberhalb der Noten setzen, und +das wäre auch die beste Lösung: + +@cindex Phrasierungsbogen, Beispiel zur Veränderung +@cindex positions-Eigenschaft, Beispiel +@cindex Positionierung, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\phrasingSlurUp +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +aber wenn es einen Grund geben sollte, warum das nicht geht, könnte +man das linke Ende des Phrasierungsbogens etwas nach unten verschieben, +indem man die @code{positions}-Eigenschaft einsetzt. Damit +verschwindet auch die etwas unschöne Form: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\once \override PhrasingSlur #'positions = #'(-4 . -3) +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +Hier noch ein weiteres Beispiel aus der Einleitung von Chopins +Prelude Op. 28 Nr. 2, das untere System. Wie zu sehen ist, +stößt der Balken mit den oberen Noten zusammen: + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \clef "bass" + << { b,8 ais, b, g, } \\ { e, g e, g } >> + << { b,8 ais, b, g, } \\ { e, g e, g } >> +} +@end lilypond + +@noindent +Das kann manuell gelöst werden, indem beide Enden des Balkens +von ihrer Position 2 Notenlinienabstände über der Mittellinie +hochgeschoben werden, etwa auf 3: + +@cindex Balken, Beispiel zur Veränderung +@cindex positions-Eigenschaft, Beispiel +@cindex Positionierung, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \clef "bass" + << + \override Beam #'positions = #'(3 . 3) + { b,8 ais, b, g, } + \\ + { e, g e, g } + >> + << { b,8 ais, b, g, } \\ { e, g e, g } >> +} +@end lilypond + +@noindent +Hier ist zu beobachten, dass die Veränderung sich auch auf die +weiteren Achtelbalken der ersten Stimme auswirkt, während sie keine +Auswirkung auf die Balken der zweiten Stimme hat. + +@subheading force-hshift (vertikale Verschiebunseigenschaft) + +@cindex force-hshift-Eigenschaft +@cindex Vertikale Verschiebung erzwingen + +An diesem Punkt können wir den letzten Feinschliff an unserem +Chopin-Beispiel vornehmen, das wir behandelt haben in +@ref{Slyším hlasy}. Wir hatten es in folgende Form +gebracht: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + 2 des + } + >> | + 1 | +} +@end lilypond + +@noindent +Die unteren zwei Noten des ersten Akkords (also die in der +dritten Stimme) sollten nicht aus der Notenkolumne der +oberen zwei Noten weggeschoben werden. Um das zu +korrigieren, setzen wir @code{force-hshift}, das eine +Eigenschaft von +@code{NoteColumn} ist, für diese Noten auf Null. +Die untere Note des zweiten Akkordes wird am besten +direkt rechts von den oberen Noten gesetzt. Das erreichen +wir, indem wir @code{force-hshift} für diese Note auf +0.5 setzen, also eine halbe Notenkopfbreite nach rechts von +der Kolumne der oberen Noten aus. + +Hier das Endergebnis: + +@cindex Notenkolumne, Beispiel zur Veränderung +@cindex force-hshift-Eigenschaft, Beispiel +@cindex vertikale Verschiebung, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +@node Příklady ze života +@subsection Příklady ze života +@translationof Real music example + +Das Kapitel zu Optimierungen soll mit einem komplizierten Beispiel +beendet werden, in dem verschiedene Optimierungen vorgenommen +werden müssen, bis das Ergebnis gut aussieht. Das Beispiel wurde +ganz bewusst gewählt um die Benutzung der Notationsreferenz +zu zeigen, wenn ungewöhnliche Notationsprobleme gelöst werden +müssen. Es ist nicht repräsentativ für normale Notationsprojekte, +lassen Sie sich also nicht durch dieses Beispiel entmutigen! Zum +Glück sind Probleme wie die hier gezeigten nicht sehr häufig. + +Das Beispiel stammt aus Chopins Premiére Ballade, Op. 23, Takte +6--9, der Übergang vom Lento der Einleitung zum Moderato. +Hier zunächst der Satz, wie er aussehen soll, allerdings ohne +Dynamik, Fingersatz und Pedalbezeichnung, um das Beispiel nicht +zu kompliziert zu machen. + +@c This example should not be indexed +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + bes2.^\markup { \bold "Moderato" } r8 + << + { c,8 d fis bes a } + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Die erste Überlegung ist, dass das System für die rechte Hand +im dritten Takt vier Stimmen braucht. Das sind die fünf +Achtelnoten mit Balken, das übergebundene C, die Halbe D, die +mit der Achtel D verschmolzen ist, und die punktierte Viertel +Fis, die auch mit einer Achtelnote verschmolzen ist. Alles +andere ist eine einzige Stimme, es ist also am einfachsten, die +zusätzlichen drei Stimmen nur zeitweise zu erstellen, wenn sie +auftreten. Wenn Sie vergessen haben, wie man das anstellt, +schauen Sie sich nochmal den Abschnitt @ref{Slyším hlasy} +und @ref{Přímo vyjádřené začátky hlasů} an. Hier wollen wir explizit +begonnene Stimmen für die polyphone Stelle benutzen, weil LilyPond +Kollisionen besser vermeidet, wenn alle Stimmen auf diese Weise +explizit begonnen werden. + + +Wir wollen anfange, indem wir die Noten in zwei Variablen +notieren und dann die Systemstruktur in einer +@code{\score}-Umgebung erstellen. Das ist, was LilyPond +erstellt: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { r2 c4. g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2. % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2 | + 1 | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Alle Noten sind richtig, aber die Positionierung sehr +verbesserungsbedürftig. Der Bindebogen kollidiert mit +der veränderten Taktart zusammen, einige Noten werden nicht +verschmolzen und einige Notationselemente fehlen ganz. +Behandeln wir zunächst die einfacheren Dinge. Der +Balken kann durch eine manuelle Begrenzung einfach +korrigiert werden, und auch der Legatobogen der linken +Hand und der Phrasierungsbogen der rechten Hand +sind schnell gesetzt, denn sie wurden schon in der +Übung erklärt. Damit haben wir folgendes Notenbild: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1) | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Der erste Takt stimmt jetzt schon. Der zweite Takt enthält ein +Arpeggio und wird mit einer doppelten Taktlinie beschlossen. +Wie können wir diese notieren, denn sie sind im Handbuch zum +Lernen nicht vorgekommen? Hier brauchen wir jetzt die +Notationsreferenz. Ein Blick in den Index zeigt uns die +Einträge für @qq{Arpeggio} und @qq{Taktlinien}: ein +Arpeggio also erstellt man mit dem Befehl @code{\arpeggio} +hinter einem Akkord und eine doppelte Taktlinie wird mit dem +Befehl @code{\bar "||"} erstellt. Das ist einfach. Als nächstes +muss der Zusammenstoß des Bindebogens mit der Taktartbezeichnung +gelöst werden. Das geht am besten, indem wir den Bogen nach +oben verschieben. Wie man Objekte verschiebt wurde schon +behandelt in @ref{Přesouvání předmětů,,přesouvání předmětů}, wo stand, dass Objekte +die relativ zum System positioniert werden, vertikal verschoben werden +können, indem ihre @code{staff-position}-Eigenschaft +geändert wird, die in halben Notenlinienabständen relativ +zur Mittellinie angegeben wird. Dieser @code{\override}-Befehl +also, direkt vor die erste übergebundene Note gestellt, verschiebt +den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände +über die Mittellinie: + +@code{\once \override Tie #'staff-position = #3.5} + +Damit ist auch der zweite Takt vollständig: + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +In Takt drei beginnt der Moderato-Abschnitt. In der +Übung wurde behandelt, wie man fetten Text mit dem +@code{\markup}-Befehl eingibt, es ist also einfach, das +@qq{Moderato} in fetter Schrift hinzuzufügen. Wie aber werden Noten +verschmolzen? Hier nehmen wir wieder die Notationsreferenz +zu Hilfe. Die Suche nach @qq{Verschmelzen} (engl. merge) +im Index führt uns zu den Befehlen, um Noten mit +unterschiedlichen Köpfen und unterschiedlichen Punkten +zu verschmelzen, in @ruser{Auflösung von Zusammenstößen}. In unserem +Beispiel müssen sowohl unterschiedliche Köpfe also auch +unterschiedliche Punktierung verschmolzen werden, wir +brauchen also die Befehle + +@example +\mergeDifferentlyHeadedOn +\mergeDifferentlyDottedOn +@end example + +@noindent +aus der Notationsreferenz, die wir an den Beginn unseres +Abschnittes stellen und + +@example +\mergeDifferentlyHeadedOff +\mergeDifferentlyDottedOff +@end example + +@noindent +um das Verhalten wieder auszuschalten. Das sieht so aus: + +@cindex Bindebogen, Beispiel zur Veränderung +@cindex staff-position-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Mit diesen Veränderungen wurden die beiden Fis-Noten +verschmolzen, aber nicht die zwei Ds. Warum nicht? Die +Antwort befindet sich im gleicher Abschnitt der Notationsreferenz: +Noten, die verschmolzen werden, müssen Hälse in entgegengesetzte +Richtungen aufweisen und zwei Noten können nicht verschmolzen +werden, wenn eine dritte Noten in der gleichen Kolumne +stört. In unserem Fall weisen beide Hälse nach oben und es +befindet sich zur gleichen Zeit auch noch eine dritte Note, das C. +Wie die Richtung von Hälsen geändert wird, wissen wir schon: +mit @code{\stemDown}, und in der Notationsreferenz findet +sich auch Information, wie das C verschoben werden kann: mit +dem @code{\shift}-Befehl. Aber welcher von ihnen? Das C +befindet sich in der zweiten Stimme, die @qq{shift off} hat, +die zwei Ds sind in den Stimmen eins und drei, die @qq{shift +off} bzw. @qq{shift on} haben. Das C muss also noch eine +Stufe weiter verschoben werden mit @code{\shiftOnn}, damit +es die Verschmelzung der Ds nicht stört. Das sieht jetzt so +aus: + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + % Move the c2 out of the main note column so the merge will work + c,8~ \shiftOnn c2 + } + \new Voice { + \voiceThree + % Stem on the d2 must be down to permit merging + s8 \stemDown d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Fast schon geschafft. Nur noch ein Problem ist übrig: Der Hals nach +unten des verschmolzenen sollte nicht da sein, und das C sähe +besser auf der rechten Seite des Ds aus. Beides können wir mit den +gelernten postupy při ladění erreichen. Den Hals machen +wir durchsichtig und das C verschieben wir mit der +@code{force-hshift}-Eigenschaft. Hier ist das Endergebnis: + +@cindex Notenkolumne, Beispiel zur Veränderung +@cindex force-hshift-Eigenschaft, Beispiel +@cindex Hals, Beispiel zur Veränderung +@cindex Notenhals, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + + +@node Další ladění +@section Další ladění +@translationof Further tweaking + +@menu +* Jiné využití ladění:: +* Použití proměnných pro ladění:: +* Celkové formátování:: +* Více informací:: +* Vyhnutí se ladění s pomalejším překladem:: +* Pokročilá ladění se Scheme:: +@end menu + +@node Jiné využití ladění +@subsection Jiné využití ladění +@translationof Other uses for tweaks + +@cindex Transparente Objekte +@cindex Entfernen von Objekten +@cindex Verstecken von Objekten +@cindex Unsichtbare Objekte +@cindex transparent-Eigenschaft, Benutzung +@cindex Objekte unsichtbar machen +@cindex Objekte entfernen +@cindex Objekte verstecken +@cindex Noten zwischen Stimmen überbinden +@cindex Überbinden von Noten zwischen Stimmen + +@subheading Noten zwischen unterschiedlichen Stimmen überbinden + +Das nächste Beispiel zeigt, wie man Noten von verschiedenen +Stimmen miteinander verknüpfen kann, indem man Bindebögen +für Überbindungen benutzt. Normalerweise können nur zwei +Noten der gleichen Stimme übergebunden werden. Wenn +man zwei Stimmen benutzt, wobei die überbundenen Noten +sich in der selben befinden, + +@lilypond[quote,fragment,relative=2] +<< { b8~ b8\noBeam } \\ { b[ g8] } >> +@end lilypond + +@noindent +und dann den ersten Hals nach oben unsichtbar macht, +sieht es so aus, als ob die Überbindung zwischen +den Stimmen stattfindet: + +@cindex Hals, Beispiel zur Veränderung +@cindex Notenhals, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +Um sicherzugehen, dass der unsichtbare Hals den Bindebogen +nicht zu sehr verkleinert, kann er verlängert werden, indem +seine Länge (@code{length}) auf den Wert @code{8} +gesetzt wird: + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8~ b\noBeam + } +\\ + { b[ g8] } +>> +@end lilypond + + +@subheading Eine Fermate in MIDI simulieren + +@cindex stencil-Eigenschaft, Benutzung +@cindex Fermate, Benutzung in MIDI +@cindex MIDI: Fermate erstellen + +Pro předměty vně notové osnovy ist es normalerweise +besser, die @code{stencil}-Eigenschaft anstelle der +@code{transparent}-Eigenschaft zu verändern, wenn man +sie vom fertigen Notensatz entfernen will. Indem die +@code{stencil}-Eigenschaft auf falsch (@code{#f}) gesetzt +wird, wird das entsprechende Objekt vollständig entfernt. +Das bedeutet, dass es die Positionierung der anderen Objekte +nicht beeinflusst. + +Auf diese Art kann etwa das Tempo geändert werden, damit +in der MIDI-Ausgabe eine Fermate zu hören ist, ohne dass +im Notensatz etwas von diesen Tempoänderungen zu sehen +ist. Die Metronombezeichnung soll auch nicht die Position +von Text an der gleichen Stelle oder die Abstände zwischen +zwei Systemen beeinflussen. Darum ist es am besten, +@code{stencil} auf @code{#f} zu setzen. Im Beispiel wird +der Unterschied zwischen einem unsichtbaren Objekt und +einem entfernten Objekt gezeigt: + +@cindex Metronom-Bezeichnung, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'transparent = ##t + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata + % New tempo for next section + \tempo 4=100 + a4 a a a + } + \layout { } + \midi { } +} +@end lilypond + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'stencil = ##f + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata + % New tempo for next section + \tempo 4=100 + a4 a a a + } + \layout { } + \midi { } +} +@end lilypond + +@noindent +Mit beiden Methoden wird die Tempobezeichnung entfernt, mit +der die Fermate verlängert wird, und beide beeinflussen die +MIDI-Ausgabe wie gewünscht. Die unsichtbare Metronombezeichnung +schiebt aber die folgende Bezeichnung in die Höhe, während +das im zweiten Beispiel, in dem der @code{stencil} entfernt +wurde, nicht passiert. + +@seealso +Glossar: +@rglos{system}. + + +@node Použití proměnných pro ladění +@subsection Použití proměnných pro ladění +@translationof Using variables for tweaks + +@cindex Variablen, Benutzung zur Optimierung +@cindex Optimierung mit Variablen + +@code{\override}-Befehle sind oft lang und mühsam zu +tippen, und sie müssen immer absolut richtig sein. Wenn +derselbe Befehl mehrere Male benutzt werden muss, lohnt +es sich oft schon, eine Variable zu definieren, in der er +sich befindet. + +Als Beispiel sollen einige Worte im +Gesangstext fett und kursiv hervorgehoben werden. +Die Befehle @code{\italic} und @code{\bold} funktionieren +im Gesangstext-Kontext nur, wenn sie gleichzeitig mit den Wörtern, +auf die sie angewendet werden sollen, zusätzlich +in eine @code{\markup}-Umgebung eingeschlossen +werden. Durch diese Einbettung können einzelne Wörter nicht +einfach zu einer Variable umgeformt werden. Als +Alternative versuchen wir, einen Befehl mit +@code{\override} und @code{\revert} zu konstruieren. + +@example +@code{\override Lyrics . LyricText #'font-shape = #'italic} +@code{\override Lyrics . LyricText #'font-series = #'bold} + +@code{\revert Lyrics . LyricText #'font-shape} +@code{\revert Lyrics . LyricText #'font-series} +@end example + +Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine +Hervorhebung benötigen. Anstelle dieser Befehlsketten @emph{können} +wir jedoch zwei Variablen definieren. Mit ihnen und dem entsprechenden +Wort in geschweiften Klammern erreichen wir den gewünschten Effekt. +Ein weiterer Vorteil ist, dass in diesem Fall die Leerzeichen um die +Punkte herum nicht benötigt werden, weil sie nicht innerhalb des +@code{lyricmode}-Kontextes interpretiert werden. Hier ein Beispiel; +die Bezeichnungen können natürlich auch kürzer sein, +um noch weniger schreiben zu müssen: + +@cindex LyricText, Beispiel zur Veränderung +@cindex Gesangstext, Beispiel zur Veränderung +@cindex font-shape-Eigenschaft, Beispiel +@cindex font-series-Eigenschaft, Beispiel + +@lilypond[quote,verbatim] +emphasize = { + \override Lyrics.LyricText #'font-shape = #'italic + \override Lyrics.LyricText #'font-series = #'bold +} +normal = { + \revert Lyrics.LyricText #'font-shape + \revert Lyrics.LyricText #'font-series +} + +global = { \key c \major \time 4/4 \partial 4 } + +SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = \lyrics { + E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, +} + +VerseTwo = \lyricmode { + O | \emphasize Christ, \normal whose voice the | wa -- ters heard, +} + +VerseThree = \lyricmode { + O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood +} + +VerseFour = \lyricmode { + O | \emphasize Tri -- ni -- ty \normal of | love and pow'r +} + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Soprano" { \VerseOne } + \new Lyrics \lyricsto "Soprano" { \VerseTwo } + \new Lyrics \lyricsto "Soprano" { \VerseThree } + \new Lyrics \lyricsto "Soprano" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@node Celkové formátování +@subsection Celkové formátování +@translationof Style sheets + +Die Ausgabe von LilyPond kann sehr stark verändert werden, siehe +zu Einzelheiten @ref{Ladění výstupu,,ladění výstupu}. Aber was ist, +wenn man mehrere Eingabedateien hat, die die gleichen Anpassungen +erfahren sollen? Oder wenn Sie einfach nur die Anpassungen von +der eigentlichen Musik trennen wollen? Das lässt sich recht einfach +erreichen. + +Schauen wir uns ein Beispiel an. Sorgen Sie sich nicht, wenn Sie +den Abschnitt mit den vielen @code{#()} nicht verstehen. Das wird +erklärt in @ref{Pokročilá ladění se Scheme,,pokročilých laděních se Scheme}. + +@lilypond[quote,verbatim,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Es gibt einige Probleme mit sich überschneidender Ausgabe, die wird +zurechtgerückt mit den Techniken von @ref{Přesouvání předmětů,,přesouvání předmětů}. +Aber jetzt zu den Definitionen von @code{mpdolce} und @code{inst}. +Sie erstellen die gewünschte Ausgabe, aber wir wollen sie vielleicht +auch in einem anderen Stück verwenden. Wir könnten sie immer wieder +kopieren und oben in jedes Stück einfügen, aber das ist sehr aufwändig. +Dadurch werden die Definitionen auch in der Eingabedatei belassen, +und ich finde diese @code{#()} irgendwie hässlich. Verstecken +wir sie also: + +@example +%%% in Datei "definitions.ily" speichern +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) +@end example + +Diese Datei wir mit dem @code{\include}-Befehl ziemlich weit oben +in der Datei eingefügt. (Die Erweiterung @file{.ily} wird benutzt, +um diese Datei als eine eingefügte, inkludierte zu kennzeichnen, die +man nicht alleinstehend kompilieren kann.) Jetzt ändern wir die +Noten (in der Datei @file{music.ly}). + +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. + +@example +\include "definitions.ily" + +\relative c'' @{ + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Das sieht schon besser aus, aber einige Änderungen könnten wir noch vornehmen. +Das Glissando ist kaum sichtbar, machen wir es also etwas dicker und +näher an den Notenkopf. Die Metronombezeichnung soll über dem +Schlüssel stehen, anstatt über der ersten Note. Und schließlich +mag mein Kompositionsprofessor keine @qq{C}-Taktangaben, das ändern +wir also in @qq{4/4}. + +Ändern Sie jetzt jedoch nicht @file{music.ly}. Ändern Sie die +@file{definitions.ily} mit dem Folgenden: + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + \override TimeSignature #'style = #'numbered + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout{ + \context { + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { + \Staff + \override TimeSignature #'style = #'numbered + } + \context { + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Das sieht besser aus! Aber nehmen wir an, Ich will dieses Stück publizieren. +Mein Professor mag die @qq{C}-Taktangabe nicht, mir gefällt sie aber sehr +gut. Kopieren wir also die Datei @file{definitions.ily} nach +@file{web-publish.ily} und verändern diese. Weil die Noten als PDF +auf dem Monitor dargestellt werden sollen, wird auch die Notengröße +global geändert. + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +In der Eingabedatei muss jetzt nur noch die Zeile +@code{\include "definitions.ily"} mit +@code{\include "web-publish.ily"} ersetzt werden. Das könnte +man natürlich noch besser machen. Es könnte eine Datei +@file{definitions.ily} mit allen Definitionen (also +@code{mpdolce} und @code{inst}) geben, eine Datei +@file{web-publish.ily}, die nur die @code{\layout}-Veränderung +enthält und eine Datei @file{university.ily}, die nur die +Prozedur enthält, die Ausgabe meinem Professor angenehm zu machen. +Der Anfang von @file{music.ly} würde dann folgendermaßen aussehen: + +@example +\include "definitions.ily" + +%%% nur eine der zwei Zeilen auskommentieren! +\include "web-publish.ily" +%\include "university.ily" +@end example + +Diese Herangehensweise kann auch schon nützlich sein, wenn man +nur ein paar Stimmen schreiben will. Ich habe eine ganze Anzahl +an @qq{Stylesheets} für meine Projekte. Ich fange jede Datei mit +der Zeile @code{\include "../global.ily"} an, die etwa folgendes +einbindet: + +@example +%%% global.ily +\version @w{"@version{}"} + +#(ly:set-option 'point-and-click #f) + +\include "../init/init-defs.ly" +\include "../init/init-layout.ly" +\include "../init/init-headers.ly" +\include "../init/init-paper.ly" +@end example + + + +@node Více informací +@subsection Více informací +@translationof Other sources of information + +Die Programmreferenz enthält sehr viel Information über LilyPond, aber +noch více informací findet sich in den internen +LilyPond-Dateien. Um sie erforschen zu können, müssen Sie erst +das richtige Verzeichnis auf Ihrem System finden. Die Position +hängt a) davon ab, ob Ihre LilyPond-Installation mit der vorkompilierten +Version von der LilyPond-Internetseite vorgenommen wurde oder Sie +die Version durch Ihren Paketmanager installiert haben (also +z. B. in einer Linux-Distribution oder unter fink oder cygwin +installiert), und b) auf welchem Betriebssystem Sie das Programm +benutzen: + +@strong{Von lilypond.org heruntergeladen} + +@itemize @bullet +@item Linux + +Wechseln Sie in das Verzeichnis +@file{@var{INSTALL_VERZ}/lilypond/usr/@/share/lilypond/current/} + +@item MacOS X + +Wechseln Sie in das Verzeichnis +@file{@var{INSTALL_VERZ}/LilyPond.app/Contents/@/Resources/share/lilypond/current/} +indem Sie entweder mit dem Befehl @code{cd} vom Terminal aus +in das Verzeichnis wechseln, oder mit Control-Klick auf das +LilyPond-Programmsymbol gehen und @qq{Show Package Contents} +auswählen. + +@item Windows + +Wechseln Sie mit dem Windows Explorer ins Verzeichnis +@file{@var{INSTALL_VERZ}/LilyPond/usr/@/share/lilypond/current/} + +@end itemize + +@strong{Mit einem Paket-Manager installiert oder selber aus +den Quellen kompiliert} + +Wechseln Sie in das Verzeichnis +@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, wobei +@var{PREFIX} bei Ihrem Paket-Manager oder dem +@code{configure}-Skript gesetzt wird, und @var{X.Y.Z} +die LilyPond-Versionsnummer. + +@smallspace + +In diesem Ordner sind die zwei interessanten Unterordner: + +@itemize +@item @file{ly/} - beinhaltet Dateien im LilyPond-Format +@item @file{scm/} - beinhaltet Dateien im Scheme-Format +@end itemize + +Schauen wir uns zuerst einige Dateien in @file{ly/} an. +Öffnen Sie @file{ly/property-init.ly} in einem Texteditor. +Der, den Sie normalerweise für @file{.ly}-Dateien benutzen, +genügt. Diese Datei enthält die Definitionen aller vordefinierten +Befehle für LilyPond, wie etwa @code{\stemUp} und +@code{\slurDotted}. Sie können sehen, dass es sich um +nichts mehr handelt als Definitionen von Variablen, die eine +oder mehrere @code{\override}-Befehle enthalten. Der +Befehl @code{/tieDotted} etwa wird folgendermaßen definiert: + +@example +tieDotted = @{ + \override Tie #'dash-period = #0.75 + \override Tie #'dash-fraction = #0.1 +@} +@end example + +Wenn Sie diese Voreinstellungen der vordefinierten Befehl nicht +mögen, können Sie sie ganz einfach umdefinieren, genauso wie +jede andere Variable auch, indem Sie sie an den Anfang Ihrer +Quelldatei schreiben. + +Hier sind die wichtigsten Dateien, die sich im Ordner +@file{ly/} befinden: + +@multitable @columnfractions .4 .6 +@headitem Dateiname + @tab Inhalt +@item @file{ly/engraver-init.ly} + @tab Definitionen von Engraver-Kontexten +@item @file{ly/paper-defaults-init.ly} + @tab Spezifikationen von Voreinstellungen für Papiermaße +@item @file{ly/performer-init.ly} + @tab Definitionen von Performer-Kontexten +@item @file{ly/property-init.ly} + @tab Definitionen aller vordefinierten Befehle +@item @file{ly/spanner-init.ly} + @tab Definitionen aller vordefinierten Strecker-Befehle +@end multitable + +Andere Einstellungen (wie die Definitionen von Beschriftungsbefehlen) +sind in @file{.scm}-(Scheme)-Dateien gespeichert. Die +Scheme-Programmiersprache wird benutzt, um eine +programmierbare Schnittstelle zu den internen Operationen von +LilyPond zu haben. Eine weitere Erklärung dieser Dateien ist +im Moment außerhalb des Rahmens dieses Handbuchs, denn +sie erfordern einige Kenntnis der Scheme-Sprache. Die Warnung +ist hier angebracht, dass des ein gutes technisches Verständnis +oder sehr viel Zeit braucht, um Scheme und diese +Dateien zu verstehen (siehe auch @rextend{Scheme-Übung}). + +Wenn Sie sich mit Scheme auskennen, sind hier mögliche +interessante Dateien: + +@multitable @columnfractions .4 .6 +@headitem Dateiname + @tab Inhalt +@item @file{scm/auto-beam.scm} + @tab Sub-Balken-Voreinstellungen +@item @file{scm/define-grobs.scm} + @tab Voreinstellungen für Grob-Eigenschaften +@item @file{scm/define-markup-commands.scm} + @tab Definition aller Markup-Beschriftungsbefehle +@item @file{scm/midi.scm} + @tab Voreinstellung für die MIDI-Ausgabe +@item @file{scm/output-lib.scm} + @tab Einstellungen mit Einfluss auf die Darstellung von Bunddiagrammen, Farben, Versetzungszeichen, Taktlinien usw. +@item @file{scm/parser-clef.scm} + @tab Definitionen der unterstützten Schlüssel +@item @file{scm/script.scm} + @tab Voreinstellungen für Artikulationszeichen +@end multitable + + +@node Vyhnutí se ladění s pomalejším překladem +@subsection Vyhnutí se ladění s pomalejším překladem +@translationof Avoiding tweaks with slower processing + +LilyPond kann einige zusätzliche Tests durchführen, während +die Noten gesetzt werden. Dadurch braucht das Programm länger, +um den Notensatz zu produzieren, aber üblicherweise werden +weniger nachträgliche Anpassungen nötig sein. Wenn eine +Textsilbe oder eine Beschriftung aus dem Rand der Partitur +ragt, wird durch diese Tests die Zeile gerade so weit komprimiert, +dass sie sich innerhalb der Ränder befindet. + +Damit diese Tests immer funktionieren, müssen sie aktiviert werden, +indem die @bs{}@code{override}-Befehle in einer @code{context}-Umgebung +innerhalb der @code{layout}-Umgebung notiert werden und nicht innerhalb +der Noten: + +@example +\score @{ + @{ @dots{}Noten@dots{} @} + \layout @{ + \context @{ + \Score + % Um sicher zu gehen, dass Texte und Liedtext + % innerhalb der Papierränder bleiben + \override PaperColumn #'keep-inside-line = ##t + \override NonMusicalPaperColumn #'keep-inside-line = ##t + @} + @} +@} +@end example + +@code{keep-inside-line} braucht jedoch sehr viel Berechnungen, +sodass es sich anbietet, diese Funktion zunächst nicht zu aktivieren +und erst einzufügen, wenn man die endgültige Version erstellt. +Auf diese Weise muss man nicht mit der Hand @code{\break}-Befehle +hinzufügen, um zu vermeiden, dass Text über den rechten Rand der +Seite hinausragt. + + +@node Pokročilá ladění se Scheme +@subsection Pokročilá ladění se Scheme +@translationof Advanced tweaks with Scheme + +Auch wenn viele Sachen mit @code{\override} und @code{\tweak} +möglich sind, gibt es eine sehr viel mächtigere Möglichkeit, die +Arbeitsweise von LilyPond mit Hilfe der programmierbaren Schnittstelle +zu beeinflussen. Code, der in der Scheme-Programmiersprache +geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond +eingefügt werden. Natürlich brauchen Sie dazu wenigstens ein +grundlegendes Verständnis von Scheme. Eine Einleitung finden +Sie in der @rextend{Scheme-Übung}. + +Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine +Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine +Scheme-Prozedur gesetzt werden kann, die dann jedes Mal +aufgerufen wird, wenn die Eigenschaft von LilyPond benutzt +wird. Die Eigenschaft kann damit dynamisch auf einen Wert +gesetzt werden, der durch die Prozedur jedes Mal neu bestimmt +wird. In diesem Beispiel wird die Farbe der Notenköpfe entsprechend +zu ihrer Position innerhalb der Tonleiter gesetzt. + +@cindex x11-Farben, Beispiel zur Benutzung +@cindex Notenkopf, Beispiel zur Veränderung +@cindex Farb-Eigenschaft, in Scheme-Prozedur gesetzt + +@lilypond[quote,verbatim,ragged-right] +#(define (color-notehead grob) + "Color the notehead according to its position on the staff." + (let ((mod-position (modulo (ly:grob-property grob 'staff-position) + 7))) + (case mod-position + ;; Return rainbow colors + ((1) (x11-color 'red )) ; for C + ((2) (x11-color 'orange )) ; for D + ((3) (x11-color 'yellow )) ; for E + ((4) (x11-color 'green )) ; for F + ((5) (x11-color 'blue )) ; for G + ((6) (x11-color 'purple )) ; for A + ((0) (x11-color 'violet )) ; for B + ))) + +\relative c' { + % Arrange to obtain color from color-notehead procedure + \override NoteHead #'color = #color-notehead + a2 b | c2 d | e2 f | g2 a | +} +@end lilypond + +Weiter Beispiele, die die Benutzung dieser programmierbaren +Schnittstelle zeigen, finden sich in @rextend{Optimierungen mit Scheme}. diff --git a/Documentation/cs/macros.itexi b/Documentation/cs/macros.itexi new file mode 100755 index 0000000000..38d2dac975 --- /dev/null +++ b/Documentation/cs/macros.itexi @@ -0,0 +1,787 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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 + + +@include version.itexi +@include common-macros.itexi + + +@c ***** Displaying text ***** + +@c To get decent quotes in ,foo' and ,,foo''. +@c These need to be split up so that "@qq{foo}." looks nice. :( + +@macro q{TEXT} +@quotesinglbase{}\TEXT\@quoteleft{} +@end macro + +@macro qq{TEXT} +@quotedblbase{}\TEXT\@quotedblleft{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@html +
+@end html +@strong{Pozor:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Achtung:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + + +@macro docMain +@cartouche +Pro více informací, jaké místo má tato příručka mezi jinými +příručkami, nebo kvůli čtení této příručky v jiném formátu, +navštivte, prosím, @rweb{Manuals}. + +Pokud vám příručky chybí, naleznete celou dokumentaci +pod @w{@uref{http://@/www@/.lilypond@/.org/}}. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@emph{Překlad následující poznámky k autorskému právu je pro čtenáře, +který neumí anglicky, k obeznámení se. V právním smyslu je ale platná +pouze anglická verze.} + +@quotation +Tento dokument je dovoleno rozšiřovat, kopírovat, a/nebo +upravovat za podmínek licence GNU Free Documentation, verze 1.1 nebo jakékoli pozdější, +ve verzi zveřejněné Free Software Foundation; s žádnými neměnnými částmi. +Kopie licence je zahrnuta v oddíle nazvaném GNU +Free Documentation License. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +Tento dokument byl zařazen jako volně šiřitelné dílo. +@end copying +@end ifclear + + +@c ***** Title page ***** +@ifnottex +@node Začátek +@top LilyPond -- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle Program pro sazbu not +@titlefont{\TITLE\} +@author Družstvo vývojářů LilyPondu + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +Pro LilyPond ve verzi @version{} +@end titlepage + +@end macro + + + +@c ***** Headings in a doc subsection ***** + +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Předem stanovené příkazy +@end macro + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Vybrané úryvky +@end macro + + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading Podívejte se také na +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Známé potíže a upozornění +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @ruser +@c @rprogram +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Slovníček} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Slovníček} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Příručka k učení se} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Příručka k učení se} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Doporučení pro notový zápis} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Doporučení pro notový zápis} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extending} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Changes} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,Všeobecné informace} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,Všeobecné informace} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Článek} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Článek} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Používání programu} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Používání programu} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Úryvky} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Úryvky} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Doporučení pro vnitřní části} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Doporučení pro vnitřní části} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Slovníček} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Slovníček} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Příručka k učení se} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning,Příručka k učení se} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Doporučení pro notový zápis} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Doporučení pro notový zápis} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Všeobecné informace} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Všeobecné informace} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Článek} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Článek} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Používání programu} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Používání programu} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Úryvky} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Úryvky} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Doporučení pro vnitřní části} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Doporučení pro vnitřní části} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Slovníček} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Slovníček} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Příručka k učení se} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Příručka k učení se} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Doporučení pro notový zápis} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Doporučení pro notový zápis} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Všeobecné informace} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web, Všeobecné informace} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Článek} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Článek} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Používání programu} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Používání programu} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Úryvky} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Úryvky} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Doporučení pro vnitřní části} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Doporučení pro vnitřní části} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Slovníček} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Slovníček} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning.cs,Příručka k učení se} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning.cs,Příručka k učení se} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation.cs,Doporučení pro notový zápis} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation.cs,Doporučení pro notový zápis} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Changes} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web.cs,Všeobecné informace} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web.cs,Všeobecné informace} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay.cs,Článek} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay.cs,Článek} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage.cs,Používání programu} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage.cs,Používání programu} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Úryvky} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Úryvky} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Doporučení pro vnitřní části} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,Doporučení pro vnitřní části} +@end macro + +@end iftex + + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
+@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + + +@macro help{TEXT} +@html +
+ + Hledá se pomoc: + \TEXT\ +
+@end html +@end macro + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin was created by +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} with +@uref{http://www.isc.tamu.edu/~lewing/gimp/, the Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +The FreeBSD logo is a registered trademark of +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +The @qq{X image} is not a registered trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} and +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, and +placed under the GNU Free Documentation License version 1.2 or later. +We found the image on +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +this Wikipedia Commons page}. + +@end macro + +@macro logoLegalWindows +The @qq{four colored rectangles image} is not a registered +trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} and +placed under the GNU Free Documentation License version 1.2. We +found the image on +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +this Wikipedia Commons page}. + +@end macro + +@end ifset + + + +@c ***** Macros specific to translated docs ***** + + +@macro englishref +Tato část ještě nebyla přeložena. Čtěte, prosím, +úryvek v anglické uživatelské příručce. +@end macro + diff --git a/Documentation/cs/texidocs/GNUmakefile b/Documentation/cs/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/cs/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/cs/translations.itexi b/Documentation/cs/translations.itexi new file mode 100644 index 0000000000..d9f008b947 --- /dev/null +++ b/Documentation/cs/translations.itexi @@ -0,0 +1,394 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Naposledy obnoveno Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Příručka k učení se +@tab Překladatelé +@tab Zkoušeči překladu +@tab Přeloženo +@tab Současné +@tab Více informací +@item +Nadpisy +@* +124 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@item +1 Cvičení +@* +2535 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab před-GDP +@item +2 Běžný notový zápis +@* +4184 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab před-GDP +@item +3 Základní pojmy +@* +11139 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab před-GDP +@item +4 Ladění výstupu +@* +15408 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@item +A Předlohy +@* +225 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond -- Zápis not pro každého +@tab Překladatelé +@tab Zkoušeči překladu +@tab Přeloženo +@tab Současné +@tab Více informací +@item +Nadpisy +@* +585 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@item +Úvod +@* +4506 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@item +Stažení +@* +1183 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@item +Příručky +@* +1200 +@tab Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab před-GDP +@item +Společenství +@* +1755 +@tab  Pavel Fric +@tab +@tab +@ifhtml + +@html +ano +@end html +@end ifhtml +@ifnothtml +ano +@end ifnothtml +@tab +@ifhtml + +@html +částečně +@end html +@end ifhtml +@ifnothtml +částečně +@end ifnothtml +@tab před-GDP +@end multitable + diff --git a/Documentation/cs/usage/GNUmakefile b/Documentation/cs/usage/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/cs/usage/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/cs/usage/external.itely b/Documentation/cs/usage/external.itely new file mode 100644 index 0000000000..8d27d6a144 --- /dev/null +++ b/Documentation/cs/usage/external.itely @@ -0,0 +1,662 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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" + +@c Translators: Pavel Fric + +@node Vnější programy +@chapter Vnější programy +@translationof External programs + +LilyPond kann mit anderen Programmen auf verschiedene Weise interagieren. + +@menu +* Ukázat a klepnout:: +* Podpora textových editorů:: +* Převod z jiných formátů:: +* Výstup LilyPondu do jiných programů:: +* Nezávislé include úryvky:: +@end menu + + +@node Ukázat a klepnout +@section Ukázat a klepnout +@translationof Point and click + +@cindex Ukázat a klepnout + +Ukázat a klepnout erlaubt es, die Noten in der Eingabedatei schnell +zu finden, indem man auf sie im PDF-Programm klickt. Das erleichtert +es, die Stellen zu finden, die Fehler in der Notation verursachen. + +Wenn diese Funktionalität aktiv ist, fügt LilyPond Hyperlinks zur +PDF-Datei hinzu. Diese Hyperlinks werden an den Webbrowser gesendet, +der einen Texteditor mit dem Cursor an der richtigen Stelle öffnet. + +Damit diese Kettenreaktion funktionieren kann, müssen Sie das +PDF-Programm dazu anweisen, Hyperlinks zu folgen, indem das Skript +@file{lilypond-invoke-editor}, welches mit LilyPond kommt, verwendet +wird. + +Für Xpdf unter UNIX sollte folgende Zeile in der Datei +@file{xpdfrc}@footnote{Unter UNIX findet man diese Datei +entweder in @file{/etc/xpdfrc} oder als @file{.xpdfrc} im +home-Verzeichnis.} stehen: + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +Das Programm @file{lilypond-invoke-editor} ist ein kleines +Hilfsprogramm. Es ruft einen Editor für besondere @code{textedit}-URIs# +auf und einen Webbrowser für andere. Es testes die Umgebungsvariable +@code{EDITOR} nach folgenden Mustern: + +@table @code +@item emacs + das ruft auf +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item gvim + das ruft auf +@example +gvim --remote +:@var{line}:norm@var{column} @var{file} +@end example + +@item nedit + das ruft auf +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +Die Umgebungsvariable @code{LYEDITOR} wird benutzt, um dieses Verhalten +zu umgehen. Sie enthält die Kommandozeile, mit der der Editor aufgerufen +wird, wobei @code{%(file)s}, @code{%(column)s} und @code{%(line)s} mit +der Datei, Spalte und Zeile ersetzt wird. Die Einstellung + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +für @code{LYEDITOR} entspricht dem normalen Aufruf von emacsclient. + + +@cindex Dateigröße, PDF +@cindex Ausgabedatei, Dateigröße + +Die point-and-click-Links vergrößern die Größe des PDFs sehr stark. +Um die Größe von PDFs und auch PS-Dateien zu verkleinern, kann +ukázat a klepnout ausgeschaltet werden, indem man in der Eingabedatei + +@example +\pointAndClickOff +@end example + +@noindent +schreibt. Ukázat a klepnout kann explizit aktiviert werden mit dem Befehl + +@example +\pointAndClickOn +@end example + +Alternativ können Sie ukázat a klepnout auch mit einer Kommandozeilenoption anschalten: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{Sie sollten immer ukázat a klepnout ausschalten, wenn Sie LilyPond-Dateien +verteilen wollen, damit keine Informationen über Ihre Dateistrukturen in den +Dateien gespeichert werden, was ein Sicherheitsrisiko darstellen könnte.} + + +@node Podpora textových editorů +@section Podpora textových editorů +@translationof Text editor support + +@cindex Editoren +@cindex vim +@cindex emacs +@cindex Modi, Editor +@cindex Syntaxhervorhebung +@cindex Hervorhebung, Syntax +@cindex Syntax highlight + +Verschiedene Editoren unterstützen LilyPond + +@menu +* Režim Emacs:: +* Režim Vim:: +* Jiné editoryn:: +@end menu + +@node Režim Emacs +@unnumberedsubsec Režim Emacs +@translationof Emacs mode + +Emacs hat einen @file{lilypond-mode}-Modus, der Ergänzung von Befehlen, +Einrückung, Syntaxhervorhebung, die Paarung von LilyPond-Klammern, +einfache Tastaturkürzel zur Übersetzung und das Lesen von LilyPond-Dokumentation +mit Info unterstützt. Wenn @file{lilypond-mode} nicht auf Ihrem Computer +installiert ist, siehe unten. + +Režim Emacs zur Noteneingabe und zum Kompilieren mit LilyPond bfindet sich +in dem Quellarchiv im @file{elisp}-Verzeichnis. Führen Sie @command{make +install} aus, damit es nach @var{elispdir} installiert wird. Die Datei +@file{lilypond-init.el} sollte in @var{Ladepfad}@file{/site-start.d/} gespeichert +werden oder Ihrer @file{~/.emacs} bzw. @file{~/.emacs.el} hinzugefügt werden. + +Als ein Benutzer können Sie Ihren Quellpfad (z. B. @file{~/site-lisp/}) +zum @var{Ladepfad} hinzufügen, indem Sie die (veränderte) folgende +Zeile in Ihr @file{~/.emacs} kopieren: + +@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 Režim Vim +@unnumberedsubsec Režim Vim +@translationof Vim mode + +Für @uref{http://@/www@/.vim@/.org,Vim} gibt es ein Dateiartplugin, einen +Einzugsmodus und einen Syntaxhervorhebungsmodus für LilyPond. Um alle diese +Eigenschaften zu aktivieren, erstellen (oder verändern) Sie die Datei +@file{$HOME/.vimrc}, sodass sie folgende Zeilen enthält: + +@example +filetype off +set runtimepath+=/usr/local/share/lilypond/current/vim/ +filetype on +@end example + +@noindent +Wenn LilyPond nicht in @file{/usr/local/} installiert ist, müssen Sie +den Pfad anpassen. Das wird besprochen in +@rlearning{Mehr Information}. + + +@node Jiné editory +@unnumberedsubsec Jiné editory +@translationof Other editors + +Jiné editory (sowohl Texteditoren als auch graphische Editoren) haben +Unterstützung für LilyPond, aber ihre besonderen Konfigurationsdateien werden +nicht mit LilyPond zusammen verteilt. Lesen Sie die entsprechende Dokumenation +zu näheren Fragen. Derartige Editoren finden sich unter @rweb{Leichteres Editieren}. + + +@node Převod z jiných formátů +@section Převod z jiných formátů +@translationof Converting from other formats + +LilyPond kann auch Musik aus diversen anderen Formaten importieren. +Dieses Kapitel beschreibt die dazu mit LilyPond mitgelieferten +Hilfsprogramme. Daneben existieren natürlich auch noch weitere +Programme, die Dateien für LilyPond erstellen können, wie etwa +graphische Sequenzierprogramme und XML-Konverter. Näheres dazu +findet sich auf der @uref{http://@/lilypond@/.org,Homepage} von LilyPond. + +Die im Folgenden beschriebenen Programme sind eigenständige Hilfsprogramme +und werden üblicherweise von der Kommandozeile aufgerufen. Siehe +@ref{Benutzung auf der Kommandozeile} für weitere Informationen. Wenn Sie MacOS +10.3 oder 10.4 benutzen und Probleme mit diesen Skripten (z. B. +@code{convert-ly}) haben, lesen Sie @rweb{MacOS X}. + +@knownissues +Leider haben wir nicht ausreichend viele Entwickler, um all die folgenden +Hilfsprogramme ständig zu warten. Wir stellen den aktuellen Stand zur +Verfügung, können aber leider Fehlerberichte nur selten bearbeiten. +Selbstverständlich sind Patches von Ihnen sehr willkommen! + + +@menu +* Vyvolání midi2ly:: Import von MIDI. +* Vyvolání musicxml2ly:: Import von MusicXML. +* Vyvolání abc2ly:: Import von ABC. +* Vyvolání etf2ly:: Import von (alten) Finale-Dateien. +* Jiné formáty:: +@end menu + +@node Vyvolání midi2ly +@subsection Vyvolání @command{midi2ly} +@translationof Invoking midi2ly + +@cindex MIDI + +@command{midi2ly} übersetzt eine Typ@tie{}1 MIDI-Datei in eine +Eingabedatei für LilyPond. + +MIDI (Music Instrument Digital Interface) ist ein internationaler +Standard für digitale Instrumente: Es spezifiziert die Verkabelung, +ein serielles Protokoll und ein Dateiformat. Das MIDI-Dateiformat +ist der de-facto Standard um Musik von vielen Programmen zu exportieren. +Allerdings fehlen in den MIDI-Dateien viele Ausdrucks- und +Artikulationszeichen. Dennoch kann MIDI vielfach nützlich sein, +um Musik von einem Programm zu importieren, für das kein spezielles +Hilfsprogramm den direkten Import nach LilyPond unterstützt. + +@command{midi2ly} konvertiert die MIDI-Spuren nach @rinternals{Staff} und +MIDI-Kanäle in @rinternals{Voice} Kontexte. Tonhöhen werden relativ +angegeben, Tondauern nur wenn nötig. + +MIDI-Dateien können auch direkt von einem digitalen Keyboard +aufgenommen und dann in eine @file{.ly}-Datei konvertiert werden. +Allerdings sind Musikinterpretationen von Menschen (aus gutem Grund!) +rhythmisch nicht exakt genug um die Konvertierung von MIDI nach LY +trivial zu gestalten. Wenn @command{midi2ly} mit Quantisierung +(@code{-s} und @code{-d} Kommandozeilenoptionen) aufgerufen wird, +versucht es diese Unschärfen im Zeitablauf zu korrigieren, ist +allerdings nicht sonderlich gut darin. Daher können wir diese Technik +leider nicht für die Konvertierung von MIDI-Aufnahmen empfehlen. + + +@command{midi2ly} wird von der Kommandozeile folgendermaßen aufgerufen: +@example +midi2ly [@var{Optionen}]@dots{} @var{MIDI-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Převod z jiných formátů,,převod z jiných formátů}. + +Die folgenden Kommandozeilenoptionen werden von @command{midi2ly} +unterstützt: + +@table @code +@item -a, --absolute-pitches +Gibt absolute Tonhöhen aus. + +@item -d, --duration-quant=@var{LÄNGE} +Quantisiert Tondauern zu Vielfachen von @var{LÄNGE}. + +@item -e, --explicit-durations +Gibt alle Tondauern explizit an. + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -k, --key=@var{acc}[:@var{Moll}] +Setzt die Standard-Tonart. @math{@var{acc} > 0} gibt die Anzahl der +Kreuze an, @math{@var{acc} < 0} gibt die Anzahl der Bs der Tonart an. +Eine Moll-Tonart wird durch @code{:1} angegeben. + +@item -o, --output=@var{Datei} +Die Ausgabe wird in die Datei @var{Datei}@file{.ly} geschrieben. + +@item -s, --start-quant=@var{LÄNGE} +Quantisiert den Beginn der Noten zu Vielfachen von @var{LÄNGE}. + +@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} +Erlaubt Tuplet-Dauern der Form @var{DUR}*@var{NUM}/@var{DEN}. + +@item -V, --verbose +Gibt ausführliche informative Meldungen während der Konvertierung aus. + +@item -v, --version +Gibt die Versionsnummer aus. + +@item -w, --warranty +Zeigt die Lizenzbedingungen und Urheberrechtshinweise. + +@item -x, --text-lyrics +Interpretiert alle Texte als Liedtexte. +@end table + + +@knownissues + +Überlappende Noten in einem Arpeggio werden nicht korrekt dargestellt. +Nur die erste Note wird eingelesen und konvertiert, die restlichen +werden ignoriert. Als Abhilfe können Sie alle Noten auf dieselbe +Tonlänge setzen und Phrasierungszeichen oder Pedalindikatoren +hinzufügen. + + +@node Vyvolání musicxml2ly +@subsection Vyvolání @command{muscxml2ly} +@translationof Invoking musicxml2ly + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} ist ein XML-Dialekt +zur Darstellung von Musiknotation. + +@command{musicxml2ly} wandelt eine MusicXML-Datei nach LilyPond um, +wobei sowohl die Noten, Artikulationszeichen, Struktur der Partitur, +Liedtexte etc. einer MusicXML-Datei (im @q{part-wise}-Format) in eine +@file{.ly}-Datei um. + +@command{musicxml2ly} wird von der Kommandozeile folgendermaßen aufgerufen: +@example +musicxml2ly [@var{Optionen}]@dots{} @var{XML-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Převod z jiných formátů,,převod z jiných formátů}. + +Wenn als Dateiname @file{-} angegeben wird, liest @command{musicxml2ly} +Daten direkt von der Kommandozeile ein. + +Die folgenden Kommandozeilenoptionen werden von @command{musicxml2ly} +unterstützt: + +@table @code +@item -a, --absolute +Konvertiert in absolute Tonhöhen. + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -l, --language=SPRACHE +Benutzt SPRACHE für die Notenbezeichnungen, etwa "deutsch" für deutsche +Notenbezeichnungen. + +@item --lxml +Benutzt das lxml.etree Python-Paket für die Verarbeitung von XML (benötigt weniger Speicher und Rechenleistung) + +@item --nd --no-articulation-directions +Konvertiert keine Richtungsangaben (@code{^}, @code{_} oder @code{-}) +von Artikulations- und Lautstärkebezeichnungen. + +@item --no-beaming +Konvertiert keine Informationen über die Balkensetzung aus der +MusicXML-Datei. Stattdessen wird dies LilyPond überlassen. + +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird +als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung +an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so +erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}. + +@item -r,--relative +Konvertiert in relative Tonhöhen. (Standardeinstellung) + +@item -v, --verbose +Gibt ausführliche informative Meldungen während der Konvertierung aus. + +@item --version +Gibt die Versionsnummer aus. + +@item -z,--compressed +Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen. +Dies ist die Standardeinstellung für Dateien mit der Erweiterung +@file{.xml}. +@end table + + +@node Vyvolání abc2ly +@subsection Vyvolání @command{abc2ly} +@translationof Invoking abc2ly + +@warning{Dieses Programm ist nicht unterstützt und kann aus kommenden +LilyPond-Versionen entfernt werden.} + +@cindex ABC + +ABC ist ein relativ einfaches ASCII-basierendes Musikformat und ist +dokumentiert auf der ABC-Homepage: + +@quotation +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. +@end quotation + +@command{abc2ly} konvertiert ABC-Dateien nach LilyPond und wird +von der Kommandozeile folgendermaßen aufgerufen: + +@example +abc2ly [@var{Optionen}]@dots{} @var{ABC-Datei} +@end example + +Die folgenden Kommandozeilenoptionen werden von @command{abc2ly} +unterstützt: + +@table @code +@item -b,--beams=None +Die Balkensetzung aus der ABC-Datei erhalten. +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. +@item -s,--strict +Strenge Auslegung einer erfolgreichen Konvertierung. +@item -v,--version +Gibt die Versionsnummer aus. +@end table + +Es existiert außerdem die Möglichkeit, LilyPond-Befehle für die +Konvertierung mit @command{abc2ly} gleich in der ABC-Datei anzugeben. +Wenn sich etwa in der ABC-Datei das Kommentar + +@example +%%LY voices \set autoBeaming = ##f +@end example + +@noindent +befindet, so wird der Text nach dem Schlüsselwort @q{voices} direkt +in die aktuelle Stimme in der LilyPond-Datei eingefügt. + +Ebenso bewirkt + +@example +%%LY slyrics more words +@end example + +@noindent +dass alles nach dem @q{slyrics} Schlüsselwort an der aktuellen Stelle +im Liedtext eingefügt wird. Gleichermaßen wird mit + +@example +%%LY slyrics more words +@end example + +@noindent +der Text, der auf das @qq{slylrics}-Schlüsselwort folgt, in die aktuelle +Gesangstextzeile eingefügt. + + +@knownissues + +Der ABC-Standard ist eigentlich kein wirklich vollständiger Standard. +Für komplexere Notation wie etwa Polyphonie existieren verschiedene +Konventionen. + +Mehrere Lieder in einer Datei können nicht konvertiert werden. + +ABC synchronisiert den Liedtext am Anfang jeder Zeile mit den Noten, +@command{abc2ly} macht dies nicht. + +@command{abc2ly} ignoriert die Balkensetzung in der ABC-Datei. + + +@node Vyvolání etf2ly +@subsection Vyvolání @command{etf2ly} +@translationof Invoking etf2ly + +@warning{Dieses Programm ist nicht unterstützt und kann in kommenden +LilyPond-Versionen entfernt werden.} + +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) ist ein Dateiformat, das Coda +Music Technology in älteren Versionen des Programms Finale benutzt hat. + +@command{etf2ly} konvertiert Teile einer ETF-Datei nach LilyPond +und wird von der Kommandozeile folgendermaßen aufgerufen: + +@example +etf2ly [@var{Optionen}]@dots{} @var{ETF-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Převod z jiných formátů,,převod z jiných formátů}. + +Die folgenden Kommandozeilenoptionen werden von @command{etf2ly} +unterstützt: + +@table @code +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. +@item --version +Gibt die Versionsnummer aus. +@end table + + +@knownissues + +Die Liste der Artikulationszeichen is unvollständig. Leere Takte +verwirren @command{etf2ly}. Mehrfache Vorschlagnoten werden falsch +beendet. + + +@node Jiné formáty +@subsection Jiné formáty +@translationof Other formats + +@cindex Vnější programy, LilyPond-Dateien erstellen + +LilyPond kommt nicht mit der Unterstützung für jiné formáty, aber einige +vnější programy können auch LilyPond-Dateien erstellen. Diese finden +sich unter @rweb{Leichteres Editieren}. + + + +@node Výstup LilyPondu do jiných programů +@section Výstup LilyPondu do jiných programů +@translationof LilyPond output in other programs + +Dieser Abschnitt stellt Methoden vor, wie Text und Musik auf andere +Weise kombiniert werden können als dies durch @command{lilypond-book} +automatisiert geschieht. + + +@menu +* Hodně uvozovek v dlouhém notovém zápisu:: +* Vložení not LilyPondu do OpenOffice.org:: +* Vložení not LilyPondu do jiných programů:: +@end menu + +@node Hodně uvozovek v dlouhém notovém zápisu +@subsection Hodně uvozovek v dlouhém notovém zápisu +@translationof Many quotes from a large score + +Wenn aus einer großen Partitur viele kleine Fragmente eingefügt +werden sollen, kann dazu das @q{clip systems} Feature benutzt werden. +Siehe @ruser{Notationsfragmente extrahieren}. + + +@node Vložení not LilyPondu do OpenOffice.org +@subsection Vložení not LilyPondu do OpenOffice.org +@translationof Inserting LilyPond output into OpenOffice.org + +@cindex OpenOffice.org + +Musik im LilyPond-Format kann in OpenOffice.org eingefügt werden mittels +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. + + +@node Vložení not LilyPondu do jiných programů +@subsection Vložení not LilyPondu do jiných programů +@translationof Inserting LilyPond output into other programs + +Um die Ausgabe von LilyPond in anderen Programmen einzufügen, +sollte @code{lilypond} anstelle von @code{lilypond-book} +benutzt werden. Jedes Beispiel muss +getrennt manuell erzeugt und ins Dokument eingefügt werden; +für letzteres schlagen Sie bitte im Handbuch Ihrer +Textverarbeitungs-Software nach. Die meisten Programme +unterstützen das Einfügen von Grafiken im @file{PNG}-, @file{EPS}- +oder @file{PDF}-Format. + +Um den leeren Rand um die Notenzeilen zu verringern, können folgende +Einstellungen benutzt werden: + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +Eine @file{EPS}-Datei kann mit folgendem Befehl erzeugt werden: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts Dateiname.ly +@end example + +@noindent +eine @file{PNG}-Datei mittels: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png Dateiname.ly +@end example + + +@node Nezávislé include úryvky +@section Nezávislé @code{include} úryvky +@translationof independent includes + +Einige Leute haben große (und nützliche!) Code-Abschnitte geshrieben, +die man in vielen Projekten verwenden kann. Dieser Code wird möglicherweise +auch eines Tages in LilyPond selbst integriert werden, aber bis dahin +müssen Sie ihn selber herunterladen und mit @code{\include} selber +einfügen. + + +@menu +* Artikulace MIDI:: +@end menu + + +@node Artikulace MIDI +@subsection Artikulace MIDI +@translationof MIDI articulation + +LilyPond kann benutzt werden, um MIDI-Ausgabe zu erzeugen, etwa +um hörend zu korrigieren, was man notiert hat. Jedoch werden nur +Dynamik, explizite Tempoänderungen und die Noten und Dauern selber +in der MIDI-Datei aufgenommen. + +Das @emph{articulate}-Projekt ist ein Versuch, mehr Information +in eine MIDI-Datei zu kopieren. Es funktioniert, indem man Noten, +die sich nicht unter Bögen befinden, verkürzt, um die Noten +zu @qq{artikulieren}. Die Stärke der Kürzung hängt von den +Aritkulationszeichen ab, die an die Noten gehängt werden: +Staccato halbiert den Notwert, Tenuto gibt der Note ihre gesamte Dauer +usw. Das Skript kann auch Triller und Doppelschläge in MIDI umwandeln, +und man könnte auch andere Ornamente implementieren. + +@example +@uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate} +@end example + +@knownissues + +Die größte Einschränkung ist, dass man nur die Sachen beeinflussen kann, +die man weiß: alles, was nur Textbeschriftung ist (anstelle einer Noteneigenschaft) +wird immernoch ignoriert. diff --git a/Documentation/cs/usage/lilypond-book.itely b/Documentation/cs/usage/lilypond-book.itely new file mode 100644 index 0000000000..57be64e8a8 --- /dev/null +++ b/Documentation/cs/usage/lilypond-book.itely @@ -0,0 +1,1312 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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" + +@c Translators: Pavel Fric + +@c Note: keep this node named so that `info lilypond-book' brings you here. +@node lilypond-book +@chapter Vyvolání @command{lilypond-book} +@translationof lilypond-book + +Wenn Sie in ein Dokument Grafiken Ihres Musiksatzes einfügen möchten, so +können Sie genauso vorgehen, wie Sie andere Grafiken einfügen würden: Die +Bilder werden getrennt vom Dokument im PostScript- oder PNG-Format erstellt +und können dann in @LaTeX{} oder HTML eingefügt werden. + +@command{lilypond-book} automatisiert diesen Prozess: Dieses +Programm extrahiert Musik-Schnipsel aus Ihrem Dokument, +ruft @command{lilypond} auf und fügt die resultierenden Bilder +in Ihr Dokument ein. Die Länge der Zeilen und die Schriftgroße +werden dabei Ihrem Dokument angepasst. + +@command{lilypond-book} ist ein eigenständiges Programm und wird +üblicherweise von der Kommandozeile aufgerufen. Nähere Informationen +hierzu finden sich in @ref{Benutzung auf der Kommandozeile}. Wenn Sie MacOS 10.3 +oder 10.4 benutzen und Probleme mit @code{lilypond-book} haben, lesen +Sie @rweb{MacOS X}. + +Dieses Vorgehen kann bei @LaTeX{}, HTML, Texinfo oder DocBook Dokumenten +angewendet werden. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex Dokument, Noten einfügen in +@cindex HTML, Noten in +@cindex Texinfo, Noten in +@cindex DocBook, Noten in +@cindex @LaTeX{}, Noten in + + +@menu +* Hudebněvědný text jako příklad:: +* Začlenění not do textu:: +* Volby pro hudební kousky:: +* Vyvolání lilypond-book:: +* Souborové přípony:: +* Předlohy pro lilypond-book:: +* Sdílení obsahu:: +* Náhradní způsoby míchání not a textu:: +@end menu + +@node Hudebněvědný text jako příklad +@section Hudebněvědný text jako příklad +@translationof An example of a musicological document + + +@cindex Musikwissenschaft + +Zahlreiche Texte enthalten Musikbeispiele: musikwissenschaftliche +Abhandlungen, Liederbücher oder Handbücher wie dieses. Solche +Texte können händisch erzeugt werden, indem einfach die Musikbeispiele +als Grafik (PostScript, PNG, GIF, etc.) im Textverarbeitungsprogramm +eingefügt werden. Für HTML, @LaTeX{}, Texinfo und DocBook Dokumente +existiert jedoch ein Weg, dies automatisiert durchzuführen. + +Das Programm @code{lilypond-book} extrahiert die Musikfragmente aus +dem Dokument, formatiert sie automatisiert in eine Grafik und fügt die +resultierenden Notenbeispiele dann wieder in das Dokument ein. Dies soll +hier an einem einfachen @LaTeX{}-Beispiel verdeutlicht werden. Das Beispiel +selbst enthält schon Erklärungen, sodass wir es hier nicht weiter diskutieren +müssen. + +@subheading Eingabe + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Dokumente für \verb+lilypond-book+ können Musik und Text nach Belieben +kombinieren. Zum Beispiel: + +\begin{lilypond} +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +\end{lilypond} + +Optionen für \verb+lilypond+ werden dabei in eckige Klammern gesetzt. + +\begin{lilypond}[fragment,quote,staffsize=26,verbatim] + c'4 f16 +\end{lilypond} + +Größere Beispiele können auch in einer eigenständigen Datei gespeichert +und dann mit \verb+\lilypondfile+ eingebunden werden. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(Falls nötig kann @file{screech-boink.ly} durch eine beliebige andere +@file{.ly}-Datei im selben Verzeichnis wie diese Datei ersetzt werden.) + +\end{document} +@end verbatim +@end quotation + +@subheading Verarbeitung + +Speichern Sie den obigen @LaTeX{}-Quellcode in eine Datei @file{lilybook.lytex} +und führen Sie dann in der Kommandozeile folgende Befehle aus: + +@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{..(viele Ausgabezeilen entfernt)..} +@emph{Compiling lilybook.tex...} +cd out +pdflatex lilybook +@emph{..(viele Ausgabezeilen entfernt)..} +xpdf lilybook +@emph{(Ersetzen Sie @command{xpdf} durch Ihren PDF-Betrachter)} +@end example + +Die Ausführung von @command{lilypond-book} a @command{latex} erzeugt +zahlreiche temporäre Dateien, die das Arbeitsverzeichnis unnötig +vollstopfen würden. Daher empfiehlt sich die Benutzung der @code{--output=@var{dir}} +Option, wodurch die Dateien im Unterverzeichnis @file{dir} erzeugt werden. + +Das Endresultat des obigen @LaTeX{}-Beispiels ist im nächsten Abschnitt +zu sehen.@footnote{Da dieses Handbuch mit Texinfo erzeugt wurde, +kann sich das Aussehen des Beispiels leicht von dem mit @LaTeX{} +erzeugten unterscheiden.} + +@page + +@subheading Ausgabe + +Dokumente für @command{lilypond-book} können Musik und Text nach Belieben +kombinieren. Zum Beispiel: + +@lilypond +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +@end lilypond + +Optionen für @command{lilypond} werden dabei in eckige Klammern gesetzt. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Größere Beispiele können auch in einer eigenständigen Datei gespeichert +und dann mit @code{\lilypondfile} eingebunden werden. + +@lilypondfile[quote,noindent]{screech-boink.ly} + + +@page + + + +@node Začlenění not do textu +@section Začlenění not do textu +@translationof Integrating music and text + +In diesem Abschnitt soll die Integration von LilyPond mit den +verschiedenen Dateiformaten detailliert erläutert werden. + +@menu +* LaTeX:: +* Texinfo:: +* HTML:: +* DocBook:: +@end menu + +@node LaTeX +@subsection @LaTeX{} +@translationof LaTeX + + +@LaTeX{} ist der de-facto Standard zur Publikation von wissenschaftlichen Texten +in Naturwissenschaft und Technik. Es basiert auf dem Schriftsetzer @TeX{}, +der die bestmögliche Typographie erzeugt. + +Siehe die @uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/german/, +@emph{@LaTeX{}2e-Kurzbeschreibung}} für eine Einführung in die +Benutzung von @LaTeX{}. + +Musikbeispiele können eingegeben werden als + +@example +\begin@{lilypond@}[Optionen,kommen,hierhin] + IHR LILYPOND-QUELLCODE +\end@{lilypond@} +@end example + +@noindent +oder + +@example +\lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} +@end example + +@noindent +oder + +@example +\lilypond@{ IHR LILYPOND-QUELLCODE @} +@end example + +Zusätzlich kann mit @code{\lilypondversion} die benutzte Versionsnummer +von LilyPond angezeigt werden. Der Aufruf von @command{lilypond-book} +liefert eine Datei, die dann mit @LaTeX{} weiter verarbeitet werden kann. + +Dies soll hier an einigen Beispielen gezeigt werden. Die @code{lilypond}-Umgebung + +@example +\begin@{lilypond@}[quote,fragment,staffsize=26] + c' d' e' f' g'2 g'2 +\end@{lilypond@} +@end example + +@noindent +erzeugt + +@lilypond[quote,fragment,staffsize=26] +c' d' e' f' g'2 g'2 +@end lilypond + +Die Kurzversion + +@example +\lilypond[quote,fragment,staffsize=11]@{@} +@end example + +@noindent +erzeugt + +@lilypond[quote,fragment,staffsize=11]{} + +@noindent +Innerhalb des @code{\lilypond@{@}} Befehls dürfen keine geschwungenen +Klammern @code{@{} oder @code{@}} vorkommen, weshalb dieser Befehl +nur mit der @code{fragment}-Option Sinn macht. + +Die Standardzeilenlänge wird bestimmt, indem die Angaben in der Dokumentpräambel, +also dem Teil der @LaTeX{} Datei vor dem @code{\begin@{document@}}, +analysiert werden. Der @command{lilypond-book}-Befehl sendet diese +Angaben an @LaTeX{}, um herauszufinden, wie breit der Text tatsächlich +ist. Die Breite der Notenzeilen wird dann an diese Textbreite angepasst. +Ein derartig heuristischer Algorithmus kann natürlich auch versagen, +wobei man in diesem Fall die Breite auch explizit durch die +@code{line-width} Option des @code{\lilypond@{@}} oder @code{\begin@{lilypond@}} +Befehls angeben kann. + +@cindex Titel und lilypond-book +@cindex \header in @LaTeX{}-Dokumenten + +Jedes Musikbeispiele ruft die folgenden Makros auf, wenn sie vom Benutzer +definiert wurden: + +@itemize @bullet +@item @code{\preLilyPondExample} -- wird vor der Musik aufgerufen, + +@item @code{\postLilyPondExample} -- wird nach der Musik aufgerufen, + +@item @code{\betweenLilyPondSystem[1]} -- wird zwischen den einzelnen +Systemen aufgerufen, wenn @code{lilypond-book} das Beispiel in verschiedene +PostScript Dateien getrennt hat. Dieser @LaTeX{}-Befehl muss so definiert +werden, dass er genau ein Argument erhält, nämlich die Zahl der bereits +in @LaTeX{} eingefügten Dateien dieses Beispiels. Als Standard wird einfach +ein @code{\linebreak} eingefügt. +@end itemize + +@ignore +Broken stuff. :( + +@cindex Latex, Feta Schriftart +@cindex fetachar + +Um Zeichen wie Auflösungszeichen, Kreuze, Fermaten etc. aus der Feta-Schriftart +von LilyPond in @LaTeX{} einzufügen, muss @code{\input@{titledefs@}} benutzt werden, +wodurch dann der Befehl @code{\fetachar} zur Verfügung steht. + +@example +\documentclass[a4paper]@{article@} + +\input@{titledefs@} + +\begin@{document@} + +\fetachar\fetasharp + +\end@{document@} +@end example + +Die Namen der Symbole sind in der Datei @file{feta20.tex} definiert. Sie finden +den Pfad zu dieser Datei mit dem Befehl + +@example +kpsewhich feta20.tex +@end example + +@end ignore + +@snippets + +Manchmal ist es nötig, Musikelemente wie Halte- oder Bindebögen so darzustellen, +als ob sie am Ende des Musikausschnittes noch weitergehen würden. Eine solche +Ausgabe kann erreicht werden, indem ein Zeilenumbruch in die Notenzeile +eingefügt wird und die Ausgabe der folgenden Notenzeile unterdrückt wird. + +In @LaTeX{} wird dazu der Befehl @code{\betweenLilyPondSystem} einfach derartig +programmiert, dass die Ausgabe der einzelnen Notensysteme abgebrochen wird, +sobald die gewünschte Anzahl an Systemen erreicht ist. Da +@code{\betweenLilyPondSystem} zum ersten Mal nach dem ersten System aufgerufen +wird, ist die Ausgabe nur eines Systems trivial. + +@example +\def\betweenLilyPondSystem#1@{\endinput@} + +\begin@{lilypond@}[fragment] + c'1\( e'( c'~ \break c' d) e f\) +\end@{lilypond@} +@end example + +Um eine größere Zahl an System nötig, dann muss dementsprechend eine +@TeX{}-Bedingung vor dem @code{\endinput} benutzt werden: + +@example +\def\betweenLilyPondSystem#1@{ + \ifnum##1<2\else\endinput\fi +@} +@end example + +Dieses Beispiel bricht nach genau zwei ausgegebenen Notenzeilen ab. +Für eine andere Anzahl braucht nur @q{2} durch die entsprechende +Anzahl ersetzt werden. + +Die Definition von @code{\betweenLilyPondSystem} bleibt gültig, +bis @TeX{} die aktuelle Umgebung in @LaTeX{} verlässt oder der +Befehl durch eine neue Definition überschrieben wird. +Dies kann etwa folgendermaßen in der @LaTeX{}-Datei geschehen: + +@example +\let\betweenLilyPondSystem\undefined +@end example + +Obige Definition von @code{\betweenLilyPondSystem} kann durch die +Definition eines @TeX{}-Makros auch verallgemeinert werden, + +@example +\def\onlyFirstNSystems#1@{ + \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} +@} +@end example + +@noindent +wobei diesem Makro @code{\onlyFirstNSystems} einfach die Anzahl der +gewünschten Systeme übergeben wird: + +@example +\onlyFirstNSystems@{3@} +\begin@{lilypond@}...\end@{lilypond@} +\onlyFirstNSystems@{1@} +\begin@{lilypond@}...\end@{lilypond@} +@end example + +@seealso +@command{lilypond-book} stellt auch zahlreiche Kommandozeilen-Optionen zur +Verfügung. Für eine Liste dieser Optionen und andere hilfreiche Details zur +Verarbeitung von @LaTeX{}-Dokumenten, siehe @ref{Vyvolání lilypond-book,,vyvolání lilypond-book}. + + + + +@node Texinfo +@subsection Texinfo +@translationof Texinfo + +Texinfo ist das Standard-Dokumentationsformat des GNU Projekts. Ein Beispiel +für ein Dokument im Texinfo Format ist dieses Handbuch, wobei die HTML-, PDF- und +Info-Versionen alle aus demselben Texinfo Dokument erzeugt werden. + +In der Eingabedatei wir Musik eingegeben als + +@example +@@lilypond[Optionen,kommen,hier] + IHR LILYPOND-QUELLCODE +@@end lilypond +@end example + +@noindent +oder + +@example +@@lilypond[Optionen,kommen,hier]@{ IHR LILYPOND-QUELLCODE @} +@end example + +@noindent +oder + +@example +@@lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} +@end example + +Zusätzlich kann mit @code{@@lilypondversion} die aktuelle Versionsnummer +von LilyPond angezeigt werden. + +Wenn @command{lilypond-book} eine derartige Datei verarbeitet, +wird eine Texinfo-Datei mit der Erweiterung @file{.texi} erzeugt, +die @code{@@image} Befehle für die Ausgabe nach HTML, Info und PDF +enthält. @command{lilypond-book} erzeugt die entsprechenden Grafiken +der Musikbeispiele im EPS- und PDF-Format für die Ausgabe nach PDF +und im PNG-Format für die Ausgabe nach HTML und Info. + +Hier sollen zwei einfache Beispiele gezeigt werden. Eine @code{lilypond} Umgebung + +@example +@@lilypond[fragment] +c' d' e' f' g'2 g' +@@end lilypond +@end example + +@noindent +erzeugt + +@lilypond[fragment] +c' d' e' f' g'2 g' +@end lilypond + +Die Kurzversion + +@example +@@lilypond[fragment,staffsize=11]@{@} +@end example + +@noindent +erzeugt + +@lilypond[fragment,staffsize=11]{} + +Im Gegensatz zu @LaTeX{} erzeugt @code{@@lilypond@{...@}} allerdings keine Grafik +im Fließtext, sondern setzt sie immer in einen eigenen Absatz. + + +@node HTML +@subsection HTML +@translationof HTML + +Noten werden eingegeben als + +@example + +\key c \minor c4 es g2 + +@end example + +@noindent +@command{lilypond-book} erzeugt dann daraus eine HTML-Datei mit den entsprechenden +@code{} Tags für die Musikbeispiele in jeweils einem eigenen Absatz. + +@lilypond[fragment,relative=2] +\key c \minor c4 es g2 +@end lilypond + +Für Grafiken im Fließtext kann @code{} benutzt werden, wobei +die Optionen durch einen Doppelpunkt von der Musik getrennt angegeben werden. + +@example +Musik in derselben Zeile. +@end example + +Um Dateien mit Musik einzubinden, kann folgendermaßen vorgegangen werden: + +@example +@var{Dateiname} +@end example + +Eine Liste der Optionen, die man mit @code{lilypond} oder @code{lilypondfile} +benutzen kann, siehe @ref{Volby pro hudební kousky,,volby pro hudební kousky} + +Zusätzlich gibt @code{} die aktuelle Versionsnummer +von LilyPond aus. + + +@node DocBook +@subsection DocBook +@translationof DocBook + + +Bei der Einbindung von Musik im LilyPond-Format in DocBook soll die +Konformität unseres DocBook Dokuments erhalten bleiben und damit +die Bearbeiten mit DocBook-Editoren sowie die Validierung weiter +möglich bleiben. Aus diesem Grund werden in DocBook keine eigenen Tags +wie in HTML benutzt, sondern die von den vorhandenen DocBook-Elementen +vorgegebenen Konventionen entsprechend benützt. + +@subheading Definitionen + +Für die Einbindung von LilyPond Code werden in allen Fällen die +@code{mediaobject} und @code{inlinemediaobject} Elemente benutzt, +die unsere Beispiele in einem eigenen Absatz oder im Fließtext +einfügen. Die Optionen zur Formatierung mit LilyPond werden dabei +in der @code{role} Eigenschaft des innersten Elements angegeben, +wie im nächsten Abschnitt gezeigt wird. Die DocBook Datei, die +dann von @command{lilypond-book} verarbeitet wird, sollte der Klarheit +halber die Dateierweiterung @file{.lyxml} (jedenfalls nicht +@file{.xml}) besitzen. + +@subheading Eine LilyPond-Datei einfügen + +Dies ist der einfachste Fall: Die LilyPond-Datei besitzt die Erweiterung +@file{.ly} und wird einfach als @code{imageobject} eingebettet: + +@example + + + + + +@end example + +Für das äußerste Element kann je nach Bedarf @code{mediaobject} oder +@code{inlinemediaobject} benutzt werden. + +@subheading LilyPond-Code einfügen + +Die Einbindung von LilyPond-Code direkt in der DocBook-Datei ist +durch die Benutzung von @code{programlisting} möglich, +wobei die Sprache auf @code{lilypond} gesetzt wird: + +@example + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@end example + +Das äußerste Element ist also @code{mediaobject} oder +@code{inlinemediaobject}, welches ein @code{textobject} mit dem +@code{programlisting} enthält. + +@subheading Ein DocBook-Dokument übersetzen + +Der Aufruf von @command{lilypond-book} mit der @file{.lyxml}-Datei +erzeugt ein gültiges DocBook-Dokument mit der Erweiterung @file{.xml}, +welches normal weiterverarbeitet werden kann. Bei Benutzung von +@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex} wird daraus +automatisch eine PDF-Datei erzeugt. Für die Erzeugung von HTML (HTML +Hilfe, JavaHelp, etc.) können die offiziellen DocBook XSL-Stylesheets +benutzt werden. Eventuell müssen dafür allerdings kleinere Anpassungen +vorgenommen werden. + + +@node Volby pro hudební kousky +@section Volby pro hudební kousky +@translationof Music fragment options + +Im Folgenden meint @q{LilyPond-Befehl} einen beliebigen in den vorgehenden +Abschnitten beschriebenen Befehl, der ein LilyPond-Fragment in eine Datei +einfügt und von @command{lilypond-book} verarbeitet wird. Der Einfachheit +halber werden hier alle LilyPond-Befehle in der Syntax von @LaTeX{} +dargestellt. + +Zu beachten ist, dass die Optionen eines LilyPond-Befehls von links +nach rechts verarbeitet werden. Wenn eine Option also mehrfach angegeben +wird, wird nur die letzte benutzt. + +Die folgenden Optionen können für LilyPond-Befehle benutzt werden: + +@table @code +@item staffsize=@var{ht} +Setzt die Höhe einer Notenzeile auf @var{ht}, angegeben in Punkten. + +@item ragged-right +Erzeugt Notenzeilen im Flattersatz mit natürlichem Abstand der Noten. In +anderen Worten: @code{ragged-right = ##t} wird in das Musikfragment +eingefügt. Dies ist die Standardeinstellung für den +@code{\lilypond@{@}}-Befehl, +wenn die Option @code{line-width} nicht angegeben wird. +Ebenso ist dies die Standardeinstellung für die @code{lilypond}-Umgebung, +wenn die Option @code{fragment}, aber keine Zeilenlänge +explizit angegeben ist. + +@item noragged-right +Streckt Musikfragmente mit nur einer Notenzeile auf die volle Breite, +es wird also @code{ragged-right = ##f} in das Musikfragment eingefügt. + +@item line-width +@itemx line-width=@var{Breite}\@var{Einheit} +Setzt die Breite der Notenzeilen auf @var{Breite}, gemessen in Vielfachen +der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen angegeben +werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese Option hat +nur Einfluss auf die Breite von Notenzeilen und Text im Musikfragment, nicht +jedoch auf den restlichen Text des Dokuments. + +Wird diese Option ohne einen Wert angegeben, wird die Zeilenbreite auf +einen Standardwert gesetzt, der durch einen heuristischen Algorithmus +bestimmt wird. + +Wenn die @code{line-width}-Option nicht angegeben wird, versucht +@command{lilypond-book} einen geeigneten Standardwert für alle +@code{lilypond}-Umgebungen zu finden, die die @code{ragged-right}-Option +nicht benutzen. + +@item notime +Verhindert die Ausgabe der Taktangabe am Anfang des Fragments und schaltet +Taktstriche und alle Taktangaben im Fragment ab. + +@item fragment +Bewirkt, dass @command{lilypond-book} Standardcode um das Fragment herum einfügt, sodass z. B. + +@example +c'4 +@end example + +@noindent +ohne @code{\layout}, @code{\score}, etc. eingegeben werden kann. + +@item nofragment +Verhindert das Einfügen von Standardcode um das Fragment herum. Dies ist +die Standardeinstellung, insofern ist diese Option im Normalfall unnötig. + +@item indent=@var{Einzug}\@var{Einheit} +Setzt den Einzug des ersten Notensystems auf @var{Einzug}, gemessen in +Vielfachen der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen +angegeben werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese +Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im +Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. + +@item noindent +Setzt den Einzug des ersten Notensystems auf 0. Diese +Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im +Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. Dies +ist die Standardeinstellung, insofern ist diese Option im Normalfall +unnötig. + +@item quote +Verringert die Zeilenlänge des Musikfragments um @math{2*0.4}@dmn{in} +und setzt das Fragment in einen Zitat-Block. Der Wert von @q{0.4@dmn{in}} +kann durch die @code{exampleindent} Option angepasst werden. + +@item exampleindent +Setzt den Betrag, um den das Fragment bei Benutzung der @code{quote} +Option eingerückt wird. + +@item relative +@itemx relative=@var{n} +Benutzt relative Oktavenbezeichnungen. Standardmäßig werden Noten relativ +zum mittleren C angegeben. Das optionale ganzzahlige Argument +gibt die Oktave der ersten Note an, wobei die Standardeinstellung von +@code{1} das mittlere C bedeutet. Die @code{relative} Option macht nur +Sinn in Verbindung mit der @code{fragment} Option, weshalb @code{fragment} +automatisch durch die Angabe der @code{relative} Option impliziert wird. +Eine explizite Angabe der @code{(no)fragment} Option hat keinen Effekt. +@end table + + +LilyPond benutzt zur Erzeugung seiner eigenen Dokumentation ebenfalls +@command{lilypond-book}. Zu diesem Zweck stehen noch zahlreiche +spezialisierte Optionen zur Verfügung: + +@table @code +@item verbatim +Der LilyPond-Code im LilyPond-Kommando wird zum einen benutzt, um das +Musikfragment in eine Grafik mit schönem Notensatz zu konvertieren, +andererseits aber auch wörtlich in das Dokument eingefügt. Dies +geschieht in einem @q{verbatim}-Block, gefolgt vom Text einer +möglicherweise angegebenen @code{intertext} Option@footnote{Die +@code{intertext} Option ist noch nicht implementiert.} und der +Grafik des tatsächlichen Notensatzes. Diese Option funktioniert nur +fehlerhaft, wenn @code{\lilypond@{@}} im Fließtext benutzt wird. + +Wird @code{verbatim} in Verbindung mit einem @code{lilypondfile}-Kommando +benutzt, so ist es auch möglich, nur ein Teil der Datei wörtlich einfügen +zu lassen: Wenn die eingebundene LilyPond-Datei ein Kommentar mit dem Inhalt +@samp{begin verbatim} (ohne Anführungszeichen) enthält, wird nur der +Dateiinhalt ab dieser Position eingefügt. Enthält die Datei mehrere +solche Kommentare, wirkt nur das letzte. Analog wird nur der Dateiinhalt +bis zu einem etwaigen Kommentar mit dem Inhalt @samp{end verbatim} +eingefügt. Im folgenden Beispiel wird das gesamte Musik für die +Erzeugung der Grafik im relativen Oktavenmodus interpretiert, der +wörtlich in das Dokument kopierte LilyPond-Code zeigt den @code{relative}-Befehl jedoch nicht. + +@example +\relative c' @{ % begin verbatim + c4 e2 g4 + f2 e % end verbatim +@} +@end example + +@noindent +erzeugt ein Zitat der Form + +@example + c4 e2 g4 + f2 e +@end example + +@noindent +Wenn Kommentare und Variablen im Zitat, aber nicht im Quelltext +übersetzt werden sollen, kann die Umgebungsvariable @code{LYDOC_LOCALEDIR} +auf einen Verzeichnispfad gesetzt werden. Das Verzeichnis sollte +einen Baum an @file{.mo}-Nachrichtenkatalogen beinhalten mit +@code{lilypond-doc} als Domain. + +@item addversion +(Nur innerhalb von Texinfo-Dateien.) Stellt @code{\version +@@w@{"@@version@{@}"@}} an den Beginn des Fragments der Ausgabe mit +@code{verbatim}. + +@item texidoc +(Nur innerhalb von Texinfo-Dateien.) Wird @command{lilypond} mit der +Kommandozeilenoption @option{--header=@/texidoc} für eine Datei +@file{foo.ly} und enthält die Datei ein @code{texidoc}-Feld im +@code{\header}-Block, so wird dessen Inhalt in die Datei +@file{foo.texidoc} ausgegeben. Die @code{texidoc} Option veranlasst +@code{lilypond-book}, den Inhalt dieser @file{.texidoc} Dateien innerhalb +eines Dokumentationsblocks direkt vor dem Musikfragment in das aktuelle +Dokument einzufügen. + +Enthält also die Datei @file{foo.ly} etwa den LilyPond-Code + +@example +\header @{ + texidoc = "Dieses Beispiel zeigt eine einzelne Note." +@} +@{ c'4 @} +@end example + +@noindent +und das Texinfo-Dokument @file{text.texinfo} + +@example +@@lilypondfile[texidoc]@{foo.ly@} +@end example + +@noindent +so liefert der folgende Aufruf von @code{lilypond-book} das gewünschte +Ergebnis: + +@example +lilypond-book --pdf --process="lilypond \ + -dbackend=eps --header=texidoc" test.texinfo +@end example + +Die meisten Test-Dateien (im @file{input/} Verzeichnis von LilyPond) +sind kleine @file{.ly} Dateien von genau dieser Form. + +Auch die Übersetzung dieser zusätzlichen Kommentare ist möglich: +Dazu muss das Texinfo-Dokument den Befehl @code{@@documentlanguage @var{LANG}} +und der @code{\header} Block in der Datei @file{foo.ly} +die Übersetzung im Feld @code{texidoc@var{LANG}} enthalten. Wird nun +@command{lilypond} mit der Option @option{--header=@/texidoc@var{LANG}} +aufgerufen, so wird der Inhalt der Datei @file{foo.texidoc@var{LANG}} +anstelle von @file{foo.texidoc} eingefügt. + +@item lilyquote +(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt wie die +@code{quote} Option, außer dass nur das Musikfragment (und natürlich optional der +gesamte LilyPond-Code bei Benutzung von @code{verbatim}) in den Zitatblock +eingefügt wird. Dies ist nützlich, wenn Sie ein Musikfragment zitieren möchten, +nicht aber dessen @code{texidoc} Dokumentationsblock. + +@item doctitle +(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt ähnlich wie die +@code{texidoc} Option: Wenn @command{lilypond} mit der Option +@option{--header=@/doctitle} aufgerufen wird und die Eingabedatei +@file{foo.ly} ein Feld @code{doctitle} im @code{\header}-Block enthält, +wird dessen Wert in die Datei @file{foo.doctitle} geschrieben. Wird die +@code{doctitle} Option für ein Musikfragment benutzt, so wird der Inhalt +dieser Datei, der eine einzelne Textzeile sein sollte, im Texinfo-Dokument +als @code{@@lydoctitle @var{Text}} eingefügt. @code{@@lydoctitle} muss +allerdings in Ihrem Texinfo-Dokument als Makro selbst definiert werden. +Die Übersetzung funktioniert völlig analog zu @code{texidoc}. + +@item nogettext +Nur für Texinfo-Ausgabe: Kommentare und Variablenbezeichnungen im +zitierten Quelltext des Schnipsel werden nicht übersetzt. + +@item printfilename +Wenn eine LilyPond-Datei mittels @code{\lilypondfile} und dieser Option +eingebunden wird, wird der Dateiname (ohne die Pfadangabe) unmittelbar vor +dem Musikfragment ausgegeben. In HTML-Dateien ist er außerdem ein Link +auf die LilyPond-Datei. Nur der eigentliche Name der Datei wird +ausgegeben, der Pfad wird also nicht mit angezeigt. + +@end table + + +@node Vyvolání lilypond-book +@section Vyvolání @command{lilypond-book} +@translationof Invoking lilypond-book + +@command{lilypond-book} erzeugt abhängig vom Ausgabeformat eine Datei mit +einer der folgenden Dateierweiterungen: @file{.tex}, @file{.texi}, +@file{.html} oder @file{.xml}. Alle @file{.tex}, @file{.texi} und +@file{.xml} Dateien müssen noch mit den entsprechenden Programmen (@LaTeX{}, +DocBook, etc.) weiter verarbeitet werden, um druckfähige Dateien zu erhalten. + + +@subheading Formatabhängige Anweisungen + +@subsubheading @LaTeX{} + +Es existieren zwei Methoden, Ihr @LaTeX{}-Dokument weiter zu verarbeiten, +um zu einer druck- oder publikationsfähigen Datei zu gelangen: +Zum einen die direkte Erzeugung einer PDF-Datei mit PDF@LaTeX{}, zum +anderen die Erzeugung einer DVI daraus einer PostScript-Datei mittels +@LaTeX{} und einem DVI-nach-PostScript Konverters wie @command{dvips}. +Die erste Methode ist einfacher und daher empfehlenswert.@footnote{Manchmal +kann eine Datei entweder von PDF@LaTeX{} oder von @LaTeX{} nicht korrekt +verarbeitet werden, weshalb hier beide Methoden beschrieben werden.} Welche +Methode auch immer benutzt wird, die Konvertierung zwischen PostScript und +PDF kann leicht mit Hilfsprogrammen wie @command{ps2pdf} und @command{pdf2ps} +(aus dem Ghostscript-Paket) erfolgen. + +Um eine PDF-Datei mittels PDF@LaTeX{} zu erzeugen, kann folgendermaßen +vorgegangen werden: + +@example +lilypond-book --pdf Ihre_Datei.pdftex +pdflatex Ihre_Datei.tex +@end example + +@cindex Konturschriften +@cindex Type1 Schriften +@cindex dvips +@cindex Aufruf von dvips + +Um eine PDF-Datei mittels @LaTeX{}/@command{dvips}/@command{ps2pdf} zu +erhalten, sind folgende Befehle nötig: + +@example +lilypond-book Ihre_Datei.lytex +latex Ihre_Datei.tex +dvips -Ppdf Ihre_Datei.dvi +ps2pdf Ihre_Datei.ps +@end example + +@noindent +Die @file{.dvi}-Datei, die beim Aufruf von @command{latex} erzeugt wird, +scheint keine Notenköpfe zu enthalten, was in Ordnung ist. Wenn Sie die +Datei wie beschrieben weiter verarbeiten, erscheinen die Notenköpfe korrekt +in den @file{.ps} und @file{.pdf} Dateien. + +Der Aufruf von @command{dvips} kann einige Warnungen über fehlende +Schriftarten ausgeben. Auch dies ist in Ordnung und kann ignoriert werden. + +Wenn Sie in der @LaTeX{}-Datei das Papierformat auf Querformat eingestellt +haben, vergessen Sie nicht die @code{-t landscape}-Option beim +Aufruf von @command{dvips}. + + +@subsubheading Texinfo + +Um ein von @command{lilypond-book} erzeugtes Texinfo-Dokument zu +verarbeiten, gehen Sie wie für alle anderen Texinfo-Dokumente vor: +Rufen Sie -- abhängig vom gewünschten Ausgabeformat -- eines der Programme +@command{texi2pdf}, @command{texi2dvi}, @command{makeinfo} oder +@command{texi2html} auf. + +@ifinfo +@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, und @ref{Creating an Info File, , , texinfo, GNU Texinfo}. +@end ifinfo +@ifnotinfo +Die Dokumentation von Texinfo liefert dazu nähere Informationen. +@end ifnotinfo + + +@subheading Optionen auf der Kommandozeile + +@command{lilypond-book} unterstützt die folgenden Kommandozeilenoptionen: + +@table @code +@item -f @var{Format} +@itemx --format=@var{Format} +Gibt das Format des Eingabedokuments an: @code{html}, @code{latex}, +@code{texi} (Standardeinstellung), @code{texi-html} oder @code{docbook}. +Ist diese Option nicht angegeben, versucht @command{lilypond-book} das +Format anhand des Dateinamens zu bestimmen. Im Moment bedeutet @code{texi} +praktisch dasselbe wie @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} +Leitet die Musikfragmente durch das Programm @var{filter} anstatt sie +mit Lilypond zu einer Grafik zu verarbeiten. @option{--filter} und +@option{--process} kann nicht gleichzeitig benutzt werden. Beispielaufruf: + +@example +lilypond-book --filter='convert-ly --from=2.0.0 -' Mein-Buch.tely +@end example + +@item -h +@itemx --help +Gibt eine kurze Hilfemeldung aus. + +@item -I @var{Pfad} +@itemx --include=@var{Pfad} +Fügt @var{Pfad} zu den Include-Pfaden hinzu. @command{lilypond-book} sucht +auch in allen Include-Pfaden nach bereits erstellten Grafiken für die +Musikfragmente. Wird das aktuelle Fragment gefunden und hat sich seit der +letzten Erstellung nicht geändert, wird es nicht erneut erzeugt. Bei manchen +der Programme zur Weiterverarbeitung wie etwa @command{makeinfo} oder +@command{latex} muss dieselbe @code{-I @var{Pfad}} Option angegeben werden, +damit das entsprechende Programm die Grafiken ebenso findet. + +@item -o @var{Verzeichnis} +@itemx --output=@var{Verzeichnis} +Erzeugt die Ausgabedateien in @var{Verzeichnis}. Der Aufruf von +@command{lilypond-book} erzeugt zahlreiche kleine Dateien, die von +LilyPond, @command{latex}, @command{makeinfo} etc. dann weiter benützt +werden. Um zu vermeiden, dass das Quellenverzeichnis durch diese +Dateien unübersichtlich wird, kann die @option{--output} Option benutzt +werden. Vor dem Aufruf von @command{latex} oder @command{makeinfo} +sollten Sie in dieses Verzeichnis wechseln. + +@example +lilypond-book --output=out IhreDatei.lytex +cd out +... +@end example + +@itemx --skip-lily-check +Nicht mit einer Fehlermeldung abbrechen, wenn keine Ausgabe von LilyPond +gefunden wird. Dies wird benutzt für Dokumentation ohne Grafiken. + +@itemx --skip-png-check +Nicht mit einer Fehlermeldung abbrechen, wenn für die EPS-Dateien keine +PNG-Grafiken gefunden werden. Dies wird benutzt für Dokumentation ohne +Grafiken. + +@itemx --lily-output-dir=@var{Verzeichnis} +Schreibt @file{lily-XXX} Dateien nach @var{Verzeichnis} und erzeugt +im mit @code{--output} angegebenen Verzeichnis Verknüpfungen darauf. +Diese Option ist nützlich, um Zeit zu sparen, wenn Dokumente in +verschiedenen Verzeichnissen viele identische Musikfragmente +enthalten. + +@itemx --info-images-dir=@var{Verzeichnis} +Formatiert die Texinfo-Ausgabe dergestalt, dass Info in @var{Verzeichnis} +nach den Grafiken zu den Musikfragmenten sucht. + +@itemx --latex-program=@var{Programm} +Führt @command{Programm} anstelle von @command{latex} aus. Dies ist +nützlichen, wenn das Dokument mit einer anderen @LaTeX{}-Variante +wie etwa @command{xelatex} verarbeitet werden soll. + +@itemx --left-padding=@var{Einrückung} +Fügt @var{Einrückung} als zusätzlichen Einzug in die EPS-Box ein. +@var{Einrückung} wird in Millimetern angegeben, die Standardeinstellung +ist 3.0 Millimeter. Diese Option kann benutzt werden, wenn die Notenzeilen +über den Rand des Dokuments hinausstehen. + +Die Breite eines eng ausgeschnittenen Notensystems kann variieren +aufgrund von Notationselementen, die über den linken Rand hinausstehen, +wie etwa Taktzahlen und Bezeichnungen der Instrumente. Diese Option +verkürzt die Notenzeile und verschiebt sie um denselben Betrag nach +rechts. + + +@item -P @var{Befehl} +@itemx --process=@var{Befehl} +Verarbeitet LilyPond-Fragmente mit @var{Befehl} anstelle des +Standardbefehls @code{lilypond}. @code{--filter} und @code{--process} +können nicht mit dieser Option benutzt werden. + +@item --pdf +Erzeugt PDF-Dateien mit PDF@LaTeX{}. + +@item -V +@itemx --verbose +Gibt ausführliche informative Meldungen aus. + +@item -v +@itemx --version +Gibt die Versionsnummer aus. +@end table + +@knownissues + +Der Texinfo-Befehl @code{@@pagesizes} wird ignoriert. Ebenso werden +@LaTeX{}-Befehle ignoriert, die den Seitenrand oder die Zeilenlänge +nach der Dokumentpräambel verändern. + +Nur der erste @code{\score}-Block eines LilyPond-Fragments wird verarbeitet. + + +@node Souborové přípony +@section Souborové přípony +@translationof Filename extensions + +Für die Eingabedatei kann zwar jede beliebige Dateinamenserweiterung benutzt +werden, allerdings muss bei Verwendung einer nicht bekannten Erweiterung +das Ausgabeformat explizit an @command{lilypond-book} angegeben werden. +Details dazu finden sich im Abschnitt @ref{Vyvolání lilypond-book}. +Wird eine bekannte Erweiterung benutzt, wählt @command{lilypond-book} +automatisch das richtige Ausgabeformat basierend auf der Erweiterung der +Eingabedatei: + +@quotation +@multitable @columnfractions .2 .5 +@item @strong{Erweiterung} @tab @strong{Ausgabeformat} +@item +@item @file{.html} @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 + +Wird dieselbe Erweiterung für die Eingabedatei wie für die Ausgabedatei +benutzt und befindet sich die Eingabedatei im aktuellen Arbeitsverzeichnis +von @command{lilypond-book}, muss die @code{--output} Option für +@command{lilypond-book} benutzt werden. Anderenfalls würde +@command{lilypond-book} ja die Eingabedatei überschreiben, weshalb das +Programm in diesem Fall mit einer Fehlermeldung wie @qq{Fehler: Ausgabe +würde Eingabedatei überschreiben; verwenden Sie --output.} abbricht. + + +@node Předlohy pro lilypond-book +@section Předlohy pro @command{lilypond-book} +@translationof lilypond-book templates + +Diese Vorlagen sollen mit @code{lilypond-book} benutzt werden. Wenn Sie sich +mit dem Programm nicht auskennen, lesen Sie bitte +@ref{lilypond-book}. + +@subsection LaTeX + +Sie können LilyPond-Fragmente in ein LaTeX-Dokument einfügen: + +@example +\documentclass[]@{article@} + +\begin@{document@} + +Normaler LaTeX-Text. + +\begin@{lilypond@} +\relative c'' @{ + a4 b c d +@} +\end@{lilypond@} + +Weiterer LaTeX-Text und Optionen in eckigen Klammern. + +\begin@{lilypond@}[fragment,relative=2,quote,staffsize=26,verbatim] +d4 c b a +\end@{lilypond@} +\end@{document@} +@end example + +@subsection Texinfo + +LilyPond-Fragmente können in Texinfo-Dokumente eingefügt werden: dieses gesamte +Handbuch wurde in Texinfo geschrieben. + +@example +\input texinfo @c -*-texinfo-*- +@@node Top +@@top + +Texinfo-Text + +@@lilypond +\relative c' @{ + a4 b c d +@} +@@end lilypond + +Weiterer Texinfo-Text und Optionen in Klammern. + +@@lilypond[verbatim,fragment,ragged-right] +d4 c b a +@@end lilypond + +@@bye +@end example + + +@subsection html + +@example + + + + + +

+Dokumente für lilypond-book können Noten und Text frei kombinieren. Zum +Beispiel + +\relative c'' @{ + a4 b c d +@} + +

+ +

+Noch etwas LilyPond, mit Optionen: + + +a4 b c d + +

+ + + + + +@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. +\end{document} +@end verbatim + + +@node Sdílení obsahu +@section Sdílení obsahu +@translationof Sharing the table of contents + +Diese Funktionen existieren schon im OrchestraLily-Paket: + +@example +@url{http://repo.or.cz/w/orchestrallily.git} +@end example + +Um den Text flexibler behandeln zu können, bevorzugen manche Benutzer es, +das Inhaltsverzeichnis aus LilyPond zu exportieren und dann mit +@LaTeX{} einzulesen. + +@subsubheading Das Ihaltsverzeichnis (ToC) aus LilyPond exportieren + +Hier wird angenommen, dass in Ihrer Partitur mehrere Sätze vorkommen, die +sich alle in der selben LilyPond-Datei befinden. + +@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 Das Inhaltsverzeichnis in LaTeX importieren + +In der LaTeX-Datei sollte folgendes enthalten: + +@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 +wobei @code{\includescore} wiefolgt definiert ist: + +@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 Náhradní způsoby míchání not a textu +@section Náhradní způsoby míchání not a textu +@translationof Alternate methods of mixing text and music + +Andere Methoden, Text und Noten miteinander zu kombinieren (ohne +@command{lilypond-book} zu benutzen) werden beschrieben in +@ref{LilyPond-Ausgabe in anderen Programmen}. diff --git a/Documentation/cs/usage/running.itely b/Documentation/cs/usage/running.itely new file mode 100644 index 0000000000..9c70ff117e --- /dev/null +++ b/Documentation/cs/usage/running.itely @@ -0,0 +1,878 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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" + +@c Translators: Pavel Fric + +@node Spouštíme lilypond +@chapter Spouštíme @command{lilypond} +@translationof Running lilypond + +Dieses Kapitel behandelt die technischen Details, wie Lilypond ausgeführt werden kann. + + +@menu +* Běžné používání programu:: +* Použití v příkazovém řádku:: +* Chybová hlášení:: +* Častá chybová hlášení:: +@end menu + +@node Běžné používání programu +@section Běžné používání programu +@translationof Normal usage + +Die meisten Benutzer führen LilyPond von einer graphischen Benutzeroberfläche +aus. Siehe @rlearning{Übung}, falls Sie dies nicht bereits getan haben. Wenn +Sie einen alternativen Editor für Ihre LilyPond-Dateien verwenden, lesen Sie +bitte die Dokumentation dieses Editors. + + +@node Použití v příkazovém řádku +@section Použití v příkazovém řádku +@translationof Command-line usage + +Dieser Abschnitt enthält zusätzliche Informationen, wie Sie LilyPond +von der Kommandozeile ausführen können. Dies kann erforderlich sein, +um etwa zusätzliche Optionen an das Programm zu übergeben. Außerdem +sind einige Zusatzprogramme (wie etwa @code{midi2ly}) nur von der +Kommandozeile verfügbar. + +Unter @q{Kommandozeile} verstehen wir die Kommandozeile des jeweiligen +Betriebssystems. Windows Benutzern ist sie vielleicht eher unter den +englischen Begriffen @q{DOS shell} oder @q{command shell} bekannt. +MacOS@tie{}X Benutzer kennen sie eher unter @q{Terminal} oder @q{Konsole}. +Einige zusätzliche Einrichtungsarbeiten werden unter MacOS@tie{}X, +siehe @rweb{MacOS X}. + +Wie die Kommandozeile im jeweiligen Betriebssystem benutzt werden kann, +soll in diesem Handbuch nicht näher beschrieben werden. Sehen Sie bitte +im Handbuch Ihres Betriebssystems nach oder informieren Sie sich im +Internet, wenn Sie mit der Kommandozeile nicht vertraut sind. + + +@menu +* Vyvolání lilypondu:: +* Volby lilypondu v příkazovém řádku:: +* Proměnné prostředí:: +* LilyPond v žaláři chroot:: +@end menu + +@node Vyvolání lilypond +@subsection Vyvolání @command{lilypond} +@translationof Invoking lilypond + +@cindex @command{lilypond} aufrufen +@cindex Kommandozeilen-Optionen für @command{lilypond} +@cindex Optionen an der Kommandozeile + +Das @command{lilypond} Programm kann folgendermaßen von der Kommandozeile +aufgerufen werden. + +@example +lilypond [@var{Option}]@dots{} @var{Dateiname}@dots{} +@end example + + +Wird ein @file{Dateiname} ohne Erweiterung angegeben, so wird @file{.ly} als +Standarderweiterung für LilyPond-Dateien benutzt. Um Daten von +@code{stdin} einzulesen, benutzen Sie einfach einen Bindestrich (@code{-}) +als @var{Dateiname}. + +Wenn Lilypond die Datei @file{Dateiname.ly} verarbeitet, werden daraus +die Dateien @file{Dateiname.ps} und @file{Dateiname.pdf} erzeugt. +Es können an @code{lilypond} auch mehrere @file{.ly} Dateien übergeben +werden, die dann einzeln und voneinander unabhängig abgearbeitet +werden.@footnote{Der Zustand von GUILE wird allerdings nicht nach +jeder Datei zurückgesetzt, sodass Achtung geboten ist, wenn in einer +Datei globale Änderungen von Scheme aus durchgeführt werden.} + +Falls @file{Dateiname.ly} mehr als eine @code{\book}-Umgebung enthält, +werden die weiteren Stücke in durchnummerierte Dateien der Form +@file{Dateiname-1.pdf} ausgegeben. Zusätzlich wird der Wert der +Variable @code{output-suffix} zwischen den ursprünglichen Dateinamen +und der Zahl eingefügt. Eine Lilypond-Datei @file{Dateiname.ly} mit dem Inhalt + +@example +#(define output-suffix "Geige") +\score @{ @dots{} @} +#(define output-suffix "Cello") +\score @{ @dots{} @} +@end example + +@noindent +erzeugt daher die Dateien @var{Dateiname}@file{-Geige.pdf} und +@var{Dateiname}@file{-Cello-1.pdf}. + + + +@unnumberedsubsubsec Häufige Kommandozeilenbefehle + +Wenn Ihre Kommandozeile normale Weiterleitungen unterstützt, können +Sie es nützlich finden, mit folgenden Befehlen die Ausgabe der +Kommandozeile in eine Datei zu leiten: + +@itemize + +@item +@code{lilypond file.ly 1>stdout.log} um normale Ausgabe zu erhalten +@item +@code{lilypond file.ly 2>stderr.log} um chybová hlášení zu erhalten + +@item +@code{lilypond file.ly &>all.log} um alle Meldungen zu erhalten + +@end itemize + +Wenden Sie sich an die Dokumentation für Ihre Kommandozeile, um +zu sehen, ob derartige Optionen unterstützt werden oder die Syntax +unterschiedlich ist. Beachten Sie, dass es sich hier um +reine Verwaltungsprogramme handelt, die nichts mit LilyPond zu tun +haben. + + +@node Volby v příkazovém řádku pro lilypond +@subsection Volby v příkazovém řádku pro @command{lilypond} +@translationof Command line options for lilypond + +Die folgenden Kommandozeilenoptionen werden von @command{lilypond} unterstützt: + +@cindex @command{lilypond} auf der Kommandozeile +@cindex Kommandozeile, @command{lilypond} aufrufen +@cindex Optionen, Kommandozeile +@cindex Terminal, @command{lilypond} aufrufen + +@table @code + +@item -e,--evaluate=@var{expr} +Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien +gelesen und interpretiert werden. +Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke +werden nacheinander ausgewertet. + +Da der Ausdruck im @code{guile-user} Modul ausgewertet wird, ist bei der +Definitionen innerhalb von @var{expr} folgendes Vorgehen nötig. An der +Kommandozeile wird z.B. @code{a} im @code{guile-user} Modul definiert: + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +Am Beginn der @file{.ly}-Datei muss dann das @code{guile-user} Modul noch geladen werden, bevor die Definition von @var{a} verfügbar ist: + +@example +#(use-modules (guile-user)) +@end example + + +@item -f,--format=@var{Format} +Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind +@code{svg}, @code{ps}, @code{pdf} und @code{png}. + +Beispiel: @code{lilypond -fpng @var{Dateiname}.ly} + + + +@item -d,--define-default=@var{Variable}=@var{Wert} +Damit wird die interne Programmoption @var{Variable} auf den Scheme-Wert +@var{Wert} gesetzt. Wird kein @var{Wert} angegeben, so wird @var{#t} benutzt. +Um eine Option auszuschalten, kann der Präfix @code{no-} dem Namen +@var{Variable} der Variable vorangestellt werden. So ist etwa + +@cindex Point and Click, Kommandozeile + +@example +-dno-point-and-click +@end example + +@noindent +dasselbe wie +@example +-dpoint-and-click='#f' +@end example + +Hier sind ein paar interessante Optionen: + +@cindex Hilfe, Kommandozeile + +@table @samp +@item help +Die Ausführung von @code{lilypond -dhelp} zeigt alle verfügbaren @code{-d} +Optionen. + +@cindex Papierformat, Kommandozeile + +@item paper-size +Setzt das Standard-Papierformat, +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Die Zeichenkette, die das Format angibt, muss in Anführungszeichen mit Backslash +( @code{\"} ) stehen. + +@cindex sicher, Kommandozeile +@cindex safe, Kommandozeile + +@item safe +Vertraut der @file{.ly} Datei nicht. + +Wenn LilyPond über einen Webserver verfügbar gemacht wird, @b{MUSS} unbedingt +eine die Optionen @code{--safe} oder @code{--jail} angegeben werden. +Die @code{--safe} Option verhindert, dass in der @file{.ly}-Datei angegebener +Scheme-Code das System gefährden kann, wie etwa in folgendem Beispiel: + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +Mit der @code{-dsafe} Option werden alle Scheme-Ausdrücke einem speziellen +sicheren Modus ausgewertet. Dieser Modus ist vom GUILE @file{safe-r5rs} Modul +abgeleitet und fügt noch zahlreiche weitere erlaubte Funktionen der +LilyPond Programm-Schnittstelle hinzu. Diese Funktionen sind in +@file{scm/safe-lily.scm} angegeben. + +Zusätzliche verbietet der sichere Modus auch @code{\include} Befehle. + +Im sicheren Modus ist es nicht möglich, LilyPond-Variablen nach Scheme +zu exportieren. + +@code{-dsafe} erkennt jedoch @emph{KEINE} Überbeanspruchung der verfügbaren +Ressourcen. In diesem Modus ist es also trotzdem möglich, dass LilyPond in einer +Endlosschleife hängt, z.B. wenn zyklische Datenstrukturen an das Backend +übergeben werden. Wenn LilyPond also auf einem öffentlich zugänglichen +Webserver verfügbar gemacht wird, sollte der Prozess sowohl in der CPU- +als auch in der Speichernutzung limitiert werden. + +Der sichere Modus verhindert auch, dass zahlreiche nützliche +Musikfragmente von LilyPond verarbeitet werden. Die @code{--jail} Option ist +eine sicherere Alternative, benötigt allerdings auch mehr Aufwand zur +Einrichtung. + +@cindex Ausgabeformat, Definition von + +@item backend +Gibt an, welches Ausgabeformat das LilyPond Backend benutzt. Mögliche Werte +für diese Option sind: + +@table @code +@item ps +PostScript-Ausgabeformat. + +@cindex PostScript Ausgabeformat + +Postscript-Dateien enthalten auch TTF-, Type1- und OTF-Schriften. Allerdings +wird die gesamte Schriftart eingefügt und nicht nur die benötigten Zeichen. +Vor allem wenn nicht-westliche Zeichensätze benutzt werden, kann dies zu sehr +großen Dateien führen. + +@cindex PostScript Ausgabeformat +@cindex EPS (encapsulated PostScript) + +@item eps +Erzeugt @q{encapsulated PostScript} (EPS). Jede Seite (oder jedes System) wird +als eigene @file{EPS}-Datei ausgegeben, inklusive Schriftarten. Außerdem wird +eine Datei mit allen Seiten (bzw. Systemen) und Schriftarten erzeugt. + +Dies ist die Standardeinstellung von @command{lilypond-book}. + +@cindex SVG (scalable vector graphics) +@cindex Vektorgraphik (SVG) + +@item svg + +SVG-Ausgabe (Scalable Vector Graphics). + +Hiermit wird eine einzelne SVG-Datei ohne eingebundene Schriften +für jede Seite der Partitur erstellt. Es wird empfohlen, Century +Schoolbook-Schriftarten zu installieren, die auch in der LilyPond-Installation +enthalten sind, um optimales Rendern zu erhalten. Unter UNIX können +diese Schriftarten einfach aus dem LilyPond-Verzeichnis (normalerweise +@file{/usr/share/lilypond/@/VERSION/fonts/otf/}) nach @file{~/.fonts} +kopiert werden. Die SVG-Ausgabe sollte mit allen SVG-Editoren oder +Betrachtungsprogrammen kompatibel sein. + +@cindex Scheme-dump + +@item scm +gibt die rohen Scheme-basierenden Zeichenbefehle aus, wie sie intern von +LilyPond benutzt werden. + +@cindex Scheme dump + +@item null +Keine Partitur wird ausgegeben, hat gleichen Effekt wie @code{-dno-print-pages}. + +@end table + +Beispiel: @code{lilypond -dbackend=svg @var{Dateiname}.ly} + +@cindex Vorschau + +@item preview +Erzeugt eine Ausgabedatei, die nur die Titelzeilen und das erste System +enthält. Wenn @code{\bookpart}-Umgebungen benutzt werden, erscheinen die +Titel und ersten Systeme jedes @code{\bookpart}-Abschnitts in der Datei. +Die Backends @code{ps}, @code{eps} und @code{svg} unterstützen diese Option. + +@item print-pages +Erzeugt vollständige Seiten (Standardeinstellung). @code{-dno-print-pages} +ist in Verbindung mit @code{-dpreview} nützlich. + +@end table + + + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -H,--header=@var{FELD} +Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei +@file{Dateiname.@var{FELD}} aus. + +@item --include, -I=@var{Verzeichnis} +Fügt @var{Verzeichnis} zur Liste der Suchpfade hinzu. + +@cindex Dateisuche +@cindex Suchpfad + +Mehrere -I-Optionen können angegeben werden. Die Suche beginnt mit dem +ersten definierten Verzeichnis und setzt in den weiteren Verzeichnissen +fort, wenn die gesuchte Datei nicht in dem Verzeichnis gefunden wird. + +@item -i,--init=@var{Initialisierungsdatei} +Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der +Standardwert ist @file{init.ly}. + +@cindex Verzeichnis, Ausgabe speichern in +@cindex Ausgabedateiname + +@item -o,--output=@var{DATEI} +Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei +@var{DATEI}. Wenn ein Verzeichnis mit dem Namen existiert, werden die Ausgabedateien +in dieses Verzeichnis gespeichert, wobei der Dateiname der Eingabedatei +benutzt wird. Die entsprechende Dateinamenserweiterung wird angehängt (z.B. +@code{.pdf} für pdf). + +@cindex PostScript-Ausgabe + +@item --ps +Erzeugt PostScript. + +@cindex PNG-Ausgabe +@cindex Portable Network Graphics (PNG) + +@item --png +Erzeugt eine Grafik-Datei im PNG-Format von jeder Seite. Diese Option +impliziert auch @code{--ps}. Die Auflösung in DPI der Grafik kann festgelegt +werden durch +@example +-dresolution=110 +@end example + +@cindex PDF-Ausgabe +@cindex Portable Document Format (PDF) + +@item --pdf +Erzeugt PDF-Dateien. Dies impliziert @code{--ps}. + +@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis} +Führt @command{lilypond} in einem chroot-Jail aus. + +Die @code{--jail} Option ist eine flexiblere Alternative zu @code{--safe}, wenn +LilyPond über das Internet verfügbar gemacht wird oder LilyPond-Quelldateien +von Dritten automatisch verarbeitet werden. + +Sie funktioniert dergestalt, dass das Wurzelverzeichnis von +@command{lilypond} auf @var{Jail-Verzeichnis} gesetzt wird, bevor die +tatsächliche Kompilierung der @file{.ly}-Datei beginnt. Der Benutzer und die Gruppe +werden auf die angegebenen Werte gesetzt und das aktuelle Arbeitsverzeichnis +wird ebenfalls auf den angegebenen Wert @var{Arbeitsverzeichnis} gesetzt. +Diese Einstellungen garantieren (zumindest in der Theorie), dass es nicht +möglich ist, aus dem Jail auszubrechen. Damit @code{--jail} funktioniert, muss +@command{lilypond} allerdings als root ausgeführt werden, was normalerweise +auf sichere Art mit dem Kommando @command{sudo} erreicht werden kann. + +Das Jail-Verzeichnis zu erstellen ist etwas heikel, da LilyPond alle zur +Ausführung nötigen Bibliotheken und Dateien @emph{innerhalb des +Jail-Verzeichnisses} finden muss. Ein typisches Setup besteht aus folgenden +Punkten: + +@table @asis +@item Erstellung eines getrennten Dateisystems +Ein eigenes Dateisystem muss für LilyPond erstellt werden, sodass es mit +sicheren Einstellungen wie @code{noexec}, @code{nodev} und @code{nosuid} +eingebunden werden kann. Damit ist es unmöglich, Programme von diesem +Dateisystem auszuführen oder direkt auf eine Hardware-Schnittstelle +zuzugreifen. Wenn Sie keine eigene Partition erstellen möchten, können Sie +auch eine Datei der entsprechenden Größe erstellen und sie als @q{loop}-Gerät +einbinden. Ein getrenntes Dateisystem garantiert auch, dass LilyPond nicht +mehr Festplattenspeicher benutzt als erlaubt. + +@item Erstellung eines eigenen Benutzerkontos +Es sollte ein eigener Benutzer und eine eigene Gruppe (z. B. +@code{lily}/@code{lily}) mit geringen Rechten für die Ausführung von LilyPond +innerhalb des Jails benutzt werden. Nur ein einziges Verzeichnis des Jails sollte +für den Benutzer schreibbar sein und als @var{Arbeitsverzeichnis} an +@code{lilypond} übergeben werden. + +@item Einrichtung des Jails +LilyPond muss zahlreiche Dateien für die Ausführung einlesen. All diese +Dateien müssen in das Jail-Verzeichnis kopiert werden (mit denselben Pfaden +wie im tatsächlichen Wurzel-Dateisystem). Die gesamte LilyPond-Installation +(typischerweise @file{/usr/share/lilypond}) sollte kopiert werden. + +Falls Probleme auftreten, ist es am einfachsten, Lilypond mittels +@command{strace} zu starten, wodurch Sie relativ leicht feststellen können, +welche Dateien im Jail noch fehlen. + +@item Ausführung von LilyPond +In einem mit @code{noexec} eingebundenen Jail ist es nicht möglich, externe +Programme auszuführen. Daher muss LilyPond auf eine Art gestartet werden, +die keine weitere Ausführung von Programmen benötigt. Wie bereits erwähnt +muss LilyPond mit Administrator-Rechten gestartet werden (die es allerdings +sofort wieder abgibt), beispielsweise mittels @command{sudo}. Außerdem +ist es eine gute Idee, die LilyPond zur Verfügung stehende CPU-Zeit zu +limitieren (z. B. mit @command{ulimit -t}) und -- falls das Betriebssystem +dies unterstützt -- auch den zur Verfügung stehenden Hauptspeicher. +@end table + + +@item -v,--version +Gibt die Versionsnummer aus. + +@item -V,--verbose +Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade +aller gelesenen Dateien sowie Informationen über die Laufzeit. + +@item -w,--warranty +Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht +@strong{KEINERLEI GARANTIE}!) +@end table + + +@node Proměnné prostředí +@subsection Proměnné prostředí +@translationof Environment variables + +@cindex LANG +@cindex LILYPOND_DATADIR +@cindex Proměnné, prostředí +@cindex Proměnné prostředí + +@command{lilypond} erkennt und benützt die folgenden proměnné prostředí: +@table @code +@item LILYPOND_DATADIR +Diese Variable gibt das Verzeichnis an, wo Lilypond seine eigenen Dateien, +Meldungen und Übersetzungen finden kann. Dieses Verzeichnis sollte +Unterverzeichnisse @file{ly/}, @file{ps/}, @file{tex/}, etc. beinhalten. + +@item LANG +Gibt die Sprache an, in der Warnungen und chybová hlášení ausgegeben werden. + +@item LILYPOND_GC_YIELD +Mit dieser Variable (mit Werten zwischen 0 und 100) kann die Feinabstimmung +zwischen dem Bedarf an Hauptspeicher und Rechenleistung bei der Ausführung +von LilyPond durchgeführt werden. Bei höheren Werten benutzt LilyPond +mehr Hauptspeicher, benötigt aber weniger Prozessor-Leistung. Bei +niedrigeren Werten wird mehr Prozessor-Zeit, dafür weniger Hauptspeicher +benötigt. Voreinstellung ist ein Wert von @code{70}. + +@end table + + + +@node LilyPond v žaláři chroot +@unnumberedsubsec LilyPond v žaláři chroot +@translationof LilyPond in chroot jail + +Einen Server einzurichten, der LilyPond in einem chroot-Kerker bedient, ist +recht kompliziert. Die einzelnen Schritten finden sich unten aufgeliestet. +Beispiele sind für Ubuntu Linux und erfordern evtl. die Benutzung von +@code{sudo} an den entsprechenden Stellen. + +@itemize + +@item Installieren Sie die nötigen Pakete: LilyPond, GhostScript und ImageMagick. + +@item Erstellen Sie einen neuen Benutzer mit dem Namen @code{lily}: + +@example +adduser lily +@end example + +@noindent +Hierdurch wird auch eine Gruppe @code{lily} und ein Heimat-Ordner +@code{/home/lily} für den neuen Benutzer erstellt. + +@item Im Heimat-Ordner des Benutzers @code{lily} erstellen Sie eine Datei, die als +eigenes Dateisystem eingesetzt wird: + +@example +dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000 +@end example + +@noindent +In diesem Beispiel wird eine 200-MB-Datei als Kerker-Dateisystem erstellt. + +@item Erstellen Sie ein loop device, erstellen Sie ein Dateisystem und +mounten Sie es, dann erstellen Sie dort einen Ordner, in dem der Benutzer +@code{lily} Schreibrechte hat: + +@example +mkdir /mnt/lilyloop +losetup /dev/loop0 /home/lily/loopfile +mkfs -t ext3 /dev/loop0 200000 +mount -t ext3 /dev/loop0 /mnt/lilyloop +mkdir /mnt/lilyloop/lilyhome +chown lily /mnt/lilyloop/lilyhome +@end example + +@item In der Konfiguration des Servers ist der Kerker (JAIL) @code{/mnt/lilyloop} +und das Verzeichnis (DIR) @code{/lilyhome}. + +@item Erstellen Sie einen großen Verzeichnisbaum in dem Kerker, indem Sie die +notwendigen Dateien dorthin kopiert, wie das Beispielskript unten zeigt. + +Sie könne @code{sed} benutzen, um die notwendigen Kopierbefehle für ein +bestimmtes Programm zu erstellen: + +@example +for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ + do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ + cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ + \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done +@end example + +@end itemize + +@subheading Beispiel-Skript für 32-bit Ubuntu 8.04 + +@example +#!/bin/sh +## defaults set here + +username=lily +home=/home +loopdevice=/dev/loop0 +jaildir=/mnt/lilyloop +# the prefix (without the leading slash!) +lilyprefix=usr/local +# the directory where lilypond is installed on the system +lilydir=/$lilyprefix/lilypond/ + +userhome=$home/$username +loopfile=$userhome/loopfile +adduser $username +dd if=/dev/zero of=$loopfile bs=1k count=200000 +mkdir $jaildir +losetup $loopdevice $loopfile +mkfs -t ext3 $loopdevice 200000 +mount -t ext3 $loopdevice $jaildir +mkdir $jaildir/lilyhome +chown $username $jaildir/lilyhome +cd $jaildir + +mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp +chmod a+w tmp + +cp -r -L $lilydir $lilyprefix +cp -L /bin/sh /bin/rm bin +cp -L /usr/bin/convert /usr/bin/gs usr/bin +cp -L /usr/share/fonts/truetype usr/share/fonts + +# Now the library copying magic +for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ + "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ + \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ + 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ + | sed '/.*=>.*/d'; done | sh -s + +# The shared files for ghostscript... + cp -L -r /usr/share/ghostscript usr/share +# The shared files for ImageMagick + cp -L -r /usr/lib/ImageMagick* usr/lib + +### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, +### you should be able to run: +### Note that /$lilyprefix/bin/lilypond is a script, which sets the +### LD_LIBRARY_PATH - this is crucial + /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly +@end example + + +@node Chybová hlášení +@section Chybová hlášení +@translationof Error messages + +@cindex error messages +@cindex Chybová hlášení + +Während der Verarbeitung einer Dateien können diverse Meldungen an der +Kommandozeile auftreten: + +@table @emph + +@item Warnung (Warning) +@cindex Warnung +Irgendetwas ist verdächtig. Wenn Sie etwas Ungewöhnliches in Ihrer +Datei durchführen, dann werden Sie die Meldung verstehen und können +sie gegebenenfalls ignorieren. Im Normalfall jedoch bedeutet eine +Warnung, dass mit Ihrer Datei etwas nicht stimmt, LilyPond jedoch +trotzdem versucht, die Datei soweit wie möglich korrekt zu übersetzen. + +@item Fehler (Error) +@cindex Fehler +Irgendetwas stimmt definitiv nicht. Der aktuelle Bearbeitungsschritt +(Einlesen, Interpretieren oder Formatieren der Datei) wird noch fertig +ausgeführt, danach bricht die Bearbeitung aber ab. + +@item Fataler Fehler (Fatal error) +@cindex Fataler Fehler +Irgendetwas stimmt definitiv nicht und LilyPond kann nicht weiter +ausgeführt werden. Dies ist nur sehr selten der Fall, meist sind +die Schriftarten nicht korrekt installiert. + +@item Scheme Fehler (Scheme error) +@cindex Fehlerprotokoll, Scheme +@cindex Scheme Fehler +Fehler, die während der Ausführung von Scheme-Code auftreten, werden +vom Scheme-Interpreter aufgefangen und an der Kommandozeile ausgegeben. +Wenn Sie LilyPond mit der @code{--verbose} Option (auch @code{-V}) +ausführen, wird der sogenannte @q{Call trace} ausgegeben, der die +aufgerufenen Funktionen zur Zeit des Fehlers angibt. + +@item Programmierfehler (Programming error) +@cindex Programmierfehler +Eine interne Inkonsistenz ist aufgetreten. Diese chybová hlášení +sollen den Programmierern die Fehlersuche erleichtern und +können meistens einfach ignoriert werden. In manchen Fällen werden +so viele Meldungen ausgegeben, dass die Lesbarkeit der restliche +Ausgabe davon beeinträchtigt wird. + +@item Abgebrochen (core dumped) +Dies bezeichnet einen ernsten Programmierfehler, der das Programm +zum Absturz gebracht hat. Solche Fehler werden als kritisch angesehen. +Falls daher einer auftritt, senden Sie bitte einen Bug-Report! +@end table + +@cindex Chybové hlášení, formát +@cindex Formát chybového hlášení +Wenn Warnungen oder chybová hlášení mit einer konkreten Stelle in der +Eingabedatei verknüpft werden können, dann hat die Meldung die folgende +Form: + +@example +@var{Dateiname}:@var{Zeile}:@var{Spalte}: @var{Meldung} +@var{Fehlerhafte Eingabezeile} +@end example + +Ein Zeilenumbruch wird in der fehlerhaften Zeile an jener Stelle eingefügt, +wo der Fehler aufgetreten ist. Zum Beispiel + +@example +test.ly:2:19: Fehler: keine gültige Dauer: 5 + @{ c'4 e' + 5 g' @} +@end example + +Diese Stellen sind LilyPonds Vermutung, wo die Warnung oder der Fehler +aufgetreten ist, allerdings treten Warnungen und Fehler ja gerade in +unerwarteten Fällen auf. Manchmal kann Lilypond auch eine fehlerhafte +Stelle zwar noch problemlos verarbeiten, ein paar Zeilen später wirkt +sich der Fehler aber dann doch noch aus. In solchen Fällen, wo Sie in +der angegebenen Zeile keinen Fehler erkennen, sollten Sie auch die Zeilen +oberhalb der angegebenen Stelle genauer unter die Lupe nehmen. + +Mehr Information darüber findet sich in @ref{Častá chybová hlášení,,častých chybových hlášeních}. + + + +@node Častá chybová hlášení +@section Častá chybová hlášení +@translationof Common errors + +Chybová hlášení, die unten beschrieben werden, treten of auf, +es ist jedoch nicht immer einfach, die Urache zu finden. Wenn +der Fehler einmal verstanden ist, kann er einfach behoben werden. + + +@menu +* Noty ubíhají pryč ze strany:: +* Ein zusätzliches System erscheint:: +* Zřejmá chyba v @code{../ly/init.ly}:: +* Chybové hlášení Nespojená proměnná %:: +* Chybové hlášení FT_Get_Glyph_Name:: +* Varování: staff affinities by měly jen klesat:: +@end menu + +@node Noty ubíhají pryč ze strany +@unnumberedsubsec Noty ubíhají pryč ze strany +@translationof Music runs off the page + +Noten, die rechts aus der Seite herauslaufen oder sehr komprimiert +aussehen, liegen in fast allen Fällen an einer falschen Notendauer +einer Note, die dazu fürt, dass die letzte Note im Takt über die +Taktgrenze hinwegdauert. Es ist nicht falsch, wenn die letzte +Note eines Taktes über den Takt hinausdauert, weil einfach angenommen +wird, dass sie im nächsten Takt fortgesetzt wird. Aber wenn eine +längere Sequenz dieser überhängenden Noten auftritt, können die +Noten sehr gedrängt aussehen oder über den Seitenrand fließen, weil +die automatische Zeilenumbruchsfunktion einen Umbruch nur am Ende +eines vollständigen Taktes einfügen kann, also wenn alle Noten +zum Ende des Taktstriches auch wirklich aufhören. + +@warning{Eine falsche Dauer kann dazu führen, dass Zeilenumbrüche +nicht möglich sein und die Zeile entweder sehr gedrängt dargestllt +wird oder über den Seitenrand fließt.} + +Die falsche Dauer kann einfach gefunden werden, wenn Taktstrichüberprüfung +eingesetzt wird, siehe @ruser{Takt- und Taktzahlüberprüfung}. + +If you actually intend to have a series of such carry-over measures +you will need to insert an invisible bar line where you want the +line to break. For details, see @ruser{Taktstriche}. + + +@node Ein zusätzliches System erscheint +@unnumberedsubsec Ein zusätzliches System erscheint +@translationof An extra staff appears + +Wenn Kontext nicht explizit mit @code{\new} oder +@code{\context} erstellt werden, werden sie vom Programm erstellt, +sobald ein Befehl angetroffen wird, der im aktuellen Kontext nicht +funktioniert. In einfachen Partituren ist diese automatische +Erstellung sehr nützlich und die meisten Beispiele der LilyPond-Handbücher +benutzen diese Schreiberleicherterung. Manchmal jedoch kann es +vorkommen, dass durch die automatische Erstellung von Systemen aufeinmal +unerwartete Notensysteme erstellt werden. Beispielsweise könnte man +annehmen, dass folgendes Beispiel alle Notenköpfe in dem Notensystem +rot macht, aber als Resultat hat man zwei Systeme, während die +Notenköpfe immernoch schwarz im unteren System erscheinen. + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +Das liegt daran, dass kein @code{Staff}-Kontext existiert, wenn +der @code{\override}-Befehl verarbeitet wird, sodass ein System +für diesen Befehl erstellt wird. Dann aber erstellt @code{\new Staff} +noch ein zusätzliches System, wo die Noten gesetzt werden. Die +richtige Schreibweise wäre: + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +Ein zweites Beispiel zeigt, dass ein @code{\relative}-Befehl innerhalb +von @code{\repeat} zwei Systeme erstellt, wobei der zweite etwas verschoben +ist. Das liegt daran, dass @code{\repeat} zwei @code{\relative}-Umgebungen +erstellt, die jede implizit einen @code{Staff}- und @code{Voice}-Kontext +erstellen. + +@lilypond[quote,verbatim] +\repeat unfold 2 { + \relative c' { c4 d e f } +} +@end lilypond + +Indem man die @code{Voice}-Kontexte explizit erstellt, kann das Problem +umgangen werden. + +@lilypond[quote,verbatim] +\new Voice { + \repeat unfold 2 { + \relative c' { c4 d e f } + } +} +@end lilypond + + +@node Zřejmá chyba v @code{../ly/init.ly} +@unnumberedsubsec Zřejmá chyba v @code{../ly/init.ly} +@translationof Apparent error in @code{../ly/init.ly} + +Verschiedene seltsame chybová hlášení können über Syntax-Fehler in +@file{../ly/init.ly} auftauchen, wenn die Eingabedatei nicht richtig +formuliert ist, wenn sie etwa nicht richtig passende Klammerpaare +oder Anführungszeichen enthält. + +Der üblichste Fehler ist das Fehlen einer geschweiften Klammer +(@code{@}}) am Ende der @code{score}-Umbgebung. Die Lösung ist hier +klar: überprüfen Sie, ob die @code{score}-Umgebung richtig beendet +wurde. Die richtige Struktur einer Eingabedatei wird beschrieben +in @rlearning{Wie eine LilyPond-Eingabe-Datei funktioniert}. +Ein Editor, der die Klammerpaare automatisch anzeigt, ist sehr +hilfreich, um derartige Fehler zu vermeiden. + +Eine weitere übliche Fehlerquelle ist kein Leerzeichen zwischen der +letzten Silbe einer @code{lyrics}-Umgebung und der schließenden +Klammer (@code{@}}). Ohne diese Trennung wird die Klammer als +Teil der Silbe gewertet. Es bietet sich immer an, Leerzeichen vor +und hinter @emph{jede} Klammer zu setzen. Wie wichtig das ist, wenn +Gesangstext eingesetzt wird, siehe @ruser{Was ist Gesangtext}. + +Diese Fehlermeldung kann auch mit einem fehlenden schließenden Anführungszeichen +(@code{"}) auftreten. In diesem Fall sollte die begleitende Fehlermeldung +eine Zeilenzahl angeben, die dicht am Fehler liegt. Die nicht paarigen +Anführungszeichen sind meistens ein oder zwei Zeilen darüber. + + +@node Chybové hlášení Nespojená proměnná % +@unnumberedsubsec Chybové hlášení Nespojená proměnná % +@translationof Error message Unbound variable % + +Diese Fehlermeldung erscheint am Ende der Kommandozeilenausgabe oder in der +Log-Datei mit einer Meldung @qq{GUILE signalled an error ...} +jedes Mal, wenn eine Scheme-Routine aufgerufen wird, die +(falscherweise) ein @emph{LilyPond}-Kommentar und kein +@emph{Scheme}-Kommentar enthält. + +LilyPond-Kommentare befginnen mit dem Prozent-Zeichen (@code{%}) und +dürfen nicht in Scheme-Routinen benutzt werden. Scheme-Kommentare beginnen +mit einem Semikolon (@code{;}). + +@node Chybové hlášení FT_Get_Glyph_Name +@unnumberedsubsec Chybové hlášení FT_Get_Glyph_Name +@translationof Error message FT_Get_Glyph_Name + +Diese Fehlermeldung erscheint in der Kommandozeilenausgabe, wenn die +Datei ein Zeichen enthält, das nicht zu ASCII gehört und die Datei +nicht in UTF-8-Kodierung gespeichert wurd. Sie auch @ruser{Zeichenkodierung}. + + +@node Varování: staff affinities by měly jen klesat +@unnumberedsubsec Varování: staff affinities by měly jen klesat +@translationof Warning staff affinities should only decrease + +Diese Warnung erscheint, wenn keine Notensysteme in der Ausgabe vorhanden +sind, wenn etwa nur @code{ChordName}-Kontext und @code{Lyrics}-Kontext +in einem Liedblatt vorhanden sind. Die Warnungen können vermieden werden, +indem man einen der Kontexte als System erscheinen lässt, indem man ihm +zu Beginn hinzufügt: + +@example +\override VerticalAxisGroup #'staff-affinity = ##f +@end example + +Zu Einzelheiten siehe @qq{Abstand von Nicht-Notensystemzeilen} in +@ruser{Flexible vertikale Abstände in Systemgruppen}. diff --git a/Documentation/cs/usage/setup.itely b/Documentation/cs/usage/setup.itely new file mode 100644 index 0000000000..eb865fe9b7 --- /dev/null +++ b/Documentation/cs/usage/setup.itely @@ -0,0 +1,357 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- + +@ignore + Translation of GIT committish: 3d7ffa1f82bb44673134b28becf7898482fe7316 + + 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" + +@c Translators: Pavel Fric + +@node Nastavení +@chapter Nastavení +@translationof Setup + +In diesem Kapitel werden verschiedene Konfigurationsoptionen für LilyPond und +andere Programme behandelt, die nach der Installation auszuführen sind. Dieses +Kapitel kann als Referenz betrachtet werden, lesen Sie einen Abschnitt nur, +wenn er auf Sie zutrifft. + +@menu +* Nastavení pro zvláštní operační systémy:: +* Podpora textových editorů:: +* Ukázat a klepnout:: +@end menu + + +@node Nastavení pro zvláštní operační systémy +@section Nastavení pro zvláštní operační systémy +@translationof Setup for specific Operating Systems + +Dieser Abschnitt erklärt zusätzliche Einstellungen für bestimmte Betriebssysteme. + +@menu +* Nastavení pro MacOS X:: +@end menu + +@node Nastavení pro MacOS X +@subsection Nastavení pro MacOS X +@translationof Setup for MacOS X + +@subsubheading Benutzung von Python-Skripten unter MacOS 10.3 oder 10.4 + +Das LilyPond-Programmpaket für MacOS X stellt Python nicht zur +Verfügung, aber Python 2.4 oder höher wird benötigt, um +Skripte wie @command{convert-ly} zu benutzen. Wenn Sie MaxOS +10.3 oder 10.4 besitzen, müssen Sie eine neuere Python-Version +von @uref{http://python.org/download/} installieren und dann +die erste Zeile von @command{convert-ly} und @command{lilypond-book} +auf folgende Weise ändern: Wenn sich das installierte Python-Programm +in Ihrem @var{PFAD} befindet, muss die erste Zeile heißen: + +@example +#!/usr/bin/env python +@end example + +@noindent +andernfalls muss sie heißen: + +@example +#!@var{/path/to/newly_installed/python} +@end example + +@subsubheading MacOS X auf der Kommandozeile + +Die Skripte (etwa @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly} und sogar @command{lilypond}) befinden sich +innerhalb der @code{.app}-Datei für MacOS@tie{}X. Sie können +auf der Kommandozeile direkt aufgerufen werden, etwa + +@example +@var{Pfad/zu}/LilyPond.app/Contents/Resources/bin/lilypond +@end example + +@noindent +Entsprechend funktionieren auch die anderen Skripte wie +@command{lilypond-book}, @command{convert-ly}, @command{abc2ly} usw. + +Sie können sich auch selber Skripte anlegen, die diesen Pfad automatisch +hinzufügen. Erstellen Sie ein Verzeichnis, indem die Skripte gespeichert werden: + +@example +mkdir -p ~/bin +cd ~/bin +@end example + +Erstellen Sie eine Datei mit dem Namen @code{lilypond} und dem Inhalt + +@example +exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example + +Erstellen Sie entsprechende Dateien mit den Namen @code{lilypond-book}, + @code{convert-ly} und den Namen der anderen Hilfsprogramme, die Sie benutzen + (@code{abc2ly}, @code{midi2ly} usw.). Ersetzen Sie einfach den Teil + @code{bin/lilypond} mit @code{bin/convert-ly} (oder einem anderen + Programmnamen) in der entsprechenden Datei. + +Machen Sie die Datei ausführbar: + +@example +chmod u+x lilypond +@end example + +Jetzt müssen Sie dieses Verzeichnis noch zu Ihrem Pfad (PATH) hinzufügen. +Verändern Sie die Datei @code{.profile} in Ihrem Benutzerverzeichnis +(oder erstellen Sie sie), dass sie die Zeile + +@example +export PATH=$PATH:~/bin +@end example + +@noindent +beinhaltet. Die Datei muss mit einer Leerzeile enden. + +Beachten Sie, dass @var{Pfad/zu} üblicherweise @code{/Applications/} ist. + + +@node Podpora textových editorů +@section Podpora textových editorů +@translationof Text editor support + +@cindex Editory +@cindex vim +@cindex emacs +@cindex Režim, editory +@cindex Zvýraznění skladby +@cindex Zvýraznění skladby + +Verschiedene Texteditoren haben Unterstützung für LilyPond. + +@menu +* Režim Emacs:: +* Režim Vim:: +* jEdit:: +* TexShop:: +* TextMate:: +* LilyKDE:: +@end menu + +@node Režim Emacs +@subsection Režim Emacs +@translationof Emacs mode + +Emacs hat einen LilyPond-Modus (@file{lilypond-mode}), eine Datei, die +die Vervollständigung von Befehlen, Einrückungen, für LilyPond spezifische +Klammerschließungen und die Markierung der Syntax beherrscht. +Zusätzlich stehen noch praktische Tastaturkombinationen zum +Programmaufruf und zum Nachschlagen in den Handbüchern zur +Verfügung. Siehe unten, wenn die Datei @file{lilypond-mode} +sich nicht auf Ihrem Computer befindet. + +Režim Emacs zur Noteneingabe und zum Programmaufruf ist +in den Emacs-Quellen im @file{elisp}-Verzeichnis enthalten. Mit +dem Befehl @command{make install} können Sie es nach @var{elispdir} +installieren. Die Datei @file{lilypond-init.el} sollte in + @var{load-path}@file{/site-start.d/} liegen oder Ihrem + @file{~/.emacs} or @file{~/.emacs.el} hinzugefügt werden. + +Als Benutzer können Sie Ihren Quellenpfad (etwa @file{~/site-lisp/}) +ihrem @var{load-path} hinzufügen, indem Sie folgende Zeile zu Ihrer +@file{~/.emacs}-Datei hinzufügen: + +@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 Režim Vim +@subsection Režim Vim +@translationof Vim mode + +Für @uref{http://@/www@/.vim@/.org,VIM} wird ein @file{vimrc} bereitgestellt, +zusammen mit Werkzeugen zur Syntaxauszeichnung. Režim Vim zur +Noteneingabe und zum Programmaufruf befindet sich im Quellarchiv im +@code{$VIM}-Verzeichnis. + +LilyPond-Dateien werden automatisch erkannt, wenn sich in der Datei +@file{~/.vim/filetype.vim} folgender Inhalt befindet: + +@example +if exists("did_load_filetypes") + finish +endif +augroup filetypedetect + au! BufNewFile,BufRead *.ly,*.ily setf lilypond +augroup END +@end example + +Fügen Sie den LilyPond-Pfad in ihre +@file{~/.vimrc}-Datei ein, indem Sie ihre folgende Zeile hinzufügen: + +@example +set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ +@end example + +@noindent +Dabei wird $@{LILYPOND_VERSION@}durch Ihre LilyPond-Version ersetzt. Sollten +Sie LilyPond nicht nach @file{/usr/local/} installiert haben, müssen Sie den +Pfad entsprechend anpassen. + + +@node jEdit +@subsection jEdit +@translationof jEdit + +Das Plugin für den @uref{http://@/www@/.jedit@/.org@/,jEdit}-Texteditor, +LilyPondTool genannt, ist das vielfältigste textbasierte Werkzeug, um +LilyPond-Notationsdateien zu editieren. Zu den besonderen Eigenschaften +gehört ein Dokument-Ersteller mit Liedtextunterstützung, der die Neuerstellung +von Dateien erleichtert, und ein integriertes PDF-Anzeigeprogramm mit +@qq{point-and-click}-Unterstützung. Demos, Bildschirmphotos und +Installationsanweisungen finden sich unter +@uref{http://lilypondtool@/.organum@/.hu} + + +@node TexShop +@subsection TexShop +@translationof TexShop + +Der +@uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop}-Editor +für MacOS@tie{}X kann erweitert werden, um LilyPond, lilypond-book und convert-ly aus dem +Editor heraus zu starten. Die Erweiterung findet sich unter +@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. + + +@node TextMate +@subsection TextMate +@translationof TextMate + +Es gibt ein LilyPond-Paket für TextMate. Es kann installiert werden, indem man + +@example +mkdir -p /Library/Application\ Support/TextMate/Bundles +cd /Library/Application\ Support/TextMate/Bundles +svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ +@end example + +@noindent +ausführt. + + +@node LilyKDE +@subsection LilyKDE +@translationof LilyKDE + +@uref{http://lilykde.googlecode.com/,LilyKDE} ist eine Erweiterung für +den Texteditor @uref{http://kate-editor.org/,Kate} für KDE. LilyKDE +beinhaltet einen mächtigen Assistenten, mit dem sehr schnell neue +LilyPond-Dokumente erstellt werden könne, sowie einen eingebetteten +PDF-Betrachter. + +LilyKDE benutzt auch @uref{http://www.volny.cz/smilauer/rumor/,Rumor}, +um Musik direkt von einem MIDI-Keyboard einzulesen. + +Weitere Fähigkeiten von LilyKDE sind Silbentrennung für Liedtexte oder +die Möglichkeit, LilyPond gleichzeitig mit mehreren Eingabedateien vom +KDE Dateimanager aus aufzurufen. + + +@node Ukázat a klepnout +@section Ukázat a klepnout +@translationof Point and click +@cindex Ukázat a klepnout + + +Ukázat a klepnout erlaubt es, die Noten in der Quelldatei zu finden, indem man sie +im PDF anklickt. Das erleichtert es, fehlerhafte Stellen zu finden. + +Wenn diese Funktionalität aktiv ist, fügt LilyPond Hyperlinks zum PDF hinzu. +Diese werden dann bei einem Klick zum Browser geschickt, der wiederum +einen Texteditor mit dem Cursor an der richtigen Stelle öffnet. + +Damit diese Kettenreaktion funktioniert, müssen Sie ihrem PDF-Programm +mit dem Skript @file{lilypond-invoke-editor} beibringen, Hyperlinks zu folgen. + +Im Falle von Xpdf auf einer UNIX-Maschine sollte folgende Zeile in der Datei +@file{xpdfrc}@footnote{Unter UNIX befindet sich diese Datei entweder in +@file{/etc/xpdfrc} oder als @file{.xpdfrc} in Ihrem Heim-Verzeichnis.} stehen. + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +Das Programm @file{lilypond-invoke-editor} ist ein kleines Hilfsprogramm. +Es ruft einen Editor auf für bestimmte @code{textedit}-URIs und startet +einen Browser für die anderen. Die Umgebungsvariable @code{EDITOR} +wird für folgende Zeichenketten: + +@table @code +@item emacs + das startet +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item vim + das startet +@example +gvim --remote +:@var{line}:norm@var{char} @var{file} +@end example + +@item nedit + das startet +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +Die Umgebungsvariable @code{LYEDITOR} wird verwendet, um dieses zu +überschreiben. Sie enthält den Befehl, um den Editor aufzurufen, wobei +die Variablen @code{%(file)s}, +@code{%(column)s}, @code{%(line)s} mit der Datei, Spalte und Zeile +ersetzt werden. Die Einstellung + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +für @code{LYEDITOR} etwa entspricht dem von vornherein eingestellten +Emacs-Aufruf. + + +@cindex Dateigröße, Ausgabedatei + +Odkazy ukázat a klepnout vergrößern die Notationsdatei erheblich. Um die +Größe der PDF- und PS-Dateien zu verringern, kann ukázat a klepnout +ausgeschaltet werden, indem die Zeile + +@example +\pointAndClickOff +@end example + +@noindent +in der @file{.ly}-Datei gesetzt wird. Ukázat a klepnout kann auch explizit +eingeschaltet werden durch die Zeile: + +@example +\pointAndClickOn +@end example + +Alternativ können Sie ukázat a klepnout auch mit einer +Kommandozeilenoption ausschalten: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{Sie sollten ukázat a klepnout immer für Dateien ausschalten, die +Sie an andere Personen weitergeben möchten. Anderenfalls werden +Pfadinformationen Ihres Computers in die PDF-Datei kopiert, was ein +potentielles Sicherheitsrisiko darstellt.} diff --git a/Documentation/cs/usage/suggestions.itely b/Documentation/cs/usage/suggestions.itely new file mode 100644 index 0000000000..12e3ace365 --- /dev/null +++ b/Documentation/cs/usage/suggestions.itely @@ -0,0 +1,638 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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 Návrhy pro psaní vstupních souborů LilyPond +@chapter Návrhy pro psaní vstupních souborů LilyPond +@translationof Suggestions for writing LilyPond input files + +Jetzt sind Sie so weit, größere Stücke mit LilyPond zu schreiben -- +nicht nur die kleinen Beispiele aus der Übung, sondern ganze Stücke. +Aber wie geht man das am besten an? + +Solange LilyPond Ihre Dateien versteht und die Noten so setzt, +wie Sie das wollen, spielt es eigentlich keine Rolle, wie Ihre +Dateien aussehen. Es gibt aber trotzdem ein paar Dinge, die man +beim Schreiben von LilyPond-Code berücksichtigen sollte. + +@itemize @bullet +@item Was ist, wenn Sie einen Fehler machen? Die Struktur einer +LilyPond-Datei kann es erleichtern (oder erschweren), bestimmte +Fehler zu finden. + +@item Was ist, wenn Sie Ihre Dateien mit jemandem austauschen +wollen? Oder Ihre Dateien nach einige Jahren noch einmal überarbeiten +wollen? Manche LilyPond-Dateien versteht man auf den ersten Blick, +über anderen muss man eine Stunde grübeln, um die Struktur zu ahnen. + +@item Was ist, wenn sie Ihre Dateien auf eine neuere LilyPond-Version +aktualisieren wollen? Die Syntax der Eingabesprache verändert sich +allmählich mit Verbesserungen im Programm. Die meisten Veränderungen +können automatisch durch @code{convert-ly} gelöst werden, aber +bestimmte Änderungen brauchen Handarbeit. LilyPond-Dateien können +strukturiert werden, damit sie einfacher aktualisierbar sind. +@end itemize + +@menu +* Všeobecné návrhy:: +* Kopírování stávající hudby:: +* Velké projekty:: +* Řešení potíží:: +* Make a Makefiles:: +@end menu + + +@node Všeobecné návrhy +@section Všeobecné návrhy +@translationof General suggestions + +Hier einige Vorschläge, wie Sie Probleme vermeiden oder lösen können: + +@itemize +@item @strong{Schreiben Sie immer mit @code{\version} die +Versionsnummer +in jede Datei}. Beachten Sie, dass in allen Vorlagen die Versionsnummer +@code{\version "2.14.0"} eingetragen ist. Es empfiehlt sich, in alle +Dateien, unabhängig von ihrer Größe, den @code{\version}-Befehl +einzufügen. Persönliche Erfahrung hat gezeigt, dass es ziemlich +frustrierend sein kann zu erinnern, welche Programmversion man etwa +vor einem Jahr verwendet hat. Auch @code{convert-ly} benötigt die +Versionsnummer. + +@item @strong{Benutzen Sie Überprüfungen}: @ruser{Oktavenüberprüfung}, und +@ruser{Takt- und Taktzahlüberprüfung}. Wenn Sie hier und da diese +Überprüfungen einfügen, finden Sie einen möglichen Fehler weit +schneller. Wie oft aber ist @qq{hier und da}? Das hängt von der +Komplexität der Musik ab. ei einfachen Stücken reicht es vielleicht +ein- oder zweimal, in sehr komplexer Musik sollte man sie vielleicht +in jeden Takt einfügen. + +@item @strong{Ein Takt pro Textzeile}. Wenn irgendetwas kompliziertes +vorkommt, entweder in der Musik selber oder in der Anpassung der +Ausgabe, +empfiehlt es sich oft, nur einen Takt pro Zeile zu schreiben. +Bildschirmplatz zu sparen, indem Sie acht Takte in eine Zeile zwängen, +hilft nicht weiter, wenn Sie ihre Datei @qq{debuggen} müssen. + +@item @strong{Kommentieren Sie ihre Dateien}. Benutzen Sie entweder +Taktnummern (in regelmäßigen Abständen) oder Verweise auf musikalische +Themen (@qq{Zweites Thema in den Geigen}, @qq{vierte Variation} usw.). +Sie brauchen diese Kommentare vielleicht noch nicht, wenn Sie das Stück +notieren, aber spätestens wenn Sie nach ein paar Jahren etwas +verändern +wollen oder Sie den Quelltext an einen Freund weitergeben wollen, +ist es weitaus komplizierter, die Dateistruktur ohne Kommentare zu +verstehen, als wenn Sie sie rechtzeitig eingefügt hätten. + +@item @strong{Schreiben Sie Klammern mit Einrückung}. Viele +Probleme entstehen durch ungerade Anzahl von @code{@{} und +@code{@}}-Klammern. + +@item @strong{Schreiben Sie Tondauerangaben} am Anfang von +Abschnitten und Bezeichnern. Wenn Sie beispielsweise + @code{c4 d e} am Anfang eines Abschnittes schreiben, +ersparen Sie sich viele Probleme, wenn Sie ihre Musik +eines Tages umarrangieren wollen. + +@item @strong{Trennen Sie Einstellungen} von den eigentlichen +Noten. Siehe auch @rlearning{Tipparbeit durch Variablen und Funktionen ersparen} +und +@rlearning{Globale Formatierung}. + +@end itemize + + +@node Kopírování stávající hudby +@section Kopírování stávající hudby +@translationof Typesetting existing music + +Wenn Sie Musik aus einer fertigen Partitur kopieren (z. B. die +LilyPond-Eingabe einer gedruckten Partitur): + +@itemize + +@item +Schreiben Sie ein System ihrer Quelle nach dem anderen +(aber trotzdem nur einen Takt pro Textzeile) und überprüfen +Sie jedes System, nachdem Sie es fertig kopiert haben. Mit dem +@code{showLastLength}- oder @code{showFirstLenght}-Befehl können Sie den Übersetzungsprozess +beschleunigen. Siehe auch +@ruser{Korrigierte Musik überspringen}. + +@item +Definieren Sie @code{mBreak = @{ \break @}} und schreiben Sie + @code{\mBreak} in der Quelldatei immer dann, wenn im Manuskript +ein Zeilenumbruch vorkommt. Das macht es einfacher, die gesetzte +Zeile mit den ursprünglichen Noten zu vergleichen. Wenn Sie die +Partitur fertig gestellt haben, könne Sie @code{mBreak = @{ @}}, +also leer definieren, um diese manuellen Zeilenumbrüche zu entfernen. +Damit kann dann LilyPond selber entscheiden, wohin es passende +Zeilenumbrüche platziert. + +@item +Wenn Sie eine Stimme für ein transponierendes Instrument als eine +Variable notieren, wird empfohlen, dass die Noten von + +@example +\transpose c klingende-Tonhöhe @{...@} +@end example + +eingefasst werden (wobei @code{klingende-Tonhöhe} die klingende Tonhöhe +des Instruments ist), sodass die Noten innerhalb der Variable für klingendes C +geschrieben sind. Sie können die Variable zurücktransponieren, wenn es +nötig ist, aber Sie müssen es nicht tun. Fehler in Transpositionen sind +treten seltener auf, wenn alle Noten in den Variablen für die gleiche +Ausgangstonhöhe geschrieben werden. + +Denken Sie auch daran, dass Sie nur von/nach C transponieren. Das heißt, +dass die einzigen anderen Tonhöhen, die Sie in Transpositionen benutzen, +die Tonhöhen der Instrumente sind, für die Sie schreiben: @code{bes} für +eine B-Trompete oder @code{aes} für eine As-Klarinette usw. + +@end itemize + + +@node Velké projekty +@section Velké projekty +@translationof Large projects + +Besonders wenn Sie an größeren Projekten arbeiten, ist es +unumgänglich, dass Sie ihre LilyPond-Dateien klar strukturieren. + +@itemize + +@item @strong{Verwenden Sie Variablen für jede Stimme}, innerhalb +der Definition sollte so wenig Struktur wie möglich sein. Die +Struktur des @code{\score}-Abschnittes verändert sich am ehesten, +während die @code{violine}-Definition sich wahrscheinlich mit einer +neuen Programmversion nicht verändern wird. + +@example +violine = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violine + @} + @} +@} +@end example + +@item @strong{Trennen Sie Einstellungen von den Noten}. Diese +Empfehlung wurde schon früher gegeben, +aber für velké projekty ist es unumgänglich. Muss z. B. die +Definition für @code{fdannp} verändert werden, so braucht +man es nur einmal vorzunehmen und die Noten in der Geigenstimme, +@code{violin}, bleiben unberührt. + +@example +fdannp = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fdannp c'8. e16 +@} +@end example + +@end itemize + + + +@node Řešení potíží +@section Řešení potíží +@translationof Troubleshooting + +Früher oder später werden Sie in die Lage kommen, +dass LilyPond Ihre Datei nicht kompilieren will. Die +Information, die LilyPond während der Übersetzung +gibt, können Ihnen helfen, den Fehler zu finden, aber +in vielen Fällen müssen Sie nach der Fehlerquelle +auf die Suche gehen. + +Die besten Hilfsmittel sind in diesem Fall das Zeilen- +und Blockkommentar (angezeigt durch @code{%} bzw. +@code{%@{ ... %@}}). Wenn Sie nicht bestimmen können, +wo sich das Problem befindet, beginnen Sie damit, große +Teile des Quelltextes auszukommentieren. Nachdem Sie +einen Teil auskommentiert haben, versuchen Sie, die Datei +erneut zu übersetzen. Wenn es jetzt funktioniert, muss +sich das Problem innerhalb der Kommentare befinden. +Wenn es nicht funktioniert, müssen Sie weitere Teile +auskommentieren bis sie eine Version haben, die funktioniert. + +In Extremfällen bleibt nur noch solch ein Beispiel übrig: + +@example +\score @{ + << + % \melody + % \harmony + % \bass + >> + \layout@{@} +@} +@end example + +@noindent +(also eine Datei ohne Noten). + +Geben Sie nicht auf, wenn das vorkommen sollte. Nehmen +Sie das Kommentarzeichen von einem Teil wieder weg, sagen +wir der Bassstimme, und schauen Sie, ob es funktioniert. +Wenn nicht, dann kommentieren Sie die gesamte Bassstimme +aus, aber nicht den @code{\bass}-Befehl in dem + @code{\score}-Abschnitt: + +@example +bass = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +Jetzt beginnen Sie damit, langsam Stück für Stück der +Bassstimme wieder hineinzunehmen, bis Sie die problematische +Zeile finden. + +Eine andere nützliche Technik zur Problemlösung ist es, +@rweb{Minimalbeispiele} zu konstruieren. + + + +@node Make a Makefiles +@section Make a Makefiles +@translationof Make and Makefiles + +@cindex Makefile +@cindex Make-Dateien +@cindex make + +Fast alle Betriebssysteme, auf denen LilyPond benutzt werden kann, +unterstützen ein Programm mit dem Namen @code{make}. Dieses Programm +liest eine besondere Datei mit der Bezeichnung @code{Makefile}, +die definiert, welche Dateien von welchen anderen Dateien abhängen und +welche Befehle für das Betriebssystem nötig sind, um eine Datei aus +einer anderen zu erstellen. Ein Makefile könnte etwa erklären, wie +@file{ballad.pdf} und @file{ballad.midi} aus @file{ballad.ly} +erstellt werden können, indem LilyPond aufgerufen wird. + +Es gibt Fällen, wenn es sich sehr stark empfiehlt, ein @code{Makefile} +für das aktuelle Projekt zu erstellen, entweder zur eigenen Bequemlichkeit, +oder aber auch als Hilfe für andere, die vielleicht einmal die +Quelldateien lesen und verstehen wollen. Insbesondere bei großen Projekten +mit vielen eingefügten Dateien und unterschiedlichen Ausgabeoptionen +(etwa Partitur, einzelne Stimmen, Dirigierpartitur, Klavierauszug usw.), +aber auch bei Projekten, die komplizierte Programmaufrufe zur Verarbeitung +erfordern (wenn man etwa mit @code{lilypond-book} arbeitet), lohnt +sich die Erstellung einer Make-Datei. Diese Dateien können sehr +unterschiedliche ausfallen, und ihre Komplexität und Flexibilität kann +den Bedürfnissen aber auch Kenntnissen des Schreibers angepasst werden. +Das Programm GNU Make ist auf GNU/Linux Distributionen und MacOS X +installiert, aber es ist auch für Windows erhältlich. + +Das @strong{GNU Make Manual} gibt eine vollständige Anleitung, wie +@code{make} benutzt werden kann.  Hier sollen nur einige kleine +Blicke auf die vielfältigen Möglichkeiten geworfen werden. + +Die Befehle, um Regeln in einer Make-Datei zu erstellen, unterscheidet +sich zwischen den Betriebssystemen. Die verschiedenen Linuxe und +MacOS X benutzen @code{bash}, während unter Windows @code{cmd} eingesetzt +wird. Unter MacOS X muss man das System so konfigurieren, dass +die Kommandozeile benutzt wird. Hier einige Beispiele für Make-Dateien, +mit Versionen für Linux/MacOS und Windows. + +Das erste Beispiel ist für ein Orchesterstück in vier Stätzen unt mit +der folgenden Dateistruktur: + +@example +Symphony/ +|-- MIDI/ +|-- Makefile +|-- Notes/ +| |-- cello.ily +| |-- figures.ily +| |-- horn.ily +| |-- oboe.ily +| |-- trioString.ily +| |-- viola.ily +| |-- violinOne.ily +| `-- violinTwo.ily +|-- PDF/ +|-- Parts/ +| |-- symphony-cello.ly +| |-- symphony-horn.ly +| |-- symphony-oboes.ly +| |-- symphony-viola.ly +| |-- symphony-violinOne.ly +| `-- symphony-violinTwo.ly +|-- Scores/ +| |-- symphony.ly +| |-- symphonyI.ly +| |-- symphonyII.ly +| |-- symphonyIII.ly +| `-- symphonyIV.ly +`-- symphonyDefs.ily +@end example + +Die @file{.ly}-Dateien un den Verzeichnissen @file{Scores} und +@file{Parts} erhalten ihrere Noten aus @file{.ily}-Dateien, die +sich im @file{Notes}-Verzeichnis befinden: + +@example +%%% Kopfzeile der Datei "symphony-cello.ly" +\include ../definitions.ily +\include ../Notes/cello.ily +@end example + +Die Make-Datei hat die Ziele @code{score} (das gesamte Stück als +große Partitur), @code{movements} (die einzelnen Sätze als große +Partitur) und @code{parts} (die einzelnen Stimmen für die Spieler). +Es gibt auch das Ziel @code{archive}, welches ein Tar-Archiv +der Quelldateien erstellt, etwa um die Quellen über das Internet +oder per E-Mail zu verteilen. Hier die Make-Datei für GNU/Linux +oder MacOS X. Sie sollte unter dem Namen @code{Makefile} im obersten +Verzeichnis des Projektes gespeichert werden: + +@warning{Wenn ein Ziel oder eine Musterregel definiert ist, müssen +die folgenden Zeilen mit Tabulatoren, nicht mit Leerzeichen beginnen.} + +@example +# Namensstamm der Ausgabedateien +piece = symphony +# finde heraus, wieviele Prozessoren vorhanden sind +CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` +# Der Befehl, um lilypond aufzurufen +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click -djob-count=$(CPU_CORES) + +# Die Endungen, die im Makefile benutzt werden +.SUFFIXES: .ly .ily .pdf .midi + +# Eingabe- und Ausgabedateien werden in den Verzeichnissen durchsucht, +# die sich in der VPATH-Variable befinden. Alle sind Unterverzeichnisse +# des aktuellen Verzeichnisses (angegeben durch die GNU make-Variable +# `CURDIR'). +VPATH = \ + $(CURDIR)/Scores \ + $(CURDIR)/PDF \ + $(CURDIR)/Parts \ + $(CURDIR)/Notes + +# Die Musterregel, um PDF und MIDI-Dateien aus der LY-Eingabedatei +# zu erstellen. Die .pdf-Ausgabedateien werden in das +# `PDF'-Unterverzeichnis abgelegt, die .midi-Dateien in das +# `MIDI'-Unterverzeichnis. +%.pdf %.midi: %.ly + $(LILY_CMD) $<; \ # this line begins with a tab + if test -f "$*.pdf"; then \ + mv "$*.pdf" PDF/; \ + fi; \ + if test -f "$*.midi"; then \ + mv "$*.midi" MIDI/; \ + fi + +notes = \ + cello.ily \ + horn.ily \ + oboe.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +# Abhängigkeiten der einzelnen Sätze. +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +# Abhängigkeiten der großen Partitur. +$(piece).pdf: $(piece).ly $(notes) + +# Abhängigkeiten der Stimmen. +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +# `make score' eintippen, um die große Partitur mit allen vier +# Sätzen als eine Datei zu erstellen. +.PHONY: score +score: $(piece).pdf + +# `make parts' tippen, um alle Stimmen zu erstellen. +# `make foo.pdf' tippen, um die Stimme für das Instrument `foo' zu erstellen. +# Beispiel: `make symphony-cello.pdf'. +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +# `make movements' tippen um Dateien für die vier Sätze einzeln zu erstellen. +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements + +archive: + tar -cvvf stamitz.tar \ # this line begins with a tab + --exclude=*pdf --exclude=*~ \ + --exclude=*midi --exclude=*.tar \ + ../Stamitz/* +@end example + +Unter Windows ergeben sich bestimmte Komplikationen. Nachdem man +GNU Make für Windows heruntergeladen und installiert hat, muss +man den richtigen Pfad in den Umgebungsvariablen des Systems setzen, +damit die DOS-Kommandozeile das Make-Programm finden kann. Um das +vorzunehmen, kann mit der rechten Maustaste auf "Arbeitsplatz" +klicken, dann @code{Eigenschaften} und @code{Erweitert} geklickt +werden. Hier wählt man @code{Umgebungsvariablen}. In der +Liste @code{Systemvariablen} wählt man @code{Path} und mit +einem Klick auf @code{Bearbeiten} kann man den Pfad zu der +@code{.exe}-Datei von GNU Make hinzufügen, der etwa wie +folgt aussieht: + +@example +C:\Program Files\GnuWin32\bin +@end example + +Die Make-Datei selber muss auch angepasst werden, um unterschiedliche +Shell-Befehle zu verwenden und mit Leerzeichen umgehen zu können, +die sich in einigen Standardverzeichnissen unter Windows befinden. +Das @code{archive}-Ziel wird entfernt, da Windows den +@code{tar}-Befehl nicht kennt, und Windows benutzt auch eine +andere Dateiendung für midi-Dateien. + + +@example +## WINDOWS VERSION +## +piece = symphony +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click \ + -djob-count=$(NUMBER_OF_PROCESSORS) + +# 8.3 Bezeichnung für CURDIR erhalten (Workaround wg. Leerzeichen in PATH) +workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ + do @@echo %%~sb) + +.SUFFIXES: .ly .ily .pdf .mid + +VPATH = \ + $(workdir)/Scores \ + $(workdir)/PDF \ + $(workdir)/Parts \ + $(workdir)/Notes + +%.pdf %.mid: %.ly + $(LILY_CMD) $< # diese Zeile beginnt mit Tabulator + if exist "$*.pdf" move /Y "$*.pdf" PDF/ # begin with tab + if exist "$*.mid" move /Y "$*.mid" MIDI/ # begin with tab + +notes = \ + cello.ily \ + figures.ily \ + horn.ily \ + oboe.ily \ + trioString.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +$(piece).pdf: $(piece).ly $(notes) + +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +.PHONY: score +score: $(piece).pdf + +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements +@end example + +Die nächste Make-Datei ist für ein @command{lilypond-book}-Dokument, +das in LaTeX gesetzt wird. Das Projekt hat einen Index, welcher +erfordert, dass der Befehl @command{latex} zweimal aufgerufen wird, +um die Verweise zu aktualisieren. Ausgabedateien werden in einem +@code{out}-Verzeichnis für die .pdf-Dateien gespeichert und in +@code{htmlout} für die html-Dateien. + +@example +SHELL=/bin/sh +FILE=myproject +OUTDIR=out +WEBDIR=htmlout +VIEWER=acroread +BROWSER=firefox +LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex +LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex +PDF=cd $(OUTDIR) && pdflatex $(FILE) +HTML=cd $(WEBDIR) && latex2html $(FILE) +INDEX=cd $(OUTDIR) && makeindex $(FILE) +PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf & + +all: pdf web keep + +pdf: + $(LILYBOOK_PDF) # begin with tab + $(PDF) # begin with tab + $(INDEX) # begin with tab + $(PDF) # begin with tab + $(PREVIEW) # begin with tab + +web: + $(LILYBOOK_HTML) # begin with tab + $(HTML) # begin with tab + cp -R $(WEBDIR)/$(FILE)/ ./ # begin with tab + $(BROWSER) $(FILE)/$(FILE).html & # begin with tab + +keep: pdf + cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # begin with tab + +clean: + rm -rf $(OUTDIR) # begin with tab + +web-clean: + rm -rf $(WEBDIR) # begin with tab + +archive: + tar -cvvf myproject.tar \ # begin this line with tab + --exclude=out/* \ + --exclude=htmlout/* \ + --exclude=myproject/* \ + --exclude=*midi \ + --exclude=*pdf \ + --exclude=*~ \ + ../MyProject/* +@end example + +TODO: soll auch unter Windows funktionieren + +Die vorige Make-Datei funktioniert nicht unter Windows. Als Alternative +für Windows-Benutzer könnte man eine einfache batch-Datei erstellen, +welche die erforderlichen Befehl enthält. Sie kümmert sich nicht +um Abhängigkeiten, wie es eine Make-Datei kann, aber wenigstens +wird die Kompilation auf einen einzigen Befehl beschränkt. Das folgende +kann als Datei @command{build.bat} oder @command{build.cmd} gespeichert +werden. Die Batch-Datei kann auf der Kommandozeile aufgerufen werden +oder einfach doppelt angeklickt werden. + +@example +lilypond-book --output=out --pdf myproject.lytex +cd out +pdflatex myproject +makeindex myproject +pdflatex myproject +cd .. +copy out\myproject.pdf MyProject.pdf +@end example + + +@seealso +Programmbenutzung: +@rprogram{Benutzung auf der Kommandozeile}, +@rprogram{lilypond-book}. + diff --git a/Documentation/cs/usage/updating.itely b/Documentation/cs/usage/updating.itely new file mode 100644 index 0000000000..0f5eaef131 --- /dev/null +++ b/Documentation/cs/usage/updating.itely @@ -0,0 +1,269 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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" + +@c Translators: Pavel Fric + + +@node Aktualizace souborů pomocí convert-ly +@chapter Aktualizace souborů pomocí @command{convert-ly} +@translationof Updating files with convert-ly + +@cindex Aktualizace souboru LilyPond +@cindex convert-ly + +Vstupní skladba LilyPondu je vždy znovu měněna kvůli zjednodušení +nebo různým vylepšením a vývoji. +Vedlejší účinek toho je ale, že LilyPond často nadále nedokáže správně zpracovat +starší vstupní soubory. Aby tento problém obešel, může program +používat @command{convert-ly}, který zvládá většinu změn ve skladbě +mezi různými verzemi LilyPondu. + +@menu +* Proč se mění skladba?:: +* Vyvolání convert-ly:: +* Volby příkazového řádku pro convert-ly:: +* Potíže s convert-ly:: +* Ruční převod:: +@end menu + + +@node Proč se mění skladba? +@section Proč se mění skladba? +@translationof Why does the syntax change? + +@cindex convert-ly +@cindex Aktualizace starých vstupních souborů +@cindex Obnova starých vstupních souborů + +Vstupní skladba LilyPondu se čas od času mění. +Když je program LilyPond zlepšen, je odpovídajícím způsobem +přizpůsobena i skladba (zadávací jazyk). Některé změny dělají +vstupní text snadnější pro zápis a ke čtení, +jiné do LilyPondu přinášejí nové vlastnosti. + +Například všechny názvy vlastností @code{\paper} a @code{\layout} +se mají zapisovat ve tvaru @code{první-druhá-třetí}. Ve +verzi 2.11.60 si však všímáme, že vlastnost +@code{printallheaders} se tohoto pravidla nedrží. +Měli bychom to tak teď nechat (díky čemuž budou noví uživatelé zmateni, protože +se musí vyrovnat se vstupním formátem, který není logický), nebo bychom to měli změnit (čímž +naštveme staré uživatele s jejich již napsanými notovými zápisy)? +V tomto případě jsme se rozhodli, že změníme název v +@code{print-all-headers}. Naštěstí může být tato změna zautomatizována +naším nástrojem @command{convert-ly}. + + +Bohužel si @code{convert-ly} neporadí se všemi změnami ve skladbě. +Například v LilyPondu 2.4 a dřívějších byly přízvuky a neanglická písmena +v jiných jazycích zadávány příkazy LaTeXu -- tak například německé Änderung +(změna) bylo zapsáno jako @code{\"Anderung}, nebo v případě zobrazení +francouzského slova pro Vánoce bylo zadáno @code{No\"el}. Od verze 2.6 +se ale musí přízvuky a zvláštní znaky za zapsat +přímo jako znak UTF-8. @code{convert-ly} nedokáže převést všechny +znaky LaTeXu, takže se musí kvůli aktualizaci starých souborů LilyPond převzít ručně. + + +@node Vyvolání convert-ly +@section Vyvolání @command{convert-ly} +@translationof Invoking convert-ly + +@command{convert-ly} používá příkaz @code{\version} pro zjištění čísla +staré verze LilyPondu ve vstupním souboru. Ve většině případů jednoduše stačí +napsat v příkazovém řádku + +@example +convert-ly -e můjsoubor.ly +@end example + +@noindent +v adresáři, v němž soubor leží. Tím je +@file{můjsoubor.ly} přímo zaktualizován a původní soubor zachován v +@file{můjsoubor.ly~}. + +@warning{@command{convert-ly} vždy převádí až po poslední změnu ve skladbě, +kterou program zvládá. To znamená, že číslo @code{\version}, +které v souboru stojí po převodu, je obvykle nižší než +verze samotného @command{convert-ly}.} + +Pro převod všech souborů v adresáři se v příkazovém řádku +napíše: + +@example +convert-ly -e *.ly +@end example + +Převedenému souboru lze rovněž určit jiný název, takže původní +soubor zůstane nezměněn. K tomu se v příkazovém řádku napíše + +@example +convert-ly můjsoubor.ly > můjnovýsoubor.ly +@end example + +Program sestaví seznam s čísly všech verzí, pro které byl převod +proveden. Pokud nejsou vypsána žádná čísla verzí, je soubor +v nejnovější verzi. + +Uživatelé MacOS@tie{}X mohou příkazy spouštět přes položku nabídky +@code{Compile > Update syntax}. + +Uživatelé Windows by tyto příkazy měli spouštět v příkazovém okně, +které se obvykle nachází pod @code{Start > Příslušenství > Příkazy}. + + +@node Volby příkazového řádku pro convert-ly +@section Volby příkazového řádku pro @command{convert-ly} +@translationof Command line options for convert-ly + +Program je vyvolán následujícím způsobem: + +@example +convert-ly [@var{volba}]@dots{} @var{souborovýnázev}@dots{} +@end example + +Mohou se používat následující volby: + +@table @code +@item -e,--edit +Použít převod přímo na vstupní soubor, takže je přímo změněn. + +@item -f,--from=@var{od-čísloverze} +Nastavuje číslo verze, od kterého má převod začít. Když +tato volba není použita, odhadne @command{convert-ly} číslo verze +na základě údaje o @code{\version} v souboru. Například +@code{--from=2.10.25} + +@item -n,--no-version +Obvykle do výstupu @command{convert-ly} přidá záznam @code{\version} +k převáděnému souboru. Zadání této volby povede k potlačení tohoto chování. + +@item -s, --show-rules +Ukázat všechny známé převody a ukončit. + +@item --to=@var{po-čísloverze} +Nastavit cílovou verzi převodu. Výchozí je poslední možná verze, +kterou program zvládá. Například @code{--to=2.12.2} + +@item -h, --help +Ukázat nápovědu k použití. +@end table + +K aktualizaci úryvků LilyPondu v souborech texinfo lze použít + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +@noindent +. + +Pro zobrazení změn ve skladbě LilyPondu mezi dvěma verzemi se +napíše + +@example +convert-ly --from=... --to=... -s +@end example + + +@node Potíže s convert-ly +@section Probleme mit @code{convert-ly} +@translationof Problems running convert-ly + +Když se @command{convert-ly} používá v příkazovém okně ve Windows +na souboru, který má v názvu souboru nebo v cestě k němu mezery, +musí se celý název souboru obklopit třemi (!) dvojitými +uvozovkami: + +@example +convert-ly """D:/My Scores/Ode.ly""" > "D:/My Scores/new Ode.ly" +@end example + +Když jednoduchý příkaz @command{convert-ly -e *.ly} nepracuje, +protože je rozepsaný příkazový řádek příliš dlouhý, je také možné +@command{convert-ly} nechat běžet opakovaně ve smyčce. Tento +příklad pro UNIX převede všechny soubory @file{-ly} v nynějším +adresáři: + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +Pro příkazové okno ve Windows zní odpovídající příkaz takto: + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +Ne všechny změny ve skladbě jsou převáděny. Lze zadat jen volbu pro +výstup. Automatická aktualizace Scheme a kódu Scheme v LilyPondu +je celkem nepravděpodobná, velice pravděpodobně se zde musí provést +aktualizace ručně. + + +@node Ruční převod +@section Ruční převod +@translationof Manual conversions + +Teoreticky by mohl program jako @command{convert-ly} zvládnout všechny +změny ve skladbě. Konečně je to počítačový program, který vykládá +starou a novou verzi souboru s notovým zápisem, takže jiný počítačový program +by mohl přeložit jeden soubor do druhého.@footnote{To je každopádně možné u každého souboru LilyPond, +který neobsahuje Scheme. Když bylo v souboru použito Scheme, +potom takový soubor obsahuje úplný Turingův jazyk a my se tím dostáváme +do potíží se slavným @qq{Zastavovacím problémem} informatiky.} + +Nicméně projekt LilyPond má omezené prostředky, počet členů jeho družstva je +malý, takže ne všechny převody pracují automaticky. Dole je seznam známých potíží: + + +@verbatim +1.6->2.0: + Číslovaný bas není vždy převeden správně, obzvláště věci jako {< + >}. Matovy poznámky k řešení: + To be able to run convert-ly + on it, I first replaced all occurrences of '{<' to some dummy like '{#' + and similarly I replaced '>}' with '&}'. After the conversion, I could + then change back from '{ #' to '{ <' and from '& }' to '> }'. + Ne všechny textové popisy jsou vždy převeden správně. Ve staré skladbě + šlo seskupit více popisů závorkami, například: + -#'((bold italic) "string") + Toto je nesprávně převáděno na: + -\markup{{\bold italic} "string"} + namísto: + -\markup{\bold \italic "string"} +2.0->2.2: + Nerozumí \partcombine + Nedělá \addlyrics => \lyricsto, takže některé soubory s mnoha slokami nepracují +2.0->2.4: + \magnify není změněno na \fontsize. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag není změněn. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number není změněn. + - first-page-number no => print-first-page-number = ##f + Zalomení řádků v hlavičkách nejsou převedeny. + - \\\\ jako zalomení řádku v polích \header => \markup \center-align < + "První řádek" "Druhý řádek" > + Koncové body pro crescendo a decrescendo-Endpunkte nejsou převedeny. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (použito v \set Staff.VoltaBracket = \turnOff) není převeden správně +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } by měl být převeden na: + \markup{ \center-align {\line { ... }} } + nyní ale chybí \line. +2.4->2.6 + Zvláštní LaTeXové znaky jako $~$ v textu nejsou převedeny na UTF-8. +2.8 + \score{} nyní musí vždy začínat hudebním výrazem. Všechno ostatní +(obzvláště \header{}) smí přijít teprve po notách. +@end verbatim diff --git a/Documentation/cs/web.texi b/Documentation/cs/web.texi new file mode 100644 index 0000000000..d43cb374ce --- /dev/null +++ b/Documentation/cs/web.texi @@ -0,0 +1,315 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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 Translators: Pavel Fric + +@setfilename web.info +@settitle LilyPond -- Zápis not pro každého +@documentencoding UTF-8 +@documentlanguage cs +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2010 by the authors. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + +@afourpaper + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Czech +@end ignore + +@copying +Autorské právo @copyright{} 2009-2010 autoři. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +Tento soubor dokládá internetový výstup LilyPondu. + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@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 +* Příručka LilyPond k učení se: (lilypond-learning). Začátek je zde. +* Slovníček: (music-glossary). Překlad pojmů z angličtiny do dalších řečí. +* Příručka pro zápis not v LilyPondu: (lilypond-notation). Příručka pro zápis not v LilyPondu. +* Úryvky LilyPondu: (lilypond-snippets). Mnoho triků, rad a příkladů. +* Doporučení pro vnitřní části LilyPondu: (lilypond-internals). Vysvětlení k nastavení. +* Používání programu LilyPond: (lilypond-usage). Instalace a používání programu. +* Internetové stránky k LilyPond: (lilypond-web). Přehled nových internetových stránek. +* lilypond: (lilypond-usage)spuštění LilyPondu. Vyvolání programu LilyPond. +* abc2ly: (lilypond-usage)spuštění abc2ly. Zavedení notace ABC. +* convert-ly: (lilypond-usage)Obnova souborů pomocí convert-ly. Starší verze LilyPondu. +* etf2ly: (lilypond-usage)spuštění etf2ly. Zavedení souborů Finale. +* lilypond-book: (lilypond-usage)Kniha o LilyPondu. Vložení textu a not. +* midi2ly: (lilypond-usage)spuštění midi2ly. Zavedení MIDI. +* musicxml2ly: (lilypond-usage)spuštění musicxml2ly. Zavedení souborů MusicXML. +@end direntry + + +@c TITLE PAGE +@ifnottex +@node Začátek +@top LilyPond... Notová sazba pro každého +@translationof Top +@end ifnottex + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle Program pro sazbu not +@titlefont{Všeobecné informace} +@author Družstvo vývojářů LilyPondu + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +Pro LilyPond ve verzi @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... Notová sazba pro každého +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading Co je to LilyPond? + +LilyPond je programem pro sazbu not s otevřeným zdrojovým kódem, který byl vytvořen s cílem zajistit tisk hudebnin v té nejlepší možné jakosti. Tento program s otevřeným zdrojovým kódem umožňuje dosáhnout krásy ručně rytých tradičních notových sazeb v počítačem vysázených notách. + +@divClass{align-right} +Více se dočtete v @ref{Úvod,,úvodu}! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Old news,,,,Starší novinky}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading Přímé odkazy + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Stálá verze + +@ref{Stažení, Stažení @versionStable} + +@ref{Manuals, Manuals @versionStable} + +@subsubheading Vývojářská verze + +@ref{Development, Stažení @versionDevel} + +@ref{Development, Manuals @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* Úvod:: Se sázením not začněte zde. +* Stažení:: Stažení LilyPondu. +* Příručky:: Četba příruček. +* Společenství:: Zahájit spojení s jinými uživateli. +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@end ignore + + + + +@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 ************ + +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Čtěte + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (rozdělené HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (velké HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + Příručka je rozdělena do mnoha stránek HTML. + @*@ @ @emph{(menší stažení pro každou stránku)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + Příručka na jedné velké stránce HTML. + @*@ @ @emph{(větší jednorázové stažení, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + Příručka jako soubor PDF. + @*@ @ @emph{(větší jednorázové stažení, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/cs/web/GNUmakefile b/Documentation/cs/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/cs/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/cs/web/community.itexi b/Documentation/cs/web/community.itexi new file mode 100644 index 0000000000..32c781803b --- /dev/null +++ b/Documentation/cs/web/community.itexi @@ -0,0 +1,855 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745 + + 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 Translators: Pavel Fric + +@include included/authors.itexi +@include included/helpus.itexi + +@node Společenství +@unnumbered Společenství +@translationof Community + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Spolupráce se společenstvím + +@itemize + +@item +@ref{Spojení}: zde se vám může dostat pomoci, můžete se bavit a +zůstat ve spojení se společenstvím (vytvořilo-li se jaké). + +@item +@ref{Malé příklady}: tyto jsou @emph{velmi silně} doporučovány, +když se někdo chce bavit s druhými LilyPondu. + +@item +@ref{Hlášení chyb}: když by šlo něco špatně. + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading Zlepšení LilyPondu + +@itemize + +@item +@ref{Pomozte nám}: vaše pomoc je potřebná. + +@item +@ref{Vývoj}: pro přispěvatele a zkoušeče. + +@item +@ref{Autoři}: lidé, kteří LilyPond udělali tím, +čím je dnes. + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading Různé + +@itemize + +@item +@ref{Spisy}: to, co jsme napsali a co bylo +napsáno o nás. + +@item +@ref{Starší novinky}: archiv. + +@end itemize +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Spojení:: +* Malé příklady:: +* Hlášení chyb:: +* Pomozte nám:: +* Vývoj:: +* Autoři:: +* Spisy:: +* Starší novinky:: +@end menu +@divEnd + + +@node Spojení +@unnumberedsec Spojení +@translationof Contact + + +@divClass{column-left-bottom} +@subheading Uživatelské skupiny a pomoc + +@subsubheading Poštovní seznam uživatelů: @code{lilypond-user@@gnu.org} + +Tento poštovní seznam je tím hlavním místem, kde se spolu uživatelé baví a vzájemně +si pomáhají. Řečí seznamu je angličtina. Na možnost pomoci v jazyce německém se podívejte níže. + +@quotation +@uref{http://mail.gnu.org/mailman/listinfo/lilypond-user, +lilypond-user odběr a informace} + +@uref{http://mail.gnu.org/archive/html/lilypond-user/, +user Archiv1} +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +Archiv3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +poslat s gmane na lilypond-user} +@end quotation + +@warning{Když kladete dotazy (vždy v angličtině), používejte, +prosím, @ref{Malé příklady,,malých příkladů}!} + + +@subsubheading Sklad kousků LilyPondu + +Sklad kousků LilyPondu (LSR) je velkou sbírkou uživateli vytvořených +příkladů, které můžete volně kopírovat a používat ve svých vlastních +dílech. Podívejte se, co vytvořili jiní lidé a napište své vlastní +příklady! + +@example +@uref{http://lsr.dsi.unimi.it} +@end example + +Obzvláště poučné příklady z LSR jsou zahrnuty v naší +dokumentaci, v @ref{Snippets}. + +@subsubheading IRC + +Nějakou podporu můžete obdržet i na našem kanálu IRC: + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +Tento kanál nemá žádný veřejný archiv, takže každou otázku, která +by mohla být užitečná i pro další uživatele, by bylo lepší položit +na jednom z poštovních seznamů. + +@html +
irc name: + + + + +
+ + +@end html + +@subsubheading Jiné jazyky + +@uref{http://www.lilypondforum.de/, +Německé fórum pro LilyPond} + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-es, +Španělský poštovní seznam} + +@uref{http://groups.google.com/group/lilypond-brasil, +Portugalská skupina} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +Francouzský poštovní seznam} + +@uref{http://www.lilypondforum.nl/, +Holandské fórum} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Zůstaňte informováni + +@subsubheading LilyPond Report + +Nejjednodušší cestou, jak zůstat ve spojení, je četba zpravodaje +našeho společenství: LilyPond Reportu (v angličtině). + +@example +@uref{http://news.lilynet.net} +@end example + +@subsubheading Poštovní seznam pro nové verze: @code{info-lilypond@@gnu.org} + +Tento poštovní seznam je činný velice málo a lze jej jen číst: +zde se provádí informování o nových verzích LilyPondu. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +info-lilypond odběr a informace} + +@uref{http://mail.gnu.org/archive/html/info-lilypond/, +info Archiv1} +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +Archiv3} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading Rozprava mezi vývojáři + +@subsubheading Poštovní seznam pro vývojáře: @code{lilypond-devel@@gnu.org} + +Na tomto seznamu se nachází většina rozhovorů mezi +vývojáři. Změny se mají posílat sem. + +@quotation +@uref{http://mail.gnu.org/mailman/listinfo/lilypond-devel, +lilypond-devel odběr a informace} + +@uref{http://mail.gnu.org/archive/html/lilypond-devel/, +devel Archiv1} +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +Archiv3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +poslat s gmane na lilypond-devel} +@end quotation + + +@subsubheading Poštovní seznam pro hlášení chyb: @code{bug-lilypond@@gnu.org} + +Zde se nachází hlášení chyb a rozhovory. + +@quotation +@uref{http://mail.gnu.org/mailman/listinfo/bug-lilypond, +bug-lilypond odběr a informace} + +@uref{http://mail.gnu.org/archive/html/bug-lilypond/, +bug Archiv1} +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +Archiv3} + +@c don't include gmane posting here. -gp +@end quotation + +@warning{Předtím než napíšete nějakou zprávu na seznam pro hlášení chyb, +přečtěte si, prosím, naše směrnice pro @ref{Hlášení chyb}.} + +@divEnd + + + +@node Malé příklady +@unnumberedsec Malé příklady +@translationof Tiny examples + +@divClass{column-center-top} +@subheading Co jsou to @qq{malé příklady}? + +Malý příklad je příkladem, z něhož už nejde nic víc +odstranit. +@divEnd + +@divClass{column-left-bottom} +@subheading Proč bych je měl vytvářet? + +@divClass{keep-bullets} +@itemize + +@item +Čím je příklad jednodušší, tím rychleji mu mohou případní +pomocníci porozumět a vám pomoci. + +@item +Jednoduchý příklad ukazuje, že jste se nejdříve sami namáhali s +řešením potíží. Když lidé posílají velké úryvky kódu, +vypadá to tak, že je ani nezajímá, jestli se jim +pomůže, nebo nepomůže. + +@item +Vytváření malého příkladu vás nutí k porozumění tomu, oč +jde. Mnoha chybných hlášení potíží by se šlo vyvarovat, +kdyby se člověk nejprve pokusil o vytvoření malého příkladu. +Když ve svém malém příkladu nemůžete @qq{chybu} napodobit, +půjde nejspíš o malé porozumění LilyPondu, nikoli o chybu. + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading Jak jej mám vytvořit? + +@divClass{keep-bullets} +@itemize + +@item +Vždy vložit číslo \version. + +@item +Dělejte jej malý! Příklady na rozdělení místa nebo na rozvržení +strany mohou vyžadovat mnoho taktů not, ale většinu potíží +je možné ukázat na jednom taktu. + +@item +Když se pokoušíte o vytvoření příkladu, pokuste se nejprve +úryvek svého souboru odkomentovat @w{(@code{%} +nebo @code{%@{ @dots{} %@}})}. Když něco můžete odkomentovat, +a potíže přetrvávají, odstraňte +odkomentované úryvky. + +@item +Vyvarujte se složitých not, tónin, klíčů nebo druhů taktů, je to +pak vaše starost navíc. + +@item +Nepoužívejte @code{\override} nebo @code{\set}, pak se totiž +chyba ukazuje v souvislosti s těmito příkazy. + +@end itemize +@divEnd + +@divEnd + + + + +@node Hlášení chyb +@unnumberedsec Hlášení chyb +@translationof Bug reports + +@divClass{column-center-top} +@subheading 1. krok: Známé chyby + +Když máte vstupní kód, který vytváří pád programu nebo +chybnou sazbu not, potom je to ta chyba. Seznam se známými +chybami je při sledování chyb Google: + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{Sami, prosím, @strong{NEPŘIDÁVEJTE} nová hlášení chyb! +Když je chybu možné vidět ve sledovači chyb, +můžete sami přidat další informace.} + +@divEnd + + +@divClass{column-left-bottom} +@subheading 2. krok: Vytvoření hlášení o chybě + +Pokud se vám podařilo odhalit chybu, která není v seznamu, +pomozte nám, prosím, vytvořením hlášení o chybě. + +@warning{Hlášení o chybách přijímáme jen jako +@ref{Malé příklady,,malé příklady}. Máme velmi omezené zdroje +na zpracování hlášení o chybách, a z toho důvodu každý příklad, který není malý, +je odmítnut. Skoro každou chybu lze předvést s pomocí čtyř +anebo ještě méně not!} + +Příklad dobrého hlášení o chybě: + +@example +%% the octavation command doesn't +%% change the output at all! + +\version "2.10.0" +\relative c''' @{ + c1 + #(set-octavation 1) + c1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading 3. krok: Poslání hlášení o chybě + +Když jste se ujistili, že chyba ještě není známá, a +vytvořili hlášení o chybě, pošlete nám je, prosím! + +@divClass{keep-bullets} +@itemize + +@item +Pokud již odebíráte poštovní seznam @uref{mailto:bug-lilypond@@gnu.org, ++bug-lilypond@@gnu.org}, můžete zcela prostě poslat +dopis elektronickou poštou. + +@item +Pokud členy poštovního seznamu nejste, přesto můžete poslat +hlášení o chybě přes webové rozhraní +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +gmane lilypond.bugs}. + +Na seznamu je však přesné prověření, které brání tomu, +aby člověk dostal svůj dopis nahoru. Toto prověření je často +vyburcováno nesprávně soubory LilyPondu. Proto přidejte + +@example +> I'm not top posting. +@end example + +@noindent +(@emph{Musíte} vložit @code{>}) na začátek svého hlášení. + +@end itemize +@divEnd + +Když bylo vaše hlášení o chybě zasláno na seznam, vyšetří naši +odklízeči chyb (angl. bug squad) tuto zprávu. Počkejte, prosím, +24 hodin, neboť máme jen malý počet pomocníků. Budete případně požádáni o více informací, +nebo bude zpráva přidána do sledovače, a vy budete informováni, +jaké dostala číslo. + +Můžete chybu označit tak, že vždy obdržíte dopis, když se +pro tuto chybu přihodí nějaká činnost. K tomu potřebujete mít +účet u Google. +@divEnd + + +@node Pomozte nám +@unnumberedsec Pomozte nám +@translationof Help us + +@divClass{column-center-top} +@helpusNeed + +@divEnd + +@divClass{column-left-top} +@divClass{keep-bullets} +@helpusTasks + +@divEnd +@divEnd + +@divClass{column-right-top} +@helpusProjects + +@divEnd + + +@node Vývoj +@unnumberedsec Vývoj +@translationof Development + +@divClass{heading-center} +@ifclear web_version + @heading Vývoj pro LilyPond @version +@end ifclear +@ifset web_version + @heading Vývoj pro LilyPond @versionDevel +@end ifset + + +@warning{Zde se jedná o nestálé vývojářské verze. +Pokud nevíte přesně, jak se LilyPond instaluje a používá, +důrazně doporučujeme používat verze stálé @ref{Stažení,,Stažení} +a číst @ref{Příručky,,Příručky}.} + +@divEnd + +@divClass{column-center-top} +@subheading Čísla uveřejnění + +Jsou dvě zveřejňovací řady pro LilyPond: stálé verze +a nestálé vývojářské verze. Stálé verze mají sudé +druhé číslo verze (čili zhruba 2.8, 2.10, 2.12). +Vývojářské verze mají druhé číslo verze liché +(tedy 2.7, 2.9, 2.11). + +@divEnd + + +@divClass{column-left-top} +@subheading Stažení + +Návod pro git a sestavení se nachází v Contributor's Guide (jen v angličtině). + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, lilypond git skladiště} +@end quotation + +Spisovatelé dokumentace a zkoušeči by měli stahovat nejnovější +binární balíčky: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource + +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Příručka pro vývojářské práce (Contributor's guide) + +Vývoj LilyPondu je dosti složitou záležitostí. +Abychom pomohli novým spolupracovníkům a celý systém udrželi (slušně) +stálý, napsali jsme příručku pro vývojářské práce +(jen v angličtině). + +@docLinksBare{Příručka pro vývojářské práce, přispěvatel, + @rcontribnamed{Začátek,Příručka pro vývojářské práce}, + @manualDevelContributorSplit-cs, + @manualDevelContributorBig-cs, 500 kB, + @manualDevelContributorPdf-cs, 2.8 MB} + +@divEnd + + +@divClass{column-center-top} +@subheading Zkoušky regresí + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@uref{../../input/regression/collated-files.html, Zkoušky regresí}: +Zkoušky regresí této verze. +(@uref{../../input/regression/collated-files.pdf, Verze PDF}) + +@item +@uref{../../input/regression/musicxml/collated-files.html, Zkoušky MusicXML}: +musicXML-Zkoušky regresí této verze. +(@uref{../../input/regression/musicxml/collated-files.pdf, Verze PDF}) + +@item +@uref{../../input/regression/abc2ly/collated-files.html, abc2ly-Teste}: +abc2ly-Zkoušky této verze. +(@uref{../../input/regression/abc2ly/collated-files.pdf, Verze PDF}) + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, lilypond-book-Teste}: +lilypond-book-Zkoušky této verze. +(@uref{../../input/regression/lilypond-book/collated-files.pdf, Verze PDF}) +@end itemize + +@end ifclear + +@ifset web_version +@subsubheading Vývojářská verze + +@itemize +@item @regtestDevel (@regtestDevelPdf{}) + +@item @regtestDevelXml (@regtestDevelXmlPdf{}) + +@item @regtestDevelAbc (@regtestDevelAbcPdf{}) + +@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{}) +@end itemize + +@subsubheading Stálá verze + +@itemize +@item @regtestStable (@regtestStablePdf{}) + +@item @regtestStableXml (@regtestStableXmlPdf{}) + +@item @regtestStableAbc (@regtestStableAbcPdf{}) + +@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{}) +@end itemize + +@end ifset + + + +@subsubheading Všechny verze + +@itemize +@item @uref{http://lilypond.org/test, Porovnání dvou verzí}: + +@item @uref{http://lilypond.org/download/binaries/test-output/, +Archiv všech zkoušek regresí} + +@end itemize + +@divEnd +@divEnd + + + +@divClass{column-center-bottom} +@subheading Příručky + +@ifclear web_version +@warning{tyto příručky jsou pro LilyPond @version{}; nejnovější +příručky se nacházejí na @url{http://lilypond.org}.} +@end ifclear + +@divClass{normal-table} +@multitable @columnfractions .3 .3 .3 +@headitem Úvod +@item +@docLinkSplit{Lernen,learning,@manualDevelLearningSplit-cs} +@tab +@docLinkBig{Lernen,learning,@manualDevelLearningBig-cs} +@tab +@docLinkPdf{Lernen,learning,@manualDevelLearningPdf-cs} + +@item +@docLinkSplit{Glossar,music-glossary,@manualDevelGlossarySplit-cs} +@tab +@docLinkBig{Glossar,music-glossary,@manualDevelGlossaryBig-cs} +@tab +@docLinkPdf{Glossar,music-glossary,@manualDevelGlossaryPdf-cs} + +@item +@docLinkSplit{Aufsatz,essay,@manualDevelEssaySplit-cs} +@tab +@docLinkBig{Aufsatz,essay,@manualDevelEssayBig-cs} +@tab +@docLinkPdf{Aufsatz,essay,@manualDevelEssayPdf-cs} + +@headitem Často používané příručky + +@item +@docLinkSplit{Notation,notation,@manualDevelNotationSplit-cs} +@tab +@docLinkBig{Notation,notation,@manualDevelNotationBig-cs} +@tab +@docLinkPdf{Notation,notation,@manualDevelNotationPdf-cs} + +@item +@docLinkSplit{Benutzung,usage,@manualDevelUsageSplit-cs} +@tab +@docLinkBig{Benutzung,usage,@manualDevelUsageBig-cs} +@tab +@docLinkPdf{Benutzung,usage,@manualDevelUsagePdf-cs} + +@item +@docLinkSplit{Schnipsel,snippets,@manualDevelSnippetsSplit-cs} +@tab +@docLinkBig{Schnipsel,snippets,@manualDevelSnippetsBig-cs} +@tab +@docLinkPdf{Schnipsel,snippets,@manualDevelSnippetsPdf-cs} + + +@headitem Zřídka používané příručky + +@item +@docLinkSplit{Webseite,web,@manualDevelWebSplit-cs} +@tab +@docLinkBig{Webseite,web,@manualDevelWebBig-cs} +@tab +@docLinkPdf{Webseite,web,@manualDevelWebPdf-cs} + +@item +@docLinkSplit{Veränderungen,changes,@manualDevelChangesSplit-cs} +@tab +@docLinkBig{Veränderungen,changes,@manualDevelChangesBig-cs} +@tab +@docLinkPdf{Veränderungen,changes,@manualDevelChangesPdf-cs} + +@item +@docLinkSplit{Erweitern,extending,@manualDevelExtendingSplit-cs} +@tab +@docLinkBig{Erweitern,extending,@manualDevelExtendingBig-cs} +@tab +@docLinkPdf{Erweitern,extending,@manualDevelExtendingPdf-cs} + +@item +@docLinkSplit{Interna,internals,@manualDevelInternalsSplit-cs} +@tab +@docLinkBig{Interna,internals,@manualDevelInternalsBig-cs} +@tab +@docLinkPdf{Interna,internals,@manualDevelInternalsPdf-cs} + +@ifset web_version +@headitem Ke stažení + +@item +@doctarballDevel +@end ifset + +@end multitable + +@divEnd +@divEnd + + + +@node Autoři +@unnumberedsec Autoři +@translationof Authors + +@divClass{column-left-top} +@subheading Současné družstvo vývojářů + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Předchozí družstvo vývojářů + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading Současní přispěvatelé + +@divClass{keep-bullets} +@subsubheading Programování + +@coreCurrent + +@subsubheading Písmo + +@fontCurrent + +@subsubheading Dokumentace + +@docCurrent + +@subsubheading Odklízeči chyb + +@bugsquadCurrent + +@subsubheading Podpora + +@supportCurrent + +@subsubheading Překlad + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Předchozí přispěvatelé + +@divClass{keep-bullets} +@subsubheading Programování + +@corePrevious + +@subsubheading Písmo + +@fontPrevious + +@subsubheading Dokumentace + +@docPrevious + +@c uncomment when we have any previous members -gp +@c @subsubheading Bug squad + +@c @bugsquadCurrent + +@subsubheading Podpora + +@supportPrevious + +@subsubheading Překlad + +@translationsPrevious + +@divEnd +@divEnd + + + +@node Spisy +@unnumberedsec Spisy +@translationof Publications + +@divClass{column-center-top} +@subheading Co jsme napsali o LilyPondu + +@divClass{keep-bullets} + +@include we-wrote.itexi + +@divEnd +@divEnd + + +@divClass{column-center-bottom} + +@subheading Co jiného se dělalo s LilyPondem + +@divClass{keep-bullets} + +@include others-did.itexi + +@divEnd +@divEnd + +@contactUsAbout{vědecké články} + + +@node Starší novinky +@unnumberedsec Starší novinky +@translationof Old news + +@include web/news-front.itexi + +@include web/news.itexi diff --git a/Documentation/cs/web/download.itexi b/Documentation/cs/web/download.itexi new file mode 100755 index 0000000000..ed71c06c67 --- /dev/null +++ b/Documentation/cs/web/download.itexi @@ -0,0 +1,608 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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 Translators: Pavel Fric + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond je @strong{textově založený} program pro notový zápis, +podobá se spíše programovacímu jazyku než nějakému grafickému +programu pro sazbu not. Předtím než si LilyPond stáhnete, přečtěte si, +prosím, o našem @ref{Textový vstup,,textovém vstupu}.} +@end macro + +@node Stažení +@unnumbered Stažení +@translationof Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want verisonDevel here, since the online links + @c for @version won't be up yet! + @heading Downloads for LilyPond @versionDevel + +Odkazy na stálou verzi LilyPondu se nacházejí na +@uref{http://lilypond.org, lilypond.org} +@end ifclear +@ifset web_version + @heading Stažení pro LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{column-left-top} +@subheading Pro uživatele + +@itemize + +@item +@c TODO: duplicate to avoid underlined refs in HTML? icky. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux a FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Pro vývojáře + +@itemize + +@item +@ref{Zdroje}: +Pro tvůrce balíčků + +@item +@ref{Stará stažení}: +Staré verze + +@item @ref{Vývoj}: +Poslední nestálá verze + +@end itemize +@divEnd + + +@divClass{column-center-bottom} + +@subheading Povolení k programu + +LilyPond je zveřejněn pod +@ref{GPL, GNU General Public License}. +@divEnd + + +@divClass{color1} + +@subheading Sponzoři + +Velmi děkujeme @uref{http://www.vt.edu/, Virginia Tech} a +@uref{http://www.linuxaudio.org/, linuxaudio.org}, kteří +platí šířku pásma. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Zdroje:: +* Stará stažení:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Generické balíčky nebo distribuční balíčky? + +Mnohé distribuce LilyPond obsahují ve svém běžném systému +balíčků. Tyto verze se jednoduše instalují a naopak lépe +odstraňují než generické balíčky, ale mohou být starší. +Pokud chcete používat naše generické balíčky, nejprve ze svého +systému pomocí správce balíčků odstraňte veřejnou verzi. Přečtěte si +dokumentaci ke své distribuci věnovanou nastavení správce balíčků. + +@divEnd + + +@divClass{column-left-top} +@subheading Generické balíčky + +@subsubheading Stažení + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(Máte-li pochybnosti, potom) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Instalace + +V příkazovém řádku napište + +@example +cd CESTA_K_ADRESÁŘI_SE_STAŽENÝMI_SOUBORY +sh lilypond-@versionStable{}-OS-ART.sh +@end example + +@subsubheading Odstranění + +V příkazovém řádku napište + +@example +uninstall-lilypond +@end example + +@divEnd + +@divClass{column-right-top} +@subheading Sestavení souboru + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Zvláštní distribuční balíčky + +Použijte, prosím, správce balíčků své distribuce k +nainstalování nebo aktualizaci této verze. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.2} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.2} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://download.opensuse.org/repositories/openSUSE:/Factory:/Contrib/standard/, +openSUSE: LilyPond 2.12.2} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X +@translationof MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Balíčky + +@subsubheading Stažení + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Pro procesory značky Intel (máte-li pochybnosti, používejte tuto verzi). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +Pro procesory G3 a G4 (staré počítače Apple). + +@end itemize + +@subsubheading Instalace + +Dvakrát klepněte na stažený soubor, pak jej táhněte +tam, kde chcete program uložit. + +@subsubheading Odstranění + +Odstraňte adresář LilyPond.app. + +@divEnd + + +@divClass{column-right-top} +@subheading Sestavení souboru + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Používání v příkazovém řádku + +@warning{Pokud jste spokojen s rozhraním, těchto příkazů, +prosím, nevšímejte.} + + +@subsubheading MacOS X v příkazovém řádku + +Nejjednodušším způsobem, jak vyvolat lilypondovské skripty, je nějaké +@qq{Pomocnéskripty} vytvořit. + +@enumerate + +@item +Vytvořte adresář, ve kterém budou tyto skripty uloženy: + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Vytvořte soubor s názvem @command{lilypond} a +obsahem: + +@help obvious css issue to be dealt with. :( +@c we need a small font here to fit. -gp +@smallexample +exec @var{ADR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end smallexample + +@warning{@var{ADR} je obvykle @code{/Applications/}} + + +@item +Vytvořte podobné soubory @command{lilypond-book}, +@command{convert-ly} a další skripty, jež hodláte používat, +přičemž nahraďte @command{bin/lilypond} pomocí @command{bin/convert-ly} +(nebo jinými názvy programů). + + +@item +Udělejte soubor spustitelný: + +@example +chmod u+x lilypond +@end example + + +@item +Nyní adresář musíte přidat do vaší cesty. Změňte +(nebo vytvořte) soubor s názvem @code{.profile} ve +svém domovském adresáři (home), takže obsahuje: + +@example +export PATH=$PATH:~/bin +@end example + +Tento soubor by měl končit jedním prázdným řádkem. + +@end enumerate + + +@subsubheading Vyvolání jednotlivých skriptů + +Skripty -- jako @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly} a také sám @command{lilypond} -- jsou obsaženy +v souboru @code{.app} pro MacOS@tie{}X. + +Skripty mohou být stejně tak vyvolány z příkazového řádku tak, +že člověk je vyvolá přímo: + +@example +@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond +@end example + +Totéž platí i pro všechny ostatní skripty v tomto adresáři, jako jsou +@command{lilypond-book} a @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Balíčky + +@subsubheading Stažení + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Für Windows 2000, XP, Vista, and Windows 7. + +@end itemize + +@subsubheading Instalace + +@enumerate + +@item +najděte stažený soubor a dvakrát poklepejte, abyste spustil +instalační program. Následujte pokyny, které vám instalátor +dává; doporučujeme vám přijmout všechny instalační volby +a souhlasit s výchozím instalačním adresářem. +Když je instalátor hotov, klepněte na @qq{Dokončit}. +LilyPond je nyní nainstalován. + +@end enumerate + +@subsubheading Odstranění + +Pro odstranění LilyPondu, můžete buď + +@enumerate + +@item +vyhledat adresář s LilyPondem ve spouštěcí nabídce a klepnout na @qq{Odinstalovat}. +Když je odinstalátor hotov, klepněte na @qq{Dokončit}, + +@item +nebo přes správu systému přejděte na správu programů, najděte +záznam s LilyPondem a zvolte jeho odstranění. Když je odinstalátor hotov, +klepněte na @qq{Dokončit}. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Sestavení souboru + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Používání v příkazovém řádku + +@warning{Pokud jste spokojen s rozhraním, těchto příkazů, +prosím, nevšímejte.} + +@subsubheading Windows v příkazovém řádku + +Nejjednodušším způsobem, jak LilyPond používat, je, přidat instalační +adresář do proměnné prostředí @qq{Cesta}. + + +@enumerate +@item +Otevřete @qq{Systém} ze správy systému, vyberte kartu +@qq{Pokročilé} a klepněte na proměnné prostředí. + +@item +Vyberte proměnnou @qq{Cesta} v seznamu s proměnnými prostředí +a klepněte na Upravit. Obdržíte okno s nadpisem +@qq{Upravit systémovou proměnnou}, do pole +@qq{Hodnota proměnné} přidejte název adresáře s programem, +nějak tak: + +@example +[@var{přednastavená cesta - PATH}];@var{ADR}\LilyPond\usr\bin +@end example + +@warning{@var{ADR} je obvykle @code{C:\Program Files}.} + +@noindent +a klepněte na @qq{OK} pro uzavření okna. + +@end enumerate + +@subsubheading Vyvolání jednotlivých programů + +LilyPond-Programme +-- jak mohou být lilypond, lilypond-book, convert-ly a tak dále -- +vyvolány z příkazového řádku: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Zdroje +@unnumberedsec Zdroje +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{@strong{Nedoporučujeme}, abyste si sám vyzkoušel +sestavení LilyPondu ze zdrojových souborů. Téměř všichni +uživatelé mají více výhod z používání předsestavených verzí.} + +@divClass{column-left-bottom} +@subheading Zdrojová koule v táru + +@downloadStableSource-cs{} + +Na důkladný seznam se všemi verzemi (starými a novými) se podívejte na +naše +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, Stránky pro stažení}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Příkazy pro sestavování + +Příkazy se nacházejí v @rcontribnamed{Compiling LilyPond,Sestavení LilyPondu}. + +@divEnd + + +@node Stará stažení +@unnumberedsec Stará stažení +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Všechny verze + +Na důkladný seznam se všemi verzemi (starými a novými) se podívejte na +@uref{http://download.linuxaudio.org/lilypond/binaries/, Stránky pro stažení}. + +@divEnd + + +@node GPL +@unnumberedsec GPL +@translationof GPL + +@divClass{column-center-top} +@subheading Povolení k programu + +GNU LilyPond je zveřejněn pod GNU General Public License. +Úvod do povolení a naše důvody pro tuto volbu +naleznete v @ref{Svoboda}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd + + + diff --git a/Documentation/cs/web/introduction.itexi b/Documentation/cs/web/introduction.itexi new file mode 100644 index 0000000000..e1290089a1 --- /dev/null +++ b/Documentation/cs/web/introduction.itexi @@ -0,0 +1,1252 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213 + + 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 Translators: Pavel Fric + +@node Úvod +@unnumbered Úvod +@translationof Introduction + +@divClass{column-center-top} +@subheading Náš cíl + +@imageFloat{flat-design,png,right} + +LilyPond vznikl, když dva hudebníci chtěli překročit mrtvé a bezduché vzezření počítačem řízeného tisku hudebnin. Všichni hudebníci chtějí číst pěkné noty, proč by tedy programátoři nemohli napsat program, který by dovedl sázet nádherné orchestrální hlasy? + +Výsledkem se stal systém, který hudebníky osvobozuje od podrobností +uspořádání notové sazby, takže se mohou cele soustředit na tvorbu not. +LilyPond s nimi spolupracuje na tom, aby +sazba not dosáhla profesionální jakosti, jež je postavena na +celém souhrnu zkušeností a zvyklostech klasické notové sazby. +@divEnd + +@divClass{column-left-top} +@subheading Schopnosti LilyPondu + +@itemize + +@item +@ref{Vlastnosti}: Co LilyPond dokáže? + +@item +@ref{Příklady}: Chci vidět noty! + +@item +@ref{Svoboda}: LilyPond je Open Source. + +@item +@ref{Pozadí}: Naše představa krásy notové sazby opírající se o počítač. + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading Nasazení Lilypondu + +@itemize + +@item +@ref{Tvorba}: Skutečná použití LilyPondu. + +@item +@ref{Posudky}: Co se tak o nás říká? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading Jak LilyPond pracuje + +@itemize + +@item +@ref{Textový vstup}: Píšete noty jako @emph{Text}?! + +@item +@ref{Snadnější úpravy}: Jiné možnosti práce s LilyPondem. + +@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 +* Vlastnosti:: Co může LilyPond dělat? +* Příklady:: Chci vidět nějaké noty! +* Svoboda:: Svoboda a GPL. +* Pozadí:: Počítačová estetika. +* Tvorba:: Používání LilyPondu ve skutečném životě. +* Posudky:: Co o něm říkají lidé? +* Textový vstup:: Vy píšete noty text?! +* Snadnější úpravy:: Jiné způsoby práce s LilyPondem. +@end menu +@divEnd + + + +@node Vlastnosti +@unnumberedsec Vlastnosti +@translationof Features + + + +@divClass{column-center-top} +@subheading Vkusnost + +@subsubheading Vynikající klasická notová sazba + +@imageFloat{flat-design,png,right} + +Používáním LilyPondu obdržíte vkusnou notovou sazbu, +která se snadno čte. Vývojářská společnost programátorů +strávila tisíce hodin tím, aby vyvinula mocný program určený +pro sazbu not, který vydá krásnou notovou sazbu automaticky. +Všechna stylistická nastavení, návrh písma a algoritmy +LilyPondu byly podníceny nejlepšími ručně vyrytými +příklady not. Výstup z +LilyPondu má shodný vzhled, vyvážený a vkusný vzhled, +jaký mají nejlepší ryté klasické notové zápisy. +Více k tomu v našem @ref{Článek,,článku}. + + +@subsubheading Účinné nastavení rozvržení + +Travte méně času tím, že budete dodatečně měnit notovou +sazbu: LilyPond upravuje noty správně hned od začátku. +Rozdělení místa vypočítá sám a rovněž spočítá +zalomení řádků a stran, aby vytvořil hustý a pravidelný +obraz not. Střety mezi textem písně, notami a akordy +jsou vyřešeny a všechny obloučky jsou automaticky +správně ohnuty! + +@divEnd + +@divClass{color2} +@subheading Jednoduše při používání + +@imageFloat{lilypond-book,png,right} + + +@subsubheading Textově založený vstup + +LilyPond odebírá textový vstup ASCII, jejž můžete vytvořit s pomocí svého +oblíbeného textového editoru, rychle a pohodlně. Vstup obsahuje všechny +informace, takže si člověk nemusí pamatovat žádné složité sledy příkazů. +Vstup ukládejte jednoduše do textového souboru +pro pozdější využití. + +@subsubheading Spojení not a textu + +Do textu můžete vložit kousky s notami, aniž byste vyjmul obrázky +a vložil je. S LilyPondem se dají noty souvisle vložit do @LaTeX{} nebo HTML, +a pomocí OOoLilyPond se dají začlenit i do dokumentů OpenOffice.org. +Jsou také přídavné moduly, s nimiž je kód z LilyPondu umožněn pro různé +deníky a stránky wiki, tudíž je možná i společná práce +přes internet. + + +@subsubheading Svoboda při omezeních + +Textově založený vstup umožňuje psaní notového zápisu i +lidem s těžkým tělesným postižením. Uživatelé s +omezením pohybu, kteří klávesnici nebo myš používat nemohou, +mohou s pomocí programu na rozpoznávání řeči soubory LilyPondu +upravovat. A dokonce i úplně slepí uživatelé mohou s pomocí +čtečky obrazovky vytvářet soubory LilyPondu -- zcela nemožné +s na obrazu založenými programy pro zápis not. + + +@subsubheading Rozšiřitelný návrh + +Všechna nastavení mohou být změněna, aby odpovídala vaší osobní +typografické chuti. Pokud vám to stále ještě nestačí, +je tu ještě vždy vestavěný skriptovací jazyk, který se nazývá +Scheme, nářečí mocného jazyka LISP. Nastavení, proměnné +a funkce jsou všechny vyloženy v podrobné příručce k +programu. + +@divEnd + +@divClass{color3} + +@subheading Prostředí + +@imageFloat{frescobaldi-lilypond-editor-small,png,right} + +@subsubheading Svobodné programy + +LilyPond lze stáhnout bez jakéhokoli placení! +Skutečně je zcela zadarmo! Získejte jej na +stránkách pro stahování. + +Jedná se o svobodný program, který je společně se zdrojovým kódem +poskytnut k volnému použití -- s dovolením měnit jej a +kopírovat. Vadí vám nějaká chyba nebo naléhavě +potřebujete nějakou novou funkci? Napište ji jednoduše sami, +nebo zaplaťte někoho, kdo to pro vás udělá. + + +@subsubheading Vynikající podpora + +LilyPond je tu pro všechny rozšířené operační systémy: GNU/Linux, +MacOS X aWindows. LilyPond má podrobnou dokumentaci a +stovky souborů s příklady. Je tu čilá společnost uživatelů, +která odpovídá na otázky na poštovním seznamu LilyPondu, +zatímco družstvo vývojářů umožňuje rychlé řešení obtíží. + + +@subsubheading Pokročilé editory + +Někteří vývojáři, kteří jsou sami výkonnými uživateli LilyPondu, napsali +zvláštní nástroje, které mají být nápomocny při rychlejším a účinnějším +vytváření a úpravách souborů LilyPondu. Na některé příklady se +podívejte v @ref{Snadnější úpravy,,snadnějších úpravách}. + +@divEnd +@divClass{column-center-bottom} +@subheading A co teď? + +Ještě nejste přesvědčen? Potom si prohlédněte některé skutečné +@ref{Příklady,,příklady}. Když už jste se rozhodl, že +LilyPond vyzkoušíte, přečtěte si nejprve o našem +@ref{Textový vstup,,textovém vstupu}. +@divEnd + + + +@node Příklady +@unnumberedsec Příklady +@translationof Examples + +LilyPond je velmi mocný a ohebný nástroj, který dokáže zacházet s notovou sazbou různého druhu. Prohlédněte si naše příklady a nechte se jimi podnítit! + +@newsItem +@subsubheading Klasická hudba + +Toto varhanní preludium od J. S. Bacha je vhodný příkladný +projekt sazby not s LilyPondem. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Složitý notový zápis + +Tento příklad z @emph{Goyescas} od Enriquea Granadose ukazuje +některé z pokročilých funkcí notové sazby, mezi jiným +trámce mezi notovými řádky, hlavičky nad notovými řádky přes a +čáry pořadí hlasů. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Stará hudba + +LilyPond má podporu pro různé druhy notového zápisu +staré hudby, jakým je například tento úryvek gregoriánského +chorálu. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Současná hudba + +Dnešní hudební skladatelé zjistí, že LilyPond se +velmi dobře hodí k tomu, aby popsal neobvyklý notový zápis. +Zde úryvek z @emph{Čáry} od Trevora Bači pro sólo basové flétny. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Účinné, pružné vytváření materiálu představení + +Rozdílný materiál představení lze vytvářet z téhož zdrojového +kódu. Zde úryvek z Händelova @emph{Giulio +Cesare}, napsán @uref{http://nicolas.sceaux.free.fr/, +Nicolasem Sceauxem}, jako notový zápis, klavírní výtah a jako hlas houslí. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Tabulatura + +LilyPond podporuje tabulaturový notový zápis, který může být uzpůsoben +pro oblíbený nástroj, který tabulaturový notový zápis nasazuje. +Tabulaturová osnova je vytvořena automaticky na základě not, +které člověk zapsal pro pětilinkovou notovou osnovu. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Schenkerovy obrazce + +Běžný notový obraz se může velmi hodně změnit. Zde působivý Schenkerův rozbor od Krise Schaffera vytvořený LilyPondem +pro jeden článek @uref{http://www.linuxjournal.com/article/8364 , Linux Journal}. +Barvy byly přidány pro objasnění. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Vokální hudba + +LilyPond se vynikajícím způsobem hodí pro zápis vokální hudby všeho druhu +od chvalozpěvů po operu. Zde jedno středověké moteto +s nepatrnými zvláštními požadavky. +Hlas tenoru je zapsán v jiném druhu taktu než +ostatní hlasy, je ale srovnán s jinými hlasy, +jako kdyby měl týž druh taktu. LilyPond si s tím dokáže +poradit velmi vkusně. Všimněte si také začátku +s klíči ve stylu Vaticana, přeškrtnutých nožiček not pro +vydané noty a ligaturových závorek nad určitými skupinami not. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Použití pro hudební výchovu + +LilyPond se dokonale hodí pro použití v hudební výchově. +Zde příklad jednoduché úlohy z +kontrapunktu. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Popová hudba + +Je jednoduché vytvořit list s písničkou s melodií, textem a akordy jakož i +symboly hmatů. V tomto příkladu jsou zařazeny některé +přednastavené nákresy hmatů, ale tyto lze zcela přizpůsobit tak, +aby odpovídaly téměř jakékoli situaci. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Velké projekty + +LilyPond se znamenitě hodí pro velké projekty, jako jsou opery nebo díla pro velký symfonický orchestr. Dodatečně umožňuje textově založený +vstup větší svobodu na překážkách -- následující příklad +byl dán k volnému použití slepým skladatelem Hu Haipengem. + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading A co teď? + +Ještě pořád nejste přesvědčen? LilyPond je programem s otevřeným +zdrojovým kódem a zaručuje vám @ref{Svoboda,,svobodu}. Pokud jste se již rozhodl, že +LilyPond vyzkoušíte, přečtěte si nejprve o našem +@ref{Textový vstup,,textovém vstupu}. +@divEnd + + +@node Svoboda +@unnumberedsec Svoboda +@translationof Freedom + +@divClass{column-center-top} +@subheading Svobodné programy + +@uref{http://www.gnu.org/, GNU} LilyPond je napsán a udržován +společností nadšenců. +Je vydán pod @ref{GPL, GNU General Public License} a +@ref{FDL, GNU Free Documentation License}, takže +každý je svobodný v tom, že může odstraňovat chyby, měnit program +nebo jej rozšiřovat. Uživatele nabytí programu pro vytváření +krásné notové sazby nemá stát tisíce korun českých. +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading Jaký užitek mají uživatelé? + +@itemize + +@item +Žádné náklady: Nahrajte program a vyzkoušejte jej. Co +můžete ztratit? + +@item +Sdílení: Pokud program shledáte být dobrým, můžete jeho kopii předat dál svým přátelům, učitelům, studentům nebo kolegům! + +@item +Zdrojový kód po ruce: Jestliže by vás zajímalo, jak LilyPond +vytváří určitý notový zápis, můžete přesně sledovat, +jak si program počíná. + +@item +Rozšiřitelnost: Můžete přidávat vlastnosti, odstraňovat chyby +a měnit funkčnost. Pokud nejste programátorem, +můžete zaměstnat někoho, kdo za vás tento úkol +převezme. + +Toto snad příležitostnému hudebníkovi nebude znít jako výhoda, +ale možnost program rozšířit se může ukázat jako velmi cenná +pro vážné skladatele, vydavatelství not a +vědce. + +@item +Jistota pro budoucnost: Když nějaký závod udělá úpadek, co +se pak děje s elektronickými notami, které závisí na jeho +programech? Takové starosti u LilyPondu mít nemusíte: +i kdyby celé vývojářské družstvo najednou přestalo +(což je velice nepravděpodobné), přesto je program stále ještě +na internetu k dalšímu používání, měnění +nebo ke kopírování. + + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading Proč @qq{dávají} vývojáři LilyPondu svou práci zdarma? + +Většina z nich vidí svou vývojářskou práci na LilyPondu jako +svého koníčka nebo jako dobrovolnickou práci. Jeden by se tedy vlastně musel ptát: +@qq{Proč lidé něco dělají dobrovolně}? + +@itemize + +@item +Potěšení: Práce na jednom cíli může velmi nadchnout, obzvláště +když člověk může pracovat v jednom družstvu. + +@item +Stejné cíle: My všichni chceme pěkně vysázené noty, ale jen málo +lidí má schopnosti (a nikdo nemá čas) k tomu, aby napsal +program, který by dokázal zvládnout všechny případy. Ale tím, že +pracujeme společně -- jeden vylepšuje podobu obloučků, jiný +vylepšuje kód pro automatické trámce a třetí +píše dokumentaci o tom, jak mohou být tyto vlastnosti +používány -- můžeme našeho cíle dosáhnout, takže +každý obstará jen jeden zlomek času, který by na tu práci potřeboval +jednotlivec. + +@item +@qq{Dárková kultura}: Hnutí za svobodné programy (nebo @qq{otevřený zdrojový kód}) +stvořil mnoho velkolepých programů, například +@uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox} a +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Jako poděkování +za prospěch, který z takových projektů mají, +chtějí někteří vývojáři dát společnosti @qq{něco +zpět}. + +@item +Pracovní zkušenost: Přispět nějakému projektu s otevřeným zdrojovým kódem +je dobrý způsob, jak se pocvičit v programování, psaní a překládání +dokumentace nebo v návrhu. Toto cvičení pomohlo některým vývojářům +při získání pracovní nabídky nebo stipendia. + + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading A co teď? + +Ještě nejste přesvědčen? Přečtěte si náš důkladný +článek o filozofii notové sazby v @ref{Pozadí,,pozadí}. +Pokud už jste se rozhodl, že +LilyPond vyzkoušíte, přečtěte si nejprve o našem +@ref{Textový vstup,,textovém vstupu}. +@divEnd + + +@node Pozadí +@unnumberedsec Pozadí +@translationof Background + +@divClass{column-center-top} +@subheading Článek k pozadí + +Napsali jsme podrobný článek, který popisuje smysl pro krásu, +co se týče počítačů: umění, vytváření krásy s pomocí +počítače. + +Pokud pouze hledáte krátký úvod do LilyPondu, je pro vás v +článku pravděpodobně příliš materiálu. Pokud jej chcete +číst nyní, přejděte na @ref{Článek,,článek}. +@divEnd + +@divClass{column-center-bottom} +@subheading A co teď? + +Ještě stále nejste přesvědčen? Přečtěte si o některých +@ref{Tvorba,,tvorbách} našich uživatelů a na noty se podívejte. +Pokud už jste se rozhodl, že +LilyPond vyzkoušíte, přečtěte si nejprve o našem +@ref{Textový vstup,,textovém vstupu}. +@divEnd + + +@node Tvorba +@unnumberedsec Tvorba +@translationof Productions + +@divClass{column-left-top} +@subheading Koncerty + +Sazba not v LilyPondu byla při různých představeních nasazena po celém světě. +Několik pozoruhodných událostí: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire étrangère}, Opera od +@uref{http://valentin.villenave.net/,Valentin Villenave} s +francouzským libretem od +@uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis Trondheim}, byla poprvé uvedena 1. února 2009 v +@uref{http://www.orchestre-montpellier.com/, L'Opéra de Montpellier}. + + +@item +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque} +představení Lullyho @emph{Armide} 15--16 května 2009 v Houstonu, +Texas (notová sazba od @uref{http://nicolas.sceaux.free.fr/, +Nicolase Sceauxe}). + +@item +Ukázky nástrojů od Rameause @emph{Hippolyte et Aricie} v +St. James Church na Manhattanu 8. května 2009 od Fredericka +Renze a jeho souboru @uref{http://www.earlymusicny.org/, +Early Music New York} (notová sazba od Nicolase Sceauxe). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Vydávané noty + +@divClass{keep-bullets} +@itemize + +@item +@uref{http://www.mutopiaproject.org/index.html, Mutopia Project}, +přes 1500 skladeb klasické hudby k volnému stažení not a +pro LilyPond ta nejlepší reklama. + +@c don't make this "Mutopia" a link, since that looks silly. +@item +@uref{http://etudeapp.com, Etude}, @qq{Notová sazba pod omamnými látkami} je +jeden program pro zařízení iPhone, klavírní hudba, vysázená LilyPondem. K tomu +náleží četné skladby z Mutopie. Program také obsahuje zdánlivou +klaviaturu, která ukazuje, které klávesy se musí stisknout, aby +při čtení not pomohl začátečníkům. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing}, +jakostně vysoce hodnotné notové zápisy církevní hudby, jak pro +přímé stažení tak i k dostání na papíře. + +@item +@uref{http://shadylane.fr/, The Shady Lane +Publishing}, +@qq{Mikrovydavatelství not}, které si dalo za cíl +podporu nové ekonomie hudby, které stojí hudebníkům a +milovníkům hudby blíže. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading A co teď? + +Ještě nejste přesvědčen?  Přečtěte si některé @ref{Posudky,,posudky} +od našich uživatelů. Když už jste se rozhodl, že +LilyPond vyzkoušíte, přečtěte si nejprve o našem +@ref{Textový vstup,,textovém vstupu}. +@divEnd + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/testimonials + +@node Posudky +@unnumberedsec Posudky +@translationof Reviews + +@divClass{column-left-top} +@subheading Zveřejněné články + +@divClass{keep-bullets} +@itemize + +@item +Září 2009 + +Německý časopis pro uživatele Linuxu napsal +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +Článek o LilyPondu}. + +@item +Srpen 2009 + +Ann Drinan předkládá na stránkách +@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org} +poznámky dvou orchstrálních knihovníků, kteří se baví o používání +programů ke správě jejich knihoven. + +@item +Únor 2008 + +Na @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, +Články na jeho stránkách} všeobecně srovnává Andrew Hawryluk Finale +a LilyPond a podrobně vypočítává schopnosti obou +programů při sazbě not. Druhý článek je informativním +rozborem notové sazby +Rachmaninova klavírního preludia 6, a porovnáním s +ručně rytým vydáním. + +@item +Červen 2006 + +@uref{http://distrowatch.com,DistroWatch} uděluje LilyPondu +cenu a +@uref{http://distrowatch.com/weekly.php?issue=20060605,píše} +@qq{Ladies and Gentleman, we are pleased to announce that, based +on readers' requests, the DistroWatch May 2006 donation has been +awarded to LilyPond (@euro{} 190.00) and Lua (US$250.00).} + +@item +Prosinec 2005 + +@uref{http://linuxjournal.com,Linux Journal} zveřejňuje +článek pod názvem +@uref{http://www.linuxjournal.com/article/8364, Make Stunning +Schenker Graphs with GNU LilyPond}. Jedná se o do hloubky jdoucí, +ale velmi účelný článek s vyrytými ostrými obrázky +LilyPondu. Autor Kris Shaffer poznamenává: +»GNU Lilypond vytváří krásnou grafiku, která se ve vztahu k obchodním nabídkám +jeví jako druhá volba.« + +@item +20. srpna 2005 + +Belgické noviny De Standaard zkoumají, co pobízí autory +svobodných programů v článku +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} (Neziskové strany +vědění) ve svém `DS2 bijlage'. LilyPond je používán jako příklad +a článek je rozdělen pomocí výtahů z rozhovoru vedeného elektronickou +poštou s Janem Nieuwenhuizenem. Tímto současně LilyPond +přichází poprvé do velkého tištěného tisku. + +@item +Červen 2005 + +Francouzský článek o LilyPondu ve verzi 2.6 se objevuje na +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +Říjen 2004 + +Vydavatelé holandského časopisu Computer!Totaal, +který se věnuje počítačům, +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, +popisují LilyPond} ve vydání z října 2004 jako: @qq{báječný +svobodný (Open Source) program [...] Noty vytvořené LilyPondem +jsou bez výjimky nádherné [...] Jde o velmi silný systém, který +umí skoro vše.} + +@item +Červenec, srpen 2004 + +Dave Phillips napsal úvodní článek pro +@uref{http://linuxjournal.com,Linux Journal}: At +the sounding edge: LilyPond, díl +@uref{http://www.linuxjournal.com/article/7657, první} a +@uref{http://www.linuxjournal.com/article/7719, druhý}. + +@item +Březen 2004 + +Chris Cannam +@uref{http://www.all-day-breakfast.com/cannam/linux-musician/lilypond.html,interviewte} +Han-Wen Nienhuys a Jan Nieuwenhuizen na linuxmusician.com +(prvotní stránky už nejdou). Rozhovor byl probírán také +v jednom článku na @uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, +slashdot Story}. + +@item +Únor 2004 + +Džezový zpěvák Gail Selkirk píše o +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Diving into LilyPond}. @qq{... člověk může vytvářet listy s písničkami nebo celé +noty pro orchestr, a výsledek jej potom dokáže hezky +překvapit.} +@uref{http://www.computermusic.co.uk/, Computer Music Special}, +číslo CMS06. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading Doporučení od uživatelů + + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, první violoncello, New York Philharmonic + +@qq{@dots{} Napsal jsem několik kusů přídavků pro sólové violoncello + a vytiskl je pomocí LilyPondu. Mají být vydány u Schirmera. Jsem + si jistý, že vaše vlastní verze není vyryta ani z poloviny tak ostře, jako + ta moje!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, profesor kompozice, Musikhochschule Freiburg (Vysoká hudební škola ve Freiburgu) + +@qq{I když jej [LilyPond] ještě tak dobře neznám, udělal na mě již teď neobyčejný + dojem. Použil jsem tento program pro zápis not jednoho moteta od Josquina Despreze + v menzurálním notovém zápisu. Je mimo veškerou pochybnost, že LilyPond v + rychlosti, v jednoduchosti používání a notové sazbě snadno předčí + jiné notační programy.} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, skladatel (Brusel, Belgie) + +@qq{[Po první zkoušce orchestru] byla jakost mých notových listů + neustále chválena. A to, třebaže jsem na programu nepožadoval žádné z mnoha + jeho možností, abych sazbu zlepšil. To, co jsem orchestru rozdal, + byla vlastně nezpracovaná, nezměněná verze LilyPondu.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, skladatel (Toronto, Kanada) + +@qq{Uznání a dík družstvu vývojářů za jejich neuvěřitelnou + práci. Ještě nikdy jsem neviděl něco, co by se podobalo tomu, co jsem + dostal od LilyPondu. Jsem naprosto přesvědčen, že moje požadavky + na publikaci byly splněny nad očekávání, + z toho důvodu mohu tento program využít. [...] takřka nezměněná + notová sazba z LilyPondu [...] vypadá lépe než všechny @qq{profesionální} + publikace z poslední doby, s nimiž jsem ji srovnával (tak přibližně + všechny noty Warner Bros a dokonce mnohé z @qq{tradičních notačních domů}). [...] + } + +@qq{Toho teprve musejí Finale/Sibelius/Igor/atd. dosáhnout!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, vedoucí programátor projektu @uref{http://www.rosegardenmusic.com/, Rosegarden} + +@qq{LilyPond je zřejmě supergorilou [notové sazby].} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} + +@qq{Způsob, jakým jsou noty v LilyPondu zadávány, mi dovoluje +myslet hudebně -- byly doby, kdy jsem se LilyPondu marně +pokoušel vysvětlit, jak se má v notách něco vysázet, +jen abych zjistil, že, i kdybych to dokázal udělat přesně tak, +jak to chtěl skladatel, noty by přesto byly pro čtení velmi +nejasné. LilyPond mi v mé dvojí úloze, jakožto vydavatele a +sazeče not, velmi ulehčuje mou +práci.} + +@qq{Používal jsem LilyPond ve svém začínajícím podniku pro tisk +not výhradně. Šlo to tak dobře, že bez výjimky byli všichni +skladatelé nadchnuti jakostí notové sazby, když jsem jim ukázal +korekturní obtah jejich not. Sám si také zasloužím určitý díl z +této chvály, neboť jsem strávil mnoho času změnou výstupu, +především ligaturami akordů +-- ale LilyPond dává skvělý bod, kde se dá začít, +intuitivní rozhraní a možnost změnit +úplně vše, jen když se tomu věnuje nějaký ten čas. +Jsem přesvědčen, že žádný obchodovaný výrobek +se mu nemůže byť jen přiblížit.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, basový pozounista, Islandský symfonický orchestr + +@qq{Jednoduše si myslím, že LilyPond je jednoduše úžasný [..] Čím více se o něm naučím, +tím více jej mám rád!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, hráč na elektrickou kytaru (Ano, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, má spojitost s}) + +@qq{LilyPond na mě udělal opravdu velký dojem[..]} + +@qq{JE TO NEJLEPŠÍ PROGRAM VŠECH DOB!} + +@qq{Mnohokrát, mnohokrát všem děkuji za jejich tvrdou práci a obětavost!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, @uref{http://www.mutopiaproject.org/, Mutopia} - spolupracovník + +@qq{Rozvíjel jsem k němu takovou nějakou nenávistnou lásku. Lásku, protože + první list s notami, který jsem uviděl, vypadal tak dobře. Popis + lže, když jde o krásu LilyPondu + -- je v tomto příliš skromný! [...] protože LilyPond se pořád zlepšuje, + a jak se důkladně zabývám tím, jak se věci ve + Scheme dělají, mám mnohem méně pocitů marnosti. Na každý pád + bych chtěl říci: Děkuji vám za to, že LilyPond nabízíte, je + skutečně báječný!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, Dirigent v koblenzském divadle a vynikající dělník GNU + +@qq{Celkově LilyPond dělá čistou práci!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, vývojář @uref{http://jackaudio.org/, JACKa} a @uref{http://www.ardour.org/, Ardouru} + +@qq{Myslím si, že [LilyPond] + je mimořádný program, a že dosahuje překrásných + výsledků. Poté co jsem si o něm v posledním roce přečetl jeden rozhovor, + řekl jsem různým přátelům o jeho možnostech.} +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading A co teď? + +Přečtěte si o našem @ref{Textový vstup,,textovém vstupu}. +@divEnd + + + +@node Textový vstup +@unnumberedsec Textový vstup +@translationof Text input + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading @qq{Sestavení} not + +@imageClickable{nereid-shot-small,png, (Klepněte kvůli zvětšení), nereid-shot,png, right} + +LilyPond je @emph{sestaveným} systémem: je spuštěn přes +textový soubor, který noty popisuje. Výsledný výstup +je prohlížen na obrazovce nebo vytištěn. V určité +smyslu je LilyPond spíše programovacím jazykem než +obrazovým programem pro sazbu not. + +Člověk noty nepíše tak, že obrázky not vytáhne z +nakreslené laťky a umístí je do stále se dynamicky obnovující +notové osnovy. Místo toho píše text. +Tento text je LilyPondem vykládán (nebo +@qq{sestaven}) a přitom je vyráběna pěkně vypadající notová sazba. + +Lidé zvyklí na obrazné sázení not mohou potřebovat nějakou +chvíli na to, aby se naučili novým pracovním způsobům, ale výsledek +ztrátu vzniklou při vynaložení dodatečného úsilí vyrovnává. + +@warning{Ukazujeme krátký přehled našeho textového vstupu +-- není to tak složité, jak to zní. Nedělejte si žádné starosti, +když v příkladu všemu neporozumíte. +V naší dokumentaci je o všech jednotlivých podrobnostech +velice důkladně pojednáno.} + + +@subsubheading Je to jednoduché tak jako A B C + +Noty jsou kódovány písmeny a čísly. Zvláštní příkazy jsou zadávány +zpětným (obráceným) lomítkem. + +@imageFloat{text-input-1-annotate,png,center} +@imageFloat{text-input-1-output,png,center} + +Předznamenání jsou přidávána pomocí různých koncovek: @code{-is} +za notou sází křížek, @code{-es} zato béčko (-- toto jsou české koncovky, +koncovky v jiných jazycích jsou možné také). LilyPond sám rozhodne o tom, kde +předznamenání umístí. + +@imageFloat{text-input-2-annotate,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading Popová hudba + +Akordy a text písničky mohou být jednoduše dány dohromady na jednom listu. + +@imageFloat{text-input-pop-annotate,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading Orchestrální hlasy + +Soubor se vstupem obsahuje noty jednoho díla. +Noty a hlasy mohou být vytvořeny z jednoho jediného vstupního souboru. +Když je změněna nějaká nota, změna se opět současně nalézá i v +hlasu a v notovém zápisu. Tím, že noty jsou využity vícekrát, +měly by být přiděleny jedné proměnné: + +@imageFloat{text-input-parts-both-annotate,png,center} + + +S touto proměnnou pak lze vytvořit sólový hlas (zde přesunut, +pomlky jsou staženy): + +@imageFloat{text-input-parts-single-annotate,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +Stejná proměnná se potom používá v notovém zápisu (zde v původní tónové výšce): + +@imageFloat{text-input-score-annotate,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Dokumentace pro začátečníky + +Je nám jasné, že tento způsob psaní not se mnoha uživatelům zdá +podivný. Z toho důvodu jsme napsali důkladné poučení, +jež má novým uživatelům pomoci. Člověk by měl začít +s částí nazvanou @ref{Úvod,,úvod}. Příručka k učení se +chová jako úvod a začátek při práci s LilyPondem; +jsou zde zodpovězeny četné otázky, dříve než by si je člověk vůbec +mohl položit! + +Čtěte, prosím, příručku k učení se, předtím než si budete stěžovat +na chyby! Noví uživatelé si někdy myslí, že LilyPond +nepracuje správně, zatímco program dělá ve skutečnosti +přesně to, k čemu byl napsán. + +Další informace se nacházejí pod @ref{Příručky,,příručkami} + + +@subsubheading Jednodušší prováděcí prostředí + +@imageClickable{lilykde-screenshot-small,png, + (Klepněte kvůli zvětšení),lilykde-screenshot,png,right} + +LilyPond se především stará o sázení not v té nejlepší +jakosti -- programování obrazného uživatelského rozhraní +(GUI) by nás od tohoto úkolu jen odvádělo. Přesto jsou jiné +projekty, jejichž cílem je vytváření souborů LilyPond. + +Některá prováděcí prostředí zahrnují zvýrazňování skladby, automatické +doplňování a předvyrobené předlohy. Jiné programy poskytují k použití +skutečné obrazné uživatelské rozhraní, s nímž člověk může noty +upravovat obrazově. Další informace se nacházejí pod +@ref{Snadnější úpravy,,snadnějšími úpravami}. + + + +@divClass{column-center-bottom} +@subheading A co teď? + +Jste nyní připraveni na @ref{Stažení,, stažení LilyPondu}? +Ještě stále nejste přesvědčeni? Přečtěte si o @ref{Snadnější +úpravy,,snadnějších úpravách}. + +@divEnd + + +@node Snadnější úpravy +@unnumberedsec Snadnější úpravy +@translationof Easier editing + + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (Klepněte kvůli zvětšení),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +Vytvořen jako přídavný modul pro textový editor @uref{http://www.jedit.org,jEdit}, +je LilyPondTool jedním z textově založených nástrojů s nejvíce +vlastnostmi pro sázení a úpravy notových zápisů LilyPond. +K tomu patří průvodce dokumentem pro jednodušší vytvoření nového souboru +s podporou pro písňový text a vložený prohlížeč souborů +PDF s pokročilou podporou pro kroky +ukázat a klepnout. + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (Klepněte kvůli zvětšení),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi je jednoúčelový notový a textový editor pro LilyPond +s vestavěným náhledem na soubory PDF, s mnohostrannou podporou pro +vytváření nových notových zápisů a mnoha vlastnostmi pro provádění úprav. +Je zbudován na základě knihoven KDE 4 a v současnosti běží +na všech druzích linuxových systémů a na jiných +UNIXových operačních systémech. + +@divEnd + +@divClass{column-center-top} +@divClass{column-center-top} +@subheading Obrazné prostředí: Denemo + +@imageClickable{screenshot-denemo-small,png, + (Klepněte kvůli zvětšení),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo je obrazný editor, který dokáže vyrábět soubory LilyPond +(vstupní formát je ve verzi 2.8.7) a dovoluje rovněž přehrávání zvuku. Tím může +být soubor LilyPondu pozorován souběžně s názorným notovým obrazem. +Dodatečné změny je možné připojit k předmětům not, akordů atd. +-- budou uloženy společně se souborem Denemo, takže uživatel +může dále pracovat s obrazem. + +Když uživatel přemístí ukazatel v textu LilyPondu, přemístí se i v notovém obrazu, +a všechny chyby ve skladbě drobných vylepšení LilyPondu budou označeny v +textovém pohledu, když se z něj tiskne. + +@divEnd + +@divClass{column-center-top} +@subheading Textové editory + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs je textový editor s vlastnostmi, které pracují v závislosti +na jazyku, pro velmi mnoho počítačových jazyků. Emacs je +vysoce rozšiřitelný editor, který je možné používat i jako +jednotné vývojářské prostředí. Má režim +@qq{lilypond}-, který poskytuje jazyková vymezení pro práci se +soubory LilyPondu. Jeden z našich vývojářů +napsal i hlavní režim pro Emacs, @uref{http://nicolas.sceaux.free.fr/ ++lilypond/lyqi.html,lyqi}. + +@uref{http://www.vim.org} + +Vim je malý textový editor a rozšíření staršího +unixového editoru @command{vi}. Je rovněž rozšiřitelný a nastavitelný. + +Obecně platí, že pravděpodobně sáhnete po jiném editoru, když budete chtít +zapisovat vstupní soubory pro LilyPond, pokud s Emacsem nebo +Vimem nejste obeznámeni již od začátku. + +Další informace k nastavení Emacsu a Vimu se nacházejí pod +@rprogram{Text editor support}. + + +@sourceimage{logo-macosx,,,} +@uref{http://www.uoregon.edu/~koch/texshop} + +Editor TexShop pro MacOS@tie{}X lze rozšířit, tudíž +umí spouštět LilyPond, @command{lilypond-book} a @command{convert-ly} +z editoru. K tomu se používá rozšíření, +které je dostupné zde: + +@example +@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}. +@end example + + +@sourceimage{logo-macosx,,,} +Je také balíček s LilyPondem pro TeXMate, obchodovaný editor pro +MacOS. Dá se nainstalovat provedením následujícího +příkazu v příkazovém řádku: + +@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 + + +@divClass{column-center-top} +@subheading Jiné programy umí vyvádět kód LilyPondu + + +@subsubheading Editory notového zápisu, tabulatur a MIDI: + +@itemize +@item +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}, Zvukový a MIDI sekvencer, +který rovněž podporuje editor notového zápisu pro úpravy jednotlivých notových osnov. + +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, +založený na knihovně @uref{http://cairographics.org, Cairo}, +má pokusnou podporu pro vyvedení LilyPondu. + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, Vícestopý editor tabulatur a +přehrávač, staví vedle tabulatur také pohled na notový zápis +a dovede vyvádět do LilyPondu. + +@item +@uref{http://musescore.org,MuseScore} má neúplné vyvedení pro LilyPond, +je ale činorodě vyvíjen. + +@item +@uref{http://canorus.org,Canorus} také umí vyvádět do LilyPondu, je ovšem ještě ve stadiu beta. Osoby ochotné jej zkoušet jsou vítány. + +@item +@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, +monofonní převodník ve skutečném čase z MIDI do LilyPondu. + +@end itemize + +@subsubheading Algoritmické vyvíječe kódu + +@itemize +@uref{http://strasheela.sourceforge.net, Strasheela} je @qq{a +nadmíru výrazný na omezení založený systém pro skládání hudby}. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, knihovna LISP, +pro vytváření hudebního zápisu z programových prostředí pro počítačovou hudbu. + +@end itemize +@divEnd + + +@divClass{column-center-top} + +@subheading Další programy, které nejsou činně vyvíjeny + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} byl nahrazen +@uref{http://www.frescobaldi.org/,Frescobaldi} a existuje pouze jako +LilyKDE3 pro KDE 3.5 a lilypond-KDE4 pro KDE 4.1. + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, který zaváděl +@uref{http://www.musicxml.com/xml.html,MusicXML}, se +rozdělil a je dále vyvíjen jako +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +a @uref{http://canorus.org,Canorus}. + + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} je obrazný +program pro notový zápis, který se chová jako psací blok pro čísla, +se kterým se dá vytvářet notový zápis LilyPondu. + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading A co teď? + +Jste nyní připraven @ref{Stažení,,stáhnout si LilyPond}? + +Stále ještě nejste přesvědčen? Mnozí skladatelé, hudebnící a +a dirigenti se naučili, jak se v našem vstupním formátu +zapisují noty. Zkušení uživatelé dokonce podali zprávu, že +v LilyPondu dokáží napsat celý notový zápis rychleji než s +klavírní klávesnicí nebo myší plus obrazným uživatelským rozhraním! Snad se chcete ještě jednou podívat, +které @ref{Vlastnosti,,vlastnosti}, @ref{Příklady,,příklady} nebo +@ref{Svoboda,,svobodu} LilyPond dovoluje, nebo si přečíst o @ref{Tvorba,,tvorbě} +a @ref{Posudky,,posudcích} našich uživatelů. Dodatečně jsme vysvětlili náš +přístup ke kráse klasického rytí vytvořené počítačem +v našem @ref{Pozadí,,pozadí}. + +@subheading Zákonnost + +@divClass{legal} +Všechna loga a vyobrazení výrobků ctí autorské právo a obchodní značku. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/cs/web/manuals.itexi b/Documentation/cs/web/manuals.itexi new file mode 100755 index 0000000000..f9c4cbc6c6 --- /dev/null +++ b/Documentation/cs/web/manuals.itexi @@ -0,0 +1,605 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + 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 Translators: Pavel Fric + +@node Příručky +@unnumbered Příručky +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, Jednotlivosti k \reference\}) +@spanEnd +@end macro + +@divClass{heading-center} +@ifclear web_version + @heading Příručky pro LilyPond @version +@end ifclear +@ifset web_version + @heading Příručky pro LilyPond @versionStable +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Úvod + +@itemize + +@item +@ref{Textový vstup}: +LilyPond je @strong{textově založený} program na sazbu not. Pokud +tomuto pojetí nedůvěřujete, přečtěte si o něm, prosím, nyní! + +@item +@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Začátek,Učení}} +@qq{bezpodmínečně si přečíst!} jemné uvedení do LilyPondu. +@details{Učení} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Začátek,Slovníček}} +@emph{(optional)} zde jsou hudební pojmy vysvětleny v angličtině a +a podány odpovídající překlady v mnoha dalších řečech. +@details{Slovníček} + + + +@item +@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Začátek,Článek}} +@emph{(optional)} Informace o pozadí procesu notové sazby a kráse +rytí not v 19. století. +@details{Článek} + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Běžné používání + +@itemize + +@item +@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Začátek,Notový zápis}} +doporučení týkající se skladby. +@details{Notový zápis} + +@item +@ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Začátek,Používání}} +jak jsou programy vyvolávány. +@details{Používání} + +@item +@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Začátek,Úryvky}} +krátké lsti, rady a příklady. +@details{Úryvky} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Nepravidelné používání + +@itemize + +@item +@ref{Často kladené dotazy}: +Často kladené dotazy. + +@item +@ref{Začátek,Web}: +Tento dokument. + +@item +@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Začátek,Změny}} +Co je nového? +@details{Změny} + +@item +@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Začátek,Rozšíření}} +Chytrá přizpůsobení. +@details{Rozšíření} + +@item +@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Začátek,Vnitřnosti}} +Doporučení pro přizpůsobení. +@details{Vnitřnosti} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Jiný materiál + +@itemize + +@item +@ref{Překlad}: +Stav překladu pro lidi, kteří nehovoří anglicky. + +@item +@ref{Vše}: +Příručky ke stažení a staré příručky. + +@item +@ref{Vývoj}: +Příručky pro vývojářskou verzi. + +@item +@ref{FDL}: +Tyto příručky jsou vydány pod GNU Free Documentation License. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Učení:: +* Slovníček:: +* Článek:: +* Notový zápis:: +* Používání:: +* Úryvky:: +* Často kladené dotazy:: +* Web:: +* Změny:: +* Rozšíření:: +* Vnitřnosti:: +* Překlad:: +* Vše:: +* FDL:: +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Učení +@unnumberedsec Učení +@translationof Learning + +@divClass{column-left-top} +@subheading Příručka k učení se + +V této knize se vysvětluje, jak by se mělo začít s poznáváním LilyPondu. +Jsou zde vysvětlena i některá klíčová pojetí a jednoduché pojmy. +Měli byste si tuto kapitolu přečíst od začátku do konce. + +Na konci každé části je odstavec @strong{Podívejte se také na}, +který obsahuje odkazy na jiné části. Při prvním čtení byste však tyto odkazy +sledovat neměli. Když už jste si celou příručku jednou přečetli, +budete pravděpodobně některé části číst ještě jednou a +pak budete sledovat i odkazy, abyste obdržel +další informace. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Učení, learning, + @rlearningnamed{Začátek,Učení}, + @manualStableLearningSplit-cs, + @manualStableLearningBig-cs, 1.5 MB, + @manualStableLearningPdf-cs, 3 MB} + +@divEnd + + +@node Slovníček +@unnumberedsec Slovníček +@translationof Glossary + +@divClass{column-left-top} +@subheading Slovníček + +Zde jsou v angličtině vysvětleny odborné pojmy a v řadě jazyků podány +jejich překlady. Pokud se nevyznáte v pojmosloví hudby a hudebního zápisu + not (a především tehdy, když nemluvíte plynně anglicky), vyplatí se vám velmi +vzít si na pomoc tento slovníček. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Slovníček, music-glossary, + @rglosnamed{Začátek,Slovníček}, + @manualStableGlossarySplit-cs, + @manualStableGlossaryBig-cs, 1 MB, + @manualStableGlossaryPdf-cs, 1.5 MB} + +@divEnd + + +@node Článek +@unnumberedsec Článek +@translationof Essay + +@divClass{column-left-top} +@subheading Článek + +Tato kniha obsahuje krátké vyprávění o sazbě not a v návaznosti na to +úvahu nad technikou sazby not v LilyPondu. +Uskuteční se tu i porovnání LilyPondu s jinými programy na sazbu +not. + +@warning{Podrobné typografické příklady se dají lépe rozebrat +ve verzi PDF tohoto dokumentu, protože tento má vyšší +rozlišení.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Článek, essay, + @ressaynamed{Začátek,Článek}, + @manualStableEssaySplit-cs, + @manualStableEssayBig-cs, 2 MB, + @manualStableEssayPdf-cs, 2.5 MB} + +@divEnd + + +@node Notový zápis +@unnumberedsec Notový zápis +@translationof Notation + +@divClass{column-left-top} +@subheading Doporučení k notovému zápisu + +Tato kniha vysvětluje všechny příkazy LilyPondu, jimiž se vytváří notový zápis. + +@warning{Doporučení k notovému zápisu vychází z toho, že čtenář již zná +základy LilyPondu, jak byly předvedeny v příručce k učení +se. V některých případech by mělo být známo anglické hudební +pojmosloví (podívejte se do slovníčku).} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notový zápis, notation, + @rusernamed{Začátek,Notový zápis}, + @manualStableNotationSplit-cs, + @manualStableNotationBig-cs, 7 MB, + @manualStableNotationPdf-cs, 18 MB} + +@divEnd + + +@node Používání +@unnumberedsec Používání +@translationof Usage + +@divClass{column-left-top} +@subheading Příručka k používání + +Tato kniha vysvětluje, jak jsou programy ukázány, jak lze noty z +LilyPondu začlenit do jiných programů, a dělá k tomu návrhy, +jak své soubory s notami co nejlépe přiložíte. Doporučuje se si +tento dokument přečíst, dříve než si člověk začne myslet na větší projekty. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Používání, usage, + @rprogramnamed{Začátek,Používání}, + @manualStableUsageSplit-cs, + @manualStableUsageBig-cs, 300 KB, + @manualStableUsagePdf-cs, 400 KB} + +@divEnd + + +@node Úryvky +@unnumberedsec Úryvky +@translationof Snippets + +@divClass{column-left-top} +@subheading Úryvky + +Zde jsou vybrané úryvky ukázány na kódu LilyPondu s vytvořeným notovým +zápisem. Úryvky pocházejí z +@uref{http://lsr@/.dsi@/.unimi@/.it,Skladiště s úryvky LilyPondu} +(LSR) a všechny se nacházejí pod Public Domain. + +Vezměte na vědomí, že tento dokument nepředstavuje žádnou určitou +podmnožinu LSR. LSR běží pod stálou verzí LilyPondu, +takže každý úryvek, který vykazuje novou vlastnost z +vývojářské verze, se musí přidat zvlášť. Tyto úryvky +jsou uloženy v souboru @file{Documentation/snippets/new/} ve +zdrojovém adresáři LilyPondu. + +Úryvky pro každou část Doporučení k notovému zápisu +jsou také odkázány z odstavce @strong{Podívejte se také na}. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Úryvky, snippets, + @rlsrnamed{Začátek,Úryvky}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node Často kladené dotazy +@unnumberedsec Často kladené dotazy +@translationof FAQ + +@divClass{column-center-top} +@subheading Uvádějící otázky + +@subsubheading Kde jsou kreslené nabídky, pruhy s nástroji a notový list? + +LilyPond potřebuje, aby se noty zadávaly jako text. +Přečtěte si, prosím, o našem @ref{Textový vstup,,textovém vstupu}. + + +@subsubheading Je tu velmi mnoho dokumentace! Muím si to všechno +přečíst? + +Musíte si přečíst @ref{Learning, Příručka k učení se}. Zbytek +dokumentace je zamýšlen k vyhledávání, když potřebujete určitý +druh nebo typ značky notového zápisu. + + +@subsubheading Ale i tak je toho ke čtení ještě docela hodně! Pak se +to vyplatí? + +Tady se musíte rozhodnout sám; důvody, pro které můžete LilyPond +upřednostnit před jinými programy, jsou představeny v +@ref{Úvod,,úvodě}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Otázky k používání + +@subsubheading Něco nepracuje! Jak to můžu opravit? + +To je vysvětleno v @rprogram{Řešení potíží}. + + +@subsubheading Proč měníte skladbu? + +To je vysvětleno v @rprogram{Proč se mění skladba?}. + +@divEnd + + +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +Tato kniha podává všeobecné údaje k LilyPondu. Obsahuje také +informace o různých společenských fórech, hlášení o chybách a +spolupráci na programu. + +@divEnd + +@divClass{column-right-bottom} +@subheading Přečtěte si + +@subsubheading Nejnovější příručka + +@divClass{keep-bullets} +@itemize +@ref{Začátek,Web} +@end itemize +@divEnd + +@subsubheading Web - příručka @versionDevel + +@docLinksBare{Web, web, + @ref{Začátek,Web}, + @manualDevelWebSplit-cs, + @manualDevelWebBig-cs, 1 MB, + @manualDevelWebPdf, 2 MB} + +@divEnd + + + +@node Změny +@unnumberedsec Změny +@translationof Changes + +@divClass{column-left-top} +@subheading Změny + +Zde je podán přehled důležitých změn a nových +vlastností v LilyPondu od předchozí stálé verze. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Změny, changes, + @rchangesnamed{Začátek,Změny}, + @manualStableChangesSplit-cs, + @manualStableChangesBig-cs, 6 KB, + @manualStableChangesPdf-cs, 200 KB} + +@divEnd + + +@node Rozšíření +@unnumberedsec Rozšíření +@translationof Extend + +@divClass{column-left-top} +@subheading Rozšiřte LilyPond + +V této knize se vysvětluje, jak se pro LilyPond píší rozšíření. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Rozšíření, extend, + @rextendnamed{Začátek,Rozšíření}, + @manualStableExtendingSplit-cs, + @manualStableExtendingBig-cs, 200 KB, + @manualStableExtendingPdf-cs, 400 KB} + +@divEnd + + +@node Vnitřnosti +@unnumberedsec Vnitřnosti +@translationof Internals + +@divClass{column-left-top} +@subheading Příručka k vnitřnostem + +Zde se jedná o množství velice silně proodkazovaných stránek, +jež všechny dokládají přesné podrobnosti ke každé jedné třídě +LilyPond, ke každému předmětu a ke každé funkci. +Dokument je vytvářen přímo z formátovacích příkazů +zdrojového kódu a je k dostání jen v angličtině. + +Skoro všechny formátovací funkce, které se používají uvnitř, +jsou uživateli přímo k dispozici. Například je to většina proměnných, +hodnoty k tloušťkám, ovládání zdáleností atd., +je možné měnit ve vstupním souboru. Existuje velký počet +formátovacích voleb a všechny jsou vysvětleny v tomto +dokumentu. Každá část doporučení k notovému zápisu má také část +@strong{Podívejte se také na}, který odkazuje na tuto dokumentaci. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Vnitřnosti, internals, + @rinternalsnamed{Začátek,Vnitřnosti}, + @manualStableInternalsSplit-cs, + @manualStableInternalsBig-cs, 2.5 MB, + @manualStableInternalsPdf-cs, 2.8 MB} + +@divEnd + + +@node Překlad +@unnumberedsec Překlad +@translationof Translated + +@divClass{column-center-bottom} +@subheading Stav překladů + +@include translations.itexi + +@divEnd + + +@node Vše +@unnumberedsec Vše +@translationof All + +@divClass{column-center-bottom} +@subheading Verze ke stažení + +@ifclear web_version +Archivy v podobě formátu tar jsou dostupné ke stažení jen +přes @uref{http://lilypond.org}. +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable-cs + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Staré stálé verze + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +LilyPond 2.12 Dokumentation} (německy) + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +LilyPond 2.11 Dokumentation} (německy) + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +LilyPond 2.10 Dokumentation} (německy) + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +LilyPond 2.8 Dokumentation} (německy) + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +LilyPond 2.6 Dokumentation} (anglicky) + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +LilyPond 2.4 Dokumentation} (anglicky) + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +LilyPond 2.2 Dokumentation} (anglicky) + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +LilyPond 2.0 Dokumentation} (anglicky) + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +LilyPond 1.8 Dokumentation} (anglicky) + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +LilyPond 1.6 Dokumentation} (anglicky) + + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL + +@divClass{column-center-top} +@subheading Povolení k dokumentaci + +Dokumentace pro GNU LilyPond je zveřejněna pod GNU Free +Documentation License. Uvedení do tohoto +povolení a důvody pro jeho používání najdete v části věnované @ref{Svoboda,,svobodě}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd diff --git a/Documentation/cs/web/news-front.itexi b/Documentation/cs/web/news-front.itexi new file mode 100644 index 0000000000..6339bf26dc --- /dev/null +++ b/Documentation/cs/web/news-front.itexi @@ -0,0 +1,16 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 5e2900b22db1d1ea433d4e8445cbcba3ffe399a4 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + + +@subsubheading LilyPond 2.13.47 released! @emph{Jan 28, 2011} +@subsubheading Release candidate 1 withdrawn @emph{Jan 13, 2011} +@subsubheading Release candidate 1 of 2.14 - LilyPond 2.13.46 released! @emph{Jan 12, 2011} +@subsubheading LilyPond 2.13.45 released! @emph{Jan 3, 2011} + +@c -- SKELETON FILE -- diff --git a/Documentation/css/GNUmakefile b/Documentation/css/GNUmakefile new file mode 100644 index 0000000000..3cb02a74dd --- /dev/null +++ b/Documentation/css/GNUmakefile @@ -0,0 +1,6 @@ +depth = ../.. + +STEPMAKE_TEMPLATES=documentation +EXTRA_DIST_FILES = $(call src-wildcard,*.css) + +include $(depth)/make/stepmake.make diff --git a/Documentation/lilypond-ie-fixes.css b/Documentation/css/lilypond-ie-fixes.css similarity index 100% rename from Documentation/lilypond-ie-fixes.css rename to Documentation/css/lilypond-ie-fixes.css diff --git a/Documentation/css/lilypond-manuals.css b/Documentation/css/lilypond-manuals.css new file mode 100644 index 0000000000..b5e7a0cf93 --- /dev/null +++ b/Documentation/css/lilypond-manuals.css @@ -0,0 +1,467 @@ +/**********************************************************/ +/* PAGE-WIDE SETTINGS */ +/**********************************************************/ + +html { + height: 100%; +} + +body { + margin: 0 auto; + padding: 0; + height: 100%; + font-size: 100%; + line-height: 1.125; + color: #000; + background-color: #fff; +} + +/***********************************************************/ +/* HEADERS */ +/***********************************************************/ + +.chapter, .section, .subsection, .subsubsection, +.appendix, .appendixsec, .appendixsubsec, +.unnumbered, .unnumberedsec, .unnumberedsubsec, .unnumberedsubsubsec, +.subheading, .subsubheading { + color: #204a87; + border-bottom: 1px dashed black; + padding-bottom: 0.15em; + margin-top: 0.6em; + margin-bottom: 1em; +} + +.settitle { + background: #b1d281; + font-size: 2em; + text-align: center; + padding: 0.4em 0.5em; + border: solid #7b925a; + border-width: 1px 0; + margin: 0; +} + +.chapter, .appendix, .unnumbered { + font-size: 1.8em; +} + +.section, .appendixsec, .unnumberedsec { + font-size: 1.6em; +} + +.subsection, .appendixsubsec, .unnumberedsubsec { + font-size: 1.4em; +} + +.subheading, .subsubsection, .unnumberedsubsubsec { + font-size: 1.25em; +} + +.subsubheading { + font-size: 1em; + font-weight: bold; +} + +.chapheading { + position: absolute; + height: 0; + overflow: hidden; + text-indent: -999em; +} + +/***********************************************************/ +/* LINKS */ +/***********************************************************/ + +a:link { + color: #0c51ab; +} + +a:visited { + color: #804f01; +} + +a:active { + color: #278800; +} + +a:hover { + color: #0105ad; +} + +/***********************************************************/ +/* BLOCK FORMATTING */ +/***********************************************************/ + +blockquote, .smallexample { + width: 96%; + padding: 0; + border: solid #b1d281; + border-width: 1px 1px 1px 5px; + margin: 1em auto; +} + +blockquote p, pre.smallexample { + padding: 1em; + margin: 0; +} + +blockquote blockquote { + border: none; +} + +.verbatim, .example, .lisp { + font-size: 1em; + padding: 1em; + margin: 0; +} + +#main hr { + height: 0; + padding: 0; + border: 0; + margin: 0; + text-indent: -999em; +} + +table.cartouche { + background: #f5f5dc; + width: 85%; + border-collapse: collapse; + padding: 0 0.5em; + border: 2px solid #8f5902; + margin: 0 auto 1em; +} + +table.cartouche p { + padding: 1em; + margin: 0; +} + +table.cartouche td { + border: none; +} + +/***********************************************************/ +/* MAIN CONTENT */ +/***********************************************************/ + +div#main { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 27%; + padding: 0; + margin: 0; + overflow: auto; +} + +div#main li { + padding: 0 1em 0.5em 0; +} + +div#main ul { + margin: 0; + padding-left: 3em; +} + +h1, h2, h3, h4, p, table, address, dt { + padding-left: 1em; + padding-right: 1em; +} + +p { + margin: 1em 0; +} + +#languages { + padding: 0.5em 1em; + margin: 0; +} + +pre.menu-comment { + font-size: 1em; + padding-top: 1em; + padding-bottom: 0; + margin: 0; +} + +#main .contents li { + padding-bottom: 0; +} + +#main .contents > ul { + margin-bottom: 1em; +} + +/***********************************************************/ +/* TOC SIDEBAR */ +/***********************************************************/ + +div#tocframe { + position: absolute; + top: 0; + right: 73%; + bottom: 0; + left: 0; + padding: 0; + margin: 0; + overflow: auto; + background: #f5f5dc; + z-index: 100; + list-style-type: none; + font-size: 0.83em; + line-height: 1.3; +} + +@media screen { + body > div#tocframe { + position: fixed + } +} + +div#tocframe a:link, div#tocframe a:visited { + color: #454532; + text-decoration: none; +} + +div#tocframe a:hover { + color: #232b16; + text-decoration: underline; +} + +div#tocframe p.toc_uplink { + font-size: 1em; + line-height: 1.125; + background: #c9ccc4; + padding: 0.25em 1em 0.25em 0.5em; + border-bottom: 1px solid #a0a087; + margin: 0; +} + +div#tocframe p.toc_uplink a:link, +div#tocframe p.toc_uplink a:visited { + color: #1c1c1b; +} + +div#tocframe p.toc_uplink a:hover { + color: #000; +} + +div#tocframe h4 { + font-size: 1em; + line-height: 1.125; + font-weight: bold; + font-style: italic; + padding: 0.75em 0.5em 0 0.5em; + margin: 0; +} + +#tocframe .contents { + background-color: transparent; + list-style-type: none; + padding: 0; + border: 0; + margin: 0; +} + +#tocframe ul.toc { + padding: 0.25em 0.5em 1em 0.5em; + list-style-type: none; + margin: 0; +} + +#tocframe ul.toc ul.toc { + padding: 0; + margin: 0; +} + +#tocframe ul.toc li { + padding: 0; + margin: 0; +} + +#tocframe ul.toc > li { + font-size: 1em; +} + +#tocframe ul.toc li li { + padding-left: 1em; +} + +li.toc_current { + font-weight: bold; + font-style: italic; +} + +li.toc_current ul { + font-weight: normal; + font-style: normal; + background: transparent; +} + +/***********************************************************/ +/* NAVIGATION */ +/***********************************************************/ + +.nav_table { + width: 100%; + background: #c9ccc4; + font-size: 0.83em; + border-collapse: collapse; + padding: 0; + border: none; + margin: 0; +} + +.nav_table a:link, .nav_table a:visited { + color: #1c1c1b; + text-decoration: none; +} + +.nav_table a:hover { + color: #000; + text-decoration: underline; +} + +.nav_table tr, .nav_table a { + padding: 0; + margin: 0; +} + +.nav_table td { + padding: 0.25em; + margin: 0; +} + +div.header { + background: #b1d281; + text-align: center; + padding: 0.5em; + border-bottom: 1px solid #7b925a; + margin: 0; + height: auto; +} + +div.header h1 { + font-size: 2em; + padding: 0.25em; + margin: 0; +} + +div.subheader { + background: #ddd; + padding: 0; + margin: 0; + text-align: center; +} + +div.subheader p { + padding: 0.5em; + margin: 0; +} + +table#navigation { + line-height: 1.5; + padding: 0; + margin: 1em auto; +} + +table#navigation td { + padding: 0.5em 0.75em; +} + +table#navigation ul { + padding-left: 0.5em; + margin: 0; +} + +table .title { + font-weight: bold; +} + +.footer { + background: #e5f5ce; + font-size: 0.8em; + padding: 0.2em 0; + border: solid #b1d281; + border-width: 0 0 5px 0; + margin: 0; +} + +.footer a:link { + color: #0308fc; +} + +.footer p { + padding: 0 1.25em; + margin: 0.4em 0; +} + +table.menu { + margin: 0 0 1em; +} + +/***********************************************************/ +/* OVERRIDES FOR PRINTING */ +/***********************************************************/ + +@media print { + /* Hide the sidebar: */ + body { padding-left: 0; } + #tocframe { display: none; } + .nav_table { display: none; } +} + +/***********************************************************/ +/* FORMATTING of AJAX SEARCH BOX */ +/***********************************************************/ + +div#search { + border: none; + border-bottom: 1pt solid #C5972C; + background: #E8E3AC; + padding-left: 3px; + padding-top: 2px; + padding-bottom: 1px; +} +div#search p, div#search form { + padding: 0; + margin: 0; +} +#search_results { + font-size: 0.75em; + padding: 0; + margin: 0; + display: none; +} +#search_results table { + width: 100%; +} + +/***********************************************************/ +/* OTHER */ +/***********************************************************/ + +.warning { + background: #eef; + text-align: left; + padding: 0; + border: 1px solid green; + /* Experimental rounded corners */ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + margin: 1em; +} + +.advanced { + background: #eeffcc; + text-align: left; + padding: 0; + border: 1px solid green; + /* Experimental rounded corners */ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + margin: 0.5em 0.5em 2em 3em; +} diff --git a/Documentation/css/lilypond-website.css b/Documentation/css/lilypond-website.css new file mode 100644 index 0000000000..a6f6f9b669 --- /dev/null +++ b/Documentation/css/lilypond-website.css @@ -0,0 +1,979 @@ +/* Generic elements */ + +html { + padding: 0; + margin: 0; +} + +body { + position: absolute; + top: 0; + left: 0.5%; + right: 0.5%; + width: 99%; + min-width: 42em; + max-width: 70em; + font-size: 95%; + line-height: 1.5; + background: #fff url(../pictures/background-image.png) no-repeat 0 0; + text-align: justify; + padding: 0; + margin: 0 auto; +} + +hr { + display: none; +} + +p { + margin: 0.5em; +} + +h1, h2, h3, h4, h5 { + margin: 1em 10px; +} + +li { + margin-right: 1em; +} + +a img { + border: 0; +} + +/* Hyperlinks */ + +/* no dotted line around clicked tabs */ +a:focus { + outline-style: none; +} + +a:link { + color: #0c51ab; +} + +a:visited { + color: #804f01; +} + +a:hover { + color: #0105ad; +} + +/* Table of Contents */ +/* first level toc (unnumbered) */ +div#tocframe { + position: absolute; + top: 0; + left: 0; + right: 0; + background: #6aec7c url(../pictures/nav-bg.png) repeat-x top left; + max-width: 70em; + font-size: 100%; + line-height: 1; + padding: 0; + -moz-border-radius-bottomleft: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-left-radius: 7px; + -webkit-border-bottom-right-radius: 7px; + margin: 0; +} + +#tocframe a { + color: #fff; + text-decoration: none; +} + +#tocframe ul.toc { + list-style-type: none; + padding: 0; + margin: 0; +} + +#tocframe > ul:first-child > li:first-child a { + text-indent: -999em; + background: #6aec7c url(../pictures/lily-home-nav-bg.png) no-repeat 50% 50%; + width: 9%; + /* css3 no go yet? */ + border-bottom-left-radius: 30px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe > ul:first-child > li:first-child a:hover { + background: #6aec7c url(../pictures/lily-home-nav-hover.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a { + text-indent: -999em; + background: url(../pictures/lily-home-nav-active.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:first-child.toc_current a:hover { + text-indent: -999em; + background: url(../pictures/lily-home-nav-active.png) no-repeat 50% 50%; + width: 9%; +} + +#tocframe > ul:first-child > li:last-child { + width: 9%; + -moz-border-radius-bottomright: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe li { + display: inline; + padding: 0; + margin: 0; +} + +/* search box */ +#tocframe li form { + float: left; + width: 17%; + background: #6aec7c url(../pictures/nav-bg.png); + font-size: 100%; + padding: 0.45em 0.8%; + margin: 0; +} + +#tocframe li form input { + display: block; + float: left; + width: 95%; + font-size: 100%; + padding: 0.1em; + border: 0; + margin: 0; + -moz-border-radius-topright: 20px; + -moz-border-radius-bottomright: 20px; + -webkit-border-top-right-radius: 20px; + -webkit-border-bottom-right-radius: 20px; +} + +#tocframe li form input[type="hidden"] { + position: relative; + height: 0; + overflow: hidden; + text-indent: -999em; + padding: 0; + margin: 0; +} + +#tocframe li a { + background: #6aec7c url(../pictures/nav-bg.png); + float: left; + width: 18%; + text-align: center; + font-weight: bold; + padding: 0.68em 0; + margin: 0; +} + +#tocframe li a:hover { + background: url(../pictures/nav-hover.png); +} + +#tocframe li.toc_current a, +#tocframe li.toc_current a:hover { + background: url(../pictures/nav-active.png); + color: #fff; + text-decoration: underline; +} + +/* second level toc (unnumberedsec) */ +#tocframe .toc .toc { + position: absolute; + top: 3.8em; + left: 0.5%; + right: 0.5%; + font-size: 82%; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc li:first-child a { + -moz-border-radius-topleft: 7px; + -moz-border-radius-bottomleft: 7px; + -webkit-border-top-left-radius: 7px; + -webkit-border-bottom-left-radius: 7px; +} + +#tocframe .toc .toc li:last-child a { + -moz-border-radius-topright: 7px; + -moz-border-radius-bottomright: 7px; + -webkit-border-top-right-radius: 7px; + -webkit-border-bottom-right-radius: 7px; +} + +#tocframe .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + line-height: 2; + color: #000; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.5em; + margin: 0; +} + +#tocframe .toc .toc li a:hover { + background: #bdee9d; +} + +/* colored second-level TOC items */ +#tocframe .toc .toc li.color1 a { + background: #9ccc7c url(../pictures/color1-bg.png) repeat-x top left; +} + +#tocframe .toc .toc li.color2 a { + background: #bbcf81 url(../pictures/color2-bg.png) repeat-x top left; +} + +#tocframe .toc .toc li.color3 a { + background: #dbd286 url(../pictures/color3-bg.png) repeat-x top left; +} + +#tocframe .toc .toc li.color4 a { + background: #fad58c url(../pictures/color4-bg.png) repeat-x top left; +} + +#tocframe .toc .toc li.colorDefault a { + background: #8cbc6c url(../pictures/nav-bg-2.png) repeat-x top left; + color: #fff; +} + +#tocframe .toc .toc li.colorDefault a:hover { + background: #8cbc6c url(../pictures/nav-hover-2.png) repeat-x top left; + color: #fff; +} + +#tocframe .toc .toc li.color1 a:hover { + background: #addd8d url(../pictures/color1-hover.png) repeat-x top left; +} + +#tocframe .toc .toc li.color2 a:hover { + background: #ccdf92 url(../pictures/color2-hover.png) repeat-x top left; +} + +#tocframe .toc .toc li.color3 a:hover { + background: #ece297 url(../pictures/color3-hover.png) repeat-x top left; +} + +#tocframe .toc .toc li.color4 a:hover { + background: #fbe69d url(../pictures/color4-hover.png) repeat-x top left; +} + +#tocframe .toc .toc li.toc_current a, +#tocframe .toc .toc li.toc_current a:hover { + color: #000; + text-decoration: underline; +} + +#tocframe .toc .toc li.colorDefault.toc_current a, +#tocframe .toc .toc li.colorDefault.toc_current a:hover { + background: #8cbc6c url(../pictures/nav-active-2.png) repeat-x top left; + color: #fff; + text-decoration: underline; +} + +#tocframe .toc .toc li.color1.toc_current a, +#tocframe .toc .toc li.color1.toc_current a:hover { + background: #beee9e url(../pictures/color1-active.png) repeat-x top left; +} + +#tocframe .toc .toc li.color2.toc_current a, +#tocframe .toc .toc li.color2.toc_current a:hover { + background: #ddefa3 url(../pictures/color2-active.png) repeat-x top left; +} + +#tocframe .toc .toc li.color3.toc_current a, +#tocframe .toc .toc li.color3.toc_current a:hover { + background: #fdf4a8 url(../pictures/color3-active.png) repeat-x top left; +} + +#tocframe .toc .toc li.color4.toc_current a, +#tocframe .toc .toc li.color4.toc_current a:hover { + background: #fcf7ae url(../pictures/color4-active.png) repeat-x top left; +} + +/* third level toc (unnumberedsubsec) */ +#tocframe .toc .toc .toc { + position: absolute; + top: 2em; + left: 5%; + font-size: 100%; +} + +#tocframe .toc .toc .toc li { + display: inline; + padding: 0; + margin: 0; +} + +#tocframe .toc .toc .toc li a { + float: left; + width: auto; + background: #ceffae; + text-decoration: none; + text-indent: 0; + font-weight: normal; + padding: 0 0.75em; + margin: 0; +} + +#tocframe .toc .toc .toc li a:hover { + background: #bdee9d; +} + +#tocframe .toc .toc .toc li.toc_current a { + background: #acdd8c; +} + +#tocframe .toc .toc .toc li.toc_current a:hover { + background: #acdd8c; +} + +/* Divs */ +div#main { + position: relative; + /* this value may need to be adjusted */ + top: 7.7em; + left: 0; + right: 0; + width: 100%; + max-width: 70em; + margin: 0 auto 11.7em; + /* Necessary to stretch over floated content; + * will cause scrollbars to appear for content + * that is wider than the width of this div. + * + * FIXME: This breaks Konqueror 3 and 4. + */ + overflow: auto; +} + +/* FIXME: does not work in IE<=6 */ +#main > a:first-child { + position: absolute; + top: -10em; +} + +div#pageHeader { + width: 100%; + height: 10em; + padding-top: 2em; + border: solid #ddd; + border-width: 0; + margin: 0 0 1.4em 0; +} + +#pageHeader .heading { + font-size: 4em; + text-align: left; + padding: 0; + margin: 0 0 0 340px; +} + +#pageHeader p { + font-size: 1.2em; + font-style: italic; + text-align: left; + padding: 0; + margin: 0 0 0 340px; +} + +div#lilylogo { + position: absolute; + top: 0; + left: 0; +} + +div#cmws { + position: absolute; + top: 0; + left: 50%; +} + +div#quickSummary { + text-align: left; + margin: 4em 13em 0 0; +} + +#quickSummary .subheading { + background: #fff url(../pictures/summary-gradient.png) repeat-y 0 0; + color: #fff; + padding: 0 0.5em; + margin: 0; +} + +#quickSummary p { + padding: 0.5em; + margin: 0; +} + +div.separator { + background: transparent url(../pictures/squiggle.jpg) no-repeat 40% 60%; + height: 36px; + clear: both; + padding: 10px; +} + +div#news { + padding: 0; + margin: 0 13em 1em 0; +} + +div.news-item { +} + +.news-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; + border-bottom: 1px solid #5b7f64; + margin: 0; + overflow: hidden; +} + +.testimonial-item { + /* Not sure how to style the testimonials */ + clear: both; + margin: 2em 0; +} + +.testimonial-item .subsubheading { + text-align: left; + padding: 0 0 0 0.5em; +} + +.testimonial-item img.float-left, +.testimonial-item img.float-right { + margin: 1em 1em 2em; +} + +.testimonial-item p { + padding: 0 0.5em; +} + +.news-item p { + text-align: left; + padding: 0.5em; + margin: 0; +} + +div#latestVersion { + position: absolute; + top: 12.4em; + right: 0; + width: 12em; + text-align: center; + border-left: 1px solid #5b7f64; +} + +#latestVersion .subheading { + background: #5b7f64; + color: #fff; + text-align: center; + padding: 0 0.5em; + margin: 0; +} + +/* this might not work in certain browsers */ +a[name="Stable"] + h4 { + background: #bdee9d url(../pictures/color1-bg.png) repeat-x top left; +} + +/* this might not work in certain browsers */ +a[name="Unstable"] + h4 { + background: #fad58c url(../pictures/color3-bg.png) repeat-x top left; +} + +#latestVersion .subsubheading { + padding: 0.08em 0.25em; + border-bottom: 1px solid #5b7f64; + margin: 0; +} + +#latestVersion p { + font-size: 90%; + padding: 0.5em; + margin: 0; +} + +div#footer { + clear: both; + width: 100%; + border-top: 10px solid #5b7f64; +} + +div#language { + position: absolute; + top: 0; + left: 0; + right: 50%; + width: 50%; + text-indent: 0.5em; + padding: 0; +} + +#language h3 { + padding: 0; + border-bottom: 10px solid #5b7f64; + margin: 0; +} + +#language p { + padding: 0; + margin: 0.25em 0 0 0; +} + +/* used on website; not certain about the above ones. + see Issue 1105 */ +p#languages { + float: left; + width: 45%; + padding: 0.7em; + margin: 0; + text-align: left; +} + +#verifier_texinfo { + font-size: 0.8em; + float: right; + width: 48%; + padding: 0.5em; +} + +#verifier_texinfo h3 { + position: relative; + height: 0; + text-indent: -9999em; + padding: 0; + margin: 0; +} + +#verifier_texinfo img { + vertical-align: middle; + padding: 0; + margin: 0 0 0 0.5em; +} + +#verifier_texinfo p { + clear: right; + text-align: right; + padding: 0; + margin: 0; +} + +h1.unnumbered, h2.unnumberedsec, h3.unnumberedsubsec { + position: relative; + height: 0; + text-indent: -999em; + padding: 0; + margin: 0; + overflow: hidden; +} + +table { + text-align: left; + padding: 0 0 0 0.5em; + border-left: 3px solid green; + margin: 1em 0 0 1em; +} + +table td { + padding: 0.4em; +} + +table a { + text-align: left; +} + +.verbatim { + margin: 10px; +} + +.float-left { + float: left; +} + +.float-center { + text-align: center; + display: block; + margin: 0 auto; +} + +.float-right { + float: right; +} + +img.float-left, +img.float-right { + background: #fff; + padding: 1em; + border: 1px solid #bbb; + margin: 0.1em 0.5em; +} + +div.float-left a.clickable, +div.float-center a.clickable, +div.float-right a.clickable { + text-decoration: overline; + margin-left: 1em; +} + +.clear-both { + clear: both; +} + +.align-right { + text-align: right; +} + +.heading-center { + text-align: center; + width: 75%; + margin: 0 auto; +} + +.heading-center h2 { + padding: 0.25em 0; + margin: 0; +} + +/* Columns */ +.column-center-top { + float: left; + width: 99.5%; + text-align: left; + border: 1px solid #9ccc7c; + margin: 1em auto; +} + +/* color1 */ +.column-center-top h3 { + background: #9ccc7c url(../pictures/color1-bg.png) repeat-x top left; + text-align: left; + border-bottom: 1px solid #9ccc7c; +} + +.column-left-top { + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-bottom { + clear: both; + float: left; + width: 49%; + margin: 1em 0; +} + +.column-left-top, +.column-left-bottom { + border: 1px solid #adce82; +} + +/* color2 */ +.column-left-top h3, +.column-left-bottom h3 { + background: #adce82 url(../pictures/color2-bg.png) repeat-x top left; + border-bottom: 1px solid #adce82; +} + +.column-right-top { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-bottom { + float: right; + width: 49%; + margin: 1em 0; +} + +.column-right-top, +.column-right-bottom { + border: 1px solid #bdd088; +} + +/* color3 */ +.column-right-top h3, +.column-right-bottom h3 { + background: #bdd088 url(../pictures/color3-bg.png) repeat-x top left; + border-bottom: 1px solid #bdd088; +} + +.column-center-bottom { + clear: both; + width: 99.5%; + text-align: center; + border: 1px solid #ccd38f; + margin: 1em auto 0; +} + +/* color4 */ +.column-center-bottom h3 { + background: #ccd38f url(../pictures/color4-bg.png) repeat-x top left; + text-align: left; + border-bottom: 1px solid #ccd38f; +} + +.column-center-top, +.column-center-bottom, +.column-left-top, +.column-left-bottom, +.column-right-top, +.column-right-bottom { + background: #f5fffa; +} + +.column-center-top h3, +.column-center-bottom h3, +.column-left-top h3, +.column-left-bottom h3, +.column-right-top h3, +.column-right-bottom h3 { + text-align: left; + padding: 0 0.5em; + margin: 0; +} + +.column-center-top h4, +.column-center-bottom h4, +.column-left-top h4, +.column-left-bottom h4, +.column-right-top h4, +.column-right-bottom h4 { + text-align: left; + padding: 0.5em 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top ul, +.column-center-bottom ul, +.column-left-top ul, +.column-left-bottom ul, +.column-right-top ul, +.column-right-bottom ul { + list-style-type: none; + padding: 0; + margin: 0.5em 0; +} + +.column-center-top li, +.column-center-bottom li, +.column-left-top li, +.column-left-bottom li, +.column-right-top li, +.column-right-bottom li { + text-align: left; + padding: 0 0.5em 0; + margin: 0 0 0.5em 0; +} + +.column-center-top p, +.column-center-bottom p, +.column-left-top p, +.column-left-bottom p, +.column-right-top p, +.column-right-bottom p { + text-align: left; +} + +.column-center-top img.float-left, +.column-center-top img.float-right, +.column-center-bottom img.float-left, +.column-center-bottom img.float-right, +.column-left-top img.float-left, +.column-left-top img.float-right, +.column-left-bottom img.float-left, +.column-left-bottom img.float-right, +.column-right-top img.float-left, +.column-right-top img.float-right, +.column-right-bottom img.float-left, +.column-right-bottom img.float-right { + margin: 0.5em; +} + +/* Centered divs by color */ +div.color1, +div.color2, +div.color3, +div.color4 { + clear: both; + width: 99.5%; + background: #f5fffa; + margin: 1em auto; +} + +div.color1 h3, +div.color2 h3, +div.color3 h3, +div.color4 h3 { + padding: 0 0.5em; + margin: 0; +} + +div.color1 { + border: 1px solid #9ccc7c; + margin: 1em auto; +} + +div.color1 h3 { + background: #9ccc7c; + border-bottom: 1px solid #9ccc7c; +} + +div.color2 { + border: 1px solid #adce82; +} + +div.color2 h3 { + background: #adce82; + border-bottom: 1px solid #adce82; +} + +div.color3 { + border: 1px solid #bdd088; +} + +div.color3 h3 { + background: #bdd088; + border-bottom: 1px solid #bdd088; +} + +div.color4 { + border: 1px solid #ccd38f; +} + +div.color4 h3 { + background: #ccd38f; + border-bottom: 1px solid #ccd38f; +} + +.keep-bullets ul { + list-style-type: disc; + padding: 0; + margin: 0.5em 1.5em; +} + +.keep-bullets li { + padding: 0; +} + +.normal-table table { + padding : 0em; + border-left: 2px; + margin: 0em; +} + +.normal-table table td { + padding: 0em; +} + +.normal-table table a { +} + +.normal-table p { + line-height: 0.8; +} + +.example { + position: relative; + left: -2.5em; +} + +.h-scroll-auto { + position: relative; + left: 1em; + width: 250px; + overflow: auto; +} + +.warning { + background: #eef; + text-align: left; + padding: 0; + border: 1px solid green; + /* Experimental rounded corners */ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + margin: 1em; +} + +.warning p { + padding: 0.5em; + margin: 0; +} + +.contactBox { + float: left; + background: #eef; + text-align: left; + border: 1px solid green; + padding: 0; + margin: 1em; +} + +.contactBox p { + padding: 0.5em; + margin: 0; +} + + +.hide { + position: relative; + text-indent: -999em; + height: 0; + overflow: hidden; +} + +.help { + background: #f77; + color: black; + text-align: center; + font-weight: bold; + width: 75%; + padding: 1em; + border: 10px dotted green; + margin: 1em auto; +} + +.legal { + font-size: 0.6em; +} + +.link-headings a { + font-weight: bold; +} + +.detail { + font-size: 0.8em; +} + +.detail a { + font-weight: normal; +} + +/* kill title, probably best done in the init file, though */ +h1.settitle { + position: relative; + height: 0; + text-indent: -999em; + padding: 0; + margin: 0; + overflow: hidden; +} diff --git a/Documentation/de/GNUmakefile b/Documentation/de/GNUmakefile index 8acbe9e78c..2bcd15fe6a 100644 --- a/Documentation/de/GNUmakefile +++ b/Documentation/de/GNUmakefile @@ -1,7 +1,9 @@ ISOLANG = de depth = ../.. -SUBDIRS = user +SUBDIRS = web learning notation texidocs essay usage extending included STEPMAKE_TEMPLATES = documentation -LOCALSTEPMAKE_TEMPLATES = doc-i18n-root +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root + +EXTRA_DIST_FILES = web.texi include $(depth)/make/stepmake.make diff --git a/Documentation/de/essay.tely b/Documentation/de/essay.tely new file mode 100644 index 0000000000..fa64560f7b --- /dev/null +++ b/Documentation/de/essay.tely @@ -0,0 +1,70 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 3c814eb917c15f6f0d64f64f58046dd7b119e359 + + 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 +@setfilename lilypond-essay.info +@settitle Aufsatz über den automatischen Musiksatz +@documentencoding UTF-8 +@documentlanguage de + + +@c Translators: Till Paala + +@include macros.itexi + +@macro manualIntro +Dieser Aufsatz diskutiert den automatischen Musiksatz von +LilyPond Version @version{}. +@end macro + +@c `Essay' was born 2002-06-03 with git commit e38f5fc... +@macro copyrightDeclare +Copyright @copyright{} 2002--2011 bei den Autoren. +@end macro + +@set FDL + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen +@omfdescription Essay on automated music engraving +@omftype essay +@omfcategory Applications|Publishing +@omflanguage German +@end ignore + +@lilyTitlePage{Aufsatz über den automatischen Musiksatz} + + +@ifnottex + +@menu +* Notensatz:: +* Literatur:: +* GNU Free Documentation License:: Die Lizenz dieses Dokuments. +* LilyPond-Index:: +@end menu + +@docMain +@end ifnottex + +@contents + +@allowcodebreaks false + +@include essay/engraving.itely +@include essay/literature.itely + +@include fdl.itexi + +@node LilyPond-Index +@appendix LilyPond-Index +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/de/essay/GNUmakefile b/Documentation/de/essay/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/de/essay/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/essay/engraving.itely b/Documentation/de/essay/engraving.itely new file mode 100644 index 0000000000..501ea1820a --- /dev/null +++ b/Documentation/de/essay/engraving.itely @@ -0,0 +1,1831 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + + 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" + +@c Translators: Till Paala + +@node Notensatz +@chapter Notensatz +@translationof Music engraving + +Dieser Aufsatz beschreibt, wie LilyPond entstand und wie es +benutzt werden kann, um schönen Notensatz zu erstellen. + +@menu +* Die Geschichte von LilyPond:: +* Details des Notensetzens:: +* Automatisierter Notensatz:: +* Ein Programm bauen:: +* LilyPond die Arbeit überlassen:: +* Notensatzbeispiele (BWV 861):: +@end menu + + +@node Die Geschichte von LilyPond +@section Die Geschichte von LilyPond +@translationof The LilyPond story + +Lange bevor LilyPond benutzt werden konnte, um wunderschöne +Aufführungspartituren zu setzen, bevor es in der Lage war, Noten +für einen Unversitätskurs oder wenigstens eine einfache Melodie zu +setzen, bevor es eine Gemeinschaft von Benutzern rund um die Welt oder +wenigstens einen Aufsatz über den Notensatz gab, begann LilyPond +mit einer Frage: + +@quotation +Warum schaffen es die meisten computergesetzten Noten nicht, die +Schönheit und Ausgeglichenheit von handgestochenem Notensatz aufzuweisen? +@end quotation + +@noindent +Einige der Antworten können gefunden werden, indem wir uns die +beiden folgenden Noten zur Analyse vornehmen. Das erste Beispiel +ist ein schöner handgestochener Notensatz von 1950, das zweite +Beispiel eine moderne, computergesetzte Edition. + +@ifnottex +@quotation +@noindent +Bärenreiter BA 320, @copyright{}1950: + +@sourceimage{baer-suite1-fullpage,,,png} +@end quotation + +@quotation +@noindent +Henle Nr. 666, @copyright{}2000: +@sourceimage{henle-suite1-fullpage,,,png} +@end quotation +@end ifnottex + +Die Noten sind identisch und stammen aus der ersten Solosuite für +Violoncello von J. S. Bach, aber ihre Erscheinung ist sehr +unterschiedlich, insbesondere wenn man sie ausdruckt und aus einigem +Abstand betrachtet. +@ifnottex +(Die PDF-Version dieses Handbuchs hat hochauflösende Abbildungen, +die sich zum Drucken eignen.) +@end ifnottex +Versuchen Sie, beide Beispiele zu lesen oder von ihnen zu spielen, +und Sie werden feststellen, dass der handgestochene Satz sich +angenehmer benutzen lässt. Er weist fließende Linien und Bewegung +auf und fühlt sich wie ein lebendes, atmendes Stück Musik an, während +die neuere Edition kalt und mechanisch erscheint. + +Es ist schwer, sofort die Unterschiede zur neueren Edition auszumachen. +Alles sieht sauber und fein aus, möglicherweise sogar @qq{besser}, +weil es eher computerkonform und einheitlich wirkt. Das hat uns +tatsächlich für eine ganze Weile beschäftigt. Wir wollten die +Computernotation verbessern, aber wir mussten erst verstehen, was +eigentlich falsch mit ihr war. + +Die Antwort findet sich in der präzisen, mathematischen Gleichheit +der neueren Edition. Suchen Sie die Taktstriche in der Mitte jeder +Zeile: im handgestochenen Satz hat die Position dieser Taktstriche +sozusagen natürliche Variation, während die neuere Version sie +fast immer perfekt in die Mitte setzt. Das zeigen diese vereinfachten +Diagramme des Seitenlayouts vom handgestochenen (links) und +Computersatz (rechts): + +@quotation +@iftex +@sourceimage{pdf/page-layout-comparison,,,} +@end iftex +@ifnottex +@sourceimage{page-layout-comparison,,,png} +@end ifnottex +@end quotation +@noindent + +Im Computersatz sind sogar die einzelnen Notenköpfe vertikal +aneinander ausgerichtet, was dazu führt, dass die Melodie hinter +einem starren Gitter aus musikalischen Zeichen verschwindet. + +Es gibt noch weitere Unterschiede: in der handgestochenen Version +sind die vertikalen Linien stärker, die Bögen liegen dichter an den +Notenköpfen und es gibt mehr Abweichungen in der Steigung der +Balken. Auch wenn derartige Details als Haarspalterei erscheinen, +haben wir trotzdem als Ergebnis einen Satz, der einfacher zu lesen +ist. In der Computerausgabe ist jede Zeile fast identisch mit den +anderen und wenn der Musiker für einen Moment weg schaut, wird +er die Orientierung auf der Seite verlieren. + +LilyPond wurde geschaffen, um die Probleme zu lösen, die wir in +existierenden Programmen gefunden haben und um schöne Noten zu +schaffen, die die besten handgestochenen Partituren imitieren. + +@iftex +@page +@noindent +Bärenreiter BA 320, @copyright{}1950: + +@sourceimage{baer-suite1-fullpage-hires,16cm,,} +@page +@noindent +Henle no. 666, @copyright{}2000: +@sp 3 +@sourceimage{henle-suite1-fullpage-hires,16cm,,} +@page +@end iftex + + +@node Details des Notensetzens +@section Details des Notensetzens +@translationof Engraving details + +@cindex Notensatz +@cindex Typographie +@cindex Notengravur +@cindex Gravur, Notensatz +@cindex Plattendruck, Noten + +Die Kunst des Notensatzes wird auch als Notenstich bezeichnet. Dieser +Begriff stammt aus dem traditionellen Notendruck@footnote{Frühe +europäische Drucker versuchten sich an verschiedenen Techniken +wie handgeschnitzten Holzblöcken, beweglichen Lettern und +gravierten dünnen Metallblechen. Der Satz mit Lettern hat den +Vorteil, dass man ihn schnell korrigieren kann und auch Text +einfach einfügen kann, aber nur der Notenstich als Gravur +ermöglichte die Möglichkeit, lebendiges Layout ohne +Qualitätsabstriche zu erstellen. So wurden der Notenstich +mit der Hand bis ins 20. Jahrhundert zum Standard für alle +gedruckten Noten, ausgenommen einige Hymnale und Liederbücher, wo +der Letterdruck durch seine Einfachheit und Kostenersparnis +gerechtfertigt war.}. Noch bis vor etwa 20 +Jahren wurden Noten erstellt, indem man sie in eine Zink- oder Zinnplatte +schnitt oder mit Stempeln schlug. Diese Platte wurde dann mit Druckerschwärze +versehen, so dass sie in den geschnittenen und gestempelten Vertiefungen +blieb. Diese Vertiefungen schwärzten dann ein auf die Platte gelegtes +Papier. Das Gravieren wurde vollständig von Hand erledigt. Es war darum +sehr mühsam, Korrekturen anzubringen, weshalb man von vornherein richtig +schneiden musste. Die Kunst des Notenstechens war eine sehr +spezialisierte Handwerkskunst, für die ein Handwerker etwa fünf +Ausbildungsjahre benötigte, bevor der den Meistertitel tragen durfte. +Weitere fünf Jahre waren erforderlich, um diese Kunst wirklich zu +beherrschen. + +@quotation +@iftex +@sourceimage{hader-slaan,,7cm,} +@end iftex +@ifnottex +@sourceimage{hader-slaan,,,jpg} +@end ifnottex +@end quotation + +LilyPond wurde von den handgestochenen traditionellen Noten +inspiriert, die in der ersten Hälfte des 20. Jahrhunderts von +europäischen Notenverlagen herausgegeben wurden (insbesondere +Bärenreiter, Duhem, Durand, Hofmeister, Peters und Scott). Sie +werden teilweise als der Höhepunkt des traditionellen Notenstichs +angesehen. Beim Studium dieser Editionen haben wir eine Menge +darüber gelernt, was einen gut gesetzten Musikdruck ausmacht und +welche Aspekte des handgestochenen Notensatzes wir in LilyPond +imitieren wollten. + +@c Heutzutage wird fast alle gedruckte Musik von Computern erstellt. Das +@c hat einige deutliche Vorteile: Drucke sind billiger als die gravierten +@c Platten und der Computersatz kann per E-Mail verschickt werden. Leider +@c hat der intensive Einsatz des Computers die graphische Qualität +@c des Notensatzes vermindert. Mit dem Computer erstellte Noten sehen +@c langweilig und mechanisch aus, was es erschwert, von ihnen zu spielen. + +@menu +* Notenschriftarten:: +* Optischer Ausgleich:: +* Hilfslinien:: +* Optische Größen:: +* Warum der große Aufwand?:: + @end menu + +@node Notenschriftarten +@unnumberedsubsec Notenschriftarten +@translationof Music fonts + +Die Abbildung unten illustriert den Unterschied zwischen +traditionellem Notensatz und einem typischen Computersatz. +Das linke Bild zeigt ein eingescanntes b-Vorzeichen +einer handgestochenen Bärenreiter-Edition, das rechte Bild +hingegen ein Symbol aus einer 2000 herausgegebenen Edition +der selben Noten. Obwohl beide Bilder mit der gleichen +Tintenfarbe gedruckt sind, wird die frühere Version dunkler: die +Notenlinien sind dicker und das Bärenreiter-b hat ein rundliches, +beinahe sinnliches Aussehen. Der rechte Scan hingegen hat +dünnere Linien und eine gerade Form mit scharfen Ecken und Kanten. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab +@ifnotinfo +@iftex +@sourceimage{baer-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{baer-flat-gray,,,png} +@end ifnottex + +@tab +@iftex +@sourceimage{henle-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{henle-flat-gray,,,png} +@end ifnottex + +@end ifnotinfo +@ifinfo +@sourceimage{henle-flat-bw,,,png} +@sourceimage{baer-flat-bw,,,png} +@sourceimage{lily-flat-bw,,,png} +@end ifinfo + + +@item @tab +Bärenreiter (1950) +@tab +Henle (2000) + +@end multitable + + +@cindex Musiksymbole +@cindex Schriftart +@cindex Dichte +@cindex Balance + +Als wir uns entschlossen hatten, ein Programm zu schreiben, das +die Typographie des Notensatzes beherrscht, gab es keine freien +Musikschriftarten, die unserem geplanten eleganten Notenbild passen +würden. Unbeirrt schufen wir eine Schriftart und dazu einen +Computerfont mit den musikalischen Symbolen, wobei wir uns an den +schönen Musikdrucken der handgestochenen Noten orientierten. Ohne +diese Erfahrung hätten wir nie verstanden, wie hässlich die +Schriftarten waren, die wir zuerst bewunderten. + +Unten ein Beispiel zweier Notenschriftarten. Das obere Beispiel ist der +Standard im Sibelius-Programm (die @emph{Opus}-Schriftart), das +untere unsere eigene LilyPond-Schriftart. + +@quotation +@iftex +@sourceimage{pdf/OpusAndFeta,,,} +@end iftex +@ifnottex +@sourceimage{OpusAndFeta,,,png} +@end ifnottex +@end quotation + +Die LilyPond-Symbole sind schwerer und ihre Dicke ist durchgängiger, +wodurch sie einfacher zu lesen sind. Feine Enden, wie etwa die +Seiten der Viertelpause, sollten nicht als scharfe Spitzen enden, +sondern etwas abgerundet. Das liegt daran, dass scharfe Enden +der Stempel sehr fragil sind und sich schnell durch die Verwendung +abnutzen. Zusammengefasst muss die Schwärze der Schriftart sehr +vorsichtig mit der Schwärze von Notenlinien, Balken und Bögen +abgeglichen werden, um ein starkes, aber doch ausgewogenes Gesamtbild +zu ergeben. + +Einige weitere Besonderheiten: der Notenkopf der Halben ist nicht +elliptisch, sondern etwas rautenförmig. Der vertikale Hals des +b-Symbols ist schwach keilförmig nach oben hin. Das Kreuz und das +Auflösungszeichen sind einfacher aus der Entfernung zu unterscheiden, +weil ihre schrägen Linien eine andere Neigung haben und die vertikalen +Linien dicker sind. + +@node Optischer Ausgleich +@unnumberedsubsec Optischer Ausgleich +@translationof Optical spacing + +Die Aufteilung der Noten in der Horizontalen sollte die Dauer der +jeweiligen Note widerspiegeln. Wie wir jedoch im Beispiel der +Bach-Suite oben sehen konnten, orientieren sich viele moderne +Partituren an den Dauern mit mathematischer Präzision, was zu +schlechten Ergebnissen führt. Im nächsten Beispiel ist ein Motiv +zweimal dargestellt: das erste Mal mit exakter mathematischer +Aufteilung, das zweite Mal mit Korrekturen. Welches Beispiel +spricht Sie mehr an? + +@cindex Optischer Ausgleich + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.0 + \override NoteSpacing #'same-direction-correction = #0.0 + \override StaffSpacing #'stem-spacing-correction = #0.0 + } + } +} +@end lilypond + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 | + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} + +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.6 + } + } +} +@end lilypond + +@cindex normale Rhythmen +@cindex normale Abstände +@cindex Abstände, normal +@cindex Rhythmen, normal + +In jedem Takt in diesem Ausschnitt kommen Noten vor, die in einem +gleichmäßigen Rhythmus gespielt werden. Die Abstände sollten das +widerspiegeln. Leider lässt uns aber das Auge im Stich: es beachtet +nicht nur den Abstand von aufeinander folgenden Notenköpfen, sondern +auch den ihrer Hälse. Also müssen Noten, deren Hälse in direkter +Folge zuerst nach oben und dann nach unten ausgerichtet sind, weiter +auseinander gezogen werden, während die unten/oben-Folge engere +Abstände fordert, und das alles auch noch in Abhängigkeit von der +vertikalen Position der Noten. Das untere Beispiel ist mit dieser +Korrektur gesetzt. Im oberen Beispiel hingegen bilden sich +für das Auge bei unten/oben-Folgen Notenklumpen. Ein Notenstechermeister +hätte die Notenaufteilung angepasst, sodass die angenehm zu lesen ist. + +Die Algorithmen zur Platzaufteilung von LilyPond berechnen sogar die +Taktstriche mit ein, weshalb die letzte Noten mit Hals nach oben im +richtig platzierten Beispiel etwas mehr Platz vor dem Taktstrich +erhält, damit sie nicht gedrängt wirkt. Ein Hals nach unten würde diesen Ausgleich nicht benötigen. + + +@node Hilfslinien +@unnumberedsubsec Hilfslinien +@translationof Ledger lines + +@cindex Hilfslinien +@cindex Zusammenstöße + +Hilfslinien stellen eine typographische Herausforderung dar: sie +machen es schwerer, die Notensymbole dicht anzuordnen und sie müssen +klar genug sein, dass sich die Tonhöhe mit einem schnellen Blick +erkennen lässt. Im Beispiel unten können wir sehen, dass +Hilfslinien dicker als normale Notenlinien sein sollten und dass +ein gelernter Notenstecher eine Hilfslinie verkürzt, um dichteres +Platzieren von Versetzungszeichen zu erlauben. Wir haben diese +Eigenschaft in den Notensatz von LilyPond eingebaut. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab + +@iftex +@sourceimage{baer-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{baer-ledger,,,png} +@end ifnottex + +@tab + +@iftex +@sourceimage{lily-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{lily-ledger,,,png} +@end ifnottex + +@end multitable + + +@node Optische Größen +@unnumberedsubsec Optische Größen +@translationof Optical sizing + +Noten werden in verschiedenen Größen gedruckt. Ursprünglich hatte +man hierzu Stempel in verschiedenen Größen, was gleichzeitig heißt, +dass jeder Stempel so beschaffen war, dass er für seine Größe ein +ideales Abbild erzeugte. Mit den digitalen Fonts kann ein einziger +Umriss mathematisch skaliert werden, um eine beliebige Größe zu +erzeugen, was sehr viele Vorteile hat. In kleinen Größen erscheinen +die Symbole jedoch zu dünn. + +Für LilyPond haben wir Schriftarten mit einer Reihe von Dicken +erstellt, die jeweils einer Notengröße entsprechen. Hier ein +LilyPond-Notensatz mit der Systemgröße 26: + +@quotation +@iftex +@sourceimage{pdf/size26,,23mm,} +@end iftex +@ifnottex +@sourceimage{size26,,,png} +@end ifnottex +@end quotation + +@noindent +und hier die gleichen Noten mit Systemgröße 11, anschließend um 236% +vergrößert, damit das Bild in exakt der gleichen Größe wie das +vorige erscheint: + +@quotation +@iftex +@sourceimage{pdf/size11,,23mm,} +@end iftex +@ifnottex +@sourceimage{size11,,,png} +@end ifnottex +@end quotation + +@noindent +Bei kleineren Größen benutzt LilyPond proportional dickere +Notenlinien, sodass das Notenbild immer noch gut zu lesen ist. + +@ignore +Dadurch können auch Notensysteme unterschiedlicher Größe +friedlich nebeneinander auf der gleichen Seite erscheinen: + +@c TODO: are the stems in this example the right thickness? How should +@c line weights be scaled for small staves? + +@c Grieg's Violin Sonata Op. 45 +@lilypond[indent=1.5cm] +global = { + \time 6/8 + \key c \minor +} + +\score { + << + \new Staff \with { + fontSize = #-4 + \override StaffSymbol #'staff-space = #(magstep -4) + \override StaffSymbol #'thickness = #(magstep -3) + } + \relative c' { + \global + \set Staff.instrumentName = #"Violin" + c8.(\f^> b16 c d) ees8.(^> d16 c b) + g8.(^> b16 c ees) g8-.^> r r + R2. + } + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff \relative c' { + \global + s2. + s4. s8 r8 r16 + 4.^> 8 r r + } + \new Staff \relative c { + \global + \clef "bass" + << + { + \once \override DynamicText #'X-offset = #-3 + 2.~->^\f + 4.~ 8 + } \\ { + 2.~ + 4.~ 8 + } + >> + r8 r16 16 + 4.-> 8 r r + } + >> + >> +>> +} +@end lilypond +@end ignore + + +@node Warum der große Aufwand? +@unnumberedsubsec Warum der große Aufwand? +@translationof Why work so hard? + +Musiker sind üblicherweise zu sehr damit beschäftigt, die Musik aufzuführen, +als dass sie das Aussehen der Noten studieren könnten; darum mag diese +Beschäftigung mit typographischen Details akademisch wirken. +Das ist sie aber nicht. Notenmaterial ist Aufführungsmaterial: +alles muss unternommen werden, damit der Musiker die Aufführung +besser bewältigt, und alles, das unklar oder unangenehm ist, +ist eine Hindernis. + +Der dichtere Eindruck, den die dickeren Notenlinien und schwereren +Notationssymbole schaffen, eignet sich besser für Noten, +die weit vom Leser entfernt stehen, etwa auf einem Notenständer. +Eine sorgfältige Verteilung der Zwischenräume erlaubt es, die +Noten sehr dicht zu setzen, ohne dass die Symbole zusammenklumpen. +Dadurch werden unnötige Seitenumbrüche vermieden, so dass man +nicht so oft blättern muss. + +Dies sind die Anforderungen der Typographie: Das Layout sollte +schön sein -- nicht nur aus Selbstzweck, sondern vor allem um dem +Leser zu helfen. Für Aufführungsmaterial ist das umso wichtiger, +denn Musiker haben eine begrenzte Aufnahmefähigkeit. Je weniger +Mühe nötig ist, die Noten zu erfassen, desto mehr Zeit bleibt für +die Gestaltung der eigentlichen Musik. Das heißt: Gute +Typographie führt zu besseren Aufführungen! + +Die Beispiele haben gezeigt, dass der Notensatz eine subtile und +komplexe Kunst ist und gute Ergebnisse nur mit viel Erfahrung +erlangt werden können, die Musiker normalerweise nicht haben. +LilyPond stellt unser Bemühen dar, die graphische Qualität +handgestochener Notenseiten ins Computer-Zeitalter zu transportieren +und sie für normale Musiker erreichbar zu machen. Wir haben +unsere Algorithmen, die Gestalt der Symbole und die Programm-Einstellungen +darauf abgestimmt, einen Ausdruck zu erzielen, der der Qualität +der alten Editionen entspricht, die wir so gerne betrachten +und aus denen wir gerne spielen. + + + +@node Automatisierter Notensatz +@section Automatisierter Notensatz +@translationof Automated engraving + +@cindex Notensatz, automatisch +@cindex automatischer Notensatz + +Dieser Abschnitt beschreibt, was benötigt wird um ein Programm zu +schreiben, welches das Layout von gestochenen Noten nachahmen kann: +eine Methode, dem Computer gute Layouts zu erklären und detailliertes +Vergleichen mit echten Notendrucken. + +@menu +* Schönheitswettbewerb:: +* Verbessern durch Benchmarking:: +* Alles richtig machen:: +@end menu + +@node Schönheitswettbewerb +@unnumberedsubsec Schönheitswettbewerb +@translationof Beauty contests + +Wie sollen wir also jetzt die Typographie anwenden? +Anders gesagt: welcher von den drei Konfigurationen sollte für +den folgenden Bogen ausgewählt werden? + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[( f] g[ a b d,)] r4 + \once \override Slur #'positions = #'(2 . 3) + e8[( f] g[ a b d,)] r4 + e8[( f] g[ a b d,)] r4 +} +@end lilypond + +Es gibt wenige Bücher über die Kunst des Notensatzes. Leider +haben sie nur Daumenregeln und einige Beispiele zu bieten. Solche +Regeln können sehr informativ sein, aber sie sind weit entfernt +von einem Algorithmus, den wir in unser Programm einbauen könnten. +Indem man die Anweisungen der Literatur anwendet, kommt man zu +Algorithmen mit sehr vielen manuellen Ausnahmen. Alle die möglichen +Fälle zu analysieren stellt sehr viel Arbeit dar und meistens +werden dennoch nicht alle Fälle vollständig abgedeckt: + +@quotation +@iftex +@sourceimage{ross-beam-scan,7cm,,} +@end iftex +@ifnottex +@sourceimage{ross-beam-scan,,,.jpg} +@end ifnottex +@end quotation + +(Bildquelle: Ted Ross, @emph{The Art of Music Engraving}) + +Anstatt zu versuchen, für jedes mögliche Szenario eine passende +Layoutregel zu definieren, müssen wir nur die Regeln genau genug +beschreiben, sodass LilyPond die Gefälligkeit von mehreren +Alternativen selber einschätzen kann. Dann errechnen wir für jede +mögliche Konfiguration eine Hässlichkeits-Rangliste und wir wählen +die Konfiguration aus, die am wenigsten hässlich ist. + +Zum Beispiel hier drei mögliche Konfiguration eines Legatobogens, +und LilyPond hat jeder Konfiguration @qq{Hässlichkeitspunkte} +verliehen. Das erste Beispiel erhält 15.39 Punkte, weil einer der +Notenköpfe angeschnitten wird: + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[(_"15.39" f] g[ a b d,)] r4 +} +@end lilypond + +Das zweite Beispiel ist schöner, aber der Bogen beginnt weder noch +endet er an den Notenköpfen. Hier werden 1.71 Punkte auf der linken +und 9.37 Punkte auf der rechten Seite verliehen, plus weiteren +2 Punkten, weil der Bogen aufsteigt, während die Melodie absteigt. +Insgesamt also 13.08 Punkte: + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(2 . 3) + e8[(_"13.08" f] g[ a b d,)] r4 +} +@end lilypond + +Der letzte Bogen erhält 10.04 Punkte für die Lücke rechts und +2 Punkte für die Neigung nach oben, aber er ist die schönste +der drei Varianten, sodass LilyPond ihn auswählt: + +@lilypond +\relative c { + \clef bass + e8[(_"12.04" f] g[ a b d,)] r4 +} +@end lilypond + +Diese Technik ist sehr allgemein und wird benutzt, um optimale +Entscheidungen für Bögenkonfigurationen, Bindebögen und Punkten +in Akkorden, Zeilenumbrüche und Seitenumbrüche zu erhalten. Die +Ergebnisse dieser Entscheidungen können durch einen Vergleich mit +handgestochenen Noten eingeschätzt werden. + + +@node Verbessern durch Benchmarking +@unnumberedsubsec Verbessern durch Benchmarking +@translationof Improvement by benchmarking + +Die Ausgabe von LilyPond hat sich schrittweise mit der Zeit +verbessert, und sie verbessert sich weiter, indem sie immer wieder +mit handgestochenen Noten verglichen wird. + +Hier als Beispiel eine Zeile eines Benchmark-Stückes aus einer +handgestochenen Notenedition (Bärenreiter BA320): + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@noindent +und die gleiche Zeile als Satz einer sehr alten LilyPond-Version +(Version 1.4, Mai 2001): + +@iftex +@sourceimage{pdf/lily14-sarabande,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande,,,png} +@end ifnottex + +@noindent +Die Ausgabe von LilyPond 1.4 ist auf jeden Fall leserlich, aber +ein ausführlicher Vergleich mit der Vorlage zeigt viele Fehler in +den Formatierungsdetails: + +@iftex +@sourceimage{lily14-sarabande-annotated-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande-annotated,,,png} +@end ifnottex + +@itemize @bullet +@item vor der Taktangabe ist nicht genug Platz +@item die Hälse der bebalkten Noten sind zu lang +@item der zweite und vierte Takt sind zu schmal +@item der Bogen sieht ungeschickt aus +@item das Triller-Symbol ist zu groß +@item die Hälse sind zu dünn +@end itemize + +@noindent +(Es gibt auch zwei fehlende Notenköpfe, verschiedene editorische +Anweisungen, die Fehler und eine falsche Tonhöhe!) + +Indem die Layoutregeln und das Design der Schriftarten angepasst +wurde, hat sich die Ausgabe sehr stark verbessert. Vergleichen +Sie das gleiche Referenzbeispiel und die Ausgabe der aktuellen +LilyPond-Version (@version{}): + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@lilypond[staffsize=17.5,line-width=15.9\cm] +\relative c { + \clef "bass" + \key d \minor + \time 3/4 + \mergeDifferentlyDottedOn + << + { \slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e) } + \\ + { d4_2 a2 } + >> + \slurDashed + 4. e8( d c) + \slurSolid + bes8 g' f e16( f g_1 a_2 bes_3 d,_2) + \slurDashed + cis4.-\trill b8_3( a g) + << + { \slurDashed d'8.( e16) e4.-\trill( d16 e) } + \\ + { 4 a2 } + >> +} +@end lilypond + +@noindent +Die jetzige Ausgabe ist kein Klon der Referenzedition, aber sie ist +sehr viel näher an einer Publikationsqualität. + + +@node Alles richtig machen +@unnumberedsubsec Alles richtig machen +@translationof Getting things right + +Wir können auch die Fähigkeiten von LilyPond, Notensatzentscheidungen +alleine zu fällen, messen, indem wir die Ausgabe von LilyPond mit +der Ausgabe eines kommerziellen Notensatzprogramms vergleichen. +In diesem Fall haben wir Finale 2008 genommen, eines der beliebtesten +Notensatzprogramme, insbesondere in Nordamerika. Sibelius ist +Finales hauptsächlicher Gegenspieler, offensichtlich vor allem in +Europa verbreitet. + +Für unseren Vergleich haben wir uns für die Fuge in G-Moll aus +dem Wohltemperierten Clavier 1, BWV 861 von J. S. Bach entschieden, +mit dem Hauptthema: + +@lilypond +\relative c' { + \key g \minor + \clef "treble_8" + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a bes8 +} +@end lilypond + +@noindent +In unserem Vergleich setzten wir die letzten sieben Takte des +Stückes (28--34) in Finale und LilyPond. Das ist der Punkt, an +der das Thema als dreistimmige Engführung in den Schlussabschnitt +überleitet. In der Finale-Version haben wir der Versuchung +widerstanden, jedwede Anpassungen abweichend vom Standard vorzunehmen, +weil wir zeigen wollen, welche Dinge von den beiden Programmen +ohne Hilfeleistung richtig gemacht werden. Die einzigen größeren +Änderungen, die wir vorgenommen haben, war die Anpassung der +Seitengröße an die Seitengröße dieses Aufsatzes und die Begrenzung +der Noten auf zwei Systeme, um den Vergleich einfacher zu machen. +In der Standardeinstellung Finale hätte zwei Zeilen mit je drei +Takten und schließlich eine letzte Zeile gesetzt, die nur einen einzigen +Takt enthält. + +Viele der Unterschiede zwischen den beiden Sätzen finden sich +in den Takten 28--29, hier zuerst in Finales Version, dann in der +Version von LilyPond: + +@iftex +@sourceimage{pdf/bwv861mm28-29,14cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm28-29,,,png} +@end ifnottex + +@lilypond[staffsize=19.5,line-width=14\cm] +global = { \key g \minor } + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 +} + +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a +} + +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" + << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + + \new Staff = "LH" << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond + +Einige der Mängel des nicht editierten Finale-Satzes beinhalten: + +@itemize @bullet + +@item Die meisten Balken sind zu weit vom Notensystem entfernt. +Ein Balken, der zum Zentrum des Systems zeigt, sollte etwa die +Länge einer Oktave haben, aber Notensetzer verkürzen die Länge, +wenn der Balken in polyphonen Situationen aus dem System +herauszeigt. Die Bebalkung von Finale kann einfach mit ihrem +Patterson Beams-Plugin verbessert werden, aber wir haben diesen +Schritt für dieses Beispiel ausgelassen. + +@item Finale passt die Position von ineinander greifenden Notenköpfen +nicht an, sodass die Noten sehr schwer lesbar werden, wenn +die untere und obere Stimme zeitweise ausgetauscht werden: + +@lilypond +collide = \once \override NoteColumn #'force-hshift = #0 + +\score { + << + \new Voice = "sample" \relative c''{ + \key g \minor + << + { \voiceOne g4 \collide g4 } + \new Voice { \voiceTwo bes \collide bes } + >> + } + \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" } + >> +} +@end lilypond + +@item Finale positioniert alle Pausen an einer festen Position auf +dem System. Der Benutzer kann sie anpassen, wie er es richtig +findet, aber das Programm unternimmt keinen Versuch, den Inhalt +der anderen Stimme mit einzubeziehen. Durch einen Glücksfall +kommen keine wirklichen Kollisionen zwischen Noten und Pausen +in diesem Beispiel vor, aber das liegt mehr an der Position der +Noten als an der der Pausen. Anders gesagt: Bach verdient mehr +Aufmerksamkeit um vollständige Kollisionen zu vermeiden als +Finale ihm gönnt. + +@end itemize + +Dieses Beispiel soll nicht suggerieren, dass man mit Finale nicht +Notensatz in Publikationsqualität erstellen könnte. Das Programm ist +durchaus dazu fähig, wenn ein erfahrener Benutzer genug Zeit und Fähigkeit mitbringt. +Einer der fundamentalen Unterschiede zwischen LilyPond und kommerziellen +Notensatzprogrammen ist, dass LilyPond versucht, den Aufwand an +menschlicher Intervention auf ein absolutes Minimum zu reduzieren, +während andere Programme versuchen, ein attraktives Programmfenster +zu bieten, in dem die Anpassungen vorgenommen werden können. + +Einen besonders hervorstechenden Mangel von Finale +ist ein fehlendes b-Vorzeichen in Takt 33: + +@quotation +@iftex +@sourceimage{pdf/bwv861mm33-34-annotate,7.93cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm33-34-annotate,,,png} +@end ifnottex +@end quotation + +@noindent +Das b-Symbol wird benötigt, um das Auflösungzeichen im selben +Takt rückgängig zu machen, aber Finale lässt es aus, weil es in +einer anderen Stimme vorkommt. Der Benutzer muss nicht nur daran +denken, ein Balken-Plugin zu starten und die Notenköpfe und Pausen +neu anzuordnen, er muss auch jeden Takt prüfen, ob Versetzungszeichen +aus anderen Stimmen korrigiert werden müssen, damit nicht ein +Notensatzfehler die Probe unnötig unterbricht. + +Wenn Sie diese Beispiel noch detaillierter betrachten wollen, +können Sie den vollen siebentaktigen Ausschnitt am Ende dieses +Aufsatzes als Notensatz in vier unterschiedlichen +publizierten Editionen finden. Nähere Betrachtung zeigt, dass +es einige akzeptable Variationen zwischen den handgestochenen +Beispielen gibt, dass LilyPond aber ziemlich guten Notensatz +im Rahmen dieser Variationen produziert. Auch die LilyPond-Ausgabe +hat noch ihre Fehler: sie ist beispielsweise etwas zu aggressiv +bei der Verkürzung einiger Hälse -- hier ist also noch Raum für +weitere Entwicklung und Feineinstellung. + +Natürlich hängt Typographie vom menschlichen Urteil der Erscheinung +ab, sodass Menschen nicht vollständig ersetzt werden können. Viel +der eintönigen Arbeit kann jedoch automatisiert werden. Wenn +LilyPond die meisten üblichen Situationen richtig löst, ist das +schon eine große Verbesserung gegenüber existierender Software. +Im Laufe der Jahre wir das Programm immer besser und macht mehr +und mehr Sachen automatisch, sodass manuelles Eingreifen immer +seltener wird. Wo manuelle Anpassungen benötigt werden, +wurde die Struktur von LilyPond mit Flexibilität im Hinterkopf +geplant. + + +@node Ein Programm bauen +@section Ein Programm bauen +@translationof Building software + +Dieser Abschnitt beschreibt einige der Entscheidungen, +die wir während des Programmierens für das Design von LilyPond +getroffen haben. + +@menu +* Die Darstellung der Musik:: +* Welche Symbole?:: +* Flexible Architektur:: +@end menu + +@node Die Darstellung der Musik +@unnumberedsubsec Die Darstellung der Musik +@translationof Music representation + +@cindex Syntax +@cindex rekursive Strukturen + +Idealerweise ist das Eingabeformat für ein komplexes Satzsystem die +abstrakte Beschreibung des Inhaltes. In diesem Fall wäre das die +Musik selber. Das stellt uns aber vor ein ziemlich großes Problem, +denn wie können wir definieren, was Musik wirklich ist? Anstatt darauf +eine Antwort zu suchen, haben wir die Frage einfach umgedreht. Wir +schreiben ein Programm, das den Notensatz beherrscht und machen das +Format so einfach wie möglich. Wenn es nicht mehr vereinfacht +werden kann, haben wir per Definition nur noch den reinen Inhalt. Unser +Format dient als die formale Definition eines Musiktextes. + +Die Syntax ist gleichzeitig die Benutzerschnittstelle bei LilyPond, +darum soll sie einfach zu schreiben sein; z. B. bedeutet + +@example +@{ + c'4 d'8 +@} +@end example + +@noindent +dass eine Viertel c' und eine Achtel d' erstellt werden sollen, +wie in diesem Beispiel: + +@lilypond[quote] +{ + c'4 d'8 +} +@end lilypond + +In kleinem Rahmen ist diese Syntax sehr einfach zu benutzen. In +größeren Zusammenhängen aber brauchen wir Struktur. Wie sonst kann +man große Opern oder Symphonien notieren? Diese Struktur wird +gewährleistet durch sog. @emph{music expressions} (Musikausdrücke): +indem kleine Teile zu größeren kombiniert werden, kann komplexere +Musik dargestellt werden. So etwa hier: + +@lilypond[quote,verbatim,fragment,relative=1] +f4 +@end lilypond + +@noindent +Gleichzeitig erklingende Noten werden hinzugefügt, indem man alle in @code{<<} und @code{>>} einschließt. + +@example +<> +@end example + +@lilypond[quote,fragment,relative=1] +\new Voice { <> } +@end lilypond + +@noindent +Um aufeinanderfolgende Noten darzustellen, werden sie in geschweifte Klammern gefasst: + +@code{@{@tie{}@dots{}@tie{}@}} + +@example +@{ f4 <> @} +@end example + +@lilypond[quote,relative=1,fragment] +{ f4 <> } +@end lilypond + +@noindent +Dieses Gebilde ist in sich wieder ein Ausdruck, und kann +daher mit einem anderen Ausdruck kombiniert werden (hier mit einer Halben), wobei @code{<<}, @code{\\}, and @code{>>} eingesetzt wird: + +@example +<< g2 \\ @{ f4 <> @} >> +@end example + +@lilypond[quote,fragment,relative=2] +\new Voice { << g2 \\ { f4 <> } >> } +@end lilypond + +Solche geschachtelten Strukturen können sehr gut in einer +kontextunabhängigen Grammatik beschrieben werden. Der Programmcode +für den Satz ist auch mit solch einer Grammatik erstellt. Die Syntax +von LilyPond ist also klar und ohne Zweideutigkeiten definiert. + +Die Benutzerschnittstelle und die Syntax werden als erstes vom Benutzer +wahrgenommen. Teilweise sind sie eine Frage des Geschmackes und werden viel +diskutiert. Auch wenn Geschmacksfragen ihre Berechtigung +haben, sind sie nicht sehr produktiv. Im großen Rahmen von LilyPond +spielt die Eingabe-Syntax nur eine geringe Rolle, denn eine logische +Syntax zu schreiben ist einfach, guten Formatierungscode aber sehr viel +schwieriger. Das kann auch die Zeilenzahl der Programmzeilen zeigen: +Analysieren und Darstellen nimmt nur etwa 10% des Codes ein: + +Während wir die Strukturen von LilyPond entwickelten, machten wir einige Entscheidungen, die sich von anderen Programmen unterscheiden. +Nehmen wir etwa die hierarchische Natur der Musiknotation: + +@lilypond[quote,fragment] +<< + \new Staff \relative c'' { + \key g \major + \time 3/4 + d4 g,8 a b c d4 g, g + } + \new Staff \relative c' { + \clef "bass" + \key g \major + 2 a4 b2. + } +>> +@end lilypond + +In diesem Fall werden Tonhöhen in Akkorde gruppiert, die zu Takten +gehören, welche wiederum zu Notensystemen gehören. Das erinnert an +die saubere Struktur von geschachtelten Kästen: + +@quotation +@iftex +@sourceimage{pdf/nestedboxes,,4cm,} +@end iftex +@ifnottex +@sourceimage{nestedboxes,,,png} +@end ifnottex +@end quotation + +Leider ist die Struktur nur sauber, weil sie auf einige sehr beschränkte +Annahmen basiert. Das wird offensichtlich, wenn man ein komplizierteres +Beispiel heranzieht: + +@lilypond[quote] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +\new PianoStaff << + \new Staff = "RH" << + \new Voice = "I" \relative c''' { + \time 3/4 + \voiceOne + \times 6/7 { g8 g g g g g g } + \oneVoice + r4 r4\fermata + } + \new Voice = "II" \relative c' { + \voiceTwo + c4 + \times 4/5 { + 8 f g + \change Staff = "LH" \oneVoice + \stemUp g,( c} + r4 + \override Stem #'cross-staff = ##t + \override Stem #'length = #12 + ) r\fermata + } + >> + \new Staff = "LH" << + \new Voice = "III" \relative c' { + \time 2/4 + \clef "bass" + g4 \stopStaff s + \startStaff s2*2 + } + >> +>> +@end lilypond + +In diesem Beispiel beginnen Systeme plötzlich und enden plötzlich, +Stimmen springen zwischen den Systemen herum und die Systeme haben +unterschiedliche Taktarten. Viele Software-Pakte würden sehr damit +zu kämpfen haben, dieses Beispiel darzustellen, weil sie nach dem +Prinzip von geschachtelten Kästen aufgebaut sind. In LilyPond dagegen +haben wir versucht, die Struktur und das Eingabeformat so flexibel wie +möglich zu gestalten. + + +@node Welche Symbole? +@unnumberedsubsec Welche Symbole? +@translationof What symbols to engrave? + +@cindex Notensatz +@cindex Typographie +@cindex Stempel +@cindex Matrize +@cindex Engraver +@cindex Plugin + +Während des Notensatzprozesses entscheidet sich, wo +Symbole platziert werden. Das kann aber nur gelingen, +wenn vorher entschieden wird, @emph{welche} Symbole +gesetzt werden sollen, also welche Art von Notation benutzt +werden soll. + +Die heutige Notation ist ein System zur Musikaufzeichnung, +das sich über die letzten 1000 Jahre entwickelt hat. Die +Form, die heute üblicherweise benutzt wird, stammt aus der frühen +Renaissance. Auch wenn sich die grundlegenden Formen (also +die Notenköpfe, das Fünfliniensystem) nicht verändert haben, +entwickeln sich die Details trotzdem immer noch weiter, um +die Errungenschaften der Neuen Musik darstellen zu können. Die +Notation umfasst also 500 Jahre Musikgeschichte. Ihre Anwendung +reicht von monophonen Melodien bis zu ungeheuer komplexem Kontrapunkt +für großes Orchester. + +Wie bekommen wir dieses vielköpfige Monster zu fassen und in die +Fesseln eines Computerprogrammes zu legen? +Unsere Lösung ist es, das Problem in kleine (programmierbare) Happen zu zerteilen, so dass jede Art +von Symbol durch ein eigenes Modul, als Plugin bezeichnet, +verarbeitet werden kann. Jedes Plugin ist vollständig modular +und unabhängig und kann unabhängig entwickelt und verbessert +werden. Derartige Plugins werden @code{engraver} genannt, +analog zu den Notenstechern (engl. engraver), die musikalische +Ideen in graphische Symbole übersetzen. + +Im nächsten Beispiel wird gezeigt, wie mit dem Plugin für die Notenköpfe, +dem @code{Note_heads_engraver} (@qq{Notenkopfstecher}) der Satz begonnen wird. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + \remove "Staff_symbol_engraver" + \consists "Pitch_squash_engraver" + } + } +} +@end lilypond + +@noindent +Dann fügt ein @code{Staff_symbol_engraver} (@qq{Notensystemstecher}) +die Notenlinien hinzu. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \consists "Pitch_squash_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +Der @code{Clef_engraver} (@qq{Notenschlüsselstecher}) definiert +eine Referenzstelle für das System. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +Der @code{Stem_engraver} (@qq{Halsstecher}) schließlich fügt + Hälse hinzu. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +Dem @code{Stem_engraver} wird jeder Notenkopf mitgeteilt, +der vorkommt. Jedes Mal, wenn ein Notenkopf erscheint (oder mehrere bei +einem Akkord), wird ein Hals-Objekt erstellt und an den +Kopf geheftet. Wenn wir dann noch Engraver für Balken, Bögen, +Akzente, Versetzungszeichen, Taktstriche, Taktangaben und Tonartbezeichnungen +hinzufügen, erhalten wir eine vollständige Notation. + + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { \topVoice } +@end lilypond + +@cindex Polyphonie +@cindex Mehrstimmigkeit +@cindex Notensatz, Mehrstimmigkeit +@cindex Kontexte + +Dieses System funktioniert gut für monophone Musik, aber wie geht +es mit Polyphonie? Hier müssen sich mehrere Stimmen ein System teilen. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\new Staff << \topVoice \\ \botVoice >> +@end lilypond + +In diesem Fall benutzen beide Stimmen das System und die Vorzeichen gemeinsam, +aber die Hälse, Bögen, Balken usw. sind jeder einzelnen Stimme +eigen. Die Engraver müssen also gruppiert werden. Die Köpfe, +Hälse, Bögen usw. werden in einer Gruppe mit dem Namen @qq{Voice +context} (Stimmenkontext) zusammengefasst, die Engraver für den +Schlüssel, die Vorzeichen, Taktstriche usw. dagegen in einer +Gruppe mit dem Namen @qq{Staff context} (Systemkontext). Im Falle +von Polyphonie hat ein Staff-Kontext dann also mehr als nur einen +Voice-Kontext. Auf gleiche Weise können auch mehrere Staff-Kontexte +in einen großen Score-Kontext (Partiturkontext) eingebunden werden. +Der Score-Kontext ist auf der höchsten Ebene der Kontexte. + + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { + << + \new Staff << \topVoice \\ \botVoice >> + \new Staff << \pah \\ \hoom >> + >> +} +@end lilypond + +@seealso +Referenz der Interna: @rinternals{Contexts}. + + +@node Flexible Architektur +@unnumberedsubsec Flexible Architektur +@translationof Flexible architecture + +Als wir anfingen, haben wir LilyPond vollständig in der Programmiersprache C++ +geschrieben. Das hieß, dass der Funktionsumfang des Programms vollständig durch +die Programmierer festgelegt war. Das stellte sich aus einer Reihe von Gründen +als unzureichend heraus: + +@itemize @bullet + +@item Wenn LilyPond Fehler macht, muss der Benutzer die +Einstellungen ändern können. Er muss also Zugang zur +Formatierungsmaschinerie haben. Deshalb können die Regeln und +Einstellungen nicht beim Kompilieren des Programms festgelegt +werden, sondern sie müssen zugänglich sein, während das Programm +aktiv ist. + +@item Notensatz ist eine Frage des Augenmaßes, und damit auch vom +Geschmack abhängig. Benutzer können mit unseren Entscheidungen +unzufrieden sein. Darum müssen also auch die Definitionen des +typographischen Stils dem Benutzer zugänglich sein. + +@item Schließlich verfeinern wir unseren Formatierungsalgorithmus +immer weiter, also müssen die Regeln auch flexibel sein. Die +Sprache C++ zwingt zu einer bestimmten Gruppierungsmethode, +die nicht den Regeln für den Notensatz entspricht. +@end itemize + +@cindex Scheme-Programmiersprache + +Diese Probleme wurden angegangen, indem ein Übersetzer für +die Programmiersprache Scheme integriert wurde und Teile +von LilyPond in Scheme neu geschrieben wurden. Die derzeitige +Formatierungsarchitektur ist um die Notation von graphischen +Objekten herum aufgebaut, die von Scheme-Variablen und -Funktionen +beschrieben werden. Diese Architektur umfasst Formatierungsregeln, +typographische Stile und individuelle Formatierungsentscheidungen. +Der Benutzer hat direkten Zugang zu den meisten dieser Einstellungen. + +Scheme-Variablen steuern Layout-Entscheidungen. Zum Beispiel haben +viele graphische Objekte eine Richtungsvariable, die zwischen +oben und unten (oder rechts und links) wählen kann. Hier etwa +sind zwei Akkorde mit Akzenten und Arpeggien. +Beim ersten Akkord sind alle Objekte nach unten (oder links) +ausgerichtet, beim zweiten nach oben (rechts). + +@lilypond[quote,ragged-right] +\score { + \relative c' { + \stemDown 4_>-\arpeggio + \override Arpeggio #'direction = #RIGHT + \stemUp 4^>-\arpeggio + } + \layout { + \context { + \Score + \override SpacingSpanner #'spacing-increment = #3 + \override TimeSignature #'transparent = ##t + } + } +} +@end lilypond + +@cindex Formatierung einer Partitur +@cindex Partitur, Formatierung +@cindex Formatierungsregeln + +@noindent +Der Prozess des Notensetzens besteht für das Programm darin, +die Variablen der graphischen Objekte zu lesen und zu +schreiben. Einige Variablen haben festgelegte Werte. So +ist etwa die Dicke von vielen Linien – ein Charakteristikum +des typographischen Stils – von vornherein festgelegt. +Wenn sie geändert werden, ergibt sich ein anderer typographischer Eindruck. + +@lilypond[quote,ragged-right] +fragment = { + \clef bass f8 as8 + c'4-~ c'16 as g f e16 g bes c' des'4 +} +<< + \new Staff \fragment + \new Staff \with { + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #0.5 + \override Bar #'thickness = #3.6 + \override Tie #'thickness = #2.2 + \override StaffSymbol #'thickness = #3.0 + \override Tie #'extra-offset = #'(0 . 0.3) + } + \fragment +>> +@end lilypond + +Formatierungsregeln sind auch vorbelegte Variablen. Zu jedem Objekt gehören +Variablen, die Prozeduren enthalten. Diese Prozeduren machen die eigentliche +Satzarbeit aus, und wenn man sie durch andere ersetzt, kann die Darstellung +von Objekten verändert werden. Im nächsten Beispiel wird die Regel, nach der +die Notenköpfe gezeichnet werden, während des Ausschnitts verändert. + +@lilypond[quote,ragged-right] +#(set-global-staff-size 30) + +#(define (mc-squared grob orig current) + (let* ((interfaces (ly:grob-interfaces grob)) + (pos (ly:grob-property grob 'staff-position))) + (if (memq 'note-head-interface interfaces) + (begin + (ly:grob-set-property! grob 'stencil + (grob-interpret-markup grob + (make-lower-markup 0.5 + (case pos + ((-5) "m") + ((-3) "c ") + ((-2) (make-smaller-markup (make-bold-markup "2"))) + (else "bla"))))))))) + +\new Voice \relative c' { + \stemUp + \set autoBeaming = ##f + \time 2/4 + 4 + \once \override NoteHead #'stencil = #note-head::brew-ez-stencil + \once \override NoteHead #'font-size = #-7 + \once \override NoteHead #'font-family = #'sans + \once \override NoteHead #'font-series = #'bold + 4 + \once \override NoteHead #'style = #'cross + 4 + \applyOutput #'Voice #mc-squared + 4 + << + { d8[ es-( fis^^ g] fis2-) } + \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } + >> +} +@end lilypond + + +@node LilyPond die Arbeit überlassen +@section LilyPond die Arbeit überlassen +@translationof Putting LilyPond to work + +@cindex einfaches Beispiel +@cindex Beispiel, einfach + +Wir haben LilyPond als einen Versuch geschrieben, wie man die Kunst des +Musiksatzes in ein Computerprogramm gießen kann. Dieses +Programm kann nun dank vieler harter Arbeitsstunden benutzt werden, +um sinnvolle Aufgaben zu erledigen. Die einfachste ist dabei der +Notendruck. + +@lilypond[quote,relative=1] +{ + \time 2/4 + c4 c g'4 g a4 a g2 +} +@end lilypond + +@noindent +Indem wir Akkordsymbole und einen Text hinzufügen, erhalten wir +ein Liedblatt. + +@lilypond[quote,ragged-right] +<< + \chords { c2 c f2 c } + \new Staff + \relative c' { + \time 2/4 + c4 c g' g a a g2 + } + \addlyrics { twin -- kle twin -- kle lit -- tle star } +>> +@end lilypond + +Mehrstimmige Notation und Klaviermusik kann auch gesetzt werden. Das +nächste Beispiel zeigt einige etwas exotischere Konstruktionen: + +@lilypond[quote,line-width=15.9\cm] +\header { + title = "Screech and boink" + subtitle = "Random complex notation" + composer = "Han-Wen Nienhuys" +} + +\score { + \context PianoStaff << + \new Staff = "up" { + \time 4/8 + \key c \minor + << { + \revert Stem #'direction + \change Staff = down + \set subdivideBeams = ##t + g16.[ + \change Staff = up + c'''32 + \change Staff = down + g32 + \change Staff = up + c'''32 + \change Staff = down + g16] + \change Staff = up + \stemUp + \set followVoice = ##t + c'''32([ b''16 a''16 gis''16 g''32)] + } \\ { + s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] + } \\ { + s4 \autoBeamOff d''8.. f''32 + } \\ { + s4 es''4 + } >> + } + + \new Staff = "down" { + \clef bass + \key c \minor + \set subdivideBeams = ##f + \override Stem #'french-beaming = ##t + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #4.0 + g'16[ b16 fis16 g16] + << \makeClusters { + as16 + + + } \\ { + \override Staff.Arpeggio #'arpeggio-direction =#down + 4\arpeggio + } + >> } + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 60 8) + } + } + \layout { + \context { + \Staff + \consists Horizontal_bracket_engraver + } + } +} +@end lilypond + +Die obenstehenden Beispiele wurde manuell erstellt, aber das ist nicht +die einzige Möglichkeit. Da der Satz fast vollständig automatisch abläuft, +kann er auch von anderen Programmen angesteuert werden, die Musik oder Noten +verarbeiten. So können etwa ganze Datenbanken musikalischer Fragmente automatisch +in Notenbilder umgewandelt werden, die dann auf Internetseiten oder +in Multimediapräsentation Anwendung finden. + +Dieser Aufsatz zeigt eine weitere Möglichkeit: Die Noten werden als +reiner Text eingegeben und können darum sehr einfach integriert werden +in andere textbasierte Formate wie etwa @LaTeX{}, HTML oder, wie in diesem +Fall, Texinfo. Mithilfe des Programmes @command{lilypond-book}, +das in LilyPond inbegriffen ist, werden die Fragmente mit +Notenbildern ersetzt und in die produzierte PDF- oder HTML-Datei +eingefügt. Ein weiteres Beispiel ist die von LilyPond unabhängige +Erweiterung OOoLilyPond für OpenOffice.org, mit der es sehr einfach +ist, Musikbeispiele in Dokumente einzufügen. + +Zu mehr Beispielen, wie LilyPond sich in Aktion verhält, für vollständige +Dokumentation und das Programm LilyPond besuchen Sie unsere +Webseite: www.lilypond.org. + + +@page +@node Notensatzbeispiele (BWV 861) +@section Notensatzbeispiele (BWV 861) +@translationof Engraved examples (BWV 861) + +Dieser Abschnitt enthält vier Referenz-Notenstiche und zwei +computergesetzte Versionen der Fuge G-Moll aus dem Wohltemperierten +Clavier I (BWV 681) von J. S. Bach (die letzten sieben Takte). + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989): + +@iftex +@sourceimage{bwv861-baer,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-small,,,png} +@end ifnottex + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989), eine alternative musikalische Quelle. Neben den +musikalischen Unterschieden sind hier auch ein paar unterschiedliche +Notensatzentscheidungen getroffen worden, sogar vom selben Herausgeber +in der selben Edition: + +@iftex +@sourceimage{bwv861-baer-alt,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-alt-small,,,png} +@end ifnottex + +@noindent +Breitkopf & Härtel, bearbeitet von Ferruccio Busoni (Wiesbaden, 1894), +auch in der Petrucci Music Library (IMSLP #22081) erhältlich. +Die editorischen Bezeichnungen (Fingersatz, Artikulation usw.) +wurde entfernt, um bessere Vergleichbarkeit mit den anderen +Editionen zu bieten: + +@iftex +@sourceimage{bwv861-breitkopf,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-breitkopf-small,,,png} +@end ifnottex + +@noindent +Bach-Gesellschaft Edition (Leipzig, 1866), erhältlich in der Petrucci +Music Library (IMSPL #02221): + +@iftex +@sourceimage{bwv861-gessellschaft,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-gessellschaft-small,,,png} +@end ifnottex + +@noindent +Finale 2008: + +@iftex +@sourceimage{pdf/bwv861-finale2008a,,,} +@end iftex +@ifnottex +@sourceimage{bwv861-finale2008a,,,png} +@end ifnottex + +@sp 4 +@noindent +LilyPond, version @version{}: + +@lilypond[staffsize=14.3,line-width=15.9\cm] +global = {\key g \minor} + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 + r2 r8 d16 ees f8 ees16 d + ees4 ~ ees16 d c bes a4 r8 ees'16 d + c8 d16 ees d8 e16 fis g8 fis16 g a4 ~ + a8 d, g f ees d c bes + a2 g\fermata \bar "|." +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 + r8 fis16 g a8 g16 fis g2 ~ + g2 r8 d' ees g, + fis4 g r8 a16 bes c8 bes16 a + bes4. 8 r r + 4 d2 +} +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a + bes2 ~ bes8 b16 a g8 a16 b + c4 r r2 + R1 + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a b2 +} +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a + d,8 d'16 c bes8 c16 d ees2 ~ + ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a + d,8 d'16 c bes8 c16 d ees8 c a fis' + g f ees d c bes a g + c a d d, g2\fermata +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + + \new Staff = "LH" << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond + diff --git a/Documentation/de/essay/literature.itely b/Documentation/de/essay/literature.itely new file mode 100644 index 0000000000..0bfaeb9e4a --- /dev/null +++ b/Documentation/de/essay/literature.itely @@ -0,0 +1,103 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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" + +@c Translators: Till Paala + + +@node Literatur +@chapter Literatur +@translationof Literature list + +Hier eine Liste der Literatur, die in LilyPond benutzt wurde: + +@menu +* Kurze Literaturliste:: +* Lange Literaturliste:: +@end menu + +@node Kurze Literaturliste +@section Kurze Literaturliste +@translationof Short literature list + +Wenn Sie mehr über Notation und den Notenstich erfahren wollen, sind +hier einige interessante Titel gesammelt. + + +@table @cite + +@item Ignatzek 1995 +Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne +1995. Mainz, Germany ISBN 3-7957-5140-3. + +Eine praktische Einführung zum Spielen von Jazz auf dem Klavier. Eins der +ersten Kapitel enthält einen Überblick über die Akkorde, die im Jazz +verwendet werden. + +@item Gerou 1996 + +Tom Gerou and Linda Lusk, Essential Dictionary of Music +Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. + +Eine ausführliche, alphabetische Liste vieler Belange des Musiksatzes +und der Notation; die üblichen Fälle werden behandelt. + +@item Read 1968 +Gardner Read, Music Notation: A Manual of Modern Practice. +Taplinger Publishing, New York (2nd edition). + +Ein Klassiker für die Musiknotation. + +@item Ross 1987 +Ted Ross, Teach yourself the art of music engraving and processing. +Hansen House, Miami, Florida 1987. + +Dieses Buch handelt vom Musiksatz, also vom professionellen Notenstich. +Hier sind Anweisungen über Stempel, die Benutzung von Stiften und +nationale Konventionen versammelt. Die Kapitel zu Reproduktionstechniken +und der historische Überblick sind auch interessant. + +@item Schirmer 2001 +The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. + +Dieses Handbuch setzt den Fokus auf die Herstellung von Drucksachen für den +Schirmer-Verlag. Hier werden viele Details behandelt, die sich in anderen +Notationshandbüchern nicht finden. Es gibt auch einen guten Überblick, was +nötig ist, um Drucke in publikationstauglicher Qualität zu produzieren. + +@item Stone 1980 + +Kurt Stone, Music Notation in the Twentieth Century. +Norton, New York 1980. + +Dieses Buch enthält einen Überblick über die Notation von moderner E-Musik, +beginnt aber mit einem Überblick über bereits existente Praktiken. + +@end table + + +@node Lange Literaturliste +@section Lange Literaturliste +@translationof Long literatur list + +@subheading Notensatzliteraturliste der University of Colorado + +@include colorado.itexi + +@subheading Computernotation-Bibliographie + +@include computer-notation.itexi + +@subheading Notensatz-Bibliographie + +@include engravingbib.itexi + + diff --git a/Documentation/de/extending.tely b/Documentation/de/extending.tely new file mode 100644 index 0000000000..059e71df31 --- /dev/null +++ b/Documentation/de/extending.tely @@ -0,0 +1,79 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 + +@setfilename lilypond-extending.info +@settitle LilyPond erweitern +@documentencoding UTF-8 +@documentlanguage de +@afourpaper + +@c Translators: Till Paala + +@macro manualIntro +Diese Datei erklärt, wie man die Funktionalität von +LilyPond Version @version{} erweitern kann. +@end macro + +@c `Extending' was born 2003-04-23 with git commit c08f6e8... +@macro copyrightDeclare +Copyright @copyright{} 2003--2011 bei den Autoren. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Programming extensions for the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage German +@end ignore + + +@lilyTitlePage{Extending} + + +@c TOC -- non-tex +@ifnottex + +@menu +* Scheme-Übung:: Programmieren innerhalb von LilyPond. +* Schnittstellen für Programmierer:: Wie man mit Scheme kommunizieren kann. +* LilyPond Scheme-Schnittstellen:: Information in die Noten senden und aus den Noten erhalten. + +Anhänge + +* GNU Free Documentation License:: Die Lizenz dieses Dokuments. +* LilyPond-Index:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + + +@include extending/scheme-tutorial.itely +@include extending/programming-interface.itely + +@include fdl.itexi + +@node LilyPond-Index +@appendix LilyPond-Index +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/de/extending/GNUmakefile b/Documentation/de/extending/GNUmakefile new file mode 100644 index 0000000000..000480f365 --- /dev/null +++ b/Documentation/de/extending/GNUmakefile @@ -0,0 +1,4 @@ +depth = ../../.. +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/extending/programming-interface.itely b/Documentation/de/extending/programming-interface.itely new file mode 100644 index 0000000000..cc2d364fe2 --- /dev/null +++ b/Documentation/de/extending/programming-interface.itely @@ -0,0 +1,1122 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + 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" + +@c Translators: Till Paala + +@node Schnittstellen für Programmierer +@chapter Schnittstellen für Programmierer +@translationof Interfaces for programmers + +Fortgeschrittene Anpassungen können mithilfe der Programmiersprache +Scheme vorgenommen werden. Wenn Sie Scheme nicht kennen, gibt +es eine grundlegende Einleitung in LilyPonds +@ref{Scheme-Übung}. + +@menu +* Musikalische Funktionen:: +* Textbeschriftungsfunktionen:: +* Kontexte für Programmierer:: +* Callback-Funktionen:: +* Scheme-Code innerhalb LilyPonds:: +* Schwierige Korrekturen:: +@end menu + + +@node Musikalische Funktionen +@section Musikalische Funktionen +@translationof Music functions + +Dieser Abschnitt behandelt die Erstellung von musikalischen Funktionen +innerhalb von LilyPond. @emph{Musikalische Funktionen} sind Scheme-Prozeduren, +die musikalische Ausdrücke automatisch erstellen können und dadurch die +Eingabedatei maßgeblich vereinfachen können. + +@menu +* Syntax der musikalischen Funktionen:: +* Einfache Ersetzungsfunktionen:: +* Mittlere Ersetzungsfunktionen:: +* Mathematik in Funktionen:: +* Funktionen ohne Argumente:: +* Leere Funktionen:: +@end menu + +@node Syntax der musikalischen Funktionen +@subsection Syntax der musikalischen Funktionen +@translationof Music function syntax + +Die allgemeine Form von musikalischen Funktionen ist: + +@example +function = +#(define-music-function + (parser location @var{Arg1} @var{Arg2} @dots{}) + (@var{Typ1?} @var{Typ2?} @dots{}) + @var{Noten}) +@end example + +@noindent +wobei + +@multitable @columnfractions .33 .66 +@item @var{ArgN} +@tab das @var{n}te Argument + +@item @var{TypN?} +@tab ein Scheme-Typenprädikat (engl. type predicate), für welches +@code{@var{ArgN}} @code{#t} ausgeben muss + +@item @var{...Noten...} +@tab ein musikalischer Ausdruck, optional in Scheme geschrieben, mit allem +LilyPond-Code in Raute/geschweifte Klammer eingeschlossen +(@tie{}@w{@code{#@{@dots{}#@}}}@tie{}). Innerhalb der LilyPond-Codeumgebungen +wird @code{$} eingesetzt, um auf Funktionsargumente zu verweisen (etwa +@samp{$Arg1}), oder ein neuer Scheme-Ausdruck muss begonnen werden, +der die Funktionsargumente enthält (etwa @w{@samp{$(cons Arg1 Arg2)}}). + +@end multitable + +Eine Liste der möglichen Typenprädikate findet sich in +@ruser{Vordefinierte Typenprädikate}. Durch den Benutzer definierte +Typenprädikate sind auch erlaubt. + +@seealso + +Notationsreferenz: +@ruser{Vordefinierte Typenprädikate}. + +Installierte Dateien: +@file{lily/music-scheme.cc}, +@file{scm/c++.scm}, +@file{scm/lily.scm}. + + +@node Einfache Ersetzungsfunktionen +@subsection Einfache Ersetzungsfunktionen +@translationof Simple substitution functions + +Einfache Ersetzungsfunktionen sind musikalische Funktionen, deren +musikalische Ausgabe-Funktion im LilyPond-Format geschrieben ist +und Funktionsargumente in der Ausgabefunktion enthält. Sie werden +beschrieben in @ruser{Beispiele der Ersetzungsfunktionen} + + +@node Mittlere Ersetzungsfunktionen +@subsection Mittlere Ersetzungsfunktionen +@translationof Intermediate substitution functions + +Mittlere Ersetzungsfunktionen setzen sich aus einer Mischung von +Scheme-Code und LilyPond-Code in der musikalischen Ausgabe-Funktion +zusammen. + +Einige @code{\override}-Befehle benötigen ein Zahlenpaar +(als @code{cons}-Zelle in Scheme bezeichnet). + +Das Paar kann direkt an die musikalische Funktion +mit der Variable @code{pair?} weitergeleitet werden: + +@example +manualBeam = +#(define-music-function + (parser location beg-end) + (pair?) + #@{ + \once \override Beam #'positions = $beg-end + #@}) + +\relative c' @{ + \manualBeam #'(3 . 6) c8 d e f +@} +@end example + +Anstelle dessen können auch die Zahlen, aus denen das Paar besteht, +einzeln als eigenständige Argumente weitergeleitet und der +Scheme-Code, der das Paar erstellt, in die musikalische Funktion +augenommen werden: + +@lilypond[quote,verbatim,ragged-right] +manualBeam = +#(define-music-function + (parser location beg end) + (number? number?) + #{ + \once \override Beam #'positions = $(cons beg end) + #}) + +\relative c' { + \manualBeam #3 #6 c8 d e f +} +@end lilypond + + +@node Mathematik in Funktionen +@subsection Mathematik in Funktionen +@translationof Mathematics in functions + +Musikalische Funktionen können neben einfachen Ersetzungen +auch Scheme-Programmcode enthalten: + +@lilypond[quote,verbatim,ragged-right] +AltOn = +#(define-music-function + (parser location mag) + (number?) + #{ + \override Stem #'length = $(* 7.0 mag) + \override NoteHead #'font-size = + $(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) + #}) + +AltOff = { + \revert Stem #'length + \revert NoteHead #'font-size +} + +\relative c' { + c2 \AltOn #0.5 c4 c + \AltOn #1.5 c c \AltOff c2 +} +@end lilypond + +@noindent +Dieses Beispiel kann auch umformuliert werden, um musikalische Ausdrücke +zu integrieren: + +@lilypond[quote,verbatim,ragged-right] +withAlt = +#(define-music-function + (parser location mag music) + (number? ly:music?) + #{ + \override Stem #'length = $(* 7.0 mag) + \override NoteHead #'font-size = + $(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) + $music + \revert Stem #'length + \revert NoteHead #'font-size + #}) + +\relative c' { + c2 \withAlt #0.5 { c4 c } + \withAlt #1.5 { c c } c2 +} +@end lilypond + + +@node Funktionen ohne Argumente +@subsection Funktionen ohne Argumente +@translationof Functions without arguments + +In den meisten Fällen sollten Funktionen ohne Argumente mit einer +Variable notiert werden: + +@example +dolce = \markup@{ \italic \bold dolce @} +@end example + +In einigen wenigen Fällen kann es aber auch sinnvoll sein, eine +musikalische Funktion ohne Argumente zu erstellen: + +@example +displayBarNum = +#(define-music-function + (parser location) + () + (if (eq? #t (ly:get-option 'display-bar-numbers)) + #@{ \once \override Score.BarNumber #'break-visibility = ##f #@} + #@{#@})) +@end example + +Damit auch wirklich Taktzahlen angezeigt werden, wo die +Funktion eingesetzt wurde, muss @command{lilypond} mit +der Option + +@example +lilypond -d display-bar-numbers Dateiname.ly +@end example + +@noindent +aufgerufen werden. + + + +@node Leere Funktionen +@subsection Leere Funktionen +@translationof Void functions + +Eine musikalische Funktion muss einen musikalischen Ausdruck +ausgeben, aber in manchen Fällen müssen Funktionen erstellt werden, +die keine Noten enthalten (wie etwa eine Funktion, mit der +man @qq{Point and Click} ausschalten kann). Um das vornehmen zu +können, wird ein @code{leere}r musikalischer Ausdruck ausgegeben. + +Das ist der Grund, warum die Form, die ausgegeben wird, +@w{@code{(make-music @dots{})}} heißt. Wird die Eigenschaft +@code{'void} (engl. für @qq{leer}) auf @code{#t} gesetzt, wird der +Parser angewiesen, den ausgegebenen musikalischen Ausdruck zu ignorieren. +Der maßgebliche Teil der @code{'void}-Funktion ist also die Verarbeitung, +die die Funktion vornimmt, nicht der musikalische Ausdruck, der ausgegeben +wird. + +@example +noPointAndClick = +#(define-music-function + (parser location) + () + (ly:set-option 'point-and-click #f) + (make-music 'SequentialMusic 'void #t)) +... +\noPointAndClick % Point and Click ausschalten +@end example + + + +@node Textbeschriftungsfunktionen +@section Textbeschriftungsfunktionen +@translationof Markup functions + +Textbeschriftungselemente sind als besondere Scheme-Funktionen +definiert, die ein @code{Stencil}-Objekt erstellen, dem eine Anzahl +an Argumenten übergeben wird. + +@menu +* Beschriftungskonstruktionen in Scheme:: +* Wie Beschriftungen intern funktionieren:: +* Neue Definitionen von Beschriftungsbefehlen:: +* Neue Definitionen von Beschriftungslistenbefehlen:: +@end menu + + +@node Beschriftungskonstruktionen in Scheme +@subsection Beschriftungskonstruktionen in Scheme +@translationof Markup construction in Scheme + +@cindex Textbeschriftungsbefehle, definieren +@cindex Textbeschriftung, eigene Befehle +@cindex eigene Befehle, Textbeschriftung +@cindex markup, eigene Befehle +@cindex Befehle definieren, Textbeschriftung + +Das @code{markup}-(Textbeschriftungs)Makro erstellt Textbeschriftungs-Ausdrücke +in Scheme, wobei eine LilyPond-artige Syntax benutzt wird. Beispielsweise +ist + +@example +(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world") + #:larger #:line ("foo" "bar" "baz"))) +@end example + +@noindent +identisch mit + +@example +\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @} + \larger \line @{ foo bar baz @} @} +@end example + +@noindent +Dieses Beispiel zeigt die hauptsächlichen Übersetzungsregeln +zwischen normaler Textbeschriftungssyntax von LilyPond und der +Textbeschriftungssyntax in Scheme. + +@quotation +@multitable @columnfractions .3 .3 +@item @b{LilyPond} @tab @b{Scheme} +@item @code{\markup Text1} @tab @code{(markup Text1)} +@item @code{\markup @{ Text1 Text2 ... @}} @tab + @code{(markup Text1 Text2 ... )} +@item @code{\Beschriftungsbefehl} @tab @code{#:Beschriftungsbefehl} +@item @code{\Variable} @tab @code{Variable} +@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )} +@item @code{Zeichenkette} @tab @code{"Zeichenkette"} +@item @code{#scheme-Arg} @tab @code{scheme-Arg} +@end multitable +@end quotation + +Die gesamte Scheme-Sprache ist innerhalb des @code{markup}-Makros +zugänglich. Man kann also beispielsweise Funktionen innerhalb +eines @code{markup} aufrufen, um Zeichenketten zu manipulieren. +Das ist nützlich, wenn neue Beschriftungsbefehle definiert werden +sollen (siehe auch +@ref{Neue Definitionen von Beschriftungsbefehlen}). + + +@knownissues + +Das Beschriftungslistenargument von Befehlen wie @code{#:line}, +@code{#:center} und @code{#:column} kann keine Variable oder +das Resultat eines Funktionsaufrufen sein. + +@lisp +(markup #:line (Funktion-die-Textbeschriftung-ausgibt)) +@end lisp + +@noindent +ist ungültig. Man sollte anstatt dessen die Funktionen +@code{make-line-markup}, @code{make-center-markup} oder +@code{make-column-markup} benutzen: + +@lisp +(markup (make-line-markup (Funktion-die-Textbeschriftung-ausgibt))) +@end lisp + + +@node Wie Beschriftungen intern funktionieren +@subsection Wie Beschriftungen intern funktionieren +@translationof How markups work internally + +In einer Textbeschriftung wie + +@example +\raise #0.5 "Textbeispiel" +@end example + +@noindent +ist @code{\raise} unter der Haube durch die @code{raise-markup}-Funktion +repräsentiert. Der Beschriftungsausdruck wird gespeichert als + +@example +(list raise-markup 0.5 (list simple-markup "Textbeispiel")) +@end example + +Wenn die Beschriftung in druckbare Objekte (Stencils) umgewandelt ist, +wir die @code{raise-markup}-Funktion folgendermaßen aufgerufen: + +@example +(apply raise-markup + @var{\layout object} + @var{Liste der Eigenschafts-alists} + 0.5 + @var{die "Textbeispiel"-Beschriftung}) +@end example + +Die @code{raise-markup}-Funktion erstellt zunächst den Stencil für die +@code{Textbeispiel}-Beschriftung und verschiebt dann diesen Stencil +um 0.5 Notenlinienzwischenräume nach oben. Das ist ein einfaches +Beispiel. Weitere, kompliziertere Beispiele finden sich nachfolgend +in diesem Abschnitt und in der Datei +@file{scm/define-markup-commands.scm}. + + +@node Neue Definitionen von Beschriftungsbefehlen +@subsection Neue Definitionen von Beschriftungsbefehlen +@translationof New markup command definition + +Dieser Abschnitt behandelt die Definition von neuen Textbeschriftungsbefehlen. + +@menu +* Syntax der Definition von Textbeschriftungsbefehlen:: +* Über Eigenschaften:: +* Ein vollständiges Bespiel:: +* Eingebaute Befehle anpassen:: +@end menu + +@node Syntax der Definition von Textbeschriftungsbefehlen +@unnumberedsubsubsec Syntax der Definition von Textbeschriftungsbefehlen +@translationof Markup command definition syntax + +Neue Textbeschriftungsbefehle können mit dem +@code{define-markup-command}-Scheme-Makro definiert werden. + +@lisp +(define-markup-command (@var{befehl-bezeichnung} @var{layout} @var{props} @var{Arg1} @var{Arg2} ...) + (@var{Arg1-typ?} @var{Arg2-typ?} ...) + [ #:properties ((@var{Eigenschaft1} @var{Standard-Wert1}) + ...) ] + ..Befehlkörper..) +@end lisp + +Die Argumente sind: + +@table @var +@item @var{befehl-bezeichnung} +die Bezeichnung des Befehls + +@item @var{layout} +die @q{layout}-Definition + +@item props +eine Liste an assoziativen Listen, in der alle aktiven Eigenschaften enthalten sind + +@item @var{argi} +das @var{i}te Befehlsargument + +@item @var{argi-type?} +eine Eigenschaft für das @var{i}te Argument +@end table + +Wenn der Befehl Eigenschaften des @code{props}-Arguments benutzt, +kann das @code{#:properties}-Schlüsselwort benutzt werden um zu +bestimmen, welche Eigenschaften mit welchen Standard-Werten benutzt +werden. + +Argumente werden nach ihrem Typ unterschieden: + +@itemize +@item eine Textbeschriftung entspricht einem Typenprädikat @code{markup?}; +@item eine Textbeschriftungsliste entspricht einem Typenprädikat +@code{markup-list?}; +@item jedes andere Scheme-Objekt entspricht Typenprädikaten wie etwa +@code{list?}, @code{number?}, @code{boolean?}, usw. +@end itemize + +Es gibt keine Einschränkung in der Reihenfolge der Argumente (nach +den Standard-Argumenten @code{layout} und @code{props}). Textbeschriftungsfunktionen, +die als letztes Argument eine Textbeschriftung haben, haben die +Besonderheit, dass sie auf Textbeschriftungslisten angewendet werden +können, und das Resultat ist eine Textbeschriftungsliste, in der +die Textbeschriftungsfuktion (mit den angegebenen Argumenten am Anfang) +auf jedes Element der originalen Textbeschriftungsliste angewendet +wurde. + +Da das Wiederholen der Argumente am Anfang bei der Anwendung einer +Textbeschriftungsfunktion auf eine Textbeschriftungsliste for allem +für Scheme-Argumente sparsam ist, kann man Leistungseinbußen vermeiden, +indem man nur Scheme-Argumente für die Argumente am Anfang einsetzt, +wenn es sich um Textbeschriftungsfunktionen handelt, die eine Textbeschriftung +als letztes Argument haben. + + +@node Über Eigenschaften +@unnumberedsubsubsec Über Eigenschaften +@translationof On properties + +Die @code{layout}- und @code{props}-Argumente der Textbeschriftungsbefehle +bringen einen Kontext für die Interpretation der Beschriftung: +Schriftgröße, Zeilenlänge usw. + +Das @code{layout}-Argument greift auf Eigenschaften zu, die in der +@code{paper}-Umgebung definiert werden, indem man die @code{ly:output-def-lookup}-Funktion +benutzt. Beispielsweise liest man die Zeilenlänge (die gleiche, die auch in +Partituren benutzt wird) aus mit: + +@example +(ly:output-def-lookup layout 'line-width) +@end example + +Das @code{props}-Argument stellt einige Eigenschaften für die Textbeschriftungsbefehle +zur Verfügung. Beispielsweise wenn der Überschrifttext einer +@code{book}-Umgebung interpretiert wird, werden alle Variablen, die +in der @code{\header}-Umgebung definiert werden, automatisch zu @code{props} +hinzugefügt, sodass die Beschriftung auf Titel, Komponist usw. der +@code{book}-Umgebung zugreifen kann. Das ist auch eine Möglichkeit, das +Verhalten eines Beschriftungsbefehls zu konfigurieren: Wenn etwa ein +Befehl die Schriftgröße während der Verarbeitung einsetzt, wird die +Schriftgröße aus den @code{props} ausgelesen und nicht mit einem eigenen +@code{font-size}-Argument definiert. Beim Aufruf des Beschriftungsbefehls +kann der Wert der Schriftgröße geändert werden, womit sich auch das Verhalten +des Befehls verändert. Benutzen Sie das @code{#:properties}-Schlüsselwort +von @code{define-markup-command} um zu definieren, welche Eigenschaften aus den +@code{props}-Argumenten ausgelesen werden sollen. + +Das Beispiel im nächsten Abschnitt illustriert, wie man auf Eigenschaften +in einem Beschriftungsbefehl zugreifen und sie verändern kann. + + +@node Ein vollständiges Bespiel +@unnumberedsubsubsec Ein vollständiges Bespiel +@translationof A complete example + +Das folgende Beispiel definiert einen Beschriftungsbefehl, der einen +doppelten Kasten um einen Text zeichnet. + +Zuerst wollen wir ein annäherndes Ergebnis mit Textbeschriftungen definieren. +Nach Stöbern in @ruser{Textbeschriftungsbefehle} finden wir den Befehl +@code{\box}: + +@lilypond[quote,verbatim,ragged-right] +\markup \box \box HELLO +@end lilypond + +Wir wollen aber etwas mehr Abstand (engl. padding) zwischen dem Text und dem Kasten. +Nach der Dokumentation von @code{\box} hat der Befehl eine +@code{box-padding}-Eigenschaft, die den Standardwert von 0.2 hat. Die +Dokumentation zeit auch, wir man den Wert verändert: + +@lilypond[quote,verbatim,ragged-right] +\markup \box \override #'(box-padding . 0.6) \box A +@end lilypond + +Auch der Abstand zwischen den zwei Kästen ist uns zu klein und soll auch +vergrößert werden: + +@lilypond[quote,verbatim,ragged-right] +\markup \override #'(box-padding . 0.4) \box \override #'(box-padding . 0.6) \box A +@end lilypond + +Diese lange Textbeschriftung immer wieder schreiben zu müssen, ist +anstrengend. Hier kömmt ein Textbeschriftungsbefehl ins Spiel. Wir +schreiben uns alle einen @code{double-box}-Beschriftungsbefehl, der +ein Argument annimmt (den Text). Er zeichnet zwei Kästen mit genügend Abstand: + +@lisp +#(define-markup-command (double-box layout props text) (markup?) + "Draw a double box around text." + (interpret-markup layout props + (markup #:override '(box-padding . 0.4) #:box + #:override '(box-padding . 0.6) #:box text))) +@end lisp + +@code{text} ist die Bezeichnung des Arguments dieses Befehls, +und @code{markup?} ist seine Art: hiermit wird der Befehl als +Beschriftungsbefehl identifiziert. Die @code{interpret-markup}-Funktion +wird in den meisten Beschriftungsbefehlen benutzt: sie erstellt einen +Stencil, wobei @code{layout}, @code{props} und eine Beschriftung benutzt +werden. In unserem Fall wird diese Beschriftung durch das +@code{markup}-Scheme-Makro erstellt, siehe auche @ref{Beschriftungskonstruktionen in Scheme}. +Die Transformation des @code{\markup}-Ausdrucks in einen +Scheme-Beschriftungsausdruck geschieht durch umschreiben des LilyPond-Codes +in Scheme-Code. + +Der neue Befehl kann wie folgt benutzt werden: + +@example +\markup \double-box A +@end example + +Es wäre schön, den @code{double-box}-Befehl noch konfigurierbar zu gestalten: +in unserem Fall sind die Werte von @code{box-padding} direkt definiert und +können nicht mehr vom Benutzer verändert werden. Es wäre auch besser, wenn +der Abstand zwischen den beiden Kästen vom Abstand zwischen dem inneren Kasten +und dem Text unterschieden werden könnte. Eine neue Eigenschaft muss also +definiert werden: @code{inter-box-padding} für den Abstand zwischen den Kästen. +@code{box-padding} wird für den inneren Abstand benutzt. Der neue Befehl wird +so definiert: + +@lisp +#(define-markup-command (double-box layout props text) (markup?) + #:properties ((inter-box-padding 0.4) + (box-padding 0.6)) + "Draw a double box around text." + (interpret-markup layout props + (markup #:override `(box-padding . ,inter-box-padding) #:box + #:override `(box-padding . ,box-padding) #:box text))) +@end lisp + +In diesem Code wird das @code{#:properties}-Schlüsselwort benutzt, sodass +die Eigenschaften @code{inter-box-padding} und @code{box-padding} aus dem +@code{props}-Argument ausgelesen werden, und Standardwerte werden gegeben, +falls die Eigenschaften nicht definiert sein sollten. + +Dann werden diese Werte benutzt, um die @code{box-padding}-Eigenschaft +zu verändert, die von beiden @code{\box}-Befehlen benutzt wird. Beachten +Sie Akzent und das Komma des @code{\override}-Arguments: hiermit kann man +einen Variablenwert in einen wörtlichen Ausdruck überführen. + +Jetzt kann der Befehl in Beschriftungen benutzt werden und der Abstand +der Kästen kann angepasst werden: + +@lilypond[quote,verbatim,ragged-right] +#(define-markup-command (double-box layout props text) (markup?) + #:properties ((inter-box-padding 0.4) + (box-padding 0.6)) + "Draw a double box around text." + (interpret-markup layout props + (markup #:override `(box-padding . ,inter-box-padding) #:box + #:override `(box-padding . ,box-padding) #:box text))) + +\markup \double-box A +\markup \override #'(inter-box-padding . 0.8) \double-box A +\markup \override #'(box-padding . 1.0) \double-box A +@end lilypond + +@node Eingebaute Befehle anpassen +@unnumberedsubsubsec Eingebaute Befehle anpassen +@translationof Adapting builtin commands + +Ein guter Weg, einen neuen Beschriftungsbefehl zu schreiben, ist es, als Vorbild +einen existierenden zu nehmen. Die meisten Beschriftungsbefehle, die +LilyPond mitbringt, finden sich in der Datei +@file{scm/define-markup-commands.scm}. + +Man könnte beispielsweise den Befehl @code{\draw-line}, der eine Linie +zeichnet, anpassen, sodass er eine Doppellinie zeichnet. Der +Befehl @code{\draw-line} ist wie folgend definiert (Dokumentation entfernt): + +@lisp +(define-markup-command (draw-line layout props dest) + (number-pair?) + #:category graphic + #:properties ((thickness 1)) + "..documentation.." + (let ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (x (car dest)) + (y (cdr dest))) + (make-line-stencil th 0 0 x y))) +@end lisp + +Um einen neuen Befehl, der auf einem existierenden basiert, zu definieren, +wird die Befehlsdefinition kopiert und die Bezeichnung des Befehls +geändert. Das @code{#:category}-Schlagwort kann entfernt werden, +weil es nur zur Erstellung der LilyPond-Dokumentation eingesetzt wird +und keine Bedeutung für selbstdefinierte Befehle hat. + +@lisp +(define-markup-command (draw-double-line layout props dest) + (number-pair?) + #:properties ((thickness 1)) + "..documentation.." + (let ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (x (car dest)) + (y (cdr dest))) + (make-line-stencil th 0 0 x y))) +@end lisp + +Dann braucht man eine Eigenschaft, um den Abstand zwischen den zwei +Linien zu definieren, als @code{line-gap} bezeichnet und etwa mit +dem Standardwert 0.6: + +@lisp +(define-markup-command (draw-double-line layout props dest) + (number-pair?) + #:properties ((thickness 1) + (line-gap 0.6)) + "..documentation.." + ... +@end lisp + +Schließlich wird der Code, der die zwei Linien zeichnet, hinzugefügt. +Zwei Aufrufe an @code{make-line-stencil} werden benutzt, um beide Linien +zu zeichnen, und die beiden sich daraus ergebenden Stencils werden mit +@code{ly:stencil-add} kombiniert: + +@lilypond[quote,verbatim,ragged-right] +#(define-markup-command (my-draw-line layout props dest) + (number-pair?) + #:properties ((thickness 1) + (line-gap 0.6)) + "..documentation.." + (let* ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (dx (car dest)) + (dy (cdr dest)) + (w (/ line-gap 2.0)) + (x (cond ((= dx 0) w) + ((= dy 0) 0) + (else (/ w (sqrt (+ 1 (* (/ dx dy) (/ dx dy)))))))) + (y (* (if (< (* dx dy) 0) 1 -1) + (cond ((= dy 0) w) + ((= dx 0) 0) + (else (/ w (sqrt (+ 1 (* (/ dy dx) (/ dy dx)))))))))) + (ly:stencil-add (make-line-stencil th x y (+ dx x) (+ dy y)) + (make-line-stencil th (- x) (- y) (- dx x) (- dy y))))) + +\markup \my-draw-line #'(4 . 3) +\markup \override #'(line-gap . 1.2) \my-draw-line #'(4 . 3) +@end lilypond + + + +@node Neue Definitionen von Beschriftungslistenbefehlen +@subsection Neue Definitionen von Beschriftungslistenbefehlen +@translationof New markup list command definition + +Beschriftungslistenbefehle können mit dem Scheme-Makro +@code{define-markup-list-command} definiert werden, welches +sich ähnlich verhält wie das +@code{define-markup-command}-Makro, das schon beschrieben +wurde in @ref{Neue Definitionen von Beschriftungsbefehlen}. Ein Unterschied +ist, dass bei diesem Listen-Makro eine ganze Liste an +Stencils ausgegeben wird. + +Im folgenden Beispiel wird ein @code{\paragraph}-Beschriftungslistenbefehl +definiert, welcher eine Liste von Zeilen im Blocksatz ausgibt, von +denen die erste Zeile eingerückt ist. Der Einzug wird aus dem +@code{props}-Argument entnommen. + +@example +#(define-markup-list-command (paragraph layout props args) (markup-list?) + (let ((indent (chain-assoc-get 'par-indent props 2))) + (interpret-markup-list layout props + (make-justified-lines-markup-list (cons (make-hspace-markup indent) + args))))) +@end example + +Neben den üblichen @code{layout} und @code{props}-Argumenten nimmt der +@code{paragraph}-Beschriftungslistenbefehl als Argument eine Beschriftungsliste, +die @code{args} genannt wird. Das Prädikat für Beschriftungslisten ist +@code{markup-list?}. + +Zuerst errechnet die Funktion die Breite des Einzugs, eine Eigenschaft +mit der Bezeichnung @code{par-indent} anhand der Eigenschaftsliste +@code{props}. Wenn die Eigenschaft nicht gefunden wird, ist der +Standardwert @code{2}. Danach wird eine Liste von Zeilen im Blocksatz +erstellt, wobei die @code{make-justified-lines-markup-list}-Funktion +eingesetzt wird, die verwandt ist mit dem eingebauten +@code{\justified-lines}-Beschriftungslistenbefehl. Horizontaler +Platz wird zu Beginn eingefügt mit der @code{make-hspace-markup}-Funktion. +Zuletzt wird die Beschriftungsliste ausgewertet durch die +@code{interpret-markup-list}-Funktion. + +Dieser neue Beschriftungslistenbefehl kann wie folgt benutzt werden: + +@example +\markuplines @{ + \paragraph @{ + Die Kunst des Notensatzes wird auch als \italic @{Notenstich@} bezeichnet. Dieser + Begriff stammt aus dem traditionellen Notendruck. Noch bis vor etwa + 20 Jahren wurden Noten erstellt, indem man sie in eine Zink- oder + Zinnplatte schnitt oder mit Stempeln schlug. + @} + \override-lines #'(par-indent . 4) \paragraph @{ + Diese Platte wurde dann mit Druckerschwärze versehen, so dass sie + in den geschnittenen und gestempelten Vertiefungen blieb. Diese + Vertiefungen schwärzten dann ein auf die Platte gelegtes Papier. + Das Gravieren wurde vollständig von Hand erledigt. + @} +@} +@end example + + + +@node Kontexte für Programmierer +@section Kontexte für Programmierer +@translationof Contexts for programmers + +@menu +* Kontextauswertung:: +* Eine Funktion auf alle Layout-Objekte anwenden:: +@end menu + +@node Kontextauswertung +@subsection Kontextauswertung +@translationof Context evaluation + +@cindex Aufrufen von Code während der Interpretation +@cindex On-the-fly Code ausführen + +@funindex \applyContext + +Kontexte können während ihrer Interpretation mit Scheme-Code +modifiziert werden. Die Syntax hierfür ist + +@example +\applyContext @var{function} +@end example + +@var{function} sollte eine Scheme-Funktion sein, die ein +einziges Argument braucht, welches der Kontext ist, auf den +sie ausgeführt werden soll. Der folgende Code schreibt +die aktuelle Taktzahl in die Standardausgabe +während der Kompilation. + +@example +\applyContext + #(lambda (x) + (format #t "\nWe were called in barnumber ~a.\n" + (ly:context-property x 'currentBarNumber))) +@end example + + + +@node Eine Funktion auf alle Layout-Objekte anwenden +@subsection Eine Funktion auf alle Layout-Objekte anwenden +@translationof Running a function on all layout objects + + +@cindex Aufruf von Code für Layoutobjekte + +@funindex \applyOutput + +Der vielfältigste Weg, ein Objekt zu beeinflussen, ist +@code{\applyOutput}. Das funktioniert, indem ein musikalisches +Ereignis in den angegebenen Kontext eingefügt wird +(@rinternals{ApplyOutputEvent}). Die Syntax lautet: + +@example +\applyOutput @var{Kontext} @var{proc} +@end example + +@noindent +wobei @var{proc} eine Scheme-Funktion ist, die drei Argumente +benötigt. + +Während der Interpretation wird die Funktion @code{@var{proc}} für +jedes Layoutobjekt aufgerufen, dass im Kontext @code{@var{Kontext}} +vorgefunden wird, und zwar mit folgenden Argumenten: + +@itemize +@item dem Layoutobjekt +@item dem Kontext, in dem das Objekt erstellt wurde +@item dem Kontext, in welchem @code{\applyOutput} bearbeitet wird. +@end itemize + +Zusätzlich findet sich der Grund für das Layoutobjekt, etwa +der musikalische Ausdruck oder das Objekt, das für seine Erstellung +verantwortlich war, in der Objekteigenschaft @code{cause}. +Für einen Notenkopf beispielsweise ist das ein +@rinternals{NoteHead}-Ereignis, und für einen Notenhals ist es +ein @rinternals{Stem}-Objekt. + +Hier ist eine Funktion, die mit @code{\applyOutput} benutzt +werden kann; sie macht Notenköpfe auf und neben der Mittellinie unsichtbar: + +@lilypond[quote,verbatim,ragged-right] +#(define (blanker grob grob-origin context) + (if (and (memq 'note-head-interface (ly:grob-interfaces grob)) + (< (abs (ly:grob-property grob 'staff-position)) 2)) + (set! (ly:grob-property grob 'transparent) #t))) + +\relative c' { + a'4 e8 <<\applyOutput #'Voice #blanker a c d>> b2 +} +@end lilypond + + +@node Callback-Funktionen +@section Callback-Funktionen +@translationof Callback functions + +Eigenschaften (wie Dicke (@code{thickness}), Richtung (@code{direction}) +usw.) können mit @code{\override} auf feste Werte gesetzt werden, etwa: + +@example +\override Stem #'thickness = #2.0 +@end example + +Eigenschaften können auch auf eine Scheme-Prozedur gesetzt werden: + +@lilypond[fragment,verbatim,quote,relative=2] +\override Stem #'thickness = #(lambda (grob) + (if (= UP (ly:grob-property grob 'direction)) + 2.0 + 7.0)) +c b a g b a g b +@end lilypond + +@noindent +In diesem Fall wird die Prozedur ausgeführt, sobald der Wert der +Eigenschaft während das Formatierungsprozesses angefordert wird. + +Der größte Teil der Satzmaschinierie funktioniert mit derartigen +Callbacks. Eigenschaften, die üblicherweise Callbacks +benutzen, sind u. A.: + +@table @code +@item stencil + Die Druckfunktion, die eine Ausgabe des Symbols hervorruft +@item X-offset + Die Funktion, die die horizontale Position setzt +@item X-extent + Die Funktion, die die Breite eines Objekts errechnet +@end table + +Die Funktionen brauchen immer ein einziges Argument, das der +Grob ist. + +Wenn Funktionen mit mehreren Argumenten aufgerufen werden müssen, +kann der aktuelle Grob mit einer Grob-Einschließung +eingefügt werden. Hier eine Einstellung aus +@code{AccidentalSuggestion}: + +@example +(X-offset . + ,(ly:make-simple-closure + `(,+ + ,(ly:make-simple-closure + (list ly:self-alignment-interface::centered-on-x-parent)) + ,(ly:make-simple-closure + (list ly:self-alignment-interface::x-aligned-on-self))))) +@end example + +@noindent +In diesem Beispiel werden sowohl @code{ly:self-alignment-interface::x-aligned-on-self} +als auch @code{ly:self-alignment-interface::centered-on-x-parent} +mit dem Grob als Argument aufgerufen. Die Resultate werden mit der +@code{+}-Funktion addiert. Um sicherzugehen, dass die Addition +richtig ausgeführt wird, wird das ganze Konstrukt in +@code{ly:make-simple-closure} eingeschlossen. + +In der Tat ist die Benutzung einer einzelnen Funktion als +Eigenschaftswert äquivalent zu + +@example +(ly:make-simple-closure (ly:make-simple-closure (list @var{proc}))) +@end example + +@noindent +Das innere @code{ly:make-simple-closure} stellt den Grob als Argument +für @var{proc} zur Verfügung, das äußere stellt sicher, dass das +Resultat der Funktion ausgegeben wird und nicht das +@code{simple-closure}-Objekt. + +Aus dem Callback heraus kann man eine Beschriftung am einfachsten mit +@code{grob-interpret-markup} auswerten. Beispielsweise: + +@example +mein-callback = #(lambda (grob) + (grob-interpret-markup grob (markup "foo"))) +@end example + + + + + + +@node Scheme-Code innerhalb LilyPonds +@section Scheme-Code innerhalb LilyPonds +@translationof Inline Scheme code + +Der hauptsächliche Nachteil von @code{\tweak} ist seine +syntaktische Inflexibilität. Folgender Code beispielsweise +ergibt einen Syntaxfehler: + +@example +F = \tweak #'font-size #-3 -\flageolet + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +Anders gesagt verhält sich @code{\tweak} nicht wie eine Artikulation +und kann auch nicht deren Syntax verwenden: man kann es nicht +mit @code{^} oder @code{_} anfügen. + +Durch die Verwendung von Scheme kann dieses Problem umgangen werden. +Der Weg zum Resultat wird gezeigt in +@ref{Artikulationszeichen zu Noten hinzufügen (Beispiel)}, insbesondere +wie @code{\displayMusic} benutzt wird, hilft hier weiter. + +@example +F = #(let ((m (make-music 'ArticulationEvent + 'articulation-type "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -3 + (ly:music-property m 'tweaks))) + m) + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +In diesem Beispiel werden die @code{tweaks}-Eigenschaften +des Flageolet-Objekts @code{m} (mit @code{make-music} erstellt) +werden mit @code{ly:music-property} ausgelesen, ein neues +Schlüssel-Wert-Paar, um die Schriftgröße zu ändern, wird +der Eigenschaftenliste mithilfe der @code{acons}-Schemefunktion +vorangestellt, und das Resultat wird schließlich mit +@code{set!} zurückgeschrieben. Das letzte Element des +@code{let}-Blocks ist der Wiedergabewert, @code{m}. + + + +@node Schwierige Korrekturen +@section Schwierige Korrekturen +@translationof Difficult tweaks + +Hier finden sich einige Klassen an schwierigeren Anpassungen. + +@itemize + +@item +Ein Typ der schwierigen Anpassungen ist die Erscheinung von +Strecker-Objekten wie Binde- oder Legatobögen. Zunächst wird +nur eins dieser Objekte erstellt, und sie können mit dem +normalen Mechanismus verändert werden. In einigen Fällen +reichen die Strecker jedoch über Zeilenumbrüche. Wenn das +geschieht, werden diese Objekte geklont. Ein eigenes +Objekt wird für jedes System erstellt, in dem es sich befindet. +Sie sind Klone des originalen Objektes und erben alle +Eigenschaften, auch @code{\override}-Befehle. + +Anders gesagt wirkt sich ein @code{\override} immer auf alle +Stücke eines geteilten Streckers aus. Um nur einen Teil eines +Streckers bei einem Zeilenumbruch zu verändern, ist es notwendig, +in den Formatierungsprozess einzugreifen. Das Callback +@code{after-line-breaking} enthält die Schemefunktion, die +aufgerufen wird, nachdem Zeilenumbrüche errechnet worden sind +und die Layout-Objekte über die unterschiedlichen Systeme verteilt +wurden. + +Im folgenden Beispiel wird die Funktion +@code{my-callback} definiert. Diese Funktion + +@itemize +@item +bestimmt, ob das Objekt durch Zeilenumbrüche geteilt ist, +@item +wenn ja, ruft sie alle geteilten Objekte auf, +@item +testet, ob es sich um das letzte der geteilten Objekte handelt, +@item +wenn ja, wird @code{extra-offset} gesetzt. +@end itemize + +Diese Funktion muss in @rinternals{Tie} (Bindebogen) installiert +werden, damit der letzte Teil eines gebrochenen Bindebogens +neu ausgerichtet wird. + +@lilypond[quote,verbatim,ragged-right] +#(define (my-callback grob) + (let* ( + ; have we been split? + (orig (ly:grob-original grob)) + + ; if yes, get the split pieces (our siblings) + (siblings (if (ly:grob? orig) + (ly:spanner-broken-into orig) '() ))) + + (if (and (>= (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) + +\relative c'' { + \override Tie #'after-line-breaking = + #my-callback + c1 ~ \break c2 ~ c +} +@end lilypond + +@noindent +Wenn man diesen Trick anwendet, sollte das neue @code{after-line-breaking} +auch das alte @code{after-line-breaking}-Callback aufrufen, +wenn es vorhanden ist. Wenn diese Funktion etwa mit +@code{Hairpin} (Crescendo-Klammer) eingesetzt wird, sollte auch +@code{ly:spanner::kill-zero-spanned-time} aufgerufen werden. + + +@item +Manche Objekte können aus technischen Gründen nicht mit @code{\override} +verändert werden. Beispiele hiervon sind @code{NonMusicalPaperColumn} +und @code{PaperColumn}. Sie können mit der +@code{\overrideProperty}-Funktion geändert werden, die ähnlich wie +@code{\once \override} funktioniert, aber eine andere Syntax einsetzt. + +@example +\overrideProperty +#"Score.NonMusicalPaperColumn" % Grob-Bezeichnung +#'line-break-system-details % Eigenschaftsbezeichnung +#'((next-padding . 20)) % Wert +@end example + +Es sollte angemerkt werden, dass @code{\override}, wenn man es auf +@code{NonMusicalPaperColumn} und @code{PaperColumn} anwendet, immer noch +innerhalb der @code{\context}-Umgebung funktioniert. + +@end itemize + + + +@node LilyPond Scheme-Schnittstellen +@chapter LilyPond Scheme-Schnittstellen +@translationof LilyPond Scheme interfaces + +Dieses Kapitel behandelt die verschiedenen Werkzeuge, die LilyPond als +Hilfe für Scheme-Programmierer zur Verfügung stellt, um Information in +den Musik-Stream zu senden und aus ihm herauszubekommen. + +TODO: was gehört hier eigentlich hin? diff --git a/Documentation/de/extending/scheme-tutorial.itely b/Documentation/de/extending/scheme-tutorial.itely new file mode 100644 index 0000000000..4e1a55f8e4 --- /dev/null +++ b/Documentation/de/extending/scheme-tutorial.itely @@ -0,0 +1,1466 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437 + + 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 Scheme-Übung +@chapter Scheme-Übung +@translationof Scheme tutorial + +@funindex # +@cindex Scheme +@cindex GUILE +@cindex Scheme, in einer LilyPond-Datei +@cindex LISP +@cindex Auswertung von Scheme-Code + +LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil +der Eingabesyntax als auch als internen Mechanismus, um Programmmodule +zusammenzufügen. Dieser Abschnitt ist ein sehr kurzer Überblick über +die Dateneingabe mit Scheme. Wenn Sie mehr über Scheme wissen wollen, +gehen Sie zu @uref{http://@/www@/.schemers@/.org}. + +LilyPond benutzt die GNU Guile-Implementation von Scheme, die auf dem +@qq{R5RS}-Standard von Scheme basiert. Wenn Sie Scheme lernen wollen, +um es innerhalb von LilyPond zu benutzen, wird es nicht empfohlen, +mit einer anderen Implementation (die sich auf einen anderen +Standard bezieht) zu arbeiten. Information zu Guile findet sich +unter @uref{http://www.gnu.org/software/guile/}. Der +@qq{R5RS}-Standard von Scheme befindet sich unter der Adresse +@uref{http://www.schemers.org/Documents/Standards/R5RS/}. + + +@menu +* Einleitung in Scheme:: +* Scheme in LilyPond:: +* Komplizierte Funktionen erstellen:: +@end menu + +@node Einleitung in Scheme +@section Einleitung in Scheme +@translationof Introduction to Scheme + +Wir wollen mit einer Einführung in Scheme beginnen. Für diese kurze Einfürung +soll der GUILE-Interpreter genommen werden, um zu erforschen, wie die Sprache +funktioniert. Nach besserer Bekanntschaft mit Scheme soll gezeigt werden, wie +die Sprache in LilyPond-Dateien eingefügt werden kann. + +@menu +* Scheme-Sandkasten:: +* Scheme-Variablen:: +* Einfache Scheme-Datentypen:: +* Zusammengesetzte Scheme-Datentypen:: +* Berechnungen in Scheme:: +* Scheme-Prozeduren:: +* Scheme-Konditionale:: +@end menu + +@node Scheme-Sandkasten +@subsection Scheme-Sandkasten +@translationof Scheme sandbox + +Die LilyPond-Installation enthält gleichzeitig auch die +Guile-Implementation von Scheme. Auf den meisten Systemen kann +man in einer Scheme-sandbox experimentieren, indem man ein +Kommandozeilen-Fenster öffnet und @code{guile} aufruft. Unter +einigen Systemen, insbesondere unter Windows, muss man evtl. +die Umgebungsvariable @code{GUILE_LOAD_PATH} auf das Verzeichnis +@code{../usr/shr/guile/1.8} innerhalb des LilyPond-Installationsverzeichnisses +setzen (der vollständige Pfad ist erklärt in @rlearning{Mehr Information}). +Alternativ können Windows-Benutzer auch einfach @qq{Ausführen} im +Startmenü wählen und @code{guile} schreiben. + +Wenn guile einmal läuft, erhält man die Eingabeaufforderung von guile: + +@lisp +guile> +@end lisp + +Man kann Scheme-Ausdrucke hier eingeben und mit Scheme experimentieren. + + +@node Scheme-Variablen +@subsection Scheme-Variablen +@translationof Scheme variables + +Scheme-Variablen können jedlichen gültigen Scheme-Wert erhalten, auch +Scheme-Prozeduren. + +Scheme-Variablen werden mit @code{define} definiert: + +@lisp +guile> (define a 2) +guile> +@end lisp + +Scheme-Variablen können an der Guile-Eingabeaufforderung ausgewertet werden, +indem man einfach die Variable eintippt. + +@lisp +guile> a +2 +guile> +@end lisp + +Scheme-Variablen können auf dem Bildschirm ausgegeben werden, indem man +@code{display} zum Anzeigen benutzt: + +@lisp +guile> (display a) +2guile> +@end lisp + +Sowohl der Wert @code{2} als auch die Eingabeaufforderung @code{guile} +werden auf der gleichen Zeile ausgegeben. Das kann man vermeiden, indem +man eine @code{newline}-Prozedur für eine Leerzeile aufruft oder das +Zeichen für eine neue Zeile anzeigen lässt: + +@lisp +guile> (display a)(newline) +2 +guile> (display a)(display "\n") +2 +guile> +@end lisp + +Wenn eine Variable einmal erstellt wurde, kann ihr Wert durch @code{set!} +verändert werden: + +@lisp +guile> (set! a 12345) +guile> a +12345 +guile> +@end lisp + +@node Einfache Scheme-Datentypen +@subsection Einfache Scheme-Datentypen +@translationof Scheme simple data types + +Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen, +Zeichenketten, Listen usw. Hier ist eine Liste der Datentypen, die für +LilyPond-Eingabedateien relevant sind. + +@table @asis +@item Boolesche Variablen +Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung +für Wahr ist @code{#t} und für Falsch @code{#f}. +@funindex ##t +@funindex ##f + +@item Zahlen +Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) +Zahl Eins, während @code{-1.5} eine Gleitkommazahl (also +eine nicht-ganze) ist. + +@item Zeichenketten +Zeichenketten werden in doppelte Anführungszeichen gesetzt: + +@example +"Das ist eine Zeichenkette" +@end example + +Zeichenketten können über mehrere Zeilen reichen: + +@example +"Das +ist +eine Zeichenkette" +@end example + +@noindent +und die Zeichen für eine neue Zeile am Ende jeder Zeile werden auch +in die Zeichenkette aufgenommen. + +Zeichen für eine neue Zeile können auch hinzugefügt werden, indem man +@code{\n} in die Zeichenkette aufnimmt. + +@example +"das\nist eine\nmehrzeilige Zeichenkette" +@end example + +Anführungszeichen und neue Zeilen können auch mit sogenannten +Fluchtsequenzen eingefügt werden. Die Zeichenkette +@code{a sagt "b"} wird wie folgt eingegeben: + +@example +"a sagt \"b\"" +@end example + +@end table + +Weitere zusätzliche Scheme-Datentypen, die hier nicht besprochen wurden, +finden sich in einer vollständigen Liste der Scheme-Datentypen in der +Guile-Referenzanleitung: +@uref{http://www.gnu.org/software/guile/manual/html_node/Simple-Data-Types.html}. + + +@node Zusammengesetzte Scheme-Datentypen +@subsection Zusammengesetzte Scheme-Datentypen +@translationof Scheme compound data types + +Es gibt auch zusammengesetzte Datentypen in Scheme. Die Datentypen, die in +LilyPond häufig benutzt werden, beinhalten Paare, Listen, assoziative Listen +und Hash-Tabellen. + +@subheading Paare (pair) + +Der wichtigeste zusammengesetzte Datentyp in Scheme ist ein Paar (@code{pair}). +Wie aus dem Namen schon hervorgeht, besteht ein Paar aus zwei zusammengeschweißten +Werten. Die Prozedur um ein Paar zu erstellen ist @code{cons}. + +@lisp +guile> (cons 4 5) +(4 . 5) +guile> +@end lisp + +Das Paar wird dargestellt als zwei Elemente, von Klammern umgeben +und durch Leerzeichen und einen Punkt (@code{.}) getrennt. Der Punkt ist +@emph{kein} Dezimalpunkt, sondern markiert die Gruppe als Paar. + +Paare können auch wörtlich eingegeben werden, indem man ihnen voraus ein +einfaches Anführungszeichen (@code{'} setzt. + +@lisp +guile> '(4 . 5) +(4 . 5) +guile> +@end lisp + +Beide Elemente eines Paares können beliebige gültige Scheme-Werte sein: + +@lisp +guile> (cons #t #f) +(#t . #f) +guile> '("blah-blah" . 3.1415926535) +("blah-blah" . 3.1415926535) +guile> +@end lisp + +Das erste Element eines Paares kann mit der Prozedur @code{car}, +das zweite mit der Prozedur @code{cdr} angesprochen werden. + +@lisp +guile> (define mypair (cons 123 "hello there") +... ) +guile> (car mypair) +123 +guile> (cdr mypair) +"hello there" +guile> +@end lisp + +@noindent + +Achtung: @code{cdr} wird ausgeprochen wie "kudd-err", nach Sussman und +Abelson, siehe +@uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133} + +@subheading Listen (list) + +Ein sehr häufiger Datentyp in Scheme ist die Liste (@emph{list}). Formal +gesehen wird eine Liste entweder als leere Liste definiert +(repräsentiert als @code{'()}), oder als ein Paar, dessen @code{cdr} +eine Liste ist. + +Es gibt viele Arten, Listen zu erstellen. Die vielleicht häufigste Methode +ist die @code{list}-Prozedur: + +@lisp +guile> (list 1 2 3 "abc" 17.5) +(1 2 3 "abc" 17.5) +@end lisp + +Wie man sehen kann, wird eine Liste dargestellt in Form der einzelnen +Elemente, getrennt durch ein Leerzeichen und als Gruppe in Klammern eingeschlossen. +Anders als bei einem Paar, befindet sich kein Punkt zwischen den Elementen. + +Eine Liste kann auch als wörtliche Liste notiert werden, indem man die +enthaltenen Elemente in Klammern einschließt und ein einfaches Anführungszeichen +voranschreibt: + +@lisp +guile> '(17 23 "foo" "bar" "bazzle") +(17 23 "foo" "bar" "bazzle") +@end lisp + +Listen haben eine zentrale Stellung in Scheme. Scheme wird als Dialekt +von Lisp angesehen, und das Wort @qq{lisp} steht für @qq{List Processing}. +Scheme-Ausdrücke sind immer Listen. + +@subheading Assoziative Listen (alist) + +Eine besonderer Listentyp ist die @emph{assoziative Liste} oder @emph{alist}. +Eine Alist wird benutzt, um Daten zum einfachen Abrufen zu speichern. + +Alisten sind Listen, deren Elemente als Paare kommen. Der @code{car}-Teil +jedes Elements wird als @emph{Schlüssel} (key) bezeichnet, der +@code{cdr}-Teil jedes Elements wird @emph{Wert} (value) genannt. +Die Scheme-Prozedur @code{assoc} wird benutzt, um einen Eintrag aus einer +Aliste aufzurufen, und mit @code{cdr} wird sein Wert abgefragt: + +@lisp +guile> (define my-alist '((1 . "A") (2 . "B") (3 . "C"))) +guile> my-alist +((1 . "A") (2 . "B") (3 . "C")) +guile> (assoc 2 my-alist) +(2 . "B") +guile> (cdr (assoc 2 my-alist)) +"B" +guile> +@end lisp + +Alisten werden sehr viel in LilyPond genutzt, um Eigenschaften und +andere Daten zu speichern. + +@subheading Hash-Tabellen (hash table) + +Eine Datenstruktur, die ab und zu in LilyPond eingesetzt wird. +Eine Hash-Tabelle ähnelt einem Array, aber die Indexe des Arrays +können beliebige Scheme-Werte sein, nicht nur Integre. + +Hash-Tabellen sind effizienter als Alisten, wenn man viele Daten +speichern will und die Daten sich oft ändern. + +Die Syntax, mit der Hash-Tabellen erstellt werden, ist etwas komplex, +aber man kann Beispiele hierzu im LilyPond-Quellcode finden. + +@lisp +guile> (define h (make-hash-table 10)) +guile> h +# +guile> (hashq-set! h 'key1 "val1") +"val1" +guile> (hashq-set! h 'key2 "val2") +"val2" +guile> (hashq-set! h 3 "val3") +"val3" +@end lisp + +Werte werden aus den Hash-Tabellen mit @code{hashq-ref} ausgelesen. + +@lisp +guile> (hashq-ref h 3) +"val3" +guile> (hashq-ref h 'key2) +"val2" +guile> +@end lisp + +Schlüssel und Werte werden als Paar mit @code{hashq-get-handle} ausgelesen. +Das ist die beste Art, weil hier @code{#f} ausgegeben wird, wenn ein +Schlüssel nicht gefunden werden kann. + +@lisp +guile> (hashq-get-handle h 'key1) +(key1 . "val1") +guile> (hashq-get-handle h 'frob) +#f +guile> +@end lisp + + +@node Berechnungen in Scheme +@subsection Berechnungen in Scheme +@translationof Calculations in Scheme + +@ignore +We have been using lists all along. A calculation, like @code{(+ 1 2)} +is also a list (containing the symbol @code{+} and the numbers 1 +and@tie{}2). Normally lists are interpreted as calculations, and the +Scheme interpreter substitutes the outcome of the calculation. To enter a +list, we stop the evaluation. This is done by quoting the list with a +quote @code{'} symbol. So, for calculations do not use a quote. + +Inside a quoted list or pair, there is no need to quote anymore. The +following is a pair of symbols, a list of symbols and a list of lists +respectively, + +@example +#'(stem . head) +#'(staff clef key-signature) +#'((1) (2)) +@end example +@end ignore + +Scheme kann verwendet werden, um Berechnungen durchzuführen. Es +verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss +man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller +Mathematik. + +@lisp +guile> (+ 1 2) +3 +@end lisp + +Berechnungen können geschachtelt werden und das Ergebnis einer Berechnung +kann für eine neue Berechnung eingesetzt werden. + +@lisp +guile> (+ 1 (* 3 4)) +13 +@end lisp + +Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck +wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. + +Scheme-Berechnungen können zwischen Integren und Nich-Integren +unterscheiden. Integre Berechnungen sind exakt, während Nicht-Integre +nach den passenden Genauigkeitseinschränkungen berechnet werden: + +@lisp +guile> (/ 7 3) +7/3 +guile> (/ 7.0 3.0) +2.33333333333333 +@end lisp + +Wenn der Scheme-Berechner einen Ausdruck antrifft, der eine Liste darstellt, +wird das erste Element der Liste als Prozedur behandelt, die mit +Argumenten des Restes der Liste ausgewertet werden. Darum sind alle +Operatoren in Scheme vorangestellt. + +Wenn das erste Element eines Scheme-Ausdrucks, der eine Liste darstellt, +@emph{kein} Operator oder keine Prozedur ist, gibt es einen Fehler: + +@lisp +guile> (1 2 3) + +Backtrace: +In current input: + 52: 0* [1 2 3] + +:52:1: In expression (1 2 3): +:52:1: Wrong type to apply: 1 +ABORT: (misc-error) +guile> +@end lisp + +Hier kann man sehen, dass Scheme versucht hat, 1 als einen Operator oder +eine Prozedur zu behandeln, was aber nicht möglich war. Darum der Fehler +"Wrong type to apply: 1". + +Wenn man also eine Liste erstellen will, braucht man also einen Listen-Operator +oder man muss die Liste als wörtliches Zitat schreiben, sodass Scheme sie +nicht auszuwerten versucht. + +@lisp +guile> (list 1 2 3) +(1 2 3) +guile> '(1 2 3) +(1 2 3) +guile> +@end lisp + +Dieser Fehler kann durchaus vorkommen, wenn man Scheme unter LilyPond +einsetzt. + +@ignore +The same assignment can be done in completely in Scheme as well, + +@example +#(define twentyFour (* 2 twelve)) +@end example + +@c this next section is confusing -- need to rewrite + +The @emph{name} of a variable is also an expression, similar to a +number or a string. It is entered as + +@example +#'twentyFour +@end example + +@funindex #'symbol +@cindex quoting in Scheme + +The quote mark @code{'} prevents the Scheme interpreter from substituting +@code{24} for the @code{twentyFour}. Instead, we get the name +@code{twentyFour}. +@end ignore + + +@node Scheme-Prozeduren +@subsection Scheme-Prozeduren +@translationof Scheme procedures + +Scheme-Prozeduren sind ausführbare Scheme-Ausdrücke, die einen +Wert ausgeben, der das Resultat ihrer Ausführung darstellt. Sie können +auch Variablen verändern, die außerhalb dieser Prozedur definiert wurden. + +@subheading Prozeduren definieren + +Prozeduren werden in Scheme mit @code{define} definiert: + +@example +(define (function-name arg1 arg2 ... argn) + scheme-expression-that-gives-a-return-value) +@end example + +Beispielsweise könnte man eine Prozedur definieren, die den Durchschnitt +berechnet: + +@lisp +guile> (define (average x y) (/ (+ x y) 2)) +guile> average +# +@end lisp + +Wenn die Prozedur einmal definiert ist, wird sie aufgerufen indem man +die Prozedur und die Argumente in eine Liste schreibt. Man könnte also den +Durchschnitt von 3 und 12 berechnen: + +@lisp +guile> (average 3 12) +15/2 +@end lisp + +@subheading Prädikate + +Scheme-Prozeduren, die Boolsche Werte ausgeben, werden oft als Prädikate +(predicate) bezeichnet. Es herrscht die Übereinkunft, Prädikat-Bezeichnungen +mit einem Fragezeichen abzuschließen: + +@lisp +guile> (define (less-than-ten? x) (< x 10)) +guile> (less-than-ten? 9) +#t +guile> (less-than-ten? 15) +#f +@end lisp + +@subheading Wiedergabe-Werte + +Scheme-Prozeduren geben immer einen Wiedergabe-Wert (return value) aus, welcher +der Wert des letzten Ausdrucks ist, der in der Prozedur ausgeführt wurde. Der +Wiedergabewert kann ein beliebiger gültiger Scheme-Wert sein, auch eine +komplexe Datenstruktur oder eine Prozedur. + +Manchmal würden Benutzer gerne mehrere Scheme-Ausdrucke in einer Prozedur haben. +Es gibt zwei Arten, wie merhere Ausdrücke kombiniert werden können. Die erste +Art ist die @code{begin}-Prozedur, der es ermöglicht, dass mehrere Ausdrücke +ausgewertet werden und den Wert des letzten Ausdrucks wiedergibt. + +@lisp +guile> (begin (+ 1 2) (- 5 8) (* 2 2)) +4 +@end lisp + +Die andere Art, mehrere Ausdrücke zu kombinieren, ist eine @code{let}-Umgebung. +In dieser Umgebung wird eine Serie von Verbindungen erstellt, und dann wird eine +Sequenz von Ausdrücken ausgewertet, die diese Bindungen einschließen können. +Der Wiedergabewert der let-Umgebung ist der Wiedergabewert der letzten Aussage +in der let-Umgebung: + +@lisp +guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4)) +... (+ (* x y) (/ z x))) +508 +@end lisp + + +@node Scheme-Konditionale +@subsection Scheme-Konditionale +@translationof Scheme conditionals + +@subheading if + +Scheme hat eine @code{if}-Prozedur: + +@example +(if test-expression true-expression false-expression) +@end example + +@var{test-expression} ist ein Ausdruck, der einen Booleschen +Wert zurück gibt. Wenn @var{test-expression} den Wert @code{#t} +ausgibt, gibt die if-Prozedur den Wert von @var{true-expression} aus, +in allen anderen Fällen den Wert von @var{false-expression}. + +@lisp +guile> (define a 3) +guile> (define b 5) +guile> (if (> a b) "a is greater than b" "a is not greater than b") +"a is not greater than b" +@end lisp + +@subheading cond + +Eine andere konditionale Prozedur in Scheme ist +@code{cond}: + +@example +(cond (test-expression-1 result-expression-sequence-1) + (test-expression-2 result-expression-sequence-2) + ... + (test-expression-n result-expression-sequence-n)) +@end example + +Beispielsweise: + +@lisp +guile> (define a 6) +guile> (define b 8) +guile> (cond ((< a b) "a is less than b") +... ((= a b) "a equals b") +... ((> a b) "a is greater than b")) +"a is less than b" +@end lisp + + + +@node Scheme in LilyPond +@section Scheme in LilyPond +@translationof Scheme in LilyPond + +@menu +* LilyPond Scheme-Syntax:: +* LilyPond-Variablen:: +* Eingabe-Variablen und Scheme:: +* Objekteigenschaften:: +* Zusammengesetzte LilyPond-Variablen:: +* Interne musikalische Repräsentation:: +@end menu + +@node LilyPond Scheme-Syntax +@subsection LilyPond Scheme-Syntax +@translationof LilyPond Scheme syntax + +Der Guile-Auswerter ist ein Teil von LilyPond, sodass Scheme also auch in +normale LilyPond-Eingabedateien eingefügt werden kann. Das Rautenzeichen +(@code{#}) wird benutzt, um dem LilyPond-Parser mitzuteilen, dass der nächste +Wert ein Scheme-Wert ist. + +Wenn der Parser eine Raute sieht, wird der Eingabe-Code an den Guile-Auswerter +weitergereicht, der den Scheme-Ausdruck auswertet. Der Auswerter behandelt +die Eingabe so lange, bis er zum Ende eines Scheme-Ausdrucks kommt. + +Scheme-Prozeduren können in LilyPond-Eingabedateien definiert werden: + +@example +#(define (average a b c) (/ (+ a b c) 3)) +@end example + +LilyPond-Kommentare (@code{%} oder @code{%@{ %@}}) können innerhalb +von Scheme-Code nicht benutzt werden. Kommentare in Guile Scheme +werden wie folgt notiert: + +@example +; Einzeiliges Kommentar + +#! + Guile-Stil Blockkommentar (nicht schachtelbar) + Diese Kommentare werden von Scheme-Programmierern + selten benutzt und nie im Quellcode + von LilyPond +!# +@end example + +Für den Rest dieses Abschnitts soll angenommen werden, dass die Daten in +einer LilyPond-Eingabedatei notiert werden sollen, sodass immer @code{#} +vor die Scheme-Ausdrücke gestellt wird. + +Alle Scheme-Ausdrücke auf oberster Ebene in einer LilyPond-Eingabedatei +können in einen einzigen Scheme-Ausdruck zusammengefasst werden mit +@code{begin}: + +@example +#(begin + (define foo 0) + (define bar 1)) +@end example + + +@node LilyPond-Variablen +@subsection LilyPond-Variablen +@translationof LilyPond variables + +LilyPond-Variablen werden intern als Scheme-Variablen gespeichert. Darum +ist + +@example +Zwoelf = 12 +@end example + +@noindent +das Gleiche wie + +@example +#(define Zwoelf 12) +@end example + +Das bedeutet, dass Scheme-Ausdrücke auf LilyPond-Variablen zugreifen können. +Man könnte also schreiben: + +@example +Vierundzwanzig = #(* 2 Zwoelf) +@end example + +@noindent +was zur Folge hätte, dass die Zahl 24 in der LilyPond (und Scheme-)Variablen +@code{Vierundzwanzig} gespeichert wird. + + +@node Eingabe-Variablen und Scheme +@subsection Eingabe-Variablen und Scheme +@translationof Input variables and Scheme + +Das Eingabeformat unterstützt die Notation von Variablen: Im folgenden +Beispiel wird ein musikalischer Ausdruck einer Variablen mit der +Bezeichnung @code{traLaLa} zugewiesen: + +@example +traLaLa = @{ c'4 d'4 @} +@end example + +Variablen haben beschränkte Geltungsbereiche: im unten stehenden Beispiel +enthält auch die @code{\layout}-Umgebung eine @code{traLaLa}-Variable, +die sich aber von der @code{traLaLa}-Variable auf oberster Ebene unterscheidet: + +@example +traLaLa = @{ c'4 d'4 @} +\layout @{ traLaLa = 1.0 @} +@end example + +Jede Eingabedatei ist solch ein Gültigkeitsbereich, und alle +@code{\header}-, @code{\midi}- und @code{\layout}-Umgebungen +sind Gültigkeitsbereiche, die in diesen obersten Gültigkeitsbereich +eingebettet sind. + +Sowohl Variablen als auch Gültigkeitsbereiche sind im Guile Modulsystem +eingebaut. Ein anonymes Scheme-Modul wird jedem Gültigkeitsbereich +angehängt. Eine Zuweisen in der Form von + +@example +traLaLa = @{ c'4 d'4 @} +@end example + +@noindent +wird intern in die Scheme-Definition + +@example +(define traLaLa @var{Scheme-Wert von `@code{... }'}) +@end example + +@noindent +konvertiert. + +Das bedeutet, dass LilyPond-Variablen und Scheme-Variablen frei gemischt +werden können. Im folgenden Beispiel wird ein Notenfragment in der +Variable @code{traLaLa} gespeichert und mit Scheme dupliziert. Das +Resultat wird in eine @code{\score}-Umgebung mit einer weiteren +Variable @code{twice} importiert: + +@lilypond[verbatim] +traLaLa = { c'4 d'4 } + +%% dummy action to deal with parser lookahead +#(display "this needs to be here, sorry!") + +#(define newLa (map ly:music-deep-copy + (list traLaLa traLaLa))) +#(define twice + (make-sequential-music newLa)) + +{ \twice } +@end lilypond + +In diesem Beispiel geschieht die Zuweisung, nachdem der Parser sichergestellt +hat, dass nichts interessantes mehr nach @code{traLaLa = @{ ... @}} passiert. +Ohne die Dummy-Aussage in dem Beispiel würde die @code{newLa}-Definition ausgeführt, +bevor @code{traLaLa} definiert ist, was einen Syntax-Fehler hervorrufen würde. + +Das Beispiel zeigt, wie man musikalische Ausdrücke aus der Eingabe in den +Scheme-Auswerter @qq{exportieren} kann. Es geht auch andersherum. Indem +man Scheme-Werten in die Funktion @code{ly:export} einschließt, wird ein +Scheme-Wert interpretiert, als ob er in LilyPond-Syntax eingeben wäre. +Anstatt @code{\twice} zu definieren, könne man also auch schreiben: + +@example +... +@{ #(ly:export (make-sequential-music (list newLa))) @} +@end example + +Scheme-Code wird sofort interpretiert, wenn der Parser darauf stößt. Um +Scheme-Code als Makro zu definieren (das später aufgerufen werden soll), +muss man @ref{Leere Funktionen} benutzen oder + +@example +#(define (nopc) + (ly:set-option 'point-and-click #f)) + +... +#(nopc) +@{ c'4 @} +@end example + +@knownissues + +Scheme- und LilyPond-Variablen können nicht gemischt werden, wenn man die +@code{--safe}-Option benutzt. + + +@node Objekteigenschaften +@subsection Objekteigenschaften +@translationof Object properties + +Objekteigenschaften werden in LilyPond in Form von Alisten-Ketten +gespeichert, also als Listen von Alisten. Eigenschaften werden +geändert, indem man Werte an den Anfang der Eigenschaftsliste +hinzufügt. Eigenschaften werden gelesen, indem Werte aus der +Aliste gelesen werden. + +Ein neuer Wert für eine Eigenschaft kann gesetzt werden, indem man +der Alist einen Wert mit Schlüssel und dem Wert zuweist. Die +LilyPond-Syntax hierfür ist: + +@example +\override Stem #'thickness = #2.6 +@end example + +Diese Anweisung verändert die Erscheinung der Notenhälse. Der Alist-Eintrag +@code{'(thickness . 2.6)} wird zu der Eigenschaftsliste eines +@code{Stem}-(Hals-)Objektes hinzugefügt. +@code{thickness} wird relativ zu den Notenlinien errechnet, in diesem +Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien. Dadurch +werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind. +Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt +definiert werden (wie @code{Vierundzwanzig} weiter oben), und zwischen denen, +die für interne Objekte zuständig sind, werden hier die ersteren +@qq{Variablen} genannt, die letzteren dagegen @qq{Eigenschaften}. +Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während +@code{Vierundzwanzig} eine Variable ist. + +@cindex Eigenschaften versus Bezeichner +@cindex Bezeichner versus Eigenschaften + + +@node Zusammengesetzte LilyPond-Variablen +@subsection Zusammengesetzte LilyPond-Variablen +@translationof LilyPond compound variables + +@subheading Abstände (offset) + + + +Zweidimensionale Abstände (X- und Y-Koordinaten) werden +als @code{pairs} (Paare) gespeichert. Der @code{car}-Wert des +Abstands ist die X-Koordinate und der @code{cdr}-Wert die +Y-Koordinate. + +@example +\override TextScript #'extra-offset = #'(1 . 2) +@end example + +Hierdurch wird das Paar @code{(1 . 2)} mit der Eigenschaft @code{extra-offset} +des TextScript-Objektes verknüpft. Diese Zahlen werden in +Systembreiten gemessen, so dass der Befehl das Objekt eine Systembreite +nach rechts verschiebt und zwei Breiten nach oben. + +Prozeduren, um mit Abständen zu arbeiten, finden sich in @file{scm/lily-library.scm}. + +@subheading Bereiche (extend) + +Paare werden auch benutzt, um Intervalle zu speichern, die einen Zahlenbereich +vom Minimum (dem @code{car}) bis zum Maximum (dem @code{cdr}) darstellen. +Intervalle werden benutzt, um die X- und Y-Ausdehnung von druckbaren +Objekten zu speichern. Bei X-Ausdehnungen ist @code{car} die linke +X-Koordinate und @code{cdr} die rechte X-Koordinate. Für Y-Ausdehnungen +ist @code{car} die untere Koordinate und @code{cdr} die obere Koordinate. + +Prozeduren, um mit Intervallen zu arbeiten, finden sich in +@file{scm/lily-library.scm}. Diese Prozeduren sollten benutzt, wenn es möglich +ist, um den Code konsistent zu halten. + +@subheading Eigenschafts-Alisten (property alist) + +Eine Eigenschafts-Aliste ist eine LilyPond-Datenstruktur, die eine Aliste +darstellt, deren Schlüssel Eigenschaften sind und deren Werte +Scheme-Ausdrücke sind, die den erwünschen Wert der Eigenschaft ausgeben. + +LilyPond-Eigenschaften sind Scheme-Symbole, wie etwa @code{'thickness} +(Dicke). + +@subheading Alisten-Ketten (alist chains) + +Eine Alisten-Kette ist eine Liste, die Eigenschafts-Alisten enthält. + +Die Menge aller Eigenschaften, die sich auf einen Grob auswirken, wird +typischerweise in einer Alisten-Kette gespeichert. Um den Wert einer +bestimmten Eigenschaft zu finden, die ein Grob haben soll, wird jede +Liste in der Kette nach einander durchsucht, wobei nach einem Eintrag +geschaut wird, der den Eigenschaftsschlüssel enthält. Der erste +gefundene Alisten-Eintrag wird benutzt und dessen Wert ist der +Wert der Eigenschaft. + +Die Scheme-Prozedur @code{chain-assoc-get} wird normalerweise benutzt, +um Grob-Eigenschaftenwerte zu erhalten. + + +@node Interne musikalische Repräsentation +@subsection Interne musikalische Repräsentation +@translationof Internal music representation + +Intern werden Noten als Scheme-Liste dargestellt. Die Liste enthält +verschiedene Elemente, die die Druckausgabe beeinflussen. Parsen +nennt man den Prozess, der die Noten aus der LilyPond-Repräsentation +in die interne Scheme-Repräsentation überführt. + +Wenn ein musikalischer Ausdruck geparst wird, wird er in eine Gruppe +von Scheme-Musikobjekten konvertiert. Die definierende Eigenschaft +eines Musikobjektes ist, dass es Zeit einnimmt. Die Zeit, die +ein Objekt braucht, wird Dauer (engl. @emph{duration}) genannt. +Dauern werden in rationalen Zahlen ausgedrückt, die die Länge des +Musikobjekts in Ganzen Noten angeben. + +Ein Musikobjekt hat drei Typen: + +@itemize +@item +Musikbezeichnung (music name): Jeder Musikausdruck hat eine Bezeichnung. Eine +Note beispielsweise erzeugt ein @rinternals{NoteEvent} und @code{\simultaneous} +produziert @rinternals{SimultaneousMusic}. Eine Liste aller möglichen +Ausdrücke findet sich in der Referenz der Interna, unter +@rinternals{Music expressions}. + +@item +Typ (type) oder Schnittstelle (interface): Jede Musikbezeichnung hat mehrere +Typen oder Schnittstellen, beispielsweise eine Note ist ein Ereignis (@code{event}), +aber auch ein Notenereignis (@code{note-event}), ein rhythmisches Ereignis +(@code{rhythmic-event}) und ein Melodieereignis (@code{melodic-event}). +Alle Musikklassen sind in der Referenz der Interna aufgelistet, unter +@rinternals{Music classes}. + +@item +C++-Objekt: Jedes Musikobjekt ist durch ein Objekt der C++-Klasse @code{Music} +repräsentiert. +@end itemize + +Die eigentliche Information eines musikalischen Ausdrucks wird in Eigenschaften +gespeichert. Ein @rinternals{NoteEvent} beispielsweise hat die Eigenschaften +Tonhöhe (@code{pitch}) und Dauer (@code{duration}), die die Dauer und die +Tonhöhe der Note speichern. Eine Liste aller möglichen Eigenschaften findet +sich in der Referenz der Interna, unter +@rinternals{Music properties}. + +Ein zusammengesetzter musikalischer Ausdruck ist ein Musikobjekt, das andere +Musikobjekte als Eigenschaften enthält. Eine Liste an Objekten kann in der +@code{elements}-Eigenschaft eines Musikobjekts bzw. ein einziges +Ableger-Musikelement in der @code{element}-Eigenschaft gespeichert werden. +@rinternals{SequentialMusic} beispielsweise hat sein einziges Argument in +@code{element}. Der Körper einer Wiederholung wird in der @code{element}-Eigenschaft +von @rinternals{RepeatedMusic} gespeichert, und die alternativen Endungen +in @code{elements}. + + +@node Komplizierte Funktionen erstellen +@section Komplizierte Funktionen erstellen +@translationof Building complicated functions + +Dieser Abschnitt zeigt, wie man Information zusammensucht, +um komplizierte musikalische Funktionen zu erstellen. + +@menu +* Musikalische Funktionen darstellen:: +* Eigenschaften von Musikobjekten:: +* Verdoppelung einer Note mit Bindebögen (Beispiel):: +* Artikulationszeichen zu Noten hinzufügen (Beispiel):: +@end menu + + +@node Musikalische Funktionen darstellen +@subsection Musikalische Funktionen darstellen +@translationof Displaying music expressions + +@cindex interne Speicherung +@cindex Musikausdrücke anzeigen +@cindex Anzeigen von Musikausdrücken + +@funindex displayMusic +@funindex \displayMusic + +Wenn man eine musikalische Funktion erstellt, ist es oft +hilfreich sich anzuschauen, wie musikalische Funktionen +intern gespeichert werden. Das kann mit der Funktion +@code{\displayMusic} erreicht werden: + +@example +@{ + \displayMusic @{ c'4\f @} +@} +@end example + +@noindent +zeigt: + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) + (make-music + 'AbsoluteDynamicEvent + 'text + "f"))))) +@end example + +Normalerweise gibt LilyPond diese Ausgabe auf der Konsole mit +allen anderen Nachrichten aus. Um die wichtigen Nachrichten +in einer Datei zu speichern, kann die Ausgabe in eine Datei +umgeleitet werden: + +@example +lilypond file.ly >display.txt +@end example + +Mit etwas Umformatierung ist die gleiche Information sehr viel +einfacher zu lesen: + +@example +(make-music 'SequentialMusic + 'elements (list (make-music 'EventChord + 'elements (list (make-music 'NoteEvent + 'duration (ly:make-duration 2 0 1 1) + 'pitch (ly:make-pitch 0 0 0)) + (make-music 'AbsoluteDynamicEvent + 'text "f"))))) +@end example + +Eine musikalische @code{@{ ... @}}-Sequenz hat die Bezeichnung +@code{SequentialMusic} und ihre inneren Ausdrücke werden als +Liste in seiner @code{'elements}-Eigenschaft gespeichert. Eine +Note ist als als ein @code{EventChord}-Ausdruck dargestellt, +der ein @code{NoteEvent}-Objekt (welches Dauer und +Tonhöhe speichert) und zusätzliche Information enthält (in +diesem Fall ein @code{AbsoluteDynamicEvent} mit einer +@code{"f"}-Text-Eigenschaft. + + +@node Eigenschaften von Musikobjekten +@subsection Eigenschaften von Musikobjekten +@translationof Music properties + +Das @code{NoteEvent}-Objekt ist das erste Objekt der +@code{'elements}-Eigenschaft von @code{someNote}. + +@example +someNote = c' +\displayMusic \someNote +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)))) +@end example + +Die @code{display-scheme-music}-Funktion ist die Funktion, die von +@code{\displayMusic} eingesetzt wird, um die Scheme-Repräsentation +eines musikalischen Ausdrucks anzuzeigen. + +@example +#(display-scheme-music (first (ly:music-property someNote 'elements))) +===> +(make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) +@end example + +Danach wird die Tonhöhe der Note von der @code{'pitch}-Eigenschaft +des @code{NoteEvent}-Objektes gelesen: + +@example +#(display-scheme-music + (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch)) +===> +(ly:make-pitch 0 0 0) +@end example + +Die Tonhöhe einer Note kann geändert werden, indem man diese +@code{'pitch}-Eigenschaft umdefiniert: + +@funindex \displayLilyMusic +@funindex displayLilyMusic + +@example +#(set! (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch) + (ly:make-pitch 0 1 0)) ;; Die Tonhöhen auf d' verändern. +\displayLilyMusic \someNote +===> +d' +@end example + + +@node Verdoppelung einer Note mit Bindebögen (Beispiel) +@subsection Verdoppelung einer Note mit Bindebögen (Beispiel) +@translationof Doubling a note with slurs (example) + +In diesem Abschnitt soll gezeigt, werden, wie man eine +Funktion erstellt, die eine Eingabe wie @code{a} +nach @code{a( a)} umdefiniert. Dazu wird zuerst die +interne Repräsentation der Musik betrachtet, die +das Endergebnis darstellt: + +@example +\displayMusic@{ a'( a') @} +===> +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + -1))) + (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + 1))))) +@end example + +Eine schlechte Nachricht ist, dass die +@code{SlurEvent}-Ausdrücke @qq{innerhalb} +der Noten (bzw. innerhalb der +@code{EventChord}-Ausdrücke) hinzugefügt werden müssen. + +Jetzt folgt eine Betrachtung der Eingabe: + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)))))) +@end example + +In der gewünschten Funktion muss also dieser Ausdruck +kopiert werden (sodass zwei Noten vorhanden sind, die +eine Sequenz bilden), dann müssen @code{SlurEvent} +zu der @code{'elements}-Eigenschaft jeder Noten hinzugefügt +werden, und schließlich muss eine @code{SequentialMusic} +mit den beiden @code{EventChords} erstellt werden. + +@example +doubleSlur = #(define-music-function (parser location note) (ly:music?) + "Return: @{ note ( note ) @}. + `note' is supposed to be an EventChord." + (let ((note2 (ly:music-deep-copy note))) + (set! (ly:music-property note 'elements) + (cons (make-music 'SlurEvent 'span-direction -1) + (ly:music-property note 'elements))) + (set! (ly:music-property note2 'elements) + (cons (make-music 'SlurEvent 'span-direction 1) + (ly:music-property note2 'elements))) + (make-music 'SequentialMusic 'elements (list note note2)))) +@end example + + +@node Artikulationszeichen zu Noten hinzufügen (Beispiel) +@subsection Artikulationszeichen zu Noten hinzufügen (Beispiel) +@translationof Adding articulation to notes (example) + +Am einfachsten können Artikulationszeichen zu Noten +hinzugefügt werden, indem man zwei musikalische Funktionen +in einen Kontext einfügt, wie erklärt in +@ruser{Kontexte erstellen}. Hier soll jetzt eine musikalische +Funktion entwickelt werden, die das vornimmt. + +Eine @code{$variable} innerhalb von @code{#@{...#@}} ist das +gleiche wie die normale Befehlsform @code{\variable} in +üblicher LilyPond-Notation. Es ist bekannt dass + +@example +@{ \music -. -> @} +@end example + +@noindent +in LilyPond nicht funktioniert. Das Problem könnte vermieden +werden, indem das Artikulationszeichen an eine Pseudonote +gehängt wird: + +@example +@{ << \music s1*0-.-> @} +@end example + +@noindent +aber in diesem Beispiel soll gezeigt werden, wie man das in +Scheme vornimmt. Zunächst wird die Eingabe und die gewünschte +Ausgabe examiniert: + +@example +% Eingabe +\displayMusic c4 +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)))) +===== +% gewünschte Ausgabe +\displayMusic c4-> +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)) + (make-music + 'ArticulationEvent + 'articulation-type + "marcato"))) +@end example + +Dabei ist zu sehen, dass eine Note (@code{c4}) als @code{EventChord} +repräsentiert ist, mit einem @code{NoteEvent}-Ausdruck in ihrer +Elementenliste. Um eine Marcato-Artikulation hinzuzufügen, muss +ein @code{ArticulationEvent}-Ausdruck zu der Elementeigenschaft +des @code{EventChord}-Ausdrucks hinzugefügt werden. + +Um diese Funktion zu bauen, wird folgendermaßen begonnen: + +@example +(define (add-marcato event-chord) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +Die erste Zeile definiert eine Funktion in Scheme: Die Bezeichnung +der Funktion ist @code{add-marcato} und sie hat eine Variable +mit der Bezeichnung @code{event-chord}. In Scheme geht der Typ +einer Variable oft direkt aus der Bezeichnung hervor (das ist auch +eine gute Methode für andere Programmiersprachen). + +@example +"Add a marcato..." +@end example + +@noindent +ist eine (englische) Beschreibung, was diese Funktion tut. Sie ist +nicht unbedingt notwendig, aber genauso wie klare Variablen-Bezeichnungen +ist auch das eine gute Methode. + +@example +(let ((result-event-chord (ly:music-deep-copy event-chord))) +@end example + +@code{let} wird benutzt, um die lokalen Variablen zu definieren. Hier +wird eine lokale Variable benutzt: @code{result-event-chord}. Sie erhält +den Wert @code{(ly:music-deep-copy event-chord)}. @code{ly:music-deep-copy} +ist eine LilyPond-spezifische Funktion, die wie alle Funktionen mit dem +Präfix @code{ly:} versehen ist. Sie wird benutzt, um eine Kopie eines +musikalischen Ausdrucks anzufertigen. Hier wird @code{event-chord} +(der Parameter der Funktion) kopiert. Die Funktion soll ja nur ein +Artikulationszeichen an einen @code{EventChord} gehängt werden, deshalb ist es besser, +den @code{EventChord}, der als Argument gegeben wurde, nicht zu +verändern, weil er woanders benutzt werden könnte. + +Jetzt gibt es @code{result-event-chord}, wobei es sich um einen +@code{NoteEventChord}-Ausdruck handelt, welcher gleichzeitig eine Kopie +von @code{event-chord} ist. Das Makro wird seiner Eigenschaftsliste +hinzugefügt: + +@example +(set! place new-value) +@end example + +Was in diesem Fall @qq{gesetzt} werden soll (@qq{place}) ist die +@q{elements}-Eigenschaft des @code{result-event-chord}-Ausdrucks. + +@example +(ly:music-property result-event-chord 'elements) +@end example + +@code{ly:music-property} ist die Funktion, mit der musikalische +Eigenschaften erreicht werden können (die @code{'elements}, +@code{'duration}, @code{'pitch} usw., die in der Ausgabe von +@code{\displayMusic} weiter oben angezeigt werden). Der neue +Wert ist, was ehemals die Elementeigenschaft war, mit einem +zusätzlichen Element: dem @code{ArticulationEvent}-Ausdruck, +der aus der Ausgabe von +@code{\displayMusic} kopiert werden kann: + +@example +(cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements)) +@end example + +@code{cons} wird benutzt, um ein Element zu einer Liste hinzuzufügen, +ohne dass die originale Liste verändert wird. Das ist es, was die +Funktion tun soll: die gleiche Liste, aber mit dem neuen +@code{ArticulationEvent}-Ausdruck. Die Reihenfolge innerhalb +der Elementeeigenschaft ist hier nicht relevant. + +Wenn schließlich die Marcato-Artikulation zu der entsprechenden +@code{elements}-Eigenschaft hinzugefügt ist, kann +@code{result-event-chord} ausgegeben werden, darum die letzte Zeile +der Funktion. + +Jetzt wird die @code{add-marcato}-Funktion in eine musikalische +Funktion umgewandelt: + +@example +addMarcato = #(define-music-function (parser location event-chord) + (ly:music?) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +Eine Überprüfung, dass die Funktion richtig arbeitet, geschieht +folgendermaßen: + +@example +\displayMusic \addMarcato c4 +@end example + + + + + + +@ignore + +@menu +* Optimierungen mit Scheme:: +@end menu + +@c node Optimierungen mit Scheme +@c appendixsec Optimierungen mit Scheme +@c translationof Tweaking with Scheme + +Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst +werden kann, indem Befehle wie etwa +@code{\override TextScript #'extra-offset = ( 1 . -1)} +benutzt werden. Aber es wurde gezeigt, dass Scheme noch +mächtiger ist. Eine bessere Erklärung findet sich in der@ref{Scheme-Übung} und in +@ruser{Schnittstellen für Programmierer}. + +Scheme kann auch in einfachen @code{\override}-Befehlen +benutzt werden: + +TODO Find a simple example +@c This isn't a valid example with skylining +@c It works fine without padText -td + + +@lilypond[quote,verbatim,ragged-right] +padText = #(define-music-function (parser location padding) (number?) +#{ + \once \override TextScript #'padding = #$padding +#}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + + +Es kann auch benutzt werden, um Befehle zu erstellen: + +@c Check this is a valid example with skylining +@c It is - 'padding still works + +@lilypond[quote,verbatim,ragged-right] +tempoPadded = #(define-music-function (parser location padding tempotext) + (number? string?) +#{ + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } +#}) + +\relative c'' { + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 +} +@end lilypond + +Sogar ganze Musikausdrücke können eingefügt werden: + +@lilypond[quote,verbatim,ragged-right] +pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) +#{ + $x e8 a b $y b a e +#}) + +\relative c''{ + \pattern c8 c8\f + \pattern {d16 dis} { ais16-> b\p } +} +@end lilypond +@end ignore + diff --git a/Documentation/de/included/GNUmakefile b/Documentation/de/included/GNUmakefile new file mode 100644 index 0000000000..dfb8d673f8 --- /dev/null +++ b/Documentation/de/included/GNUmakefile @@ -0,0 +1,10 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation + +EXTRA_DIST_FILES=$(call src-wildcard,*.ly) +EXTRA_DIST_FILES+=$(call src-wildcard,*.ily) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itely) + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/included/authors.itexi b/Documentation/de/included/authors.itexi new file mode 100644 index 0000000000..a589dca895 --- /dev/null +++ b/Documentation/de/included/authors.itexi @@ -0,0 +1,452 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of community.itexi and ../topdocs/AUTHORS.itexi +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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. + + + + This file lists authors of LilyPond, and what they wrote. Each + list is sorted alphabetically by surname. This file lists people + that have contributed more than a few hours of work. + + Developers are people who are (or have been) listed under the + "Development Team" in the THANKS, and can choose their own + titles. Contributors are everybody else, and simply list their + contributions. All lists are sorted alphabetically. + + Anybody who has finished doing a "main devel team" task should + list it under developersPrevious, even if they're still doing + other "main devel team" stuff. See "Graham Percival" for an + example. + + Contributors are also split between Current and Previous, and + each category contains: + core... (programming) + font... (duh) + doc... (documentation and examples) + bug... (bug squad members) + support... (building, distributions, editors, + lilypond-book, LSR, but *not* answering emails) + translations... (duh) + We might add a "general" or "other" if there's something else. + +@end ignore + + +@macro developersCurrent + +@itemize + +@item Trevor Daniels: +@email{t.daniels@@treda.co.uk}, +Assistant documentation editor + +@item Reinhold Kainhofer: +@email{reinhold@@kainhofer.com}, +@uref{http://reinhold.kainhofer.com}, +Core developer, Music2xml wrangler + +@item David Kastrup: +@email{dak@@gnu.org} +Code worrier, support fighter, accordionist + +@item Jonathan Kulp: +Assistant documentation editor + +@item Werner Lemberg, +@email{wl@@gnu.org}, +Fonts, bug squasher + +@item John Mandereau: +@email{john.mandereau@@free.fr}, +Translations + +@item Patrick McCarty: +SVG guru, bug squad member, bug squasher, text handling + +@item Joe Neeman: +Core developer + +@item Han-Wen Nienhuys: +@email{hanwen@@xs4all.nl}, +@uref{http://www.xs4all.nl/~hanwen/}, +Main author + +@item Jan Nieuwenhuizen: +@email{janneke@@gnu.org}, +@uref{http://JoyofSource.com}, +@uref{http://AvatarAcademy.nl}, +Main author + +@item Graham Percival: +@uref{http://percival-music.ca}, +Project manager, Documentation Editor + +@item Mark Polesky: +Assistant documentation editor, Code cleanup + +@item Neil Puttock: +Core developer + +@item Mike Solomon: +@email{mike@@apollinemike.com}, +Contemporary music attaché + +@item Carl Sorensen: +@email{c_sorensen@@byu.edu}, +Core developer, Frog meister + +@item Francisco Vila: +Translation Meister + +@item Valentin Villenave: +LSR editor and Bug squad member + +@end itemize +@end macro + + + +@macro developersPrevious + +@itemize + +@c use colons not commas for @item entries. + +@item Mats Bengtsson: +@email{mats.bengtsson@@ee.kth.se}, +@uref{http://www.s3.kth.se/~mabe/}, +Support guru + +@item Pedro Kroeger: +Build meister + +@item John Mandereau: +@email{john.mandereau@@free.fr}, +Translation meister + +@item Graham Percival: +@uref{http://percival-music.ca}, +Bug meister, Grand Documentation Project leader + +@item Jürgen Reuter: +@email{reuter_j@@web.de}, +@uref{http://www.juergen-reuter.de}, +Ancient notation + +@item Erik Sandberg: +Bug meister + +@item Nicolas Sceaux: +Core developer, Schemer extraordinaire + +@end itemize +@end macro + + +@c ***************** current contributors + +@macro coreCurrent + +@c use commas not colons + +Sven Axelsson, +Pál Benkő, +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 Wilson, +Rodolfo Zitellini + +@c no comma for last entry + +@end macro + + + +@macro fontCurrent + +@c use commas not colons + +Keith OHara, +Marc Hohl, +Alexander Kobel, +Carsten Steger + +@c no comma for last entry + +@end macro + + + +@macro docCurrent + +@c use commas not colons + +Colin Campbell, +Andrew Hawryluk, +James Lowe, +Mike Moral, +Ralph Palmer, +David Pounder, +Patrick Schmidt + +@c no comma for last entry + +@end macro + + +@macro bugsquadCurrent + +James E. Bailey, +Colin Campbell, +Phil Holmes, +Urs Liska, +Ralph Palmer, +Kieren MacMillan, +Dmytro O. Redchuk + +@c no comma for last entry + +@end macro + + +@macro supportCurrent + +@c use commas not colons + +Christian Hitz + +@c no comma for last entry + +@end macro + + + +@macro translationsCurrent + +@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 + +@end macro + + +@c ***************** previous contributors + +@macro corePrevious + +@c use commas not colons + +Erlend Aasland, +Maximilian Albert, +Guido Amoruso, +Kristof Bastiaensen, +Pál Benkő, +@c @email{benkop@@freestart.hu}, +Juliusz Chroboczek, +@c @email{jch@@pps.jussieu.fr}, +Angelo Contardi, +David Feuer, +@c @email{david.feuer@@gmail.com}, +Bertalan Fodor, +Mathieu Giraud, +Yuval Harel, +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 Krause, +@c @email{m.krause@@tu-harburg.de}, +Jean-Baptiste Lamy, +@c @email{jiba@@tuxfamily.org}, +Jonatan Liljedahl, +Peter Lutek, +Hendrik Maryns, +Joe Neeman, +@c @email{joeneeman@@gmail.com}, +Matthias Neeracher, +Tatsuya Ono, +Lisa Opus Goldstein, +Guy Gascoigne-Piggford, +Stan Sanderson, +Edward Sanford Sutton, +Andreas Scherer, +Johannes Schindelin, +Kim Shrier, +Vicente Solsona Della, +David Svoboda, +Sebastiano Vigna, +Arno Waschk, +Michael Welsh Duggan, +John Williams, +Milan Zamazal, +Rune Zedeler + +@c no comma for last entry + +@end macro + + + +@macro fontPrevious + +@c use commas not colons + +Tom Cato Amundsen, +@c @email{tca@@gnu.org}, +Chris Jackson, +@c @email{chris@@fluffhouse.org.uk}, +Arno Waschk, +@c @email{arno@@arnowaschk.de}, +Rune Zedeler + +@c no comma for last entry + +@end macro + + + +@macro docPrevious + +@c use commas not colons + +Erlend Aasland, +Trevor Bača, +Alard de Boer, +Jay Hamilton, +Andrew Hawryluk, +Joseph Harfouch, +Cameron Horsburgh, +Geoff Horton, +Ian Hulin, +Heikki Junes, +@c @email{heikki.junes@@hut.fi}, +Kurtis Kroon, +Dave Luttinen, +Kieren MacMillan, +Christian Mondrup, +@c @email{scancm@@biobase.dk}, +Eyolf Østrem, +Ralph Palmer, +François Pinard, +@c @email{pinard@@iro.umontreal.ca}, +@c @uref{http://pinard.progiciels-bpi.ca/}, +Eduardo Vieira, +Michael Rasmussen, +Till Rettig, +Carl D. Sorensen, +Anh Hai Trinh, +Rune Zedeler + +@c no comma for last entry + +@end macro + + +@macro bugsquadPrevious + +@c nobody here yet + +@c no comma for last entry +@end macro + +@macro supportPrevious + +@c use commas not colons + +Anthony Fok, +@c @email{foka@@debian.org}, +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 + +@end macro + + + +@macro translationsPrevious + +@c use commas not colons + +Frédéric Chiasson, +Abel Cheung, +Alard de Boer, +Simon Dahlbacka, +Orm Finnendahl, +David González, +Nicolas Grandclaude, +@c @email{ngclaude@@123mail.org}, +Damien Heurtebise, +Matthieu Jacquot, +Bjoern Jacke, +@c @email{bjoern.jacke@@gmx.de}, +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}, +Adrian Mariano, +Christian Mondrup, +Tineke de Munnik, +@c @email{tdm@@dds.nl}, +Steven Michael Murphy, +François Pinard, +Gauvain Pocentek, +@c @email{gauvainpocentek@@yahoo.fr}, +Till Rettig, +Ludovic Sardain, +@c @email{ludovicsardain@@gmail.com}, +Yoshiki Sawada, +Thomas Scharkowski, +Clytie Siddall, +August S. Sigov, +@c @email{august@@infran.ru}, +Roland Stigge, +Risto Vääräniemi, +Andrea Valle, +Olcay Yıldırım + +@c no comma for last entry + +@end macro diff --git a/Documentation/de/included/generating-output.itexi b/Documentation/de/included/generating-output.itexi new file mode 100644 index 0000000000..52a41af797 --- /dev/null +++ b/Documentation/de/included/generating-output.itexi @@ -0,0 +1,241 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of web/download.itexi and +@c learning/tutorial.itely + +@ignore + Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + 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 This is about "compiling" a lilypond file +@c (Learning 1 Tutorial), **not** compiling the +@c source code. + +@macro lilypadOSX +@warning{Diese Anweisungen gehen davon aus, dass Sie die +LilyPond-Application benutzen. Wenn Sie eins der Programme benutzen, die in @rweb{Leichteres Editieren} beschrieben sind, schauen +Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben, +eine Datei zu kompilieren.} + + +@subsubheading 1. Schritt: Erstellen Sie eine @file{.ly}-Datei + +Wenn Sie das @command{LilyPond.app}-Symbol doppelt klicken, öffnet +sich eine Beispiel-Datei. + +@sourceimage{Learning_Macos_welcome,,,} + +Wählen Sie aus den Menüs oben links auf Ihrem Bildschirm +@w{@code{File > Save}}. + +@sourceimage{Learning_Macos_Save_menu,,,} + +Wählen Sie einen Namen für die Datei, etwa @file{test.ly}. + +@sourceimage{Learning_Macos_Save_file_with_name,,,} + + +@subsubheading 2. Schritt: Kompilieren (mit LilyPad) + +Aus den selben Menüs wählen Sie jetzt @w{@code{Compile > Typeset}}. + +@sourceimage{Learning_Macos_Typeset_menu,,,} + +Ein neues Fenster öffnet sich, in dem ein Fortschrittslog der +Kompilation der von ihnen gerade gespeicherten Datei gezeigt +wird. + +@sourceimage{Learning_Macos_Compiling_log,,,} + + +@subsubheading 3. Schritt: Ausgabe anschauen + +Wenn die Kompilation fertig ist, wird ein PDF mit dem gleichen +Namen wie das Original erstellt und automatisch mit dem +Standard-PDF-Programm geöffnet und angezeigt. + +@sourceimage{Learning_Macos_pdf_output,,,} + + +@subsubheading Andere Befehle + +Um neue LilyPond-Dateien zu erstellen beginnen sie mit +@w{@code{File > New}} + +@sourceimage{Learning_Macos_New_menu,,,} + +@noindent +oder @w{@code{File > Open}} um eine schon existierende Datei zu +öffnen und zu editieren. + +@sourceimage{Learning_Macos_Open_menu,,,} + +Sie müssen alle Änderungen an der Datei zuerst speichern, bevor Sie +wieder @w{@code{Compile > Tyepset}} wählen. Wenn das PDF nicht +erscheint, schauen Sie im Fortschrittslog nach Fehlern. + +Wenn Sie nicht das Standard-PDF-Programm benutzen, das automatisch +bei Mac OS X dabei ist, und Sie die PDF-Datei noch von einer vorigen +Kompilation geöffnet haben, können weitere Kompilationen fehlschlagen, +bis Sie das Original-PDF schließen. + + + +@end macro + + +@macro lilypadWindows +@warning{Diese Anweisungen gehen davon aus, dass Sie den installierten +LilyPad-Editor benutzen. Wenn Sie eins der Programme benutzen, die in +@rweb{Leichteres Editieren} beschrieben sind, schauen +Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben, +eine Datei zu kompilieren.} + + +@subsubheading 1. Schritt: Erstellen Sie eine @file{.ly}-Datei + +Wenn sie auf das LilyPond-Symbol auf dem Desktop doppelklicken, +öffnet sich ein einfacher Texteditor mit einer Beispieldatei. + +@sourceimage{Learning_Win7_Welcome_File_Whole,,,} + +Aus dem Menü über der Beispieldatei wählen Sie @w{@code{File > Save as}}. +Benutzen Sie nicht @w{@code{File > Save}} für die Beispieldatei, +weil die Datei nicht funktioniert, bis Sie sie mit einem eigenen +Namen gespeichert haben. + +@sourceimage{Learning_Win7_Save_Menu,,,} + +Wählen Sie einen Namen für Ihre Datei, etwa @file{test.ly}. + +@sourceimage{Learning_Win7_Save_File_With_Name,,,} + + +@subsubheading Schritt 2a: Kompilieren (mit drag-and-drop) + +Sie können nach Belieben die Kompilation starten, indem Sie +entweder: + +Die Datei auf das LilyPond-Symbol ziehen. + +@sourceimage{Learning_Win7_Open_Dragndrop,,,} + +Oder Sie klicken mit der rechten Maustaste auf die Datei und wählen +Sie aus dem Menü @w{@code{Open with > LilyPond}}. + +@sourceimage{Learning_Win7_Open_Context_Menu,,,} + + +@subsubheading Schritt 2b: Kompilieren (mit Doppelklick) + +Sie können auch einfach die Datei @file{test.ly} doppelt anklicken. + + +@subsubheading 3. Schritt: Ausgabe anschauen + +Während der Kompilation von @file{test.ly} öffnet sich ein +Kommandofenster sehr schnell und schließt sich wieder. Drei +zusätzliche Dateien werden in diesem Schritt erstellt. + +@sourceimage{Learning_Win7_All_Files_Created,,,} + +Das PDF enthält den Notensatz aus der Datei @file{test.ly}. + +@sourceimage{Learning_Win7_Pdf_Output,,,} + + +@subsubheading Andere Befehle + +Um eine neue Datei zu erstellen, wählen Sie @w{@code{File > New}} +aus irgendeiner schon erstellten Datei. + +@sourceimage{Learning_Win7_New_Menu,,,} + +@noindent +oder @w{@code{File > Open}}, um eine Datei zu öffnen und zu +bearbeiten, die Sie schon vorher gespeichert hatten. + +@sourceimage{Learning_Win7_Open_Menu,,,} + +Sie müssen jede neue Änderung erst speichern, bevor Sie die Datei +kompilieren. Wenn kein PDF erstellt wird, öffnen Sie die Log-Datei +und schauen Sie nach Fehlern. + +@sourceimage{Learning_Win7_Log_File,,,} + +Die Log-Datei wird jedes Mal überschrieben, wenn Sie Ihre +LilyPond-Datei kompilieren. + +Die PS-Datei wird intern von LilyPond benutzt um das PDF zu erstellen +und kann ignoriert werden. Sie wird auch jedes Mal neu überschrieben. + +Wenn Sie das PDF in einem PDF-Programm anschauen, müssen Sie es +zuerst schließen, bevor Sie eine neue Kompilation durchführen +können, denn es kann einen Fehler bei der Erstellung des neuen +PDFs geben, wenn das alte noch geöffnet ist. + + + + +@end macro + + +@c not lilypad at all, but I ran out of names. :( +@macro lilypadCommandLine +@warning{Diese Anweisungen gehen davon aus, dass Sie den installierten +LilyPad-Editor benutzen. Wenn Sie eins der Programme benutzen, die in +@rweb{Leichteres Editieren} beschrieben sind, schauen +Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben, +eine Datei zu kompilieren.} + +@subsubheading Schritt 1: Erstellen Sie eine @file{.ly}-Datei + + +Erstellen Sie eine Text-Datei mit dem Namen @file{test.ly} und +geben Sie folgenden Text ein: + +@example +@{ + c' e' g' e' +@} +@end example + +@subsubheading Schritt 2: Kompilieren (auf der Kommandozeile) + +Um die Datei zu kompilieren, geben sie an der Konsole bzw. Kommandozeile + +@example +lilypond test.ly +@end example + +@noindent +ein. +Sie werden ungefähr folgende Meldungen sehen: + + +@example +lilypond test.ly +GNU LilyPond @version{} +»test.ly« wird verarbeitet +Analysieren... +Interpretation der Musik... +Vorverarbeitung der grafischen Elemente... +Ideale Seitenanzahl wird gefunden... +Musik wird auf eine Seite angepasst... +Systeme erstellen... +Layout nach »test.ps« ausgeben... +Konvertierung nach »test.pdf«... +@end example + +@subsubheading 3. Schritt: Ausgabe anschauen + +Als Ergebnis erhalten Sie ein @file{test.pdf}, das Sie mit den +Standardprogrammen Ihres Betriebssystemes anschauen können. + + +@end macro + + diff --git a/Documentation/de/included/helpus.itexi b/Documentation/de/included/helpus.itexi new file mode 100644 index 0000000000..0b61134a94 --- /dev/null +++ b/Documentation/de/included/helpus.itexi @@ -0,0 +1,169 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of web/community.itexi and +@c contributor/introduction.itely + +@ignore + Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + 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 Translators: Till Paala + +@macro helpusNeed +@subheading Wir brauchen Sie! + +Das Entwicklerteam von LilyPond ist ziemlich klein -- es wäre +wirklich notwendig, dass mehr Leute sich einbringen. Bitte +erwägen Sie, Ihren LilyPond-Benutzerkollegen zu helfen indem +Sie einen Beitrag leisten. + +Auch kleine Aufgaben können große Auswirkungen haben: wenn man sich +ihnen annimmt, können sich die erfahrenen Entwickler den schwierigen +Aufgaben widmen anstatt diese einfachen Probleme zu lösen. + +@end macro + + +@macro helpusTasks +@subheading Einfache Aufgaben + +Keine Kompilation des Quellcodes nötig! + +@itemize +@item +Unterstützung auf der Mailingliste: beantworten Sie Fragen von +anderen Benutzern. + +@item +Fehlerberichte: helfen Sie anderen Benutzern, richtige +@ref{Fehlerberichte} zu erstellen und/oder schließen Sie sich dem +Fehlerteam an, um die @rcontribnamed{Issues,Probleme} zu verwalten. + +@item +Dokumentation: kleine Änderungen (immer zuerst auf Englisch) +können vorgeschlagen werden, wenn die Richtlinien +von @rcontribnamed{Documentation suggestions,Vorschläge für die Dokumentation} +beachtet werden. + +@item +Das LilyPond-Schnipsel-Depot (LSR): erstellen und reparieren Sie +Schnipsel nach den Richtlinien in +@rcontribnamed{Adding and editing snippets,Hinzufügen und Bearbeiten von Schnipseln.}. + +@item +Diskussionen, Gutachten und Testen: die Entwickler brauchen +oft Feedback zu neuer Dokumentation, möglichen Änderungen der +Syntax und um neue Funktionen zu testen. Bitte nehmen Sie an +diesen Diskussionen teil! + +@end itemize + + +@subheading Fortgeschrittene Aufgaben + +Diese Aufgaben setzen voraus, dass Sie die Quellen +von Programm und Dokumentation haben und die Quellen auch +kompilieren können. + +@warning{Wir empfehlen, dass Beitragende, die Windows oder +MacOS X benutzen, @strong{nicht} ihre eigene Entwicklungsumgebung +einrichten, sondern anstattdessen lilybuntu benutzen, welches +besprochen ist in @rcontribnamed{Quick start,Schnellstart}.} + +Beitragende, die Linux oder FreBSD benutzen, können auch lilybuntu +einsetzen, aber wenn Sie Ihre eigene Entwicklungsumgebung einrichten +wollen, lesen Sie bitte @rcontribnamed{Working with source code,Mit dem Sourcecode arbeiten} +und @rcontribnamed{Compiling,Kompilieren}. + +@itemize +@item +Dokumentation: für große Änderungen siehe +@rcontribnamed{Documentation work,Arbeit an der Dokumentation}. + +@item +Website: die Website wird aus der Quelle der Dokumentation +erstellt. Siehe die Information über die Dokumentation und +zusätzlich @rcontribnamed{Website work,Arbeit an der Webseite}. + +@item +Übersetzungen: siehe +@rcontribnamed{Translating the documentation,Die Dokumentation übersetzen} und +@rcontribnamed{Translating the website,Die Webseite übersetzen}. + + +@item +Fehlerberichte oder neue Eigenschaften: die beste Art, hiermit zu +beginnen ist es, sich den @emph{Frogs}, den Fehlervertilgern, +anzuschließen. Siehe auch +@rcontribnamed{Programming work,Programmierungsarbeiten}. + +@end itemize + +@end macro + + +@macro helpusProjects +@subheading Projekte + +@subsubheading Frogs + +Website und Mailing-Liste: + +@example +@uref{http://frogs.lilynet.net} +@end example + +Die Frogs sind normale LilyPond-Benutzer, die beschlossen haben, +an der Software-Entwicklung ihres Lieblingsprogrammes teilzunehmen. +Sie reparieren Fehler, integrieren neue Funktionen oder dokumentieren +den Quellcode -- immer gibt es etwas zu tun! Viel besser noch: +hiermit erhält jeder eine Chance, mehr über LilyPond, Freie +Software, Programmierung etc. zu lernen @dots{} und Spaß zu haben. +Wenn Sie hieran interessiert sind, dann heißt es: +@emph{Schließen Sie sich den @qq{Fröschen} an!} + + + +@subsubheading Das GLISS-Projekt (Grand LilyPond Input Syntax Standardization) + +Webseite: + +@rcontrib{Grand LilyPond Input Syntax Standardization (GLISS)}. + +GLISS soll die Syntax des Eingabecodes (ohne eigene Anpassungen) +für die kommende LilyPond-Version 3.0 standardisieren. Nachdem +man auf 3.0 aktualisiert hat, soll die (nicht speziell +angepasste) Syntax für die absehbare Zukunft unverändert bleiben. + +Es wird eine Zeit der ausführlichen Diskussionen geben, damit +die endgültigen Eingabespezifikationen festgelegt werden können. + +@warning{GLISS beginnt kurz nachdem 2.14 veröffentlicht wird.} + + +@subsubheading GOP (Grand Organizing Project) + +Webseite: +@rcontrib{Grand Organization Project (GOP)}. + +GOP wird unsere große Aktion, mit welcher wir neue Interessenten +zu eigenen Beiträgen zum Programm werben. Die Entwicklungsarbeit +(wozu auch @qq{einfache Arbeiten}, für die man keine +Programmierungserfahrung braucht, gehören) muss unbedingt über mehr +Helfer verteilt werden. Wir müssen auch Kenntnisse von aktiven +Entwicklern dokumentieren, damit sie nicht verloren gehen können. + +Anders als die meisten @qq{Großen Projekte} geht es bei GOP nicht +darum, großartige neue Eigenschaften zu entwickeln oder alles +völlig umzugestalten. Das Ziel ist es vielmehr, uns eine stabile +Basis zu geben, sodass große Änderungen in der Zukunft einfacher +bewerkstelligt werden können. + +@warning{GOP beginnt kurz nachdem 2.14 veröffentlicht wird.} + +@end macro + + diff --git a/Documentation/de/index.html.in b/Documentation/de/index.html.in deleted file mode 100644 index 90a768d6e9..0000000000 --- a/Documentation/de/index.html.in +++ /dev/null @@ -1,148 +0,0 @@ - - - - LilyPond @TOPLEVEL_VERSION@ Dokumentation - - - - - - - -
-

LilyPond Dokumentation

-
- -
-

- Version @TOPLEVEL_VERSION@ -
- @DATE@ -

- - -
- - - - - - - - - - - - - - - - - - - -

- Die gesamte Dokumentation, die Sie auf dieser Seite finden, gibt - es auch zum Herunterladen. - Laden - Sie sich das Tar-komprimierte Paket herunter -

-

- Anmerkung: Wie auf allen HTML-Seiten dieser Dokumentation finden - sich am unteren Ende Links zu Übersetzungen in anderen Sprachen. -

- - diff --git a/Documentation/de/learning.tely b/Documentation/de/learning.tely new file mode 100644 index 0000000000..82617cdc61 --- /dev/null +++ b/Documentation/de/learning.tely @@ -0,0 +1,122 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 +@documentencoding UTF-8 +@documentlanguage de +@setfilename lilypond-learning.info +@settitle LilyPond Handbuch zum Lernen +@afourpaper + +@macro manualIntro +Diese Datei stellt eine Einleitung für LilyPond Version +@version{} zur Verfügung. +@end macro + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 bei den Autoren. +@end macro + +@set FDL +@include macros.itexi + + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen und Graham Percival +@omfdescription Handbuch zum Lernen des LilyPond Musiksatzsystems +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage German +@end ignore + +@c Translators: Till Paala + +@lilyTitlePage{Learning Manual} + +@c TOC -- non-tex + + +@ignore +@ifhtml +@ifclear bigpage +Dieses Dokument ist auch als +@uref{source/Documentation/learning.de.pdf,PDF} und als +@uref{source/Documentation/learning-big-page.de.html,eine große Seite} +verfügbar. +@end ifclear +@ifset bigpage +Dieses Dokument ist auch als +@uref{source/Documentation/learning.de.pdf,PDF} und als +@uref{source/Documentation/learning/index.de.html,Separate HTML-Seiten mit Index} +verfügbar. +@end ifset +@end ifhtml + + +@ifnottex +Das ist des Handbuch zum Erlernen von GNU LilyPond Version @version{}. +Für einen Überblick über die gesamte Dokumentation von LilyPond und die Intention +dieses Handbuchs siehe @ref{Über die Dokumentation}. + +@cindex Internetseite +@cindex URL + +Mehr Information unter +@uref{http://@/www@/.lilypond@/.org/}. Auf der Internetseite +finden sich Kopien dieser und anderer Dokumentationsdateien. +@end ignore + + +@ifnottex +@menu +@c * Vorwort:: Vorwort. +* Übung:: Eine Übung zur Einführung. +* Ü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. + + +Anhänge + +* Vorlagen:: Funktionierende Vorlagen. +* GNU Free Documentation License:: Lizenz dieses Handbuchs. +* LilyPond-Index:: +@end menu + +@docMain +@end ifnottex + +@c TOC - tex +@contents + +@allowcodebreaks false + +@c INCLUDES + +@c @include learning/preface.itely +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely +@c @include learning/working.itely +@c moved to application.tely + +@include learning/templates.itely +@c @include learning/scheme-tutorial.itely +@c moved to extending.tely +@include fdl.itexi + +@node LilyPond-Index +@appendix LilyPond-Index +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/de/learning/GNUmakefile b/Documentation/de/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/de/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/learning/common-notation.itely b/Documentation/de/learning/common-notation.itely new file mode 100644 index 0000000000..c0dc4dfdea --- /dev/null +++ b/Documentation/de/learning/common-notation.itely @@ -0,0 +1,1524 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 3c814eb917c15f6f0d64f64f58046dd7b119e359 + + 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" + +@ignore +Tutorial guidelines: +- unless you have a really good reason, use either + @l ilypond[quote,verbatim] + or + @l ilypond[quote,verbatim,fragment,relative=2] + (without spaces) + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "aes". I know it's not + correct Dutch naming, but let's not confuse people with this until + we get to the Basic notation chapter. +- addition for German users to the pitches chapter about naming of pitches. +@end ignore + + +@node Übliche Notation +@chapter Übliche Notation +@translationof Common notation + +Dieser Abschnitt erklärt, wie wunderschöner Notensatz erstellt +werden kann, der die am häufigsten vorkommenden Notationssymbole +enthält. Der Abschnitt baut auf der @ref{Übung} auf. + + +@menu +* Notation auf einem System:: +* Mehrere Noten auf einmal:: +* Lieder:: +* Letzter Schliff:: +@end menu + + +@node Notation auf einem System +@section Notation auf einem System +@translationof Single staff notation + +Dieses Kapitel lehrt grundlegende Bestandteile der Notation, +die für eine Stimme auf einem System gebraucht werden. + +@menu +* Taktüberprüfung +* Versetzungszeichen und Tonartbezeichnung (Vorzeichen):: +* Bindebögen und Legatobögen:: +* Artikulationszeichen und Lautstärke:: +* Text hinzufügen:: +* Automatische und manuelle Balken:: +* Zusätzliche rhythmische Befehle:: +@end menu + + +@node Taktüberprüfung +@subsection Taktüberprüfung +@translationof Bar checks + +Wenn sie auch nicht zwingend vorgeschrieben sind, so sollten Taktüberprüfungen +in der Eingabedatei benutzt werden, um zu zeigen, wo Taktstriche +normalerweise sein sollten. Sie werden mit dem @qq{Pipe}-Symbol +( @code{|}) notiert (Taste AltGr + <). Mithilfe der Taktüberprüfungen +kann das Programm sicherstellen, dass die eingegebenen Notenlängen auch +volle Takte an den richtigen Stellen ergeben. Taktüberprüfungen erleichtern +auch das Lesen des Eingabetextes, weil sie Ordnung in den Text bringen. + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +Notationsreferenz: +@ruser{Takt- und Taktzahlüberprüfung}. + + +@node Versetzungszeichen und Tonartbezeichnung (Vorzeichen) +@subsection Versetzungszeichen und Tonartbezeichnung (Vorzeichen) +@translationof Accidentals and key signatures + +@subheading Versetzungszeichen +@cindex Versetzungszeichen +@cindex Akzidentien +@cindex Kreuz +@cindex Doppelkreuz +@cindex B +@cindex Doppel-B + +@funindex es +@funindex is +@funindex eses +@funindex isis + + +Glossar: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, +@rglos{double flat}, @rglos{accidental}. + +Ein @notation{Kreuz}-Versetzungszeichen@footnote{In der Umgangssprache +werden die Versetzungszeichen häufig auch Vorzeichen genannt. In +diesem Handbuch wird jedoch zwischen Vorzeichen zur generellen Angabe +der Tonart und den Versetzungszeichen, die direkt im Notentext +erscheinen, unterschieden.} wird eingegeben, indem an den +Notennamen ein @q{is} gehängt wird, ein @notation{B}-Versetzungszeichen +durch Anhängen von @q{es}. Logischerweise wird dann ein + @notation{Doppelkreuz} oder @notation{Doppel-B} durch Anhängen +von @q{isis} oder @q{eses} geschrieben. Diese Syntax +stammt aus der Tradition der germanischen Sprachen und ist also für +deutsche Benutzer kein Problem. Es ist aber möglich, die Namen für die +@notation{Versetzungszeichen} in anderen +Sprachen zu benutzen, siehe @ruser{Notenbezeichnungen in anderen Sprachen}. + +@lilypond[verbatim,quote,relative=2] +cis4 ees fisis, aeses +@end lilypond + + +@subheading Tonartbezeichnungen (Vorzeichen) + +@cindex Tonart, Einstellung von +@cindex Vorzeichen +@cindex Dur +@cindex Moll +@cindex Vorzeichen und Versetzungszeichen +@cindex Inhalt & Darstellung +@cindex Darstellung & Inhalt + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +Glossar: @rglos{key signature}, @rglos{major}, +@rglos{minor}. + +Die @notation{Tonart} eines Stückes wird erstellt mit dem +Befehl @code{\key}, gefolgt von einer Notenbezeichnung und +@code{\major} (für Dur) oder @code{\minor} +(für Moll). + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 | +\key c \minor +a1 | +@end lilypond + +@smallspace + +@subheading Warnung: Tonartbezeichnungen und Tonhöhen + +Glossar: @rglos{accidental}, @rglos{key signature}, +@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, +@rglos{transposition}, @rglos{Pitch names}. + +Um zu bestimmen, ob vor einer bestimmten Note ein Versetzungszeichen +erscheinen soll, untersucht LilyPond die Notenhöhen und die +Tonart. Die Tonart beeinflusst nur die @emph{gedruckten} +Versetzungszeichen, nicht die wirklichen Tonhöhen! Diese Besonderheit +scheint am Anfang oft verwirrend, so dass sie hier etwas +genauer betrachtet wird. + +LilyPond unterscheidet strickt zwischen dem musikalischen Inhalt +und dem Satz (Layout). Die Alteration (@notation{B}, +@notation{Kreuz} oder @notation{Auflösungszeichen}) einer Note gehört +zur Tonhöhe dazu und ist deshalb musikalischer +Inhalt. Ob ein Versetzungszeichen (also ein @emph{gedrucktes} Kreuz, b +oder Auflösungszeichen) auch vor der Note erscheint, hängt vom Kontext, +also vom Layout ab. Das Layout gehorcht bestimmten Regeln, und +Versetzungszeichen +werden automatisch nach diesen Regeln gesetzt. Die Versetzungszeichen im +fertigen Notenbild sind nach den Regeln des Notensatzes gesetzt. Deshalb +wird automatisch entschieden, wo sie erscheinen, und man muss +den Ton eingeben, den man @emph{hören} will. + +In diesem Beispiel + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +hat keine der Noten ein Versetzungszeichen, trotzdem muss im Quelltext +das @q{is} für @code{cis} und @code{fis} notiert werden. + +Der Code @q{b} (nach der holländischen Notenbezeichnung wird der Ton H mit +@code{b} gesetzt) heißt also nicht: @qq{Zeichne einen schwarzen Punkt +auf die Mittellinie des Systems.} Im Gegenteil, er heißt vielmehr: + @qq{Hier soll eine Note mit der Tonhöhe H gesetzt werden.} +In der Tonart As-Dur @emph{bekommt} sie ein Versetzungszeichen: + + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +Alle diese Versetzungszeichen ausdrücklich zu schreiben, bedeutet vielleicht +etwas mehr Schreibarbeit, hat aber den großen Vorteil, dass +@notation{Transpositionen} sehr viel einfacher gemacht wird +und der Druck von Versetzungszeichen nach +unterschiedlichen Regeln erfolgen kann. Siehe +@ruser{Automatische Versetzungszeichen} für einige Beispiele, wie Vorzeichen +anhand von unterschiedlichen Regeln ausgegeben werden können. + + +@seealso +Notationsreferenz: +@ruser{Notenbezeichnungen in anderen Sprachen}, +@ruser{Versetzungszeichen}, +@ruser{Automatische Versetzungszeichen}, +@ruser{Tonartbezeichnung}. + + +@node Bindebögen und Legatobögen +@subsection Bindebögen und Legatobögen +@translationof Ties and slurs + +@cindex Legatobögen +@cindex Bögen, Legato +@cindex Bindebögen +@cindex Phrasierungsbögen +@cindex Legatobögen, Phrasierung + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + + +@subheading Bindebögen + +Glossar: @rglos{tie}. + +Ein @notation{Bindebogen} wird geschrieben, indem man eine Tilde @code{~} +an die erste der zu verbindenden Noten hängt. + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4~ c8 a~ a2 +@end lilypond + + +@subheading Legatobögen + +Glossar: @rglos{slur}. + +Ein @notation{Legatobogen} ist ein Bogen, der sich über mehrere Noten +erstreckt. Seine +Beginn- und Endnote werden mit @q{(} beziehungsweise @q{)} markiert. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@subheading Phrasierungsbögen + +Glossar: @rglos{slur}, @rglos{phrasing}. + +Bögen, die längere Phrasierungseinheiten markieren +(Phrasierungsbögen), werden mit @code{\(} und +@code{\)} eingegeben. Es können sowohl Legato- als auch +Phrasierungsbögen gleichzeitig vorkommen, aber es kann nicht mehr +als jeweils einen Legato- und einen Phrasierungsbogen gleichzeitig +geben. + +@lilypond[verbatim,quote,relative=2] +g4\( g8( a) b( c) b4\) +@end lilypond + +@sp 1 + +@cindex Binde- versus Legatobogen +@subheading Warnung: Bindebögen sind nicht Legatobögen + +Glossar: @rglos{articulation}, @rglos{slur}, @rglos{tie}. + +Ein Legatobogen sieht aus wie ein @rglos{tie}, hat aber eine +andere Bedeutung. Ein Bindebogen verlängert nur die vorhergehende +Note und kann also nur bei zwei Noten gleicher Tonhöhe benutzt werden. +Legatobögen dagegen zeigen die Artikulation von Noten an und können +für größere Notengruppen gesetzt werden. Binde- und Legatobögen können +geschachtelt werden. + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Bindebögen}, +@ruser{Legatobögen}, +@ruser{Phrasierungsbögen}. + + +@node Artikulationszeichen und Lautstärke +@subsection Artikulationszeichen und Lautstärke +@translationof Articulation and dynamics + +@subheading Artikulationszeichen + +@cindex Artikulation +@cindex Akzente +@cindex Staccato + +Glossar: +@rglos{articulation}. + +Übliche @notation{Artikulationszeichen} können durch Anfügen von Minus +(@q{-}) und einem entsprechenden Zeichen eingegeben werden: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +@subheading Fingersatz + +@cindex Fingersatz + +@funindex ^ +@funindex _ + +Glossar: @rglos{fingering}. + +Auf gleiche Weise können Fingersatzbezeichnungen hinzugefügt +werden, indem nach dem Minus (@q{-}) eine Zahl geschrieben wird: + +@lilypond[verbatim,quote,relative=2] +c4-3 e-5 b-2 a-1 +@end lilypond + +Artikulationszeichen und Fingersätze werden normalerweise +automatisch platziert, aber man kann ihre Position auch vorgeben +durch die Zeichen @q{^} (oben) oder @q{_} (unten) anstelle +des Minuszeichen. An eine Note können auch mehrfache +Artikulationszeichen +gehängt werden. Meistens findet aber LilyPond alleine die beste +Möglichkeit, wie die Artikulationen platziert werden sollen. + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Dynamik + +@cindex Dynamik +@cindex Crescendo +@cindex Lautstärke +@cindex Decrescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Glossar: +@rglos{dynamics}, +@rglos{crescendo}, +@rglos{decrescendo}. + +Die Dynamik innerhalb eines Stückes wird eingegeben, indem man +die Markierungen (mit einem Backslash) an +die Note hängt: + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + +@notation{Crescendi} und @notation{Decrescendi} werden mit dem +Befehl @code{\<} +beziehungsweise @code{\>} begonnen. Das nächste absolute +Dynamik-Zeichen, etwa @code{\f}, beendet das (De)Crescendo. +Auch mit dem Befehl @code{\!} kann es explizit beendet werden. + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Artikulationszeichen und Verzierungen}, +@ruser{Fingersatzanweisungen}, +@ruser{Dynamik}. + + +@node Text hinzufügen +@subsection Text hinzufügen +@translationof Adding text + +@cindex Text, einfügen +@cindex Einfügen von Text +@cindex Hinzufügen von Text +@cindex Textbeschriftung +@cindex markup + +@funindex \markup +@funindex markup + +Text können Sie auf folgende Art in die Partitur einfügen: + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +Zusätzliche Formatierung kann eingesetzt werden, wenn Sie den +@code{\markup}-Befehl benutzen: + +@lilypond[verbatim,quote,relative=2] +c2^\markup { \bold espr } +a2_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Text eingeben}. + + +@node Automatische und manuelle Balken +@subsection Automatische und manuelle Balken +@translationof Automatic and manual beams + +@cindex Balken, manuell +@cindex automatische Balken +@cindex Balken, automatisch +@cindex manuelle Balken + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Alle @notation{Balken} werden automatisch gesetzt: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@end lilypond + +@noindent +Wenn diese automatisch gesetzten Balken nicht gewollt sind, +können sie manuell geändert werden. Wenn nur ein Balken +hier und da korrigiert werde muss, erhält die Note, an der der Balken +anfängt, ein @q{[} (AltGr+8) und die, an der er enden soll, ein +@q{]} (AltGr+9). + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +Wenn Sie die automatischen Balken vollständig oder für +einen längeren Abschnitt ausschalten wollen, benutzen Sie +den Befehl @code{\autoBeamOff}, um die Balken abzuschalten, +und @code{\autoBeamOn}, um sie wieder einzuschalten. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Automatische Balken}, +@ruser{Manuelle Balken}. + + +@node Zusätzliche rhythmische Befehle +@subsection Zusätzliche rhythmische Befehle +@translationof Advanced rhythmic commands + +@subheading Auftakt + +@cindex Auftakt +@funindex \partial +@funindex partial + +Ein @notation{Auftakt} wird mit dem Befehl @code{\partial} +eingegeben. Darauf folgt die Länge des Auftaktes: @code{\partial 4} +heißt eine Viertelnote Auftakt und @code{\partial 8} eine Achtelnote. + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + + +@subheading Andere rhythmische Aufteilungen + +@cindex N-tolen +@cindex Triolen +@cindex Rhythmische Aufteilungen + +@funindex \times +@funindex times + +Glossar: @rglos{note value}, @rglos{triplet}. + +@notation{Triolen} und @notation{N-tolen} werden mit dem +@code{\times}-Befehl erzeugt. Er braucht +zwei Argumente: einen Bruch und die Noten, auf die er sich bezieht. +Die Dauer des Abschnittes wird mit dem Bruch multipliziert. +In einer Triole dauern die Noten 2/3 ihrer normalen Länge, +also hat eine Triole 2/3 als Bruch: + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Verzierungen + +@cindex Verzierungen +@cindex Vorschlag +@cindex Vorhalt + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Glossar: @rglos{grace notes}, @rglos{acciaccatura}, +@rglos{appoggiatura}. + +Verzierungen werden mit dem Befehl @code{\grace} +eingegeben, Vorhalte durch den Befehl @code{\appoggiatura} +und Vorschläge mit @code{\acciaccatura}. + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Verzierungen}, +@ruser{Andere rhythmische Aufteilungen}, +@ruser{Auftakte}. + + +@node Mehrere Noten auf einmal +@section Mehrere Noten auf einmal +@translationof Multiple notes at once + +In diesem Kapitel wird gezeigt, wie mehr als eine Note zur +gleichen Zeit gesetzt werden kann: auf unterschiedlichen Systemen +für verschiedene Instrumente oder für ein Instrument (z. B. Klavier) +und in Akkorden. + +Polyphonie nennt man in der Musik das Vorkommen von mehr als einer +Stimme +in einem Stück. Polyphonie bzw. Mehrstimmigkeit heißt für LilyPond allerdings +das Vorkommen von mehr als einer Stimme pro System. + +@menu +* Musikalische Ausdrücke erklärt:: +* Mehrere Notensysteme:: +* Notensysteme gruppieren:: +* Noten zu Akkorden verbinden:: +* Mehrstimmigkeit in einem System:: +@end menu + + +@node Musikalische Ausdrücke erklärt +@subsection Musikalische Ausdrücke erklärt +@translationof Music expressions explained + +@cindex Musikalischer Ausdruck +@cindex Ausdruck, musikalischer +@cindex zusammengesetzter musikalischer Ausdruck + +In LilyPond-Quelldateien wird Musik durch @emph{musikalische +Ausdrücke} dargestellt. Eine einzelne Note ist ein musikalischer +Ausdruck. + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +Eine Gruppe von Noten innerhalb von Klammern bildet einen neuen +Ausdruck. Dieser ist nun ein @emph{zusammengesetzter musikalischer +Ausdruck}. Hier wurde solch ein zusammengesetzter musikalischer +Ausdruck mit zwei Noten erstellt: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +Wenn eine Gruppe von musikalischen Ausdrücken (also beispielsweise +Noten) in geschweifte Klammern gesetzt wird, bedeutet das, dass eine +Gruppe nach der anderen gesetzt wird. Das Resultat ist ein neuer +musikalischer Ausdruck. + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f4 g } +@end lilypond + + +@subheading Analogie: mathematische Ausdrücke + +Die Anordnung von Ausrücken funktioniert ähnlich wie mathematische +Gleichungen. Eine längere Gleichung entsteht durch die +Kombination kleinerer Gleichungen. Solche Gleichungen +werden auch Ausdruck genannt und ihre Definition ist +rekursiv, sodass beliebig komplexe und lange Ausdrücke +erstellt werden können. So etwa hier: + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +Das ist eine Folge von (mathematischen) Ausdrücken, in denen +jeder Ausdruck in dem folgenden (größeren) enthalten ist. Die +einfachsten Ausdrücke sind Zahlen, und größere werden durch die +Kombination von Ausdrücken mit Hilfe von Operatoren (wie @q{+}, +@q{*} und @q{/}) sowie Klammern. Genauso wie mathematische +Ausdrücke können auch musikalische Ausdrücke beliebig tief verschachtelt +werden. Das wird benötigt für komplexe Musik mit vielen Stimmen. + + +@subheading Gleichzeitige musikalische Ausdrücke: mehrere Notensysteme + +@cindex mehrere Systeme +@cindex Notensysteme, mehrere +@cindex Polyphonie +@cindex Mehrstimmigkeit +@cindex parallele Ausdrücke +@cindex Ausdrücke, parallel +@cindex relative Noten und simultane Musik +@cindex gleichzeitige Noten und relativer Modus + +@funindex << +@funindex >> +@funindex << ... >> + +Glossar: @rglos{polyphony}. + + +Mit dieser Technik kann @notation{polyphone} Musik gesetzt werden. +Musikalische +Ausdrücke werden einfach parallel kombiniert, damit sie gleichzeitig +als eigene Stimmen in dem gleichen Notensystem gesetzt werden. Um +anzuzeigen, dass an dieser Stelle gleichzeitige Noten gesetzt werden, +muss nur ein Kombinationszeichen eingefügt werden. Parallel werden +musikalische Ausdrücke kombiniert, indem man sie mit @code{<<} und +@code{>>} einrahmt. Im folgenden Beispiel sind drei Ausdrücke +(jeder mit zwei Noten) parallel kombiniert: + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +Es ist noch zu bemerken, dass wir hier für jede Ebene innerhalb der +Quelldatei eine andere Einrückung geschrieben haben. Für LilyPond +spielt es keine Rolle, wie viele Leerzeichen am Anfang einer Zeile sind, +aber für Menschen ist es eine große Hilfe, sofort zu sehen, welche +Teile des Quelltextes zusammen gehören. + +@warning{Jede Note ist relativ zu der vorhergehenden in der +Datei, nicht relativ zu dem zweigestrichenen C (@code{c''}), das im +@code{@bs{}relative}-Befehl angegeben ist. Die Klammern haben darauf +keinen Einfluss.} + + +@subheading Gleichzeitige musikalische Ausdrücke: ein Notensystem + +Um die Anzahl der Notensysteme zu bestimmen, analysiert +LilyPond den Anfang des ersten Ausdrucks. Wenn sich hier +eine einzelne Note befindet, wird nur +ein System gesetzt, wenn es sich um eine parallele Anordnung von +Ausdrücken handelt, wird mehr als ein System gesetzt. Das +folgende Beispiel beginnt mit einer Note: + + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e f } { c <> } >> | +} +@end lilypond + + +@node Mehrere Notensysteme +@subsection Mehrere Notensysteme +@translationof Multiple staves + +@cindex mehrere Systeme +@cindex Systeme, mehrere +@cindex Kontext +@cindex Notationskontext + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +Wie wir in @ref{Musikalische Ausdrücke erklärt} gesehen haben, sind +LilyPond-Quelldateien aus musikalischen Ausdrücken konstruiert. +Wenn die Noteneingabe mit parallelen Ausdrücken beginnt, werden +mehrere Notensysteme erstellt. Es ist aber sicherer und einfacherer +zu verstehen, wenn diese Systeme explizit erstellt werden. + +Um mehr als ein System zu schreiben, wird jedem Notenausdruck, der +in einem eigenen System stehen soll, der Befehl @code{\new Staff} +vorne angefügt. Diese @code{Staff} (engl. für Notensystem)-Elemente +werden dann parallel angeordnet mit den @code{<<} und +@code{>>}-Zeichen: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +Der Befehl @code{\new} beginnt einen neuen @qq{Notationskontext}. Ein +solcher Notationskontext ist eine Umgebung, in der musikalische +Ereignisse (wie Noten oder @code{\clef} (Schlüssel)-Befehle) +interpretiert werden. Für einfache Stücke werden diese +Umgebungen automatisch erstellt. Für kompliziertere Musik +ist es aber am besten, die Umgebungen explizit zu erstellen. + +Es gibt verschiedene Kontext-Typen. @code{Score} (Partitur), +@code{Staff} (Notensystem) und @code{Voice} (Stimme) +verarbeiten die Eingabe von Noten, während die @code{Lyrics} +(Text)-Umgebung zum Setzen von Liedtexten +und die @code{ChordNames} (Akkordbezeichnungs)-Umgebung +für Akkordsymbole verwendet wird. + +Indem @code{\new} vor einen musikalischen Ausdruck gesetzt wird, +wird ein größerer Ausdruck erstellt. In diesem Sinne erinnert +die Syntax des @code{\new}-Befehls an das Minuszeichen +in der Mathematik. Genauso wie @math{(4+5)} ein Ausdruck ist, der +durch @math{-(4+5)} zu einem größeren Ausdruck erweitert wurde, +werden auch musikalische Ausdrücke durch den @code{\new}-Befehl +erweitert. + +Die Taktangabe, die in einem einzelnen System angegeben wird, wirkt +sich auf alle anderen System aus. Die +Angabe der Tonart in einem System hingegen beeinflusst @emph{nicht} die +Tonart der anderen Systeme. Dieses Verhalten ist darin begründet, +dass Partituren mit transponierenden Instrumenten häufiger sind +als Partituren mit unterschiedlichen Taktarten. + + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + +@node Notensysteme gruppieren +@subsection Notensysteme gruppieren +@translationof Staff groups + +@cindex Akkolade +@cindex System für Klavier +@cindex Notensystem für Klavier +@cindex Notensystem für Chor +@cindex Partitur für Chor +@cindex Systemwechsel, manuell +@cindex Wechsel zwischen Systemen, manuell +@cindex Stimmwechsel zwischen Systemen, manuell +@cindex Chorpartitur +@cindex Klaviersystem +@cindex Partitur + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Glossar: +@rglos{brace}, +@rglos{staff}, +@rglos{system}. + +Musik für das Klavier wird üblicherweise auf zwei Systemen notiert, +die durch eine @notation{geschweifte Klammer} verbunden sind +(Akkolade). Um ein derartiges +Notensystem zu erstellen, geht man ähnlich vor wie in dem Beispiel +aus @ref{Mehrere Notensysteme}, nur dass der gesamte Ausdruck jetzt in +eine @code{PianoStaff}-Umgebung eingefügt wird. + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> >> +@end example + +Hier ein kleines Beispiel: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef "bass" c,,4 c' | e c | } + >> +} +@end lilypond + +Andere typische Gruppen von Notensystemen können mit den +Befehlen @code{\new StaffGroup} für Orchestersätze und +@code{\new ChoirStaff} für ein Chorsystem erstellt +werden. Jede dieser Systemgruppen erstellt einen +neuen Kontext, der dafür sorgt, dass die Klammern zu Beginn +des Systems erstellt werden und der zusätzlich auch +darüber entscheidet, ob die Taktlinien nur auf dem System +oder auch zwischen System gesetzt werden. + + +@seealso +Notationsreferenz: +@ruser{Tasteninstrumente und andere Instrumente mit mehreren Systemen}, +@ruser{Systeme anzeigen lassen}. + + +@node Noten zu Akkorden verbinden +@subsection Noten zu Akkorden verbinden +@translationof Combining notes into chords + +Glossar: @rglos{chord} + +@cindex Akkorde +@cindex Notendauer in Akkorden + +@funindex < +@funindex > +@funindex < ... > + +Wir haben schon weiter oben gesehen, wie Akkorde erstellt +werden können, indem sie mit spitzen Klammern eingeschlossen +und somit als gleichzeitig erklingend markiert werden. +Die normale Art, Akkorde zu notieren, ist aber, sie in +@emph{einfache} spitze Klammern (@q{<} und @q{>}) +einzuschließen. Beachten Sie, +dass alle Noten eines Akkordes die gleiche Dauer haben müssen, und +diese Dauer wird nach der schließenden Klammer geschrieben. + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +Akkorde sind im Grunde gleichwertig mit einfachen Noten: +Fast alle Markierungen, die an einfache Noten angehängt +werden können, kann man auch an Akkorde hängen. +So können Markierungen wie Balken oder Bögen mit +den Akkorden kombiniert werden. Sie müssen jedoch außerhalb der +spitzen Klammern gesetzt werden. + +@lilypond[verbatim,quote,relative=2] +8[ ] \>[ ]\! | +r4 8.\p 16( 4-. ) | +@end lilypond + +@seealso +Notationsreferenz: +@ruser{Chorded notes}. + + +@node Mehrstimmigkeit in einem System +@subsection Mehrstimmigkeit in einem System +@translationof Single staff polyphony + +@cindex Mehrstimmigkeit +@cindex mehrere Stimmen +@cindex Stimmen, mehrere in einem System +@cindex unsichtbare Noten +@cindex Platzhalternoten +@cindex Noten, unsichtbar + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +Polyphone Notation in LilyPond ist nicht schwer, benutzt aber bestimmte +Konzepte, die hier noch nicht behandelt worden sind und hier +nicht erklärt werden sollten. Anstelle dessen führen die folgenden +Abschnitte in diese Konzepte ein und erklären sie ausführlich. + + +@seealso +Handbuch zum Lernen: +@ref{Voice enthält Noten}. + +Notationsreferenz: +@ruser{Gleichzeitig erscheinende Noten}. + + +@node Lieder +@section Lieder +@translationof Songs + +@cindex Gesangstext, schreiben + +@funindex \addlyrics +@funindex addlyrics + +In diesem Kapitel wird in die Kombination von Musik mit +Text eingeführt und die Erstellung einfacher Song-Blätter +gezeigt. + +@menu +* Einfache Lieder setzen:: +* Text an einer Melodie ausrichten:: +* Text zu mehreren Systemen:: +@end menu + + +@node Einfache Lieder setzen +@subsection Einfache Lieder setzen +@translationof Setting simple songs + +@cindex Text +@cindex Lieder +@cindex Liedtext + +@funindex \addlyrics +@funindex addlyrics + +Glossar: @rglos{lyrics}. + +Hier ist der Beginn eines einfachen Kinderliedes, +@notation{Girls and boys come out to play}: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +Zu diesen Noten kann Text hinzugefügt werden, indem beide +mit dem @code{\addlyrics}-Befehl kombiniert werden. Text +wird eingegeben, indem jede Silbe durch ein Leerzeichen getrennt wird. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } +>> +@end lilypond + +@warning{Es ist sehr wichtig, dass die letzte Silbe duch ein Leerzeichen +oder eine neue Zeile von der abschließenden geschweiften Klammer +getrennt ist. Wenn dies nicht der Fall ist, wird die Klammer als Teil +der Silbe interpretiert, was zu einem seltsamen Fehler führt. Siehe auch +@rprogram{Apparent error in ../ly/init.ly}.} + +Sowohl die Noten als auch der Text sind jeweils in geschweifte +Klammern eingefasst, und der gesamte Ausdruck ist zwischen +@w{@code{<< ... >>}} positioniert. Damit wird garantiert, dass +Text und Noten gleichzeitig gesetzt werden. + + +@node Text an einer Melodie ausrichten +@subsection Text an einer Melodie ausrichten +@translationof Aligning lyrics to a melody + +@cindex Gesangstext, Ausrichten +@cindex Ausrichten von Gesangstext +@cindex Worte mit mehreren Silben +@cindex mehrere Silben in Gesangstext +@cindex Melisma +@cindex Unterstrich +@cindex Bindestrich +@cindex Fülllinie + +Glossar: @rglos{melisma}, @rglos{extender line}. + +Die nächste Zeile des Kinderliedes lautet: +@notation{The moon doth shine as bright as day}. So sieht es +notiert aus: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Wenn dieser Code des obrigen Beispiels kompiliert wird, sollten derartige +Warnungen in der Ausgabe auf der Konsole/in der Log-Datei auftauchen: + +@example +test.ly:10:29: Warnung: Taktüberprüfung gescheitert bei: 5/8 + The | moon doth shine as + | bright as day; | +test.ly:10:46: Warnung: Taktüberprüfung gescheitert bei: 3/8 + The | moon doth shine as | bright as day; + | +@end example + +Das ist ein gutes Beispiel für den Nutzen von Taktüberprüfungen. Wenn man +sich die Noten genauer anschaut, wird klar, dass die neue Textzeile nicht +korrekt an den Noten ausgerichtet ist. Das Wort @notation{shine} sollte +zu zwei Noten gesungen werden, nicht nur zu einer. Das nennt man ein +@notation{Melisma}, eine Silbe Text zu mehreren Noten. Es gibt mehrere +Möglichkeiten, eine Silbe über mehrere Noten zu verlängern. Die einfachste +ist es, einen Legatobogen um die betroffenen Noten zu setzen, zu +Einzelheiten siehe @ref{Bindebögen und Legatobögen}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Die Wörter orientieren sich jetzt richtig an den Noten, +aber der automatische Balken für die Noten zu +@notation{shine as} sieht nicht richtig aus. +Wir können das korrigieren, indem wir die Balkenlänge +manuell eingrenzen, damit sie der üblichen Notationsweise +für Gesang entspricht. Für Einzelheiten siehe +@ref{Automatische und manuelle Balken}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Alternativ kann das Melisma auch im Text notiert werden, indem +für jede Note, die übersprungen werden soll, ein Unterstrich +@code{_} im Text geschrieben wird: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +Wenn die letzte Silbe eines Wortes sich über mehrere Noten oder +eine sehr lange Note erstreckt, wird üblicherweise eine Fülllinie +gesetzt, die sich über alle Noten erstreckt, die zu der Silbe +gehören. Diese Fülllinie wird mit zwei Unterstrichen @code{__} +notiert. Hier ein Beispiel der ersten drei Takte aus +@notation{Didos Klage}, +aus Purcells @notation{Dido and Æneas}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +Keins der bisherigen Beispiele hat bisher Wörter benutzt, die länger +als eine Silbe waren. Solche Wörter werden üblicherweise auf die +Noten aufgeteilt, eine Silbe pro Note, mit Bindestrichen zwischen +den Silben. Diese Silben werden durch zwei Minuszeichen notiert und +von LilyPond als ein zentrierter Bindestrich zwischen den Silben +gesetzt. Hier ein Beispiel, das dies und alle anderen Tricks +zeigt, mit denen Text an den Noten ausgerichtet werden kann: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +Einige Texte, besonders in italienischer Sprache, brauchen das +Gegenteil: mehr als eine Silbe muss zu einer einzelnen Note +gesetzt werden. Das ist möglich, indem die Silben durch einen +einzelnen Unterstrich @code{_} zusammengekoppelt werden. Dazwischen +dürfen sich keine Leerzeichen befinden, oder indem man die +relevanten Silben in Anführungszeichen @code{"} setzt. +Hier ein Beispiel aus dem @notation{Figaro} von Rossini, wo die Silbe +@notation{al} auf der selben Note wie @notation{go} des Wortes @notation{Largo} +in Figaros Arie @notation{Largo al factotum} gesungen werden muss. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef "bass" + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Notation von Gesang}. + + +@node Text zu mehreren Systemen +@subsection Text zu mehreren Systemen +@translationof Lyrics to multiple staves + +@cindex Gesangstext auf mehreren Systemen +@cindex Mehrere Systeme und Gesangstext + +Die einfache Lösung mit @code{\addlyrics} kann benutzt werden, um +Text zu einem oder mehreren Systemen zu setzen. Hier ein Beispiel +aus Händels @notation{Judas Maccabäus}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + +Aber Partituren, die komplizierter als dieses Beispiel sind, +werden besser notiert, indem man die Systemstruktur von den +Noten und dem Gesangstext durch Variablen trennt. Die Benutzung +von Variablen wird erklärt im Abschnitt @ref{Stücke durch Bezeichner organisieren}. + + +@seealso +Notationsreferenz: +@ruser{Notation von Gesang}. + + +@node Letzter Schliff +@section Letzter Schliff +@translationof Final touches + +Das ist das letzte Kapitel der Übung. Hier soll demonstriert werden, +wie man den letzten Schliff an einfachen Stücken anbringen kann. +Gleichzeitig dient es als Einleitung zum Rest des Handbuches. + +@menu +* Stücke durch Bezeichner organisieren:: +* Titel hinzufügen:: +* Absolute Notenbezeichnungen:: +* Nach der Übung:: +@end menu + + +@node Stücke durch Bezeichner organisieren +@subsection Stücke durch Bezeichner organisieren +@translationof Organizing pieces with variables + +@cindex Variable +@cindex Bezeichner +@cindex Makro +@cindex Variablen zuweisen +@cindex Variablen benutzen +@cindex Zuweisen von Variablen +@cindex Variable, erlaubte Zeichen +@cindex Zeichen, in Variablen erlaubt + +Wenn alle die Elemente, die angesprochen wurden, zu größeren Dateien +zusammengefügt werden, werden auch die musikalischen Ausdrücke sehr +viel größer. In polyphonen Dateien mit vielen Systemen kann das +sehr chaotisch aussehen. Das Chaos kann aber deutlich reduziert werden, +wenn @code{Variablen} definiert und verwendet werden. + +Variablen (die auch als Bezeichner oder Makros bezeichnet werden) +können einen Teil der Musik aufnehmen. Sie werden wie folgt definiert: + +@example +bezeichneteMusik = @{ @dots{} @} +@end example + +Der Inhalt des musikalischen Ausdrucks @code{bezeichneteMusik} kann +dann später wieder benutzt werden, indem man einen Backslash davor setzt +(@code{\bezeichneteMusik}), genau wie bei jedem LilyPond-Befehl. + +@c KEEP LY +@lilypond[quote,verbatim] +Geige = \new Staff + { \relative c'' { + a4 b c b + } +} +Cello = \new Staff + { \relative c { + \clef "bass" + e2 d + } +} +{ + << + \Geige + \Cello + >> +} +@end lilypond + +@noindent +In den Namen der Variablen dürfen nur Buchstaben des +Alphabets verwendet werden, keine Zahlen oder Striche. + +Variable müssen @emph{vor} dem eigentlichen musikalischen +Ausdruck definiert werden. Sie können dann aber beliebig oft +verwendet werden, nachdem sie einmal definiert worden sind. Sie +können sogar eingesetzt werden, um später in der Datei eine neue +Variable zu erstellen. Damit kann die Schreibarbeit erleichtert +werden, wenn Notengruppen sich oft wiederholen. + +@c KEEP LY +@lilypond[verbatim,quote] +trioleA = \times 2/3 { c,8 e g } +TaktA = { \trioleA \trioleA \trioleA \trioleA } + +\relative c'' { + \TaktA \TaktA +} +@end lilypond + +Man kann diese Variablen auch für viele andere Objekte +verwenden, etwa: + +@example +Breite = 4.5\cm +Name = "Tim" +aFünfPapier = \paper @{ paperheight = 21.0 \cm @} +@end example + +Abhängig vom Kontext kann solch ein Bezeichner in verschiedenen +Stellen verwendet werden. Das folgende Beispiel zeigt die +Benutzung der eben definierten Bezeichner: + +@example +\paper @{ + \aFünfPapier + line-width = \Breite +@} + +@{ + c4^\Name +@} +@end example + + + +@node Titel hinzufügen +@subsection Titel hinzufügen +@translationof Adding titles + +@cindex Titel +@cindex header +@cindex Kopf +@cindex Titelei + +@funindex \header +@funindex header + +Titel, Komponist, Opusnummern und ähnliche Information werden in +einer @code{\header}-Umgebung eingefügt. Diese Umgebung befindet sich +außerhalb der musikalischen Ausdrücke, meistens wird die +@code{\header}-Umgebung direkt nach der @ref{Versionsnummer} eingefügt. + +@example +\version @w{"@version{}"} + +\header @{ + title = "Symphony" + composer = "Ich" + opus = "Op. 9" +@} + +@{ + @dots{} Noten @dots{} +@} +@end example + +Wenn die Datei übersetzt wird, werden Titel- und Komponisteneinträge +über der Musik ausgegeben. Mehr Information über die Titelei findet +sich im Kapitel @ruser{Titel erstellen}. + + +@node Absolute Notenbezeichnungen +@subsection Absolute Notenbezeichnungen +@translationof Absolute note names + +@cindex Notenbezeichnungen +@cindex absoluter Modus +@cindex absolute Werte für Tonhöhen +@cindex Tonhöhen, absolute Werte + +Bis jetzt haben wir immer @code{\relative} benutzt, um Tonhöhen zu +bestimmen. Das ist die einfachste Eingabeweise für die meiste Musik. +Es gibt aber noch eine andere Möglichkeit, Tonhöhen darzustellen: durch +absolute Bezeichnung. + +Wenn man das @code{\relative} weglässt, werden alle Tonhöhen von LilyPond +als absolute Werte interpretiert. Ein @code{c'} ist dann also immer das +eingestrichene C, ein @code{b} ist immer das kleine h unter dem +eingestrichenen C, und ein @code{g,} ist immer das große G -- also die +Note auf der letzten Linie im Bass-Schlüssel. + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +Hier eine Tonleiter über vier Oktaven: + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +Wie leicht zu sehen ist, muss man sehr viele Apostrophe schreiben, +wenn die Melodie im Sopranschlüssel notiert ist. Siehe etwa dieses +Fragment von Mozart: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +Alle diese Apostrophe machen den Quelltext schlecht lesbar und sind +eine mögliche Fehlerquelle. Mit dem @code{\relative}-Befehl ist das Beispiel +sehr viel einfacher zu lesen: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 | + b8. cis16 b8 d4 d8 | +} +@end lilypond + +Wenn man einen Fehler durch ein Oktavierungszeichen (@code{'} +oder @code{,}) im @code{\relative}-Modus macht, ist er sehr +schnell zu finden, denn viele Noten sind nacheinander in der +falschen Oktave. Im absoluten Modus dagegen ist ein einzelner Fehler +nicht so deutlich und deshalb auch nicht so einfach zu finden. + +Trotz allem ist der absolute Modus gut für Musik mit sehr großen +Sprüngen und vor allem für computergenerierte LilyPond-Dateien. + + +@node Nach der Übung +@subsection Nach der Übung +@translationof After the tutorial + +Wenn Sie diese Übung absolviert haben, sollten Sie am +besten ein paar Stücke selber notieren. Beginnen Sie mit +den @ref{Vorlagen} und fügen Sie einfach Ihre Noten +dazu. Wenn Sie irgendetwas brauchen, das nicht in der +Übung besprochen wurde, schauen Sie sich den Abschnitt Alles + über die Notation an, angefangen mit @ruser{Musikalische Notation}. +Wenn Sie für ein Instrument oder Ensemble Noten schreiben +wollen, für das es keine Vorlage gibt, schauen Sie +sich @ref{Erweiterung der Beispiele} an. + +Wenn Sie ein paar kurze Stücke notiert haben, lesen Sie +den Rest des Handbuchs zum Lernen (Kapitel 3--5). Natürlich können +Sie auch sofort weiterlesen. Die nächsten Kapitel sind +aber mit der Annahme geschrieben, dass Sie die Eingabesprache +von LilyPond beherrschen. Sie können die weiteren Kapitel auch +überfliegen und dann darauf wieder zurückkommen, wenn +Sie einige Erfahrungen im Notieren gewonnen haben. + +In dieser Übung, genauso wie im gesamten Handbuch zum Lernen, +befindet sich ein Abschnitt @strong{Siehe auch} am Ende jedes +Abschnittes, wo sich Verweise auf andere Abschnitte befinden. +Diesen Verweisen sollten Sie nicht beim ersten Durchlesen +folgen; erst wenn Sie das gesamte Handbuch zum Lernen gelesen +haben, können Sie bei Bedarf diesen Verweisen folgen, um ein +Thema zu vertiefen. + +Bitte lesen Sie jetzt +@ref{Überblick über die Handbücher}, wenn Sie +es bisher noch nicht getan haben. Es gibt ungeheuer viel +Information über LilyPond, so dass Neulinge sich nicht sofort +zurecht finden. Wenn Sie auch nur ein paar Minuten in diesem +Abschnitt lesen, können Sie sich Stunden frustrierendes Suchen +an der falschen Stelle ersparen! + diff --git a/Documentation/de/learning/fundamental.itely b/Documentation/de/learning/fundamental.itely new file mode 100644 index 0000000000..7cdb97f2e5 --- /dev/null +++ b/Documentation/de/learning/fundamental.itely @@ -0,0 +1,3474 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + 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" +@c Translators: Till Paala, Reinhold Kainhofer + +@node Grundbegriffe +@chapter Grundbegriffe +@translationof Fundamental concepts + +Nachdem im Tutorial gezeigt wurde, wie aus einfachen Text-Dateien +wunderschön formatierte Musiknoten erzeugt werden können, stellt +dieses Kapitel die Konzepte und Techniken vor, wie auch komplexere +Partituren erstellt werden können. + +@menu +* Wie eine LilyPond-Eingabe-Datei funktioniert:: +* Voice enthält Noten:: +* Kontexte und Engraver:: +* Erweiterung der Beispiele:: +@end menu + +@node Wie eine LilyPond-Eingabe-Datei funktioniert +@section Wie eine LilyPond-Eingabe-Datei funktioniert +@translationof How LilyPond input files work + +Das LilyPond Eingabeformat hat eine ziemlich freie Form, so dass +für erfahrene Benutzer viel Freiheit besteht, die Struktur ihrer +Quelldateien anzulegen. Für Neulinge kann diese Flexibilität aber +erst einmal verwirrend sein. In diesem Kapitel soll darum ein Teil +dieser Strukturen dargestellt werden, vieles aber zur Vereinfachung +auch weggelassen werden. Für eine komplette Beschreibung des Eingabeformats +siehe @ruser{Die Dateistruktur}. + +Die meisten Beispiele in diesem Handbuch sind kleine Schnipsel, wie +etwa dieser: + +@example +c4 a b c +@end example + +Wie hoffentlich bekannt ist, lässt sich solch ein Schnipsel nicht +in dieser Form übersetzen. Diese Beispiele sind also nur Kurzformen +von wirklichen Beispielen. Sie müssen wenigstens zusätzlich in +geschweifte Klammern gesetzt werden. + +@example +@{ + c4 a b c +@} +@end example + +Die meisten Beispiele benutzen auch den @code{\relative c'}-Befehl. +Der ist nicht nötig, um die Dateien zu übersetzen, aber in den meisten +Fällen sieht der Notensatz seltsam aus, wenn man den Befehl +weglässt. + +@lilypond[quote,fragment,ragged-right,verbatim] +\relative c'' { + c4 a b c +} +@end lilypond + +Eine komplette Definition des Eingabeformats findet sich +im Kapitel @ruser{Die Dateistruktur}. + +@menu +* Einführung in die Dateistruktur von LilyPond:: +* Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck:: +* Musikalische Ausdrücke ineinander verschachteln:: +* Über die Nicht-Schachtelung von Klammern und Bindebögen:: +@end menu + +@node Einführung in die Dateistruktur von LilyPond +@subsection Einführung in die Dateistruktur von LilyPond +@translationof Introduction to the LilyPond file structure + +@cindex Eingabeformat +@cindex Dateistruktur +@cindex Struktur, Datei + +Ein grundlegendes Beispiel einer Eingabedatei für LilyPond lautet: + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...zusammengesetzter Musik-Ausdruck...} % Die gesamten Noten kommen hier hin! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Aufgrund der Flexibilität von LilyPond gibt es viele Variationen dieses +Schemas, aber dieses Beispiel dient als einfacher Ausgangspunkt. + +@funindex \book +@funindex \score +@funindex book +@funindex score +@cindex book +@cindex score + +Bisher hat noch keines der Beispiele den @code{\score@{@}}-Befehl +benutzt, da Lilypond derartige zusätzliche Befehle automatisch +bei Bedarf einfügt, wenn die Eingabedatei eine einfache Struktur +hat. + +Sehen wir uns als ein solches einfaches Beispiel an: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +Im Hintergrund kommen hier noch einige Ebenen dazu: LilyPond-Code +in der obigen Form ist in Wirklichkeit eine Abkürzung. Auch wenn man so +Dateien schreiben kann und sie auch korrekt gesetzt werden, heißt +der vollständige Code, der hier gemeint ist, eigentlich: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +@noindent +Mit anderen Worten: Wenn die Eingabedatei einen einfachen Musik-Ausdruck +enthält, wird LilyPond die Datei so interpretieren, als ob dieser +Ausdruck in den oben gezeigten Befehlen eingegeben wurde. Diese nötige +Struktur wird automatisch im Speicher beim Aufruf von LilyPond erzeugt, +ohne dass der Benutzer davon etwas bemerkt. + +@cindex Implizite Kontexte +@cindex Kontexte, implizit + +@strong{Ein Wort der Warnung ist jedoch angebracht!} Viele der Beispiele +in der Dokumentation von LilyPond lassen die @code{\new Staff} und @code{\new Voice} +Befehle zur Erzeugung einer Notenzeile und einer Stimme (beides ist in +LilyPond ein sogenannter Kontext) bewusst aus, +damit sie implizit von LilyPond im Speicher erzeugt werden. +Für einfache Dokumente funktioniert das im Allgemeinen sehr gut, für +komplexere Partituren können dadurch aber unerwartete Ergebnisse +entstehen, teilweise sogar unerwartete leere Notenzeilen. Um +die entsprechenden Kontexte in diesem Fall explizit zu erzeugen, +siehe @ref{Kontexte und Engraver}. + +@warning{Wenn mehr als ein paar Zeilen an Musik eingegeben werden, +empfiehlt es sich, die Notenzeilen und die Stimmen immer explizit +mit @code{\new Staff} und @code{\new Voice} zu erzeugen.} + +Im Moment wollen wir aber zu unserem ersten Beispiel zurückkehren und +nur den @code{\score}-Befehl näher betrachten. + +Eine Partitur (@code{\score}) muss immer mit einem musikalischen Ausdruck +beginnen. Das ist letztendlich alle Musik, angefangen bei einer +einzelnen +Note bis hin zu einer riesigen Partitur mit vielen Notensystemen +(bezeichnet hier durch @code{GrandStaff}): + +@example +@{ + \new GrandStaff << + @var{...hier die gesamte Partitur...} + >> +@} +@end example + +@noindent +Da sich alles innerhalb der geschweiften Klammern @code{@{ ... @}} +befindet, wird es wie ein einziger musikalischer Ausdruck behandelt. + + +Ein @code{\score} auch andere Dinge enthalten, wie etwa + +@example +\score @{ + @{ c'4 a b c' @} + \layout @{ @} + \midi @{ @} + \header @{ @} +@} +@end example + +@funindex \header +@funindex \layout +@funindex \midi +@funindex header +@funindex layout +@funindex midi +@cindex header +@cindex midi +@cindex Layout +@cindex Kopfzeile + +@noindent +Wie man sieht, sind die drei Befehle @code{\header}, @code{\layout} und +@code{\midi} von spezieller Natur: Im Gegensatz zu vielen Anderen Befehlen, +die auch mit einem @code{\} beginnen, liefern sie @emph{keinen} Musikausdruck +und sind auch nicht Teil eines musikalischen Ausdrucks. Daher können sie +sowohl innerhalb eines @code{\score}-Blocks als auch außerhalb plaziert +werden. Tatsächlich werden einige dieser Befehle meist außerhalb des +@code{\score}-Blocksgesetzt, zum Beispiel findet sich der @code{\header} +sehr oft oberhalb der @code{\score}-Umgebung. Das +funktioniert genauso gut. + +Zwei bisher noch nicht aufgetauchte Befehle sind +@code{\layout @{ @}} und @code{\midi @{@}}. Wenn sie in einer +Datei vorkommen, führt dies dazu, dass Lilypond eine druckfähige PDF-Datei +bzw. eine MIDI-Datei erzeugt. Genauer beschrieben werden sie im +Benutzerhandbuch -- @ruser{Partiturlayout} und +@ruser{MIDI-Dateien erstellen}. + +@cindex Partituren, mehrfache +@cindex book-Abschnitte, implizit +@cindex implizite book-Umgebung +@funindex \book +@funindex book + +Ihr LilyPond Code kann auch mehrere @code{\score}-Blöcke enthalten. +Jeder davon wird als eigenständige Partitur interpretiert, die +allerdings alle in dieselbe Ausgabedatei plaziert werden. +Ein @code{\book}-Befehl ist nicht explizit notwendig -- er wird +implizit erzeugt. Wenn jedoch für jeden @code{\score}-Block in einer +einzigen @file{.ly}-Datei eine eigene Ausgabe-Datei erzeugt werden soll, +dann muss jeder dieser Blöcke in einen eigenen @code{\book}-Block +gesetzt werden: Jeder @code{\book}-Block erzeugt dann eine +eigene Ausgabedatei. + +Zusammenfassung: + +Jeder @code{\book}-Block erzeugt eine eigene Ausgabedatei (z.B. eine +PDF-Datei). Wenn Sie keinen derartigen Block explizit angegeben haben, +setzt LilyPond den gesamten Dateiinhalt innerhalb eines einzigen +impliziten @code{\book}-Blocks. + +Jeder @code{\score}-Block beschreibt ein eigenständiges Musikstück +innerhalb des @code{\book}-Blocks. + +@cindex Layout-Umgebung, Platzierung +@cindex Platzierung von layout-Umgebung + +Jeder @code{\layout}-Block wirkt sich auf den @code{\score}- oder +@code{\book}-Block aus, in dem er auftritt. So wirkt z.B. ein +@code{\layout}-Block innerhalb eines @code{\score}-Blocks nur auf +diesen einen Block und seinen gesamten Inhalt, ein @code{\layout}-Block +außerhalb eines @code{\score}-Blocks (und daher innerhalb des implizit +erzeugten oder explizit angegebenen @code{\book}-Blocks) jedoch auf +alle @code{\score}-Blocks innerhalb dieses @code{\book}-Blocks. + +Nähere Details finden sich im Abschnitt @ruser{Mehrere Partituren in einem Buch}. + +@cindex Variablen +@cindex Bezeichner + +Eine gute Möglichkeit zur Vereinfachung sind selbst definierte Variablen, wie auch gezeigt in @ref{Stücke durch Bezeichner organisieren}. +Alle Vorlagen verwenden diese Möglichkeit: + +@example +melodie = \relative c' @{ + c4 a b c +@} + +\score @{ + @{ \melodie @} +@} +@end example + +Wenn LilyPond diese Datei analysiert, nimmt es den Inhalt +von @code{melodie} (alles nach dem Gleichheitszeichen) und +fügt ihn immer dann ein, wenn ein @code{\melodie} +vorkommt. Die Namen sind frei wählbar, die Variable kann genauso +gut @code{melodie}, @code{GLOBAL}, @code{rechteHandKlavier}, +oder @code{foofoobarbaz} heißen. +Als Variablenname kann fast jeder beliebige Name benutzt werden, +allerdings dürfen nur Buchstaben vorkommen (also keine Zahlen, Unterstriche, +Sonderzeichen, etc.) und er darf nicht wie ein LilyPond-Befehl +lauten. Für mehr Information siehe +@ref{Tipparbeit durch Variablen und Funktionen ersparen}. Die genauen +Einschränkungen sind beschrieben in @ruser{Die Dateistruktur}. + + +@seealso +Eine vollständige Definition des Eingabeformats findet sich in +@ruser{Die Dateistruktur}. + + +@node Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck +@subsection Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck +@translationof Score is a (single) compound musical expression + +@funindex \score +@funindex score +@cindex score +@cindex Partitur +@cindex Musikstück +@cindex zusammengesetzter Musikausdruck +@cindex Musikausdruck, zusammengesetzter + + +Im vorigen Kapitel, @ref{Einführung in die Dateistruktur von LilyPond}, +wurde die allgemeine Struktur einer LilyPond-Quelldatei +beschrieben. Aber anscheinend haben wir die wichtigste +Frage ausgelassen, nämlich wie man herausfindet, was nach +dem @code{\score} geschrieben werden soll. + +In Wirklichkeit ist das aber gar kein Geheimnis. Diese +Zeile ist die Antwort: + +@quotation +@emph{Eine Partitur fängt immer mit @code{\score} an, gefolgt +von einem einzelnen musikalischen Ausdruck.} +@end quotation + +@noindent +Vielleicht wollen Sie noch einmal +@ref{Musikalische Ausdrücke erklärt} überfliegen. In diesem +Kapitel wurde gezeigt, wie sich große musikalische Ausdrücke +aus kleinen Teilen zusammensetzen. Noten können zu Akkorden +verbunden werden usw. Jetzt gehen wir aber in die andere Richtung +und betrachten, wie sich ein großer musikalischer Ausdruck +zerlegen lässt. Zur Einfachheit soll nur ein Sänger und Klavier +in unserem Beispiel eingesetzt werden. Wir brauchen +keine Systemgruppe (StaffGroup), die einfach nur bewirkt, +dass die Systeme mit einer Klammer zusammengefasst werden; sie +wird also entfernt. Wir @emph{brauchen} aber einen Sänger und ein Klavier. + +@example +\score @{ + @{ + << + \new Staff = "Sänger" << + >> + \new PianoStaff = "Klavier" << + >> + >> + @} + \layout @{ @} +@} +@end example + +Hier wurden die Systeme (Staff) benannt: @qq{Sänger} und +@qq{Klavier}. Das ist nicht direkt notwendig in diesem Fall, +aber es ist gut, sich diese Schreibweise anzugewöhnen, damit man +immer sofort erkennt, um welches System es sich handelt. + +Zur Erinnerung: mit @code{<<} und @code{>>} werden Noten gleichzeitig +gesetzt. Dadurch werden Vokalstimme und Klaviersysteme übereinander +ausgegeben. Die @code{<< ... >>}-Konstruktion ist für das +Sänger-System nicht notwendig, wenn hier nur die Noten einer +einzigen Stimme eingefügt werden sollen, aber @code{<< ... >>} +anstelle von geschwungenen Klammern sind notwendig, +sobald mehr als eine Stimme oder etwa eine Notenstimme und +Gesangstext eingefügt werden sollen. In unserem Fall soll eine +Stimme mit Gesangstext notiert werden, sodass die spitzen Klammern +benötigt werden. Die Noten sollen erst später hinzugefügt werden, +hier also erstmal nur ein paar Platzhalternoten und Text. Wenn +Sie sich nicht erinnern, wie man Gesangstext notiert, lesen +Sie noch einmal @code{\addlyrics} in @ref{Setting simple songs}. + +@c KEEP LY +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "Sänger" << + \new Voice = "Singstimme" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "Klavier" << + \new Staff = "oben" { } + \new Staff = "unten" { } + >> + >> + \layout { } +} +@end lilypond + +Jetzt haben wir viel mehr Details. Wir haben ein System (engl. staff) +für einen Sänger, in dem sich wieder eine Stimme (engl. voice) +befindet. @code{Voice} bedeutet für LilyPond eine Stimme (sowohl +gesungen als auch gespielt) und evtl. zusätzlich einen Text. Zusätzlich +werden zwei Notensysteme für das Klavier mit dem Befehl @code{\new +PianoStaff} gesetzt. @code{PianoStaff} bezeichnet die Piano-Umgebung (etwa +durchgehende Taktstriche und die geschweifte Klammer am Anfang), in der +dann wiederum zwei eigene Systeme ("oben" für die rechte Hand und +"unten" +für die linke) erstellt werden, auch wenn das untere System noch +einen Bassschlüssel erhalten muss. + +Jetzt könnte man in diese Umgebung Noten einfügen. Innerhalb der +geschweiften Klammern neben @code{\new Voice = "Singstimme"} +könnte man + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +@noindent +schreiben. Aber wenn man seine Datei so direkt schreibt, wird +der @code{\score}-Abschnitt sehr lang und es wird ziemlich schwer zu +verstehen, wie alles zusammenhängt. Darum bietet es sich an, Bezeichner +(oder Variablen) zu verwenden. Sie wurden zu Beginn des vorigen +Abschnitts erklärt, erinnern Sie sich? Damit wir sicher gehen +können, dass der Inhalt der @code{text}-Variable als Gesangstext +interpretiert wird, wird ihm @code{\lyricmode} vorangesetzt. Wie +@code{\addlyrics} wird hiermit in den Eingabemodus für Gesangstext +gewechselt. Ohne diesen Befehl würde LilyPond versuchen, den Inhalt +der Variable als Noten zu interpretieren und dabei eine Menge +Fehler produzieren. (Einige andere Eingabemodi sind außerdem noch +verfügbar, siehe @ruser{Input modes}.) + +Also haben wir, wenn wir ein paar Noten und einen Bassschlüssel +für die linke Hand hinzufügen, folgendes Beispiel: + +@c KEEP LY +@lilypond[verbatim,quote,ragged-right] +melodie = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +oben = \relative c'' { 2~ } +unten = \relative c { b2 e } + +\score { + << + \new Staff = "Sänger" << + \new Voice = "Singstimme" { \melodie } + \addlyrics { \text } + >> + \new PianoStaff = "Klavier" << + \new Staff = "oben" { \oben } + \new Staff = "unten" { + \clef "bass" + \unten + } + >> + >> + \layout { } +} +@end lilypond + +Beim Schreiben (oder Lesen) einer @code{\score}-Umgebung +sollte man langsam und sorgfältig vorgehen. Am besten fängt +man mit dem größten Gebilde an und definiert dann die darin +enthaltenen kleineren der Reihe nach. Es hilft auch, sehr +genau mit den Einzügen zu sein, so dass jede Zeile, die +der gleichen Ebene angehört, wirklich horizontal an der +gleichen Stelle beginnt. + + +@seealso +Benutzerhandbuch: @ruser{Struktur einer Partitur}. + + +@node Musikalische Ausdrücke ineinander verschachteln +@subsection Musikalische Ausdrücke ineinander verschachteln +@translationof Nesting music expressions + +@cindex Notenzeilen, temporäre +@cindex Ossia +@cindex temporäre Notenzeilen + +Notenzeilen (die @q{Staff}-Kontexte) müssen nicht unbedingt gleich +zu Beginn erzeugt werden -- sie können auch zu einem späteren +Zeitpunkt eingeführt weden. Das ist vor allem nützlich, um +@rglosnamed{ossia,Ossias} zu erzeugen. Hier folgt ein kurzes Beispiel, +wie eine zusätzliche temporäre Notenzeile für nur drei Noten erzeugt +werden kann: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Wie man sieht, ist die Größe des Notenschlüssels dieselbe, wie sie +auch bei einer Schlüsseländerung auftritt -- etwas kleiner als +der Schlüssel am Beginn einer Notenzeile. Dies ist normal für +Notenschlüssel, die innerhalb einer Notenzeile gesetzt werden. + +@cindex Notenzeile, Positionierung +@cindex Positionierung einer Notenzeile + +Der Ossia-Abschnitt kann auch oberhalb der Hauptnotenzeile +gesetzt werden: + +@c KEEP LY +@lilypond[verbatim,quote,ragged-right] +\new Staff = "Hauptzeile" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"Hauptzeile" + }{ f8 f c } + >> + r4 | + } +} +@end lilypond + +Dieses Beispiel benutzt den @code{\with}-Befehl, der später noch +genauer erklärt wird. Damit kann das Standardverhalten einer +einzelnen Notenzeile geändert werden: Hier wird einfach angegeben, +dass die neue Notenzeile oberhalb der bereits existierenden Zeile +mit Namen @qq{Hauptzeile} plaziert werden soll, anstatt +standardmäßig unterhalb. + + +@seealso +Ossia werden oft ohne Notenschlüssel und Taktangabe gedruckt, meist +auch etwas kleiner als die anderen Notenzeilen. Dies ist natürlich +auch in LilyPond möglich, benötigt aber Befehle, die bisher noch +nicht vorgestellt wurden. Siehe @ref{Größe von Objekten} +und @ruser{Ossia-Systeme}. + + +@node Über die Nicht-Schachtelung von Klammern und Bindebögen +@subsection Über die Nicht-Schachtelung von Klammern und Bindebögen +@translationof On the un-nestedness of brackets and ties + +@cindex Klammern, geschachtelt +@cindex Schachtelung von Klammern +@cindex Klammer-Typen + +Sie haben bisher zahlreiche verschiedene Arten von Klammern +und Klammer-artigen Konstruktionen beim Schreiben von Musik mit +LilyPond kennengelernt. Diese folgen verschiedenen Regeln, die zu +Beginn vielleicht verwirrend wirken. Bevor die genauen Regeln +vorgestellt werden, wollen wir die diversen Klammerarten und Arten +von Klammer-artigen Konstrukten kurz rekapitulieren: + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Klammerart + @tab Funktion +@item @code{@{ .. @}} + @tab Umschließt ein sequenzielles Musiksegment +@item @code{< .. >} + @tab Umschließt die Noten eines Akkords +@item @code{<< .. >>} + @tab Umschließt parallele Musikausdrücke +@item @code{( .. )} + @tab Markiert den Beginn und das Ende eines Haltebogens +@item @code{\( .. \)} + @tab Markiert den Beginn und das Ende eines Phasierungsbogens +@item @code{[ .. ]} + @tab Markiert den Beginn und das Ende eines manuell erzeugten Balkens +@end multitable + +Zusätzlich sollten vielleicht noch einige weiter Konstruktionen +erwähnt werden, die Noten auf irgendeine Art und Weise verbinden: +Haltebögen (durch eine Tilde @code{~} markiert), +Triolen (als @code{\times x/y @{..@}} geschrieben) und +Vorschlagnoten (als @code{\grace@{..@}} notiert). + +Außerhalb von LilyPond fordert die übliche Benutzung von +Klammern, dass die entsprechenden Arten korrekt verschachtelt +werden, wie z.B. in @code{<< [ @{ ( .. ) @} ] >>}. Die +schließenden Klammern kommen dabei in der umgekehrten Reihenfolge +wie die öffnenden Klammern vor. Dies ist auch in LilyPond +ein @strong{Muss} für die drei Klammerarten, die in obiger +Tabelle mit dem Wort @q{Umschließt} beschrieben werden -- sie +müssen korrekt geschachtelt werden. +Die restlichen Klammer-artigen Konstruktionen (durch @q{Markiert} +in der Tabelle oben beschrieben), die Haltebögen und die Triolen +brauchen jedoch mit +den anderen Klammern oder Klammer-artigen Konstrukten @strong{nicht} +unbedingt korrekt geschachtelt werden. Tatsächlich sind sie auch +keine Klammern in dem Sinn, dass sie etwas umschließen, sondern +viel mehr Indikatoren, an welcher Stelle ein bestimmtes +musikalisches Objekt beginnt oder endet. + +So kann also z.B. einen Phrasierungsbogen vor einem manuellen +Balken beginn, jedoch schon vor dem Ende des Balkens enden. +Dies mag zwar musikalisch wenig Sinn ergeben, ist aber in LilyPond +auch möglich: + +@lilypond[quote,verbatim,ragged-right,relative=2] +{ g8\( a b[ c b\) a] g4 } +@end lilypond + +Im Allgemeinen können die verschiedenen Klammerarten, +Klammer-artigen Konstruktionen, Haltebögen, +Triolen und Vorschlagnoten beliebig kombiniert werden. +Das folgende Beispiel zeigt einen Balken, der in eine Triole reicht +(Zeile 1), eine Bindebogen, der ebenfalls in eine Triole +reicht (Zeile 2), einen Balken und einen Bindeboden in eine Triole, +ein Haltebogen, der über zwei Triolen läuft, sowie einen +Phrasierungsbogen, der in einer Triole beginnt (Zeilen 3 und 4). + +@lilypond[quote,verbatim,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.\) +} +@end lilypond + + +@node Voice enthält Noten +@section Voice enthält Noten +@translationof Voices contain music + +Sänger brauchen Stimmen zum Singen, und LilyPond braucht sie auch: +in der Tat sind alle Noten für alle Instrumente in einer Partitur +innerhalb von Stimmen gesetzt. Die Stimme ist das grundlegendste Prinzip +von LilyPond. + +@menu +* Ich höre Stimmen:: +* Stimmen explizit beginnen:: +* Stimmen und Text:: +@end menu + +@node Ich höre Stimmen +@subsection Ich höre Stimmen +@translationof I'm hearing Voices + +@cindex Polyphonie +@cindex Ebenen +@cindex mehrere Stimmen +@cindex Stimmen, mehrere +@cindex Voice context +@cindex context, Voice +@cindex Kontext, Stimme +@cindex Stimmenkontext +@cindex gleichzeitige Noten +@cindex Stimmen versus Akkorde +@cindex Akkorde versus Stimmen +@cindex Noten gleichzeitig + +Die grundlegendsten und innersten Ebenen ein einer LilyPond-Partitur +werden @qq{Voice context} (Stimmenkontext) oder auch nur @qq{Voice} +(Stimme) genannt. Stimmen werden in anderen Notationsprogrammen +manchmal auch als @qq{layer} (Ebene) bezeichnet. + +Tatsächlich ist die Stimmenebene die einzige, die wirklich Noten +enthalten kann. Wenn kein Stimmenkontext explizit erstellt wird, +wird er automatisch erstellt, wie am Anfang dieses Kapitels +gezeigt. Manche Instrumente wie etwa die Oboe können nur eine +Note gleichzeitig spielen. Noten für solche Instrumente sind +monophon und brauchen nur eine einzige Stimme. Instrumente, die +mehrere Noten gleichzeitig spielen können, wie das Klavier, brauchen +dagegen oft mehrere Stimmen, um die verschiedenen gleichzeitig +erklingenden Noten mit oft unterschiedlichen Rhythmen darstellen +zu können. + +Eine einzelne Stimme kann natürlich auch vielen Noten in einem Akkord +enthalten -- wann also braucht man dann mehrere Stimmen? Schauen wir +uns zuerst dieses Beispiel mit vier Akkorden an: + +@lilypond[quote,verbatim,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +Das kann ausgedrückt werden, indem man die einfachen spitzen Klammern +@code{< ... >} benützt, um Akkorde anzuzeigen. Hierfür braucht man +nur eine Stimme. Aber gesetzt der Fall das Fis sollte eigentlich +eine Achtelnote sein, gefolgt von einer Achtelnote G (als Durchgangsnote +hin zum A)? Hier haben wir also zwei Noten, die zur gleichen Zeit +beginnen, aber unterschiedliche Dauern haben: die Viertelnote D und die +Achtelnote Fis. Wie können sie notiert werden? Als Akkord kann man sie +nicht schreiben, weil alle Noten in einem Akkord die gleiche Länge besitzen +müssen. Sie können auch nicht als aufeinanderfolgende Noten geschrieben +werden, denn sie beginnen ja zur selben Zeit. In diesem Fall also brauchen +wir zwei Stimmen. + +Wie aber wird das in der LilyPond-Syntax ausgedrückt? + +@funindex << \\ >> +@funindex \\ + +Die einfachste Art, Fragmente mit mehr als einer Stimme auf einem System +zu notieren, ist, die Stimmen nacheinander (jeweils mit den Klammern +@code{@{ ... @}}) zu schreiben und dann mit den spitzen Klammern +(@code{<<...>>}) simultan zu kombinieren. Die beiden Fragmente müssen +zusätzlich noch mit zwei Backslash-Zeichen (@code{\\}) voneinander +getrennt werden, damit sie als zwei unterschiedliche Stimmen erkannt +werden. Ohne diese Trenner würden sie als eine einzige Stimme notiert +werden. Diese Technik ist besonders dann angebracht, wenn es sich bei +den Noten um hauptsächlich homophone Musik handelt, in der hier und da +polyphone Stellen vorkommen. + +So sieht es aus, wenn die Akkorde in zwei Stimmen aufgeteilt werden +und zur Durchgangsnote noch ein Bogen hinzugefügt wird: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Beachte, dass die Hälse der zweiten Stimme nun nach unten zeigen. + +Hier ein anderes Beispiel: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> +<< { a2. r4 } \\ { fis2. s4 } >> +@end lilypond + +Es ist nicht notwendig, für jeden Takt eine eigene +@code{<< \\ >>}-Konstruktion zu benutzen. Bei Musik mit nur wenigen +Noten pro Takt kann es die Quelldatei besser lesbar machen, aber +wenn in einem Takt viele Noten vorkommen, kann man die gesamten Stimmen +separat schreiben, wie hier: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + +Dieses Beispiel hat nur zwei Stimmen, aber die gleiche Konstruktion kann +angewendet werden, wenn man drei oder mehr Stimmen hat, indem man weitere +Backslash-Trenner hinzufügt. + +Die Stimmenkontexte tragen die Namen @code{"1"}, @code{"2"} usw. In jedem +dieser Kontexte wird die vertikale Ausrichtung von Hälsen, Bögen, Dynamik-Zeichen +usw. entsprechend ausgerichtet. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> | + << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | +} +@end lilypond + +Diese Stimmen sind alle getrennt von der Hauptstimme, die die Noten +außerhalb der @code{<< .. >>}-Konstruktion beinhaltet. Lassen wir es +uns die @emph{simultane Konstruktion} nennen. Bindebögen und Legatobögen +können nur Noten in der selben Stimmen miteinander verbinden und können +also somit nicht aus der simultanen Konstruktion hinausreichen. Umgekehrt +gilt, dass parallele Stimmen aus eigenen simultanen Konstruktionen auf +dem gleichen Notensystem die gleiche Stimme sind. Auch andere, mit dem +Stimmenkontext verknüpfte Eigenschaften erstrecken sich auf alle +simultanen Konstrukte. Hier das gleiche Beispiel, aber mit unterschiedlichen Farben für die Notenköpfe der unterschiedlichen Stimmen. +Beachten Sie, dass Änderungen in einer Stimme sich nicht auf die anderen +Stimmen erstrecken, aber sie sind weiterhin in der selben Stimme vorhanden, +auch noch später im Stück. Beachten Sie auch, dass übergebundene Noten +über die gleiche Stimme in zwei Konstrukten verteilt werden können, wie +hier an der blauen Dreieckstimme gezeigt. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Die Befehle @code{\voiceXXXStyle} sind vor allem dazu da, um in +pädagogischen Dokumenten wie diesem hier angewandt zu werden. +Sie verändern die Farbe des Notenkopfes, des Halses und des Balkens, und +zusätzlich die Form des Notenkopfes, damit die einzelnen Stimmen +einfach auseinander gehalten werden können. Die erste Stimme ist als +rote Raute definiert, die zweite Stimme als blaue Dreiecke, die dritte +Stimme als grüne Kreise mit Kreuz und die vierte Stimme (die hier nicht +benutzt wird) hat dunkelrote Kreuze. @code{\voiceNeutralStyle} (hier auch +nicht benutzt) macht diese Änderungen rückgängig. Später soll gezeigt +werden, wie Befehle wie diese vom Benutzer selber erstellt werden +können. Siehe auch @ref{Sichtbarkeit und Farbe von Objekten} und +@ref{Variablen für Optimierungen einsetzen}. + +@cindex Polyphonie und relativer Notationsmodus +@cindex relativer Notationsmodus und Polyphonie + +Polyphonie ändert nicht die Verhältnisse der Noten innerhalb eines +@code{\relative}-Blocks. Jede Note wird weiterhin relativ zu +der vorherigen Note errechnet, oder relativ zur ersten Note des vorigen +Akkords. So ist etwa hier + +@example +\relative c' @{ NoteA << < NoteB NoteC > \\ NoteD >> NoteE @} +@end example + +@noindent +@code{NoteB} bezüglich @code{NoteA} @* +@code{NoteC} bezüglich @code{NoteB}, nicht @code{noteA}; @* +@code{NoteD} bezüglich @code{NoteB}, nicht @code{NoteA} oder +@code{NoteC}; @* +@code{NoteE} bezüglich @code{NoteD}, nicht @code{NoteA} errechnet. + +Eine andere Möglichkeit ist, den @code{\relative}-Befehl vor jede +Stimme zu stellen. Das bietet sich an, wenn die Stimmen weit voneinander +entfernt sind. + +@example +\relative c' @{ NoteA ... @} +<< + \relative c'' @{ < NoteB NoteC > ... @} +\\ + \relative g' @{ NoteD ... @} +>> +\relative c' @{ NoteE ... @} +@end example + +Zum Schluss wollen wir die Stimmen in einem etwas komplizierteren Stück +analysieren. Hier die Noten der ersten zwei Takte von Chopins +@notation{Deux Nocturnes}, Op. 32. Dieses Beispiel soll später in diesem +und dem nächsten Kapitel benutzt werden, um verschiedene Techniken, +Notation zu erstellen, zu demonstrieren. Ignorieren Sie deshalb an diesem +Punkt alles in folgendem Code, das Ihnen seltsam vorkommt, und konzentrieren +Sie sich auf die Noten und die Stimmen. Die komplizierten Dinge werden +in späteren Abschnitten erklärt werden. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +Die Richtung der Hälse wird oft benutzt, um anzuzeigen, dass zwei +gleichzeitige Melodien sich fortsetzen. Hier zeigen die Hälse aller +oberen Noten nach oben und die Hälse aller unteren Noten nach unten. +Das ist der erste Anhaltspunkt, dass mehr als eine Stimme benötigt +wird. + +Aber die wirkliche Notwendigkeit für mehrere Stimmen tritt erst +dann auf, wenn unterschiedliche Noten gleichzeitig erklingen, aber +unterschiedliche Dauern besitzen. Schauen Sie sich die Noten +auf dem dritten Schlag im ersten Takt an. Das As ist eine punktierte +Viertel, das F ist eine Viertel und das Des eine Halbe. Sie können +nicht als Akkord geschrieben werden, denn alle Noten in einem Akkord +besitzen die gleiche Dauer. Sie können aber auch nicht nacheinander +geschrieben werden, denn sie beginnen auf der gleichen Taktzeit. Dieser +Taktabschnitt benötigt drei Stimmen, und normalerweise schreibt man +drei Stimmen für den ganzen Takt, wie im Beispiel unten zu sehen ist; +hier sind unterschiedliche Köpfe und Farben für die verschiedenen Stimmen +eingesetzt. Noch einmal: der Quellcode für dieses Beispiel wird später +erklärt werden, deshalb ignorieren Sie alles, was Sie hier nicht +verstehen können. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> + 1 +} +@end lilypond + +Versuchen wir also, diese Musik selber zu notieren. Wie wir sehen +werden, beinhaltet das einige Schwierigkeiten. Fangen wir an, wie +wir es gelernt haben, indem wir mit der @code{<< \\ >>}-Konstruktion +die drei Stimmen des ersten Taktes notieren: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des } + >> | + 1 | +} +@end lilypond + +@cindex Hals nach unten +@cindex Hals nach oben +@cindex Notenhals, Richtung +@cindex Richtung des Notenhalses +@cindex Notenhalsrichtung +@cindex Stimmen und Notenhalsrichtung +@cindex Notenhalsrichtung in Stimmen + +Die Richtung des Notenhalses wird automatisch zugewiesen; die ungeraden +Stimmen tragen Hälse nach oben, die gerade Hälse nach unten. Die Hälse +für die Stimmen 1 und 2 stimmen, aber die Hälse in der dritten Stimme +sollen in diesem Beispiel eigentlich nach unten zeigen. Wir können das +korrigieren, indem wir die dritte Stimme einfach auslassen und die +Noten in die vierte Stimme verschieben. Das wird einfach vorgenommen, +indem noch ein Paar @code{\\}-Stimmen hinzugefügt wird. + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % erste Stimme + { c2 aes4. bes8 } + \\ % zweite Stimme + { aes2 f4 fes } + \\ % Stimme drei auslassen + \\ % vierte Stimme + { 2 des } + >> + 1 +} +@end lilypond + +@noindent +Wie zu sehen ist, ändert das die Richtung der Hälse, aber zeigt ein +anderes Problem auf, auf das man manchmal bei mehreren Stimmen stößt: +Die Hälse einer Stimme können mit den Hälsen anderer Stimmen kollidieren. +LilyPond erlaubt Noten in verschiedenen Stimmen sich auf der gleichen +vertikalen Position zu befinden, wenn die Hälse in entgegengesetzte +Richtungen zeigen, und positioniert die dritte und vierte Stimme dann +so, dass Zusammenstöße möglichst vermieden werden. Das funktioniert +gewöhnlich recht gut, aber in diesem Beispiel sind die Noten der untersten +Stimme eindeutig standardmäßig schlecht positioniert. LilyPond bietet +verschiedene Möglichkeiten, die horizontale Position von Noten +anzupassen. Wir sind aber noch nicht so weit, dass wir diese Funktionen +anwenden könnten. Darum heben wir uns das Problem für einen späteren Abschnitt auf; siehe @code{force-hshift}-Eigenschaft in +@ref{Überlappende Notation in Ordnung bringen}. + + +@seealso +Notationsreferenz: @ruser{Mehrere Stimmen}. + + +@node Stimmen explizit beginnen +@subsection Stimmen explizit beginnen +@translationof Explicitly instantiating voices + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex Voice context, erstellen von +@cindex Stimmenkontexte, erstellen von + +Voice-Kontexte können auch manuell innerhalb +eines @code{<< >>}-Abschnittes initiiert werden. Mit den Befehlen +@code{\voiceOne} bis hin zu @code{\voiceFour} kann jeder Stimme +entsprechendes Verhalten von vertikaler Verschiebung und Richtung +von Hälsen und anderen Objekten hinzugefügt werden. In längeren +Partituren können die Stimmen damit besser auseinander gehalten +werden. + +Die @code{<< \\ >>}-Konstruktion, die wir im vorigen Abschnitt +verwendet haben: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +ist identisch mit + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Beide würden folgendes Notenbild erzeugen: + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex Stimmen, mehrere zu einer zusammenführen +@cindex eine Stimme wiederherstellen + +Der @code{\voiceXXX}-Befehl setzt die Richtung von Hälsen, +Bögen, Artikulationszeichen, Text, Punktierungen und Fingersätzen. +@code{\voiceOne} und @code{\voiceThree} lassen diese Objekte +nach oben zeigen, @code{\voiceTwo} und @code{\voiceFour} +dagegen lassen sie abwärts zeigen. Diese Befehle erzeugen eine +horizontale Verschiebung, wenn es erforderlich ist, um Zusammenstöße +zu vermeiden. Der Befehl +@code{\oneVoice} stellt wieder auf das normale Verhalten um. + +Schauen wir uns in einigen einfachen Beispielen an, was genau +die Befehle @code{\oneVoice}, @code{\voiceOne} und @code{voiceTwo} +mit Text, Bögen und Dynamikbezeichnung anstellen: + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +Schauen wir und nun drei unterschiedliche Arten an, den gleichen +Abschnitt polyphoner Musik zu notieren, jede Art mit ihren +Vorteilen in unterschiedlichen Situationen. Wir benutzen dabei +das Beispiel vom vorherigen Abschnitt. + +Ein Ausdruck, der direkt innerhalb einer @code{<< >>}-Umgebung +auftritt, gehört der Hauptstimme an. Das ist nützlich, wenn zusätzliche +Stimme auftreten, während die Hauptstimme sich fortsetzt. Hier also +eine bessere Version des Beispiels aus dem vorigen Abschnitt. Die +farbigen Kreuz-Notenköpfe zeigen, dass die Hauptstimme sich jetzt in +einem einzigen Stimmen (@code{voice})-Kontext befindet. Somit kann ein +Phrasierungsbogen ober sie gesetzt werden. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b4 c2 | + } + >> +} +@end lilypond + +@cindex Verschachteln von musikalischen Ausdrücken +@cindex Verschachteln von gleichzeitigen Ausdrücken +@cindex Ausdrücke, Verschachteln von +@cindex Stimmen, temporär +@cindex Stimmen, Verschachteln von +@cindex Verschachteln von Stimmen +@cindex temporäre Stimmen + +Tiefer verschachtelte polyphone Konstrukte sind möglich, und +wenn eine Stimme nur kurz auftaucht, kann das der bessere Weg +sein, Noten zu setzen: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e2) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b4 c2 | + } + >> + } + >> +} +@end lilypond + +@cindex Platzhalternoten +@cindex unsichtbare Noten +@cindex Noten verstecken + +Diese Methode, neue Stimmen kurzzeitig zu verschachteln, bietet sich +an, wenn nur sehr kleine Abschnitte polyphonisch gesetzt sind. Wenn +aber die ganze Partitur polyphon ist, ist es meistens klarer, direkt +unterschiedliche Stimmen über die gesamte Partitur hinweg einzusetzen. +Hierbei kann man mit unsichtbaren Noten dann die Stellen überspringen, +an denen die Stimme nicht auftaucht, wie etwa hier: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b c2 | + } +>> +@end lilypond + +@subsubheading Notenkolumnen + +@cindex Notenkolumne +@cindex Notenkollision +@cindex Zusammenstöße von Noten +@cindex Kollisionen von Noten +@cindex Vertikale Position +@cindex shift-Befehle +@cindex Verschieben von Noten +@funindex \shiftOff +@funindex \shiftOn +@funindex \shiftOnn +@funindex \shiftOnnn +@funindex shiftOff +@funindex shiftOn +@funindex shiftOnn +@funindex shiftOnnn + +Dicht notierte Noten in einem Akkord, oder Noten auf der gleichen +Taktzeit aber in unterschiedlichen Stimmen, werden in zwei, manchmal +auch mehreren Kolumnen gesetzt, um die Noten am Überschneiden zu +hindern. Wir bezeichnen sie als Notenkolumnen. Jede Stimme hat +eine eigene Kolumne, und ein stimmenabhängiger Verschiebunsbefehl (engl. +shift) wird eingesetzt, wenn eine Kollision auftreten könnte. +Das zeigt das Beispiel oben. Im zweiten Takt wird das C der zweiten +Stimme nach rechts verschoben, relativ gesehen zum D der ersten Stimme, +und im letzten Akkord wird das C der dritten Stimme auch nach +rechts verschoben im Verhältnis zu den anderen Stimmen. + +Die Befehle @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} und +@code{\shiftOff} bestimmen den Grad, zu dem Noten und Akkorde +verschoben werden sollen, wenn sich sonst eine Kollision nicht +vermeiden ließe. Die Standardeinstellung ist, dass die äußeren +Stimmen (also normalerweise Stimme 1 und 2) @code{\shiftOff} +eingestellt haben, während für die inneren Stimmen (3 und 4) +@code{\shiftOn} eingeschaltet ist. Wenn eine Verschiebung +auftritt, werden Stimmen 1 und 3 nach rechts und Stimmen 2 und 4 +nach links verschoben. + +@code{\shiftOnn} und @code{\shiftOnnn} definieren weitere +Verschiebungsebenen, die man kurzzeitig anwählen kann, um +Zusammenstöße in komplexen Situationen aufzulösen, siehe auch +@ref{Beispiele aus dem Leben}. + +Eine Notenkolumne kann nur eine Note (oder einen Akkord) von +einer Stimme mit Hälsen nach oben und eine Note (oder einen +Akkord) von einer Stimme mit Hälsen nach unten tragen. Wenn +Noten von zwei Stimmen mit den Hälsen in die gleiche Richtung +an der selben Stelle auftreten und in beiden Stimmen ist +keine Verschiebung oder die gleiche Verschiebungsebene +definiert, wird die Fehlermeldung +@qq{zu viele kollidierende Notenspalten werden ignoriert} +ausgegeben. + + +@seealso +Notationsreferenz: @ruser{Mehrere Stimmen}. + + +@node Stimmen und Text +@subsection Stimmen und Text +@translationof Voices and vocals + +Die Notation von Vokalmusik ihre eigene Schwierigkeit, nämlich +die Kombination von zwei Ausdrücken: den Noten und dem Text. +Achtung: Der Gesangstext wird auf Englisch @qq{lyrics} genannt. + + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics context, erstellen +@cindex Gesangtext, Verbindung mit Noten + +Wir haben schon den @code{\addlyrics@{@}}-Befehl betrachtet, +mit dem einfache Partituren gut erstellt werden können. +Diese Methode ist jedoch recht eingeschränkt. Wenn der Notensatz +komplexer wird, muss der Gesangstext mit einem neuen +@code{Lyrics}-Kontext begonnen werden (mit dem Befehl +@code{\new Lyrics}) und durch den Befehl @code{\lyricsto@{@}} +mit einer bestimmten Stimme verknüpft werden, indem die +Bezeichnung der Stimme benutzt wird. + +@lilypond[quote,verbatim] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +Beachten Sie, dass der Notentext nur mit einem @code{Voice}-Kontext +verknüpft werden kann, nicht mit einem @code{Staff}-Kontext. +In diesem Fall also müssen Sie ein System (@code{Staff}) und +eine Stimme (@code{Voice}) explizit erstellen, damit alles +funktioniert. + +@cindex Gesangstext und Balken +@cindex Text und Balken +@cindex Balken und Text +@funindex \autoBeamOff +@funindex autoBeamOff + +Die automatischen Balken, die LilyPond in der Standardeinstellung +setzt, eignen sich sehr gut für instrumentale Musik, aber nicht +so gut für Musik mit Text, wo man entweder gar keine Balken +benutzt oder sie einsetzt, um Melismen zu verdeutlichen. +Im Beispiel oben wird deshalb der Befehl @code{\autoBeamOff} +eingesetzt um die automatischen Balken (engl. beam) auszuschalten. + +@funindex \new ChoirStaff +@funindex \lyricmode +@funindex ChoirStaff +@funindex lyricmode +@cindex Vokalpartitur, Aufbau +@cindex Chorpartitur, Aufbau + +Wir wollen das frühere Beispiel von @notation{Judas Maccabæus} +benutzen, um diese flexiblere Technik für Gesangstexte +zu illustrieren. Das Beispiel wurde so umgeformt, dass jetzt +Variablen eingesetzt werden, um den Text und die Noten +von der Partiturstruktur zu trennen. Es wurde zusätzlich +eine Chorpartiturklammer hinzugefügt. Der Gesangtext muss mit +@code{\lyricmode} eingegeben werden, damit er als Text und +nicht als Noten interpretiert werden kann. + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +Dies ist die Grundstruktur für alle Chorpartituren. Mehr +Systeme können hinzugefügt werden, wenn sie gebraucht werden, mehr +Stimmen können zu jedem System hinzugefügt werden, mehr +Strophen können zum Text hinzugefügt werden, und schließlich +können die Variablen schnell in eine eigene Datei verschoben +werden, wenn sie zu lang werden sollten. + +@cindex Choralnotation +@cindex Hymnus-Notation +@cindex SATB-Partitur +@cindex mehrere Strophen +@cindex Strophen, mehrere +@cindex Choral mit mehreren Strophen + +Hier ein Beispiel der ersten Zeile eines Chorals mit vier +Strophen für gemischten Chor. In diesem Fall ist der Text +für alle vier Stimmen identisch. Beachten Sie, wie die +Variablen eingesetzt werden, um Inhalt (Noten und Text) und Form +(die Partitur) voneinander zu trennen. Eine Variable wurde +eingesetzt, um die Elemente, die auf beiden Systemen auftauchen, +aufzunehmen, nämlich Taktart und Tonart. Solch eine +Variable wird oft auch mit @qq{global} bezeichnet. + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@seealso +Notation Reference: @ruser{Notation von Gesang}. + + +@node Kontexte und Engraver +@section Kontexte und Engraver +@translationof Contexts and engravers + +Kontexte und Engraver (@qq{Stempel}) sind in den vorherigen +Abschnitten schon aufgetaucht; hier wollen wir uns ihnen +nun etwas ausführlicher widmen, denn sie sind sehr +wichtig, um Feineinstellungen in der LilyPond-Notenausgabe +vornehmen zu können. + +@menu +* Was sind Kontexte?:: +* Kontexte erstellen:: +* Was sind Engraver?:: +* Kontexteigenschaften verändern:: +* Engraver hinzufügen und entfernen:: +@end menu + +@node Was sind Kontexte? +@subsection Was sind Kontexte? +@translationof Contexts explained + +@cindex Kontexte erklärt + +Wenn Noten gesetzt werden, müssen viele Elemente zu der Notenausgabe +hinzugefügt werden, +die im Quellcode gar nicht explizit vorkommen. Vergleichen Sie +etwa den Quellcode und die Notenausgabe des folgenden Beispiels: + +@lilypond[quote,verbatim,relative=2] +cis4 cis2. | a4 a2. | +@end lilypond + +Der Quellcode ist sehr kurz und knapp, während in der +Notenausgabe Taktlinien, Vorzeichen, ein Schlüssel und +eine Taktart hinzugefügt wurden. Während LilyPond +den Eingabetext @emph{interpretiert}, wird die +musikalische Information von rechts nach links gelesen, +in etwa, wie man eine Partitur von links nach +rechts liest. Während das Programm den Code liest, +merkt es sich, wo sich Taktgrenzen befinden und +für welche Tonhöhen Versetzungszeichen gesetzt werden +müssen. Diese Information muss auf mehreren Ebenen +gehandhabt werden, denn Versetzungszeichen etwa +beziehen sich nur auf ein System, Taktlinien dagegen +üblicherweise auf die gesamte Partitur. + +Innerhalb von LilyPond sind diese Regeln und +Informationshappen in @emph{Kontexten} (engl. +contexts) gruppiert. Der @code{Voice} (Stimmen)-Kontext +wurde schon vorgestellt. Daneben +gibt es noch die @code{Staff} (Notensystem-) und +@code{Score} (Partitur)-Kontexte. Kontexte sind +hierarchisch geschichtet um die hierarchische +Struktur einer Partitur zu spiegeln. Ein @code{Staff}-Kontext +kann zum Beispiel viele @code{Voice}-Kontexte beinhalten, +und ein @code{Score}-Kontext kann viele +@code{Staff}-Kontexte beinhalten. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Jeder Kontext hat die Aufgabe, bestimmte Notationsregeln +zu erzwingen, bestimmte Notationsobjekte zu erstellen und +verbundene Elemente zu ordnen. Der @code{Voice}-Kontext +zum Beispiel kann eine Vorzeichenregel einführen und der +@code{Staff}-Kontext hält diese Regel dann aufrecht, um +einzuordnen, ob ein Versetzungszeichen gesetzt werden +muss oder nicht. + +Ein anderes Beispiel: die Synchronisation der Taktlinien ist +standardmäßig im @code{Score}-Kontext verankert. Manchmal sollen +die Systeme einer Partitur aber unterschiedliche Taktarten +enthalten, etwa in einer polymetrischen Partitur mit +4/4- und 3/4-Takt. In diesem Fall müssen also die Standardeinstellungen +der @code{Score}- und @code{Staff}-Kontexte verändert werden. + +In einfachen Partituren werden die Kontexte implizit erstellt, +und es kann sein, dass Sie sich dessen gar nicht bewusst sind. +Für etwas größere Projekte, etwa mit vielen Systemen, müssen +die Kontexte aber explizit erstellt werden, um sicher zu gehen, +dass man auch wirklich die erwünschte Zahl an Systemen in der +richtigen Reihenfolge erhält. Wenn Stücke mit spezialisierter +Notation gesetzt werden sollen, ist es üblich, die existierenden +Kontexte zu verändern oder gar gänzlich neue zu definieren. + +Zusätzlich zu den @code{Score,} @code{Staff} und +@code{Voice}-Kontexten gibt es noch Kontexte, die zwischen +der Partitur- und Systemebene liegen und Gruppen von Systemen +kontrollieren. Das sind beispielsweise der +@code{PianoStaff} und @code{ChoirStaff}-Kontext. Es gibt zusätzlich +alternative Kontexte für Systeme und Stimmen sowie eigene Kontexte +für Gesangstexte, Perkussion, Griffsymbole, Generalbass usw. + +Die Bezeichnungen all dieser Kontexte werden von einem oder mehreren +englischen +Wörtern gebildet, dabei wird jedes Wort mit einem Großbuchstaben +begonnen und direkt an das folgende ohne Bindestrich oder Unterstrich +angeschlossen, etwa +@code{GregorianTranscriptionStaff}. + + +@seealso +Notationreferenz: @ruser{Was sind Kontexte?}. + + +@node Kontexte erstellen +@subsection Kontexte erstellen +@translationof Creating contexts + +@funindex \new +@funindex new +@cindex Neue Kontexte +@cindex Erstellen von Kontexten +@cindex Kontexte, Erstellen + +In einer Eingabedatei enthält eine @code{Score}-Umgebung (einen +Kontext), die mit +dem Befehl @code{\score} eingeleitet wird, nur einen einzigen +musikalischen Ausdruck und mit ihm verknüpft eine Ausgabedefinition +(entweder eine @code{\layout}- oder eine @code{\midi}-Umgebung). +Üblicherweise wird der @code{Score}-Kontext automatisch von +LilyPond erstellt, wenn der musikalische Ausdruck interpretiert +wird. + +Wenn nur ein System vorhanden ist, kann man es ruhig +LilyPond überlassen, auch die @code{Voice}- und @code{Staff}-Kontexte +zu erstellen, aber für komplexere Partituren ist es notwendig, +sie mit einem Befehl zu erstellen. Der einfachste Befehl +hierzu ist @code{\new}. Er wird dem musikalischen Ausdruck +vorangestellt, etwa so: + +@example +\new @var{Typ} @var{musikalischer Ausdruck} +@end example + +@noindent +wobei @var{Typ} eine Kontextbezeichnung (wie etwa @code{Staff} oder +@code{Voice}) ist. Dieser Befehl erstellt einen neuen Kontext und +beginnt, den @var{muskalischen Ausdruck} innerhalb dieses +Kontexts auszuwerten. + +@warning{Der @bs{}@code{new Score}-Befehl sollte nicht benutzt werden, +weil der Partitur-(Score)-Kontext der obersten Ebene +normalerweise automatisch erstellt wird, wenn der musikalische Ausdruck +innerhalb der @code{\score}-Umgebung interpretiert wird. Standard-Werte +von Kontexteigenschaften, die für einen bestimmten @code{Score} gelten +sollen, können innerhalb der @bs{}@code{layout}-Umgebung definiert werden. +Siehe @ref{Kontexteigenschaften verändern}.} + +Wir haben schon viele explizite Beispiel gesehen, in denen +neue @code{Staff}- und @code{Voice}-Kontexte erstellt wurden, aber +um noch einmal ins Gedächtnis zu rufen, wie diese Befehle benutzt +werden, hier ein kommentiertes Beispiel aus dem richtigen Leben: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \clef "treble" + \key g \minor + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. + d4 ees16 c8. + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \clef "bass" + \key g \minor + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, + g8 ees, + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees + g4 ees + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Beachten Sie, dass wir hier alle Zeilen, die eine neue +Umgebung entweder mit einer geschweiften Klammer (@code{@{}) +oder doppelten spitzen Klammern (@code{<<}) öffnen, mit +jeweils zwei Leerzeichen, und die entsprechenden +schließenden Klammern mit der gleichen Anzahl Leerzeichen +eingerückt werden. Dies ist nicht erforderlich, es wird aber +zu einem großen Teil die nicht passenden Klammerpaar-Fehler +eliminieren und ist darum sehr empfohlen. Es macht es +möglich, die Struktur einer Partitur auf einen Blick zu +verstehen, und alle nicht passenden Klammern +erschließen sich schnell. Beachten Sie auch, dass das +untere Notensystem mit eckigen Klammern erstellt wird, +denn innerhalb dieses Systems brauchen wir zwei Stimmen, +um die Noten darzustellen. Das obere System braucht +nur einen einzigen musikalischen Ausdruck und ist deshalb +von geschweiften Klammern umschlossen.) + +@cindex Kontexte, Benennung +@cindex Benennung von Kontexten + +Der @code{\new}-Befehl kann einem Kontext auch einen +Namen zur Identifikation geben, um ihn von anderen Kontexten des +selben Typs zu unterscheiden: + +@example +\new @var{Typ} = @var{Name} @var{musikalischer Ausdruck} +@end example + +Beachten Sie den Unterschied zwischen der Bezeichnung des +Kontexttyps (@code{Staff}, @code{Voice}, usw.) und dem +Namen, der aus beliebigen Buchstaben bestehen kann +und vom Benutzer frei erfunden werden kann. Zahlen und +Leerzeichen können auch benutzt werden, in dem Fall +muss der Name aber von doppelten Anführungszeichen +umgeben werden, also etwa +@code{\new Staff = "Mein System 1" @var{musikalischer Ausdruck}}. +Der Name wird +benutzt, um später auf genau diesen spezifischen Kontext +zu verweisen. Dieses Vorgehen wurde schon in dem Abschnitt +zu Gesangstexten angewandt, siehe @ref{Stimmen und Text}. + + +@seealso +Notationsreferenz: @ruser{Kontexte erstellen}. + + +@node Was sind Engraver? +@subsection Was sind Engraver? +@translationof Engravers explained + +@cindex Engraver +@cindex Stempel (Engraver) + +Jedes Zeichen des fertigen Notensatzes von LilyPond wird +von einem @code{Engraver} (Stempel) produziert. Es gibt +also einen Engraver, der die Systeme erstellt, einen, der die +Notenköpfe ausgibt, einen für die Hälse, einen für die +Balken usw. Insgesamt gibt es über 120 Engraver! Zum +Glück braucht man für die meisten Partituren nur ein +paar Engraver, und für einfache Partituren muss man eigentlich +überhaupt nichts über sie wissen. + +Engraver leben und wirken aus den Kontexten heraus. Engraver +wie der @code{Metronome_mark_engraver}, dessen Aktion +und Ausgabe sich auf die gesamte Partitur bezieht, wirken +in der obersten Kontextebene -- dem @code{Score}-Kontext. + +Der @code{Clef_engraver} (Schlüssel-Stempel) und der +@code{Key_engraver} (Vorzeichen-Stempel) finden sich in +jedem @code{Staff}-Kontext, denn unterschiedliche Systeme +könnten unterschiedliche Tonarten und Notenschlüssel +brauchen. + +Der @code{Note_heads_engraver} (Notenkopf-Stempel) und der +@code{Stem_engraver} (Hals-Stempel) befinden sich in jedem +@code{Voice}-Kontext, der untersten Kontextebene. + +Jeder Engraver bearbeitet die bestimmten Objekte, die mit +seiner Funktion assoziiert sind, und verwaltet die Eigenschaften +dieser Funktion. Diese Eigenschaften, wie etwa die Eigenschaften, +die mit Kontexten assoziiert sind, können verändert werden, +um die Wirkungsweise des Engravers oder das Erscheinungsbild +der von ihm produzierten Elemente in der Partitur zu ändern. + +Alle Engraver haben zusammengesetzte Bezeichnung, die aus +den (englischen) Wörtern ihrer Funktionsweise bestehen. Nur +das erste Wort hat einen Großbuchstaben, und die restlichen +Wörter werden mit einem Unterstrich angefügt. Ein +@code{Staff_symbol_engraver} verantwortet also die Erstellung +der Notenlinien, ein @code{Clef_engraver} entscheidet über die +Art der Notenschlüssel und setzt die entsprechenden Symbole; damit +wird gleichzeitig die Referenztonhöhe auf dem Notensystem festgelegt. + +Hier die meistgebräuchlichen Engraver mit ihrer Funktion. +Sie werden sehen, dass es mit etwas Englischkenntnissen +einfach ist, die Funktion eines Engravers von seiner Bezeichnung +abzuleiten. + +@multitable @columnfractions .3 .7 +@headitem Engraver + @tab Funktion +@item Accidental_engraver + @tab Erstellt Versetzungszeichen, vorgeschlagene und Warnversetzungszeichen. +@item Beam_engraver + @tab Erstellt Balken. +@item Clef_engraver + @tab Erstellt Notenschlüssel. +@item Completion_heads_engraver + @tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen. +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Erstellt Dynamik-Klammern und Dynamik-Texte. +@item Forbid_line_break_engraver + @tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist. +@item Key_engraver + @tab Erstellt die Vorzeichen. +@item Metronome_mark_engraver + @tab Erstellt Metronom-Bezeichnungen. +@item Note_heads_engraver + @tab Erstellt Notenköpfe. +@item Rest_engraver + @tab Erstellt Pausen. +@item Staff_symbol_engraver + @tab Ersetllt die (standardmäßig) fünf Notenlinien des Systems. +@item Stem_engraver + @tab Erstellt die Notenhälse und Tremolos mit einem Hals. +@item Time_signature_engraver + @tab Erstellt die Taktartbezeichnung. +@end multitable + +@smallspace + +Es soll später gezeigt werden, wie die LilyPond-Ausgabe +verändert werden kann, indem die Wirkungsweise der +Engraver beeinflusst wird. + + +@seealso +Referenz der Interna: @rinternals{Engravers and Performers}. + + +@node Kontexteigenschaften verändern +@subsection Kontexteigenschaften verändern +@translationof Modifying context properties + +@cindex Kontext-Eigenschaften, Verändern +@cindex Eigenschaften von Kontexten +@cindex Verändern von Kontext-Eigenschaften +@funindex \set +@funindex \unset +@funindex set +@funindex unset + +Kontexte sind dafür verantwortlich, die Werte bestimmter +Kontext-@emph{Eigenschaften} zu speichern. Viele davon +können verändert werden, um die Interpretation der +Eingabe zu beeinflussen und die Ausgabe zu verändern. +Kontexte werden mit dem @code{\set}-Befehl geändert. +Er wird in Form + +@example +\set @var{KontextBezeichnung}.@var{eigenschaftsBezeichnung} = #@var{Wert} +@end example + +@noindent +verwendet, wobei @var{KontextBezeichnung} üblicherweise +@code{Score}, +@code{Staff} oder @code{Voice} ist. Der erste Teil kann auch +ausgelassen werden; in diesem Fall wird der aktuelle +Kontext (üblicherweise @code{Voice}) eingesetzt. + +Die Bezeichnung von Kontexten-Eigenschaften besteht +aus zwei Wörtern, die ohne Unterstrich oder Bindestrich +verbunden sind. Alle außer dem ersten werden am Anfang +groß geschrieben. Hier einige Beispiele der gebräuchlichsten +Kontext-Eigenschaften. Es gibt sehr viel mehr. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem eigenschaftsBezeichnung + @tab Typ + @tab Funktion + @tab Beispiel-Wert +@item extraNatural + @tab boolescher Wert + @tab Wenn wahr, werden zusätzliche Auflösungszeichen vor Versetzungszeichen gesetzt. + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Integer + @tab Setzt die aktuelle Taktnummer. + @tab @code{50} +@item doubleSlurs + @tab boolescher Wert + @tab Wenn wahr, werden Legatobögen über und unter die Noten gesetzt. + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Text + @tab Setzt die Instrumentenbezeichnung am Anfang eines Systems. + @tab @code{"Cello I"} +@item fontSize + @tab reale Zahl + @tab Vergrößert oder verkleinert die Schriftgröße. + @tab @code{2.4} +@item stanza + @tab Text + @tab Setzt den Text zu Beginn einer Strophe. + @tab @code{"2"} +@end multitable + +@noindent +Ein boolescher Wert ist entweder wahr (@code{#t}) +oder falsch (@code{#f}), +ein Integer eine positive ganze Zahl, ein Real (reelle Zahl) eine positive +oder negative Dezimalzahl, und Text wird in doppelte +Anführungszeichen (Shift+2) eingeschlossen. Beachten Sie +das Vorkommen des Rautenzeichens +(@code{#}) an unterschiedlichen Stellen: als Teil eines +booleschen Wertes vor dem @code{t} oder @code{f}, aber +auch vor einem @emph{Wert} in der +@code{\set}-Befehlskette. Wenn ein boolescher Wert +eingegeben werden soll, braucht man also zwei +Rautenzeichen, z. B. @code{##t}. + +@cindex Eigenschaften in Kontexten +@cindex Veränderung von Eigenschaften in Kontexten + +Bevor eine Eigenschaft geändert werden kann, muss man wissen, +in welchem Kontext sie sich befindet. Manchmal versteht das +sich von selbst, aber in einigen Fällen kann es zunächst +unverständlich erscheinen. Wenn der falsche Kontext angegeben +wird, wird keine Fehlermeldung produziert, aber die +Veränderung wird einfach nicht ausgeführt. +@code{instrumentName} befindet sich offensichtlich innerhalb +von einem @code{Staff}-Kontext, denn das Notensystem soll +benannt werden. In dem folgenden Beispiel erhält das erste +System korrekt die Instrumentenbezeichnung, das zweite aber +nicht, weil der Kontext ausgelassen wurde. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c2 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d2 d + } +>> +@end lilypond + +Denken Sie daran, dass der Standardkontext @code{Voice} ist; in dem +zweiten @code{\set}-Befehl wird also die Eigenschaft @code{instrumentName} +im @code{Voice}-Kontext auf @qq{Alto}, gesetzt, aber weil LilyPond diese +Eigenschaft nicht im @code{Voice}-Kontext vermutet, passiert einfach +gar nichts. Das ist kein Fehler, und darum wird auch keine Fehlermeldung +produziert. + +Ebenso gibt es keine Fehlermeldung, wenn die Kontext-Bezeichnung +falsch geschrieben wird und die Änderung also nicht ausgeführt werden +kann. Tatsächlich kann eine beliebige (ausgedachte) Kontextbezeichnung +mit dem @code{\set}-Befehl eingesetzt werden, genauso wie die, die +wirklich existieren. Aber wenn LilyPond diese Bezeichnung nicht +zuordnen kann, bewirkt der Befehl einfach gar nichts. Manche Editoren, +die Unterstützung für LilyPond-Befehle mitbringen, markieren existierende +Kontextbezeichnungen mit einem Punkt, wenn man mit der Maus darüber +fährt (wie etwa JEdit mit dem LilyPondTool), oder markieren +unbekannte Bezeichnungen anders (wie ConTEXT). Wenn Sie keinen +Editor mit LilyPond-Unterstützung einsetzen, wird empfohlen, die +Bezeichnungen in der Interna-Referenz zu überprüfen: siehe +@rinternals{Tunable context properties}, oder +@rinternals{Contexts}. + +Die Eigenschaft @code{instrumentName} wird erst aktiv, wenn sie +in einem @code{Staff}-Kontext gesetzt wird, aber manche Eigenschaften +können in mehr als einem Kontext benutzt werden. Als Beispiel mag die +@code{extraNatural}-Eigenschaft dienen, die zusätzliche Erniedrigungszeichen +setzt. Die Standardeinstellung ist ##t (wahr) in allen Systemen. +Wenn sie nur in einem @code{Staff} (Notensystem) auf ##f (falsch) +gesetzt wird, wirkt sie sich auf alle Noten in diesem System aus. Wird +sie dagegen in der @code{Score}-Umgebung gesetzt, wirkt sich das +auf alle darin enthaltenen Systeme aus. + +Das also bewirkt, dass die zusätzlichen Erniedrigungszeichen in einem System +ausgeschaltet sind: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +während das dazu dient, sie in allen Systemen auszuschalten: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +Ein anderes Beispiel ist die Eigenschaft @code{clefOctavation}: +wenn sie im @code{Score}-Kontext gesetzt wird, ändert sich sofort +der Wert der Oktavierung in allen aktuellen Systemen und wird +auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt. + +Der gegenteilige Befehl, @code{\unset}, entfernt die Eigenschaft +effektiv wieder von dem Kontext: in den meisten Fällen wird der +Kontext auf ihre Standardeinstellungen zurückgesetzt. +Normalerweise wird aber @code{\unset} nicht benötigt, +denn ein neues @code{\set} erledigt alles, was man braucht. + +Die @code{\set}- und @code{\unset}-Befehle könne überall im +Eingabequelltext erscheinen und werden aktiv von dem Moment, an +dem sie auftreten bis zum Ende der Partitur oder bis die Eigenschaft +mit @code{\set} oder @code{\unset} neu gesetzt wird. Versuchen +wir als Beispiel, die Schriftgröße mehrmals zu ändern, was sich unter anderem +auf die Notenköpfe auswirkt. Die Änderung bezieht sich immer auf den Standard, +nicht vom letzten gesetzten Wert. + +@lilypond[quote,verbatim,ragged-right,relative=1] +c4 d +% make note heads smaller +\set fontSize = #-4 +e4 f | +% make note heads larger +\set fontSize = #2.5 +g4 a +% return to default size +\unset fontSize +b4 c | +@end lilypond + +Wir haben jetzt gesehen, wie sich die Werte von unterschiedlichen +Eigenschaften ändern lassen. Beachten Sie, dass Integer und +Zahlen immer mit einem Rautenzeichen beginnen, während +die Werte wahr und falsch (mit @code{##t} und @code{##f} +notiert) immer mit zwei Rauten beginnen. Eine Eigenschaft, die +aus Text besteht, muss in doppelte Anführungsstriche gesetzt werden, +auch wenn wir später sehen werden, dass Text auf eine sehr viel +allgemeinere und mächtigere Art mit dem @code{\markup}-Befehl +eingegeben werden kann. + +@subsubheading Kontexteigenschaften mit @code{\with} setzen + +@funindex \with +@funindex with +@cindex Kontexteigenschaft, setzen mit \with + +Die Standardwerte von Kontexteigenschaften können zu dem Zeitpunkt +definiert werden, an welchem der Kontext erstellt wird. Manchmal +ist das eine saubere Weise, eine Eigenschaft zu bestimmen, die für +die gesamte Partitur erhalten bleichen soll. Wenn ein Kontext mit +einem @code{\new}-Befehl erstellt wird, können in einer +direkt folgenden @code{\with @{ .. @}}-Umgebung die Eigenschaften +bestimmt werden. Wenn also die zusätzlichen +Auflösungszeichen für eine ganze Partitur gelten sollen, könnte +man schreiben: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +etwa so: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff + \relative c'' { + gis4 ges aes ais + } + \new Staff \with { extraNatural = ##f } { + \relative c'' { + gis ges aes ais + } + } +>> +@end lilypond + +Eigenschaften, die auf diese Arte gesetzt werden, können immer noch +dynamisch mit dem @code{\set}-Befehl geändert werden und mit +@code{\unset} auf ihre Standardeinstellungen zurückgesetzt werden, +wie sie vorher in der @code{\with}-Umgebung definiert wurden. + +@cindex Schriftgröße, Standardeinstellung +@cindex fontSize (Schriftgröße), Standardeinstellung + +Wenn also die @code{fontSize}-Eigenschaft in einer @code{\with}-Umgebung +definiert wird, wird der Standardwert für die Schriftgröße +festgelegt. Wenn dieser Wert später mit @code{\set} verändert +wird, kann dieser neue Standardwert mit dem Befehl +@code{\unset fontSize} wieder erreicht werden. + +@subsubheading Kontexteigenschaften mit @code{\context} setzen + +@cindex Kontexteigenschaften, mit \context setzen +@cindex Eigenschaften von Kontexten, mit \context setzen +@funindex \context +@funindex context + +Die Werte von Kontext-Eigenschaften können in @emph{allen} Kontexten +eines bestimmten Typs (etwa alle @code{Staff}-Kontexte) +gleichzeitig mit einem Befehl gesetzt werden. Der Kontext wird +spezifiziert, indem seine Bezeichnung benutzt wird, also etwa +@code{Staff}, mit einem Backslash davor: @code{\Staff}. Der Befehl +für die Eigenschaft ist der gleiche, wie er auch in der +@code{\with}-Konstruktion benutzt wird, wie oben gezeigt. Er wird in +eine @code{\context}-Umgebung eingebettet, welche wiederum innerhalb +von einer @code{\layout}-Umgebung steht. Jede @code{\context}-Umgebung +wirkt sich auf alle Kontexte dieses Types aus, welche sich in der +aktuellen Partitur befinden (d. h. innerhalb einer @code{\score}- +oder @code{\book}-Umgebung). Hier ist ein Beispiel, wie man diese +Funktion anwendet: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond + +Wenn die Veränderung der Eigenschaft sich auf alle Systeme einer +@code{score}-Umgebung beziehen soll: + +@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 +Kontext-Eigenschaften, die auf diese Weise gesetzt werden, können für +bestimmten Kontexte überschrieben werden, indem die +@code{\with}-Konstruktion eingesetzt wird, oder mit @code{\set}-Befehlen +innerhalb der aktuellen Noten. + + +@seealso +Notationsreferenz: +@ruser{Die Standardeinstellungen von Kontexten ändern}, +@ruser{Der set-Befehl}. + +Referenz der Interna: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Engraver hinzufügen und entfernen +@subsection Engraver hinzufügen und entfernen +@translationof Adding and removing engravers + +@cindex Engraver, Hinzufügen von +@cindex Engraver, Entfernen von +@cindex Hinzufügen von Engravern +@cindex Entfernen von Engravern + +@funindex \consists +@funindex \remove +@funindex consists +@funindex remove + +Wir haben gesehen, dass jeder Kontext eine Anzahl an Engravern +(Stempeln) beinhaltet, von denen ein jeder einen bestimmten +Teil des fertigen Notensatzes produziert, wie z. B. Taktlinien, +Notenlinien, Notenköpfe, Hälse usw. Wenn ein Engraver aus +einem Kontext entfernt wird, kann er seine Objekte nicht +länger produzieren. Das ist eine eher grobe Methode, die +Notenausgabe zu beeinflussen, aber es kann von großem +Nutzen sein. + + +@subsubheading Einen einzelnen Kontext verändern + +Um einen Engraver von einem einzelnen Kontext zu entfernen, +wir der @code{\with}-Befehl eingesetzt, direkt hinter +den Befehl zur Kontext-Erstellung geschrieben, wie +in dem vorigen Abschnitt gezeigt. + +Als ein Beispiel wollen wir das Beispiel aus dem letzten +Abschnitt produzieren, aber die Notenlinien entfernen. Erinnern +Sie sich, dass die Notenlinien vom @code{Staff_symbol_engraver} +erstellt werden. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % make note heads smaller + e4 f | + \set fontSize = #2.5 % make note heads larger + g4 a + \unset fontSize % return to default size + b4 c | +} +@end lilypond + +@cindex Ambitus-Engraver + +Engraver können auch zu einem bestimmten +Kontext hinzugefügt werden. Dies geschieht +mit dem Befehl + +@code{\consists @var{Engraver_bezeichnung}} + +@noindent +welcher auch wieder innerhalb der @code{\with}-Umgebung +gesetzt wird. Einige Chorpartituren zeigen einen +Ambitus direkt zu Beginn der ersten Notenzeile, um +den Stimmumfang des Stückes anzuzeigen, siehe auch +@rglos{ambitus}. Der Ambitus wird vom +@code{Ambitus_engraver} erstellt, der normalerweise +in keinem Kontext enthalten ist. Wenn wir +ihn zum @code{Voice}-Kontext hinzufügen, errechnet +er automatisch den Stimmumfang für diese einzelne Stimme +und zeigt ihn an: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +wenn wir den Ambitus-Engraver allerdings zum +@code{Staff}-Kontext hinzufügen, wird der Stimmumfang aller +Stimmen in diesem Notensystem errechnet: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + + +@subsubheading Alle Kontexte des gleichen Typs verändern + +@funindex \layout + +Die vorigen Beispiele zeigen, wie man Engraver in einem +bestimmten Kontext hinzufügen oder entfernen kann. Es ist +auch möglich, Engraver in jedem Kontext eines bestimmten +Typs hinzuzufügen oder zu entfernen. Dazu werden die +Befehle in dem entsprechenden Kontext in einer +@code{\layout}-Umgebung gesetzt. Wenn wir also z. B. +den Ambitus für jedes Notensystem in einer Partitur +mit vier Systemen anzeigen wollen, könnte das so aussehen: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +Die Werte der Kontext-Eigenschaften können auch für +alle Kontexte eines bestimmten Typs auf die gleiche +Weise geändert werden, indem der @code{\set}-Befehl in +einer @code{\context}-Umgebung angewendet wird. + + +@seealso +Notationsreferenz: @ruser{Umgebungs-Plugins verändern}, +@ruser{Die Standardeinstellungen von Kontexten ändern}. + +@knownissues +Die @code{Stem_engraver} und @code{Beam_engraver} fügen ihre +Objekte an Notenköpfe an. Wenn der @code{Note_heads_engraver} +entfernt wird, werden keine Notenköpfe erstellt und demzufolge auch keine +Hälse oder Bögen dargestellt. + + +@node Erweiterung der Beispiele +@section Erweiterung der Beispiele +@translationof Extending the templates + +Sie haben sich durch die Übung gearbeitet, Sie +wissen jetzt, wie Sie Notensatz produzieren, und Sie +haben die grundlegenden Konzepte verstanden. Aber wie +erhalten Sie genau die Systeme, die Sie brauchen? Es +gibt eine ganze Anzahl an fertigen Vorlagen +(siehe @ref{Vorlagen}), mit denen Sie beginnen +können. Aber was, wenn Sie nicht genau das finden, +was Sie brauchen? Lesen Sie weiter. + +@menu +* Sopran und Cello:: +* Vierstimmige SATB-Partitur:: +* Eine Partitur von Grund auf erstellen:: +* Tipparbeit durch Variablen und Funktionen ersparen:: +* Partitur und Stimmen:: +@end menu + + +@node Sopran und Cello +@subsection Sopran und Cello +@translationof Soprano and cello + +@cindex Template, Verändern von +@cindex Vorlage, Verändern von +@cindex Veränderung von Vorlagen + +Beginnen Sie mit der Vorlage, die Ihren Vorstellungen +am nächsten kommt. Nehmen wir einmal an, Sie wollen +ein Stück für Sopran und Cello schreiben. In diesem +Fall könnten Sie mit der Vorlage @qq{Noten und Text} +(für die Sopran-Stimme) beginnen. + +@example +\version @w{"@version{}"} +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +text = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melody + @} + \new Lyrics \lyricsto "one" \text + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Jetzt wollen wir die Cello-Stimme hinzufügen. Schauen wir uns das +Beispiel @qq{Nur Noten} an: + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melody + \layout @{ @} + \midi @{ @} +@} +@end example + +Wir brauchen den @code{\version}-Befehl nicht zweimal. Wir +brauchen aber den @code{melody}-Abschnitt. Wir wollen +keine zwei @code{\score} (Partitur)-Abschnitte -- mit zwei +@code{\score}-Abschnitten würden wir zwei Stimmen +getrennt voneinander erhalten. In diesem Fall wollen wir +sie aber zusammen, als Duett. Schließlich brauchen wir +innerhalb des @code{\score}-Abschnittes nur einmal die +Befehle @code{\layout} und @code{\midi}. + +Wenn wir jetzt einfach zwei @code{melody}-Abschnitte in +unsere Datei kopieren würden, hätten wir zwei @code{melody}-Variable. +Das würde zu keinem Fehler führen, aber die zweite von ihnen +würde für beide Melodien eingesetzt werden. Wir müssen +ihnen also andere Bezeichnungen zuweisen, um sie voneinander +zu unterscheiden. Nennen wir die Abschnitte also @code{SopranNoten} +für den Sopran und @code{CelloNoten} für die Cellostimme. Wenn +wir schon dabei sind, können wir @code{text}auch nach +@code{SoprText} umbenennen. Denken Sie daran, beide +Vorkommen der Bezeichnung zu ändern: einmal die Definition +gleich am Anfang (@code{melody = \relative c' @{ }) und +dann auch noch die Benutzung der Variable innerhalb des +@code{\score}-Abschnittes. + +Gleichzeitig können wir auch noch das Notensystem für das +Cello ändern -- das Cello hat normalerweise einen Bassschlüssel. +Wir ändern auch die Noten etwas ab. + +@example +\version @w{"@version{}"} + +SopranNoten = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +SoprText = \lyricmode @{ + Aaa Bee Cee Dee +@} + +CelloNoten = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "eins" @{ + \autoBeamOff + \SopranNoten + @} + \new Lyrics \lyricsto "eins" \Soprantext + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Das sieht schon vielversprechend aus, aber die Cello-Stimme +erscheint noch nicht im Notensatz -- wir haben vergessen, +sie in den @code{\score}-Abschnitt einzufügen. Wenn die +Cello-Stimme unterhalb des Soprans erscheinen soll, müssen +wir + +@example +\new Staff \CelloNoten +@end example + +@noindent +unter dem Befehl für den Sopran hinzufügen. Wir brauchen auch +die spitzen Klammern (@code{<<} und @code{>>}) um die +Noten, denn damit wird LilyPond mitgeteilt, dass mehr als +ein Ereignis gleichzeitig stattfindet (in diesem Fall sind es +zwei @code{Staff}-Instanzen). Der @code{\score}-Abschnitt +sieht jetzt so aus: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "eins" @{ + \autoBeamOff + \SopranNoten + @} + \new Lyrics \lyricsto "eins" \SoprText + >> + \new Staff \CelloNoten + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Das sieht etwas unschön aus, vor allem die Einrückung stimmt +nicht mehr. Das können wir aber schnell in Ordnung bringen. +Hier also die gesamte Vorlage für Sopran und Cello: + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +Die Vorlagen, mit denen wir begonnen haben, können im +Anhang @qq{Vorlagen} gefunden werden, siehe +@ref{Ein einzelnes System}. + + +@node Vierstimmige SATB-Partitur +@subsection Vierstimmige SATB-Partitur +@translationof Four-part SATB vocal score + +@cindex Vorlage, SATB +@cindex Vorlage, Chorpartitur +@cindex SATB-Vorlage +@cindex Chorpartitur, Vorlage + +Die meisten Partituren für vierstimmigen gemischten Chor +mit Orchesterbegleitung (wie etwa Mendelssohns @notation{Elias} +oder Händels @notation{Messias}) sind so aufgebaut, dass +für jede der vier Stimmen ein eigenes System besteht und +die Orchesterbegleitung dann als Klavierauszug darunter +notiert wird. Hier ein Beispiel aus Händels @notation{Messias}: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +Keine der Vorlage bietet diesen Aufbau direkt an. Die Vorlage, die +am nächsten daran liegt, ist @qq{SATB-Partitur und automatischer +Klavierauszug}, siehe @ref{Vokalensemble}. Wir müssen diese +Vorlage aber so anpassen, dass die Noten für das Klavier nicht +automatisch aus dem Chorsatz generiert werden. Die Variablen +für die Noten und den Text des Chores sind in Ordnung, wir +müssen nun noch Variablen für die Klaviernoten hinzufügen. + +Die Reihenfolge, in welcher die Variablen in das Chorsystem +(@code{ChoirStaff}) eingefügt werden, entspricht nicht der +in dem Beispiel oben. Wir wollen sie so sortieren, dass die +Texte jeder Stimme direkt unter den Noten notiert werden. +Alle Stimmen sollten als @code{\voiceOne} notiert werden, +welches die Standardeinstellung ist; wir können also die +@code{\voiceXXX}-Befehle entfernen. Wir müssen auch noch +den Schlüssel für den Tenor ändern. Die Methode, mit der +der Text den Stimmen zugewiesen wird, ist uns noch nicht +bekannt, darum wollen wir sie umändern auf die Weise, die +wir schon kennen. Wir fügen auch noch Instrumentbezeichnungen +zu den Systemen hinzu. + +Damit erhalten wir folgenden @code{ChoirStaff}: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Sopran" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alt" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} +>> % end ChoirStaff +@end example + +Als nächstes müssen wir das Klaviersystem bearbeiten. +Das ist einfach: wir nehmen einfach den Klavierteil +aus der @qq{Piano solo}-Vorlage: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "oben" \oben + \new Staff = "unten" \unten +>> +@end example + +@noindent +und fügen die Variablen @code{oben} +und @code{unten} hinzu. + +Das Chorsystem und das Pianosystem müssen mit +spitzen Klammern kombiniert werden, damit beide +übereinander erscheinen: + +@example +<< % ChoirStaff und PianoStaff parallel kombinieren + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Alles miteinander kombiniert und mit den Noten für drei +Takte sieht unser Beispiel nun so aus: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { + \key d \major + \time 4/4 +} +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Eine Partitur von Grund auf erstellen +@subsection Eine Partitur von Grund auf erstellen +@translationof Building a score from scratch + +@cindex Template, eigene schreiben +@cindex Vorlagen, eigene schreiben +@cindex eigene Vorlagen erstellen +@cindex Erstellen von eigenen Vorlagen +@cindex Schreiben von eigenen Vorlagen + +Wenn Sie einige Fertigkeit im Schreiben von LilyPond-Code +gewonnen haben, werden Sie vielleicht feststellen, dass es +manchmal einfacher ist, von Grund auf anzufangen, anstatt +die fertigen Vorlagen zu verändern. Auf diese Art könne Sie +auch Ihren eigenen Stil entwickeln, und ihn der Musik anpassen, +die Sie notieren wollen. Als Beispiel wollen wir demonstrieren, +wie man die Partitur für ein Orgelpreludium von Grund auf +konstruiert. + +Beginnen wir mit dem Kopf, dem @code{header}-Abschnitt. +Hier notieren wir den Titel, den Namen des Komponisten usw. +Danach schreiben wir die einzelnen Variablen auf und +schließlich am Ende die eigentliche Partitur, den +@code{\score}-Abschnitt. Beginnen wir mit einer groben +Struktur, in die wir dann die Einzelheiten nach und nach +eintragen. + +Als Beispiel benutzen wir zwei Takte aus dem Orgelpreludium +@notation{Jesu, meine Freude} von J. S. Bach, notiert +für zwei Manuale und Pedal. Sie können die Noten am Ende +dieses Abschnittes sehen. Das obere Manual trägt zwei Stimmen, +das untere und das Pedalsystem jeweils nur eine. Wir +brauchen also vier Variablen für die Noten und eine, um +Taktart und Tonart zu definieren. + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J. S. Bach" +@} +keyTime = @{ \key c \minor \time 4/4 @} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +Im Moment haben wir eine unsichtbare +Note in jede Stimme eingesetzt (@code{s1}). +Die Noten werden später hinzugefügt. + +Als nächstes schauen wir uns an, was in die +Partitur (die @code{\score}-Umgebung) +kommt. Dazu wird einfach die Notensystemstruktur +konstruiert, die wir benötigen. Orgelmusik +wird meistens auf drei Systemen notiert, eins +für jedes Manual und ein drittes für die Pedalnoten. +Die Systeme für die Manuale werden mit einer +geschweiften Klammer verbunden, wir +benutzen hier also ein @code{PianoStaff}. +Das erste Manualsystem braucht zwei Stimmen, +das zweite nur eine. + +@example +\new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % Ende ManualOne Systemkontext + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % Ende ManualTwo Systemkontext +>> % Ende PianoStaff Kontext +@end example + +Als nächstes soll das System für das Pedal hinzugefügt +werden. Es soll unter das Klaviersystem gesetzt +werden, aber muss gleichzeitig mit ihm erscheinen. +Wir brauchen also spitze Klammern um beide +Definitionen. Sie wegzulassen würde eine Fehlermeldung +in der Log-Datei hervorrufen. Das ist ein sehr +häufiger Fehler, der wohl auch Ihnen früher +oder später unterläuft. Sie können das fertige +Beispiel am Ende des Abschnittes kopieren und die +Klammern entfernen, um zu sehen, wie die +Fehlermeldung aussehen kann, die Sie in solch +einem Fall erhalten würden. + +@example +<< % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +Es ist nicht notwendig, die simultane Konstruktion +@code{<< .. >>} innerhalb des zweiten Manualsystems +und des Pedalsystems zu benutzen, denn sie enthalten +nur eine Stimme. Andererseits schadet es nichts, sie +zu schreiben, und es ist eine gute Angewohnheit, immer +die spitzen Klammern nach einem @code{\new Staff} zu +schreiben, wenn mehr als eine Stimme vorkommen könnten. +Für Stimmen (@code{Voice}) dagegen gilt genau das +Gegenteil: eine neue Stimme sollte immer von +geschweiften Klammern (@code{@{ .. @}}) gefolgt +werden, falls Sie ihre Noten in mehrere Variable aufteilen, +die nacheinander gesetzt werden sollen. + +Fügen wir also diese Struktur zu der @code{\score}-Umgebung +hinzu und bringen wir die Einzüge in Ordnung. Gleichzeitig +wollen wir die richtigen Schlüssel setzen und die Richtung der +Hälse und Bögen in den Stimmen des oberen Systems +kontrollieren, indem die obere Stimme ein +@code{\voiceOne}, die untere dagegen ein @code{\voiceTwo} +erhält. Die Taktart und Tonart werden mit unserer fertigen +Variable @code{\keyTime} eingefügt. + +@example +\score @{ + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % set time signature and key + \clef "treble" + \new Voice @{ + \voiceOne + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \voiceTwo + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \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 + +@cindex Spreizbarkeit von Systemen +@cindex Dehnung von Systemen, vertikal +@cindex Systeme, vertikales Dehnen + +Das Layout des Orgelsystems oben ist fast perfekt, es hat jedoch einen kleinen +Fehler, den man nicht bemerken kann, wenn man nur ein einzelnes System +betrachtet: Der Abstand des Pedalsystems zum System der linken Hand +sollte in etwa der gleiche sein wie der Abstand zwischen den Systemen +der linken und rechten Hand. Die Dehnbarkeit von Systemen in einem +Klaviersystem (@code{PianoStaff})-Kontext ist beschränkt (sodass der +Abstand zwischen den Systemen der linken und rechten Hand nicht zu groß +wird), und das Pedalsystem sollte sich genauso verhalten. + +@cindex Untereigenschaft +@cindex sub-properties +@cindex graphische Objekte +@cindex Grobs +@cindex Objekte, graphische + +Die Spreizbarkeit von Systemen kann mit der @code{staff-staff-spacing}-Eigenschaft +des @code{VerticalAxisGroup}-@qq{graphischen Objekts} (üblicherweise als +@qq{Grob} innerhalb der LilyPond-Dokumentation bezeichnet) kontrolliert +werden. An dieser Stelle brauchen Sie sich um die Details nicht zu +sorgen, sie werden später erklärt. Sehr Neugierige können sich den +Abschnitt @ruser{Grundlagen zum Verändern von Eigenschaften} anschauen. Im Moment +kann man nicht nur die @code{strechability} (Spreizbarkeit)-Untereigenschaft verändern, +darum müssen hier auch die anderen Untereigenschaften kopiert werden. Die +Standardeinstellungen dieser Untereigenschaften finden sich in der Datei +@file{scm/define-grobs.scm} in den Definitionen für den +@code{VerticalAxisGroup}-Grob. Der Wert für @code{strechability} wird aus +der Definition für das Klaviersystem (@code{PianoStaff}) entnommen +(in der Datei @file{ly/engraver-init.ly}), damit die Werte identisch +sind. + +@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 + +Damit ist das Grundgerüst fertig. Jede Orgelmusik mit drei +Systemen hat die gleiche Struktur, auch wenn die Anzahl der Stimmen +in einem System sich ändern kann. Jetzt müssen wir nur noch +die Noten einfügen und alle Teile zusammenfügen, indem wir +die Variablen mit einem Backslash in die Partitur einbauen. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c2 | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\score { + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % set time signature and key + \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 context + >> +} % end Score context +@end lilypond + +@seealso +Glossar: +@rglos{system}. + + +@node Tipparbeit durch Variablen und Funktionen ersparen +@subsection Tipparbeit durch Variablen und Funktionen ersparen +@translationof Saving typing with variables and functions + +@cindex Variablen + +Bis jetzt wurde immer derartige Notation vorgestellt: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } + +\score { + { + \hornNotes + } +} +@end lilypond + +Sie können sich vorstellen, dass das etwa für minimalistische +Musik sehr nützlich sein könnte: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } +violin = \new Staff { + \fragmentA \fragmentA | + \fragmentB \fragmentA | +} + +\score { + { + \violin + } +} +@end lilypond + +Diese Variablen (die man auch als Makros oder Benutzer-Befehl +bezeichnet) können jedoch auch für eigene Anpassungen eingesetzt +werden: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } +padText = { \once \override TextScript #'padding = #5.0 } +fthenp=_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b + \padText + c4.^"hi there!" d8 e' f g d + c,4.\fthenp b8 c4 c-. + } +} + +\score { + { + \violin + } + \layout{ragged-right=##t} +} +@end lilypond + +Derartige Variablen sind offensichtlich sehr nützlich, zu Tipparbeit zu ersparen. Aber es lohnt sich schon, sie zu +benutzen, wenn man sie nur einmal benutzen will, denn sie +vereinfachen die Struktur einer Datei sehr stark. Hier das +vorige Beispiel ohne jede Benutzung von Variablen. Es ist +sehr viel schwerer lesbar, besonders die letzte Zeile. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +Bisher haben wir vor allem statische Ersetzungen betrachtet: +wenn LilyPond etwa @code{\padText} sieht, wird es ersetzt mit +all dem Code, mit dem wir es definiert haben (also alles, +was sich rechts von @code{padtext=} befindet). + +LilyPond kann auch nicht-statische Ersetzungen bewältigen. Man +kann sie sich als Funktionen vorstellen. + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +Die Benutzung von Variablen ist auch eine gute Möglichkeit, +Arbeit zu vermeiden, wenn sich einmal die Syntax von LilyPond +ändern sollte (siehe auch @rprogram{Updating old input files +with convert-ly}). +Wenn man eine einzige Definition hat (wie etwa @code{\dolce}), +die für alle Vorkommen in der Notation eingesetzt wird, muss +man auch nur einmal diese Definition aktualisieren, anstatt +dass man sie in jeder @file{.ly}-Datei einzeln ändern müsste. + + +@node Partitur und Stimmen +@subsection Partitur und Stimmen +@translationof Scores and parts + +In Orchestermusik werden alle Noten zweimal gedruckt. Einmal +in einer Stimme für die Spieler, und einmal ein der Partitur +für den Dirigenten. Variablen können benutzen, um sich doppelte +Arbeit zu ersparen. Die Noten werden nur einmal eingegeben und +in einer Variable abgelegt. Der Inhalt der Variable wird dann +benutzt um sowohl die Stimme als auch die Partitur zu erstellen. + +Es bietet sich an, die Noten in einer extra Datei abzulegen. +Nehmen wir an, dass die Datei @file{horn-music.ly} folgende +Noten eines Horn/@/Fagott-Duos enthält: + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e4 d | +@} +@end example + +@noindent +Eine Stimme wird also erstellt, indem man folgendes in eine +Datei schreibt: + +@example +\include "horn-music.ly" + +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +Die Zeile + +@example +\include "horn-music.ly" +@end example + +@noindent +ersetzt den Inhalt von @file{horn-music.ly} an dieser Position +in der Datei, sodass @code{hornNotes} im Folgenden definiert +ist. Der Befehl @code{\transpose f@tie{}c'} zeigt an, dass +das Argument (@code{\hornNotes}) eine Quinte nach oben transponiert +werden soll. Klingendes @code{f} wird als @code{c'}, wie es +die Stimmung eines normalen F-Hornes verlangt. Die Transposition +kann in folgender Notenausgabe gesehen werden: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +In Ensemblestücken sind manche Stimmen für viele Takte stumm. +Das wird durch eine besondere Pause notiert, die Mehrtaktpause. +Sie wird mit einem großen @code{R} notiert, gefolgt von der +Dauer (@code{1}@tie{}für eine Ganze, @code{2}@tie{}für eine Halbe usw.). Indem man die Dauern multipliziert, kann man auch +längere Dauern erzeugen. Diese Pause etwa dauert drei Takte +in einem 2/4-Takt: + +@example +R2*3 +@end example + +Wenn die Stimme gesetzt wird, werden Mehrtaktpausen komprimiert. Das geschieht, indem man folgendes in die Datei +schreibt: + +@example +\set Score.skipBars = ##t +@end example + +@noindent +Dieser Befehl setzt die Eigenschaft @code{skipBars} im +@code{Score}-Kontext auf wahr (@code{##t}). Die Pause und diese Option zu der Musik von oben hinzugefügt, ergibt folgendes +Beispiel: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +Die Partitur wird erstellt, indem man alle Noten kombiniert. +Angenommen, die andere Stimme ist in @code{bassoonNotes} +in der Datei @file{bassoon-music.ly} definiert, würde eine +Partitur erstellt mit: + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +woraus sich ergibt: + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond diff --git a/Documentation/de/learning/preface.itely b/Documentation/de/learning/preface.itely new file mode 100644 index 0000000000..fd3370e16e --- /dev/null +++ b/Documentation/de/learning/preface.itely @@ -0,0 +1,67 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745 + + 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 Vorwort +@unnumbered Vorwort +@translationof Preface + +Es muss wohl während einer Probe des EJE (Eindhovens Jugendorchester) + etwa 1995 gewesen sein, als Jan, einer der schrägen Bratschisten, +Han-Wen, einem der verstimmten Hornisten, von seinem großartigen +neuen Projekt erzählte, an dem er gerade arbeitete. Es sollte ein +automatisiertes System für den Notensatz werden (um genauer zu sein, +es war MPP, ein Präprozessor für MusiXTeX). Zufällig wollte Han-Wen +gerade einige Stimmen einer Partitur ausdrucken, +und so schaute er sich das Programm an und war schnell +begeistert. Man entschied sich, dass MPP in eine Sackgasse führte, +und nach vielem Philosophieren und hitzigem E-Mail-Austausch begann +Han-Wen mit LilyPond 1996. Dieses Mal wurde Jan mitgerissen von +Han-Wens neuem Projekt. + +Die Entwicklung eines Computerprogramms erinnert in vielem an das +Erlernen eines Musikinstrumentes. Am Anfang macht es Spaß herauszufinden, +wie alles funktioniert und alles, was man noch nicht kann, stellt +eine Herausforderung dar. Nach der ersten Begeisterung muss man +jedoch viel üben. Tonleitern und Etüden können furchtbar langweilig +sein, und wenn keine Ermunterung von anderen -- Lehrern, Dirigenten +oder dem Publikum -- kommt, ist es oft eine große Versuchung, einfach +aufzuhören. Aber man macht weiter, und langsam wird das Instrument zu +einem Teil des eigenen Lebens. An manchen Tagen geht alles wie von +selbst und es macht Spaß, an anderen Tagen ist es nur Arbeit, aber +man macht trotzdem weiter, jeden Tag. + +Die Arbeit an LilyPond kann genauso wie das Spiel eines Instruments +sehr langweilig sein, und manchmal kommt es vor lauter Fehlern so vor, + als stapfe man durch einen Morast. Trotzdem ist die Arbeit schon +Teil unseres Lebens geworden und wir machen einfach weiter. Die +wahrscheinlich wichtigste Motivation ist wohl, dass unser Programm +wirklich nützlich ist. Wenn wir im Internet surfen, finden wir +viele Leute, die LilyPond benutzen und damit außerordentlich +beeindruckende Partituren erstellen. Das zu sehen fühlt sich +auf angenehme Weise etwas unwirklich an. + +Unsere Stimmung heben aber nicht nur die Benutzer unseres Programmes, +sondern auch die vielen Menschen, die uns helfen, indem sie Vorschläge +einbringen, auf verschiedene Art an LilyPond mitwirken oder +Fehlerberichte schicken. Ihnen allen möchten wir hier Dank sagen! + +Musik spielen und Musik zu Papier zu bringen ist mehr als eine +nette Analogie. Zusammen zu programmieren macht viel Spaß und Menschen +helfen zu können ist sehr zufriedenstellend, aber letzten Endes +geht es uns darum, durch dieses Programm unsere Liebe zur Musik +auszudrücken. Wir hoffen, Sie können viele schöne Partituren damit +setzen! + +Han-Wen und Jan + +Utrecht/Eindhoven, Niederlande, Juli 2002. + diff --git a/Documentation/de/learning/templates.itely b/Documentation/de/learning/templates.itely new file mode 100644 index 0000000000..30e4302385 --- /dev/null +++ b/Documentation/de/learning/templates.itely @@ -0,0 +1,258 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745 + + 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" + +@c Translators: Till Paala + +@node Vorlagen +@appendix Vorlagen +@translationof Templates + +Dieser Abschnitt des Handbuches enthält Vorlagen, in denen die +LilyPond-Partitur schon eingerichtet ist. Sie müssen nur noch Ihre +Noten einfügen, die Datei mit LilyPond übersetzen und sich an dem +schönen Notenbild erfreuen! + +@c bad node name for ancient notation to avoid conflict +@menu +* Ein einzelnes System:: +* Klaviervorlagen:: +* Streichquartett:: +* Vokalensemble:: +* Orchestervorlage:: +* Vorlagen für alte Notation:: +* Andere Vorlagen:: +@end menu + + +@node Ein einzelnes System +@appendixsec Ein einzelnes System +@translationof Single staff + +@appendixsubsec Nur Noten + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-only-notes.ly} + + +@appendixsubsec Noten und Text + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-notes-and-lyrics.ly} + + +@appendixsubsec Noten und Akkordbezeichnungen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes-and-chords.ly} + + +@appendixsubsec Noten, Text und Akkordbezeichnungen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes,-lyrics,-and-chords.ly} + + +@node Klaviervorlagen +@appendixsec Klaviervorlagen +@translationof Piano templates + +@appendixsubsec Piano Solo + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-simple.ly} + + +@appendixsubsec Klavier und Gesangstimme + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-melody-and-lyrics.ly} + + +@appendixsubsec Klavier mit zentriertem Text + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-lyrics.ly} + + +@appendixsubsec Klavier mit zentrierten Lautstärkebezeichnungen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-dynamics.ly} + + +@node Streichquartett +@appendixsec Streichquartett +@translationof String quartet + +@appendixsubsec Streichquartett + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-simple.ly} + + +@appendixsubsec Streichquartettstimmen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-with-separate-parts.ly} + + +@node Vokalensemble +@appendixsec Vokalensemble +@translationof Vocal ensembles + +@appendixsubsec SATB-Partitur + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template.ly} + + +@appendixsubsec SATB-Partitur und automatischer Klavierauszug + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-automatic-piano-reduction.ly} + + +@appendixsubsec SATB mit zugehörigen Kontexten + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} + + +@appendixsubsec SATB auf vier Systemen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{satb-choir-template---four-staves.ly} + + +@appendixsubsec Sologesang und zweistimmiger Refrain + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-verse-and-refrain.ly} + + +@appendixsubsec Hymnen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{hymn-template.ly} + + +@appendixsubsec Psalmengesang + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{anglican-psalm-template.ly} + + +@node Orchestervorlage +@appendixsec Orchestervorlage +@translationof Orchestral templates + +@appendixsubsec Orchester, Chor und Klavier +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{orchestra,-choir-and-piano-template.ly} + + +@c bad node name to avoid node name conflict +@node Vorlagen für alte Notation +@appendixsec Vorlagen für alte Notation +@translationof Ancient notation templates + +@appendixsubsec Transkription mensuraler Musik + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-mensural-music.ly} + + +@appendixsubsec Vorlage zur Transkription von Gregorianik + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + +@node Andere Vorlagen +@appendixsec Andere Vorlagen +@translationof Other templates + + +@appendixsubsec Jazz-Combo +@translationof Jazz combo + +@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 diff --git a/Documentation/de/learning/tutorial.itely b/Documentation/de/learning/tutorial.itely new file mode 100644 index 0000000000..843d8b29b3 --- /dev/null +++ b/Documentation/de/learning/tutorial.itely @@ -0,0 +1,848 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745 + + 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 + +@include included/generating-output.itexi + +@c \version "2.14.0" +@c Translators: Till Paala, Reinhold Kainhofer +@c Translation checkers: Hajo Bäß + +@node Übung +@chapter Übung +@translationof Tutorial + +Dieses Kapitel stellt dem Leser das grundlegende Arbeiten mit LilyPond +vor. + +@menu +* Eine Quelldatei übersetzen:: +* Arbeiten an Eingabe-Dateien:: +* Mit Fehlern umgehen:: +* Wie soll das Handbuch gelesen werden:: +@end menu + + +@node Eine Quelldatei übersetzen +@subsection Eine Quelldatei übersetzen +@translationof Compiling a file + +Dieser Abschnitt führt in die @qq{Kompilation} ein -- den +Bearbeitungsprozess von LilyPond-Eingabedateien (die Sie geschrieben +haben) um eine Ausgabedatei zu erstellen. + +@menu +* Noten eingeben:: +* MacOS X:: +* Windows:: +* Kommandozeile:: +@end menu + +@node Noten eingeben +@subsection Noten eingeben +@translationof Entering input + +@cindex Kompilieren +@cindex erstes Beispiel +@cindex Beispiel, erstes +@cindex Übersetzen von Quelltext +@cindex Groß- und Kleinschreibung +@cindex Quelltext, übersetzen +@cindex Großbuchstaben +@cindex Kleinbuchstaben + +@qq{Kompilation} ist der Begriff, der benutzt wird, um eine +Lilypond-Eingabedatei mit dem Programm LilyPond in eine +Notenausgabe umzuwandeln. Ausgabedateien sind in erster Linie +PDF-Dateien (zum Anschauen und Drucken), MIDI (zum Abspielen) +und PNG (für die Benutzung auf Internetseiten). Die Eingabedateien +von LilyPond sind einfache Textdateien. + +Das erste Beispiel zeigt, wie +solch eine einfache Eingabedatei ausschauen kann. + +@example +@{ + c' e' g' e' +@} +@end example + +Die graphische Ausgabe ist: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@warning{In jeder LilyPond-Datei müssen +@strong{@{ geschweifte Klammern @}} um die Noten +oder Gesangstext +gesetzt werden. Vor und hinter den Klammern sollten +Leerzeichen eingegeben werden, damit keine Unklarheiten +in Verbindung mit den eigentlichen Notensymbolen entstehen. +An Anfang und Ende der Zeile können diese Leerzeichen auch +weggelassen werden. Es kann sein, dass in diesem Handbuch +die Klammern in manchen Beispielen fehlen, aber man sollte +immer daran denken, sie in den eigenen Dateien zu benutzen! +Mehr Informationen zu der Darstellung der Beispiele in diesem +Handbuch gibt der Abschnitt @ref{Wie soll das Handbuch gelesen werden}.} + +Zusätzlich unterscheidet LilyPond @strong{Groß- und Kleinschreibung}. +@w{@samp{ @{ c d e @}}} ist zulässiger Code, +@w{@samp{ @{ C D E @}}} dagegen resultiert in einer Fehlermeldung. + +@smallspace + +@subheading Ansicht des Ergebnisses + +@cindex PDF-Datei +@cindex Noten anzeigen +@cindex Anzeigen der Noten +@cindex Ansicht von Noten +@cindex Editoren +@cindex Texteditoren +@cindex LilyPond unter MacOS X +@cindex MacOS X, LilyPond starten +@cindex Starten von LilyPond + +Das Erstellen der Notenausgabe hängt davon ab, welches Betriebssystem +und welche Programme Sie benutzen. + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (graphisch) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (graphisch) + +@item +@ref{Kommandozeile, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Kommandozeile, Alle Betriebssysteme} (Kommandozeile) + +@end itemize + +Beachten Sie, dass es eine Reihe an Texteditoren mit besserer +Unterstützung für LilyPond gibt. Mehr dazu im Abschnitt +@rweb{Leichteres Editieren}. + +@warning{Das erste Mal, wenn Sie LilyPond benutzen, kann es eine +Minute oder länger dauern, weil das Programm zuerst alle Schriftarten, +die auf dem System zur Verfügung stehen, untersucht. Aber nach +diesem ersten Mal läuft LilyPond sehr viel schneller.} + + + + + +@node MacOS X +@subsection MacOS X +@translationof MacOS X + +@cindex Starten des Programms, MacOS X +@cindex MacOS X, LilyPond starten + +@lilypadOSX + + +@node Windows +@subsection Windows +@translationof Windows + +@cindex Windows, LilyPond starten + +@lilypadWindows + + +@node Kommandozeile +@subsection Kommandozeile +@translationof Command-line + +@cindex Unix, LilyPond starten + +@lilypadCommandLine + + + +@node Wie werden Eingabe-Dateien geschrieben +@section Wie werden Eingabe-Dateien geschrieben +@translationof How to write input files + +Dieser Abschnitt erklärt die grundlegende LilyPond-Syntax und hilft +bei den ersten Anfängen, eine LilyPond-Eingabedatei zu schreiben. + +@menu +* Einfache Notation:: +* Arbeiten an Eingabe-Dateien:: +@end menu + + + +@node Einfache Notation +@subsection Einfache Notation +@translationof Simple notation + +@cindex einfache Notation +@cindex Notation, einfach + +LilyPond fügt einige Bestandteile des Notenbildes automatisch hinzu. Im +nächsten Beispiel sind nur vier Tonhöhen angegeben, aber LilyPond setzt +trotzdem einen Schlüssel, eine Taktangabe und Notendauern. + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +Diese Einstellungen können verändert werden, aber in den meisten Fällen +sind die automatischen Werte durchaus brauchbar. + +@subheading Tonhöhen + +@cindex Tonhöhen +@cindex relativer Modus +@cindex Apostroph +@cindex Komma +@cindex Versetzungszeichen und relativer Modus +@cindex relativer Modus und Versetzungszeichen + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + + +Glossar: @rglos{pitch}, @rglos{interval}, +@rglos{scale}, @rglos{middle C}, @rglos{octave}, +@rglos{accidental}. + +@c Addition for German users about pitch naming conventions +Die Tonhöhen werden mit Kleinbuchstaben eingegeben, die den Notennamen +entsprechen. Es ist jedoch wichtig zu wissen, dass LilyPond in seiner +Standardeinstellung die englischen Notennamen verwendet. Bis auf eine +Ausnahme entsprechen sie den deutschen, deshalb wird die Voreinstellung +von LilyPond für diese Übung beibehalten. Die @emph{Ausnahme} ist das h -- in +LilyPond muss man anstelle dessen b schreiben! Das deutsche b dagegen +wird als bes notiert, ein his dagegen würde bis geschrieben. Siehe auch +@ruser{Versetzungszeichen} und @ruser{Notenbezeichnungen in anderen Sprachen}, hier +wird beschrieben, +wie sich die deutschen Notennamen benutzen lassen. +@c end addition + +Am einfachsten können Noten im @code{\relative}-Modus +eingegeben werden. In diesem Modus wird die Oktave der Note automatisch +gewählt, indem angenommen wird, dass die folgende Note immer so nah +wie möglich in Bezug auf die vorhergehende gesetzt wird, d. h. sie +wird höchstens drei Notenzeilen höher oder tiefer als die vorhergehende +Note gesetzt. Fangen +wir unser erstes Notationsbeispiel mit einer @notation{Tonleiter} an, wo also +die nächste Note immer nur eine Notenlinie über der vorherigen steht. + +@c KEEP LY +@lilypond[verbatim,quote] +% Beginnpunkt auf das mittlere C setzen +\relative c' { + c d e f + g a b c +} +@end lilypond + +Die erste Note ist ein @notation{eingestrichenes C}. Jede folgende Note +befindet sich so nah wie möglich bei der vorherigen -- das erste +@q{C} ist also das nächste C vom +eingestrichenen C aus gerechnet. Darauf folgt das nächstmögliche +D in Bezug auf die vorhergehende Note. Mit diesen Regeln können +auch Melodien mit größeren Intervallen im @code{\relative}-Modus +gebildet werden: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +Es ist nicht notwendig, dass die erste Note der Melodie mit der +Note beginnt, die die erste Tonhöhe angibt. +Die erste Note (das @q{D}) des vorigen Beispiels ist das nächste D +vom eingestrichenen C aus gerechnet. + +Indem man Apostrophe @code{'} (Taste Shift+#) oder Kommata @code{,} +zu dem @w{@code{\relative c' @{}} hinzufügt oder entfernt, kann die +Oktave der ersten Tonhöhe verändert werden: + +@c KEEP LY +@lilypond[verbatim,quote] +% zweigestrichenes C +\relative c'' { + e c a c +} +@end lilypond + +Der relative Modus kann zunächst verwirrend erscheinen, aber es ist die +einfachste Art, die meisten Melodien zu notieren. Schauen wir uns an, +wie diese relative Berechnung in der Praxis funktioniert. Wenn wir mit +einem H beginnen (@code{b} in der LilyPond-Syntax), welches sich auf der +mittleren Linie im Violinschlüssel befindet, können wir C, D und E +aufwärts notieren, und A, G und F unter dem H. Wenn also die Note, die +auf das H folgt, ein C, D oder E ist, setzt LilyPond es oberhalb des +Hs, wenn es ein A, G oder F ist, wird es darunter gesetzt. + +@c KEEP LY +@lilypond[verbatim,quote] +\relative c'' { + b c % c ist 1 Zeile aufwärts, also c über dem b + b d % d ist 2 Zeilen aufwärts, oder 5 runter, also d über dem b + b e % e ist 3 aufwärts oder 4 runter, also e über dem b + b a % a ist 6 aufwärts oder 1 runter, also a unter dem b + b g % g ist 5 aufwärts oder 2 runter, also g unter dem b + b f % f ist 4 aufwärts oder 3 runter, also f unter dem b +} +@end lilypond + +Die gleiche Berechnung findet auch statt, wenn eine der Noten erhöht +oder erniedrigt ist. @notation{Versetzungszeichen} werden +@strong{vollständig ignoriert} bei der Berechnung. Genau die +gleiche Berechnung wird analog von jeder folgenden Tonhöhe aus +für die nächste Tonhöhe neu ausgeführt. + +Um Intervalle zu notieren, die größer als drei Notenzeilen sind, kann man die Oktave verändern. Mit einem Apostroph @code{'} (Taste Shift+#) +direkt hinter dem Notennamen wird die Oktave um eins erhöht, mit einem Komma @code{,} um eins erniedrigt. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +Um eine Notenhöhe um zwei (oder mehr!) Oktaven zu verändern, +werden sukzessive @code{''} oder @code{,,} benutzt -- es muss +sich dabei wirklich um zwei einzelne Apostrophen und nicht um das +Anführungszeichen @code{"}@tie{} (Taste Shift+2) handeln! + + +@subheading Tondauern (Rhythmen) + +@cindex Notendauern +@cindex Dauern +@cindex Rhythmus +@cindex Ganze Noten +@cindex Halbe Noten +@cindex Viertelnoten +@cindex punktierte Noten + +Glossar: @rglos{beam}, @rglos{duration}, +@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, +@rglos{dotted note}. + +Die @notation{Dauer} einer Note wird durch eine Zahl bezeichnet, +die direkt auf den Notennamen folgend eingegeben wird. +@code{1} für eine @notation{ganze Note}, @code{2} für eine +@notation{halbe Note}, @code{4} für eine @notation{Viertelnote} +und so weiter. @notation{Notenhälse} und @notation{Balken} werden +automatisch hinzugefügt. + +Wenn keine Dauer bezeichnet wird, wird die der vorhergehenden Note +verwendet. Für die erste Note ist eine Viertel als Standard definiert. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +Um @notation{punktierte Noten} zu erzeugen, wird einfach ein Punkt +@code{.} hinter die Notendauer geschrieben. Die Dauer einer +punktierten Note muss explizit, also inklusive der Nummer, +angegeben werden. + +@lilypond[verbatim,quote] +\relative c'' { + a4 a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Pausen + +@cindex Pausen +@cindex schreiben von Pausen +@cindex notieren von Pausen + +Eine @notation{Pause} wird genauso wie eine Noten eingegeben; ihre +Bezeichnung ist @code{r}@tie{}: + +@lilypond[verbatim,quote] +\relative c'' { + a4 r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Taktangabe + +@cindex Taktart + +@funindex \time +@funindex time + +Glossar: @rglos{time signature}. + +Die @notation{Taktart} kann mit dem +@code{\time}-Befehl definiert werden: + +@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 Tempobezeichnung + +@cindex Tempobezeichnung +@cindex Metronom-Angabe + +@funindex \tempo +@funindex tempo + +Glossar: @rglos{tempo indication}, @rglos{metronome}. + +Die @notation{Tempobezeichnung} und die @notation{Metronom-Angabe} können +mit dem @code{\tempo}-Befehl gesetzt werden: + +@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 + + +@subheading Notenschlüssel + +@cindex Schlüssel +@cindex Alt +@cindex Sopran +@cindex Tenor +@cindex Bass + +@funindex \clef +@funindex clef + +Glossar: @rglos{clef}. + +Der @notation{Notenschlüssel} kann mit dem @code{\clef}-Befehl +gesetzt werden: + +@lilypond[verbatim,quote] +\relative c' { + \clef "treble" + c1 + \clef "alto" + c1 + \clef "tenor" + c1 + \clef "bass" + c1 +} +@end lilypond + + +@subheading Alles zusammen + +Hier ist ein kleines Beispiel, dass all diese Definitionen beinhaltet: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + \tempo "Andante" 4 = 120 + c2 e8 c' + g'2. + f4 e d + c4 c, r4 +} +@end lilypond + + +@seealso +Notationsreferenz: @ruser{Tonhöhen setzen}, +@ruser{Rhythmen eingeben}, @ruser{Pausen eingeben}, +@ruser{Taktangabe}, @ruser{Notenschlüssel}. + + +@node Arbeiten an Eingabe-Dateien +@subsection Arbeiten an Eingabe-Dateien +@translationof Working on input files + +@cindex geschweifte Klammern +@cindex Klammern, geschweift +@cindex Kommentare +@cindex Zeilenkommentare +@cindex Block-Kommentare +@cindex Groß- und Kleinschreibung +@cindex Ausdrücke +@cindex Großbuchstaben +@cindex Kleinbuchstaben + +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + + +LilyPonds Quelldateien ähneln Dateien in den meisten +Programmiersprachen: Sie enthalten eine Versionsbezeichnung, +es ist auf Groß- und Kleinschreibung +zu achten und Leerzeichen werden ignoriert. Ausdrücke werden +mit geschweiften Klammern @w{@code{@{ @}}} eingeklammert und Kommentare +mit dem Prozentzeichen @code{%} auskommentiert +oder mit @w{@code{%@{ @dots{} %@}}} umgeben. + +Wenn das jetzt unverständlich erscheint, sind hier die Erklärungen: + +@itemize +@item +@strong{Versionsbezeichnung}: +Jede LilyPond-Datei soll eine Versionsbezeichnung enthalten. Eine +Versionsbezeichnung ist eine Zeile, die die Version von LilyPond +deklariert, für die die Datei geschrieben wurde, wie in dem +Beispiel: + +@example +\version "@w{@version{}}" +@end example + +Üblicherweise wird die Versionsbezeichnung oben in die Datei +geschrieben. + +Die Versionsbezeichnung ist aus zwei Gründen sehr wichtig: 1. kann +man mit ihrer Hilfe automatische Aktualisierungen der Eingabedateien +vornehmen, wenn sich die LilyPond-Syntax ändern sollte. 2. wird +hier die Version von LilyPond beschrieben, die nötig ist, um die +Datei zu kompilieren. + +Wenn die Versionsbezeichnung in einer Datei fehlt, gibt LilyPond +eine Warnung während der Kompilation der Datei aus. + +@item +@strong{Groß- und Kleinschreibung:} +Die Bedeutung eines Zeichens verändert sich, je +nachdem, ob es groß (@w{@code{A, B, S, T}}) oder klein + (@w{@code{a, b, s, t}}) geschrieben wird. Noten müssen +immer klein geschrieben werden, @w{@samp{@{ c d e @}}} funktioniert, +während @w{@samp{@{ C D E @}}} einen Fehler produziert. + +@item @strong{Leerzeichen:} +Es spielt keine Rolle, wie viele Leerzeichen oder Tabulatoren oder +leere Zeilen sich zwischen den Zeichen der Quelldatei befinden. +@w{@samp{@{ c d e @}}} bedeutet das Gleiche wie +@w{@samp{@{ c @ @ @ @ @ d e @}}} oder +@example +@{ c4 d + e @} +@end example + +@noindent +Natürlich ist das letzte Beispiel etwas schwer zu lesen. Eine gute Daumenregel +ist es, Code-Blöcke mit zwei Leerzeichen einzurücken: +@example +@{ + c4 d e +@} +@end example + +Leerzeichen @emph{sind} jedoch nötig, um viele syntaktische Elemente +voneinander zu trennen. Leerzeichen können also immer @emph{hinzugefügt} +werden, aber sie dürfen nicht @emph{entfernt} werden. Da fehlende +Leerzeichen sehr seltsame Fehlermeldungen hervorrufen können, wird +es nahe gelegt, immer ein Leerzeichen vor und nach jedem syntaktischen +Element, etwa vor und nach geschweiften Klammern, einzufügen. + +@item @strong{Ausdrücke:} +Auch der kleinste Abschnitt an LilyPond-Code muss in +@strong{@{@tie{}geschweifte@tie{}Klammern@tie{}@}} eingeschlossen werden. Diese +Klammern zeigen LilyPond an, dass es sich um einen zusammengehörenden +musikalischen Ausdruck handelt, genauso wie Klammern @q{()} in der Mathematik. +Die Klammern sollten von jeweils einem Leerzeichen umgeben sein, um +Zweideutigkeiten auszuschließen, es sei denn, sie +befinden sich am Anfang oder Ende einer Zeile. + +Ein LilyPond-Befehl gefolgt von einem einfachen Ausdruck +in Klammern (wie etwa @q{@w{@code{@bs{}relative c' @{ @dots{} @}}}}) +wird auch als ein einzelner Musikausdruck gewertet. + +@cindex Kommentare +@cindex Zeilenkommentare +@cindex Blockkommentare + +@item +@strong{Kommentare:} +Ein Kommentar ist eine Bemerkung für den menschlichen Leser +einer Quelldatei, es wird bei der Dateianalyse durch das Programm +ignoriert, so dass es also keine Auswirkung auf die Druckausgabe der +Noten hat. Es gibt zwei verschiedene Typen von Kommentaren. Das +Prozentzeichen @q{%} geht einem Zeilen-Kommentar voraus: Alles +nach diesem Zeichen wird in dieser Zeile ignoriert. +Üblicherweise wird ein Kommentar @emph{über} dem Code gesetzt, +auf den es sich bezieht. + +@example +a4 a a a +% Dieser Kommentar bezieht sich auf das H +b2 b +@end example + + +Ein Block-Kommentar ist ein ganzer Abschnitt mit einem +Kommentar. Alles, was von @code{%@{} +und @code{%@}} umgeben ist, wird ignoriert. Das heißt, +dass sich ein Block-Kommentar nicht ein einem anderen +Blockkommentar befinden kann. Wenn Sie das versuchen sollten, +beendet schon das erste @code{%@}} @emph{beide} +Block-Kommentare. Das folgende Beispiel zeigt eine +mögliche Anwendung von Kommentaren: + +@example +% Noten für twinkle twinkle hier + c4 c g' g a a g2 + +%@{ + Diese Zeilen, und die Noten unten werden + ignoriert, weil sie sich in einem Block-Kommentar + befinden. + + f4 f e e d d c2 +%@} +@end example + +@end itemize + + +@node Mit Fehlern umgehen +@section Mit Fehlern umgehen +@translationof Dealing with errors + +@cindex Fehlerlösung + +Manchmal erstellt LlilyPond nicht das Notenbild, das Sie erwarten. Dieser +Abschnitt stellt einige Links zur Verfügung, um Ihnen bei der Problemlösung +möglicher Schwierigkeiten zu helfen. + + +@menu +* Allgemeine Fehlerlösungstipps:: +* Einige häufige Fehler:: +@end menu + +@node Allgemeine Fehlerlösungstipps +@subsection Allgemeine Fehlerlösungstipps +@translationof General troubleshooting tips + +Fehlerlösung für LilyPond-Probleme kann eine große Herausforderung für Menschen +darstellen, die an eine graphische Benutzeroberfläche gewohnt sind, weil +ungültige Eingabedateien erstellt werden können. Wenn das geschieht, ist +eine logische Herangehensweise der beste Weg, das Problem zu identifizieren +und zu lsöen. Einige Richtlinien, wie Sie diese Problemlösung erlernen +können, finden sich in @rprogram{Troubleshooting}. + + +@node Einige häufige Fehler +@subsection Einige häufige Fehler +@translationof Some common errors + +@cindex häufige Fehler +@cindex Fehler, häufige + +Es gibt einige übliche Fehler, die schwierig zu lösen sind, wenn man nur die +Fehlermeldungen der Log-Datei hat. Sie werden näher erklärt in +@rprogram{Common errors}. + + + +@node Wie die Handbücher gelesen werden sollen +@section Wie die Handbücher gelesen werden sollen +@translationof How to read the manuals + +Dieser Abschnitt zeigt, wie die Dokumentation effizient gelesen +werden kann und erklärt auch einige nützliche Interaktionseigenschaften +der Online-Version. + +@menu +* Ausgelassenes Material:: +* Anklickbare Beispiele:: +* Überblick über die Handbücher:: +@end menu + + +@node Ausgelassenes Material +@subsection Ausgelassenes Material +@translationof Omitted material + +@cindex Handbuch, Lesen +@cindex Wie soll das Handbuch gelesen werden +@cindex Lesen des Handbuchs +@cindex Beispiele, klickbar +@cindex klickbare Beispiele +@cindex Vorlagen +@cindex Templates +@cindex Dateien konstruieren, Hinweise +@cindex Konstruieren von Dateien, Hinweise +@cindex Hinweise zur Konstruktion von Dateien + +LilyPond-Code muss immer von @code{@{ @}} Zeichen oder einem +@w{@code{@bs{}relative c'' @{ @dots{} @}}} umgeben sein, wie +gezeigt in @ref{Arbeiten an Eingabe-Dateien}. +Im Rest dieses Handbuchs werden die meisten Beispiel allerdings darauf +verzichten. Um sie zu reproduzieren, können Sie den entsprechenden +Quellcode kopieren und in eine Textdatei einfügen, aber Sie +@strong{müssen} dabei +@w{@code{@bs{}relative c'' @{ @dots{} @}}} einfügen, wie hier gezeigt: + +@example +\relative c'' @{ + @dots{}hier das Beispiel@dots{} +@} +@end example + +Warum werden die Klammern hier meist weggelassen? Die meisten +der Beispiele können in ein längeres Musikstück hineinkopiert +werden, und dann ist es natürlich nicht sinnvoll, wenn auch noch +@w{@code{@bs{}relative c'' @{ @dots{} @}}} dazukommt; ein @code{\relative} darf +nicht innerhalb eines anderen @code{\relative} gesetzt werden, +deshalb wird es hier weggelassen, damit die Beispiele auch innerhalb +eines anderen Kontextes funktionieren. Wenn bei jedem +Beispiel @w{@code{@bs{}relative c'' @{ @dots{} @}}} eingesetzt würde, +könnten Sie die kleinen Beispiele der Dokumentation +nicht einfach zu Ihrem eigenen Notentext hinzufügen. +Die meisten Benutzer wollen +Noten zu einer schon bestehenden Datei irgendwo in der Mitte +hinzufügen, deshalb wurde der relative Modus für die Beispiele +im Handbuch weggelassen. + +Denken Sie auch daran, dass jede LilyPond-Datei eine Versionsbezeichnung +mit dem @code{\version}-Befehl haben sollte. Weil die Beispiele in den +Handbüchern Schnipsel und keine vollständigen Dateien sind, fehlt hier +die Versionsbezeichnung. Sie sollten sie aber immer in Ihre eigenen +Dateien einfügen. + + +@node Anklickbare Beispiele +@subsection Anklickbare Beispiele +@translationof Clickable examples + +@warning{Diese Eigenschaft gibt es nur in der HTML-Dokumentation.} + +Viele Leute lernen Programme, indem sie einfach herumprobieren. Das +geht auch mit LilyPond. Wenn Sie in der HTML-Version dieses Handbuchs +eine Abbildung in der HTML-Version dieses Handbuches anklicken, +erhalten sie exakt den LilyPond-Code, der +zum Satz der Abbildung benutzt wurde. Versuchen Sie es mit dieser +Abbildung: + +@c no verbatim here +@c KEEP LY +@lilypond[quote] +\relative c'' { + c4-\markup { \bold \huge { Hier klicken! } } +} +@end lilypond + +Wenn Sie einfach alles kopieren, was im + @qq{ly snippet}-Abschnitt steht, und in eine Text-Datei +einfügen, haben Sie schon eine fertige Vorlage für weitere +Experimente. Damit Sie genau das gleiche Erscheinungsbild wie +bei dem Beispiel selber erreichen, müssen Sie alles kopieren ab der +Zeile @qq{Start +cut-&-pastable section} bis ganz zum Ende der Datei. + + +@ignore + +@n ode Navigation mit der Tastatur +@s ubsection Navigation mit der Tastatur +@translationof Keyboard navigation + +@warning{Diese Funktion gibt es nur für die HTML-Version der Handbücher.} + +@c TODO: once this is figured out, insert it here. + +Es wird gegenwärtig an dieser Funktion gearbeitet. +@end ignore + + +@node Überblick über die Handbücher +@subsection Überblick über die Handbücher +@translationof Overview of manuals + + +Es gibt sehr viele Dokumentation für LilyPond. Neue Benutzer sind +oft verwirrt, welche Teile davon sie lesen sollen, und so kommt +es vor, dass manchmal wichtige Abschnitte nicht gelesen werden. + +@warning{Bitte überspringen Sie keine wichtigen Teile der +Dokumentation. Sonst wird es Ihnen später sehr viel schwerer +fallen, spätere Abschnitte zu verstehen.} + +@itemize + +@item +@strong{Bevor Sie @emph{irgendetwas} ausprobieren}: Lesen Sie die +Abschnitte @ref{Übung} und @ref{Übliche Notation}. Wenn +Sie auf musikalische Fachbegriffen stoßen, die Sie nicht kennen, +schauen Sie diese im @rglosnamed{Top, Glossar} nach. + +@item +@strong{Bevor Sie ein vollständiges Stück notieren}: Lesen +Sie den Abschnitt @ref{Grundbegriffe} im Handbuch zum Lernen. +Danach können Sie sich die für Ihr Projekt wichtigen Abschnitte +in der +@rusernamed{Top, Notationsreferenz} anschauen. + +@item +@strong{Bevor Sie versuchen, die Standardnotation zu verändern}: +Lesen Sie @ref{Die Ausgabe verändern} im Handbuch zum Lernen. + +@item +@strong{Bevor Sie sich an ein größeres Projekt machen}: Lesen +Sie den Abschnitt +@rprogram{Vorschläge, wie man Dateien schreibt} +in der Programmbenutzung. + +@end itemize + diff --git a/Documentation/de/learning/tweaks.itely b/Documentation/de/learning/tweaks.itely new file mode 100644 index 0000000000..93fd3a75e2 --- /dev/null +++ b/Documentation/de/learning/tweaks.itely @@ -0,0 +1,4507 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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 Die Ausgabe verändern +@chapter Die Ausgabe verändern +@translationof Tweaking output + +In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern +kann. In LilyPond kann man sehr viel konfigurieren, fast jedes +Notenfragment kann geändert werden. + + +@menu +* Grundlagen für die Optimierung:: +* Die Referenz der Programminterna:: +* Erscheinung von Objekten:: +* Positionierung von Objekten:: +* Kollision von Objekten:: +* Weitere Optimierungen:: +@end menu + + +@node Grundlagen für die Optimierung +@section Grundlagen für die Optimierung +@translationof Tweaking basics + +@menu +* Grundlagen zur Optimierung:: +* Objekte und Schnittstellen:: +* Regeln zur Benennung von Objekten und Eigenschaften:: +* Optimierungsmethoden:: +@end menu + +@node Grundlagen zur Optimierung +@subsection Grundlagen zur Optimierung +@translationof Introduction to tweaks + +@qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die +verschiedenen Methoden, die Aktionen zu beeinflussen, die während +der Kompilation einer Notationsdatei vorgenommen werden sowie auf +das Notenbild einzuwirken. Einige dieser Optimierungen sind sehr +einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das +System an Optimierungen so gut wie alle möglichen Erscheinungsformen +für die Notenausgabe. + +In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt, +um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen +Befehlen bereitgestellt werden, die einfach in die Quelldatei +kopiert werden können um den selben Effekt wie im Beispiel +zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle +konstruiert werden, so dass Sie in der Lage sein werden, eigene +Befehle auf dieser Grundlage zu entwickeln. + +Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den +Abschnitt @ref{Kontexte und Engraver} interessieren, dann +Kontexte und Engraver sowie die Eigenschaften, die mit ihnen +verknüpft sind, sind die Voraussetzung, um die Funktionsweise +von Optimierungen verstehen zu können. + + +@node Objekte und Schnittstellen +@subsection Objekte und Schnittstellen +@translationof Objects and interfaces + +@cindex Objekte +@cindex Grobs +@cindex Spanners +@cindex Interfaces +@cindex Strecker +@cindex Schnittstellen +@cindex graphische Objekte (Grob) +@cindex Objekteigenschaften +@cindex Layout-Objekt +@cindex Objekt, Layout- +@cindex Eigenschaften von Objekten + +Optimierung bedeutet, die internen Operationen und Strukturen +des LilyPond-Programmes zu verändern, darum sollen hier +zunächst die wichtigsten Begriffe erklärt werden, die zur +Beschreibung dieser Operationen und Strukturen benutzt werden. + +Der Begriff @qq{Objekt} ist ein allgemeiner Begriff, mit dem +die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond +während der Bearbeitung des Quelltextes erstellt. Wenn etwa +ein Befehl wie @code{\new Staff} auftritt, wird ein neues Objekt +vom Typ @code{Staff} erstellt. Dieses Objekt @code{Staff} enthält +dann alle Eigenschaften, die mit diesem speziellen Notensystem +verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und +spezifische Angaben über die Engraver, die innerhalb dieses Systems +eingesetzt werden. Für alle anderen Kontexte gibt es genauso +Objekte, die deren Eigenschaften beinhalten, beispielsweise für +@code{Voice}-Objekte, @code{Score}-Objekte, @code{Lyrics}-Objekte, +aber auch für Objekte, die Notationselemente wie die Taktlinien, +Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes +Objekt hat eine eigene Gruppe an Eigenschaftswerten. + +Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die +Notationselemente der gesetzten Ausgabe repräsentieren, also +Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden +@qq{Layout-Objekte}, oft auch @qq{Graphische Objekte} genannt. +Daraus resultiert die künstliche Abkürzung @qq{Grob}. +Diese sind auch Objekte im allgemeinen Sinn und haben genauso +Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position, +Farbe usw. + +Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen, +Crescendo-Klammern, Oktavierungszeichen und viele andere +Grobs sind nicht an einer Stelle plaziert -- sie haben vielmehr +einen Anfangspunkt, einen Endpunkt und eventuell noch andere +Eigenschaften, die ihre Form bestimmen. Objekte mit solch +einer erweiterten Gestalt werden als @qq{Strecker} (engl. Spanners) +bezeichnet. + +Es bleibt uns noch übrig zu erklären, was @qq{Schnittstellen} +(engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich +sind, haben sie doch oft gemeinsame Eigenschaften, die auf +die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise +haben eine Farbe, eine Größe, eine Position usw. und alle +diese Eigenschaften werden von LilyPond auf die gleiche Weise +verarbeitet, während der Quelltext in Notensatz umgesetzt wird. +Um die internen Operationen zu vereinfachen, sind alle diese +gemeinsamen Prozesse und Eigenschaften in einem Objekt +mit der Bezeichnung @code{grob-interface} (Schnittstelle eines +graphischen Objektes) zusammengefasst. Es gibt viele andere +Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung +besitzen, welche auf @code{-interface} endet. Insgesamt +gibt es über 100 dieser Schnittstellen. Wir werden später sehen, +was es damit auf sich hat. + +Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung +kommen sollen. + + +@node Regeln zur Benennung von Objekten und Eigenschaften +@subsection Regeln zur Benennung von Objekten und Eigenschaften +@translationof Naming conventions of objects and properties + +@cindex Benennungskonventionen für Objekte +@cindex Benennungskonventionen für Eigenschaften +@cindex Objekte, Benennungskonventionen +@cindex Eigenschaften, Benennungskonventionen +@cindex Regeln zur Benennung von Objekten/Eigenschaften + +Es wurden schon früher einige Regeln zur Benennung von +Objekten vorgestellt, siehe +@ref{Kontexte und Engraver}. Hier eine Referenzliste der +häufigsten Objekt- und Eigenschaftsbezeichnungen mit +den Regeln für ihre Bezeichnung und +illustrierenden echten Bezeichnungen. Es wurde @qq{A} +für einen beliebigen Großbuchstaben und @qq{aaa} für eine +beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere +Zeichen werden explizit angegeben. + +@multitable @columnfractions .33 .33 .33 +@headitem Objekt-/Eigenschaftstyp + @tab Naming convention + @tab Beispiele +@item Kontexte + @tab Aaaa oder AaaaAaaaAaaa + @tab Staff, GrandStaff +@item Layout-Objekte + @tab Aaaa oder AaaaAaaaAaaa + @tab Slur, NoteHead +@item Engraver + @tab Aaaa_aaa_engraver + @tab Clef_engraver, Note_heads_engraver +@item Schnittstellen + @tab aaa-aaa-interface + @tab grob-interface, break-aligned-interface +@item Kontext-Eigenschaften + @tab aaa oder aaaAaaaAaaa + @tab alignAboveContext, skipBars +@item Layout-Objekt-Eigenschaften + @tab aaa oder aaa-aaa-aaa + @tab direction, beam-thickness +@end multitable + +Es wird bald ersichtlich werden, dass die Eigenschaften von +unterschiedlichen Objekttypen mit unterschiedlichen Befehlen +geändert werden. Deshalb ist es nützlich, aus der +Schreibweise zu erkennen, um was +für ein Objekt es sich handelt, um den entsprechenden +Befehl einsetzen zu können. + + +@node Optimierungsmethoden +@subsection Optimierungsmethoden +@translationof Tweaking methods + +@cindex override-Befehl +@funindex \override +@funindex override + +@strong{Der \override-Befehl} + +Wir haben uns schon mit den Befehlen @code{\set} +und @code{\with} bekannt gemacht, mit welchen +Eigenschaften von @strong{Kontexten} verändert +und @strong{Engraver} entfernt oder hinzugefügt +werden können. Siehe dazu +@ref{Kontexteigenschaften verändern} und @ref{Engraver hinzufügen und entfernen}. Jetzt wollen wir uns weitere +wichtige Befehle anschauen. + +Der Befehl, um die Eigenschaften von @strong{Layout-Objekten} +zu ändern, ist @code{\override}. Weil dieser Befehl interne +Eigenschaften tief in der Programmstruktur von LilyPond +verändern muss, ist seine Syntax nicht so einfach wie die der +bisherigen Befehle. Man muss genau wissen, welche Eigenschaft +welches Objektes in welchem Kontext geändert werden soll, +und welches der neu zu setzende Wert dann ist. Schauen wir +uns an, wie das vor sich geht. + +Die allgemeine Syntax dieses Befehles ist: + +@example +\override @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} = +#@var{Wert} +@end example + +@noindent +Damit wir die Eigenschaft mit der Bezeichnung @var{layout-property} +das Layout-Objektes mit der Bezeichnung@var{LayoutObject}, +welches ein Mitglied des @var{Kontext}-Kontextes ist, auf den +Wert @var{value}. + +Der @var{Kontext} kann (und wird auch normalerweise) ausgelassen +werden, wenn der benötigte Kontext eindeutig impliziert ist und einer +der untersten Kontexte ist, also etwa @code{Voice}, @code{ChordNames} +oder @code{Lyrics}. Auch in diesem Text wird der Kontext oft ausgelassen +werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich +definiert werden muss. + +Spätere Abschnitte behandeln umfassend Eigenschaften und ihre +Werte, aber um ihre Funktion und ihr Format zu demonstrieren, +werden wir hier nur einige einfache Eigenschaften und Werte einsetzen, +die einfach zu verstehen sind. + +Für den Moment könne Sie die @code{#'}-Zeichen ignorieren, die vor jeder +Layout-Eigenschaft, und die @code{#}-Zeichen, die vor jedem Wert +stehen. Sie müssen immer in genau dieser Form geschrieben werden. +Das ist der am häufigsten gebrauchte Befehl für die Optimierung, +und der größte Teil dieses Abschnittes wird dazu benutzt, seine Benutzung +zu erläutern. Hier ein einfaches Beispiel, um die Farbe des Notenkopfes +zu ändern: + +@cindex color-Eigenschaft, Beispiel +@cindex Farb-Eigenschaft, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a b c | +@end lilypond + + +@strong{Der \revert-Befehl} + +@cindex revert-Befehl +@funindex \revert +@funindex revert + +Wenn eine Eigenschaft einmal überschrieben wurde, wird ihr +neuer Wert so lange bewahrt, bis er noch einmal überschrieben +wird oder ein @code{\revert}-Befehl vorkommt. Der +@code{\revert}-Befehl hat die folgende Syntax und setzt den +Wert der Eigenschaft zurück auf den Standardwert, nicht +jedoch auf den vorigen Wert, wenn mehrere +@code{\override}-Befehle benutzt wurden. + +@example +\revert @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} +@end example + +Wiederum, genauso wie der @var{Kontext} bei dem @code{\override}-Befehl, +wird @var{Kontext} oft nicht benötigt. Er wird in vielen der folgenden +Beispiele ausgelassen. Im nächsten Beispiel wird die Farbe des Notenkopfes +wieder auf den Standardwert für die letzten zwei Noten gesetzt. + +@cindex color-Eigenschaft, Beispiel +@cindex Farb-Eigenschaft, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a +\revert NoteHead #'color +b4 c | +@end lilypond + +@strong{\once-Präfix} + +@funindex \once +@funindex once + +Sowohl der @code{\override}-Befehl als auch der @code{\set}-Befehl können mit +dem Präfix @code{\once} (@emph{einmal}) versehen werden. Dadurch wird +der folgende @code{\override}- oder @code{\set}-Befehl nur für den aktuellen +Musik-Moment wirksam, bevor sich wieder der Standard einstellt. Am gleichen +Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes +geändert werden: + +@cindex color-Eigenschaft, Beispiel +@cindex Farb-Eigenschaft, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\once \override NoteHead #'color = #red +e4 f | +\once \override NoteHead #'color = #green +g4 a b c | +@end lilypond + + +@strong{Der \overrideProperty-Befehl} + +@cindex overrideProperty-Befehl + +@funindex \overrideProperty +@funindex overrideProperty + +Es gibt eine andere Form des @code{override}-Befehls, +@code{\overrideProperty} (überschreibe Eigenschaft), +welcher ab und zu benötigt wird. Es wird hier nur der +Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert +in @rextend{Schwierige Korrekturen}. +@c Maybe explain in a later iteration -td + + +@strong{Der \tweak-Befehl} + +@cindex tweak-Befehl +@funindex \tweak +@funindex tweak + +Der letzte Optimierungsbefehl in LilyPond ist @code{\tweak} +(engl. optimieren). Er wird eingesetzt um Eigenschaften +von Objekten zu verändern, die zum selben Musik-Moment +auftreten, wie etwa die Noten eines Akkordes. Ein +@code{\override} würde alle Noten des Akkords beeinflussen, +während mit @code{\tweak} nur das nächste Objekt der +Eingabe geändert wird. + +Hier ein Beispiel. Angenommen, die Größe des mittleren +Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert +werden. Schauen wir zuerst, was wir mit +@code{\once \override} erhalten: + +@cindex Schriftgröße, Beispiel +@cindex NoteHead, Beispiel für override +@cindex Notenkopf, Beispiel für Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +\once \override NoteHead #'font-size = #-3 +4 +4 +@end lilypond + +Wie man sehen kann, beeinflusst @code{override} @emph{alle} +Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten +eines Akkordes zum selben Musik-Moment auftreten und +die Funktion von @code{\once} ist es, die Optimierung auf +an allen Objekten auszuführen, die zum selben Musik-Moment +auftreten wie der @code{\override}-Befehl. + +Der @code{\tweak}-Befehl funktioniert anders. Er bezieht sich +auf das direkt folgende Element in der Eingabe-Datei. Es wirkt +aber auch nur mit Objekten, die direkt von der Eingabe kreiert +werden, insbesondere Notenköpfe und Artikulationszeichen. +Objekte wie etwa Hälse oder Versetzungszeichen werden erst +später erstellt und lassen sich nicht auf diese Weise ändern. +Zusätzlich @emph{müssen} sich etwa Notenköpfe innerhalb +eines Akkordes befinden, d. h. sie müssen von einfachen spitzen +Klammern umschlossen sein. Um also eine einzelne Note +mit @code{\tweak} zu verändern, muss der Befehl innerhalb +der spitzen Klammern zusammen mit der Note eingegeben werden. + +Um also zu unserem Beispiel zurückzukommen, könnte man die +mittlere Note eines Akkordes auf diese Weise ändern: + +@cindex font-size-Eigenschaft, Beispiel +@cindex Schriftgröße, Beispiel +@cindex @code{\tweak}-Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +4 +@end lilypond + +Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich +von der des @code{\override}-Befehls unterscheidet. Weder +Kontext noch Layout-Objekt können angegeben werden, denn +das würde zu einem Fehler führen. Beide Angaben sind +durch das folgende Element impliziert. Hier sollte auch +kein Gleichheitszeichen vorhanden sein. Die verallgemeinerte +Syntax des @code{\tweak}-Befehls ist also einfach + +@example +\tweak #'@var{layout-eigenschaft} #@var{Wert} +@end example + +Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur +eine von mehreren Artikulationen zu ändern, wie im nächsten +Beispiel zu sehen ist. + +@cindex Farb-Eigenschaft, Beispiel +@cindex @code{\tweak}-Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4^"Black" + -\tweak #'color #red ^"Red" + -\tweak #'color #green _"Green" +@end lilypond + +@noindent +Beachten Sie, dass dem @code{\tweak}-Befehl ein Artikulationsmodifikator +vorangestellt werden muss, ganz als ob er selbst ein Artikulationszeichen +wäre. + +@cindex Triolen, geschachtelt +@cindex N-tolen, geschachtelt +@cindex Klammer, Triole +@cindex Triolenklammer +@cindex N-tolenklammer +@cindex Komplizierte Rhythmen, Schachtelung von +@funindex TupletBracket + +Der @code{\tweak}-Befehl muss auch benutzt werden, wenn das +Aussehen einer vor mehreren geschachtelten Triolenklammern +geändert werden soll, die zum selben Zeitpunkt beginnen. +Im folgenden Beispiel beginnen die lange Klammer und die +erste Triolenklammer zum selben Zeitpunkt, sodass ein +@code{\override}-Befehl sich auf beide beziehen würde. +In dem Beispiel wird @code{\tweak} benutzt, um zwischen +ihnen zu unterscheiden. Der erste @code{\tweak}Befehl +gibt an, dass die lange Klammer über den Noten gesetzt +werden soll, und der zweite, dass die Zahl der rhythmischen +Aufteilung für die erste der kurzen Klammern in rot +gesetzt wird. + +@cindex Farb-Eigenschaft, Beispiel +@cindex @code{\tweak}-Beispiel +@cindex Richtungs-Eigenschaft, Beispiel +@cindex color-Eigenschaft, Beispiel +@cindex direction-Eigenschaft, Beispiel + +@lilypond[quote,ragged-right,verbatim,fragment,relative=2] +\tweak #'direction #up +\times 4/3 { + \tweak #'color #red + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + +Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt +beginnen, kann ihr Aussehen auf die übliche Art mit dem +@code{\override}-Befehl geändert werden: + +@cindex text-Eigenschaft, Beispiel +@cindex tuplet-number-Funktion, Beispiel +@cindex transparent-Eigenschaft, Beispiel +@cindex TupletNumber, Beispiel zur Veränderung +@cindex Triolennummer, Beispiel zur Veränderung +@cindex Triolen-Nummer-Funktion, Beispiel + +@c NOTE Tuplet brackets collide if notes are high on staff +@c See issue 509 +@lilypond[quote,ragged-right,verbatim,fragment,relative=1] +\times 2/3 { c8[ c c] } +\once \override TupletNumber + #'text = #tuplet-number::calc-fraction-text +\times 2/3 { + c8[ c] + c8[ c] + \once \override TupletNumber #'transparent = ##t + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + + +@seealso +Notationsreferenz: +@ruser{Der tweak-Befehl}. + + +@node Die Referenz der Programminterna +@section Die Referenz der Programminterna +@translationof The Internals Reference manual + +@menu +* Eigenschaften von Layoutobjekten:: +* Eigenschaften, die Schnittstellen besitzen können:: +* Typen von Eigenschaften:: +@end menu + +@node Eigenschaften von Layoutobjekten +@subsection Eigenschaften von Layoutobjekten +@translationof Properties of layout objects + +@cindex Eigenschaften von Layout-Objekten +@cindex Eigenschaften von Grobs +@cindex Grobs, Eigenschaften von +@cindex Layout-Objekte, Eigenschaften von +@cindex Property (Layout-Objekte, Grobs) +@cindex Regerenz der Interna + +Angenommen, in Ihrer Partitur tritt ein Legatobogen +auf, der Ihrer Meinung nach zu dünn ausgefallen ist. +Sie würden ihn gerne etwas schwerer gezeichnet +sehen. Wie gehen Sie vor? Von den Anmerkungen in +früheren Abschnitten wissen Sie schon, dass LilyPond +sehr flexibel ist und eine derartige Modifikation +möglich sein sollte, und Sie erraten vielleicht, +dass ein @code{\override}-Befehl angebracht ist. +Aber gibt es eine Eigenschaft für die Dicke eines +Legatobogens (engl. slur), und wenn es sie gibt, +auf welche Weise lässt sie sich verändern? Hier +kommt die Referenz der Interna zur Geltung. Dort +finden sich alle Informationen, um den beschriebenen +und alle anderen @code{\override}-Befehle zu +konstruieren. + +Bevor Sie jetzt in die Referenz der Interna wechseln, ist +eine Warnung angebracht. Es handelt sich um ein +@strong{Referenz}dokument, was heißt, dass es sehr +wenig oder gar keine Erklärungen enthält: seine Aufgabe +ist es, Information klar und genau darzustellen. Das +bedeutet, dass es auf den ersten Blick entmutigend +wirkt. Die Einführung und Erklärung in diesem Abschnitt +wird Ihnen aber schnell ermöglichen, genau die Information +aus der Referenz zu entnehmen, die Sie benötigen. +@c For German users +Beachten Sie, dass die Referenz der Interna nur auf Englisch +existiert. Um die Eigenschaftsbezeichnung eines bestimmten +Objektes zu finden, können Sie das Glossar (siehe +@rglosnamed{Top,Musikglossar}) + verwenden, in dem +die englischen Begriffe in viele andere Sprachen übersetzt sind. + +@cindex Override-Beispiel +@cindex Referenz der Interna, Benutzung +@cindex IR (Referenz der Interna), Benutzung +@cindex @code{\addlyrics}-Beispiel + +Das Vorgehen soll an einem konkreten Beispiel einer echten +Komposition demonstriert werden. Hier das Beispiel: + +@c Mozart, Die Zauberflöte Nr. 7 Duett + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +Angenommen also, wir wollen die Legatobögen etwas +dicker setzten. Ist das möglich? Die Legatobögen sind mit +Sicherheit ein Layout-Objekt, die Frage muss also lauten: +@qq{Gibt es eine Eigenschaft von Legatobögen, die die +Dicke bestimmt?} Um diese Frage zu beantworten, müssen +wir in der Referenz der Interna ( kurz IR) nachschauen. + +Die IR für die LilyPond-Version, die Sie benutzen, findet sich +auf der LilyPond-Webseite unter der Adresse +@uref{http://lilypond.org}. Gehen Sie zur Dokumentationsseite +und klicken Sie auf den Link zur Referenz der Interna. +@c Addition for German users +Die Sprache ändert sich ab hier nach englisch. Für diese Übung +sollten Sie die HTML-Version benutzen, nicht die +@qq{auf einer großen Seite} oder die PDF-Version. +Damit Sie die nächsten Absätze verstehen können, müssen Sie +genauso vorgehen, während Sie weiterlesen. + +Unter der Überschrift @strong{Top} befinden sich fünf Links. +Wählen Sie den Link zum @emph{Backend}, wo sich die Information +über Layout-Objekte befindet. Hier, unter der Überschrift +@strong{Backend}, wählen Sie den Link @emph{All layout objects}. +Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte, +die in Ihrerer LilyPond-Version benutzt werden, in alphabetischer +Ordnung. Wählen Sie den Link @emph{Slur} und die Eigenschaften +der Legatobögen (engl. slur) werden aufgelistet. + +Eine alternative Methode, auf diese Seite zu gelangen, ist von +der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen +findet sich ein Link zur Referenz der Interna. Dieser Link führt +Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben, +wie die Bezeichnung des Layout-Objektes lauten könnte, das sie +ändern wollen, ist es oft schneller, direkt zur IR zu gehen und +dort nachzuschlagen. + +Aus der Slur-Seite in der IR könne wir entnehmen, dass +Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt +werden. Dann werden die Standardeinstellungen aufgelistet. +Beachten Sie, dass diese @strong{nicht} in alphabetischer Reihenfolge +geordnet sind. Schauen Sie sich die Liste an, ob sie eine Eigenschaft +enthält, mit der die Dicke von Legatobögen kontrolliert werden kann. +Sie sollten folgendes finden: + +@example +@code{thickness} (number) + @code{1.2} + Line thickness, generally measured in @code{line-thickness} +@end example + +Das sieht ganz danach aus, als ob damit die Dicke geändert +werden kann. Es bedeutet, dass der Wert von +@code{thickness} einfach eine Zahl (@emph{number}) ist, +dass der Standardwert 1.2 ist, und dass die Einheit +für die Dicke eine andere Eigenschaft mit der +Bezeichnung @code{line-thickness} ist. + +Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen +in der IR, aber wir haben schon genug Informationen, um +zu versuchen, die Dicke eines Legatobogens zu ändern. Die +Bezeichnung des Layout-Objekts ist offensichtlich +@code{Slur} und die Bezeichnung der Eigenschaft, die geändert +werden soll +@code{thickness}. Der neue Wert sollte etwas mehr als 1.2 sein, +denn der Bogen soll ja dicker werden. + +Den benötigten @code{\override}-Befehl können wir jetzt einfach +konstruieren, indem wir die Werte für die Bezeichnungen in den +Modellbefehl einfügen und den Kontext auslassen. Setzen wir +einmal einen sehr großen Wert für die Dicke um zu sehen, ob der +Befehl auch funktioniert. Also: + +@example +\override Slur #'thickness = #5.0 +@end example + +Vergessen Sie nicht das Rautenzeichen und Apostroph +(@code{#'}) vor der Eigenschaftsbezeichnung und das +Rautenzeichen vor dem neuen Wert! + +Die nächste Frage ist nun: @qq{Wohin soll dieser Befehl geschrieben +werden?} Solange wir uns noch im Lernstadium befinden, ist +die beste Antwort: @qq{Innerhalb der Noten, vor den ersten +Legatobogen und nahe bei ihm.} Also etwa so: + +@cindex Legatobogen, Beispiel für Veränderung +@cindex thickness-Eigenschaft, Beispiel +@cindex Dicke-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +und wirklich wird der Legatobogen dicker. + +Das ist also die grundlegende Herangehensweise, +@code{\override}-Befehl zu formulieren. Es gibt einige +zusätzliche Komplikationen, denen wir uns später widmen +werden, aber Sie haben jetzt das Handwerkszeug, um Ihre +eigenen Befehle zu konstruieren -- wenn Sie auch noch etwas +Übung benötigen. Die sollen Sie durch die folgenden Übungen +erhalten. + + +@subheading Den Kontext finden + +@cindex Kontext, Finden und identifizieren + +Manchmal muss dennoch der Kontext spezifiziert werden. +Welcher aber ist der richtige Kontext? Wir könnten raten, +dass Legatobögen sich im @code{Voice}-Kontext befinden, +denn sie sind immer einzelnen Melodielinien zugewiesen. +Aber wir können uns dessen nicht sicher sein. Um unsere +Annahme zu überprüfen, gehen wir wieder zu der Seite im +IR, die die Legatobögen beschreibt und die Überschrift +@emph{Slur} hat. Dort steht: @qq{Slur objects are created +by: Slur engraver}. Legatobögen werden also in dem Kontext +erstellt, in dem sich der @code{Slur_engraver} befindet. +Folgen Sie dem Link zu der @code{Slur_engraver}-Seite. +Unten auf der Seite steht, dass der @code{Slur_engraver} +sich in fünf Stimmen-Kontexten befindet, unter anderem +auch im normalen @code{Voice}-Kontext. Unsere Annahme +war also richtig. Und weil @code{Voice} einer der Kontexte +der untersten Ebene ist, welcher eindeutig schon dadurch +definiert ist, dass wir Noten eingeben, kann er an dieser Stelle +auch weggelassen werden. + + +@subheading Nur einmal mit \override verändern + +@cindex Override nur einmal +@cindex once override +@funindex \once +@funindex once + +Im Beispiel oben wurden @emph{alle} Legatobögen dicker +gesetzt. Vielleicht wollen Sie aber nur den ersten Bogen +dicker haben. Das können Sie mit dem @code{\once}-Befehl +erreichen. Er wird direkt vor den @code{\override}-Befehl +gesetzt und bewirkt, dass nur der Bogen geändert wird, der +@strong{unmittelbar an der nächsten Note beginnt.} Wenn +die nächste Note keinen Bogenbeginn hat, dann passiert +gar nichts -- der Befehl wird nicht gespeichert, sondern einfach +vergessen. Der Befehl, mit @code{\once} zusammen benutzt, +muss also wie folgt positioniert werden: + +@cindex Legatobogen, Beispiel zur Veränderung +@cindex thickness-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \time 6/8 + { + \key es \major + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes8[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Jetzt bezieht er sich nur noch auf den ersten Legatobogen. + +Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl +eingesetzt werden. + + +@subheading Rückgängig machen + +@cindex Revert +@cindex Rückgängig machen +@cindex Wiederherstellen von Standardeinstellungen +@cindex Standardeinstellungen, Wiederherstellen +@funindex \revert +@funindex revert + +Eine weitere Möglichkeit: nur die beiden ersten Legatobögen sollen +dicker gesetzt werden. Gut, wir könnten jetzt zwei Befehle benutzen, +jeden mit dem @code{\once}-Präfix und direkt vor die entsprechende +Note gestellt, an welcher der Bogen beginnt: + +@cindex Legatobogen, Beispiel zur Veränderung +@cindex thickness-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes[( g]) g | + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle +dessen später den @code{\revert}-Befehl einsetzen, um die +@code{thickness}-Eigenschaft wieder auf ihren Standardwert zurückzusetzen: + +@cindex Legatobogen, Beispiel zur Veränderung +@cindex thickness-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + bes[( g]) g | + g8[( es]) es + % Revert thickness of all following slurs to default of 1.2 + \revert Slur #'thickness + d8[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Der @code{\revert}-Befehl kann benutzt werden, um eine beliebige +Eigenschaft, die mit @code{\override} geändert worden ist, wieder in +ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können +Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche +Resultat. + +Damit endet die Einleitung in die Referenz der Interna (IR) und die +grundlegenden Optimierungsmethoden. Einige Beispiele folgen in späteren +Abschnitten dieses Kapitel, einerseits um Sie mit weiteren Möglichkeiten +der IR bekanntzumachen, andererseits um Ihnen mehr Übungsmöglichkeiten +zu geben, die relevante Information dort zu finden. Die Beispiele werden +Schritt für Schritt immer weniger Erklärungen beinhalten. + + +@node Eigenschaften, die Schnittstellen besitzen können +@subsection Eigenschaften, die Schnittstellen besitzen können +@translationof Properties found in interfaces + +@cindex Interface-Eigenschaften +@cindex Eigenschaften von Interfaces +@cindex Schnittstellen, Eigenschaften von +@cindex Eigenschaften von Schnittstellen + +Der Text unseres Beispiels soll jetzt kursiv gesetzt werden. Was für +ein @code{\override}-Befehl wird dazu benötigt? Schauen wir +uns zunächst das Inhaltsverzeichnis in der IR an: @qq{All layout objects}, +wie auch schon zuvor. Welches Objekt könnte die Darstellung des +Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag @code{LyricText}, +das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften +an, die verändert werden können. Dazu gehört +@code{font-series} und @code{font-size}, aber nichts, womit man kursiven +Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen +Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzelnen +Layout-Objekt aufgelistet, sondern ist mit anderen ähnlichen Eigenschaften +zusammen in einem @strong{Interface} -- einer Schnittstelle -- verortet; +in diesem Fall das +@code{font-interface}. + +Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden +und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften +benutzen. + +Schauen Sie sich noch einmal die Seite in der IR an, die @code{LyricText} +beschreibt. Unten auf der Seite ist eine klickbare Liste (in der HTML-Version +der IR) an Eigenschaften, die von @code{LyricText} unterstützt +werden. Diese Liste enthält sieben Einträge, darunter auch +@code{font-interface}. Ein Klick hierauf bringt uns zu den Eigenschaften, +die mit dieser Schnittstelle verbunden sind, also auch @code{LyricText}. + +Jetzt sehen wir alle die Eigenschaften, die der Benutzer verändern kann, +um die Schriftartendarstellung zu beeinflussen. Dazu gehört nun auch +@code{font-shape(symbol)}, wobei @code{symbol} auf die Werte +@code{upright} (gerade), @code{italics} (kursiv) oder @code{caps} +(Kapitälchen) gesetzt werden kann. + +Sie werden gemerkt haben, dass @code{font-series} und @code{font-size} +hier auch aufgelistet sind. Es stellt sich die Frage, warum diese +allgemeinen Schriftarteigenschaften @code{font-series} und +@code{font-size} sowohl unter der Überschrift +@code{LyricText} als unter dem @code{font-interface} aufgelistet +sind, aber @code{font-shape} befindet sich nur im +@code{font-interface}? Die Antwort ist: Die globalen Einstellungen +von @code{font-series} und @code{font-size} werden geändert, wenn +ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape} +wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der +Überschrift @code{LyricText} beinhalten dann die Werte der +Standardeinstellungen dieser zwei Eigenschaften, wenn es sich +um ein @code{LyricText}-Objekt handelt. Andere Objekte, +die auch das @code{font-interface} unterstützen, setzen diese +Eigenschaften anders, wenn sie erstellt werden. + +Versuchen wir nun einen @code{\override}-Befehl zu konstruieren, +der den Gesangstext kursiv setzt. Das Objekt hat die Bezeichnung +@code{LyricText}, die Eigenschaft ist @code{font-shape} +und der Wert @code{italic}. Wie vorher schon lassen wir den +Kontext aus. + +Am Rande sei angemerkt, dass die Werte der @code{font-shape}-Eigenschaft +mit einem Apostroph (@code{'}) gekennzeichnet werden +müssen, weil es sich um Symbole handelt. Aus dem gleichen +Grund mussten auch für @code{thickness} weiter oben im +Text ein Apostroph gesetzt werden. Symbole sind besondere +Bezeichnungen, die LilyPond intern bekannt sind. Einige +sind Bezeichnungen von Eigenschaften, wie eben @code{thickness} +oder @code{font-shape}. Andere sind besondere Werte, +die an Eigenschaften übergeben werden können, wie +@code{italic}. Im Unterschied hierzu gibt es auch beliebige +Zeichenketten, die immer mit Anführungszeichen, also +als @code{"Zeichenkette"} auftreten. Für weitere +Einzelheiten zu Zeichenketten und Werten, siehe +@rextend{Scheme-Übung}. + +Gut, der @code{\override}-Befehl, mit dem der Gesangstext +kursiv gesetzt wird, lautet: + +@example +\override LyricText #'font-shape = #'italic +@end example + +@noindent +und er muss direkt vor den Text gesetzt werden, auf den er sich +bezieht, etwa so: + +@cindex font-shape-Eigenschaft, Beispiel +@cindex LyricText, Beispiel zur Veränderung +@cindex kursiv, Beispiel +@cindex @code{\addlyrics}, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + \override LyricText #'font-shape = #'italic + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Jetzt wird der Text kursiv gesetzt. + + +@subheading Den Kontext im Liedtextmodus bestimmen + + +@cindex Kontext im Gesangstextmodus angeben +@cindex Gesangstextmodus, Kontext angeben + +Bei Gesangstexten funktioniert der @code{\override}-Befehl +nicht mehr, wenn Sie den Kontext im oben dargestellten +Format angeben. Eine Silbe wird im Gesangtextmodus +(lyricmode) entweder von einem Leerzeichen, einer +neuen Zeile oder einer Zahl beendet. Alle anderen +Zeichen werden als Teil der Silbe integriert. Aus diesem +Grund muss auch vor der schließenden Klammer +@code{@}} ein Leerzeichen gesetzt oder eine neue +Zeile begonnen werden. Genauso müssen Leerzeichen +vor und nach einem Punkt benutzt werden, um die +Kontext-Bezeichnung von der Objekt-Bezeichnung zu +trennen, denn sonst würden beide Bezeichnungen als +ein Begriff interpretiert und von LilyPond nicht verstanden +werden. Der Befehl muss also lauten: + +@example +\override Lyrics . LyricText #'font-shape = #'italic +@end example + +@warning{Innerhalb von Gesangstext muss immer ein +Leerzeichen zwischen der letzten Silbe und der schließenden +Klammer gesetzt werden.} + +@warning{Innerhalb von @code{\override}-Befehlen in +Gesangstexten müssen Leerzeichen um Punkte zwischen +Kontext- und Objektbezeichnungen gesetzt werden.} + +@seealso +Erweitern: @rextend{Scheme-Übung}. + + +@node Typen von Eigenschaften +@subsection Typen von Eigenschaften +@translationof Types of properties + +@cindex Eigenschaftsarten + +Bis jetzt hatten wir es mit zwei Arten von Eigenschaften zu +tun: @code{number} (Zahl) und @code{symbol}. Damit +ein Befehl funktioniert, muss der Wert einer Eigenschaft +vom richtigen Typ sein und die Regeln befolgen, die +für diesen Typ gelten. Der Eigenschaftstyp ist in der +IR in Klammern hinter der Eigenschaftsbezeichnung +angegeben. Hier eine Liste der Typen, die Sie vielleicht +benötigen werden, mit den Regeln, die für den jeweiligen +Typ gelten und einigen Beispielen. Sie müssen immer +ein Rautenzeichen (@code{#}) vor den Typeintrag setzen, +wenn sie in einem @code{\override}-Befehl benutzt werden. + +@multitable @columnfractions .2 .45 .35 +@headitem Eigenschaftstyp + @tab Regeln + @tab Beispiele +@item Boolesch + @tab Entweder wahr oder falsch, dargestellt als #t oder #f + @tab @code{#t}, @code{#f} +@item Dimension (in Notenlinienabständen) + @tab Eine positive Dezimalzahl (in Notenlinienabstand-Einheiten) + @tab @code{2.5}, @code{0.34} +@item Richtung + @tab Eine gültige Richtungskonstante oder das numerische Äquivalent + @tab @code{LEFT}, @code{CENTER}, @code{UP}, + @code{1}, @code{-1} +@item Integer + @tab Eine positive ganze Zahl + @tab @code{3}, @code{1} +@item Liste + @tab Eine eingeklammerte Anzahl von Einträgen, mit Klammern getrennt + und angeführt von einem Apostroph + @tab @code{'(left-edge staff-bar)}, @code{'(1)}, + @code{'(1.0 0.25 0.5)} +@item Textbeschriftung (markup) + @tab Beliebige gültige Beschriftung + @tab @code{\markup @{ \italic "cresc." @}} +@item Moment + @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion + konstruiert + @tab @code{(ly:make-moment 1 4)}, + @code{(ly:make-moment 3 8)} +@item Zahl + @tab Eine beliebige positive oder negative Dezimalzahl + @tab @code{3.5}, @code{-2.45} +@item Paar (Zahlenpaar) + @tab Zwei Zahlen getrennt von @qq{Leerzeichen . Leerzeichen}, eingeklammert + und angeführt von einem Apostroph + @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} +@item Symbol + @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft + gültig sind, angeführt von einem Apostroph + @tab @code{'italic}, @code{'inside} +@item Unbekannt + @tab Eine Prozedur oder @code{#f} (um keine Aktion hervorzurufen) + @tab @code{bend::print}, @code{ly:text-interface::print}, + @code{#f} +@item Vektor + @tab Eine Liste mit drei Einträgen, eingeklammert und mit + Apostroph-Raute ( @code{'#}) angeführt. + @tab @code{'#(#t #t #f)} +@end multitable + + +@seealso +Erweitern: @rextend{Scheme-Übung}. + + +@node Erscheinung von Objekten +@section Erscheinung von Objekten +@translationof Appearance of objects + +In diesem Abschnitt wollen wir zeigen, wie die Kenntnisse der +vorigen Abschnitte in der Praxis angewandt werden können, +um das Aussehen des Musiksatzes zu beeinflussen. + +@menu +* Sichtbarkeit und Farbe von Objekten:: +* Größe von Objekten:: +* Länge und Dicke von Objekten:: +@end menu + + +@node Sichtbarkeit und Farbe von Objekten +@subsection Sichtbarkeit und Farbe von Objekten +@translationof Visibility and color of objects + +In Unterrichtsmaterial für den Musikunterricht wird oft +eine Partitur dargestellt, in der bestimmte Notationselemente +fehlen, so dass der Schüler die Aufgabe bekommt, die +nachzutragen. Ein einfaches Beispiel ist etwa, die +Taktlinien zu entfernen, damit der Schüler sie selber zeichnen +kann. Aber die Tatklinien werden normalerweise automatisch +eingefügt. Wie verhindern wir, dass sie ausgegeben werden? + +Bevor wir uns hieran machen, sei daran erinnert, dass +Objekteigenschaften in sogenannten @emph{Schnittstellen} +-- engl. interface -- gruppiert sind, siehe auch +@ref{Eigenschaften, die Schnittstellen besitzen können}. Das dient ganz einfach +dazu, die Eigenschaften zusammenzufassen, die üblicherweise +zusammen benötigt werden -- wenn eine davon für ein Objekt +gilt, dann auch die anderen. Manche Objekte brauchen die +Eigenschaften von der einen Schnittstelle, andere von einer +anderen. Die Schnittstellen, die die Eigenschaften von einem +bestimmten Grob beinhalten, sind in der IR unten auf der +Seite aufgelistet, die dieses Grob beschreibt. Die Eigenschaften +können betrachtet werden, indem die Seite der entsprechenden +Schnittstelle geöffnet wird. + +Zu Information, wie man Eigenschaften von Grobs findet, siehe +@ref{Eigenschaften von Layoutobjekten}. Wir benutzen also jetzt +die selbe Methode um in der IR das Layout-Objekt zu finden, +dass für die Tatklinien zuständig ist. Über die Überschriften +@emph{Backend} und @emph{All layout objects} kommen +wir zu einem Layout-Objekt mit der Bezeichnung +@code{BarLine} (engl. TaktLinie). Seine Eigenschaften +beinhalten zwei, die über die Sichtbarkeit entscheiden: +@code{break-visibility} und @code{stencil}. +@code{BarLine} unterstützt auch einige Schnittstellen, +unter anderem @code{grob-interface}, wo wir eine +@code{transparent} und eine @code{color}-Eigenschaft +finden. Alle können die Sichtbarkeit von Taktlinien (und +natürlich auch die Sichtbarkeit von vielen anderen Objekten) +beeinflussen. Schauen wir uns diese Eigenschaften eine +nach der anderen an. + +@subheading stencil (Matrize) + +@cindex Stencil-Eigenschaft +@cindex Matrizen-Eigenschaft + +Diese Eigenschaft kontrolliert die Erscheinung der Taktlinien, +indem sie das Symbol bestimmt, das ausgegeben werden soll. +Wie bei vielen anderen Eigenschaften auch, kann sie so +eingestellt werden, dass sie nichts ausgibt, indem ihr Wert +auf @code{#f} (falsch) gesetzt wird. Ein Versuch also, +wie vorher, indem wir den impliziten Kontext (@code{Voice}) +auslassen: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex stencil-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override BarLine #'stencil = ##f + c4 b8 c d16 c d8 + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Die Taktlinien werden aber immer noch angezeigt. Was ist da +falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf +die Seite, die die Eigenschaften für @code{BarLine} angibt. +Oben auf der Seite steht: @qq{Barline objects are created +by: Bar_engraver}. Schauen Sie sich die +@code{Bar_engraver}-Seite an. Unten auf der Seite steht +eine Liste der Kontexte, in denen der Takt-Engraver +funktioniert. Alle Kontexte sind @code{Staff}-Typen (also +Notensystem-Typen). Der Grund, warum der +@code{\override}-Befehl nicht funktioniert hat, liegt +also darin, dass das Taktlinie-Objekt (@code{BarLine}) sich nicht +im @code{Voice}-Kontext befindet. Wenn der Kontext +falsch angegeben wird, bewirkt der Befehl einfach gar +nichts. Keine Fehlermeldung wird ausgegeben und auch +nichts in die Log-Datei geschrieben. Versuchen wir also, +den richtigen Kontext mit anzugeben: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex stencil-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'stencil = ##f + c4 b8 c d16 c d8 + g,8 a16 b8 c d4 e16 + e8 +} +@end lilypond + +@noindent +Jetzt sind die Taktlinien wirklich verschwunden. + +Es sollte jedoch beachtet werden, dass das Setzen der +@code{stencil}-Eigenschaft auf @code{#f} zu Fehlerhinweisen führen +kann, wenn die Dimensionen des Objekts für die richtige Behandlung +benötigt werden. Zum Beispiel werden Fehler ausgegeben, wenn +die @code{stencil}-Eigenschaft des @code{NoteHead}-Objekts auf +@code{#f} gesetzt wird. Wenn dieser Fall auftritt, kann anstatt +dessen die @code{point-stencil}-Funktion benutzt werden, welche +den Stencil auf ein Objekt mit der Größe Null setzt: + +@lilypond[quote,verbatim,relative=2] +{ + c4 c + \once \override NoteHead #'stencil = #point-stencil + c4 c +} +@end lilypond + + +@subheading break-visibility (unsichtbar machen) + +@cindex break-visibility-Eigenschaft +@cindex Unsichtbar machen (break-visibility) + +Aus der Beschreibung der Eigenschaften für @code{BarLine} +in der IR geht hervor, dass die @code{break-visibility}-Eigenschaft +einen Vektor mit drei Booleschen Werten benötigt. Diese +kontrollieren jeweils, ob die Taktlinien am Ende einer Zeile, +in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben +werden. Wenn also alle Taktlinien unsichtbar sein sollen, wie in +unserem Beispiel, brauchen wir den Wert @code{'#(#f #f #f)}. +Versuchen wir es also, und berücksichtigen wir auch den +@code{Staff}-Kontext. Beachten Sie auch, dass Sie @code{#'#} +vor der öffnenden Klammer schreiben müssen: +@code{'#} wird benötigt als Teil des Wertes, um einen Vektor zu +signalisieren, und das erste @code{#} wird benötigt, um +den Wert in einem @code{\override}-Befehl anzuführen. + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex break-visibility-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'break-visibility = #'#(#f #f #f) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Auch auf diesem Weg gelingt es, die Taktlinien unsichtbar zu machen. + + +@subheading transparent (durchsichtig) + +@cindex transparent-Eigenschaft +@cindex Durchsichtig machen (transparent) + +Aus den Eigenschaftsdefinitionen auf der @code{grob-interface}-Seite +in der IR geht hervor, dass die @code{transparent}-Eigenschaft +boolesch ist. Mit @code{#t} (wahr) wird also ein Grob durchsichtig +gemacht. Im unserem Beispiel soll jetzt die Taktart durchsichtig +gemacht werden, anstatt die Taktlinien durchsichtig zu machen. +Wir brauchen also wieder die Grob-Bezeichnung für die Taktart. +Auf der @qq{All layout objects}-Seite in der IR müssen wir die +Eigenschaften des @code{TimeSignature}-Layout-Objekts suchen +Das Objekt wird vom @code{Time_signature_engraver} erstellt, +der sich auch im @code{Staff}-Kontext befindet und genauso das +@code{grob-interface} unterstützt, wie Sie sich +überzeugen können. Der Befehl, um die Taktangabe unsichtbar zu +machen, ist also: + +@cindex Taktart, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'transparent = ##t + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Die Taktangabe ist verschwunden, aber mit diesem Befehl wird ein +freier Platz gelassen, wo sich die Taktangabe eigentlich befinden +würde. Das braucht man vielleicht für eine Schulaufgabe, in der +die richtige Taktangabe eingefügt werden soll, aber in anderen +Fällen ist diese Lücke nicht schön. Um auch die Lücke zu entfernen, +muss die Matrize (stencil) der Taktangabe auf @code{#f} (falsch) +gesetzt werden: + +@cindex Taktart, Beispiel zur Veränderung +@cindex stencil-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Und der Unterschied wird deutlich: hiermit wird das gesamte Objekt +entfernt, während man mit @code{transparent} ein Objekt +unsichtbar machen kann, es aber an seinem Platz gelassen wird. + + +@subheading color (Farbe) + +@cindex color-Eigenschaft +@cindex Farb-Eigenschaft + +Abschließend wollen wir die Taktlinien unsichtbar machen, indem +wir sie weiß einfärben. (Es gibt hier eine Schwierigkeit: die weiße +Taktlinie übermalt manchmal die Taktlinien, wo sie sie kreuzt, +manchmal aber auch nicht. Sie können in den Beispielen unten +sehen, dass das nicht vorhersagbar ist. Die Einzelheiten dazu, warum +das passiert und wie sie es kontrollieren können, werden dargestellt +in @ruser{Objekte weiß malen}. Im Moment wollen wir lernen, wie +man mit Farbe arbeitet, akzeptieren Sie bitte an dieser Stelle die +Beschränkung.) + +Das @code{grob-interface} bestimmt, dass der Wert der Farb-Eigenschaft +eine Liste ist, aber es gibt keine Erklärung, was für eine Liste das +sein soll. Die Liste, die benötigt wird, ist eine Liste mit Werten in +internen Einheiten, aber damit Sie nicht wissen müssen, wie diese +aussehen, gibt es mehrere Wege, Farben anzugeben. Der erste +Weg ist es, @qq{normale} Farben zu benutzen, wie sie in der +Tabelle in @ruser{Liste der Farben} aufgelistet sind. Beachten Sie, +dass die Bezeichnungen auf Englisch sind. Um die Taktlinien auf +weiß zu setzen, können Sie schreiben: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex color-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #white + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +und die Taktlinien verschwinden in der Tat. Beachten Sie, +dass @emph{white} nicht mit einem Apostroph angeführt +wird -- es ist kein Symbol, sondern eine @emph{Funktion}. +Wenn sie aufgerufen wird, stellt sie eine Liste mit internen +Werten zu Verfügung, mit welcher die Farbe auf weiß +gestellt wird. Die anderen Farben in der Liste sind auch +Funktionen. Um sich zu überzeugen, dass der Befehl auch +wirklich funktioniert, können Sie die Farbe auf eine der +anderen Funktionen dieser Liste abändern. + +@cindex Farben, X11 +@cindex X11-Farben +@funindex x11-color + +Die zweite Art die Farbe zu ändern geschieht, indem die Liste +der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste +in @ruser{Liste der Farben}. Diesen Farben muss jedoch eine +andere Funktion vorangestellt werden, die die X11-Farbbezeichnungen +in interne Werte konvertiert: +@code{x11-color}. Das geschieht wie folgt: + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex color-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(x11-color 'white) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +In diesem Fall hat die Funktion @code{x11-color} ein Symbol +als Argument, darum muss dem Symbol ein Apostroph vorangestellt +und beide zusammen in Klammern gesetzt werden. + +@cindex RGB-Farben +@cindex Farben, RGB +@funindex rgb-color + +Es gibt noch eine dritte Funktion, die RGB-Werte in die +internen Werte übersetzt -- die @code{rgb-color}-Funktion. Sie +braucht drei Argumente, um die Stärke von Rot, Grün und +Blau darzustellen. Die Werte befinden sich zwischen +0 und 1. Um also die Farbe Rot darzustellen, muss der +Wert der Funktion lauten: @code{(rgb-color 1 0 0)}, weiß +würde sein: @code{(rgb-color 1 1 1)}. + +@cindex Taktlinie, Beispiel zur Veränderung +@cindex color-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(rgb-color 1 1 1) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Schließlich gibt es noch eine Grauskala, die zu den X11-Farben +gehört. Sie reicht von schwarz (@code{'grey0'}) bis +weiß (@code{'grey100}), in Einerschritten. Wir wollen das +illustrieren, indem alle Layout-Objekte im Beispiel +verschiede Grauschattierungen erhalten: + +@cindex StaffSymbol, Beispiel zur Veränderung +@cindex TimeSignature, Beispiel zur Veränderung +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Notenhals, Beispiel zur Veränderung +@cindex Taktlinie, Beispiel zur Veränderung +@cindex Farbeigenschaft, Beispiel +@cindex x11-Farben, Beispiel +@cindex Taktlinien, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung +@cindex Clef, Beispiel zur Veränderung +@cindex Stem, Beispiel zur Veränderung +@cindex NoteHead, Beispiel zur Veränderung +@cindex Notenkopf, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.StaffSymbol #'color = #(x11-color 'grey30) + \override Staff.TimeSignature #'color = #(x11-color 'grey60) + \override Staff.Clef #'color = #(x11-color 'grey60) + \override Voice.NoteHead #'color = #(x11-color 'grey85) + \override Voice.Stem #'color = #(x11-color 'grey85) + \override Staff.BarLine #'color = #(x11-color 'grey10) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt +verbunden sind. Es ist wichtig, den richtigen Kontext einzusetzen, +damit die Befehle funktionieren. Denken Sie daran, dass der +Kontext sich daran orientiert, wo sich der entsprechende +Engraver befindet. Den Standardkontext für Engraver finden +Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver +gehen, der es produziert und auf der Seite des Engravers in der +IR finden Sie Information, in welchem Kontext sich der +Engraver normalerweise befindet. + + +@node Größe von Objekten +@subsection Größe von Objekten +@translationof Size of objects + +@cindex Veränderung von Objektgrößen +@cindex Objektgrößen, verändern +@cindex Größen von Objekten verändern + +Als Startpunkt wollen wir wieder ein früheres Beispiel +wählen, siehe @ref{Musikalische Ausdrücke ineinander verschachteln}. Hier wurde +ein neues Notensystem erstellt, wie man es für ein @rglos{ossia} +braucht. + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Ossia-Systeme werden normalerweise ohne Schlüssel und Taktangabe +geschrieben, und sie werden etwas kleiner als das Hauptsystem gesetzt. +Wie man Schlüssel und Taktangabe entfernt, wissen wir schon: +wir setzen den Stencil von beiden auf @code{#f}: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } + { + \override Staff.Clef #'stencil = ##f + \override Staff.TimeSignature #'stencil = ##f + { f8 f c } + } + >> + r4 + } +} +@end lilypond + +@noindent +wobei ein zusätzliches Klammerpaar nach der @code{\with}-Konstruktion +erforderlich ist um sicherzugehen, dass die Modifikation und +die Noten sich auch auf das Ossia-System beziehen. + +Was für einen Unterschied macht es, ob man den @code{Staff}-Kontext +mit @code{\with} verändert, oder ob man die Stencils mit +@code{\override} beeinflusst? Der größte Unterschied liegt +darin, dass Änderungen, die mit @code{\with} eingeführt werden, +während der Erstellung des Kontextes miterzeugt werden und +als @strong{Standardeinstellungen} für diesen Kontext während seiner +gesamten Dauer gelten, während @code{\set}- oder @code{\override}-Befehle +dynamisch in die Noten eingebettet werden -- sie führen die +Änderungen synchron mit einem bestimmten Zeitpunkt in +der Musik aus. Wenn die Änderungen mit @code{\unset} +oder @code{\revert} rückgängig gemacht werden, werden +wieder die Standardwerte eingesetzt, die also die sind, die +mit einer @code{\with}-Konstruktion definiert wurden, oder +wenn hier keine definiert worden sind, die normalen +Standardwerte. + +Manche Kontexteigenschaften können nur ein einer +@code{\with}-Konstruktion verändert werden. Das sind +Eigenschaften, die nicht sinnvoll mitten im System geändert +werden können. @code{alignAboveContext} (Orientierung +über dem Kontext) und die Parallele, +@code{alignBelowContext} (Orientierung unter dem Kontext) +sind zwei derartige Eigenschaften -- wenn das Notensystem +einmal erstellt wurde, ist die Orientierung schon bestimmt +und es wäre nicht sinnvoll, sie später zu ändern. + +Die Standardwerte für Layout-Objekt-Eigenschaften können +auch in der @code{\with}-Konstruktion gesetzt werden. +Benutzen Sie einfach den normalen @code{\override}-Befehl +ohne den Kontext, denn der Kontext ist eindeutig definiert +durch die Stelle, an welcher sich @code{\with} befindet. +Wenn an dieser Stelle ein Kontext angegeben wird, produziert LilyPond +eine Fehlermeldung. + +Das obige Beispiel könnte also auch so aussehen: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + % Don't print clefs in this staff + \override Clef #'stencil = ##f + % Don't print time signatures in this staff + \override TimeSignature #'stencil = ##f + } + { f8 f c } + >> + r4 + } +} +@end lilypond + +Nun können wir daran gehen, auch wirklich die +Größe der Objekte zu ändern. + +Manche Layout-Objekte werden aus Glyphen erstellt, +die sich in einer Schriftartdatei befinden. Dazu gehören +die Notenköpfe, Versetzungszeichen, Text, Schlüssel, +Taktbezeichnung, Dynamik und Gesangstext. Ihre +Größe wird verändert, indem die +@code{font-size}- (Schriftgröße)-Eigenschaft geändert wird, wie +wir bald sehen werden. Andere Layout-Objekte, wie +Bögen -- oder allgemein Strecker-Objekte -- werden +individuell gezeichnet, es gibt dazu also keine +@code{font-size}, die mit ihnen verknüpft wäre. +Weitere Eigenschaften wie die Länge von Hälsen und +Taktlinien, Dicke von Balken und anderen Linien und +der Abstand der Notenlinien voneinander müssen auf +spezielle Weise verändert werden. + +In unserem Ossia-Beispiel wollen wir zuerst die +Schriftgröße verändern. Das ist auf zwei Arten möglich. +Entweder wir ändern die Schriftgröße für jede Objektart +mit einem eigenen Befehl, etwa: + +@example +\override NoteHead #'font-size = #-2 +@end example + +@noindent +oder wir ändern die Größe aller Schriftobjekte, indem wir +den Wert einer besonderen Eigenschaft, @code{fontSize}, +mit dem @code{\set}-Befehl bestimmen oder sie in +eine @code{\with}-Konstruktion (ohne @code{\set} einschließen. + +@example +\set fontSize = #-2 +@end example + +Beide Beispiele reduzieren die Schriftgröße um zwei Schritte +im Vergleich zum vorigen Wert, wobei jeder Schritt die +Schriftgröße um etwa 12% verändert. + +Setzen wir das also in unserem Ossia-Beispiel ein: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + % Reduce all font sizes by ~24% + fontSize = #-2 + } + { f8 f c } + >> + r4 + } +} +@end lilypond + +Das sieht aber immer noch nicht richtig aus. Die Notenköpfe +und Fähnchen sind kleiner, aber die Hälse im Vergleich +dazu zu lang und die Notenlinien zu weit auseinander. +Sie müssen auch proportional zur Schriftart verkleinert +werden. Der nächste Abschnitt behandelt diese Anpassung. + + +@node Länge und Dicke von Objekten +@subsection Länge und Dicke von Objekten +@translationof Length and thickness of objects + +@cindex Entfernungen +@cindex Dicke +@cindex Länge +@funindex magstep +@cindex Größe, verändern +@cindex Notenhalslänge, verändern +@cindex Hälse, Länge verändern +@cindex Notenlinien, Länge verändern + +Abstände und Längen werden in LilyPond üblicherweise +in Notenlinienabständen (engl. staff-spaces) gemessen. +Das ist der Abstand zwischen zwei Notenlinien im System. +Die meisten Dicken (engl. thickness) dagegen werden in +einer internen Einheit Linien-Dicke (engl. line-thickness) +gemessen. Die Linien von Dynamikklammern zum Beispiel +haben standardmäßig eine Dicke von einer Einheit +@code{line-thickness}, während die Dicke eines +Notenhalses 1,3 ist. Beachten Sie jedoch, dass sich +manche Dicken anders verhalten: die Dicke von +Balken etwa wird in Notenlinienabständen gemessen. + +Wie also werden Längen skaliert um der Schriftgröße +zu entsprechen? Das kann mit einer besonderen Funktion +@code{magstep} vorgenommen werden, die genau für +diesen Zweck vorhanden ist. Sie nimmt ein Argument auf, +die Änderung der Schriftgröße (#-2 im obigen Beispiel) +und gibt einen Skalierungsfaktor aus, der dazu dient, +Objekte proportionell zueinander zu verändern. So wird +sie benutzt: + +@cindex alignAboveContext-Eigenschaft, Beispiel +@cindex über dem System anordnen, Beispiel +@cindex @code{\with}-Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex Schlüssel, Beispiel zur Veränderung +@cindex Taktart, Beispiel zur Veränderung +@cindex Notenlinienabstände verändern +@cindex staff-space-Eigenschaft verändern +@cindex magstep-Funktion, Beispiel +@cindex Schriftart-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + fontSize = #-2 + % Reduce stem length and line spacing to match + \override StaffSymbol #'staff-space = #(magstep -2) + } + { f8 f c } + >> + r4 + } +} +@end lilypond + +@noindent +Da die Länge eines Halses und viele andere Längeneigenschaften +relativ zum Wert des Notenlinienabstands (@code{staff-space}) +errechnet werden, werden sie auch automatisch verkleinert. +Das wirkt sich jedoch nur auf die vertikale Skalierung des Ossias +aus -- die horizontale Skala ist durch das Layout des Haupsystems +bestimmt und wird also von diesen Größenänderungen nicht +betroffen. Wenn natürlich die Größe der gesamten Noten reduziert +würde, würde sich auch die horizontalen Abstände ändern. Dass +wird später im Layout-Abschnitt betrachtet. + +Mit dieser Änderung ist unser Ossia fertig. Die Größen und Längen +aller anderen Objekte können auf analoge Weise geändert +werden. + +Für kleine Größenänderungen, wie in dem obigen Beispiel, +braucht die Dicke der verschiedenen Linien, wie Taktlinien, +Notenlinien, Balken, Dynamikklammern usw. normalerweise +keine spezielle Anpassung. Wenn die Dicke eines bestimmten +Layout-Objektes angepasst werden muss, kann man das erreichen, +indem die entsprechende @code{thickness}-Eigenschaft des +Objekts mit @code{\override} verändert wird. Ein Beispiel, +wie man die Dicke von Bögen ändert, wurde schon gezeigt, +siehe @ref{Eigenschaften von Layoutobjekten}. Die Dicke aller +gezeichneten Objekte (die also nicht aus einer Schriftart +stammen) können auf gleiche Weise geändert werden. + + +@node Positionierung von Objekten +@section Positionierung von Objekten +@translationof Placement of objects + +@menu +* Automatisches Verhalten:: +* within-staff (Objekte innerhalb des Notensystems):: +* Objekte außerhalb des Notensystems:: +@end menu + + +@node Automatisches Verhalten +@subsection Automatisches Verhalten +@translationof Automatic behavior + +@cindex within-staff-Objekte +@cindex outside-staff-Objekte +@cindex Objekte innerhalb des Notensystems +@cindex Objekte außerhalb des Notensystems + +Es gibt Objekte der Notation, die zum Notensystem gehören, und +andere, die außerhalb des Systems gesetzt werden müssen. Sie +werden @code{within-staff}-Objekte bzw. +@code{outside-staff}-Objekte genannt. + +@code{within-staff}-Objekte werden innerhalb des Notensystems +(engl. staff) gesetzt: Notenköpfe, Hälse, Versetzungszeichen +usw. Ihre Position ist üblicherweise durch die notierte Musik +bestimmt -- sie werden vertikal auf bestimmten Linien notiert +oder sind an andere Objekte gebunden, die vertikal festgelegt +sind. Kollisionen von Notenköpfen, Hälsen und Versetzungszeichen +werden normalerweise automatisch vermieden. Es gibt +Befehle, um dieses automatische Verhalten zu verändern, wie +unten gezeigt werden soll. + +Objekte, die außerhalb des Notensystems gesetzt werden, sind +unter Anderem Übungsmarkierungen, Text und Dynamikzeichen. +LilyPonds Regel für ihre vertikale Positionierung lautet, sie so nah wie +möglich am Notensystem zu setzen, aber nicht so nah, dass +sie mit anderen Objekten kollidieren. Dabei wird die +@code{outside-staff-priority}-(Priorität außerhalb des Notensystems)-Eigenschaft +eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden +sollen. + +Zuerst werden alle Innersystemobjekte von LilyPond gesetzt. +Dann werden die Objekte außerhalb des Systems nach +ihrer +@code{outside-staff-priority} geordnet. Die @code{outside-staff}-Objekte +werden dann nacheinander gesetzt, mit der niedrigsten +Priorität beginnend, und so gesetzt, dass sie nicht mit anderen +Objekten kollidieren, die schon gesetzt wurden. Wenn also zwei +@code{outside-staff}-Objekte um den selben Platz streiten, +wird das mit der geringeren @code{outside-staff-priority} näher +am System gesetzt werden. Wenn zwei Objekte die selbe Priorität +haben, wird das näher am System gesetzt, welches zuerst +auftritt. + +Im folgenden Beispiel haben alle Textbeschriftungen die gleiche +Priorität (weil sie nicht explizit gesetzt worden ist). Beachten Sie, +dass @qq{Text3} wieder dicht am System gesetzt wurde, weil +er unter @qq{Text2} passt. + +@cindex Textbeschriftungsbeispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" +c2^"Text3" +c2^"Text4" +@end lilypond + +Notensysteme werden in den Standardeinstellungen auch so dicht +beieinander gesetzt wie es möglich ist (mit einem minimalen Abstand). +Wenn Noten sehr weit aus einem System herausragen, zwingen sie +das nächste System weiter weg, wenn eine Kollision drohen würde. +Im nächsten Beispiel sehen Sie, wie Noten auf zwei Systemen +@qq{ineinander greifen}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \relative c' { c4 a, } + } + \new Staff { + \relative c'''' { c4 a, } + } +>> +@end lilypond + + +@node within-staff (Objekte innerhalb des Notensystems) +@subsection within-staff (Objekte innerhalb des Notensystems) +@translationof Within-staff objects + +Es wurde schon gezeigt, wie die Befehle @code{\voiceXXX} die Richtung +von Bögen, Fingersatz und allen anderen Objekten beeinflusst, +die von der Richtung der Notenhälsen abhängen. Diese Befehle +sind nötig, wenn polyphone Musik geschrieben wird, damit sich +die einzelnen Melodielinien klar abzeichnen. Es kann aber von Zeit +zu Zeit nötig sein, dieses automatische Verhalten zu verändern. Das +kann entweder für ganze Abschnitte, aber genauso auch nur für eine +einzelne Note vorgenommen werden. Die Eigenschaft, die die Richtung +bestimmt, ist die @code{direction}-Eigenschaft jedes Layout-Objekts. +Es soll erst erklärt werden, was sie bewirkt und dann eine Anzahl +an fertigen Befehlen für die üblicheren Situationen präsentiert werden, +mit denen Sie gleich loslegen können. + +Manche Layout-Objekte, wie Legato- und Bindebögen, biegen sich +oder zeigen entweder nach oben oder nach unten, andere, wie +Hälse und Fähnchen, verändern auch die Position rechts oder links, +je nach der Richtung, in die sie zeigen. Das wird automatisch +berücksichtigt, wenn die @code{direction}-Eigenschaft verändert +wird. + +@funindex down +@funindex up +@funindex center +@funindex neutral +@cindex hoch-Eigenschaft +@cindex runter-Eigenschaft +@cindex zentriert-Eigenschaft +@cindex neutral-Eigenschaft + +Das folgende Beispiel zeigt im ersten Takt die Standardeinstellung +für Hälse, die bei hohen Noten nach unten zeigen und bei tiefen +noten nach oben. Im nächsten Takt werden alle Hälse nach unten +gezwungen, im dritten Takt nach oben, und im vierten wird wieder +der Standard eingestellt. + +@cindex Notenhals, Beispiel zur Veränderung +@cindex Richtungseigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +a4 g c a +\override Stem #'direction = #DOWN +a4 g c a +\override Stem #'direction = #UP +a4 g c a +\revert Stem #'direction +a4 g c a +@end lilypond + +Hier werden die Konstanten @code{DOWN} und @code{UP} +eingesetzt. Sie haben die Werte @code{-1} bzw. @code{+1}, und +diese numerischen Werte können ebenso benutzt werden. Auch +der Wert @code{0} kann in manchen Fällen benutzt werden. Er +bedeutet für die Hälse das gleiche wie @code{UP}, für einige +andere Objekte jedoch @qq{zentriert}. Es gibt hierzu die Konstante +@code{CENTER}, die den Wert @code{0} hat. + +Es gibt aber einfachere Befehle, die normalerweise benutzt werden. +Hier eine Tabelle der häufigsten. Die Bedeutung des Befehls wird +erklärt, wenn sie nicht selbstverständlich ist. + +@multitable @columnfractions .2 .2 .25 .35 +@headitem Runter/Links + @tab Rauf/Rechts + @tab Rückgängig + @tab Wirkung +@item @code{\arpeggioArrowDown} + @tab @code{\arpeggioArrowUp} + @tab @code{\arpeggioNormal} + @tab Arpeggio mit Pfeil nach unten, oben oder ohne Pfeil +@item @code{\dotsDown} + @tab @code{\dotsUp} + @tab @code{\dotsNeutral} + @tab Richtung der Verschiebung eines Punktes, um Notenlinien zu vermeiden +@item @code{\dynamicDown} + @tab @code{\dynamicUp} + @tab @code{\dynamicNeutral} + @tab Position der Dynamik-Bezeichnung relativ zum System +@item @code{\phrasingSlurDown} + @tab @code{\phrasingSlurUp} + @tab @code{\phrasingSlurNeutral} + @tab Befehl für Richtung von Phrasierungsbögen +@item @code{\slurDown} + @tab @code{\slurUp} + @tab @code{\slurNeutral} + @tab Befehl für Richtung von Legatobögen +@item @code{\stemDown} + @tab @code{\stemUp} + @tab @code{\stemNeutral} + @tab Befehl für Richtung von Hälsen +@item @code{\textSpannerDown} + @tab @code{\textSpannerUp} + @tab @code{\textSpannerNeutral} + @tab Position von Textbeschriftungen, die als Strecker eingegeben werden +@item @code{\tieDown} + @tab @code{\tieUp} + @tab @code{\tieNeutral} + @tab Befehl für Richtung von Bindebögen +@item @code{\tupletDown} + @tab @code{\tupletUp} + @tab @code{\tupletNeutral} + @tab Befehl für Richtung von Klammern/Zahlen der N-tolen +@end multitable + +Diese vordefinierten Befehl können allerdings @strong{nicht} +zusammen mit @code{\once} benutzt werden. Wenn Sie die +Wirkung eines Befehl auf eine einzige Noten begrenzen wollen, +müssen Sie den entsprechenden +@code{\once \override}-Befehl benutzen oder den definierten +Befehl, gefolgt von dem entsprechenden neutralisierenden +@code{xxxNeutral}-Befehl nach der Note. + + +@subheading Fingersatz + +@cindex Fingersatz, Positionierung +@cindex Fingersatz, Akkorde + +Die Positionierung von Fingersatz kann auch durch den Wert +seiner @code{direction}-Eigenschaft beeinflusst werden, aber +eine Veränderung von @code{direction} hat keinen Einfluss auf +Akkorde. es gibt auch hier +besondere Befehle, mit denen der Fingersatz von einzelnen +Noten in Akkorden kontrolliert werden kann, wobei mögliche +Positionen über, unter der Note und rechts bzw. links von +ihr sind. + +Zunächst die Wirkungsweise von @code{direction} auf +den Fingersatz: im ersten Takt der Standard, dann +die Wirkung von @code{DOWN} (runter) und @code{UP} +(hinauf). + +@cindex Fingersatz, Beispiel zur Veränderung +@cindex direction-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 +\override Fingering #'direction = #DOWN +c4-5 a-3 f-1 c'-5 +\override Fingering #'direction = #UP +c4-5 a-3 f-1 c'-5 +@end lilypond + +Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch +nicht die einfachste Art, Fingersatzbezeichnungen manuell über oder +unter das System zu setzen. Normalerweise bietet es sich an, +@code{_} oder @code{^} anstelle von @code{-} vor der Fingersatz-Zahl +zu benutzen. Hier das vorherigen Beispiel mit dieser Methode: + +@cindex Fingersatz-Beispiel + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 +c4_5 a_3 f_1 c'_5 +c4^5 a^3 f^1 c'^5 +@end lilypond + +Die @code{direction}-Eigenschaft wirkt sich nicht auf +Akkorde aus, während die Präfixe @code{_} und @code{^} funktionieren. +Standardmäßig wird der Fingersatz automatisch entweder +über oder unter dem Akkord gesetzt: + +@cindex Fingersatz-Beispiel + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +@noindent +aber das kann manuell geändert werden, um einzelne Fingersatzanweisungen +nach oben oder unten zu zwingen: + +@cindex Fingersatz-Beispiel + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +Noch bessere Kontrolle über die Positionierung von Fingersatz für +einzelne Noten in einem Akkord ist mit dem +@code{\set fingeringOrientations}-Befehl möglich. Die Syntax +lautet: + +@example +@code{\set fingeringOrientations = #'([up] [left/right] [down])} +@end example + +@noindent +@code{\set}wird benutzt, weil @code{fingeringOrientations} eine +Eigenschaft des @code{Voice}-Kontextes ist, erstellt und eingesetzt +vom @code{New_fingering_engraver}. + +Die Eigenschaft kann als Wert eine Liste mit einem bis drei Einträgen +haben. Damit wird bestimmt, ob Fingersatz oberhalb gesetzt +werden kann (wenn @code{up} in der Liste auftaucht), darunter +(wenn@code{down} auftaucht), links (wenn @code{left} auftaucht) +oder rechts (wenn @code{right} auftaucht). Wenn andererseits +ein Wert nicht auftaucht, wir auch kein Fingersatz in dieser Richtung +gesetzt. LilyPond nimmt diese Beschränkung als Bedingung und +errechnet die besten Positionen für die Noten des nächsten Akkordes. +Die seitliche Positionierung kann nur auf einer Seite des Akkordes +geschehen, nicht auf beiden gleichzeitig, es kann also nur entweder +@code{left} oder @code{right} auftreten, nicht beide gleichzeitig. + +@warning{Damit eine einzelne Note mit diesem Befehl beeinflusst werden +kann, muss sie als ein @qq{Ein-Noten-Akkord} geschrieben +werden, indem einfache spitze Klammern um die Note positioniert +werden.} + +Hier ein paar Beispiele: + +@cindex Fingersatz-Beispiel +@cindex @code{\set}, Benutzungsbeispiel +@cindex fingerOrientations-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,relative=1] +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + +@noindent +Wenn die Fingersatzbezeichnung zu gedrungen aussieht, +kann auch die Schriftgröße (@code{font-size}) verringert +werden. Der Standardwert kann aus dem +@code{Fingering}-Objekt in der IR entnommen werden, +er ist @code{-5}, versuchen wir es also mit @code{-7}. + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\override Fingering #'font-size = #-7 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + + + +@node Objekte außerhalb des Notensystems +@subsection Objekte außerhalb des Notensystems +@translationof Outside-staff objects + +Objekte außerhalb des Notensystems werden automatisch gesetzt, +um Kollisionen zu vermeiden. Objekten mit einem geringeren +Prioritätswert der Eigenschaft @code{outside-staff-priority} +werden näher an das System gesetzt, und andere Objekte außerhalb +des Systems werden dann soweit vom System entfernt gesetzt, dass +Zusammenstöße vermieden werden. Die +@code{outside-staff-priority}-Eigenschaft ist im +@code{grob-interface} definiert und ist also eine Eigenschaft +von allen Layout-Objekten. Standardmäßig ist sie für alle Objekte +auf falsch (@code{#f}) gesetzt; dieser Wert wird in einen numerischen +Wert dem Objekt entsprechend geändert, wenn das Objekt für die +Notenausgabe erstellt wird. Die Tabelle unten zeigt die +Standardwerte für die meistbenutzten @code{outside-staff}-Objekte. + +@cindex spanners +@cindex Strecker + +Achtung bei einigen ungewöhnlichen Objektbezeichnungen: Strecker-Objekte +werden automatisch erstellt, um die vertikale Position von Grobs +zu kontrollieren, die an unterschiedlichen musikalischen Momenten +beginnen und enden (könnten). Wenn also @code{outside-staff-priority} +des darunterliegenden Grobs geändert wird, hat das keine Auswirkung. +Zum Beispiel bringt das Ändern von @code{outside-staff-priority} +des @code{Hairpin}-(Dynamikklammer)-Objekts keine Änderung in der +vertikalen Position von Crescendo-Klammern -- anstatt dessen muss +@code{outside-staff-priority} des hiermit assoziierten +@code{DynamicLineSpanne}-Objekts geändert werden. Dieser +@code{\override}-Befehl muss zu Beginn des Streckers gesetzt werden, +welcher womöglich mehrere verbundene Dynamikklammern und Dynamikbezeichnung +beinhaltet. + +@multitable @columnfractions .3 .3 .3 +@headitem Layout-Objekt + @tab Priorität + @tab Kontrolliert Position von: +@item @code{RehearsalMark} + @tab @code{1500} + @tab Übungszeichen +@item @code{MetronomeMark} + @tab @code{1000} + @tab Metronomzeichen +@item @code{VoltaBracketSpanner} + @tab @code{600} + @tab Volta-Wiederholungsklammern +@item @code{TextScript} + @tab @code{450} + @tab Textbeschriftung +@item @code{MultiMeasureRestText} + @tab @code{450} + @tab Text über Ganztaktpausen +@item @code{OttavaBracket} + @tab @code{400} + @tab Ottava (Oktavierungsklammern) +@item @code{TextSpanner} + @tab @code{350} + @tab Text-Strecker +@item @code{DynamicLineSpanner} + @tab @code{250} + @tab Alle Dynamik-Bezeichnungen +@item @code{BarNumber} + @tab @code{ 100} + @tab Taktzahlen +@item @code{TrillSpanner} + @tab @code{50} + @tab Triller-Strecker +@end multitable + +Hier ein Beispiel, das die Standardpositionierung von einigen +Objekten zeigt. + +@cindex Text-Strecker +@cindex Text-Spanner +@funindex \startTextSpan +@funindex \stopTextSpan +@funindex startTextSpan +@funindex stopTextSpan +@cindex Ottava-Klammer +@cindex Oktavierungsklammer + +@cindex TextSpanner, Beispiel zur Veränderung +@cindex bound-details-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text and hairpin +c4\pp\< +c4 +% Add Text Script +c4^Text +c4 c +% Add Dynamic Text and terminate hairpin +c4\ff c \stopTextSpan +% Stop Ottava Bracket +\ottava #0 +c,4 c c c +@end lilypond + +Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h. +Text mit Bindestrichen, der sich über eine bestimmte Länge +erstreckt. Der Strecker beginnt mit dem +@code{\startTextSpan}-Befehl und endet mit dem +@code{\stopTextSpan}-Befehl, und das Format des Textes +wird mit dem @code{\override TextSpanner}-Befehl bestimmt. +Mehr Einzelheiten siehe @ruser{Text mit Verbindungslinien}. + +Im Beispiel wird auch gezeigt, wie Oktavierungsklammern +(Ottava) erstellt werden. + +@cindex Taktzahlposition verändern +@cindex Verändern der Taktzahlposition +@cindex Position der Taktzahl, verändern +@cindex Metronom-Bezeichnungsposition verändern +@cindex Verändern der Metronom-Bezeichnungsposition +@cindex Übungszeichenposition verändern +@cindex Verändern der Übungszeichenposition + +Wenn die Standardwerte der @code{outside-staff-priority} nicht +die Positionierung hervorrufen, die Sie wünschen, kann die +Priorität eines jeden Objektes geändert werden. Als Beispiel +wollen wir zeigen, wie sich die Oktavierungsklammer unter +den Textstrecker des vorigen Beispiels setzen lässt. Wir müssen +nur die Priorität des +@code{OttavaBracket}-Objektes in der IR oder der Tabelle oben +herausfinden und einen kleineren Wert angeben als der Wert, den +das @code{TextSpanner}-(Strecker)-Objekt bekommt, wobei noch daran +zu denken ist, dass @code{OttavaBracket} im @code{Staff}-Kontext +erstellt wird: + +@cindex TextSpanner, Beispiel zur Veränderung +@cindex bound-details-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Place following Ottava Bracket below Text Spanners +\once \override Staff.OttavaBracket #'outside-staff-priority = #340 +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text +c4\pp +% Add Dynamic Line Spanner +c4\< +% Add Text Script +c4^Text +c4 c +% Add Dynamic Text +c4\ff c \stopTextSpan +% Stop Ottava Bracket +\ottava #0 +c,4 c c c +@end lilypond + +Beachten Sie, dass einige dieser Objekte, insbesondere Taktzahlen, +Metronomzeichen und Übungszeichen standardmäßig im @code{Score}-Kontext +zu Hause sind; benutzen Sie also den richtigen Kontext, wenn sie +deren Einstellungen verändern wollen. + +@cindex Legatobögen und outside-staff-priority +@cindex Legatobögen und Artikulationszeichen +@cindex Artikulationszeichen und Legatobögen + +Legatobögen werden als Innersystem-Objekte klassifiziert, aber +sie erscheinen oft auch über dem System, wenn die Noten, an die +sie verbunden sind, sehr hoch im System notiert sind. Dadurch +können Außersystem-Objekte, wie Artikulationszeichen, zu hoch +gerückt werden. Die @code{avoid-slur}-Eigenschaft hat nur +eine Auswirkung, wenn auch die @code{outside-staff-priority} +auf @code{#f} gesetzt ist. Alternativ kann die +@code{outside-staff-priority} des Legatobogens auf einen +numerischen Wert gesetzt werden, sodass er mit anderen +Außersystem-Objekten anhand dieses Wertes gesetzt wird. +Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht: + +@lilypond[quote,verbatim,relative=2] +c4( c^\markup { \tiny \sharp } d4.) c8 +c4( +\once \override TextScript #'avoid-slur = #'inside +\once \override TextScript #'outside-staff-priority = ##f +c4^\markup { \tiny \sharp } d4.) c8 +\once \override Slur #'outside-staff-priority = #500 +c4( c^\markup { \tiny \sharp } d4.) c8 +@end lilypond + +Eine Änderung der @code{outside-staff-priority} kann auch dazu +benutzt werden, die vertikale Plazierung von individuellen Objekten +zu kontrollieren, auch wenn das Ergebnis nicht immer optimal +ist. Im nächsten Beispiel soll @qq{Text3} oberhalb von @qq{Text4} +gesetzt werden, das Beispiel wurde behandelt in +@ref{Automatisches Verhalten}. Der Wert der Priorität muss also für +die Eigenschaft @code{TextScript} entweder in der IR oder in der +Tabelle oben festgestellt werden und dann die Priorität für +@qq{Text3} höher eingestellt werden: + +@cindex TextScript, Beispiel zur Veränderung +@cindex outside-staff-priority-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +\once \override TextScript #'outside-staff-priority = #500 +c2^"Text3" +c2^"Text4" | +@end lilypond + +Damit wird zwar @qq{Text3} ganz richtig über @qq{Text4} +platziert, aber auch über @qq{Text2}, und @qq{Text4} +wird jetzt weiter unten gesetzt. Eigentlich sollten ja alle +diese Anmerkungen gleichweit vom System entfernt sein. +Dazu muss offensichtlich horizontal etwas Platz gemacht +werden. Das kann erreicht werden mit dem +@code{textLengthOn}-(Textlänge an)-Befehl. + +@subheading \textLengthOn (Textlänge berücksichtigen) + +@cindex Noten, durch Text gespreizt +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +Standardmäßig wird Text, der mit dem Beschriftungsbefehl +@code{\markup} bzw. Äquivalenten erstellt wird, kein +zusätzlicher Platz in Bezug auf die Positionierung der Noten +zugestanden. Der @code{\textLengthOn}-Befehl ändert +dieses Verhalten, so dass die Noten gespreizt werden, wenn +die Breite des Textes es erfordert: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\textLengthOn % Cause notes to space out to accommodate text +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl +rückgängig gemacht. Erinnern Sie sich, dass @code{\once} nur mit +@code{\override}, @code{\set}, @code{\revert} oder @code{unset} +funktioniert, der Befehl kann also nicht zusammen mit +@code{\textLengthOn} benutzt werden. + +@cindex Textbeschriftung, Vermeidung von Zusammenstößen +@cindex Zusammenstöße vermeiden mit Textbeschriftung + +Textbeschriftung vermeidet auch Noten, die über das System hinausstehen. +Wenn das nicht gewünscht ist, kann die automatische Verschiebung +nach oben hin auch vollständig ausgeschaltet werden, indem die +Priorität auf @code{#f} gesetzt wird. Hier ein Beispiel, wie +eine Textbeschriftung mit diesen Noten reagiert: + +@cindex Textbeschriftung, Beispiel zur Veränderung +@cindex outside-staff-priority-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +% This markup is short enough to fit without collision +c2^"Tex" c'' | +R1 | + +% This is too long to fit, so it is displaced upwards +c,,2^"Text" c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +c,,2^"Long Text " c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\textLengthOn % and turn on textLengthOn +c,,2^"Long Text " % Spaces at end are honored +c''2 | +@end lilypond + + +@subheading Dynamik + +@cindex Verändern der Positionierung von Dynamikzeichen +@cindex Dynamikzeichen: Positionierung verändern + +Dynamikbezeichnung wird üblicherweise unter dem System +gesetzt, kann aber auch nach oben mit dem Befehl +@code{dynamicUp} gezwungen werden. Die Bezeichnung +wird vertikal relativ zu der Note positioniert, an die sie angefügt +wurde. Sie wird vertikal variabel gesetzt in Bezug zu +Innersystemobjekten wie Bögen oder Taktnummern. Damit +können oft recht gute Resultate erreicht werden, wie im +folgenden Beispiel: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\clef "bass" +\key aes \major +\time 9/8 +\dynamicUp +bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! +ees,2.~\)\mf ees4 r8 +@end lilypond + +Wenn aber Noten und Dynamikzeichen sehr dicht beieinander +stehen, positioniert die automatische Kollisionsvermeidung +später kommende Dynamikzeichen weiter weg, was allerdings +nicht immer die beste Möglichkeit ist, wie in dem folgenden, +etwas gewollten Beispiel zu sehen ist: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +a4\f b\mf c\mp b\p | +@end lilypond + +@noindent +Wenn eine ähnliche Situation in @qq{echter} Musik auftaucht, +kann es nötig sein, die Noten etwas zu spreizen, damit die +Dynamikzeichen alle auf der selben vertikalen Position +gesetzt werden können. Dieses Verhalten war im Falle von +Textbeschriftungen möglich mit dem @code{\textLengthOn}-Befehl, +aber es gibt keinen entsprechenden Befehl für Dynamik. Wir +müssen also unsere eigenen Befehle mit @code{\override} +konstruieren. + + +@subheading Verändern der Größe von grobs + +@cindex Grob, Größenveränderung +@cindex Größenveränderung von grobs + +Zuallererst müssen wir lernen, wie die Größe von Grobs verändert +wird. Alle Grobs besitzen einen Referenzpunkt, der +benutzt wird, um ihre Position in Relation zu ihnen übergeordneten +Objekten zu bestimmen. Dieser Punkt innerhalb des Grobs wird dann +auf einer horizontalen Position (@code{X-offset}) und einer +vertikalen Position (@code{Y-offset}) ausgerichtet, immer bezüglich +des übergeordneten Objektes. Eine horizontale Strecke wird +durch ein Zahlenpaar angegeben (@code{X-extent}), welche +die linke und rechte Grenze relativ zum übergeordneten Objekt +bezeichnen. Die vertikale Strecke wir genauso durch ein +Zahlenpaar (@code{Y-extent}) definiert. Diese Eigenschaften +gehören zu allen Grobs, die das +@code{grob-interface} unterstützen. + +@cindex @code{extra-spacing-width} + +Standardmäßig haben Außersystemobjekte eine Länge von Null, +so dass sie sich in horizontaler Richtung überlappen können. Das +geschieht, indem dem linken Rand Unendlich zugewiesen wird +und dem rechten Rand minus Unendlich (der Code der +@code{extra-spacing-width}-(zusätzliche Positionierungslänge)-Eigenschaft +lautet: @code{'(+inf.0 . -inf.0)}). +Damit sich diese Objekte also horizontal nicht überschneiden, muss +der Wert von @code{extra-spacing-width} auf +@code{'(0 . 0)} gesetzt werden, sodass die wirkliche Länge eines +Objektes zur Geltung kommt. Mit diesem Befehl wird das für +Dynamik-Zeichen erledigt: + +@example +\override DynamicText #'extra-spacing-width = #'(0 . 0) +@end example + +@noindent +Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert: + +@cindex DynamicText, Beispiel zur Veränderung +@cindex extra-spacing-width-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +\override DynamicText #'extra-spacing-width = #'(0 . 0) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Damit werden die Dynamik-Zeichen also wirklich nebeneinander +gesetzt, aber es gibt noch zwei Probleme. Die Zeichen sollten +etwas weiter außeinander stehen und es wäre gut, wenn sie alle +den gleichen Abstand zum System hätte. Das erste Problem ist +einfach behoben. Anstatt der @code{extra-spacing-width}-Eigenschaft +Null zuzuweisen, können wir auch einen etwas größeren Wert +wählen. Die Einheit wird gemessen in dem Abstand zwischen zwei +Notenlinien, es scheint also gut, den rechten und linken +Rand eine halbe Einheit zu vergrößern: + +@cindex DynamicText, Beispiel zur Veränderung +@cindex extra-spacing-width-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 staff space +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Das sieht schon besser aus, aber es wäre noch besser, wenn die +Dynamik-Zeichen alle an einer Linie ausgerichtet wären, anstatt +höher und tiefer zu sitzen. Das kann mit der +@code{staff-padding}-Eigenschaft erreicht werden, +die wir uns im folgenden Abschnitt genauer anschauen werden. + + + +@node Kollision von Objekten +@section Kollision von Objekten +@translationof Collisions of objects + +@menu +* Verschieben von Objekten:: +* Überlappende Notation in Ordnung bringen:: +* Beispiele aus dem Leben:: +@end menu + +@node Verschieben von Objekten +@subsection Verschieben von Objekten +@translationof Moving objects + +@cindex Verschieben von überschneidenden Objekten +@cindex Verschieben von Zusammenstößen +@cindex Zusammenstöße vermeiden +@cindex Objekte, verschieben von Zusammestößen +@cindex Vermeiden von Zusammenstößen + +Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht +perfekt. Einige Notationselemente können sich überschneiden. Das +ist nicht schön, aber zum Glück sehr selten. Normalerweise müssen +die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben +werden -- sie könnten besser aussehen, wenn sie etwas zusätzlichen +Platz erhalten. + +Es gibt im Grunde drei Herangehensweisen, überlappende Notation +zu verbessern. Man sollte sie in der folgenden Reihenfolge +anwenden: + +@enumerate +@item +Die @strong{Richtung} eines der überlappenden Objekte kann +geändert werden, indem die vordefinierten Befehle für +Innersystemobjekte verwendet werden, wie beschrieben in +@ref{within-staff (Objekte innerhalb des Notensystems)}. Hälse, Bögen, Balken, Dynamik-Zeichen +und Triolen können auf diese Weise einfach umgeordnet +werden. Beschränkt ist diese Methode insofern, als es nur +zwei Möglichkeiten zur Veränderung gibt: oben oder unten. + +@item +Die @strong{Objekteigenschaft}, die LilyPond benutzt um die +Layout-Objekte zu platzieren, können mit dem +@code{\override}-Befehl positioniert werden. Die Vorteile +von Änderungen dieser Art sind a) dass einige Objekte +automatisch verschoben werden, wenn es nötig ist Platz zu +schaffen und b) ein einziges @code{\override} sich auf +alle Fälle eines Objekttyps bezieht. Zu diesen Eigenschaften +gehören: + +@itemize + +@item +@code{direction} (Richtung) + +Das wurde schon detailliert behandelt, siehe +@ref{within-staff (Objekte innerhalb des Notensystems)}. + +@item +@code{padding}, @code{right-padding}, @code{staff-padding} (Verschiebung) + +@cindex Padding-Eigenschaft +@cindex right-padding-Eigenschaft +@cindex staff-padding-Eigenschaft +@cindex Verschieben (padding) +@cindex Füllung (padding) +@cindex padding (Füllung) + +Wenn ein Objekt platziert wird, bestimmt der Wert seiner +@code{padding}-(Füllungs)-Eigenschaft die Größe des +Abstandes, der zwischen dem Objekt selber und dem +Objekt, relativ zu welchem es positioniert wird, gelassen +werden muss. Dabei zählt der @code{padding}-Wert +des Objektes, das platziert werden soll, der @code{padding}-Wert +des Objektes, das schon gesetzt wurde, wird hingegen +ignoriert. Abstände mit @code{padding} können zu +allen Objekten hinzugefügt werden, die das +@code{side-position-interface} unterstützen. + +Anstelle von @code{padding} wird die Position von +Versetzungszeichengruppen durch die Eigenschaften +@code{right-padding} bestimmt. Diese Eigenschaft wird im +@code{AccidentalPlacement}-(Versetzungszeichen-Positionierungs)-Objekt +gefunden, das sich innerhalb des @strong{Staff}-Kontexts +befindet. Während des Notensatzes werden die Notenköpfe +zuerst gesetzt und dann die Versetzungszeichen, wenn denn +welche gesetzt werden, durch die @code{right-padding}-Eigenschaft +auf die linke Seite der Notenköpfe positioniert, um die Entfernung +von den Notenköpfen und zwischen den einzelnen Versetzungszeichen zu +bestimmen. Also nur die @code{right-padding}-(Verschiebung nach rechts)-Eigenschaft +des @code{AccidentalPlacement}-Objekts hat Einfluss auf die +Positionierung der Versetzungszeichen. + +Die @code{staff-padding}-(Verschiebung zum System)-Eigenschaft +ist sehr ähnlich wie die @code{padding}-Eigenschaft: +@code{padding} bestimmt den Minimalabstand zwischen +einem Objekt, das das @code{side-position-interface} +unterstützt, und dem nächsten anderen Objekt (normalerweise +die Note oder Notenlinie); @code{staff-padding} dagegen +wirkt nur auf Objekte die immer außerhalb des Notensystems +sind -- damit wird der minimale Abstand bestimmt, der +zwischen dem Objekt und dem Notensystem gelassen werden +soll. @code{staff-padding} hat also @strong{keinen Einfluss} +auf Objekte, die relativ zu einer Note positioniert werden, sondern +nur auf solche, die zum System relativ stehen. Wenn es mit einem +anderen Objekt eingesetzt wird, erhält man keine Fehlermeldung, aber +der Befehl hat auch keine Auswirkungen. + +Um herauszufinden, welche @code{padding}-Eigenschaft für +das bestimmte Objekt nötig, ist, das Sie verschieben wollen, +müssen Sie in der IR nach den Objekt-Eigenschaften schauen. +Dabei sollten Sie bedenken, dass sich die @code{padding}-Eigenschaften +nicht unbedingt in dem Objekt selber befinden, schauen Sie +also auch in Objekten nach, die offensichtlich Ähnlichkeiten +haben. + +Alle @code{padding}-Werte werden in Notenlinienabständen +gemessen. Für die meisten Objekte ist der Wert ungefähr auf +1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt). +Der Wert kann geändert werden, wenn ein größerer (oder +kleinerer) Abstand gewünscht wird. + +@item +@code{self-alignment-X} (Selbstpositionierung) + +@cindex self-alignment-X-Eigenschaft +@cindex Selbstpositionierung von Objekten +@cindex Ausrichtung von Objekten + +Diese Eigenschaft kann benutzt werden, um ein Objekt +nach links, rechts oder zentriert an dem Referenzpunkt des Objekts +auszurichten, an das es verknüpft ist. Es kann bei allen +Objekten benutzt werden, die das @code{self-alignment-interface} +unterstützen. Das sind üblicherweise Objekte, die Text +enthalten. Die möglichen Werte der Eigenschaft sind @code{LEFT}, +@code{RIGHT} oder @code{CENTER}. Alternativ kann ein +numerischer Wert zwischen @code{-1} und @code{+1} +bestimmt werden: @code{-1} heißt linksbündig, @code{+1} +rechtsbündig und Zahlen dazwischen bewegen den Text +schrittweise von links nach rechts. Zahlen größer als +@code{1} können angegeben werden, um den Text +noch weiter nach links zu bewegen, oder weniger als @code{-1}, +um ihn weiter nach rechts zu schieben. Eine Änderung +um @code{1} des Wertes entspricht einer Bewegung um +die halbe Textbreite. + +@item +@code{extra-spacing-width} (zusätzliche Breite) + +@cindex extra-spacing-width-Eigenschaft + +Diese Eigenschaft steht für alle Objekte zur Verfügung, die +das @code{item-interface} unterstützen. Es braucht zwei +Zahlen als Argument, die erste wird zur rechten Ausdehnung, +die zweite zur linken Ausdehnung hinzugerechnet. Negative +Zahlen verschieben die Ausdehnung nach rechts, positive nach +links, um also ein Objekt zu verbreitern, muss die erste +Zahl negativ und die zweite positiv sein. Allerdings beachten +nicht alle Objekte beide Zahlen. Das +@code{accidental}-(Versetzungszeichen)-Objekt etwa beachtet +nur erste Zahl für die linke Ausdehnung. + +@item +@code{staff-position} (Notensystempositionierung) + +@cindex staff-position-Eigenschaft + +@code{staff-position} ist eine Eigenschaft des +@code{staff-symbol-referencer-interface}, die von Objekten unterstützt +wird, die relativ zum Notensystem (engl. staff) positioniert werden. +Hiermit wird die vertikale Position eines Objekts relativ zur +Mittellinie des Systems in halben Notenlinienabständen angegeben. +Das ist sehr nützlich, um Zusammenstöße zwischen Layout-Objekten +wie Ganztaktpausen, Bögen und Noten in verschiedenen Stimmen +zu lösen. + +@item +@code{force-hshift} (vertikale Verschiebung erzwingen) + +@cindex force-hshift-Eigenschaft + +Eng beieinander stehende Noten in einem Akkord oder Noten, die zum +gleichen Zeitpunkt in unterschiedlichen Stimmen stehen, werden +in zwei oder manchmal auch mehr Kolumnen gesetzt, um Kollisionen +zu umgehen. Diese Kolumnen werden Notenkolumnen genannt; +ein @code{NoteColumn}-Objekt wird erstellt um die Noten in den +Kolumnen zu setzen. + +Die @code{force-hshift}-(erzwinge horizontale Verschiebung)-Eigenschaft +ist eine Eigenschaft von @code{NoteColumn} (bzw. vom +@code{note-column-interface}). Eine Veränderung dieser Eigenschaft +macht es möglich, eine Notenkolumne zu verschieben, dabei gilt als +Einheit die Breite einer Kolumne, also die Breite des Notenkopfes der +ersten Stimme. Diese Eigenschaft kann in Situationen benutzt werden, +in denen die normalen @code{\shiftOn}-Befehle (siehe auch +@ref{Stimmen explizit beginnen}) das Problem nicht beseitigen. +Diese Eigenschaft ist besser in solchen Fällen zu verwenden als die +@code{extra-offset}-Eigenschaft, weil man die richtige Entfernung nicht +in Notenlinienabständen ausrechnen muss. Wenn eine Note in eine +Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere +Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen. + +@end itemize + +@item +Zu guter Letzt, wenn alles andere nicht funktioniert, können Objekte auch +manuell positioniert werden, entweder vertikal in Bezug auf die +Mittellinie des Systems, oder indem sie einen beliebigen Abstand weit +auf eine neue Position verschoben werden. Der Nachteil ist, dass die +richtigen Werte für eine gute Position manuell ausprobiert werden müssen, +meistens durch Herantasten an den richtigen Wert, und das für jedes +einzelne Objekt extra. Und weil diese Verschiebungen erst vorgenommen +werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als +Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt. +Am schwerwiegendsten ist aber die Tatsache, dass die +Verschiebungskoordinaten wahrscheinlich neu errechnet oder +ausprobiert werden müssen, wenn sich an den Noten und deren +Layout später irgend etwas ändert. Die Eigenschaften, die für diese +Arte der manuellen Verschiebung verwendet werden können, sind: + +@table @code +@item extra-offset (zusätzlicher Abstand) + +@cindex extra-offset-Eigenschaft + +Diese Eigenschaft gehört zu jedem Layout-Objekt, das das +@code{grob-interface} unterstützt. Sie braucht ein Zahlenpaar, +das die exakte Verschiebung in horizontaler und vertikaler Richtung +bezeichnet. Negative Zahlen verschieben das Objekt nach links oder +unten. Die Einheit sind Notenlinienabstände. Die zusätzliche +Positionierung wird vorgenommen, nachdem alle anderen Objekte +platziert sind, weshalb ein Objekt irgendwohin verschoben werden +kann, ohne den restlichen Satz zu beeinflussen. + +@item positions (Position) + +@cindex positions-Eigenschaft + +Diese Eigenschaft ist am sinnvollsten, um die Steigung und die +Höhe von Balken, Bögen und Triolenklammern anzupassen. +Sie braucht ein Zahlenpaar, das die Position des rechten und linken +Endes relativ zur Mittellinie des Notensystems bestimmt. Die +Einheit sind Notenlinienabstände. Bögen allerdings können nicht +beliebig weit weg positioniert werden. LilyPond erstellt zunächst eine +Liste an möglichen Positionen für den Bogen und findet normalerweise +die Version, die @qq{am besten aussieht}. Wenn die +@code{positions}-Eigenschaft verändert worden ist, wird der +Bogen aus der Liste gewählt, der der gewünschten Position am +nächsten kommt. +@end table + +@end enumerate + +Ein bestimmtes Objekt hat vielleicht nicht alle dieser Eigenschaften. +Darum ist es nötig, in der IR nachzuschlagen, welche Eigenschaften +ein bestimmtes Objekt unterstützt. + +Hier ist eine Liste an Objekten, die am wahrscheinlichsten an einer +Kollision beteiligt sind, daneben findet sich die Bezeichnung des +Objektes, mit der Sie es in der IR finden, um zu bestimmen, +welche Eigenschaften benutzt werden können, um es zu verschieben. + +@multitable @columnfractions .5 .5 +@headitem Objekttyp @tab Objektbezeichnung +@item Articulationszeichen @tab @code{Script} +@item Balken @tab @code{Beam} +@item Dynamikzeichen (vertikal) @tab @code{DynamicLineSpanner} +@item Dynamikzeichen (horizontal) @tab @code{DynamicText} +@item Fingersatz @tab @code{Fingering} +@item Übungs-/Textmarken @tab @code{RehearsalMark} +@item Legatobögen @tab @code{Slur} +@item Text z. B. @code{^"text"} @tab @code{TextScript} +@item Bindebögen @tab @code{Tie} +@item N-tolen @tab @code{TupletBracket} +@end multitable + + +@node Überlappende Notation in Ordnung bringen +@subsection Überlappende Notation in Ordnung bringen +@translationof Fixing overlapping notation + +Hier soll nun gezeigt werden, wie die Eigenschaften, die im +vorigen Abschnitt vorgestellt wurden, bei der Problemlösung +mit sich überschneidenden Notationselementen eingesetzt +werden können. + +@subheading padding (Fülleigenschafte) + +@cindex padding (Verschiebungs-Eigenschaft) +@cindex Überschneidende Notation korrigieren +@cindex Korrigieren von überschneidender Notation + +Die @code{padding}-(Verschiebungs-)Eigenschaft kann benutzt +werden, um den Abstand zwischen Symbolen zu vergößern (oder +zu verkleinern), die über oder unter den Noten gesetzt werden. + +@cindex Script, Beispiel zur Veränderung +@cindex Verschiebungs-Eigenschaft, Beispiel +@cindex padding (Verschiebuns-Eigenschaft), Beispiel + +@lilypond[quote,fragment,relative=1,verbatim] +c2\fermata +\override Script #'padding = #3 +b2\fermata +@end lilypond + +@cindex MetronomMark, Beispiel zur Veränderung +@cindex Verschiebungs-Eigenschaft, Beispiel +@cindex padding (Verschiebuns-Eigenschaft), Beispiel + +@lilypond[quote,fragment,relative=1,verbatim] +% This will not work, see below +\override MetronomeMark #'padding = #3 +\tempo 4 = 120 +c1 | +% This works +\override Score.MetronomeMark #'padding = #3 +\tempo 4 = 80 +d1 | +@end lilypond + +Im zweiten Beispiel können Sie sehen, wie wichtig es ist den richtigen +Kontext anzugeben. Weil das @code{MetronomeMark}-Objekt +sich im @code{Score}-Kontext befindet, werden Eigenschaftsänderungen +im @code{Voice}-Kontext einfach ignoriert. Für mehr Einzelheiten siehe +@ruser{Eigenschaften verändern}. + +Wenn die @code{padding}-Eigenschaft eines Objektes erhöht wird, das +sich in einem Stapel von Objekten befindet, die nach ihrer +Außersystempriorität (@code{outside-staff-priority}) positioniert werden, +werden das Objekt und alle, die sich außerhalb davon befinden, +entsprechend verschoben. + +@subheading right-padding (Verschieben nach links) + +@cindex Verschiebung nach rechts +@cindex right-padding-Eigenschaft (Verschiebung nach rechts) + +Die @code{right-padding}-Eigenschaft wirkt sich auf den Abstand +zwischen einem Versetzungszeichen und der Note, auf das sie sich +bezieht, aus. Sie wird nicht sehr oft benötigt, aber die +Standardanordnung kann für einige spezielle Versetzungszeichen-Glyphen +oder Kombinationsglyphen, +wie sie für Mikrotonale Musik benutzt werden, falsch sein. Derartige +Glyphen müssen notiert werden, indem man den Stencil des +Versetzungszeichens mit einer Textbeschriftung (Markup) ersetzt, +wie im folgenden Beispiel: + +@cindex Versetzungszeichen, Beispiel zur Veränderung +@cindex Accidental, Beispiel zur Veränderung +@cindex Text-Eigenschaft, Beispiel +@cindex stencil-Eigenschaft, Beispiel +@cindex AccidentalPlacement, Beispiel zur Veränderung +@cindex right-padding-Eigenschaft, Beispiel +@cindex Verschiebung nach rechts (rigth-padding), Beispiel + +@lilypond[quote,ragged-right,verbatim] +sesquisharp = \markup { \sesquisharp } + \relative c'' { + c4 + % This prints a sesquisharp but the spacing is too small + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 c + % This improves the spacing + \once \override Score.AccidentalPlacement #'right-padding = #0.6 + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 +} +@end lilypond + +@noindent +Dazu ist aber ein @code{\override}-Befehl für den Stencil des +Versetzungszeichens nötig, der bisher nicht behandelt wurde. +Der Typ des Stencils muss eine Prozedur sein, die hier geändert +wurde, um den Inhalt der @code{text}-Eigenschaft des +@code{Accidental} (Versetzungszeichen)-Objekts zu setzen. Die +@code{text}-Eigenschaft wiederum wird als @code{sesquisharp}-Glyph +definiert. Dieser Glyph wird dann weiter vom Notenkopf entfernt +durch die Veränderung von @code{right-padding} mit einem +@code{\override}-Befehl. + +@subheading staff-padding (Systemfüllungseigenschaft) + +@cindex staff-padding-Eigenschaft +@cindex Objekte an der Grundlinie ausrichten +@cindex Ausrichten von Objekten an der Grundlinie + +@code{staff-padding} (Verschiebung zum Notensystem) kann +verwendet werden um Objekte wie Dynamikzeichen an einer +Grundlinie auf einer bestimmten Höhe über dem System +auszurichten, sodass sie nicht von der Position der Note abhängen, +an die sie angehängt sind. Diese Verschiebung ist keine Eigenschaft +von @code{DynamicText}, sondern von @code{DynamicLineSpanner}. +Das liegt daran, dass die Grundlinie sich gleicherweise auf +@strong{alle} Dynamikzeichen beziehen soll, also auch auf die, +die als Strecker erstellt wurden. Hier also die Lösung, die Dynamikzeichen +aus dem Beispiel des vorigen Abschnitts auszurichten: + +@cindex DynamikText, Beispiel zur Veränderung +@cindex extra-spacing-width-Eigenschaft, Beispiel +@cindex DynamicLineSpanner, Beispiel zur Veränderung +@cindex staff-padding-Eigenschaft, Beispiel + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 unit +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +% Align dynamics to a base line 2 units above staff +\override DynamicLineSpanner #'staff-padding = #2 +a4\f b\mf c\mp b\p +@end lilypond + + +@subheading self-alignment-X (Selbstausrichtung-X-Eigenschaft) + +@cindex self-alignment-X-Eigenschaft + +Das nächste Beispiel zeigt, wie man den Zusammenstoß +einer Fingersatzbezeichnung mit einem Notenhals +verhindern kann, indem die rechte Ecke an dem +Referenzpunkt der abhängigen Note angeordnet wird: + +@cindex StringNumber, Beispiel zur Veränderung + +@lilypond[quote,fragment,ragged-right,verbatim,relative=3] +\voiceOne +< a\2 > +\once \override StringNumber #'self-alignment-X = #RIGHT +< a\2 > +@end lilypond + + +@subheading staff-position (Position innerhalb des Systems) + +@cindex staff-position-Eigenschaft +@cindex Notensystem-Position-Eigenschaft +@cindex Kollision von Objekten im System +@cindex Zusammenstöße von Objekten im System + +Vieltaktpausen in einer Stimmen können mit Noten in anderen +Stimmen kollidieren. Da diese Pausen zentriert zwischen den +Taktlinien gesetzt werden, würde es für LilyPond eine recht große +Anstrengung bedeuten herauszufinden, welche Noten mit ihnen +zusammenstoßen könnten, denn alle Kollisionsvermeidung +für Noten und Pausen funktioniert nur für Noten bzw. Pausen, die +zur selben Zeit auftreten. Hier ein typisches Beispiel für eine +Kollision dieser Art: + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< { c4 c c c } \\ { R1 } >> +@end lilypond + +Die beste Lösung ist es, die Ganztaktpause nach unten zu +schieben, denn die Pause ist in der zweiten Stimme. Per +Standardeinstellung für die zweite Stimme (@code{\voiceTwo}, +also die zweite Stimme in der +@code{<<@{...@} \\ @{...@}>>}-Konstruktion) wird die +Position auf dem System (@code{staff-position}) auf -4 +für @code{MultiMeasureRest}, in unserem Beispiel muss +es also bspw. auf die Position @code{-8} gesetzt werden, +d.h. vier halbe Notenlinienabstände weiter nach unten: + +@cindex MultiMeasureRest, Beispiel zur Veränderung +@cindex Ganztaktpausen, Beispiel zur Veränderung +@cindex staff-position-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< + { c4 c c c } + \\ + \override MultiMeasureRest #'staff-position = #-8 + { R1 } +>> +@end lilypond + +Das ist besser, als etwa @code{extra-offset} zu benutzen, denn +in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt. + + +@subheading extra-offset (Genaues Positionieren) + +@cindex extra-offset-Eigenschaft +@cindex Zusätzlicher Abstand, Positionierung +@cindex Positionierung von Objekten +@cindex Objekte, Positionierung + +Die @code{extra-offset}-Eigenschaft bietet vollständige Kontrolle +über die Positionierung von Objekten in horizontaler und vertikaler +Richtung. + +Im Beispiel unten ist das zweite Fingersatzzeichen (@code{Fingering}) etwas nach +links und 1,8 Notenlinienabstände nach unten verschoben: + +@cindex Fingersatz, Beispiel zur Veränderung +@cindex extra-offset-Eigenschaft, Beispiel + +@lilypond[quote,fragment,relative=1,verbatim] +\stemUp +f4-5 +\once \override Fingering #'extra-offset = #'(-0.3 . -1.8) +f4-5 +@end lilypond + + +@subheading Ausrichtungseigenschaft + +@cindex positions-Eigenschaft +@cindex Kontrolle über Triolen, Bögen und Balken manuell +@cindex manuelle Kontrolle über Triolen, Bögen, Balken +@cindex Balken, manuelle Kontrolle +@cindex Bögen, manuelle Kontrolle +@cindex Legatobögen, manuelle Kontrolle +@cindex Phrasierungsbögen, manuelle Kontrolle +@cindex Triollen-Klammer, manuelle Kontrolle + +Die @code{positions}-Eigenschaft erlaubt die Kontrolle von Position und +Steigung von Balken, Legato- und Phrasierungsbögen sowie Triolenklammern. +Hier ein Beispiel, in der ein unschöner Phrasierungsbogen auftritt, weil +er den Bogen des Vorschlags vermeidet: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 \acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +Man könnte einfach den Phrasierungsbogen oberhalb der Noten setzen, und +das wäre auch die beste Lösung: + +@cindex Phrasierungsbogen, Beispiel zur Veränderung +@cindex positions-Eigenschaft, Beispiel +@cindex Positionierung, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\phrasingSlurUp +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +aber wenn es einen Grund geben sollte, warum das nicht geht, könnte +man das linke Ende des Phrasierungsbogens etwas nach unten verschieben, +indem man die @code{positions}-Eigenschaft einsetzt. Damit +verschwindet auch die etwas unschöne Form: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\once \override PhrasingSlur #'positions = #'(-4 . -3) +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +Hier noch ein weiteres Beispiel aus der Einleitung von Chopins +Prelude Op. 28 Nr. 2, das untere System. Wie zu sehen ist, +stößt der Balken mit den oberen Noten zusammen: + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \clef "bass" + << { b,8 ais, b, g, } \\ { e, g e, g } >> + << { b,8 ais, b, g, } \\ { e, g e, g } >> +} +@end lilypond + +@noindent +Das kann manuell gelöst werden, indem beide Enden des Balkens +von ihrer Position 2 Notenlinienabstände über der Mittellinie +hochgeschoben werden, etwa auf 3: + +@cindex Balken, Beispiel zur Veränderung +@cindex positions-Eigenschaft, Beispiel +@cindex Positionierung, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \clef "bass" + << + \override Beam #'positions = #'(3 . 3) + { b,8 ais, b, g, } + \\ + { e, g e, g } + >> + << { b,8 ais, b, g, } \\ { e, g e, g } >> +} +@end lilypond + +@noindent +Hier ist zu beobachten, dass die Veränderung sich auch auf die +weiteren Achtelbalken der ersten Stimme auswirkt, während sie keine +Auswirkung auf die Balken der zweiten Stimme hat. + +@subheading force-hshift (vertikale Verschiebunseigenschaft) + +@cindex force-hshift-Eigenschaft +@cindex Vertikale Verschiebung erzwingen + +An diesem Punkt können wir den letzten Feinschliff an unserem +Chopin-Beispiel vornehmen, das wir behandelt haben in +@ref{Ich höre Stimmen}. Wir hatten es in folgende Form +gebracht: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + 2 des + } + >> | + 1 | +} +@end lilypond + +@noindent +Die unteren zwei Noten des ersten Akkords (also die in der +dritten Stimme) sollten nicht aus der Notenkolumne der +oberen zwei Noten weggeschoben werden. Um das zu +korrigieren, setzen wir @code{force-hshift}, das eine +Eigenschaft von +@code{NoteColumn} ist, für diese Noten auf Null. +Die untere Note des zweiten Akkordes wird am besten +direkt rechts von den oberen Noten gesetzt. Das erreichen +wir, indem wir @code{force-hshift} für diese Note auf +0.5 setzen, also eine halbe Notenkopfbreite nach rechts von +der Kolumne der oberen Noten aus. + +Hier das Endergebnis: + +@cindex Notenkolumne, Beispiel zur Veränderung +@cindex force-hshift-Eigenschaft, Beispiel +@cindex vertikale Verschiebung, Beispiel + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +@node Beispiele aus dem Leben +@subsection Beispiele aus dem Leben +@translationof Real music example + +Das Kapitel zu Optimierungen soll mit einem komplizierten Beispiel +beendet werden, in dem verschiedene Optimierungen vorgenommen +werden müssen, bis das Ergebnis gut aussieht. Das Beispiel wurde +ganz bewusst gewählt um die Benutzung der Notationsreferenz +zu zeigen, wenn ungewöhnliche Notationsprobleme gelöst werden +müssen. Es ist nicht repräsentativ für normale Notationsprojekte, +lassen Sie sich also nicht durch dieses Beispiel entmutigen! Zum +Glück sind Probleme wie die hier gezeigten nicht sehr häufig. + +Das Beispiel stammt aus Chopins Premiére Ballade, Op. 23, Takte +6--9, der Übergang vom Lento der Einleitung zum Moderato. +Hier zunächst der Satz, wie er aussehen soll, allerdings ohne +Dynamik, Fingersatz und Pedalbezeichnung, um das Beispiel nicht +zu kompliziert zu machen. + +@c This example should not be indexed +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + bes2.^\markup { \bold "Moderato" } r8 + << + { c,8 d fis bes a } + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Die erste Überlegung ist, dass das System für die rechte Hand +im dritten Takt vier Stimmen braucht. Das sind die fünf +Achtelnoten mit Balken, das übergebundene C, die Halbe D, die +mit der Achtel D verschmolzen ist, und die punktierte Viertel +Fis, die auch mit einer Achtelnote verschmolzen ist. Alles +andere ist eine einzige Stimme, es ist also am einfachsten, die +zusätzlichen drei Stimmen nur zeitweise zu erstellen, wenn sie +auftreten. Wenn Sie vergessen haben, wie man das anstellt, +schauen Sie sich nochmal den Abschnitt @ref{Ich höre Stimmen} +und @ref{Stimmen explizit beginnen} an. Hier wollen wir explizit +begonnene Stimmen für die polyphone Stelle benutzen, weil LilyPond +Kollisionen besser vermeidet, wenn alle Stimmen auf diese Weise +explizit begonnen werden. + + +Wir wollen anfange, indem wir die Noten in zwei Variablen +notieren und dann die Systemstruktur in einer +@code{\score}-Umgebung erstellen. Das ist, was LilyPond +erstellt: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { r2 c4. g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2. % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2 | + 1 | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Alle Noten sind richtig, aber die Positionierung sehr +verbesserungsbedürftig. Der Bindebogen kollidiert mit +der veränderten Taktart zusammen, einige Noten werden nicht +verschmolzen und einige Notationselemente fehlen ganz. +Behandeln wir zunächst die einfacheren Dinge. Der +Balken kann durch eine manuelle Begrenzung einfach +korrigiert werden, und auch der Legatobogen der linken +Hand und der Phrasierungsbogen der rechten Hand +sind schnell gesetzt, denn sie wurden schon in der +Übung erklärt. Damit haben wir folgendes Notenbild: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1) | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Der erste Takt stimmt jetzt schon. Der zweite Takt enthält ein +Arpeggio und wird mit einer doppelten Taktlinie beschlossen. +Wie können wir diese notieren, denn sie sind im Handbuch zum +Lernen nicht vorgekommen? Hier brauchen wir jetzt die +Notationsreferenz. Ein Blick in den Index zeigt uns die +Einträge für @qq{Arpeggio} und @qq{Taktlinien}: ein +Arpeggio also erstellt man mit dem Befehl @code{\arpeggio} +hinter einem Akkord und eine doppelte Taktlinie wird mit dem +Befehl @code{\bar "||"} erstellt. Das ist einfach. Als nächstes +muss der Zusammenstoß des Bindebogens mit der Taktartbezeichnung +gelöst werden. Das geht am besten, indem wir den Bogen nach +oben verschieben. Wie man Objekte verschiebt wurde schon +behandelt in @ref{Verschieben von Objekten}, wo stand, dass Objekte +die relativ zum System positioniert werden, vertikal verschoben werden +können, indem ihre @code{staff-position}-Eigenschaft +geändert wird, die in halben Notenlinienabständen relativ +zur Mittellinie angegeben wird. Dieser @code{\override}-Befehl +also, direkt vor die erste übergebundene Note gestellt, verschiebt +den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände +über die Mittellinie: + +@code{\once \override Tie #'staff-position = #3.5} + +Damit ist auch der zweite Takt vollständig: + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +In Takt drei beginnt der Moderato-Abschnitt. In der +Übung wurde behandelt, wie man fetten Text mit dem +@code{\markup}-Befehl eingibt, es ist also einfach, das +@qq{Moderato} in fetter Schrift hinzuzufügen. Wie aber werden Noten +verschmolzen? Hier nehmen wir wieder die Notationsreferenz +zu Hilfe. Die Suche nach @qq{Verschmelzen} (engl. merge) +im Index führt uns zu den Befehlen, um Noten mit +unterschiedlichen Köpfen und unterschiedlichen Punkten +zu verschmelzen, in @ruser{Auflösung von Zusammenstößen}. In unserem +Beispiel müssen sowohl unterschiedliche Köpfe also auch +unterschiedliche Punktierung verschmolzen werden, wir +brauchen also die Befehle + +@example +\mergeDifferentlyHeadedOn +\mergeDifferentlyDottedOn +@end example + +@noindent +aus der Notationsreferenz, die wir an den Beginn unseres +Abschnittes stellen und + +@example +\mergeDifferentlyHeadedOff +\mergeDifferentlyDottedOff +@end example + +@noindent +um das Verhalten wieder auszuschalten. Das sieht so aus: + +@cindex Bindebogen, Beispiel zur Veränderung +@cindex staff-position-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Mit diesen Veränderungen wurden die beiden Fis-Noten +verschmolzen, aber nicht die zwei Ds. Warum nicht? Die +Antwort befindet sich im gleicher Abschnitt der Notationsreferenz: +Noten, die verschmolzen werden, müssen Hälse in entgegengesetzte +Richtungen aufweisen und zwei Noten können nicht verschmolzen +werden, wenn eine dritte Noten in der gleichen Kolumne +stört. In unserem Fall weisen beide Hälse nach oben und es +befindet sich zur gleichen Zeit auch noch eine dritte Note, das C. +Wie die Richtung von Hälsen geändert wird, wissen wir schon: +mit @code{\stemDown}, und in der Notationsreferenz findet +sich auch Information, wie das C verschoben werden kann: mit +dem @code{\shift}-Befehl. Aber welcher von ihnen? Das C +befindet sich in der zweiten Stimme, die @qq{shift off} hat, +die zwei Ds sind in den Stimmen eins und drei, die @qq{shift +off} bzw. @qq{shift on} haben. Das C muss also noch eine +Stufe weiter verschoben werden mit @code{\shiftOnn}, damit +es die Verschmelzung der Ds nicht stört. Das sieht jetzt so +aus: + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + % Move the c2 out of the main note column so the merge will work + c,8~ \shiftOnn c2 + } + \new Voice { + \voiceThree + % Stem on the d2 must be down to permit merging + s8 \stemDown d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Fast schon geschafft. Nur noch ein Problem ist übrig: Der Hals nach +unten des verschmolzenen sollte nicht da sein, und das C sähe +besser auf der rechten Seite des Ds aus. Beides können wir mit den +gelernten Optimierungsmethoden erreichen. Den Hals machen +wir durchsichtig und das C verschieben wir mit der +@code{force-hshift}-Eigenschaft. Hier ist das Endergebnis: + +@cindex Notenkolumne, Beispiel zur Veränderung +@cindex force-hshift-Eigenschaft, Beispiel +@cindex Hals, Beispiel zur Veränderung +@cindex Notenhals, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + + +@node Weitere Optimierungen +@section Weitere Optimierungen +@translationof Further tweaking + +@menu +* Andere Benutzung von Optimierungen:: +* Variablen für Optimierungen einsetzen:: +* Globale Formatierung:: +* Mehr Information:: +* Fortgeschrittene Optimierungen mit Scheme:: +@end menu + +@node Andere Benutzung von Optimierungen +@subsection Andere Benutzung von Optimierungen +@translationof Other uses for tweaks + +@cindex Transparente Objekte +@cindex Entfernen von Objekten +@cindex Verstecken von Objekten +@cindex Unsichtbare Objekte +@cindex transparent-Eigenschaft, Benutzung +@cindex Objekte unsichtbar machen +@cindex Objekte entfernen +@cindex Objekte verstecken +@cindex Noten zwischen Stimmen überbinden +@cindex Überbinden von Noten zwischen Stimmen + +@subheading Noten zwischen unterschiedlichen Stimmen überbinden + +Das nächste Beispiel zeigt, wie man Noten von verschiedenen +Stimmen miteinander verknüpfen kann, indem man Bindebögen +für Überbindungen benutzt. Normalerweise können nur zwei +Noten der gleichen Stimme übergebunden werden. Wenn +man zwei Stimmen benutzt, wobei die überbundenen Noten +sich in der selben befinden, + +@lilypond[quote,fragment,relative=2] +<< { b8~ b8\noBeam } \\ { b[ g8] } >> +@end lilypond + +@noindent +und dann den ersten Hals nach oben unsichtbar macht, +sieht es so aus, als ob die Überbindung zwischen +den Stimmen stattfindet: + +@cindex Hals, Beispiel zur Veränderung +@cindex Notenhals, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +Um sicherzugehen, dass der unsichtbare Hals den Bindebogen +nicht zu sehr verkleinert, kann er verlängert werden, indem +seine Länge (@code{length}) auf den Wert @code{8} +gesetzt wird: + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8~ b\noBeam + } +\\ + { b[ g8] } +>> +@end lilypond + + +@subheading Eine Fermate in MIDI simulieren + +@cindex stencil-Eigenschaft, Benutzung +@cindex Fermate, Benutzung in MIDI +@cindex MIDI: Fermate erstellen + +Für Objekte außerhalb des Notensystems ist es normalerweise +besser, die @code{stencil}-Eigenschaft anstelle der +@code{transparent}-Eigenschaft zu verändern, wenn man +sie vom fertigen Notensatz entfernen will. Indem die +@code{stencil}-Eigenschaft auf falsch (@code{#f}) gesetzt +wird, wird das entsprechende Objekt vollständig entfernt. +Das bedeutet, dass es die Positionierung der anderen Objekte +nicht beeinflusst. + +Auf diese Art kann etwa das Tempo geändert werden, damit +in der MIDI-Ausgabe eine Fermate zu hören ist, ohne dass +im Notensatz etwas von diesen Tempoänderungen zu sehen +ist. Die Metronombezeichnung soll auch nicht die Position +von Text an der gleichen Stelle oder die Abstände zwischen +zwei Systemen beeinflussen. Darum ist es am besten, +@code{stencil} auf @code{#f} zu setzen. Im Beispiel wird +der Unterschied zwischen einem unsichtbaren Objekt und +einem entfernten Objekt gezeigt: + +@cindex Metronom-Bezeichnung, Beispiel zur Veränderung +@cindex transparent-Eigenschaft, Beispiel + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'transparent = ##t + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata + % New tempo for next section + \tempo 4=100 + a4 a a a + } + \layout { } + \midi { } +} +@end lilypond + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'stencil = ##f + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata + % New tempo for next section + \tempo 4=100 + a4 a a a + } + \layout { } + \midi { } +} +@end lilypond + +@noindent +Mit beiden Methoden wird die Tempobezeichnung entfernt, mit +der die Fermate verlängert wird, und beide beeinflussen die +MIDI-Ausgabe wie gewünscht. Die unsichtbare Metronombezeichnung +schiebt aber die folgende Bezeichnung in die Höhe, während +das im zweiten Beispiel, in dem der @code{stencil} entfernt +wurde, nicht passiert. + +@seealso +Glossar: +@rglos{system}. + + +@node Variablen für Optimierungen einsetzen +@subsection Variablen für Optimierungen einsetzen +@translationof Using variables for tweaks + +@cindex Variablen, Benutzung zur Optimierung +@cindex Optimierung mit Variablen + +@code{\override}-Befehle sind oft lang und mühsam zu +tippen, und sie müssen immer absolut richtig sein. Wenn +derselbe Befehl mehrere Male benutzt werden muss, lohnt +es sich oft schon, eine Variable zu definieren, in der er +sich befindet. + +Als Beispiel sollen einige Worte im +Gesangstext fett und kursiv hervorgehoben werden. +Die Befehle @code{\italic} und @code{\bold} funktionieren +im Gesangstext-Kontext nur, wenn sie gleichzeitig mit den Wörtern, +auf die sie angewendet werden sollen, zusätzlich +in eine @code{\markup}-Umgebung eingeschlossen +werden. Durch diese Einbettung können einzelne Wörter nicht +einfach zu einer Variable umgeformt werden. Als +Alternative versuchen wir, einen Befehl mit +@code{\override} und @code{\revert} zu konstruieren. + +@example +@code{\override Lyrics . LyricText #'font-shape = #'italic} +@code{\override Lyrics . LyricText #'font-series = #'bold} + +@code{\revert Lyrics . LyricText #'font-shape} +@code{\revert Lyrics . LyricText #'font-series} +@end example + +Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine +Hervorhebung benötigen. Anstelle dieser Befehlsketten @emph{können} +wir jedoch zwei Variablen definieren. Mit ihnen und dem entsprechenden +Wort in geschweiften Klammern erreichen wir den gewünschten Effekt. +Ein weiterer Vorteil ist, dass in diesem Fall die Leerzeichen um die +Punkte herum nicht benötigt werden, weil sie nicht innerhalb des +@code{lyricmode}-Kontextes interpretiert werden. Hier ein Beispiel; +die Bezeichnungen können natürlich auch kürzer sein, +um noch weniger schreiben zu müssen: + +@cindex LyricText, Beispiel zur Veränderung +@cindex Gesangstext, Beispiel zur Veränderung +@cindex font-shape-Eigenschaft, Beispiel +@cindex font-series-Eigenschaft, Beispiel + +@lilypond[quote,verbatim] +emphasize = { + \override Lyrics.LyricText #'font-shape = #'italic + \override Lyrics.LyricText #'font-series = #'bold +} +normal = { + \revert Lyrics.LyricText #'font-shape + \revert Lyrics.LyricText #'font-series +} + +global = { \key c \major \time 4/4 \partial 4 } + +SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = \lyrics { + E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, +} + +VerseTwo = \lyricmode { + O | \emphasize Christ, \normal whose voice the | wa -- ters heard, +} + +VerseThree = \lyricmode { + O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood +} + +VerseFour = \lyricmode { + O | \emphasize Tri -- ni -- ty \normal of | love and pow'r +} + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Soprano" { \VerseOne } + \new Lyrics \lyricsto "Soprano" { \VerseTwo } + \new Lyrics \lyricsto "Soprano" { \VerseThree } + \new Lyrics \lyricsto "Soprano" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@node Globale Formatierung +@subsection Globale Formatierung +@translationof Style sheets + +Die Ausgabe von LilyPond kann sehr stark verändert werden, siehe +zu Einzelheiten @ref{Die Ausgabe verändern}. Aber was ist, +wenn man mehrere Eingabedateien hat, die die gleichen Anpassungen +erfahren sollen? Oder wenn Sie einfach nur die Anpassungen von +der eigentlichen Musik trennen wollen? Das lässt sich recht einfach +erreichen. + +Schauen wir uns ein Beispiel an. Sorgen Sie sich nicht, wenn Sie +den Abschnitt mit den vielen @code{#()} nicht verstehen. Das wird +erklärt in @ref{Fortgeschrittene Optimierungen mit Scheme}. + +@lilypond[quote,verbatim,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Es gibt einige Probleme mit sich überschneidender Ausgabe, die wird +zurechtgerückt mit den Techniken von @ref{Verschieben von Objekten}. +Aber jetzt zu den Definitionen von @code{mpdolce} und @code{inst}. +Sie erstellen die gewünschte Ausgabe, aber wir wollen sie vielleicht +auch in einem anderen Stück verwenden. Wir könnten sie immer wieder +kopieren und oben in jedes Stück einfügen, aber das ist sehr aufwändig. +Dadurch werden die Definitionen auch in der Eingabedatei belassen, +und ich finde diese @code{#()} irgendwie hässlich. Verstecken +wir sie also: + +@example +%%% in Datei "definitions.ily" speichern +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) +@end example + +Diese Datei wir mit dem @code{\include}-Befehl ziemlich weit oben +in der Datei eingefügt. (Die Erweiterung @file{.ily} wird benutzt, +um diese Datei als eine eingefügte, inkludierte zu kennzeichnen, die +man nicht alleinstehend kompilieren kann.) Jetzt ändern wir die +Noten (in der Datei @file{music.ly}). + +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. + +@example +\include "definitions.ily" + +\relative c'' @{ + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Das sieht schon besser aus, aber einige Änderungen könnten wir noch vornehmen. +Das Glissando ist kaum sichtbar, machen wir es also etwas dicker und +näher an den Notenkopf. Die Metronombezeichnung soll über dem +Schlüssel stehen, anstatt über der ersten Note. Und schließlich +mag mein Kompositionsprofessor keine @qq{C}-Taktangaben, das ändern +wir also in @qq{4/4}. + +Ändern Sie jetzt jedoch nicht @file{music.ly}. Ändern Sie die +@file{definitions.ily} mit dem Folgenden: + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + \override TimeSignature #'style = #'numbered + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout{ + \context { + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { + \Staff + \override TimeSignature #'style = #'numbered + } + \context { + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Das sieht besser aus! Aber nehmen wir an, Ich will dieses Stück publizieren. +Mein Professor mag die @qq{C}-Taktangabe nicht, mir gefällt sie aber sehr +gut. Kopieren wir also die Datei @file{definitions.ily} nach +@file{web-publish.ily} und verändern diese. Weil die Noten als PDF +auf dem Monitor dargestellt werden sollen, wird auch die Notengröße +global geändert. + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +In der Eingabedatei muss jetzt nur noch die Zeile +@code{\include "definitions.ily"} mit +@code{\include "web-publish.ily"} ersetzt werden. Das könnte +man natürlich noch besser machen. Es könnte eine Datei +@file{definitions.ily} mit allen Definitionen (also +@code{mpdolce} und @code{inst}) geben, eine Datei +@file{web-publish.ily}, die nur die @code{\layout}-Veränderung +enthält und eine Datei @file{university.ily}, die nur die +Prozedur enthält, die Ausgabe meinem Professor angenehm zu machen. +Der Anfang von @file{music.ly} würde dann folgendermaßen aussehen: + +@example +\include "definitions.ily" + +%%% nur eine der zwei Zeilen auskommentieren! +\include "web-publish.ily" +%\include "university.ily" +@end example + +Diese Herangehensweise kann auch schon nützlich sein, wenn man +nur ein paar Stimmen schreiben will. Ich habe eine ganze Anzahl +an @qq{Stylesheets} für meine Projekte. Ich fange jede Datei mit +der Zeile @code{\include "../global.ily"} an, die etwa folgendes +einbindet: + +@example +%%% global.ily +\version @w{"@version{}"} + +#(ly:set-option 'point-and-click #f) + +\include "../init/init-defs.ly" +\include "../init/init-layout.ly" +\include "../init/init-headers.ly" +\include "../init/init-paper.ly" +@end example + + + +@node Mehr Information +@subsection Mehr Information +@translationof Other sources of information + +Die Programmreferenz enthält sehr viel Information über LilyPond, aber +noch mehr Information findet sich in den internen +LilyPond-Dateien. Um sie erforschen zu können, müssen Sie erst +das richtige Verzeichnis auf Ihrem System finden. Die Position +hängt a) davon ab, ob Ihre LilyPond-Installation mit der vorkompilierten +Version von der LilyPond-Internetseite vorgenommen wurde oder Sie +die Version durch Ihren Paketmanager installiert haben (also +z. B. in einer Linux-Distribution oder unter fink oder cygwin +installiert), und b) auf welchem Betriebssystem Sie das Programm +benutzen: + +@strong{Von lilypond.org heruntergeladen} + +@itemize @bullet +@item Linux + +Wechseln Sie in das Verzeichnis +@file{@var{INSTALL_VERZ}/lilypond/usr/@/share/lilypond/current/} + +@item MacOS X + +Wechseln Sie in das Verzeichnis +@file{@var{INSTALL_VERZ}/LilyPond.app/Contents/@/Resources/share/lilypond/current/} +indem Sie entweder mit dem Befehl @code{cd} vom Terminal aus +in das Verzeichnis wechseln, oder mit Control-Klick auf das +LilyPond-Programmsymbol gehen und @qq{Show Package Contents} +auswählen. + +@item Windows + +Wechseln Sie mit dem Windows Explorer ins Verzeichnis +@file{@var{INSTALL_VERZ}/LilyPond/usr/@/share/lilypond/current/} + +@end itemize + +@strong{Mit einem Paket-Manager installiert oder selber aus +den Quellen kompiliert} + +Wechseln Sie in das Verzeichnis +@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, wobei +@var{PREFIX} bei Ihrem Paket-Manager oder dem +@code{configure}-Skript gesetzt wird, und @var{X.Y.Z} +die LilyPond-Versionsnummer. + +@smallspace + +In diesem Ordner sind die zwei interessanten Unterordner: + +@itemize +@item @file{ly/} - beinhaltet Dateien im LilyPond-Format +@item @file{scm/} - beinhaltet Dateien im Scheme-Format +@end itemize + +Schauen wir uns zuerst einige Dateien in @file{ly/} an. +Öffnen Sie @file{ly/property-init.ly} in einem Texteditor. +Der, den Sie normalerweise für @file{.ly}-Dateien benutzen, +genügt. Diese Datei enthält die Definitionen aller vordefinierten +Befehle für LilyPond, wie etwa @code{\stemUp} und +@code{\slurDotted}. Sie können sehen, dass es sich um +nichts mehr handelt als Definitionen von Variablen, die eine +oder mehrere @code{\override}-Befehle enthalten. Der +Befehl @code{/tieDotted} etwa wird folgendermaßen definiert: + +@example +tieDotted = @{ + \override Tie #'dash-period = #0.75 + \override Tie #'dash-fraction = #0.1 +@} +@end example + +Wenn Sie diese Voreinstellungen der vordefinierten Befehl nicht +mögen, können Sie sie ganz einfach umdefinieren, genauso wie +jede andere Variable auch, indem Sie sie an den Anfang Ihrer +Quelldatei schreiben. + +Hier sind die wichtigsten Dateien, die sich im Ordner +@file{ly/} befinden: + +@multitable @columnfractions .4 .6 +@headitem Dateiname + @tab Inhalt +@item @file{ly/engraver-init.ly} + @tab Definitionen von Engraver-Kontexten +@item @file{ly/paper-defaults-init.ly} + @tab Spezifikationen von Voreinstellungen für Papiermaße +@item @file{ly/performer-init.ly} + @tab Definitionen von Performer-Kontexten +@item @file{ly/property-init.ly} + @tab Definitionen aller vordefinierten Befehle +@item @file{ly/spanner-init.ly} + @tab Definitionen aller vordefinierten Strecker-Befehle +@end multitable + +Andere Einstellungen (wie die Definitionen von Beschriftungsbefehlen) +sind in @file{.scm}-(Scheme)-Dateien gespeichert. Die +Scheme-Programmiersprache wird benutzt, um eine +programmierbare Schnittstelle zu den internen Operationen von +LilyPond zu haben. Eine weitere Erklärung dieser Dateien ist +im Moment außerhalb des Rahmens dieses Handbuchs, denn +sie erfordern einige Kenntnis der Scheme-Sprache. Die Warnung +ist hier angebracht, dass des ein gutes technisches Verständnis +oder sehr viel Zeit braucht, um Scheme und diese +Dateien zu verstehen (siehe auch @rextend{Scheme-Übung}). + +Wenn Sie sich mit Scheme auskennen, sind hier mögliche +interessante Dateien: + +@multitable @columnfractions .4 .6 +@headitem Dateiname + @tab Inhalt +@item @file{scm/auto-beam.scm} + @tab Sub-Balken-Voreinstellungen +@item @file{scm/define-grobs.scm} + @tab Voreinstellungen für Grob-Eigenschaften +@item @file{scm/define-markup-commands.scm} + @tab Definition aller Markup-Beschriftungsbefehle +@item @file{scm/midi.scm} + @tab Voreinstellung für die MIDI-Ausgabe +@item @file{scm/output-lib.scm} + @tab Einstellungen mit Einfluss auf die Darstellung von Bunddiagrammen, Farben, Versetzungszeichen, Taktlinien usw. +@item @file{scm/parser-clef.scm} + @tab Definitionen der unterstützten Schlüssel +@item @file{scm/script.scm} + @tab Voreinstellungen für Artikulationszeichen +@end multitable + + +@node Fortgeschrittene Optimierungen mit Scheme +@subsection Fortgeschrittene Optimierungen mit Scheme +@translationof Advanced tweaks with Scheme + +Auch wenn viele Sachen mit @code{\override} und @code{\tweak} +möglich sind, gibt es eine sehr viel mächtigere Möglichkeit, die +Arbeitsweise von LilyPond mit Hilfe der programmierbaren Schnittstelle +zu beeinflussen. Code, der in der Scheme-Programmiersprache +geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond +eingefügt werden. Natürlich brauchen Sie dazu wenigstens ein +grundlegendes Verständnis von Scheme. Eine Einleitung finden +Sie in der @rextend{Scheme-Übung}. + +Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine +Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine +Scheme-Prozedur gesetzt werden kann, die dann jedes Mal +aufgerufen wird, wenn die Eigenschaft von LilyPond benutzt +wird. Die Eigenschaft kann damit dynamisch auf einen Wert +gesetzt werden, der durch die Prozedur jedes Mal neu bestimmt +wird. In diesem Beispiel wird die Farbe der Notenköpfe entsprechend +zu ihrer Position innerhalb der Tonleiter gesetzt. + +@cindex x11-Farben, Beispiel zur Benutzung +@cindex Notenkopf, Beispiel zur Veränderung +@cindex Farb-Eigenschaft, in Scheme-Prozedur gesetzt + +@lilypond[quote,verbatim,ragged-right] +#(define (color-notehead grob) + "Color the notehead according to its position on the staff." + (let ((mod-position (modulo (ly:grob-property grob 'staff-position) + 7))) + (case mod-position + ;; Return rainbow colors + ((1) (x11-color 'red )) ; for C + ((2) (x11-color 'orange )) ; for D + ((3) (x11-color 'yellow )) ; for E + ((4) (x11-color 'green )) ; for F + ((5) (x11-color 'blue )) ; for G + ((6) (x11-color 'purple )) ; for A + ((0) (x11-color 'violet )) ; for B + ))) + +\relative c' { + % Arrange to obtain color from color-notehead procedure + \override NoteHead #'color = #color-notehead + a2 b | c2 d | e2 f | g2 a | +} +@end lilypond + +Weiter Beispiele, die die Benutzung dieser programmierbaren +Schnittstelle zeigen, finden sich in @rextend{Optimierungen mit Scheme}. diff --git a/Documentation/de/macros.itexi b/Documentation/de/macros.itexi new file mode 100644 index 0000000000..446e8e9b3d --- /dev/null +++ b/Documentation/de/macros.itexi @@ -0,0 +1,819 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + 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 + + +@include version.itexi +@include common-macros.itexi + + +@c ***** Displaying text ***** + +@c To get decent quotes in ,foo' and ,,foo''. +@c These need to be split up so that "@qq{foo}." looks nice. :( + +@macro q{TEXT} +@quotesinglbase{}\TEXT\@quoteleft{} +@end macro + +@macro qq{TEXT} +@quotedblbase{}\TEXT\@quotedblleft{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@html +
+@end html +@strong{Achtung:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Achtung:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + +@c do not translate the following macro -- it is used in +@c an untranslated manual. + +@ifhtml + +@macro advanced{TEXT} +@html +
+@end html +@strong{Advanced note:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro advanced{TEXT} +@quotation +@b{Advanced note:} \TEXT\ +@end quotation +@end macro + +@end ifnothtml + + + +@macro docMain +@cartouche +Zu mehr Information, wie dieses Handbuch unter den anderen Handbüchern +positioniert, oder um dieses Handbuch in einem anderen Format +zu lesen, besuchen Sie bitte @rweb{Manuals}. + +Wenn Ihnen Handbücher fehlen, finden Sie die gesamte Dokumentation +unter @w{@uref{http://@/www@/.lilypond@/.org/}}. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung +für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber +nur die englische Version gültig.} + +@quotation +Es ist erlaubt, dieses Dokument unter den Bedingungen der +GNU Free Documentation Lizenz (Version 1.1 oder +spätere, von der Free Software Foundation publizierte Versionen, ohne +invariante Abschnitte), +zu kopieren, zu verbreiten und/oder +zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU +Free Documentation License'' angefügt. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +This document has been placed in the public domain. +@end copying +@end ifclear + + +@c ***** Title page ***** +@ifnottex +@node Top +@top LilyPond -- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle Das Notensatzprogramm +@titlefont{\TITLE\} +@author Das LilyPond-Entwicklerteam + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +Für LilyPond Version @version{} +@end titlepage + +@end macro + + + +@c ***** Headings in a doc subsection ***** + +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Vordefinierte Befehle +@end macro + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Ausgewählte Schnipsel +@end macro + + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading Siehe auch +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Bekannte Probleme und Warnungen +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @ruser +@c @rprogram +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Glossar} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Glossar} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Handbuch zum Lernen} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Handbuch zum Lernen} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Notationsreferenz} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Notationsreferenz} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extending} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Changes} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,Allgemeine Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,Allgemeine Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Aufsatz} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Aufsatz} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Anwendungsbenutzung} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Anwendungsbenutzung} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Schnipsel} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Schnipsel} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Referenz der Interna} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Referenz der Interna} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glossar} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossar} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Handbuch zum Lernen} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning,Handbuch zum Lernen} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Notationsreferenz} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Notationsreferenz} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Allgemeine Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Allgemeine Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Aufsatz} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Aufsatz} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Anwendungsbenutzung} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Anwendungsbenutzung} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Schnipsel} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Schnipsel} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Referenz der Interna} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Referenz der Interna} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glossar} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossar} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Handbuch zum Lernen} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Handbuch zum Lernen} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Notationsreferenz} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Notationsreferenz} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Allgemeine Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web, Allgemeine Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Aufsatz} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Aufsatz} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Anwendungsbenutzung} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Anwendungsbenutzung} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Schnipsel} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Schnipsel} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Referenz der Interna} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Referenz der Interna} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Glossar} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossar} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning.de,Handbuch zum Lernen} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning.de,Handbuch zum Lernen} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation.de,Notationsreferenz} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation.de,Notationsreferenz} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Changes} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web.de,Allgemeine Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web.de,Allgemeine Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay.de,Aufsatz} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay.de,Aufsatz} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage.de,Anwendungsbenutzung} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage.de,Anwendungsbenutzung} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Schnipsel} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Schnipsel} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Referenz der Interna} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,Referenz der Interna} +@end macro + +@end iftex + + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
+@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + + +@macro help{TEXT} +@html +
+ + Hilfe gesucht: + \TEXT\ +
+@end html +@end macro + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin was created by +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} with +@uref{http://www.isc.tamu.edu/~lewing/gimp/, the Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +The FreeBSD logo is a registered trademark of +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +The @qq{X image} is not a registered trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} and +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, and +placed under the GNU Free Documentation License version 1.2 or later. +We found the image on +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +this Wikipedia Commons page}. + +@end macro + +@macro logoLegalWindows +The @qq{four colored rectangles image} is not a registered +trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} and +placed under the GNU Free Documentation License version 1.2. We +found the image on +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +this Wikipedia Commons page}. + +@end macro + +@end ifset + + + +@c ***** Macros specific to translated docs ***** + + +@macro englishref +Dieser Abschnitt wurde noch nicht übersetzt. Bitte lesen Sie den +Abschnitt im englischen Benutzerhandbuch. +@end macro + diff --git a/Documentation/de/notation.tely b/Documentation/de/notation.tely new file mode 100644 index 0000000000..aec979e5b7 --- /dev/null +++ b/Documentation/de/notation.tely @@ -0,0 +1,130 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 +@documentencoding UTF-8 +@documentlanguage de +@setfilename lilypond.info +@settitle LilyPond Benutzerhandbuch + +@c Translators: Till Paala + +@afourpaper + +@macro manualIntro +Dieses Handbuch stellt eine Referenz aller Notationsformen +zur Verfügung, die mit LilyPond Version @version{} erstellt +werden können. Es wird vorausgesetzt, dass der Leser mit +dem @rlearningnamed{Top, Handbuch zum Lernen} vertraut ist. +@end macro + +@c `Notation Reference' was born 1999-10-11 with git commit 940dda0... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 bei den Autoren. +@end macro + + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription User manual of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage German +@end ignore + +@lilyTitlePage{Notationsreferenz} + + + +@ifnottex + + +@menu +* Musikalische Notation:: Allgemeine Notation, die fast immer vorkommt. +* Spezielle Notation:: Notation, die nur für spezielle Zwecke eingesetzt wird. +* Allgemeine Eingabe und Ausgabe:: Allgemeine Information über die Quelldateien von LilyPond. +* Abstände:: Anzeige der Ausgabe auf dem Papier. +* Standardeinstellungen verändern:: Das Notenbild verfeinern. +@c * Schnittstellen für Programmierer:: Benutzung für Experten. + +Anhänge + +@c * Literatur:: Wichtige Literatur über die Notation. +* Notationsübersicht:: Tabellen und Grafiken. +* Befehlsübersicht:: Überblick über die LilyPond-Syntax. +* LilyPond-Grammatik:: Syntaxdiagramm für LilyPond +* GNU Free Documentation License:: Die Lizenz dieses Handbuchs. +* Index der LilyPond-Befehle:: +* LilyPond-Index:: +@end menu + +@docMain +@end ifnottex + +@contents + +@allowcodebreaks false + +@include notation/notation.itely +@include notation/specialist.itely + +@include notation/input.itely +@include notation/spacing.itely + +@include notation/changing-defaults.itely +@c @include notation/programming-interface.itely +@c moved to extending.tely + + +@include notation/notation-appendices.itely +@include notation/cheatsheet.itely + +@node LilyPond-Grammatik +@appendix LilyPond-Grammatik +@translationof LilyPond grammar + +Dieser Anhang enthält eine Beschreibung der LilyPond-Grammatik, +wie sie der Parser ausgibt. + +@verbatiminclude ly-grammar.txt + + +@include fdl.itexi + + +@node Index der LilyPond-Befehle +@appendix Index der LilyPond-Befehle +@translationof LilyPond command index + +Dieser Index listet alle LilyPond Befehle und Schlüsselwörter auf, +versehen mit Verweisen zu den Abschnitten im Handbuch, die den Befehl +beschreiben oder seine Verwendung diskutieren. Der erste Teil zeigt auf +die genaue Stelle im Handbuch, an der der Befehl oder das Schlüsselwort +erscheint, der zweite Teil zeigt auf den entsprechenden Abschnitt. + +@printindex ky + + +@node LilyPond-Index +@appendix LilyPond-Index +@translationof LilyPond index + +Zusätzlich zu allen LilyPond Befehlen und Schlüsselwörtern listet +dieser Index alle relevanten Begriffe auf und verlinkt sie mit den +entsprechenden Abschnitten, wo sie erklärt werden. Der erste Teil +zeigt auf die genaue Stelle im Handbuch, an der der der Begriff +vorkommt, der zweite Teil zeigt auf den gesamten Abschnitt, in dem +das Thema behandelt wird. + +@printindex cp + +@bye diff --git a/Documentation/de/notation/GNUmakefile b/Documentation/de/notation/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/de/notation/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/notation/ancient.itely b/Documentation/de/notation/ancient.itely new file mode 100644 index 0000000000..cf5452d03d --- /dev/null +++ b/Documentation/de/notation/ancient.itely @@ -0,0 +1,2797 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + +@node Notation von alter Musik +@section Notation von alter Musik +@translationof Ancient notation + +@lilypondfile[quote]{ancient-headword.ly} + +@cindex Vaticana, Editio +@cindex Medicaea, Editio +@cindex Hufnagel +@cindex Petrucci +@cindex Mensuralnotation + +@menu +* Überblick über die unterstützten Stile:: +* Alte Notation -- Allgemeines:: +* Mesurale Musik setzen:: +* Gregorianischen Choral setzen:: +* Musiksatz Alter Musik in der Praxis -- Szenarien und Lösungen:: +@end menu + +Unterstützung für Notation der Alten Musik enthält einige Eigenheiten +der Mensuralnotation und der Notation des gregorianischen +Chorals. Diese Eigenheiten können eingestellt werden, indem +man Stileigenschaften von graphischen Objekten wie Notenköpfen +und Pausen verändert, oder indem man vordefinierte fertige +Kontexte für mensurale oder Choralnotation einsetzt. + +Viele graphische Objekte, wie Notenköpfe, Fähnchen, +Versetzungszeichen, Taktarten und Pausen haben eine +@code{style}-Eigenschaft, die verändert werden kann, +um verschiedene Stile Alter Notation nachzuahmen. Siehe auch: + +@itemize +@item @ref{Mensurale Notenköpfe}, +@item @ref{Mensurale Versetzungszeichen und Tonartbezeichnung}, +@item @ref{Mensurale Pausen}, +@item @ref{Mensurale Schlüssel}, +@item @ref{Gregorianische Schlüssel}, +@item @ref{Mensurale Fähnchen}, +@item @ref{Mensurale Taktartenbezeichnungen}. +@end itemize + +Ein paar notationelle Konzepte sind inbesondere für die Notation +Alter Musik eingeführt worden: + +@itemize +@item @ref{Custodes}, +@item @ref{Divisiones}, +@item @ref{Ligaturen}. +@end itemize + +@seealso +Glossar: +@rglos{custos}, +@rglos{ligature}, +@rglos{mensural notation}. + +Notationsreferenz: +@ref{Mensurale Notenköpfe}, +@ref{Mensurale Versetzungszeichen und Tonartbezeichnung}, +@ref{Mensurale Pausen}, +@ref{Mensurale Schlüssel}, +@ref{Mensurale Fähnchen}, +@ref{Mensurale Taktartenbezeichnungen}, +@ref{Gregorianische Schlüssel}, +@ref{Custodes}, +@ref{Divisiones}, +@ref{Ligaturen}. + + + +@c {{{1 Overview of the supported styles +@node Überblick über die unterstützten Stile +@subsection Überblick über die unterstützten Stile +@translationof Overview of the supported styles + +Drei Stile sind vorhanden, um den gregorianischen Choral zu +setzen: + +@itemize +@item @emph{Editio Vaticana} ist ein vollständiger Stil für den +gregorianischen Choral, der stilistisch den Choralausgaben +von Solsemes folgt. Hierbei handelt es sich um die offizielle +Choralausgabe des Vatikans seit 1904. LilyPond unterstützt +alle Notationszeichen, die in diesem Stil benutzt werden, +inklusive Ligaturen, custodes und besondere Zeichen wie die +Quilisma und den Oriscus. + +@cindex Solesmes +@cindex Vaticana, Editio + +@item Der @emph{Editio Medicaea}-Stil stellt bestimmte +Eigenschaften zur Verfügung, die in den Medicaea (oder +Ratisbona)-Editionen benutzt wurden. Dieser Stil war vor +den Solesmes-Editionen in Benutzung. Der größte Unterschied +von dem @emph{Vaticana}-Stil sind die Schlüssel, die +nach unten gerichtete Striche haben, und die Notenköpfe, die +hier quadratisch und ebenmäßig geformt sind. + +@cindex Ratisbona, Editio +@cindex Medicaea, Editio + +@item Der @emph{Hufnagel}- oder @emph{gotische} Stil ahmt +den Stil der Schreiber bestimmter Manuskripte aus dem Deutschland +und Mitteleuropa des Mittelalters nach. Er ist nach der +Form der wichtigsten Note (der @emph{Virga}) benannt, die wie +ein kleiner Nagel aussieht. + +@cindex Hufnagel + +@end itemize + +Drei Stile ahmen die Erscheinung von Renaissancehandschriften +und -drucken der Mensuralmusik nach: + +@itemize +@item Der @emph{Mensural}-Stil versucht, den Stil von Handschriften +nachzuahmen und hat recht kleine, rhombenförmige Notenköpfe und +wie handgeschriebene Pausenzeichen. + +@cindex Mensuralstil + +@item Der @emph{Neomensural}-Stil ist eine modernisierte +und stilisierte Version des erstens: Die Notenköpfe sind +etwas breiter und die Pausen bestehen aus graden Linien. Dieser +Stil ist besonders gut geeignet, um moderne Editionen der +Mensuralmusik mit einem Incipit zu versehen. + +@cindex Neomensuralstil + +@item Der @emph{Petrucci}-Stil ist nach Ottaviano Petrucci +(1466-1539) benannt, dem ersten Drucker, der bewegliche +Stempel benutzt hat, um musikalische Notation zu drucken +(in seinem Buch @emph{Harmonice musices odhecaton}, 1501). +Dieser Stil setzt größere Notenköpfe ein als die anderen +mensuralen Stile. + +@cindex Petrucci-Stil + +@end itemize + +@emph{Baroque} (Barockstil) und @emph{Classical} (klassischer +Stil) sind keine vollständigen Stile, sondern unterscheiden +sich vom Standard nur in einigen Details: der Barockstil +verändert bestimmte Notenköpfe, der klassische Stil die +Form der Viertelpause. + +Nur der Mensuralstil hat für alle Aspekte der Notation eine +alternative Form. Die anderen Stile sind nur teilweise +ausgeführt: die gregorianischen Stile haben keine Pausen +oder Fähnchen, weil diese Zeichen im Choral nicht vorkommen, +und der Petrucci-Stil hat keine eigenen Fähnchen und +Versetzungszeichen. + +Jedes Notationselement kann unabhängig von den anderen +verändert werden, sodass man gut mensurale Fähnchen, +Petrucci-Notenköpfe, klassische Pausen und Vatikana-Schlüssel +nebeneinander benutzen kann, wenn das gewünscht ist. + +@seealso +Glossary: +@rglos{mensural notation}, +@rglos{flag}. + + +@c {{{1 Ancient notation, general +@node Alte Notation -- Allgemeines +@subsection Alte Notation -- Allgemeines +@translationof Ancient notation---common features + +@menu +* Vordefinierte Umgebungen:: +* Ligaturen:: +* Custodes:: +* Unterstützung für Generalbass:: +@end menu + +@c {{{2 Pre-defined contexts +@node Vordefinierte Umgebungen +@unnumberedsubsubsec Vordefinierte Umgebungen +@translationof Pre-defined contexts + +Für den gregorianischen Choral und die Mensuralnotation gibt +es vordefinierte Stimm- und Systemkontexte, die all die +Notationszeichen auf Werte setzen, die diesem Stil angemessen +sind. Wenn man mit den Werten zufrieden ist, kann man sofort +mit der Notation beginnen, ohne sich um die Einzelheiten von +tiefergreifenden Kontextanpassungen kümmern zu müssen. Die +definierten Kontexte sind: +@code{VaticanaVoice}, @code{VaticanaStaff}, @code{MensuralVoice} +und @code{MensuralStaff}. + +Siehe auch +@itemize +@item @ref{Gregorianische Gesangs-Kontexte}, +@item @ref{Mensural-Kontexte}. +@end itemize + +@seealso +Glossar: +@rglos{mensural notation}. + +Notationsreferenz: +@ref{Gregorianische Gesangs-Kontexte}, +@ref{Mensural-Kontexte}. + + +@c {{{2 Ligatures +@node Ligaturen +@unnumberedsubsubsec Ligaturen +@translationof Ligatures + +@cindex Ligaturen + +Eine Ligatur ist ein graphisches Symbol das wenigstens zwei unterschiedliche +Noten darstellt. Ligaturen treten ursprünglich in Manuskripten des +Gregorianischen Chorals auf, um auf- oder absteigende Notensequenzen zu +notieren. + +Ligaturen werden in LilyPond notiert, indem die dazugehörigen Noten zwischen +@code{\[} und @code{\]} eingeschlossen werden. Einige Ligaturstile benötigen +zusätzliche Syntax für eine bestimmte Ligatur. In der Standardeinstellung +setzt der @code{LigatureBracket}-Engraver ganz einfach eckige +Klammern über die Noten der Ligatur. + +@lilypond[quote,ragged-right,verbatim] +\transpose c c' { + \[ g c a f d' \] + a g f + \[ e f a g \] +} +@end lilypond + +Es gibt zwei weitere Ligaturstile: Vaticana für den gregorianischen +Choral und mensural für Mensuralnotation (wobei hier nur weiße +Ligaturen unterstützt sind, und auch sie nur beschränkt). +Um einen gestimmten Ligaturstil auszuwählen, muss der +@code{Ligature_bracket_engraver} mit einem entsprechenden +Ligatur-Engraver im Stimmenkontext ausgetauscht werden, wie +erklärt in @ref{Weiße Mensuralligaturen} und +@ref{Ligaturen der gregorianischen Quadratnotation}. + +@seealso +Glossar: +@rglos{ligature}. + +Notationsreferenz: +@ref{Weiße Mensuralligaturen}, +@ref{Ligaturen der gregorianischen Quadratnotation}. + +@knownissues +Ligaturen benötigen eine Platzaufteilung, die sich von der klassischen +Notation deutlich unterscheidet. Das ist bisher sehr schlecht verwirklicht, +sodass fast immer zu viel Platz zwischen Ligaturen ist und Zeilenumbrüche +unbefriedigend ausfallen. Text lässt sich auch nicht richtig an Ligaturen +ausrichten. + +Versetzungszeichen dürfen nicht innerhalb von einer Ligatur gedruckt +werden, sondern müssen gesammelt und vor der Ligatur ausgegeben werden. + +Die Syntax verwendet immer noch den verworfenen Infix-Stil +(@code{\[ musik. Ausdr. \]}). Aus Gründen der Konsistenz soll dies geändert werden +in den Postfix-Stil (@code{Note\[ ... Note\]}). + + +@c {{{2 Custodes +@node Custodes +@unnumberedsubsubsec Custodes +@translationof Custodes + +@cindex Custodes +@cindex Custos + +Ein @emph{Custos} (Plural: @emph{Custodes}; Lateinisch: @qq{Weiser}) ist +ein Symbol, das am Ende jedes Notensystems erscheint. Es nimmt die Tonhöhe +der ersten Note der nächsten Zeile vorweg und hilft damit dem Vortragenden, +die Zeilenwechsel während der Vorführung zu bewältigen. + +Custodes wurden bis zum 17. Jahrhundert sehr häufig in der Musiknotation +eingesetzt. Heute finden sie sich nur noch in einigen bestimmten +Notationsformen, etwa modernen Editionen des Gregorianischen Chorals wie der +@emph{editio vaticana}. LilyPond stellt unterschiedliche Custos-Symbole für +die unterschiedlichen Notationsstile zur Verfügung. + +Damit Custodes angezeigt werden, muss ein @code{Custos_engraver} +im @code{Staff}-Kontext gefordert werden. Der Aufruf folgt im Rahmen +des Layout-Kontextes, wie das folgende Beispiel zeigt. Der Stil des +Custos wird mit dem @code{override}-Befehl eingestellt, wie in dem +folgenden Beispiel gezeigt: + +@lilypond[quote,ragged-right] +\score { + \relative c'' { + a1 + \break + g + } + \layout { + \context { + \Staff + \consists Custos_engraver + \override Custos #'style = #'mensural + } + } +} +@end lilypond + +Das Custos-Zeichen wird mit der @code{style}-Eigenschaft ausgewählt. Die +unterstützten Stile sind: @code{vaticana}, @code{medicaea}, @code{hufnagel} +und @code{mensural}. Sie werden im folgenden Fragment demonstriert. + +@lilypond[quote,ragged-right,fragment] +\new Lyrics \lyricmode { + \markup { \column { + \typewriter "vaticana " + \line { " " \musicglyph #"custodes.vaticana.u0" } + } } + \markup { \column { + \typewriter "medicaea " + \line { " " \musicglyph #"custodes.medicaea.u0" } + }} + \markup { \column { + \typewriter "hufnagel " + \line { " " \musicglyph #"custodes.hufnagel.u0" } + }} + \markup { \column { + \typewriter "mensural " + \line { " " \musicglyph #"custodes.mensural.u0" } + }} +} +@end lilypond + +@seealso +Music Glossary: +@rglos{custos}. + +Referenz der Interna: +@rinternals{Custos}. + +Schnipsel: +@rlsr{Ancient notation}. + + +@c {{{2 Figured bass support +@node Unterstützung für Generalbass +@unnumberedsubsubsec Unterstützung für Generalbass +@translationof Figured bass support + +Es gibt beschränkte Unterstützung für Generalbassziffern aus der +Barockzeit. Siehe hierzu @ref{Generalbass}. + +@seealso +Glossar: +@rglos{figured bass}. + +Notationsreferenz: +@ref{Generalbass}. + + + + +@c {{{1 Typesetting mensural music +@node Mesurale Musik setzen +@subsection Mesurale Musik setzen +@translationof Typesetting mensural music + +@menu +* Mensural-Kontexte:: +* Mensurale Schlüssel:: +* Mensurale Taktartenbezeichnungen:: +* Mensurale Notenköpfe:: +* Mensurale Fähnchen:: +* Mensurale Pausen:: +* Mensurale Versetzungszeichen und Tonartbezeichnung:: +* Vorgeschlagene Versetzungszeichen (musica ficta):: +* Weiße Mensuralligaturen:: +@end menu + + +@c {{{2Mensural contexts +@node Mensural-Kontexte +@unnumberedsubsubsec Mensural-Kontexte +@translationof Mensural contexts + +@cindex MensuralVoiceContext +@cindex MensuralStaffContext + +@funindex MensuralVoice +@funindex MensuralStaff + +Die vordefinierten Kontexte @code{MensuralVoice} und +@code{MensuralStaff} können eingesetzt werden, um +ein Stück in Mensuralnotation zu schreiben. Die Kontexte +initialisieren alle relevanten Eigenschaften und +graphischen Objekte, so dass unmittelbar mit der Notation begonnen +werden kann. Siehe das folgende Beispiel: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new MensuralVoice = "discantus" \transpose c c' { + \override Score.BarNumber #'transparent = ##t { + c'1\melisma bes a g\melismaEnd + f\breve + \[ f1\melisma a c'\breve d'\melismaEnd \] + c'\longa + c'\breve\melisma a1 g1\melismaEnd + fis\longa^\signumcongruentiae + } + } + \new Lyrics \lyricsto "discantus" { + San -- ctus, San -- ctus, San -- ctus + } + >> +} +@end lilypond + +@seealso +Glossar: +@rglos{mensural notation}. + + + +@c {{{2 Mensural clefs +@node Mensurale Schlüssel +@unnumberedsubsubsec Mensurale Schlüssel +@translationof Mensural clefs + +@cindex Schlüssel, Mensuralnotation + +In der Tabelle unten werden alle Mensuralschlüssel gezeigt, die +mit dem @code{\clef}-Befehl erreicht werden. Manche Schlüssel benutzen +dasselbe Zeichen, unterscheiden sich aber in der Notenlinie, auf der der +Schlüssel notiert wird. In diesem Fällen ist eine Nummer im Schlüsselnamen +eingefügt, nummeriert von unten nach oben. Man kann aber trotzdem eine +beliebige Nummer erzwingen, wie es im Abschnitt @ref{Notenschlüssel} beschrieben +wird. Die Note, die rechts von jedem Schlüssel +gesetzt ist, zeigt das @code{c'} in Bezug zu dem jeweiligen Schlüssel. + +Petrucci hat C-Schlüssel benutzt, die unterschiedlich ausbalancierte +vertikale Balken auf der linken Seite hatten, je nachdem, auf welcher +Notenlinie er sich befand. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Beschreibung} +@tab +@b{Unterstützte Schlüssel} +@tab +@b{Beispiel} + +@item +Mensuraler C-Schlüssel im historischen Stil +@tab +@code{mensural-c1}, @code{mensural-c2},@* +@code{mensural-c3}, @code{mensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Mensuraler F-Schlüssel im historischen Stil +@tab +@code{mensural-f} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-f" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Mensuraler G-Schlüssel im historischen Stil +@tab +@code{mensural-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-g" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Mensuraler C-Schlüssel im modernen Stil +@tab +@code{neomensural-c1}, @code{neomensural-c2},@* +@code{neomensural-c3}, @code{neomensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "neomensural-c2" c +@end lilypond + +@item +Mensuraler C-Schlüssel im Petrucci-Stil, zur Benutzung auf verschiedenen +Notenlinien (im +Beispiel den Schlüssel auf der zweiten Linie) +@tab +@code{petrucci-c1}, @code{petrucci-c2},@* +@code{petrucci-c3}, @code{petrucci-c4},@* +@code{petrucci-c5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Mensuraler F-Schlüssel im Petrucci-Stil, kann auf verschiedenen +Notenlinien benutzt werden (im Beispiel auf der dritten Linie) +@tab +@code{petrucci-c1}, @code{petrucci-c2},@* +@code{petrucci-c3}, @code{petrucci-c4},@* +@code{petrucci-c5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Mensuraler G-Schlüssel im Petrucci-Stil +@tab +@code{petrucci-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-g" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@end multitable + +@seealso +Glossar: +@rglos{mensural notation}, +@rglos{clef}. + +Notationsreferenz: +@ref{Notenschlüssel}. + +@knownissues +Der mensurale G-Schlüssel ist als Petrucci-G-Schlüssel deklariert. + + +@c {{{2Mensural time signatures +@node Mensurale Taktartenbezeichnungen +@unnumberedsubsubsec Mensurale Taktartenbezeichnungen +@translationof Mensural time signatures + +@cindex Taktart, Mensuralnotation +@cindex Mensur + +LilyPond besitzt beschränkte Unterstützung für Mensurzeichen (die den +heutigen Taktarten ähneln, aber doch einige Eigenheiten haben). Die +Symbole sind starr verknüpft mit bestimmten Brüchen. Darum müssen die Werte +@code{n} und @code{m} der folgenden Tabelle in den Befehl +@code{\time n/m} eingesetzt werden, um die entsprechenden Symbole zu erhalten. + +@lilypond[quote,ragged-right] +\layout { + indent = 0.0 + \context { + \Staff + \remove Staff_symbol_engraver + \remove Clef_engraver + \remove Time_signature_engraver + } +} +{ + \set Score.timing = ##f + \set Score.barAlways = ##t + s_\markup { "\\time 4/4" }^\markup { " " \musicglyph +#"timesig.neomensural44" } + s + s_\markup { "\\time 2/2" }^\markup { " " \musicglyph +#"timesig.neomensural22" } + s + s_\markup { "\\time 6/4" }^\markup { " " \musicglyph +#"timesig.neomensural64" } + s + s_\markup { "\\time 6/8" }^\markup { " " \musicglyph +#"timesig.neomensural68" } + \break + s_\markup { "\\time 3/2" }^\markup { " " \musicglyph +#"timesig.neomensural32" } + s + s_\markup { "\\time 3/4" }^\markup { " " \musicglyph +#"timesig.neomensural34" } + s + s_\markup { "\\time 9/4" }^\markup { " " \musicglyph +#"timesig.neomensural94" } + s + s_\markup { "\\time 9/8" }^\markup { " " \musicglyph +#"timesig.neomensural98" } + \break + s_\markup { "\\time 4/8" }^\markup { " " \musicglyph +#"timesig.neomensural48" } + s + s_\markup { "\\time 2/4" }^\markup { " " \musicglyph +#"timesig.neomensural24" } +} +@end lilypond + +Mit der @code{style}-Eigenschaft des Objektes @code{TimeSignature} +können die Taktarten angewählt werden. Unterstützte Stile sind: +@code{neomensural} und @code{mensural}. In der Tabelle oben wurde der +neomensurale Stil verwendet. Im folgenden Beispiel sind die +unterschiedlichen Stile dargestellt. + +@lilypond[ragged-right,fragment,relative=1,quote] +{ + \textLengthOn + + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter default } + + \override Staff.TimeSignature #'style = #'numbered + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter numbered } + + \override Staff.TimeSignature #'style = #'mensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter mensural } + + \override Staff.TimeSignature #'style = #'neomensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter neomensural } + \override Staff.TimeSignature #'style = #'single-digit + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter single-digit } +} +@end lilypond + +@seealso +Glossary: +@rglos{mensural notation}. + +Notationsreferenz: +@ref{Taktangabe}. + +@knownissues +Die Verhältnisse der Notenwerte können nicht bei Mensurwechsel geändert +werden, weil sie nicht konstant sind. Zum Beispiel kann das Verhältnis 1@tie{}brevis = 3@tie{}semibrevis +(tempus perfectum) manuell erstellt werden, indem folgende Variable erstellt +wird: + +@example +breveTP = #(ly:make-duration -1 0 3 2) +@dots{} +@{ c\breveTP f1 @} +@end example + +@noindent +Hiermit wird die Variable @code{breveTP} auf den Wert +@qq{3/2 mal 2 = 3 mal eine Ganze} gesetzt. + +Die Symbole @code{mensural68alt} und @code{neomensural68alt} +(alternative Symbole für 6/8) können nicht mit dem +@code{\time}-Befehl. Anstelle dess muss +@code{\markup @{\musicglyph #"timesig.mensural68alt" @}} benutzt +werden. + + +@c {{{2Mensural note heads +@node Mensurale Notenköpfe +@unnumberedsubsubsec Mensurale Notenköpfe +@translationof Mensural note heads + +@cindex Notenköpfe, Mensuralnotation + +Für die Mensuralnotation kann ein Notenkopfstil ausgewählt werden, der sich +vom Standard (@code{default}) unterscheidet. Dies wird erreicht, indem die +@code{style}-Eigenschaft des Notenkopf-(@code{NoteHead})-Objekts auf +einen der Werte @code{baroque}, @code{neomensural}, @code{mensural}, +@code{petrucci}, @code{blackpetrucci} oder @code{semipetrucci} gesetzt wird. + +Der barocke (@code{baroque}) Stil unterscheidet sich vom Standard +(@code{default}) folgendermaßen: + +@itemize +@item Er stellt einen @code{maxima}-Notenkopf zur Verfügung und +@item setzt eine eckige Form für die Brevis (@code{\breve}) ein. +@end itemize + +Die Stile @code{neomensural}, @code{mensural} und @code{petrucci} +unterscheiden sich vom barocken Stil folgendermaßen: + +@itemize +@item Für Semibrevis und kleinere Notenwerte werden rhombenförmige +Notenköpfe eingesetzt und +@item die Hälse werden über den Kopf zentriert. +@end itemize + +Der @code{blackpetrucci}-Stil erstellt Notenköpfe zur Benutzung für die +schwarze Mensuralnotation oder @emph{coloratio}-Abschnitten in der +weißen Menusralnotation. Weil der Notenkopfstil nicht die Anzahl der +Fähnchen beeinflusst, muss eine Semiminia in diesem Stil als +@code{a8*2} notiert werden, nicht als @code{a4}, weil sie sonst wie +eine Minima aussehen würde. Der Faktor, mit dem der Notenwert multipliziert +wird, kann sich ändern, wenn @emph{coloratio} etwa zur Notation +von Triolen eingesetzt wurde. + +Mit dem @code{semipetrucci}-Stil können halb-schwarze Notenköpfe +notiert werden (Brevis, Longa und Maxima). + +Das folgende Beispiel zeigt den Petrucci-Stil: + +@c Renaissance music doesn't use bar lines ... but they do help to +@c separate the notes for easier identification. + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\autoBeamOff +\override NoteHead #'style = #'petrucci +a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a' +\override NoteHead #'style = #'semipetrucci +a'\breve*5/6 +\override NoteHead #'style = #'blackpetrucci +a'8*4/3 a' +\override NoteHead #'style = #'petrucci +a'\longa +@end lilypond + +@seealso +Glossar: +@rglos{mensural notation}, +@rglos{note head}. + +Notationsreferenz: +@ref{Notenkopfstile}. + + +@c {{{2Mensural flags +@node Mensurale Fähnchen +@unnumberedsubsubsec Mensurale Fähnchen +@translationof Mensural flags + +@cindex Fähnchen, Mensuralnotation + +Mit der Fähnchen-(@code{flag-style})-Eigenschaft der graphischen Objekte +@qq{Hals} (@code{Stem}) können auch Mensuralfähnchen gesetzt +werden. Neben dem Standardstil (@code{default}) ist +nur (@code{mensural}) unterstützt. + +@lilypond[quote,fragment,ragged-right,verbatim] +\override Stem #'flag-style = #'mensural +\override Stem #'thickness = #1.0 +\override NoteHead #'style = #'mensural +\autoBeamOff +c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 +c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 +@end lilypond + +Dabei ist die innerste Fahne immer vertikal auf eine Notenlinie ausgerichtet. + +Es gibt keinen eigenen Stil für den neomensuralen oder Petrucci-Stil. +Für die Notation des Gregorianischen Chorals gibt es keine +Fähnchen. + +@seealso +Glossar: +@rglos{mensural notation}, +@rglos{flag}. + +@knownissues +Die Positionierung der Fähnchen an den Hälsen ist leicht verschoben. + +Vertikale Ausrichtung der Fähnchen an einer Notenlinie geht von der Annahme +aus, dass der Hals entweder genau auf einer Notenlinie oder genau zwischen zwei +Notenlinien endet. Das ist aber nicht unbedingt immer der Fall, weil LilyPond +komplizierte Methoden zur Ermittlung des besten Layouts verwendet. Diese +Methoden sollten aber eigentlich nicht zur Notation von mensuraler Musik +eingesetzt werden. + + +@c {{{2Mensural rests +@node Mensurale Pausen +@unnumberedsubsubsec Mensurale Pausen +@translationof Mensural rests + +@cindex Pausen, Mensuralnotation + +Besondere Pausensymbole für die Notation der Alten Musik können mit der +@code{style}-Eigenschaft des graphischen Objektes (grob) @qq{Pause} +(@code{Rest}) angewählt werden. Unterstützte Stile sind +klassisch (@code{classical}), @code{neomensural} und @code{mensural}. +Der klassische (@code{classical}) Stil unterscheidet sich vom Standardstil +(@code{default}) nur darin, dass die Viertelpause wie eine gespiegelte +Achtelpause aussieht. Der mensurale und neomensurale Stil ahmt die +Form von Pausen nach, wie man sie in Drucken bis zum 16. Jahrhundert +finden kann. + +Das folgende Beispiel demonstriert den mensuralen und den neomensuralen +Stil: + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\override Rest #'style = #'classical +r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'mensural +r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'neomensural +r\longa^"neomensural" r\breve r1 r2 r4 r8 r16 +@end lilypond + +Es gibt keine 32-stel- und 64-stel-Pausen für den mensuralen oder +neomensuralen Stil. Anstatt dessen werden die Pausenformen des +Standardstiles verwendet. + +Eine Liste aller Pausen findet sich in @rlsr{Ancient notation}. + +@seealso +Notationsreferenz: +@ref{Pausen}. + +Schnipsel: +@rlsr{Ancient notation}. + +@knownissues +Das Zeichen für die Maxima-Pause im mensuralen Stil ist eigentlich eine +perfekte Longa-Pause: zwei (oder drei) Longa-Pausen müssen benutzt werden, +um eine Maxima-Pause zu setzen. Longa-Pausen werden nicht automatisch gruppiert, +sodass man das manuell vornehmen muss, indem man Pausen mit Tonhöhe +einsetzt. + + +@c {{{2Mensural accidentals and key signatures +@node Mensurale Versetzungszeichen und Tonartbezeichnung +@unnumberedsubsubsec Mensurale Versetzungszeichen und Tonartbezeichnung +@translationof Mensural accidentals and key signatures + +@cindex Versetzungszeichen, Mensuralnotation +@cindex Vorzeichen, Mensuralnotation +@cindex Tonart, Mensuralnotation + +Der @code{mensural}-Stil stellt ein Kreuz und ein B zur Verfügung, +die sich vom Standardstil unterscheiden. Wenn das Auflösungszeichen +notiert wird, wird es aus dem @code{vaticana}-Stil gesetzt. + +@lilypond[quote,ragged-right,staffsize=26] +\markup { + \column { + "mensural" + \line { " " \musicglyph #"accidentals.mensural-1" + " " \musicglyph #"accidentals.mensural1" } + } +} +@end lilypond + +Der Stil für Versetzungszeichen und Vorzeichen wird durch die +@code{glyph-name-alist}-Eigenschaft der Grobs +@code{Accidental} und @code{KeySignature} bestimmt, +also etwa folgendermaßen: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + + +@seealso +Glossar: +@rglos{mensural notation}, +@rglos{Pitch names}, +@rglos{accidental}, +@rglos{key signature}. + +Notationsreferenz: +@ref{Tonhöhen}, +@ref{Versetzungszeichen}, +@ref{Automatische Versetzungszeichen}, +@ref{Tonartbezeichnung}. + +Referenz der Interna: +@rinternals{KeySignature}. + + +@c {{{2 Annotational accidentals (musica ficta) +@node Vorgeschlagene Versetzungszeichen (musica ficta) +@unnumberedsubsubsec Vorgeschlagene Versetzungszeichen (@emph{musica ficta}) +@translationof Annotational accidentals (musica ficta) + +In der europäischen Notation bis etwa 1600 wurde von Sängern erwartet, +dass sie eigenständig Noten nach bestimmten Regeln chromatisch veränderten. +Das wird als @notation{musica ficta} bezeichnet. In modernen +Transkriptionen werden diese Versetzungszeichen üblicherweise über +die Note notiert. + +@cindex Versetzungszeichen, musica ficta +@cindex Musica ficta + +Es ist möglich, derartige Versetzungszeichen zu notieren, und die Anzeige +kann zwischen normaler Satzweise und musica ficta hin- und hergewechselt +werden. Hierzu muss @code{suggestAccidentals} auf wahr gesetzt werden: + +@funindex suggestAccidentals + +@lilypond[verbatim,fragment,relative=1] +fis gis +\set suggestAccidentals = ##t +ais bis +@end lilypond + +Damit wird @emph{jedes} folgende Versetzungszeichen über dem System +gesetzt werden, bis die Eigenschaft mit @code{\set suggestAccidentals = +##f} wieder zum Standardverhalten verändert wurde. Eine praktischere +Lösung ist es, @code{\once \set suggestAccidentals = ##t} zu benutzen, +was man als Variable definieren kann: + +@lilypond[quote,verbatim] +ficta = { \once \set suggestAccidentals = ##t } +\score { \relative c'' + \new MensuralVoice { + \once \set suggestAccidentals = ##t + bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1 + } +} +@end lilypond + + +@seealso +Referenz der Interna: +@rinternals{Accidental_engraver}, +@rinternals{AccidentalSuggestion}. + + +@c {{{2White mensural ligatures +@node Weiße Mensuralligaturen +@unnumberedsubsubsec Weiße Mensuralligaturen +@translationof White mensural ligatures + +@cindex Mensuralligaturen +@cindex Weiße Mensuralligaturen +@cindex Ligaturen, weiße Mensuralnotation + +Begrenzte Unterstützung für Ligaturen der weißen Mensuralnotation ist +vorhanden. + +Um weiße Mensuralligaturen zu benutzen, muss innerhalb des Layout-Blocks +im @code{Voice}-Kontext der @code{Mensural_ligature_engraver} +aktiviert werden und gleichzeitig der +@code{Ligature_bracket_engraver} (der die Klammern über den Noten +setzt) entfernt werden, wie im Beispiel. + +@example +\layout @{ + \context @{ + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + @} +@} +@end example + +Zusätzlich zu diesen Einstellungen gibt es keine eigenen Befehle, die die +Form einer Ligatur bestimmen. Die Form wird vielmehr aus Tonhöhen und +Tondauern der in Klammern gesetzten Noten geschlossen. Diese +Herangehensweise erfordert einige Eingewöhnung, hat aber den großen +Vorteil, dass der musikalische Inhalt der Ligatur dem Programm bekannt ist. +Das ist nicht nur notwendig für korrekte MIDI-Ausgabe, sondern erlaubt +es auch, automatische Transkriptionen von Ligaturen anzufertigen. + +An bestimmten Stellen können zwei aufeinanderfolgende Noten entweder als +zwei Quadrate oder eine Obliqua (Flexa) dargestellt werden. In derartigen +Fällen ist die Quadratform der Standard, aber die Obliqua kann verlangt +werden, indem man die @code{ligature-flexa}-Eigenschaft des @emph{zweiten} +Notenkopfes setzt. Die Länge der Obliqua kann durch die Notenkopfeigenschaft +@code{flexa-width} definiert werden. + +Eine Datei kann zum Beispiel so aussehen: + +@c @example +@c \set Score.timing = ##f +@c \set Score.defaultBarType = "empty" +@c \override NoteHead #'style = #'neomensural +@c \override Staff.TimeSignature #'style = #'neomensural +@c \clef "petrucci-g" +@c \[ c'\maxima g \] +@c \[ d\longa c\breve f e d \] +@c \[ c'\maxima d'\longa \] +@c \[ e'1 a g\breve \] +@c @end example +@lilypond[quote,ragged-right,verbatim] +\score { + \transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'petrucci + \override Staff.TimeSignature #'style = #'mensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa + \override NoteHead #'ligature-flexa = ##t + \once \override NoteHead #'flexa-width = #3.2 + c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] + } + \layout { + \context { + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + } +} +@end lilypond + +Wenn der @code{Ligature_bracket_engraver} nicht durch den +@code{Mensural_ligature_engraver} ersetzt wird, werden die Noten +wie folgt ausgegeben: + +@lilypond[quote,ragged-right] +\transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] +} +@end lilypond + +@seealso +Glossar: +@rglos{ligature}. + +Notationreferenz: +@ref{Ligaturen der gregorianischen Quadratnotation}, +@ref{Ligaturen}. + +@knownissues +Die horizontale Positionierung ist sehr schlecht. + +Versetzungszeichen können mit vorhergehenden Noten kollidieren. + + + +@c {{{1 Typesetting Gregorian chant +@node Gregorianischen Choral setzen +@subsection Gregorianischen Choral setzen +@translationof Typesetting Gregorian chant + +@menu +* Gregorianische Gesangs-Kontexte:: +* Gregorianische Schlüssel:: +* Gregorianische Versetzungszeichen und Tonartbezeichnung:: +* Divisiones:: +* Artikulationszeichen des Gregorianischen Chorals:: +* Augmentationspunkte (@emph{morae}):: +* Ligaturen der gregorianischen Quadratnotation:: +@end menu + +Wenn ein gregorianischer Choral notiert wird, wählt der +@code{Vaticana_ligature_engraver} automatisch die richtigen +Notenköpfe aus, so dass man den Notenkopfstil nicht explizit +setzen muss. Der Stil kann dennoch gesetzt werden, etwa +auf @code{vaticana_punctum} um punctum-Neumen zu erzeugen. Ähnlich +funktioniert auch der @code{Mensural_ligature_engraver}, +der Mensuralligaturen setzt. + +@seealso +Glossar: +@rglos{ligature}. + +Notationreferenz: +@ref{Weiße Mensuralligaturen}, +@ref{Ligaturen}. + + +@c {{{2Gregorian chant contexts +@node Gregorianische Gesangs-Kontexte +@unnumberedsubsubsec Gregorianische Gesangs-Kontexte +@translationof Gregorian chant contexts + +@cindex VaticanaVoiceContext +@cindex VaticanaStaffContext + +@funindex VaticanaVoice +@funindex VaticanaStaff + +Die vordefinierten Kontexte @code{VaticanaVoice} (für eine +gregorianische Stimme) und @code{VaticanaStaff} (für ein +gregorianisches Notensystem) können eingesetzt werden, um +Gregorianischen Choral im Stil der Editio Vaticana zu setzen. Diese +Kontexte initialisieren alle relevanten Eigenschaften für das Notensystem +und die graphischen Objekte, so dass unmittelbar mit der Notation +begonnen werden kann. Siehe das folgende Beispiel: + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + << + \new VaticanaVoice = "cantus" { + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] + f \divisioMinima + \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] + c' \divisioMinima \break + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima + } + \new Lyrics \lyricsto "cantus" { + San- ctus, San- ctus, San- ctus + } + >> +} +@end lilypond + + + +@c {{{2 Gregorian clefs +@node Gregorianische Schlüssel +@unnumberedsubsubsec Gregorianische Schlüssel +@translationof Gregorian clefs + +@cindex Schlüssel, greg. Choral + +Die folgende Tabelle zeigt alle Schlüssel für den gregorianischen +Choral, die mit dem @code{\clef}-Befehl unterstützt sind. Einige +Schlüssel benutzen das selbe Zeichen, unterscheiden sich aber in +der Notenlinie, auf der der Schlüssel gesetzt wird. In diesem +Fall wird eine Nummer benutzt, die die Notenlinie von unten nach +oben kennzeichnet. Man kann die Schlüssel aber auch manuell auf +eine bestimmte Notenlinie zwingen, wie gezeigt in @ref{Notenschlüssel}. +Die Note, die rechts von den Schlüsseln im Beispiel gezeigt wird, +ist ein @code{c'} in Bezug auf den aktuellen Schlüssel. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Beschreibung} +@tab +@b{unterstützter Schlüssel} +@tab +@b{Beispiel} + +@item +Do-Schlüssel der Editio Vaticana +@tab +@code{vaticana-do1}, @code{vaticana-do2},@* +@code{vaticana-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-do2" + c +@end lilypond + +@item +Fa-Schlüssel der Editio Vaticana +@tab +@code{vaticana-fa1}, @code{vaticana-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-fa2" + c +@end lilypond + +@item +Do-Schlüssel der Editio Medicaea +@tab +@code{medicaea-do1}, @code{medicaea-do2},@* +@code{medicaea-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-do2" + c +@end lilypond + +@item +Fa-Schlüssel der Editio Medicaea +@tab +@code{medicaea-fa1}, @code{medicaea-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-fa2" + c +@end lilypond + +@item +Hufnagel Do-Schlüssel für den historischen Stil +@tab +@code{hufnagel-do1}, @code{hufnagel-do2},@* +@code{hufnagel-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do2" + c +@end lilypond + +@item +Hufnagel Fa-Schlüssel für den historischen Stil +@tab +@code{hufnagel-fa1}, @code{hufnagel-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-fa2" + c +@end lilypond + +@item +Kombinierter Do/Fa-Hufnagelschlüssel für den historischen Stil +@tab +@code{hufnagel-do-fa} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do-fa" + c +@end lilypond + +@end multitable + +@seealso +Glossar: +@rglos{clef}. + +Notationsreferenz: +@ref{Notenschlüssel}. + + +@c {{{2 Gregorian accidentals and key signatures +@node Gregorianische Versetzungszeichen und Tonartbezeichnung +@unnumberedsubsubsec Gregorianische Versetzungszeichen und Tonartbezeichnung +@translationof Gregorian accidentals and key signatures + +@cindex Vorzeichen, greg. Choral +@cindex Versetzungszeichen, greg. Choral +@cindex Tonarten, greg. Choral + +Es gibt Versetzungszeichen in drei unterschiedlichen Stilen für die +Notation des gregorianischen Chorals: + +@lilypond[quote,ragged-right,staffsize=26] +\markup { + \column { + "vaticana" + \line { " " \musicglyph #"accidentals.vaticana-1" + " " \musicglyph #"accidentals.vaticana0" } + } + \column { + "medicaea" + \line { " " \musicglyph #"accidentals.medicaea-1" } + } + \column { + "hufnagel" + \line { " " \musicglyph #"accidentals.hufnagel-1" } + } +} +@end lilypond + +Wie zu sehen ist, werden nicht alle Versetzungszeichen von jedem Stil +unterstützt. Wenn versucht wird, ein Versetzungszeichen zu notieren, +das von einem bestimmten Stil nicht unterstützt wird, wechselt LilyPond zu einem +anderen Stil. + +@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] +@c {ancient-accidentals.ly} + +Der Stil für Versetzungs- und Vorzeichen wird von der +@code{glyph-name-alist}-Eigenschaft der Grobs +@code{Accidental} und @code{KeySignature} +kontrolliert, beispielsweise: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + +@seealso +Glossar: +@rglos{accidental}, +@rglos{key signature}. + +Notationsreferenz: +@ref{Tonhöhen}, +@ref{Versetzungszeichen}, +@ref{Automatische Versetzungszeichen}, +@ref{Tonartbezeichnung}. + +Referenz der Interna: +@rinternals{KeySignature}. + + +@c {{{2Divisiones +@node Divisiones +@unnumberedsubsubsec Divisiones +@translationof Divisiones + +@cindex divisio +@cindex divisiones +@cindex finalis + +Die Notation des gregorianischen Chorals benutzt keine Pausen, anstatt +dessen werden @emph{Divisiones} eingesetzt. + +Eine @emph{divisio} (Plural: @emph{divisiones}; Latein: @qq{Teilung}) ist ein +Symbol des Notensystemkontextes, das benutzt wird, um Phrasierung und +Abschnitte im Gregorianischen Choral anzuzeigen. Die musikalische Bedeutung +von @emph{divisio minima}, @emph{divisio maior} und @emph{divisio maxima} kann +beschrieben werden als kurze, mittlere und lange Pause, ungefähr wie die +Atemzeichen aus dem Abschnitt @ref{Atemzeichen}. Das @emph{finalis}-Zeichen +bezeichnet nicht nur das Ende eines Chorals, sondern wird auch oft innerhalb +eines Antiphons/Responsoriums benutzt, um das Ende eines Abschnitts anzuzeigen. + +Divisiones können benutzt werden, indem die Datei @file{gregorian.ly} +in die Quelldatei eingefügt wird. Hier sind die entsprechenden Definitionen +schon abgelegt, so dass es genügt, die Befehle @code{\divisioMinima}, +@code{\divisioMaior}, @code{\divisioMaxima} und @code{\finalis} an den +entsprechenden Stellen zu schreiben. Einige Editionen verwenden eine +@emph{virgula} oder @emph{caesura} anstelle der divisio minima. Darum findet +sich in der Datei @file{gregorian.ly} auch eine Definition für +@code{\virgula} und @code{\caesura}. + +@lilypond[quote,ragged-right] +\include "gregorian.ly" +\score { + << + \context VaticanaVoice { + \override TextScript #'padding = #3 + g a g + s^\markup { "divisio minima" } + \divisioMinima + g a g + s^\markup { "divisio maior" } + \divisioMaior + g a g + s^\markup { "divisio maxima" } + \divisioMaxima + \break + g a g + s^\markup { "finalis" } + \finalis + g a g + s^\markup { "virgula" } + \virgula + g a g + s^\markup { "caesura" } + \caesura + g a g + } + >> +} +@end lilypond + +@funindex \virgula +@funindex \caesura +@funindex \divisioMinima +@funindex \divisioMaior +@funindex \divisioMaxima +@funindex \finalis +@funindex virgula +@funindex caesura +@funindex divisioMinima +@funindex divisioMaior +@funindex divisioMaxima +@funindex finalis + +@predefined +@code{\virgula}, +@code{\caesura}, +@code{\divisioMinima}, +@code{\divisioMaior}, +@code{\divisioMaxima}, +@code{\finalis}. +@endpredefined + + +@seealso +Glossary: +@rglos{caesura}, +@rglos{divisio}. + +Notationsreferenz: +@ref{Atemzeichen}. + +Installierte Dateien: +@file{gregorian.ly}. + +Referenz der Interna: +@rinternals{BreathingSign}. + + +@c {{{2Gregorian articulations +@node Artikulationszeichen des Gregorianischen Chorals +@unnumberedsubsubsec Artikulationszeichen des Gregorianischen Chorals +@translationof Gregorian articulation signs + +@cindex Artikulationszeichen, greg. Choral + +Zusätzlich zu den Standardartikulationszeichen, wie sie im Abschnitt +@ref{Artikulationszeichen und Verzierungen} beschrieben werden, werden +auch Artikulationszeichen für die Notation des Editio +Vaticana-Stils zur Verfügung gestellt. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \override TextScript #'font-family = #'typewriter + \override TextScript #'font-shape = #'upright + \override Script #'padding = #-0.1 + a\ictus_"ictus " \bar "" \break + a\circulus_"circulus " \bar "" \break + a\semicirculus_"semicirculus " \bar "" \break + a\accentus_"accentus " \bar "" \break + \[ a_"episema" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] + } +} +@end lilypond + +@seealso +Notationreferenz: +@ref{Artikulationszeichen und Verzierungen}. + +Schnipsel: +@rlsr{Ancient notation}. + +Referenz der Interna: +@rinternals{Episema}, +@rinternals{EpisemaEvent}, +@rinternals{Episema_engraver}, +@rinternals{Script}, +@rinternals{ScriptEvent}, +@rinternals{Script_engraver}. + +@knownissues +Einige Artikulationszeichen sind vertikal zu dich an den +entsprechenden Notenköpfen gesetzt. + + +@c {{{2Augmentum dots (@emph{morae}) +@node Augmentationspunkte (@emph{morae}) +@unnumberedsubsubsec Augmentationspunkte (@emph{morae}) +@translationof Augmentum dots (@emph{morae}) + +Verlängerungspunkte, auch als @emph{morae} bezeichnet, werden +mit der Musikfunktion @code{\augmentum} hinzugefügt. Es +handelt sich um eine eigenständige Funktion und nicht um +einen Präfix, der zu einer Note gehört. Die Funktion wirkt +sich nur auf den direkt vorhergehenden musik. Ausdruck aus. +Das heißt, dass @code{\augmentum \virga c} keine sichtbare +Wirkung hat. Anstelle dessen sollte geschrieben werden: +@code{\virga \augmentum c} oder @code{\augmentum @{\virga c@}}. +Man kann @code{\augmentum @{a g@}} als Kurznotation für +@code{\augmentum a \augmentum g} schreiben. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \[ \augmentum a \flexa \augmentum g \] + \augmentum g + } +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Atemzeichen}. + +Referenz der Interna: +@rinternals{BreathingSign}. + +Schnipsel: +@rlsr{Ancient notation}. + + + +@c {{{2Gregorian square neumes ligatures +@node Ligaturen der gregorianischen Quadratnotation +@unnumberedsubsubsec Ligaturen der gregorianischen Quadratnotation +@translationof Gregorian square neume ligatures + +@cindex Quadratische Neumenligaturen +@cindex Gregorianische quadratische Neumenligaturen +@cindex Ligaturen der quadratischen Neumennotation + +Beschränkte Unterstützung für gregorianische Quadratneumen-Ligaturen +(nach dem Stil der Editio Vaticana) ist vorhanden. Die wichtigsten +Ligaturen können schon gesetzt werden, aber wichtige Eigenschaften +anspruchsvoller Typographie wie horizontale Ausrichtung von mehreren +Ligaturen, korrekte Silbenpositionierung und richtiger Umgang mit +Versetzungszeichen fehlen noch. + +Die Unterstützung für gregorianische Neumen wird aktiviert, indem +man mit @code{\include} die Datei @file{gregorian.ly} am Anfang +der Quelldatei aktiviert. Damit werden zusätzliche Befehl +zur Verfügung gestellt, mit denen man die Neumensymbole des +Chorals produzieren kann. + +Notenköpfe können verändert und/bzw. verbunden werden. + +@funindex \virga +@funindex \stropha +@funindex \inclinatum +@funindex \auctum +@funindex \descendens +@funindex \ascendens +@funindex \oriscus +@funindex \quilisma +@funindex \cavum +@funindex \deminutum +@funindex linea +@funindex virga +@funindex stropha +@funindex inclinatum +@funindex auctum +@funindex descendens +@funindex ascendens +@funindex oriscus +@funindex quilisma +@funindex cavum +@funindex deminutum +@funindex linea + +@itemize +@item Die Form des Notenkopf kann verändert werden, indem man +@emph{vor} die Noten folgende Befehle schreibt: +@code{\virga}, +@code{\stropha}, +@code{\inclinatum}, +@code{\auctum}, +@code{\ascendens}, +@code{\descendens}, +@code{\oriscus}, +@code{\quilisma}, +@code{\deminutum}, +@code{\cavum}, +@code{\linea}. + +@item Eigentliche Ligaturen (also Noten, die miteinander verbunden sind), +werden erstellt, indem man einen der verbindenden Befehle, +@code{\pes} oder @code{\flexa} für Aufwärts- bzw. Abwärtsbewegung, +zwischen die zu verbindenden Noten setzt. +@end itemize + +Eine Notenbezeichnung ohne jeglichen Modifikator produziert +ein @emph{punctum}. Alle anderen Neumen, auch einzelne +Noten-Neumen mit einer anderen Form als der @emph{Virga} +werden generell als Ligaturen betrachtet und deshalb +von den Zeichen @code{\[...\]} eingeklammert werden. + +@noindent +Einzelne Noten-Neumen: + +@itemize +@item Das @emph{punctum} ist die grundlegende Notenform (im +@emph{Vaticana}-Stil: ein Quadrat mit gebogenen Ober- und +Unterkanten). Zusätzlich gibt es auch noch das oblique +@emph{punctum inclinatum}, das mit dem Präfix @code{\inclinatum} +erstellt wird. Das normale @emph{punctum} kann durch +@code{\cavum} verändert werden, wodurch eine hohle Note +erstellt wird, und durch @code{\linea}, wodurch vertikale +Linien zu den Seiten der Note gezogen werden. + +@item Die @emph{virga} hat einen absteigenden Hals auf der +rechten Seite. Sie wird durch den Modifikator @code{\virga} +erstellt. +@end itemize + +@noindent +Ligaturen + +Anders als in anderen Neumennotationssystemen, wird das +typographische Aussehen einer Ligatur nicht durch Eingabebefehle +direkt vorgegeben, sondern richtet sich nach bestimmten +Darstellungsregeln, die durch die musikalische Bedeutung +bestimmt werden. Eine Ligatur mit drei Noten beispielsweise, +mit der Form tief-hoch-tief, wie etwa @code{\[ a \pes b +\flexa g \]}, ergibt einen Torculus, der aus drei +Punctum-Köpfen besteht, während die Form hoch-tief-hoch, +wie etwa @code{\[ a \flexa g \pes b \]}, einen Porrectus +mit einer gebogenen Flexa und nur einem Punctum-Kopf ergibt. +Es gibt keinen Befehl, mit dem explizit eine gebogene +Flexa gesetzt werden können; die Entscheidung, wann eine +derartige Form im Notenbild vorkommen soll, wird durch die +musikalische Bedeutung der Noten vorgegeben. Die Idee +hinter dieser Art der Eingabe ist es, dass der musikalische +Inhalt von der graphischen Ausgabe getrennt wird. Dadurch +wird es möglich, die gleiche Quelldatei zu benutzen, um +beispielsweise die Noten in einem anderen Stil darzustellen. + +@noindent +Liquescente Neumen + +Eine weitere Hauptkategorie der Notation von gregorianischem +Choral sind die sogenannten liquescenten Neumen. Sie werden +unter bestimmten Umständen am Ende einer Silbe eingesetzt, +die auf einen @qq{liquescenten} Buchstaben endet (das sind +die Konsonanten, die eine Tonhöhe haben können, also die +Nasale, l, r, v, j und ihre diphtongalen Entsprechungen). +Liquescente Neumen werden also nie alleine eingesetzt (auch +wenn sie isoliert produziert werden können) und treten immer +am Ende einer Silbe auf. + +Liquescente Neumen werden graphisch auf zwei Arten dargestellt: +mit einer kleineren Note oder indem die Hauptnote nach oben +bzw. unten @qq{gedreht} wird. Die erste Darstellungsweise +erreicht man, indem einen normalen @code{pes} oder @code{flexa} +schreibt und dann die Form der zweiten Note verändert: +@code{\[ a \pes \deminutum b \] }. Die zweite Darstellungsweise +erreicht man, indem die Form einer einzelnen Neume mit +@code{\auctum} und einem der Richtungsanzeiger +@code{\descendens} bzw. @code{\ascendens} versieht: +@code{ \[ \auctum \descendens a \] }. + +@noindent +Spezielle Zeichen + +Eine dritte Kategorie besteht aus einer kleinen Anzahl an +Zeichen mit einer besonderen Bedeutung: die @emph{quilisma}, der +@emph{oriscus} und der @emph{strophicus}. Sie werden +notiert, indem man vor die entsprechende Note den +Modifikator @code{\quilisma}, @code{\oriscus} oder +@code{\stropha} schreibt. + +Im Grunde kann innerhalb der Ligaturbegrenzer @code{\[} und +@code{\]} eine beliebige Anzahl ans Notenköpfen eingefügt +werden und Präfixe wie @code{\pes}, @code{\flexa}, @code{\virga}, +@code{\inclinatum} usw. können beliebig untereinander +kombiniert werden. Der Einsatz der Regeln, mit denen die +Ligaturen konstruiert werden, wird entsprechend angepasst. +Auf diese Art kann eine unendliche Anzahl an Ligaturen erstellt +werden. + +Die Benutzung der Notationszeichen folgt allerdings bestimmten +Regeln, die nicht von LilyPond überprüft werden. Die +@emph{quilisma} beispielsweise findet sich immer als +mittlere Note einer aufsteigenden Ligatur und fällt +üblicherweise auf einen Halbtonschritt, aber es ist durchaus +möglich, wenn auch nicht @emph{richtig}, eine Quilisma +bestehend aus einer Note zu notieren. + +Neben den Notenformen definiert die Datei @file{gregorian.ly} +auch die Befehle @code{\versus}, @code{\responsum}, @code{\ij}, +@code{\iij}, @code{\IJ} und @code{\IIJ}, mit denen die +entsprechenden Zeichen, etwa für den Text oder als +Abschnittsmarkierung erstellt werden können. Diese +Befehl benutzen bestimmte Unicode-Zeichen und funktionieren +nur, wenn eine Schriftart vorhanden ist, die diese Zeichen +unterstützt. + +@c neume table + +In der folgenden Tabelle wird eine begrenzte, aber dennoch +repräsentative Anzahl an Ligaturen der Neumennotation dargestellt, +denen Fragmente beigefügt sind, die die Notation in LilyPond +zeigen. Die Tabelle basiert auf der erweiterten Neumentabelle +des zweiten Bands des Antiphonale Romanum (@emph{Liber +Hymnarius}), 1983 von den Mönchen von Solsemes herausgegeben. +Die erste Spalte zeigt die Bezeichnungen der Ligaturen, fett für +die Normalform, kursiv für die liquescente Form. Die dritte +Spalte zeigt Code-Schnipsel, mit denen die Ligatur notiert +werden kann, wobei die Noten @code{g}, @code{a} und @code{b} +als Tonhöhen eingesetzt werden. + + +@b{Neumen aus einzelnen Noten} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Grundform} und @emph{liquescente Form} +@tab +@b{Ausgabe} +@tab +@b{LilyPond-Code} + +@c TODO: \layout block is identical in all of the below examples. +@c Therefore, it should somehow be included rather than duplicated all +@c the time. --jr + +@c why not make variables in ly/engraver-init.ly? --hwn + +@c Because it's just used to typeset plain notes without +@c a staff for demonstration purposes rather than something +@c special of Gregorian chant notation. --jr + + +@item +@b{Punctum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \cavum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \cavum b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \linea b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \linea b \]} + +@item +@emph{Punctum Auctum Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Ascendens + \[ \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \ascendens b \]} + +@item +@emph{Punctum Auctum Descendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Descendens + \[ \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \descendens b \]} + +@item +@b{Punctum inclinatum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum + \[ \inclinatum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum b \]} + +@item +@emph{Punctum Inclinatum Auctum} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Auctum + \[ \inclinatum \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \auctum b \]} + +@item +@emph{Punctum Inclinatum Parvum} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Parvum + \[ \inclinatum \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \deminutum b \]} + +@item +@b{Virga} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Virga + \[ \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@end multitable + +@noindent +@b{Ligaturen aus zwei Noten} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Clivis vel Flexa} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis vel Flexa + \[ b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa g \]} + + +@item +@emph{Clivis Aucta Descendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Descendens + \[ b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \descendens g \]} + +@item +@emph{Clivis Aucta Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Ascendens + \[ b \flexa \auctum \ascendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \ascendens g \]} + +@item +@emph{Cephalicus} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Cephalicus + \[ b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \deminutum g \]} + +@item +@b{Podatus/Pes} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Podatus vel Pes + \[ g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes b \]} + +@item +@emph{Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens + \[ g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \descendens b \]} + +@item +@emph{Pes Auctus Ascendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Ascendens + \[ g \pes \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \ascendens b \]} + +@item +@emph{Epiphonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Epiphonus + \[ g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \deminutum b \]} + +@item +@emph{Pes Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Initio Debilis + \[ \deminutum g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes b \]} + +@item +@emph{Pes Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens Initio Debilis + \[ \deminutum g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes \auctum \descendens b \]} + +@end multitable + +@noindent +@b{Ligaturen mit mehr als zwei Noten} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Torculus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus + \[ a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens + \[ a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus + \[ a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \deminutum g \]} + +@item +@emph{Torculus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Initio Debilis + \[ \deminutum a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens Initio Debilis + \[ \deminutum a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus Initio Debilis + \[ \deminutum a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \deminutum g \]} + +@item +@b{Porrectus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus + \[ a \flexa g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes b \]} + +@item +@emph{Porrectus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Auctus Descendens + \[ a \flexa g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \auctum \descendens b \]} + +@item +@emph{Porrectus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Deminutus + \[ a \flexa g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \deminutum b \]} + +@item +@b{Climacus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus + \[ \virga b \inclinatum a \inclinatum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum g \]} + +@item +@emph{Climacus Auctus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Auctus + \[ \virga b \inclinatum a \inclinatum \auctum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} + +@item +@emph{Climacus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Deminutus + \[ \virga b \inclinatum a \inclinatum \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} + +@item +@b{Scandicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus + \[ g \pes a \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \virga b \]} + +@item +@emph{Scandicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Auctus Descendens + \[ g \pes a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \auctum \descendens b \]} + +@item +@emph{Scandicus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Deminutus + \[ g \pes a \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \deminutum b \]} + +@end multitable + +@noindent +@b{Special Signs} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Quilisma} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma + \[ g \pes \quilisma a \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \quilisma a \pes b \]} + +@item +@emph{Quilisma Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma Pes Auctus Descendens + \[ g \quilisma a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \quilisma g \pes \auctum \descendens b \]} + +@item +@b{Oriscus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Oriscus + \[ \oriscus b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus b \]} + +@item +@emph{Pes Quassus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus + \[ \oriscus g \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \virga b \]} + +@item +@emph{Pes Quassus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus Auctus Descendens + \[ \oriscus g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \auctum \descendens b \]} + +@item +@b{Salicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus + \[ g \oriscus a \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \virga b \]} + +@item +@emph{Salicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus Auctus Descendens + \[ g \oriscus a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \auctum \descendens b \]} + +@item +@b{(Apo)stropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha + \[ \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \]} + +@item +@emph{Stropha Aucta} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha Aucta + \[ \stropha \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha \auctum b \]} + +@item +@b{Bistropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Bistropha + \[ \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \]} + +@item +@b{Tristropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Tristropha + \[ \stropha b \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha b \]} + +@item +@emph{Trigonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Trigonus + \[ \stropha b \stropha b \stropha a \] + } + \layout { \neumeDemoLayout } +} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha a \]} + +@end multitable + +@predefined +Folgende Notenpräfixe sind unterstützt: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. +@endpredefined + + +Präfixe können kombiniert werden, wenn es hier auch Begrenzungen +gibt. Zum Beispiel können die Präfixe @code{\descendens} oder +@code{\ascendens} vor einer Note geschrieben werden, aber nicht +beide für die selbe Note. + +@funindex \pes +@funindex \flexa + +Zwei benachbarte Noten können mit den @code{\pes} und +@code{\flexa}-Infixen verbunden werden, um eine steigende bwz. +fallende Melodielinie zu notieren. + +@funindex \augmentum + +Die musikalische Funktion @code{\augmentum} muss benutzt werden, um +augmentum-Punkte hinzuzufügen. + +@seealso +Glossar: +@rglos{ligature}. + +Notationreferenz: +@ref{ Ligaturen der gregorianischen Quadratnotation}, +@ref{Weiße Mensuralligaturen}, +@ref{Ligaturen}. + +@knownissues +Wenn ein @code{\augmentum}-Punkt am Ende des letzten Systems innerhalb +einer Ligatur gesetzt wird, ist er vertikal etwas falsch positioniert. Als +Abhilfe kann eine unsichtbare Note (z. B. @code{s8}) als letzte Note im +System eingegeben werden. + +@code{\augmentum} sollte als Präfix implementiert sein, nicht als eigene +musikalische Funktion, so dass @code{\augmentum} mit den anderen +Präfixen in arbiträrer Reihenfolge notiert werden kann. + + +@c Working with ancient music: scenarios and solutions:: {{{1 +@node Musiksatz Alter Musik in der Praxis -- Szenarien und Lösungen +@subsection Musiksatz Alter Musik in der Praxis -- Szenarien und Lösungen +@translationof Working with ancient music---scenarios and solutions + +@menu +* Incipite:: +* Mensurstriche:: +* Gregorianischen Choral transkribieren:: +* Alte und moderne Edition aus einer Quelldatei:: +* Herausgeberische Anmerkungen:: +@end menu + +Wenn man mit Alter Notation zu tun hat, fallen oft Aufgaben +an, die in der modernen Notation nicht vorkommen, für welche +LilyPond geschaffen wurde. In diesem Abschnitt sollen +darum einige praktische Problemstellungen und Lösungsvorschläge +dargestellt werden. Dabei handelt es sich um: + +@itemize +@item wie man Incipite in modernen Editionen von Mensuralnotation +notieren kann (d.h. ein kleiner Abschnitt +vor der eigentlichen Partitur, der die Originalnotenformen +darstellt), +@item wie man @emph{Mensurstriche} einstellt, mit denen +oft moderne Transkriptionen polyphoner Musik notiert werden, +@item wie man den gregorianischen Choral mit moderner Notation +darstellt und +@item wie man sowohl ein Mensuralnotationsbild als auch eine +moderne Edition aus der selben Quelle erstellt. +@end itemize + + +@c {{{2Incipits +@node Incipite +@unnumberedsubsubsec Incipite +@translationof Incipits + +@c TODO Add text +@c clefs, mensuration signs etc from lsr and -user +@c use snippet Transcription-of-ancient-music-with-incipit +In Arbeit. + + + +@c {{{2Mensurstriche layout +@node Mensurstriche +@unnumberedsubsubsec Mensurstriche +@translationof Mensurstriche layout + + +Als @emph{Mensurstriche} wird ein Notenlayout bezeichnet, +in dem die Taktlinien nicht auf den Systemen, sondern nur +zwischen Systemen gezogen werden. Damit soll signalisiert +werden, dass das Original keine Takteinteilung besessen hat +und etwa Synkopen nicht über Taktlinien hinweg aufgeteilt +werden müssen, während man sich dennoch an den Taktlinien +rhythmisch orientieren kann. + +@lilypondfile[verbatim,lilyquote,texidoc] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + +@c This simple setup will take care of the +@c TODO Add text about lyrics to the lowest line, to be placed +@c outside the StaffGroup. +@c from lsr and -user +@c TBC + + + +@c {{{2Transcribing Gregorian chant +@node Gregorianischen Choral transkribieren +@unnumberedsubsubsec Gregorianischen Choral transkribieren +@translationof Transcribing Gregorian chant + +Gregorianischer Choral kann mit einigen einfachen Einstellungen +in moderner Notation notiert werden. + +@b{Hälse}. Hälse können meistens weggelassen werden, was geschieht, +indem man den @code{Stem_engraver} aus dem Stimmenkontext +entfernt: + +@example +\layout @{ + ... + \context @{ + \Voice + \remove "Stem_engraver" + @} +@} +@end example + +In einigen Transkriptionsstilen werden jedoch teilweise +Hälse eingesetzt, um etwa den Übergang von einem Einton-Rezitativ +zu einer melodischen Geste anzuzeigen. In diesem Fall können +Hälse entweder mit @code{\override Stem #'transparent = ##t} +unsichtbar gemacht werden oder mit +@code{\override Stem #'length = #0} auf die Länge von 0 reduziert +werden. Die Hälse müssen dann wieder an den entsprechenden +Stellen mit @code{\once \override Stem #'transparent = ##f} +sichtbar gemacht werden (siehe auch Beispiel unten). + +@b{Takt.} Für Gesang ohne Metrum gibt es einige Alternativen. + +Der @code{Time_signature_engraver} kann aus dem @code{Staff}-Kontext +entfernt werden, ohne dass es negative Seiteneffekte gäbe. +Alternativ kann er durchsichtig gemacht werden, dabei entsteht +aber ein leerer Platz zu Beginn der Noten an der Stelle, wo +normalerweise die Taktangabe stehen würde. + +In vielen Fällen ergibt @code{\set Score.timing = ##f} gute +Ergebnisse. Eine andere Möglichkeit ist es, @code{\CadenzaOn} +und @code{\CadenzaOff} zu benutzen. + +Um Taktstriche zu entfernen, kann man radikal den @code{Bar_engraver} +aus dem @code{Staff}-Kontext entfernen. Wenn man ab und zu +einen Taktstrich braucht, sollten die Striche nur mit +@code{\override BarLine #'transparent = ##t} unsichtbar +gemacht werden. + +Oft werden Rezitativtöne mit einer Brevis angezeigt. Der +Text für die Rezitativnote kann auf zwei Arten notiert +werden: entweder als einzelne, links ausgerichtete Silbe: + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + c\breve c4 b4 a c2 c4 \divisioMaior + c\breve c4 c f, f \finalis +} + +verba = \lyricmode { + \once \override LyricText #'self-alignment-X = #-1 + "Noctem quietam et" fi -- nem per -- fec -- tum + \once \override LyricText #'self-alignment-X = #-1 + "concedat nobis Dominus" om -- ni -- po -- tens. +} +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics = "one" \lyricsto melody \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Bar_engraver" + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +Das funktioniert gut, solange der Text nicht über einen Zeilenumbruch +reicht. In diesem Fall kann man etwa die Noten der +Silben verstecken (hier werden auch die Hälse unsichtbar +gemacht): + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + \set Score.timing = ##f + c\breve \override NoteHead #'transparent = ##t c c c c c + \revert NoteHead #'transparent + \override Stem #'transparent = ##f \stemUp c4 b4 a + \override Stem #'transparent = ##t c2 c4 \divisioMaior + c\breve \override NoteHead #'transparent = ##t c c c c c c c + \revert NoteHead #'transparent c4 c f, f \finalis +} + +verba = \lyricmode { + No -- ctem qui -- e -- tam et fi -- nem per -- fec -- tum + con -- ce -- dat no -- bis Do -- mi -- nus om -- ni -- po -- tens. +} + +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics \lyricsto "melody" \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'transparent = ##t + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +Eine andere übliche Situation ist die Transkription von +neumatischem oder melismatischem Gesang, d.h. Gesang, der +eine unterschiedliche Anzahl von Noten pro Silbe hat. In +diesem Fall sollen die Silbengruppen üblicherweise deutlich +voneinander getrennt gesetzt werden, oft auch die Untergruppen +eines längeren Melismas. Eine Möglichkeit, das zu erreichen, +ist es, eine feste Taktart, etwa 1/4, zu benutzen und dann +jeder Silbe oder Notengruppe einen ganzen Takt zuzuweisen, +u.U. mit Hilfe von Triolen und kleinen Notenwerten. Wenn +die Taktstriche und alle anderen rhythmischen Anweisungen +unsichtbar gemacht werden, und der Platz um die Taktstriche +vergrößert wird, ergibt sich eine recht gute Repräsentation +der Originalnotation. + +Damit Silben mit unterschiedlicher Länge (etwa @qq{-ri} und +@qq{-rum}) die Silbengruppen nicht ungleichmäßig aufweiten, +kann die @code{#'X-extent}-Eigenschaft des @code{LyricText}-Objekts +auf einen festen Wert gesetzt werden. Eine andere +Möglichkeit wäre es, die Silben als Textbeschriftung +einzufügen. Wenn weitere horizontale Anpassungen nötig sind, +können sie mit unsichtbaren (@code{s})-Noten vorgenommen +werden. + +@lilypond[verbatim,quote] +spiritus = \relative c' { + \time 1/4 + \override Lyrics.LyricText #'X-extent = #'(0 . 3) + d4 \times 2/3 { f8 a g } g a a4 g f8 e + d4 f8 g g8 d f g a g f4 g8 a a4 s + \times 2/3 { g8 f d } e f g a g4 +} + +spirLyr = \lyricmode { + Spi -- ri -- _ _ tus _ Do -- mi -- ni _ re -- ple -- _ vit _ + or -- _ bem _ ter -- ra -- _ rum, al -- _ _ le -- _ lu + -- _ ia. +} +\score { + \new Staff << + \new Voice = "chant" \spiritus + \new Lyrics = "one" \lyricsto "chant" \spirLyr + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'X-extent = #'(-1 . 1) + \override Stem #'transparent = ##t + \override Beam #'transparent = ##t + \override BarLine #'transparent = ##t + \override TupletNumber #'transparent = ##t + } + } +} +@end lilypond + +@c extract from 1.6.1.1 + + + +@c {{{2Ancient and modern from one source +@node Alte und moderne Edition aus einer Quelldatei +@unnumberedsubsubsec Alte und moderne Edition aus einer Quelldatei +@translationof Ancient and modern from one source + +@c TODO Add text +@c Here among others the snippets about reducing note length +In Arbeit. + + +@c {{{2Editorial markings +@node Herausgeberische Anmerkungen +@unnumberedsubsubsec Herausgeberische Anmerkungen +@translationof Editorial markings + +In Arbeit. + +@c {{{2Baroque rhythmic notation +@c @node Baroque rhythmic notation +@c @unnumberedsubsubsec Notation barocker Rhythmen + +@c TODO Add text +@c try Till Rettig +@c Add example of white noteheads: +@c In the french baroque some composers used white noteheads in slow pieces, +@c mainly in 3/2-time. A quarter looks there like a eighth with a white +@c notehead. (Franz-Rudolf Kuhnen) + +@c TODO Add example of this: +@c I was referring to e.g. notated a8. a16, which should, if I +@c remember correctly, be interpreted more like a8.. a32 (in the french +@c style). The editor might want to show that rythmic figure above the +@c staff as an hint to performers. (Karl Hammer) + + + + + diff --git a/Documentation/de/notation/changing-defaults.itely b/Documentation/de/notation/changing-defaults.itely new file mode 100644 index 0000000000..17d57d7569 --- /dev/null +++ b/Documentation/de/notation/changing-defaults.itely @@ -0,0 +1,4075 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + +@node Standardeinstellungen verändern +@chapter Standardeinstellungen verändern +@translationof Changing defaults + +Das Ziel von LilyPonds Design ist es, von sich aus gut gesetzte Noten +zu produzieren. Es kann aber trotzdem vorkommen, dass Sie diesen +Standardsatz ändern wollen. Das Layout kann mithilfe einer recht +großen Anzahl von @qq{Schaltern und Knöpfen} kontrolliert werden. +Sie werden als @qq{Eigenschaften} (engl. properties) bezeichnet. +Eine kurze Einführung und Übung, wie man auf diese Eigenschaften +zugreifen kann und sie verändern kann, findet sich im Handbuch +zum Lernen, siehe @rlearning{Die Ausgabe verändern}. Das Kapitel +sollte zuerst gelesen werden. In diesem Kapitel werden die gleichen +Themen behandelt, aber der Schwerpunkt liegt eher auf einer technischen +Darstellung. + +@cindex Referenz der Interna +@cindex Internals Reference + +Die definitive Beschreibung der unterschiedlichen Einstellmöglichenkeiten +findet sich in einem eigenen Dokument: @rinternalsnamed{Top,der Referenz +der Interna}. Diese Referenz zeigt alle Variablen, Funktionen und Optionen, +die in LilyPond möglich sind. Es existiert als ein HTML-Dokumente, das +sich +@c leave the @uref as one long line. +@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line}, +aber auch lokal in das LilyPond-Dokumentationspaket integriert lesen lässt. + +Intern benutzt LilyPond Scheme (ein LISP-Dialekt), um eine Infrastruktur +zur Verfügung zu stellen. Wenn Layoutentscheidungen verändert werden +sollen, müssen auf die programminternen Prozesse zugegriffen werden, +wozu Scheme-Code benötigt wird. Scheme-Abschnitte werden in einer +LilyPond-Quelldatei mit einer Raute @code{#} begonnen (siehe auch +@rlearning{Scheme-Übung}). + + +@menu +* Interpretationskontexte:: +* Die Referenz der Programminterna erklärt:: +* Eigenschaften verändern:: +* Nützliche Konzepte und Eigenschaften:: +* Fortgeschrittene Optimierungen:: +* Musikfunktionen benutzen:: +@end menu + + +@node Interpretationskontexte +@section Interpretationskontexte +@translationof Interpretation contexts + +Dieser Abschnitt erklärt, was Kontexte sind und wie man sie +verändern kann. + +@menu +* Was sind Kontexte?:: +* Kontexte erstellen:: +* Kontexte am Leben halten:: +* Umgebungs-Plugins verändern:: +* Die Standardeinstellungen von Kontexten ändern:: +* Neue Kontexte definieren:: +* Kontexte aneinander ausrichten:: +@end menu + + +@seealso +Handbuch zum Lernen: +@rlearning{Kontexte und Engraver}. + +Installierte Dateien: +@file{ly/engraver-init.ly}, +@file{ly/performer-init.ly}. + +Schnipsel: +@rlsr{Contexts and engravers}. + +Referenz der Interna: +@rinternals{Contexts}, +@rinternals{Engravers and Performers}. + + +@node Was sind Kontexte? +@subsection Was sind Kontexte? +@translationof Contexts explained + +Kontexte sind hierarchisch geordnet: + +@menu +* Score -- der Vater aller Kontexte:: +* Oberste Kontexte -- Container für Systeme:: +* Mittlere Kontexte -- Systeme:: +* Unterste Kontexte -- Stimmen:: +@end menu + +@node Score -- der Vater aller Kontexte +@unnumberedsubsubsec Score -- der Vater aller Kontexte +@translationof Score - the master of all contexts + +@code{Score} (Partitur) ist der höchste Notationskontext. Kein anderer Kontext +kann einen @code{Score}-Kontext enthalten. Im Normalfall kümmert +sich der @code{Score}-Kontext um die Verwaltung der Taktarten und sorgt +dafür, dass Elemente wie Schlüssel und Taktart- oder Tonartbezeichnungen +über die Systeme hinweg aneinander ausgerichtet sind. + +Ein @code{Score}-Kontext wird eingerichtet, wenn eine +@code{\score @{@dots{}@}} oder @code{\layout @{@dots{}@}}-Umgebung +interpretiert wird. + +@node Oberste Kontexte -- Container für Systeme +@unnumberedsubsubsec Oberste Kontexte -- Container für Systeme +@translationof Top-level contexts - staff containers + +@c Remark for German translation +Diese Kontexte fassen Systeme zu Gruppen zusammen und werden darum hier +als Systemgruppen bezeichnet (engl. staffgroup). + +@strong{@emph{StaffGroup}} + +Gruppiert Systeme und fügt eine eckige Klammer auf der linken Seite +hinzu. Die Taktstriche der enthaltenen Systeme werden vertikal +miteinander verbunden. @code{StaffGroup} besteht nur aus einer Ansammlung +von Systemen mit einer eckigen Klammer zu Beginn der Zeile und +durchgezogenen Taktstriche. + +@strong{@emph{ChoirStaff}} + +Entspricht @code{StaffGroup}, außer dass die Taktstriche der enthaltenen +Systeme nicht vertikal miteinander verbunden sind. + +@strong{@emph{GrandStaff}} + +Gruppiert Systeme mit einer geschweiften Klammer zur Linken. Die +Taktlinien der enthaltenen Systeme werden vertikal verbunden. + +@strong{@emph{PianoStaff}} + +Entspricht @code{GrandStaff}, hat aber zusätzlich Unterstützung für +Instrumentenbezeichnungen zu Beginn jeder Systemgruppe. + + +@node Mittlere Kontexte -- Systeme +@unnumberedsubsubsec Mittlere Kontexte -- Systeme +@translationof Intermediate-level contexts - staves + +Diese Kontexte stellen verschiedene Arten einzelner Notationssysteme +(engl. staff) dar. + +@strong{@emph{Staff}} + +Kümmert sich um Schlüssel, Taktstriche, Tonarten und Versetzungszeichen. +Er kann @code{Voice}-Kontexte enthalten. + +@strong{@emph{RhythmicStaff}} + +Entspricht @code{Staff}, aber dient zur Notation von Rhythmen: Tonhöhen +werden ignoriert und die Noten auf einer einzigen Linie ausgegeben. + +@strong{@emph{TabStaff}} + +Ein Kontext um Tabulaturen zu erstellen. Die Standardeinstellung ist +eine Gitarrentabulatur mit sechs Notenlinien. + +@strong{@emph{DrumStaff}} + +Ein Kontext zur Notation von Perkussion. Er kann +@code{DrumVoice}-Kontexte enthalten. + +@strong{@emph{VaticanaStaff}} + +Entspricht @code{Staff}, aber eignet sich besonders zum Notensatz des +Gregorianischen Chorals. + +@strong{@emph{MensuralStaff}} + +Entspricht @code{Staff}, aber eignet sich zum Notensatz von Noten in +der Mensuralnotation. + + +@node Unterste Kontexte -- Stimmen +@unnumberedsubsubsec Unterste Kontexte -- Stimmen +@translationof Bottom-level contexts - voices + +Stimmen-(@code{Voice}-Kontexte initialisieren bestimmte Eigenschaften +und laden bestimmte Engraver. Weil es sich bei Stimmen um die +untersten Kontexte handelt, können sie keine weiteren Kontexte enthalten. + +@strong{@emph{Voice}} + +Entspricht einer Stimme auf einem Notensystem. Der Kontext kümmert sich +um die Umsetzung von Noten, Dynamikzeichen, Hälsen, Balken, diversen Texten, +Bögen und Pausen. Wenn mehr als eine Stimme pro System benötigt wird, +muss dieser Kontext explizit initialisiert werden. + +@strong{@emph{VaticanaVoice}} + +Entspricht @code{Voice}, aber eignet sich besonders zum Notensatz +des Gregorianischen Chorals. + +@strong{@emph{MensuralVoice}} + +Entspricht @code{Voice}, aber mit Änderungen, um Mensuralnotation +setzen zu können. + +@strong{@emph{Lyrics}} + +Entspricht einer Stimme mit Gesangstext. Kümmert sich um den Satz +des Gesangstextes auf einer Zeile. + +@strong{@emph{DrumVoice}} + +Der Stimmenkontext in einem Perkussionssystem. + +@strong{@emph{FiguredBass}} + +Der Kontext, in dem Generalbassziffern (@code{BassFigure}-Objekte) +gesetzt werden, die in der @code{\figuremode}-Umgebung +notiert werden. + +@strong{@emph{TabVoice}} + +Dieser Stimmenkontext wird in einer Tabulatur (@code{TabStaff}-Kontext) +benutzt. Er wird normalerweise implizit erstellt. + +@strong{@emph{CueVoice}} + +Ein Stimmenkontext, der Noten in reduzierter Größe ausgibt und +vor allem dazu da ist, Stichnoten zu setzen. Siehe auch +@ref{Stichnoten formatieren}. Wird normalerweise implizit erstellt, +wenn Stichnoten gesetzt werden. + + +@strong{@emph{ChordNames}} + +Ausgabe von Akkordsymbolen. + + +@node Kontexte erstellen +@subsection Kontexte erstellen +@translationof Creating contexts + +In Partituren mit einer Stimme und einem System werden die Kontexte +normalerweise automatisch erstellt. In komplizierteren Partituren +muss man sie aber direkt erstellen. Es gibt drei Möglichkeiten, +Kontexte zu erstellen: + +@funindex \new +@funindex \context +@funindex new +@funindex context + +@cindex neue Kontexte +@cindex Kontexte erstellen +@cindex eigene Kontexte erstellen + +@itemize + +@item +Der einfachste Befehl ist @code{\new}. Er wird zusammen mit dem +Kontextnamen vor einem musikalischen Ausdruck eingesetzt, etwa + +@example +\new @var{Kontext} @var{musik. Ausdruck} +@end example + +@noindent +wobei @var{Kontext} eine Kontextbezeichnung (wie @code{Staff} oder +@code{Voice}) ist. Dieser Befehl erstellt einen neuen Kontext und +beginnt mit der Auswertung von @var{musik. Ausdruck} innerhalb +dieses Kontextes. + +Eine praktische Anwendung von @code{\new} ist eine Partitur mit vielen +Systemen. Jede Stimme wird auf einem eigenen System notiert, das +mit @code{\new Staff} begonnen wird. + +@lilypond[quote,verbatim,relative=2,ragged-right] +<< + \new Staff { c4 c } + \new Staff { d4 d } +>> +@end lilypond + +Der @code{\new}-Befehl kann den Kontext auch benennen: + +@example +\new @var{Kontext} = @var{ID} @var{musik. Ausdruck} +@end example + +Dieser vom Benutzer definierte Name wird aber auch nur wirklich +benutzt, wenn nicht vorher schon der gleiche Name definiert worden +ist. + +@item +Ähnlich dem @code{\new}-Befehl wird auch mit dem @code{\context}-Befehl +ein musikalischer Ausdruck in einen Kontext umgeleitet. Diesem +Kontext wird ein expliziter Name zugewiesen. Die Syntax lautet: + +@example +\context @var{Kontext} = @var{ID} @var{musik. Ausdruck} +@end example + +Diese Art von Befehl sucht nach einem existierenden Kontext vom Typus +@var{Kontext} mit der Bezeichnung @var{ID}. Wenn ein derartiger +Kontext nicht existiert, wird ein neuer Kontext mit der entsprechenden +Bezeichnung erstellt. Das ist nützlich, wenn auf den Kontext später +zurückverwiesen werden soll. Um etwa Gesangstext zu einer Melodie +hinzuzufügen, wird die Melodie in einem bezeichneten Kontext +notiert: + +@example +\context Voice = "@b{Tenor}" @var{musik. Ausdruck} +@end example + +@noindent +sodass der Text an den Noten ausgerichtet werden kann: + +@example +\new Lyrics \lyricsto "@b{Tenor}" @var{Gesangstext} +@end example + + +Eine andere Möglichkeit für bezeichnete Kontexte ist es, zwei +unterschiedliche musikalische Ausdrücke in einen Kontext zu +verschmelzen. Im nächsten Beispiel werden Artikulationszeichen +und Noten getrennt notiert: + +@example +Noten = @{ c4 c4 @} +Artik = @{ s4-. s4-> @} +@end example + +@noindent +Dann werden sie kombiniert, indem sie dem selben @code{Voice}-Kontext +zugewiesen werden: + +@example +<< + \new Staff \context Voice = "A" \Noten + \context Voice = "A" \Artik +>> +@end example + +@lilypond[quote,ragged-right] +music = { c4 c4 } +arts = { s4-. s4-> } +\relative c'' << + \new Staff \context Voice = "A" \music + \context Voice = "A" \arts +>> +@end lilypond + +Durch diesen Mechanismus ist es möglich eine Urtextausgabe zu +erstellen, mit der optionalen Möglichkeit, bestimmte zusätzliche +Artikulationszeichen zu den gleichen Noten hinzuzufügen und so +eine editierte Ausgabe zu erhalten. + +@cindex Kontexte erstellen + +@item +Der dritte Befehl, um Kontexte zu erstellen, ist: + +@example +\context @var{Kontext} @var{musik. Ausdruck} +@end example + +@noindent +Dies entspricht dem @code{\context} mit @code{= @var{ID}}, aber hier +wird ein beliebiger Kontext des Typs @var{Kontext} gesucht und der +musikalische Ausdruck darin ausgewertet, unabhängig von der Bezeichnung, +die dem Kontext gegeben wurde. + +Diese Variante wird bei musikalischen Ausdrücken benutzt, die auf +verschiedenen Ebenen interpretiert werden können. Beispielsweise +der @code{\applyOutput}-Befehl (siehe +@ref{Eine Funktion auf alle Layout-Objekte anwenden}). Ohne einen +expliziten @code{\context} wird die Ausgabe normalerweise einem +@code{Voice}-Kontext zugewiesen: + +@example +\applyOutput #'@var{Kontext} #@var{Funktion} % auf Voice anwenden +@end example + +Damit aber die Funktion auf @code{Score}- oder @code{Staff}-Ebene +interpretiert wird, muss folgende Form benutzt werden: + +@example +\applyOutput #'Score #@var{Funktion} +\applyOutput #'Staff #@var{Funktion} +@end example + +@end itemize + + + +@node Kontexte am Leben halten +@subsection Kontexte am Leben halten +@translationof Keeping contexts alive + +@cindex Kontexte, am Leben erhalten +@cindex Kontexte, Lebensdauer + +Kontexte werden normalerweise am ersten musikalischen Moment +beendet, an dem sie nichts mehr zu tun haben. Ein +@code{Voice}-Kontext stirbt also sofort, wenn keine Ereignisse +mehr auftreten, @code{Staff}-Kontexte sobald alle in ihnen +enthaltenen @code{Voice}-Kontexte keine Ereignisse mehr aufweisen +usw. Das kann Schwierigkeiten ergeben, wenn auf frühere +Kontexte verwiesen werden soll, die in der Zwischenzeit schon +gestorben sind, beispielsweise wenn man Systemwechsel mit +@code{\change}-Befehlen vornimmt, wenn Gesangstext einer +Stimme mit dem @code{\lyricsto}-Befehl zugewiesen wird oder +wenn weitere musikalische Ereignisse zu einem früheren Kontext +hinzugefügt werden sollen. + +Es gibt eine Ausnahme dieser Regel: genau ein @code{Voice}-Kontext +innerhalb eines @code{Staff}-Kontextes oder in einer +@code{<<...>>}-Konstruktion bleibt immer erhalten bis zum Ende +des @code{Staff}-Kontextes oder der @code{<<...>>}-Konstruktion, der ihn einschließt, auch wenn es Abschnitte gibt, in der er nichts zu +tun hat. Der Kontext, der erhalten bleibt ist immer der erste, +der in der ersten enthaltenden @code{@{...@}}-Konstruktion +angetroffen wird, wobei @code{<<...>>}-Konstruktionen ignoriert +werden. + +Jeder Kontext kann am Leben gehalten werden, indem man sicherstellt +dass er zu jedem musikalischen Moment etwas zu tun hat. +@code{Staff}-Kontexte werden am Leben gehalten, indem man sicherstellt, +dass eine der enthaltenen Stimmen am Leben bleibt. Eine Möglichkeit, +das zu erreichen, ist es, unsichtbare Pause zu jeder Stimme +hinzuzufügen, die am Leben gehalten werden soll. Wenn mehrere +Stimmen sporadisch benutzt werden sollen, ist es am sichersten, +sie alle am Leben zu halten und sich nicht auf die Ausnahmeregel +zu verlassen, die im vorigen Abschnitt dargestellt wurde. + +Im folgenden Beispiel werden sowohl Stimme A als auch B auf diese +Weise für die gesamte Dauer des Stückes am Leben gehalten. + +@lilypond[quote,verbatim] +musicA = \relative c'' { d4 d d d } +musicB = \relative c'' { g4 g g g } +keepVoicesAlive = { + << + \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars + \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars + >> +} + +music = { + \context Voice = "A" { + \voiceOneStyle + \musicA + } + \context Voice = "B" { + \voiceTwoStyle + \musicB + } + \context Voice = "A" { \musicA } + \context Voice = "B" { \musicB } + \context Voice = "A" { \musicA } +} + +\score { + \new Staff << + \keepVoicesAlive + \music + >> +} +@end lilypond + +@cindex Gesangstext, an einer sporadischen Melodie ausrichten + +Das nächste Beispiel zeigt eine Melodie, die zeitweise unterbrochen +wird und wie man den entsprechenden Gesangstext mit ihr verknüpfen +kann, indem man die Stimme am Leben hält. In wirklichen Situationen +würden Begleitung und Melodie natürlich aus mehreren Abschnitten bestehen. + +@lilypond[quote,verbatim] +melody = \relative c'' { a4 a a a } +accompaniment = \relative c' { d4 d d d } +words = \lyricmode { These words fol -- low the mel -- o -- dy } +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + s1*4 % Keep Voice "melody" alive for 4 bars + } + { + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + \context Voice = "accompaniment" { \accompaniment } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + +Eine Alternative, die in manchen Umständen besser geeignet sein kann, +ist es, einfach unsichtbare Pausen einzufügen, um die Melodie +mit der Begleitung passend auszurichten: + +@lilypond[quote,verbatim] +melody = \relative c'' { + s1 % skip a bar + a4 a a a + s1 % skip a bar + a4 a a a +} +accompaniment = \relative c' { + d4 d d d + d4 d d d + d4 d d d + d4 d d d +} +words = \lyricmode { These words fol -- low the mel -- o -- dy } + +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + \melody + } + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + + + +@node Umgebungs-Plugins verändern +@subsection Umgebungs-Plugins verändern +@translationof Modifying context plug-ins + +Notationskontexte (wie @code{Score} oder @code{Staff}) speichern +nicht nur Eigenschaften, sie enthalten auch Plugins (@qq{engraver} +genannt), die die einzelnen Notationselemente erstellen. Ein +@code{Voice}-Kontext enthält beispielsweise einen +@code{Note_heads_engraver}, der die Notenköpfe erstellt, und ein +@code{Staff}-Kontext einen @code{Key_signature_engraver}, der die +Vorzeichen erstellt. + +Eine vollständige Erklärung jedes Plugins findet sich in +@ifhtml +@rinternals{Engravers and Performers}. +@end ifhtml +@ifnothtml +Referenz der Interna: @expansion{} Translation @expansion{} Engravers. +@end ifnothtml +Alle Kontexte sind erklärt in +@ifhtml +@rinternals{Contexts}, +@end ifhtml +@ifnothtml +Referenz der Interna: @expansion{} Translation @expansion{} Context, +@end ifnothtml +wobei die in diesem Kontext vorkommenden Engraver aufgelistet sind. + +Es kann teilweise nötig sein, diese Engraver umzupositionieren. Das +geschieht, indem man einen neuen Kontext mit @code{\new} oder +@code{\context} beginnt und ihn dann verändert: + +@funindex \with +@funindex with + +@example +\new @var{context} \with @{ + \consists @dots{} + \consists @dots{} + \remove @dots{} + \remove @dots{} + @emph{etc.} +@} +@{ + @emph{..Noten..} +@} +@end example + +@noindent +@dots{} steht hier für die Bezeichnung des Engravers. @code{\consists} +fügt einen Engraver hinzu und @code{\remove} entfernt ihn. +Es folgt ein einfaches Beispiel, in dem der +@code{Time_signature_engraver} (Engraver für den Takt) und der +@code{Clef_engraver} (Engraver für den Schlüssel) aus dem +@code{Staff}-Kontext entfernt werden: + +@lilypond[quote,relative=1,verbatim] +<< + \new Staff { + f2 g + } + \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + } { + f2 g2 + } +>> +@end lilypond + +Das zweite Notensystem enthält keine Taktangabe und keinen Notenschlüssel. +Das ist eine recht brutale Methode, Objekte zu verstecken, weil es sich +auf das gesamte System auswirkt. Diese Methode beeinflusst auch die +Platzaufteilung, was erwünscht sein kann. Vielfältigere Methoden, +mit denen Objekte unsichtbar gemacht werden können, finden sich in +@rlearning{Sichtbarkeit und Farbe von Objekten}. + +Das nächste Beispiel zeigt eine Anwendung in der Praxis. Taktstriche +und Taktart werden normalerweise in einer Partitur synchronisiert. Das +geschieht durch @code{Timing_translator} und @code{Default_bar_line_engraver}. +Diese Plugins sorgen sich um die Verwaltung der Taktzeiten und die +Stelle innerhalb des Taktes, zu dem eine Note erscheint usw. Indem +man diese Engraver aus dem @code{Score}-Kontext in den @code{Staff}-Kontext +verschiebt, kann eine Partitur erstellt werden, in welcher +jedes System eine unterschiedliche Taktart hat: + +@cindex polymetrische Partitur +@cindex Taktarten, mehrere in Partitur +@cindex Taktarten, unterschiedliche per System + +@lilypond[quote,verbatim] +\score { + << + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 3/4 + c4 c c c c c + } + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 2/4 + c4 c c c c c + } +>> +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + } +} +@end lilypond + +@knownissues + +Normalerweise spielt es keine Rolle, in welcher Reihenfolge +Engraver angegeben werden, aber in einigen Spezialfällen +ist die Reihenfolge sehr wichtig. Das kann beispielsweise +vorkommen, wenn ein Engraver eine Eigenschaft erstellt und +ein anderer von ihr liest, oder ein Engraver erstellt ein +Grob und ein anderer wertet es aus. Die Reihenfolge, in der +Engraver angegeben werden, ist die Reihenfolge, in der sie +aufgerufen werden, um ihre Tätigkeiten auszuführen. + +Folgende Reihenfolgen müssen beachtet werden: der +@code{Bar_engraver} muss normalerweise zuerst kommen, und +der @code{New_fingering_engraver} muss vor dem +@code{Script_column_engraver} kommen. Es gibt möglicherweise weitere +Abhängigkeiten von der Reihenfolge geben. + + +@node Die Standardeinstellungen von Kontexten ändern +@subsection Die Standardeinstellungen von Kontexten ändern +@translationof Changing context default settings + +Die Kontexteinstellungen, die standardmäßig in +@code{Score}, @code{Staff} und @code{Voice}-Kontexten +benutzt werden, können in einer @code{\layout}-Umgebung +eingestellt werden, wie das folgende Beispiel zeigt. Die +@code{\layout}-Umgebung sollte innerhalb der +@code{\score}-Umgebung gesetzt werden, auf die sie sich +auswirken soll, aber außerhalb von Notation. + +Auch muss der @code{\set}-Befehl und der Kontext weggelassen +werden, wenn die Einstellungen für den Kontext auf diese Weise +vorgenommen werden: + +@lilypond[quote,verbatim] +\score { + \relative c'' { + a4^"Really small, thicker stems, no time signature" a a a + a a a a + } + \layout { + \context { + \Staff + fontSize = #-4 + \override Stem #'thickness = #4.0 + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +Hier zeigt der @code{\Staff}-Befehl an, dass die folgenden Einstellungen +sich auf alle Systeme in dieser Partitur erstrecken sollen. + +Veränderungen können auch für den @code{Score}- oder alle +@code{Voice}-Kontexte auf gleiche Weise vorgenommen werden. + +@knownissues + +Es ist nicht möglich, Kontextänderungen als Variable zu definieren und +sie dann in der @code{\context}-Definition anzuwenden, indem man die +Variable aufruft. + +Der Befehl @code{\Staff \RemoveEmptyStaves} überschreibt die +aktuellen Einstellungen für @code{Staff}. Wenn die Einstellungen +für Systeme verändert werden sollen, die @code{\Staff \RemoveEmptyStaves} +benutzen, müssen die Veränderungen gemacht werden, nachdem +@code{\Staff \RemoveEmptyStaves} aufgerufen wurde, etwa: + +@example +\layout @{ + \context @{ + \Staff \RemoveEmptyStaves + + \override Stem #'thickness = #4.0 + @} +@} +@end example + + +@node Neue Kontexte definieren +@subsection Neue Kontexte definieren +@translationof Defining new contexts + +@cindex Kontexte, neue definieren +@cindex Engraver, in Kontexte einfügen + +@funindex \alias +@funindex alias +@funindex \name +@funindex name +@funindex \type +@funindex type +@funindex \consists +@funindex consists +@funindex \accepts +@funindex accepts +@funindex \denies +@funindex denies + +Bestimme Kontexte, wie @code{Staff} oder @code{Voice}, werden +erstellt, indem man sie mit einer Musikumgebung aufruft. Es ist +aber auch möglich, eigene neue Kontexte zu definieren, in denen +dann unterschiedliche Engraver benutzt werden. + +Das folgende Beispiel zeigt, wie man etwa @code{Voice}-Kontexte +von Grund auf neu bauen kann. Ein derartiger Kontext ähnelt +@code{Voice}, es werden aber nur zentrierte Schrägstriche als +Notenköpfe ausgegeben. Das kann benutzt werden, um Improvisation +in Jazzmusik anzuzeigen. + +@c KEEP LY +@lilypond[quote,ragged-right] +\layout { \context { + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Rhythmic_column_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +} +\context { \Staff + \accepts "ImproVoice" +}} + +\relative c'' { + a4 d8 bes8 \new ImproVoice { c4^"ad lib" c + c4 c^"ausziehen" c_"während des Spiels :)" c } + a1 +} +@end lilypond + +Diese Einstellungen werden innerhalb der @code{\context}-Umgebung +innerhalb der @code{\layout}-Umgebung definiert: + +@example +\layout @{ + \context @{ + @dots{} + @} +@} +@end example + +Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte +im vorigen Beispiel eingesetzt werden. + +Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu +definieren: + +@example +\name ImproVoice +@end example + +Weil dieser neue Kontext ähnlich wie @code{Voice} ist, sollen die Befehle, +die in @code{Voice}-Kontexten funktionieren, auch +in dem neuen Kontext funktionieren. Das wird erreicht, indem der +Kontext als Alias @code{Voice} erhält: + +@example +\alias Voice +@end example + +Der Kontext gibt Noten und Text aus, darum müssen wir die Engraver +hinzufügen, die für diese Aktionen zuständig sind: + +@example +\consists Note_heads_engraver +\consists Text_engraver +@end example + +@noindent +aber die Noten sollen nur auf der mittleren Linie ausgegeben werden: + +@example +\consists Pitch_squash_engraver +squashedPosition = #0 +@end example + +Der @code{Pitch_squash_engraver} verändert Notenköpfe (die vom +@code{Note_heads_engraver} erstellt werden) und setzt ihre vertikale +Position auf den Wert von @code{squashedPosition}, in diesem Fall ist +das die Mittellinie. + +Die Noten sehen wie ein Querstrich aus und haben keine Hälse: + +@example +\override NoteHead #'style = #'slash +\override Stem #'transparent = ##t +@end example + +Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit +einem zusätzlichen Plugin, das mit dem Befehl @code{\type} gekennzeichnet +werden muss. Dieser Typ solle immer @code{Engraver_group} lauten: + +@example +\type "Engraver_group" +@end example + +Alles zusammen haben wir folgende Einstellungen: + +@example +\context @{ + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +@} +@end example + +@funindex \accepts +@funindex accepts + +Kontexte sind hierarchisch. Wie wollen, dass @code{ImproVoice} +sich als Unterkontext von @code{Staff} erkennt, wie eine normale +Stimme. Darum wird die Definition von @code{Staff} mit dem +@code{\accepts}-Befehl verändert: + +@example +\context @{ + \Staff + \accepts ImproVoice +@} +@end example + +@funindex \denies +@funindex denies + +Das Gegenteil von @code{\accepts} ist @code{\denies} (verbietet), was +manchmal gebraucht werden kann, wenn schon existierende Kontext-Definitionen +wieder benutzt werden sollen. + +Beide Definitionen müssen in die @code{\layout}-Umgebung geschrieben +werden: + +@example +\layout @{ + \context @{ + \name ImproVoice + @dots{} + @} + \context @{ + \Staff + \accepts "ImproVoice" + @} +@} +@end example + +Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen +notiert werden: + +@example +\relative c'' @{ + a4 d8 bes8 + \new ImproVoice @{ + c4^"ad lib" c + c4 c^"ausziehen" + c c_"während des Spielens :)" + @} + a1 +@} +@end example + + +@node Kontexte aneinander ausrichten +@subsection Kontexte aneinander ausrichten +@translationof Aligning contexts + +Neue Kontexte können über oder unter existierenden ausgerichtet +werden. Das kann nützlich sein, wenn man eine Chorparitur +oder Ossia schreiben will: + +@cindex Ossia + +@funindex alignAboveContext +@funindex alignBelowContext + +@lilypond[quote,ragged-right] +ossia = { f4 f f f } +\score{ + \relative c' \new Staff = "main" { + c4 c c c + << + \new Staff \with { alignAboveContext = #"main" } \ossia + { d8 f d f d f d f } + >> + } +} +@end lilypond + +@cindex verschachtelte Kontexte +@cindex Kontexte, verschachtelt + +@funindex \accepts +@funindex accepts +@funindex \denies +@funindex denies + +Kontexte wie @code{PianoStaff} können andere Kontexte innerhalb +enthalten. Kontexte, die als innere Kontexte akzeptiert werden, +werden in einer @qq{accepts}-Liste für den bestimmten Kontext +definiert. Kontexte, die sich nicht in dieser Liste finden, +werden unter den äußeren Kontext gesetzt. Der +@code{PianoStaff}-Kontext etwa akzeptiert die Kontexte @code{Staff} +und @code{FiguredBass} innerhalb, aber beispielsweise keinen +@code{Lyrics}-(Gesangstext)-Kontext. In dem folgenden Beispiel +wird deshalb der Gesangstext unter das gesamte Klaviersystem +gesetzt, anstatt zwischen die beiden Notensysteme zu kommen: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +Die @qq{accepts}-Liste eines Kontextes kann verändert werden, so +dass sie weitere innere Kontexte akzeptiert. Wenn also der +Gesangstext als Teil eines Klaviersystems gesetzt werden soll, +müsste man schreiben: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff \with { \accepts Lyrics } +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +Das Gegenteil von @code{\accepts} ist @code{\denies}; es bedeutet, +dass ein Kontext aus der @code{\accepts}-Liste gestrichen wird. + + +@node Die Referenz der Programminterna erklärt +@section Die Referenz der Programminterna erklärt +@translationof Explaining the Internals Reference + +@menu +* Zurechtfinden in der Programmreferenz:: +* Layout-Schnittstellen:: +* Die Grob-Eigenschaften:: +* Benennungskonventionen:: +@end menu + + +@node Zurechtfinden in der Programmreferenz +@subsection Zurechtfinden in der Programmreferenz +@translationof Navigating the program reference + +Arbeit mit der Referenz der Interna soll hier an +einigen Beispiel illustriert werden. Die Referenz +der Interna existiert nur auf Englisch, +darum sind auch die Beispiele dieses Abschnittes nicht +übersetzt. + +Folgende Aufgabe wird bearbeitet: Der Fingersatz aus dem Beispiel +unten soll verändert werden: + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +In der Dokumentation über Fingersatz (in +@ref{Fingersatzanweisungen}) gibt es folgenden Abschnitt: + +@quotation +@strong{Siehe auch:} + +Referenz der Interna: @rinternals{Fingering}. + +@end quotation + +@c all ignored text just left out + +@ifnothtml +Die Referenz der Interna gibt es als HTML-Dokument. Sie sollten sie als +HTML-Dokument lesen, entweder online oder indem Sie die HTML-Dokumentation +herunterladen. Dieser Abschnitt ist sehr viel schwieriger zu verstehen, +wenn Sie die PDF-Version verwenden. +@end ifnothtml + +Gehen Sie über diesen Link zum Abschnitt @rinternals{Fingering}. +Oben auf der Seite findet sich: + +@quotation +Fingering objects are created by: @rinternals{Fingering_engraver} and +@rinternals{New_fingering_engraver}. +@end quotation + +Indem Sie die Links in der Referenz der Interna folgen, können Sie +verfolgen, wie LilyPond intern arbeitet: + +@itemize + +@item @rinternals{Fingering}: +@rinternals{Fingering} objects are created by: +@rinternals{Fingering_engraver} + +@item @rinternals{Fingering_engraver}: +Music types accepted: @rinternals{fingering-event} + +@item @rinternals{fingering-event}: +Music event type @code{fingering-event} is in Music expressions named +@rinternals{FingeringEvent} +@end itemize + +@c translation of the above +Fingersatz-Objekte werden also durch den @code{Fingering_engraver} +erstellt, welcher folgende Musikereignistypen akzeptiert: +@code{fingering-event}. Ein Musikereignis vom Typ +@code{fingering-event} ist ein musikalischer Ausdruck mit der +Bezeichnung @rinternals{FingeringEvent}. + +Dieser Pfad geht genau die entgegengesetzte Richtung von LilyPonds +Wirkungsweise: er beginnt bei der graphischen Ausgabe und +arbeitet sich voran zur Eingabe. Man könnte auch mit einem +Eingabe-Ereignis starten und dann die Links zurückverfolgen, +bis man zum Ausgabe-Objekt gelangt. + + +Die Referenz der Interna kann auch wie ein normales Dokument +durchsucht werden. Sie enthält Kapitel über +@ifhtml +@rinternals{Music definitions}, +@end ifhtml +@ifnothtml +@code{Music definitions}, +@end ifnothtml +über @rinternals{Translation} und @rinternals{Backend}. Jedes +Kapitel listet alle die Definitionen und Eigenschaften auf, +die benutzt und verändert werden können. + + +@node Layout-Schnittstellen +@subsection Layout-Schnittstellen +@translationof Layout interfaces + +@cindex Layout-Schnittstelle +@cindex Schnittstelle, Layout- +@cindex Grob + +Die HTML-Seite, die im vorigen Abschnitt betrachtet wurde, +beschreibt ein Layoutobjekt mit der Bezeichnung +@code{Fingering}. Ein derartiges Objekt ist ein Symbol +in der Partitur. Es hat Eigenschaften, die bestimmte +Zahlen speichern (wie etwa Dicke und Richtung), aber auch +Weiser auf verwandte Objekte. Ein Layoutobjekt wird auch +als @qq{Grob} bezeichnet, die Abkürzung für @emph{Gr}aphisches +@emph{Ob}jekt. Mehr Information zu Grobs findet sich in +@rinternals{grob-interface}. + +Die Seite zu @code{Fingering} enthält Definitionen für das +@code{Fingering}-Objekt. Auf der Seite steht etwa: + +@quotation +@code{padding} (dimension, in staff space): + +@code{0.5} +@end quotation + +@noindent +was bedeutet, dass der Abstand zu anderen Objekten mindestens +0.5 Notenlinienabstände beträgt. + +Jedes Layoutobjekt kann mehrere Funktionen sowohl als typographisches +als auch als Notationselement einnehmen. Das Fingersatzobjekt +beispielsweise hat folgende Aspekte: + +@itemize +@item +Seine Größe ist unabhängig von der horizontalen Platzaufteilung, +anders als etwa bei Legatobögen. + +@item +Es handelt sich um Text, normalerweise sehr kurz. + +@item +Dieser Text wird durch ein Glyph einer Schriftart gesetzt, +anders als bei Legatobögen. + +@item +Der Mittelpunkt des Symbols sollte horizontal mit dem +Mittelpunkt des Notenkopfes ausgerichtet werden. + +@item +Vertikal wird das Objekt neben die Note und das Notensystem +gesetzt. + +@item +Die vertikale Position wird auch mit anderen Textelementen +abgeglichen. + +@end itemize + +Jeder dieser Aspekte findet sich in sogenannten Schnittstellen +(engl. interface), die auf der @rinternals{Fingering}-Seite +unten aufgelistet sind: + +@quotation +This object supports the following interfaces: +@rinternals{item-interface}, +@rinternals{self-alignment-interface}, +@rinternals{side-position-interface}, @rinternals{text-interface}, +@rinternals{text-script-interface}, @rinternals{font-interface}, +@rinternals{finger-interface}, and @rinternals{grob-interface}. +@end quotation + +Ein Klick auf einen der Links öffnet die Seite der entsprechenden +Schnittstelle. Jede Schnittstelle hat eine Anzahl von Eigenschaften. +Einige sind nicht vom Benutzer zu beeinflussen (@qq{interne +Eigenschaften}), andere aber können verändert werden. + +Es wurde immer von einem @code{Fingering}-Objekt gesprochen, aber +eigentlich handelt es sich nicht um sehr viel. Die Initialisierungsdatei +@file{scm/define-grobs.scm} zeigt den Inhalt dieses @qq{Objekts} +(zu Information, wo diese Dateien sich finden siehe +@rlearning{Mehr Information}): + +@example +(Fingering + . ((padding . 0.5) + (avoid-slur . around) + (slur-padding . 0.2) + (staff-padding . 0.5) + (self-alignment-X . 0) + (self-alignment-Y . 0) + (script-priority . 100) + (stencil . ,ly:text-interface::print) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaText) + (font-size . -5) ; don't overlap when next to heads. + (meta . ((class . Item) + (interfaces . (finger-interface + font-interface + text-script-interface + text-interface + side-position-interface + self-alignment-interface + item-interface)))))) +@end example + +@noindent +Wie man sehen kann, ist das Fingersatzobjekt nichts anderes als +eine Ansammlung von Variablen, und die Internetseite der +Referenz der Interna ist direkt aus diesen Anweisungen generiert. + + +@node Die Grob-Eigenschaften +@subsection Die Grob-Eigenschaften +@translationof Determining the grob property + +Die Position der @b{2} aus dem Beispiel unten soll also geändert werden: + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Weil die @b{2} vertikal an der zugehörigen Note ausgerichtet ist, +müssen wir uns mit der Schnittstelle auseinander setzen, die diese +Positionierung veranlasst. Das ist hier @code{side-position-interface}. +Auf der Seite für diese Schnittstelle heißt es: + +@quotation +@code{side-position-interface} + +Position a victim object (this one) next to other objects (the +support). The property @code{direction} signifies where to put the +victim object relative to the support (left or right, up or down?) +@end quotation + +@cindex Verschiebung + +@noindent +Darunter wird die Variable @code{padding} (Verschiebung) beschrieben: + +@quotation +@table @code +@item padding +(dimension, in staff space) + +Add this much extra space between objects that are next to each other. +@end table +@end quotation + +Indem man den Wert von @code{padding} erhöht, kann die Fingersatzanweisung +weiter weg von der Note gesetzt werden. Dieser Befehl beispielsweise +fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf: + +@example +\once \override Voice.Fingering #'padding = #3 +@end example + +Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der +Fingersatz notiert ist, erhält man folgendes: + +@lilypond[quote,relative=2,verbatim] +\once \override Voice.Fingering #'padding = #3 +c-2 +\stemUp +f +@end lilypond + +In diesem Fall muss die Veränderung speziell für den @code{Voice}-Kontext +definiert werden. Das kann auch aus der Referenz der Interna entnommen +werden, da die Seite des @rinternals{Fingering_engraver} schreibt: + +@quotation +Fingering_engraver is part of contexts: @dots{} @rinternals{Voice} +@end quotation + + +@node Benennungskonventionen +@subsection Benennungskonventionen +@translationof Naming conventions + +Die Bezeichnungen für Funktionen, Variablen, Engraver und Objekte +folgen bestimmten Regeln: + +@itemize + +@item + Scheme-Funktionen: kleinbuchstaben-mit-bindestrichen + +@item + Scheme-Funktionen: ly:plus-scheme-stil + +@item + Musikalische Ereignisse, Musikklassen und Musikeigenschaften: wie-scheme-funktionen + +@item + Grob-Schnittstellen: scheme-stil + +@item + backend-Eigenschaften: scheme-stil (aber X und Y) + +@item + Kontexte: Großbuchstabe, oder GroßbuchstabeZwischenWörtern (CamelCase) + +@item + Kontext-Eigenschaften: kleinbuchstabeMitFolgendenGroßbuchstaben + +@item + Engraver: Großbuchstabe_gefolgt_von_kleinbuchstaben_mit_unterstrichen +@end itemize + +@c todos left out + + +@node Eigenschaften verändern +@section Eigenschaften verändern +@translationof Modifying properties + +@menu +* Grundlagen zum Verändern von Eigenschaften:: +* Der set-Befehl:: +* Der override-Befehl:: +* Der tweak-Befehl:: +* set versus override:: +* Alisten verändern:: +@end menu + + +@node Grundlagen zum Verändern von Eigenschaften +@subsection Grundlagen zum Verändern von Eigenschaften +@translationof Overview of modifying properties + +Jeder Kontext ist verantwortlich für die Erstellung bestimmter +graphischer Objekte. Die Einstellungen für diese Objekte werden +auch in dem Kontext gespeichert. Wenn man diese Einstellungen +verändert, kann die Erscheinung der Objekte geändert werden. + +Es gibt zwei unterschiedliche Eigenschaftenarten, die in Kontexten +gespeichert werden: Kontexteigenschaften und Grob-Eigenschaften. +Kontexteigenschaften sind Eigenschaften, die sich auf den gesamten Kontext +beziehen und seine Darstellung beinflussen. Grob-Eigenschaften dagegen +wirken sich nur auf bestimmte graphische Objekte aus, die in einem +Kontext dargestellt werden. + +Die @code{\set}- und @code{\unset}-Befehle werden benutzt, um die Werte +von Kontexteigenschaften zu ändern. Die Befehle @code{\override} und +@code{\revert} hingegen verändern die Werte von Grob-Eigenschaften. + +@ignore +Die Syntax hierzu lautet: + +@example +\override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert} +@end example + + +@var{Bezeichnung} ist die Bezeichnung eines graphischen Objekts, +wie @code{Stem} (Hals) oder @code{NoteHead} (Notenkopf), und +@var{Eigenschaft} ist eine interne Variable des Formatierungssystems +(eine @qq{Grob-Eigenschaft} oder @qq{Layout-Eigenschaft}). Diese +Eigenschaft ist ein Symbol, muss also mit einem Anführungsstrich +versehen werden. Wie die Felder @var{Bezeichnung}, @var{Eigenschaft} +und @var{Wert} richtig gefüllt werden, zeigt der Abschnitt +@ref{Eigenschaften verändern}. Hier wird nur die Funktionalität des +Befehls betrachtet. + +Der Befehl + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +bewirkt, dass der Notenhals dicker gesetzt wird (Standard ist +1.3, die Dicke der Notenlinie entspricht dem Wert 1). Da der +Befehl den Kontext @code{Staff} angibt, wirkt er sich nur auf +das gerade aktuelle Notensystem aus. Andere Systeme behalten +ihr normales Aussehen. Hier ein Beispiel mit diesem Befehl: + +@lilypond[quote,verbatim,relative=2] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond + +Der @code{\override}-Befehl verändert die Definitionen von +@code{Stem} (Hals) innerhalb des aktuellen @code{Staff} +(Notensystems). Nachdem der Befehl gelesen wurde, werden +alle Hälse dicker gesetzt. + +Wie auch bei dem @code{\set}-Befehl kann auch hier der +Kontext ausgelassen werden, wobei dann immer implizit der +@code{Voice}-Kontext angenommen wird. Mit einem zusätzlichen +@code{\once} wirkt sich die Änderung nur einmal aus: + +@lilypond[quote,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond + +Der @code{\override}-Befehl muss geschrieben sein, bevor das Objekt +begonnen wird. Wenn also ein @emph{Strecker}-Objekt wie etwa +ein Bogen verändert werden soll, muss der @code{\override}-Befehl +schon geschrieben werden, bevor das Objekt begonnen wird. In dem +folgenden Beispiel + +@lilypond[quote,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'beam-thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +ist der Bogen dicker, der Balken aber nicht. Das liegt daran, dass der Befehl +zum Ändern des @code{Beam}-Objekts erst gesetzt wurde, nachdem der Balken +schon begonnen hat. + +Der @code{\revert}-Befehl macht alle Änderungen rückgängig, die mit einem +@code{\override}-Befehl vorgenommen worden sind, dabei werden allerdings +nur Einstellungen betroffen, die sich im gleichen Kontext befinden. Der +@code{\revert}-Befehl des folgenden Beispiels bewirkt also gar nichts, +weil er für den falschen Kontext gefordert wird. + +@example +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Einige veränderbare Optionen werden als Untereigenschaften (engl. +subproperties) bezeichnet und befinden sich innerhalb von den +normalen Eigenschaften. Wenn man sie verändern will, nimmt der +Befehl folgende Form an: + +@c leave this as a long long +@example +\override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} #'@var{Untereigenschaft} = #@var{Wert} +@end example + +@noindent +wie beispielsweise + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example +@end ignore + +@seealso +Referenz der Interna: +@rinternals{OverrideProperty}, +@rinternals{RevertProperty}, +@rinternals{PropertySet}, +@rinternals{Backend}, +@rinternals{All layout objects}. + + +@knownissues + +Das Back-end ist nicht sehr streng bei der Überprüfung +der Typen von Objekteigenschaften. Auf sich selbst verweisende +Bezüge in Scheme-Werten der Eigenschaften können Verzögerung +oder einen Absturz des Programms hervorrufen. + + + +@node Der set-Befehl +@subsection Der @code{@bs{}set}-Befehl +@translationof The set command + +@cindex Eigenschaften +@cindex Verändern von Eigenschaften + +@funindex \set +@funindex set + +Jeder Kontext kann unterschiedliche @emph{Eigenschaften} besitzen, +Variablen, die in diesem Kontext definiert sind. Sie können +während der Interpretation des Kontextes verändert werden. Hierzu +wird der @code{\set}-Befehl eingesetzt: + +@example +\set @var{Kontext}.@var{Eigenschaft} = #@var{Wert} +@end example + +@var{Wert} ist ein Scheme-Objekt, weshalb ihm @code{#} vorangestellt +werden muss. + +Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe} +benannt. Sie kontrollieren vor allem die Übersetzung von Musik in +Notation, wie etwa @code{localKeySignature}, welche bestimmt, wann +ein Taktstrich gesetzt werden muss. Kontexteigenschaften können +ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert +wird. Ein gutes Beispiel dafür ist @code{measurePosition}, was die +Position der Noten im Takt angibt. Kontexteigenschaften werden mit dem +@code{\set}-Befehl verändert. + +Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die +Kontexteigenschaft @code{skipBars} (Takte überspringen) auf @code{#t} +(wahr) gesetzt wird: + +@lilypond[quote,verbatim,relative=2] +R1*2 +\set Score.skipBars = ##t +R1*2 +@end lilypond + +Wenn das @var{Kontext}-Argument ausgelassen wird, bezieht sich +der Befehl auf den gerade aktiven unterstmöglichen Kontext, +üblicherweise @code{ChordNames}, @code{Voice} oder +@code{Lyrics}. + +@lilypond[quote,verbatim,relative=2] +\set Score.autoBeaming = ##f +<< + { + e8 e e e + \set autoBeaming = ##t + e8 e e e + } \\ { + c8 c c c c8 c c c + } +>> +@end lilypond + +Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass +diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt. + +Dabei gilt zu beachten, dass der unterste Kontext nicht immer die +Eigenschaft enthält, die verändert werden soll. Wenn man +beispielsweise @code{skipBars} aus dem oberen Beispiel +ohne Angabe des Kontextes zu verändern sucht, hat der Befehl +keine Auswirkung, weil er sich auf den @code{Voice}-Kontext +bezieht, die Eigenschaft sich aber im @code{Score}-Kontext +befindet: + +@lilypond[quote,verbatim,relative=2] +R1*2 +\set skipBars = ##t +R1*2 +@end lilypond + +Kontexte sind hierarchisch angeordnet. Wenn ein übergeordneter +Kontext angegeben wird, etwa @code{Staff}, dann beziehen sich +die Änderungen auf alle Stimmen (@code{Voice}), die in diesem +Kontext enthalten sind. + +@funindex \unset +@funindex unset + +Es gibt auch einen @code{\unset}-Befehl: + +@example +\unset @var{Kontext}.@var{Eigenschaft} +@end example + +@noindent +der bewirkt, dass die vorgenommenen Definitionen für @var{Eigenschaft} +entfernt werden. Dieser Befehl macht nur Einstellungen im richtigen +Kontext rückgängig. Wenn also im @code{Staff}-Kontext die +Bebalkung ausgeschaltet wird: + +@lilypond[quote,verbatim,relative=2] +\set Score.autoBeaming = ##t +<< + { + \unset autoBeaming + e8 e e e + \unset Score.autoBeaming + e8 e e e + } \\ { + c8 c c c c8 c c c + } +>> +@end lilypond + +Wie für @code{\set} muss das @var{Kontext}-Argument für den untersten +Kontext nicht mitangegeben werden. Die zwei Versionen + +@example +\set Voice.autoBeaming = ##t +\set autoBeaming = ##t +@end example + +verhalten sich gleich, wenn die gegenwärtige Basis der +@code{Voice}-Kontext ist. + +@funindex \once +@funindex once + +Einstellungen, die nur einmal vorgenommen werden sollen, können +mit @code{\once} notiert werden, etwa: + +@lilypond[quote,verbatim,relative=2] +c4 +\once \set fontSize = #4.7 +c4 +c4 +@end lilypond + +Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften +findet sich in der Referenz der Interna, siehe +@ifhtml +@rinternals{Tunable context properties}. +@end ifhtml +@ifnothtml +@qq{Translation @expansion{} Tunable context properties}. +@end ifnothtml + +@seealso + +Internals Reference: + +@rinternals{Tunable context properties}. + + + +@node Der override-Befehl +@subsection Der @code{\\override}-Befehl +@translationof The override command + +@cindex Grob-Eigenschaften +@cindex Eigenschaften von Grob +@cindex graphische Objekte, Eigenschaften + +@funindex \override +@funindex override + +Es gibt eine besondere Art von Kontexteigenschaft: die Grob-Beschreibung. +Grob-Beschreibungen werden mit @code{GroßGroßbuchstabe} benannt. Sie +enthalten @qq{Standardeinstellungen} für ein bestimmtes Grob als eine +assoziative Liste. Siehe @file{scm/define-grobs.scm} für die +Einstellungen aller Grob-Beschreibungen. Grob-Beschreibungen werden +mit @code{\override} verändert. + +@code{\override} ist eigentlich eine Kurzform, der Befehl + +@example +\override @var{Kontext}.@var{GrobBezeichnung} #'@var{Eigenschaft} = #@var{Wert} +@end example + +ist äquivalent zu + +@example +\set @var{Kontext}.@var{GrobBezeichnung} = + #(cons (cons '@var{Eigenschaft} @var{Wert}) + ) +@end example + +Der Wert von @code{Kontext}.@code{GrobBezeichnung} (die assoz. Liste @qq{alist}) wird benutzt um die Eigenschaften von individuellen Grobs +zu initialisieren. Grobs haben Eigenschaften, die im Scheme-Stil mit +@code{bindestrich-wörtern} benannt sind. Diese Werte der Grob-Eigenschaften +verändern sich während des Notensetzens: LilyPonds Notensatz heißt im +Grunde, die Eigenschaften mit Callback-Fuktionen auszurechnen. + +Beispielsweise kann die Dicke eines Notenhalses verändert werden, indem +man die @code{thickness}-Eigenschaft des @code{Stem}-Objekts verändert: + +@lilypond[quote, verbatim, relative=2] +c4 c +\override Voice.Stem #'thickness = #3.0 +c4 c +@end lilypond + +Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext +benutzt: + +@lilypond[quote, verbatim, relative=2] +{ \override Staff.Stem #'thickness = #3.0 + << + { + e4 e + \override Stem #'thickness = #0.5 + e4 e + } \\ { + c4 c c c + } + >> +} +@end lilypond + +@cindex rückgängig machen von Kontextveränderungen +@cindex Kontextveränderungen rückgängig machen +@cindex override rückgängig machen +@cindex \override rückgängig machen + +@funindex \revert +@funindex revert + +Die Auswirkungen von @code{\override} können mit @code{\revert} wieder +rückgängig gemacht werden: + +@lilypond[quote, verbatim, relative=2] +c4 +\override Voice.Stem #'thickness = #3.0 +c4 c +\revert Voice.Stem #'thickness +c4 +@end lilypond + +Die Auswirkungen von @code{\override} und @code{\revert} wirken sich auf alle +Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden: + +@lilypond[quote, verbatim, relative=2] +{ + << + { + e4 + \override Staff.Stem #'thickness = #3.0 + e4 e e + } \\ { + c4 c c + \revert Staff.Stem #'thickness + c4 + } + >> +} +@end lilypond + +@cindex Veränderung von Kontexten nur einmal +@cindex Einmal verändern von Kontexten +@cindex Kontexte, einmal verändern +@cindex \override, nur einmal + +@funindex \once +@funindex once + +@code{\once} kann zusammen mit @code{\override} benutzt werden, +um nur den aktuellen Zeitwert zu verändern: + +@lilypond[quote, verbatim, relative=2] +{ + << + { + \override Stem #'thickness = #3.0 + e4 e e e + } \\ { + c4 + \once \override Stem #'thickness = #3.0 + c4 c c + } + >> +} +@end lilypond + + +@ignore +@cindex Referenz der Interna +@cindex Grafische Objekte, Finden +@cindex Finden von graphischen Objekten +@cindex Beschreibung von graphischen Objekten +@cindex Grafische Objekte, Beschreibung +@cindex Grob, Beschreibung +@cindex Veränderungen der Einstellungen +@cindex Einstellungen verändern + +@funindex override +@funindex \override + +Viele Eigenschaften können unabhängig von der Art der Daten, die +sie enthalten, ausgeschaltet werden, indem man sie als @qq{falsch} +(@code{##f}) definiert. Dadurch wird diese Eigenschaft von LilyPond +ignoriert. Das ist insbesondere nützlich, wenn man Grob-Eigenschaften +ausschalten will, die Probleme verursachen. +@end ignore + + +@seealso + +Referenz der Interna: +@rinternals{Backend}. + + +@node Der tweak-Befehl +@subsection Der @code{\\tweak}-Befehl +@translationof The tweak command + +@funindex \tweak +@funindex tweak + +@cindex Optimieren + +Wenn man Grob-Eigenschaften mit @code{\override} verändert, verändern sich +alle fraglichen Objekte zu dem gegebenen musikalischen Moment. Manchmal +will man allerdings nur ein Grob verändern, anstatt allen Grobs des +aktuellen Kontextes. Das kann mit dem @code{\tweak}-Befehl erreicht +werden, mit dem man Optimierungen vornehmen kann: + +@example +\tweak #'@code{grob-eigenschaft} #@code{Wert} +@end example + +Der @code{\tweak}-Befehl wirkt sich auf das Objekt aus, dass direkt auf +@code{Wert} folgt. + +@ignore +In einigen Fällen ist es möglich, mit einem abgekürzten Befehl +graphische Objekte zu verändern. Wenn Objekte direkt von einem +Element des Quelltextes erstellt werden, kann der @code{\tweak}-Befehl +eingesetzt werden: + +@lilypond[relative=2,verbatim] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +-\tweak #'padding #8 +-^ +@end lilypond + +@cindex Akkord, eine Note verändern + +Die hauptsächliche Benutzung von @code{\tweak} ist dann, wenn +man nur ein Element von einer Ansammlung an Elementen verändern +will, die alle zum gleichen musikalischen Moment beginnen. Das +kann eine Noten in einem Akkord sein, oder eine von mehreren +Triolenklammern, die zur gleichen Zeit beginnen. + +Eine Einleitung der Syntax für den @code{\tweak}Befehl findet +sich in @rlearning{Optimierungsmethoden}. + +Der @code{\tweak}-Befehl verändert die Eigenschaft des folgenden +Objekts direkt, ohne dass die Bezeichnung des Objekts (Grobs) oder +des Kontextes angegeben werden muss. Damit das funktioniert, muss +das Objekt direkt auf den @code{\tweak}-Befehl folgen, auf das +er sich auswirken soll. Das ist in manchen Fällen nicht gegeben, +da viele Objekte durch LilyPond automatisch eingesetzt werden. +Wenn etwa eine Note interpretiert wird, die nicht Teil eines +Akkords ist, fügt LilyPond implizit einen @code{ChordEvent} +vor die Note ein, sodass der @code{\tweak}-Befehl von der +Note getrennt wird. Wenn aber Akkord-Klammern um die Note +und den @code{\tweak}-Befehl gesetzt werden, folgt der +@code{ChordEvent} auf den @code{\tweak}-Befehl und befindet +sich deshalb direkt vor der Note, auf die er einwirken soll, +sodass die Veränderung funktioniert. + +An einem Beispiel demonstriert: Das funktioniert: + + +@lilypond[relative=2,verbatim,quote] +<\tweak #'color #red c>4 +@end lilypond + +@noindent +und das nicht: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +@end lilypond + +@end ignore + +Eine Einleitung der Syntax und Benutzungen des @code{\tweak}-(Optimierungs)-Befehls findet sich in @rlearning{Optimierungsmethoden}. + +Wenn mehrere gleichartige Elemente zum gleichen musikalischen +Moment auftreten, kann der @code{\override}-Befehl nicht +benutzt werden, um nur einen von ihnen zu verändern: hier braucht +man den @code{\tweak}-Befehl. Elemente, die mehrfach zum +gleichen musikalischen Moment auftreten können sind unter Anderem: + +@c TODO expand to include any further uses of \tweak +@itemize +@item Notenköpfe von Noten innerhalb eines Akkordes +@item Artikulationszeichen an einer einzelnen Note +@item Bindebögen zwischen Noten eines Akkordes +@item Llammern für rhythmische Verhältnisse (wie Triolen), die zur gleichen Zeit beginnen +@end itemize + +@c TODO add examples of these + +@cindex Akkord, eine Noten verändern + +In diesem Beispiel wird die Farbe eines Notenkopfes und die Art eines +anderen Notenkopfes innerhalb eines Akkordes verändert: + +@lilypond[relative=2,verbatim,quote] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +@end lilypond + +@code{\tweak} kann auch benutzt werden, um Bögen zu verändern: + +@lilypond[verbatim,quote,relative=1] +c-\tweak #'thickness #5 ( d e f) +@end lilypond + +Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem +Objekt stehen, auf das er sich bezieht. Manchmal kommt es vor, dass +LilyPond während der Kompilierung der Datei zusätzliche Elemente +einfügt, die dann zwischen der Optimierung und dem Objekt stehen. +Noten, auch einzlene Noten, werden beispielsweise intern von LilyPond +immer wie Akkorde behandelt, sodass auch ein @code{\tweak}-Befehl +für eine einzelne Note innerhalb von Akkordzeichen notiert werden +muss: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +<\tweak #'color #red c>4 +@end lilypond + +Der @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um +Elemente zu verändern, die sich nicht direkt im Notentext befinden. +Insbesondere Hälse, Balken oder Versetzungszeichen lassen sich nicht +beeinflussen, weil diese später durch den Notenkopf erstellt werden +und nicht direkt durch +den Quelltext. @code{\tweak} kann auch nicht verwendet werden, +um Schlüssel oder Taktarten zu verändern, denn sie werden von +dem @code{\tweak}-Befehl während der Interpretation durch +automatisches Einfügen von zusätzlichen Kontextelementen getrennt. + +Mehrere @code{\tweak}-Befehle können vor ein Notationselement +gesetzt werden und alle werden interpretiert: + +@lilypond[verbatim,quote,relative=1] +c +-\tweak #'style #'dashed-line +-\tweak #'dash-fraction #0.2 +-\tweak #'thickness #3 +-\tweak #'color #red + \glissando +f' +@end lilypond + +Der Strom der musikalischen Ereignisse (engl. music stream), der aus +dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten +Elemente gehören, kann betrachtet werden, siehe +@ref{Musikalische Funktionen darstellen}. Das kann nützlich sein, +wenn man herausfinden will, was mit dem @code{\tweak}-Befehl +verändert werden kann. + +@seealso +Handbuch zum Lernen: +@rlearning{Optimierungsmethoden}. + +Erweitern: +@rextend{Musikalische Funktionen darstellen}. + +@knownissues + +@cindex tweak-Befehl in einer Variable +@cindex Variable, tweak-Befehl benutzen +@cindex Optimierung innerhalb einer Variable + +Der @code{\tweak}-Befehl kann nicht innerhalb von einer Variable eingesetzt werden. + +@cindex tweaks-Befehl in Gesangstext +@cindex lyrics und tweak-Befehl +@cindex Gesangstext und tweak-Befehl + +Der @code{\tweak}-Befehl kann nicht innerhalb von @code{\lyricmode} eingesetzt werden. + +@cindex Kontrollpunkte und tweak +@cindex tweak und Kontrollpunkte + +Der @code{\tweak}-Befehl kann nicht benutzt werden, um die Kontrollpunkte +eines von mehreren Bindebögen eines Akkorden zu verändern. Anstelle dessen +wird der erste Bogen verändert, der in der Eingabedatei auftritt. + + +@node set versus override +@subsection @code{\\set} versus @code{\\override} +@translationof set versus override + +@c TODO: überflüssig? + +@ignore +Es wurden zwei unterschiedliche Methoden vorgestellt, mit denen +Eigenschaften verändert werden können: @code{\set} und +@code{\override}. Im Grunde genommen gibt es auch zwei +unterschiedliche Arten von Eigenschaften. + +Kontexte können Eigenschaften haben, deren Bezeichnungen +üblicherweise dem Schema @code{kleinGroß} folgen. Derartige +Eigenschaften sind vor allen Dingen für die Übersetzung der +Musik in Notation zuständig, beispielsweise @code{localKeySignature} +(um zu bestimmen, ob Versetzungszeichen ausgegeben werden +müssen), @code{measurePosition} (um zu bestimmen, ob eine +Taktlinie gesetzt werden muss). Kontexteigenschaften können +ihren Wert verändern, während ein Musikstück ausgewertet wird; +@code{measurePosition} (Taktposition) ist ein gutes Beispiel +hierfür. Kontexteigenschaften werden mit dem Befehl @code{\set} +verändert. + +Dann gibt es einen Spezialtyp der Kontexeigenschaften: die +Elementbeschreibung. Diese Eigenschaften werden mit +@code{GroßGroß} benannt (beginnen also auch mit einem +Großbuchstaben). Sie beinhalten die Standardeinstellungen +für die besagten graphischen Objekte in Form einer +Assosiationsliste. Siehe auch die Datei @file{scm/define-grobs.scm} +für ein Beispiel zu diesen Einstellungen. Elementbeschreibungen +können mit dem Befehl @code{\override} verändert werden. + +@code{\override} ist eigentlich eine Abkürzung: + +@example +\override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert} +@end example + +@noindent +entspricht mehr oder weniger: + +@c leave this long line -gp +@example +\set @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #(cons (cons '@var{Eigenschaft} @var{Wert}) > + +% reduced space between staves +\new PianoStaff \with { + % this is the nested declaration + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7 +} << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> +@end lilypond + +Wenn man diese Art des geschachtelten Aufrufs einsetzt, wird der +spezifische Schlüssel (@code{basic-distance} im obigen Beispiel) verändert, +ohne dass sich andere Wert für die gleiche Eigenschaft ändern würden. + +Nun sollen die Systeme so dicht wie möglich gesetzt werden, ohne das +Überlappungen vorkommen. Die einfachste Möglichkeit, das zu tun, wäre +es, alle vier Wert auf 0 zu setzen. Man muss jedoch nicht vier +Werte definieren, sondern die Eigenschaft +kann mit einem Aufruf als Aliste vollständig verändert werden: + +@lilypond[quote,verbatim] +\new PianoStaff \with { + \override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 0) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> +@end lilypond + +Dabei sollte beachtet werden, dass alle Schlüssel, die bei dieser +Weise des Aufrufs nicht explizit aufgelistet sind, auf den Standardwert +gesetzt werden, den sie hätten, wenn sie nicht definiert werden. +Im Falle von @code{staff-staff-spacing} würden alle nicht genannten +Schlüsselwerte auf 0 gesetzt (außer @code{stretchability}, welche immer +den Wert von @code{space} hat, wenn sie nicht definiert ist). Somit sind +folgende Aufrufe äquivalent: + +@example +\override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 7)) + +\override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 7) + (minimum-distance . 0) + (padding . 0) + (stretchability . 7)) +@end example + +Eine möglicherweise ungewollte Konsequenz hiervon ist, dass alle +Standardwerte, die etwa in einer Initialisierungsdatei +zu Beginn einer LilyPond-Partitur geladen werden, nach dem Aufruf +rückgängig gemacht werden. Im obigen Beispiel werden die +initialisierten Standardwerte für @code{padding} und @code{minimum-distance} +(definiert in @file{scm/define-grobs.scm}) auf den Standard zurückgesetzt, +den sie uninitialisiert hätten (0 in beiden Fällen). Wenn eine Eigenschaft oder +Variable in Form einer Aliste (jeder Größe) definiert wird, werden +immer alle Schlüsselwerte auf den uninitialisierten Zustand zurückgesetzt. +Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht +bewusst alle Werte zurücksetzen will. + +@warning{Geschachtelte Aufrufe funktionieren nicht mit +Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keySignature}, +@code{timeSignatureSettings}, usw.) Diese Eigenschaften können +nur verändert werden, indem man sie vollständig als Alisten umdefiniert.} + + +@node Nützliche Konzepte und Eigenschaften +@section Nützliche Konzepte und Eigenschaften +@translationof Useful concepts and properties + +@menu +* Eingabe-Modi:: +* Richtung und Platzierung:: +* Reihenfolge des Kontextlayouts:: +* Abstände und Maße:: +* Eigenschaften des Staff-Symbols:: +* Strecker:: +* Sichtbarkeit von Objekten:: +* Linienstile:: +* Drehen von Objekten:: +@end menu + + +@node Eingabe-Modi +@subsection Eingabe-Modi +@translationof Input modes + +Die Art, wie die Notation einer Eingabedatei interpretiert +wird, hängt vom aktuellen Eingabemodus ab. + +@strong{Chord (Akkordmodus)} + +Man erreicht ihn durch den Befehl @code{\chordmode}. Hierdurch +wird die Eingabe entsprechend der Syntax der Akkordnotation +interpretiert, siehe @ref{Notation von Akkorden}. Akkorde werden als +Noten auf einem System dargestellt. + +Der Akkordmodus wird auch mit dem Befehl @code{\chords} initiiert. +Dadurch wird gleichzeitig ein neuer @code{ChordNames}-Kontext +erstellt, die Eingabe entsprechend der Syntax der Akkordnotation +interpretiert und als Akkordbezeichnungen in einem +@code{ChordNames}-Kontext dargestellt. Siehe @ref{Akkordbezeichnungen drucken}. + +@strong{Drum (Schlagzeugmodus)} + +Man erreicht ihn mit dem Befehl @code{\drummode}. Die Eingabe +wird entsprechend der Syntax der Schlagzeugnotation interpretiert, +siehe @ref{Grundlagen der Schlagzeugnotation}. + +Der Schlagzeugmodus wird auch mit dem Befehl @code{\drums} aktiviert. +Dadurch wird gleichzeitig ein neuer @code{DrumStaff}-Kontext +erstellt, die Eingabe entsprechend der Syntax der Schlagzeugnotation +interpretiert und als Schlagzeugsymbole auf einem Schlagzeugsystem +dargestellt. Siehe @ref{Grundlagen der Schlagzeugnotation}. + +@strong{Figure (Ziffernmodus)} + +Man erreicht ihn mit dem Befehl @code{\figuremode}. Die Eingabe +wird entsprechend der Syntax für Generalbass interpretiert, siehe +@ref{Eingabe des Generalbass'}. + +Der Ziffernmodus wird auch mit dem Befehl @code{\figures} aktiviert. +Dadurch wird gleichzeitig ein neuer @code{FiguredBass}-Kontext +erstellt, die Eingabe entsprechend der Syntax für Generalbass +interpretiert und als Generalbassziffern im @code{FiguredBass}-Kontext +dargestellt. Siehe @ref{Grundlagen des Bezifferten Basses}. + +@strong{Fret/tab (Griffsymbol-/Tabulaturmodus)} + +Es gibt keinen besonderen Eingabemodus für Griffsymbole und +Tabulaturen. + +Um Tabulaturen zu erstellen, werden Noten oder Akkorde im +Notenmodus notiert und dann in einem @code{TabStaff}-Kontext +interpretiert, siehe +@ref{Standardtabulaturen}. + +Um Griffsymbole oberhalb eines Notensystems zu erstellen, gibt +es zwei Möglichkeiten. Man kann den @code{FretBoards}-Kontext +einsetzen (siehe @ref{Automatische Bund-Diagramme}) oder sie können +als Beschriftung über den Noten eingefügt werden, indem man +den @code{\fret-diagram}-Befehl einsetzt (siehe +@ref{Bund-Diagramm-Beschriftung}). + +@strong{Lyrics (Gesangstextmodus)} + +Man erreicht ihn mit dem Befehl @code{\lyricmode}. Die Eingabe +wird entsprechend der Syntax für Silben eines Gesangstextes +interpretiert, wobei optional Dauern und verknüpfte +Gesangstextveränderer möglich sind, siehe @ref{Notation von Gesang}. + +Der Gesangstextmodus wird auch durch den Befehl @code{\addlyrics} +aktiviert. Dadurch wird auch ein neuer @code{Lyrics}-Kontext +erstellt und ein impliziter @code{\lyricsto}-Befehl, der den +nachfolgenden Gesangstext mit der vorhergehenden Musik verknüpft. + +@strong{Markup (Textbeschriftungsmodus)} + +Man erreicht ihn mit dem Befehl @code{\markup}. Die Eingabe wird +entsprechend der Syntax für Textbeschriftung interpretiert, siehe +@ref{Textbeschriftungsbefehle}. + +@c silly work-around for texinfo broken-ness +@c (@strong{Note...} causes a spurious cross-reference in Info) +@b{Note (Notenmodus)} + +Das ist der Standardmodus. Er kann auch mit dem Befehl +@code{\notemode} gefordert werden. Die Eingabe wird als Tonhöhen, +Dauern, Beschriftung usw. interpretiert und als musikalische +Notation auf einem Notensystem gesetzt. + +Es ist normalerweise nicht nötig, den Notenmodus extra anzugeben, +aber es kann in bestimmten Situationen durchaus nützlich sein, +etwa wenn man in einem Gesangstext-, Akkord- oder einem anderen +Modus arbeitet aber ein Zeichen braucht, das nur im Notenmodus +benutzt werden kann. + +Um etwa Dynamikzeichen vor die Nummern von unterschiedlichen +Strophen zu setzen, muss man den Notenmodus betreten: + +@lilypond[verbatim,relative=2,quote] +{ c4 c4 c4 c4 } +\addlyrics { + \notemode{ \set stanza = \markup{ \dynamic f 1. } } + To be sung loudly +} +\addlyrics { + \notemode{ \set stanza = \markup{ \dynamic p 2. } } + To be sung quietly +} +@end lilypond + + +@node Richtung und Platzierung +@subsection Richtung und Platzierung +@translationof Direction and placement + +Die Platzierung und Richtung von Objekten ist im Notensatz oft durch eine +enge Auswahl begrenzt: Notenhälse beispielsweise können entweder nach +oben oder nach unten zeigen, Gesangstext, Dynamikzeichen und andere +Ausdrucksbezeichnungen können über oder unter dem System gesetzt werden, +Text kann rechts, links oder mittig ausgerichtet werden usw. Die meisten +dieser Entscheidungen können LilyPond direkt überlassen werden; in +einigen Fällen kann es allerdings nötig sein, eine bestimmte Richtung +oder eine Position zu erzwingen. + +@strong{Richtungseinstellung von Artikulationszeichen} + +Standardmäßig sind bestimmte Objekte immer nach oben oder unten ausgerichtet, +wie Dynamikzeichen oder Fermaten, während andere Objekte zwischen +oben und unten wechseln, was vor allem von der Richtung der Notenhälse +abhängt und etwa Bögen und Akzente betrifft. + +Die Standardeinstellungen können verändert werden, indem dem +Artikulationszeichen ein Ausrichtungsmarkierer vorangeht. Drei +derartige Ausrichtungsmarkierer sind vorhanden: @code{^} (bedeutet @qq{nach oben}), @code{_} +(bedeutet @qq{nach unten}) bzw. @code{-} (bedeutet @qq{Standardrichtung} +benutzen) normalerweise weggelassen werden. In diesem Fall wird +@code{-} angenommen. Eine Richtungsanweisung ist jedoch +@strong{immer} erforderlich vor + +@itemize +@item @code{\tweak}-Befehlen +@item @code{\markup}-(Textbeschriftungs-)Befehlen +@item @code{\tag}-Befehlen +@item Textbeschriftungen in reiner Textform, wie etwa @code{-"string"} +@item Fingersatzanweisungen: @code{-1} +@item Abkürzungen von Artikulationen, wie @code{-.}, @code{->}, @code{--} +@end itemize + +Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note: + +@lilypond[verbatim,quote,relative=2] +c2( c) +c2_( c) +c2( c) +c2^( c) +@end lilypond + + +@strong{Die @code{direction}-(Richtungs-)Eigenschaft} + +Die Position oder Richtung vieler Layoutobjekte wird von der +@code{direction}-Eigenschaft kontrolliert. + +Der Wert der @code{direction}-Eigenschaft kann auf den Wert +@code{1} gesetzt werden, was gleichbedeutend mit @qq{nach oben} +bzw. @qq{oberhalb} ist, oder auf den Wert @code{-1}, was +@qq{nach unten} bzw. @qq{unterhalb} bedeutet. Die Symbole +@code{UP} und @code{DOWN} können anstelle von @code{1} +und @code{-1} benutzt werden. Die Standardausrichtung kann +angegeben werden, indem @code{direction} auf den Wert +@code{0} oder @code{CENTER} gesetzt wird. In vielen Fällen +bestehen auch vordefinierte Befehle, mit denen die Ausrichtung +bestimmt werden kann. Sie haben die Form + +@noindent +@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} + +@noindent +wobei @code{xxxNeutral} bedeutet: @qq{Benutze die +Standardausrichtung}. Siehe auch +@rlearning{within-staff (Objekte innerhalb des Notensystems)}. + +In wenigen Fällen, von denen Arpeggio das einzige häufiger +vorkommende Beispiel darstellt, entscheidet der Wert von +@code{direction}, ob das Objekt auf der rechten oder linken +Seite das Ursprungsobjektes ausgegeben wird. In diesem Fall +bedeutet @code{-1} oder @code{LEFT} @qq{auf der linken Seite} +und @code{1} oder @code{RIGHT} @qq{auf der rechten Seite}. @code{0} +oder @code{CENTER} bedeutet @qq{benutze Standardausrichtung}. + +@c ignore left out +Diese Ausrichtungsanzeigen wirken sich auf alle Noten aus, bis sie +rückgängig gemacht werden: + +@lilypond[verbatim,quote,relative=2] +c2( c) +\slurDown +c2( c) +c2( c) +\slurNeutral +c2( c) +@end lilypond + + +@node Reihenfolge des Kontextlayouts +@subsection Reihenfolge des Kontextlayouts +@translationof Context layout order + +@cindex Kontexte, Reihenfolge + +Kontexte werden normalerweise in einer Notensystemgruppe dargestellt, +von oben nach unten in der Reihenfolge, in der sie +in der Eingabedatei auftreten. Wenn Kontexte verschachtelt sind, +enthält der äußere Kontext die inneren geschachtelten Kontexte, +wie in der Eingabedatei angegeben, vorausgesetzt die inneren +Kontexte befinden sich in der @qq{accepts}-Liste des äußeren +Kontextes. Verschachtelte Kontexte, die nicht in dieser Liste +auftauchen, werden neu unter den äußeren Kontext angeordnet, anstatt +dass sie innerhalb dieses Kontextes gesetzt werden. + +Es ist wichtig zu erinnern, dass ein Kontext implizit erstellt +werden kann, wenn ein Befehl vorkommt und kein passender Kontext +zur Verfügung steht, um den Befehl auszuführen. Dadurch können +unerwartet neue Systeme oder Partituren erstellt werden. + +Die Standardreihenfolge, in der die Kontexte gesetzt werden und +die @qq{accepts}-Liste können geändert werden, siehe auch +@ref{Aligning contexts}. + +@seealso +Handbuch zum Lernen +@rlearning{An extra staff appears}. + + +@node Abstände und Maße +@subsection Abstände und Maße +@translationof Distances and measurements + +@cindex Abstände, absolut +@cindex Abstände, skaliert + +@funindex \mm +@funindex \cm +@funindex \in +@funindex \pt + +In LilyPond gibt es zwei Arten von Abständen: absolute und +skalierte. + +Absolute Abstände werden benutzt, um Ränder, Einzüge und andere +Einzelheiten des Seitenlayouts zu bestimmen. Sie sind in den +Standardeinstellungen in Millimetern definiert. Abstände können +auch in anderen Einheiten definiert werden, indem folgende +Befehle auf die Zahl folgen: @code{\mm}, @code{\cm}, +@code{\in}@tie{}(Zoll=2,54 cm) und @code{\pt}@tie{}(Punkte, 1/72.27 +eines Zolls). Abstände des Seitenlayouts können auch in +skalierbaren Einheiten (siehe folgenden Absatz) definiert +werden, indem man den Befehl @code{\staff-space} an die +Zahl hängt. Das Seitenlayout ist genauer beschrieben in +@ref{Seitenlayout}. + +Skalierbare Abstände werden immer in Einheiten von +Notenlinienabständen angegeben, oder seltener in halben +Notenlinienabständen. Ein Notenlinienabstand ist der +Abstand zwischen zwei benachbarten Linien eines Notensystems. +Der Standardwert dieser Einheit kann global geändert werden, +indem man die globale Notensystemgröße ändert, oder sie +kann lokal geändert werden, indem man die Eigenschaft +@code{staff-space} des @code{StaffSymbol}-Objekts mit +@code{\override} verändert. Skalierte Abstände verändern +sich automatisch entsprechend, wenn der Notenlinienabstand +entweder global oder lokal verändert wird, aber Schriftarten +verändern ihre Größe nur, wenn der Notenlinienabstand +global verändert wird. Mit dem globalen Notenlinienabstand +kann man also auf einfach Art und Weise die gesamte Größe +einer Partitur verändern. Zu Methoden, wie der globale +Notenlinienabstand verändert werden kann, siehe +@ref{Die Notensystemgröße einstellen}. + +@funindex magstep + +Wenn nur eine ein Abschnitt einer Partitur in einer anderen +Größe erscheinen soll, etwa ein Ossia-Abschnitt in einer +Fußnote, kann die globale Notensystemgröße nicht einfach +geändert werden, weil sich diese Änderung auf die gesamte Partitur +auswirken würde. In derartigen Fällen muss die Größenänderung +vorgenommen werden, indem man sowohl die +@code{staff-space}-Eigenschaft von @code{StaffSymbol} als auch +die Größe der Schriftarten verändert. Eine Scheme-Funktion, +@code{magstep}, kann von einer Schriftartveränderung zu der +entsprechenden Veränderung in @code{staff-space} (Notenlinienabständen) +konvertieren. Zu einer Erklärung und Beispielen zu ihrer +Verwendung siehe @rlearning{Länge und Dicke von Objekten}. + + +@seealso +Handbuch zum Lernen: +@rlearning{Länge und Dicke von Objekten}. + +Notationsreferenz: +@ref{Seitenlayout}, +@ref{Die Notensystemgröße einstellen}. + + +@node Eigenschaften des Staff-Symbols +@subsection Eigenschaften des Staff-Symbols +@translationof Staff symbol properties + +@cindex Anpassen von staff symbol +@cindex Notensystem, anpassen +@cindex Veränderung des Notensystems + +Die vertikale Position der Notenlinien und die Anzahl der +Notenlinien kann gleichzeitig definiert werden. Wie das +folgende Beispiel zeigt, werden Notenpositionen nicht +durch die Position der Notenlinien verändert: + +@warning{Die @code{'line-positions}-Eigenschaft +verändert die @code{'line-count}-Eigenschaft. Die +Anzahl der Notenlinien wird implizit definiert durch +die Anzahl der Elemente in der Liste der Werte von +@code{'line-positions}.} + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) +} +{ a4 e' f b | d1 } +@end lilypond + +Die Breite eines Notensystems kann verändert werden. Die Einheit +ist in Notenlinienabständen. Die Abstände von Objekten +in diesem Notensystem wird durch diese Einstellung nicht +beeinflusst. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'width = #23 +} +{ a4 e' f b | d1 } +@end lilypond + + +@node Strecker +@subsection Strecker +@translationof Spanners + +Viele Objekte der Musiknotation erstrecken sich über mehrere +Objekte oder gar mehrere Takte. Beispiele hierfür sind etwa +Bögen, Balken, Triolenklammern, Volta-Klamern in Wiederholungen, +Crescendo, Triller und Glissando. Derartige Objekte werden +als @qq{Strecker} bezeichnet. Sie haben spezielle Eigenschaften, +mit welchen ihre Eigenschaften und ihr Verhalten beeinflusst +werden kann. Einige dieser Eigenschaften gelten für alle +Strecker, andere beschränken sich auf eine Untergruppe der +Strecker. + +Alle Strecker unterstützen das @code{spanner-interface} +(Strecker-Schnittstelle). +Ein paar, insbesondere die, die zwischen zwei Objekten eine +gerade Linie ziehen, unterstützen auch das +@code{line-spanner-interface} (Strecker-Linienschnittstelle). + + +@unnumberedsubsubsec Das @code{spanner-interface} benutzen + +Diese Schnittstelle stellt zwei Eigenschaften zur Verfügung, +die sich auf mehrere Strecker auswirken: + +@strong{@i{Die @code{minimum-length}-Eigenschaft}} + +Die Mindestlänge eines Streckers wird durch die +@code{minimum-length}-Eigenschaft definiert. Wenn diese +Eigenschaft vergrößert wird, muss in den meisten Fällen +auch der Abstand der Noten zwischen den zwei Endpunkten +eines Streckers verändert werden. Eine Veränderung dieser +Eigenschaft hat jedoch auf die meisten Strecker keine Auswirkung, +weil ihre Länge aus anderen Berechnungen hervorgeht. +Einige Beispiele, wo die Eigenschaft benutzt wird, sind +unten dargestellt. + +@lilypond[verbatim,quote,relative=2] +a~a +a +% increase the length of the tie +-\tweak #'minimum-length #5 +~a +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a1 +\compressFullBarRests +R1*23 +% increase the length of the rest bar +\once \override MultiMeasureRest #'minimum-length = #20 +R1*23 +a1 +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a \< a a a \! +% increase the length of the hairpin +\override Hairpin #'minimum-length = #20 +a \< a a a \! +@end lilypond + +Diese Veränderung kann auch eingesetzt werden, um die Länge +von Legato- und Phrasierungsbögen zu verändern: + +@lilypond[verbatim,quote,relative=2] +a( a) +a +-\tweak #'minimum-length #5 +( a) + +a\( a\) +a +-\tweak #'minimum-length #5 +\( a\) +@end lilypond + +Im Falle einiger Layoutobjekte wirkt sich die +@code{minimum-length}-Eigenschaft erst dann aus, wenn die +@code{set-spacing-rods}-Prozedur explizit aufgerufen wird. +Um das zu tun, sollte die @code{springs-and-rods}-Eigenschaft +auf @code{ly:spanner::set-spacing-rods} gesetzt werden. Die +Mindestlänge eines Glissandos etwa wird erst aktiv, wenn +die @code{springs-and-rods}-Eigenschaft gesetzt ist: + +@lilypond[verbatim,quote,relative=1] +% default +e \glissando c' + +% not effective alone +\once \override Glissando #'minimum-length = #20 +e, \glissando c' + +% effective only when both overrides are present +\once \override Glissando #'minimum-length = #20 +\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods +e, \glissando c' +@end lilypond + +Das gilt auch für das @code{Beam}-(Balken-)Objekt: + +@lilypond[verbatim,quote,relative=1] +% not effective alone +\once \override Beam #'minimum-length = #20 +e8 e e e + +% effective only when both overrides are present +\once \override Beam #'minimum-length = #20 +\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods +e8 e e e +@end lilypond + +@strong{@i{Die @code{to-barline}-Eigenschaft}} + +Die zweite nützliche Eigenschaft des @code{spanner-interface} ist +@code{to-barline} (bis zum Taktstrich). In den Standardeinstellungen +ist diese Eigenschaft auf @qq{wahr} gesetzt, was bedeutet, dass +ein Strecker, etwa eine Crescendo-Klammer, der an der ersten Noten +eines Taktes beendet wird, sich nur bis zum vorhergehenden +Taktstrich erstreckt. Wenn die Eigenschaft auf @qq{falsch} gesetzt +wird, erstrecken sich die Strecker entsprechend über die Taktlinie +hinüber und enden erst an der entsprechenden Note: + +@lilypond[verbatim,quote,relative=2] +a \< a a a a \! a a a \break +\override Hairpin #'to-barline = ##f +a \< a a a a \! a a a +@end lilypond + +Diese Eigenschaft wirkt sich nicht auf alle Strecker aus. Im Falle +von Legato- oder Phrasierungsbögen etwa hat diese Eigenschaft +keinen Effekt. Das gilt auch für alle anderen Streckern, bei +denen es nicht sinnvoll währe, sie an einer Taktlinie abzuschließen. + + +@unnumberedsubsubsec Das @code{line-spanner-interface} benutzen + +Objekte, die das @code{line-spanner-interface} unterstützen, +sind unter Anderem: + +@itemize +@item @code{DynamicTextSpanner} +@item @code{Glissando} +@item @code{TextSpanner} +@item @code{TrillSpanner} +@item @code{VoiceFollower} +@end itemize + +Die Routine, die das Setzen der Matrizen dieser Strecker +hervorruft, ist @code{ly:line-interface::print}. Diese +Routine bestimmt die exakte Position der zwei Endpunkte +und zeichnet eine Linie zwischen ihnen, in dem erforderlichen +Stil. Die Position der zwei Endpunkte des Streckers wird +in Echtzeit errechnet, aber es ist möglich, ihre +Y-Koordinaten zu verändern. Die Eigenschaften, die angegeben +werden müssen, sind zwei Ebenen in der Objekthierarchie +tiefer angeordnet, aber die Syntax des @code{\override}-Befehls +ist ziemlich einfach: + +@lilypond[relative=2,quote,verbatim] +e2 \glissando b +\once \override Glissando #'(bound-details left Y) = #3 +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando b +@end lilypond + +Die Einheiten für die @code{Y}-Eigenschaft werden in +Notenlinienabständen angegeben, wobei die Mittellinie des +Notensystems die Null darstellt. Für das Glissando ist +der Wert von @code{Y} am entsprechenden X-Koordinatenpunkt +entsprechend dem Mittelpunkt des Notenkopfes, wenn die +Linie bis in die Noten hinein weitergeführt werden würde. + +Wenn @code{Y} nicht gesetzt wird, wird der Wert aus der +vertikalen Position des entsprechenden Anknüpfpunkts des +Streckers errechnet. + +Im Fall eines Zeilenumbruchs werden die Werte der Endpunkte +in den Unterlisten @code{left-broken} bzw. @code{right-broken} +von @code{bound-details} abgelegt. Zum Beispiel: + +@lilypond[relative=2,ragged-right,verbatim,quote] +\override Glissando #'breakable = ##t +\override Glissando #'(bound-details right-broken Y) = #-3 +c1 \glissando \break +f1 +@end lilypond + +Eine Anzahl weitere Eigenschaft der @code{left}- und +@code{right}-Unterlisten der @code{bound-details}-Eigenschaft +kann auf gleiche Weise wie @code{Y} verändert werden: + +@table @code +@item Y +Hiermit wird der Y-Koordinationspunkt des Endpunktes in +Notenlinienabständen vom Mittelpunkt des Notensystems +ausgehend angegeben. Der Endpunkt ist normalerweise +der Mittelpunkt des Elternobjektes, sodass Glissandos +vertikal auf den Mittelpunkt eines Notenkopfes weist. + +Für horizontale Strecker, wie Textstrecker und Trillerstrecker +ist sein Wert mit 0 definiert. + +@item attach-dir +Das entscheidet, wo die Linie auf der X-Achse beginnt und endet, +relativ zum Elternobjekt. Ein Wert @code{-1} (oder +@code{LEFT}) lässt die Linie an der linken Seite der Noten +beginnen/enden, mit der sie verknüpft ist. + +@item X +Das ist der absolute X-Koordinatenpunkt des Endpunktes. Der +Wert wird normalerweise in Echtzeit errechnet, und ihn zu +verändern ist normalerweise nicht nützlich. + +@item stencil +Linienstrecker können Symbole am Ende oder zu Anfang des +Streckers haben, die in dieser Untereigenschaft definiert +werden. Die Eigenschaft ist für interne Benutzung, es +wird empfohlen, die Eigenschaft @code{text} zu benutzen. + +@item text +Das ist eine Textbeschriftung, die ausgewertet wird und die +@code{stencil}-Eigenschaft überschreibt. Sie wird eingesetzt, +um @i{cresc.}, @i{tr} oder andere Texte an horizontale +Strecker zu setzen. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +c2\startTextSpan b c a\stopTextSpan +@end lilypond + +@item stencil-align-dir-y +@item stencil-offset +Wenn keine dieser beiden Eigenschaften gesetzt wird, wird +die Matrize (engl. stencil) einfach am Endpunkt des Streckers, +auf seiner Mittellinie (wie durch @code{X} und @code{Y} +definiert) zentriert, ausgegeben. Wenn entweder +@code{stencil-align-dir-y} oder @code{stencil-offset} +gesetzt werden, wird das Symbol am Rand vertikal entsprechend +des Endpunktes der Linie verschoben: + +@lilypond[relative=1,quote,verbatim] +\override TextSpanner + #'(bound-details left stencil-align-dir-y) = #-2 +\override TextSpanner + #'(bound-details right stencil-align-dir-y) = #UP + +\override TextSpanner + #'(bound-details left text) = #"ggg" +\override TextSpanner + #'(bound-details right text) = #"hhh" +c4^\startTextSpan c c c \stopTextSpan +@end lilypond + +Dabei sollte beachtet werden, dass negative Werte das Objekt +nach @emph{oben} verschieben, anders als man erwarten könnte, +weil der Wert @code{-1} oder @code{DOWN} bedeutet, dass +die @emph{Unterkante} des Textes mit der Streckerlinie +ausgerichtet wird. Ein Wert @code{1} oder @code{UP} +richtet die Oberkante des Textes mit der Streckerlinie aus. + +@item arrow +Wenn diese Untereigenschaft auf @code{#t} gesetzt wird, +wird ein Pfeilkopf am Ende der Linie erstellt. + +@item padding +Diese Eigenschaft kontrolliert den Abstand zwischen +dem angegebenen Endpunkt der Linie und dem wirklichen Ende. +Ohne Füllung (engl. padding) würde ein Glissando in der +Mitte eines Notenkopfes beginnen und enden. + +@end table + +Die musikalische Funktion @code{\endSpanners} beschließt +den Strecker, der an der direkt folgenden Note beginnt, +bevor er eigentlich zu ende wäre. Er wird exakt nach +einer Note beendet, oder am nächsten Taktstrich, wenn +@code{to-barline} auf wahr gesetzt ist und eine Taktlinie +vor der nächsten Note erscheint. + +@lilypond[verbatim,quote,ragged-right,relative=2] +\endSpanners +c2 \startTextSpan c2 c2 +\endSpanners +c2 \< c2 c2 +@end lilypond + +Wenn man @code{\endSpanners} benutzt, ist es nicht +nötig, den Befehl \startTextSpan mit \stopTextSpan +zu beenden, und es ist auch nicht nötig, Crescendo-Klammern +mit @code{\!} zu beenden. + + +@seealso +Referenz der Interna: +@rinternals{TextSpanner}, +@rinternals{Glissando}, +@rinternals{VoiceFollower}, +@rinternals{TrillSpanner}, +@rinternals{line-spanner-interface}. + + +@node Sichtbarkeit von Objekten +@subsection Sichtbarkeit von Objekten +@translationof Visibility of objects + +@cindex Objekte, Sichtbarkeit +@cindex Grobs, Sichtbarkeit +@cindex Sichtbarkeit von Objekten + +Die Sichtbarkeit von Layout-Objekten kann auf vier Arten +kontrolliert werden: Ihre Matrizen (engl stencil) können +entfernt werden, sie können unsichtbar gemacht werden, +sie können weiß eingefärbt werden und ihre +@code{break-visibility}-Eigenschaft kann verändert werden. +Die ersten drei Möglichkeiten beziehen sich auf alle +Layout-Objekte, die letzte nur auf einige wenige, nämlich +die @emph{zerteilbaren} Objekte. Das Handbuch zum Lernen +führt in alle vier Möglichkeiten ein, siehe +@rlearning{Sichtbarkeit und Farbe von Objekten}. + +Es gibt auch einige weitere Techniken, die sich nur auf +bestimmte Layout-Objekte beziehen. Sie werden im letzten +Abschnitt behandelt. + +@menu +* Einen stencil entfernen:: +* Objekten unsichtbar machen:: +* Objekte weiß malen:: +* break-visibility (unsichtbar machen) benutzen:: +* Besonderheiten:: +@end menu + + +@node Einen stencil entfernen +@unnumberedsubsubsec Einen @code{stencil} entfernen +@translationof Removing the stencil + +@cindex stencil, entfernen +@cindex Matrize, entfernen +@cindex Stempel (stencil), entfernen +@cindex Entfernen eines Stencil + +Jedes Layout-Objekt hat eine Matrizen-(stencil)-Eigenschaft. +Sie ist normalerweise definiert als die Funktion, die das +entsprechende Objekt zeichnet. Wenn die Eigenschaft mit +@code{\override} auf @code{#f} gesetzt wird, wird keine +Funktion aufgerufen und also auch kein Objekt gezeichnet. +Das Standardverhalten kann mit dem Befehl @code{\revert} +wieder hergestellt werden. + +@lilypond[quote,verbatim,relative=1] +a1 a +\override Score.BarLine #'stencil = ##f +a a +\revert Score.BarLine #'stencil +a a a +@end lilypond + + +@node Objekten unsichtbar machen +@unnumberedsubsubsec Objekten unsichtbar machen +@translationof Making objects transparent + +@cindex transparent, Objekte +@cindex unsichtbar, Objekte +@cindex durchsichtig, Objekte + +Jedes Layout-Objekt hat eine Durchsichtigkeits-Eigenschaft +(@code{'transparent}), +die normalerweise auf den Wert @code{#f} gesetzt ist. Wenn +sie auf @code{#t} gesetzt wird, nimmt das Objekt immer noch +den entsprechenden Platz ein, ist aber unsichtbar. + +@lilypond[quote,verbatim,relative=2] +a4 a +\once \override NoteHead #'transparent = ##t +a a +@end lilypond + + +@node Objekte weiß malen +@unnumberedsubsubsec Objekte weiß malen +@translationof Painting objects white + +@cindex Objekte, einfärben +@cindex Färben von Objekten +@cindex Einfärben von Objekten +@cindex Ebenen (layer) +@cindex layer (Ebenen) +@cindex Druckreihenfolge +@cindex Objekte verändern +@cindex verändern von Objekten +@cindex Grobs, verändern + +Alle Layout-Objekte haben eine Farb-(color)-Eigenschaft, die +normalerweise schwarz (@code{black}) definiert ist. Wenn +sie nach weiß (@code{white}) verändert wird, kann man das +Objekt nicht mehr vom weißen Hintergrund unterscheiden. +Wenn das Objekt jedoch andere Objekte überschneidet, wird +die Farbe der Überschneidungen von der Reihenfolge entschieden, +in welcher die Objekte gesetzt werden. Es kann also vorkommen, +dass man die Umrisse des weißen Objektes erahnen kann, wie +in diesem Beispiel: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +a1 +@end lilypond + +Das kann man vermeiden, indem man die Satzreihenfolge der Objekte +verändert. Alle Layout-Objekte haben eine @code{layer}-Eigenschaft, +die auf eine ganze Zahl gesetzt sein muss. Objekte mit der +niedrigsten Zahl in der @code{layer}-Eigenschaft werden zuerst +gesetzt, dann die nächsten Objekte in ansteigender Ordnung. Objekte +mit höheren Werten überschneiden also Objekte mit niedrigeren +Werten. Die meisten Objekte bekommen den Wert @code{1} zugewiesen, +einige wenige Objekte, unter die auch @code{StaffSymbol} (die +Notenlinien) gehört, jedoch den Wert @code{0}. Die Reihenfolge, +in der Objekte mit demselben Wert gesetzt werden, ist nicht +definiert. + +Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von +@code{1} für @code{layer} hat, nach den Notenlinien gesetzt +(die einen Wert von @code{0} für @code{layer} haben) und +überschneidet sie also. Um das zu ändern, muss dem @code{Clef}-Objekt +(Notenschlüssel) ein niedrigerer Wert, etwa @code{-1}, gegeben +werden, sodass es früher gesetzt wird: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +\override Staff.Clef #'layer = #-1 +a1 +@end lilypond + + +@node break-visibility (unsichtbar machen) benutzen +@unnumberedsubsubsec @code{break-visibility} (unsichtbar machen) benutzen +@translationof Using break-visibility + +@funindex break-visibility + +@cindex break-visibility + +Die meisten Layout-Objekte werden nur einmal gesetzt, aber +einige, wie Taktstriche, Schlüssel, Taktartbezeichnung und +Tonartvorzeichen, müssen mehrmals gesetzt werden, wenn +die Zeile gewechselt wird: einmal am Ende des oberen Systems +und ein zweites Mal zu Beginn des nächsten Systems. +Derartige Objekte werden als @emph{trennbar} bezeichnet +und haben eine Eigenschaft, die @code{break-visibility}-Eigenschaft, +mit der ihre Sichtbarkeit an allen drei Positionen, an denen +sie auftreten können, kontrolliert werden kann: zu Beginn +einer Zeile, innerhalb einer Zeile, wenn sie verändert werden, +und am Ende einer Zeile, wenn die Änderung hier stattfindet. + +Die Taktart wird beispielsweise standardmäßig nur zu Beginn des +ersten Systems gesetzt, aber an anderen Stellen nur, wenn sie +sich ändert. Wenn diese Änderung am Ende eines Systems auftritt, +wird die neue Taktart am Ende des aktuellen Systems als auch +zu Beginn des nächsten Systems gesetzt. + +Dieses Verhalten wird von der @code{break-visibility}-Eigenschaft +kontrolliert, die erklärt wird in +@c Leave this ref on a newline - formats incorrectly otherwise -td +@rlearning{Sichtbarkeit und Farbe von Objekten}. Die Eigenschaft +braucht einen Vektor von drei Booleschen Werten, die in ihrer +Reihenfolge bestimmte, ob das Objekt a) zu Ende der Zeile, +b) innerhalb einer Zeile oder c) zu Beginn einer Zeile gesetzt +wird. Oder, genauer gesagt, vor einem Zeilenumbruch, an Stellen, +wo kein Zeilenumbruch auftritt oder nach einem Zeilenumbruch. + +Die acht möglichen Kombinationen können auch durch vordefinierte +Funktionen bestimmt werden, welche in der Datei @file{scm/output-lib.scm} +definiert sind. Die letzten drei Spalten der folgenden Tabelle +zeigen an, ob das Layout-Objekt an einer bestimmten Position +sichtbar sein wird oder nicht: + +@multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {ja} {ja} {ja} +@headitem Funktion @tab Vektor @tab Vor @tab kein @tab Nach +@headitem Form @tab Form @tab Umbruch @tab Umbruch @tab Umbruch + +@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab ja @tab ja @tab ja +@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab nein @tab nein @tab ja +@item @code{center-visible} @tab @code{'#(#f #t #f)} @tab nein @tab ja @tab nein +@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab ja @tab nein @tab nein +@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab ja @tab ja @tab nein +@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab ja @tab nein @tab ja +@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab nein @tab ja @tab ja +@item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab nein @tab nein @tab nein +@end multitable + +Die Standardeinstellungen von @code{break-visibility} hängen vom +Layout-Objekt ab. Die folgende Tabelle zeigt alle wichtigen Layout-Objekte, +die mit @code{break-visibility} verändert werden können und die +jeweiligen Standardeinstellungen der Eigenschaft: + +@multitable @columnfractions .3 .3 .4 + +@headitem Layout-Objekt @tab Normaler Kontext @tab Standardeinstellung + +@c omit Ambitus as it appears not to be affected by break-visibility -td +@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} +@item @code{BarLine} (Taktstrich) @tab @code{Score} @tab calculated +@item @code{BarNumber} (Taktzahl) @tab @code{Score} @tab @code{begin-of-line-visible} +@c omit the following item until it can be explained -td +@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated +@item @code{BreathingSign} (Atemzeichen) @tab @code{Voice} @tab @code{begin-of-line-invisible} +@item @code{Clef} (Schlüssel) @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} +@item @code{DoublePercentRepeat} (Doppel-Prozent-Wiederholung @tab @code{Voice} @tab @code{begin-of-line-invisible} +@c omit KeyCancellation until it can be explained -td +@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} +@item @code{KeySignature} (Tonart) @tab @code{Staff} @tab @code{begin-of-line-visible} +@c omit LeftEdge until it can be explained -td +@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} +@item @code{OctavateEight} (Oktavierungs-Acht) @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{RehearsalMark} (Übungszeichen) @tab @code{Score} @tab @code{end-of-line-invisible} +@item @code{TimeSignature} (Taktart) @tab @code{Staff} @tab @code{all-visible} + +@end multitable + +Das Beispiel unten zeigt die Verwendung der Vektor-Form um die +Sichtbarkeit von Taktlinien zu bestimmten: + +@lilypond[quote,verbatim,relative=1,ragged-right] +f4 g a b +f4 g a b +% Remove bar line at the end of the current line +\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) +\break +f4 g a b +f4 g a b +@end lilypond + +Obwohl alle drei Bestandteile des Vektors, mit denen +@code{break-visibility} definiert wird, vorhanden sein +müssen, haben nicht alle eine Auswirkung auf jedes +Layout-Objekt, und einige Kombinationen können sogar +Fehler hervorrufen. Es gelten die folgenden Einschränkungen: + +@itemize @bullet +@item +Taktstriche können nicht zu Beginn einer Zeile gesetzt werden. + +@item +Eine Taktzahl kann nicht zu Beginn der ersten Zeile gesetzt +werden, außer wenn er nicht 1 ist. + +@item +Schlüssel -- siehe unten. + +@item +Doppel-Prozent-Wiederholungen werden entweder alle ausgegeben +oder alle unterdrückt. Mit @code{begin-of-line-invisible} werden +sie ausgegeben, mit @code{all-invisible} unterdrückt. + +@item +Tonart -- siehe unten. + +@item +Oktavierungs-Acht -- siehe unten. + +@end itemize + + +@node Besonderheiten +@unnumberedsubsubsec Besonderheiten +@translationof Special considerations + +@strong{@emph{Sichtbarkeit nach expliziten Änderungen}} + +@cindex Tonart, Sichtbarkeit nach expliziter Änderung +@cindex Schlüssel, Sichtbarkeit nach expliziter Änderung + +@funindex explicitKeySignatureVisibility +@funindex explicitClefVisibility + +Die @code{break-visibility}-Eigenschaft kontrolliert die Sichtbarkeit +von Tonarten und Schlüsseländerungen nur zu Beginn einer Zeile, +d.h. nach einem Zeilenumbruch. Sie hat keinen Einfluss auf die +Sichtbarkeit von Tonarten bzw. Schlüsseln, die nach einer +expliziten Tonart- oder Schlüsseländerung in oder am Ende einer +Zeile angezeigt werden. Im nächsten Beispiel ist die Tonartangabe +nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl +@code{all-invisible} eingesetzt wurde: + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +% Try to remove all key signatures +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b +\break +f4 g a b +f4 g a b +@end lilypond + +Die Sichtbarkeit derartiger expliziter Tonart- und Schlüsseländerungen +wird von den @code{explicitKeySignatureVisibility}- und +@code{explicitClefVisibility}-Eigenschaften kontrolliert. Sie +entsprechen der @code{break-visibility}-Eigenschaft und beide +brauchen drei Boolesche Werte bzw. die oben aufgelisteten vordefinierten +Funktionen als Argument, genau wie @code{break-visibility}. +Beide sind Eigenschaft des @code{Staff}-Kontextes, nicht der +Layout-Objekte selber, weshalb sie mit dem Befehl @code{\set} +eingesetzt werden. Beide sind standardmäßig auf die Funktion +@code{all-visible} gesetzt. Diese Eigenschaften kontrollieren nur +die Sichtbarkeit von Tonarten bzw. Schlüssel, die von expliziten +Änderungen herrühren, und haben keinen Einfluss auf Tonarten und +Schlüssel zu Beginn einer Zeile -- um diese zu beeinflussen, muss +@code{break-visibility} benutzt werden. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +@strong{@emph{Sichtbarkeit von erinnernden Versetzungszeichen}} + +Um erinnernde Versetzungszeichen zu entfernen, die nach einer +expliziten Tonartänderung auftreten, muss die @code{Staff}-Eigenschaft +@code{printKeyCancellation} auf @code{#f} gesetzt werden: + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.printKeyCancellation = ##f +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen +vor den Noten übrig um den Wechsel der Tonart anzuzeigen. + +@strong{@emph{Automatische Takte}} + +@funindex automaticBars + +@cindex Taktstriche, unterdrücken + +Ein Sonderfall sind die automatischen Taktstriche, die mit der +Eigenschaft @code{automaticBars} im @code{Score}-Kontext +ausgeschaltet werden können. Wenn sie auf @code{#f} gesetzt +ist, werden Taktstrich nicht automatisch ausgegeben sondern +müssen explizit mit dem @code{\bar}-Befehl eingegeben werden. +Anders als bei dem @code{\cadenzaOn}-Befehl werden die Takte +allerdings immer noch gezählt. Takterstellung wird später +wieder mit diesem Zahl aufgenommen, wenn die Eigenschaft +wieder auf @code{#t} gesetzt wird. Wenn sie den Wert @code{#f} +hat, können Zeilenumbrüche nur an expliziten @code{\bar}-Befehlen +auftreten. + +@c TODO Add example + +@strong{@emph{Oktavierte Schlüssel}} + +@cindex oktavierte Schlüssel, Sichtbarkeit +@cindex Sichtbarkeit von oktavierten Schlüsseln +@cindex Schlüssel, Sichtbarkeit der Oktavierung + +Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln +wird durch das @code{OctavateEight}-Layout-Objekt erstellt. +Seine Sichtbarkeit wird automatisch vom @code{Clef}-Objekt +geerbt, sodass Veränderungen von @code{break-visibility} +des @code{OctavateEight}-Layout-Objekts nicht auch noch +für unsichtbare Schlüssel zusätzlich vorgenommen werden müssen. + +Bei expliziten Schlüsseländerungn kontrolliert die +@code{explicitClefVisibility}-Eigenschaft wohl das +Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol. + +@seealso +Handbuch zum Lernen: +@rlearning{Sichtbarkeit und Farbe von Objekten} + + +@node Linienstile +@subsection Linienstile +@translationof Line styles + +Einige Aufführungsanweisungen (z. B. @i{rallentando} und +@i{accelerando} oder Triller werden als Text gesetzt und +möglicherweise über mehrere Takte mit Linien fortgeführt, +die teilweise gestrichelt oder gewellt sind. + +Alle benutzen die gleichen Routinen wie das Glissando, +um Text und Linien zu produzieren, weshalb auch eine +Veränderungen der Erscheinung auf gleiche Weise vonstatten +geht. Die Ausgabe erfolgt durch einen Strecker (engl. spanner), und +die Routine, die ihn setzt, heißt @code{ly:line-interface::print}. +Diese Routine bestimmt die exakte Position von zwei +@i{Strecker-Punkten} und zeichnet eine Linie zwischen sie +im gewünschten Linienstil. + +Hier einige Beispiele, welche Linienstile möglich sind +und wie sie verändert werden können: + +@lilypond[relative=2,ragged-right,verbatim,quote] +d2 \glissando d'2 +\once \override Glissando #'style = #'dashed-line +d,2 \glissando d'2 +\override Glissando #'style = #'dotted-line +d,2 \glissando d'2 +\override Glissando #'style = #'zigzag +d,2 \glissando d'2 +\override Glissando #'style = #'trill +d,2 \glissando d'2 +@end lilypond + +Die Position der Endpunkte des Streckers werden in +Realzeit für jedes graphische Objekt errechnet, aber +es ist möglich, sie manuell vorzugeben: + +@c TODO Complete +@lilypond[relative=2,ragged-right,verbatim,quote] +e2 \glissando f +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando f +@end lilypond + +Der Wert von @code{Y} wird für den rechten Endpunkt auf +@code{-2} gesetzt. Die linke Seite kann ähnlich angepasst +werden, indem man @code{left} anstelle von @code{right} angibt. + +Wenn @code{Y} nicht gesetzt ist, wird der Wert ausgehend von +der vertikalen Position der linken und rechten Anbindepunkte +des Streckers errechnet. + +Andere Anpassungen der Strecker sind auch möglich, für Einzelheiten +siehe @ref{Strecker}. + + +@node Drehen von Objekten +@subsection Drehen von Objekten +@translationof Rotating objects + +Layout-Objekte und Textbeschriftungselemente können zu einem +beliebigen Winkel um einen beliebigen Punkt herum gedreht +werden, aber die Methode, mit der die Änderung vorgenommen +werden muss, unterscheidet sich je nach Objekt. + +@menu +* Drehen von Objekten:: +* Textbeschriftung drehen:: +@end menu + +@node Drehen von Objekten +@unnumberedsubsubsec Drehen von Objekten +@translationof Rotating layout objects + +@cindex Drehen von Objekten +@cindex Objekte, Drehen + +Alle Layout-Objekte, die das @code{grob-interface} unterstützen, +können gedreht werden, indem man ihre @code{rotation}-Eigenschaft +einstellt. Sie erhält eine Liste mit drei Einträgen: den +Winkel der Drehung gegen den Uhrzeiger sowie die X- und +Y-Koordinaten des Punktes relativ zum Referenzpunkt des Objekts, +um welchen herum die Drehung stattfinden soll. Der Winkel +der Drehung wird in Grad angegeben, die Koordinaten in +Notenlinienzwischenräumen. + +Der Winkel der Drehung und die Koordinaten des Drehpunktes müssen +durch Ausprobieren herausgefunden werden. + +@cindex Crescendoklammern, gedreht +@cindex gedrehte Crescendoklammern +@cindex schräge Crescendoklammern +@cindex Klammern, Crescendo, schräg + +Es gibt nur wenige Situationen, in welchen die Drehung eines +Layout-Objektes sinnvoll ist. Das folgende Beispiel zeigt +eine sinnvolle Anwendung: + +@lilypond[quote,verbatim,relative=1] +g4\< e' d' f\! +\override Hairpin #'rotation = #'(20 -1 0) +g,,4\< e' d' f\! +@end lilypond + + +@node Textbeschriftung drehen +@unnumberedsubsubsec Textbeschriftung drehen +@translationof Rotating markup + +Jede Textbeschriftung kann gedreht werden, indem vor die Anweisung +der Befehl @code{\rotate} gesetzt wird. Der Befehl hat zwei +Argumente: Den Winkel der Drehung in Grad gegen den Uhrzeiger und +der Text, der gedreht dargestllt werden soll. Die Ausdehnung des +Textes wird nicht gedreht, sie erhält ihren Wert von den Extrempunkten +der x- und y-Koordinaten des gedrehten Textes. Im folgenden +Beispiel wird die @code{outside-staff-priority}-Eigenschaft auf +@code{#f} gesetzt, damit automatische Zusammenstöße nicht verhindert +werden, wodurch andernfalls einige der Texte zu hoch geschoben werden +würden. + +@lilypond[quote,verbatim,relative=1] +\override TextScript #'outside-staff-priority = ##f +g4^\markup { \rotate #30 "a G" } +b^\markup { \rotate #30 "a B" } +des^\markup { \rotate #30 "a D-Flat" } +fis^\markup { \rotate #30 "an F-Sharp" } +@end lilypond + + +@node Fortgeschrittene Optimierungen +@section Fortgeschrittene Optimierungen +@translationof Advanced tweaks + +Dieser Abschnitt behandelt verschiedene Möglichkeiten, das +Aussehen des Notenbildes zu polieren. + +@menu +* Objekte ausrichten:: +* Vertikale Gruppierung der grafischen Objekte („grob“s):: +* stencils verändern:: +* Formen verändern:: +@end menu + + +@seealso +Handbuch zum Lernen: +@rlearning{Die Ausgabe verändern}, +@rlearning{Mehr Information}. + +Notationsreferenz: +@ref{Die Referenz der Programminterna erklärt}, +@ref{Eigenschaften verändern}, +@ref{Schnittstellen für Programmierer}. + +Installierte Dateien: +@file{scm/define-grobs.scm}. + +Schnipsel: +@rlsr{Tweaks and overrides}. + +Referenz der Interna: +@rinternals{All layout objects}. + + +@node Objekte ausrichten +@subsection Objekte ausrichten +@translationof Aligning objects + +Graphische Objekte, die das @code{self-alignment-interface} und/obder +das @code{side-position-interface} unterstützen, können an einem +vorher gesetzten Objekt auf verschiedene Weise ausgerichtet werden. +Eine Liste derartiger Objekte findet sich in +@rinternals{self-alignment-interface} und @rinternals{side-position-interface}. + +Alle graphischen Objekte haben einen Referenzpunkt, eine horizontale +Ausdehnung und eine vertikale Ausdehnung. Die horizontale Ausdehnung ist +ein Zahlenpaar, mit dem die Verschiebung der rechten und linken Ecken +ausgehend vom Referenzpunkt angegeben werden, wobei Verschiebungen +nach links mit negativen Zahlen notiert werden. Die vertikale Ausdehnung +ist ein Zahlenpaar, das die Verschiebung der unteren und oberen +Ränder vom Referenzpunkt ausgehend angibt, wobei Verschiebungen nach +unten mit negativen Zahlen notiert werden. + +Die Position eines Objektes auf dem Notensystem wird mit Werten +von @code{X-offset} und @code{Y-offset} angegeben. Der Wert von +@code{X-offset} gibt die Verschiebung von der X-Koordinate des +Referenzpunkts des Elternobjektes an, der Wert von @code{Y-offset} +die Verschiebung ausgehend von der Mittellinie des Notensystemes. +Die Werte von @code{X-offset} und @code{Y-offset} können direkt +bestimmt werden oder durch Prozeduren errechnet werden, sodass +eine Ausrichtung mit dem Elternobjekt erreicht werden kann. + +@warning{Viele Objekte brauchen besondere Überlegungen zu ihrer +Position, weshalb in manchen Fällen manuell gesetzte Werte von +@code{X-offset} oder @code{Y-offset} ignoriert oder verändert +werden können, obwohl das Objekt das +@code{self-alignment-interface} unterstützt. Wenn man @code{X-offset} +oder @code{Y-offset} auf einen festen Wert setzt, wird die entsprechende +@code{self-alignment}-Eigenschaft ignoriert.} + +Ein Versetzungszeichen beispielsweise kann vertikal durch Veränderung +von @code{Y-offset} verschoben werden, aber Änderungen von +@code{X-offset} haben keine Auswirkung. + +Übungszeichen können an trennbaren Objekten (wie Taktstrichen, +Schlüsseln, Taktarten und Tonartvorzeichen) ausgerichtet werden. +In @code{break-aligned-interface} finden sich besondere Eigenschaften, +mit denen Übungszeichen an derartigen Objekten ausgerichtet werden können. + +@seealso + +Notationshandbuch: +@ref{Benutzung des break-alignable-interface}. + +Erweitern: +@rextend{Callback functions}. + + +@menu +* X-offset und Y-offset direkt setzen:: +* Das side-position-interface benutzen:: +* Das self-alignment-interface benutzen:: +* Benutzung des break-alignable-interface:: +@end menu + +@node X-offset und Y-offset direkt setzen +@unnumberedsubsubsec @code{X-offset} und @code{Y-offset} direkt setzen +@translationof Setting X-offset and Y-offset directly + +Numerische Werte können den @code{X-offset}- und @code{Y-offset}-Eigenschaften +vieler Objekte zugewiesen werden. Das folgende Beispiel zeigt +drei Noten mit der Standardposition von Fingersatzanweisungen +und die Positionen, wenn @code{X-offset} und @code{Y-offset} +verändert werden. + +@lilypond[verbatim,quote,relative=2] +a-3 +a +-\tweak #'X-offset #0 +-\tweak #'Y-offset #0 +-3 +a +-\tweak #'X-offset #-1 +-\tweak #'Y-offset #1 +-3 +@end lilypond + + + +@node Das side-position-interface benutzen +@unnumberedsubsubsec Das @code{side-position-interface} benutzen +@translationof Using the side-position-interface + +Ein Objekt, das die @code{side-position-interface}-Schnittstelle +unterstützt, kann neben sein Elternobjekt gesetzt werden, +sodass zwei definierte Enden der Objekte sich berühren. +Das Objekt kann über, unter, rechts oder links vom +Ursprungsobjekt positioniert werden. Das Ursprungsobjekt +kann nicht definiert werden: es ergibt sich aus der Reihenfolge +der Objekte in der Eingabe. Die meisten Objekte haben +einen Notenkopf als Ursprung assoziiert. + +Die Werte von @code{side-axis} und @code{direction} bestimmen, +wo das Objekt platziert werden soll, wie in der Tabelle +zu sehen: + +@c TODO add an example of each to the table + +@multitable @columnfractions .3 .3 .3 +@headitem @code{side-axis}- @tab @code{direction}- @tab +@headitem Eigenschaft @tab Eigenschaft @tab Platzierung + +@item @code{0} @tab @code{-1} @tab links +@item @code{0} @tab @code{1} @tab rechts +@item @code{1} @tab @code{-1} @tab unten +@item @code{1} @tab @code{1} @tab oben + +@end multitable + +Wenn @code{side-axis} gleich @code{0} ist, sollte @code{X-offset} +auf die Prozedur @code{ly:side-position-interface::x-aligned-side} +gesetzt werden. Diese Prozedur errechnet den richtigen Wert für +@code{X-offset}, sodass das Objekt auf der rechten oder linken +Seite des Ursprungs angeordnet wird, entsprechend dem Wert +der @code{direction}-Eigenschaft. + +Wenn @code{side-axis} gleich @code{1} ist, sollte @code{Y-offset} +auf die Prozedur @code{ly:side-position-interface::y-aligned-side} +gesetzt werden. Diese Prozedur errechnet den richtigen Wert für +@code{Y-offset}, sodass das Objekt über oder unter dem Ursprungsobjekt +angeordnet wird, entsprechend dem Wert der @code{direction}-Eigenschaft. + + + + +@node Das self-alignment-interface benutzen +@unnumberedsubsubsec Das @code{self-alignment-interface} benutzen +@translationof Using the self-alignment-interface + +@emph{Selbstausrichtende Objekte horizontal} + +Die horizontale Ausrichtung eines Objektes, das die +@code{self-alignment-interface}-(Selbstausrichtungs)-Schnittstelle +unterstützt, wird durch den Wert von @code{self-alignment-X} +kontrolliert, vorausgesetzt die Eigenschaft @code{X-offset} des +Objektes ist auf @code{ly:self-alignment-interface::x-aligned-on-self} +gesetzt. @code{self-alignment-X} kann eine beliebige reale +Zahl zugewiesen werden, in Einheiten der Hälfte der +X-Gesamtausdehnung des Objekts. Negative Werte verschieben +das Objekt nach rechts, positive nach links. Ein Wert von +@code{0} zentriert das Objekt auf dem Referenzpunkt des +Ursprungs, ein Wert von @code{-1} richtet die linke Ecke des +Objekts am Referenzpunkt des Ursprungsobjektes aus, ein +Wert von @code{1} richtet die rechte Ecke des Objektes am +Referenzpunkt des Ursprungsobjektes aus. Die Symbole +@code{LEFT}, @code{CENTER} und @code{RIGHT} können anstelle +von @code{-1, 0, 1} eingesetzt werden. + +Normalerweise würde der @code{\override}-Befehl benutzt werden, um +die Werte von @code{self-alignment-X} zu verändern, aber der +@code{\tweak}-Befehl kann benutzen, um verschiedene Anmerkungen +an einer einzigen Note auszurichten: + +@lilypond[quote,verbatim,relative=1] +a' +-\tweak #'self-alignment-X #-1 +^"left-aligned" +-\tweak #'self-alignment-X #0 +^"center-aligned" +-\tweak #'self-alignment-X #RIGHT +^"right-aligned" +-\tweak #'self-alignment-X #-2.5 +^"aligned further to the right" +@end lilypond + + +@emph{Objekte vertikal automatisch ausrichten} + +Objekte können auf ähnliche Weise auch vertikal aneinander +ausgerichtet werden, wenn ihre @code{Y-offset}-Eigenschaft +auf @code{ly:self-alignment-interface::y-aligned-on-self} +gesetzt ist. Oft greifen jedoch auch andere Mechanismen +bei der vertikalen Ausrichtung ein: Der Wert von +@code{Y-offset} ist nur eine der Variablen, die für die +Berechnung benutzt werden. Darum ist es kompliziert, den +Wert für einige Objekte richtig anzupassen. Die Einheiten +sind Halbe der vertikalen Ausdehnung des Objektes, welche +normalerweise recht klein ist, sodass ziemlich große Werte +erforderlich sein können. Der Wert @code{-1} richtet die +untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes +aus, der Wert @code{0} richtet die Mitte des Objekts am +Referenzpunkt des Ursprungsobjektes aus und der Wert @code{1} +richtet die Oberkante des Objektes am Referenzpunkt des +Ursprungsobjektes aus. Die Symbole @code{DOWN}, @code{CENTER} +und @code{UP} können anstelle von @code{-1, 0, 1} benutzt +werden. + +@emph{Automatische Ausrichtung in beide Richtungen} + +Indem sowohl @code{X-offset} als auch @code{Y-offset} eingestellt +werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet +werden. + +Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so +ausrichtet, dass sie nah am Notenkopf bleibt. + +@lilypond[quote,verbatim,relative=2] +a +-\tweak #'self-alignment-X #0.5 % move horizontally left +-\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self +-\tweak #'self-alignment-Y #-1 % move vertically up +-3 % third finger +@end lilypond + + + + +@node Benutzung des break-alignable-interface +@unnumberedsubsubsec Benutzung des @code{break-alignable-interface} +@translationof Using the break-alignable-interface + +@cindex Ausrichtung an Objekten + +@funindex break-align-symbols + +Übungszeichen und Taktzahlen können an Notationsobjekten (ausschließlich +Taktstriche) ausgerichtet werden. Zu diesen Objekten gehören +@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos}, +@code{staff-bar}, @code{left-edge}, @code{key-cancellation}, +@code{key-signature} und @code{time-signature}. + +Standardmäßig werden Übungszeichen und Taktzahlen horizontal +über dem Objekt zentriert: + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be centered above the Clef +\override Score.RehearsalMark #'break-align-symbols = #'(clef) +\key a \major +\clef treble +\mark "↓" +e1 +% The RehearsalMark will be centered above the TimeSignature +\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) +\key a \major +\clef treble +\time 3/4 +\mark "↓" +e2. +% The rehearsal mark will be centered above the Breath Mark +\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign) +\key a \major +\clef treble +\time 4/4 +e1 +\breathe +\mark "↓" +@end lilypond + +Eine Liste von möglichen Objekten zur Ausrichtung kann definiert +werden. Wenn eins dieser Objekte an der aktuellen Stelle unsichtbar +ist (etwa durch Einstellung von @code{break-visibility} oder die +expliziten Sichtbarkeitseinstellungen von Taktart und Vorzeichen), +werden Übungszeichen und Taktzahlen an dem ersten Objekt in der +Liste ausgerichtet, dass sichtbar ist. Wenn keine Objekte in der +Liste sichtbar sind, wird das Objekt am Taktstrich ausgerichtet. +Wenn der Taktstrich unsichtbar ist, wird das Objekt an der Stelle +ausgerichtet, an der sich der Taktstrich befinden würde. + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be centered above the Key Signature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef treble +\mark "↓" +e1 +% The RehearsalMark will be centered above the Clef +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef bass +\mark "↓" +gis,,1 +% The rehearsal mark will be centered above the Bar Line +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.explicitClefVisibility = #all-invisible +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef treble +\mark "↓" +e''1 + +@end lilypond + +Die Ausrichtung des Übungszeichen relativ zum Notationsobjekt kann +verändert werden, wie das nächste Beispiel zeigt. In einer Partitur +mit vielen Systemen würde man diese Einstellung für alle Systeme +vornehmen. + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be centered above the KeySignature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\key a \major +\clef treble +\time 4/4 +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the KeySignature +\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT +\mark "↓" +\key a \major +e1 +% The RehearsalMark will be aligned with the right edge of the KeySignature +\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT +\key a \major +\mark "↓" +e1 +@end lilypond + +Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert +verschoben werden. Die Einheiten sind in Notenlinienzwischenräumen: + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be aligned with the left edge of the KeySignature +% and then shifted right by 3.5 staff-spaces +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\once \override Score.KeySignature #'break-align-anchor = #3.5 +\key a \major +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the KeySignature +% and then shifted left by 2 staff-spaces +\once \override Score.KeySignature #'break-align-anchor = #-2 +\key a \major +\mark "↓" +e1 +@end lilypond + + + +@node Vertikale Gruppierung der grafischen Objekte („grob“s) +@subsection Vertikale Gruppierung der grafischen Objekte („grob“s) +@translationof Vertical grouping of grobs + +Die graphischen Objekte @code{VerticalAlignment} und +@code{VerticalAxisGroup} funktionieren zusammen. +@code{VerticalAxisGroup} gruppiert unterschiedliche Objekte +wie Notensysteme, Gesangstext usw. zusammen. +@code{VerticalAlignment} richtet die unterschiedlichen +Objektgruppen dann aneinander aus. Es gibt normalerweise +nur ein @code{VerticalAlignment} in einer Partitur, aber +jedes Notensystem, Gesangstext usw. hat eine eigene +@code{VerticalAxisGroup}. + + +@node stencils verändern +@subsection stencils verändern +@translationof Modifying stencils + +Alle Layout-Objekte haben eine @code{stencil}-(Stempel-)Eigenschaft, +die ein Teil von @code{grob-interface} ist. Diese Eigenschaft +ist normalerweise als eine Funktion definiert, die auf das jeweilige +Objekt angepasst ist und das Symbol erstellt, dass dann im Druckbild +erscheint. Beispielsweise die Standardeinstellung für die +@code{stencil}-Eigenschaft von @code{MultiMeasureRest} +(Ganztaktpausenobjekt) ist @code{ly:multi-measure-rest::print}. + +Das Standardsymbol für jedes Objekt kann ersetzt werden, indem man +die @code{stencil}-Eigenschaft verändert, sodass sie auf eine +andere, speziell geschriebene Prozedur verweist. Das erfordert +einen hohen Grad an Kenntnis der LilyPond-Interna, aber es gibt +einen einfacheren Weg, mit dem man oft vergleichbarere Ergebnisse +erzielen kann. + +Dieser Weg besteht darin, die @code{stencil}-Eigenschaft auf die +Prozedur zu verweisen, die Text ausgibt: @code{ly:text-interface::print} +und eine @code{text}-Eigenschaft zu dem Objekt hinzuzufügen, +in welcher dann die Textbeschriftung definiert wird, mit der +das entsprechende Symbol dargestellt wird. Aufgrund der +Flexibilität der Textbeschriftung ist hier sehr viel möglich. +Siehe zu Details insbesondere +@ref{Graphische Notation innerhalb einer Textbeschriftung}. + +Das folgende Beispiel zeigt diese Methode, indem das Symbol +der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt +wird. + +@lilypond[verbatim,quote] +XinO = { + \once \override NoteHead #'stencil = #ly:text-interface::print + \once \override NoteHead #'text = \markup { + \combine + \halign #-0.7 \draw-circle #0.85 #0.2 ##f + \musicglyph #"noteheads.s2cross" + } +} +\relative c'' { + a a \XinO a a +} +@end lilypond + +Alle Schriftzeichen in der feta-Schriftart können +mit dem @code{\musicglyph}-Befehl erreicht werden. +Siehe auch @ref{Die Feta-Schriftart}. + + + +@seealso +Notationsreferenz: +@ref{Graphische Notation innerhalb einer Textbeschriftung}, +@ref{Text formatieren}, +@ref{Text markup commands}, +@ref{Die Feta-Schriftart}. + + + +@node Formen verändern +@subsection Formen verändern +@translationof Modifying shapes + +@menu +* Bögen verändern:: +@end menu + +@node Bögen verändern +@unnumberedsubsubsec Bögen verändern +@translationof Modifying ties and slurs + +@cindex Bögen, verändern +@cindex Bindebögen, verändern +@cindex Legatobögen, verändern +@cindex Bézier-Kurven +@cindex Kontrollpunkte, Bézier-Kurven + +Binde-, Legato- und Phrasierungsbögen werden als Bézierkurven +dritter Ordnung gezeichnet. Wenn die Form eines automatischen +Bogens nicht optimal ist, kann sie manuell verändert werdne, +indem man die vier erforderlichen Kontrollpunkte angibt. + +Bézierkurven dritter Ordnung (auch als quadratische Bézierkurven +bezeichnet) werden durch vier Kontrollpunkte definiert. Der +erste und vierte Kontrollpunkt geben Beginn und Ende der Kurve +an. Die zwei Punkte dazwischen werden benutzt, um die Form +der Kurve zu bestimmen. Im Internet gibt es Animationen, +die illustrieren, wie eine derartige Kurve gezeichnet wird, +aber die folgende Beschreibung kann hilfreich sein. Die +Kurve beginnt am ersten Kontrollpunkt in Richtung des zweiten, +wobei sie sich schrittweise krümmt um zum dritten Kontrollpunkt +zu gelangen, von wo aus sie sich weiter zum vierten Punkt hin +krümmt. Die Form der Kurve wird vollständig von den vier +Punkten definiert. + +Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal +erscheint, und wo auch @code{\tieDown} das Problem nicht +lösen würde. + +@lilypond[verbatim,quote,relative=1] +<< + { e1 ~ e } +\\ + { r4 } +>> +@end lilypond + +Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine +Kontrollpunkte manuell zu verändern: + +Die Koordinaten von Bézierkontrollpunkten werden in +Notenlinienzwischenräumen angegeben. Die X-Achse +ist relativ zum Referenzpunkt der Note, an die der Bogen +angefügt wird, und die Y-Achse relativ zur Mittellinie +des Notensystems. Die Koordinaten werden als eine Liste +von vier Paaren an realen Dezimalzahlen eingegeben. Eine +Möglichkeit ist es, die Koordinaten der zwei Endpunkte +zu schätzen und dann die zwei Zwischenpunkte zu erraten. +Die optimalen Werte können nur durch Ausprobieren gefunden +werden. + +Es lohnt sich daran zu denken, dass eine symmetrische Kurve +symmetrische Kontrollpunkte benötigt, und dass Bézierkurven +die nützliche Eigenschaft haben, dass eine Transformation +der Kurve wie eine Übersetzung, Drehung oder Skalierung +der Kurve erreicht werden kann, indem man die gleiche +Skalierung auf die Kontrollpunkte anwendet. + +In dem obigen Beispiel geben folgende Werte einen +zufriedenstellenden Bogen -- Achtung: der Befehl muss direkt +vor dem Beginn der Note gesetzt werden, an die der (Binde-)Bogen angehängt +wird. + +@lilypond[verbatim,quote,relative=1] +<< + { + \once \override Tie + #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) + e1 ~ e1 + } +\\ + { r4 4 } +>> +@end lilypond + +@knownissues + +Es ist nicht möglich, die Form von Bögen anhand ihrer +@code{control-points}-Eigenschaft zu verändern, wenn +mehr als ein Bogen zum gleichen musikalischen Moment +auftritt, nicht einmal mit dem @code{\tweak}-Befehl. + + + +@node Musikfunktionen benutzen +@section Musikfunktionen benutzen +@translationof Using music functions + +@c TODO -- add @seealso, etc. to these subsections + +Wenn Optimierungen von unterschiedlichen musikalischen Ausdrücken +wiederverwendet werden sollen, bietet es sich oft an, den +@qq{Optimierungsanteil} einer @emph{musikalischen Funktion} zu +erstellen. In diesem Abschnitt sollen nur @emph{Ersetzungen} +erklärt werden, wo es darum geht, eine Variable mit einem Stück +LilyPond-Code zu ersetzen. Andere komplexere Funktionen werden +beschrieben in @rextend{Musikalische Funktionen}. + +@menu +* Syntax der Ersetzungsfunktion:: +* Beispiele der Ersetzungsfunktion:: +@end menu + +@node Syntax der Ersetzungsfunktion +@subsection Syntax der Ersetzungsfunktion +@translationof Substitution function syntax + +Es ist einfach eine Funktion zu erstellen, die eine Variable +in LilyPond-Code umwandelt. Die generelle Form dieser +Funktionen ist: + +@example +Funktion = +#(define-music-function + (parser location @var{Arg1} @var{Arg2} @dots{}) + (@var{Typ1?} @var{Typ2?} @dots{}) + #@{ + @var{@dots{}Noten@dots{}} + #@}) +@end example + +@noindent +wobei + +@multitable @columnfractions .33 .66 +@item @code{@var{ArgN}} +@tab @var{n}tes Argument + +@item @code{@var{TypN?}} +@tab ein Scheme @emph{Typenprädikat}, für das @code{@var{ArgN}} +den Wert @code{#t} ausgibt. + +@item @code{@var{@dots{}Noten@dots{}}} +@tab normale LilyPond-Eingab, wobei @code{$} benutzt wird, um +Argumente zu referenzieren (etwa @samp{$Arg1}). +@end multitable + + +Die @code{parser} und @code{location}-Argumente sind zwingend und +werden in einigen fortgeschrittenen Situationen benutzt, wie sie +im @qq{Erweitern}-Handbuch beschrieben werden (siehe +@rextend{Musikalische Funktionen}). In Ersetzungsfunktionen +gehen Sie einfach sicher, dass sie die beiden Wörter auch mit +aufnehmen. + +Die Liste der Typenprädikate ist auch notwendig. Einige der +häufigsten Typenprädikate, die in musikalischen Funktionen +benutzt werden, sind: + +@example +boolean? +cheap-list? @emph{(benutze anstelle von }@q{list?}@emph{ für schnelleres Kompilieren)} +ly:music? +markup? +number? +pair? +string? +symbol? +@end example + +@noindent +Eine Liste aller Typprädikate findet sich unter +@ref{Vordefinierte Typprädikate}. Eigene Typprädikate +sind auch erlaubt. + + +@seealso + +Notationsreferenz: +@ref{Vordefinierte Typprädikate}. + +Erweitern: +@rextend{Musikalische Funktionen}. + +Installierte Dateien: +@file{lily/music-scheme.cc}, +@file{scm/c++.scm}, +@file{scm/lily.scm}. + + +@node Beispiele der Ersetzungsfunktionen +@subsection Beispiele der Ersetzungsfunktionen +@translationof Substitution function examples + +Dieser Abschnitt zeigt einige Beispiele von Ersetzungsfunktionen. +Sie sind nicht vollständig, sondern sollen einige der +Möglichkeiten von einfachen Ersetzungsfunktionen aufzeigen. + +Im ersten Beispiel wird eine Funktione definiert, die +das Verschieben von @code{TextScript} erleichtert: + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + +Neben Zahlen können auch musikalische Ausdrücke wie Noten +als Argumente für musikalische Funktionen eingesetzt werden: + +@c TODO: use a better example (the music argument is redundant). + +@lilypond[quote,verbatim,ragged-right] +custosNote = +#(define-music-function + (parser location note) + (ly:music?) + #{ + \once \override Voice.NoteHead #'stencil = + #ly:text-interface::print + \once \override Voice.NoteHead #'text = + \markup \musicglyph #"custodes.mensural.u0" + \once \override Voice.Stem #'stencil = ##f + $note + #}) + +\relative c' { c4 d e f \custosNote g } +@end lilypond + +Ersetzungsfunktionen mit mehrfachen Argumenten können definiert +werden: + +@lilypond[quote,verbatim,ragged-right] +tempoPadded = +#(define-music-function + (parser location padding tempotext) + (number? string?) + #{ + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } + #}) + +\relative c'' { + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 +} +@end lilypond + + diff --git a/Documentation/de/notation/cheatsheet.itely b/Documentation/de/notation/cheatsheet.itely new file mode 100644 index 0000000000..d9bc02f8c3 --- /dev/null +++ b/Documentation/de/notation/cheatsheet.itely @@ -0,0 +1,303 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437 + + 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" + +@c Translators: Till Paala + + +@c TODO: add tablature. + +@node Befehlsübersicht +@appendix Befehlsübersicht +@translationof Cheat sheet + + +@multitable @columnfractions .35 .3 .35 + +@item @b{Syntax} +@tab @b{Erklärung} +@tab @b{Beispiel} + +@item @code{1 2 8 16} +@tab Tondauern +@tab +@lilypond[relative=2,notime] +\set Staff.autoBeaming = ##f +\override Staff.Clef #'break-visibility = #all-invisible +c1 c2 c8 c16 +@end lilypond + +@item @code{c4. c4..} +@tab Punktierung +@tab +@lilypond[relative=2,notime] +\override Staff.Clef #'break-visibility = #all-invisible +c4. c4.. +@end lilypond + +@item @code{c d e f g a b } +@tab Tonleiter +@tab +@lilypond[relative=1,notime] +c d e f g a b +@end lilypond + +@item @code{fis bes} +@tab Vorzeichen +@tab +@lilypond[relative=1,notime] +fis bes +@end lilypond + +@item @code{\clef treble \clef bass } +@tab Notenschlüssel +@tab +@lilypond[relative=1,notime] +\clef treble +s4_" " +\clef bass +s4_" " +@end lilypond + +@item @code{\time 3/4 \time 4/4 } +@tab Taktangaben +@tab +@lilypond[relative=1] +\override Staff.Clef #'stencil = #empty-stencil +\time 3/4 +s4_" " +\time 4/4 +s16_" " +@end lilypond + + +@item @code{r4 r8} +@tab Pause +@tab +@lilypond[relative=2,notime] +\override Staff.Clef #'break-visibility = #all-invisible +r4 r8 +@end lilypond + +@item @code{d ~ d} +@tab Bindebogen +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +d ~ d +@end lilypond + +@item @code{\key es \major } +@tab Tonart +@tab +@lilypond[notime,relative=1] +\clef treble +\key es \major +\hideNotes +c128 +@end lilypond + +@item @var{note}@code{'} +@tab Oktavierung +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +a a' +@end lilypond + +@item @var{note}@code{,} +@tab Oktavierung nach unten +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +c c, +@end lilypond + + +@item @code{c( d e)} +@tab Legatobogen +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c( d e) +@end lilypond + + +@item @code{c\( c( d) e\)} +@tab Phrasierungsbogen +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c\( c( d) e\) +@end lilypond + + +@item @code{a8[ b]} +@tab Balken +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a8-[ b-] +@end lilypond + + +@item @code{<< \new Staff ... >>} +@tab mehr Notensysteme +@tab +@lilypond[relative=1] +<< \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } + \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } >> +@end lilypond + + +@item @code{c-> c-.} +@tab Artikulationszeichen +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c-> c-. +@end lilypond + + +@item @code{c2\mf c\sfz} +@tab Dynamik +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c2\mf c\sfz +@end lilypond + + +@item @code{a\< a a\!} +@tab Crescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\< a a\! +@end lilypond + +@item @code{a\> a a\!} +@tab Decrescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\> a a\! +@end lilypond + + +@item @code{< >} +@tab Noten im Akkord +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible + +@end lilypond + + +@item @code{\partial 8} +@tab Auftakt +@tab +@lilypond[relative=2] +\partial 8 +f8 c2 d e +@end lilypond + + +@item @code{\times 2/3 @{f g a@}} +@tab Triolen +@tab +@lilypond[relative=1] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\times 2/3 { f8 g a } +@end lilypond + + +@item @code{\grace} +@tab Verzierungen +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Voice { \grace b16 c4 } +@end lilypond + +@item @code{\lyricmode @{ twinkle @}} +@tab Texteingabe +@tab +twinkle + + +@item @code{\new Lyrics} +@tab Gesangstext +@tab +@lilypond[relative=1] +\new Lyrics \lyricmode { twinkle } +@end lilypond + +@item @code{twin -- kle} +@tab Gesangstext-Trennstrich +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +<< + { g'1 g } + \new Lyrics \lyricsto "" { twin -- kle } +>> +@end lilypond + +@item @code{\chordmode @{ c:dim f:maj7 @}} +@tab Akkorde +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\chordmode { c:dim f:maj7 } +@end lilypond + +@item @code{\context ChordNames} +@tab Akkordsymbole drucken +@tab +@lilypond[relative=2] +\chords { c:dim f:maj7 } +@end lilypond + +@item @code{<<@{e f@} \\ @{c d@}>>} +@tab Mehrstimmigkeit +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Staff <<{e f} \\ {c d}>> +@end lilypond + + +@item @code{s4 s8 s16} +@tab unsichtbare Pausen +@tab + +@end multitable + diff --git a/Documentation/de/notation/chords.itely b/Documentation/de/notation/chords.itely new file mode 100644 index 0000000000..6fc6c6b7f0 --- /dev/null +++ b/Documentation/de/notation/chords.itely @@ -0,0 +1,1174 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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" + +@c Translators: Till Paala + +@node Notation von Akkorden +@section Notation von Akkorden +@translationof Chord notation + +@lilypondfile[quote]{chords-headword.ly} + +Akkorde können entweder als normale Noten oder im Akkordmodus +notiert werden; bei letztere Eingabemethode können unterschiedliche +europäische Akkordbezeichnungsstile eingesetzt werden. Akkordbezeichnungen +und Generalbass können auch angezeigt werden. + +@menu +* Akkord-Modus:: +* Akkorde anzeigen:: +* Generalbass:: +@end menu + +@node Akkord-Modus +@subsection Akkord-Modus +@translationof Chord mode + +@cindex Akkorde +@cindex chord-Akkorde + +Im Akkordmodus (engl. @qq{chord}) werden Akkorde anhand von einem +Symbol der erwünschten Akkordstruktur notiert, anstatt dass die +einzelnen Tonhöhen ausgeschrieben werden. + +@menu +* Überblick über den Akkord-Modus:: +* Übliche Akkorde:: +* Erweiterte und modifizierte Akkorde:: +@end menu + + +@node Überblick über den Akkord-Modus +@unnumberedsubsubsec Überblick über den Akkord-Modus +@translationof Chord mode overview + +@cindex Akkordbezeichnungen +@cindex Akkordmodus + +Akkorde können als simultane Noten eingegeben werden, wie gezeigt +in @ref{Noten mit Akkorden}. + +Akkorde können aber auch im Akkordmodus notiert werden. Das ist +ein Eingabemodus, der sich an Akkordstrukturen traditioneller +europäischer Musik und nicht an bestimmten einzelnen Tonhöhen +orientiert. Er bietet sich an, wenn man es gewohnt ist, Akkordsymbole +zur Beschreibung von Akkorden zu benutzen. Mehr Information zu +unterschiedlichen Eingabemethoden findet sich in @ref{Eingabe-Modi}. + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c1 g a g c } +@end lilypond + +Akkorde, die im Akkordmodus eingegeben werden, sind musikalische +Elemente und können genauso wie Akkorde im Notenmodus +transponiert werden. @code{\chordmode} ist absolut, und deshalb +hat @code{\relative} keine Auswirkung auf die @code{\chordmode}-Abschnitte. +Im Akkord-Modus ist jedoch die absolute Tonhöhe eine Oktave höher +als im Notationsmodus. + +Akkordmodus und Notenmodus können gemischt verwendet werden: + +@lilypond[verbatim,quote,ragged-right,relative=1] +2 +\chordmode { c2 f } +2 +\chordmode { f2 g } +@end lilypond + +@seealso +Glossar: +@rglos{chord}. + +Notationsreferenz: +@ref{Noten mit Akkorden}, +@ref{Eingabe-Modi}. + +Schnipsel: +@rlsr{Chords}. + + +@knownissues + +Vordefinierte Abkürzung für Artikulationen und Ornamente können mit Noten +im Akkordmodus nicht benutzt werden, siehe auch +@ref{Artikulationenszeichen und Verzierungen}. + +Wenn Akkord- und Notenmodus in linearer Musik abwechseln eingesetzt +werden und der Akkordmodus am Anfang steht, erstellt der +Notenmodus ein neues Notensystem: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\chordmode { c2 f } +2 +@end lilypond + +@noindent +Um dieses Verhalten zu verhindert, muss der @code{Staff}-Kontext +explizit aufgerufen werden: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\new Staff { + \chordmode { c2 f } + 2 +} +@end lilypond + + +@node Übliche Akkorde +@unnumberedsubsubsec Übliche Akkorde +@translationof Common chords + +@cindex Dreiklänge +@cindex Septakkorde +@cindex Grundton eines Akkords +@cindex Akkordeigenschaften +@cindex Umkehrungen +@cindex Modifikatoren, Akkorde +@cindex Modi, in Akkorden +@cindex Akkordmodi + +Ein Dreiklang wird +mit seinem Grundton mit einer möglichen Dauer dahinter notiert: + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c2 f4 g } +@end lilypond + +@noindent +Moll- übermäßige und verminderte Dreiklänge werden notiert, indem +@code{:} und ein Modifikator hinter der Dauer angegeben wird: + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c2:m f4:aug g:dim } +@end lilypond + +Septakkorde können erstellt werden: + +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } +@end lilypond + +@funindex aug +@funindex dim +@funindex maj +@funindex m + +Diese Tabelle zeigt die Funktion der Modifikatoren von Dreiklängen +und Septakkorden. Die siebte Stufe wird standardmäßig als kleine +Septime realisiert, sodass der Dominantseptakkord die Grundform +des Septakkordes darstellt. Alle Alterationen sind relativ zur +Dominantsept. Eine vollständigere Tabelle findet sich in +@ref{Übliche Akkord-Variablen}. + +@c @table @code +@multitable @columnfractions .2 .4 .3 + +@item +@b{Modifikator} +@tab +@b{Funktion} +@tab +@b{Beispiel} + +@item +Kein +@tab +Standard: erzeugt einen Durdreiklang. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1 +} +@end lilypond + +@item +m, m7 +@tab +Mollakkord: Dieser Modifikator erniedrigt die dritte Stufe. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:m c:m7 +} +@end lilypond + + +@item +dim, dim7 +@tab +Verminderter Akkord: Dieser Modifikator erniedrigt die dritte, fünfte +und (wenn vorhanden) die siebte Stufe. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:dim c:dim7 +} +@end lilypond + +@item +aug +@tab +Übermäßiger Akkord: Dieser Modifikator erhöht die fünfte Stufe. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:aug +} +@end lilypond + +@item +maj, maj7 +@tab +Großer Septakkord: Dieser Modifikator fügt eine erhöhte siebe +Stufe hinzu. @code{7} nach dem @code{maj} ist optional. NICHT +benutzen, um einen Durdreiklang zu notieren. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:maj c:maj7 +} +@end lilypond + +@end multitable + +@seealso +Notationsreferenz: +@ref{Übliche Akkord-Variablen}, +@ref{Erweiterte und modifizierte Akkorde}. + +Schnipsel: +@rlsr{Chords}. + +@knownissues + +Nur ein Qualitätsmodifikator sollte pro Akkord benutzt werden, meistens +für die höchste Stufe des Akkordes. Akkorde mit weiteren Qualitätsmodifikatoren +werden ohne Warnung oder Fehlermeldung gelesen, aber das Ergebnis ist +nicht vorhersagbar. Akkorde, die nicht mit einem einzigen +Qualitätsmodifikator erreicht werden können, sollten mit einzelnen +Tonhöhen alteriert werden, wie beschrieben in +@ref{Erweiterte und modifizierte Akkorde}. + + +@node Erweiterte und modifizierte Akkorde +@unnumberedsubsubsec Erweiterte und modifizierte Akkorde +@translationof Extended and altered chords + +@cindex erweiterte Akkorde +@cindex veränderte Akkorde + +Akkordstrukturen können im Akkordmodus beliebig komplex konstruiert +werden. Die Modifikatoren können benutzt werden, um den Akkord zu +erweitern, bestimmte Stufen hinzuzufügen oder zu entfernen, Stufen +zu erhöhen oder zu erniedrigen und Bassnoten hinzuzufügen bzw. +Umkehrungen zu erzeugen. + +Die erste Zahl, die auf den Doppelpunkt folgt, wird als @qq{Bereich} +des Akkordes interpretiert: Terzen werden auf dem Grundton +gestapelt, bis die angegebene Zahl (=Tonstufe) erreicht ist. +Die siebte Stufe, die zu einem Akkord hinzugefügt wird, ist die +kleine Septime, nicht die große. Wenn +der Bereich keine Terz ist (also etwa 6), dann werden Terzen bis +zur höchst möglichen Terz unter dem Bereich gestapelt, und der +Endton des Bereichs wird hinzugefügt. Der größtmögliche Wert ist +13. Jeder größere Werte wird als 13 interpretiert. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:2 c:3 c:4 c:5 + c1:6 c:7 c:8 c:9 + c1:10 c:11 c:12 c:13 + c1:14 +} +@end lilypond + +@noindent +Sowohl @code{c:5} als auch @code{c} erzeugen einen D-Dur-Dreiklang. + +Da eine unveränderte 11 nicht gut klingt, wenn sie mit einer +unveränderten 13 zusammenklingt, wird die 11 von einem @code{:13}-Akkord +entfernt (es sei denn sie wird explizit verlangt). + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:13 c:13.11 c:m13 +} +@end lilypond + +@cindex Grundton eines Akkordes +@cindex Additionen in Akkorden +@cindex Subtraktion in Akkorden +@cindex Hinzufügen von Tönen in Akkorden +@cindex Entfernen von Tönen aus Akkorden + +Kompliziertere Akkorde können auch konstruiert werden, indem +einzelne Intervalle zu dem Grundton addiert werden. +Diese Additionen werden nach dem Bereich notiert und mit +Punkten voneinander getrennt. Die normale Septime, die zu +einem Akkord hinzugefügt wird, ist die kleine Septime, nicht +die große. + +@lilypond[quote,verbatim] +\chordmode { + c1:5.6 c:3.7.8 c:3.6.13 +} +@end lilypond + +@noindent +Hinzugefügte Stufen können beliebig groß sein: + +@lilypond[quote,verbatim] +\chordmode { + c4:5.15 c:5.20 c:5.25 c:5.30 +} +@end lilypond + +@cindex Akkordstufen, Veränderung +@cindex Akkordstufen, Alteration + +Einzelne Stufen können mit @code{-} oder @code{+} vergrößert +oder verkleinert werden. Um eine Stufe zu verändert, die automatisch +in den Akkord aufgenommen wurde, kann sie in veränderter Form +nach dem Bereich hinzugefügt werden. + +@lilypond[quote,verbatim] +\chordmode { + c1:7+ c:5+.3- c:3-.5-.7- +} +@end lilypond + +@cindex Entfernen von Stufen in Akkorden +@cindex Akkorde, Entfernen von Tönen + +@funindex ^ + +Zu entfernende Töne werden mit der gleichen Methode notiert, +allerdings mit einem Dach (@code{^}) vor der Sequenz, die +nicht erscheinen soll. Sie müssen nach den zu addierenden +Tönen notiert werden. Die einzelnen zu entfernenden Töne werden +mit Punkten getrennt. + +@lilypond[quote,verbatim] +\chordmode { + c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 +} +@end lilypond + +@funindex sus + +Sekund- und Quartakkorde können mit dem Modifikator @code{sus} +notiert werden. Hiermit wird die dritte Stufe aus dem Akkord +entfernt. Mit einer anschließenden @code{2} wird die zweite, mit +einer @code{4} die vierte Stufe hinzugefügt. @code{sus} entspricht +@code{^3} und @code{sus4} ist gleich @code{.4^3}. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:sus c:sus2 c:sus4 c:5.4^3 +} +@end lilypond + +@cindex Umkehrungen +@cindex Bassnote in Akkorden + +@funindex / + +Eine Umkehrung (ein Ton des Akkordes wird unter den Grundton gesetzt) +sowie auch zusätzliche Bassnoten können mit dem Schrägstrich (@code{/}) markiert +werden: + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1 c/g c/f +} +@end lilypond + +@funindex /+ + +Eine Bassnote, die zum Akkord hinzugehört, kann hinzugefügt werden, +anstatt dass sie aus dem Akkord entnommen wird, indem noch ein +Plus zwischen den Schrägstrich und die Tonhöhe gesetzt wird: + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1 c/g c/+g +} +@end lilypond + +Akkordmodifikatoren, die benutzt werden können, um eine große +Anzahl an Standardakkorden zu erzeugen, werden gezeigt in +@ref{Übliche Akkord-Variablen}. + +@seealso +Notationsreferenz: +@ref{Übliche Akkord-Variablen}. + +Schnipsel: +@rlsr{Chords}. + +@knownissues + +Jede Stufe kann nur einmal in einem Akkord vorkommen. +Im folgenden Beispiel wird ein erweiterter Akkord erstellt, +weil @code{5+} zuletzt gelesen wird. + +@cindex Cluster +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1:5.5-.5+ } +@end lilypond + +Nur die zweite Umkehrung kann erstellt werden, indem eine +Bassnote hinzugefügt wird. Die erste Umkehrung erfordert, dass +der Grundton des Akkordes geändert wird. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c'1: c':/g e:6-3-^5 e:m6-^5 +} +@end lilypond + + +@node Akkorde anzeigen +@subsection Akkorde anzeigen +@translationof Displaying chords + +Akkorde können zusätzlich zur üblichen Notation als Töne auf +einem Notensystem auch mit einem Akkordsymbol gesetzt werden. + +@menu +* Akkordbezeichnungen drucken:: +* Akkordbezeichnungen anpassen:: +@end menu + +@node Akkordbezeichnungen drucken +@unnumberedsubsubsec Akkordbezeichnungen drucken +@translationof Printing chord names + +@funindex ChordNames + +@cindex Akkordsymbole +@cindex Akkordbezeichnungen +@cindex Ausgabe von Akkordbezeichnungen +@cindex Symbole, Akkord- + +Akkordsymbole anstelle der Noten werde im @code{ChordNames}-Kontext +notiert. + +@lilypond[verbatim,quote,ragged-right] +\new ChordNames { + \chordmode { + c2 f4. g8 + } +} +@end lilypond + +Die Akkorde können entweder als simultane Noten oder unter Einsatz +des Akkordmodus (@code{chordmode}) notiert werden. Der angezeigte +Akkord ist der gleiche, es sei denn, Umkehrungen oder zusätzliche +Basstöne werden notiert: + +@lilypond[verbatim,quote,relative=1] +<< + \new ChordNames { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } + { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } +>> +@end lilypond + +@cindex N.C.-Symbol + +Pausen, die in einem @code{ChordNames}-Kontext notiert werden, werden +mit der @code{noChordSymbol}-Beschriftung darstellt. + +@lilypond[verbatim, quote, relative=1] +<< + \new ChordNames \chordmode { + c1 + r1 + g1 + c1 + } + \chordmode { + c1 + r1 + g1 + c1 + } +>> +@end lilypond + +@funindex{\chords} + +@code{\chords @{ ... @}} ist eine Kurznotation für die Bezeichnung +@code{\new ChordNames @{ \chordmode @{ ... @} @}}. + +@lilypond[verbatim,quote,ragged-right] +\chords { + c2 f4.:m g8:maj7 +} +@end lilypond + +@lilypond[verbatim,quote,ragged-right] +\new ChordNames { + \chordmode { + c2 f4.:m g8:maj7 + } +} +@end lilypond + +@snippets + +@c Keep index entries with following snippet +@cindex Akkorde, Unterdrückung wiederholt +@funindex chordChanges + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{showing-chords-at-changes.ly} + +@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +@c {adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + + +@seealso +Glossar: +@rglos{chord}. + +Notationsreferenz: +@ref{Musik parallel notieren}. + +Schnipsel: +@rlsr{Chords}. + +Referenz der Interna: +@rinternals{ChordNames}, +@rinternals{ChordName}, +@rinternals{Chord_name_engraver}, +@rinternals{Volta_engraver}, +@rinternals{Bar_engraver}. + +@knownissues + +Akkorde, die Umkehrungen oder zusätzliche Basstöne beinhalten, +werden nicht richtig bezeichnet, wenn sie im Notenmodus notiert +werden. + + + +@node Akkordbezeichnungen anpassen +@unnumberedsubsubsec Akkordbezeichnungen anpassen +@translationof Customizing chord names + +@cindex Anpassen von Akkordsymbolen +@cindex Akkordsymbole, anpassen + +Es gibt kein allein gültiges System zur Benennung von Akkorden. +Unterschiedliche Musiktraditionen benutzen unterschiedliche Bezeichnungen +für die gleichen Akkorde. Es gibt zusätzlich auch unterschiedliche +Symbole, die für den gleichen Akkord angezeigt werden können. Die +Bezeichnungen und dargestellten Symbole können angepasst werden. + +Die Standardeinstellungen für die Symbole entsprechen den Konventionen +im Jazz, wie sie von Klaus Ignatzek (siehe @ressay{Literatur}). +vorgeschlagen wurden. Das Benennungssystem für die Akkorde kann +verändert werden, wie weiter unten gezeigt wird. Ein alternatives +Notationssystem für Jazzakkorde ist auch erhältlich. Die +Ignatzek und die alternative Jazznotation finden sich in der Tabelle in +@ref{Liste der Akkordbezeichnungen}. + +@c TODO -- Change this so we don't have a non-verbatim example. +@c Make short example in docs, then move longer example to +@c appendix, where the length of the snippet won't matter. + +Zusätzlich zu den unterschiedlichen Bezeichnungssystemen werden +unterschiedliche Notenbezeichnungen für die Grundtöne. +Die vordefinierten Befehle @code{\germanChords}, +@code{\semiGermanChords}, @code{\italianChords} und @code{\frenchChords} +setzen diese Variablen. Die Auswirkungen werden im nächsten Beispiel +gezeigt. + +@lilypondfile[ragged-right]{chord-names-languages.ly} + +@funindex chordNameLowercaseMinor + +Deutsche Liederbücher zeigen Mollakkorde oft durch die Verwendung von +Kleinbuchstaben an, ohne die Endung @var{m}. Dieses Verhalten kann +erreicht werden, indem man die @code{chordNameLowercaseMinor}-Eigenschaft +setzt: + +@lilypond[verbatim,quote,ragged-right] +\chords { + \set chordNameLowercaseMinor = ##t + c2 d:m e:m f +} +@end lilypond + +Wenn keine der definierten Einstellungen zum gewünschten Ergebnis +führt, kann die Anzeige des Akkordsymbols durch die folgenden +Eigenschaften verändert werden: + +@table @code + +@funindex chordRootNamer + +@item chordRootNamer + +Das Akkordsymbol wird normalerweise als Buchstabe des Grundtons mit +optionaler Alteration dargestellt. Die Interpretation +einer Tonhöhe als Buchstabe wird von der @code{chordRootNamer}-Funktion +übernommen. Besondere Bezeichnungen, wie etwa im Deutschen H für +einen H-Dur-Akkord (und nicht @qq{B} wie im Englischen), können +durch Hinzufügen einer neuen Funktion zu dieser Eigenschaft +erstellt werden. + +@funindex majorSevenSymbol + +@item majorSevenSymbol + +Mit dieser Eigenschaft wird das Aussehen der Notation für die +große Septime (7) bestimmt. Vordefiniert sind die Optionen +@code{whiteTriangleMarkup} und @code{blackTriangleMarkup}. + +@funindex chordNoteNamer + +@item chordNoteNamer + +Wenn das Akkordsymbol zusätzliche Tonhöhen enthält, die nicht den +Grundton darstellen (etwa eine zusätzliche Bassnote), wird diese +Funktion eingesetzt, um die zusätzliche Tonhöhe auszugeben. +In den Standardeinstellungen wird die Tonhöhe mit der +@code{chordRootNamer}-Funktion gesetzt. Die +@code{chordNoteNamer}-Eigenschaft hingegen kann dieses Verhalten +verändern und etwa den Basston etwa als Kleinbuchstaben darstellen. + +@funindex chordNameSeparator + +@item chordNameSeparator + +Verschiedene Teile eines Akkordsymboles werden normalerweise +durch einen Schrägstrich markiert. Indem @code{chordNameSeparator} +ein anderer Wert zugewiesen wird, kann ein beliebiges Zeichen für +den Trenner benutzt werden. + +@funindex chordNameExceptions + +@item chordNameExceptions + +Diese Funktion ist eine Liste mit Paaren. Das erste Objekt eines +Paares ist eine Anzahl von Tonhöhen, die die Stufen eines Akkordes +definieren. Das zweite Objekt ist eine Beschriftung, die nach +@code{chordRootNamer} ausgegeben wird, um das Akkordsymbol zu +erstellen. + +@funindex chordPrefixSpacer + +@item chordPrefixSpacer + +Das @qq{m} für Moll-Akkorde wird normalerweise direkt hinter dem +Akkordbuchstaben gesetzt. Mit der Eigenschaft @code{chordPrefixSpacer} +kann ein Abstand(halter) zwischen den Buchstaben und das @qq{m} +gesetzt werden. Der Abstandhalter wird nicht verwendet, wenn der +Grundton erhöht oder erniedrigt ist. + +@end table + +@predefined +@funindex major seven symbols +@code{\whiteTriangleMarkup}, +@code{\blackTriangleMarkup}, +@funindex \germanChords +@code{\germanChords}, +@funindex \semiGermanChords +@code{\semiGermanChords}, +@funindex \italianChords +@code{\italianChords}, +@funindex \frenchChords +@code{\frenchChords}. +@endpredefined + +@snippets + +@cindex Ausnahmen, Akkordsymbole +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-exceptions.ly} + +@c TODO - tweak snippet to use \blackTriangleMarkup as well +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-major7.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{volta-below-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-chord-separator.ly} + + +@seealso +Notationsreferenz: +@ref{Liste der Akkordbezeichnungen}, +@ref{Übliche Akkord-Variablen}. + +Aufsatz über den automatischen Musiksatz: +@ressay{Literatur}. + +Installierte Dateien: +@file{scm/chords-ignatzek.scm}, +@file{scm/chord-entry.scm}, +@file{ly/chord-modifier-init.ly}. + +Schnipsel: +@rlsr{Chords}. + +@c Internals Reference: +@c @r internals{}. + +@knownissues + +Akkordsymbole werden von den Tonhöhenbezeichnungen innerhalb des +Akkordes und der Information über die Akkordstruktur, die innerhalb +von @code{\chordmode} notiert wurde, bestimmt. Wenn der direkte +Notenmodus benutzt wird, stammen unerwünschte Bezeichnungen daher, +dass Umkehrungen und zusätzliche Bassnoten nicht richtig +interpretiert werden. + +@lilypond[quote,ragged-right,verbatim] +myChords = \relative c' { + \chordmode { c1 c/g c/f } + 1 +} +<< + \new ChordNames { \myChords } + \new Staff { \myChords } +>> +@end lilypond + + + + +@node Generalbass +@subsection Generalbass +@translationof Figured bass + +@lilypondfile[quote]{figured-bass-headword.ly} + +Generalbassnotation kann dargestellt werden. + +@menu +* Grundlagen des Bezifferten Basses:: +* Eingabe des Generalbass':: +* Generalbass anzeigen:: +@end menu + + +@node Grundlagen des Bezifferten Basses +@unnumberedsubsubsec Grundlagen des Bezifferten Basses +@translationof Introduction to figured bass + +@cindex Basso continuo +@cindex Generalbass +@cindex Bezifferter Bass +@cindex Continuo, Generalbass + +@c TODO: musicological blurb about FB + +LilyPond stellt Unterstützung für Generalbassnotation, auch als +Basso Continuo bezeichnet, zur Verfügung. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice { \clef bass dis4 c d ais g fis} + \new FiguredBass { + \figuremode { + < 6 >4 < 7\+ >8 < 6+ [_!] > + < 6 >4 <6 5 [3+] > + < _ >4 < 6 5/>4 + } + } +>> +@end lilypond + +Die Unterstützung für Generalbass besteht aus zwei Teilen: Es gibt +einen Eingabe-Modus, aktiviert durch den Befehl @code{\figuremode}, +in dem Ziffern für den Bass als Nummern eingegeben werden können, +und einen Kontext @code{FiguredBass}, der dafür sorgt, dass die +entsprechenden @code{BassFigure}-Objekte auch erstellt werden. +Generalbass kann auch in einem @code{Staff}-Kontext dargestellt +werden. + +@code{\figures@{ ... @}} ist eine Kurznotation für +@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. + +Auch wenn die Unterstützung für Generalbass auf den ersten Blick +wie die Akkordunterstützung ausschauen mag, ist sie sehr viel +einfacher. @code{\figuremode} speichert einfach die Zahlen und der +@code{FiguredBass}-Kontext setzt sie in der Form, wie sie notiert +wurden. Sie werden nicht in Tonhöhen umgewandelt. + +@seealso +Glossar: +@rglos{figured bass}. + +Schnipsel: +@rlsr{Chords}. + + +@node Eingabe des Generalbass' +@unnumberedsubsubsec Eingabe des Generalbass' +@translationof Entering figured bass + +@code{\figuremode} (Zahlenmodus) wird benutzt, um den Eingabemodus +auf den Zahlenmodus umzustellen. Mehr Information zu unterschiedlichen +Eingabemodi findet sich in @ref{Eingabe-Modi}. + +Im Zahlenmodus wird eine Gruppe von Bassziffern mit den Zeichen +@code{<} und @code{>} begrenzt. Die Dauer wird nach dem @code{>}-Zeichen +eingegeben. + +@lilypond[verbatim,quote,ragged-right] +\new FiguredBass { + \figuremode { + <6 4>2 + } +} +@end lilypond + +Versetzungszeichen (inklusive Auflösungszeichen) können hinzugefügt +werden: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +Übermäßige und verminderte Stufen können dargestellt werden: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +Ein Schrägstrich von links nach rechts (üblicherweise für erhöhte +Sexten benutzt) kann erstellt werden: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <6> <6\\> +} +@end lilypond + +Vertikaler Platz und Klammern können zu den Zahlen hinzugefügt +werden: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <[12 _!] 8 [6 4]> +} +@end lilypond + +Beliebiger Text kann als Zahl notiert werden: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <\markup { \tiny \number 6 \super (1) } 5> +} +@end lilypond + +Es ist auch möglich, Fortsetzungslinien für wiederholte Ziffern zu benutzen. + +@lilypond[verbatim,quote,ragged-right] +<< + { + \clef bass + e4 d c b, + e4 d c b, + } + \figures { + \bassFigureExtendersOn + <6 4>4 <6 3> <7 3> <7 3> + \bassFigureExtendersOff + <6 4>4 <6 3> <7 3> <7 3> + } +>> +@end lilypond + +@noindent +In diesem Fall werden wiederholte Ziffern immer durch eine Linie ersetzt, es sei denn, die Linie wird explizit beendet. + +@lilypond[verbatim,quote,ragged-right] +<< + \figures { + \bassFigureExtendersOn + <6 4>4 <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d4 d c c + } +>> +@end lilypond + +Die folgende Tabelle zeigt die vorhandenen Zahlenmodifikatoren: + +@multitable @columnfractions .1 .5 .4 + +@item +@b{Modifier} +@tab +@b{Purpose} +@tab +@b{Example} + +@item ++, -, ! +@tab +Accidentals +@tab +@lilypond[line-width=4\cm] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +@item +\+, / +@tab +Augmented and diminished steps +@tab +@lilypond[line-width=4\cm] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +@item +\\ +@tab +Raised sixth step +@tab +@lilypond[line-width=4\cm] +\figures { + <6\\> +} +@end lilypond + +@item +\! +@tab +End of continuation line +@tab +@lilypond[line-width=4\cm] +<< + \figures { + \bassFigureExtendersOn + <6 4> <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d d c c + } +>> +@end lilypond + +@end multitable + +@predefined +@cindex Generalbass Fortsetzungslinie +@code{\bassFigureExtendersOn}, +@code{\bassFigureExtendersOff}. +@endpredefined + + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-positions-of-figured-bass-alterations.ly} + + +@seealso +Schnipsel: +@rlsr{Chords}. + +Referenz der Interna: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + + + +@node Generalbass anzeigen +@unnumberedsubsubsec Generalbass anzeigen +@translationof Displaying figured bass + +Generalbass kann mit dem @code{FiguredBass}-Kontext, aber auch in +den meisten anderen @code{Staff}-Kontexten dargestellt werden. + +Wenn die Ziffern im @code{FiguredBass}-Kontext dargestellt werden, +ist die vertikale Position der Ziffern unabhängig von den Noten +des parallelen Systems. + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c'' { + c4 c'8 r8 c,4 c' + } + \new FiguredBass { + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + } +>> +@end lilypond + +In diesem Beispiel muss der @code{FiguredBass}-Kontext explizit +erstellt werden, damit kein zusätzliches (leeres) Notensystem +erstellt wird. + +Bassziffern können auch direkt einem Notensystemkontext (@code{Staff}) +hinzugefügt werden. In diesem Fall wird ihre vertikale Position automatisch +bestimmt. + +@lilypond[verbatim,ragged-right,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + +Wenn Generalbass zu einem vorhandenen System hinzugefügt wird, ist +es möglich, die Ziffern über oder unter dem System anzuzeigen: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + \bassFigureStaffAlignmentDown + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + +Schnipsel: +@rlsr{Chords}. + +Referenz der Interna: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + +@knownissues + +Um sicherzugehen, dass die Fortsetzungslinien funktionieren, sollte +der gleiche Rhythmus für die Bassfiguren und die eigentlichen +Noten der Bassstimme benutzt werden. + +@lilypond[verbatim,ragged-right,quote] +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are correct here, with the same rhythm as the bass + \repeat unfold 4 { <6 4->16. <6 4->32 } + <5>8. r16 <6>8 <6\! 5-> + } +>> +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are incorrect here, even though the timing is the same + <6 4->4 <6 4->4 + <5>8. r16 <6>8 <6\! 5-> + } +>> +@end lilypond + +Wenn Fortsetzungslinien eingesetzt werden, können aufeinander +folgende Bezifferungen mit der selben Zahl in einer anderen +Position dazu führen, dass sich die Reihenfolge der Zahlen +umkehrt. + +@lilypond[verbatim,ragged-right,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + \bassFigureExtendersOn + <6 5>4 <5\! 4> < 5 _!> <6> + } +>> +@end lilypond + +Um dieses Problem zu umgehen, kann die Fortsetzungslinie nach der +Bezifferung, mit der die Linie beginnen soll, angeschaltet und +am Ende der Linie wieder ausgeschaltet werden. + +@lilypond[verbatim,ragged-right,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + <6 5>4 <5 4> + \bassFigureExtendersOn + < 5 _!>4 <6> + \bassFigureExtendersOff + } +>> +@end lilypond diff --git a/Documentation/de/notation/contemporary.itely b/Documentation/de/notation/contemporary.itely new file mode 100644 index 0000000000..4bde7645c9 --- /dev/null +++ b/Documentation/de/notation/contemporary.itely @@ -0,0 +1,255 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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" + +@c Translators: Till Paala + + +@node Zeitgenössische Musik +@section Zeitgenössische Musik +@translationof Contemporary music + +Seit Anfang des 20. Jahrhunderts wurden die kompositorischen Stile +und Kompositionstechniken sehr start erweitert. Neue harmonische +und rhythmische Entwicklungen, eine Erweiterung der verwendeten +Tonhöhen und die Entwicklung eines großen Spektrums neuer +instrumentaler Techniken wurden von einer parallelen Evolution +der Notationstechnik begleitet. Die Absicht dieses Abschnittes +ist es, Informationen und Hintergrundwissen zu bieten, der zur +Notation zeitgenössischer Musik benötigt wird. + +@menu +* Tonhöhe und Harmonie in zeitgenössischer Musik:: +* Zeitgenössische Notation von Rhythmen:: +* Graphische Notation:: +* Zeitgenössische Partiturtechniken:: +* Neue Instrumententechniken:: +* Leseliste und interessante Referenzpartituren:: +@end menu + + +@node Tonhöhe und Harmonie in zeitgenössischer Musik +@subsection Tonhöhe und Harmonie in zeitgenössischer Musik +@translationof Pitch and harmony in contemporary music + +Dieser Abschnitt zeigt Lösungen zur Notation von zeitgenössischen +Tonhöhen und Harmonien. + +@menu +* Verweise zu Tonhöhe und Harmonie in zeitgenössischer Musik:: +* Mikrotonale Notation:: +* Zeitgenössische Tonartvorzeichnung und Harmonie:: +@end menu + + +@node Verweise zu Tonhöhe und Harmonie in zeitgenössischer Musik +@unnumberedsubsubsec Verweise zu Tonhöhe und Harmonie in zeitgenössischer Musik +@translationof References for pitch and harmony in contemporary music + +@itemize +@item +Normale Vierteltonmusik wird behandelt in +@ref{Notenbezeichnungen in anderen Sprachen}. + +@item +Nicht-Standardvorzeichen werden behandelt in +@ref{Tonartbezeichnung}. + +@item Contemporary practises in displaying accidentals are +addressed in @ref{Automatische Versetzungszeichen}. + +@end itemize + + +@node Mikrotonale Notation +@unnumberedsubsubsec Mikrotonale Notation +@translationof Microtonal notation + +@ignore + Discussion of microtones other than quarter-tones, + alternative notations (arrows, slash-flats), etc. +@end ignore + + +@node Zeitgenössische Tonartvorzeichnung und Harmonie +@unnumberedsubsubsec Zeitgenössische Tonartvorzeichnung und Harmonie +@translationof Contemporary key signatures and harmony + +@ignore + Discussion of contemporary key signatures: + non-standard, polytonality, etc. +@end ignore + + +@node Zeitgenössische Notation von Rhythmen +@subsection Zeitgenössische Notation von Rhythmen +@translationof Contemporary approaches to rhythm + +Dieser Abschnitt erklärt Besonderheiten, die wichtig für +die Notation von Rhythmus in zeitgenössischer Musik sind. + +@menu +* Verweise für zeitgenössische Benutzung von Rhythmus:: +* N-tolen in zeitgenössischer Musik:: +* Zeitgenössische Taktarten:: +* Erweiterte polymetrische Notation:: +* Balken in zeitgenössischer Musik:: +* Taktstriche in zeitgenössischer Musik:: +@end menu + + +@node Verweise für zeitgenössische Benutzung von Rhythmus +@unnumberedsubsubsec Verweise für zeitgenössische Benutzung von Rhythmus +@translationof References for contemporary approaches to rhythm + +@itemize +@item +Zusammengesetzte Taktarten werden erklärt in +#@ref{Taktangabe}. + +@item +Grundlegende polymetrische Notation ist erklärt in +@ref{Polymetrische Notation}. + +@item +Gespreizte Balken sind erklärt in +@ref{Gespreizte Balken}. + +@item +Mensurstrich-Taktstriche (zwischen den Systemen) finden sich erklärt in +@ref{Grouping staves}. + +@end itemize + + +@node N-tolen in zeitgenössischer Musik +@unnumberedsubsubsec N-tolen in zeitgenössischer Musik +@translationof Tuplets in contemporary music + +@ignore + Extended discussion of modern tuplets, including + non-standard ratios, nested tuplets and customising + the appearance of tuplets (ratios, note values etc.) + Also how to provide an ossia RhythmicStaff to help + players break down a complicated tuplet. +@end ignore + + +@node Zeitgenössische Taktarten +@unnumberedsubsubsec Zeitgenössische Taktarten +@translationof Contemporary time signatures + +@ignore + Extended discussion of compound time signatures + including Graham P.'s work; non-standard time + signatures such as 7/10, 5/6; alternative + notations such as Orff-esque 4/note, placing a + single time signature across multiple staves, or + placing time signatures at the top of StaffGroups + or systems rather than in the stave. +@end ignore + + +@node Erweiterte polymetrische Notation +@unnumberedsubsubsec Erweiterte polymetrische Notation +@translationof Extended polymetric notation + +@ignore + Extended examples e.g. different instruments + or ensembles with independent tempi +@end ignore + + +@node Balken in zeitgenössischer Musik +@unnumberedsubsubsec Balken in zeitgenössischer Musik +@translationof Beams in contemporary music + +@ignore + Beaming practises, stemlets, Boulez-esque displaying + of beamed notes with flags +@end ignore + + +@node Taktstriche in zeitgenössischer Musik +@unnumberedsubsubsec Taktstriche in zeitgenössischer Musik +@translationof Bar lines in contemporary music + +@ignore + Mensurstriche barlines, tick barlines, etc. +@end ignore + + +@node Graphische Notation +@subsection Graphische Notation +@translationof Graphical notation + + +@node Zeitgenössische Partiturtechniken +@subsection Zeitgenössische Partiturtechniken +@translationof Contemporary scoring techniques + + +@node Neue Instrumententechniken +@subsection Neue Instrumententechniken +@translationof New instrumental techniques + + +@node Leseliste und interessante Referenzpartituren +@subsection Leseliste und interessante Referenzpartituren +@translationof Further reading and scores of interest + +Dieser Abschnitt weist auf einige Bücher, Musikbeispiele und +andere Resourcen hin, die relevant für die Notation +zeitgenössischer Musik sind. + +@menu +* Bücher und Artikel über zeitgenössische Notation:: +* Partituren und Musikbeispiele:: +@end menu + + +@node Bücher und Artikel über zeitgenössische Notation +@unnumberedsubsubsec Bücher und Artikel über zeitgenössische Notation +@translationof Books and articles on contemporary musical notation + +@itemize +@item +@emph{Music Notation in the Twentieth Century: A Practical Guidebook} +von Kurt Stone [W. W. Norton, 1980] + +@item +@emph{Music Notation: A Manual of Modern Practice} von Gardner Read +[Taplinger, 1979] + +@item +@emph{Instrumentation and Orchestration} von Alfred Blatter [Schirmer, +2nd ed. 1997] + +@end itemize + + +@node Partituren und Musikbeispiele +@unnumberedsubsubsec Partituren und Musikbeispiele +@translationof Scores and musical examples + +@ignore + Rough list of composers whose work could be included + (in alphabetical order, perhaps with suggested work): + + Pierre Boulez (Le Marteau Sans Maître?) + John Cage (Freeman Etudes?) + George Crumb (Black Angels?) + Brian Ferneyhough (Transit? Time & Motion Studies?) + Ben Johnston (extended just intonation example) + György Ligeti (several, including Hamburg Concerto) + Krzysztof Penderecki (Threnody to the Victims of Hiroshima?) + Karlheinz Stockhausen (Gruppen?) +@end ignore + diff --git a/Documentation/de/notation/editorial.itely b/Documentation/de/notation/editorial.itely new file mode 100644 index 0000000000..767ce1e996 --- /dev/null +++ b/Documentation/de/notation/editorial.itely @@ -0,0 +1,722 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + +@node Anmerkungen +@section Anmerkungen +@translationof Editorial annotations + +@lilypondfile[quote]{editorial-headword.ly} + +Dieser Abschnitt zeigt die verschiedenen Möglichkeiten, die +Erscheinung der Noten zu ändern und analytische bzw. pädagogische +Anmerkungen anzubringen. + +@menu +* Innerhalb des Systems:: +* Außerhalb des Notensystems:: +@end menu + + +@node Innerhalb des Systems +@subsection Innerhalb des Systems +@translationof Inside the staff + +Dieser Abschnitt zeigt, wie man Elemente hervorhebt, die sich +innerhalb des Notensystems befinden. + +@menu +* Auswahl der Notations-Schriftgröße:: +* Fingersatzanweisungen:: +* Unsichtbare Noten:: +* Farbige Objekte:: +* Klammern:: +* Hälse:: +@end menu + +@node Auswahl der Notations-Schriftgröße +@unnumberedsubsubsec Auswahl der Notations-Schriftgröße +@translationof Selecting notation font size + +@cindex Font, Größe ändern für Notation +@cindex Schriftgröße (Notation) ändern +@cindex Auswahl von Schriftgröße (Notation) +@cindex Noten, Schriftgröße +@cindex Notenköpfe +@funindex fontSize +@funindex font-size +@funindex magstep +@funindex \huge +@funindex \large +@funindex \normalsize +@funindex \small +@funindex \tiny +@funindex \teeny +@funindex huge +@funindex large +@funindex normalsize +@funindex small +@funindex tiny +@funindex teeny + +Die Schriftgröße von Notationselementen kann geändert werden. +Damit wird allerdings nicht die Größe von veränderlichen +Symbolen, wie Balken oder Bögen, geändert. + +@warning{Für Schriftgröße von Text, siehe +@ref{Überblick über die wichtigsten Textbeschriftungsbefehle}.} + +@lilypond[verbatim,quote,relative=2] +\huge +c4.-> d8---3 +\large +c4.-> d8---3 +\normalsize +c4.-> d8---3 +\small +c4.-> d8---3 +\tiny +c4.-> d8---3 +\teeny +c4.-> d8---3 +@end lilypond + +Intern wird hiermit die @code{fontSize}-Eigenschaft gesetzt. Sie +wird für alle Layout-Objekte definiert. Der Wert von +@code{font-size} ist eine Zahl, die die Größe relativ zur Standardgröße +für die aktuelle Systemhöhe angibt. Jeder Vergrößerungsschritt bedeutet +etwa eine Vergrößerung um 12% der Schriftgröße. Mit sechs Schritten wird +die Schriftgröße exakt verdoppelt. Die Scheme-Funktion @code{magstep} +wandelt einen Wert von @code{font-size} in einen Skalierungsfaktor um. +Die @code{font-size}-Eigenschaft kann auch direkt gesetzt werden, so dass +sie sich nur auf bestimmte Layoutobjekte bezieht. + +@lilypond[verbatim,quote,relative=2] +\set fontSize = #3 +c4.-> d8---3 +\override NoteHead #'font-size = #-4 +c4.-> d8---3 +\override Script #'font-size = #2 +c4.-> d8---3 +\override Stem #'font-size = #-5 +c4.-> d8---3 +@end lilypond + +@cindex Standard-Schriftgröße (Notation) +@cindex Schriftgröße (Notation), Standard +@funindex font-interface +@funindex font-size + +Schriftgrößenänderungen werden erreicht, indem man die Design-Schriftgröße +nimmt, die der gewünschten am nächsten kommt, und sie dann skaliert. Die +Standard-Schriftgröße (für @code{font-size = #0}) hängt von der +Standard-Systemhöhe ab. Für ein Notensystem von 20pt wird eine Schriftgröße +von 10pt ausgewählt. + +Die @code{font-size}-Eigenschaft kann nur für die Layoutobjekte gesetzt +werden, die Schrift-Dateien benutzen. Das sind die, welche die +@code{font-interface}-Layoutschnittstelle unterstützen. + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}. +@endpredefined + +@seealso +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{font-interface}. + + +@node Fingersatzanweisungen +@unnumberedsubsubsec Fingersatzanweisungen +@translationof Fingering instructions + +@cindex Fingersatz +@cindex Fingerwechsel +@cindex Griff: Fingersatz +@funindex \finger +@funindex finger + +Fingersatzanweisungen können folgenderweise notiert werden: +@samp{Note}-@var{Zahl} + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 e-3 +@end lilypond + +Für Fingerwechsel muss eine Textbeschriftung (markup) benutzt werden: + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } +@end lilypond + +@cindex thumb-script +@cindex Fingersatz: Daumen-Zeichen +@funindex \thumb +@funindex thumb + +Mit dem Daumen-Befehl (@code{\thumb}) können die Noten bezeichnet +werden, die mit dem +Daumen (etwa auf dem Cello) gespielt werden sollen. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +@cindex Fingersatz: Akkorde +@cindex Akkorde: Fingersatz + +Fingersätze für Akkorde können auch zu einzelnen Noten +hinzugefügt werden, indem sie innerhalb der Akkord-Klammer +direkt an die Noten angefügt werden. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +Fingersatzanweisungen können manuell oberhalb des Systems gesetzt werden, siehe +@ref{Richtung und Platzierung}. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{avoiding-collisions-with-chord-fingerings.ly} + +@seealso +Notationsreferenz: +@ref{Richtung und Platzierung}. + +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{FingeringEvent}, +@rinternals{fingering-event}, +@rinternals{Fingering_engraver}, +@rinternals{New_fingering_engraver}, +@rinternals{Fingering}. + +@knownissues +Standardmäßig ist eine Zahl größer als 9 nicht unterstützt, wenn man die +Schreibweise @code{@var{Note}-@var{Zahl}} einsetzt. + + +@node Unsichtbare Noten +@unnumberedsubsubsec Unsichtbare Noten +@translationof Hidden notes + +@cindex Noten verstecken +@cindex Verstecken von Noten +@cindex Noten, unsichtbar +@cindex unsichtbare Noten +@cindex durchsichtige Noten +@cindex Noten, durchsichtig +@cindex transparent, Noten +@funindex \hideNotes +@funindex hideNotes +@funindex \unHideNotes +@funindex unHideNotes + +Versteckte (oder unsichtbare oder transparente) Noten können sinnvoll sein, +wenn man Notation für den Theorieunterricht oder Kompositionsübungen +erstellen will. + +@lilypond[verbatim,quote,relative=2] +c4 d +\hideNotes +e4 f +\unHideNotes +g a +\hideNotes +b +\unHideNotes +c +@end lilypond + +Notationsobjekte, die an die unsichtbaren Noten angefügt sind, sind weiterhin +sichtbar. + +@lilypond[verbatim,quote,relative=2] +c4( d) +\hideNotes +e4(\p f)-- +@end lilypond + + +@predefined +@code{\hideNotes}, +@code{\unHideNotes}. +@endpredefined + +@seealso +Handbuch zum Lernen: +@rlearning{Sichtbarkeit und Farbe von Objekten}. + +Notationsreferenz: +@ref{Unsichtbare Pausen}, +@ref{Sichtbarkeit von Objekten}, +@ref{Systeme verstecken}. + +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{Note_spacing_engraver}, +@rinternals{NoteSpacing}. + + +@node Farbige Objekte +@unnumberedsubsubsec Farbige Objekte +@translationof Coloring objects + +@cindex Objekte, farbig +@cindex Farbe +@cindex Einfärben von Objekten +@cindex Noten, farbig +@cindex farbige Noten +@cindex X11-Farben +@cindex with-color +@funindex color +@funindex \with-color +@funindex with-color +@funindex x11-color + +Einzelnen Objekten können einfach eigene Farben zugewiesen werden. +Gültige Farben-Bezeichnungen sind aufgelistet in @ref{Liste der Farben}. + +@lilypond[verbatim,quote,relative=2] +\override NoteHead #'color = #red +c4 c +\override NoteHead #'color = #(x11-color 'LimeGreen) +d +\override Stem #'color = #blue +e +@end lilypond + +Die ganze Farbpalette, die für X11 definiert ist, kann mit der +Scheme-Funktion @code{x11-color} benutzt werden. Diese Funktion +hat ein Argument: entweder ein Symbol in der Form @code{'@var{FooBar}} +oder eine Zeichenkette in der Form @code{"@var{FooBar}"}. Die erste +Form ist schneller zu schreiben und effizienter. Mit der zweiten +Form ist es allerdings möglich, auch Farbbezeichnungen einzusetzen, +die aus mehr als einem Wort bestehen. + +Wenn @code{x11-color} die angegebene Farbbezeichnung nicht kennt, wird +Schwarz eingesetzt. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +gis8 a +\override Beam #'color = #(x11-color "medium turquoise") +gis a +\override Accidental #'color = #(x11-color 'DarkRed) +gis a +\override NoteHead #'color = #(x11-color "LimeGreen") +gis a +% this is deliberate nonsense; note that the stems remain black +\override Stem #'color = #(x11-color 'Boggle) +b2 cis +@end lilypond + +@cindex RGB-Farbe +@cindex Farbe, RGB +@funindex rgb-color + +Exakte RGB-Farben können mit Hilfe der Scheme-Funktion @code{rgb-color} +definiert werden. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +\override Stem #'color = #(rgb-color 0 0 0) +gis8 a +\override Stem #'color = #(rgb-color 1 1 1) +gis8 a +\override Stem #'color = #(rgb-color 0 0 0.5) +gis4 a +@end lilypond + +@seealso +Notationsreferenz: +@ref{Liste der Farben}, @ref{Der tweak-Befehl}. + +Schnipsel: +@rlsr{Editorial annotations}. + +@cindex x11-Farbe +@cindex farbige Noten in Akkorden +@cindex Noten, farbige in Akkorden +@cindex Akkorde: farbige Noten +@funindex x11-color + +@knownissues +Eine X11-Farbe hat nicht notwendigerweise exakt denselben Farbton wie +eine ähnlich genannte normale Farbe. + +Nicht alle X11-Farben lassen sich am Webbrowser erkennen, d. h. der +Unterschied etwa zwischen @code{'LimeGreen} und @code{'ForestGreen} wird +eventuell nicht dargestellt. Für die Benutzung im Internet wird +die Benutzung von einfachen Farben nahegelegt (z. B. @code{#blue}, +@code{#green}, @code{#red}). + +Noten in Akkorden können nicht mit @code{\override} eingefärbt werden, +dazu muss @code{\tweak} benutzt werden. Siehe auch @ref{Der tweak-Befehl}. + + + +@node Klammern +@unnumberedsubsubsec Klammern +@translationof Parentheses + +@cindex Geisternoten +@cindex Noten in Klammern +@cindex Klammern um Noten +@cindex editorische Noten +@funindex \parenthesize +@funindex parenthesize + +Objekte können in Klammern gesetzt werden, indem vor ihnen der Befehl +@code{\parenthesize} geschrieben wird. Wenn ein Akkord in Klammern gesetzt +wird, wirkt sich das auf jede Noten im Akkord aus. Innerhalb von einem +Akkord gesetzte Befehle wirken sich auf einzelne Noten aus. + +@lilypond[verbatim,quote,relative=2] +c2 \parenthesize d +c2 \parenthesize +c2 +@end lilypond + +Auch andere Objekte als Noten können in Klammern gesetzt werden. +Wenn Artikulationszeichen in Klammern gesetzt werden sollen, +braucht man ein Minuszeichen vor dem @code{\parenthesize}-Befehl. + +@lilypond[verbatim,quote,relative=2] +c2-\parenthesize -. d +c2 \parenthesize r +@end lilypond + +@seealso +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{Parenthesis_engraver}, +@rinternals{ParenthesesItem}, +@rinternals{parentheses-interface}. + +@knownissues + +Wenn man einen Akkord einklammert, wird um jede Note eine eigene Klammer +gesetzt, anstatt den gesamten Akkord in eine große Klammer zu fassen. + + + +@node Hälse +@unnumberedsubsubsec Hälse +@translationof Stems + +@cindex Hals +@cindex Hals, unsichtbar +@cindex Notenhals, unsichtbar +@cindex unsichtbarer Notenhals +@cindex Hals, Richtung +@cindex Richtung von Notenhälsen +@cindex Notenhals, Richtung + +@funindex \stemNeutral +@funindex \stemUp +@funindex \stemDown +@funindex stemNeutral +@funindex stemUp +@funindex stemDown + +Immer, wenn das Programm eine Note findet, wird automatisch +ein Notenhals (@rinternals{Stem}) -Objekt erzeugt. Auch +für ganze Noten und Pausen werden sie erzeugt, aber unsichtbar +gemacht. + +Hälse können manuell gesetzt werden, um nach oben oder unten zu +zeigen, siehe @ref{Direction and placement}. + +@predefined +@code{\stemUp} (Hälse nach oben), +@code{\stemDown} (Hälse nach unten), +@code{\stemNeutral} (Hälse je nach Notenposition). +@endpredefined + +@snippets + +@cindex Hals, Richtung von +@cindex Notenhals, Richtung von +@cindex Hals nach oben +@cindex Hals nach unten +@cindex Hals neutral + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{default-direction-of-stems-on-the-center-line-of-the-staff.ly} + +@seealso +Notationsreferenz: +@ref{Richtung und Platzierung}. + +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{Stem_engraver}, +@rinternals{Stem}, +@rinternals{stem-interface}. + + + +@node Außerhalb des Notensystems +@subsection Außerhalb des Notensystems +@translationof Outside the staff + +Dieser Abschnitt zeigt, wie man Elemente im System von +außerhalb des Systems hervorhebt. + +@menu +* Erklärungen in Ballonform:: +* Gitternetzlinien:: +* Analyseklammern:: +@end menu + +@node Erklärungen in Ballonform +@unnumberedsubsubsec Erklärungen in Ballonform +@translationof Balloon help + +@cindex Ballon +@cindex Blase +@cindex Erklärungsblase +@cindex Notation, Erklärungen +@cindex Anmerkung, Blase +@cindex Hilfe, Blase +@cindex Textblasen +@funindex \balloonGrobText +@funindex \balloonText +@funindex Balloon_engraver +@funindex balloonGrobText +@funindex balloonText +@funindex balloonLengthOn +@funindex balloonLengthOff +@funindex \balloonLengthOn +@funindex \balloonLengthOff + + +Notationselemente können bezeichnet und markiert werden, indem um sie eine +rechteckige Blase gezeichnet wird. Dies ist vor allem dazu da, Notation +zu erklären. + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + 2. +} +@end lilypond + +Es gibt zwei Funktionen, @code{balloonGrobText} und +@code{balloonText}; die erste wird auf gleiche Art wie ein +@w{@code{\once \override}} eingesetzt umd Text an einen Grob zu +hängen, die zweite funktioniert wie ein @code{\tweak} und +wird üblicherweise innerhalb von Akkorden eingesetzt, um Text +an einzelne Noten zu hängen. + +Textblasen beeinflussen normalerweise die Positionierung der Notation, +aber das kann geändert werden. + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonLengthOff + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + \balloonLengthOn + 2. +} +@end lilypond + + +@predefined +@code{\balloonLengthOn}, +@code{\balloonLengthOff}. +@endpredefined + +@seealso +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{Balloon_engraver}, +@rinternals{BalloonTextItem}, +@rinternals{balloon-interface}. + + +@node Gitternetzlinien +@unnumberedsubsubsec Gitternetzlinien +@translationof Grid lines + +@cindex Gitterlinien +@cindex Linien, Gitter +@cindex vertikale Linien zwischen Systemen +@cindex Linien zwischen Systemen +@funindex Grid_point_engraver +@funindex Grid_line_span_engraver +@funindex gridInterval + +Vertikale Linien können zwischen Systemen gesetzt werden, die mit den +Noten synchronisiert sind. + +Der @code{Grid_point_engraver} muss benutzt werden, um die Endpunkte +der Linien zu definieren, und der @code{Grid_line_span_engraver} wird +benutzt, um dann die Linien zu setzen. Der Standard ist, dass die +Gitterlinien unter den Noten und zur linken Seite des Notenkopfes +gesetzt werden. Sie reichen von der Mitte eines Systems bis zur +Mitte des anderen. Mit @code{gridInterval} wird die Dauer zwischen +den Linien festgesetzt. + +@lilypond[verbatim,quote] +\layout { + \context { + \Staff + \consists "Grid_point_engraver" + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + } +} + +\score { + \new ChoirStaff << + \new Staff \relative c'' { + \stemUp + c4. d8 e8 f g4 + } + \new Staff \relative c { + \clef bass + \stemDown + c4 g' f e + } + >> +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{grid-lines--changing-their-appearance.ly} + + +@seealso +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{Grid_line_span_engraver}, +@rinternals{Grid_point_engraver}, +@rinternals{GridLine}, +@rinternals{GridPoint}, +@rinternals{grid-line-interface}, +@rinternals{grid-point-interface}. + + +@node Analyseklammern +@unnumberedsubsubsec Analyseklammern +@translationof Analysis brackets + +@cindex Klammern +@cindex Phrasierungsklammern +@cindex Klammern, Analyse +@cindex Analyse +@cindex musikwissenschaftliche Analyse +@cindex Notengruppenklammer +@cindex horizontale Klammer +@cindex Musikanalyse +@funindex Horizontal_bracket_engraver +@funindex \startGroup +@funindex startGroup +@funindex \stopGroup +@funindex stopGroup + +Klammern über dem System werden in der Musikanalyse benutzt, um +strukturelle Einheiten der Musik zu markieren. Einfache +horizontale Klammern werden von LilyPond unterstützt. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c2\startGroup + d\stopGroup +} +@end lilypond + +Analyseklammern können verschachtelt sein. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c4\startGroup\startGroup + d4\stopGroup + e4\startGroup + d4\stopGroup\stopGroup +} +@end lilypond + +@seealso +Schnipsel: +@rlsr{Editorial annotations}. + +Referenz der Interna: +@rinternals{Horizontal_bracket_engraver}, +@rinternals{HorizontalBracket}, +@rinternals{horizontal-bracket-interface}, +@rinternals{Staff}. + diff --git a/Documentation/de/notation/expressive.itely b/Documentation/de/notation/expressive.itely new file mode 100644 index 0000000000..7fe74cf40c --- /dev/null +++ b/Documentation/de/notation/expressive.itely @@ -0,0 +1,1355 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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" + +@c Translators: Till Paala + +@node Ausdrucksbezeichnungen +@section Ausdrucksbezeichnungen +@translationof Expressive marks + +@lilypondfile[quote]{expressive-headword.ly} + +Dieser Abschnitt zeigt verschiedene Ausdrucksbezeichnungen, +die zur Partitur hinzugefügt werden können. + +@menu +* Ausdrucksbezeichnungen an Noten angehängt:: +* Ausdrucksbezeichnungen als Bögen:: +* Ausdrucksbezeichnungen als Linien:: +@end menu + + +@node Ausdrucksbezeichnungen an Noten angehängt +@subsection Ausdrucksbezeichnungen an Noten angehängt +@translationof Expressive marks attached to notes + +Dieser Abschnitt erklärt, wie man Ausdrucksbezeichnungen erstellt, +die an Noten gebunden sind: Artikulationszeichen, Ornamente und +Dynamikzeichen. Es werden auch Methoden gezeigt, eigene +Ausdrucksbezeichnungen zu erstellen. + + +@menu +* Artikulationszeichen und Verzierungen:: +* Dynamik:: +* Neue Lautstärkezeichen:: +@end menu + +@node Artikulationszeichen und Verzierungen +@unnumberedsubsubsec Artikulationszeichen und Verzierungen +@translationof Articulations and ornamentations + +@cindex Artikulationszeichen +@cindex Beschriftung +@cindex Zeichen +@cindex Ornament +@cindex Espressivo +@cindex Fermate +@cindex Anstrich +@cindex Abstrich +@cindex Pedal-Bezeichnung +@cindex Orgelpedal-Bezeichnung +@cindex Doppelschlag +@cindex offen +@cindex gestopft +@cindex gedämpft +@cindex Flageolet +@cindex Triller +@cindex Praller +@cindex Mordent +@cindex Daumenbezeichnung +@cindex Segno +@cindex Coda +@cindex Varcoda +@cindex D'al Segno + +@funindex \accent +@funindex \marcato +@funindex \staccatissimo +@funindex \espressivo +@funindex \staccato +@funindex \tenuto +@funindex \portato +@funindex \upbow +@funindex \downbow +@funindex \flageolet +@funindex \thumb +@funindex \lheel +@funindex \rheel +@funindex \ltoe +@funindex \rtoe +@funindex \open +@funindex \halfopen +@funindex \stopped +@funindex \snappizzicato +@funindex \turn +@funindex \reverseturn +@funindex \trill +@funindex \prall +@funindex \mordent +@funindex \prallprall +@funindex \prallmordent +@funindex \upprall +@funindex \downprall +@funindex \upmordent +@funindex \downmordent +@funindex \pralldown +@funindex \prallup +@funindex \lineprall +@funindex \signumcongruentiae +@funindex \shortfermata +@funindex \fermata +@funindex \longfermata +@funindex \verylongfermata +@funindex \fermataMarkup +@funindex \segno +@funindex \coda +@funindex \varcoda + +@funindex - + +Eine Vielfalt an Symbolen kann über und unter den Noten erscheinen, +um zu markieren, auf welche Art die Note ausgeführt werden soll. +Hierzu wird folgende Syntax benutzt: + +@example +@var{Note}\@var{Bezeichnung} +@end example + +Die möglichen Werte für @var{Bezeichnung} sind aufgelistet in +@ref{Liste der Artikulationszeichen}. Ein Beispiel: + +@lilypond[verbatim,quote,relative=2] +c4\staccato c\mordent b2\turn +c1\fermata +@end lilypond + +@cindex Akzent +@cindex Marcato +@cindex Staccatissimo +@cindex Espressivo +@cindex Staccato +@cindex Portato +@cindex Tenuto + +Einige dieser Artikulationszeichen haben eine Abkürzung, damit +es einfacher ist, sie zu schreiben. Die Abkürzung wird an die +Notenbezeichnung gehängt, wobei ihre Syntax aus einem Minuszeichen +@code{-} besteht, gefolgt von dem Symbol, das dem +Artikulationszeichen zugeordnet ist. Es gibt diese Abkürzungen +für @notation{marcato}, +@notation{stopped} (gedämpft), @notation{tenuto}, +@notation{staccatissimo}, @notation{accent}, @notation{staccato}, +und @notation{portato}. Die ihnen entsprechenden Symbole +werden also folgendermaßen notiert: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +Die Regeln für die standardmäßige Platzierung von +Artikulationszeichen werden in der Datei @file{scm/script.scm} +definiert. Artikulationszeichen und Ornamente können manuell +über oder unter dem System gesetzt werden, siehe +@ref{Richtung und Platzierung}. + +Artikulationszeichen sind @code{Script}-Objekte. Ihre Eigenschaften +werden ausführlich in @rinternals{Script} beschrieben. + +Artikulationen können neben Noten auch an Pausen gehängt werden, aber +sie können nicht an Mehrtaktpausen gehängt werden. Ein besonderer +Befehl, @code{fermataMarkup}, wurde definiert, damit man eine Fermate +an eine Mehrtaktpause anfügen kann (und nur hieran). Damit wird ein +@code{MultiMeasureRestText}-Objekt erstellt. + +@lilypond[verbatim,quote,relative=2] +\override Script #'color = #red +\override MultiMeasureRestText #'color = #blue +a2\fermata r\fermata +R1\fermataMarkup +@end lilypond + +Zusätzlich zu den Artikulationszeichen können auch Text und Beschriftung +an Noten angehängt werden. Siehe auch @ref{Textarten}. + +Zu weiterer Information über die Reihenfolge von Scripten und +TextScripten, die an Noten angehängt werden, siehe +@rlearning{Positionierung von Objekten}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{modifying-default-values-for-articulation-shorthand-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-vertical-ordering-of-scripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-a-delayed-turn.ly} + + +@seealso +Glossar: +@rglos{tenuto}, +@rglos{accent}, +@rglos{staccato}, +@rglos{portato}. + +Handbuch zum Lernen: +@rlearning{Positionierung von Objekten}. + +Notationsreferenz: +@ref{Textarten}, +@ref{Richtung und Platzierung}, +@ref{Liste der Artikulationszeichen}, +@ref{Triller}. + +Installierte Dateien: +@file{scm/script.scm}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{Script}, +@rinternals{TextScript}. + + +@node Dynamik +@unnumberedsubsubsec Dynamik +@translationof Dynamics + +@cindex Lautstärke +@cindex Dynamik +@cindex absolute Lautstärke + +@funindex \ppppp +@funindex ppppp +@funindex \pppp +@funindex pppp +@funindex \ppp +@funindex ppp +@funindex \pp +@funindex pp +@funindex \p +@funindex p +@funindex \mp +@funindex mp +@funindex \mf +@funindex mf +@funindex \f +@funindex f +@funindex \ff +@funindex ff +@funindex \fff +@funindex fff +@funindex \ffff +@funindex ffff +@funindex \fffff +@funindex fffff +@funindex \fp +@funindex fp +@funindex \sf +@funindex sf +@funindex \sff +@funindex sff +@funindex \sp +@funindex sp +@funindex \spp +@funindex spp +@funindex \sfz +@funindex sfz +@funindex \rfz +@funindex rfz + +Absolute Dynamikbezeichnung wird mit Befehlen nach den Noten +angezeigt, etwa @code{c4\ff}. Die vordefinierten Befehle lauten: +@code{\ppppp}, @code{\pppp}, @code{\ppp}, +@code{\pp}, @code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, +@code{\fff}, @code{\ffff}, @code{fffff}, @code{\fp}, @code{\sf}, @code{\sff}, +@code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}. Die +Dynamikzeichen können manuell unter- oder oberhalb des Systems +platziert werden, siehe @ref{Richtung und Platzierung}. + +@lilypond[verbatim,quote,relative=2] +c2\ppp c\mp +c2\rfz c^\mf +c2_\spp c^\ff +@end lilypond + +@cindex Crescendo-Klammer +@cindex Klammer, Crescendo +@cindex Crescendo +@cindex Decrescendo +@cindex Diminuendo + +@funindex \< +@funindex \> +@funindex \! +@funindex \cr +@funindex cr +@funindex \decr +@funindex decr + +Eine @notation{Crescendo}-Klammer wird mit dem Befehl +@code{\<} begonnen und mit @code{\!}, einem absoluten Dynamikbefehl oder einer weiteren Crescendo- oder +Decrescendo-Klammer beendet. Ein @notation{Decrescendo} +beginnt mit @code{\>} und wird auch beendet mit @code{\!}, +einem absoluten Dynamikbefehl oder einem weiteren +Crescendo oder Decrescendo. @code{\cr} und @code{\decr} können +anstelle von @code{\<} und +@code{\>} benutzt werden. Die Befehle ergeben standardmäßig +Crescendo-Klammern. + +@lilypond[verbatim,quote,relative=2] +c2\< c\! +d2\< d\f +e2\< e\> +f2\> f\! +e2\> e\mp +d2\> d\> +c1\! +@end lilypond + +Eine Crescendo-Klammer, die mit @code{\!} beendet wird, endet an der rechten +Seite der Note, welcher @code{\!} zugeordnet ist. In dem Fall, dass es durch +den Beginn eines anderen @notation{crescendo}- oder @notation{decrescendo}-Zeichens +beendet wird, endet es in der Mitt der Note, welche das nächste @code{\<} +oder @code{\>} angehängt hat. Die nächste Klammer beginnt dann am rechten +Rand der selben Note anstatt dem normalerweise linken Rand, wenn die +vorherige Klammer mit @code{\!} beendet worden wäre. + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\< a | c4 a c\! a\< | c4 a c a\! +@end lilypond + +@cindex mehre Dynamikzeichen an einer Note +@cindex Dynamik, mehrere Zeichen an einer Note + +Leere Pausenzeichen werden benötigt, um mehrere Zeichen für eine Note +zu notieren. Das ist insbesondere nützlich, wenn man @notation{crescendo} +und @notation{decrescendo} zu der selben Note hinzufügen will: + +@lilypond[verbatim,quote,relative=2] +c4\< c\! d\> e\! +<< f1 { s4 s4\< s4\> s4\! } >> +@end lilypond + +@cindex Espressivo-Artikulation + +@funindex \espressivo +@funindex espressivo + +Der @code{\espressivo}-Befehl kann eingesetzt werden, um crescendo +und decrescendo für die selbe Note anzuzeigen. Dieser Befehl ist +jedoch als Artikulation, nicht als Dynamikzeichen implementiert. + +@lilypond[verbatim,quote,relative=2] +c2 b4 a +g1\espressivo +@end lilypond + +@funindex \cresc +@funindex cresc +@funindex \decresc +@funindex decresc +@funindex \dim +@funindex dim +Mit Text gesetzte Crescendo-Bezeichnungen beginnen mit @code{\cresc}. +Mit Text gesetzte Decrescendo-Bezeichnungen beginnen mit @code{\decresc} +oder @code{\dim}. Fortsetzungslinien werden gesetzt, wenn sie benötigt werden. + +@lilypond[verbatim,quote,relative=2] +g8\cresc a b c b c d e\mf | +f8\decresc e d c e\> d c b | +a1\dim ~ | +a2. r4\! | +@end lilypond + + + +@funindex \crescTextCresc +@funindex crescTextCresc +@funindex \dimTextDecresc +@funindex dimTextDecresc +@funindex \dimTextDecr +@funindex dimTextDecr +@funindex \dimTextDim +@funindex dimTextDim +@funindex \crescHairpin +@funindex crescHairpin +@funindex \dimHairpin +@funindex dimHairpin + +Als Text gesetzte Dynamik-Bezeichnungen können auch die Crescendo-Klammern +ersetzen: + +@lilypond[verbatim,quote,relative=2] +\crescTextCresc +c4\< d e f\! | +\dimTextDecresc +g4\> e d c\! | +\dimTextDecr +e4\> d c b\! | +\dimTextDim +d4\> c b a\! | +\crescHairpin +\dimHairpin +c4\< d\! e\> d\! | +@end lilypond + +Um neue absolute Dynamikzeichen oder Text, der mit ihnen +angeordnet wird, zu erstellen, siehe @ref{Neue Lautstärkezeichen}. + +@cindex Dynamik, vertikale Position +@cindex vertikale Position von Dynamik + +Vertikale Position der Zeichen wird von der Funktion +@rinternals{DynamicLineSpanner} verwaltet. +@funindex \dynamicUp +@funindex dynamicUp +@funindex \dynamicDown +@funindex dynamicDown +@funindex \dynamicNeutral +@funindex dynamicNeutral + +Es gibt einen besonderen @code{Dynamics}-Kontext, um Crescendi und Decrescendi +auf einer eigenen Zeile zu notieren. Mit leeren Pausen (@code{s}) werden die +Dauern gesetzt. (Auch Noten in einem @code{Dynamics}-Kontext nehmen eine Dauer +ein, werden aber nicht gesetzt.) Der @code{Dynamics}-Kontext ist sehr nützlich, +um andere Elemente wie Textbeschriftung, Text-Strecker und Klavierpedalbezeichnungen +aufzunehmen. + +@lilypond[verbatim,quote] +<< + \new Staff \relative c' { + c2 d4 e | + c4 e e,2 | + g'4 a g a | + c1 | + } + \new Dynamics { + s1\< | + s1\f | + s2\dim s2-"rit." | + s1\p | + } +>> +@end lilypond + +@predefined +@code{\dynamicUp}, +@code{\dynamicDown}, +@code{\dynamicNeutral}, +@code{\crescTextCresc}, +@code{\dimTextDim}, +@code{\dimTextDecr}, +@code{\dimTextDecresc}, +@code{\crescHairpin}, +@code{\dimHairpin}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-hairpin-behavior-at-bar-lines.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-minimum-length-of-hairpins.ly} + +@cindex al niente +@cindex niente, al + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-hairpins-using-al-niente-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligned-dynamics-and-textscripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{hiding-the-extender-line-for-text-dynamics.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-text-and-spanner-styles-for-text-dynamics.ly} + + +@seealso +Glossar: +@rglos{al niente}, +@rglos{crescendo}, +@rglos{decrescendo}, +@rglos{hairpin}. +Handbuch zum Lernen: +@rlearning{Artikulationszeichen und Lautstärke}. + +Notationsreferenz: +@ref{Richtung und Platzierung}, +@ref{Neue Lautstärkezeichen}, +@ref{Was geht in die MIDI-Ausgabe}, +@ref{MIDI-Lautstärke kontrollieren}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{DynamicText}, +@rinternals{Hairpin}, +@rinternals{DynamicLineSpanner}, +@rinternals{Dynamics}. + + +@node Neue Lautstärkezeichen +@unnumberedsubsubsec Neue Lautstärkezeichen +@translationof New dynamic marks + +@cindex neue Dynamikzeichen +@cindex eigene Dynamikzeichen +@cindex Dynamikzeichen, eigene + +Die einfachste Art, eigene Dynamikbezeichnungen zu erstellen, +ist die Benutzung von @code{\markup}-(Textbeschriftungs)-Objekten. + +@lilypond[verbatim,quote] +moltoF = \markup { molto \dynamic f } + +\relative c' { + 16_\moltoF + 2.. +} +@end lilypond + +@cindex Dynamikzeichen, Anmerkung +@cindex Dynamikzeichen, Klammer +@cindex editorische Dynamikzeichen +@funindex \bracket +@funindex bracket +@funindex \dynamic +@funindex dynamic + +Mit einer Textbeschriftung können editorische Dynamikzeichen +(in runden oder eckigen Klammern) erstellt werden. Die Syntax +für den Textbeschriftungsmodus wird erklärt in +@ref{Text formatieren}. + +@lilypond[verbatim,quote] +roundF = \markup { + \center-align \concat { \bold { \italic ( } + \dynamic f \bold { \italic ) } } } +boxF = \markup { \bracket { \dynamic f } } +\relative c' { + c1_\roundF + c1_\boxF +} +@end lilypond + +@cindex make-dynamic-script +@funindex make-dynamic-script + +Einfache, mittig gesetzte Dynamikzeichen können schnell mit der +@code{make-dynamic-script}-Funktion erstellt werden. + +@lilypond[verbatim,quote] +sfzp = #(make-dynamic-script "sfzp") +\relative c' { + c4 c c\sfzp c +} +@end lilypond + +Allgemein gesagt kann @code{make-dynamic-script} jegliches +Textbeschriftungsobjekt als Argument haben. Die +Schriftart für Dynamikzeichen enthält nur die Buchstaben +@code{f,m,p,r,s} sowie @code{z}; ein Dynamikzeichen, das +anderen Text oder Satzzeichen enthalten soll, benötigt +Textbeschriftungsbefehle, die die normale Schriftart +einschalten, etwa @code{\normal-text}. Die Funktion +@code{make-dynamic-script} sollte anstelle einer normalen +Textbeschriftung vor allem deshalb benutzt werden, weil auf +diese Weise die vertikale Ausrichtung von den Textbeschriftungen +(engl. markup) und den spitzen Klammern an der selben Linie +gewährleistet wird. + +@lilypond[verbatim,quote] +roundF = \markup { \center-align \concat { + \normal-text { \bold { \italic ( } } + \dynamic f + \normal-text { \bold { \italic ) } } } } +boxF = \markup { \bracket { \dynamic f } } +mfEspress = \markup { \center-align \line { + \hspace #3.7 mf \normal-text \italic espress. } } +roundFdynamic = #(make-dynamic-script roundF) +boxFdynamic = #(make-dynamic-script boxF) +mfEspressDynamic = #(make-dynamic-script mfEspress) +\relative c' { + c4_\roundFdynamic\< d e f + g,1~_\boxFdynamic\> + g1 + g'1~\mfEspressDynamic + g1 +} +@end lilypond + +Anstelle dessen kann auch die Scheme-Form des Beschriftungs-Modus +verwendet werden. Seine Syntax ist erklärt in +@rextend{Beschriftungskonstruktionen in Scheme}. + +@lilypond[verbatim,quote] +moltoF = #(make-dynamic-script + (markup #:normal-text "molto" + #:dynamic "f")) +\relative c' { + 16 + 2..\moltoF +} +@end lilypond + +Die Auswahl von Schriftarten in Textbeschriftungen ist erklärt in +@ref{Überblick über die wichtigsten Textbeschriftungsbefehle}. + + +@seealso +Notationsreferenz: +@ref{Text formatieren}, +@ref{Überblick über die wichtigsten Textbeschriftungsbefehle}, +@ref{Was geht in die MIDI-Ausgabe}, +@ref{MIDI-Lautstärke kontrollieren}. + +Schnipsel: +@rlsr{Expressive marks}. + +Erweitert: +@ref{Beschriftungskonstruktionen in Scheme}. + + + +@node Ausdrucksbezeichnungen als Bögen +@subsection Ausdrucksbezeichnungen als Bögen +@translationof Expressive marks as curves + +Dieser Abschnitt erklärt, wie man verschiedene gebogene +Ausdrucksbezeichnungen erstellt: Legato- und Phrasierungsbögen, +Atemzeichen und Glissandos zu unbestimmten Tonhöhen. + +@menu +* Legatobögen:: +* Phrasierungsbögen:: +* Atemzeichen:: +* Glissando zu unbestimmter Tonhöhe:: +@end menu + +@node Legatobögen +@unnumberedsubsubsec Legatobögen +@translationof Slurs + +@cindex Legatobögen + +Ein Legatobogen (engl. slur) zeigt an, dass die Noten +@emph{legato} gespielt werden sollen. Er wird mit Klammern +hinter den Notenwerten notiert. + +@warning{In polyphoner Musik muss ein Legatobogen in der gleichen +Stimme beendet werden, in der er begonnen wurde.} + +@lilypond[verbatim,quote,relative=2] +f4( g a) a8 b( +a4 g2 f4) +2( 2) +@end lilypond + +@cindex Bögen, manuelle Platzierung +@cindex Legatobögen, manuelle Platzierung +@cindex Bögen, unter Noten +@cindex Bögen, über Noten +@funindex \slurDown +@funindex slurDown +@funindex \slurNeutral +@funindex slurNeutral + + +Legatobögen können manuell ober- oder unterhalb des Notensystems +besetzt werden, siehe +@ref{Richtung und Platzierung}. + +@cindex Phrasierungsbögen +@cindex mehrfache Bögen +@cindex gleichzeitige Bögen +@cindex Bögen, Phrasierung +@cindex Bögen, mehrfach +@cindex Bögen, gleichzeitig + +Gleichzeitige, überlappende Legatobögen sind nicht erlaubt, aber +ein Phrasierungsbogen kann einen Legatobogen überlappen. Damit +können zwei Bögen gleichzeitig ausgegeben werden. Siehe auch +@ref{Phrasierungsbögen}. + +@cindex Legatobogen-Stil +@cindex durchgehender Legatobogen +@cindex massiver Legatobogen +@cindex gepunkteter Legatobogen +@cindex gestrichelter Legatobogen +@cindex Legatobogen, massiv +@cindex Legatobogen, gepunktet +@cindex Legatobogen, gestrichelt +@cindex Stil von Legatobögen +@funindex \slurDashed +@funindex slurDashed +@funindex \slurDotted +@funindex slurDotted +@funindex \slurSolid +@funindex slurSolid + +Legatobögen können durchgehend, gepunktet oder gestrichelt dargestellt +werden. Standard ist der durchgehende Bogen: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashed +g4( e c2) +\slurDotted +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurHalfDashed +@funindex slurHalfDashed +@funindex \slurHalfSolid +@funindex slurHalfSolid +@cindex Bogen, halb gestrichelt, halb durchgehend + +Bögen können auch halb gestrichelt (die erste Hälfte gestrichelt, +die zweite Hälfte durchgehend) erstellt werden, oder als +halb durchgehend (die erste Hälfte durchgehend, die +zweite Hälfte gestrichelt: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurHalfDashed +g4( e c2) +\slurHalfSolid +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurDashPattern +@funindex slurDashPattern +@cindex Bogen, Strichelung definieren + +Eigene Muster für die Strichelung können definiert werden: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashPattern #0.7 #0.75 +g4( e c2) +\slurDashPattern #0.5 #2.0 +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurUp +@funindex slurUp + +@predefined +@code{\slurUp}, +@code{\slurDown}, +@code{\slurNeutral}, +@code{\slurDashed}, +@code{\slurDotted}, +@code{\slurHalfDashed}, +@code{\slurHalfSolid}, +@code{\slurDashPattern}, +@code{\slurSolid}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-double-slurs-for-legato-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-text-markups-inside-slurs.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-slurs-with-complex-dash-structure.ly} + + +@seealso +Glossar: +@rglos{slur}. + +Handbuch zum Lernen: +@rlearning{Über die Nicht-Schachtelung von Klammern und Bindebögen}. + +Notationsreferenz: +@ref{Richtung und Platzierung}, +@ref{Phrasierungsbögen}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{Slur}. + + + +@node Phrasierungsbögen +@unnumberedsubsubsec Phrasierungsbögen +@translationof Phrasing slurs + +@cindex Phrasierungsbögen +@cindex Phrasierungszeichen +@cindex Bogen zur Phrasierung +@cindex Legatobogen zur Phrasierung +@funindex \( +@funindex \) + +Ein Phrasierungsbogen verbindet Noten und wird verwendet, um einen +musikalischen Ausdruck anzuzeigen. Er wird mit den Befehlen +@code{\(} und @code{\)} eingegeben. + +@lilypond[verbatim,quote,relative=2] +c4\( d( e) f( +e2) d\) +@end lilypond + +@funindex \phrasingSlurUp +@funindex phrasingSlurUp +@funindex \phrasingSlurDown +@funindex phrasingSlurDown +@funindex \phrasingSlurNeutral +@funindex phrasingSlurNeutral + +Im typographischen Sinne verhalten sich Phrasierungsbögen genauso wie +Legatobögen. Sie werden aber als eigene Objekte behandelt. Ein +@code{\slurUp} hat also keine Auswirkung auf die Phrasierungsbögen. +Phrasierungsbögen können manuell oberhalb oder unterhalb des +Notensystems gesetzt werden, siehe +@ref{Richtung und Platzierung}. + +@cindex gleichzeitige Phrasierungsbögen +@cindex mehrere Phrasierungsbögen +@cindex Bögen, gleichzeitige Phrasierung +@cindex Phrasierungsbögen, gleichzeitig +@cindex Phrasierungsbögen, mehrfach + +Simultane oder überlappende Phrasierungsbögen sind nicht +erlaubt. + +@funindex phrasingSlurDashed +@funindex \phrasingSlurDashed +@funindex \phrasingSlurDotted +@funindex phrasingSlurDotted +@funindex \phrasingSlurSolid +@funindex phrasingSlurSolid +@cindex Phrasierungsbögen, gestrichelt +@cindex gestrichelter Phrasierungsbogen +@cindex Phrasierungsbögen, gepunktet +@cindex gepunkteter Phrasierungsbogen + +Phrasierungsbögen können durchgehend, gepunktet oder gestrichelt dargestellt +werden. Standard ist der durchgehende Bogen: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashed +g4\( e c2\) +\phrasingSlurDotted +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +funindex phrasingSlurHalfDashed +@funindex \phrasingSlurHalfDashed +@funindex \phrasingSlurHalfSolid +@funindex phrasingSlurHalfSolid + +@cindex Phrasierungsbogen, halb durchgehend, halb gestrichelt +@cindex Bogen, halb durchgehend, halb gestrichelt + +Phrasierungsbögen können auch als halbgestrichelt dargestellt +werden (die erste Hälfte gestrichelt, die zweite Hälfte durchgehend, +oder halb durchgehend (die erste Hälfte durchgehend, die zweite +gestrichelt): + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurHalfDashed +g4\( e c2\) +\phrasingSlurHalfSolid +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex \phrasingSlurDashPattern +@funindex phrasingSlurDashPattern +@cindex Phrasierungsbogen, Strichelmuster definieren + +Eigene Strichelmuster für Phrasierungsbögen können definiert werden: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashPattern #0.7 #0.75 +g4\( e c2\) +\phrasingSlurDashPattern #0.5 #2.0 +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +Strichelmusterdefinitionen für Phrasierungsbögen haben die +gleiche Struktur wie die Definitionen für Legatobögen. Zu +mehr Information über komplizierte Strichelmuster, siehe +die Schnipsel im Abschnitt @ref{Legatobögen}. + + +@predefined +@code{\phrasingSlurUp}, +@code{\phrasingSlurDown}, +@code{\phrasingSlurNeutral}, +@code{\phrasingSlurDashed}, +@code{\phrasingSlurDotted}, +@code{\phrasingSlurHalfDashed}, +@code{\phrasingSlurHalfSolid}, +@code{\phrasingSlurDashPattern}, +@code{\phrasingSlurSolid}. +@endpredefined + +@seealso +Handbuch zum Lernen: +@rlearning{Über die Nicht-Schachtelung von Klammern und Bindebögen}. + +Notationsreferenz: +@ref{Richtung und Platzierung}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{PhrasingSlur}. + + + +@node Atemzeichen +@unnumberedsubsubsec Atemzeichen +@translationof Breath marks + +@cindex Atemzeichen +@cindex Pausenzeichen +@funindex \breathe +@funindex breathe + +Atemzeichen werden mit dem Befehl @code{\breathe} eingegeben. + +@lilypond[verbatim,quote,relative=2] +c2. \breathe d4 +@end lilypond + +Ein Atemzeichen bezeichnet gleichzeitig das Ende eines automatischen +Balkens. Um das Verhalten zu verändern siehe @ref{Manuelle Balken}. + +@lilypond[verbatim,quote,relative=2] +c8 \breathe d e f g2 +@end lilypond + +Musikalische Zeichen für Atemzeichen in Alter Notation, auch +Divisiones genannt, sind unterstützt. Für Einzelheiten siehe +@ref{Divisiones}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-breath-mark-symbol.ly} + +@cindex caesura +@cindex railroad tracks + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{inserting-a-caesura.ly} + + +@seealso +Glossar: +@rglos{caesura}. + +Notationsreferenz: +@ref{Divisiones}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{BreathingEvent}, +@rinternals{BreathingSign}, +@rinternals{Breathing_sign_engraver}. + + +@node Glissando zu unbestimmter Tonhöhe +@unnumberedsubsubsec Glissando zu unbestimmter Tonhöhe +@translationof Falls and doits + +@cindex falls +@cindex doits +@cindex Glissando, unbestimmt +@cindex Glissando, nach oben +@cindex Glissando, nach unten +@cindex Gleiten nach oben/unten +@funindex \bendAfter +@funindex bendAfter + + +Gleiten nach oben und unten kann mit dem Befehl @code{\bendAfter} +notiert werden. Die Richtung des Glissandos wird mit einem +Plus oder Minus (nach oben bzw. nach unten) angezeigt. Die +Zahl zeigt die Intervallgröße an, über die sich das Glissando @emph{nach} +der Note erstreckt. + +@lilypond[verbatim,quote,relative=2] +c2-\bendAfter #+4 +c2-\bendAfter #-4 +c2-\bendAfter #+6.5 +c2-\bendAfter #-6.5 +c2-\bendAfter #+8 +c2-\bendAfter #-8 +@end lilypond + +Das Minuszeichen (@code{-}) direkt vor dem @code{\bendAfter}-Befehl +ist @emph{notwendig} um unbestimmte Glissandos zu notieren. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adjusting-the-shape-of-falls-and-doits.ly} + + +@seealso +Glossar: +@rglos{fall}, +@rglos{doit}. + +Schnipsel: +@rlsr{Expressive marks}. + + +@node Ausdrucksbezeichnungen als Linien +@subsection Ausdrucksbezeichnungen als Linien +@translationof Expressive marks as lines + +Dieser Abschnitt zeigt, wie man verschiedene Ausdrucksbezeichnungen +erstellt, die sich linear erstrecken: Glissando, Arpeggio und +Triller. + +@menu +* Glissando:: +* Arpeggio:: +* Triller:: +@end menu + +@node Glissando +@unnumberedsubsubsec Glissando +@translationof Glissando + +@cindex Glissando +@funindex \glissando +@funindex glissando + +Ein @notation{Glissando} wird +mit dem Befehl @code{\glissando} auf eine Note folgend notiert: + +@lilypond[verbatim,quote,relative=2] +g2\glissando g' +c2\glissando c, +@end lilypond + +Verschiedene Glissando-Stile sind möglich. Für Einzelheiten siehe +@ref{Linienstile}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{contemporary-glissando.ly} + + +@seealso +Glossar: +@rglos{glissando}. + +Notationsreferenz: +@ref{Linienstile}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{Glissando}. + + +@knownissues + +Printing text over the line (such as @notation{gliss.}) is not +supported. + + +@node Arpeggio +@unnumberedsubsubsec Arpeggio +@translationof Arpeggio + +@cindex Arpeggio +@cindex Gebrochene Akkorde +@cindex Akkord, gebrochen +@funindex \arpeggio +@funindex arpeggio +@funindex \arpeggioArrowUp +@funindex arpeggioArrowUp +@funindex \arpeggioArrowDown +@funindex arpeggioArrowDown +@funindex \arpeggioNormal +@funindex arpeggioNormal + +Ein @notation{Arpeggio} als Zeichen, dass ein Akkord gebrochen gespielt werden soll, +kann mit dem Befehl @code{\arpeggio} hinter der +Akkord-Konstruktion erzeugt werden. + +@lilypond[verbatim,quote,relative=1] +1\arpeggio +@end lilypond + +Unterschiedliche Arpeggio-Typen können benutzt werden. +@code{\arpeggioNormal} stellt wieder das normale Verhalten +her: + +@lilypond[verbatim,quote,relative=1] +2\arpeggio + +\arpeggioArrowUp +2\arpeggio + +\arpeggioArrowDown +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +@cindex Arpeggio-Symbole, besondere +@cindex besondere Arpeggio-Symbole + +@funindex \arpeggioBracket +@funindex arpeggioBracket +@funindex \arpeggioParenthesis +@funindex arpeggioParenthesis +@funindex \arpeggioParenthesisDashed +@funindex arpeggioParenthesisDashed + +Besondere Arpeggios mit Klammern können erstellt werden: + +@lilypond[verbatim,quote,relative=1] +2 + +\arpeggioBracket +2\arpeggio + +\arpeggioParenthesis +2\arpeggio + +\arpeggioParenthesisDashed +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +Die @code{dash}-Eigenschaft der Arpeggioklammern werden von +der @code{'dash-details}-Eigenschaft kontrolliert, die +beschrieben ist in @ref{Legatobögen}. + +Ein Arpeggio kann auch explizit ausgeschrieben werden, indem +Überbindungsbögen benutzt werden. Für mehr Information siehe +@ref{Bindebögen}. + + +@predefined +@code{\arpeggio}, +@code{\arpeggioArrowUp}, +@code{\arpeggioArrowDown}, +@code{\arpeggioNormal}, +@code{\arpeggioBracket}, +@code{\arpeggioParenthesis}, +@code{\arpeggioParenthesisDashed}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-a-piano-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-other-contexts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-arpeggios-across-notes-in-different-voices.ly} + + +@seealso +Glossar: +@rglos{arpeggio}. + +Notationsreferenz: +@ref{Legatobögen}, +@ref{Bindebögen}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{Arpeggio}, +@rinternals{Slur}, +@rinternals{PianoStaff}. + + +@knownissues + +@cindex Arpeggio über Systeme im Klammernstil +@cindex Klammer-Arpeggio über Systeme +@cindex Zwischensysteme-Klammer-Arpeggio + +Es ist nicht möglich, Arpeggios zwischen Systemen und solche, die sich +nur auf ein System erstrecken, zum gleichen Zeitpunkt in einem +Klaviersystem (@code{PianoStaff}) zu benutzen. + +Die Arpeggios im Klammer-Stil funktionieren nicht über +mehrere Notensysteme. + + +@node Triller +@unnumberedsubsubsec Triller +@translationof Trills + +@cindex Triller + +@funindex \trill +@funindex trill +@funindex \startTrillSpan +@funindex startTrillSpan +@funindex \stopTrillSpan +@funindex stopTrillSpan + +Kurze Triller ohne eine Dauer werden mit dem Befehl +@code{\trill} notiert, siehe auch +@ref{Artikulationszeichen und Verzierungen}. + +Längere Triller mit einer Dauer werden mit den Befehlen +@code{\startTrillSpan} zu +Beginn und @code{\stopTrillSpan} am Ende erstellt. + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +c2\stopTrillSpan +r2 +@end lilypond + +Ein Triller-Strekcer, der über einen Zeilenumbruch geht, +beginnt genau über der ersten Note auf der neue Zeile erneut. + + +@lilypond[ragged-right,verbatim,quote,relative=2] +d1\startTrillSpan +\break +d1 +c2\stopTrillSpan +r2 +@end lilypond + +Aufeinanderfolgende Trillerstrecker funktieren ohne einen ++@code{\stopTrillSpan}-Befehl, weil ein folgender Strecker +automatisch die rechte Begrenzung des vorhergehenden beendet. + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +d1\startTrillSpan +d2\stopTrillSpan +r2 +@end lilypond + +Triller können auch mit Vorschlägen kombiniert werden. Die Syntax +für diese Konstruktion und die Methode, um die Position der Vorschläge +präzise zu positionieren, wird gezeigt in @ref{Verzierungen}. + +@lilypond[verbatim,quote,relative=2] +d1~\afterGrace +d1\startTrillSpan { c32[ d]\stopTrillSpan } +c2 r2 +@end lilypond + +@cindex Triller mit Tonhöhe + +@funindex \pitchedTrill +@funindex pitchedTrill + + +Triller, die auf einer bestimmten Note ausgeführt werden sollen, können +mit dem Befehl @code{pitchedTrill} notiert werden. Das erste +Argument ist die Hauptnote, das zweite die Note, auf der getrillert +wird. Sie wird als Note ohne Hals in Klammern ausgegeben. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +d2\startTrillSpan fis +d2 +c2\stopTrillSpan +r2 +@end lilypond + +@cindex Triller mit Tonhöhe und Versetzungszeichen +@cindex Versetzungszeichen, für Triller + +Aufeinanderfolgende Versetzungszeichen der selben Note im selben +Takt müssen selbst hinzugefügt werden. Nur das Versetzungszeichen +des ersten Trillers mit Tonhöhe innerhalb eines Taktes wird ausgegeben. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan cis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis! +eis4\stopTrillSpan +@end lilypond + +@predefined +@code{\startTrillSpan}, +@code{\stopTrillSpan}. +@endpredefined + +@seealso +Glossar: +@rglos{trill}. + +Notationsreferenz: +@ref{Artikulationszeichen und Verzierungen}, +@ref{Verzierungen}. + +Schnipsel: +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{TrillSpanner}. diff --git a/Documentation/de/notation/fretted-strings.itely b/Documentation/de/notation/fretted-strings.itely new file mode 100644 index 0000000000..67f8b59ec9 --- /dev/null +++ b/Documentation/de/notation/fretted-strings.itely @@ -0,0 +1,1939 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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" + +@c Translators: Till Paala + +@node Saiteninstrumente mit Bünden +@section Saiteninstrumente mit Bünden +@translationof Fretted string instruments + +@lilypondfile[quote]{fretted-headword.ly} + +Dieser Abschnitt erklärt bestimmte Eigenheiten der Notation für +Saiteninstrumente mit Bünden. + +@cindex Tabulatur +@cindex Gitarrentabulatur +@cindex Banjo-Tabulatur + +@menu +* Übliche Notation für Saiteninstrumente mit Bünden:: +* Gitarre:: +* Banjo:: +@end menu + +@node Übliche Notation für Saiteninstrumente mit Bünden +@subsection Übliche Notation für Saiteninstrumente mit Bünden +@translationof Common notation for fretted strings + +Dieser Abschnitt zeigt Besonderheiten der Notation, die allen +Bundinstrumenten eigen ist. + +@menu +* Referenz für Saiteninstrumente mit Bünden:: +* Seitennummerbezeichnung:: +* Standardtabulaturen:: +* Angepasste Tabulaturen:: +* Bund-Diagramm-Beschriftung:: +* Vordefinierte Bund-Diagramme:: +* Automatische Bund-Diagramme:: +* Fingersatz der rechten Hand:: +@end menu + +@node Referenz für Saiteninstrumente mit Bünden +@unnumberedsubsubsec Referenz für Saiteninstrumente mit Bünden +@translationof References for fretted strings + +Noten für Bundinstrumente wird normalerweise auf +einem einzelnen System notiert, entweder als traditionelles +Notensystem oder in Tabulaturform. Manchmal werden beide +Arten miteinander verbunden, und besonders in populärer +Musik ist es üblich, über dem traditionellen System Griffsymbole +zu setzen. Gitarre und Banjo sind transponierende Instrumente, +die eine Oktave tiefer klingen als sie notiert werden. Partituren +für diese Instrumente sollten den @qq{Tenorschlüssel} +(@code{"treble_8"} bzw. @code{\transposition c}) benutzen, um +korrekte MIDI-Dateien zu erhalten. Einige Spezifika für +Instrumente mit Bünden sind an anderer Stelle erklärt: + +@itemize +@item Fingersatz kann notiert werden, siehe +@ref{Fingersatzanweisungen}. + +@item Anweisungen für @notation{Laissez vibrer}-Bögen und +Bögen zwischen Arpeggios und Tremolos sind beschrieben in +@ref{Bindebögen}. + +@item Hinweise, wie mehrere Stimmen gesetzt werden können, finden sich in +@ref{Auflösung von Zusammenstößen}. + +@item Instructions for indicating harmonics can be found in +@ref{Flageolett}. + +@end itemize + + +@seealso +Notationsreferenz: +@ref{Fingersatzanweisungen}, +@ref{Bindebögen}, +@ref{Auflösung von Zusammenstößen}, +@ref{Instrumentenbezeichnungen}, +@ref{Musik parallel notieren}, +@ref{Arpeggio}, +@ref{Liste der Artikulationszeichen}, +@ref{Notenschlüssel} +@ref{Transposition von Instrumenten}. + + +@node Seitennummerbezeichnung +@unnumberedsubsubsec Seitennummerbezeichnung +@translationof String number indications + +@cindex Saitenzahl +@cindex Zahl von Saiten +@cindex Fingersatz versus Saitenzahl +@cindex Nummerierung von Saiten + +Die Nummer der Saite, auf der gespielt werden soll, kann +angezeigt werden, indem @code{\@var{Zahl}} an eine Note +innerhalb eines Akkord-Konstrukts gesetzt wird: + +@lilypond[verbatim,quote,relative=0] +\clef "treble_8" +4 2 +1 +@end lilypond + +Wenn Fingersatz und Saitennummer zusammen benutzt werden, wird +ihre Position anhand der Reihenfolge entschieden, mit der sie im +Code auftauchen: + +@lilypond[verbatim,quote,relative=1] +\clef "treble_8" +2 + +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + + +@seealso +Notationsreferenz: +@ref{Fingersatzanweisungen}. + +Schnipsel: +@rlsr{Fretted strings}. + +Referenz der Interna: +@rinternals{StringNumber}, +@rinternals{Fingering}. + + +@node Standardtabulaturen +@unnumberedsubsubsec Standardtabulaturen +@translationof Default tablatures + +@cindex Tabulatur, Grundlegendes + +@funindex TabStaff +@funindex TabVoice + +Musik für gezupfte Saiteninstrumente wird oft notiert, indem man eine +Finger/Berührungsnotation bzw. Tabulatur benutzt. Im Gegensatz zur +traditionellen Notation werden hier Tonhöhen nicht mit Notenköpfen +notiert, sondern mit Zahlen (oder buchstabenartigen Symbolen in +historischen Tabulaturen). Die Notenlinien einer Tabulatur zeigen +die Saite an, auf der eine Note gespielt werden soll, und eine Zahl +auf einer Notenlinie zeigt an, +welcher Bund für eine Note gespielt werden muss. Die Zahlen werden +vertikal übereinander geschrieben, wenn sie gleichzeitig gespielt werden sollen. + +Standardmäßig ist Saite 1 die höchste Saite und entspricht der höchsten +Notenlinie des @code{TabStaff} (der Tabulatur). Die voreingestellte +Saitenstimmung der Tabulatur ist die normale Gitarrenstimmung (mit 6 Saiten). Die +Noten werden als Tabulatur ausgegeben, wenn man den @code{TabStaff}-Kontext +und darin den @code{TabVoice}-Kontext benutzt. Ein kalligraphischer +Tabulaturschlüssel wird automatisch hinzugefügt. + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff \relative c' { + a,8 a' a + d,8 a' a +} +@end lilypond + +Standard-Tabulaturen haben weder Symbole, die Notendauern anzeigen, +noch andere musikalische Symbole wie etwa Ausdrucksbezeichnungen. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c~ c2\! + c'2.\prall\) +} + +\score { + << + \new Staff { \clef "G_8" \symbols } + \new TabStaff { \symbols } + >> +} +@end lilypond + +@funindex \tabFullNotation +@funindex tabFullNotation + +Wenn alle musikalischen Symbole, die in der traditionellen Notation +eingesetzt werden, auch in der Tabulatur gedruckt werden sollen, muss +man den Befehl @code{\tabFullNotation} in einem @code{TabStaff}-Kontext +hinzufügen. Dabei ist zu beachten, dass halbe Noten in einer Tabulatur +mit zwei Hälsen dargestellt werden, um sie von Viertelnoten zu unterscheiden. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c~ c2\! + c'2.\prall\) +} + +\score { + \new TabStaff { + \tabFullNotation + \symbols + } +} +@end lilypond + +@funindex minimumFret + +@cindex Bund + +Normalerweise werden Tonhöhen der tiefstmöglichen Spielposition auf +dem Bundbrett zugewiesen (erste Lage). Offene Saiten werden automatisch +bevorzugt. Wenn Sie eine bestimmte Tonhöhe auf einer bestimmten Saite +gespielt haben wollen, können Sie eine Saitennummeranweisung zur +Tonhöhe hinzufügen. Wenn Sie Tonhöhe und Saitenzahlanweisung nicht +innerhalb einer Akkord-Konstruktion (@code{<>}) notieren, erscheint +die Saitenzahlanweisung nicht in der traditionellen Notation. Es ist +jedoch sehr viel bequemer, die Spielposition unter Benutzung von +@code{minimumFret} zu definieren. Der Standardwert von @code{minimumFret} +beträgt 0. + +@lilypond[quote,ragged-right,verbatim] +\new StaffGroup << + \new Staff \relative c { + \clef "treble_8" + \time 2/4 + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + c,16 d e f g4 + } + \new TabStaff \relative c { + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + \set TabStaff.minimumFret = #5 + c,16 d e f g4 + } +>> +@end lilypond + +@funindex \tabChordRepetition + +Akkord-Konstruktionen können mit dem Akkord-Wiederholungssymbol @code{q} +wiederholt werden. Um diese Eigenschaft in einer Tabulatur benutzen +zu können, gibt es den Befehl @code{\tabChordRepetition}. Er speichert +die Saiteninformationen, die innerhalb von Akkord-Konstruktionen gegeben +werden, sodass wiederholte Akkorde identische Darstellungen erhalten. + +@lilypond[quote,verbatim] +\tabChordRepetition + +guitar = \relative c' { + r8 ~ q4 q8~ q q4 +} + +\new StaffGroup << + \new Staff { + \clef "treble_8" + \override Voice.StringNumber #'transparent = ##t + \guitar + } + \new TabStaff { + \guitar + } +>> +@end lilypond + +Bindestriche über einen Zeilenumbruch werden normalerweise in Klammern +gesetzt. Das gilt auch für die zweite Klammer einer Wiederholung. + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ + } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~ + \break + b1 + \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@funindex \hideSplitTiedTabNotes + +Der Befehl @code{\hideSplitTiedTabNotes} hebt das Verhalten auf, dass +Bundnummern in Klammern gesetzt werden: + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~ + \break + b1 + \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \hideSplitTiedTabNotes + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@cindex Flageolett in Tabulaturen +@cindex Tabulatur und Flageolett +@cindex Gleiten in Tabulaturen +@cindex Tabulaturen und Gleiten +@cindex Slide in Tabulaturen +@cindex Akkordglissando +@cindex Glissando, Akkorde + +@funindex \harmonic +@funindex \harmonicByFret +@funindex \harmonicByRatio +@funindex \chordGlissando + +Flageolett (engl. @emph{harmonic}) kann zur Tabulaturnotation als klingende Tonhöhe hinzugefügt +werden: + +@lilypond[verbatim,quote] +firstHarmonic = { + 4 + 4 + 2 +} +\score { + << + \new Staff { \firstHarmonic } + \new TabStaff { \firstHarmonic } + >> +} +@end lilypond + +Dabei ist zu beachten, dass der Befehl @code{\harmonic} immer innerhalb +einer Akkordkonstruktion notiert werden muss. Flageolett ist nur sinnvoll +für offene Saiten im 12. Bund. Alle anderen Flageolett-Töne sollten von +LilyPond errechnet werden. Das wird erreicht, indem man den Bund angibt, +wo der Finger der Greifhand die Saite berühren soll. + +@lilypond[verbatim,quote] +fretHarmonics = { + \harmonicByFret #5 d16\4 + \harmonicByFret #4 d16\4 + \harmonicByFret #3 d8\4 + \harmonicByFret #5 2. +} +\score { + << + \new Staff { \fretHarmonics } + \new TabStaff { \fretHarmonics } + >> +} +@end lilypond + +Alternativ können Flageolett-Töne auch errechnet werden, indem man das +Verhältnis der Saitenlängen über und unter dem Flageolett-Finger definiert: + +@lilypond[verbatim,quote] +ratioHarmonics = { + \harmonicByRatio #1/2 4 + \harmonicByRatio #1/3 4 + \harmonicByRatio #1/4 { g8\3 b8\2 e'4\1 } +} +\score { + << + \new Staff { \ratioHarmonics } + \new TabStaff { \ratioHarmonics } + >> +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{stem-and-beam-behavior-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{polyphony-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{open-string-harmonics-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fretted-string-harmonics-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{slides-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-glissando-in-tablature.ly} + + +@seealso +Notationsreferenz: +@ref{Hälse}, +@ref{Flageolett}, +@ref{Glissando}. + +Schnipsel: +@rlsr{Fretted strings}. + +Referenz der Interna: +@rinternals{TabNoteHead}, +@rinternals{TabStaff}, +@rinternals{TabVoice}, +@rinternals{Beam}. + + +@knownissues + +Akkorde werden nicht gesondert behandelt, sodass die Saitenauswahlfunktion +eventuell die selbe Saite für zwei Töne eines Akkordes auswählen kann. + +Damit die Kombination von Stimmen (@code{\partcombine}) richtig funktioniert, +müssen speziell erstellte Stimmen innerhalb des Tabulatursystems +(@code{TabStaff}) benutzt werden: + +@lilypond[quote,ragged-right,verbatim] +melodia = \partcombine { e4 g g g } { e4 e e e } +<< + \new TabStaff << + \new TabVoice = "one" s1 + \new TabVoice = "two" s1 + \new TabVoice = "shared" s1 + \new TabVoice = "solo" s1 + { \melodia } + >> +>> +@end lilypond + +Spezialeffekte für Gitarre beschränken sich auf Flageolett und +Slide. + + +@node Angepasste Tabulaturen +@unnumberedsubsubsec Angepasste Tabulaturen +@translationof Custom tablatures + +@cindex Tabulaturen, eigen +@cindex eigene Tabulaturen +@cindex Tabulatur, Banjo +@cindex Tabulatur, Mandoline +@cindex Tabulatur, Bassgitarre +@cindex Tabulatur, Gitarre +@cindex Tabulatur, Ukulele +@cindex Tabulatur, Geige +@cindex Tabulatur, Bratsche +@cindex Tabulatur, Cello +@cindex Tabulatur, Kontrabass +@cindex Saitenstimmung für Bundinstrumente +@cindex bundierte Saiteninstrumente, Saitenstimmung +@cindex Bundinstrumente, Saitenstimmung +@cindex Tabulatur, Saitenstimmung + +@funindex StringTunings + +LilyPond errechnet automatisch den Bund für eine Note auf Grundlage +der Saite, zu welcher der Ton zugeordnet ist. Um das tun zu können, +muss die Stimmung der Saiten angegeben werden. Die Stimmung wird +in der @code{StringTunings}-Eigenschaften bestimmt. + +LilyPond hat vordefinierte Stimmungen für Banjo, Mandoline, Gitarre, +Bassgitarre, Ukulele, Geige, Bratsche, Cello und Kontrabass. +Für diese Stimmungen wird automatisch die +richtige Transposition eingesetzt. Das nächste Beispiel ist für +Bassgitarre, welche eine Oktave niedriger erklingt, als sie +geschrieben ist: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \clef "bass_8" + \relative c, { + c4 d e f + } + } + \new TabStaff { + \set TabStaff.stringTunings = #bass-tuning + \relative c, { + c4 d e f + } + } +>> +@end lilypond + + +Die Standardstimmung ist die Gitarrenstimmung (@code{guitar-tuning}) +in der EADGHE-Stimmung. Andere vordefinierte Stimmung sind: +@code{guitar-open-g-tuning}, @code{mandolin-tuning} und +@code{banjo-open-g-tuning}. Die vordefinierten Stimmungen finden +sich in @file{scm/string-tuning-init.scm}. + +@funindex contextStringTunings +@funindex \contextStringTunings +@cindex Tabulatur, eigene Saitenstimmung +@cindex Eigene Saitenstimmung, Tabulatur + +Jede beliebige Stimmung kann erstellt werden. Die Funktion +@code{\contextStringTuning} kann benutzt werden, um eine Saitenstimmung +zu definieren und als den Wert von @code{stringTunings} für den aktuellen +Kontext zu bestimmen. @code{\contextStringTuning} braucht zwei Argumente: +das Symbol, wo die Saitenstimmung gespeichert werden soll, und eine +Akkordkonstruktion, die die Tonhöhen jeder Saite der Stimmung angibt. +Die Akkordkonstruktion muss im absoluten Oktavenmodus angegeben werden, +siehe @ref{Absolute Oktavenbezeichnung}. Die Saite mit der höchsten +Zahl (normalerweise die tiefste Seite) muss im Akkord zuerst geschrieben +werden. Eine Stimmung für ein viersaitiges Instrument mit den Tonhöhen +@code{a''}, @code{d''}, @code{g'} und @code{c'} kann folgenderweise +erstellt werden: + +@lilypond[quote,verbatim] + +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \contextStringTuning #'custom-tuning + \mynotes + } +>> +@end lilypond + +Die @code{stringTunings}-Eigenschaft wird auch von @code{FretBoards} +benutzt, um automatische Bunddiagramme zu errechnen. + +@funindex makeStringTuning +@funindex \makeStringTuning + +Saitensitmmungen werden als Teil des Hash-Schlüsselwertes für +vordefinierte Bunddiagramme eingesetzt (siehe auch +@ref{Vordefinierte Bund-Diagramme}. Die Funktion @code{\makeStringTuning} +wird benutzt, um eine Stimmung im aktuellen Kontext zu erstellen, ohne die +@code{stringTunings}-Eigenschaft einzusetzen Die Argumente von +@code{\makeStringTuning} sind das Symbol, das für die neue Stimmung +benutzt werden soll und eine Akkordkonstruktion, die die Stimmung definiert. +Das vorherige Beispiel könnte auch folgenderweise geschrieben werden: + +@lilypond[quote,verbatim] +\makeStringTuning #'custom-tuning + +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #custom-tuning + \mynotes + } +>> +@end lilypond + +Intern ist die Stimmung eine Scheme-Liste von Tonhöhen der Saiten, +eine für jede Saite, geordnet von Saitennummer 1 bis n, wobei 1 +die höchste Saite der Tabulatur ist und n die unterste. Normalerweise +wird so die Stimmung vom höchsten bis zum tiefsten Ton angegeben, +aber bei einige Instrumente (etwa Ukulele) werden die Saiten nicht +aufgrund der Tonhöhe angeordnet. + +Die Tonhöhe einer Saite in einer Seitenstimmungsliste ist ein +Tonhöhenobjekt für LilyPond. Tonhöhenobjekte werden mit der +Scheme-Funktion +@code{ly:make-pitch} erstellt +(siehe @ref{Scheme-Funktionen}). + +Wenn gewünscht, kann eine Saitenstimmung auch in Scheme-Sprache erstellt +werden. Das Beispiel unten bildet das obige Beispiel nach, aber die +Stimmung wird nicht als eigenes Objekt gespeichert: + +@lilypond[quote,verbatim] +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #`(,(ly:make-pitch 1 5 0) + ,(ly:make-pitch 1 1 0) + ,(ly:make-pitch 0 4 0) + ,(ly:make-pitch 0 0 0)) + \mynotes + } +>> +@end lilypond + +LilyPond errechnet automatisch die Linienanzahl für die Tabulatur und +die Zahl der Saiten in dem automatisch erstellten @code{FretBoard} +(Bunddiagramm) aus der Anzahl der Elemente von @code{stringTunings}. + +@cindex Schlüssel, modern, Tabulatur +@cindex Tabulatur, moderner Schlüssel +@cindex moderner Tabulatur-Schlüssel + +@funindex moderntab + +Auch ein moderner Tabulatur-Schlüssel kann verwendet werden: + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff { + \clef moderntab + 1 + \break + \clef tab + 1 +} +@end lilypond + +Der moderne Tabulatur-Schlüssel unterstützt Tabulaturen von 4 bis 7 Saiten. + +@seealso +Notationsreferenz: +@ref{Absolute Oktavenbezeichnung}, +@ref{Vordefinierte Bund-Diagramme}, +@ref{Scheme-Funktionen}. + +Installierte Dateien: +@file{ly/string-tuning-init.ly} +@file{scm/tablature.scm}. + +Schnipsel: +@rlsr{Fretted strings}. + +Referenz der Interna: +@rinternals{Tab_note_heads_engraver}. + +@knownissues +Automatische Tabulatur-Berechnung funktioniert in den meisten Fällen nicht +korrekt bei Instrumenten, deren Saitenstimmung nicht monotonisch +fortschreitet, wie etwa Ukulele. + + +@node Bund-Diagramm-Beschriftung +@unnumberedsubsubsec Bund-Diagramm-Beschriftung +@translationof Fret diagram markups + +@cindex Fret (Bunddiagramme) +@cindex Griffsymbole, bundierte Saiteninstrumente +@cindex Griffsymbole, Bundinstrumente +@cindex Gitarrengriffsymbole +@cindex Akkordtabulatur +@cindex Akkorddiagramm +@cindex Bunddiagramme +@cindex eigene Bunddiagramme +@cindex Bunddiagramme, eigene + +Bunddiagramme können zu Notation als Textbeschriftung +hinzugefügt werden. Die Beschriftung enthält Information zu dem +gewünschten Bunddiagramm. Es gibt drei unterschiedliche +Darstellungsarten: normal, knapp und ausführlich. Die drei +Arten erzeugen die gleiche Ausgabe, aber mit jeweils mehr oder +weniger Einzelheiten. Einzelheiten zur Syntax der unterschiedlichen +Beschriftungsbefehle, mit denen die Bunddiagramme definiert werden, +findet sich in @ref{Beschriftung für einzelne Instrumente}. + +Die Standard-Bunddiagrammbeschriftung beinhaltet die Saitennummer +und die Bundnummer für jeden Punkt, der notiert werden soll. +Zusätzlich können offenen und nicht gespielte (schwingende) Saiten +angezeigt werden. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" + } + 1^\markup { + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" + } + } +>> +@end lilypond + +@cindex Barré, Gitarre + +Barré kann hinzugefügt werden: + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + } + 1^\markup { + \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" + } + } +>> +@end lilypond + +@cindex Bunddiagramm-Beschriftung +@cindex fret (Bunddiagramme) +@cindex Ukulele + +@funindex fret-diagram +@funindex \fret-diagram + +Die Größe des Bunddiagrammes und die Anzahl der Bünde im Diagramm +kann geändert werden: + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + } + 1^\markup { + \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" + } + } +>> +@end lilypond + +Die Anzahl der Saiten in einem Bunddiagramm kann geändert werden, +um sie für andere Instrumente anzupassen, wie etwas Banjo oder Ukulele. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + a1 + } + } + \context Staff { + % An 'A' chord for ukulele + a'1^\markup { + \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" + } + } +>> +@end lilypond + +Fingersatz kann auch angezeigt werden, und die Position der +Fingersatzzahlen kann kontrolliert werden. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" + } + 1^\markup { + \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" + } + } +>> +@end lilypond + +Die Größe und Position der Punkte kann geändert werden: + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" + } + 1^\markup { + \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" + } + } +>> +@end lilypond + +@cindex fret-diagram-terse-Markup +@cindex Bunddiagramme, knapper Stil + +@funindex fret-diagram-terse +@funindex \fret-diagram-terse + +Die Beschriftungsfunktion @code{fret-diagram-terse} (knappe Version) +lässt die Saitennummern aus: das Vorhandensein einer Saite wird +durch ein Semikolon ausgedrückt. Für jede Saite des Diagramms +muss ein Semikolon gesetzt werden. Das erste Semikolon entspricht +der höchsten Saite, das letze der ersten Saite. Stumme und +offene Saiten sowie Bundnummern können angezeigt werden. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"x;3;2;o;1;o;" + } + 1^\markup { + \fret-diagram-terse #"x;x;o;2;3;1;" + } + } +>> +@end lilypond + +Barré kann im knappen Modus auch angezeigt werden: + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"1-(;3;3;2;1;1-);" + } + 1^\markup { + \fret-diagram-terse #"3-(;5;5;4;3;3-);" + } + } +>> +@end lilypond + +Fingersatz kann im knappen Modus hinzugefügt werden: + +@c Need to use override to enable fingerings to show this -- can we do so? +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" + } + 1^\markup { + \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" + } + } +>> +@end lilypond + +Andere Eigenschaften der Bunddiagramme müssen im knappen Modus +mit @code{\override}-Befehlen angegeben werden. + +@cindex fret-diagram-verbose-Markup +@cindex Bunddiagramme, ausführlicher Stil +@cindex Kapo +@cindex Capo + +@funindex fret-diagram-verbose +@funindex \fret-diagram-verbose + +Die Beschriftungsfunktion @code{fret-diagram-verbose} +(ausführlicher Stil) ist in der +Form eine Scheme-Liste. Jedes Element stellt ein Element dar, +dass im Bunddiagramm gesetzt werden soll. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-verbose #'( + (mute 6) + (place-fret 5 3) + (place-fret 4 2) + (open 3) + (place-fret 2 1) + (open 1) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (mute 6) + (mute 5) + (open 4) + (place-fret 3 2) + (place-fret 2 3) + (place-fret 1 1) + ) + } + } +>> +@end lilypond + +Fingersatz und Barré kann im ausführlichen Modus notiert werden. +Nur im ausführlichen Modus kann ein Capo angezeigt werden, das auf +dem Bunddiagramm plaziert wird. Die Capo-Anzeige ist ein dicker +Strich, der alle Saiten bedeckt. Der Bund mit dem Capo ist der +unterste Bund im Diagramm. + +@c \override is necessary to make fingering visible +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g c + } + } + \context Staff { + \clef "treble_8" + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + 1^\markup { + \fret-diagram-verbose #'( + (place-fret 6 1) + (place-fret 5 3) + (place-fret 4 3) + (place-fret 3 2) + (place-fret 2 1) + (place-fret 1 1) + (barre 6 1 1) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (place-fret 6 3 2) + (place-fret 5 2 1) + (open 4) + (open 3) + (open 2) + (place-fret 1 3 3) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (capo 3) + (mute 6) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + ) + } + } +>> +@end lilypond + +Alle anderen Bunddiagramm-Eigenschaften müssen im ausführlichen +Modus mit mit @code{\override}-Befehlen angegeben werden. + +@ignore +The following example shows the three fret-diagram markup +interfaces, along with examples of common tweaks. For example, +the size of the verbose fret diagram is reduced to 0.75, and the +finger indications are specified to appear below the diagram. The +terse diagram includes tweaks to specify placement of finger code +and color of dots. + +@lilypond[verbatim,ragged-right,quote] +\new Voice { + \clef "treble_8" + d4^\markup { + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" + } + d4 d d + fis^\markup { + \override #'(size . 0.75) { + \override #'(finger-code . below-string) { + \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) + (place-fret 5 4 3) + (place-fret 4 4 4) + (place-fret 3 3 2) + (place-fret 2 2 1) + (place-fret 1 2 1)) + } + } + } + fis4 fis fis + c^\markup { + \override #'(dot-radius . 0.35) { + \override #'(finger-code . in-dot) { + \override #'(dot-color . white) { + \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" + } + } + } + } + c4 c c +} +@end lilypond +@end ignore + +@cindex Bunddiagramme, anpassen +@cindex eigene Bunddiagramme +@cindex Anpassen von Bunddiagrammen + +@funindex fret-diagram-interface + +Die graphische Erscheinung eines Bunddiagramms kann den Wünschen +des Notensetzers angepasst werden. Hierzu werden die Eigenschaften +des @code{fret-diagram-interface} (Bunddiagramm-Schnittstelle) +eingesetzt. Einzelheiten hierzu +in @rinternals{fret-diagram-interface}. Die Eigenschaften der +Schnittstelle gehören dem @code{Voice.TextScript}-Kontext an. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-fret-orientations.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-markup-fret-diagrams.ly} + +@seealso +Notationsreferenz: +@ref{Beschriftung für einzelne Instrumente}. + +Schnipsel: +@rlsr{Fretted strings}. + +Referenz der Interna: +@rinternals{fret-diagram-interface}. + + + +@node Vordefinierte Bund-Diagramme +@unnumberedsubsubsec Vordefinierte Bund-Diagramme +@translationof Predefined fret diagrams + + +@cindex Bunddiagramme +@cindex Akkord-Diagramme +@cindex Bunddiagramme, Ukulele + +@funindex FretBoards +@funindex stringTunings + +Bunddiagramme können mit dem @code{FretBoards}-Kontext angezeigt +werden. Standardmäßig zeigt der @code{FretBoards}-Kontext +Bunddiagramme an, die in einer Tabelle definiert sind: + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { + c1 d + } +} +@end lilypond + +Die vordefinierten Diagramme sind in der Datei +@file{predefined-guitar-fretboards.ly} enthalten. Sie werden +basierend auf der Tonhöhe eines Akkordes und dem Wert von +@code{stringTunings} (Saitenstimmung), der gerade benutzt wird, +gespeichert. @file{predefined-guitar-fretboards.ly} beinhaltet +vordefinierte Diagramme für die Gitarrenstimmung (@code{guitar-tuning}). +Anhand der Beispiele in dieser Datei können auch für andere +Instrumente oder Stimmungen Diagramme definiert werden. + +Bunddiagramme für die Ukulele finden sich in der Datei +@file{predefined-ukulele-fretboards.ly}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-ukulele-fretboards.ly" + +myChords = \chordmode { a1 a:m a:aug } + +\new ChordNames { + \myChords +} + +\new FretBoards { + \set stringTunings = #ukulele-tuning + \myChords +} +@end lilypond + +Tonhöhen von Akkorden können entweder als Akkordkonstrukte +oder im Akkordmodus notiert werden (siehe auch +@ref{Überblick über den Akkord-Modus}). + +@lilypond[verbatim, ragged-right,quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { c1 } + 1 +} +@end lilypond + +@cindex Akkordbezeichnungen und Bunddiagramme +@cindex Bunddiagramme und Akkordbezeichnungen + +@funindex ChordNames +@funindex chordmode +@funindex \chordmode + +Oft wird sowohl eine Akkordbezeichnung als ein Bunddiagramm +notiert. Das kann erreicht werden, indem ein +@code{ChordNames}-Kontext parallel mit einem @code{FretBoards}-Kontext +gesetzt wird und beiden Kontexten die gleichen Noten zugewiesen +werden. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex Transposition von Bunddiagrammen +@cindex Bunddiagramme, Transposition + +Vordefinierte Bunddiagramme können transponiert werden, solange +ein Diagramm für den transponierten Akkord in der Bunddiagramm-Tabelle +vorhanden ist. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +mychordlist = { + \mychords + \transpose c e { \mychords } +} +<< + \context ChordNames { + \mychordlist + } + \context FretBoards { + \mychordlist + } +>> +@end lilypond + +Die Tabelle der vordefinierten Bunddiagramme für Gitarre enthält +acht Akkorde (Dur, Moll, übermäßig, vermindert, Dominantseptakkord, +große Septime, kleine Septime und Dominantnonenakkord) für alle 17 +Tonarten. Die Tabelle der vortdefinierten Bunddiagramme für +Ukulele enthält neben diesen Akkorden noch zusätzlich drei +weitere (große Sext, Sekundakkord und Quartakkort). Eine +vollständige Liste der vordefinierten Bunddiagramme findet sich +in @ref{Die vordefinierten Bund-Diagramme}. Wenn in der Tabelle für +einen Akkord kein Wert steht, wird ein Bunddiagramm vom +@code{FretBoards}-Engraver errechnet, wobei die automatische +Bunddiagrammfunktion zu Anwendung kommt. Siehe hierzu +@ref{Automatische Bund-Diagramme}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 c:maj9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex Bunddiagramme, eigene definieren +@cindex Definieren von eigenen Bunddiagrammen +@cindex Eigene Bunddiagramme definieren + +Bunddiagramme können zu der Tabelle hinzugefügt werden. Um ein +Diagramm hinzuzufügen, muss der Akkord des Diagramms, die Stimmung +und die Diagramm-Definition angegeben werden. Dies geschieht normalerweise +in der Tabelle @var{default-fret-table}. Die Diagramm-Definition +kann entweder eine @code{fret-diagram-terse}-Definition oder eine +@code{fret-diagram-verbose}-Liste sein. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table + \chordmode { c:maj9 } + #guitar-tuning + #"x;3-2;o;o;o;o;" + +mychords = \chordmode { + c1 c:maj9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +Unterschiedliche Bunddiagramme für den selben Akkord können +gespeichert werden, indem unterschiedliche Oktaven für die +Tonhöhe benutzt werden. Die unterschiedliche Oktave sollte +mindestens zwei Oktaven über oder unter der Standardoktave liegen, +die für transponierende Bunddiagramme eingesetzt wird. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table + \chordmode { c'' } + #guitar-tuning + #(offset-fret 2 (chord-shape 'bes guitar-tuning)) + +mychords = \chordmode { + c1 c'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex bundierte Saiteninstrumente, Akkordformen +@cindex Bundinstrumente, Akkordformen +@cindex Akkordformen für bundierte Saiteninstrumente +@cindex Akkordformen für Bundinstrumente + +@funindex \addChordShape +@funindex addChordShape +@funindex storePredefinedDiagram +@funindex \storePredefinedDiagram + +Zusätzlich zu Bunddiagrammen speichert LilyPond auch eine interne +Liste an Akkordformen. Die Akkordformen sind Bunddiagramme, +die am Hals entlang verschoben werden können und dabei unterschiedliche +Akkorde ergeben. Akkordformen können zu der internen Liste +hinzugefügt werden und dann benutzt werden, um vordefinierte +Bunddiagramme zu definieren. Weil sie auf verschiedenen Positionen +auf dem Steg gelegt werden können, beinhalten vordefinierte +Akkord üblicherweise keine leeren Saiten. Wie Bunddiagramme können auch +Akkordformen entweder als @code{fret-diagram-terse}-Definition +oder als @code{fret-diagram-verbose}-Liste erstellt werden. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +% Add a new chord shape + +\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" + +% add some new chords based on the power chord shape + +\storePredefinedDiagram #default-fret-table + \chordmode { f'' } + #guitar-tuning + #(chord-shape 'powerf guitar-tuning) +\storePredefinedDiagram #default-fret-table + \chordmode { g'' } + #guitar-tuning + #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) + +mychords = \chordmode{ + f1 f'' g g'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +Die graphische Form eines Bunddiagramms kann entsprechend den +eigenen Wünschen verändert werden, indem man die Eigenschaften +der @code{fret-diagram-interface}-Schnittstelle verändert. +Einzelheiten hierzu in @rinternals{fret-diagram-interface}. Die +Schnittstelleneigenschaften eines vordefinierten Bunddiagrammes +gehören dem @code{FretBoards.FretBoard}-Kontext an. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-fretboard-fret-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{defining-predefined-fretboards-for-other-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chordchanges-for-fretboards.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fretboards-alternate-tables.ly} + + +@seealso +Notationsreferenz: +@ref{Angepasste Tabulaturen}, +@ref{Automatische Bund-Diagramme}, +@ref{Überblick über den Akkord-Modus}, +@ref{Die vordefinierten Bund-Diagramme}. + +Installierte Dateien: +@file{ly/predefined-guitar-fretboards.ly}, +@file{ly/predefined-guitar-ninth-fretboards.ly}, +@file{ly/predefined-ukulele-fretboards.ly}. + +Schnipsel: +@rlsr{Fretted strings}. + +Referenz der Interna: +@rinternals {fret-diagram-interface}. + + +@node Automatische Bund-Diagramme +@unnumberedsubsubsec Automatische Bund-Diagramme +@translationof Automatic fret diagrams + +@cindex Bunddiagramme, automatisch +@cindex Akkorddiagramme, automatisch +@cindex automatische Bunddiagramme + +Bunddiagramme können automatisch aus notierten Noten erstellt werden. +Hierzu wird der @code{FretBoards}-Kontext eingesetzt. Wenn keine +vordefinierten Diagramme für die entsprechenden Noten mit +der aktiven Saitenstimmung (@code{stringTunings}) vorhanden sind, +errechnet der Kontext Saiten und Bünde die benutzt werden können, +um die Noten zu spielen. + +@lilypond[quote,ragged-right,verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context FretBoards { + 1 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +@funindex predefinedFretboardsOff +@funindex \predefinedFretboardsOff +@funindex predefinedFretboardsOn +@funindex \predefinedFretboardsOn + +Da in den Standardeinstellungen keine vordefinierten Diagramme +geladen werden, ist die automatische Diagrammerstellung das +Standardverhalten. Wenn die vordefinierten Diagramme eingesetzt +werden, kann die automatische Berechnung an- und ausgeschaltet +werden. + +@lilypond[quote,ragged-right,verbatim] + +\storePredefinedDiagram #default-fret-table + + #guitar-tuning + #"x;3-1-(;5-2;5-3;5-4;3-1-1-);" +<< + \context ChordNames { + \chordmode { + c1 c c + } + } + \context FretBoards { + 1 + \predefinedFretboardsOff + 1 + \predefinedFretboardsOn + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + 1 + } +>> +@end lilypond + +Manchmal kann die Berechnungsfunktion für Bunddiagramme kein +passendes Diagramm finden. Das kann oft umgangen werden, indem +man manuell einer Note eine bestimmte Saite zuweist. In vielen +Fällen muss nur eine Note derart gekennzeichnet werden, der +Rest wird dann entsprechend durch den @code{FretBoards}-Kontext +behandelt. + +@cindex Bunddiagramme, Fingersatz +@cindex Fingersatz in Bunddiagrammen + +Fingersatz kann zu FretBoard-Bunddiagrammen hinzugefügt werden. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context FretBoards { + 1 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +@funindex minimumFret + +Der kleinste Bund, der benutzt wird, um Saiten und Bünde im +FretBoard-Kontext zu errechnen, kann mit der +@code{minimumFret}-Eigenschaft gesetzt werden. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + d1:m d:m + } + } + \context FretBoards { + 1 + \set FretBoards.minimumFret = #5 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +Die Saiten und Bünde des @code{FretBoards}-Kontextes hängen von +der @code{stringTunings}-Eigenschaft ab, die die gleiche Bedeutung +wie im TabStaff-Kontext hat. Siehe auch @ref{Angepasste Tabulaturen} +zu Information über die @code{stringTunings}Eigenschaft. + +Die graphische Erscheinung eines Bunddiagrammes kann den +Bedürfnissen angepasst werden, indem Eigenschaften der +@code{fret-diagram-interface}-Schnittstelle verändert werden. +Einzelheiten finden sich in @rinternals{fret-diagram-interface}. +Die Schnittstelleneigenschaften eines @code{FretBoards}-Diagramms +gehören dem @code{FretBoards.FretBoard}-Kontext an. + + +@predefined +@code{\predefinedFretboardsOff}, +@code{\predefinedFretboardsOn}. +@endpredefined + + +@seealso +Notationsreferenz: +@ref{Angepasste Tabulaturen}. + +Schnipsel: +@rlsr{Fretted strings}. + +Referenz der Interna: +@rinternals {fret-diagram-interface}. + +@knownissues +Automatische Bundberechnung funktioniert nicht richtig für Instrumente +mit nicht-monotonischer Stimmung. + + +@node Fingersatz der rechten Hand +@unnumberedsubsubsec Fingersatz der rechten Hand +@translationof Right-hand fingerings + +@cindex bundierte Saiteninstrumente, Fingersatz der rechten Hand +@cindex Bundinstrumente, Fingersatz der rechten Hand +@cindex Fingersatz der rechten Hand, bundierte Saiteninstrumente +cindex Fingersatz der rechten Hand, Bundinstrumente +@cindex rechte Hand, Fingersatz für bundierte Saiteninstrumente +@cindex rechte Hand, Fingersatz für Bundinstrumente + +@funindex rightHandFinger +@funindex \rightHandFinger + + +Fingersatz für die rechte Hand in Akkorden kann mit den +Bezeichnungen @var{p-i-m-a} notiert werden. Er muss innerhalb +eines Akkord-Konstruktes notiert werden. + + +@warning{Vor dem @code{@bs{}rightHandFinger} @strong{muss} ein +Minuszeichen gesetzt +werden und ein Leerzeichen nach dem schließenden @code{>}.} + +@lilypond[quote,verbatim,relative=0] +\clef "treble_8" +4 + + + +1 +@end lilypond + +Zur Erleichterung kann der Befehl @code{\rightHandFinger} zu ein paar +Buchstaben abgekürzt werden, etwa @code{RH}. + +@example +#(define RH rightHandFinger) +@end example + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{placement-of-right-hand-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingerings,-string-indications,-and-right-hand-fingerings.ly} + +@seealso +Schnipsel: +@rlsr{Fretted strings}. + +Referenz der Interna: +@rinternals{StrokeFinger}. + + +@node Gitarre +@subsection Gitarre +@translationof Guitar + +Die meisten der Besonderheiten von Gitarrennotation wurden im +allgemeinen Abschnitt behandelt, aber es gibt noch einige, die +hier gezeigt werden sollen. Teilweise soll ein Lead-sheet nur +die Akkordsymbole und den Gesangstext enthalten. Da LilyPond +ein Notensatzprogramm ist, wird es nicht für derartige +Projekte empfohlen, die keine eigentliche Notation beinhalten. +Anstatt dessen sollte ein Textbearbeitungsprogramm oder ein +Satzprogramm wie GuitarTeX (für erfahrende Benutzer) eingesetzt +werden. + +@menu +* Position und Barré anzeigen:: +* Flageolett und gedämpfte Noten:: +* Powerakkorde anzeigen:: +@end menu + +@node Position und Barré anzeigen +@unnumberedsubsubsec Position und Barré anzeigen +@translationof Indicating position and barring + +@cindex Position und Barré für bundierte Saiteninstrumente +@cindex Position und Barré für Bundinstrumente +@cindex bundierte Saiteninstrumente, Position und Barré anzeigen +@cindex Bundinstrumente, Position und Barré anzeigen +@cindex Barré, anzeigen für bundierte Saiteninstrumente +@cindex Barré, anzeigen für Bundinstrumente + +Das Beispiel zeigt, wie man Griff- und Barréposition +notieren kann. + +@lilypond[quote,ragged-right,verbatim,relative=0] +\clef "treble_8" +b16 d g b e +\textSpannerDown +\override TextSpanner #'(bound-details left text) = #"XII " +g16\startTextSpan +b16 e g e b g\stopTextSpan +e16 b g d +@end lilypond + + +@seealso +Notationsreferenz: +@ref{Text mit Verbindungslinien}. + +Schnipsel: +@rlsr{Fretted strings}, +@rlsr{Expressive marks}. + + +@node Flageolett und gedämpfte Noten +@unnumberedsubsubsec Flageolett und gedämpfte Noten +@translationof Indicating harmonics and dampened notes + +@cindex bundierte Saiteninstrumente, gedämpfte Noten +@cindex Bundinstrumente, gedämpfte Noten +@cindex bundierte Saiteninstrumente, Flageolett +@cindex Bundinstrumente, Flageolett +@cindex Dämpfung, bundierte Saiteninstrumente +@cindex Dämpfung, Bundinstrumente +@cindex gedämpfte Noten, bundierte Saiteninstrumente +@cindex gedämpfte Noten, Bundinstrumente +@cindex Flageolett, bundierte Saiteninstrumente +@cindex Flageolett, Bundinstrumente + +Besondere Notenköpfe können eingesetzt werden, um gedämpfte Noten +oder Flageoletttöne anzuzeigen. Flageoletttöne werden normalerweise +mit einem Text erklärt. + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \clef "treble_8" + \override Staff.NoteHead #'style = #'harmonic-mixed + d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 +} +@end lilypond + +Gedämpfte oder gestoppte Noten werden in normalen und Tabulatur-Systemen +unterstützt: + +@lilypond[quote,ragged-right,verbatim] +music = \relative c' { + < a\3 \deadNote c\2 a'\1 >4 + < b\3 \deadNote d\2 b'\1 > + < c\3 \deadNote e\2 c'\1 > + \deadNotesOn + \times 2/3 { g8 b e } + \deadNotesOff + < a,\3 c\2 e\1 >1 +} +\new StaffGroup << + \new Staff { + \clef "treble_8" + \music + } + \new TabStaff { + \music + } +>> +@end lilypond + +Eine andere Spieltechnik (insbesondere bei elektrischen Gitarren +benutzt) ist @notation{palm mute}. Hierbei wird die Saite teilweise +durch die Handfläche der Schlaghand gedämpft. LilyPond unterstützt +die Notation dieser Art von Technik, indem die Notenköpfe der +so gedämpften Noten durch Dreiecke ersetzt werden. + +@lilypond[quote,ragged-right,verbatim] +\new Voice { % Warning: explicit Voice instantiation is + % required to have palmMuteOff work properly + % when palmMuteOn comes at the beginning of + % the piece. + \relative c, { + \clef "G_8" + \palmMuteOn + e8^\markup { \musicglyph #"noteheads.u2do" = palm mute } + < e b' e > e + \palmMuteOff + e e \palmMute e e e | + e8 \palmMute { e e e } e e e e | + < \palmMute e b' e >8 \palmMute { e e e } < \palmMute e b' e >2 + } +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Besondere Notenköpfe}, +@ref{Notenkopfstile}. + +Schnipsel: +@rlsr{Fretted strings}. + + +@node Powerakkorde anzeigen +@unnumberedsubsubsec Powerakkorde anzeigen +@translationof Indicating power chords + +@funindex powerChords +@funindex \powerChords + +@cindex Powerakkorde +@cindex Powerchords + +Powerakkorde und ihre Symbole können im Akkordmodus oder als Akkordkonstruktionen +gesetzt werden: + +@lilypond[quote,ragged-right,verbatim] +ChordsAndSymbols = { + \chordmode { + \powerChords + e,,1:1.5 + a,,1:1.5.8 + \set minimumFret = #8 + c,1:1.5 + f,1:1.5.8 + } + \set minimumFret = #5 + 1 + 1 +} +\score { + << + \new ChordNames { + \ChordsAndSymbols + } + \new Staff { + \clef "treble_8" + \ChordsAndSymbols + } + \new TabStaff { + \ChordsAndSymbols + } + >> +} +@end lilypond + +Powerakkord-Symbole werden automatisch ausgeschaltet, wenn einer der anderen +normalen Akkord-Modifikatoren verwendet wird: + +@lilypond[quote,ragged-right,verbatim] +mixedChords = \chordmode { + c,1 + \powerChords + b,,1:1.5 + fis,,1:1.5.8 + g,,1:m +} +\score { + << + \new ChordNames { + \mixedChords + } + \new Staff { + \clef "treble_8" + \mixedChords + } + \new TabStaff { + \mixedChords + } + >> +} +@end lilypond + +@seealso +Glossar: +@rglos{power chord}. + +Notationsreferenz: +@ref{Erweiterte und modifizierte Akkorde}, +@ref{Akkordbezeichnungen drucken}. + +Schnipsel: +@rlsr{Fretted strings}. + + + + +@node Banjo +@subsection Banjo +@translationof Banjo + +@menu +* Banjo-Tabulaturen:: +@end menu + +@node Banjo-Tabulaturen +@unnumberedsubsubsec Banjo-Tabulaturen +@translationof Banjo tablatures + +@cindex Banjo-Tabulaturen +@cindex Tabulatur, Banjo + +LilyPond hat grundlegende Unterstützung für fünfsaitige Banjo. +Die Banjo-Tabulatur-Funktion sollte zum Notieren von Banjo-Tabulaturen +verwendet werden, damit die richtigen Bund-Nummern für die fünfte +Saite gesetzt werden: + +@c due to crazy intervals of banjo music, absolute pitch is recommended + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff << + \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo + \set TabStaff.stringTunings = #banjo-open-g-tuning + { + \stemDown + g8 d' g'\5 a b g e d' | + g4 d''8\5 b' a'\2 g'\5 e'\2 d' | + g4 + } +>> +@end lilypond + +@cindex Banjo-Stimmung +@cindex Stimmung, Banjo + +@funindex banjo-c-tuning +@funindex banjo-modal-tuning +@funindex banjo-open-d-tuning +@funindex banjo-open-dm-tuning +@funindex four-string-banjo + +Eine Anzahl von üblichen Stimmungen für Banjo sind in LilyPond +vordefiniert: +@code{banjo-c-tuning} (gCGBD), @code{banjo-modal-tuning} (gDGCD), +@code{banjo-open-d-tuning} (aDF#AD) und @code{banjo-open-dm-tuning} +(aDFAD). + +Diese Stimmungen können für das viersaitige Banjo angepasst werden, +indem die @code{four-string-banjo}-Funktion eingesetzt wird: + +@example +\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) +@end example + + +@seealso +Schnipsel: +@rlsr{Fretted strings}. + +Installierte Dateien: +@file{scm/tablature.scm} enthält vordefinierte Banjo-Stimmungen. diff --git a/Documentation/de/notation/input.itely b/Documentation/de/notation/input.itely new file mode 100644 index 0000000000..570f1b444d --- /dev/null +++ b/Documentation/de/notation/input.itely @@ -0,0 +1,2394 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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" + +@c Translators: Till Paala + +@node Allgemeine Eingabe und Ausgabe +@chapter Allgemeine Eingabe und Ausgabe +@translationof General input and output + +Dieses Kapitel erklärt allgemeine Fragen zur Eingabe und Ausgabe von +Notation mit LilyPond und weniger direkte Fragen der Notation. + +@menu +* Eingabestruktur:: +* Titel:: +* Arbeiten an Eingabe-Dateien:: +* Ausgabe kontrollieren:: +* MIDI-Ausgabe:: +@end menu + + +@node Eingabestruktur +@section Eingabestruktur +@translationof Input structure + +Das hauptsächliche Eingabeformat von LilyPond sind Textdateien. +Üblicherweise werden diese Dateien mit der Endung @file{.ly} +versehen. + +@menu +* Struktur einer Partitur:: +* Mehrere Partituren in einem Buch:: +* Mehrere Ausgabedateien aus einer Eingabedatei:: +* Dateinamen der Ausgabedateien:: +* Die Dateistruktur:: +@end menu + + +@node Struktur einer Partitur +@subsection Struktur einer Partitur +@translationof Structure of a score + +@funindex \score + +Eine @code{\score}-Umgebung muss einen einzelnen musikalischen +Ausdruck beinhalten, der durch geschweifte Klammern begrenzt wird: + +@example +\score @{ +... +@} +@end example + +@warning{Es darf @strong{nur ein} äußerer musikalischer Ausdruck +in der @code{\score}-Umgebung geschrieben werden, und er @strong{muss} +von geschweiften Klammern umgeben sein.} + +Dieser einzelne musikalische Ausdruck kann beliebige Größe annehmen und +andere musikalische Ausdrücke von beliebiger Komplexität beinhalten. +Alle diese Beispiele sind musikalische Ausdrücke: + +@example +@{ c'4 c' c' c' @} +@end example + +@lilypond[verbatim,quote] +{ + { c'4 c' c' c' } + { d'4 d' d' d' } +} +@end lilypond + +@lilypond[verbatim,quote] +<< + \new Staff { c'4 c' c' c' } + \new Staff { d'4 d' d' d' } +>> +@end lilypond + +@example +@{ + \new GrandStaff << + \new StaffGroup << + \new Staff @{ \Flöte @} + \new Staff @{ \Oboe @} + >> + \new StaffGroup << + \new Staff @{ \GeigeI @} + \new Staff @{ \GeigeII @} + >> + >> +@} +@end example + +Kommentare bilden eine Ausnahme dieser Regel. (Andere Ausnahmen +siehe @ref{Die Dateistruktur}.) Sowohl einzeilige als auch +Blockkommentare (eingegrenzt durch @code{%@{ .. %@}}) können +an beliebiger Stelle einer Eingabedatei geschrieben werden. Sie +können innerhalb oder außerhalb der @code{\score}-Umgebung vorkommen, +und innerhalb oder außerhalb des einzelnen musikalischen Ausdrucks +innerhalb der @code{\score}-Umgebung. + +Denken Sie daran, dass auch eine Datei, die nur eine @code{\score}-Umgebung +enhält, implizit in eine @code{\book}-Umgebung eingeschlossen wird. Eine +@code{\book}-Umgebung in einer Eingabdatei produziert wenigstens eine +Ausgabedatei, und standardmäßig wird der Name der Ausagabedatei aus dem +Namen der Eingabedatei abgeleitet. @file{fandangoforelephants.ly} produziert +also @file{fandangoforelephants.pdf}. + +Zu weiteren Einzelheiten zu @code{\book}-Umgebungen siehe +@ref{Mehrere Partituren in einem Buch}, +@ref{Mehrere Ausgabedateien aus einer Eingabedatei} und +@ref{Dateistruktur}. + + +@seealso +Handbuch zum Lernen: +@rlearning{Arbeiten an Eingabe-Dateien}, +@rlearning{Musikalische Ausdrücke erklärt}, +@rlearning{Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck}. + +Notationsreferenz: +@ref{Mehrere Partituren in einem Buch}, +@ref{Mehrere Ausgabedateien aus einer Eingabedatei} und +@ref{Dateistruktur}. + + +@node Mehrere Partituren in einem Buch +@subsection Mehrere Partituren in einem Buch +@translationof Multiple scores in a book + +@funindex \book +@cindex Sätze, mehrere + +Eine Partitur kann mehrere musikalische Stücke und verschiedene +Texte beinhalten. Beispiele hierzu sind etwa eine Etüdensammlung +oder ein Orchesterstück mit mehreren Sätzen. Jeder Satz wird +in einer eigenen @code{\score}-Umgebung notiert: + +@example +\score @{ + @var{..Noten..} +@} +@end example + +@noindent +und Texte werden mit einer @code{\markup}-Umgebung geschrieben: + +@example +\markup @{ + @var{..Text..} +@} +@end example + +@funindex \book + +Alle Sätze und Texte, die in derselben @file{.ly}-Datei vorkommen, +werden normalerweise in eine einzige Ausgabedatei gesetzt. + +@example +\score @{ + @var{..} +@} +\markup @{ + @var{..} +@} +\score @{ + @var{..} +@} +@end example + +Eine wichtige Ausnahme stellen Dokumente dar, +die mit lilypond-book erstellt werden, für die Sie explizit +@code{\book}-Umgebungen notieren müssen, weil sonst nur die erste +@code{\score}- bzw. @code{\markup}-Umgebung angezeigt wird. + +Der Kopfbereich für jedes Musikstück kann innerhalb der @code{\score}-Umgebung +definiert werden. Die @code{piece}-(Stück)-Bezeichnung aus dieser +@code{\header}-Umgebung wird vor jedem Satz ausgegeben. Die Überschrift für +ein ganzes Buch kann innerhalb von @code{\book} notiert werden, aber wenn +diese Umgebung fehlt, wird die @code{\header}-Umgebung genommen, die auf +erster Ebene der Datei notiert ist. + +@example +\header @{ + title = "Acht Miniaturen" + composer = "Igor Stravinsky" +@} +\score @{ + @dots{} + \header @{ piece = "Romanze" @} +@} +\markup @{ + ..Text der zweiten Strophe.. +@} +\markup @{ + ..Text der dritten Strophe.. +@} +\score @{ + @dots{} + \header @{ piece = "Menuetto" @} +@} +@end example + +@funindex \bookpart + +Stücke können innerhalb eines Buches mit @code{\bookpart} gruppiert +werden. Derartige Buchabschnitte werden durch einen Seitenumbruch +voneinander getrennt und können wie auch das ganze Buch selber mit +einem Titel innerhalb einer @code{\header}-Umgebung beginnen. + +@example +\bookpart @{ + \header @{ + title = "Buchtitel" + subtitle = "Erster Teil" + @} + \score @{ @dots{} @} + @dots{} +@} +\bookpart @{ + \header @{ + subtitle = "Zweiter Teil" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + +@node Mehrere Ausgabedateien aus einer Eingabedatei +@subsection Mehrere Ausgabedateien aus einer Eingabedatei +@translationof Multiple output files from one input file + +Wenn Sie mehrere Ausgabedateien aus derselben @file{.ly}-Datei haben +wollen, können Sie mehrere @code{\book}-Umgebungen hinzufügen, wobei +jede Umgebung eine neue Ausgabedatei produziert. Wenn Sie keine +@code{\book}-Umgebung in der Eingabedatei angeben, wird die Datei von +LilyPond implizit als eine große @code{\book}-Umgebung behandelt, siehe +auch @ref{Dateistruktur}. + +Wenn man mehrere Dateien aus einer einzigen Eingabedatei erstellt, stellt +LilyPond sicher, dass keine der Ausgabedateien der vorhandenen +@code{\book}-Umgebungen eine andere Ausgabedatei, etwa von der vorherigen +@code{\book}-Umgebung, überschreibt. + +Dies geschieht, indem ein Suffix an den Ausgabenamen für jede +@code{\book}-Umgebung gehängt wird, die den Dateinamen der Eingabdatei +als Grundlage nimmt. + +Das Standardverhalten ist es, einen Zahlen-Suffix für die Namen hinzuzufügen, +die in Konflikt stehen. Der Code + +@example +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +@noindent +produziert also + +@itemize +@item +@file{eightminiatures.pdf}, +@item +@file{eightminiatures-1.pdf} and +@item +@file{eightminiatures-2.pdf}. +@end itemize + + +@node Dateinamen der Ausgabedateien +@subsection Dateinamen der Ausgabedateien +@translationof Output file names + +@funindex \bookOutputSuffix +@funindex \bookOutputName + +LilyPond stellt die Möglichkeit zur Verfügung zu kontrollieren, welche +Dateinamen für welche Back-ends benutzt werden sollen, wenn die Ausgabedateien +erstellt werden. + +Im vorhergehenden Abschnitt wurde gezeigt, wir LilyPond gleichnamige +Ausgabedateien verhindert, wenn mehrere Ausgabedateien aus derselben +Eingabedatei erstellt werden. Es gibt auch die Möglichkeit, eigene +Suffixe für jeden @code{\book}-Abschnitt zu definieren, sodass man etwa +Dateinamen wie @file{eightminiatures-Romanze.pdf}, @file{eightminiatures-Menuetto.pdf} +und @file{eightminiatures-Nocturne.pdf} produzieren kann, indem man +eine @code{\bookOutputSuffix}-Angabe in jede @code{\book}-Umgebung +einfügt. + +@example +\book @{ + \bookOutputSuffix "Romanze" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Menuetto" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Nocturne" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +Man kann auch einen anderen Dateinamen für die Ausgabedatei einer +@code{\book}-Umgebung erstellen, indem man @code{\bookOutputName}-Angabe +macht: + +@example +\book @{ + \bookOutputName "Romanze" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Menuetto" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Nocturne" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +Die obige Datei produziert folgene Ausgabedateien: + +@itemize +@item +@file{Romanze.pdf}, +@item +@file{Menuetto.pdf} and +@item +@file{Nocturne.pdf}. +@end itemize +@node Die Dateistruktur +@subsection Die Dateistruktur +@translationof File structure + +@funindex \paper +@funindex \midi +@funindex \layout +@funindex \header +@funindex \score +@funindex \book +@funindex \bookpart + +@cindex Dateistruktur +@cindex Struktur, Datei +@cindex Eingabedatei, Struktur +@cindex Quelldatei, Struktur + +Eine @file{.ly}-Datei kann eine beliebige Anzahl an Ausdrücken +auf der obersten Ebene beinhalten, wobei ein Ausdruck der obersten +Ebene einer der folgenden sein kann: + +@itemize +@item +Eine Ausgabedefinition, wie @code{\paper}, @code{\midi} und +@code{\layout}. Derartige Definitionen auf oberster Ebene verändern +die globalen Einstellungen für das ganze @qq{Buch}. Wenn mehr +als eine derartige Definition desselben Typs angegeben wird, hat +die spätere Vorrang. + +@item +Ein direkter Scheme-Ausdruck, wie etwa +@code{#(set-default-paper-size "a7" 'landscape)} oder +@code{#(ly:set-option 'point-and-click #f)}. + +@item +Eine @code{\header}-Umgebung. Damit wird die globale Titelei +eingestellt. Das ist die Umgebung, in der sich Definition für +das ganze Buch befinden, wie Komponist, Titel usw. + +@item +Eine @code{\score}-Umgebung. Die in ihr enthaltene Partitur wird +zusammen mit anderen vorkommenden @code{\score}-Umgebungen gesammelt +und in ein @code{\book} zusammengefasst. Dieses Verhalten kann +verändert werden, indem die Variable @code{toplevel-score-handler} +auf höchster Ebene gesetzt wird. Die Definition des Standards findet sich +in der Datei @file{../scm/lily.scm}. + +@item +Eine @code{\book}-Umgebung fasst mehrere Sätze (d. h. mehrere +@code{\score}-Umgebungen) logisch in ein Dokument zusammen. +Wenn mehrere @code{\score}-Partituren vorkommen, wird für jede +@code{\book}-Umgebung eine eigene Ausgabedatei erstellt, in der +alle in der Umgebung enthaltenen Partituren zusammengefasst sind. +Der einzige Grund, explizit eine @code{\book}-Umgebung zu setzen, +ist, wenn mehrere Ausgabedateien aus einer einzigen Quelldatei +erstellt werden sollen. Eine Ausnahme sind lilypond-book-Dokumente, +in denen eine @code{\book}-Umgebung explizit hinzugefügt werden +muss, wenn mehr als eine @code{\score}- oder @code{\markup}-Umgebung +im gleichen Beispiel angezeigt werden soll. Dieses Verhalten +kann verändert werden, indem die Variable @code{toplevel-book-handler} +auf höchster Ebene gesetzt wird. Die Definition des Standards +findet sich in der Datei @file{../scm/lily.scm}. + +@item +Eine @code{\bookpart}-Umgebung. Ein Buch (@code{\book}) kann in +mehrere Teile untergliedert sein, indem @code{\bookpart}-Umgebungen +eingesetzt werden. Jeder Buchabschnitt beginnt auf einer neuen +Seite und kann eigene Papierdefinitionen in einer @code{\paper}-Umgebung +haben. + +@item +Ein zusammengesetzter musikalischer Ausdruck wie etwa +@example +@{ c'4 d' e'2 @} +@end example + +Dieses Beispiel wird von LilyPond automatisch in einer +@code{\score}-Umgebung in einem Buch interpretiert und +mit anderen @code{\score}-Umgebungen und musikalischen +Ausdrücken auf der höchsten Ebene zusammen ausgegeben. +Anders gesagt: eine Datei, die nur das obige Beispiel +beinhaltet, wird übersetzt zu + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + @{ c'4 d' e'2 @} + @} + @} + @} + \layout @{ @} + \header @{ @} +@} +@end example + +Dieses Verhalten kann verändert werden, indem die Variable +@code{toplevel-music-handler} auf der obersten Ebene gesetzt +wird. Die Definition des Standards findet sich in der Datei +@file{../scm/lily.scm}. + +@item +Eine Textbeschriftung, eine Strophe etwa: +@example +\markup @{ + 2. Die erste Zeile der zweiten Strophe. +@} +@end example + +Textbeschriftungen werden über, zwischen oder unter musikalischen +Ausdrücken gesetzt, so wie sie notiert werde. + +@cindex Variablen + +@item +Eine Variable, wie +@example +foo = @{ c4 d e d @} +@end example + +Sie kann dann später in der Datei eingesetzt werden, indem @code{\foo} +geschrieben wird. Die Bezeichnung der Variable darf nur aus +alphabetischen Zeichen bestehen, keine Zahlen, Unter- oder Bindestriche. + +@end itemize + +Das folgende Beispiel zeigt drei Dinge, die auf der obersten Ebene +notiert werden können: + +@example +\layout @{ + % Zeilen rechtsbündig setzen + ragged-right = ##t +@} + +\header @{ + title = "Do-re-mi" +@} + +@{ c'4 d' e2 @} +@end example + +An einer beliebigen Stelle der Datei kann jede der folgenden lexikalen +Anweisungen notiert werden: + +@itemize +@item @code{\version} +@item @code{\include} +@item @code{\sourcefilename} +@item @code{\sourcefileline} +@item +Ein einzeiliger Kommentar, beginnend mit @code{%}. + +@item +Ein mehrzeiliger Kommentar, umgeben von @code{%@{ .. %@}}. + +@end itemize + +@cindex Leerzeichen + +Leerzeichen zwischen Einheiten in der Eingabe werden generell ignoriert +und können nach Belieben weggelassen werden oder hinzugefügt werden, +um die Lesbarkeit des Codes zu verbessern. Mindestens ein Leerzeichen +sollte jedoch unter folgenden Umständen immer eingesetzt werden, um +Fehler zu vermeiden: + +@itemize +@item +Vor und hinter jeder schließenden oder öffnenden Klammer, +@item +nach jedem Befehl oder jeder Variable, also jeder Einheit, die mit +@code{\} beginnt, +@item +nach jeder Einheit, die als Scheme-Ausdruck interpretiert werden, +also alle Einheiten, die mit @code{#} beginnen. +@item +Alle Einheiten von Scheme-Ausdrücken müssen mit Leerzeichen getrennt +werden, +@item +in Gesangstextabschnitten (@code{lyricmode}) müssen Leerzeichen +zwischen alle Ausdrücke in @code{\override}- und @code{\set}-Befehlen +gesetzt werden. Insbesondere müssen um Punkte und Gleichzeitszeichen +in Befehlen wie @code{\override Score . LyricTex #'font-size = #5)} +und vor dem gesamten Befehl geschrieben werden. + +@end itemize + +@seealso +Handbuch zum Lernen: +@rlearning{Wie eine LilyPond-Eingabe-Datei funktioniert}. + + +@node Titel +@section Titel +@translationof Titles and headers + +Fast alle gedruckten Noten beinhalten einen Titel und den Namen +des Komponisten, teilweise wird auch noch sehr viel mehr Information +zur Verfügung gestellt. + +@menu +* Titel erstellen:: +* Eigene Kopf und Fußzeilen sowie Titel:: +* Verweis auf die Seitenzahlen:: +* Inhaltsverzeichnis:: +@end menu + + +@node Titel erstellen +@subsection Titel erstellen +@translationof Creating titles + +Überschriften können für jede @code{\score}-Umgebung erstellt werden, sowohl +für die gesamte Datei (oder eine @code{\book}-Umgebung) als auch für +einzelne Buchabschnitte (innerhalb einer @code{\bookpart}-Umgebung). + +Der Inhalt der Titelei wird aus der @code{\header}-Umgebung übernommen. Die +@code{\header}-Umgebung eines Buches unterstützt folgende Felder: + +@table @code +@funindex dedication +@item dedication +Die Widmung der Noten, wird auf oben auf der ersten Seite gesetzt. + +@funindex title +@item title +Die Überschrift der Noten, wird unter der Widmung zentriert gesetzt. + +@funindex subtitle +@item subtitle +Untertitel, zentriert unter der Überschrift. + +@funindex subsubtitle +@item subsubtitle +Unteruntertitel, zentriert unter dem Untertitel. + +@funindex poet +@item poet +Name des Dichters, linksbündig unter dem Unteruntertitel. + +@funindex instrument +@item instrument +Bezeichnung des Instruments, zentriert unter dem Unteruntertitel. +Auch oben auf der Seite zentriert (andere als erste Seite). + +@funindex composer +@item composer +Name des Komponisten, rechtsbündig unter dem Unteruntertitel. + +@funindex meter +@item meter +Metrum, linksbündig unter dem Dichter. + +@funindex arranger +@item arranger +Name des Bearbeiters/Arrangeurs, rechtsbündig unter dem Komponisten. + +@funindex piece +@item piece +Bezeichnung des Stückes, linksbündig unter dem Metrum. + +@funindex opus +@item opus +Bezeichnung des Opus, rechtsbündig unter dem Bearbeiter. + +@cindex Seitenumbruch, erzwingen +@funindex breakbefore + +@item breakbefore +Hiermit beginnt der Titel auf einer neuen Seite. (Kann die Werte +##t (wahr) oder ##f (falsch) haben.) + +@funindex copyright +@item copyright +Anzeige eines Copyright, zentriert unten auf der ersten Seite. Um das +Copyright-Symbol zu notieren, siehe @ref{Zeichenkodierung}. + +@funindex tagline +@item tagline +Zentriert unten auf der letzten Seite. Enthält standardmäßig: @qq{Music +engraving by LilyPond (@var{version})---www.lilypond.org} + +@end table + +Hier eine Demonstration der möglichen Felder. Beliebige +Formatierungsbefehle für Textbeschriftung können in der Titelei +eingesetzt werden. Siehe hierzu auch @ref{Text formatieren}. + +@c KEEP LY +@lilypond[quote,verbatim,line-width=11.0\cm] +\paper { + line-width = 9.0\cm + paper-height = 10.0\cm +} + +\book { + \header { + dedication = "mir gewidmet" + title = \markup \center-column { "Titel erste Zeile" "Titel zweite Zeile, länger" } + subtitle = "Untertitel" + subsubtitle = #(string-append "Unteruntertitel LilyPond-Version " +(lilypond-version)) + poet = "Dichter" + composer = \markup \center-column { "Komponist" \small "(1847-1973)" } + texttranslator = "Übersetzer" + meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "r" \huge +"um" } + arranger = \markup { \fontsize #8.5 "Be" \fontsize #2.5 "ar" \fontsize +#-2.5 "be" \fontsize #-5.3 "i" \fontsize #7.5 "ter" } + instrument = \markup \bold \italic "Instrument" + piece = "Stück" + } + + \score { + { c'1 } + \header { + piece = "Stück zwei" + opus = "Opus1" + } + } + \markup { + und jetzt... + } + \score { + { c'1 } + \header { + piece = "Stück2" + opus = "Opus2" + } + } +} +@end lilypond + +Wie schon oben gezeigt, können mehrfache @code{\header}-Umgebungen +eingesetzt werden. Wenn das gleiche Feld in mehreren +Umgebungen, wird die letzte vorkommende +Version benutzt. Hier ein kurzes Beispiel: + +@example +\header @{ + composer = "Komponist" +@} +\header @{ + piece = "Stück" +@} +\score @{ + \new Staff @{ c'4 @} + \header @{ + piece = "Neues Stück" % überschreibt die die vorige Definition + @} +@} +@end example + +Wenn @code{\header} innerhalb der @code{\score}-Umgebung definiert wird, +wird normalerweise nur die Information von @code{piece} und @code{opus} +ausgegeben. Musikalische Ausdrücke innerhalb von @code{\score} müssen +vor @code{\header} gesetzt werden. + +@lilypond[quote,verbatim,line-width=11.0\cm] +\score { + { c'4 } + \header { + title = "title" % not printed + piece = "piece" + opus = "opus" + } +} +@end lilypond + +@funindex print-all-headers + +@noindent +Dieses Verhalten kann verändert werden (sodass alle Angaben aus der +Überschrift gesetzt werden, wenn sich @code{\header} innerhalb von +@code{\score} befindet), indem man schreibt: + +@example +\paper@{ + print-all-headers = ##t +@} +@end example + +@cindex Copyright +@cindex Tagline + +Die Standardfußzeile ist leer mit Ausnahme der ersten Seite, auf der +das @code{copyright}-Feld aus der @code{\header}-Umgebung eingefügt wird, +und die letzte Seite, auf der das @code{tagline}-Feld eingefügt wird. +Der Standardinhalt von @code{tagline} ist @qq{Music engraving by +LilyPond (@var{version})---www.lilypond.org}. Gut gesetzte Noten werben sehr effektiv +für LilyPond, darum bitten wir darum, diese Zeile stehen zu lassen, +wenn es möglich ist. + +Ein Titelfeld kann vollständig entfernt werden, indem es auf +falsch gesetzt wird: + +@example +\header @{ + tagline = ##f + composer = ##f +@} +@end example + + +@node Eigene Kopf und Fußzeilen sowie Titel +@subsection Eigene Kopf- und Fußzeilen sowie Titel +@translationof Custom headers footers and titles + +Kompliziertere Anpassungen können vorgenommen werden, indem die +folgenden Variablen innerhalb der @code{\paper}-Umgebung geändert +werden. Die Init-Datei @file{../ly/titling-init.ly} enthält das +Standardverhalten. + +@table @code + +@funindex bookTitleMarkup + +@item bookTitleMarkup +Das ist die Überschrift, die für das gesamte Dokument gilt. Üblicherweise +wird hier der Komponist und die Überschrift des Werkes genannt. + +@funindex scoreTitleMarkup + +@item scoreTitleMarkup +Das ist die Überschrift, die vor jede @code{\score}-Umgebung gesetzt wird. +Üblicherweise wird hier etwa die Bezeichnung eines Satzes notiert +(im @code{piece}-Feld). + +@funindex oddHeaderMarkup + +@item oddHeaderMarkup +Das ist der Seitenkopf für ungerade Seiten. + +@funindex evenHeaderMarkup + +@item evenHeaderMarkup +Das ist der Seitenkopf für gerade Seiten. Wenn undefiniert, wird der +ungerade Seitenkopf eingesetzt. + +Standardmäßig werden die Kopfzeilen so definiert, dass die Seitennummer +sich außen befindet und das Instrument zentriert gesetzt wird. + +@funindex oddFooterMarkup + +@item oddFooterMarkup +Das ist die Fußzeile für ungerade Seiten. + +@funindex evenFooterMarkup + +@item evenFooterMarkup +Das ist die Fußzeile für gerade Seiten. Wenn undefiniert, wird die +ungerade Fußzeile eingesetzt. + +Standardmäßig wird in der Fußzeile auf der ersten Seite das Copyright +und auf der letzten Seite die Tag-Zeile gesetzt. + +@end table + + +@funindex \paper +@cindex Kopfzeile +@cindex Fußzeile +@cindex Seitenlayout +@cindex Layout der Seite +@cindex Titel +@cindex Überschriften + +Die folgende Definition setzt die Überschrift linksbündig und +den Komponisten rechtsbündig auf einer einzelnen Zeile: + +@example +\paper @{ + bookTitleMarkup = \markup @{ + \fill-line @{ + \fromproperty #'header:title + \fromproperty #'header:composer + @} + @} +@} +@end example + +Kopf- und Fußzeile werden mit den Funktionen @code{make-header} und +@code{make-footer} erstellt, welche in @code{\paper} definiert werden. +Die Standardimplementationen finden sich in @file{ly/paper-defaults-init.ly} und +@file{ly/titling-init.ly}. + +Dieses Beispiel zentriert die Seitenzahlen unten auf jeder Seite: + +@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 + + +@node Verweis auf die Seitenzahlen +@subsection Verweis auf die Seitenzahlen +@translationof Reference to page numbers + +Eine bestimmte Stelle der Partitur kann mit einem @code{\label}-Befehl +markiert werden, sowohl auf oberster Ebene als auch innerhalb eines +musikalischen Ausdrucks. Auf diese Marke kann dann verwiesen werden, +um die Seitenzahl zu erhalten, auf der die Marke vorkommt. Der +Verweis wird mit dem Befehl @code{\page-ref} gefordert (innerhalb +von @code{\markup}). + +@c KEEP LY +@lilypond[verbatim,line-width=11.0\cm] +\header { tagline = ##f } +\book { + \label #'ErstePartitur + \score { + { + c'1 + \pageBreak \mark A \label #'ZeichenA + c'1 + } + } + + \markup { Die erste Partitur fängt auf + Seite \page-ref #'ErstePartitur "0" "?" an.} + \markup { Zeichen A befindet sich auf Seite + \concat { \page-ref #'ZeichenA "0" "?" . } } +} +@end lilypond + +Der @code{\page-ref}-Textbeschriftungsbefehl braucht drei Argumente: + +@enumerate + +@item die Marke, ein Scheme-Symbol, etwa @code{#'ErstePartitur}, +@item eine Beschriftung, die als Platzhalter benutzt wird, um die Breite des Verweisen zu schätzen, +@item eine Beschriftung, die anstelle der Seitenzahl gesetzt wird, wenn die Marke unbekannt ist. +@end enumerate + +Der Grund, warum ein Platzhalter benötigt wird, ist dass zu dem Zeitpunkt, +an dem die Textbeschriftungen ausgewertet werden, noch keine Seitenumbrüche +vorgenommen wurden und die Seitenzahlen deshalb noch nicht bekannt sind. +Um hier ein Problem zu vermeiden, wird die eigentliche Auswertung der +Textbeschriftung erst später ausgeführt, die Größe des Textes muss aber +schon vorher bekannt sein. Die Größe wird mithilfe des Platzhalters +bestimmt. Wenn eine Partitur zwischen 10 und 99 Seiten hat, kann man +"00" schreiben, also eine zweistellige Zahl. + +@code{\label} +@code{\page-ref} + +@predefined +@funindex \label, +@funindex \page-ref. +@endpredefined + + +@node Inhaltsverzeichnis +@subsection Inhaltsverzeichnis +@translationof Table of contents + +Ein Inhaltsverzeichnis kann eingefügt werden mit dem Befehl +@code{\markuplines \table-of-contents}. Die Elemente, die im +Inhaltsverzeichnis aufgelistet werden sollen, werden mit dem +@code{\tocItem}-Befehl markiert, welches sowohl auf höchster +Ebene als auch in einem musikalischen Ausdruck verwendet werden +kann. + +@verbatim +\markuplines \table-of-contents +\pageBreak + +\tocItem \markup "Erste Partitur" +\score { + { + c'4 % ... + \tocItem \markup "Ein bestimmter Punkt innerhalb der ersten Partitur" + d'4 % ... + } +} + +\tocItem \markup "zweite Partitur" +\score { + { + e'4 % ... + } +} +@end verbatim + +Die Beschriftungen, die benutzt werden um das Inhaltsverzeichnis +zu formatieren, sind in der @code{\paper}-Umgebung definiert. +Die Standardformatierungselemente sind @code{tocTitleMarkup} +um die Überschrift zu formatieren und @code{tocItemMarkup} um +die einzelnen Inhaltselemente zu formatieren, bestehend aus +dem Titelelement und einer Seitenzahl. Die Variablen können +durch den Benutzer geändert werden: + +@verbatim +\paper { + %% Übersetzung der Inhaltsverzeichnisüberschrift nach französisch: + tocTitleMarkup = \markup \huge \column { + \fill-line { \null "Table des matières" \null } + \hspace #1 + } + %% hier größere Schriftarten + tocItemMarkup = \markup \large \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page + } +} +@end verbatim + +Die Inhaltsverzeichniselemente Text und Seitenzahl werden +in der Definition von @code{tocItemMarkup} aufgerufen mit +@code{#'toc:text} und @code{#'toc:page}. + +Neue Befehle und Beschriftungen können auch definiert werden, +um eigene Inhaltsverzeichnisse zu gestalten: + +@itemize + +@item zuerst muss eine neue Beschriftungsvariable in der +@code{\paper}-Umgebung definiert werden + +@item dann muss die musikalische Funktion definiert werden, die +ein Element zum Inhaltsverzeichnis hinzufügt, indem die neue +Variable benutzt wird. + +@end itemize + +Das folgende Beispiel definiert einen neuen Stil um Akt-Bezeichnungen +einer Oper in das Inhaltsverzeichnis aufzunehmen: + +@verbatim +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) +@end verbatim + +@lilypond[line-width=11.0\cm] +\header { tagline = ##f } +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) + +\book { + \markuplines \table-of-contents + \tocAct \markup { Atto Primo } + \tocItem \markup { Coro. Viva il nostro Alcide } + \tocItem \markup { Cesare. Presti omai l'Egizzia terra } + \tocAct \markup { Atto Secondo } + \tocItem \markup { Sinfonia } + \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } + \markup \null +} +@end lilypond + +Die Zeile zwischen dem Inhalt und der Seitenzahl kann mit einer gepunkteten +Linie gefüllt werden: + +@lilypond[verbatim,quote] +\header { tagline = ##f } +\paper { + tocItemMarkup = \tocItemWithDotsMarkup +} + +\book { + \markuplines \table-of-contents + \tocItem \markup { Allegro } + \tocItem \markup { Largo } + \markup \null +} +@end lilypond + + +@seealso +Installierte Dateien: +@file{../ly/toc-init.ly}. + +@funindex \table-of-contents +@funindex \tocItem + +@predefined +@code{\table-of-contents}, +@code{\tocItem}. +@endpredefined + + +@node Arbeiten an Eingabe-Dateien +@section Arbeiten an Eingabe-Dateien +@translationof Working with input files + +@menu +* LilyPond-Dateien einfügen:: +* Verschiedene Editionen aus einer Quelldatei:: +* Zeichenkodierung:: +* LilyPond-Notation anzeigen:: +@end menu + + +@node LilyPond-Dateien einfügen +@subsection LilyPond-Dateien einfügen +@translationof Including LilyPond files + +@funindex \include +@cindex einfügen von Dateien +@cindex Dateien einfügen + +Ein größeres Projekt kann in einzelne Dateien aufgeteilt werden. +Um eine andere Datei einzubinden, kann der Befehl + +@example +\include "andereDatei.ly" +@end example + +@noindent +benutzt werden. + +Die Zeile @code{\include "andereDatei.ly"} benimmt sich genauso, +also ob der Inhalt der Datei @file{andereDatei.ly} komplett in die +Hauptdatei eingefügt werden würde. So kann man für ein größeres +Projekt die einzelnen Stimmen der Instrumente getrennt notieren +und sie dann in einer Partitur-Datei benutzen. Meistens werden +in den eingefügten Dateien einige Variablen definiert, die dann +auch in der Hauptdatei eingesetzt werden können. Mit Marken (Tags) +gekennzeichnete Abschnitte können eingesetzt werden, um die +entsprechenden Noten etc. an verschiedenen Stellen in der Datei +zur Verfügung zu stellen. Siehe auch @ref{Verschiedene Editionen aus einer Quelldatei}. + +Auf Dateien im aktuellen Verzeichnis kann einfach mit dem Dateinamen +nach dem @code{\include}-Befehl verwiesen werden. Dateien an anderen +Stellen können eingebunden werden, indem entweder ein vollständiger +Pfad oder ein relativer Pfad zu der Datei angegeben wird. Hierbei +sollten die für UNIX typischen Schrägstriche (/) und nicht die +rückwärtsgeneigten von Windows (\) verwendet werden, um die Verzeichnisse +zu trennen. Wenn etwa die Datei @file{kram.ly} ein Verzeichnis +höher liegt als das aktuelle Verzeichnis, sollte der Befehl so +aussehen: + +@example +\include "../kram.ly" +@end example + +@noindent +Wenn die Orchesterstimmen andererseits in einem Unterordner mit +der Bezeichnung @code{stimmen} liegen, sieht er folgendermaßen +aus: + +@example +\include "stimmen/VI.ly" +\include "stimmen/VII.ly" +... etc +@end example + +Dateien, die eingebunden werden sollen, können selber auch wiederum +ein @code{\include} enthalten. Diese Einbindung zweiter Ebene +werden erst interpretiert, wenn sie sich in der Hauptdatei befinden, +sodass die Pfadangaben hier nicht relativ zur eingebundenen Datei, +sondern relativ zur Hauptdatei gesetzt werden müssen. Dieses Verhalten +kann jedoch auch verändert werden, indem man lilypond die Option +@code{-drelative-includes} auf der Kommandozeile zuweist (oder indem +man den Befehl @code{#(ly:set-option 'relative-includes #t)} an den +Beginn der Quelldatei schreibt). Mit @code{relative-includes} wird +der Pfad jedes @code{\include}-Befehls als relativ zu der Datei angenommen, +in der sich der Befehl befindet. Dieses Verhalten wird empfohlen und wird +in zukünftigen Versionen von LilyPond den Standard darstellen. + +Dateien können auch aus einem Verzeichnis eingebunden werden, +dass im Suchpfad von LilyPond liegt. Hierzu muss auf der +Kommandozeile das entsprechende Verzeichnis angegeben werden +und die Dateien, die eingebunden werden, müssen nur mit ihrem Namen +notiert sein. Wenn etwa die Datei @file{Haupt.ly} kompiliert +werden soll, die Dateien aus dem Unterverzeichnis @file{stimmen} +einbindet, müssen sie sich im Verzeichnis von @file{Haupt.ly} +befinden und dann LilyPond folgendermaßen aufrufen: + +@example +lilypond --include=stimmen Haupt.ly +@end example + +@noindent +In @file{Haupt.ly} steht: + +@example +\include "VI.ly" +\include "VII.ly" +... usw. +@end example + +Dateien, die in vielen Partituren verwendet werden sollen, können +im LilyPond-Verzeichnis @file{../ly} gespeichert werden. (Die +Stelle, an der dieses Verzeichnis sich befindet, hängt vom Betriebssystem +ab, siehe hierzu @rlearning{Mehr Information}). Dateien +in diesem Verzeichnis können einfach mit ihrem Namen eingefügt werden. +So werden auch die Sprachdateien wie etwa @file{deutsch.ly} eingefügt. + +LilyPond lädt eine Anzahl an Dateien, wenn das Programm aufgerufen wird. +Diese Dateien sind für den Benutzer nicht ersichtlich, aber die Dateien +können identifiziert werden, indem LilyPond auf der Kommandozeile mit +Option aufgerufen wird: @code{lilypond --verbose}. Hiermit wird +neben anderer Information auch eine Liste von Pfaden und Dateien +aufgeführt, die LilyPond benutzt. Die wichtigeren Dateien werden +im Abschnitt @rlearning{Mehr Information} besprochen. +Diese Dateien können verändert werden, aber Änderungen gehen verloren, +wenn eine neue LilyPond-Version installiert wird. + +Eine einfache Beispiele, die die Benutzung von @code{\include} demonstrieren, +sind dargestellt in +@rlearning{Partituren und Stimmen}. + +@seealso +Handbuch zum Lernen: +@rlearning{Mehr Information}, +@rlearning{Partituren und Stimmen}. + +@knownissues + +Wenn eine Datei eingebunden wird, deren Name einer Datei aus +dem Installationsverzeichnis von LilyPond entspricht, wird die +installierte Datei anstelle der eigenen verwendet. + + +@node Verschiedene Editionen aus einer Quelldatei +@subsection Verschiedene Editionen aus einer Quelldatei +@translationof Different editions from one source + +Es gibt verschiedene Funktionen, die es möglich machen, unterschiedliche +Versionen einer Partitur aus der gleichen Quelldatei zu produzieren. +Variablen werden am besten eingesetzt, wenn es darum geht, längere +Notenpassagen und/oder Anmerkungen/Textmarken miteinander auf +verschiedene Weise zu kombinieren. Tag-Marken dagegen werden am +besten eingesetzt, wenn eine von mehreren kurzen alternativen +Notenabschnitten ausgewählt werden soll. Egal welche Methode am +Ende eingesetzt wird: Es erleichtert die Arbeit in jedem Fall, wenn +die eigentlichen Noten und die Struktur der Partitur voneinander +getrennt notiert werden -- so kann die Struktur geändert werden, +ohne dass man Änderungen an den Noten vornehmen muss. + +@menu +* Variablen benutzen:: +* Marken benutzen:: +* Globale Einstellungen benutzen:: +@end menu + +@node Variablen benutzen +@unnumberedsubsubsec Variablen benutzen +@translationof Using variables + +@cindex Variablen, Benutzung + +Wenn Notenabschnitt in Variablen definiert werden, können sie +an unterschiedlichen Stellen in der Partitur eingesetzt werden, +siehe auch @rlearning{Stücke durch Bezeichner organisieren}. Zum +Beispiel enthält eine Vokalpartitur für ein @notation{a cappella} +Stück oft einen Klavierauszug, der das Einüben einfacher macht. +Der Klavierauszug enthält die gleichen Noten, sodass man sie nur +einmal notieren muss. Noten aus zwei Variablen können auf einem +System kombiniert werden, siehe @ref{Automatische Kombination von Stimmen}. +Hier ein Beispiel: + +@lilypond[verbatim,quote] +sopranoMusic = \relative c'' { a4 b c b8( a) } +altoMusic = \relative g' { e4 e e f } +tenorMusic = \relative c' { c4 b e d8( c) } +bassMusic = \relative c' { a4 gis a d, } +allLyrics = \lyricmode {King of glo -- ry } +<< + \new Staff = "Soprano" \sopranoMusic + \new Lyrics \allLyrics + \new Staff = "Alto" \altoMusic + \new Lyrics \allLyrics + \new Staff = "Tenor" { + \clef "treble_8" + \tenorMusic + } + \new Lyrics \allLyrics + \new Staff = "Bass" { + \clef "bass" + \bassMusic + } + \new Lyrics \allLyrics + \new PianoStaff << + \new Staff = "RH" { + \set Staff.printPartCombineTexts = ##f + \partcombine + \sopranoMusic + \altoMusic + } + \new Staff = "LH" { + \set Staff.printPartCombineTexts = ##f + \clef "bass" + \partcombine + \tenorMusic + \bassMusic + } + >> +>> +@end lilypond + +Unterschiedliche Partituren, die entweder nur den Chor oder das +Klavier zeigen, können produziert werden, indem die Struktur +verändert wird; die Noten müssen dazu nicht verändert werden. + +Für längere Partituren können Variablen in eigene Dateien notiert +werden, die dann eingebunden werden, siehe @ref{LilyPond-Dateien einfügen}. + + +@node Marken benutzen +@unnumberedsubsubsec Marken benutzen +@translationof Using tags + +@cindex Tag +@cindex Marke +@cindex markierte Noten entfernen +@cindex markierte Noten behalten + +@funindex \tag +@funindex \keepWithTag +@funindex \removeWithTag +@funindex tag +@funindex keepWithTag +@funindex removeWithTag + +Der @code{\tag #'@var{TeilA}}-Befehl markiert einen musikalischen +Ausdruck mit der Bezeichnung @var{TeilA}. Ausdrücke, die auf diese +Weise markiert werden, können mit ihrer Bezeichnung später ausgewählt +bzw. ausgefiltert werden. Das geschieht mit den Befehlen +@code{\keepWithTag #'@var{Bezeichnung}} bzw. @code{\removeWithTag #'@var{Bezeichnung}}. +Die Wirkung dieser Filter auf die markierten Notenabschnitte ist +wie folgt: + +@multitable @columnfractions .5 .5 + +@headitem Filter + @tab Resultat + +@item +Markierte Noten mit vorgesetztem @code{\keepWithTag #'@var{Bezeichnung}} + @tab Unmarkierte Noten und Noten mit der Marke @var{Bezeichnung} werden + gesetzt, Noten mit einer anderen Marke werden nicht angezeigt. + +@item +Markierte Noten mit vorgesetztem @code{\removeWithTag #'@var{Bezeichnung}} + @tab Unmarkierte Noten und Noten mit einer anderen Marke als + @var{Bezeichnung} wird angezeigt, Noten markiert mit @var{Bezeichnung} + werden nicht angezeigt. + +@item +Markierte Noten, weder mit vorgesetztem @code{\keepWithTag} noch +@code{\removeWithTag} + @tab Alle markierten und unmarkierten Noten werden angezeigt. + +@end multitable + +Die Argumente der Befehle @code{\tag}, @code{\keepWithTag} und +@code{\removeWithTag} sollten ein Symbol sein (wie etwa +@code{#'score} oder @code{#'part}), gefolgt von einem musikalischen +Ausdruck. + +Im folgenden Beispiel erscheinen zwei Versionen der Noten, eine +zeigt Triller in normaler Notation, die andere zeigt sie ausgeschrieben: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand { \repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \keepWithTag #'trills \music +} +\score { + \keepWithTag #'expand \music +} +@end lilypond + +@noindent +Entsprechend können auch Abschnitte ausgeschlossen werden; das +erfordert manchmal weniger Schreibarbeit: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand {\repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \removeWithTag #'expand + \music +} +\score { + \removeWithTag #'trills + \music +} +@end lilypond + +Marken können auch auf Artikulationen, Text usw angewendet werden, +indem man ihnen + +@example +-\tag #'@var{your-tag} +@end example + +@noindent +voranstellt (jedoch nach der Note, an die sie gebunden sind). Mit +diesem Code etwa könnte man entweder Fingersatz oder aber einen +Text ausgeben: + +@example +c1-\tag #'finger ^4 +c1-\tag #'warn ^"Achtung!" +@end example + +Mehrfache Marken können mithilfe von mehreren @code{\tag}-Befehlen +notiert werden: + +@lilypond[quote,verbatim] +music = \relative c'' { + \tag #'a \tag #'both { a4 a a a } + \tag #'b \tag #'both { b4 b b b } +} +<< +\keepWithTag #'a \music +\keepWithTag #'b \music +\keepWithTag #'both \music +>> +@end lilypond + +Mehrfache @code{\removeWithTag}-Filter können auf einen +musikalischen Ausdruck angewendet werden, um mehrere unterschiedliche +markierte Abschnitte aus dem Druckbild zu entfernen. + +@lilypond[verbatim,quote] +music = \relative c'' { +\tag #'A { a4 a a a } +\tag #'B { b4 b b b } +\tag #'C { c4 c c c } +\tag #'D { d4 d d d } +} +{ +\removeWithTag #'B +\removeWithTag #'C +\music +} +@end lilypond + +Zwei oder mehr @code{\keepWithTag}-Filter in einem musikalischen +Ausdruck bewirken, dass @emph{alle} markierten Abschnitte entfernt +werden, weil der erste Befehl alle markierten Abschnitt außer dem +im Befehl genannten wegfiltert und der zweite Befehl dann auch diesen +eben genannten zusätzlich entfernt. + + +@seealso +Handbuch zum Lernen: +@rlearning{Stücke durch Bezeichner organisieren}. + +Notationsreferenz: +@ref{Automatische Kombination von Stimmen}, +@ref{LilyPond-Dateien einfügen}. + + +@ignore +@c This warning is more general than this placement implies. +@c Rests are not merged whether or not they come from tagged sections. +@c Should be deleted? -td + +@knownissues + +Multiple rests are not merged if you create a score with more +than one tagged section at the same place. + +@end ignore + + +@node Globale Einstellungen benutzen +@unnumberedsubsubsec Globale Einstellungen benutzen +@translationof Using global settings + +@funindex include-settings + +Man kann globale Einstellungen aus einer externen Datei einfügen: + +@example +lilypond -dinclude-settings=MY_SETTINGS.ly MY_SCORE.ly +@end example + + +Einstellungsgruppen, wie etwa Seitengröße, Schriftart oder Schriftschnitt, können +in eigenen Dateien gespeichert werden. Das ermöglicht es, aus der gleichen +Partitur unterschiedliche Editionen zu erstellen bzw. Standardeinstellungen +für eine ganze Anzahl von Partituren wiederzuverwenden, indem man einfach +die entsprechende Einstellungsdatei angibt. + +Diese Technik funktioniert auch gut für globale Formatierungen, wie behandelt +in @rlearning{Globale Formatierung}. + +@seealso +Handbuch zum Lernen: +@rlearning{Stücke durch Bezeichner organisieren}, +@rlearning{Globale Formatierung}. + +Notationsreferenz: +@ref{LilyPond-Dateien einfügen}. + + +@node Zeichenkodierung +@subsection Zeichenkodierung +@translationof Text encoding + +@cindex Unicode +@cindex UTF-8 +@cindex Nicht-ASCII-Zeichen + +LilyPond benutzt alle Zeichen, die durch das Unicode-Konsortium +und ISO/IEC 10646 definiert sind. Hiermit wird den Zeichen +fast aller Schriftsysteme der Welt ein eindeutiger Name und ein +Code-Punkt zugewiesen, mit dem sie identifizierbar sind. Unicode +kann mit mehreren Zeichenkodierungen verwirklicht werden. LilyPond +benutzt die UTF-8-Kodierung (UTF = Unicode Transformation Format), +in der die normalen Zeichen des lateinischen Alphabets mit einem +Byte dargestellt werden, während alle anderen Zeichen zwischen +zwei und vier Byte Länge haben. + +Das Aussehen des Zeichens wird bestimmt durch die gerade benutzte +Schriftart (engl. font). In einer Schriftartdatei werden die +Nummern der Unicode-Zeichen einem bestimmten Glyphen zugeordnet. +LilyPond verwendet die Pango-Bibliothek um mehrsprachige Texte +und komplexe Skripte korrekt zu setzen. + +LilyPond verändert die Kodierung der Eingabedatei nicht. Das heißt, +dass jeder Text -- Überschriften, Gesangstext, Spielanweisungen etc. -- +der nicht nur aus ASCII-Zeichen besteht, in UTF-8 kodiert sein +musst. Am einfachsten geht das, indem man einen Texteditor +einsetzt, der mit Unicode-Zeichen umgehen kann. Die meisten +modernen weit verbreiteten Editoren besitzen heute UTF-8-Unterstützung, +wie etwa vim, Emacs, jEdit oder GEdit. Alle MS Windows-Systeme +nach NT benutzen Unicode intern, sodass sogar Notepad Dateien +in UTF-8 lesen und speichern kann. Ein Editor mit mehr +Funktionen unter Windows ist BabelPad oder Notepad++. + +Wenn eine LilyPond-Eingabedatei nicht-ASCII-Zeichen enthält +und nicht in UTF-8 gespeichert ist, gibt es folgende Fehlermeldung: + +@example +FT_Get_Glyph_Name () error: invalid argument +@end example + +Heir ein Beispiel mit Kyrilliza, hebräischem und portugiesischem Text: + +@lilypond[quote] +%c No verbatim here as the code does not display correctly in PDF +% Cyrillic +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} + +% Hebrew +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} + +% Portuguese +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} + +\relative c' { + c2 d e f g f e +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \portuguese } +@end lilypond + +Um einen einzelnen Buchstaben zu notieren, für den die Unicode-Ziffernfolge +bekannt ist, der aber nicht auf der Tastatur zu finden ist, kann +der Befehl @code{\char ##xhhhh} oder @code{\char #dddd} innerhalb einer +@code{\markup}-Umgebung benutzt werden. Hierbei bedeutet @code{hhhh} die +hexadezimale Zahl und @code{ddd} die entsprechende dezimale Zahl +für das erforderliche Zeichen. Nullen zu Beginn können ausgelassen werden, +aber normalerweise werden alle vier Zeichen der hexadezimalen Notation +notiert. (Achten Sie darauf, dass Sie @emph{nicht} UTF-8-Codepunkte +einsetzen, weil UTF-8 zusätzliche Bits enthält, die die Nummer der Oktets bezeichnet.) Unicode-Tabellen und ein Verzeichnis der Zeichenbezeichnungen +mit einer hexadezimalen Verweiszahl finden sich auf der Internetseite +des Unicode Consortiums: @uref{http://www.unicode.org/}. + +Mit @code{\char ##x03BE} und @code{\char #958} wird +beispielsweise das Unicode-Zeichen U+03BE notiert, welches die +Unicode-Bezeichnung @qq{Greek Small Letter Xi} hat. + +Alle existierenden +Unicode-Zeichen können auf diese Weise notiert werden, und wenn für alle +Zeichen dieses Format angewandt wird, muss die Datei nicht im utf-8-Format +gespeichert werden. Es muss natürlich auch noch eine Schriftart auf +dem System installiert sein, die die notierten Zeichen darstellen kann. + +Das nächste Beispiel zeigt, wie Unicode-Zeichen an vier Stellen mit dem +hexadezimalen Code notiert werden: in einem Übungszeichen, als Artikulationszeichen, +im Gesangstext und als normaler Text außerhalb der Partitur. + +@lilypond[quote,verbatim] +\score { + \relative c'' { + c1 \mark \markup { \char ##x03EE } + c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } + } + \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } +} +\markup { "Copyright 2008--2011" \char ##x00A9 } +@end lilypond + +@cindex Copyright-Zeichen + +Um das Copyright-Zeichen zu notieren, kann folgender Code eingesetzt werden: + +@example +\header @{ + copyright = \markup @{ \char ##x00A9 "2008" @} +@} +@end example + + +@node LilyPond-Notation anzeigen +@subsection LilyPond-Notation anzeigen +@translationof Displaying LilyPond notation + +@funindex \displayLilyMusic + +Ein musikalischer Ausdruck in LilyPond-Notation kann mit der Funktion +@code{\displayLilyMusic} angezeigt werden. Der Code + +@example +@{ + \displayLilyMusic \transpose c a, @{ c4 e g a bes @} +@} +@end example + +@noindent +etwa wird ausgeben: + +@example +@{ a,4 cis e fis g @} +@end example + +Normalerweise werden diese Zeilen zusammen mit allen anderen +Kompilations-Nachrichten auf der Kommandozeile ausgegeben. +Um sie separat zu speichern und das Ergebnis von @code{\displayLilyMusic} +weiterzubenutzen, +kann die Ausgabe mit folgendem Befehl in eine Datei umgeleitet werden: + +@example +lilypond file.ly >display.txt +@end example + + + +@node Ausgabe kontrollieren +@section Ausgabe kontrollieren +@translationof Controlling output + +@menu +* Notationsfragmente extrahieren:: +* Korrigierte Musik überspringen:: +* Alternative Ausgabeformate:: +* Die Notationsschriftart verändern:: +@end menu + + +@node Notationsfragmente extrahieren +@subsection Notationsfragmente extrahieren +@translationof Extracting fragments of music + +Es ist möglich, kleine Abschnitte einer großen Partitur direkt aus der +Quelldatei zu erzeugen. Das kann damit verglichen werden, dass man +mit der Schere bestimmte Regionen ausschneidet. + +Es wird erreicht, indem man die Takte, die ausgeschnitten werden sollen +(engl. to clip = ausschneiden), extra definiert. Mit folgender +Definition beispielsweise + +@verbatim +\layout { + clip-regions + = #(list + (cons + (make-rhythmic-location 5 1 2) + (make-rhythmic-location 7 3 4))) +} +@end verbatim + +@noindent +wird ein Fragment ausgeschnitten, dass auf der Mitte des fünften Taktes +beginnt und im siebten Takt endet. Die Bedeutung von @code{5 1 2} ist: +nach einer Halben in Takt fünf, @code{7 3 4} heißt: nach drei Vierteln +in Takt 7. + +Weitere Bereiche, die ausgeschnitten werden sollen, können definiert +werden, indem mehrere derartige Paare definiert werden. + +Um diese Funktion auch nutzen zu können, muss LilyPond mit dem +Parameter @code{-dclip-systems} aufgerufen werden. Die Schnipsel +werden als EPS ausgegeben und dann zu PDF und PNG konvertiert, wenn +diese Formate auch als Parameter angegeben werden. + +Zu mehr Information über Ausgabeformate siehe @rprogram{lilypond aufrufen}. + + +@node Korrigierte Musik überspringen +@subsection Korrigierte Musik überspringen +@translationof Skipping corrected music + + +@funindex skipTypesetting +@funindex showFirstLength +@funindex showLastLength + +Wenn man Noten eingibt oder kopiert, sind meistens nur die Noten nahe dem +Ende (wo gerade neue Noten notiert wurden) wichtig für Kontrolle und +Korrektur. Um die Korrektur zu beschleunigen, kann eingestellt werden, +dass nur die letzten paar Takte angezeigt werden. Das erreicht man +mit dem Befehl + +@verbatim +showLastLength = R1*5 +\score { ... } +@end verbatim + +@noindent +in der Quelldatei. Damit werden nur die letzten fünf Takte (in einem +4/4-Takt) eines jeden @code{\score}-Abschnitts übersetzt. Besonders +bei längeren Stücken ist es meistens sehr viel schneller, nur einen +kleinen Teil des Stückes zu setzen als die gesamte Länge. Wenn man +am Anfang eines Stückes arbeitet (weil etwa ein neuer Teil hinzugefügt +werden soll), kann auch die @code{showFirstLength}-Eigenschaft +nützlich sein. + +Nur bestimmte Teile einer Partitur zu überspringen, kann mit der +Eigenschaft @code{Score.skipTypesetting} sehr genau kontrolliert +werden. Für den Bereich, für den sie auf @qq{wahr} gesetzt wird, +wird kein Notensatz ausgegeben. + +Diese Eigenschaft kann auch benutzt werden, um die MIDI-Ausgabe zu +kontrollieren. Hiermit werden alle Ereignisse, auch Tempo- und +Instrumentenwechsel ausgelassen. Man muss also sehr genau darauf +achten, dass nichts unerwartetes geschieht. + +@lilypond[quote,relative=2,ragged-right,verbatim] +c8 d +\set Score.skipTypesetting = ##t +e8 e e e e e e e +\set Score.skipTypesetting = ##f +c8 d b bes a g c2 +@end lilypond + +In polyphoner Notation wirkt sich @code{Score.skipTypesetting} auf +alle Stimmen und Systeme aus, sodass noch mehr Zeit bei der +Übersetzung der Datei gespart wird. + + +@node Alternative Ausgabeformate +@subsection Alternative Ausgabeformate +@translationof Alternative output formats + +@cindex scalable vector graphics output +@cindex skalierbare Vektorgraphik-Ausgabe +@cindex SVG-Ausgabe +@cindex encapsulated postscript output +@cindex EPS-Ausgabe +@cindex PNG-Ausgabe + +Das Standardausgabeformat für gedruckte Partituren ist PDF (Portable +Document Forma) und PS (PostScript). SVG (Scalable Vector +Graphics), EPS (Encapsulated PostScript) und PNG (Portable +Network Graphics) gibt es auch als Ausgabeformate über die +Kommandozeile. Siehe @rprogram{Optionen von lilypond auf der Kommandozeile}. + + +@node Die Notationsschriftart verändern +@subsection Die Notationsschriftart verändern +@translationof Replacing the notation font + +Gonville ist eine Alternative zu der Feta-Schriftart, die in LilyPond +eingesetzt wird und kann unter der Adresse +@example +@uref{http://www.chiark.greenend.org.uk/~sgtatham/gonville/ ,http://www.chiark.greenend.org.uk/~sgtatham/gonville/} +@end example + +@noindent +heruntergeladen werden. Hier einige Takte Noten mit der Gonville-Schriftart: + +@c NOTE: these images are a bit big, but that's important +@c for the font comparison. -gp +@sourceimage{Gonville_after,,,} + +Und hier einige Beispieltakte in der Feta-Schriftart: + +@sourceimage{Gonville_before,,,} + +@subsubheading Installationsanweisungen für MacOS + +Laden Sie die Datei herunter und entpacken Sie die ZIP-Datei. +Kopieren Sie das @code{lilyfonts}-Verzeichnis nach +@file{@var{SHARE_DIR}/lilypond/current}; für mehr Information +siehe @rlearning{Mehr Information}. +Benennen Sie das existierende @code{fonts}-Verzeichnis in +@code{fonts_orig} um und benennen Sie das Verzeichnis +@code{lilyfonts} in @code{fonts}. Das alte Verzeichnis +@code{fonts_orig} können Sie einfach in @code{fonts} +zurückbenennen, um wieder nach Feta zu wechseln. + +@seealso +Handbuch zum Lernen: @rlearning{Mehr Information}. + +@knownissues + +Gonville kann nicht verwendet werden, um Alte Notation zu setzen. +Bitte lesen Sie die Webseite des Autoren zu mehr Information hierzu +und zu anderen Einzelheiten, wie auch der Lizenz von Gonville. + + +@node MIDI-Ausgabe +@section MIDI-Ausgabe +@translationof MIDI output + +@cindex Klang +@cindex MIDI + +MIDI (Musical Instrument Digital Interface) ist ein Standard zur +Kontrolle und Interaktion mit digitalen Instrumenten. Eine +MIDI-Datei ist eine Anzahl von Noten auf einer Anzahl von +Bändern/Stimmen. Es ist keine eigentliche Klangdatei, denn man +benötigt spezielle Programme die die Notenereignisse in Klang +umwandeln können. + +Der Notensatz von LilyPond kann in MIDI umgewandelt werden, so dass +man sich anhören kann, was man notiert hat. Das hilft oft sehr gut +bei der Überprüfung: falsche Oktaven oder falsche Versetzungszeichen +lassen sich meist sehr gut hören. + +Die MIDI-Ausgabe benötigt einen Kanal für jedes System und einen für +globale Einstellungen. Darum sollte die Quelldatei für eine MIDI-Datei +nicht mehr als 15 Systeme (oder 14 wenn kein Schlagzeug benützt wird) +besitzen. Jedes weitere System bleibt stumm. + + +@menu +* MIDI-Dateien erstellen:: +* Der MIDI-Block:: +* Was geht in die MIDI-Ausgabe:: +* Wiederholungen im MIDI:: +* MIDI-Lautstärke kontrollieren:: +* Schlagzeug in MIDI:: +@end menu + + +@node MIDI-Dateien erstellen +@subsection MIDI-Dateien erstellen +@translationof Creating MIDI files + +Um eine MIDI-Datei aus einer LilyPond-Quelldatei zu erstellen, muss +eine @code{\midi}-Umgebung zu der @code{\score}-Umgebung hinzugefügt +werden, etwa so: + +@example +\score @{ + @var{...Noten...} + \midi @{ @} +@} +@end example + +Wenn in einer @code{\score}-Umgebung nur eine @code{\midi}-Umgebung, +aber keine @code{\layout}-Umgebung vorkommt, wird nur MIDI produziert. +Wenn auch die Notation gewünscht ist, muss zusätzlich die +@code{\layout}-Umgebung vorhanden sein: + +@example +\score @{ + @var{...music...} + \midi @{ @} + \layout @{ @} +@} +@end example + +Tonhöhen, Rhythmen, Überbindungen, Dynamik und Tempoänderungen werden +korrekt in das MIDI-Format übersetzt. Dynamikzeichen, Crescendo und +Decrescendo werden in den MIDI-Lautstärkekanal übertragen. Dynamikzeichen +werden in einen bestimmten Lautstärkenwert übersetzt, Crescendo und +Decrescendo erreichen einen Übergang zwischen Lautstärkewerten. +Die Wirkung von Dynamikzeichen kann auch aus der MIDI-Datei entfernt +werden. Siehe hierzu @ref{Der MIDI-Block}. + +Das Anfangstempo und spätere Tempoänderungen können mit dem +@code{\tempo}-Befehl innerhalb der Notation notiert werden. Er +bewirkt Tempoänderungen auch in der MIDI-Datei. Der Befehl setzt +gleichzeitig auch eine Tempobezeichnung in die Noten, welches aber +auch unterdrückt werden kann, siehe @ref{Metronomangabe}. Eine +andere Möglichkeit, ein eigenes MIDI-Tempo anzugeben, wird weiter +unten gezeigt, siehe @ref{Der MIDI-Block}. + +Aufgrund einiger Einschränkungen auf Windows ist auf Windows-Systemen +die Standarddateierweiterung von MIDI-Dateien @code{.mid}. Andere +Betriebssysteme verwenden weiterhin @code{.midi}. Wenn eine +andere Endung erwünscht ist, kann man die folgende Zeile auf oberster +Ebene der Quelldatei, vor Beginn eines @code{\book}, @code{\bookpart} +oder @code{\score}-Blocks einfügen: + +@example +#(ly:set-option 'midi-extension "midi") +@end example + +Diese Codezeile setzt die Dateiendung auf @code{.midi}. + +Als Alternative kann man diese Option auch als Kommandozeilenparameter +übergeben: + +@example +lilypond … -dmidi-extension=midi lilyDatei.ly +@end example + +@unnumberedsubsubsec Instrumentenbezeichnungen + +@cindex Instrumentbezeichnungen + +@funindex Staff.midiInstrument + +Das MIDI-Instrument, mit dem ein bestimmtes System wiedergegeben +werden soll, wird durch die @code{Staff.midiInstrument}-Eigenschaft +bestimmt, die auf eine Instrumentenbezeichnung gesetzt werden muss. +Die Bezeichnungen sind aufgelistet in @ref{MIDI-Instrumente} und müssen +in der dort definierten Schreibweise notiert werden. + +@example +\new Staff @{ + \set Staff.midiInstrument = #"glockenspiel" + @var{...Noten...} +@} +@end example + +@example +\new Staff \with @{midiInstrument = #"cello"@} @{ + @var{...Noten...} +@} +@end example + +Wenn die Schreibweise nicht genau einem definierten Instrument aus +der Liste entspricht, wird ein Piano-Klang benutzt (@code{"acoustic grand"}). + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-midi-output-to-one-channel-per-voice.ly} + +@knownissues + +Veränderungen der MIDI-Lautstärke sind nur effektiv, wenn sie zu Beginn +einer Note angefordert werden, sodass die Lautstärke während einer Notendauer +nicht geändert werden kann. + +Nicht alle MIDI-Spieler können Tempoänderungen richtig wiedergeben. +Spieler, die hierzu in der Lage sind, sind unter Anderen MS Windows Media +Player und @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. + + +@node Der MIDI-Block +@subsection Der MIDI-Block +@translationof MIDI block + +@cindex MIDI-Umgebung + +Eine @code{\midi}-Umgebung muss innerhalb von einer @code{\score}-Umgebung +vorkommen, wenn MIDI-Ausgabe gewünscht ist. Sie entspricht der +@code{\layout}-Umgebung, aber ist etwas einfacher aufgebaut. Oft wird +die MIDI-Umgebung einfach leer gelassen, aber hier können auch +Kontexte umgeändert werden, neue Kontexte definiert werden oder +neue Werte definiert werden. Das folgende Beispiel etwa definiert +das MIDI-Tempo, ohne dass in der Partitur eine Metronombezeichnung +gesetzt wird: + +@example +\score @{ + @var{...Noten...} + \midi @{ + \context @{ + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + @} + @} +@} +@end example + +Hier wird das Tempo auf 72 Viertelnoten pro Minute definiert. Wenn +das Tempo auf diese Weise definiert wird, kann keine punktierte +Note als Einheit angegeben werden. Wenn sie benötigt wird, muss +man sie in kleinere Einheiten auflösen. Ein Tempo von 90 punktierten +Viertelnoten pro Minute kann beispielsweise dargestellt werden +als 270 Achtelnoten pro Minute: + +@example +tempoWholesPerMinute = #(ly:make-moment 270 8) +@end example + +@cindex MIDI-Kontextdefinitionen + +Kontextdefinitionen des @code{\midi}-Kontextes entsprechen +der Syntax, wie sie in der @code{\layout}-Umgebung benutzt +wird. Klangübersetzungsmodule werden @code{performer} +genannt. Die Kontexte für die MIDI-Ausgabe sind in der +Datei @file{../ly/performer-init.ly} definiert, siehe +@rlearning{Mehr Information}. Um beispielsweise +die Auswirkung von Dynamikzeichen aus der MIDI-Ausgabe zu +entfernen, müssen folgende Zeilen eingefügt werden: + +@example +\midi @{ + ... + \context @{ + \Voice + \remove "Dynamic_performer" + @} +@} +@end example + +Eine MIDI-Ausgabe wird nur erstellt, wenn die @code{\midi}-Umgebung +in eine Partiturumgebung eingefügt wird, die mit dem Befehl +@code{\score} beginnt. + +@example +\score @{ + @{ @dots{}Noten@dots{} @} + \midi @{ @} +@} +@end example + + +@node Was geht in die MIDI-Ausgabe +@subsection Was geht in die MIDI-Ausgabe +@translationof What goes into the MIDI output? + + +@unnumberedsubsubsec In MIDI unterstützt + +@cindex Tonhöhen in MIDI +@cindex MIDI, Tonhöhen +@cindex Vierteltöne in MIDI +@cindex MIDI, Vierteltöne +@cindex Mikrotöne in MIDI +@cindex MIDI, Mikrotöne +@cindex Akkordsymbole in MIDI +@cindex MIDI, Akkordsymbole +@cindex Rhythmen in MIDI +@cindex MIDI, Rhythmen + +Die folgenden Notationselemente werden in die MIDI-Ausgabe aufgenommen: + +@itemize +@item Tonhöhen +@item Mikrotöne (siehe @ref{Versetzungszeichen}. Für die Ausgabe wird ein +Spieler benötigt, der Tonhöhen verändern kann.) +@item Akkorde, die als Symbole notiert werden +@item Rhythmen, die als Dauern notiert sind, inklusive N-tolen +@item Tremolo, das ohne @q{@code{:}[@var{Zahl}]} notiert ist +@item Überbindungen +@item Dynamikzeichen +@item Crescendi, decrescendi zu mehreren Noten +@item Tempoänderungen, die mit einer Tempo-Bezeichnung eingegeben werden +@item Gesangstext +@end itemize + + +@unnumberedsubsubsec In MIDI nicht unterstützt + +Folgende Notationselemente werden nicht in die MIDI-Ausgabe einbezogen: + +@itemize +@item Rhythmus, der als Anmerkung notiert wird, bspw. Swing +@item Tempoveränderungen, die als Anmerkung ohne Tempobezeichnung notiert werden +@item Staccato und andere Artikulationen und Ornamente +@item Legato- und Phrasierungsbögen +@item Crescendi, decrescendi zu einer einzelnen Note +@item Tremolo, notiert mit @q{@code{:}[@var{number}]} +@item Bezifferter Bass +@item Akkorde mit Mikrotönen +@end itemize + + +@node Wiederholungen im MIDI +@subsection Wiederholungen im MIDI +@translationof Repeats in MIDI + +@cindex Wiederholungen in MIDI +@cindex MIDI und Wiederholungen + +@funindex \unfoldRepeats + +Mit einigen Veränderungen im Notentext können alle Wiederholungstypen +auch in der MIDI-Ausgabe wiedergegeben werden. Das wird erreicht, indem +die @code{\unfoldRepeats}-Funktion eingesetzt wird. Diese Funktion +verändert alle Wiederholungen in ausgeschriebene Noten. + +@lilypond[quote,verbatim] +\unfoldRepeats { + \repeat tremolo 8 { c'32 e' } + \repeat percent 2 { c''8 d'' } + \repeat volta 2 { c'4 d' e' f' } + \alternative { + { g' a' a' g' } + { f' e' d' c' } + } +} +\bar "|." +@end lilypond + +Wenn eine Partitur mit diesem @code{\unfoldRepeats}-Befehl erstellt +wird, ist er notwendig, +zwei @code{\score}-Umgebungen einzurichten: in der einen werden die +Wiederholungen ausgeschrieben und nur eine MIDI-Ausgabe produziert, +in der anderen werden die Wiederholungen notiert und als Partitur +gesetzt. Das Beispiel gibt einen Hinweis, wie eine derartige Datei +aussehen kann: + +@example +\score @{ + @var{..music..} + \layout @{ .. @} +@} +\score @{ + \unfoldRepeats @var{..music..} + \midi @{ .. @} +@} +@end example + + +@node MIDI-Lautstärke kontrollieren +@subsection MIDI-Lautstärke kontrollieren +@translationof Controlling MIDI dynamics + +Dynamik in der MIDI-Ausgabe wird durch den Dynamic_performer +erstellt, welcher sich in einem @code{Voice}-Kontext befindet. +Es ist möglich, sowohl die generelle Lautstärke einer MIDI-Datei +als auch relative Lautstärken von Dynamikanweisungen und auch +relative Lautstärke von einzelnen Instrumenten einzustellen. + + +@unnumberedsubsubsec Dynamik-Zeichen + +Dynamikanweisungen werden als ein bestimmter Bruch der insgesamt +zur Verfügung stehenden MIDI-Lautstärke notiert. Die Standardbrüche +reichen von 0,25 für @notation{ppppp} bis hin zu 0,95 für +@notation{fffff}. Diese Anweisung befinden sich in der Datei +@file{../scm/midi.scm}, siehe auch @rlearning{Mehr Information}. +Diese Brüche können nach Belieben geändert oder erweitert werden, indem +eine Funktion erstellt wird, die ein Dynamikzeichen als Argument +nimmt und den erforderlichen Bruch ausgibt; schließlich muss noch +@code{Score.dynamicAbsoluteVolumeFunction} auf diese Funktion +gesetzt werden. + +Beispielhaft soll gezeigt werden, wie man eine @notation{Rinforzando}-Dynamik, +@code{\rfz}, auch in die MIDI-Ausgabe übernehmen kann. Gleiches gilt +für neue, selbstdefinierte Dynamikzeichen, die in den Standarddefinitionen +nicht enthalten sind. Die Scheme-Funktion, die hier definiert wird, +setzt den Bruch von 0,9 für eine rfz-Anweisung und ruft andernfalls die +Standardanweisungen auf: + +@lilypond[verbatim,quote] +#(define (myDynamics dynamic) + (if (equal? dynamic "rfz") + 0.9 + (default-dynamic-absolute-volume dynamic))) + +\score { + \new Staff { + \set Staff.midiInstrument = #"cello" + \set Score.dynamicAbsoluteVolumeFunction = #myDynamics + \new Voice { + \relative c'' { + a4\pp b c-\rfz + } + } + } + \layout {} + \midi {} +} +@end lilypond + +Alternativ, insbesondere wenn die gesamte Tabelle der MIDI-Lautstärken +umdefiniert werden soll, ist es besser, die +@notation{default-dynamic-absolute-volume}-Prozedur in der Datei +@file{../scm/midi.scm} und die hiermit verknüpfte Tabelle als Modell +zu benutzen. Das letzte Beispiel dieses Abschnittes zeigt, wie das +gemacht werden kann. + + +@unnumberedsubsubsec MIDI-Lautstärke + +Die generellen Mindest- und Höchstwerte für die Lautstärke der MIDI-Datei +wird kontrolliert, indem die Eigenschaften @code{midiMinimumVolume} +und @code{midiMaximumVolume} auf der @code{Score}-Ebene gesetzt +werden. Diese Eigenschaften haben nur Einfluss auf Dynamikzeichen, sodass +ein Dynamikzeichen direkt an den Anfang der Partitur gestellt werden muss, +wenn diese Einstellung von Anfang an Wirkung zeigen soll. Der Bruch, +der dann den einzelnen Dynamikzeichen entspricht, wird mit der +Formel + +@example +midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * Bruch +@end example + +@noindent +errechnet. Im folgenden Beispiel wird die generelle MIDI-Lautstärke +auf den Bereich zwischen 0.2 und 0.5 eingeschränkt. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + midiMinimumVolume = #0.2 + midiMaximumVolume = #0.5 + } + } +} +@end lilypond + + +@unnumberedsubsubsec Verschiedene Instrumente angleichen (i) + +Wenn die Mindest- und Höchstwerte für die MIDI-Lautstärke +innerhalb eines @code{Staff}-Kontextes gesetzt werden, +kann damit die relative Lautstärke einzelner Instrumente kontrolliert +werden. Damit kann man die Qualität der MIDI-Datei +merklich verbessern. + +In diesem Beispiel wird die Lautstärke der Klarinette relativ +zur Lautstärke der Flöte verringert. In jeder Stimme muss +eine Dynamikanweisung für die erste Note gesetzt werden, damit +diese Einstellung korrekt funktioniert. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \set Staff.midiMinimumVolume = #0.7 + \set Staff.midiMaximumVolume = #0.9 + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \set Staff.midiMinimumVolume = #0.3 + \set Staff.midiMaximumVolume = #0.6 + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + + +@unnumberedsubsubsec Verschiedene Instrumente angleichen (ii) + +Wenn Mindest- und Höchstwerte für die Lautstärke der MIDI-Datei +nicht vorgegeben werden, nimmt LilyPond standardmäßig einige +Anpassungen für die Lautstärken bestimmter Instrumente vor. +Diese Instrumente und ihre entsprechende Veränderung lassen +sich aus der Tabelle @notation{instrument-equalizer-alist} +in der Datei @file{../scm/midi.scm} entnehmen. + +Dieser grundlegende Equalizer kann ersetzt werden, indem die +Funktion @code{instrumentEqualizer} im @code{Score}-Kontext auf +eine neue Scheme-Funktion gesetzt wird, die MIDI-Instrumentbezeichnungen +als einziges Argument akzeptiert und ein Zahlenpaar ausgibt, das +den Höchst- und Mindestwert für die Lautstärke des entsprechenden +Instruments darstellt. Die Ersetzung der Standardfunktion wird +auf gleiche Weise vorgenommen, wie es schon für die +@code{dynamicAbsoluteVolumeFunction} zu Beginn dieses Abschnittes +gezeigt wurde. Der Standard-Equalizer, +@notation{default-instrument-equalizer} in der Datei +@file{../scm/midi.scm} zeigt, wie solche eine Funktion erstellt werden +kann. + +Das folgende Beispiel definiert für die Flöte und Klarinette relative +Lautstärkewerte, die denen des vorigen Beispiels entsprechen. + +@lilypond[verbatim,quote] +#(define my-instrument-equalizer-alist '()) + +#(set! my-instrument-equalizer-alist + (append + '( + ("flute" . (0.7 . 0.9)) + ("clarinet" . (0.3 . 0.6))) + my-instrument-equalizer-alist)) + +#(define (my-instrument-equalizer s) + (let ((entry (assoc s my-instrument-equalizer-alist))) + (if entry + (cdr entry)))) + +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Score.instrumentEqualizer = #my-instrument-equalizer + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + + + +@node Schlagzeug in MIDI +@subsection Schlagzeug in MIDI +@translationof Percussion in MIDI + +Schlagzeuginstrumente werden üblicherweise in einem @code{DrumStaff}-Kontext +notiert. Aus diese Weise werden sie korrekt in den MIDI-Kanal@tie{}10 +ausgegeben. Eine Schlagzeuge mit diskreten Tonhöhen, wie Xylophon, +Marima, Vibraphone, Pauken usw. werden wie @qq{normale} Instrumente +in einem @code{Staff}-Kontext notiert. Nur so lässt sich auch hier +eine richtige MIDI-Ausgabe erreichen. + +Einige Instrumente, die keine diskreten Tonhöhen haben, können nicht +über den MIDI-Kanal@tie{}10 erreicht werden und müssen deshalb in +einem normalen @code{Staff}-Kontext mit passenden normalen Tonhöhen +notiert werden. Es handelt sich +um @code{melodic tom, taiko drum, synth drum} u. A. + +Viele Schlagzeuginstrumente sind nicht in den MIDI-Standard aufgenommen, +z. B. Kastagnetten. Die einfachste Methode, derartige Instrumente +zu ersetzen, ist, einen Klang auszuwählen, der ihnen halbwegs ähnlich +kommt. + + +@knownissues + +Weil der MIDI-Standard keine Peitschenschläge kennt, wird ein +Schlagstock (sidestick) für diesen Zweck eingesetzt. diff --git a/Documentation/de/notation/keyboards.itely b/Documentation/de/notation/keyboards.itely new file mode 100644 index 0000000000..ba7f8924e7 --- /dev/null +++ b/Documentation/de/notation/keyboards.itely @@ -0,0 +1,718 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 Translators: Till Paala + +@c \version "2.14.0" + +@node Tasteninstrumente und andere Instrumente mit mehreren Systemen +@section Tasteninstrumente und andere Instrumente mit mehreren Systemen +@translationof Keyboard and other multi-staff instruments + +@lilypondfile[quote]{keyboard-headword.ly} + +Dieser Abschnitt behandelt verschiedene Notationsaspekte, die +typischerweise in Noten für Tasteninstrumente und andere +Instrumente auf mehreren Notensystemen auftreten, wie etwa +Harfe und Vibraphon. Hier wird die gesamte Gruppe von +Instrumenten, die auf mehreren Systemen notiert werden, als +@qq{Tasteninstrumente} bezeichnet, auch wenn einige von ihnen +keine Tasten aufweisen. + +@menu +* Übliche Notation für Tasteninstrumente:: +* Klavier:: +* Akkordeon:: +* Harfe:: +@end menu + +@node Übliche Notation für Tasteninstrumente +@subsection Übliche Notation für Tasteninstrumente +@translationof Common notation for keyboards + +Dieser Abschnitt zeigt allgemeine Eigenschaften des Notensatzes, die +für die meisten Instrumente mit mehreren Systemen benötigt werden. + +@menu +* Referenz für Tasteninstrumente:: +* Notensysteme manuell verändern:: +* Automatischer Systemwechsel:: +* Stimmführungslinien:: +* Hälse über beide Systeme:: +@end menu + + +@node Referenz für Tasteninstrumente +@unnumberedsubsubsec Referenz für Tasteninstrumente +@translationof References for keyboards + +@cindex Klaviersystem +@cindex Piano-System +@cindex Notensystem, Klavier +@cindex Notensystem, Tasteninstrumente +@cindex Tasteninstrumente, Notensystem +@cindex Klaviermusik, zentrierte Dynamik +@cindex zentrierte Dynamik für Klaviermusik +@cindex Tasteninstrumente, zentrierte Dynamik +@cindex Dynamik, zentriert für Tasteninstrumente + +@funindex PianoStaff + +Tasteninstrumente werden normalerweise auf einem Klaviersystem +notiert. Es besteht aus zwei Notensystemen, die durch +eine Klammer verbunden sind. Die gleiche Notation wird auch für +andere Tasteninstrumente sowie Harfen verwendet. Orgelmusik +wird normalerweise auf zwei Systemen innerhalb eines Klaviersystems +notiert, denen noch ein drittes normales Notensystem für die +Pedaltöne hinzugefügt wird. + +Die Systeme eines Klaviersystems sind ziemlich unabhängig, aber +Stimmen können bei Bedarf zwischen den Systemen wechseln. + +Einige häufige Besonderheiten von Notation für Tasteninstrumenten +wird an anderen Stellen besprochen: + +@itemize + +@item Noten für Tasteninstrumente haben oft mehrere Stimmen und +die Anzahl der Stimmen kann sich häufig ändern. Das ist +beschrieben in +@ref{Auflösung von Zusammenstößen}. + +@item Noten für Tasteninstrumente kann auch parallel, Takt für +Takt notiert werden, wie gezeigt in +@ref{Musik parallel notieren}. + +@item Dynamikbezeichnung kann in einem @code{Dynamics}-Kontext notiert +werden, der zwischen zwei @code{Staff}-Kontexten steht und dann +horizontal zwischen diesen beiden zentriert wird; siehe @ref{Dynamik}. + +@item Fingersatz wird erklärt in +@ref{Fingersatzanweisungen}. + +@item Orgelpedal-Zeichen werden als Artikulationszeichen notiert, +siehe +@ref{Liste der Artikulationszeichen}. + +@item Vertikale Rasterlinien können erstellt werden, siehe +@ref{Gitternetzlinien}. + +@item Noten für Tasteninstrumente beinhalten oft +@notation{Laissez vibrer}-Bögen und Bindebögen mit Arpeggio +oder Tremolo, siehe hierzu +@ref{Bindebögen}. + +@item Arpeggios können auch zwischen den Systemen verbunden +werden, siehe hierzu +@ref{Arpeggio}. + +@item Tremolo-Zeichen finden sich in +@ref{Tremolo-Wiederholung}. + +@item Viele der Optimierungen, die für Tastenmusik nötig sein +können, sind demonstriert in +@rlearning{Beispiele aus dem Leben}. + +@item Unsichtbare Noten können eingesetzt werden, um +Überbindungen zwischen Stimmen zu setzen, siehe +@rlearning{Andere Benutzung von Optimierungen}. + +@end itemize + + +@c @snippets +@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] +@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\Staff \RemoveEmptyStaves.ly} +@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 + + +@seealso +Handbuch zum Lernen: +@rlearning{Beispiele aus dem Leben}, +@rlearning{Andere Benutzung von Optimierungen}. + +Notationsreferenz: +@ref{Systeme gruppieren}, +@ref{Instrumentenbezeichnungen}, +@ref{Auflösung von Zusammenstößen}, +@ref{Musik parallel notieren}, +@ref{Fingersatzanweisungen}, +@ref{Liste der Artikulationszeichen}, +@ref{Gitternetzlinien}, +@ref{Bindebögen}, +@ref{Arpeggio}, +@ref{Tremolo-Wiederholung}. + +Schnipsel: +@rlsr{Keyboards}. + +Referenz der Interna: +@rinternals{PianoStaff}. + + +@node Notensysteme manuell verändern +@unnumberedsubsubsec Notensysteme manuell verändern +@translationof Changing staff manually + +@cindex manuelle Systemwechsel +@cindex Systemwechsel, manuell +@cindex Wechsel des Systems, manuell +@cindex Noten, Wechsel zwischen Systemen +@cindex Springen zwischen Systemen +@cindex Balken zwischen Systemen + +@funindex \change +@funindex change + +Stimmen können mit dem Befehl + +@example +\change Staff = @var{Systembezeichnung} +@end example + +@noindent +manuell erzielt werden. Die Zeichenkette @var{Systembezeichnung} +ist die Bezeichnung des Systems. Damit wird die aktuelle Stimme +vom aktuellen System zu dem System mit der @var{Systembezeichnung} +gewechselt. Üblicherweise ist die Systembezeichnung @code{"up"} +oder @code{"down"}, @code{"RH"} oder @code{"LH"}. + +Das System, zu dem die Stimme wechseln soll, muss zum +Zeitpunkt des Wechsels existieren. Wenn notwendig, müssen +Systeme @qq{künstlich am Leben gehalten werden}, siehe +@ref{Kontexte am Leben halten}. + +Balken zwischen den Systemen werden automatisch erstellt: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + 8 + \change Staff = "down" + g8 fis g + \change Staff = "up" + 8 + \change Staff = "down" + e8 dis e + \change Staff = "up" + } + \new Staff = "down" { + \clef bass + % keep staff alive + s1 + } +>> +@end lilypond + +@noindent +Wenn die Balken verändert werden müssen, sollte zuerst die Richtung +des Balkens beeinflusst werden. Die Balkenposition wird dann von +der Mitte des Systems gemessen, dass näher am Balken ist. Ein +einfaches Beispiel ist gezeigt in +@rlearning{Überlappende Notation in Ordnung bringen}. + +@cindex Zusammenstöße zwischen Systemen +@cindex Systeme, Zusammenstöße beim Stimmenwechsel + +Bei Stimmen, die zwischen den Systemen wechseln, kann es zu überlappender +Notation kommen: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + \voiceOne + % Make space for fingering in the cross-staff voice + \once\override DynamicLineSpanner #'staff-padding = #3.4 + e''2\p\< d''\> s1*0\! + } + \new Staff = "down" << + { + \clef bass + s4. e,8\rest g,2\rest + } \\ { + c8\( g c' + \change Staff = "up" + e' g' b'-3 a' g'\) + } + >> +>> +@end lilypond + +Die Hälse und Bögen überlappen sich mit der dazwischenstehenden Dynamik-Zeile, +weil die automatische Zusammenstoßauflösung für Balken, Bögen und andere +Strecker, die Noten zwischen unterschiedlichen Systemen verbinden, ausgeschaltet +ist. Das gilt auch für Hälse und Artikulationszeichen, wenn ihre Positionierung +durch einen Strecker zwischen Systemen verändert wird. Die resultierenden +Zusammenstöße müssen manuell aufgelöst werden, wo es nötig ist, dabei kann man +die Methoden anwenden, die in @rlearning{Überlappende Notation in Ordnung bringen} +gezeigt werden. + + +@seealso +Handbuch zum Lernen: +@rlearning{Überlappende Notation in Ordnung bringen}. + +Notationsreferenz: +@ref{Hälse}, +@ref{Automatische Balken}, +@ref{Kontexte am Leben halten}. + +Schnipsel: +@rlsr{Keyboards}. + +Referenz der Interna: +@rinternals{Beam}, +@rinternals{ContextChange}. + + +@node Automatischer Systemwechsel +@unnumberedsubsubsec Automatischer Systemwechsel +@translationof Changing staff automatically + +@cindex Automatischer Systemwechsel +@cindex Systemwechsel, automatisch +@cindex Wechsel des Systems, automatisch + +@funindex \autochange +@funindex autochange +@funindex PianoStaff + +Stimmen können angewiesen werden, automatisch zwischen dem +oberen und unteren System zu wechseln. Die Syntax hierfür lautet: + +@example +\autochange @dots{}@var{Noten}@dots{} +@end example + +@noindent +Damit werden zwei Notensysteme innerhalb des aktiven Klaviersystems +erstellt, die @qq{oben} (@code{up}) und @qq{unten} (@code{down}) genannt +werden. Auf dem unteren System wird als Standard der Bassschlüssel +gesetzt. Der Wechsel wird automatisch basierend auf der Tonhöhe der Note +vorgenommen (als Wechselpunkt gilt das eingestrichene C). Dabei +wird die Richtung auch über Pausen hinweg im Voraus bestimmt. + +@lilypond[quote,verbatim] +\new PianoStaff { + \autochange { + g4 a b c' + d'4 r a g + } +} +@end lilypond + +@cindex relativer Modus und automatischer Systemwechsel +@cindex automatischer Systemwechsel und relativer Modus + +@funindex \relative +@funindex relative + +Ein @code{\relative}-Abschnitt, der sich außerhalb des +@code{\autochange}-Abschnittes befindet, hat keinen Einfluss auf die +Notenhöhen. + +Wenn individuelle Kontrolle über die einzelnen Systeme benötigt +wird, können sie manuell mit den Bezeichnungen @code{"up"} und +@code{"down"} erstellt werden. Der @code{\autochange}-Befehl +wechselt dann die Stimme zwischen den Systemen. + +@warning{Wenn Systeme manuell erstellt werden, @strong{müssen} sie genau +die Bezeichnungen @code{"up"} und @code{"down"} bekommen, damit die +automatische Wechselfunktion sie erkennen kann.} + +Systeme müssen etwa manuell erstellt werden, damit die Tonart im unteren +System gesetzt werden kann: + +@c Keep Ly needed, otherwise 'up' and 'down' get +@c incorrectly translated in verbatim output +@c KEEP LY +@lilypond[quote,verbatim,nogettext] +\new PianoStaff << + \new Staff = "up" { + \new Voice = "melodieEins" { + \key g \major + \autochange \relative c' { + g8 b a c b d c e + d8 r fis, g a2 + } + } + } + \new Staff = "down" { + \key g \major + \clef bass + } +>> +@end lilypond + +@seealso +Notationsreferenz: +@ref{Notensysteme manuell verändern}. + +Schnipsel: +@rlsr{Keyboards}. + +Referenz der Interna: +@rinternals{AutoChangeMusic}. + +@knownissues + +@cindex Akkorde, zwischen Systemen mit \autochange + +Die Aufteilung auf die Systeme geschieht nicht unbedingt an optimaler +Stelle. Für bessere Qualität müssen die Wechsel manuell eingestellt +werden. + +Akkorde werde nicht über die Systeme verteilt, sie werden dem +System zugewiesen, auf dem sich ihre erste Note befinden würde. + + +@node Stimmführungslinien +@unnumberedsubsubsec Stimmführungslinien +@translationof Staff-change lines + +@cindex Stimmkreuzung +@cindex Systemwechsel von Stimmen +@cindex Wechsel zwischen Systemen +@cindex Stimme folgen +@cindex Folgen einer Stimmen in anderes System +@cindex Stimmfolgestriche +@cindex Striche zur Stimmverfolgung + +@funindex followVoice +@funindex \showStaffSwitch +@funindex showStaffSwitch +@funindex \hideStaffSwitch +@funindex hideStaffSwitch + +Immer, wenn eine Stimme von einem Klaviersystem zu dem anderen +wechselt, kann automatisch eine Linie zur Verdeutlichung des +Stimmenverlaufs ausgegeben werden: + +@lilypond[quote,verbatim,relative=1] +\new PianoStaff << + \new Staff = "one" { + \showStaffSwitch + c1 + \change Staff = "two" + b2 a + } + \new Staff = "two" { + \clef bass + s1*2 + } +>> +@end lilypond + +@predefined +@funindex \showStaffSwitch +@code{\showStaffSwitch}, +@funindex \hideStaffSwitch +@code{\hideStaffSwitch}. +@endpredefined + +@seealso +Schnipsel: +@rlsr{Keyboards}. + +Referenz der Interna: +@rinternals{Note_head_line_engraver}, +@rinternals{VoiceFollower}. + + +@node Hälse über beide Systeme +@unnumberedsubsubsec Hälse über beide Systeme +@translationof Cross-staff stems + +@cindex Hälse über zwei Systeme +@cindex System querende Hälse +@cindex Abstand zwischen Systemen in Klaviernoten +@cindex Notenhälse über zwei Systeme +@cindex Akkorde über zwei Systeme + +@funindex Stem +@funindex cross-staff +@funindex length +@funindex flag-style + +Akkorde, die über zwei Systeme reichen, können erstellt werden, +indem die Länge der Hälse im unteren System vergrößert wird, +bis sie zum oberen System hinauf reichen bzw. umgekehrt bei +Hälsen, die nach unten zeigen. + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff { + \relative c' { + f8 e4 d8 d f e4 + } + } + \new Staff { + \relative c' { + << { + \clef bass + % stems may overlap the other staff + \override Stem #'cross-staff = ##t + % extend the stems to reach the other staff + \override Stem #'length = #12 + % do not print extra flags + \override Stem #'flag-style = #'no-flag + % prevent beaming as needed + a8 g4 f8 f bes\noBeam g4 + } + \\ + { + f,2 bes4 c + } >> + } + } +>> +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{indicating-cross-staff-chords-with-arpeggio-bracket.ly} + +@seealso +Schnipsel: +@rlsr{Keyboards}. + +Referenz der Interna: +@rinternals{Stem}. + + +@node Klavier +@subsection Klavier +@translationof Piano + +Dieser Abschnitt zeigt Eigenheiten der Notation von Klavermusik + +@menu +* Klavierpedal:: +@end menu + +@node Klavierpedal +@unnumberedsubsubsec Klavierpedal +@translationof Piano pedals + +@cindex Pedalbezeichnung +@cindex Klavier, Pedalbezeichnung +@cindex Piano, Pedalbezeichnung +@cindex sostenuto-Pedal +@cindex Pedal, sostenuto +@cindex una corda +@cindex tre corde +@cindex sos. +@cindex U.C. + +@funindex \sustainOn +@funindex sustainOn +@funindex \sustainOff +@funindex sustainOff +@funindex \sostenutoOn +@funindex sostenutoOn +@funindex \sostenutoOff +@funindex sostenutoOff +@funindex \unaCorda +@funindex unaCorda +@funindex \treCorde +@funindex treCorde + +Klaviere (teilweise auch Vibraphone und Celesta) besitzen üblicherweise +drei Pedale, das linke oder Haltepedal, das rechte oder Una-corda-Pedal +und das Sostenuto-Pedal. Die englischen Begriff hierzu lauten: +@notation{sustain}, @notation{sostenuto} und @notation{una corda}. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn d e g +1\sustainOff +c4\sostenutoOn e g c, +1\sostenutoOff +c4\unaCorda d e g +1\treCorde +@end lilypond + +@cindex Pedalbezeichnung, Stile +@cindex Haltepedal, Stile +@cindex Pedalbezeichnung, Text +@cindex Pedalbezeichnung, Klammer + +@funindex pedalSustainStyle +@funindex mixed +@funindex bracket +@funindex text + +Die Pedalbezeichnung kann auf drei Arten vorgenommen werden: mit +Text, Klammern oder einer Mischung aus beidem. Das Haltepedal +und das Una-corda-Pedal benutzen als Standard die Textdarstellung, +während das Sostenuto-Pedal den gemischten Stil benutzt: + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn g c2\sustainOff +\set Staff.pedalSustainStyle = #'mixed +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2\sustainOff +\set Staff.pedalSustainStyle = #'bracket +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2 +\bar "|." +@end lilypond + +Die Platzierung der Befehle entspricht der Bewegung der Pedale +während des Spielens. Um das Pedal bis zur letzten Taktlinie zu +halten, muss der letzte Pedal-hoch-Befehl weggelassen werden. + +Pedalbezeichnungen können innerhalb eines @code{Dynamics}-Kontextes +notiert werden, sodass sie an einer horizontalen Linie ausgerichtet werden. + +@seealso +Notationsreferenz: +@ref{Bindebögen}. + +Schnipsel: +@rlsr{Keyboards}. + +Referenz der Interna: +@rinternals{SustainPedal}, +@rinternals{SustainPedalLineSpanner}, +@rinternals{SustainEvent}, +@rinternals{SostenutoPedal}, +@rinternals{SostenutoPedalLineSpanner}, +@rinternals{SostenutoEvent}, +@rinternals{UnaCordaPedal}, +@rinternals{UnaCordaPedalLineSpanner}, +@rinternals{UnaCordaEvent}, +@rinternals{PianoPedalBracket}, +@rinternals{Piano_pedal_engraver}. + + +@node Akkordeon +@subsection Akkordeon +@translationof Accordion + +@cindex Akkordeon + +Dieser Abschnitt behandelt Notation, die nur für Akkordeonmusik +benötigt wird. + +@menu +* Diskant-Symbole:: +@end menu + +@node Diskant-Symbole +@unnumberedsubsubsec Diskant-Symbole +@translationof Discant symbols + +@cindex Akkordeon, Diskant-Symbole +@cindex Diskantsymbole, Akkordeon +@cindex Symbole, Akkordeon +@cindex Akkordeon, Register + +Akkordeons werden oft mit mehreren Reihen an Zungen gebaut, welche +Unisono oder eine Oktave höher bzw. tiefer erklingen. Jedes +Akkordeon hat eigene Bezeichnungen für die Register (engl. shift) +wie etwa @notation{Oboe}, @notation{Bandonium} usw. Eine +Anzahl an Symbolen wird benutzt um die Wechsel anzuzeigen. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{accordion-discant-symbols.ly} + +@seealso +Schnipsel: +@rlsr{Keyboards}. + + + +@node Harfe +@subsection Harfe +@translationof Harp + +Dieser Abschnitt zeigt Eigenheiten der Notation für Harfe. + +@menu +* Referenzen für Harfe:: +* Harfenpedal:: +@end menu + + +@node Referenzen für Harfe +@unnumberedsubsubsec Referenzen für Harfe +@translationof References for harps + +@cindex Harfe + +Einige übliche Notationseigenheiten für Harfe sind woanders behandelt: + +@itemize + +@item Glissando ist die üblichste Harfentechnik, siehe +@ref{Glissando}. + +@item Ein @notation{Bisbigliando} wird als ein Tremolo notiert, siehe @ref{Tremolo-Wiederholung}. + +@item Flageolettöne werden hier beschrieben: @ref{Flageolett}. + +@item Für Arpeggio und non-arpeggio, siehe @ref{Arpeggio}. + +@end itemize + +@seealso +Notationsreferenz: +@ref{Tremolo-Wiederholung}, +@ref{Glissando}, +@ref{Arpeggio}, +@ref{Flageolett}. + + + +@node Harfenpedal +@unnumberedsubsubsec Harfenpedal +@translationof Harp pedals + +@cindex Harfenpedal +@cindex Pedal, Harfe +@cindex Pedaldiagramme, Harfe + +Harfe haben sieben Saiten in einer Oktave, die entweder als normaler +Ton, oder aber erhöht bzw. erniedrigt klingen können. Bei einer +Hakenharfe kann man jede Saite einzeln einstellen, bei Pedalharfen aber +wird jede Saite mit der gleichen Notenbezeichnung von einem einzigen +Pedal kontrolliert. Vom Spieler aus gesehen von rechts nach links sind +die Pedale: D, C und H für die linke und E, F, G und A für die rechte +Seite. Die Position des Pedals kann mit Textbeschriftungselementen: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup \concat \vcenter { + [D \flat C \sharp B|E \sharp F \sharp G A \flat] } +c!1_\markup \concat \vcenter { + [ C \natural ] } +@end lilypond + +@noindent +oder Pedaldiagrammen angezeigt werden: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup { \harp-pedal #"^v-|vv-^" } +c!1_\markup { \harp-pedal #"^o--|vv-^" } +@end lilypond + +Der @code{\harp-pedal}-Befehl braucht eine Anzahl an Zeichen, von +welchen @code{^} die höchste Pedalposition (erniedrigte Tonhöhe), +@code{-} die mittlere Pedalposition (normale Tonhöhe, @code{v} die +tiefste Pedalposition (erhöhter Ton) anzeigt. @code{|} ist ein +Trenner. Ein @code{o} vor der Definition umrandet das Symbol. + +@seealso +Notationsreferenz: +@ref{Textarten}, +@ref{Instrument Specific Markup}. diff --git a/Documentation/de/notation/notation-appendices.itely b/Documentation/de/notation/notation-appendices.itely new file mode 100644 index 0000000000..5b4e05ac72 --- /dev/null +++ b/Documentation/de/notation/notation-appendices.itely @@ -0,0 +1,1435 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 Translators: Till Paala + +@c \version "2.14.0" + +@node Notationsübersicht +@appendix Notationsübersicht +@translationof Notation manual tables + +@menu +* Liste der Akkordbezeichnungen:: +* Übliche Akkord-Variablen:: +* Vordefinierte Saitenstimmungen:: +* Die vordefinierten Bund-Diagramme:: +* MIDI-Instrumente:: +* Liste der Farben:: +* Die Feta-Schriftart:: +* Notenkopfstile:: +* Textbeschriftungsbefehle:: +* Textbeschriftungslistenbefehle:: +* Liste der Artikulationszeichen:: +* Schlagzeugnoten:: +* Technisches Glossar:: +* Alle Kontexteigenschaften:: +* Eigenschaften des Layouts:: +* Erhältliche Musikfunktionen:: +* Vordefinierte Typprädikate:: +* Scheme-Funktionen:: +@end menu + +@node Liste der Akkordbezeichnungen +@appendixsec Liste der Akkordbezeichnungen +@translationof Chord name chart + +Die Tabelle zeigt die zwei üblichen Möglichkeiten, wie Akkordbezeichnungen +ausgegeben werden. Es wird auch die entsprechende Note ausgegeben. + +@lilypondfile{chord-names-jazz.ly} + + +@node Übliche Akkord-Variablen +@appendixsec Übliche Akkord-Variablen +@translationof Common chord modifiers + +Die Tabelle zeigt Modifikatoren für Akkorde, die im @code{\chordmode}-Modus +benutzt werden können, um übliche Akkordkonstrukte zu notieren. + +@multitable @columnfractions .2 .3 .2 .2 + +@item +@b{Akkordtyp} +@tab +@b{Intervalle} +@tab +@b{Modifikator(en)} +@tab +@b{Beispiel} + + +@item +Dur +@tab +große Terz, Quinte +@tab +@code{5} oder nichts +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:5 +} +@end lilypond + +@item +Moll +@tab +kleine Terz, Quinte +@tab +@code{m} oder @code{m5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m +} +@end lilypond + +@item +Übermäßig +@tab +Große Terz, übermäßige Quinte +@tab +@code{aug} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug +} +@end lilypond + +@item +Vermindert +@tab +Kleine Terz, verminderte Quinte +@tab +@code{dim} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim +} +@end lilypond + +@item +Dominantsieben +@tab +Durdreiklang, kleine Septime +@tab +@code{7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:7 +} +@end lilypond + +@item +Große Septime +@tab +Durdreiklang, große Septime +@tab +@code{maj7} oder @code{maj} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj7 +} +@end lilypond + +@item +Kleine Septime +@tab +Molldreiklang, kleine Septime +@tab +@code{m7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7 +} +@end lilypond + +@item +Verminderte Septime +@tab +Verminderter Dreiklang, verminderte Septime +@tab +@code{dim7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim7 +} +@end lilypond + +@item +Übermäßige Septime +@tab +Übermäßiger Dreiklang, kleine Septime +@tab +@code{aug7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug7 +} +@end lilypond + +@item +halbverminderte Septime +@tab +Verminderter Dreklang, kleine Sept +@tab +@code{m7.5-} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7.5- +} +@end lilypond + +@item +Kleine MollSept +@tab +Molldreiklang, große Septime +@tab +@code{m7+} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7+ +} +@end lilypond + +@item +Große Sexte +@tab +Durdreiklang, Sexte +@tab +@code{6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:6 +} +@end lilypond + +@item +Kleine Sexte +@tab +Molldreiklang, Sexte +@tab +@code{m6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m6 +} +@end lilypond + +@item +Dominantnone +@tab +Dominantsept, große None +@tab +@code{9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:9 +} +@end lilypond + +@item +Dur-None +@tab +Große None, große Septime +@tab +@code{maj9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj9 +} +@end lilypond + +@item +Moll-None +@tab +Große None, kleine Septime +@tab +@code{m9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m9 +} +@end lilypond + +@item +Dominantundezime +@tab +Dominantnone, perfekte Undezime +@tab +@code{11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:11 +} +@end lilypond + +@item +Durundezime +@tab +Große None, perfekte Undezime +@tab +@code{maj11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj11 +} +@end lilypond + +@item +Mollundezime +@tab +Kleine None, perfekte Undezime +@tab +@code{m11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m11 +} +@end lilypond + +@item +Dominant-13 +@tab +Dominantnone, große 13 +@tab +@code{13} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13 +} +@end lilypond + +@item +Dominant-13 +@tab +Dominant-Undezime, große 13 +@tab +@code{13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13.11 +} +@end lilypond + +@item +Dur-13 +@tab +Große Undezime, große 13 +@tab +@code{maj13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj13.11 +} +@end lilypond + +@item +Moll-13 +@tab +Kleine Undezime, große 13 +@tab +@code{m13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m13.11 +} +@end lilypond + +@item +Sekundakkord +@tab +große Sekunde, perfekte Quinte +@tab +@code{sus2} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus2 +} +@end lilypond + +@item +Quartakkord +@tab +perfekte Quarte, perfekte Quinte +@tab +@code{sus4} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus4 +} +@end lilypond + +@item +Powerakkord (zweistimmig) +@tab +Perfekte Quinte +@tab +@code{1.5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + \powerChords + c1:1.5 +} +@end lilypond + +@item +Powerakkord (dreistimmig) +@tab +Perfekte Quinte, Oktave +@tab +@code{1.5.8} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + \powerChords + c1:1.5.8 +} +@end lilypond + + +@end multitable + +@node Vordefinierte Saitenstimmungen +@appendixsec Vordefinierte Saitenstimmungen +@translationof Predefined string tunings + +Die folgende Tabelle zeigt die vordefinierten Saitenstimmungen: + +@lilypondfile{display-predefined-string-tunings.ly} + + +@node Die vordefinierten Bund-Diagramme +@appendixsec Die vordefinierten Bund-Diagramme +@translationof Predefined fretboard diagrams + +Die Tabelle zeigt alle vordefinierten Bunddiagramme für Gitarre. + +@lilypondfile{display-predefined-fretboards.ly} + +Die folgende Tabelle zeigt vordefinierte Bunddiagramme für Ukulele. + +@lilypondfile{display-predefined-ukulele-fretboards.ly} + + +@node MIDI-Instrumente +@appendixsec MIDI-Instrumente +@translationof MIDI instruments + +Hier eine Liste von Musikinstrumentenbezeichnungen, die als Name für +@code{midiInstrument} benutzt werden können. Die Anordnung der +Instrumente entspricht den 128 Prgrammnummern des MIDI-Standards. +@c Todo: translate music instrument's names to German + +@cindex MIDI-Instrumentenbezeichnungen + +@example +acoustic grand contrabass lead 7 (fifths) +bright acoustic tremolo strings lead 8 (bass+lead) +electric grand pizzicato strings pad 1 (new age) +honky-tonk orchestral harp pad 2 (warm) +electric piano 1 timpani pad 3 (polysynth) +electric piano 2 string ensemble 1 pad 4 (choir) +harpsichord string ensemble 2 pad 5 (bowed) +clav synthstrings 1 pad 6 (metallic) +celesta synthstrings 2 pad 7 (halo) +glockenspiel choir aahs pad 8 (sweep) +music box voice oohs fx 1 (rain) +vibraphone synth voice fx 2 (soundtrack) +marimba orchestra hit fx 3 (crystal) +xylophone trumpet fx 4 (atmosphere) +tubular bells trombone fx 5 (brightness) +dulcimer tuba fx 6 (goblins) +drawbar organ muted trumpet fx 7 (echoes) +percussive organ french horn fx 8 (sci-fi) +rock organ brass section sitar +church organ synthbrass 1 banjo +reed organ synthbrass 2 shamisen +accordion soprano sax koto +harmonica alto sax kalimba +concertina tenor sax bagpipe +acoustic guitar (nylon) baritone sax fiddle +acoustic guitar (steel) oboe shanai +electric guitar (jazz) english horn tinkle bell +electric guitar (clean) bassoon agogo +electric guitar (muted) clarinet steel drums +overdriven guitar piccolo woodblock +distorted guitar flute taiko drum +guitar harmonics recorder melodic tom +acoustic bass pan flute synth drum +electric bass (finger) blown bottle reverse cymbal +electric bass (pick) shakuhachi guitar fret noise +fretless bass whistle breath noise +slap bass 1 ocarina seashore +slap bass 2 lead 1 (square) bird tweet +synth bass 1 lead 2 (sawtooth) telephone ring +synth bass 2 lead 3 (calliope) helicopter +violin lead 4 (chiff) applause +viola lead 5 (charang) gunshot +cello lead 6 (voice) +@end example + + +@node Liste der Farben +@appendixsec Liste der Farben +@translationof List of colors + +@subsubheading Normale Farben + +Die Syntax zur Benutzung findet sich im Abschnitt @ref{Farbige Objekte}. + +@cindex Liste der Farben +@cindex Farben, Liste + +@verbatim +black white red green +blue cyan magenta yellow +grey darkred darkgreen darkblue +darkcyan darkmagenta darkyellow +@end verbatim + + +@subsubheading X-Farbbezeichnungen + +X-Farbbezeichnungen haben verschiedene Varianten: + +Alle Bezeichnungen, die als einziges Wort mit Großbuchstaben +geschrieben werden (bspw. @q{LightSlateBlue}), können auch +von Leerzeichen getrennt geschrieben werden +(also @q{light slate blue}). + +Das Wort @q{grey} kann in jedem Fall auch @q{gray} geschrieben +werden (bspw. @q{DarkSlateGray}). + +Manche Bezeichnungen können auch ein numerales Suffix tragen +(etwa @q{LightSalmon4}). + + +@subsubheading Farben ohne eine numerale Endung + +@verbatim +snow GhostWhite WhiteSmoke gainsboro FloralWhite +OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond +bisque PeachPuff NavajoWhite moccasin cornsilk +ivory LemonChiffon seashell honeydew MintCream +azure AliceBlue lavender LavenderBlush MistyRose +white black DarkSlateGrey DimGrey SlateGrey +LightSlateGrey grey LightGrey MidnightBlue navy +NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue +LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue +DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue +LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise +turquoise cyan LightCyan CadetBlue MediumAquamarine +aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen +MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen +green chartreuse MediumSpringGreen GreenYellow LimeGreen +YellowGreen ForestGreen OliveDrab DarkKhaki khaki +PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold +LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed +SaddleBrown sienna peru burlywood beige +wheat SandyBrown tan chocolate firebrick +brown DarkSalmon salmon LightSalmon orange +DarkOrange coral LightCoral tomato OrangeRed +red HotPink DeepPink pink LightPink +PaleVioletRed maroon MediumVioletRed VioletRed magenta +violet plum orchid MediumOrchid DarkOrchid +DarkViolet BlueViolet purple MediumPurple thistle +DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed +LightGreen +@end verbatim + + +@subsubheading Farben mit einer numeralen Endung + +Für die folgenden Bezeichnungen kann das Suffix N durch eine +Zahl von 1--4 ersetzt werden. + +@verbatim +snowN seashellN AntiqueWhiteN bisqueN PeachPuffN +NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN +LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN +blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN +LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN +CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN +SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN +OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN +yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN +IndianRedN siennaN burlywoodN wheatN tanN +chocolateN firebrickN brownN salmonN LightSalmonN +orangeN DarkOrangeN coralN tomatoN OrangeRedN +redN DeepPinkN HotPinkN pinkN LightPinkN +PaleVioletRedN maroonN VioletRedN magentaN orchidN +plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN +thistleN +@end verbatim + + +@subsubheading Grauskala + +Eine Grauskala kann mit der Bezeichnung + +@example +greyN +@end example + +@noindent +erstellt werden, wobei N eine Zahl von 0--100 darstellt. + + +@node Die Feta-Schriftart +@appendixsec Die Feta-Schriftart +@translationof The Feta font + +@cindex Feta font +@cindex Font, Feta + +Die folgenden Symbole sind als Emmentaler-Schriftart verfügbar; auf sie +kann direkt zugegriffen werden, indem man die übliche Textbeschriftung +benutzt. @code{\musicglyph} greift direkt auf die Notationsschriftart +zu (bspw. @code{g^\markup @{ +\musicglyph #"scripts.segno" @}}). Siehe auch @ref{Text formatieren}. + +@menu +* Notenschlüssel-Glyphen:: +* Taktart-Glyphen:: +* Zahlen-Glyphen:: +* Versetzungszeichen-Glyphen:: +* Standard-Notenkopf-Glyphen:: +* Spezielle Notenkopf-Glyphen:: +* Geformte Notenkopf-Glyphen:: +* Pausen-Glyphen:: +* Fähnchen-Glyphen:: +* Punkt-Glyphen:: +* Dynamik-Glyphen:: +* Schrift-Glyphen:: +* Pfeilkopf-Glyphen:: +* Klammerspitzen-Glyphen:: +* Pedal-Glyphen:: +* Akkordeon-Glyphen:: +* Vaticana-Glyphen:: +* Medicaea-Glyphen:: +* Hufnagel-Glyphen:: +* Mensural-Glyphen:: +* Neomensural-Glyphen:: +* Petrucci-Glyphen:: +* Solesmes-Glyphen:: +@end menu + + +@node Notenschlüssel-Glyphen +@unnumberedsubsec Notenschlüssel-Glyphen +@translationof Clef glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #clefs +@end lilypond + + +@node Taktart-Glyphen +@unnumberedsubsec Taktart-Glyphen +@translationof Time Signature glyphs + + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #timesig +@end lilypond + + +@node Zahlen-Glyphen +@unnumberedsubsec Zahlen-Glyphen +@translationof Number glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #numbers +@end lilypond + + +@node Versetzungszeichen-Glyphen +@unnumberedsubsec Versetzungszeichen-Glyphen +@translationof Accidental glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accidentals +@end lilypond + + +@node Standard-Notenkopf-Glyphen +@unnumberedsubsec Standard-Notenkopf-Glyphen +@translationof Default Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #default-noteheads +@end lilypond + + +@node Spezielle Notenkopf-Glyphen +@unnumberedsubsec Spezielle Notenkopf-Glyphen +@translationof Special Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #special-noteheads +@end lilypond + + +@node Geformte Notenkopf-Glyphen +@unnumberedsubsec Geformte Notenkopf-Glyphen +@translationof Shape-note Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #shape-note-noteheads +@end lilypond + + +@node Pausen-Glyphen +@unnumberedsubsec Pausen-Glyphen +@translationof Rest glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #rests +@end lilypond + + +@node Fähnchen-Glyphen +@unnumberedsubsec Fähnchen-Glyphen +@translationof Flag glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #flags +@end lilypond + + +@node Punkt-Glyphen +@unnumberedsubsec Punkt-Glyphen +@translationof Dot glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dots +@end lilypond + + +@node Dynamik-Glyphen +@unnumberedsubsec Dynamik-Glyphen +@translationof Dynamic glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dynamics +@end lilypond + + +@node Schrift-Glyphen +@unnumberedsubsec Schrift-Glyphen +@translationof Script glyphs +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #scripts +@end lilypond + + +@node Pfeilkopf-Glyphen +@unnumberedsubsec Pfeilkopf-Glyphen +@translationof Arrowhead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #arrowheads +@end lilypond + + +@node Klammerspitzen-Glyphen +@unnumberedsubsec Klammerspitzen-Glyphen +@translationof Bracket-tip glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #brackettips +@end lilypond + + +@node Pedal-Glyphen +@unnumberedsubsec Pedal-Glyphen +@translationof Pedal glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #pedal +@end lilypond + + +@node Akkordeon-Glyphen +@unnumberedsubsec Akkordeon-Glyphen +@translationof Accordion glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accordion +@end lilypond + + +@node Vaticana-Glyphen +@unnumberedsubsec Vaticana-Glyphen +@translationof Vaticana glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #vaticana +@end lilypond + + +@node Medicaea-Glyphen +@unnumberedsubsec Medicaea-Glyphen +@translationof Medicaea glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #medicaea +@end lilypond + + +@node Hufnagel-Glyphen +@unnumberedsubsec Hufnagel-Glyphen +@translationof Hufnagel glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #hufnagel +@end lilypond + + +@node Mensural-Glyphen +@unnumberedsubsec Mensural-Glyphen +@translationof Mensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #mensural +@end lilypond + + +@node Neomensural-Glyphen +@unnumberedsubsec Neomensural-Glyphen +@translationof Neomensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #neomensural +@end lilypond + + +@node Petrucci-Glyphen +@unnumberedsubsec Petrucci-Glyphen +@translationof Petrucci glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #petrucci +@end lilypond + + +@node Solesmes-Glyphen +@unnumberedsubsec Solesmes-Glyphen +@translationof Solesmes glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #solesmes +@end lilypond + + + +@node Notenkopfstile +@appendixsec Notenkopfstile +@translationof Note head styles + +@cindex Notenkopfarten +@cindex Arten von Notenköpfen +@cindex Stile, Notenköpfe + +Folgende Stile können zur Darstellung der Notenköpfe verwendet werden: + +@lilypondfile[noindent]{note-head-style.ly} + + + +@node Textbeschriftungsbefehle +@appendixsec Textbeschriftungsbefehle +@translationof Text markup commands + +@include markup-commands.tely + + +@node Textbeschriftungslistenbefehle +@appendixsec Textbeschriftungslistenbefehle +@translationof Text markup list commands + +Folgende Befehle können mit dem Befehl @code{\markuplines} zusammen +benutzt werden: + +@include markup-list-commands.tely + + +@node Liste der Artikulationszeichen +@appendixsec Liste der Artikulationszeichen +@translationof List of articulations + +@cindex Akzent +@cindex Marcato +@cindex Accentus +@cindex Circulus +@cindex Espressivo +@cindex Fermate +@cindex Gedämpft +@cindex Ictus +@cindex Staccato +@cindex Portato +@cindex Tenuto +@cindex Aufstrich +@cindex Abstrich +@cindex Fußbezeichnung +@cindex Orgelpedalbezeichnung +@cindex Triller +@cindex Offen +@cindex Halboffen +@cindex Flageolet +@cindex Praller +@cindex Mordent +@cindex Doppelpraller +@cindex Prallermordent +@cindex Fingersatz +@cindex Daumenbezeichnung +@cindex Segno +@cindex Coda +@cindex Varcoda +@cindex Semicirculus +@cindex signum congruentiae + +Die Skripte unten sind in der Feta-Schriftart definiert und können +an Noten angehängt werden (etwa @samp{c\accent}). + +@menu +* Artikulationsskripte:: +* Ornamentale Skripte:: +* Fermatenskripte:: +* Instrumentenspezifische Skripte:: +* Wiederholungszeichensrkipte:: +* Skripte der alten Notation:: +@end menu + +@node Artikulationsskripte +@unnumberedsubsec Artikulationsskripte +@translationof Articulation scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #articulations } +@end lilypond + +@node Ornamentale Skripte +@unnumberedsubsec Ornamentale Skripte +@translationof Ornament scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #ornaments } +@end lilypond + +@node Fermatenskripte +@unnumberedsubsec Fermatenskripte +@translationof Fermata scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #fermatas } +@end lilypond + +@node Instrumentenspezifische Skripte +@unnumberedsubsec Instrumentenspezifische Skripte +@translationof Instrument-specific scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #instrument-specific } +@end lilypond + +@node Wiederholungszeichensrkipte +@unnumberedsubsec Wiederholungszeichensrkipte +@translationof Repeat sign scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #repeats } +@end lilypond + +@node Skripte der alten Notation +@unnumberedsubsec Ancient scripts + +@lilypond[quote] +\include "script-chart.ly" +\include "gregorian.ly" +\new VaticanaStaff { \scriptStaffAncient #ancient } +@end lilypond + + + +@node Schlagzeugnoten +@appendixsec Schlagzeugnoten +@translationof Percussion notes + +@lilypondfile[quote]{percussion-chart.ly} + + +@node Technisches Glossar +@appendixsec Technisches Glossar +@translationof Technical glossary + +Ein Glossar der technischen Ausdrücke und Konzepte, die von +LilyPond intern benutzt werden. Die Ausdrücke kommen in den +Handbüchern, auf den Mailinglisten oder im Quellcode vor. + +@menu +* alist:: +* callback:: +* closure:: +* glyph:: +* grob:: +* immutable:: +* interface:: +* lexer:: +* mutable:: +* output-def:: +* parser:: +* parser variable:: +* prob:: +* simple closure:: +* smob:: +* stencil:: +@end menu + +@node alist +@unnumberedsubsec alist +@translationof alist + +@cindex alist +@cindex assoziative Liste + +Eine assoziative Liste oder @strong{alist} in kurz ist ein +Scheme-Paar, das einen Wert mit einem Schlüssel assoziiert: +@w{@code{(Schlüssel . Wert)}}. In der Datei @file{scm/lily.scm} +beispielsweise assoziiert die alist @w{@qq{type-p-name-alist}} +bestimmte Prädikate (etwa@tie{}@code{ly:music?}) mit +Bezeichnungen (wie@tie{}@qq{music}) sodass Fehler der +Typüberprüfung über eine Konsolennachricht mitgeteilt werden +können, die auch die Bezeichnung des erwarteten Typprädikats +mitteilt. + +@node callback +@unnumberedsubsec callback +@translationof callback + +@cindex callback + +Ein @strong{callback} ist eine Routine, Funktion oder Methode, +deren Referenz in einem Aufruf als Argument an eine andere +Routine weitergereicht wird, sodass die aufgerufene Routine +ermöglicht wird, das Argument zu aktivieren. Die Technik +ermöglicht es einer niedrigeren Ebene des Programmes, eine +Funktion aufzurufen, die auf höherer Ebene definiert wurde. +Callbacks werden sehr ausgiebig in LilyPond eingesetzt, um +es Scheme-Code auf der Benutzerebene zu erlauben, wie viele +Funktionen der niedrigeren Ebene ausgeführt werden sollen. + +@node closure +@unnumberedsubsec closure +@translationof closure + +@cindex closure +@cindex einfache closure + +In Scheme entsteht ein @strong{closure} (Abschluss), wenn eine +Funktion, normalerweise ein Lambda-Ausdruck, als Variable +weitergegeben wird. Das closure enthält den Code der Funktion +plus Verweise zu den lexikalischen Verknüpfungen der +freien Variablen der Funktion (also die Variablen, die in +Ausdrücken benutzt werden, aber außerhalb von ihnen definiert +werden). Wenn diese Funktion später einem anderen Argument +zugewiesen wird, werden die freien Variabel-Verknüpfungend, die +in das closure eingeschlossen sind, benutzt um die Werte der +freien Variablen, die in der Rechnung benutzt werden sollen, +zu errechnen. Eine nützliche Eigenschaft von closures ist, +dass man interne variable Werte zwischen den Aufrufen +wiederverwerten kann, sodass ein Status erhalten bleiben kann. + +Ein @strong{simple closure} (einfacher Abschluss) ist ein +closure, dessen Ausdruck keine freien Variablen und auch keine +freien Variablel-Verknüpfungen hat. + +Ein simple closure wird in LilyPond von einem smob dargestellt, +der den Ausdruck und eine Methode, wie der Ausdruck auf eine +Liste von Argumenten angewendet werden soll, enthält. + + +@node glyph +@unnumberedsubsec glyph +@translationof glyph + +@cindex glyph +@cindex Glyphe +@cindex font +@cindex typeface +@cindex Schriftfamilie + +Ein @strong{glyph} (Glyphe) ist eine bestimmte graphische Repräsentation +eines typographischen Charakters oder einer Kombination von +zwei oder mehr Charakteren, die dann eine Ligatur bilden. Eine +Gruppe an Glyphen des gleichen Stils bilden ein Font, und +eine Gruppe an Fonts, die mehrere Stile darstellen, bilden +eine Schriftfamilie (engl. typeface). + + +@seealso +Notationsreferenz: +@ref{Fonts}, +@ref{Text encoding}. + + +@node grob +@unnumberedsubsec grob +@translationof grob + +@cindex grob +@cindex layout objects +@cindex graphical objects +@cindex Layoutobjekte +@cindex graphische Objekte + +LilyPond-Objekte, die Elemente der Notation in der graphischen +Ausgabe des Programmen darstellen, wie etwa Notenköpfe, Hälse, +Bögen, Bindebögen, Fingersatz, Schlüssel usw., werden +@qq{Layout-Objekte} genannt, auch oft als @qq{GRaphische OBjekte} +bezeichnet, was dann zu @strong{grob} abgekürzt wird. + +@seealso +Handbuch zum Lernen: +@rlearning{Objects and interfaces}, +@rlearning{Naming conventions of objects and properties}, +@rlearning{Properties of layout objects}. + +Referenz der Interna: +@rinternals{All layout objects}. + + +@node immutable +@unnumberedsubsec immutable +@translationof immutable + +@cindex immutable-Objekte +@cindex immutable-Eigenschaften + +Ein @strong{immutable} (unberührbares) Objekt ist ein, dessen Status nach der Erstellung +nicht mehr verändert werden kann, entgegen einem mutable Objekt, das +nach der Erstellung noch verändert werden kann. + +In LilyPond sind unberührbare oder geteilte Eigenschaften das +Standardverhalten von Grobs. Sie werden zwischen vielen Objekten +geteilt. Entgegen ihrer Bezeichnung können sie jedoch mit +@code{\override} und @code{\revert} verändert werden. + +@seealso +Notationsreferenz: +@ref{mutable}. + + + +@node interface +@unnumberedsubsec interface +@translationof interface + +@cindex interface +@cindex grob-interface +@cindex Schnittstelle von graphischen Objekten +@cindex graphische Objekte, Schnittstellen + +Aktionen und Eigenschaften, die eine Gruppe von Grobs gemeinsam +haben, werden in ein Objekt gesammelt, das als @code{grob-interface} +oder auch @qq{Schnittstelle} (engl. interface) bezeichnet wird. + + +@seealso +Handbuch zum Lernen: +@rlearning{Objekte und Schnittstellen}, +@rlearning{Regeln zur Benennung von Objekten und Eigenschaften}, +@rlearning{Eigenschaften, die Schnittstellen besitzen können}. + +Notationsreferenz: +@ref{Layout-Schnittstellen}. + +Referenz der Interna: +@rinternals{Graphical Object Interfaces}. + + +@node lexer +@unnumberedsubsec lexer +@translationof lexer + +@cindex lexer + +Ein @strong{lexer} ist ein Programm, das eine Charaktersequenz +in eines Sequenz von Tokens übersetzt. Dieser Prozess wird als +lexikalische Analyse bezeichnet. Der LilyPond-Lexer konvertiert +eine Eingabedatei (@file{.ly} in eine Datei mit Tokens, die sich +besser für den nächsten Schritt der Verarbeitung, nämlich das +Parsen, eignet. Siehe @ref{parser}. + + +@node mutable +@unnumberedsubsec mutable +@translationof mutable + +@cindex mutable-Objekte +@cindex veränderbare (mutable) Objekte + +Ein @strong{mutable} (veränderbares) Objekt ist ein Objekt, dessen +Status verändert werden kann, im Gegenteil zu einem immutable +Objekt, dessen Status zur Entstehungszeit festgelegt ist. + +In LilyPond enthalten mutable Eigenschaften Werte, die nur für +einen Grob gelten. Normalerweise werden Listen von anderen +Objekten oder Resultate einer Berechnung in mutablen Eigenschaften +gespeichert. + +@seealso +Notationsreferenz: +@ref{immutable}. + + +@node output-def +@unnumberedsubsec output-def +@translationof output-def + +@cindex output-def + +Eine Instanz der @code{Output-def}-Klasse enthält die Methoden und +Datenstruktur, die mit einem Ausgabeabschnitt assoziiert wird. +Instanzen werden für @code{midi}, @code{layout} und @code{paper}-Umgebungen +erstellt. + + +@node parser +@unnumberedsubsec parser +@translationof parser + +@cindex parser +@cindex Grammatik von LilyPond +@cindex Bison +@cindex BNF + +Ein @strong{parser} (Syntaxanalysierer) analysiert die Tokensequenzen, die von einem +Lexer erstellt wurden, um deren grammatikalische Struktur zu entschlüsseln, +wie sie von den Regeln des Eingabeformates vorgegeben werden. Dabei werden +die Sequenzen in immer größere Gruppen entsprechend den grammatischen +Regeln zusammengefasst. Wenn die Kette der Tokens gültig ist, ist das +Endprodukt ein Token-Baum, dessen Wurzel das Startsymbol der Grammatik ist. +Wenn dies nicht erreicht werden kann, ist die Datei nicht korrekt und +ensprechende Fehlermeldungen werden ausgegeben. Die syntaktischen Gruppierungen +und die Regeln, nach welchen die Gruppen aus ihren Einzelteilen nach der +LilyPond-Syntax erstellt werden, finden sich in der Datei @file{lily/parser.yy} +und werden in der Backus Normal Form (BNF) in @ref{LilyPond-Grammatik} +gezeigt. Diese Datei wird benutzt, um den Parser während der Programmkompilation +zu erstellen. Hierzu wird der Parser-Ersteller Bison verwendet. Er ist +Teil des Quellcodes und nicht in die binäre Installation von LilyPond +integriert. + + +@node parser variable +@unnumberedsubsec parser variable +@translationof parser variable + +Diese Variablen werden direkt in Scheme definiert. Von ihrer direkten +Benutzung durch den Benutzer wird streng abgeraten, weil ihre +Semantikzuordnung sehr verwirrend sein kann. + +Wenn der Wert einer derartigen Variable in einer @file{.ly}-Datei +verändert wird, ist diese Änderung global, und wenn sie nicht +explizit rückgängig gemacht wird, wird der neue Wert bis zum Ende +der Datei gelten und dabei sowohl aufeinander folgende +@code{\score}-Umgebungen als auch externe Dateien, die mit +@code{\include} geladen werden, beeinflussen. Das kann zu nicht +gewollten Konsequenzen führen, und in komplizierteren Projekten +kann es sehr schwer sein, die immer wieder auftretenden Fehler +zu beheben. + +LilyPond benutzt folgende Parser-Variablen: + +@itemize +@item afterGraceFraction +@item musicQuotes +@item mode +@item output-count +@item output-suffix +@item parseStringResult +@item partCombineListener +@item pitchnames +@item toplevel-bookparts +@item toplevel-scores +@item showLastLength +@item showFirstLength +@end itemize + + +@node prob +@unnumberedsubsec prob +@translationof prob + +Property OBjects, also Eigenschaftsobjekte, oder kurz @strong{Prob}, +sind Mitglieder der @code{Prob}-Klasse, eine einfache Basisklasse für +Objekte, die mutable oder immutable alists haben und die Methoden, +mit denen sie verändert werden können. Die @code{Music}- und +@code{Stream_event}-Klassen stammen von @code{Prob} ab. Verkörperungen +der @code{Prob}-Klasse werden auch erstellt, um formatierte Inhalte von +Systemgrobs und Titelblöcken während der Erstellung des Seitenlayouts zu +speichern. + +@node simple closure +@unnumberedsubsec simple closure +@translationof simple closure + +Siehe @ref{closure}. + +@node smob +@unnumberedsubsec smob +@translationof smob + +@cindex smob +@cindex Scheme objekt + +@strong{Smobs} sind ScheMe-OBjekte, Teile des Mechanismus von Guile, um +C- und C++-Ojekte in Scheme-Code zu exportieren. In LilyPond werden +Smobs von C++-Objekten mithilfe von Makros erstellt. Es gibt zwei +Arten von Smob-Objekten: einfache Smobs, die da sind für einfach +immutable Objekte wie Nummern, und komplexe Smobs, benutzt für Objekte +mit einer Identität. Wenn Sie auf die LilyPond-Quellen zurückgreifen +können, findet sich mehr Information hierzu in @file{lily/includes/smob.hh}. + +@node stencil +@unnumberedsubsec stencil +@translationof stencil + +@cindex stencil +@cindex Matrize (stencil) + +Eine Einheit der @strong{stencil}-Klasse enthält die Information, +die benötigt wird um ein typographisches Objekt zu setzen. Es handelt +sich um einen sehr einfachen Smob, der eine begrenzende Box enthält, +welche die vertikale und horizontale Ausdehnung des Objekt beschreibt, +und einen Scheme-Ausdruck, der das Objekt ausgibt, nachdem es ausgewertet +wurde. Stencil-Objekte können kombiniert werden, um komplexere +Stencil zu bilden, die aus einem Baum von Scheme-Ausdrücken des Typs +Stencil bestehen. + +Die @code{stencil}-Eigenschaft, die einen Grob mit seinem Stencil +verbindet, ist in der @code{grob-interface}-Schnittstelle definiert. + +@seealso +Referenz der Interna: +@rinternals{grob-interface}. + + +@node Alle Kontexteigenschaften +@appendixsec Alle Kontexteigenschaften +@translationof All context properties + +@include context-properties.tely + + +@node Eigenschaften des Layouts +@appendixsec Eigenschaften des Layouts +@translationof Layout properties + +@include layout-properties.tely + +@node Erhältliche Musikfunktionen +@appendixsec Erhältliche Musikfunktionen +@translationof Available music functions + +@include identifiers.tely + + +@node Vordefinierte Typenprädikate +@appendixsec Vordefinierte Typenprädikate +@translationof Predefined type predicates + +@include type-predicates.tely + + + +@node Scheme-Funktionen +@appendixsec Scheme-Funktionen +@translationof Scheme functions + +@include scheme-functions.tely + diff --git a/Documentation/de/notation/notation.itely b/Documentation/de/notation/notation.itely new file mode 100644 index 0000000000..6e629c02d5 --- /dev/null +++ b/Documentation/de/notation/notation.itely @@ -0,0 +1,39 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437 + + 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" + +@c Translators: Till Paala + +@node Musikalische Notation +@chapter Musikalische Notation +@translationof Musical notation + +Dieses Kapitel erklärt, wie die Notation von Musik erstellt wird. + +@menu +* Tonhöhen:: Tonhöhen von Noten notieren und darstellen. +* Rhythmus:: Tondauern von Noten notieren und darstellen. +* Ausdrucksbezeichnungen:: Vortragsbezeichnungen zu Noten hinzufügen. +* Wiederholungszeichen:: Noten wiederholen. +* Gleichzeitig erscheinende Noten:: Mehr als eine Note gleichzeitig. +* Notation auf Systemen:: Notensysteme darstellen. +* Anmerkungen:: Besondere Notation, um die Lesbarkeit zu verbessern. +* Text:: Text zur Partitur hinzufügen. +@end menu + +@include notation/pitches.itely +@include notation/rhythms.itely +@include notation/expressive.itely +@include notation/repeats.itely +@include notation/simultaneous.itely +@include notation/staff.itely +@include notation/editorial.itely +@include notation/text.itely + diff --git a/Documentation/de/notation/percussion.itely b/Documentation/de/notation/percussion.itely new file mode 100644 index 0000000000..a6272a937b --- /dev/null +++ b/Documentation/de/notation/percussion.itely @@ -0,0 +1,628 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + +@node Schlagzeug +@section Schlagzeug +@translationof Percussion + +@menu +* Übliche Notation für Schlagzeug:: +@end menu + + +@node Übliche Notation für Schlagzeug +@subsection Übliche Notation für Schlagzeug +@translationof Common notation for percussion + +Rhythmusnotation wird vor allem für Schlaginstrumente eingesetzt, +aber hiermit kann auch der Rhythmus einer Melodie dargestellt werden. + + +@menu +* Referenz für Schlagzeug:: +* Grundlagen der Schlagzeugnotation:: +* Trommelwirbel:: +* Schlagzeug mit Tonhöhe:: +* Schlagzeugsysteme:: +* Eigene Schlagzeugsysteme:: +* Geisternoten:: +@end menu + + +@node Referenz für Schlagzeug +@unnumberedsubsubsec Referenz für Schlagzeug +@translationof References for percussion + +@itemize + +@item Viele Schlagzeugmusik kann auf einem rhythmischen System notiert +werden. Das wird gezeigt in +@ref{Melodierhythmus anzeigen} und @ref{Neue Notensysteme erstellen}. + +@item MIDI-Ausgabe wird behandelt in +@ref{Schlagzeug in MIDI}. + +@end itemize + + +@seealso +Notationsreferenz: +@ref{Melodierhythmus anzeigen}, +@ref{Neue Notensysteme erstellen}. +@ref{Schlagzeug in MIDI}. + +Schnipsel: +@rlsr{Percussion}. + + +@node Grundlagen der Schlagzeugnotation +@unnumberedsubsubsec Grundlagen der Schlagzeugnotation +@translationof Basic percussion notation + +@cindex Perkussion +@cindex Drums +@cindex Schlagzeug + +Schlagzeug-Noten können im @code{\drummode}-Modus notiert werden, +der sich ähnlich verhält wie der Standardmodus für die Noteneingabe. +Am einfachsten kann der @code{\drums}-Befehl benutzt werden, der sich +um den richtigen Kontext und Eingabemodus kümmert: + +@lilypond[quote,verbatim] +\drums { + hihat4 hh bassdrum bd +} +@end lilypond + +@noindent +Das ist die Kurzschreibweise für: + +@lilypond[quote,verbatim] +\new DrumStaff { + \drummode { + hihat4 hh bassdrum bd + } +} +@end lilypond + +Jedes Schlagzeuginstrument hat einen langen Namen und eine Abkürzung, +und beide können nebeneinander benutzt werden. Eine Liste der +Notenbezeichnungen für Schlagzeug findet sich in @ref{Schlagzeugnoten}. + +Beachten Sie, dass normale Tonhöhen (wie @code{cis4}) in einem +@code{DrumStaff}-Kontext eine Fehlernachricht erzielen. Schlüssel für +Schlagzeug werden automatisch hinzugefügt, aber sie können auch explizit +gesetzt Werden. Auch andere Schlüssel können benutzt werden. + +@lilypond[quote,ragged-right,verbatim] +\drums { + \clef treble + hh4 hh hh hh + \break + \clef percussion + bd4 bd bd bd +} +@end lilypond + +Es gibt einige Probleme mit der MIDI-Unterstützung für Schlagzeuginstrumente. +Details finden sich in @ref{Schlagzeug in MIDI}. + +@seealso +Notationsreferenz: +@ref{Schlagzeug in MIDI}, +@ref{Schlagzeugnoten}. + +Installierte Dateien: +@file{ly/drumpitch-init.ly}. + +Schnipsel: +@rlsr{Percussion}. + + +@node Trommelwirbel +@unnumberedsubsubsec Trommelwirbel +@translationof Drum rolls + +Trommelwirbel werden mit drei Balken durch den Notenhals notiert. Für +Viertelnoten oder längere Noten werden die drei Balken explizit notiert, +Achtel werden mit zwei Balken gezeigt (und der dritte ist der eigentliche +Balken), und Trommelwirbel mit kürzeren Werten als Achtelnoten +haben einen Balken zusätzlich zu den eigentlichen Balken der Noten. +Dieses Verhalten wird mit der Tremolonotation erreicht, wie in +@ref{Tremolo-Wiederholung} gezeigt. Hier ein Beispiel kleinerer Wirbel: + +@lilypond[quote,verbatim] +\drums { + \time 2/4 + sn16 sn8 sn16 sn8 sn8:32 ~ + sn8 sn8 sn4:32 ~ + sn4 sn8 sn16 sn16 + sn4 r4 +} +@end lilypond + +Benutzung der Stöcke kann angezeigt werden durch @code{^"R"} oder +@code{^"L"} nach jeder Note. Die @code{staff-padding}-Eigenschaft +kann verändert werden, um eine Orientierung an einer gemeinsamen +Linie zu ermöglichen. + +@lilypond[quote,verbatim] +\drums { + \repeat unfold 2 { + sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" + } +} +@end lilypond + + +@seealso +Schnipsel: +@rlsr{Percussion}. + + +@node Schlagzeug mit Tonhöhe +@unnumberedsubsubsec Schlagzeug mit Tonhöhe +@translationof Pitched percussion + +Bestimmte Schlagzeuginstrumente mit Tonhöhe (z. B. Xylophone, +vibraphone und Pauken) werden auf normalen Systemen geschrieben. Das +wird in anderen Abschnitten des Handbuchs behandelt. + + +@seealso +@c TODO: possibly link to an alternate section of NR 3.5, if +@c "percussion in MIDI" gets a separate subsubsection for +@c pitched percussion sounds. -gp +Notationsreferenz: +@ref{Schlagzeug in MIDI}. + +Schnipsel: +@rlsr{Percussion}. + + +@node Schlagzeugsysteme +@unnumberedsubsubsec Schlagzeugsysteme +@translationof Percussion staves + +@cindex Perkussion +@cindex Schlagzeug + +Ein Schlagzeug-System besteht üblicherweise aus einem Notensystem +mit mehreren Linien, wobei jede Linie ein bestimmtes Schlagzeug-Instrument +darstellt. Um die Noten darstellen zu können, müssen sie sich innerhalb von +einem @code{DrumStaff}- und einem +@code{DrumVoice}-Kontext befinden. + +@lilypond[quote,verbatim] +up = \drummode { + crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat +} +down = \drummode { + bassdrum4 snare8 bd r bd sn4 +} +\new DrumStaff << + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + +Das Beispiel zeigt ausdrücklich definierte mehrstimmige Notation. Die +Kurznotation für mehrstimmige Musik, wie sie im Abschnitt +@rlearning{Ich höre Stimmen} beschrieben wird, kann auch verwendet werden. + +@lilypond[quote,verbatim] +\new DrumStaff << + \drummode { + bd4 sn4 bd4 sn4 + << { + \repeat unfold 16 hh16 + } \\ { + bd4 sn4 bd4 sn4 + } >> + } +>> +@end lilypond + +Es gibt auch weitere Layout-Einstellungen. Um diese zu verwenden, +muss die Eigenschaft @code{drumStyleTable} im +@code{DrumVoice}-Kontext entsprechend eingestellt werden. +Folgende Variablen sind vordefiniert: + +@table @code +@item drums-style +Das ist die Standardeinstellung. Hiermit wird ein typisches +Schlagzeug-System auf fünf Notenlinien erstellt. + +@lilypond[quote,line-width=10.0\cm] +nam = \lyricmode { + cymc cyms cymr hh hhc hho hhho hhp + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } +mus = \drummode { + cymc cyms cymr hh hhc hho hhho hhp \break + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } +\score { + << \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics \nam + >> + \layout { + \context { + \Score + \override LyricText #'font-family = #'typewriter + \override BarNumber #'transparent =##T + } + } +} +@end lilypond + +Die Schlagzeugdefinitionen unterstützen sechs unterschiedliche +Tom Toms. Falls eine geringere Anzahl verwendet wird, kann man +einfach die Tom Toms auswählen, deren Notation man haben will. +Tom Toms auf den drei mittleren Linien werden mit den Bezeichnungen +@code{tommh}, @code{tomml} und @code{tomfh} notiert. + +@item timbales-style +Hiermit werden Timbale auf zwei Notenlinien gesetzt. + +@lilypond[quote,ragged-right] +nam = \lyricmode { timh ssh timl ssl cb } +mus = \drummode { timh ssh timl ssl cb s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + \override StaffSymbol #'line-count = #2 + \override StaffSymbol #'staff-space = #2 + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) + drumStyleTable = #timbales-style + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item congas-style +Hiermit werden Congas auf zwei Linien gesetzt. + +@lilypond[quote,ragged-right] +nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } +mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + drumStyleTable = #congas-style + \override StaffSymbol #'line-count = #2 + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item bongos-style +Hiermit werden Bongos auf zwei Linien gesetzt. + +@lilypond[quote,ragged-right] +nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } +mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override StaffSymbol #'line-count = #2 + drumStyleTable = #bongos-style + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item percussion-style +Dieser Stil ist für alle einfachen Perkussionsinstrumente auf einer Notenlinie. + +@lilypond[quote,ragged-right] +nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } +mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } + +<< + \new DrumStaff \with{ + \remove Bar_engraver + drumStyleTable = #percussion-style + \override StaffSymbol #'line-count = #1 + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond +@end table + + +@node Eigene Schlagzeugsysteme +@unnumberedsubsubsec Eigene Schlagzeugsysteme +@translationof Custom percussion staves + +Wenn ihnen keine der vordefinierten Stile gefällt, können Sie auch eine +eigene Liste der Positionen und Notenköpfe am Anfang ihrer Datei erstellen. + +@lilypond[quote,verbatim] +#(define mydrums '( + (bassdrum default #f -1) + (snare default #f 0) + (hihat cross #f 1) + (halfopenhihat cross "halfopen" 1) + (pedalhihat xcircle "stopped" 2) + (lowtom diamond #f 3))) +up = \drummode { hh8 hh hhho hhho hhp4 hhp } +down = \drummode { bd4 sn bd toml8 toml } + +\new DrumStaff << + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + + +@snippets + +Hier einige Beispiele: + +Zwei Holzblöcke, notiert mit wbh (hoch) und wbl (tief) + +@lilypond[quote,verbatim] +% These lines define the position of the woodblocks in the stave; +% if you like, you can change it or you can use special note heads +% for the woodblocks. +#(define mydrums '((hiwoodblock default #t 3) + (lowoodblock default #t -2))) + +woodstaff = { + % This defines a staff with only two lines. + % It also defines the positions of the two lines. + \override Staff.StaffSymbol #'line-positions = #'(-2 3) + + % This is necessary; if not entered, the barline would be too short! + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) +} + +\new DrumStaff { + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + % with this you load your new drum style table + \woodstaff + + \drummode { + \time 2/4 + wbl8 wbl16 wbl wbh8-> wbl | + wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | + } +} +@end lilypond + +In diesem Spezialfalls muss die Länge der Taktlinie mit +@code{\override Staff.BarLine #'bar-extent #'(von . bis)} angepasst werden. +Andernfalls wäre sie zu kurz. Die Position der beiden Linien muss +auch definiert werden. + +Tamburin, notiert mit @code{tamb}: + +@lilypond[quote,verbatim] +#(define mydrums '((tambourine default #t 0))) + +tambustaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Tambourine" +} + +\new DrumStaff { + \tambustaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + \time 6/8 + tamb8. tamb16 tamb8 tamb tamb tamb | + tamb4. tamb8 tamb tamb | + % the trick with the scaled duration and the shorter rest + % is neccessary for the correct ending of the trill-span! + tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | + } +} +@end lilypond + +Noten für Tam-Tam (notiert mit @code{tt}): + +@lilypond[quote,verbatim] +#(define mydrums '((tamtam default #t 0))) + +tamtamstaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Tamtam" +} + +\new DrumStaff { + \tamtamstaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + tt 1 \pp \laissezVibrer + } +} +@end lilypond + +Zwei Glocken, notiert mit @code{cb} (Kuhglocke) und @code{rb} +(Reiterglocke) + +@lilypond[quote,verbatim] +#(define mydrums '((ridebell default #t 3) + (cowbell default #t -2))) + +bellstaff = { + \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Different Bells" +} + +\new DrumStaff { + \bellstaff + \drummode { + \time 2/4 + rb8 rb cb cb16 rb-> ~ | + rb16 rb8 rb16 cb8 cb | + } +} +@end lilypond + +Hier ein kurzes Beispiel von Stravinsky (aus @qq{L'histoire du Soldat}): + +@lilypond[quote,verbatim] +#(define mydrums '((bassdrum default #t 4) + (snare default #t -4) + (tambourine default #t 0))) + +global = { + \time 3/8 s4. + \time 2/4 s2*2 + \time 3/8 s4. + \time 2/4 s2 +} + +drumsA = { + \context DrumVoice << + { \global } + { \drummode { + \autoBeamOff + \stemDown sn8 \stemUp tamb s8 | + sn4 \stemDown sn4 | + \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | + \stemDown sn8 \stemUp tamb s8 | + \stemUp sn4 s8 \stemUp tamb + } + } + >> +} + +drumsB = { + \drummode { + s4 bd8 s2*2 s4 bd8 s4 bd8 s8 + } +} + +\layout { + indent = #40 +} + +\score { + \new StaffGroup << + \new DrumStaff { + \set DrumStaff.instrumentName = \markup { + \column { + "Tambourine" + "et" + "caisse claire s. timbre" + } + } + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsA + } + + \new DrumStaff { + \set DrumStaff.instrumentName = #"Grosse Caisse" + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsB } + >> +} +@end lilypond + + +@seealso +Schnipsel: +@rlsr{Percussion}. + +Referenz der Interna: +@rinternals{DrumStaff}, +@rinternals{DrumVoice}. + + +@node Geisternoten +@unnumberedsubsubsec Geisternoten +@translationof Ghost notes + +Geisternoten für Schlagzeug und Perkussion können mit dem +Klammer- (@code{\parenthesize})-Befehl, beschrieben in @ref{Klammern}, +erstellt werden. Im Standard-@code{\drummode}-Modus ist aber +das @code{Parenthesis_engraver}-Plugin nicht automatisch enthalten. + +@lilypond[quote,ragged-right,verbatim] +\new DrumStaff \with { + \consists "Parenthesis_engraver" +} +<< + \context DrumVoice = "1" { s1 } + \context DrumVoice = "2" { s1 } + \drummode { + << + { + hh8[ hh] hh16 + < \parenthesize sn > hh + < \parenthesize sn > hh8 hh + } \\ + { + bd4 r4 bd8 bd r8 bd + } + >> + } +>> +@end lilypond + +@noindent +Um jede Klammer-Definition (@code{\parenthesize}) müssen + zusätzlich die spitzen +Klammern für Akkorde (@code{< >}) gesetzt werden. + +@seealso +Schnipsel: +@rlsr{Percussion}. diff --git a/Documentation/de/notation/pitches.itely b/Documentation/de/notation/pitches.itely new file mode 100644 index 0000000000..5f9511cf56 --- /dev/null +++ b/Documentation/de/notation/pitches.itely @@ -0,0 +1,3073 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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" + +@c Translators: Till Paala + +@node Tonhöhen +@section Tonhöhen +@translationof Pitches + +@lilypondfile[quote]{pitches-headword.ly} + +Dieser Abschnitt zeigt, wie man die Tonhöhe notieren kann. +Es gibt drei Stufen in diesem Prozess: Eingabe, Veränderung und Ausgabe. + +@menu +* Tonhöhen setzen:: +* Viele Tonhöhen gleichzeitig verändern:: +* Tonhöhen anzeigen lassen:: +* Notenköpfe:: +@end menu + + +@node Tonhöhen setzen +@subsection Tonhöhen setzen +@translationof Writing pitches + +Dieser Abschnitt zeigt, wie man Tonhöhen notiert. Es gibt +zwei verschiedene Möglichkeiten, Noten in bestimmten +Oktaven zu notieren: den absoluten und den relativen +Modus. In den meisten Fällen eignet sich der relative +Modus besser. + +@menu +* Absolute Oktavenbezeichnung:: +* Relative Oktavenbezeichnung:: +* Versetzungszeichen:: +* Notenbezeichnungen in anderen Sprachen:: +@end menu + +@node Absolute Oktavenbezeichnung +@unnumberedsubsubsec Absolute Oktavenbezeichnung +@translationof Absolute octave entry + +@cindex Tonhöhenbezeichnungen +@cindex Absoluter Modus: Tonhöhen +@cindex Absolute Spezifikation von Oktaven +@cindex Angabe der Oktave: absolut + +@c some extra explanation for German users +Tonhöhenbezeichnungen werden durch Kleinbuchstaben +von@tie{}@code{a} bis@tie{}@code{g} angegeben. Dabei +wird ein aus dem Englischen entlehntes Modell benutzt, das sich +vom Deutschen dadurch unterscheidet, dass@tie{}@code{b} +für die Note @qq{H} steht. Die Benutzung deutscher +Notenbezeichnungen mit der Unterscheidung von b und h ist +auch möglich, siehe @ref{Notenbezeichnungen in anderen Sprachen}. +Die Notenbezeichnungen @code{c} bis @code{b} +werden in der Oktave unter dem zweigestrichenen C +gesetzt. + +@c don't use c' here. +@lilypond[verbatim,quote] +{ + \clef bass + c4 d e f + g4 a b c + d4 e f g +} +@end lilypond + +@cindex Oktavwechsel: Tonhöhe +@cindex Wechsel der Oktave +@cindex Tonhöhe: Wechsel der Oktave + +@funindex ' +@funindex , + +Andere Oktaven können erreicht werden, indem man ein +Apostroph@tie{}(@code{'}) oder ein Komma@tie{}(@code{,}) +benutzt. Jedes@tie{}@code{'} erhöht die Tonhöhe um +eine Oktave, jedes@tie{}@code{,} erniedrigt sie um eine +Oktave. + +@lilypond[verbatim,quote] +{ + \clef treble + c'4 c'' e' g + d''4 d' d c + \clef bass + c,4 c,, e, g + d,,4 d, d c +} +@end lilypond + +@seealso +Glossar: +@rglos{Pitch names}. + +Schnipsel: +@rlsr{Pitches}. + + +@node Relative Oktavenbezeichnung +@unnumberedsubsubsec Relative Oktavenbezeichnung +@translationof Relative octave entry + +@cindex Relativ +@cindex Relative Oktavbestimmung +@cindex Oktavbestimmung, relativ +@cindex Noteneingabe: relative Oktavbestimmung + +@funindex \relative +@funindex relative + +Wenn Oktaven im absoluten Modus notiert, passiert es +schnell, eine Note auf der falschen Oktave zu notieren. Mit +dem relativen Modus kommen solche Fehler seltener vor, weil +man die Oktave nur noch sehr selten spezifizieren muss. +Hinzu kommt, dass im absoluten Modus ein einzelner Fehler +schwer zu finden ist, während er im relativen Modus den +ganzen Rest des Stückes um eine Oktave verschiebt. + +@example +\relative @var{Anfangstonhöhe} @var{musikalischer Ausdruck} +@end example + +Im relativen Modus wird angenommen, dass sich jede folgende +Note so dicht wie möglich bei der nächsten befindet. Das bedeutet, +dass die Oktave jeder Tonhöhe innerhalb eines @var{musikalischen +Ausdrucks} wie folgt errechnet wird: + +@itemize +@item +Wenn kein Oktavänderungszeichen an einer Tonhöhe benutzt wird, +wird ihre Oktave so errechnet, dass das Intervall zur vorigen +Noten weniger als eine Quinte ist. Das Intervall wird errechnet, +ohne Versetzungszeichen zu berücksichtigen. + +@item +Ein Oktavänderungszeichen@tie{}@code{'} oder@tie{}@code{,} +kann hinzugefügt werden, um eine Tonhöhe explizit um eine +Oktave zu erhöhen bzw. zu erniedrigen, relativ zu der Tonhöhe, +die ohne das Oktavänderungszeichen errechnet wurde. + +@item +Mehrfache Oktavänderungszeichen können benutzt werden. Die +Zeichen@code{''}@tie{}und@tie{}@code{,,} ändern zum Beispiel +die Tonhöhe um zwei Oktaven. + +@item +Die Tonhöhe der ersten Note ist relativ zu +@code{@var{Anfangstonhöhe}}. Die @var{Anfangstonhöhe} wird +im absoluten Modus gesetzt, und als Empfehlung gilt, eine +Oktave von C zu nehmen. + +@end itemize + +So funktioniert der relative Modus: + +@lilypond[verbatim,quote] +\relative c { + \clef bass + c d e f + g a b c + d e f g +} +@end lilypond + +Oktavversetzungen müssen für alle Intervalle angezeigt werden, +die größer als eine Quarte sind. + +@lilypond[verbatim,quote] +\relative c'' { + c g c f, + c' a, e'' c +} +@end lilypond + +Eine Sequenz ohne ein einziges Oktavänderungszeichen kann +aber trotzdem weite Intervalle umfassen: + +@lilypond[verbatim,quote] +\relative c { + c f b e + a d g c +} +@end lilypond + +Wenn @code{\relative}-Umgebungen geschachtelt werden, gilt +der innerste @code{\relative}-Abschnitt. + +@lilypond[verbatim,quote] +\relative c' { + c d e f + \relative c'' { + c d e f + } +} +@end lilypond + +@code{\relative} hat keine Auswirkung auf @code{\chordmode}-Abschnitte. + +@lilypond[verbatim,quote] +\new Staff { + \relative c''' { + \chordmode { c1 } + } + \chordmode { c1 } +} +@end lilypond + +@code{\relative} darf nicht innerhalb von @code{\chordmode} +notiert werden. + +Tonhöhen innerhalb eines @code{\transpose}-Abschnitts sind absolut, +es sei denn ein @code{\relativ} wird eingefügt. + +@lilypond[verbatim,quote] +\relative c' { + d e + \transpose f g { + d e + \relative c' { + d e + } + } +} +@end lilypond + +@cindex Akkorde und relativer Modus +@cindex relativer Modus und Akkorde +@cindex Oktavenmodus (relativ) und Akkorde + +Wenn der vorherige Ausdruck ein Akkord ist, wird die erste Note +des Akkordes benutzt, um die erste Note des nächsten Akkordes zu +bestimmen. Innerhalb von Akkorden ist die nächste Note immer +relativ zur vorherigen. Betrachten Sie das folgende Beispiel +aufmerksam, insbesondere die @code{c}-Noten. + +@lilypond[verbatim,quote] +\relative c' { + c + + + +} +@end lilypond + +Wie oben erklärt wurde, wird die Oktave einer Tonhöhe nur +nach ihrer Notenbezeichnung errechnet, unabhängig von allen +Versetzungszeichen. Darum wird ein Eisis auf ein H (notiert als @code{b}) +folgend höher gesetzt, während ein Feses tiefer gesetzt wird. +Anders gesagt wird eine doppelterhöhte Quarte wird als +kleineres Intervall angesehen als eine doppelterniedrigte +Quinte, unabhängig von der Anzahl an Halbtönen, die jedes +Intervall enthält. + +@lilypond[verbatim,quote] +\relative c'' { + c2 fis + c2 ges + b2 eisis + b2 feses +} +@end lilypond + + +@seealso +Musikgossar: +@rglos{fifth}, +@rglos{interval}, +@rglos{Pitch names}. + +Notationsreferenz: +@ref{Oktavenüberprüfung}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{RelativeOctaveMusic}. + + +@cindex Relativer Oktavenmodus und Transposition +@cindex Transposition und relativer Modus + +@funindex \transpose +@funindex \chordmode +@funindex \relative +@funindex transpose +@funindex chordmode +@funindex relative + +@c DEPRECATED +Wenn keine @var{Anfangstonhöhe} für @code{\relative} angegeben +wird, wird@tie{}@code{c'} angenommen. Das ist aber eine +veraltete Option, die in späteren Programmversionen verschwinden kann. +Darum wird von der Benutzung abgeraten. + + +@node Versetzungszeichen +@unnumberedsubsubsec Versetzungszeichen +@translationof Accidentals + +@cindex Versetzungszeichen +@cindex Tonart +@cindex Schlüssel +@cindex Akzidentien + +@warning{Neue Benutzer sind manchmal verwirrt, wie +Versetzungszeichen und Vorzeichen/Tonarten funktionieren. +In LilyPond sind Notenbezeichnungen die wirkliche +Tonhöhe, erst durch Vorzeichen wird bestimmt, wie diese +Tonhöhe dann im Notenbild dargestellt wird. Eine +einfache Tonhöhe wie etwa@tie{}@code{c} bedeutet also +immer das eingestrichene C ohne Versetzungszeichen, egal +was für Vorzeichen/Tonart oder Schlüssel gesetzt sind. +Mehr Information dazu in @rlearning{Versetzungszeichen und Tonartbezeichnung (Vorzeichen)}.} + +@cindex Notenbezeichnungen, Deutsch +@cindex Notenbezeichnungen, Holländisch +@cindex Notenbezeichnungen, Standard +@cindex Versetzungszeichen, Deutsch +@cindex Standardnotenbezeichnungen +@cindex Kreuz +@cindex B +@cindex Doppelkreuz +@cindex Doppel-B +@cindex Auflösungszeichen +@cindex wirkliche Tonhöhe + + +Ein @notation{Kreuz} wird eingegeben, indem man @code{-is} an die +Notenbezeichnung hängt, ein b durch @code{-es}. Doppelkreuze +und Doppel-Bs werden durch Hinzufügen von @code{-isis} und +@code{-eses} hinter die Notenbezeichnung erzeugt. Diese +Syntax leitet sich von den holländischen Notenbezeichnungen +ab. Um andere Bezeichnungen für Versetzungszeichen zu +benutzen, siehe @ref{Notenbezeichnungen in anderen Sprachen}. + +@lilypond[verbatim,quote,relative=2] +ais1 aes aisis aeses +@end lilypond + +Auch die deutschen Varianten @code{as} für @code{aes} und +@code{es} für @code{ees} sind erlaubt. Im Unterschied zum +Deutschen ist aber @code{bes} die einzige Version für den Ton +B, während his als @code{bis} geschrieben werden muss. Das kann +aber auch verändert werden, siehe @ref{Notenbezeichnungen in anderen Sprachen}. + +Ein Auflösungszeichen macht die Wirkung eines Kreuzes oder Bs +rückgängig. Diese Auflösungszeichen werden jedoch nicht +als Suffix einer Tonhöhenbezeichnung eingegeben, sondern +sie ergeben sich (automatisch) aus dem Kontext, wenn die +nicht alterierte Notenbezeichnung eingegeben wird. + +@lilypond[quote,verbatim,relative=2] +a4 aes a2 +@end lilypond + + +@cindex Vierteltöne +@cindex Vorzeichen, Vierteltöne +@cindex Versetzungszeichen, Vierteltöne +@cindex Mikrotöne +@cindex Halbkreuz +@cindex Halb-B + +Versetzungszeichen für Vierteltöne werden durch Anhängen der Endungen +@code{-eh} (Erniedrigung) und @code{-ih} (Erhöhung) an den +Tonhöhenbuchstaben erstellt. Das Beispiel zeigt eine in Vierteltönen +aufsteigende Serie vom eingestrichenen C. + +@lilypond[verbatim,quote,relative=2] +ceseh1 ces ceh c cih cis cisih +@end lilypond + + +@cindex Versetzungszeichen, Erinnerung +@cindex Versetzungszeichen, Warnung +@cindex Vorzeichen, Erinnerung +@cindex Vorzeichen in Klammern +@cindex Erinnerungsvorzeichen +@cindex Warnungsvorzeichen +@cindex Klammern um Vorzeichen + +@funindex ? +@funindex ! + +Normalerweise werden Versetzungszeichen automatisch gesetzt, aber +sie können auch manuell hinzugefügt werden. Ein erinnerndes +Versetzungszeichen kann erzwungen werden, indem man ein Ausrufungszeichen +(@code{!}) hinter die Notenbezeichnung schreibt. Ein warnendes +Versetzungszeichen (also ein Vorzeichen in Klammern) wird durch Anfügen +eines Fragezeichens (@code{?}) erstellt. Mit diesen zusätzlichen +Zeichen kann man sich auch Auflösungszeichen ausgeben lassen. + +@lilypond[quote,ragged-right,fragment,verbatim,relative=1] +cis cis cis! cis? c c? c! c +@end lilypond + +@cindex Versetzungszeichen an übergebundener Note +@cindex Überbindung, Versetzungszeichen + +Versetzungzeichen von übergebundenen Noten werden nur +dann gesetzt, wenn ein neues System begonnen wird: + +@lilypond[verbatim,quote,relative=2] +cis1~ cis~ +\break +cis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-extra-naturals-from-being-automatically-added.ly} + +@seealso +Glossar: +@rglos{sharp}, +@rglos{flat}, +@rglos{double sharp}, +@rglos{double flat}, +@rglos{Pitch names}, +@rglos{quarter tone}. + +Handbuch zum Lernen: +@rlearning{Versetzungszeichen und Tonartbezeichnung (Vorzeichen)}. + +Notationsreferenz: +@ref{Automatische Versetzungszeichen}, +@ref{Vorgeschlagene Versetzungszeichen (musica ficta)}, +@ref{Notenbezeichnungen in anderen Sprachen}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{Accidental_engraver}, +@rinternals{Accidental}, +@rinternals{AccidentalCautionary}, +@rinternals{accidental-interface}. + + +@cindex Versetzungszeichen, Viertelton +@cindex Vierteltonversetzungszeichen + +@knownissues + +Es gibt keine allgemeinen Regeln für die Notation von +Vierteltönen, die Symbole von LilyPond folgen also +keinem Standard. + + +@node Notenbezeichnungen in anderen Sprachen +@unnumberedsubsubsec Notenbezeichnungen in anderen Sprachen +@translationof Note names in other languages + +@cindex Notenbezeichungen, andere Sprachen +@cindex Tonhöhenbezeichnungen, andere Sprachen +@cindex Sprache, Tonhöhenbezeichnungn in anderer + +Es gibt vordefinierte Bezeichnungen für die Notenbezeichnungen in anderen +Sprachen als Englisch. Die Sprache für die Notenbezeichnungen wird normalerweise +zu Beginn einer Datei ausgewählt: das folgende Beispiel zeigt die Verwendung +von italienischen Notenbezeichnungen: + +@lilypond[quote,verbatim] +\language "italiano" + +\relative do' { + do re mi sib +} +@end lilypond + +In der Tabelle sind die existierenden Sprachdefinitionen +mit den dazugehörigen Notenbezeichnungen dargestellt. + +@quotation +@multitable {@code{nederlands}} {do re mi fa sol la sib si} +@headitem Sprache + @tab Notenbezeichnungen +@item @code{nederlands} + @tab c d e f g a bes b +@item @code{catalan} + @tab do re mi fa sol la sib si +@item @code{deutsch} + @tab c d e f g a b h +@item @code{english} + @tab c d e f g a bf b +@item @code{espanol} + @tab do re mi fa sol la sib si +@item @code{italiano} + @tab do re mi fa sol la sib si +@item @code{norsk} + @tab c d e f g a b h +@item @code{portugues} + @tab do re mi fa sol la sib si +@item @code{suomi} + @tab c d e f g a b h +@item @code{svenska} + @tab c d e f g a b h +@item @code{vlaams} + @tab do re mi fa sol la sib si +@end multitable +@end quotation + +@noindent +und die dazugehörigen Versetzungszeichen-Endungen: + +@quotation +@multitable {@code{nederlands}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} +@headitem Sprache + @tab Kreuz @tab B @tab Doppelkreuz @tab Doppel-B +@item @code{nederlands} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{catalan} + @tab -d/-s @tab -b @tab -dd/-ss @tab -bb +@item @code{deutsch} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{english} + @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp + @tab -ff/-flatflat +@item @code{espanol} + @tab -s @tab -b @tab -ss/-x @tab -bb +@item @code{italiano} + @tab -d @tab -b @tab -dd @tab -bb +@item @code{norsk} + @tab -iss/-is @tab -ess/-es @tab -ississ/-isis + @tab -essess/-eses +@item @code{portugues} + @tab -s @tab -b @tab -ss @tab -bb +@item @code{suomi} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{svenska} + @tab -iss @tab -ess @tab -ississ @tab -essess +@item @code{vlaams} + @tab -k @tab -b @tab -kk @tab -bb +@end multitable +@end quotation + +Auf Holländisch, Deutsch, Norwegisch und Schwedisch (u. a.) wird die +Erniedrigungen von @q{a} -- @code{aes} -- zu @code{as} zusammengezogen. +Beide Formen werden jedoch akzeptiert. Genauso gelten auch +@code{es} und @code{ees}. Das gilt auch für +@code{aeses}@tie{}/@tie{}@code{ases} und +@code{eeses}@tie{}/@tie{}@code{eses}. +In manchen Sprachen sind nur diese Kurzformen definiert. + +@lilypond[verbatim,quote,relative=2] +a2 as e es a ases e eses +@end lilypond + + +@cindex Mikrotöne +@cindex Halbkreuz +@cindex Halb-B +@cindex sesqui-Kreuz +@cindex sesqui-B + +Bestimmte Musik verwendet Alterationen, die Bruchteile von den +@qq{normalen} Kreuzen oder Bs sind. Die Notenbezeichnungen für +Vierteltöne für die verschiedenen Sprachen sind in der folgenden +Tabelle aufgeführt. Die Präfixe @notation{semi-} und @notation{sesqui-} bedeuten +@qq{halb} bzw. @qq{eineinhalb}. Für Sprachen, die nicht in der Tabelle +auftauchen, sind noch keine eigenen Namen definiert. + +@quotation +@multitable {@code{nederlands}} {@b{semi-sharp}} {@b{semi-flat}} {@b{sesqui-sharp}} {@b{sesqui-flat}} +@headitem Sprache + @tab Vierteltonkreuz @tab Viertelton-B @tab 3/4-Tonkreuz @tab 3/4-Ton-B + +@item @code{nederlands} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{deutsch} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{english} + @tab -qs @tab -qf @tab -tqs @tab -tqf +@item @code{espanol} + @tab -cs @tab -cb @tab -tcs @tab -tcb +@item @code{italiano} + @tab -sd @tab -sb @tab -dsd @tab -bsb +@item @code{portugues} + @tab -sqt @tab -bqt @tab -stqt @tab -btqt +@end multitable +@end quotation + +Die meisten Sprachen, die hier vorkommen, werden normalerweise mit der +klassischen westlichen Musik assoziiert. Alternative Tonhöhen und +Stimmungen sind aber auch unterstützt: siehe +@ref{Übliche Notation für nichteuropäische Musik} + + +@seealso +Glossar: +@rglos{Pitch names}, +@rglos{Common Practice Period}. + +Notationsreferenz: +@ref{Übliche Notation für nichteuropäische Musik}. + +Installierte Dateien: +@file{scm/define-note-names.scm}. + +Schnipsel: +@rlsr{Pitches}. + + +@node Viele Tonhöhen gleichzeitig verändern +@subsection Viele Tonhöhen gleichzeitig verändern +@translationof Changing multiple pitches + +Dieser Abschnitt zeigt, wie man Tonhöhen beeinflusst. + +@menu +* Oktavenüberprüfung:: +* Transposition:: +* Umkehrung:: +* Krebs:: +* Modale Transformierungen:: +@end menu + +@node Oktavenüberprüfung +@unnumberedsubsubsec Oktavenüberprüfung +@translationof Octave checks + +@cindex Oktavenüberprüfung +@cindex Oktavierungskorrektur +@cindex Kontroll-Tonhöhe + +@funindex = +@funindex \octaveCheck +@funindex octaveCheck +@funindex controlpitch + +Im relativen Modus geschieht es recht häufig, dass ein +Oktavänderungszeichen vergessen wird. Oktavenüberprüfungen +machen es einfacher, solche Fehler zu entdecken und zu +korrigieren. Sie geben eine Warnung aus und korrigieren +die Oktave, wenn eine Note in einer unerwarteten Oktave +gefunden wird. + +Um die Oktave einer Note zu überprüfen, muss die absolute +Oktave nach dem @code{=}-Symbol angegeben werden. Im +folgenden Beispiel wird eine Warnung (und eine Tonhöhenänderung) +generiert, weil die zweite Note als absolute Oktave +ein @code{d''} anstelle von @code{d'} notiert ist, +wie es die Oktavierungskorrektur markiert. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d='4 d + e2 f +} +@end lilypond + +Die Oktave von einer Note kann auch mit dem +@code{\octaveCheck}@tie{}@var{Kontrolltonhöhe}-Befehl +überprüft werden. @var{Kontrollhöhe} wird im absoluten +Modus eingegeben. Dabei wird überprüft, ob das +Intervall zwischen der vorherigen Note und der +@var{Kontrolltonhöhe} nicht größer als eine Quarte ist +(die normale Berechnung im relativen Modus). Wenn diese +Überprüfung einen Fehler ausgibt, wird eine Warnung +gemeldet, aber die vorigen Note wird nicht verändert. +Folgende Noten sind dann relativ zur @var{Kontrolltonhöhe}. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d + \octaveCheck c' + e2 f +} +@end lilypond + +Vergleichen Sie die zwei Takte im nächsten Beispiel. Die +erste und dritte @code{\octaveCheck}-Überprüfung gibt +einen Fehler aus, die zweite dagegen ist erfolgreich: + +@lilypond[verbatim,quote] +\relative c'' { + c4 f g f + + c4 + \octaveCheck c' + f + \octaveCheck c' + g + \octaveCheck c' + f +} +@end lilypond + +@seealso +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{RelativeOctaveCheck}. + + +@node Transposition +@unnumberedsubsubsec Transposition +@translationof Transpose + +@cindex Transposition +@cindex Transponieren +@cindex Noten, transponieren +@cindex Tonhöhen, transponieren + +@funindex \transpose +@funindex transpose + +Ein musikalischer Ausdruck kann mit dem Befehl @code{\transpose} +transponiert werden. Die Syntax lautet: + +@example +\transpose @var{vonTonhöhe} @var{nachTonhöhe} @var{mus. Ausdruck} +@end example + +@noindent +Das bedeutet, dass der @var{mus. Ausdruck} um das Intervall zwischen den +Tonhöhen @var{vonTonhöhe} und @var{nachTonhöhe} transponiert wird: Jede Note, die die +Tonhöhe @var{vonTonhöhe} hat, wird in die Tonhöhe @var{nachTonhöhe} umgewandelt, und alle anderen +Noten um das gleiche Intervall. Beide Tonhöhen +werden im absoluten Modus eingegeben. + +@warning{Tonhöhen innerhalb einer @code{@bs{}transpose}-Umgebung +sind absolut, es sei denn, ein @code{@bs{}relative} wird +eingefügt.} + +So kann z. B. ein Stück in D-Dur, wenn es für den Sänger etwas zu +tief ist, nach E-Dur transponiert werden. Dabei +werden auch die Vorzeichen entsprechend angepasst: + +@lilypond[verbatim,quote] +\transpose d e { + \relative c' { + \key d \major + d4 fis a d + } +} +@end lilypond + +@cindex transponierende Instrumente +@cindex Instrumente, transponierende + +Wenn eine Stimme, die in C notiert ist, von einer A-Klarinette +gespielt werden soll (für die A als C notiert wird, +aber eine kleine Terz tiefer erklingt als es notiert +ist), kann die entsprechende Stimme wie folgt erstellt +werden: + +@lilypond[verbatim,quote] +\transpose a c' { + \relative c' { + \key c \major + c4 d e g + } +} +@end lilypond + +@noindent +Beachten Sie, dass @w{@code{\key c \major}} explizit +angegeben werden muss. Wenn hier keine Tonart angemerkt +würde, würde die Noten zwar transponiert, aber keine +Vorzeichen angezeigt werden. + +@code{\transpose} unterscheidet enharmonische Verwechslungen: sowohl +@w{@code{\transpose c cis}} als auch @w{@code{\transpose c des}} transponieren +die Musik einen Halbton nach oben. Aber die erste Version gibt als +Versetzungszeichen Kreuze aus, die zweite dagegen B-Versetzungszeichen. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \transpose c cis { \music } + \transpose c des { \music } +} +@end lilypond + +@code{\transpose} kann auch benutzt werden, um die geschriebenen +Noten eines transponierenden Instruments zu notieren. Im vorigen Beispiel wurde die Tonhöhen so eingegeben, +wie sie erklingen (also in C), aber man kann genauso +gut auch andersherum aus einer Stimme, die für ein +transponierendes Instrument in einem anderen Ton als +C geschrieben wurde, eine Partitur in C erstellen. +Die Noten einer B-Trompete, die mit einem notierten E +(also einem klingenden D) anfangen, könnte man also +auch so eingeben: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose c bes, \musicInBflat +@end example + +@noindent +Um die Noten dann in F zu setzen (um sie etwa für ein +Horn zu arrangieren), könnte man die schon geschriebenen +Noten wieder mit einem weiteren @code{\transpose} umgeben: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose f c' @{ \transpose c bes, \musicInBflat @} +@end example + +@noindent +Für mehr Information zu transponierenden Instrumenten +siehe auch @ref{Transposition von Instrumenten}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} + +@seealso +Notationsreferenz: +@ref{Relative Oktavenbezeichnung}, +@ref{Transposition von Instrumenten}. +@ref{Umkehrung} +@ref{Krebs} +@ref{Modale Transformierungen}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{TransposedMusic}. + +@funindex \transpose +@funindex \chordmode +@funindex \relative +@funindex transpose +@funindex chordmode +@funindex relative + +@knownissues + +Der relative Modus wirkt nicht in @code{\transpose}, +@code{\chordmode} oder @code{\relative}. +Um auch im relativen Modus transponieren +zu können, muss ein @code{\relative} innerhalb des +@code{\tranpose} zusätzlich gesetzt werden. + + +@node Umkehrung +@unnumberedsubsubsec Umkehrung +@translationof Inversion + +@cindex Umkehrung +@cindex Melodietransformation, Umkehrung + +@funindex \inversion +@funindex inversion + +Ein musikalischer Ausdruck kann in seine Umkehrung transformiert werden: + +@example +\inversion @var{vonTonhöhe} @var{nachTonhöhe} @var{mus. Ausdruck} +@end example + +Der @code{@var{mus. Ausdruck}} wird Intervall für Intervall umgekehrt und dann +von @code{v@var{vonTonhöhe}} nach @code{@var{nachTonhöhe}} transponiert. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \music + \inversion d' d' \music + \inversion d' ees' \music +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Modale Transformationen}, +@ref{Krebs}, +@ref{Transposition}. + + +@node Krebs +@unnumberedsubsubsec Krebs +@translationof Retrograde + +@cindex Krebs +@cindex Melodietransformation, Krebs + +@funindex \retrograde +@funindex retrograde + +Ein musikalischer Ausdruck kann umgekehrt werden, um im Krebsgang dargestellt +zu werden: + +@lilypond[verbatim,quote] +music = \relative c' { c8. ees16( fis8. a16 b8.) gis16 f8. d16 } + +\new Staff { + \music + \retrograde \music +} +@end lilypond + +@knownissues +Manuell gesetzte Bindebögen innerhalb des Krebsgangs @code{\retrograde} werden +aufgebrochen und erzeugen Warnungen. Einige Bindebögen können automatisch +ersetllt werden, indem man @ref{Automatic note splitting} aktiviert. + +@seealso +Notationsreferenz: +@ref{Modale Transformationen}, +@ref{Umgekehrung}, +@ref{Transposition}. + + + +@node Modale Transformierungen +@unnumberedsubsubsec Modale Transformierungen +@translationof Modal transformations + +@cindex modale Transformationen +@cindex Transformationen, modal +@cindex Melodietransformationen, modal + +In einer Komposition, die auf einer Skala basiert, wird ein Motiv oft in +unterschiedlicher Weise transformiert. Es kann transponiert werden, um +von einer anderen Tonhöhe in der Skala zu beginnen, oder beginnend von einer +bestimmten Tonhöhe der Skala umgekehrt werden. Es kann auch im Krebsgang, +also rückwärts erscheinen, siehe @ref{Krebs}. + +@warning{Alle Noten, die nicht zu der vorgegebenen Skala gehören, werden +nicht transformiert.} + +@subsubheading Modale Transposition + +@cindex modale Transposition +@cindex Transposition, modal +@cindex Melodietransposition, modal + +@funindex \modalTranspose +@funindex modalTranspose + +Ein Motiv kann innerhalb einer Skala transponiert werden: + +@example +\modalTranspose @var{vonTonhöhe} @var{nachTonhöhe} @var{Skala} @var{mus. Ausdruck} +@end example + +Die Noten von @code{@var{mus. Ausdruck}} werden innerhalb von @code{@var{Skala}} +um die Anzahl von Skalenstufen transponiert, die dem Intervall zwischen +@code{@var{vonTonhöhe}} und @code{@var{nachTonhöhe}} entspricht. + +@lilypond[verbatim,quote] +diatonicScale = \relative c' { c d e f g a b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \modalTranspose c f \diatonicScale \motif + \modalTranspose c b, \diatonicScale \motif +} +@end lilypond + +Eine absteigende Skala beliebiger Länge und mit beliebigen Intervallen kann +definiert werden: + +@lilypond[verbatim,quote] +pentatonicScale = \relative c' { ges aes bes des ees } +motif = \relative c' { ees8 des ges,4 } + +\new Staff { + \motif + \modalTranspose ges ees' \pentatonicScale \motif +} +@end lilypond + +Wenn @code{\modalTranspose} mit einer chromatischen Skala benutzt wird, +entspricht es der Funktion von @code{\transpose} mit dem Unterschied, +dass die Bezeichnungen der eingesetzten Noten definiert werden können: + +@lilypond[verbatim,quote] +chromaticScale = \relative c' { c cis d dis e f fis g gis a ais b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \transpose c f \motif + \modalTranspose c f \chromaticScale \motif +} +@end lilypond + + +@subsubheading Modale Umkehrung + +@cindex modale Umkehrung +@cindex Umkehrung, modal +@cindex Melodieumkehrung, modal + +@funindex \modalInversion +@funindex modalInversion + +Ein musikalischer Ausdruck kann innerhalb einer definierten Skala um +eine Referenznote umgekehrt werden und transponiert werden: + +@example +\modalInversion @var{Umkehrungstonhöhe} @var{nachTonhöhe} @var{Skala} @var{mus. Ausdruck} +@end example + +Die Noten von @code{@var{mus. Ausdruck}} werden mit den gleichen Intervallabständen +voneinander gesetzt, ausgehend von @code{@var{Umkehrungstonhöhe}}, allerdings +in die entgegengesetzte Richtung. Das Result wird dann innerhalb der +@code{@var{Skala}} um das Intervall transponiert, das sich aus dem +Unterschied von @code{@var{Umkehrungstonhöhe}} und @code{@var{nachTonhöhe}} +ergibt. + +Um also einfach eeine Umkehrung ohne zusätzliche Transposition zu machen, +sollten @code{@var{Umkehrungstonhöhe}} und @code{@var{nachTonhöhe}} gleich +sein. + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \modalInversion fis' fis' \octatonicScale \motif +} +@end lilypond + +Um den Drehpunkt der Umkehrung zwischen zwei Noten der Skala zu definieren, +wird um eine der Noten die Umkehrung vorgenommen und dann eine Skalenstufe +transponiert. Die beiden Noten klammern sozusagen den Drehpunkt ein. + +@lilypond[verbatim,quote] +scale = \relative c' { c g' } +motive = \relative c' { c c g' c, } + +\new Staff { + \motive + \modalInversion c' g' \scale \motive +} +@end lilypond + +Die kombinierte Operation von Umkehrung und Krebs erzeugt die +Krebsumkehrung: + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \retrograde \modalInversion c' c' \octatonicScale \motif +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Umkehrung}, +@ref{Krebs}, +@ref{Transposition}. + + +@node Tonhöhen anzeigen lassen +@subsection Tonhöhen anzeigen lassen +@translationof Displaying pitches + +Dieser Abschnitt zeigt, wie die Ausgabe von Tonhöhen +verändern werden kann. + +@menu +* Notenschlüssel:: +* Tonartbezeichnung:: +* Oktavierungsklammern:: +* Transposition von Instrumenten:: +* Automatische Versetzungszeichen:: +* Tonumfang:: +@end menu + +@node Notenschlüssel +@unnumberedsubsubsec Notenschlüssel +@translationof Clef + +@cindex G-Schlüssel +@cindex C-Schlüssel +@cindex F-Schlüssel +@cindex Sopranschlüssel +@cindex Violinschlüssel +@cindex Altschlüssel +@cindex Bratschenschlüssel +@cindex Tenorschlüssel +@cindex Bassschlüssel +@cindex Französischer Violinschlüssel +@cindex Mezzosopranschlüssel +@cindex Sopranschlüssel in C +@cindex Baritonschlüssel +@cindex Subbassschlüssel +@cindex Schlüssel +@cindex Notenschlüssel +@cindex Alte Schlüssel +@cindex Schlüssel Alter Musik +@cindex Schlüssel, C +@cindex Schlüssel, G +@cindex Schlüssel, F + +@funindex \clef +@funindex clef + +Der Schlüssel kann verändert werden. Das eingestrichene +C wird in jedem Beispiel gezeigt: + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef alto +c2 c +\clef tenor +c2 c +\clef bass +c2 c +@end lilypond + +Andere Schlüssel sind u. A.: + +@lilypond[verbatim,quote,relative=1] +\clef french +c2 c +\clef soprano +c2 c +\clef mezzosoprano +c2 c +\clef baritone +c2 c + +\break + +\clef varbaritone +c2 c +\clef subbass +c2 c +\clef percussion +c2 c + +\break + +\clef G % synonym for treble +c2 c +\clef F % synonym for bass +c2 c +\clef C % synonym for alto +c2 c +@end lilypond + +@cindex transponierende Schlüssel +@cindex Schlüssel, transponierend +@cindex Oktavtransposition +@cindex Chor-Tenorschlüssel +@cindex Tenorschlüssel, Chor + +Indem @code{_8} oder @code{^8} an die jeweilige Schlüsselbezeichnung +angehängt wird, wird der Schlüssel um eine Oktave nach oben oder unten +transponiert, mit @code{_15} oder @code{^15} um zwei Oktaven. Auch +andere Ganzzahlen können verwendet werden, wenn es gewünscht wird. +Die Schlüsselbezeichnung muss in Anführungszeichen gesetzt werden, +wenn nicht-alphabetische Zeichen enthält, siehe Beispiel: + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef "treble_8" +c2 c +\clef "bass^15" +c2 c +\clef "alto_2" +c2 c +\clef "G_8" +c2 c +\clef "F^5" +c2 c +@end lilypond + +Weitere unterstützte Schlüssel sind beschrieben in @ref{Mensurale Schlüssel}, +@ref{Gregorianische Schlüssel}, @ref{Standardtabulaturen} und +@ref{Angepasste Tabulaturen}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-clef-properties.ly} + + +@seealso +Notationsreferenz: +@ref{Mensurale Schlüssel}, +@ref{Gregorianische Schlüssel} +@ref{Standardtabulaturen}, +@ref{Angepasste Tabulaturen}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{Clef_engraver}, +@rinternals{Clef}, +@rinternals{OctavateEight}, +@rinternals{clef-interface}. + + +@node Tonartbezeichnung +@unnumberedsubsubsec Tonartbezeichnung +@translationof Key signature + +@cindex Tonart +@cindex Vorzeichen + +@funindex \key +@funindex key + +@c duplicated in Key signature and Accidentals +@warning{Neue Benutzer sind manchmal verwirrt, wie +Versetzungszeichen und Vorzeichen/Tonarten funktionieren. +In LilyPond sind Notenbezeichnungen die wirkliche +Tonhöhe, erst durch Vorzeichen wird bestimmt, wie diese +Tonhöhe dann im Notenbild dargestellt wird. Eine +einfache Tonhöhe wie etwa@tie{}@code{c} bedeutet also +immer das eingestrichene C ohne Versetzungszeichen, egal +was für Vorzeichen/Tonart oder Schlüssel gesetzt sind. +Mehr Information dazu in @rlearning{Versetzungszeichen und Tonartbezeichnung (Vorzeichen)}.} + +Die Vorzeichen zeigen die Tonart an, in welcher ein Stück notiert ist. +Es handelt sich um eine Anzahl von Alterationszeichen (Kreuzen oder +Bs) am Beginn jedes Notensystems. + +Die Tonart kann geändert werden: + +@example +@code{\key} @var{Tonhöhe} @var{Modus} +@end example + +@funindex \minor +@funindex \major +@funindex \minor +@funindex \ionian +@funindex \locrian +@funindex \aeolian +@funindex \mixolydian +@funindex \lydian +@funindex \phrygian +@funindex \dorian +@funindex minor +@funindex major +@funindex minor +@funindex ionian +@funindex locrian +@funindex aeolian +@funindex mixolydian +@funindex lydian +@funindex phrygian +@funindex dorian + +@cindex Kirchentonarten +@cindex Modus +@cindex Dur +@cindex Moll +@cindex Ionisch +@cindex Lokrisch +@cindex Äolisch +@cindex Mixolydisch +@cindex Aeolisch +@cindex Dorisch +@cindex Lydisch +@cindex Phrygisch + +@noindent +Der Wert @var{Modus} sollte entweder @code{\major} oder @code{\minor} +sein, um Moll oder Dur der @var{Tonhöhe} zu erhalten. Es können auch +Modusbezeichnungen für Kirchentonarten verwendet werden: @code{\ionian} +(Ionisch), @code{\locrian} (Lokrisch), @code{\aeolian} (Aeolisch), +@code{\mixolydian} (Mixolydisch), @code{\lydian} (Lydisch), +@code{\phrygian} (Phrygisch) und @code{\dorian} (Dorisch). + +@lilypond[verbatim,quote,relative=2] +\key g \major +fis1 +f +fis +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Glossar: +@rglos{church mode}, +@rglos{scordatura}. + +Handbuch zum Lernen: +@rlearning{Versetzungszeichen und Tonartbezeichnung (Vorzeichen)}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{KeyChangeEvent}, +@rinternals{Key_engraver}, +@rinternals{Key_performer}, +@rinternals{KeyCancellation}, +@rinternals{KeySignature}, +@rinternals{key-cancellation-interface}, +@rinternals{key-signature-interface}. + + +@node Oktavierungsklammern +@unnumberedsubsubsec Oktavierungsklammern +@translationof Ottava brackets + +@cindex ottava +@cindex 15ma +@cindex 8va +@cindex 8ve +@cindex Oktavierung + +@funindex set-octavation +@funindex \ottava +@funindex ottava + +@notation{Oktavierungsklammern} zeigen eine zusätzliche +Transposition von einer Oktave an: + +@lilypond[verbatim,quote,relative=2] +a2 b +\ottava #-2 +a2 b +\ottava #-1 +a2 b +\ottava #0 +a2 b +\ottava #1 +a2 b +\ottava #2 +a2 b +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ottava-text.ly} + + +@seealso +Glossar: +@rglos{octavation}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{Ottava_spanner_engraver}, +@rinternals{OttavaBracket}, +@rinternals{ottava-bracket-interface}. + + +@node Transposition von Instrumenten +@unnumberedsubsubsec Transposition von Instrumenten +@translationof Instrument transpositions + +@cindex Transposition, MIDI +@cindex Transposition, Instrumente +@cindex Transponierendes Instrument +@cindex MIDI +@cindex MIDI-Transposition + +@funindex \transposition +@funindex transposition + +Wenn man Noten setzt, die von transponierenden Instrumenten +gespielt werden, sind oft einige Stimmen auf einer +anderen Tonhöhe notiert als dem Kammerton. In diesem +Fall muss die Tonart des transponierenden Instruments +gekennzeichnet werden, weil sonst die MIDI-Ausgabe +und Stichnoten in anderen Stimmen falsche Tonhöhen +produzieren. Mehr Information zu Stichnoten in +@ref{Stichnoten}. + +@example +\transposition @var{Tonhöhe} +@end example + +Die Tonhöhe, die für @code{\transposition} benutzt +wird, muss mit dem wirklichen Ton übereinstimmen, +der erklingt, wenn das Instrument ein @code{c'} +in seiner Stimme spielt. Die Tonhöhe wird im +absoluten Modus angegeben, ein Instrument also, +dass einen Ton höher erklingt als es notiert wird, +muss folgenden Befehl benutzen: +@w{@code{\transposition d'}}. @code{\transposition} +sollte @emph{nur} dann benutzt werden, wenn sie nicht +@emph{nicht} in C notiert werden. + +Hier einige Noten für Geige und B-Klarinette: die +Stimmen (Noten und Vorzeichen) sind so notiert, wie sie +in der Partitur erscheinen. Die zwei Instrumente +spielen unisono. + +@lilypond[verbatim,quote] +\new GrandStaff << + \new Staff = "violin" { + \relative c'' { + \set Staff.instrumentName = #"Vln" + \set Staff.midiInstrument = #"violin" + % not strictly necessary, but a good reminder + \transposition c' + + \key c \major + g4( c8) r c r c4 + } + } + \new Staff = "clarinet" { + \relative c'' { + \set Staff.instrumentName = \markup { Cl (B\flat) } + \set Staff.midiInstrument = #"clarinet" + \transposition bes + + \key d \major + a4( d8) r d r d4 + } + } +>> +@end lilypond + +Die @code{\transposition} kann während eines Stückes +geändert werden. Ein Klarinettist zum Beispiel kann +zwischen B- und A-Klarinette wechseln. + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = #"Cl (A)" +\key a \major +\transposition a +c d e f +\textLengthOn +s1*0^\markup { B-Klarinette benutzen } +R1 + +\key bes \major +\transposition bes +c2 g +@end lilypond + + +@seealso +Glossar: +@rglos{concert pitch}, +@rglos{transposing instrument}. + +Notationsreferenz: +@ref{Stichnoten}, +@ref{Transposition}. + +Schnipsel: +@rlsr{Pitches}. + + +@node Automatische Versetzungszeichen +@unnumberedsubsubsec Automatische Versetzungszeichen +@translationof Automatic accidentals + +@cindex Akzidentien +@cindex Versetzungszeichen, Standard +@cindex Versetzungszeichenstil +@cindex Automatische Versetzungszeichen +@cindex Versetzungszeichen, automatisch +@cindex Standard-Versetzungszeichenstil + +@funindex set-accidental-style +@funindex voice +@funindex default + +Es gibt viele unterschiedliche Regeln, wie Versetzungszeichen +notiert werden. LilyPond hat eine Funktion, mit der +spezifiziert werden kann, welcher Stil benutzt werden +soll. Diese Funktion kann man wie folgt benutzen: + +@example +\new Staff << + #(set-accidental-style 'voice) + @{ @dots{} @} +>> +@end example + +Der Versetzungszeichenstil bezieht sich auf das aktuelle +Notensystem in der Standardeinstellung (eine Ausnahme +bilden die Stile @code{piano} und @code{piano-cautionary}, +die weiter unten erklärt werden). Die Funktion kann aber +auch ein zweites Argument erhalten, mit der spezifiziert +wird, auf welchen Bereich sich der neue Stil erstreckt. +Um etwa den neuen Stil in allen Systemen einer +Stimmgruppe (@code{StaffGroup}) zu benutzen, müsste der Befehl so aussehen: + +@example +#(set-accidental-style 'voice 'StaffGroup) +@end example + +Folgende Versetzungszeichenstile sind unterstützt. +Um jeden Stil zu erklären, wird folgendes Beispiel +benützt: + +@lilypond[verbatim,quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +Die letzten Zeilen des Beispiels könnten auch mit folgendem +Code ersetzt werden, solange der gleiche Versetzungszeichenstil +in beiden Systemen benutzt werden soll: + +@example +\new PianoStaff @{ + << + \context Staff = "up" @{ + %%% change the next line as desired: + #(set-accidental-style 'default 'Score) + \musicA + @} + \context Staff = "down" @{ + \musicB + @} + >> +@} +@end example + + +@c don't use verbatim in this table. +@table @code +@item default (Standard) + +@cindex Standard-Versetzungszeichenstil +@cindex Versetzungszeichenstil, Standard + +Das ist das Standardverhalten. Es entspricht der +Konvention für Notation von Musik des 18. Jahrhunderts: +Versetzungszeichen werden bis zum Taktende erinnert, in +dem sie gesetzt wurden, und nur in ihrer eigenen +Oktave. Im nächsten Beispiel wird also kein +Auslösungszeichen vor dem@tie{}@code{b} (H) im zweiten +Takt oder dem letzen@tie{}@code{c} gesetzt: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +@item voice (Stimme) + +@cindex Versetzungszeichenstil, Stimme +@cindex Stimme-Versetzungszeichenstil +@cindex Voice-Versetzungszeichenstil +@cindex moderner Versetzungszeichenstil +@cindex Versetzungszeichenstil modern +@cindex Versetzungszeichenstil, modern-cautionary +@cindex modern-Warnung-Versetzungszeichenstil + +@funindex voice + +Das normale Verhalten ist es, die Versetzungszeichen +auf der Notensystemebene zu erinnern. In diesem +Stil aber werden Versetzungszeichen individuell für +jede Stimme errechnet. Abgesehen davon gelten die +Regeln des Standardstiles (@code{default}). + +Das hat zur Folge, dass Versetzungszeichen von einer +Stimme in der anderen nicht aufgelöst werden, was oft +ein unerwünschtes Ergebnis ist: im folgenden Beispiel +kann man schwer sagen, ob das zweite @code{a} unalteriert +oder erhöht gespielt werden soll. Die @code{voice}-Option +sollte also nur benutzt werden, wenn die Stimmen +separat von unterschiedlichen Musikern gelesen werden. +Wenn das System nur von einem Musiker benutzt wird +(etwa der Dirigent oder ein Klavierspieler), dann +sind die Stile @code{modern} oder @code{modern-cautionary} +besser. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'voice) + \musicB + } + >> +} +@end lilypond + +@item modern (Modern) + +@cindex Versetzungszeichen, moderne Stile +@cindex Moderner Stil, Versetzungszeichen + +@funindex modern + +Dieser Stil orientiert sich an den üblichen Regeln für +das 20. Jahrhundert. Hierbei werden einige zusätzliche +Auflösungszeichen ausgelassen, die traditionell für +Versetzungszeichen benutzt wurden, welche die Richtung +des vorherigen Versetzungszeichens verringern oder +umkehren. Die gleichen Versetzungszeichen +wie im Standardstil werden gesetzt, allerdings mit zwei +Ausnahmen, die Uneindeutigkeiten verhindern sollen: nach +vorübergehenden Versetzungszeichen werden Auflösungszeichen +auch im folgenden Takt gesetzt (für Noten innerhalb der +selben Oktave) und im gleichen Takt für Noten in +unterschiedlichen Oktaven. Daher kommen also die Auflösungszeichen +vor dem H und dem C im zweiten Takt des oberen Systems: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern) + \musicB + } + >> +} +@end lilypond + +@item modern-cautionary (Modern mit Warnungen) + +@cindex Versetzungszeichen, moderner Stil mit Warnungen +@cindex moderner Versetzungszeichenstil +@cindex moderner Versetzungszeichenstil mit Warnungen + +@funindex modern-cautionary + +Dieser Stil ähnelt @code{modern}, aber die @qq{zusätzlichen} +Versetzungszeichen (die normalerweise nicht gesetzt werden) +werden als Warnungen gesetzt. In der Standardeinstellung werden +sie in Klammern gesetzt, aber sie können auch in kleinerer +Größe gesetzt werden, wenn man die @code{cautionary-style}-Eigenschaft +von @code{AccidentalSuggestion} definiert. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-cautionary) + \musicB + } + >> +} +@end lilypond + +@item modern-voice (Modern für Stimmen) + +@cindex Versetzungszeichenstil, modern +@cindex Versetzungszeichen pro Stimme +@cindex moderner Versetzungszeichenstil +@cindex moderne Versetzungszeichen +@cindex Stimmen, Versetzungszeichen für + +@funindex modern-voice + +Diese Regel wird für vielstimmige Noten benutzt, die sowohl von +unterschiedlichen Spielern für jede Stimme als auch von einem Spieler +für alle Stimmen benutzt. Versetzungszeichen werden für jede +Stimme gesetzt, aber sie @emph{werden} über die Stimme hinweg +aufgelöst innerhalb des selben Notensystems. Das @code{a} im letzten +Takt ist also aufgelöst, weil die vorigen Auflösung in einer anderen +Stimme stattgefunden hatte, und das @code{d} im unteren System ist +aufgelöst wegen eines Versetzungszeichens in einer anderen Stimme im +vorigen Takt: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice) + \musicB + } + >> +} +@end lilypond + +@cindex Versetzungszeichenstil, modern mit Warnung für Stimmen +@cindex Stimmen, Versetzungszeichenstil mit Warnung für Stimmen +@cindex moderner Versetzungszeichenstil mit Warnungen für Stimmen + +@funindex modern-voice-cautionary + +@item modern-voice-cautionary (modern mit Warnungen für einzelne Stimmen) + +Dieser Stil ist der gleiche wie @code{modern-voice}, nur dass hier +die zusätzlichen Versetzungszeichen (die nicht vom @code{voice}-Stil +gesetzt werden) als Warnungsversetzungszeichen gesetzt werden. +Obwohl alle Versetzungszeichen, die mit @code{default} gesetzt werden, +auch mit diesem Stil gesetzt werden, sind manche Warnungsversetzungszeichen. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item piano (Klavier) + +@cindex Versetzungszeichenstil, piano +@cindex Versetzungszeichen für Klavier +@cindex Klavier-Versetzungszeichenstil +@cindex Piano-Versetzungszeichenstil + +@funindex piano + +Dieser Stil orientiert sich an den Regeln im 20. Jahrhundert für die +Notation von Klaviermusik. Er ist sehr ähnlich mit dem modernen +Stil, aber Versetzungszeichen werden auch über Notensysteme hinweg +für die selbe Akkolade (@code{GrandStaff} oder @code{PianoStaff}) aufgelöst. + +Dieser Versetzungszeichenstil wirkt sich standardmäßig auf die gesamte +Akkolade (@code{GrandStaff} oder @code{PianoStaff}) aus. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + +@item piano-cautionary (Klavier mit Warnungen) + +@funindex piano-cautionary + +@cindex Versetzungszeichen, piano cautionary +@cindex Warnungsversetzungszeichen für Klavier +@cindex Klavier: Warnungsversetzungszeichen +@cindex Versetzungszeichenstil Klavier mit Warnungen + +Dieser Stil verhält sich wie @code{piano}, aber die zusätzlichen +Versetzungszeichen werden als Warnungen ausgegeben: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano-cautionary) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + + +@item neo-modern + +@funindex neo-modern + +@cindex neo-moderner Versetzungszeichenstil +@cindex Versetzungszeichenstil, neo-modern + +Dieser Stil richtet sich nach den Regeln für moderne Musik: +Versetzungszeichen werden mit im @code{modern}-Stil gesetzt, aber +sie werden nochmal gesetzt, wenn die gleiche Note später im selben +Takt auftritt -- außer die Note wird unmittelbar wiederholt. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-cautionary (neo-modern mit Warnungen) + +@funindex neo-modern-cautionary + +@cindex neo-modern-cautionary-Versetzungszeichenstil +@cindex Versetzungszeichenstil neo-modern mit Warnungen +@cindex Warnungsversetzungszeichen, neo-modern + +Dieser Stil ähnelt @code{neo-modern}, aber die zusätzlichen +Versetzungszeichen werden als Warnungen gesetzt. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-cautionary) + \musicB + } + >> +} +@end lilypond + + +@item neo-modern-voice (neo-modern für Stimmen) + +@funindex neo-modern-voice + +@cindex neo-moderner Versetzungszeichenstil pro Stimme +@cindex Versetzungszeichenstil, neo-modern-voice + +Diese Regel wird für für Versetzungszeichen in mehreren Stimmen +eingesetzt, wenn die Noten sowohl von Musikern gelesen werden, die +nur eine Stimme lesen, als auch von Musikern, die alle Stimmen +lesen. Versetzungszeichen werden für jede Stimme so wie mit der +@code{neo-modern}-Regel gesetzt, aber innerhalb des gesamten +Notensystems mit Auflösungszeichen versehen. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-voice-cautionary + +@funindex neo-modern-voice-cautionary + +@cindex neo-moderner Versetzungszeichenstil pro Stimme mit Warnungen +@cindex Versetzungszeichenstil, neo-modern-voice-cautionary + +Diese Regel ähnelt @code{neo-modern-voice}, aber die zusätzlichen +Versetzungszeichen werden hier als warnende Versetzungszeichen +gesetzt. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item dodecaphonic (Zwölftonmusik) + +@funindex dodecaphonic + +@cindex dodekaphoner Versetzungszeichenstil +@cindex Zwölftonmusik, Versetzungszeichenstil +@cindex Versetzungszeichenstil, Zwölftonmusik + +Dieser Stil orientiert sich an der Notation von sog. Zwölftonmusik, +der Stil wurde Anfang des 20. Jahrhunderts in Gebrauch genommen. +In diesem Stil erhält @emph{jede} Note ein Versetzungszeichen, wozu +auch Auflösungszeichen zählen. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'dodecaphonic) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'dodecaphonic) + \musicB + } + >> +} +@end lilypond + + +@item teaching (didaktisch) + +@funindex teaching + +@cindex teaching-Versetzungszeichenstil +@cindex Versetzungszeichenstil teaching +@cindex didaktischer Versetzungszeichenstil + +Dieser Stil ist für Lernende bestimmt: der Stil orientiert sich +am @code{modern}-Stil, aber die Alterationen, die sich durch die +Tonart ergeben, werden zusätzlich als Warnungsversetzungszeichen +gesetzt. Eine Ausnahme sind direkt wiederholte Noten. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicA + } + \context Staff = "down" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicB + } + >> +} +@end lilypond + + + +@item no-reset (nicht zurücksetzen) + +@funindex no-reset + +@cindex Versetzungszeichenstil, no reset +@cindex Versetzungszeichenstil: nicht zurücksetzen + +Das ist der gleiche Stil wie @code{default}, aber die Versetzungszeichen +dauern für @qq{immer} an, nicht nur im aktuellen Takt: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'no-reset) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'no-reset) + \musicB + } + >> +} +@end lilypond + +@item forget (vergessen) + +@funindex forget + +@cindex forget-Versetzungszeichenstil +@cindex Versetzungszeichenstil forget +@cindex Versetzungszeichenstil Vergessen + +Das ist das Gegenteil von @code{no-reset}: Versetzungszeichen +werden überhaupt nicht erinnert und folgerichtig werden alle +Versetzungszeichen entsprechend der Tonart gesetzt, unabhängig +vom Kontext der Noten. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'forget) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'forget) + \musicB + } + >> +} +@end lilypond +@end table + +@seealso +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{Accidental}, +@rinternals{Accidental_engraver}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{Staff}, +@rinternals{AccidentalSuggestion}, +@rinternals{AccidentalPlacement}, +@rinternals{accidental-suggestion-interface}. + + +@cindex Versetzungszeichen und gleichzeitige Noten +@cindex simultane Noten und Versetzungszeichen +@cindex Akkorde: Versetzungszeichen +@cindex gleichzeitige Noten: Versetzungszeichen +@cindex Versetzungszeichen in Akkorden + +@knownissues + +Gleichzeitig erklingende Noten werden bei der automatischen Bestimmung +der Versetzungszeichen nicht berücksichtigt: nur die vorige Note und +die Vorzeichen werden einbezogen. Man muss die Versetzungszeichen +mit@tie{}@code{!} oder@tie{}@code{?} schreiben, wenn gleichzeitig +unterschiedliche Alterationen vorkommen, wie etwa für @samp{}. + +Die warndenden Auflösungzeichen werden gesetzt, indem die vorangegangenen +Takte betrachtet werden. In der zweiten oder einer weiteren +Wiederholungsklammer erwartet man jedoch, dass die Auflösungszeichen sich +aus dem letzten @emph{gespielten} und nicht dem letzten @emph{gesetzten} +Takt ergeben. Im folgenden Beispiel bräuchte das @code{c} in der zweiten +Klammer kein Auflösungszeichen: + +@lilypond[quote] +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + c' + } +} +@end lilypond + +Die folgende Notlösung kann benutzt werden: Man definiert eine Funktion, +die den Versetzungszeichenstil kurzzeitig auf @code{forget} umschaltet: + +@lilypond[verbatim,quote] +forget = #(define-music-function (parser location music) (ly:music?) #{ + #(set-accidental-style 'forget) + $music + #(set-accidental-style 'modern) +#}) +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + \forget c' + } +} +@end lilypond + + +@node Tonumfang +@unnumberedsubsubsec Tonumfang +@translationof Ambitus + +@cindex Ambitus +@cindex Stimmumfang + +Der Begriff @notation{ambitus} (Pl. ambitus) beschreibt den +Stimmumfang einer Stimme. Er kann auch die Töne bedeuten, die +ein Musikinstrument zu spielen in der Lage ist. Ambitus werden +in Chorpartituren gesetzt, damit die Sänger schnell wissen, ob +sie die Stimme meistern können. + +Ambitus werden zu Beginn des Stückes nahe des ersten Schlüssels +notiert. Der Stimmumfang wird durch zwei Notenköpfe dargestellt, +die die tiefste und höchste Note der Stimme repräsentieren. +Versetzungszeichen werden nur gesetzt, wenn sie nicht durch die +Tonart definiert werden. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\relative c'' { + aes c e2 + cis,1 +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-ambitus-per-voice.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ambitus-with-multiple-voices.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-ambitus-gap.ly} + + +@seealso +Glossar: +@rglos{ambitus}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{Ambitus_engraver}, +@rinternals{Voice}, +@rinternals{Staff}, +@rinternals{Ambitus}, +@rinternals{AmbitusAccidental}, +@rinternals{AmbitusLine}, +@rinternals{AmbitusNoteHead}, +@rinternals{ambitus-interface}. + + +@knownissues + +Es gibt keine Kollisionskontrolle bei mehreren Ambitus in einem System. + + +@node Notenköpfe +@subsection Notenköpfe +@translationof Note heads + +Dieser Abschnitt zeigt, wie man Notenköpfe ändern kann. + +@menu +* Besondere Notenköpfe:: +* Easy-Notation-Notenköpfe:: +* Notenköpfe mit besonderen Formen:: +* Improvisation:: +@end menu + +@node Besondere Notenköpfe +@unnumberedsubsubsec Besondere Notenköpfe +@translationof Special note heads + +@cindex Notenköpfe, besondere +@cindex besondere Notenköpfe +@cindex Notenköpfe, Kreuz +@cindex Notenköpfe, Raute +@cindex Noten, parlato +@cindex Notenköpfe, Flageolett +@cindex Notenköpfe, Gitarre +@cindex Kreuznotenköpfe +@cindex Rautennotenköpfe +@cindex Parlato-Notenköpfe +@cindex Gitarrennotenköpfe +@cindex Flageolett-Notenköpfe +@cindex Stile, Notenköpfe + +@funindex cross + +Notenköpfe können verändert werden: + +@lilypond[verbatim,quote,relative=2] +c4 b +\override NoteHead #'style = #'cross +c4 b +\revert NoteHead #'style +a b +\override NoteHead #'style = #'harmonic +a b +\revert NoteHead #'style +c4 d e f +@end lilypond + +Für alle Notenkopfstile siehe @ref{Notenkopfstile} + +Der Kreuz-(@code{cross}) Stil wird mit unterschiedlichen +musikalischen Absichten eingesetzt. Die folgenden +vordefinierten Befehle verändern die Notenköpfe sowohl +in Notensystemen als auch in Tabulaturen und können +benutzt werden, um alle musikalischen Bedeutungen zu +notieren: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNotesOn + a b c4 b +\xNotesOff +c4 d +@end lilypond + +Die Form als musikalische Funktion dieses Befehls kann innerhalb +und außerhalb von Akkorden benutzt werden, um Notenköpfe mit Kreuzen +in normalen und Tabulatursystemen zu erstellen: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNote { e f } +c b < g \xNote c f > b +@end lilypond + +Als Synonym für @code{\xNote}, @code{\xNotesOn} und @code{\xNotesOff} +kann @code{\deadNote}, @code{\deadNotesOn} und @code{\deadNotesOff} +benutzt werden. Der Begriff @notation{dean note} (engl. tote Note) +wird regelmäßig von Gitaristen benutzt. + +Es gibt auch einen Kurzbefehl für die Rautenform, der nur innerhalb +von Akkorden benutzt werden kann: + +@lilypond[verbatim,quote,relative=2] +2 4 +@end lilypond + +@predefined +@code{\harmonic}, +@code{\xNotesOn}, +@code{\xNotesOff}, +@code{\xNote}. +@endpredefined + +@seealso +Schnipsel: +@rlsr{Pitches}. + +Notationsreferenz: +@ref{Notenkopfstile}, +@ref{Noten mit Akkorden} +@ref{Flageolett und gedämpfte Noten}. + +Referenz der Interna: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{Ledger_line_engraver}, +@rinternals{NoteHead}, +@rinternals{LedgerLineSpanner}, +@rinternals{note-head-interface}, +@rinternals{ledger-line-spanner-interface}. + + +@node Easy-Notation-Notenköpfe +@unnumberedsubsubsec Easy-Notation-Notenköpfe +@translationof Easy notation note heads + +@cindex Notenköpfe, Übung +@cindex Notenköpfe zum Lernen +@cindex Übungszwecke, Notenköpfe +@cindex Noteknöpfe, einfache Notation +@cindex pädagogische Notenköpfe +@cindex Anfänger, Notenlernen +@cindex Notenköpfe für Anfänger + +@funindex \easyHeadsOn +@funindex easyHeadsOn +@funindex \easyHeadsOff +@funindex easyHeadsOff + +Die @qq{einfachen Notenköpfe} haben die Bezeichnung der Note +im Kopf gedruckt. Das wird eingesetzt, um die Notation beizubringen. +Damit die Buchstaben noch lesbar sind, müssen sie sehr groß +gesetzt werden. Wie man eine größere Schriftart einstellt, findet +sich in @ref{Die Notensystemgröße einstellen}. + +@lilypond[verbatim,quote] +#(set-global-staff-size 26) +\relative c' { + \easyHeadsOn + c2 e4 f + g1 + \easyHeadsOff + c,1 +} +@end lilypond + +@funindex \easyHeadsOn +@funindex \easyHeadsOff + +@predefined +@code{\easyHeadsOn}, +@code{\easyHeadsOff}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{numbers-as-easy-note-heads.ly} + +@seealso +Notationsreferenz: +@ref{Die Notensystemgröße einstellen}. + +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Notenköpfe mit besonderen Formen +@unnumberedsubsubsec Notenköpfe mit besonderen Formen +@translationof Shape note heads + +@cindex Notenköpfe, Formen +@cindex Notation, Aiken +@cindex Notenköpfe, sacred harp +@cindex Form-Notenköpfe +@cindex Aiken-Notenköpfe +@cindex sacred harp-Notenköpfe +@cindex Southern-Harmony-Notenköpfe +@cindex Funk-Formnotenköpfe +@cindex Notenköpfe, Funk +@cindex Notenköpfe, Harmonica Sacra +@cindex Harmonica Sacra-Notenköpfe +@cindex Christian Harmony-Notenköpfe +@cindex Notenköpfe, Christian Harmony +@cindex Walker-Formnotenköpfe +@cindex Notenköpfe, Walker + +@funindex \aikenHeads +@funindex \sacredHarpHeads +@funindex aikenHeads +@funindex sacredHarpHeads +@funindex \southernHarmonyHeads +@funindex southernHarmonyHeads +@funindex \funkHeads +@funindex funkHeads +@funindex \walkerHeads +@funindex walkerHeads + +In dieser Notation haben die Notenköpfe eine Form, die ihrer +harmonischen Funktion innerhalb der Tonleiter entspricht. Die +Notation war sehr beliebt in amerikanischen Liederbüchern des +19. Jahrhunderts. Auf diese Weise können die Formen +Sacred Harp, Southern Harmony, Funk (Harmonica Sacra), Walker +und Aiken (Christian Harmony) benutzt werden: + +@lilypond[verbatim,quote,relative=2] +\aikenHeads +c, d e f g2 a b1 c \break +\sacredHarpHeads +c,4 d e f g2 a b1 c \break +\southernHarmonyHeads +c,4 d e f g2 a b1 c \break +\funkHeads +c,4 d e f g2 a b1 c \break +\walkerHeads +c,4 d e f g2 a b1 c \break +@end lilypond + +@funindex \key +@funindex key +@funindex \aikenHeadsMinor +@funindex aikenHeadsMinor +@funindex \sacredHarpHeadsMinor +@funindex sacredHarpHeadsMinor +@funindex \southernHarmonyHeadsMinor +@funindex southernHarmonyHeadsMinor +@funindex \funkHeadsMinor +@funindex funkHeadsMinor +@funindex \walkerHeadsMinor +@funindex walkerHeadsMinor + +Die unterschiedlichen Formen richten sich nach der Stufe in der +Skala, wobei der Grundton der Skala aus dem @code{\key}-Befehl +entnommen wird. Wenn man eine Moll-Skala benutzt, ergibt sich +die Form der Notenköpfe aus der parallelen Dur-Tonleiter: + +@lilypond[verbatim,quote,relative=2] +\key a \minor +\aikenHeads +a b c d e2 f g1 a \break +\aikenHeadsMinor +a,4 b c d e2 f g1 a \break +\sacredHarpHeadsMinor +a,2 b c d \break +\southernHarmonyHeadsMinor +a2 b c d \break +\funkHeadsMinor +a2 b c d \break +\walkerHeadsMinor +a2 b c d \break +@end lilypond + +@predefined +@code{\aikenHeads}, +@code{\aikenHeadsMinor}, +@code{\funkHeads}, +@code{\funkHeadsMinor}, +@code{\sacredHarpHeads}, +@code{\sacredHarpHeadsMinor}, +@code{\southernHarmonyHeads}, +@code{\southernHarmonyHeadsMinor}, +@code{\walkerHeads}, +@code{\walkerHeadsMinor}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} + + +Alle Notenkopfstile finden sich in @ref{Notenkopfstile}. + +@seealso +Schnipsel: +@rlsr{Pitches}. + +Notationsreferenz: +@ref{Notenkopfstile}. + +Referenz der Interna: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Improvisation +@unnumberedsubsubsec Improvisation +@translationof Improvisation + +@cindex Improvisation +@cindex schräge Notenköpfe +@cindex Notenköpfe, Improvisation +@cindex Strichnotenköpfe +@cindex Striche: Notenköpfe + +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +Improvisation wird manchmal angezeigt, indem schräge Notenköpfe +gesetzt werden, wenn der Spieler eine beliebige Tonhöhe wählen kann +aber den vorgegebenen Rhythmus spielen soll. Sie können wie folgt +benutzt werden: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { + \consists "Pitch_squash_engraver" +} { + e8 e g a a16( bes) a8 g + \improvisationOn + e8 ~ + e2 ~ e8 f4 f8 ~ + f2 + \improvisationOff + a16( bes) a8 g e +} +@end lilypond + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + +@seealso +Schnipsel: +@rlsr{Pitches}. + +Referenz der Interna: +@rinternals{Pitch_squash_engraver}, +@rinternals{Voice}, +@rinternals{RhythmicStaff}. diff --git a/Documentation/de/notation/repeats.itely b/Documentation/de/notation/repeats.itely new file mode 100644 index 0000000000..44cc2e5d20 --- /dev/null +++ b/Documentation/de/notation/repeats.itely @@ -0,0 +1,738 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + +@node Wiederholungszeichen +@section Wiederholungszeichen +@translationof Repeats + +@lilypondfile[quote]{repeats-headword.ly} + +Wiederholung ist ein zentrales Konzept in der Musik, und es gibt eine +ganze Vielzahl von Notationsmöglichkeiten für Wiederholungen. +LilyPond unterstützt folgende Arten von Wiederholungen: + +@table @code +@item volta (Wiederholungsklammer) +Die wiederholte Musik wird nicht geschrieben, sondern zwischen +zwei Wiederholungstaktstrichen eingeschlossen. Wenn die Wiederholung +am Anfang eines Stückes beginnt, wird nur am Ende der Wiederholung +eine Wiederholungstaktlinie gesetzt. Alternative Schlüsse (Volta) +werden von links nach rechts mit Klammern gesetzt. Das ist die +Standardnotationspraxis für Wiederholungen mit alternativen Schlüssen. + +@item unfold (aufklappen) +Die wiederholte Musik wird ausgeschrieben, so oft, wie es durch +@code{@var{Wiederholungszähler}} definiert wird. Das erspart Arbeit, +wenn repetitive Musik notiert wird. + +@item percent (Prozent-Wiederholung) +Das sind Noten- oder Taktwiederholungen, sie sehen aus wie ein +Schrägstrich bzw. wie ein Prozentzeichen. + +@item tremolo +Das wird benutzt, um Tremolo-Wiederholungen am Notenhals zu notieren. + +@end table + + +@menu +* Lange Wiederholungen:: +* Kurze Wiederholungen:: +@end menu + +@node Lange Wiederholungen +@subsection Lange Wiederholungen +@translationof Long repeats + +@menu +* Normale Wiederholungen:: +* Manuelle Wiederholungszeichen:: +* Ausgeschriebene Wiederholungen:: +@end menu + + +@cindex Wiederholungen +@cindex Volta +@cindex Prima volta +@cindex Seconda volta +@cindex normale Wiederholung +@cindex Wiederholung mit alternativem Schluss +@cindex alternativer Schluss +@cindex Schluss, alternativer in Wiederholung +@cindex Klammer, erste (Wiederholung) +@cindex erste Klammer +@cindex zweite Klammer +@funindex \repeat +@funindex \alternative +@funindex \partial + +@node Normale Wiederholungen +@unnumberedsubsubsec Normale Wiederholungen +@translationof Normal repeats + +Die Syntax für normale Wiederholungen ist + +@example +\repeat @var{Typ} @var{Wiederholungszähler} @var{musikAusdr} +@end example + +@noindent +wobei @code{@var{musikAusdr}} ein musikalischer Ausdruck ist. + +Wiederholung ohne alternativen Schluß: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f } +c2 d +\repeat volta 2 { d4 e f g } +@end lilypond + +Alternative +Schlüsse können mit @code{\alternative} gesetzt werden. Damit die +alternativen Schlüsse von den wiederholten Noten abgegrenzt werden, +müssen sie in geschweiften Klammern zusammengefasst werden. + +@example +\repeat volta @var{Wiederholungszähler} @var{musikAusdr} +\alternative @{ + @{ @var{musikAusdr} @} +@} +@end example + +@noindent +wobei @code{@var{musikAusdr}} ein musikalischer Ausdruck ist. + +Wenn +es mehr Wiederholungen gibt, als Alternativen angegeben sind, erhalten +die ersten Wiederholungen den ersten Schluss. + +Eine einfache Wiederholung mit einer Alternative: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +Eine einfache Wiederholung mit mehr als einer Alternative: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 4 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +Mehrfache Wiederholungen mit mehr als einer Alternative: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 3 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } + { a2 g | } +} +c1 +@end lilypond + +@warning{Wenn es zwei oder mehr Alternativen gibt, darf nicht zwischen +der schließenden Klammer der einen und der öffnenden Klammer der anderen +Wiederholung stehen, weil sonst nicht die erwartete Anzahl von Endungen +produziert wird.} + +@warning{Wenn man @code{@bs{}relative} innerhalb von @code{@bs{}repeat} +notiert, ohne den @code{Voice}-Kontext explizit zu beginnen, erscheinen +zusätzliche (ungewollte) Systeme. Sie auch @rprogram{Ein zusätzliches System erscheint}.} + + +@cindex Wiederholung mit Auftakt +@cindex Auftakt in Wiederholung + +@funindex \partial + +Wenn eine Wiederholung mitten in einem Takt beginnt und keine +Alternativen hat, fällt normalerweise auch das Ende der Wiederholung +mitten in einen Takt, sodass beide unvollständigen Takt einen +vollständigen Takt ergeben. In diesem Fall bezeichnen die +Wiederholungsstriche keine richtigen Taktstriche. Benutzen Sie +nicht @code{\partial}-Befehle oder Taktüberprüfung, wo die +Wiederholungslinien gesetzt werden: + +@lilypond[verbatim,quote,relative=1] +% no \partial here +c4 e g % no bar check here +% no \partial here +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +Ähnlich ist es, wenn eine Wiederholung mit einem Auftakt beginnt und +keine Alternativen hat. In diesem Fall muss man aber den +@code{\partial}-Befehl zu Beginn der Partitur setzen: + +@lilypond[verbatim,quote,relative=1] +\partial 4 % required +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +Wenn alternative Endungen zu einer Wiederholung hinzugefügt werden, +die mit einem Auftakt beginnt, muss die @code{Timing.measureLength}-Eigenschaft +manuell gesetzt werden, und an folgenden Stellen: + +@itemize +@item +am Beginn eines unvollständigen Taktes innerhalb der +@code{\alternative}-Umgebung, die normalerweise am Ende +jeder Alternative auftreten, außer (in den meisten Fällen) in +der letzten. + +@item +zu Beginn jeder Alternative außer der ersten. +@end itemize + +@lilypond[verbatim,quote,relative=1] +\partial 4 +\repeat volta 2 { e4 | c2 e | } +\alternative { + { + f2 d | + \set Timing.measureLength = #(ly:make-moment 3 4) + g4 g g % optional bar check is allowed here + } + { + \set Timing.measureLength = #(ly:make-moment 4 4) + a2 a | + } +} +g1 | +@end lilypond + +Die @code{measureLength}-Eigenschaft ist beschrieben in +@ref{Verwaltung der Zeiteinheiten}. + +@cindex Wiederholungen mit Überbindung +@cindex Alternative Schlüsse mit Bindebogen +@cindex Überbindung in Wiederholung +@cindex Bindebogen in Wiederholung +@cindex Bindebogen in alternativem Schluss +@funindex \repeatTie + +Bindebögen können auch an eine zweite Klammer angefügt werden: + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat volta 2 { c4 d e f~ } +\alternative { + { f2 d } + { f2\repeatTie f, } +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{shortening-volta-brackets.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-volta-brackets-to-additional-staves.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-double-repeat-default-for-volte.ly} + +@seealso +Glossar: +@rglos{repeat}, +@rglos{volta}. + +Notationsreferenz: +@ref{Taktstriche}, +@ref{Umgebungs-Plugins verändern}, +@ref{Verwaltung der Zeiteinheiten}. + +Schnipsel: +@rlsr{Repeats}. + +Referenz der Interna: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + +@knownissues + +@cindex verschachtelte Wiederholung +@cindex Wiederholung, verschachtelt +@cindex Wiederholung und Zählzeit +@cindex Zählzeit und Wiederholung +@cindex Taktposition und Wiederholung +@cindex Wiederholung und Bindebogen +@cindex Bindebogen und Wiederholung +@cindex Wiederholung, mehrdeutig + +Bindebögen, die von einer @code{\repeat}-Umgebung in eine +@code{\alternative}-Umgebung ragen, funktionieren nur in der +ersten Klammer. Bindebögen können auch nicht von der Ende einer +Wiederholungsklammer auf den Anfang der Wiederholung +verweisen. + +Wenn eine Wiederholung innerhalt eines unvollständigen Taktes +beginnt und eine @code{\alternative}-Umgebung mit einer +Veränderung von @code{measureLength} enghält, führt +die Verwendung von @code{\unfoldRepeats} zu falsch gesetzten +Taktstrichen und Taktüberprüfungswarnungen. + +Eine ineinandergeschachtelte Wiederholung wie + +@example +\repeat @dots{} +\repeat @dots{} +\alternative +@end example + +@noindent +ist mehrdeutig, weil nicht klar ist, zu welchem @code{\repeat}-Abschnitt +die @code{\alternative}-Endung gehört. Diese Mehrdeutigkeit wird von +LilyPond aufgelöst, indem die alternative Endung immer zu der innersten +Wiederholung gehört. Um Klarheit zu schaffen, bietet es sich an, in solchen +Situationen Klammern zu benutzen. + + +@node Manuelle Wiederholungszeichen +@unnumberedsubsubsec Manuelle Wiederholungszeichen +@translationof Manual repeat marks + +@cindex manuelle Wiederholungszeichen +@cindex Wiederholung, manuell +@cindex Beginn von Wiederholung +@cindex Wiederholung, Beginn +@cindex Wiederholung, Ende +@cindex Ende von Wiederholung +@cindex Anzahl der Wiederholung, ändern +@cindex Wiederholungstaktlinie +@cindex Taktlinie, Wiederholung +@cindex Voltaklammer, ändern +@cindex Wiederholung, Voltaklammer +@cindex Wiederholung, alternative Schlüsse +@cindex Klammer, Wiederholung +@funindex repeatCommands +@funindex start-repeat + +@warning{Diese Methoden werden nur verwendet, um ungewöhnliche +Wiederholungskonstruktionen darzustellen und können sich unerwünscht +verhalten. In den meisten Fällen sollten Wiederholungen mit dem +Befehl @code{@bs{}repeat} erstellt werden oder indem die entsprechenden +Taktstriche eingegeben werden. Mehr Information in @ref{Taktstriche}.} + +Die Eigenschaft @code{repeatCommands} kann verwendet werden, um das +Aussehen der Wiederholungen zu beeinflussen. Ihr Argument ist eine +Scheme-Liste an Wiederholungsbefehlen. + +@table @code +@item start-repeat +Setzt eine @code{|:} Taktlinie. + +@lilypond[verbatim,quote,relative=2] +c1 +\set Score.repeatCommands = #'(start-repeat) +d4 e f g +c1 +@end lilypond + +Der Notensatzpraxis folgend werden Wiederholungstaktstriche nicht zu +Beginn eines Stückes gesetzt. + +@item end-repeat +Setzt eine @code{:|} Taktlinie. + +@lilypond[verbatim,quote,relative=2] +c1 +d4 e f g +\set Score.repeatCommands = #'(end-repeat) +c1 +@end lilypond + +@item (volta @var{Zahl}) ... (volta #f) +Setzt eine Volta-Klammer mit der Beschriftung @var{Nummer}. Die +Volta-Klammer muss explizit beendet werden, sonst wird sie nicht +ausgegeben. + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2")) +g4 a g a +\set Score.repeatCommands = #'((volta #f)) +c1 +@end lilypond + +@end table + +Mehrfache Wiederholungszeichen können an der selben Stelle vorkommen: + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2, 5") end-repeat) +g4 a g a +c1 +\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) +b1 +\set Score.repeatCommands = #'((volta #f)) +@end lilypond + +@cindex Volta-Klammer mit Text +@cindex Text in Voltaklammer +@cindex Wiederholungsklammer mit Text +@cindex Klammer, Wiederholung mit Text + +Text kann auch in der Volta-Klammer gesetzt werden. Der Text kann +aus Zahlen oder einer Zahl oder einer Textbeschriftung bestehen, +siehe @ref{Text formatieren}. Die einfachste Art Text zu benutzen +ist, die Beschriftung zuerst zu definieren und dann die Beschriftung +in einer Scheme-Liste einzufügen. + +@lilypond[verbatim,quote] +voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } +\relative c'' { + c1 + \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) + c4 b d e + \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) + f1 + \set Score.repeatCommands = #'((volta #f)) +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} + + +@seealso +Notationsreferenz: +@ref{Taktstriche}, +@ref{Text formatieren}. + +Schnipsel: +@rlsr{Repeats}. + +Referenz der Interna: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}. + + +@node Ausgeschriebene Wiederholungen +@unnumberedsubsubsec Ausgeschriebene Wiederholungen +@translationof Written-out repeats + +@cindex ausgeschriebene Wiederholungen +@cindex wiederholte Musik +@cindex Wiederholungen, ausgeschrieben +@cindex repetitive Musik +@cindex Wiederholung, aufklappen +@cindex Noten wiederholt schreiben +@cindex Aufklappen von wiederholten Noten +@cindex alternative Schlüsse in ausgeschriebenen Wiederholungen +@funindex unfold + +Mit dem @code{unfold}-Befehl können Wiederholungen eingesetzt werden, +um repetitive Musik zu notieren. Die Syntax ist + +@example +\repeat unfold @var{Wiederholungszähler} @var{musikAusdr} +@end example + +@noindent +wobei @code{@var{musikAusdr}} ein musikalischer Ausdruck ist und +@code{@var{Wiederholungszähler}} die Anzahl bezeichnet, mit der +@code{@var{musikAusdr}} wiederholt wird. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +c1 +@end lilypond + +Repititive Wiederholungen können auch mit mehreren Klammern +notiert werden: + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } +} +c1 +@end lilypond + +Wenn es mehr Wiederholungen als Alternativen gibt, wird die erste +Alternative so oft eingesetzt, bis sich zusammen mit den +restlichen Alternativen die Gesamtanzahl der Wiederholungen +ergeben. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 4 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } + } +c1 +@end lilypond + +Wenn es mehr Alternativen als Wiederholungen gibt, werden die +ersten Alternativen ausgegeben und die restlichen Alternativen +ignoriert. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } +} +c1 +@end lilypond + +Es ist auch möglich, mehrere @code{unfold}-Wiederholungen (allerdings +ohne Alternativen) ineinander zu verschachteln: + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { + \repeat unfold 2 { c4 d e f } + \alternative { + { c2 g' } + { c,2 b } + } +} +c1 +@end lilypond + +@warning{Wenn man @code{@bs{}relative} innerhalb von @code{@bs{}repeat} +notiert, ohne den @code{Voice}-Kontext explizit zu beginnen, erscheinen +zusätzliche (ungewollte) Systeme. Sie auch @rprogram{Ein zusätzliches System erscheint}.} + + +@seealso +Schnipsel: +@rlsr{Repeats}. + +Referenz der Interna: +@rinternals{RepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@node Kurze Wiederholungen +@subsection Kurze Wiederholungen +@translationof Short repeats + +Dieser Abschnitt zeigt, wie man kurze Wiederholungen notiert. +Kurze Wiederholungen haben zwei Formen: Wiederholungen +von einer Note bis zu zwei Takten, die mit Schrägstrichen oder +Prozentzeichen dargestellt werden, und Tremolos. + +@menu +* Prozent-Wiederholungen:: +* Tremolo-Wiederholung:: +@end menu + +@node Prozent-Wiederholungen +@unnumberedsubsubsec Prozent-Wiederholungen +@translationof Percent repeats + +@cindex Prozent-Wiederholungen +@cindex Taktweise Wiederholungen +@cindex Wiederholung, kurz +@cindex Wiederholung, taktweise +@cindex Wiederholung, Prozent +@funindex \repeat percent +@funindex percent + +Kurze wiederholte Muster werden einmal gesetzt und das wiederholte +Muster wird durch ein besonderes Zeichen ersetzt. + +Die Syntax lautet: + +@example +\repeat percent @var{Wiederholungszahl} @var{musikAusdr} +@end example + +@noindent +wobei @code{@var{musikAusdr}} ein musikalischer Ausdruck ist. + +Muster, die kürzer als ein Takt sind, werden mit Schrägstrichen +ersetzt: + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c128 d e f } +\repeat percent 4 { c64 d e f } +\repeat percent 5 { c32 d e f } +\repeat percent 4 { c16 d e f } +\repeat percent 4 { c8 d } +\repeat percent 4 { c4 } +\repeat percent 2 { c2 } +@end lilypond + +Muster von einem oder zwei Takten Dauer werden mit prozentartigen +Symbolen ersetzt: + +@lilypond[verbatim,quote,relative=2] +\repeat percent 2 { c4 d e f } +\repeat percent 2 { c2 d } +\repeat percent 2 { c1 } +@end lilypond + +@lilypond[verbatim,quote,relative=2] +\repeat percent 3 { c4 d e f | c2 g' } +@end lilypond + +Muster, die kürzer als ein Takt sind, aber unterschiedliche Dauern beinhalten, +benützten ein doppeltes Prozent-Symbol. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c8. 16 } +\repeat percent 2 { \times 2/3 { r8 c d } e4 } +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-counter.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-count-visibility.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{isolated-percent-repeats.ly} + +@seealso +Glossar: +@rglos{percent repeat}, +@rglos{simile}. + +Schnipsel: +@rlsr{Repeats}. + +Referenz der Interna: +@rinternals{RepeatSlash}, +@rinternals{RepeatSlashEvent}, +@rinternals{DoubleRepeatSlash}, +@rinternals{PercentRepeat}, +@rinternals{PercentRepeatCounter}, +@rinternals{PercentRepeatedMusic}, +@rinternals{Percent_repeat_engraver}, +@rinternals{DoublePercentEvent}, +@rinternals{DoublePercentRepeat}, +@rinternals{DoublePercentRepeatCounter}, +@rinternals{Double_percent_repeat_engraver}, +@rinternals{Slash_repeat_engraver}. + + +@node Tremolo-Wiederholung +@unnumberedsubsubsec Tremolo-Wiederholung +@translationof Tremolo repeats + +@cindex Tremolobalken +@cindex Tremolo +@cindex Wiederholung, Tremolo +@funindex \repeat tremolo +@funindex tremolo + +Tremolos können in zwei Arten notiert werden: als Wechsel zwischen +zwei Noten oder Akkorden oder als schnelle Wiederholung einer einzigen +Note. Tremolos, die als Wechsel realisiert werden, werden dargestellt, +indem Balken zwischen die Noten gesetzt werden, Tremolos, die +eine schnelle Wiederholung darstellen, haben Balken oder Schrägstriche +am Hals einer einzigen Note. + +Um Tremolobalken zwischen Noten zu setzen, kann der @code{\repeat}-Befehl +mit dem Tremolo-Stil benutzt werden: + +@lilypond[quote,verbatim,relative=2] +\repeat tremolo 8 { c16 d } +\repeat tremolo 6 { c16 d } +\repeat tremolo 2 { c16 d } +@end lilypond + +Die @code{\repeat tremolo}-Syntax braucht genau zwei Noten innerhalb +der geschweiften Klammern, und die Anzahl der Wiederholungen muss +einem Wert entsprechen, der mit einfachen oder punktierten Noten +ausgedrückt werden kann. @code{\repeat tremolo 7} funktioniert und +setzt Tremolo für die Dauer einer Doppeltpunktierten, aber +@code{\repeat tremolo 9} funktioniert nicht. + +Die Dauer des Tremolos entspricht der Dauer der Wertes in Klammern, +multipliziert mit der Zahl der Wiederholungen: @code{\repeat tremolo +8 @{ c16 d16 @}} ergibt ein Tremolo für eine Ganze, notiert als zwei +Ganze, die zwei Tremolobalken zwischen sich haben. + +Es gibt zwei Möglichkeiten, ein Tremolozeichen zu einer einzelnen +Noten hinzuzufügen. Die @code{\repeat tremolo}-Syntax kann hier auch +benutzt werden; in diesem Fall wird die Note allerdings nicht +eingeklammert: + +@lilypond[quote,verbatim,ragged-right] +\repeat tremolo 4 c'16 +@end lilypond + +@cindex Tremolozeichen + +@funindex tremoloFlags +@funindex : + +Die gleiche Darstellung wird erreicht, indem nach der Note +@code{:@var{Zahl}} geschrieben wird. Die Zahl zeigt +die Dauer der Unterteilung an, und sie muss mindestens den +Wert 8 haben. Ein Wert von 8 ergibt einen Balken durch den +Notenhals. Wenn die Zahl ausgelassen wird, wird der letzte +benutzte Wert eingesetzt (gespeichert in @code{tremoloFlags}): + +@lilypond[quote,verbatim,relative=2] +c2:8 c:32 +c: c: +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{cross-staff-tremolos.ly} + +@seealso +Schnipsel: +@rlsr{Repeats}. + +@cindex Tremolo über Systeme +@cindex Systeme, Tremolo zwischen +@cindex Zwischensystem-Tremolo diff --git a/Documentation/de/notation/rhythms.itely b/Documentation/de/notation/rhythms.itely new file mode 100644 index 0000000000..06323b8554 --- /dev/null +++ b/Documentation/de/notation/rhythms.itely @@ -0,0 +1,3506 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + +@node Rhythmus +@section Rhythmus +@translationof Rhythms + +@lilypondfile[quote]{rhythms-headword.ly} + +Dieser Abschnitt erklärt die Eingabe von Rhythmen, Pausen, +Dauern, Bebalkung und Takten. + +@menu +* Rhythmen eingeben:: +* Pausen eingeben:: +* Rhythmen anzeigen lassen:: +* Balken:: +* Takte:: +* Besondere rhythmische Fragen:: +@end menu + + +@node Rhythmen eingeben +@subsection Rhythmen eingeben +@translationof Writing rhythms + +@menu +* Tondauern:: +* Andere rhythmische Aufteilungen:: +* Tondauern skalieren:: +* Bindebögen:: +@end menu + +@node Tondauern +@unnumberedsubsubsec Tondauern +@translationof Durations + +@cindex Dauer +@cindex Notenlänge +@cindex Notendauer, Standard +@cindex Standard Notendauer + + +@funindex \longa +@funindex \breve +@funindex \maxima +@funindex longa +@funindex breve +@funindex maxima + +Notenlängen (Dauern) werden durch +Zahlen und Punkte notiert: Dauern werden als reziproke Werte geschrieben. +Zum Beispiel wird eine Viertelnote mit @code{4} notiert (weil sie eine +1/4-Note ist), eine halbe Note mit @code{2} (weil sie eine 1/2-Note ist). +Noten, die länger als eine Ganze sind, müssen mit @code{\longa} +(für die Longa, also vier Ganze) und +@code{\breve} (für die Brevis, auch Doppelganze genannt) notiert werden. +Notendauern bis hin zu 128steln sind unterstützt. Kürzere Notenwerte können +auch notiert werden, können allerdings nur als Noten mit Balken auftreten. + +@c Two 64th notes are needed to obtain beams +@lilypond[quote,verbatim,relative=2] +\time 8/1 +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +Hier die selben Notendauern ohne die Balken. + +@c not strictly "writing rhythms"; more of a "displaying" thing, +@c but it's ok here. -gp +@lilypond[quote,verbatim,relative=2] +\time 8/1 +\autoBeamOff +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +Eine Note mit der vierfachen Dauer einer Brevis kann mit dem +Befehl @code{\maxima} eingegeben werden, aber ihre Darstellung +ist nur für die Alte Musiknotation unterstützt. Zu Einzelheiten +siehe @ref{Notation von alter Musik}. + +@cindex Dauer, Standard +@cindex Standardnotendauer +@cindex Notendauer, Standard + +Wenn die Dauer hinter einer Notenbezeichnung nicht angegeben ist, +wird die Dauer der vorhergehenden Note eingesetzt. Der Standardwert +für die erste Note ist eine Viertel. + +@lilypond[quote,verbatim,relative=2] +a a a2 a a4 a a1 a +@end lilypond + +@funindex . + +@cindex Punktierung +@cindex Noten, punktiert +@cindex Doppelpunktierung +@cindex Noten, doppelpunktiert + +Um punktierte Notendauern zu erhalten, muss einfach nur ein Punkt +(@code{.}) hinter die Zahl der Dauer gesetzt werden. Zwei Punkte +ergeben eine doppelte Punktierung, usw. + +@lilypond[quote,verbatim,relative=2] +a4 b c4. b8 a4. b4.. c8. +@end lilypond + +Manche Notenlängen können nicht mit binären Dauern und Punkten +dargestellt werden, sie können nur erreicht werden, indem man +Noten überbindet. Für Einzelheiten siehe @ref{Bindebögen}. + +Wie den Silben von Gesangstext eigene Dauern zugewiesen werden +können und wie man sie an den Noten ausrichtet ist erklärt in +@ref{Notation von Gesang}. + +Optional können Noten streng proportional nach ihrer exakten +Dauer gesetzt werden. Zu Einzelheiten hierzu und weiteren +Einstellungen für proportionale Notation siehe +@ref{Proportionale Notation}. + +@funindex \dotsUp +@funindex \dotsDown +@funindex \dotsNeutral +@funindex dotsUp +@funindex dotsDown +@funindex dotsNeutral + +Punkte werden normalerweise nach oben verschoben, damit sie die Notenlinien +nicht berühren. Punkte können manuelle über oder unter dem +Notensystem gesetzt werden, zu Einzelheiten +siehe @ref{Richtung und Platzierung}. + +@predefined +@code{\autoBeamOn}, +@code{\autoBeamOff}, +@code{\dotsUp}, +@code{\dotsDown}, +@code{\dotsNeutral}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-number-of-augmentation-dots-per-note.ly} + +@seealso +Glossar: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}, +@rglos{note value}, +@rglos{Duration names notes and rests}. + +Notationsreferenz: +@ref{Automatische Balken}, +@ref{Bindebögen}, +@ref{Hälse}, +@ref{Rhythmen eingeben}, +@ref{Pausen eingeben}, +@ref{Notation von Gesang}, +@ref{Notation von alter Musik}, +@ref{Proportionale Notation}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Dots}, +@rinternals{DotColumn}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +Es gibt keine grundlegende Grenze für die Dauer von Pausen +(sowohl kürzer als auch länger), aber die Anzahl an Symbolen +ist begrenzt: Einzelne Pausen können von 128stel bis zur +Maxima (8 Ganze) gesetzt werden. + + +@node Andere rhythmische Aufteilungen +@unnumberedsubsubsec Andere rhythmische Aufteilungen +@translationof Tuplets + +@cindex N-tolen +@cindex Triolen +@cindex Rhythmische Aufteilungen + +@funindex times +@funindex \times + +Triolen und andere rhythmische Aufteilungen werden aus einem musikalischen +Ausdruck erstellt, indem dessen Tondauern mit einem Bruch multipliziert werden. + +@example +\times @var{Bruch} @var{musikalischer Ausdruck} +@end example + +@noindent +Die Dauer eines @var{musikalischen Ausdrucks} wird mit dem Bruch multipliziert. +Der Nenner des Bruchs wird über (oder unter) den Noten ausgegeben, +optional mit einer eckigen Klammer, die die Noten einfasst. +Die üblichste Aufteilung ist die +Triole, in welcher drei Noten die Länge von zwei haben, der Wert jeder +einzelnen Note ist also 2/3 der notierten Länge. + +@lilypond[quote,verbatim,relative=2] +a2 \times 2/3 { b4 b b } +c4 c \times 2/3 { b4 a g } +@end lilypond + +@cindex Triolenklammer, Platzierung + +@funindex \tupletUp +@funindex \tupletDown +@funindex \tupletNeutral +@funindex tupletUp +@funindex tupletDown +@funindex tupletNeutral + +Triolenklammern können manuell über oder unter dem Notensystem +ausgegeben werden, siehe @ref{Richtung und Platzierung}. + + +N-tolen können ineinander geschachtelt werden: + +@lilypond[quote,verbatim,relative=2] +\autoBeamOff +c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 +@end lilypond + +Wenn man die Eigenschaften von N-tolen verändern will, die zum +selben musikalischen Zeitpunkt beginnen, muss @code{\tweak} +eingesetzt werden. + +Um die Dauern von Noten zu ändern, ohne die N-tolen-Klammern +zu setzen, siehe @ref{Tondauern skalieren}. + +@predefined +@code{\tupletUp}, +@code{\tupletDown}, +@code{\tupletNeutral}. +@endpredefined + +@snippets + +@cindex N-tole, Formatierung +@cindex Triole, Formatierung +@cindex Formatierung von Triolen + +@funindex tupletNumberFormatFunction +@funindex tupletSpannerDuration + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{entering-several-tuplets-using-only-one--times-command.ly} + +@cindex Triolennummer, Änderung + +@funindex TupletNumber + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-tuplet-number.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{non-default-tuplet-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-tuplet-bracket-visibility.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{permitting-line-breaks-within-beamed-tuplets.ly} + +@seealso +Glossar: +@rglos{triplet}, +@rglos{tuplet}, +@rglos{polymetric}. + +Handbuch zum Lernen: +@rlearning{Optimierungsmethoden}. + +Notationrreferenz: +@ref{Verwaltung der Zeiteinheiten}, +@ref{Tondauern skalieren}, +@ref{Der tweak-Befehl}, +@ref{Polymetrische Notation}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{TupletBracket}, +@rinternals{TupletNumber}, +@rinternals{TimeScaledMusic}. + +@cindex Verzierung innerhalb von rhythmischer Kombination +@cindex Stichnoten innerhalb von rhythmischer Kombination +@cindex Verzierung innerhalb von Triole + +@knownissues +Verzierungen können innerhalb von Triolenklammern gesetzt werden, +@emph{außer} wenn ein System mit einer Verzierung beginnt, die von +einer N-tole gefolgt wird. In diesem besonderen Fall müssen die +Verzierungen vor dem @code{\times}-Befehl gesetzt werden, damit sich +keine Fehler ergeben. + +@cindex Tempobezeichnungen innerhalb von N-tolen-Klammern + +Wenn man eine N-tole zu Beginn eines Stückes notiert, das eine +Tempobezeichnung mit @code{\tempo} enthält, müssen die Noten +in einer explizit begonnenen Stimme notiert werden. Siehe +auch @rlearning{Voice enthält Noten}. + + +@node Tondauern skalieren +@unnumberedsubsubsec Tondauern skalieren +@translationof Scaling durations + +@cindex Dauern skalieren +@cindex Skalieren von Dauern + +Die Dauer von einzelnen Noten, Pausen oder Akkorden kann mit einem Bruch multipliziert werden, +indem hinter die Notendauer @qq{*@var{N/M}} (oder @qq{*@var{N}} wenn @var{M} 1 ist) +geschrieben wird. Die Erscheinung der Noten oder Pausen wird +dadurch nicht beeinflusst, die neue Dauer wird aber dazu +benutzt, ihre Position im Takt zu errechnen und die neue +Dauer in der MIDI-Ausgabe einzusetzen. Die Faktoren, mit +denen multipliziert wird, können auch kombiniert werden, etwa +@qq{*L*M*/N}. + +Im nächsten Beispiel nehmen die drei ersten Noten genau zwei Schläge ein, +aber es wird keine Triolenklammer über ihnen ausgegeben. + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Alter durations to triplets +a4*2/3 gis4*2/3 a4*2/3 +% Normal durations +a4 a4 +% Double the duration of chord +4*2 +% Duration of quarter, appears like sixteenth +b16*4 c4 +@end lilypond + +Die Dauer von unsichtbaren Noten kann auch mit einem Faktor +beeinflusst werden. Das ist sinnvoll, wenn man viele Takte +überspringen muss, etwa @code{s1*23}. + +@cindex Musik komprimieren +@cindex Komprimieren von Noten +@cindex Noten komprimieren +@cindex Noten ausdehnen +@cindex Ausdehnen von Noten +@cindex Dauern skalieren + +@funindex scaleDurations +@funindex \scaleDurations + +Längere Notenabschnitte können auf die gleiche Art durch Multiplikation +mit einem Bruch komprimiert werden, als ob jede Note, jeder +Akkord oder jede Pause mit dem Bruch multipliziert würde. +Damit bleibt das Aussehen der Musik unverändert, aber die +interne Dauer der Noten wird mit dem Bruch multipliziert. +Die Leerzeichen um den Punkt im Beispiel sind notwendig. +Hier ein Beispiel, das zeigt, wie Noten komprimiert und +ausgedehnt werden kann: + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Normal durations +4 c8 a +% Scale music by *2/3 +\scaleDurations #'(2 . 3) { + 4. c8 a f +} +% Scale music by *2 +\scaleDurations #'(2 . 1) { + 4 c8 b +} +@end lilypond + +Eine Anwendung für diesen Befehl ist polymetrische Notation, +siehe @ref{Polymetrische Notation}. + +@seealso +Notationsreferenz: +@ref{Andere rhythmische Aufteilungen}, +@ref{Unsichtbare Pausen}, +@ref{Polymetrische Notation}. + +Schnipsel: +@rlsr{Rhythms}. + + +@node Bindebögen +@unnumberedsubsubsec Bindebögen +@translationof Ties + +@cindex Bindebogen +@cindex Überbindung + +@funindex ~ + +Ein Bindebogen verbindet zwei benachbarte Noten der selben +Tonhöhe. Als Resultat wird die Dauer der Notenlänge verlängert. + +@warning{Bindebögen (engl. tie) dürfen nicht mit Legatobögen +(engl. slur) verwechselt werden, durch +die die Vortragsart bezeichnet wird, noch mit Phrasierungsbögen +(engl. phrasing slur), +die musikalische Phrasen anzeigen. Ein Bindebogen ist nur eine +Art, die Tondauer zu verlängern, ähnlich etwa wie die +Punktierung.} + +Ein Bindebogen wird mit der +Tilde @code{~} (AltGr++) notiert. + +@lilypond[quote,verbatim,relative=2] +a2 ~ a +@end lilypond + +Bindebögen werden eingesetzt, wenn die Note entweder über eine +Taktlinie hinüberreicht, oder wenn die entsprechende Dauer der +Note nicht mit Punktierung erreicht werden kann. Bindebögen +sollten auch benutzt werden, wenn Notenwerte über die +inneren Unterteilungen von Takten hinüberreichen: + +@lilypond[quote] +\relative c' { + r8 c8 ~ c2 r4 | + r8^"not" c2 ~ c8 r4 +} +@end lilypond + +Wenn viele Noten über Taktlinien gebunden werden müssen, kann +es einfacher sein, automatische Notenaufteilung einzustellen, +wie beschrieben in @ref{Automatische Aufteilung von Noten}. +Mit diesem Mechanismus werden lange Noten +automatisch aufgeteilt, wenn sie über Taktgrenzen reichen. + +@cindex Bindebögen und Akkorde +@cindex Überbindungen und Akkorde +@cindex Akkorde und Überbindungen + +Wenn ein Bindebogen an einen Akkord gehängt wird, werden alle Noten +dieses Akkordes übergebunden. Wenn kein Notenkopf passt, wird auch +kein Bogen erzeugt. Noten in Akkorden können auch einzeln übergebunden +werden, indem sie innerhalb des Akkordes hinter die entsprechende Note +geschrieben werden. + +@lilypond[quote,verbatim,relative=1] + ~ + +@end lilypond + +@cindex Bindebögen wiederholen +@cindex Wiederholung und Bindebögen +@cindex Überbindung und Wiederholungen +@cindex Volta-Klammern und Wiederholungen +@cindex Volta und Überbindung + +@funindex \repeatTie +@funindex repeatTie + +Wenn die zweite Variante einer Wiederholung mit einer übergebundenen +Note anfängt, muss der Bindebogen wie folgt notiert werden: + +@lilypond[quote,relative=2,verbatim] +\repeat volta 2 { c g 2 ~ } +\alternative { + % First alternative: following note is tied normally + { 2. r4 } + % Second alternative: following note has a repeated tie + { 2\repeatTie d4 c } } +@end lilypond + +@cindex Laissez vibrer +@cindex Ausklingen lassen, Bögen +@cindex Bögen, laissez vibrer +@cindex Ausklingen lassen + +@funindex laissezVibrer +@funindex \laissezVibrer + +So genannte @notation{laissez vibrer}-Bögen werden verwendet um anzuzeigen, dass +man die Musik ausklingen lassen soll. Sie werden in der Klavier-, Harfen-, +anderer Saiteninstrument- und Schlagzeugnotation verwendet. Sie können folgendermaßen notiert werden: + +@lilypond[quote,verbatim,relative=1] +1\laissezVibrer +@end lilypond + +@cindex ties, placement + +@funindex \tieUp +@funindex \tieDown +@funindex \tieNeutral +@funindex tieUp +@funindex tieDown +@funindex tieNeutral + +Bindebögen können manuell über oder unter dem Notensystem +gesetzt werden. Zu Einzelheiten siehe @ref{Richtung und Platzierung}. + +@cindex Bindebögen, Aussehen +@cindex Bindebögen, gestrichelt +@cindex Bindebögen, gepunktet +@cindex Bindebögen, durchgehend + +@funindex \tieDotted +@funindex \tieDashed +@funindex \tieSolid +@funindex tieDotted +@funindex tieDashed +@funindex tieSolid + +Bindebögen können durchgehend, gestrichelt, gepunktet oder in einer Kombination +von Strichen und durchgehender Linie definiert werden. + +@lilypond[quote, verbatim, relative=1] +\tieDotted +c2 ~ c +\tieDashed +c2 ~ c +\tieHalfDashed +c2 ~ c +\tieHalfSolid +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Eigene Strichelungsmuster können definiert werden: + +@lilypond[quote, verbatim, relative=1] +\tieDashPattern #0.3 #0.75 +c2 ~ c +\tieDashPattern #0.7 #1.5 +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Die Definition von Muster für die Strichelung der Bindebögen hat +die gleiche Struktur wie die Definition für Legatobögen. Zu +weiterer Information zu komplizierten Strichelungsmustern, siehe +die Schnipsel im Abschnitt @ref{Legatobögen}. + +@predefined +@code{\tieUp}, +@code{\tieDown}, +@code{\tieNeutral}, +@code{\tieDotted}, +@code{\tieDashed}, +@code{\tieDashPattern}, +@code{\tieHalfDashed}, +@code{\tieHalfSolid}, +@code{\tieSolid}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-ties-with-arpeggios.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{engraving-ties-manually.ly} + +@seealso +Glossar: +@rglos{tie}, +@rglos{laissez vibrer}. + +Notationsreferenz: +@ref{Legatobögen}, +@ref{Automatische Aufteilung von Noten}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{LaissezVibrerTie}, +@rinternals{LaissezVibrerTieColumn}, +@rinternals{TieColumn}, +@rinternals{Tie}. + +@knownissues +Der Wechsel zwischen Systemen bei aktiver Überbindung produziert keinen +gekrümmten Bogen. + +Änderung von Schlüssel oder Oktavierung zwischen übergebundenen Noten +ist nicht richtig definiert. In diesen Fällen kann es besser sein, einen +Legatobogen zu verwenden. + + +@node Pausen eingeben +@subsection Pausen eingeben +@translationof Writing rests + +Pausen werden als Teil der musikalischen Ausdrücke zusammen mit +den Noten notiert. + +@menu +* Pausen:: +* Unsichtbare Pausen:: +* Ganztaktpausen:: +@end menu + +@node Pausen +@unnumberedsubsubsec Pausen +@translationof Rests + +@cindex Pausen +@cindex Pausendauern +@cindex Maxima-Pause +@cindex Longa-Pause +@cindex Brevis-Pause + +@funindex \rest +@funindex r +@funindex \maxima +@funindex \longa +@funindex \breve +@funindex rest +@funindex maxima +@funindex longa +@funindex breve + +Pausen werden wie Noten eingegeben, ihre Bezeichnung ist @code{r}. +Dauern, die länger als eine Ganze sind, haben die +vordefinierten Befehle: + +@c \time 16/1 is used to avoid spurious bar lines +@c and long tracts of empty measures +@lilypond[quote,verbatim,relative=2] +\new Staff { + % These two lines are just to prettify this example + \time 16/1 + \override Staff.TimeSignature #'stencil = ##f + % Print a maxima rest, equal to four breves + r\maxima + % Print a longa rest, equal to two breves + r\longa + % Print a breve rest + r\breve + r1 r2 r4 r8 r16 r32 r64 r128 +} +@end lilypond + +@cindex Pausen, mehrtaktig +@cindex Pausen, ganztaktig +@cindex Ganztaktpausen +@cindex Mehrtaktpausen + +Pausen, die ganze Takte ausfüllen und in der Taktmitte zentriert +werden sollen, müssen als mehrtaktige Pausen eingegeben werden. +Sie können sowohl für einen einzigen Takt als auch für mehrere +Takte verwendet werden, Näheres im Abschnitt +@ref{Ganztaktpausen}. + +@cindex Pausen, vertikale Position festlegen + +Um die vertikale Position einer Pause explizit festzulegen, +kann eine Note eingegeben werden, gefolgt vom Befehl @code{\rest}. +Die Pause wird dann an die Stelle gesetzt, wo sich sonst die +Note befinden würde. Damit wird die manuelle Formatierung von mehrstimmiger Musik +sehr viel einfacher, da die Formatierungsfunktion zur automatischen +Auflösung von Zusammenstößen diese Pausen nicht mit einbezieht. + +@lilypond[quote,verbatim,relative=2] +a4\rest d4\rest +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{rest-styles.ly} + +@seealso +Glossar: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}. + +Notationsreferenz: +@ref{Ganztaktpausen}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Rest}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +Es gibt keine grundlegende Grenze für die Dauer von Pausen (sowohl +kürzer als auch länger), aber die Anzahl von Symbolen ist +begrenzt: Es gibt Zeichen für Pausen von einer 128 bis zu einer +Maxima (8 Ganze). + + +@node Unsichtbare Pausen +@unnumberedsubsubsec Unsichtbare Pausen +@translationof Invisible rests + +@cindex Skip +@cindex Überspringen von Zeichen +@cindex Unsichtbare Pausen +@cindex Pausen, unsichtbar +@cindex Platzhalternoten + +@funindex \skip +@funindex skip +@funindex s + +Eine unsichtbare Pause (auch als @qq{skip} oder Überspringung bezeichnet) +kann wie eine Note eingegeben werden, die Notationsbezeichnung ist @code{s}. + +@lilypond[quote,verbatim,relative=2] +a4 a4 s4 a4 \skip 1 a4 +@end lilypond + +@cindex Gesangstext, Note überspringen + +Die @code{s}-Syntax steht nur im Noten- oder Akkordmodus zur Verfügung. In +anderen Situationen, z. B. innerhalb eines Liedtextes, muss +der Befehl @code{\skip} benutzt werden. @code{\skip} benötigt eine +explizite Dauerangabe. + +@lilypond[quote,verbatim,relative=2] +<< + { + a2 \skip2 a2 a2 + } + \new Lyrics { + \lyricmode { + foo2 \skip 1 bla2 + } + } +>> +@end lilypond + +Weil @code{\skip} ein Befehl ist, wirkt er sich nicht auf die Dauer +der folgenden Noten aus, anders als@tie{}@code{s}. + +@lilypond[quote,verbatim,relative=2] +<< + { + \repeat unfold 8 { a4 } + } + { + a4 \skip 2 a | + s2 a + } +>> +@end lilypond + +Die Platzhalterpause mit @code{s} erstellt @code{Staff}- und +@code{Voice}-Kontext, wenn es erforderlich ist, genauso wie Noten und Pausen. + +@lilypond[quote,verbatim,relative=2] +s1 s s +@end lilypond + +Der Überspringungsbefehl (@code{\skip}) ist einfach ein leerer Platzhalter. +Durch ihn wird überhaupt nichts gesetzt, auch keine transparenten Objekte. + +@lilypond[quote,verbatim,relative=2] +% This is valid input, but does nothing +\skip 1 \skip1 \skip 1 +@end lilypond + +@seealso +Handbuch zum lernen: +@rlearning{Sichtbarkeit und Farbe von Objekten}. + +Notationsreferenz: +@ref{Unsichtbare Noten}, +@ref{Sichtbarkeit von Objekten}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{SkipMusic} + + + +@node Ganztaktpausen +@unnumberedsubsubsec Ganztaktpausen +@translationof Full measure rests + +@cindex Ganztaktpausen +@cindex Mehrtaktpausen +@cindex Pausen, Ganztakt- +@cindex Pausen, Mehrtakt- + +@funindex R + +Pausen für einen oder mehrere ganze Takte werden wie +Noten eingegeben, wobei die Bezeichnung ein Großbuchstabe +@code{R} ist: + +@lilypond[quote,verbatim,relative=2] +% Rest measures contracted to single measure +\compressFullBarRests +R1*4 +R1*24 +R1*4 +b2^"Tutti" b4 a4 +@end lilypond + +Die Dauer von Ganztaktpausen wird genauso angegeben wie die +Dauer von Noten. Die Dauer einer Ganztaktpause muss immer +eine ganze Anzahl an Taktlängen sein, weshalb Punktierungen +und Brüche recht häufig eingesetzt werden müssen. + +@lilypond[quote,relative=2,verbatim] +\compressFullBarRests +\time 2/4 +R1 | R2 | +\time 3/4 +R2. | R2.*2 | +\time 13/8 +R1*13/8 | R1*13/8*12 | +\time 10/8 +R4*5*4 | +@end lilypond + +Eine Ganztaktpause wird abhängig von der Taktart entweder als +Ganze oder Brevis-Pause gesetzt, zentriert im Takt. + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +R1 | +\time 6/4 +R1*3/2 | +\time 8/4 +R1*2 | +@end lilypond + +@cindex Mehrtaktpausen, ausschreiben +@cindex Pausen, mehrere Takte ausschreiben +@cindex Pausen, mehrere Takte komprimieren +@cindex Mehrtaktpausen, komprimieren + +@funindex \expandFullBarRests +@funindex \compressFullBarRests +@funindex expandFullBarRests +@funindex compressFullBarRests + +In den Standardeinstellungen werden mehrtaktige Pausen +ausgeschrieben gesetzt, sodass sie die entsprechende Anzahl von +Takten einnehmen. Alternativ kann die mehrtaktige Pause +aber auch nur in einem Takt angezeigt werden, der ein +Mehrtaktpausensymbol beinhaltet, wobei die Anzahl der Takte +der Pausendauer über dem Pausenzeichen ausgegeben wird: + +@lilypond[quote,relative=2,verbatim] +% Default behavior +\time 3/4 r2. | R2.*2 | +\time 2/4 R2 | +\time 4/4 +% Rest measures contracted to single measure +\compressFullBarRests +r1 | R1*17 | R1*4 | +% Rest measures expanded +\expandFullBarRests +\time 3/4 +R2.*2 | +@end lilypond + + +@cindex Text über Mehrtaktpausen +@cindex Mehrtaktpausen, Text hinzufügen +@cindex Beschriftung über Mehrtaktpausen +@cindex Mehrtaktpausen, Beschriftung +@cindex Fermate über Mehrtaktpausen +@cindex Mehrtaktpause mit Fermate + +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex MultiMeasureRestText + +Textbeschriftung kann Mehrtaktpausen mit @code{\markup} +hinzugefügt werden. Ein +vordefinierte Befehl @code{\fermataMarkup} fügt eine +Fermate ein. + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 3/4 +R2.*10^\markup { \italic "ad lib." } +R2.^\fermataMarkup +@end lilypond + +@warning{ +Beschriftungen, die an Mehrtaktpausen gehängt werden, sind +Objekte vom Typ @code{MultiMeasureRestText}, nicht vom Typ +@code{TextScript}. Änderungen etwa mit @code{\override} +müssen auf das richtige Objekt gerichtet werden, damit sie +nicht ignoriert werden. Siehe auch das folgende Beispiel. +} + +@lilypond[quote,verbatim,relative=2] +% This fails, as the wrong object name is specified +\override TextScript #'padding = #5 +R1^"wrong" +% This is the correct object name to be specified +\override MultiMeasureRestText #'padding = #5 +R1^"right" +@end lilypond + +Wenn eine Mehrtaktpause direkt auf einen Auftakt mit @code{\partial} +folgt, werden möglicherweise daraus resultierende +Taktprüfungswarnungen nicht angezeigt. + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex \compressFullBarRests +@funindex compressFullBarRests +@funindex \expandFullBarRests +@funindex expandFullBarRests + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}, +@code{\fermataMarkup}, +@code{\compressFullBarRests}, +@code{\expandFullBarRests}. +@endpredefined + +@snippets + +@cindex Kirchenpausen +@cindex Pausen, Kirchenstil +@cindex Balkenpausen, mehrtaktig + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-form-of-multi-measure-rests.ly} + +@cindex Mehrtaktpausen, Positionierung +@cindex Position von Mehrtaktpausen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{positioning-multi-measure-rests.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{multi-measure-rest-markup.ly} + +@seealso +Glossar: +@rglos{multi-measure rest}. + +Notationsreferenz: +@ref{Tondauern}, +@ref{Text}, +@ref{Text formatieren}, +@ref{Textarten}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{MultiMeasureRest}, +@rinternals{MultiMeasureRestNumber}, +@rinternals{MultiMeasureRestText}. + +@cindex Fingersatz und Mehrtaktpausen +@cindex Mehrtaktpausen und Fingersatz +@cindex Ganztaktpausen und Fingersatz + +@knownissues +Wenn man versucht, mit Fingersatz (etwa @code{R1*10-4} Zahlen +über Ganztaktpausen zu setzen, kann die Zahl des Fingersatzes +(4) mit der Taktanzahl (10) zusammenstoßen. + +@cindex Zusammenfalten von Pausen +@cindex Pausen, Zusammenfalten + +Es gibt keine Möglichkeit, normale Pausen automatisch zu +Ganztaktpausen zu reduzieren. + +@cindex Pausen, Zusammenstöße + +Ganztaktpausen werden bei der Vermeidung von Zusammenstößen nicht +berücksichtigt. + + +@node Rhythmen anzeigen lassen +@subsection Rhythmen anzeigen lassen +@translationof Displaying rhythms + +@menu +* Taktangabe:: +* Metronomangabe:: +* Auftakte:: +* Musik ohne Metrum:: +* Polymetrische Notation:: +* Automatische Aufteilung von Noten:: +* Melodierhythmus anzeigen:: +@end menu + +@node Taktangabe +@unnumberedsubsubsec Taktangabe +@translationof Time signature + +@cindex Taktangabe +@cindex Metrum + +@funindex time +@funindex \time + +Taktangaben werden wie folgt erstellt. + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c'2 +\time 3/4 c'2. +@end lilypond + +@cindex Taktangabe, Sichtbarkeit + +Taktangaben werden zu Beginn eines Stückes gesetzt und immer dann, +wenn sich die Taktart ändert. Wenn eine Änderung am Ende einer +Zeile geschieht, wird eine warnende Taktangabe am Ende der Zeile +ausgegeben. Dieses Verhalten kann verändert werden, siehe +@ref{Sichtbarkeit von Objekten}. + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c2 c +\break +c c +\break +\time 4/4 +c c c c +@end lilypond + +@funindex \numericTimeSignature +@funindex \defaultTimeSignature +@funindex numericTimeSignature +@funindex defaultTimeSignature + +@cindex Stil von Taktangaben +@cindex Taktangaben-Stile + +Das Symbol für die Taktarten 2/2 und 4/4 kann in ein Zahlensymbol +umgewandelt werden: + +@lilypond[quote,verbatim,relative=2] +% Default style +\time 4/4 c1 +\time 2/2 c1 +% Change to numeric style +\numericTimeSignature +\time 4/4 c1 +\time 2/2 c1 +% Revert to default style +\defaultTimeSignature +\time 4/4 c1 +\time 2/2 c1 +@end lilypond + +Symbole für Modus und Proprietas der mensuralen Notation +werden behandelt unter @ref{Mensurale Taktartenbezeichnungen}. + +@cindex Taktart, Standardeinstellung +@cindex Standardtakteinstellungen +@cindex Bebalkung, Taktartstandard +@cindex Balken, Taktartstandard + +@funindex \overrideTimeSignatureSettings +@funindex overrideTimeSignatureSettings + +Zusätzlich zu der gedruckten Taktart werden mit der Definition des +Befehls @code{\time} auch die Standardwerte fürt die Eigenschaften +@code{baseMoment}, @code{beatStructure} und @code{beamExtensions} +gesetzt. Die vordefinierten Standardwerte für diese Eigenschaften +finden sich in @file{scm/time-signature-settings.scm}. Die existierenden +Standardwerte können verändert oder neue Standardwerte hinzugefügt +werden. + +@lilypond[quote,verbatim] +\score { + \new Staff { + \relative c' { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + } + } +} +@end lilypond + +@code{\overrideTimeSignatureSettings} braucht fünf Argumente: + +@enumerate + +@item +@code{@var{timeSignatureFraction}} (Taktart-Bruch), ein Scheme-Paar, +das den Takt beschreibt. + +@item +@code{@var{baseMomentFraction}} (Grundmoment-Bruch), ein Scheme-Paar, das +den Zähler und Nenner der Grundschlageinheit der Taktart enhält. + +@item +@code{@var{beatStructure}} (Taktzeit-Struktur), eine Scheme-Liste, die +die Struktur der Taktschläge anzeigt, in Einheiten des Grundmoments. + +@item +@code{@var{beamExceptions}} (Balken-Ausnahmen), eine Aliste, die alle +Bebalkungsregeln für die Taktart enthält, außer dem Balken, der zum Taktende +endet, wie beschrieben in @ref{Einstellung von automatischen Balken}. +@end enumerate + +Der Kontext, der @code{\overrideTimeSignatureSettings} enthält, muss +begonnen sein, bevor @code{\overrideTimeSignatureSettings} aufgerufen +wird. Das heißt, dass er entweder explizit begonnen wird oder sich +Noten in dem Kontext befinen müssen, bevor +@code{\overrideTimeSignatureSettings} aufgerufen wird: + +@lilypond[quote,verbatim] +\score { + \relative c' { + % This call will fail because the context isn't yet instantiated + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (2 2)"} + \repeat unfold 7 { c8 } | + % This call will succeed + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (3 1)"} + \repeat unfold 7 { c8 } | + } +} +@end lilypond + + + + + +@cindex Taktart, Standardeigenschaften wiederherstellen +@cindex Wiederherstellen von Taktart-Standardeigenschaften +@cindex Zurücksetzen von Taktart-Standardeigenschaften + +@funindex \revertTimeSignatureSettings +@funindex revertTimeSignatureSettings + +Veränderte Werte der Taktart-Eigenschaften können wieder auf den +Standard zurückgesetzt werden: + +@lilypond[quote,verbatim] +\score{ + \relative c' { + \repeat unfold 8 { c8 } | + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + \revertTimeSignatureSettings #'(4 . 4) + \time 4/4 + \repeat unfold 8 { c8 } | + } +} +@end lilypond + +Unterschiedliche Werte der Standard-Taktarteigenschaften für unterschiedliche +Notensysteme können eingerichtet werden, indem man den +@code{Timing_translator} und den @code{Default_bar_line_engraver} aus dem +@code{Score}-Kontext in den @code{Staff}-Kontext verschiebt. + +@lilypond[quote, verbatim] +\score { + \new StaffGroup << + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(1 3) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + >> + \layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } + } +} +@end lilypond + +@predefined +@code{\numericTimeSignature}, +@code{\defaultTimeSignature}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-time-signature-without-affecting-the-beaming.ly} + +@cindex compound time signatures +@cindex time signature, compound + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly} + + +@seealso +Glossar: +@rglos{time signature} + +Notationsreferenz: +@ref{Mensurale Taktartenbezeichnungen}, +@ref{Verwaltung der Zeiteinheiten}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}. + + +@node Metronomangabe +@unnumberedsubsubsec Metronomangabe +@translationof Metronome marks + +@cindex Tempo +@cindex Metronombezeichnung +@cindex Tempobezeichnung +@cindex Aufführungsanweisung: Tempo + +@funindex tempo +@funindex \tempo + +Eine Metronomanweisung wird wie folgt erstellt: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 120 +c2 d +e4. d8 c2 +@end lilypond + +Metronombezeichnungen können auch für einen Zahlenbereich notiert werden: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 40 ~ 46 +c4. e8 a4 g +b,2 d4 r +@end lilypond + +Anstelle dessen kann auch Text als Argument angegeben werden: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +c4 e d c +b4. a16 b c4 r4 +@end lilypond + +Wenn eine Metronombezeichnung und Text kombiniert wird, wird +die Metronombezeichnung automatisch in Klammern gesetzt: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegro" 4 = 160 +g4 c d e +d4 b g2 +@end lilypond + +Der Text kann ein beliebiges Textbeschriftungsobjekt sein: + +@lilypond[verbatim,quote,relative=2] +\tempo \markup { \italic Faster } 4 = 132 +a8-. r8 b-. r gis-. r a-. r +@end lilypond + +Eine Metronombezeichnung in Klammern ohne Text kann erstellt +werden, indem eine leere Zeichenkette hinzugefügt wird: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-tempo-without-a-metronome-mark.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-metronome-marks-in-markup-mode.ly} + +Zu Einzelheiten siehe @ref{Text formatieren}. + + +@seealso +Glossar: +@rglos{metronome}, +@rglos{metronomic indication}, +@rglos{tempo indication}, +@rglos{metronome mark}. + +Notationsreferenz: +@ref{Text formatieren}, +@ref{MIDI-Ausgabe}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{MetronomeMark}. + + + + +@node Auftakte +@unnumberedsubsubsec Auftakte +@translationof Upbeats + +@cindex Auftakt +@cindex Takte verkürzen +@cindex partieller Takt +@cindex halber Takt +@cindex Taktlänge ändern + +@funindex measurePosition +@funindex \partial +@funindex partial + +Verkleinerte Takte, wie etwa ein Auftakt, werden mit dem +Befehl @code{\partial} notiert, dessen Syntax lautet: + +@example +\partial @var{Dauer} +@end example + +@noindent +wobei @var{Dauer} die rhythmische Länger der Noten darstellt, +die vor dem ersten vollständigen Takt gesetzt werden sollen: + +@lilypond[quote,verbatim,relative=2] +\partial 4 e4 | +a2. c,4 | +@end lilypond + +Intern wird @code{\partial @var{Dauer}} übersetzt nach: + +@example +\set Timing.measurePosition -@var{Länge der Dauer} +@end example + +Zum Beispiel wird aus @code{\partial 8*3}: + +@example +\set Timing.measurePosition = #(ly:make-moment -3 8) +@end example + +Die Eigenschaft @code{measurePosition} (Takt-Position) enthält +eine rationale Zahl, +die anzeigt, wie groß der Abstand zum Taktanfang ist. Deshalb ist +sie eine negative Zahl; @code{\partial 4} wird also intern übersetzt +zu @code{-4} was soviel bedeutet wie: @qq{Eine Viertel bleibt übrig vom ganzen Takt.} + +@seealso +Glossar: +@rglos{anacrusis}. + +Notationsreferenz: +@ref{Verzierungen}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Timing_translator}. + +@cindex Kadenz und Zeilenumbruch +@cindex Kadenz und Seitenumbruch +@cindex Musik ohne Metrum, Umbrüche +@cindex nicht metrische Musik, Umbrüche +@cindex Umbrüche in nicht metrischer Musik +@cindex Umbrüche in Kadenzen +@cindex Zeilenumbrüche in Kadenzen +@cindex Seitenumbrüche in Kadenzen +@cindex Zeilenumbrüche in nicht metrischer Musik +@cindex Seitenumbrüche in nicht metrischer Musik + +@knownissues + +@code{\partial} ist nur für den Anfang eines Stückes vorgesehen. Wenn der +Befehl innerhalb eines Stückes verwendet wird, können seltsame Warnungen +auftreten. In solchem Fall sollten Sie @code{\set Timing.measurePosition} +benutzen. + + +@node Musik ohne Metrum +@unnumberedsubsubsec Musik ohne Metrum +@translationof Unmetered music + +@cindex Kadenz +@cindex Taktlinien, ausschalten +@cindex Taktnummern, ausschalten +@cindex Noten ohne Takt +@cindex Taktart, Noten ohne +@cindex Metrum, Noten ohne + +@funindex \cadenzaOn +@funindex \cadenzaOff +@funindex cadenzaOn +@funindex cadenzaOff + +Taktlinien und Taktzahlen werden automatisch erzeugt. Für Musik +ohne Metrum hingegen (etwa Kadenzen) ist das jedoch nicht +erwünscht. Mit den Befehlen @code{\cadenzaOn} und +@code{\cadenzaOff} kann dieses Verhalten ausgeschaltet und +wieder angeschaltet werden. + +@lilypond[verbatim,relative=2,quote] +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +Taktnummerierung wird am Ende der Kadenz wieder aufgenommen, als +ob es die Kadenz nicht gegeben hätte: + +@lilypond[verbatim,relative=2,fragment] +% Show all bar numbers +\override Score.BarNumber #'break-visibility = #all-visible +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +@cindex Bebalkung in Kadenzen +@cindex Bebalken in taktloser Musik +@cindex Kadenzen, Bebalkung +@cindex Balken in Kadenzen +@cindex Taktlose Musik, Bebalkung + +@lilypond[verbatim,relative=2,quote] +\repeat unfold 8 { c8 } +\cadenzaOn +\repeat unfold 5 { c8 } +\bar"|" +\cadenzaOff +\repeat unfold 8 { c8 } +@end lilypond + +Automatische Bebalkung wird durch @code{\cadenzeOn} ausgestellt und durch +@code{\cadenzaOff} wieder angestellt. Darum müssen alle Balken in Kadenzen +manuell eingegeben werden (siehe @ref{Manuelle Balken}). + +Diese vordefinierten Befehle wirken sich auf alle Systeme in der +Partitur aus, auch wenn sie nur in einer einzigen Stimme notiert werden. +Um dieses Verhalten zu ändern, müsen Sie @code{Timing_translator} +aus dem @code{Score}-Kontext in den @code{Staff}-Kontext verschieben, +wie gezeigt in @ref{Polymetrische Notation}. + +@predefined +@code{\cadenzaOn}, +@code{\cadenzaOff}. +@endpredefined + +@seealso +Glossar: +@rglos{cadenza}. + +Notationsreferenz: +@ref{Sichtbarkeit von Objekten}, +@ref{Polymetrische Notation} +@ref{Manuelle Balken}. + +Schnipsel: +@rlsr{Rhythms}. + +@knownissues + +LilyPond fügt Zeilen- und Seitenumbrüche nur an einer Taktlinie +ein. Wenn die Kadenz nicht vor einem Umbruch endet, müssen Sie +selber unsichtbare Taktlinien mit + +@example +\bar "" +@end example + +@noindent +einfügen, um anzuzeigen, wo umgebrochen werden darf. + +Sie müssen explizit einen @code{Voice}-Kontext erstellen, wenn +Sie ein Stück mit @code{cadenzaOn} beginnen wollen, weil sonst +ein seltsamer Fehler auftreten kann. + +@example +\new Voice @{ + \relative c' @{ + \cadenzaOn + c16[^"Solo Free Time" d e f] g2. + \bar "||" + \cadenzaOff + @} +@} +@end example + + +@node Polymetrische Notation +@unnumberedsubsubsec Polymetrische Notation +@translationof Polymetric notation + +@cindex doppelte Taktartensymbole +@cindex Taktartensymbole, doppelt +@cindex Taktartensymbole, unterteilt +@cindex Taktarten, polymetrisch +@cindex polymetrische Taktarten +@cindex Metrum, polymetrisch +@cindex unterteilte Taktarten + +@funindex timeSignatureFraction +@funindex \scaleDurations +@funindex scaleDurations +@funindex \times +@funindex times + +Polymetrische Notation ist unterstützt, entweder direkt, oder +indem man das sichtbare Taktart-Symbol verändert und zusätzlich +die Notendauern skaliert. + +@strong{@i{Systeme mit unterschiedlichen Taktarten, gleiche +Taktlänge}} + +Diese Art der Notation kann erstellt werden, indem für jedes +System eine identische Taktart eingestellt wird, aber manuell +für jeden Takt durch Einstellung von @code{timeSignatureFraction} +auf den gewünschten Bruch geändert und dann die Länge der +Noten entsprechenden skaliert wird, siehe auch @ref{Taktangabe}. +Die Skalierung geschieht mit dem Befehl +@code{\scaleDurations}, der auf ähnliche Weise wie @code{\times} +benutzt wird, aber keine Klammer über den Noten ausgibt. Siehe +auch @ref{Tondauern skalieren}. + +@cindex Bebalkung in polymetrischer Notation +@cindex Polymetrische Notation und Balken +@cindex Balken in polymetrischer Notation + +In diesem Beispiel werden Noten mit den Taktarten 3/4, 9/8 und +10/8 parallel benutzt. Im zweiten System werden die gezeigten +Dauern mit 2/3 multipliziert, da 2/3x9/8=3/4, und im dritten +System werden die gezeigten Dauern mit 3/5 multipliziert, da +3/5x10/8=3/4. Oft wird es nötig sein, Balken manuell zu setzen, +weil die Skalierung sich auch auf die automatische Bebalkung +auswirkt. + +@lilypond[quote,verbatim] +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \repeat unfold 6 { c8[ c c] } + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(10 . 8) + \scaleDurations #'(3 . 5) { + \repeat unfold 2 { c8[ c c] } + \repeat unfold 2 { c8[ c] } | + c4. c4. \times 2/3 { c8[ c c] } c4 + } + } +>> +@end lilypond + +@strong{@i{Systeme mit unterschiedlichen Taktarten, unterschiedliche +Taktlänge}} + +Jedes System kann auch eine eigene unabhängige Taktart erhalten. +Dazu muss der @code{Timing_translator} und der +@code{Default_bar_line_engraver} in den @code{Staff}-Kontext +verschoben werden. + +@lilypond[quote,verbatim] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +% Now each staff has its own time signature. + +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c4 c c | + } + \new Staff { + \time 2/4 + c4 c | + c4 c | + c4 c | + } + \new Staff { + \time 3/8 + c4. | + c8 c c | + c4. | + c8 c c | + } +>> +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + + +@seealso +Glossar: +@rglos{polymetric}, +@rglos{polymetric time signature}, +@rglos{meter}. + +Notationsreferenz: +@ref{Taktangabe}, +@ref{Tondauern skalieren}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}, +@rinternals{Default_bar_line_engraver}, +@rinternals{Staff}. + +@knownissues + +Wenn unterschiedliche Taktarten parallel benutzt werden, werden +Noten auf demselben musikalischen Moment horizontal auf die +gleiche Position gesetzt. Die unterschiedlichen Taktlinien +führen allerdings dazu, dass die Noten nicht ganz so regelmäßig +gesetzt werden, wie es ohne unterschiedliche Taktarten der +Fall wäre. + + +@node Automatische Aufteilung von Noten +@unnumberedsubsubsec Automatische Aufteilung von Noten +@translationof Automatic note splitting + +@cindex Noten, Aufteilen +@cindex Aufteilen von Noten +@cindex automatisches Aufteilen von Noten +@cindex Pausen, Aufteilen +@cindex Aufteilen von Pausen + +@funindex Note_heads_engraver +@funindex Completion_heads_engraver +@funindex Completion_rest_engraver + +Lange Noten, die über Taktlinien hinüberreichen, können +automatisch in übergebundene Noten aufgeteilt werden. +Dieses Verhalten erreicht man, indem der @rinternals{Note_heads_engraver} +mit dem @rinternals{Completion_heads_engraver} ausgetauscht wird. Auf +gleiche Art können lange Pausen, die über Taktgrenzen reichen, automatisch +aufgeteilt werden, indem man den @code{Rest_engraver}mit dem +@code{Completion_rest_engraver} ersetzt. Im nächsten Beispiel werden +Noten und Pausen, die über die Taktlinie dauern, aufgeteilt; Noten +werden auch übergebunden. + +@lilypond[quote,verbatim,relative=1] +\new Voice \with { + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" +} + +{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 r1*2 } +@end lilypond + +Dieser Engraver teilt alle Noten und Pausen +auf, die über eine Taktlinie dauern und fügt für Noten Bindebögen hinzu. +Er kann unter Anderem dann nützlich sein, wenn man komplexe +Partituren auf Fehler überprüfen möchte: Wenn die Takte nicht +vollständig gefüllt sind, zeigt die Überbindung genau an, wie viele +Notenwerte noch in dem jeweiligen Takt fehlen. + +@seealso +Glossar: +@rglos{tie} + +Handbuch zum Lernen: +@rlearning{Was sind Engraver?}, +@rlearning{Engraver hinzufügen und entfernen}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Note_heads_engraver}, +@rinternals{Completion_heads_engraver}, +@rinternals{Rest_engraver}, +@rinternals{Completion_rest_engraver}. +@rinternals{Forbid_line_break_engraver}. + +@knownissues + +Nicht alle Notenwerte (besonders wenn sie andere rhythmische +Aufteilungen beinhalten) können exakt durch normale Noten und +Punktierungen wiedergegeben werden. Der Engraver setzt aber +trotzdem keine Triolen etc. + +@code{Completion_heads_engraver} wirkt sich nur auf Noten aus; +Pausen werden nicht aufgeteilt. + + +@node Melodierhythmus anzeigen +@unnumberedsubsubsec Melodierhythmus anzeigen +@translationof Showing melody rhythms + +@cindex Melodierhythmus: Anzeige +@cindex Rhythmus der Melodie anzeigen + +Manchmal soll nur der Rhythmus einer Melodie dargestellt werden. Das +erreicht man mit einem Rhythmus-Notensystem. Alle Tonhöhen werden +auf eine Linie reduziert und das System hat auch nur eine einzige +Linie. + +@lilypond[quote,relative=1,verbatim] +<< + \new RhythmicStaff { + \new Voice = "myRhythm" { + \time 4/4 + c4 e8 f g2 + r4 g g f + g1 + } + } + \new Lyrics { + \lyricsto "myRhythm" { + This is my song + I like to sing + } + } +>> +@end lilypond + +@cindex Gitarren-Akkordnotation +@cindex Schlagrhythmus, Gitarre +@cindex Gitarrenschlagrhythmus, Notation + +@funindex Pitch_squash_engraver +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +Akkordnotation für Gitarren bezeichnet auch oft zusätzlich den +geschlagenen Rhythmus. Das kann notiert werden unter Verwendung +des @code{Pitch_squash_engraver} und indem Tonhöhenimprovisation +eingeschaltet wird mit @code{\improvisationOn}. + +@lilypond[quote,verbatim] +<< + \new ChordNames { + \chordmode { + c1 f g c + } + } + + \new Voice \with { + \consists Pitch_squash_engraver + } \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } +>> +@end lilypond + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{guitar-strum-rhythms.ly} + +@seealso +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{RhythmicStaff}, +@rinternals{Pitch_squash_engraver}. + + + +@node Balken +@subsection Balken +@translationof Beams + +@menu +* Automatische Balken:: +* Einstellung von automatischen Balken:: +* Manuelle Balken:: +* Gespreizte Balken:: +@end menu + + +@node Automatische Balken +@unnumberedsubsubsec Automatische Balken +@translationof Automatic beams + +LilyPond setzt Balken (engl. beam) automatisch. + +@cindex Balken, Einstellungen +@cindex Balken, eigene Regeln +@cindex automatische Bebalkung +@cindex Balken, automatisch +@cindex eigene Balkenregeln + +@funindex \autoBeamOn +@funindex autoBeamOn +@funindex \autoBeamOff +@funindex autoBeamOff + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c8 c c c +\time 6/8 c8 c c c8. c16 c8 +@end lilypond + +Wenn diese automatischen Entscheidungen nicht gut genug sind, können +die Balken auch explizit eingegeben werden, siehe +@ref{Manuelle Balken}. Balken @emph{müssen} auch auf diese Weise eingegeben +werden, wenn sie über Pausen hinwegreichen sollen. + +Wenn automatische Bebalkung nicht benötigt wird, kann sie mit dem Befehl @code{\autoBeamOff} +aufgehoben werden und mit dem Befehl @code{\autoBeamOn} wieder +eingeschaltet werden. + +@lilypond[quote,relative=1,verbatim] +c4 c8 c8. c16 c8. c16 c8 +\autoBeamOff +c4 c8 c8. c16 c8. +\autoBeamOn +c16 c8 +@end lilypond + +@cindex Melismen, Balken +@cindex Balken und Melismen + +@warning{Wenn Balken eingesetzt werden, um Melismen in Gesang zu notieren, +sollte die automatische Bebalkung mit @code{\autoBeamOff} ausgeschaltet +werden und die Balken manuell notiert werden.} + +@warning{Wenn @code{@bs{}partcombine} mit @code{@bs{}autoBeamOff} benutzt +wird, können ungewünschte Resultate auftreten. Siehe die Schnipsel unten +für mehr Information.} + +Balkenmuster, die sich von den automatisch erstellen unterscheiden, +können erstellt werden, siehe @ref{Einstellung von automatischen Balken}. + +@predefined +@code{\autoBeamOff}, +@code{\autoBeamOn}. +@endpredefined + + + +@funindex breakable + +@cindex Zeilenumbruch, Balken +@cindex Balken, Zeilenumbrüche +@cindex Balken mit Knie +@cindex weit außeinander liegende Balken +@cindex auto-knee-gap + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beams-across-line-breaks.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-beam-knee-gap.ly} + +@cindex Balken, \partcombine und \autoBeamOff +@cindex Stimmen, \autoBeamOff und \partcombine + +@lilypondfile [verbatim, lilyquote, ragged-right, texidoc, doctitle] +{partcombine-and-autobeamoff.ly} + +@seealso +Notationsreferenz: +@ref{Manuelle Balken}, +@ref{Einstellung von automatischen Balken}. + +Installierte Dateien: +@file{scm/auto-beam.scm}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}, +@rinternals{unbreakable-spanner-interface}. + + +@node Einstellung von automatischen Balken +@unnumberedsubsubsec Einstellung von automatischen Balken +@translationof Setting automatic beam behavior + +@cindex autobeam +@cindex Verändern von automatischer Bebalkung +@cindex Bebalkung, automatisch, Einstellungen +@cindex Text und Balken +@cindex Gesangstext und Balken +@cindex Balken und Gesangstext + +@funindex autoBeaming +@funindex beatStructure +@funindex beamExceptions +@funindex measureLength +@funindex baseMoment +@funindex \time +@funindex time +@funindex \set +@funindex set + +In den meisten Fällen enden automatische Balken am Ende eines Taktes. +Die Endpunkte für Schläge werden durch die Kontexteigenschaften +@code{baseMoment} und @code{beatStructure} bestimmt. @code{beatStructure} +ist eine Scheme-Liste, die die Länge jedes Schlages im Takt in +Einheiten von @code{baseMoment} angibt. Der Standard von +@code{baseMoment} ist Eins durch den Numerator der Taktangabe. Der +Standardwert jeder Längeneinheit @code{baseMoment} ist ein +einzelner Taktschlag. + + +@lilypond[quote,relative=2,verbatim] +\time 5/16 +c16^"default" c c c c | +\set Timing.beatStructure = #'(2 3) +c16^"(2+3)" c c c c | +\set Timing.beatStructure = #'(3 2) +c16^"(3+2)" c c c c | +@end lilypond + +Balkenregelveränderungen können auf bestimmte Kontexte beschränkt +werden. Wenn keine Regeln in einen unteren Kontext definiert +sind, gelten die Regeln des höheren Kontext, in dem sich der +niedrigere befindet. + +@lilypond[quote, verbatim,relative=1] +\new Staff << + \time 7/8 + \set Staff.beatStructure = #'(2 3 2) + \new Voice = one { + \relative c'' { + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \set Voice.beatStructure = #'(1 3 3) + f8 f f f f f f + } + } +>> +@end lilypond + +Wenn mehrere Stimmen eingesetzt werden, muss der @code{Staff}-Kontext +definiert werden, wenn die Balkenregeln auf alle Stimmen des +Systems angewendet werden sollen: + +@lilypond[quote,verbatim,relative=2] +\time 7/8 +% rhythm 3-1-1-2 +% Context applied to Voice by dafault -- does not work correctly +% Because of autogenerated voices, all beating will +% be at baseMoment (1 . 8) +\set beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> + +% Works correctly with context Staff specified +\set Staff.beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> +@end lilypond + +Der Wert von @code{baseMoment} kann angepasst werden, um das +Bebalkungsverhalten zu ändern, wenn gewünscht. In diesem Fall +muss der Wert von @code{beatStructure} so gesetzt werden, dass +er kompatibel mit dem neuen Wert von @code{baseMoment} ist. + +@lilypond[quote,verbatim,relative=2] +\time 5/8 +\set Timing.baseMoment = #(ly:make-moment 1 16) +\set Timing.beatStructure = #'(7 3) +\repeat unfold 10 { a16 } +@end lilypond + +@code{baseMoment} ist ein @i{Moment}, eine Einheit an musikalischer +Dauer. Eine Anzahl vom Typus @i{Moment} wird durch die Scheme-Funktion +@code{ly:make-moment} erstellt. Zu mehr Information über diese Funktion +siehe @ref{Verwaltung der Zeiteinheiten}. + +Der Standardwert von @code{baseMoment} ist Eins durch den Denominator +der Taktangabe. Alle Ausnahmen dieses Standards finden sich in der Datei +@file{scm/time-signature-settings.scm}. + +Besondere automatische Bebalkungsregeln (außer dass ein Balken auf einem +Taktschlag aufhört) sind in der @code{beamExceptions}-Eigenschaft +definiert. + +@lilypond[quote,relative=2,verbatim] +\time 3/16 +\set Timing.beatStructure = #'(2 1) +\set Timing.beamExceptions = + #'( ;start of alist + (end . ;entry for end of beams + ( ;start of alist of end points + ((1 . 32) . (2 2 2)) ;rule for 1/32 beams -- end each 1/16 + ))) %close all entries +c16 c c | +\repeat unfold 6 { c32 } | +@end lilypond + +@code{beamExceptions} ist eine Aliste mit einem Schlüssel der Regeltypen +(rule-type) und einem Wert der Bebalkungsregeln (beaming-rules). + +Im Moment ist der einzige mögliche rule-type @code{#'end} für ein +Balkenende. + +Beaming-rules ist eine Scheme-Aliste (oder eine paarige Liste), die +den Balkentyp und die Gruppierung anzeigt, die auf Balken angewendet +werden, welche Noten mit einer kürzesten Dauer des Balkentyps enthalten. + +@example +#'((beam-type1 . grouping-1) + (beam-type2 . grouping-2) + (beam-type3 . grouping-3)) +@end example + +Beam-type ist ein Scheme-Paar, das die Dauer eines Balkens anzeigt, +etwa @code{(1 . 16)} für ein Sechszehntel. + +Grouping ist eine Scheme-Liste, die die auf den Balken anzuwendene +Gruppierung anzeigt. Die Gruppierung wird in Einheiten des +Balkentyps angegeben. + +@warning{Ein @code{beamExceptions}-Wert muss eine @emph{vollständige} +Ausnahme-Liste sein. Das heißt, dass jede Ausnahme, die angewendet werden +soll, auch in die Einstellungen mit aufgenommen werden muss. Es ist nicht +möglich, nur eine der Einstellungen zu ändern, zu entfernen oder hinzuzufügen. +Das mag seltsam erscheinen, bedeutet aber, dass die aktuellen +Balkenregeln bekann sein müssen, um ein neues Bebalkungsmuster definieren zu können.} + +Wenn die Taktart geändert wird, werden neue Standardwerte für +@code{Timing.baseMoment}, @code{Timing.beatStructure} und +@code{Timing.beamExceptions} definiert. Wenn die Taktart +definiert wird, werden die automatischen Bebalkungsregeln für den +@code{Timing}-Kontext auf den Standard zurückgesetzt. + +@lilypond[quote,verbatim,relative=2] +\time 6/8 +\repeat unfold 6 { a8 } +% group (4 + 2) +\set Timing.beatStructure = #'(4 2) +\repeat unfold 6 { a8 } +% go back to default behavior +\time 6/8 +\repeat unfold 6 { a8 } +@end lilypond + +Die automatischen Standardeinstellungen für die Bebalkung einer +Taktart werden in der Datei @file{scm/time-signature-settings.scm} +bestimmt. Änderungen der automatischen Bebalkungsregeln für eine Taktart +werden in @ref{Taktangabe} beschrieben. + +Die meisten automatischen Bebalkungsregeln für eine Taktart enthalten einen +Eintrag für @code{beamExceptions}. Beispielsweise wird in einem 4/4-Takt +versucht, den Takt in zwei Hälfen zu teilen, wenn nur Achtelnoten vorkommen. +Die @code{beamExceptions}-Regel kann die @code{beatStructure}-Einstellung +überschreiben, wenn @code{beamExceptions} nicht zurückgesetzt wird: + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +\set Timing.baseMoment = #(ly:make-moment 1 8) +\set Timing.beatStructure = #'(3 3 2) +% This won't beam (3 3 2) because of beamExceptions +\repeat unfold 8 {c8} | +% This will beam (3 3 2) because we clear beamExceptions +\set Timing.beamExceptions = #'() +\repeat unfold 8 {c8} +@end lilypond + +Auf die gleiche Art werden im 3/4-Takt Achtelnoten als ganzer Takt bebalkt. +Um Achtelnoten im 3/4-Takt auf jeder Taktzeit zu bebalken, muss +@code{beamExceptions} zurückgesetzt werden: + +@lilypond[quote,verbatim,relative=2] +\time 3/4 +% by default we beam in (3) due to beamExceptions +\repeat unfold 6 {a8} | +% This will beam (1 1 1) due to beatLength +\set Timing.beamExceptions = #'() +\repeat unfold 6 {a8} +@end lilypond + +@i{@strong{Wie die automatische Bebalkung funktioniert}} + +Wenn die automatische Bebalkung aktiviert ist, wird die Platzierung +der automatischen Balken durch die Kontexteigenschaften +@code{baseMoment}, @code{beatStructure} und @code{beamExceptions} +bestimmt. + +Die folgenden Regeln, in der Reihenfolge ihrer Priorität, gelten, wenn das Aussehen der Balken bestimmt wird: + +@itemize + +@item +Wenn ein manueller Balken mit @code{[...]} definiert ist, wird er gesetzt, andernfalls + +@item +wenn eine Balkenendung-Regel für den Balkentyp in +@code{beamExceptions} definiert ist, wird sie verwendet, um die +gültigen Plätze für Balkenenden zu berechnen, andernfalls + +@item +wenn eine Balkenendung-Regel für einen größeren Balkentyp +in @code{beamExceptions} definiert ist, wird sie verwendet, +um die gültigen Plätze für Balkenenden zu berechnen, andernfalls + +@item +benutze die Werte von @code{baseMoment} und @code{beatStructure}, +um die Enden der Balken im Takt zu definieren und beende Balken +am Ende jedes Taktes. + +@end itemize + +In den oben genannten Regeln ist der Balkentyp die Dauer der +kürzesten Note der bebalkten Gruppe. + +Die Standardbebalkungsregeln finden sich in der Datei +@file{scm/time-signature-settings.scm}. + + +@snippets + +@cindex Balken, Unterteilung + +@funindex subdivideBeams + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{subdividing-beams.ly} + +@cindex Taktgruppen +@cindex Schlaggruppen +@cindex Taktschläge gruppieren +@cindex Takt unterteilen +@cindex Unterteilen von Takten + +@funindex autoBeamSettings + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{conducting-signs,-measure-grouping-signs.ly} + +@cindex Balken, letzter in Partitur +@cindex Balken, letzter in polyphoner Stimme + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beam-endings-in-score-context.ly} + +@seealso +Installierte Dateien: +@file{scm/beam-settings.scm}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}. + + +@knownissues +Wenn eine Partitur endet, während ein automatischer Balken noch +nicht beendet wurde und weiterhin Noten erwartet, wird dieser +letzte Balken nicht ausgegeben. Das Gleiche gilt auch für +polyphone Stimmen, die mit der +@code{<< @dots{} \\ @dots{} >>}-Konstruktion notiert wurden. Wenn eine +polyphone Stimme endet, während ein Balken noch weitere Noten +erwartet, wird der Balken nicht gesetzt. Eine Notlösung für +dieses Probelm ist, den letzten Balken in der Stimme oder +Partitur manuell zu setzen. + +Die Standardeinstellungen weisen den dem +@code{Score}-Kontext zu. Das bedeutet, dass das Setzen der +Taktart (time signature) in einem System sich auch auf die Bebalkung +der anderen Systeme auswirkt. Darum verändert eine neue Taktart in einem +späteren System auch alle früher vorgenommenen eigenen Einstellungen +der Bebalkung eines anderen Systems. Eine Möglichkeit, dieses Problem zu +vermeiden, ist es, die Taktart nur in einem System zu setzen. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \time 3/4 + \set Timing.baseMoment = #(ly:make-moment 1 8) + \set Timing.beatStructure = #'(1 5) + \repeat unfold 6 { a8 } + } + \new Staff { + \repeat unfold 6 { a8 } + } +>> +@end lilypond + +Die Standardbebalkungsregeln für die Taktart können auch verändert +werden, sodass die gewünschte Bebalkung immer benützt wird. Veränderungen +der automatischen Bebalkungsregeln für eine Taktart sind in +@ref{Taktangabe} beschrieben. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \overrideTimeSignatureSettings + #'(3 . 4) % timeSignatureFraction + #'(1 . 8) % baseMomentFraction + #'(1 5) % beatStructure + #'() % beamExceptions + \time 3/4 + \repeat unfold 6 { a8 } + } + \new Staff { + \time 3/4 + \repeat unfold 6 { a8 } + } +>> +@end lilypond + + +@node Manuelle Balken +@unnumberedsubsubsec Manuelle Balken +@translationof Manual beams + +@cindex manuelle Balken +@cindex Balken, manuell + +@funindex ] +@funindex [ + +In einigen Fällen kann es nötig sein, den automatischen Algorithmus +für die Balken zu überschreiben. Die automatischen Balken werden +beispielsweise nicht über Pausen oder Taktlinien hinweg gesetzt, und +in Gesang werden die Balken oft nach dem Rhythmus des Textes und +nicht dem der Musik gesetzt. +Manuell definierte Balken werden mit den Zeichen @code{[} und +@code{]} (AltGr+8 bzw. 9) markiert. + +@lilypond[quote,relative=1,verbatim] +r4 r8[ g' a r] r g[ | a] r +@end lilypond + +@cindex manuelle Balken, Richtung zuweisen +@cindex manuelle Balken, Verzierungen +@cindex Verzierungen, manuelle Bebalkung + +Die Richtung von Balken kann mit den Richtungszeichen verändert werden: + +@lilypond[quote,relative=2,verbatim] +c8^[ d e] c,_[ d e f g] +@end lilypond + +@funindex \noBeam +@funindex noBeam + +Einzelne Noten können mit dem Befehl @code{\noBeam} markiert werden, +damit sie nicht mit einem Balken versehen werden. + +@lilypond[quote,ragged-right,fragment,verbatim,relative=2] +\time 2/4 c8 c\noBeam c c +@end lilypond + +Balken von Verzierungsnoten und normale Balken können gleichzeitig +gesetzt werden. Unbebalkte Verzierungen werden nicht innerhalb von +normalen Balken gesetzt. + +@lilypond[quote,verbatim,relative=2] +c4 d8[ +\grace { e32[ d c d] } +e8] e[ e +\grace { f16 } +e8 e] +@end lilypond + +@funindex stemLeftBeamCount +@funindex stemRightBeamCount + +Noch bessere manuelle Kontrolle über die Balken kann durch Setzen +der Eigenschaften @code{stemLeftBeamCount} und +@code{stemRightBeamCount} erreicht werden. Sie bestimmen +die Anzahl von Balken, die rechts und links vom Hals der nächsten +Note gesetzt werden sollen. Wenn eine Eigenschaften gesetzt ist, +wird ihr Wert nur einmal eingesetzt und dann wieder auf Null gesetzt. +Im folgenden Beispiel hat das letzte @code{f} nur einen Balken +an seiner linken Seite (der als Achtelbalken der gesamten +Gruppe gewertet wird). + +@lilypond[quote,relative=2,verbatim] +a8[ r16 f g a] +a8[ r16 +\set stemLeftBeamCount = #2 +\set stemRightBeamCount = #1 +f16 +\set stemLeftBeamCount = #1 +g16 a] +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{flat-flags-and-beam-nibs.ly} + +@seealso +Notationsreferenz: +@ref{Richtung und Platzierung}, +@ref{Verzierungen}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{Beam_engraver}, +@rinternals{beam-interface}, +@rinternals{Stem_engraver}. + + +@node Gespreizte Balken +@unnumberedsubsubsec Gespreizte Balken +@translationof Feathered beams + +@cindex Balken, gespreizt +@cindex gespreizte Balken + +@funindex featherDurations +@funindex \featherDurations +@funindex grow-direction + +Gespreizte Balken werden teilweise eingesetzt um anzuzeigen, dass +kleine Notengruppen in beschleunigendem oder verlangsamendem Tempo +gespielt werden sollen, ohne dass sich das Tempo des Stückes +verändert. Die Reichweite der gespreizten Balken muss manuell +mit @code{[} und @code{]} angegeben werden und die Spreizung wird +kontrolliert, indem der Balken-Eigenschaft @code{grow-direction} +eine Richtung zugewiesen wird. + +Wenn die Anordnung der Noten und die MIDI-Ausgabe das @emph{Ritardando} +oder @emph{Accelerando}, wie es die Spreizung angibt, reflektieren soll, +müssen die Noten als ein musikalischer Ausdruck notiert werden, +der von geschweiften Klammern umgeben ist und dem ein +@code{featheredDurations}-(gespreizteDauern)-Befehl vorangestellt +ist, der das Verhältnis der ersten und letzten Dauer definiert. + +Die eckigen Klammern geben die Reichweite des Balkens an und die +geschweiften Klammern zeigen, auf welche Noten sich die Veränderung +der Dauern auswirkt. Normalerweise bezieht sich das auf die +selbe Notengruppe, aber das ist nicht unbedingt erforderlich: beide +Befehle sind unabhängig voneinander. + +Im folgenden Beispiel nehmen die acht 16-Noten exakt die gleiche +Zeit ein wie eine halbe Note, aber die erste Note ist halb so lang +wie die letzte der Gruppe, und die Noten dazwischen werden stufenweise +verlängert. Die ersten vier 32-Noten beschleunigen stufenweise +das Tempo, während die darauffolgenden vier 32-Noten ein +gleichmäßiges Tempo haben. + +@lilypond[relative=1,verbatim,quote] +\override Beam #'grow-direction = #LEFT +\featherDurations #(ly:make-moment 2 1) +{ c16[ c c c c c c c] } +\override Beam #'grow-direction = #RIGHT +\featherDurations #(ly:make-moment 2 3) +{ c32[ d e f] } +% revert to non-feathered beams +\override Beam #'grow-direction = #'() +{ g32[ a b c] } +@end lilypond + +@noindent +Die Platzierung der Noten im Druckbild entspricht den Notendauern +nur annähernd, aber die MIDI-Ausgabe ist exakt. + +@predefined +@code{\featherDurations}. +@endpredefined + +@seealso +Snippets: +@rlsr{Rhythms}. + +@knownissues + +Der @code{\featherDurations}-Befehl funktioniert nur mit kurzen +Notenabschnitten, und wenn die Zahlen in den Brüchen klein +sind. + + +@node Takte +@subsection Takte +@translationof Bars + +@menu +* Taktstriche:: +* Taktzahlen:: +* Takt- und Taktzahlüberprüfung:: +* Übungszeichen:: +@end menu + +@node Taktstriche +@unnumberedsubsubsec Taktstriche +@translationof Bar lines + +@c wrong word on purpose here: +@cindex Taktlinien +@cindex Taktstriche +@cindex Doppellinie +@cindex schließende Taktstriche +@cindex Taktstriche, schließend +@cindex Doppelter Taktstrich +@cindex Taktstrich, doppelt +@cindex Wiederholungszeichen + +@funindex \bar +@funindex bar + +Taktstriche trennen Takte voneinander, werden aber auch verwendet, +um Wiederholungen anzuzeigen. Normalerweise werden sie automatisch +nach Vorgabe der aktuellen Taktart eingefügt. + +Die einfachen, automatisch eingefügten Taktstriche können mit dem +@code{\bar}-Befehl geändert werden. Eine doppelter Taktstrich etwa +wird normalerweise am Ende eines Stückes gesetzt: + +@lilypond[quote,relative=1,verbatim] +e4 d c2 \bar "|." +@end lilypond + +Es ist kein Fehler, wenn die letzte Note in einem Takt nicht +zum automatisch eingefügten Taktstrich aufhört: es wird angenommen, +dass die Note im nächsten Takt weitergeht. Wenn aber eine ganze +Reihe solcher überlappenden Takte auftritt, können die Noten +gedrungen aussehen oder sogar über den Seitenrand hinausragen. Das +kommt daher, dass Zeilenumbrüche nur dann vorgenommen werden, wenn +ein vollständiger Takt auftritt, also ein Takt, an dem alle Noten +vor dem Taktstrich zu Ende sind. + +@warning{Eine falsche Dauer kann bewirken, dass Zeilenumbrüche +verhindert werden, woraus resultiert, dass die Noten entweder +sehr stark gedrängt auf der Zeile notiert werden, oder die Zeile +über den Seitenrand hinausragt.} + +@cindex Zeilenumbrüche +@cindex unsichtbare Taktstriche +@cindex Taktstriche, unsichtbar +@cindex Taktlinien, unsichtbar + +Zeilenumbrüche werden erlaubt, wenn ein Taktstrich manuell eingefügt +wird, auch, wenn es sich um keinen vollständigen Takt handelt. Um +einen Zeilenumbruch zu erlauben, ohne den Taktstrich auszugeben, +kann + +@example +\bar "" +@end example + +@noindent +benutzt werden. Damit wird ein unsichtbarer Taktstrich an dieser Stelle eingefügt +und damit ein Zeilenumbruch erlaubt (aber nicht erzwungen), ohne +dass sich die Anzahl der Takte erhöhen würde. Um einen +Zeilenumbruch zu erzwingen, siehe +@ref{Zeilenumbrüche}. + +@cindex manuelle Taktstriche +@cindex Taktstriche, manuell +@cindex Taktlinie, manuell + +Diese Taktstrichart und auch andere besondere Taktstriche +können manuell an jeder Stelle in der Partitur eingefügt werden. +Wenn sie mit dem Ende eines Taktes übereinstimmen, wird der +automatische Taktstrich durch den manuellen ersetzt. Diese +manuellen Einfügungen haben keine Auswirkung auf die Zählung und +Position der folgenden automatischen Taktstriche. + +Dabe gilt zu beachten, dass manuell gesetzten Taktstriche nur +visuell sichtbar sind. Sie wirken sich auf keine der Eigenschaften +aus, die ein normaler Taktstrich beeinflussen würde, wie etwa +Taktzahlen, Versetzungszeichen, Zeilenumbrüche usw. Sie beeinflussen +auch nicht die Berechnung und Platzierung von weiteren automatischen +Taktstrichen. Wenn ein manueller Taktstrich dort gesetzt wird, wo +ein automatischer Taktstrich sowieso wäre, werden die Auswirkungen +des originalen Taktstriches nicht verändert. + +Manuell können zwei einfache Taktstriche und zusätzlich fünf Arten +eines doppelten Taktstriches gesetzt werden: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|" +f1 \bar "." +g1 \bar "||" +a1 \bar ".|" +b1 \bar ".|." +c1 \bar "|.|" +d1 \bar "|." +e1 +@end lilypond + +Zusätzlich gibt es noch punktierte und gestrichelte Taktstriche: + +@lilypond[quote,relative=1,verbatim] +f1 \bar ":" +g1 \bar "dashed" +a1 +@end lilypond + +@noindent +und fünf unterschiedliche Wiederholungstaktstriche: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|:" g \bar ":|:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|" d +@end lilypond + +Zusätzlich kann eine Taktlinie mit einem einfachen Apostroph gesetzt werden: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|:" +g1 \bar ":|:" +a1 \bar ":|.|:" +b1 \bar ":|.:" +c1 \bar ":|" +e1 +@end lilypond + +Zusätzliche kann ein Taktstrich auch nur als kleines Komma gesetzt +werden: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "'" +@end lilypond + +Derartige Apostrophe werden allerdings vor allem im gregorianischen +Choral eingesetzt, und es wird empfohlen, anstatt dessen +@code{\divisioMinima} zu benutzen, wie beschrieben im Abschnitt +@ref{Divisiones}. + +@cindex segno + +Für @emph{segno}-Zeichen innerhalb des Systems gibt es drei +Taktstricharten, die sich in ihrem Verhalten an Zeilenumbrüchen +unterscheiden: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "S" +c4 c c c \break +\bar "S" +c4 c c c +\bar "|S" +c4 c c c \break +\bar "|S" +c4 c c c +\bar "S|" +c4 c c c \break +\bar "S|" +c1 +@end lilypond + +@cindex Wiederholungen + +Auch wenn die Taktlinien, die Wiederholungen angeben, manuell +eingefügt werden können, wird die Wiederholung dadurch nicht von +LilyPond erkannt. Wiederholte Stellen werden besser notiert, indem +man die Wiederholungs-Befehle einsetzt, die automatische die +richtigen Taktlinien setzen. Das ist beschrieben in@ref{Wiederholungszeichen}. + +Zusätzlich kann noch @code{"||:"} verwendet werden, dass sich +genauso wie @code{"|:"} verhält, außer bei Zeilenumbrüchen, wo ein +doppelter Taktstrich am Ende der Zeile ausgegeben wird und ein +öffnender Wiederholungsstrich am Anfang der nächsten Zeile. + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "||:" +c4 c c c \break +\bar "||:" +c4 c c c +@end lilypond + +Für Kombinationen von Wiederholungen mit dem segno-Zeichen gibt +es sechs verschiedene Variationen: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar ":|S" +c4 c c c \break +\bar ":|S" +c4 c c c +\bar ":|S." +c4 c c c \break +\bar ":|S." +c4 c c c +\bar "S|:" +c4 c c c \break +\bar "S|:" +c4 c c c +\bar ".S|:" +c4 c c c \break +\bar ".S|:" +c4 c c c +\bar ":|S|:" +c4 c c c \break +\bar ":|S|:" +c4 c c c +\bar ":|S.|:" +c4 c c c \break +\bar ":|S.|:" +c1 +@end lilypond + +In Partituren mit vielen Systemen wird ein @code{\bar}-Befehl in einem +System automatisch auf alle anderen Systeme angewendet. Die resultierenden +Taktstriche sind miteinander verbunden innerhalb einer Gruppe +(@code{StaffGroup}) oder einem Klaviersystem +(@code{PianoStaff} bzw. (@code{GrandStaff}). + +@lilypond[quote,relative=1,verbatim] +<< + \new StaffGroup << + \new Staff { + e4 d + \bar "||" + f4 e + } + \new Staff { \clef bass c4 g e g } + >> + \new Staff { \clef bass c2 c2 } +>> +@end lilypond + +@cindex Standardtaktstrich, Änderung +@cindex Taktstriche, Änderung von Standard + + +@snippets + +@funindex whichBar +@funindex defaultBarType +@funindex \bar +@funindex bar +@funindex bartype + +Der Befehl @code{\bar }@var{Taktart} ist eine Kurzform von: +@code{\set Timing.whichBar = }@var{Taktart}. Immer, wenn +@code{whichBar} auf einen Wert gesetzt wird, wird ein +Taktstrich dieses Typs erzeugt. + +Der automatisch erzeugte Taktstrich ist @code{"|"}. Das kann +jederzeit durch den Befehl @code{\set Timing.defaultBarType = } +@var{Taktstrichart} geändert werden. + +@seealso +Notationsreferenz: +@ref{Zeilenumbrüche}, +@ref{Wiederholungszeichen}, +@ref{Systeme gruppieren}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{BarLine} (erstellt auf @rinternals{Staff}-Ebene), +@rinternals{SpanBar} (über Systeme), +@rinternals{Timing_translator} (für Timing-Eigenschaften). + + + +@node Taktzahlen +@unnumberedsubsubsec Taktzahlen +@translationof Bar numbers + +@cindex Taktnummern +@cindex Nummerierung von Takten +@cindex Zahl eines Taktes +@cindex Taktzahlen + +@funindex currentBarNumber + +Taktzahlen werden standardmäßig zu Beginn eines jeden Systems +ausgegeben, ausgenommen ist die erste Zeile. Die Zahl selber +wird in der @code{currentBarNumber}-Eigenschaft gespeichert, die +normalerweise für jeden Takt aktualisiert wird. Sie kann aber auch +manuell gesetzt werden: + +@lilypond[verbatim,quote,fragment,relative=1] +c1 c c c +\break +\set Score.currentBarNumber = #50 +c1 c c c +@end lilypond + +@cindex Taktzahlen, gleichmäßige Abstände + +@funindex barNumberVisibility +@funindex BarNumber + +Taktnummern können in regelmäßigem Abstand ausgegeben werden, +anstatt dass sie nur am Beginn des Systems erscheinen. Um das +zu erreichen, muss die Standardeinstellung verändert werden, um +zu erlauben, dass Taktnummern an anderen Stellen als dem +Beginn von Systemen ausgegeben werden. Das wird mit der +Eigenschaft @code{break-visibility} von @code{BarNumber} vorgenommen. +Sie braucht drei Werte, die auf @code{#t} (wahr) oder @code{#f} +(falsch) gestellt werden können, womit angegeben wird, ob die +Taktnummer an der entsprechenden Stelle sichtbar ist. Die +Reihenfolge der Werte ist: @var{Ende der Zeile}, @var{Mitte +der Zeile} und @var{Beginn der Zeile}. Im folgenden +Beispiel werden die Taktlinien überall ausgegeben: + +@lilypond[verbatim,quote,relative=1] +\override Score.BarNumber #'break-visibility = #'#(#t #t #t) +\set Score.currentBarNumber = #11 +% Permit first bar number to be printed +\bar "" +c1 | c | c | c +\break +c1 | c | c | c +@end lilypond + + +@cindex Taktnummer, Form +@cindex Aussehen von Taktnummern + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-the-bar-number-for-the-first-measure.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-at-regular-intervals.ly} + +@cindex Ausrichtung von Taktlinien +@cindex Taktlinien, Ausrichtung + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-inside-boxes-or-circles.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{aligning-bar-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{removing-bar-numbers-from-a-score.ly} + + +@seealso +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{BarNumber}, +@rinternals{Bar_number_engraver}. + +@cindex Taktnummern, Zusammenstöße +@cindex Zusammenstöße, Taktnummern + +@knownissues +Taktnummern können mit der oberen Ecke der Klammer zu Beginn des +Systems zusammenstoßen. Um das zu verhindert, kann die +@code{padding}-Eigenschaft von @code{BarNumer} verwendet werden, +um die Zahl zu verschieben. Für mehr Information siehe +@rinternals{StaffgGroup} und @rinternals{BarNumber}. + + +@node Takt- und Taktzahlüberprüfung +@unnumberedsubsubsec Takt- und Taktzahlüberprüfung +@translationof Bar and bar number checks + +@cindex Taktüberprüfung + +@funindex barCheckSynchronize +@funindex | + +Die Taktüberprüfung hilft, Fehler in den Notendauern zu entdecken. +Eine Taktüberprüfung wird mit dem Taktstrichsymbol @qq{|} (Taste AltGr+<) +eingegeben. Immer, wenn LilyPond bei der Ausgabe des Notendrucks +auf dieses Zeichen stößt, sollte hier in den Noten auch ein +Taktstrich erscheinen. Wenn das nicht der Fall ist, wird eine Warnung +ausgegeben. Im nächsten Beispiel resultiert die zweite Taktüberprüfung +in einer Fehlermeldung. + +@example +\time 3/4 c2 e4 | g2 | +@end example + +Taktüberprüfungen können auch in Gesangstexten verwendet werden: + +@example +\lyricmode @{ + \time 2/4 + Twin -- kle | Twin -- kle +@} +@end example + +Besonders in mehrstimmiger komplizierter Musik können +falschen Notenwerte die ganze Partitur durcheinander bringen. +Es lohnt sich also, die Fehlersuche damit zu beginnen, nicht bestandene +Taktüberprüfungen zu kontrollieren. + +Wenn aufeinander folgende Taktüberprüfungen mit dem gleichen +Abstand Fehler produzieren, wird eventuell nur die erste Warnung +ausgegeben. Damit wird die Warnung auf den Ursprung de Fehlers +fokussiert. + +@funindex | +@funindex pipeSymbol + +Es ist auch möglich, die Bedeutung des Symbols @code{|} (Pipe) +umzudefinieren, so dass hiermit eine andere Aktion als eine +Taktüberprüfung erreicht wird. +Das geschieht, indem man der Pipe (@code{pipeSymbol} einen musikalischen +Ausdruck zuweist. Im nächsten Beispiel wird @code{|} dazu +verwendet, eine doppelte Taktlinie auszugeben, woimmer man +das Zeichen auch setzt. Gleichzeitig hört das Zeichen auf, +als Taktüberprüfung zu funktionieren. + +@lilypond[quote,verbatim] +pipeSymbol = \bar "||" +{ + c'2 c' | + c'2 c' + c'2 | c' + c'2 c' +} +@end lilypond + +@funindex \barNumberCheck +@funindex barNumberCheck + +Wenn man größere Musikstücke kopiert, kann es hilfreich sein, wenn +LilyPond überprüft, ob die Taktnummer, in der Sie gerade kopieren, +mit der des Originales übereinstimmt. Das kann mit dem Befehl +@code{\barNumberCheck} folgenderweise überprüft werden: + +@verbatim +\barNumberCheck #123 +@end verbatim + +@noindent +Eine Warnung wird ausgegeben, wenn der interne Zähler +@code{currentBarNumber} von LilyPond +nicht mit dem Wert 123 übereinstimmt. + +@seealso +Schnipsel: +@rlsr{Rhythms}. + + +@node Übungszeichen +@unnumberedsubsubsec Übungszeichen +@translationof Rehearsal marks + +@cindex Übungszeichen +@cindex Abschnitte markieren +@cindex Markieren von Abschnitten + +@funindex mark +@funindex \mark + +Übungszeichen können mit dem @code{\mark}-Befehl ausgegeben werden: + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +Das Zeichen wird automatisch um einen Wert heraufgesetzt, wenn man +@code{\mark \default} benutzt, aber man kann auch eine Ganzzahl +als Argument einsetzen, wenn man das Zeichen manuell setzen will. +Der Wert, der eingesetzt werden soll, wird in der Eigenschaft +@code{rehearsalMark} gespeichert. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +Der Buchstabe@tie{}@qq{I} wird ausgelassen, was den allgemeinen +Notensatzregeln entspricht. Wenn Sie dennoch den Buchstaben +@qq{I} benutzen, wollen, müssen Sie einen der folgenden Stile benutzen, +je nachdem, was für einen Übungszeichenstil Sie wollen (Buchstaben, +Buchstaben in einem Kasten, Buchstaben in einem Kreis). + +@example +\set Score.markFormatter = #format-mark-alphabet +\set Score.markFormatter = #format-mark-box-alphabet +\set Score.markFormatter = #format-mark-circle-alphabet +@end example + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-box-alphabet +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@cindex Übungszeichen formatieren +@cindex Stil von Übungszeichen +@cindex Übungszeichenstil +@cindex Art der Übungszeichen +@cindex Zeichen, Übung: Formatierung +@cindex manuelles Übungszeichen +@cindex Formatierung von Übungszeichen + +Der Stil der Übungszeichen wird von der Eigenschaft @code{markFormatter} definiert. Das ist eine Funktion, die +das aktuelle Zeichen und den aktuellen Kontext als Argument +annimmt. Sie gibt dann ein Textbeschriftungsobjekt aus. Im +folgenden Beispiel ist @code{markFormatter} so definiert, dass +eine Zahl ausgegeben wird. Dann wird ein Übungszeichen in einem +Kasten produziert. + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-numbers +c1 \mark \default +c1 \mark \default +\set Score.markFormatter = #format-mark-box-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-letters +c1 +@end lilypond + +Die Datei @file{scm/translation-functions.scm} beinhaltet +die Definitionen für @code{format-mark-numbers} (erstelle-Zeichen-Nummern), +@code{format-mark-box-numbers} (erstelle-Zeichen-Kasten-Nummern), +@code{format-mark-letters} (erstelle-Zeichen-Buchstaben) und +@code{format-mark-box-letters} (erstelle-Zeichen-Kasten-Buchstaben). Sie können als Anleitung +für eigene Formatierungsfunktionen dienen. + +Die Funktionen @code{format-mark-barnumbers}, +@code{format-mark-box-barnumbers}und +@code{format-mark-circle-barnumbers} könenn eingesetzt werden, +um Taktnummern anstelle der fortlaufenden Zahlen bzw. Buchstaben +zu erhalten. + +Andere Übungszeichenstile können auch manuell gesetzt werden: + +@example +\mark "A1" +@end example + +@noindent +@code{Score.markFormatter} hat keine Auswirkungen auf solcherart +definierte Zeichen. Man kann aber auch mit @code{\markup} +Textbeschriftungsobjekte zu dem selbstdefinierten Zeichen +hinzufügen: + +@example +\mark \markup@{ \box A1 @} +@end example + +@cindex Segno +@cindex Coda +@cindex D.S. al Fine +@cindex Dal Segno +@cindex Fermate +@cindex Noten-Schriftzeichen +@cindex Schriftzeichen, Notenschrift +@cindex Musikbuchstaben + +@funindex \musicglyph +@funindex musicglyph + +Musikbuchstaben (wie etwa das Segno-Zeichen) können mit dem Befehl +@code{\musicglyph} als ein +@code{\mark}-Zeichen definierte werden: + +@lilypond[quote,verbatim,relative=1] +c1 \mark \markup { \musicglyph #"scripts.segno" } +c1 \mark \markup { \musicglyph #"scripts.coda" } +c1 \mark \markup { \musicglyph #"scripts.ufermata" } +c1 +@end lilypond + +@noindent +Siehe @ref{Die Feta-Schriftart}, wo alle Symbole gezeigt sind, die +mit dem Befehl @code{\musicglyph} ausgegeben werden können. + +Übliche Veränderungen der Positionierung von Übungszeichen finden +sich in @ref{Text formatieren}. Zu noch präzieserer Kontrolle +siehe @code{break-alignable-interface} in @ref{Objekte ausrichten}. + +@seealso +Notationsreferenz: +@ref{Die Feta-Schriftart}, +@ref{Text formatieren}, +@ref{Objekte ausrichten}. + +Installierte Dateien: +@file{scm/translation-functions.scm} beinhaltet die Definition +von @code{format-mark-numbers} und +@code{format-mark-letters}. Sie können als Anleitung für eigene +Funktionen benutzt werden. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + + +@node Besondere rhythmische Fragen +@subsection Besondere rhythmische Fragen +@translationof Special rhythmic concerns + +@menu +* Verzierungen:: +* An Kadenzen ausrichten:: +* Verwaltung der Zeiteinheiten:: +@end menu + +@node Verzierungen +@unnumberedsubsubsec Verzierungen +@translationof Grace notes + +@funindex \grace +@funindex grace + +@cindex Verzierungen +@cindex Ziernoten +@cindex Vorhalt +@cindex Vorschlag +@cindex Ornamente + +Verzierungen, mit dem Befehl @code{\grace} notiert, sind ausgeschriebene +Ornamente. Sie werden in einer kleineren Schriftgröße gesetzt und nehmen +keine logische Zeit im Takt ein. + +@lilypond[quote,relative=2,verbatim] +c4 \grace c16 c4 +\grace { c16[ d16] } c2 +@end lilypond + +LilyPond hat auch Unterstützung für zwei besondere Verzierungen, +den Vorschlag (engl. acciaccatura) und den Vorhalt (engl appogiatura). + Der Vorschlag wird durch eine verkleinerte Note mit Schrägstrich +und Bogen notiert. Der Vorhalt dagegen ist eine Verzierung, die +einen bestimmten Notenwert der Hauptnote für sich beansprucht. +Er wird als verkleinerte Note ohne Schrägstrich notiert. + +@lilypond[quote,relative=2,verbatim] +\grace c8 b4 +\acciaccatura d8 c4 +\appoggiatura e8 d4 +\acciaccatura { g16[ f] } e4 +@end lilypond + +Die Position von Verzierungen ist zwischen Notensystemen +synchronisiert. Im nächsten Beispiel stehen im einen +System zwei 16-Noten für jede 8-Note des zweiten Systems: + +@lilypond[quote,relative=2,verbatim] +<< \new Staff { e2 \grace { c16[ d e f] } e2 } + \new Staff { c2 \grace { g8[ b] } c2 } >> +@end lilypond + +@funindex \afterGrace +@funindex afterGrace + +@cindex Verzierung, danach +@cindex Nachschlag + +Wenn Sie eine Note mit einer Verzierung abschließen wollen, müssen +Sie den @code{\afterGrace}-Befehl benutzen. Er benötigt zwei +Argumente: die Hauptnote und die Verzierung, die nach der +Hauptnote folgen soll: + +@lilypond[quote,verbatim,relative=2] +c1 \afterGrace d1 { c16[ d] } c1 +@end lilypond + +Damit wird die Verzierung mit einem Abstand von der Hauptnote +gesetzt, der 3/4 der Dauer der Hauptnote entspricht. Dieser +Standard kann durch Definition von @code{afterGraceFraction} +verändert werden. Das nächste Beispiel zeigt, wie sich +der Abstand verändert, wenn der Wert 3/4, 15/16 und 1/2 der +Hauptnote beträgt. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 15 16)) + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 1 2)) + c1 \afterGrace d1 { c16[ d] } c1 + } +>> +@end lilypond + +Der Abstand zwischen der Hauptnote und der Verzierung kann auch +mit unsichtbaren Noten beeinflusst werden. Im nächsten Beispiel +wird die Verzierung mit einem Abstand von 7/8 zur Hauptnote +gesetzt. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + << { d1^\trill_( } + { s2 s4. \grace { c16[ d] } } >> + c1) +} +@end lilypond + +@cindex Veränderung von Verzierungsnoten +@cindex Verzierungen verändern +@cindex Verzierungen, Aussehen verändern + +Ein @code{\grace}-Notenabschnitt wird nach besonderen Satzregeln +gesetzt, um z. B. kleinere Noten zu benutzen und die Richtung der +Hälse einzustellen. Veränderungen am Layout müssen also innerhalb +des Verzierungsausdrucks gesetzt werden, damit sie auch eine Auswirkung haben. Die Veränderungen müssen auch innerhalb des +Verzierungsausdrucks rückgängig gemacht werden. In diesem +Fall wird die Richtung der Hälse geändert und dann wieder der +Standard eingestellt: + +@lilypond[quote,verbatim,relative=2] +\new Voice { + \acciaccatura { + \stemDown + f16-> + \stemNeutral + } + g4 e c2 +} +@end lilypond + +@cindex Hals, mit Schrägstrich +@cindex durchgestrichener Hals +@cindex Notenhals, durchgestrichen + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-grace-note-slashes-with-normal-heads.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-grace-layout-within-music.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{redefining-grace-note-global-defaults.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-grace-notes-with-floating-space.ly} + + + +@seealso +Glossar: +@rglos{grace notes}, +@rglos{acciaccatura}, +@rglos{appoggiatura}. + +Notationsreferenz: +@ref{Manuelle Balken}. + +Installierte Dateien: +@file{ly/grace-init.ly}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{GraceMusic}, +@rinternals{Grace_beam_engraver}, +@rinternals{Grace_engraver}, +@rinternals{Grace_spacing_engraver}. + + +@knownissues + +@cindex Vorschlag, mehrere Noten +@cindex mehrnotiger Vorschlag +@cindex Synchronisation von Verzierungen +@cindex Verzierungen, Synchronisation + +Ein Vorschlag (@emph{acciaccatura}) mit mehreren Noten und +Balken wird ohne den Schrägstrich gesetzt und sieht einem +Vorhalt (@emph{appoggiatura}) sehr ähnlich. + +@c TODO Add link to LSR snippet to add slash when available + +Die Synchronisation von Verzierungen kann auch zu Überraschungen führen. +Auch andere Symbole der Systeme, wie Vorzeichen, Taktlinien usw., werden +synchronisiert. Vorsicht ist geboten, wenn nur in bestimmten Systemen +Verzierungen vorkommen: + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" d2. } +>> +@end lilypond + +@noindent +Dem kann abgeholfen werden, indem unsichtbare Verzierungsnoten der selben +Länge in die anderen Systeme gesetzt werden. Im obigen Beispiel müsste +also + +@lilypond[quote,ragged-right,relative=2,verbatim,fragment] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" \grace s16 d2. } +>> +@end lilypond + +@noindent +gesetzt werden. + +Der Einsatz von Verzierungsnoten innerhalb von Stimmen-Kontexten +kann den Notensatz der Stimme verwirren. Dieses Problem kann +umgangen werden, indem man eine Note oder Pause zwischen dem +@code{Voice}-Befehl und der Verzierungsnote setzt. + +@lilypond[quote,verbatim] +accMusic = { + \acciaccatura { f8 } e8 r8 \acciaccatura { f8 } e8 r4 +} + +\new Staff { + << + \new Voice { + \relative c'' { + r8 r8 \voiceOne \accMusic \oneVoice r8 | + r8 \voiceOne r8 \accMusic \oneVoice r8 | + } + } + \new Voice { + \relative c' { + s8 s8 \voiceTwo \accMusic \oneVoice s8 | + s8 \voiceTwo r8 \accMusic \oneVoice s8 | + } + } + >> +} +@end lilypond + +Verzierungsabschnitte sollten nur innerhalb von sequentiellen musikalischen +Ausdrücken benützt werden. Wenn sie ineinandergeschachtelt werden, kann es +zu Fehlermeldungen oder Abstürzen kommen. + + +@node An Kadenzen ausrichten +@unnumberedsubsubsec An Kadenzen ausrichten +@translationof Aligning to cadenzas + +@cindex Kadenz, Ausrichten an +@cindex Ausrichten an Kadenz + +In Orchesterpartituren stellen Kadenzen ein besonderes Problem dar: +Wenn in der Partitur ein Instrument eine Kadenz spielt, die notiert +wird, müssen die anderen Stimmen genau die entsprechende Anzahl Noten +überspringen, damit sie nicht zu früh oder zu spät einsetzen. + +Eine Lösung ist es, die Funktionen @code{mmrest-of-length} oder +@code{skip-of-length} zu benutzen. Diese Scheme-Funktionen +brauchen einen definierten Notenabschnitt (eine Variable) +als Argument und produzieren entweder Ganztaktpausen oder leere +Takte, die genauso lang sind wie der Notenabschnitt. + +@lilypond[verbatim,quote] +MyCadenza = \relative c' { + c4 d8 e f g g4 + f2 g4 g +} + +\new GrandStaff << + \new Staff { + \MyCadenza c'1 + \MyCadenza c'1 + } + \new Staff { + #(ly:export (mmrest-of-length MyCadenza)) + c'1 + #(ly:export (skip-of-length MyCadenza)) + c'1 + } +>> +@end lilypond + +@seealso +Glossar: +@rglos{cadenza}. + +Schnipsel: +@rlsr{Rhythms}. + + + +@node Verwaltung der Zeiteinheiten +@unnumberedsubsubsec Verwaltung der Zeiteinheiten +@translationof Time administration + +@cindex Verwaltung der Zeiteinheiten +@cindex Zeit (in der Partitur) +@cindex Noten ohne Takt +@cindex Takt, Noten ohne +@cindex Noten ohne Metrum +@cindex Metrum, Noten ohne + +@funindex currentBarNumber +@funindex measurePosition +@funindex measureLength + +Die Zeit in einer Partitur wird vom @code{Timing_translator} +verwaltet, der sich in den Standardeinstellungen im @code{Score}-Kontext +befindet. Eine Parallelbezeichnung, @code{Timing}, wird +dem Kontext hinzugefügt, in dem sich @code{Timing_translator} +befindet. Um sicherzugehen, dass @code{Timing} erhältlich ist, +muss man eventuell den enthaltenden Kontext manuell erstellen +(also etwa einen @code{Voice}- oder @code{Staff}-Kontext. + +Die folgenden Eigenschaften von @code{Timing} werden eingesetzt, +um die Zeit in Partituren zu verwalten. + +@cindex Taktnummer + +@table @code +@item currentBarNumber (aktuelle Taktnummer) +Die gerade aktuelle Taktzahl. Für ein Beispiel, das die Benutzung +dieser Eigenschaft zeigt, siehe @ref{Taktzahlen}. + +@item measureLength (Taktlänge) +Die Länge der Takte mit der aktuellen Taktart. In einem 4/4-Takt +ist sie 1, in einem 6/8-Takt 3/4. Dieser Wert bestimmt, wann +eine Taktlinie gezogen wird und wie automatische Balken erstellt +werden sollen. + +@item measurePosition (Taktposition) +Der Schlag im Takt zum aktuellen Moment. Dieser Wert wird +zurückgesetzt, indem @code{measureLength} (die Taktlänge) abgezogen +wird, wenn der Wert von @code{measureLength} erreicht oder +überschritten wird. Wenn das passiert, wird der Zähler +@code{currentBarNumber} (aktuelle Taktnummer) erhöht. + +@item timing (Zeitberechnung) +Wenn auf wahr gesetzt, werden die oben genannten Variablen +zu jedem Zeitpunkt aktualisiert. Wenn auf falsch gesetzt, +bleibt der Engraver unendlich lange im aktuellen Takt. + +@end table + +Zeitverwaltung kann geändert werden, indem man diese Variablen +direkt beeinflusst. Im nächsten Beispiel wird die normale +Taktart mit 4/4 angegeben, aber @code{measureLength} wird +auf 5/4 gesetzt. An der Stelle 4/8 des dritten Taktes wird die +Taktposition (@code{measurePosition}) um 1/8 auf 5/8 erhöht, so +dass der Takt im Ergebnis 1/8 kürzer ist. Die nächste Taktlinie +wird dann auch bei 9/8 gezogen und nicht bei 5/4. + +@lilypond[quote,verbatim,relative=1] +\set Score.measureLength = #(ly:make-moment 5 4) +c1 c4 +c1 c4 +c4 c4 +\set Score.measurePosition = #(ly:make-moment 5 8) +b4 b4 b8 +c4 c1 +@end lilypond + +@noindent +Wie das Beispiel zeigt, erstellt @code{ly:make-moment n m} +die Dauer Zähler/Nenner einer ganzen Note. Zum Beispiel heißt +@code{ly:make-moment 1 8} die Dauer einer Achtelnote, und +@code{ly:make-moment 7 16} die Dauer von sieben Sechszehntelnoten. + + +@seealso +Notationsreferenz: +@ref{Taktzahlen}, +@ref{Musik ohne Metrum}. + +Schnipsel: +@rlsr{Rhythms}. + +Referenz der Interna: +@rinternals{Timing_translator}, +@rinternals{Score} diff --git a/Documentation/de/notation/simultaneous.itely b/Documentation/de/notation/simultaneous.itely new file mode 100644 index 0000000000..188f52f269 --- /dev/null +++ b/Documentation/de/notation/simultaneous.itely @@ -0,0 +1,1106 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + +@node Gleichzeitig erscheinende Noten +@section Gleichzeitig erscheinende Noten +@translationof Simultaneous notes + +@lilypondfile[quote]{simultaneous-headword.ly} + +Polyphonie bedeutet in der musikalischen Terminologie das +Vorhandensein von mehr als einer (eigenständigen) Stimme +in einem Stück. Für LilyPond bedeutet es aber das Vorhandensein +von mehr als einer Stimme pro System. + +@menu +* Eine einzelne Stimme:: +* Mehrere Stimmen:: +@end menu + + +@node Eine einzelne Stimme +@subsection Eine einzelne Stimme +@translationof Single voice + +Dieser Abschnitt behandelt gleichzeitige Noten innerhalb +derselben Stimme. + +@menu +* Noten mit Akkorden:: +* Akkord-Wiederholungen:: +* Gleichzeitige Ausdrücke:: +* Cluster:: +@end menu + + +@node Noten mit Akkorden +@unnumberedsubsubsec Noten mit Akkorden +@translationof Chorded notes + +@cindex Akkorde +@cindex Klammern, spitze +@cindex spitze Klammern +@funindex < +@funindex > +@funindex <...> + +Ein Akkord wird notiert, indem die zu ihm gehörenden Tonhöhen +zwischen spitze Klammern (@code{<} und @code{>}) gesetzt werden. +Auf einen Akkord kann eine Dauer-Angabe folgen, genauso wie bei +einfachen Noten. + +@lilypond[verbatim,quote,relative=2] +1 2 4 8. 16 +@end lilypond + +Akkorde können auch von Artikulationen gefolgt werden, genau wie +auch einfache Noten. + +@lilypond[verbatim,quote,relative=2] +1\fermata 2-> 4\prall 8.^| 16-. +@end lilypond + +Die Noten innerhalb der Akkorde konnen auch von Artikulationen oder +Ornamenten gefolgt werden. + +@lilypond[verbatim,quote,relative=2] +1 c-^ e>2 4 8. 16 +@end lilypond + +Manche Notationselemente, wie etwa Dynamik, Crescendo-Klammern und +Legatobögen müssen an den gesamten Akkord gehängt werden und nicht +an einzelne Noten, damit sie ausgegeben werden. + +@lilypond[verbatim,quote,relative=2] +1 \f ( ) \< \! +@end lilypond + +@cindex relative Tonhöhe, Akkorde +@cindex Akkorde, relative Tonhöhe + +Der relative Modus kann auch für Tonhöhen in Akkorden eingesetzt werden. +Die erste Note eines Akkordes ist immer relativ zur ersten Note des +vorherigen Akkordes, oder mit der Tonhöhe der letzten Note vor dem +Akkord (wenn kein Akkord vorhergeht). Alle anderen Noten innerhalb +des Akkordes sind relativ zu der Note vorher innerhalb des selben Akkordes. + +@lilypond[verbatim,quote,relative=2] +1 +@end lilypond + +Mehr Information über Akkorden findet sich in @ref{Notation von Akkorden}. + +@seealso +Musikglossar: +@rglos{chord}. + +Handbuch zum Lernen: +@rlearning{Noten zu Akkorden verbinden}. + +Notationsreferenz: +@ref{Notation von Akkorden}, +@ref{Artikulationszeichen und Verzierungen}, +@ref{Relative Oktavenbezeichnung}, +@ref{Mehrere Stimmen}. + +Schnipsel: +@rlsr{Simultaneous notes}. + +@knownissues +Akkorde, die mehr als zwei Tonhöhen für einen Notenlinenzwischenraum enthalten +(wie etwa @samp{}) produzieren überlappende Notenköpfe. Abhängig von +der Situation kann eines der folgenden Dinge helfen, die Darstellung zu verbessern: + +@itemize + +@item +Kurzzeitig mehrere Stimmen benutzen, siehe @ref{Mehrere Stimmen}: +@samp{ >>}, + +@item +enharmonische Transkription für einen oder mehrere Tonhöhen vornehmen: +@samp{} oder + +@item +Cluster, siehe @ref{Cluster}. + +@end itemize + + +@node Akkord-Wiederholungen +@unnumberedsubsubsec Akkord-Wiederholungen +@translationof Chord repetition + +Um Schreibarbeit zu ersparen, kann ein Zeichen benutzt werden, um den +vorhergehenden Akkord zu wiederholen. Das Symbol hierzu ist @code{q}: + +@lilypond[verbatim,quote,relative=2] +1 q 2 q +@end lilypond + +Genauso wie normale Akkorde kann auch das Akkord-Wiederholungssymbol +in Verbindung mit Tondauern, Artikulationen, Beschriftungen, Legatobögen, +Balken usw. benutzt werden, weil nur die Tonhöhen des vorangehenden +Akkordes wiederholgt werden. + +@lilypond[verbatim,quote,relative=2] +1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +@end lilypond + +Das Akkord-Wiederholungssymbol behält keine Dynamikzeichen, Artikulationen +oder Ornamente, die in oder an den vorhergehenden Akkord gehängt waren. + +@lilypond[verbatim,quote,relative=2] +1\sfz c4 q2 r8 q8 +@end lilypond + +@seealso +Notationsreferenz: +@ref{Notation von Akkorden}, +@ref{Artikulationszeichen und Verzierungen}. + +Installierte Dateien: +@file{ly/chord-repetition-init.ly}. + + +@node Gleichzeitige Ausdrücke +@unnumberedsubsubsec Gleichzeitige Ausdrücke +@translationof Simultaneous expressions + +Eine oder mehrere musikalische Ausdrücke, die in doppelte spitze +Klammern eingeschlossen werden, werden gleichzeitig gesetzt. Wenn +der erste Ausdruck mit einer einzelnen Note beginnt oder die +gesamte Konstruktion explizit in einer einzelnen Stimme erstellt +wird, wird auch nur ein Notensystem erstellt. In anderem Falle +werden die Elemente der simultanen Konstruktion auf unterschiedlichen +Systemen gesetzt. + +Das nächste Beispiel zeigt simultane Konstruktionen auf einem +System: + +@lilypond[quote,verbatim,relative=2] +\new Voice { % explicit single voice + << { a4 b g2 } { d4 g c,2 } >> +} +@end lilypond + +@lilypond[quote,verbatim,relative=2] +% single first note +a << { a4 b g } { d4 g c, } >> +@end lilypond + +Dass kann benutzt werden, wenn die simultanen Abschnitte einen +identischen Rhythmus haben, aber wenn versucht wird, Noten mit +unterschiedlicher Dauer an denselben Hals zu setzen, gibt es +Fehlermeldungen. + +Das nächste Beispiel zeigt, wie ein simultaner Ausdruck implizit +mehrere Systeme erstellt: + +@lilypond[quote,verbatim,relative=2] +% no single first note +<< { a4 b g2 } { d4 g2 c,4 } >> +@end lilypond + +In diesem Fall stellt der unterschiedliche Rhythmus kein Problem dar. + + +@node Cluster +@unnumberedsubsubsec Cluster +@translationof Clusters + +@cindex Cluster +@cindex Notencluster + +@funindex \makeClusters +@funindex makeClusters + +Ein Cluster zeigt an, dass alle Tonhöhen in einem Bereich gleichzeitig +gespielt werden sollen. Cluster können gedeutet werden als eine +Zusammenfassung einer ganzen Anzahl von Noten. Sie werden notiert, +indem die Funktion @code{\makeClusters} auf eine Reihe von Akkorden +angewendet wird: + +@lilypond[quote,relative=2,verbatim] +\makeClusters { 2 } +@end lilypond + +Normale Noten und Cluster können zusammen im selben System notiert +werden, sogar gleichzeitig. In solchen Fällen wird nicht versucht, +automatisch Zusammenstöße zwischen normalen Noten und Clustern +aufzulösen. + +@seealso +Musikglossar: +@rglos{cluster}. + +Schnipsel: +@rlsr{Simultaneous notes}. + +Referenz der Interna: +@rinternals{ClusterSpanner}, +@rinternals{ClusterSpannerBeacon}, +@rinternals{Cluster_spanner_engraver}. + +@knownissues + +Cluster sehen nur gut aus, wenn sie wenigstens über zwei Akkorde +reichen -- andernfalls sind sie zu schmal. + +Cluster haben keine Hälse und können auch selber keine Dauern +darstellen, aber die Länge des gesetzten Clusters wird erschlossen +anhand der Dauern der definierten Akkorde. Voneinander getrennte +Cluster brauchen eine unsichtbare Pause zwischen sich. + +Cluster produzieren kein MIDI. + + +@node Mehrere Stimmen +@subsection Mehrere Stimmen +@translationof Multiple voices + +Dieser Abschnitt behandelt gleichzeitige Noten in mehreren Stimmen +oder mehreren Systemen. + +@menu +* Mehrstimmigkeit in einem System:: +* Stimmenstile:: +* Auflösung von Zusammenstößen:: +* Automatische Kombination von Stimmen:: +* Musik parallel notieren:: +@end menu + +@node Mehrstimmigkeit in einem System +@unnumberedsubsubsec Mehrstimmigkeit in einem System +@translationof Single-staff polyphony + +@cindex Mehrstimmigkeit, ein System +@cindex ein System, Mehrstimmigkeit +@cindex Polyphonie, ein System +@cindex Stimme +@cindex Voice +@cindex Gesangstext, einer Stimme zugewiesen +@cindex Mehrstimmigkeit +@cindex Polyphonie +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceOne ... \voiceFour +@funindex Voice +@funindex \oneVoice +@funindex oneVoice + +@strong{@i{Stimmen explicit beginnen}} + +Die grundlegende Struktur, die man benötigt, um mehrere +unabhängige Stimmen in einem Notensystem zu setzen, +ist im Beispiel unten dargestellt: + +@lilypond[quote,relative=3,verbatim] +\new Staff << + \new Voice = "first" + { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } + \new Voice= "second" + { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +@noindent +Stimmen werden hier explizit erstellt und erhalten Bezeichnungen +zugewiesen. Die @code{\voiceOne} ... @code{\voiceFour}-Befehle +stellen die Stimmen so ein, dass für die erste und dritte Stimme +die Hälse nach oben zeigen, für die zweite und vierte Stimme +hingegen nach unten. Die Noten der dritten und vierten Stimme +werden horizontal verschoben, und Pausen in den entsprechenden +Stimmen werden automatisch verschoben, um Zusammenstöße zu +vermeiden. Der @code{\oneVoice}-Befehl stellt das Standardverhalten +mit neutralen Halsrichtungen wieder her. + +@strong{@i{Vorübergehende polyphone Passagen}} + +Ein vorübergehender polyphoner Abschnitt kann mit folgender +Konstruktion erstellt werden: + +@example +<< @{ \voiceOne ... @} + \new Voice @{ \voiceTwo ... @} +>> \oneVoice +@end example + +@noindent +Der erste Ausdruck innerhalb des polyphonen Abschnitts wird in +den @code{Voice}-Kontext gestellt, der unmittelbar vor dem +polyphonen Abschnitt aktiv war, und der gleiche @code{Voice}-Kontext +setzt sich nach dem Abschnitt fort. Andere Ausdrücke innerhalb +der eckigen Klammern werden anderen Stimmennummern zugewiesen. +Damit lassen sich auch Gesangstexte einer durchgehenden Stimme +vor, während und nach dem polyphonen Abschnitt zuweisen: + +@lilypond[quote, verbatim, relative=2] +<< + \new Voice = "melody" { + a4 + << + { + \voiceOne + g f + } + \new Voice { + \voiceTwo + d2 + } + >> + \oneVoice + e4 + } + \new Lyrics \lyricsto "melody" { + This is my song. + } +>> +@end lilypond + +@noindent +Hierbei sind die Befehle @code{\voiceOne} und @code{\voiceTwo} notwendig, um die Einstellungen für jede Stimme zu +initialisieren. + + +@strong{@i{Die Konstruktion mit doppeltem Backslash}} + +Die @code{<< @{...@} \\ @{...@} >>}-Konstruktion, in welcher +die beiden (oder mehreren) Ausdrücke durch doppelte +Backslash-Zeichen (Taste AltGr+ß) getrennt werden, verhält +sich anderes als die ähnliche Konstruktion ohne die doppelten +Schrägstriche: @emph{alle} Ausdrücke innerhalb der eckigen +Klammern werden in diesem Fall jeweils neuen @code{Voice}-Kontexten +zugeordnet. Diese neuen @code{Voice}-Kontexte werden implizit +erstellt und haben die festen Bezeichnungen @code{"1"}, +@code{"2"} usw. + +Das erste Beispiel könnte also auch wie folgt notiert werden: + +@lilypond[quote,relative=3,verbatim] +<< + { r8 r16 g e8. f16 g8[ c,] f e16 d } + \\ + { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +Diese Syntax kann benutzt werden, wenn es keine Rolle spielt, +ob vorübergehend Stimmen erstellt werden und dann wieder +verworfen werden. Diese implizit erstellten Stimmen erhalten +die Einstellungen, die in den Befehlen +@code{\voiceOne} ... @code{\voiceFour} enthalten sind, in +der Reihenfolge, in der sie im Quelltext auftauchen. + +Im nächsten Beispiel zeigen die Hälse der zeitweiligen Stimme +nach oben, sie wird deshalb erst als dritte in der Konstruktion +notiert, damit sie die Eigenschaften von @code{voiceThree} +zugewiesen bekommt. Unsichtbare Pause werden eingesetzt, damit +keine doppelten Pausen ausgegeben werden. + +@lilypond[quote,relative=3,verbatim] +<< + { r8 g g g g f16 ees f8 d } + \\ + { ees,8 r ees r d r d r } + \\ + { d'8 s c s bes s a s } +>> +@end lilypond + +Es wird sehr empfohlen, in allen außer den allereinfachsten +Stücken explizite Stimmenkontexte zu erstellen, wie erklärt in@rlearning{Kontexte und Engraver} und +@rlearning{Stimmen explizit beginnen}. + +@strong{@i{Stimmen-Anordnung}} + +Wenn mehrere Stimmen notiert werden, sollte folgende Anordnung eingehalten +werden: + +@example +Stimme 1: höchste +Stimme 2: tiefste +Stimme 3: zweithöchste +Stimme 4: zweittiefste +Stimme 5: dritthöchste +Stimme 6: dritttiefste +usw. +@end example + +Auch wenn das erst nicht einleuchtend erscheint, erleichtert es den +automatischen Layoutprozess doch sehr. Die ungeraden Stimmen erhalten +Hälse nach oben, die graden Stimmen Hälse nach unten: + +@lilypond[quote,verbatim] +\new Staff << + \time 2/4 + { f''2 } % 1: highest + \\ + { c'2 } % 2: lowest + \\ + { d''2 } % 3: second-highest + \\ + { e'2 } % 4: second-lowest + \\ + { b'2 } % 5: third-highest + \\ + { g'2 } % 6: third-lowest +>> +@end lilypond + +@strong{@i{Identische Rhythmen}} + +Wenn parallele Abschnitte gesetzt werden sollen, +die identischen Rhythmus haben, kann man die Ausdrücke in +einen einzigen @code{Voice}-Kontext parallel kombinieren, sodass +sich Akkorde ergeben. Um das zu erreichen, müssen sie einfach +von spitzen Klammern innerhalb einer expliziten Stimme +umgeben werden: + +@lilypond[quote,relative=2,verbatim] +\new Voice << + { e4 f8 d e16 f g8 d4 } + { c4 d8 b c16 d e8 b4 } +>> +@end lilypond + +Mit dieser Methode können sich seltsame Balken und Warnungen +ergeben, wenn die Musikausdrücke nicht den gleichen Rhythmus haben. + +@predefined +@code{\voiceOne}, +@code{\voiceTwo}, +@code{\voiceThree}, +@code{\voiceFour}, +@code{\oneVoice}. +@endpredefined + +@seealso +Handbuch zum Lernen: +@rlearning{Voice enthält Noten}, +@rlearning{Stimmen explizit beginnen}. + +Notationsreferenz: +@ref{Schlagzeugsysteme}, +@ref{Unsichtbare Pausen}, +@ref{Hälse}. + +Schnipsel: +@rlsr{Simultaneous notes}. + + +@node Stimmenstile +@unnumberedsubsubsec Stimmenstile +@translationof Voice styles + +@cindex Voice-Stile +@cindex Stile, Stimmen +@cindex Stimmen, Stile +@cindex Färben von Stimmen +@cindex Einfärben von Stimmen +@cindex Stimmen, farbige Unterscheidung +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Stimmen können unterschiedliche Farben erhalten, um einfach +erkennbar zu sein: + +@lilypond[quote,relative=2,verbatim] +<< + { \voiceOneStyle d4 c2 b4 } + \\ + { \voiceTwoStyle e,2 e } + \\ + { \voiceThreeStyle b2. c4 } + \\ + { \voiceFourStyle g'2 g } +>> +@end lilypond + +Der @code{\voiceNeutralStyle}-Befehl wird benutzt, um wieder +die Standardausgabe einzuschalten. + +@predefined +@code{\voiceOneStyle}, +@code{\voiceTwoStyle}, +@code{\voiceThreeStyle}, +@code{\voiceFourStyle}, +@code{\voiceNeutralStyle}. +@endpredefined + +@seealso +Handbuch zum Lernen: +@rlearning{Ich höre Stimmen}, +@rlearning{Mehr Information}. + +Schnipsel: +@rlsr{Simultaneous notes}. + + + +@node Auflösung von Zusammenstößen +@unnumberedsubsubsec Auflösung von Zusammenstößen +@translationof Collision resolution + +@cindex Noten verschmelzen +@cindex Verschmelzen von Noten +@cindex Zusammenstöße +@cindex Notenzusammenstöße +@cindex Verschieben von Noten +@cindex viele Stimmen +@cindex Stimmen, mehrere +@cindex mehrere Stimmen +@cindex Polyphonie +@cindex Stimmen verschieben +@cindex Pausen verschieben, automatisch +@cindex Verschieben von Pausen, automatisch +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn +@funindex \shiftOff +@funindex shiftOff +@funindex \mergeDifferentlyDottedOn +@funindex mergeDifferentlyDottedOn +@funindex \mergeDifferentlyDottedOff +@funindex mergeDifferentlyDottedOff +@funindex \mergeDifferentlyHeadedOn +@funindex mergeDifferentlyHeadedOn +@funindex \mergeDifferentlyHeadedOff +@funindex mergeDifferentlyHeadedOff + +Die Notenköpfe von Noten in unterschiedlichen Stimmen mit derselben +Tonhöhe, demselben Notenkopf und den Hälsen in entgegengesetzte +Richtungen werden automatisch verschmolzen, aber Noten mit +unterschiedlichen Köpfen oder den Hälsen in die selbe Richtung +werden nicht verschmolzen. Pausen, die einem Hals in einer +anderen Stimme gegenüberstehen, werden vertikal verschoben. Das +folgende Beispiel zeigt drei unterschiedliche Situationen, auf +Taktposition 1 und 3 in Takt 1 und Taktposition 1 in Takt 2, wo das +automatische Verschmelzen nicht funktioniert. + +@lilypond[quote,verbatim,relative=2] +<< + { + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Noten mit unterschiedlichen Notenköpfen können verschmolzen +werden, mit der Ausnahme von Halben- und Viertelnotenköpfen, wie +im Beispiel unten gezeigt. Hier werden die Notenköpfe auf Taktposition +1 im ersten Takt verschmolzen: + +@lilypond[quote,verbatim,relative=2] +<< + { + \mergeDifferentlyHeadedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Auch Köpfe mit unterschiedlichen Punktierungen wie auf Taktposition +3 im ersten Takt können verschmolzen werden: + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Die Halbe und die Achtel am Anfang des zweiten Taktes werden +fehlerhaft verschmolzen, weil die automatische Verschmelzung +nicht richtig arbeiten +kann, wenn drei oder mehr Noten zur gleichen Zeit auftreten -- +und in diesem Fall ist der verschmolzene Notenkopf nicht richtig. +Um das Verschmelzen zuzulassen, muss ein @code{\shift} (Verschiebung) +auf die Note angewendet werden, die nicht verschmolzen werden soll. +In diesem Fall wurde +@code{\shiftOn} gesetzt, um das oberste @notation{g} aus der +Kolumne zu entfernen. Jetzt funktioniert +@code{\mergeDifferentlyHeadedOn} (verschmelze Noten mit unterschiedlichen +Köpfen) so wie es soll. + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + \shiftOn + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Der @code{shiftOn}-Befehl ermöglicht die Noten einer Stimme zu verschieben, +erzwingt dieses Verhalten aber nicht. Wenn @code{shiftOn} auf eine Stimme +angewendet wird, eine Note oder ein Akkord in der Stimme wird nur verschoben, +wenn sein Hals mit dem Hals der Note einer anderen Stimme kollidieren würde, +und nur, wenn der Hals der Kollisionsnote in die gleiche Richtung zeigt. +Der @code{shiftOff}-Befehl verhindert, dass eine derartige Verschiebung +stattfinden kann. + +Die äußeren Stimmen (also normalerweise Stimmen 1 und 2) haben als Standard +@code{shiftOff} eingestellt, während die inneren Stimmen (3 und mehr) +@code{shiftOn} definiert haben. Wenn eine Verschiebung stattfindet, werden +Stimmen mit den Hälsen nach oben (also ungerade Stimmen) nach rechts verschoben, +während Stimmen mit den Hälsen nach unten (also gerade Stimmen) nach links +verschoben werden. + +Hier ein Beispiel, das verstehen hilft, wie ein verkürzter polyphonischer +Abschnitt intern ausgeweitet wird. + +@warning{Wenn Sie drei oder mehr Stimmen haben, sollte die vertikale Anordnung +der Stimmen in der Eingabedatei nicht die gleiche sein wie die vertikale +Anordnung der Stimmen im Notensystem!} + +@lilypond[quote,verbatim] +\new Staff \relative c'' { + %% abbreviated entry + << + { f2 } % 1: highest + \\ + { g,2 } % 2: lowest + \\ + { d'2 } % 3: upper middle + \\ + { b2 } % 4: lower middle + >> + %% internal expansion of the above + << + \new Voice = "1" { \voiceOne \shiftOff f'2 } + \new Voice = "2" { \voiceTwo \shiftOff g,2 } + \new Voice = "3" { \voiceThree \shiftOn d'2 } % shifts right + \new Voice = "4" { \voiceFour \shiftOn b2 } % shifts left + >> +} +@end lilypond + +Zwei zusätzliche Befehle, @code{shiftOnn} und @code{shiftOnnn} stellen +weitere Verschiebungsebenen zu verfügung, die vorübergehend eingesetzt +werden können um Zusammenstöße in komplizierten Situationen aufzulösen. +Siehe auch @rlearning{Beispiel aus dem Leben}. + +Noten werden nur verschmolzen, wenn ihre Hälse in entgegengesetzte +Richtungen zeigen (also etwa wie @code{Voice} 1 und 2 in den +Standardeinstellungen oder wenn die Hälse explizit in unterschiedliche +Richtungen gedreht sind). + + +@predefined +@code{\mergeDifferentlyDottedOn}, +@code{\mergeDifferentlyDottedOff}, +@code{\mergeDifferentlyHeadedOn}, +@code{\mergeDifferentlyHeadedOff}, +@code{\shiftOn}, +@code{\shiftOnn}, +@code{\shiftOnnn}, +@code{\shiftOff}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{additional-voices-to-avoid-collisions.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{forcing-horizontal-shift-of-notes.ly} + +@seealso +Musikglossar: +@rglos{polyphony}. + +Handbuch zum Lernen: +@rlearning{Mehrere Noten auf einmal}, +@rlearning{Voice enthält Noten}, +@rlearning{Beispiele aus dem Leben}. + +Schnipsel: +@rlsr{Simultaneous notes}. + +Referenz der Interna: +@rinternals{NoteColumn}, +@rinternals{NoteCollision}, +@rinternals{RestCollision}. + +@ignore +@knownissues + +@c TODO investigate! Sometimes it works, sometimes not. --FV +The requirements for successfully merging different note heads that +are at the same time differently dotted are not clear. +@end ignore + + +@node Automatische Kombination von Stimmen +@unnumberedsubsubsec Automatische Kombination von Stimmen +@translationof Automatic part combining + +@cindex automatische Kombination von Stimmen +@cindex Stimmen kombinieren +@cindex Kombinieren von Stimmen +@cindex a due-Stellen +@cindex solo-Stellen +@funindex \partcombine +@funindex partcombine + +Automatische Kombination von Stimmen wird verwendet, um zwei +Stimmen auf einem Notensystem zu setzen. Es wird vor allem +in Orchesterpartituren eingesetzt. Wenn beide Stimmen für +einige Noten identisch sind, wird nur eine dargestellt. +An den Stellen, an denen die beiden Stimmen sich unterscheiden, +werden sie als unterschiedliche Stimmen gesetzt, und die +Richtung der Hälse wird automatisch bestimmt. Zusätzlich +werden @notation{solo} und @notation{a due}-Stellen erkannt +und bezeichnet. + +Die Syntax zur Stimmenkombination lautet: + +@example +\partcombine @var{musikAusdr1} @var{musikAusdr2} +@end example + +Das nächste Beispiel zeigt, wie die Kombination funktioniert. +Hier werden die Stimmen erst auf einem jeweils eigenen System +und dann kombiniert gesetzt, beachten Sie, wie sich +die Einstellungen für Polyphonie ändern. + +@lilypond[quote,verbatim] +instrumentOne = \relative c' { + 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 +} + +<< + \new Staff \instrumentOne + \new Staff \instrumentTwo + \new Staff \partcombine \instrumentOne \instrumentTwo +>> +@end lilypond + +Die Noten des dritten Taktes werden nur einfach ausgegeben, obwohl +sie ein beiden Stimmen definiert sind. Die Richtung von Hälsen und +Bögen werden automatisch gewählt, abhängig davon ob es eine +Solo-Stelle oder Unisono ist. In polyphonen Situationen erhält +die erste Stimme immer Hälse nach oben, die zweite Stimme +Hälse nach unten. An Solo-Stellen werden die Stimmen mit +@qq{Solo} bzw. @qq{Solo II} bezeichnet. Die Unisono-Stellen +(@notation{a due}) werden mit dem Text @qq{a2} gekennzeichnet. + +Beide Argumente von @code{\partcombine} werden als +@code{Voice}-Kontexte interpretiert. Wenn relative Oktaven +benutzt werden, muss @code{\relative} für beide Stimmen +benutzt werden, also: + +@example +\partcombine + \relative @dots{} @var{musikAusdr1} + \relative @dots{} @var{musikAusdr2} +@end example + +@noindent +Ein @code{\relative}-Abschnitt, der sich außerhalb von@code{\partcombine} befindet, hat keinen Einfluss auf +die Tonhöhen von @code{@var{musikAusdr1}} oder @code{@var{musikAusdr2}}. + +In professionellen Partituren werden Stimmen oft für lange Strecken auseinander +gehalten, auch wenn eine oder mehrere Noten tatsälich aufeinander treffen und +einfach als Unisono gesetzt werden könnten. Noten zu Akkorden zusammenzufassen +oder eine Stimme als Solo anzuzeigen ist darum nicht ideal, weil die +@code{\partcombine}-Funktion jede Note separat betrachtet. Aus diesem +Grund kann die @code{\partcombine}-Funktion mit folgenden Befehlen verändert +werden: + +@itemize +@item +@code{\partcombineApart}, @code{\partcombineApartOnce}: +Behält die Noten als zwei unterschiedliche Stimmen, auch wenn sie als Akkord +oder Unisono kombiniert werden könnten. + +@item +@code{\partcombineChords}, @code{\partcombineChordsOnce}: +Kombiniert die Noten als Akkord. + +@item +@code{\partcombineUnisono}, @code{\partcombineUnisonoOnce}: +Die zwei Stimmen sind Unisono. + +@item +@code{\partcombineSoloI}, @code{\partcombineSoloIOnce}: +Zeigt nur Stimme eins und markiert sie als Solo. + +@item +@code{\partcombineSoloII}, @code{\partcombineSoloIIOnce}: +Zeigt nur Stimme zwei und markiert sie als Solo. + +@item +@code{\partcombineAutomatic}, @code{\partcombineAutomaticOnce}: +Beendet die Wirkung der Sonderbefehle weiter oben und stellt das +normale Verhalten des Kombinationsmechanismus wieder her. + +@end itemize + +Alle Befehle die auf @code{...Once} enden, gelten nur für die darauf +folgende 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 | +} +instrumentTwo = \relative c' { + c2 c | + e2 e | + a,2 c | + c2 c' | + c2 c | + c2 c | +} + +<< + \new Staff { \instrumentOne } + \new Staff { \instrumentTwo } + \new Staff { \partcombine \instrumentOne \instrumentTwo } +>> +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{combining-two-parts-on-the-same-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-partcombine-texts.ly} + +@seealso +Musikglossar: +@rglos{a due}, +@rglos{part}. + +Notationsreferenz: +@ref{Orchesterstimmen erstellen}. + +Schnipsel: +@rlsr{Simultaneous notes}. + +Referenz der Interna: +@rinternals{PartCombineMusic}, +@rinternals{Voice}. + +@knownissues + +@code{\partcombine} kann nur zwei Stimmen bearbeiten. + +Wenn @code{printPartCombineTexts} (drucke Stimmenkombinationstext) +gesetzt ist und die Stimmen die gleichen Noten wiederholt +spielen, kann @code{a2} in einem Takt mehrmals gesetzt werden. + +@code{\partcombine} kann nicht innerhalb von @code{\times} benutzt +werden. + +@code{\partcombine} kann nicht innerhalb von @code{\relative} +benutzt werden. + +Intern werden beide Argumente von @code{\partcombine} als +Stimmen (@code{Voice}) interpretiert und entschieden, wann +die Stimmen kombiniert werden können. Wenn sie unterschiedliche +Dauern haben, können sie nicht kombiniert werden und erhalten +die Bezeichnung @code{one} und @code{two} Darum werden +Wechsel zu einem @code{Voice}-Kontext, der eine andere +Bezeichnung hat, ignoriert. Genausowenig ist die Stimmenkombination +dazu ausgelegt, Gesangstext zu verarbeiten: wenn eine der +Stimmen eine explizite Bezeichnung erhält, damit Text damit +verknüpft werden kann, hört die Stimmenkombination auf zu +arbeiten. + +@code{\partcombine} findet nur den Beginn von Noten. Es kann +nicht bestimmen, ob eine vorher begonnene Noten weiterklingt, +was zu verschiedenen Problemen führen kann. + + +@node Musik parallel notieren +@unnumberedsubsubsec Musik parallel notieren +@translationof Writing music in parallel + +@cindex Parallele Notation, Eingabe +@cindex Eingabe von Noten parallel +@cindex Verschachtelte Musik +@funindex \parallelMusic +@funindex parallelMusic + +Noten für mehrere Stimmen können verschachtelt notiert werden. +Die Funktion @code{\parallelMusic} akzeptiert eine Liste mit +den Bezeichnungen einer Reihe von Variablen und einen +musikalischen Ausdruck. Der Inhalt der verschiedenen Takte in +dem musikalischen Ausdruck bekommt die Bezeichnung der Variablen zugewiesen, +sodass sie benutzt werden können, um die Musik dann zu setzen. +Dabei entspricht jede Zeile einer Stimme. + +@warning{Taktüberprüfungen @code{|} müssen benutzt werden, und +die Takte müssen die gleiche Länge haben.} + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | + r16 e'8.~ e'4 r16 e'8.~ e'4 | + c'2 c'2 | + + % Bar 2 + r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | + r16 d'8.~ d'4 r16 d'8.~ d'4 | + c'2 c'2 | + +} +\new StaffGroup << + \new Staff << \voiceA \\ \voiceB >> + \new Staff { \clef bass \voiceC } +>> +@end lilypond + +Der relative Modus kann auch benutzt werden. Beachten Sie, dass +der @code{\relative}-Befehl nicht innerhalb von +@code{\parallelMusic} benutzt wird. Die Noten sind parallel +zu der vorherigen Note der gleichen Stimme , nicht zu der +vorherigen Note in der Quelldatei. Anders gesagt ignorieren +relative Noten von @code{voiceA} die Noten von @code{voiceB}. + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g16 c e g, c e r8 g,16 c e g, c e | + r16 e8.~ e4 r16 e8.~ e4 | + c2 c | + + % Bar 2 + r8 a,16 d f a, d f r8 a,16 d f a, d f | + r16 d8.~ d4 r16 d8.~ d4 | + c2 c | + + } +\new StaffGroup << + \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> + \new Staff \relative c' { \clef bass \voiceC } +>> +@end lilypond + +Das funktioniert ziemlich gut für Klaviernoten. Dieses Beispiel +speichert vier konsekutive Takte in vier Variablen: + +@lilypond[quote,verbatim] +global = { + \key g \major + \time 2/4 +} + +\parallelMusic #'(voiceA voiceB voiceC voiceD) { + % Bar 1 + a8 b c d | + d4 e | + c16 d e fis d e fis g | + a4 a | + + % Bar 2 + e8 fis g a | + fis4 g | + e16 fis g a fis g a b | + a4 a | + + % Bar 3 ... +} + +\score { + \new PianoStaff << + \new Staff { + \global + << + \relative c'' \voiceA + \\ + \relative c' \voiceB + >> + } + \new Staff { + \global \clef bass + << + \relative c \voiceC + \\ + \relative c \voiceD + >> + } + >> +} +@end lilypond + +@seealso +Handbuch zum Lernen: +@rlearning{Stücke durch Bezeichner organisieren}. + +Schnipsel: +@rlsr{Simultaneous notes}. diff --git a/Documentation/de/notation/spacing.itely b/Documentation/de/notation/spacing.itely new file mode 100644 index 0000000000..08e6342f81 --- /dev/null +++ b/Documentation/de/notation/spacing.itely @@ -0,0 +1,3638 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Till Paala + + +@node Abstände +@chapter Abstände +@translationof Spacing issues + +Das finale Layout der Seite wird von drei Faktoren bestimmt: dem Layout +der Seite, den Zeilenumbrüchen und der Platzverteilung. Jeder Faktor +beeinflusst auch die anderen mit. Die Wahl der Platzverteilung +entscheidet, wie eng die Notensysteme gesetzt werden. Das wiederum +hat Einfluss auf die gewählten Zeilenumbrüche und letztendlich also +auch darauf, wieviele Seiten ein Stück beansprucht. + +Die Verteilung der Musik auf der Seite geschieht grob gesagt in +vier Schritten. Zuerst werden flexible Entfernungen (@qq{springs}) +gewählt, die auf den Notendauern basieren. Alle möglichen +Zeilenumbrüche werden getestet und ein @qq{Schlechtigkeitsscore} +für die Umbrüche erstellt. Danach wird die mögliche Höhe eines Systems +ermittelt und schließlich wird eine bestimmte Kombination aus +Seiten- und Zeilenumbruch ausgewählt, sodass weder die horizontale +noch die vertikale Platzverteilung zu eng oder zu weit gesetzt wird. + +Einstellungen, die das Layout beeinflussen, können in zwei Umgebungen +gesetzt werden: in der @code{\paper @{...@}}- und der @code{\layout @{...@}}-Umgebung. +Die @code{\paper}-Umgebung enthält Einstellungen des Seitenlayouts, die für +alle Partituren innerhalb eines @code{\book} die gleichen sein sollen, wie +etwa Papierhöhe oder ob Seitenzahlen ausgegeben werden sollen. Siehe +@ref{Seitenlayout}. Die @code{\layout}-Umbegung enthält Layouteinstellungen +der Partitur selber, wie etwa die Zahl der Systeme oder den Platz zwischen +Systemgruppen usw. Siehe @ref{Partiturlayout}. + +@menu +* Seitenlayout:: +* Partiturlayout:: +* Umbrüche:: +* Vertikale Abstände:: +* Horizontale Abstände:: +* Die Musik auf weniger Seiten zwingen:: +@end menu + + +@node Seitenlayout +@section Seitenlayout +@translationof Page layout + +Dieser Abschnitt behandelt Seitenlayout-Optionen innerhalb der @code{\paper}-Umgebung. + +@menu +* Die \paper-Umgebung:: +* Papierformat und automatische Skalierung:: +* Vertikale \paper-Variablen mit festen Abständen:: +* Vertikale \paper-Variablen mit flexiblen Abständen:: +* \paper-Variablen für horizontale Abstände:: +* Andere \paper-Variablen:: +@end menu + + +@node Die \paper-Umgebung +@subsection Die @code{\paper}-Umgebung +@translationof The \paper block + +@cindex Papiergröße +@cindex Größe, Papier +@cindex Seitegröße +@cindex Größe, Seite + +Die @code{\paper}-Umgebung kann innerhalb einer @code{\book}-, nicht aber +innerhalb einer @code{\score}-Umgebung vorkommen. Einstellungen in +@code{\paper} wirken sich auf das gesamte Buch aus, welches viele einzelne +Partituren beinhalten kann. Einstellungen, die in der @code{\paper}-Umgebung +vorkommen können, beinhalten: + +@itemize + +@item +die @code{set-paper-size}-Scheme-Funktion, + +@item +@code{\paper}-Variablen, die zum Verändern des Seitenlayouts eingesetzt werden und + +@item +Beschriftungsdefinitionen, mit denen das Layout von Kopf- und Fußleisten sowie +Titeln beeinflusst wird. + +@end itemize + +Die @code{set-paper-size}-Funktion wird im nächsten Abschnitt behandelt: +@ref{Papierformat und automatische Skalierung}. Die @code{\paper}-Variablen, +die das Seitenlayout beeinflussen, werden in späteren Abschnitten behandelt. +Die Beschriftungsdefinitionen für Kopf- und Fußzeilen sowie Titeln werden behandelt +in @ref{Eigene Kopf und Fußzeilen sowie Titel}. + +Die meisten @code{\paper}-Variablen funktionieren nur innerhalb der +@code{\paper}-Umgebung. Die wenigen, die auch in der @code{\layout}-Umgebung +funktionieren, finden sich in @ref{Die \layout-Umgebung}. + +Außer wenn anders angegeben, werden alle @code{\paper}-Variablen, die +Abständen auf der Seite antsprechen, in Millimetern gemessen, es sei denn, +eine andere Maßeinheit ist definiert. Beispielsweise wird mit folgender +Definition der obere Rand (top-margin) 10 mm breit definiert: + +@example +\paper @{ + top-margin = 10 +@} +@end example + +Damit etwa @code{0.5} Zoll benutzt werden, muss @code{\in} dem Maß nachgestellt werden: + +@example +\paper @{ + top-margin = 0.5\in +@} +@end example + +Mögliche Maßeinheiten sind @code{\mm}, @code{\cm}, @code{\in} und +@code{\pt}. Diese Maßeinheiten sind einfach Werte, um von Millimetern +zu Konvertieren, sie sind in @file{ly/paper-defaults-init.ly} definiert. +Um Missverständnisse zu vermeiden, wird normalerweise @code{\mm} geschrieben, +auch wenn es eigentlich nicht notwendig wäre. + +Man kann die @code{\paper}-Werte auch mit Scheme definieren. Die Scheme-Entsprechung +der obigen Definition ist: + +@example +\paper @{ + #(define top-margin (* 0.5 in)) +@} +@end example + +@seealso +Notationsreferenz +@ref{Papierformat und automatische Skalierung}, +@ref{Eigene Kopf und Fußzeilen sowie Titel}, +@ref{Die \layout-Umgebung}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + + +@node Papierformat und automatische Skalierung +@subsection Papierformat und automatische Skalierung +@translationof Paper size and automatic scaling + +@cindex Papierformat +@cindex Seitenformat + +@funindex \paper + +@menu +* Das Papierformat einstellen:: +* Automatische Skalierung auf ein Papierformat:: +@end menu + + +@node Das Papierformat einstellen +@unnumberedsubsubsec Das Papierformat einstellen +@translationof Setting paper size + +Zwei Funktionen ermöglichen es, die Papiergröße zu ändern: +@code{set-default-paper-size} und @code{set-paper-size}. +@code{set-default-paper-size} muss auf der obersten Ebene in +der Quelldatei gesetzt werden, @code{set-paper-size} hingegen +muss sich in einer @code{\paper}-Umgebung befinden: + +@example +#(set-default-paper-size "a4") +@end example + +@example +\paper @{ + #(set-paper-size "a4") +@} +@end example + +@noindent +Auf oberster Ebene kann @code{set-default-paper-size} überall vor der ersten +@code{\paper}-Umgebung aufgerufen werden. Innerhalb einer @code{\paper}-Umgebung +ist der beste Platz für @code{set-paper-size} gleich am Anfang, über der Liste +der Variablen-Definitionen. Der Grund dafür wird behandelt in +@ref{Automatische Skalierung auf ein Papierformat} + +@code{set-default-paper-size} bestimmt die Größe aller Seiten, während +@code{set-paper-size} nur die Seitengröße für die Seiten definiert, +auf die sich die aktuelle @code{\paper}-Umgebung bezieht. Wenn die +@code{\paper}-Umgebung gleich am Anfang der Datei steht, bezieht sich die +Papiergröße auf alle Seiten, wenn sie aber innerhalb einer +@code{\book}-Umgebung definiert wird, nur auf die Seiten innerhalb +dieses Buches. + +Die normalen Papierformate sind definiert, u.A. @code{a4}, +@code{letter}, @code{legal} und @code{11x17} (auch als +Tabloit bekannt). Sehr viel mehr Formate sind unterstützt. +Einzelheiten finden sich in der Datei +@file{scm/paper.scm} in der Definition von +@code{paper-alist}. + +@warning{Das Standardformat ist @code{a4}.} + +Weitere Papierformate können hinzugefügt werden, indem die +Definition von @code{paper-alist} in der Datei +@file{scm/paper.scm} verändert wird. Derartige +Änderungen werden jedoch bei einer Aktualisierung des +Programmes überschrieben. + +@cindex Ausrichtung, Papier +@cindex Papier, Ausrichtung +@cindex hochkant, Papier +@cindex quer, Papier + +@funindex landscape + +Wenn das Symbol @code{'landscape} als Argument an die Funktion +@code{set-default-paper-size} gehängt wird, werden die Seiten um +90° gedreht und die Notensysteme entsprechend breiter gesetzt. + +@example +#(set-default-paper-size "a6" 'landscape) +@end example + +@seealso +Notationsreferenz: +@ref{Automatische Skalierung auf ein Papierformat}. + +Installierte Dateien: +@file{scm/paper.scm}. + + + +@node Automatische Skalierung auf ein Papierformat +@unnumberedsubsubsec Automatische Skalierung auf ein Papierformat +@translationof Automatic scaling to paper size + +Wenn das Papierformat mit einer der Scheme-Funktionen +(@code{set-default-paper-size} oder @code{set-paper-size}) geändert wird, +werden die Werte einiger @code{\paper}-Variablen automatisch an die +neue Größe angepasst. Um die automatische Skalierung für eine bestimmte +Variable zu umgehen, kann die Variable definiert werden, nachdem man +das Papierformat angegeben hat. Es sollte beachtet werden, dass die +automatische Anpassung nicht ausgelöst wird, wenn man nur die +@code{paper-height} oder @code{paper-width}-Variablen verändert, obwohl +@code{paper-width} andere Werte beeinflussen kann (das muss von der automatischen +Skalierung unterschieden werden und wird unten behandelt). Die Funktionen +@code{set-default-paper-size} und @code{set-paper-size} werden behandelt +in @ref{Das Papierformat einstellen}. + +Die vertikalen Dimensionen, die durch die automatische Skalierung verändert +werden sind: @code{top-margin} und @code{bottom-margin} (siehe +@ref{Vertikale \paper-Variablen mit festen Abständen}). Die horizontalen +Dimensionen, die durch die automatische Skalierung verändert werden, sind +@code{left-margin}, @code{right-margin}, @code{inner-margin}, @code{outer-margin}, +@code{binding-offset}, @code{indent} und @code{short-indent} (siehe +@ref{\paper-Variablen für horizontale Abstände}). + +Die Standardwerte für diese Dimensionen sind in +@file{ly/paper-defaults-init.ly} definiert, wobei interne Variablen mit den +Bezeichnungen @code{top-margin-default}, @code{bottom-margin-default}, usw. +benutzt werden. Das sind die Werte für die Standardpapiergröße +@code{a4}. Zum Vergleich: @code{a4} hat Werte von @code{297\mm} für +@code{paper-height} und @code{210\mm} für @code{paper-width}. + +@seealso +Notationsreferenz: +@ref{Vertikale \paper-Variablen mit festen Abständen}, +@ref{\paper-Variablen für horizontale Abstände}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}, +@file{scm/paper.scm}. + + + +@node Vertikale \paper-Variablen mit festen Abständen +@unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit festen Abständen +@translationof Fixed vertical spacing \paper variables + +@warning{Einige @code{@bs{}paper}-Dimensionen werden automatisch nach +Papierformat skaliert, was zu ungewolltem Verhalten führen kann. Siehe +@ref{Automatische Skalierung auf ein Papierformat}.} + +Standardwerte (vor der Skalierung) sind definiert in +@file{ly/paper-defaults-init.ly}. + +@table @code +@item paper-height +@funindex paper-height + +Die Höhe der Seite, standardmäßig nicht definiert. Die automatische +Skalierung einiger vertikalen Dimensionen wird hiervon nicht betroffen. + +@item top-margin +@funindex top-margin + +Der Rand zwischen dem oberen Ende der Seite und dem oberen Ende +des bedruckbaren Bereichs. Wenn das Papierformat verändert wurde, wird +der Standardwert dieser Dimension entsprechend skaliert. + +@item bottom-margin +@funindex bottom-margin + +Der Rand zwischen dem unteren Ende der Seite und dem unteren Ende des +bedruckbaren Bereichs. Wenn das Papierformat verändert wurde, wird +der Standardwert dieser Dimension entsprechend skaliert. + +@item ragged-bottom +@funindex ragged-bottom + +Wenn auf wahr gesetzt, werden die Systeme nicht vertikal bis zum unteren +Seitenrand verteilt. Sollte auf wahr gesetzt sein für Stücke, die nur +ein bis zwei Notensystemgruppen pro Seite haben, etwa Orchesterpartituren. + +@item ragged-last-bottom +@funindex ragged-last-bottom + +Wenn auf falsch gesetzt, werden die Systeme vertikal auf der letzten Seite +verteilt. Bei Stücken, die grob zwei oder mehr Seiten füllen, sollten es auf +wahr gesetzt werden. Hiermit wird auch die letzte Seite von Teilen eines +@code{\book}, die mit @code{\bookpart} erstellt sind, beeinflusst. + +@end table + +@seealso +Notationsreferenz: +@ref{Automatische Skalierung auf ein Papierformat}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + +Schnipsel: +@rlsr{Spacing}. + +@knownissues + +Die Titel (aus der @code{\header}-Umgebung) werden als Systemgruppe +behandelt, sodass @code{ragged-bottom} und @code{ragged-last-bottom} auch +zusätzlichen Abstand zwischen den Titel und dem ersten System einer +Paritur einfügt. + + +@node Vertikale \paper-Variablen mit flexiblen Abständen +@unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit flexiblen Abständen +@translationof Flexible vertical spacing \paper variables + +In den meisten Fällen bietet es sich an, dass die vertikalen +Abstände zwischen bestimmten Objekten (wie Ränder, Titel, +Notensystemgruppen und einzelne Partituren) flexibel gehalten +werden, sodass sie je nach Situation gedehnt oder komprimiert +werden können. Es gibt eine Anzahl von Variablen für die +@code{\paper}-Umgebung, mit denen man das Dehnungsverhalten dieser +Dimensionen beeinflussen kann. Sie finden sich unten aufgelistet. + +Dabei sollte beachtet werden, dass die Variablen, die in diesem +Abschnitt behandelt werden, nicht die Platzierung und das +Dehnungsverhalten von Notensystemen innerhalb der einzelnen +Systemgruppen behandelt. Die Dehnung zwischen Notensystemen +wird mit Grob-Eigenschaften kontrolliert, deren Einstellungen +normalerweise innerhalb der @code{\score}-Umgebung vorgenommen +werden, und nicht innerhalb der @code{\paper}-Umgebung. Siehe auch +@ref{Flexible vertikale Abstände in Systemgruppen}. + +@menu +* Struktur der Alisten für flexible vertikale Abstände:: +* Liste der flexiblen vertikalen Abstandsvariblen in \paper:: +@end menu + + +@node Struktur der Alisten für flexible vertikale Abstände +@unnumberedsubsubsec Struktur der Alisten für flexible vertikale Abstände +@translationof Structure of flexible vertical spacing alists + +Jede der flexiblen vertikalen Abstandsvariablen ist eine Aliste (eine assoziative Liste), die +vier @emph{Schlüssel} (engl. key) enthält: + +@itemize + +@item +@code{basic-distance} (Grund-Abstand) -- der vertikale Abstand, gemessen in +Systemzwischenräumen, zwischen den @emph{Referenzpunkten} +zweier Elemente, wenn keine Zusammenstöße vorkommen würden und +keine Dehnung oder Kompression stattfindet. Der Referenzpunkt +einer (Titel-)Beschriftung (auf höchster Ebene) ist sein +höchster Punkt und der Referenzpunkt einer Systemgruppe ist +der vertikale Mittelpunkt des nächsten @code{StaffSymbol} +-- sogar wenn eine Nicht-Notensystemzeile (wie etwa ein +@code{Lyrics}-Kontext) dazwischen kommt. Werte für @code{basic-distance}, +die weniger als entweder @code{padding} oder @code{minimum-distance} +sind, haben keine Bedeutung, weil der sich daraus ergebende +Abstand niemals weniger als entweder @code{padding} oder +@code{minimum-distance} ergibt. + +@item +@code{minimum-distance} (minimaler Abstand) -- der kleinste +erlaubte vertikale Abstand, gemessen in Systemzwischenräumen, +zwischen den Referenzpunkten der zwei Elemente, wenn Kompression +stattfindet. Werte für @code{minimum-distance}, die geringer als +@code{padding} sind, haben keine Bedeutung, weil der sich daraus +ergebende Abstand niemals weniger als @code{padding} ergibt. + +@item +@code{padding} (Verschiebung) -- der minimal benötigte vertikale blanke +Freiraum zwischen den Bounding-Boxen (oder Skyline) der zwei Objekten, gemessen in Notenlinienabständen. + +@item @code{stretchability} (Dehnbarkeit) -- ein einheitsloses +Maß der Leichtigkeit, mit der sich die Dimension dehnen lässt (ohne +dass Zusammenstöße auftreten). Wenn es null ist, wird der Abstand +nicht gedehnt (außer ein Zusammenstoß würde auftreten), wenn es +positiv ist, hängt die Wichtigkeit der Dehnbarkeit eines bestimmten +Objekts nur noch von seiner Beziehung zu dem Wert des anderen Objekts +ab. Beispielsweise wennn eine Dimension die doppelte Dehnbarkeit als +die andere hat, wird sie auch zweimal so einfach gedehnt. Werte sollten +nicht-negativ und reale Zahlen sein. Der Wert @code{+inf.0} +ruft einen @code{programming_error} hervor und wird ignoriert, aber +@code{1.0e7} kann für einen so gut wie unendlich dehnbaren Abstand eingesetzt +werden. Wenn der Wert nicht gesetzt wird, ist der Standardwert +der von @code{basic-distance}. Die Wahrscheinlichkeit einer Dimension, sich +zu verkleinern, kann man nicht direkt beeinflussen, sondern sie ergibt sich +aus (@code{space}@tie{}@minus{}@tie{}@code{minimum-distance}). + +@end itemize + +Wenn eine Seite einen nicht ausgeglichenen unteren Rand hat, ist der +resultierende Abstand der größte von: + +@itemize + +@item +@code{basic-distance}, + +@item +@code{minimum-distance} und + +@item +@code{padding} plus der kleinste nötige Abstand, um Zusammenstöße +zu vermeiden. + +@end itemize + +Spezifische Methoden, um Alisten zu verändern, werden behandelt in +@ref{Alisten verändern}. Das folgende Beispiel demonstriert beide Arten, +wie diese Alisten verändert werden können. Der erste Aufruf verändert +nur einen Schlüsselwert einzeln, während der zweite die Variable +vollständig neu definiert: + +@example +\paper @{ + system-system-spacing #'basic-distance = #8 + score-system-spacing = + #'((basic-distance . 12) + (minimum-distance . 6) + (padding . 1) + (stretchability . 12)) +@} +@end example + + +@node Liste der flexiblen vertikalen Abstandsvariblen in \paper +@unnumberedsubsubsec Liste der flexiblen vertikalen Abstandsvariblen in @code{\paper} +@translationof List of flexible vertical spacing \paper variables + +Die Bezeichnungen dieser Variablen entsprechen dem Format +@code{@var{obere}-@var{untere}-platzierung}, wobei @code{@var{obere}} +und @code{@var{untere}} die zu platzierenden Elemente darstellen. Jeder +Abstand wird zwischen den Referenzpunkten der beiden Elemente gemessen +(siehe Beschreibung der Alistenstruktur oben). In diesen Variablenbezeichnungen +bedeutet @q{@code{markup}} (Beschriftung) sowohl +@emph{Titelbeschriftungen} (@code{bookTitleMarkup} oder +@code{scoreTitleMarkup}) als auch @emph{Beschriftungen auf höchster Ebene} +(siehe @ref{Die Dateistruktur}). Alle Entfernungen werden in Systemzwischenräumen +gemessen. + +Standardwerte sind in @file{ly/paper-defaults-init.ly} definiert. + +@c TODO: Where do headers/footers fit in? -mp + +@table @code +@item markup-system-spacing +@funindex markup-system-spacing + +der Abstand zwischen einer (Titel-)Beschriftung (auf höchster Ebene) und der +darauf folgenden Systemgruppe. + +@item score-markup-spacing +@funindex score-markup-spacing + +der Abstand zwischen dem letzten System einer Partitur und der darauf folgenden +(Titel-)Beschriftung (auf höchster Ebene). + +@item score-system-spacing +@funindex score-system-spacing + +der Abstand zwischen dem letzten System einer Partitur und dem ersten +System der folgenden Partitur, wenn keine (Titel-)Beschriftung (auf höchster +Ebene) dazwischen vorkommt. + +@item system-system-spacing +@funindex system-system-spacing + +der Abstand zwischen zwei Systemgruppen der selben Partitur. + +@item markup-markup-spacing +@funindex markup-markup-spacing + +der Abstand zwischen zwei (Titel-)Beschriftungen (auf höchster Ebene). + +@item last-bottom-spacing +@funindex last-bottom-spacing + +der Abstand vom letzten System oder Beschriftung auf höchster Ebene auf +einer Seite zum unteren Rand des bedruckbaren Bereichs (also bis zum Anfang +des unteren Randes). + +@item top-system-spacing +@funindex top-system-spacing + +der Abstand zwischen dem oberen Rand des bedruckbaren Bereichs (also dem Ende +des oberen Rands) und dem ersten System auf der Seite, wenn keine +(Titel-)Beschriftung (auf höchster Ebene) dazwischen kommt. + +@item top-markup-spacing +@funindex top-markup-spacing + +der Abstand vom oberen Rand des bedruckbaren Bereichs (also dem Ende des +oberen Randes) zur ersten (Titel-)Beschriftung (auf höchster Ebene) auf +einer Seite, wenn keine Systemgruppe dazwischen kommt. +@end table + +@seealso +Notationsreferenz: +@ref{Flexible vertikale Abstände in Systemgruppen}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + +Schnipsel: +@rlsr{Spacing}. + + + +@node \paper-Variablen für horizontale Abstände +@unnumberedsubsubsec \paper-Variablen für horizontale Abstände +@translationof Horizontal spacing \paper variables + +@warning{Einige @code{@bs{}paper}-Dimensionen werden automatische +entsprechend dem Papierformat skaliert und können deshalb ungewollte +Resultate haben. Siehe @ref{Automatische Skalierung auf ein Papierformat}.} + +@menu +* \paper-Variablen für Breite und Ränder:: +* \paper-Variablen für zweiseitigen Satz:: +* \paper-Variablen für Verschiebungen und Einrückungen:: +@end menu + + +@node \paper-Variablen für Breite und Ränder +@unnumberedsubsubsec \paper-Variablen für Breite und Ränder +@translationof \paper variables for widths and margins + +Standardwerte (vor der Skalierung), die hier nicht aufgelistet +sind, finden sich in @file{ly/paper-defaults-init.ly}. + + +@table @code + +@item paper-width +@funindex paper-width + +Die Breide der Seite, standardmäßig nicht definiert. Während +@code{paper-width} keine Auswirkungen auf die automatische +Skalierung einiger horizontaler Dimensionen hat, beeinflusst es +dennoch die @code{line-width}-Variable. Wenn sowohl @code{paper-width} +als auch @code{line-width} definiert sind, dann werden auch +@code{left-margin} und @code{right-margin} aktualisiert. Siehe auch +@code{check-consistency}. + +@item line-width +@funindex line-width + +Die horizontale Ausdehnung der Notenlinien in nicht-eingerückten, +Systemen mit Ausgleich zum rechten Rand, entspricht +@code{(paper-width@tie{}@minus{}@tie{}left-margin@tie{}@minus{}@tie{}right-margin)} +wenn nicht definiert. Wenn @code{line-width} definiert ist und sowohl +@code{left-margin} als auch @code{right-margin} nicht definiert sind, dann +werden die Ränder aktualisiert, sodass die Systeme mittig auf der Seite +zentriert werden. Siehe auch @code{check-consistency}. Diese Variable +kann auch in der @code{\layout}-Umgebung definiert werden. + +@item left-margin +@funindex left-margin + +Der Rand zwischen der linken Papierkante und dem Beginn der Systeme +ohne Einrückungen. Wenn das Papierformat verändert wird, wird auch +der Standardwert dieser Dimension entsprechend skaliert. Wenn +@code{left-margin} nicht definiert ist und sowohl @code{line-width} +als auch @code{right-margin} definiert sind, dann wird @code{left-margin} +auf den Wert +@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)} +gesetzt. Wenn nur @code{line-width} definiert ist, dann werden beide +Ränder auf den Wert +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)} +gesetzt und die Systeme demzufolge auf der Seite zentriert. Siehe auch +@code{check-consistency}. + +@item right-margin +@funindex right-margin + +Der Rand zwischen der rechten Papierkante und dem Ende der Systeme mit +Randausgleich (@qq{Blocksatz}). Wenn das Papierformat geändert wird, +wird auch der Standardwert dieser Dimension entsprechend skaliert. Wenn +@code{right-margin} nicht definiert ist und sowohl @code{line-width} als +auch @code{left-margin} definiert sind, dann wird @code{right-margin} auf den +Wert @code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)} +gesetzt. Wenn nur @code{line-width} definiert ist, dann werden beide Ränder +auf den Wert +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)} +gesetzt und die Systeme demzufolge auf der Seite zentriert. Siehe auch +@code{check-consistency}. + +@item check-consistency +@funindex check-consistency + +Wenn wahr, wird eine Warnung ausgegeben, sollten @code{left-margin}, +@code{line-width} und @code{right-margin} zusammen nicht exakt den +Wert von @code{paper-width} ergeben, und die Werte (außer +@code{paper-width}) mit ihren Standardwerten belegt (wenn nötig auf +das entsprechende Papierformat skaliert). Wenn falsch werden derartige +Inkonsistenzen ignoriert und die Systeme dürfen auch über den Seitenrand +hinausragen. + +@item ragged-right +@funindex ragged-right + +Wenn wahr, werden Notensysteme nicht über die gesamte Zeilenbreite +gestreckt, sondern sie enden horizontal entsprechend den enthaltenen +Noten. Standard: @code{#t} (wahr) für Partituren mit einem System +und @code{#f} (falsch) für Partituren mit zwei oder mehr Systemen. +Diese Variable kann auch in der @code{\layout}-Umgebung definiert werden. + +@item ragged-last +@funindex ragged-last + +Wenn wahr, wird das letzte Notensystem einer Partitur nicht über die +gesamte Zeilenbreite gestreckt, sondern es endet horizontal entsprechend +den enthaltenen Noten. Standard: @code{#f} (falsch). Diese Variable +kann auch in der @code{\layout}-Umgebung definiert werden. + +@end table + +@seealso +Notationsreferenz: +@ref{Automatische Skalierung auf ein Papierformat}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + + +@node \paper-Variablen für zweiseitigen Satz +@unnumberedsubsubsec @code{\paper}-Variablen für zweiseitigen Satz +@translationof \paper variables for two-sided mode + +Standardwerte (vor der Skalierung) sind definiert in +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item two-sided +@funindex two-sided + +@cindex Bundsteg +@cindex Binderand + +Wenn auf wahr (@code{##t}) gesetzt, werden @code{inner-margin}, @code{outer-margin} +und @code{binding-offset} zusammen benutzt, um die Ränder der Seite in Abhängigkeit +von einer geraden oder ungeraden Seitennummer zu errechnen. Damit werden die +Werte von @code{left-margin} und @code{right-margin} überschrieben. Standard: +@code{##f}. + +@item inner-margin +@funindex inner-margin + +Der Rand, den alle Seiten auf der Innenseite haben, wenn sie Teil eines +Buches (@code{\book}) sind. Wenn das Papierformat verändert wird, +wird der Standardwert dieser Dimension entsprechend skaliert. Funktioniert +nur, wenn @code{two-sided} wahr ist. + +@item outer-margin +@funindex outer-margin + +Der Rand, den alle Seiten auf der Außenseite haben, wenn sie Teil eines Buches +sind. Wenn das Papierformat verändert wird, +wird der Standardwert dieser Dimension entsprechend skaliert. Funktioniert nur, +wenn @code{two-sided} wahr ist. + +@item binding-offset +@funindex binding-offset + +Der Wert, um welchen @code{inner-margin} erhöht wird, um sicherzugehen, dass +nichts in der Bindung verschwindet. Wenn das Papierformat verändert wird, +wird der Standardwert dieser Dimension entsprechend skaliert. Funktioniert nur, +wenn @code{two-sided} wahr ist. + +@end table + +@seealso +Notationsreferenz: +@ref{Automatische Skalierung auf ein Papierformat}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + + +@node \paper-Variablen für Verschiebungen und Einrückungen +@unnumberedsubsubsec @code{\paper}-Variablen für Verschiebungen und Einrückungen +@translationof \paper variables for shifts and indents + + +Standardwerte (vor der Skalierung), die hier nicht aufgeführt sind, +sind definiert in @file{ly/paper-defaults-init.ly}. + +@table @code + +@item horizontal-shift +@funindex horizontal-shift + +@c This default value is buried in the middle of page.scm. -mp + +Der Wert, um den alle Systeme (und auch Überschriften und Systemtrenner) +nach rechts verschoben werden. Standard: @code{0.0\mm}. + +@item indent +@funindex indent + +Der Einzug für das erste System einer Partitur. Wenn das Papierformat +verändert wird, wird der Standardwert dieser Dimension entsprechend skaliert. +Diese Variable kann auch in der @code{\layout}-Umgebung definiert werden. + +@item short-indent +@funindex short-indent + +Der Einzug für alle Systeme einer Partitur ausschließlich das +erste System. Wenn das Papierformat +verändert wird, wird der Standardwert dieser Dimension entsprechend skaliert. +Diese Variable kann auch in der @code{\layout}-Umgebung definiert werden. + +@end table + +@seealso +Notationsreferenz: +@ref{Automatische Skalierung auf ein Papierformat}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + +Schnipsel: +@rlsr{Spacing}. + + +@node Andere \paper-Variablen +@subsection Andere @code{\paper}-Variablen +@translationof Other \paper variables + +@menu +* \paper-Variablen für den Zeilenumbruch:: +* \paper-Variablen für den Seitenumbruch:: +* \paper-Variablen für Seitenzahlen:: +* Verschiedene \paper-Variablen:: +@end menu + + +@node \paper-Variablen für den Zeilenumbruch +@unnumberedsubsubsec @code{\paper}-Variablen für den Zeilenumbruch +@translationof \paper variables for line breaking +@c TODO: Mention that ly:optimal-breaking is on by default? -mp + +@table @code + +@item max-systems-per-page +@funindex max-systems-per-page + +Die maximale Anzahl an Notensystemgruppen, die auf einer Seite gesetzt werden. Das +wird zur Zeit nur von dem @code{ly:optimal-breaking}-Algorithmus +unterstützt. Standard: nicht gesetzt. + +@item min-systems-per-page +@funindex min-systems-per-page + +Die minimale Anzahl an Notensystemgruppen, die auf einer Seite gesetzt werden. Das +kann dazu führen, dass Seiten zu dicht gefüllt werden, wenn der Wert +zu groß gewählt wird. Die Option ist zur Zeit nur von dem +@code{ly:optimal-breaking}-Algorithmus unterstützt. Standard: nicht gesetzt. + +@item systems-per-page +@funindex systems-per-page + +Die Anzahl an Systemen, die auf jede Seite gesetzt werden sollen. +Diese Option wird zur Zeit nur von dem @code{ly:optimal-breaking}-Algorithmus +unterstützt. Standard: nicht gesetzt. + +@item system-count +@funindex system-count + +Die Anzahl der Systeme, auf denen eine Partitur gesetzt werden soll. +Standard: nicht gesetzt. Diese Variablen kann auch in der +@code{\layout}-Umgebung definiert werden. + +@end table + +@seealso +Notationsreferenz: +@ref{Zeilenumbrüche}. + + +@node \paper-Variablen für den Seitenumbruch +@unnumberedsubsubsec @code{\paper}-Variablen für den Seitenumbruch +@translationof \paper variables for page breaking + +Standardwerte, die hier nicht aufgelistet sind, finden sich in +@file{ly/paper-defaults-init.ly} + +@table @code + +@item blank-after-score-page-force +@funindex blank-after-score-page-force + +Die Strafpunke, die erteilt werden, wenn eine leere Seite nach einer +Partitur und vor der nächsten vorkommt. Der Standardwert hiervon ist +kleiner als @code{blank-page-force}, sodass leere Seiten nach einer Partitur +leeren Seiten innerhalb einer Partitur vorgezogen werden. + +@item blank-last-page-force +@funindex blank-last-page-force + +Die Strafpunkte, wenn eine Partitur auf einer ungeraden Seite +beendet wird. Standard: @code{0}. + +@item blank-page-force +@funindex blank-page-force + +Die Strafpunkte, wenn eine leere Seite mitten in einer Partitur +auftritt. Das wird nicht benutzt von @code{ly:optimal-breaking}, +weil hiermit niemals leere Seiten mitten in einer Partitur zugelassen +werden. + +@item page-breaking +@funindex page-breaking + +Der Algorithmus, der für Seitenumbrüche eingesetzt wird. Mögliche +Algorithmen sind: @code{ly:minimal-breaking} (minimale Umbrüche), +@code{ly:page-turn-breaking} (Umbrüche an guten Stellen zum Umblättern) +und @code{ly:optimal-breaking}. + +@item page-breaking-system-system-spacing +@funindex page-breaking-system-system-spacing + +Überlistet die Seitenumbruchfunktion, indem ihr ein anderer Wert +für @code{system-system-spacing} mitgeteilt wird, als in Wirklichkeit +eingestellt ist. Wenn beispielsweise +@code{page-breaking-system-system-spacing #'padding} auf einen +deutlich größeren Wert als @code{system-system-spacing #'padding} gesetzt +wird, setzt die Seitenumbruchsfunktion weniger Systeme auf eine +Seite. Standard: nicht gesetzt. + +@item page-count +@funindex page-count + +Die Zahl der Seiten, die für eine Partitur benutzt werden sollen. +Standard: nicht gesetzt. + +@end table + +@seealso +Notationsreferenz: +@ref{Seitenumbrüche}, +@ref{Optimale Seitenumbrüche}, +@ref{Optimale Umbrüche zum Blättern}, +@ref{Minimale Seitenumbrüche}. + +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + + +@node \paper-Variablen für Seitenzahlen +@unnumberedsubsubsec @code{\paper}-Variablen für Seitenzahlen +@translationof \paper variables for page numbering + +Standardwerte, die hier nicht aufgelistet sind, finden sich in +@file{ly/paper-defaults-init.ly} + +@table @code + +@item auto-first-page-number +@funindex auto-first-page-number +@cindex Seitenzahlen, automatische Nummerierung + +Der Seitenumbruchsalgorithmus wird davon beeinflusst, ob die erste +Seitenzahl gerade oder ungerade ist. Wenn die Variable auf wahr +gesetzt wird, entscheidet der Seitenumbruchsalgorithmus selber, +ob die Noten auf einer geraden oder ungeraden Seite beginnen sollen. +Das hat dann zur Folge, dass die erste Seite entweder bleibt wie +sie ist oder um eins erhöht wird. Standard: @code{#f}. + +@item first-page-number +@funindex first-page-number +@cindex Sietenzahlen, erste definieren + +Der Wert der Seitenzahl auf der ersten Seite. + +@item print-first-page-number +@funindex print-first-page-number + +Wenn wahr, wird auch auf der ersten Seite die Seitenzahl ausgegeben. +Standard: @code{#f}. + +@item print-page-number +@funindex print-page-number +@cindex Seitenzahlen, unterdrücken + +Wenn falsch, werden Seitenzahlen nicht ausgegeben. + +@end table + +@seealso +Installierte Dateien: +@file{ly/paper-defaults-init.ly}. + +@knownissues +Ungrade Seitenzahlen befinden sich immer auf der rechten Seite. +Wenn Sie die Noten auf Seite 1 beginnen lassen wollen, müssen Sie +eine leere Seite nach dem Deckblatt einfügen, damit die Noten +auf der rechten Seite mit Seite 1 beginnen. + + +@node Verschiedene \paper-Variablen +@unnumberedsubsubsec Verschiedene @code{\paper}-Variablen +@translationof Miscellaneous \paper variables +@table @code + +@item page-spacing-weight +@funindex page-spacing-weight + +Die relative Gewichtung von (vertikalem) Abstand auf der Seite und +(horizontalem) Abstand innerhalb der Zeilen. Hohe Werte gewichten +die vertikalen Abstände mehr. Standard: @code{#10}. + +@item print-all-headers +@funindex print-all-headers + +Wenn wahr, werden alle Einträge des Titelfeldes (@code{\header}-Umgebung) +für jede Partitur (@code{\score}) ausgegeben. Normalerweise wird nur die +Satzbezeichnung und die Opuszahl (@code{piece} und @code{opus}) +ausgegeben. Standard: @code{##f}. + +@item system-separator-markup +@funindex system-separator-markup + +Ein Beschriftungsobjekt, das zwischen zwei Systeme gesetzt wird. Das +wird oft in Orchesterpartituren eingesetzt. Standard: nicht gesetzt. +Der Beschriftungsbefehl @code{\slashSeparator}, definiert in +@file{ly/titling-init.ly}, kann für einen Trenner +benutzt werden, etwa so: + +@lilypond[quote,verbatim,noragged-right,line-width=30\mm] +#(set-default-paper-size "a8") + +\book { + \paper { + system-separator-markup = \slashSeparator + } + \header { + tagline = ##f + } + \score { + \relative c'' { c1 \break c1 \break c1 } + } +} +@end lilypond + +@end table + + +@seealso +Installierte Dateien: +@file{ly/titling-init.ly}. + +Schnipsel: +@rlsr{Spacing}. + + +@knownissues + +Die Standard-Kopfzeilendefinition setzt die Seitenzahl und das +@code{instrument}-Feld aus der @code{\header}-Umgebung in eine +Zeile. + + + +@node Partiturlayout +@section Partiturlayout +@translationof Score layout + +@menu +* Die \layout-Umgebung +* Die Notensystemgröße einstellen:: +@end menu + + +@node Die \layout-Umgebung +@subsection Die @code{ayout}-Umgebung +@translationof The \layout block + +@cindex Partitur, Layout +@cindex Layout, Partitur +@funindex \layout + +Während die @code{\paper}-Umgebung Einstellungen für die Formatierung +der Seiten eines gesamten Dokuments enthalten, enthält die +@code{\layout}-Umgebung Einstellungen für einzelne Partituren. Um +Layoutoptionen für Partituren global einzustellen, müssen sie in einer +@code{\layout}-Umgebung gesetzt werden, die sich auf höchster Ebene in +der Datei befindet. Um sie für einzelne Partituren festzulegen, muss die +@code{\layout}-Umgebung innerhalb der @code{\score}-Umgebung nach den Noten +eingetraten werden. Einstellungen, die in einer @code{\layout}-Umgebung +vorkommen können, beinhalten: + +@itemize +@item die @code{layout-set-staff-size}-Scheme-Funktion, +@item Kontextveränderungen in @code{\context}-Umgebungen und +@item @code{\paper}-Variablen, die das Aussehen einer Partitur beeinflussen. +@end itemize + +Die @code{layout-set-staff-size}-Funktion wird im nächsten Abschnitt behandelt, +@ref{Die Notensystemgröße einstellen}. Kontextveränderungen werden in einem +eigenen Kapitel behandelt, siehe @ref{Umgebungs-Plugins verändern} and +@ref{Die Standardeinstellungen von Kontexten ändern}. Die @code{\paper}-Variablen, +die innerhalb der @code{\layout}-Umgebungen erlaubt sind, sind: + +@itemize + +@item +@code{line-width}, @code{ragged-right} und @code{ragged-last} +(siehe @ref{\paper-Variablen für Breite und Ränder}) + +@item +@code{indent} und @code{short-indent} +(siehe @ref{\paper-Variablen für Verschiebungen und Einrückungen}) + +@item +@code{system-count} +(siehe @ref{\paper-Variablen für den Zeilenumbruch}) + +@end itemize + +Hier ist ein Beispiel für eine @code{\layout}-Umgebung: + +@example +\layout @{ + indent = 2\cm + \context @{ + \StaffGroup + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8 + @} + \context @{ + \Voice + \override TextScript #'padding = #1 + \override Glissando #'thickness = #3 + @} +@} +@end example + + + +@seealso +Notationsreferenz: +@ref{Die Standardeinstellungen von Kontexten ändern}, +@ref{Die Notensystemgröße einstellen}, +@ref{Umgebungs-Plugins verändern}. + +Schnipsel: +@rlsr{Spacing}. + + + +@node Die Notensystemgröße einstellen +@subsection Die Notensystemgröße einstellen +@translationof Setting the staff size + +@cindex Schriftgröße, Einstellung +@cindex Systemgröße, Einstellung +@cindex Verändern der Schriftgröße +@cindex Verändern der Systemgröße +@funindex layout file + +Die Standardgröße der Notensysteme beträgt 20 Punkte (pt). +Das kann auf zwei Arten geändert werden: + +Um die Systemgröße global für alle Partituren einer +Datei (bzw. einer @code{\book}-Umgebung) zu verändern, +wird @code{set-global-staff-size} benutzt: + +@example +#(set-global-staff-size 14) +@end example + +@noindent +Hiermit wird die Standardhöhe der Notensysteme auf 14 pt +gesetzt. Die Schriftarten werden entsprechend verkleinert. + +Um die Systemhöhe für jede Partitur einzeln zu verändern, +muss + +@example +\score@{ + @dots{} + \layout @{ + #(layout-set-staff-size 15) + @} +@} +@end example + +@noindent +eingesetzt werden. + +Die Feta-Schriftart stellt die Noten- und Musiksymbole +für acht verschiedene Größen zur Verfügung. Jede +Schriftgröße ist einer bestimmten Systemgröße angepasst: +für kleinere Schriftgrößen werden die Zeichen etwas +schwerer, um mit den ebenfalls dickeren Notenlinien +zu harmonieren. Die empfohlenen Notensystemgrößen +sind in der Tabelle aufgeführt: + +@quotation +@multitable @columnfractions .15 .2 .22 .2 + +@item @b{Schriftbezeichnung} +@tab @b{Höhe des Systems (pt)} +@tab @b{Höhe des Systems (mm)} +@tab @b{Benutzung} + +@item feta11 +@tab 11.22 +@tab 3.9 +@tab Taschenparituren + +@item feta13 +@tab 12.60 +@tab 4.4 +@tab + +@item feta14 +@tab 14.14 +@tab 5.0 +@tab + +@item feta16 +@tab 15.87 +@tab 5.6 +@tab + +@item feta18 +@tab 17.82 +@tab 6.3 +@tab Liederbücher + +@item feta20 +@tab 20 +@tab 7.0 +@tab Orchesterstimmen + +@item feta23 +@tab 22.45 +@tab 7.9 +@tab + +@item feta26 +@tab 25.2 +@tab 8.9 +@tab +@c modern rental material? + +@end multitable +@end quotation + +Diese Schriftarten sind in allen Größen erhältlich. Die Kontext-Eigenschaft +@code{fontSize} und die Layout-Eigenschaft @code{staff-space} (in +@code{StaffSymbol}) können benutzt werden, um die Schriftgröße für +einzelne Systeme zu verändern. Die Größe von einzelnen Systemen +ist relativ zur globalen Systemgröße. + + +@seealso +Notationsreferenz: +@ref{Auswahl der Notations-Schriftgröße}. + +Schnipsel: +@rlsr{Spacing}. + + +@knownissues + +@code{layout-set-staff-size} verändert nicht den Abstand zwischen den +Notenlinien. + + +@node Umbrüche +@section Umbrüche +@translationof Breaks + +@menu +* Zeilenumbrüche:: +* Seitenumbrüche:: +* Optimale Seitenumbrüche:: +* Optimale Umbrüche zum Blättern:: +* Minimale Seitenumbrüche:: +* Ausdrückliche Umbrüche:: +* Eine zusätzliche Stimme für Umbrüche benutzen:: +@end menu + + +@node Zeilenumbrüche +@subsection Zeilenumbrüche +@translationof Line breaking + +@cindex Zeilenumbrüche +@cindex Umbrüche von Zeilen + +Zeilenumbrüche werden normalerweise automatisch erstellt. Sie +werden so ausgewählt, dass die Zeilen weder gedrängt noch zu +weit gespreizt wirken und aufeinander folgende Seiten einen +ähnlichen Grauwert haben. + +Einen manuellen Zeilenumbruch fügt man mit dem Befehl @code{\break} +ein: + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c c | \break +c4 c c c | +@end lilypond + +Normalerweise wird ein @code{\break} in der Mitte eines Takes ignoriert +und eine Warnung ausgegeben. Um einen Zeilenumbruch in der Mitte eines +Taktes zu erzwingen, können Sie mit @code{\bar ""} eine +unsichtbare Taktlinie hinzufügen, die dann den Zeilenumbruch +erlaubt. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c +\bar "" \break +c | +c4 c c c | +@end lilypond + +Ein @code{\break} an einem Taktstrich wird auch ignoriert, wenn der letzte +Takt mitten in einer Note endet, wenn etwa eine N-tole in unterschiedlichen +Takten beginnt und endet. Damit @code{\break} auch in derartigen Situationen +funktioniert, muss @code{Forbid_line_break_engraver} aus der +@code{Voice}-Umgebung entfernt werden. Dabei sollte beachtet werden, dass +manuell hervorgerufene Umbrüche parallel mit den Noten hinzugefügt werden +müssen. + +@lilypond[quote,ragged-right,verbatim] +\new Voice \with { + \remove Forbid_line_break_engraver +} \relative c'' { + << + { c2. \times 2/3 { c4 c c } c2. | } + { s1 | \break s1 | } + >> +} +@end lilypond + +Genauso werden normalerweise Zeilenumbrüche auch verhindert, wenn Balken +über die Taktenden hinausragen. Dieses Verhalten kann verändert werden, +indem man @code{\override Beam #'breakable = ##t} einstellt: + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Beam #'breakable = ##t +c2. c8[ c | \break +c8 c] c2. | +@end lilypond + +Mit dem Befehl @code{\noBreak} wird ein Zeilenumbruch an dem +entsprechenden Taktstrich verboten. + +Die grundlegenden Einstellungen, die Einfluss auf die Zeilenlänge +haben, sind @code{indent} (Einzug) und @code{line-width} +(Zeilenbreite). Sie werden in der @code{\layout}-Umgebung +eingestellt. Der erste Befehl bestimmt den Einzug der ersten +Zeile, der zweite die Zeilenlänge der weiteren Notenzeilen. + +Wenn @code{ragged-right} eingestellt ist (also in der +@code{\layout}-Umgebung auf den Wert @code{#t} gesetzt wurde), +werden die Systeme linksbündig gesetzt und nicht bis zum +rechten Rand hin durchgezogen, sondern den Noten entsprechend +gesetzt. Das ist oftmals nützlich für kleine Notenfragmente +und um zu überprüfen, wie eng die Noten natürlicherweise +gesetzt werden würden. + +Die Option @code{ragged-last} verhält sich ähnlich zu @code{ragged-right}, +aber wirkt sich nur auf die letzte Zeile eines Stückes aus. + +@example +\layout @{ +indent = #0 +line-width = #150\mm +ragged-last = ##t +@} +@end example + +@cindex regelmäßige Zeilenumbrüche +@cindex Zeilenumbrüche in Intervallen + +Um Zeilenumbrüche zu erzwingen, die in festgelegten Intervallen +stattfinden, kann der Befehl @code{\break} in Kombination +mit unsichtbaren Noten und einer Wiederholung (@code{\repeat}) eingesetzt +werden. Das folgende Beispiel etwa setzt die nächsten +28 Takte (im 4/4-Takt) in Zeilen zu jeweils 4 Takten (die auch nur hier +umgebrochen werden): + +@example +<< + \repeat unfold 7 @{ + s1 \noBreak s1 \noBreak + s1 \noBreak s1 \break + @} + @{ @var{Hier die Noten@dots{}} @} +>> +@end example + +Eine Zeilenumbruchkonfiguration kann auch als eine @file{.ly}-Datei +automatisch gespeichert werden. Damit kann die vertikale Ausrichtung +während eines zweiten Programmdurchlaufs angepasst werden um die +Seiten besser zu füllen. Diese Eigenschaft ist recht neu und +kompliziert. Mehr Einzelheiten finden sich in +@rlsr{Spacing}. + +@predefined +@funindex \break +@code{\break}, +@funindex \noBreak +@code{\noBreak}. +@endpredefined + +@seealso +Notationsreferenz: +@ref{\paper-Variablen für den Zeilenumbruch}. + +Schnipsel: +@rlsr{Spacing}. + +Referenz der Interna: +@rinternals{LineBreakEvent}. + + +@node Seitenumbrüche +@subsection Seitenumbrüche +@translationof Page breaking + +@cindex Seitenumbrüche +@cindex Umbrüche, Seite + +Die Standardseitenumbrüche können verändert werden, indem +man die Befehle @code{\pageBreak} bzw. @code{\noPageBreak} +benutzt. Sie verhalten sich analog zu den Befehlen +@code{\break} und @code{\noBreak}. Sie sollten an einem +Taktstrich notiert werden. Diese Befehle erzwingen bzw. +verbieten einen Seitenumbruch. Mit dem @code{\pageBreak}-Befehl +wird natürlich gleichzeitig auch ein Zeilenumbruch erzwungen. + +Die @code{\pageBreak} und @code{\noPageBreak}-Befehle können +auch auf der höchsten Ebene einer Datei benutzt werden, etwa +zwischen Partituren und Textbeschriftungen. + +Es gibt auch vertikale Gegenstücke zu den Variablen +@code{ragged-right} und @code{ragged-last}: +@code{ragged-bottom} und @code{ragged-last-bottom}. Wenn diese +Variablen auf @code{##t} (wahr) gesetzt werden, werden im ersten +Fall die Notensysteme auf allen Seiten eng nach oben orientiert +gesetzt werden. Im zweiten Fall bezieht sich dies nur auf die +letzte Seite. +Zu Einzelheiten siehe @ref{Vertikale \paper-Variablen mit festen Abständen}. + +Seitenumbrüche werden von der @code{page-breaking}-Funktion errechnet. +LilyPond kennt drei Algorithmen um Seitenumbrüche zu errechnen: +@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} und +@code{ly:minimal-breaking}. Der Standard ist @code{ly:optimal-breaking}, +aber der Wert kann in der @code{\paper}-Umgebung geändert werden: + +@example +\paper@{ + #(define page-breaking ly:page-turn-breaking) +@} +@end example + +@funindex \bookpart + +Wenn ein Buch (@code{\book}) viele Parituren und Seiten hat, kann die +Seitenaufteilung schwer zu ermitteln sein und viel Zeit und Prozessorlast +in Anspruch nehmen. Um den Seitenumbruchsprozess zu vereinfachen, +werden @code{\bookpart}-Umgebungen benutzt, um das Buch in mehrere Teil +zu trennen: Die Seitenumbrüche werden seperat für jeden Teil berechnet. +Unterschiedliche Seitenumbruchsfunktionen können in unterschiedlichen +Buchteilen benutzt werden. + +@example +\bookpart @{ + \header @{ + subtitle = "Vorwort" + @} + \paper @{ + %% In einem Abschnitt, der vor allem Text hat, + %% funktioniert womöglich ly:minimal-breaking besser + #(define page-breaking ly:minimal-breaking) + @} + \markup @{ @dots{} @} + @dots{} +@} +\bookpart @{ + %% In diesem Abschnitt mit Noten wird + %% die Standard-Seitenumbruchsfunktion benutzt. + \header @{ + subtitle = "Erster Satz" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + + + +@predefined +@funindex \pageBreak +@code{\pageBreak}, +@funindex \noPageBreak +@code{\noPageBreak}. +@endpredefined + +@seealso +Notationsreferenz: +@ref{\paper-Variablen für den Seitenumbruch}. + +Schnipsel: +@rlsr{Spacing}. + + +@node Optimale Seitenumbrüche +@subsection Optimale Seitenumbrüche +@translationof Optimal page breaking + +@funindex ly:optimal-breaking + +Die @code{ly:optimal-breaking}-Funktion ist die Standardmethode für +LilyPond, um Seitenumbrüche zu errechnen. Hiermit wird versucht, +Seitenumbrüche zu finden, die das Stauchen oder Strecken von Zeilen +minimieren, sowohl horizontal als auch vertikal. Anders als die +@code{ly:page-turn-breaking}-Funktion hat diese Methode keine +Möglichkeit, Überlegungen zum Umblättern mit einzubeziehen. + +@seealso +Schnipsel: +@rlsr{Spacing}. + + +@node Optimale Umbrüche zum Blättern +@subsection Optimale Umbrüche zum Blättern +@translationof Optimal page turning + +@funindex ly:page-turn-breaking + +Es ist oft nötig, die Seiten so umzubrechen, dass sich eine Pause am +Ende jeder zweiten Seite befindet, damit der Musiker es leichter hat, +die Seite umzublättern ohne das Spielen zu Unterbrechen. Die +@code{ly:page-turn-breaking}-Funktion versucht, Seitenumbrüche zu +finden, die das Stauchen oder Strecken von Zeilen minimieren und +gleichzeitig auch noch Seitenumbrüchen an angegebenen Stellen +den Vorrang zu geben. + +Die Funktion wird in zwei Schritten eingesetzt. Zunächst muss sie +in der @code{\paper}-Umgebung aktiviert werden, wie gezeigt in +@ref{Seitenumbrüche}. Dann muss noch angegeben werden, welche Stellen +bevorzugt für Seitenumbrüche benutzt werden sollen. + +Für diesen zweiten Schritt gibt es zwei Methoden. Am Einfachsten ist +es, die möglichen Seitenumbrüche mit dem Befehl @code{\allowPageTurn} +an jeder Stelle manuell anzugeben. + +Wenn Ihnen das zu aufwändig ist, können Sie den @code{Page_turn_engraver} +zu einem @code{Staff}- oder @code{Voice}-Kontext hinzufügen. Dieser +Engraver durchsucht den entsprechenden Kontext nach Stellen ohne Noten. +(Es wird also nicht nach Pausen gesucht, sondern nach Stellen ohne +Noten. Dieses Verhalten verhindert, dass an polyphonen Stellen umgebrochen +wird, wo nur in einer Stimme Pausen vorhanden sind.) Wenn eine +derartige Stelle ohne Noten gefunden wird, fügt der Engraver den +Befehl @code{\allowPageTurn} am letzten Taktstrich des Abschnitts ein. Wenn +in dem Abschnitt ein besonderer Taktstrich vorkommt (wie etwa ein +Doppelstrich), wird der Befehl nach diesem Taktstrich gesetzt. + +@funindex minimumPageTurnLength + +Der @code{Page_turn_engraver} liest die Kontexteigenschaft +@code{minimumPageTurnLength} um zu erkennen, wie lang eine Stelle +frei von Noten sein muss, damit ein Seitenumbruch in Frage kommt. Der +Standardwert hierfür ist @code{#(ly:make-moment 1 1)}. Wenn Sie +Seitenumbrüche zum Umblättern ausschalten wollen, können Sie +einen sehr großen Wert angeben. + +@example +\new Staff \with @{ \consists "Page_turn_engraver" @} +@{ + a4 b c d | + R1 | % Ein Seitenumbruch zum Umblättern erlaubt + a4 b c d | + \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) + R1 | % Seitenumbruch nicht erlaubt + a4 b r2 | + R1*2 | % Seitenumbruch erlaubt + a1 +@} +@end example + +@funindex minimumRepeatLengthForPageTurn + +Der @code{Page_turn_engraver} erkennt Wiederholungen vom Typ @code{volta}. +Ein Seitenumbruch zum Umblättern wird nur zugelassen, wenn vor und nach +der Wiederholung genug Zeit ist, um die Seite wieder zurückzublättern. +Wenn die Wiederholung sehr kurz ist, kann auch Umblättern verboten +werden. Wenn Sie die Kontexteigenschaft +@code{minimumRepeatLengthForPageTurn} definieren, erlaubt der +@code{Page_turn_engraver} nur Umblättern in Wiederholungen, deren +Dauer länger als dieser Wert ist. + +Die Seitenumblätter-Befehle @code{\pageTurn}, @code{\noPageTurn} und +@code{\allowPageTurn} können auch auf oberster Dateiebene benutzt +werden, etwa zwischen Partituren und Textabschnitten. + + +@predefined +@funindex \pageTurn +@code{\pageTurn}, +@funindex \noPageTurn +@code{\noPageTurn}, +@funindex \allowPageTurn +@code{\allowPageTurn}. +@endpredefined + +@seealso +Schnipsel: +@rlsr{Spacing}. + +@knownissues + +In einer Partitur sollte nur ein @code{Page_turn_engraver} vorkommen. Wenn +mehr als einer definiert werden, stören sie sich gegenseitig. + + +@node Minimale Seitenumbrüche +@subsection Minimale Seitenumbrüche +@translationof Minimal page breaking + +@funindex ly:minimal-breaking + +Die @code{ly:minimal-breaking}-Funktion benötigt nur minimale Berechnungen, +um die Seitenumbrüche zu bestimmen. Die Seite wird mit möglichst +vielen Systemen gefüllt und dann zur nächsten Seite gewechselt. Die +Funktion kann benutzt werden um Partituren mit vielen Seiten zu +setzen, wenn die anderen Seitenumbruchsfunktionen zu langsam wären +oder zu viel Speicher beanspruchen. Auch für Seiten mit viel Text +ist die Funktion geeignet. Sie wird folgendermaßen aktiviert: + +@example +\paper @{ + page-breaking = #ly:minimal-breaking +@} +@end example + + +@seealso +Schnipsel: +@rlsr{Spacing}. + + +@node Ausdrückliche Umbrüche +@subsection Ausdrückliche Umbrüche +@translationof Explicit breaks + +Es kann vorkommen, dass LilyPond direkte @code{\break} oder +@code{\pageBreak}-Befehl nicht beachtet. Mit folgenden +Einstellungen kann dieses Verhalten ausgeschaltet werden: + +@example +\override NonMusicalPaperColumn #'line-break-permission = ##f +\override NonMusicalPaperColumn #'page-break-permission = ##f +@end example + +Wenn @code{line-break-permission} die Einstellung falsch +(@code{##f}) hat, werden Zeilenumbrüche nur an den Befehlen +@code{\break} eingefügt und nirgendwo anders. Wenn +@code{page-break-permission} die Einstellung falsch +(@code{##f}) hat, werden Seitenumbrüche nur an den Befehlen +@code{\pageBreak} eingefügt und nirgendwo anders. + +@lilypond[quote,verbatim] +\paper { + indent = #0 + ragged-right = ##t + ragged-bottom = ##t +} + +music = \relative c'' { c8 c c c } + +\score { + \new Staff { + \repeat unfold 2 { \music } \break + \repeat unfold 4 { \music } \break + \repeat unfold 6 { \music } \break + \repeat unfold 8 { \music } \pageBreak + \repeat unfold 8 { \music } \break + \repeat unfold 6 { \music } \break + \repeat unfold 4 { \music } \break + \repeat unfold 2 { \music } + } + \layout { + \context { + \Score + \override NonMusicalPaperColumn #'line-break-permission = ##f + \override NonMusicalPaperColumn #'page-break-permission = ##f + } + } +} +@end lilypond + + +@seealso +Schnipsel: +@rlsr{Spacing}. + + +@node Eine zusätzliche Stimme für Umbrüche benutzen +@subsection Eine zusätzliche Stimme für Umbrüche benutzen +@translationof Using an extra voice for breaks + +Zeilen- und Seitenumbruchbefehle werden normalerweise direkt +zusammen mit den Noten eingegeben. + +@example +music = \relative c'' @{ c4 c c c @} + +\score @{ + \new Staff @{ + \repeat unfold 2 @{ \music @} \break + \repeat unfold 3 @{ \music @} + @} +@} +@end example + +Hierdurch sind zwar die Befehle @code{\break} und @code{\pageBreak} +einfach zu notieren, es werden aber Informationen zur Notation +mit Informationen zur Anordnung auf der Seite vermischt. Man kann +diese Informationen auch voneinander trennen, indem man eine zusätzliche +Stimme einfügt, in der Zeilen- und Seitenumbrüche vorgenommen werden. +Diese zusätzliche Stimme enthält nur unsichtbare Noten und die +Umbruchbefehle: + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + s1 * 2 \break + s1 * 3 \break + s1 * 6 \break + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + +Mit dieser Herangehensweise kann der Code insbesondere +dann klarer notiert werden, wenn man Einstellungen der +@code{line-break-system-details}-Eigenschaft oder +anderer Eigenschaften von +@code{NonMusicalPaperColumnGrob} vornimmt (hierzu auch +@ref{Vertikale Abstände}). + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1 * 2 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 35)) + s1 * 3 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 70)) + s1 * 6 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 105)) + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + + +@seealso +Notationsreferenz: +@ref{Vertikale Abstände}. + +Schnipsel: +@rlsr{Spacing}. + + +@node Vertikale Abstände +@section Vertikale Abstände +@translationof Vertical spacing + +@cindex vertikale Positionierung +@cindex Positionierung, vertikal +@cindex Abstände, vertikal + +Vertikale Abstände werden durch drei Eigenschaften +bestimmt: wieviel Platz frei ist (etwa Papiergröße +und Ränder), wieviel Platz zwischen Systemgruppen +(engl. system) gesetzt werden soll und wieviel +Platz zwischen Notensystemen (engl. staff, Pl. staves) +innerhalb von Gruppen gesetzt wird. + +@menu +* Flexible vertikale Abstände in Systemgruppen:: +* Explizite Positionierung von Systemen und Systemgruppen:: +* Vermeidung von vertikalen Zusammenstößen:: +@end menu + + +@node Flexible vertikale Abstände in Systemgruppen +@subsection Flexible vertikale Abstände in Systemgruppen +@translationof Flexible vertical spacing within systems + +@cindex Abstand zwischen Notensystemen +@cindex Notensystemabstand +@cindex Platz zwischen Notensystemen +@cindex Platz innerhalb von Systemgruppen +@cindex Systemgruppen, Abstände innerhalb + +Drei unterschiedliche Mechanismen kontrollieren das flexible Abstandaufteilung +in Systemgruppen, einer für jede der folgenden Kathegorien: + +@itemize + +@item +@emph{ungruppierte Systeme}, + +@item +@emph{Systemgruppen} (Systeme innerhalb einer @code{staff-group} wie etwa +@code{ChoirStaff} usw.) und + +@item +@emph{Nicht-Notensystemzeilen} (wie etwa @code{Lyrics} (Gesangstext), +@code{ChordNames} (Akkordbezeichnungen) usw.). + +@end itemize + +Die Höhe jeder Systemgruppe wird in zwei Schritten bestimmt. Zunächst +werden alle Systeme anhand des vorhandenen Platzes aufgeteilt. Dann +werden die nicht-Notensysteme (also Akkorde oder Gesangstext) zwischen +den Systemen verteilt. + +Es ist zu beachten, dass der Platzverteilungsmechanismus, der in diesem +Abschnitt behandelt wird, nur die vertikale Platzierung von Systemen und +nicht-Systemzeilen in einzelnen Systemgruppen behandelt. Die vertikale +Platzierung zwischen einzelnen Systemgruppen, Partituren, Beschriftungen +usw. und den Rändern wird durch @code{\paper}-Variablen kontrolliert, die +@ref{Vertikale \paper-Variablen mit flexiblen Abständen}. + +@menu +* Eigenschaften für Abstände innerhalb von Systemgruppen:: +* Abstände von nicht gruppierten Notensystemen:: +* Abstände von gruppierten Notensystemen:: +* Abstände von nicht-Notensystemzeilen:: +@end menu + + +@node Eigenschaften für Abstände innerhalb von Systemgruppen +@unnumberedsubsubsec Eigenschaften für Abstände innerhalb von Systemgruppen +@translationof Within-system spacing properties + +@funindex staff-affinity +@funindex staffgroup-staff-spacing +@funindex staff-staff-spacing +@funindex nonstaff-unrelatedstaff-spacing +@funindex nonstaff-relatedstaff-spacing +@funindex nonstaff-nonstaff-spacing +@funindex default-staff-staff-spacing +@funindex minimum-Y-extent +@funindex extra-offset +@funindex self-alignment-X +@funindex X-offset +@funindex VerticalAxisGroup + +Der vertikalen Platzierungsmechanismen für Abstände innerhalb von Systemgruppen +werden durch zwei Gruppen von Grob-Eigenschaften kontrolliert. Die erste +Gruppe ist mit dem @code{VerticalAxisGroup}-Grob verknüpft, der von allen +Notensystemen und Nicht-Notensystemzeilen erstellt wird. Die zweite Gruppe +ist mit dem @code{StaffGrouper}-Grob verknüpft, der von Systemgruppen erstellt +werden kann, aber nur, wenn das explizit verlangt wird. Die einzelnen Eigenschaften +werden am Ende dieses Abschnitts beschrieben. + +Die Bezeichnungen dieser Eigenschaften (mit Außnahmen von @code{staff-affinity}) +haben das Format @code{@var{Element1}-@var{Element2}-spacing}, wobei +@code{@var{Element1}} und @code{@var{Element2}} die Elemente sind, deren +Abstände eingestellt werden sollen. Dabei ist allerdings zu beachten, dass +@code{@var{Element2}} sich nicht notwendigerweise unterhalb von +@code{@var{Element1}} befindet; beispielsweise +@code{nonstaff-relatedstaff-spacing} (Nicht-Notensystem-verwandtesNotensystem) +misst von dem Nicht-Notensystem nach oben, wenn @code{staff-affinity} +(Richtung, an der sich ein System ausrichtet) auf @code{#UP} (nach oben) +eingestellt ist. + +Jeder Abstand wird zwischen den @emph{Referenzpunkten} der zwei Objekten +gemessen. Der Referenzpunkt eines Notensystems ist die vertikale Mitte +seines @code{StaffSymbol}-Objekts (also die Mittellinie, wenn +@code{line-count} (Notenlinienzähler) ungrade ist, oder der mittlere +Zwischenraum, wenn @code{line-count} grade ist). Die Referenzpunkte für +einzelne Nicht-Notensystemzeilen ergibt sich aus der folgenden Tabelle: + +@multitable {Nicht-Notensystemzeile} {Referenzpunkt} +@headitem Nicht-Notensystemzeile @tab Referenzpunkt +@item @code{ChordNames} @tab Grundlinie +@item @code{NoteNames} @tab Grundlinie +@item @code{Lyrics} @tab Grundlinie +@item @code{Dynamics} @tab vertikale Mitte +@item @code{FiguredBass} @tab höchster Punkt +@item @code{FretBoards} @tab Oberlinie +@end multitable + +Im nächsten Bild zeigen horizontale Striche die Positionen dieser +Referenzpunkte an: + +@lilypond[quote,noragged-right,line-width=110\mm] +#(define zero-space '((padding . -inf.0) (basic-distance . 0))) + +alignToZero = \with { + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space +} +lowerCaseChords = \with { + chordNameLowercaseMinor = ##t +} +staffAffinityDown = \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN +} +labelContext = +#(define-music-function + (parser location context) + (string?) + #{ s1*0^\markup { \typewriter $context } #}) + +\layout { + \context { \Dynamics \alignToZero } + \context { \FiguredBass \alignToZero } + \context { \Lyrics \alignToZero } + \context { \NoteNames \alignToZero } + \context { \ChordNames \alignToZero \lowerCaseChords } + \context { \FretBoards \alignToZero \staffAffinityDown } + \context { \Score + \override BarLine #'stencil = ##f + \override DynamicText #'self-alignment-X = #-1 + \override FretBoard #'X-offset = #1.75 + \override InstrumentName #'minimum-Y-extent = #'(-2 . 2) + \override InstrumentName #'extra-offset = #'(0 . -0.5) + \override TextScript #'minimum-Y-extent = #'(-2 . 3) + \override TimeSignature #'stencil = ##f + } +} + +%% These contexts have reference points at the baseline: +%% ChordNames, NoteNames, and Lyrics +<< + \new ChordNames { \chords { g1:m } } + \new NoteNames { s1 | g1 | } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"baseline " + \textLengthOn + \labelContext "ChordNames" s1 | + \labelContext "NoteNames" s1 | + \labelContext "Lyrics" s1 | + } + \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } } +>> + +%% The reference point for Dynamics is its vertical center +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"vertical center " + \labelContext "Dynamics" s1*3 + } + \new Dynamics { s2\mp s\fp } +>> + +%% The reference point for FiguredBass is its highest point +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"highest point " + \labelContext "FiguredBass" s1 + } + \new FiguredBass { \figuremode { <6 5>1 } } +>> + +%% The reference point for FretBoards is the top line +\include "predefined-guitar-fretboards.ly" +<< + \new FretBoards { \chordmode { e1 } } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"top line " + \labelContext "FretBoards " s1 + } +>> +@end lilypond + +Jeder der vertikalen Platzierungs-Grobeigenschaften (außer +@code{staff-affinity}) benutzt die gleiche Alistenstruktur +wie die @code{\paper}-Variablen, behandelt in +@ref{Vertikale \paper-Variablen mit flexiblen Abständen}. Besondere +Methoden um Alisten zu verändern finden sich in +@ref{Alisten verändern}. Grob-Eigenschaften sollten mit +dem @code{\override}-Befehle innerhalb einer @code{\score}- +oder @code{\layout}-Umgebung angepasst werden, nicht innerhalb einer +@code{\paper}-Umgebung. + +Das folgende Beispiel zeigt die beiden Arten, Alisten zu modifizieren. +Der erste Aufruf verändert nur einen Schlüsselwert einzlen, während +der zweite die Eigenschaft komplett neu definiert: + +@example +\new Staff \with @{ + \override VerticalAxisGroup #'default-staff-staff-spacing + #'basic-distance = #10 +@} @{ @dots{} @} + +\new Staff \with @{ + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 10) + (minimum-distance . 9) + (padding . 1) + (stretchability . 10)) +@} @{ @dots{} @} +@end example + +Um Platzierungseinstellungen global vorzunehmen, müssen sie in der +@code{\layout}-Umgebung vorgenommen werden: + +@example +\layout @{ + \context @{ + \Staff + \override VerticalAxisGroup #'default-staff-staff-spacing + #'basic-distance = #10 + @} +@} +@end example + +Standardeinstellungen für die vertikalen Platzierungs-Grobeigenscahften +finden sich in @rinternals{VerticalAxisGroup} und +@rinternals{StaffGrouper} aufgelistet. Standardveränderungen für bestimmte +Typen von Nicht-Notensystemzeilen finden sich im relevanten Abschnitt in +in @rinternals{Contexts} aufgelistet. + + +@subsubheading Eigenschaften des @code{VerticalAxisGroup}-Grobs + +@code{VerticalAxisGroup}-Eigenschaften werden normalerweise mit einem +@code{\override}-Befehl auf @code{Staff}-(Notensystem-)Ebene (oder +entsprechend) vorgenommen. + +@table @code +@item staff-staff-spacing +System-System-Platzierung + +Wird benutzt, um den Abstand zwischen dem aktuellen Notensystem und dem +Notensystem direkt darunter in der gleichen Notensystemgruppe zu bestimmen, +auch wenn eine oder mehrere Nicht-Notensystemzeilen (wie etwa @code{Lyrics}) +dazwischen stehen. Gilt nicht für das unterste System einer Systemgruppe. + +Die Eigenschaft @code{staff-staff-spacing} einer @code{VerticalAxisGroup} +ist eine Scheme-Funktion, welche die Eigenschaften vom @code{StaffGrouper}-Grob +den Notensystemen zuweist, wenn sie einer Systemgruppe angehören, bzw. +die @code{default-staff-staff-spacing}-Eigenschaft bei einem einzelnen Notensystem. +Dadurch können Systeme unterschiedlich in Abhängigkeit von ihrer Zugehörigkeit +zu einer Gruppe (StaffGroup) platziert werden. Wenn gleichmäßige Aufteilung +ohne Berücksichtigung von Gruppierungen gewünscht ist, kann diese Funktion durch +eine flexible Platzierungs-Aliste ersetzt werden, wobei man die vollständige +Redefinition auf die oben gezeigte Weise vornehmen muss. + +@item default-staff-staff-spacing +Normale-System-System-Platzierung + +Eine flexible Platzierungs-Aliste, die den Wert von @code{staff-staff-spacing} +für ungruppierte Notensysteme einstellt, es sei denn, +@code{staff-staff-spacing} wirde explizit mit @code{\override} eingestellt. + +@item staff-affinity +System-Anziehung + +Die Richtung des Systems, die benutzt wird, um die aktuelle +Nicht-Notensystemzeile zu platzieren. Mögliche Werte sind +@code{UP} (nach oben), @code{DOWN} (nach unten) und +@code{CENTER} (mittig). Wenn @code{CENTER} wird die Nicht-Notensystemzeile +vertikal mittig zwischen den beiden nächsten Systemen oben und unten +platziert, außer Zusammenstöße und andere Platzierungsprobleme verhindern +das. Aufeinanderfolgende Nicht-Notensystemzeilen sollten nicht-aufsteigende +@code{staff-affinity} von oben nach unten haben; also ein Nicht-Notensystemzeile +mit @code{UP} sollte nicht direkt auf eine mit @code{DOWN} folgen. +Nicht-Notensystemzeilen über einem Notensystem sollten @code{DOWN} +benutzen, unter einem Notensystem dagegen @code{UP}. Wenn +@code{staff-affinity} für eine Notensystem eingestellt wird, wird es wie +eine Nicht-Notensystemzeile behandelt. Wenn @code{staff-affinity} +auf @code{#f} gesetzt wird, wird eine Nicht-Notensystemzeile wie ein +Notensystem behandelt. Wird @code{staff-affinity} auf @code{UP}, +@code{CENTER} oder @code{DOWN} gesetzt, wird das Notensystem als +Nicht-Notensystemzeile plaziert. + + +@item nonstaff-relatedstaff-spacing +Nicht-Notensystem-verwandtesSystem-Platzierung + +Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und +dem nächsten Notensystem in der Richtung von @code{staff-affinity}, +wenn keine Nicht-Notensystemzeilen dazwischen auftreten und @code{staff-affinity} +entweder @code{UP} oder @code{DOWN} ist. Wenn @code{staff-affinity} +@code{CENTER} ist, dann wird @code{nonstaff-relatedstaff-spacing} für die +nächsten Notensysteme auf @emph{beiden} Seiten benutzt, auch wenn andere +Nicht-Notensystemzeilen zwischen der aktuellen und einem der Notensystem +auftreten. Das heißt, dass die Platzierung eine Nicht-Notensystemzeile +sowohl von den umliegenden Notensystemen als auch den umliegenden +Nicht-Notensystemzeilen abhängt. Wenn @code{stretchability} einer dieser +Platzierungstypen auf einen kleinen Wert gesetzt wird, dominiert diese +Platzierung. Wird es dagegen auf einen großen Wert gesetzt, hat die +Platzierung dieses Objekts nur einen kleinen Einfluss. + +@item nonstaff-nonstaff-spacing +Nicht-Notensystemzeile-Nicht-Notensystemzeile-Platzierung + +Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und der +Nicht-Notensystemzeile in der Richtung von @code{staff-affinity}, +wenn beide sich auf der gleichen Seite des verwandten Notensystems +befinden und @code{staff-affinity} entweder @code{UP} oder @code{DOWN} ist. + +@item nonstaff-unrelatedstaff-spacing +Nicht-Notensystemzeile-Nicht-verwandtesSystem-Platzierung + +Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und +dem Notensystem in der gegenüberliegenden Richtung von @code{staff-affinity}, +wenn keine anderen Nicht-Notensystemzeilen dazwischen auftreten und +@code{staff-affinity} entweder @code{UP} oder @code{DOWN} ist. Das kann +benutzt werden, um einen Minimalfüllabstand (padding) zwischen einer +@code{Lyrics}-Gesangstextzeile und dem zugehörigen Notensystem zu verlangen. +@end table + + +@subsubheading Eigenschaften des @code{StaffGrouper}-Grobs + +@code{StaffGrouper}-Eigenschaften werden normalerweise mit einem +@code{\override}-Befehl auf @code{StaffGroup}-Ebene (oder +entsprechend) eingestellt. + +@table @code +@item staff-staff-spacing +Notensystem-Notensystem-Abstand + +Der Abstand zwischen zwei aufeinanderfolgenden Notensystemen in +der aktuellen @code{StaffGroup}. Die @code{staff-staff-spacing}-Eigenschaft +des @code{VerticalAxisGroup}-Grobs eines einzelnen Notensytems +kann mit @code{\override} in andere Platzierungswerte für dieses Notensystem +geändert werden. + +@item staffgroup-staff-spacing +Systemgruppe-System-Abstand + +Der Abstand zwischen dem letzten Notensystem der aktuellen @code{StaffGroup} +und dem Notensystem dirket darunter in der selben Notensystemgruppe, +auch wenn eine oder mehrere Nicht-Notensystemzeilen (wie etwa +Gesangstext) zwischen den zwei Notensystemen vorkommen. Gilt nicht +für das letzte Notensystem einer Systemgruppe. Die +@code{staff-staff-spacing}-Eigenschaft des @code{VerticalAxisGroup}-Grobs +individueller Notensysteme kann mit @code{\override} in andere Platzierungswerte +für dieses Notensystem geändert werden. +@end table + +@seealso +Notationsreferenz: +@ref{Vertikale \paper-Variablen mit flexiblen Abständen}, +@ref{Alisten verändern}. + +Referenz der Interna: +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + +Installierte Dateien: +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + + +@node Abstände von nicht gruppierten Notensystemen +@unnumberedsubsubsec Abstände von nicht gruppierten Notensystemen +@translationof Spacing of ungrouped staves + +@emph{Notensysteme} (wie etwa @code{Staff}, @code{DrumStaff}, +@code{TabStaff} usw.) sind Kontexte, die eine oder mehrere Stimmen-Kontexte +enthalten, aber keine anderen Notensysteme enthalten können. + +Folgende Eigenschaften beeinflussen die Abstände von @emph{nicht gruppierten} +Notensystemen: + +@itemize +@item @code{VerticalAxisGroup}-Eigenschaften: +@itemize +@item @code{default-staff-staff-spacing} +@item @code{staff-staff-spacing} +@end itemize +@end itemize + +Diese Eigenschaften sind einzlen oben behandelt worden, siehe +@ref{Eigenschaften für Abstände innerhalb von Systemgruppen}. + +Zusätzliche Eigenschaften kommen hinzu für Notensysteme, die Teil +einer Gruppieren (@code{StaffGroup}) werden, siehe +@ref{Abstände von gruppierten Notensystemen}. + +Folgendes Beispiel zeigt, wie die @code{default-staff-staff-spacing}-Eigenschaft +sich auf die Platzierung von nicht-gruppierten Notensystemen auswirken kann. +Wenn man die gleichen @code{\override}-Befehle auf @code{staff-staff-spacing} +anwendet, ergäbe das den selben Effekt, würde sich aber auch in Fällen auswirken, +in denen die Systeme gruppiert sind. + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Staff + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 8) + (minimum-distance . 7) + (padding . 1)) + } +} + +<< + % The very low note here needs more room than 'basic-distance + % can provide, so the distance between this staff and the next + % is determined by 'padding. + \new Staff { b,2 r | } + + % Here, 'basic-distance provides enough room, and there is no + % need to compress the space (towards 'minimum-distance) to make + % room for anything else on the page, so the distance between + % this staff and the next is determined by 'basic-distance. + \new Staff { \clef bass g2 r | } + + % By setting 'padding to a negative value, staves can be made to + % collide. The lowest acceptable value for 'basic-distance is 0. + \new Staff \with { + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 3.5) + (padding . -10)) + } { \clef bass g2 r | } + \new Staff { \clef bass g2 r | } +>> +@end lilypond + +@seealso +Installierte Dateien: +@file{scm/define-grobs.scm}. + +Schnipsel: +@rlsr{Spacing}. + +Referenz der Interna: +@rinternals{VerticalAxisGroup}. + + +@node Abstände von gruppierten Notensystemen +@unnumberedsubsubsec Abstände von gruppierten Notensystemen +@translationof Spacing of grouped staves + +In Orchesterpartituren und anderen großen Partituren werden Notensysteme +normalerweise in Gruppen zusammengefasst. Der Platz zwischen Gruppen +ist normalerweise größer als der Zwischenraum zwischen einzlenen +Notensystemen der gleichen Gruppe. + +@emph{Gruppierte Notensysteme} (wie @code{StaffGroup}, @code{ChoirStaff}, +@code{GrandStaff} usw.) sind Kontexte, die mehr als ein Notensystem +gleichzeitig enthalten können. + +Folgende Eigenschaften beeinflussen die Platzierung von Notensystemen +innerhalb von Gruppen: + +@itemize +@item @code{VerticalAxisGroup}-Eigenschaften: +@itemize +@item @code{staff-staff-spacing} +@end itemize +@item @code{StaffGrouper}-Eigenschaften: +@itemize +@item @code{staff-staff-spacing} +@item @code{staffgroup-staff-spacing} +@end itemize +@end itemize + +Diese Grob-Eigenschaften sind weiter oben einzeln beschrieben, siehe +@ref{Eigenschaften für Abstände innerhalb von Systemgruppen}. + +Das folgende Beispiel zeigt, wie Eigenscchaften des +@code{StaffGrouper}-Grobs die Platzierung von gruppierten Notensystemen +beeinflussen kann: + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Score + \override StaffGrouper #'staff-staff-spacing #'padding = #0 + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1 + } +} + +<< + \new PianoStaff \with { + \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20 + } << + \new Staff { c'1 } + \new Staff { c'1 } + >> + + \new StaffGroup << + \new Staff { c'1 } + \new Staff { c'1 } + >> +>> +@end lilypond + +@seealso +Installierte Dateien: +@file{scm/define-grobs.scm}. + +Schnipsel: +@rlsr{Spacing}. + +Referenz der Interna: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Abstände von nicht-Notensystemzeilen +@unnumberedsubsubsec Abstände von nicht-Notensystemzeilen +@translationof Spacing of non-staff lines + +@emph{Nicht-Notensystemzeilen} (wie @code{Lyrics}, @code{ChordNames} +usw.) sind Kontexte, deren Layoutobjekte wie Notensysteme gesetzt +werden (also als horizontale Zeilen zwischen Notensystemen). Genau +gesagt sind Nicht-Notensystemzeilen Nicht-Notensystemkontexte, die +ein @code{VerticalAxisGroup}-Layoutobjekt erstellen. + +Folgende Eigenschaften beeinflussen die Abstände von Nicht-Notensystemzeilen: + +@itemize +@item @code{VerticalAxisGroup}-Eigenschaften: +@itemize +@item @code{staff-affinity} +@item @code{nonstaff-relatedstaff-spacing} +@item @code{nonstaff-nonstaff-spacing} +@item @code{nonstaff-unrelatedstaff-spacing} +@end itemize +@end itemize + +Diese Grob-Eigenschaften sind weiter oben einzlen beschrieben; siehe +@ref{Eigenschaften für Abstände innerhalb von Systemgruppen}. + +Das folgende Beispiel zeigt, wie die @code{nonstaff-nonstaff-spacing}-Eigenschaft +die Platzierung von aufeinanderfolgenden Nicht-Notensystemzeilen beeinflussen +kann. Indem hier der Wert von @code{stretchability} auf einen sehr hohen Wert +gesetzt wird, kann der Gesangstext sehr viel weiter als normal gespreizt +werden: + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Lyrics + \override VerticalAxisGroup + #'nonstaff-nonstaff-spacing #'stretchability = #1000 + } +} + +\new StaffGroup +<< + \new Staff \with { + \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30)) + } { c'1 } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #UP + } \lyricmode { up } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #CENTER + } \lyricmode { center } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN + } \lyricmode { down } + \new Staff { c'1 } +>> +@end lilypond + + +@seealso +Installierte Dateien: +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + +Schnispel: +@rlsr{Spacing}. + +@c @lsr{spacing,page-spacing.ly}, +@c @lsr{spacing,alignment-vertical-spacing.ly}. + +Referenz der Interna: +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}. + + + + + + + + + +@node Explizite Positionierung von Systemen +@subsection Explizite Positionierung von Systemen +@translationof Explicit staff and system positioning + +Man kann die flexiblen Einstellungen der vertikalen Abstände, wie sie im +vorigen Abschnitt +erklärt wurden, als eine Sammlung verschiedenerer Einstellmöglichkeiten +verstehen, die vor allem die Größe des vertikalen Platzes zwischen +Notensystemen und Gruppen auf der Seite kontrollieren. + +Die vertikale Platzverteilung kann aber auch auf andere Weise +eingestellt werden: mit den Optionen von +@code{NonMusicalPaperColumn #'line-break-system-details}. Während +der flexible vertikale Abstandsmechanismus vertikalen Füllplatz +definiert, werden mit +@code{NonMusicalPaperColumn #'line-break-system-details} absolute vertikale +Positionen auf der Seite festgelegt. + +@code{NonMusicalPaperColumn #'line-break-system-details} akzeptiert eine +Liste aus drei unterschiedlichen Einstellungen: + +@itemize +@item @code{X-offset} +@item @code{Y-offset} +@item @code{alignment-distances} +@end itemize + +Veränderungen von Grobs (wozu auch @code{NonMusicalPaperColumn} gehört), +können an drei unterschiedlichen Stellen in der Quelldatei vorgenommen +werde: + +@itemize +@item mitten im Notentext +@item in einer @code{\context}-Umgebung +@item in einer @code{\with}-Umgebung +@end itemize + +Wenn der Grob @code{NonMusicalPaperColumn} verändert werden soll, +wird der @code{\override}-Befehl in der @code{\context} oder +@code{\with}-Umgebung eingesetzt. Wenn die Veränderungen aber +mitten im Notentext stattfinden sollen, müssen Sie den Befehl +@code{\overrideProperty} einsetzen. Einige Beispiele für eine +Veränderungen von @code{NonMusicalPaperColumn} mit dem +@code{\overrideProperty}-Befehl sind hier aufgelistet: + +@example +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((alignment-distances . (15))) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40) + (alignment-distances . (15))) +@end example + +Um zu verstehen, wie jede dieser unterschiedlichen Einstellungen +funktioniert, wollen wir uns ein Beispiel vornehmen, dass überhaupt +keine Einstellungen (d.h. @code{\override}-Befehle) enthält: + +@c \book { } is required in these examples to ensure the spacing +@c overrides can be seen between systems. -np + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + s1*5 \break + s1*5 \break + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Diese Partitur nimmt Zeilen- und Seitenumbruchinformationen in einer +eigenen Stimme vor. Mit dieser Methode kann die Layout-Information +einfach von den Noten getrennt werden, was sehr hilfreich ist, wenn +das Beispiel komplizierter wird. Siehe auch +@ref{Eine zusätzliche Stimme für Umbrüche benutzen}. + +Ausdrückliche @code{\break}-Befehle teilen die Noten in sechs Takte +lange Zeilen. Die vertikale Platzverteilung wird von LilyPond +errechnet. Um den vertikalen Beginn einer jeden Systemgruppe +genau anzugeben, kann @code{Y-offset} in der +@code{line-break-system-details}-Eigenschaft des +@code{NonMusicalPaperColumn}-Grobs wie in dem Beispiel +ersichtlich benutzt werden: + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 40)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 80)) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +In der @code{line-break-system-details}-Eigenschaft kann eine Liste +mit vielen Einstellungen eingegeben werden, aber hier wird nur eine +Einstellung angegeben. Die @code{Y-offset}-Eigenschaft bestimmt +hier die exakte vertikale Position auf der Seite, an welcher jede +neue Systemgruppe begonnen wird. + +Da jetzt der exakte Beginn einer jeden Systemgruppe explizit festgelegt wurde, +können wir auch den exakten Beginn eines jeden Notensystems in der +Gruppe festlegen. Dies geschieht mit der @code{alignment-distances}-Eigenschaft +von @code{line-break-system-details}. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 20) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (15))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Dem @code{line-break-system-details}-Attribut des +@code{NonMusicalPaperColumn}-Grobs werden zwei unterschiedliche Eigenschaften +zugewiesen. Auch wenn die Aliste der Attribute von +@code{line-break-system-details} sehr viel mehr Platzierungsparameter +akzeptiert (wie etwa ein korrespondierendes @code{X-offset}-Paar), müssen +hier nur die Parameter @code{Y-offset} und +@code{alignment-distances} gesetzt werden, um den vertikalen Beginn +jedes Systems und jeder Systemgruppe zu kontrollieren. @code{Y-offset} +bestimmt also die vertikale Position von Systemgruppen und @code{alignment-distances} +die vertikale Position von einzelnen Notensystemen. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0) + (alignment-distances . (30 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (10 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (10 30))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new StaffGroup << + \new Staff { \repeat unfold 15 { d'4 d' d' d' } } + \new Staff { \repeat unfold 15 { e'4 e' e' e' } } + >> + >> + } +} +@end lilypond + +Einige Dinge sollten beachtet werden: + +@itemize +@item Wenn @code{alignment-distances} benutzt wird, werden Gesangstextzeilen +nicht als ein System gezählt. + +@item Die Einheiten der Zahlen, die für @code{X-offset}, +@code{Y-offset} und @code{alignment-distances} benutzt werden, werden als +Vielfaches des Abstandes zwischen zwei Notenlinien gewertet. Positive +Werte verschieben Systeme und Gesangstext nach oben, negative Werte nach +unten. + +@item Weil die Einstellungen von @code{NonMusicalPaperColumn #'line-break-system-details} +es möglich machen, Notensysteme und Gruppen an beliebigen Stellen auf der +Seite zu platzieren, kann man damit auch Ränder überschreiben oder sogar +Notensysteme übereinander platzieren. Sinnvolle Werte für diese +Parameter werden derartiges Verhalten vermeiden. +@end itemize + + +@seealso +Schnipsel: +@rlsr{Spacing}. + + +@node Vermeidung von vertikalen Zusammenstößen +@subsection Vermeidung von vertikalen Zusammenstößen +@translationof Vertical collision avoidance + +@cindex Vermeidung von vertikalen Zusammenstößen +@cindex Zusammenstöße, vertikal, vermeiden +@cindex vertikale Zusammenstöße, vermeiden +@cindex Kollisionen, vertikal, vermeiden + +@funindex outside-staff-priority +@funindex outside-staff-padding +@funindex outside-staff-horizontal-padding + +Intuitiv gibt es in der Notation einige Objekte, die zu dem Notensystem +gehören, und einige andere, die immer außerhalb des Notensystems +positioniert werden sollten. Zu diesen letzteren gehören etwa +Übungszeichen, Textbeschriftung und Dynamikbezeichnung (die als +Objekte außerhalb des Systems bezeichnet werden können). LilyPonds +Regeln um diese Objekte zu positionieren lautet: so nah am Notensystem +wie möglich, aber gerade so weit weg, dass sie nicht mit anderen +Objekten zusammenstoßen. + +Dabei setzt LilyPond die @code{outside-staff-priority}-Eigenschaft +ein um herauszufinden, ob ein Grob ein Objekt außerhalb des Systems +ist: wenn @code{outside-staff-priority} eine Zahl ist, dann handelt +es sich um ein Objekt außerhalb des Systems. Zusätzlich teilt +@code{outside-staff-priority} noch mit, in welcher Reihenfolge +die Objekte außerhalb des Systems gesetzt werden sollen. + +Zuerst werden alle Objekte gesetzt, die nicht außerhalb des Systems +gehören. Dann werden die Objekte außerhalb des Systems nach dem Wert +ihrer @code{outside-staff-priority} (in aufsteigender Anordnung) +sortiert. Eins nach dem anderen werden diese Objekte schließlich +genommen und so platziert, dass sie nicht mit den Objekten zusammenstoßen, +die bereits platziert worden sind. Wenn also zwei Objekte außerhalb +des Systems um den gleichen Platz streiten, wird das mit dem +geringeren Wert von @code{outside-staff-priority} näher an das +entsprechende Notensystem gesetzt. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4_"Text"\pp +r2. +\once \override TextScript #'outside-staff-priority = #1 +c4_"Text"\pp % this time the text will be closer to the staff +r2. +% by setting outside-staff-priority to a non-number, +% we disable the automatic collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\once \override DynamicLineSpanner #'outside-staff-priority = ##f +c4_"Text"\pp % now they will collide +@end lilypond + +Der Platz, der zwischen einem Objekt außerhalb des Systems und +dem vorhergehenden Objekt eingefügt werden kann (auch als +padding bezeichnet), kann durch @code{outside-staff-padding} +kontrolliert werden. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\once \override TextScript #'outside-staff-padding = #0 +a'^"This text is placed very close to the note" +\once \override TextScript #'outside-staff-padding = #3 +c^"This text is padded away from the previous text" +c^"This text is placed close to the previous text" +@end lilypond + +Standardmäßig werden Objekte außerhalb des Systems so gesetzt, +dass sie eine horizontale Überschneidung mit einem der +vorher gesetzten Grobs vermeiden. Das kann zu Situationen +führen, in denen Objekte sehr dicht nebeneinander gesetzt +werden. Der vertikale Platz zwischen Notensystemen kann +auch gesetzt werden, sodass Objekte außerhalb des Systems +ineinander greifen. Mit der Eigenschaft +@code{outside-staff-horizontal-padding} können Objekte vertikal +verschoben werden und derartige Situationen kommen nicht +vor. + +@lilypond[quote,ragged-right,relative=2,verbatim] +% the markup is too close to the following note +c4^"Text" +c4 +c''2 +% setting outside-staff-horizontal-padding fixes this +R1 +\once \override TextScript #'outside-staff-horizontal-padding = #1 +c,,4^"Text" +c4 +c''2 +@end lilypond + +@seealso +Schnipsel: +@rlsr{Spacing}. + + +@node Horizontale Abstände +@section Horizontale Abstände +@translationof Horizontal spacing + +@cindex horizontale Platzierung +@cindex horizontale Anordnung +@cindex Anordnung, horizontal + +@menu +* Überblick über horizontale Abstände:: +* Eine neuer Bereich mit anderen Abständen:: +* Horizontale Abstände verändern:: +* Zeilenlänge:: +* Proportionale Notation:: +@end menu + + +@node Überblick über horizontale Abstände +@subsection Überblick über horizontale Abstände +@translationof Horizontal spacing overview + +Die Setzmaschine interpretiert unterschiedliche Notendauern als +dehnbare Abstände (engl. spring) unterschiedlicher Länge. Längere +Dauern erhalten mehr Platz, kürzere weniger. Die kürzeste Dauer +erhält eine feste Breite (die mit @code{shortest-duration-space} +im @code{SpacingSpanner}-Objekt kontrolliert werden kann). Je +länger die Dauer, umso mehr Platz erhält die Note: wenn ihre +Dauer verdoppelt wird, wird ein bestimmter Platz hinzugefügt +(dessen Breite durch @code{spacing-increment} bestimmt werden +kann). + +Das folgende Stück beispielsweise enthält Halbe, Viertel und Achtel. +Die Achtelnote wird gefolgt von einem Notenkopfabstand (NKA). Die +Viertel wird von 2 NKA gefolgt, die Halbe von 3 NKA usw. + +@lilypond[quote,fragment,verbatim,relative=1] +c2 c4. c8 c4. c8 c4. c8 c8 +c8 c4 c4 c4 +@end lilypond + +Normalerweise ist @code{spacing-increment} definiert als 1.2 mal +der Abstand zwischen zwei Notenlinien, was in etwa die Breite eines +Notenkopfes ist. @code{shortest-duration-space} ist definiert als +2.0, was bedeutet, dass die kürzeste Note 2.4 Notenlinienabstände +2.0 mal der Wert von @code{spacing-increment}) horizontalen +Abstand erhält. Der Abstand wird von der linken Kante des Symbols +errechnet, so dass die kürzeste Note üblicherweise von 1 NKA +Abstand gefolgt wird. + +Wenn diese Herangehensweise konsequent angewandt würde, würde eine +einzige Zweiunddreißigstel eine Partitur, in der vor allem Achtel und +Sechzehntel vorkommen, sehr weit auseinanderdehnen. Die kürzeste +Note wäre nun keine Sechzehntel mehr, sondern eine Zweiunddreißigstel, +wodurch an jede Note der Wert von 1 NKA hinzugefügt würde. Um das +zu vermeiden, ist die kürzeste Dauer für die Platzverteilung nicht die +kürzeste Note einer Partitur, sondern die, die am häufigsten vorkommt. + +Die Notendauer, die am häufigsten vorkommt, wird auf folgende +Weise bestimmt: in jedem Takt wird die kürzeste Note bestimmt. Die +häufigste kürzeste Note wird dann als Grundlage für die Platzverteilung +der Noten herangezogen, mit der Bedingung, dass diese kürzeste +Note immer ein Achtel oder kürzer sein soll. Die kürzeste Dauer +wird ausgegeben, wenn @code{lilypond} mit der Option @code{--verbose} +aufgerufen wird. + +Diese Dauern können aber auch angepasst werden. Wenn Sie die Eigenschaft +@code{common-shortest-duration} in dem @code{SpacingSpanner} setzen, +dann wird hiermit die Grunddauer für die Platzverteilung eingestellt. +Die maximale Dauer für diesen Grundwert (normalerweise eine Achtel) +wird definiert mit @code{base-shortest-duration}. + +@funindex common-shortest-duration +@funindex base-shortest-duration +@funindex stem-spacing-correction +@funindex spacing + +Noten, die noch kürzer sind als die häufigste kürzeste Note, werden +durch einen Platz voneinander getrennt, der proportional zu ihrer +Dauer in Beziehung zur häufigsten kürzesten Note ist. Wenn also +nur ein paar Sechzehntel zu dem obigen Beispiel hinzugefügt werden, +würden sie von 1/2 NKA gefolgt werden: + +@lilypond[quote,fragment,verbatim,relative=2] +c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 +@end lilypond + +In dem @emph{Aufsatz zum automatisierten Notensatz} wurde erklärt, dass die +Richtung der Notenhälse die Platzverteilung beeinflusst (siehe +@ressay{Optischer Ausgleich}). Das wird +kontrolliert durch die @code{stem-spacing-correction}-Eigenschaft +in dem @code{NoteSpacing}-Objekt. Dieses Objekt wird für jeden +@code{Voice}-Kontext erstellt. Das @code{StaffSpacing}-Objekt (in +einem @code{Staff}-Kontext erstellt) enthält die gleiche Eigenschaft, +um die Verteilung von Hälsen neben Taktlinien zu kontrollieren. In +dem folgenden Beispiel werden diese Einstellungen gezeigt, einmal +mit den Standardwerten und dann mit größeren Werten, damit man sie +besser sieht: + +@lilypond[quote,ragged-right] +{ + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | + \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 + \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | +} +@end lilypond + +Proportionale Notation ist unterstützt, siehe @ref{Proportionale Notation}. + +@seealso +Schnipsel: +@rlsr{Spacing}. + +Referenz der Interna: +@rinternals{SpacingSpanner}, +@rinternals{NoteSpacing}, +@rinternals{StaffSpacing}, +@rinternals{NonMusicalPaperColumn}. + +Aufsatz über den automatischen Notensatz: +@ressay{Optischer Ausgleich}. + +@knownissues + +Es gibt keine sinnvolle Möglichkeit, die horizontale Verteilung der +Noten zu unterdrücken. Die folgende Problemumgehung, mit der +dehnbare Abstände (padding) eingesetzt werden, kann benutzt +werden, um zusätzlichen Platz in eine Partitur einzufügen. + +@example + \once \override Score.SeparationItem #'padding = #10 +@end example + +Es gibt derzeit keine Möglichkeit, den Platz zu verringern. + + +@node Eine neuer Bereich mit anderen Abständen +@subsection Eine neuer Bereich mit anderen Abständen +@translationof New spacing area + +@cindex horizontale Notenabstände, Abschnitte definierten +@cindex Notenabstände, Abschnitte definieren +@cindex Abschnitte definieren, Notenabstände + +Neue Abschnitte mit unterschiedlichen Notenabstandsparametern +können mit dem Befehl @code{newSpacingSection} begonnen werden. +Das ist hilfreich, wenn in verschiedenen Abschnitten die +Verhältnisse von kurzen und langen Noten sehr unterschiedlich +ausfallen. + +Im folgenden Beispiel wird durch die neue Taktart ein neuer +Abschnitt begonnen, in dem die Sechzehntel weiter außeinander +gesetzt werden sollen. + +@lilypond[relative,fragment,verbatim,quote] +\time 2/4 +c4 c8 c +c8 c c4 c16[ c c8] c4 +\newSpacingSection +\time 4/16 +c16[ c c8] +@end lilypond + +Der @code{\newSpacingSection}-Befehl erstellt ein neues +@code{SpacingSpanner}-Objekt, weshalb auch neue Anpassungen +mit dem @code{\override}-Befehl an dieser Stelle eingesetzt +werden können. + +@seealso +Schnipsel: +@rlsr{Spacing}. + +Referenz der Interna: +@rinternals{SpacingSpanner}. + + +@node Horizontale Abstände verändern +@subsection Horizontale Abstände verändern +@translationof Changing horizontal spacing + +@cindex Notenabstände, horizontal +@cindex horizontale Abstände +@cindex horizontale Notenabstände + +Die horizontalen Abstände können mit der +@code{base-shortest-duration}-Eigenschaft +verändert werden. In den folgenden Beispielen +werden die gleichen Noten eingesetzt, zuerst +ohne die Eigenschaft zu verändern, im zweiten +Beispiel dann mit einem anderen Wert. Größere +Werte für @code{ly:make-moment} ergeben dichtere +Noten. @code{ly:make-moment} erstellt eine Dauer, +die als Bruch notiert wird, sodass @code{1 4} +eine größere Dauer ist als @code{1 16}. + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } +} +@end lilypond + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } +} +@end lilypond + + +@snippets + +Standardmäßig wird die Platzverteilung in Triolen und andern +rhythmischen Aufteilungen nach verschiedenen nicht von der +Dauer abgeleiteten Faktoren (wie Versetzungszeichen, +Schlüsselwechseln usw.) berechnet. Um diese Symbole zu +ignorieren und eine gleichmäßige Verteilung der Noten +zu erzwingen, kann die gleichmäßige Dehnung (engl. +uniform stretching) zu Beginn einer Partitur +mit @code{Score.SpacingSpanner #'uniform-stretching} eingeschaltet +werden: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new Staff { + \times 4/5 { + c8 c8 c8 c8 c8 + } + c8 c8 c8 c8 + } + \new Staff { + c8 c8 c8 c8 + \times 4/5 { + c8 c8 c8 c8 c8 + } + } + >> + \layout { + \context { + \Score + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +Wenn @code{strict-note-spacing} eingestellt ist, werden Noten +gesetzt, ohne dass Schlüssel, Taktlinie oder Verzierungsnoten +zusätzlichen Platz erhalten. + +@lilypond[quote,ragged-right,relative=2,fragment,verbatim] +\override Score.SpacingSpanner #'strict-note-spacing = ##t +\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } +@end lilypond + + +@seealso +Schnipsel: +@rlsr{Spacing}. + + +@node Zeilenlänge +@subsection Zeilenlänge +@translationof Line length + +@cindex Seitenumbrüche +@cindex Umbrechen von Seiten +@cindex Zeilenlänge +@cindex Länge von Zeilen + +@funindex indent +@funindex line-width +@funindex ragged-right +@funindex ragged-last + +@c Although line-width can be set in \layout, it should be set in paper +@c block, to get page layout right. +@c Setting indent in \paper block makes not much sense, but it works. + +@c Bit verbose and vague, use examples? +Die grundlegenden Einstellungen, die Einfluss auf die Zeilenlänge +haben, sind @code{indent} (Einzug) und @code{line-width} +(Zeilenbreite). Sie werden in der @code{\layout}-Umgebung +eingestellt. Der erste Befehl bestimmt den Einzug der ersten +Zeile, der zweite die Zeilenlänge der weiteren Notenzeilen. + +Wenn @code{ragged-right} eingestellt ist (als in der +@code{\layout}-Umgebung auf den Wert @code{#t} gesetzt wurde), +werden die Systeme linksbündig gesetzt und nicht bis zum +rechten Rand hin durchgezogen, sondern den Noten entsprechend +gesetzt. Das ist oftmals nützlich für kleine Notenfragmente +und um zu überprüfen, wie eng die Noten natürlicherweise +gesetzt werden würden. Die normale Einstellung ist unwahr +(@code{#f}), aber wenn eine Partitur nur aus einer Zeile besteht, +ist der Standardwert wahr. + +Die Option @code{ragged-last} verhält sich ähnlich zu @code{ragged-right}, +aber wirkt sich nur auf die letzte Zeile eines Stückes aus. +Für diese letzte Zeile gibt es keine Einschränkungen. Das +Resultat erinnert an Textabsätze im Blocksatz, wo die letzte +Zeile des Absatzes mit ihrer natürlichen Länge gesetzt wird. +@c Note that for text there are several options for the last line. +@c While Knuth TeX uses natural length, lead typesetters use the same +@c stretch as the previous line. eTeX uses \lastlinefit to +@c interpolate between both these solutions. + +@example +\layout @{ +indent = #0 +line-width = #150 +ragged-last = ##t +@} +@end example + +@seealso +Schnipsel: +@rlsr{Spacing}. + + +@node Proportionale Notation +@subsection Proportionale Notation +@translationof Proportional notation + +LilyPond hat Unterstützung für proportionale Notation. Dabei handelt +es sich um eine horizontale Platzverteilung, die jeder Note einen +exakt ihrer Dauer entsprechenden Platz zuordnet. Man kann es vergleichen +mit der Notenplatzierung auf einem Raster. In einigen Partituren +des späten 20. und frühen 21. Jahrhunderts wird dies proportionale +Notation benutzt, um sehr komplizierte rhythmische Verhältnisse +klarer darzustellen, oder um einen Zeitstrahl oder ähnliche Graphiken +direkt in die Partitur zu integrieren. + +LilyPond hat Unterstützung für fünf verschiedene Einstellungen der +proportionalen Notation, die alle zusammen oder jede für sich +benutzt werden können: + +@itemize +@item @code{proportionalNotationDuration} (proportionale Notendauer) +@item @code{uniform-stretching} (gleichmäßige Dehnung) +@item @code{strict-note-spacing} (strenge Notenverteilung) +@item @code{\remove Separating_line_group_engraver} (entferne Liniengruppentrennungsengraver) +@item @code{\override PaperColumn #'used = ##t} (PapierSpalte benutzt = wahr) +@end itemize + +In den Beispielen unten werden diese fünf unterschiedlichen Einstellungen +für die proportionale Notation vorgestellt und ihre Wirkungen +untereinander illustriert. + +Es soll mit diesem 1 Takt langen Beispiel begonnen werden, in welchem +die klassischen Abstände und Flattersatz (ragged-right) eingesetzt werden: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> +} +@end lilypond + +Die Halbe, mit der der Takt beginnt, braucht weitaus weniger +Platz als die Hälfte des Taktes. Gleichermaßen haben die +Sechzehntel und die Sechzehntel-Quintolen (oder Zwanzigstel), +mit denen der Takt endet, insgesamt weitaus mehr als die Hälfte +der Taktbreite. + +Im klassischen Notensatz kann dieses Verhalten genau das gewünschte +Ergebnis bringen, weil dadurch horizontaler Platz von der Halben +weggenommen werden kann und so insgesamt Platz in dem Takt eingespart +wird. + +Wenn allerdings ein Zeitstrahl oder andere zeitliche ablaufende +Graphiken über oder unter dem Takt eingefügt werden soll, braucht man +eine Notenplatzierung, die exakt der von ihnen eingenommenen Dauer +entspricht. Auf folgende Art wird die proportionale Notation +eingeschaltet: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + +Die Halbe zu Beginn des Taktes und die schnelleren Noten in der zweiten +Takthälfte nehmen jetzt genau den gleichen horizontalen Platz ein. Jetzt +könnte man einen Zeitstrahl mit dem Takt synchronisieren. + +Die Einstellung von @code{proportionalNotationDuration} gehört zum +@code{Score}-Kontext. Kontexteinstellungen können an drei verschiedenen +Stellen in der Quelldatei geschrieben werden: in einer @code{\with}-Umgebung, +in einer @code{\context}-Umgebung oder direkt in den Noten mit dem +@code{\set}-Befehl. Alle drei Positionen sind gleichwertig und es hängt +vom Benutzer ab, welche bevorzugt wird. + +Die Eigenschaft @code{proportionalNotationDuration} braucht ein Argument, +welches die Referenzdauer ist, anhand welcher alle Noten platziert werden. +Hier wird die LilyPond Scheme-Funktion @code{make-moment} eingesetzt. Sie +braucht zwei Argumente: einen Zähler und einen Nenner, die einen Bruch einer +Ganzen darstellen. Die Funktion @code{#(ly:make-moment 1 20)} ergibt also +eine Referenzdauer von einer Zwanzigstel. Genauso gut können etwa die Dauern +@code{#(ly:make-moment 1 16)}, @code{#(ly:make-moment 1 8)} oder +@code{#(ly:make-moment 3 97)} eingesetzt werden. + +Die richtige Referenzdauer, mit der eine vernünftige Verteilung der Noten +proportional möglich ist, muss durch Ausprobieren herausgefunden werden. +Dabei sollte man mit einer Dauer beginnen, die der kleinsten Note des +Stückes nahekommt. Kleine Referenzdauern lassen die Noten sehr gedehnt +erscheinen, größere Referenzdauern zwingen sie dichter zusammen. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 8) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 16) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 32) + } + } +} +@end lilypond + +Man muss beachten, dass die Referenzdauer nicht zu groß ist +(wie die Achtel in dem Beispiel oben), denn dadurch werden +die Noten so dicht gesetzt, dass sich eventuell sogar Notenköpfe +von sehr kleinen Notenwerten überschneiden können. Die proportionale +Notation nimmt üblicherweise mehr Platz ein als die klassische +Platzverteilung. Der rhythmischen Klarheit muss ein eng gesetztes +Notenbild geopfert werden. + +In Folgenden soll betrachtet werden, wie sich überlappende +rhythmische Aufteilungen am besten positioniert werden. Als Referenz +wird das erste Beispiel herangezogen, zu welchem ein zweites +System mit anderen rhythmischen Werten hinzugefügt wird: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> +} +@end lilypond + +Die Platzaufteilung ist schlecht, weil die gleichlangen Noten des +untersten Systems nicht gleichmäßig verteilt sind. Im klassischen +Notensatz kommen komplexe rhythmische Verhältnisse wie dieses sehr +selten vor, sodass der Notensatz nicht in Hinsicht auf sie optimiert +ist. @code{proportionalNotationDuration} hilft in +dieser Situation deutlich: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + +Aber bei sehr genauer Betrachtung sind die Noten der zweiten Hälfte +der Nonole doch immer noch eine Spur weiter gesetzt als die Noten +der ersten Hälfte. Um wirklich gleichmäßige Abstände zu erzwingen, +sollte auch noch die gleichmäßige Dehnung (@code{uniform-stretching}) angeschaltet werden, die eine Eigenschaft von @code{SpacingSpanner} ist: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +Das Beispiel mit den zwei Systemen ist nun exakt nach den +rhythmischen Werten der Noten gesetzt, sodass ein Zeitstrahl +oder ähnliches eingefügt werden könnte. + +Alle Einstellungen zur proportionalen Notation erwarten, +dass die @code{uniform-stretching}-Eigenschaft des +@code{SpacingSpanner}-Objekts auf wahr (@code{#t}) gesetzt wird. Andernfalls +kann es vorkommen, dass bestimmte Abstände (etwa von +unsichtbaren Noten) nicht richtig gesetzt werden. + +Das @code{SpacingSpanner}-Objekt ist ein abstraktes Grob, dass sich im +@code{Score}-Kontext befindet. Genauso wie die Einstellungen +von @code{proportionalNotationDuration} können auch diese +Veränderungen an den drei Stellen in der Quelldatei vorkommen: +in der @code{\with}-Umgebung innerhalb von @code{Score}, in +einer @code{\context}-Umgebung oder direkt im Notentext. + +Standardmäßig gibt es nur ein @code{SpacingSpanner} pro @code{Score}. +Das heißt, dass @code{uniform-stretching} für die gesamte Partitur +(d.h. für die Reichweite von @code{Score}) entweder an- oder +ausgeschaltet ist. Man kann allerdings in einer Partitur unterschiedliche +Abschnitte mit verschiedenem Platzierungsverhalten definieren. +Hierzu ist der Befehl @code{\newSpacingSection} da. Siehe auch @ref{Eine neuer Bereich mit anderen Abständen}. + +Im Folgenden soll gezeigt werden, wie sich der +@code{Separating_line_group_engraver} +auswirkt und warum er normalerweise für proportionale Notation ausgeschaltet wird. +In diesem Beispiel wird verdeutlicht, dass vor jeder ersten Note eines Notensystems +immer etwas zusätzlicher Platz gesetzt wird: + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff { + c'1 + \break + c'1 +} +@end lilypond + +Der gleiche horizontale zusätzliche Platz wird vor eine Noten gesetzt, wenn sie +einer Taktart, einem Schlüssel oder einer Tonartbezeichnung folgt. +Dieser Platz wird durch @code{Separating_line_group_engraver} +eingefügt; wenn wir ihn aus der Partitur entfernen, entfällt +auch dieser zusätzliche Platz: + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff \with { + \remove Separating_line_group_engraver +} { + c'1 + \break + c'1 +} +@end lilypond + +Nichtmusikalische Elemente wie Takt- und Tonartangaben, Schlüssel und +Versetzungszeichen sind problematisch in proportionaler +Notation. Keine dieser Elemente hat eine rhythmische Dauer, aber +alle brauchen horizontalen Platz. Das Problem wird auf unterschiedliche +Weise gelöst. + +Es ist manchmal möglich, Probleme mit Tonarten zu lösen, indem keine +benutzt werden. Das ist durchaus eine ernstzunehmende Option, weil +die meisten Partituren mit proportionaler Notation für heutige +Musik geschrieben werden. Ähnliches gilt für Taktarten, insbesondere, +wenn ein Zeitstrahl in die Partitur eingearbeitet werden soll. +In den meisten Partituren kommt jedoch irgendeine Taktart vor. +Schlüssel und Versetzungszeichen sind noch wichtiger; auf +sie kann selten verzichtet werden. + +Eine Lösungsmöglichkeit ist es, die @code{strict-note-spacing}-Eigenschaft +des @code{SpacingSpanner}-Objekts zu benutzen. Zum Vergleich +die beiden Partituren unten: + +@lilypond[quote,verbatim,ragged-right] +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} + +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \override Score.SpacingSpanner #'strict-note-spacing = ##t + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} +@end lilypond + +Bei beiden handelt es sich um proportionale Notation, aber +die Platzverteilung im oberen Beispiel ist zu weit wegen +des Schlüsselwechsels. Die Platzverteilung des zweiten +Beispiels dagegen bleibt rhythmisch korrekt. +@code{strict-note-spacing} bewirkt, dass Takt- und +Tonartbezeichnungen, Schlüssel und Versetzungszeichen +keine Rolle bei der Berechnung der Abstände spielen. + +Zusätzlich zu den hier vorgestellten Einstellungen gibt es +noch eine Reihe von Möglichkeiten, die oft in proportionaler +Notation benutzt werden. Dazu gehören: + +@itemize +@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} +@item @code{tupletFullLength = ##t} +@item @code{\override Beam #'breakable = ##t} +@item @code{\override Glissando #'breakable = ##t} +@item @code{\override TextSpanner #'breakable = ##t} +@item @code{\remove Forbid_line_break_engraver in the Voice context} +@end itemize + +Diese Einstellungen bewirken, dass auch Verzierungsnoten proportional +gesetzt werden, dass Klammern von rhythmischen Gruppen bis zu den +Anfangs- und Endpunkten ausgedehnt werden und lassen dehnbare +Objekte wie Balken und Glissandi auch über Taktstriche hinweg zu. + +@seealso +Notationsreferenz: +@ref{Eine neuer Bereich mit anderen Abständen}. + +Schnipsel: +@rlsr{Spacing}. + + +@node Die Musik auf weniger Seiten zwingen +@section Die Musik auf weniger Seiten zwingen +@translationof Fitting music onto fewer pages + +Manchmal kommt es vor, dass nur ein oder zwei Systeme auf die +nächste Seite geraten, obwohl es so aussieht, als ob auf der +vorigen Seite genügend Platz ist, um diese Systeme auch noch +unterzubringen. + +Wenn man derartige Platzierungsprobleme untersucht, ist die +Funktion @code{annotate-spacing} von sehr großer Hilfe. Hiermit +wird in den Musiksatz zusätzlich Information darüber ausgegeben, +wieviel Platz bestimmten Parametern zugewiesen wird. Genaueres +hierzu in @ref{Abstände anzeigen lassen}. + +@menu +* Abstände anzeigen lassen:: +* Abstände verändern:: +@end menu + + +@node Abstände anzeigen lassen +@subsection Abstände anzeigen lassen +@translationof Displaying spacing + +@cindex Platzierung, Layouteinstellungen + +@funindex annotate-spacing + +Die Dimensionen von vertikalen und horizontalen Platzierungsvariablen, +die veränderbar sind, lassen sich mit ihren aktuellen Werten im +Notentext anzeigen, wenn man die Funktion +@code{annotate-spacing} in der @code{\paper}-Umgebung einschaltet: + +@c need to have \book{} otherwise we get the separate systems. -hwn +@lilypond[verbatim,quote] +#(set-default-paper-size "a6" 'landscape) +\book { + \score { { c4 } } + \paper { annotate-spacing = ##t } +} +@end lilypond + +@noindent +Alle Layoutdimensionen werden in Notenlinienzwischenräumen +aufgelistet, unabhängig von den Einheiten, mit denen sie in der +@code{\paper}- oder @code{\layout}-Umgebung definiert worden +sind. In dem letzten Beispiel hat @code{paper-height} einen Wert von +59.75 Notenlinienzwischenräumen und @code{staff-size} +Systemhöhe) ist 20 Punkte. Dabei gilt: + +@multitable {1 Notenlinienzwischenraum} {Systemgröße)/4 * (25.4/72.27) mm} + +@item 1 Punkt +@tab = (25.4/72.27) mm + +@item 1 Notenlinienzwischenraum +@tab = (@code{staff-size})/4 pts +@item +@tab = (@code{staff-size})/4 * (25.4/72.27) mm + +@end multitable + +In diesem Fall ist ein @code{staff-space} (Notenlinienzwischenraum) +etwa gleich 1.757 mm. Deshalb entspricht der Wert von 95.75 +@code{staff-space} für @code{paper-height} (Papierhöhe) 105 mm, +die Höhe eines quer gelegten A6-Papiers. Die Paare (@var{a},@var{b}) sind +Intervalle, wobei @var{a} der untere Rand und @var{b} der +obere Rand des Intervalls. + +@seealso + +Notationsreferenz: +@ref{Die Notensystemgröße einstellen} + +Schnipsel: +@rlsr{Spacing}. + + +@node Abstände verändern +@subsection Abstände verändern +@translationof Changing spacing + +Die Ausgabe von @code{annotate-spacing} bietet sehr viele +Details zu den vertikalen Dimensionen einer Partitur. Zu Information, +wie Seitenränder und andere Layout-Variablen geändert werden +können, siehe @ref{Seitenformatierung}. + +Neben Rändern gibt es einige weitere Optionen, Platz zu sparen: + +@itemize +@item +LilyPond kann die Systeme so dicht wie möglich platzieren (damit +so viele Systeme wie möglich auf eine Seite passen), aber sie +dann so anordnen, dass kein weißer Rand unten auf der Seite entsteht. + +@example +\paper @{ + system-system-spacing = #'((padding . 0) (basic-distance . 0.1)) + ragged-last-bottom = ##f + ragged-bottom = ##f +@} +@end example + +@item +Die Anzahl der Systeme kann erzwungen werden. Das kann auf +zwei Arten helfen: wenn einfach nur ein Wert gesetzt wird, auch +wenn es die gleiche Anzahl ist, die auch schon vorher von LilyPond +erstellt wurde, kann manchmal dazu führen, dass mehr Systeme +auf eine Seite gesetzt werden. Das liegt daran, dass ein +Schritt im Notensatz ausgelassen wird, der die Seitenverteilung +nur grob einschätzt, sodass eine bessere Seitenverteilung +entsteht. Auch wenn man eine Verringerung der Anzahl an Systemen +erzwingt, kann oft eine Seite eingespart werden. Wenn LilyPond +die Musik etwa auf 11 Systeme verteilt, kann man die Benutzung von +nur 10 Systemen erzwingen. + +@example +\paper @{ + system-count = #10 +@} +@end example + +@item +Vermeidung (oder Verminderung) von Objekten, die den vertikalen Abstand von Systemen +vergrößern, hilft oft. Die Verwendung von Klammern bei Wiederholungen +(oder alternativen Wiederholungen) +etwa braucht mehr Platz. Wenn die Noten innerhalb der Klammern auf +zwei Systeme verteilt sind, brauchen sie mehr Platz, als wenn sie +nur auf einer Zeile gedruckt werden. + +Ein anderes Beispiel ist es, Dynamik-Zeichen, die besonders +weit @qq{hervorstehen}, zu verschieben. + +@lilypond[verbatim,quote,relative=1] +e4 c g\f c +e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c +@end lilypond + +@item +Die horizontalen Abstände können mit der +@code{SpacingSpanner}-Eigenschaft verändert werden. Siehe +@ref{Horizontale Abstände verändern} für Einzelheiten. Dieses +Beispiel zeigt die normalen Abstände: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } +} +@end lilypond + +@noindent +Das nächste Beispiel verändert @code{common-shortest-duration} (die +häufigste kürzeste Note) von @code{1/4} zu @code{1/2}. Die Viertelnote +ist dennoch die häufigste Note in diesem Abschnitt, sodass der +Notentext zusammengedrängt, wird, wenn eine Halbe als Standard +angegeben wird: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'common-shortest-duration = #(ly:make-moment 1 2) + } + } +} +@end lilypond + +@noindent +Die @code{common-shortest-duration}-Eigenschaft kann nicht +dynamisch verändert werden, darum muss sie immer in der +@code{\context}-Umgebung definiert werden und wirkt sich somit +auf eine ganze @code{\score}-Umgebung aus. + +@end itemize + +@seealso +Notationsreferenz: +@ref{Seitenformatierung}, +@ref{Horizontale Abstände verändern}. + +Schnipsel: +@rlsr{Spacing}. diff --git a/Documentation/de/notation/specialist.itely b/Documentation/de/notation/specialist.itely new file mode 100644 index 0000000000..5e4fc84f7b --- /dev/null +++ b/Documentation/de/notation/specialist.itely @@ -0,0 +1,43 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437 + + 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" + +@c Translators: Till Paala + +@node Spezielle Notation +@chapter Spezielle Notation +@translationof Specialist notation + +Dieser Abschnitt erklärt, wie Notation erstellt wird, die nur für ein +bestimmtes Instrument oder einen Stil eingesetzt wird. + +@menu +* Notation von Gesang:: +* Tasteninstrumente und andere Instrumente mit mehreren Systemen:: +* Bundlose Saiteninstrumente:: +* Saiteninstrumente mit Bünden:: +* Schlagzeug:: +* Blasinstrumente:: +* Notation von Akkorden:: +* Zeitgenössische Musik:: +* Notation von alter Musik:: +* Weltmusik:: +@end menu + +@include notation/vocal.itely +@include notation/keyboards.itely +@include notation/unfretted-strings.itely +@include notation/fretted-strings.itely +@include notation/percussion.itely +@include notation/wind.itely +@include notation/chords.itely +@include notation/contemporary.itely +@include notation/ancient.itely +@include notation/world.itely diff --git a/Documentation/de/notation/staff.itely b/Documentation/de/notation/staff.itely new file mode 100644 index 0000000000..ac9914185e --- /dev/null +++ b/Documentation/de/notation/staff.itely @@ -0,0 +1,1473 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + + 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" + +@c Translators: Till Paala + +@node Notation auf Systemen +@section Notation auf Systemen +@translationof Staff notation + +@lilypondfile[quote]{staff-headword.ly} + +Dieser Abschnitt zeigt, wie die Erscheinung von Systemen beeinflusst +wird, wie Partituren mit mehr als einem System gesetzt werden und wie +man Aufführungsanweisungen und Stichnoten zu einzelnen Systemen hinzufügt. + +@menu +* Systeme anzeigen lassen:: +* Einzelne Systeme verändern:: +* Orchesterstimmen erstellen:: +@end menu + + +@node Systeme anzeigen lassen +@subsection Systeme anzeigen lassen +@translationof Displaying staves + +Dieser Abschnitt zeigt unterschiedliche Methoden, Notensysteme und +Gruppen von Systemen zu erstellen. + +@menu +* Neue Notensysteme erstellen:: +* Systeme gruppieren:: +* Verschachtelte Notensysteme:: +* Systeme trennen:: +@end menu + +@node Neue Notensysteme erstellen +@unnumberedsubsubsec Neue Notensysteme erstellen +@translationof Instantiating new staves + +@cindex Beginn eines Notensystems +@cindex Notensystem, neu +@cindex Percussionsnotensystem +@cindex Perkussionsnotensystem +@cindex einzelnes Notensystem +@cindex rhythmisches Notensystem +@cindex Tabulatursystem +@cindex Tabulatur +@cindex Gregorianischer Choral, Transkription +@cindex neues Notensystem + +@funindex \drummode +@funindex drummode +@funindex DrumStaff +@funindex RhythmicStaff +@funindex TabStaff +@funindex MensuralStaff +@funindex VaticanaStaff +@funindex GregorianTranscriptionStaff + +@notation{Notensysteme} (engl. @notation{staff}, Pl. @notation{staves}) +werden mit dem @code{\new} oder @code{\context}-Befehl erstellt. Zu +Einzelheiten siehe +@ref{Kontexte erstellen}. + +Der einfachste Notensystem-Kontext ist @code{Staff}: + +@lilypond[verbatim,quote,relative=2] +\new Staff { c4 d e f } +@end lilypond + +@code{DrumStaff} (Perkussionsnotensystem) erstellt ein Notensystem +mit fünf Linien, das für ein typisches Schlagzeug eingerichtet ist. +Für jedes Instrument werden unterschiedliche Symbole dargestellt. +Die Instrumente werden innerhalb der +@code{drummode}-Umgebung gesetzt, wo jedes Instrument seine eigene +Bezeichnung hat. Zu Einzelheiten siehe +@ref{Schlagzeugsysteme}. + +@lilypond[verbatim,quote] +\new DrumStaff { + \drummode { cymc hh ss tomh } +} +@end lilypond + +@code{RhythmicStaff} (Rhythmus-System) erstellt ein Notensystem mit +nur einer Notenlinie, auf welcher nur die rhythmischen Werte der +eingegebenen Noten dargestellt werden. Die wirklichen Längen bleiben +erhalten. Zu Einzelheiten, siehe +@ref{Melodierhythmus anzeigen}. + +@lilypond[verbatim,quote,relative=2] +\new RhythmicStaff { c4 d e f } +@end lilypond + +@code{TabStaff} (Tabulatursystem) erstellt eine Tabulatur mit sechs +Saiten in der üblichen Gitarrenstimmung. Zu Einzelheiten siehe +@ref{Standardtabulaturen}. + +@lilypond[verbatim,quote,relative=2] +\new TabStaff { c4 d e f } +@end lilypond + +Es gibt zwei Notensysteme, die zur Notation von Alter Musik eingesetzt +werden: @code{MensuralStaff} and @code{VaticanaStaff}. Sie sind +erklärt in +@ref{Vordefinierte Umgebungen}. + +Das @code{GregorianTranscriptionStaff} (System zur Transkription des +Gregorianischen Chorals) erstellt ein Notensystem, um modernen +Gregorianischen Choral zu notieren. Es hat keine Notenlinien. + +@lilypond[verbatim,quote,relative=2] +\new GregorianTranscriptionStaff { c4 d e f e d } +@end lilypond + + +Neue Notensystem-Kontexte können selber definiert werden. Zu Einzelheiten, +siehe +@ref{Neue Kontexte definieren}. + + +@seealso +Glossar: +@rglos{staff}, +@rglos{staves}. + +Notationsreferenz: +@ref{Kontexte erstellen}, +@ref{Schlagzeugsysteme}, +@ref{Melodierhythmus anzeigen}, +@ref{Standardtabulaturen}, +@ref{Vordefinierte Umgebungen}, +@ref{Das Notensystem}, +@ref{Gregorianische Gesangs-Kontexte}, +@ref{Mensural-Kontexte}, +@ref{Neue Kontexte definieren}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{Staff}, +@rinternals{DrumStaff}, +@rinternals{GregorianTranscriptionStaff}, +@rinternals{RhythmicStaff}, +@rinternals{TabStaff}, +@rinternals{MensuralStaff}, +@rinternals{VaticanaStaff}, +@rinternals{StaffSymbol}. + + +@node Systeme gruppieren +@unnumberedsubsubsec Systeme gruppieren +@translationof Grouping staves + +@cindex Systeme, mehrere +@cindex Notensysteme, mehrere +@cindex Klammer, vertikal +@cindex Klammer, geschweift +@cindex geschweifte Klammer +@cindex Klaviersystem +@cindex Akkolade +@cindex Notensystemgruppe +@cindex Notensysteme, gruppieren +@cindex Partitur +@cindex Systemgruppe +@cindex Instrumentengruppe +@cindex Stimmgruppe +@cindex System, Chor +@cindex Chorsystem + +Es gibt verschiedene Kontexte, um einzelne Notensysteme zu gruppieren +und einer Partitur zu verbinden. Jeder Gruppenstil beeinflusst das +Aussehen des Systemanfangs und das Verhalten der Taktlinien. + +Wenn kein Kontext angegeben ist, wird die Standardeinstellung eingesetzt: +die Gruppe beginnt mit einer vertikalen Linie und die Taktlinien sind +nicht verbunden. + +@lilypond[verbatim,quote,relative=2] +<< + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Im @code{StaffGroup}-Kontext die Gruppe mit einer eckigen Klammer +begonnen und die Taktlinien durch alle Systeme gezogen. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In einem @code{ChoirStaff} (Chorsystem) beginnt die Gruppe mit einer +eckigen Klammer, aber die Taktlinien sind nicht verbunden. + +@lilypond[verbatim,quote,relative=2] +\new ChoirStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In einem @code{GrandStaff} (Akkolade) beginnt die Gruppe mit einer +geschweiften Klammer und die Taktlinien sind durchgezogen. + +@lilypond[verbatim,quote,relative=2] +\new GrandStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Der @code{PianoStaff}-(Klaviersystem)-Kontext ist identisch mit dem +@code{GrandStaff}-Kontext, aber es ermöglicht zusätzlich direkt +die Angabe einer Instrumentbezeichnung. Zu Einzelheiten siehe +@ref{Instrumentenbezeichnungen}. + +@lilypond[verbatim,quote,relative=2] +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Jede Systemgruppe stellt die Eigenschaft +@code{systemStartDelimiter} (SystemBeginnBegrenzer) auf einen der +folgenden Werte: +@code{SystemStartBar}, @code{SystemStartBrace} oder +@code{SystemStartBracket}. Ein vierter Begrenzer, +@code{SystemStartSquare}, ist auch erreichbar, aber man muss ihr +explizit einstellen. + +Neue Systemgruppen können definiert werden. Zu Einzelheiten siehe +@ref{Neue Kontexte definieren}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{use-square-bracket-at-the-start-of-a-staff-group.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{display-bracket-with-only-one-staff-in-a-system.ly} + +@cindex Mensurstriche +@cindex Renaissancemusik +@cindex Transkription von Mensuralmusik +@cindex Mensuralmusik, Transkription + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + + +@seealso +Glossar: +@rglos{brace}, +@rglos{bracket}, +@rglos{grand staff}. + +Notationsreferenz: +@ref{Instrumentenbezeichnungen}, +@ref{Neue Kontexte definieren}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{Staff}, +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + +@knownissues +@code{PianoStaff} nimmt standardmäßig keine @code{ChordNames} (Akkordbezeichnungen) +auf. + + +@node Verschachtelte Notensysteme +@unnumberedsubsubsec Verschachtelte Notensysteme +@translationof Nested staff groups + +@cindex System, geschachtelt +@cindex Schachtelung von Systemen +@cindex Verschachtelung von Systemen +@cindex SystemBeginnBegrenzer, geschachtelt +@cindex verschachtelte Systemklammern +@cindex Klammern, Verschachteln +@cindex geschweifte Klammern, Schachteln +@cindex Systemgruppen, Verschachtelung + +System-Gruppen können in beliebiger Tiefe geschachtelt werden. In +diesem Fall erstellt jeder neue, innen liegende Kontext eine neue +Klammer außerhalb der Klammer der Systemgruppe, in der er sich +befindet. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c2 c | c2 c } + \new StaffGroup << + \new Staff { g2 g | g2 g } + \new StaffGroup \with { + systemStartDelimiter = #'SystemStartSquare + } + << + \new Staff { e2 e | e2 e } + \new Staff { c2 c | c2 c } + >> + >> +>> +@end lilypond + +Neue geschachtelte Systemgruppen können definiert werden. Zu Einzelheiten siehe +@ref{Neue Kontexte definieren}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{nesting-staves.ly} + + +@seealso +Notationsreferenz: +@ref{Systeme gruppieren}, +@ref{Instrumentenbezeichnungen}, +@ref{Neue Kontexte definieren}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + + +@node Systeme trennen +@unnumberedsubsubsec Systeme trennen +@translationof Separating systems + +@cindex Trennzeichen +@cindex System-Trennzeichen + +Wenn die Anzahl der Systeme sich von Seite zu Seite ändert, wird normalerweise +ein Trennzeichen hinzugefügt, dass die Systeme voneinander trennt. Die +Standardeinstellung ist, dass der Trenner nicht gesetzt wird, aber man kann ihn +mit einer Option in der @code{\paper}-Umgebung angeschalten. + +@c \book is required here to display the system separator +@c ragged-right is required as there are two systems +@lilypond[verbatim,quote,ragged-right] +\book { + \score { + \new StaffGroup << + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + >> + } + \paper { + system-separator-markup = \slashSeparator + % following commands are needed only to format this documentation + paper-width = 100\mm + paper-height = 100\mm + tagline = ##f + } +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Seitenlayout}. + +Schnipsel: +@rlsr{Staff notation}. + + + +@node Einzelne Systeme verändern +@subsection Einzelne Systeme verändern +@translationof Modifying single staves + +Dieser Abschnitt zeigt, wie man bestimmte Eigenschaften eines Systems +ändert -- etwa die Anzahl der Notenlinien oder die Größe des Systems. +Es werden auch Methoden dargestellt, ein System zu beginnen und zu +beenden sowie eine Methode, Ossia-Systeme zu erstellen. + +@menu +* Das Notensystem:: +* Ossia-Systeme:: +* Systeme verstecken:: +@end menu + + +@node Das Notensystem +@unnumberedsubsubsec Das Notensystem +@translationof Staff symbol + +@cindex Justierung von Notensystemen +@cindex Notensysteme, Modifikation +@cindex Notenlinien, Anzahl +@cindex Notenlinien, Dicke +@cindex Notenlinien, Einstellungen +@cindex Staff symbol, Erstellen +@cindex Notenlinien, Erstellen +@cindex Dicke der Notenlinien einstellen +@cindex Anzahl der Notenlinien einstellen +@cindex Zahl der Notenlinien einstellen +@cindex Hilfslinien, Einstellungen +@cindex Hilfslinien, Abstände +@cindex Abstand von Hilfslinien +@cindex Einstellung von Hilfslinien +@cindex Notensystem stoppen +@cindex Notensystem beginnen +@cindex Beginnen eines Notensystems +@cindex Beenden eines Notensystems + +Die Linien eines Notensystems gehören zu dem +@code{StaffSymbol}-(NotensystemSymbol)-Grob. +@code{StaffSymbol}-Eigenschaften können verändert werden, um die +Erscheinung des Notensystems zu beeinflussen, aber sie müssen +gesetzt werden, bevor das System erstellt wird. + +Die Anzahl der Notenlinien kann verändert werden. Die Position +des Notenschlüssels und die Position von c' können geändert werden, +um dem neuen System zu entsprechen. Eine Erklärung findet sich +im Schnipselabschnit in +@ref{Notenschlüssel}. + +@lilypond[verbatim,quote,relative=2] +\new Staff \with { + \override StaffSymbol #'line-count = #3 +} +{ d4 d d d } +@end lilypond + +Die Liniendicke der Notenlinien kann verändert werden. Die Dicke +der Hilfslinien und Notenhälse wird auch beeinflusst, weil sie +von der Notenliniendicke abhängen. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'thickness = #3 +} +{ e4 d c b } +@end lilypond + +Die Dicke der Hilfslinien kann auch unabhängig von der +Notenliniendicke verändert werden. Die zwei Zahlen in dem Beispiel +sind Faktoren, mit denen die Notenlinien-Dicke und der +Notenlinienabstand multipliziert werden. Die Addition beider +Werte ergibt die Dicke der Hilfslinien. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) +} +{ e4 d c b } +@end lilypond + +Der Abstand zwischen Notenlinien kann verändert werden. Diese +Einstellung wirkt sich auch auf den Abstand der Hilfslinien aus. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'staff-space = #1.5 +} +{ a4 b c d } +@end lilypond + +Weitere Einzelheiten zu den Eigenschaften von @code{StaffSymbol} +findet sich in @rinternals{staff-symbol-interface}. + +@cindex Notenlinien, beginnen +@cindex Notenlinien, beenden +@cindex Beenden von Notenlinien +@cindex Beginnen von Notenlinien +@cindex Beenden eines Systems +@cindex System, beenden +@cindex Notensystem, beenden + +@funindex \startStaff +@funindex \stopStaff +@funindex startStaff +@funindex stopStaff + +Veränderungen der Eigenschaften eines Notensystems mitten in einer +Partitur können zwischen die Befehle @code{\stopStaff} und +@code{\startStaff} gesetzt werden: + +@lilypond[verbatim,quote,relative=2] +c2 c +\stopStaff +\override Staff.StaffSymbol #'line-count = #2 +\startStaff +b2 b +\stopStaff +\revert Staff.StaffSymbol #'line-count +\startStaff +a2 a +@end lilypond + +@noindent +Die Befehle @code{\startStaff} und @code{\stopStaff} können +benutzt werden, um ein Notensystem irgendwo zu beenden oder zu +beginnen. + +@lilypond[verbatim,quote,relative=2] +c4 b a2 +\stopStaff +b4 c d2 +\startStaff +e4 d c2 +@end lilypond + + +@predefined +@code{\startStaff}, +@code{\stopStaff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-some-staff-lines-thicker-than-the-others.ly} + + +@seealso +Glossar: +@rglos{line}, +@rglos{ledger line}, +@rglos{staff}. + +Notationsreferenz: +@ref{Notenschlüssel}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{StaffSymbol}, +@rinternals{staff-symbol-interface}. + + + +@node Ossia-Systeme +@unnumberedsubsubsec Ossia-Systeme +@translationof Ossia staves + +@cindex Ossia-Systeme +@cindex Ossia +@cindex versteckte Notensysteme +@cindex System, Größe verändern +@cindex Notensystem, Größe verändern +@cindex Größe von Notensystem verändern + +@funindex \startStaff +@funindex \stopStaff +@funindex startStaff +@funindex stopStaff + +@notation{Ossia}-Systeme können gesetzt werden, indem zwei +gleichzeitige Notensysteme an der entsprechenden Position +erstellt werden: + +@lilypond[verbatim,quote] +\new Staff \relative c'' { + c4 b d c + << + { c4 b d c } + \new Staff { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +@noindent +Dieses Beispiel ist aber normalerweise nicht erwünscht. +Um Ossia-Systeme zu setzen, die sich über dem eigentlichen +System befinden, keine Takt- und Schlüsselangaben haben und kleiner +gesetzt sind, müssen einige Optimierungen angewendet werden. Im +Handbuch zum Lernen wird eine Technik vorgestellt, mit der das +gewünschte Ergebnis erreicht werden kann, beginnend in +@rlearning{Musikalische Ausdrücke ineinander verschachteln}. + +Das Beispiel unten setzt die +@code{alignAboveContext}-(oberhalbAusrichtenKontext)-Eigenschaft +ein, um den Ossia-Abschnitt auszurichten. Diese Methode +bietet sich an, wenn nur einige Ossia-Systeme benötigt werden. + +@lilypond[verbatim,quote] +\new Staff = main \relative c'' { + c4 b d c + << + { c4 b d c } + + \new Staff \with { + \remove "Time_signature_engraver" + alignAboveContext = #"main" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + firstClef = ##f + } + { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +Wenn mehrere isolierte Ossia-Systeme gebraucht werden, kann es +günstiger sein, einen leeren @code{Staff}-Kontext mit einer +spezifischen @emph{Kontextidentifikation} zu erstellen. Die +Ossia-Abschnitte werden dann erstellt, indem dieser Kontext +@emph{aufgerufen} wird und mit @code{\startStaff} und +@code{\stopStaff} an den richtigen Stellen sichtbar gemacht +wird. Der Vorteil dieser Methode zeigt sich, wenn man längere +Stücke setzt. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + { \stopStaff s1*6 } + + \new Staff \relative c' { + c4 b c2 + << + { e4 f e2 } + \context Staff = ossia { + \startStaff e4 g8 f e2 \stopStaff + } + >> + g4 a g2 \break + c4 b c2 + << + { g4 a g2 } + \context Staff = ossia { + \startStaff g4 e8 f g2 \stopStaff + } + >> + e4 d c2 + } +>> +@end lilypond + +Man kann auch den @code{\Staff \RemoveEmptyStaves}-Befehl einsetzen, +um Ossia-Systeme zu erstellen. Diese Methode eignet sich am +besten, wenn nach dem Ossia sofort ein Zeilenumbruch erfolgt. +Mehr Information zu @code{\Staff \RemoveEmptyStaves} findet sich in +@ref{Systeme verstecken}. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } \relative c'' { + R1*3 + c4 e8 d c2 + } + \new Staff \relative c' { + c4 b c2 + e4 f e2 + g4 a g2 \break + c4 b c2 + g4 a g2 + e4 d c2 + } +>> + +\layout { + \context { + \Staff \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligning-ossias-and-lyrics.ly} + + +@seealso +Glossar: +@rglos{ossia}, +@rglos{staff}, +@rglos{Frenched staff}. + +Handbuch zum Lernen: +@rlearning{Musikalische Ausdrücke ineinander verschachteln}, +@rlearning{Größe von Objekten}, +@rlearning{Länge und Dicke von Objekten}. + +Notationsreferenz: +@ref{Systeme verstecken}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{StaffSymbol}. + + +@node Systeme verstecken +@unnumberedsubsubsec Systeme verstecken +@translationof Hiding staves + +@cindex Systeme verstecken +@cindex leere Systeme verstecken +@cindex Verstecken von Systemen +@cindex Systeme, leere +@cindex Verschwinden von leeren Systemen + +@funindex \RemoveEmptyStaves +@funindex RemoveEmptyStaves +@funindex Staff_symbol_engraver +@funindex \stopStaff +@funindex stopStaff + +Die Notenlinien können entfernt werden, indem der +@code{Staff_symbol_engraver} aus dem @code{Staff}-Kontext +entfernt wird. Alternativ kann auch @code{\stopStaff} +eingesetzt werden. + +@lilypond[verbatim,quote] +\new Staff \with { + \remove "Staff_symbol_engraver" +} +\relative c''' { a8 f e16 d c b a2 } +@end lilypond + +Leere Systeme können versteckt werden, wenn der +@code{\Staff \RemoveEmptyStaves}-Befehl im @code{\layout}-Abschnitt +benutzt wird. In großen Orchesterpartituren wird dies oft +verwendet, um die leeren Systeme von gerade nicht spielenden +Instrumenten zu verstecken. In der Standardeinstellung werden alle +leeren Notenzeilen außer die des ersten Systems entfernt. + +@warning{Eine Notenzeile gilt als leer, wenn sie nur Ganztaktpausen, +Pausen, unsichtbare Noten, @code{\skip}-Befehle oder eine Kombination +der drei enthält.} + +@lilypond[verbatim,quote,ragged-right] +\layout { + \context { + \Staff \RemoveEmptyStaves + } +} + +\relative c' << + \new Staff { + e4 f g a \break + b1 \break + a4 b c2 + } + \new Staff { + c,4 d e f \break + R1 \break + f4 g c,2 + } +>> +@end lilypond + +@cindex ossia + +@noindent +@code{\Staff \RemoveEmptyStaves} kann auch eingesetzt werden, +um Ossiaabschnitte zu erstellen. Zu Einzelheiten, siehe +@ref{Ossia-Systeme}. + +@cindex Verstecken von Systemen der Alten Musik +@cindex Verstecken von Rhythmus-Systemen + + +@funindex \RemoveEmptyStaves +@funindex RemoveEmptyStaves + +Der @code{\VaticanaStaff \RemoveEmptyStaves}-Befehl kann +benutzt werden, um leere Takte in Notation der Alten Musik +zu entfernen. Gleichermaßen kann +@code{\RhythmicStaff \RemoveEmptyStaves} eingesetzt werden, um +leere Takte in einem +@code{RhythmicStaff}-Kontext zu entfernen. + + +@predefined +@code{\Staff \RemoveEmptyStaves}, +@code{\VaticanaStaff \RemoveEmptyStaves}, +@code{\RhythmicStaff \RemoveEmptyStaves}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{removing-the-first-empty-line.ly} + + +@seealso +Glossar: +@rglos{Frenched staff}. + +Handbuch zum Lernen: +@rlearning{Sichtbarkeit und Farbe von Objekten}. + +Notationsreferenz: +@ref{Die Standardeinstellungen von Kontexten ändern}, +@ref{Das Notensystem}, +@ref{Ossia-Systeme}, +@ref{Unsichtbare Noten}, +@ref{Sichtbarkeit von Objekten}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{ChordNames}, +@rinternals{FiguredBass}, +@rinternals{Lyrics}, +@rinternals{Staff}, +@rinternals{VerticalAxisGroup}, +@rinternals{Staff_symbol_engraver}. + + +@knownissues + +Wenn man den @code{Staff_symbol_engraver} entfernt, werden auch +die Taktlinien entfernt. Wenn eine sichtbare Taktlinie +angefordert wird, kann es zu Formatierungsfehlern kommen. In +diesem Fall sollten folgende Befehle eingesetzt werden, anstatt +den Engraver zu entfernen: + +@example +\override StaffSymbol #'stencil = ##f +\override NoteHead #'no-ledgers = ##t +@end example + +Zu den bekannten Fehlern und Warnungen, die mit @code{\Staff \RemoveEmptyStaves} +zusammenhängen, siehe @ref{Die Standardeinstellungen von Kontexten ändern}. + + +@node Orchesterstimmen erstellen +@subsection Orchesterstimmen erstellen +@translationof Writing parts + +Dieser Abschnitt zeigt, wie man Tempo-Anweisungen und +Instrumentenbezeichnungen einfügt. Es werden auch Möglichkeiten +vorgestellt, andere Stimmen zu zitieren und Stichnoten zu +formatieren. + +@menu +* Instrumentenbezeichnungen:: +* Stichnoten:: +* Stichnoten formatieren:: +@end menu + + +@node Instrumentenbezeichnungen +@unnumberedsubsubsec Instrumentenbezeichnungen +@translationof Instrument names + +@cindex Instrumentenbezeichnungen +@cindex kurze Instrumentenbezeichnungen + +Instrumentbezeichnungen können an der linken Seite von Notensystemen +im @code{Staff}-, @code{PianoStaff}-, @code{StaffGroup}, @code{GrandStaff} +und @code{ChoirStaff}-Kontext gesetzt +werden. Der Wert von @code{instrumentName} wird für das erste +System eingesetzt, der Wert von @code{shortInstrumentName} für +alle weiteren Systeme. + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"Violin " +\set Staff.shortInstrumentName = #"Vln " +c4.. g'16 c4.. g'16 +\break +c1 +@end lilypond + +Mit dem Textbeschriftungsmodus können auch komplizierte +Instrumentenbezeichnungen erstellt werden: + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = \markup { + \column { "Clarinetti" + \line { "in B" \smaller \flat } } } +c4 c,16 d e f g2 +@end lilypond + +@cindex Instrumentenbezeichnung, Notation + +Wenn zwei oder mehr Systeme gruppiert werden, werden die +Instrumentenbezeichnungen automatisch zentriert. Um auch +mehrzeilige Instrumentenbezeichnungen zentriert zu setzen, muss +@code{\center-column} benutzt werden: + +@lilypond[verbatim,quote,indent=1.5\cm,relative=2] +<< + \new Staff { + \set Staff.instrumentName = #"Flute" + f2 g4 f + } + \new Staff { + \set Staff.instrumentName = \markup \center-column { + Clarinet + \line { "in B" \smaller \flat } + } + c4 b c2 + } +>> +@end lilypond + +@cindex Einzug + +@funindex indent +@funindex short-indent + +Wenn die Instrumentenbezeichnung zu lang ist, kann es vorkommen, +dass die Bezeichnungen in einer Gruppe nicht zentriert werden. +Um dennoch eine Zentrierung zu erhalten, müssen die Werte des +Einzugs (@code{indent} und @code{short-indent}) vergrößert werden. +Zu Einzelheiten siehe @ref{\paper-Variablen für Verschiebungen und Einrückungen}. + +@lilypond[verbatim,quote,ragged-right] +\layout { + indent = 3.0\cm + short-indent = 1.5\cm +} + +\relative c'' << + \new Staff { + \set Staff.instrumentName = #"Alto Flute in G" + \set Staff.shortInstrumentName = #"Fl." + f2 g4 f \break + g4 f g2 + } + \new Staff { + \set Staff.instrumentName = #"Clarinet" + \set Staff.shortInstrumentName = #"Clar." + c,4 b c2 \break + c2 b4 c + } +>> +@end lilypond + +@cindex Instrumentenbezeichnungen zu anderen Kontexten hinzufügen + +Um Instrumentenbezeichnungen zu anderen Kontexten (wie etwa +@code{ChordNames} or @code{FiguredBass}) +hinzuzufügen, muss der @code{Instrument_name_engraver} dem +entsprechenden Kontext hinzugefügt werden. Zu Einzelheiten +siehe @ref{Umgebungs-Plugins verändern}. + +@cindex Ändern von Instrumentenbezeichnungen +@cindex Instrumentenbezeichnungen, wechseln +@cindex Wechseln von Instrumentenbezeichnungen + +Instrumentenbezeichnungen können mitten in einer Partitur +geändert werden. Dabei muss jedoch beachtet werden, dass +@code{instrumentName} nicht mitten im Stück angezeigt wird, +denn es wird nur für das erste Notensystem ausgegeben: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"First" +\set Staff.shortInstrumentName = #"one" +c1 c c c \break +c1 c c c \break +\set Staff.instrumentName = #"Second" +\set Staff.shortInstrumentName = #"two" +c1 c c c \break +c1 c c c \break +@end lilypond + +@cindex Instrumentenwechsel +@cindex Wechsel von Instrument + +@funindex \addInstrumentDefinition +@funindex addInstrumentDefinition +@funindex \instrumentSwitch +@funindex instrumentSwitch + +Wenn das Instrument gewechselt werden soll, kann der Befehl +@code{\addInstrumentDefinition} in Begleitung von +@code{\instrumentSwitch} benutzt werden, um eine detaillierte +Auflistung aller notwendigen Änderungen für den Wechsel zu +definieren. Der @code{\addInstrumentDefinition}-Befehl hat +zwei Argumente: eine Identifikation und eine Assoziationsliste +von Kontexteigenschaften und Werten, die für dieses Instrument +benutzt werden müssen. Der Befehl muss sich auf der höchsten +Ebene in der Eingabedatei befinden. @code{\instrumentSwitch} +wird dann benutzt, um den Wechsel vorzunehmen: + +@lilypond[verbatim,quote,ragged-right] +\addInstrumentDefinition #"contrabassoon" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Cbsn.") + (clefGlyph . "clefs.F") + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(make-bold-markup "cbsn.")) + (midiInstrument . "bassoon")) + +\new Staff \with { + instrumentName = #"Bassoon" +} +\relative c' { + \clef tenor + \compressFullBarRests + c2 g' + R1*16 + \instrumentSwitch "contrabassoon" + c,,2 g \break + c,1 ~ | c1 +} +@end lilypond + + +@seealso +Notationsreferenz: +@ref{\paper-Variablen für Verschiebungen und Einrückungen}, +@ref{Umgebungs-Plugins verändern}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{InstrumentName}, +@rinternals{PianoStaff}, +@rinternals{Staff}. + + +@node Stichnoten +@unnumberedsubsubsec Stichnoten +@translationof Quoting other voices + +@cindex Stichnoten +@cindex Zitieren von anderen Stimmen +@cindex Fragmente +@cindex Stimmen, zitieren + +@funindex \addQuote +@funindex addQuote +@funindex \quoteDuring +@funindex quoteDuring +@funindex \transposition +@funindex transposition + +Es kommt sehr oft vor, dass eine Orchesterstimme die gleichen +Noten wie eine andere spielt. So können etwa die ersten und +zweiten Geigen für eine Passage die gleichen Noten haben. In +LilyPond kann man das erreichen, indem eine Stimme von der +anderen @emph{zitiert}, sodass man die Noten nicht noch einmal +eingeben muss. + +Bevor eine Stimme zitiert werden kann, muss der +@code{\addQuote}-Befehl benutzt werden, um das zitierbare +Fragment zu kennzeichnen. Dieser Befehl muss auf der höchsten +Ebene der Eingabedatei benutzt werden. Das erste Argument +dient zur Identifikation, das zweite ein musikalischer Ausdruck: + +@example +flute = \relative c'' @{ + a4 gis g gis +@} +\addQuote "flute" @{ \flute @} +@end example + +Der @code{\quoteDuring}-Befehl wird benutzt, um den Punkt +anzuzeigen, an dem das Zitat beginnt. Er benötigt zwei +Argumente: die Bezeichnung der zitierten Stimme, wie vorher mit +@code{\addQuote} definiert, und einen musikalischen Ausdruck, +der Angibt, wie lange das Zitat dauern soll; normalerweise +Ganztaktpausen oder unsichtbare Noten. Die entsprechenden +Noten der zitierten Stimme (inklusive aller Artikulationszeichen, +Dynamik, Beschriftung usw.) wird an der Stelle in die aktuelle +Stimme eingefügt: + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g->\f gis^\markup{quoted} +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { s2 } +} +@end lilypond + +Wenn der musikalische Ausdruck, der mit dem +@code{\quoteDuring}-Befehl benutzt wird, etwas anderes +als unsichtbare Noten oder Ganztaktpausen enthält, wird eine +polyphone Stelle begonnen, was meistens nicht erwünscht ist: + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g gis +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { c4 b } +} +@end lilypond + +Zitate erkennen die Einstellungen von transponierten Instrumenten +sowohl der Quell- als auch der Zielstimme, wenn der +@code{\transposition}-Befehl eingesetzt wird. Zu Einzelheiten +über @code{\transposition} siehe +@ref{Transposition von Instrumenten}. + +@lilypond[verbatim,quote] +clarinet = \relative c'' { + \transposition bes + a4 gis g gis +} +\addQuote "clarinet" { \clarinet } + +\relative c' { + c4 cis \quoteDuring #"clarinet" { s2 } +} +@end lilypond + +Es ist möglich, Zitate mit eindeutigen Bezeichnungen zu versehen +(unter Benutzung von @emph{tags}), um sie auf unterschiedliche +Weise zu verarbeiten. Einzelheiten zu diesem Vorgehen werden +vorgestellt in +@ref{Marken benutzen}. + +Es ist auch möglich, welche Objekte der originalen Stimme zitiert +werden sollen, indem man die @code{quotedEventTypes}-Eigenschaft +verändert. Standardmäßig ist ihr Wert @code{#'(StreamEvent)}, +was bedeutet, dass alles zitiert wird. Wenn man sie beispielsweise +auf den Wert @code{#'(note-event rest-event tie-event)} setzt, werden +nur Noten, Pausen und Bindebögen zitiert, jedoch keine Artikulationszeichen, +Dynamik oder Beschriftung. + +@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 } +} +@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 + +@funindex quotedEventTypes +@funindex quotedCueEventTypes + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{quoting-another-voice.ly} + + +@seealso +Notationsreferenz: +@ref{Transposition von Instrumenten}, +@ref{Marken benutzen}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{QuoteMusic}, +@rinternals{Voice}. + + +@knownissues + +Nur der Inhalt der ersten Stimme innerhalb eines +@code{\addQuote}-Befehls wird für das Zitat herangezogen, die +Variable @var{Noten} kann also keine @code{\new} oder @code{\context Voice}-Einheiten enthalten, die zu einer anderen +Stimme wechseln würden. + +Ziernoten und Vorschläge können nicht zitiert werden und können +sogar dazu führen, dass LilyPond abstürzt. + +Wenn geschachtelte Triolen zitiert werden, ist das Notenbild +unter Umständen sehr schlecht. + +In früheren LilyPond-Versionen (vor 2.11) wurde der Befehl +@code{addQuote} vollständig in Kleinbuchstaben geschrieben: +@code{\addquote}. + + +@node Stichnoten formatieren +@unnumberedsubsubsec Stichnoten formatieren +@translationof Formatting cue notes + +@cindex Stichnoten +@cindex Noten, Stichnoten +@cindex Stichnoten, Formatierung +@cindex Fragmente +@cindex andere Stimmen zitieren +@cindex Zitieren von anderen Stimmen + +@funindex \cueDuring +@funindex cueDuring +@funindex \quoteDuring +@funindex quoteDuring + +Der vorige Abschnitt zeigt, wie man Zitate erstellt. Der +@code{\cueDuring}-Befehl (engl. cue note = Stichnote) +ist eine spezialisierte Form des +@code{\quoteDuring}-Befehls, der insbesondere dazu dient, +Stichnoten zu einer Stimme hinzuzufügen. Seine Syntax lautet: + +@example +\cueDuring #@var{Stimmenbezeichnung} #@var{Stimme} @var{Noten} +@end example + +Dieser Befehl kopiert nur die Noten und Pausen der entsprechenden Takte von +@var{Stimmenbezeichnung} in einen @code{CueVoice}-Kontext. Eine +@code{CueVoice} (Stichnoten-Stimme) wird implizit erstellt +und erscheint simultan mit @var{Noten}, wobei folglich eine +polyphone Situation entsteht. Das @var{Stimme}-Argument entscheidet, +ob die Stichnoten als eine erste oder zweite Stimme +eingefügt werden sollen; @code{UP} entspricht der ersten Stimme, +@code{DOWN} der zweiten. + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +@noindent +In diesem Beispiel muss der @code{Voice}-Kontext explizit +begonnen werden, damit nicht der gesamte musikalische Ausdruck +als Stichnoten-Stimme formatiert wird. + +Es ist möglich anzupassen, welche Objekte der Notation von +@code{\cueDuring} zitiert werden, indem man die +@code{quotedCueEventTypes}-Eigenschaft verändert. Ihr +Standardwert ist @code{#'(note-event rest-event tie-event beam-event ++tuplet-span-event)}; somit werden also nur Noten, Pausen, Bindebögen, +Balken und N-tolen zitiert, nicht aber Artikulationen, Dynamik, +Beschriftung usw. + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event + beam-event tuplet-span-event + dynamic-event slur-event) + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +Beschriftung kann auch benutzt werden, um die Bezeichnung des zitierten +Instruments anzuzeigen. Wenn die Stichnoten einen Schlüsselwechsel +erfordern, muss der originale Schlüssel am Ende der Stichnoten wieder +hergestellt werden: + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \relative c { + \clef bass + R1 + \clef treble + s1*0^\markup { \tiny "flute" } + \cueDuring #"flute" #UP { R1 } + \clef bass + g4. b8 d2 +} +\addQuote "flute" { \flute } +\new Staff { + \bassoon +} +@end lilypond + +@cindex Entfernen von Stichnoten +@cindex Stichnoten, entfernen + +@funindex \killCues +@funindex killCues + +Der @code{\killCues}-Befehl entfernt Stichnoten aus einem +musikalischen Ausdruck, sodass der selbe Ausdruck für eine Stimme mit den +Stichnoten, aber auch für die Paritur eingesetzt werden kann. Der Befehl +@code{\killCues} entfernt nur die Noten und Ereignisse, die mit +@code{\cueDuring} zitiert worden sind. Andere mit der Beschriftungen verknüpfte +Ereignisse wie Schlüsseländerungen und Bezeichnungen des Instruments können +mit einem Marker versehen werden, um selektiv benutzt werden zu können. Siehe +@ref{Marken benutzen}. + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \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" { \flute } + +\new Staff { + \bassoon +} +\new StaffGroup << + \new Staff { + \flute + } + \new Staff { + \removeWithTag #'part { \killCues { \bassoon } } + } +>> +@end lilypond + +Alternativ können Schlüsseländerungen und Instrumentbezeichnungen auch in +eine Instrument-Definition zur wiederholten Verwendung gesammelt werden, +wobei @code{\addInstrumentDefinition} eingesetzt wird, das sich in +@ref{Instrumentenbezeichnungen} beschrieben findet. + +@funindex \transposedCueDuring +@funindex transposedCueDuring + +Genauso wie @code{\quoteDuring} berücksichtigt auch @code{\cueDuring} +Transpositionen. Stichnoten werden auf den Tonhöhen erstellt, die für +das Instrument geschrieben würden, in dessen Noten sie gesetzt werden, +um die klingenden Töne des Quelleninstruments zu produzieren. + +Um Stichnoten anders zu transponieren, muss @code{\transposedCueDuring} +benutzt werden. Dieser Befehl braucht ein zusätzliches Argument, um +(in absolutem Modus) die gedruckte Tonhöhe vorzugeben, mit der das +das zweigestrichene C dargestellt werden soll. Das ist nützlich, wenn +man Stichnoten von einem Instrument mit einem vollständig anderen +Register benutzt: + +@lilypond[verbatim,quote] +piccolo = \relative c''' { + \clef "treble^8" + R1 + c8 c c e g2 + c4 g g2 +} +bassClarinet = \relative c' { + \key d \major + \transposition bes, + d4 r a r + \transposedCueDuring #"piccolo" #UP d { R1 } + d4 r a r +} + +\addQuote "piccolo" { \piccolo } + +<< + \new Staff \piccolo + \new Staff \bassClarinet +>> +@end lilypond + +@cindex Noten, kleiner +@cindex kleinere Noten +@cindex Noten verkleinern + +Ein @code{CueVoice}-Kontext kann auch explizit erstellt werden, +wenn man kleiner Noten einsetzen will. Damit kann beispielsweise eine +alternative Sequenz für hohe und tiefe Stimme gesetzt werden: + +@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 + + +@seealso +Notationsreferenz: +@ref{Transposition von Instrumenten}, +@ref{Instrumentenbezeichnungen}, +@ref{Marken benutzen}, +@ref{Musikalische Stichnoten}. + +Schnipsel: +@rlsr{Staff notation}. + +Referenz der Interna: +@rinternals{CueVoice}, +@rinternals{Voice}. + + +@knownissues + +Zusammenstöße können zwischen Pausen der Hauptstimme und +den Stichnoten des @code{CueVoice}-Kontexts auftreten. diff --git a/Documentation/de/notation/text.itely b/Documentation/de/notation/text.itely new file mode 100644 index 0000000000..1075b871e0 --- /dev/null +++ b/Documentation/de/notation/text.itely @@ -0,0 +1,1627 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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" + +@c Translators: Till Paala + +@node Text +@section Text +@translationof Text + +@lilypondfile[quote]{text-headword.ly} + +Dieser Abschnitt erklärt, wie man Text (mit vielfältiger +Formatierung) in Partituren einfügt. + +@noindent +Einige Textelemente, die hier nicht behandelt werden, finden sich +in anderen Abschnitten: @ref{Notation von Gesang}, @ref{Titel}. + +@menu +* Text eingeben:: +* Text formatieren:: +* Schriftarten:: +@end menu + + +@node Text eingeben +@subsection Text eingeben +@translationof Writing text + +Dieser Abschnitt zeigt verschiedene Arten, wie Text in die Partitur +eingefügt werden kann. + +@cindex Text, andere Sprachen + +@warning{Wenn man Zeichen mit Akzenten und Umlaute oder besondere +Zeichen (wie etwa Text mit anderen Alphabeten) eingeben möchte, +kann man die Zeichen einfach direkt in die Datei einfügen. Die +Datei muss als UTF-8 gespeichert werden. Für mehr Information +siehe @ref{Zeichenkodierung}.} + +@menu +* Textarten:: +* Text mit Verbindungslinien:: +* Textartige Zeichen:: +* Separater Text:: +@end menu + + +@node Textarten +@unnumberedsubsubsec Textarten +@translationof Text scripts + +@cindex Textarten +@cindex Textelemente, nicht leer +@cindex zitierter Text + +Am einfachsten kann Text mit geraden Anführungsstrichen +in eine Partitur eingefügt werden, wie das folgende Beispiel +zeigt. Derartiger Text kann manuell über oder unter dem +Notensystem platziert werden, die Syntax hierzu ist beschrieben +in @ref{Richtung und Platzierung}. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e a4-"scherz." f +@end lilypond + +Diese Syntax ist eine Kurzform, komplexere Formatierungen +können einem Text hinzugefügt werden, wenn man +explizit den @code{\markup}-Befehl mit darauf folgenden +geschweiften Klammern einsetzt, wie beschrieben in +@ref{Text formatieren}. + +@lilypond[quote,verbatim,relative=2] +a8^\markup { \italic pizz. } g f e +a4_\markup { \tiny scherz. \bold molto } f +@end lilypond + +Standardmäßig haben Textbeschriftungen keinen Einfluss auf die +Positionierung der Noten. Man kann aber auch bestimmen, dass +die Breite des Textes mit berücksichtigt wird. Im nächsten +Beispiel fordert der erste Text keinen Platz, während der +zweite die Note nach rechts verschiebt. Das Verhalten wird mit +dem Befehl @code{\textLengthOn} (Textlänge an) erreicht, rückgängig +kann es mit dem Befehl @code{\textLengthOff} gemacht werden. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e +\textLengthOn +a4_"scherzando" f +@end lilypond + +Neben Textbeschriftungen können auch Artikulationen an Noten angehängt +werden. Siehe auch @ref{Artikulationszeichen und Verzierungen}. + +Zu weiterer Information zu der relativen Anordnung von Textbeschriftungen +und Artikulationen, siehe @rlearning{Positionierung von Objekten}. + +@funindex \textLengthOn +@funindex \textLengthOff +@funindex textLengthOn +@funindex textLengthOff + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}. +@endpredefined + + +@seealso +Handbuch zum Lernen: +@rlearning{Positionierung von Objekten}. + +Notationsreferenz: +@ref{Text formatieren}, +@ref{Richtung und Platzierung}, +@ref{Artikulationszeichen und Verzierungen}. + +Schnipsel: +@rlsr{Text}. + +Referenz der Interna: +@rinternals{TextScript}. + +@cindex Text außerhalb des Randes +@cindex Rand, überhängender Text +@cindex Seitenrand, überhängender Text +@cindex Gesangstext, innerhalb des Randes behalten +@cindex Text, innerhalb des Randes behalten + +@knownissues +Eine Überprüfung, ob sich auch alle Textbeschriftungen und Gesangstext +innerhalb der Ränder der Noten befinden, braucht verhältnismäßig +viel Rechenaufwand. Sollten Sie aber etwas bessere Leistung bevorzugen, +schreiben Sie in Ihre Datei: + +@example +\override Score.PaperColumn #'keep-inside-line = ##f +@end example + + + +@node Text mit Verbindungslinien +@unnumberedsubsubsec Text mit Verbindungslinien +@translationof Text spanners + +@cindex Textstrecker +@cindex Strecker, Text + +Einige Aufführungsanweisungen, etwa @notation{rallentando} oder +@notation{accelerando}, werden als Text geschrieben, gefolgt von +einer gestrichelten Linie, die anzeigt, wie weit sich die Anweisung +auswirkt. Solche Objekte, @qq{Strecker} (engl. spanners) genannt, +können von einer Note bis zu einer anderen mit folgender +Anweisung erstellt werden: + +@lilypond[verbatim,quote,relative=2] +\override TextSpanner #'(bound-details left text) = "rit." +b1\startTextSpan +e,\stopTextSpan +@end lilypond + +@cindex Textstrecker, Formatierung +@cindex Formatierung von Textstreckern +@cindex Strecker, Text-, Formatierung + +@noindent +Der Text wird durch Objekteigenschaften beeinflusst. In den +Standardeinstellungen wird er kursiv ausgegeben, aber eine andere +Formatierung kann erreicht werden, indem man @code{\markup}-Blöcke +einsetzt, wie beschrieben in @ref{Text formatieren}. + +@lilypond[quote,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) = + \markup { \upright "rit." } +b1\startTextSpan c +e,\stopTextSpan +@end lilypond + +Auch der Stil der Linie kann ähnlich wie der Text mit den Objekteigenschaften +geändert werden. Diese Syntax ist beschrieben in @ref{Linienstile}. +Textstrecker sind Teil des @code{Dynamic}-Kontextes, siehe +@rinternals{Dynamics}. + +@funindex textSpannerUp +@funindex textSpannerDown +@funindex textSpannerNeutral +@funindex \textSpannerUp +@funindex \textSpannerDown +@funindex \textSpannerNeutral + +@predefined +@code{\textSpannerUp}, +@code{\textSpannerDown}, +@code{\textSpannerNeutral}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-text-spanner-postfix.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-custom-text-spanner-postfix.ly} + + +@seealso +Notationsreferenz: +@ref{Linienstile}, +@ref{Dynamik}, +@ref{Text formatieren}. + +Schnipsel: +@rlsr{Text}, +@rlsr{Expressive marks}. + +Referenz der Interna: +@rinternals{TextSpanner} + + +@node Textartige Zeichen +@unnumberedsubsubsec Textartige Zeichen +@translationof Text marks + +@cindex Textzeichen +@cindex textartige Zeichen +@cindex Zeichen, textartige +@cindex Text am Taktstrich +@cindex Coda am Taktstrich +@cindex Segno an Taktstrich +@cindex Fermate an Taktstrich +@cindex Taktstrich, Symbole anfügen +@cindex Symbole auf der Taktstrich + +@funindex \mark +@funindex mark +@funindex \markup +@funindex markup + +Verschiedene Textelemente können der Partitur hinzugefügt werden, +indem man die Syntax für Zeichen einsetzen, wie beschrieben in +@ref{Übungszeichen}: + +@c \mark needs to be placed on a separate line (it's not +@c attached to an object like \markup is). -vv + +@lilypond[verbatim,quote,relative=2] +c4 +\mark "Allegro" +c c c +@end lilypond + +Diese Syntax ermöglicht es, beliebigen Text über eine Taktlinie +zu platzieren, weitere Formatierungsmöglichkeiten sind mit dem +@code{\markup}-Befehl gegeben, wie beschrieben in +@ref{Text formatieren}: + +@lilypond[quote,verbatim,relative=1] +1 +\mark \markup { \italic { colla parte } } +2 +1 +@end lilypond + +@noindent +Diese Syntax ermöglicht es auch, besondere Zeichen einzufügen, wie +etwa Coda-, Segno- oder Fermatenzeichen, indem das entsprechende +Symbol mit dem Befehl @code{\musicglyph} angegeben wird, wie +beschrieben in +@ref{Musikalische Notation innerhalb einer Textbeschriftung}: + +@lilypond[quote,verbatim,relative=2] +2 +\mark \markup { \musicglyph #"scripts.ufermata" } +1 +@end lilypond + +@noindent +Derartige Objekte werden über dem höchsten System einer Partitur +gesetzt -- abhängig davon, ob sie mitten im Takt oder an seinem +Ende notiert werden, werden sie zwischen Noten oder über der +Taktlinie gesetzt. Wenn sie an einem Zeilenumbruch angegeben +werden, wird das Zeichen zu Beginn der nächsten Zeile ausgegeben. + +@lilypond[quote,verbatim,relative=2] +\mark "Allegro" +c1 c +\mark "assai" \break +c c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-at-the-end-of-a-line.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{aligning-marks-with-various-notation-objects.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-on-every-staff.ly} + +@seealso +Notationsreferenz: +@ref{Übungszeichen}, +@ref{Text formatieren}, +@ref{Musikalische Notation innerhalb einer Textbeschriftung}, +@ref{Die Feta-Schriftart}. + +Schnipsel: +@rlsr{Text}. + +Referenz der Interna: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + +@knownissues +Wenn ein Zeichen am Ende des letzten Taktes einer Partitur gesetzt wird +(wenn also keine nächste Zeile mehr kommt), wird das Zeichen nicht +ausgegeben. + + + +@node Separater Text +@unnumberedsubsubsec Separater Text +@translationof Separate text + +@cindex separater Text +@cindex Text alleine +@cindex nur Text +@cindex Text, oberste Ebene +@cindex oberste Ebene, Text + +@funindex \markup +@funindex markup + +Eine @code{\markup}-Umgebung kann auch für sich alleine existieren, +außerhalb einer @code{\score}-Umgebung, als ein Ausdruck auf der +höchsten Ebene. Diese Syntax ist beschrieben in @ref{Dateistruktur}. + +@c KEEP LY +@lilypond[verbatim,quote] +\markup { + Morgen, morgen, und morgen... +} +@end lilypond + +@noindent +Damit kann Text unabhängig von den Noten gesetzt werden. Das +bietet sich vor allem in Situationen an, in denen mehrere Stücke +in einer Datei vorkommen, wie beschrieben in +@ref{Mehrere Partituren in einem Buch}. + +@c KEEP LY +@lilypond[quote,verbatim] +\score { + c'1 +} +\markup { + Morgen, übermorgen, und überübermorgen... +} +\score { + c'1 +} +@end lilypond + +Unabhängige Textabschnitte können über mehrere Seiten reichen, so +dass man Textdokumente oder Bücher ausschließlich mit LilyPond +setzen kann. Einzelheiten zu den vielfältigen Möglichkeiten finden +sich in @ref{Textbeschriftung über mehrere Seiten}. + +@funindex \markuplines +@funindex \markup +@funindex markuplines +@funindex markup + +@predefined +@code{\markup}, +@code{\markuplines}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{stand-alone-two-column-markup.ly} + +@seealso +Notationsreferenz: +@ref{Text formatieren}, +@ref{Die Dateistruktur}, +@ref{Mehrere Partituren in einem Buch}, +@ref{Textbeschriftung über mehrere Seiten}. + +Schnipsel: +@rlsr{Text}. + +Referenz der Interna: +@rinternals{TextScript}. + + + +@node Text formatieren +@subsection Text formatieren +@translationof Formatting text + +Dieser Abschnitt zeigt grundlegende und fortgeschrittene +Formatierung von Text, wobei der Textbeschriftungsmodus +(@code{\markup} benutzt wird. + +@menu +* Textbeschriftung (Einleitung):: +* Überblick über die wichtigsten Textbeschriftungsbefehle:: +* Textausrichtung:: +* Graphische Notation innerhalb einer Textbeschriftung:: +* Musikalische Notation innerhalb einer Textbeschriftung:: +* Textbeschriftung über mehrere Seiten:: +@end menu + +@node Textbeschriftung (Einleitung) +@unnumberedsubsubsec Textbeschriftung (Einleitung) +@translationof Text markup introduction + +@cindex markup +@cindex Textbeschriftung +@cindex Beschriftung, Text +@cindex Setzen von Text + +@funindex markup +@funindex \markup + +Eine @code{\markup}-Umgebung wird benutzt, um Text mit einer +großen Anzahl von Formatierungsmöglichkeiten (im @qq{markup-Modus}) +zu setzen. + +@cindex Textbeschriftungs-Ausdrücke +@cindex Text, Syntax +@cindex markup, Syntax +@cindex Ausdrück, Text + +Die Syntax für Textbeschriftungen ähnelt der normalen Syntax von +LilyPond: ein @code{\markup}-Ausdruck wird in geschweifte Klammern +eingeschlossen (@code{@{@dots{} @}}). Ein einzelnes Wort wird als +ein Minimalausdruck erachtet und muss deshalb nicht notwendigerweise +eingeklammert werden. + +Anders als Text in Anführungsstrichen können sich in einer +Textbeschriftungsumgebung (@code{\markup}) geschachtelte Ausdrücke +oder weitere Textbefehle befinden, eingeführt mit einem Backslash +(@code{\}). Derartige Befehle beziehen sich nur auf den ersten +der folgenden Ausdrücke. + +@lilypond[quote,verbatim,relative=2] +a1-\markup intenso +a2^\markup { poco \italic più forte } +c e1 +d2_\markup { \italic "string. assai" } +e +b1^\markup { \bold { molto \italic agitato } } +c +@end lilypond + +@cindex Sonderzeichen in Textbeschriftungen +@cindex Textbeschriftung, Sonderzeichen +@cindex besondere Zeichen, Text +@cindex Text mit Sonderzeichen +@cindex Anführungsstriche im Text +@cindex Drucken von Sonderzeichen +@cindex Setzen von Sonderzeichen +@cindex Beschriftung, Sonderzeichen + +Eine @code{\markup}-Umgebung kann auch Text in +Anführungszeichen beinhalten. Derartige Zeichenketten werden als +ein Textausdruck angesehen, und darum werden innerhalb von ihnen +Befehle oder Sonderzeichen (wie @code{\} oder @code{#}) so +ausgegeben, wie sie eingeben werden. Doppelte Anführungsstriche +können gesetzt werden, indem man ihnen einen Backslash voranstellt. + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +a1^"\italic Text..." +a_\markup { \italic "... setzt \"kursive\" Buchstaben!" } +a a +@end lilypond + +Damit eine Anzahl von Wörtern als ein einziger Ausdruck behandelt +wird, müssen alle Wörter zwischen geraden Anführungszeichen (Shift+2) +stehen oder ihnen muss ein Befehl vorangestellt werden. Die Art, +wie die Ausdrücke definiert sind, wirkt sich darauf aus, wie +sie übereinander gestapelt, mittig und aneinander ausgerichtet +werden. Im folgenden Beispiel verhält sich der zweite +@code{\markup}-Ausdruck genauso wie der erste: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { \center-column { a bbb c } } +c1^\markup { \center-column { a { bbb c } } } +c1^\markup { \center-column { a \line { bbb c } } } +c1^\markup { \center-column { a "bbb c" } } +@end lilypond + +Textbeschriftung kann auch durch Variablen definiert werden. Diese +Variablen können dann direkt an Noten angefügt werden: + +@lilypond[quote,verbatim] +allegro = \markup { \bold \large Allegro } + +{ + d''8.^\allegro + d'16 d'4 r2 +} +@end lilypond + + +@noindent +Eine ausführliche Liste der @code{\markup}-Befehle findet sich in +@ref{Textbeschriftungsbefehle}. + + +@seealso +Notationsreferenz: +@ref{Textbeschriftungsbefehle}. + +Schnipsel: +@rlsr{Text}. + +Installierte Dateien: +@file{scm/markup.scm}. + +@knownissues +Syntaxfehler im Textbeschriftungsmodus können sehr verwirrend sein. + + +@node Überblick über die wichtigsten Textbeschriftungsbefehle +@unnumberedsubsubsec Überblick über die wichtigsten Textbeschriftungsbefehle +@translationof Selecting font and font size + +@cindex Schriftschnitt verändern +@cindex Schriftart verändern +@cindex Verändern der Schriftart + +@funindex \italic +@funindex \bold +@funindex \underline +@funindex italic +@funindex bold +@funindex underline + +Einfache Änderungen des Schriftartschnitts können im Textbeschriftungsmodus +vorgenommen werden: + +@lilypond[quote,verbatim,relative=2] +d1^\markup { + \bold { Più mosso } + \italic { non troppo \underline Vivo } +} +r2 r4 r8 +d,_\markup { \italic quasi \smallCaps Tromba } +f1 d2 r +@end lilypond + +@cindex Schriftgröße +@cindex Textgröße +@cindex Größe der Schriftart + +@funindex \fontsize +@funindex \smaller +@funindex \larger +@funindex \magnify +@funindex fontsize +@funindex smaller +@funindex larger +@funindex magnify + +Die Größe von Buchstaben kann auf verschiedene Arten verändert werden: +@itemize +@item +die Schriftgröße kann auf bestimmte definierte Standardgrößen gesetzt werden, + +@item +die Schriftgröße kann mit einem absoluten Wert gesetzt werden, + +@item +die Schriftgröße kann relativ zur vorhergehenden Größe geändert werden. +@end itemize + +@noindent +Das Beispiel unten zeigt alle drei Möglichkeiten: + +@lilypond[quote,verbatim,relative=1] +f1_\markup { + \tiny espressivo + \large e + \normalsize intenso +} +a^\markup { + \fontsize #5 Sinfonia + \fontsize #2 da + \fontsize #3 camera +} +bes^\markup { (con + \larger grande + \smaller emozione + \magnify #0.6 { e sentimento } ) +} +d c2 r8 c bes a g1 +@end lilypond + +@cindex hochgestellt +@cindex tiefergestellt + +@funindex \super +@funindex super +@funindex \sub +@funindex sub + +Text kann auch hoch- bzw. tiefgestellt gesetzt werden. Die so markierten +Buchstaben werden automatisch in einer kleineren Schriftgröße gesetzt, +aber die normale Schriftgröße kann auch eingesetzt werden: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { 1 \super st movement } + \line { 1 \normal-size-super st movement + \sub { (part two) } } + } +} +@end lilypond + +@cindex Schriftfamilien +@cindex Schriftschnitte + +Der Textbeschriftungsmodus stellt eine einfache Möglichkeit zur Verfügung +unterschiedliche Schriftschnitte anzuwählen. Ohne besondere Einstellungen +wird automatisch eine Schriftart mit Serifen ausgewählt. Das Beispiel +unten zeigt die Verwendung der eigenen Zahlenschriftart von LilyPond, +den Einsatz von serifenloser Schriftart und von Schreibmaschinenschriftart. +Die letzte Zeile zeigt, dass sich die Standardeinstellung mit dem +Befehl @code{\roman} wieder herstellen lässt. + +@lilypond[quote,verbatim] +\markup { + \column { + \line { Act \number 1 } + \line { \sans { Scene I. } } + \line { \typewriter { Verona. An open place. } } + \line { Enter \roman Valentine and Proteus. } + } +} +@end lilypond + +@noindent +Einige dieser Schriftarten, etwa die Zahlenschriftart oder die Schriftart +für Dynamikzeichen, stellen nicht alle Zeichen zur Verfügung, wie beschrieben +in @ref{Neue Lautstärkezeichen} und @ref{Manuelle Wiederholungszeichen}. + +@c \concat is actually documented in Align (it is not +@c a font-switching command). But we need it here. -vv + +Einige Schriftartbefehle können ungewollte Leerzeichen innerhalb von Wörtern +hervorrufen. Das kann vermieden werden, indem die einzelnen Elemente mit +dem Befehl @code{\concat} zu einem Element verschmolzen werden: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \concat { 1 \super st } + movement + } + \line { + \concat { \dynamic p , } + \italic { con dolce espressione } + } + } +} +@end lilypond + +Eine ausführliche Liste der unterschiedlichen Befehl zur Beeinflussung +der Schriftarten findet sich in @ref{Font}. + +Es ist auch möglich, eigene Schriftfamilien zu definieren, wie erklärt in +@ref{Schriftarten}. + +@funindex \teeny +@funindex \tiny +@funindex \small +@funindex \normalsize +@funindex \large +@funindex \huge +@funindex \smaller +@funindex \larger +@funindex teeny +@funindex tiny +@funindex small +@funindex normalsize +@funindex large +@funindex huge +@funindex smaller +@funindex larger + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}, +@code{\smaller}, +@code{\larger}. +@endpredefined + + +@seealso +Notationsreferenz: +@ref{Font}, +@ref{Neue Lautstärkezeichen}, +@ref{Manuelle Wiederholungszeichen}, +@ref{Schriftarten}. + +Schnipsel: +@rlsr{Text}. + +Referenz der Interna: +@rinternals{TextScript}. + +Installierte Dateien: +@file{scm/define-markup-commands.scm}. + +@knownissues +Wenn die Befehle @code{\teeny}, @code{\tiny}, +@code{\small}, @code{\normalsize}, @code{\large} und +@code{\huge} eingesetzt werden, erhält man schlechte Zeilenabstände +verglichen mit @code{\fontsize}. + + + +@node Textausrichtung +@unnumberedsubsubsec Textausrichtung +@translationof Text alignment + +@cindex Text, Ausrichtung +@cindex Ausrichtung von Text +@cindex Textbeschriftung ausrichten +@cindex Beschriftung ausrichten + +Dieser Abschnitt zeigt, wie man Text im Textbeschriftungsmodus +eingibt. Textobjekte können auch als eine Einheit verschoben +werden, wie beschrieben in @rlearning{Verschieben von Objekten}. + +@c Padding commands should be mentioned on this page, but +@c most of these require \box to be more clearly illustrated. -vv + +@cindex Text, horizontale Ausrichtung +@cindex horizontale Ausrichtung von Text + +@funindex \left-align +@funindex \center-align +@funindex \right-align +@funindex left-align +@funindex center-align +@funindex right-align + +Textbeschriftungsobjekte können auf verschiedene Weise ausgerichtet +werden. Standardmäßig wird ein Textobjekt an seiner linken Ecke +ausgerichtet, darum wird das erste und zweite Objekt gleichermaßen +an der linken Ecke ausgerichtet. + +@lilypond[quote,verbatim,relative=2] +d1-\markup { poco } +f +d-\markup { \left-align poco } +f +d-\markup { \center-align { poco } } +f +d-\markup { \right-align poco } +@end lilypond + +@funindex \halign +@funindex halign + +Die horizontale Ausrichtung kann mit einer Zahl auf einen exakten +Wert festgelegt werden: + +@lilypond[quote,verbatim,relative=2] +a1-\markup { \halign #-1 poco } +e' +a,-\markup { \halign #0 poco } +e' +a,-\markup { \halign #0.5 poco } +e' +a,-\markup { \halign #2 poco } +@end lilypond + +@noindent +Manche Objekte haben eigene Ausrichtungsvorgänge und werden deshalb +nicht von diesen Befehlen beeinflusst. Es ist möglich, solche +Objekte als eine Einheit anzusprechen und zu bewegen, wie +gezeigt in @ref{Textartige Zeichen}. + +@cindex Text, vertikale Ausrichtung +@cindex vertikale Ausrichtung von Text + +@funindex \raise +@funindex \lower +@funindex \null +@funindex raise +@funindex lower +@funindex null + +Die vertikale Ausrichtung ist etwas schwieriger. Textelemente +können komplett verschoben werden, es ist aber auch möglich, nur +einen Teil innerhalb der Textbeschriftung zu bewegen. In diesem +Fall muss dem zu verschiebenden Objekt ein Ankerpunkt zugewiesen +werden, welcher entweder ein anderes Textelement oder ein +unsichtbares Objekt sein kann (im Beispiel mit @code{\null} erstellt). +Der letzte Text im Beispiel hat keinen Anker und wird deshalb auch nicht verschoben. + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \raise #2 { Scène 1 } +} +a' +g_\markup { + \null + \lower #4 \bold { Très modéré } +} +a +d,^\markup { + \raise #4 \italic { Une forêt. } +} +a'4 a g2 a +@end lilypond + +@funindex \general-align +@funindex \translate +@funindex \translate-scaled +@funindex general-align +@funindex translate +@funindex translate-scaled + +Einige Befehle können sowohl die horizontale als auch die vertikale +Ausrichtung von Textobjekten beeinflussen. Jedes Objekt, das auf +diese Weise verschoben wird, benötigt einen Anker: + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \translate #'(-1 . 2) "Scène 1" +} +a' +g_\markup { + \null + \general-align #Y #3.2 \bold "Très modéré" +} +a +d,^\markup { + \null + \translate-scaled #'(-1 . 2) \teeny "Une forêt." +} +a'4 a g2 a +@end lilypond + +@cindex mehrzeiliger Text +@cindex Text, mehrere Zeilen +@cindex Blöcke, Text +@cindex Textblöcke +@cindex Beschriftung, mehrzeilig +@cindex Textbeschriftung, mehrzeilig + +@funindex \column +@funindex \center-column +@funindex column +@funindex center-column + +Ein Textbeschriftungsobjekt kann mehrere Zeilen beinhalten. Im folgenden +Beispiel wird jeder Ausdruck innerhalb von @code{\markup} auf einer +eigenen Zeile gesetzt, entweder linksbündig oder zentriert: + +@lilypond[quote,verbatim] +\markup { + \column { + a + "b c" + \line { d e f } + } + \hspace #10 + \center-column { + a + "b c" + \line { d e f } + } +} +@end lilypond + + + +@cindex Text auf der Seite zentrieren +@cindex Zentrieren von Text auf der Seite +@cindex Beschriftung, Zentrieren auf der Seite + +@funindex \fill-line +@funindex fill-line + +Eine Anzahl an Ausdrücken innerhalb von @code{\markup} kann auch +gestreckt werden, so dass die gesamte Seitenbreite benutzt wird. Wenn +nur ein Objekt vorhanden ist, wird es zentriert gesetzt. Die Ausdrücke +selber können wiederum mehrzeilig sein und andere Textbeschriftungsbefehle +beinhalten. + +@lilypond[quote,verbatim] +\markup { + \fill-line { + \line { William S. Gilbert } + \center-column { + \huge \smallCaps "The Mikado" + or + \smallCaps "The Town of Titipu" + } + \line { Sir Arthur Sullivan } + } +} +\markup { + \fill-line { 1885 } +} +@end lilypond + +@cindex Umbruch von Text +@cindex Blocksatz, Text +@cindex Text, Blocksatz +@cindex Beschriftung, Blocksatz +@cindex Textbeschriftung, Blocksatz + +@funindex \wordwrap +@funindex \justify +@funindex wordwrap +@funindex justify + +Längere Texte können auch automatisch umgebrochen werden, wobei es +möglich ist, die Zeilenbreite zu bestimmen. Der Text ist entweder +linksbündig oder im Blocksatz, wie das nächste Beispiel illustriert: + +@lilypond[quote,verbatim] +\markup { + \column { + \line \smallCaps { La vida breve } + \line \bold { Acto I } + \wordwrap \italic { + (La escena representa el corral de una casa de + gitanos en el Albaicín de Granada. Al fondo una + puerta por la que se ve el negro interior de + una Fragua, iluminado por los rojos resplandores + del fuego.) + } + \hspace #0 + + \line \bold { Acto II } + \override #'(line-width . 50) + \justify \italic { + (Calle de Granada. Fachada de la casa de Carmela + y su hermano Manuel con grandes ventanas abiertas + a través de las que se ve el patio + donde se celebra una alegre fiesta) + } + } +} +@end lilypond + +@cindex Textausrichtungsbefehle +@cindex Textausrichtung, Befehle +@cindex Befehle zur Textausrichtung +@cindex Ausrichtung von Text, Befehle + +Eine vollständige Liste der Textausrichtungsbefehle findet sich in +@ref{Align}. + +@seealso +Handbuch zum Lernen: +@rlearning{Verschieben von Objekten}. + +Notationsreferenz: +@ref{Align}, +@ref{Textartige Zeichen}. + +Schnipsel: +@rlsr{Text}. + +Referenz der Interna: +@rinternals{TextScript}. + +Installierte Dateien: +@file{scm/define-markup-commands.scm}. + + + +@node Graphische Notation innerhalb einer Textbeschriftung +@unnumberedsubsubsec Graphische Notation innerhalb einer Textbeschriftung +@translationof Graphic notation inside markup + +@cindex Graphik, eingebunden +@cindex Illustrationen im Text +@cindex Zeichnen im Text +@cindex Abbildungen im Text +@cindex Objekte, Graphik im Text +@cindex eingebundene Graphik im Text + +Verschiedene graphische Objekte können im Textbeschriftungsmodus +eingefügt werden. + +@cindex Kasten, Graphik +@cindex gerundeter Kasten, Graphik +@cindex Klammern, Graphik +@cindex Text verzieren +@cindex Text einrahmen +@cindex Rahmen, Text + +@funindex \box +@funindex \circle +@funindex \rounded-box +@funindex \bracket +@funindex \hbracket +@funindex box +@funindex circle +@funindex rounded-box +@funindex bracket +@funindex hbracket + +Mit bestimmten Textbeschriftungsbefehlen kann man Textelementen +Graphik hinzufügen, wie das nächste Beispiel zeigt: + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \circle Jack + \box "in the box" + \null + \line { + Erik Satie + \hspace #3 + \bracket "1866 - 1925" + } + \null + \rounded-box \bold Prelude + } +} +@end lilypond + +@cindex Platz um Text +@cindex Rand um Text +@cindex Füllung um Text +@cindex Text, Rand außen + +@funindex \pad-markup +@funindex \pad-x +@funindex \pad-to-box +@funindex \pad-around +@funindex pad-markup +@funindex pad-x +@funindex pad-to-box +@funindex pad-around + +Es kann nötig sein, einem Text mehr Platz einzuräumen. Das geschieht mit +verschiedenen Befehlen, wie das folgende Beispiel zeigt. Eine ausführliche +Übersicht findet sich in @ref{Align}. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \box "Charles Ives (1874 - 1954)" + \null + \box \pad-markup #2 "THE UNANSWERED QUESTION" + \box \pad-x #8 "A Cosmic Landscape" + \null + } +} +\markup \column { + \line { + \hspace #10 + \box \pad-to-box #'(-5 . 20) #'(0 . 5) + \bold "Largo to Presto" + } + \pad-around #3 + "String quartet keeps very even time, +Flute quartet keeps very uneven time." +} +@end lilypond + +@cindex Graphische Notation +@cindex Symbole, nicht musikalische +@cindex Notation, graphische +@cindex nichtmusikalische Symbole + +@funindex \combine +@funindex \draw-circle +@funindex \filled-box +@funindex \triangle +@funindex \draw-line +@funindex \arrow-head +@funindex combine +@funindex draw-circle +@funindex filled-box +@funindex triangle +@funindex draw-line +@funindex arrow-head + +Andere graphische Elemente oder Symbole können gesetzt werden, ohne dass +man Text benötigt. Wie mit allen Textbeschriftungen können Objekte +innerhalb von @code{\markup} kombiniert werden. + +@lilypond[quote,verbatim] +\markup { + \combine + \draw-circle #4 #0.4 ##f + \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 + \hspace #5 + + \center-column { + \triangle ##t + \combine + \draw-line #'(0 . 4) + \arrow-head #Y #DOWN ##f + } +} +@end lilypond + +@cindex Einbinden von Graphik +@cindex Bilder einbinden +@cindex Graphik einbinden +@cindex Postscript, Graphik + +@funindex \epsfile +@funindex \postscript +@funindex epsfile +@funindex postscript + +Fortgeschrittene graphische Möglichkeiten bietet unter Anderem eine +Funktion, mit der man externe Graphiken im +Encapsulated PostScript (@emph{eps}) -Format einbinden kann oder +aber Graphiken direkt in den Quelltext unter Verwendung von +PostScript-Code notiert. In diesem Fall kann es nötig sein, die +Größe der Zeichnung explizit anzugeben, wie im Beispiel unten gezeigt: + +@lilypond[quote,verbatim,relative=1] +c1^\markup { + \combine + \epsfile #X #10 #"./context-example.eps" + \with-dimensions #'(0 . 6) #'(0 . 10) + \postscript #" + -2 3 translate + 2.7 2 scale + newpath + 2 -1 moveto + 4 -2 4 1 1 arct + 4 2 3 3 1 arct + 0 4 0 3 1 arct + 0 0 1 -1 1 arct + closepath + stroke" + } +c +@end lilypond + +Eine ausführliche Liste der Graphik-Befehle findet sich in +@ref{Graphic}. + +@seealso +Notationsreferenz: +@ref{Graphic}, +@ref{Anmerkungen}, +@ref{Align}. + +Schnipsel: +@rlsr{Text}. + +Referenz der Interna: +@rinternals{TextScript}. + +Installierte Dateien: +@file{scm/define-markup-commands.scm}, +@file{scm/stencil.scm}. + + + +@node Musikalische Notation innerhalb einer Textbeschriftung +@unnumberedsubsubsec Musikalische Notation innerhalb einer Textbeschriftung +@translationof Music notation inside markup + +@cindex Notationsobjekte, Einfügen +@cindex Einfügen von Notationsobjekten +@cindex Musikobjekte, Einfügen +@cindex Beschriftung, Notationsobjekte einfügen +@cindex Textbeschriftung, Notationsobjekte einfügen + +Auch Musikobjekte können innerhalb der Textbeschriftungsumgebung gesetzt +werden. + +Noten und Versetzungszeichen lassen sich mit @code{\markup} einfügen: + +@lilypond[quote,verbatim,relative=2] +a2 a^\markup { + \note #"4" #1 + = + \note-by-number #1 #1 #1.5 +} +b1_\markup { + \natural \semiflat \flat + \sesquiflat \doubleflat +} +\glissando +a1_\markup { + \natural \semisharp \sharp + \sesquisharp \doublesharp +} +\glissando b +@end lilypond + +Andere Notationsobjekte können auch eingefügt werden: + +@lilypond[quote,verbatim,relative=1] +g1 bes +ees-\markup { + \finger 4 + \tied-lyric #"~" + \finger 1 +} +fis_\markup { \dynamic rf } +bes^\markup { + \beam #8 #0.1 #0.5 +} +cis +d-\markup { + \markalphabet #8 + \markletter #8 +} +@end lilypond + +Allgemeiner gesagt kann jedes verfügbare Notationssymbol unabhängig +von der Notation als ein Textbeschriftungsobjekt eingefügt werden, wie +unten gezeigt. Eine vollständige Liste der verfügbaren Symbole findet +sich in @ref{Die Feta-Schriftart}. + +@lilypond[quote,verbatim,relative=2] +c2 +c'^\markup { \musicglyph #"eight" } +c,4 +c,8._\markup { \musicglyph #"clefs.G_change" } +c16 +c2^\markup { \musicglyph #"timesig.neomensural94" } +@end lilypond + +@noindent +Eine andere Möglichkeit, andere als Textsymbole zu schreiben, findet sich +in @ref{Was sind Schriftarten}. Diese Methode bietet sich an, um Klammern +unterschiedlicher Größe zu setzen. + +Der Textbeschriftungsmodus unterstützt auch Diagramme für bestimmte +Instrumente: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { + \fret-diagram-terse #"x;x;o;2;3;2;" +} +c^\markup { + \harp-pedal #"^-v|--ov^" +} +c +c^\markup { + \combine + \musicglyph #"accordion.discant" + \combine + \raise #0.5 \musicglyph #"accordion.dot" + \raise #1.5 \musicglyph #"accordion.dot" +} +@end lilypond + +@c The accordion diagram is actually taken from a snippet. + +@noindent +Derartige Digramme sind dokumentiert in @ref{Instrument Specific Markup}. + +@cindex Notation innerhalb von Beschriftung +@cindex Notation innerhalb von Text +@cindex Text, Notation innerhalb +@cindex Beschriftung, Notation einfügen +@cindex Notensysteme in Text einfügen + +Sogar eine ganze Partitur kann in ein Textbeschriftungsobjekt eingefügt +werden. In diesem Fall muss die eingefügte @code{\score}-Umgebung +eine @code{\layout}-Umgebung haben, wie in diesem Beispiel: + +@lilypond[quote,verbatim,relative=1] +c4 d^\markup { + \score { + \relative c' { c4 d e f } + \layout { } + } +} +e f | +c d e f +@end lilypond + +Eine vollständige Liste der Musiksymbol-Befehle findet sich in @ref{Music}. + +@seealso +Notationsreferenz: +@ref{Music}, +@ref{Die Feta-Schriftart}, +@ref{Was sind Schriftarten}. + +Schnipsel: +@rlsr{Text}. + +Referenz der Interna: +@rinternals{TextScript}. + +Installierte Dateien: +@file{scm/define-markup-commands.scm}, +@file{scm/fret-diagrams.scm}, +@file{scm/harp-pedals.scm}. + + + +@node Textbeschriftung über mehrere Seiten +@unnumberedsubsubsec Textbeschriftung über mehrere Seiten +@translationof Multi-page markup + +@cindex Textbeschriftung über mehrere Seiten +@cindex Beschriftung über mehrere Seiten +@cindex Text über mehrere Seiten +@cindex mehrseitiger Text + +@funindex \markuplines +@funindex markuplines +@funindex \justified-lines +@funindex justified-lines +@funindex \wordwrap-lines +@funindex wordwrap-lines + +Normale Textbeschriftungsobjekte können nicht getrennt werden, aber mit +einer spezifischen Umgebung ist es möglich, Text auch über mehrere Seiten +fließen zu lassen: + +@lilypond[quote,verbatim] +\markuplines { + \justified-lines { + A very long text of justified lines. + ... + } + \wordwrap-lines { + Another very long paragraph. + ... + } + ... +} +@end lilypond + +Die Syntax braucht eine Liste von Textbeschriftungen folgender Art: + +@itemize +@item +das Resultat eines Beschriftungslistenbefehls, +@item +eine Textbeschriftungsliste, +@item +eine Liste von Beschriftungslisten. +@end itemize + +Eine vollständige Liste der Beschriftungslistenbefehle findet sich in +@ref{Textbeschriftungslistenbefehle}. + +@seealso +Notationsreferenz: +@ref{Textbeschriftungslistenbefehle}. + +Schnipsel: +@rlsr{Text}. + +Erweitern: +@rextend{Neue Definitionen von Beschriftungslistenbefehlen}. + +Referenz der Interna: +@rinternals{TextScript}. + +Installierte Dateien: +@file{scm/define-markup-commands.scm}. + +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markuplines}. +@endpredefined + + +@node Schriftarten +@subsection Schriftarten +@translationof Fonts + +Dieser Abschnitt zeigt, wie Schriftarten eingesetzt werden können und +wie man sie in Partituren ändern kann. + +@menu +* Was sind Schriftarten:: +* Schriftarten für einen Eintrag:: +* Schriftart des gesamten Dokuments:: +@end menu + +@node Was sind Schriftarten +@unnumberedsubsubsec Was sind Schriftarten +@translationof Fonts explained + +@cindex Pango +@cindex Schriftarten, Hintergrundinformation +@cindex Klammern, unterschiedliche Größen +@cindex Schriftarten, Nicht-Text in Beschriftung +@cindex Nicht-Textschriftarten in Beschriftung + +@funindex font-interface + +Schriftarten werden von mehreren Bibliotheken verwaltet. FontConfig wird +benützt, um die vorhandenen Schriftarten des Systems zu erkennen, die +gewählte Schriftart wird dann mit Pango verarbeitet. + +Notationsschriftarten können als eine Ansammlung von besonderen Zeichen +erklärt werden, wobei die Sonderzeichen in verschiedene Familien +klassifiziert werden. Die Syntax des folgenden Beispiels ermöglicht es, +direkt auf verschiedene nicht textuelle Sonderzeichen der +@code{feta}-Schriftart zuzugreifen. Das ist die Standardschriftart +für Notationselemente in LilyPond. + +@lilypond[quote,verbatim,relative=2] +a1^\markup { + \vcenter { + \override #'(font-encoding . fetaBraces) + \lookup #"brace120" + \override #'(font-encoding . fetaText) + \column { 1 3 sf } + \override #'(font-encoding . fetaMusic) + \lookup #"noteheads.s0petrucci" + } +} +@end lilypond + +@noindent +Außer den verschiedenen Klammern, die in @code{fetaBraces} +in verschiedenen Größen enthalten sind, lassen sich alle +dieses Symbole auch mit einer einfacheren Syntax notieren. +Sie ist beschrieben in +@ref{Musikalische Notation innerhalb einer Textbeschriftung}. + +Wenn man die Klammern von @code{fetaBraces} benutzt, wird die +Größe der Klammer durch einen numeralen Part in der +Bezeichnung des Glyphs bestimmt. Als Wert kann eine +Ganzzahl von @code{0} bis @code{575} benutzt werden, wobei +@code{0} die kleinste Klammern ergibt. Der optimale Wert +muss durch Ausprobieren herausgefunden werden. Diese Glyphen +sind alle linke Klammern, rechte Klammern lassen sich durch +eine Drehung herstellen, siehe +@ref{Drehen von Objekten}. + +Drei Textschriftarten sind verfügbar (auf Englisch @code{family} genannt): +mit @code{roman} eine Schriftart +mit Serifen (Standard ist New Century Schoolbook), mit @code{sans} +eine serifenlose (gerade) Schriftart und mit @code{typewriter} eine +Schreibmaschinenschrift, in welcher die Buchstaben alle die gleiche +Weite haben. Die aktuelle Schriftart von @code{sans} und +@code{typewriter} wird durch Pango entsprechend den Systemvorgaben +gewählt. + +Jede Familie kann verschiedene Schriftschnitte besitzen. Im Englischen +wird unterschieden zwischen @code{shape} für kursive Schnitte und +@code{series} für fette Schnitte. Im folgenden Beispiel wird +demonstriert, wie man die verschiedenen Eigenschaften auswählen kann. +Der Wert, der @code{font-size} übergeben wird, entspricht der geforderten +Änderung in Bezug auf die Standardschriftgröße. + +@lilypond[quote,verbatim,relative=2] +\override Score.RehearsalMark #'font-family = #'typewriter +\mark \markup "Ouverture" +\override Voice.TextScript #'font-shape = #'italic +\override Voice.TextScript #'font-series = #'bold +d2.^\markup "Allegro" +\override Voice.TextScript #'font-size = #-3 +c4^smaller +@end lilypond + +@noindent +Eine ähnliche Syntax kann im Textbeschriftungsmodus eingesetzt werden, +hier bietet es sich aber an, die einfacheren Befehle zu verwenden, die +erklärt wurden in +@ref{Überblick über die wichtigsten Textbeschriftungsbefehle}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \override #'(font-shape . italic) + \override #'(font-size . 4) + Idomeneo, + } + \line { + \override #'(font-family . typewriter) + { + \override #'(font-series . bold) + re + di + } + \override #'(font-family . sans) + Creta + } + } +} +@end lilypond + +Auch wenn es einfach ist, zwischen den vordefinierten Schriftarten +umzuschalten, kann man auch eigene Schriftarten verwenden, wie erklärt +in folgenden Abschnitten: @ref{Schriftarten für einen Eintrag} und +@ref{Schriftart des gesamten Dokuments}. + +@seealso +Notationsreferenz: +@ref{Die Feta-Schriftart}, +@ref{Drehen von Objekten}, +@ref{Musikalische Notation innerhalb einer Textbeschriftung}, +@ref{Überblick über die wichtigsten Textbeschriftungsbefehle}, +@ref{Font}. + + +@node Schriftarten für einen Eintrag +@unnumberedsubsubsec Schriftarten für einen Eintrag +@translationof Single entry fonts + +Jede Schriftart, die über das Betriebssystem installiert ist und von +FontConfig erkannt wird, kann in einer Partitur eingefügt werden. Dazu +verwendet man folgende Syntax: + +@lilypond[quote,verbatim,relative=2] +\override Staff.TimeSignature #'font-name = #"Bitstream Charter" +\override Staff.TimeSignature #'font-size = #2 +\time 3/4 + +a1_\markup { + \override #'(font-name . "Vera Bold") + { Vera Bold } +} +@end lilypond + +@cindex Schriftarten, Liste zum Auswählen +@cindex Schriftarten, vorhandene auflisten +@cindex vorhandene Schriftarten auflisten +@cindex Liste der vorhandenen Schriftarten +@cindex verwendbare Schriftarten auflisten + +@funindex show-available-fonts + +Mit folgendem Befehl erhält man eine Liste aller verfügbaren Schriftarten +des Betriebssystems: + +@example +lilypond -dshow-available-fonts x +@end example + +@seealso +Notationsreferenz: +@ref{Was sind Schriftarten}, +@ref{Schriftart des gesamten Dokuments}. + +Schnipsel: +@rlsr{Text}. + + +@node Schriftart des gesamten Dokuments +@unnumberedsubsubsec Schriftart des gesamten Dokuments +@translationof Entire document fonts + +Es ist auch möglich, die Schriftarten für die gesamte Partitur zu ändern. +In diesem Fall müssen die Familien @code{roman}, +@code{sans} und @code{typewriter} in genaus dieser Reihenfolge +entsprechend der Syntax unten definiert werden. Einzelheiten zu +Schriftarten in @ref{Was sind Schriftarten}. + +@cindex Schriftartenfamilien, definieren +@cindex Schriftarten, für das gesamte Dokument ändern +@cindex Ändern von Schriftarten für das gesamte Dokument + +@funindex make-pango-font-tree + +@lilypond[verbatim,quote] +\paper { + myStaffSize = #20 + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" + (/ myStaffSize 20))) +} + +\relative c'{ + c1-\markup { + roman, + \sans sans, + \typewriter typewriter. } +} +@end lilypond + +@c we don't do Helvetica / Courier, since GS incorrectly loads +@c Apple TTF fonts + +@seealso +Notationsreferenz: +@ref{Was sind Schriftarten}, +@ref{Schriftarten für einen Eintrag}, +@ref{Überblick über die wichtigsten Textbeschriftungsbefehle}, +@ref{Font}. + diff --git a/Documentation/de/notation/unfretted-strings.itely b/Documentation/de/notation/unfretted-strings.itely new file mode 100644 index 0000000000..749130d2dc --- /dev/null +++ b/Documentation/de/notation/unfretted-strings.itely @@ -0,0 +1,220 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745 + + 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" + +@c Translators: Till Paala + +@node Bundlose Saiteninstrumente +@section Bundlose Saiteninstrumente +@translationof Unfretted string instruments + +@lilypondfile[quote] +{unfretted-headword.ly} + +@cindex Streicher +@cindex Orchester, Streicher +@cindex Notation für Streicher + +Dieser Abschnitt stellt Information und Referenzen zur Verfügung, die +beim Setzen von Noten für Saiteninstrumente ohne Bund herangezogen +werden können. + +@menu +* Übliche Notation für bundlose Saiteninstrumente:: +@end menu + +@node Übliche Notation für bundlose Saiteninstrumente +@subsection Übliche Notation für bundlose Saiteninstrumente +@translationof Common notation for unfretted strings + +Es gibt wenige Spezifikationen für die Notation von Saiteninstrumenten ohne +Bünde. Die Noten werden auf einem System notiert und meistens ist auch nur +eine Stimme erforderlich. Zwei Stimmen können für Doppelgriff- oder +Divisi-Stellen erforderlich sein. + +@menu +* Hinweise für bundlose Saiteninstrumente:: +* Bezeichnung des Bogens:: +* Flageolett:: +* Bartók-Pizzicato:: +@end menu + +@node Hinweise für bundlose Saiteninstrumente +@unnumberedsubsubsec Hinweise für bundlose Saiteninstrumente +@translationof References for unfretted strings + +Die meisten Notationseigenschaften, die für Orchesterstreicher eingesetzt +werden, sind an anderer Stelle beschrieben: + +@itemize + +@item Textanweisungen wie @qq{pizz.} oder @qq{arco} werden als einfacher +Text eingefügt, siehe @ref{Textarten}. + +@item Fingersatz, auch das Zeichen für den Daumen, ist erklärt in +@ref{Fingersatzanweisungen}. + +@item Doppelgriffe werden normalerweise als Akkord notiert, siehe hierzu +@ref{Noten mit Akkorden}. Anweisungen, wie Akkorde gespielt werden sollen, können +auch hinzugefügt werden, siehe @ref{Arpeggio}. + +@item Eine Vorlage für Streichquartett findet sich in +@rlearning{Streichquartett}. Andere sind als Schnipsel zur Verfügung +gestellt. + +@end itemize + +@seealso +Handbuch zum Lernen: +@rlearning{Streichquartett}. + +Notationsreferenz: +@ref{Textarten}, +@ref{Fingersatzanweisungen}, +@ref{Noten mit Akkorden}, +@ref{Arpeggio}. + +Schnipsel: +@rlsr{Unfretted strings}. + +@node Bezeichnung des Bogens +@unnumberedsubsubsec Bezeichnung des Bogens +@translationof Bowing indications + +@funindex \upbow +@funindex \downbow +@funindex \open + +@cindex Bogen, Anzeige +@cindex Streicher, Bogenanzeige +@cindex Offene Saite, anzeigen +@cindex Saite, offen + +Hinweise zur Bogenfügung können als Artikulationen erstellt werden, wie +beschrieben in +@ref{Artikulationszeichen und Verzierungen}. + +Die Befehle @code{\upbow} und @code{\downbow} werden mit Legatobögen +in folgender Weise eingesetzt: + +@lilypond[verbatim,quote,relative=2] +c4(\downbow d) e(\upbow f) +@end lilypond + +@noindent +und das nächste Beispiel zeigt drei Arten, eine offene A-Saite auf der +Geige anzuzeigen: + +@lilypond[verbatim,quote,relative=2] +a4 \open +a^\markup { \teeny "II" } +a2^\markup { \small "sul A" } +@end lilypond + +@predefined +@code{\downbow}, +@code{\upbow}, +@code{\open}. +@endpredefined + +@seealso +Notation Reference: +@ref{Artikulationszeichen und Verzierungen}, +@ref{Legatobögen}. + + +@node Flageolett +@unnumberedsubsubsec Flageolett +@translationof Harmonics + +@strong{@i{Natürliches Flageolett}} + +@cindex Flageolett +@cindex harmonische Obertöne (Flageolett) +@cindex Notenköpfe, rautenförmig +@cindex rautenförmige Notenköpfe + +@funindex \harmonic +@funindex harmonic + +Flageolett-Töne können auf verschiedene Arten notiert werden. +Üblicherweise werden sie mit einem Rautenkopf notiert, wenn +ein Ton angezeigt werde, bei dem die Saite berührt wird, wo sie +sonst abgegriffen würde. + +@lilypond[verbatim,quote,relative=2] +d4 e4. +\harmonicsOn +d8 e e +d4 e4. +\harmonicsOff +d8 e e +@end lilypond + +Alternativ kann auch eine normale Noten die Tonhöhe anzeigen, die +erklingen soll, wobei ein kleiner Kreis angibt, dass es sich um +einen Flageolett-Ton handelt: + +@lilypond[verbatim,quote,relative=2] +d2^\flageolet d_\flageolet +@end lilypond + + +@strong{@i{Künstliches Flageolett}} + +@cindex künstliches Flageolett +@cindex Flageolett, künstliches + +Künstliche Flageoletttöne werden mit zwei Noten notiert, von denen +einen einen normalen Notenkopf besitzt und die Griffposition des +Fingers angibt, während die andere in Rautenform die Position des +leicht aufgesetzten Fingers anzeigt. + +@lilypond[verbatim,quote,relative=1] +2. 4 +\set harmonicDots = ##t +2. 4 +@end lilypond + +@warning{@code{@bs{}harmonic} @strong{muss} innerhalb einer Akkordkonstruktion +gesetzt werden, auch wenn nur eine Note gesetzt wird. Normalerweise würde +@code{@bs{}harmonicsOn} in dieser Situation benutzt.} + +@seealso +Glossar: +@rglos{harmonics}. + +Notationsreferenz: +@ref{Besondere Notenköpfe}, +@ref{Hinweise für bundlose Saiteninstrumente}. + + + +@node Bartók-Pizzicato +@unnumberedsubsubsec Bartók-Pizzicato +@translationof Snap (Bartok) pizzicato + +@cindex Pizzicato, Bartók +@cindex Pizzicato, Knall- +@cindex Bartók-Pizzicato +@cindex Knall-Pizzicato + +Ein Knallpizzicato, auch als Bartók-Pizzicato bekannt, ist ein hartes +Pizzicato, bei dem man die +Saite nach oben (und nicht seitlich) zieht, sodass sie beim Schwingen +das Griffbrett berührt. + +@lilypond[verbatim,quote,relative=1] +c4\snappizzicato +4\snappizzicato +4^\snappizzicato +4_\snappizzicato +@end lilypond diff --git a/Documentation/de/notation/vocal.itely b/Documentation/de/notation/vocal.itely new file mode 100644 index 0000000000..d0382e8e7d --- /dev/null +++ b/Documentation/de/notation/vocal.itely @@ -0,0 +1,3321 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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" + +@c Translators: Till Paala + +@node Notation von Gesang +@section Notation von Gesang +@translationof Vocal music + +@lilypondfile[quote]{vocal-headword.ly} + +Dieser Abschnitt erklärt, wie Vokalmusik gesetzt werden kann und +die Silben von Gesangstext an den Noten ausgerichtet werden. + +@menu +* Übliche Notation für Vokalmusik:: +* Techniken für die Gesangstextnotation:: +* Strophen:: +* Lieder:: +* Chormusik:: +* Oper und Musical:: +* Psalmengesänge und Hymnen:: +* Alte Vokalmusik:: +@end menu + + +@node Übliche Notation für Vokalmusik +@subsection Übliche Notation für Vokalmusik +@translationof Common notation for vocal music + +Dieser Abschnitt erklärt Eigenheiten und Probleme, die die meisten Arten +an Vokalmusik gemeinsam haben. + +@menu +* Referenz für Vokalmusik:: +* Gesangstext notieren:: +* Text an einer Melodie ausrichten:: +* Automatische Silbendauern:: +* Manuelle Silbendauern:: +* Mehrere Silben zu einer Note:: +* Mehrere Noten zu einer Silbe:: +* Fülllinien und Trennstriche:: +@end menu + + +@node Referenz für Vokalmusik +@unnumberedsubsubsec Referenz für Vokalmusik +@translationof References for vocal music + +Dieser Abschnitt, wo man Lösungen zu den Problemen finden kann, die bei +der Notation von Gesang mit Text auftreten können. + +@itemize + +@item +Die meisten Vokalmusikstile benutzen Text für den Gesangstext. Eine +Einleitung hierzu findet sich in @rlearning{Einfache Lieder setzen}. + +@item +Vokalmusik braucht oft die Benutzung von Textbeschriftung (dem +@code{markup}-Modus) für den Gesangstext oder andere Textelemente +(Namen von Figuren usw.). Die entsprechende Syntax ist beschrieben in +@ref{Textbeschriftung (Einleitung)}. + +@item +@q{Ambitus} können zu Beginn der Stimmen hinzugefügt werden, dies findet +sich erklärt in +@ref{Tonumfang}. + +@item +Dynamikbezeichnung werden normalerweise unter das Notensystem platziert, +aber in Chormusik werden sie normalerweise über das Notensystem notiert, +um Platz für den Text zu schaffen. Siehe @ref{Partiturbeispiele für Chormusik}. + +@end itemize + +@seealso +Glossar: +@rglos{ambitus}. + +Handbuch zum Lernen: +@rlearning{Einfache Lieder setzen}. + +Notationsreferenz: +@ref{Textbeschriftung (Einleitung)}, +@ref{Tonumfang}, +@ref{Partiturbeispiele für Chormusik}. + +Snippets: +@rlsr{Vocal music}. + + +@node Eingabe von Text +@unnumberedsubsubsec Eingabe von Text +@translationof Entering lyrics + +@cindex Gesangstext +@funindex \lyricmode +@cindex Satzzeichen +@cindex Leerzeichen, Gesangstext +@cindex Anführungszeichen, Gesangstext +@cindex Formatierung von Gesangstext +@cindex Gesangstext, Formatierung + +Gesangstext muss in einem speziellen Modus notiert werden. +Der Gesangstextmodus kann mit der Umgebung @code{\lyricmode} +angegeben werden, oder indem @code{\addlyrics} bzw. +@code{\lyricsto} eingesetzt wird. In diesem Modus kann +Text mit Akzenten und Satzzeichen notiert werden, und das +Programm liest @code{d} nicht als die Tonhöhe @notation{D}, +sondern als eine Silbe Text. Anders gesagt: +Silben werden wie Noten notiert, aber die Tonhöhen werden +durch Text ersetzt. + +Beispielsweise: + +@example +\lyricmode @{ Gern4 hätt’4 ich4 dich4 lieb!2 @} +@end example + +Es gibt zwei generelle Methoden, die horizontale Orientierung der +Textsilben anzugeben, entweder indem ihre Dauer angegeben wird, +wie oben in dem Beispiel, oder indem die Silben automatisch an den +Noten ausgerichtet werden. Dazu muss entweder @code{\addlyrics} +oder @code{\lyricsto} eingesetzt werden. Die erste Methode ist +beschrieben in @ref{Manuelle Silbendauern}, die zweite in +@ref{Automatische Silbendauern}. + +Ein Wort oder eine Silbe beginnt mit einem alphabetischen Zeichen +(inklusive einige andere Zeichen, siehe unten) und +endet mit einem Leerzeichen oder einer Zahl. Die folgenden Zeichen +in der Silbe können beliebig sein, außer Leerzeichen und Zahlen. + +Jedes Zeichen, das nicht Leerzeichen noch Zahl ist, wird als Bestandteil +der Silbe angesehen. Eine Silbe kann also auch mit @code{@}} enden, +was oft zu dem Fehler + +@example +\lyricmode @{ lah- lah@} +@end example + +@noindent +führen kann. Hier wird @code{@}} als Teil der letzten Silbe gerechnet, so +dass die öffnende Klammer keine schließende Klammer hat und die Eingabedatei +nicht funktioniert. Klammern sollten deshalb immer von Leerzeichen umgeben +sein. + +@example +\lyricmode @{ lah lah lah @} +@end example + +@cindex Override im Gesangstextmodus +@cindex Anpassungen im Gesangstextmodus +@funindex \override in \lyricmode + +Auch ein Punkt, der auf eine Silbe folgt, wird in die Silbe inkorporiert. +Infolgedessen müssen auch um Eigenschaftsbezeichnungen Leerzeichen gesetzt +werden. Ein Befehl heißt also @emph{nicht}: + +@example +\override Score.LyricText #'font-shape = #'italic +@end example + +@noindent +sondern + +@example +\override Score . LyricText #'font-shape = #'italic +@end example + +Punkte, Gesangstext mit Akzenten, verschiedene lateinische und nicht-lateinische +Zeichen sowie auch etwa Sonderzeichen (wie ein Herz-Symbol) könn direkt in +die Notationsdatei geschrieben werden. Es muss dabei sichergestell werden, dass +die Datei in der UTF-8-Kodierung gespeichert wird. Zu mehr Information siehe +@ref{Zeichnkodierung}. + +@lilypond[quote,verbatim] +\relative c'' { d8 c16 a bes8 f e' d c4 } +\addlyrics { „Schad’ um das schö -- ne grü -- ne Band, } +@end lilypond + +Normale Anführungszeichen können im Gesangstext auch benutzt werden, aber sie +müssen mit einem Backslash und weiteren Anführungszeichen begleitet werden: + +@lilypond[quote,verbatim] +\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } +\addlyrics { "\"I" am so lone -- "ly,\"" said she } +@end lilypond + +Die vollständige Definition des Anfangs eines Wortes in LilyPond ist etwas +komplizierter. Ein Wort im Gesangstextmodus beginnt mit einem alphabetischen +Zeichen, @code{_}, @code{?}, @code{!}, @code{:}, +@code{'}, den Kontrollzeichen @code{^A} bis @code{^F}, +@code{^Q} bis @code{^W}, @code{^Y}, @code{^^}, einem beliebigen 8-bit-Zeichen +mit einem ASCII-Code größer als 127 oder einer zwei-Zeichen-Kombination aus +einem Backslash, gefolgt von @code{`}, @code{'}, @code{"} oder @code{^}. + +@c " to balance double quotes for not-so-bright context-sensitive editors + +Man hat sehr gut Möglichkeiten, die Erscheinung des Gesangstextes zu +beeinflussen, wenn man dafür Textbeschriftungsbefehle einsetzt. Siehe +hierzu @ref{Text formatieren}. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{formatting-lyrics-syllables.ly} + + +@seealso +Handbuch zum Lernen: +@rlearning{Lieder}. + +Notationsreferenz: +@ref{Automatische Silbendauern}, +@ref{Schriftarten}, +@ref{Eingabe-Modi}, +@ref{Manuelle Silbendauern}, +@ref{Text formatieren}, +@ref{Zeichenkodierung}. + +Referenz der Interna: +@rinternals{LyricText}. + +Schnipsel: +@rlsr{Text} + + + +@node Text an einer Melodie ausrichten +@unnumberedsubsubsec Text an einer Melodie ausrichten +@translationof Aligning lyrics to a melody + +@cindex @code{associatedVoice} +@cindex Gesangstext, an Melodie ausgerichtet +@cindex Text, an Melodie ausgerichtet + +@funindex \lyricmode +@funindex \addlyrics +@funindex \lyricsto + +Gesangstext wird gesetzt, wenn er in einem @code{Lyrics}-Kontext +ausgewertet wird, siehe @ref{Was sind Kontexte?}. + +@example +\new Lyrics \lyricmode @{ @dots{} @} +@end example + +Gesangstext kann an einer Melodie auf zwei Arten ausgerichtet werden: + +@itemize + +@item +Gesangstext kann automatisch ausgerichtet werden, wobei die Dauern +von einer Notenstimme oder (in besonderen Umständen) von einer +assoziierten Melodie übernommen werden. Das geschieht mit +@code{\addlyrics}, @code{\lyricsto} oder indem man die +@code{associatedVoice}-Eigenschaft einsetzt. Mehr Informationen +in @ref{Automatische Silbendauern}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e4 d c2 + } + >> + +% takes durations and alignment from notes in "one" + \new Lyrics \lyricsto "one" { + Life is __ _ love, live __ life. + } + +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +Die erste Strophe zeigt, wie normalerweise Text gesetzt wird. + +Die zweite Strophe zeigt, wie die Stimme (@code{Voice}), von der +die Dauern entnommen werden, geändert werden kann. Das ist nützlich, +wenn der Text unterschiedlicher Strophen die Noten auf unterschiedliche +Weise füllt und alle Dauern als @code{Voice}-Kontexte vorhanden sind. +Zu mehr Details siehe @ref{Strophen}. + +@item +Gesangstext kann unabhängig von den Notendauern platziert werden, +indem man die Dauern der Silben explizit vorgibt und den Text +innerhalb von @code{\lyricmode} notiert: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice = "one" \relative c'' { + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + +% uses previous explicit duration of 2; + \new Lyrics \lyricmode { + Joy to the earth! + } + +% explicit durations, set to a different rhythm + \new Lyrics \lyricmode { + Life4 is love,2. live4 life.2 + } +>> +@end lilypond + +Die erste Strophe wird nicht an den Noten ausgerichtet, weil die +Dauern nicht angegeben sind, und der erste Wert 2 für alle Silben +benutzt wird. + +Die zweite Strophe zeigt, dass die Silben sehr unabhängig von den Noten +notiert werden können. Das ist nützlich, wenn der Text von verschiedenen +Strophen die Noten auf unterschiedliche Weise füllt, aber die Dauer nicht +in einem Noten-Kontext vorhanden ist. Mehr Details finden sich in +@ref{Manuelle Silbendauern}. Diese Technik ist auch nützlich, wenn man +Dialog zu einer Musik setzt; ein Beispiel hierzu findet sich in +@ref{Dialog zur Musik}. + +Wenn Text auf diese Weise eingegeben wird, werden die Silben links an den +Noten ausgerichtet, können aber auch zentriert werden, indem man eine +assoziierte Stimme angibt, wenn eine existiert. Zu Einzelheiten siehe +@ref{Manuelle Silbendauern}. +@end itemize + +@seealso +Handbuch zum Lernen: +@rlearning{Text an einer Melodie ausrichten}. + +Notation Reference: +@ref{Was sind Kontexte?}, +@ref{Automatische Silbendauern}. +@ref{Strophen}, +@ref{Manuelle Silbendauern}, +@ref{Dialog zur Musik}. + +Referenz der Interna: +@rinternals{Lyrics}. + + +@node Automatische Silbendauern +@unnumberedsubsubsec Automatische Silbendauern +@translationof Automatic syllable durations + +@cindex automatische Ausrichtung von Silben +@cindex Gesangstext, Ausrichtung +@cindex Ausrichtung von Gesangstext +@funindex \addlyrics +@funindex \lyricsto + +Die Silben des Gesangstextes können automatisch an einer +Melodie ausgerichtet werden. Das ist auf drei Arten möglich: + +@itemize + +@item +indem man einen benannten @code{Voice}-Kontext mit der Melodie durch +@code{\lyricsto} zuweist, + +@item +indem man den Gesangstext mit @code{\addlyrics} beginnt und direkt nach +dem @code{Voice}-Kontext mit der Melodie notiert, + +@item +indem man die @code{associatedVoice}-Eigenschaft definiert, sodass man +die Ausrichtung des Gesangstextes zwischen verschiedenen benannten +@code{Voice}-Kontexten gewechselt werden. + +@end itemize + +In allen drei Methoden können Bindestriche zwischen den Silben +oder Fülllinien hinter einem Wortende gezogen werden. Zu Einzelheiten +siehe @ref{Fülllinien und Trennstriche}. + +Der @code{Voice}-Kontext, der die Melodie enthält, an der der Text +ausgerichtet werden soll, darf noch nicht @qq{gestorben} sein, weil +sonst aller Text danach verloren geht. Das kann passieren, wenn es +Strecken gibt, in denen die Stimme pausiert. Zu Methoden, wie man Kontexte +am Leben erhält, siehe @ref{Kontexte am Leben halten}. + +@subheading @code{\lyricsto} Benutzen + +@cindex \lyricsto +@funindex \lyricsto +@funindex lyricsto + +Gesangstext kann an einer Melodie automatisch ausgerichtet werdne, indem +man den beannten @code{Voice}-Kontext mit der Melodie durch den Befehl +@code{\lyricsto} angibt: + +@lilypond[quote,verbatim,relative=2] +<< + \new Voice = "melody" { + a4 a a a + } + \new Lyrics \lyricsto "melody" { + These are the words + } +>> +@end lilypond + +@noindent +Damit wird der Text an den Noten des benannten @code{Voice}-Kontextes +ausgerichtet, der schon vorher existieren muss. Aus diesem Grund +wird der @code{Voice}-Kontext normalerweise zuerst definiert, gefolgt +vom @code{Lyrics}-Kontext. Der Gesangstext selber folgt dem +@code{\lyricsto}-Befehl. Der @code{\lyricsto}-Befehl ruft den +Gesangstextmodus automatisch auf, sodass man @code{\lyricmode} in diesem +Fall auslassen kann. Standardmäßig werden die Silben unter den Noten +angeordnet. Für andere Optionen siehe @ref{Gesangstext vertikal verschieben}. + + +@subheading @code{\addlyrics} benutzen + +@funindex addlyrics +@funindex \addlyrics + +Der @code{\addlyrics}-Befehl ist eigentlich nur eine Abkürzung für eine +etwas kompliziertere LilyPond-Struktur, den man manchmal aus Bequemlichkeit +einsetzen kann. + +@example +@{ Noten @} +\addlyrics @{ Gesangstext @} +@end example + +@noindent +bedeutet das Gleiche wie + +@example +\new Voice = "bla" @{ Noten @} +\new Lyrics \lyricsto "bla" @{ Gesangstext @} +@end example + +Hier ein Beispiel: + +@lilypond[verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } +} +@end lilypond + +Weitere Strophen können mit weiteren @code{\addlyrics}-Abschnitten +hinzugefügt werden: + +@lilypond[ragged-right,verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } + \addlyrics { speel het spel } + \addlyrics { joue le jeu } +} +@end lilypond + +Der Befehl @code{\addlyrics} kann keine polyphonen Situationen bewältigen. +In diesen Fällen sollen man @code{\lyricsto} benutzen. + + +@subheading @code{associatedVoice} benutzen + +Die Melodie, an die der Gesangstext ausgerichtet wird, kann durch Setzen der +@code{associatedVoice}-Eigenschaft geändert werden: + +@example +\set associatedVoice = #"lala" +@end example + +@noindent +Der Wert der Eigenschaft (hier @code{"lala"}) ist die Bezeichnung eines +@code{Voice}-Kontextes. Aus technischen Gründen muss der @code{\set}-Befehl +eine Silbe vor der Silbe gesetzt werden, auf die er wirken soll. + +Ein Beispiel demonstiert das: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e8 d4. c2 + } + >> +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +@seealso +Notationsreferenz: +@ref{Fülllinien und Trennstriche}, +@ref{Kontexte am Leben halten}, +@ref{Gesangstext vertikal verschieben}. + + + +@node Manuelle Silbendauer +@unnumberedsubsubsec Manuelle Silbendauer +@translationof Manual syllable durations + +In komplexer Vokalmusik kann es nötig sein, den Gesangstext vollkommen +unabhängig von den Noten zu positionieren. In diesem Fall sollte man +nicht @code{\addlyrics} bzw. @code{\lyricsto} benutzen, und auch keine +@code{associatedVoice} definieren. Die Silben werden wie Noten notiert +-- indem die Tonhöhen durch den Text der Silbe ersetzt werden -- und +die Dauer jeder Silbe muss angegeben werden. + +Standardmäßig werden die Silben links am entsprechenden musikalischen Moment +ausgerichtet. Bindestriche zwischen den Silben können wie üblich +gezogen werden, aber Fülllinien hinter dem Wortende können nicht gezogen +werden, wenn es keine mit dem Text verknüpfte Melodie gibt. + +Hier zwei Beispiele: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g2 f + } + \new Lyrics \lyricmode { + play1 the4 game4 + } +>> +@end lilypond + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + c2 c2 + d1 + } + } + \new Lyrics { + \lyricmode { + I2 like4. my8 cat!1 + } + } + \new Staff { + \relative c' { + c8 c c c c c c c + c8 c c c c c c c + } + } +>> +@end lilypond + +Diese Technik ist nützlich, wenn man Dialog zur Musik schreiben will, siehe +@ref{Dialog zur Musik}. + +Um Silben an den Noten des entsprechenden musikalischen Moments zu zentrieren, +muss @code{associatedVoice} auf die Bezeichnung des Stimmen-Kontext eingestellt +werden, in dem sich die Noten befinden. Wenn @code{associatedVoice} definiert +ist, können doppelte Bindestriche zwischen Silben und doppelte Unterstriche +hinter Wörtern für Fülllinien benutzt werden: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g f g + } + \new Lyrics \lyricmode { + \set associatedVoice = #"melody" + play2 the4 game2. __ + } +>> +@end lilypond + +@seealso +Notationsreferenz: +@ref{Dialog zur Musik}, +@ref{Kontexte am Leben halten}. + +Referenz der Interna: +@rinternals{Lyrics}, +@rinternals{Voice}. + + +@node Mehrere Silben zu einer Note +@unnumberedsubsubsec Mehrere Silben zu einer Note +@translationof Multiple syllables to one note + +@funindex _ + +@cindex Bindebogen, Gesangstext +@cindex Anführungsstriche, Gesangstext +@cindex Leerzeichen, Gesangstext + +Um mehr als eine Silbe zu einer Note zuzuordnen, können die Silben +mit geraden Anführungszeichen (@code{"}) umgeben werden oder ein +Unterstrich (@code{_}) benutzt werden, um ein Leerzeichen zwischen +Silben zu setzen. Mit der Tilde (@code{~}) kann ein Bindebogen +gesetzt werden. Dies erfordert, dass eine Schriftart vorhanden ist, +die das entsprechende Symbol (U+203F) beinhaltet. Frei erhältliche +Schriftarten, die den Bindebogen enthalten, sind @qq{FreeSerif} (ein +Times-Klon), @qq{DejaVuSans} (aber nicht DejaVuSerif) oder +TeXGyreSchole (ein Century Schoolbook-Klon). + +@lilypond[quote,ragged-right,verbatim] +{ + \time 3/4 + \relative c' { c2 e4 g2 e4 } + \addlyrics { gran- de_a- mi- go } + \addlyrics { pu- "ro y ho-" nes- to } + \addlyrics { pu- ro~y~ho- nes- to } +} +@end lilypond + +@seealso +Referenz der Interna: +@rinternals{LyricCombineMusic}. + + +@node Mehrere Noten zu einer Silbe +@unnumberedsubsubsec Mehrere Noten zu einer Silbe +@translationof Multiple notes to one syllable + +@cindex Melisma +@cindex Phrasierung, Gesang +@funindex \melisma +@funindex \melismaEnd + +Öfters, insbesondere in Alter Musik, wird eine einzige Silbe zu mehreren Noten gesungen, was als Melisma bezeichnet wird. Die Silbe eines Melismas wird +normalerweise links an der ersten Note des Melismas ausgerichtet. + +Melismen können direkt im Gesangstext definiert werden, indem +ein Unterstrich (@code{_}) für jede Note notiert wird, die +übersprungen werden soll. + +Wenn ein Melisma an einer Silbe auftritt, die nicht die letzte eines +Wortes ist, wird diese Silbe mit der folgenden durch wiederholte Trennstriche +verbunden. Dies wird notiert, indem man zwei Trennstriche (@code{--}) +nach der Silbe notiert. + +Wenn ein Melisma an der letzten Silbe eines Wortes auftritt, wird eine +Fülllinie vom Ende der Silbe bis zur letzten Note des Melismas gezeichnet. +Das wird durch zwei Unterstriche (@code{__}) nach der Silbe notiert. + +Es gibt fünf Arten, auf die ein Melisma angezeigt werden kann: + +@itemize + +@item +Melismen werden automatisch zu Noten erstellt, die übergebunden sind: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g2 ~ | + g4 e2 ~ | + e8 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +Melismen können automatisch aus den Noten erstellt werden, indem man Legatobögen +über den Noten eines Melismas notiert. Auf diese Weise wird Gesangstext +üblicherweise notiert: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 ( f e f ) + e8 ( d e2 ) + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +Noten werden als ein Melisma betrachtet, wenn sie manuell mit einem Balken +versehen werden, vorausgesetzt, dass die automatische Bebalkung ausgeschaltet +ist. Siehe @ref{Einstellung von automatischen Balken}. + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + \autoBeamOff + f4 g8[ f e f] + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond + +Diese Methode eignet sich natürlich nicht für Noten, die länger als +Achtel sind. + +@item +Eine Gruppe von Noten ohne Legatobogen werden als Melisma betrachtet, +wenn sie zwischen @code{\melisma} und @code{\melismaEnd} eingeschlossen +sind: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 + \melisma + f e f + \melismaEnd + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond + +Mit dieser Methode können allerdings nicht zwei Melismen notiert werden, +wenn sie direkt aufeinander folgen. + +@item +Ein Melisma kann auch ausschließlich im Gesangstext notiert werden, indem man +einzlene Unterstriche (@code{_}) für jede Note eingibt, die zum Melisma +hinzugefügt werden soll. + +@lilypond[verbatim, quote, relative=2] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 f e f + e8 d e2 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ _ _ e __ _ _ + } +>> +@end lilypond + +@end itemize + +Man kann durchaus auch Binde- und Legatobögen sowie manuelle Balken +benutzen, ohne dass sie Melismen bezeichnen, wenn +@code{melismaBusyProperties} aufgerufen wird: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e e -- le -- i -- son + } +>> +@end lilypond + +Andere Einstellungen für @code{melismaBusyProperties} können bneutzt +werden, um nur eine Auswahl von Binde-, Legatobögen und Balken zur +automatischen Melismenerkennung gelten zu lassen. Siehe +@code{melismaBusyProperties} in @rinternals{Tunable context properties}. + +Alternativ kann auch @code{ignoreMelismata} auf wahr gesetzt werden, +wenn alle Melisma-Bezeichnungen ignoriert werden sollen, siehe +@ref{Strophen mit unterschiedlichem Rhythmus}. + +Wenn ein Melisma während einer Passage benötigt wird, in der +@code{melismaBusyProperties} aktiviert ist, kann es durch einen +einzelnen Unterstrich im Gesangstext für jede Note des Melismas +angegeben werden: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] ~ f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ e __ _ _ _ + } +>> +@end lilypond + + +@predefined + +@code{\autoBeamOff}, +@code{\autoBeamOn}, +@code{\melisma}, +@code{\melismaEnd}. + +@seealso +Glossar: +@rglos{melisma}. + +Handbuch zum Lernen: +@rlearning{Text an einer Melodie ausrichten}. + +Notation Reference: +@ref{Kontexte am Leben halten}, +@ref{Automatische Silbendauern}, +@ref{Einstellung von automatischen Balken}, +@ref{Strophen mit unterschiedlichem Rhythmus}. + +Internals Reference: +@rinternals{Tunable context properties}. + +@knownissues + +Fülllinien zu Melismen werden nicht automatisch erkannt, sondern müssen +manuell gesetzt werden. + + +@node Fülllinien und Trennstriche +@unnumberedsubsubsec Fülllinien und Trennstriche +@translationof Extenders and hyphens + +@cindex Melisma +@cindex Fülllinie + +@c leave this as samp. -gp +Wenn die letzte Silbe eines Wortes auf ein Melisma fällt, wird +das Melisma oft mit einer langen horizontalen Linie angezeigt, +die nach dem Wort beginnt und mit der letzten Note des Melismas +endet. Derartige Fülllinien werden mit einem doppelten +Unterstrich (@code{ __ }) eingegeben, wobei beachtet werden muss, +dass er von Leerzeichen umgeben ist. + +@warning{Melismen werden mit Fülllinien angezeigt, die als doppelter +Unterstrich notiert sind. Kurze Melismen können auch notiert werden, +indem eine Note übersprungen wird. Hierzu wird ein einfacher +Unterstrich notiert und keine Fülllinie gezogen.} + +@cindex Trennstriche, Gesangstext + +@c leave this as samp. -gp +Zentrierte Bindestriche zwischen den einzelnen Silben werden mit +einem doppelten Bindestrich (@code{ -- }) eingegeben, wobei beachtet +werden muss, dass er von Leerzeichen umgeben ist. Der Bindestrich +wird zwischen den Silben zentriert und seine Länge dem Notenabstand +angepasst. + +In sehr eng notierter Musik können die Bindestriche ganz wegfallen. +Dieses Verhalten kann aber auch unterbunden werden, wenn den Eigenschaften +@code{minimum-distance} (minimaler Abstand zwischen Silben) und +@code{minimum-length} (Wert, unterhalb von dem Bindestriche wegfallen) +andere Werte erhalten. Beide sind Eigenschaften von @code{LyricHyphen}. + +@seealso +Referenz der Interna: +@rinternals{LyricExtender}, +@rinternals{LyricHyphen}. + + +@node Techniken für die Gesangstextnotation +@subsection Techniken für die Gesangstextnotation +@translationof Techniques specific to lyrics + +@c TODO This whole section is to be reorganized. -vv + +@menu +* Mit Gesangstexten und Bezeichnern arbeiten:: +* Gesangstext vertikal verschieben:: +* Silben horizontal verschieben:: +* Gesangstext und Wiederholungen:: +* Getrennte Texte:: +@end menu + + +@node Mit Gesangstexten und Bezeichnern arbeiten +@unnumberedsubsubsec Mit Gesangstexten und Bezeichnern arbeiten +@translationof Working with lyrics and variables + +@cindex Gesangstext, Variablen +@cindex Variablen, Gesangstext + +Um Variablen zu definieren, die Gesangstext beinhalten, muss die +@code{\lyricmode}-Umgebung benutzt werden. + +@lilypond[quote,verbatim] +musicOne = \relative c'' { + c4 b8. a16 g4. f8 e4 d c2 +} +verseOne = \lyricmode { + Joy to the world, the Lord is come. +} +\score { + << + \new Voice = "one" { + \time 2/4 + \musicOne + } + \new Lyrics \lyricsto "one" { + \verseOne + } + >> +} +@end lilypond + +Dauern müssen nicht angegeben werden, wenn die Variable im Zusammenhang mit +@code{\addlyrics} oder @code{\lyricsto} aufgerufen wird. + +Für eine andere Anordnung oder kompliziertere Situationen bietet +es sich an, zuerst Systeme und Gesangstextumgebungen zu definieren, dann die +Hierarchie von Systemen und Gesangstextzeilen aufzustellen ohne den Gesangstext +selber aufzurufen, und dann den Gesangstext mit @code{\context} darunter +aufzurufen. Das stellt sicher, dass die Stimmen, die durch @code{\lyricsto} +angefordert werden, auch immer schon definiert sind. Beispielsweise: + +@lilypond[quote,verbatim] +sopranoMusic = \relative c'' { c4 c c c } +contraltoMusic = \relative c'' { a4 a a a } +sopranoWords = \lyricmode { Sop -- ra -- no words } +contraltoWords = \lyricmode { Con -- tral -- to words } + +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \sopranoMusic + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" + \new Staff { + \new Voice = "contraltos" { + \contraltoMusic + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + \sopranoWords + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + \contraltoWords + } + } + >> +} +@end lilypond + + +@seealso +Notationsreferenz: +@ref{Gesangstext vertikal verschieben}. + +Referenz der Interna: +@rinternals{LyricCombineMusic}, +@rinternals{Lyrics}. + + +@node Gesangstext vertikal verschieben +@unnumberedsubsubsec Gesangstext vertikal verschieben +@translationof Placing lyrics vertically + +@cindex Platzierung von Gesangstext +@cindex Gesangstext, Platzierung +@cindex Verschiebung von Gesangstext + +Abhängig von der Art der Musik kann der Gesangstext über oder +unter einem Notensystem oder zwischen zwei Systemen positioniert +werden. Es ist am einfachsten, den Text unter das verknüpfte +System zu positionieren, was man erreicht, indem man den +@code{Lyrics}-Kontext direkt unter dem System definiert: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Gesangstext kann auch über dem System positioniert werden, indem man eine +der beiden folgenden Methoden benutzt. Die einfachste (und bevorzugte) +Methode ist es, die gleiche Syntax wie oben gezeigt einzusetzen und die +Position des Gesangstextes explizit anzugeben: + +@lilypond[quote,verbatim] +\score { + << + \new Staff = "staff" { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics \with { alignAboveContext = "staff" } { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Alternativ kann auch ein zweistufiger Prozess benutzt werden. Zuerst +wird der Gesangstextkontext definiert (ohne jeglichen Inhalt), bevor +Stimm- und Systemkontexte definiert wurden. Dann wird der +@code{\lyricsto}-Befehl nach der Definition der Stimme, auf die er +verweist, mit @code{\context} angegeben: + +@lilypond[quote,verbatim] +\score { + << + \new Lyrics = "lyrics" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \context Lyrics = "lyrics" { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Wenn zwei Stimmen sich auf unterschiedlichen Systemen befinden, kann +der Text zwischen den Systemen platziert werden, wobei beide der Methoden +einesetzt werden können. Hier ein Beispiel für die zweite Methode: + +@lilypond[quote,verbatim] +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \relative c'' { c4 c c c } + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "contraltos" { + \relative c'' { a4 a a a } + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + Sop -- ra -- no words + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + Con -- tral -- to words + } + } + >> +} +@end lilypond + +Andere Kombinationen von Gesangstext und System können erstellt werdne, +indem man die gegebenen Beispiele modifiziert oder auch die +@rlearning{Vokalensemble}-Vorlagen im Handbuch zum Lernen heranzieht. + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{lyrics-old-spacing-settings.ly} + +@seealso +Handbuch zum Lernen: +@rlearning{Vokalensemble}. + +Notation Reference: +@ref{Kontexte aneinander ausrichten}, +@ref{Kontexte erstellen}. + + +@node Silben horizontal verschieben +@unnumberedsubsubsec Silben horizontal verschieben +@translationof Placing syllables horizontally + +@cindex Silben spreizen +@cindex Spreizen von Silben +@cindex Gesangstext, Platz zwischen Silben +@cindex Abstand vergrößern, Gesangstext + +Um den Abstand zwischen Silben zu vergrößern, kann die +@code{minimum-distance}-Eigenschaft des +@code{LyricSpace}-Objekts gesetzt werden: + +@lilypond[relative=1,verbatim,quote,ragged-right] +{ + c c c c + \override Lyrics.LyricSpace #'minimum-distance = #1.0 + c c c c +} +\addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext +} +@end lilypond + +@noindent +Damit diese Einstellung für alle Gesangtextzeilen in einer Partitur +wirkt, muss sie im @code{layout}-Block vorgenommen werden. + +@lilypond[verbatim,quote,ragged-right] +\score { + \relative c' { + c c c c + c c c c + } + \addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext + } + \layout { + \context { + \Lyrics + \override LyricSpace #'minimum-distance = #1.0 + } + } +} +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{lyrics-alignment.ly} + +@c TODO: move to LSR -vv + + +Eine Überprüfung, mit der sichergestellt wird, dass kein Text in die +Seitenränder ragt, verlangt zusätzliche Computerzeit. Um den +Notensatz etwas zu beschleunigen, kann die Überprüfung abgestellt werden: + +@example +\override Score.PaperColumn #'keep-inside-line = ##f +@end example + +Damit Gesangstext auch nicht mit Taktlinien +zusammenstößt, kann folgende Einstellung gesetzt werden: + +@example +\layout @{ + \context @{ + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + \override BarLine #'transparent = ##t + @} +@} +@end example + +@c TODO Create and add lsr example of lyricMelismaAlignment +@c It's used like this to center-align all lyric syllables, +@c even when notes are tied. -td + +@ignore +\layout +{ + \context { \Score lyricMelismaAlignment = #0 } +} +@end ignore + + + +@node Gesangstext und Wiederholungen +@unnumberedsubsubsec Gesangstext und Wiederholungen +@translationof Lyrics and repeats + +@cindex Wiederholungen und Gesangstext +@cindex Gesangstext, Wiederholungen + +@subheading Einfache Wiederholungen + +Wiederholungen von @emph{Musik} ist vollständig an anderer Stelle +behandelt, siehe @ref{Wiederholungszeichen}. Dieser Abschnitt erklärt, +wie man Gesangstext zu wiederholten Noten hinzufügt. + +Gesangstext zu einem Abschnitt, der wiederholt wird, muss in der gleichen +Wiederholungskonstruktion wie die Noten enthalten sein, wenn der Text +sich nicht ändert: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> +} +@end lilypond + +Der Text wird dann richtig erweitert, wenn die Wiederholung +mit @code{\unfoldRepeats} ausgeklappt wird: + +@lilypond[verbatim,quote] +\score { + \unfoldRepeats { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> + } +} +@end lilypond + +Wenn der wiederholte Abschnitt unterschiedlichen Text hat und +ausgeklappt werden soll, müssen alle Wörter notiert werden: + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat unfold 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + The first time words. + Sec -- ond time words. + } + } + >> +} +@end lilypond + +Wenn der Text in einer Wiederholung mit @code{volta} (also mit punktiertem +Doppelstrich) unterschiedlich ist, muss der Text jeder Wiederholung in +einem eigenen @code{Lyrics}-Kontext notiert werden, der korrekt in +parrallelen Abschnitten geschachtelt wird: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics \lyricsto "melody" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "melody" + Sec -- ond time words. + } + >> + } + >> +} +@end lilypond + +Neue Strophen können auf die gleiche Art hinzugefügt werden: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "singleVoice" { + \relative c'' { + a4 a a a + \repeat volta 3 { b4 b b b } + c4 c c c + } + } + } + \new Lyrics \lyricsto "singleVoice" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "singleVoice" + Sec -- ond time words. + } + \new Lyrics { + \set associatedVoice = "singleVoice" + The third time words. + } + >> + The end sec -- tion. + } + >> +} +@end lilypond + + +@c TODO positioning a common line of lyrics + +@subheading Wiederholungen mit alternativen Endungen + +@cindex Gesangstext, Wiederholungen mit alternativen Endungen +@cindex Wiederholung von Gesangstext bei alternativen Endungen +@cindex alternative Endungen und Gesangstext + +Wenn der Text des wiederholten Abschnitts der gleiche ist, +kann die gleiche Struktur für Gesangstext und Noten eingesetzt +werden. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- } + \alternative { { ed twice. } { ed twice. } } + } + } + >> +} +@end lilypond + +@funindex \skip +@cindex Auslassen von Noten im Gesangstext +@cindex Gesangstext, Auslassen von Noten +@cindex Überspringen von Noten im Gesangstext + +Aber wenn der wiederholte Abschnitt unterschiedlichen Text hat, +kann keine @code{repeat}-Konstruktion um den Text eingesetzt +werden und man muss manuell mit @code{\skip}-Befehlen die Noten +überspringen, auf die sich der alternative Text nicht bezieht. + +Achtung: hier darf kein Unterstrich (@code{_}) benutzt werden, um +Noten zu überspringen, weil das ein Melisma anzeigen würde und +die vorhergehende Silbe dazu veranlasst, links ausgerichtet zu +werden. + +@warning{Der @code{@bs{}skip}-Befehl muss von einer Zahl gefolgt +werden, aber diese Zahl wird ignoriert, wenn der Gesangstext +seine Dauern von einer assoziierten Melodie ableitet, die mit +@code{\addlyrics} oder @code{\lyricsto} angefügt wird. Jeder +@code{@bs{}skip}-Befehl überspringt eine einzelne Note beliebiger +Dauer, unabhängig vom Wert der auf den Befehl folgenden Zahl.} + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + The first time words. + \repeat unfold 2 { \skip 1 } + End here. + } + } + \new Lyrics { + \lyricsto "melody" { + Sec -- ond + \repeat unfold 2 { \skip 1 } + time words. + } + } + >> +} +@end lilypond + +@cindex Gesangstext und übergebundene Noten + +@funindex \repeatTie + +Wenn eine Note zu zwei oder mehr alternativen Endungen übergebunden +wird, wird ein Bindebogen benutzt, um die Note in die erste +alternative Endung überzubinden, und ein @code{\repeatTie} benutzt, +um in die zweite und alle weiteren Klammern zu überbinden. +Diese Struktur erzeugt problematische Ausrichtungen, wenn ein +Gesangstext hinzu kommt und verlängert die alternativen Klammern, +sodass es besser sein kann, die übergebundenen Noten vollständig in +die Klammern aufzunehmen, um ein besseres Resultat zu erhalten. + +Der Bindebogen erstellt ein Melisma zur ersten Klammer, aber nicht +zur zweiten und allen weiteren Klammern, sodass es nötig ist, die +automatische Erstellung von Melismen für die Klammer-Abschnitte +zu deaktivieren und manuell die Noten mit @code{\skip} zu überspringen, um eine +richtige Ausrichtung des Textes zu erreichen. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \set melismaBusyProperties = #'() + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + \unset melismaBusyProperties + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + \repeat volta 2 { Here's a __ } + \alternative { + { \skip 1 verse } + { \skip 1 sec } + } + ond one. + } + } + >> +} +@end lilypond + +Wenn @code{\unfoldRepeats} in einem Abschnitt eingesetzt wird, +der den @code{\repeatTie}-Befehl enthält, sollte der @code{\repeatTie} +entfernt werden, damit nicht beide Bindestriche ausgegeben werden. + +Wenn der wiederholte Abschnitt unterschiedlichen Text hat, kann @code{\repeat} +nicht um den Gesangstext benutzt werden, und @code{\skip}-Befehle +müssen manuell eingegeben werden: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's one + \repeat unfold 2 { \skip 1 } + more to sing. + } + } + >> +} +@end lilypond + +Wenn Sie Bindestriche und Fülllinien zwischen Wiederholung und Klammer +benutzen wollen, müssen sie manuell notiert werden: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's "a_" + \skip 1 + "_" sec -- ond one. + } + } + >> +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Kontexte am Leben halten}, +@ref{Wiederholungszeichen}. + + + +@node Getrennte Texte +@unnumberedsubsubsec Getrennte Texte +@translationof Divisi lyrics + +@cindex getrennter Gesangstext +@cindex Divisi, Gesangstext +@cindex unterschiedlicher Gesangstext +@cindex alternativer Gesangstext +@cindex Gesangstext, alternativ + +Wenn nur Text und Rhythmus von zwei Texten unterschiedlich sind, während +die Noten gleich bleiben, kann man die automatische Melisma-Erkennung +kurzzeitig ausschalten und das Melisma im Text anzeigen: + +@lilypond[quote,verbatim] +\score { + << + \new Voice = "melody" { + \relative c' { + \set melismaBusyProperties = #'() + \slurDown + \slurDashed + e4 e8 ( e ) c4 c | + \unset melismaBusyProperties + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "melody" { + We will _ + } + >> +} +@end lilypond + +Wenn sich sowohl Noten als auch Worte unterscheiden, kann es besser sein, +die unterschiedlichen Noten und den Text zu notieren, indem man +@code{Voice}-Kontexte benennt und den Text an die enstprechenden Kontexte +anhängt: + +@lilypond[verbatim,ragged-right,quote] +\score { + << + \new Voice = "melody" { + \relative c' { + << + { + \voiceOne + e4 e8 e + } + \new Voice = "splitpart" { + \voiceTwo + c4 c + } + >> + \oneVoice + c4 c | + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "splitpart" { + We will + } + >> +} +@end lilypond + + + +@node Strophen +@subsection Strophen +@translationof Stanzas + +@menu +* Strophennummern hinzufügen:: +* Lautstärkebezeichnung zu Strophen hinzufügen:: +* Sängernamen zu Strophen hinzufügen:: +* Strophen mit unterschiedlichem Rhythmus:: +* Die Strophen am Ende ausdrucken:: +* Die Strophen am Ende in mehreren Spalten drucken:: +@end menu + + +@node Strophennummern hinzufügen +@unnumberedsubsubsec Strophennummern hinzufügen +@translationof Adding stanza numbers + +@cindex Strophennummer +@cindex Nummerierung, Strophen + +Strophennummerierung kann hinzugefügt werden: + +@lilypond[quote,ragged-right,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set stanza = #"1. " + Hi, my name is Bert. +} \addlyrics { + \set stanza = #"2. " + Oh, ché -- ri, je t'aime +} +@end lilypond + +@noindent +Die Zahl wird direkt vor die erste Silbe gesetzt. + +@c TODO Create and add snippet to show how two lines of a +@c stanza can be grouped together, along these lines: +@c (might need improving a bit) -td + +@ignore +leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup +#"brace105" } + +stanzaOneOne = { + \set stanza = \markup { "1. " \leftbrace } + \lyricmode { Child, you're mine and I love you. + Lend thine ear to what I say. + + } +} + +stanzaOneThree = { +% \set stanza = \markup { " "} + \lyricmode { Child, I have no great -- er joy + Than to have you walk in truth. + + } +} + +\new Voice { + \repeat volta 2 { c'8 c' c' c' c' c' c'4 + c'8 c' c' c' c' c' c'4 } +} \addlyrics { \stanzaOneOne } + \addlyrics { \stanzaOneThree } + +@end ignore + + +@node Lautstärkebezeichnung zu Strophen hinzufügen +@unnumberedsubsubsec Lautstärkebezeichnung zu Strophen hinzufügen +@translationof Adding dynamics marks to stanzas + +Dynamikzeichen können zur Strophennummer hinzugefügt werden. +In LilyPond muss alles, was vor einer Strophe gesetzt wird, +im @code{StanzaNumber}-Objekt definiert werden, also +auch Dynamikbezeichnung. Aus technischen Gründen muss die +Strophe außerhalb von @code{lyricmode} gesetzt werden: + +@lilypond[quote,ragged-right,verbatim] +text = { + \set stanza = \markup { \dynamic "ff" "1. " } + \lyricmode { + Big bang + } +} + +<< + \new Voice = "tune" { + \time 3/4 + g'4 c'2 + } +\new Lyrics \lyricsto "tune" \text +>> +@end lilypond + + +@node Sängernamen zu Strophen hinzufügen +@unnumberedsubsubsec Sängernamen zu Strophen hinzufügen +@translationof Adding singers' names to stanzas + +@cindex Sängername +@cindex Name von Sänger + +Namen von Sängern können auch eingefügt werden. Sie werden zu Beginn +der Zeile gesetzt, ähnlich wie eine Instrumentenbezeichnung. Sie +werden mit der @code{vocalName}-Eigenschaft erstellt. Eine Kurzversion +kann mit @code{shortVocalName} definiert werden. + +@lilypond[ragged-right,quote,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set vocalName = #"Bert " + Hi, my name is Bert. +} \addlyrics { + \set vocalName = #"Ernie " + Oh, ché -- ri, je t'aime +} +@end lilypond + + +@node Strophen mit unterschiedlichem Rhythmus +@unnumberedsubsubsec Strophen mit unterschiedlichem Rhythmus +@translationof Stanzas with different rhythms + +Oft haben unterschiedliche Strophen eines Liedes leicht unterschiedliche +Silbenzahlen und werden darum auf andere Art zur Melodie gesungen. +Derartige Variationen können mit @code{\lyricsto} bewältigt werden. + +@subsubheading Melismen ignorieren + +Teilweise wird zu einer Silbe ein Melisma in einer Strophe +gesungen, während in einer anderen jede Note eine Silbe erhält. +Eine Möglichkeit ist, dass die Strophe mit mehr Text das +Melisma ignoriert. Das wird mit der +@code{ignoreMelismata}-Eigenschaft im @code{Lyrics}-Kontext +vorgenommen. + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + \slurDotted + f8.[( g16]) + a4 + } + \new Lyrics \lyricsto "lahlah" { + more slow -- ly + } + \new Lyrics \lyricsto "lahlah" { + go + \set ignoreMelismata = ##t + fas -- ter + \unset ignoreMelismata + still + } +>> +@end lilypond + +@knownissues +Anders als die meisten @code{\set}-Befehle funktioniert +@code{\set ignoreMelismata} nicht zusammen mit @code{\once}. +Es ist notwendig, explizit @code{\set} und @code{\unset} zu +verwenden, um den Text einzugrenzen, für den Melismen ignoriert +werden sollen. + +@subsubheading Silben zu Verzierungsnoten hinzufügen + +@cindex Verzierungsnoten und Gesangstext +@cindex Gesangstext und Verzierungsnoten + +Normalerweise werden Verzierungsnoten (z.B. durch @code{\grace}) bei +@code{\lyricsto} keine Silben zugeordnet. Dieses Verhalten kann +geändert werden, wie das folgende Beispiel zeigt. + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + f4 \appoggiatura a32 b4 + \grace { f16[ a16] } b2 + \afterGrace b2 { f16[ a16] } + \appoggiatura a32 b4 + \acciaccatura a8 b4 + } + \new Lyrics + \lyricsto melody { + normal + \set includeGraceNotes = ##t + case, + gra -- ce case, + after -- grace case, + \set ignoreMelismata = ##t + app. case, + acc. case. + } +>> +@end lilypond + +@knownissues +Wie bei @code{associatedVoice} muss @code{includeGraceNotes} +spätestens eine Silbe vor derjenigen gesetzt werden, die unter einer +Verzierungsnote stehen soll. Im Fall, dass eine Verzierungsnote +die erste des Musikstückes ist, kann ein @code{\with}- oder +@code{\context}-Block verwendet werden: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + \grace { c16[( d e f] } + g1) f + } + \new Lyrics \with { includeGraceNotes = ##t } + \lyricsto melody { + Ah __ fa + } +>> +@end lilypond + +@subsubheading Zu einer alternativen Melodie umschalten + +Es ist auch möglich, die Silben von verschiedenen Textzeilen an +unterschiedlichen Melodien auszurichten. Das wird mit der +@code{associatedVoice}-Eigenschaft vorgenommen: + +@lilypond[verbatim,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + << + \new Voice = "alternative" { + \voiceOne + \times 2/3 { + % show associations clearly. + \override NoteColumn #'force-hshift = #-3 + f8 f g + } + } + { + \voiceTwo + f8.[ g16] + \oneVoice + } >> + a8( b) c + } + \new Lyrics \lyricsto "lahlah" { + Ju -- ras -- sic Park + } + \new Lyrics \lyricsto "lahlah" { + % Tricky: need to set associatedVoice + % one syllable too soon! + \set associatedVoice = "alternative" % applies to "ran" + Ty -- + ran -- + no -- + \set associatedVoice = "lahlah" % applies to "rus" + sau -- rus Rex + } >> +@end lilypond + +@noindent +Der Text der ersten Strophe wird an der Stimme @qq{lahlah} +ausgerichtet, aber die zweite Strophe wird zuerst zum +@code{lahlah}-Kontext gesetzt und dann zur @code{alternative}-Melodie +für die Silben @qq{ran} bis @qq{sau}: + +@example +\set associatedVoice = "alternative" % applies to "ran" +Ty -- +ran -- +no -- +\set associatedVoice = "lahlah" % applies to "rus" +sau -- rus Rex +@end example + +@noindent +Hier ist @code{alternative} die Bezeichnung des @code{Voice}-Kontexts +mit der Triole. + +Der @code{\set associatedVoice}-Befehl tritt eine Silbe zu früh auf, +aber das ist in diesem Fall richtig. + +@warning{Der @code{\set associatedVoice}-Befehl muss eine Silbe @emph{vor} +der Silbe notiert werden, auf welcher der Wechsel zur neuen Stimme +stattfinden soll. Anders gesagt: der Wechsel der assoziierten Stimme +geschieht eine Silber später, als man erwarten würde. Das geschieht +aus technischen Gründen -- es handelt sich nicht um einen Fehler.} + + +@node Die Strophen am Ende ausdrucken +@unnumberedsubsubsec Die Strophen am Ende ausdrucken +@translationof Printing stanzas at the end + +Manchmal soll nur eine Strophe mit der Melodie gesetzt +werden und die weiteren Strophen als Text unter den Noten +hinzugefügt werden. Dazu wird der Text in einer +@code{markup}-Umgebung außerhalb der @code{\score}-Umgebung +gesetzt. Es gibt zwei Arten, die Zeilen auszurichten, +wie das Beispiel zeigt: + +@lilypond[ragged-right,verbatim,quote] +melody = \relative c' { +e d c d | e e e e | +d d e d | c1 | +} + +text = \lyricmode { +\set stanza = #"1." Ma- ry had a lit- tle lamb, +its fleece was white as snow. +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text +>> + \layout { } +} +\markup { \column{ + \line{ Verse 2. } + \line{ All the children laughed and played } + \line{ To see a lamb at school. } + } +} +\markup{ + \wordwrap-string #" + Verse 3. + + Mary took it home again, + + It was against the rule." +} +@end lilypond + + +@node Die Strophen am Ende in mehreren Spalten drucken +@unnumberedsubsubsec Die Strophen am Ende in mehreren Spalten drucken +@translationof Printing stanzas at the end in multiple columns + +Wenn in einem Lied sehr viele Strophen vorkommen, werden sie oft in +mehreren Spalten unter den Noten gesetzt. Eine nach außen versetzte Zahl +zeigt die Strophennummer an. Dieses Beispiel zeigt eine Methode, diese +Art von Notensatz zu produzieren. + +@lilypond[ragged-right,quote,verbatim] +melody = \relative c' { + c c c c | d d d d +} + +text = \lyricmode { + \set stanza = #"1." This is verse one. + It has two lines. +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text + >> + \layout { } +} + +\markup { + \fill-line { + \hspace #0.1 % moves the column off the left margin; + % can be removed if space on the page is tight + \column { + \line { \bold "2." + \column { + "This is verse two." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "3." + \column { + "This is verse three." + "It has two lines." + } + } + } + \hspace #0.1 % adds horizontal spacing between columns; + % if they are still too close, add more " " pairs + % until the result looks good + \column { + \line { \bold "4." + \column { + "This is verse four." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "5." + \column { + "This is verse five." + "It has two lines." + } + } + } + \hspace #0.1 % gives some extra space on the right margin; + % can be removed if page space is tight + } +} +@end lilypond + + +@seealso +Referenz der Interna: +@rinternals{LyricText}, +@rinternals{StanzaNumber}. + + + +@node Lieder +@subsection Lieder +@translationof Songs + +@menu +* Verweise für Lieder:: +* Liedblätter:: +@end menu + +@node Verweise für Lieder +@unnumberedsubsubsec Verweise für Lieder +@translationof References for songs + +Lieder werden normalerweise auf drei Systemen notiert: das oberste System +für den Sänger und zwei Systeme für die Klavierbegleitung darunter. Der +Gesangstext der ersten Strophe wird direkt unter dem ersten System ausgegeben. +Wenn es nur eine kleine Anzahl weiterer Strophen gibt, können sie sofort +unter der ersten gesetzt werden, aber wenn es viele Strophen gibt, werden +die zweite und alle weiteren Strophen als Text unter den Noten gesetzt. + +Alle Notationselemente, die für die Notation von Liedern benötigt werden, +werden woanders beschrieben: + +@itemize + +@item +Um das Systemlayout einzurichten, siehe @ref{Systeme anzeigen lassen}. + +@item +Zur Notation von Klaviermusik siehe +@ref{Tasteninstrumente und andere Instrumente mit mehreren Systemen}. + +@item +Zur Notation von Gesangstext zu einer Notenzeile siehe +@ref{Übliche Notation für Vokalmusik}. + +@item +Zur Platzierung des Gesangstext siehe @ref{Gesangstext vertikal verschieben}. + +@item +Zur Notation von Strophen siehe @ref{Strophen}. + +@item +Lieder werden oft auch mit Akkorden gesetzt, die als Symbole über +dem Notensystem notiert werden. Das wird in @ref{Akkorde anzeigen} +beschrieben. + +@item +Zur Notation von Bunddiagrammen für die Akkorde einer Gitarrenbegleitung +oder anderer Bundinstrumente siehe @qq{Bund-Diagramm-Beschriftung} +in @ref{Übliche Notation für Saiteninstrumente mit Bünden}. + +@end itemize + +@seealso +Handbuch zum Lernen: +@rlearning{Lieder}. + +Notationsreferenz: +@ref{Übliche Notation für Vokalmusik}, +@ref{Akkorde anzeigen}, +@ref{Systeme anzeigen lassen}, +@ref{Tasteninstrumente und andere Instrumente mit mehreren Systemen}, +@ref{Gesangstext vertikal verschieben}, +@ref{Strophen}. + +Schnipsel: +@rlsr{Vocal music}. + + +@node Liedblätter +@unnumberedsubsubsec Liedblätter +@translationof Lead sheets + +Liedblätter können erstellt werden, indem man Gesangstext mit +Akkorden im Akkord-Modus kombiniert; die Syntax ist erklärt in +@ref{Notation von Akkorden}. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + +@seealso +Notationsreferenz: +@ref{Notation von Akkorden}. + + + +@node Chormusik +@subsection Chormusik +@translationof Choral + +@cindex Oratorium +@cindex Gesangsstimmen +@cindex Chornoten +@cindex SATB + +Dieser Abschnitt zeigt Eigenheiten der Notation von Chormusik. Hierzu +gehören Hymnen, mehrstimmige Lieder, Oratorien, Kantaten usw. + +@menu +* Verweise für Chormusik:: +* Partiturbeispiele für Chormusik:: +* Geteilte Stimmen:: +@end menu + +@node Verweise für Chormusik +@unnumberedsubsubsec Verweise für Chormusik +@translationof References for choral + +Chormusik wird normalerweise auf zwei, drei oder vier Systemen +innerhalb einer @code{ChoirStaff}-Gruppe notiert. Begleitung wird +darunter als @code{PianoStaff}-Klaviersystem gesetzt, oft auch in +kleinerer Größe, wenn es sich um eine Übungshilfe für ein +@emph{a capella}-Chorwerk handelt. Die Noten jeder Stimme werden +in einem @code{Voice}-Kontext notiert, welche entweder einzeln +auf einem eigenen Notensytem notiert werden oder zu zweit auf dem gleichen +System gesetzt werden. + +Gesangstext wird in @code{Lyrics}-Kontext gesetzt, entweder unter +dem zugehörigen System oder ein Text über dem System, der andere +darunter, wenn das System die Noten von zwei Stimmen enthält. + +Einige häufig anzutreffende Sachverhalte für Chormusik sind woanders +behandelt: + +@itemize + +@item +Eine Einleitung, um SATB-Chorpartituren zu erstellen, findet sich +in @rlearning{Vierstimmige SATB-Partitur}. + +@item +Einige Vorlagen, die sich für unterschiedliche Chormusik eignen, +finden sich im Handbuch zum Lernen, siehe +@rlearning{Vokalensemble}. + +@item +Zu Information über @code{ChoirStaff} und @code{PianoStaff} siehe +@ref{Systeme gruppieren}. + +@item +Besondere Notenköpfe, wie etwa für die @qq{Sacred Harp}-Notation benutzt, +finden sich in @ref{Notenköpfe mit besonderen Formen}. + +@item +Wenn zwei Vokalstimmen sich ein System teilen, werden Hälse, Bögen usw. +der oberen Stimme nach oben gerichtet und die der unteren Stimme nach +unten. Dieses Verhalten erreicht man mit @code{\voiceOne} und @code{\voiceTwo}. +Siehe @ref{Mehrstimmigkeit in einem System}. + +@end itemize + +@predefined +@code{\oneVoice}, +@code{\voiceOne}, +@code{\voiceTwo}. +@endpredefined + +@seealso +Handbuch zum Lernen: +@rlearning{Vierstimmige SATB-Partitur}, +@rlearning{Vokalensemble}. + +Notationsreferenz: +@ref{Systeme gruppieren}, +@ref{Reihenfolge des Kontextlayouts}, +@ref{Notenköpfe mit besonderen Formen}, +@ref{Mehrstimmigkeit in einem System}. + +Referenz der Interna: +@rinternals{ChoirStaff}, +@rinternals{Lyrics}, +@rinternals{PianoStaff}. + + +@node Partiturbeispiele für Chormusik +@unnumberedsubsubsec Partiturbeispiele für Chormusik +@translationof Score layouts for choral + +Chormusik auf vier Systemen, mit oder ohne Klavierbegleitung, +wird meistens mit zwei Systemgruppen pro Seite gesetzt. Abhängig von +der Seitengröße kann das erfordern, dass die Standardgröße der +Notensysteme geändert wird. Die folgenden Einstellungen sollten +in Betracht gezogen werden: + +@itemize + +@item +Die globale Systemgröße kann verändert werden, um die Größe aller +Elemente einer Partitur zu ändern. Siehe @ref{Die Notensystemgröße einstellen}. + +@item +Die Abstände zwischen den Systemen, den Systemgruppen und den Gesangstexten +können alle einzeln eingestellt werden. Siehe @ref{Vertikale Abstände}. + +@item +Die Dimensionen der vertikalen Layout-Variablen können angezeigt werden, +um beim Anpassen der vertikalen Platzverteilung zu helfen. Das und andere +Möglichkeiten, die Noten auf weniger Seiten zu zwingen, finden sich in +@ref{Die Musik auf weniger Seiten zwingen}. + +@item +Wenn die Anzahl der Systemgruppen pro Seite zwischen einer und mehreren +wechselt, wird dies üblicherweise mit einem Trennzeichen zwichen den +Systemgruppen angezeigt. Siehe @ref{Systeme trennen}. + +@item +Zu Details für andere Eigenschaften der Seitenformatierung siehe +@ref{Seitenlayout}. + +@end itemize + +Dynamikzeichen werden in den Grundeinstellungen unter dem System notiert, +aber in Chormusik werden sie oft über dem System gesetzt um nicht mit +dem Gesangstext zu kollidieren. Der vordefiniert Befehl @code{\dynamicUp} +erledigt das für einen @code{Voice}-Kontext auf einem eigenen Notensystem. +Wenn mehrere @code{Voice}-Kontexte vorhanden sind, müsste man den +Befehl in jedem einzeln setzen. Um alle Dynamikzeichen +in einer Partitur über den Systemen zu setzen, kann eine erweiterte +Form genutzt werden, wie das Beispiel zeigt: + +@lilypond[verbatim,quote] +\score { + \new ChoirStaff << + \new Staff { + \new Voice { + \relative c'' { g4\f g g g } + } + } + \new Staff { + \new Voice { + \relative c' { d4 d d\p d } + } + } + >> + \layout { + \context { + \Score + \override DynamicText #'direction = #UP + \override DynamicLineSpanner #'direction = #UP + } + } +} +@end lilypond + + +@predefined +@code{\dynamicUp}. +@endpredefined + +@seealso +Notationsreferenz: +@ref{Die Notensystemgröße einstellen}, +@ref{Vertikale Abstände}, +@ref{Abstände anzeigen lassen}, +@ref{Abstände verändern}, +@ref{Partiturlayout}, +@ref{Eine zusätzliche Stimme für Umbrüche benutzen}, +@ref{Seitenlayout}, +@ref{Systeme trennen}, +@ref{Die Musik auf weniger Seiten zwingen}. + +Referenz der Interna: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Geteilte Stimmen +@unnumberedsubsubsec Geteilte Stimmen +@translationof Divided voices + +@cindex Stimmen, geteilt +@cindex geteilte Stimmen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-arpeggiobracket-to-make-divisi-more-visible.ly} + +@seealso +Notationsreferenz: +@ref{Ausdrucksbezeichnungen als Linien}. + + + +@node Oper und Musical +@subsection Oper und Musical +@translationof Opera and stage musicals + +Noten, Text und Dialoge von Oper und Singspielen werden normalerweise +auf eine der folgenden Weisen notiert: + +@itemize + +@item +Eine @emph{Aufführungspartitur} enthält alle Orchester- und Gesangsstimmen +sowie Libretto-Stichworte der gesprochenen Abschnitte. + +@item +@emph{Orchesterstimmen} enthalten die Noten für einzelne Instrumente +des Orchesters oder der Band. + +@item +Ein @emph{Klavierauszug} enthält alle Gesangsstimmen mit Klavierbegleitung. +Die Begleitung ist normalerweise ein Auszug der Orchesterstimmen, in dem +often das originale Instrument bezeichnet ist. Klavierauszüge enthalten +teilweise auch Regieanweisungen und Libretto-Stichworte. + +@item +Ein @emph{Vocal Book} enthält nur die Gesangstimmen (ohne Begleitung), +teilweise zusammen mit dem Libretto. + +@item +Ein @emph{Libretto} enthält die ausführlichen gesprochenen Abschnitte, +wie man sie oft in Musicals oder Operetten findet, sowie den gesungenen +Text. Normalerweise sind auch Regieanweisungen enthalten. LilyPond +kann eingesetzt werden, um Libretti zu setzen, aber es kann günstiger +sein, dafür eine andere Methode zu benutzen, da sie keine Noten enthalten. + +@end itemize + +Die Abschnitte der LilyPond-Dokumentation, die nützlich zum Setzen von +Oper und Musical sind, sind in den Verweisen unten aufgezeigt. Darauf +folgen einige Abschnitte, die bestimmte Techniken behandeln, die besonders +spezifisch für das Setzen von Singspiel-Partituren sind. + +@menu +* Verweise für Oper und Musical:: +* Namen von Figuren:: +* Musikalische Stichnoten +* Gesprochene Musik:: +* Dialog zur Musik:: +@end menu + +@node Verweise für Oper und Musical +@unnumberedsubsubsec Verweise für Oper und Musical +@translationof References for opera and stage musicals + +@itemize + +@item +Eine große Partitur hat viele gruppierte Systeme und Gesangstext. Arten, +Notensysteme zu gruppieren, finden sich in @ref{Systeme gruppieren}. +Wie Gruppen geschachtelt werden, findet sich in @ref{Verschachtelte Notensysteme}. + +@item +Die Ausgabe von leeren Notensystemen in Paritur und Klavierauszug wird +oft verhindert. Um eine komprimierte Paritur ohne leere Systeme zu erstellen +siehe @ref{Systeme verstecken}. + +@item +Wie Orchetserstimmen notiert werden, ist dokumentiert in @ref{Orchesterstimmen erstellen}. +Andere Abschnitte des Kapitels @qq{Spezielle Notation} können auch relevant +sein, abhängig von der benutzten Orchestration. Viele Instrumente sind +transponierend, siehe @ref{Transposition von Instrumenten}. + +@item +Wenn die Anzahl der Notensystemgruppen pro Seite sich ändert, wird normalerweise +zwischen zwei Systemgruppen ein Trenner gesetzt. Siehe @ref{Systeme trennen}. + +@item +Zu Einzelheiten der Seitenformatierung siehe +@ref{Seitenlayout}. + +@item +Stichworte der Dialoge und Regieanweisungen können mit Textbeschriftungen +eingefügt werden. Siehe @ref{Text}. Ausführliche Regieanweisungen können +mit Abschnitten von alleinstehenden Textbeschriftungen zwischen zwei +@code{\score}-Umgebungen gesetzt werden. Siehe @ref{Separater Text}. + +@end itemize + +@seealso +Glossar: +@rglos{Frenched score}, +@rglos{Frenched staves}, +@rglos{transposing instrument}. + +Notationsreferenz: +@ref{Systeme gruppieren}, +@ref{Systeme verstecken}, +@ref{Transposition von Instrumenten}, +@ref{Verschachtelte Notensysteme}, +@ref{Seitenlayout}, +@ref{Systeme trennen}, +@ref{Transposition}, +@ref{Orchesterstimmen erstellen}, +@ref{Text eingeben}. + +Schnipsel: +@rlsr{Vocal music}. + + +@node Namen von Figuren +@unnumberedsubsubsec Namen von Figuren +@translationof Character names + +@cindex Figuren, Namen +@cindex Namen von Figuren + +Namen von Figuren werden normalerweise links des Notensystems angezeigt, +wenn auf dem System nur die Stimme einer Figure notiert ist: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \set Staff.vocalName = \markup \smallCaps Kaspar + \set Staff.shortVocalName = \markup \smallCaps Kas. + \relative c' { + \clef "G_8" + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \set Staff.vocalName = \markup \smallCaps Melchior + \set Staff.shortVocalName = \markup \smallCaps Mel + \clef "bass" + \relative c' { + a4 a a a + a4 a a a + } + } + >> +} +@end lilypond + +Wenn zwei oder mehr Figuren sich ein System teilen, wird der Name +normalerweise über dem System immer dann gesetzt, wenn der kommende +Abschnitt von der Figur gesungen werden soll. Das kann man mit +Textbeschriftungen vornehmen. Oft wird eine bestimmte Schriftart +hierfür benutzt. + +@lilypond[quote,verbatim,relative=1] +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +\clef "bass" +a4^\markup \fontsize #1 \smallCaps Melchior +a a a +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +@end lilypond + +Wenn sehr viele Figurenwechsel vorkommen, kann es auch einfacher +sein, @qq{Instrument}-Definitionen für jeden Namen auf oberster +Dateiebene zu definieren, sodass @code{\instrumentSwitch} der Wechsel +der Figur angezeigt werden kann. + +@lilypond[quote,verbatim] +\addInstrumentDefinition #"kaspar" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Kas.") + (clefGlyph . "clefs.G") + (clefOctavation . -7) + (middleCPosition . 1) + (clefPosition . -2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar")) + (midiInstrument . "voice oohs")) + +\addInstrumentDefinition #"melchior" + #`((instrumentTransposition . ,(ly:make-pitch 0 0 0)) + (shortInstrumentName . "Mel.") + (clefGlyph . "clefs.F") + (clefOctavation . 0) + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior")) + (midiInstrument . "voice aahs")) + +\relative c' { + \instrumentSwitch "kaspar" + c4 c c c + \instrumentSwitch "melchior" + a4 a a a + \instrumentSwitch "kaspar" + c4 c c c +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Instrumentenbezeichnungen}, +@ref{Scheme-Funktionen}, +@ref{Text}, +@ref{Textbeschriftungsbefehle}. + +LilyPond Erweitern: +@rextend{Beschriftungskonstruktionen in Scheme}. + + +@node Musikalische Stichnoten +@unnumberedsubsubsec Musikalische Stichnoten +@translationof Musical cues + +@cindex Stichnoten + +Stichnoten können in Klavierauszügen, Vocal Books und Orchesterstimmen +eingesetzt werdne, um anzuziegen, was für Noten eine andere Stimme +direkt vor dem eigenen Einsatz spielt. Stichnoten und Instrumentenbezeichnungen +werden auch im Klavierauszug eingesetzt, um anzuzeigen, welches +Instrument in der Orchesterfassung den Abschnitt spielt. Das hilft +dem Dirigenten, wenn man keine große Partitur parat hat. + +Der grundlegende Mechanismus, um Stichnoten einzufügen, findet sich in +@ref{Stichnoten} und @ref{Stichnoten formatieren}. Aber wenn man viele +Stichnoten etwa in einen Klavierauszug einfügen will, um dem Dirigenten +zu helfen, muss man sehr sorgfältig mit der Positionierung der +Instrumentenbezeichnungen sein. Im folgenden Beispiel gibt es dazu +einige Hilfestellungen. + +@lilypond[quote,verbatim] +flute = \relative c'' { + s4 s4 e g +} +\addQuote "flute" { \flute } + +pianoRH = \relative c'' { + c4. g8 + % position name of cue-ing instrument just before the cue notes, + % and above the staff + s1*0^\markup { \right-align { \tiny "Flute" } } + \cueDuring "flute" #UP { g4 bes4 } +} +pianoLH = \relative c { c4 e, } + +\score { + \new PianoStaff << + \new Staff { + \pianoRH + } + \new Staff { + \clef "bass" + \pianoLH + } + >> +} +@end lilypond + +Wenn ein transponierendes Instrument zitiert wird, sollte die +Orchsterstimme die Tonart angeben, damit die Transposition der +Stichnoten automatisch geschehen kann. Das Beispiel unten zeigt, +wie man das vornimmt. Die Noten im Beipiel sind sehr tief auf +dem System, sodass @code{#DOWN} (nach unten) im @code{\cueDuring} +definiert ist, damit die Hälse nach unten zeigen. Die +Instrumentbezeichnung wird auch unter dem System platziert. Auch +die Stimme für die rechte Hand des Klaviers ist explizit definiert. +Das ist wichtig, weil die Stichnoten dieses Beispiels direkt am +Anfang des ersten Taktes beginnen und sonst die gesamte +Rechte Hand der Klaviernoten als @code{CueVoice}-(Stichnoten)-Kontext definiert +werden würde! + +@lilypond[quote,verbatim] +clarinet = \relative c' { + \transposition bes + fis4 d d c +} +\addQuote "clarinet" { \clarinet } + +pianoRH = \relative c'' { + \transposition c' + % position name of cue-ing instrument below the staff + s1*0_\markup { \right-align { \tiny "Clar." } } + \cueDuring "clarinet" #DOWN { c4. g8 } + g4 bes4 +} +pianoLH = \relative c { c4 e, } + +\score { + << + \new PianoStaff << + \new Staff { + \new Voice { + \pianoRH + } + } + \new Staff { + \clef "bass" + \pianoLH + } + >> + >> +} +@end lilypond + +Aus diesen zwei Beispielen wird klar, dass es sehr viele Probleme +bereiten kann, ausgiebig Stichnoten in einen Klavierauszug einzufügen, +und die Noten für das Klavier würden unleserlich. Im folgenden +Schnipsel wird jedoch gezeigt, wie man eine Musikfunktion definiert, +die Tipparbeit erspart und die Klaviernoten klarer macht. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{adding-orchestral-cues-to-a-vocal-score.ly} + +@seealso +Glossar: +@rglos{cue-notes}. + +Notationsreferenz: +@ref{Aligning objects}, +@ref{Direction and placement}, +@ref{Formatting cue notes}, +@ref{Quoting other voices}, +@ref{Using music functions}. + +Schnipsel: +@rlsr{Vocal music}. + +Referenz der Interna: +@rinternals{InstrumentSwitch}, +@rinternals{CueVoice}. + +@knownissues +@code{\cueDuring} fügt automatisch einen @code{CueVoice}-Kontext +ein, in dem alle Noten platziert werden. Das heißt, dass es nicht +möglich ist, überlappende Abschnitte an Stichnoten mit dieser +Technik zu haben. Überlappende Abschnitt könnten notiert +werden, indem man explizit unterschiedliche @code{CueVoice}-Kontexte +definiert und mit @code{\quoteDuring} die Noten ausschneidet und +als Stichnoten einfügt. + + + +@node Gesprochene Musik +@unnumberedsubsubsec Gesprochene Musik +@translationof Spoken music + +@cindex Parlato +@cindex Sprechgesang + +Effekte wie @qq{Parlato} bzw. @qq{Sprechgesang} erfordern, dass die Noten +ohne Tonhöhe, aber mit dem notierten Rhythmus gesprochen werden. Solche +Noten werden mit einem Kreuz als Notenkopf notiert, siehe hierzu +@ref{Besondere Notenköpfe}. + + +@c TODO add "marking-notes-on-spoken-parts" snippet -vv +@c add "showing the rhythm of a melody" snip +@c add "one staff-line notation" +@c add "improvisation" ref +@c add "lyrics independents of notes" ref + + +@node Dialog zur Musik +@unnumberedsubsubsec Dialog zur Musik +@translationof Dialogue over music + +Dialoge zur Musik wird üblicherweise über den Notensystemen gesetzt, +meistens in kursiver Schrift, wobei der Beginn der Phrasen mit einem +musikalischen Moment verklammert ist. + +@lilypond[quote,verbatim,relative=2] +a4^\markup { \smallCaps { Alex - } \italic { He's gone } } a a a +a4 a a^\markup { \smallCaps { Bethan - } \italic Where? } a +a4 a a a +@end lilypond + +Für längere Abschnitt kann es nötig sein, die Noten zu dehnen, damit +die Wörter besser passen. Es gibt keine Möglichkeit, das vollautomatisch +von LilyPond erledigen zu lassen, und einige manuelle Änderungen am +Seitenlayout sind nötig. + +Für lange Phrasen und Passagen mit viel dicht gepackten Dialogen +hilft es, einen @code{Lyrics}-Kontext zu benutzen. Der Kontext +sollte nicht mit einer Stimme verknüpft sein, sondern jeder +Abschnitt des Dialogs sollte eine spezifische Dauer haben. Wenn es +eine Pause im Dialog gibt, sollte das letzte Wort vom Rest getrennt werden +und die Dauer zwischen ihnen aufgeteilt werdne, sodass die Noten +darunter sich gut verteilen. + +Wenn sich der Dialog über mehr als eine Zeile erstreckt, ist es +nötig, manuell Umbrüche mit @code{\break} einzufügen und die Platzierung +des Dialogs anzupassen, damit er nicht in den rechten Seitenrand läuft. +Das letzte Wort des letzten Taktes einer Zeile sollte wie oben erklärt +getrennt werden. + +Hier ein Beispiel, das zeigt, wie das gesetzt werden kann. + +@c This should be a snippet, but it can't be as it needs to be +@c manually adjusted to suit the imposed line length. -td + +@lilypond[quote,verbatim,ragged-right] +music = \relative c'' { + \repeat unfold 3 { a4 a a a } +} + +dialogue = \lyricmode { + \markup { + \fontsize #1 \upright \smallCaps Abe: + "Say this over measures one and" + }4*7 + "two"4 | + \break + "and this over measure"4*3 + "three"4 | +} + +\score { + << + \new Lyrics \with { + \override LyricText #'font-shape = #'italic + \override LyricText #'self-alignment-X = #LEFT + } + { \dialogue } + \new Staff { + \new Voice { \music } + } + >> +} +@end lilypond + +@c TODO show use of \column to produce dialogue on two lines + +@seealso +Notationsreferenz: +@ref{Manuelle Silbendauer}, +@ref{Text}. + +Referenz der Interna: +@rinternals{LyricText}. + +@node Psalmengesänge und Hymnen +@subsection Psalmengesänge und Hymnen +@translationof Chants psalms and hymns + +@cindex chants +@cindex psalms +@cindex hymns +@cindex religious music + +Noten und Text für Psalmengesänge, Hymnen und Kirchengesänge haben +eine spezifische Form in jeder Kirche. Auch wenn die Form sich +unterscheidet, sind jedoch die typographischen Probleme sehr +ähnlich und werden hier gesammelt behandelt. + +@menu +* Verweise für Psalmen und Hymnen:: +* Kirchengesang notieren:: +* Einen Psalm notieren:: +* Unvollständige Takte in Hymnen:: +@end menu + +@node Verweise für Psalmen und Hymnen +@unnumberedsubsubsec Verweise für Psalmen und Hymnen +@translationof References for chants and psalms + +Wie der Gregorianische Choral in verschiedenen alten Notationsstilen +gesetzt wird, findet sich in @ref{Notation von alter Musik}. + +@seealso +Notationreferenz: +@ref{Notation von alter Musik}. + +Schnkpsel: +@rlsr{Vocal music}. + + +@node Kirchengesang notieren +@unnumberedsubsubsec Kirchengesang notieren +@translationof Setting a chant + +Moderne Kirchengesänge benutzen eine Notation mit einer wechselnden +Anzahl von Notationselementen der Notation alter Musik. Einige +dieser Elemente und Methoden werden hier vorgestellt. + +Kirchengesänge werden oft mit Viertelnoten ohne Hälse notiert, um +die Tonhöhen darzustellen, während der Rhythmus sich am Rhythmus +der gesprochenen Worte orientiert. + +@lilypond[verbatim,quote] +stemOff = { \override Staff.Stem #'transparent = ##t } + +\relative c' { + \stemOff + a'4 b c2 | +} + +@end lilypond + +Kirchengesänge verzichten üblicherweise auf die Taktstriche oder +setzen gekürzte oder punktierte Taktstriche ein. Um Taktstriche +auszulassen, kann der @code{Bar_engraver} entfert werden. + +@lilypond[verbatim,quote] +\score { + \new StaffGroup << + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +Taktstriche können auf nur für ein System entfernt werden: + +@lilypond[verbatim, quote] +\score { + \new ChoirStaff << + \new Staff + \with { \remove Bar_engraver } { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> +} +@end lilypond + +Um Taktstriche nur von einem Abschnitt zu entfernen, kann die Musik +als Kadenz notiert werdne. Wenn der Abschnitt lang ist, müssen +unsichtbare Taktstriche mit @code{\bar ""} eingefügt werden, wo +Zeilenumbrüche stattfinden sollen. + +@lilypond[verbatim,quote,relative=2] +a4 b c2 | +\cadenzaOn +a4 b c2 +a4 b c2 +\bar "" +a4 b c2 +a4 b c2 +\cadenzaOff +a4 b c2 | +a4 b c2 | +@end lilypond + +Pausen können als modifizierte Taktlinien notiert werden: + +@lilypond[verbatim, quote,relative=2] +a4 +\cadenzaOn +b c2 +a4 b c2 +\bar "'" +a4 b c2 +a4 b c2 +\bar ":" +a4 b c2 +\bar "dashed" +a4 b c2 +\bar "||" +@end lilypond + +Alternativ werden die Pausenzeichen der Notation des Gregorianischen Chorals +eingesetzt, obwohl die Noten selber modern sind. Das erreicht man durch +Veränderung des @code{\breathe}-Zeichens: + +@lilypond[verbatim,quote] +divisioMinima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaior = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaxima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +finalis = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis + \once \override BreathingSign #'Y-offset = #0 + \breathe +} + +\score { + \relative c'' { + g2 a4 g + \divisioMinima + g2 a4 g + \divisioMaior + g2 a4 g + \divisioMaxima + g2 a4 g + \finalis + } + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +Im Choral wird oft die Taktangabe und teilweise auch der Schlüssel +weggelassen. + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \layout { + \context { + \Staff + \remove Bar_engraver + \remove Time_signature_engraver + \remove Clef_engraver + } + } +} +@end lilypond + +Gesänge für Psalmen der Anglikanischen Kirche werden normalerweise +entweder @emph{einfach}, mit 7 Takten, oder @emph{doppelt}, mit +zwei 7-Takt-Phrasen, notiert. Jede Siebener-Gruppe ist in zwei +Hälften geteilt, die den Hälften jeder Strophe entsprechen, normalerweise +durch eine Doppellinie getrennt. Nur halbe und ganze Noten werden genutzt. +Der erste Takt jeder Hälfte hat immer eine ganze Note. Das ist der +@qq{Rezitationston}. Gesänge werden üblicherweise auf der Seite +zentriert. + +@lilypond[verbatim,quote] +SopranoMusic = \relative g' { + g1 | c2 b | a1 | \bar "||" + a1 | d2 c | c b | c1 | \bar "||" +} + +AltoMusic = \relative c' { + e1 | g2 g | f1 | + f1 | f2 e | d d | e1 | +} + +TenorMusic = \relative a { + c1 | c2 c | c1 | + d1 | g,2 g | g g | g1 | +} + +BassMusic = \relative c { + c1 | e2 e | f1 | + d1 | b2 c | g' g | c,1 | +} + +global = { + \time 2/2 +} + +% Use markup to center the chant on the page +\markup { + \fill-line { + \score { % centered + << + \new ChoirStaff << + \new Staff << + \global + \clef "treble" + \new Voice = "Soprano" << + \voiceOne + \SopranoMusic + >> + \new Voice = "Alto" << + \voiceTwo + \AltoMusic + >> + >> + \new Staff << + \clef "bass" + \global + \new Voice = "Tenor" << + \voiceOne + \TenorMusic + >> + \new Voice = "Bass" << + \voiceTwo + \BassMusic + >> + >> + >> + >> + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 2) + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } + } % End score + } +} % End markup +@end lilypond + +Einige andere Herangehensweisen derartige Gesänge zu notieren, finden sich +im ersten der folgenden Schnipsel. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{chant-or-psalms-notation.ly} + +Cantica und andere liturgische Texte können freier gesetzt werdne, +und können auch Elementer der Notation alter Musik benutzen. +Oft weren die Worte unter den Noten und an ihnen ausgerichtet +gesetzt. In diesem Fall werden die Noten entsprechend der +Ausdehnung des Textes und nicht der Notenlänge gesetzt. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + +@seealso +Handbuch zum Lernen: +@rlearning{Sichtbarkeit und Farbe von Objekten}, +@rlearning{Vokalensemble}. + +Notationsreferenz: +@ref{Notation von alter Musik}, +@ref{Sichtbarkeit von Objekten}, +@ref{Takte}, +@ref{Musik ohne Metrum}, +@ref{Umgebungs-Plugins verändern}, +@ref{Gregorianischen Choral setzen}. + + +@node Einen Psalm notieren +@unnumberedsubsubsec Einen Psalm notieren +@translationof Pointing a psalm + +Der Text zu einem Anglikanischen Psalm wird normalerweise in +separaten Versen zentriert under den Noten gesetzt. + +Einfache Gesänge (mit sieben Takten) werden für jeden Vers wiederholt. +Doppelte Gesänge (mit 14 Takten) werden für jeweils zwei Verse +wiederholt. Zeichen zwischen den Wörtern zeigen an, wie man sie +auf die Melodie anpasst. Jeder Vers wird in zwei Hälften geteilt. +Ein Doppelpunkt wird benutzt, um die Teilung anzuzeigen. Das +enstpricht einem doppelten Taktstrich in den Noten. Die Worte +vor dem Doppelpunkt werden zu den ersten drei Takten gesungen, die +Worte nach dem Doppelpunkt zu den vier letzten Takten. + +Einfache Taktstriche (oder in einigen Psalmen ein umgedrehtes Komma) +werden zwischen Wörtern eingefügt, um anzuzeigen, wie die Taktstriche +der Noten positioniert werden. Im Beschriftungsmodus kann ein einfacher +Taktstrich mit @code{|} notiert werden. + +@lilypond[verbatim,quote] +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing | unto the | Lord : let } + \line { us heartily rejoice in the | strength of | our } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +Andere Symbole benötigen möglicherweise Zeichen aus den @code{fetaMusic}-Schriftarten. +Siehe @ref{Schriftarten}. + +@lilypond[verbatim,quote] +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing \tick unto the \tick Lord : let } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +Wenn in einem Takt nur eine ganze Note notiert ist, werden alle Worte +dieses Taktes auf dieser Note im Sprechrhythmus gesungen. Wenn im +Takt zwei Noten notiert sind, gibt es normalerweise auch nur eine oder +zwei Silben. Wenn mehr Silben auf einen Takt gesungen werden sollen, +wird mit einem Punkt angegeben, an welcher Stelle die Note gewechselt +werden soll. + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us sing \tick unto \dot the \tick Lord : let + } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +In einigen Psaltern wird ein Asterisk benutzt, um eine Pause in einem +rezitierten Abschnitt anzuzeigen, und betonte oder verlängerte Silben +werden mit fettem Text angezeigt: + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { Today if ye will hear his voice * } + \line { + \concat { \bold hard en } + | not your | hearts : as in the pro- + } + \line { vocation * and as in the \bold day of tempt- | } + \line { -ation | in the | wilderness. } + } + } + } +} +@end lilypond + +Andere Psalter setzen einen Akzent über die Silbe, um eine Betonung +anzuzeigen: + +@lilypond[verbatim,quote] +tick = \markup { + \raise #2 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us \concat { + si \combine \tick ng + } + | unto the | Lord : let + } + \line { + us heartily \concat { + rejo \combine \tick ice + } + in the | strength of | our + } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +Der Einsatz von Beschriftung, um den Text zu zentrieren und die +Zeilen in Spalten zu formatieren, findet sich in +@ref{}. + +Die meisten dieser Elemente werden in einem der beiden Strophen +der @qq{Psalm}-Vorlage demonstriert, siehe +@rlearning{Vokalensemble}. + +@seealso +Handbuch zum : +@rlearning{Vokalensemble}. + +Notationsreferenz: +@ref{Schriftarten}, +@ref{Text formatieren}. + + +@node Unvollständige Takte in Hymnen +@unnumberedsubsubsec Unvollständige Takte in Hymnen +@translationof Partial measures in hymn tunes + +Hymnen beginnen und enden oft jede Zeile der Noten mit einem +unvollständigen Takt, sodass jede Notenzeile exakt mit eine Textzeile +übereinstimmt. Dazu setzt man den @code{\partial}-Befehl zu +Beginn der Musik ein und @code{\bar "|"} oder @code{\bar "||"}, +um die schließende Taktlinie am Ende der Zeile zu setzen. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{hymn-template.ly} + + +@node Alte Vokalmusik +@subsection Alte Vokalmusik +@translationof Ancient vocal music + +Alte Vokalmusik ist unterstützt, wie erklärt in +@ref{Notation von alter Musik}. + +@c TODO + +@c Add "Printing both the ancient and the modern clef in vocal music" snippet, +@c and "Transcription of Ancient music with incipit" snippet. -vv + +@seealso +Notationsreferenz: +@ref{Notation von alter Musik}. + diff --git a/Documentation/de/notation/wind.itely b/Documentation/de/notation/wind.itely new file mode 100644 index 0000000000..b155de2142 --- /dev/null +++ b/Documentation/de/notation/wind.itely @@ -0,0 +1,476 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + + 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" + +@c Translators: Till Paala + +@node Blasinstrumente +@section Blasinstrumente +@translationof Wind instruments + +@lilypondfile[quote]{wind-headword.ly} + +Dieser Abschnitt beinhaltet einige Notationselemente, die +bei der Notation von Blasinstrumenten auftreten. + +@menu +* Übliche Notation für Bläser:: +* Dudelsack:: +* Holzbläser:: +@end menu + + +@node Übliche Notation für Bläser +@subsection Übliche Notation für Bläser +@translationof Common notation for wind instruments + +Dieser Abschnitt erklärt Notation, die für die meisten +Blasinstrumente gültig sind. + +@menu +* Referenz für Blasinstrumente:: +* Fingersatz:: +@end menu + +@node Referenz für Blasinstrumente +@unnumberedsubsubsec Referenz für Blasinstrumente +@translationof References for wind instruments + +@cindex Blasinstrumente + +Viele Besonderheiten der Blasinstrumentenotation haben mit +Atmung und Spielart zu tun: + +@itemize + +@item Atmung kann durch Pausen oder mit Atemzeichen angezeigt werden,, +siehe @ref{Atemzeichen}. + +@item Legato kann durch Legatobögen angezeigt werden, siehe +@ref{Legatobögen}. + +@item Unterschiedliche Artikulationen, Legato, Portato, Staccato, +werden normalerweise mit Artikulationszeichen angemerkt, teilweise +auch in Verbindung mit Legatobögen, siehe +@ref{Artikulationszeichen und Verzierungen} und +@ref{Liste der Artikulationszeichen}. + +@item Flatterzunge wird angezeigt, indem ein Tremolozeichen und eine +Anmerkung für die entsprechende Note gesetzt wird. Siehe @ref{Tremolo-Wiederholung}. +@end itemize + +Es gibt auch noch weitere Aspekte der Notation, die für Blasinstrumente +relevant sein können: + +@itemize +@item Viele Instrumente sind transponierend, siehe +@ref{Transposition von Instrumenten}. + +@item Das Zug-Glissando ist charakteristisch für die Posaune, aber +auch andere Instrumente können Glissandos ausführen. Siehe +@ref{Glissando}. + +@item Obertonreihenglissandi, die auf allen Blechblasinstrumenten möglich, +aber besonders üblich für das Waldhorn sind, werden üblicherweise mit +Verzierungsnoten geschrieben. Siehe +@ref{Verzierungen}. + +@item Tonhöhenschwankungen am Ende eines Tons werden gezeigt in +@ref{Glissando zu unbestimmter Tonhöhe}. + +@item Ventil- oder Klappenschläge werden oft als Kreuznoten +dargestellt, siehe +@ref{Besondere Notenköpfe}. + +@item Holzbläser können tiefe Noten überblasen. Derartige Noten +werden als @code{flageolet}-Artikulation notiert. Siehe +@ref{Liste der Artikulationszeichen}. + +@item Die Benutzung von Dämpfern für Blechblasinstrumente wird meistens +durch Text gefordert, aber bei schnellem Wechsel bietet es sich an, +die Artikulationszeichen @code{stopped} und @code{open} zu benutzen. +Siehe +@ref{Artikulationszeichen und Verzierungen} und +@ref{Liste der Artikulationszeichen}. + +@item Gestopfte Hörner werden mit dem @code{stopped}-Artikulationszeichen +notiert. Siehe +@ref{Artikulationszeichen und Verzierungen}. + +@end itemize + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing--flageolet-mark-size.ly} + + +@seealso +Notationsreferenz: +@ref{Atemzeichen}, +@ref{Legatobögen}, +@ref{Artikulationszeichen und Verzierungen}, +@ref{Liste der Artikulationszeichen}, +@ref{Tremolo-Wiederholung}, +@ref{Transposition von Instrumenten}, +@ref{Glissando}, +@ref{Verzierungen}, +@ref{Glissando zu unbestimmter Tonhöhe}, +@ref{Besondere Notenköpfe}, + +Schnipsel: +@rlsr{Winds}. + + +@node Fingersatz +@unnumberedsubsubsec Fingersatz +@translationof Fingerings + +Alle Blasinstrumente außer der Posaune benötigen mehrere Finger, um +verschiedene Tonhöhen zu produzieren. Einige Fingersatzbeispiele +zeigen die Schnipsel unten. + +Diagramme für Holzbläser können erstellt werden nach den Anweisungen in +@ref{Holzbläserdiagramme}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingering-symbols-for-wind-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{recorder-fingering-chart.ly} + +@seealso + +Notationsreferenz: +@ref{Holzbläserdiagramme}. + +Snippets: +@rlsr{Winds}. + + +@node Dudelsack +@subsection Dudelsack +@translationof Bagpipes + +Dieser Abschnitt beinhaltet die Notation von Dudelsackmusik. + +@menu +* Dudelsack-Definitionen:: +* Dudelsack-Beispiele:: +@end menu + + +@node Dudelsack-Definitionen +@unnumberedsubsubsec Dudelsack-Definitionen +@translationof Bagpipe definitions + +@cindex Dudelsack +@cindex Sackpfeife +@cindex Schottischer Dudelsack +@funindex \taor +@funindex taor +@funindex \hideKeySignature +@funindex hideKeySignature +@funindex \showKeySignature +@funindex showKeySignature + +LilyPond besitzt spezielle Definitionen, mit der die Musik +des schottischen Hochland-Dudelsacks notiert wird. Um sie +zu benutzen, muss + +@example +\include "bagpipe.ly" +@end example + +@noindent +am Anfang der LilyPond-Quelldatei eingefügt werden. Hierdurch +können dann bestimmte Verzierungsnoten, die für die Dudelsackmusik +üblich sind, mit kurzen Befehlen eingefügt werden. So reicht etwa der +Befehl @code{\taor}, anstatt + +@example +\grace @{ \small G32[ d G e] @} +@end example + +@noindent zu schreiben. + +@file{bagpipe.ly} enthält außerdem Definitionen für Tonhöhen von +Dudelsacknoten in bestimmten Oktaven, so dass man sich nicht mehr um +@code{\relative} oder @code{\transpose} kümmern muss. + +@lilypond[ragged-right,verbatim,quote,notime] +\include "bagpipe.ly" +{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } +@end lilypond + +Musik für den Dudelsack wird in D-Dur +geschrieben (auch wenn das eigentlich nicht stimmt). Weil +das aber die einzige Tonart ist, die benutzt werden kann, werden +die Vorzeichen meistens nicht geschrieben. Damit das funktioniert, +müssen die Noten immer mit @code{\hideKeySignature} beginnen. +Wenn die Vorzeichen hingegen angezeigt werden sollen, kann das +mithilfe des Befehls @code{\showKeySignature} vorgenommen werden. + +Einige moderne Dudelsacknoten benutzen halbe Finger auf c und f, um +diese Noten zu erniedrigen. Das kann angezeigt werden mit @code{cflat} +bzw. @code{fflat}. Gleicherweise kann das piobaireachd hohe g als +@code{gflat} geschrieben werden, wenn es in leichter Musik vorkommt. + +@seealso +Schnipsel: +@rlsr{Winds}. + + +@node Dudelsack-Beispiele +@unnumberedsubsubsec Dudelsack-Beispiele +@translationof Bagpipe example + +So sieht die bekannte Melodie Amazing Grace aus, wenn man sie für +Dudelsack notiert. + +@lilypond[verbatim,quote] +\include "bagpipe.ly" +\layout { + indent = 0.0\cm + \context { \Score \remove "Bar_number_engraver" } +} + +\header { + title = "Amazing Grace" + meter = "Hymn" + arranger = "Trad. arr." +} + +{ + \hideKeySignature + \time 3/4 + \grg \partial 4 a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg e8. f16 + \dblA A2 \grg A4 + \grg A2 f8. A16 + \grg A2 \hdblf f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 e4 + \thrwd d2. + \slurd d2 + \bar "|." +} +@end lilypond + +@seealso +Schnipsel: +@rlsr{Winds}. + + +@node Holzbläser +@subsection Holzbläser +@translationof Woodwinds + +Dieser Abschnitt zeigt Notation, die spezifisch für Holzbläser ist. + +@menu +* Holzbläserdiagramme:: +@end menu + +@node Holzbläserdiagramme +@subsubsection Holzbläserdiagramme +@translationof Woodwind diagrams + +Holzbläserdiagramme können benutzt werden, um die Griffe für eine bestimmte +Note darzustellen. Diagramme gibt es für folgende Instrumente: + +@itemize +@item Piccolo +@item Flöte +@item Oboe +@item Clarinette +@item BassClarinette +@item Saxophon +@item Fagott +@item Kontrafagott +@end itemize + +@noindent +Holzbläserdiagramme werden als Beschriftung erstellt: + +@lilypond[verbatim,quote,relative=2] +c1^\markup { + \woodwind-diagram #'piccolo #'((lh . (gis)) + (cc . (one three)) + (rh . (ees))) +} +@end lilypond + +Löcher können offen, halboffen, Ring oder geschlossen sein: + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\textLengthOn +c1^\markup { + \center-column { + "Ein Viertel" + \woodwind-diagram #'flute #'((cc . (one1q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "Eineinhalb" + \woodwind-diagram #'flute #'((cc . (one1h)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "Drei Viertel" + \woodwind-diagram #'flute #'((cc . (one3q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "Ring" + \woodwind-diagram #'flute #'((cc . (oneR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ganz" + \woodwind-diagram #'flute #'((cc . (oneF two)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +Triller werden als schattierte Löcher in den Diagrammen angezeigt: + +@lilypond[verbatim,quote,relative=2] +c1^\markup { + \woodwind-diagram #'bass-clarinet + #'((cc . (threeT four)) + (lh . ()) + (rh . (b fis))) +} +@end lilypond + +Eine Vielzahl von Trillern ist möglich: + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\textLengthOn +c1^\markup { + \center-column { + "ein Viertel zu Ring" + \woodwind-diagram #'flute #'((cc . (one1qTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "Ring zu geschlossen" + \woodwind-diagram #'flute #'((cc . (oneTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "Ring zu geöffnet" + \woodwind-diagram #'flute #'((cc . (oneRT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "geöffnet zu geschlossen" + \woodwind-diagram #'flute #'((cc . (oneT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ein Viertel zu drei Viertel" + \woodwind-diagram #'flute #'((cc . (one1qT3q)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +Die Liste aller möglichen Löcher und Einstellungen eines bestimmten +Instruments kann auf der Kommandozeile oder in einer Log-Datei +angezeigt werden, auch wenn man sie nicht in der Notenausgabe anzeigen +lassen kann: + +@lilypond[verbatim,quote] + +#(print-keys-verbose 'flute) + +@end lilypond + +Neue Diagramme können erstellt werden, indem man die Muster in den Datei +@file{scm/define-woodwind-diagrams.scm} und +@file{scm/display-woodwind-diagrams.scm} befolgt. Das benötigt jedoch +Scheme-Fähigkeit und ist nicht für alle Benutzer verständlich. + + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-listing.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{graphical-and-text-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-size-of-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-key-lists.ly} + +@seealso + +Installierte Dateien: +@file{scm/define-woodwind-diagrams.scm}, +@file{scm/display-woodwind-diagrams.scm}. + +Schnipsel: +@rlsr{Winds}. + +Referenz der Interna: +@rinternals{TextScript}, +@rinternals{instrument-specific-markup-interface}. diff --git a/Documentation/de/notation/world.itely b/Documentation/de/notation/world.itely new file mode 100644 index 0000000000..82f5c5f09f --- /dev/null +++ b/Documentation/de/notation/world.itely @@ -0,0 +1,605 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 Translators: Till Paala + +@c \version "2.14.0" + +@node Weltmusik +@section Weltmusik +@translationof World music + +Dieser Abschnitt soll Besonderheiten der Notation aufzeigen, die +insbesondere relevant sind, um Musik nicht-westlicher Tradition +zu notieren. + + +@menu +* Übliche Notation für nichteuropäische Musik:: +* Arabische Musik:: +* Türkische klassische Musik:: +@end menu + + +@node Übliche Notation für nichteuropäische Musik +@subsection Übliche Notation für nichteuropäische Musik +@translationof Common notation for non-Western music + +Dieser Abschnitt zeigt, wie man Partituren erstellt, die nicht +der europäischen klassischen Musiktradition angehören. + +@menu +* Erweiterung von Notation und Stimmungssystemen:: +@end menu + +@node Erweiterung von Notation und Stimmungssystemen +@unnumberedsubsubsec Erweiterung von Notation und Stimmungssystemen +@translationof Extending notation and tuning systems + +Die klassische Standardnotation wird üblicherweise zur Notation +verschiedenster Musikarten benutzt und ist nicht auf die @qq{klassische +Musik} beschränkt. Diese Notation wird behandelt in +@ref{Tonhöhen setzen}, und die unterschiedlichen Notenbezeichnungen, +die eingesetzt werden können, finden sich in +@ref{Notenbezeichnungen in anderen Sprachen}. + +Viele nicht-europäische Musik (und auch manche europäische Volksmusik) +benutzt jedoch alternative oder erweiterte Skalen (Tonleitern), die man +nicht mit der normalen westlichen Notation notieren kann. + +In einigen Fällen wird die klassische Notation dennoch benutzt, +wobei man die Tonhöhenunterschiede implizit mitliest. Beispielsweise +arabische Musik wird mit normalen Halb- und Vierteltonversetzungszeichen +notiert und die exakte Tonhöhe (die etwas von der notierten abeweichen +kann) dann aus dem Kontext erschlossen. Italienische Notenbezeichnungen +werden normalerweise benutzt, und die Init-Datei @file{arabic.ly} stellt +eine Anzahl an Makros zur Verfügung, die die Standardnoation erweitern. +Siehe auch @ref{Arabische Musik}. + +Andere Musik brauchen erweiterte oder ganz einzigartige Notation. +Die klassische Musik der Türkei, oder ottomanische Musik, benutzt +melodische Formen, die als @notation{makamlar} bekannt sind und +deren Intervalle auf 1/9-Bruchteilen des Ganztones beruhen. Die +normale europäische Notation wird trotzdem +auf dem System mit normalen Noten benutzt mit speziellen +türkischen Versetzungszeichen. Diese Versetzungszeichen +sind in der Datei @file{makam.ly} definiert. Zu weiterer Information +über die klassische türkische Musik und Makamlar, siehe +@ref{Türkische klassische Musik}. + +Um Dateien wie @file{arabic.ly} oder @file{makam.ly} zu finden, siehe +@rlearning{Mehr Information}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{makam-example.ly} + +@seealso +Glossar: +@rglos{Common Practice Period}, +@rglos{makamlar}. + +Handbuch zum Lernen: +@rlearning{Mehr Information}. + +Notationsreferenz: +@ref{Tonhöhen setzen}, +@ref{Notenbezeichnungen in anderen Sprachen}, +@ref{Arabische Musik}, +@ref{Türkische klassische Musik}. + + +@node Arabische Musik +@subsection Arabische Musik +@translationof Arabic music + +Dieser Abschnitt zeigt Möglichkeiten, wie arabische Musik notiert +werden kann. + + +@menu +* Referenz für arabische Musik:: +* Arabische Notenbezeichnungen:: +* Arabische Tonarten:: +* Arabische Taktarten:: +* Arabische Notenbeispiele:: +* Weitere Literatur zur arabischen Musik:: +@end menu + +@node Referenz für arabische Musik +@unnumberedsubsubsec Referenz für arabische Musik +@translationof References for Arabic music + +@cindex arabische Musik +@cindex Maqam + +Arabische Musik wurde bisher vor allem mündlich tradiert. Wenn +Musik transkribiert wird, handelt es sich meistens um ein Gerüst, +auf dem der Musiker eigene Improvisationen ausführt. Mehr und mehr +wird die westliche Notation mit einigen Veränderungen benutzt, um +die arabische Musiktradition weiterzugeben und zu konservieren. + +Einige Elemente der westlichen Notation wie etwa die Transkription +von Akkorden oder eigenständige Stimmen werden für die traditionelleren +arabischen Noten nicht benötigt. Es gibt allerdings einige andere +Probleme, wie etwa die Notwendigkeit, Zwischenintervalle zu +notieren, die sich irgendwo zwischen einem Halbton und einem +Ganzton befinden. Daneben werden auch die westlichen Halb- und +Ganztöne eingesetzt. Es muss auch möglich sein, eine große +Anzahl an maqam (Modi) der arabischen Musik zu bezeichnen und zu +gruppieren. + +Üblicherweise müssen Mikrotöne in der arabischen Musik nicht +präzise notiert werden. + +Einige Bereiche, die für die arabische Notation wichtig sind, sind +an anderer Stelle behandelt: + +@itemize +@item Notenbezeichnungen und Versetzungszeichen (inklusive Vierteltöne) +können angepasst werden, wie behandelt in +@ref{Übliche Notation für nichteuropäische Musik}. + +@item Zusätzliche Taktarten können erstellt werden, siehe +@ref{Tonartbezeichnung}. + +@item Komplexe Taktarten erfordern evtl., dass Noten manuell gruppiert +werden, wie gezeigt in +@ref{Manuelle Balken}. + +@item @notation{Takasim}, rhythmisch freie Improvisationen, +können ohne Taktlinien notiert werden, siehe hierzu +@ref{Musik ohne Metrum}. + +@end itemize + + +@seealso +Notationsreferenz: +@ref{Übliche Notation für nichteuropäische Musik}, +@ref{Tonartbezeichnung}, +@ref{Manuelle Balken}. + +Schnipsel: +@rlsr{World music}. + + +@node Arabische Notenbezeichnungen +@unnumberedsubsubsec Arabische Notenbezeichnungen +@translationof Arabic note names + +@cindex arabische Notenbezeichnungen +@cindex Notenbezeichnungen, arabisch + +An der arabischen Tradition orientierte Notenbezeichnungen können sehr +land sein und eignen sich daher nicht gut für die Notation von Musik. +Sie werden nicht benutzt. Englische Notenbezeichnungen hingegen sind +in der arabischen Musikerziehung recht unbekannt, weshalb italienische +Notenbezeichnungen (@code{do, re, mi, fa, sol, la, si}) eingesetzt +werden. Modifikatoren (Versetzungszeichen) können auch benutzt werden. +Italienische Notenbezeichnungen finden sich erklärt in +@ref{Notenbezeichnungen in anderen Sprachen}, die Benutzung der normalen +europäischen Notation für nichteuropäische Musik findet sich erklärt +in @ref{Übliche Notation für nichteuropäische Musik}. + +Hier ein Beispiel der arabischen @notation{rast}-Tonleiter: + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + do re misb fa sol la sisb do sisb la sol fa misb re do +} +@end lilypond + +@cindex arabisches Halb-B Versetzungszeichen +@cindex Halb-B-Versetzungszeichen, arabische Musik + +Das Symbol für das Halb-B sieht anders aus als das Symbol, was +üblicherweise in arabischer Notation benutzt wird. Das +@code{\dwn}-Symbol, das in der Datei @file{arabic.ly} definiert +ist, kann als ein Workaround eingesetzt werden, wenn es notwendig +ist, das arabische Symbol zu benutzen. Das Aussehen des +Halb-Bs in den Vorzeichen kann mit dieser Methode nicht verändert +werden. + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + \set Staff.extraNatural = ##f + dod dob dosd \dwn dob dobsb dodsd do do +} +@end lilypond + +@seealso +Notationsreferenz: +@ref{Notenbezeichnungen in anderen Sprachen}, +@ref{Übliche Notation für nichteuropäische Musik}. + +Schnipsel: +@rlsr{World music}. + + + +@node Arabische Tonarten +@unnumberedsubsubsec Arabische Tonarten +@translationof Arabic key signatures + +@cindex arabische Tonarten +@cindex arabische Vorzeichen + +Neben den westlichen Dur- und Moll-Tonarten sind folgende +Tonarten in @file{arabic.ly} definiert: @notation{bayati}, +@notation{rast}, @notation{sikah}, @notation{iraq} und +@notation{kurd}. Diese Tonarten definieren eine kleine +Gruppe von Maqams, die weitverbreitet sind. + +Ein Maqam kann die Tonart der Gruppe benutzen, zu der er gehört, +oder die einer benachbarten Gruppe. Zusätzlich können verschiedene +Versetzungszeichen in den Noten markiert werden. + +Um also etwa die Tonart des Maqams @qq{muhayer} folgendermaßen +notiert: + +@example +\key re \bayati +@end example + +@noindent +@var{re} ist die Tonhöhe für den @qq{muhayer}-Maqam und @var{bayati} +ist die Bezeichnung des Basismaqams der Gruppe. + +Während die Vorzeichen eine Gruppe anzeigen, wird meistens der +eigentliche Maqam im Titel definiert. In diesem Beispiel müsste +also der @qq{muhayer}-Maqam im Titel erscheinen. + +Andere Maqams derselben Bayati-Gruppe, wie in der Tabelle unten +gezeigt ((bayati, hussaini, saba und ushaq) können auf die gleiche +Weise notiert werden. Sie sind alle Variationen des +Grundmaqams Bayati. Sie unterscheiden sich üblicherweise vom +grundlegenden Maqam in ihrem oberen Tetrachord oder in bestimmten +Einzelheiten, die aber nicht ihre eigentliche Qualität verändern. + +Der andere Maqam der gleichen Gruppe (Nawa) ist mit bayati durch +eine Modulation verwandt, deren Grundton in der Tabelle angezeigt +wird, wenn es sich um einen Maqam handelt, der eine Modulation +eines anderen Maqams darstellt. Nawa kann folgenderweise +notiert werden: + +@example +\key sol \bayati +@end example + +In der arabischen Musik ist ein Begriff wie bayati, der eine +Maqam-Gruppe bezeichnet, gleichzeitig auch selber ein Maqam, +meistens der häufigste dieser Gruppe. + +Hier ist eine Möglichkeit, Maqams zu gruppieren, womit die +häufigsten Maqams bestimmten Vorzeichen zugeordnet werden: + +@multitable @columnfractions 0.1 0.1 0.1 0.6 +@headitem Maqam-Gruppe + @tab Vorzeichen (@code{\key}) + @tab Finalis + @tab Andere Maqams der Gruppe (Finalis) +@item ajam + @tab major + @tab sib + @tab jaharka (fa) +@item bayati + @tab bayati + @tab re + @tab hussaini, muhayer, saba, ushaq, nawa (sol) +@item hijaz + @tab kurd + @tab re + @tab shahnaz, shad arban (sol), hijazkar (do) +@item iraq + @tab iraq + @tab sisb + @tab - +@item kurd + @tab kurd + @tab re + @tab hijazkar kurd (do) +@item nahawand + @tab minor + @tab do + @tab busalik (re), farah faza (sol) +@item nakriz + @tab minor + @tab do + @tab nawa athar, hisar (re) +@item rast + @tab rast + @tab do + @tab mahur, yakah (sol) +@item sikah + @tab sikah + @tab misb + @tab huzam +@end multitable + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + +@seealso +Glossar: +@rglos{maqam}, +@rglos{bayati}, +@rglos{rast}, +@rglos{sikah}, +@rglos{iraq}, +@rglos{kurd}. + +Notationsreferenz: +@ref{Tonartbezeichnung}. + +Handbuch zum Lernen: +@rlearning{Versetzungszeichen und Tonartbezeichnung (Vorzeichen)}. + +Referenz der Interna: +@rinternals{KeySignature}. + +Schnipsel: +@rlsr{World music}, +@rlsr{Pitches}. + + +@node Arabische Taktarten +@unnumberedsubsubsec Arabische Taktarten +@translationof Arabic time signatures + +@cindex Arabische Taktarten +@cindex Taktarten, arabisch +@cindex Semai-Form +@cindex taqasim + +Einige klassische Formen der arabischen und türkischen Musik +wie etwa @notation{Semai} haben ungewöhnliche Taktarten wie +etwa 10/8. Das kann dazu führen, dass die automatische +Bebalkung der Noten nicht zu dem Ergebnis kommt, welches in +der üblichen Notation dieser Musik eingesetzt wird. Die Noten +werden nicht anhand einer Taktzeit, sondern anhand von Kriterien +gruppiert, die man schwer mit einer automatischen Balkenfunktion +erfassen kann. Das kann umgangen werden, indem die automatische +Bebalkung ausgeschaltet wird und die Balken explizit gesetzt werden. +Auch wenn es nicht darauf ankommen sollte, eine schon notierte +Musik nachzuahmen, ist es in vielen Fällen dennoch erforderlich, +die Bebalkung anzupassen und/oder zusammengesetzte Taktarten +zu benutzen. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{arabic-improvisation.ly} + + +@seealso +Glossar: +@rglos{semai}, +@rglos{taqasim}. + +Notationsreferenz: +@ref{Manuelle Balken}, +@ref{Automatische Balken}, +@ref{Musik ohne Metrum}, +@ref{Automatische Versetzungszeichen}, +@ref{Einstellung von automatischen Balken}, +@ref{Taktangabe}. + +Schnipsel: +@rlsr{World music}. + + +@node Arabische Notenbeispiele +@unnumberedsubsubsec Arabische Notenbeispiele +@translationof Arabic music example + +@cindex Beispiel der arabischen Musik +@cindex arabische Musik, Beispiel +@cindex Vorlage, arabische Musik + +Hier eine Vorlage, welche den Beginn eines türkischen @notation{Semai} +benutzt, der in der arabischen Musikerziehung oft herangezogen +wird, um Besonderheiten der arabischen Musiknotation, wie +etwa Zwischenintervalle und ungewöhnliche Modi, zu illustrieren. + +@lilypond[quote,verbatim] +\include "arabic.ly" +\score { + \relative re' { + \set Staff.extraNatural = ##f + \set Staff.autoBeaming = ##f + \key re \bayati + \time 10/8 + + re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 + re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb + fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb + do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 + } + \header { + title = "Semai Muhayer" + composer = "Jamil Bek" + } +} +@end lilypond + + +@seealso +Schnipsel: +@rlsr{World music}. + + +@node Weitere Literatur zur arabischen Musik +@unnumberedsubsubsec Weitere Literatur zur arabischen Musik +@translationof Further reading for Arabic music + +@enumerate + +@item +@emph{The Music of the Arabs} von Habib Hassan Touma (Amadeus Press, 1996) +enthält eine Beschreibung von Maqams und Methoden zu ihrer +Gruppierung. + +Es gibt auch einige Internetseiten, die Maqams erklären und +teilweise auch Klangdateien zur Verfügung stellen: + +@itemize @bullet +@item +@uref{http://www.maqamworld.com/} +@item +@uref{http://www.turath.org/} +@end itemize + +Die Maqam-Gruppierungen unterscheiden sich in einigen Details, auch +wenn die allgemeinen Kriterien weithin anerkannt sind: +gemeinsame untere Tetrachorde sowie Modulation. + +@item +Es gibt keine Übereinstimmung darüber, wie die Vorzeichen für +bestimmte Maqams angegeben werden sollen. Oft wird eine +Vorzeichenart für eine ganze Maqam-Gruppe verwendet, anstatt +dass jeder Maqam eigene Vorzeichen hätte. + +Lehrbücher für @emph{Oud}, die arabische Laute, folgender Autoren +enthalten Beispiele vor allem türkischer und arabischer Kompositionen: + +@itemize @bullet +@item +Charbel Rouhana +@item +George Farah +@item +Ibrahim Ali Darwish Al-masri +@end itemize +@end enumerate + + +@node Türkische klassische Musik +@subsection Türkische klassische Musik +@translationof Turkish classical music + +Dieser Abschnitt zeigt Probleme, die bei der Notation von klassischer +türkischer Musik auftreten können. + +@menu +* Verweise für türkische klassische Musik:: +* Türkische Notenbezeichnungen:: +@end menu + + +@node Verweise für türkische klassische Musik +@unnumberedsubsubsec Verweise für türkische klassische Musik +@translationof References for Turkish classical music + +@cindex Türkische Musik +@cindex Osmanische Musik +@cindex Komma-Intervalle +@cindex makam +@cindex makamlar + +Türkische klassische Musik wurde im Osmanischen Reich während einer Periode +entwickelt, die ungefähr zur gleichen Zeit der westlichen klassischen Musik +stattfand. Diese lebendige und starke Tradition wird bis heute mit ihren +eigenen kompositorischen Formen, Musiktheorie und Aufführungsstilen weitergeführt. +Unter den Eigenheiten dieser Tradition befinden sich die Benutzung von +Mikrointervallen basierend auf @qq{Kommas} von 1/9-Tönen, aus denen melodische +Formen konstruiert werden, welche man als @notation{makam} (Pl. @notation{makamlar}) +bezeichnet. + +Einige Probleme der Notation türkischer klassischer Musik sind woanders behandelt: + +@itemize +@item +Notenbezeichnungen und Versetzungszeichen finden sich in +@ref{Übliche Notation für nichteuropäische Musik}. + +@end itemize + + +@node Türkische Notenbezeichnungen +@unnumberedsubsubsec Türkische Notenbezeichnungen +@translationof Turkish note names + +@cindex türkische Notenbezeichnungen +@cindex makam + +Tonhöhen der türkischen klassischen Musik haben traditionell einmalige +Bezeichnungen, und weil die Tonhöhen auf 1/9-Tönen basieren, unterscheiden +sich die Intervalle von makamlar deutlich von den Intervallen westlicher +klassischer Musik: @notation{koma} (1/9 eines Ganztons), +@notation{eksik bakiye} (3/9), @notation{bakiye} (4/9), +@notation{kücük mücenneb} (5/9), @notation{büyük mücenneb} +(8/9), @notation{tanîni} (ein Ganzton) und +@notation{artık ikili} (12/9 oder 13/9 eines Ganztons). + +Es bietet sich an, die normalen westlichen Noten auf dem Notensystem zu +benutzen (also c, d, e @dots) angrereichert mit besonderen Versetzungszeichen, +die die Noten um 1/9, 4/9, 5/9 und 8/9 eines Ganztons erhöhen oder +erniedrigen. Diese Versetzungszeichen sind definiert in der Datei +@file{makam.ly}. + +Die folgende Tabelle zeigt + +@itemize + +@item +die Bezeichnung dieser besonderen Versetzungszeichen + +@item +die Endung, die an die Note gehängt werden muss und + +@item +die Tonhöhenveränderung als Bruch eines Ganztones. + +@end itemize + +@quotation +@multitable {@b{büyük mücenneb (Kreuz)}} {@b{Endung}} {@b{Tonhöhenveränderung}} +@headitem Versetzungszeichen + @tab Endung @tab Tonhöhenveränderung + +@item büyük mücenneb (Kreuz) + @tab -bm @tab +8/9 +@item kücük mücenneb (Kreuz) + @tab -k @tab +5/9 +@item bakiye (Kreuz) + @tab -b @tab +4/9 +@item koma (Kreuz) + @tab -c @tab +1/9 + +@item koma (B) + @tab -fc @tab -1/9 +@item bakiye (B) + @tab -fb @tab -4/9 +@item kücük mücenneb (B) + @tab -fk @tab -5/9 +@item büyük mücenneb (B) + @tab -fbm @tab -8/9 +@end multitable +@end quotation + +Eine weitergehende Erklärung der Notation nichteuropäischer Musik findet +sich in @ref{Übliche Notation für nichteuropäische Musik}. + +@seealso +Glossar: +@rglos{makam}, +@rglos{makamlar}. + +Notationsreferenz: +@ref{Übliche Notation für nichteuropäische Musik}. diff --git a/Documentation/de/search-box.ihtml b/Documentation/de/search-box.ihtml new file mode 100644 index 0000000000..694200e8b5 --- /dev/null +++ b/Documentation/de/search-box.ihtml @@ -0,0 +1,21 @@ + + + +
+ + + +
diff --git a/Documentation/de/texidocs/GNUmakefile b/Documentation/de/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/de/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/texidocs/accordion-discant-symbols.texidoc b/Documentation/de/texidocs/accordion-discant-symbols.texidoc new file mode 100644 index 0000000000..feb5c0b30d --- /dev/null +++ b/Documentation/de/texidocs/accordion-discant-symbols.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Symbole für Akkordeon-Diskantregister" + texidocde = " +Diskantregister für Akkordeon können mit @code{\\markup} dargestellt werden. +Die vertikale Position der einzelnen Elemente werden mit @code{\\raise} +angepasst. +" diff --git a/Documentation/de/texidocs/adding-ambitus-per-voice.texidoc b/Documentation/de/texidocs/adding-ambitus-per-voice.texidoc new file mode 100644 index 0000000000..3a15dc562b --- /dev/null +++ b/Documentation/de/texidocs/adding-ambitus-per-voice.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie +manuell verschoben werden, um Zusammenstöße zu verhindern. + +" +doctitlede = "Ambitus pro Stimme hinzufügen" diff --git a/Documentation/de/texidocs/adding-bar-lines-to-chordnames-context.texidoc b/Documentation/de/texidocs/adding-bar-lines-to-chordnames-context.texidoc new file mode 100644 index 0000000000..a51b9fd299 --- /dev/null +++ b/Documentation/de/texidocs/adding-bar-lines-to-chordnames-context.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der +@code{Bar_engraver} hinzugefügt werden. + +" + doctitlede = "Tatkstriche in einen ChordNames-Kontext hinzufügen" diff --git a/Documentation/de/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc b/Documentation/de/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc new file mode 100644 index 0000000000..0470dbe48d --- /dev/null +++ b/Documentation/de/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + + + texidocde = " +Hier wird gezeigt, wie man das Hinzufügen von vielen Orchsterstichnoten +zu einem Klavierauszug hinzufügen kann. Die musikalische Funktion +@code{\\cueWhile} braucht vier Argumente: Die Noten, von denen die +Stichnoten formatiert werden sollen, definiert durch @code{\\addQuote}, +die Bezeichnung, die mit den Noten angegeben werden soll, dann entweder +@code{#UP} (hoch) oder @code{#DOWN} (runter) zur Angabe von entweder +@code{\\voiceOne} mit der Bezeichnung über dem System oder @code{\\voiceTwo} +mit der Bezeichnung unter dem System, und schließlich die Klaviermusik, +die parallel zu den Stichnoten gespielt werden soll. Die Bezeichnung des +Stichnoteninstruments wird links der Stichnoten positioniert. Viele +Abschnitte können zitiert werden, aber sie dürfen sich nicht überlappen. + +" + doctitlede = "Orchesterstichnoten zu einem Klavierauszug hinzufügen" + diff --git a/Documentation/de/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/Documentation/de/texidocs/adding-volta-brackets-to-additional-staves.texidoc new file mode 100644 index 0000000000..662b4ec4f1 --- /dev/null +++ b/Documentation/de/texidocs/adding-volta-brackets-to-additional-staves.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Der @code{Volta_engraver} befindet sich im @code{Score}-Kontext und Klammern +werden deshalb nur auf dem obersten System dargestellt. Das kann umgangen +werden, indem man den @code{Volta_engraver} zu dem @code{Staff}-Kontext +hinzufügt, in dem die Klammern zusätzlichen vorkommen sollen. Siehe auch +das \"Volta multi staff\"-Schnipsel. + +" + doctitlede = "Volta-Klammern zu zusätzlichen Systemen hinzufügen" diff --git a/Documentation/de/texidocs/additional-voices-to-avoid-collisions.texidoc b/Documentation/de/texidocs/additional-voices-to-avoid-collisions.texidoc new file mode 100644 index 0000000000..68b4dfd09c --- /dev/null +++ b/Documentation/de/texidocs/additional-voices-to-avoid-collisions.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche +Stimmen notwendig, um Zusammenstöße zwischen den Noten zu vermeiden. +Wenn mehr als vier parallele Stimmen benötigt werden, können zusätzliche +Stimmen definiert werden, indem eine Variable mit der Funktion +@code{context-spec-music} definiert wird. + +" + doctitlede = "Zusätzliche Stimmen, um Zusammenstöße zu vermeiden" diff --git a/Documentation/de/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/Documentation/de/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc new file mode 100644 index 0000000000..b2db35660b --- /dev/null +++ b/Documentation/de/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um +das Aussehen von unbestimmten Glissandi anzupassen. + +" + doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen" diff --git a/Documentation/de/texidocs/aligning-bar-numbers.texidoc b/Documentation/de/texidocs/aligning-bar-numbers.texidoc new file mode 100644 index 0000000000..bcdd7059ce --- /dev/null +++ b/Documentation/de/texidocs/aligning-bar-numbers.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern sind standardmäßig links an ihrem Ursprungsobjekt +ausgerichtet. Das ist normalerweise die linke Ecke einer Linie oder, +wenn die Nummern innerhalb einer Zeile gesetzt werden, auf der +linken Seite eines Taktstrichs. Die Nummern können auch +direkt über dem Taktstrich positioniert werden oder rechts vom +Taktstrich gesetzt werden. + +" + doctitlede = "Taktnummern ausrichten" + + diff --git a/Documentation/de/texidocs/aligning-marks-with-various-notation-objects.texidoc b/Documentation/de/texidocs/aligning-marks-with-various-notation-objects.texidoc new file mode 100644 index 0000000000..8bf8b06cb7 --- /dev/null +++ b/Documentation/de/texidocs/aligning-marks-with-various-notation-objects.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn angegeben, können Textzeichen auch an anderen Objekten als Taktstrichen +ausgerichtet werden. Zu diesen Objekten gehören @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature} und +@code{time-signature}. + +In diesem Fall werden die Zeichen horizontal über dem Objekt zentriert. +Diese Ausrichtung kann auch geändert werden, wie die zweite Zeile +des Beispiels zeigt. In einer Partitur mit vielen Systemen sollte +diese Einstellung für alle Systeme gemacht werden. + +" + + doctitlede = "Zeichen an verschiedenen Notationsobjekten ausrichten" diff --git a/Documentation/de/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/Documentation/de/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc new file mode 100644 index 0000000000..c9ea47f3c5 --- /dev/null +++ b/Documentation/de/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems +gesetzt. Das kann aber verändert werden. + +" + doctitlede = "Fingersatz auch innerhalb des Systems setzen" diff --git a/Documentation/de/texidocs/ambitus-with-multiple-voices.texidoc b/Documentation/de/texidocs/ambitus-with-multiple-voices.texidoc new file mode 100644 index 0000000000..c4c55571d3 --- /dev/null +++ b/Documentation/de/texidocs/ambitus-with-multiple-voices.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext +hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem +Fall, dass mehrere Stimmen sich im gleichen System befinden. +" + doctitlede = "Ambitus mit vielen Stimmen" diff --git a/Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc new file mode 100644 index 0000000000..337ce8018d --- /dev/null +++ b/Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + + texidocde = " +Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen +Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur +halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die +Länge von Pausen an. +" + + doctitlede = "Vorlage für Alte Notation -- moderne Transkription des gregorianischen Chorals" diff --git a/Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc new file mode 100644 index 0000000000..9cb14b5e33 --- /dev/null +++ b/Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein +Incipit an den Anfang des Stückes zu stellen, damit klar ist, wie +Tempo und Schlüssel in der Originalnotation gesetzt waren. Während +heutzutage Musiker an Taktlinien gewöhnt sind, um Rhythmen schneller +zu erkennen, wurden diese in der Mensuralmusik nicht verwendet. +Tatsächlich ändern sich die Rhythmen auch oft alle paar Noten. Als +ein Kompromiss werden die Notenlinien nicht auf dem System, sondern +zwischen den Systemen geschrieben. +" + +doctitlede = "Vorlage für Alte Notation -- moderne Transkription von Mensuralmusik" + diff --git a/Documentation/de/texidocs/anglican-psalm-template.texidoc b/Documentation/de/texidocs/anglican-psalm-template.texidoc new file mode 100644 index 0000000000..4132cb7281 --- /dev/null +++ b/Documentation/de/texidocs/anglican-psalm-template.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 144cd434d02e6d90b2fb738eeee99119a7c5e1d2 + + texidocde = " +Diese Vorlage zeigt eine Art, anglikanische Psalmengesänge zu setzen. Hier +wird auch gezeigt, wie Strophen als einfacher Text unter den Noten hinzugefügt +werden können. Zwei Strophen sind in unterschiedlicher Weise notiert um mehr +Möglichkeiten darzustellen. +" + doctitlede = "Vorlage für anglikanischen Psalm" + diff --git a/Documentation/de/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/Documentation/de/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc new file mode 100644 index 0000000000..481b187972 --- /dev/null +++ b/Documentation/de/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc @@ -0,0 +1,21 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Notenkopfstile basierend auf der Tonleiterstufe erstellen" + texidocde = " +Die @code{shapeNoteStyles}-(NotenFormenStile)-Eigenschaft kann benutzt +werden, um verschiedene Notenstile für jeden Schritt der Tonleiter +zu definieren (vorgegeben von der Tonart oder der @qq{tonic} +(Tonika)-Eigenschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen, +welche beliebig sein können (geometrische Ausdrücke wie @code{triangle} +(Dreieck), @code{cross} (Kreuz) und @code{xcircle} (X-Kreis) sind erlaubt) +oder basierend auf einer alten amerikanischen Notensatztradition (einige +lateinische Notenbezeichnungen sind auch erlaubt). + +Um alte amerikanische Liederbücher zu imitieren, gibt es einige +vordefinierte Notenstile wie etwa @code{\\aikenHeads} (im Stil von Aiken) +oder @code{\\sacredHarpHeads} (im Stil der Sacred Harp-Tradition). + +Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und +eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den +harmonischen Funktionen und dem Notenstil verloren geht. + +" diff --git a/Documentation/de/texidocs/arabic-improvisation.texidoc b/Documentation/de/texidocs/arabic-improvisation.texidoc new file mode 100644 index 0000000000..26a6ba7b57 --- /dev/null +++ b/Documentation/de/texidocs/arabic-improvisation.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Bei Improvisation oder @emph{taqasim}, die zeitlich frei gespielt +werden, kann die Taktart ausgelassen werden und @code{\cadenzaOn} +kann eingesetzt werden. Es kann nötig sein, den Versetzungszeichenstil +anzupassen, weil sonst die Versetzungszeichen nur einmal ausgegeben +werden, da keine Taktlinien gesetzt sind. Hier ein Beispiel, wie +der Beginn einer @emph{hijaz}-Improvisation aussehen könnte: + +" + + doctitlede = "Arabische Improvisation" diff --git a/Documentation/de/texidocs/beam-endings-in-score-context.texidoc b/Documentation/de/texidocs/beam-endings-in-score-context.texidoc new file mode 100644 index 0000000000..46181bf8c6 --- /dev/null +++ b/Documentation/de/texidocs/beam-endings-in-score-context.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Balkenenderegeln, die im @code{Score}-Kontext definiert werden, wirken +sich auf alle Systeme aus, können aber auf @code{Staff}- und +@code{Voice}-Ebene neu verändert werden: + +" + doctitlede = "Balkenenden auf Score-Ebene" + + diff --git a/Documentation/de/texidocs/beam-grouping-in-7-8-time.texidoc b/Documentation/de/texidocs/beam-grouping-in-7-8-time.texidoc new file mode 100644 index 0000000000..707de7e299 --- /dev/null +++ b/Documentation/de/texidocs/beam-grouping-in-7-8-time.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Es gibt keine automatischen Balkengruppen für 7/8-Takte. Wenn diese +Taktart benötigt wird, müssen die Gruppierungen definiert werden. Um +beispielsweise alle Noten in 2/8-3/8-2/8 aufzuteilen, müssen Balkenenden +für 2/8 und 5/8 definiert werden: + +" + doctitlede = "Balkengruppen für 7/8-Takte" + diff --git a/Documentation/de/texidocs/beams-across-line-breaks.texidoc b/Documentation/de/texidocs/beams-across-line-breaks.texidoc new file mode 100644 index 0000000000..b4d9eacabc --- /dev/null +++ b/Documentation/de/texidocs/beams-across-line-breaks.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert +werden. + +" + doctitlede = "Balken über Zeilenumbrüche" + + diff --git a/Documentation/de/texidocs/changing--flageolet-mark-size.texidoc b/Documentation/de/texidocs/changing--flageolet-mark-size.texidoc new file mode 100644 index 0000000000..076ba0789f --- /dev/null +++ b/Documentation/de/texidocs/changing--flageolet-mark-size.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um den @code{\\flageolet}-Kreis kleiner zu machen, kann diese +Scheme-Funktion eingesetzt werden. + +" + doctitlede = "\\flageolet-Zeichen verkleinern" diff --git a/Documentation/de/texidocs/changing-beam-knee-gap.texidoc b/Documentation/de/texidocs/changing-beam-knee-gap.texidoc new file mode 100644 index 0000000000..35416c4fc5 --- /dev/null +++ b/Documentation/de/texidocs/changing-beam-knee-gap.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Balken mit Hälsen in unterschiedliche Richtungen werden automatisch +erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses +Verhalten kann durch die @code{auto-knee-gap}-Eigenschaft beeinflusst +werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer +ist als der Wert von @code{auto-knee-gap} plus der Dicke des Balkens +(was von der Notendauer und der Neigung des Balkens abhängt). Der +Standardwert von @code{auto-knee-gap} ist 5.5 Notensystemabstände. + +" + doctitlede = "Balken für weit auseinander liegende Noten ändern" + + diff --git a/Documentation/de/texidocs/changing-chord-separator.texidoc b/Documentation/de/texidocs/changing-chord-separator.texidoc new file mode 100644 index 0000000000..815e9606e7 --- /dev/null +++ b/Documentation/de/texidocs/changing-chord-separator.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann +beliebiger Text sein. + +" + doctitlede = "Akkordsymboltrenner verändern" diff --git a/Documentation/de/texidocs/changing-form-of-multi-measure-rests.texidoc b/Documentation/de/texidocs/changing-form-of-multi-measure-rests.texidoc new file mode 100644 index 0000000000..77b4b59f12 --- /dev/null +++ b/Documentation/de/texidocs/changing-form-of-multi-measure-rests.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa- +und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten +wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von +zehn kann geändert werden, indem man die @code{expand-limit}-Eigenschaft +setzt: +" + doctitlede = "Die Erscheinung von Pausentakten ändern" + + diff --git a/Documentation/de/texidocs/changing-partcombine-texts.texidoc b/Documentation/de/texidocs/changing-partcombine-texts.texidoc new file mode 100644 index 0000000000..276c60d400 --- /dev/null +++ b/Documentation/de/texidocs/changing-partcombine-texts.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn Stimmen automatisch kombiniert werden, kann der Text, der für +Solo- und Unisono-Stellen ausgegeben wird, geändert werden: + +" + doctitlede = "Partcombine-Text ändern" diff --git a/Documentation/de/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/Documentation/de/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc new file mode 100644 index 0000000000..6ce47ed267 --- /dev/null +++ b/Documentation/de/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Der Text, der für Crescendo und Decrescendo gesetzt wird, kann geändert +werden, indem man die Eigenschaften @code{crescendoText} und +@code{decrescendoText} verändert. Der Stil des Streckers kann auch +geändert werden, indem die @code{'style}-Eigenschaft des +@code{DynamicTextSpanner} beeinflusst wird. Der Standardwert ist +@code{'hairpin}, andere Möglichkeiten sind @code{'line}, @code{'dashed-line} +und @code{'dotted-line}. +" + doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern" diff --git a/Documentation/de/texidocs/changing-the-breath-mark-symbol.texidoc b/Documentation/de/texidocs/changing-the-breath-mark-symbol.texidoc new file mode 100644 index 0000000000..014fa9d1e9 --- /dev/null +++ b/Documentation/de/texidocs/changing-the-breath-mark-symbol.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das Schriftzeichen für das Atemzeichen kann verändert werden, indem +die Text-Eigenschaft des @code{BreathingSign}-Layoutobjekts mit einer +beliebigen Textbeschriftung definiert wird. + +" + doctitlede = "Das Atemzeichen-Symbol verändern" diff --git a/Documentation/de/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc b/Documentation/de/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc new file mode 100644 index 0000000000..2493f439d2 --- /dev/null +++ b/Documentation/de/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen, +je nach den Einstellungen der @code{figuredBassAlterationDirection} und +@code{figuredBassPlusDirection}-Eigenschaften. + +" + doctitlede = "Positionen von Generalbass-Alterationszeichen verändern" diff --git a/Documentation/de/texidocs/changing-the-size-of-woodwind-diagrams.texidoc b/Documentation/de/texidocs/changing-the-size-of-woodwind-diagrams.texidoc new file mode 100644 index 0000000000..d94accec22 --- /dev/null +++ b/Documentation/de/texidocs/changing-the-size-of-woodwind-diagrams.texidoc @@ -0,0 +1,9 @@ +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde=" +Die Größe und Dicke der Holzbläserdiagramme kann geändert werden. +" + + doctitlede = "Größe von Holzbläserdiagrammen ändern" + diff --git a/Documentation/de/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/Documentation/de/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc new file mode 100644 index 0000000000..0bea1fb960 --- /dev/null +++ b/Documentation/de/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den +Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden: + +" + + doctitlede = "Das Tempo ohne Metronom-Angabe verändern" diff --git a/Documentation/de/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc b/Documentation/de/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc new file mode 100644 index 0000000000..ee4e099d06 --- /dev/null +++ b/Documentation/de/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Der @code{\\time}-Befehl verändert die Eigenschaften +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +und @code{measureLength} im @code{Timing}-Kontext, welcher normalerweise +gleichbedeutend mit @code{Score} ist. Wenn der Wert von +@code{timeSignatureFraction} verändert wird, wird die neue +Taktart ausgegeben, ohne die anderen Eigenschaften zu beeinflussen: + +" + doctitlede = "Die Taktart verändern ohne die Bebalkung zu beeinflussen" + + diff --git a/Documentation/de/texidocs/changing-the-tuplet-number.texidoc b/Documentation/de/texidocs/changing-the-tuplet-number.texidoc new file mode 100644 index 0000000000..f11c7a07a2 --- /dev/null +++ b/Documentation/de/texidocs/changing-the-tuplet-number.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer +dargestellt, wie er dem @code{\\times}-Befehl übergeben wird. +Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl +vollständig unterdrücken. + +" + doctitlede = "Die Zahl der N-tole verändern" + + diff --git a/Documentation/de/texidocs/chant-or-psalms-notation.texidoc b/Documentation/de/texidocs/chant-or-psalms-notation.texidoc new file mode 100644 index 0000000000..c400e00dfc --- /dev/null +++ b/Documentation/de/texidocs/chant-or-psalms-notation.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde = " +Diese Form der Notation wird benutzt für die Notation von Psalmen, in denen +die Strophen nicht die gleiche Länge haben. + +" + doctitlede = "Psalmennotation" + diff --git a/Documentation/de/texidocs/chord-glissando-in-tablature.texidoc b/Documentation/de/texidocs/chord-glissando-in-tablature.texidoc new file mode 100644 index 0000000000..aa4a660e5c --- /dev/null +++ b/Documentation/de/texidocs/chord-glissando-in-tablature.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Gleiten von Akkorden kann sowohl im normalen Notensystem als auch in einer +Tabulatur notiert werden. Saitennummern werden für Tabulaturen +benötigt, weil die automatische Saitenberechnung unterschiedlich für +Akkorde und einzelne Noten funktioniert und +@code{\\chordGlissando} zieht Linien zwischen einzelnen Noten. +" + doctitlede = "Akkordglissando in Tabulaturen" + diff --git a/Documentation/de/texidocs/chord-name-exceptions.texidoc b/Documentation/de/texidocs/chord-name-exceptions.texidoc new file mode 100644 index 0000000000..9559da9252 --- /dev/null +++ b/Documentation/de/texidocs/chord-name-exceptions.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Eigenschaft @code{chordNameExceptions} kann benutzt werden, um eine +Liste an besonderen Notationen für bestimmte Akkorde zu speichern. + +" + doctitlede = "Akkordsymbolausnahmen" diff --git a/Documentation/de/texidocs/chord-name-major7.texidoc b/Documentation/de/texidocs/chord-name-major7.texidoc new file mode 100644 index 0000000000..5178211b46 --- /dev/null +++ b/Documentation/de/texidocs/chord-name-major7.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 134d9cb2e14ae624aec6fa2dd1630e284807dc42 + texidocde = " +Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert werden. + +" + + doctitlede = "Akkordbezeichnung maj7" + + diff --git a/Documentation/de/texidocs/chordchanges-for-fretboards.texidoc b/Documentation/de/texidocs/chordchanges-for-fretboards.texidoc new file mode 100644 index 0000000000..080720f50f --- /dev/null +++ b/Documentation/de/texidocs/chordchanges-for-fretboards.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Bunddiagramme können definiert werden, sodass sie nur angezeigt werden, +wenn der Akkord sich ändert oder eine neue Zeile anfängt. + +" + + doctitlede = "Akkordänderungen für Bunddiagramme" diff --git a/Documentation/de/texidocs/combining-two-parts-on-the-same-staff.texidoc b/Documentation/de/texidocs/combining-two-parts-on-the-same-staff.texidoc new file mode 100644 index 0000000000..ea29d7cb57 --- /dev/null +++ b/Documentation/de/texidocs/combining-two-parts-on-the-same-staff.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Funktion, die Stimmen kombiniert (also der @code{\\partcombine}-Befehl) +ermöglicht die Kombination unterschiedlicher Stimmen auf einem +System. Textanweisungen wie \"solo\" oder \"a2\" werden automatisch +hinzugefügt. Wenn man sie entfernen will, muss man die Eigenschaft +@code{printPartCombineTexts} auf falsch setzen. Für Klavierauszüge +muss natürlich kein \"solo\"/\"a2\" usw. hinzugefügt werden, man +sollte sie also ausschalten. Wenn aber Solo-Stellen in einem +Klavierauszug oder einer Chorpartitur angezeigt werden, ist es besser, +normale Polyphonie zu verwenden, weil so die Solostellen angezeigt +werden, auch wenn der Text des Stimmenkombinierers ausgeschaltet ist. + +Der Schnipsel zeigt drei Möglichkeiten, Stimmen auf einem System zu +kombinieren: Standardpolyphonie, @code{\\partcombine} ohne Text und +@code{\\partcombine} mit Text. + +" + doctitlede = "Zwei Stimmen auf einem System kombinieren" diff --git a/Documentation/de/texidocs/compound-time-signatures.texidoc b/Documentation/de/texidocs/compound-time-signatures.texidoc new file mode 100644 index 0000000000..96f02c8b02 --- /dev/null +++ b/Documentation/de/texidocs/compound-time-signatures.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ungerade Taktarten werden (wie etwa \"5/8\") werden oft als zusammengesetzte +Taktarten interpretiert (bspw. \"3/8 + 2/8\"), in welchen zwei oder mehr +Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, +indem entsprechende Taktarten gesetzt werden und die automatische +Bebalkung angepasst wird. + +" + doctitlede = "Zusammengesetzte Taktarten" + + diff --git a/Documentation/de/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/Documentation/de/texidocs/conducting-signs,-measure-grouping-signs.texidoc new file mode 100644 index 0000000000..ed03fad04b --- /dev/null +++ b/Documentation/de/texidocs/conducting-signs,-measure-grouping-signs.texidoc @@ -0,0 +1,17 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Optionen, mit denen die Balken in einem Takt gruppiert werden, sind +durch die Scheme-Funktion @code{set-time-signature} erhältlich, die +drei Argumente braucht: Die Zahl der Taktschläge, die Länge des +Schlages und die interne gruppieren von Balken in dem Takt. Wenn der +@code{Measure_grouping_engraver} hinzugefügt worden ist, erstellt +diese Funktion auch @code{MeasureGrouping}-(Taktgruppen)-Zeichen. Derartige +Zeichen erleichtern das Lesen von rhythmisch komplexer Musik. In dem +Beispiel ist der 9/8-Takt in 2, 2, 2 und 3 aufgeteilt. Das wird +der @code{set-time-signature}-Funktion als das dritte Argument mitgegeben: +@code{'(2 2 2 3)}: + +" + doctitlede = "Dirigierzeichen, Taktgruppenzeichen" + + diff --git a/Documentation/de/texidocs/contemporary-glissando.texidoc b/Documentation/de/texidocs/contemporary-glissando.texidoc new file mode 100644 index 0000000000..9f0e03daeb --- /dev/null +++ b/Documentation/de/texidocs/contemporary-glissando.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem +eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird. + +" + doctitlede = "Moderne Glissandi" diff --git a/Documentation/de/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/Documentation/de/texidocs/controlling-the-placement-of-chord-fingerings.texidoc new file mode 100644 index 0000000000..be5969146d --- /dev/null +++ b/Documentation/de/texidocs/controlling-the-placement-of-chord-fingerings.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Position von Fingersatzzahlen kann exakt kontrolliert werden. + +" + doctitlede = "Position von Fingersatz in Akkorden kontrollieren" diff --git a/Documentation/de/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/Documentation/de/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc new file mode 100644 index 0000000000..86b2a2fff7 --- /dev/null +++ b/Documentation/de/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Die vertikale Anordnung von Beschriftungen wird mit der +@code{'script-priority}-Eigenschaft kontrolliert. Um so kleiner die +Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In +diesem Beispiel hat das @code{TextScript}-Objekt (das Kreuz) zuerst +die niedrigste Priorität, wird also auch am niedrigsten in dem ersten +Beispiel gesetzt. Im zweiten Fall hat der Praller (das @code{Script}) +die niedrigste Priorität, darum wird er am nächsten zum System gesetzt. +Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge +anhand ihres Auftretens in der Quelldatei entschieden. + +" + doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren" diff --git a/Documentation/de/texidocs/creating-a-delayed-turn.texidoc b/Documentation/de/texidocs/creating-a-delayed-turn.texidoc new file mode 100644 index 0000000000..e206506025 --- /dev/null +++ b/Documentation/de/texidocs/creating-a-delayed-turn.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das +Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die +@code{outside-staff-priority}-Eigenschaft muss auf falsch (@code{#f}) +gesetzt werden, weil sie sonst über die Eigenschaft +@code{avoid-slur property} dominieren würde. Der Wert von @code{halign} +wird benutzt, um den Doppelschlag horizontal zu positionieren. +" + + doctitlede = "Einen Doppelschlag mit Vorhalt erstellen" diff --git a/Documentation/de/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/Documentation/de/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc new file mode 100644 index 0000000000..ef889fd7b9 --- /dev/null +++ b/Documentation/de/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ein Arpeggio kann zwischen Noten aus unterschiedlichen Stimmen auf demselben +System gezogen werden, wenn der @code{Span_arpeggio_engraver} in den +@code{Staff}-Kontext verschoben wird: + +" + doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen" diff --git a/Documentation/de/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/Documentation/de/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc new file mode 100644 index 0000000000..7bdd8aa607 --- /dev/null +++ b/Documentation/de/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Arpeggio über mehrere Systeme können in anderen Kontexten als dem +@code{PianoStaff} erstellt werden, wenn der @code{Span_arpeggio_engraver} +in den @code{Score}-Kontext eingefügt wird. + +" + doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten" diff --git a/Documentation/de/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/Documentation/de/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc new file mode 100644 index 0000000000..8383ace231 --- /dev/null +++ b/Documentation/de/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio +zwischen beiden Systemen zu verbinden, indem die +@code{PianoStaff.connectArpeggios}-Eigenschaft gesetzt wird. + + +" + doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen" diff --git a/Documentation/de/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/Documentation/de/texidocs/creating-metronome-marks-in-markup-mode.texidoc new file mode 100644 index 0000000000..1041e8740b --- /dev/null +++ b/Documentation/de/texidocs/creating-metronome-marks-in-markup-mode.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Neue Metronombezeichnungen können als Textbeschriftung erstellt werden, +aber sie ändern nicht das Tempo für die MIDI-Ausgabe. + +" + + doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen" diff --git a/Documentation/de/texidocs/customizing-fretboard-fret-diagrams.texidoc b/Documentation/de/texidocs/customizing-fretboard-fret-diagrams.texidoc new file mode 100644 index 0000000000..26be09ecd6 --- /dev/null +++ b/Documentation/de/texidocs/customizing-fretboard-fret-diagrams.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Eigenschaften von Bunddiagrammen können in +@code{'fret-diagram-details} verändert werden. Einstellungen mit +dem @code{\override}-Befehl werden dem @code{FretBoards.FretBoard}-Objekt +zugewiesen. Genauso wie @code{Voice} ist auch @code{FretBoards} ein +Kontext der niedrigsten Ebene, weshalb der Kontext auch in dem Befehl +weggelassen werden kann. + +" + doctitlede = "Bunddiagramme anpassen" diff --git a/Documentation/de/texidocs/customizing-markup-fret-diagrams.texidoc b/Documentation/de/texidocs/customizing-markup-fret-diagrams.texidoc new file mode 100644 index 0000000000..8720219e10 --- /dev/null +++ b/Documentation/de/texidocs/customizing-markup-fret-diagrams.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Bunddiagramme können mit der Eigenschaft @code{'fret-diagram-details} +angepasst werden. Bunddiagramme, die als Textbeschriftung eingefügt werden, +können Veränderungen im @code{Voice.TextScript}-Objekt oder direkt in der +Beschriftung vorgenommen werden. + +" + doctitlede = "Anpassung von Beschriftungs-Bunddiagrammen" diff --git a/Documentation/de/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc b/Documentation/de/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc new file mode 100644 index 0000000000..804d66abd0 --- /dev/null +++ b/Documentation/de/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Richtung von Hälsen auf der mittleren Linie kann mit der @code{Stem}-Eigenschaft +@code{neutral-direction} gesetzt werden. + +" + doctitlede = "Standardrichtung für Hälse auf der Mittellinie" diff --git a/Documentation/de/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc b/Documentation/de/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc new file mode 100644 index 0000000000..39954f0735 --- /dev/null +++ b/Documentation/de/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc @@ -0,0 +1,17 @@ +%% Translation of GIT committish: f23429bc5cfa9d141ef7b4509afc46c140308a1e + texidocde = " +Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden +neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel +zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte +Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro. + +Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden +werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden +kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, +aber nicht in den Noten angezeigt. + +Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen +enthalten. Das soll in der Zukunft verbessert werden. + +" + doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen" diff --git a/Documentation/de/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/Documentation/de/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc new file mode 100644 index 0000000000..25dfcf2657 --- /dev/null +++ b/Documentation/de/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn nur ein System einer Systemgruppe vom Typ @code{ChoirStaff} oder +@code{StaffGroup} angezeigt wird, wird die Klammer zu Beginn normalerweise +nicht gesetzt. Das kann verändert werden, indem man die entsprechende +Eigenschaft verändert. + +Bei Systemen wie @code{PianoStaff} und @code{GrandStaff}, die mit einer +geschweiften Klammer beginne, muss eine andere Eigenschaft verändert werden, +wie das zweite Beispiel zeigt. + +" + doctitlede = "Klammer anzeigen, wenn nur ein System gesetzt wird" diff --git a/Documentation/de/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc b/Documentation/de/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc new file mode 100644 index 0000000000..278519245c --- /dev/null +++ b/Documentation/de/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " + In Werken des frühen 20. Jahrhundert, angefangen mit Schönberg, Berg + und Webern (die zweite Wiener Schule), wird jeder Ton der + Zwölftonleiter als gleichwertig erachtet, ohne hierarchische + Ordnung. Deshalb wird in dieser Musik für jede Note ein Versetzungszeichen + ausgegeben, auch für unalterierte Tonhöhen, um das neue Verständnis + der Musiktheorie und Musiksprache zu verdeutlichen. + + Dieser Schnipsel zeigt, wie derartige Notationsregeln zu erstellen sind. + " + doctitlede = "Versetzungszeichen für jede Note im Stil der Zwölftonmusik" diff --git a/Documentation/de/texidocs/dynamics-custom-text-spanner-postfix.texidoc b/Documentation/de/texidocs/dynamics-custom-text-spanner-postfix.texidoc new file mode 100644 index 0000000000..64a4654982 --- /dev/null +++ b/Documentation/de/texidocs/dynamics-custom-text-spanner-postfix.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde = "Die Nachstellung funktioniert für eigene Crescendo-Textstrecker. +Die Strecker sollten an der ersten Note eines Taktes beginnen. Man muss +-\mycresc benutzen, sonst wird der Beginn des Streckers der nächsten Note +zugewiesen. + +" + doctitlede = "Eigene Dynamiktextspanner nachgestellt" + diff --git a/Documentation/de/texidocs/dynamics-text-spanner-postfix.texidoc b/Documentation/de/texidocs/dynamics-text-spanner-postfix.texidoc new file mode 100644 index 0000000000..f113140dbc --- /dev/null +++ b/Documentation/de/texidocs/dynamics-text-spanner-postfix.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde = "Die \cresc, \dim und \decresc Strecker können umdefiniert werden, +um nachgestellt zu funktionieren und einen Textstrecker zu produzieren. Eigene +Strecker können auch einfach definiert werden. Klammer- und Textcrescendi können +einfach vermischt werden. \< und \> erstellen normalerweise Klammern, \cresc +usw. dagegen normalerweise Textspanner. + +" + doctitlede = "Dynamiktextstrecker nachgestellt" + + diff --git a/Documentation/de/texidocs/engraving-ties-manually.texidoc b/Documentation/de/texidocs/engraving-ties-manually.texidoc new file mode 100644 index 0000000000..8ab3b8caa9 --- /dev/null +++ b/Documentation/de/texidocs/engraving-ties-manually.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Überbindungen können manuell gesetzt werden, indem man die +@code{tie-configuration}-Eigenschaft des @code{TieColumn}-Objekts +beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in +Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben, +-1 = nach unten). + +" + doctitlede = "Bindebögen manuell setzen" + + diff --git a/Documentation/de/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/Documentation/de/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc new file mode 100644 index 0000000000..1cc0075b17 --- /dev/null +++ b/Documentation/de/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede +der N-tolen innerhalb der Klammern nach dem @code{\\times}-Befehl +dauert. Auf diese Art können etwa viele Triolen nacheinander mit nur +einem @code{\\times}-Befehl geschrieben werden. + +Im Beispiel sind zwei Triolen zu sehen, obwohl @code{\\times} nur +einmal geschrieben wurde. + +Mehr Information über @code{make-moment} gibt es in \"Verwaltung der Zeiteinheiten\". + +" + doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen" + + diff --git a/Documentation/de/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc b/Documentation/de/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc new file mode 100644 index 0000000000..91741ef1aa --- /dev/null +++ b/Documentation/de/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern +und Fingersatz für die rechte Hand. + +" + doctitlede = "Fingersatz, Saitennummern und Fingersatz für die rechte Hand" diff --git a/Documentation/de/texidocs/flat-flags-and-beam-nibs.texidoc b/Documentation/de/texidocs/flat-flags-and-beam-nibs.texidoc new file mode 100644 index 0000000000..f37ad89144 --- /dev/null +++ b/Documentation/de/texidocs/flat-flags-and-beam-nibs.texidoc @@ -0,0 +1,30 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Gerade Fähnchen an einzelnen Noten und überstehende Balkenenden bei +bebalkten Notengruppen sind möglich mit einer Kombination aus +@code{stemLeftBeamCount}, @code{stemRightBeamCount} und Paaren von +@code{[]}-Balkenbegrenzungen. + +Für gerade Fähnchen, die nach rechts zeigen, kann @code{[]} eingesetzt +werden und @code{stemLeftBeamCount} auf Null gesetzt werden (wie +Bsp. 1). + +Für gerade Fähnchen, die nach links zeigen, muss @code{stemRightBeamCount} +eingesetzt werden (Bsp. 2). + +Für überstehende Balkenenden nach rechts muss @code{stemRightBeamCount} +auf einen positiven Wert gesetzt werden, für Balkenenden, die nach links +zeigen benutzt man @code{stemLeftBeamCount} (Bsp. 3). + +Manchmal können einzelne Noten, die von Pausen umgeben sind, auch Balkenenden +in beide Richtungen tragen. Das geschieht mit @code{[]}-Klammern (Bsp. 4). + +(@code{\\set stemLeftBeamCount} entspricht immer dem Befehl +@code{\\once \\set}. Anders gesagt müssen die Einstellungen immer wieder +wiederholt werden und die Fähnchen des letzten Sechzehntels im letzten +Beispiel haben nichts mit dem @code{\\set}-Befehl zwei Noten vorher zu tun.) + +" + doctitlede = "Gerade Fähnchen und überstehende Balkenenden" + + diff --git a/Documentation/de/texidocs/forcing-horizontal-shift-of-notes.texidoc b/Documentation/de/texidocs/forcing-horizontal-shift-of-notes.texidoc new file mode 100644 index 0000000000..0c99eb17ac --- /dev/null +++ b/Documentation/de/texidocs/forcing-horizontal-shift-of-notes.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere +Position manuell eingestellt werden. Die Einheiten hier sind +Notenlinienzwischenräume. + +" + doctitlede = "Horizontale Verschiebung von Noten erzwingen" diff --git a/Documentation/de/texidocs/formatting-lyrics-syllables.texidoc b/Documentation/de/texidocs/formatting-lyrics-syllables.texidoc new file mode 100644 index 0000000000..55510c24a0 --- /dev/null +++ b/Documentation/de/texidocs/formatting-lyrics-syllables.texidoc @@ -0,0 +1,7 @@ +%%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Textbeschriftungsmodus kann eingesetzt werden, um individuelle Silben im Gesangstext +zu formatieren. + +" + doctitlede = "Silben im Gesangstext formatieren" diff --git a/Documentation/de/texidocs/fretboards-alternate-tables.texidoc b/Documentation/de/texidocs/fretboards-alternate-tables.texidoc new file mode 100644 index 0000000000..dcccc9634d --- /dev/null +++ b/Documentation/de/texidocs/fretboards-alternate-tables.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + texidocde = " +Alternative Bunddiagrammtabellen können erstellt werden. Sie können benutzt +werden, um alternative Bunddiagramme für einen bestimmten Akkord zu haben. + +Damit eine alternative Bunddiagrammentabelle benutzt werden kann, muss die +Tabelle zuerst erstellt werden. Dann werden die Bunddiagramme zur Tabelle +hinzugefügt. + +Die erstellte Bunddiagrammtabelle kann auch leer sein, oder sie kann aus +einer existierenden Tabelle kopiert werden. + +Die Tabelle, die eingesetzt wird, um vordefinierte Bunddiagramme anzuzeigen, +wird mit der Eigenschaft @code{\\predefinedDiagramTable} ausgewählt. +" + + doctitlede = "Alternative Bunddiagrammtabellen" + diff --git a/Documentation/de/texidocs/fretted-string-harmonics-in-tablature.texidoc b/Documentation/de/texidocs/fretted-string-harmonics-in-tablature.texidoc new file mode 100644 index 0000000000..2793c05994 --- /dev/null +++ b/Documentation/de/texidocs/fretted-string-harmonics-in-tablature.texidoc @@ -0,0 +1,5 @@ +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Flageolett für Bundinstrumente: +" + doctitlede = "Flageolett von Bundinstrumenten in einer Tabulatur" diff --git a/Documentation/de/texidocs/graphical-and-text-woodwind-diagrams.texidoc b/Documentation/de/texidocs/graphical-and-text-woodwind-diagrams.texidoc new file mode 100644 index 0000000000..829b0e176d --- /dev/null +++ b/Documentation/de/texidocs/graphical-and-text-woodwind-diagrams.texidoc @@ -0,0 +1,12 @@ +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde=" +In vielen Fällen können die nicht in der mittleren Reihe befindlichen +Löcher dargestellt werden, indem man die Lochbezeichnung oder +graphische Zeichen benutzt. + +" + + doctitlede = "Graphische und Text-Holzbläserdiagramme" + diff --git a/Documentation/de/texidocs/grid-lines--changing-their-appearance.texidoc b/Documentation/de/texidocs/grid-lines--changing-their-appearance.texidoc new file mode 100644 index 0000000000..129fbe6a18 --- /dev/null +++ b/Documentation/de/texidocs/grid-lines--changing-their-appearance.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften +geändert werden. + +" + doctitlede = "Gitternetzlinien: Aussehen verändern" diff --git a/Documentation/de/texidocs/grouping-beats.texidoc b/Documentation/de/texidocs/grouping-beats.texidoc new file mode 100644 index 0000000000..47fd08eb64 --- /dev/null +++ b/Documentation/de/texidocs/grouping-beats.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Balkengruppen können mit der @code{beatGrouping}-Eigenschaft geändert +werden: + +" + doctitlede = "Notengruppen" + + diff --git a/Documentation/de/texidocs/guitar-strum-rhythms.texidoc b/Documentation/de/texidocs/guitar-strum-rhythms.texidoc new file mode 100644 index 0000000000..664321e83e --- /dev/null +++ b/Documentation/de/texidocs/guitar-strum-rhythms.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In Gitarrennotation kann neben Melodie, Akkordbezeichnungen und +Bunddiagrammen auch der Schlagrhythmus angegeben werden. + +" + doctitlede = "Schlagrhythmus für Gitarren" + + diff --git a/Documentation/de/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/Documentation/de/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc new file mode 100644 index 0000000000..7bddc9c697 --- /dev/null +++ b/Documentation/de/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie +gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf folgende Weise +unterdrückt werden: + +" + doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken" diff --git a/Documentation/de/texidocs/hymn-template.texidoc b/Documentation/de/texidocs/hymn-template.texidoc new file mode 100644 index 0000000000..d40b1e48a6 --- /dev/null +++ b/Documentation/de/texidocs/hymn-template.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde = " +Dieses Beispiel zeigt eine Möglichkeit, eine Hymnusmelodie zu setzen, in +der jede Zeiel mit einem Auftakt beginnt und einem unvollständigen +Takt abschließt. Es zeigt auch, wie man die Strophen als allein stehenden +Text unter die Noten hinzufügt. + +" + doctitlede = "Hymnus-Vorlage" + diff --git a/Documentation/de/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc b/Documentation/de/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc new file mode 100644 index 0000000000..630a0b3c07 --- /dev/null +++ b/Documentation/de/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen +Systemen mit der selben Hand gespielt werden sollen. Damit das notiert +werden kann, muss der @code{PianoStaff}-Kontext so eingestellt werden, +dass er Arpeggios über Systeme hinweg akzeptiert und die Form der Arpeggios +muss auf eine Klammer eingestellt werden. + +(Debussy, Les collines d’Anacapri, T. 65) + +" + doctitlede = "Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen" diff --git a/Documentation/de/texidocs/inserting-a-caesura.texidoc b/Documentation/de/texidocs/inserting-a-caesura.texidoc new file mode 100644 index 0000000000..baf907dee7 --- /dev/null +++ b/Documentation/de/texidocs/inserting-a-caesura.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft +des @code{BreathingSign}-Objektes verändert wird. Ein gekrümmtes +Zäsurzeichen ist auch möglich. +" + doctitlede = "Eine Zäsur einfügen" diff --git a/Documentation/de/texidocs/isolated-percent-repeats.texidoc b/Documentation/de/texidocs/isolated-percent-repeats.texidoc new file mode 100644 index 0000000000..67641a02ae --- /dev/null +++ b/Documentation/de/texidocs/isolated-percent-repeats.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird +erreicht, indem man eine Ganztaktpause notiert und ihre Ausgabeform +ändert: + +" + doctitlede = "Isolierte Prozentwiederholungen" diff --git a/Documentation/de/texidocs/jazz-combo-template.texidoc b/Documentation/de/texidocs/jazz-combo-template.texidoc new file mode 100644 index 0000000000..7b7ce18ab8 --- /dev/null +++ b/Documentation/de/texidocs/jazz-combo-template.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung: +Alle Instrumente sind in @code{\key c \major} (C-Dur) notiert. Das bezieht sich +auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn +sich die Noten innerhalb eines @code{\transpose}-Abschnitts befinden. + +" + + doctitlede = "Vorlage für Jazz-Combo" diff --git a/Documentation/de/texidocs/lyrics-alignment.texidoc b/Documentation/de/texidocs/lyrics-alignment.texidoc new file mode 100644 index 0000000000..eaecc5cce7 --- /dev/null +++ b/Documentation/de/texidocs/lyrics-alignment.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + + texidocde = " +Die horizontale Ausrichtung von Gesangstext kann eingestellt werden, indem +man die @code{self-alignment-X}-Eigenschaft des @code{LyricText}-Objekts +verändert. @code{#-1} bedeutet links, @code{#0} bedeutet mittig und @code{#1} +bedeutet rechts, man kann aber genauso gut auch @code{#LEFT}, @code{#CENTER} +und @code{#RIGHT} benutzen. + +" + doctitlede = "Ausrichtung von Gesangstext" + diff --git a/Documentation/de/texidocs/lyrics-old-spacing-settings.texidoc b/Documentation/de/texidocs/lyrics-old-spacing-settings.texidoc new file mode 100644 index 0000000000..7fcf4452bd --- /dev/null +++ b/Documentation/de/texidocs/lyrics-old-spacing-settings.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + doctitlede = "Textverteilung wie in Version 2.12 für neuere Versionen" + + texidocde = " +Die vertikale Maschine für die Platzverteilung wurde für die Version 2.14 +verändert. Das kann dazu führen, dass Gesangstext unterschiedlich +verteilt wird. Es ist möglich, die Eigenschaften der @code{Lyric}- +und @code{Staff}-Kontexte so einzustellen, dass die Platzverteilung +wie in der Version 2.12 arbeitet. +" + diff --git a/Documentation/de/texidocs/makam-example.texidoc b/Documentation/de/texidocs/makam-example.texidoc new file mode 100644 index 0000000000..1f7dc8a72d --- /dev/null +++ b/Documentation/de/texidocs/makam-example.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Makam ist eine türkische Melodie, in der 1/9-Tonabstände +eingesetzt werden. Sehen Sie sich die Initialisierungsdatei +@file{makam.ly} für weiter Information zu Tonhöhenbezeichnungen +und Alterationen an (siehe +Handbuch zum Lernen @version{}, 4.6.3 Weitere Information zu +Hinweisen, wo diese Datei gespeichert ist)." + + doctitlede = "Makam-Beispiel" diff --git a/Documentation/de/texidocs/making-slurs-with-complex-dash-structure.texidoc b/Documentation/de/texidocs/making-slurs-with-complex-dash-structure.texidoc new file mode 100644 index 0000000000..a89df8c799 --- /dev/null +++ b/Documentation/de/texidocs/making-slurs-with-complex-dash-structure.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Legatobögen können mit einem komplizierten Strichelmuster +gesetzt werden, indem die @code{dash-definition}-Eigenschaft +definiert wird. @code{dash-definition} ist eine Liste bestehend +aus @code{dash-elements}-Elementen. Ein @code{dash-element} ist +eine Liste an Parametern, die das Strichverhalten für einen +Abschnitt des Legatobogens definieren. + +Der Bogen wird nach dem Bezierparameter t definiert, welcher +von 0 am linken Ende des Bogens zu 1 am rechten Ende des Bogens +reicht. @code{dash-element} ist eine Liste @code{(start-t stop-t dash-Unterbrechung dash-Abschnitt)}. Die Region des Bogens von @code{start-t} +bis @code{stop-t} hat eine Unterbrechung von @code{dash-Unterbrechung} +von jedem @code{dash-Abschnitt}-Schwarzabschnitt. @code{dash-Abschnitt} ist in Notenlinienzwischenräumen definiert. +@code{dash-Abschnitt} ist auf 1 für einen durchgehenden Bogen +gesetzt. +" + doctitlede = "Legatobögen mit kompliziertem Strichelmuster + definieren" diff --git a/Documentation/de/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/Documentation/de/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc new file mode 100644 index 0000000000..4bf0f0062d --- /dev/null +++ b/Documentation/de/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker +gezeichnet werden (z. B. die Mittellinie, oder um den Schlüssel hervorzuheben). +Das ist möglich, indem man zusätzliche Linien sehr nahe an der Linie, die +dicker erscheinen soll, einfügt. Dazu wird die @code{line-positions}-Eigenschaft +herangezogen. + +" + doctitlede = "Eine Linie des Notensystems dicker als die anderen machen" diff --git a/Documentation/de/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/Documentation/de/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc new file mode 100644 index 0000000000..93cb28cd87 --- /dev/null +++ b/Documentation/de/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen, +sondern zwischen den Systemen gesetzt werden, kann mit einer @code{StaffGroup} +anstelle von @code{ChoirStaff} erreicht werden. Die Taktlinien auf den +Systemen werden mit der @code{transparent}-Eigenschaft ausgelöscht. + +" + doctitlede = "Mensurstriche-Layout (Taktstriche zwischen den Systemen" diff --git a/Documentation/de/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/Documentation/de/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc new file mode 100644 index 0000000000..d7177ba212 --- /dev/null +++ b/Documentation/de/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Abkürzungen sind in der Datei @file{ly/script-init.ly} definiert, wo +den Variablen @code{dashHat}, @code{dashPlus}, @code{dashDash}, +@code{dashBar}, @code{dashLarger}, @code{dashDot} und +@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte +können verändert werden. Um zum Beispiel die Abkürzung +@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu +assoziieren, muss der Wert @code{trill} der Variable +@code{dashPlus} zugewiesen werden: + +" + doctitlede = "Die Standardwerte der Abkürzungen von Artikulationen verändern" diff --git a/Documentation/de/texidocs/multi-measure-rest-markup.texidoc b/Documentation/de/texidocs/multi-measure-rest-markup.texidoc new file mode 100644 index 0000000000..f546b11470 --- /dev/null +++ b/Documentation/de/texidocs/multi-measure-rest-markup.texidoc @@ -0,0 +1,17 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = "Textbeschriftungen, die an Mehrtaktpausen gehängt wird, +wird über oder unter der Pause zentriert. Lange Beschriftungen +lassen den Takt nicht breiter werden. Um eine Mehrtaktpause einer +Beschriftung anzupassen, muss eine unsichtbare Pause mit der +Beschriftung direkt vor der Mehrtaktpause eingesetzt werden. + +Man sollte beachten, dass unsichtbare Pausen automatische Taktstriche +nach sich ziehen. Text, der an eine unsichtbare Pause gehängt wird, +ist links ausgerichtet an der Position, wo die Pause erscheinen +würde. Wenn aber die Länge des Taktes durch die Länge des Textes +bestimmt wird, sieht es so aus, als ob der Text zentriert gesetzt +ist." + + doctitlede = "Textbeschriftung und Mehrtaktpausen" + + diff --git a/Documentation/de/texidocs/nesting-staves.texidoc b/Documentation/de/texidocs/nesting-staves.texidoc new file mode 100644 index 0000000000..97e1abfa54 --- /dev/null +++ b/Documentation/de/texidocs/nesting-staves.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Eigenschaft @code{systemStartDelimiterHierarchy} kann eingesetzt +werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der +Befehl @code{\\set StaffGroup.systemStartDelimiterHierarchy} nimmt eine +Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem +System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt +werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente +in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer +die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: @code{SystemStartBar}, +@code{SystemStartBracket}, @code{SystemStartBrace} und +@code{SystemStartSquare}. + +" + doctitlede = "Systeme schachteln" diff --git a/Documentation/de/texidocs/non-default-tuplet-numbers.texidoc b/Documentation/de/texidocs/non-default-tuplet-numbers.texidoc new file mode 100644 index 0000000000..b82de3f6cd --- /dev/null +++ b/Documentation/de/texidocs/non-default-tuplet-numbers.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen +N-tolennummern gesetzt werden können, die sich von dem eigentlichen Bruch +unterscheiden. Auch ein Notenwert kann zu Nenner oder Zähler des Bruchs +hinzugefügt werden. +" + doctitlede = "Nicht-standard-N-tolennummern" + diff --git a/Documentation/de/texidocs/non-traditional-key-signatures.texidoc b/Documentation/de/texidocs/non-traditional-key-signatures.texidoc new file mode 100644 index 0000000000..aee323c71b --- /dev/null +++ b/Documentation/de/texidocs/non-traditional-key-signatures.texidoc @@ -0,0 +1,22 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Untypische Tonarten" + texidocde = " +Der üblicherweise benutzte @code{\\key}-Befehl setzt die +@code{keySignature}-Eigenschaft im @code{Staff}-Kontext. + +Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft +direkt setzen. Das Format für den Befehl ist eine Liste: @code{ \\set +Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave +. Schritt) . Alteration) ...)} wobei für jedes Element in der Liste +@code{Oktave} die Oktave angibt (0@tie{}ist die Oktave vom +eingestrichenen@tie{}C bis zum eingestrichenen@tie{}H), @code{Schritt} gibt +die Note innerhalb der Oktave an (0@tie{}heißt@tie{}C und +6@tie{}heißt@tie{}H), und @code{Alteration} ist @code{,SHARP ,FLAT +,DOUBLE-SHARP} usw. (Beachte das beginnende Komma.) + +Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format +@code{(Schritt . Alteration)} gesetzt werden, wobei dann die Einstellungen +für alle Oktaven gelten. + +Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter: +" diff --git a/Documentation/de/texidocs/open-string-harmonics-in-tablature.texidoc b/Documentation/de/texidocs/open-string-harmonics-in-tablature.texidoc new file mode 100644 index 0000000000..57acdf78bb --- /dev/null +++ b/Documentation/de/texidocs/open-string-harmonics-in-tablature.texidoc @@ -0,0 +1,5 @@ +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Referenz für Flageolett von offenen Saiten: +" + doctitlede = "Referenz für Flageolett von offenen Saiten" diff --git a/Documentation/de/texidocs/orchestra,-choir-and-piano-template.texidoc b/Documentation/de/texidocs/orchestra,-choir-and-piano-template.texidoc new file mode 100644 index 0000000000..ef21314436 --- /dev/null +++ b/Documentation/de/texidocs/orchestra,-choir-and-piano-template.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b + + texidocde = " +Diese Vorlage zeigt die Benutzung von geschachtelten +@code{StaffGroup}- und @code{GrandStaff}-Kontexte, um +Instrumente in Untergruppen zu unterteilen, und die +Benutzung von @code{\\transpose} für transponierende +Instrumente. Alle Noten werden in C geschrieben. Noten +können in C eingegeben werden, oder auch in der Tonart +des Instrumentes: dann müssen sie zuerst nach C transponiert +werden, bevor sie einer Variable zugewiesen werden. + +" + doctitlede = "Orchester, Chor und Klavier" diff --git a/Documentation/de/texidocs/ottava-text.texidoc b/Documentation/de/texidocs/ottava-text.texidoc new file mode 100644 index 0000000000..d8f5960fa3 --- /dev/null +++ b/Documentation/de/texidocs/ottava-text.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Intern setzt die @code{set-octavation}-Funktion die Eigenschaften +@code{ottavation} (etwa auf den Wert @code{\"8va\"} oder @code{\"8vb\"}) +und @code{middleCPosition}. Um den Text der Oktavierungsklammer zu +ändern, kann @code{ottavation} manuell gesetzt werden, nachdem +@code{set-octavation} benützt wurde. + +" + +doctitlede = "Ottava-Text" diff --git a/Documentation/de/texidocs/partcombine-and-autobeamoff.texidoc b/Documentation/de/texidocs/partcombine-and-autobeamoff.texidoc new file mode 100644 index 0000000000..37c380ab02 --- /dev/null +++ b/Documentation/de/texidocs/partcombine-and-autobeamoff.texidoc @@ -0,0 +1,31 @@ +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde = " +Die Funktionsweise von @code{@bs{}autoBeamOff}, wenn es zusammen mit +@code{@bs{}partcombine} eingesetzt wird, kann schwer zu verstehen sein. +Es kann besser sein, anstatt dessen + +@example +\set Staff.autobeaming = ##f +@end example + +@noindent +zu benutzen, um sicherzustellen, dass die automatische Bebalkung für das +gesamte System ausgeschaltet ist. + +@code{\partcombine} funktioniert offensichtlich mit 3 Stimme (Hals nach oben +einfach, Hals nach unten einfach, Hals nach oben kombiniert). + +Ein @code{\autoBeamOff}-Befehl im ersten Argument von @code{\partcombine} +gilt für die Stimme, die zu dem Zeitpunkt aktiv ist, an dem der Befehl +verarbeitet wird, entweder für Hals nach oben, nach unten oder Hals nach +oben kombiniert. Ein @code{\autoBeamOff}-Befehl im zweiten Argument gilt +für die Stimme, die mit Hals nach unten einfach ist. + +Um @code{\autoBeamOff} zu benutzen, damit alle automatischen Balken aufhören, +wenn man es mit @code{\partcombine} verwendet, muss @code{\autoBeamOff} +@emph{dreimal} aufgerufen werden. + +" +doctitlede = "Partcombine und autoBeamOff" + diff --git a/Documentation/de/texidocs/percent-repeat-count-visibility.texidoc b/Documentation/de/texidocs/percent-repeat-count-visibility.texidoc new file mode 100644 index 0000000000..0accc9209a --- /dev/null +++ b/Documentation/de/texidocs/percent-repeat-count-visibility.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt +werden, indem man die Eigenschaft @code{repeatCountVisibility} beeinflusst. +" + doctitlede = "Sichtbarkeit von Prozent-Wiederholungen" diff --git a/Documentation/de/texidocs/percent-repeat-counter.texidoc b/Documentation/de/texidocs/percent-repeat-counter.texidoc new file mode 100644 index 0000000000..ea383d2439 --- /dev/null +++ b/Documentation/de/texidocs/percent-repeat-counter.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen +Zähler, wenn man die entsprechende Eigenschaft einsetzt: + +" + doctitlede = "Prozent-Wiederholungen zählen" diff --git a/Documentation/de/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/Documentation/de/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc new file mode 100644 index 0000000000..cb611897b8 --- /dev/null +++ b/Documentation/de/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch +manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt +werden können. Diese unregelmäßige Bebalkung muss allerdings manuell +gesetzt werden. + +" + doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben" + + diff --git a/Documentation/de/texidocs/piano-template-simple.texidoc b/Documentation/de/texidocs/piano-template-simple.texidoc new file mode 100644 index 0000000000..155e5fe00b --- /dev/null +++ b/Documentation/de/texidocs/piano-template-simple.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Hier ein einfaches Klaviersystem. + +" + doctitlede = "Vorlage für einfache Klaviernotation" diff --git a/Documentation/de/texidocs/piano-template-with-centered-dynamics.texidoc b/Documentation/de/texidocs/piano-template-with-centered-dynamics.texidoc new file mode 100644 index 0000000000..7b4da238a0 --- /dev/null +++ b/Documentation/de/texidocs/piano-template-with-centered-dynamics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In der meisten Klaviernotation werden die Dynamikzeichen zwischen +den beiden Systemen zentriert. Für LilyPond muss man die Einstellungen +etwas anpassen, aber Sie können ja das angepasste Beispiel von hier +kopieren. +" + diff --git a/Documentation/de/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/de/texidocs/piano-template-with-centered-lyrics.texidoc new file mode 100644 index 0000000000..53edf5755d --- /dev/null +++ b/Documentation/de/texidocs/piano-template-with-centered-lyrics.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Anstatt ein eigenes System für Melodie und Text zu schreiben, können +Sie den Text auch zwischen die beiden Klaviersysteme schreiben +(und damit das zusätzliche System für die Gesangstimme auslassen). +" + diff --git a/Documentation/de/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/de/texidocs/piano-template-with-melody-and-lyrics.texidoc new file mode 100644 index 0000000000..9b3bd06247 --- /dev/null +++ b/Documentation/de/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das nächste Beispiel ist typisch für ein Lied: Im oberen System die +Melodie mit Text, darunter Klavierbegleitung. +" + + doctitlede = "Vorlage für Klavier und Gesangsstimme" + diff --git a/Documentation/de/texidocs/placement-of-right-hand-fingerings.texidoc b/Documentation/de/texidocs/placement-of-right-hand-fingerings.texidoc new file mode 100644 index 0000000000..32563e3856 --- /dev/null +++ b/Documentation/de/texidocs/placement-of-right-hand-fingerings.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Man kann die Positionierung von Fingersatz der rechten Hand besser +kontrollieren, wenn eine bestimmte Eigenschaft gesetzt wird, wie +das folgende Beispiel zeigt: + +" + doctitlede = "Positionierung von Fingersatz der rechten Hand" diff --git a/Documentation/de/texidocs/polyphony-in-tablature.texidoc b/Documentation/de/texidocs/polyphony-in-tablature.texidoc new file mode 100644 index 0000000000..2e33729825 --- /dev/null +++ b/Documentation/de/texidocs/polyphony-in-tablature.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Polyphonie kann in einer Tabulatur (@code{TabStaff}) genauso wie in einem +normalen Notensystem erstellt werden. + +" + doctitlede = "Polyphonie in einer Tabulatur" diff --git a/Documentation/de/texidocs/positioning-grace-notes-with-floating-space.texidoc b/Documentation/de/texidocs/positioning-grace-notes-with-floating-space.texidoc new file mode 100644 index 0000000000..558ca0b018 --- /dev/null +++ b/Documentation/de/texidocs/positioning-grace-notes-with-floating-space.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn man die Eigenschaft @code{'strict-grace-spacing} aktiviert, +werden die Verzierungsnoten \"fließend\" gemacht, d.h. sie sind +von den normalen Noten los gekoppelt: Zuerst werden die normalen +Noten platziert, dann erst die Verzierungen links von der +Hauptnote gesetzt. + +" + doctitlede = "Positionierung von Verzierungen mit verschiebbarem Platz" + + diff --git a/Documentation/de/texidocs/positioning-multi-measure-rests.texidoc b/Documentation/de/texidocs/positioning-multi-measure-rests.texidoc new file mode 100644 index 0000000000..f311244119 --- /dev/null +++ b/Documentation/de/texidocs/positioning-multi-measure-rests.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die +vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an +eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die +Position der Pausen von geraden und ungeraden Stimmen voneinander +unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert +werden: + " + doctitlede = "Positionierung von Ganztaktpausen" + + diff --git a/Documentation/de/texidocs/positioning-text-markups-inside-slurs.texidoc b/Documentation/de/texidocs/positioning-text-markups-inside-slurs.texidoc new file mode 100644 index 0000000000..1b7f6564b0 --- /dev/null +++ b/Documentation/de/texidocs/positioning-text-markups-inside-slurs.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die +@code{outside-staff-priority}-Eigenschaft auf falsch gesetzt wird. + +" + doctitlede = "Textbeschriftung innerhalb von Bögen positionieren" diff --git a/Documentation/de/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/Documentation/de/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc new file mode 100644 index 0000000000..0803584e42 --- /dev/null +++ b/Documentation/de/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch +hinzugefügt werden" + +texidocde = "Den traditionellen Notensatzregeln zufolge wird ein +Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn +ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden +soll. Um dieses Verhalten zu ändern, muss die Eigenschaft +@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden. +" diff --git a/Documentation/de/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/Documentation/de/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc new file mode 100644 index 0000000000..d1a68c3a18 --- /dev/null +++ b/Documentation/de/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +doctitlede = "Auflösungzeichen nicht setzen, wenn die Tonart wechselt" + +texidocde = " +Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben, +um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann +verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft +im @code{Staff}-Kontext auf \"false\" gesetzt wird. +" diff --git a/Documentation/de/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/Documentation/de/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc new file mode 100644 index 0000000000..ca64650e19 --- /dev/null +++ b/Documentation/de/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein @code{|:}-Taktstrich kann auch zu Beginn eines Stückes ausgegeben werden, indem +man die entsprechende Eigenschaft verändert: + +" + doctitlede = "Ein Wiederholungszeichen zu Beginn eines Stückes ausgeben" diff --git a/Documentation/de/texidocs/printing-bar-numbers-at-regular-intervals.texidoc b/Documentation/de/texidocs/printing-bar-numbers-at-regular-intervals.texidoc new file mode 100644 index 0000000000..53fc03b148 --- /dev/null +++ b/Documentation/de/texidocs/printing-bar-numbers-at-regular-intervals.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem +man die Eigenschaft @code{barNumberVisibility} definiert. In diesem +Beispiel werden die Taktnummern jeden zweiten Takt gesetzt, außer +am Ende einer Zeile. + +" + doctitlede = "Setzen der Taktnummern in regelmäßigen Intervallen" + + diff --git a/Documentation/de/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc b/Documentation/de/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc new file mode 100644 index 0000000000..aac6a646c5 --- /dev/null +++ b/Documentation/de/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern können auch in Boxen oder Kreisen gesetzt werden. + +" + doctitlede = "Setzen von Taktnummern in Kästen oder Kreisen" + + diff --git a/Documentation/de/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/Documentation/de/texidocs/printing-hairpins-using-al-niente-notation.texidoc new file mode 100644 index 0000000000..450a153a09 --- /dev/null +++ b/Documentation/de/texidocs/printing-hairpins-using-al-niente-notation.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " + Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze + notiert werden (al niente = bis zum Nichts), indem die +@code{circled-tip}-Eigenschaft des @code{Hairpin}-Objekts auf +@code{#t} gesetzt wird. + +" + doctitlede = "Crescendo Klammern al niente schreiben" diff --git a/Documentation/de/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc b/Documentation/de/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc new file mode 100644 index 0000000000..25864555f5 --- /dev/null +++ b/Documentation/de/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Zeichen können auch am Ende der aktuellen Zeile ausgegeben werden, anstatt +dass sie auf die folgende Zeile verschoben werden. Das ist nützlich, +wenn ein Zeichen am Ende einer Partitur eingefügt werden soll, wo +gar keine nächste Zeile vorhanden ist. + +In derartigen Fällen muss die rechte Ecke des Zeichens an dem letzten +Taktstrich ausgerichtet werden, wie die zweite Zeile des Beispiels zeigt. + +" + doctitlede = "Zeichen am Ende einer Zeile oder Partitur setzen" diff --git a/Documentation/de/texidocs/printing-marks-on-every-staff.texidoc b/Documentation/de/texidocs/printing-marks-on-every-staff.texidoc new file mode 100644 index 0000000000..a7948ca9d2 --- /dev/null +++ b/Documentation/de/texidocs/printing-marks-on-every-staff.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie +können aber auch über jedem System ausgegeben werden. + +" + doctitlede = "Zeichen über jedem System ausgeben" diff --git a/Documentation/de/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/Documentation/de/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc new file mode 100644 index 0000000000..1cf4d2514c --- /dev/null +++ b/Documentation/de/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben. +Um sie unter das System zu setzen, muss die @code{direction}-Eigenschaft +von @code{MetronomeMark} oder @code{RehearsalMark} entsprechend verändert werden. + +" + doctitlede = "Metronom- und Übungszeichen unter das System setzen" diff --git a/Documentation/de/texidocs/printing-the-bar-number-for-the-first-measure.texidoc b/Documentation/de/texidocs/printing-the-bar-number-for-the-first-measure.texidoc new file mode 100644 index 0000000000..e7ed8d0f75 --- /dev/null +++ b/Documentation/de/texidocs/printing-the-bar-number-for-the-first-measure.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Standardmäßig wird die erste Taktzahl einer Partitur nicht gesetzt, +wenn sie weniger oder gleich '1' ist. Indem man @code{barNumberVisibility} +auf @code{all-bar-numbers-visible} setzt, kann eine beliebige +Taktzahl für den ersten und die folgenden Takte gesetzt werden. +Eine leere Taktlinie muss jedoch vor der ersten Note eingefügt +werden, damit das funktioniert. + +" + doctitlede = "Setzen der Taktnummer für den ersten Takt" + + diff --git a/Documentation/de/texidocs/quoting-another-voice-with-transposition.texidoc b/Documentation/de/texidocs/quoting-another-voice-with-transposition.texidoc new file mode 100644 index 0000000000..126a4904d5 --- /dev/null +++ b/Documentation/de/texidocs/quoting-another-voice-with-transposition.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Zitate berücksichtigen sowohl die Transposition der Quelle als auch +des Zielinstruments. In diesem Beispiel spielen alle Instrumente +klingendes C, das Zielinstrument ist in F. Die Noten für das +Zielinstrument können mit @code{\\transpose} transponiert werden, +in diesem Fall werden alle Noten (auch die zitierten) transponiert. + +" + doctitlede = "Eine Stimme mit Transposition zitieren" diff --git a/Documentation/de/texidocs/quoting-another-voice.texidoc b/Documentation/de/texidocs/quoting-another-voice.texidoc new file mode 100644 index 0000000000..0c080498c1 --- /dev/null +++ b/Documentation/de/texidocs/quoting-another-voice.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die @code{quotedEventTypes}-Eigenschaft bestimmt die +Typen an Musikereignissen, die zitiert werden. Die +Standardeinstellung ist @code{(note-event rest-event)}, womit +nur Noten und Pausen der zitierten Stimme für den +@code{\\quoteDuring}-Ausdruck übernommen werden. Im +Beispiel hier wird die 16-Pause nicht übernommen, weil +sich @code{rest-event} nicht in @code{quotedEventTypes} befindet. + +" + + doctitlede = "Eine andere Stimme zitieren" diff --git a/Documentation/de/texidocs/redefining-grace-note-global-defaults.texidoc b/Documentation/de/texidocs/redefining-grace-note-global-defaults.texidoc new file mode 100644 index 0000000000..1613190756 --- /dev/null +++ b/Documentation/de/texidocs/redefining-grace-note-global-defaults.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die globalen Standardeinstellungen für Verzierungsnoten werden in +den Variablen@code{startGraceMusic}, @code{stopGraceMusic}, +@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, +@code{startAppoggiaturaMusic} und @code{stopAppoggiaturaMusic} +gespeichert, die in der Datei @file{ly/grace-init.ly} definiert +sind. Wenn man sie umdefiniert, können andere Effekte erreicht +werden. + +" + doctitlede = "Globale Umdefinition von Verzierungsnoten" + + diff --git a/Documentation/de/texidocs/removing-bar-numbers-from-a-score.texidoc b/Documentation/de/texidocs/removing-bar-numbers-from-a-score.texidoc new file mode 100644 index 0000000000..0ff9bc771e --- /dev/null +++ b/Documentation/de/texidocs/removing-bar-numbers-from-a-score.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern können vollkommen aus den Noten entfernt werden, indem +man den @code{Bar_number_engraver} aus dem @code{Score}-Kontext +entfernt. + +" + doctitlede = "Entfernung von Taktnummern in einer Partitur" + + diff --git a/Documentation/de/texidocs/removing-the-first-empty-line.texidoc b/Documentation/de/texidocs/removing-the-first-empty-line.texidoc new file mode 100644 index 0000000000..882c04f025 --- /dev/null +++ b/Documentation/de/texidocs/removing-the-first-empty-line.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur +entfernt werden, indem die Eigenschaft @code{remove-first} der +@code{VerticalAxisGroup}-Eigenschaft eingesetzt wird. Das kann +man global in einer @code{\\layout}-Umgebung oder lokal in dem +bestimmten Notensystem machen, das entfernt werden soll. In letzterem +Fall muss man den Kontext angeben. + +Das untere Notensystem der zweiten Systemgruppe wird nicht entfernt, +weil in die Einstellungen in dem Schnipsel nur für das eine Notensystem +gültig sind. + +" + doctitlede = "Die erste leere Notenzeile auch entfernen" diff --git a/Documentation/de/texidocs/rest-styles.texidoc b/Documentation/de/texidocs/rest-styles.texidoc new file mode 100644 index 0000000000..3b7c033525 --- /dev/null +++ b/Documentation/de/texidocs/rest-styles.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + + doctitlede = "Pausenstile" + texidocde = " +Pausen können in verschiedenen Stilen dargestellt werden. +" + + diff --git a/Documentation/de/texidocs/reverting-default-beam-endings.texidoc b/Documentation/de/texidocs/reverting-default-beam-endings.texidoc new file mode 100644 index 0000000000..a0bfbaee7d --- /dev/null +++ b/Documentation/de/texidocs/reverting-default-beam-endings.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um Balken im 12/8-Takt als @code{3-4-3-2} zu gruppieren, muss man zuerst die +Standardwerte für die Balken im 12/8-Takt rückgängig machen und dann die neuen +Werte setzen: + +" + doctitlede = "Standard-Balkenwerte rückgängig machen" + + diff --git a/Documentation/de/texidocs/satb-choir-template---four-staves.texidoc b/Documentation/de/texidocs/satb-choir-template---four-staves.texidoc new file mode 100644 index 0000000000..c416dfa198 --- /dev/null +++ b/Documentation/de/texidocs/satb-choir-template---four-staves.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 144cd434d02e6d90b2fb738eeee99119a7c5e1d2 + + texidocde = " +SATB-Chorvorlage auf vier Systemen + +" + doctitlede = "SATB-Chorvorlage auf vier Systemen" + diff --git a/Documentation/de/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/Documentation/de/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc new file mode 100644 index 0000000000..0c75829991 --- /dev/null +++ b/Documentation/de/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note +eines Taktes ist, wird die Klammer an der vorhergehenden Taktlinie +beendet. Dieses Verhalten kann auch mit der Eigenschaft +@code{'to-barline} geändert werden: +" + doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen" diff --git a/Documentation/de/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/Documentation/de/texidocs/setting-the-minimum-length-of-hairpins.texidoc new file mode 100644 index 0000000000..8dbf84e3e7 --- /dev/null +++ b/Documentation/de/texidocs/setting-the-minimum-length-of-hairpins.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem +die @code{minimum-length}-Eigenschaft des @code{Hairpin}-Objektes +verändert wird. + +" + doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen" diff --git a/Documentation/de/texidocs/shortening-volta-brackets.texidoc b/Documentation/de/texidocs/shortening-volta-brackets.texidoc new file mode 100644 index 0000000000..9c548a1e40 --- /dev/null +++ b/Documentation/de/texidocs/shortening-volta-brackets.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber +es ist möglich sie zu verkürzen. Hierzu muss +@code{voltaSpannerDuration} definiert werden, in dem Beispiel etwa als +3/4, sodass die Klammer nur einen Takt dauert. + +" + doctitlede = "Volta-Klammern verkürzen" diff --git a/Documentation/de/texidocs/showing-chords-at-changes.texidoc b/Documentation/de/texidocs/showing-chords-at-changes.texidoc new file mode 100644 index 0000000000..ffb4eabb97 --- /dev/null +++ b/Documentation/de/texidocs/showing-chords-at-changes.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile +und bei Akkordwechseln angezeigt werden. + +" + doctitlede = "Akkordsymbole bei Wechsel anzeigen" diff --git a/Documentation/de/texidocs/simple-lead-sheet.texidoc b/Documentation/de/texidocs/simple-lead-sheet.texidoc new file mode 100644 index 0000000000..6a94038297 --- /dev/null +++ b/Documentation/de/texidocs/simple-lead-sheet.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext: + +" + doctitlede = "Ein einfaches Liedblatt" diff --git a/Documentation/de/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/de/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc new file mode 100644 index 0000000000..7ee09e50f9 --- /dev/null +++ b/Documentation/de/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Mit diesem Beispiel können Sie einen Song mit Melodie, +Text und Akkorden schreiben. +" + + doctitlede = "Vorlage für eine Notenzeile mit Noten, Text und Akkorden" + diff --git a/Documentation/de/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/de/texidocs/single-staff-template-with-notes-and-chords.texidoc new file mode 100644 index 0000000000..d161de5dbd --- /dev/null +++ b/Documentation/de/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist +das richtige Beispiel für Sie! +" + + doctitlede = "Vorlage für eine Notenzeile mit Akkorden" + diff --git a/Documentation/de/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/de/texidocs/single-staff-template-with-notes-and-lyrics.texidoc new file mode 100644 index 0000000000..5dd31285b2 --- /dev/null +++ b/Documentation/de/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren +Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen +Sie es mit LilyPond. In dem Beispiel wird die automatische +Balkenverbindung ausgeschaltet (mit dem Befehl @code{\autoBeamOff}), +wie es für Vokalmusik üblich ist. +Wenn Sie die Balken wieder einschalten wollen, müssen Sie die +entsprechende Zeile entweder ändern oder auskommentieren. +" + + doctitlede = "Vorlage für ein Notensystem mit Noten und Gesangstext" + diff --git a/Documentation/de/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/de/texidocs/single-staff-template-with-only-notes.texidoc new file mode 100644 index 0000000000..2e1303ccfa --- /dev/null +++ b/Documentation/de/texidocs/single-staff-template-with-only-notes.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein +Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen +Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben +eine vollständige Notationsdatei. +" + + doctitlede = "Vorlage für ein Notensystem" + diff --git a/Documentation/de/texidocs/slides-in-tablature.texidoc b/Documentation/de/texidocs/slides-in-tablature.texidoc new file mode 100644 index 0000000000..ef3f6d1e11 --- /dev/null +++ b/Documentation/de/texidocs/slides-in-tablature.texidoc @@ -0,0 +1,5 @@ +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Gleiten kann sowohl in normalem Notensystem als auch in Tabulaturen notiert werden: +" + doctitlede = "Gleiten (Glissando) in Tabulatur" diff --git a/Documentation/de/texidocs/snap-pizzicato-bartok-pizzicato.texidoc b/Documentation/de/texidocs/snap-pizzicato-bartok-pizzicato.texidoc new file mode 100644 index 0000000000..c57267d2cd --- /dev/null +++ b/Documentation/de/texidocs/snap-pizzicato-bartok-pizzicato.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Bartók-Pizzicato" + texidocde = " +Das Bartók-Pizzicato @q{ist eine besondere Form des Pizzicato, bei dem der +Spieler die Saite auf das Griffbrett aufschlagen lässt, sodass zusätzlich +zum angeschlagenen Ton ein scharfes, knallendes Geräusch ertönt} +(Wikipedia). Es wird dargestellt als kleiner Kreis mit einer vertikalen +Linie, die vom Kreiszentrum aus nach oben weist und ein Stück außerhalb des +Kreises endet. Lilypond hat keinen eigenen Glyphen für dieses Symbol; es +ist aber einfach, direkt eine Definition in die Eingabedatei einzufügen. +" diff --git a/Documentation/de/texidocs/specifying-context-with-beatgrouping.texidoc b/Documentation/de/texidocs/specifying-context-with-beatgrouping.texidoc new file mode 100644 index 0000000000..35332eec52 --- /dev/null +++ b/Documentation/de/texidocs/specifying-context-with-beatgrouping.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn der Kontext angegeben wird, kann die Auswirkung von @code{beatGrouping} +auf den angegebenen Kontext beschränkt werden und die Werte, die in Kontexten +auf höherer Ebene angegeben wurden, können verändert werden. Der +@code{\\set}-Befehl muss @emph{nach} den @code{\\time}-Befehl geschrieben +werden: +" + doctitlede = "Den Kontext für beatGrouping angeben" + + diff --git a/Documentation/de/texidocs/stand-alone-two-column-markup.texidoc b/Documentation/de/texidocs/stand-alone-two-column-markup.texidoc new file mode 100644 index 0000000000..cd960f0f71 --- /dev/null +++ b/Documentation/de/texidocs/stand-alone-two-column-markup.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Isolierter Text kann in mehreren Spalten mit @code{\\markup}-Befehlen +angeordnet werden: + +" + doctitlede = "Isolierter Text in zwei Spalten" diff --git a/Documentation/de/texidocs/stem-and-beam-behavior-in-tablature.texidoc b/Documentation/de/texidocs/stem-and-beam-behavior-in-tablature.texidoc new file mode 100644 index 0000000000..f803b1f8d5 --- /dev/null +++ b/Documentation/de/texidocs/stem-and-beam-behavior-in-tablature.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Richtung von Hälsen wird in Tabulaturen genauso wie in normaler Notation +eingestellt. Balken können horizontal eingestellt werden, wie das Beispiel +zeigt. + +" + doctitlede = "Hals- und Balkenverhalten in einer Tabulatur" diff --git a/Documentation/de/texidocs/string-quartet-template-simple.texidoc b/Documentation/de/texidocs/string-quartet-template-simple.texidoc new file mode 100644 index 0000000000..389f8a179a --- /dev/null +++ b/Documentation/de/texidocs/string-quartet-template-simple.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier +wird auch eine @qq{@code{\global}}-Variable für Taktart und +Vorzeichen benutzt. +" + + doctitlede = "Vorlage für Streichquartett (einfach)" + diff --git a/Documentation/de/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/de/texidocs/string-quartet-template-with-separate-parts.texidoc new file mode 100644 index 0000000000..80a80b7a3c --- /dev/null +++ b/Documentation/de/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, +aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel +oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt +voneinander notieren können. Im nächsten Beispiel wird nun +gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen. + +Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen +sind in den Kommentaren am Anfang jeder Datei enthalten. @file{piece.ly} +enthält die Noten. Die anderen Dateien -- @file{score.ly}, +@file{vn1.ly}, @file{vn2.ly}, @file{vla.ly} und +@file{vlc.ly} -- erstellen daraus die entsprechenden Stimmen bzw. die +Partitur (@file{score.ly}). Mit @code{\tag} wird den Stimmen ein Name +zugewiesen, auf den zurückgegriffen werden kann. +" + + doctitlede = "Vorlage für Streichquartett mit einzelnen Stimmen" + diff --git a/Documentation/de/texidocs/sub-dividing-beams.texidoc b/Documentation/de/texidocs/sub-dividing-beams.texidoc new file mode 100644 index 0000000000..6034e9ecf6 --- /dev/null +++ b/Documentation/de/texidocs/sub-dividing-beams.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Balken von aufeinanderfolgenden Sechzehnteln (oder kürzeren Notenwerten) +werden standardmäßig nicht unterteilt. Dieses Verhalten kann verändert +werden, sodass die Balken in Untergruppen aufgeteilt werden, indem man +die Eigenschaft @code{subdivideBeams} verändert. Man muss die Unterteilungsintervalle +als Notenbruch mit der @code{make-moment}-Funktion für @code{beatLength} angeben, +damit die Balken unterbrochen wird und nur ein Balken durchgezogen bleibt. Der +Standardwert für @code{beatLength} ist 1 / Zähler des aktuellen Taktes. + +" + doctitlede = "Balken in Untergruppen teilen" + + diff --git a/Documentation/de/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/Documentation/de/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc new file mode 100644 index 0000000000..f6f69e1859 --- /dev/null +++ b/Documentation/de/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc @@ -0,0 +1,29 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren." + texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische +Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl +an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die +folgenden Regeln: + +@itemize +@item +Doppelte Versetzungszeichen sollen entfernt werden + +@item +His -> C + +@item +Eis -> F + +@item +Ces -> B + +@item +Fes -> E + +@end itemize + +Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische +Variante gewählt. +" + diff --git a/Documentation/de/texidocs/tweaking-clef-properties.texidoc b/Documentation/de/texidocs/tweaking-clef-properties.texidoc new file mode 100644 index 0000000000..70ec26012b --- /dev/null +++ b/Documentation/de/texidocs/tweaking-clef-properties.texidoc @@ -0,0 +1,32 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Eigenschaften des Schlüssels optimieren" + texidocde = " +Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem +expliziten Setzen der Eigenschaften von @code{clefGlyph}, +@code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt), +@code{middleCPosition} und @code{clefOctavation}. Ein Schlüssel wird +ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich +ändert. + +Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der +Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten +auf dem System: das geschieht nur, wenn auch die Position des +eingestrichenen@tie{}C (middleCPosition) angegeben wird. Die +Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen +positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie +plus Zwischenraum. Der @code{clefOctavation}-Wert ist normalerweise auf 7, +-7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig. + +Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue +Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile +ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht +erforderlich ist, kann er unterdrückt werden, indem die +@code{explicitClefVisibility}-Eigenschaft des @code{Staff}-Kontextes auf den +Wert @code{end-of-line-invisible} gesetzt wird. Das Standardverhalten kann +mit @code{\\unset Staff.explicitClefVisibility} wieder hergestellt werden. + +Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese +Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen +Änderungen die ursprüngliche relative Positionierung von Schlüssel und +Noten, auf der zweiten Zeile nicht. +" diff --git a/Documentation/de/texidocs/tweaking-grace-layout-within-music.texidoc b/Documentation/de/texidocs/tweaking-grace-layout-within-music.texidoc new file mode 100644 index 0000000000..dc3c3a3629 --- /dev/null +++ b/Documentation/de/texidocs/tweaking-grace-layout-within-music.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das Layout von Verzierungsausdrücken kann in der Musik verändert +werden mit den Funktionen @code{add-grace-property} und +@code{remove-grace-property}. Das folgende Beispiel definiert +die Richtung von Hälsen (Stem) für diese Verzierung, sodass die +Hälse nicht immer nach unten zeigen, und ändert den Standardnotenkopf +in ein Kreuz. +" + doctitlede = "Veränderung des Layouts von Verzierungen innerhalb der Noten" + + diff --git a/Documentation/de/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/Documentation/de/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc new file mode 100644 index 0000000000..41bb2341ad --- /dev/null +++ b/Documentation/de/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer +(@code{SystemStartSquare}) umgewandelt werden, wenn man sie explizit +im @code{StaffGroup}- oder @code{ChoirStaffGroup}-Kontext setzt. + +" + doctitlede = "Eine eckige Klammer zu Beginn von Systemgruppen benutzen" diff --git a/Documentation/de/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc b/Documentation/de/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc new file mode 100644 index 0000000000..3c72827cad --- /dev/null +++ b/Documentation/de/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + + texidocde = " +Das @code{arpeggioBracket}-Klammerobjekt kann benutzt werden, um geteilte +Stimmen anzuzeigen, wenn keine Hälse diese Information bieten. Das sieht +man oft in Chormusik. + +" + doctitlede = "Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen" + diff --git a/Documentation/de/texidocs/using-beatlength-and-beatgrouping.texidoc b/Documentation/de/texidocs/using-beatlength-and-beatgrouping.texidoc new file mode 100644 index 0000000000..a27213d66e --- /dev/null +++ b/Documentation/de/texidocs/using-beatlength-and-beatgrouping.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Eigenschaft @code{measureLength} bestimmt, wo Taktstriche eingefügt +werden sollen und, zusammen mit @code{beatLength} und +@code{beatGrouping}, wie automatische Balken für Notenlängen und +Taktarten, für die keine definierten Regeln gefunden werden, gesetzt +werden sollen. Dieses Beispiel zeigt verschiedene Möglichkeiten, +die Balken zu kontrollieren, indem man diese Eigenschaften +beeinflusst. Die Erklärungen werden als Kommentare im Quellcode +gegeben. +" + doctitlede = "beatLength und beatGrouping benutzen" + diff --git a/Documentation/de/texidocs/using-double-slurs-for-legato-chords.texidoc b/Documentation/de/texidocs/using-double-slurs-for-legato-chords.texidoc new file mode 100644 index 0000000000..fe545e870a --- /dev/null +++ b/Documentation/de/texidocs/using-double-slurs-for-legato-chords.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert +werden. Das kann mit der Eigenschaft @code{doubleSlurs} erreicht werden. + +" + doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen" diff --git a/Documentation/de/texidocs/using-ties-with-arpeggios.texidoc b/Documentation/de/texidocs/using-ties-with-arpeggios.texidoc new file mode 100644 index 0000000000..5d564e8597 --- /dev/null +++ b/Documentation/de/texidocs/using-ties-with-arpeggios.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " + Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In + diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander. +Das Verhalten kann erreicht werden, indem die @code{tieWaitForNote}-Eigenschaft +auf @code{#t} gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa +ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch +für normale Überbindungen eingesetzt werden +" + doctitlede = "Überbindungen für Arpeggio benutzen" + + diff --git a/Documentation/de/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/Documentation/de/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc new file mode 100644 index 0000000000..4ea3333d5a --- /dev/null +++ b/Documentation/de/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt, +können alle @code{DynamicLineSpanner}-Objekte (Crescendo-Klammern und +Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer +wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden. +Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz +sieht ansprechender aus. + +Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer +Grundlinie auszurichten. + +" + doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen" diff --git a/Documentation/de/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/Documentation/de/texidocs/vertically-aligning-ossias-and-lyrics.texidoc new file mode 100644 index 0000000000..a684a2ad4f --- /dev/null +++ b/Documentation/de/texidocs/vertically-aligning-ossias-and-lyrics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieser Schnipsel zeigt, wie man die Kontexteigenschaften +@code{alignBelowContext} und @code{alignAboveContext} benutzen kann, um +die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren. + +" + doctitlede = "Gesangstext und Ossia vertikal ausrichten" diff --git a/Documentation/de/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/de/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc new file mode 100644 index 0000000000..4f1ca970a0 --- /dev/null +++ b/Documentation/de/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In diesem Beispiel wird ein automatischer Klavierauszug zu der +Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond +-- man kann eine Variable mehr als einmal benutzen. Wenn Sie +irgendeine Änderung an einer Chorstimme vornehmen, (etwa +tenorMusic), verändert sich auch der Klavierauszug entsprechend. +" + diff --git a/Documentation/de/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/de/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc new file mode 100644 index 0000000000..b4e6bb2a7e --- /dev/null +++ b/Documentation/de/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In diesem Beispiel werden die Texte mit den Befehlen +@code{alignAboveContext} und @code{alignBelowContext} +über und unter dem System angeordnet. +" + + doctitlede = "Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System" + diff --git a/Documentation/de/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc b/Documentation/de/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc new file mode 100644 index 0000000000..f14c79d93d --- /dev/null +++ b/Documentation/de/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b + + texidocde = " +Diese Vorlage erstellt eine Partitur, die mit Sologesang beginnt und einen +Refrain für zwei Stimmen enthält. Sie zeigt auch die Benutzung von +Platzhalter-Pausen innerhalb der @code{\global}-Variable, um Taktwechsel +(und andere Elemente, die für alle Stimmen gleich sind) für das gesamte +Stück zu definieren. + +" + doctitlede = "Sologesang und zweistimmiger Refrain" diff --git a/Documentation/de/texidocs/vocal-ensemble-template.texidoc b/Documentation/de/texidocs/vocal-ensemble-template.texidoc new file mode 100644 index 0000000000..6802397adb --- /dev/null +++ b/Documentation/de/texidocs/vocal-ensemble-template.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441 + texidocde = " +Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren +Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, +die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa +sind fast immer gleich in allen Stimmen. +" + + doctitlede = "Vorlage für Vokalensemble" + diff --git a/Documentation/de/texidocs/volta-below-chords.texidoc b/Documentation/de/texidocs/volta-below-chords.texidoc new file mode 100644 index 0000000000..6bd703f54a --- /dev/null +++ b/Documentation/de/texidocs/volta-below-chords.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Indem man den @code{Volta_engraver} zu dem entsprechenden Notensystem +hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt +werden. + +" + doctitlede = "Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole" diff --git a/Documentation/de/texidocs/woodwind-diagrams-key-lists.texidoc b/Documentation/de/texidocs/woodwind-diagrams-key-lists.texidoc new file mode 100644 index 0000000000..8e06bc7a9d --- /dev/null +++ b/Documentation/de/texidocs/woodwind-diagrams-key-lists.texidoc @@ -0,0 +1,10 @@ +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde=" +Dieses Schnipsel erzeugt eine Liste aller möglichen Löcher und Locheinstellungen +für Holzbläserdiagramme, wie sie in der Datei +@file{scm/define-woodwind-diagrams.scm} definiert sind. Die Liste wird auf +der Kommandozeile und in der Log-Datei angezeigt, nicht in den Noten. +" + doctitlede = "Liste der Löcher für Holzbläserdiagramme" + diff --git a/Documentation/de/texidocs/woodwind-diagrams-listing.texidoc b/Documentation/de/texidocs/woodwind-diagrams-listing.texidoc new file mode 100644 index 0000000000..d17547c59f --- /dev/null +++ b/Documentation/de/texidocs/woodwind-diagrams-listing.texidoc @@ -0,0 +1,10 @@ +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde=" +Folgende Noten zeige alle Holzbläserdiagramme, die für LilyPond +definiert sind. + +" + doctitlede = "Liste der Holzbläserdiagramme" + diff --git a/Documentation/de/translations.html.in b/Documentation/de/translations.html.in deleted file mode 100644 index 2fd9559418..0000000000 --- a/Documentation/de/translations.html.in +++ /dev/null @@ -1,427 +0,0 @@ -·

Zuletzt aktualisiert am·Sat Jan 24 01:17:40 UTC 2009 -

- - - - - LilyPond-Dokumentation – Status der deutschen Übersetzung - - - - -

Zurück zur Dokumentations-Hauptseite

- -

LilyPond-Dokumentation – Status der deutschen Übersetzung

- -

Dies ist ein Überblick über die Abschnitte der LilyPond - @TOPLEVEL_VERSION@ -Dokumentation, die auf deutsch übersetzt - sind. Für jeden Abschnitt der Dokumentation findet sich die Anzahl - der Wörter in Klammern, wer die Übersetzungsarbeit geleistet - hat und wer die Übersetzung geprüft hat (Prüfer sind - mit einer kleineren Schriftgröße dargestellt), wie viel - des ursprünglichen englischen Abschnitts übersetzt wurde, - wie aktuell die Übersetzung ist und ob die Übersetzung schon - aktualisiert wurde, nachdem das Grand Documenation Project (GDP) - begonnen wurde. -

- -

Bitte beachten Sie, dass im Rahmen des GDP sehr viele Änderungen - in der englischen Dokumentation vorgenommen wurden. Die deutsche - Übersetzung ist deshalb nicht vollständig aktuell. Das bedeutet - nicht, dass die aktuelle Übersetzung sich nicht auf die aktuelle - LilyPond-Version beziehen würde, sondern nur, dass sie nicht in - Allem mit der englischen Version übereinstimmt. Wir geben unser - Bestes, um die übersetzte Dokumentation mit allen Syntax-Änderungen - zu aktualisieren; Kapitel für Kapitel wird dann vollständig - übersetzt werden, wenn das entsprechende englische Kapitel vom - GDP verbessert wurde. -

- -

Wenn Sie Änderungsvorschläge oder Korrekturen melden wollen - oder sich an der Übersetzungsarbeit beteiligen wollen, schreiben - Sie bitte eine E-Mail an die Entwicklerliste - lilypond-devel@gnu.org. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond -- Handbuch zum Lernen ÜbersetzerÜbersetzungsüberprüferÜbersetztAktuellMehr Information
Überschriften
(429)
Till Rettigjajavor-GDP
Vorwort
(411)
Till Rettigjajavor-GDP
1 Einleitung
(3855)
Till Rettig
- Reinhold Kainhofer
jajavor-GDP
2 Übung
(6365)
Till Rettigjajavor-GDP
3 Grundbegriffe
(10318)
Till Rettig
- Reinhold Kainhofer
jajavor-GDP
4 Die Ausgabe verändern
(14775)
Till Rettigjajavor-GDP
5 An LilyPond-Projekten arbeiten
(3144)
Till Rettigjajavor-GDP
A Vorlagen
(483)
Till Rettigjajavor-GDP
B Scheme-Übung
(960)
Till Rettigjajavor-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond -- Programmbenutzung ÜbersetzerÜbersetzungsüberprüferÜbersetztAktuellMehr Information
Überschriften
(407)
Till Rettigjajavor-GDP
1 Installieren
(1921)
Till Rettig
- Reinhold Kainhofer
teilweise (7 %)javor-GDP
2 Setup
(1149)
Till Rettig
- Reinhold Kainhofer
jajavor-GDP
3 LilyPond starten
(2827)
Reinhold Kainhofer
- Till Rettig
jajavor-GDP
4 @command{lilypond-book}: Noten in den Text integrieren
(3248)
Reinhold KainhoferTill Rettigjajavor-GDP
5 Von anderen Formaten konvertieren
(1171)
Reinhold KainhoferTill Rettigjajavor-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond -- Notationsreferenz ÜbersetzerÜbersetzungsüberprüferÜbersetztAktuellMehr Information
Überschriften
(695)
Till Rettigjajavor-GDP
1 Musikalische Notation
(91)
Till Rettigjajavor-GDP
1.1 Tonhöhen
(3123)
Till Rettigjajavor-GDP
1.2 Rhythmus
(5197)
Till Rettigjajavor-GDP
1.3 Ausdrucksbezeichnungen
(1146)
Till Rettigjajavor-GDP
1.4 Wiederholungszeichen
(555)
Till Rettigjajavor-GDP
1.5 Gleichzeitig erscheinende Noten
(1455)
Till Rettigjajavor-GDP
1.6 Notation auf Systemen
(1701)
Till Rettigjajavor-GDP
1.7 Anmerkungen
(895)
Till Rettigjajavor-GDP
1.8 Text
(2286)
Till Rettigjajavor-GDP
2 Spezielle Notation
(76)
Till Rettigjajavor-GDP
2.1 Notation von Gesang
(2670)
Till Rettigjajavor-GDP
2.2 Tasteninstrumente und andere Instrumente mit mehreren Systemen
(744)
Till Rettigjajavor-GDP
2.3 Bundlose Saiteninstrumente
(235)
Till Rettigjajavor-GDP
2.4 Saiteninstrumente mit Bünden
(1850)
Till Rettigjajavor-GDP
2.5 Schlagzeug
(810)
Till Rettigjajavor-GDP
2.6 Blasinstrumente
(136)
Till Rettigjajavor-GDP
2.7 Notation von Akkorden
(1464)
Till Rettigjajavor-GDP
2.8 Notation von alter Musik
(4487)
Till Rettigteilweise (79 %)javor-GDP
2.9 Weltmusik
(1115)
Till Rettigjajavor-GDP
3 Allgemeine Eingabe und Ausgabe
(5873)
Till Rettigjajavor-GDP
4 Abstände
(8505)
Till Rettigteilweise (3 %)javor-GDP
5 Standardeinstellungen verändern
(11391)
neinvor-GDP
6 Schnittstellen für Programmierer
(5202)
neinvor-GDP
A Literatur
(310)
Till Rettigjajavor-GDP
B Notationsübersicht
(1190)
Till Rettigjajavor-GDP
C Befehlsübersicht
(250)
Till Rettigjajavor-GDP
-

- - - diff --git a/Documentation/de/translations.itexi b/Documentation/de/translations.itexi new file mode 100644 index 0000000000..607017d354 --- /dev/null +++ b/Documentation/de/translations.itexi @@ -0,0 +1,1584 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Zuletzt aktualisiert am Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Aufsatz über den automatischen Musiksatz +@tab Übersetzer +@tab Übersetzungsüberprüfer +@tab Übersetzt +@tab Aktuell +@tab Mehr Information +@item +Überschriften +@* +92 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1 Notensatz +@* +5297 +@tab  Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2 Literatur +@* +326 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond erweitern +@tab Übersetzer +@tab Übersetzungsüberprüfer +@tab Übersetzt +@tab Aktuell +@tab Mehr Information +@item +Überschriften +@* +107 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1 Scheme-Übung +@* +5007 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2 Schnittstellen für Programmierer +@* +3568 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond Handbuch zum Lernen +@tab Übersetzer +@tab Übersetzungsüberprüfer +@tab Übersetzt +@tab Aktuell +@tab Mehr Information +@item +Überschriften +@* +124 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1 Übung +@* +2535 +@tab Till Paala +@* +Reinhold Kainhofer +@tab Hajo Bäß +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2 Übliche Notation +@* +4184 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +3 Grundbegriffe +@* +11139 +@tab Till Paala +@* +Reinhold Kainhofer +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +4 Die Ausgabe verändern +@* +15408 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +A Vorlagen +@* +225 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond Benutzerhandbuch +@tab Übersetzer +@tab Übersetzungsüberprüfer +@tab Übersetzt +@tab Aktuell +@tab Mehr Information +@item +Überschriften +@* +355 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1 Musikalische Notation +@* +91 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1.1 Tonhöhen +@* +4479 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +teilweise +@end html +@end ifhtml +@ifnothtml +teilweise +@end ifnothtml +@tab vor-GDP +@item +1.2 Rhythmus +@* +6048 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +teilweise +@end html +@end ifhtml +@ifnothtml +teilweise +@end ifnothtml +@tab vor-GDP +@item +1.3 Ausdrucksbezeichnungen +@* +1726 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1.4 Wiederholungszeichen +@* +930 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1.5 Gleichzeitig erscheinende Noten +@* +2163 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +teilweise +@end html +@end ifhtml +@ifnothtml +teilweise +@end ifnothtml +@tab vor-GDP +@item +1.6 Notation auf Systemen +@* +2056 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1.7 Anmerkungen +@* +931 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +teilweise +@end html +@end ifhtml +@ifnothtml +teilweise +@end ifnothtml +@tab vor-GDP +@item +1.8 Text +@* +2716 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2 Spezielle Notation +@* +81 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.1 Notation von Gesang +@* +4807 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.2 Tasteninstrumente und andere Instrumente mit mehreren Systemen +@* +838 +@tab  Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.3 Bundlose Saiteninstrumente +@* +281 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.4 Saiteninstrumente mit Bünden +@* +2640 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.5 Schlagzeug +@* +806 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.6 Blasinstrumente +@* +312 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.7 Notation von Akkorden +@* +1855 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.8 Zeitgenössische Musik +@* +475 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.9 Notation von alter Musik +@* +4752 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2.10 Weltmusik +@* +1446 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +3 Allgemeine Eingabe und Ausgabe +@* +7069 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +4 Abstände +@* +11017 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +5 Standardeinstellungen verändern +@* +12248 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +A Notationsübersicht +@* +1989 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +B Befehlsübersicht +@* +252 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +GNU LilyPond Programmbenutzung +@tab Übersetzer +@tab Übersetzungsüberprüfer +@tab Übersetzt +@tab Aktuell +@tab Mehr Information +@item +Überschriften +@* +135 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +1 @command{lilypond} starten +@* +3622 +@tab Reinhold Kainhofer +@* +Till Paala +@tab Till Paala +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +2 Dateien mit @command{convert-ly} aktualisieren +@* +1189 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +3 @command{lilypond-book} aufrufen +@* +3764 +@tab Reinhold Kainhofer +@tab Till Paala +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +4 Externe Programme +@* +2170 +@tab Till Paala +@* +Reinhold Kainhofer +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +5 Vorschläge zum Schreiben von LilyPond-Eingabe-Dateien +@* +2694 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond -- Notation für Jedermann +@tab Übersetzer +@tab Übersetzungsüberprüfer +@tab Übersetzt +@tab Aktuell +@tab Mehr Information +@item +Überschriften +@* +585 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +Einleitung +@* +4506 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +Download +@* +1183 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +Handbücher +@* +1200 +@tab Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@item +Gemeinschaft +@* +1755 +@tab  Till Paala +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab vor-GDP +@end multitable + diff --git a/Documentation/de/translations.template.html.in b/Documentation/de/translations.template.html.in deleted file mode 100644 index ba3724dc6e..0000000000 --- a/Documentation/de/translations.template.html.in +++ /dev/null @@ -1,49 +0,0 @@ - - - - LilyPond-Dokumentation – Status der deutschen Übersetzung - - - - -

Zurück zur Dokumentations-Hauptseite

- -

LilyPond-Dokumentation – Status der deutschen Übersetzung

- -

Dies ist ein Überblick über die Abschnitte der LilyPond - @TOPLEVEL_VERSION@ -Dokumentation, die auf deutsch übersetzt - sind. Für jeden Abschnitt der Dokumentation findet sich die Anzahl - der Wörter in Klammern, wer die Übersetzungsarbeit geleistet - hat und wer die Übersetzung geprüft hat (Prüfer sind - mit einer kleineren Schriftgröße dargestellt), wie viel - des ursprünglichen englischen Abschnitts übersetzt wurde, - wie aktuell die Übersetzung ist und ob die Übersetzung schon - aktualisiert wurde, nachdem das Grand Documenation Project (GDP) - begonnen wurde. -

- -

Bitte beachten Sie, dass im Rahmen des GDP sehr viele Änderungen - in der englischen Dokumentation vorgenommen wurden. Die deutsche - Übersetzung ist deshalb nicht vollständig aktuell. Das bedeutet - nicht, dass die aktuelle Übersetzung sich nicht auf die aktuelle - LilyPond-Version beziehen würde, sondern nur, dass sie nicht in - Allem mit der englischen Version übereinstimmt. Wir geben unser - Bestes, um die übersetzte Dokumentation mit allen Syntax-Änderungen - zu aktualisieren; Kapitel für Kapitel wird dann vollständig - übersetzt werden, wenn das entsprechende englische Kapitel vom - GDP verbessert wurde. -

- -

Wenn Sie Änderungsvorschläge oder Korrekturen melden wollen - oder sich an der Übersetzungsarbeit beteiligen wollen, schreiben - Sie bitte eine E-Mail an die Entwicklerliste - lilypond-devel@gnu.org. -

- - - diff --git a/Documentation/de/usage.tely b/Documentation/de/usage.tely new file mode 100644 index 0000000000..84da2438e7 --- /dev/null +++ b/Documentation/de/usage.tely @@ -0,0 +1,87 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 +@documentencoding UTF-8 +@documentlanguage de +@setfilename lilypond-usage.info +@settitle GNU LilyPond Programmbenutzung +@afourpaper + + + +@macro manualIntro +Diese Datei erklärt, wie man die Programme, die mit LilyPond +Version @version{} verteilt werden, benutzt werden. Zusätzlich +werden einige Hinweise zur effizienten Benutzung der Programme +vorgestellt. +@end macro + +@c `Usage' was born 1999-10-10 with git commit c82c30c... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 bei den Autoren. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen und Graham Percival +@omfdescription Programmbenutzung des LilyPond-Musiksatzsystems +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage German +@end ignore + +@c Translators: Till Paala + +@lilyTitlePage{Usage} + + +@c TOC -- non-tex +@ifnottex + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* lilypond starten:: Benutzung. +* Dateien mit convert-ly aktualisieren:: Eingabedateien aktualisieren. +* lilypond-book:: Text und Noten integrieren. +* Externe Programme:: LilyPond mit anderen Programmen verbinden. +* Vorschläge zum Schreiben von LilyPond-Eingabe-Dateien:: Hinweise zur effizienten Benutzung und effektiven Fehlerbeseitigung. + +Anhänge + +* GNU Free Documentation License:: Lizenz dieses Dokuments. +* LilyPond-Index:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include usage/running.itely +@include usage/updating.itely +@include usage/lilypond-book.itely +@include usage/external.itely +@include usage/suggestions.itely + +@include fdl.itexi + +@node LilyPond-Index +@appendix LilyPond-Index +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/de/usage/GNUmakefile b/Documentation/de/usage/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/de/usage/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/usage/external.itely b/Documentation/de/usage/external.itely new file mode 100644 index 0000000000..f7a4df4018 --- /dev/null +++ b/Documentation/de/usage/external.itely @@ -0,0 +1,661 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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" + +@c Translators: Till Paala, Reinhold Kainhofer + +@node Externe Programme +@chapter Externe Programme +@translationof External programs + +LilyPond kann mit anderen Programmen auf verschiedene Weise interagieren. + +@menu +* Point and click:: +* Unterstützung von Texteditoren:: +* Von anderen Formaten konvertieren:: +* LilyPond-Ausgabe in anderen Programmen:: +* Unabhängige include-Abschnitte:: +@end menu + + +@node Point and click +@section Point and click + +@cindex point and click + +Point and click erlaubt es, die Noten in der Eingabedatei schnell +zu finden, indem man auf sie im PDF-Programm klickt. Das erleichtert +es, die Stellen zu finden, die Fehler in der Notation verursachen. + +Wenn diese Funktionalität aktiv ist, fügt LilyPond Hyperlinks zur +PDF-Datei hinzu. Diese Hyperlinks werden an den Webbrowser gesendet, +der einen Texteditor mit dem Cursor an der richtigen Stelle öffnet. + +Damit diese Kettenreaktion funktionieren kann, müssen Sie das +PDF-Programm dazu anweisen, Hyperlinks zu folgen, indem das Skript +@file{lilypond-invoke-editor}, welches mit LilyPond kommt, verwendet +wird. + +Für Xpdf unter UNIX sollte folgende Zeile in der Datei +@file{xpdfrc}@footnote{Unter UNIX findet man diese Datei +entweder in @file{/etc/xpdfrc} oder als @file{.xpdfrc} im +home-Verzeichnis.} stehen: + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +Das Programm @file{lilypond-invoke-editor} ist ein kleines +Hilfsprogramm. Es ruft einen Editor für besondere @code{textedit}-URIs# +auf und einen Webbrowser für andere. Es testes die Umgebungsvariable +@code{EDITOR} nach folgenden Mustern: + +@table @code +@item emacs + das ruft auf +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item gvim + das ruft auf +@example +gvim --remote +:@var{line}:norm@var{column} @var{file} +@end example + +@item nedit + das ruft auf +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +Die Umgebungsvariable @code{LYEDITOR} wird benutzt, um dieses Verhalten +zu umgehen. Sie enthält die Kommandozeile, mit der der Editor aufgerufen +wird, wobei @code{%(file)s}, @code{%(column)s} und @code{%(line)s} mit +der Datei, Spalte und Zeile ersetzt wird. Die Einstellung + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +für @code{LYEDITOR} entspricht dem normalen Aufruf von emacsclient. + + +@cindex Dateigröße, PDF +@cindex Ausgabedatei, Dateigröße + +Die point-and-click-Links vergrößern die Größe des PDFs sehr stark. +Um die Größe von PDFs und auch PS-Dateien zu verkleinern, kann +point and click ausgeschaltet werden, indem man in der Eingabedatei + +@example +\pointAndClickOff +@end example + +@noindent +schreibt. Point and click kann explizit aktiviert werden mit dem Befehl + +@example +\pointAndClickOn +@end example + +Alternativ können Sie point and click auch mit einer Kommandozeilenoption anschalten: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{Sie sollten immer point and click ausschalten, wenn Sie LilyPond-Dateien +verteilen wollen, damit keine Informationen über Ihre Dateistrukturen in den +Dateien gespeichert werden, was ein Sicherheitsrisiko darstellen könnte.} + + +@node Unterstützung von Texteditoren +@section Unterstützung von Texteditoren +@translationof Text editor support + +@cindex Editoren +@cindex vim +@cindex emacs +@cindex Modi, Editor +@cindex Syntaxhervorhebung +@cindex Hervorhebung, Syntax +@cindex Syntax highlight + +Verschiedene Editoren unterstützen LilyPond + +@menu +* Emacs-Modus:: +* Vim-Modus:: +* Andere Editoren:: +@end menu + +@node Emacs-Modus +@unnumberedsubsec Emacs-Modus +@translationof Emacs mode + +Emacs hat einen @file{lilypond-mode}-Modus, der Ergänzung von Befehlen, +Einrückung, Syntaxhervorhebung, die Paarung von LilyPond-Klammern, +einfache Tastaturkürzel zur Übersetzung und das Lesen von LilyPond-Dokumentation +mit Info unterstützt. Wenn @file{lilypond-mode} nicht auf Ihrem Computer +installiert ist, siehe unten. + +Ein Emacs-Modus zur Noteneingabe und zum Kompilieren mit LilyPond bfindet sich +in dem Quellarchiv im @file{elisp}-Verzeichnis. Führen Sie @command{make +install} aus, damit es nach @var{elispdir} installiert wird. Die Datei +@file{lilypond-init.el} sollte in @var{Ladepfad}@file{/site-start.d/} gespeichert +werden oder Ihrer @file{~/.emacs} bzw. @file{~/.emacs.el} hinzugefügt werden. + +Als ein Benutzer können Sie Ihren Quellpfad (z. B. @file{~/site-lisp/}) +zum @var{Ladepfad} hinzufügen, indem Sie die (veränderte) folgende +Zeile in Ihr @file{~/.emacs} kopieren: + +@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 Vim-Modus +@unnumberedsubsec Vim-Modus +@translationof Vim mode + +Für @uref{http://@/www@/.vim@/.org,Vim} gibt es ein Dateiartplugin, einen +Einzugsmodus und einen Syntaxhervorhebungsmodus für LilyPond. Um alle diese +Eigenschaften zu aktivieren, erstellen (oder verändern) Sie die Datei +@file{$HOME/.vimrc}, sodass sie folgende Zeilen enthält: + +@example +filetype off +set runtimepath+=/usr/local/share/lilypond/current/vim/ +filetype on +@end example + +@noindent +Wenn LilyPond nicht in @file{/usr/local/} installiert ist, müssen Sie +den Pfad anpassen. Das wird besprochen in +@rlearning{Mehr Information}. + + +@node Andere Editoren +@unnumberedsubsec Andere Editoren +@translationof Other editors + +Andere Editoren (sowohl Texteditoren als auch graphische Editoren) haben +Unterstützung für LilyPond, aber ihre besonderen Konfigurationsdateien werden +nicht mit LilyPond zusammen verteilt. Lesen Sie die entsprechende Dokumenation +zu näheren Fragen. Derartige Editoren finden sich unter @rweb{Leichteres Editieren}. + + +@node Von anderen Formaten konvertieren +@section Von anderen Formaten konvertieren +@translationof Converting from other formats + +LilyPond kann auch Musik aus diversen anderen Formaten importieren. +Dieses Kapitel beschreibt die dazu mit LilyPond mitgelieferten +Hilfsprogramme. Daneben existieren natürlich auch noch weitere +Programme, die Dateien für LilyPond erstellen können, wie etwa +graphische Sequenzierprogramme und XML-Konverter. Näheres dazu +findet sich auf der @uref{http://@/lilypond@/.org,Homepage} von LilyPond. + +Die im Folgenden beschriebenen Programme sind eigenständige Hilfsprogramme +und werden üblicherweise von der Kommandozeile aufgerufen. Siehe +@ref{Benutzung auf der Kommandozeile} für weitere Informationen. Wenn Sie MacOS +10.3 oder 10.4 benutzen und Probleme mit diesen Skripten (z. B. +@code{convert-ly}) haben, lesen Sie @rweb{MacOS X}. + +@knownissues +Leider haben wir nicht ausreichend viele Entwickler, um all die folgenden +Hilfsprogramme ständig zu warten. Wir stellen den aktuellen Stand zur +Verfügung, können aber leider Fehlerberichte nur selten bearbeiten. +Selbstverständlich sind Patches von Ihnen sehr willkommen! + + +@menu +* midi2ly aufrufen:: Import von MIDI. +* musicxml2ly aufrufen:: Import von MusicXML. +* abc2ly aufrufen:: Import von ABC. +* etf2ly aufrufen:: Import von (alten) Finale-Dateien. +* Andere Formate:: +@end menu + +@node midi2ly aufrufen +@subsection @command{midi2ly} aufrufen +@translationof Invoking midi2ly + +@cindex MIDI + +@command{midi2ly} übersetzt eine Typ@tie{}1 MIDI-Datei in eine +Eingabedatei für LilyPond. + +MIDI (Music Instrument Digital Interface) ist ein internationaler +Standard für digitale Instrumente: Es spezifiziert die Verkabelung, +ein serielles Protokoll und ein Dateiformat. Das MIDI-Dateiformat +ist der de-facto Standard um Musik von vielen Programmen zu exportieren. +Allerdings fehlen in den MIDI-Dateien viele Ausdrucks- und +Artikulationszeichen. Dennoch kann MIDI vielfach nützlich sein, +um Musik von einem Programm zu importieren, für das kein spezielles +Hilfsprogramm den direkten Import nach LilyPond unterstützt. + +@command{midi2ly} konvertiert die MIDI-Spuren nach @rinternals{Staff} und +MIDI-Kanäle in @rinternals{Voice} Kontexte. Tonhöhen werden relativ +angegeben, Tondauern nur wenn nötig. + +MIDI-Dateien können auch direkt von einem digitalen Keyboard +aufgenommen und dann in eine @file{.ly}-Datei konvertiert werden. +Allerdings sind Musikinterpretationen von Menschen (aus gutem Grund!) +rhythmisch nicht exakt genug um die Konvertierung von MIDI nach LY +trivial zu gestalten. Wenn @command{midi2ly} mit Quantisierung +(@code{-s} und @code{-d} Kommandozeilenoptionen) aufgerufen wird, +versucht es diese Unschärfen im Zeitablauf zu korrigieren, ist +allerdings nicht sonderlich gut darin. Daher können wir diese Technik +leider nicht für die Konvertierung von MIDI-Aufnahmen empfehlen. + + +@command{midi2ly} wird von der Kommandozeile folgendermaßen aufgerufen: +@example +midi2ly [@var{Optionen}]@dots{} @var{MIDI-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Von anderen Formaten konvertieren}. + +Die folgenden Kommandozeilenoptionen werden von @command{midi2ly} +unterstützt: + +@table @code +@item -a, --absolute-pitches +Gibt absolute Tonhöhen aus. + +@item -d, --duration-quant=@var{LÄNGE} +Quantisiert Tondauern zu Vielfachen von @var{LÄNGE}. + +@item -e, --explicit-durations +Gibt alle Tondauern explizit an. + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -k, --key=@var{acc}[:@var{Moll}] +Setzt die Standard-Tonart. @math{@var{acc} > 0} gibt die Anzahl der +Kreuze an, @math{@var{acc} < 0} gibt die Anzahl der Bs der Tonart an. +Eine Moll-Tonart wird durch @code{:1} angegeben. + +@item -o, --output=@var{Datei} +Die Ausgabe wird in die Datei @var{Datei}@file{.ly} geschrieben. + +@item -s, --start-quant=@var{LÄNGE} +Quantisiert den Beginn der Noten zu Vielfachen von @var{LÄNGE}. + +@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} +Erlaubt Tuplet-Dauern der Form @var{DUR}*@var{NUM}/@var{DEN}. + +@item -V, --verbose +Gibt ausführliche informative Meldungen während der Konvertierung aus. + +@item -v, --version +Gibt die Versionsnummer aus. + +@item -w, --warranty +Zeigt die Lizenzbedingungen und Urheberrechtshinweise. + +@item -x, --text-lyrics +Interpretiert alle Texte als Liedtexte. +@end table + + +@knownissues + +Überlappende Noten in einem Arpeggio werden nicht korrekt dargestellt. +Nur die erste Note wird eingelesen und konvertiert, die restlichen +werden ignoriert. Als Abhilfe können Sie alle Noten auf dieselbe +Tonlänge setzen und Phrasierungszeichen oder Pedalindikatoren +hinzufügen. + + +@node musicxml2ly aufrufen +@subsection @command{musicxml2ly} aufrufen +@translationof Invoking musicxml2ly + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} ist ein XML-Dialekt +zur Darstellung von Musiknotation. + +@command{musicxml2ly} wandelt eine MusicXML-Datei nach LilyPond um, +wobei sowohl die Noten, Artikulationszeichen, Struktur der Partitur, +Liedtexte etc. einer MusicXML-Datei (im @q{part-wise}-Format) in eine +@file{.ly}-Datei um. + +@command{musicxml2ly} wird von der Kommandozeile folgendermaßen aufgerufen: +@example +musicxml2ly [@var{Optionen}]@dots{} @var{XML-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Von anderen Formaten konvertieren}. + +Wenn als Dateiname @file{-} angegeben wird, liest @command{musicxml2ly} +Daten direkt von der Kommandozeile ein. + +Die folgenden Kommandozeilenoptionen werden von @command{musicxml2ly} +unterstützt: + +@table @code +@item -a, --absolute +Konvertiert in absolute Tonhöhen. + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -l, --language=SPRACHE +Benutzt SPRACHE für die Notenbezeichnungen, etwa "deutsch" für deutsche +Notenbezeichnungen. + +@item --lxml +Benutzt das lxml.etree Python-Paket für die Verarbeitung von XML (benötigt weniger Speicher und Rechenleistung) + +@item --nd --no-articulation-directions +Konvertiert keine Richtungsangaben (@code{^}, @code{_} oder @code{-}) +von Artikulations- und Lautstärkebezeichnungen. + +@item --no-beaming +Konvertiert keine Informationen über die Balkensetzung aus der +MusicXML-Datei. Stattdessen wird dies LilyPond überlassen. + +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird +als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung +an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so +erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}. + +@item -r,--relative +Konvertiert in relative Tonhöhen. (Standardeinstellung) + +@item -v, --verbose +Gibt ausführliche informative Meldungen während der Konvertierung aus. + +@item --version +Gibt die Versionsnummer aus. + +@item -z,--compressed +Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen. +Dies ist die Standardeinstellung für Dateien mit der Erweiterung +@file{.xml}. +@end table + + +@node abc2ly aufrufen +@subsection @command{abc2ly} aufrufen +@translationof Invoking abc2ly + +@warning{Dieses Programm ist nicht unterstützt und kann aus kommenden +LilyPond-Versionen entfernt werden.} + +@cindex ABC + +ABC ist ein relativ einfaches ASCII-basierendes Musikformat und ist +dokumentiert auf der ABC-Homepage: + +@quotation +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. +@end quotation + +@command{abc2ly} konvertiert ABC-Dateien nach LilyPond und wird +von der Kommandozeile folgendermaßen aufgerufen: + +@example +abc2ly [@var{Optionen}]@dots{} @var{ABC-Datei} +@end example + +Die folgenden Kommandozeilenoptionen werden von @command{abc2ly} +unterstützt: + +@table @code +@item -b,--beams=None +Die Balkensetzung aus der ABC-Datei erhalten. +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. +@item -s,--strict +Strenge Auslegung einer erfolgreichen Konvertierung. +@item -v,--version +Gibt die Versionsnummer aus. +@end table + +Es existiert außerdem die Möglichkeit, LilyPond-Befehle für die +Konvertierung mit @command{abc2ly} gleich in der ABC-Datei anzugeben. +Wenn sich etwa in der ABC-Datei das Kommentar + +@example +%%LY voices \set autoBeaming = ##f +@end example + +@noindent +befindet, so wird der Text nach dem Schlüsselwort @q{voices} direkt +in die aktuelle Stimme in der LilyPond-Datei eingefügt. + +Ebenso bewirkt + +@example +%%LY slyrics more words +@end example + +@noindent +dass alles nach dem @q{slyrics} Schlüsselwort an der aktuellen Stelle +im Liedtext eingefügt wird. Gleichermaßen wird mit + +@example +%%LY slyrics more words +@end example + +@noindent +der Text, der auf das @qq{slylrics}-Schlüsselwort folgt, in die aktuelle +Gesangstextzeile eingefügt. + + +@knownissues + +Der ABC-Standard ist eigentlich kein wirklich vollständiger Standard. +Für komplexere Notation wie etwa Polyphonie existieren verschiedene +Konventionen. + +Mehrere Lieder in einer Datei können nicht konvertiert werden. + +ABC synchronisiert den Liedtext am Anfang jeder Zeile mit den Noten, +@command{abc2ly} macht dies nicht. + +@command{abc2ly} ignoriert die Balkensetzung in der ABC-Datei. + + +@node etf2ly aufrufen +@subsection @command{etf2ly} aufrufen +@translationof Invoking etf2ly + +@warning{Dieses Programm ist nicht unterstützt und kann in kommenden +LilyPond-Versionen entfernt werden.} + +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) ist ein Dateiformat, das Coda +Music Technology in älteren Versionen des Programms Finale benutzt hat. + +@command{etf2ly} konvertiert Teile einer ETF-Datei nach LilyPond +und wird von der Kommandozeile folgendermaßen aufgerufen: + +@example +etf2ly [@var{Optionen}]@dots{} @var{ETF-Datei} +@end example + +Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des +jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe +@ref{Von anderen Formaten konvertieren}. + +Die folgenden Kommandozeilenoptionen werden von @command{etf2ly} +unterstützt: + +@table @code +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. +@item -o,--output=@var{Dateiname} +Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. +@item --version +Gibt die Versionsnummer aus. +@end table + + +@knownissues + +Die Liste der Artikulationszeichen is unvollständig. Leere Takte +verwirren @command{etf2ly}. Mehrfache Vorschlagnoten werden falsch +beendet. + + +@node Andere Formate +@subsection Andere Formate +@translationof Other formats + +@cindex Externe Programme, LilyPond-Dateien erstellen + +LilyPond kommt nicht mit der Unterstützung für andere Formate, aber einige +externe Programme können auch LilyPond-Dateien erstellen. Diese finden +sich unter @rweb{Leichteres Editieren}. + + + +@node LilyPond-Ausgabe in anderen Programmen +@section LilyPond-Ausgabe in anderen Programmen +@translationof LilyPond output in other programs + +Dieser Abschnitt stellt Methoden vor, wie Text und Musik auf andere +Weise kombiniert werden können als dies durch @command{lilypond-book} +automatisiert geschieht. + + +@menu +* Viele Zitate aus einer langen Partitur:: +* LilyPond-Noten in OpenOffice.org integrieren:: +* LilyPond-Noten in andere Programme integrieren:: +@end menu + +@node Viele Zitate aus einer langen Partitur +@subsection Viele Zitate aus einer langen Partitur +@translationof Many quotes from a large score + +Wenn aus einer großen Partitur viele kleine Fragmente eingefügt +werden sollen, kann dazu das @q{clip systems} Feature benutzt werden. +Siehe @ruser{Notationsfragmente extrahieren}. + + +@node LilyPond-Noten in OpenOffice.org integrieren +@subsection LilyPond-Noten in OpenOffice.org integrieren +@translationof Inserting LilyPond output into OpenOffice.org + +@cindex OpenOffice.org + +Musik im LilyPond-Format kann in OpenOffice.org eingefügt werden mittels +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. + + +@node LilyPond-Noten in andere Programme integrieren +@subsection LilyPond-Noten in andere Programme integrieren +@translationof Inserting LilyPond output into other programs + +Um die Ausgabe von LilyPond in anderen Programmen einzufügen, +sollte @code{lilypond} anstelle von @code{lilypond-book} +benutzt werden. Jedes Beispiel muss +getrennt manuell erzeugt und ins Dokument eingefügt werden; +für letzteres schlagen Sie bitte im Handbuch Ihrer +Textverarbeitungs-Software nach. Die meisten Programme +unterstützen das Einfügen von Grafiken im @file{PNG}-, @file{EPS}- +oder @file{PDF}-Format. + +Um den leeren Rand um die Notenzeilen zu verringern, können folgende +Einstellungen benutzt werden: + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +Eine @file{EPS}-Datei kann mit folgendem Befehl erzeugt werden: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts Dateiname.ly +@end example + +@noindent +eine @file{PNG}-Datei mittels: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png Dateiname.ly +@end example + + +@node Unabhängige include-Abschnitte +@section Unabhängige @code{include}-Abschnitte +@translationof independent includes + +Einige Leute haben große (und nützliche!) Code-Abschnitte geshrieben, +die man in vielen Projekten verwenden kann. Dieser Code wird möglicherweise +auch eines Tages in LilyPond selbst integriert werden, aber bis dahin +müssen Sie ihn selber herunterladen und mit @code{\include} selber +einfügen. + + +@menu +* MIDI-Artikulation:: +@end menu + + +@node MIDI-Artikulation +@subsection MIDI-Artikulation +@translationof MIDI articulation + +LilyPond kann benutzt werden, um MIDI-Ausgabe zu erzeugen, etwa +um hörend zu korrigieren, was man notiert hat. Jedoch werden nur +Dynamik, explizite Tempoänderungen und die Noten und Dauern selber +in der MIDI-Datei aufgenommen. + +Das @emph{articulate}-Projekt ist ein Versuch, mehr Information +in eine MIDI-Datei zu kopieren. Es funktioniert, indem man Noten, +die sich nicht unter Bögen befinden, verkürzt, um die Noten +zu @qq{artikulieren}. Die Stärke der Kürzung hängt von den +Aritkulationszeichen ab, die an die Noten gehängt werden: +Staccato halbiert den Notwert, Tenuto gibt der Note ihre gesamte Dauer +usw. Das Skript kann auch Triller und Doppelschläge in MIDI umwandeln, +und man könnte auch andere Ornamente implementieren. + +@example +@uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate} +@end example + +@knownissues + +Die größte Einschränkung ist, dass man nur die Sachen beeinflussen kann, +die man weiß: alles, was nur Textbeschriftung ist (anstelle einer Noteneigenschaft) +wird immernoch ignoriert. diff --git a/Documentation/de/usage/lilypond-book.itely b/Documentation/de/usage/lilypond-book.itely new file mode 100644 index 0000000000..6ee7b1e2bb --- /dev/null +++ b/Documentation/de/usage/lilypond-book.itely @@ -0,0 +1,1336 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Reinhold Kainhofer +@c Translation checkers: Till Paala + +@c Note: keep this node named so that `info lilypond-book' brings you here. +@node lilypond-book +@chapter @command{lilypond-book} aufrufen +@translationof lilypond-book + +Wenn Sie in ein Dokument Grafiken Ihres Musiksatzes einfügen möchten, so +können Sie genauso vorgehen, wie Sie andere Grafiken einfügen würden: Die +Bilder werden getrennt vom Dokument im PostScript- oder PNG-Format erstellt +und können dann in @LaTeX{} oder HTML eingefügt werden. + +@command{lilypond-book} automatisiert diesen Prozess: Dieses +Programm extrahiert Musik-Schnipsel aus Ihrem Dokument, +ruft @command{lilypond} auf und fügt die resultierenden Bilder +in Ihr Dokument ein. Die Länge der Zeilen und die Schriftgroße +werden dabei Ihrem Dokument angepasst. + +@command{lilypond-book} ist ein eigenständiges Programm und wird +üblicherweise von der Kommandozeile aufgerufen. Nähere Informationen +hierzu finden sich in @ref{Benutzung auf der Kommandozeile}. Wenn Sie MacOS 10.3 +oder 10.4 benutzen und Probleme mit @code{lilypond-book} haben, lesen +Sie @rweb{MacOS X}. + +Dieses Vorgehen kann bei @LaTeX{}, HTML, Texinfo oder DocBook Dokumenten +angewendet werden. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex Dokument, Noten einfügen in +@cindex HTML, Noten in +@cindex Texinfo, Noten in +@cindex DocBook, Noten in +@cindex @LaTeX{}, Noten in + + +@menu +* Ein musikwissenschaftlicher Text als Beispiel:: +* Noten in Text integrieren:: +* Die Musikfragment-Optionen:: +* lilypond-book aufrufen:: +* Dateiendungen:: +* lilypond-book-Vorlagen:: +* Das Inhaltsverzeichnis flexibel einsetzen:: +* Alternative Methoden Text und Musik zu kombinieren:: +@end menu + +@node Ein musikwissenschaftlicher Text als Beispiel +@section Ein musikwissenschaftlicher Text als Beispiel +@translationof An example of a musicological document + + +@cindex Musikwissenschaft + +Zahlreiche Texte enthalten Musikbeispiele: musikwissenschaftliche +Abhandlungen, Liederbücher oder Handbücher wie dieses. Solche +Texte können händisch erzeugt werden, indem einfach die Musikbeispiele +als Grafik (PostScript, PNG, GIF, etc.) im Textverarbeitungsprogramm +eingefügt werden. Für HTML, @LaTeX{}, Texinfo und DocBook Dokumente +existiert jedoch ein Weg, dies automatisiert durchzuführen. + +Das Programm @code{lilypond-book} extrahiert die Musikfragmente aus +dem Dokument, formatiert sie automatisiert in eine Grafik und fügt die +resultierenden Notenbeispiele dann wieder in das Dokument ein. Dies soll +hier an einem einfachen @LaTeX{}-Beispiel verdeutlicht werden. Das Beispiel +selbst enthält schon Erklärungen, sodass wir es hier nicht weiter diskutieren +müssen. + +@subheading Eingabe + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Dokumente für \verb+lilypond-book+ können Musik und Text nach Belieben +kombinieren. Zum Beispiel: + +\begin{lilypond} +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +\end{lilypond} + +Optionen für \verb+lilypond+ werden dabei in eckige Klammern gesetzt. + +\begin{lilypond}[fragment,quote,staffsize=26,verbatim] + c'4 f16 +\end{lilypond} + +Größere Beispiele können auch in einer eigenständigen Datei gespeichert +und dann mit \verb+\lilypondfile+ eingebunden werden. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(Falls nötig kann @file{screech-boink.ly} durch eine beliebige andere +@file{.ly}-Datei im selben Verzeichnis wie diese Datei ersetzt werden.) + +\end{document} +@end verbatim +@end quotation + +@subheading Verarbeitung + +Speichern Sie den obigen @LaTeX{}-Quellcode in eine Datei @file{lilybook.lytex} +und führen Sie dann in der Kommandozeile folgende Befehle aus: + +@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{..(viele Ausgabezeilen entfernt)..} +@emph{Compiling lilybook.tex...} +cd out +pdflatex lilybook +@emph{..(viele Ausgabezeilen entfernt)..} +xpdf lilybook +@emph{(Ersetzen Sie @command{xpdf} durch Ihren PDF-Betrachter)} +@end example + +Die Ausführung von @command{lilypond-book} und @command{latex} erzeugt +zahlreiche temporäre Dateien, die das Arbeitsverzeichnis unnötig +vollstopfen würden. Daher empfiehlt sich die Benutzung der @code{--output=@var{dir}} +Option, wodurch die Dateien im Unterverzeichnis @file{dir} erzeugt werden. + +Das Endresultat des obigen @LaTeX{}-Beispiels ist im nächsten Abschnitt +zu sehen.@footnote{Da dieses Handbuch mit Texinfo erzeugt wurde, +kann sich das Aussehen des Beispiels leicht von dem mit @LaTeX{} +erzeugten unterscheiden.} + +@page + +@subheading Ausgabe + +Dokumente für @command{lilypond-book} können Musik und Text nach Belieben +kombinieren. Zum Beispiel: + +@lilypond +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +@end lilypond + +Optionen für @command{lilypond} werden dabei in eckige Klammern gesetzt. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Größere Beispiele können auch in einer eigenständigen Datei gespeichert +und dann mit @code{\lilypondfile} eingebunden werden. + +@lilypondfile[quote,noindent]{screech-boink.ly} + +Wenn man eine @code{tagline} (die Zeile unten auf der Seite) braucht +(in Standard oder angepasst), dann muss der ganze Schnipsel in eine +@code{\book @{ @}}-Umgebung. + +@lilypond[papersize=a8,verbatim] +\book{ + \header{ + title = "A scale in LilyPond" + } + + \relative c' { + c d e f g a b c + } +} +@end lilypond + +@page + + + +@node Noten in Text integrieren +@section Noten in Text integrieren +@translationof Integrating music and text + +In diesem Abschnitt soll die Integration von LilyPond mit den +verschiedenen Dateiformaten detailliert erläutert werden. + +@menu +* LaTeX:: +* Texinfo:: +* HTML:: +* DocBook:: +@end menu + +@node LaTeX +@subsection @LaTeX{} +@translationof LaTeX + + +@LaTeX{} ist der de-facto Standard zur Publikation von wissenschaftlichen Texten +in Naturwissenschaft und Technik. Es basiert auf dem Schriftsetzer @TeX{}, +der die bestmögliche Typographie erzeugt. + +Siehe die @uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/german/, +@emph{@LaTeX{}2e-Kurzbeschreibung}} für eine Einführung in die +Benutzung von @LaTeX{}. + +Musikbeispiele können eingegeben werden als + +@example +\begin@{lilypond@}[Optionen,kommen,hierhin] + IHR LILYPOND-QUELLCODE +\end@{lilypond@} +@end example + +@noindent +oder + +@example +\lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} +@end example + +@noindent +oder + +@example +\lilypond@{ IHR LILYPOND-QUELLCODE @} +@end example + +Zusätzlich kann mit @code{\lilypondversion} die benutzte Versionsnummer +von LilyPond angezeigt werden. Der Aufruf von @command{lilypond-book} +liefert eine Datei, die dann mit @LaTeX{} weiter verarbeitet werden kann. + +Dies soll hier an einigen Beispielen gezeigt werden. Die @code{lilypond}-Umgebung + +@example +\begin@{lilypond@}[quote,fragment,staffsize=26] + c' d' e' f' g'2 g'2 +\end@{lilypond@} +@end example + +@noindent +erzeugt + +@lilypond[quote,fragment,staffsize=26] +c' d' e' f' g'2 g'2 +@end lilypond + +Die Kurzversion + +@example +\lilypond[quote,fragment,staffsize=11]@{@} +@end example + +@noindent +erzeugt + +@lilypond[quote,fragment,staffsize=11]{} + +@noindent +Innerhalb des @code{\lilypond@{@}} Befehls dürfen keine geschwungenen +Klammern @code{@{} oder @code{@}} vorkommen, weshalb dieser Befehl +nur mit der @code{fragment}-Option Sinn macht. + +Die Standardzeilenlänge wird bestimmt, indem die Angaben in der Dokumentpräambel, +also dem Teil der @LaTeX{} Datei vor dem @code{\begin@{document@}}, +analysiert werden. Der @command{lilypond-book}-Befehl sendet diese +Angaben an @LaTeX{}, um herauszufinden, wie breit der Text tatsächlich +ist. Die Breite der Notenzeilen wird dann an diese Textbreite angepasst. +Ein derartig heuristischer Algorithmus kann natürlich auch versagen, +wobei man in diesem Fall die Breite auch explizit durch die +@code{line-width} Option des @code{\lilypond@{@}} oder @code{\begin@{lilypond@}} +Befehls angeben kann. + +@cindex Titel und lilypond-book +@cindex \header in @LaTeX{}-Dokumenten + +Jedes Musikbeispiele ruft die folgenden Makros auf, wenn sie vom Benutzer +definiert wurden: + +@itemize @bullet +@item @code{\preLilyPondExample} -- wird vor der Musik aufgerufen, + +@item @code{\postLilyPondExample} -- wird nach der Musik aufgerufen, + +@item @code{\betweenLilyPondSystem[1]} -- wird zwischen den einzelnen +Systemen aufgerufen, wenn @code{lilypond-book} das Beispiel in verschiedene +PostScript Dateien getrennt hat. Dieser @LaTeX{}-Befehl muss so definiert +werden, dass er genau ein Argument erhält, nämlich die Zahl der bereits +in @LaTeX{} eingefügten Dateien dieses Beispiels. Als Standard wird einfach +ein @code{\linebreak} eingefügt. +@end itemize + +@ignore +Broken stuff. :( + +@cindex Latex, Feta Schriftart +@cindex fetachar + +Um Zeichen wie Auflösungszeichen, Kreuze, Fermaten etc. aus der Feta-Schriftart +von LilyPond in @LaTeX{} einzufügen, muss @code{\input@{titledefs@}} benutzt werden, +wodurch dann der Befehl @code{\fetachar} zur Verfügung steht. + +@example +\documentclass[a4paper]@{article@} + +\input@{titledefs@} + +\begin@{document@} + +\fetachar\fetasharp + +\end@{document@} +@end example + +Die Namen der Symbole sind in der Datei @file{feta20.tex} definiert. Sie finden +den Pfad zu dieser Datei mit dem Befehl + +@example +kpsewhich feta20.tex +@end example + +@end ignore + +@snippets + +Manchmal ist es nötig, Musikelemente wie Halte- oder Bindebögen so darzustellen, +als ob sie am Ende des Musikausschnittes noch weitergehen würden. Eine solche +Ausgabe kann erreicht werden, indem ein Zeilenumbruch in die Notenzeile +eingefügt wird und die Ausgabe der folgenden Notenzeile unterdrückt wird. + +In @LaTeX{} wird dazu der Befehl @code{\betweenLilyPondSystem} einfach derartig +programmiert, dass die Ausgabe der einzelnen Notensysteme abgebrochen wird, +sobald die gewünschte Anzahl an Systemen erreicht ist. Da +@code{\betweenLilyPondSystem} zum ersten Mal nach dem ersten System aufgerufen +wird, ist die Ausgabe nur eines Systems trivial. + +@example +\def\betweenLilyPondSystem#1@{\endinput@} + +\begin@{lilypond@}[fragment] + c'1\( e'( c'~ \break c' d) e f\) +\end@{lilypond@} +@end example + +Um eine größere Zahl an System nötig, dann muss dementsprechend eine +@TeX{}-Bedingung vor dem @code{\endinput} benutzt werden: + +@example +\def\betweenLilyPondSystem#1@{ + \ifnum##1<2\else\endinput\fi +@} +@end example + +Dieses Beispiel bricht nach genau zwei ausgegebenen Notenzeilen ab. +Für eine andere Anzahl braucht nur @q{2} durch die entsprechende +Anzahl ersetzt werden. + +Die Definition von @code{\betweenLilyPondSystem} bleibt gültig, +bis @TeX{} die aktuelle Umgebung in @LaTeX{} verlässt oder der +Befehl durch eine neue Definition überschrieben wird. +Dies kann etwa folgendermaßen in der @LaTeX{}-Datei geschehen: + +@example +\let\betweenLilyPondSystem\undefined +@end example + +Obige Definition von @code{\betweenLilyPondSystem} kann durch die +Definition eines @TeX{}-Makros auch verallgemeinert werden, + +@example +\def\onlyFirstNSystems#1@{ + \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} +@} +@end example + +@noindent +wobei diesem Makro @code{\onlyFirstNSystems} einfach die Anzahl der +gewünschten Systeme übergeben wird: + +@example +\onlyFirstNSystems@{3@} +\begin@{lilypond@}...\end@{lilypond@} +\onlyFirstNSystems@{1@} +\begin@{lilypond@}...\end@{lilypond@} +@end example + +@seealso +@command{lilypond-book} stellt auch zahlreiche Kommandozeilen-Optionen zur +Verfügung. Für eine Liste dieser Optionen und andere hilfreiche Details zur +Verarbeitung von @LaTeX{}-Dokumenten, siehe @ref{lilypond-book aufrufen}. + + + + +@node Texinfo +@subsection Texinfo +@translationof Texinfo + +Texinfo ist das Standard-Dokumentationsformat des GNU Projekts. Ein Beispiel +für ein Dokument im Texinfo Format ist dieses Handbuch, wobei die HTML-, PDF- und +Info-Versionen alle aus demselben Texinfo Dokument erzeugt werden. + +In der Eingabedatei wir Musik eingegeben als + +@example +@@lilypond[Optionen,kommen,hier] + IHR LILYPOND-QUELLCODE +@@end lilypond +@end example + +@noindent +oder + +@example +@@lilypond[Optionen,kommen,hier]@{ IHR LILYPOND-QUELLCODE @} +@end example + +@noindent +oder + +@example +@@lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} +@end example + +Zusätzlich kann mit @code{@@lilypondversion} die aktuelle Versionsnummer +von LilyPond angezeigt werden. + +Wenn @command{lilypond-book} eine derartige Datei verarbeitet, +wird eine Texinfo-Datei mit der Erweiterung @file{.texi} erzeugt, +die @code{@@image} Befehle für die Ausgabe nach HTML, Info und PDF +enthält. @command{lilypond-book} erzeugt die entsprechenden Grafiken +der Musikbeispiele im EPS- und PDF-Format für die Ausgabe nach PDF +und im PNG-Format für die Ausgabe nach HTML und Info. + +Hier sollen zwei einfache Beispiele gezeigt werden. Eine @code{lilypond} Umgebung + +@example +@@lilypond[fragment] +c' d' e' f' g'2 g' +@@end lilypond +@end example + +@noindent +erzeugt + +@lilypond[fragment] +c' d' e' f' g'2 g' +@end lilypond + +Die Kurzversion + +@example +@@lilypond[fragment,staffsize=11]@{@} +@end example + +@noindent +erzeugt + +@lilypond[fragment,staffsize=11]{} + +Im Gegensatz zu @LaTeX{} erzeugt @code{@@lilypond@{...@}} allerdings keine Grafik +im Fließtext, sondern setzt sie immer in einen eigenen Absatz. + + +@node HTML +@subsection HTML +@translationof HTML + +Noten werden eingegeben als + +@example + +\key c \minor c4 es g2 + +@end example + +@noindent +@command{lilypond-book} erzeugt dann daraus eine HTML-Datei mit den entsprechenden +@code{} Tags für die Musikbeispiele in jeweils einem eigenen Absatz. + +@lilypond[fragment,relative=2] +\key c \minor c4 es g2 +@end lilypond + +Für Grafiken im Fließtext kann @code{} benutzt werden, wobei +die Optionen durch einen Doppelpunkt von der Musik getrennt angegeben werden. + +@example +Musik in derselben Zeile. +@end example + +Um Dateien mit Musik einzubinden, kann folgendermaßen vorgegangen werden: + +@example +@var{Dateiname} +@end example + +Eine Liste der Optionen, die man mit @code{lilypond} oder @code{lilypondfile} +benutzen kann, siehe @ref{Die Musikfragment-Optionen} + +Zusätzlich gibt @code{} die aktuelle Versionsnummer +von LilyPond aus. + + +@node DocBook +@subsection DocBook +@translationof DocBook + + +Bei der Einbindung von Musik im LilyPond-Format in DocBook soll die +Konformität unseres DocBook Dokuments erhalten bleiben und damit +die Bearbeiten mit DocBook-Editoren sowie die Validierung weiter +möglich bleiben. Aus diesem Grund werden in DocBook keine eigenen Tags +wie in HTML benutzt, sondern die von den vorhandenen DocBook-Elementen +vorgegebenen Konventionen entsprechend benützt. + +@subheading Definitionen + +Für die Einbindung von LilyPond Code werden in allen Fällen die +@code{mediaobject} und @code{inlinemediaobject} Elemente benutzt, +die unsere Beispiele in einem eigenen Absatz oder im Fließtext +einfügen. Die Optionen zur Formatierung mit LilyPond werden dabei +in der @code{role} Eigenschaft des innersten Elements angegeben, +wie im nächsten Abschnitt gezeigt wird. Die DocBook Datei, die +dann von @command{lilypond-book} verarbeitet wird, sollte der Klarheit +halber die Dateierweiterung @file{.lyxml} (jedenfalls nicht +@file{.xml}) besitzen. + +@subheading Eine LilyPond-Datei einfügen + +Dies ist der einfachste Fall: Die LilyPond-Datei besitzt die Erweiterung +@file{.ly} und wird einfach als @code{imageobject} eingebettet: + +@example + + + + + +@end example + +Für das äußerste Element kann je nach Bedarf @code{mediaobject} oder +@code{inlinemediaobject} benutzt werden. + +@subheading LilyPond-Code einfügen + +Die Einbindung von LilyPond-Code direkt in der DocBook-Datei ist +durch die Benutzung von @code{programlisting} möglich, +wobei die Sprache auf @code{lilypond} gesetzt wird: + +@example + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@end example + +Das äußerste Element ist also @code{mediaobject} oder +@code{inlinemediaobject}, welches ein @code{textobject} mit dem +@code{programlisting} enthält. + +@subheading Ein DocBook-Dokument übersetzen + +Der Aufruf von @command{lilypond-book} mit der @file{.lyxml}-Datei +erzeugt ein gültiges DocBook-Dokument mit der Erweiterung @file{.xml}, +welches normal weiterverarbeitet werden kann. Bei Benutzung von +@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex} wird daraus +automatisch eine PDF-Datei erzeugt. Für die Erzeugung von HTML (HTML +Hilfe, JavaHelp, etc.) können die offiziellen DocBook XSL-Stylesheets +benutzt werden. Eventuell müssen dafür allerdings kleinere Anpassungen +vorgenommen werden. + + +@node Die Musikfragment-Optionen +@section Die Musikfragment-Optionen +@translationof Music fragment options + +Im Folgenden meint @q{LilyPond-Befehl} einen beliebigen in den vorgehenden +Abschnitten beschriebenen Befehl, der ein LilyPond-Fragment in eine Datei +einfügt und von @command{lilypond-book} verarbeitet wird. Der Einfachheit +halber werden hier alle LilyPond-Befehle in der Syntax von @LaTeX{} +dargestellt. + +Zu beachten ist, dass die Optionen eines LilyPond-Befehls von links +nach rechts verarbeitet werden. Wenn eine Option also mehrfach angegeben +wird, wird nur die letzte benutzt. + +Die folgenden Optionen können für LilyPond-Befehle benutzt werden: + +@table @code +@item staffsize=@var{ht} +Setzt die Höhe einer Notenzeile auf @var{ht}, angegeben in Punkten. + +@item ragged-right +Erzeugt Notenzeilen im Flattersatz mit natürlichem Abstand der Noten. In +anderen Worten: @code{ragged-right = ##t} wird in das Musikfragment +eingefügt. Dies ist die Standardeinstellung für den +@code{\lilypond@{@}}-Befehl, +wenn die Option @code{line-width} nicht angegeben wird. +Ebenso ist dies die Standardeinstellung für die @code{lilypond}-Umgebung, +wenn die Option @code{fragment}, aber keine Zeilenlänge +explizit angegeben ist. + +@item noragged-right +Streckt Musikfragmente mit nur einer Notenzeile auf die volle Breite, +es wird also @code{ragged-right = ##f} in das Musikfragment eingefügt. + +@item line-width +@itemx line-width=@var{Breite}\@var{Einheit} +Setzt die Breite der Notenzeilen auf @var{Breite}, gemessen in Vielfachen +der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen angegeben +werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese Option hat +nur Einfluss auf die Breite von Notenzeilen und Text im Musikfragment, nicht +jedoch auf den restlichen Text des Dokuments. + +Wird diese Option ohne einen Wert angegeben, wird die Zeilenbreite auf +einen Standardwert gesetzt, der durch einen heuristischen Algorithmus +bestimmt wird. + +Wenn die @code{line-width}-Option nicht angegeben wird, versucht +@command{lilypond-book} einen geeigneten Standardwert für alle +@code{lilypond}-Umgebungen zu finden, die die @code{ragged-right}-Option +nicht benutzen. + +@item papersize=@var{Zeichenkette} +Wobei @var{Zeichenkette} eine Papiergröße wie definiert in @file{scm/paper.scm} +ist, beispielsweise @code{a5}, @code{quarto}, @code{11x17} usw. + +Werte, die nicht in @file{scm/paper.scm} definiert sind, werden ignoriert, +eine Warnung wird ausgegeben und das Schnipsel wird mit dem Standardwert +@code{a4} ausgegeben. + +@item notime +Verhindert die Ausgabe der Taktangabe am Anfang des Fragments und schaltet +Taktstriche und alle Taktangaben im Fragment ab. + +@item fragment +Bewirkt, dass @command{lilypond-book} Standardcode um das Fragment herum einfügt, sodass z. B. + +@example +c'4 +@end example + +@noindent +ohne @code{\layout}, @code{\score}, etc. eingegeben werden kann. + +@item nofragment +Verhindert das Einfügen von Standardcode um das Fragment herum. Dies ist +die Standardeinstellung, insofern ist diese Option im Normalfall unnötig. + +@item indent=@var{Einzug}\@var{Einheit} +Setzt den Einzug des ersten Notensystems auf @var{Einzug}, gemessen in +Vielfachen der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen +angegeben werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese +Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im +Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. + +@item noindent +Setzt den Einzug des ersten Notensystems auf 0. Diese +Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im +Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. Dies +ist die Standardeinstellung, insofern ist diese Option im Normalfall +unnötig. + +@item quote +Verringert die Zeilenlänge des Musikfragments um @math{2*0.4}@dmn{in} +und setzt das Fragment in einen Zitat-Block. Der Wert von @q{0.4@dmn{in}} +kann durch die @code{exampleindent} Option angepasst werden. + +@item exampleindent +Setzt den Betrag, um den das Fragment bei Benutzung der @code{quote} +Option eingerückt wird. + +@item relative +@itemx relative=@var{n} +Benutzt relative Oktavenbezeichnungen. Standardmäßig werden Noten relativ +zum mittleren C angegeben. Das optionale ganzzahlige Argument +gibt die Oktave der ersten Note an, wobei die Standardeinstellung von +@code{1} das mittlere C bedeutet. Die @code{relative} Option macht nur +Sinn in Verbindung mit der @code{fragment} Option, weshalb @code{fragment} +automatisch durch die Angabe der @code{relative} Option impliziert wird. +Eine explizite Angabe der @code{(no)fragment} Option hat keinen Effekt. +@end table + + +LilyPond benutzt zur Erzeugung seiner eigenen Dokumentation ebenfalls +@command{lilypond-book}. Zu diesem Zweck stehen noch zahlreiche +spezialisierte Optionen zur Verfügung: + +@table @code +@item verbatim +Der LilyPond-Code im LilyPond-Kommando wird zum einen benutzt, um das +Musikfragment in eine Grafik mit schönem Notensatz zu konvertieren, +andererseits aber auch wörtlich in das Dokument eingefügt. Dies +geschieht in einem @q{verbatim}-Block, gefolgt vom Text einer +möglicherweise angegebenen @code{intertext} Option@footnote{Die +@code{intertext} Option ist noch nicht implementiert.} und der +Grafik des tatsächlichen Notensatzes. Diese Option funktioniert nur +fehlerhaft, wenn @code{\lilypond@{@}} im Fließtext benutzt wird. + +Wird @code{verbatim} in Verbindung mit einem @code{lilypondfile}-Kommando +benutzt, so ist es auch möglich, nur ein Teil der Datei wörtlich einfügen +zu lassen: Wenn die eingebundene LilyPond-Datei ein Kommentar mit dem Inhalt +@samp{begin verbatim} (ohne Anführungszeichen) enthält, wird nur der +Dateiinhalt ab dieser Position eingefügt. Enthält die Datei mehrere +solche Kommentare, wirkt nur das letzte. Analog wird nur der Dateiinhalt +bis zu einem etwaigen Kommentar mit dem Inhalt @samp{end verbatim} +eingefügt. Im folgenden Beispiel wird das gesamte Musik für die +Erzeugung der Grafik im relativen Oktavenmodus interpretiert, der +wörtlich in das Dokument kopierte LilyPond-Code zeigt den @code{relative}-Befehl jedoch nicht. + +@example +\relative c' @{ % begin verbatim + c4 e2 g4 + f2 e % end verbatim +@} +@end example + +@noindent +erzeugt ein Zitat der Form + +@example + c4 e2 g4 + f2 e +@end example + +@noindent +Wenn Kommentare und Variablen im Zitat, aber nicht im Quelltext +übersetzt werden sollen, kann die Umgebungsvariable @code{LYDOC_LOCALEDIR} +auf einen Verzeichnispfad gesetzt werden. Das Verzeichnis sollte +einen Baum an @file{.mo}-Nachrichtenkatalogen beinhalten mit +@code{lilypond-doc} als Domain. + +@item addversion +(Nur innerhalb von Texinfo-Dateien.) Stellt @code{\version +@@w@{"@@version@{@}"@}} an den Beginn des Fragments der Ausgabe mit +@code{verbatim}. + +@item texidoc +(Nur innerhalb von Texinfo-Dateien.) Wird @command{lilypond} mit der +Kommandozeilenoption @option{--header=@/texidoc} für eine Datei +@file{foo.ly} und enthält die Datei ein @code{texidoc}-Feld im +@code{\header}-Block, so wird dessen Inhalt in die Datei +@file{foo.texidoc} ausgegeben. Die @code{texidoc} Option veranlasst +@code{lilypond-book}, den Inhalt dieser @file{.texidoc} Dateien innerhalb +eines Dokumentationsblocks direkt vor dem Musikfragment in das aktuelle +Dokument einzufügen. + +Enthält also die Datei @file{foo.ly} etwa den LilyPond-Code + +@example +\header @{ + texidoc = "Dieses Beispiel zeigt eine einzelne Note." +@} +@{ c'4 @} +@end example + +@noindent +und das Texinfo-Dokument @file{text.texinfo} + +@example +@@lilypondfile[texidoc]@{foo.ly@} +@end example + +@noindent +so liefert der folgende Aufruf von @code{lilypond-book} das gewünschte +Ergebnis: + +@example +lilypond-book --pdf --process="lilypond \ + -dbackend=eps --header=texidoc" test.texinfo +@end example + +Die meisten Test-Dateien (im @file{input/} Verzeichnis von LilyPond) +sind kleine @file{.ly} Dateien von genau dieser Form. + +Auch die Übersetzung dieser zusätzlichen Kommentare ist möglich: +Dazu muss das Texinfo-Dokument den Befehl @code{@@documentlanguage @var{LANG}} +und der @code{\header} Block in der Datei @file{foo.ly} +die Übersetzung im Feld @code{texidoc@var{LANG}} enthalten. Wird nun +@command{lilypond} mit der Option @option{--header=@/texidoc@var{LANG}} +aufgerufen, so wird der Inhalt der Datei @file{foo.texidoc@var{LANG}} +anstelle von @file{foo.texidoc} eingefügt. + +@item lilyquote +(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt wie die +@code{quote} Option, außer dass nur das Musikfragment (und natürlich optional der +gesamte LilyPond-Code bei Benutzung von @code{verbatim}) in den Zitatblock +eingefügt wird. Dies ist nützlich, wenn Sie ein Musikfragment zitieren möchten, +nicht aber dessen @code{texidoc} Dokumentationsblock. + +@item doctitle +(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt ähnlich wie die +@code{texidoc} Option: Wenn @command{lilypond} mit der Option +@option{--header=@/doctitle} aufgerufen wird und die Eingabedatei +@file{foo.ly} ein Feld @code{doctitle} im @code{\header}-Block enthält, +wird dessen Wert in die Datei @file{foo.doctitle} geschrieben. Wird die +@code{doctitle} Option für ein Musikfragment benutzt, so wird der Inhalt +dieser Datei, der eine einzelne Textzeile sein sollte, im Texinfo-Dokument +als @code{@@lydoctitle @var{Text}} eingefügt. @code{@@lydoctitle} muss +allerdings in Ihrem Texinfo-Dokument als Makro selbst definiert werden. +Die Übersetzung funktioniert völlig analog zu @code{texidoc}. + +@item nogettext +Nur für Texinfo-Ausgabe: Kommentare und Variablenbezeichnungen im +zitierten Quelltext des Schnipsel werden nicht übersetzt. + +@item printfilename +Wenn eine LilyPond-Datei mittels @code{\lilypondfile} und dieser Option +eingebunden wird, wird der Dateiname (ohne die Pfadangabe) unmittelbar vor +dem Musikfragment ausgegeben. In HTML-Dateien ist er außerdem ein Link +auf die LilyPond-Datei. Nur der eigentliche Name der Datei wird +ausgegeben, der Pfad wird also nicht mit angezeigt. + +@end table + + +@node lilypond-book aufrufen +@section @command{lilypond-book} aufrufen +@translationof Invoking lilypond-book + +@command{lilypond-book} erzeugt abhängig vom Ausgabeformat eine Datei mit +einer der folgenden Dateierweiterungen: @file{.tex}, @file{.texi}, +@file{.html} oder @file{.xml}. Alle @file{.tex}, @file{.texi} und +@file{.xml} Dateien müssen noch mit den entsprechenden Programmen (@LaTeX{}, +DocBook, etc.) weiter verarbeitet werden, um druckfähige Dateien zu erhalten. + + +@subheading Formatabhängige Anweisungen + +@subsubheading @LaTeX{} + +Es existieren zwei Methoden, Ihr @LaTeX{}-Dokument weiter zu verarbeiten, +um zu einer druck- oder publikationsfähigen Datei zu gelangen: +Zum einen die direkte Erzeugung einer PDF-Datei mit PDF@LaTeX{}, zum +anderen die Erzeugung einer DVI daraus einer PostScript-Datei mittels +@LaTeX{} und einem DVI-nach-PostScript Konverters wie @command{dvips}. +Die erste Methode ist einfacher und daher empfehlenswert.@footnote{Manchmal +kann eine Datei entweder von PDF@LaTeX{} oder von @LaTeX{} nicht korrekt +verarbeitet werden, weshalb hier beide Methoden beschrieben werden.} Welche +Methode auch immer benutzt wird, die Konvertierung zwischen PostScript und +PDF kann leicht mit Hilfsprogrammen wie @command{ps2pdf} und @command{pdf2ps} +(aus dem Ghostscript-Paket) erfolgen. + +Um eine PDF-Datei mittels PDF@LaTeX{} zu erzeugen, kann folgendermaßen +vorgegangen werden: + +@example +lilypond-book --pdf Ihre_Datei.pdftex +pdflatex Ihre_Datei.tex +@end example + +@cindex Konturschriften +@cindex Type1 Schriften +@cindex dvips +@cindex Aufruf von dvips + +Um eine PDF-Datei mittels @LaTeX{}/@command{dvips}/@command{ps2pdf} zu +erhalten, sind folgende Befehle nötig: + +@example +lilypond-book Ihre_Datei.lytex +latex Ihre_Datei.tex +dvips -Ppdf Ihre_Datei.dvi +ps2pdf Ihre_Datei.ps +@end example + +@noindent +Die @file{.dvi}-Datei, die beim Aufruf von @command{latex} erzeugt wird, +scheint keine Notenköpfe zu enthalten, was in Ordnung ist. Wenn Sie die +Datei wie beschrieben weiter verarbeiten, erscheinen die Notenköpfe korrekt +in den @file{.ps} und @file{.pdf} Dateien. + +Der Aufruf von @command{dvips} kann einige Warnungen über fehlende +Schriftarten ausgeben. Auch dies ist in Ordnung und kann ignoriert werden. + +Wenn Sie in der @LaTeX{}-Datei das Papierformat auf Querformat eingestellt +haben, vergessen Sie nicht die @code{-t landscape}-Option beim +Aufruf von @command{dvips}. + + +@subsubheading Texinfo + +Um ein von @command{lilypond-book} erzeugtes Texinfo-Dokument zu +verarbeiten, gehen Sie wie für alle anderen Texinfo-Dokumente vor: +Rufen Sie -- abhängig vom gewünschten Ausgabeformat -- eines der Programme +@command{texi2pdf}, @command{texi2dvi}, @command{makeinfo} oder +@command{texi2html} auf. + +@ifinfo +@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, und @ref{Creating an Info File, , , texinfo, GNU Texinfo}. +@end ifinfo +@ifnotinfo +Die Dokumentation von Texinfo liefert dazu nähere Informationen. +@end ifnotinfo + + +@subheading Optionen auf der Kommandozeile + +@command{lilypond-book} unterstützt die folgenden Kommandozeilenoptionen: + +@table @code +@item -f @var{Format} +@itemx --format=@var{Format} +Gibt das Format des Eingabedokuments an: @code{html}, @code{latex}, +@code{texi} (Standardeinstellung), @code{texi-html} oder @code{docbook}. +Ist diese Option nicht angegeben, versucht @command{lilypond-book} das +Format anhand des Dateinamens zu bestimmen. Im Moment bedeutet @code{texi} +praktisch dasselbe wie @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} +Leitet die Musikfragmente durch das Programm @var{filter} anstatt sie +mit Lilypond zu einer Grafik zu verarbeiten. @option{--filter} und +@option{--process} kann nicht gleichzeitig benutzt werden. Beispielaufruf: + +@example +lilypond-book --filter='convert-ly --from=2.0.0 -' Mein-Buch.tely +@end example + +@item -h +@itemx --help +Gibt eine kurze Hilfemeldung aus. + +@item -I @var{Pfad} +@itemx --include=@var{Pfad} +Fügt @var{Pfad} zu den Include-Pfaden hinzu. @command{lilypond-book} sucht +auch in allen Include-Pfaden nach bereits erstellten Grafiken für die +Musikfragmente. Wird das aktuelle Fragment gefunden und hat sich seit der +letzten Erstellung nicht geändert, wird es nicht erneut erzeugt. Bei manchen +der Programme zur Weiterverarbeitung wie etwa @command{makeinfo} oder +@command{latex} muss dieselbe @code{-I @var{Pfad}} Option angegeben werden, +damit das entsprechende Programm die Grafiken ebenso findet. + +@item -o @var{Verzeichnis} +@itemx --output=@var{Verzeichnis} +Erzeugt die Ausgabedateien in @var{Verzeichnis}. Der Aufruf von +@command{lilypond-book} erzeugt zahlreiche kleine Dateien, die von +LilyPond, @command{latex}, @command{makeinfo} etc. dann weiter benützt +werden. Um zu vermeiden, dass das Quellenverzeichnis durch diese +Dateien unübersichtlich wird, kann die @option{--output} Option benutzt +werden. Vor dem Aufruf von @command{latex} oder @command{makeinfo} +sollten Sie in dieses Verzeichnis wechseln. + +@example +lilypond-book --output=out IhreDatei.lytex +cd out +... +@end example + +@itemx --skip-lily-check +Nicht mit einer Fehlermeldung abbrechen, wenn keine Ausgabe von LilyPond +gefunden wird. Dies wird benutzt für Dokumentation ohne Grafiken. + +@itemx --skip-png-check +Nicht mit einer Fehlermeldung abbrechen, wenn für die EPS-Dateien keine +PNG-Grafiken gefunden werden. Dies wird benutzt für Dokumentation ohne +Grafiken. + +@itemx --lily-output-dir=@var{Verzeichnis} +Schreibt @file{lily-XXX} Dateien nach @var{Verzeichnis} und erzeugt +im mit @code{--output} angegebenen Verzeichnis Verknüpfungen darauf. +Diese Option ist nützlich, um Zeit zu sparen, wenn Dokumente in +verschiedenen Verzeichnissen viele identische Musikfragmente +enthalten. + +@itemx --info-images-dir=@var{Verzeichnis} +Formatiert die Texinfo-Ausgabe dergestalt, dass Info in @var{Verzeichnis} +nach den Grafiken zu den Musikfragmenten sucht. + +@itemx --latex-program=@var{Programm} +Führt @command{Programm} anstelle von @command{latex} aus. Dies ist +nützlichen, wenn das Dokument mit einer anderen @LaTeX{}-Variante +wie etwa @command{xelatex} verarbeitet werden soll. + +@itemx --left-padding=@var{Einrückung} +Fügt @var{Einrückung} als zusätzlichen Einzug in die EPS-Box ein. +@var{Einrückung} wird in Millimetern angegeben, die Standardeinstellung +ist 3.0 Millimeter. Diese Option kann benutzt werden, wenn die Notenzeilen +über den Rand des Dokuments hinausstehen. + +Die Breite eines eng ausgeschnittenen Notensystems kann variieren +aufgrund von Notationselementen, die über den linken Rand hinausstehen, +wie etwa Taktzahlen und Bezeichnungen der Instrumente. Diese Option +verkürzt die Notenzeile und verschiebt sie um denselben Betrag nach +rechts. + + +@item -P @var{Befehl} +@itemx --process=@var{Befehl} +Verarbeitet LilyPond-Fragmente mit @var{Befehl} anstelle des +Standardbefehls @code{lilypond}. @code{--filter} und @code{--process} +können nicht mit dieser Option benutzt werden. + +@item --pdf +Erzeugt PDF-Dateien mit PDF@LaTeX{}. + +@item -V +@itemx --verbose +Gibt ausführliche informative Meldungen aus. + +@item -v +@itemx --version +Gibt die Versionsnummer aus. +@end table + +@knownissues + +Der Texinfo-Befehl @code{@@pagesizes} wird ignoriert. Ebenso werden +@LaTeX{}-Befehle ignoriert, die den Seitenrand oder die Zeilenlänge +nach der Dokumentpräambel verändern. + +Nur der erste @code{\score}-Block eines LilyPond-Fragments wird verarbeitet. + + +@node Dateiendungen +@section Dateiendungen +@translationof Filename extensions + +Für die Eingabedatei kann zwar jede beliebige Dateinamenserweiterung benutzt +werden, allerdings muss bei Verwendung einer nicht bekannten Erweiterung +das Ausgabeformat explizit an @command{lilypond-book} angegeben werden. +Details dazu finden sich im Abschnitt @ref{lilypond-book aufrufen}. +Wird eine bekannte Erweiterung benutzt, wählt @command{lilypond-book} +automatisch das richtige Ausgabeformat basierend auf der Erweiterung der +Eingabedatei: + +@quotation +@multitable @columnfractions .2 .5 +@item @strong{Erweiterung} @tab @strong{Ausgabeformat} +@item +@item @file{.html} @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 + +Wird dieselbe Erweiterung für die Eingabedatei wie für die Ausgabedatei +benutzt und befindet sich die Eingabedatei im aktuellen Arbeitsverzeichnis +von @command{lilypond-book}, muss die @code{--output} Option für +@command{lilypond-book} benutzt werden. Anderenfalls würde +@command{lilypond-book} ja die Eingabedatei überschreiben, weshalb das +Programm in diesem Fall mit einer Fehlermeldung wie @qq{Fehler: Ausgabe +würde Eingabedatei überschreiben; verwenden Sie --output.} abbricht. + + +@node lilypond-book-Vorlagen +@section @command{lilypond-book}-Vorlagen +@translationof lilypond-book templates + +Diese Vorlagen sollen mit @code{lilypond-book} benutzt werden. Wenn Sie sich +mit dem Programm nicht auskennen, lesen Sie bitte +@ref{lilypond-book}. + +@subsection LaTeX + +Sie können LilyPond-Fragmente in ein LaTeX-Dokument einfügen: + +@example +\documentclass[]@{article@} + +\begin@{document@} + +Normaler LaTeX-Text. + +\begin@{lilypond@} +\relative c'' @{ + a4 b c d +@} +\end@{lilypond@} + +Weiterer LaTeX-Text und Optionen in eckigen Klammern. + +\begin@{lilypond@}[fragment,relative=2,quote,staffsize=26,verbatim] +d4 c b a +\end@{lilypond@} +\end@{document@} +@end example + +@subsection Texinfo + +LilyPond-Fragmente können in Texinfo-Dokumente eingefügt werden: dieses gesamte +Handbuch wurde in Texinfo geschrieben. + +@example +\input texinfo @c -*-texinfo-*- +@@node Top +@@top + +Texinfo-Text + +@@lilypond +\relative c' @{ + a4 b c d +@} +@@end lilypond + +Weiterer Texinfo-Text und Optionen in Klammern. + +@@lilypond[verbatim,fragment,ragged-right] +d4 c b a +@@end lilypond + +@@bye +@end example + + +@subsection html + +@example + + + + + +

+Dokumente für lilypond-book können Noten und Text frei kombinieren. Zum +Beispiel + +\relative c'' @{ + a4 b c d +@} + +

+ +

+Noch etwas LilyPond, mit Optionen: + + +a4 b c d + +

+ + + + + +@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. +\end{document} +@end verbatim + + +@node Das Inhaltsverzeichnis flexibel einsetzen +@section Das Inhaltsverzeichnis flexibel einsetzen +@translationof Sharing the table of contents + +Diese Funktionen existieren schon im OrchestraLily-Paket: + +@example +@url{http://repo.or.cz/w/orchestrallily.git} +@end example + +Um den Text flexibler behandeln zu können, bevorzugen manche Benutzer es, +das Inhaltsverzeichnis aus LilyPond zu exportieren und dann mit +@LaTeX{} einzulesen. + +@subsubheading Das Ihaltsverzeichnis (ToC) aus LilyPond exportieren + +Hier wird angenommen, dass in Ihrer Partitur mehrere Sätze vorkommen, die +sich alle in der selben LilyPond-Datei befinden. + +@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 Das Inhaltsverzeichnis in LaTeX importieren + +In der LaTeX-Datei sollte folgendes enthalten: + +@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 +wobei @code{\includescore} wiefolgt definiert ist: + +@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 Alternative Methoden Text und Musik zu kombinieren +@section Alternative Methoden Text und Musik zu kombinieren +@translationof Alternate methods of mixing text and music + +Andere Methoden, Text und Noten miteinander zu kombinieren (ohne +@command{lilypond-book} zu benutzen) werden beschrieben in +@ref{LilyPond-Ausgabe in anderen Programmen}. diff --git a/Documentation/de/usage/running.itely b/Documentation/de/usage/running.itely new file mode 100644 index 0000000000..1972deb33d --- /dev/null +++ b/Documentation/de/usage/running.itely @@ -0,0 +1,876 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92 + + 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" + +@c Translators: Reinhold Kainhofer, Till Paala +@c Translation checkers: Till Paala + +@node lilypond starten +@chapter @command{lilypond} starten +@translationof Running lilypond + +Dieses Kapitel behandelt die technischen Details, wie Lilypond ausgeführt werden kann. + + +@menu +* Übliche Programmbenutzung:: +* Benutzung auf der Kommandozeile:: +* Fehlermeldungen:: +* Häufige Fehlermeldungen:: +@end menu + +@node Übliche Programmbenutzung +@section Übliche Programmbenutzung +@translationof Normal usage + +Die meisten Benutzer führen LilyPond von einer graphischen Benutzeroberfläche +aus. Siehe @rlearning{Übung}, falls Sie dies nicht bereits getan haben. Wenn +Sie einen alternativen Editor für Ihre LilyPond-Dateien verwenden, lesen Sie +bitte die Dokumentation dieses Editors. + + +@node Benutzung auf der Kommandozeile +@section Benutzung auf der Kommandozeile +@translationof Command-line usage + +Dieser Abschnitt enthält zusätzliche Informationen, wie Sie LilyPond +von der Kommandozeile ausführen können. Dies kann erforderlich sein, +um etwa zusätzliche Optionen an das Programm zu übergeben. Außerdem +sind einige Zusatzprogramme (wie etwa @code{midi2ly}) nur von der +Kommandozeile verfügbar. + +Unter @q{Kommandozeile} verstehen wir die Kommandozeile des jeweiligen +Betriebssystems. Windows Benutzern ist sie vielleicht eher unter den +englischen Begriffen @q{DOS shell} oder @q{command shell} bekannt. +MacOS@tie{}X Benutzer kennen sie eher unter @q{Terminal} oder @q{Konsole}. +Einige zusätzliche Einrichtungsarbeiten werden unter MacOS@tie{}X, +siehe @rweb{MacOS X}. + +Wie die Kommandozeile im jeweiligen Betriebssystem benutzt werden kann, +soll in diesem Handbuch nicht näher beschrieben werden. Sehen Sie bitte +im Handbuch Ihres Betriebssystems nach oder informieren Sie sich im +Internet, wenn Sie mit der Kommandozeile nicht vertraut sind. + + +@menu +* lilypond aufrufen:: +* Optionen von lilypond auf der Kommandozeile:: +* Umgebungsvariablen:: +* LilyPond in chroot-Kerker:: +@end menu + +@node lilypond aufrufen +@subsection @command{lilypond} aufrufen +@translationof Invoking lilypond + +@cindex @command{lilypond} aufrufen +@cindex Kommandozeilen-Optionen für @command{lilypond} +@cindex Optionen an der Kommandozeile + +Das @command{lilypond} Programm kann folgendermaßen von der Kommandozeile +aufgerufen werden. + +@example +lilypond [@var{Option}]@dots{} @var{Dateiname}@dots{} +@end example + + +Wird ein @file{Dateiname} ohne Erweiterung angegeben, so wird @file{.ly} als +Standarderweiterung für LilyPond-Dateien benutzt. Um Daten von +@code{stdin} einzulesen, benutzen Sie einfach einen Bindestrich (@code{-}) +als @var{Dateiname}. + +Wenn Lilypond die Datei @file{Dateiname.ly} verarbeitet, werden daraus +die Dateien @file{Dateiname.ps} und @file{Dateiname.pdf} erzeugt. +Es können an @code{lilypond} auch mehrere @file{.ly} Dateien übergeben +werden, die dann einzeln und voneinander unabhängig abgearbeitet +werden.@footnote{Der Zustand von GUILE wird allerdings nicht nach +jeder Datei zurückgesetzt, sodass Achtung geboten ist, wenn in einer +Datei globale Änderungen von Scheme aus durchgeführt werden.} + +Falls @file{Dateiname.ly} mehr als eine @code{\book}-Umgebung enthält, +werden die weiteren Stücke in durchnummerierte Dateien der Form +@file{Dateiname-1.pdf} ausgegeben. Zusätzlich wird der Wert der +Variable @code{output-suffix} zwischen den ursprünglichen Dateinamen +und der Zahl eingefügt. Eine Lilypond-Datei @file{Dateiname.ly} mit dem Inhalt + +@example +#(define output-suffix "Geige") +\score @{ @dots{} @} +#(define output-suffix "Cello") +\score @{ @dots{} @} +@end example + +@noindent +erzeugt daher die Dateien @var{Dateiname}@file{-Geige.pdf} und +@var{Dateiname}@file{-Cello-1.pdf}. + + + +@unnumberedsubsubsec Häufige Kommandozeilenbefehle + +Wenn Ihre Kommandozeile normale Weiterleitungen unterstützt, können +Sie es nützlich finden, mit folgenden Befehlen die Ausgabe der +Kommandozeile in eine Datei zu leiten: + +@itemize + +@item +@code{lilypond file.ly 1>stdout.log} um normale Ausgabe zu erhalten +@item +@code{lilypond file.ly 2>stderr.log} um Fehlermeldungen zu erhalten + +@item +@code{lilypond file.ly &>all.log} um alle Meldungen zu erhalten + +@end itemize + +Wenden Sie sich an die Dokumentation für Ihre Kommandozeile, um +zu sehen, ob derartige Optionen unterstützt werden oder die Syntax +unterschiedlich ist. Beachten Sie, dass es sich hier um +reine Verwaltungsprogramme handelt, die nichts mit LilyPond zu tun +haben. + + +@node Optionen von lilypond auf der Kommandozeile +@subsection Optionen auf der Kommandozeile für @command{lilypond} +@translationof Command line options for lilypond + +Die folgenden Kommandozeilenoptionen werden von @command{lilypond} unterstützt: + +@cindex @command{lilypond} auf der Kommandozeile +@cindex Kommandozeile, @command{lilypond} aufrufen +@cindex Optionen, Kommandozeile +@cindex Terminal, @command{lilypond} aufrufen + +@table @code + +@item -e,--evaluate=@var{expr} +Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien +gelesen und interpretiert werden. +Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke +werden nacheinander ausgewertet. + +Da der Ausdruck im @code{guile-user} Modul ausgewertet wird, ist bei der +Definitionen innerhalb von @var{expr} folgendes Vorgehen nötig. An der +Kommandozeile wird z.B. @code{a} im @code{guile-user} Modul definiert: + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +Am Beginn der @file{.ly}-Datei muss dann das @code{guile-user} Modul noch geladen werden, bevor die Definition von @var{a} verfügbar ist: + +@example +#(use-modules (guile-user)) +@end example + + +@item -f,--format=@var{Format} +Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind +@code{svg}, @code{ps}, @code{pdf} und @code{png}. + +Beispiel: @code{lilypond -fpng @var{Dateiname}.ly} + + + +@item -d,--define-default=@var{Variable}=@var{Wert} +Damit wird die interne Programmoption @var{Variable} auf den Scheme-Wert +@var{Wert} gesetzt. Wird kein @var{Wert} angegeben, so wird @var{#t} benutzt. +Um eine Option auszuschalten, kann der Präfix @code{no-} dem Namen +@var{Variable} der Variable vorangestellt werden. So ist etwa + +@cindex Point and Click, Kommandozeile + +@example +-dno-point-and-click +@end example + +@noindent +dasselbe wie +@example +-dpoint-and-click='#f' +@end example + +Hier sind ein paar interessante Optionen: + +@cindex Hilfe, Kommandozeile + +@table @samp +@item help +Die Ausführung von @code{lilypond -dhelp} zeigt alle verfügbaren @code{-d} +Optionen. + +@cindex Papierformat, Kommandozeile + +@item paper-size +Setzt das Standard-Papierformat, +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Die Zeichenkette, die das Format angibt, muss in Anführungszeichen mit Backslash +( @code{\"} ) stehen. + +@cindex sicher, Kommandozeile +@cindex safe, Kommandozeile + +@item safe +Vertraut der @file{.ly} Datei nicht. + +Wenn LilyPond über einen Webserver verfügbar gemacht wird, @b{MUSS} unbedingt +eine die Optionen @code{--safe} oder @code{--jail} angegeben werden. +Die @code{--safe} Option verhindert, dass in der @file{.ly}-Datei angegebener +Scheme-Code das System gefährden kann, wie etwa in folgendem Beispiel: + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +Mit der @code{-dsafe} Option werden alle Scheme-Ausdrücke einem speziellen +sicheren Modus ausgewertet. Dieser Modus ist vom GUILE @file{safe-r5rs} Modul +abgeleitet und fügt noch zahlreiche weitere erlaubte Funktionen der +LilyPond Programm-Schnittstelle hinzu. Diese Funktionen sind in +@file{scm/safe-lily.scm} angegeben. + +Zusätzliche verbietet der sichere Modus auch @code{\include} Befehle. + +Im sicheren Modus ist es nicht möglich, LilyPond-Variablen nach Scheme +zu exportieren. + +@code{-dsafe} erkennt jedoch @emph{KEINE} Überbeanspruchung der verfügbaren +Ressourcen. In diesem Modus ist es also trotzdem möglich, dass LilyPond in einer +Endlosschleife hängt, z.B. wenn zyklische Datenstrukturen an das Backend +übergeben werden. Wenn LilyPond also auf einem öffentlich zugänglichen +Webserver verfügbar gemacht wird, sollte der Prozess sowohl in der CPU- +als auch in der Speichernutzung limitiert werden. + +Der sichere Modus verhindert auch, dass zahlreiche nützliche +Musikfragmente von LilyPond verarbeitet werden. Die @code{--jail} Option ist +eine sicherere Alternative, benötigt allerdings auch mehr Aufwand zur +Einrichtung. + +@cindex Ausgabeformat, Definition von + +@item backend +Gibt an, welches Ausgabeformat das LilyPond Backend benutzt. Mögliche Werte +für diese Option sind: + +@table @code +@item ps +PostScript-Ausgabeformat. + +@cindex PostScript Ausgabeformat + +Postscript-Dateien enthalten auch TTF-, Type1- und OTF-Schriften. Allerdings +wird die gesamte Schriftart eingefügt und nicht nur die benötigten Zeichen. +Vor allem wenn nicht-westliche Zeichensätze benutzt werden, kann dies zu sehr +großen Dateien führen. + +@cindex PostScript Ausgabeformat +@cindex EPS (encapsulated PostScript) + +@item eps +Erzeugt @q{encapsulated PostScript} (EPS). Jede Seite (oder jedes System) wird +als eigene @file{EPS}-Datei ausgegeben, inklusive Schriftarten. Außerdem wird +eine Datei mit allen Seiten (bzw. Systemen) und Schriftarten erzeugt. + +Dies ist die Standardeinstellung von @command{lilypond-book}. + +@cindex SVG (scalable vector graphics) +@cindex Vektorgraphik (SVG) + +@item svg + +SVG-Ausgabe (Scalable Vector Graphics). + +Hiermit wird eine einzelne SVG-Datei ohne eingebundene Schriften +für jede Seite der Partitur erstellt. Es wird empfohlen, Century +Schoolbook-Schriftarten zu installieren, die auch in der LilyPond-Installation +enthalten sind, um optimales Rendern zu erhalten. Unter UNIX können +diese Schriftarten einfach aus dem LilyPond-Verzeichnis (normalerweise +@file{/usr/share/lilypond/@/VERSION/fonts/otf/}) nach @file{~/.fonts} +kopiert werden. Die SVG-Ausgabe sollte mit allen SVG-Editoren oder +Betrachtungsprogrammen kompatibel sein. + +@cindex Scheme-dump + +@item scm +gibt die rohen Scheme-basierenden Zeichenbefehle aus, wie sie intern von +LilyPond benutzt werden. + +@cindex Scheme dump + +@item null +Keine Partitur wird ausgegeben, hat gleichen Effekt wie @code{-dno-print-pages}. + +@end table + +Beispiel: @code{lilypond -dbackend=svg @var{Dateiname}.ly} + +@cindex Vorschau + +@item preview +Erzeugt eine Ausgabedatei, die nur die Titelzeilen und das erste System +enthält. Wenn @code{\bookpart}-Umgebungen benutzt werden, erscheinen die +Titel und ersten Systeme jedes @code{\bookpart}-Abschnitts in der Datei. +Die Backends @code{ps}, @code{eps} und @code{svg} unterstützen diese Option. + +@item print-pages +Erzeugt vollständige Seiten (Standardeinstellung). @code{-dno-print-pages} +ist in Verbindung mit @code{-dpreview} nützlich. + +@end table + + + +@item -h,--help +Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. + +@item -H,--header=@var{FELD} +Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei +@file{Dateiname.@var{FELD}} aus. + +@item --include, -I=@var{Verzeichnis} +Fügt @var{Verzeichnis} zur Liste der Suchpfade hinzu. + +@cindex Dateisuche +@cindex Suchpfad + +Mehrere -I-Optionen können angegeben werden. Die Suche beginnt mit dem +ersten definierten Verzeichnis und setzt in den weiteren Verzeichnissen +fort, wenn die gesuchte Datei nicht in dem Verzeichnis gefunden wird. + +@item -i,--init=@var{Initialisierungsdatei} +Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der +Standardwert ist @file{init.ly}. + +@cindex Verzeichnis, Ausgabe speichern in +@cindex Ausgabedateiname + +@item -o,--output=@var{DATEI} +Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei +@var{DATEI}. Wenn ein Verzeichnis mit dem Namen existiert, werden die Ausgabedateien +in dieses Verzeichnis gespeichert, wobei der Dateiname der Eingabedatei +benutzt wird. Die entsprechende Dateinamenserweiterung wird angehängt (z.B. +@code{.pdf} für pdf). + +@cindex PostScript-Ausgabe + +@item --ps +Erzeugt PostScript. + +@cindex PNG-Ausgabe +@cindex Portable Network Graphics (PNG) + +@item --png +Erzeugt eine Grafik-Datei im PNG-Format von jeder Seite. Diese Option +impliziert auch @code{--ps}. Die Auflösung in DPI der Grafik kann festgelegt +werden durch +@example +-dresolution=110 +@end example + +@cindex PDF-Ausgabe +@cindex Portable Document Format (PDF) + +@item --pdf +Erzeugt PDF-Dateien. Dies impliziert @code{--ps}. + +@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis} +Führt @command{lilypond} in einem chroot-Jail aus. + +Die @code{--jail} Option ist eine flexiblere Alternative zu @code{--safe}, wenn +LilyPond über das Internet verfügbar gemacht wird oder LilyPond-Quelldateien +von Dritten automatisch verarbeitet werden. + +Sie funktioniert dergestalt, dass das Wurzelverzeichnis von +@command{lilypond} auf @var{Jail-Verzeichnis} gesetzt wird, bevor die +tatsächliche Kompilierung der @file{.ly}-Datei beginnt. Der Benutzer und die Gruppe +werden auf die angegebenen Werte gesetzt und das aktuelle Arbeitsverzeichnis +wird ebenfalls auf den angegebenen Wert @var{Arbeitsverzeichnis} gesetzt. +Diese Einstellungen garantieren (zumindest in der Theorie), dass es nicht +möglich ist, aus dem Jail auszubrechen. Damit @code{--jail} funktioniert, muss +@command{lilypond} allerdings als root ausgeführt werden, was normalerweise +auf sichere Art mit dem Kommando @command{sudo} erreicht werden kann. + +Das Jail-Verzeichnis zu erstellen ist etwas heikel, da LilyPond alle zur +Ausführung nötigen Bibliotheken und Dateien @emph{innerhalb des +Jail-Verzeichnisses} finden muss. Ein typisches Setup besteht aus folgenden +Punkten: + +@table @asis +@item Erstellung eines getrennten Dateisystems +Ein eigenes Dateisystem muss für LilyPond erstellt werden, sodass es mit +sicheren Einstellungen wie @code{noexec}, @code{nodev} und @code{nosuid} +eingebunden werden kann. Damit ist es unmöglich, Programme von diesem +Dateisystem auszuführen oder direkt auf eine Hardware-Schnittstelle +zuzugreifen. Wenn Sie keine eigene Partition erstellen möchten, können Sie +auch eine Datei der entsprechenden Größe erstellen und sie als @q{loop}-Gerät +einbinden. Ein getrenntes Dateisystem garantiert auch, dass LilyPond nicht +mehr Festplattenspeicher benutzt als erlaubt. + +@item Erstellung eines eigenen Benutzerkontos +Es sollte ein eigener Benutzer und eine eigene Gruppe (z. B. +@code{lily}/@code{lily}) mit geringen Rechten für die Ausführung von LilyPond +innerhalb des Jails benutzt werden. Nur ein einziges Verzeichnis des Jails sollte +für den Benutzer schreibbar sein und als @var{Arbeitsverzeichnis} an +@code{lilypond} übergeben werden. + +@item Einrichtung des Jails +LilyPond muss zahlreiche Dateien für die Ausführung einlesen. All diese +Dateien müssen in das Jail-Verzeichnis kopiert werden (mit denselben Pfaden +wie im tatsächlichen Wurzel-Dateisystem). Die gesamte LilyPond-Installation +(typischerweise @file{/usr/share/lilypond}) sollte kopiert werden. + +Falls Probleme auftreten, ist es am einfachsten, Lilypond mittels +@command{strace} zu starten, wodurch Sie relativ leicht feststellen können, +welche Dateien im Jail noch fehlen. + +@item Ausführung von LilyPond +In einem mit @code{noexec} eingebundenen Jail ist es nicht möglich, externe +Programme auszuführen. Daher muss LilyPond auf eine Art gestartet werden, +die keine weitere Ausführung von Programmen benötigt. Wie bereits erwähnt +muss LilyPond mit Administrator-Rechten gestartet werden (die es allerdings +sofort wieder abgibt), beispielsweise mittels @command{sudo}. Außerdem +ist es eine gute Idee, die LilyPond zur Verfügung stehende CPU-Zeit zu +limitieren (z. B. mit @command{ulimit -t}) und -- falls das Betriebssystem +dies unterstützt -- auch den zur Verfügung stehenden Hauptspeicher. +@end table + + +@item -v,--version +Gibt die Versionsnummer aus. + +@item -V,--verbose +Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade +aller gelesenen Dateien sowie Informationen über die Laufzeit. + +@item -w,--warranty +Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht +@strong{KEINERLEI GARANTIE}!) +@end table + + +@node Umgebungsvariablen +@subsection Umgebungsvariablen +@translationof Environment variables + +@cindex LANG +@cindex LILYPOND_DATADIR +@cindex Variablen, Umgebungs- +@cindex Umgebungsvariablen + +@command{lilypond} erkennt und benützt die folgenden Umgebungsvariablen: +@table @code +@item LILYPOND_DATADIR +Diese Variable gibt das Verzeichnis an, wo Lilypond seine eigenen Dateien, +Meldungen und Übersetzungen finden kann. Dieses Verzeichnis sollte +Unterverzeichnisse @file{ly/}, @file{ps/}, @file{tex/}, etc. beinhalten. + +@item LANG +Gibt die Sprache an, in der Warnungen und Fehlermeldungen ausgegeben werden. + +@item LILYPOND_GC_YIELD +Eine Variable (von 1 bis 100), die die Speicherverwaltung regelt. Bei +niedrigeren Werten wird mehr Prozessor-Zeit, dafür weniger Hauptspeicher +benötigt. Voreinstellung ist ein Wert von @code{70}. + +@end table + + + +@node LilyPond in chroot-Kerker +@unnumberedsubsec LilyPond in chroot-Kerker +@translationof LilyPond in chroot jail + +Einen Server einzurichten, der LilyPond in einem chroot-Kerker bedient, ist +recht kompliziert. Die einzelnen Schritten finden sich unten aufgeliestet. +Beispiele sind für Ubuntu Linux und erfordern evtl. die Benutzung von +@code{sudo} an den entsprechenden Stellen. + +@itemize + +@item Installieren Sie die nötigen Pakete: LilyPond, GhostScript und ImageMagick. + +@item Erstellen Sie einen neuen Benutzer mit dem Namen @code{lily}: + +@example +adduser lily +@end example + +@noindent +Hierdurch wird auch eine Gruppe @code{lily} und ein Heimat-Ordner +@code{/home/lily} für den neuen Benutzer erstellt. + +@item Im Heimat-Ordner des Benutzers @code{lily} erstellen Sie eine Datei, die als +eigenes Dateisystem eingesetzt wird: + +@example +dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000 +@end example + +@noindent +In diesem Beispiel wird eine 200-MB-Datei als Kerker-Dateisystem erstellt. + +@item Erstellen Sie ein loop device, erstellen Sie ein Dateisystem und +mounten Sie es, dann erstellen Sie dort einen Ordner, in dem der Benutzer +@code{lily} Schreibrechte hat: + +@example +mkdir /mnt/lilyloop +losetup /dev/loop0 /home/lily/loopfile +mkfs -t ext3 /dev/loop0 200000 +mount -t ext3 /dev/loop0 /mnt/lilyloop +mkdir /mnt/lilyloop/lilyhome +chown lily /mnt/lilyloop/lilyhome +@end example + +@item In der Konfiguration des Servers ist der Kerker (JAIL) @code{/mnt/lilyloop} +und das Verzeichnis (DIR) @code{/lilyhome}. + +@item Erstellen Sie einen großen Verzeichnisbaum in dem Kerker, indem Sie die +notwendigen Dateien dorthin kopiert, wie das Beispielskript unten zeigt. + +Sie könne @code{sed} benutzen, um die notwendigen Kopierbefehle für ein +bestimmtes Programm zu erstellen: + +@example +for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ + do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ + cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ + \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done +@end example + +@end itemize + +@subheading Beispiel-Skript für 32-bit Ubuntu 8.04 + +@example +#!/bin/sh +## defaults set here + +username=lily +home=/home +loopdevice=/dev/loop0 +jaildir=/mnt/lilyloop +# the prefix (without the leading slash!) +lilyprefix=usr/local +# the directory where lilypond is installed on the system +lilydir=/$lilyprefix/lilypond/ + +userhome=$home/$username +loopfile=$userhome/loopfile +adduser $username +dd if=/dev/zero of=$loopfile bs=1k count=200000 +mkdir $jaildir +losetup $loopdevice $loopfile +mkfs -t ext3 $loopdevice 200000 +mount -t ext3 $loopdevice $jaildir +mkdir $jaildir/lilyhome +chown $username $jaildir/lilyhome +cd $jaildir + +mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp +chmod a+w tmp + +cp -r -L $lilydir $lilyprefix +cp -L /bin/sh /bin/rm bin +cp -L /usr/bin/convert /usr/bin/gs usr/bin +cp -L /usr/share/fonts/truetype usr/share/fonts + +# Now the library copying magic +for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ + "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ + \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ + 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ + | sed '/.*=>.*/d'; done | sh -s + +# The shared files for ghostscript... + cp -L -r /usr/share/ghostscript usr/share +# The shared files for ImageMagick + cp -L -r /usr/lib/ImageMagick* usr/lib + +### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, +### you should be able to run: +### Note that /$lilyprefix/bin/lilypond is a script, which sets the +### LD_LIBRARY_PATH - this is crucial + /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly +@end example + + +@node Fehlermeldungen +@section Fehlermeldungen +@translationof Error messages + +@cindex error messages +@cindex Fehlermeldungen + +Während der Verarbeitung einer Dateien können diverse Meldungen an der +Kommandozeile auftreten: + +@table @emph + +@item Warnung (Warning) +@cindex Warnung +Irgendetwas ist verdächtig. Wenn Sie etwas Ungewöhnliches in Ihrer +Datei durchführen, dann werden Sie die Meldung verstehen und können +sie gegebenenfalls ignorieren. Im Normalfall jedoch bedeutet eine +Warnung, dass mit Ihrer Datei etwas nicht stimmt, LilyPond jedoch +trotzdem versucht, die Datei soweit wie möglich korrekt zu übersetzen. + +@item Fehler (Error) +@cindex Fehler +Irgendetwas stimmt definitiv nicht. Der aktuelle Bearbeitungsschritt +(Einlesen, Interpretieren oder Formatieren der Datei) wird noch fertig +ausgeführt, danach bricht die Bearbeitung aber ab. + +@item Fataler Fehler (Fatal error) +@cindex Fataler Fehler +Irgendetwas stimmt definitiv nicht und LilyPond kann nicht weiter +ausgeführt werden. Dies ist nur sehr selten der Fall, meist sind +die Schriftarten nicht korrekt installiert. + +@item Scheme Fehler (Scheme error) +@cindex Fehlerprotokoll, Scheme +@cindex Scheme Fehler +Fehler, die während der Ausführung von Scheme-Code auftreten, werden +vom Scheme-Interpreter aufgefangen und an der Kommandozeile ausgegeben. +Wenn Sie LilyPond mit der @code{--verbose} Option (auch @code{-V}) +ausführen, wird der sogenannte @q{Call trace} ausgegeben, der die +aufgerufenen Funktionen zur Zeit des Fehlers angibt. + +@item Programmierfehler (Programming error) +@cindex Programmierfehler +Eine interne Inkonsistenz ist aufgetreten. Diese Fehlermeldungen +sollen den Programmierern die Fehlersuche erleichtern und +können meistens einfach ignoriert werden. In manchen Fällen werden +so viele Meldungen ausgegeben, dass die Lesbarkeit der restliche +Ausgabe davon beeinträchtigt wird. + +@item Abgebrochen (core dumped) +Dies bezeichnet einen ernsten Programmierfehler, der das Programm +zum Absturz gebracht hat. Solche Fehler werden als kritisch angesehen. +Falls daher einer auftritt, senden Sie bitte einen Bug-Report! +@end table + +@cindex Fehlermeldung, Format +@cindex Form der Fehlermeldungen +Wenn Warnungen oder Fehlermeldungen mit einer konkreten Stelle in der +Eingabedatei verknüpft werden können, dann hat die Meldung die folgende +Form: + +@example +@var{Dateiname}:@var{Zeile}:@var{Spalte}: @var{Meldung} +@var{Fehlerhafte Eingabezeile} +@end example + +Ein Zeilenumbruch wird in der fehlerhaften Zeile an jener Stelle eingefügt, +wo der Fehler aufgetreten ist. Zum Beispiel + +@example +test.ly:2:19: Fehler: keine gültige Dauer: 5 + @{ c'4 e' + 5 g' @} +@end example + +Diese Stellen sind LilyPonds Vermutung, wo die Warnung oder der Fehler +aufgetreten ist, allerdings treten Warnungen und Fehler ja gerade in +unerwarteten Fällen auf. Manchmal kann Lilypond auch eine fehlerhafte +Stelle zwar noch problemlos verarbeiten, ein paar Zeilen später wirkt +sich der Fehler aber dann doch noch aus. In solchen Fällen, wo Sie in +der angegebenen Zeile keinen Fehler erkennen, sollten Sie auch die Zeilen +oberhalb der angegebenen Stelle genauer unter die Lupe nehmen. + +Mehr Information darüber findet sich in @ref{Häufige Fehlermeldungen}. + + + +@node Häufige Fehlermeldungen +@section Häufige Fehlermeldungen +@translationof Common errors + +Die Fehlermeldungen, die unten beschrieben werden, treten of auf, +es ist jedoch nicht immer einfach, die Urache zu finden. Wenn +der Fehler einmal verstanden ist, kann er einfach behoben werden. + + +@menu +* Noten laufen aus der Seite heraus:: +* Ein zusätzliches System erscheint:: +* Offensichtlicher Fehler in ../ly/init.ly:: +* Fehlermeldung Ungebundene Variable %:: +* Fehlermeldung FT_Get_Glyph_Name:: +* Warnung über absteigende staff affinities:: +@end menu + +@node Noten laufen aus der Seite heraus +@unnumberedsubsec Noten laufen aus der Seite heraus +@translationof Music runs off the page + +Noten, die rechts aus der Seite herauslaufen oder sehr komprimiert +aussehen, liegen in fast allen Fällen an einer falschen Notendauer +einer Note, die dazu fürt, dass die letzte Note im Takt über die +Taktgrenze hinwegdauert. Es ist nicht falsch, wenn die letzte +Note eines Taktes über den Takt hinausdauert, weil einfach angenommen +wird, dass sie im nächsten Takt fortgesetzt wird. Aber wenn eine +längere Sequenz dieser überhängenden Noten auftritt, können die +Noten sehr gedrängt aussehen oder über den Seitenrand fließen, weil +die automatische Zeilenumbruchsfunktion einen Umbruch nur am Ende +eines vollständigen Taktes einfügen kann, also wenn alle Noten +zum Ende des Taktstriches auch wirklich aufhören. + +@warning{Eine falsche Dauer kann dazu führen, dass Zeilenumbrüche +nicht möglich sein und die Zeile entweder sehr gedrängt dargestllt +wird oder über den Seitenrand fließt.} + +Die falsche Dauer kann einfach gefunden werden, wenn Taktstrichüberprüfung +eingesetzt wird, siehe @ruser{Takt- und Taktzahlüberprüfung}. + +If you actually intend to have a series of such carry-over measures +you will need to insert an invisible bar line where you want the +line to break. For details, see @ruser{Taktstriche}. + + +@node Ein zusätzliches System erscheint +@unnumberedsubsec Ein zusätzliches System erscheint +@translationof An extra staff appears + +Wenn Kontext nicht explizit mit @code{\new} oder +@code{\context} erstellt werden, werden sie vom Programm erstellt, +sobald ein Befehl angetroffen wird, der im aktuellen Kontext nicht +funktioniert. In einfachen Partituren ist diese automatische +Erstellung sehr nützlich und die meisten Beispiele der LilyPond-Handbücher +benutzen diese Schreiberleicherterung. Manchmal jedoch kann es +vorkommen, dass durch die automatische Erstellung von Systemen aufeinmal +unerwartete Notensysteme erstellt werden. Beispielsweise könnte man +annehmen, dass folgendes Beispiel alle Notenköpfe in dem Notensystem +rot macht, aber als Resultat hat man zwei Systeme, während die +Notenköpfe immernoch schwarz im unteren System erscheinen. + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +Das liegt daran, dass kein @code{Staff}-Kontext existiert, wenn +der @code{\override}-Befehl verarbeitet wird, sodass ein System +für diesen Befehl erstellt wird. Dann aber erstellt @code{\new Staff} +noch ein zusätzliches System, wo die Noten gesetzt werden. Die +richtige Schreibweise wäre: + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +Ein zweites Beispiel zeigt, dass ein @code{\relative}-Befehl innerhalb +von @code{\repeat} zwei Systeme erstellt, wobei der zweite etwas verschoben +ist. Das liegt daran, dass @code{\repeat} zwei @code{\relative}-Umgebungen +erstellt, die jede implizit einen @code{Staff}- und @code{Voice}-Kontext +erstellen. + +@lilypond[quote,verbatim] +\repeat unfold 2 { + \relative c' { c4 d e f } +} +@end lilypond + +Indem man die @code{Voice}-Kontexte explizit erstellt, kann das Problem +umgangen werden. + +@lilypond[quote,verbatim] +\new Voice { + \repeat unfold 2 { + \relative c' { c4 d e f } + } +} +@end lilypond + + +@node Offensichtlicher Fehler in ../ly/init.ly +@unnumberedsubsec Offensichtlicher Fehler in ../ly/init.ly +@translationof Apparent error in @code{../ly/init.ly} + +Verschiedene seltsame Fehlermeldungen können über Syntax-Fehler in +@file{../ly/init.ly} auftauchen, wenn die Eingabedatei nicht richtig +formuliert ist, wenn sie etwa nicht richtig passende Klammerpaare +oder Anführungszeichen enthält. + +Der üblichste Fehler ist das Fehlen einer geschweiften Klammer +(@code{@}}) am Ende der @code{score}-Umbgebung. Die Lösung ist hier +klar: überprüfen Sie, ob die @code{score}-Umgebung richtig beendet +wurde. Die richtige Struktur einer Eingabedatei wird beschrieben +in @rlearning{Wie eine LilyPond-Eingabe-Datei funktioniert}. +Ein Editor, der die Klammerpaare automatisch anzeigt, ist sehr +hilfreich, um derartige Fehler zu vermeiden. + +Eine weitere übliche Fehlerquelle ist kein Leerzeichen zwischen der +letzten Silbe einer @code{lyrics}-Umgebung und der schließenden +Klammer (@code{@}}). Ohne diese Trennung wird die Klammer als +Teil der Silbe gewertet. Es bietet sich immer an, Leerzeichen vor +und hinter @emph{jede} Klammer zu setzen. Wie wichtig das ist, wenn +Gesangstext eingesetzt wird, siehe @ruser{Eingabe von Text}. + +Diese Fehlermeldung kann auch mit einem fehlenden schließenden Anführungszeichen +(@code{"}) auftreten. In diesem Fall sollte die begleitende Fehlermeldung +eine Zeilenzahl angeben, die dicht am Fehler liegt. Die nicht paarigen +Anführungszeichen sind meistens ein oder zwei Zeilen darüber. + + +@node Fehlermeldung Ungebundene Variable % +@unnumberedsubsec Fehlermeldung Ungebundene Variable % +@translationof Error message Unbound variable % + +Diese Fehlermeldung erscheint am Ende der Kommandozeilenausgabe oder in der +Log-Datei mit einer Meldung @qq{GUILE signalled an error ...} +jedes Mal, wenn eine Scheme-Routine aufgerufen wird, die +(falscherweise) ein @emph{LilyPond}-Kommentar und kein +@emph{Scheme}-Kommentar enthält. + +LilyPond-Kommentare befginnen mit dem Prozent-Zeichen (@code{%}) und +dürfen nicht in Scheme-Routinen benutzt werden. Scheme-Kommentare beginnen +mit einem Semikolon (@code{;}). + +@node Fehlermeldung FT_Get_Glyph_Name +@unnumberedsubsec Fehlermeldung FT_Get_Glyph_Name +@translationof Error message FT_Get_Glyph_Name + +Diese Fehlermeldung erscheint in der Kommandozeilenausgabe, wenn die +Datei ein Zeichen enthält, das nicht zu ASCII gehört und die Datei +nicht in UTF-8-Kodierung gespeichert wurd. Sie auch @ruser{Zeichenkodierung}. + + +@node Warnung über absteigende staff affinities +@unnumberedsubsec Warnung über absteigende staff affinities +@translationof Warning staff affinities should only decrease + +Diese Warnung erscheint, wenn keine Notensysteme in der Ausgabe vorhanden +sind, wenn etwa nur @code{ChordName}-Kontext und @code{Lyrics}-Kontext +in einem Liedblatt vorhanden sind. Die Warnungen können vermieden werden, +indem man einen der Kontexte als System erscheinen lässt, indem man ihm +zu Beginn hinzufügt: + +@example +\override VerticalAxisGroup #'staff-affinity = ##f +@end example + +Zu Einzelheiten siehe @qq{Abstand von Nicht-Notensystemzeilen} in +@ruser{Flexible vertikale Abstände in Systemgruppen}. diff --git a/Documentation/de/usage/setup.itely b/Documentation/de/usage/setup.itely new file mode 100644 index 0000000000..a1c3b039f4 --- /dev/null +++ b/Documentation/de/usage/setup.itely @@ -0,0 +1,357 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- + +@ignore + Translation of GIT committish: 3d7ffa1f82bb44673134b28becf7898482fe7316 + + 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" + +@c Translators: Till Paala, Reinhold Kainhofer + +@node Setup +@chapter Setup +@translationof Setup + +In diesem Kapitel werden verschiedene Konfigurationsoptionen für LilyPond und +andere Programme behandelt, die nach der Installation auszuführen sind. Dieses +Kapitel kann als Referenz betrachtet werden, lesen Sie einen Abschnitt nur, +wenn er auf Sie zutrifft. + +@menu +* Setup für bestimmte Betriebssysteme:: +* Unterstützung von Texteditoren:: +* Point and click:: +@end menu + + +@node Setup für bestimmte Betriebssysteme +@section Setup für bestimmte Betriebssysteme +@translationof Setup for specific Operating Systems + +Dieser Abschnitt erklärt zusätzliche Einstellungen für bestimmte Betriebssysteme. + +@menu +* Einrichtung für MacOS X:: +@end menu + +@node Einrichtung für MacOS X +@subsection Einrichtung für MacOS X +@translationof Setup for MacOS X + +@subsubheading Benutzung von Python-Skripten unter MacOS 10.3 oder 10.4 + +Das LilyPond-Programmpaket für MacOS X stellt Python nicht zur +Verfügung, aber Python 2.4 oder höher wird benötigt, um +Skripte wie @command{convert-ly} zu benutzen. Wenn Sie MaxOS +10.3 oder 10.4 besitzen, müssen Sie eine neuere Python-Version +von @uref{http://python.org/download/} installieren und dann +die erste Zeile von @command{convert-ly} und @command{lilypond-book} +auf folgende Weise ändern: Wenn sich das installierte Python-Programm +in Ihrem @var{PFAD} befindet, muss die erste Zeile heißen: + +@example +#!/usr/bin/env python +@end example + +@noindent +andernfalls muss sie heißen: + +@example +#!@var{/path/to/newly_installed/python} +@end example + +@subsubheading MacOS X auf der Kommandozeile + +Die Skripte (etwa @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly} und sogar @command{lilypond}) befinden sich +innerhalb der @code{.app}-Datei für MacOS@tie{}X. Sie können +auf der Kommandozeile direkt aufgerufen werden, etwa + +@example +@var{Pfad/zu}/LilyPond.app/Contents/Resources/bin/lilypond +@end example + +@noindent +Entsprechend funktionieren auch die anderen Skripte wie +@command{lilypond-book}, @command{convert-ly}, @command{abc2ly} usw. + +Sie können sich auch selber Skripte anlegen, die diesen Pfad automatisch +hinzufügen. Erstellen Sie ein Verzeichnis, indem die Skripte gespeichert werden: + +@example +mkdir -p ~/bin +cd ~/bin +@end example + +Erstellen Sie eine Datei mit dem Namen @code{lilypond} und dem Inhalt + +@example +exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example + +Erstellen Sie entsprechende Dateien mit den Namen @code{lilypond-book}, + @code{convert-ly} und den Namen der anderen Hilfsprogramme, die Sie benutzen + (@code{abc2ly}, @code{midi2ly} usw.). Ersetzen Sie einfach den Teil + @code{bin/lilypond} mit @code{bin/convert-ly} (oder einem anderen + Programmnamen) in der entsprechenden Datei. + +Machen Sie die Datei ausführbar: + +@example +chmod u+x lilypond +@end example + +Jetzt müssen Sie dieses Verzeichnis noch zu Ihrem Pfad (PATH) hinzufügen. +Verändern Sie die Datei @code{.profile} in Ihrem Benutzerverzeichnis +(oder erstellen Sie sie), dass sie die Zeile + +@example +export PATH=$PATH:~/bin +@end example + +@noindent +beinhaltet. Die Datei muss mit einer Leerzeile enden. + +Beachten Sie, dass @var{Pfad/zu} üblicherweise @code{/Applications/} ist. + + +@node Unterstützung von Texteditoren +@section Unterstützung von Texteditoren +@translationof Text editor support + +@cindex Editoren +@cindex vim +@cindex emacs +@cindex Modus, Editoren +@cindex Syntax-Hervorhebung +@cindex Hervorhebung der Syntax + +Verschiedene Texteditoren haben Unterstützung für LilyPond. + +@menu +* Emacs-Modus:: +* Vim-Modus:: +* jEdit:: +* TexShop:: +* TextMate:: +* LilyKDE:: +@end menu + +@node Emacs-Modus +@subsection Emacs-Modus +@translationof Emacs mode + +Emacs hat einen LilyPond-Modus (@file{lilypond-mode}), eine Datei, die +die Vervollständigung von Befehlen, Einrückungen, für LilyPond spezifische +Klammerschließungen und die Markierung der Syntax beherrscht. +Zusätzlich stehen noch praktische Tastaturkombinationen zum +Programmaufruf und zum Nachschlagen in den Handbüchern zur +Verfügung. Siehe unten, wenn die Datei @file{lilypond-mode} +sich nicht auf Ihrem Computer befindet. + +Der Emacs-Modus zur Noteneingabe und zum Programmaufruf ist +in den Emacs-Quellen im @file{elisp}-Verzeichnis enthalten. Mit +dem Befehl @command{make install} können Sie es nach @var{elispdir} +installieren. Die Datei @file{lilypond-init.el} sollte in + @var{load-path}@file{/site-start.d/} liegen oder Ihrem + @file{~/.emacs} or @file{~/.emacs.el} hinzugefügt werden. + +Als Benutzer können Sie Ihren Quellenpfad (etwa @file{~/site-lisp/}) +ihrem @var{load-path} hinzufügen, indem Sie folgende Zeile zu Ihrer +@file{~/.emacs}-Datei hinzufügen: + +@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 Vim-Modus +@subsection Vim-Modus +@translationof Vim mode + +Für @uref{http://@/www@/.vim@/.org,VIM} wird ein @file{vimrc} bereitgestellt, +zusammen mit Werkzeugen zur Syntaxauszeichnung. Ein Vim-Modus zur +Noteneingabe und zum Programmaufruf befindet sich im Quellarchiv im +@code{$VIM}-Verzeichnis. + +LilyPond-Dateien werden automatisch erkannt, wenn sich in der Datei +@file{~/.vim/filetype.vim} folgender Inhalt befindet: + +@example +if exists("did_load_filetypes") + finish +endif +augroup filetypedetect + au! BufNewFile,BufRead *.ly,*.ily setf lilypond +augroup END +@end example + +Fügen Sie den LilyPond-Pfad in ihre +@file{~/.vimrc}-Datei ein, indem Sie ihre folgende Zeile hinzufügen: + +@example +set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ +@end example + +@noindent +Dabei wird $@{LILYPOND_VERSION@}durch Ihre LilyPond-Version ersetzt. Sollten +Sie LilyPond nicht nach @file{/usr/local/} installiert haben, müssen Sie den +Pfad entsprechend anpassen. + + +@node jEdit +@subsection jEdit +@translationof jEdit + +Das Plugin für den @uref{http://@/www@/.jedit@/.org@/,jEdit}-Texteditor, +LilyPondTool genannt, ist das vielfältigste textbasierte Werkzeug, um +LilyPond-Notationsdateien zu editieren. Zu den besonderen Eigenschaften +gehört ein Dokument-Ersteller mit Liedtextunterstützung, der die Neuerstellung +von Dateien erleichtert, und ein integriertes PDF-Anzeigeprogramm mit +@qq{point-and-click}-Unterstützung. Demos, Bildschirmphotos und +Installationsanweisungen finden sich unter +@uref{http://lilypondtool@/.organum@/.hu} + + +@node TexShop +@subsection TexShop +@translationof TexShop + +Der +@uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop}-Editor +für MacOS@tie{}X kann erweitert werden, um LilyPond, lilypond-book und convert-ly aus dem +Editor heraus zu starten. Die Erweiterung findet sich unter +@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. + + +@node TextMate +@subsection TextMate +@translationof TextMate + +Es gibt ein LilyPond-Paket für TextMate. Es kann installiert werden, indem man + +@example +mkdir -p /Library/Application\ Support/TextMate/Bundles +cd /Library/Application\ Support/TextMate/Bundles +svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ +@end example + +@noindent +ausführt. + + +@node LilyKDE +@subsection LilyKDE +@translationof LilyKDE + +@uref{http://lilykde.googlecode.com/,LilyKDE} ist eine Erweiterung für +den Texteditor @uref{http://kate-editor.org/,Kate} für KDE. LilyKDE +beinhaltet einen mächtigen Assistenten, mit dem sehr schnell neue +LilyPond-Dokumente erstellt werden könne, sowie einen eingebetteten +PDF-Betrachter. + +LilyKDE benutzt auch @uref{http://www.volny.cz/smilauer/rumor/,Rumor}, +um Musik direkt von einem MIDI-Keyboard einzulesen. + +Weitere Fähigkeiten von LilyKDE sind Silbentrennung für Liedtexte oder +die Möglichkeit, LilyPond gleichzeitig mit mehreren Eingabedateien vom +KDE Dateimanager aus aufzurufen. + + +@node Point and click +@section Point and click +@translationof Point and click +@cindex Point and click + + +Point and click erlaubt es, die Noten in der Quelldatei zu finden, indem man sie +im PDF anklickt. Das erleichtert es, fehlerhafte Stellen zu finden. + +Wenn diese Funktionalität aktiv ist, fügt LilyPond Hyperlinks zum PDF hinzu. +Diese werden dann bei einem Klick zum Browser geschickt, der wiederum +einen Texteditor mit dem Cursor an der richtigen Stelle öffnet. + +Damit diese Kettenreaktion funktioniert, müssen Sie ihrem PDF-Programm +mit dem Skript @file{lilypond-invoke-editor} beibringen, Hyperlinks zu folgen. + +Im Falle von Xpdf auf einer UNIX-Maschine sollte folgende Zeile in der Datei +@file{xpdfrc}@footnote{Unter UNIX befindet sich diese Datei entweder in +@file{/etc/xpdfrc} oder als @file{.xpdfrc} in Ihrem Heim-Verzeichnis.} stehen. + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +Das Programm @file{lilypond-invoke-editor} ist ein kleines Hilfsprogramm. +Es ruft einen Editor auf für bestimmte @code{textedit}-URIs und startet +einen Browser für die anderen. Die Umgebungsvariable @code{EDITOR} +wird für folgende Zeichenketten: + +@table @code +@item emacs + das startet +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item vim + das startet +@example +gvim --remote +:@var{line}:norm@var{char} @var{file} +@end example + +@item nedit + das startet +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +Die Umgebungsvariable @code{LYEDITOR} wird verwendet, um dieses zu +überschreiben. Sie enthält den Befehl, um den Editor aufzurufen, wobei +die Variablen @code{%(file)s}, +@code{%(column)s}, @code{%(line)s} mit der Datei, Spalte und Zeile +ersetzt werden. Die Einstellung + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +für @code{LYEDITOR} etwa entspricht dem von vornherein eingestellten +Emacs-Aufruf. + + +@cindex Dateigröße, Ausgabedatei + +Die point and click-Links vergrößern die Notationsdatei erheblich. Um die +Größe der PDF- und PS-Dateien zu verringern, kann point and click +ausgeschaltet werden, indem die Zeile + +@example +\pointAndClickOff +@end example + +@noindent +in der @file{.ly}-Datei gesetzt wird. Point and Click kann auch explizit +eingeschaltet werden durch die Zeile: + +@example +\pointAndClickOn +@end example + +Alternativ können Sie Point and Click auch mit einer +Kommandozeilenoption ausschalten: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{Sie sollten Point and Click immer für Dateien ausschalten, die +Sie an andere Personen weitergeben möchten. Anderenfalls werden +Pfadinformationen Ihres Computers in die PDF-Datei kopiert, was ein +potentielles Sicherheitsrisiko darstellt.} diff --git a/Documentation/de/usage/suggestions.itely b/Documentation/de/usage/suggestions.itely new file mode 100644 index 0000000000..f1a041833c --- /dev/null +++ b/Documentation/de/usage/suggestions.itely @@ -0,0 +1,638 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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 Vorschläge zum Schreiben von LilyPond-Eingabe-Dateien +@chapter Vorschläge zum Schreiben von LilyPond-Eingabe-Dateien +@translationof Suggestions for writing LilyPond input files + +Jetzt sind Sie so weit, größere Stücke mit LilyPond zu schreiben -- +nicht nur die kleinen Beispiele aus der Übung, sondern ganze Stücke. +Aber wie geht man das am besten an? + +Solange LilyPond Ihre Dateien versteht und die Noten so setzt, +wie Sie das wollen, spielt es eigentlich keine Rolle, wie Ihre +Dateien aussehen. Es gibt aber trotzdem ein paar Dinge, die man +beim Schreiben von LilyPond-Code berücksichtigen sollte. + +@itemize @bullet +@item Was ist, wenn Sie einen Fehler machen? Die Struktur einer +LilyPond-Datei kann es erleichtern (oder erschweren), bestimmte +Fehler zu finden. + +@item Was ist, wenn Sie Ihre Dateien mit jemandem austauschen +wollen? Oder Ihre Dateien nach einige Jahren noch einmal überarbeiten +wollen? Manche LilyPond-Dateien versteht man auf den ersten Blick, +über anderen muss man eine Stunde grübeln, um die Struktur zu ahnen. + +@item Was ist, wenn sie Ihre Dateien auf eine neuere LilyPond-Version +aktualisieren wollen? Die Syntax der Eingabesprache verändert sich +allmählich mit Verbesserungen im Programm. Die meisten Veränderungen +können automatisch durch @code{convert-ly} gelöst werden, aber +bestimmte Änderungen brauchen Handarbeit. LilyPond-Dateien können +strukturiert werden, damit sie einfacher aktualisierbar sind. +@end itemize + +@menu +* Allgemeine Vorschläge:: +* Das Kopieren von bereits vorhandener Musik:: +* Große Projekte:: +* Problemlösung:: +* Make und Makefiles:: +@end menu + + +@node Allgemeine Vorschläge +@section Allgemeine Vorschläge +@translationof General suggestions + +Hier einige Vorschläge, wie Sie Probleme vermeiden oder lösen können: + +@itemize +@item @strong{Schreiben Sie immer mit @code{\version} die +Versionsnummer +in jede Datei}. Beachten Sie, dass in allen Vorlagen die Versionsnummer +@code{\version "2.14.0"} eingetragen ist. Es empfiehlt sich, in alle +Dateien, unabhängig von ihrer Größe, den @code{\version}-Befehl +einzufügen. Persönliche Erfahrung hat gezeigt, dass es ziemlich +frustrierend sein kann zu erinnern, welche Programmversion man etwa +vor einem Jahr verwendet hat. Auch @code{convert-ly} benötigt die +Versionsnummer. + +@item @strong{Benutzen Sie Überprüfungen}: @ruser{Oktavenüberprüfung}, und +@ruser{Takt- und Taktzahlüberprüfung}. Wenn Sie hier und da diese +Überprüfungen einfügen, finden Sie einen möglichen Fehler weit +schneller. Wie oft aber ist @qq{hier und da}? Das hängt von der +Komplexität der Musik ab. ei einfachen Stücken reicht es vielleicht +ein- oder zweimal, in sehr komplexer Musik sollte man sie vielleicht +in jeden Takt einfügen. + +@item @strong{Ein Takt pro Textzeile}. Wenn irgendetwas kompliziertes +vorkommt, entweder in der Musik selber oder in der Anpassung der +Ausgabe, +empfiehlt es sich oft, nur einen Takt pro Zeile zu schreiben. +Bildschirmplatz zu sparen, indem Sie acht Takte in eine Zeile zwängen, +hilft nicht weiter, wenn Sie ihre Datei @qq{debuggen} müssen. + +@item @strong{Kommentieren Sie ihre Dateien}. Benutzen Sie entweder +Taktnummern (in regelmäßigen Abständen) oder Verweise auf musikalische +Themen (@qq{Zweites Thema in den Geigen}, @qq{vierte Variation} usw.). +Sie brauchen diese Kommentare vielleicht noch nicht, wenn Sie das Stück +notieren, aber spätestens wenn Sie nach ein paar Jahren etwas +verändern +wollen oder Sie den Quelltext an einen Freund weitergeben wollen, +ist es weitaus komplizierter, die Dateistruktur ohne Kommentare zu +verstehen, als wenn Sie sie rechtzeitig eingefügt hätten. + +@item @strong{Schreiben Sie Klammern mit Einrückung}. Viele +Probleme entstehen durch ungerade Anzahl von @code{@{} und +@code{@}}-Klammern. + +@item @strong{Schreiben Sie Tondauerangaben} am Anfang von +Abschnitten und Bezeichnern. Wenn Sie beispielsweise + @code{c4 d e} am Anfang eines Abschnittes schreiben, +ersparen Sie sich viele Probleme, wenn Sie ihre Musik +eines Tages umarrangieren wollen. + +@item @strong{Trennen Sie Einstellungen} von den eigentlichen +Noten. Siehe auch @rlearning{Tipparbeit durch Variablen und Funktionen ersparen} +und +@rlearning{Globale Formatierung}. + +@end itemize + + +@node Das Kopieren von bereits vorhandener Musik +@section Das Kopieren von bereits vorhandener Musik +@translationof Typesetting existing music + +Wenn Sie Musik aus einer fertigen Partitur kopieren (z. B. die +LilyPond-Eingabe einer gedruckten Partitur): + +@itemize + +@item +Schreiben Sie ein System ihrer Quelle nach dem anderen +(aber trotzdem nur einen Takt pro Textzeile) und überprüfen +Sie jedes System, nachdem Sie es fertig kopiert haben. Mit dem +@code{showLastLength}- oder @code{showFirstLenght}-Befehl können Sie den Übersetzungsprozess +beschleunigen. Siehe auch +@ruser{Korrigierte Musik überspringen}. + +@item +Definieren Sie @code{mBreak = @{ \break @}} und schreiben Sie + @code{\mBreak} in der Quelldatei immer dann, wenn im Manuskript +ein Zeilenumbruch vorkommt. Das macht es einfacher, die gesetzte +Zeile mit den ursprünglichen Noten zu vergleichen. Wenn Sie die +Partitur fertig gestellt haben, könne Sie @code{mBreak = @{ @}}, +also leer definieren, um diese manuellen Zeilenumbrüche zu entfernen. +Damit kann dann LilyPond selber entscheiden, wohin es passende +Zeilenumbrüche platziert. + +@item +Wenn Sie eine Stimme für ein transponierendes Instrument als eine +Variable notieren, wird empfohlen, dass die Noten von + +@example +\transpose c klingende-Tonhöhe @{...@} +@end example + +eingefasst werden (wobei @code{klingende-Tonhöhe} die klingende Tonhöhe +des Instruments ist), sodass die Noten innerhalb der Variable für klingendes C +geschrieben sind. Sie können die Variable zurücktransponieren, wenn es +nötig ist, aber Sie müssen es nicht tun. Fehler in Transpositionen sind +treten seltener auf, wenn alle Noten in den Variablen für die gleiche +Ausgangstonhöhe geschrieben werden. + +Denken Sie auch daran, dass Sie nur von/nach C transponieren. Das heißt, +dass die einzigen anderen Tonhöhen, die Sie in Transpositionen benutzen, +die Tonhöhen der Instrumente sind, für die Sie schreiben: @code{bes} für +eine B-Trompete oder @code{aes} für eine As-Klarinette usw. + +@end itemize + + +@node Große Projekte +@section Große Projekte +@translationof Large projects + +Besonders wenn Sie an größeren Projekten arbeiten, ist es +unumgänglich, dass Sie ihre LilyPond-Dateien klar strukturieren. + +@itemize + +@item @strong{Verwenden Sie Variablen für jede Stimme}, innerhalb +der Definition sollte so wenig Struktur wie möglich sein. Die +Struktur des @code{\score}-Abschnittes verändert sich am ehesten, +während die @code{violine}-Definition sich wahrscheinlich mit einer +neuen Programmversion nicht verändern wird. + +@example +violine = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violine + @} + @} +@} +@end example + +@item @strong{Trennen Sie Einstellungen von den Noten}. Diese +Empfehlung wurde schon früher gegeben, +aber für große Projekte ist es unumgänglich. Muss z. B. die +Definition für @code{fdannp} verändert werden, so braucht +man es nur einmal vorzunehmen und die Noten in der Geigenstimme, +@code{violin}, bleiben unberührt. + +@example +fdannp = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fdannp c'8. e16 +@} +@end example + +@end itemize + + + +@node Fehlersuche +@section Fehlersuche +@translationof Troubleshooting + +Früher oder später werden Sie in die Lage kommen, +dass LilyPond Ihre Datei nicht kompilieren will. Die +Information, die LilyPond während der Übersetzung +gibt, können Ihnen helfen, den Fehler zu finden, aber +in vielen Fällen müssen Sie nach der Fehlerquelle +auf die Suche gehen. + +Die besten Hilfsmittel sind in diesem Fall das Zeilen- +und Blockkommentar (angezeigt durch @code{%} bzw. +@code{%@{ ... %@}}). Wenn Sie nicht bestimmen können, +wo sich das Problem befindet, beginnen Sie damit, große +Teile des Quelltextes auszukommentieren. Nachdem Sie +einen Teil auskommentiert haben, versuchen Sie, die Datei +erneut zu übersetzen. Wenn es jetzt funktioniert, muss +sich das Problem innerhalb der Kommentare befinden. +Wenn es nicht funktioniert, müssen Sie weitere Teile +auskommentieren bis sie eine Version haben, die funktioniert. + +In Extremfällen bleibt nur noch solch ein Beispiel übrig: + +@example +\score @{ + << + % \melody + % \harmony + % \bass + >> + \layout@{@} +@} +@end example + +@noindent +(also eine Datei ohne Noten). + +Geben Sie nicht auf, wenn das vorkommen sollte. Nehmen +Sie das Kommentarzeichen von einem Teil wieder weg, sagen +wir der Bassstimme, und schauen Sie, ob es funktioniert. +Wenn nicht, dann kommentieren Sie die gesamte Bassstimme +aus, aber nicht den @code{\bass}-Befehl in dem + @code{\score}-Abschnitt: + +@example +bass = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +Jetzt beginnen Sie damit, langsam Stück für Stück der +Bassstimme wieder hineinzunehmen, bis Sie die problematische +Zeile finden. + +Eine andere nützliche Technik zur Problemlösung ist es, +@rweb{Minimalbeispiele} zu konstruieren. + + + +@node Make und Makefiles +@section Make und Makefiles +@translationof Make and Makefiles + +@cindex Makefile +@cindex Make-Dateien +@cindex make + +Fast alle Betriebssysteme, auf denen LilyPond benutzt werden kann, +unterstützen ein Programm mit dem Namen @code{make}. Dieses Programm +liest eine besondere Datei mit der Bezeichnung @code{Makefile}, +die definiert, welche Dateien von welchen anderen Dateien abhängen und +welche Befehle für das Betriebssystem nötig sind, um eine Datei aus +einer anderen zu erstellen. Ein Makefile könnte etwa erklären, wie +@file{ballad.pdf} und @file{ballad.midi} aus @file{ballad.ly} +erstellt werden können, indem LilyPond aufgerufen wird. + +Es gibt Fällen, wenn es sich sehr stark empfiehlt, ein @code{Makefile} +für das aktuelle Projekt zu erstellen, entweder zur eigenen Bequemlichkeit, +oder aber auch als Hilfe für andere, die vielleicht einmal die +Quelldateien lesen und verstehen wollen. Insbesondere bei großen Projekten +mit vielen eingefügten Dateien und unterschiedlichen Ausgabeoptionen +(etwa Partitur, einzelne Stimmen, Dirigierpartitur, Klavierauszug usw.), +aber auch bei Projekten, die komplizierte Programmaufrufe zur Verarbeitung +erfordern (wenn man etwa mit @code{lilypond-book} arbeitet), lohnt +sich die Erstellung einer Make-Datei. Diese Dateien können sehr +unterschiedliche ausfallen, und ihre Komplexität und Flexibilität kann +den Bedürfnissen aber auch Kenntnissen des Schreibers angepasst werden. +Das Programm GNU Make ist auf GNU/Linux Distributionen und MacOS X +installiert, aber es ist auch für Windows erhältlich. + +Das @strong{GNU Make Manual} gibt eine vollständige Anleitung, wie +@code{make} benutzt werden kann.  Hier sollen nur einige kleine +Blicke auf die vielfältigen Möglichkeiten geworfen werden. + +Die Befehle, um Regeln in einer Make-Datei zu erstellen, unterscheidet +sich zwischen den Betriebssystemen. Die verschiedenen Linuxe und +MacOS X benutzen @code{bash}, während unter Windows @code{cmd} eingesetzt +wird. Unter MacOS X muss man das System so konfigurieren, dass +die Kommandozeile benutzt wird. Hier einige Beispiele für Make-Dateien, +mit Versionen für Linux/MacOS und Windows. + +Das erste Beispiel ist für ein Orchesterstück in vier Stätzen unt mit +der folgenden Dateistruktur: + +@example +Symphony/ +|-- MIDI/ +|-- Makefile +|-- Notes/ +| |-- cello.ily +| |-- figures.ily +| |-- horn.ily +| |-- oboe.ily +| |-- trioString.ily +| |-- viola.ily +| |-- violinOne.ily +| `-- violinTwo.ily +|-- PDF/ +|-- Parts/ +| |-- symphony-cello.ly +| |-- symphony-horn.ly +| |-- symphony-oboes.ly +| |-- symphony-viola.ly +| |-- symphony-violinOne.ly +| `-- symphony-violinTwo.ly +|-- Scores/ +| |-- symphony.ly +| |-- symphonyI.ly +| |-- symphonyII.ly +| |-- symphonyIII.ly +| `-- symphonyIV.ly +`-- symphonyDefs.ily +@end example + +Die @file{.ly}-Dateien un den Verzeichnissen @file{Scores} und +@file{Parts} erhalten ihrere Noten aus @file{.ily}-Dateien, die +sich im @file{Notes}-Verzeichnis befinden: + +@example +%%% Kopfzeile der Datei "symphony-cello.ly" +\include ../definitions.ily +\include ../Notes/cello.ily +@end example + +Die Make-Datei hat die Ziele @code{score} (das gesamte Stück als +große Partitur), @code{movements} (die einzelnen Sätze als große +Partitur) und @code{parts} (die einzelnen Stimmen für die Spieler). +Es gibt auch das Ziel @code{archive}, welches ein Tar-Archiv +der Quelldateien erstellt, etwa um die Quellen über das Internet +oder per E-Mail zu verteilen. Hier die Make-Datei für GNU/Linux +oder MacOS X. Sie sollte unter dem Namen @code{Makefile} im obersten +Verzeichnis des Projektes gespeichert werden: + +@warning{Wenn ein Ziel oder eine Musterregel definiert ist, müssen +die folgenden Zeilen mit Tabulatoren, nicht mit Leerzeichen beginnen.} + +@example +# Namensstamm der Ausgabedateien +piece = symphony +# finde heraus, wieviele Prozessoren vorhanden sind +CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` +# Der Befehl, um lilypond aufzurufen +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click -djob-count=$(CPU_CORES) + +# Die Endungen, die im Makefile benutzt werden +.SUFFIXES: .ly .ily .pdf .midi + +# Eingabe- und Ausgabedateien werden in den Verzeichnissen durchsucht, +# die sich in der VPATH-Variable befinden. Alle sind Unterverzeichnisse +# des aktuellen Verzeichnisses (angegeben durch die GNU make-Variable +# `CURDIR'). +VPATH = \ + $(CURDIR)/Scores \ + $(CURDIR)/PDF \ + $(CURDIR)/Parts \ + $(CURDIR)/Notes + +# Die Musterregel, um PDF und MIDI-Dateien aus der LY-Eingabedatei +# zu erstellen. Die .pdf-Ausgabedateien werden in das +# `PDF'-Unterverzeichnis abgelegt, die .midi-Dateien in das +# `MIDI'-Unterverzeichnis. +%.pdf %.midi: %.ly + $(LILY_CMD) $<; \ # this line begins with a tab + if test -f "$*.pdf"; then \ + mv "$*.pdf" PDF/; \ + fi; \ + if test -f "$*.midi"; then \ + mv "$*.midi" MIDI/; \ + fi + +notes = \ + cello.ily \ + horn.ily \ + oboe.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +# Abhängigkeiten der einzelnen Sätze. +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +# Abhängigkeiten der großen Partitur. +$(piece).pdf: $(piece).ly $(notes) + +# Abhängigkeiten der Stimmen. +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +# `make score' eintippen, um die große Partitur mit allen vier +# Sätzen als eine Datei zu erstellen. +.PHONY: score +score: $(piece).pdf + +# `make parts' tippen, um alle Stimmen zu erstellen. +# `make foo.pdf' tippen, um die Stimme für das Instrument `foo' zu erstellen. +# Beispiel: `make symphony-cello.pdf'. +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +# `make movements' tippen um Dateien für die vier Sätze einzeln zu erstellen. +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements + +archive: + tar -cvvf stamitz.tar \ # this line begins with a tab + --exclude=*pdf --exclude=*~ \ + --exclude=*midi --exclude=*.tar \ + ../Stamitz/* +@end example + +Unter Windows ergeben sich bestimmte Komplikationen. Nachdem man +GNU Make für Windows heruntergeladen und installiert hat, muss +man den richtigen Pfad in den Umgebungsvariablen des Systems setzen, +damit die DOS-Kommandozeile das Make-Programm finden kann. Um das +vorzunehmen, kann mit der rechten Maustaste auf "Arbeitsplatz" +klicken, dann @code{Eigenschaften} und @code{Erweitert} geklickt +werden. Hier wählt man @code{Umgebungsvariablen}. In der +Liste @code{Systemvariablen} wählt man @code{Path} und mit +einem Klick auf @code{Bearbeiten} kann man den Pfad zu der +@code{.exe}-Datei von GNU Make hinzufügen, der etwa wie +folgt aussieht: + +@example +C:\Program Files\GnuWin32\bin +@end example + +Die Make-Datei selber muss auch angepasst werden, um unterschiedliche +Shell-Befehle zu verwenden und mit Leerzeichen umgehen zu können, +die sich in einigen Standardverzeichnissen unter Windows befinden. +Das @code{archive}-Ziel wird entfernt, da Windows den +@code{tar}-Befehl nicht kennt, und Windows benutzt auch eine +andere Dateiendung für midi-Dateien. + + +@example +## WINDOWS VERSION +## +piece = symphony +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click \ + -djob-count=$(NUMBER_OF_PROCESSORS) + +# 8.3 Bezeichnung für CURDIR erhalten (Workaround wg. Leerzeichen in PATH) +workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ + do @@echo %%~sb) + +.SUFFIXES: .ly .ily .pdf .mid + +VPATH = \ + $(workdir)/Scores \ + $(workdir)/PDF \ + $(workdir)/Parts \ + $(workdir)/Notes + +%.pdf %.mid: %.ly + $(LILY_CMD) $< # diese Zeile beginnt mit Tabulator + if exist "$*.pdf" move /Y "$*.pdf" PDF/ # begin with tab + if exist "$*.mid" move /Y "$*.mid" MIDI/ # begin with tab + +notes = \ + cello.ily \ + figures.ily \ + horn.ily \ + oboe.ily \ + trioString.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +$(piece).pdf: $(piece).ly $(notes) + +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +.PHONY: score +score: $(piece).pdf + +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements +@end example + +Die nächste Make-Datei ist für ein @command{lilypond-book}-Dokument, +das in LaTeX gesetzt wird. Das Projekt hat einen Index, welcher +erfordert, dass der Befehl @command{latex} zweimal aufgerufen wird, +um die Verweise zu aktualisieren. Ausgabedateien werden in einem +@code{out}-Verzeichnis für die .pdf-Dateien gespeichert und in +@code{htmlout} für die html-Dateien. + +@example +SHELL=/bin/sh +FILE=myproject +OUTDIR=out +WEBDIR=htmlout +VIEWER=acroread +BROWSER=firefox +LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex +LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex +PDF=cd $(OUTDIR) && pdflatex $(FILE) +HTML=cd $(WEBDIR) && latex2html $(FILE) +INDEX=cd $(OUTDIR) && makeindex $(FILE) +PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf & + +all: pdf web keep + +pdf: + $(LILYBOOK_PDF) # begin with tab + $(PDF) # begin with tab + $(INDEX) # begin with tab + $(PDF) # begin with tab + $(PREVIEW) # begin with tab + +web: + $(LILYBOOK_HTML) # begin with tab + $(HTML) # begin with tab + cp -R $(WEBDIR)/$(FILE)/ ./ # begin with tab + $(BROWSER) $(FILE)/$(FILE).html & # begin with tab + +keep: pdf + cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # begin with tab + +clean: + rm -rf $(OUTDIR) # begin with tab + +web-clean: + rm -rf $(WEBDIR) # begin with tab + +archive: + tar -cvvf myproject.tar \ # begin this line with tab + --exclude=out/* \ + --exclude=htmlout/* \ + --exclude=myproject/* \ + --exclude=*midi \ + --exclude=*pdf \ + --exclude=*~ \ + ../MyProject/* +@end example + +TODO: soll auch unter Windows funktionieren + +Die vorige Make-Datei funktioniert nicht unter Windows. Als Alternative +für Windows-Benutzer könnte man eine einfache batch-Datei erstellen, +welche die erforderlichen Befehl enthält. Sie kümmert sich nicht +um Abhängigkeiten, wie es eine Make-Datei kann, aber wenigstens +wird die Kompilation auf einen einzigen Befehl beschränkt. Das folgende +kann als Datei @command{build.bat} oder @command{build.cmd} gespeichert +werden. Die Batch-Datei kann auf der Kommandozeile aufgerufen werden +oder einfach doppelt angeklickt werden. + +@example +lilypond-book --output=out --pdf myproject.lytex +cd out +pdflatex myproject +makeindex myproject +pdflatex myproject +cd .. +copy out\myproject.pdf MyProject.pdf +@end example + + +@seealso +Programmbenutzung: +@rprogram{Benutzung auf der Kommandozeile}, +@rprogram{lilypond-book}. + diff --git a/Documentation/de/usage/updating.itely b/Documentation/de/usage/updating.itely new file mode 100644 index 0000000000..0d81dca292 --- /dev/null +++ b/Documentation/de/usage/updating.itely @@ -0,0 +1,270 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12 + + 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" + +@c Translators: Till Paala + + +@node Dateien mit convert-ly aktualisieren +@chapter Dateien mit @command{convert-ly} aktualisieren +@translationof Updating files with convert-ly + +@cindex Aktualisierung von LilyPond-Datei +@cindex convert-ly + +Die Eingabesyntax von LilyPond wird immer wieder verändert um Dinge zu +vereinfachen oder verschiedene Verbesserungen und Entwicklungen einzubringen. +Ein Nebeneffekt davon ist jedoch, dass LilyPond älter Eingabdateien oft +nicht mehr richtig bearbeiten kann. Um dieses Problem zu umgehen, kann +das Programm @command{convert-ly} benutzt werden, welches die meisten +Syntaxveränderungen zwischen unterschiedlichen LilyPond-Versionen beherrscht. + +@menu +* Warum verändert sich die Syntax?:: +* convert-ly aufrufen:: +* Optionen auf der Kommandozeile für convert-ly:: +* Probleme mit convert-ly:: +* Manuelle Konversion:: +@end menu + + +@node Warum verändert sich die Syntax? +@section Warum verändert sich die Syntax? +@translationof Why does the syntax change? + +@cindex convert-ly +@cindex Aktualisierung von alten Eingabedateien +@cindex Update von alten Eingabedateien + +Die LilyPond-Eingabesyntax verändert sich von Zeit zu Zeit. +Wenn das Programm LilyPond verbessert wird, wird auch die +Syntax (die Eingabesprache) entsprechend angepasst. Manche +Änderungen machen den Eingabetext leichter zum Schreiben und zum +Lesen, andere implementieren neue Eigenschaften in LilyPond. + +Beispielsweise alle @code{\paper}- und @code{\layout}-Eigenschaftsnamen +sollen in der Form @code{erstens-zweitens-drittens} geschrieben +werden. In der Version 2.11.60 bemerkten wir jedoch, dass die +@code{printallheaders}-Eigenschaft sich nicht an diese Regel hielt. +Sollten wir das jetzt lassen (womit neue Benutzer verwirrt werden, weil +die Eingabe nicht logisch ist), oder sollten wir es ändern (womit +wir alte Benutzer mit ihren schon geschriebenen Partituren ärgern)? +In diesem Fall haben wir uns entschieden, den Namen in +@code{print-all-headers} zu ändern. Zum Glück kann diese Änderung +mit dem @command{convert-ly}-Programm automatisch vorgenommen werden. + + +Leider kann @code{convert-ly} nicht mit allen Syntax-Änderungen umgehen. +Beispielsweise wurden in LilyPond 2.4 und früher Akzente für verschiedene +Sprachen mit LaTeX-Befehlen eingegeben -- beispielsweise Änderung wurde +geschrieben @code{\"Anderung}. Ab Version 2.6 jedoch muss man Akzente +und Sonderzeichen dirket als UTF-8-Zeichen notieren. @code{convert-ly} +kann nicht alle LaTeX-Zeichen umwandeln, sodass man das manuell übernehmen +muss. + + +@node convert-ly aufrufen +@section @command{convert-ly} aufrufen +@translationof Invoking convert-ly + +@command{convert-ly} benutzt den Befehl @code{\version} mit Angabe der +Versionsnummer der ursprünglichen LilyPond-Version. In den meisten Fällen +genügt es, einfach auf der Kommandozeile + +@example +convert-ly -e meineDatei.ly +@end example + +@noindent +im Verzeichnis, in welchem die Datei liegt, aufzurufen. Hierdurch wird +@file{meineDatei.ly} direkt aktualisiert und das Original nach +@file{meineDatei.ly~} gesichert. + +@warning{@command{convert-ly} konvertiert immer bis zur letzten Syntax-Änderung, +die das Programm beherrscht. Das heißt, dass die @code{\version}-Nummer, +die nach der Konversion in der Datei steht, normalerweise niedriger ist als +die Version von @command{convert-ly} selbst.} + +Um alle Dateien in einem Verzeichnis zu konvertieren, schreibt man auf der +Kommandozeile: + +@example +convert-ly -e *.ly +@end example + +Man kann auch einen neuen Namen für die konvertierte Datei angeben, sodass die +originale Datei unverändert bleibt. Dazu schreibt man auf der Kommandozeile + +@example +convert-ly meineDatei.ly > meineneueDatei.ly +@end example + +Das Programm gibt die Versionsnummern für alle Versione aus, für die eine +Konversion durchgeführt wurde. Wenn keine Versionsnummern ausgegeben werden, +ist die Datei aktuell. + +MacOS@tie{}X-Benutzer können die Befehle unter dem Menü-Eintrag +@code{Compile > Update syntax} ausführen. + +Windows-Benutzer sollten diese Befehle auf der Kommandozeile (Eingabeaufforderung), +die sich normalerweise unter @code{Start > Zubehör > Eingabeaufforderung} findet. + + +@node Optionen auf der Kommandozeile für convert-ly +@section Optionen auf der Kommandozeile für @command{convert-ly} +@translationof Command line options for convert-ly + +Das Programm wird folgendermaßen aufgerufen: + +@example +convert-ly [@var{Option}]@dots{} @var{Dateiname}@dots{} +@end example + +Folgende Optionen können benutzt werden: + +@table @code +@item -e,--edit +Die Konvertierung direkt am Original vornehmen, sodass es direkt verändert wird. + +@item -f,--from=@var{von-Versionsnummer} +Stellt die Versionsnummer ein, ab welcher die Konvertierung begonnen werden +soll. Wenn die Option nicht benutzt wird, rät @command{convert-ly} die Versionsnummer +anhand des @code{\version}-Eintrags in der Datei. Beispielsweise +@code{--from=2.10.25} + +@item -n,--no-version +Normalerweise fügt @command{convert-ly} einen @code{\version}-Eintrag +zu der konvertierten Datei hinzu. Mit dieser Option wird das unterdrückt. + +@item -s, --show-rules +Zeige alle bekannten Konversionen und beende. + +@item --to=@var{bis-Versionsnummer} +Die Zielversion der Konversion setzen. Standard ist die letzte mögliche +Version, die das Programm beherrscht. Beispielsweise @code{--to=2.12.2} + +@item -h, --help +Zeigt Hilfe zur Benutzung. +@end table + +Um LilyPond-Schnipsel in texinfo-Dateien zu aktualisieren, kann + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +@noindent +benutzt werden. + +Um sich die Änderungen der LilyPond-Syntax zwischen zwei Versionen anzeigen +zu lassen, schreibt man + +@example +convert-ly --from=... --to=... -s +@end example + + +@node Probleme mit convert-ly +@section Probleme mit @code{convert-ly} +@translationof Problems running convert-ly + +Wenn man @command{convert-ly} auf einer Eingabeaufforderung unter Windows +mit einer Datei benutzt, die Leerzeichen im Dateinamen oder Pfad hat, +muss der gesamte Dateiname mit drei (!) doppelten Anführungszeichen +umgeben werden: + +@example +convert-ly """D:/My Scores/Ode.ly""" > "D:/My Scores/new Ode.ly" +@end example + +Wenn der einfache @command{convert-ly -e *.ly}-Befehl nicht funktioniert, +weil die ausgeschriebene Kommandozeile zu lang wird, kann man +@command{convert-ly} auch als Loop wiederholt laufen lassen. Dieses +Beispiel für UNIX konvertiert alle @file{-ly}-Dateien im aktuellen +Verzeichnis: + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +Für die Windows-Eingabeaufforderung lautet der entsprechende Befehl: + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +Nicht alle Syntax-Änderungen werden konvertiert. Nur eine Ausgabeoption kann +angegeben werden. Automatische Aktualisierung von Scheme- und LilyPond +Scheme-Code ist eher unwahrscheinlich, sehr wahrscheinlich muss hier manuell +aktualisiert werden. + + +@node Manuelle Konversion +@section Manuelle Konversion +@translationof Manual conversions + +Theoretisch könnte ein Programm wie @command{convert-ly} alle möglichen +Syntax-Änderungen berücksichtigen. Schließlich ist es auch ein Computerprogramm, +das die alte und die neue Version der Notationsdatei interpretiert, so +dass ein anderes Computerprogramm eine Datei in die andere verwandeln +könnte.@footnote{Das ist auf jeden Fall möglich für jede LilyPond-Datei, +die kein Scheme beinhaltet. Wenn Scheme in der Datei verwendet wurde, +enthält die Datei Turing-complete Sprache und es gibt Probleme mit dem +@qq{Halteproblem} der Informatik.} + +Das LilyPond-Team ist jedoch verhältnismäßig klein, sodass nicht alle Konversionen +automatisch funktionieren. Unten eine Liste der bekannten Probleme: + + +@verbatim +1.6->2.0: + Bezifferter Bass wird nicht immer richtig konvertiert, besonders {< + >}. Mats' Kommentar zu einer Lösung: + To be able to run convert-ly + on it, I first replaced all occurrences of '{<' to some dummy like '{#' + and similarly I replaced '>}' with '&}'. After the conversion, I could + then change back from '{ #' to '{ <' and from '& }' to '> }'. + Nicht alle Textbeschriftung wird richtig konvertiert. In der alten Syntax + konnte man mehrere Beschriftungen mit Klammern gruppieren, etwa: + -#'((bold italic) "string") + Das wird falsch konvertiert zu: + -\markup{{\bold italic} "string"} + anstelle von: + -\markup{\bold \italic "string"} +2.0->2.2: + Versteht nicht \partcombine + Kann nicht \addlyrics => \lyricsto, sodass einige Dateien mit vielen Strophen nicht + funktionieren +2.0->2.4: + \magnify wird nicht nach \fontsize verändert. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag wird nicht verändert. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number wird nicht verändert. + - first-page-number no => print-first-page-number = ##f + Zeilenumbrüche in Titelköpfen werden nicht umgewandelt. + - \\\\ als Zeilenumbruch in \header-Feldern => \markup \center-align < + "Erste Zeile" "Zweite Zeile" > + Crescendo und decrescendo-Endpunkte werden nicht umgewandelt. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (benutzt in \set Staff.VoltaBracket = \turnOff) wird nicht richtig konvertiert +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } sollte konvertiert werden in: + \markup{ \center-align {\line { ... }} } + jetzt fehlt aber \line. +2.4->2.6 + Besondere LaTeX-Zeicehn wie $~$ in Text werden nicht in UTF-8 umgewandelt. +2.8 + \score{} muss jetzt immer mit einem musikalischen Ausdruck beginnen. Alles +andere (insbesondere \header{}) darf erst nach den Noten kommen. +@end verbatim diff --git a/Documentation/de/user/GNUmakefile b/Documentation/de/user/GNUmakefile deleted file mode 100644 index 50042f40cb..0000000000 --- a/Documentation/de/user/GNUmakefile +++ /dev/null @@ -1,4 +0,0 @@ -ISOLANG = de -depth = ../../.. -LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-user -include $(depth)/make/stepmake.make diff --git a/Documentation/de/user/ancient.itely b/Documentation/de/user/ancient.itely deleted file mode 100644 index 2192ad0467..0000000000 --- a/Documentation/de/user/ancient.itely +++ /dev/null @@ -1,2067 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 4770e4e71ebff6104cad46bd2d889c3ff6ba3875 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Ancient notation -@section Ancient notation - -@lilypondfile[quote]{ancient-headword.ly} - -@cindex Vaticana, Editio -@cindex Medicaea, Editio -@cindex Hufnagel -@cindex Petrucci -@cindex Mensuralnotation - -@menu -* Introduction to ancient notation:: -* Alternative note signs:: -* Additional note signs:: -* Pre-defined contexts:: -* Transcribing ancient music:: -* Editorial markings:: -@end menu - - -@node Introduction to ancient notation -@subsection Introduction to ancient notation - -@untranslated - -@menu -* Ancient notation supported:: -@end menu - - -@node Ancient notation supported -@unnumberedsubsubsec Ancient notation supported - -@untranslated - - -@node Alternative note signs -@subsection Alternative note signs - -@untranslated - -@menu -* Ancient note heads:: -* Ancient accidentals:: -* Ancient rests:: -* Ancient clefs:: -* Ancient flags:: -* Ancient time signatures:: -@end menu - - -@node Ancient note heads -@unnumberedsubsubsec Ancient note heads - -@cindex Notenköpfe, Alte Musik - -Für die Notation Alter Musik kann ein Notenkopfstil ausgewählt werden, der sich -vom Standard (@code{default}) unterscheidet. Dies wird erreicht, indem die -@code{style}-Eigenschaft der Notenkopf-(@rinternals{NoteHead})-Objekte auf -einen der Werte @code{baroque}, @code{neomensural}, @code{mensural} oder -@code{petrucci} gesetzt wird. Der barocke (@code{baroque}) Stil unterscheidet -sich vom Standard (@code{default}) nur in sofern, als eine viereckige Form für -die Brevis (@code{\breve}) benutzt wird. Der @code{neomensural}-Stil -unterscheidet sich vom barocken Stil darin, dass hier rhomboide Notenköpfe für -ganze Noten und kleinere Notenwerte eingesetzt werden. Hälse werden über oder -unter den Notenköpfen zentriert. Dieser Stil ist vor allem dann sinnvoll, wenn -mensurale Musik transkribiert werden soll, etwa für ein Incipit. Der -mensurale (@code{mensural}) Stil erstellt Notenköpfe, die das Aussehen -historischer Drucke des 16. Jahrhunderts imitieren. Der @code{petrucci}-Stil -schließlich imitiert auch historische Drucke, verwendet allerdings größere -Notenköpfe. - -Das folgende Beispiel soll den neomensuralen Stil demonstrieren: - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\override NoteHead #'style = #'neomensural -a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 -@end lilypond - -Für die Notation des Gregorianischen Chorals werden vom -@rinternals{Vaticana_ligature_engraver} automatisch die richtigen Notenköpfe -ausgewählt, so dass man den Stil nicht manuell setzen muss. Trotzdem kann -der Stil manuell verändert werden, z. B. auf den Wert -@code{vaticana_punctum}, um Punktum-Neumen zu produzieren. Gleichfalls erstellt -der @rinternals{Mensural_ligature_engraver} automatisch Ligaturen der -Mensuralnotation. Siehe @ref{Ligatures} zu einer Übersicht über die Funktion -und Notation von Ligaturen. - - -@seealso -@ref{Note head styles} stellt einen Überblick über alle verfügbaren -Notenkopfstile zur Verfügung. - - -@node Ancient accidentals -@unnumberedsubsubsec Ancient accidentals - -@cindex Vorzeichen, Alte Musik - -Mit der @code{glyph-name-alist}-Eigenschaft der -Versetzungszeichen-(@rinternals{Accidental})- und -Vorzeichen-(@rinternals{KeySignature})-Eigenschaften können Vorzeichen -und Versetzungszeichen für die Alte Musik ausgewählt werden. - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "vaticana" - \line { " " \musicglyph #"accidentals.vaticana-1" - " " \musicglyph #"accidentals.vaticana0" } - } - \column { - "medicaea" - \line { " " \musicglyph #"accidentals.medicaea-1" } - } - \column { - "hufnagel" - \line { " " \musicglyph #"accidentals.hufnagel-1" } - } - \column { - "mensural" - \line { " " \musicglyph #"accidentals.mensural-1" - " " \musicglyph #"accidentals.mensural1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -Wie zu sehen ist, werden nicht alle Versetzungszeichen von jedem Stil -unterstützt. Wenn versucht wird, ein Versetzungszeichen zu notieren, -das von einem bestimmten Stil nicht unterstützt wird, wechselt LilyPond zu einem -anderen Stil, wie in dem Beispiel -@code{ancient-accidentals.ly} demonstriert wird. -@c FIX: was @lsr{ancient,ancient-accidentals.ly} --FV - - -Ähnlich wie Versetzungszeichen können auch die Vorzeichen für die Angabe der -Tonart verändert werden, indem die @code{glyph-name-alist}-Eigenschaft -des @rinternals{KeySignature}-Objektes gesetzt wird. - - -@seealso -In diesem Handbuch: @ref{Pitches}, @ref{Accidentals} und -@ref{Automatic accidentals} geben eine allgemeine Einführung in die Benutzung -von Versetzungszeichen. Der Abschnitt @ref{Key signature} zeigt die allgemeine -Benutzung von Vorzeichen. - -Programmreferenz: -@rinternals{KeySignature}. - -Beispiele: -@rlsr{Ancient notation}. - - -@node Ancient rests -@unnumberedsubsubsec Ancient rests - -@cindex Pausen, Alte Musik - -Besondere Pausensymbole für die Notation der Alten Musik können mit der -@code{style}-Eigenschaft des graphischen Objektes (grob) @qq{Pause} -(@rinternals{Rest}) angewählt werden. Unterstützte Stile sind -klassisch (@code{classical}), @code{neomensural} und @code{mensural}. -Der klassische (@code{classical}) Stil unterscheidet sich vom Standardstil -(@code{default}) nur darin, dass die Viertelpause wie eine gespiegelte -Achtelpause aussieht. Der neomensurale Stil eignet sich gut, um z. B. das -Incipit von transkribierter Musik zu notieren. Der mensurale Stil ahmt die -Form von Pausen nach, wie man sie in Drucken des 16. Jahrhunderts finden kann. - -Das nächste Beispiel demonstriert den neomensuralen (@code{neomensural}) -Stil: - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\override Rest #'style = #'neomensural -r\longa r\breve r1 r2 r4 r8 r16 -@end lilypond - -Es gibt keine 32-stel- und 64-stel-Pausen für den mensuralen oder neomensuralen -Stil. Anstatt dessen werden die Pausenformen des Standardstiles verwendet. -Vgl. eine Liste aller vorhandenen Pausen in @code{pitches,rests}. -@c FIX: was lsr{pitches,rests}. -FV - - -Für die Notation des Gregorianischen Chorals gibt es keine Pausen; anstelle -dessen werden @ref{Divisiones} verwendet. - - -@seealso -In diesem Handbuch: Der Abschnitt @ref{Rests} enthält eine allgemeine -Einführung zur Benutzung von Pausen. - - -@node Ancient clefs -@unnumberedsubsubsec Ancient clefs - -@cindex Schlüssel, Alte Musik - -LilyPond unterstützt eine große Anzahl von Notenschlüsseln, von denen eine -ganze Anzahl für die Alte Musik geeignet ist. - -In der Tabelle unten werden alle Schlüssel für die Alte Musik gezeigt, die -mit dem @code{\clef}-Befehl erreicht werden. Manche Schlüssel benutzen den -selben Schlüssel, unterscheiden sich aber in der Notenlinie, auf der der -Schlüssel notiert wird. In diesem Fällen ist eine Nummer im Schlüsselnamen -eingefügt. Man kann aber trotzdem eine beliebige Nummer erzwingen, wie es im -Abschnitt @ref{Clef} beschrieben wird. Die Note, die rechts von jedem Schlüssel -gesetzt ist, zeigt das @code{c'} in Bezug zu dem jeweiligen Schlüssel. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Beschreibung} -@tab -@b{Unterstützte Schlüssel} -@tab -@b{Beispiel} - -@item -Mensuraler C-Schlüssel im modernen Stil -@tab -@code{neomensural-c1}, @code{neomensural-c2},@* -@code{neomensural-c3}, @code{neomensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "neomensural-c2" c -@end lilypond - -@item -Mensuraler C-Schlüssel im Petrucci-Stil, zur Benutzung auf verschiedenen -Notenlinien (im -Beispiel den Schlüssel auf der zweiten Linie) -@tab -@code{petrucci-c1}, @code{petrucci-c2},@* -@code{petrucci-c3}, @code{petrucci-c4},@* -@code{petrucci-c5} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Mensuraler F-Schlüssel im Petrucci-Stil -@tab -@code{petrucci-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Mensuraler G-Schlüssel im Petrucci-Stil -@tab -@code{petrucci-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-g" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Mensuraler C-Schlüssel im historischen Stil -@tab -@code{mensural-c1}, @code{mensural-c2},@* -@code{mensural-c3}, @code{mensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Mensuraler F-Schlüssel im historischen Stil -@tab -@code{mensural-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Mensuraler G-Schlüssel im historischen Stil -@tab -@code{mensural-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-g" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Do-Schlüssel der Editio Vaticana -@tab -@code{vaticana-do1}, @code{vaticana-do2},@* -@code{vaticana-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-do2" - c -@end lilypond - -@item -Fa-Schlüssel der Editio Vaticana -@tab -@code{vaticana-fa1}, @code{vaticana-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-fa2" - c -@end lilypond - -@item -Do-Schlüssel der Editio Medicaea -@tab -@code{medicaea-do1}, @code{medicaea-do2},@* -@code{medicaea-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-do2" - c -@end lilypond - -@item -Fa-Schlüssel der Editio Medicaea -@tab -@code{medicaea-fa1}, @code{medicaea-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-fa2" - c -@end lilypond - -@item -Hufnagel Do-Schlüssel für den historischen Stil -@tab -@code{hufnagel-do1}, @code{hufnagel-do2},@* -@code{hufnagel-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do2" - c -@end lilypond - -@item -Hufnagel Fa-Schlüssel für den historischen Stil -@tab -@code{hufnagel-fa1}, @code{hufnagel-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-fa2" - c -@end lilypond - -@item -Kombinierter Do/Fa-Hufnagelschlüssel für den historischen Stil -@tab -@code{hufnagel-do-fa} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do-fa" - c -@end lilypond -@end multitable - -@emph{Moderner Stil} bedeutet: @qq{Wie in modernen Editionen von -transkribierter Mensuralmusik benutzt.} - -@emph{Petrucci-Stil} bedeutet: @qq{Inspiriert von Drucken, die der berühmte -Notensetzer Petrucci (1466--1539) produziert hat.} - -@emph{Historischer Stil} bedeutet: @qq{Wie in anderen als Petruccis Editionen -gedruckt oder geschrieben wurde.} - -@emph{Editio XXX-Stil} bedeutet: @qq{Wie in der Editio XXX gedruckt -wird.} - -Petrucci verwendete C-Schlüssel mit unterschiedlich balanciertem vertikalen -Balken auf der linken Seite in Abhängigkeit davon, auf welcher Notenlinie -der Schlüssel gesetzt wird. - - -@seealso -In diesem Handbuch: siehe @ref{Clef}. - - -@knownissues - -Der mensurale G-Schlüssel ist als Petrucci-G-Schlüssel deklariert. - - -@node Ancient flags -@unnumberedsubsubsec Ancient flags - -@cindex Fähnchen, Alte Musik - -Mit der Fähnchen-(@code{flag-style})-Eigenschaft der graphischen Objekte -@qq{Hals} (@rinternals{Stem}) können auch Fähnchen passend zu den Notenköpfen -der Alten Musik gesetzt werden. Neben dem Standardstil (@code{default}) ist -auch ein mensuraler Stil (@code{mensural}) unterstützt. - -@lilypond[quote,fragment,ragged-right,verbatim] -\override Stem #'flag-style = #'mensural -\override Stem #'thickness = #1.0 -\override NoteHead #'style = #'mensural -\autoBeamOff -c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 -c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 -@end lilypond - -Dabei ist die innerste Fahne immer vertikal auf eine Notenlinie ausgerichtet. - -Es gibt keinen eigenen Stil für die @qq{neomensurale} Notation. Insofern sollte -für das Incipit bei der Transkription mensuraler Musik der Standardstil -benutzt werden. Für die Notation des Gregorianischen Chorals gibt es keine -Fähnchen. - -@knownissues - -Die Positionierung der Fähnchen an den Hälsen ist leicht verschoben seit einer -Änderung in einer frühen 2.3.x-Version. - -Vertikale Ausrichtung der Fähnchen an einer Notenlinie geht von der Annahme -aus, dass der Hals entweder genau auf einer Notenlinie oder genau zwischen zwei -Notenlinien endet. Das ist aber nicht unbedingt immer der Fall, weil LilyPond -komplizierte Methoden zur Ermittlung des besten Layouts verwendet. Diese -Methoden sollten aber eigentlich nicht zur Notation von mensuraler Musik -eingesetzt werden. - - -@node Ancient time signatures -@unnumberedsubsubsec Ancient time signatures - -@cindex Taktart, Alte Musik -@cindex Mensur - -LilyPond besitzt grundlegende Unterstützung für mensurale Taktangaben. Die -Symbole sind starr verknüpft mit bestimmten Brüchen. Darum müssen die Werte -@code{n} und @code{m} der folgenden Tabelle in den Befehl -@code{\time n/m} eingesetzt werden, um die entsprechenden Symbole zu erhalten. - -@lilypond[quote,ragged-right] -\layout { - indent = 0.0 - \context { - \Staff - \remove Staff_symbol_engraver - \remove Clef_engraver - \remove Time_signature_engraver - } -} -{ - \set Score.timing = ##f - \set Score.barAlways = ##t - s_\markup { "\\time 4/4" }^\markup { " " \musicglyph -#"timesig.neomensural44" } - s - s_\markup { "\\time 2/2" }^\markup { " " \musicglyph -#"timesig.neomensural22" } - s - s_\markup { "\\time 6/4" }^\markup { " " \musicglyph -#"timesig.neomensural64" } - s - s_\markup { "\\time 6/8" }^\markup { " " \musicglyph -#"timesig.neomensural68" } - \break - s_\markup { "\\time 3/2" }^\markup { " " \musicglyph -#"timesig.neomensural32" } - s - s_\markup { "\\time 3/4" }^\markup { " " \musicglyph -#"timesig.neomensural34" } - s - s_\markup { "\\time 9/4" }^\markup { " " \musicglyph -#"timesig.neomensural94" } - s - s_\markup { "\\time 9/8" }^\markup { " " \musicglyph -#"timesig.neomensural98" } - \break - s_\markup { "\\time 4/8" }^\markup { " " \musicglyph -#"timesig.neomensural48" } - s - s_\markup { "\\time 2/4" }^\markup { " " \musicglyph -#"timesig.neomensural24" } -} -@end lilypond - -Mit der @code{style}-Eigenschaft des Objektes @rinternals{TimeSignature} -können die Taktarten angewählt werden. Unterstützte Stile sind: -@code{neomensural} und @code{mensural}. In der Tabelle oben wurde der -neomensurale Stil verwendet. Dieser Stil ist geeignet, um im Incipt von -transkribierter Mensuralmusik eingesetzt zu werden. Der mensurale Stil dagegen -ahmt die Form historischer Druck des 16. Jahrhunderts nach. - -Im folgenden Beispiel sind die unterschiedlichen Stile dargestellt. - -@lilypond[ragged-right,fragment,relative=1,quote] -{ - \textLengthOn - - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter default } - - \override Staff.TimeSignature #'style = #'numbered - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter numbered } - - \override Staff.TimeSignature #'style = #'mensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter mensural } - - \override Staff.TimeSignature #'style = #'neomensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter neomensural } - \override Staff.TimeSignature #'style = #'single-digit - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter single-digit } -} -@end lilypond - - -@seealso -In diesem Handbuch: @ref{Time signature} bietet eine allgemeine Übersicht über -den Einsatz von Taktangaben. - - -@knownissues - -Die Verhältnisse der Notenwerte ändern sich nicht, wenn die Taktart (Mensur) -gewechselt wird. Zum Beispiel muss das Verhältnis 1 brevis = 3 semibrevis -(tempus perfectum) manuell erstellt werden, indem folgende Variable erstellt -wird: - -@example -breveTP = #(ly:make-duration -1 0 3 2) -@dots{} -@{ c\breveTP f1 @} -@end example - -@noindent -Hiermit wird die Variable @code{breveTP} auf den Wert -@qq{3/2 mal 2 = 3 mal eine Ganze} gesetzt. - -Das @code{old6/8alt}-Symbol (ein alternatives Symbol für 6/8) kann nicht -mit dem Befehl @code{\time} angesprochen werden. Verwenden Sie anstatt dessen -eine Textbeschriftung (@code{\markup}). - - -@node Additional note signs -@subsection Additional note signs - -@untranslated - -@menu -* Ancient articulations:: -* Custodes:: -* Divisiones:: -* Ligatures:: -* White mensural ligatures:: -* Gregorian square neumes ligatures:: -@end menu - - -@node Ancient articulations -@unnumberedsubsubsec Ancient articulations - -@cindex articulations - -Zusätzlich zu den Standardartikulationszeichen, wie sie im Abschnitt -@ref{Articulations and ornamentations} beschrieben werden, werden auch Artikulationszeichen -für die Alte Musik zur Verfügung gestellt. Diese sind darauf hin geformt, dass -sie mit der Notation des Editio Vaticana-Stils verwendet werden können. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \override TextScript #'font-family = #'typewriter - \override TextScript #'font-shape = #'upright - \override Script #'padding = #-0.1 - a\ictus_"ictus" \break - a\circulus_"circulus" \break - a\semicirculus_"semicirculus" \break - a\accentus_"accentus" \break - \[ a_"episem" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] - } -} -@end lilypond - -@knownissues - -Einige Artikulationszeichen sind vertikal zu dich an den entsprechenden -Notenköpfen gesetzt. - -Die Episem-Linie wird in vielen Fällen nicht angezeigt. Wenn sie angezeigt wird, -ist das rechte Ende der Episem-Linie oft zu weit rechts. - - -@node Custodes -@unnumberedsubsubsec Custodes - -@cindex Custodes - -Ein @emph{custos} (Plural: @emph{custodes}; Lateinisch: @qq{Beschützer}) ist -ein Symbol, das am Ende jedes Notensystems erscheint. Es nimmt die Tonhöhe -der ersten Note der nächsten Zeile vorweg und hilft damit dem Vortragenden, -die Zeilenwechsel während der Vorführung zu bewältigen. - -Custodes wurden bis zum 17. Jahrhundert sehr häufig in der Musiknotation -eingesetzt. Heute finden sie sich nur noch in einigen bestimmten -Notationsformen, etwa modernen Editionen des Gregorianischen Chorals wie die -@emph{editio vaticana}. LilyPond stellt unterschiedliche Custos-Symbole für -die unterschiedlichen Notationsstile zur Verfügung. - -Damit Custodes angezeigt werden, muss ein @rinternals{Custos_engraver} -im @rinternals{Staff}-Kontext gefordert werden. Der Aufruf folgt im Rahmen -des Layout-Kontextes, wie das folgende Beispiel zeigt. - -@example -\layout @{ - \context @{ - \Staff - \consists Custos_engraver - Custos \override #'style = #'mensural - @} -@} -@end example - -Das Ergebnis sieht ungefähr folgendermaßen aus: - -@lilypond[quote,ragged-right] -\score { -{ - a'1 - \override Staff.Custos #'style = #'mensural - \break - g' -} -\layout { - \context { \Staff \consists Custos_engraver } - } -} -@end lilypond - -Das Custos-Zeichen wird von der @code{style}-Eigenschaft ausgewählt. Die -unterstützten Stile sind: @code{vaticana}, @code{medicaea}, @code{hufnagel} -und @code{mensural}. Sie werden im folgenden Fragment demonstriert. - -@lilypond[quote,ragged-right,fragment] -\new Lyrics \lyricmode { - \markup { \column { - \typewriter "vaticana" - \line { " " \musicglyph #"custodes.vaticana.u0" } - } } - \markup { \column { - \typewriter "medicaea" - \line { " " \musicglyph #"custodes.medicaea.u0" } - }} - \markup { \column { - \typewriter "hufnagel" - \line { " " \musicglyph #"custodes.hufnagel.u0" } - }} - \markup { \column { - \typewriter "mensural" - \line { " " \musicglyph #"custodes.mensural.u0" } - }} -} -@end lilypond - - -@seealso -Programmreferenz: -@rinternals{Custos}. - -Beispiele: -@rlsr{Ancient notation}. - - -@node Divisiones -@unnumberedsubsubsec Divisiones - -@cindex divisio -@cindex divisiones -@cindex finalis - -Eine @emph{divisio} (Plural: @emph{divisiones}; Latein: @qq{Teilung}) ist ein -Symbol des Notensystemkontextes, das benutzt wird, um Phrasierung und -Abschnitte im Gregorianischen Choral anzuzeigen. Die musikalische Bedeutung -von @emph{divisio minima}, @emph{divisio maior} und @emph{divisio maxima} kann -beschrieben werden als kurze, mittlere und lange Pause, ungefähr wie die -Atemzeichen aus dem Abschnitt @ref{Breath marks}. Das @emph{finalis}-Zeichen -bezeichnet nicht nur das Ende eines Chorals, sondern wird auch oft innerhalb -eines Antiphons/Responsoriums benutzt, um das Ende eines Abschnitts anzuzeigen. - -Divisiones können benutzt werden, indem die Datei @file{gregorian@/-init@/.ly} -in die Quelldatei eingefügt wird. Hier sind die entsprechenden Definitionen -schon abgelegt, so dass es genügt, die Befehle @code{\divisioMinima}, -@code{\divisioMaior}, @code{\divisioMaxima} und @code{\finalis} an den -entsprechenden Stellen zu schreiben. Einige Editionen verwenden eine -@emph{virgula} oder @emph{caesura} anstelle der divisio minima. Darum findet -sich in der Datei @file{gregorian@/-init@/.ly} auch eine Definition für -@code{\virgula} und @code{\caesura}. - -@lilypondfile[quote,ragged-right]{divisiones.ly} - - -@predefined -@funindex \virgula -@code{\virgula}, -@funindex \caesura -@code{\caesura}, -@funindex \divisioMinima -@code{\divisioMinima}, -@funindex \divisioMaior -@code{\divisioMaior}, -@funindex \divisioMaxima -@code{\divisioMaxima}, -@funindex \finalis -@code{\finalis}. -@endpredefined - - -@seealso -In diesem Handbuch: -@ref{Breath marks}. - -Programmreferenz: -@rinternals{BreathingSign}. - -Beispiele: -@rlsr{Winds}. - - -@node Ligatures -@unnumberedsubsubsec Ligatures -@cindex Ligaturen - -@c TODO: Should double check if I recalled things correctly when I wrote -@c down the following paragraph by heart. - -Eine Ligatur ist ein graphisches Symbol das wenigstens zwei unterschiedliche -Noten darstellt. Ligaturen treten ursprünglich in Manuskripten des -Gregorianischen Chorals auf, um auf- oder absteigende Notensequenzen zu -notieren. - -Ligaturen werden eingegeben, indem die dazugehörigen Noten zwischen -@code{\[} und @code{\]} eingeschlossen werden. Einige Ligaturstile benötigen -zusätzliche Syntax für eine bestimmte Ligatur. In der Standardeinstellung -setzt der @rinternals{LigatureBracket} ganz einfach eckige Klammern über -die Noten der Ligatur. - -@lilypond[quote,ragged-right,verbatim] -\transpose c c' { - \[ g c a f d' \] - a g f - \[ e f a g \] -} -@end lilypond - -Um einen gestimmten Ligaturstil auszuwählen, muss ein entsprechender -Ligatur-Engraver zum Stimmkontext hinzugefügt werden, wie in den folgenden -Abschnitten erklärt wird. Nur weiße Mensuralligaturen sind unterstützt -- mit -Einschränkungen. - -@knownissues - -Ligaturen benötigen von klassischer Notation unterschiedliche Platzaufteilung, -was sie aber noch nicht können. Darum ist fast immer zu viel Platz zwischen -Ligaturen und Zeilenumbrüche sind ungenügend. Text lässt sich auch nicht -richtig an Ligaturen ausrichten. - -Akzidentien dürfen nicht innerhalb von einer Ligatur gedruckt werden, sondern -müssen gesammelt und vor der Ligatur ausgegeben werden. - -Die Syntax verwendet immer noch den verworfenen Infix-Stil (@code{\[ -musik. Ausdr. \]}). Für die Konsistenz soll dies geändert werden in den -Postfix-Stil (@code{Note\[ ... Note\]}). Alternativ kann die Datei -@file{gregorian@/-init@/.ly} eingefügt werden, die eine Scheme-Funktion -@example -\ligature @var{musik. Ausdr.} -@end example -mit der selben Wirkung zur Verfügung stellt und stabil zu sein scheint. - - -@node White mensural ligatures -@unnumberedsubsubsec White mensural ligatures - -@cindex Mensuralligaturen -@cindex Weiße Mensuralligaturen -@cindex Ligaturen, weiße Mensuralnotation - -Begrenzte Unterstützung für Ligaturen der weißen Mensuralnotation. - -Um weiße Mensuralligaturen zu benutzen, muss innerhalb des Layout-Blocks -im @rinternals{Voice}-Kontext der @rinternals{Mensural_ligature_engraver} -aktiviert werden und gleichzeitig der -@rinternals{Ligature_bracket_engraver} (der die Klammern über den Noten -setzt) entfernt werden, wie im Beispiel. - -@example -\layout @{ - \context @{ - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - @} -@} -@end example - -Zusätzlich zu diesen Einstellungen gibt es keine eigenen Befehle, die die -Form einer Ligatur bestimmen. Die Form wird vielmehr aus Tonhöhen und -Tondauern der in Klammern gesetzten Noten geschlossen. Diese -Herangehensweise erfordert einige Eingewöhnung, hat aber den großen -Vorteil, dass der musikalische Inhalt der Ligatur dem Programm bekannt ist. -Das ist nicht nur notwendig für korrekte MIDI-Ausgabe, sondern erlaubt -es auch, automatische Transkriptionen von Ligaturen anzufertigen. - -Eine Datei kann zum Beispiel so aussehen: - -@example -\set Score.timing = ##f -\set Score.defaultBarType = "empty" -\override NoteHead #'style = #'neomensural -\override Staff.TimeSignature #'style = #'neomensural -\clef "petrucci-g" -\[ c'\maxima g \] -\[ d\longa c\breve f e d \] -\[ c'\maxima d'\longa \] -\[ e'1 a g\breve \] -@end example -@lilypond[quote,ragged-right] -\score { - \transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] - } - \layout { - \context { - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - } -} -@end lilypond - -Wenn der @rinternals{Ligature_bracket_engraver} nicht durch den -@rinternals{Mensural_ligature_engraver} ersetzt wird, werden die Noten -wie folgt ausgegeben: - -@lilypond[quote,ragged-right] -\transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] -} -@end lilypond - -@knownissues - -Die horizontale Positionierung ist sehr schlecht. - - -@node Gregorian square neumes ligatures -@unnumberedsubsubsec Gregorian square neumes ligatures - -@cindex Quadratische Neumenligaturen -@cindex Gregorianische quadratische Neumenligaturen -@cindex Ligaturen der quadratischen Neumennotation - -Beschränkte Unterstützung für gregorianische Quadratneumen-Ligaturen -(nach dem Stil der Editio Vaticana) ist vorhanden. Die wichtigsten -Ligaturen können schon gesetzt werden, aber wichtige Eigenschaften -anspruchsvoller Typographie wie horizontale Ausrichtung von mehreren -Ligaturen, korrekte Silbenpositionierung und richtiger Umgang mit -Versetzungszeichen fehlen noch. - -Die folgende Tabelle enthält die erweiterte Neumenliste des zweiten Bands des - Antiphonale Romanum (@emph{Liber Hymnarius}), -1983 von den Mönchen von Solesmes herausgegeben. - -@multitable @columnfractions .4 .2 .2 .2 - -@item -@b{Neuma aut@* -Neumarum Elementa} -@tab -@b{Figurae@* -Rectae} -@tab -@b{Figurae@* -Liquescentes@* -Auctae} -@tab -@b{Figurae@* -Liquescentes@* -Deminutae} - -@c TODO: \layout block is identical in all of the below examples. -@c Therefore, it should somehow be included rather than duplicated all -@c the time. --jr - -@c why not make identifiers in ly/engraver-init.ly? --hwn - -@c Because it's just used to typeset plain notes without -@c a staff for demonstration purposes rather than something -@c special of Gregorian chant notation. --jr - -@item -@code{1. Punctum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ b \] - \noBreak s^\markup {"a"} \noBreak - - % Punctum Inclinatum - \[ \inclinatum b \] - \noBreak s^\markup {"b"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Ascendens - \[ \auctum \ascendens b \] - \noBreak s^\markup {"c"} \noBreak - - % Punctum Auctum Descendens - \[ \auctum \descendens b \] - \noBreak s^\markup {"d"} \noBreak - - % Punctum Inclinatum Auctum - \[ \inclinatum \auctum b \] - \noBreak s^\markup {"e"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Parvum - \[ \inclinatum \deminutum b \] - \noBreak s^\markup {"f"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{2. Virga} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Virga - \[ \virga b \] - \noBreak s^\markup {"g"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@tab - -@item -@code{3. Apostropha vel Stropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha - \[ \stropha b \] - \noBreak s^\markup {"h"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha Aucta - \[ \stropha \auctum b \] - \noBreak s^\markup {"i"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{4. Oriscus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Oriscus - \[ \oriscus b \] - \noBreak s^\markup {"j"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@tab - -@item -@code{5. Clivis vel Flexa} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis vel Flexa - \[ b \flexa g \] - s^\markup {"k"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Descendens - \[ b \flexa \auctum \descendens g \] - \noBreak s^\markup {"l"} \noBreak - - % Clivis Aucta Ascendens - \[ b \flexa \auctum \ascendens g \] - \noBreak s^\markup {"m"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Cephalicus - \[ b \flexa \deminutum g \] - s^\markup {"n"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{6. Podatus vel Pes} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Podatus vel Pes - \[ g \pes b \] - s^\markup {"o"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens - \[ g \pes \auctum \descendens b \] - \noBreak s^\markup {"p"} \noBreak - - % Pes Auctus Ascendens - \[ g \pes \auctum \ascendens b \] - \noBreak s^\markup {"q"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Epiphonus - \[ g \pes \deminutum b \] - s^\markup {"r"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{7. Pes Quassus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus - \[ \oriscus g \pes \virga b \] - s^\markup {"s"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus Auctus Descendens - \[ \oriscus g \pes \auctum \descendens b \] - s^\markup {"t"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{8. Quilisma Pes} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma Pes - \[ \quilisma g \pes b \] - s^\markup {"u"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma Pes Auctus Descendens - \[ \quilisma g \pes \auctum \descendens b \] - s^\markup {"v"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{9. Podatus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Initio Debilis - \[ \deminutum g \pes b \] - s^\markup {"w"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens Initio Debilis - \[ \deminutum g \pes \auctum \descendens b \] - s^\markup {"x"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{10. Torculus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus - \[ a \pes b \flexa g \] - s^\markup {"y"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens - \[ a \pes b \flexa \auctum \descendens g \] - s^\markup {"z"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus - \[ a \pes b \flexa \deminutum g \] - s^\markup {"A"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{11. Torculus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Initio Debilis - \[ \deminutum a \pes b \flexa g \] - s^\markup {"B"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens Initio Debilis - \[ \deminutum a \pes b \flexa \auctum \descendens g \] - s^\markup {"C"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus Initio Debilis - \[ \deminutum a \pes b \flexa \deminutum g \] - s^\markup {"D"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{12. Porrectus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus - \[ a \flexa g \pes b \] - s^\markup {"E"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Auctus Descendens - \[ a \flexa g \pes \auctum \descendens b \] - s^\markup {"F"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Deminutus - \[ a \flexa g \pes \deminutum b \] - s^\markup {"G"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{13. Climacus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus - \[ \virga b \inclinatum a \inclinatum g \] - s^\markup {"H"} - } - \layout { \neumeDemoLayout } -} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Auctus - \[ \virga b \inclinatum a \inclinatum \auctum g \] - s^\markup {"I"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Deminutus - \[ \virga b \inclinatum a \inclinatum \deminutum g \] - s^\markup {"J"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{14. Scandicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus - \[ g \pes a \virga b \] - s^\markup {"K"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Auctus Descendens - \[ g \pes a \pes \auctum \descendens b \] - s^\markup {"L"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Deminutus - \[ g \pes a \pes \deminutum b \] - s^\markup {"M"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{15. Salicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus - \[ g \oriscus a \pes \virga b \] - s^\markup {"N"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus Auctus Descendens - \[ g \oriscus a \pes \auctum \descendens b \] - s^\markup {"O"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{16. Trigonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Trigonus - \[ \stropha b \stropha b \stropha a \] - s^\markup {"P"} - } - \layout { \neumeDemoLayout } -} -@end lilypond -@tab -@tab - -@end multitable - -Anders als in den meisten Neumennotationssystemen zeigt der Quellcode -von LilyPond nicht das typographische Aussehen der Ligatur an, sondern -deren musikalischen Inhalt. Der Code @code{\[ a \pes b -\flexa g \]} etwa ergibt einen Torculus, der aus drei Punctum-Köpfen besteht, -während @code{\[ a \flexa g \pes b \]} einen Porrectus mit einer gekrümmten -Flexa und einem einzelnen Punctum ausgibt. -Es gibt also keinen Befehl, der explizit eine gekrümmte Flexa setzen würde; -die Entscheidung, wann diese gesetzt werden soll hängt vielmehr davon ab, -welcher musikalische Inhalt dargestellt werden soll. Der Sinn dieser -Herangehensweise ist es, den Inhalt von der graphischen Repräsentation zu -trennen. Auf diese Art kann mit der gleichen Eingabe ein anderer gregorianischer -Stil gesetzt werden, ohne die Notation zu verändern. - -Die folgende Tabelle zeigt Code-Fragmente, mit denen die Ligaturen der vorigen -Tabelle erstellt werden können. Der Buchstabe in der ersten Spalte jeder Zeile -der unteren Tabelle zeigt an, auf welche Ligatur in der vorigen Tabelle sie sich -bezieht. In der zweiten Spalte erscheint die Bezeichnung der Ligatur. Die dritte -Spalte enthält das Fragment, mit dem die Ligatur erzeugt wurde, wobei -@code{g}, @code{a} und @code{b} als Beispieltonhöhen eingesetzt werden. - -@multitable @columnfractions .02 .31 .67 -@item -@b{#} -@tab -@b{Name} -@tab -@b{Input Language} - -@item -a -@tab -Punctum -@tab -@code{\[ b \]} - -@item -b -@tab -Punctum Inclinatum -@tab -@code{\[ \inclinatum b \]} - -@item -c -@tab -Punctum Auctum@* -Ascendens -@tab -@code{\[ \auctum \ascendens b \]} - -@item -d -@tab -Punctum Auctum@* -Descendens -@tab -@code{\[ \auctum \descendens b \]} - -@item -e -@tab -Punctum Inclinatum@* -Auctum -@tab -@code{\[ \inclinatum \auctum b \]} - -@item -f -@tab -Punctum Inclinatum@* -Parvum @tab -@code{\[ \inclinatum \deminutum b \]} - -@item -g -@tab -Virga -@tab -@code{\[ \virga b \]} - -@item -h -@tab -Stropha -@tab -@code{\[ \stropha b \]} - -@item -i -@tab -Stropha Aucta -@tab -@code{\[ \stropha \auctum b \]} - -@item -j -@tab -Oriscus -@tab -@code{\[ \oriscus b \]} - -@item -k -@tab -Clivis vel Flexa -@tab -@code{\[ b \flexa g \]} - -@item -l -@tab -Clivis Aucta@* -Descendens -@tab -@code{\[ b \flexa \auctum \descendens g \]} - -@item -m -@tab -Clivis Aucta@* -Ascendens -@tab -@code{\[ b \flexa \auctum \ascendens g \]} - -@item -n -@tab -Cephalicus -@tab -@code{\[ b \flexa \deminutum g \]} - -@item -o -@tab -Podatus vel Pes -@tab -@code{\[ g \pes b \]} - -@item -p -@tab -Pes Auctus@* -Descendens -@tab -@code{\[ g \pes \auctum \descendens b \]} - -@item -q -@tab -Pes Auctus@* -Ascendens -@tab -@code{\[ g \pes \auctum \ascendens b \]} - -@item -r -@tab -Epiphonus -@tab -@code{\[ g \pes \deminutum b \]} - -@item -s -@tab -Pes Quassus -@tab -@code{\[ \oriscus g \pes \virga b \]} - -@item -t -@tab -Pes Quassus@* -Auctus Descendens @tab -@code{\[ \oriscus g \pes \auctum \descendens b \]} - -@item -u -@tab -Quilisma Pes -@tab -@code{\[ \quilisma g \pes b \]} - -@item -v -@tab -Quilisma Pes@* -Auctus Descendens -@tab -@code{\[ \quilisma g \pes \auctum \descendens b \]} - -@item -w -@tab -Pes Initio Debilis -@tab -@code{\[ \deminutum g \pes b \]} - -@item -x -@tab -Pes Auctus Descendens@* -Initio Debilis -@tab -@code{\[ \deminutum g \pes \auctum \descendens b \]} - -@item -y -@tab -Torculus -@tab -@code{\[ a \pes b \flexa g \]} - -@item -z -@tab -Torculus Auctus@* -Descendens -@tab -@code{\[ a \pes b \flexa \auctum \descendens g \]} - -@item -A -@tab -Torculus Deminutus -@tab -@code{\[ a \pes b \flexa \deminutum g \]} - -@item -B -@tab -Torculus Initio Debilis -@tab -@code{\[ \deminutum a \pes b \flexa g \]} - -@item -C -@tab -Torculus Auctus@* -Descendens Initio Debilis -@tab -@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} - -@item -D -@tab -Torculus Deminutus@* -Initio Debilis -@tab -@code{\[ \deminutum a \pes b \flexa \deminutum g \]} - -@item -E -@tab -Porrectus -@tab -@code{\[ a \flexa g \pes b \]} - -@item -F -@tab -Porrectus Auctus@* -Descendens -@tab -@code{\[ a \flexa g \pes \auctum \descendens b \]} - -@item -G -@tab -Porrectus Deminutus -@tab -@code{\[ a \flexa g \pes \deminutum b \]} - -@item -H -@tab -Climacus -@tab -@code{\[ \virga b \inclinatum a \inclinatum g \]} - -@item -I -@tab -Climacus Auctus -@tab -@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} - -@item -J -@tab -Climacus Deminutus -@tab -@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} - -@item -K -@tab -Scandicus -@tab -@code{\[ g \pes a \virga b \]} - -@item -L -@tab -Scandicus Auctus@* -Descendens -@tab -@code{\[ g \pes a \pes \auctum \descendens b \]} - -@item -M -@tab -Scandicus Deminutus -@tab -@code{\[ g \pes a \pes \deminutum b \]} - -@item -N -@tab -Salicus -@tab -@code{\[ g \oriscus a \pes \virga b \]} - -@item -O -@tab -Salicus Auctus Descendens -@tab -@code{\[ g \oriscus a \pes \auctum \descendens b \]} - -@item -P -@tab -Trigonus -@tab -@code{\[ \stropha b \stropha b \stropha a \]} -@end multitable - -Die Ligaturen dieser Liste dienen als begrenzter, aber doch -repräsentativer Vorrat an Ligaturbeispielen des Gregorianischen -Chorals. Innerhalb der Ligaturbegrenzungen @code{\[} und -@code{\]} kann jedoch problemlos jede nur mögliche Anzahl an -Noten gesetzt werden, und Präfixe wie -@code{\pes}, @code{\flexa}, @code{\virga}, @code{\inclinatum}, -usw können nach Belieben gemischt werden. Die Regeln, -die der Konstruktion der Ligaturen in den Tabellen zugrunde liegen, -werden entsprechend angepasst. Auf diese Weise können unendlich -viele Ligaturen gesetzt werden. - -Augmentum-Punkte, auch @emph{morae} genannt, werden mit dem -Befehl @code{\augmentum} hinzugefügt. @code{\augmentum} ist allerdings -als eigene musikalische Funktion gebaut und nicht als ein Notenpräfix. -Insofern hat der Befehl in diesem Kontext: -@code{\augmentum \virga c} keine sichtbaren Auswirkungen. Erst mit -@code{\virga \augmentum c} oder @code{\augmentum @{\virga c@}} -funktionieren beide Befehle. Es ist auch möglich, mit -@code{\augmentum @{a g@}} die Schreibweise -@code{\augmentum a \augmentum g} abzukürzen. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \[ \augmentum a \flexa \augmentum g \] - \augmentum g - } -} -@end lilypond - - -@predefined -Folgende Notenpräfixe sind unterstützt: -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. -@endpredefined - - -Präfixe können kombiniert werden, wenn es hier auch Begrenzungen -gibt. Zum Beispiel können die Präfixe @code{\descendens} oder -@code{\ascendens} vor einer Note geschrieben werden, aber nicht -beide für die selbe Note -. -@funindex \pes -@funindex \flexa -Zwei benachbarte Noten können mit den @code{\pes} und -@code{\flexa}-Infixen verbunden werden, um eine steigende bwz. -fallende Melodielinie zu notieren. - -@funindex \augmentum -Die musikalische Funktion @code{\augmentum} muss benutzt werden, um -augmentum-Punkte hinzuzufügen. - -@knownissues - -Wenn ein @code{\augmentum}-Punkt am Ende des letzten Systems innerhalb -einer Ligatur gesetzt wird, ist er vertikal etwas falsch positioniert. Als -Abhilfe kann eine unsichtbare Note (z. B. @code{s8}) als letzte Note im -System eingegeben werden. - -@code{\augmentum} sollte als Präfix implementiert sein, nicht als eigene -musikalische Funktion, so dass @code{\augmentum} mit den anderen -Präfixen in arbiträrer Reihenfolge notiert werden kann. - - -@node Pre-defined contexts -@subsection Pre-defined contexts - -@untranslated - -@menu -* Gregorian chant contexts:: -* Mensural contexts:: -@end menu - - -@node Gregorian chant contexts -@unnumberedsubsubsec Gregorian chant contexts - -@cindex VaticanaVoiceContext -@cindex VaticanaStaffContext - -Die vordefinierten Kontexte @code{VaticanaVoiceContext} (für eine -gregorianische Stimme) und @code{VaticanaStaffContext} (für ein -gregorianisches Notensystem) können eingesetzt werden, um -Gregorianischen Choral im Stil der Editio Vaticana zu setzen. Diese -Kontexte initialisieren alle relevanten Eigenschaften für das Notensystem -und die graphischen Objekte, so dass unmittelbar mit der Notation -begonnen werden kann. Siehe das folgende Beispiel: - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - << - \new VaticanaVoice = "cantus" { - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] - f \divisioMinima - \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] - c' \divisioMinima \break - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima - } - \new Lyrics \lyricsto "cantus" { - San- ctus, San- ctus, San- ctus - } - >> -} -@end lilypond - - -@node Mensural contexts -@unnumberedsubsubsec Mensural contexts - -@cindex MensuralVoiceContext -@cindex MensuralStaffContext - -Die vordefinierten Kontexte @code{MensuralVoiceContext} und -@code{MensuralStaffContext} können eingesetzt werden, um -ein Stück in Mensuralnotations zu schreiben. Die Kontexte -initialisieren alle relevanten Eigenschaften der Kontexte und -graphischen Objekte, so dass unmittelbar mit der Notation begonnen -werden kann. Siehe das folgende Beispiel: - -@lilypond[quote,ragged-right,verbatim] -\score { - << - \new MensuralVoice = "discantus" \transpose c c' { - \override Score.BarNumber #'transparent = ##t { - c'1\melisma bes a g\melismaEnd - f\breve - \[ f1\melisma a c'\breve d'\melismaEnd \] - c'\longa - c'\breve\melisma a1 g1\melismaEnd - fis\longa^\signumcongruentiae - } - } - \new Lyrics \lyricsto "discantus" { - San -- ctus, San -- ctus, San -- ctus - } - >> -} -@end lilypond - - -@node Transcribing ancient music -@subsection Transcribing ancient music - -@untranslated - -@menu -* Ancient and modern from one source:: -* Incipits:: -* Mensurstriche layout:: -* Transcribing Gregorian chant:: -@end menu - - -@node Ancient and modern from one source -@unnumberedsubsubsec Ancient and modern from one source - -@untranslated - - -@node Incipits -@unnumberedsubsubsec Incipits - -@untranslated - - -@node Mensurstriche layout -@unnumberedsubsubsec Mensurstriche layout - -@untranslated - - -@node Transcribing Gregorian chant -@unnumberedsubsubsec Transcribing Gregorian chant - -@untranslated - - -@node Editorial markings -@subsection Editorial markings - -@untranslated - -@menu -* Annotational accidentals:: -* Baroque rhythmic notation:: -@end menu - - -@node Annotational accidentals -@unnumberedsubsubsec Annotational accidentals - -In der europäischen Musik vor 1600 wurden vom Sänger oftmals -chromatische Alterationen erwartet, die nicht notiert wurden. -Diese Praxis wird @qq{Musica Ficta} genannt. In modernen -Transkripition werden die Versetzungszeichen üblicherweise -oberhalb der Noten gesetzt. - -@cindex Versetzungszeichen, musica ficta -@cindex Musica ficta - -Unterstützung für solche empfohlenen Versetzungszeichen ist -implementiert und kann aktiviert werden, indem die -Eigenschaft @code{suggestAccidentals} auf wahr gesetzt wird. -Siehe auch das Beispiel. - -@funindex suggestAccidentals - -@lilypond[verbatim,fragment,relative=1] -fis gis -\set suggestAccidentals = ##t -ais bis -@end lilypond - - -@seealso -Programmreferenz: @rinternals{Accidental_engraver}-Setzer und das -@rinternals{AccidentalSuggestion}-Objekt. - - -@node Baroque rhythmic notation -@unnumberedsubsubsec Baroque rhythmic notation - -@untranslated - diff --git a/Documentation/de/user/changing-defaults.itely b/Documentation/de/user/changing-defaults.itely deleted file mode 100644 index 4313e125ed..0000000000 --- a/Documentation/de/user/changing-defaults.itely +++ /dev/null @@ -1,391 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Changing defaults -@chapter Changing defaults - -@untranslated - - -@menu -* Interpretation contexts:: -* Explaining the Internals Reference:: -* Modifying properties:: -* Useful concepts and properties:: -* Advanced tweaks:: -@end menu - -@node Interpretation contexts -@section Interpretation contexts - -@untranslated - - -@menu -* Contexts explained:: -* Creating contexts:: -* Modifying context plug-ins:: -* Changing context default settings:: -* Defining new contexts:: -* Aligning contexts:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@untranslated - - -@menu -* Score - the master of all contexts:: -* Top-level contexts - staff containers:: -* Intermediate-level contexts - staves:: -* Bottom-level contexts - voices:: -@end menu - -@node Score - the master of all contexts -@unnumberedsubsubsec Score - the master of all contexts - -@untranslated - - -@node Top-level contexts - staff containers -@unnumberedsubsubsec Top-level contexts - staff containers - -@untranslated - - -@node Intermediate-level contexts - staves -@unnumberedsubsubsec Intermediate-level contexts - staves - -@untranslated - - -@node Bottom-level contexts - voices -@unnumberedsubsubsec Bottom-level contexts - voices - -@untranslated - - -@node Creating contexts -@subsection Creating contexts - -@untranslated - - -@node Modifying context plug-ins -@subsection Modifying context plug-ins - -@untranslated - - -@node Changing context default settings -@subsection Changing context default settings - -@untranslated - - -@node Defining new contexts -@subsection Defining new contexts - -@untranslated - - -@node Aligning contexts -@subsection Aligning contexts - -@untranslated - - -@node Explaining the Internals Reference -@section Explaining the Internals Reference - -@untranslated - - -@menu -* Navigating the program reference:: -* Layout interfaces:: -* Determining the grob property:: -* Naming conventions:: -@end menu - -@node Navigating the program reference -@subsection Navigating the program reference - -@untranslated - - -@node Layout interfaces -@subsection Layout interfaces - -@untranslated - - -@node Determining the grob property -@subsection Determining the grob property - -@untranslated - - -@node Naming conventions -@subsection Naming conventions - -@untranslated - - -@node Modifying properties -@section Modifying properties - -@untranslated - - -@menu -* Overview of modifying properties:: -* The set command:: -* The override command:: -* The tweak command:: -* set versus override:: -@end menu - -@node Overview of modifying properties -@subsection Overview of modifying properties - -@untranslated - - -@node The set command -@subsection The @code{\set} command - -@untranslated - - -@node The override command -@subsection The @code{\override} command - -@untranslated - - -@node The tweak command -@subsection The @code{\tweak} command - -@untranslated - - -@node set versus override -@subsection @code{\set} vs. @code{\override} - -@untranslated - - -@node Useful concepts and properties -@section Useful concepts and properties - -@untranslated - - -@menu -* Input modes:: -* Direction and placement:: -* Distances and measurements:: -* Staff symbol properties:: -* Spanners:: -* Visibility of objects:: -* Line styles:: -* Rotating objects:: -@end menu - -@node Input modes -@subsection Input modes - -@untranslated - - -@node Direction and placement -@subsection Direction and placement - -@untranslated - - -@node Distances and measurements -@subsection Distances and measurements - -@untranslated - - -@node Staff symbol properties -@subsection Staff symbol properties - -@untranslated - - -@node Spanners -@subsection Spanners - -@untranslated - - -@unnumberedsubsubsec Using the @code{spanner-interface} -@unnumberedsubsubsec Using the @code{line-spanner-interface} -@node Visibility of objects -@subsection Visibility of objects - -@untranslated - - -@menu -* Removing the stencil:: -* Making objects transparent:: -* Painting objects white:: -* Using break-visibility:: -* Special considerations:: -@end menu - -@node Removing the stencil -@unnumberedsubsubsec Removing the stencil - -@untranslated - - -@node Making objects transparent -@unnumberedsubsubsec Making objects transparent - -@untranslated - - -@node Painting objects white -@unnumberedsubsubsec Painting objects white - -@untranslated - - -@node Using break-visibility -@unnumberedsubsubsec Using break-visibility - -@untranslated - - -@node Special considerations -@unnumberedsubsubsec Special considerations - -@untranslated - - -@node Line styles -@subsection Line styles - -@untranslated - - -@node Rotating objects -@subsection Rotating objects - -@untranslated - - -@menu -* Rotating layout objects:: -* Rotating markup:: -@end menu - -@node Rotating layout objects -@unnumberedsubsubsec Rotating layout objects - -@untranslated - - -@node Rotating markup -@unnumberedsubsubsec Rotating markup - -@untranslated - - -@node Advanced tweaks -@section Advanced tweaks - -@untranslated - - -@menu -* Aligning objects:: -* Vertical grouping of grobs:: -* Modifying stencils:: -* Modifying shapes:: -@end menu - -@node Aligning objects -@subsection Aligning objects - -@untranslated - - -@menu -* Setting @code{X-offset} and @code{Y-offset} directly:: -* Using the @code{side-position-interface}:: -* Using the @code{self-alignment-interface}:: -* Using the @code{break-aligned-interface}:: -@end menu - -@node Setting @code{X-offset} and @code{Y-offset} directly -@unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly - -@untranslated - - -@node Using the @code{side-position-interface} -@unnumberedsubsubsec Using the @code{side-position-interface} - -@untranslated - - -@node Using the @code{self-alignment-interface} -@unnumberedsubsubsec Using the @code{self-alignment-interface} - -@untranslated - - -@unnumberedsubsubsec Using the @code{aligned-on-parent} procedures -@unnumberedsubsubsec Using the @code{centered-on-parent} procedures -@node Using the @code{break-aligned-interface} -@unnumberedsubsubsec Using the @code{break-aligned-interface} - -@untranslated - - -@node Vertical grouping of grobs -@subsection Vertical grouping of grobs - -@untranslated - - -@node Modifying stencils -@subsection Modifying stencils - -@untranslated - - -@node Modifying shapes -@subsection Modifying shapes - -@untranslated - - -@menu -* Modifying ties and slurs:: -@end menu - -@node Modifying ties and slurs -@unnumberedsubsubsec Modifying ties and slurs - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/de/user/cheatsheet.itely b/Documentation/de/user/cheatsheet.itely deleted file mode 100644 index d6f0857068..0000000000 --- a/Documentation/de/user/cheatsheet.itely +++ /dev/null @@ -1,298 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@c TODO: add tablature. - -@node Cheat sheet -@appendix Cheat sheet - - -@multitable @columnfractions .35 .3 .35 - -@item @b{Syntax} -@tab @b{Erklärung} -@tab @b{Beispiel} - -@item @code{1 2 8 16} -@tab Tondauern -@tab -@lilypond[fragment,relative=2,notime] -\set Staff.autoBeaming = ##f -\override Staff.Clef #'break-visibility = #all-invisible -c1 c2 c8 c16 -@end lilypond - -@item @code{c4. c4..} -@tab Punktierung -@tab -@lilypond[fragment,relative=2,notime] -\override Staff.Clef #'break-visibility = #all-invisible -c4. c4.. -@end lilypond - -@item @code{c d e f g a b } -@tab Tonleiter -@tab -@lilypond[fragment,relative=1,notime] -c d e f g a b -@end lilypond - -@item @code{fis bes} -@tab Vorzeichen -@tab -@lilypond[fragment,relative=1,notime] -fis bes -@end lilypond - -@item @code{\clef treble \clef bass } -@tab Notenschlüssel -@tab -@lilypond[fragment,notime] -\clef treble -s4_" " -\clef bass -s4_" " -@end lilypond - -@item @code{\time 3/4 \time 4/4 } -@tab Taktangaben -@tab -@lilypond[fragment] -\override Staff.Clef #'transparent = ##t -\time 3/4 -s4_" " -\time 4/4 -s16_" " -@end lilypond - - -@item @code{r4 r8} -@tab Pause -@tab -@lilypond[relative=2,notime,fragment] -\override Staff.Clef #'break-visibility = #all-invisible -r4 r8 -@end lilypond - -@item @code{d ~ d} -@tab Bindebogen -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -d ~ d -@end lilypond - -@item @code{\key es \major } -@tab Tonart -@tab -@lilypond[notime,fragment] -\clef treble -\key es \major -s4 -@end lilypond - -@item @var{note}@code{'} -@tab Oktavierung -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -a a' -@end lilypond - -@item @var{note}@code{,} -@tab Oktavierung nach unten -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -c c, -@end lilypond - - -@item @code{c( d e)} -@tab Legatobogen -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c( d e) -@end lilypond - - -@item @code{c\( c( d) e\)} -@tab Phrasierungsbogen -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c\( c( d) e\) -@end lilypond - - -@item @code{a8[ b]} -@tab Balken -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a8-[ b-] -@end lilypond - - -@item @code{<< \new Staff ... >>} -@tab mehr Notensysteme -@tab -@lilypond[fragment] -<< \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } - \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } >> -@end lilypond - - -@item @code{c-> c-.} -@tab Artikulationszeichen -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c-> c-. -@end lilypond - - -@item @code{c2\mf c\sfz} -@tab Dynamik -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c2\mf c\sfz -@end lilypond - - -@item @code{a\< a a\!} -@tab Crescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\< a a\! -@end lilypond - -@item @code{a\> a a\!} -@tab Decrescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\> a a\! -@end lilypond - - -@item @code{< >} -@tab Noten im Akkord -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible - -@end lilypond - - -@item @code{\partial 8} -@tab Auftakt -@tab -@lilypond[fragment,relative=2] -\partial 8 -f8 c2 d e -@end lilypond - - -@item @code{\times 2/3 @{f g a@}} -@tab Triolen -@tab -@lilypond[relative=1,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\times 2/3 { f8 g a } -@end lilypond - - -@item @code{\grace} -@tab Verzierungen -@tab -@lilypond[relative=2,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Voice { \grace b16 c4 } -@end lilypond - -@item @code{\lyricmode @{ twinkle @}} -@tab Texteingabe -@tab -twinkle - - -@item @code{\new Lyrics} -@tab Gesangtext -@tab -@lilypond[fragment] -\new Lyrics \lyricmode { twinkle } -@end lilypond - -@item @code{twin -- kle} -@tab Gesangtext-Trennstrich -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -<< - { g'1 g } - \new Lyrics \lyricsto "" { twin -- kle } ->> -@end lilypond - -@item @code{\chordmode @{ c:dim f:maj7 @}} -@tab Akkorde -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\chordmode { c:dim f:maj7 } -@end lilypond - -@item @code{\context ChordNames} -@tab Akkordsymbole drucken -@tab -@lilypond[fragment,relative=2] -\chords { c:dim f:maj7 } -@end lilypond - -@item @code{<<@{e f@} \\ @{c d@}>>} -@tab Mehrstimmigkeit -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Staff <<{e f} \\ {c d}>> -@end lilypond - - -@item @code{s4 s8 s16} -@tab unsichtbare Pausen -@tab - -@end multitable - diff --git a/Documentation/de/user/chords.itely b/Documentation/de/user/chords.itely deleted file mode 100644 index 0d4044480d..0000000000 --- a/Documentation/de/user/chords.itely +++ /dev/null @@ -1,1111 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Chord notation -@section Chord notation - -@lilypondfile[quote]{chords-headword.ly} - -Akkorde können entweder als normale Noten oder im Akkordmodus -notiert werden; bei letztere Eingabemethode können unterschiedliche -europäische Akkordbezeichnungsstile eingesetzt werden. Akkordbzeichnungen -und Generalbass können auch angezeigt werden. - -@menu -* Chord mode:: -* Displaying chords:: -* Figured bass:: -@end menu - -@node Chord mode -@subsection Chord mode - -@cindex Akkorde -@cindex chord-Akkorde - -Im Akkordmodus (engl. @qq{chord}) werden Akkorde anhand von einem -Symbol der erwünschten Akkordstruktur notiert, anstatt dass die -einzelnen Tonhöhen ausgeschrieben werden. - -@menu -* Chord mode overview:: -* Common chords:: -* Extended and altered chords:: -@end menu - - -@node Chord mode overview -@unnumberedsubsubsec Chord mode overview - -@cindex Akkordbezeichnungen -@cindex Akkordmodus - -Akkorde können als simultane Noten eingegeben werden, wie gezeigt -in @ref{Chorded notes}. - -Akkorde können aber auch im Akkordmodus notiert werden. Das ist -ein Eingabemodus, der sich an Akkordstrukturen traditioneller -europäischer Musik und nicht an bestimmten einzelnen Tonhöhen -orientiert. Er bietet sich an, wenn man es gewohnt ist, Akkordsymbole -zur Beschreibung von Akkorden zu benutzen. Mehr Information zu -unterschiedlichen Eingabemethoden findet sich in @ref{Input modes}. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c1 g a g c } -@end lilypond - -Akkorde, die im Akkordmodus eingegeben werden, sind musikalische -Elemente und können genauso wie Akkorde im Notenmodus -transponiert werden. - -Akkordmodus und Notenmodus können gemischt verwendet werden: - -@lilypond[verbatim,quote,ragged-right,relative=1] -2 -\chordmode { c2 f } -2 -\chordmode { f2 g } -@end lilypond - -@seealso -Glossar: -@rglos{chord}. - -Notationsreferenz: -@ref{Chorded notes}, -@ref{Input modes}. - -Schnipsel: -@rlsr{Chords} - - -@knownissues - -Wenn Akkord- und Notenmodus in linearer Musik abwechseln eingesetzt -werden und der Akkordmodus am Anfang steht, erstellt der -Notenmodus ein neues Notensyste: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2 f } -2 -@end lilypond - -@noindent -Um dieses Verhalten zu verhindert, muss der @code{Staff}-Kontext -explizit aufgerufen werden: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\new Staff { - \chordmode { c2 f } - 2 -} -@end lilypond - - -@node Common chords -@unnumberedsubsubsec Common chords - -@cindex Dreiklänge -@cindex Septakkorde -@cindex Grundton eines Akkords -@cindex Akkordeigenschaften -@cindex Umkehrungen -@cindex Modifikatoren, Akkorde -@cindex Modi, in Akkorden -@cindex Akkordmodi - -Ein Dreiklang wird -mit seinem Grundton mit einer möglichen Dauer dahinter notiert: - -@lilypond[verbatim,quote,relative=1,ragged-right] -\chordmode { c2 f4 g } -@end lilypond - -@noindent -Moll- übermäßige und verminderte Dreiklänge werden notiert, indem -@code{:} und ein Modifikator hinter der Dauer angegeben wird: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2:m f4:aug g:dim } -@end lilypond - -Septakkorde können erstellt werden: - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } -@end lilypond - -@funindex aug -@funindex dim -@funindex maj -@funindex m - -Diese Tabelle zeigt die Funktion der Modifikatoren von Dreiklängen -und Septakkorden. Die siebte Stufe wird standardmäßig als kleine -Septime realisiert, sodass der Dominantseptakkord die Grundform -des Septakkordes darstellt. Alle Alterationen sind relativ zur -Dominantsept. Eine vollständigere Tabelle findet sich in -@ref{Common chord modifiers}. - -@c @table @code -@multitable @columnfractions .2 .4 .3 - -@item -@b{Modifikator} -@tab -@b{Funktion} -@tab -@b{Beispiel} - -@item -Kein -@tab -Standard: erzeugt einen Durdreiklang. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1 -} -@end lilypond - -@item -m, m7 -@tab -Mollakkord: Dieser Modifikator erniedrigt die dritte Stufe. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:m c:m7 -} -@end lilypond - - -@item -dim, dim7 -@tab -Verminderter Akkord: Dieser Modifikator erniedrigt die dritte, fünfte -und (wenn vorhanden) die siebte Stufe. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:dim c:dim7 -} -@end lilypond - -@item -aug -@tab -Übermäßiger Akkord: Dieser Modifikator erhöht die fünfte Stufe. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:aug -} -@end lilypond - -@item -maj, maj7 -@tab -Großer Septakkord: Dieser Modifikator fügt eine erhöhte siebe -Stufe hinzu. @code{7} nach dem @code{maj} ist optional. NICHT -benutzen, um einen Durdreiklang zu notieren. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:maj c:maj7 -} -@end lilypond - -@end multitable - -@seealso -Notationsreferenz: -@ref{Common chord modifiers}, -@ref{Extended and altered chords}. - -Schnipsel: -@rlsr{Chords}. - -@knownissues - -Nur ein Qualitätsmodifikator sollte pro Akkord benutzt werden, meistens -für die höchste Stufe des Akkordes. Akkorde mit weiteren Qualitätsmodifikatoren -werden ohne Warnung oder Fehlermeldung gelesen, aber das Ergebnis ist -nicht vorhersagbar. Akkorde, die nicht mit einem einzigen -Qualitätsmodifikator erreicht werden können, sollten mit einzelnen -Tonhöhen alteriert werden, wie beschrieben in -@ref{Extended and altered chords}. - - -@node Extended and altered chords -@unnumberedsubsubsec Extended and altered chords - -@cindex erweiterte Akkorde -@cindex veränderte Akkorde - -Akkordstrukturen können im Akkordmodus beliebig komplex konstruiert -werden. Die Modifikatoren können benutzt werden, um den Akkord zu -erweitern, bestimmte Stufen hinzuzufügen oder zu entfernen, Stufen -zu erhöhen oder zu erniedrigen und Bassnoten hinzuzufügen bzw. -Umgkehrungen zu erzeugen. - -Die erste Zahl, die auf den Doppelpunkt folgt, wird als @qq{Bereich} -des Akkordes interpretiert: Terzen werden auf dem Grundton -gestapelt, bis die angegebene Zahl (=Tonstufe) erreicht ist. -Die siebte Stufe, die zu einem Akkord hinzugefügt wird, ist die -kleine Septime, nicht die große. Wenn -der Bereich keine Terz ist (also etwa 6), dann werden Terzen bis -zur höchst möglichen Terz unter dem Bereich gestapelt, und der -Endton des Bereichs wird hinzugefügt. Der größtmögliche Wert ist -13. Jeder größere Werte wird als 13 interpretiert. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:2 c:3 c:4 c:5 - c1:6 c:7 c:8 c:9 - c1:10 c:11 c:12 c:13 - c1:14 -} -@end lilypond - -@noindent -Sowhohl @code{c:5} als auch @code{c} erzeugen einen D-Dur-Dreiklang. - -Da eine unveränderte 11 nicht gut klingt, wenn sie mit einer -unveränderten 13 zusammenklingt, wird die 11 von einem @code{:13}-Akkord -entfernt (es sei denn sie wird explizit verlangt). - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:13 c:13.11 c:m13 -} -@end lilypond - -@cindex Grundton eines Akkordes -@cindex Additionen in Akkorden -@cindex Subtraktion in Akkorden -@cindex Hinzufügen von Tönen in Akkorden -@cindex Entfernen von Tönen aus Akkorden - -Kompliziertere Akkorde können auch konstruiert werden, indem -einzelne Intervalle zu dem Grundton addiert werden. -Diese Additionen werden nach dem Bereich notiert und mit -Punkten voneinander getrennt. Die normale Septime, die zu -einem Akkord hinzugefügt wird, ist die kleine Septime, nicht -die große. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:5.6 c:3.7.8 c:3.6.13 -} -@end lilypond - -@noindent -Hinzugefügte Stufen können beliebig groß sein: - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c4:5.15 c:5.20 c:5.25 c:5.30 -} -@end lilypond - -@cindex Akkordstufen, Veränderung -@cindex Akkordstufen, Alteration - -Einzelne Stufen können mit @code{-} oder @code{+} vergrößert -oder verkleinert werden. Um eine Stufe zu verändert, die automatisch -in den Akkord aufgenommen wurde, kann sie in veränderter Form -nach dem Bereich hinzugefügt werden. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:7+ c:5+.3- c:3-.5-.7- -} -@end lilypond - -@cindex Entfernen von Stufen in Akkorden -@cindex Akkorde, Entfernen von Tönen - -@funindex ^ - -Zu entfernende Töne werden mit der gleichen Methode notiert, -allerdings mit einem Dach (@code{^}) vor der Sequenz, die -nicht erscheinen soll. Sie müssen nach den zu addierenden -Tönen notiert werden. Die einzelnen zu entfernenden Töne werden -mit Punkten getrennt. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 -} -@end lilypond - -@funindex sus - -Sekund- und Quartakkorde können mit dem Modifikator @code{sus} -notiert werden. Hiermit wird die dritte Stufe aus dem Akkord -entfernt. Mit einer anschließenden @code{2} wird die zweite, mit -einer @code{4} die vierte Stufe hinzugefügt. @code{sus} entspricht -@code{^3} und @code{sus4} ist gleich @code{.4^3}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1:sus c:sus2 c:sus4 c:5.4^3 -} -@end lilypond - -@cindex Umgekehrungen -@cindex Bassnote in Akkorden - -@funindex / - -Eine Umkehrung (ein Ton des Akkordes wird unter den Grundton gesetzt) -sowie auch zusätzliche Bassnoten können mit dem Schrägstrich (@code{/}) markiert -werden: - -@lilypond[quote,ragged-right,fragment,verbatim, relative=2] -\chordmode { - c1 c/g c/f -} -@end lilypond - -@funindex /+ - -Eine Bassnote, die zum Akkord hinzugehört, kann hinzugefügt werden, -anstatt dass sie aus dem Akkord entnommen wird, indem noch ein -Plus zwischen den Schrägstrich und die Tonhöhe gesetzt wird: - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1 c/g c/+g -} -@end lilypond - -Akkordmodifikatoren, die benutzt werden können, um eine große -Anzahl an Standardakkorden zu erzeugen, werden gezeigt in -@ref{Common chord modifiers}. - -@seealso -Notationsreferenz: -@ref{Common chord modifiers}. - -Schnipsel: -@rlsr{Chords} - -@knownissues - -Jede Stufe kann nur einmal in einem Akkord vorkommen. -Im folgenden Beispiel wird ein erweiterter Akkord erstellt, -weil @code{5+} zuletzt gelesen wird. - -@cindex Cluster -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { - c:5.5-.5+ -} -@end lilypond - -Nur die zweite Umkehrung kann erstellt werden, indem eine -Bassnote hinzugefügt wird. Die erste Umkehrung erfordert, dass -der Grundton des Akkordes geändert wird. - -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { - c'1: c':/g e:6-3-^5 e:m6-^5 -} -@end lilypond - - -@node Displaying chords -@subsection Displaying chords - -Akkorde können zusätzlich zur üblichen Notation als Töne auf -einem Notensystem auch mit einem Akkordsymbol gesetzt werden. - -@menu -* Printing chord names:: -* Customizing chord names:: -@end menu - -@node Printing chord names -@unnumberedsubsubsec Printing chord names - -@funindex ChordNames - -@cindex Akkordsymbole -@cindex Akkordbezeichnungen -@cindex Ausgabe von Akkordbezeichnungen -@cindex Symbole, Akkord- - -Akkordsymbole anstelle der Noten werde im @code{ChordNames}-Kontext -notiert. - -@lilypond[verbatim,quote,relative=1,ragged-right] -\new ChordNames { - \chordmode { - c2 f4. g8 - } -} -@end lilypond - -Die Akkorde können entweder als simultane Noten oder unter Einsatz -des Akkordmodus (@code{chordmode}) notiert werden. Der angezeigte -Akkord ist der gleiche, es sei denn, Umgkehrungen oder zusätzliche -Basstöne werden notiert: - -@lilypond[verbatim,quote,relative=1] -<< - \new ChordNames { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } - { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } ->> -@end lilypond - -@funindex{\chords} - -@code{\chords @{ ... @}} ist eine Kurznotation für die Bezeichnung -@code{\new ChordNames @{ \chordmode @{ ... @} @}}. - -@lilypond[verbatim,quote,ragged-right, relative=1] -\chords { - c2 f4.:m g8:maj7 -} -@end lilypond - -@lilypond[verbatim,quote,ragged-right, relative=1] -\new ChordNames { - \chordmode { - c2 f4.:m g8:maj7 - } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{showing-chords-at-changes.ly} - -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - - -@seealso -Glossar: -@rglos{chord}. - -Notationsreferenz: -@ref{Writing music in parallel}. - -Schnipsel: -@rlsr{Chords}. - -Referenz der Interna: -@rinternals{ChordNames}, -@rinternals{ChordName}, -@rinternals{Chord_name_engraver}, -@rinternals{Volta_engraver}, -@rinternals{Bar_engraver}. - -@knownissues - -Akkorde, die Umkehrungen oder zusätzliche Basstöne beinhalten, -werden nicht richtig bezeichnet, wenn sie im Notenmodus notiert -werden. - - - -@node Customizing chord names -@unnumberedsubsubsec Customizing chord names - -@cindex Anpassen von Akkordsymbolen -@cindex Akkordsymbole, anpassen - -Es gibt kein allein gültiges System zur Benennung von Akkorden. -Unterschiedliche Musiktraditionen benutzen unterschiedliche Bezeichnungen -für die gleichen Akkorde. Es gibt zusätzlich auch unterschiedliche -Symbole, die für den gleichen Akkord angezeigt werden können. Die -Bezeichnungen und dargestellten Symbole können angepasst werden. - -Die Standardeinstellungen für die Symbole entsprechen den Konventionen -im Jazz, wie sie von Klaus Ignatzek (siehe @ref{Literature list}). -vorgeschlagen wurden. Das Benennungssystem für die Akkorde kann -verändert werden, wie weiter unten gezeigt wird. Ein alternatives -Notationssystem für Jazzakkorde ist auch erhältlich. Die -Ignatzek und die alternative Jazznotation finden sich in der Tabelle in -@ref{Chord name chart}. - -@c TODO -- Change this so we don't have a non-verbatim example. -@c Make short example in docs, then move longer example to -@c appendix, where the length of the snippet won't matter. - -Zusätzlich zu den unterschiedlichen Bezeichnungssystemen werden -unterschiedliche Notenbezeichnungen für die Grundtöne. -Die vordefinierten Befehle @code{\germanChords}, -@code{\semiGermanChords}, @code{\italianChords} und @code{\frenchChords} -setzen diese Variablen. Die Auswirkungen werden im nächsten Beispiel -gezeigt. - -@lilypondfile[ragged-right]{chord-names-languages.ly} - -Wenn keine der definierten Einstellungen zum gewünschten Ergebnis -führt, kann die Anzeige des Akkordsymbols durch die folgenden -Eigenschaften verändert werden: - -@table @code - -@funindex chordRootNamer - -@item chordRootNamer - -Das Akkordsymbol wird normalerweise als Buchstabe des Grundtons mit -optionaler Alteration dargestellt. Die Interpretation -einer Tonhöhe als Buchstabe wird von der @code{chordRootNamer}-Funktion -übernommen. Besondere Bezeichnungen, wie etwa im Deutschen H für -einen H-Dur-Akkord (und nicht @qq{B} wie im Englischen), können -durch Hinzufügen einer neuen Funktion zu dieser Eigenschaft -erstellt werden. - -@funindex majorSevenSymbol - -@item majorSevenSymbol - -Mit dieser Eigenschaft wird das Aussehen der Notation für die -große Septime (7) bestimmt. Vordefiniert sind die Optionen -@code{whiteTriangleMarkup} und @code{blackTriangleMarkup}. - -@funindex chordNoteNamer - -@item chordNoteNamer - -Wenn das Akkordsymbol zusätzliche Tonhöhen enthält, die nicht den -Grundton darstellen (etwa eine zusätzliche Bassnote), wird diese -Funktion eingesetzt, um die zusätzliche Tonhöhe auszugeben. -In den Standardeinstellungen wird die Tonhöhe mit der -@code{chordRootNamer}-Funktion gesetzt. Die -@code{chordNoteNamer}-Eigenschaft hingegen kann dieses Verhalten -verändern und etwa den Basston etwa als Kleinbuchstaben darstellen. - -@funindex chordNameSeparator - -@item chordNameSeparator - -Verschiedene Teile eines Akkordsymboles werden normalerweise -durch einen Schrägstrich markiert. Indem @code{chordNameSeparator} -ein anderer Wert zugewiesen wird, kann ein beliebiges Zeichen für -den Trenner benutzt werden. - -@funindex chordNameExceptions - -@item chordNameExceptions - -Diese Funktion ist eine Liste mit Paaren. Das erste Objekt eines -Paares ist eine Anzahl von Tonhöhen, die die Stufen eines Akkordes -definieren. Das zweite Objekt ist eine Beschriftung, die nach -@code{chordRootNamer} ausgegeben wird, um das Akkordsymbol zu -erstellen. - -@funindex chordPrefixSpacer - -@item chordPrefixSpacer - -Das @qq{m} für Moll-Akkorde wird normalerweise direkt hinter dem -Akkordbuchstaben gesetzt. Mit der Eigenschaft @code{chordPrefixSpacer} -kann ein Abstand(halter) zwischen den Buchstaben und das @qq{m} -gesetzt werden. Der Abstandhalter wird nicht verwendet, wenn der -Grundton erhöht oder erniedrigt ist. - -@end table - -@predefined -@funindex major seven symbols -@code{\whiteTriangleMarkup}, -@code{\blackTriangleMarkup}, -@funindex \germanChords -@code{\germanChords}, -@funindex \semiGermanChords -@code{\semiGermanChords}, -@funindex \italianChords -@code{\italianChords}, -@funindex \frenchChords -@code{\frenchChords}. -@endpredefined - -@snippets - -@cindex Ausnahmen, Akkordsymbole -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-exceptions.ly} - -@c TODO - tweak snippet to use \blackTriangleMarkup as well -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-major7.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{volta-below-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-chord-separator.ly} - - -@seealso -Notationsreferenz: -@ref{Chord name chart}, -@ref{Common chord modifiers}. - -Installierte Dateien: -@file{scm/@/chords@/-ignatzek@/.scm}, -@file{scm/@/chord@/-entry@/.scm}, -@file{ly/@/chord@/-modifier@/-init@/.ly}. - -Schnipsel: -@rlsr{Chords}. - -@c Internals Reference: -@c @r internals{}. - -@knownissues - -Akkordsymbole werden von den Tonhöhenbezeichnungen innerhalb des -Akkordes und der Information über die Akkordstruktur, die innerhalb -von @code{\chordmode} notiert wurde, bestimmt. Wenn der direkte -Notenmodus benutzt wird, stammen unerwünschte Bezeichnungen daher, -dass Umgkehrungen und zustätzliche Bassnoten nicht richtig -interpretiert werden. - -@lilypond[quote,ragged-right,verbatim] -myChords = \relative c' { - \chordmode { c1 c/g c/f } - 1 -} -<< - \new ChordNames { \myChords } - \new Staff { \myChords } ->> -@end lilypond - - - - -@node Figured bass -@subsection Figured bass - -@lilypondfile[quote]{figured-bass-headword.ly} - -Generalbassnotation kann dargestellt werden. - -@menu -* Introduction to figured bass:: -* Entering figured bass:: -* Displaying figured bass:: -@end menu - - -@node Introduction to figured bass -@unnumberedsubsubsec Introduction to figured bass - -@cindex Basso continuo -@cindex Generalbass -@cindex Bezifferter Bass -@cindex Continuo, Generalbass - -@c TODO: musicological blurb about FB - -LilyPond stellt Unterstützung für Generalbassnotation, auch als -Basso Continuo bezeichnet, zur Verfügung. - -@lilypond[quote,ragged-right,verbatim,fragment] -<< - \new Voice { \clef bass dis4 c d ais g fis} - \new FiguredBass { - \figuremode { - < 6 >4 < 7\+ >8 < 6+ [_!] > - < 6 >4 <6 5 [3+] > - < _ >4 < 6 5/>4 - } - } ->> -@end lilypond - -Die Unterstützung für Generalbass besteht aus zwei Teilen: Es gibt -einen Eingabe-Modus, aktiviert durch den Befehl @code{\figuremode}, -in dem Ziffern für den Bass als Nummern eingegeben werden können, -und einen Kontext @code{FiguredBass}, der dafür sorgt, dass die -entsprechenden @code{BassFigure}-Objekte auch erstellt werden. -Generalbass kann auch in einem @code{Staff}-Kontext dargestellt -werden. - -@code{\figures@{ ... @}} ist eine Kurznotation für -@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. - -Auch wenn die Unterstützung für Generalbass auf den ersten Blick -wie die Akkordunterstützung ausschauen mag, ist sie sehr viel -einfacher. @code{\figuremode} speichert einfach die Zahlen und der -@code{FiguredBass}-Kontext setzt sie in der Form, wie sie notiert -wurden. Sie werden nicht in Tonhöhen umgewandelt. - -@seealso -Glossar: -@rglos{figured bass}. - -Schnipsel: -@rlsr{Chords} - - -@node Entering figured bass -@unnumberedsubsubsec Entering figured bass - -@code{\figuremode} (Zahlenmodus) wird benutzt, um den Eingabemodus -auf den Zahlenmodus umzustellen. Mehr Information zu unterschiedlichen -Eingabemodi findet sich in @ref{Input modes}. - -Im Zahlenmodus wird eine Gruppe von Bassziffern mit den Zeichen -@code{<} and @code{>} begrenzt. Die Dauer wird nach dem @code{>}-Zeichen -eingegeben. - -@lilypond[verbatim,quote,ragged-right,fragment] -\new FiguredBass { - \figuremode { - <6 4>2 - } -} -@end lilypond - -Versetzungszeichen (inklusive Auflösungszeichen) können hinzugefügt -werden: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -Übermäßige und verminderte Stufen können dargestellt werden: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -Ein Schrägstrich von links nach rechts (üblicherweise für erhöhte -Sexten benutzt) kann erstellt werden: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6> <6\\> -} -@end lilypond - -Vertikaler Platz und Klammern können zu den Zahlen hinzugefügt -werden: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <[12 _!] 8 [6 4]> -} -@end lilypond - -Beliebiger Text kann als Zahl notiert werden: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <\markup { \tiny \number 6 \super (1) } 5> -} -@end lilypond - -Es ist auch möglich, Fortsetzungslinien für wiederholte Ziffern zu benutzen. - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - { - \clef bass - e4 d c b, - e4 d c b, - } - \figures { - \bassFigureExtendersOn - <6 4>4 <6 3> <7 3> <7 3> - \bassFigureExtendersOff - <6 4>4 <6 3> <7 3> <7 3> - } ->> -@end lilypond - -@noindent -In diesem Fall werden wiederholte Ziffern immer durch eine Linie ersetzt, es sei denn, die Linie wird explizit beendet. - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - \figures { - \bassFigureExtendersOn - <6 4>4 <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d4 d c c - } ->> -@end lilypond - -Die folgende Tabelle zeigt die vorhandenen Zahlenmodifikatoren: - -@multitable @columnfractions .1 .5 .4 - -@item -@b{Modifier} -@tab -@b{Purpose} -@tab -@b{Example} - -@item -+, -, ! -@tab -Accidentals -@tab -@lilypond[line-width=4\cm] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -@item -\+, / -@tab -Augmented and diminished steps -@tab -@lilypond[line-width=4\cm] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -@item -\\ -@tab -Raised sixth step -@tab -@lilypond[line-width=4\cm] -\figures { - <6\\> -} -@end lilypond - -@item -\! -@tab -End of continuation line -@tab -@lilypond[line-width=4\cm] -<< - \figures { - \bassFigureExtendersOn - <6 4> <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d d c c - } ->> -@end lilypond - -@end multitable - -@predefined -@cindex Generalbass Fortsetzungslinie -@code{\bassFigureExtendersOn}, -@code{\bassFigureExtendersOff}. -@endpredefined - - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-positions-of-figured-bass-alterations.ly} - - -@seealso -Schnipsel: -@rlsr{Chords}. - -Referenz der Interna: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - - - -@node Displaying figured bass -@unnumberedsubsubsec Displaying figured bass - -Generalbass kann mit dem @code{FiguredBass}-Kontext, aber auch in -den meisten anderen @code{Staff}-Kontexten dargestellt werden. - -Wenn die Ziffern im @code{FiguredBass}-Kontext dargestellt werden, -ist die vertikale Position der Ziffern unabhängig von den Noten -des paralellen Systems. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \relative c'' { - c4 c'8 r8 c,4 c' - } - \new FiguredBass { - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - } ->> -@end lilypond - -In diesem Beispiel muss der @code{FiguredBass}-Kontext explizit -erstellt werden, damit kein zusätzliches (leeres) Notensystem -erstellt wird. - -Bassziffern können auch direkt einem Notensystemkontext (@code{Staff}) -hinzugefügt werden. In diesem Fall wird ihre vertikale Position automatisch -bestimmt. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - -Wenn Generalbass zu einem vorhandenen System hinzugefügt wird, ist -es möglich, die Ziffern über oder unter dem System anzuzeigen: - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - \bassFigureStaffAlignmentDown - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - -Schnipsel: -@rlsr{Chords}. - -Referenz der Interna: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - -@knownissues - -Um sicherzugehen, dass die Fortsetzungslinien funktionieren, sollte -der gleiche Rhythmus für die Bassfiguren und die eigentlichen -Noten der Bassstimme benutzt werden. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are correct here, with the same rhythm as the bass - \repeat unfold 4 { <6 4->16. <6 4->32 } - <5>8. r16 <6>8 <6\! 5-> - } ->> -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are incorrect here, even though the timing is the same - <6 4->4 <6 4->4 - <5>8. r16 <6>8 <6\! 5-> - } ->> -@end lilypond - -Wenn Fortsetzungslinien eingesetzt werden, können aufeinander -folgende Bezifferungen mit der selben Zahl in einer anderen -Position dazu führen, dass sich die Reihenfolge der Zahlen -umkehrt. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - \bassFigureExtendersOn - <6 5>4 <5\! 4> < 5 _!> <6> - } ->> -@end lilypond - -Um dieses Problem zu umgehen, kann die Fortsetzungslinie nach der -Bezifferung, mit der die Linie beginnen soll, angeschaltet und -am Ende der Linie wieder ausgeschaltet werden. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - <6 5>4 <5 4> - \bassFigureExtendersOn - < 5 _!>4 <6> - \bassFigureExtendersOff - } ->> -@end lilypond diff --git a/Documentation/de/user/converters.itely b/Documentation/de/user/converters.itely deleted file mode 100644 index 6dc9f62837..0000000000 --- a/Documentation/de/user/converters.itely +++ /dev/null @@ -1,378 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Reinhold Kainhofer -@c Translation checkers: Till Rettig - -@node Converting from other formats -@chapter Converting from other formats - -LilyPond kann auch Musik aus diversen anderen Formaten importieren. -Dieses Kapitel beschreibt die dazu mit LilyPond mitgelieferten -Hilfsprogramme. Daneben existieren natürlich auch noch weitere -Programme, die Dateien für LilyPond erstellen können, wie etwa -graphische Sequenzierprogramme und XML-Konverter. Näheres dazu -findet sich auf der @uref{http://@/lilypond@/.org,Homepage} von LilyPond. - -Die im Folgenden beschriebenen Programme sind eigenständige Hilfsprogramme -und werden üblicherweise von der Kommandozeile aufgerufen. Siehe -@ref{Command-line usage} für weitere Informationen. Wenn Sie MacOS -10.3 oder 10.4 benutzen und Probleme mit diesen Skripten (z. B. -@code{convert-ly}) haben, lesen Sie @ref{Setup for MacOS X}. - -@knownissues -Leider haben wir nicht ausreichend viele Entwickler, um all die folgenden -Hilfsprogramme ständig zu warten. Wir stellen den aktuellen Stand zur -Verfügung, können aber leider Fehlerberichte nur selten bearbeiten. -Selbstverständlich sind Patches von Ihnen sehr willkommen! - - -@menu -* Invoking midi2ly:: Import von MIDI. -* Invoking musicxml2ly:: Import von MusicXML. -* Invoking abc2ly:: Import von ABC. -* Invoking etf2ly:: Import von (alten) Finale-Dateien. -* Generating LilyPond files:: Grafische Benutzeroberflächen, -Musikübersetzer und Programme zur algorithmischen Komposition. -@end menu - -@node Invoking midi2ly -@section Invoking @command{midi2ly} - -@cindex MIDI - -@command{midi2ly} übersetzt eine Typ@tie{}1 MIDI-Datei in eine -Eingabedatei für LilyPond. - -MIDI (Music Instrument Digital Interface) ist ein internationaler -Standard für digitale Instrumente: Es spezifiziert die Verkabelung, -ein serielles Protokoll und ein Dateiformat. Das MIDI-Dateiformat -ist der de-facto Standard um Musik von vielen Programmen zu exportieren. -Allerdings fehlen in den MIDI-Dateien viele Ausdrucks- und -Artikulationszeichen. Dennoch kann MIDI vielfach nützlich sein, -um Musik von einem Programm zu importieren, für das kein spezielles -Hilfsprogramm den direkten Import nach LilyPond unterstützt. - -@command{midi2ly} konvertiert die MIDI-Spuren nach @rinternals{Staff} und -MIDI-Kanäle in @rinternals{Voice} Kontexte. Tonhöhen werden relativ -angegeben, Tondauern nur wenn nötig. - -MIDI-Dateien können auch direkt von einem digitalen Keyboard -aufgenommen und dann in eine @file{.ly}-Datei konvertiert werden. -Allerdings sind Musikinterpretationen von Menschen (aus gutem Grund!) -rhythmisch nicht exakt genug um die Konvertierung von MIDI nach LY -trivial zu gestalten. Wenn @command{midi2ly} mit Quantisierung -(@code{-s} und @code{-d} Kommandozeilenoptionen) aufgerufen wird, -versucht es diese Unschärfen im Zeitablauf zu korrigieren, ist -allerdings nicht sonderlich gut darin. Daher können wir diese Technik -leider nicht für die Konvertierung von MIDI-Aufnahmen empfehlen. - - -@command{midi2ly} wird von der Kommandozeile folgendermaßen aufgerufen: -@example -midi2ly [@var{Optionen}]@dots{} @var{MIDI-Datei} -@end example - -Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des -jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe -@ref{Converting from other formats}. - -Die folgenden Kommandozeilenoptionen werden von @command{midi2ly} -unterstützt: - -@table @code -@item -a, --absolute-pitches -Gibt absolute Tonhöhen aus. - -@item -d, --duration-quant=@var{LÄNGE} -Quantisiert Tondauern zu Vielfachen von @var{LÄNGE}. - -@item -e, --explicit-durations -Gibt alle Tondauern explizit an. - -@item -h,--help -Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. - -@item -k, --key=@var{acc}[:@var{Moll}] -Setzt die Standard-Tonart. @math{@var{acc} > 0} gibt die Anzahl der -Kreuze an, @math{@var{acc} < 0} gibt die Anzahl der Bs der Tonart an. -Eine Moll-Tonart wird durch @code{:1} angegeben. - -@item -o, --output=@var{Datei} -Die Ausgabe wird in die Datei @var{Datei}@file{.ly} geschrieben. - -@item -s, --start-quant=@var{LÄNGE} -Quantisiert den Beginn der Noten zu Vielfachen von @var{LÄNGE}. - -@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} -Erlaubt Tuplet-Dauern der Form @var{DUR}*@var{NUM}/@var{DEN}. - -@item -V, --verbose -Gibt ausführliche informative Meldungen während der Konvertierung aus. - -@item -v, --version -Gibt die Versionsnummer aus. - -@item -w, --warranty -Zeigt die Lizenzbedingungen und Urheberrechtshinweise. - -@item -x, --text-lyrics -Interpretiert alle Texte als Liedtexte. -@end table - - -@knownissues - -Überlappende Noten in einem Arpeggio werden nicht korrekt dargestellt. -Nur die erste Note wird eingelesen und konvertiert, die restlichen -werden ignoriert. Als Abhilfe können Sie alle Noten auf dieselbe -Tonlänge setzen und Phrasierungszeichen oder Pedalindikatoren -hinzufügen. - - -@node Invoking musicxml2ly -@section Invoking @code{musicxml2ly} - -@cindex MusicXML - -@uref{http://@/www.@/musicxml@/.org/,MusicXML} ist ein XML-Dialekt -zur Darstellung von Musiknotation. - -@command{musicxml2ly} wandelt eine MusicXML-Datei nach LilyPond um, -wobei sowohl die Noten, Artikulationszeichen, Struktur der Partitur, -Liedtexte etc. einer MusicXML-Datei (im @q{part-wise}-Format) in eine -.ly-Datei um. - -@command{musicxml2ly} wird von der Kommandozeile folgendermaßen aufgerufen: -@example -musicxml2ly [@var{Optionen}]@dots{} @var{XML-Datei} -@end example - -Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des -jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe -@ref{Converting from other formats}. - -Wenn als Dateiname @file{-} angegeben wird, liest @command{musicxml2ly} -Daten direkt von der Kommandozeile ein. - -Die folgenden Kommandozeilenoptionen werden von @command{musicxml2ly} -unterstützt: - -@table @code -@item -a, --absolute -Konvertiert in absolute Tonhöhen. - -@item -h,--help -Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. - -@item -l, --language=LANG -Inkludiert die Sprachdatei @var{LANG}@file{.ly} in der Ausgabe. Wird z.B. -'deutsch' angegeben, wird @file{deutsch.ly} in die .ly-Datei eingebunden -und deutsche Notenbezeichnungen benutzt. - -@item --lxml -Benutzt das lxml.etree Python-Paket für die Verarbeitung von XML (benötigt weniger Speicher und Rechenleistung) - -@item --nd --no-articulation-directions -Konvertiert keine Richtungsangaben (@code{^}, @code{_} oder @code{-}) -von Artikulations- und Lautstärkebezeichnungen. - -@item --no-beaming -Konvertiert keine Informationen über die Balkensetzung aus der -MusicXML-Datei. Stattdessen wird dies LilyPond überlassen. - -@item -o,--output=@var{Dateiname} -Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird -als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung -an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so -erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}. - -@item -r,--relative -Konvertiert in relative Tonhöhen. (Standardeinstellung) - -@item -v, --verbose -Gibt ausführliche informative Meldungen während der Konvertierung aus. - -@item --version -Gibt die Versionsnummer aus. - -@item -z,--compressed -Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen. -Dies ist die Standardeinstellung für Dateien mit der Erweiterung -@file{.mxl}. -@end table - - -@node Invoking abc2ly -@section Invoking @code{abc2ly} - -@cindex ABC - -ABC ist ein relativ einfaches ASCII-basierendes Musikformat und ist -dokumentiert auf der ABC-Homepage: - -@quotation -@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. -@end quotation - -@command{abc2ly} konvertiert ABC-Dateien nach LilyPond und wird -von der Kommandozeile folgendermaßen aufgerufen: - -@example -abc2ly [@var{Optionen}]@dots{} @var{ABC-Datei} -@end example - -Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des -jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe -@ref{Converting from other formats}. - -Die folgenden Kommandozeilenoptionen werden von @command{abc2ly} -unterstützt: - -@table @code -@item -b,--beams=None -Die Balkensetzung aus der ABC-Datei erhalten. -@item -h,--help -Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. -@item -o,--output=@var{Dateiname} -Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. -@item -s,--strict -Strenge Auslegung einer erfolgreichen Konvertierung. -@item -v,--version -Gibt die Versionsnummer aus. -@end table - -Es existiert außerdem die Möglichkeit, LilyPond-Befehle für die -Konvertierung mit @command{abc2ly} gleich in der ABC-Datei anzugeben. -Wenn sich etwa in der ABC-Datei das Kommentar - -@example -%%LY voices \set autoBeaming = ##f -@end example - -@noindent -befindet, so wird der Text nach dem Schlüsselwort @q{voices} direkt -in die aktuelle Stimme in der LilyPond-Datei eingefügt. - -Ebenso bewirkt - -@example -%%LY slyrics more words -@end example - -@noindent -dass alles nach dem @q{slyrics} Schlüsselwort an der aktuellen Stelle -im Liedtext eingefügt wird. - - -@knownissues - -Der ABC-Standard ist eigentlich kein wirklich vollständiger Standard. -Für komplexere Notation wie etwa Polyphonie existieren verschiedene -Konventionen. - -Mehrere Lieder in einer Datei können nicht konvertiert werden. - -ABC synchronisiert den Liedtext am Anfang jeder Zeile mit den Noten, -@command{abc2ly} macht dies nicht. - -@command{abc2ly} ignoriert die Balkensetzung in der ABC-Datei. - - -@node Invoking etf2ly -@section Invoking @command{etf2ly} - -@cindex ETF -@cindex enigma -@cindex Finale -@cindex Coda Technology - -ETF (Enigma Transport Format) ist ein Dateiformat, das Coda -Music Technology in älteren Versionen des Programms Finale benutzt hat. - -@command{etf2ly} konvertiert Teile einer ETF-Datei nach LilyPond -und wird von der Kommandozeile folgendermaßen aufgerufen: - -@example -etf2ly [@var{Optionen}]@dots{} @var{ETF-Datei} -@end example - -Unter @q{Kommandozeile} verstehen wir dabei die Kommandozeile des -jeweiligen Betriebssystems. Für nähere Informationen hierzu siehe -@ref{Converting from other formats}. - -Die folgenden Kommandozeilenoptionen werden von @command{etf2ly} -unterstützt: - -@table @code -@item -h,--help -Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. -@item -o,--output=@var{Dateiname} -Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. -@item --version -Gibt die Versionsnummer aus. -@end table - - -@knownissues - -Die Liste der Artikulationszeichen is unvollständig. Leere Takte -verwirren @command{etf2ly}. Mehrfache Vorschlagnoten werden falsch -beendet. - - -@node Generating LilyPond files -@section Generating LilyPond files - -@cindex Externe Programme, LilyPond-Dateien erzeugen - -LilyPond selbst wird nur mit den oben genannten Konvertierprogrammen -ausgeliefert und unterstützt keine weiteren Formate. Es existieren -allerdings externe Hilfsprogramme, die auch LilyPond-Dateien erzeugen -können. -Diese umfassen unter anderem: - -@itemize -@item -@uref{http://@/www@/.denemo@/.org/,Denemo}, ein grafisches -Programm zum Musiksatz. -@item -@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, ein -MIDI-nach-LilyPond Konverter, der monophone MIDI-Eigaben in Echtzeit -konvertiert. -@item -@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, ein -Emacs-Modus. -@item -@uref{http://@/www@/.nongnu@/.org/@/xml2ly/,xml2ly}, ein Konverter für -@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML}, der auf -XML-Transformationen mittels XSLT basiert. -@item -@uref{http://@/noteedit@/.berlios@/.de,NoteEdit}, ein grafisches -Programm zum Notensatz, das auch -@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} importieren kann. -@item -@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden}, -das MIDI importieren kann. -@item -@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, -eine LISP-Bibliothek, um Musiknotation zu erzeugen. -@item -@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml}, -ein Notensatzprogramm mit experimentellem Export nach LilyPond. -@item -@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, ein Programm zur Erzeugung von -Gitarren-Tabulaturen, unterstützt den Export nach LilyPond. -@item -@uref{http://musescore.org/,MuseScore} unterstützt ebenfalls den -Export nach LilyPond. -@end itemize - diff --git a/Documentation/de/user/dedication.itely b/Documentation/de/user/dedication.itely deleted file mode 100644 index 9028181cd3..0000000000 --- a/Documentation/de/user/dedication.itely +++ /dev/null @@ -1,18 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@quotation -Wir wollen dieses Programm allen Freunden widmen, die wir -durch die Musik kennengelernt haben. - - -Han-Wen und Jan -@end quotation diff --git a/Documentation/de/user/editorial.itely b/Documentation/de/user/editorial.itely deleted file mode 100644 index b709884e4f..0000000000 --- a/Documentation/de/user/editorial.itely +++ /dev/null @@ -1,689 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Editorial annotations -@section Editorial annotations - -@lilypondfile[quote]{editorial-headword.ly} - -Dieser Abschnitt zeigt die verschiedenen Möglichkeiten, die -Erscheinung der Noten zu ändern und analytische bzw. pädagogische -Anmerkungen anzubringen. - -@menu -* Inside the staff:: -* Outside the staff:: -@end menu - - -@node Inside the staff -@subsection Inside the staff - -Dieser Abschnitt zeigt, wie man Elemente hervorhebt, die sich -innerhalb des Notensystems befinden. - -@menu -* Selecting notation font size:: -* Fingering instructions:: -* Hidden notes:: -* Coloring objects:: -* Parentheses:: -* Stems:: -@end menu - -@node Selecting notation font size -@unnumberedsubsubsec Selecting notation font size - -@cindex Font, Größe ändern für Notation -@cindex Schriftgröße (Notation) ändern -@cindex Auswahl von Schriftgröße (Notation) -@cindex Noten, Schriftgröße -@cindex Notenköpfe -@funindex fontSize -@funindex font-size -@funindex magstep -@funindex \huge -@funindex \large -@funindex \normalsize -@funindex \small -@funindex \tiny -@funindex \teeny -@funindex huge -@funindex large -@funindex normalsize -@funindex small -@funindex tiny -@funindex teeny - -Die Schriftgröße von Notationselementen kann geändert werden. -Damit wird allerdings nicht die Größe von veränderlichen -Symbolen, wie Balken oder Bögen, geändert. - -@warning{Für Schriftgröße von Text, siehe -@ref{Selecting font and font size}.} - -@lilypond[verbatim,quote,relative=2] -\huge -c4.-> d8---3 -\large -c4.-> d8---3 -\normalsize -c4.-> d8---3 -\small -c4.-> d8---3 -\tiny -c4.-> d8---3 -\teeny -c4.-> d8---3 -@end lilypond - -Intern wird hiermit die @code{fontSize}-Eigenschaft gesetzt. Sie -wird für alle Layout-Objekte definiert. Der Wert von -@code{font-size} ist eine Zahl, die die Größe relativ zur Standardgröße -für die aktuelle Systemhöhe angibt. Jeder Vergrößerungsschritt bedeutet -etwa eine Vergrößerung um 12% der Schriftgröße. Mit sechs Schritten wird -die Schriftgröße exakt verdoppelt. Die Scheme-Funktion @code{magstep} -wandelt einen Wert von @code{font-size} in einen Skalierungsfaktor um. -Die @code{font-size}-Eigenschaft kann auch direkt gesetzt werden, so dass -sie sich nur auf bestimmte Layoutobjekte bezieht. - -@lilypond[verbatim,quote,relative=2] -\set fontSize = #3 -c4.-> d8---3 -\override NoteHead #'font-size = #-4 -c4.-> d8---3 -\override Script #'font-size = #2 -c4.-> d8---3 -\override Stem #'font-size = #-5 -c4.-> d8---3 -@end lilypond - -@cindex Standard-Schriftgröße (Notation) -@cindex Schriftgröße (Notation), Standard -@funindex font-interface -@funindex font-size - -Schriftgrößenänderungen werden erreicht, indem man die Design-Schriftgröße -nimmt, die der gewünschten am nächsten kommt, und sie dann skaliert. Die -Standard-Schriftgröße (für @code{font-size = #0}) hängt von der -Standard-Systemhöhe ab. Für ein Notensystem von 20pt wird eine Schriftgröße -von 10pt ausgewählt. - -Die @code{font-size}-Eigenschaft kann nur für die Layoutobjekte gesetzt -werden, die Schrift-Dateien benutzen. Das sind die, welche die -@code{font-interface}-Layoutschnittstelle unterstützen. - - -@predefined -@code{\teeny}, -@code{\tiny}, -@code{\small}, -@code{\normalsize}, -@code{\large}, -@code{\huge}. -@endpredefined - -@seealso -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{font-interface}. - - -@node Fingering instructions -@unnumberedsubsubsec Fingering instructions - -@cindex Fingersatz -@cindex Fingerwechsel -@cindex Griff: Fingersatz -@funindex \finger -@funindex finger - -Fingersatzanweisungen können folgenderweise notiert werden: -@var{Note}-@var{Zahl} - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 e-3 -@end lilypond - -Für Fingerwechsel muss eine Textbeschriftung (markup) benutzt werden: - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } -@end lilypond - -@cindex thumb-script -@cindex Fingersatz: Daumen-Zeichen -@funindex \thumb -@funindex thumb - -Mit dem Daumen-Befehl (@code{\thumb}) können die Noten bezeichnet -werden, die mit dem -Daumen (etwa auf dem Cello) gespielt werden sollen. - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -@cindex Fingersatz: Akkorde -@cindex Akkorde: Fingersatz - -Fingersätze für Akkorde können auch zu einzelnen Noten des -Akkordes hinzugefügt werden, indem sie innerhalb der Akkord-Klammer -direkt an die Noten angefügt werden. - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -Fingersatzanweisungen können manuell oberhalb des Systems gesetzt werden, siehe -@ref{Direction and placement}. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{avoiding-collisions-with-chord-fingerings.ly} - -@seealso -Notationsreferenz: -@ref{Direction and placement}. - -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{FingeringEvent}, -@rinternals{fingering-event}, -@rinternals{Fingering_engraver}, -@rinternals{New_fingering_engraver}, -@rinternals{Fingering}. - - -@node Hidden notes -@unnumberedsubsubsec Hidden notes - -@cindex Noten verstecken -@cindex Verstecken von Noten -@cindex Noten, unsichtbar -@cindex unsichtbare Noten -@cindex durchsichtige Noten -@cindex Noten, durchsichtig -@cindex transparent, Noten -@funindex \hideNotes -@funindex hideNotes -@funindex \unHideNotes -@funindex unHideNotes - -Versteckte (oder unsichtbare oder transparente) Noten können sinnvoll sein, -wenn man Notation für den Theorieunterricht oder Kompositionsübungen -erstellen will. - -@lilypond[verbatim,quote,relative=2] -c4 d -\hideNotes -e4 f -\unHideNotes -g a -\hideNotes -b -\unHideNotes -c -@end lilypond - -Notationsobjekte, die an die unsichtbaren Noten angefügt sind, sind weiterhin -sichtbar. - -@lilypond[verbatim,quote,relative=2] -c4( d) -\hideNotes -e4(\p f)-- -@end lilypond - - -@predefined -@code{\hideNotes}, -@code{\unHideNotes}. -@endpredefined - -@seealso -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{Note_spacing_engraver}, -@rinternals{NoteSpacing}. - - -@node Coloring objects -@unnumberedsubsubsec Coloring objects - -@cindex Objekte, farbig -@cindex Farbe -@cindex Einfärben von Objekten -@cindex Noten, farbig -@cindex farbige Noten -@cindex X11-Farben -@cindex with-color -@funindex color -@funindex \with-color -@funindex with-color -@funindex x11-color - -Einzelnen Objekten können einfach eigene Farben zugewiesen werden. -Gültige Farben-Bezeichnungen sind aufgelistet in @ref{List of colors}. - -@lilypond[verbatim,quote,relative=2] -\override NoteHead #'color = #red -c4 c -\override NoteHead #'color = #(x11-color 'LimeGreen) -d -\override Stem #'color = #blue -e -@end lilypond - -Die ganze Farbpalette, die für X11 definiert ist, kann mit der -Scheme-Funktion @code{x11-color} benutzt werden. Diese Funktion -hat ein Argument: entweder ein Symbol in der Form @var{'FooBar} -oder eine Zeichenkette in der Form @code{"FooBar"}. Die erste -Form ist schneller zu schreiben und effizienter. Mit der zweiten -Form ist es allerdings möglich, auch Farbbezeichnungen einzusetzen, -die aus mehr als einem Wort bestehen. - -Wenn @code{x11-color} die angegebene Farbbezeichnung nicht kennt, wird -Schwarz eingesetzt. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -gis8 a -\override Beam #'color = #(x11-color "medium turquoise") -gis a -\override Accidental #'color = #(x11-color 'DarkRed) -gis a -\override NoteHead #'color = #(x11-color "LimeGreen") -gis a -% this is deliberate nonsense; note that the stems remain black -\override Stem #'color = #(x11-color 'Boggle) -b2 cis -@end lilypond - -@cindex RGB-Farbe -@cindex Farbe, RGB -@funindex rgb-color - -Exakte RGB-Farben können mit Hilfe der Scheme-Funktion @code{rgb-color} -definiert werden. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -\override Stem #'color = #(rgb-color 0 0 0) -gis8 a -\override Stem #'color = #(rgb-color 1 1 1) -gis8 a -\override Stem #'color = #(rgb-color 0 0 0.5) -gis4 a -@end lilypond - -@seealso -Notationsreferenz: -@ref{List of colors}, @ref{The -tweak command}. - -Schnipsel: -@rlsr{Editorial annotations}. - -@cindex x11-Farbe -@cindex farbige Noten in Akkorden -@cindex Noten, farbige in Akkorden -@cindex Akkorde: farbige Noten -@funindex x11-color - -@knownissues -Eine X11-Farbe hat nicht notwendigerweise exakt denselben Farbton wie -eine ähnlich genannte normale Farbe. - -Nicht alle X11-Farben lassen sich am Webbrowser erkennen, d. h. der -Unterschied etwa zwischen @code{'LimeGreen} und @code{'ForestGreen} wird -eventuell nicht dargestellt. Für die Benutzung im Internet wird -die Benutzung von einfachen Farben nahegelegt (z. B. @code{#blue}, -@code{#green}, @code{#red}). - -Noten in Akkorden können nicht mit @code{\override} eingefärbt werden, -dazu muss @code{\tweak} benutzt werden. Siehe auch @ref{The tweak command}. - - - -@node Parentheses -@unnumberedsubsubsec Parentheses - -@cindex Geisternoten -@cindex Noten in Klammern -@cindex Klammern um Noten -@cindex editorische Noten -@funindex \parenthesize -@funindex parenthesize - -Objekte können in Klammern gesetzt werden, indem vor ihnen der Befehl -@code{\parenthesize} geschrieben wird. Wenn ein Akkord in Klammern gesetzt -wird, wirkt sich das auf jede Noten im Akkord aus. Innerhalb von einem -Akkord gesetzte Befehle wirken sich auf einzelne Noten aus. - -@lilypond[verbatim,quote,relative=2] -c2 \parenthesize d -c2 \parenthesize -c2 -@end lilypond - -Auch andere Objekte als Noten können in Klammern gesetzt werden. - -@lilypond[verbatim,quote,relative=2] -c2-\parenthesize -. d -c2 \parenthesize r -@end lilypond - -@seealso -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{Parenthesis_engraver}, -@rinternals{ParenthesesItem}, -@rinternals{parentheses-interface}. - -@knownissues - -Wenn man einen Akkord einklammert, wird um jede Note eine eigene Klammer -gesetzt, anstatt den gesamten Akkord in eine große Klammer zu fassen. - - - -@node Stems -@unnumberedsubsubsec Stems - -@cindex Hals -@cindex Hals, unsichtbar -@cindex Notenhals, unsichtbar -@cindex unsichtbarer Notenhals - -Immer, wenn das Programm eine Note findet, wird automatisch -ein Notenhals (@rinternals{Stem}) -Objekt erzeugt. Auch -für ganze Noten und Pausen werden sie erzeugt, aber unsichtbar -gemacht. - -@funindex \stemNeutral -@funindex \stemUp -@funindex \stemDown -@funindex stemNeutral -@funindex stemUp -@funindex stemDown - -@predefined -@code{\stemUp} (Hälse nach oben), -@code{\stemDown} (Hälse nach unten), -@code{\stemNeutral} (Hälse je nach Notenposition). -@endpredefined - - -@snippets - -@cindex Hals, Richtung von -@cindex Notenhals, Richtung von -@cindex Hals nach oben -@cindex Hals nach unten -@cindex Hals neutral - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{default-direction-of-stems-on-the-center-line-of-the-staff.ly} - -@seealso -Notationsreferenz: -@ref{Direction and placement}. - -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{Stem_engraver}, -@rinternals{Stem}, -@rinternals{stem-interface}. - - - -@node Outside the staff -@subsection Outside the staff - -Dieser Abschnitt zeigt, wie man Elemente im System von -außerhalb des Systems hervorhebt. - -@menu -* Balloon help:: -* Grid lines:: -* Analysis brackets:: -@end menu - -@node Balloon help -@unnumberedsubsubsec Balloon help - -@cindex Ballon -@cindex Blase -@cindex Erklärungsblase -@cindex Notation, Erklärungen -@cindex Anmerkung, Blase -@cindex Hilfe, Blase -@cindex Textblasen -@funindex \balloonGrobText -@funindex \balloonText -@funindex Balloon_engraver -@funindex balloonGrobText -@funindex balloonText -@funindex balloonLengthOn -@funindex balloonLengthOff -@funindex \balloonLengthOn -@funindex \balloonLengthOff - - -Notationselemente können bezeichnet und markiert werden, indem um sie eine -rechteckige Blase gezeichnet wird. Dies ist vor allem dazu da, Notation -zu erklären. - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } - r - 2. -} -@end lilypond - -Es gibt zwei Funktionen, @code{balloonGrobText} und -@code{balloonText}; die erste wird auf gleiche Art wie ein -@w{@code{\once \override}} eingesetzt umd Text an einen Grob zu -hängen, die zweite funktioniert wie ein @code{\tweak} und -wird üblicherweise innerhalb von Akkorden eingesetzt, um Text -an einzelne Noten zu hängen. - -Textblasen beeinflussen normalerweise die Positionierung der Notation, -aber das kann geändert werden. - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonLengthOff - \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } - r - \balloonLengthOn - 2. -} -@end lilypond - - -@predefined -@code{\balloonLengthOn}, -@code{\balloonLengthOff}. -@endpredefined - -@seealso -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{Balloon_engraver}, -@rinternals{BalloonTextItem}, -@rinternals{balloon-interface}. - - -@node Grid lines -@unnumberedsubsubsec Grid lines - -@cindex Gitterlinien -@cindex Linien, Gitter -@cindex vertikale Linien zwischen Systemen -@cindex Linien zwischen Systemen -@funindex Grid_point_engraver -@funindex Grid_line_span_engraver -@funindex gridInterval - -Vertikale Linien können zwischen Systemen gesetzt werden, die mit den -Noten synchronisiert sind. - -Der @code{Grid_point_engraver} muss benutzt werden, um die Endpunkte -der Linien zu definieren, und der @code{Grid_line_span_engraver} wird -benutzt, um dann die Linien zu setzen. Der Standard ist, dass die -Gitterlinien unter den Noten und zur linken Seite des Notenkopfes -gesetzt werden. Sie reichen von der Mitte eines Systems bis zur -Mitte des anderen. Mit @code{gridInterval} wird die Dauer zwischen -den Linien festgesetzt. - -@lilypond[verbatim,quote] -\layout { - \context { - \Staff - \consists "Grid_point_engraver" - gridInterval = #(ly:make-moment 1 4) - } - \context { - \Score - \consists "Grid_line_span_engraver" - } -} - -\score { - \new ChoirStaff << - \new Staff \relative c'' { - \stemUp - c4. d8 e8 f g4 - } - \new Staff \relative c { - \clef bass - \stemDown - c4 g' f e - } - >> -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grid-lines--changing-their-appearance.ly} - - -@seealso -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{Grid_line_span_engraver}, -@rinternals{Grid_point_engraver}, -@rinternals{GridLine}, -@rinternals{GridPoint}, -@rinternals{grid-line-interface}, -@rinternals{grid-point-interface}. - - -@node Analysis brackets -@unnumberedsubsubsec Analysis brackets - -@cindex Klammern -@cindex Phrasierungsklammern -@cindex Klammern, Analyse -@cindex Analyse -@cindex musikwissenschaftliche Analyse -@cindex Notengruppenklammer -@cindex horizontale Kklammer -@cindex Musikanalyse -@funindex Horizontal_bracket_engraver -@funindex \startGroup -@funindex startGroup -@funindex \stopGroup -@funindex stopGroup - -Klammern über dem System werden in der Musikanalyse benutzt, um -strukturelle Einheiten der Musik zu markieren. Einfache -horizontale Klammern werden von LilyPond unterstützt. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c2\startGroup - d\stopGroup -} -@end lilypond - -Analysis brackets may be nested. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c4\startGroup\startGroup - d4\stopGroup - e4\startGroup - d4\stopGroup\stopGroup -} -@end lilypond - -@seealso -Schnipsel: -@rlsr{Editorial annotations}. - -Referenz der Interna: -@rinternals{Horizontal_bracket_engraver}, -@rinternals{HorizontalBracket}, -@rinternals{horizontal-bracket-interface}, -@rinternals{Staff}. - diff --git a/Documentation/de/user/expressive.itely b/Documentation/de/user/expressive.itely deleted file mode 100644 index 4b57cd57c9..0000000000 --- a/Documentation/de/user/expressive.itely +++ /dev/null @@ -1,1056 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Expressive marks -@section Expressive marks - -@lilypondfile[quote]{expressive-headword.ly} - -Dieser Abschnitt zeigt verschiedene Ausdrucksbezeichnungen, -die zur Partitur hinzugefügt werden können. - -@menu -* Attached to notes:: -* Curves:: -* Lines:: -@end menu - - -@node Attached to notes -@subsection Attached to notes - -Dieser Abschnitt erklärt, wie man Ausdrucksbezeichnungen erstellt, -die an Noten gebunden sind: Artikulationszeichen, Ornamente und -Dynamikzeichen. Es werden auch Methoden gezeigt, eigene -Ausdrucksbezeichnungen zu erstellen. - - -@menu -* Articulations and ornamentations:: -* Dynamics:: -* New dynamic marks:: -@end menu - -@node Articulations and ornamentations -@unnumberedsubsubsec Articulations and ornamentations - -@cindex Artikulationszeichen -@cindex Beschriftung -@cindex Zeichen -@cindex Ornament -@cindex Espressivo -@cindex Fermate -@cindex Anstrich -@cindex Abstrich -@cindex Pedal-Bezeichnung -@cindex Orgelpedal-Bezeichnung -@cindex Doppelschlag -@cindex offen -@cindex gestopft -@cindex gedämpft -@cindex Flageolet -@cindex Triller -@cindex Praller -@cindex Mordent -@cindex Daumenbezeichnung -@cindex Segno -@cindex Coda -@cindex Varcoda -@cindex D'al Segno - -@funindex - - -Eine Vielfalt an Symbolen kann über und unter den Noten erscheinen, -um zu markieren, auf welche Art die Note ausgeführt werden soll. -Hierzu wird folgende Syntax benutzt: - -@example -@var{Note}\@var{Bezeichnung} -@end example - -Die möglichen Werte für @var{Bezeichnung} sind aufgelistet in -@ref{List of articulations}. Ein Beispiel: - -@lilypond[verbatim,quote,relative=2] -c4\staccato c\mordent b2\turn -c1\fermata -@end lilypond - -@cindex Akzent -@cindex Marcato -@cindex Staccatissimo -@cindex Espressivo -@cindex Staccato -@cindex Portato -@cindex Tenuto - -Einige dieser Artikulationszeichen haben eine Abkürzung, damit -es einfacher ist, sie zu schreiben. Die Abkürzung wird an die -Notenbezeichnung gehängt, wobei ihre Syntax aus einem Minuszeichen -@code{-} besteht, gefolgt von dem Symbol, das dem -Artikultationszeichen zugeordnet ist. Es gibt diese Abkürzungen -für @notation{marcato}, -@notation{stopped} (gedämpft), @notation{tenuto}, -@notation{staccatissimo}, @notation{accent}, @notation{staccato}, -and @notation{portato}. Die ihnen entsprchenden Symbole -werden also folgendermaßen notiert: - -@lilypond[verbatim,quote,relative=2] -c4-^ c-+ c-- c-| -c4-> c-. c2-_ -@end lilypond - -Die Regeln für die standardmäßige Platzierung von -Artikulationszeichen werden in der Datei @file{scm/@/script@/.scm} -definiert. Artikulationszeichen und Onrnamente können manuell -über oder unter dem System gesetzt werden, siehe -@ref{Direction and placement}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{modifying-default-values-for-articulation-shorthand-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-vertical-ordering-of-scripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-a-delayed-turn.ly} - - -@seealso -Glossar: -@rglos{tenuto}, -@rglos{accent}, -@rglos{staccato}, -@rglos{portato}. - -Notationsreferenz: -@ref{Direction and placement}, -@ref{List of articulations}, -@ref{Trills}. - -Installierte Dateien: -@file{scm/@/script@/.scm}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{Script}, -@rinternals{TextScript}. - - -@node Dynamics -@unnumberedsubsubsec Dynamics - -@cindex Lautstärke -@cindex Dynamik -@cindex absolute Lautstärke - -@funindex \ppppp -@funindex ppppp -@funindex \pppp -@funindex pppp -@funindex \ppp -@funindex ppp -@funindex \pp -@funindex pp -@funindex \p -@funindex p -@funindex \mp -@funindex mp -@funindex \mf -@funindex mf -@funindex \f -@funindex f -@funindex \ff -@funindex ff -@funindex \fff -@funindex fff -@funindex \ffff -@funindex ffff -@funindex \fp -@funindex fp -@funindex \sf -@funindex sf -@funindex \sff -@funindex sff -@funindex \sp -@funindex sp -@funindex \spp -@funindex spp -@funindex \sfz -@funindex sfz -@funindex \rfz -@funindex rfz - -Absolute Dynamikbezeichnung wird mit Befehlen nach den Noten -angezeigt, etwa @code{c4\ff}. Die vordefinierten Befehle lauten: -@code{\ppppp}, @code{\pppp}, @code{\ppp}, -@code{\pp}, @code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, -@code{\fff}, @code{\ffff}, @code{\fp}, @code{\sf}, @code{\sff}, -@code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}. Die -Dynamikzeichen können manuell unter- oder oberhalb des Systems -platziert werden, siehe @ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2\ppp c\mp -c2\rfz c^\mf -c2_\spp c^\ff -@end lilypond - -@cindex Crescendo-Klammer -@cindex Klammer, Crescendo -@cindex Crescendo -@cindex Decrescendo -@cindex Diminuendo - -@funindex \< -@funindex \> -@funindex \! -@funindex \cr -@funindex cr -@funindex \decr -@funindex decr - -Eine @notation{Crescendo}-Klammer wird mit dem Befehl -@code{\<} begonnen und mit @code{\!}, einem absoluten Dynamikbefehl oder einer weiteren Crescento- oder -Decrescendo-Klammer beendet. Ein @notation{Decrescendo} -beginnt mit @code{\>} und wird auch beendet mit @code{\!}, -einem absoluten Dynamikbefehl oder einem weiteren -Crescendo oder Decrescendo. @code{\cr} und @code{\decr} können -anstelle von @code{\<} und -@code{\>} benutzt werden. Die Befehle ergeben standardmäßig -Crescendo-Klammern. - -@lilypond[verbatim,quote,relative=2] -c2\< c\! -d2\< d\f -e2\< e\> -f2\> f\! -e2\> e\mp -d2\> d\> -c1\! -@end lilypond - -Unsichtbare Pausen werden benötigt, um mehrere Zeichen einer -Note zuzuweisen. - -@cindex mehre Dynamikzeichen an einer Note -@cindex Dynamik, mehrere Zeichen an einer Note - -@lilypond[verbatim,quote,relative=2] -c4\< c\! d\> e\! -<< f1 { s4 s4\< s4\> s4\! } >> -@end lilypond - -@cindex Espressivo-Artikulation - -@funindex \espressivo -@funindex espressivo - -In manchen Situationen kann auch der @code{\espressivo}-Befehl -geeignet sein, ein An- und Abschwellen einer Note anzuzeigen. - -@lilypond[verbatim,quote,relative=2] -c2 b4 a -g1\espressivo -@end lilypond - -@funindex \crescTextCresc -@funindex crescTextCresc -@funindex \dimTextDecresc -@funindex dimTextDecresc -@funindex \dimTextDecr -@funindex dimTextDecr -@funindex \dimTextDim -@funindex dimTextDim -@funindex \crescHairpin -@funindex crescHairpin -@funindex \dimHairpin -@funindex dimHairpin - -Crescendo und Decrescendo kann auch mit Text anstelle der -Klammern angezeigt werden. Gestrichelte Linien werden ausgegeben, -um die Dauer des Crescendos oder Decrescendos anzuzeigen. Die -vorgegebenen Befehle, mit denen dieses Verhalten erreicht -werden kann, sind @code{\crescTextCresc}, @code{\dimTextDecresc}, -@code{\dimTextDecr} und @code{\dimTextDim}. Die entsprechenden -Befehle @code{\crescHairpin} und @code{\dimHairpin} stellen -wieder die spitzen Klammern ein: - -@lilypond[verbatim,quote,relative=2] -\crescTextCresc -c2\< d | e f\! -\dimTextDecresc -e2\> d | c b\! -\crescHairpin -c2\< d | e f\! -\dimHairpin -e2\> d\! -@end lilypond - -Um neue absolute Dynamikzeichen oder Text, der mit ihnen -angeordnet wird, zu erstellen, siehe @ref{New dynamic marks}. - -@cindex Dynamik, vertikale Position -@cindex vertikale Position von Dynamik - -Vertikale Position der Zeichen wird von der Funktion -@rinternals{DynamicLineSpanner} verwaltet. -@funindex \dynamicUp -@funindex dynamicUp -@funindex \dynamicDown -@funindex dynamicDown -@funindex \dynamicNeutral -@funindex dynamicNeutral - -@predefined -@code{\dynamicUp}, -@code{\dynamicDown}, -@code{\dynamicNeutral}, -@code{\crescTextCresc}, -@code{\dimTextDim}, -@code{\dimTextDecr}, -@code{\dimTextDecresc}, -@code{\crescHairpin}, -@code{\dimHairpin}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-hairpin-behavior-at-bar-lines.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-the-minimum-length-of-hairpins.ly} - -@cindex al niente -@cindex niente, al - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-hairpins-using-al-niente-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligned-dynamics-and-textscripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{hiding-the-extender-line-for-text-dynamics.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-text-and-spanner-styles-for-text-dynamics.ly} - - -@seealso -Glossar: -@rglos{al niente}, -@rglos{crescendo}, -@rglos{decrescendo}, -@rglos{hairpin}. -Handbuch zum Lernen: -@rlearning{Articulation and dynamics}. - -Notationsreferenz: -@ref{Direction and placement}, -@ref{New dynamic marks}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{DynamicText}, -@rinternals{Hairpin}, -@rinternals{DynamicLineSpanner}. - - - -@node New dynamic marks -@unnumberedsubsubsec New dynamic marks - -@cindex neue Dynamikzeichen -@cindex eigene Dynamikzeichen -@cindex Dynamikzeichen, eigene - -Die einfachste ARt, eigene Dynamikbezeichnungen zu erstellen, -ist die Benutzung von @code{\markup}-(Textbeschriftungs)-Objekten. - -@lilypond[verbatim,quote] -moltoF = \markup { molto \dynamic f } - -\relative c' { - 16_\moltoF - 2.. -} -@end lilypond - -@cindex Dynamikzeichen, Anmerkung -@cindex Dynamikzeichen, Klammer -@cindex editorische Dynamikzeichen -@funindex \bracket -@funindex bracket -@funindex \dynamic -@funindex dynamic - -Mit einer Textbeschriftung können editorische Dynamikzeichen -(in runden oder eckigen Klammern) erstellt werden. Die Syntax -für den Textbeschriftungsmodus wird erklärt in -@ref{Formatting text}. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { \bold { \italic ( } - \dynamic f \bold { \italic ) } } } -boxF = \markup { \bracket { \dynamic f } } -\relative c' { - c1_\roundF - c1_\boxF -} -@end lilypond - -@cindex make-dynamic-script -@funindex make-dynamic-script - -Einfache, mittig gesetzte Dynamikzeichen können schnell mit der -@code{make-dynamic-script}-Funktion erstellt werden. Die -Schriftart für Dynamikzeichen enthält nur die Buchstaben -@code{f,m,p,r,s} sowie @code{z}. - -@lilypond[verbatim,quote] -sfzp = #(make-dynamic-script "sfzp") -\relative c' { - c4 c c\sfzp c -} -@end lilypond - -Allgemein gesagt kann @code{make-dynamic-script} jegliches -Textbeschriftungsobjekt als Argument haben. Im nächsten -Beispiel wird die vertikale Ausrichtung von den Beschriftungen -(engl. markup) und den spitzen Klammern an der selben Linie -durch @code{make-dynamic-script} gewährleistet, wenn beide -an die selbe Note angehängt werden. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { - \normal-text { \bold { \italic ( } } - \dynamic f - \normal-text { \bold { \italic ) } } } } -boxF = \markup { \bracket { \dynamic f } } -roundFdynamic = #(make-dynamic-script roundF) -boxFdynamic = #(make-dynamic-script boxF) -\relative c' { - c4_\roundFdynamic\< d e f - g,1_\boxFdynamic -} -@end lilypond - -Anstelle dessen kann auch die Scheme-Form des Beschriftungs-Modus -verwendet werden. Seine Syntax ist erklärt in -@ref{Markup construction in Scheme}. - -@lilypond[verbatim,quote] -moltoF = #(make-dynamic-script - (markup #:normal-text "molto" - #:dynamic "f")) -\relative c' { - 16 - 2..\moltoF -} -@end lilypond - -Die Auswahl von Schriftarten in Textbeschriftungen ist erklärt in -@ref{Selecting font and font size}. - - -@seealso -Notationsreferenz: -@ref{Formatting text}, -@ref{Selecting font and font size}, -@ref{Markup construction in Scheme}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Schnipsel: -@rlsr{Expressive marks}. - - -@node Curves -@subsection Curves - -Dieser Abschnitt erklärt, wie man verschiedene gebogene -Ausdrucksbezeichnungen erstellt: Legato- und Phrasierungsbögen, -Atemzeichen und Glissandos zu unbestimmten Tonhöhen. - -@menu -* Slurs:: -* Phrasing slurs:: -* Breath marks:: -* Falls and doits:: -@end menu - -@node Slurs -@unnumberedsubsubsec Slurs - -@cindex Legatobögen - -Ein Legatobogen (engl. slur) zeigt an, dass die Noten -@emph{legato} gespielt werden sollen. Er wird mit Klammern -hinter den Notenwerten notiert. - -@lilypond[verbatim,quote,relative=2] -f4( g a) a8 b( -a4 g2 f4) -2( 2) -@end lilypond - -@cindex Bögen, manuelle Platzierung -@cindex Legatobögen, manuelle Platzierung -@cindex Bögen, unter Noten -@cindex Bögen, über Noten -@funindex \slurDown -@funindex slurDown -@funindex \slurNeutral -@funindex slurNeutral - - -Legatobögen können manuell ober- oder unterhalb des Notensystems -besetzt werden, siehe -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2( d) -\slurDown -c2( d) -\slurNeutral -c2( d) -@end lilypond - -@cindex Phrasierungsbögen -@cindex mehrfache Bögen -@cindex gleichzeitige Bögen -@cindex Bögen, Phrasierung -@cindex Bögen, mehrfach -@cindex Bögen, gleichzeitig - -Gleichzeitige, überlappende Legatobögen sind nicht erlaubt, aber -ein Phrasierungsbogen kann einen Legatobogen überlappen. Damit -können zwei Bögen gleichzeitig ausgegeben werden. Siehe auch -@ref{Phrasing slurs}. - -@cindex Legatobogen-Stil -@cindex durchgehender Legatobogen -@cindex massiver Legatobogen -@cindex gepunkteter Legatobogen -@cindex agestrichelter Legatobogen -@cindex Legatobogen, massiv -@cindex Legatobogen, gepunktet -@cindex Legatobogen, gestrichelt -@cindex Stil von Legatobögen -@funindex \slurDashed -@funindex slurDashed -@funindex \slurDotted -@funindex slurDotted -@funindex \slurSolid -@funindex slurSolid - -Legatobögen können durchgehend, gepunket oder gestrichelt dargestellt -werden. Standard ist der durchgehende Bogen: - -@lilypond[verbatim,quote,relative=1] -c4( e g2) -\slurDashed -g4( e c2) -\slurDotted -c4( e g2) -\slurSolid -g4( e c2) -@end lilypond - -@funindex \slurUp -@funindex slurUp - -@predefined -@code{\slurUp}, -@code{\slurDown}, -@code{\slurNeutral}, -@code{\slurDashed}, -@code{\slurDotted}, -@code{\slurSolid}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{using-double-slurs-for-legato-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{positioning-text-markups-inside-slurs.ly} - - -@seealso -Glossar: -@rglos{slur}. - -Handbuch zum Lernen: -@rlearning{On the un-nestedness of brackets and ties}. - -Notationsreferenz: -@ref{Direction and placement}, -@ref{Phrasing slurs}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{Slur}. - - - -@node Phrasing slurs -@unnumberedsubsubsec Phrasing slurs - -@cindex Phrasierungsbögen -@cindex Phrasierungszeichen -@cindex Bogen zur Phrasierung -@cindex Legatobogen zur Phrasierung -@funindex \( -@funindex \) - -Ein Phrasierungsbogen verbindet Noten und wird verwendet, um einen -musikalischen Ausdruck anzuzeigen. Er wird mit den Befehlen -@code{\(} und @code{\)} eingegeben. - -@lilypond[verbatim,quote,relative=2] -c4\( d( e) f( -e2) d\) -@end lilypond - -@funindex \phrasingSlurUp -@funindex phrasingSlurUp -@funindex \phrasingSlurDown -@funindex phrasingSlurDown -@funindex \phrasingSlurNeutral -@funindex phrasingSlurNeutral -@funindex phrasingSlurDashed -@funindex \phrasingSlurDashed -@funindex \phrasingSlurDotted -@funindex phrasingSlurDotted -@funindex \phrasingSlurSolid -@funindex phrasingSlurSolid - -Im typographischen Sinne verhalten sich Phrasierungsbögen genauso wie -Legatobögen. Sie werden aber als eigene Objekte behandelt. Ein -@code{\slurUp} hat also keine Auswirkung auf die Phrasierungsbögen. -Phrasierungsbögen können manuell oberhalb oder unterhalb des -Notensystems gesetzt werden, siehe -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=1] -c4\( g' c,( b) | c1\) -\phrasingSlurUp -c4\( g' c,( b) | c1\) -@end lilypond - -@cindex gleichzeitige Phrasierungsbögen -@cindex mehrere Phrasierungsbögen -@cindex Bögen, gleichzeitige Phrasierung -@cindex Phrasierungsbögen, gleichzeitig -@cindex Phrasierungsbögen, mehrfach - -Simultane oder überlappende Phrasierungsbögen sind nicht -erlaubt. - -Phrasierungsbögen können durchgehend, gepunket oder gestrichelt dargestellt -werden. Standard ist der durchgehende Bogen: - -@lilypond[verbatim,quote,relative=1] -c4\( e g2\) -\phrasingSlurDashed -g4\( e c2\) -\phrasingSlurDotted -c4\( e g2\) -\phrasingSlurSolid -g4\( e c2\) -@end lilypond - - -@predefined -@code{\phrasingSlurUp}, -@code{\phrasingSlurDown}, -@code{\phrasingSlurNeutral}, -@code{\phrasingSlurDashed}, -@code{\phrasingSlurDotted}, -@code{\phrasingSlurSolid}. -@endpredefined - -@seealso -Handbuch zum Lernen: -@rlearning{On the un-nestedness of brackets and ties}. - -Notationsreferenz: -@ref{Direction and placement}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{PhrasingSlur}. - - - -@node Breath marks -@unnumberedsubsubsec Breath marks - -@cindex Atemzeichen -@cindex Pausenzeichen -@funindex \breathe -@funindex breathe - -Atemzeichen werden mit dem Befehl @code{\breathe} eingegeben. - -@lilypond[verbatim,quote,relative=2] -c2. \breathe d4 -@end lilypond - -Musikalische Zeichen für Atemzeichen in Alter Notation, auch -Divisiones genannt, sind unterstützt. Für Einzelheiten siehe -@ref{Divisiones}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-breath-mark-symbol.ly} - -@cindex caesura -@cindex railroad tracks - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{inserting-a-caesura.ly} - - -@seealso -Glossar: -@rglos{caesura}. - -Notationsreferenz: -@ref{Divisiones}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{BreathingSign}. - - - -@node Falls and doits -@unnumberedsubsubsec Falls and doits - -@cindex falls -@cindex doits -@cindex Glissando, unbestimmt -@cindex Glissando, nach oben -@cindex Glissando, nach unten -@cindex Gleiten nach oben/unten -@funindex \bendAfter -@funindex bendAfter - - -Gleiten nach oben und unten kann mit dem Befehl @code{\bendAfter} -notiert werden. Die Richtung des Glissandos wird mit einem -Plus oder Minus (nach oben bzw. nach unten) angezeigt. Die -Zahl zeigt die Intervallgröße an, über die sich das Glissando @emph{nach} -der Note erstreckt. - -@lilypond[verbatim,quote,relative=2] -c2-\bendAfter #+4 -c2-\bendAfter #-4 -c2-\bendAfter #+8 -c2-\bendAfter #-8 -@end lilypond - -Das Minuszeichen (@code{-}) direkt vor dem @code{\bendAfter}-Befehl -ist @emph{notwendig} um unbestimmte Glissandos zu notieren. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adjusting-the-shape-of-falls-and-doits.ly} - - -@seealso -Glossar: -@rglos{fall}, -@rglos{doit}. - -Schnipsel: -@rlsr{Expressive marks}. - - -@node Lines -@subsection Lines - -Dieser Abschnitt zeigt, wie man verschiedene Ausdrucksbezeichnungen -erstellt, die sich linear erstrecken: Glissando, Arppegio und -Triller. - -@menu -* Glissando:: -* Arpeggio:: -* Trills:: -@end menu - -@node Glissando -@unnumberedsubsubsec Glissando - -@cindex Glissando -@funindex \glissando -@funindex glissando - -Ein @notation{Glissando} wird -mit dem Befehl @code{\glissando} auf eine Note folgend notiert: - -@lilypond[verbatim,quote,relative=2] -g2\glissando g' -c2\glissando c, -@end lilypond - -Verschiedene Glissando-Stile sind möglich. Für Einzelheiten siehe -@ref{Line styles}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{contemporary-glissando.ly} - - -@seealso -Glossar: -@rglos{glissando}. - -Notationsreferenz: -@ref{Line styles}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{Glissando}. - - -@knownissues - -Printing text over the line (such as @notation{gliss.}) is not -supported. - - -@node Arpeggio -@unnumberedsubsubsec Arpeggio - -@cindex Arpeggio -@cindex Gebrochene Akkorde -@cindex Akkord, gebrochen -@funindex \arpeggio -@funindex arpeggio -@funindex \arpeggioArrowUp -@funindex arpeggioArrowUp -@funindex \arpeggioArrowDown -@funindex arpeggioArrowDown -@funindex \arpeggioNormal -@funindex arpeggioNormal - -Ein @notation{Arpeggio} als Zeichen, dass ein Akkord gebrochen gespielt werden soll, -kann mit dem Befehl @code{\arpeggio} hinter der -Akkord-Konstruktion erzeugt werden. - -@lilypond[verbatim,quote,relative=1] -1\arpeggio -@end lilypond - -Unterschiedliche Arpeggio-Typen können benutzt werden. -@code{\arpeggioNormal} stellt wieder das normale Verhalten -her: - -@lilypond[verbatim,quote,relative=1] -2\arpeggio -\arpeggioArrowUp -2\arpeggio -\arpeggioArrowDown -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -@cindex Arpeggio-Symbole, besondere -@cindex besondere Arpeggio-Symbole - -@funindex \arpeggioBracket -@funindex arpeggioBracket -@funindex \arpeggioParenthesis -@funindex arpeggioParenthesis - -Besondere Arpeggios mit Klammern können erstellt werden: - -@lilypond[verbatim,quote,relative=1] -2 -\arpeggioBracket -2\arpeggio -\arpeggioParenthesis -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -Ein Arpeggio kann auch explizit ausgeschrieben werden, indem -Überbindungsbögen benutzt werden. Für mehr Information siehe -@ref{Ties}. - - -@predefined -@code{\arpeggio}, -@code{\arpeggioArrowUp}, -@code{\arpeggioArrowDown}, -@code{\arpeggioNormal}, -@code{\arpeggioBracket}, -@code{\arpeggioParenthesis}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-a-piano-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-other-contexts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-arpeggios-across-notes-in-different-voices.ly} - - -@seealso -Glossar: -@rglos{arpeggio}. - -Notationsreferenz: -@ref{Ties}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{Arpeggio}, -@rinternals{PianoStaff}. - - -@knownissues - -@cindex Arpeggio über Systeme im Klammernstil -@cindex Klammer-Arpeggio über Systeme -@cindex Zwischensysteme-Klammer-Arpeggio - -Es ist nicht möglich, Arpeggios zwischen Systemen und solche, die sich -nur auf ein System erstrecken, zum gleichen Zeitpunkt in einem -Klaviersystem (@code{PianoStaff}) zu benutzen. - -Die Arpeggios im Klammer-Stil funktionieren nicht über -mehrere Notensysteme. - - -@node Trills -@unnumberedsubsubsec Trills - -@cindex Triller - -@funindex \trill -@funindex trill -@funindex \startTrillSpan -@funindex startTrillSpan -@funindex \stopTrillSpan -@funindex stopTrillSpan - -Kurze @notation{Triller} ohne eine Dauer werden nmit dem Befehl -@code{\trill} notiert, siehe auch -@ref{Articulations and ornamentations}. - -Längere Triller mit einer Dauer werden mit den Befehlen -@code{\startTrillSpan} zu -Beginn und @code{\stopTrillSpan} am Ende erstellt. - -@lilypond[verbatim,quote,relative=2] -d1~\startTrillSpan -d1 -c2\stopTrillSpan r2 -@end lilypond - -Das nächste Beispiel zeigt Triller in Kombination mit einem -Vorschlag. Die Syntax dieser Konstruktion und die Methode, -wie man die Vorschläge genau positioniert, ist beschrieben in -@ref{Grace notes}. - -@lilypond[verbatim,quote,relative=2] -c1 \afterGrace -d1\startTrillSpan { c32[ d]\stopTrillSpan } -e2 r2 -@end lilypond - -@cindex Triller mit Tonhöhe - -@funindex \pitchedTrill -@funindex pitchedTrill - - -Triller, die auf einer bestimmten Note ausgeführt werden sollen, können -mit dem Befehl @code{pitchedTrill} notiert werden. Das erste -Argument ist die Hauptnote, das zweite die Note, auf der getrillert -wird. Sie wird als Note ohne Hals in Klammern ausgegeben. - -@lilypond[verbatim,quote,relative=1] -\pitchedTrill e2\startTrillSpan fis -d\stopTrillSpan -@end lilypond - -@cindex Triller mit Tonhöhe und erzwungenem Versetzungszeichen -@cindex Versetzungszeichen, erzwungen für Triller - -Im nächsten Beispiel ist der zweite Triller nicht eindeutig -notiert, denn das Versetzungszeichen der Trillernote ist -nicht ausgegeben. Man kann das Versetzungszeichen erzwingen. -Der zweite Takt zeigt diese Methode: - -@lilypond[verbatim,quote,relative=2] -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis! -g\stopTrillSpan -@end lilypond - -@predefined -@code{\startTrillSpan}, -@code{\stopTrillSpan}. -@endpredefined - -@seealso -Glossar: -@rglos{trill}. - -Notationsreferenz: -@ref{Articulations and ornamentations}, -@ref{Grace notes}. - -Schnipsel: -@rlsr{Expressive marks}. - -Referenz der Interna: -@rinternals{TrillSpanner}. diff --git a/Documentation/de/user/fretted-strings.itely b/Documentation/de/user/fretted-strings.itely deleted file mode 100644 index 7fd0f77691..0000000000 --- a/Documentation/de/user/fretted-strings.itely +++ /dev/null @@ -1,1354 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Fretted string instruments -@section Fretted string instruments - -@lilypondfile[quote]{fretted-headword.ly} - -Dieser Abschnitt erklärt bestimmte Eigenheiten der Notation für -gebundene Saiteninstrumente. - -@cindex Tabulatur -@cindex Gitarrentabulatur -@cindex Banjo-Tabulatur - -@menu -* Common notation for fretted strings:: -* Guitar:: -* Banjo:: -@end menu - -@node Common notation for fretted strings -@subsection Common notation for fretted strings - -Dieser Abschnitt zeigt Besonderheiten der Notation, die allen -gebundenen Saiteninstrumenten eigen ist. - -@menu -* References for fretted strings:: -* String number indications:: -* Default tablatures:: -* Custom tablatures:: -* Fret diagram markups:: -* Predefined fret diagrams:: -* Automatic fret diagrams:: -* Right-hand fingerings:: -@end menu - -@node References for fretted strings -@unnumberedsubsubsec References for fretted strings - -Noten für gebundene Saiteninstrumente wird normalerweise auf -einem einzelnen System notiert, entweder als traditionelles -Notensystem oder in Tabulaturform. Manchmal werden beide -Arten miteinander verbunden, und besonders in populärer -Musik ist es üblich, über dem traditionellen System Griffsymbole -zu setzen. Gitarre und Banjo sind transponierende Instrumente, -die eine Oktave tiefer klingen als sie notiert werden. Partituren -für diese Instrumente sollten den @qq{Tenorschlüssel} -(@code{"treble_8"}) benutzen. Einige Spezifika für gebundene -Instrumente sind an anderer Stelle erklärt: - -@itemize -@item Fingersatz kann notiert werden, siehe -@ref{Fingering instructions}. - -@item Anweisungen für @notation{Laissez vibrer}-Bögen und -Bögen zwischen Arpeggios und Tremolos sind beschrieben in -@ref{Ties}. - -@item Hinweise, wie mehrere Stimmen gesetzt werden können, finden sich in -@ref{Collision resolution}. - -@item Instructions for indicating harmonics can be found in -@ref{Harmonics}. - -@end itemize - - -@seealso -Notationsreferenz: -@ref{Fingering instructions}, -@ref{Ties}, -@ref{Collision resolution}, -@ref{Instrument names}, -@ref{Writing music in parallel}, -@ref{Arpeggio}, -@ref{List of articulations}, -@ref{Clef}. - - -@node String number indications -@unnumberedsubsubsec String number indications - -@cindex Saitenzahl -@cindex Zahl von Saite -@cindex Fingersatz versus Saitenzahl -@cindex Nummerierung von Saite - -Die Nummer der Saite, auf der gespielt werden soll, kann -angezeigt werden, indem @code{\@var{Zahl}} an eine Note -innerhalb eines Akkord-Konstrukts gesetzt wird: - -@lilypond[verbatim,quote,relative=0] -\clef "treble_8" -4 2 -1 -@end lilypond - -Wenn Fingersatz und Saitennummer zusammen benutzt werden, wird -ihre Position anhand der Reihenfolge entschieden, mit der sie im -Code auftauchen: - -@lilypond[verbatim,quote,relative=1] -\clef "treble_8" -2 - -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - - -@seealso -Notationsreferenz: -@ref{Fingering instructions}. - -Schnipsel: -@rlsr{Fretted strings}. - -Referenz der Interna: -@rinternals{StringNumber}, -@rinternals{Fingering}. - - -@node Default tablatures -@unnumberedsubsubsec Default tablatures - -@cindex Tabulatur, Grundlegendes - -@funindex TabStaff -@funindex TabVoice - -Tabulatur-Notation wird für die Notation von Zupfinstrumenten benutzt. -Tonhöhen werden hier nicht durch Notenköpfe, sondern durch Zahlen -notiert. Diese Zahlen zeigen an, auf welcher Saite und welchem Bund -der Ton gespielt werden soll. LilyPond bringt beschränkte Unterstützung -für Tabulaturen mit. - -Die Saitennummer, die mit einer Note assoziiert ist, wird durch einen -Backslash, gefolgt von einer Zahl, notiert. In der Standardeinstellung ist -die erste Saite die höchste Saite und als Stimmung wird die übliche -Gitarrenstimmung auf sechs Saiten angenommen. Die Noten werden in -einer Tabulatur gesetzt, indem @rinternals{TabStaff} und -@rinternals{TabVoice}-Kontexte verwendet werden. - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff { - a,4\5 c'\2 a\3 e'\1 - e\4 c'\2 a\3 e'\1 -} -@end lilypond - -@funindex minimumFret - -@cindex Bund - -Wenn keine Saite für eine Note angegeben wird, wird die Note der -Saite zugeordnet, welche die Note auf einem Bund erzeugen kann, -der größer oder gleich als der Wert von @code{minimumFret} -ist. Der Standardwert für @code{minimumFret} beträgt 0. - -@lilypond[quote,ragged-right,verbatim] -\new StaffGroup << - \new Staff \relative c { - \clef "treble_8" - c16 d e f g4 - c,16 d e f g4 - } - \new TabStaff \relative c { - c16 d e f g4 - \set TabStaff.minimumFret = #5 - c,16 d e f g4 - } ->> -@end lilypond - -@cindex Flageolett in Tabulaturen -@cindex Tabulatur und Flageolett -@cindex Gleiten in Tabulaturen -@cindex Tabulaturen und Gleiten -@cindex Slide in Tabulaturen - -Flageolett und Gleiten (Slide) kann zur Tabulatur hinzugefügt -werden: - -@lilypond[fragment, verbatim, quote, relative=1] -\new TabStaff { - \new TabVoice { - d\2\glissando e\2 - } -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{stem-and-beam-behavior-in-tablature.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{polyphony-in-tablature.ly} - - -@seealso -Notationsreferenz: -@ref{Stems}. - -Schnipsel: -@rlsr{Fretted strings}. - -Referenz der Interna: -@rinternals{TabNoteHead}, -@rinternals{TabStaff}, -@rinternals{TabVoice}, -@rinternals{Beam}. - - -@knownissues - -Akkorde werden nicht gesondert behandelt, sodass die Saitenauswahlfunktion -eventuell die selbe Saite für zwei Töne eines Akkordes auswählen kann. - -Damit die Kombination von Stimmen (@code{\partcombine}) richtig funktioniert, -müssen speziell erstellte Stimmen innerhalb des Tabulatursystems -(@code{TabStaff}) benutzt werden: - -@lilypond[quote,ragged-right,verbatim] -melodia = \partcombine { e4 g g g }{ e4 e e e } -<< - \new TabStaff << - \new TabVoice = "one" s1 - \new TabVoice = "two" s1 - \new TabVoice = "shared" s1 - \new TabVoice = "solo" s1 - { \melodia } - >> ->> -@end lilypond - -Spezialeffekte für Gitarre beschränken sich auf Flageolett und -Slide. - - -@node Custom tablatures -@unnumberedsubsubsec Custom tablatures - -@cindex Tabulaturen, eigen -@cindex eigene Tabulaturen -@cindex Tabulatur, Banjo -@cindex Tabulatur, Mandoline -@cindex Tabulatur, Bassgitarre -@cindex Saitenstimmung für Bundinstrumente -@cindex Bundinstrumente, Saitenstimmung -@cindex Tabulatur, Saitenstimmung - -@funindex StringTunings - -LilyPond errechnet automatisch den Bund für eine Note auf Grundlage -der Saite, zu welcher der Ton zugeordnet ist. Um das tun zu können, -muss die Stimmung der Saiten angegeben werden. Die Stimmung wird -in der @code{StringTunings}-Eigenschaften bestimmt. - -LilyPond hat vordefinierte Stimmungen für Banjo, Mandoline, Gitarre -und Bassgitarre. Für diese Stimmungen wird automatisch die -richtige Transposition eingesetzt. Das nächste Beispiel ist für -Bassgitarre, welche eine Oktave niedriger erklingt, als sie -geschrieben ist: - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \clef "bass_8" - \relative c, { - c4 d e f - } - } - \new TabStaff { - \set TabStaff.stringTunings = #bass-tuning - \relative c, { - c4 d e f - } - } ->> -@end lilypond - - -Die Standardstimmung ist die Gitarrenstimmung (@code{guitar-tuning}) -in der EADGHE-Stimmung. Andere vordefinierte Stimmung sind: -@code{guitar-open-g-tuning}, @code{mandolin-tuning} und -@code{banjo-open-g-tuning}. Die vordefinierten Stimmungen finden -sich in @code{scm/output-lib.scm}. - -Die Stimmung ist eine Scheme-Liste von Tonhöhen der Saiten, -eine für jede Saite, geordnet von Saitennummer 1 bis n, wobei 1 -die höchste Saite der Tabulatur ist und n die unterste. Normalerweise -wird so die Stimmung vom höchsten bis zum tiefsten Ton angegeben, -aber bei einige Instrumente (etwa Ukulele) werden die Saiten nicht -aufgrund der Tonhöhe angeordnet. - -Eine Tonhöhe in der Liste der Saitenstimmungen ist der Unterschied -der entsprechenden Tonhöhe zum eingestrichenen C gemessen in -Halbtönen. Die Tonöhe muss eine Ganzzahl sein. LilyPond -errechnet die Tonhöhe einer Saite, indem die Tonhöhe der -Saitenstimmung zu der Tonhöhe von c' hinzugerechnet wird. - -LilyPond erschließt die Anzahl der Saiten einer Tabulatur -anhand der Anzahl der Saitenstimmungszahlen in @code{stringTunings}. - -Jede beliebige Saitenstimmung kann erzeugt werden. Als Beispiel -etwa kann die Saitenstimmung für ein viersaitiges Instrument -mit den Tonhöhen @code{a''}, @code{d''}, @code{g'}und @code{c'} -so definiert werden: - -@lilypond[quote,verbatim] -mynotes = { - c'4 e' g' c'' | - e'' g'' b'' c''' -} - -<< - \new Staff { - \clef treble - \mynotes - } - \new TabStaff { - \set TabStaff.stringTunings = #'(21 14 7 0) - \mynotes - } ->> -@end lilypond - - -@seealso -Installierte Dateien: -@file{scm/output-lib.scm}. - -Schnipsel: -@rlsr{Fretted strings}. - -Referenz der Interna: -@rinternals{Tab_note_heads_engraver}. - - - -@node Fret diagram markups -@unnumberedsubsubsec Fret diagram markups - -@cindex Fret (Bunddiagramme) -@cindex Griffsymbole, Bundinstrumente -@cindex Gitarrengriffsymbole -@cindex Akkordtabulatur -@cindex Akkorddiagramm -@cindex Bunddiagramme -@cindex eigene Bunddiagramme -@cindex Bunddiagramme, eigene - -Bunddiagramme können zu Notation als Textbeschriftung -hinzugefügt werden. Die Beschriftung enthält Information zu dem -gewünschten Bunddiagramm. Es gibt drei unterschiedliche -Darstellungsarten: normal, knapp und ausführlich. Die drei -Arten erzeugen die gleiche Ausgabe, aber mit jeweils mehr oder -weniger Einzelheiten. Einzelheiten zu Textbeschriftunsbefehlen -findet sich in @ref{Text markup commands}. - -Die Standard-Bunddiagrammbeschriftung beinhaltet die Saitennummer -und die Bundnummer für jeden Punkt, der notiert werden soll. -Zusätzlich können offenen und nicht gespielte (schwingende) Saiten -angezeigt werden. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex Barre, Gitarre - -Barre kann hinzugefügt werden: - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, d g b d' g'> ^\markup - \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" - } ->> -@end lilypond - -@cindex Bunddiagramme, normaler Stil -@cindex fret (Bunddiagramme) - -@funindex fret-diagram -@funindex \fret-diagram - -Die Größe des Bunddiagrammes und die Anzahl der Bünde im Diagramm -kann geändert werden: - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, b, d g b g'> ^\markup - \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" - } ->> -@end lilypond - -Die Anzahl der Saiten kann geändert werden, um sie für andere -Instrumente anzupassen, wie etwas Banjo oder Ukulele. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - a1 - } - } - \context Staff { - %% A chord for ukelele - a'1 ^\markup \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" - } ->> -@end lilypond - -Fingersatz kann auch angezeigt werden, und die Position der -Fingersatzzahlen kann kontrolliert werden. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" - } ->> -@end lilypond - -Die Größe und Position der Punkte kann geändert werden: - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex fret-diagram-terse-Markup -@cindex Bunddiagramme, knapper Stil - -@funindex fret-diagram-terse -@funindex \fret-diagram-terse - -Die Beschriftungsfunktion @code{fret-diagram-terse} (knappe Version) -lässt die Saitennummern aus: das Vorhandensein einer Saite wird -durch ein Semikolon ausgedrückt. Für jede Saite des Diagramms -muss ein Semikolon gesetzt werden. Das erste Semikolon entspricht -der höchsten Saite, das letze der ersten Saite. Stumme und -offene Saiten sowie Bundnummern können angezeigt werden. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3;2;o;1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2;3;1;" - } ->> -@end lilypond - -Barre kann im knappen Modus auch angezeigt werden: - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram-terse #"1-(;3;3;2;1;1-);" - < g, d g b d' g'> ^\markup - \fret-diagram-terse #"3-(;5;5;4;3;3-);" - } ->> -@end lilypond - -Fingersatz kann im knappen Modus hinzugefügt werden: - -@c Need to use override to enable fingerings to show this -- can we do so? -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" - } ->> -@end lilypond - -Andere Eigenschaften der Bunddiagramme müssen im knappen Modus -mit @code{\override}-Befehlen angegeben werden. - -@cindex fret-diagram-verbose-Markup -@cindex Bunddiagramme, ausführlicher Stil - -@funindex fret-diagram-verbose -@funindex \fret-diagram-verbose - -Die Beschriftungsfunktion @code{fret-diagram-verbose} -(ausführlicher Stil) ist in der -Form eine Scheme-Liste. Jedes Element stellt ein Element dar, -dass im Bunddiagramm gesetzt werden soll. - -@lilypond[quote, verbatim] -<< \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-verbose #'( - (mute 6) - (place-fret 5 3) - (place-fret 4 2) - (open 3) - (place-fret 2 1) - (open 1) - ) - < d a d' f'> ^\markup - \fret-diagram-verbose #'( - (mute 6) - (mute 5) - (open 4) - (place-fret 3 2) - (place-fret 2 3) - (place-fret 1 1) - ) - } ->> -@end lilypond - -Fingersatz und Barre kann im ausführlichen Modus notiert werden. -Nur im ausführlichen Modus kann ein Capo angezeigt werden, das auf -dem Bunddiagramm plaziert wird. Die Capo-Anzeige ist ein dicker -Strich, der alle Saiten bedeckt. Der Bund mit dem Capo ist der -unterste Bund im Diagramm. - -@c \override is necessary to make fingering visible -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g c - } - } - \context Staff { - \clef "treble_8" - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - - < f, c f a c' f'>1 ^\markup - \fret-diagram-verbose #'( - (place-fret 6 1) - (place-fret 5 3) - (place-fret 4 3) - (place-fret 3 2) - (place-fret 2 1) - (place-fret 1 1) - (barre 6 1 1) - ) - < g, b, d g b g'> ^\markup - \fret-diagram-verbose #'( - (place-fret 6 3 2) - (place-fret 5 2 1) - (open 4) - (open 3) - (open 2) - (place-fret 1 3 3) - ) - < c e g c' e'> ^\markup - \fret-diagram-verbose #'( - (capo 3) - (mute 6) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - ) - } ->> -@end lilypond - -Alle anderen Bunddiagramm-Eigenschaften müssen im ausführlichen -Modus mit mit @code{\override}-Befehlen angegeben werden. - -@ignore -The following example shows the three fret-diagram markup -interfaces, along with examples of common tweaks. For example, -the size of the verbose fret diagram is reduced to 0.75, and the -finger indications are specified to appear below the diagram. The -terse diagram includes tweaks to specify placement of finger code -and color of dots. - -@lilypond[verbatim,ragged-right,quote] -\new Voice { - \clef "treble_8" - d^\markup \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" - d d d - fis^\markup \override #'(size . 0.75) { - \override #'(finger-code . below-string) { - \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) - (place-fret 5 4 3) - (place-fret 4 4 4) - (place-fret 3 3 2) - (place-fret 2 2 1) - (place-fret 1 2 1)) - } - } - fis fis fis - c^\markup \override #'(dot-radius . 0.35) { - \override #'(finger-code . in-dot) { - \override #'(dot-color . white) { - \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" - } - } - } - c c c -} -@end lilypond -@end ignore - -@cindex Bunddiagramme, anpassen -@cindex eigene Bunddiagramme -@cindex Anpassen von Bunddiagrammen - -@funindex fret-diagram-interface - -Die graphische Erscheinung eines Bunddiagramms kann den Wünschen -des Notensetzers angepassen werden. Hierzu werden die Eigenschaften -des @code{fret-diagram-interface} (Bunddiagramm-Schnittstelle) -eingesetzt. Einzelheiten hierzu -in @rinternals{fret-diagram-interface}. Die Eigenschaften der -Schnittstelle gehören dem @code{Voice.TextScript}-Kontext an. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-markup-fret-diagrams.ly} - - -@seealso -Notationsreferenz: -@ref{Text markup commands}. - -Schnipsel: -@rlsr{Fretted strings}. - -Referenz der Interna: -@rinternals{fret-diagram-interface}. - - - -@node Predefined fret diagrams -@unnumberedsubsubsec Predefined fret diagrams - - -@cindex Bunddiagramme -@cindex Akkord-Diagramme - -@funindex FretBoards -@funindex stringTunings - -Bunddiagramme können mit dem @code{FretBoards}-Kontext angezeigt -werden. Standardmäßig zeigt der @code{FretBoards}-Kontext -Bunddiagramme an, die in einer Tabelle definiert sind: - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode { - c1 d - } -} -@end lilypond - -Die vordefinierten Diagramme sind in der Datei -@code{predefined-guitar-fretboards.ly} enthalten. Sie werden -basierend auf der Tonhöhe eines Akkordes und dem Wert von -@code{stringTunings} (Saitenstimmung), der gerade benutzt wird, -gespeichert. @code{predefined-guitar-fretboards.ly} beinhaltet -vordefinierte Diagramme für die Gitarrenstimmtung (@code{guitar-tuning}). -Anhand der Beispiele in dieser Datei können auch für andere -Instrumente oder Stimmungen Diagramme definiert werden. - -Tonhöhen von Akkorden können entweder als Akkordkonstrukte -oder im Akkordmodus notiert werden (siehe auch -@ref{Chord mode overview}). - -@lilypond[verbatim, ragged-right,quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode {c1} - 1 -} -@end lilypond - -@cindex Akkordbezeichnungen und Bunddiagramme -@cindex Bunddiagramme und Akkordbezeichnungen - -@funindex ChordNames -@funindex chordmode -@funindex \chordmode - -Oft wird sowohl eine Akkordbezeichnung als ein Bunddiagramm -notiert. Das kann erreicht werden, indem ein -@code{ChordNames}-Kontext parallel mit einem @code{FretBoards}-Kontext -gesetzt wird und beiden Kontexten die gleichen Noten zugewiesen -werden. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex Transposition von Bunddiagrammen -@cindex Bunddiagramme, Transposition - -Vordefinierte Bunddiagramme können transponiert werden, solange -ein Diagramm für den transponierten Akkord in der Bunddiagramm-Tabelle -vorhanden ist. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -mychordlist = { - \mychords - \transpose c e { \mychords} -} -<< - \context ChordNames { - \mychordlist - } - \context FretBoards { - \mychordlist - } ->> -@end lilypond - -Die Tabelle der vordefinierten Bunddiagramme enthält sieben -Akkorde (Dur, Moll, übermäßig, vermindert, Dominantseptakkord, -große Septime und kleine Septime) für alle 17 Tonarten. Eine -vollständige Liste der vordefinierten Bunddiagramme findet sich -in @ref{Predefined fret diagrams}. Wenn in der Tabelle für -einen Akkord kein Wert steht, wird ein Bunddiagramm vom -@code{FretBoards}-Engraver errechnet, wobei die automatische -Bunddiagrammfunktion zu Anwendung kommt. Siehe hierzu -@ref{Automatic fret diagrams}. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex Bunddiagramme, eigene definieren -@cindex Definieren von eigenen Bunddiagrammen -@cindex Eigene Bunddiagramme definieren - -Bunddiagramme können zu der Tabelle hinzugefügt werden. Um ein -Diagramm hinzuzufügen, muss der Akkord des Diagramms, die Stimmung -und die Diagramm-Definition angegeben werden. Die Diagramm-Definition -kann entweder eine @code{fret-diagram-terse}-Definition oder eine -@code{fret-diagram-verbose}-Liste sein. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c:9} - #guitar-tuning - #"x;3-2;2-1;3-3;3-4;x;" - -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -Unterschiedliche Bunddiagramme für den selben Akkord können -gespeichert werden, indem unterschiedliche Oktaven für die -Tonhöhe benutzt werden. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c'} - #guitar-tuning - #(offset-fret 2 (chord-shape 'bes guitar-tuning)) - -mychords = \chordmode{ - c1 c' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex Bundinstrumente, Akkordformen -@cindex Akkordformen für Bundinstrumente - -@funindex \addChordShape -@funindex add ChordShape -@funindex storePredefinedDiagram -@funindex \storePredefinedDiagram - -Zusätzlich zu Bunddiagrammen speichert LilyPond auch eine interne -Liste an Akkordformen. Die Akkordformen sind Bunddiagramme, -die am Hals entlang verschoben werden können und dabei unterschiedliche -Akkorde ergeben. Akkordformen können zu der internen Liste -hinzugefügt werden und dann benutzt werden, um vordefinierte -Bunddiagramme zu definieren. Weil sie auf verschiedenen Positionen -auf dem Steg gelegt werden können, beinhalten vordefinierte -Akkord üblicherweise keine leeren Saiten. Wie Bunddiagramme können auch -Akkordformen entweder als @code{fret-diagram-terse}-Definition -oder als @code{fret-diagram-verbose}-Liste erstellt werden. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -% add a new chord shape - -\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" - -% add some new chords based on the power chord shape - -\storePredefinedDiagram \chordmode {f'} - #guitar-tuning - #(chord-shape 'powerf guitar-tuning) -\storePredefinedDiagram \chordmode {g'} - #guitar-tuning - #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) - -mychords = \chordmode{ - f1 f' g g' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -Die graphische Form eines Bunddiagramms kann entsprechend den -eigenen Wünschen verändert werden, indem man die Eigenschaften -der @code{fret-diagram-interface}-Schnittstellt verändert. -Einzelheiten hierzu in @rinternals{fret-diagram-interface}. Die -Schnittstelleneigenschaften eines vordefinierten Bunddiagrammes -gehören dem @code{FretBoards.FretBoard}-Kontext an. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-fretboard-fret-diagrams.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{defining-predefined-fretboards-for-other-instruments.ly} - - -@seealso -Notationsreferenz: -@ref{Custom tablatures}, -@ref{Automatic fret diagrams}, -@ref{Chord mode overview}, -@ref{Predefined fret diagrams}. - -Installierte Dateien: -@file{ly/predefined-guitar-fretboards.ly}, -@file{ly/predefined-guitar-ninth-fretboards.ly}. - -Schnipsel: -@rlsr{Fretted strings}. - -Referenz der Interna: -@rinternals {fret-diagram-interface}. - - -@node Automatic fret diagrams -@unnumberedsubsubsec Automatic fret diagrams - -@cindex Bunddiagramme, automatisch -@cindex Akkorddiagramme, automatisch -@cindex automatische Bunddiagramme - -Bunddiagramme können automatisch aus notierten Noten erstellt werden. -Hierzu wird der @code{FretBoards}-Kontext eingesetzt. Wenn keine -vordefinierten Diagramme für die ensprechenden Noten mit -der aktiven Saitenstimmung (@code{stringTunings}) vorhanden sind, -errechnet der Kontext Saiten und Bünde die benutzt werden können, -um die Noten zu spielen. - -@lilypond[quote,ragged-right,verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context FretBoards { - < f, c f a c' f'>1 - < g,\6 b, d g b g'> - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 - < g, b, d g b' g'> - } ->> -@end lilypond - -@funindex predefinedFretboardsOff -@funindex \predefinedFretboardsOff -@funindex predefinedFretboardsOn -@funindex \predefinedFretboardsOn - -Da in den Standardeinstellungen keine vordefinierten Diagramme -geladen werden, ist die automatische Diagrammerstellung das -Standardverhalten. Wenn die vordefinierten Diagramme eingesetzt -werden, kann die automatische Berechnung an- und ausgeschaltet -werden. - -@lilypond[quote,ragged-right,verbatim] - -\storePredefinedDiagram - #guitar-tuning - #"x;3-1-(;5-2;5-3;5-4;3-1-1);" -<< - \context ChordNames { - \chordmode { - c1 c c - } - } - \context FretBoards { - 1 - \predefinedFretboardsOff - - \predefinedFretboardsOn - - } - \context Staff { - \clef "treble_8" - 1 - - - } ->> -@end lilypond - -Manchmal kann die Berechnungsfunktion für Bunddiagramme kein -passendes Diagramm finden. Das kann oft umgangen werden, indem -man manuell einer Note eine bestimmte Saite zuweist. In vielen -Fällen muss nur eine Note derart gekennzeichnet werden, der -Rest wird dann ensprechend durch den @code{FretBoards}-Kontext -behandelt. - -@cindex Bunddiagramme, Fingersatz -@cindex Fingersatz in Bunddiagrammen - -Fingersatz kann zu FretBoard-Bunddiagrammen hinzugefügt werden. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context FretBoards { - < c-3 e-2 g c'-1 e' > 1 - < d a-2 d'-3 f'-1> - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 - < d a d' f'> - } ->> -@end lilypond - -Der kleinste Bund, der benutzt wird, um Saiten und Bünde im -FretBoard-Kontext zu errechnen, kann mit der -@code{minimumFret}-Eigenschaft gesetzt werden. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - d1:m d:m - } - } - \context FretBoards { - < d a d' f'> - \set FretBoards.minimumFret = #5 - < d a d' f'> - } - \context Staff { - \clef "treble_8" - < d a d' f'> - < d a d' f'> - } ->> -@end lilypond - -Die Saiten und Bünde des @code{FretBoards}-Kontextes hängen von -der @code{stringTunings}-Eigesnchaft ab, die die gleiche Bedeitung -wie im TabStaff-Kontext hat. Siehe auch @ref{Custom tablatures} -zu Information über die @code{stringTunings}Eigenschaft. - -Die graphische Erscheindung eines Bunddiagrammes kann den -Bedürfnissen angepasst werden, indem Eigenschaften der -@code{fret-diagram-interface}-Schnittstelle verändert werden. -Einzelheiten finden sich in @rinternals{fret-diagram-interface}. -Die Schnittstelleneigenschaften eines @code{FretBoards}-Diagramms -gehören dem @code{FretBoards.FretBoard}-Kontext an. - - -@predefined -@code{\predefinedFretboardsOff}, -@code{\predefinedFretboardsOn}. -@endpredefined - - -@seealso -Notationsreferenz: -@ref{Custom tablatures}. - -Schnipsel: -@rlsr{Fretted strings}. - -Referenz der Interna: -@rinternals {fret-diagram-interface}. - - -@node Right-hand fingerings -@unnumberedsubsubsec Right-hand fingerings - -@cindex Bundinstrumente, Fingersatz der rechten Hand -@cindex Fingersatz der rechten Hand, Bundinstrumente -@cindex rechte Hand, Fingersatz für Bundinstrumente - -@funindex rightHandFinger -@funindex \rightHandFinger - - -Fingersatz für die rechte Hand in Akkorden kann mit den -Bezeichnungen @var{p-i-m-a} notiert werden. Er muss innerhalb -eines Akkord-Konstruktes notiert werden. - - -@warning{Nach der Note @strong{muss} ein Minuszeichen gesetzt -werden und ein Leerzeichen nach dem schließenden @code{>}.} - -@lilypond[quote,verbatim,relative=0] -\clef "treble_8" -4 - - - -1 -@end lilypond - -Zur Erleichterung kann der Befehl @code{\rightHandFinger} zu ein paar -Buchstaben abgekürzt werden, etwa @code{RH}. - -@example -#(define RH rightHandFinger) -@end example - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{placement-of-right-hand-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{fingerings,-string-indications,-and-right-hand-fingerings.ly} - -@seealso -Schnipsel: -@rlsr{Fretted strings}. - -Referenz der Interna: -@rinternals{StrokeFinger}. - - -@node Guitar -@subsection Guitar - -Die meisten der Besonderheiten von Gitarrennotation wurden im -allgemeinen Abschnitt behandelt, aber es gibt noch einige, die -hier gezeigt werden sollen. Teilweise soll ein Lead-sheet nur -die Akkordsymbole und den Gesangstext enthalten. Da LilyPond -ein Notensatzprogramm ist, wird es nicht für derartige -Projekte empfohlen, die keine eigentliche Notation beinahlten. -Anstattdessen sollte ein Textbearbeitungsprogramm, oder ein -Satzprogramm wie GuitarTeX (für erfahrende Benutzer) eingesetzt -werden. - -@menu -* Indicating position and barring:: -* Indicating harmonics and dampened notes:: -@end menu - -@node Indicating position and barring -@unnumberedsubsubsec Indicating position and barring - -@cindex Position und Barret für Bundinstrumente -@cindex Bundinstrumente, Position und Barret anzeigen -@cindex Barret, anzeigen für Bundinstrumente - -Das Beispiel zeigt, wie man Griff- und Barreposition -notieren kann. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=0] -\clef "treble_8" -b16 d g b e -\textSpannerDown -\override TextSpanner #'(bound-details left text) = #"XII " - g16\startTextSpan - b16 e g e b g\stopTextSpan -e16 b g d -@end lilypond - - -@seealso -Notationsreferenz: -@ref{Text spanners}. - -Schnipsel: -@rlsr{Fretted strings}, -@rlsr{Expressive marks}. - - -@node Indicating harmonics and dampened notes -@unnumberedsubsubsec Indicating harmonics and dampened notes - -@cindex Bundinstrumente, gedämpfte Noten -@cindex Bundinstrumente, Flageolett -@cindex Dämpfung, Bundinstrumente -@cindex gedämpfte Noten, Bundinstrumente -@cindex Flageolett, Bundinstrumente - -Besondere Notenköpfe können eingesetzt werden, um gedämpfte Noten -oder Flageoletttöne anzuzeigen. Flageoletttöne werden normalerweise -mit einem Text erklärt. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { - \clef "treble_8" - \override Staff.NoteHead #'style = #'cross - g8 a b c b4 - \override Staff.NoteHead #'style = #'harmonic-mixed - d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 -} -@end lilypond - - -@seealso -Notationsreferenz: -@ref{Special note heads}, -@ref{Note head styles}. - -Schnipsel: -@rlsr{Fretted strings}. - - -@node Banjo -@subsection Banjo - -@menu -* Banjo tablatures:: -@end menu - -@node Banjo tablatures -@unnumberedsubsubsec Banjo tablatures - -@cindex Banjo-Tabulaturen -@cindex Tabulatur, Banjo - -LilyPond hat grundlegende Unterstützung für fünfsaitige Banjo. -Die Banjo-Tabulatur-Funktion sollte zum Notieren von Banjo-Tabulaturen -verwendet werden, damit die richtigen Bund-Nummern für die fünfte -Saite gesetzt werden: - -@c due to crazy intervals of banjo music, absolute pitch is recommended - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff << - \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo - \set TabStaff.stringTunings = #banjo-open-g-tuning - { - \stemDown - g8 d' g'\5 a b g e d' | - g4 d''8\5 b' a'\2 g'\5 e'\2 d' | - g4 - } ->> -@end lilypond - -@cindex Banjo-Stimmung -@cindex Stimmung, Banjo - -@funindex banjo-c-tuning -@funindex banjo-modal-tuning -@funindex banjo-open-d-tuning -@funindex banjo-open-dm-tuning -@funindex four-string-banjo - -Eine Anzahl von üblichen Stimmungen für Banjo sind in LilyPond -vordefiniert: -@code{banjo-c-tuning} (gCGBD), @code{banjo-modal-tuning} (gDGCD), -@code{banjo-open-d-tuning} (aDF#AD) und @code{banjo-open-dm-tuning} -(aDFAD). - -Diese Stimmungen können für das viersaitige Banjo angepasst werden, -indem die @code{four-string-banjo}-Funktion eingesetzt wird: - -@example -\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) -@end example - - -@seealso -Schnipsel: -@rlsr{Fretted strings}. - -Die Datei @file{scm/@/output@/-lib@/.scm} beinhaltet vordefinierte -Stimmungen für Banjo. diff --git a/Documentation/de/user/fundamental.itely b/Documentation/de/user/fundamental.itely deleted file mode 100644 index 1a9d369c10..0000000000 --- a/Documentation/de/user/fundamental.itely +++ /dev/null @@ -1,3136 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" -@c Translators: Till Rettig, Reinhold Kainhofer - -@node Fundamental concepts -@chapter Fundamental concepts - -Nachdem im Tutorial gezeigt wurde, wie aus einfachen Text-Dateien -wunderschön formatierte Musiknoten erzeugt werden können, stellt -dieses Kapitel die Konzepte und Techniken vor, wie auch komplexere -Partituren erstellt werden können. - -@menu -* How LilyPond input files work:: -* Voices contain music:: -* Contexts and engravers:: -* Extending the templates:: -@end menu - -@node How LilyPond input files work -@section How LilyPond input files work - -Das LilyPond Eingabeformat hat eine ziemlich freie Form, so dass -für erfahrene Benutzer viel Freiheit besteht, die Struktur ihrer -Quelldateien anzulegen. Für Neulinge kann diese Flexibilität aber -erst einmal verwirrend sein. In diesem Kapitel soll darum ein Teil -dieser Strukturen dargestellt werden, vieles aber zur Vereinfachung -auch weggelassen werden. Für eine komplette Beschreibung des Eingabeformats -siehe @ruser{File structure}. - -Die meisten Beispiele in diesem Handbuch sind kleine Schnipsel, wie -etwa dieser: - -@example -c4 a b c -@end example - -Wie hoffentlich bekannt ist, lässt sich solch ein Schnipsel nicht -in dieser Form übersetzen. Diese Beispiele sind also nur Kurzformen -von wirklichen Beispielen. Sie müssen wenigstens zusätzlich in -geschweifte Klammern gesetzt werden. - -@example -@{ - c4 a b c -@} -@end example - -Die meisten Beispiele benutzen auch den @code{\relative c'}-Befehl. -Der ist nicht nötig, um die Dateien zu übersetzen, aber in den meisten -Fällen sieht der Notensatz seltsam aus, wenn man den Befehl -weglässt. - -@lilypond[quote,fragment,ragged-right,verbatim] -\relative c'' { - c4 a b c -} -@end lilypond - -Eine komplette Definition des Eingabeformats findet sich -im Kapitel @ruser{File structure}. - -@menu -* Introduction to the LilyPond file structure:: -* Score is a (single) compound musical expression:: -* Nesting music expressions:: -* On the un-nestedness of brackets and ties:: -@end menu - -@node Introduction to the LilyPond file structure -@subsection Introduction to the LilyPond file structure - -@cindex Eingabeformat -@cindex Dateistruktur -@cindex Struktur, Datei - -Ein grundlegendes Beispiel einer Eingabedatei für LilyPond lautet: - -@example -\version @w{"@version{}"} -\header @{ @} -\score @{ - @var{...zusammengesetzter Musik-Ausdruck...} % Die gesamten Noten kommen hier hin! - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -Aufgrund der Flexibilität von LilyPond gibt es viele Variationen dieses -Schemas, aber dieses Beispiel dient als einfacher Ausgangspunkt. - -@funindex \book -@funindex \score -@funindex book -@funindex score -@cindex book -@cindex score - -Bisher hat noch keines der Beispiele den @code{\score@{@}}-Befehl -benutzt, da Lilypond derartige zusätzliche Befehle automatisch -bei Bedarf einfügt, wenn die Eingabedatei eine einfache Struktur -hat. - -Sehen wir uns als ein solches einfaches Beispiel an: - -@example -\relative c'' @{ - c4 a d c -@} -@end example - -@noindent -Im Hintergrund kommen hier noch einige Ebenen dazu: LilyPond-Code -in der obigen Form ist in Wirklichkeit eine Abkürzung. Auch wenn man so -Dateien schreiben kann und sie auch korrekt gesetzt werden, heißt -der vollständige Code, der hier gemeint ist, eigentlich: - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - \relative c'' @{ - c4 a b c - @} - @} - @} - \layout @{ @} - @} -@} -@end example - -@noindent -Mit anderen Worten: Wenn die Eingabedatei einen einfachen Musik-Ausdruck -enthält, wird LilyPond die Datei so interpretieren, als ob dieser -Ausdruck in den oben gezeigten Befehlen eingegeben wurde. Diese nötige -Stuktur wird automatisch im Speicher beim Aufruf von LilyPond erzeugt, -ohne dass der Benutzer davon etwas bemerkt. - -@cindex Implizite Kontexte -@cindex Kontexte, implizit - -@strong{Ein Wort der Warnung ist jedoch angebracht!} Viele der Beispiele -in der Dokumentation von LilyPond lassen die @code{\new Staff} und @code{\new Voice} -Befehle zur Erzeugung einer Notenzeile und einer Stimme (beides ist in -LilyPond ein sogenannter Kontext) bewusst aus, -damit sie implizit von LilyPond im Speicher erzeugt werden. -Für einfache Dokumente funktioniert das im Allgemeinen sehr gut, für -komplexere Partituren können dadurch aber unerwartete Ergebnisse -entstehen, teilweise sogar unerwartete leere Notenzeilen. Um -die entsprechenden Kontexte in diesem Fall explizit zu erzeugen, -siehe @ref{Contexts and engravers}. - -@warning{Wenn mehr als ein paar Zeilen an Musik eingegeben werden, -empfielt es sich, die Notenzeilen und die Stimmen immer explizit -mit @code{\new Staff} und @code{\new Voice} zu erzeugen.} - -Im Moment wollen wir aber zu unserem ersten Beispiel zurückkehren und -nur den @code{\score}-Befehl näher betrachten. - -Eine Partitur (@code{\score}) muss immer mit einem musikalischen Ausdruck -beginnen. Das ist letztendlich alle Musik, angefangen bei einer -einzelnen -Note bis hin zu einer riesigen Partitur mit vielen Notensystemen -(bezeichnet durch @code{GrandStaff}): - -@example -@{ - \new GrandStaff << - @var{...hier die gesamte Partitur...} - >> -@} -@end example - -@noindent -Da sich alles innerhalb der geschweiften Klammern @code{@{ ... @}} -befindet, wird es wie ein einziger musikalischer Ausdruck behandelt. - - -Ein @code{\score} auch andere Dinge enthalten, wie etwa - -@example -\score @{ - @{ c'4 a b c' @} - \layout @{ @} - \midi @{ @} - \header @{ @} -@} -@end example - -@funindex \header -@funindex \layout -@funindex \midi -@funindex header -@funindex layout -@funindex midi -@cindex header -@cindex midi -@cindex Layout -@cindex Kopfzeile - -@noindent -Wie man sieht, sind die drei Befehle @code{\header}, @code{\layout} und -@code{\midi} von spezieller Natur: Im Gegensatz zu vielen Anderen Befehlen, -die auch mit einem @code{\} beginnen, liefern sie @emph{keinen} Musikausdruck -und sind auch nicht Teil eines musikalischen Ausdrucks. Daher können sie -sowohl innerhalb eines @code{\score}-Blocks als auch außerhalb plaziert -werden. Tatsächlich werden einige dieser Befehle meist außerhalb des -@code{\score}-Blocksgesetzt, zum Beispiel findet sich der @code{\header} -sehr oft oberhalb der @code{\score}-Umgebung. Das -funktioniert genauso gut. - -Zwei bisher noch nicht aufgetauchte Befehle sind -@code{\layout @{ @}} und @code{\midi @{@}}. Wenn sie in einer -Datei vorkommen, führt dies dazu, dass Lilypond eine druckfähige PDF-Datei -bzw. eine MIDI-Datei erzeugt. Genauer beschrieben werden sie im -Benutzerhandbuch -- @ruser{Score layout} und -@ruser{Creating MIDI files}. - -@cindex Partituren, mehrfache -@cindex book-Abschnitte, implizit -@cindex implizite book-Umgebung -@funindex \book -@funindex book - -Ihr LilyPond Code kann auch mehrere @code{\score}-Blöcke enthalten. -Jeder davon wird als eigenständige Partitur interpretiert, die -allerdings alle in dieselbe Ausgabedatei plaziert weden. -Ein @code{\book}-Befehl ist nicht explizit notwendig -- er wird -implizit erzeugt. Wenn jedoch für jeden @code{\score}-Block in einer -einzigen @code{.ly}-Datei eine eigene Ausgabe-Datei erzeugt werden soll, -dann muss jeder dieser Blöcke in einen eigenen @code{\book}-Block -gesetzt werden: Jeder @code{\book}-Block erzeugt dann eine -eigene Ausgabedatei. - -Zusammenfassung: - -Jeder @code{\book}-Block erzeugt eine eigene Ausgabedatei (z.B. eine -PDF-Datei). Wenn Sie keinen derartigen Block explizit angegeben haben, -setzt LilyPond den gesamten Dateiinhalt innerhalb eines einzigen -impliziten @code{\book}-Blocks. - -Jeder @code{\score}-Block beschreibt ein eigenständiges Musikstück -innerhalb des @code{\book}-Blocks. - -@cindex Layout-Umgebung, Platzierung -@cindex Platzierung von layout-Umgebung - -Jeder @code{\layout}-Block wirkt sich auf den @code{\score}- oder -@code{\book}-Block aus, in dem er auftritt. So wirkt z.B. ein -@code{\layout}-Block innerhalb eines @code{\score}-Blocks nur auf -diesen einen Block und seinen gesamten Inhalt, ein @code{\layout}-Block -außerhalb eines @code{\score}-Blocks (und daher innerhalb des implizit -erzeugten oder explizit angegebenen @code{\book}-Blocks) jedoch auf -alle @code{\score}-Blocks innerhalb dieses @code{\book}-Blocks. - -Nähere Details finden sich im Abschnitt @ruser{Multiple scores in a book}. - -@cindex Variablen -@cindex Bezeichner - -Eine gute Möglichkeit zur Vereinfachung sind selbst definierte Variablen. -Alle Vorlagen verwenden diese Möglichkeit. - -@example -melodie = \relative c' @{ - c4 a b c -@} - -\score @{ - @{ \melodie @} -@} -@end example - -Wenn LilyPond diese Datei analysiert, nimmt es den Inhalt -von @code{melodie} (alles nach dem Gleichheitszeichen) und -fügt ihn immer dann ein, wenn ein @code{\melodie} -vorkommt. Die Namen sind frei wählbar, die Variable kann genauso -gut @code{melodie}, @code{GLOBAL}, -@code{rechteHandklavier}, oder @code{foofoobarbaz} heißen. Für mehr -Information siehe -@ref{Saving typing with variables and functions}. -Als Variablenname kann fast jeder beliebige Name benutzt werden, -allerdings dürfen nur Buchstaben vorkommen (also keine Zahlen, Unterstriche, -Sonderzeichen, etc.) und er darf nicht wie ein LilyPond-Befehl -lauten. Die genauen Einschränkungen sind beschrieben in -@ruser{File structure}. - - -@seealso -Eine vollständige Definition des Eingabeformats findet sich in -@ruser{File structure}. - - -@node Score is a (single) compound musical expression -@subsection Score is a (single) compound musical expression - -@funindex \score -@funindex score -@cindex score -@cindex Partitur -@cindex Musikstück -@cindex zusammengesetzter Musikausdruck -@cindex Musikausdruck, zusammengesetzter - - -Im vorigen Kapitel, @ref{Introduction to the LilyPond file structure}, -wurde die allgemeine Struktur einer LilyPond-Quelldatei -beschrieben. Aber anscheinend haben wir die wichtigste -Frage ausgelassen, nämlich wie man herausfindet, was nach -dem @code{\score} geschrieben werden soll. - -In Wirklichkeit ist das aber gar kein Geheimnis. Diese -Zeile ist die Antwort: - -@quotation -@emph{Eine Partitur fängt immer mit @code{\score} an, gefolgt -von einem einzelnen musikalischen Ausdruck.} -@end quotation - -@noindent -Vielleicht wollen Sie noch einmal -@ref{Music expressions explained} überfliegen. In diesem -Kapitel wurde gezeigt, wie sich große musikalische Ausdrücke -aus kleinen Teilen zusammensetzen. Noten können zu Akkorden -verbunden werden usw. Jetzt gehen wir aber in die andere Richtung -und betrachten, wie sich ein großer musikalischer Ausdruck -zerlegen lässt. - -@example -\score @{ - @{ % diese Klammer startet den großen mus. Ausdruck - \new StaffGroup << - @var{...hier eine ganze Wagner-Oper einfügen...} - >> - @} % diese Klammer beendet den Ausdruck - \layout @{ @} -@} -@end example - -Eine Wagner-Oper ist mindestens doppelt so lang wie dieses Handbuch, -beschränken wir uns also auf einen Sänger und Klavier. Wir brauchen -keine ganze Orchesterpartitur, infolgedessen können wir die Systemgruppe -(StaffGroup) auslassen, aber wir brauchen einen Sänger und ein Klavier. - -@example -\score @{ - @{ - << - \new Staff = "Sänger" << - >> - \new PianoStaff = "Klavier" << - >> - >> - @} - \layout @{ @} -@} -@end example - -Zur Erinnerung: mit @code{<<} und @code{>>} werden Noten gleichzeitig -gesetzt; wir wollen ja auch Klavier- und Sängerstimme gleichzeitig -und nicht hintereinander haben. Bei genauerem Hinsehen fällt auf, dass -die @code{<< ... >>}-Konstruktion für die Notenzeile des Sängers eigentlich -nicht unbedingt nötig wäre, da sie ja nur einen (sequenzielle) musikalischen -Ausdruck enthält, nämlich alle Noten des Sängers hintereinander. Daher -könnte an sich auch einfach ein @code{@{...@}} benutzt werden. Die -Spitzklammern sind allerdings notwendig, sobald die Notenzeile mehrere -parallelle Ausdrücke -- wie etwa zwei parallele Stimmen oder eine Stimme -mit zugehörigem Text -- enthält. -Wir werden die Musik später in das Beispiel einfügen, im Moment begnügen -wir uns mit einigen Platzhalter-Noten und -Texten. - -@lilypond[verbatim,quote,ragged-right] -\score { - << - \new Staff = "Sänger" << - \new Voice = "Singstimme" { c'1 } - \addlyrics { And } - >> - \new PianoStaff = "Klavier" << - \new Staff = "oben" { } - \new Staff = "unten" { } - >> - >> - \layout { } -} -@end lilypond - -Jetzt haben wir viel mehr Details. Wir haben ein System (engl. staff) -für einen Sänger, in dem sich wieder eine Stimme (engl. voice) -befindet. @code{Voice} bedeutet für LilyPond eine Stimme (sowohl -gesungen als auch gespielt) und evtl. zusätzlich einen Text. Zusätzlich -werden zwei Notensysteme für das Klavier mit dem Befehl @code{\new -PianoStaff} gesetzt. @code{PianoStaff} bezeichnet die Piano-Umgebung (etwa -durchgehende Taktstriche und die geschweifte Klammer am Anfang), in der -dann wiederum zwei eigene Systeme ("oben" für die rechte Hand und -"unten" -für die linke) erstellt werden. - -Jetzt könnte man in diese Umgebung Noten einfügen. Innerhalb der -geschweiften Klammern neben @code{\new Voice = "Singstimme"} -könnte man - -@example -\relative c'' @{ - r4 d8\noBeam g, c4 r -@} -@end example - -@noindent -schreiben. Aber wenn man seine Datei so direkt schreibt, wird -der @code{\score}-Abschnitt sehr lang und es wird ziemlich schwer zu -verstehen, wie alles zusammenhängt. Darum bietet es sich an, Bezeichner -(oder Variablen) zu verwenden. - -@lilypond[verbatim,quote,ragged-right] -melodie = \relative c'' { r4 d8\noBeam g, c4 r } -text = \lyricmode { And God said, } -oben = \relative c'' { 2~ } -unten = \relative c { b2 e2 } - -\score { - << - \new Staff = "Sänger" << - \new Voice = "Singstimme" { \melodie } - \addlyrics { \text } - >> - \new PianoStaff = "Klavier" << - \new Staff = "oben" { \oben } - \new Staff = "unten" { - \clef "bass" - \unten - } - >> - >> - \layout { } -} -@end lilypond - -Achten Sie auf den Unterschied zwischen Noten, die mit @code{\relative} -oder direkt in einem musikalischen Ausruck eingegeben werden, und -dem Text des Lieds, der innerhalb @code{\lyricmode} angegeben -werden muss. Diese Unterscheidung ist für LilyPond essentiell, -um zu entscheiden, ob der folgende Inhalt als Musik oder Text -interpretiert werden soll. Wie könnte LilyPond sonst entscheiden, -ob @code{@{a b c@}} die drei Noten a, b und c darstellen soll oder -den Text eines Lieds über das Alphabet! - -Beim Schreiben (oder Lesen) einer @code{\score}-Umgebung -sollte man langsam und sorgfältig vorgehen. Am besten fängt -man mit dem größten Gebilde an und definiert dann die darin -enthaltenen kleineren der Reihe nach. Es hilft auch, sehr -genau mit den Einzügen zu sein, so dass jede Zeile, die -der gleichen Ebene angehört, wirklich horizontal an der -gleichen Stelle beginnt. - - -@seealso -Benutzerhandbuch: @ruser{Structure of a score}. - - -@node Nesting music expressions -@subsection Nesting music expressions - -@cindex Notenzeilen, temporäre -@cindex Ossia -@cindex temporäre Notenzeilen - -Notenzeilen (die @q{Staff}-Kontexte) müssen nicht unbedingt gleich -zu Beginn erzeugt werden -- sie können auch zu einem späteren -Zeitpunkt eingeführt weden. Das ist vor allem nützlichm um -@rglosnamed{ossia,Ossias} zu erzeugen. Hier folgt ein kures Beispiel, -wie eine zusätzliche temporäre Notenzeile für nur drei Noten erzeugt -werden kann: - -@lilypond[verbatim,quote,ragged-right] -\new Staff { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff { - f8 f c - } - >> - r4 | - } -} -@end lilypond - -@noindent -Wie man sieht, ist die Größe des Notenschlüssels dieselbe, wie sie -auch bei einer Schlüsseländerung auftritt -- etwas kleiner als -der Schlüssel am Beginn einer Notenzeile. Dies ist normal für -Notenschlüssel, die innerhalb einer Notenzeile gesetzt werden. - -@cindex Notenzeile, Positionierung -@cindex Positionierung einer Notenzeile - -Der Ossia-Abschnitt kann auch oberhalb der Hauptnotenzeile -gesetzt werden: - -@lilypond[verbatim,quote,ragged-right] -\new Staff = "Hauptzeile" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"Hauptzeile" } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Dieses Beispiel benutzt den @code{\with}-Befehl, der später noch -genauer erklärt wird. Damit kann das Standardverhalten einer -einzelnen Notenzeile geändert werden: Hier wird einfach angegeben, -dass die neue Notenzeile oberhalb der bereits existierenden Zeile -mit Namen @qq{Hauptzeile} plaziert werden soll, anstatt -standardmäßig unterhalb. - - -@seealso -Ossia werden oft ohne Notenschlüssel und Taktangabe gedruck, meist -auch etwas kleiner als die anderen Notenzeilen. Dies ist natürlich -auch in LilyPond möglich, benötigt aber Befehle, die bisher noch -nicht vorgestellt wurden. Siehe @ref{Size of objects} -und @ruser{Ossia staves}. - - -@node On the un-nestedness of brackets and ties -@subsection On the un-nestedness of brackets and ties - -@cindex Klammern, geschachtelt -@cindex Schachtelung von Klammern -@cindex Klammer-Typen - -Sie haben bisher zahlreiche verschiedene Arten von Klammern -beim Schreiben von Musik mit LilyPond kennengelernt. Diese -folgen verschiedenen Regeln, die zu Beginn vielleicht -verwirrend wirken. Bevor die genauen Regeln vorgestellt werden, -wollen wir die diversen Klammerarten kurz rekapitulieren: - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .3 .7 -@headitem Klammerart - @tab Funktion -@item @code{@{ .. @}} - @tab Umschließt ein sequenzielles Musiksegment -@item @code{< .. >} - @tab Umschließt die Noten eines Akkords -@item @code{<< .. >>} - @tab Umschließt parallele Musikausdrücke -@item @code{( .. )} - @tab Markiert den Beginn und das Ende eines Haltebogens -@item @code{\( .. \)} - @tab Markiert den Beginn und das Ende eines Phasierungsbogens -@item @code{[ .. ]} - @tab Markiert den Beginn und das Ende eines manuell erzeugten Balkens -@end multitable - -Zusätzlich sollten vielleicht noch einige weiter Konstruktionen -erwähnt werden, die Noten auf irgendeine Art und Weise verbinden: -Haltebögen (durch eine Tilde @code{~} markiert), -Triolen (als @code{\times x/y @{..@}} geschrieben) und -Vorschlagnoten (als @code{\grace@{..@}} notiert). - -Außerhalb von LilyPond fordert die übliche Benutzung von -Klammern, dass die entsprechenden Arten korrekt verschachtelt -werden, wie z.B. in @code{<< [ @{ ( .. ) @} ] >>}. Die -schließenden Klammern kommen dabei in der umgekehrten Reihenfolge -wie die öffnenden Klammern vor. Dies ist auch in LilyPond -ein @strong{Muss} für die drei Klammerarten, die in obiger -Tabelle mit dem Wort @q{Umschließt} beschrieben werden -- sie -müssen korrekt geschachtelt werden. -Die restlichen Klammerarten (durch @q{Markiert} beschrieben), -die Haltebögen und die Triolen brauchen jedoch mit den -anderen Klammerarten @strong{nicht} unbedingt korrekt -geschachtelt werden. Tatsächlich sind sie auch keine Klammern -in dem Sinn, dass sie etwas umschließen, sondern viel mehr -Indikatoren, an welcher Stelle ein bestimmtes musikalisches -Objekt beginnt oder endet. - -So kann also z.B. einen Phrasierungsbogen vor einem manuellen -Balken beginn, jedoch schon vor dem Ende des Balkens enden. -Dies mag zwar musikalisch wenig Sinn ergeben, ist aber in LilyPond -auch möglich: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] - { g8\( a b[ c b\) a] } -@end lilypond - -Im Allgemeinen können die verschiedenen Klammerarten, Haltebögen, -Triolen und Vorschlagnoten beliebig kombiniert werden. -Das folgende Beispiel zeigt einen Balken, der in eine Triole reicht -(Zeile 1), eine Bindebogen, der ebenfalls in eine Triole -reicht (Zeile 2), einen Balken und einen Bindeboden in eine Triole, -ein Haltebogen, der über zwei Triolen läuft, sowie einen -Phrasierungsbogen, der in einer Triole beginnt (Zeilen 3 und 4). - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - r16[ g16 \times 2/3 {r16 e'8] } - g16( a \times 2/3 {b d) e' } - g8[( a \times 2/3 {b d') e'~]} - \times 4/5 {e'32\( a b d' e'} a'4.\) -} -@end lilypond - - -@node Voices contain music -@section Voices contain music - -Sänger brauchen Stimmen zum Singen, und LilyPond braucht sie auch: -in der Tat sind alle Noten für alle Instrumente in einer Partitur -innerhalb von Stimmen gesetzt. Die Stimme ist das grundlegendste Prinzip -von LilyPond. - -@menu -* I'm hearing Voices:: -* Explicitly instantiating voices:: -* Voices and vocals:: -@end menu - -@node I'm hearing Voices -@subsection I'm hearing Voices - -@cindex Polyphonie -@cindex Ebenen -@cindex mehrere Stimmen -@cindex Stimmen, mehrere -@cindex Voice context -@cindex context, Voice -@cindex Kontext, Stimme -@cindex Stimmenkontext -@cindex gleichzeitige Noten -@cindex Stimmen versus Akkorde -@cindex Akkorde versus Stimmen -@cindex Noten gleichzeitig - -Die grundegendsten und innersten Ebenen ein einer LilyPond-Partitur -werden @qq{Voice context} (Stimmenkontext) oder auch nur @qq{Voice} -(Stimme) genannt. Stimmen werden in anderen Notationsprogrammen -manchmal auch als @qq{layer} (Ebene) bezeichnet. - -Tatsächlich ist die Stimmenebene die einzige, die wirklich Noten -enthalten kann. Wenn kein Stimmenkontext explizit erstellt wird, -wird er automatisch erstellt, wie am Anfang dieses Kapitels -gezeigt. Manche Instrumente wie etwa die Oboe können nur eine -Note gleichzeitig spielen. Noten für solche Instrumente sind -monophon und brauchen nur eine einzige Stimme. Instrumente, die -mehrere Noten gleichzeitig spielen können, wie das Klavier, brauchen -dagegeben oft mehrere Stimmen, um die verschiedenen gleichzeitig -erklingenden Noten mit oft unterschiedlichen Rhythmen darstellen -zu können. - -Eine einzelne Stimme kann natürlich auch vielen Noten in einem Akkord -enhalten -- wann also braucht man dann mehrere Stimmen? Schauen wir -uns zuerst dieses Beispiel mit vier Akkorden an: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -\key g \major -4 -@end lilypond - -Das kann ausgedrückt werden, indem man die einfachen spitzen Klammern -@code{< ... >} benützt, um Akkorde anzuzeigen. Hierfür braucht man -nur eine Stimme. Aber gesetzt der Fall das Fis sollte eigentlich -eine Achtelnote sein, gefolgt von einer Achtelnote G (als Durchgangsnote -hin zum A)? Hier haben wir also zwei Noten, die zur gleichen Zeit -beginnen, aber unterschiedliche Dauern haben: die Viertelnote D und die -Achtelnote Fis. Wie können sie notiert werden? Als Akkord kann man sie -nicht schreiben, weil alle Noten in einem Akkord die gleiche Länge besitzen -müssen. Sie können auch nicht als aufeinanderfolgende Noten geschrieben -werden, denn sie beginnen ja zur selben Zeit. In diesem Fall also brauchen -wir zwei Stimmen. - -Wie aber wird das in der LilyPond-Syntax ausgedrückt? - -@funindex << \\ >> -@funindex \\ - -Die einfachste Art, Fragmente mit mehr als einer Stimme auf einem System -zu notieren, ist, die Stimmen nacheinander (jeweils mit den Klammern -@code{@{ ... @}}) zu schreiben und dann mit den spitzen Klammern -(@code{<<...>>}) simultan zu kombinieren. Die beiden Fragmente müssen -zusätzlich noch mit zwei Backslash-Zeichen (@code{\\}) voneinander -getrennt werden, damit sie als zwei unterschiedliche Stimmen erkannt -werden. Ohne diese Trenner würden sie als eine einzige Stimme notiert -werden. Diese Technik ist besonders dann angebracht, wenn es sich bei -den Noten um hauptsächlich homophone Musik handelt, in der hier und da -polyphone Stellen vorkommen. - -So sieht es aus, wenn die Akkorde in zwei Stimmen aufgeteilt werden -und zur Durchgangsnote noch ein Bogen hinzugefügt wird: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key g \major -% Voice "1" Voice "2" -<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> | -@end lilypond - -Beachte, dass die Hälse der zweiten Stimme nun nach unten zeigen. - -Hier ein anderes Beispiel: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -% Voice "1" Voice "2" -<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | -<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | -<< { a2. r4 } \\ { fis2. s4 } >> | -@end lilypond - -Es ist nicht notwendig, für jeden Takt eine eigene -@code{<< \\ >>}-Konstruktion zu benutzen. Bei Musik mit nur wenigen -Noten pro Takt kann es die Quelldatei besser lesbar machen, aber -wenn in einem Takt viele Noten vorkommen, kann man die gesamten Stimmen -separat schreiben, wie hier: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -<< { - % Voice "1" - r4 g g4. a8 | - bes4 bes c bes | - a2. r4 | -} \\ { - % Voice "2" - d,2 d4 g | - g4 g g8( a) g4 | - fis2. s4 | -} >> -@end lilypond - -Dieses Beispiel hat nur zwei Stimmen, aber die gleiche Konstruktion kann -angewendet werden, wenn man drei oder mehr Stimmen hat, indem man weitere -Backslash-Trenner hinzufügt. - -Die Stimmenkontexte tragen die Namen @code{"1"}, @code{"2"} usw. In jedem -dieser Kontexte wird die vertikale Ausrichtung von Hälsen, Bögen, Dynamik-Zeichen -usw. entsprechend ausgerichtet. - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - % Main voice - c16 d e f - % Voice "1" Voice "2" Voice "3" - << { g4 f e } \\ { r8 e4 d c8 ~ } >> | - << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | -} -@end lilypond - -Diese Stimmen sind alle getrennt von der Hauptstimme, die die Noten -außerhalb der @code{<< .. >>}-Konstruktion beinhaltet. Lassen wir es -uns die @emph{simultane Konstruktion} nennen. Bindebögen und Legatobögen -können nur Noten in der selben Stimmen miteinander verbinden und können -also somit nicht aus der simultanen Konstruktion hinausreichen. Umgekehrt -gilt, dass parallele Stimmen aus eigenen simultanen Konstruktionen auf -dem gleichen Notensystem die gleiche Stimme sind. Auch andere, mit dem -Stimmenkontext verknüpfte Eigenschaften erstrecken sich auf alle -simultanen Konstrukte. Hier das gleiche Beispiel, aber mit unterschiedlichen Farben für die Notenköpfe der unterschiedlichen Stimmen. -Beachten Sie, dass Änderungen in einer Stimme sich nicht auf die anderen -Stimmen erstrecken, aber sie sind weiterhin in der selben Stimme vorhanden, -auch noch später im Stück. Beachten Sie auch, dass übergebundene Noten -über die gleiche Stimme in zwei Konstrukten verteilt werden können, wie -hier an der blauen Dreieckstimme gezeigt. - -@lilypond[quote,verbatim] -\new Staff \relative c' { - % Main voice - c16 d e f - << % Bar 1 - { - \voiceOneStyle - g4 f e - } - \\ - { - \voiceTwoStyle - r8 e4 d c8 ~ - } - >> - << % Bar 2 - % Voice 1 continues - { d2 e2 } - \\ - % Voice 2 continues - { c8 b16 a b8 g ~ g2 } - \\ - { - \voiceThreeStyle - s4 b4 c2 - } - >> -} -@end lilypond - -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -Die Befehle @code{\voiceXXXStyle} sind vor allem dazu da, um in -pädagogischen Dokumenten wie diesem hier angewandt zu werden. -Sie verändern die Farbe des Notenkopfes, des Halses und des Balkens, und -zusätzlich die Form des Notenkopfes, damit die einzelnen Stimmen -einfach auseinander gehalten werden können. Die erste Stimme ist als -rote Raute definiert, die zweite Stimme als blaue Dreiecke, die dritte -Stimme als grüne Kreise mit Kreuz und die vierte Stimme (die hier nicht -benutzt wird) hat dunkelrote Kreuze. @code{\voiceNeutralStyle} (hier auch -nicht benutzt) macht diese Änderungen rückgängig. Später soll gezeigt -werden, wie Befehle wie diese vom Benutzer selber erstellt werden -können. Siehe auch @ref{Visibility and color of objects} und -@ref{Using variables for tweaks}. - -@cindex Polyphonie und relativer Notationsmodus -@cindex relativer Notationsmodus und Polyphonie - -Polyphonie ändert nicht die Verhältnisse der Noten innerhalb eines -@code{\relative @{ @}}-Blocks. Jede Note wird weiterhin relativ zu -der vorherigen Note errechnet, oder relativ zur ersten Note des vorigen -Akkords. So ist etwa hier - -@example -\relative c' @{ NoteA << < NoteB NoteC > \\ NoteD >> NoteE @} -@end example - -@noindent -@code{NoteB} bezüglich @code{NoteA} @* -@code{NoteC} bezüglich @code{NoteB}, nicht @code{noteA}; @* -@code{NoteD} bezüglich @code{NoteB}, nicht @code{NoteA} oder -@code{NoteC}; @* -@code{NoteE} bezüglich @code{NoteD}, nicht @code{NoteA} errechnet. - -Eine andere Möglichkeit ist, den @code{\relative}-Befehl vor jede -Stimme zu stellen. Das bietet sich an, wenn die Stimmen weit voneinander -entfernt sind. - -@example -\relative c' @{ NoteA ... @} -<< - \relative c'' @{ < NoteB NoteC > ... @} -\\ - \relative g' @{ NoteD ... @} ->> -\relative c' @{ NoteE ... @} -@end example - -Zum Schluss wollen wir die Stimmen in einem etwas komplizierteren Stück -analysieren. Hier die Noten der ersten zwei Takte von Chopins -@notation{Deux Nocturnes}, Op. 32. Dieses Beispiel soll später in diesem -und dem nächsten Kapitel benutzt werden, um verschiedene Techniken, -Notation zu erstellen, zu demonstrieren. Ignorieren Sie deshalb an diesem -Punkt alles in folgendem Code, das Ihnen seltsam vorkommt, und konzentrieren -Sie sich auf die Noten und die Stimmen. Die komplizierten Dinge werden -in späteren Abschnitten erklärt werden. - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % No voice three - \\ % Voice four - { - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - -Die Richtung der Hälse wird oft benutzt, um anzuzeigen, dass zwei -gleichzeitige Melodien sich fortsetzen. Hier zeigen die Hälse aller -oberen Noten nach oben und die Hälse aller unteren Noten nach unten. -Das ist der erste Anhaltspunkt, dass mehr als eine Stimme benötigt -wird. - -Aber die wirkliche Notwendigkeit für mehrere Stimmen tritt erst -dann auf, wenn unterschiedliche Noten gleichzeitig erklingen, aber -unterschiedliche Dauern besitzen. Schauen Sie sich die Noten -auf dem dritten Schlag im ersten Takt an. Das As ist eine punktierte -Viertel, das F ist eine Viertel und das Des eine Halbe. Sie können -nicht als Akkord geschrieben werden, denn alle Noten in einem Akkord -besitzen die gleiche Dauer. Sie können aber auch nicht nacheinander -geschrieben werden, denn sie beginnen auf der gleichen Taktzeit. Dieser -Taktabschnitt benötigt drei Stimmen, und normalerweise schreibt man -drei Stimmen für den ganzen Takt, wie im Beispiel unten zu sehen ist; -hier sind unterschiedliche Köpfe und Farben für die verschiedenen Stimmen -eingesetzt. Nocheinmal: der Quellcode für dieses Beispiel wird später -erklärt werden, deshalb ignorieren Sie alles, was Sie hier nicht -verstehen können. - -@c The following should appear as music without code -@c The three voice styles should be defined in -init -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { % Voice one - \voiceOneStyle - c2 aes4. bes8 - } - \\ % Voice two - { \voiceTwoStyle - aes2 f4 fes - } - \\ % No Voice three (we want stems down) - \\ % Voice four - { \voiceThreeStyle - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - -Versuchen wir also, diese Musik selber zu notieren. Wie wir sehen -werden, beinhaltet das einige Schwierigkeiten. Fangen wir an, wie -wir es gelernt haben, indem wir mit der @code{<< \\ >>}-Konstruktion -die drei Stimmen des ersten Taktes notieren: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } - >> - 1 -} -@end lilypond - -@cindex Hals nach unten -@cindex Hals nach oben -@cindex Notenhals, Richtung -@cindex Richtung des Notenhalses -@cindex Notenhalsrichtung -@cindex Stimmen und Notenhalsrichtung -@cindex Notenhalsrichtung in Stimmen - -Die Richtung des Notenhalses wird automatisch zugewiesen; die ungeraden -Stimmen tragen Hälse nach oben, die gerade Hälse nach unten. Die Hälse -für die Stimmen 1 und 2 stimmen, aber die Hälse in der dritten Stimme -sollen in diesem Beispiel eigentlich nach unten zeigen. Wir können das -korrigieren, indem wir die dritte Stimme einfach auslassen und die -Noten in die vierte Stimme verschieben: - -@c KEEP LY -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % erste Stimme - { c2 aes4. bes8 } - \\ % zweite Stimme - { aes2 f4 fes } - \\ % Stimme drei auslassen - \\ % vierte Stimme - { 2 des2 } - >> | - 1 | -} -@end lilypond - -@noindent -Wie zu sehen ist, ändert das die Richtung der Hälse, aber zeigt ein -anderes Problem auf, auf das man manchmal bei mehreren Stimmen stößt: -Die Hälse einer Stimme können mit den Hälsen anderer Stimmen kollidieren. -LilyPond erlaubt Noten in verschiedenen Stimmen sich auf der gleichen -vertikalen Position zu befinden, wenn die Hälse in entgegengesetzte -Richtungen zeigen, und positioniert die dritte und vierte Stimme dann -so, dass Zusammenstöße möglichst vermieden werden. Das funktioniert -gewöhnlich recht gut, aber in diesem Beispiel sind die Noten der untersten -Stimme eindeutig standardmäßig schlecht positioniert. LilyPond bietet -verschiedene Möglichkeiten, die horizontale Position von Noten -anzupassen. Wir sind aber noch nicht so weit, dass wir diese Funktionen -anwenden könnten. Darum heben wir uns das Problem für einen späteren Abschnitt auf; siehe @code{force-hshift}-Eigenschaft in @ref{Fixing -overlapping notation}. - - -@seealso -Notationsreferenz: @ruser{Multiple voices}. - - -@node Explicitly instantiating voices -@subsection Explicitly instantiating voices - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceTwo -@funindex voiceTwo -@funindex \voiceThree -@funindex voiceThree -@funindex \voiceFour -@funindex voiceFour -@funindex \oneVoice -@funindex oneVoice -@funindex \new Voice -@cindex Voice context, erstellen von -@cindex Stimmenkontexte, erstellen von - -Voice-Kontexte können auch manuell innerhalb -eines @code{<< >>}-Abschnittes initiiert werden. Mit den Befehlen -@code{\voiceOne} bis hin zu @code{\voiceFour} kann jeder Stimme -entsprechendes Verhalten von vertikaler Verschiebung und Richtung -von Hälsen und anderen Objekten hinzugefügt werden. In längeren -Partituren können die Stimmen damit besser auseinander gehalten -werden. - -Die @code{<< \\ >>}-Konstruktion, die wir im vorigen Abschnitt -verwendet haben: - -@example -\new Staff @{ - \relative c' @{ - << @{ e4 f g a @} \\ @{ c,4 d e f @} >> - @} -@} -@end example - -@noindent -ist identisch mit - -@example -\new Staff << - \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} - \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} ->> -@end example - -Beide würden folgendes Notenbild erzeugen: - -@c The following example should not display the code -@lilypond[ragged-right,quote] -\new Staff << - \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } - \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } ->> -@end lilypond - -@cindex Stimmen, mehrere zu einer zusammenführen -@cindex eine Stimme wiederherstellen - -Der @code{\voiceXXX}-Befehl setzt die Richtung von Hälsen, -Bögen, Artikulationszeichen, Text, Punktierungen und Fingersätzen. -@code{\voiceOne} und @code{\voiceThree} lassen diese Objekte -nach oben zeigen, @code{\voiceTwo} und @code{\voiceFour} -dagegen lassen sie abwärts zeigen. Diese Befehle erzeugen eine -horizontale Verschiebung, wenn es erforderlich ist, um Zusammenstöße -zu vermeiden. Der Befehl -@code{\oneVoice} stellt wieder auf das normale Verhalten um. - -Schauen wir uns in einigen einfachen Beispielen an, was genau -die Befehle @code{\oneVoice}, @code{\voiceOne} und @code{voiceTwo} -mit Text, Bögen und Dynamikbezeichnung anstellen: - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - % Default behavior or behavior after \oneVoice - c d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceOne - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceTwo - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -Schauen wir und nun drei unterschiedliche Arten an, den gleichen -Abschnitt polyphoner Musik zu notieren, jede Art mit ihren -Vorteilen in unterschiedlichen Situationen. Wir benutzen dabei -das Beispiel vom vorherigen Abschnitt. - -Ein Ausdruck, der direkt innerhalb einer @code{<< >>}-Umgebung -auftritt, gehört der Hauptstimme an. Das ist nützlich, wenn zusätzliche -Stimme auftreten, während die Hauptstimme sich fortsetzt. Hier also -eine bessere Version des Beispiels aus dem vorigen Abschnitt. Die -farbigen Kreuz-Notenköpfe zeigen, dass die Hauptstimme sich jetzt in -einem einzigen Stimmen (@code{voice})-Kontext befindet. Somit kann ein -Phrasierungsbogen ober sie gesetzt werden. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - \voiceOneStyle - % The following notes are monophonic - c16^( d e f - % Start simultaneous section of three voices - << - % Continue the main voice in parallel - { g4 f e | d2 e2) } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s2. | s4 b4 c2 - } - >> -} -@end lilypond - -@cindex Verschachteln von musikalischen Ausdrücken -@cindex Verschachteln von gleichzeitigen Ausdrücken -@cindex Ausdrücke, Verschachteln von -@cindex Stimmen, temporär -@cindex Stimmen, Verschachteln von -@cindex Verschachteln von Stimmen -@cindex temporäre Stimmen - -Tiefer verschachtelte polyphone Konstrukte sind möglich, und -wenn eine Stimme nur kurz auftaucht, kann das der bessere Weg -sein, Noten zu setzen: - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - c16^( d e f - << - { g4 f e | d2 e2) } - \new Voice { - \voiceTwo - r8 e4 d c8 ~ | - << - {c8 b16 a b8 g ~ g2} - \new Voice { - \voiceThree - s4 b4 c2 - } - >> - } - >> -} -@end lilypond - -@cindex Platzhalternoten -@cindex unsichtbare Noten -@cindex Noten verstecken - -Diese Methode, neue Stimmen kurzzeitig zu verschachteln, bietet sich -an, wenn nur sehr kleine Abschnitte polyphonisch gesetzt sind. Wenn -aber die ganze Partitur polyphon ist, ist es meistens klarer, direkt -unterschiedliche Stimmen über die gesamte Partitur hinweg einzusetzen. -Hierbei kann man mit unsichtbaren Noten dann die Stellen überspringen, -an denen die Stimme nicht auftaucht, wie etwa hier: - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' << - % Initiate first voice - \new Voice { - \voiceOne - c16^( d e f g4 f e | d2 e2) | - } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s1 | s4 b4 c2 | - } ->> -@end lilypond - -@subsubheading Note columns - -@cindex Notenkolumne -@cindex Notenkollision -@cindex Zusammenstöße von Noten -@cindex Kollisionen von Noten -@cindex Vertikale Position -@cindex shift-Befehle -@cindex Verschieben von Noten -@funindex \shiftOff -@funindex \shiftOn -@funindex \shiftOnn -@funindex \shiftOnnn -@funindex shiftOff -@funindex shiftOn -@funindex shiftOnn -@funindex shiftOnnn - -Dicht notierte Noten in einem Akkord, oder Noten auf der gleichen -Taktzeit aber in unterschiedlichen Stimmen, werden in zwei, manchmal -auch mehreren Kolumnen getzt, um die Noten am Überschneiden zu -hindern. Wir bezeichnen sie als Notenkolumnen. Jede Stimme hat -eine eigene Kolumne, und ein stimmenabhängiger Verschiebunsbefehl (engl. -shift) wird eingesetzt, wenn eine Kollision auftreten könnte. -Das zeigt das Beispiel oben. Im zweiten Takt wird das C der zweiten -Stimme nach rechts verschoben, relativ gesehen zum D der ersten Stimme, -und im letzten Akkord wird das C der dritten Stimme auch nach -rechts verschoben im Verhältnis zu den anderen Stimmen. - -Die Befehle @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} und -@code{\shiftOff} bestimmen den Grad, zu dem Noten und Akkorde -verschoben werden sollen, wenn sich sonst eine Kollision nicht -vermeiden ließe. Die Standardeinstellung ist, dass die äußeren -Stimmen (also normalerweise Stimme 1 und 2) @code{\shiftOff} -eingestellt haben, während für die inneren Stimmen (3 und 4) -@code{\shiftOn} eingeschaltet ist. Wenn eine Verschiebung -auftritt, werden Stimmen 1 und 3 nach rechts und Stimmen 2 und 4 -nach links verschoben. - -@code{\shiftOnn} und @code{\shiftOnnn} definieren weitere -Verschiebungsebenen, die man kurzzeitig anwählen kann, um -Zusammenstöße in komplexen Situationen aufzulösen, siehe auch -@ref{Real music example}. - -Eine Notenkolumne kann nur eine Note (oder einen Akkord) von -einer Stimme mit Hälsen nach oben und eine Note (oder einen -Akkord) von einer Stimme mit Hälsen nach unten tragen. Wenn -Noten von zwei Stimmen mit den Hälsen in die gleiche Richtung -an der selben Stelle auftreten und in beiden Stimmen ist -keine Verschiebung oder die gleiche Verschiebungsebene -definiert, wird die Fehlermeldung -@qq{zu viele kollidierende Notenspalten werden ignoriert} -ausgegeben. - - -@seealso -Notationsreferenz: @ruser{Multiple voices}. - - -@node Voices and vocals -@subsection Voices and vocals - -Die Notation von Vokalmusik ihre eigene Schwierigkeit, nämlich -die Kombination von zwei Ausdrücken: den Noten und dem Text. -Achtung: Der Gesangstext wird auf Englisch @qq{lyrics} genannt. - - -@funindex \new Lyrics -@funindex \lyricsto -@funindex lyricsto -@funindex Lyrics -@cindex Lyrics context, erstellen -@cindex Gesangtext, Verbindung mit Noten - -Wir haben schon den @code{\addlyrics@{@}}-Befehl betrachtet, -mit dem einfache Partituren gut erstellt werden können. -Diese Methode ist jedoch recht eingeschränkt. Wenn der Notensatz -komplexer wird, muss der Gesangstext mit einem neuen -@code{Lyrics}-Kontext begonnen werden (mit dem Befehl -@code{\new Lyrics}) und durch den Befehl @code{\lyricsto@{@}} -mit einer bestimmten Stimme verknüpft werden, indem die -Bezeichnung der Stimme benutzt wird. - -@lilypond[quote,verbatim,fragment] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - \new Lyrics \lyricsto "one" { - No more let sins and sor -- rows grow. - } ->> -@end lilypond - -Beachten Sie, dass der Notentext nur mit einem @code{Voice}-Kontext -verknüpft werden kann, nicht mit einem @code{Staff}-Kontext. -In diesem Fall also müssen Sie ein System (@code{Staff}) und -eine Stimme (@code{Voice}) explizit erstellen, damit alles -funktioniert. - -@cindex Gesangstext und Balken -@cindex Text und Balken -@cindex Balken und Text -@funindex \autoBeamOff -@funindex autoBeamOff - -Die automatischen Balken, die LilyPond in der Standardeinstellung -setzt, eignen sich sehr gut für instrumentale Musik, aber nicht -so gut für Musik mit Text, wo man entweder gar keine Balken -benutzt oder sie einsetzt, um Melismen zu verdeutlichen. -Im Beispiel oben wird deshalb der Befehl @code{\autoBeamOff} -eingesetzt um die automatischen Balken (engl. beam) auszuschalten. - -@funindex \new ChoirStaff -@funindex \lyricmode -@funindex ChoirStaff -@funindex lyricmode -@cindex Vokalpartitur, Aufbau -@cindex Chorpartitur, Aufbau - -Wir wollen das frühere Beispiel von @notation{Judas Maccabæus} -benutzen, um diese flexiblere Technik für Gesangstexte -zu illustrieren. Das Beispiel wurde so umgeformt, dass jetzt -Variablen eingesetzt werden, um den Text und die Noten -von der Partiturstruktur zu trennen. Es wurde zusätzlich -eine Chorpartiturklammer hinzugefügt. Der Gesangtext muss mit -@code{\lyricmode} eingegeben werden, damit er als Text und -nicht als Noten interpretiert werden kann. - -@lilypond[quote,verbatim] -global = { \time 6/8 \partial 8 \key f \major} -SopOneMusic = \relative c'' { - c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } -SopTwoMusic = \relative c' { - r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' } -SopOneLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, __ } -SopTwoLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, } - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "SopOne" { - \global - \SopOneMusic - } - \new Lyrics \lyricsto "SopOne" { - \SopOneLyrics - } - >> - \new Staff << - \new Voice = "SopTwo" { - \global - \SopTwoMusic - } - \new Lyrics \lyricsto "SopTwo" { - \SopTwoLyrics - } - >> - >> -} -@end lilypond - -Dies ist die Grundstruktur für alle Chorpartituren. Mehr -Systeme können hinzugefügt werden, wenn sie gebraucht werden, mehr -Stimmen können zu jedem System hinzugefügt werden, mehr -Strophen können zum Text hinzugefügt werden, und schließlich -können die Variablen schnell in eine eigene Datei verschoben -werden, wenn sie zu lang werden sollten. - -@cindex Choralnotation -@cindex Hymnus-Notation -@cindex SATB-Partitur -@cindex mehrere Strophen -@cindex Strophen, mehrere -@cindex Choral mit mehreren Strophen - -Hier ein Beispiel der ersten Zeile eines Chorals mit vier -Strophen für gemischten Chor. In diesem Fall ist der Text -für alle vier Stimmen identisch. Beachten Sie, wie die -Variablen eingesetzt werden, um Inhalt (Noten und Text) und Form -(die Partitur) voneinander zu trennen. Eine Variable wurde -eingesetzt, um die Elemente, die auf beiden Systemen auftauchen, -aufzunehmen, nämlich Taktart und Tonart. Solch eine -Variable wird oft auch mit @qq{global} bezeichnet. - -@lilypond[quote,verbatim] -TimeKey = { \time 4/4 \partial 4 \key c \major} -SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyricmode { - E -- | ter -- nal fa -- ther, | strong to save, } -VerseTwo = \lyricmode { - O | Christ, whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { - O | Ho -- ly Spi -- rit, | who didst brood } -VerseFour = \lyricmode { - O | Tri -- ni -- ty of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Sop" { \VerseOne } - \new Lyrics \lyricsto "Sop" { \VerseTwo } - \new Lyrics \lyricsto "Sop" { \VerseThree } - \new Lyrics \lyricsto "Sop" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - -@cindex Strophe und Refrain -@cindex Refrain - -Dieser Abschnitt schließt mit einem Beispiel, das eine Solo-Strophe -mit anschließendem zweistimmigem Refrain auf zwei Systemen zeigt. -Die Positionierung des einstimmigen Abschnitss und der mehrstimmigen -Stelle ist etwas kompliziert; es braucht etwas Aufmerksamkeit, -um der Erklärung folgen zu können. - -Beginnen wir mit einer @code{score}-Umgebung, in der eine -Chorpartitur (@code{ChoirStaff}) gesetzt wird. Die Partitur soll -schließlich mit der eckigen Klammer beginnen. -Normalerweise bräuchten wir spitze Klammern im Quelltext -nach dem @code{\new ChoirStaff}, damit die Systeme paralell -gesetzt werden, aber hier wollen wir diese Parallelsierung -ja erst nach dem Solo. Also benutzen wir geschweifte Klammern. -Innerhalb der Chorpartitur erstellen wir zuerst das System, -das die Strophe enthält. Es braucht Noten und Text parallel, -also setzen wir hier die spitzen Klammern um @code{\new Voice} -und @code{\new Lyrics}. - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -versewords = \lyricmode { - One two three four five six -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - } - \new Lyrics \lyricsto verse { - \versewords - } - >> - } -} -@end lilypond - -@noindent -Damit erhalten wir die Strophe. - -Jetzt soll @notation{refrainA} auf dem selben System gesetzt -werden, während gleichzeitig in einem neuen System darunter -@notation{refrainB} gesetzt wird. Damit die Oberstimme das -gleiche System benutzt, muss alles direkt auf den Zeilenumbruchbefehl -(@code{\break} folgen, innerhalb der @notation{verse}-Stimme. -Ja, tatsächlich, @emph{innerhalb} der @notation{verse}-Stimme. -Hier haben wir diese parallele Stelle isoliert. Weitere Systeme -könnten auf die gleiche Weise hinzugefügt werden. - -@example -<< - \refrainnotesA - \new Lyrics \lyricsto verse @{ - \refrainwordsA - @} - \new Staff << - \new Voice = "refrainB" @{ - \refrainnotesB - @} - \new Lyrics \lyricsto "refrainB" @{ - \refrainwordsB - @} - >> ->> -@end example - -Nun schließlich das Resultat mit zwei Systemen für den Refrain, -man kann gut sehen, wie sich die parallele Stelle innherhalb -der @notation{verse}-Stimme befindet. - -@lilypond[quote,verbatim, ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - << - \refrainnotesA - \new Lyrics \lyricsto "verse" { - \refrainwordsA - } - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> - } -} -@end lilypond - -@cindex book, Benutzung von -@funindex \book -@funindex book - -Dies ist zwar eine interessante und nützliche Übung um zu -verstehen, wie sequentielle und parallele Notationsumgebungen -funktionieren, in der Praxis würde man diesen Code aber -vielleicht eher in zwei @code{\score}-Umgebungen trennnen -und diese dann innerhalb einer @code{\book}-Umgebung -einsetzen, wie im folgenden Beispiel demonstriert: - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new Staff << - \new Voice = "verse" { - \versenotes - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> -} - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "refrainA" { - \refrainnotesA - } - \new Lyrics \lyricsto "refrainA" { - \refrainwordsA - } - >> - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> -} -@end lilypond - - -@seealso -Notation Reference: @ruser{Vocal music}. - - -@node Contexts and engravers -@section Contexts and engravers - -Kontexte und Engraver (@qq{Stempel}) sind in den vorherigen -Abschnitten schon aufgetaucht; hier wollen wir uns ihnen -nun etwas ausführlicher widmen, denn sie sind sehr -wichtig, um Feineinstellungen in der LilyPond-Notenausgabe -vornehmen zu können. - -@menu -* Contexts explained:: -* Creating contexts:: -* Engravers explained:: -* Modifying context properties:: -* Adding and removing engravers:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@cindex Kontexte erklärt - -Wenn Noten gesetzt werden, müssen viele Elemente zu der Notenausgabe -hinzugefügt werden, -die im Quellcode gar nicht explizit vorkommen. Vergleichen Sie -etwa den Quellcode und die Notenausgabe des folgenden Beispiels: - -@lilypond[quote,verbatim,relative=2,fragment] -cis4 cis2. g4 -@end lilypond - -Der Quellcode ist sehr kurz und knapp, während in der -Notenausgabe Taktlinien, Vorzeichen, ein Schlüssel und -eine Taktart hinzugefügt wurden. Während LilyPond -den Eingabetext @emph{interpretiert}, wird die -musikalische Information in zeitlicher Reihenfolge -inspiziert, etwa wie man eine Partitur von links nach -rechts liest. Während das Programm den Code liest, -merkt es sich, wo sich Taktgrenzen befinden und -für welche Tonhöhen Versetzungszeichen gesetzt werden -müssen. Diese Information muss auf mehreren Ebenen -gehandhabt werden, denn Versetzungszeichen etwa -beziehen sich nur auf ein System, Taktlinien dagegen -üblicherweise auf die gesamte Partitur. - -Innerhalb von LilyPond sind diese Regeln und -Informationshappen in @emph{Kontexten} (engl. -contexts) gruppiert. Wir sind schon auf den -@code{Voice} (Stimmen)-Kontext gestoßen. Daneben -gibt es noch die @code{Staff} (Notensystem-) und -@code{Score} (Partitur)-Kontexte. Kontexte sind -hierarchisch geschichtet um die hierarchische -Struktur einer Partitur zu spiegeln. Ein @code{Staff}-Kontext -kann zum Beispiel viele @code{Voice}-Kontexte beinhalten, -und ein @code{Score}-Kontext kann viele -@code{Staff}-Kontexte beinhalten. - -@quotation -@sourceimage{context-example,5cm,,} -@end quotation - -Jeder Kontext hat die Aufgabe, bestimmte Notationsregeln -zu erzwingen, bestimmte Notationsobjekte zu erstellen und -verbundene Elemente zu ordnen. Der @code{Voice}-Kontext -zum Beispiel kann eine Vorzeichenregel einführen und der -@code{Staff}-Kontext hält diese Regel dann aufrecht, um -einzuordenen, ob ein Versetzungszeichen gesetzt werden -muss oder nicht. - -Ein anderes Beispiel: die Synchronisation der Taktlinien ist -standardmäßig im @code{Score}-Kontext verankert. Manchmal sollen -die Systeme einer Partitur aber unterschiedliche Taktarten -enthalten, etwa in einer polymetrischen Partitur mit -4/4- und 3/4-Takt. In diesem Fall müssen also die Standardeinstellungen -der @code{Score}- und @code{Staff}-Kontexte verändert werden. - -In einfachen Partituren werden die Kontexte implizit erstellt, -und es kann sein, dass Sie sich dessen gar nicht bewusst sind. -Für etwas größere Projekte, etwa mit vielen Systemen, müssen -die Kontexte aber explizit erstellt werden, um sicher zu gehen, -dass man auch wirklich die erwünschte Zahl an Systemen in der -richtigen Reihenfolge erhält. Wenn Stücke mit spezialisierter -Notation gesetzt werden sollen, ist es üblich, die existierenden -Kontexte zu verändern oder gar gänzlich neue zu definieren. - -Zusätzlich zu den @code{Score,} @code{Staff} und -@code{Voice}-Kontexten gibt es noch Kontexte, die zwischen -der Partitur- und Systemebene liegen und Gruppen von Systemen -kontrollieren. Das sind beispielsweise der -@code{PianoStaff} und @code{ChoirStaff}-Kontext. Es gibt zusätzlich -alternative Kontexte für Systeme und Stimmen sowie eigene Kontexte -für Gesangstexte, Perkussion, Griffsymbole, Generalbass usw. - -Die Bezeichnungen all dieser Kontexte werden von einem oder mehreren -englischen -Wörtern gebildet, dabei wird jedes Wort mit einem Großbuchstaben -begonnen und direkt an das folgende ohne Bindestrich oder Unterstrich -angeschlossen, etwa -@code{GregorianTranscriptionStaff}. - - -@seealso -Notationreferenz: @ruser{Contexts explained}. - - -@node Creating contexts -@subsection Creating contexts - -@funindex \new -@funindex new -@cindex Neue Kontexte -@cindex Erstellen von Kontexten -@cindex Kontexte, Erstellen - -Es gibt nur einen Kontext der obersten Ebene: der -@code{Score}-Kontext. Er wird mit dem @code{\score}-Befehl, -oder -- in einfacheren Partituren -- automatisch -erstellt. - -Wenn nur ein System vorhanden ist, kann man es ruhig -LilyPond überlassen, die @code{Voice}- und @code{Staff}-Kontexte -zu erstellen, aber für komplexere Partituren ist es notwendig, -sie mit einem Befehl zu erstellen. Der einfachste Befehl -hierzu ist @code{\new}. Er wird dem musikalischen Ausdruck -vorangestellt, etwa so: - -@example -\new @var{Typ} @var{musikalischer Ausdruck} -@end example - -@noindent -wobei @var{Typ} eine Kontextbezeichnung (wie etwa @code{Staff} oder -@code{Voice}) ist. Dieser Befehl erstellt einen neuen Kontext und -beginnt, den @var{muskalischen Ausdruck} innherhalb dieses -Kontexts auszuwerten. - -Beachten Sie, dass es keinen @code{\new Score}-Befehl gibt: der -Partitur-Kontext der obersten Ebene wird mit dem Befehl @code{\score} -begonnen. - -Wir haben schon viele explizite Beispiel gesehen, in denen -neue @code{Staff}- und @code{Voice}-Kontexte erstellt wurden, aber -um noch einmal ins Gedächtnis zu rufen, wie diese Befehle benutzt -werden, hier ein kommentiertes Beispiel aus dem richtigen Leben: - -@lilypond[quote,verbatim,ragged-right] -\score { % start of single compound music expression - << % start of simultaneous staves section - \time 2/4 - \new Staff { % create RH staff - \key g \minor - \clef "treble" - \new Voice { % create voice for RH notes - \relative c'' { % start of RH notes - d4 ees16 c8. | - d4 ees16 c8. | - } % end of RH notes - } % end of RH voice - } % end of RH staff - \new Staff << % create LH staff; needs two simultaneous voices - \key g \minor - \clef "bass" - \new Voice { % create LH voice one - \voiceOne - \relative g { % start of LH voice one notes - g8 ees, | - g8 ees, | - } % end of LH voice one notes - } % end of LH voice one - \new Voice { % create LH voice two - \voiceTwo - \relative g { % start of LH voice two notes - g4 ees | - g4 ees | - } % end of LH voice two notes - } % end of LH voice two - >> % end of LH staff - >> % end of simultaneous staves section -} % end of single compound music expression -@end lilypond - -(Beachten Sie, dass wir hier alle Zeilen, die eine neue -Umgebung entweder mit einer geschweiften Klammer (@code{@{}) -oder doppelten spitzen Klammern (@code{<<}) öffnen, mit -jeweils zwei Leerzeichen, und die entsprechenden -schließenden Klammern mit der gleichen Anzahl Leerzeichen -eingerückt werden. Dies ist nicht erforderlich, es wird aber -zu einem großen Teil die nicht passenden Klammerpaar-Fehler -eliminieren und ist darum sehr empfohlen. Es macht es -möglich, die Struktur einer Partitur auf einen Blick zu -verstehen, und alle nicht passenden Klammern -erschließen sich schnell. Beachten Sie auch, dass das -untere Notensystem mit eckigen Klammern erstellt wird, -denn innerhalb dieses Systems brauchen wir zwei Stimmen, -um die Noten darzustellen. Das obere System braucht -nur einen einzigen musikalischen Ausdruck und ist deshalb -von geschweiften Klammern umschlossen.) - -@cindex Kontexte, Benennung -@cindex Bennenung von Kontexten - -Der @code{\new}-Befehl kann einem Kontext auch einen -Namen zur Identifikation geben, um ihn von anderen Kontexten des -selben Typs zu unterscheiden: - -@example -\new @var{Typ} = @var{Name} @var{musikalischer Ausdruck} -@end example - -Beachten Sie den Unterschied zwischen der Bezeichnung des -Kontexttyps (@code{Staff}, @code{Voice}, usw.) und dem -Namen, der aus beliebigen Buchstaben bestehen kann -und vom Benutzer frei erfunden werden kann. Zahlen und -Leerzeichen können auch benutzt werden, in dem Fall -muss der Name aber von doppelten Anführungszeichen -umgeben werden, also etwa -@code{\new Staff = "Mein System 1" @var{musikalischer Ausdruck}}. -Der Name wird -benutzt, um später auf genau diesen spezifischen Kontext -zu verweisen. Dieses Vorgehen wurde schon in dem Abschnitt -zu Gesangstexten angewandt, siehe @ref{Voices and vocals}. - - -@seealso -Notationsreferenz: @ruser{Creating contexts}. - - -@node Engravers explained -@subsection Engravers explained - -@cindex Engraver -@cindex Stempel (Engraver) - -Jedes Zeichen des fertigen Notensatzes von LilyPond wird -von einem @code{Engraver} (Stempel) produziert. Es gibt -also einen Engraver, der die Systeme erstellt, einen, der die -Notenköpfe ausgibt, einen für die Hälse, einen für die -Balken usw. Insgesamt gibt es über 120 Engraver! Zum -Glück braucht man für die meisten Partituren nur ein -paar Engraver, und für einfache Partituren muss man eigentlich -überhaupt nichts über sie wissen. - -Engraver leben und wirken aus den Kontexten heraus. Engraver -wie der @code{Metronome_mark_engraver}, dessen Aktion -und Ausgabe sich auf die gesamte Partitur bezieht, wirken -in der obersten Kontextebene -- dem @code{Score}-Kontext. - -Der @code{Clef_engraver} (Schlüssel-Stempel) und der -@code{Key_engraver} (Vorzeichen-Stempel) finden sich in -jedem @code{Staff}-Kontext, denn unterschiedliche Systeme -könnten unterschiedliche Tonarten und Notenschlüssel -brauchen. - -Der @code{Note_heads_engraver} (Notenkopf-Stempel) und der -@code{Stem_engraver} (Hals-Stempel) befinden sich in jedem -@code{Voice}-Kontext, der untersten Kontextebene. - -Jeder Engraver bearbeitet die bestimmten Objekte, die mit -seiner Funktion assoziiert sind, und verwaltet die Eigenschaften -dieser Funktion. Diese Eigenschaften, wie etwa die Eigenschaften, -die mit Kontexten assoziiert sind, können verändert werden, -um die Wirkungsweise des Engravers oder das Erscheinungsbild -der von ihm produzierten Elemente in der Partitur zu ändern. - -Alle Engraver haben zusammengesetzte Bezeichnung, die aus -den (englischen) Wörtern ihrer Funktionsweise bestehen. Nur -das erste Wort hat einen Großbuchstaben, und die restlichen -Wörter werden mit einem Unterstrich angefügt. Ein -@code{Staff_symbol_engraver} verantwortet also die Erstellung -der Notenlinien, ein @code{Clef_engraver} entscheidet über die -Art der Notenschlüssel und setzt die entsprechenden Symbole; damit -wird gleichzeitig die Referenztonhöhe auf dem Notensystem festgelegt. - -Hier die meistgebräuchlichen Engraver mit ihrer Funktion. -Sie werden sehen, dass es mit etwas Englischkenntnissen -einfach ist, die Funktion eines Engravers von seiner Bezeichnung -abzuleiten. - -@multitable @columnfractions .3 .7 -@headitem Engraver - @tab Funktion -@item Accidental_engraver - @tab Erstellt Versetzungszeichen, vorgeschlagene und Warnversetzungszeichen. -@item Beam_engraver - @tab Erstellt Balken. -@item Clef_engraver - @tab Erstellt Notenschlüssel. -@item Completion_heads_engraver - @tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen. -@c The old Dynamic_engraver is deprecated. -jm -@item New_dynamic_engraver - @tab Erstellt Dynamik-Klammern und Dynamik-Texte. -@item Forbid_line_break_engraver - @tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist. -@item Key_engraver - @tab Erstellt die Vorzeichen. -@item Metronome_mark_engraver - @tab Erstellt Metronom-Bezeichnungen. -@item Note_heads_engraver - @tab Erstellt Notenköpfe. -@item Rest_engraver - @tab Erstellt Pausen. -@item Staff_symbol_engraver - @tab Ersetllt die (standardmäßig) fünf Notenlinien des Systems. -@item Stem_engraver - @tab Erstellt die Notenhälse und Tremolos mit einem Hals. -@item Time_signature_engraver - @tab Erstellt die Taktartbezeichnung. -@end multitable - -@smallspace - -Es soll später gezeigt werden, wie die LilyPond-Ausgabe -verändert werden kann, indem die Wirkungsweise der -Engraver beeinflusst wird. - - -@seealso -Referenz der Interna: @rinternals{Engravers and Performers}. - - -@node Modifying context properties -@subsection Modifying context properties - -@cindex Kontext-Eigenschaften, Verändern -@cindex Eigenschaften von Kontexten -@cindex Verändern von Kontext-Eigenschaften -@funindex \set -@funindex \unset -@funindex set -@funindex unset - -Kontexte sind dafür verantwortlich, die Werte bestimmter -Kontext-@emph{Eigenschaften} zu speichern. Viele davon -können verändert werden, um die Interpretation der -Eingabe zu beeinflussen und die Ausgabe zu verändern. -Kontexte werden mit dem @code{\set}-Befehl geändert. -Er wird in Form - -@example -\set @var{KontextBezeichnung}.@var{eigenschaftsBezeichnung} = #@var{Wert} -@end example - -@noindent -verwendet, wobei @var{KontextBezeichnung} üblicherweise - @code{Score}, -@code{Staff} oder @code{Voice} ist. Der erste Teil kann auch -ausgelassen werden; in diesem Fall wird @code{Voice} eingesetzt. - -Die Bezeichnung von Kontexten-Eigenschaften besteht -aus zwei Wörtern, die ohne Unterstrich oder Bindestrich -verbunden sind. Alle außer dem ersten werden am Anfang -groß geschrieben. Hier einige Beispiele der gebräuchlichsten -Kontext-Eigenschaften. Es gibt sehr viel mehr. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .25 .15 .45 .15 -@headitem eigenschaftsBezeichnung - @tab Typ - @tab Funktion - @tab Beispiel-Wert -@item extraNatural - @tab boolescher Wert - @tab Wenn wahr, werden zusätzliche Auflösungszeichen vor Versetzungszeichen gesetzt. - @tab @code{#t}, @code{#f} -@item currentBarNumber - @tab Integer - @tab Setzt die aktuelle Taktnummer. - @tab @code{50} -@item doubleSlurs - @tab boolescher Wert - @tab Wenn wahr, werden Legatobögen über und unter die Noten gesetzt. - @tab @code{#t}, @code{#f} -@item instrumentName - @tab Text - @tab Setzt die Instrumentenbezeichnung am Anfang eines Systems. - @tab @code{"Cello I"} -@item fontSize - @tab reale Zahl - @tab Vergrößert oder verkleinert die Schriftgröße. - @tab @code{2.4} -@item stanza - @tab Text - @tab Setzt den Text zu Beginn einer Strophe. - @tab @code{"2"} -@end multitable - -@noindent -Ein boolischer Wert ist entweder wahr (@code{#t}) -oder falsch (@code{#f}), -ein Integer eine positive ganze Zahl, eine reale Zahl eine positive -oder negative Dezimalzahl, und Text wird in doppelte -Anführungszeichen (Shift+2) eingeschlossen. Beachten Sie -das Vorkommen des Rautenzeichens -(@code{#}) an unterschiedlichen Stellen: als Teil eines -booleschen Wertes vor dem @code{t} oder @code{f}, aber -auch vor einem @emph{Wert} in der -@code{\set}-Befehlskette. Wenn ein boolescher Wert -eingegeben werden soll, braucht man also zwei -Rautenzeichen, z. B. @code{##t}. - -@cindex Eigenschaften in Kontexten -@cindex Veränderung von Eigenschaften in Kontexten - -Bevor eine Eigenschaft geändert werden kann, muss man wissen, -in welchem Kontext sie sich befindet. Manchmal versteht das -sich von selbst, aber in einigen Fällen kann es zunächst -unverständlich erscheinen. Wenn der falsche Kontext angegeben -wird, wird keine Fehlermeldung produziert, aber die -Veränderung wird einfach nicht ausgeführt. -@code{instrumentName} befindet sich offensichtlich innerhalb -von einem @code{Staff}-Kontext, denn das Notensystem soll -benannt werden. In dem folgenden Beispiel erhält das erste -System korrekt die Instrumentenbezeichnung, das zweite aber -nicht, weil der Kontext ausgelassen wurde. - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - \set Staff.instrumentName = #"Soprano" - c4 c - } - \new Staff \relative c' { - \set instrumentName = #"Alto" % Wrong! - d4 d - } ->> -@end lilypond - -Denken Sie daran, dass der Standardkontext @code{Voice} ist; in dem -zweiten @code{\set}-Befehl wird also die Eigenschaft @code{instrumentName} -im @code{Voice}-Kontext auf @qq{Alto}, gesetzt, aber weil LilyPond diese -Eigenschaft nicht im @code{Voice}-Kontext vermutet, passiert einfach -gar nichts. Das ist kein Fehler, und darum wird auch keine Fehlermeldung -prodziert. - -Ebenso gibt es keine Fehlermeldung, wenn die Kontext-Bezeichnung -falsch geschrieben wird und die Änderung also nicht ausgeführt werden -kann. Tatsächlich kann eine beliebige (ausgedachte) Kontextbezeichnung -mit dem @code{\set}-Befehl eingesetzt werden, genauso wie die, die -wirklich existieren. Aber wenn LilyPond diese Bezeichnung nicht -zuordnen kann, bewirkt der Befehl einfach gar nichts. Manche Editoren, -die Unterstützung für LilyPond-Befehle mitbringen, markieren existierende -Kontextbezeichnungen mit einem Punkt, wenn man mit der Maus darüber -fährt (wie etwa JEdit mit dem LilyPondTool), oder markieren -unbekannte Bezeichnungen anders (wie ConTEXT). Wenn Sie keinen -Editor mit LilyPond-Unterstützung einsetzen, wird empfohlen, die -Bezeichnungen in der Interna-Referenz zu überprüfen: siehe -@rinternals{Tunable context properties}, oder -@rinternals{Contexts}. - -Die Eigenschaft @code{instrumentName} wird erst aktiv, wenn sie -ineinem @code{Staff}-Kontext gesetzt wird, aber manche Eigenschaften -können in mehr als einem Kontext benutzt werden. Als Beispiel mag die -@code{extraNatural}-Eigenschaft dienen, die zusätzliche Erniedrigungszeichen -setzt. Die Standardeinstellung ist ##t (wahr) in allen Systemen. -Wenn sie nur in einem @code{Staff} (Notensystem) auf ##f (falsch) -gesetzt wird, wirkt sie sich auf alle Noten in diesem System aus. Wird -sie dagegen in der @code{Score}-Umgebung gesetzt, wirkt sich das -auf alle darin enthaltenen Systeme aus. - -Das also bewirkt, dass die zusätzlichen Erniedrigungszeichen in einem System -ausgeschaltet sind: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Staff.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -@noindent -während das dazu dient, sie in allen Systemen auszuschalten: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Score.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -Ein anderes Beispiel ist die Eigenschaft @code{clefOctavation}: -wenn sie im @code{Score}-Kontext gesetzt wird, ändert sich sofort -der Wert der Oktavierung in allen aktuellen Systemen und wird -auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt. - -Der gegenteilige Befehl, @code{\unset}, entfernt die Eigenschaft -effektiv wieder von dem Kontext: in den meisten Fällen wird der -Kontext auf ihre Standardeinstellungen zurückgesetzt. -Normalerweise wird aber @code{\unset} nicht benötigt, -denn ein neues @code{\set} erledigt alles, was man braucht. - -Die @code{\set}- und @code{\unset}-Befehle könne überall im -Eingabequelltext erscheinen und werden aktiv von dem Moment, an -dem sie auftreten bis zum Ende der Partitur oder bis die Eigenschaft -mit @code{\set} oder @code{\unset} neu gesetzt wird. Versuchen -wir als Beispiel, die Schriftgröße mehrmals zu ändern, was sich unter anderem -auf die Notenköpfe auswirkt. Die Änderung bezieht sich immer auf den Standard, -nicht vom letzten gesetzten Wert. - -@lilypond[quote,verbatim,ragged-right,relative=1,fragment] -c4 -% make note heads smaller -\set fontSize = #-4 -d e -% make note heads larger -\set fontSize = #2.5 -f g -% return to default size -\unset fontSize -a b -@end lilypond - -Wir haben jetzt gesehen, wie sich die Werte von unterschiedlichen -Eigenschaften ändern lassen. Beachten Sie, dass Integre und -Zahlen immer mit einem Rautenzeichen beginnen, während -die Werte wahr und falsch (mit @code{##t} und @code{##f} -notiert) immer mit zwei Rauten beginnen. Eine Eigenschaft, die -aus Text besteht, muss in doppelte Anführungsstriche gesetzt werden, -auch wenn wir später sehen werden, dass Text auf eine sehr viel -allgmeinere und mächtigere Art mit dem @code{markup}-Befehl -eingegeben werden kann. - -@subsubheading Setting context properties with @code{\with} - -@funindex \with -@funindex with -@cindex Kontexteigenschaft, setzen mit \with - -Kontexteigenschaften können auch gesetzt werden, wenn der Kontext -erstellt wird. Das ist in manchen Fällen eine deutlichere Art, -eine Eigenschaft zu bestimmen, die für die gesamte Partitur -erhalten bleichen soll. Wenn ein Kontext mit einem -@code{\new}-Befehl erstellt wird, dem direkt eine -@code{\with @{ .. @}}-Umgebung folgt, können hier die -Eigenschaften bestimmt werden. Wenn also die zusätzlichen -Auflösungszeichen für eine ganze Partitur gelten sollen, könnte -man schreiben: - -@example -\new Staff \with @{ extraNatural = ##f @} -@end example - -@noindent -etwa so: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff - \relative c'' { - gis ges aes ais - } - \new Staff \with { extraNatural = ##f } - \relative c'' { - gis ges aes ais - } ->> -@end lilypond - -Eigenschaften, die auf diese Arte gesetzt werden, können immer noch -dynamisch mit dem @code{\set}-Befehl geändert werden und mit -@code{\unset} auf ihre Standardeinstellungen zurückgesetzt werden. - -@cindex Schriftgröße, Standardeinstellung -@cindex fontSize (Schriftgröße), Standardeinstellung - -Die @code{fontSize}-Eigenschaft wird anders behandelt. Wenn sie mit -einer @code{\with}-Umgebung gesetzt wird, wird die Standardschriftgröße -neu gesetzt. Wenn die Schriftgröße später mit @code{\set} verändert -wird, kann dieser neue Standardwert mit dem Befehl -@code{\unset fontSize} erreicht werden. - -@subsubheading Setting context properties with @code{\context} - -@cindex Kontexteigenschaften, mit \context setzen -@cindex Eigenschaften von Kontexten, mit \context setzen -@funindex \context -@funindex context - -Die Werte von Kontext-Eigenschaften können in @emph{allen} Kontexten -eines bestimmten Typs (etwa alle @code{Staff}-Kontexte) -gleichzeitig mit einem Befehl gesetzt werden. Der Kontext wird -spezifieziert, indem seine Bezeichnung benutzt wird, also etwa -@code{Staff}, mit einem Backslash davor: @code{\Staff}. Der Befehl -für die Eigenschaft ist der gleiche, wie er auch in der -@code{\with}-Konstruktion benutzt wird, wie oben gezeigt. Er wird in -eine @code{\context}-Umgebung eingebettet, welche wiederum innerhalb -von einer @code{\layout}-Umgebung steht. Jede @code{\context}-Umgebung -wirkt sich auf alle Kontexte dieses Types aus, welche sich in der -aktuellen Partitur befinden (d. h. innherhalb einer @code{\score}- -oder @code{\book}-Umgebung. Hier ist ein Beispiel, wie man diese -Funktion anwendet: - -@lilypond[verbatim,quote] -\score { - \new Staff { - \relative c'' { - cis4 e d ces - } - } - \layout { - \context { - \Staff - extraNatural = ##t - } - } -} -@end lilypond - -@noindent -Kontext-Eigenschaften, die auf diese Weise gestzt werden, können für -bestimmten Kontexte überschrieben werden, indem die -@code{\with}-Konstruktion eingesetzt wird, oder mit @code{\set}-Befehlen -innerhalb der aktuellen Noten. - - -@seealso -Notationsreferenz: -@ruser{Changing context default settings}. -@c FIXME -@c uncomment when backslash-node-name issue is resolved -pm -@c @ruser{The set command}. - -Referenz der Interna: -@rinternals{Contexts}, -@rinternals{Tunable context properties}. - - -@node Adding and removing engravers -@subsection Adding and removing engravers - -@cindex Engraver, Hinzufügen von -@cindex Engraver, Entfernen von -@cindex Hinzufügen von Engravern -@cindex Entfernen von Engravern - -@funindex \consists -@funindex \remove -@funindex consists -@funindex remove - -Wir haben gesehen, dass jeder Kontext eine Anzahl an Engravern -(Stempeln) beinhaltet, von denen ein jeder einen bestimmten -Teil des fertigen Notensatzes produziert, wie z. B. Taktlinien, -Notenlinien, Notenköpfe, Hälse usw. Wenn ein Engraver aus -einem Kontext entfernt wird, kann er seine Objekte nicht -länger produzieren. Das ist eine eher grobe Methode, die -Notenausgabe zu beeinflussen, aber es kann von großem -Nutzen sein. - - -@subsubheading Changing a single context - -Um einen Engraver von einem einzelnen Kontext zu entfernen, -wir der @code{\with}-Befehl eingesetzt, direkt hinter -den Befehl zur Kontext-Erstellung geschrieben, wie -in dem vorigen Abschnitt gezeigt. - -Als ein Beispiel wollen wir das Beispiel aus dem letzten -Abschnitt produzieren, aber die Notenlinien entfernen. Erinnern -Sie sich, dass die Notenlinien vom @code{Staff_symbol_engraver} -erstellt werden. - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \remove Staff_symbol_engraver -} -\relative c' { - c4 - \set fontSize = #-4 % make note heads smaller - d e - \set fontSize = #2.5 % make note heads larger - f g - \unset fontSize % return to default size - a b -} -@end lilypond - -@cindex Ambitus-Engraver - -Engraver können auch zu einem bestimmten -Kontext hinzugefügt werden. Dies geschieht -mit dem Befehl - -@code{\consists @var{Engraver_bezeichnung}} - -@noindent -welcher auch wieder innerhalb der @code{\with}-Umgebung -gesetzt wird. Einige Chorpartituren zeigen einen -Ambitus direkt zu Beginn der ersten Notenzeile, um -den Stimmumfang des Stückes anzuzeigen, siehe auch -@rglos{ambitus}. Der Ambitus wird vom -@code{Ambitus_engraver} erstellt, der normalerweise -in keinem Kontext enthalten ist. Wenn wir -ihn zum @code{Voice}-Kontext hinzufügen, errechnet -er automatisch den Stimmumfang für diese einzelne Stimme -und zeigt ihn an: - -@lilypond[quote,verbatim,ragged-right] -\new Staff << - \new Voice \with { - \consists Ambitus_engraver - } - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@noindent -wenn wir den Ambitus-Engraver allerdings zum -@code{Staff}-Kontext hinzufügen, wird der Stimmumfang aller -Stimmen in diesem Notensystem errechnet: - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \consists Ambitus_engraver - } - << - \new Voice - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - - -@subsubheading Changing all contexts of the same type - -@funindex \layout - -Die vorigen Beispiele zeigen, wie man Engraver in einem -bestimmten Kontext hinzufügen oder entfernen kann. Es ist -auch möglich, Engraver in jedem Kontext eines bestimmten -Typs hinzuzufügen oder zu entfernen. Dazu werden die -Befehle in dem entsprechenden Kontext in einer -@code{\layout}-Umgebung gesetzt. Wenn wir also z. B. -den Ambitus für jedes Notensystem in einer Partitur -mit vier Systemen anzeigen wollen, könnte das so aussehen: - -@lilypond[quote,verbatim,ragged-right] -\score { - << - \new Staff << - \relative c'' { c a b g } - >> - \new Staff << - \relative c' { c a b g } - >> - \new Staff << - \clef "G_8" - \relative c' { c a b g } - >> - \new Staff << - \clef "bass" - \relative c { c a b g } - >> - >> - \layout { - \context { - \Staff - \consists Ambitus_engraver - } - } -} -@end lilypond - -@noindent -Die Werte der Kontext-Eigenschaften können auch für -alle Kontexte eines bestimmten Typs auf die gleiche -Weise geändert werden, indem der @code{\set}-Befehl in -einer @code{\context}-Umgebung angewendet wird. - - -@seealso -Notationsreferenz: @ruser{Modifying context plug-ins}, -@ruser{Changing context default settings}. - - -@node Extending the templates -@section Extending the templates - -Sie haben sich durch die Übung gearbeitet, Sie -wissen jetzt, wie Sie Notensatz produzieren, und Sie -haben die grundlegenden Konzepte verstanden. Aber wie -erhalten Sie genau die Systeme, die Sie brauchen? Es -gibt eine ganze Anzahl an fertigen Vorlagen -(siehe @ref{Templates}), mit denen Sie beginnen -können. Aber was, wenn Sie nicht genau das finden, -was Sie brauchen? Lesen Sie weiter. - -@menu -* Soprano and cello:: -* Four-part SATB vocal score:: -* Building a score from scratch:: -@end menu - - -@node Soprano and cello -@subsection Soprano and cello - -@cindex Template, Verändern von -@cindex Vorlage, Verändern von -@cindex Veränderung von Vorlagen - -Beginnen Sie mit der Vorlage, die Ihren Vorstellungen -am nächsten kommt. Nehmen wir einmal an, Sie wollen -ein Stück für Sopran und Cello schreiben. In diesem -Fall könnten Sie mit der Vorlage @qq{Noten und Text} -(für die Sopran-Stimme) beginnen. - -@example -\version @w{"@version{}"} -melody = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -text = \lyricmode @{ - Aaa Bee Cee Dee -@} - -\score @{ - << - \new Voice = "one" @{ - \autoBeamOff - \melody - @} - \new Lyrics \lyricsto "one" \text - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Jetzt wollen wir die Cello-Stimme hinzufügen. Schauen wir uns das -Beispiel @qq{Nur Noten} an: - -@example -\version @w{"@version{}"} -melody = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -\score @{ - \new Staff \melody - \layout @{ @} - \midi @{ @} -@} -@end example - -Wir brauchen den @code{\version}-Befehl nicht zweimal. Wir -brauchen aber den @code{melody}-Abschnitt. Wir wollen -keine zwei @code{\score} (Partitur)-Abschnitte -- mit zwei -@code{\score}-Abschnitten würden wir zwei Stimmen -getrennt voneinander erhalten. In diesem Fall wollen wir -sie aber zusammen, als Duett. Schließlich brauchen wir -innerhalb des @code{\score}-Abschnittes nur einmal die -Befehle @code{\layout} und @code{\midi}. - -Wenn wir jetzt einfach zwei @code{melody}-Abschnitte in -unsere Datei kopieren würden, hätten wir zwei @code{melody}-Variable. -Das würde zu keinem Fehler führen, aber die zweite von ihnen -würde für beide Melodien eingesetzt werden. Wir müssen -ihnen also andere Bezeichnungen zuweisen, um sie voneinander -zu unterscheiden. Nennen wir die Abschnitte also @code{SopranNoten} -für den Sopran und @code{CelloNoten} für die Cellostimme. Wenn -wir schon dabei sind, können wir @code{text}auch nach -@code{SoprText} umbenennen. Denken Sie daran, beide -Vorkommen der Bezeichnung zu ändern: einmal die Definition -gleich am Anfang (@code{melody = \relative c' @{ }) und -dann auch noch die Benutzung der Variable innerhalb des -@code{\score}-Abschnittes. - -Gleichzeitig können wir auch noch das Notensystem für das -Cello ändern -- das Cello hat normalerweise einen Bassschlüssel. -Wir ändern auch die Noten etwas ab. - -@example -\version @w{"@version{}"} -SopranNoten = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -SoprText = \lyricmode @{ - Aaa Bee Cee Dee -@} - -CelloNoten = \relative c @{ - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -@} - -\score @{ - << - \new Voice = "eins" @{ - \autoBeamOff - \SopranNoten - @} - \new Lyrics \lyricsto "eins" \Soprantext - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Das sieht schon vielversprechend aus, aber die Cello-Stimme -erscheint noch nicht im Notensatz -- wir haben vergessen, -sie in den @code{\score}-Abschnitt einzufügen. Wenn die -Cello-Stimme unterhalb des Soprans erscheinen soll, müssen -wir - -@example -\new Staff \CelloNoten -@end example - -@noindent -unter dem Befehl für den Sopran hinzufügen. Wir brauchen auch -die spitzen Klammern (@code{<<} und @code{>>}) um die -Noten, denn damit wird LilyPond mitgeteilt, dass mehr als -ein Ereignis gleichzeitig stattfindet (in diesem Fall sind es -zwei @code{Staff}-Instanzen). Der @code{\score}-Abschnitt -sieht jetzt so aus: - -@c Indentation in this example is deliberately poor -@example -\score @{ - << - << - \new Voice = "eins" @{ - \autoBeamOff - \SopranNoten - @} - \new Lyrics \lyricsto "eins" \SoprText - >> - \new Staff \CelloNoten - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -Das sieht etwas unschön aus, vor allem die Einrückung stimmt -nicht mehr. Das können wir aber schnell in Ordnung bringen. -Hier also die gesamte Vorlage für Sopran und Cello: - -@lilypond[quote,verbatim,ragged-right,addversion] -sopranoMusic = \relative c' { - \clef treble - \key c \major - \time 4/4 - a4 b c d -} - -sopranoLyrics = \lyricmode { - Aaa Bee Cee Dee -} - -celloMusic = \relative c { - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -} - -\score { - << - << - \new Voice = "one" { - \autoBeamOff - \sopranoMusic - } - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \new Staff \celloMusic - >> - \layout { } - \midi { } -} -@end lilypond - - -@seealso -Die Vorlagen, mit denen wir begonnen haben, können im -Anhang @qq{Vorlagen} gefunden werden, siehe -@ref{Single staff}. - - -@node Four-part SATB vocal score -@subsection Four-part SATB vocal score - -@cindex Vorlage, SATB -@cindex Vorlage, Chorpartitur -@cindex SATB-Vorlage -@cindex Chorpartitur, Vorlage - -Die meisten Partituren für vierstimmigen gemischten Chor -mit Orchesterbegleitung (wie etwa Mendelssohns @notation{Elias} -oder Händels @notation{Messias}) sind so aufgebaut, dass -für jede der vier Stimmen ein eigenes System besteht und -die Orchesterbegleitung dann als Klavierauszug darunter -notiert wird. Hier ein Beispiel aus Händels @notation{Messias}: - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - -Keine der Vorlage bietet diesen Aufbau direkt an. Die Vorlage, die -am nächsten daran liegt, ist @qq{SATB-Partitur und automatischer -Klavierauszug}, siehe @ref{Vocal ensembles}. Wir müssen diese -Vorlage aber so anpassen, dass die Noten für das Klavier nicht -automatisch aus dem Chorsatz generiert werden. Die Variablen -für die Noten und den Text des Chores sind in Ordnung, wir -müssen nun noch Variablen für die Klaviernoten hinzufügen. - -Die Reihenfolge, in welcher die Variablen in das Chorsystem -(@code{ChoirStaff}) eingefügt werden, entspricht nicht der -in dem Beispiel oben. Wir wollen sie so sortieren, dass die -Texte jeder Stimme direkt unter den Noten notiert werden. -Alle Stimmen sollten als @code{\voiceOne} notiert werden, -welches die Standardeinstellung ist; wir können also die -@code{\voiceXXX}-Befehle entfernen. Wir müssen auch noch -den Schlüssel für den Tenor ändern. Die Methode, mit der -der Text den Stimmen zugewiesen wird, ist uns noch nicht -bekannt, darum wollen wir sie umändern auf die Weise, die -wir schon kennen. Wir fügen auch noch Instrumentbezeichnungen -zu den Systemen hinzu. - -Damit erhalten wir folgenden @code{ChoirStaff}: - -@example - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" @{ \global \SopranNoten @} - >> - \new Lyrics \lyricsto "sopranos" @{ \SopranText @} - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" @{ \global \AltNoten @} - >> - \new Lyrics \lyricsto "altos" @{ \AltText @} - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" @{ \global \TenorNoten @} - >> - \new Lyrics \lyricsto "tenors" @{ \TenorText @} - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" @{ \global \BassNoten @} - >> - \new Lyrics \lyricsto "basses" @{ \BassText @} - >> % Ende ChoirStaff -@end example - -Als nächstes müssen wir das Klaviersystem bearbeiten. -Das ist einfach: wir nehmen einfach den Klavierteil -aus der @qq{Piano solo}-Vorlage: - -@example -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "oben" \oben - \new Staff = "unten" \unten ->> -@end example - -@noindent -und fügen die Variablen @code{oben} -und @code{unten} hinzu. - -Das Chorsystem und das Pianosystem müssen mit -spitzen Klammern kombiniert werden, damit beide -übereinandern erscheinen: - -@example -<< % ChoirStaff und PianoStaff parallel kombinieren - \new ChoirStaff << - \new Staff = "sopranos" << - \new Voice = "sopranos" @{ \global \SopranNoten @} - >> - \new Lyrics \lyricsto "sopranos" @{ \SopranText @} - \new Staff = "altos" << - \new Voice = "altos" @{ \global \AltNoten @} - >> - \new Lyrics \lyricsto "altos" @{ \AltText @} - \new Staff = "tenors" << - \clef "G_8" % Tenorschlüssel - \new Voice = "tenors" @{ \global \TenorNoten @} - >> - \new Lyrics \lyricsto "tenors" @{ \TenorText @} - \new Staff = "basses" << - \clef "bass" - \new Voice = "basses" @{ \global \BassNoten @} - >> - \new Lyrics \lyricsto "basses" @{ \BassText @} - >> % Ende ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "oben" \oben - \new Staff = "unten" \unten - >> ->> -@end example - -Alles miteinander kombiniert und mit den Noten für drei -Takte sieht unser Beispiel nun so aus: - -@lilypond[quote,verbatim,ragged-right,addversion] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - - -@node Building a score from scratch -@subsection Building a score from scratch - -@cindex Template, eigene schreiben -@cindex Vorlagen, eigene schreiben -@cindex eigene Vorlagen erstellen -@cindex Erstellen von eigenen Vorlagen -@cindex Schreiben von eigenen Vorlagen - -Wenn Sie einige Fertigkeit im Schreiben von LilyPond-Code -gewonnen haben, werden Sie vielleicht feststellen, dass es -manchmal einfacher ist, von Grund auf anzufangen, anstatt -die fertigen Vorlagen zu verändern. Auf diese Art könne Sie -auch Ihren eigenen Stil entwickeln, und ihn der Musik anpassen, -die Sie notieren wollen. Als Beispiel wollen wir demonstrieren, -wie man die Partitur für ein Orgelpreludium von Grund auf -konstruiert. - -Beginnen wir mit dem Kopf, dem @code{header}-Abschnitt. -Hier notieren wir den Titel, den Namen des Komponisten usw. -Danach schreiben wir die einzelnen Variablen auf und -schließlich am Ende die eigentliche Partitur, den -@code{\score}-Abschnitt. Beginnen wir mit einer groben -Struktur, in die wir dann die Einzelheiten nach und nach -eintragen. - -Als Beispiel benutzen wir zwei Takte aus dem Orgelpreludium -@notation{Jesu, meine Freude} von J. S. Bach, notiert -für zwei Manuale und Pedal. Sie können die Noten am Ende -dieses Abschnittes sehen. Das obere Manual trägt zwei Stimmen, -das untere und das Pedalsystem jeweils nur eine. Wir -brauchen also vier Variablen für die Noten und eine, um -Taktart und Tonart zu definieren. - -@example -\version @w{"@version{}"} -\header @{ - title = "Jesu, meine Freude" - composer = "J. S. Bach" -@} -TimeKey = @{ \time 4/4 \key c \minor @} -ManualOneVoiceOneMusic = @{s1@} -ManualOneVoiceTwoMusic = @{s1@} -ManualTwoMusic = @{s1@} -PedalOrganMusic = @{s1@} - -\score @{ -@} -@end example - -Im Moment haben wir eine unsichtbare -Note in jede Stimme eingesetzt (@code{s1}). -Die Noten werden später hinzugefügt. - -Als nächstes schauen wir uns an, was in die -Partitur (die @code{\score}-Umgebung) -kommt. Dazu wird einfach die Notensystemstruktur -konstruiert, die wir benötigen. Orgelmusik -wird meistens auf drei Systemen notiert, eins -für jedes Manual und ein drittes für die Pedalnoten. -Die Systeme für die Manuale werden mit einer -geschweiften Klammer verbunden, wir -benutzen hier also ein @code{PianoStaff}. -Das erste Manualsystem braucht zwei Stimmen, -das zweite nur eine. - -@example - \new PianoStaff << - \new Staff = "ManualOne" << - \new Voice @{ \ManualOneVoiceOneMusic @} - \new Voice @{ \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context -@end example - -Als nächstes soll das System für das Pedal hinzugefügt -werden. Es soll unter das Klaviersystem gesetzt -werden, aber muss gleichzeitig mit ihm erscheinen. -Wir brauchen also spitze Klammern um beide -Definitionen. Sie wegzulassen würde eine Fehlermeldung -in der Log-Datei hervorrufen. Das ist ein sehr -häufiger Fehler, der wohl auch Ihnen früher -oder später unterläuft. Sie können das fertige -Beispiel am Ende des Abschnittes kopieren und die -Klammern entfernen, um zu sehen, wie die -Fehlermeldung aussehen kann, die Sie in solch -einem Fall erhalten würden. - -@example -<< % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \new Voice @{ \ManualOneVoiceOneMusic @} - \new Voice @{ \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \new Voice @{ \PedalOrganMusic @} - >> ->> -@end example - -Es ist nicht notwendig, die simultane Konstruktion -@code{<< .. >>} innerhalb des zweiten Manualsystems -und des Pedalsystems zu benutzen, denn sie enthalten -nur eine Stimme. Andererseits schadet es nichts, sie -zu schreiben, und es ist eine gute Angewohnheit, immer -die spitzen Klammern nach einem @code{\new Staff} zu -schreiben, wenn mehr als eine Stimme vorkommen könnten. -Für Stimmen (@code{Voice}) dagegengilt genau das -Gegenteil: eine neue Stimme sollte immer von -geschweiften Klammern (@code{@{ .. @}}) gefolgt -werden, falls Sie ihre Noten in mehrere Variable aufteilen, -die nacheinander gesetzt werden sollen. - -Fügen wir also diese Struktur zu der @code{\score}-Umgebung -hinzu und bringen wir die Einzüge in Ordnung. Gleichzeitig -wollen wir die richtigen Schlüssel setzen und die Richtung der -Hälse und Bögen in den Stimmen des oberen Systems -kontrollieren, indem die obere Stimme ein -@code{\voiceOne}, die untere dagegen ein @code{\voiceTwo} -erhält. Die Taktart und Tonart werden mit unserer fertigen -Variable @code{\TimeKey} eingefügt. - -@example -\score @{ - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice @{ \voiceOne \ManualOneVoiceOneMusic @} - \new Voice @{ \voiceTwo \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \clef "bass" - \new Voice @{ \PedalOrganMusic @} - >> % end PedalOrgan Staff - >> -@} % end Score context -@end example - -Damit ist das Grundgerüst fertig. Jede Orgelmusik mit drei -Systemen hat die gleiche Struktur, auch wenn die Anzahl der Stimmen -in einem System sich ändern kann. Jetzt müssen wir nur noch -die Noten einfügen und alle Teile zusammenfügen, indem wir -die Variablen mit einem Backslash in die Partitur einbauen. - -@lilypond[quote,verbatim,ragged-right,addversion] -\header { - title = "Jesu, meine Freude" - composer = "J S Bach" -} -TimeKey = { \time 4/4 \key c \minor } -ManualOneVoiceOneMusic = \relative g' { - g4 g f ees | d2 c2 | -} -ManualOneVoiceTwoMusic = \relative c' { - ees16 d ees8~ ees16 f ees d c8 d~ d c~ | - c c4 b8 c8. g16 c b c d | -} -ManualTwoMusic = \relative c' { - c16 b c8~ c16 b c g a8 g~ g16 g aes ees | - f ees f d g aes g f ees d e8~ ees16 f ees d | -} -PedalOrganMusic = \relative c { - r8 c16 d ees d ees8~ ees16 a, b g c b c8 | - r16 g ees f g f g8 c,2 | - } - -\score { - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice { \voiceOne \ManualOneVoiceOneMusic } - \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice { \ManualTwoMusic } - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \clef "bass" - \new Voice { \PedalOrganMusic } - >> % end PedalOrgan Staff context - >> -} % end Score context -@end lilypond - - - - - - diff --git a/Documentation/de/user/input.itely b/Documentation/de/user/input.itely deleted file mode 100644 index 827c9f6507..0000000000 --- a/Documentation/de/user/input.itely +++ /dev/null @@ -1,2025 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node General input and output -@chapter General input and output - -Dieses Kapitel erklärt allgemeine Fragen zur Eingabe und Ausgabe von -Notation mit LilyPond und weniger direkte Fragen der Notation. - -@menu -* Input structure:: -* Titles and headers:: -* Working with input files:: -* Controlling output:: -* MIDI output:: -@end menu - - -@node Input structure -@section Input structure - -Das hauptsächliche Eingabeformat von LilyPond sind Textdateien. -Üblicherweise werden diese Dateien mit der Endung @code{.ly} -versehen. - -@menu -* Structure of a score:: -* Multiple scores in a book:: -* File structure:: -@end menu - - -@node Structure of a score -@subsection Structure of a score - -@funindex \score - -Eine @code{\score}-Umgebung muss einen einzelnen musikalischen -Ausdruck beinhalten, der durch geschweifte Klammern begrenzt wird: - -@example -\score @{ -... -@} -@end example - -@warning{Es darf @strong{nur ein} äußerer musikalischer Ausdruck -in der @code{\score}-Umgebung geschrieben werden, und er @strong{muss} -von geschweiften Klammern umgeben sein.} - -Dieser einzelne musikalische Ausdruck kann beliebige Größe annehmen und -andere musikalische Ausdrücke von beliebiger Komplexität beinhalten. -Alle diese Beispielse sind musikalische Ausdrücke: - -@example -@{ c'4 c' c' c' @} -@end example - -@lilypond[verbatim,quote] -{ - { c'4 c' c' c'} - { d'4 d' d' d'} -} -@end lilypond - -@lilypond[verbatim,quote] -<< - \new Staff { c'4 c' c' c' } - \new Staff { d'4 d' d' d' } ->> -@end lilypond - -@example -@{ - \new GrandStaff << - \new StaffGroup << - \new Staff @{ \Flöte @} - \new Staff @{ \Oboe @} - >> - \new StaffGroup << - \new Staff @{ \GeigeI @} - \new Staff @{ \GeigeII @} - >> - >> -@} -@end example - -Kommentare bilden eine Ausnahme dieser Regel. (Andere Ausnahmen -siehe @ref{File structure}.) Sowohl einzeilige als auch -Blockkommentare (eingegrenzt durch @code{%@{ .. %@}}) können -an beliebiger Stelle einer Eingabedatei geschrieben werden. Sie -können innerhalb oder außerhalb der @code{\score}-Umgebung vorkommen, -und innerhalb oder außerhalb des einzelnen musikalischen Ausdrucks -innerhalb der @code{\score}-Umgebung. - - -@seealso -Handbuch zum Lernen: -@rlearning{Working on input files}, -@rlearning{Music expressions explained}, -@rlearning{Score is a (single) compound musical expression}. - - -@node Multiple scores in a book -@subsection Multiple scores in a book - -@funindex \book -@cindex Sätze, mehrere - -Eine Partitur kann mehrere musikalische Stücke und verschiedene -Texte beinhalten. Beispiele hierzu sind etwa eine Etüdensammlung -oder ein Orchesterstück mit mehreren Sätzen. Jeder Satz wird -in einer eigenen @code{\score}-Umgebung notiert: - -@example -\score @{ - @var{..Noten..} -@} -@end example - -@noindent -und Texte werden mit einer @code{\markup}-Umgebung geschrieben: - -@example -\markup @{ - @var{..Text..} -@} -@end example - -@funindex \book - -Alle Sätze und Texte, die in derselben @code{.ly}-Datei vorkommen, -werden normalerweise in eine einzige Ausgabedatei gesetzt. - -@example -\score @{ - @var{..} -@} -\markup @{ - @var{..} -@} -\score @{ - @var{..} -@} -@end example - -Wenn Sie aber mehrere Ausgabedateien aus einer einzigen @code{.ly}-Datei -erstellen wollen, können Sie mehrere @code{\book}-Umgebungen notieren. -Wenn Sie keine @code{\book}-Umgebung in Ihrer Datei angeben, interpretiert -LilyPond die gesamte Datei als eine große @code{\book}-Umgebung (siehe -auch @ref{File structure}. Eine wichtige Ausnahme stellen Dokumente dar, -die mit lilypond-book erstellt werden, für die Sie explizit -@code{\book}-Umgebungen notieren müssen, weil sonst nur die erste -@code{\score}- bzw. @code{\markup}-Umgebung angezeigt wird. - -Der Kopfbereich für jedes Musikstück kann innerhalb der @code{\score}-Umgebung -definiert werden. Die @code{piece}-(Stück)-Bezeichnung aus dieser -@code{\header}-Umgebung wird vor jedem Satz ausgegeben. Die Überschrift für -ein ganzes Buch kann innerhalb von @code{\book} notiert werden, aber wenn -diese Umgebung fehlt, wird die @code{\header}-Umgebung genommen, die auf -erster Ebene der Datei notiert ist. - -@example -\header @{ - title = "Acht Miniaturen" - composer = "Igor Stravinsky" -@} -\score @{ - @dots{} - \header @{ piece = "Romanze" @} -@} -\markup @{ - ..Text der zweiten Strophe.. -@} -\markup @{ - ..Text der dritten Strophe.. -@} -\score @{ - @dots{} - \header @{ piece = "Menuetto" @} -@} -@end example - -@funindex \bookpart - -Stücke können innerhalb eines Buches mit @code{\bookpart} gruppiert -werden. Derartige Buchabschnitte werden durch einen Seitenumbruch -voneinander getrennt und können wie auch das ganze Buch selber mit -einem Titel innerhalb einer @code{\header}-Umgebung beginnen. - -@example -\bookpart @{ - \header @{ - title = "Buchtitel" - subtitle = "Erster Teil" - @} - \score @{ @dots{} @} - @dots{} -@} -\bookpart @{ - \header @{ - subtitle = "Zweiter Teil" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - -@node File structure -@subsection File structure - -@funindex \paper -@funindex \midi -@funindex \layout -@funindex \header -@funindex \score -@funindex \book -@funindex \bookpart - -@cindex Dateistruktur -@cindex Struktur, Datei -@cindex Eingabedatei, Struktur -@cindex Quelldatei, Struktur - -Eine @code{.ly}-Datei kann eine belibige Anzahl an Ausdrücken -auf der obersten Ebene beinhalten, wobei ein Ausdrück der obersten -Ebene einer der folgenden sein kann: - -@itemize @bullet -@item -Eine Ausgabedefinition, wie @code{\paper}, @code{\midi} und -@code{\layout}. Derartige Definitionen auf oberster Ebene verändern -die globalen Einstellungen für das ganze @qq{Buch}. Wenn mehr -als eine derarte Definition desselben Typs angegeben wird, hat -die spätere Vorrang. - -@item -Ein direkter Scheme-Ausdruck, wie etwa -@code{#(set-default-paper-size "a7" 'landscape)} oder -@code{#(ly:set-option 'point-and-click #f)}. - -@item -Eine @code{\header}-Umgebung. Damit wird die globale Titelei -eingestellt. Das ist die Umgebung, in der sich Definition für -das ganze Buch befinden, wie Komponist, Titel usw. - -@item -Eine @code{\score}-Umgebung. Die in ihr enthaltene Partitur wird -zusammen mit anderen vorkommenden @code{\score}-Umgebungen gesammelt -und in ein @code{\book} zusammengefasst. Dieses Verhalten kann -verändert werden, indem die Variable @code{toplevel-score-handler} -auf höchster Ebene gesetzt wird. Die Definition des Standards findet sich -in der Datei @file{../scm/@/lily@/.scm}. - -@item -Eine @code{\book}-Umgebung fasst mehrere Sätze (d. h. mehrere -@code{\score}-Umgebungen) logisch in ein Dokument zusammen. -Wenn mehrere @code{\score}-Partituren vorkommen, wird für jede -@code{\book}-Umgebung eine eigene Ausgabedatei erstellt, in der -alle in der Umgebung enthaltenen Partituren zusammengefasst sind. -Der einzige Grund, explizit eine @code{\book}-Umgebung zu setzen, -ist, wenn mehrere Ausgabedateien aus einer einzigen Quelldatei -erstellt werden sollen. Eine Ausnahme sind lilypond-book-Dokumente, -in denen eine @code{\book}-Umgebung explizit hinzugefügt werden -muss, wenn mehr als eine @code{\score}- oder @code{\markup}-Umgebung -im gleichen Beispiel angezeigt werden soll. Dieses Verhalten -kann verändert werden, indem die Variable @code{toplevel-book-handler} -auf höchster Ebene gesetzt wird. Die Definition des Standards -findet sich in der Datei @file{../scm/@/lily@/.scm}. - -@item -Eine @code{\bookpart}-Umgebung. Ein Buch (@code{\book}) kann in -mehrere Teile untergliedert sein, indem @code{\bookpart}-Umgebungen -eingesetzt werden. Jeder Buchabschnitt beginnt auf einer neuen -Seite und kann eigene Papierdefinitionen in einer @code{\paper}-Umgebung -haben. - -@item -Ein zusammengesetzter musikalischer Ausdruck wie etwa -@example -@{ c'4 d' e'2 @} -@end example - -Dieses Beispiel wird von LilyPond automatisch in einer -@code{\score}-Umgebung in einem Buch interpretiert und -mit anderen @code{\score}-Umgebungen und musikalischen -Ausdrücken auf der höchsten Ebene zusammen ausgegeben. -Anders gesagt: eine Datei, die nur das obige Beispiel -beinhaltet, wird übersetzt zu - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - @{ c'4 d' e'2 @} - @} - @} - @} - \layout @{ @} - \header @{ @} -@} -@end example - -Dieses Verhalten kann verändert werden, indem die Variable -@code{toplevel-music-handler} auf der oberseten Ebene gesetzt -wird. Die Definition des Standards findet sich in der Datei -@file{../scm/@/lily@/.scm}. - -@item -Eine Textbeschriftung, eine Strophe etwa: -@example -\markup @{ - 2. Die erste Zeile der zweiten Strophe. -@} -@end example - -Textbeschriftungen werden über, zwischen oder unter musikalischen -Ausdrücken gesetzt, so wie sie notiert werde. - -@cindex Variablen - -@item -Eine Variable, wie -@example -foo = @{ c4 d e d @} -@end example - -Sie kann dann später in der Datei eingesetzt werden, indem @code{\foo} -geschrieben wird. Die Beizeichnung der Variable darf nur aus -alphabetischen Zeichen bestehen, keine Zahlen, Unter- oder Bindestriche. - -@end itemize - -Das folgende Beispiel zeigt drei Dinge, die auf der obersten Ebene -notiert werden können: - -@example -\layout @{ - % Zeilen rechtsbündig setzen - ragged-right = ##t -@} - -\header @{ - title = "Do-re-mi" -@} - -@{ c'4 d' e2 @} -@end example - -An einer beliebigen Stelle der Datei kann jede der folgenden lexikalen -Anweisungen notiert werden: - -@itemize -@item @code{\version} -@item @code{\include} -@item @code{\sourcefilename} -@item @code{\sourcefileline} -@item -Ein einzeiliger Kommentar, beginnend mit @code{%}. - -@item -Ein mehrzeiliger Kommentar, umgeben von @code{%@{ .. %@}}. - -@end itemize - -@seealso -Hanbuch zum Lernen: -@rlearning{How LilyPond input files work}. - - -@node Titles and headers -@section Titles and headers - -Fast alle gedruckten Noten beinhalten einen Titel und den Namen -des Komponisten, teilweise wird auch noch sehr viel mehr Information -zur Verfügung gestellt. - -@menu -* Creating titles:: -* Custom titles:: -* Reference to page numbers:: -* Table of contents:: -@end menu - - -@node Creating titles -@subsection Creating titles - -Überschriften können für jede @code{\score}-Umgebung erstellt werden, sowohl -für die gesamte Datei (oder eine @code{\book}-Umgebung) als auch für -einzelne Buchabschnitte (innerhalb einer @code{\bookpart}-Umgebung). - -Der Inhalt der Titelei wird aus der @code{\header}-Umgebung übernommen. Die -@code{\header}-Umgebung eines Buches unterstützt folgende Felder: - -@table @code -@funindex dedication -@item dedication -Die Widmung der Noten, wird auf oben auf der ersten Seite gesetzt. - -@funindex title -@item title -Die Überschrift der Noten, wird unter der Widmung zentriert gesetzt. - -@funindex subtitle -@item subtitle -Untertitel, zentriert unter der Überschrift. - -@funindex subsubtitle -@item subsubtitle -Unteruntertitel, zentriert unter dem Untertitel. - -@funindex poet -@item poet -Name des Dichters, linksbündig unter dem Unteruntertitel. - -@funindex instrument -@item instrument -Bezeichnung des Instruments, zentriert unter dem Unteruntertitel. -Auch oben auf der Seite zentriert (andere als erste Seite). - -@funindex composer -@item composer -Name des Komponisten, rechtsbüngig unter dem Unteruntertitel. - -@funindex meter -@item meter -Metrum, linksbündig unter dem Dichter. - -@funindex arranger -@item arranger -Name des Bearbeiters/Arrangeurs, rechtsbündig unter dem Komponisten. - -@funindex piece -@item piece -Bezeichnung des Stückes, linksbündig unter dem Metrum. - -@funindex opus -@item opus -Bezeichnung des Opus, rechtsbündig unter dem Bearbeiter. - -@cindex Seitenumbruch, erzwingen -@funindex breakbefore - -@item breakbefore -Hiermit beginnt der Titel auf einer neuen Steite. (Kann die Werte -##t (wahr) oder ##f (falsch) haben.) - -@funindex copyright -@item copyright -Anzeige eines Copyright, zentriert unten auf der ersten Seite. Um das -Copyright-Symbol zu notieren, siehe @ref{Text encoding}. - -@funindex tagline -@item tagline -Zentriert unten auf der letzten Seite. Enthält standardmäßig: @qq{Music -engraving by LilyPond (@var{version})---www.lilypond.org} - -@end table - -Hier eine Demonstration der möglichen Felder. Beliebige -Formatierungsbefehle für Textbeschriftung können in der Titelei -eingesetzt werden. Siehe hierzu auch @ref{Formatting text}. - -@c KEEP LY -@lilypond[quote,verbatim,line-width=11.0\cm] -\paper { - line-width = 9.0\cm - paper-height = 10.0\cm -} - -\book { - \header { - dedication = "mir gewidmet" - title = \markup \center-column { "Titel erste Zeile" "Titel zweite Zeile, länger" } - subtitle = "Untertitel" - subsubtitle = #(string-append "Unteruntertitel LilyPond-Version " -(lilypond-version)) - poet = "Dichter" - composer = \markup \center-column { "Komponist" \small "(1847-1973)" } - texttranslator = "Übersetzer" - meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "r" \huge -"um" } - arranger = \markup { \fontsize #8.5 "Be" \fontsize #2.5 "ar" \fontsize -#-2.5 "be" \fontsize #-5.3 "i" \fontsize #7.5 "ter" } - instrument = \markup \bold \italic "Instrument" - piece = "Stück" - } - - \score { - { c'1 } - \header { - piece = "Stück zwei" - opus = "Opus1" - } - } - \markup { - und jetzt... - } - \score { - { c'1 } - \header { - piece = "Stück2" - opus = "Opus2" - } - } -} -@end lilypond - -Wie schon oben gezeigt, können mehrfache @code{\header}-Umgebungen -eingesetzt werden. Wenn das gleiche Feld in mehreren -Umgebungen, wird die letzte vorkommende -Version benutzt. Hier ein kurzes Beispiel: - -@example -\header @{ - composer = "Komponist" -@} -\header @{ - piece = "Stück" -@} -\score @{ - \new Staff @{ c'4 @} - \header @{ - piece = "Neues Stück" % überschreibt die die vorige Definition - @} -@} -@end example - -Wenn @code{\header} innerhalb der @code{\score}-Umgebung definiert wird, -wird normalerweise nur die Information von @code{piece} und @code{opus} -ausgegeben. Musikalische Ausdrücke innerhalb von @code{\score} müssen -vor @code{\header} gesetzt werden. - -@lilypond[quote,verbatim,line-width=11.0\cm] -\score { - { c'4 } - \header { - title = "title" % not printed - piece = "piece" - opus = "opus" - } -} -@end lilypond - -@funindex print-all-headers - -@noindent -Dieses Verhalten kann verändert werden (sodass alle Angaben aus der -überschrift gesetzt werden, wenn sich @code{\header} innerhalb von -@code{\score} befindet), indem man schreibt: - -@example -\paper@{ - print-all-headers = ##t -@} -@end example - -@cindex Copyright -@cindex Tagline - -Die Standardfußzeile ist leer mit Ausnahme der ersten Seite, auf der -das @code{copyright}-Feld aus der @code{\header}-Umgebung eingefügt wird, -und die letzte Seite, auf der das @code{tagline}-Feld eingefügt wird. -Der Standardinhalt von @code{tagline} ist @qq{Music engraving by -LilyPond (@var{version})---www.lilypond.org}. Gut gesetzte Noten werben sehr effektiv -für LilyPond, darum bitten wir darum, diese Zeile stehen zu lassen, -wenn es möglich ist. - -Ein Titelfeld kann vollständig entfernt werden, indem es auf -falsch gesetzt wird: - -@example -\header @{ - tagline = ##f - composer = ##f -@} -@end example - - -@node Custom titles -@subsection Custom titles - -Kompliziertere Anpassungen können vorgenommen werden, indem die -folgenden Variablen innerhalb der @code{\paper}-Umgebung geändert -werden. Die Init-Datei @file{../ly/titling-init.ly} enthält das -Standardverhalten. - -@table @code - -@funindex bookTitleMarkup - -@item bookTitleMarkup -Das ist die Überschrift, die für das gesamte Dokument gilt. Üblicherweise -wird hier der Komponist und die Überschrift des Werkes genannt. - -@funindex scoreTitleMarkup - -@item scoreTitleMarkup -Das ist die Überschrift, die vor jede @code{\score}-Umgebung gesetzt wird. -Überlicherweise wird hier etwa die Bezeichnung eines Satzes notiert -(im @code{piece}-Feld). - -@funindex oddHeaderMarkup - -@item oddHeaderMarkup -Das ist der Seitenkopf für ungerade Seiten. - -@funindex evenHeaderMarkup - -@item evenHeaderMarkup -Das ist der Seitenkopf für gerade Seiten. Wenn undefiniert, wird der -ungerade Seitenkopf eingesetzt. - -Standardmäßig werden die Kopfzeilen so definiert, dass die Seitennummer -sich außen befindet und das Instrument zentriert gesetzt wird. - -@funindex oddFooterMarkup - -@item oddFooterMarkup -Das ist die Fußzeile für ungerade Seiten. - -@funindex evenFooterMarkup - -@item evenFooterMarkup -Das ist die Fußzeile für gerade Seiten. Wenn undefiniert, wird die -ungerade Fußzeile eingesetzt. - -Standardmäßig wird in der Fußzeile auf der ersten Seite das Copyright -und auf der letzten Seite die Tag-Zeile gesetzt. - -@end table - - -@funindex \paper -@cindex Kopfzeile -@cindex Fußzeile -@cindex Seitenlayout -@cindex Layout der Seite -@cindex Titel -@cindex Überschriften - -Die folgende Definition setzt die Überschrift linksbündig und -den Komponisten rechtsbündig auf einer einzelnen Zeile: - -@verbatim -\paper { - bookTitleMarkup = \markup { - \fill-line { - \fromproperty #'header:title - \fromproperty #'header:composer - } - } -} -@end verbatim - - -@node Reference to page numbers -@subsection Reference to page numbers - -Eine bestimmte Stelle der Partitur kann mit einem @code{\label}-Befehl -markiert werden, sowohl auf oberster Ebene als auch innerhalb eines -musikalischen Ausdrucks. Auf diese Marke kann dann verwiesen werden, -um die Seitenzahl zu erhalten, auf der die Marke vorkommt. Der -Verweis wird mit dem Befehl @code{\page-ref} gefordert (innerhalb -von @code{\markup}). - -@c KEEP LY -@lilypond[verbatim,line-width=11.0\cm] -\header { tagline = ##f } -\book { - \label #'ErstePartitur - \score { - { - c'1 - \pageBreak \mark A \label #'ZeichenA - c' - } - } - - \markup { Die erste Partitur fäng auf Seite \page-ref #'ErstePartitur "0" "?" an.} - \markup { Zeichen A befindet sich auf Seite \page-ref #'ZeichenA "0" "?". } -} -@end lilypond - -Der @code{\page-ref}-Textbeschriftungsbefehl braucht drei Argumente: - -@enumerate - -@item die Marke, ein Scheme-Symbol, etwa @code{#'ErstePartitur}, -@item eine Beschriftung, die als Platzhalter benutzt wird, um die Breite des Verweisen zu schätzen, -@item eine Beschriftung, die anstelle der Seitenzahl gesetzt wird, wenn die Marke unbekann ist. -@end enumerate - -Der Grund, warum ein Platzhalter benötigt wird, ist dass zu dem Zeitpunkt, -an dem die Textbeschriftungen ausgewertet werden, noch keine Seitenumbrüche -vorgenommen wurden und die Seitenzahlen deshalb noch nicht bekannt sind. -Um hier ein Problem zu vermeiden, wird die eigentliche Auswertung der -Textbeschriftung erst später ausgeführt, die Größe des Textes muss aber -schon vorher bekannt sein. Die Größe wird mithilfe des Platzhalters -bestimmt. Wenn eine Partitur zwischen 10 und 99 Seiten hat, kann man -"00" schreiben, also eine zweistellige Zahl. - -@code{\label} -@code{\page-ref} - -@predefined -@funindex \label, -@funindex \page-ref. -@endpredefined - - -@node Table of contents -@subsection Table of contents - -Ein Inhaltsverzeichnis kann eingefügt werden mit dem Befehl -@code{\markuplines \table-of-contents}. Die Elemente, die im -Inhaltsverzeichnis aufgelistet werden sollen, werden mit dem -@code{\tocItem}-Befehl markiert, welches sowohl auf höchster -Ebene als auch in einem musikalischen Ausdruck verwendet werden -kann. - -@verbatim -\markuplines \table-of-contents -\pageBreak - -\tocItem \markup "Erste Partitur" -\score { - { - c' % ... - \tocItem \markup "Ein bestimmter Punkt innerhalb der ersten Partitur" - d' % ... - } -} - -\tocItem \markup "zweite Partitur" -\score { - { - e' % ... - } -} -@end verbatim - -Die Beschriftungen, die benutzt werden um das Inhaltsverzeichnis -zu formatieren, sind in der @code{\paper}-Umgebung definiert. -Die Standardformatierungselemente sind @code{tocTitleMarkup} -um die Überschrift zu formatieren und @code{tocItemMarkup} um -die einzelnen Inhaltselemente zu formatieren, bestehend aus -dem Titelelement und einer Seitenzahl. Die Variablen können -durch den Benutzer geändert werden: - -@verbatim -\paper { - %% Übersetzung der Inhaltsverzeichnisüberschrift nach französisch: - tocTitleMarkup = \markup \huge \column { - \fill-line { \null "Table des matières" \null } - \hspace #1 - } - %% hier größere Schriftarten - tocItemMarkup = \markup \large \fill-line { - \fromproperty #'toc:text \fromproperty #'toc:page - } -} -@end verbatim - -Die Inhaltsverzeichniselemente Text und Seitenzahl werden -in der Definition von @code{tocItemMarkup} aufgerufen mit -@code{#'toc:text} und @code{#'toc:page}. - -Neue Befehle und Beschriftungen können auch definiert werden, -um eigene Inhaltsverzeichnisse zu gestalten: - -@itemize - -@item zuerst muss eine neue Beschriftungsvariable in der -@code{\paper}-Umgebung definiert werden - -@item dann muss die musikalische Funktion definiert werden, die -ein Element zum Inhaltsverzeichnis hinzufügt, indem die neue -Variable benutzt wird. - -@end itemize - -Das folgende Beispiel definiert einen neuen Stil um Akt-Bezeichnungen -einer Oper in das Inhaltsverzeichnis aufzunehmen: - -@verbatim -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) -@end verbatim - -@lilypond[line-width=11.0\cm] -\header { tagline = ##f } -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) - -\book { - \markuplines \table-of-contents - \tocAct \markup { Atto Primo } - \tocItem \markup { Coro. Viva il nostro Alcide } - \tocItem \markup { Cesare. Presti omai l'Egizzia terra } - \tocAct \markup { Atto Secondo } - \tocItem \markup { Sinfonia } - \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } - \markup \null -} -@end lilypond - - -@seealso -Installierte Dateien: @file{../ly/@/toc@/-init@/.ly}. - -@funindex \table-of-contents -@funindex \tocItem - -@predefined -@code{\table-of-contents}, -@code{\tocItem}. -@endpredefined - - -@node Working with input files -@section Working with input files - -@menu -* Including LilyPond files:: -* Different editions from one source:: -* Text encoding:: -* Displaying LilyPond notation:: -@end menu - - -@node Including LilyPond files -@subsection Including LilyPond files - -@funindex \include -@cindex einfügen von Dateien -@cindex Dateien einfügen - -Ein größeres Projekt kann in einzelne Dateien aufteteilt werden. -Um eine andere Datei einzubinden, kann der Befehl - -@example -\include "andereDatei.ly" -@end example - -@noindent -benutzt werden. - -Die Zeile @code{\include "andereDatei.ly"} benimmt sich genauso, -also ob der Inhalt der Datei @code{andereDatei.ly} komplett in die -Hauptdatei eingefügt werden würde. So kann man für ein größeres -Projekt die einzelnen Stimmen der Instrumente getrennt notieren -und sie dann in einer Partitur-Datei benutzen. Meistens werden -in den eingefügten Dateien einige Variablen definiert, die dann -auch in der Hauptdatei eingesetzt werden können. Mit Marken (Tags) -gekennzeichnete Abschnitte können eingesetzt werden, um die -entsprechenden Noten etc. an verschiedenen Stellen in der Datei -zur Verfügung zu stellen. Siehe auch @ref{Different editions from -one source}. - -Auf Dateien im aktuellen Verzeichnis kann einfach mit dem Dateinamen -nach dem @code{\include}-Befehl verwiesen werden. Dateien an anderen -Stellen können eingebunden werden, indem entweder ein vollständiger -Pfad oder ein relativer Pfad zu der Datei angegeben wird. Hierbei -sollten die für UNIX typischen Schrägstriche (/) und nicht die -rückwärtsgeneigten von Windows (\) verwendet werden, um die Verzeichnisse -zu trennen. Wenn etwa die Datei @file{kram.ly} ein Verzeichnis -höher liegt als das aktuelle Verzeichnis, sollte der Befehl so -aussehen: - -@example -\include "../kram.ly" -@end example - -@noindent -Wenn die Orchesterstimmen andererseits in einem Unterordner mit -der Bezeichnung @code{stimmen} liegen, sieht er folgendermaßen -aus: - -@example -\include "stimmen/VI.ly" -\include "stimmen/VII.ly" -... etc -@end example - -Dateien, die eingebunden werden sollen, können selber auch wiederum -ein @code{\include} enthalten. Diese Einbindung zweiter Ebene -werden erst interpretiert, wenn sie sich in der Hauptdatei befinden, -sodass die Pfadangaben hier nicht relativ zur eingebundenen Datei, -sondern relativ zur Hauptdatei gesetzt werden müssen. Dieses Verhalten -kann jedoch auch verändert werden, indem man lilypond die Option -@code{-drelative-includes} auf der Kommandozeile zuweist (oder indem -man den Befehl @code{#(ly:set-option 'relative-includes #t)} an den -Beginn der Quelldatei schreibt). Mit @code{relative-includes} wird -der Pfad jedes @code{\include}-Befehls als relativ zu der Datei angenommen, -in der sich der Befehl befindet. Dieses Verhalten wird empfohlen und wird -in zukünftigen Versionen von LilyPond den Standard darstellen. - -Dateien können auch aus einem Verzeichnis eingebunden werden, -dass im Suchpfad von LilyPond liegt. Hierzu muss auf der -Kommandozeile das entsprechende Verzeichnis angegeben werden -und die Dateien, die eingebunden werden, müssen nur mit ihrem Namen -notiert sein. Wenn etwa die Datei @file{Haupt.ly} kompiliert -werden soll, die Dateien aus dem Unterverzeichnis @file{stimmen} -einbindet, müssen sie sich im Verzeichnis von @file{Haupt.ly} -befinden und dann LilyPond folgendermaßen aufrufen: - -@example -lilypond --include=stimmen Haupt.ly -@end example - -@noindent -In @file{Haupt.ly} steht: - -@example -\include "VI.ly" -\include "VII.ly" -... usw. -@end example - -Dateien, die in vielen Partituren verwendet werden sollen, können -im LilyPond-Verzeichnis @file{../ly} gespeichert werden. (Die -Stelle, an der dieses Verzeichnis sich befindet, hängt vom Betriebssystem -ab, siehe hierzu @rlearning{Other sources of information}). Dateien -in diesem Verzeichnis können einfach mit ihrem Namen eingefügt werden. -So werden auch die Sprachdateien wie etwa @file{deutsch.ly} eingefügt. - -LilyPond lädt eine Anzahl an Dateien, wenn das Programm aufgerufen wird. -Diese Dateien sind für den Benutzer nicht ersichtlich, aber die Dateien -können identifiziert werden, indem LilyPond auf der Komandozeile mit -Option aufgerufen wird: @code{lilypond --verbose}. Hiermit wird -neben anderer Information auch eine Liste and Pfaden und Dateien -aufgeführt, die LilyPond benutzt. Die wichtigeren Dateien werden -im Abschnitt @rlearning{Other sources of information} besprochen. -Diese Dateien können verändert werden, aber Änderungen gehen verloren, -wenn eine neue LilyPond-Version installiert wird. - -Eine einfache Beispiele, die die Benutzung von @code{\include} demonstrieren, -sind dargestellt in -@rlearning{Scores and parts}. - -@seealso -Handbuch zum Lernen: -@rlearning{Other sources of information}, -@rlearning{Scores and parts}. - -@knownissues - -Wenn eine Datei eingebunden wird, deren Name einer Datei aus -dem Installationsverzeichnis von LilyPond entspricht, wird die -installierte Datei anstelle der eigenen verwendet. - - -@node Different editions from one source -@subsection Different editions from one source - -Es gibt verschiedene Funktionen, die es möglich machen, unterschiedliche -Versionen einer Partitur aus der gleichen Quelldatei zu produzieren. -Variablen werden am besten eingesetzt, wenn es darum geht, längere -Notenpassagen und/oder Anmerkungen/Textmarken miteinander auf -verschiedene Weise zu kombinieren. Tag-Marken dagegen werden am -besten eingesetzt, wenn eine von mehreren kurzen alternativen -Notenabschnitten ausgewählt werden soll. Egal welche Methode am -Ende eingesetzt wird: Es erleichtert die Arbeit in jedem Fall, wenn -die eigentlichen Noten und die Struktur der Paritur voneinander -getrennt notiert werden -- so kann die Struktur geändert werden, -ohne dass man Änderungen an den Noten vornehmen muss. - -@menu -* Using variables:: -* Using tags:: -@end menu - -@node Using variables -@unnumberedsubsubsec Using variables - -@cindex Variablen, Benutzung - -Wenn Notenabschnitt in Variablen definiert werden, können sie -an unterschiedlichen Stellen in der Partitur eingesetzt werden, -siehe auch @rlearning{Organizing pieces with variables}. Zum -Beispiel enthält eine Vokalpartitur für ein @notation{a cappella} -Stück oft einen Klavierauszug, der das Einüben einfacher macht. -Der Klavierauszug enthält die gleichen Noten, sodass man sie nur -einmal notieren muss. Noten aus zwei Variablen können auf einem -System kombiniert werden, siehe @ref{Automatic part combining}. -Hier ein Beispiel: - -@lilypond[verbatim,quote] -sopranoMusic = \relative c'' { a4 b c b8( a)} -altoMusic = \relative g' { e4 e e f } -tenorMusic = \relative c' { c4 b e d8( c) } -bassMusic = \relative c' { a4 gis a d, } -allLyrics = \lyricmode {King of glo -- ry } -<< - \new Staff = "Soprano" \sopranoMusic - \new Lyrics \allLyrics - \new Staff = "Alto" \altoMusic - \new Lyrics \allLyrics - \new Staff = "Tenor" { - \clef "treble_8" - \tenorMusic - } - \new Lyrics \allLyrics - \new Staff = "Bass" { - \clef "bass" - \bassMusic - } - \new Lyrics \allLyrics - \new PianoStaff << - \new Staff = "RH" { - \set Staff.printPartCombineTexts = ##f - \partcombine - \sopranoMusic - \altoMusic - } - \new Staff = "LH" { - \set Staff.printPartCombineTexts = ##f - \clef "bass" - \partcombine - \tenorMusic - \bassMusic - } - >> ->> -@end lilypond - -Unterschiedliche Partituren, die entweder nur den Chor oder das -Klavier zeigen, können produziert werden, indem die Struktur -verändert wird; die Noten müssen dazu nicht verändert werden. - -Für längere Partituren können Variablen in eigene Dateien notiert -werden, die dann eingebunden werden, siehe @ref{Including -LilyPond files}. - - -@node Using tags -@unnumberedsubsubsec Using tags - -@cindex Tag -@cindex Marke -@cindex markierte Noten entfernen -@cindex markierte Noten behalten - -@funindex \tag -@funindex \keepWithTag -@funindex \removeWithTag -@funindex tag -@funindex keepWithTag -@funindex removeWithTag - -Der @code{\tag #'@var{TeilA}}-Befehl markiert einen musikalischen -Ausdruck mit der Bezeichnung @var{TeilA}. Ausdrücke, die auf diese -Weise markiert werden, können mit ihrer Bezeichnung später ausgewählt -bzw. ausgefiltert werden. Das geschieht mit den Befehlen -@code{\keepWithTag #'@var{Bezeichnung}} bzw. @code{\removeWithTag #'@var{Bezeichnung}}. -Die Wirkung dieser Filter auf die markierten Notenabschnitte ist -wie folgt: - -@multitable @columnfractions .5 .5 - -@headitem Filter - @tab Resultat - -@item -Markierte Noten mit vorgesetztem @code{\keepWithTag #'@var{Bezeichnung}} - @tab Unmarkierte Noten und Noten mit der Marke @var{Bezeichnung} werden - gesetzt, Noten mit einer anderen Marke werden nicht angezeigt. - -@item -Markierte Noten mit vorgesetztem @code{\removeWithTag #'@var{Bezeichnung}} - @tab Unmarkierte Noten und Noten mit einer anderen Marke als - @var{Bezeichnung} wird angezeigt, Noten markiert mit @var{Bezeichnung} - werden nicht angezeigt. - -@item -Markierte Noten, weder mit vorgesetztem @code{\keepWithTag} noch -@code{\removeWithTag} - @tab Alle markierten und unmarkierten Noten werden angezeigt. - -@end multitable - -Die Argumente der Befehle @code{\tag}, @code{\keepWithTag} und -@code{\removeWithTag} sollten ein Symbol sein (wie etwa -@code{#'score} oder @code{#'part}), gefolgt von einem musikalischen -Ausdruck. - -Im folgenden Beispiel erscheinen zwei Versionen der Noten, eine -zeigt Triller in normaler Notation, die andere zeigt sie ausgeschrieben: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \keepWithTag #'trills \music -} -\score { - \keepWithTag #'expand \music -} -@end lilypond - -@noindent -Entsprechend können auch Abschnitte ausgeschlossen werden; das -erfordert manchmal weniger Schreibarbeit: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \removeWithTag #'expand - \music -} -\score { - \removeWithTag #'trills - \music -} -@end lilypond - -Marken können auch auf Artikulationen, Text usw angewendet werden, -indem man ihnen - -@example --\tag #'@var{your-tag} -@end example - -@noindent -voranstellt (jedoch nach der Note, an die sie gebunden sind). Mit -diesem Code etwa könnte man entweder Fingersatz oder aber einen -Text ausgeben: - -@example -c1-\tag #'finger ^4 -c1-\tag #'warn ^"Achtung!" -@end example - -Mehrfache Marken können mithilfe von mehreren @code{\tag}-Befehlen -notiert werden: - -@lilypond[quote,verbatim] -music = \relative c'' { - \tag #'a \tag #'both { a a a a } - \tag #'b \tag #'both { b b b b } -} -<< -\keepWithTag #'a \music -\keepWithTag #'b \music -\keepWithTag #'both \music ->> -@end lilypond - -Mehrfache @code{\removeWithTag}-Filter können auf einen -musikalischen Ausdruck angewendet werden, um mehrere unterschiedliche -markierte Abschnitte aus dem Druckbild zu entfernen. - -@lilypond[verbatim,quote] -music = \relative c'' { -\tag #'A { a a a a } -\tag #'B { b b b b } -\tag #'C { c c c c } -\tag #'D { d d d d } -} -{ -\removeWithTag #'B -\removeWithTag #'C -\music -} -@end lilypond - -Zwei oder mehr @code{\keepWithTag}-Filter in einem musikalischen -Ausdruck bewirken, dass @emph{alle} markierten Abschnitte entfernt -werden, weil der erste Befehl alle markierten Abschnitt außer dem -im Befehl genannten wegfiltert und der zweite Befehl dann auch diesen -eben genannten zusätzlich entfernt. - - -@seealso -Handbuch zum Lernen: -@rlearning{Organizing pieces with variables}. - -Notationsreferenz: -@ref{Automatic part combining}, -@ref{Including LilyPond files}. - - -@ignore -@c This warning is more general than this placement implies. -@c Rests are not merged whether or not they come from tagged sections. -@c Should be deleted? -td - -@knownissues - -Multiple rests are not merged if you create a score with more -than one tagged section at the same place. - -@end ignore - - -@node Text encoding -@subsection Text encoding - -LilyPond benutzt alle Zeichen, die durch das Unicode-Konsortium -und ISO/IEC 10646 definiert sind. Hiermit wird den Zeichen -fast aller Schriftsysteme der Welt ein eindeutiger Name und ein -Code-Punkt zugewiesen, mit dem sie identifizierbar sind. Unicode -kann mit mehreren Zeichenkodierungen verwirklicht werden. LilyPond -benutzt die UTF-8-Kodierung (UTF = Unicode Transformation Format), -in der die normalen Zeichen des lateinischen Alphabets mit einem -Byte dargestellt werden, während alle anderen Zeichen zwischen -zwei und vier Byte Länge haben. - -Das Aussehen des Zeichens wird bestimmt durch die gerade benutzte -Schriftart (engl. font). In einer Schriftartdatei werden die -Nummern der Unicode-Zeichen einem bestimmten Glyphen zugeordnet. -LilyPond verwendet die Pango-Bibliothek um mehrsprachige Texte -und komplexe Skripte korrekt zu setzen. - -LilyPond verändert die Kodierung der Eingabedatei nicht. Das heißt, -dass jeder Text -- Überschriften, Gesangstext, Spielanweisungen etc. -- -der nicht nur aus ASCII-Zeichen besteht, in UTF-8 kodiert sein -musst. Am einfachsten geht das, indem man einen Texteditor -einsetzt, der mit Unicode-Zeichen umgehen kann. Die meisten -modernen weit verbreiteten Editoren besitzen heute UTF-8-Unterstützung, -wie etwa vim, Emacs, jEdit oder GEdit. Alle MS Windows-Systeme -nach NT benutzen Unicode intern, sodass sogar Notepad Dateien -in UTF-8 lesen und speichern kann. Ein Editor mit mehr -Funktionen unter Windows ist BabelPad oder Notepad++. - -Wenn eine LilyPond-Eingabedatei nicht-ASCII-Zeichen enthält -und nicht in UTF-8 gespeichert ist, gibt es folgende Fehlermeldung: - -@example -FT_Get_Glyph_Name () error: invalid argument -@end example - -Heir ein Beispiel mit Kyrilliza, hebräischem und portugiesischem Text: - -@lilypond[quote] -%c No verbatim here as the code does not display correctly in PDF -% Cyrillic -bulgarian = \lyricmode { - Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. -} - -% Hebrew -hebrew = \lyricmode { - זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. -} - -% Portuguese -portuguese = \lyricmode { - à vo -- cê uma can -- ção legal -} - -\relative { - c2 d e f g f e -} -\addlyrics { \bulgarian } -\addlyrics { \hebrew } -\addlyrics { \portuguese } -@end lilypond - -Um einen einzelnen Buchstaben zu notieren, für den die Unicode-Buchstabenfolge -bekannt ist, der aber nicht auf der Tastatur zu finden ist, kann -der Befehl @code{\char ##xhhhh} innerhalb einer @code{\markup}-Umgebung -benutzt werden. Hierbei bedeutet @code{hhhh} die hexadezimale Zahl -für das erforderliche Zeichen. Mit @code{\char ##x03BE} wird -beispielsweise das Unicode-Zeichen U+03BE notiert, welches die -Unicode-Bezeichnung @qq{Greek Small Letter Xi} hat. Alle existierenden -Unicode-Zeichen können auf diese Weise notiert werden, und wenn für alle -Zeichen dieses Format angewandt wird, muss die Datei nicht im utf-8-Format -gespeichert werden. Es muss natürlich auch noch eine Schriftart auf -dem System installiert sein, die die notierten Zeichen darstellen kann. - -Das nächste Beispiel zeigt Unicode-Zeichen an vier Stellen mit dem -Zahlencode notiert: in einem Übungszeichen, als Artikulationszeichen, -im Gesangstext und als normaler Text außerhalb der Partitur. - -@lilypond[quote,verbatim] -\score { - \relative c'' { - c1 \mark \markup { \char ##x03EE } - c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } - } - \addlyrics { O \markup { \concat{ Ph \char ##x0153 be! } } } -} -\markup { "Copyright 2008--2009" \char ##x00A9 } -@end lilypond - -Um das Copyright-Zeichen zu notieren, kann folgender Code eingesetzt werden: - -@example -\header @{ - copyright = \markup @{ \char ##x00A9 "2008" @} -@} -@end example - - -@node Displaying LilyPond notation -@subsection Displaying LilyPond notation - -@funindex \displayLilyMusic - -Ein musikalischer Ausdruck in LilyPond-Notation kann mit der Funktion -@code{\displayMusic} angezeigt werden. Der Code - -@example -@{ - \displayLilyMusic \transpose c a, @{ c e g a bes @} -@} -@end example - -@noindent -etwa wird ausgeben: - -@example -@{ a, cis e fis g @} -@end example - -Normalerweise werden diese Zeilen zusammen mit allen anderen -Nachrichten auf der Kommandozeile ausgegeben. Um sie separat zu -speichern und das Ergebnis von @code{\displayMusic} weiterzubenutzen, -kann die Ausgabe mit folgendem Befehl in eine Datei umgeleitet werden: - -@c TODO What happens under Windows? - -@example -lilypond file.ly >display.txt -@end example - - - -@node Controlling output -@section Controlling output - -@menu -* Extracting fragments of music:: -* Skipping corrected music:: -@end menu - - -@node Extracting fragments of music -@subsection Extracting fragments of music - -Es ist möglich, kleine Abschnitte einer großen Partitur direkt aus der -Quelldatei zu erzeugen. Das kann damit verglichen werden, dass man -mit der Schere bestimmte Regionen ausschneidet. - -Es wird erreicht, indem man die Takte, die ausgeschnitten werden sollen -(engl. to clip = ausschneiden), extra definiert. Mit folgender -Defintion beispielsweise - -@verbatim -\layout { - clip-regions - = #(list - (cons - (make-rhythmic-location 5 1 2) - (make-rhythmic-location 7 3 4))) -} -@end verbatim - -@noindent -wird ein Fragment ausgeschnitten, dass auf der Mitte des fünften Taktes -beginnt und im siebten Takt endet. Die Bedeutung von @code{5 1 2} ist: -nach einer Halben in Takt fünf, @code{7 3 4} heißt: nach drei Vierteln -in Takt 7. - -Weitere Bereiche, die ausgeschnitten werden sollen, können definiert -werden, indem mehrere derartige Paare definiert werden. - -Um diese Funktion auch nutzen zu können, muss LilyPond mit dem -Parameter @code{-dclip-systems} aufgerufen werden. Die Schnipsel -werden als EPS ausgegeben und dann zu PDF und PNG konvertiert, wenn -diese Formate auch als Parameter angegeben werden. - -Zu mehr Information über Ausgabeformate siehe @rprogram{Invoking lilypond}. - - -@node Skipping corrected music -@subsection Skipping corrected music - - -@funindex skipTypesetting -@funindex showFirstLength -@funindex showLastLength - -Wenn man Noten eingibt oder kopiert, sind meistens nur die Noten nahe dem -Ende (wo gerade neue Noten notiert wurden) wichtig für Kontrolle und -Korrektur. Um die Korrektur zu beschleunigen, kann eingestellt werden, -dass nur die letzten paar Takte angezeigt werden. Das erreicht man -mit dem Befehl - -@verbatim -showLastLength = R1*5 -\score { ... } -@end verbatim - -@noindent -in der Quelldatei. Damit werden nur die letzten fünf Takte (in einem -4/4-Takt) eines jeden @code{\score}-Abschnitts übersetzt. Besonders -bei längeren Stücken ist es meistens sehr viel schneller, nur einen -kleinen Teil des Stückes zu setzen als die gesamte Länge. Wenn man -am Anfang eines Stückes arbeitet (weil etwa ein neuer Teil hinzugefügt -werden soll), kann auch die @code{showFirstLength}-Eigenschaft -nützlich sein. - -Nur bestimmte Teile einer Partitur zu überspringen, kann mit der -Eigenschaft @code{Score.skipTypesetting} sehr genau kontrolliert -werden. Für den Bereich, für den sie auf @qq{wahr} gesetzt wird, -wird kein Notensatz ausgegeben. - -Diese Eigenschaft kann auch benutzt werden, um die MIDI-Ausgabe zu -kontrollieren. Hiermit werden alle Ereignisse, auch Tempo- und -Instrumentenwechsel ausgelassen. Man muss also sehr genau darauf -achten, dass nichts unerwartetes geschieht. - -@lilypond[quote,fragment,ragged-right,verbatim] -\relative c'' { - c8 d - \set Score.skipTypesetting = ##t - e e e e e e e e - \set Score.skipTypesetting = ##f - c d b bes a g c2 } -@end lilypond - -In polyphoner Notation wirkt sich @code{Score.skipTypesetting} auf -alle Stimmen und Systeme aus, sodass noch mehr Zeit bei der -Übersetzung der Datei gespart wird. - - -@node MIDI output -@section MIDI output - -@cindex Klang -@cindex MIDI - -MIDI (Musical Instrument Digital Interface) ist ein Standard zur -Kontrolle und Interaktion mit digitalen Instrumenten. Eine -MIDI-Datei ist eine Anzahl von Noten auf einer Anzahl von -Bändern/Stimmen. Es ist keine eigentliche Klangdatei, denn man -benötigt spezielle Programme die die Notenereignisse in Klang -umwandeln können. - -Der Notensatz von LilyPond kann in MIDI umgewandelt werden, so dass -man sich anhören kann, was man notiert hat. Das hilft oft sehr gut -bei der Überprüfung: falsche Oktaven oder falsche Versetzungszeichen -lassen sich meist sehr gut hören. - -Die MIDI-Ausgabe benötigt einen Kanal für jedes System und einen für -globale Einstellungen. Darum sollte die Quelldatei für eine MIDI-Datei -nicht mehr als 15 Systeme (oder 14 wenn kein Schlagzeug benützt wird) -besitzen. Jedes weitere System bleibt stumm. - - -@menu -* Creating MIDI files:: -* MIDI block:: -* What goes into the MIDI output?:: -* Repeats in MIDI:: -* Controlling MIDI dynamics:: -* Percussion in MIDI:: -@end menu - - -@node Creating MIDI files -@subsection Creating MIDI files - -Um eine MIDI-Datei aus einer LilyPond-Quelldatei zu erstellen, muss -eine @code{\midi}-Umgebung zu der @code{\score}-Umgebung hinzugefügt -werden, etwa so: - -@example -\score @{ - @var{...Noten...} - \midi @{ @} -@} -@end example - -Wenn in einer @code{\score}-Umgebung nur eine @code{\midi}-Umgebung, -aber keine @code{\layout}-Umgebung vorkommt, wird nur MIDI produziert. -Wenn auch die Notation gewünscht ist, muss zusätzlich die -@code{\layout}-Umgebung vorhanden sein: - -@example -\score @{ - @var{...music...} - \midi @{ @} - \layout @{ @} -@} -@end example - -Tonhöhen, Rhythmen, Überbindungen, Dynamik und Tempoänderungen werden -korrekt in das MIDI-Format übersetzt. Dynamikzeichen, Crescendo und -Decrescendo werden in den MIDI-Lautstärkekanal übertragen. Dynamikzeichen -werden in einen bestimmten Lautstärkenwert übersetzt, Crescendo und -Decrescendo erreichen einen Übergang zwischen Lautstärkewerten. -Die Wirkung von Dynamikzeichen kann auch aus der MIDI-Datei entfernt -werden. Siehe hierzu @ref{MIDI block}. - -Das Anfangstempo und spätere Tempoänderungen können mit dem -@code{\tempo}-Befehl innerhalb der Notation notiert werden. Er -bewirkt Tempoänderungen auch in der MIDI-Datei. Der Befehl setzt -gleichzeitig auch eine Tempobezeichnung in die Noten, welches aber -auch unterdrückt werden kann, siehe @ref{Metronome marks}. Eine -andere möglichkeit, ein eigenes MIDI-Tempo anzugeben, wird weiter -unten gezeigt, siehe @ref{MIDI block}. - - -@unnumberedsubsubsec Instrument names - -@cindex Instrumentbezeichnungen - -@funindex Staff.midiInstrument - -Das MIDI-Instrument, mit dem ein bestimmtes System wiedergegeben -werden soll, wird durch die @code{Staff.midiInstrument}-Eigenschaft -bestimmt, die auf eine Instrumentenbezeichnung gesetzt werden muss. -Die Bezeichnungen sind aufgelistet in @ref{MIDI instruments} und müssen -in der dort definierten Schreibweise notiert werden. - -@example -\new Staff @{ - \set Staff.midiInstrument = #"glockenspiel" - @var{...Noten...} -@} -@end example - -@example -\new Staff \with @{midiInstrument = #"cello"@} @{ - @var{...Noten...} -@} -@end example - -Wenn die Schreibweise nicht genau einem definierten Instrument aus -der Liste entpsricht, wird ein Piano-Klang benutzt (@code{"acoustic grand"}). - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-midi-output-to-one-channel-per-voice.ly} - -@knownissues - -Veränderungen der MIDI-Lautstärke sind nur effektiv, wenn sie zu Beginn -einer Note angefordert werden, sodass die Lautstärke während einer Notendauer -nicht geändert werden kann. - -Nicht alle MIDI-Spieler können Tempoänderungen richtig wiedergeben. -Spieler, die hierzu in der Lage sind, sind unter Anderen MS Windows Media -Player und @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. - - -@node MIDI block -@subsection MIDI block - -@cindex MIDI-Umgebung - -Eine @code{\midi}-Umgebung muss innerhalb von einer @code{\score}-Umgebung -vorkommen, wenn MIDI-Ausgabe gewünscht ist. Sie entspricht der -@code{\layout}-Umgebung, aber ist etwas einfacher aufgebaut. Oft wird -die MIDI-Umgebung einfach leer gelassen, aber hier können auch -Kontexte umgeändert werden, neue Kontexte definiert werden oder -neue Werte definiert werden. Das folgende Beispiel etwa definiert -das MIDI-Tempo, ohne dass in der Partitur eine Metronombezeichnung -gesetzt wird: - -@example -\score @{ - @var{...Noten...} - \midi @{ - \context @{ - \Score - tempoWholesPerMinute = #(ly:make-moment 72 4) - @} - @} -@} -@end example - -Hier wird das Tempo auf 72 Viertelnoten pro Minute definiert. Wenn -das Tempo auf diese Weise definiert wird, kann keine punktierte -Note als Einheit angegeben werden. Wenn sie benötigt wird, muss -man sie in kleinere Einheiten auflösen. Ein Tempo von 90 punktierten -Viertelnoten pro Minute kann beispielsweise dargestellt werden -als 270 Achtelnoten pro Minute: - -@example -tempoWholesPerMinute = #(ly:make-moment 270 8) -@end example - -@cindex MIDI-Kontextdefinitionen - -Kontextdefinitionen des @code{\midi}-Kontextes entsprechen -der Syntax, wie sie in der @code{\layout}-Umgebung benutzt -wird. Klangübersetzungsmodule werden @code{performer} -genannt. Die Kontexte für die MIDI-Ausgabe sind in der -Datei @file{../ly/@/performer@/-init@/.ly} definiert, siehe -@rlearning{Other sources of information}. Um beispielsweise -die Auswirkung von Dynamikzeichen aus der MIDI-Ausgabe zu -entfernen, müssen folgende Zeilen eingefügt werden: - -@example -\midi @{ - ... - \context @{ - \Voice - \remove "Dynamic_performer" - @} -@} -@end example - -Eine MIDI-Ausgabe wird nur erstellt, wenn die @code{\midi}-Umgebung -in eine Partiturumgebung eingefügt wird, die mit dem Befehl -@code{\score} beginnt. Wenn eine Partitur explizit etwa mit -@code{\new Score} begonnen wird, und sich die MIDI-Umgebung hierin -befindet, wird keine Ausgabe produziert. Eine Lösung ist es, sowohl -die @code{\new Score}- als auch die @code{\midi}-Umgebungen in eine -@code{\score}-Umgebung einzuschließen. - -@example -\score @{ - \new Score @{ @dots{}Noten@dots{} @} - \midi @{ @} -@} -@end example - - -@node What goes into the MIDI output? -@subsection What goes into the MIDI output? - - -@unnumberedsubsubsec Supported in MIDI - -@cindex Tonhöhen in MIDI -@cindex MIDI, Tonhöhen -@cindex Vierteltöne in MIDI -@cindex MIDI, Vierteltöne -@cindex Mikrotöne in MIDI -@cindex MIDI, Mikrotöne -@cindex Akkordsymbole in MIDI -@cindex MIDI, Akkordsymbole -@cindex Rhythmen in MIDI -@cindex MIDI, Rhythmen - -Die folgenden Notationselemente werden in die MIDI-Ausgabe aufgenommen: - -@itemize -@item Tonhöhen -@item Mikrotöne (siehe @ref{Accidentals}. Für die Ausgabe wird ein -Spieler benötigt, der Tonhöhen verändern kann.) -@item Akkorde, die als Symbole notiert werden -@item Rhythmen, die als Dauern notiert sind, inklusive N-tolen -@item Tremolo, das ohne @q{@code{:}[@var{Zahl}]} notiert ist -@item Überbindungen -@item Dynamikzeichen -@item Crescendi, decrescendi zu mehreren Noten -@item Tempoänderungen, die mit einer Tempo-Bezeichnung eingegeben werden -@item Gesangstext -@end itemize - - -@unnumberedsubsubsec Unsupported in MIDI - -Folgende Notationselemente werden nicht in die MIDI-Ausgabe einbeozogen: - -@itemize -@item Rhythmus, der als Anmerkung notiert wird, bspw. Swing -@item Tempoveränderungen, die als Anmerkung ohne Tempobezeichnung notiert werden -@item Staccato und andere Artikultationen und Ornamente -@item Legato- und Phrasierungsbögen -@item Crescendi, decrescendi zu einer einzelnen Note -@item Tremolo, notiert mit @q{@code{:}[@var{number}]} -@item Bezifferter Bass -@item Akkorde mit Mikrotönen -@end itemize - - -@node Repeats in MIDI -@subsection Repeats in MIDI - -@cindex Wiederholungen in MIDI -@cindex MIDI und Wiederholungen - -@funindex \unfoldRepeats - -Mit einigen Veränderungungen im Notentext können alle Wiederholungstypen -auch in der MIDI-Ausgabe wiedergegeben werden. Das wird erreicht, indem -die @code{\unfoldRepeats}-Funktion eingesetzt wird. Diese Funktion -verändert alle Wiederholungen in ausgeschriebene Noten. - -@lilypond[quote,verbatim] -\unfoldRepeats { - \repeat tremolo 8 {c'32 e' } - \repeat percent 2 { c''8 d'' } - \repeat volta 2 {c'4 d' e' f'} - \alternative { - { g' a' a' g' } - {f' e' d' c' } - } -} -\bar "|." -@end lilypond - -Wenn eine Partitur mit diesem Befehl erstellt wird, ist er notwendig, -zwei @code{\score}-Umgebungen einzurichten: in der einen werden die -Wiederholungen ausgeschrieben und nur eine MIDI-Ausgabe produziert, -in der anderen werden die Wiederholungen notiert und als Partitur -gesetzt. Das Beispiel gibt einen Hinweis, wie eine derartige Datei -aussehen kann: - -@example -\score @{ - @var{..music..} - \layout @{ .. @} -@} -\score @{ - \unfoldRepeats @var{..music..} - \midi @{ .. @} -@} -@end example - - -@node Controlling MIDI dynamics -@subsection Controlling MIDI dynamics - -Dynamik in der MIDI-Ausgabe wird durch den Dynamic_performer -erstellt, welcher sich in einem @code{Voice}-Kontext befindet. -Es ist möglich, sowohl die generelle Lautstärke einer MIDI-Datei -als auch relative Lautstärken von Dynamikanweisungen und auch -relative Lautstärke von einzelnen Instrumenten einzustellen. - - -@unnumberedsubsubsec Dynamic marks - - -Dynamikanweisungen werden als ein bestimmter Bruch der insgesamt -zur Verfügung stehenden MIDI-Lautstärke notiert. Die Standardbrüche -reichen von 0,25 für @notation{ppppp} bis hin zu 0,95 für -@notation{fffff}. Diese Anweisung befinden sich in der Datei -@file{../scm/midi.scm}, siehe auch @rlearning{Other sources of information}. -Diese Brüche können nach Belieben geändert oder erweitert werden, indem -eine Funktion erstellt wird, die ein Dynamikzeichen als Argument -nimmt und den erforderlichen Bruch ausgibt; schließlich muss noch -@code{Score.dynamicAbsoluteVolumeFunction} auf diese Funktion -gesetzt werden. - -Beispielhaft soll gezeigt werden, wie man eine @notation{Rinforzando}-Dynamik, -@code{\rfz}, auch in die MIDI-Ausgabe übernehmen kann. Gleiches gilt -für neue, selbstdefinierte Dynamikzeichen, die in den Standarddefinitionen -nicht enthalten sind. Die Scheme-Funktion, die hier definiert wird, -setzt den Bruch von 0,9 für eine rfz-Anweisung und ruft andernfalls die -Standardanweisungen auf: - -@lilypond[verbatim,quote] -#(define (myDynamics dynamic) - (if (equal? dynamic "rfz") - 0.9 - (default-dynamic-absolute-volume dynamic))) - -\score { - \new Staff { - \set Staff.midiInstrument = #"cello" - \set Score.dynamicAbsoluteVolumeFunction = #myDynamics - \new Voice { - \relative c'' { - a\pp b c-\rfz - } - } - } - \layout {} - \midi {} -} -@end lilypond - -Alternativ, insbesondere wenn die gesamte Tabelle der MIDI-Lautstärken -umdefiniert werden soll, ist es besser, die -@notation{default-dynamic-absolute-volume}-Prozedur in der Datei -@file{../scm/midi.scm} und die hiermit verknüpfte Tabelle als Modell -zu benutzen. Das letzte Beispiel dieses Abschnittes zeigt, wie das -gemacht werden kann. - - -@unnumberedsubsubsec Overall MIDI volume - -Die generellen Mindest- und Höchstwerte für die Lautstärke der MIDI-Datei -wird kontrolliert, indem die Eigenschaften @code{midiMinimumVolume} -unde @code{midiMaximumVolume} auf der @code{Score}-Ebene gesetzt -werden. Diese Eigenschaften haben nur Einfluss auf Dynamikzeichen, sodass -ein Dynamikzeichen direkt an den Anfang der Partitur gestellt werden muss, -wenn diese Einstellung von Anfang an Wirkung zeigen soll. Der Bruch, -der dann den einzelnen Dynamikzeichen entspricht, wird mit der -Formel - -@example -midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * Bruch -@end example - -@noindent -errechnet. Im folgenden Beispiel wird die generelle MIDI-Lautstärke -auf den Bereich zwischen 0.2 und 0.5 eingeschränkt. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - midiMinimumVolume = #0.2 - midiMaximumVolume = #0.5 - } - } -} -@end lilypond - - -@unnumberedsubsubsec Equalizing different instruments (i) - -Wenn die Mindest- und Höchstwerte für die MIDI-Lautstärke -innerhalb eines @code{Staff}-Kontextes gesetzt werden, -kann damit die relative Lautstärke einzelner Instrumente kontrolliert -werden. Damit kann man die Qualität der MIDI-Datei -merklich verbessern. - -In diesem Beispiel wird die Lautstärke der Klarinette relativ -zur Lautstärke der Flöte verringert. In jeder Stimme muss -eine Dynamikanweisung für die erste Note gesetzt werden, damit -diese Einstellung korrekt funktioniert. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \set Staff.midiMinimumVolume = #0.7 - \set Staff.midiMaximumVolume = #0.9 - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \set Staff.midiMinimumVolume = #0.3 - \set Staff.midiMaximumVolume = #0.6 - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - - -@unnumberedsubsubsec Equalizing different instruments (ii) - -Wenn Mindest- und Höchstwerte für die Lautstärke der MIDI-Datei -nicht vorgegeben werden, nimmt LilyPond standardmäßig einige -Anpassungen für die Lautstärken bestimmter Instrumente vor. -Diese Instrumente und ihre entsprechende Veränderung lassen -sich aus der Tabelle @notation{instrument-equalizer-alist} -in der Datei @file{../scm/midi.scm} entnehmen. - -Dieser grundlegende Equalizer kann ersetzt werden, indem die -Funktion @code{instrumentEqualizer} im @code{Score}-Kontext auf -eine neue Scheme-Funktion gesetzt wird, die MIDI-Instrumentbezeichnungen -als einziges Argument akzeptiert und ein Zahlenpaar ausgibt, das -den Höchst- und Mindestwert für die Lautstärke des entpsrechenden -Instruments darstellt. Die Ersetzung der Standardfunktion wird -auf gleiche Weise vorgenommen, wie es schon für die -@code{dynamicAbsoluteVolumeFunction} zu Beginn dieses Abschnittes -gezeigt wurde. Der Standard-Equalizer, -@notation{default-instrument-equalizer} in der Datei -@file{../scm/midi.scm} zeigt, wie solche eine Funktion erstellt werden -kann. - -Das folgende Beispiel definiert für die Flöte und Klarinette relative -Lautstärkewerte, die denen des vorigen Beispiels entsprechen. - -@lilypond[verbatim,quote] -#(define my-instrument-equalizer-alist '()) - -#(set! my-instrument-equalizer-alist - (append - '( - ("flute" . (0.7 . 0.9)) - ("clarinet" . (0.3 . 0.6))) - my-instrument-equalizer-alist)) - -#(define (my-instrument-equalizer s) - (let ((entry (assoc s my-instrument-equalizer-alist))) - (if entry - (cdr entry)))) - -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Score.instrumentEqualizer = #my-instrument-equalizer - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - - - -@node Percussion in MIDI -@subsection Percussion in MIDI - -Schlagzeuginstrumente werden üblicherweise in einem @code{DrumStaff}-Kontext -notiert. Aus diese Weise werden sie korrekt in den MIDI-Kanal@tie{}10 -ausgegeben. Eine Schlagzeuge mit diskreten Tonhöhen, wie Xylophon, -Marima, Vibraphone, Pauken usw. werden wie @qq{normale} Instrumente -in einem @code{Staff}-Kontext notiert. Nur so lässt sich auch hier -eine richtige MIDI-Ausgabe erreichen. - -Einige Instrumente, die keine diskreten Tonhöhen haben, können nicht -über den MIDI-Kanal@tie{}10 erreicht werden und müssen deshalb in -einem normalen @code{Staff}-Kontext notiert werden. Es handelt sich -um @code{melodic tom, taiko drum, synth drum} usw. - -Viele Schlagzeuginstrumnete sind nicht in den MIDI-Standard aufgenommen, -z. B. Kastagnetten. Die einfachste Methode, derartige Instrumente -zu ersetzen, ist, einen Klang auszuwählen, der ihnen halbwegs ähnlich -kommt. - - -@knownissues - -Weil der MIDI-Standard keine Peitschenschläge kennt, wird ein -Schlagstock (sidestick) für diesen Zweck eingesetzt. diff --git a/Documentation/de/user/install.itely b/Documentation/de/user/install.itely deleted file mode 100644 index b94a3c6ca9..0000000000 --- a/Documentation/de/user/install.itely +++ /dev/null @@ -1,90 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 5395f0433b4f09b18360118a23227a4a3cef8e72 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Till Rettig, Reinhold Kainhofer - -@ifclear INSTALL -@node Install -@chapter Install -@end ifclear - -Es gibt von Lilypond zwei verschiedene Typen von Versionen: stabile -Versionen und instabile Entwicklerversionen. Stabile Versionen haben -eine gerade Unter-Versionsnummer (z.B. 2.8, 2.10, 2.12, etc.). -Entwicklerversionen haben hingegen ungerade Unter-Versionsnummern (z.B. -2.7, 2.9, 2.11, etc.). - -LilyPond selbst zu kompilieren ist ein relativ komplizierter Vorgang, daher -empfehlen wir @strong{stark}, die vorkompilierten Binär-Pakete zu benutzen. -@untranslated - - -@menu -* Precompiled binaries:: -* Compiling from source:: -@end menu - -@node Precompiled binaries -@section Precompiled binaries - -@unnumberedsubsec Downloading - - -Aktuelle Informationen zu vorkompilierten Binär-Paketen für Ihre Plattform -finden Sie unter @uref{http://lilypond.org/web/install/}. Falls Ihr Betriebssystem -auf dieser allgemeinen Seite nicht behandelt wird, sehen Sie bitte in -der vollständigen Liste unter @uref{http://download.linuxaudio.org/lilypond/binaries/} -nach. - -Momentan werden Binärpakete für folgende Plattformen erstellt: - -@example -darwin-ppc - MacOS X powerpc -darwin-x86 - MacOS X intel -freebsd-64 - FreeBSD 6.x, x86_64 -freebsd-x86 - FreeBSD 4.x, x86 -linux-64 - Beliebige GNU/Linux Distribution, x86_64 -linux-ppc - Beliebige GNU/Linux Distribution, powerpc -linux-x86 - Beliebige GNU/Linux Distribution, x86 -mingw - Windows x86 -@end example - -@knownissues - -Wenn Sie MacOS 10.3 oder 10.4 benutzen und Python-Skripte wie -@command{convert-ly} und @command{lilypond-book} benutzen wollen, -lesen Sie @ref{Setup for MacOS X,,,lilypond-program,Application Usage}. - - -@node Compiling from source -@section Compiling from source - -LilyPond kann auch selbst direkt aus dem Quellcode des git-Depots -kompiliert werden. Da jedoch für die Kompilierung definitiv -Englisch-Kenntnisse vorhanden sein müssen, soll hier lediglich auf die -englische Dokumentation verwiesen werden: -@c DO NOT translate the following line at all. -@iftex -@ref{Compiling from source,,,lilypond-program,Application Usage}. -@end iftex -@ifhtml -@c Please translate the following line (but not the .html file name) -@uref{Compiling-from-source.html,Compiling from Source}. -@end ifhtml - - -@c TRANSLATORS: -@c Please **do not** translate anything below this line. Users -@c should not be compiling LilyPond themselves; if they really -@c want to do so, they should be able to read the English docs, -@c because they'll probably need to ask questions in English -@c on the -devel list. -gp - diff --git a/Documentation/de/user/introduction.itely b/Documentation/de/user/introduction.itely deleted file mode 100644 index 69d5f58623..0000000000 --- a/Documentation/de/user/introduction.itely +++ /dev/null @@ -1,1169 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" -@c Translators: Till Rettig, Reinhold Kainhofer - -@node Introduction -@chapter Introduction - -Dieses Kapitel stellt dem Leser die Idee hinter LilyPond und die Dokumentation -von LilyPond vor. - -@menu -* Background:: -* About the documentation:: -@end menu - - -@node Background -@section Background - -Dieser Abschnitt behandelt die allgemeinen Ziele und die Architektur von LilyPond. - -@menu -* Engraving:: -* Automated engraving:: -* What symbols to engrave?:: -* Music representation:: -* Example applications:: -@end menu - - -@node Engraving -@unnumberedsubsec Engraving - -@cindex Notensatz -@cindex Typographie -@cindex Notengravur -@cindex Gravur, Notensatz -@cindex Plattendruck, Noten - -Die Kunst des Notensatzes wird auch als Notenstich bezeichnet. Dieser -Begriff stammt aus dem traditionellen Notendruck. Noch bis vor etwa 20 -Jahren wurden Noten erstellt, indem man sie in eine Zink- oder Zinnplatte -schnitt oder mit Stempeln schlug. Diese Platte wurde dann mit Druckerschwärze - versehen, so dass sie in den geschnittenen und gestempelten Vertiefungen -blieb. Diese Vertiefungen schwärzten dann ein auf die Platte gelegtes -Papier. Das Gravieren wurde vollständig von Hand erledigt. Es war darum -sehr mühsam, Korrekturen anzubringen, weshalb man von vornherein richtig - schneiden musste. Es handelte sich dabei um ein sehr spezialisiertes Handwerk. - -Heutzutage wird fast alle gedruckte Musik von Computern erstellt. Das -hat einige deutliche Vorteile: Drucke sind billiger als die gravierten -Platten und der Computersatz kann per E-Mail verschickt werden. Leider -hat der intensive Einsatz des Computers die graphische Qualität -des Notensatzes vermindert. Mit dem Computer erstellte Noten sehen -langweilig und mechanisch aus, was es erschwert, von ihnen zu spielen. - - -@c introduce illustrating aspects of engraving, font... -Die Abbildung unten illustriert den Unterschied zwischen -traditionellem Notensatz und einem typischen Computersatz. Das -dritte Bild zeigt, wie LilyPond die Formen des traditionellen -Satzes nachahmt. Das linke Bild zeigt ein eingescanntes b-Vorzeichen -aus einer 2000 herausgegebenen Edition. Das mittlere Bild -zeigt das b-Vorzeichen der selben Musik aus einer handgestochenen - Bärenreiter-Ausgabe. Das linke Bild zeigt die typischen Makel -des Computer-Satzes: Die Notenlinien sind sehr dünn, die Schwärze -des Vorzeichens entspricht den dünnen Linien und hat eine gerade -Form mit scharfen Ecken und Kanten. Im Gegensatz dazu hat das -Bärenreiter-Vorzeichen dicke, gerade zu sinnlich rundliche -Formen. Unser Symbol für das Vorzeichen hat neben anderen -auch dieses b als Vorbild. Es ist abgerundet und passt zu unseren -Notenlinien, die sehr viel dicker sind als die der entsprechenden -Computer-Ausgabe. - -@multitable @columnfractions .125 .25 .25 .25 .125 -@item @tab -@ifnotinfo -@iftex -@image{henle-flat-gray,,4cm} -@end iftex -@ifnottex -@image{henle-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{baer-flat-gray,,4cm} -@end iftex -@ifnottex -@image{baer-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{lily-flat-bw,,4cm} -@end iftex -@ifnottex -@image{lily-flat-bw,,,png} -@end ifnottex -@end ifnotinfo -@ifinfo -@c workaround for makeinfo-4.6: line breaks and multi-column cookies -@image{henle-flat-bw,,,png} @image{baer-flat-bw,,,png} -@image{lily-flat-bw,,,png} -@end ifinfo - -@item @tab -Henle (2000) -@tab -Bärenreiter (1950) -@tab -LilyPond Feta-Schriftart (2003) - -@end multitable - - -@cindex Musiksymbole -@cindex Schriftart -@cindex Dichte -@cindex Balance - -@c introduce illustrating aspects of engraving, spacing... -Die Verteilung der Noten innerhalb des Taktes sollte ihrer Dauer -entsprechen. Moderne Partituren zeigen diese Verhältnisse jedoch -mit einer mathematischen Präzision, die nur sehr schlechte -Ergebnisse bringt. Im nächsten Beispiel ist ein Motiv zweimal -gesetzt: einmal mit den exakten mathematischen Längenverhältnissen, dann -mit kleinen Korrekturen. Welches von beiden ist mit dieser Korrektur -gesetzt? - -@cindex Optischer Ausgleich -@c file spacing-optical. -@c need to include it here, because we want two images. -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} - -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.6 - } - } -} -@end lilypond - -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.0 - \override NoteSpacing #'same-direction-correction = #0.0 - \override StaffSpacing #'stem-spacing-correction = #0.0 - } - } -} -@end lilypond - -@cindex normale Rhythmen -@cindex normale Abstände -@cindex Abstände, normal -@cindex Rhythmen, normal - -In diesem Ausschnitt kommen nur Viertel vor, Noten, die in einem - gleichmäßigen Rhythmus gespielt werden. Die Abstände sollten das - widerspiegeln. Leider lässt uns aber das Auge im Stich: es beachtet - nicht nur den Abstand von aufeinander folgenden Notenköpfen, sondern - auch den ihrer Hälse. Also müssen Noten, deren Hälse in direkter - Folge zuerst nach oben und dann nach unten ausgerichtet sind, weiter - auseinander gezogen werden, während die unten/oben-Folge engere - Abstände fordert, und das alles auch noch in Abhängigkeit von der -vertikalen Position der Noten. Das obere Beispiel ist mit dieser -Korrektur gesetzt, das untere ohne. In letzterem Fall bilden sich -für das Auge bei unten/oben-Folgen Notenklumpen mit schmalen Abständen -zwischen den Notenhälsen. - -@cindex Typographie - -Musiker sind üblicherweise zu zu konzentriert, die Musik aufzuführen, -als das Aussehen der Noten zu studieren; und diese -Beschäftigung mit typographischen Details mag akademisch wirken. -Das ist sie aber nicht. Unser Beispielstück hat einen -monotonen Rhythmus, und wenn alle Zeilen gleich aussehen, wird -das Notenblatt zu einem Labyrinth. Wenn der Spieler auch nur -einmal wegschaut oder kurze Zeit unkonzentriert ist, findet er -nicht mehr zurück zu der Stelle, an der er war. - -Der dichtere Eindruck, den die dickeren Notenlinien und schwereren -Notationssymbole schaffen, eignet sich auch besser für Noten, -die weit vom Leser entfernt stehen, etwa auf einem Notenständer. -Eine sorgfältige Verteilung der Zwischenräume erlaubt es, die -Noten sehr dicht zu setzen, ohne dass die Symbole zusammenklumpen. -Dadurch werden unnötige Seitenumbrüche vermieden, sodass man -nicht so oft blättern muss. - -Dies sind die Anforderungen der Typographie: Das Layout sollte -schön sein -- nicht aus Selbstzweck, sondern um dem Leser zu helfen. Für -Aufführungsmaterial ist das umso wichtiger, denn Musiker haben eine begrenzte -Aufmerksamkeit. Je weniger Mühe nötig ist, die Noten zu erfassen, desto mehr -Zeit bleibt für die Gestaltung der eigentlichen Musik. Das heißt: Gute -Typographie führt zu besseren Aufführungen! - -Die Beispiele haben gezeigt, dass der Notensatz eine subtile und -komplexe Kunst ist und gute Ergebnisse nur mit viel Erfahrung -erlangt werden können, die Musiker normalerweise nicht haben. -LilyPond stellt unser Bemühen dar, die graphische Qualität -handgestochener Notenseiten ins Computer-Zeitalter zu transportieren -und sie für normale Musiker erreichbar zu machen. Wir haben -unsere Algorithmen, die Gestalt der Symbole und die Programm-Einstellungen -darauf abgestimmt, einen Ausdruck zu erzielen, der der Qualität -der alten Editionen entspricht, die wir so gerne betrachten -und von denen wir gerne spielen. - - - -@node Automated engraving -@unnumberedsubsec Automated engraving - -@cindex Notensatz, automatisch -@cindex automatischer Notensatz - -Wie sollen wir also jetzt die Typographie anwenden? -Wie können wir erwarten, dass wir in der Lage wären, -ein Programm zu schreiben, dass den Beruf des -Notenstechers ersetzt, wo dieser doch mehr als zehn -Jahre braucht, um ein Meister zu werden? - -Wir können es tatsächlich nicht! Da Typographie allein -durch das menschliche Auge bestimmt ist, kann der Mensch -nicht ersetzt werden. Aber sehr viel mechanische Arbeit -kann automatisiert werden. Indem etwa LilyPond die üblichen -Situationen kennt und bewältigt, können die restlichen -Fehler von Hand beseitigt werden. Das ist schon ein -großer Fortschritt im Vergleich zu den existierenden -Programmen. Und mit der Zeit können immer mehr Fälle -automatisiert werden, so dass immer weniger Eingriffe -von Hand notwendig werden. - - -Als wir anfingen, haben wir LilyPond vollständig in der Programmiersprache C++ -geschrieben. Das hieß, dass der Funktionsumfang des Programms vollständig durch -die Programmierer festgelegt war. Das stellte sich aus einer Reihe von Gründen -als unzureichend heraus: - -@itemize @bullet -@item Wenn LilyPond Fehler macht, muss der Benutzer die -Einstellungen ändern können. Er muss also Zugang zur -Formatierungsmaschinerie haben. Deshalb können die Regeln und -Einstellungen nicht beim Kompilieren des Programms festgelegt -werden, sondern sie müssen während des Laufes zugänglich sein. - - -@item Notensatz ist eine Frage des Augenmaßes, und damit auch vom - Geschmack abhängig. Benutzer können mit unseren Entscheidungen -unzufrieden sein. Darum müssen also auch die Definitionen des -typographischen Stils dem Benutzer zugänglich sein. - -@item Schließlich verfeinern wir unseren Formatierungsalgorithmus -immer weiter, also müssen die Regeln auch flexibel sein. Die -Sprache C++ zwingt zu einer bestimmten Gruppierungsmethode, -die nicht den Regeln für den Notensatz entspricht. -@end itemize - -@cindex Scheme-Programmiersprache - -Diese Probleme wurden angegangen, indem ein Übersetzer für -die Programmiersprache Scheme integriert wurde und Teile -von LilyPond in Scheme neu geschrieben wurden. Die derzeitige -Formatierungsarchitektur ist um die Notation von graphischen -Objekten herum aufgebaut, die von Scheme-Variablen und -Funktionen -beschrieben werden. Diese Architektur umfasst Formatierungsregeln, -typographische Stile und individuelle Formatierungsentscheidungen. -Der Benutzer hat direkten Zugang zu den meisten dieser Einstellungen. - -Scheme-Variablen steuern Layout-Entscheidungen. Zum Beispiel haben -viele graphische Objekte eine Richtungsvariable, die zwischen -oben und unten (oder rechts und links) wählen kann. Hier etwa -sind zwei Akkorde mit Akzenten und Arpeggien. -Beim ersten Akkord sind alle Objekte nach unten (oder links) - ausgerichtet, beim zweiten nach oben (rechts). - -@lilypond[quote,ragged-right] -\new Score \with { - \override SpacingSpanner #'spacing-increment = #3 - \override TimeSignature #'transparent = ##t -} \relative c' { - \stemDown 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT - \stemUp 4^>-\arpeggio -} -@end lilypond - -@cindex Formatierung einer Partitur -@cindex Partitur, Formatierung -@cindex Formatierungsregeln - -@noindent -Der Prozess des Notensetzens besteht für das Programm darin, -die Variablen der graphischen Objekte zu lesen und zu -schreiben. Einige Variablen haben festgelegte Werte. So -ist etwa die Dicke von vielen Linien – ein Charakteristikum -des typographischen Stils – von vornherein festgelegt. -Wenn sie geändert werden, ergibt sich ein anderer typographischer Eindruck. - -@lilypond[quote,ragged-right] -fragment = { - \clef bass f8 as8 - c'4-~ c'16 as g f e16 g bes c' des'4 -} -<< - \new Staff \fragment - \new Staff \with { - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #0.5 - \override Bar #'thickness = #3.6 - \override Tie #'thickness = #2.2 - \override StaffSymbol #'thickness = #3.0 - \override Tie #'extra-offset = #'(0 . 0.3) - } - \fragment ->> -@end lilypond - -Formatierungsregeln sind auch vorbelegte Variablen. Zu jedem Objekt gehören -Variablen, die Prozeduren enthalten. Diese Prozeduren machen die eigentliche -Satzarbeit, und wenn man sie durch andere ersetzt, kann die Darstellung -von Objekten verändert werden. Im nächsten Beispiel wird die Regel, nach der -die Notenköpfe gezeichnet werden, während des Ausschnitts verändert. - -@lilypond[quote,ragged-right] -#(set-global-staff-size 30) - -#(define (mc-squared grob orig current) - (let* ((interfaces (ly:grob-interfaces grob)) - (pos (ly:grob-property grob 'staff-position))) - (if (memq 'note-head-interface interfaces) - (begin - (ly:grob-set-property! grob 'stencil - (grob-interpret-markup grob - (make-lower-markup 0.5 - (case pos - ((-5) "m") - ((-3) "c ") - ((-2) (make-smaller-markup (make-bold-markup "2"))) - (else "bla"))))))))) - -\new Voice \relative c' { - \stemUp - \set autoBeaming = ##f - \time 2/4 - 4 - \once \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil - \once \override NoteHead #'font-size = #-7 - \once \override NoteHead #'font-family = #'sans - \once \override NoteHead #'font-series = #'bold - 4 - \once \override NoteHead #'style = #'cross - 4 - \applyOutput #'Voice #mc-squared - 4 - << - { d8[ es-( fis^^ g] fis2-) } - \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } - >> -} -@end lilypond - - - -@node What symbols to engrave? -@unnumberedsubsec What symbols to engrave? - -@cindex Notensatz -@cindex Typographie -@cindex Stempel -@cindex Matrize -@cindex Engraver -@cindex Plugin - -Während des Notensatzprozesses entscheidet sich, wo -Symbole platziert werden. Das kann aber nur gelingen, -wenn vorher entschieden wird, @emph{welche} Symbole -gesetzt werden sollen, also welche Notation benutzt -werden soll. - -Die heutige Notation ist ein System zur Musikaufzeichnung, -das sich über die letzten 1000 Jahre entwickelt hat. Die -Form, die heute üblicherweise benutzt wird, stammt aus dem -frühen Barock. Auch wenn sich die grundlegenden Formen (also -die Notenköpfe, das Fünfliniensystem) nicht verändert haben, -entwickeln sich die Details trotzdem immer noch weiter, um -die Errungenschaften der Neuen Musik darstellen zu können. Die -Notation umfasst also 500 Jahre Musikgeschichte. Ihre Anwendung -reicht von monophonen Melodien bis zu ungeheurem Kontrapunkt -für großes Orchester. - -Wie bekommen wir dieses vielköpfige Monster zu fassen? -Unsere Lösung ist es, eine strikte Trennung zwischen der Notation, -also welche Symbole benutzt werden, und dem Satz, also wohin sie -gesetzt werden, zu machen. Um das Problem anzupacken, haben wir -es in kleine (programmierbare) Happen zerteilt, so dass jede Art -von Symbol durch ein eigenes Plugin verarbeitet wird. Alle Plugins - kooperieren durch die LilyPond-Architektur. Sie sind vollständig -modular und unabhängig und können somit auch unabhängig voneinander - entwickelt werden. Der Schreiber, der die Musik in Graphik umwandelt, - ist ein Kopist oder Notenstecher (engl. engraver). Darum werden -die Plugins als @code{engraver} bezeichnet. - -Im nächsten Beispiel wird gezeigt, wie mit dem Plugin für die Notenköpfe, -dem @code{Note_heads_engraver} (@qq{Notenkopfstecher}) der Satz begonnen wird. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \consists "Pitch_squash_engraver" - } - } -} -@end lilypond - -@noindent -Dann fügt ein @code{Staff_symbol_engraver} (@qq{Notensystemstecher}) -die Notenlinien hinzu. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \consists "Pitch_squash_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -Der @code{Clef_engraver} (@qq{Notenschlüsselstecher}) definiert -eine Referenzstelle für das System. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -Der @code{Stem_engraver} (@qq{Halsstecher}) schließlich fügt - Hälse hinzu. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -Dem @code{Stem_engraver} wird jeder Notenkopf mitgeteilt, -der vorkommt. Jedes Mal, wenn ein Notenkopf erscheint (oder mehrere bei -einem Akkord), wird ein Hals-Objekt erstellt und an den -Kopf geheftet. Wenn wir dann noch engraver für Balken, Bögen, -Akzente, Vorzeichen, Taktlinien, Taktangaben und Tonartbezeichnungen -hinzufügen, erhalten wir eine vollständige Notation. - - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { \topVoice } -@end lilypond - -@cindex Polyphonie -@cindex Mehrstimmigkeit -@cindex Notensatz, Mehrstimmigkeit -@cindex Kontexte - -Dieses System funktioniert gut für monophone Musik, aber wie geht -es mit Polyphonie? Hier müssen sich mehrere Stimmen ein System teilen. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\new Staff << \topVoice \\ \botVoice >> -@end lilypond - -In diesem Fall benutzen beide Stimmen das System und die Vorzeichen gemeinsam, -aber die -Hälse, Bögen, Balken usw. sind jeder einzelnen Stimme eigen. Die engraver -müssen also gruppiert werden. Die Köpfe, Hälse, Bögen usw. werden -in einer Gruppe mit dem Namen @qq{Voice context} (Stimmenkontext) -zusammengefasst, die engraver für den Schlüssel, die Vorzeichen, -Taktstriche usw. dagegen in einer Gruppe mit dem Namen @qq{Staff context} -(Systemkontext). Im Falle von Polyphonie hat ein Staff-Kontext dann also -mehr als nur einen Voice-Kontext. Auf gleiche Weise können auch mehrere Staff-Kontexte -in einen großen Score-Kontext (Partiturkontext) eingebunden werden. - - -@seealso -Programmreferenz: @rinternals{Contexts}. - - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { - << - \new Staff << \topVoice \\ \botVoice >> - \new Staff << \pah \\ \hoom >> - >> -} -@end lilypond - -@node Music representation -@unnumberedsubsec Music representation - -@cindex Syntax -@cindex rekursive Strukturen - -Idealerweise ist das Eingabeformat für ein höheres Satzsystem die -abstrakte Beschreibung des Inhaltes. In diesem Fall wäre das die -Musik selber. Das stellt uns aber vor ein ziemlich großes Problem, -denn wie können wir definieren, was Musik wirklich ist? Anstatt darauf -eine Antwort zu suchen, haben wir die Frage einfach umgedreht. Wir -schreiben ein Programm, das den Notensatz beherrscht und passen das -Format an, so einfach wie möglich zu sein. Wenn es nicht mehr vereinfacht -werden kann, haben wir per Definition nur noch den reinen Inhalt. Unser -Format dient als die formale Definition eines Musiktextes. - -Die Syntax ist gleichzeitig die Benutzerschnittstelle bei LilyPond, -darum soll sie einfach zu schreiben sein; z. B. bedeutet - -@example -c'4 d'8 -@end example - -@noindent -eine Viertel c' und eine Achtel d', wie in diesem Beispiel: - -@lilypond[quote] -{ - c'4 d'8 -} -@end lilypond - -In kleinem Rahmen ist diese Syntax sehr einfach zu benutzen. In -größeren Zusammenhängen aber brauchen wir Struktur. Wie sonst kann -man große Opern oder Symphonien notieren? Diese Struktur wird -gewährleistet durch sog. music expressions (Musikausdrücke): indem -kleine Teile zu größeren kombiniert werden, kann komplexere Musik -dargestellt werden. So etwa hier: - -@lilypond[quote,verbatim,fragment,relative=1] -f4 -@end lilypond - -@noindent -Gleichzeitig erklingende Noten werden hinzugefügt, indem man alle in @code{<<} und @code{>>} einschließt. - -@c < > is not a music expression, -@c so we use <<>> iso. <> to drive home the point of -@c expressions. Don't change this back --hwn. -@example -<> -@end example - -@lilypond[quote,fragment,relative=1] -\new Voice { <> } -@end lilypond - -@noindent -Um aufeinanderfolgende Noten darzustellen, werden sie in geschweifte Klammern gefasst: - -@code{@{@tie{}@dots{}@tie{}@}} - -@example -@{ f4 <> @} -@end example - -@lilypond[quote,relative=1,fragment] -{ f4 <> } -@end lilypond - -@noindent -Dieses Gebilde ist in sich wieder ein Ausdruck, und kann -daher mit einem anderen Ausdruck kombiniert werden (hier mit einer Halben). - -@example -<< g2 \\ @{ f4 <> @} >> -@end example - -@lilypond[quote,fragment,relative=2] -\new Voice { << g2 \\ { f4 <> } >> } -@end lilypond - -Solche geschachtelten Strukturen können sehr gut in einer -kontextunabhängigen Grammatik beschrieben werden. Der Programmcode -für den Satz ist auch mit solch einer Grammatik erstellt. Die Syntax -von LilyPond ist also klar und ohne Zweideutigkeiten definiert. - -Die Benutzerschnittstelle und die Syntax werden als erstes vom Benutzer -wahrgenommen. Teilweise sind sie eine Frage des Geschmackes und werden viel -diskutiert. Auch wenn Geschmacksfragen ihre Berechtigung -haben, sind sie nicht sehr produktiv. Im großen Rahmen von LilyPond -spielt die Eingabe-Syntax nur eine geringe Rolle, denn eine logische -Syntax zu schreiben ist einfach, guten Formatierungscode aber sehr viel -schwieriger. Das kann auch die Zeilenzahl der Programmzeilen zeigen: -Analysieren und Darstellen nimmt nur etwa 10% des Codes ein: - -@node Example applications -@unnumberedsubsec Example applications - -@cindex einfaches Beispiel -@cindex Beispiel, einfach - -Wir haben LilyPond als einen Versuch geschrieben, wie man die Kunst des -Musiksatzes in ein Computerprogramm gießen kann. Dieses -Programm kann nun dank vieler harter Arbeitsstunden benutzt werden, -um sinnvolle Aufgaben zu erledigen. Die einfachste ist dabei der -Notendruck. - -@lilypond[quote,relative=1] -{ - \time 2/4 - c4 c g'4 g a4 a g2 -} -@end lilypond - -@noindent -Indem wir Akkordsymbole und einen Text hinzufügen, erhalten wir -ein Lead Sheet. - -@lilypond[quote,ragged-right] -<< - \chords { c2 c f2 c } - \new Staff - \relative c' { - \time 2/4 - c4 c g' g a a g2 - } - \addlyrics { twin -- kle twin -- kle lit -- tle star } ->> -@end lilypond - -Mehrstimmige Notation und Klaviermusik kann auch gesetzt werden. Das -nächste Beispiel zeigt einige etwas exotischere Konstruktionen: - -@lilypond[quote] -\header { - title = "Screech and boink" - subtitle = "Random complex notation" - composer = "Han-Wen Nienhuys" -} - -\score { - \context PianoStaff << - \new Staff = "up" { - \time 4/8 - \key c \minor - << { - \revert Stem #'direction - \change Staff = down - \set subdivideBeams = ##t - g16.[ - \change Staff = up - c'''32 - \change Staff = down - g32 - \change Staff = up - c'''32 - \change Staff = down - g16] - \change Staff = up - \stemUp - \set followVoice = ##t - c'''32([ b''16 a''16 gis''16 g''32)] - } \\ { - s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] - } \\ { - s4 \autoBeamOff d''8.. f''32 - } \\ { - s4 es''4 - } >> - } - - \new Staff = "down" { - \clef bass - \key c \minor - \set subdivideBeams = ##f - \override Stem #'french-beaming = ##t - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #4.0 - g'16[ b16 fis16 g16] - << \makeClusters { - as16 - - - } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down - 4\arpeggio - } - >> } - >> - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 8) - } - } - \layout { - \context { - \Staff - \consists Horizontal_bracket_engraver - } - } -} -@end lilypond - -Die obenstehenden Beispiele wurde manuell erstellt, aber das ist nicht -die einzige Möglichkeit. Da der Satz fast vollständig automatisch abläuft, -kann er auch von anderen Programmen angesteuert werden, die Musik oder Noten -verarbeiten. So können etwa ganze Datenbanken musikalischer Fragmente automatisch -in Notenbilder umgewandelt werden, die dann auf Internetseiten oder -in Multimediapräsentation Anwendung finden. - -Dieses Benutzerhandbuch zeigt eine weitere Möglichkeit: Die Noten werden als -reiner Text eingegeben und können darum sehr einfach integriert werden -in andere textbasierte Formate wie etwa @LaTeX{}, HTML oder, wie in diesem -Fall, Texinfo. Durch ein spezielles Programm werden die Eingabefragmente durch -Notenbilder in der resultierenden PDF- oder HTML-Datei ersetzt. Dadurch ist -es sehr einfach, Noten und Text zu kombinieren. - - - -@node About the documentation -@section About the documentation - -@cindex Handbuch zum Lernen -@cindex Glossar -@cindex Anwendungsbenutzung -@cindex Schnipselliste -@cindex Referenz der Interna - -Die Dokumentation zu LilyPond ist unterteilt in mehrere Handbücher. - -@c leave these lines wrapping around. It's some texinfo 4.12 thing. -gp -@c This is actually a limitation of texi2html. -jm -@menu -* About the Learning Manual:: Dieses Handbuch stellt LilyPond vor und vermittelt die Grundkenntnisse, um damit arbeiten zu können. -* About the Music Glossary:: Dieses Handbuch erklärt zahlreiche musikalische Fachausdrücke inklusive Übersetzungen in verschiedene Sprachen. -* About the Notation Reference:: Dieses Handbuch stellt den Hauptteil der Dokumentation dar. Es liefert detaillierte Informationen zum Notensatz mit LilyPond. Als Voraussetzung werden die Kenntnisse des @qq{Handbuchs zum Lernen} angenommen. -* About the Application Usage:: Dieses Handbuch diskutiert den konkreten Aufruf des @qq{lilypond}-Programms und wie LilyPond-Notensatz in andere Programme integriert werden kann. -* About the Snippet List:: Dies ist eine Sammlung von kurzen LilyPond-Beispielen. -* About the Internals Reference:: Dieses Dokument liefert Referenzwissen über LilyPonds interne Strukturen und ist vor allem bei der Erstellung von tiefergehenden Optimierungen und Anpassungen hilfreich. -* Other documentation:: Es existieren noch etliche weitere Teile der Dokumentation, wie etwa die @q{Neueigkeiten} Seite oder das Archiv der Mailingliste. -@end menu - - -@node About the Learning Manual -@unnumberedsubsec About the Learning Manual - -@cindex Handbuch zum Lernen - -Dieses Handbuch erklärt die Grundbegriffe von LilyPond und stellt -die fundamentalen Konzepte hinter dem Programm vor. Diese Kapitel sollten -in linearer Reihenfolge gelesen werden. - -Am Ende jedes Abschnitts findet sich ein Absatz @strong{Siehe auch}, der -Kreuzreferenzen zu anderen Abschnitten enthält. Beim ersten Durchlesen -empfiehlt es sich nicht, diesen gleich zu folgen, da meist noch -zahlreiche Grundbegriffe zum Verständnis fehlen. Wenn Sie sich durch -das Handbuch zum Lernen geackert haben, wollen Sie vielleicht einzelne -Abschnitte nochmal durchgehen und dann den Kreuzverweisen zur Vertiefung -der Zusammenhänge folgen. - -@itemize - -@item -@ref{Introduction}: erklärt den Hintergrund und das Ziel von LilyPond. - -@item -@ref{Tutorial}: liefert eine einfache Einführung in das Setzen von Musik -mit LilyPond. Neulinge sollten mit diesem Kapitel beginnen. - -@item -@ref{Fundamental concepts}: erklärt etliche allgemeine Konzepte -hinter dem Dateiformat von LilyPond. Wenn Sie sich nicht sicher -sind, an welcher Stelle Sie einen Befehl in die Datei einfügen sollen, -ist dieses Kapitel genau das richtige! - -@item -@ref{Tweaking output}: stellt dar, wie die Standardeinstellungen von -LilyPond verändert werden können. - -@item -@ref{Working on LilyPond projects}: liefert Tipps im praktischen Umgang mit -Lilypond und gibt Hinweise, wie gängige Fehler vermieden werden können. -Bevor Sie mit einem großen Projekt beginnen, sollten Sie dieses Kapitel -unbedingt gelesen haben! - -@end itemize - -Das Handbuch zum Lernen enthält auch zahlreiche Anhänge, die nicht -zum linearen Durchlesen geeignet sind. Sie sind allerdings zur späteren -Referenz sehr gut geeignet: - -@itemize - -@item -@ref{Templates}: zeigt einige fertige Dokumentvorlagen für diverse -Stücke mit unterschiedlichen Charakteristika. Kopieren Sie einfach -die Vorlagen in Ihre eigene Datei, fügen Sie die Noten hinzu und Sie -sind fertig! - -@item -@ref{Scheme tutorial}: liefert eine kurze Einführung in Scheme, die -Programmiersprache, die die Musikfunktionen in LilyPond intern benutzen. -Dies stellt tiefgehendes Wissen dar, wenn Sie LilyPond bis ins kleinste Detail -konfigurieren möchten. Die meisten Benutzer brauchen dies jedoch selten bis -gar nicht. - -@end itemize - - -@node About the Music Glossary -@unnumberedsubsec About the Music Glossary - -@cindex Idiom -@cindex Jargon -@cindex Terminologie -@cindex Übersetzungen -@cindex Sprachen -@cindex Glossar -@cindex Thesaurus -@cindex Fremdsprache - -@rglosnamed{Top,Das Glossar} erklärt musikalische Fachausdrücke und -enthält auch deren Übersetzungen in diverse Sprachen. Wenn Sie mit -Musiknotation oder der (englisch-sprachigen) Musikterminologie nicht vertraut -sind (vor allem, wenn Englisch nicht Ihre Muttersprache ist), ist es -sehr empfehlenswert, das Glossar immer wieder zu Rate zu ziehen. - - -@node About the Notation Reference -@unnumberedsubsec About the Notation Reference - -@cindex Notationsreferenz -@cindex Anhänge -@cindex Referenz zum Notensatz - -In diesem Buch werden alle LilyPond-Befehle erklärt, die Notationszeichen -produzieren. Es geht von der Annahme aus, dass der Leser sich mit den -Grundkonzepten des Programmes im Handbuch zum Lernen bekannt gemacht hat. - -@itemize @bullet - -@item -@emph{@ruser{Musical notation}}: -erklärt alles über die grundlegenden Notationskonstruktionen. Dieses Kapitel -ist für fast jedes Notationsprojekt nützlich. - -@item -@emph{@ruser{Specialist notation}}: -erklärt spezifische Schwierigkeiten, die sich bei bestimmten Notationstypen -ergeben. Dieses Kapitel ist nur in entsprechenden Fällen bestimmter Instrumente -oder bei Gesang zu konsultieren. - -@item -@emph{@ruser{General input and output}}: -erläutert allgemeine Informationen über die Eingabedateien von Lilypond und -wie die Ausgabe gesteuert werden kann. - -@item -@emph{@ruser{Spacing issues}}: -befasst sich mit globalen Fragen wie der Definition von Papierformaten -oder wie man Seitenumbrüche definiert. - -@item -@emph{@ruser{Changing defaults}}: -erklärt, wie des Layout getrimmt werden kann um genau zum gewünschten Ergebnis -zu kommen. - -@item -@emph{@ruser{Interfaces for programmers}}: -demonstriert die Erstellung von musikalischen Funktionen. - -@end itemize - -Ds Benutzerhandbuch enthält auch Anhänge mit nützlichen Referenztabellen. - -@itemize - -@item -Die @ruser{Literature list} -enthält einige wichtige Quellen für alle, die mehr über Notation und -den Notensatz erfahren wollen. - -@item -@ruser{Notation manual tables} -sind Tabellen, in denen Akkordbezeichnungen, MIDI-Instrumente, -Farbbezeichnungen und die Zeichen der Feta-Schriftart gesammelt sind. - -@item -Die -@emph{@ruser{Cheat sheet}} -zeigt die wichtigsten LilyPond-Befehle. - -@item -Der -@emph{@ruser{LilyPond command index}} -listet alle Befehle auf, die mit @code{\} anfangen. - -@item -Der -@emph{@ref{LilyPond index}} -ist ein vollständiger Index. - -@end itemize - - - -@node About the Application Usage -@unnumberedsubsec About the Application Usage - -@cindex Anwendungsbenutzung -@cindex Benutzung, lilypond-Programm -@cindex Integration von LilyPond in andere Programme - -In diesem Buch wird erklärt, wie das Programm ausgeführt wird und -wie die Notation von LilyPond in andere Programme integriert werden -kann. - -@itemize @bullet - -@item -@emph{@rprogram{Install}}: -erklärt wie LilyPond installiert wird (inklusive Kompilation, wenn es -nötig sein sollte). - -@item -@emph{@rprogram{Setup}}: -erklärt wie der Computer eingerichtet wird, damit LilyPond optimal genutzt -werden kann. Hierzu gehören etwa spezielle Umgebungen für bestimmte -Texteditoren. - -@item -@emph{@rprogram{Running LilyPond}}: -zeigt, wie LilyPond und seine Hilfsprogramme gestartet werden. Zusätzlich -wird hier erklärt, wie Quelldateien von alten LilyPond-Versionen aktualisiert -werden können. - -@item -@emph{@rprogram{LilyPond-book}}: -erklärt die Details, um einen Text mit eingefügten Notenbeispielen (wie -etwa dieses Handbuch) zu -erstellen. - -@item -@emph{@rprogram{Converting from other formats}}: -erklärt, wie die Konvertierungsprogramme aufgerufen werden. Diese -Programme kommen mit LilyPond zusammen und konvertieren eine Vielzahl -von Notensatzformaten in das @code{.ly}-Format. - -@end itemize - - -@node About the Snippet List -@unnumberedsubsec About the Snippet List - -@cindex Schnipsel -@cindex LSR -@cindex LilyPond Snippet Repository -@cindex LilyPond-Schnipsel-Depot - -Die @rlsrnamed{Top,LilyPond-Schnipsel} sind eine ausführliche Sammlung kurzer -Beispiele, anhand derer Tricks, Tipps und Spezialfunktionen von LilyPond -demonstriert werden. Die meisten dieser Schnipsel können auch im - @uref{http://lsr.dsi.unimi.it/,LilyPond-Schnipsel-Depot} betrachtet -werden. Diese Internetseite verfügt auch über ein -durchsuchbares LilyPond-Handbuch. - -Die Liste der Schnipsel zu einem Abschnitt des Benutzerhandbuchs ist auch -dort jeweils im Abschnitt @strong{Siehe auch} verlinkt. - - -@node About the Internals Reference -@unnumberedsubsec About the Internals Reference - -@cindex Referenz der Interna - -Die @rinternalsnamed{Top,Referenz der Interna} ist eine Sammlung intensiv -verlinkter HTML-Seiten, die alle Details jeder einzelnen -LilyPond-Klasse, jedes Objektes und jeder Funktion erklären. Sie wird -direkt aus den Satzdefinitionen im Quellcode produziert. - -So gut wie alle Formatierungsmöglichkeiten, die intern verwendet werden, -sind auch direkt für den Benutzer zugänglich. Alle Variablen z. B., die -Dicke-Werte, Entfernungen usw. kontrollieren, können in den Eingabe-Dateien -verändert werden. Es gibt eine riesige Anzahl von Formatierungsoptionen, und -alle haben einen @qq{Siehe}-Abschnitt, der auf die Dokumentation verweist. -Im HTML-Handbuch haben diese Abschnitte klickbare Links. - -Die Programmreferenz ist nur auf englisch verfügbar. - - -@node Other documentation -@unnumberedsubsec Other documentation - -Es gibt noch eine Reihe weiterer wertvoller Informationsquellen zu LilyPond: - - -@itemize - -@item -@ifhtml -@ifset bigpage -@uref{../topdocs/NEWS.html,Neuigkeiten}: -@end ifset -@ifclear bigpage -@uref{../../topdocs/NEWS.html,Neuigkeiten}: -@end ifclear -@end ifhtml -@ifnothtml -Neuigkeiten: -@end ifnothtml -eine Zusammenfassung der Änderungen in LilyPond seit der letzten Version. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-user/,Das Archiv -der lilypond-user Mailing-Liste}: enthält alle bisher an die Liste -gesendeten Mails. Viele Fragen werden immer wieder gestellt und auch -beantwortet. Die Chance, dass Ihre Frage auch schon mal aufgetaucht ist, -ist also relativ groß. In diesem Fall finden Sie die Antwort in diesem -Archiv. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-devel/,Das Archiv -der lilypond-devel Mailing-Liste}: enthält alle bisher an die -Entwicklerliste gesendeten Mails. Diese Diskussionen sind dementsprechend -technisch gehalten. Wenn Sie eine tiefergehende Frage zu den Interna von -LilyPond haben, finden Sie die Antwort vielleicht in diesem Archiv. - -@item Eingebettete Musikbeispiele: Auf allen HTML-Seiten mit Notenbeispielen, -die von LilyPond erzeugt wurden, kann die originale Quelldatei durch einen Klick auf das -Bild betrachtet werden. - -@item Initialisierungsdateien von LilyPond: - -Der Speicherort der Dokumentationsdateien unterscheidet sich evtl. je -nach Betriebssystem. Manchmal wird hier auf Initialisierungs- oder -Beispieldateien verwiesen. Das Handbuch nimmt dabei an, dass diese -Dateien sich relativ zum Quellverzeichnis befinden. Zum Beispiel würde -der Pfad @file{input/@/lsr/@/Verzeichnis/@/bla@/.ly} etwa auf die Datei -@file{lilypond@/2.x.y/@/input/@/lsr/@/Verzeichnis/@/bla@/.ly} verweisen. In den -Binärpaketen für Unix-Plattformen sind Dokumentation und Beispiele -üblicherweise in einem Verzeichnis wie @file{/usr/@/share/@/doc/@/lilypond/} -gespeichert. Initialisierungsdateien, etwa @file{scm/@/lily@/.scm} -oder @file{ly/@/engraver@/-init@/.ly}, befinden sich normalerweise im -Verzeichnis @file{/usr/@/share/@/lilypond/}. - -Weiterführende Informationen finden Sie unter @ref{Other sources of information}. - -@end itemize - diff --git a/Documentation/de/user/keyboards.itely b/Documentation/de/user/keyboards.itely deleted file mode 100644 index c8c268241a..0000000000 --- a/Documentation/de/user/keyboards.itely +++ /dev/null @@ -1,661 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Keyboard and other multi-staff instruments -@section Keyboard and other multi-staff instruments - -@lilypondfile[quote]{keyboard-headword.ly} - -Dieser Abschnitt behandelt verschiedene Notationsaspekte, die -typischerweise in Noten für Tasteninstrumente und andere -Instrumente auf mehreren Notensystemen auftreten, wie etwa -Harfe und Vibraphon. Hier wird die gesamte Gruppe von -Instrumenten, die auf mehreren Systemen notiert werden, als -@qq{Tasteninstrumente} bezeichnet, auch wenn einige von ihnen -keine Tasten aufweisen. - -@menu -* Common notation for keyboards:: -* Piano:: -* Accordion:: -* Harp:: -@end menu - -@node Common notation for keyboards -@subsection Common notation for keyboards - -Dieser Abschnitt zeigt allgemeine Eigenschaften des Notensatzes, die -für die meisten Instrumente mit mehreren Systemen benötigt werden. - -@menu -* References for keyboards:: -* Changing staff manually:: -* Changing staff automatically:: -* Staff-change lines:: -* Cross-staff stems:: -@end menu - - -@node References for keyboards -@unnumberedsubsubsec References for keyboards - -@cindex Klaviersystem -@cindex Piano-System -@cindex Notensystem, Klavier -@cindex Notensystem, Tasteninstrumente -@cindex Tasteninstrumente, Notensystem - -@funindex PianoStaff - -Tasteninstrumente werden normalerweise auf einem Klaviersystem -notiert. Es besteht aus zwei Notensystemen, die durch -eine Klammer verbunden sind. Die gleiche Notation wird auch für -andere Tasteninstrumente sowie Harfen verwendet. Orgelmusik -wird normalerweise auf zwei Systemen innerhalb eines Klaviersystems -notiert, denen noch ein drittes normales Notensystem für die -Pedaltöne hinzugefügt wird. - -Die Systeme eines Klaviersystems sind ziemlich unabhängig, aber -Stimmen können bei Bedarf zwischen den Systemen wechseln. - -Einige häufige Besonderheiten von Notation für Tasteninstrumenten -wird an anderen Stellen besprochen: - -@itemize - -@item Noten für Tasteninstrumente haben oft mehrere Stimmen und -die Anzahl der Stimmen kann sich häufig ändern. Das ist -beschrieben in -@ref{Collision resolution}. - -@item Noten für Tasteninstrumente kann auch parallel, Takt für -Takt notiert werden, wie gezeigt in -@ref{Writing music in parallel}. - -@item Fingersatz wird erklärt in -@ref{Fingering instructions}. - -@item Orgelpedal-Zeichen werden als Artikulationszeichen notiert, -siehe -@ref{List of articulations}. - -@item Vertikale Rasterlinien können erstellt werden, siehe -@ref{Grid lines}. - -@item Noten für Tasteninstrumente beinhalten oft -@notation{Laissez vibrer}-Bögen und Bindebögen mit Arpeggio -oder Tremolo, siehe hierzu -@ref{Ties}. - -@item Arpeggios können auch zwischen den Systemen verbunden -werden, siehe hierzu -@ref{Arpeggio}. - -@item Tremolo-Zeichen finden sich in -@ref{Tremolo repeats}. - -@item Viele der Optimierungen, die für Tastenmusik nötig sein -können, sind demonstriert in -@rlearning{Real music example}. - -@item Unsichtbare Noten können eingesetzt werden, um -Überbindungen zwischen Stimmen zu setzen, siehe -@rlearning{Other uses for tweaks}. - -@end itemize - - -@c @snippets -@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] -@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly} -@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 - - -@seealso -Handbuch zum Lernen: -@rlearning{Real music example}, -@rlearning{Other uses for tweaks}. - -Notationsreferenz: -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Collision resolution}, -@ref{Writing music in parallel}, -@ref{Fingering instructions}, -@ref{List of articulations}, -@ref{Grid lines}, -@ref{Ties}, -@ref{Arpeggio}, -@ref{Tremolo repeats}. - -Schnipsel: -@rlsr{Keyboards}. - -Referenz der Interna: -@rinternals{PianoStaff}. - -@knownissues - -@cindex Tasteninstrumente, zentrierte Dynamik -@cindex Dynamik, zentriert für Tasteninstrumente -@cindex Klaviermusik, Dynamik zentrierten -@cindex zentrierte Musik für Tasteninstrumente -@funindex staff-padding - -Dynamikzeichen werden nicht automatische zwischen den Systemen -zentriert, aber es gibt hierzu Lösungen. Eine Möglichkeit ist -die Vorlage @qq{Klavier mit zentrierten Lautstärkebezeichnungen} -im Abschnitt @rlearning{Piano templates}; eine andere Möglichkeit -ist es, die @code{staff-padding}-Eigenschaft von -Lautstärkebezeichnungen zu erhöhen, wie gezeigt in -@rlearning{Moving objects}. - - -@node Changing staff manually -@unnumberedsubsubsec Changing staff manually - -@cindex manuelle Systemwechsel -@cindex Systemwechsel, manuell -@cindex Wechsel des Systems, manuell -@cindex Noten, Wechsel zwischen Systemen -@cindex Springen zwischen Systemen -@cindex Balken zwischen Systemen - -@funindex \change -@funindex change - -Stimmen können mit dem Befehl - -@example -\change Staff = @var{Systembezeichnung} -@end example - -@noindent -manuell erzielt werden. Die Zeichenkette @var{Systembezeichnung} -ist die Bezeichnung des Systems. Damit wird die aktuelle Stimme -vom aktuellen System zu dem System mit der @var{Systembezeichnung} -gewechselt. Üblicherweise ist die Systembezeichnung @code{"up"} -oder @code{"down"}, @code{"RH"} oder @code{"LH"}. - -Balken zwischen den Systemen werden automatisch erstellt: - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff = "up" { - 8 - \change Staff = "down" - g8 fis g - \change Staff = "up" - 8 - \change Staff = "down" - e8 dis e - \change Staff = "up" - } - \new Staff = "down" { - \clef bass - % keep staff alive - s1 - } ->> -@end lilypond - -@noindent -Wenn die Balken verändert werden müssen, sollte zuerst die Richtung -des Balkens beeinflusst werden. Die Balkenposition wird dann von -der Mitte des Systems gemessen, dass näher am Balken ist. Ein -einfaches Beispiel ist gezeigt in @rlearning{Fixing overlapping notation}. - -@seealso -Handbuch zum Lernen: -@rlearning{Fixing overlapping notation}. - -Notationsreferenz: -@ref{Stems}, -@ref{Automatic beams}. - -Schnipsel: -@rlsr{Keyboards}. - -Referenz der Interna: -@rinternals{Beam}, -@rinternals{ContextChange}. - - -@node Changing staff automatically -@unnumberedsubsubsec Changing staff automatically - -@cindex Automatischer Systemwechsel -@cindex Systemwechsel, automatisch -@cindex Wechsel des Systems, automatisch - -@funindex \autochange -@funindex autochange -@funindex PianoStaff - -Stimmen können angewiesen werden, automatisch zwischen dem -oberen und unteren System zu wechseln. Die Syntax hierfür lautet: - -@example -\autochange @dots{}@var{Noten}@dots{} -@end example - -@noindent -Damit werden zwei Notensysteme innerhalb des aktiven Klaviersystems -erstellt, die @qq{oben} (@code{up}) und @qq{unten} (@code{down}) genannt -werden. Auf dem unteren System wird als Standard der Bassschlüssel -gesetzt. Der Wechsel wird automatisch basierend auf der Tonhöhe der Note -vorgenommen (als Wechselpunkt gilt das eingestrichene C). Dabei -wird die Richtung auch über Pausen hinweg im Voraus bestimmt. - -@lilypond[quote,verbatim] -\new PianoStaff { - \autochange { - g4 a b c' - d'4 r a g - } -} -@end lilypond - -@cindex relativer Modus und automatischer Systemwechsel -@cindex automatischer Systemwechsel und relativer Modus - -@funindex \relative -@funindex relative - -Ein @code{\relative}-Abschnitt, der sich außerhalb des -@code{\autochange}-Abschnittes befindet, hat keinen Einfluss auf die -Notenhöhen. - -Wenn individuelle Kontrolle über die einzelen Systeme benötigt -wird, können sie manuell mit den Bezeichnungen @code{"up"} und -@code{"down"} erstellt werden. Der @code{\autochange}-Befehl -wechselt dann die Stimme zwischen den Systemen. - -@warning{Wenn Systeme manuell erstellt werden, @strong{müssen} sie genau -die Bezeichnungen @code{"up"} und @code{"down"} bekommen, damit die -automatische Wechselfunktion sie erkennen kann.} - -Systeme müssen etwa manuell erstellt werden, damit die Tonart im unteren -System gesetzt werden kann: - -@c Keep Ly needed, otherwise 'up' and 'down' get -@c incorrectly translated in verbatim output -@c KEEP LY -@lilypond[quote,verbatim,nogettext] -\new PianoStaff << - \new Staff = "up" { - \new Voice = "melodieEins" { - \key g \major - \autochange \relative c' { - g8 b a c b d c e - d8 r fis, g a2 - } - } - } - \new Staff = "down" { - \key g \major - \clef bass - } ->> -@end lilypond - -@seealso -Notationsreferenz: -@ref{Changing staff manually}. - -Schnipsel: -@rlsr{Keyboards}. - -Referenz der Interna: -@rinternals{AutoChangeMusic}. - -@knownissues - -@cindex Akkorde, zwischen Systemen mit \autochange - -Die Auteilung auf die Systeme geschieht nicht unbedingt an optimaler -Stelle. Für bessere Qualität müssen die Wechsel manuell eingestellt -werden. - -Akkrode werde nicht über die Systeme verteilt, sie werden dem -System zugewiesen, auf dem sich ihre erste Note befinden würde. - - -@node Staff-change lines -@unnumberedsubsubsec Staff-change lines - -@cindex Stimmkreuzung -@cindex Systemwechsel von Stimmen -@cindex Wechsel zwischen Systemen -@cindex Stimme folgen -@cindex Folgen einer Stimmen in anderes System -@cindex Stimmfolgestriche -@cindex Striche zur Stimmverfolgung - -@funindex followVoice -@funindex \showStaffSwitch -@funindex showStaffSwitch -@funindex \hideStaffSwitch -@funindex hideStaffSwitch - -Immer, wenn eine Stimme von einem Klaviersystem zu dem anderen -wechselt, kann automatisch eine Linie zur Verdeutlichung des -Stimmenverlaufs ausgegeben werden: - -@lilypond[quote,verbatim,relative=1] -\new PianoStaff << - \new Staff = "one" { - \showStaffSwitch - c1 - \change Staff = "two" - b2 a - } - \new Staff = "two" { - \clef bass - s1*2 - } ->> -@end lilypond - -@predefined -@funindex \showStaffSwitch -@code{\showStaffSwitch}, -@funindex \hideStaffSwitch -@code{\hideStaffSwitch}. -@endpredefined - -@seealso -Schnipsel: -@rlsr{Keyboards}. - -Referenz der Interna: -@rinternals{Note_head_line_engraver}, -@rinternals{VoiceFollower}. - - -@node Cross-staff stems -@unnumberedsubsubsec Cross-staff stems - -@cindex Hälse über zwei Systeme -@cindex System querende Hälse -@cindex Abstand zwischen Systemen in Klaviernoten -@cindex Notenhälse über zwei Systeme -@cindex Akkorde über zwei Systeme - -@funindex Stem -@funindex cross-staff -@funindex length -@funindex flag-style - -Akkorde, die über zwei Systeme reichen, können erstellt werden, -indem die Länge der Hälse im unteren System vergrößert wird, -bis sie zum oberen System hinauf reichen bzw. umgekehrt bei -Hälsen, die nach unten zeigen. - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff { - \relative c' { - f8 e4 d8 d f e4 - } - } - \new Staff { - \relative c' { - << { - \clef bass - % stems may overlap the other staff - \override Stem #'cross-staff = ##t - % extend the stems to reach other other staff - \override Stem #'length = #12 - % do not print extra flags - \override Stem #'flag-style = #'no-flag - % prevent beaming as needed - a8 g4 f8 f bes\noBeam g4 - } - \\ - { - f,2 bes4 c - } >> - } - } ->> -@end lilypond - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{indicating-cross-staff-chords-with-arpeggio-bracket.ly} - -@seealso -Schnipsel: -@rlsr{Keyboards}. - -Referenz der Interna: -@rinternals{Stem}. - - -@node Piano -@subsection Piano - -Dieser Abschnitt zeigt Eigenheiten der Notation von Klavermusik - -@menu -* Piano pedals:: -@end menu - -@node Piano pedals -@unnumberedsubsubsec Piano pedals - -@cindex Pedalbezeichnung -@cindex Klavier, Pedalbezeichnung -@cindex Piano, Pedalbezeichnung -@cindex sostenuto-Pedal -@cindex Pedal, sostenuto -@cindex una corda -@cindex tre corde -@cindex sos. -@cindex U.C. - -@funindex \sustainOn -@funindex sustainOn -@funindex \sustainOff -@funindex sustainOff -@funindex \sostenutoOn -@funindex sostenutoOn -@funindex \sostenutoOff -@funindex sostenutoOff -@funindex \unaCorda -@funindex unaCorda -@funindex \treCorde -@funindex treCorde - -Klaviere (teilweise auch Vibraphone und Celesta) besitzen üblicherweise -drei Pedale, das linke oder Haltepedal, das rechte oder Una-corda-Pedal -und das Sostenuto-Pedal. Die englischen Begriff hierzu lauten: -@notation{sustain}, @notation{sostenuto} und @notation{una corda}. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn d e g -1\sustainOff -c4\sostenutoOn e g c, -1\sostenutoOff -c4\unaCorda d e g -1\treCorde -@end lilypond - -@cindex Pedalbezeichnung, Stile -@cindex Haltepedal, Stile -@cindex Pedalbezeichnung, Text -@cindex Pedalbezeichnung, Klammer - -@funindex pedalSustainStyle -@funindex mixed -@funindex bracket -@funindex text - -Die Pedalbezeichnung kann auf drei Arten vorgenommen werden: mit -Text, Klammern oder einer Mischung aus beidem. Das Haltepedal -und das Una-corda-Pedal benutzen als Standard die Textdarstellung, -während das Sostenuto-Pedal den gemischten Stil benutzt: - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn g c2\sustainOff -\set Staff.pedalSustainStyle = #'mixed -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2\sustainOff -\set Staff.pedalSustainStyle = #'bracket -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2 -\bar "|." -@end lilypond - -Die Platzierung der Befehle entspricht der Bewegung der Pedale -während des Spielens. Um das Pedal bis zur letzten Tatklinie zu -halten, muss der letzte Pedal-hoch-Befehl weggelassen werden. - -@seealso -Notationsreferenz: -@ref{Ties}. - -Schnipsel: -@rlsr{Keyboards}. - -Referenz der Interna: -@rinternals{SustainPedal}, -@rinternals{SustainPedalLineSpanner}, -@rinternals{SustainEvent}, -@rinternals{SostenutoPedal}, -@rinternals{SostenutoPedalLineSpanner}, -@rinternals{SostenutoEvent}, -@rinternals{UnaCordaPedal}, -@rinternals{UnaCordaPedalLineSpanner}, -@rinternals{UnaCordaEvent}, -@rinternals{PianoPedalBracket}, -@rinternals{Piano_pedal_engraver}. - - -@node Accordion -@subsection Accordion - -@cindex Akkordeon - -Dieser Abschnitt behandelt Notation, die nur für Akkordeonmusik -benötigt wird. - -@menu -* Discant symbols:: -@end menu - -@node Discant symbols -@unnumberedsubsubsec Discant symbols - -@cindex Akkordeon, Diskant-Symbole -@cindex Diskantsymbole, Akkordeon -@cindex Symbole, Akkordeon -@cindex Akkordeon, Register - -Akkordeons werden oft mit mehreren Reihen an Zungen gebaut, welche -Unisono oder eine Oktave höher bzw. tiefer erklingen. Jedes -Akkordeon hat eigene Bezeichnungen für die Register (engl. shift) -wie etwa @notation{Oboe}, @notation{Bandonium} usw. Eine -Anzahl an Symbolen wird benutzt um die Wechsel anzuzeigen. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{accordion-discant-symbols.ly} - -@seealso -Schnipsel: -@rlsr{Keyboards}. - - - -@node Harp -@subsection Harp - -Dieser Abschnitt zeigt Eigenheiten der Notation für Harfe. - -@menu -* References for harps:: -* Harp pedals:: -@end menu - - -@node References for harps -@unnumberedsubsubsec References for harps - -@cindex Harfe - -Einige übliche Notationseigenheiten für Harfe sind woanders behandelt: - -@itemize - -@item Glissando ist die üblichste Harfentechnik, siehe -@ref{Glissando}. - -@item Ein @notation{Bisbigliando} wird als ein Tremolo notiert, siehe @ref{Tremolo -repeats} - -@item Flageolettöne werden hier beschrieben: @ref{Harmonics}. - -@item Für Arpeggio und non-arpeggio, siehe @ref{Arpeggio}. - -@end itemize - -@seealso -Notationsreferenz: -@ref{Tremolo repeats} -@ref{Glissando} -@ref{Arpeggio} -@ref{Harmonics} - - - -@node Harp pedals -@unnumberedsubsubsec Harp pedals - -@cindex Harfenpedal -@cindex Pedal, Harfe -@cindex Pedaldiagramme, Harfe - -Harfe haben sieben Saiten in einer Oktave, die entweder als normaler -Ton, oder aber erhöht bzw. erniedrigt klingen können. Bei einer -Hakenharfe kann man jede Saite einzeln einstellen, bei Pedalharfen aber -wird jede Saite mit der gleichen Notenbezeichnung von einem einzigen -Pedal kontrolliert. Vom Spieler aus gesehen von rechts nach links sind -die Pedale: D, C und H für die linke und E, F, G und A für die rechte -Seite. Die Position des Pedals kann mit Textbeschriftungselementen: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup \concat \vcenter { [D \flat C \sharp B|E \sharp F \sharp G A \flat] } -c!1_\markup \concat \vcenter {[ C \natural ]} -@end lilypond - -@noindent -oder Pedaldiagrammen angezeigt werden: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup { \harp-pedal #"^v-|vv-^" } -c!1_\markup { \harp-pedal #"^o--|vv-^" } -@end lilypond - -Der @code{\harp-pedal}-Befehl braucht eine Anzahl an Zeichen, von -welchen @code{^} die höchste Pedalposition (erniedrigte Tonhöhe), -@code{-} die mittlere Pedalposition (normale Tonhöhe, @code{v} die -tiefste Pedalposition (erhöhter Ton) anzeigt. @code{|} ist ein -Trenner. Ein @code{o} vor der Definition umrandet das Symbol. - -@seealso -Notationsreferenz: -@ref{Text scripts} -@ref{Instrument Specific Markup}. diff --git a/Documentation/de/user/lilypond-book.itely b/Documentation/de/user/lilypond-book.itely deleted file mode 100644 index 9b950b801f..0000000000 --- a/Documentation/de/user/lilypond-book.itely +++ /dev/null @@ -1,1109 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Reinhold Kainhofer -@c Translation checkers: Till Rettig - - -@node LilyPond-book -@chapter @command{lilypond-book}: Integrating text and music - -Wenn Sie in ein Dokument Grafiken Ihres Musiksatzes einfügen möchten, so -können Sie genauso machen, wie Sie andere Grafiken einfügen würden: Die -Bilder werden getrennt vom Dokument im PostScript- oder PNG-Format erstellt -und können dann in @LaTeX{} oder HTML inkludiert werden. - -@command{lilypond-book} automatisiert diesen Prozess: Dieses -Programm extrahiert Musik-Schnipsel aus Ihrem Dokument, -ruft @command{lilypond} auf und fügt die resultierenden Bilder -in Ihr Dokument ein. Die Länge der Zeilen und die Schriftgroße -werden dabei Ihrem Dokument angepasst. - -@command{lilypond-book} ist ein eigenständiges Programm und wird -üblicherweise von der Kommandozeile aufgerufen. Nähere Informationen -hierzu finden sich in @ref{Command-line usage}. Wenn Sie MacOS 10.3 -oder 10.4 benutzen und Probleme mit @code{lilypond-book} haben, lesen -Sie @ref{Setup for MacOS X}. - -Dieses Vorgehen kann bei @LaTeX{}, HTML, Texinfo oder DocBook Dokumenten -angewendet werden. - -@cindex texinfo -@cindex latex -@cindex texinfo -@cindex texi -@cindex html -@cindex docbook -@cindex Dokument, Musik einfügen in -@cindex HTML, Musik in -@cindex Texinfo, Musik in -@cindex DocBook, Musik in -@cindex @LaTeX{}, Musik in - - -@menu -* An example of a musicological document:: -* Integrating music and text:: -* Music fragment options:: -* Invoking lilypond-book:: -* Filename extensions:: -* Alternate methods of mixing text and music:: -@end menu - -@node An example of a musicological document -@section An example of a musicological document - - -@cindex Musikwissenschaft - -Zahlreiche Texte enthalten Musikbeispiele: musikwissenschaftliche -Abhandlungen, Liederbücher oder Handbücher wie dieses. Solche -Texte können händisch erzeugt werden, indem einfach die Musikbeispiele -als Grafik (PostScript, PNG, GIF, etc.) im Textverarbeitungsprogramm -eingefügt werden. Für HTML, @LaTeX{}, Texinfo und DocBook Dokumente -existiert jedoch ein Weg, dies automatisiert durchzuführen. - -Das Programm @code{lilypond-book} extrahiert die Musikfragmente aus -dem Dokument, formatiert sie automatisiert in eine Grafik und fügt die -resultierenden Notenbeispiele dann wieder in das Dokument ein. Dies soll -hier an einem einfachen @LaTeX{}-Beispiel verdeutlicht werden. Das Beispiel -selbst enthält schon Erklärungen, sodass wir es hier nicht weiter diskutieren -müssen. - -@subheading Input - -@quotation -@verbatim -\documentclass[a4paper]{article} - -\begin{document} - -Dokumente für \verb+lilypond-book+ können Musik und Text nach Belieben -kombinieren. Zum Beispiel: - -\begin{lilypond} -\relative c' { - c2 g'2 \times 2/3 { f8 e d } c'2 g4 -} -\end{lilypond} - -Optionen für \verb+lilypond+ werden dabei in eckige Klammern gesetzt. - -\begin[fragment,quote,staffsize=26,verbatim]{lilypond} - c'4 f16 -\end{lilypond} - -Größere Beispiele können auch in einer eigenständigen Datei gespeichert -und dann mit \verb+\lilypondfile+ eingebunden werden. - -\lilypondfile[quote,noindent]{screech-boink.ly} - -(Falls nötig kann screech-boink.ly durch eine beliebige andere .ly -Datei im selben Verzeichnis wie diese Datei ersetzt werden.) - -\end{document} -@end verbatim -@end quotation - -@subheading Processing - -Speichern Sie den obigen @LaTeX{} Quellcode in eine Datei @file{lilybook.lytex} -und führen Sie dann in der Kommandozeile folgende Befehle aus: - -@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{..(viele Ausgabezeilen entfernt)..} -@emph{Compiling lilybook.tex...} -cd out -pdflatex lilybook -@emph{..(viele Ausgabezeilen entfernt)..} -xpdf lilybook -@emph{(Ersetzen Sie @command{xpdf} durch Ihren PDF-Betrachter)} -@end example - -Die Ausführung von @command{lilypond-book} und @command{latex} erzeugt -zahlreiche temporäre Dateien, die das Arbeitsverzeichnis unnötig -vollstopfen würden. Daher empfiehlt sich die Benutzung der @code{--output=@var{dir}} -Option, wodurch die Dateien im Unterverzeichnis @file{dir} erzeugt werden. - -Das Endresultat des obigen @LaTeX{} Beispiels ist im nächsten Abschnitt -zu sehen.@footnote{Da dieses Handbuch mit Texinfo erzeugt wurde, -kann sich das Aussehen des Beispiels leicht von dem mit @LaTeX{} -erzeugten unterscheiden.} - -@page - -@subheading Output - -Dokumente für @command{lilypond-book} können Musik und Text nach Belieben -kombinieren. Zum Beispiel: - -@lilypond -\relative c' { - c2 g'2 \times 2/3 { f8 e d } c'2 g4 -} -@end lilypond - -Optionen für @command{lilypond} werden dabei in eckige Klammern gesetzt. - -@lilypond[fragment,quote,staffsize=26,verbatim] -c'4 f16 -@end lilypond - -Größere Beispiele können auch in einer eigenständigen Datei gespeichert -und dann mit @code{\lilypondfile} eingebunden werden. - -@lilypondfile[quote,noindent]{screech-boink.ly} - - -@page - - - -@node Integrating music and text -@section Integrating music and text - -In diesem Abschnitt soll die Integration von LilyPond mit den -verschiedenen Dateiformaten detailliert erläutert werden. - - -@menu -* LaTeX:: -* Texinfo:: -* HTML:: -* DocBook:: -@end menu - -@node LaTeX -@subsection @LaTeX{} - - -@LaTeX{} ist der de-facto Standard zur Publikation von wissenschaftlichen Texten -in Naturwissenschaft und Technik. Es basiert auf dem Schriftsetzer @TeX{}, -der die bestmögliche Typographie erzeugt. - -Siehe die @uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/german/, -@emph{@LaTeX{}2e-Kurzbeschreibung}} für eine Einführung in die -Benutzung von @LaTeX{}. - -Musikbeispiele können eingegeben werden als - -@example -\begin[Optionen,kommen,]@{lilypond@} - IHR LILYPOND QUELLCODE -\end@{lilypond@} -@end example - -@noindent -oder - -@example -\lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} -@end example - -@noindent -oder - -@example -\lilypond@{ IHR LILYPOND QUELLCODE @} -@end example - -Zusätzlich kann mit @code{\lilypondversion} die benutzte Versionsnummer -von LilyPond angezeigt werden. Der Aufruf von @command{lilypond-book} -liefert eine Datei, die dann mit @LaTeX{} weiter verarbeitet werden kann. - -Dies soll hier an einigen Beispielen gezeigt werden. Die @code{lilypond}-Umgebung - -@example -\begin[quote,fragment,staffsize=26]@{lilypond@} - c' d' e' f' g'2 g'2 -\end@{lilypond@} -@end example - -@noindent -erzeugt - -@lilypond[quote,fragment,staffsize=26] -c' d' e' f' g'2 g'2 -@end lilypond - -Die Kurzversion - -@example -\lilypond[quote,fragment,staffsize=11]@{@} -@end example - -@noindent -erzeugt - -@lilypond[quote,fragment,staffsize=11]{} - -@noindent -Innerhalb des @code{\lilypond@{@}} Befehls dürfen keine geschwungenen -Klammern @code{@{} oder @code{@}} vorkommen, weshalb dieser Befehl -nur mit der @code{fragment} Option Sinn macht. - -Die Standardzeilenlänge wird bestimmt, indem die Angaben in der Dokumentpräambel, -also dem Teil der @LaTeX{} Datei vor dem @code{\begin@{document@}}, -analysiert werden. Der @command{lilypond-book} Befehl sendet diese -Angaben an @LaTeX{}, um herauszufinden, wie breit der Text tatsächlich -ist. Die Breite der Notenzeilen wird dann an diese Textbreite angepasst. -Ein derartig heuristischer Algorithmus kann natürlich auch versagen, -wobei man in diesem Fall die Breite auch explizit durch die -@code{line-width} Option des @code{\lilypond@{@}} oder @code{\begin@{lilypond@}} -Befehls angeben kann. - -@cindex titling and lilypond-book -@cindex \header in @LaTeX{} documents - -Jedes Musikbeispiele ruft die folgenden Makros auf, wenn sie vom Benutzer -definiert wurden: - -@itemize @bullet -@item @code{\preLilyPondExample} -- wird vor der Musik aufgerufen, - -@item @code{\postLilyPondExample} -- wird nach der Musik aufgerufen, - -@item @code{\betweenLilyPondSystem[1]} -- wird zwischen den einzelnen -Systemen aufgerufen, wenn @code{lilypond-book} das Beispiel in verschiedene -PostScript Dateien getrennt hat. Dieser @LaTeX{}-Befehl muss so definiert -werden, dass er genau ein Argument erhält, nämlich die Zahl der bereits -in @LaTeX{} eingefügten Dateien dieses Beispiels. Als Standard wird einfach -ein @code{\linebreak} eingefügt. -@end itemize - -@ignore -Broken stuff. :( - -@cindex Latex, Feta Schriftart -@cindex fetachar - -Um Zeichen wie Auflösungszeichen, Kreuze, Fermaten etc. aus der Feta-Schriftart -von LilyPond in @LaTeX{} einzufügen, muss @code{\input@{titledefs@}} benutzt werden, -wodurch dann der Befehl @code{\fetachar} zur Verfügung steht. - -@example -\documentclass[a4paper]@{article@} - -\input@{titledefs@} - -\begin@{document@} - -\fetachar\fetasharp - -\end@{document@} -@end example - -Die Namen der Symbole sind in der Datei @file{feta20.tex} definiert. Sie finden -den Pfad zu dieser Datei mit dem Befehl - -@example -kpsewhich feta20.tex -@end example - -@end ignore - -@snippets - -Manchmal ist es nötig, Musikelemente wie Halte- oder Bindebögen so darzustellen, -als ob sie am Ende des Musikausschnitten noch weitergehen würden. Eine solche -Ausgabe kann erreicht werden, indem ein Zeilenumbruch in die Notenzeile -eingefügt wird und die Ausgabe der folgenden Notenzeile unterdrückt wird. - -In @LaTeX{} wird dazu der Befehl @code{\betweenLilyPondSystem} einfach derartig -programmiert, dass die Ausgabe der einzelnen Notensysteme abgebrochen wird, -sobald die gewünschte Anzahl an Systemen erreicht ist. Da -@code{\betweenLilyPondSystem} zum ersten Mal nach dem ersten System aufgerufen -wird, ist die Ausgabe nur eines Systems trivial. - -@example -\def\betweenLilyPondSystem#1@{\endinput@} - -\begin[fragment]@{lilypond@} - c'1\( e'( c'~ \break c' d) e f\) -\end@{lilypond@} -@end example - -Um eine größere Zahl an System nötig, dann muss dementsprechend eine -@TeX{}-Bedingung vor dem @code{\endinput} benutzt werden: - -@example -\def\betweenLilyPondSystem#1@{ - \ifnum##1<2\else\endinput\fi -@} -@end example - -Dieses Beispiel bricht nach genau zwei ausgegebenen Notenzeilen ab. -Für eine andere Anzahl braucht nur @q{2} durch die entsprechende -Anzahl ersetzt werden. - -Die Definition von @code{\betweenLilyPondSystem} bleibt gültig, -bis @TeX{} die aktuelle Umgebung in @LaTeX{} verlässt oder der -Befehl durch eine neue Definition überschrieben wird. -Dies kann etwa folgendermaßen in der @LaTeX{}-Datei geschehen: - -@example -\let\betweenLilyPondSystem\undefined -@end example - -Obige Definition von @code{\betweenLilyPondSystem} kann durch die -Definition eines @TeX{}-Makros auch verallgemeinert werden, - -@example -\def\onlyFirstNSystems#1@{ - \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} -@} -@end example - -@noindent -wobei diesem Makro @code{\onlyFirstNSystems} einfach die Anzahl der -gewünschten Systeme übergeben wird: - -@example -\onlyFirstNSystems@{3@} -\begin@{lilypond@}...\end@{lilypond@} -\onlyFirstNSystems@{1@} -\begin@{lilypond@}...\end@{lilypond@} -@end example - -@seealso -@command{lilypond-book} stellt auch zahlreiche Kommandozeilen-Optionen zur -Verfügung. Für eine Liste dieser Optionen und andere hilfreiche Details zur -Verarbeitung von @LaTeX{}-Dokumenten, siehe @ref{Invoking lilypond-book}. - - - - -@node Texinfo -@subsection Texinfo - -Texinfo ist das Standard-Dokumentationsformat des GNU Projekts. Ein Beispiel -für ein Dokument im Texinfo Format ist dieses Handbuch, wobei die HTML-, PDF- und -Info-Versionen alle aus demselben Texinfo Dokument erzeugt werden. - -In der Eingabedatei wir Musik eingegeben als - -@example -@@lilypond[Optionen,kommen,hier] - IHR LILYPOND QUELLCODE -@@end lilypond -@end example - -@noindent -oder - -@example -@@lilypond[Optionen,kommen,hier]@{ IHR LILYPOND QUELLCODE @} -@end example - -@noindent -oder - -@example -@@lilypondfile[Optionen,kommen,hier]@{@var{Dateiname}@} -@end example - -Zusätzlich kann mit @code{@@lilypondversion} die aktuelle Versionsnummer -von LilyPond angezeigt werden. -Wenn @command{lilypond-book} eine derartige Datei verarbeitet, -wird eine Texinfo-Datei mit der Erweiterung @file{.texi} erzeugt, -die @code{@@image} Befehle für die Ausgabe nach HTML, Info und PDF -enthält. @command{lilypond-book} erzeugt die entsprechenden Grafiken -der Musikbeispiele im EPS- und PDF-Format für die Ausgabe nach PDF -und im PNG-Format für die Ausgabe nach HTML und Info. - -Hier sollen zwei einfache Beispiele gezeigt werden. Eine @code{lilypond} Umgebung - -@example -@@lilypond[fragment] -c' d' e' f' g'2 g' -@@end lilypond -@end example - -@noindent -erzeugt - -@lilypond[fragment] -c' d' e' f' g'2 g' -@end lilypond - -Die Kurzversion - -@example -@@lilypond[fragment,staffsize=11]@{@} -@end example - -@noindent -erzeugt - -@lilypond[fragment,staffsize=11]{} - -Im Gegensatz zu @LaTeX{} erzeugt @code{@@lilypond@{...@}} allerdings keine Grafik -im Fließtext, sondern setzt sie immer in einen eigenen Absatz. - - -@node HTML -@subsection HTML - -Musik wird eingegeben als - -@example - -\key c \minor c4 es g2 - -@end example - -@noindent -@command{lilypond-book} erzeugt dann daraus eine HTML-Datei mit den entsprechenden -@code{} Tags für die Musikbeispiele in jeweils einem eigenen Absatz. - -@lilypond[fragment,relative=2] -\key c \minor c4 es g2 -@end lilypond - -Für Grafiken im Fließtext kann @code{} benutzt werden, wobei -die Optionen durch einen Doppelpunkt von der Musik getrennt angegeben werden. - -@example -Musik in derselben Zeile. -@end example - -Um Dateien mit Musik einzubinden, kann folgendermaßen vorgegangen werden: - -@example -@var{Dateiname} -@end example - -Zusätzlich gibt @code{} die aktuelle Versionsnummer -von LilyPond aus. - - -@node DocBook -@subsection DocBook - - -Bei der Einbindung von Musik im LilyPond-Format in DocBook soll die -Konformität unseres DocBook Dokuments erhalten bleiben und damit -die Bearbeiten mit DocBook-Editoren sowie die Validierung weiter -möglich bleiben. Aus diesem Grund werden in DocBook keine eigenen Tags -wie in HTML benutzt, sondern die von den vorhandenen DocBook-Elementen -vorgegebenen Konventionen entsprechend benützt. - -@subheading Common conventions - -Für die Einbindung von LilyPond Code werden in allen Fällen die -@code{mediaobject} und @code{inlinemediaobject} Elemente benutzt, -die unsere Beispiele in einem eigenen Absatz oder im Fließtext -einfügen. Die Optionen zur Formatierung mit LilyPond werden dabei -in der @code{role} Eigenschaft des innersten Elements angegeben, -wie im nächsten Abschnitt gezeigt wird. Die DocBook Datei, die -dann von @command{lilypond-book} verarbeitet wird, sollte der Klarheit -halber die Dateierweiterung @file{.lyxml} (jedenfalls nicht -@file{.xml}) besitzen. - -@subheading Including a LilyPond file - -Dies ist der einfachste Fall: Die LilyPond-Datei besitzt die Erweiterung -@file{.ly} und wird einfach als @code{imageobject} eingebettet: - -@example - - - - - -@end example - -Für das äußerste Element kann je nach Bedarf @code{mediaobject} oder -@code{inlinemediaobject} benutzt werden. - -@subheading Including LilyPond code - -Die Einbindung von LilyPond-Code direkt in der DocBook-Datei ist -durch die Benutzung von @code{programlisting} möglich, -wobei die Sprache auf @code{lilypond} gesetzt wird: - -@example - - - -\context Staff \with @{ - \remove Time_signature_engraver - \remove Clef_engraver@} - @{ c4( fis) @} - - - -@end example - -Das äußerste Element ist also @code{mediaobject} oder -@code{inlinemediaobject}, welches ein @code{textobject} mit dem -@code{programlisting} enthält. - -@subheading Processing the DocBook document - -Der Aufruf von @command{lilypond-book} mit der @file{.lyxml}-Datei -erzeugt ein gültiges DocBook-Dokument mit der Erweiterung @file{.xml}, -welches normal weiterverarbeitet werden kann. Bei Benutzung von -@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex} wird daraus -automatisch eine PDF-Datei erzeugt. Für die Erzeugung von HTML (HTML -Hilfe, JavaHelp, etc.) können die offiziellen DocBook XSL-Stylesheets -benutzt werden. Eventuell müssen dafür allerdings kleinere Anpassungen -vorgenommen werden. - - -@node Music fragment options -@section Music fragment options - -Im Folgenden meint @q{LilyPond-Kommando} ein beliebiges in den vorgehenden -Abschnitten beschriebenes Kommando, welches ein LilyPond-Fragment in eine Datei -einfügt und von @command{lilypond-book} verarbeitet wird. Der Einfachheit -halber werden hier alle LilyPond-Kommandos in der Syntax von @LaTeX{} -dargestellt. - -Zu beachten ist, dass die Optionen eines LilyPond-Kommandos von links -nach rechts verarbeitet werden. Wenn eine Option also mehrfach angegeben -wird, wird nur die letzte benutzt. - -Die folgenden Optionen können für LilyPond-Kommandos benutzt werden: - -@table @code -@item staffsize=@var{ht} -Setzt die Höhe einer Notenzeile auf @var{ht}, angegeben in Punkten. - -@item ragged-right -Erzeugt Notenzeilen im Flattersatz mit natürlichem Abstand der Noten. In -anderen Worten: @code{ragged-right = ##t} wird in das Musikfragment -eingefügt. Dies ist die Standardeinstellung für das @code{\lilypond@{@}} -Kommando, wenn die Option @code{line-width} nicht angegeben wird. -Ebenso ist dies die Standardeinstellung für die @code{lilypond}-Umgebung, -wenn die Option @code{fragment}, aber keine Zeilenlänge -explizit angegeben ist. - -@item noragged-right -Streckt Musikfragmente mit nur einer Notenzeile auf die volle Breite, -es wird also @code{ragged-right = ##f} in das Musikfragment eingefügt. - -@item line-width -@itemx line-width=@var{Breite}\@var{Einheit} -Setzt die Breite der Notenzeilen auf @var{Breite}, gemessen in Vielfachen -der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen angegeben -werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese Option hat -nur Einfluss auf die Breite von Notenzeilen und Text im Musikfragment, nicht -jedoch auf den restlichen Text des Dokuments. - -Wird diese Option ohne einen Wert angegeben, wird die Zeilenbreite auf -einen Standardwert gesetzt, der durch einen heuristischen Algorithmus -bestimmt wird. - -Wenn die @code{line-width} Option nicht angegeben wird, versucht -@command{lilypond-book} einen geeigneten Standardwert für alle -@code{lilypond}-Umgebungen zu finden, die die @code{ragged-right} Option -nicht benutzen. - -@item notime -Verhindert die Ausgabe der Taktangabe am Anfang des Fragments und schaltet -Taktstriche und alle Taktangaben im Fragment ab. - -@item fragment -Bewirkt, dass @command{lilypond-book} Standardcode um das Fragment herum einfügt, sodass z. B. - -@example -c'4 -@end example - -@noindent -ohne @code{\layout}, @code{\score}, etc. eingegeben werden kann. - -@item nofragment -Verhindert das Einfügen von Standardcode um das Fragment herum. Dies ist -die Standardeinstellung, insofern ist diese Option im Normalfall unnötig. - -@item indent=@var{Einzug}\@var{Einheit} -Setzt den Einzug des ersten Notensystems auf @var{Einzug}, gemessen in -Vielfachen der @var{Einheit}. Als Einheit können die folgenden Zeichenfolgen -angegeben werden: @code{cm}, @code{mm}, @code{in} oder @code{pt}. Diese -Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im -Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. - -@item noindent -Setzt den Einzug des ersten Notensystems auf 0. Diese -Option hat nur Einfluss auf den Einzug von Notenzeilen und Text im -Musikfragment, nicht jedoch auf den restlichen Text des Dokuments. Dies -ist die Standardeinstellung, insofern ist diese Option im Normalfall -unnötig. - -@item quote -Verringert die Zeilenlänge des Musikfragments um @math{2*0.4}@dmn{in} -und setzt das Fragment in einen Zitat-Block. Der Wert von @q{0.4@dmn{in}} -kann durch die @code{exampleindent} Option angepasst werden. - -@item exampleindent -Setzt den Betrag, um den das Fragment bei Benutzung der @code{quote} -Option eingerückt wird. - -@item relative -@itemx relative=@var{n} -Benutzt relative Oktavenbezeichnungen. Standardmäßig werden Noten relativ -zum mittleren C angegeben. Das optionale ganzzahlige Argument -gibt die Oktave der ersten Note an, wobei die Standardeinstellung von -@code{1} das mittlere C bedeutet. Die @code{relative} Option macht nur -Sinn in Verbindung mit der @code{fragment} Option, weshalb @code{fragment} -automatisch durch die Angabe der @code{relative} Option impliziert wird. -Eine explizite Angabe der @code{(no)fragment} Option hat keinen Effekt. -@end table - -LilyPond benutzt zur Erzeugung seiner eigenen Dokumentation ebenfalls -@command{lilypond-book}. Zu diesem Zweck stehen noch zahlreiche -spezialisierte Optionen zur Verfügung: - -@table @code -@item verbatim -Der LilyPond-Code im LilyPond-Kommando wird zum einen benutzt, um das -Musikfragment in eine Grafik mit schönem Notensatz zu konvertieren, -andererseits aber auch wörtlich in das Dokument eingefügt. Dies -geschieht in einem @q{verbatim}-Block, gefolgt vom Text einer -möglicherweise angegebenen @code{intertext} Option@footnote{Die -@code{intertext} Option ist noch nicht implementiert.} und der -Grafik des tatsächlichen Notensatzes. Diese Option funktioniert nur -fehlerhaft, wenn @code{\lilypond@{@}} im Fließtext benutzt wird. - -Wird @code{verbatim} in Verbindung mit einem @code{lilypondfile}-Kommando -benutzt, so ist es auch möglich, nur ein Teil der Datei wörtlich einfügen -zu lassen: Wenn die eingebundene LilyPond-Datei ein Kommentar mit dem Inhalt -@samp{begin verbatim} (ohne Anführungszeichen) enthält, wird nur der -Dateiinhalt ab dieser Position eingefügt. Enthält die Datei mehrere -solche Kommentare, wirkt nur das letzte. Analog wird nur der Dateiinhalt -bis zu einem etwaigen Kommentar mit dem Inhalt @samp{end verbatim} -eingefügt. Im folgenden Beispiel wird das gesamte Musik für die -Erzeugung der Grafik im relativen Oktavenmodus interpretiert, der -wörtlich in das Dokument kopierte LilyPond-Code zeigt den @code{relative}-Befehl jedoch nicht. - -@example -\relative c' @{ % begin verbatim - c4 e2 g4 - f2 e % end verbatim -@} -@end example - -@noindent -erzeugt ein Zitat der Form - -@example - c4 e2 g4 - f2 e -@end example - -@noindent -Wenn Kommentare und Variablen im Zitat, aber nicht im Quelltext -übersetzt werden sollen, kann die Umgebungsvariable @code{LYDOC_LOCALEDIR} -auf einen Verzeichnispfad gesetzt werden. Das Verzeichnis sollte -einen Baum an @file{.mo}-Nachrichtenkatalogen beinhalten mit -@code{lilypond-doc} als Domain. - -@item addversion -(Nur innerhalb von Texinfo-Dateien.) Stellt @code{\version -@@w@{"@@version@{@}"@}} an den Beginn des Fragments der Ausgabe mit -@code{verbatim}. - -@item texidoc -(Nur innerhalb von Texinfo-Dateien.) Wird @command{lilypond} mit der -Kommandozeilenoption @option{--header=@/texidoc} für eine Datei -@file{foo@/.ly} und enthält die Datei ein @code{texidoc}-Feld im -@code{\header}-Block, so wird dessen Inhalt in die Datei -@file{foo@/.texidoc} ausgegeben. Die @code{texidoc} Option veranlasst -@code{lilypond-book}, den Inhalt dieser @file{.texidoc} Dateien innerhalb -eines Dokumentationsblocks direkt vor dem Musikfragment in das aktuelle -Dokument einzufügen. - -Enthält also die Datei @file{foo@/.ly} etwa den LilyPond-Code - -@example -\header @{ - texidoc = "Dieses Beispiel zeigt eine einzelne Note." -@} -@{ c'4 @} -@end example - -@noindent -und das Texinfo-Dokument @file{text.texinfo} - -@example -@@lilypondfile[texidoc]@{foo.ly@} -@end example - -@noindent -so liefert der folgende Aufruf von @code{lilypond-book} das gewünschte -Ergebnis: - -@example -lilypond-book --pdf --process="lilypond \ - -dbackend=eps --header=texidoc" test.texinfo -@end example - -Die meisten Test-Dateien (im @file{input/} Verzeichnis von LilyPond) -sind kleine @file{.ly} Dateien von genau dieser Form. - -Auch die Übersetzung dieser zusätzlichen Kommentare ist möglich: -Dazu muss das Texinfo-Dokument den Befehl @code{@@documentlanguage @var{LANG}} -und der @code{\header} Block in der Datei @file{foo@/.ly} -die Übersetzung im Feld @code{texidoc@var{LANG}} enthalten. Wird nun -@command{lilypond} mit der Option @option{--header=@/texidoc@var{LANG}} -aufgerufen, so wird der Inhalt der Datei @file{foo@/.texidoc@var{LANG}} anstelle von @file{foo@/.texidoc} eingefügt. - -@item lilyquote -(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt wie die @code{quote} Option, außer dass nur das Musikfragment (und natürlich optional der -gesamte LilyPond-Code bei Benutzung von @code{verbatim}) in den Zitatblock eingefügt wird. Dies ist nützlich, wenn Sie ein Musikfragment zitieren möchten, nicht aber dessen @code{texidoc} Dokumentationsblock. - -@item doctitle -(Nur innerhalb von Texinfo-Dateien.) Diese Option wirkt ähnlich wie die -@code{texidoc} Option: Wenn @command{lilypond} mit der Option -@option{--header=@/doctitle} aufgerufen wird und die Eingabedatei -@file{foo@/.ly} ein Feld @code{doctitle} im @code{\header}-Block enthält, -wird dessen Wert in die Datei @file{foo@/.doctitle} geschrieben. Wird die -@code{doctitle} Option für ein Musikfragment benutzt, so wird der Inhalt -dieser Datei, der eine einzelne Textzeile sein sollte, im Texinfo-Dokument -als @code{@@lydoctitle @var{Text}} eingefügt. @code{@@lydoctitle} muss -allerdings in Ihrem Texinfo-Dokument als Makro selbst definiert werden. -Die Übersetzung funktioniert völlig analog zu @code{texidoc}. - -@item nogettext -Nur für Texinfo-Ausgabe: Kommentare und Variablenbezeichnungen im -zitierten Quelltext des Schnipsel werden nicht übersetzt. - -@item printfilename -Wenn eine LilyPond-Datei mittels @code{\lilypondfile} und dieser Option -eingebunden wird, wird der Dateiname (ohne die Pfadangabe) unmittelbar vor -dem Musikfragment ausgegeben. In HTML-Dateien ist er außerdem ein Link -auf die LilyPond-Datei. - -@item fontload -Diese Option inkludiert die Schriftarten in allen EPS-Dateien, die von -diesem Fragment erzeugt werden. Dies ist nötig, wenn das Fragment -Schriftarten benutzt, die @LaTeX{} nicht selbst findet. - -@end table - - -@node Invoking lilypond-book -@section Invoking @command{lilypond-book} - -@command{lilypond-book} erzeugt abhängig vom Ausgabeformat eine Datei mit -einer der folgenden Dateierweiterungen: @file{.tex}, @file{.texi}, -@file{.html} oder @file{.xml}. Alle @file{.tex}, @file{.texi} und -@file{.xml} Dateien müssen noch mit den entsprechenden Programmen (@LaTeX{}, -DocBook, etc.) weiter verarbeitet werden, um druckfähige Dateien zu erhalten. - - -@subheading Format-specific instructions - -@subsubheading @LaTeX{} - -Es existieren zwei Methoden, Ihr @LaTeX{}-Dokument weiter zu verarbeiten, -um zu einer druck- oder publikationsfähigen Datei zu gelangen: -Zum einen die direkte Erzeugung einer PDF-Datei mit PDF@LaTeX{}, zum -anderen die Erzeugung einer DVI daraus einer PostScript-Datei mittels -@LaTeX{} und einem DVI-nach-PostScript Konverters wie @command{dvips}. -Die erste Methode ist einfacher und daher empfehlenswert.@footnote{Manchmal -kann eine Datei entweder von PDF@LaTeX{} oder von @LaTeX{} nicht korrekt -verarbeitet werden, weshalb hier beide Methoden beschrieben werden.} Welche -Methode auch immer benutzt wird, die Konvertierung zwischen PostScript und -PDF kann leicht mit Hilfsprogrammen wie @command{ps2pdf} und @command{pdf2ps} -(aus dem Ghostscript Paket) erfolgen. - -Um eine PDF-Datei mittels PDF@LaTeX{} zu erzeugen, kann folgendermaßen -vorgegangen werden: - -@example -lilypond-book --pdf Ihre_Datei.pdftex -pdflatex Ihre_Datei.tex -@end example - -@cindex Konturschriften -@cindex Type1 Schriften -@cindex dvips -@cindex Aufruf von dvips -Um eine PDF-Datei mittels @LaTeX{}/@command{dvips}/@command{ps2pdf} zu -erhalten, sind folgende Befehle nötig: - -@example -lilypond-book Ihre_Datei.lytex -latex Ihre_Datei.tex -dvips -Ppdf Ihre_Datei.dvi -ps2pdf Ihre_Datei.ps -@end example - -@noindent -Die @file{.dvi}-Datei, die beim Aufruf von @command{latex} erzeugt wird, -scheint keine Notenköpfe zu enthalten, was in Ordnung ist. Wenn Sie die -Datei wie beschrieben weiter verarbeiten, erscheinen die Notenköpfe korrekt -in den @file{.ps} und @file{.pdf} Dateien. - -Der Aufruf von @command{dvips} kann einige Warnungen über fehlende -Schriftarten ausgeben. Auch dies ist in Ordnung und kann ignoriert werden. - -Wenn Sie in der @LaTeX{}-Datei das Papierformat auf Querformat eingestellt -haben, vergessen Sie nicht auf die @code{-t landscape} Option beim -Aufruf von @command{dvips}. - - -@subsubheading Texinfo - -Um ein von @command{lilypond-book} erzeugtes Texinfo-Dokument zu -verarbeiten, gehen Sie wie für alle anderen Texinfo-Dokumente vor: -Rufen Sie -- abhängig vom gewünschten Ausgabeformat -- eines der Programme -@command{texi2pdf}, @command{texi2dvi}, @command{makeinfo} oder -@command{texi2html} auf. - -@ifinfo -@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, und @ref{Creating -an Info File, , , texinfo, GNU Texinfo}. -@end ifinfo -@ifnotinfo -Die Dokumentation von Texinfo liefert dazu nähere Informationen. -@end ifnotinfo - - -@subheading Command line options - -@command{lilypond-book} unterstützt die folgenden Kommandozeilenoptionen: - -@table @code -@item -f @var{Format} -@itemx --format=@var{Format} -Gibt das Format des Eingabedokuments an: @code{html}, @code{latex}, -@code{texi} (Standardeinstellung), @code{texi-html} oder @code{docbook}. -Ist diese Option nicht angegeben, versucht @command{lilypond-book} das -Format anhand des Dateinamens zu bestimmen. Im Moment bedeutet @code{texi} -praktisch dasselbe wie @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} -Leitet die Musikfragmente durch das Programm @var{filter} anstatt sie -mit Lilypond zu einer Grafik zu verarbeiten. @option{--filter} und -@option{--process} kann nicht gleichzeigt benutzt werden. Beispielaufruf: - -@example -lilypond-book --filter='convert-ly --from=2.0.0 -' Mein-Buch.tely -@end example - -@item -h -@itemx --help -Gibt eine kurze Hilfemeldung aus. - -@item -I @var{Pfad} -@itemx --include=@var{Pfad} -Fügt @var{Pfad} zu den Include-Pfaden hinzu. @command{lilypond-book} sucht -auch in allen Include-Pfaden nach bereits erstellten Grafiken für die -Musikfragmente. Wird das aktuelle Fragment gefunden und hat sich seit der -letzten Erstellung nicht geändert, wird es nicht erneut erzeugt. Bei manchen -der Programme zur Weiterverarbeitung wie etwa @command{makeinfo} oder -@command{latex} muss dieselbe @code{-I @var{Pfad}} Option angegeben werden, -damit das entsprechende Programm die Grafiken ebenso findet. - -@item -o @var{Verzeichnis} -@itemx --output=@var{Verzeichnis} -Erzeugt die Ausgabedateien in @var{Verzeichnis}. Der Aufruf von -@command{lilypond-book} erzeugt zahlreiche kleine Dateien, die von -LilyPond, @command{latex}, @command{makeinfo} etc. dann weiter benützt -werden. Um zu vermeiden, dass das Quellenverzeichnis durch diese -Dateien unübersichtlich wird, kann die @option{--output} Option benutzt -werden. Vor dem Aufruf von @command{latex} oder @command{makeinfo} -sollten Sie in dieses Verzeichnis wechseln. - -@example -lilypond-book --output=out IhreDatei.lytex -cd out -... -@end example - -@itemx --skip-lily-check -Nicht mit einer Fehlermeldung abbrechen, wenn keine Ausgabe von LilyPond -gefunden wird. Dies wird benutzt für Dokumentation ohne Grafiken. - -@itemx --skip-png-check -Nicht mit einer Fehlermeldung abbrechen, wenn für die EPS-Dateien keine -PNG-Grafiken gefunden werden. Dies wird benutzt für Dokumentation ohne -Grafiken. - -@itemx --lily-output-dir=@var{Verzeichnis} -Schreibt @file{lily-XXX} Dateien nach @var{Verzeichnis} und erzeugt -im mit @code{--output} angegebenen Verzeichnis Verknüpfungen darauf. -Diese Option ist nützlich, um Zeit zu sparen, wenn Dokumente in -verschiedenen Verzeichnissen viele identische Musikfragmente -enthalten. - -@itemx --info-images-dir=@var{Verzeichnis} -Formatiert die Texinfo-Ausgabe dergestalt, dass Info in @var{Verzeichnis} -nach den Grafiken zu den Musikfragmenten sucht. - -@itemx --latex-program=@var{Programm} -Führt @command{Programm} anstelle von @command{latex} aus. Dies ist -nützlichen, wenn das Dokument mit einer anderen @LaTeX{}-Variante -wie etwa @command{xelatex} verarbeitet werden soll. - -@itemx --left-padding=@var{Einrückung} -Fügt @var{Einrückung} als zusätzlichen Einzug in die EPS-Box ein. -@var{Einrückung} wird in Millimetern angegeben, die Standardeinstellung -is 3.0 Millimeter. Diese Option kann benutzt werden, wenn die Notenzeilen -über den Rand des Dokuments hinausstehen. - -Die Breite eines eng ausgeschnittenen Notensystems kann variieren -aufgrund von Notationselementen, die über den linken Rand hinausstehen, -wie etwa Taktzahlen und Bezeichnungen der Instrumente. Diese Option -verkürzt die Notenzeile und verschiebt sie um denselben Betrag nach -rechts. - - -@item -P @var{Kommando} -@itemx --process=@var{Kommando} -Verarbeitet LilyPond-Fragmente mit @var{Kommando} anstelle des -Standardbefehls @code{lilypond}. @code{--filter} und @code{--process} -können nicht gleichzeitig angegeben werden. - -@item --pdf -Erzeugt PDF-Dateien mit PDF@LaTeX{}. - -@item -V -@itemx --verbose -Gibt ausführliche informative Meldungen aus. - -@item -v -@itemx --version -Gibt die Versionsnummer aus. -@end table - -@knownissues - -Der Texinfo-Befehl @code{@@pagesizes} wird ignoriert. Ebenso werden -@LaTeX{}-Befehle ignoriert, die den Seitenrand oder die Zeilenlänge -nach der Dokumentpräambel verändern. - -Nur der erste @code{\score}-Block eines LilyPond-Fragments wird verarbeitet. - - -@node Filename extensions -@section Filename extensions - -Für die Eingabedatei kann zwar jede beliebige Dateinamenserweiterung benutzt -werden, allerdings muss bei Verwendung einer nicht bekannten Erweiterung -das Ausgabeformat explizit an @command{lilypond-book} angegeben werden. -Details dazu finden sich im Abschnitt @ref{Invoking lilypond-book}. -Wird eine bekannte Erweiterung benutzt, wählt @command{lilypond-book} -automatisch das richtige Ausgabeformat basierend auf der Erweiterung der -Eingabedatei: - -@quotation -@multitable @columnfractions .2 .5 -@item @strong{Erweiterung} @tab @strong{Ausgabeformat} -@item -@item @file{.html} @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 - -Wird dieselbe Erweiterung für die Eingabedatei wie für die Ausgabedatei -benutzt und befindet sich die Eingabedatei im aktuellen Arbeitsverzeichnis -von @command{lilypond-book}, muss die @code{--output} Option für -@command{lilypond-book} benutzt werden. Anderenfalls würde -@command{lilypond-book} ja die Eingabedatei überschreiben, weshalb das -Programm in diesem Fall mit einer Fehlermeldung wie @qq{Fehler: Ausgabe -würde Eingabedatei überschreiben; verwenden Sie --output.} abbricht. - - -@node Alternate methods of mixing text and music -@section Alternative methods of mixing text and music - -Dieser Abschnitt stellt Methoden vor, wie Text und Musik auf andere -Weise kombiniert werden können als dies durch @command{lilypond-book} -automatisiert geschieht. - - -@menu -* Many quotes from a large score:: -* Inserting LilyPond output into OpenOffice.org:: -* Inserting LilyPond output into other programs:: -@end menu - -@node Many quotes from a large score -@subsection Many quotes from a large score - -Wenn aus einer großen Partitur viele kleine Fragmente eingefügt -werden sollen, kann dazu das @q{clip systems} Feature benutzt werden. -Siehe @ruser{Extracting fragments of music}. - - -@node Inserting LilyPond output into OpenOffice.org -@subsection Inserting LilyPond output into OpenOffice.org - -Musik im LilyPond-Format kann in OpenOffice.org eingefügt werden mittels -@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. - - -@node Inserting LilyPond output into other programs -@subsection Inserting LilyPond output into other programs - -Im die Ausgabe von LilyPond in anderen Programmen einzufügen, -sollte @code{lilypond} benutzt werden. Jedes Beispiel muss -getrennt manuell erzeugt und ins Dokument eingefügt werden; -für letzteres schlagen Sie bitte im Handbuch Ihrer -Textverarbeitungs-Software nach. Die meisten Programme -unterstützen das Einfügen von Grafiken im @file{PNG}-, @file{EPS}- -oder @file{PDF}-Format. - -Um den leeren Rand um die Notenzeilen zu verringern, können folgende -Einstellungen benutzt werden: - -@example -\paper@{ - indent=0\mm - line-width=120\mm - oddFooterMarkup=##f - oddHeaderMarkup=##f - bookTitleMarkup = ##f - scoreTitleMarkup = ##f -@} - -@{ c1 @} -@end example - -Eine @file{EPS}-Datei kann mit folgendem Befehl erzeugt werden: - -@example -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts Dateiname.ly -@end example - -@noindent -eine @file{PNG}-Datei mittels: - -@example -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png Dateiname.ly -@end example - - diff --git a/Documentation/de/user/lilypond-learning.tely b/Documentation/de/user/lilypond-learning.tely deleted file mode 100644 index 6f7bc4d214..0000000000 --- a/Documentation/de/user/lilypond-learning.tely +++ /dev/null @@ -1,207 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@documentlanguage de -@setfilename lilypond-learning.info -@settitle GNU LilyPond Handbuch zum Lernen - -@include macros.itexi - -@afourpaper - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen und Graham Percival -@omfdescription Handbuch zum Lernen des LilyPond Musiksatzsystems -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage German -@end ignore - -@c Translators: Till Rettig - -@ifnottex -@node Top -@top GNU LilyPond -- Handbuch zum Lernen -@end ifnottex - -@ifhtml -@ifclear bigpage -Dieses Dokument ist auch als -@uref{source/Documentation/user/lilypond-learning.de.pdf,PDF} und als -@uref{source/Documentation/user/lilypond-learning-big-page.de.html,eine große Seite} -verfügbar. -@end ifclear -@ifset bigpage -Dieses Dokument ist auch als -@uref{source/Documentation/user/lilypond-learning.de.pdf,PDF} und als -@uref{source/Documentation/user/lilypond-learning/index.de.html,Separate HTML-Seiten mit Index} -verfügbar. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle Das Notensatzprogramm -@titlefont{Handbuch zum Lernen} -@author Das LilyPond-Entwicklerteam - - -Copyright @copyright{} 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne Invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Für LilyPond Version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne Invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -Diese Datei dokumentiert die Erlernung des Programmes GNU LilyPond. - -Copyright @copyright{} 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne Invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -Das ist des Handbuch zum Erlernen von GNU LilyPond Version @version{}. -Für einen Überblick über die gesamte Dokumentation von LilyPond und die Intention -dieses Handbuchs siehe @ref{About the documentation}. - -@cindex Internetseite -@cindex URL - -Mehr Information unter -@uref{http://@/www@/.lilypond@/.org/}. Auf der Internetseite -finden sich Kopien dieser und anderer Dokumentationsdateien. - -@menu -* Preface:: Vorwort. -* Introduction:: Was, warum und wie. -* Tutorial:: Eine Übung zur Einführung. -* Fundamental concepts:: Grundlegende Konzepte, die benötigt werden, um den Rest dieses Handbuchs zu lesen. -* Tweaking output:: Einleitung in die Beeinflussung des Notenbilds. -* Working on LilyPond projects:: Benutzung des Programms im wirklichen Leben. - - -Anhänge - -* Templates:: Funktionierende Vorlagen. -* Scheme tutorial:: Programmierung innerhalb von LilyPond. -* GNU Free Documentation License:: Lizenz dieses Handbuchs. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include preface.itely -@include introduction.itely -@include tutorial.itely -@include fundamental.itely -@include tweaks.itely -@include working.itely - -@include templates.itely -@include scheme-tutorial.itely -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/de/user/lilypond-program.tely b/Documentation/de/user/lilypond-program.tely deleted file mode 100644 index eccdf9f3b5..0000000000 --- a/Documentation/de/user/lilypond-program.tely +++ /dev/null @@ -1,202 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: ee314252b42fe4eb69c87c13a38644bc214ff27f - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@documentlanguage de -@setfilename lilypond-program.info -@settitle GNU LilyPond Programmbenutzung - -@include macros.itexi - -@afourpaper - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen und Graham Percival -@omfdescription Programmbenutzung des LilyPond-Musiksatzsystems -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage German -@end ignore - -@c Translators: Till Rettig - -@ifnottex -@node Top -@top GNU LilyPond -- Programmbenutzung -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - -@ifhtml -@ifclear bigpage -Dieses Dokument ist auch als -@uref{source/Documentation/user/lilypond-program.de.pdf,PDF} und auf -@uref{source/Documentation/user/lilypond-program-big-page.html,einer großen Seite} -@end ifclear -@ifset bigpage -Dieses Dokument ist auch als -@uref{source/Documentation/user/lilypond-program.pdf,PDF} und auf -@uref{source/Documentation/user/lilypond-program/index.html,separaten HTML-Seiten mit Index} -@end ifset -verfügbar. -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle Das Notensatzprogramm -@titlefont{Programmbenutzung} -@author Das LilyPond-Entwicklerteam - - -Copyright @copyright{} 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne -Invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Für LilyPond Version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne -Invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -Diese Datei dokumentiert die Programmbenutzung von GNU LilyPond. - -Copyright 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne -Invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -Das ist das Handbuch zur Programmbenutzung für GNU LilyPond Version @version{}. -Für einen Überblick über die gesamte Dokumentation von LilyPond und die Intention -dieses Handbuchs siehe @rlearning{About the documentation}. - -@cindex Internetseite -@cindex URL - -@uref{http://@/www@/.lilypond@/.org/}. Auf der Internetseite -finden sich Kopien dieser und anderer Dokumentationsdateien. - -@menu -* Install:: Wie das Programm installiert oder kompiliert wird. -* Setup:: Wie LilyPond mit anderen Programmen benutzt werden kann. -* Running LilyPond:: Betrieb des Programms. -* LilyPond-book:: Kombination von Text und Noten. -* Converting from other formats:: Konvertierungen in das LilyPond-Quellformat. - -Anhänge - -* GNU Free Documentation License:: Die Lizenz dieses Dokuments. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include install.itely -@include setup.itely -@include running.itely -@include lilypond-book.itely -@include converters.itely - -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/de/user/lilypond.tely b/Documentation/de/user/lilypond.tely deleted file mode 100644 index e415cfaf8a..0000000000 --- a/Documentation/de/user/lilypond.tely +++ /dev/null @@ -1,270 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: ee314252b42fe4eb69c87c13a38644bc214ff27f - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@documentlanguage de -@setfilename lilypond.info -@settitle GNU LilyPond Benutzerhandbuch - -@include macros.itexi - -@afourpaper - -@c Keep this here, since it pertains to the direntry below. -@ignore -Distributions will want to install lilypond.info in postinstall, doing: - - install-info --info-dir=/usr/share/info out/lilypond.info - - * Prepend GNU for dir, must be unique. - - * Do not list the `lilypond' node at toplevel, so that `info lilypond' - goes to Top. - - * List all commands in direntry. - -@c * lilypond: (lilypond/lilypond)Running LilyPond. Invoking the -@c LilyPond program. -@end ignore - - -@c -@c Info files are installed in subdirectories to allow images to be present. -@c -@dircategory LilyPond -@direntry -* LilyPond: (lilypond/lilypond). Das GNU Notensatzprogramm. -* abc2ly: (lilypond/lilypond-program)Invoking abc2ly. ABC-Dateien importieren. -* convert-ly: (lilypond/lilypond-program)Invoking convert-ly. Ältere LilyPond-Versionen. -* etf2ly: (lilypond/lilypond-program)Invoking etf2ly. Finale-Dateien importieren. -* lilypond-book: (lilypond/lilypond-program)LilyPond-book. Noten in den Text integrieren. -* midi2ly: (lilypond/lilypond-program)Invoking midi2ly. Midi-Dateien importieren. -@end direntry - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription User manual of the LilyPond music engraving system -@omftype user manual -@omfcategory Applications|Publishing -@omflanguage German -@end ignore - -@c Translators: Till Rettig - -@ifnottex -@node Top -@top GNU LilyPond --- Notation Reference -@chapheading Das Notensatzprogramm -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - -@ifhtml -@ifclear bigpage -Dieses Dokument ist auch als -@uref{source/Documentation/user/lilypond.de.pdf,PDF} und auf -@uref{source/Documentation/user/lilypond-big-page.html,einer großen Seite} -(auf Englisch) verfügbar. -@end ifclear -@ifset bigpage -Dieses Dokument ist auch als -@uref{source/Documentation/user/lilypond.de.pdf,PDF} und als -@uref{source/Documentation/user/lilypond/index.de.html,separate HTML-Seiten mit Index} -verfügbar. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex ky cp -@syncodeindex pg cp -@syncodeindex tp cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle Das Notensatzprogramm -@titlefont{Benutzerhandbuch} -@author Das LilyPond-Entwicklerteam - -Copyright @copyright{} 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne -invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Für LilyPond Version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 bei den Autoren - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne -invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eie Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -Diese Datei dokumentiert GNU LilyPond. - -Copyright 1999--2009 bei den Autoren. - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung -für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber -nur die englische Version gültig.} - -@quotation -Es ist erlaubt, dieses Dokument unter den Bedingungen der -GNU Free Documentation Lizenz (Version 1.1 oder -spätere, von der Free Software Foundation publizierte Versionen, ohne -Invariante Abschnitte), -zu kopieren, verbreiten und/oder -zu verändern. Eie Kopie der Lizenz ist im Abschnitt ``GNU -Free Documentation License'' angefügt. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -Das ist das Benutzerhandbuch für GNU LilyPond Version @version{}. -Für einen Überblick über die gesamte Dokumentation von LilyPond und die Intention -dieses Handbuchs siehe @rlearning{About the documentation}. - -@cindex Internetseite -@cindex URL - -Mehr Information unter -@uref{http://@/www@/.lilypond@/.org/}. Auf der Internetseite -finden sich Kopien dieser und anderer Dokumentationsdateien. - -@include dedication.itely - -@menu -* Musical notation:: Allgemeine Notation von Musik. -* Specialist notation:: Notation, die nur für spezielle Zwecke eingesetzt wird. -* General input and output:: Allgemeine Information über die Quelldateien von LilyPond. -* Spacing issues:: Anzeige der Ausgabe auf dem Papier. -* Changing defaults:: Das Notenbild verfeinern. -* Interfaces for programmers:: Benutzung für Experten. - -Anhänge - -* Literature list:: Wichtige Literatur über die Notation. -* Notation manual tables:: Tabellen und Grafiken. -* Cheat sheet:: Überblick über die LilyPond-Syntax. -* GNU Free Documentation License:: Die Lizenz dieses Handbuchs. -* LilyPond command index:: -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include notation.itely -@include specialist.itely - -@include input.itely -@include spacing.itely - -@include changing-defaults.itely -@include programming-interface.itely - - -@include literature.itely -@include notation-appendices.itely -@include cheatsheet.itely -@include fdl.itexi - -@node LilyPond command index -@appendix LilyPond command index - -Dieser Index listet alle LilyPond Befehle und Schlüsselwörter auf, -versehen mit Verweisen zu den Abschnitten im Handbuch, die den Befehl -beschreiben oder seine Verwendung diskutieren. Der erste Teil zeigt auf -die genaue Stelle im Handbuch, an der der Befehl oder das Schlüsselwort -erscheint, der zweite Teil zeigt auf den entsprechenden Abschnitt. - -@printindex ky - -@node LilyPond index -@appendix LilyPond index - -Zusätzlich zu allen LilyPond Befehlen und Schlüsselwörtern listet -dieser Index alle relevanten Begriffe auf und verlinkt sie mit den -entsprechenden Abschnitten, wo sie erklärt werden. Der erste Teil -zeigt auf die genaue Stelle im Handbuch, an der der der Begriff -vorkommt, der zweite Teil zeigt auf den gesamten Abschnitt, in dem -das Thema behandelt wird. - -@printindex cp - -@bye diff --git a/Documentation/de/user/literature.itely b/Documentation/de/user/literature.itely deleted file mode 100644 index ef0d2dbb13..0000000000 --- a/Documentation/de/user/literature.itely +++ /dev/null @@ -1,84 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Literature list -@appendix Literature list - -Wenn Sie mehr über Notation und den Notenstich erfahren wollen, sind -hier einige interessante Titel gesammelt. - - -@table @cite - -@item Ignatzek 1995 -Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne -1995. Mainz, Germany ISBN 3-7957-5140-3. - -Eine praktische Einführung zum Spielen von Jazz auf dem Klavier. Eins der -ersten Kapitel enthält einen Überblick über die Akkorde, die im Jazz -verwendet werden. - -@item Gerou 1996 - -Tom Gerou and Linda Lusk, Essential Dictionary of Music -Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. - -Eine ausführliche, alphabetische Liste vieler Belange des Musiksatzes -und der Notation; die üblichen Fälle werden behandelt. - -@item Read 1968 -Gardner Read, Music Notation: A Manual of Modern Practice. -Taplinger Publishing, New York (2nd edition). - -Ein Klassiker für die Musiknotation. - -@item Ross 1987 -Ted Ross, Teach yourself the art of music engraving and processing. -Hansen House, Miami, Florida 1987. - -Dieses Buch handelt vom Musiksatz, also vom professionellen Notenstich. -Hier sind Anweisungen über Stempel, die Benutzung von Stiften und -nationale Konventionen versammelt. Die Kapitel zu Reproduktionstechniken -und der historische Überblick sind auch interessant. - -@item Schirmer 2001 -The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. - -Dieses Handbuch setzt den Fokus auf die Herstellung von Drucksachen für den -Schirmer-Verlag. Hier werden viele Details behandelt, die sich in anderen -Notationshandbüchern nicht finden. Es gibt auch einen guten Überblick, was -nötig ist, um Drucke in publikationstauglicher Qualität zu produzieren. - -@item Stone 1980 - -Kurt Stone, Music Notation in the Twentieth Century. -Norton, New York 1980. - -Dieses Buch enthält einen Überblick über die Notation von moderner E-Musik, -beginnt aber mit einem Überblick über bereits existente Praktiken. - -@end table - -Das Quellenarchiv enthält eine ausführlichere Bib@TeX{}-Bibliographie mit -über 100 Titeln in -@ifhtml -@ifset bigpage -@uref{../bibliography/index.html, der Bibliographie}. -@end ifset -@ifclear bigpage -@uref{../../bibliography/index.html, der Bibliographie}. -@end ifclear -@end ifhtml -@ifnothtml -@file{Documentation/@/bibliography/}. -@end ifnothtml - diff --git a/Documentation/de/user/macros.itexi b/Documentation/de/user/macros.itexi deleted file mode 100644 index 9d47c007b1..0000000000 --- a/Documentation/de/user/macros.itexi +++ /dev/null @@ -1,366 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@include version.itexi -@include common-macros.itexi - - -@c ***** Displaying text ***** - -@c To get decent quotes in ,foo' and ,,foo''. -@c These need to be split up so that "@qq{foo}." looks nice. :( - -@macro q{TEXT} -@quotesinglbase{}\TEXT\@quoteleft{} -@end macro - -@macro qq{TEXT} -@quotedblbase{}\TEXT\@quotedblleft{} -@end macro - - -@ifhtml - -@macro warning{TEXT} -@cartouche -@b{Achtung:} \TEXT\ -@end cartouche -@end macro - -@end ifhtml - -@ifnothtml - -@macro warning{TEXT} -@quotation -@quotation -@cartouche -@b{Achtung:} \TEXT\ -@end cartouche -@end quotation -@end quotation -@end macro - -@end ifnothtml - - -@c ***** Headings in a doc subsection ***** - -@c Don't insert an empty line after @predefined! Right now -@c it doesn't matter, but a future implementation will probably -@c add some code which needs this restriction. - -@macro predefined -@noindent -@subsubheading Predefined commands -@end macro - -@c The next macro is a dummy currently since texinfo doesn't -@c provide a real ragged-right environment yet. -@c -@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) -@c the macro must not be empty. - -@macro endpredefined -@c -@end macro - - -@macro snippets -@noindent -@subsubheading Selected Snippets -@end macro - - -@c obsolete, remove when translation is fully updated -@macro commonprop -@noindent -@subsubheading Commonly tweaked properties -@end macro - - -@c Don't insert an empty line after @seealso! Otherwise we get -@c unwanted extra vertical space in the PDF output. - -@macro seealso -@noindent -@subsubheading See also -@indent -@end macro - - -@macro knownissues -@noindent -@subsubheading Known issues and warnings -@end macro - - - -@c ***** Links and references ***** - -@c obsolete -@c usage: @lsr{ancient,custodes.ly} -@macro lsr{DIR,TEXT} -@ifhtml -@uref{source/input/lsr/\DIR\/collated-files.html#\TEXT\,@file{\DIR\/\TEXT\}} -@end ifhtml -@ifnothtml -@file{\DIR\/\TEXT\} -@end ifnothtml -@end macro - -@c don't update until this macro is correctly set up in English docs -@macro lsrdir{DIR} -@ifhtml -@uref{source/input/lsr/\DIR\/collated-files.html,@file{\DIR\}/} -@end ifhtml -@ifnothtml -@file{\DIR\} -@end ifnothtml -@end macro - - -@c Definitions for references: -@c -@c @rglos -@c @rlearning -@c @ruser -@c @rprogram -@c @rlsr -@c @rinternals -@c -@c All these also have a @...named version which allows to specify the -@c displayed text for the reference as second argument. -@c -@c ***** HTML + bigpage is a special case (other manual names); all other -@c formats are treated similarly. - - -@c *** not TeX *** - -@ifnottex - -@c ** bigpage ** - -@ifset bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary-big-page,Glossar} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Glossar} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning-big-page,Handbuch zum Lernen} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning-big-page,Handbuch zum Lernen} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-big-page,Notationsreferenz} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-big-page,Notationsreferenz} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program-big-page,Anwendungsbenutzung} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program-big-page,Anwendungsbenutzung} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets-big-page,Schnipsel} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets-big-page,Schnipsel} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals-big-page,Referenz der Interna} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals-big-page,Referenz der Interna} -@end macro - -@end ifset - - -@c ** not bigpage ** - -@ifclear bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary,Glossar} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossar} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning,Handbuch zum Lernen} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Handbuch zum Lernen} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond,Notationsreferenz} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond,Notationsreferenz} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program,Anwendungsbenutzung} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Anwendungsbenutzung} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets,Schnipsel} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Schnipsel} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals,Referenz der Interna} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Referenz der Interna} -@end macro - -@end ifclear - -@end ifnottex - - -@c *** TeX *** - -@iftex - -@c All commands below should work in the middle of the line; -@c we thus must not use @vindex directly since it works only if placed -@c on a line of its own. To overcome this problem, we define a -@c replacement macro using the internal definition of @vindex which -@c delimits arguments in the standard way (i.e., with braces). - -@tex -\gdef\lilyvindex#1{\doind{vr}{\code #1}\ignorespaces} -@end tex - -@macro rglos{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,music-glossary,Glossar} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossar} -@end macro - -@macro rlearning{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-learning.de,Handbuch zum Lernen} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-learning.de,Handbuch zum Lernen} -@end macro - -@macro ruser{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond.de,Notationsreferenz} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond.de,Notationsreferenz} -@end macro - -@macro rprogram{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-program.de,Anwendungsbenutzung} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-program.de,Anwendungsbenutzung} -@end macro - -@macro rlsr{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-snippets,Schnipsel} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Schnipsel} -@end macro - -@macro rinternals{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-internals,Referenz der Interna} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Referenz der Interna} -@end macro - -@end iftex - - - -@c ***** Macros specific to translated docs ***** - - -@macro englishref -Dieser Abschnitt wurde noch nicht übersetzt. Bitte lesen Sie den -Abschnitt im englischen Benutzerhandbuch. -@end macro - diff --git a/Documentation/de/user/notation-appendices.itely b/Documentation/de/user/notation-appendices.itely deleted file mode 100644 index a8f41f52f6..0000000000 --- a/Documentation/de/user/notation-appendices.itely +++ /dev/null @@ -1,667 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Notation manual tables -@appendix Notation manual tables - -@c Please do not delete the following @ignore block. -@ignore -Note for editors and translators: In the following menu, two entries -are needed to link to a pair of automatically generated sections. -Please keep them and, if using emacs, do not run -texinfo-all-menus-update without manually restoring them back. These -menu entries are: - -* Text markup commands:: -* Text markup list commands:: - -and they should go just after -* Note head styles:: - -and just before -* List of articulations:: -@end ignore - -@menu -* Chord name chart:: -* Common chord modifiers:: -* Predefined fretboard diagrams:: -* MIDI instruments:: -* List of colors:: -* The Feta font:: -* Note head styles:: -* Text markup commands:: -* Text markup list commands:: -* List of articulations:: -* Percussion notes:: -* All context properties:: -* Layout properties:: -* Identifiers:: -* Scheme functions:: -@end menu - -@node Chord name chart -@appendixsec Chord name chart - -Die Tabelle zeigt die zwei üblichen Möglichkeiten, wie Akkordbezeichnungen -ausgegeben werden. Es wird auch die entsprechende Note ausgegeben. - -@lilypondfile{chord-names-jazz.ly} - - -@node Common chord modifiers -@appendixsec Common chord modifiers - -Die Tabelle zeigt Modifikatoren für Akkorde, die im @code{\chordmode}-Modus -benutzt werden können, um übliche Akkordkonstrukte zu notieren. - -@multitable @columnfractions .2 .3 .2 .2 - -@item -@b{Akkordtyp} -@tab -@b{Intervalle} -@tab -@b{Modifikator(en)} -@tab -@b{Beispiel} - - -@item -Dur -@tab -große Terz, Quinte -@tab -@code{5} oder nichts -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:5 -} -@end lilypond - -@item -Moll -@tab -kleine Terz, Quinte -@tab -@code{m} oder @code{m5} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m -} -@end lilypond - -@item -Übermäßig -@tab -Große Terz, übermäßige Quinte -@tab -@code{aug} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug -} -@end lilypond - -@item -Vermindert -@tab -Kleine Terz, verminderte Quinte -@tab -@code{dim} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim -} -@end lilypond - -@item -Dominantsieben -@tab -Durdreiklang, kleine Septime -@tab -@code{7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:7 -} -@end lilypond - -@item -Große Septime -@tab -Durdreiklang, große Septime -@tab -@code{maj7} oder @code{maj} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7 -} -@end lilypond - -@item -Kleine Septime -@tab -Molldreiklang, kleine Septime -@tab -@code{m7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m7 -} -@end lilypond - -@item -Verminderte Septime -@tab -Verminderter Dreiklang, verminderte Septime -@tab -@code{dim7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim7 -} -@end lilypond - -@item -Übermäßige Septime -@tab -Übermäßiger Dreiklang, kleine Septime -@tab -@code{aug7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug7 -} -@end lilypond - -@item -halbverminderte Septime -@tab -Verminderter Dreklang, kleine Sept -@tab -@code{m7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m7.5- -} -@end lilypond - -@item -Kleine MollSept -@tab -Molldreiklang, Durseptime -@tab -@code{maj7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7.5- -} -@end lilypond - -@item -Große Sexte -@tab -Durdreiklang, Sexte -@tab -@code{6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:6 -} -@end lilypond - -@item -Kleine Sexte -@tab -Molldreiklang, Sexte -@tab -@code{m6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m6 -} -@end lilypond - -@item -Dominantnone -@tab -Dominantsept, große None -@tab -@code{9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:9 -} -@end lilypond - -@item -Dur None -@tab -Große None, große Septime -@tab -@code{maj9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj9 -} -@end lilypond - -@item -Moll None -@tab -Große None, kleine Septime -@tab -@code{m9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m9 -} -@end lilypond - -@item -Dominantundezime -@tab -Dominantnone, perfekte Undezime -@tab -@code{11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:11 -} -@end lilypond - -@item -Durundezime -@tab -Große None, perfekte Unidezime -@tab -@code{maj11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj11 -} -@end lilypond - -@item -Mollundezime -@tab -Kleine None, perfekte Undezime -@tab -@code{m11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m11 -} -@end lilypond - -@item -Dominant-13 -@tab -Dominantnone, große 13 -@tab -@code{13} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13 -} -@end lilypond - -@item -Dominant-13 -@tab -@code{13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13.11 -} -@end lilypond - -@item -Dur-13 -@tab -Große Undezime, große 13 -@tab -@code{maj13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj13.11 -} -@end lilypond - -@item -Moll-13 -@tab -Kleine Undezime, große 13 -@tab -@code{m13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m13.11 -} -@end lilypond - -@item -Sekundakkord -@tab -große Sekunde, perfekte Quinte -@tab -@code{sus2} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus2 -} -@end lilypond - -@item -Quartakkord -@tab -perfekte Quarte, perfekte Quinte -@tab -@code{sus4} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus4 -} -@end lilypond - - -@end multitable - - -@node Predefined fretboard diagrams -@appendixsec Predefined fretboard diagrams - -Die Tabelle zeigt alle vordefinierten Bunddiagramme. - -@lilypondfile{display-predefined-fretboards.ly} - - - -@node MIDI instruments -@appendixsec MIDI instruments - -Hier eine Liste von Musikinstrumentenbezeichnungen, die als Name für -@code{midiInstrument} benutzt werden können. -@c Todo: translate music instrument's names to German - -@cindex MIDI-Instrumentenbezeichnungen - -@example -acoustic grand contrabass lead 7 (fifths) -bright acoustic tremolo strings lead 8 (bass+lead) -electric grand pizzicato strings pad 1 (new age) -honky-tonk orchestral strings pad 2 (warm) -electric piano 1 timpani pad 3 (polysynth) -electric piano 2 string ensemble 1 pad 4 (choir) -harpsichord string ensemble 2 pad 5 (bowed) -clav synthstrings 1 pad 6 (metallic) -celesta synthstrings 2 pad 7 (halo) -glockenspiel choir aahs pad 8 (sweep) -music box voice oohs fx 1 (rain) -vibraphone synth voice fx 2 (soundtrack) -marimba orchestra hit fx 3 (crystal) -xylophone trumpet fx 4 (atmosphere) -tubular bells trombone fx 5 (brightness) -dulcimer tuba fx 6 (goblins) -drawbar organ muted trumpet fx 7 (echoes) -percussive organ french horn fx 8 (sci-fi) -rock organ brass section sitar -church organ synthbrass 1 banjo -reed organ synthbrass 2 shamisen -accordion soprano sax koto -harmonica alto sax kalimba -concertina tenor sax bagpipe -acoustic guitar (nylon) baritone sax fiddle -acoustic guitar (steel) oboe shanai -electric guitar (jazz) english horn tinkle bell -electric guitar (clean) bassoon agogo -electric guitar (muted) clarinet steel drums -overdriven guitar piccolo woodblock -distorted guitar flute taiko drum -guitar harmonics recorder melodic tom -acoustic bass pan flute synth drum -electric bass (finger) blown bottle reverse cymbal -electric bass (pick) shakuhachi guitar fret noise -fretless bass whistle breath noise -slap bass 1 ocarina seashore -slap bass 2 lead 1 (square) bird tweet -synth bass 1 lead 2 (sawtooth) telephone ring -synth bass 2 lead 3 (calliope) helicopter -violin lead 4 (chiff) applause -viola lead 5 (charang) gunshot -cello lead 6 (voice) -@end example - - -@node List of colors -@appendixsec List of colors - -@subsubheading Normal colors - -Die Syntax zur Benutzung findet sich im Abschnitt @ref{Coloring objects}. - -@cindex Liste der Farben -@cindex Farben, Liste - -@verbatim -black white red green -blue cyan magenta yellow -grey darkred darkgreen darkblue -darkcyan darkmagenta darkyellow -@end verbatim - - -@subsubheading X color names - -X-Farbbezeichnungen haben verschiedene Varianten: - -Alle Bezeichnungen, die als einziges Wort mit Großbuchstaben -geschrieben werden (bspw. @q{LightSlateBlue}), können auch -von Leerzeichen getrennt geschrieben werden -(also @q{light slate blue}). - -Das Wort @q{grey} kann in jedem Fall auch @q{gray} geschrieben -werden (bspw. @q{DarkSlateGray}). - -Manche Bezeichnungen können auch ein numerales Suffix tragen -(etwa @q{LightSalmon4}). - - -@subsubheading Color Names without a numerical suffix: - -@verbatim -snow GhostWhite WhiteSmoke gainsboro FloralWhite -OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond -bisque PeachPuff NavajoWhite moccasin cornsilk -ivory LemonChiffon seashell honeydew MintCream -azure AliceBlue lavender LavenderBlush MistyRose -white black DarkSlateGrey DimGrey SlateGrey -LightSlateGrey grey LightGrey MidnightBlue navy -NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue -LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue -DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue -LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise -turquoise cyan LightCyan CadetBlue MediumAquamarine -aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen -MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen -green chartreuse MediumSpringGreen GreenYellow LimeGreen -YellowGreen ForestGreen OliveDrab DarkKhaki khaki -PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold -LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed -SaddleBrown sienna peru burlywood beige -wheat SandyBrown tan chocolate firebrick -brown DarkSalmon salmon LightSalmon orange -DarkOrange coral LightCoral tomato OrangeRed -red HotPink DeepPink pink LightPink -PaleVioletRed maroon MediumVioletRed VioletRed magenta -violet plum orchid MediumOrchid DarkOrchid -DarkViolet BlueViolet purple MediumPurple thistle -DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed -LightGreen -@end verbatim - - -@subsubheading Color names with a numerical suffix - -Für die folgenden Bezeichnungen kann das Suffix N durch eine -Zahl von 1--4 ersetzt werden. - -@verbatim -snowN seashellN AntiqueWhiteN bisqueN PeachPuffN -NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN -LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN -blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN -LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN -CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN -SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN -OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN -yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN -IndianRedN siennaN burlywoodN wheatN tanN -chocolateN firebrickN brownN salmonN LightSalmonN -orangeN DarkOrangeN coralN tomatoN OrangeRedN -redN DeepPinkN HotPinkN pinkN LightPinkN -PaleVioletRedN maroonN VioletRedN magentaN orchidN -plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN -thistleN -@end verbatim - - -@subsubheading Grey Scale - -Eine Grauskala kann mit der Bezeichnung - -@example -greyN -@end example - -@noindent -erstellt werden, wobei N eine Zahl von 0--100 darstellt. - - -@node The Feta font -@appendixsec The Feta font - -@cindex Feta font -@cindex Font, Feta - -Die folgenden Symbole sind als Emmentaler-Schriftart verfügbar; auf sie -kann direkt zugegriffen werden, indem man die übliche Textbeschriftung -benutzt. @code{\musicglyph} greift direkt auf die Notationsschriftart -zu (bspw. @code{g^\markup @{ -\musicglyph #"scripts.segno" @}}). Siehe auch @ref{Formatting text}. - -@lilypondfile[noindent]{font-table.ly} - - -@node Note head styles -@appendixsec Note head styles - -@cindex Notenkopfarten -@cindex Arten von Notenköpfen -@cindex Stile, Notenköpfe - -Folgende Stile können zur Darstellung der Notenköpfe verwendet werden: - -@lilypondfile[noindent]{note-head-style.ly} - -@include markup-commands.tely - -@include markup-list-commands.tely - -@node List of articulations -@appendixsec List of articulations - -@cindex Akzent -@cindex Marcato -@cindex Staccatissimo -@cindex Espressivo -@cindex Fermate -@cindex Gedämpft -@cindex Staccato -@cindex Portato -@cindex Tenuto -@cindex Aufstrich -@cindex Abstrich -@cindex Fußbezeichnung -@cindex Orgelpedalbezeichnung -@cindex Triller -@cindex Offen -@cindex Flageolet -@cindex Praller -@cindex Mordent -@cindex Doppelpraller -@cindex Prallermordent -@cindex Fingersatz -@cindex Daumenbezeichnung -@cindex Segno -@cindex Coda -@cindex Varcoda - -Hier ist eine Liste, die alle möglichen Zeichen darstellt: - -@lilypondfile[ragged-right,quote]{script-chart.ly} - - -@node Percussion notes -@appendixsec Percussion notes - -@lilypondfile[quote]{percussion-chart.ly} - - -@node All context properties -@appendixsec All context properties - -@include context-properties.tely - - -@node Layout properties -@appendixsec Layout properties - -@include layout-properties.tely - - -@node Identifiers -@appendixsec Identifiers - -@include identifiers.tely - - -@node Scheme functions -@appendixsec Scheme functions - -@include scheme-functions.tely - diff --git a/Documentation/de/user/notation.itely b/Documentation/de/user/notation.itely deleted file mode 100644 index 3e03b13386..0000000000 --- a/Documentation/de/user/notation.itely +++ /dev/null @@ -1,35 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Musical notation -@chapter Musical notation - -Dieses Kapitel erklärt, wie die Notation von Musik erstellt wird. - -@menu -* Pitches:: Tonhöhen von Noten notieren und darstellen. -* Rhythms:: Tondauern von Noten notieren und darstellen. -* Expressive marks:: Vortragsbezeichnungen zu Noten hinzufügen. -* Repeats:: Noten wiederholen. -* Simultaneous notes:: Mehr als eine Note gleichzeitig. -* Staff notation:: Notensysteme darstellen. -* Editorial annotations:: Besondere Notation, um die Lesbarkeit zu verbessern. -* Text:: Text zur Partitur hinzufügen. -@end menu - -@include pitches.itely -@include rhythms.itely -@include expressive.itely -@include repeats.itely -@include simultaneous.itely -@include staff.itely -@include editorial.itely -@include text.itely - diff --git a/Documentation/de/user/percussion.itely b/Documentation/de/user/percussion.itely deleted file mode 100644 index 64115295ca..0000000000 --- a/Documentation/de/user/percussion.itely +++ /dev/null @@ -1,609 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Percussion -@section Percussion - -@menu -* Common notation for percussion:: -@end menu - - -@node Common notation for percussion -@subsection Common notation for percussion - -Rhythmusnotation wird vor allem für Schlaginstrumente eingesetzt, -aber hiermit kann auch der Rhythmus einer Melodie dargestellt werden. - - -@menu -* References for percussion:: -* Basic percussion notation:: -* Drum rolls:: -* Pitched percussion:: -* Percussion staves:: -* Custom percussion staves:: -* Ghost notes:: -@end menu - - -@node References for percussion -@unnumberedsubsubsec References for percussion - -@itemize - -@item Viele Schlagzeugmusik kann auf einem rhythmischen System notiert -werden. Das wird gezeigt in -@ref{Showing melody rhythms} und @ref{Instantiating new staves}. - -@item MIDI-Ausgabe wird behandelt in -@ref{Percussion in MIDI}. - -@end itemize - - -@seealso -Notationsreferenz: -@ref{Showing melody rhythms}, -@ref{Instantiating new staves}. -@ref{Percussion in MIDI}. - -Schnipsel: -@rlsr{Percussion}. - - -@node Basic percussion notation -@unnumberedsubsubsec Basic percussion notation - -@cindex Perkussion -@cindex Drums -@cindex Schlagzeug - -Schlagzeug-Noten können im @code{\drummode}-Modus notiert werden, -der sich ähnlich verhält wie der Standardmodus für die Noteneingabe. -Am einfachsten kann der @code{\drums}-Befehl benutzt werden, der sich -um den richtigen Kontext und Eingabemodus kümmert: - -@lilypond[quote,verbatim] -\drums { - hihat4 hh bassdrum bd -} -@end lilypond - -@noindent -Das ist die Kurzschreibweise für: - -@lilypond[quote,verbatim] -\new DrumStaff { - \drummode { - hihat4 hh bassdrum bd - } -} -@end lilypond - -Jedes Schlagzeuginstrument hat einen langen Namen und eine Abkürzung, -und beide können nebeneinander benutzt werden. Eine Liste der -Notenbezeichnungen für Schlagzeug findet sich in @ref{Percussion notes}. - -Beachten Sie, dass normale Tonhöhen (wie @code{cis4}) in einem -@code{DrumStaff}-Kontext eine Fehlernachricht erzielen. Schlüssel für -Schlagzeug werden automatisch hinzugefügt, aber andere Schlüssel können -auch benutzt werden. - -Es gibt einige Probleme mit der MIDI-Unterstützung für Schlagzeuginstrumente. -Details finden sich in @ref{Percussion in MIDI}. - -@seealso -Notationsreferenz: -@ref{Percussion in MIDI}, -@ref{Percussion notes}. - -Installierte Dateien: -@file{ly/@/drumpitch@/-init@/.ly}. - -Schnipsel: -@rlsr{Percussion}. - - -@node Drum rolls -@unnumberedsubsubsec Drum rolls - -Trommelwirbel werden mit drei Balken durch den Notenhals notiert. Für -Viertelnoten oder längere Noten werden die drei Balken explizit notiert, -Achtel werden mit zwei Balken gezeigt (und der dritte ist der eigentliche -Balken), und Trommelwirbel mit kürzeren Werten als Achtelnoten -haben einen Balken zusätzlich zu den eigentlichen Balken der Noten. -Dieses Verhalten wird mit der Tremolonotation erreicht, wie in -@ref{Tremolo repeats} gezeigt. Hier ein Beispiel kleinerer Wirbel: - -@lilypond[quote,verbatim] -\drums { - \time 2/4 - sn16 sn8 sn16 sn8 sn8:32 ~ - sn8 sn8 sn4:32 ~ - sn4 sn8 sn16 sn16 - sn4 r4 -} -@end lilypond - -Benutzung der Stöcke kann angezeigt werden durch @code{^"R"} oder -@code{^"L"} nach jeder Note. Die @code{staff-padding}-Eigenschaft -kann verändert werden, um eine Orientierung an einer gemeinsamen -Linie zu ermöglichen. - -@lilypond[quote,verbatim] -\drums { - \repeat unfold 2 { - sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" - } -} -@end lilypond - - -@seealso -Schnipsel: -@rlsr{Percussion}. - - -@node Pitched percussion -@unnumberedsubsubsec Pitched percussion - -Bestimmte Schlagzeuginstrumente mit Tonhöhe (z. B. Xylophone, -vibraphone und Pauken) werden auf normalen Systemen geschrieben. Das -wird in anderen Abschnitten des Handbuchs behandelt. - - -@seealso -@c TODO: possibly link to an alternate section of NR 3.5, if -@c "percussion in MIDI" gets a separate subsubsection for -@c pitched percussion sounds. -gp -Notationsreferenz: -@ref{Percussion in MIDI}. - -Schnipsel: -@rlsr{Percussion}. - - -@node Percussion staves -@unnumberedsubsubsec Percussion staves - -@cindex Perkussion -@cindex Schlagzeug - -Ein Schlagzeug-System besteht üblicherweise aus einem Notensystem -mit mehreren Linien, wobei jede Linie ein bestimmtes Schlagzeug-Instrument -darstellt. Um die Noten darstellen zu können, müssen sie sich innerhalb von -einem @code{DrumStaff}- und einem -@code{DrumVoice}-Kontext befinden. - -@lilypond[quote,verbatim] -up = \drummode { - crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat -} -down = \drummode { - bassdrum4 snare8 bd r bd sn4 -} -\new DrumStaff << - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - -Das Beispiel zeigt ausdrücklich definierte mehrstimmige Notation. Die -Kurznotation für mehrstimmige Musik, wie sie im Abschnitt -@rlearning{I'm hearing Voices} beschrieben wird, kann auch verwendet werden, -wenn die Stimmen am Anfang explizit initialisiert werden. - -@lilypond[quote,verbatim] -\new DrumStaff << - \new DrumVoice = "1" { s1*2 } - \new DrumVoice = "2" { s1*2 } - \drummode { - bd4 sn4 bd4 sn4 - << { - \repeat unfold 16 hh16 - } \\ { - bd4 sn4 bd4 sn4 - } >> - } ->> -@end lilypond - -Es gibt auch weitere Layout-Einstellungen. Um diese zu verwenden, -muss die Eigenschaft @code{drumStyleTable} im -@code{DrumVoice}-Kontext entsprechend eingestellt werden. -Folgende Variablen sind vordefiniert: - -@table @code -@item drums-style -Das ist die Standardeinstellung. Hiermit wird ein typisches -Schlagzeug-System auf fünf Notenlinien erstellt. - -@lilypond[quote,line-width=10.0\cm] -nam = \lyricmode { - cymc cyms cymr hh hhc hho hhho hhp - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } -mus = \drummode { - cymc cyms cymr hh hhc hho hhho hhp \break - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } -\score { - << \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4.0 . 5.0) - } \mus - \new Lyrics \nam - >> - \layout { - \context { - \Score - \override LyricText #'font-family = #'typewriter - \override BarNumber #'transparent =##T - } - } -} -@end lilypond - -Die Schlagzeugdefinitionen unterstützen sechs unterschiedliche -Tom Toms. Falls eine geringere Anzahl verwendet wird, kann man -einfach die Tom Toms auswählen, deren Notation man haben will. -Tom Toms auf den drei mittleren Linien werden mit den Bezeichnungen -@code{tommh}, @code{tomml} und @code{tomfh} notiert. - -@item timbales-style -Hiermit werden Timbale auf zwei Notenlinien gesetzt. - -@lilypond[quote,ragged-right] -nam = \lyricmode { timh ssh timl ssl cb } -mus = \drummode { timh ssh timl ssl cb s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override StaffSymbol #'line-count = #2 - \override StaffSymbol #'staff-space = #2 - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) - drumStyleTable = #timbales-style - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item congas-style -Hiermit werden Congas auf zwei Linien gesetzt. - -@lilypond[quote,ragged-right] -nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } -mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - drumStyleTable = #congas-style - \override StaffSymbol #'line-count = #2 - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item bongos-style -Hiermit werden Bongos auf zwei Linien gesetzt. - -@lilypond[quote,ragged-right] -nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } -mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override StaffSymbol #'line-count = #2 - drumStyleTable = #bongos-style - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item percussion-style -Dieser Stil ist für alle einfachen Perkussionsinstrumente auf einer Notenlinie. - -@lilypond[quote,ragged-right] -nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } -mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } - -<< - \new DrumStaff \with{ - \remove Bar_engraver - drumStyleTable = #percussion-style - \override StaffSymbol #'line-count = #1 - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond -@end table - - -@node Custom percussion staves -@unnumberedsubsubsec Custom percussion staves - -Wenn ihnen keine der vordefinierten Stile gefällt, können Sie auch eine -eigene Liste der Positionen und Notenköpfe am Anfang ihrer Datei erstellen. - -@lilypond[quote,verbatim] -#(define mydrums '( - (bassdrum default #f -1) - (snare default #f 0) - (hihat cross #f 1) - (pedalhihat xcircle "stopped" 2) - (lowtom diamond #f 3))) -up = \drummode { hh8 hh hh hh hhp4 hhp } -down = \drummode { bd4 sn bd toml8 toml } - -\new DrumStaff << - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - - -@snippets - -Hier einige Beispiele: - -Zwei Holzblöcke, notiert mit wbh (hoch) und wbl (tief) - -@lilypond[quote,verbatim] -% These lines define the position of the woodblocks in the stave; -% if you like, you can change it or you can use special note heads -% for the woodblocks. -#(define mydrums '((hiwoodblock default #t 3) - (lowoodblock default #t -2))) - -woodstaff = { - % This defines a staff with only two lines. - % It also defines the positions of the two lines. - \override Staff.StaffSymbol #'line-positions = #'(-2 3) - - % This is neccessary; if not entered, the barline would be too short! - \override Staff.BarLine #'bar-size = #3 -} - -\new DrumStaff { - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - % with this you load your new drum style table - \woodstaff - - \drummode { - \time 2/4 - wbl8 wbl16 wbl wbh8-> wbl | - wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | - } -} -@end lilypond - -In diesem Spezialfalls muss die Länge der Taktlinie mit -@code{\override Staff.BarLine #'bar-size #number} angepasst werden. -Andernfalls wäre sie zu kurz. Die Position der beiden Linien muss -auch definiert werden. - -Tamburin, notiert mit @code{tamb}: - -@lilypond[quote,verbatim] -#(define mydrums '((tambourine default #t 0))) - -tambustaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tambourine" -} - -\new DrumStaff { - \tambustaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - \time 6/8 - tamb8. tamb16 tamb8 tamb tamb tamb | - tamb4. tamb8 tamb tamb | - % the trick with the scaled duration and the shorter rest - % is neccessary for the correct ending of the trill-span! - tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | - } -} -@end lilypond - -Noten für Tam-Tam (notiert mit @code{tt}): - -@lilypond[quote,verbatim] -#(define mydrums '((tamtam default #t 0))) - -tamtamstaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tamtam" -} - -\new DrumStaff { - \tamtamstaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - tt 1 \pp \laissezVibrer - } -} -@end lilypond - -Zwei Glocken, notiert mit @code{cb} (Kuhglocke) und @code{rb} -(Reisterglocke) - -@lilypond[quote,verbatim] -#(define mydrums '((ridebell default #t 3) - (cowbell default #t -2))) - -bellstaff = { - \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Different Bells" -} - -\new DrumStaff { - \bellstaff - \drummode { - \time 2/4 - rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | - } -} -@end lilypond - -Here an short example by maestro Stravinsky (from @q{L'histoire du Soldat}) - -@lilypond[quote,verbatim] -#(define mydrums '((bassdrum default #t 4) - (snare default #t -4) - (tambourine default #t 0))) - -global = { - \time 3/8 s4. - \time 2/4 s2*2 - \time 3/8 s4. - \time 2/4 s2 -} - -drumsA = { - \context DrumVoice << - { \global } - { \drummode { - \autoBeamOff - \stemDown sn8 \stemUp tamb s8 | - sn4 \stemDown sn4 | - \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | - \stemDown sn8 \stemUp tamb s8 | - \stemUp sn4 s8 \stemUp tamb - } - } - >> -} - -drumsB = { - \drummode { - s4 bd8 s2*2 s4 bd8 s4 bd8 s8 - } -} - -\layout { - indent = #40 -} - -\score { - \new StaffGroup << - \new DrumStaff { - \set DrumStaff.instrumentName = \markup { - \column { - "Tambourine" - "et" - "caisse claire s. timbre" - } - } - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsA - } - - \new DrumStaff { - \set DrumStaff.instrumentName = #"Grosse Caisse" - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsB } - >> -} -@end lilypond - - -@seealso -Schnipsel: -@rlsr{Percussion}. - -Referenz der Interna: -@rinternals{DrumStaff}, -@rinternals{DrumVoice}. - - -@node Ghost notes -@unnumberedsubsubsec Ghost notes - -Geisternoten für Schlagzeug und Perkussion können mit dem -Klammer- (@code{\parenthesize})-Befehl, beschrieben in @ref{Parentheses}, -erstellt werden. Im Standard-@code{\drummode}-Modus ist aber -das @code{Parenthesis_engraver}-Plugin nicht automatisch enthalten. - -@lilypond[quote,ragged-right,verbatim,fragment] -\new DrumStaff \with { - \consists "Parenthesis_engraver" -} -<< - \context DrumVoice = "1" { s1 } - \context DrumVoice = "2" { s1 } - \drummode { - << - { - hh8[ hh] hh16 - < \parenthesize sn > hh - < \parenthesize sn > hh8 hh - } \\ - { - bd4 r4 bd8 bd r8 bd - } - >> - } ->> -@end lilypond - -@noindent -Um jede Klammer-Definition (@code{\parenthesize}) müssen - zusätzlich die spitzen -Klammern für Akkorde (@code{< >}) gesetzt werden. - -@seealso -Schnipsel: -@rlsr{Percussion}. diff --git a/Documentation/de/user/pitches.itely b/Documentation/de/user/pitches.itely deleted file mode 100644 index f8166f9789..0000000000 --- a/Documentation/de/user/pitches.itely +++ /dev/null @@ -1,2478 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Pitches -@section Pitches - -@lilypondfile[quote]{pitches-headword.ly} - -Dieser Abschnitt zeigt, wie man die Tonhöhe notieren kann. -Es gibt drei Stufen in diesem Prozess: Eingabe, -Veränderung und Ausgabe. - -@menu -* Writing pitches:: -* Changing multiple pitches:: -* Displaying pitches:: -* Note heads:: -@end menu - - -@node Writing pitches -@subsection Writing pitches - -Dieser Abschnitt zeigt, wie man Tonhöhen notiert. Es gibt -zwei verschiedene Möglichkeiten, Noten in bestimmten -Oktaven zu notieren: den absoluten und den relativen -Modus. In den meisten Fällen eignet sich der relative -Modus besser. - -@menu -* Absolute octave entry:: -* Relative octave entry:: -* Accidentals:: -* Note names in other languages:: -@end menu - -@node Absolute octave entry -@unnumberedsubsubsec Absolute octave entry - -@cindex Tonhöhenbezeichnungen -@cindex Absoluter Modus: Tonhöhen -@cindex Absolute Spezifikation von Oktaven -@cindex Angabe der Oktave: absolut - -Tonhöhenbezeichnungen werden durch Kleinbuchstaben -von@tie{}@code{a} bis@tie{}@code{g} angegeben. Dabei -wird ein aus dem Englischen entlehntes Modell benutzt, das sich -vom Deutschen dadurch unterscheidet, dass@tie{}@code{b} -für die Note @qq{H} steht. Die Benutzung deutscher -Notenbezeichnungen mit der Unterscheidung von b und h ist -auch möglich, siehe @ref{Note names in other languages}. -Die Notenbezeichnungen @code{c} bis @code{b} -werden in der Oktave unter dem zweigestrichenen C -gesetzt. - -@c don't use c' here. -@lilypond[verbatim,quote,fragment] -\clef bass -c d e f -g a b c -d e f g -@end lilypond - -@cindex Oktavwechsel: Tonhöhe -@cindex Wechsel der Oktave -@cindex Tonhöhe: Wechsel der Oktave - -@funindex ' -@funindex , - -Andere Oktaven können erreicht werden, indem man ein -Apostroph@tie{}(@code{'}) oder ein Komma@tie{}(@code{,}) -benutzt. Jedes@tie{}@code{'} erhöht die Tonhöhe um -eine Oktave, jedes@tie{}@code{,} erniedrigt sie um eine -Oktave. - -@lilypond[verbatim,quote,fragment] -\clef treble -c' c'' e' g -d'' d' d c -\clef bass -c, c,, e, g -d,, d, d c -@end lilypond - -@seealso -Glossar: -@rglos{Pitch names}. - -Schnipsel: -@rlsr{Pitches}. - - -@node Relative octave entry -@unnumberedsubsubsec Relative octave entry - -@cindex Relativ -@cindex Relative Oktavbestimmung -@cindex Oktavbestimmung, relativ -@cindex Noteneingabe: relative Oktavbestimmung - -@funindex \relative -@funindex relative - -Wenn Oktaven im absoluten Modus notiert, passiert es -schnell, eine Note auf der falschen Oktave zu notieren. Mit -dem relativen Modus kommen solche Fehler seltener vor, weil -man die Oktave nur noch sehr selten spezifizieren muss. -Hinzu kommt, dass im absoluten Modus ein einzelner Fehler -schwer zu finden ist, während er im relativen Modus den -ganzen Rest des Stückes um eine Oktave verschiebt. - -@example -\relative @var{Anfangstonhöhe} @var{musikalischer Ausdruck} -@end example - -Im relativen Modus wird angenommen, dass sich jede folgende -Note so dicht wie möglich bei der nächsten befindet. Das bedeutet, -dass die Oktave jeder Tonhöhe innerhalb eines @var{musikalischen -Ausdrucks} wie folgt errechnet wird: - -@itemize -@item -Wenn kein Oktavänderungszeichen an einer Tonhöhe benutzt wird, -wird ihre Oktave so errechnet, dass das Intervall zur vorigen -Noten weniger als eine Quinte ist. Das Intervall wird errechnet, -ohne Versetzungszeichen zu berücksichtigen. - -@item -Ein Oktavänderungszeichen@tie{}@code{'} oder@tie{}@code{,} -kann hinzugefügt werden, um eine Tonhöhe explizit um eine -Oktave zu erhöhen bzw. zu erniedrigen, relativ zu der Tonhöhe, -die ohne das Oktavänderungszeichen errechnet wurde. - -@item -Mehrfache Oktavänderungszeichen können benutzt werden. Die -Zeichen@code{''}@tie{}und@tie{}@code{,,} ändern zum Beispiel -die Tonhöhe um zwei Oktaven. - -@item -Die Tonhöhe der ersten Note ist relativ zu -@code{@var{Anfangstonhöhe}}. Die @var{Anfangstonhöhe} wird -im absoluten Modus gesetzt, und als Empfehlung gilt, eine -Oktave von C zu nehmen. - -@end itemize - -So funktioniert der relative Modus: - -@lilypond[verbatim,quote] -\relative c { - \clef bass - c d e f - g a b c - d e f g -} -@end lilypond - -Oktavversetzungen müssen für alle Intervalle angezeigt werden, -die größer als eine Quarte sind. - -@lilypond[verbatim,quote] -\relative c'' { - c g c f, - c' a, e'' c -} -@end lilypond - -Eine Sequenz ohne ein einziges Oktavänderungszeichen kann -aber trotzdem weite Intervalle umfassen: - -@lilypond[verbatim,quote] -\relative c { - c f b e - a d g c -} -@end lilypond - -@cindex Akkorde und relativer Modus -@cindex relativer Modus und Akkorde -@cindex Oktavenmodus (relativ) und Akkorde - -Wenn der vorherige Ausdruck ein Akkord ist, wird die erste Note -des Akkordes benutzt, um die erste Note des nächsten Akkordes zu -bestimmen. Innerhalb von Akkorden ist die nächste Note immer -relativ zur vorherigen. Betrachten Sie das folgende Beispiel -aufmerksam, insbesondere die @code{c}-Noten. - -@lilypond[verbatim,quote] -\relative c' { - c - - - -} -@end lilypond - -Wie oben erklärt wurde, wird die Oktave einer Tonhöhe nur -nach ihrer Notenbezeichnung errechnet, unabhängig von allen -Versetzungszeichen. Darum wird ein Eisis auf ein H (notiert als @code{b}) -folgend höher gesetzt, während ein Feses tiefer gesetzt wird. -Anders gesagt wird eine doppelterhöhte Quarte wird als -kleineres Intervall angesehen als eine doppelterniedrigte -Quinte, unabhängig von der Anzahl an Halbtönen, die jedes -Intervall enthält. - -@lilypond[verbatim,quote] -\relative c'' { - c2 fis - c2 ges - b2 eisis - b2 feses -} -@end lilypond - - -@seealso -Musickgossar: -@rglos{fifth}, -@rglos{interval}, -@rglos{Pitch names}. - -Notationsreferenz: -@ref{Octave checks}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{RelativeOctaveMusic}. - - -@cindex Relativer Oktavenmodus und Transposition -@cindex Transposition und relativer Modus - -@funindex \transpose -@funindex \chordmode -@funindex \relative -@funindex transpose -@funindex chordmode -@funindex relative - -@knownissues - -Die relative Veränderung wirkt sich nicht auf -Transposition (@code{\transpose}), -Akkordnotation (@code{\chordmode}) oder @code{\relative}-Abschnitte -aus. Um den relativen Modus innerhalb von transponierter Musik zu -verwenden, muss ein zusätzliches @code{\relative} innerhalb der -Klammern des @code{\transpose}-Befehls gesetzt werden. - -@c DEPRECATED -Wenn keine @var{Anfangstonhöhe} für @code{\relative} angegeben -wird, wird@tie{}@code{c'} angenommen. Das ist aber eine -veraltete Option, die in späteren Programmversionen verschwinden kann. -Darum wird von der Benutzung abgeraten. - - -@node Accidentals -@unnumberedsubsubsec Accidentals - -@cindex Versetzungszeichen -@cindex Tonart -@cindex Schlüssel -@cindex Akzidentien - -@warning{Neue Benutzer sind manchmal verwirrt, wie -Versetzungszeichen und Vorzeichen/Tonarten funktionieren. -In LilyPond sind Notenbezeichnungen die wirkliche -Tonhöhe, erst durch Vorzeichen wird bestimmt, wie diese -Tonhöhe dann im Notenbild dargestellt wird. Eine -einfache Tonhöhe wie etwa@tie{}@code{c} bedeutet also -immer das eingestrichene C ohne Versetzungszeichen, egal -was für Vorzeichen/Tonart oder Schlüssel gesetzt sind. -Mehr Information dazu in @rlearning{Accidentals and key -signatures}.} - -@cindex Notenbezeichnungen, Deutsch -@cindex Notenbezeichnungen, Holländisch -@cindex Notenbezeichnungen, Standard -@cindex Versetzungszeichen, Deutsch -@cindex Standardnotenbezeichnungen -@cindex Kreuz -@cindex B -@cindex Doppelkreuz -@cindex Doppel-B -@cindex Auflösungszeichen -@cindex wirkliche Tonhöhe - - -Ein @notation{Kreuz} wird eingegeben, indem man @code{-is} an die -Notenbezeichnung hängt, ein b durch @code{-es}. Doppelkreuze -und Doppel-Bs werden durch Hinzufügen von @code{-isis} und -@code{-eses} hinter die Notenbezeichnung erzeugt. Diese -Syntax leitet sich von den holländischen Notenbezeichnungen -ab. Um andere Bezeichnungen für Versetzungszeichen zu -benutzung, siehe @ref{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -ais1 aes aisis aeses -@end lilypond - -@noindent -Auch die deutschen Varianten @code{as} für @code{aes} und -@code{es} für @code{ees} sind erlaubt. Im Unterschied zum -Deutschen ist aber @code{bes} die einzige Version für den Ton -B, während his als @code{bis} geschrieben werden muss. Das kann -aber auch verändert werden, siehe @ref{Note names in other languages}. - - -@lilypond[verbatim,quote,relative=2] -a4 aes a2 -@end lilypond - -Ein Auflösungszeichen macht die Wirkung eines Kreuzes oder Bs -rückgängig. Diese Auflösungszeichen werden jedoch nicht -als Suffix einer Tonhöhenbezeichnung eingegeben, sondern -sie ergeben sich (automatisch) aus dem Kontext, wenn die -nicht alterierte Notenbezeichnung eingegeben wird. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -a4 aes a2 -@end lilypond - - -@cindex Vierteltöne -@cindex Vorzeichen, Vierteltöne -@cindex Versetzungszeichen, Vierteltöne -@cindex Mikrotöne -@cindex Halbkreuz -@cindex Halb-B - -Versetzungszeichen für Vierteltöne werden durch Anhängen der Endungen -@code{-eh} (Erniedrigung) und @code{-ih} (Erhöhung) an den -Tonhöhenbuchstaben erstellt. Das Beispiel zeigt eine in Vierteltönen -aufsteigende Serie vom eingestrichenen C. - -@lilypond[verbatim,quote,relative=2] -ceseh1 ces ceh c cih cis cisih -@end lilypond - - -@cindex Versetzungszeichen, Erinnerung -@cindex Versetzungszeichen, Warnung -@cindex Vorzeichen, Erinnerung -@cindex Vorzeichen in Klammern -@cindex Erinnerungsvorzeichen -@cindex Warnungsvorzeichen -@cindex Klammern um Vorzeichen - -@funindex ? -@funindex ! - -Normalerweise werden Versetzungszeichen automatisch gesetzt, aber -sie können auch manuell hinzugefügt werden. Ein erinnerndes -Versetzungszeichen kann erzwungen werden, indem man ein Ausrufungszeichen -(@code{!}) hinter die Notenbezeichnung schreibt. Ein warnendes -Versetzungszeichen (also ein Vorzeichen in Klammern) wird durch Anfügen -eines Fragezeichens (@code{?}) erstellt. Mit diesen zusätzlichen -Zeichen kann man sich auch Auflösungszeichen ausgeben lassen. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -cis cis cis! cis? c c? c! c -@end lilypond - -@cindex Versetzungszeichen an übergebundener Note -@cindex Überbindung, Versetzungszeichen - -Versetzungzeichen von übergebundenen Noten werden nur -dann gesetzt, wenn ein neues System begonnen wird: - -@lilypond[verbatim,quote,relative=2] -cis1 ~ cis ~ -\break -cis -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-extra-naturals-from-being-automatically-added.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{makam-example.ly} - -@seealso -Glossar: -@rglos{sharp}, -@rglos{flat}, -@rglos{double sharp}, -@rglos{double flat}, -@rglos{Pitch names}, -@rglos{quarter tone}. - -Handbuch zum Lernen: -@rlearning{Accidentals and key signatures}. - -Notationsreferenz: -@ref{Automatic accidentals}, -@ref{Annotational accidentals}, -@ref{Note names in other languages}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{Accidental_engraver}, -@rinternals{Accidental}, -@rinternals{AccidentalCautionary}, -@rinternals{accidental-interface}. - - -@cindex Versetzungszeichen, Viertelton -@cindex Vierteltonversetzungszeichen - -@knownissues - -Es gibt keine allgemeinen Regeln für die Notation von -Vierteltönen, die Symbole von LilyPond folgen also -keinem Standard. - - -@node Note names in other languages -@unnumberedsubsubsec Note names in other languages - -@cindex Notenbezeichungen, andere Sprachen -@cindex Tonhöhenbezeichnungen, andere Sprachen -@cindex Sprache, Tonhöhenbezeichnungn in anderer - -Es gibt vordefinierte Bezeichnungen für die Notenbezeichnungen in anderen -Sprachen als Englisch. Um sie zu benutzen, muss nur die -entsprechende Datei für die jeweilige Sprache eingefügt werden. -Zum Beispiel fügt man mit @code{\include "deutsch.ly"} die -Notendefinitionen für die deutsche Sprache am Anfang der Datei -hinzu. In der Tabelle sind die existierenden Sprachdefinitionen -mit den dazugehörigen Notenbezeichnungen dargestellt - -@quotation -@multitable {@file{nederlands.ly}} {do re mi fa sol la sib si} -@headitem Sprachdatei - @tab Notenbezeichnung -@item @file{nederlands.ly} - @tab c d e f g a bes b -@item @file{arabic.ly} - @tab do re mi fa sol la sib si -@item @file{catalan.ly} - @tab do re mi fa sol la sib si -@item @file{deutsch.ly} - @tab c d e f g a b h -@item @file{english.ly} - @tab c d e f g a bf b -@item @file{espanol.ly} - @tab do re mi fa sol la sib si -@item @file{italiano.ly} - @tab do re mi fa sol la sib si -@item @file{norsk.ly} - @tab c d e f g a b h -@item @file{portugues.ly} - @tab do re mi fa sol la sib si -@item @file{suomi.ly} - @tab c d e f g a b h -@item @file{svenska.ly} - @tab c d e f g a b h -@item @file{vlaams.ly} - @tab do re mi fa sol la sib si -@end multitable -@end quotation - -@noindent -und die dazugehörigen Versetzungszeichen-Endungen: - -@quotation -@multitable {@file{nederlands.ly}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} -@headitem Sprachdatei - @tab Kreuz @tab B @tab Doppelkreuz @tab Doppel-B -@item @file{nederlands.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{arabic.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{catalan.ly} - @tab -d/-s @tab -b @tab -dd/-ss @tab -bb -@item @file{deutsch.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{english.ly} - @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp - @tab -ff/-flatflat -@item @file{espanol.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{italiano.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{norsk.ly} - @tab -iss/-is @tab -ess/-es @tab -ississ/-isis - @tab -essess/-eses -@item @file{portugues.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{suomi.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{svenska.ly} - @tab -iss @tab -ess @tab -ississ @tab -essess -@item @file{vlaams.ly} - @tab -k @tab -b @tab -kk @tab -bb -@end multitable -@end quotation - -@noindent -Auf Holländisch, Deutsch, Norwegisch und Schwedisch (u. a.) werden die -Erniedrigungen von @q{a} wie @code{aes} und @code{aeses} zu -@code{as} und @code{ases} (oder auch @code{asas}) zusammengezogen. -In manchen Sprachen sind nur diese Kurzformen definiert. - -@lilypond[verbatim,quote,relative=2] -a2 as e es a ases e eses -@end lilypond - - -@cindex Mikrotöne -@cindex Halbkreuz -@cindex Halb-B -@cindex sesqui-Kreuz -@cindex sesqui-B - -Bestimmte Musik verwendet Alterationen, die Bruchteile von den -@qq{normalen} Kreuzen oder Bs sind. Die Notenbezeichnungen für -Vierteltöne für die verschiedenen Sprachen sind in der folgenden -Tabelle aufgeführt. Die Präfixe @qq{Semi-} und @qq{Sesqui-} bedeuten -@qq{halb} bzw. @qq{eineinhalb}. Für alle anderen -Sprachen sind noch keine eigenen Namen definiert. - -@quotation -@multitable {@file{nederlands.ly}} {@b{semi-sharp}} {@b{semi-flat}} {@b{sesqui-sharp}} {@b{sesqui-flat}} -@headitem Sprachdatei - @tab Vierteltonkreuz @tab Viertelton-B @tab 3/4-tonkreuz @tab 3/4-ton-B - -@item @file{nederlands.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{arabic.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{deutsch.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{english.ly} - @tab -qs @tab -qf @tab -tqs @tab -tqf -@item @file{italiano.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{portugues.ly} - @tab -sqt @tab -bqt @tab -stqt @tab -btqt -@end multitable -@end quotation - - -@seealso -Glossar: -@rglos{Pitch names}. - -Schnipsel: -@rlsr{Pitches}. - - -@node Changing multiple pitches -@subsection Changing multiple pitches - -Dieser Abschnitt zeigt, wie man Tonhöhen beeinflusst. - -@menu -* Octave checks:: -* Transpose:: -@end menu - -@node Octave checks -@unnumberedsubsubsec Octave checks - -@cindex Oktavenüberprüfung -@cindex Oktavierungskorrektur -@cindex Kontroll-Tonhöhe - -@funindex = -@funindex \octaveCheck -@funindex octaveCheck -@funindex controlpitch - -Im relativen Modus geschieht es recht häufig, dass ein -Oktavänderungszeichen vergessen wird. Oktavenüberprüfungen -machen es einfacher, solche Fehler zu entdecken und zu -korrigieren. Sie geben eine Warnung aus und korrigieren -die Oktave, wenn eine Note in einer unerwarteten Oktave -gefunden wird. - -Um die Oktave einer Note zu überprfüfen, muss die absolute -Oktave nach dem @code{=}-Symbol angegeben werden. Im -folgenden Beispiel wird eine Warnung (und eine Tonhöhenänderung) -generiert, weil die zweite Note als absolute Oktave -ein @code{d''} anstelle von @code{d'} notiert ist, -wie es die Oktavierungskorrektur markiert. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d='4 d - e2 f -} -@end lilypond - -Die Oktave von einer Note kann auch mit dem -@code{\octaveCheck}@tie{}@var{Kontrolltonhöhe}-Befehl -überprüft werden. @var{Kontrollhöhe} wird im absoluten -Modus eingegeben. Dabei wird überprüft, ob das -Intervall zwischen der vorherigen Note und der -@var{Kontrolltonhöhe} nicht größer als eine Quarte ist -(die normale Berechnung im relativen Modus). Wenn diese -Überprüfung einen Fehler ausgibt, wird eine Warnung -gemeldet, aber die vorigen Note wird nicht verändert. -Folgende Noten sind dann relativ zur @var{Kontrolltonhöhe}. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d - \octaveCheck c' - e2 f -} -@end lilypond - -Vergleichen Sie die zwei Takte im nächsten Beispiel. Die -erste und dritte @code{\octaveCheck}-Überprüfung gibt -einen Fehler aus, die zweite dagegen ist erfolgreich: - -@lilypond[verbatim,quote] -\relative c'' { - c4 f g f - - c4 - \octaveCheck c' - f - \octaveCheck c' - g - \octaveCheck c' - f -} -@end lilypond - -@seealso -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{RelativeOctaveCheck}. - - -@node Transpose -@unnumberedsubsubsec Transpose - -@cindex Transposition -@cindex Transponieren -@cindex Noten, transponieren -@cindex Tonhöhen, transponieren - -@funindex \transpose -@funindex transpose - -Ein musikalischer Ausdruck kann mit dem Befehl @code{\transpose} -transponiert werden. Die Syntax lautet: - -@example -\transpose @var{vonTonhöhe} @var{nachTonhöhe} @var{mus. Ausdruck} -@end example - -@noindent -Das bedeutet, dass der @var{mus. Ausdruck} um das Intervall zwischen den -Tonhöhen @var{vonTonhöhe} und @var{nachTonhöhe} transponiert wird: Jede Note, die die -Tonhöhe @var{vonTonhöhe} hat, wird in die Tonhöhe @var{nachTonhöhe} umgewandelt, und alle anderen -Noten um das gleiche Intervall. Beide Tonhöhen -werden im absoluten Modus eingegeben. - -So kann z. B. ein Stück in D-Dur, wenn es für den Sänger etwas zu -tief ist, nach E-Dur transponiert werden. Dabei -werden auch die Vorzeichen entsprechend angepasst: - -@lilypond[verbatim,quote] -\transpose d e { - \relative c' { - \key d \major - d4 fis a d - } -} -@end lilypond - -Wenn eine Stimme, die in C notiert ist, von einer A-Klarinette -gespielt werden soll (für die A als C notiert wird, -aber eine kleine Terz tiefer erklingt als es notiert -ist), kann die entpsrechende Stimme wie folgt erstellt -werden: - -@lilypond[verbatim,quote] -\transpose a c' { - \relative c' { - \key c \major - c4 d e g - } -} -@end lilypond - -@noindent -Beachten Sie, dass @w{@code{\key c \major}} explizit -angegeben werden muss. Wenn hier keine Tonart angemerkt -würde, würde die Noten zwar transponiert, aber keine -Vorzeichen angezeigt werden. - -@code{\transpose} unterscheidet enharmonische Verwechslungen: sowohl -@w{@code{\transpose c cis}} als auch @w{@code{\transpose c des}} transponieren -die Musik einen Halbton nach oben. Aber die erste Version gibt als -Versetzungszeichen Kreuze aus, die zweite dagegen B-Versetzungszeichen. - -@lilypond[verbatim,quote] -music = \relative c' { c d e f } -\new Staff { - \transpose c cis { \music } - \transpose c des { \music } -} -@end lilypond - -@cindex transponierende Instrumente -@cindex Instrumente, transponierende - -@code{\transpose} kann auch benutzt werden, um die geschriebenen -Noten eines transponierenden Instruments zu notieren. Im vorigen Beispiel wurde die Tonhöhen so eingegeben, -wie sie erklingen (also in C), aber man kann genauso -gut auch andersherum aus einer Stimme, die für ein -transponierendes Instrument in einem anderen Ton als -C geschrieben wurde, eine Partitur in C erstellen. -Die Noten einer B-Trompete, die mit einem notierten E -(also einem klingenden D) anfangen, könnte man also -auch so eingeben: - -@example -musicInBflat = @{ e4 @dots{} @} -\transpose c bes, \musicInBflat -@end example - -@noindent -Um die Noten dann in F zu setzen (um sie etwa für ein -Horn zu arrangieren), könnte man die schon geschriebenen -Noten wieder mit einem weiteren @code{\transpose} -umgeben: - -@example -musicInBflat = @{ e4 @dots{} @} -\transpose f c' @{ \transpose c bes, \musicInBflat @} -@end example - -@noindent -Für mehr Information zu transponierenden Instrumenten -siehe auch @ref{Instrument transpositions}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} - -@seealso -Notationsreferenz: -@ref{Instrument transpositions}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{TransposedMusic}. - -@funindex \transpose -@funindex \chordmode -@funindex \relative -@funindex transpose -@funindex chordmode -@funindex relative - -@knownissues - -Der relative Modus wirkt nicht in @code{\transpose}, -@code{\chordmode} oder @code{\relative}. -Um auch im relativen Modus transponieren -zu können, muss ein @code{\relative} innerhalb des -@code{\tranpose} zusätzlich gesetzt werden. - - -@node Displaying pitches -@subsection Displaying pitches - -Dieser Abschnitt zeigt, wie die Ausgabe von Tonhöhen -verändern werden kann. - -@menu -* Clef:: -* Key signature:: -* Ottava brackets:: -* Instrument transpositions:: -* Automatic accidentals:: -* Ambitus:: -@end menu - -@node Clef -@unnumberedsubsubsec Clef - -@cindex G-Schlüssel -@cindex C-Schlüssel -@cindex F-Schlüssel -@cindex Sopranschlüssel -@cindex Violinschlüssel -@cindex Altschlüssel -@cindex Bratschenschlüssel -@cindex Tenorschlüssel -@cindex Bassschlüssel -@cindex Französischer Violinschlüssel -@cindex Mezzosopranschlüssel -@cindex Sopranschlüssel in C -@cindex Baritonschlüssel -@cindex Subbassschlüssel -@cindex Schlüssel -@cindex Notenschlüssel -@cindex Alte Schlüssel -@cindex Schlüssel Alter Musik -@cindex Schlüssel, C -@cindex Schlüssel, G -@cindex Schlüssel, F - -@funindex \clef -@funindex clef - -Der Schlüssel kann verändert werden. Das eingestrichene -C wird in jedem Beispiel gezeigt: - -@lilypond[verbatim,quote,relative=1] -\clef treble -c2 c -\clef alto -c2 c -\clef tenor -c2 c -\clef bass -c2 c -@end lilypond - -Andere Schlüssel sind u. A.: - -@lilypond[verbatim,quote,relative=1] -\clef french -c2 c -\clef soprano -c2 c -\clef mezzosoprano -c2 c -\clef baritone -c2 c - -\break - -\clef varbaritone -c2 c -\clef subbass -c2 c -\clef percussion -c2 c -\clef tab -c2 c -@end lilypond - -Weitere unterstützte Schlüssel sind beschrieben in @ref{Ancient clefs}. - -@cindex transponierende Schlüssel -@cindex Schlüssel, transponierend -@cindex Oktavtransposition -@cindex Chor-Tenorschlüssel -@cindex Tenorschlüssel, Chor - -Indem @code{_8} oder @code{^8} an die jeweilige Schlüsselbezeichnung -angehängt wird, wird der Schlüssel um eine Oktave nach oben oder unten -transponiert, mit @code{_15} oder @code{^15} um zwei Oktaven. -Die Schlüsselbezeichnung muss in Anführungszeichen gesetzt werden, -wenn sie Unterstriche oder Zahlen enthält, siehe Beispiel: - -@lilypond[verbatim,quote,relative=2] -\clef treble -c2 c -\clef "treble_8" -c2 c -\clef "bass^15" -c2 c -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{tweaking-clef-properties.ly} - - -@seealso -Notationsreferenz: @ref{Ancient clefs}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{Clef_engraver}, -@rinternals{Clef}, -@rinternals{OctavateEight}, -@rinternals{clef-interface}. - - -@node Key signature -@unnumberedsubsubsec Key signature - -@cindex Tonart -@cindex Vorzeichen - -@funindex \key -@funindex key - -@c duplicated in Key signature and Accidentals -@warning{Neue Benutzer sind manchmal verwirrt, wie -Versetzungszeichen und Vorzeichen/Tonarten funktionieren. -In LilyPond sind Notenbezeichnungen die wirkliche -Tonhöhe, erst durch Vorzeichen wird bestimmt, wie diese -Tonhöhe dann im Notenbild dargestellt wird. Eine -einfache Tonhöhe wie etwa@tie{}@code{c} bedeutet also -immer das eingestrichene C ohne Versetzungszeichen, egal -was für Vorzeichen/Tonart oder Schlüssel gesetzt sind. -Mehr Information dazu in @rlearning{Accidentals and key -signatures}.} - -Die Vorzeichen zeigen die Tonart an, in welcher ein Stück notiert ist. -Es handelt sich um eine Anzahl von Alterationszeichen (Kreuzen oder -Bs) am Beginn jedes Notensystems. - -Die Tonart kann geändert werden: - -@example -@code{\key} @var{Tonhöhe} @var{Modus} -@end example - -@funindex \minor -@funindex \major -@funindex \minor -@funindex \ionian -@funindex \locrian -@funindex \aeolian -@funindex \mixolydian -@funindex \lydian -@funindex \phrygian -@funindex \dorian -@funindex minor -@funindex major -@funindex minor -@funindex ionian -@funindex locrian -@funindex aeolian -@funindex mixolydian -@funindex lydian -@funindex phrygian -@funindex dorian - -@cindex Kirchentonarten -@cindex Modus -@cindex Dur -@cindex Moll -@cindex Ionisch -@cindex Lokrisch -@cindex Äolisch -@cindex Mixolydisch -@cindex Aeolisch -@cindex Dorisch -@cindex Lydisch -@cindex Phrygisch - -Der Wert @var{Modus} sollte entweder @code{\major} oder @code{\minor} -sein, um Moll oder Dur der @var{Tonhöhe} zu erhalten. Es können auch -Modusbezeichnungen für Kirchentonarten verwendet werden: @code{\ionian} -(Ionisch), @code{\locrian} (Locrisch), @code{\aeolian} (Aeolisch), -@code{\mixolydian} (Mixolydisch), @code{\lydian} (Lydisch), -@code{\phrygian} (Phrygisch) und @code{\dorian} (Dorisch). - -@lilypond[verbatim,quote,relative=2] -\key g \major -fis1 -f -fis -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - - -@seealso -Glossar: -@rglos{church mode}, -@rglos{scordatura}. - -Handbuch zum Lernen: -@rlearning{Accidentals and key signatures}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{KeyChangeEvent}, -@rinternals{Key_engraver}, -@rinternals{Key_performer}, -@rinternals{KeyCancellation}, -@rinternals{KeySignature}, -@rinternals{key-cancellation-interface}, -@rinternals{key-signature-interface}. - - -@node Ottava brackets -@unnumberedsubsubsec Ottava brackets - -@cindex ottava -@cindex 15ma -@cindex 8va -@cindex 8ve -@cindex Oktavierung - -@funindex set-octavation -@funindex \ottava -@funindex ottava - -@notation{Oktavierungsklammern} zeigen eine zusätzliche -Transposition von einer Oktave an: - -@lilypond[verbatim,quote,relative=2] -a'2 b -\ottava #1 -a b -\ottava #0 -a b -@end lilypond - -Die @code{ottava}-(Oktavierungs)-Funktion kann auch die -Werte -1 (für 8va bassa), -2@tie{}(für 15ma), und -2 (für 15ma bassa) als Argumente -haben. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ottava-text.ly} - - -@seealso -Glossar: -@rglos{octavation}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{Ottava_spanner_engraver}, -@rinternals{OttavaBracket}, -@rinternals{ottava-bracket-interface}. - - -@node Instrument transpositions -@unnumberedsubsubsec Instrument transpositions - -@cindex Transposition, MIDI -@cindex Transposition, Instrumente -@cindex Transponierendes Instrument -@cindex MIDI -@cindex MIDI-Transposition - -@funindex \transposition -@funindex transposition - -Wenn man Noten setzt, die von transponierenden Instrumenten -gespielt werden, sind oft einige Stimmen auf einer -anderen Tonhöhe notiert als dem Kammerton. In diesem -Fall muss die Tonart des transponierenden Instruments -gekennzeichnet werden, weil sonst die MIDI-Ausgabe -und Stichnoten in anderen Stimmen falsche Tonhöhen -produzieren. Mehr Information zu Stichnoten in -@ref{Quoting other voices}. - -@example -\transposition @var{Tonhöhe} -@end example - -Die Tonhöhe, die für @code{\transposition} benutzt -wird, muss mit dem wirklichen Ton übereinstimmen, -der erklingt, wenn das Instrument ein @code{c'} -in seiner Stimme spielt. Die Tonhöhe wird im -absoluten Modus angegeben, ein Instrument also, -dass einen Ton höher erklingt als es notiert wird, -muss folgenden Befehl benutzen: -@w{@code{\transposition d'}}. @code{\transposition} -sollte @emph{nur} dann benutzt werden, wenn sie nicht -@emph{nicht} in C notiert werden. - -Hier einige Noten für Geige und B-Klarinette: die -Stimmen (Noten und Vorzeichen) sind so notiert, wie sie -in der Partitur erscheinen. Die zwei Instrumente -spielen unisono. - -@lilypond[verbatim,quote] -\new GrandStaff << - \new Staff = "violin" { - \relative c'' { - \set Staff.instrumentName = #"Vln" - \set Staff.midiInstrument = #"violin" - % not strictly necessary, but a good reminder - \transposition c' - - \key c \major - g4( c8) r c r c4 - } - } - \new Staff = "clarinet" { - \relative c'' { - \set Staff.instrumentName = \markup { Cl (B\flat) } - \set Staff.midiInstrument = #"clarinet" - \transposition bes - - \key d \major - a4( d8) r d r d4 - } - } ->> -@end lilypond - -Die @code{\transposition} kann während eines Stückes -geändert werden. Ein Klarinetist zum Beispiel kann -zwischen B- und A-Klarinette wechseln. - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = #"Cl (A)" -\key a \major -\transposition a -c d e f -\textLengthOn -s1*0^\markup { Switch to B\flat clarinet } -R1 - -\key bes \major -\transposition bes -c2 g -@end lilypond - - -@seealso -Glossar: -@rglos{concert pitch}, -@rglos{transposing instrument}. - -Notationsreferenz: -@ref{Quoting other voices}, @ref{Transpose}. - -Schnipsel: -@rlsr{Pitches}. - - -@node Automatic accidentals -@unnumberedsubsubsec Automatic accidentals - -@cindex Akzidentien -@cindex Versetzungszeichen, Standard -@cindex Versetzungszeichenstil -@cindex Automatische Versetzungszeichen -@cindex Versetzungszeichen, automatisch -@cindex Standard-Versetzungszeichenstil - -@funindex set-accidental-style -@funindex voice -@funindex default - -Es gibt viele unterschiedliche Regeln, wie Versetzungszeichen -notiert werden. LilyPond hat eine Funktion, mit der -spezifiziert werden kann, welcher Stil benutzt werden -soll. Diese Funktion kann man wie folgt benutzen: - -@example -\new Staff << - #(set-accidental-style 'voice) - @{ @dots{} @} ->> -@end example - -Der Versetzungszeichenstil bezieht sich auf das aktuelle -Notensystem in der Standardeinstellung (eine Ausnahme -bilden die Stile @code{piano} und @code{piano-cautionary}, -die weiter unten erklärt werden). Die Funktion kann aber -auch ein zweites Argument erhalten, mit der spezifiziert -wird, auf welchen Bereich sich der neue Stil erstreckt. -Um etwa den neuen Stil in allen Systemen einer -Stimmbruppe (@code{StaffGroup}) zu benutzen, müsste der Befehl so aussehen: - -@example -#(set-accidental-style 'voice 'StaffGroup) -@end example - -Folgende Versetzungszeichenstile sind unterstützt. -Um jeden Stil zu erklären, wird folgendes Beispiel -benützt: - -@lilypond[verbatim,quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -Die letzten Zeilen des Beispiels könnten auch mit folgendem -Code ersetzt werden, solange der gleiche Versetzungszeichenstil -in beiden Systemen benutzt werden soll: - -@example -\new PianoStaff @{ - << - \context Staff = "up" @{ - %%% change the next line as desired: - #(set-accidental-style 'default 'Score) - \musicA - @} - \context Staff = "down" @{ - \musicB - @} - >> -@} -@end example - - -@c don't use verbatim in this table. -@table @code -@item default (Standard) - -@cindex Standard-Versetzungszeichenstil -@cindex Versetzungszeichenstil, Standard - -Das ist das Standardverhalten. Es entspricht der -Konvention für Notation von Musik des 18. Jahrhunderts: -Versetzungszeichen werden bis zum Taktende erinnert, in -dem sie gesetzt wurden, und nur in ihrer eigenen -Oktave. Im nächsten Beispiel wird also kein -Auslösungszeichen vor dem@tie{}@code{b} (H) im zweiten -Takt oder dem letzen@tie{}@code{c} gesetzt: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -@item voice (Stimme) - -@cindex Versetzungszeichenstil, Stimme -@cindex Stimme-Versetzungszeichenstil -@cindex Voice-Versetzungszeichenstil -@cindex moderner Versetzungszeichenstil -@cindex Versetzungszeichenstil modern -@cindex Versetzungszeichenstil, modern-cautionary -@cindex modern-Warnung-Versetzungszeichenstil - -@funindex voice - -Das normale Verhalten ist es, die Versetzungszeichen -auf der Notensystemebene zu erinnern. In diesem -Stil aber werden Versetzungszeichen individuell für -jede Stimme errechnet. Abgesehen davon gelten die -Regeln des Standardstiles (@code{default}). - -Das hat zur Folge, dass Versetzungszeichen von einer -Stimme in der anderen nicht aufgelöst werden, was oft -ein unerwünschtes Ergebnis ist: im folgenden Beispiel -kann man schwer sagen, ob das zweite @code{a} unalteriert -oder erhöht gespielt werden soll. Die @code{voice}-Option -sollte also nur benutzt werden, wenn die Stimmen -separat von unterschiedlichen Musikern gelesen werden. -Wenn das System nur von einem Musiker benutzt wird -(etwa der Dirigent oder ein Klavierspieler), dann -sind die Stile @code{modern} oder @code{modern-cautionary} -besser. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'voice) - \musicB - } - >> -} -@end lilypond - -@item modern (Modern) - -@cindex Versetzungszeichen, moderne Stile -@cindex Moderner Stil, Versetzungszeichen - -@funindex modern - -Dieser Stil orientiert sich an den üblichen Regeln für -das 20. Jahrhundert. Die gleichen Versetzungszeichen -wie im Standardstil werden gesetzt, allerdings mit zwei -Ausnahmen, die Uneindeutigkeiten verhindern sollen: nach -vorübergehenden Versetzungszeichen werden Auflösungszeichen -auch im folgenden Takt gesetzt (für Noten innerhalb der -selben Oktave) und im gleichen Takt für Noten in -unterschiedlichen Oktaven. Daher kommen also die Auflösungszeichen -vor dem H und dem C im zweiten Takt des oberen Systems: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern) - \musicB - } - >> -} -@end lilypond - -@item modern-cautionary (Modern mit Warnungen) - -@cindex Versetzungszeichen, moderner Stil mit Warnungen -@cindex moderner Versetzungszeichenstil -@cindex moderner Verseztungszeichenstil mit Warnungen - -@funindex modern-cautionary - -Dieser Stil ähnelt @code{modern}, aber die @qq{zusätzlichen} -Versetzungszeichen (die normalerweise nicht gesetzt werden) -werden als Warnungen gesetzt. In der Standardeinstellung werden -sie in Klammern gesetzt, aber sie können auch in kleinerer -Größe gesetzt werden, wenn man die @code{cautionary-style}-Eigenschaft -von @code{AccidentalSuggestion} definiert. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-cautionary) - \musicB - } - >> -} -@end lilypond - -@item modern-voice (Modern für Stimmeen) - -@cindex Versetzungszeichenstil, modern -@cindex Versetzungszeichen pro Stimme -@cindex moderner Versetzungszeichenstil -@cindex moderne Versetzungszeichen -@cindex Stimmen, Versetzungszeichen für - -@funindex modern-voice - -Diese Regel wird für vielstimmige Noten benutzt, die sowohl von -unterschiedlichen Spielern für jede Stimme als auch von einem Spieler -für alle Stimmen benutzt. Versetzungszeichen werden für jede -Stimme gesetzt, aber sie @emph{werden} über die Stimme hinweg -aufgelöst innerhalb des selben Notensystems. Das @code{a} im letzten -Takt ist also aufgelöst, weil die vorigen Auflösung in einer anderen -Stimme stattgefunden hatte, und das @code{d} im unteren System ist -aufgelöst wegen eines Versetzunszeichens in einer anderen Stimme im -vorigen Takt: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice) - \musicB - } - >> -} -@end lilypond - -@cindex Versetzungszeichenstil, modern mit Warnung für Stimmen -@cindex Stimmen, Versetzungszeichenstil mit Warnung für Stimmen -@cindex moderner Versetzungszeichensitl mit Warnungen für Stimmen - -@funindex modern-voice-cautionary - -@item modern-voice-cautionary (modern mit Warnungen für einzelne Stimmen) - -Dieser Stil ist der gleiche wie @code{modern-voice}, nur dass hier -die zusätzlichen Versetzungszeichen (die nicht vom @code{voice}-Stil -gesetzt werden) als Warnungsversetzungszeichen gesetzt werden. -Obwohl alle Versetzungszeichen, die mit @code{default} gesetzt werden, -auch mit diesem Stil gesetzt werden, sind manche Warnungsversetzungszeichen. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice-cautionary) - \musicB - } - >> -} -@end lilypond - -@item piano (Klavier) - -@cindex Versetzungszeichenstil, piano -@cindex Versetzungszeichen für Klavier -@cindex Klavier-Versetzungszeichenstil -@cindex Piano-Versetzungszeichenstil - -@funindex piano - -Dieser Stil orientiert sich an den Regeln im 20. Jahrhundert für die -Notation von Klaviermusik. Er ist sehr ähnlich mit dem modernen -Stil, aber Versetzungszeichen werden auch über Notensysteme hinweg -für die selbe Akkolade (@code{GrandStaff} oder @code{PianoStaff}) aufgelöst. - -Dieser Versetzungszeichenstil wirkt sich standardmäßig auf die gesamte -Akkolade (@code{GrandStaff} oder @code{PianoStaff}) aus. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond - -@item piano-cautionary (Klavier mit Warnungen) - -@funindex piano-cautionary - -@cindex Versetzungszeichen, piano cautionary -@cindex Warnungsversetzungszeichen für Klavier -@cindex Klavier: Warnungsversetzungszeichen -@cindex Versetzungszeichenstil Klavier mit Warnungen - -Dieser Stil verhält sich wie @code{piano}, aber die zusätzlichen -Versetzungszeichen werden als Warnungen ausgegeben: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano-cautionary) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond - - -@item neo-modern - -@funindex neo-modern - -@cindex neo-moderner Versetzungszeichenstil -@cindex Versetzungszeichenstil, neo-modern - -Dieser Stil richtet sich nach den Regeln für moderne Musik: -Versetzungszeichen werden mit im @code{modern}-Stil gesetzt, aber -sie werden nochmal gesetzt, wenn die gleiche Note später im selben -Takt auftritt -- außer die Note wird unmittelbar wiederholt. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern) - \musicB - } - >> -} -@end lilypond - -@item neo-modern-cautionary (neo-modern mit Warnungen) - -@funindex neo-modern-cautionary - -@cindex neo-modern-cautionary-Versetzungszeichenstil -@cindex Versetzungszeichenstil neo-modern mit Warnungen -@cindex Warnungsversetzungszeichen, neo-modern - -Dieser Stil ähnelt @code{neo-modern}, aber die zusätzlichen -Versetzungszeichen werden als Warnungen gesetzt. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern-cautionary) - \musicB - } - >> -} -@end lilypond - - -@item dodecaphonic (Zwölftonmusik) - -@funindex dodecaphonic - -@cindex dodekaphoner Versetzungszeichenstil -@cindex Zwölftonmusik, Versetzungszeichenstil -@cindex Versetzungszeichenstil, Zwölftonmusik - -Dieser Stil orientiert sich an der Notation von sog. Zwölftonmusik, -der Stil wurde Anfang des 20. Jahrhunderts in Gebrauch genommen. -In diesem Stil erhält @emph{jede} Note ein Versetzungszeichen, wozu -auch Auflösungszeichen zählen. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'dodecaphonic) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'dodecaphonic) - \musicB - } - >> -} -@end lilypond - - -@item teaching (didaktisch) - -@funindex teaching - -@cindex teaching-Versetzungszeichenstil -@cindex Versetzungszeichenstil teaching -@cindex didaktischer Versetzungszeichenstil - -Dieser Stil ist für Lernende bestimmt: der Stil orientiert sich -am @code{modern}-Stil, aber die Alterationen, die sich durch die -Tonart ergeben, werden zusätzlich als Warnungsversetzungszeichen -gesetzt. Eine Ausnahme sind direkt wiederholte Noten. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicA - } - \context Staff = "down" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicB - } - >> -} -@end lilypond - - - -@item no-reset (nicht zurücksetzen) - -@funindex no-reset - -@cindex Versetzungszeichenstil, no reset -@cindex Versetzungszeichenstil: nicht zurücksetzen - -Das ist der gleiche Stil wie @code{default}, aber die Versetzungszeichen -dauern für @qq{immer} an, nicht nur im aktuellen Takt: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'no-reset) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'no-reset) - \musicB - } - >> -} -@end lilypond - -@item forget (vergessen) - -@funindex forget - -@cindex forget-Versetzungszeichenstil -@cindex Versetzungszeichenstil forget -@cindex Versetzungszeichenstil Vergessen - -Das ist das Gegenteil von @code{no-reset}: Versetzungszeichen -werden überhaupt nicht erinnert und folgerichtig werden alle -Versetzungszeichen entsprechend der Tonart gesetzt, unabhängig -vom Kontext der Noten. Anders als @code{dodecaphonic} werden nie -Auflösungszeichen gesetzt: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'forget) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'forget) - \musicB - } - >> -} -@end lilypond -@end table - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{dodecaphonic-style-accidentals-for-each-note-including-naturals.ly} - - -@seealso -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{Accidental}, -@rinternals{Accidental_engraver}, -@rinternals{GrandStaff} and -@rinternals{PianoStaff}, -@rinternals{Staff}, -@rinternals{AccidentalSuggestion}, -@rinternals{AccidentalPlacement}, -@rinternals{accidental-suggestion-interface}. - - -@cindex Versetzungszeichen und gleichzeitige Noten -@cindex simultane Noten und Versetzungszeichen -@cindex Akkorde: Versetzungszeichen -@cindex gleichzeitige Noten: Versetzungszeichen -@cindex Versetzungszeichen in Akkorden - -@knownissues - -Gleichzeitig erklingende Noten müssen im sequenziellen Modus eingegeben -werden. Das bedeutet, dass die Versetzungszeichen von Noten in -Akkorden so gesetzt werden, als ob die Noten nacheinander auftreten, -in der Reihenfolge, in der sie im Quelltext erscheinen. Das ist ein -Problem, wenn Versetzungzeichen in einem AKkord voneinander abhängen, -was im Standard-Stil nicht vorkommt. Das Problem kann gelöst werden, -indem man manuell@tie{}@code{!} oder@tie{}@code{?} für die problematischen -Noten schreibt. - - -@node Ambitus -@unnumberedsubsubsec Ambitus - -@cindex Ambitus -@cindex Stimmumfang - -Der Begriff @notation{ambitus} (Pl. ambitus) beschreibt den -Stimmumfang einer Stimme. Er kann auch die Töne bedeuten, die -ein Musikinstrument zu spielen in der Lage ist. Ambitus werden -in Chorpartituren gesetzt, damit die Sänger schnell wissen, ob -sie die Stimme meistern können. - -Ambitus werden zu Beginn des Stückes nahe des ersten Schlüssels -notiert. Der Stimmumfang wird durch zwei Notenköpfe dargestellt, -die die tiefste und höchste Note der Stimme repräsentieren. -Versetzungszeichen werden nur gesetzt, wenn sie nicht durch die -Tonart definiert werden. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Ambitus_engraver" - } -} - -\relative c'' { - aes c e2 - cis,1 -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-ambitus-per-voice.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ambitus-with-multiple-voices.ly} - - -@seealso -Glossar: -@rglos{ambitus}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{Ambitus_engraver}, -@rinternals{Voice}, -@rinternals{Staff}, -@rinternals{Ambitus}, -@rinternals{AmbitusAccidental}, -@rinternals{AmbitusLine}, -@rinternals{AmbitusNoteHead}, -@rinternals{ambitus-interface}. - - -@knownissues - -Es gibt keine Kollisionskontrolle bei mehreren Ambitus in einem System. - - -@node Note heads -@subsection Note heads - -Dieser Abschnitt zeigt, wie man Notenköpfe ändern kann. - -@menu -* Special note heads:: -* Easy notation note heads:: -* Shape note heads:: -* Improvisation:: -@end menu - -@node Special note heads -@unnumberedsubsubsec Special note heads - -@cindex Notenköpfe, besondere -@cindex besondere Notenköpfe -@cindex Notenköpfe, Kreuz -@cindex Notenköpfe, Raute -@cindex Noten, parlato -@cindex Notenköpfe, Flageolett -@cindex Notenköpfe, Gitarre -@cindex Kreuznotenköpfe -@cindex Rautennotenköpfe -@cindex Parlato-Notenköpfe -@cindex Gitarrennotenköpfe -@cindex Flageolett-Notenköpfe -@cindex Stile, Notenköpfe - -@funindex cross - -Notenköpfe können verändert werden: - -@lilypond[verbatim,quote,relative=2] -c4 b a b -\override NoteHead #'style = #'cross -c4 b a b -\revert NoteHead #'style -c4 d e f -@end lilypond - -Es gibt einen definierten Befehl für die Raute, der nur innerhalb -von Akkorden benutzt werden kann: - -@lilypond[verbatim,quote,relative=2] -2 4 -@end lilypond - -@noindent -Alle möglichen Notenkopf-Stile finden sich in -@ref{Note head styles}. - -@seealso -Schnipsel: -@rlsr{Pitches}. - -Notationsreferenz: -@ref{Note head styles}, -@ref{Chorded notes}. - -Referenz der Interna: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{Ledger_line_engraver}, -@rinternals{NoteHead}, -@rinternals{LedgerLineSpanner}, -@rinternals{note-head-interface}, -@rinternals{ledger-line-spanner-interface}. - - -@node Easy notation note heads -@unnumberedsubsubsec Easy notation note heads - -@cindex Notenköpfe, Übung -@cindex Notenköpfe zum Lernen -@cindex Übungszwecke, Notenköpfe -@cindex Noteknöpfe, einfache Notation -@cindex pädagogische Notenköpfe -@cindex Hal Leonard -@cindex Anfänger, Notenlernen -@cindex Notenköpfe für Anfänger - -@funindex \easyHeadsOn -@funindex easyHeadsOn -@funindex \easyHeadsOff -@funindex easyHeadsOff - -Die @qq{einfachen Notenköpfe} haben die Bezeichnung der Note -im Kopf gedruckt. Das wird eingesetzt, um die Notation beizubringen. -Damit die Buchstaben noch lesbar sind, müssen sie sehr groß -gesetzt werden. Wie man eine größere Schriftart einstellt, findet -sich in @ref{Setting the staff size}. - -@lilypond[verbatim,quote] -#(set-global-staff-size 26) -\relative c' { - \easyHeadsOn - c2 e4 f - g1 - \easyHeadsOff - c,1 -} -@end lilypond - -@funindex \easyHeadsOn -@funindex \easyHeadsOff - -@predefined -@code{\easyHeadsOn}, -@code{\easyHeadsOff}. -@endpredefined - -@seealso -Notationsreferenz: -@ref{Setting the staff size}. - -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Shape note heads -@unnumberedsubsubsec Shape note heads - -@cindex Notenköpfe, Formen -@cindex Notation, Aiken -@cindex Notenköpfe, sacred harp -@cindex Form-Notenköpfe -@cindex Aiken-Notenköpfe -@cindex sacred harp-Notenköpfe - -@funindex \key -@funindex \aikenHeads -@funindex \sacredHarpHeads -@funindex key -@funindex aikenHeads -@funindex sacredHarpHeads - -In dieser Notation haben die Notenköpfe eine Form, die ihrer -harmonischen Funktion innherhalb der Tonleiter entspricht. Die -Notation war sehr beliebt in amerikanischen Liederbüchern des -19. Jahrhunderts. Auf diese Weise können die Formen benutzt -werden: - -@lilypond[verbatim,quote,relative=2] -\aikenHeads -c, d e f g a b c -\sacredHarpHeads -c, d e f g a b c -@end lilypond - -Die unterschiedlichen Formen richten sich nach der Stufe in der -Skala, wobei der Grundton der Skala aus dem @code{\key}-Befehl -entnommen wird. - -@predefined -@code{\aikenHeads}, -@code{\sacredHarpHeads}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} - -@noindent -Alle Notenkopfstile finden sich in @ref{Note head styles}. - -@seealso -Schnipsel: -@rlsr{Pitches}. - -Notationsreferenz: -@ref{Note head styles}. - -Referenz der Interna: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Improvisation -@unnumberedsubsubsec Improvisation - -@cindex Improvisation -@cindex schräge Notenköpfe -@cindex Notenköpfe, Improvisation -@cindex Strichnotenköpfe -@cindex Striche: Notenköpfe - -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -Improvisation wird manchmal angezeigt, indem schräge Notenköpfe -gesetzt werden, wenn der Spieler eine beliebige Tonhöhe wählen kann -aber den vorgegebenen Rhythmus spielen soll. Sie können wie folgt -benutzt werden: - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { - \consists "Pitch_squash_engraver" -} { - e8 e g a a16( bes) a8 g - \improvisationOn - e8 ~ - e2 ~ e8 f4 f8 ~ - f2 - \improvisationOff - a16( bes) a8 g e -} -@end lilypond - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - -@seealso -Schnipsel: -@rlsr{Pitches}. - -Referenz der Interna: -@rinternals{Pitch_squash_engraver}, -@rinternals{Voice}, -@rinternals{RhythmicStaff}. - - diff --git a/Documentation/de/user/preface.itely b/Documentation/de/user/preface.itely deleted file mode 100644 index ea608c796a..0000000000 --- a/Documentation/de/user/preface.itely +++ /dev/null @@ -1,65 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Preface -@unnumbered Preface - -Es muss wohl während einer Probe des EJE (Eindhovens Jugendorchester) - etwa 1995 gewesen sein, als Jan, einer der schrägen Bratschisten, -Han-Wen, einem der verstimmten Hornisten, von seinem großartigen -neuen Projekt erzählte, an dem er gerade arbeitete. Es sollte ein -automatisiertes System für den Notensatz werden (um genauer zu sein, -es war MPP, ein Präprozessor für MusiXTeX). Zufällig wollte Han-Wen -gerade einige Stimmen einer Partitur ausdrucken, -und so schaute er sich das Programm an und war schnell -begeistert. Man entschied sich, dass MPP in eine Sackgasse führte, -und nach vielem Philosophieren und hitzigem E-Mail-Austausch begann -Han-Wen mit LilyPond 1996. Dieses Mal wurde Jan mitgerissen von -Han-Wens neuem Projekt. - -Die Entwicklung eines Computerprogramms erinnert in vielem an das -Erlernen eines Musikinstrumentes. Am Anfang macht es Spaß herauszufinden, -wie alles funktioniert und alles, was man noch nicht kann, stellt -eine Herausforderung dar. Nach der ersten Begeisterung muss man -jedoch viel üben. Tonleitern und Etüden können furchtbar langweilig -sein, und wenn keine Ermunterung von anderen -- Lehrern, Dirigenten -oder dem Publikum -- kommt, ist es oft eine große Versuchung, einfach -aufzuhören. Aber man macht weiter, und langsam wird das Instrument zu -einem Teil des eigenen Lebens. An manchen Tagen geht alles wie von -selbst und es macht Spaß, an anderen Tagen ist es nur Arbeit, aber -man macht trotzdem weiter, jeden Tag. - -Die Arbeit an LilyPond kann genauso wie das Spiel eines Instruments -sehr langweilig sein, und manchmal kommt es vor lauter Fehlern so vor, - als stapfe man durch einen Morast. Trotzdem ist die Arbeit schon -Teil unseres Lebens geworden und wir machen einfach weiter. Die -wahrscheinlich wichtigste Motivation ist wohl, dass unser Programm -wirklich nützlich ist. Wenn wir im Internet surfen, finden wir -viele Leute, die LilyPond benutzen und damit außerordentlich -beeindruckende Partituren erstellen. Das zu sehen fühlt sich -auf angenehme Weise etwas unwirklich an. - -Unsere Stimmung heben aber nicht nur die Benutzer unseres Programmes, -sondern auch die vielen Menschen, die uns helfen, indem sie Vorschläge -einbringen, auf verschiedene Art an LilyPond mitwirken oder -Fehlerberichte schicken. Ihnen allen möchten wir hier Dank sagen! - -Musik spielen und Musik zu Papier zu bringen ist mehr als eine -nette Analogie. Zusammen zu programmieren macht viel Spaß und Menschen -helfen zu können ist sehr zufriedenstellend, aber letzten Endes -geht es uns darum, durch dieses Programm unsere Liebe zur Musik -auszudrücken. Wir hoffen, Sie können viele schöne Partituren damit -setzen! - -Han-Wen und Jan - -Utrecht/Eindhoven, Niederlande, Juli 2002. - diff --git a/Documentation/de/user/programming-interface.itely b/Documentation/de/user/programming-interface.itely deleted file mode 100644 index 4611b98ecc..0000000000 --- a/Documentation/de/user/programming-interface.itely +++ /dev/null @@ -1,226 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Interfaces for programmers -@chapter Interfaces for programmers - -@untranslated - - -@menu -* Music functions:: -* Programmer interfaces:: -* Building complicated functions:: -* Markup programmer interface:: -* Contexts for programmers:: -* Scheme procedures as properties:: -* Using Scheme code instead of \tweak:: -* Difficult tweaks:: -@end menu - -@node Music functions -@section Music functions - -@untranslated - - -@menu -* Overview of music functions:: -* Simple substitution functions:: -* Paired substitution functions:: -* Mathematics in functions:: -* Void functions:: -* Functions without arguments:: -* Overview of available music functions:: -@end menu - -@node Overview of music functions -@subsection Overview of music functions - -@untranslated - - -@node Simple substitution functions -@subsection Simple substitution functions - -@untranslated - - -@node Paired substitution functions -@subsection Paired substitution functions - -@untranslated - - -@node Mathematics in functions -@subsection Mathematics in functions - -@untranslated - - -@node Void functions -@subsection Void functions - -@untranslated - - -@node Functions without arguments -@subsection Functions without arguments - -@untranslated - - -@node Overview of available music functions -@subsection Overview of available music functions - -@untranslated - - -@include identifiers.tely -@node Programmer interfaces -@section Programmer interfaces - -@untranslated - - -@menu -* Input variables and Scheme:: -* Internal music representation:: -@end menu - -@node Input variables and Scheme -@subsection Input variables and Scheme - -@untranslated - - -@node Internal music representation -@subsection Internal music representation - -@untranslated - - -@node Building complicated functions -@section Building complicated functions - -@untranslated - - -@menu -* Displaying music expressions:: -* Music properties:: -* Doubling a note with slurs (example):: -* Adding articulation to notes (example):: -@end menu - -@node Displaying music expressions -@subsection Displaying music expressions - -@untranslated - - -@node Music properties -@subsection Music properties - -@untranslated - - -@node Doubling a note with slurs (example) -@subsection Doubling a note with slurs (example) - -@untranslated - - -@node Adding articulation to notes (example) -@subsection Adding articulation to notes (example) - -@untranslated - - -@node Markup programmer interface -@section Markup programmer interface - -@untranslated - - -@menu -* Markup construction in Scheme:: -* How markups work internally:: -* New markup command definition:: -* New markup list command definition:: -@end menu - -@node Markup construction in Scheme -@subsection Markup construction in Scheme - -@untranslated - - -@node How markups work internally -@subsection How markups work internally - -@untranslated - - -@node New markup command definition -@subsection New markup command definition - -@untranslated - - -@node New markup list command definition -@subsection New markup list command definition - -@untranslated - - -@node Contexts for programmers -@section Contexts for programmers - -@untranslated - - -@menu -* Context evaluation:: -* Running a function on all layout objects:: -@end menu - -@node Context evaluation -@subsection Context evaluation - -@untranslated - - -@node Running a function on all layout objects -@subsection Running a function on all layout objects - -@untranslated - - -@node Scheme procedures as properties -@section Scheme procedures as properties - -@untranslated - - -@node Using Scheme code instead of \tweak -@section Using Scheme code instead of @code{\tweak} - -@untranslated - - -@node Difficult tweaks -@section Difficult tweaks - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/de/user/repeats.itely b/Documentation/de/user/repeats.itely deleted file mode 100644 index d8626084ea..0000000000 --- a/Documentation/de/user/repeats.itely +++ /dev/null @@ -1,542 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Repeats -@section Repeats - -@lilypondfile[quote]{repeats-headword.ly} - -Wiederholung ist ein zentrales Konzept in der Musik, und es gibt eine -ganze Vielzahl von Notationsmöglichkeiten für Wiederholungen. -LilyPond unterstützt folgende Arten von Wiederholungen: - -@table @code -@item volta (Wiederholungsklammer) -Die wiederholte Musik wird nicht geschreiben, sondern zwischen -zwei Wiederholungstaktstrichen eingeschlossen. Wenn die Wiederholung -am Anfang eines Stückes beginnt, wird nur am Ende der Wiederholung -eine Wiederholungstaktlinie gesetzt. Alternative Schlüsse (Volta) -werden von links nach rechts mit Klammern gesetzt. Das ist die -Standardnotationspraxis für Wiederholungen mit alternativen Schlüssen. - -@item unfold (aufklappen) -Die wiederholte Musik wird ausgeschrieben, so oft, wie es durch -@var{Wiederholungszähler} definiert wird. Das erspart Arbeit, -wenn repititive Musik notiert wird. - -@item percent (Prozent-Wiederholung) -Das sind Noten- oder Taktwiederholungen, sie sehen aus wie ein -Schrägstrich bzw. wie ein Prozentzeichen. - -@item tremolo -Das wird benutzt, um Tremolo-Wiederholungen am Notenhals zu notieren. - -@end table - - -@menu -* Long repeats:: -* Short repeats:: -@end menu - -@node Long repeats -@subsection Long repeats - -@menu -* Normal repeats:: -* Manual repeat marks:: -* Written-out repeats:: -@end menu - - -@cindex Wiederholungen -@cindex Volta -@cindex Prima volta -@cindex Seconda volta -@cindex normale Wiederholung -@cindex Wiederholung mit alternativem Schluss -@cindex alternativer Schluss -@cindex Schluss, alternativer in Wiederholung -@cindex Klammer, erste (Wiederholung) -@cindex erste Klammer -@cindex zweite Klammer -@funindex \repeat -@funindex \alternative -@funindex \partial - -@node Normal repeats -@unnumberedsubsubsec Normal repeats - -Die Syntax für normale Wiederholungen ist - -@example -\repeat @var{Typ} @var{Wiederholungszähler} @var{musikAusdr} -@end example - -wobei @var{musikAusdr} ein musikalischer Ausdruck ist. Alternative -Schlüsse können mit @code{\alternative} gesetzt werden. Damit die -alternativen Schlüsse von den wiederholten Noten abgegrenzt werden, -müssen sie in geschweiften Klammern zusammengefasst werden. Wenn -es mehr Wiederholungen gibt, als Alternativen angegeben sind, erhalten -die ersten Wiederholungen den ersten Schluss. - -Normale Wiederholungen ohne alternative Schlüsse: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 2 { c4 d e f } -c2 d -\repeat volta 2 { d4 e f g } -@end lilypond - -Normale Wiederholungen mit alternativen Schlüssen: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 4 { c4 d e f } -\alternative { - { d2 e } - { f2 g } -} -c1 -@end lilypond - - -@cindex Wiederholung mit Auftakt -@cindex Auftakt in Wiederholung -@funindex \partial - -Normale Wiederholungen mit Auftakt können auf zwei Arten notiert werden: - -@lilypond[verbatim,quote,relative=2] -\partial 4 -e | -\repeat volta 4 { c2 d | e2 f | } -\alternative { - { g4 g g e } - { a4 a a a | b2. } -} -@end lilypond - -@noindent -oder - -@lilypond[verbatim,quote,relative=2] -\partial 4 -\repeat volta 4 { e4 | c2 d | e2 f | } -\alternative { - { \partial 4*3 g4 g g } - { a4 a a a | b2. } -} -@end lilypond - -@cindex Wiederholungen mit Überbindung -@cindex Alternative Schlüsse mit Bindebogen -@cindex Überbindung in Wiederholung -@cindex Bindebogen in Wiederholung -@cindex Bindebogen in alternativem Schluss -@funindex \repeatTie - -Bindebögen können auch an eine zweite Klammer angefügt werden: - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat volta 2 { c4 d e f ~ } -\alternative { - { f2 d } - { f2\repeatTie f, } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{shortening-volta-brackets.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-volta-brackets-to-additional-staves.ly} - - -@seealso -Glossar: -@rglos{repeat}, @rglos{volta}. - -Notationsreferenz: @ref{Bar lines}, @ref{Modifying context plug-ins}. - -Schnipsel: @rlsr{Repeats}. - -Referenz der Interna: @rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, @rinternals{VoltaRepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - -@knownissues - -@cindex verschachtelte Wiederholung -@cindex Wiederholung, verschachtelt -@cindex Wiederholung und Zählzeit -@cindex Zählzeit und Wiederholung -@cindex Taktposition und Wiederholung -@cindex Wiederholung und Bindebogen -@cindex Bindebogen und Wiederholung -@cindex Wiederholung, mehrdeutig - -Eine ineinandergeschachtelte Wiederholung wie - -@example -\repeat @dots{} -\repeat @dots{} -\alternative -@end example - -@noindent -ist mehrdeutig, weil nicht klar ist, zu welchem @code{\repeat}-Abschnitt -die @code{\alternative}-Endung gehört. Diese Mehrdeutigkeit wird von -LilyPond aufgelöst, indem die alternative Endung immer zu der innersten -Wiederholung gehört. Um Klarheit zu schaffen, bietet es sich an, in solchen -Situationen Klammern zu benutzen. - -Die Taktposition wird bei einer alternativen Endung nicht mitgeteilt, so -dass nach einer Wiederholung diese Information manuell angegeben werden -muss, -entweder durch setzen von @code{Score.measurePosition} oder indem der -Befehl @code{\partial} benutzt wird. Gleichermaßen werden auch -Bindebögen nicht wiederholt. - - -@node Manual repeat marks -@unnumberedsubsubsec Manual repeat marks - -@cindex manuelle Wiederholungszeichen -@cindex Wiederholung, manuell -@cindex Beginn von Wiederholung -@cindex Wiederholung, Beginn -@cindex Wiederholung, Ende -@cindex Ende von Wiederholung -@cindex Anzahl der Wiederholung, ändern -@cindex Wiederholungstaktlinie -@cindex Taktlinie, Wiederholung -@cindex Voltaklammer, ändern -@cindex Wiederholung, Voltaklammer -@cindex Wiederholung, alternative Schlüsse -@cindex Klammer, Wiederholung -@funindex repeatCommands -@funindex start-repeat - -@warning{Diese Methoden werden nur verwendet, um ungewöhnliche -Wiederholungskonstruktionen darzustellen und können sich unerwünscht -verhalten. In den meisten Fällen sollten Wiederholungen mit dem -Befehl @code{\\repeat} erstellt werden oder indem die entsprechenden -Taktstriche eingegeben werden. Mehr Information in @ref{Bar lines}.} - -Die Eigenschaft @code{repeatCommands} kann verwendet werden, um das -Aussehen der Wiederholungen zu beeinflussen. Ihr Argument ist eine -Scheme-Liste an Wiederholungsbefehlen. - -@table @code -@item start-repeat -Setzt eine @code{|:} Taktlinie. - -@lilypond[verbatim,quote,relative=2] -c1 -\set Score.repeatCommands = #'(start-repeat) -d4 e f g -c1 -@end lilypond - -Der Notensatzpraxis folgend werden Wiederholungstaktstrichen nicht zu -Beginn eines Stückes gesetzt. - -@item end-repeat -Setzt eine @code{:|} Taktlinie. - -@lilypond[verbatim,quote,relative=2] -c1 -d4 e f g -\set Score.repeatCommands = #'(end-repeat) -c1 -@end lilypond - -@item (volta @var{Zahl}) ... (volta #f) -Setzt eine Volta-Klammer mit der Beschriftung @var{Nummer}. Die -Volta-Klammer muss explizit beendet werden, sonst wird sie nicht -ausgegeben. - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2")) -g4 a g a -\set Score.repeatCommands = #'((volta #f)) -c1 -@end lilypond - -@end table - -Mehrfache Wiederholungszeichen können an der selben Stelle vorkommen: - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2, 5") end-repeat) -g4 a g a -c1 -\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) -b1 -\set Score.repeatCommands = #'((volta #f)) -@end lilypond - -@cindex Volta-Klammer mit Text -@cindex Text in Voltaklammer -@cindex Wiederholungsklammer mit Text -@cindex Klammer, Wiederholung mit Text - -Text kann auch in der Volta-Klammer gesetzt werden. Der Text kann -aus Zahlen oder einer Zahl oder einer Textbeschriftung bestehen, -siehe @ref{Formatting text}. Die einfachste Art Text zu benutzen -ist, die Beschriftung zuerst zu definieren und dann die Beschriftung -in einer Scheme-Liste einzufügen. - -@lilypond[verbatim,quote] -voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } -\relative c'' { - c1 - \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) - c4 b d e - \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) - f1 - \set Score.repeatCommands = #'((volta #f)) -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} - - -@seealso -Notationsreferenz: -@ref{Bar lines}, -@ref{Formatting text}. - -Schnipsel: -@rlsr{Repeats}. - -Referenz der Interna: -@rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, -@rinternals{VoltaRepeatedMusic}. - - -@node Written-out repeats -@unnumberedsubsubsec Written-out repeats - -@cindex ausgeschriebene Wiederholungen -@cindex wiederholte Musik -@cindex Wiederholungen, ausgeschrieben -@cindex repitetive Musik -@cindex Wiederholung, aufklappen -@cindex Noten wiederholt schreiben -@cindex Aufklappen von wiederholten Noten -@cindex alternative Schlüsse in ausgeschriebenen Wiederholungen -@funindex unfold - -Mit dem @code{unfold}-Befehl können Wiederholungen eingesetzt werden, -um repitetive Musik zu notieren. Die Syntax ist - -@example -\repeat unfold @var{Wiederholgunszähler} @var{musikAusdr} -@end example - -wobei @var{musikAusdr} ein musikalischer Ausdruck ist und -@var{Wiederholungszähler} die Anzahl bezeichnet, mit der -@var{musikAusdr} wiederholt wird. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { c4 d e f } -c1 -@end lilypond - -Ausgeschriebene Wiederholungen können auch alternative Schlüsse -haben. Wenn mehr Wiederholungen als alternative Schlüsse -notiert werden, wird der erste Schluss für die ersten -Wiederholungen benutzt. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { g4 f e d } - \alternative { - { cis2 g' } - { cis,2 b } - } -c1 -@end lilypond - -@seealso -Schnipsel: -@rlsr{Repeats}. - -Referenz der Interna: -@rinternals{RepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - - - -@node Short repeats -@subsection Short repeats - -Dieser Abschnitt zeigt, wie man kurze Wiederholungen notiert. -Kurze Wiederholungen haben zwei grundlegende Formen: Wiederholungen -von einer Note bis zu zwei Takten, die mit Schrägstrichen oder -Prozentzeichen dargestellt werden, und Tremolos. - -@menu -* Percent repeats:: -* Tremolo repeats:: -@end menu - -@node Percent repeats -@unnumberedsubsubsec Percent repeats - -@cindex Prozent-Wiederholungen -@cindex Taktweise Wiederholungen -@cindex Wiederholung, kurz -@cindex Wiederholung, taktweise -@cindex Wiederholung, Prozent -@funindex \repeat percent -@funindex percent - -Kurze wiederholte Musikphrasen werden unterstützt. Dabei werden -die Noten einmal gedruckt und dann durch -ein spezielles Zeichen ersetzt. Phrasen, -die kürzer als ein Takt sind, durch einen Schrägstrich dargestellt, -Phrasen von ein oder zwei Takten Dauer -werden durch ein dem Prozentzeichen ähnlichen Zeichen markiert. -Die Syntax lautet - -@example -@code{\repeat percent @var{Wiederholungszahl} @var{musikAusdr}} -@end example - -wobei @var{musikAusdr} ein musikalischer Ausdruck ist. - -@lilypond[verbatim,quote,relative=2] -\repeat percent 4 { c4 } -\repeat percent 2 { b4 a g f } -\repeat percent 2 { c2 es | f4 fis g c | } -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-counter.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-count-visibility.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{isolated-percent-repeats.ly} - -@seealso -Glossar: -@rglos{percent repeat}, @rglos{simile}. - -Schnipsel: @rlsr{Repeats}. - -Referenz der Interna: @rinternals{RepeatSlash}, -@rinternals{PercentRepeat}, @rinternals{DoublePercentRepeat}, -@rinternals{DoublePercentRepeatCounter}, -@rinternals{PercentRepeatCounter}, @rinternals{PercentRepeatedMusic}. - -@knownissues - -Nur drei Arten von Prozent-Wiederholungen sind unterstützt: ein -einfacher Schrägstrich, der einen Taktschlag darstellt (unabhängig -von der wirklichen Dauer der wiederholten Noten), ein einfacher -Schrägstrich mit Punkten, der einen ganzen wiederholten Takt -darstellt und zwei Schrägstriche mit Punkten über eine Taktlinie -gedruckt, der zwei ganze Takte darstellt. Weder können mehrere -Schrägstriche für Taktwiederholungen von Sechzehntelnoten dargestellt -werden, noch zwei Striche mit Punkten für nur einen Takt, der aus -unterschiedlichen Notenwerten besteht. - - - -@node Tremolo repeats -@unnumberedsubsubsec Tremolo repeats - -@cindex Tremolobalken -@cindex Tremolo -@cindex Wiederholung, Tremolo -@funindex \repeat tremolo -@funindex tremolo - -Tremolos können in zwei Arten notiert werden: als Wechsel zwischen -zwei Noten oder Akkorden oder als schnelle Wiederholung einer einzigen -Note. Tremolos, die als Wechsel realisiert werden, werden dargestellt, -indem Balken zwischen die Noten gesetzt werden, Tremolos, die -eine schnelle Wiederholung darstellen, haben Balken oder Schrägstriche -am Hals einer einzigen Note. - -Um Tremolobalken zwischen Noten zu setzen, kann der @code{\repeat}-Befehl -mit dem Tremolo-Stil benutzt werden: - -@lilypond[quote,verbatim,relative=2] -\repeat tremolo 8 { c16 d } -\repeat tremolo 6 { c16 d } -\repeat tremolo 2 { c16 d } -@end lilypond - -Die @code{\repeat tremolo}-Syntax braucht genau zwei Noten innerhalb -der geschweiften Klammern, und die Anzahl der Wiederholungen muss -einem Wert entsprechen, der mit einfachen oder punktierten Noten -ausgedrückt werden kann. @code{\repeat tremolo 7} funktioniert und -setzt Tremolo für die Dauer einer Doppeltpunktierten, aber -@code{\repeat tremolo 9} funktioniert nicht. - -Die Dauer des Tremolos entspricht der Dauer der Wertes in Klammern, -multipliziert mit der Zahl der Wiederholungen: @code{\repeat tremolo -8 @{ c16 d16 @}} ergibt ein Tremolo für eine Ganze, notiert als zwei -Ganze, die zwei Tremolobalken zwischen sich haben. - -Es gibt zwei Möglichkeiten, ein Tremolozeichen zu einer einzelnen -Noten hinzuzufügen. Die @code{\repeat tremolo}-Syntax kann hier auch -benutzt werden; in diesem Fall wird die Note allerdings nicht -eingeklammert: - -@lilypond[quote,verbatim,ragged-right] -\repeat tremolo 4 c'16 -@end lilypond - -@cindex Tremolozeichen -@funindex tremoloFlags -@funindex : - -Die gleiche Darstellung wird erreicht, indem nach der Note -@qq{@code{:}[@var{Zahl}]} geschrieben wird. Die Zahl zeigt -die Dauer der Unterteilung an, und sie muss mindestens den -Wert 8 haben. Ein Wert von 8 ergibt einen Balken durch den -Notenhals. Wenn die Zahl ausgelassen wird, wird der letzte -benutzte Wert eingesetzt (gespeichert in @code{tremoloFlags}): - -@lilypond[quote,verbatim,relative=2] -c2:8 c:32 -c: c: -@end lilypond - -@seealso -Schnipsel: -@rlsr{Repeats}. - -@cindex Tremolo über Systeme -@cindex Systeme, Tremolo zwischen -@cindex Zwischensystem-Tremolo - -@knownissues - -Tremolo über Notensysteme hinweg funktioniert nicht gut. diff --git a/Documentation/de/user/rhythms.itely b/Documentation/de/user/rhythms.itely deleted file mode 100644 index 80aa9662ba..0000000000 --- a/Documentation/de/user/rhythms.itely +++ /dev/null @@ -1,2943 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Rhythms -@section Rhythms - -@lilypondfile[quote]{rhythms-headword.ly} - -Dieser Abschnitt erklärt die Eingabe von Rhythmen, Pausen, -Dauern, Bebalkung und Takten. - -@menu -* Writing rhythms:: -* Writing rests:: -* Displaying rhythms:: -* Beams:: -* Bars:: -* Special rhythmic concerns:: -@end menu - - -@node Writing rhythms -@subsection Writing rhythms - -@menu -* Durations:: -* Tuplets:: -* Scaling durations:: -* Ties:: -@end menu - -@node Durations -@unnumberedsubsubsec Durations - -@cindex Dauer -@cindex Notenlänge - - -@funindex \longa -@funindex \breve -@funindex \maxima -@funindex longa -@funindex breve -@funindex maxima - -Notenlängen (Dauern) werden durch -Zahlen und Punkte notiert: Dauern werden als reziproke Werte geschrieben. -Zum Beispiel wird eine Viertelnote mit @code{4} notiert (weil sie eine -1/4-Note ist), eine halbe Note mit @code{2} (weil sie eine 1/2-Note ist). -Noten, die länger als eine Ganze sind, müssen mit @code{\longa} -(für die Longa, also vier Ganze) und -@code{\breve} (für die Brevis, auch Doppelganze genannt) notiert werden. -Notendauern bis hin zu 128steln sind unterstützt. Kürzere Notenwerte können -auch notiert werden, können allerdings nur als Noten mit Balken auftreten. - -@c Two 64th notes are needed to obtain beams -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -\time 8/1 -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c64 -@end lilypond - -@noindent -Hier die selben Notendauern ohne die Balken. - -@c not strictly "writing rhythms"; more of a "displaying" thing, -@c but it's ok here. -gp -@lilypond[quote,verbatim,relative=2] -\time 8/1 -\autoBeamOff -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c64 -@end lilypond - -Eine Note mit der vierfacheen Dauer einer Brevis kann mit dem -Befehl @code{\maxima} eingegeben werden, aber ihre Darstellung -ist nur für die Alte Musiknotation unterstützt. Zu Einzelheiten -siehe @ref{Ancient notation}. - -Wenn die Dauer hinter einer Notenbezeichnung nicht angegeben ist, -wird die Dauer der vorhergehenden Note eingesetzt. Der Standardwert -für die erste Note ist eine Viertel. - -@lilypond[quote,verbatim,relative=2] -a a a2 a a4 a a1 a -@end lilypond - -@funindex . - -@cindex Punktierung -@cindex Noten, punktiert -@cindex Doppelpunktierung -@cindex Noten, doppelpunktiert - -Um punktierte Notendauern zu erhalten, muss einfach nur ein Punkt -(@code{.}) hinter die Zahl der Dauer gesetzt werden. Zwei Punkte -ergeben eine doppelte Punktierung, usw. - -@lilypond[quote,verbatim,relative=2] -a4 b c4. b8 a4. b4.. c8. -@end lilypond - -Manche Notenlängen können nicht mit binären Dauern und Punkten -dargestellt werden, sie können nur erreicht werden, indem man -Noten überbindet. Für Einzelheiten siehe @ref{Ties}. - -Wie den Silben von Gesangtext eigene Dauern zu gewiesen werden -können und wie man sie an den Noten ausrichtet ist erklärt in -@ref{Vocal music}. - -Optional können Noten streng proportional nach ihrer exakten -Dauer gesetzt werden. Zu Einzelheiten hierzu und weiteren -Einstellungen für proportionale Notation siehe -@ref{Proportional notation}. - -@funindex \dotsUp -@funindex \dotsDown -@funindex \dotsNeutral -@funindex dotsUp -@funindex dotsDown -@funindex dotsNeutral - -Punkte werden normalerweise nach oben verschoben, damit sie die Notenlinien -nicht berühren. Fertige Befehle können eingesetzt werden, um -eine bestimmte Richtung manuell zu erzwingen, zu Einzelheiten -siehe @ref{Direction and placement}. - -@predefined -@code{\autoBeamOff}, -@code{\dotsUp}, -@code{\dotsDown}, -@code{\dotsNeutral}. -@endpredefined - -@seealso -Glossar: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}, -@rglos{note value}, -@rglos{Duration names notes and rests}. - -Notationsreferenz: -@ref{Automatic beams}, -@ref{Ties}, -@ref{Writing rhythms}, -@ref{Writing rests}, -@ref{Vocal music}, -@ref{Ancient notation}, -@ref{Proportional notation}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{Dots}, -@rinternals{DotColumn}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -Es gibt keine grundlegende Grenze für die Dauer von Pausen -(sowohl kürzer als auch länger), aber die Anzahl an Symbolen -ist begrenzt: Einzelne Pausen können von 128stel bis zur -Maxima (8 Ganze) gesetzt werden. - - - -@node Tuplets -@unnumberedsubsubsec Tuplets - -@cindex N-tolen -@cindex Triolen -@cindex Rhythmische Aufteilungen - -@funindex times -@funindex \times - -Triolen und andere rhythmische Aufteilungen werden aus einem musikalischen -Ausdruck erstellt, indem dessen Tondauern mit einem Bruch multipliziert werden. - -@example -\times @var{Bruch} @var{musikalischer Ausdruck} -@end example - -@noindent -Die Dauer eines @var{musikalischen Ausdrucks} wird mit dem Bruch multipliziert. -Der Nenner des Bruchs wird über (oder unter) den Noten ausgegeben, -optional mit einer eckigen Klammer, die die Noten einfasst. -Die üblichste Aufteilung ist die -Triole, in welcher drei Noten die Länge von zwei haben, der Wert jeder -einzelnen Note ist also 2/3 der notierten Länge. - -@lilypond[quote,verbatim,relative=2] -a2 \times 2/3 { b4 b b } -c4 c \times 2/3 { b4 a g } -@end lilypond - -@funindex \tupletUp -@funindex \tupletDown -@funindex \tupletNeutral -@funindex tupletUp -@funindex tupletDown -@funindex tupletNeutral - -Die automatische Platzierung der Triolenklammer über oder unter -den Noten kann manuell geändert werden mit definierten Befehlen, -siehe @ref{Direction and placement}. - - -N-tolen können ineinander geschachtelt werden: - -@lilypond[quote,verbatim,relative=2] -\autoBeamOff -c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 | -@end lilypond - -Wenn man die Eigenschaften von N-tolen verändern will, die zum -selben musikalischen Zeitpunkt beginnen, muss @code{\tweak} -eingesetzt werden. - -Um die Dauern von Noten zu ändern, ohne die N-tolen-Klammern -zu setzen, siehe @ref{Scaling durations}. - -@predefined -@code{\tupletUp}, -@code{\tupletDown}, -@code{\tupletNeutral}. -@endpredefined - -@snippets - -@cindex N-tole, Formatierung -@cindex Triole, Formatierung -@cindex Formatierung von Triolen - -@funindex tupletNumberFormatFunction -@funindex tupletSpannerDuration - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{entering-several-tuplets-using-only-one--times-command.ly} - -@funindex TupletNumber - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-tuplet-number.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{permitting-line-breaks-within-beamed-tuplets.ly} - -@seealso -Glossar: -@rglos{triplet}, -@rglos{tuplet}, -@rglos{polymetric}. - -Handbuch zum Lernen: -@rlearning{Tweaking methods}. - -Notationrreferenz: -@ref{Time administration}, -@ref{Scaling durations}, -@ref{The tweak command}, -@ref{Polymetric notation}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{TupletBracket}, -@rinternals{TupletNumber}, -@rinternals{TimeScaledMusic}. - -@knownissues -@cindex Verzierung innerhalb von rhythmischer Kombination -@cindex Stichnoten innerhalb von rhythmischer Kombination -@cindex Verzierung innerhalb von Triole - -Wenn die erste Noten eines Systems ein Vorschlag (eine Verzierung) -ist, die von einer N-tole gefolgt ist, muss der Vorschlag -vor den @code{\times}-Befehl gesetzt werden um Fehler zu -vermeiden. Überall sonst können Vorschläge innerhalb von -N-tolen gesetzt werden. - - - -@node Scaling durations -@unnumberedsubsubsec Scaling durations - -@cindex Dauern skalieren -@cindex Skalieren von Dauern - -Die Dauer von einzelnen Noten, Pausen oder Akkorden kann mit einem Bruch multipliziert werden, -indem hinter die Notendauer @qq{*@var{N/M}} (oder @qq{*@var{N}} wenn @var{M} 1 ist) -geschrieben wird. Die Erscheinung der Noten oder Pausen wird -dadurch nicht beeinflusst, die neue Dauer wird aber dazu -benutzt, ihre Position im Takt zu errechnen und die neue -Dauer in der MIDI-Ausgabe einzusetzen. Die Faktoren, mit -denen multipliziert wird, können auch kombiniert werden, etwa -@qq{*L*M*/N}. - -Im nächsten Beispiel nehmen die drei ersten Noten genau zwei Schläge ein, -aber es wird keine Triolenklammer über ihnen ausgegeben. - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Alter durations to triplets -a4*2/3 gis4*2/3 a4*2/3 -% Normal durations -a4 a4 -% Double the duration of chord -4*2 -% Duration of quarter, appears like sixteenth -b16*4 c4 -@end lilypond - -Die Dauer von unsichtbaren Noten kann auch mit einem Faktor -beeinflusst werden. Das ist sinnvoll, wenn man viele Takte -überspringen muss, etwa @code{s1*23}. - -@cindex Musik komprimieren -@cindex Komprimieren von Noten -@cindex Noten komprimieren - -@funindex scaleDurations -@funindex \scaleDurations - -Längere Notenabschnitte können auf die gleiche Art durch Multiplikation -mit einem Bruch komprimiert werden, als ob jede Note, jeder -Akkord oder jede Pause mit dem Bruch multipliziert würde. -Damit bleibt das Aussehen der Musik unverändert, aber die -interne Dauer der Noten wird mit dem Bruch multipliziert. -Die Leerzeichen um den Punkt im Beispiel sind notwendig. -Hier ein Beispiel, das zeigt, wie Noten komprimiert und -ausgedehnt werden kann: - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Normal durations -4 c8 a -% Scale music by *2/3 -\scaleDurations #'(2 . 3) { - 4. c8 a f -} -% Scale music by *2 -\scaleDurations #'(2 . 1) { - 4 c8 b -} -@end lilypond - -@noindent -Eine Anwendung für diesen Befehl ist polymetrische Notation, -siehe @ref{Polymetric notation}. - -@seealso -Notationsreferenz: -@ref{Tuplets}, -@ref{Invisible rests}, -@ref{Polymetric notation}. - -Schnipsel: -@rlsr{Rhythms}. - - -@node Ties -@unnumberedsubsubsec Ties - -@cindex Bindebogen -@cindex Überbindung - -@funindex ~ - -Ein Bindebogen verbindet zwei benachbarte Noten der selben -Tonhöhe. Als Resultat wird die Dauer der Notenlänge verlängert. - -@warning{Bindebögen dürfen nicht mit Legatobögen verwechselt werden, durch -die die Vortragsart bezeichnet wird, noch mit Phrasierungsbögen, -die musikalische Phrasen anzeigen. Ein Bindebogen ist nur eine -Art, die Tondauer zu verlängern, ähnlich etwa wie die -Punktierung.} - -Ein Bindebogen wird mit der -Tilde @code{~} (AltGr++) notiert. - -@lilypond[quote,verbatim,relative=2] -a2 ~ a -@end lilypond - -@noindent -Bindebögen werden eingesetzt, wenn die Note entweder über eine -Taktlinie hinüberreicht, oder wenn die entsprechende Dauer der -Note nicht mit Punktierung erreicht werden kann. Bindebögen -sollten auch benutzt werden, wenn Notenwerte über die -inneren Unterteilungen von Takten hinüberreichen: - -@lilypond[quote] -\relative c' { - r8 c8 ~ c2 r4 | - r8^"not" c2 ~ c8 r4 -} -@end lilypond - -Wenn viele Noten über Taktlinien gebunden werden müssen, kann -es einfacher sein, automatische Notenaufteilung einzustellen, -wie beschrieben in @ref{Automatic note -splitting}. Mit diesem Mechanismus werden lange Noten -automatisch aufgeteilt, wenn sie über Taktgrenzen reichen. - -@cindex Bindebögen und Akkorde -@cindex Überbindungen und Akkorde -@cindex Akkorde und Überbindungen - -Wenn ein Bindebogen an einen Akkord gehängt wird, werden alle Noten -dieses Akkordes übergebunden. Wenn kein Notenkopf passt, wird auch -kein Bogen erzeugt. Noten in Akkorden können auch einzeln übergebunden -werden, indem sie innerhalb des Akkordes hinter die entsprechende Note -geschrieben werden. - -@lilypond[quote,verbatim,relative=1] - ~ - -@end lilypond - -@cindex Bindebögen wiederholen -@cindex Wiederholung und Bindebögen -@cindex Überbindung und Wiederholungen -@cindex Volta-Klammern und Wiederholungen -@cindex Volta und Überbindung - -@funindex \repeatTie -@funindex repeatTie - -Wenn die zweite Variante einer Wiederholung mit einer übergebundenen -Note anfängt, muss der Bindebogen wie folgt notiert werden: - -@lilypond[quote,relative=2,verbatim] -\repeat volta 2 { c g 2 ~ } -\alternative { - % First alternative: following note is tied normally - { 2. r4 } - % Second alternative: following note has a repeated tie - { 2\repeatTie d4 c } } -@end lilypond - -@cindex Laissez vibrer -@cindex Ausklingen lassen, Bögen -@cindex Bögen, laissez vibrer -@cindex Ausklingen lassen - -@funindex laissezVibrer -@funindex \laissezVibrer - -So genannte @notation{laissez vibrer}-Bögen werden verwendet um anzuzeigen, dass -man die Musik ausklingen lassen soll. Sie werden in der Klavier-, Harfen-, -anderer Saiteninstrument- und Schlagzeugnotation verwendet. Sie können folgendermaßen notiert werden: - -@lilypond[quote,verbatim,relative=1] -1\laissezVibrer -@end lilypond - -@cindex ties, placement - -@funindex \tieUp -@funindex \tieDown -@funindex \tieNeutral -@funindex tieUp -@funindex tieDown -@funindex tieNeutral - -Die vertikale Position von Bindebögen kann kontrolliert werden, -siehe die vordefinierten Befehle unten oder für Einzelheiten -@ref{Direction and placement}. - -@cindex Bindebögen, Ausehen -@cindex Bindebögen, gestrichelt -@cindex Bindebögen, gepunktet -@cindex Bindebögen, durchgehend - -@funindex \tieDotted -@funindex \tieDashed -@funindex \tieSolid -@funindex tieDotted -@funindex tieDashed -@funindex tieSolid - -Durchgehende, gepunktete oder gestrichelte Bindebögen können -spezifiziert werden, siehe die vordefinieren Befehle. - -@predefined -@code{\tieUp}, -@code{\tieDown}, -@code{\tieNeutral}, -@code{\tieDotted}, -@code{\tieDashed}, -@code{\tieSolid}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-ties-with-arpeggios.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{engraving-ties-manually.ly} - -@seealso -Glossar: -@rglos{tie}, -@rglos{laissez vibrer}. - -Notationsreferenz: -@ref{Automatic note splitting}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{LaissezVibrerTie}, -@rinternals{LaissezVibrerTieColumn}, -@rinternals{TieColumn}, -@rinternals{Tie}. - -@knownissues - -Der Wechsel zwischen Systemen bei aktiver Überbindung produziert keinen -gekrümmten Bogen. - -Änderung von Schlüssel oder Oktavierung zwischen übergebundenen Noten -ist nicht richtig definiert. In diesen Fällen kann es besser sein, einen -Legatobogen zu verwenden. - - -@node Writing rests -@subsection Writing rests - -Pausen werden als Teil der musikalischen Ausdrücke zusammen mit -den Noten notiert. - - -@menu -* Rests:: -* Invisible rests:: -* Full measure rests:: -@end menu - -@node Rests -@unnumberedsubsubsec Rests - -@cindex Pausen -@cindex Pausendauern -@cindex Maxima-Pause -@cindex Longa-Pause -@cindex Brevis-Pause - -@funindex \rest -@funindex r -@funindex \maxima -@funindex \longa -@funindex \breve -@funindex rest -@funindex maxima -@funindex longa -@funindex breve - -Pausen werden wie Noten eingegeben, ihre Bezeichnung ist @code{r}. -Dauern, die länger als eine Ganze sind, haben die gezeigten -vordefinierten Befehle: - -@c \time 16/1 is used to avoid spurious bar lines -@c and long tracts of empty measures -@lilypond[quote,verbatim] -\new Staff { - % These two lines are just to prettify this example - \time 16/1 - \override Staff.TimeSignature #'stencil = ##f - % Print a maxima rest, equal to four breves - r\maxima - % Print a longa rest, equal to two breves - r\longa - % Print a breve rest - r\breve - r1 r2 r4 r8 r16 r32 r64 r128 -} -@end lilypond - -@cindex Pausen, mehrtaktig -@cindex Ganztaktpausen -@cindex Mehrtaktpausen - -Pausen, die ganze Takte ausfüllen und in der Taktmitte zentriert -werden sollen, müssen als mehrtaktige Pausen eingegeben werden. -Sie können sowohl für einen einzigen Takt als auch für mehrere -Takte verwendet werden, Näheres im Abschnitt -@ref{Full measure rests}. - -Um die vertikale Position einer Pause explizit festzulegen, -kann eine Note eingegeben werden, gefolgt vom Befehl @code{\rest}. -Die Pause wird dann an die Stelle gesetzt, wo sich sonst die -Note befinden würde. Damit wird die manuelle Formatierung von mehrstimmiger Musik -sehr viel einfacher, da die Formatierungsfunktion zur automatischen -Auflösung von Zusammenstößen diese Pausen nicht mit einbezieht. - -@lilypond[quote,verbatim,relative=2] -a4\rest d4\rest -@end lilypond - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{rest-styles.ly} - -@seealso -Glossar: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}. - -Notationsreferenz: -@ref{Full measure rests}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{Rest}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -Es gibt keine gundlegende Grenze für die Dauer von Pausen (sowohl -kürzer als auch länger), aber die Anzahl von Symbolen ist -begrenzt: Es gibt Zeichen für Pausen von einer 128 bis zu einer -Maxima (8 Ganze). - - -@node Invisible rests -@unnumberedsubsubsec Invisible rests - -@cindex Skip -@cindex Überspringen von Zeichen -@cindex Unsichtbare Pausen -@cindex Pausen, unsichtbar -@cindex Platzhalternoten - -@funindex \skip -@funindex skip -@funindex s - -Eine unsichtbare Pause (auch als @qq{skip} oder Überspringung bezeichnet) -kann wie eine Note eingegeben werden, die Notationsbezeichnung ist @code{s}. - -@lilypond[quote,verbatim,relative=2] -a4 a4 s4 a4 \skip 1 a4 -@end lilypond - -@cindex Gesangstext, überspringen - -Die @code{s}-Syntax steht nur im Noten- oder Akkordmodus zur Verfügung. In -anderen Situationen, z. B. innerhalb eines Liedtextes, muss @code{\skip} -benutzt werden. @code{\skip} benötigt eine explizite Dauerangabe. - -@lilypond[quote,verbatim,relative=2] -<< - { - a2 \skip2 a2 a2 - } - \new Lyrics { - \lyricmode { - foo2 \skip 1 bla2 - } - } ->> -@end lilypond - -Die Überspringung mit @code{s} erstellt @code{Staff} und -@code{Voice}-Kontext, wenn es erforderlich ist, genauso wie Noten und Pausen. - -@lilypond[quote,verbatim,fragment] -s1 s s -@end lilypond - -Der Überspringungsbefehl (@code{\skip}) ist einfach ein leerer Platzhalter. -Durch ihn wird -überhaupt nichts gesetzt, auch keine transparenten Objekte. - -@lilypond[quote,verbatim,fragment] -% This is valid input, but does nothing -\skip 1 \skip1 \skip 1 -@end lilypond - -@seealso -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{SkipMusic} - - - -@node Full measure rests -@unnumberedsubsubsec Full measure rests - -@cindex Ganztaktpausen -@cindex Mehrtaktpausen -@cindex Pausen, Ganztakt- -@cindex Pausen, Mehrtakt- - -@funindex R - -Pausen für einen oder mehrere ganze Takte werden wie -Noten eingegeben, wobei die Bezeichnung ein Großbuchstabe -@code{R} ist: - -@lilypond[quote,verbatim,relative=2] -% Rest measures contracted to single measure -\compressFullBarRests -R1*4 -R1*24 -R1*4 -b2^"Tutti" b4 a4 -@end lilypond - -Die Dauer von Ganztaktpausen wird genauso angegeben wie die -Dauer von Noten. Die Dauer einer Ganztaktpause muss immer -eine ganze Anzahl an Taktlängen sein, weshalb Punktierungen -und Brüche recht häufig eingesetzt werden müssen. - -@lilypond[quote,fragment,verbatim] -\compressFullBarRests -\time 2/4 -R1 | R2 | -\time 3/4 -R2. | R2.*2 | -\time 13/8 -R1*13/8 | R1*13/8*12 | -\time 10/8 -R4*5*4 | -@end lilypond - -Eine Ganztaktpause wird abhängig von der Taktart entweder als -Ganze oder Brevis-Pause gesetzt, zentriert im Takt. - -@lilypond[quote,verbatim,fragment] -\time 4/4 -R1 | -\time 6/4 -R1*3/2 | -\time 8/4 -R1*2 | -@end lilypond - -@cindex Mehrtaktpausen, ausschreiben -@cindex Pausen, mehrere Takte ausschreiben -@cindex Pausen, mehrere Takte komprimieren -@cindex Mehrtaktpausen, komprimieren - -@funindex \expandFullBarRests -@funindex \compressFullBarRests -@funindex expandFullBarRests -@funindex compressFullBarRests - -In den Standardeinstellungen werden mehrtaktige Pausen -ausgeschrieben gesetzt, sodass sie die entsprechende Anzahl von -Takten einnehmen. Alternativ kann die mehrtaktige Pause -aber auch nur in einem Takt angezeigt werden, der ein -Mehrtaktpausensymbol geinhaltet, wobei die Anzahl der Takte -der Pausendauer über dem Pausenzeichen ausgegeben wird: - -@lilypond[quote,fragment,verbatim] -% Default behavior -\time 3/4 r2. | R2.*2 | -\time 2/4 R2 | -\time 4/4 -% Rest measures contracted to single measure -\compressFullBarRests -r1 | R1*17 | R1*4 | -% Rest measures expanded -\expandFullBarRests -\time 3/4 -R2.*2 | -@end lilypond - - -@cindex Text über Mehrtaktpausen -@cindex Mehrtaktpausen, Text hinzufügen -@cindex Beschriftung über Mehrtaktpausen -@cindex Mehrtaktpausen, Beschriftung -@cindex Fermate über Mehrtaktpausen -@cindex Mehrtaktpause mit Fermate - -@funindex \fermataMarkup -@funindex fermataMarkup - -Textbeschriftung kann Mehrtaktpausen mit @code{\markup} -hinzugefügt werden. Ein -vordefinierte Befehl @code{\fermataMarkup} fügt eine -Fermate ein. - -@lilypond[quote,ragged-right,verbatim,fragment] -\compressFullBarRests -\time 3/4 -R2.*10^\markup { \italic "ad lib." } -R2.^\fermataMarkup -@end lilypond - -@warning{ -Beschriftungen, die an Mehrtaktpausen gehängt werden, sind -Objekte vom Typ @code{MultiMeasureRestText}, nicht vom Typ -@code{TextScript}. Änderungen etwa mit @code{\override} -müssen auf das richtige Objekt gerichtet werden, damit sie -nicht ignoriert werden. Siehe auch das folgende Beispiel. -} - -@lilypond[quote,ragged-right,verbatim,fragment] -% This fails, as the wrong object name is specified -\override TextScript #'padding = #5 -R1^"wrong" -% This is correct and works -\override MultiMeasureRestText #'padding = #5 -R1^"right" -@end lilypond - -Wenn eine Mehrtaktpause direkt auf einen Auftakt mit @code{\partial} -folgt, werden möglicherweise daraus resultierende -Taktprüfungswarnungen nicht angezeigt. - -@predefined -@code{\textLengthOn}, -@code{\textLengthOff}, -@code{\fermataMarkup}, -@code{\compressFullBarRests}, -@code{\expandFullBarRests}. -@endpredefined - -@snippets - -@cindex Kirchenpausen -@cindex Pausen, Kirchenstil -@cindex Balkenpausen, mehrtaktig - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-form-of-multi-measure-rests.ly} - -@cindex Mehrtaktpausen, Positionierung -@cindex Position von Mehrtaktpausen - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{positioning-multi-measure-rests.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{multi-measure-rest-markup.ly} - - -@seealso -Glossar: -@rglos{multi-measure rest}. - -Notationsreferenz: -@ref{Durations}, -@ref{Text}, -@ref{Formatting text}, -@ref{Text scripts}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{MultiMeasureRest}, -@rinternals{MultiMeasureRestNumber}, -@rinternals{MultiMeasureRestText}. - -@cindex Fingersatz und Mehrtaktpausen -@cindex Mehrtaktpausen und Fingersatz -@cindex Ganztaktpausen und Fingersatz - -@knownissues - -Wenn man versucht, mit Fingersatz (etwa @code{R1*10-4} Zahlen -über Ganztaktpausen zu setzen, kann die Zahl des Fingersatzes -(4) mit der Taktanzahl (10) zusammenstoßen. - -@cindex Zusammenfalten von Pausen -@cindex Pausen, Zusammenfalten - -Es gibt keine Möglichkeit, normale Pausen automatisch zu -Ganztaktpausen zu reduzieren. - -@cindex Pausen, Zusammenstöße - -Ganztaktpausen werden bei der Vermeidung von Zusammenstößen nicht -berücksichtigt. - - - -@node Displaying rhythms -@subsection Displaying rhythms - -@menu -* Time signature:: -* Upbeats:: -* Unmetered music:: -* Polymetric notation:: -* Automatic note splitting:: -* Showing melody rhythms:: -@end menu - -@node Time signature -@unnumberedsubsubsec Time signature - -@cindex Taktangabe -@cindex Metrum - -@funindex time -@funindex \time - -Taktangaben könne wie folgt erstellt werden. - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c'2 -\time 3/4 c'2. -@end lilypond - -@cindex Taktangabe, Sichtbarkeit - -Taktangaben werden zu Beginn eines Stückes gesetzt und immer dann, -wenn sich die Taktart ändert. Wenn eine Änderung am Ende einer -Zeile geschieht, wird eine warnende Taktangabe am Ende der Zeile -ausgegeben. Dieses Verhalten kann verändert werden, siehe -@ref{Visibility of objects}. - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -c2 c -\break -c c -\break -\time 4/4 -c c c c -@end lilypond - -@funindex \numericTimeSignature -@funindex \defaultTimeSignature -@funindex numericTimeSignature -@funindex defaultTimeSignature - -@cindex Stil von Taktangaben -@cindex Taktangaben-Stile - -Das Symbol für die Taktarten 2/2 und 4/4 kann in ein Zahlensymbol -umgewandelt werden: - -@lilypond[quote,verbatim,relative=2] -% Default style -\time 4/4 c1 -\time 2/2 c1 -% Change to numeric style -\numericTimeSignature -\time 4/4 c1 -\time 2/2 c1 -% Revert to default style -\defaultTimeSignature -\time 4/4 c1 -\time 2/2 c1 -@end lilypond - -Symbole für Modus und Proprietas der mensuralen Notation -werden behandelt unter -@ref{Ancient time signatures}. - -@predefined -@code{\numericTimeSignature}, -@code{\defaultTimeSignature}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-time-signature-without-affecting-the-beaming.ly} - -@cindex compound time signatures -@cindex time signature, compound - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Glossar: -@rglos{time signature} - -Notationsreferenz: -@ref{Ancient time signatures}, -@ref{Time administration}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}. - - - -@node Upbeats -@unnumberedsubsubsec Upbeats - -@cindex Auftakt -@cindex Takte verkürzen -@cindex partieller Takt -@cindex halber Takt -@cindex Taktlänge ändern - -@funindex measurePosition -@funindex \partial -@funindex partial - -Verkleinerte Takte, wie etwa ein Auftakt, werden mit dem -Befehl @code{\partial} notiert, dessen Syntax lautet: - -@example -\partial @var{Dauer} -@end example - -wobei @var{Dauer} die rhythmische Länger der Noten darstellt, -die vor dem ersten vollständigen Takt gesetzt werden sollen: - -@lilypond[quote,verbatim,relative=2] -\partial 4 e4 | -a2. c,4 | -@end lilypond - -Das wird intern übersetzt nach: - -@example -\set Timing.measurePosition = -@var{Länge der Dauer} -@end example - -Die Eigenschaft @code{measurePosition} (Takt-Position) enthält -eine rationale Zahl, -die anezigt, wie groß der Abstand zum Taktanfang ist. Deshalb ist -sie eine negative Zahl; @code{\partial 4} wird also intern übersetzt -zu: @qq{Eine Viertel bleibt übrig vom ganzen Takt.} - -@seealso -Glossar: -@rglos{anacrusis}. - -Notationsreferenz: -@ref{Grace notes}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{Timing_translator}. - -@knownissues - -@code{\partial} ist nur für den Anfang eines Stückes vorgesehen. Wenn der -Befehl innerhalb eines Stückes verwendet wird, können seltsame Warnungen -auftreten. - - -@node Unmetered music -@unnumberedsubsubsec Unmetered music - -@cindex Kadenz -@cindex Taktlinen, ausschalten -@cindex Taktnummern, ausschalten -@cindex Noten ohne Takt -@cindex Taktart, Noten ohne -@cindex Metrum, Noten ohne - -@funindex \cadenzaOn -@funindex \cadenzaOff -@funindex cadenzaOn -@funindex cadenzaOff - -Taktlinien und Taktzahlen werden automatisch erzeugt. Für Musik -ohne Metrum hingegen (etwa Kadenzen) ist das jedoch nicht -erwünscht. Mit den Befehlen @code{\cadenzaOn} und -@code{\cadenzaOff} kann dieses Verhalten ausgeschaltet und -wieder angeschaltet werden. - -@lilypond[verbatim,quote,relative=2,fragment] -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - -Taktnummerierung wird am Ende der Kadenz wieder aufgenommen, als -ob es die Kadenz nicht gegeben hätte: - -@lilypond[verbatim,relative=2,fragment] -% Show all bar numbers -\override Score.BarNumber #'break-visibility = #all-visible -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - -@predefined -@code{\cadenzaOn}, -@code{\cadenzaOff}. -@endpredefined - -@seealso -Glossar: -@rglos{cadenza}. - -@c Notationsreferenz: -@c ref{Controlling visibility of objects}. - -Schnipsel: -@rlsr{Rhythms}. - -@knownissues - -LilyPond fügt Zeilen- und Seitenumbrüche nur an einer Taktlinie -ein. Wenn die Kadenz nicht vor einem Umbruch endet, müssen Sie -selber unsichtbare Taktlinien mit - -@example -\bar "" -@end example - -@noindent -einfügen, um anzuzeigen, wo umgebrochen werden darf. - - -@node Polymetric notation -@unnumberedsubsubsec Polymetric notation - -@cindex doppelte Taktartensymbole -@cindex Taktartensymbole, doppelt -@cindex Taktartensymbole, unterteilt -@cindex Taktarten, polymetrisch -@cindex polymetrische Taktarten -@cindex Metrum, polymetrisch -@cindex unterteilte Taktarten - -@funindex timeSignatureFraction -@funindex \scaleDurations -@funindex scaleDurations -@funindex \times -@funindex times - -Polymetrische Notation ist unterstützt, entweder direkt, oder -indem man das sichtbare Taktart-Symbol verändert und zusätzlich -die Notendauern skaliert. - -@strong{@i{Systeme mit unterschiedlichen Taktarten, gleiche -Taktlänge}} - -Diese Art der Notation kann erstellt werden, indem für jedes -System eine identische Taktart eingestellt wird, aber manuell -für jeden Takt durch Einstellung von @code{timeSignatureFraction} -auf den gewünschten Bruch geändert und dann die Länge der -Noten entsprechenden skaliert wird, siehe auch @ref{Time signature}. -Die Skalierung geschieht mit dem Befehl -@code{\scaleDurations}, der auf ähnliche Weise wie @code{\times} -benutzt wird, aber keine Klammer über den Noten ausgibt. Siehe -auch @ref{Scaling durations}. - -@cindex Bebalkung in polymetrischer Notation -@cindex Polymetrische Notation und Balken - -In diesem Beispiel werden Noten mit den Taktarten 3/4, 9/8 und -10/8 parallel benutzt. Im zweiten System werden die gezeigten -Dauern mit 2/3 multipliziert, da 2/3x9/8=3/4, und im dritten -System werden die gezeigten Dauern mit 3/5 multipliziert, da -3/5x10/8=3/4. Oft wird es nötig sein, Balken manuell zu setzen, -weil die Skalierung sich auch auf die automatische Bebalkung -auswirkt. - -@lilypond[quote,verbatim,fragment] -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(9 . 8) - \scaleDurations #'(2 . 3) - \repeat unfold 6 { c8[ c c] } - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(10 . 8) - \scaleDurations #'(3 . 5) { - \repeat unfold 2 { c8[ c c] } - \repeat unfold 2 { c8[ c] } | - c4. c4. \times 2/3 { c8[ c c] } c4 - } - } ->> -@end lilypond - -@strong{@i{Systeme mit unterschiedlichen Taktarten, unterschiedliche -Taktlänge}} - -Jedes System kann auch eine eigene unabhängige Taktart erhalten. -Dazu muss der @code{Timing_translator} und der -@code{Default_bar_line_engraver} in den @code{Staff}-Kontext -verschoben werden. - -@lilypond[quote,verbatim] -\layout { - \context { - \Score - \remove "Timing_translator" - \remove "Default_bar_line_engraver" - } - \context { - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } -} - -% Now each staff has its own time signature. - -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 2/4 - c4 c | - c c | - c c | - } - \new Staff { - \time 3/8 - c4. | - c8 c c | - c4. | - c8 c c | - } ->> -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Glossar: -@rglos{polymetric}, -@rglos{polymetric time signature}, -@rglos{meter}. - -Notationreferenz: -@ref{Time signature}, -@ref{Scaling durations}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Intera: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}, -@rinternals{Default_bar_line_engraver}, -@rinternals{Staff}. - -@knownissues - -Wenn unterschiedliche Taktarten paralell benutzt werden, werden -Noten auf demselben musikalischen Moment horizontal auf die -gleiche Position gesetzt. Die unterschiedlichen Taktlinien -führen allerdings dazu, dass die Noten nicht ganz so regelmäßig -gesetzt werden, wie es ohne unterschiedliche Taktarten der -Fall wäre. - - -@node Automatic note splitting -@unnumberedsubsubsec Automatic note splitting - -@cindex Noten, aufteilen -@cindex Aufteilen von Noten -@cindex automatisches Aufteilen von Noten - -@funindex Note_heads_engraver -@funindex Completion_heads_engraver - -Lange Noten, die über Taktlinien hinüberreichen, können -automatisch in übergebundene Noten aufgeteilt werden. -Dieses Verhalten erreicht man, indem der @rinternals{Note_heads_engraver} -mit dem @rinternals{Completion_heads_engraver} ausgetauscht wird. -Im nächsten Beispiel werden Noten, die über die Taktlinie dauern, aufgeteilt -und übergebunden. - -@lilypond[quote,verbatim,relative=1] -\new Voice \with { - \remove "Note_heads_engraver" - \consists "Completion_heads_engraver" -} - -{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } -@end lilypond - -Dieser Engraver teilt alle Noten -auf, die über eine Taktlinie dauern und fügt Bindebögen hinzu. -Er kann unter Anderem dann nützlich sein, wenn man komplexe -Partituren auf Fehler überprüfen möchte: Wenn die Takte nicht -vollständig gefüllt sind, zeigt die Überbindung genau an, wie viele -Notenwerte noch in dem jeweiligen Takt fehlen. - -@seealso -Glossar: @rglos{tie} - -Handbuch zum Lernen: -@rlearning{Engravers explained}, -@rlearning{Adding and removing engravers}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{Note_heads_engraver}, -@rinternals{Completion_heads_engraver}, -@rinternals{Forbid_line_break_engraver}. - -@knownissues - -Nicht alle Notenwerte (besonders wenn sie andere rhythmische -Aufteilungen beinhalten) können exakt durch normale Noten und -Punktierungen wiedergegeben werden. Der Engraver setzt aber -trotzdem keine Triolen etc. - -@code{Completion_heads_engraver} wirkt sich nur auf Noten aus; -Pausen werden nicht aufgeteilt. - - -@node Showing melody rhythms -@unnumberedsubsubsec Showing melody rhythms - -@cindex Melodierhythmus: Anzeige -@cindex Rhythmus der Melodie anzeigen - -Manchmal soll nur der Rhythmus einer Melodie dargestellt werden. Das -erreicht man mit einem Rhythmus-Notensystem. Alle Tonhöhen werden -auf eine Linie reduziert und das System hat auch nur eine einzige -Linie. - -@lilypond[quote,relative=1,verbatim] -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \time 4/4 - c4 e8 f g2 - r4 g g f - g1 - } - } - \new Lyrics { - \lyricsto "myRhythm" { - This is my song - I like to sing - } - } ->> -@end lilypond - -@cindex Gitarren-Akkordnotation -@cindex Schlagrhythmus, Gitarre -@cindex Gitarrenschlagrhythmus, Notation - -@funindex Pitch_squash_engraver -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -Akkordnotation für Gitarren bezeichnet auch oft zusätzlich den -geschlagenen Rhythmus. Das kann notiert werden unter Verwendung -des @code{Pitch_squash_engraver} und indem Tonhöhenimprovisation -eingeschaltet wird mit @code{\improvisationOn}. - -@lilypond[quote,verbatim] -<< - \new ChordNames { - \chordmode { - c1 f g c - } - } - - \new Voice \with { - \consists Pitch_squash_engraver - } \relative c'' { - \improvisationOn - c4 c8 c c4 c8 c - f4 f8 f f4 f8 f - g4 g8 g g4 g8 g - c4 c8 c c4 c8 c - } ->> -@end lilypond - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{guitar-strum-rhythms.ly} - -@seealso -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{RhythmicStaff}, -@rinternals{Pitch_squash_engraver}. - - - -@node Beams -@subsection Beams - -@menu -* Automatic beams:: -* Setting automatic beam behavior:: -* Manual beams:: -* Feathered beams:: -@end menu - - -@node Automatic beams -@unnumberedsubsubsec Automatic beams - -LilyPond setzt Balken (engl. beam) automatisch. - -@cindex Balken, Einstellungen -@cindex Balken, eigene Regeln -@cindex automatische Bebalkung -@cindex Balken, automatisch - -@funindex measureLength -@funindex beatLength -@funindex beatGrouping -@funindex \autoBeamOn -@funindex autoBeamOn -@funindex \autoBeamOff -@funindex autoBeamOff - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c c c -\time 6/8 c c c c8. c16 c8 -@end lilypond - -Wenn diese automatischen Entscheidungen nicht gut genug sind, können -die Balken auch explizit eingegeben werden, siehe -@ref{Manual beams}. Es können auch bestimmte -Balkenmuster, die sich vom Standard unterscheiden, definiert werden. -Die Standard-Regeln für die gebräuchlichsten Taktarten sind -in der Datei @file{scm/@/auto@/-beam@/.scm} definiert. Wenn -dort keine Balkenregeln für die bestimmte Balkendauer in der -aktuellen Taktart vorhanden -sind, wird die Bebalkung geregelt von drei Kontexteigenschaften: -@code{measureLength}, @code{beatLength} und @code{beatGrouping}. -Sowohl die Balkenregeln als auch diese Kontexteigenschaften -können geändert werden, siehe @ref{Setting automatic beam behavior}. - -@warning{Wenn Balken eingesetzt werden, um Melismen in Gesang -anzuzeigen, müssen die automatische Bebalkung ausgeschaltet werden -mit dem Befehl @code{\autoBeamOff} und die Balken mit der Hand -eingegeben werden.} - -@noindent -Automatische Bebalkung kann mit dem Befehl @code{\autoBeamOff} -aufgehoben werden und mit dem Befehl @code{\autoBeamOn} wieder -eingeschaltet werden. - -@lilypond[quote,relative=1,verbatim] -c4 c8 c8. c16 c8. c16 c8 -\autoBeamOff -c4 c8 c8. c16 c8. -\autoBeamOn -c16 c8 -@end lilypond - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - -@snippets - -@funindex breakable - -@cindex Zeilenumbruch, Balken -@cindex Balken und Zeilenumbrüche - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beams-across-line-breaks.ly} - -@cindex Balken mit Knie -@cindex weit außeinander liegende Balken -@cindex auto-knee-gap - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-beam-knee-gap.ly} - -@seealso -Notationsreferenz: -@ref{Manual beams}, -@ref{Setting automatic beam behavior}. - -Installierte Dateien: -@file{scm/@/auto@/-beam@/.scm}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{Beam}. - - -@knownissues - -Automatische Bebalkung von weit außeinander liegenden Noten -(wobei der Balken als Knie erscheint) kann nicht mit versteckten -Systemen benutzt werden. Siehe @ref{Hiding staves}. - -Balken können mit Notenköpfen und Versetzungszeichen in anderen -Stimmen zusammenstoßen. - - - -@node Setting automatic beam behavior -@unnumberedsubsubsec Setting automatic beam behavior - -@cindex Automatische Balken, einstellen -@cindex Einstellungen der Bebalkung -@cindex autobeam -@cindex Verändern von automatischer Bebalkung -@cindex Bebalkung, automatisch, Einstellungen -@cindex Text und Balken -@cindex Gesangstext und Balken - -@funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) -@funindex measureLength -@funindex beatLength -@funindex beatGrouping -@funindex \time -@funindex time -@funindex \set -@funindex set - -Die Position und Länge der automatischen Balken wird bestimmt -von bestimmten Regeln, wie beschrieben in @ref{Automatic beams}. -Es gibt zwei einander ausschließende Arten, diese Regeln zu -verändern. Mit der ersten Art verändert man Gruppen von -Noten, die einer bestimmten Taktart entsprechend mit Balken -versehen werden. Das muss manuell getan werden für die Taktarten, -für welche keine fertigen Regeln definiert worden sind. Die -zweite Methode verändert die Definitionen für die Endpunkte -der Balken und kann für jede Taktart eingesetzt werden. Diese -zweite Methode @strong{muss} -eingesetzt werden für die Taktarten, für welche schon Regeln -definiert worden sind, es sei denn, alle Regeln wurden mit -@code{revert} rückgängig gemacht. Regeln sind definiert für -die Taktarten 3/2, 3/4, 4/4, 2/4, 4/8, 4/16, 6/8, 9/8 und 12/8. - -@i{@strong{Die Gruppierung von Noten verändern}} - -Wenn keine Regeln für die Beendung von Balken für die aktuelle -Balkendauer in der benutzen Taktart vorhanden sind, wird die -Bebalkung von drei Kontext-Eigenschaften kontrolliert: -@code{measureLength}, @code{beatLength} und @code{beatGrouping}. -Diese Eigenschaften können in den @code{Score}, @code{Staff} oder -@code{Voice}-Kontexten gesetzt werden, um ihre Wirkungsweise zu -begrenzen. Die Standardwerte werden gesetzt, wenn der @code{\time}-Befehl -gelesen wird, sodass alle @code{\set}-Befehle nach den @code{\time}-Befehlen -geschrieben werden müssen. - -Durch sie werden die Balken wie folgt bestimmt: - -Balken können überall beginnen (außer ein Balken ist schon aktiv). -Balken enden zu den Werten, die @code{beatGrouping} und -@code{beatLength} bestimmten, nach folgenden Regeln: - -@itemize - -@item Wenn @code{beatGrouping} und @code{beatLength} den gleichen -Wert wie @code{measureLength} haben, wird @code{beatGrouping} -benutzt, um die Endpunkte der Balken zu bestimmen. - -@item Wenn @code{beatGrouping} und @code{beatLength} nicht mit -@code{measureLength} übereinstimmen, wird @code{beatLength} -benutzt, um die Endpunkte der Balken zu bestimmen. - -@end itemize - -@warning{Diese drei Eigenschaften werden für einen bestimmten -Balken @strong{nur dann} aktiv, wenn für diese Balkendauer keine -Beendungsregeln für die benutzte Taktart definiert sind, oder -wenn alle diese Regeln mit @code{revert} rückgängig gemacht -wurden.} - -Standardmäßig werden @code{measureLength} -(Taktlänge) und @code{beatLength} von der Taktart entnommen, die -mit @code{\time} gesetzt wurde. @code{measureLength} hat -standardmäßig genau die gleiche Länge wie die Taktlänge und der -Standardwert für @code{beatLength} (Taktzeit-Länge) wird durch -den Nenner des Taktart-Bruches bestimmt. - -Der Standardwert von @code{beatGrouping} wird aus einer Tabelle -in der Datei @file{scm/@/music@/-functions@/.scm} entnommen. Um -sie zu finden, siehe @rlearning{Other sources of information}. -Hier werden Taktzeiten-Gruppen für die Taktarten 5/8, 6/8, 8/8, -9/8 und 12/8 definiert. - -Sowohl @code{measureLength} als auch @code{beatLength} sind -@i{Momente}, Einheiten musikalischer Dauer. Eine Größe der -Art @i{Moment} wird durch die Scheme-Funktion -@code{ly:make-moment} erstellt. Für mehr Information zu dieser -Funktion siehe @ref{Time administration}. - -@code{beatGrouping} ist eine Liste an Integren, die die Anzahl -von Zählzeiten für jede Gruppe darstellen. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grouping-beats.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{specifying-context-with-beatgrouping.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-beatlength-and-beatgrouping.ly} - -@funindex subdivideBeams - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{sub-dividing-beams.ly} - -@cindex Taktgruppen -@cindex Schlaggruppen -@cindex Taktschläge gruppieren -@cindex Takt unterteilen -@cindex Unterteilen von Takten - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{conducting-signs,-measure-grouping-signs.ly} - - -@strong{@i{Die Endpunkte von Balken bestimmen}} - -In üblichen Taktarten können automatisch gesetzte Balken an jeder -Note beginnen, aber nur an einigen bestimmten Positionen innerhalb -des Taktes beendet werden. Diese Positionen werden durch die -Eigenschaften in @code{autoBeamSettings} bestimmt. Sie bestehen -aus einer Liste an Regeln, die bestimmen, wo Balken enden können. -Die Standardeinstellungen dieser automatischen Einstellungen -befinden sich in der Datei @file{scm/@/auto@/-beam@/.scm}. Um diese -Datei zu finden, siehe @rlearning{Other sources of information}. - -Diese Methode @strong{muss} benutzt werden, wenn die Einstellungen -für die Balken in Taktarten verändert werden sollen, für welche -schon Regeln existieren, es sei denn, alle diese Regeln wurden -rückgängig gemacht. Die Methode ist auch in vielen anderen -Taktarten gut anzuwenden, wenn die Taktart sich oft ändert, oder -wenn die Balken unterschiedlich für unterschiedliche Balkendauern -gesetzt werden sollen. - -Um eine neue Regel zu der Liste hinzuzufügen, muss folgende -Syntax verwendet werden: - -@example -#(override-auto-beam-setting - '(Balken-Limit - Balken-Zähler Balken-Nenner - Taktart-Zähler Taktart-Nenner) - Moment-Zähler Moment-Nenner [Kontext]) -@end example - -@noindent -wobei - -@itemize - -@item @code{Balken-Limit} die Art der Balkenbegrenzung ist. Das -kann entweder der Wert @code{begin} (Anfang) oder @code{end} -(Ende) sein, aber nur @code{end} hat eine Auswirkung. - -@item @code{Balken-Zähler/Balken-Nenner} ist die Balken-Dauer, -auf die die Regel sich bezieht. Ein Balken hat per Definition -die Dauer seiner kürzesten Note. Wenn sowohl -@code{Balken-Zähler} als auch @code{Balken-Nenner} auf - @code{'*'} gesetzt werden, gilt die Regel für alle Dauern. - -@item @code{Taktart-Zähler/Taktart-Nenner} bestimmen die -Taktart, auf die die Regel sich bezieht. Wenn @code{Taktart-Zähler} -und @code{Taktart-Nenner} auf @code{'*'} gesetzt werden, gilt -die Regel für alle Taktarten. - -@item @code{Moment-Zähler/Moment-Nenner} ist die Position im -Takt, an welcher der Balken aufhören soll. - -@item @code{Kontext} ist optional und bestimmt den Kontext, in -welchem die Änderungen vorgenommen werden sollen. Der -Standard ist @code{'Voice}. - -@code{#(score-override-auto-beam-setting '(A B C D) E F)} ist -gleichbedeutend mit -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. - -@end itemize - -Wenn beispielsweise die automatischen Balken immer auf der ersten -Viertel enden sollen, unabhängig von der Taktart oder Dauer -des Balkens, kann - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -@noindent -benutzt werden. - -Balkenregeln können aber auch auf Notengruppen beschränkt werden, -deren kürzeste Note einen bestimmten Wert hat: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -Balkenregeln können so definiert werden, dass sie nur in bestimmten -Taktarten angewendet werden: - -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d -@end lilypond - -Wenn mehrfache Stimmen benutzt werden, muss der @code{Staff}-Kontext -angegeben werden, wenn die Balkenregeln auf alle Stimmen im System -angewendet werden sollen: - -@lilypond[quote,verbatim,relative=2] -\time 7/8 -% rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> - -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -@end lilypond - -@warning{Wenn eine unerwartete Bebalkung auftritt, schauen Sie -zuerste die Balkeneinstellungen in @file{scm/@/auto@/-beam@/.scm} -nach, ob sich hier Überschneidungen ergeben, weil die -Balkenenden, die dort definiert sind, auch noch weiterhin -wirksam sind zusätzlich zu den von Ihnen definierten.} - -Jede ungewollte oder störende Balkenbeendigung aus den Standard-Eingesllungen -muss für Ihre Taktart rückgängig gemacht werden. Existierende -automatische Bebalkungsregeln werden entfernt mit folgender -Syntax: - -@example -#(revert-auto-beam-setting - '(Balken-Limit - Balken-Zähler Balken-Nenner - Taktart-Zähler Taktart-Nenner) - Moment-Zähler Moment-Nenner [Kontext]) -@end example - -@noindent -wobei @code{Balken-Limit}, @code{Balken-Zähler}, @code{Balken-Nenner}, -@code{Taktart-Zähler}, @code{Taktart-Nenner}, @code{Moment-Zähler}, -@code{Moment-Nenner} sowie @code{Kontext} die gleichen sind -wie oben erklärt. - -@lilypond[quote,verbatim,relative=2] -\time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -Die Regel in einer @code{revert-auto-beam-setting}-Definition -muss exakt der ursprünglichen Regel entsprechen. Dabei werden -keine Platzhalter akzeptiert. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-endings-in-score-context.ly} - -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - -@cindex Balken, letzter in einer Partitur -@cindex letzter Balken einer Partitur -@cindex Balken, letzter in einer polyphonen Stimme - -@knownissues - -Wenn eine Partitur aufhört, während ein automatischer Balken noch -nicht geschlossen ist und noch Noten erwartet, wird dieser letzte -Balken überhaupt nicht ausgegeben. Das gilt auch für polyphone -Stimmen, die mit @code{<< @dots{} \\ @dots{} >>} gesetzt wurden. -Wenn eine polyphone Stimme endet, während ein Balken noch Noten -erwartet, wird dieser Balken nicht gesetzt. - -@seealso -Schnipsel: -@rlsr{Rhythms}. - - -@node Manual beams -@unnumberedsubsubsec Manual beams - -@cindex manuelle Balken -@cindex Balken, manuell - -@funindex ] -@funindex [ - -In einigen Fällen kann es nötig sein, den automatischen Algorithmus -für die Balken zu überschreiben. Die automatischen Balken werden -beispielsweise nicht über Pausen oder Taktlinien hinweg gesetzt, und -in Gesang werden die Balken oft nach dem Rhythmus des Textes und -nicht dem der Musik gesetzt. -Manuell definierte Balken werden mit den Zeichen @code{[} und -@code{]} (AltGr+8 bzw. 9) markiert. - -@lilypond[quote,relative=1,verbatim] -{ - r4 r8[ g' a r8] r8 g[ | a] r8 -} -@end lilypond - -@funindex \noBeam -@funindex noBeam - -Einzelne Noten können mit dem Befehl @code{\noBeam} markiert werden, -damit sie nicht mit einem Balken versehen werden. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\time 2/4 c8 c\noBeam c c -@end lilypond - -@funindex stemLeftBeamCount -@funindex stemRightBeamCount - -Noch bessere manuelle Kontrolle über die Balken kann durch Setzen -der Eigenschaften @code{stemLeftBeamCount} und -@code{stemRightBeamCount} erreicht werden. Sie bestimmen -die Anzahl von Balken, die rechts und links vom Hals der nächsten -Note gesetzt werden sollen. Wenn eine Eigenschaften gesetzt ist, -wird ihr Wert nur einmal eingesetzt und dann wieder auf Null gesetzt. -Im folgenden Beispiel hat das letzte @code{f} nur einen Balken -an seiner linken Seite (der als Achtelbalken der gesamten -Gruppe gewertet wird). - -@lilypond[quote,relative=2,verbatim] -a8[ r16 f g a] -a8[ r16 -\set stemLeftBeamCount = #2 -\set stemRightBeamCount = #1 -f -\set stemLeftBeamCount = #1 -g a] -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{flat-flags-and-beam-nibs.ly} - - -@node Feathered beams -@unnumberedsubsubsec Feathered beams - -@cindex Balken, gespreizt -@cindex gespreizte Balken - -@funindex featherDurations -@funindex \featherDurations -@funindex grow-direction - -Gespreizte Balken werden teilweise eingesetzt um anzuzeigen, dass -kleine Notengruppen in beschleunigendem oder verlangsamendem Tempo -gespielt werden sollen, ohne dass sich das Tempo des Stückes -verändert. Die Reichweite der gespreizten Balken muss manuell -mit @code{[} und @code{]} angegeben werden und die Spreizung wird -kontrolliert, indem der Balken-Eigenschaft @code{grow-direction} -eine Richtung zugewiesen wird. - -Wenn die Anordnung der Noten und die MIDI-Ausgabe das Ritardando -oder Accelerando, wie es die Spreizung angibt, reflektieren soll, -müssen die Noten als ein musikalischer Ausdruck notiert werden, -der von geschweiften Klammern umgeben ist und dem ein -@code{featheredDurations}-(gespreizteDauern)-Befehl vorangestellt -ist, der das Verhaltnis der ersten und letzten Dauer definiert. - -Die eckigen Klammern geben die Reichweite des Balkens an und die -geschweiften Klammern zeigen, auf welche Noten sich die Veränderung -der Dauern auswirkt. Normalerweise bezieht sich das auf die -selbe Notengruppe, aber das ist nicht unbedingt erforderlich: beide -Befehle sind unabhängig voneinander. - -Im folgenden Beispiel nehmen die acht 16-Noten exakt die gleiche -Zeit ein wie eine halbe Note, aber die erste Note ist halb so lang -wie die letzte der Gruppe, und die Noten dazwischen werden stufenweise -verlängert. Die ersten vier 32-Noten beschleunigen stufenweise -das Tempo, während die darauffolgenden vier 32-Noten ein -gleichmäßiges Tempo haben. - -@lilypond[relative=1,verbatim,quote] -\override Beam #'grow-direction = #LEFT -\featherDurations #(ly:make-moment 2 1) -{ c16[ c c c c c c c] } -\override Beam #'grow-direction = #RIGHT -\featherDurations #(ly:make-moment 2 3) -{ c32[ d e f] } -% revert to non-feathered beams -\override Beam #'grow-direction = #'() -{ g32[ a b c] } -@end lilypond - -@noindent -Die Platzierung der Noten im Druckbild entspricht den Notendauern -nur annähernd, aber die MIDI-Ausgabe ist exakt. - -@knownissues - -Der @code{\featherDurations}-Befehl funktioniert nur mit kurzen -Notenabschnitten, und wenn die Zahlen in den Brüchen klein -sind. - -@seealso -Snippets: -@rlsr{Rhythms}. - - -@node Bars -@subsection Bars - -@menu -* Bar lines:: -* Bar numbers:: -* Bar and bar number checks:: -* Rehearsal marks:: -@end menu - -@node Bar lines -@unnumberedsubsubsec Bar lines - -@cindex Taktlinien -@cindex Taktstriche -@cindex Doppellinie -@cindex Wiederholungszeichen - -@funindex \bar -@funindex bar - -Taktstriche trennen Takte voneinander, werden aber auch verwendet, -um Wiederholungen anzuzeigen. Normalerweise werden sie automatisch -nach Vorgabe der aktuellen Taktart eingefügt. - -Die einfachen, automatisch eingefügten Taktstriche können mit dem -@code{\bar}-Befehl geändert werden. Eine doppelter Tatkstrich etwa -wird normalerweise am Ende eines Stückes gesetzt: - -@lilypond[quote,relative=1,verbatim] -e4 d c2 \bar "|." -@end lilypond - -Es ist kein Fehler, wenn die letzte Note in einem Takt nicht -zum automatisch eingefügten Taktstrich aufhört: es wird angenommen, -dass die Note im nächsten Takt weitergeht. Wenn aber eine ganze -Reihe solcher überlappenden Takte auftritt, können die Noten -gedrungen aussehen oder sogar über den Seitenrand hinausragen. Das -kommt daher, dass Zeilenumbrüche nur dann vorgenommen werden, wenn -ein vollständiger Takt auftritt, also ein Takt, an dem alle Noten -vor dem Taktstrich zu Ende sind. - -@warning{Eine falsche Dauer kann bewirken, dass Zeilenumbrüche -verhindert werden, woraus resultiert, dass die Noten entweder -sehr stark gedrängt auf der Zeile notiert werden, oder die Zeile -über den Seitenrand hinausragt.} - -@cindex Zeilenumbrüche -@cindex unsichtbare Taktstriche -@cindex Taktstriche, unsichtbar -@cindex Taktlinien, unsichtbar - -Zeilenumbrüche werden erlaubt, wenn ein Taktstrich manuell eingefügt -wird, auch, wenn es sich um keinen vollständigen Takt handelt. Um -einen Zeilenumbruch zu erlauben, ohne den Taktstrich auszugeben, -kann - -@example -\bar "" -@end example - -@noindent -benutzt werden. Damit wird ein unsichtbarer Taktstrich an dieser Stelle eingefügt -und damit ein Zeilenumbruch erlaubt (aber nicht erzwungen), ohne -dass sich die Anzahl der Takte erhöhen würde. Um einen -Zeilenumbruch zu erzwingen, siehe -@ref{Line breaking}. - -@cindex manuelle Taktstriche -@cindex Taktstriche, manuell -@cindex Taktlinene, manuell - -Diese Art von Taktstrichen und auch andere besondere Taktstriche -können manuell an jeder Stelle in der Partitur eingefügt werden. -Wenn sie mit dem Ende eines Taktes übereinstimmen, wird der -automatische Taktstrich durch den manuellen ersetzt. Diese -manuellen Einfügungen haben keine Auswirkung auf die Zählung und -Position der folgenden automatischen Taktstriche. - -Manuell können der einfache Taktstrich und zusätzlich fünf Arten -eines doppelten Taktstriches gesetzt werden: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|" g \bar "||" a \bar ".|" b \bar ".|." c \bar "|.|" d \bar "|." e -@end lilypond - -Zusätzlich gibt es noch punktierte und gestrichelte Taktstriche: - -@lilypond[quote,relative=1,verbatim] -f1 \bar ":" g \bar "dashed" a -@end lilypond - -@noindent -und fünf unterschiedliche Wiederholungstaktstriche: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|:" g \bar ":|:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|" d -@end lilypond - -@cindex Wiederholungen - -Auch wenn die Taktlinien, die Wiederholungen angeben, manuell -eingefügt werden können, wird die Wiederholung dadurch nicht von -LilyPond erkannt. Wiederholte Stellen werden besser notiert, indem -man die Wiederholguns-Befehle einsetzt, die automatische die -richtigen Taktlinien setzen. Das ist beschrieben in@ref{Repeats}. - -Zusätzlich kann noch @code{"||:"} verwendet werden, dass sich -genauso wie @code{"|:"} verhält, außer bei Zeilenumbrüchen, wo ein -doppeltre Taktstrich am Ende der Zeile ausgegeben wird und ein -öffnender Wiederholungsstrich am Anfang der nächsten Zeile. - -@lilypond[quote,relative=2,verbatim] -\override Score.RehearsalMark #'padding = #3 -c c c c -\bar "||:" -c c c c \break -\bar "||:" -c c c c -@end lilypond - -In Partituren mit vielen Systemen wird ein @code{\bar}-Befehl in einem -System automatisch auf alle anderen Systeme angewendet. Die resultierenden -Taktstriche sind miteinander verbunden innerhalb einer Gruppe -(@code{StaffGroup}) oder einem Klaviersystem -(@code{PianoStaff} bzw. (@code{GrandStaff}). - -@lilypond[quote,fragment,verbatim] -<< - \new StaffGroup << - \new Staff { - e'4 d' - \bar "||" - f' e' - } - \new Staff { \clef bass c4 g e g } - >> - \new Staff { \clef bass c2 c2 } ->> -@end lilypond - - -@snippets - -@funindex whichBar -@funindex defaultBarType -@funindex \bar -@funindex bar -@funindex bartype - -Der Befehl @code{\bar }@var{Taktart} ist eine Kurzform von: -@code{\set Timing.whichBar = }@var{Taktart}. Immer, wenn -@code{whichBar} auf einen Wert gesetzt wird, wird ein -Taktstrich dieses Typs erzeugt. - -Der automatisch erzeugte Taktstrich ist @code{"|"}. Das kann -jederzeit durch den Befehl @code{\set Timing.defaultBarType = } -@var{Takstrichart} geändert werden. - -@seealso -Notationsreferenz: -@ref{Line breaking}, -@ref{Repeats}, -@ref{Grouping staves}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{BarLine} (created at -@rinternals{Staff} level), @rinternals{SpanBar} (across -staves), @rinternals{Timing_translator} (for Timing -properties). - - - -@node Bar numbers -@unnumberedsubsubsec Bar numbers - -@cindex Taktnummern -@cindex Nummierung von Takten -@cindex Zahl eines Taktes -@cindex Taktzahlen - -@funindex currentBarNumber - -Taktnummern werden standardmäßig zu Beginn eines jeden Systems -ausgegeben, ausgenommen ist die erste Zeile. Die Zahl selber -wird in der @code{currentBarNumber}-Eigenschaft gespeichert, die -normalerweise für jeden Takt aktualisiert wird. Sie kann aber auch -manuell gesetzt werden: - -@lilypond[verbatim,quote,fragment,relative=1] -c1 c c c -\break -\set Score.currentBarNumber = #50 -c1 c c c -@end lilypond - - -@snippets - -@funindex barNumberVisibility - -@cindex Taktnummern, regelmäßiger Abstand - -@c Uncomment this after next LSR update. -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {printing-the-bar-number-for-the-first-measure.ly} - -Taktnummern können in regelmäßigem Abstand ausgegeben werden, -anstatt dass sie nur am Beginn des Systems erscheinen. Um das -zu erreichen, muss die Standardeinstellung verändert werden, um -zu erlauben, dass Taktnummern an anderen Stellen als dem -Beginn von Systemen ausgegeben werden. Das wird mit der -Eigenschaft @code{break-visibility} von @code{BarNumber} vorgenommen. -Sie braucht drei Werte, die auf @code{#t} (wahr) oder @code{#f} -(falsch) gestellt werden können, womit angegeben wird, ob die -Taktnummer an der entprechenden Stelle sichtbar ist. Die -Reihenfolge der Werte ist: @var{Ende der Zeile}, @var{Mitte -der Zeile} und @var{Beginn der Zeile}. Im folgenden -Beispiel werden die Taktlinien überall ausgegeben: - -@lilypond[verbatim,quote,relative=1] -\override Score.BarNumber #'break-visibility = #'#(#t #t #t) -\set Score.currentBarNumber = #11 -\bar "" % Permit first bar number to be printed -c1 c c c -\break -c c c c -@end lilypond - -@c All the rest of these examples will be added to LSR -@c and moved into the Snippets. -gp - -Im nächsten Beispiel werden die Taktnummern nur für jeden -zweiten Takt gesetzt, außer am Ende der Zeile: - -@lilypond[verbatim,quote,relative=1] -\override Score.BarNumber #'break-visibility = #'#(#f #t #t) -\set Score.currentBarNumber = #11 -\bar "" % Permit first bar number to be printed -% Print a bar number every second measure -\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) -c1 c c c c -\break -c c c c c -@end lilypond - -@cindex Taktnummer, Form -@cindex Aussehen von Taktnummern - -Die Größe der Taktnummer kann geändert werden. Das wird im folgenden -Beispiel gezeigt, welches auch illustriert, wie man Taktnummern -in Kästen oder Kreise einfasst und eine Alternative zeigt, -wie man @code{#(#f #t #t)} für @code{break-visibility} definieren -kann. - -@lilypond[verbatim,quote,relative=1] -% Prevent bar numbers at the end of a line and permit them elsewhere -\override Score.BarNumber #'break-visibility - = #end-of-line-invisible - -% Increase the size of the bar number by 2 -\override Score.BarNumber #'font-size = #2 -\repeat unfold 3 { c1 } \bar "|" - -% Draw a box round the following bar number(s) -\override Score.BarNumber #'stencil - = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) -\repeat unfold 3 { c1 } \bar "|" - -% Draw a circle round the following bar number(s) -\override Score.BarNumber #'stencil - = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) -\repeat unfold 4 { c1 } \bar "|." -@end lilypond - -@cindex Ausrichtung von Taktlinien -@cindex Taktlinien, Ausrichtung - -Taktnummern sind standardmäßig links von ihrem Anker angeordnet. -Der Anker ist meistens das linke Ende einer Zeile, oder, wenn die -Zahlen innerhalb der Zeile gesetzt werden, die linke Taktlinie -eines Taktes. Die Nummern können auch direkt auf der Taktlinie -positioniert oder rechts davon gesetzt werden: - -@lilypond[verbatim,quote,relative=1] -\set Score.currentBarNumber = #111 -\override Score.BarNumber #'break-visibility = #'#(#t #t #t) -% Increase the size of the bar number by 2 -\override Score.BarNumber #'font-size = #2 -% Print a bar number every second measure -\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) -c1 c1 -% Center-align bar numbers -\override Score.BarNumber #'self-alignment-X = #0 -c1 c1 -% Right-align bar numbers -\override Score.BarNumber #'self-alignment-X = #-1 -c1 c1 -@end lilypond - -Taktnummern können vollständig entfernt werden, indem man den -@code{Bar_number_engraver} aus dem @code{Score}-Kontext entfernt. - -@lilypond[verbatim,quote] -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} -\relative c''{ - c4 c c c \break - c4 c c c -} -@end lilypond - - -@seealso -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{BarNumber}. - -@cindex Taktnummern, Zusammenstöße -@cindex Zusammenstöße, Taktnummern - -@knownissues - -Taktnummern können mit der oberen Ecke der Klammer zu Beginn des -Systems zusammenstoßen. Um das zu verhindert, kann die -@code{padding}-Eigenschaft von @code{BarNumer} verwendet werden, -um die Zahl zu verschieben. - - -@node Bar and bar number checks -@unnumberedsubsubsec Bar and bar number checks - -@cindex Taktüberprüfung -@funindex barCheckSynchronize -@funindex | - -Die Taktüberprüfung hilft, Fehler in den Notendauern zu entdecken. -Eine Taktüberprüfung wird mit dem Taktstrichsymbol @qq{|} (Taste AltGr+<) -eingegeben. Immer, wenn LilyPond bei der Ausgabe des Notendrucks -auf dieses Zeichen stößt, sollte hier in den Noten auch ein -Taktstrich erscheinen. Wenn das nicht der Fall ist, wird eine Warnung -ausgegeben. Im nächsten Beispiel resultiert die zweite Taktüberprüfung -in einer Fehlermeldung. - -@example -\time 3/4 c2 e4 | g2 | -@end example - -Taktüberprüfungen können auch in Gesangstexten verwendet werden: - -@example -\lyricmode @{ - \time 2/4 - Twin -- kle | Twin -- kle -@} -@end example - -Besonders in mehrstimmiger komplizierter Musik können -falschen Notenwerte die ganze Partitur durcheinander bringen. -Es lohnt sich also, die Fehlersuche damit zu beginnen, nicht bestandene -Taktüberprüfungen zu kontrollieren. - -Wenn aufeinander folgende Taktüberprüfungen mit dem gleichen -Abstand Fehler produzieren, wird eventuell nur die erste Warnung -ausgegeben. Damit wird die Warnung auf den Ursprung de Fehlers -fokussiert. - -@funindex | -@funindex pipeSymbol - -Es ist auch möglich, die Bedeutung des Symbols @code{|} -umzudefinieren, so dass hiermit eine andere Aktion als eine -Taktüberprüfung erreicht wird. -Das geschieht, indem man der Pipe (@code{pipeSymbol} einen musikalischen -Ausdruck zuweist. Im nächsten Beispiel wird @code{|} dazu -verwendet, eine doppelte Taktlinie auszugeben, woimmer man -das Zeichen auchsetzt. Gleichzeitig hört das Zeichen auf, -als Taktüberprüfung zu funktionieren. - -@lilypond[quote,verbatim] -pipeSymbol = \bar "||" -{ - c'2 c'2 | - c'2 c'2 - c'2 | c'2 - c'2 c'2 -} -@end lilypond - -@funindex \barNumberCheck -@funindex barNumberCheck - -Wenn man größere Musikstücke kopiert, kann es hilfreich sein, wenn -LilyPond überprüft, ob die Taktnummer, in der Sie gerade kopieren, -mit der des Originales übereinstimmt. Das kann mit dem Befehl -@code{\barNumberCheck} folgenderweise überprüft werden: - -@verbatim -\barNumberCheck #123 -@end verbatim - -@noindent -Eine Warnung wird ausgegeben, wenn der interne Zähler -@code{currentBarNumber} von LilyPond -nicht mit dem Wert 123 übereinstimmt. - - - -@node Rehearsal marks -@unnumberedsubsubsec Rehearsal marks - -@cindex Übungszeichen -@cindex Abschnitte markieren - -@funindex mark -@funindex \mark - -Übungszeichen können mit dem @code{\mark}-Befehl ausgegeben werden: - -@lilypond[quote,verbatim,relative=2] -c1 \mark \default -c1 \mark \default -c1 \mark #8 -c1 \mark \default -c1 \mark \default -@end lilypond - -@noindent -Der Buchstabe@tie{}@qq{I} wird ausgelassen, was den allgemeinen -Notensatzregeln entspricht. Wenn Sie dennoch den Buchstaben -@qq{I} benutzen, wollen, müssen Sie - -@example -\set Score.markFormatter = #format-mark-alphabet -@end example - -@noindent -benutzen. - -Das Zeichen wird automatisch erhöht, wenn Sie @code{\mark -\default} schreiben, aber Sie können auch eine beliebige -Ganzzahl als Argument angeben. Der Wert, der gesetzt werden -soll, wird in der Eigenschaft @code{rehearsalMark} gespeichert. - -@cindex Übungszeichen formatieren -@cindex Stil von Übungszeichen -@cindex Übungszeichenstil -@cindex Art der Übungszeichen -@cindex Zeichen, Übung: Formatierung -@cindex manuelles Übungszeichen -@cindex Formatierung von Übungszeichen - -Der Stil der Übungszeichen wird von der Eigenschaft @code{markFormatter} definiert. Das ist eine Funktion, die -das aktuelle Zeichen und den aktuellen Kontext als Argument -annimmt. Sie gibt dann ein Textbeschriftungsobjekt aus. Im -folgenden Beispiel ist @code{markFormatter} so definiert, dass -eine Zahl ausgegeben wird. In den folgenden Takten -werden dann andere mögliche Einstellungen gezeigt. - -@lilypond[quote,verbatim,relative=2] -\set Score.markFormatter = #format-mark-numbers -c1 \mark \default -c1 \mark \default -\set Score.markFormatter = #format-mark-box-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-letters -c1 -@end lilypond - -Die Datei @file{scm/@/translation@/-functions@/.scm} beinhaltet -die Definitionen für @code{format-mark-numbers} (erstelle-Zeichen-Nummern), -@code{format-mark-box-numbers} (erstelle-Zeichen-Kasten-Nummern), -@code{format-mark-letters} (erstelle-Zeichen-Buchstaben) und -@code{format-mark-box-letters} (erstelle-Zeichen-Kasten-Buchstaben). Sie können als Anleitung -für eigene Formatierungsfunktionen dienen. - -Die Funktionen @code{format-mark-barnumbers}, -@code{format-mark-box-barnumbers}und -@code{format-mark-circle-barnumbers} könenn eingesetzt werden, -um Taktnummern anstelle der fortlaufenden Zahlen bzw. Buchstaben -zu erhalten. - -Andere Übungszeichenstile können auch manuell gesetzt werden: - -@example -\mark "A1" -@end example - -@noindent -@code{Score.markFormatter} hat keine Auswirkungen auf solcherart -definierte Zeichen. Man kann aber auch mit @code{\markup} -Textbeschriftungsobjekte zu dem selbstdefinierten Zeichen -hinzufügen: - -@example -\mark \markup@{ \box A1 @} -@end example - -@cindex Segno -@cindex Coda -@cindex D.S al Fine -@cindex Dal Segno -@cindex Fermate -@cindex Noten-Schriftzeichen -@cindex Schriftzeichen, Notenschrift -@cindex Musikbuchstaben - -@funindex \musicglyph -@funindex musicglyph - -Musikbuchstaben (wie etwa das Segno-Zeichen) können mit dem Befehl -@code{\musicglyph} als ein -@code{\mark}-Zeichen definierte werden: - -@lilypond[quote,verbatim,relative=1] -c1 \mark \markup { \musicglyph #"scripts.segno" } -c1 \mark \markup { \musicglyph #"scripts.coda" } -c1 \mark \markup { \musicglyph #"scripts.ufermata" } -c1 -@end lilypond - -@noindent -Siehe @ref{The Feta font}, wo alle Symbole gezeigt sind, die -mit dem Befehl @code{\musicglyph} ausgegeben werden können. - -Übliche Veränderungen der Positionierung von Übungszeichen finden -sich in -@ref{Formatting text}. - -@seealso -Notationsreferenz: -@ref{The Feta font}, -@ref{Formatting text}. - -Installierte Dateien: -@file{scm/@/translation@/-functions@/.scm} beinhaltet die Definition -von @code{format-mark-numbers} und -@code{format-mark-letters}. Sie können als Anleitung für eigene -Funktionen benutzt werden. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{RehearsalMark}. - - -@node Special rhythmic concerns -@subsection Special rhythmic concerns - -@menu -* Grace notes:: -* Aligning to cadenzas:: -* Time administration:: -@end menu - -@node Grace notes -@unnumberedsubsubsec Grace notes - -@funindex \grace -@funindex grace - -@cindex Verzierungen -@cindex Ziernoten -@cindex Vorhalt -@cindex Vorschlag -@cindex Ornamente - -Verzierungen sind ausgeschriebene Verzierungen. Sie werden in -einer kleineren Schriftgröße gesetzt und nehmen keine logische -Zeit im Takt ein. - -@lilypond[quote,relative=2,verbatim] -c4 \grace c16 c4 -\grace { c16[ d16] } c2 -@end lilypond - -LilyPond hat auch Unterstützung für zwei besondere Verzierungen, -den Vorschlag und den Vorhalt. Der Vorschlag wird durch eine -verkleinerte Note mit Schrägstrich -und Bogen notiert. Der Vorhalt dagegen ist eine Verzierung, die -einen bestimmten Notenwert der Hauptnote für sich beansprucht. -Er wird als verkleinerte Note ohne Schrägstrich notiert. - -@lilypond[quote,relative=2,verbatim] -\grace c8 b4 -\acciaccatura d8 c4 -\appoggiatura e8 d4 -\acciaccatura { g16[ f] } e4 -@end lilypond - -Die Position von Verzierungen ist zwischen Notensystemen -synchronisiert. Im nächsten Beispiel stehen im einen -System zwei 16-Noten für jede 8-Note des zweiten Systems: - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e2 \grace { c16[ d e f] } e2 } - \new Staff { c2 \grace { g8[ b] } c2 } >> -@end lilypond - -@funindex \afterGrace -@funindex afterGrace - -@cindex Verzierung, danach -@cindex Nachschlag - -Wenn Sie eine Note mit einer Verzierung abschließen wollen, müssen -Sie den @code{\afterGrace}-Befehl benutzen. Er benötigt zwei -Argumente: die Hauptnote und die Verzierung, die nach der -Hauptnote folgen soll: - -@lilypond[quote,verbatim,relative=2] -c1 \afterGrace d1 { c16[ d] } c1 -@end lilypond - -Damit wird die Verzierung mit einem Abstand von der Hauptnote -gesetzt, der 3/4 der Dauer der Hauptnote entspricht. Dieser -Standard kann durch Definition von @code{afterGraceFraction} -verändert werden. Das nächste Beispiel zeigt, wie sich -der Abstand verändert, wenn der Wert 3/4, 15/16 und 1/2 der -Hauptnote beträgt. - -@lilypond[quote,verbatim,relative=2] -<< - \new Staff { - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 15 16)) - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 1 2)) - c1 \afterGrace d1 { c16[ d] } c1 - } ->> -@end lilypond - -Der Abstand zwischen der Hauptnote und der Verzierung kann auch -mit unsichtbaren Noten beeinflusst werden. Im nächsten Beispiel -wird die Verzierung mit einem Abstand von 7/8 zur Hauptnote -gesetzt. - -@lilypond[quote,verbatim,relative=2] -\new Voice { - << { d1^\trill_( } - { s2 s4. \grace { c16[ d] } } >> - c1) -} -@end lilypond - -Ein @code{\grace}-Notenabschnitt wird nach besonderen Satzregeln -gesetzt, um z. B. kleinere Noten zu benutzen und die Richtung der -Hälse einzustellen. Veränderungen am Layout müssen also innerhalb -des Verzierungsausdrucks gesetzt werden, damit sie auch eine Auswirkung haben. Die Veränderungen müssen auch innerhalb des -Verzierungsausdrucks rückgängig gemacht werden. In diesem -Fall wird die Richtung der Hälse geändert und dann wieder der -Standard eingestellt: - -@lilypond[quote,verbatim,relative=2] -\new Voice { - \acciaccatura { - \stemDown - f16-> - \stemNeutral - } - g4 e c2 -} -@end lilypond - -@cindex Hals, mit Schrägstrich -@cindex durchgestrichener Hals -@cindex Notenhals, durchgestrichen - - -@snippets - -The slash through the stem found in @emph{acciaccatura}s can be applied -in other situations: - -@lilypond[quote,verbatim,relative=2] -\relative c'' { - \override Stem #'stroke-style = #"grace" - c8( d2) e8( f4) -} -@end lilypond - -The layout of grace expressions can be changed throughout the -music using the function @code{add-grace-property}. The following -example undefines the @code{Stem} direction for this grace, so -that stems do not always point up. - -@lilypond[quote,verbatim,relative=2] -\relative c'' { - \new Staff { - #(add-grace-property 'Voice 'Stem 'direction ly:stem::calc-direction) - #(remove-grace-property 'Voice 'Stem 'direction) - \new Voice { - \acciaccatura { f16 } g4 - \grace { d16[ e] } f4 - \appoggiatura { a,32[ b c d] } e2 - } - } -} -@end lilypond - -Another option is to change the variables @code{startGraceMusic}, -@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, -@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic}, -@code{stopAppoggiaturaMusic}. The default values of these can be -seen in the file @code{ly/@/grace@/-init@/.ly}. By redefining -them other effects may be obtained. - -Grace notes may be forced to align with regular notes -in other staves: - -@lilypond[verbatim,quote] -\relative c'' { - << - \override Score.SpacingSpanner #'strict-grace-spacing = ##t - \new Staff { - c4 - \afterGrace c4 { c16[ c8 c16] } - c4 r - } - \new Staff { - c16 c c c c c c c c4 r - } - >> -} -@end lilypond - - -@seealso -Glossar: -@rglos{grace notes}, -@rglos{acciaccatura}, -@rglos{appoggiatura}. - -Installierte Dateien: -@file{ly/@/grace@/-init@/.ly}. - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{GraceMusic}. - - -@knownissues - -Eine Partitur, die mit einem @code{\grace}-Ausdruck beginnt, benötigt -eine explizit gesetzte neue Stimme (@code{\new Voice}), sonst werden -Hauptnote und Verzierung auf verschiedenen Systemen gesetzt. - -Ein Vorschlag (@emph{acciaccatura}) mit mehreren Noten und -Balken wird ohne den Schrägstrich gesetzt und sieht einem -Vorhalt (@emph{appoggiatura}) sehr ähnlich. - -@c TODO Add link to LSR snippet to add slash when available - -Die Synchronisation von Verzierungen kann auch zu Überraschungen führen. -Auch andere Symbole der Systeme, wie Vorzeichen, Taktlinien usw., werden -synchronisiert. Vorsicht ist geboten, wenn nur in bestimmten Systemen -Verzierungen vorkommen: - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e4 \bar "|:" \grace c16 d4 } - \new Staff { c4 \bar "|:" d4 } >> -@end lilypond - -@noindent -Dem kann abgeholfen werden, indem unsichtbare Verzierungsnoten der selben -Länge in die anderen Systeme gesetzt werden. Im obigen Beispiel müsste -also - -@lilypond[quote,ragged-right,relative=2,verbatim,fragment] -<< \new Staff { e4 \bar "|:" \grace c16 d4 } - \new Staff { c4 \bar "|:" \grace s16 d4 } >> -@end lilypond - -@noindent gesetzt werden. - -Verzierungsabschnitte sollten nur innerhalb von sequentiellen musikalischen -Ausdrücken benützt werden. Wenn sie ineinandergeschachtelt werden, kann es -zu Fehlermeldungen oder Abstürzen kommen. - - -@node Aligning to cadenzas -@unnumberedsubsubsec Aligning to cadenzas - -@cindex Kadenz, Ausrichten an -@cindex Ausrichten an Kadenz - -In Orchesterpartituren stellen Kadenzen ein besonderes Problem dar: -Wenn in der Partitur ein Instrument eine Kadenz spielt, die notiert -wird, müssen die anderen Stimmen genau die entsprechende Anzahl Noten -überspringen, damit sie nicht zu früh oder zu spät einsetzen. - -Eine Lösung ist es, die Funktionen @code{mmrest-of-length} oder -@code{skip-of-length} zu benutzen. Diese Scheme-Funktionen -brauchen einen definierten Notenabschnitt (eine Variable) -als Argument und produzieren entweder Ganztaktpausen oder leere -Takte, die genauso lang sind wie der Notenabschnitt. - -@lilypond[verbatim,quote] -MyCadenza = \relative c' { - c4 d8 e f g g4 - f2 g4 g -} - -\new GrandStaff << - \new Staff { - \MyCadenza c'1 - \MyCadenza c'1 - } - \new Staff { - #(ly:export (mmrest-of-length MyCadenza)) - c'1 - #(ly:export (skip-of-length MyCadenza)) - c'1 - } ->> -@end lilypond - -@seealso -Glossar: -@rglos{cadenza}. - -Schnipsel: -@rlsr{Rhythms}. - - - -@node Time administration -@unnumberedsubsubsec Time administration - -@cindex Verwaltung der Zeiteinheiten -@cindex Zeit (in der Partitur) -@cindex Noten ohne Takt -@cindex Takt, Noten ohne -@cindex Noten ohne Metrum -@cindex Metrum, Noten ohne - -@funindex currentBarNumber -@funindex measurePosition -@funindex measureLength - -Die Zeit in einer Partitur wird vom @code{Timing_translator} -verwaltet, der sich in den Standardeinstellungen im @code{Score}-Kontext -befindet. Eine Parallelbezeichnung, @code{Timing}, wird -dem Kontext hinzugefügt, in dem sich @code{Timing_translator} -befindet. - -Die folgenden Eigenschaften von @code{Timing} werden eingesetzt, -um die Zeit in Partituren zu verwalten. - -@cindex Taktnummer - -@table @code -@item currentBarNumber (aktuelle Taktnummer) -Die gerade aktuelle Taktzahl. Für ein Beispiel, das die Benutzung -dieser Eigenschaft zeigt, siehe @ref{Bar numbers}. - -@item measureLength (Taktlänge) -Die Länge der Takte mit der aktuellen Taktart. In einem 4/4-Takt -ist sie 1, in einem 6/8-Takt 3/4. Dieser Wert bestimmt, wann -eine Taktlinie gezogen wird und wie automatische Balken erstellt -werden sollen. - -@item measurePosition (Taktposition) -Der Schlag im Takt zum aktuellen Moment. Dieser Wert wird -zurückgesetzt, indem @code{measureLength} (die Taktlänge) abgezogen -wird, wenn der Wert von @code{measureLength} erreicht oder -überschritten wird. Wenn das passiert, wird der Zähler -@code{currentBarNumber} (aktuelle Taktnummer) erhöht. - -@item timing (Zeitberechnung) -Wenn auf wahr gesetzt, werden die oben genannten Variablen -zu jedem Zeitpunkt aktualisiert. Wenn auf falsch gesetzt, -bleibt der Engraver unendlich lange im aktuellen Takt. - -@end table - -Zeitverwaltung kann geändert werden, indem man diese Variablen -direkt beeinflusst. Im nächsten Beispiel wird die normale -Taktart mit 4/4 angegeben, aber @code{measureLength} wird -auf 5/4 gesetzt. An der Stelle 4/8 des dritten Taktes wird die -Taktposition (@code{measurePosition}) um 1/8 auf 5/8 erhöht, so -dass der Takt im Ergebnis 1/8 kürzer ist. Die nächste Taktlinie -wird dann auch bei 9/8 gezogen und nicht bei 5/4. - -@lilypond[quote,verbatim,relative=1] -\set Score.measureLength = #(ly:make-moment 5 4) -c1 c4 -c1 c4 -c4 c4 -\set Score.measurePosition = #(ly:make-moment 5 8) -b4 b4 b8 -c4 c1 -@end lilypond - -@noindent -Wie das Beispiel zeigt, erstellt @code{ly:make-moment n m} -die Dauer Zähler/Nenner einer ganzen Note. Zum Beispiel heißt -@code{ly:make-moment 1 8} die Dauer einer Achtelnote, und -@code{ly:make-moment 7 16} die Dauer von sieben Sechszehntelnoten. - - -@seealso -Notationsreferenz: -@ref{Bar numbers}, @ref{Unmetered music} - -Schnipsel: -@rlsr{Rhythms}. - -Referenz der Interna: -@rinternals{Timing_translator}, -@rinternals{Score} - - - diff --git a/Documentation/de/user/running.itely b/Documentation/de/user/running.itely deleted file mode 100644 index 4592fccd00..0000000000 --- a/Documentation/de/user/running.itely +++ /dev/null @@ -1,694 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Reinhold Kainhofer, Till Rettig - -@node Running LilyPond -@chapter Running LilyPond - -Dieses Kapitel behandelt die technischen Details, wie Lilypond ausgeführt werden kann. - - -@menu -* Normal usage:: -* Command-line usage:: -* Error messages:: -* Updating files with convert-ly:: -* Reporting bugs:: -@end menu - -@node Normal usage -@section Normal usage - -Die meisten Benutzer führen LilyPond von einer graphischen Benutzeroberfläche -aus. Siehe @rlearning{First steps}, falls Sie dies nicht bereits getan haben. - - -@node Command-line usage -@section Command-line usage - -Dieser Abschnitt enthält zusätzliche Informationen, wie Sie LilyPond -von der Kommandozeile ausführen können. Dies kann erforderlich sein, -um etwa zusätzliche Optionen an das Programm zu übergeben. Außerdem -sind einige Zusatzprogramme (wie etwa @code{midi2ly}) nur von der -Kommandozeile verfügbar. - -Unter @q{Kommandozeile} verstehen wir die Kommandozeile des jeweiligen -Betriebssystems. Windows Benutzern ist sie vielleicht eher unter den -englischen Begriffen @q{DOS shell} oder @q{command shell} bekannt. -MacOS@tie{}X Benutzer kennen sie eher unter @q{Terminal} oder @q{Konsole}. -Sie sollten auch den Abschnitt @ref{Setup for MacOS X} konsultieren. - -Wie die Kommandozeile im jeweiligen Betriebssystem benutzt werden kann, -soll in diesem Handbuch nicht näher beschrieben werden. Sehen Sie bitte -im Handbuch Ihres Betriebssystems nach oder informieren Sie sich im -Internet, wenn Sie mit der Kommandozeile nicht vertraut sind. - - -@menu -* Invoking lilypond:: -* Command line options for lilypond:: -* Environment variables:: -@end menu - -@node Invoking lilypond -@subsection Invoking @command{lilypond} - -@cindex @command{lilypond} aufrufen -@cindex Kommandozeilen-Optionen für @command{lilypond} -@cindex Optionen an der Kommandozeile - -Das @command{lilypond} Programm kann folgendermaßen von der Kommandozeile -aufgerufen werden. - -@example -lilypond [@var{Option}]@dots{} @var{Dateiname}@dots{} -@end example - - -Wird ein @file{Dateiname} ohne Erweiterung angegeben, so wird @file{.ly} als -Standarderweiterung für LilyPond-Dateien benutzt. Um Daten von -@code{stdin} einzulesen, benutzen Sie einfach einen Bindestrich (@code{-}) -als @var{Dateiname}. - -Wenn Lilypond die Datei @file{Dateiname.ly} verarbeitet, werden daraus -die Dateien @file{Dateiname.ps} und @file{Dateiname.pdf} erzeugt. -Es können an @code{lilypond} auch mehrere @file{.ly} Dateien übergeben -werden, die dann einzeln und voneinander unabhängig abgearbeitet -werden.@footnote{Der Zustand von GUILE wird allerdings nicht nach -jeder Datei zurückgesetzt, sodass Achtung geboten ist, wenn in einer -Datei globale Änderungen von Scheme aus durchgeführt werden.} - -Falls @file{Dateiname.ly} mehr als einen @code{\score}-Block enthält, -werden die weiteren Stücke in durchnummerierte Dateien der Form -@file{Dateiname-1.pdf} ausgegeben. Zusätzlich wird der Wert der -Variable @code{output-suffix} zwischen den ursprünglichen Dateienamen -und der Zahl eingefügt. Eine Lilypond-Datei @var{Dateiname.ly} mit dem Inhalt - -@example -#(define output-suffix "Geige") -\book @{ @dots{} @} -#(define output-suffix "Cello") -\book @{ @dots{} @} -@end example - -@noindent -erzeugt daher die Dateien @var{Dateiname}@file{-Geige.pdf} und -@var{Dateiname}@file{-Cello-1.pdf}. - - - -@node Command line options for lilypond -@subsection Command line options for @command{lilypond} - -Die folgenden Kommandozeilenoptionen werden von @command{lilypond} unterstützt: - -@table @code - -@item -e,--evaluate=@var{expr} -Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien -gelesen und interpretiert werden. -Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke -werden nacheinander ausgewertet. - -Da der Ausdruck im @code{guile-user} Modul ausgewertet wird, ist bei der -Definitionen innerhalb von @var{expr} folgendes Vorgehen nötig. An der -Kommandozeile wird z.B. @code{a} im @code{guile-user} Modul definiert: - -@example -lilypond -e '(define-public a 42)' -@end example - -@noindent -Am Beginn der @file{.ly}-Datei muss dann das @code{guile-user} Modul noch geladen werden, bevor die Definition von @var{a} verfügbar ist: - -@example -#(use-modules (guile-user)) -@end example - - -@item -f,--format=@var{Format} -Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind -@code{svg}, @code{ps}, @code{pdf} und @code{png}. - -Beispiel: @code{lilypond -fpng @var{Dateiname}.ly} - - - -@item -d,--define-default=@var{Variable}=@var{Wert} -Damit wird die interne Programmoption @var{Variable} auf den Scheme-Wert -@var{Wert} gesetzt. Wird kein @var{Wert} angegeben, so wird @var{#t} benutzt. -Um eine Option auszuschalten, kann der Präfix @code{no-} dem Namen -@var{Variable} der Variable vorangestellt werden. So ist etwa - -@cindex Point and Click, Kommandozeile - -@example --dno-point-and-click -@end example - -@noindent -dasselbe wie -@example --dpoint-and-click='#f' -@end example - -Hier sind ein paar interessante Optionen: - -@table @samp -@item help -Die Ausführung von @code{lilypond -dhelp} zeigt alle verfügbaren @code{-d} -Optionen. - -@item paper-size -Setzt das Standard-Papierformat, -@example --dpaper-size=\"letter\" -@end example - -@noindent -Die Zeichenkette, die das Format angibt, muss in Anführungszeichen mit Backslash -( @code{\"} ) stehen. - - -@item safe -Vertraut der @code{.ly} Datei nicht. - -Wenn LilyPond über einen Webserver verfügbar gemacht wird, @b{MUSS} unbedingt -eine die Optionen @code{--safe} oder @code{--jail} angegeben werden. -Die @code{--safe} Option verhindert, dass in der .ly-Datei angegebener -Scheme-Code das System gefährden kann, wie etwa in folgendem Beispiel: - -@quotation -@verbatim -#(system "rm -rf /") -{ - c4^#(ly:export (ly:gulp-file "/etc/passwd")) -} -@end verbatim -@end quotation - -Mit der @code{-dsafe} Option werden alle Scheme-Ausdrücke einem speziellen -sicheren Modus ausgewertet. Dieser Modus ist vom GUILE @file{safe-r5rs} Modul -abgeleitet und fügt noch zahlreiche weitere erlaubte Funktionen der -LilyPond Programm-Schnittstelle hinzu. Diese Funktionen sind in -@file{scm/@/safe@/-lily@/.scm} angegeben. - -Zusätzliche verbietet der sichere Modus auch @code{\include} Befehle. - -Im sicheren Modus ist es nicht möglich, LilyPond-Variablen nach Scheme -zu exportieren. - -@code{-dsafe} erkennt jedoch @emph{KEINE} Überbeanspruchung der verfügbaren -Ressourcen. In diesem Modus ist es also trotzdem möglich, dass LilyPond in einer -Endlosschleife hängt, z.B. wenn zyklische Datenstrukturen an das Backend -übergeben werden. Wenn LilyPond also auf einem öffentlich zugänglichen -Webserver verfügbar gemacht wird, sollte der Prozess sowohl in der CPU- -als auch in der Speichernutzung limitiert werden. - -Der sichere Modus verhindert auch, dass zahlreiche nützliche -Musikfragmente von LilyPond verarbeitet werden. Die @code{--jail} Option ist -eine sicherere Alternative, benötigt allerdings auch mehr Aufwand zur -Einrichtung. - -@item backend -Gibt an, welches Ausgabeformat das LilyPond Backend benutzt. Mögliche Werte -für diese Option sind: - -@table @code -@item ps -PostScript-Ausgabeformat. - -@cindex PostScript Ausgabeformat - -Postscript-Dateien enthalten auch TTF-, Type1- und OTF-Schriften. Allerdings -wird die gesamte Schriftart eingefügt und nicht nur die benötigten Zeichen. -Vor allem wenn nicht-westliche Zeichensätze benutzt werden, kann dies zu sehr -großen Dateien führen. - -@item eps -Erzeugt @q{encapsulated PostScript} (EPS). Jede Seite (oder jedes System) wird -als eigene @file{EPS}-Datei ausgegeben, inklusive Schriftarten. Außerdem wird -eine Datei mit allen Seiten (bzw. Systemen) und Schriftarten erzeugt. - -Dies ist die Standardeinstellung von @command{lilypond-book}. - -@item svg -SVG-Ausgabe (Scalable Vector Graphics). Jede Seite wird als eigene -@file{SVG}-Datei ausgegeben, inklusive eingebetteten Schriftarten. -@cindex SVG (Scalable Vector Graphics) -Sie benötigen einen SVG-Betrachter, der eingebettete Schriftarten unterstützt, -oder einen SVG-Betrachter, der eingebettete Schriftarten durch OTF-Schriften -ersetzen kann. In UNIX und Linux kann z.B. @uref{http://www.inkscape.org,Inkscape} -(ab Version 0.42) benutzt werden, nachdem die OTF-Schriften aus dem -LilyPond-Verzeichnis (typischerweise @file{/usr/share/lilypond/VERSION/fonts/otf/}) -in das Verzeichnis @file{~/.fonts/} kopiert wurden. - -@item scm -gibt die rohen Scheme-basierenden Zeichenbefehle aus, wie sie intern von -LilyPond benutzt werden. - -@cindex Scheme dump - -@item null -Keine Partitur wird ausgegeben, hat gleichen Effekt wie @code{-dno-print-pages}. - -@end table - -Beispiel: @code{lilypond -dbackend=svg @var{Dateiname}.ly} - -@cindex Ausgabeformat - -@item preview -Erzeugt eine Ausgabedatei, die nur die Titelzeilen und das erste System -enthält. - -@item print-pages -Erzeugt vollständige Seiten (Standardeinstellung). @code{-dno-print-pages} -ist in Verbindung mit @code{-dpreview} nützlich. - -@end table - - - -@item -h,--help -Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. - -@item -H,--header=@var{FELD} -Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei -@file{Dateiname.@var{FELD}} aus. - -@item --include, -I=@var{Verzeichnis} -Fügt @var{Verzeichnis} zur Liste der Suchpfade hinzu. -@cindex Dateisuche -@cindex Suchpfad - -@item -i,--init=@var{Initialisierungsdatei} -Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der -Standardwert ist @file{init.ly}. - -@item -o,--output=@var{DATEI} -Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei -@var{DATEI}. Die entsprechende Dateinamenserweiterung wird angehängt (z.B. -@code{.pdf} für pdf). - -@item --ps -Erzeugt PostScript. - -@item --png -Erzeugt eine Grafik-Datei im PNG-Format von jeder Seite. Diese Option -impliziert auch @code{--ps}. Die Auflösung in DPI der Grafik kann festgelegt -werden durch -@example --dresolution=110 -@end example - -@item --pdf -Erzeugt PDF-Dateien. Dies impliziert @code{--ps}. - -@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis} -Führt @command{lilypond} in einem chroot-Jail aus. - -Die @code{--jail} Option ist eine flexiblere Alternative zu @code{--safe}, wenn -LilyPond über das Internet verfügbar gemacht wird oder LilyPond-Quelldateien -von Dritten automatisch vararbeitet werden. - -Sie funktioniert dergestalt, dass das Wurzelverzeichnis von -@command{lilypond} auf @var{Jail-Verzeichnis} gesetzt wird, bevor die -tatsächliche Kompilierung der .ly-Datei beginnt. Der Benutzer und die Gruppe -werden auf die angegebenen Werte gesetzt und das aktuelle Arbeitsverzeichnis -wird ebenfalls auf den angegebenen Wert @var{Arbeitsverzeichnis} gesetzt. -Diese Einstellungen garantieren (zumindest in der Theorie), dass es nicht -möglich ist, aus dem Jail auszubrechen. Damit @code{--jail} funktioniert, muss -@command{lilypond} allerdings als root ausgeführt werden, was normalerweise -auf sichere Art mit dem Kommando @command{sudo} erreicht werden kann. - -Das Jail-Verzeichnis zu erstellen ist etwas heikel, da LilyPond alle zur -Ausführung nötigen Bibliotheken und Dateien @emph{innerhalb des -Jail-Verzeichnisses} finden muss. Ein typisches Setup besteht aus folgenden -Punkten: - -@table @asis -@item Erstellung eines getrennten Dateisystems -Ein eigenes Dateisystem muss für LilyPond erstellt werden, sodass es mit -sicheren Einstellungen wie @code{noexec}, @code{nodev} und @code{nosuid} -eingebunden werden kann. Damit ist es unmöglich, Programme von diesem -Dateisystem auszuführen oder direkt auf eine Hardware-Schnittstelle -zuzugreifen. Wenn Sie keine eigene Partition erstellen möchten, können Sie -auch eine Datei der entsprechenden Größe erstellen und sie als @q{loop}-Gerät -einbinden. Ein getrenntes Dateisystem garantiert auch, dass LilyPond nicht -mehr Festplattenspeicher benutzt als erlaubt. - -@item Erstellung eines eigenen Benutzerkontos -Es sollte ein eigener Benutzer und eine eigene Gruppe (z. B. -@code{lily}/@code{lily}) mit geringen Rechten für die Ausführung von LilyPond -innerhalb des Jails benutzt werden. Nur ein einziges Verzeichnis des Jails sollte -für den Benutzer schreibbar sein und als @var{Arbeitsverzeichnis} an -@code{lilypond} übergeben werden. - -@item Einrichtung des Jails -LilyPond muss zahlreiche Dateien für die Ausführung einlesen. All diese -Dateien müssen in das Jail-Verzeichnis kopiert werden (mit denselben Pfaden -wie im tatsächlichen Wurzel-Dateisystem). Die gesamte LilyPond-Installation -(typischerweise @file{/usr/share/lilypond}) sollte kopiert werden. - -Falls Probleme auftreten, ist es am einfachsten, Lilypond mittels -@command{strace} zu starten, wodurch Sie relativ leicht feststellen können, -welche Dateien im Jail noch fehlen. - -@item Ausführung von LilyPond -In einem mit @code{noexec} eingebundenen Jail ist es nicht möglich, externe -Programme auszuführen. Daher muss LilyPond auf eine Art gestartet werden, -die keine weitere Ausführung von Programmen benötigt. Wie bereits erwähnt -muss LilyPond mit Administrator-Rechten gestartet werden (die es allerdings -sofort wieder abgibt), beispielsweise mittels @command{sudo}. Außerdem -ist es eine gute Idee, die LilyPond zur Verfügung stehende CPU-Zeit zu -limitieren (z. B. mit @command{ulimit -t}) und -- falls das Betriebssystem -dies unterstützt -- auch den zur Verfügung stehenden Hauptspeicher. -@end table - - -@item -v,--version -Gibt die Versionsnummer aus. - -@item -V,--verbose -Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade -aller gelesenen Dateien sowie Informationen über die Laufzeit. - -@item -w,--warranty -Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht -@strong{KEINERLEI GARANTIE}!) -@end table - - -@node Environment variables -@subsection Environment variables - -@cindex LANG -@cindex LILYPOND_DATADIR - -@command{lilypond} erkennt und benützt die folgenden Umgebungsvariablen: -@table @code -@item LILYPOND_DATADIR -Diese Variable gibt das Verzeichnis an, wo Lilypond seine eigenen Dateien, -Meldungen und Übersetzungen finden kann. Dieses Verzeichnis sollte -Unterverzeichnisse @file{ly/}, @file{ps/}, @file{tex/}, etc. beinhalten. - -@item LANG -Gibt die Sprache an, in der Warnungen und Fehlermeldungen ausgegeben werden. - -@item LILYPOND_GC_YIELD -Mit dieser Variable (mit Werten zwischen 0 und 100) kann die Feinabstimmung -zwischen dem Bedarf an Hauptspeicher und Rechenleistung bei der Ausführung -von LilyPond durchgeführt werden. Bei höheren Werten benutzt LilyPond -mehr Hauptspeicher, benötigt aber weniger Prozessor-Leistung. Bei -niedrigeren Werten wird mehr Prozessor-Zeit, dafür weniger Hauptspeicher -benötigt. Voreinstellung ist ein Wert von @code{70}. - -@end table - - -@node Error messages -@section Error messages - -@cindex error messages -Während der Verarbeitung einer Dateien können diverse Meldungen an der -Kommandozeile auftreten: - -@table @emph - -@item Warnung -@cindex Warnung -Irgendetwas ist verdächtig. Wenn Sie etwas Ungewöhnliches in Ihrer -Datei durchführen, dann werden Sie die Meldung verstehen und können -sie gegebenenfalls ignorieren. Im Normalfall jedoch bedeutet eine -Warnung, dass mit Ihrer Datei etwas nicht stimmt, LilyPond jedoch -trotzdem versucht, die Datei soweit wie möglich korrekt zu übersetzen. - -@item Fehler -@cindex Fehler -Irgendetwas stimmt definitiv nicht. Der aktuelle Bearbeitungsschritt -(Einlesen, Interpretieren oder Formatieren der Datei) wird noch fertig -ausgeführt, danach bricht die Bearbeitung aber ab. - -@item Fataler Fehler -@cindex Fataler Fehler -Irgendetwas stimmt definitiv nicht und LilyPond kann nicht weiter -ausgeführt werden. Dies ist nur sehr selten der Fall, meist sind -die Schriftarten nicht korrekt installiert. - -@item Scheme Fehler -@cindex Fehlerprotokoll, Scheme -@cindex Scheme Fehler -Fehler, die während der Ausführung von Scheme-Code auftreten, werden -vom Scheme-Interpreter aufgefangen und an der Kommandozeile ausgegeben. -Wenn Sie LilyPond mit der @code{--verbose} Option (auch @code{-V}) -ausführen, wird der sogennante @q{Call trace} ausgegeben, der die -aufgerufenen Funktionen zur Zeit des Fehlers angibt. - -@item Programmierfehler -@cindex Programmierfehler -Eine interne Inkonsistenz ist aufgetreten. Diese Fehlermeldungen -sollen den Programmierern die Fehlersuche erleichtern und -können meistens einfach ignoriert werden. In manchen Fällen werden -so viele Meldungen ausgegeben, dass die Lesbarkeit der restliche -Ausgabe davon beeinträchtigt wird. - -@item Abgebrochen (core dumped) -Dies bezeichnet einen ernsten Programmierfehler, der das Programm -zum Absturz gebracht hat. Solche Fehler werden als kritisch angesehen. -Falls daher einer auftritt, senden Sie bitte einen Bug-Report! -@end table - -@cindex Fehlermeldung, Format -@cindex Form der Fehlermeldungen -Wenn Warnungen oder Fehlermeldungen mit einer konkreten Stelle in der -Eingabedatei verknüpft werden können, dann hat die Meldung die folgende -Form: - -@example -@var{Dateiname}:@var{Zeile}:@var{Spalte}: @var{Meldung} -@var{Fehlerhafte Eingabezeile} -@end example - -Ein Zeilenumbruch wird in der fehlerhaften Zeile an jener Stelle eingefügt, -wo der Fehler aufgetreten ist. Zum Beispiel - -@example -test.ly:2:19: Fehler: keine gültige Dauer: 5 - @{ c'4 e' - 5 g' @} -@end example - -Diese Stellen sind LilyPonds Vermutung, wo die Warnung oder der Fehler -aufgetreten ist, allerdings treten Warnungen und Fehler ja gerade in -unerwarteten Fällen auf. Manchmal kann Lilypond auch eine fehlerhafte -Stelle zwar noch problemlos verarbeiten, ein paar Zeilen später wirkt -sich der Fehler aber dann doch noch aus. In solchen Fällen, wo Sie in -der angegebenen Zeile keinen Fehler erkennen, sollten Sie auch die Zeilen -oberhalb der angegebenen Stelle genauer unter die Lupe nehmen. - - -@node Updating files with convert-ly -@section Updating files with @command{convert-ly} - -@cindex Aktualisierung von LilyPond-Dateien -@cindex Aktualisierung mit convert-ly -@cindex convert-ly: Aktualisierung - -Die Eingabesyntax von LilyPond ändert sich graduell um etwa die -Eingabe zu erleichtern oder neue Funktionen zu ermöglichen. Ein -Nebeneffekt hiervon ist, dass das LilyPond-Übersetzerprogramm nicht -mehr mit älteren Eingabedateien kompatibel sein kann. Um dies -zu umgehen, kann @command{convert-ly} benutzt werden, welches die -meisten der Syntaxänderungen korrigieren kann. - -Das Programm benötigt eine @code{\version}-Information in der -Eingabedatei, um zu wissen, von welcher Version konvertiert werden -soll. In den meisten Fällen genügt es, den Befehl - -@example -convert-ly -e meineDatei.ly -@end example - -@noindent -auszuführen. -@c MacOS@tie{}X-Benutzer können diesen Befehl im Menu unter -@c @code{Compile > Update syntax} finden. -@c Does it work? TR - -Wenn keine Veränderungen in @code{meineDatei.ly} vorgenommen wurden -und eine Datei @code{meineDatei.ly.NEW} erstellt wird, it -@code{meineDatei.ly} schon aktuell. - - -@menu -* Command line options for convert-ly:: -* Problems with convert-ly:: -@end menu - -@node Command line options for convert-ly -@subsection Command line options for @command{convert-ly} - -@command{convert-ly} konvertiert immer bis zur letzten Syntaxänderung, -die es beherrscht. Das heißt, dass die neue @code{version}-Nummer -in der Datei überlicherweise etwas niedriger ist als die -Version von @command{convert-ly}. - -Um LilyPond-Fragmente in texinfo-Dateien zu aktualisieren, gilt -der Befehl: - -@example -convert-ly --from=... --to=... --no-version *.itely -@end example - -Um die Änderungen der LilyPond-Syntax zwischen bestimmten Versionen -zu sehen, kann der Befehl - -@example -convert-ly --from=... --to=... -s -@end example - -@noindent -benutzt werden. - -Viele Dateien können auf einmal aktualisiert werden, indem -@code{convert-ly} mit den üblichen UNIX-Befehlen kombiniert -wird. Das folgende Beispiel aktualisiert alle @code{.ly}-Dateien -im aktuellen Verzeichnis: - -@example -for f in *.ly; do convert-ly -e $f; done; -@end example - -Die allgemeine Syntax des Programms lautet: - -@example -convert-ly [@var{option}]@dots{} @var{file}@dots{} -@end example - -Folgende Optionen sind möglich: - -@table @code -@item -e,--edit -Verändere die entsprechende Zeile der Eingabedatei. Überschreibt -@code{--output}. - -@item -f,--from=@var{von-Versionsnummer} -Setze die Version, ab welcher konvertiert werden soll. Wenn diese -Option nicht gesetzt ist, versucht @command{convert-ly}, die -Version auf Grundlage von @code{\version} zu raten. - -@item -n,--no-version -Normalerweise fügt @command{convert-ly} eine @code{\version}-Zeile -zur Ausgabe hinzu. Mit dieser Option kann das unterdrückt werden. - -@item -s, --show-rules -Zeige alle bekannten Konversionsregeln und beende. - -@item --to=@var{bis-Versionsnummer} -Hiermit kann das Ziel der Konversion gesetzt werden. Standard ist -die neueste mögliche Version. - -@item -h, --help -Benutzerhilfe ausgeben. -@end table - - -@node Problems with convert-ly -@subsection Problems with @code{convert-ly} - -Nicht alle Änderungen der Syntax können konvertiert werden. Nur -eine Ausgabeoption kann angegeben werden. Scheme- und -LilyPond-Scheme-Code wird sehr unwahrscheinlich korrekt aktualisiert, -hier ist meistens Nacharbeit erforderlich. - -@verbatim -Hier eine Liste einiger Befehle, die convert-ly nicht konvertieren kann. - -Diese Liste ist in Form von Fehlermeldungen, denn convert-ly -ist so strukturiert, dass nicht alle benötigten Änderungen -implementiert werden können. Es handelt sich also eher um eine -Wunschliste zur Referenz. - -1.6->2.0: - Bezifferter Bass wird nicht immer korrekt konvertiert, besonders - Befehle wie {< >}. Mats Kommentar hierzu: - Um convert-ly korrekt ausführen zu können, müssen alle Vorkommen - von '{<' in etwas beliebiges wie '{#' und genauso '>}' in '&}' - geändert werden. Nach der Konversion können sie dann zurück - in '{ <' und '> }' verwandelt werden - Nicht alle Textbeschriftungen werden richtig konvertiert. In der - alten Syntax konnten Beschriftungsbefehle mit Klammern gruppiert - werden, etwa - -#'((bold italic) "string") - This will incorrectly be converted into - -\markup{{\bold italic} "string"} - instead of the correct - -\markup{\bold \italic "string"} -2.0->2.2: - \partcombine wird nicht konvertiert - \addlyrics => \lyricsto wird nicht konvertiert, dadurch kompilieren - manche Dateien mit mehreren Strophen nicht. -2.0->2.4: - \magnify wird nicht nach \fontsize konvertiert. - - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) - remove-tag wird nicht verändert. - - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . - first-page-number wird nicht geändert. - - first-page-number no => print-first-page-number = ##f - Zeilenumbrüche im \header-Feld werde nicht konvertiert. - - \\\\ als Zeilenumbruch in \header{...} => \markup \center-align < - "First Line" "Second Line" > - Crescendo- und Decrescendo-Enden werden nicht konvertiert. - - \rced => \! - - \rc => \! -2.2->2.4: - \turnOff (in \set Staff.VoltaBracket = \turnOff eingesetzt) wird nicht korrekt behandelt. -2.4.2->2.5.9 - \markup{ \center-align <{ ... }> } sollte umgewandelt werden in: - \markup{ \center-align {\line { ... }} } - aber im Moment fehlt \line. -2.4->2.6 - Besondere LaTeX-Zeichen wie $~$ im Text werden nicht nach UTF( - konvertiert. -2.8 - \score{} muss jetzt mit einem musikalischen Ausdruck beginnen. - Alles andere (insbesondere \header{}) darf erst nach den Noten - kommen. -@end verbatim - - - -@node Reporting bugs -@section Reporting bugs - - -@cindex Fehler -@cindex Fehler melden - -Wenn Sie eine Datei haben, die zu einem Absturz von LilyPond oder zu einer -fehlerhaften Ausgabe führt, so ist dies ein @q{Bug}. Die List der aktuell -bekannten derartigen Fehler findet sich in unserem @q{Google Bug Tracker}: - -@uref{http://code.google.com/p/lilypond/issues/list} - -Wenn Sie einen Fehler gefunden haben, der noch nicht aufgelistet ist, melden -Sie dies bitte anhand der Anweisungen auf der Seite - -@uref{http://lilypond.org/web/devel/participating/bugs} - -Wenn Sie Beispieldateien für den Fehler erstellen, versuchen Sie bitte, die -Datei möglichst minimal zu halten und nur jenen LilyPond Code aufzunehmen, -der auch wirklich für den Fehler verantwortlich ist. Meldungen mit -Beispieldateien, die nicht minimal sind, können wir meist aus Zeitgründen -nicht effektiv bearbeiten. - diff --git a/Documentation/de/user/scheme-tutorial.itely b/Documentation/de/user/scheme-tutorial.itely deleted file mode 100644 index e556b2558b..0000000000 --- a/Documentation/de/user/scheme-tutorial.itely +++ /dev/null @@ -1,296 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 01361d46dc9d514a79683d003eeea5f4fbf2b746 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Scheme tutorial -@appendix Scheme tutorial - -@funindex # -@cindex Scheme -@cindex GUILE -@cindex Scheme, in einer LilyPond-Datei -@cindex LISP - -LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil -der Eingabesyntax als auch als internen Mechanismus, um Programmmodule -zusammenzufügen. Dieser Abschnitt ist ein sehr kurzer Überblick über -die Dateneingabe mit Scheme. Wenn Sie mehr über Scheme wissen wollen, -gehen Sie zu @uref{http://@/www@/.schemers@/.org}. - -Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen, -Zeichenketten, Listen usw. Hier ist eine Liste der Datentypen, die für -LilyPond-Eingabedateien relevant sind. - -@table @asis -@item Boolesche Variablen -Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung -für Wahr ist @code{#t} und für Falsch @code{#f}. -@funindex ##t -@funindex ##f - -@item Zahlen -Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) -Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also -eine nicht-ganze). - -@item Zeichenketten -Zeichenketten werden in doppelte Anführungszeichen gesetzt: - -@example -"Das ist eine Zeichenkette" -@end example - -Zeichenketten können über mehrere Zeilen reichen: - -@example -"Das -ist -eine Zeichenkette" -@end example - -Anführungszeichen und neue Zeilen können auch mit sogenannten -Fluchtsequenzen eingefügt werden. Die Zeichenkette -@code{a sagt "b"} wird wie folgt eingegeben: - -@example -"a sagt \"b\"" -@end example - -Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\} -eingegeben. -@end table - -In einer Notationsdatei werden kleine Scheme-Abschnitte mit der -Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in -LilyPond: - -@example -##t ##f -#1 #-1.5 -#"Das ist eine Zeichenkette" -#"Das -ist -eine Zeichenkette" -@end example - -Für den Rest dieses Abschnitts nehmen wir an, dass die Daten immer in -einer LilyPond-Datei stehen, darum wird immer die Raute verwendet. - -Scheme kann verwendet werden, um Berechnungen durchzuführen. Es -verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss -man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller -Mathematik. - -@lisp -#(+ 1 2) - @result{} #3 -@end lisp - -Der Pfeil @result{} zeigt an, dass das Ergebnis der Auswertung von -@code{(+ 1 2)} @code{3}@tie{}ist. Berechnungen können geschachtelt -werden und das Ergebnis einer Berechnung kann für eine neue -Berechnung eingesetzt werden. - -@lisp -#(+ 1 (* 3 4)) - @result{} #(+ 1 12) - @result{} #13 -@end lisp - -Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck -wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich -verhält es sich mit Variablen. Nachdem eine Variable definiert ist: - -@example -zwoefl = #12 -@end example - -@noindent -kann man sie in Ausdrücken weiterverwenden: - -@example -vierundzwanzig = #(* 2 zwoelf) -@end example - -@noindent -Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert. -Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben -werden: - -@example -#(define vierundzwanzig (* 2 zwoelf)) -@end example - -Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie -eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben: - -@example -#'vierundzwanzig -@end example - -@funindex #'symbol -@cindex Zitieren in Scheme - -Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung - @code{vierundzwanzig} durch @code{24} ersetzt wird. Anstatt dessen erhalten - wir die Bezeichnung @code{vierundzwanzig}. - -Diese Syntax wird sehr oft verwendet, weil es manche -Einstellungsveränderungen erfordern, dass Scheme-Werte einer -internen Variable zugewiesen werden, wie etwa - -@example -\override Stem #'thickness = #2.6 -@end example - -Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert -@code{2.6} wird der Variable @code{thickness} (Dicke) eines -@code{Stem}-(Hals)-Objektes gleichgesetzt. -@code{thickness} wird relativ zu den Notenlinien errechnet, in diesem -Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien. Dadurch -werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind. -Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt -definiert werden (wie @code{vierundzwanzig} weiter oben), und zwischen denen, -die für interne Objekte zuständig sind, werden hier die ersteren -@qq{Bezeichner} genannt, die letzteren dagegen @qq{Eigenschaften}. -Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während -@code{vierundzwanzig} ein Bezeichner ist. - -@cindex Eigenschaften versus Bezeichner -@cindex Bezeichner versus Eigenschaften - -Sowohl zweidimensionale Abstände (X- und Y-Koordinaten) als auch -Größen von Objekten (Intervalle mit linker und rechter Begrenzung) werden -als @code{pairs} (Paare) eingegeben. Ein Paar@footnote{In der -Scheme-Terminologie wird ein Paar @code{cons} genannt und seine -zwei Elemente @code{car} und @code{cdr}.} wird als @code{(erster . zweiter)} -eingegeben und sie müssen mit dem Apostroph eingeleitet werden, genauso -wie Symbole: - -@example -\override TextScript #'extra-offset = #'(1 . 2) -@end example - -Hierdurch wird das Paar (1, 2) mit der Eigenschaft @code{extra-offset} -des TextScript-Objektes verknüpft. Diese Zahlen werden in -Systembreiten gemessen, so dass der Befehl das Objekt eine Systembreite -nach rechts verschiebt und zwei Breiten nach oben. - -Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa - -@example -#'(1 . 2) -#'(#t . #f) -#'("blah-blah" . 3.14159265) -@end example - -Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern -geschrieben werden, mit einem Apostroph davor. Beispielsweise: - -@example -#'(1 2 3) -#'(1 2 "string" #f) -@end example - -Die ganze Zeit wurde hier schon Listen benutzt. Eine Berechnung, -wie @code{(+ 1 2)}, ist auch eine Liste (welche das Symbol @code{+} -und die Nummern 1 und@tie{}2 enthält. Normalerweise werden Listen -als Berechnungen interpretiert und der Scheme-Interpreter ersetzt -die Liste mit dem Ergebnis der Berechnung. Um eine Liste an sich -einzugeben, muss die Auswertung angehalten werden. Das geschieht, -indem der Liste ein Apostroph vorangestellt wird. Für Berechnungen -kann man also den Apostroph nicht verwenden. - -Innerhalb einer zitierten Liste (also mit Apostroph) muss man keine -Anführungszeichen mehr setzen. Im Folgenden ein Symbolpaar, eine -Symbolliste und eine Liste von Listen: - -@example -#'(stem . head) -#'(staff clef key-signature) -#'((1) (2)) -@end example - - - -@menu -* Tweaking with Scheme:: -@end menu - -@node Tweaking with Scheme -@appendixsec Tweaking with Scheme - -Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst -werden kann, indem Befehle wie etwa -@code{\override TextScript #'extra-offset = ( 1 . -1)} -benutzt werden. Aber es wurde gezeigt, dass Scheme noch -mächtiger ist. Eine bessere Erklärung findet sich in der@ref{Scheme tutorial} und in -@ruser{Interfaces for programmers}. - -Scheme kann auch in einfachen @code{\override}-Befehlen -benutzt werden: - -TODO Find a simple example -@c This isn't a valid example with skylining -@c It works fine without padText -td - -@ignore -@lilypond[quote,verbatim,ragged-right] -padText = #(define-music-function (parser location padding) (number?) -#{ - \once \override TextScript #'padding = #$padding -#}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond -@end ignore - -Es kann auch benutzt werden, um Befehle zu erstellen: - -@c Check this is a valid example with skylining -@c It is - 'padding still works - -@lilypond[quote,verbatim,ragged-right] -tempoMark = #(define-music-function (parser location padding marktext) - (number? string?) -#{ - \once \override Score . RehearsalMark #'padding = $padding - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $marktext } -#}) - -\relative c'' { - c2 e - \tempoMark #3.0 #"Allegro" - g c -} -@end lilypond - -Sogar ganze Musikausdrücke können eingefügt werden: - -@lilypond[quote,verbatim,ragged-right] -pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) -#{ - $x e8 a b $y b a e -#}) - -\relative c''{ - \pattern c8 c8\f - \pattern {d16 dis} { ais16-> b\p } -} -@end lilypond - - diff --git a/Documentation/de/user/setup.itely b/Documentation/de/user/setup.itely deleted file mode 100644 index a3a0ae9faa..0000000000 --- a/Documentation/de/user/setup.itely +++ /dev/null @@ -1,345 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Till Rettig, Reinhold Kainhofer - -@node Setup -@chapter Setup - -In diesem Kapitel werden verschiedene Konfigurationsoptionen für LilyPond und -andere Programme behandelt, die nach der Installation auszuführen sind. Dieses -Kapitel kann als Referenz betrachtet werden, lesen Sie einen Abschnitt nur, -wenn er auf Sie zutrifft. - -@menu -* Setup for specific Operating Systems:: -* Text editor support:: -* Point and click:: -@end menu - - -@node Setup for specific Operating Systems -@section Setup for specific Operating Systems - -Dieser Abschnitt erklärt zusätzliche Einstellungen für bestimmte Betriebssysteme. - -@menu -* Setup for MacOS X:: -@end menu - -@node Setup for MacOS X -@subsection Setup for MacOS X - -@subsubheading Using Python scripts on MacOS 10.3 or 10.4 - -Das LilyPond-Programmpaket für MacOS X stellt Python nicht zur -Verfügung, aber Python 2.4 oder höher wird benötigt, um -Skripte wie @command{convert-ly} zu benutzen. Wenn Sie MaxOS -10.3 oder 10.4 besitzen, müssen Sie eine neurere Python-Version -von @uref{http://python.org/download/} installieren und dann -die erste Zeile von @command{convert-ly} und @command{lilypond-book} -auf folgende Weise ändern: Wenn sich das installierte Python-Programm -in Ihrem @var{PFAD} befindet, muss die erste Zeile heißen: - -@example -#!/usr/bin/env python -@end example - -@noindent -andernfalls muss sie heißen: - -@example -#!@var{/path/to/newly_installed/python} -@end example - -@subsubheading MacOS X on the command line - -Die Skripte (etwa @command{lilypond-book}, @command{convert-ly}, -@command{abc2ly} und sogar @command{lilypond}) befinden sich -innerhalb der @code{.app}-Datei für MacOS@tie{}X. Sie können -auf der Kommandozeile direkt aufgerufen werden, etwa - -@example -@var{Pfad/zu}/LilyPond.app/Contents/Resources/bin/lilypond -@end example - -@noindent -Entsprechend funktionieren auch die anderen Skripte wie -@command{lilypond-book}, @command{convert-ly}, @command{abc2ly} usw. - -Sie können sich auch selber Skripte anlegen, die diesen Pfad automatisch -hinzufügen. Erstellen Sie ein Verzeichnis, indem die Skripte gespeichert werden: - -@example -mkdir -p ~/bin -cd ~/bin -@end example - -Erstellen Sie eine Datei mit dem Namen @code{lilypond} und dem Inhalt - -@example -exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" -@end example - -Erstellen Sie entsprechende Dateien mit den Namen @code{lilypond-book}, - @code{convert-ly} und den Namen der anderen Hilfsprogramme, die Sie benutzen - (@code{abc2ly}, @code{midi2ly} usw.). Ersetzen Sie einfach den Teil - @code{bin/lilypond} mit @code{bin/convert-ly} (oder einem anderen - Programmnamen) in der entsprechenden Datei. - -Machen Sie die Datei ausführbar: - -@example -chmod u+x lilypond -@end example - -Jetzt müssen Sie dieses Verzeichnis noch zu Ihrem Pfad (PATH) hinzufügen. -Verändern Sie die Datei @code{.profile} in Ihrem Benutzerverzeichnis -(oder erstellen Sie sie), dass sie die Zeile - -@example -export PATH=$PATH:~/bin -@end example - -@noindent -beinhaltet. Die Datei muss mit einer Leerzeile enden. - -Beachten Sie, dass @var{Pfad/zu} üblicherweise @code{/Applications/} ist. - - -@node Text editor support -@section Text editor support - -@cindex Editoren -@cindex vim -@cindex emacs -@cindex Modus, Editoren -@cindex Syntax-Hervorhebung -@cindex Hervorhebung der Syntax - -Verschiedene Texteditoren haben Unterstützung für LilyPond. - -@menu -* Emacs mode:: -* Vim mode:: -* jEdit:: -* TexShop:: -* TextMate:: -* LilyKDE:: -@end menu - -@node Emacs mode -@subsection Emacs mode - -Emacs hat einen LilyPond-Modus (@file{lilypond-mode}), eine Datei, die -die Vervollständigung von Befehlen, Einrückungen, für LilyPond spezifische -Klammerschließungen und die Markierung der Syntax beherrscht. -Zusätzlich stehen noch praktische Tastaturkombinationen zum -Programmaufruf und zum Nachschlagen in den Handbüchern zur -Verfügung. Siehe unten, wenn die Datei @file{lilypond-mode} -sich nicht auf Ihrem Computer befindet. - -Der Emacs-Modus zur Noteneingabe und zum Programmaufruf ist -in den Emacs-Quellen im @file{elisp}-Verzeichnis enthalten. Mit -dem Befehl @command{make install} können Sie es nach @var{elispdir} -installieren. Die Datei @file{lilypond-init.el} sollte in - @var{load-path}@file{/site-start.d/} liegen oder Ihrem - @file{~/.emacs} or @file{~/.emacs.el} hinzugefügt werden. - -Als Benutzer können Sie Ihren Quellenpfad (etwa @file{~/site-lisp/}) -ihrem @var{load-path} hinzufügen, indem Sie folgende Zeile zu Ihrer -@file{~/.emacs}-Datei hinzufügen: - -@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 Vim mode -@subsection Vim mode - -Für @uref{http://@/www@/.vim@/.org,VIM} wird ein @file{vimrc} bereitgestellt, -zusammen mit Werkzeugen zur Syntaxauszeichnung. Ein Vim-Modus zur -Noteneingabe und zum Programmaufruf befindet sich im Quellarchiv im -@code{$VIM}-Verzeichnis. - -LilyPond-Dateien werden automatisch erkannt, wenn sich in der Datei -@file{~/.vim/filetype.vim} folgender Inhalt befindet: - -@example -if exists("did_load_filetypes") - finish -endif -augroup filetypedetect - au! BufNewFile,BufRead *.ly,*.ily setf lilypond -augroup END -@end example - -Fügen Sie den LilyPond-Pfad in ihre -@file{~/.vimrc}-Datei ein, indem Sie ihre folgende Zeile hinzufügen: - -@example -set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ -@end example - -@noindent -Dabei wird $@{LILYPOND_VERSION@}durch Ihre LilyPond-Version ersetzt. Sollten -Sie LilyPond nicht nach @file{/usr/local/} installiert haben, müssen Sie den -Pfad entsprechend anpassen. - - -@node jEdit -@subsection jEdit - -Das Plugin für den @uref{http://@/www@/.jedit@/.org@/,jEdit}-Texteditor, -LilyPondTool genannt, ist das vielfältigste textbasierte Werkzeug, um -LilyPond-Notationsdateien zu editieren. Zu den besonderen Eigenschaften -gehört ein Dokument-Ersteller mit Liedtextunterstützung, der die Neuerstellung -von Dateien erleichtert, und ein integriertes PDF-Anzeigeprogramm mit -@qq{point-and-click}-Unterstützung. Demos, Bildschirmphotos und -Installationsanweisungen finden sich unter -@uref{http://lilypondtool@/.organum@/.hu} - - -@node TexShop -@subsection TexShop - -Der -@uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop}-Editor -für MacOS@tie{}X kann erweitert werden, um LilyPond, lilypond-book und convert-ly aus dem -Editor heraus zu starten. Die Erweiterung findet sich unter -@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. - - -@node TextMate -@subsection TextMate - -Es gibt ein LilyPond-Paket für TextMate. Es kann installiert werden, indem man - -@example -mkdir -p /Library/Application\ Support/TextMate/Bundles -cd /Library/Application\ Support/TextMate/Bundles -svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ -@end example - -@noindent -ausführt. - - -@node LilyKDE -@subsection LilyKDE - -@uref{http://lilykde.googlecode.com/,LilyKDE} ist eine Erweiterung für -den Texteditor @uref{http://kate-editor.org/,Kate} für KDE. LilyKDE -beinhaltet einen mächtigen Assistenten, mit dem sehr schnell neue -LilyPond-Dokumente erstellt werden könne, sowie einen eingebetteten -PDF-Betrachter. - -LilyKDE benutzt auch @uref{http://www.volny.cz/smilauer/rumor/,Rumor}, -um Musik direkt von einem MIDI-Keyboard einzulesen. - -Weitere Fähigkeiten von LilyKDE sind Silbentrennung für Liedtexte oder -die Möglichkeit, LilyPond gleichzeitig mit mehreren Eingabedateien vom -KDE Dateimanager aus aufzurufen. - - -@node Point and click -@section Point and click -@cindex Point and click - - -Point and click erlaubt es, die Noten in der Quelldatei zu finden, indem man sie -im PDF anklickt. Das erleichtert es, fehlerhafte Stellen zu finden. - -Wenn diese Funktionalität aktiv ist, fügt LilyPond Hyperlinks zum PDF hinzu. -Diese werden dann bei einem Klick zum Browser geschickt, der wiederum -einen Texteditor mit dem Cursor an der richtigen Stelle öffnet. - -Damit diese Kettenreaktion funktioniert, müssen Sie ihrem PDF-Programm -mit dem Skript @file{lilypond-invoke-editor} beibringen, Hyperlinks zu folgen. - -Im Falle von Xpdf auf einer UNIX-Maschine sollte folgende Zeile in der Datei -@file{xpdfrc}@footnote{Unter UNIX befindet sich diese Datei entweder in -@file{/etc/xpdfrc} oder als @file{.xpdfrc} in Ihrem Heim-Verzeichnis.} stehen. - -@example -urlCommand "lilypond-invoke-editor %s" -@end example - -Das Programm @file{lilypond-invoke-editor} ist ein kleines Hilfsprogramm. -Es ruft einen Editor auf für bestimmte @code{textedit}-URIs und startet -einen Browser für die anderen. Die Umgebungsvariable @code{EDITOR} -wird für folgende Zeichenketten: - -@table @code -@item emacs - das startet -@example -emacsclient --no-wait +@var{line}:@var{column} @var{file} -@end example -@item vim - das startet -@example -gvim --remote +:@var{line}:norm@var{char} @var{file} -@end example - -@item nedit - das startet -@example - nc -noask +@var{line} @var{file}' -@end example -@end table - -Die Umgebungsvariable @code{LYEDITOR} wird verwendet, um dieses zu -überschreiben. Sie enthält den Befehl, um den Editor aufzurufen, wobei -die Variablen @code{%(file)s}, -@code{%(column)s}, @code{%(line)s} mit der Datei, Spalte und Zeile -ersetzt werden. Die Einstellung - -@example -emacsclient --no-wait +%(line)s:%(column)s %(file)s -@end example - -@noindent -für @code{LYEDITOR} etwa entspricht dem von vornherein eingestellten -Emacs-Aufruf. - - -@cindex Dateigröße, Ausgabedatei - -Die point and click-Links vergrößern die Notationsdatei erheblich. Um die -Größe der PDF- und PS-Dateien zu verringern, kann point and click -ausgeschaltet werden, indem die Zeile - -@example -\pointAndClickOff -@end example - -@noindent -in der @file{.ly}-Datei gesetzt wird. Point and Click kann auch explizit -eingeschaltet werden durch die Zeile: - -@example -\pointAndClickOn -@end example - -Alternativ können Sie Point and Click auch mit einer -Kommandozeilenoption ausschalten: - -@example -lilypond -dno-point-and-click file.ly -@end example - -@warning{Sie sollten Point and Click immer für Dateien ausschalten, die -Sie an andere Personen weitergeben möchten. Anderenfalls werden -Pfadinformationen Ihres Computers in die PDF-Datei kopiert, was ein -potentielles Sicherheitsrisiko darstellt.} diff --git a/Documentation/de/user/simultaneous.itely b/Documentation/de/user/simultaneous.itely deleted file mode 100644 index 739e4bd774..0000000000 --- a/Documentation/de/user/simultaneous.itely +++ /dev/null @@ -1,863 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Simultaneous notes -@section Simultaneous notes - -@lilypondfile[quote]{simultaneous-headword.ly} - -Polyphonie bedeutet in der musikalischen Terminologie das -Vorhandensein von mehr als einer (eigenständigen) Stimme -in einem Stück. Für LilyPond bedeutet es aber das Vorhandensein -von mehr als einer Stimme pro System. - -@menu -* Single voice:: -* Multiple voices:: -@end menu - - -@node Single voice -@subsection Single voice - -Dieser Abschnitt behandelt gleichzeitige Noten innerhalb -derselben Stimme. - -@menu -* Chorded notes:: -* Simultaneous expressions:: -* Clusters:: -@end menu - - -@node Chorded notes -@unnumberedsubsubsec Chorded notes - -@cindex Akkorde -@cindex Klammern, spitze -@cindex spitze Klammern -@cindex relative Tonhöhe in Akkorden -@funindex < -@funindex > -@funindex <...> - -Ein Akkord wird notiert, indem die zu ihm gehörenden Tonhöhen -zwischen spitze Klammern (@code{<} und @code{>}) gesetzt werden. -Auf einen Akkord kann eine Dauer-Angabe und/oder eine Anzahl -an Artikulationsbezeichnungen folgen, genauso wie bei -einfachen Noten. - -@lilypond[verbatim,quote,relative=1] -2 4-> -. -@end lilypond - -Der relative Modus kann auch für Tonhöhen in Akkorden benutzt -werden. Die Oktave jeder Tonhöhe wird relativ zur vorhergehenden -Tonhöhe bestimmt. Eine Ausnahme bildet die erste Tonhöhe in einem -Akkord: ihre Oktave wird bestimmt relativ zur @emph{ersten} -Tonhöhe des vorherigen Akkords. - -Mehr Information über Akkorden findet sich in @ref{Chord notation}. - -@seealso -Musikglossar: -@rglos{chord}. - -Handbuch zum Lernen: -@rlearning{Combining notes into chords}. - -Notationsreferenz: -@ref{Chord notation}. - -Schnipsel: -@rlsr{Simultaneous notes}. - -@node Simultaneous expressions -@unnumberedsubsubsec Simultaneous expressions - -Eine oder mehrere musikalische Ausdrücke, die in doppelte spitze -Klammern eingeschlossen werden, werden gleichzeitig gesetzt. Wenn -der erste Ausdruck mit einer einzelnen Note beginnt oder die -gesamte Konstruktion explizit in einer einzelnen Stimme erstellt -wird, wird auch nur ein Notensystem erstellt. In anderem Falle -werden die Elemente der simultanen Konstruktion auf unterschiedlichen -Systemen gesetzt. - -Das nächste Beispiel zeigt simultane Konstruktionen auf einem -System: - -@lilypond[quote,verbatim,relative=2] -\new Voice { % explicit single voice - << {a4 b g2} {d4 g c,2} >> -} -@end lilypond - -@lilypond[quote,verbatim,relative=2] -% single first note -a << {a4 b g} {d4 g c,} >> -@end lilypond - -Dass kann benutzt werden, wenn die simultanen Abschnitte einen -identischen Rhythmus haben, aber wenn versucht wird, Noten mit -unterschiedlicher Dauer an denselben Hals zu setzen, gibt es -Fehlermeldungen. - -Das nächste Beispiel zeigt, wie ein simultaner Ausdruck implizit -mehrere Systeme erstellt: - -@lilypond[quote,verbatim,relative=2] -% no single first note -<< {a4 b g2} {d4 g2 c,4} >> -@end lilypond - -In diesem Fall stellt der unterschiedliche Rhythmus kein Problem dar. - - -@node Clusters -@unnumberedsubsubsec Clusters - -@cindex Cluster -@cindex Notencluster - -@funindex \makeClusters -@funindex makeClusters - -Ein Cluster zeigt an, dass alle Tonhöhen in einem Bereich gleichzeitig -gespielt werden sollen. Cluster können gedeutet werden als eine -Zusammenfassung einer ganzen Anzahl von Noten. Sie werden notiert, -indem die Funktion @code{\makeClusters} auf eine Reihe von Akkorden -angewendet wird: - -@lilypond[quote,relative=2,verbatim] -\makeClusters { 2 } -@end lilypond - -Normale Noten und Cluster können zusammen im selben System notiert -werden, sogar gleichzeitig. In solchen Fällen wird nicht versucht, -automatisch Zusammenstöße zwischen normalen Noten und Clustern -aufzulösen. - -@seealso -Musikglossar: -@rglos{cluster}. - -Schnipsel: -@rlsr{Simultaneous notes}. - -Referenz der Interna: -@rinternals{ClusterSpanner}, -@rinternals{ClusterSpannerBeacon}, -@rinternals{Cluster_spanner_engraver}. - -@knownissues - -Cluster sehen nur gut aus, wenn sie wenigstens über zwei Akkorde -reichen -- anderfalls sind sie zu schmal. - -Cluster haben keine Hälse und können auch selber keine Dauern -darstellen, aber die Länge des gesetzten Clusters wird erschlossen -anhand der Dauern der definierten Akkorde. Voneinander getrennte -Cluster brauchen eine unsichtbare Pause zwischen sich. - -Cluster produzieren kein MIDI. - - -@node Multiple voices -@subsection Multiple voices - -Dieser Abschnitt behandelt gleichzeitige Noten in mehreren Stimmen -oder mehreren Systemen. - -@menu -* Single-staff polyphony:: -* Voice styles:: -* Collision resolution:: -* Automatic part combining:: -* Writing music in parallel:: -@end menu - -@node Single-staff polyphony -@unnumberedsubsubsec Single-staff polyphony - -@cindex Mehrstimmigkeit, ein System -@cindex ein System, Mehrstimmigkeit -@cindex Polyphonie, ein System -@cindex Stimme -@cindex Voice -@cindex Gesangstext, einer Stimme zugewiesen -@cindex Mehrstimmigkeit -@cindex Polyphonie -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceOne ... \voiceFour -@funindex Voice -@funindex \oneVoice -@funindex oneVoice - -@strong{@i{Stimmen explicit beginnen}} - -Die grundlegende Struktur, die man benötigt, um mehrere -unabhängige Stimmen in einem Notensystem zu setzen, -ist im Beispiel unten dargestellt: - -@lilypond[quote,relative=3,verbatim] -\new Staff << - \new Voice = "first" - { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } - \new Voice= "second" - { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -Stimmen werden hier explizit erstellt und erhalten Bezeichnungen -zugewiesen. Die @code{\voiceOne} ... @code{\voiceFour}-Befehle -stellen die Stimmen so ein, dass für die erste und dritte Stimme -die Hälse nach oben zeigen, für die zweite und vierte Stimme -hingegen nach unten. Die Noten der dritten und vierten Stimme -werden horizontal verschoben, und Pausen in den entsprechenden -Stimmen werden automatisch verschoben, um Zusammenstöße zu -vermeiden. Der @code{\oneVoice}-Befehl stellt das Standardverhalten -mit neutralen Halsrichtungen wieder her. - -@strong{@i{Vorrübergehende polyphone Passagen}} - -Ein vorrübergehender polyphoner Abschnitt kann mit folgender -Konstruktion erstellt werden: - -@example -<< @{ \voiceOne ... @} - \new Voice @{ \voiceTwo ... @} ->> \oneVoice -@end example - -Der erste Ausdruck innerhalb des polyphonen Abschnitts wird in -den @code{Voice}-Kontext gestellt, der unmittelbar vor dem -polyphonen Abschnitt aktiv war, und der gleiche @code{Voice}-Kontext -setzt sich nach dem Abschnitt fort. Andere Ausdrücke innerhalb -der eckigen Klammern werden anderen Stimmennummern zugewiesen. -Damit lassen sich auch Gesangstexte einer durchgehenden Stimme -vor, während und nach dem polyphonen Abschnitt zuweisen: - -@lilypond[quote, verbatim, relative=2] -<< - \new Voice = "melody" { - a4 - << - { - \voiceOne - g f - } - \new Voice { - \voiceTwo - d2 - } - >> - \oneVoice - e4 - } - \new Lyrics \lyricsto "melody" { - This is my song. - } ->> -@end lilypond - -Hierbei sind die Befehle @code{\voiceOne} und @code{\voiceTwo} notwendig, um die Einstellungen für jede Stimme zu -initialisieren. - - -@strong{@i{Die Konstruktion mit doppeltem Backslash}} - -Die @code{<< @{...@} \\ @{...@} >>}-Konstruktion, in welcher -die beiden (oder mehreren) Ausdrücke durch doppelte -Backslash-Zeichen (Taste AltGr+ß) getrennt werden, verhält -sich anderes als die ähnliche Konstruktion ohne die doppelten -Schrägstriche: @emph{alle} Ausdrücke innerhalb der eckigen -Klammern werden in diesem Fall jeweils neuen @code{Voice}-Kontexten -zugeordnet. diese neuen @code{Voice}-Kontexte werden implizit -erstellt und haben die festen Bezeichnungen @code{"1"}, -@code{"2"} usw. - -Das erste Beispiel könnte also auch wie folgt notiert werden: - -@lilypond[quote,relative=3,verbatim] -<< - { r8 r16 g e8. f16 g8[ c,] f e16 d } - \\ - { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -Diese Syntax kann benutzt werden, wenn es keine Rolle spielt, -ob vorrübergehend Stimmen erstellt werden und dann wieder -verworfen werden. Diese implizit erstellten Stimmen erhalten -die Einstellungen, die in den Befehlen -@code{\voiceOne} ... @code{\voiceFour} enthalten sind, in -der Reihenfolge, in der sie im Quelltext auftauchen. - -Im nächsten Beispiel zeigen die Hälse der zeitweiligen Stimme -nach oben, sie wird deshalb erst als dritte in der Konstruktion -notiert, damit sie die Eigenschaften von @code{voiceThree} -zugewiesen bekommt. Unsichtbare Pause werden eingesetzt, damit -keine doppelten Pausen ausgegeben werden. - -@lilypond[quote,relative=3,verbatim] -<< - { r8 g g g g f16 ees f8 d } - \\ - { ees,8 r ees r d r d r } - \\ - { d'8 s c s bes s a s } ->> -@end lilypond - -Es wird sehr empfohlen, in allen außer den allereinfachsten -Stücken explizite Stimmenkontexte zu erstellen, wie erklärt in@rlearning{Contexts and engravers} und -@rlearning{Explicitly instantiating voices}. - -@strong{@i{Identische Rhythmen}} - -Wenn paralelle Abschnitte gesetzt werden sollen, -die identischen Rhythmus haben, kann man die Ausdrücke in -einen einzigen @code{Voice}-Kontext parallel kombinieren, sodass -sich Akkorde ergeben. Um das zu erreichen, müssen sie einfach -von spitzen Klammern innerhalb einer expliziten Stimme -umgeben werden: - -@lilypond[quote,relative=2,verbatim] -\new Voice << - { e4 f8 d e16 f g8 d4 } - { c4 d8 b c16 d e8 b4 } ->> -@end lilypond - -Mit dieser Methode können sich seltsame Balken und Warnungen -ergeben, wenn die Musikausdrücke nicht den gleichen Rhythmus haben. - -@predefined -@code{\voiceOne}, -@code{\voiceTwo}, -@code{\voiceThree}, -@code{\voiceFour}, -@code{\oneVoice}. -@endpredefined - -@seealso -Handbuch zum Lernen: -@rlearning{Voices contain music}, -@rlearning{Explicitly instantiating voices}. - -Notationsreferenz: -@ref{Percussion staves}, -@ref{Invisible rests}. - -Schnipsel: -@rlsr{Simultaneous notes}. - - -@node Voice styles -@unnumberedsubsubsec Voice styles - -@cindex Voice-Stile -@cindex Stile, Stimmen -@cindex Stimmen, Stile -@cindex Färben von Stimmen -@cindex Einfärben von Stimmen -@cindex Stimmen, farbige Unterscheidung -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -Stimmen können unterschiedliche Farben erhalten, um einfach -erkennbar zu sein: - -@lilypond[quote,relative=2,verbatim] -<< - { \voiceOneStyle d4 c2 b4 } - \\ - { \voiceTwoStyle e,2 e } - \\ - { \voiceThreeStyle b2. c4 } - \\ - { \voiceFourStyle g'2 g } ->> -@end lilypond - -Der @code{\voiceNeutralstyle}-Befehl wird benutzt, um wieder -die Standardausgabe einzuschalten. - -@predefined -@code{\voiceOneStyle}, -@code{\voiceTwoStyle}, -@code{\voiceThreeStyle}, -@code{\voiceFourStyle}, -@code{\voiceNeutralStyle}. -@endpredefined - -@seealso -Handbuch zum Lernen: -@rlearning{I'm hearing Voices}, -@rlearning{Other sources of information}. - -Schnipsel: -@rlsr{Simultaneous notes}. - - - -@node Collision resolution -@unnumberedsubsubsec Collision resolution - -@cindex Noten verschmelzen -@cindex Verschmelzen von Noten -@cindex Zusammenstöße -@cindex Notenzusammenstöße -@cindex Verschieben von Noten -@cindex viele Stimmen -@cindex Stimmen, mehrere -@cindex mehrere Stimmen -@cindex Polyphonie -@cindex Stimmen verschieben -@cindex Pausen verschieben, automatisch -@cindex Verschieben von Pausen, automatisch -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn -@funindex \shiftOff -@funindex shiftOff -@funindex \mergeDifferentlyDottedOn -@funindex mergeDifferentlyDottedOn -@funindex \mergeDifferentlyDottedOff -@funindex mergeDifferentlyDottedOff -@funindex \mergeDifferentlyHeadedOn -@funindex mergeDifferentlyHeadedOn -@funindex \mergeDifferentlyHeadedOff -@funindex mergeDifferentlyHeadedOff - -Die Notenköpfe von Noten in unterschiedlichen Stimmen mit derselben -Tonhöhe, demselben Notenkopf und den Hälsen in entgegengesetzte -Richtungen werden automatisch verschmolzen, aber Noten mit -unterschiedlichen Köpfen oder den Hälsen in die selbe Richtung -werden nicht verschmolzen. Pausen, die einem Hals in einer -anderen Stimme gegenüberstehen, werden vertikal verschoben. - -@lilypond[quote,verbatim,relative=2] -<< - { - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Noten mit unterschiedlichen Notenköpfen können verschmolzen -werden, mit der Ausnahme von Halben- und Viertelnotenköpfen: - -@lilypond[quote,verbatim,relative=2] -<< - { - \mergeDifferentlyHeadedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Auch Köpfe mit unterschiedlichen Punktierungen können verschmolzen -werden: - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Die Halbe und die Achtel am Anfang des zweiten Taktes werden -fehlerhaft verschmolzen, weil @code{\mergeDifferentlyHeadedOn} -(Unterschiedliche Köpfe Verschmelzen An) nicht richtig arbeiten -kann, wenn drei oder mehr Noten zur gleichen Zeit auftreten -- -in diesem Fall wird eine Warnung ausgegeben. Damit die -Verschmlezung richtig funktionieren kann, muss ein @code{\shift} -(Verschiebung) der Note hinzugefügt werden, die nicht mit -verschmolzen werden soll. In diesem Fall wurde -@code{\shiftOn} gesetzt, um das oberste @notation{g} aus der -Kolumne zu entfernen. Jetzt funktioniert -@code{\mergeDifferentlyHeadedOn} so wie es soll. - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - \shiftOn - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } - ->> -@end lilypond - -Die Befehle @code{\shiftOn}, @code{\shiftOnn} und @code{\shiftOnnn} -bezeichnen den Grad, mit dem Noten der aktuellen Stimme verschoben -werden sollen. Die äußeren Stimmen (normalerweise Stimme eins und -zwei) haben diese Funktion standardmäßig ausgeschaltet -(@code{\shiftOff}), während die inneren Stimmen (drei und vier) -ein @code{\shiftOn} eingestellt haben (Verschiebung an). Die -Befehle @code{\shiftOnn} und @code{\shiftOnnn} stellen weitere -Verschiebungesebenen dar. - -Noten werden nur verschmolzen, wenn ihre Hälse in gegengesetzte -Richtungen zeigen (also etwa wie @code{Voice} 1 und 2). - - -@predefined -@code{\mergeDifferentlyDottedOn}, -@code{\mergeDifferentlyDottedOff}, -@code{\mergeDifferentlyHeadedOn}, -@code{\mergeDifferentlyHeadedOff}, -@code{\shiftOn}, -@code{\shiftOnn}, -@code{\shiftOnnn}, -@code{\shiftOff}. -@endpredefined - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{additional-voices-to-avoid-collisions.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{forcing-horizontal-shift-of-notes.ly} - -@seealso -Musikglossar: -@rglos{polyphony}. - -Handbuch zum Lernen: -@rlearning{Multiple notes at once}, -@rlearning{Voices contain music}, -@rlearning{Collisions of objects}. - -Schnipsel: -@rlsr{Simultaneous notes}. - -Referenz der Interna: -@rinternals{NoteColumn}, -@rinternals{NoteCollision}, -@rinternals{RestCollision}. - -@knownissues - -Wenn @code{\mergeDifferentlyHeadedOn} mit einer Achtel- oder -kürzeren Note benutzt wird, deren Hals nach oben zeigt, und -einer Halben Note mit Hals nach unten, erhält der Hals der -Achtelnote eine geringe Verschiebung, weil der schwarze und -weiße Notenkopf eine unterschiedliche Breite beistzen. - -@ignore -@c TODO investigate! Sometimes it works, sometimes not. --FV -The requirements for successfully merging different note heads that -are at the same time differently dotted are not clear. -@end ignore - -Es gibt keine Unterstützung für Akkorde, in denen die gleiche -Note mit unterschiedlichen Versetzungszeichen im selben Akkord -auftaucht. In diesem Fall wird empfohlen, enharmonische -Töne zu verwenden, oder die besondere Cluster-Notation (siehe @ref{Clusters}). - - -@node Automatic part combining -@unnumberedsubsubsec Automatic part combining - -@cindex automatische Kombination von Stimmen -@cindex Stimmen kombinieren -@cindex Kombinieren von Stimmen -@cindex a due-Stellen -@cindex solo-Stellen -@funindex \partcombine -@funindex partcombine - -Automatische Kombination von Stimmen wird verwendet, um zwei -Stimmen auf einem Notensystem zu setzen. Es wird vor allem -in Orchesterpartituren eingesetzt. Wenn beide Stimmen für -einige Noten identisch sind, wird nur eine dargestellt. -An den Stellen, an denen die beiden Stimmen sich unterscheiden, -werden sie als unterschiedliche Stimmen gesetzt, und die -Richtung der Hälse wird automatisch bestimmt. Zusätzlich -werden @notation{solo} und @notation{a due}-Stellen erkannt -und bezeichnet. - -Die Syntax zur Stimmenkombination lautet: - -@example -\partcombine @var{musikAusdr1} @var{musikAusdr2} -@end example - -Das nächste Beispiel zeigt, wie die Kombination funktioniert. -Hier werden die Stimmen erst auf einem jeweils eigenen System -und dann kombiniert gesetzt, beachten Sie, wie sich -die Einstellungen für Polyphonie ändern. - -@lilypond[quote,verbatim] -instrumentOne = \relative c' { - 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 -} - -<< - \new Staff \instrumentOne - \new Staff \instrumentTwo - \new Staff \partcombine \instrumentOne \instrumentTwo ->> -@end lilypond - -Die Noten des dritten Taktes werden nur einfach ausgegeben, obwohl -sie ein beiden Stimmen definiert sind. Die Richtung von Hälsen und -Bögen werden automatisch gewählt, abhängig davon ob es eine -Solo-Stelle oder Unisono ist. In polyphonen Situationen erhält -die erste Stimme immer Hälse nach oben, die zweite Stimme -Hälse nach unten. An Solo-Stellen werden die Stimmen mit -@qq{Solo} bzw. @qq{Solo II} bezeichnet. Die Unisono-Stellen -(@notation{a due}) werden mit dem Text @qq{a2} gekennzeichnet. - -Beide Argumente von @code{\partcombine} werden als -@code{Voice}-Kontexte interpretiert. Wenn relative Oktaven -benutzt werden, muss @code{\relative} für beide Stimmen -benutzt werden, also: - -@example -\partcombine - \relative @dots{} @var{musikAusdr1} - \relative @dots{} @var{musikAusdr2} -@end example - -@noindent -Ein @code{\relative}-Abschnitt, der sich außerhalb von@code{\partcombine} befindet, hat keinen Einfluss auf -die Tonhöhen von @var{musikAusdr1} oder @var{musikAusdr2}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{combining-two-parts-on-the-same-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-partcombine-texts.ly} - -@seealso -Musikglossar: -@rglos{a due}, -@rglos{part}. - -Notationsreferenz: -@ref{Writing parts}. - -Schnipsel: -@rlsr{Simultaneous notes}. - -Referenz der Interna: -@rinternals{PartCombineMusic}, -@rinternals{Voice}. - -@knownissues - -@code{\partcombine} kann nur zwei Stimmen bearbeiten. - -Wenn @code{printPartCombineTexts} (drucke Stimmenkombinationstext) -gesetzt ist und die Stimmen die gleichen Noten wiederholgt -spielen, kann @code{a2} in einem Takt mehrmals gesetzt werden. - -@code{\partcombine} kann nicht innerhalb von @code{\times} benutzt -werden. - -@code{\partcombine} kann nicht innerhalb von @code{\relative} -benutzt werden. - -Intern werden beide Argumente von @code{\partcombine} als -Stimmen (@code{Voice}) interpretiert und entschieden, wann -die Stimmen kombiniert werden können. Wenn sie unterschiedliche -Dauern haben, können sie nicht kombiniert werden und erhalten -die Bezeichnung @code{one} und @code{two} Darum werden -Wechsel zu einem @code{Voice}-Kontext, der eine andere -Bezeichnung hat, ignoriert. Genausowenig ist die Stimmenkombination -dazu ausgelegt, Gesangtext zu verarbeiten: wenn eine der -Stimmen eine explizite Bezeichnung erhält, damit Text damit -verknüpft werden kann, hört die Stimmenkombination auf zu -arbeiten. - -@code{\partcombine} findet nur den Beginn von Noten. Es kann -nicht bestimmen, ob eine vorher begonnene Noten weiterklingt, -was zu verschiedenen Problemen führen kann. - - -@node Writing music in parallel -@unnumberedsubsubsec Writing music in parallel - -@cindex Parallele Notation, Eingabe -@cindex Eingabe von Noten parallel -@cindex Verschachtelte Musik -@funindex \parallelMusic -@funindex parallelMusic - -Noten für mehrere Stimmen können verschachtelt notiert werden. -Die Funktion @code{\parallelMusic} akzeptiert eine Liste mit -den Bezeichnungen einer Reihe von Variablen und einen -musikalischen Ausdruck. Der Inhalt der verschiedenen Takte in -dem musikalischen Ausdruck bekommt die Bezeichnung der Variablen zugewiesen, -sodass sie benutzt werden können, um die Musik dann zu setzen. -Dabei entspricht jede Zeile einer Stimme. - -@warning{Taktüberprüfungen @code{|} müssen benutzt werden, und -die Takte müssen die gleiche Länge haben.} - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | - r16 e'8.~ e'4 r16 e'8.~ e'4 | - c'2 c'2 | - - % Bar 2 - r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | - r16 d'8.~ d'4 r16 d'8.~ d'4 | - c'2 c'2 | - -} -\new StaffGroup << - \new Staff << \voiceA \\ \voiceB >> - \new Staff { \clef bass \voiceC } ->> -@end lilypond - -Der relative Modus kann auch benutzt werden. Beachten Sie, dass -der @code{\relative}-Befehl nicht innerhalb von -@code{\parallelMusic} benutzt wird. Die Noten sind paralell -zu der vorherigen Note der gleichen Stimme , nicht zu der -vorherigen Note in der Quelldatei. Anders gesagt ignorieren -realtive Noten von @code{voiceA} die Noten von @code{voiceB}. - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g16 c e g, c e r8 g,16 c e g, c e | - r16 e8.~ e4 r16 e8.~ e4 | - c2 c | - - % Bar 2 - r8 a,16 d f a, d f r8 a,16 d f a, d f | - r16 d8.~ d4 r16 d8.~ d4 | - c2 c | - - } -\new StaffGroup << - \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> - \new Staff \relative c' { \clef bass \voiceC } ->> -@end lilypond - -Das funktioniert ziemlich gut für Klaviernoten. Dieses Beispiel -speichert vier konsekutive Takte in vier Variablen: - -@lilypond[quote,verbatim] -global = { - \key g \major - \time 2/4 -} - -\parallelMusic #'(voiceA voiceB voiceC voiceD) { - % Bar 1 - a8 b c d | - d4 e | - c16 d e fis d e fis g | - a4 a | - - % Bar 2 - e8 fis g a | - fis4 g | - e16 fis g a fis g a b | - a4 a | - - % Bar 3 ... -} - -\score { - \new PianoStaff << - \new Staff { - \global - << - \relative c'' \voiceA - \\ - \relative c' \voiceB - >> - } - \new Staff { - \global \clef bass - << - \relative c \voiceC - \\ - \relative c \voiceD - >> - } - >> -} -@end lilypond - -@seealso -Handbuch zum Lernen: -@rlearning{Organizing pieces with variables}. - -Schnipsel: -@rlsr{Simultaneous notes}. diff --git a/Documentation/de/user/spacing.itely b/Documentation/de/user/spacing.itely deleted file mode 100644 index 0f84453c40..0000000000 --- a/Documentation/de/user/spacing.itely +++ /dev/null @@ -1,343 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 5395f0433b4f09b18360118a23227a4a3cef8e72 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Spacing issues -@chapter Spacing issues - -@untranslated - - -@menu -* Paper and pages:: -* Music layout:: -* Breaks:: -* Vertical spacing:: -* Horizontal spacing:: -* Fitting music onto fewer pages:: -@end menu - -@node Paper and pages -@section Paper and pages - -@untranslated - - -@menu -* Paper size:: -* Page formatting:: -@end menu - -@node Paper size -@subsection Paper size - -@untranslated - - -@node Page formatting -@subsection Page formatting - -@untranslated - -@menu -* Vertical dimensions:: -* Horizontal dimensions:: -* Other layout variables:: -@end menu - -@node Vertical dimensions -@unnumberedsubsubsec Vertical dimensions - -@untranslated - -@node Horizontal dimensions -@unnumberedsubsubsec Horizontal dimensions - -@untranslated - -@node Other layout variables -@unnumberedsubsubsec Other layout variables - -@untranslated - - -@node Music layout -@section Music layout - -@untranslated - - -@menu -* Setting the staff size:: -* Score layout:: -@end menu - -@node Setting the staff size -@subsection Setting the staff size - -@untranslated - - -@node Score layout -@subsection Score layout - -@untranslated - - -@node Breaks -@section Breaks - -@untranslated - - -@menu -* Line breaking:: -* Page breaking:: -* Optimal page breaking:: -* Optimal page turning:: -* Minimal page breaking:: -* Explicit breaks:: -* Using an extra voice for breaks:: -@end menu - -@node Line breaking -@subsection Line breaking - -@untranslated - - -@node Page breaking -@subsection Page breaking - -@untranslated - - -@node Optimal page breaking -@subsection Optimal page breaking - -@untranslated - - -@node Optimal page turning -@subsection Optimal page turning - -@untranslated - - -@node Minimal page breaking -@subsection Minimal page breaking - -@untranslated - - -@node Explicit breaks -@subsection Explicit breaks - -@untranslated - - -@node Using an extra voice for breaks -@subsection Using an extra voice for breaks - -@untranslated - - -@node Vertical spacing -@section Vertical spacing - -@untranslated - - -@menu -* Vertical spacing inside a system:: -* Vertical spacing between systems:: -* Explicit staff and system positioning:: -* Two-pass vertical spacing:: -* Vertical collision avoidance:: -@end menu - -@node Vertical spacing inside a system -@subsection Vertical spacing inside a system - -@untranslated - - -@node Vertical spacing between systems -@subsection Vertical spacing between systems - -@untranslated - - -@node Explicit staff and system positioning -@subsection Explicit staff and system positioning - -@untranslated - - -@node Two-pass vertical spacing -@subsection Two-pass vertical spacing - -@untranslated - - -@node Vertical collision avoidance -@subsection Vertical collision avoidance - -@untranslated - - -@node Horizontal spacing -@section Horizontal Spacing - -@untranslated - - -@menu -* Horizontal spacing overview:: -* New spacing area:: -* Changing horizontal spacing:: -* Line length:: -* Proportional notation:: -@end menu - -@node Horizontal spacing overview -@subsection Horizontal spacing overview - -@untranslated - - -@node New spacing area -@subsection New spacing area - -@untranslated - - -@node Changing horizontal spacing -@subsection Changing horizontal spacing - -@untranslated - - -@node Line length -@subsection Line length - -@untranslated - - -@node Proportional notation -@subsection Proportional notation - -@untranslated - - -@node Fitting music onto fewer pages -@section Fitting music onto fewer pages - -@untranslated - - -@menu -* Displaying spacing:: -* Changing spacing:: -@end menu - -@node Displaying spacing -@subsection Displaying spacing - -@untranslated - - -@node Changing spacing -@subsection Changing spacing - -Manchmal bleiben nur noch ein oder zwei Systeme auf der -letzten Seite übrig. Das ist immer ärgerlich, besonders -wenn es scheint, dass auf den vorigen Seiten genug Platz -ist, um die Systeme noch unterzubringen. - -Wenn man versucht, das Layout zu verändern, kommt einem -der Befehl @code{annotate-spacing} zu Hilfe. Mit diesem -Befehl erhält man die Werte von verschiedenen Abstandsbefehlen -ausgedruckt, mehr Information im Kapitel @ref{Displaying spacing}. -Anhand dieser Angaben kann dann entschieden werden, welche -Werte verändert werden müssen. - -Neben Rändern gibt es nämlich weitere Optionen, Platz zu sparen: - -@itemize -@item -LilyPond kann die Systeme so dicht wie möglich platzieren (damit -so viele Systeme wie möglich auf eine Seite passen), aber sie -dann so anordnen, dass kein weißer Rand unten auf der Seite entsteht. - -@example -\paper @{ - between-system-padding = #0.1 - between-system-space = #0.1 - ragged-last-bottom = ##f - ragged-bottom = ##f -@} -@end example - -@item -Die Anzahl der Systeme kann reduziert werden (wenn LilyPond -die Musik auf 11 Systeme verteilt, kann man die Benutzung von -nur 10 Systemen erzwingen). - -@example -\paper @{ - system-count = #10 -@} -@end example - -@item -Vermeidung von Objekten, die den vertikalen Abstand von Systemen -vergrößern, hilft oft. Die Verwendung von Klammern bei Wiederholungen -etwa braucht mehr Platz. Wenn die Noten innerhalb der Klammern auf -zwei Systeme verteilt sind, brauchen sie mehr Platz, als wenn sie -nur auf einer Zeile gedruckt werden. - -Ein anderes Beispiel ist es, Dynamik-Zeichen, die besonders -weit @qq{hervorstehen}, zu verschieben. - -@lilypond[verbatim,quote,fragment] -\relative c' { - e4 c g\f c - \override DynamicLineSpanner #'padding = #-1.8 - \override DynamicText #'extra-offset = #'( -2.1 . 0) - e4 c g\f c -} -@end lilypond - -@item -Die horizontalen Abstände können mit der - @code{SpacingSpanner}-Eigenschaft verändert werden. Siehe -@ref{Changing horizontal spacing} für Einzelheiten. - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 4) - } - } -} -@end lilypond - -@end itemize - diff --git a/Documentation/de/user/specialist.itely b/Documentation/de/user/specialist.itely deleted file mode 100644 index 726894174d..0000000000 --- a/Documentation/de/user/specialist.itely +++ /dev/null @@ -1,37 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Specialist notation -@chapter Specialist notation - -Dieser Abschnitt erklärt, wie Notation erstellt wird, die nur für ein -bestimmtes Instrument oder einen Stil eingesetzt wird. - -@menu -* Vocal music:: -* Keyboard and other multi-staff instruments:: -* Unfretted string instruments:: -* Fretted string instruments:: -* Percussion:: -* Wind instruments:: -* Chord notation:: -* Ancient notation:: -* World music:: -@end menu - -@include vocal.itely -@include keyboards.itely -@include unfretted-strings.itely -@include fretted-strings.itely -@include percussion.itely -@include wind.itely -@include chords.itely -@include ancient.itely -@include world.itely diff --git a/Documentation/de/user/staff.itely b/Documentation/de/user/staff.itely deleted file mode 100644 index 4895c2e904..0000000000 --- a/Documentation/de/user/staff.itely +++ /dev/null @@ -1,1390 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Staff notation -@section Staff notation - -@lilypondfile[quote]{staff-headword.ly} - -Dieser Abschnitt zeigt, wie die Erscheinung von Systemen beeinflusst -wird, wie Partituren mit mehr als einem System gesetzt werden und wie -man Aufführungsanweisungen und Stichnoten zu einzelnen Systemen hinzufügt. - -@menu -* Displaying staves:: -* Modifying single staves:: -* Writing parts:: -@end menu - - -@node Displaying staves -@subsection Displaying staves - -Dieser Abschnitt zeigt unterschiedliche Methoden, Notensysteme und -Gruppen von Systemen zu erstellen. - -@menu -* Instantiating new staves:: -* Grouping staves:: -* Nested staff groups:: -@end menu - -@node Instantiating new staves -@unnumberedsubsubsec Instantiating new staves - -@cindex Beginn eines Notensystems -@cindex Notensystem, neu -@cindex Percussionsnotensystem -@cindex Perkussionsnotensystem -@cindex einzelnes Notensystem -@cindex rhythmisches Notensystem -@cindex Tabulatursystem -@cindex Tabulatur -@cindex Gregorianischer Choral, Transkription -@cindex neues Notensystem - -@funindex \drummode -@funindex drummode - -@notation{Notensysteme} (engl. @notation{staff}, Pl. @notation{staves}) -werden mit dem @code{\new} oder @code{\context}-Befehl erstellt. Zu -Einzelheiten siehe -@ref{Creating contexts}. - -Der einfachste Notensystem-Kontext ist @code{Staff}: - -@lilypond[verbatim,quote,relative=2] -\new Staff { c4 d e f } -@end lilypond - -@code{DrumStaff} (Perkussionsnotensystem) erstellt ein Notensystem -mit fünf Linien, das für ein typisches Schlagzeug eingerichtet ist. -Für jedes Instrument werden unterschiedliche Symbole dargestellt. -Die Instrumente werden innerhalb der -@code{drummode}-Umgebung gesetzt, wo jedes Instrument seine eigene -Bezeichnung hat. Zu Einzelheiten siehe -@ref{Percussion staves}. - -@lilypond[verbatim,quote] -\new DrumStaff { - \drummode { cymc hh ss tomh } -} -@end lilypond - -@code{RhythmicStaff} (Rhythmus-System) erstellt ein Notensystem mit -nur einer Notenlinie, auf welcher nur die rhythmischen Werte der -eingegebenen Noten dargestellt werden. Die wirklichen Längen bleiben -erhalten. Zu Einzelheiten, siehe -@ref{Showing melody rhythms}. - -@lilypond[verbatim,quote,relative=2] -\new RhythmicStaff { c4 d e f } -@end lilypond - -@code{TabStaff} (Tabulatursystem) erstellt eine Tabulatur mit sechs -Saiten in der üblichen Gitarrenstimmung. Zu Einzelheiten siehe -@ref{Default tablatures}. - -@lilypond[verbatim,quote,relative=2] -\new TabStaff { c4 d e f } -@end lilypond - -Es gibt zwei Notensysteme, die zur Notation von Alter Musik eingesetzt -werden: @code{MensuralStaff} and @code{VaticanaStaff}. Sie sind -erklärt in -@ref{Pre-defined contexts}. - -Das @code{GregorianTranscriptionStaff} (System zur Transkription des -Gregorianischen Chorals) erstellt ein Notensystem, um modernen -Gregorianischen Choral zu notieren. Es hat keine Notenlinien. - -@lilypond[verbatim,quote,relative=2] -\new GregorianTranscriptionStaff { c4 d e f e d } -@end lilypond - - -Neue Notensystem-Kontexte können selber definiert werden. Zu Einzelheiten, -siehe -@ref{Defining new contexts}. - - -@seealso -Glossar: -@rglos{staff}, -@rglos{staves}. - -Notationsreferenz: -@ref{Creating contexts}, -@ref{Percussion staves}, -@ref{Showing melody rhythms}, -@ref{Default tablatures}, -@ref{Pre-defined contexts}, -@ref{Staff symbol}, -@ref{Gregorian chant contexts}, -@ref{Mensural contexts}, -@ref{Defining new contexts}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{Staff}, -@rinternals{DrumStaff}, -@rinternals{GregorianTranscriptionStaff}, -@rinternals{RhythmicStaff}, -@rinternals{TabStaff}, -@rinternals{MensuralStaff}, -@rinternals{VaticanaStaff}, -@rinternals{StaffSymbol}. - - -@node Grouping staves -@unnumberedsubsubsec Grouping staves - -@cindex Systeme, mehrere -@cindex Notensysteme, mehrere -@cindex Klammer, vertikal -@cindex Klammer, geschweift -@cindex geschweifte Klammer -@cindex Klaviersystem -@cindex Akkolade -@cindex Notensystemgruppe -@cindex Notensysteme, gruppieren -@cindex Partitur -@cindex Systemgruppe -@cindex Instrumentengruppe -@cindex Stimmgruppe -@cindex System, Chor -@cindex Chorsystem - -Es gibt verschiedene Kontexte, um einzelne Notensysteme zu gruppieren -und einer Partitur zu verbinden. Jeder Gruppenstil beeinflusst das -Aussehen des Systemanfangs und das Verhalten der Taktlinien. - -Wenn kein Kontext angegeben ist, wird die Standardeinstellung eingesetzt: -die Gruppe beginnt mit einer vertikalen Linie und die Taktlinien sind -nicht verbunden. - -@lilypond[verbatim,quote,relative=2] -<< - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -Im @code{StaffGroup}-Kontext die Gruppe mit einer eckigen Klammer -begonnen und die Taktlinien durch alle Systeme gezogen. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In einem @code{ChoirStaff} (Chorsystem) beginnt die Gruppe mit einer -eckigen Klammer, aber die Taktlinien sind nicht verbunden. - -@lilypond[verbatim,quote,relative=2] -\new ChoirStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In einem @code{GrandStaff} (Akkolade) beginnt die Gruppe mit einer -geschweiften Klammer und die Taktlinien sind durchgezogen. - -@lilypond[verbatim,quote,relative=2] -\new GrandStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -Der @code{PianoStaff}-(Klaviersystem)-Kontext ist identisch mit dem -@code{GrandStaff}-Kontext, aber es ermöglicht zusätzlich direkt -die Angabe einer Instrumentbezeichnung. Zu Einzelheiten siehe -@ref{Instrument names}. - -@lilypond[verbatim,quote,relative=2] -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -Jede Systemgruppe stellt die Eigenschaft -@code{systemStartDelimiter} (SystemBeginnBegrenzer) auf einen der -folgenden Werte: -@code{SystemStartBar}, @code{SystemStartBrace} oder -@code{SystemStartBracket}. Ein vierter Begrenzer, -@code{SystemStartSquare}, ist auch erreichbar, aber man muss ihr -explizit einstellen. - -Neue Systemgruppen können definiert werden. Zu Einzelheiten siehe -@ref{Defining new contexts}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{use-square-bracket-at-the-start-of-a-staff-group.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{display-bracket-with-only-one-staff-in-a-system.ly} - -@cindex Mensurstriche -@cindex Renaissancemusik -@cindex Transkription von Mensuralmusik -@cindex Mensuralmusik, Transkription - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{mensurstriche-layout-bar-lines-between-the-staves.ly} - - -@seealso -Glossar: -@rglos{brace}, -@rglos{bracket}, -@rglos{grand staff}. - -Notationsreferenz: -@ref{Instrument names}, -@ref{Defining new contexts}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{Staff}, -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{GrandStaff}, -@rinternals{PianoStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Nested staff groups -@unnumberedsubsubsec Nested staff groups - -@cindex System, geschachtelt -@cindex Schachtelung von Systemen -@cindex Verschachtelung von Systemen -@cindex SystemBeginnBegrenzer, geschachtelt -@cindex verschachtelte Systemklammern -@cindex Klammern, Verschachteln -@cindex geschweifte Klammern, Schachteln -@cindex Systemgruppen, Verschachtelung - -System-Gruppen können in beliebiger Tiefe geschachtelt werden. In -diesem Fall erstellt jeder neue, innen liegende Kontext eine neue -Klammer außerhalb der Klammer der Systemgruppe, in der er sich -befindet. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c2 c | c2 c } - \new StaffGroup << - \new Staff { g2 g | g2 g } - \new StaffGroup \with { - systemStartDelimiter = #'SystemStartSquare - } - << - \new Staff { e2 e | e2 e } - \new Staff { c2 c | c2 c } - >> - >> ->> -@end lilypond - -Neue geschachtelte Systemgruppen können definiert werden. Zu Einzelheiten siehe -@ref{Defining new contexts}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{nesting-staves.ly} - - -@seealso -Notationsreferenz: -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Defining new contexts}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Modifying single staves -@subsection Modifying single staves - -Dieser Abschnitt zeigt, wie man bestimmte Eigenschaften eines Systems -ändert -- etwa die Anzahld der Notenlinien oder die Größe des Systems. -Es werden auch Methoden dargestellt, ein System zu beginnen und zu -beenden sowie eine Methode, Ossia-Systeme zu erstellen. - -@menu -* Staff symbol:: -* Ossia staves:: -* Hiding staves:: -@end menu - - -@node Staff symbol -@unnumberedsubsubsec Staff symbol - -@cindex Justierung von Notensystemen -@cindex Notensysteme, Modifikation -@cindex Notenlinien, Anzahl -@cindex Notenlinien, Dicke -@cindex Notenlinien, Einstellungen -@cindex Staff symbol, Erstellen -@cindex Notenlinien, Erstellen -@cindex Dicke der Notenlinien einstellen -@cindex Anzahl der Notenlinien einstellen -@cindex Zahl der Notenlinien einstellen -@cindex Hilfslinien, Einstellungen -@cindex Hilfslinien, Abstände -@cindex Abstand von Hilfslinien -@cindex Einstellung von Hilfslinien -@cindex Notensystem stoppen -@cindex Notensystem beginnen -@cindex Beginnen eines Notensystems -@cindex Beenden eines Notensystems - -Die Linien eines Notensystems gehören zu dem -@code{StaffSymbol}-(NotensystemSymbol)-Grob. -@code{StaffSymbol}-Eigenschaften können verändert werden, um die -Erscheinung des Notensystems zu beeinflussen, aber sie müssen -gesetzt werden, bevor das System erstellt wird. - -Die Anzahl der Notenlinien kann verändert werden. Die Position -des Notenschlüssels und die Position von c' können geändert werden, -um dem neuen System zu entsprechen. Eine Erklärung findet sich -im Schnipselabschnit in -@ref{Clef}. - -@lilypond[verbatim,quote,relative=2] -\new Staff \with { - \override StaffSymbol #'line-count = #3 -} -{ d4 d d d } -@end lilypond - -Die Liniendicke der Notenlinien kann verändert werden. Die Dicke -der Hilfslinien und Notenhälse wird auch beeinflusst, weil sie -von der Notenliniendicke abhängen. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'thickness = #3 -} -{ e4 d c b } -@end lilypond - -Die Dicke der Hilfslinien kann auch unabhängig von der -Notenliniendicke verändert werden. Die zwei Zahlen in dem Beispiel -sind Faktoren, mit denen die Notenlinien-Dicke und der -Notenlinienabstand multipliziert werden. Die Addition beider -Werte ergibt die Dicke der Hilfslinien. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) -} -{ e4 d c b } -@end lilypond - -Der Abstand zwischen Notenlinien kann verändert werden. Diese -Einstellung wirkt sich auch auf den Abstand der Hilfslinien aus. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'staff-space = #1.5 -} -{ a4 b c d } -@end lilypond - -Weitere Einzelheiten zu den Eigenschaften von @code{StaffSymbol} -findet sich in @rinternals{staff-symbol-interface}. - -@cindex Notenlinien, beginnen -@cindex Notenlinien, beenden -@cindex Beenden von Notenlinien -@cindex Beginnen von Notenlinien -@cindex Beenden eines Systems -@cindex System, beenden -@cindex Notensystem, beenden - -@funindex \startStaff -@funindex \stopStaff -@funindex startStaff -@funindex stopStaff - -Veränderungen der Eigenschaften eines Notensystems mitten in einer -Partitur können zwischen die Befehle @code{\stopStaff} und -@code{\startStaff} gesetzt werden: - -@lilypond[verbatim,quote,relative=2] -c2 c -\stopStaff -\override Staff.StaffSymbol #'line-count = #2 -\startStaff -b2 b -\stopStaff -\revert Staff.StaffSymbol #'line-count -\startStaff -a2 a -@end lilypond - -@noindent -Die Befehle @code{\startStaff} und @code{\stopStaff} können -benutzt werden, um ein Notensystem irgendwo zu beenden oder zu -beginnen. - -@lilypond[verbatim,quote,relative=2] -c4 b a2 -\stopStaff -b4 c d2 -\startStaff -e4 d c2 -@end lilypond - - -@predefined -@code{\startStaff}, -@code{\stopStaff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{making-some-staff-lines-thicker-than-the-others.ly} - - -@seealso -Glossar: -@rglos{line}, -@rglos{ledger line}, -@rglos{staff}. - -Notationsreferenz: -@ref{Clef}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{StaffSymbol}, -@rinternals{staff-symbol-interface}. - - -@knownissues - -Wenn die vertikale Position der Notenlinien manuell verändert wird, -werden Taktlinien immer auf der Position 0 zentriert. Somit muss -die Distanz der äußeren Notenlinien vom Zentrum des -Systems gleichgroß sein. - - -@node Ossia staves -@unnumberedsubsubsec Ossia staves - -@cindex Ossia-Systeme -@cindex Ossia -@cindex versteckte Notensysteme -@cindex System, Größe verändern -@cindex Notensystem, Größe verändern -@cindex Größe von Notensystem verändern - -@funindex \startStaff -@funindex \stopStaff -@funindex startStaff -@funindex stopStaff - -@notation{Ossia}-Systeme können gesetzt werden, indem zwei -gleichzeitige Notensysteme an der entsprechenden Position -erstellt werden: - -@lilypond[verbatim,quote] -\new Staff \relative c'' { - c4 b d c - << - { c4 b d c } - \new Staff { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -@noindent -Dieses Beispiel ist aber normalerweise nicht erwünscht. -Um Ossia-Systeme zu setzen, die sich über dem eigentlichen -System befinden, keine Takt- und Schlüsselangaben haben und kleiner -gesetzt sind, müssen einige Optimierungen angewendet werden. Im -Handbuch zum Lernen wird eine Technik vorgestellt, mit der das -gewünschte Ergebnis erreicht werden kann, beginnend in -@rlearning{Nesting music expressions}. - -Das Beispiel unten setzt die -@code{alignAboveContext}-(oberhalbAusrichtenKontext)-Eigenschaft -ein, um den Ossia-Abschnitt auszurichten. Diese Methode -bietet sich an, wenn nur einige Ossia-Systeme benötigt werden. - -@lilypond[verbatim,quote] -\new Staff = main \relative c'' { - c4 b d c - << - { c4 b d c } - - \new Staff \with { - \remove "Time_signature_engraver" - alignAboveContext = #"main" - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - firstClef = ##f - } - { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -Wenn mehrere isolierte Ossia-Systeme gebraucht werden, kann es -günstiger sein, einen leeren @code{Staff}-Kontext mit einer -spezifischen @emph{Kontextidentifikation} zu erstellen. Die -Ossia-Abschnitte werden dann erstellt, indem dieser Kontext -@emph{aufgerufen} wird und mit @code{\startStaff} und -@code{\stopStaff} an den richtigen Stellen sichtbar gemacht -wird. Der Vorteil dieser Methode zeigt sich, wenn man längere -Stücke setzt. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - { \stopStaff s1*6 } - - \new Staff \relative c' { - c4 b c2 - << - { e4 f e2 } - \context Staff = ossia { - \startStaff e4 g8 f e2 \stopStaff - } - >> - g4 a g2 \break - c4 b c2 - << - { g4 a g2 } - \context Staff = ossia { - \startStaff g4 e8 f g2 \stopStaff - } - >> - e4 d c2 - } ->> -@end lilypond - -Man kann auch den @code{\RemoveEmptyStaffContext}-Befehl einsetzen, -um Ossia-Systeme zu erstellen. Diese Methode eignet sich am -besten, wenn nach dem Ossia sofort ein Zeilenumbruch erfolgt. -In diesem Fall müssen auch keine unsichtbaren Pausen eingesetzt -werden; es reicht, @code{\startStaff} und @code{\stopStaff} -einzusetzen. Mehr Information zu @code{\RemoveEmptyStaffContext} -findet sich in -@ref{Hiding staves}. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - \new Staff \relative c' { - c4 b c2 - e4 f e2 - g4 a g2 \break - << - { c4 b c2 } - \context Staff = ossia { - c4 e8 d c2 \stopStaff - } - >> - g4 a g2 - e4 d c2 - } ->> - -\layout { - \context { - \RemoveEmptyStaffContext - \override VerticalAxisGroup #'remove-first = ##t - } -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligning-ossias-and-lyrics.ly} - - -@seealso -Glossar: -@rglos{ossia}, -@rglos{staff}, -@rglos{Frenched staff}. - -Handbuch zum Lernen: -@rlearning{Nesting music expressions}, -@rlearning{Size of objects}, -@rlearning{Length and thickness of objects}. - -Notationsreferenz: -@ref{Hiding staves}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{StaffSymbol}. - - -@node Hiding staves -@unnumberedsubsubsec Hiding staves - -@cindex Systeme verstecken -@cindex leere Systeme verstecken -@cindex Verstecken von Systemen -@cindex Systeme, leere -@cindex Verschwinden von leeren Systemen - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext - -Die Notenlinien können entfernt werden, indem der -@code{Staff_symbol_engraver} aus dem @code{Staff}-Kontext -entfernt wird. Alternativ kann auch @code{\stopStaff} -eingesetzt werden. - -@lilypond[verbatim,quote] -\new Staff \with { - \remove "Staff_symbol_engraver" -} -\relative c''' { a8 f e16 d c b a2 } -@end lilypond - -Leere Systeme können versteckt werden, wenn der -@code{\RemoveEmptyStaffContext}-Befehl im @code{\layout}-Abschnitt -benutzt wird. In großen Orchesterpartituren wird dies oft -verwendet, um die leeren Systeme von gerade nicht spielenden -Instrumenten zu verstecken. In der Standardeinstellung werden alle -leeren Notenzeilen außer die des ersten Systems entfernt. - -@warning{Eine Notenzeile gilt als leer, wenn sie nur Ganztaktpausen, -unsichtbare Noten, @code{\skip}-Befehle oder eine Kombination -der drei enthält.} - -@lilypond[verbatim,quote,ragged-right] -\layout { - \context { - \RemoveEmptyStaffContext - } -} - -\relative c' << - \new Staff { - e4 f g a \break - b1 \break - a4 b c2 - } - \new Staff { - c,4 d e f \break - R1 \break - f4 g c,2 - } ->> -@end lilypond - -@cindex ossia - -@noindent -@code{\RemoveEmptyStaffContext} kann auch eingesetzt werden, -um Ossiaabschnitte zu erstellen. Zu Einzelheiten, siehe -@ref{Ossia staves}. - -@cindex Verstecken von Systemen der Alten Musik -@cindex Verstecken von Rhythmus-Systemen - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext -@funindex \AncientRemoveEmptyStaffContext -@funindex \RemoveEmptyRhythmicStaffContext -@funindex AncientRemoveEmptyStaffContext -@funindex RemoveEmptyRhythmicStaffContext - -Der @code{\AncientRemoveEmptyStaffContext}-Befehl kann -benutzt werden, um leere Takte in Notation der Alten Musik -zu entfernen. Gleichermaßen kann -@code{\RemoveEmptyRhythmicStaffContext} eingesetzt werden, um -leere Takte in einem -@code{RhythmicStaff}-Kontext zu entfernen. - - -@predefined -@code{\RemoveEmptyStaffContext}, -@code{\AncientRemoveEmptyStaffContext}, -@code{\RemoveEmptyRhythmicStaffContext}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{removing-the-first-empty-line.ly} - - -@seealso -Glossar: -@rglos{Frenched staff}. - -Notationsreferenz: -@ref{Staff symbol}, -@ref{Ossia staves}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{ChordNames}, -@rinternals{FiguredBass}, -@rinternals{Lyrics}, -@rinternals{Staff}, -@rinternals{VerticalAxisGroup}, -@rinternals{Staff_symbol_engraver}. - - -@knownissues - -Wenn man den @code{Staff_symbol_engraver} entfernt, werden auch -die Taktlinien entfernt. Wenn eine sichtbare Taktlinie -angefordert wird, kann es zu Formatierungsfehlern kommen. In -diesem Fall sollten folgende Befehle eingesetzt werden, anstatt -den Engraver zu entfernen: - -@example -\override StaffSymbol #'stencil = ##f -\override NoteHead #'no-ledgers = ##t -@end example - - - -@node Writing parts -@subsection Writing parts - -Dieser Abschnitt zeigt, wie man Tempo-Anweisungen und -Instrumentenbezeichnungen einfügt. Es werden auch Möglichkeiten -vorgestellt, andere Stimmen zu zitieren und Stichnoten zu -formatieren. - -@menu -* Metronome marks:: -* Instrument names:: -* Quoting other voices:: -* Formatting cue notes:: -@end menu - - -@node Metronome marks -@unnumberedsubsubsec Metronome marks - -@cindex Tempo -@cindex Metronombezeichnung -@cindex Tempobezeichnung -@cindex Aufführungsanweisung: Tempo - -@funindex tempo -@funindex \tempo - -Eine Metronomanweisung wird wie folgt erstellt: - -@lilypond[verbatim,quote,relative=1] -\tempo 4 = 120 -c2 d -e4. d8 c2 -@end lilypond - -Anstelle dessen kann auch Text als Argument angegeben werden: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegretto" -c4 e d c -b4. a16 b c4 r4 -@end lilypond - -Wenn eine Metronombezeichnung und Text kombiniert wird, wird -die Metronombezeichnung automatisch in Klammern gesetzt: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegro" 4 = 160 -g4 c d e -d4 b g2 -@end lilypond - -Der Text kann ein beliebiges Textbeschriftungsobjekt sein: - -@lilypond[verbatim,quote,relative=2] -\tempo \markup { \italic Faster } 4 = 132 -a8-. r8 b-. r gis-. r a-. r -@end lilypond - -Eine Metronombezeichnung in Klammern ohne Text kann erstellt -werden, indem eine leere Zeichenkette hinzugefügt wird: - -@lilypond[verbatim,quote,relative=2] -\tempo "" 8 = 96 -d4 g e c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-metronome-and-rehearsal-marks-below-the-staff.ly} - -@c perhaps also an example of how to move it horizontally? - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-tempo-without-a-metronome-mark.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-metronome-marks-in-markup-mode.ly} - -Zu Einzelheiten siehe @ref{Formatting text}. - - -@seealso -Glossar: -@rglos{metronome}, -@rglos{metronomic indication}, -@rglos{tempo indication}, -@rglos{metronome mark}. - -Notationsreferenz: -@ref{Formatting text}, -@ref{MIDI output}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{MetronomeMark}. - - -@node Instrument names -@unnumberedsubsubsec Instrument names - -@cindex Instrumentenbezeichnungen -@cindex kurze Instrumentenbezeichnungen - -Instrumentbezeichnungen können an der linken Seite von Notensystemen -im @code{Staff}- und @code{PianoStaff}-Kontext gesetzt -werden. Der Wert von @code{instrumentName} wird für das erste -System eingesetzt, der Wert von @code{shortInstrumentName} für -alle weiteren Systeme. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"Violin " -\set Staff.shortInstrumentName = #"Vln " -c4.. g'16 c4.. g'16 -\break -c1 -@end lilypond - -Mit dem Textbeschriftungsmodus können auch komplizierte -Instrumentenbezeichnungen erstellt werden: - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = \markup { - \column { "Clarinetti" - \line { "in B" \smaller \flat } } } -c4 c,16 d e f g2 -@end lilypond - -@cindex Instrumentenbezeichnung, Notation - -Wenn zwei oder mehr Systeme gruppiert werden, werden die -Instrumentenbezeichnungen automatisch zentriert. Um auch -mehrzeilige Instrumentenbezeichnungen zentriert zu setzen, muss -@code{\center-column} benutzt werden: - -@lilypond[verbatim,quote,indent=1.5\cm,relative=2] -<< - \new Staff { - \set Staff.instrumentName = #"Flute" - f2 g4 f - } - \new Staff { - \set Staff.instrumentName = \markup \center-column { - Clarinet - \line { "in B" \smaller \flat } - } - c4 b c2 - } ->> -@end lilypond - -@cindex Einzug - -@funindex indent -@funindex short-indent - -Wenn die Instrumentenbezeichnung zu lang ist, kann es vorkommen, -dass die Bezeichnungen in einer Gruppe nicht zentriert werden. -Um dennoch eine Zentrierung zu erhalten, müssen die Werte des -Einzugs (@code{indent} und @code{short-indent}) vergrößert werden. -Zu Einzelheiten siehe @ref{Horizontal dimensions}. - -@lilypond[verbatim,quote,ragged-right] -\layout { - indent = 3.0\cm - short-indent = 1.5\cm -} - -\relative c'' << - \new Staff { - \set Staff.instrumentName = #"Alto Flute in G" - \set Staff.shortInstrumentName = #"Fl." - f2 g4 f \break - g4 f g2 - } - \new Staff { - \set Staff.instrumentName = #"Clarinet" - \set Staff.shortInstrumentName = #"Clar." - c,4 b c2 \break - c2 b4 c - } ->> -@end lilypond - -Um Instrumentenbezeichnungen zu anderen Kontexten (wie etwa -@code{GrandStaff}, @code{ChoirStaff} oder @code{StaffGroup}) -hinzuzufügen, muss der @code{Instrument_name_engraver} dem -entsprechenden Kontext hinzugefügt werden. Zu Einzelheiten -siehe @ref{Modifying context plug-ins}. - -@cindex Ändern von Instrumentenbezeichnungn -@cindex Instrumentenbezeichnungen, wechseln -@cindex Wechseln von Instrumentenbezeichnungen - -Instrumentenbezeichnungen können mitten in einer Partitur -geändert werden: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"First" -\set Staff.shortInstrumentName = #"one" -c1 c c c \break -c1 c c c \break -\set Staff.instrumentName = #"Second" -\set Staff.shortInstrumentName = #"two" -c1 c c c \break -c1 c c c \break -@end lilypond - -@cindex Instrumentenwechsel -@cindex Wechsel von Instrument - -@funindex \addInstrumentDefinition -@funindex addInstrumentDefinition -@funindex \instrumentSwitch -@funindex instrumentSwitch - -Wenn das Instrument gewechselt werden soll, kann der Befehl -@code{\addInstrumentDefinition} in Begleitung von -@code{\instrumentSwitch} benutzt werden, um eine detaillierte -Auflistung aller notwendigen Änderungen für den Wechsel zu -definieren. Der @code{\addInstrumentDefinition}-Befehl hat -zwei Argumente: eine Identifikation und eine Assosiationsliste -von Kontexteigenschaften und Werten, die für dieses Instrument -benutzt werden müssen. Der Befehl muss sich auf der höchsten -Ebene in der Eingabedatei befinden. @code{\instrumentSwitch} -wird dann benutzt, um den Wechsel vorzunhemen: - -@lilypond[verbatim,quote,ragged-right] -\addInstrumentDefinition #"contrabassoon" - #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) - (shortInstrumentName . "Cbsn.") - (clefGlyph . "clefs.F") - (middleCPosition . 6) - (clefPosition . 2) - (instrumentCueName . ,(make-bold-markup "cbsn.")) - (midiInstrument . "bassoon")) - -\new Staff \with { - instrumentName = #"Bassoon" -} -\relative c' { - \clef tenor - \compressFullBarRests - c2 g' - R1*16 - \instrumentSwitch "contrabassoon" - c,,2 g \break - c,1 ~ | c1 -} -@end lilypond - - -@seealso -Notationsreferenz: -@ref{Horizontal dimensions}, -@ref{Modifying context plug-ins}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{InstrumentName}, -@rinternals{PianoStaff}, -@rinternals{Staff}. - - -@node Quoting other voices -@unnumberedsubsubsec Quoting other voices - -@cindex Stichnoten -@cindex Zitieren von anderen Stimmen -@cindex Fragmente -@cindex Stimmen, zitieren - -@funindex \addQuote -@funindex addQuote -@funindex \quoteDuring -@funindex quoteDuring -@funindex \transposition -@funindex transposition - -Es kommt sehr oft vor, dass eine Orchesterstimme die gleichen -Noten wie eine andere spielt. So können etwa die ersten und -zweiten Geigen für eine Passage die gleichen Noten haben. In -LilyPond kann man das erreichen, indem eine Stimme von der -anderen @emph{zitiert}, sodass man die Noten nicht nocheinmal -eingeben muss. - -Bevor eine Stimme zitiert werden kann, muss der -@code{\addQuote}-Befehl benutzt werden, um das zitierbare -Fragment zu kennzeichnen. Dieser Befehl muss auf der höchsten -Ebene der Eingabedatei benutzt werden. Das erste Argument -dient zur Identifikation, das zweite ein musikalischer Ausdruck: - -@example -flute = \relative c'' @{ - a4 gis g gis -@} -\addQuote "flute" @{ \flute @} -@end example - -Der @code{\quoteDuring}-Befehl wird benutzt, um den Punkt -anzuzeigen, an dem das Zitat beginnt. Er benötigt zwei -Argumente: die Bezeichnung der zitierten Stimme, wie vorher mit -@code{\addQuote} definiert, und einen musikalischen Ausdruck, -der Angibt, wie lange das Zitat dauern soll; normalerweise -Ganztaktpausen oder unsichtbare Noten. Die entsprechenden -Noten der zitierten Stimme wird an der Stelle in die aktuelle -Stimme eingefügt: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { s2 } -} -@end lilypond - -Wenn der musikalische Ausdruck, der mit dem -@code{\quoteDuring}-Befehl benutzt wird, etwas anderes -als unsichtbare Noten oder Ganztaktpausen enthält, wird eine -polyphone Stelle begonnen, was meistens nicht erwünscht ist: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { c4 b } -} -@end lilypond - -Zitate erkennen die Einstellungen von transponierten Instrumenten -sowohl der Quell- als auch der Zielstimme, wenn der -@code{\transposition}-Befehl eingesetzt wird. Zu Einzelheiten -über @code{\transposition} siehe -@ref{Instrument transpositions}. - -@lilypond[verbatim,quote] -clarinet = \relative c'' { - \transposition bes - a4 gis g gis -} -\addQuote "clarinet" { \clarinet } - -\relative c' { - c4 cis \quoteDuring #"clarinet" { s2 } -} -@end lilypond - -Es ist möglich, Zitate mit eindeutigen Bezeichnungen zu versehen -(unter Benutzung von @emph{tags}), um sie auf unterschiedliche -Weise zu verarbeiten. Einzelheiten zu diesem Vorgehen werden -vorgestellt in -@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 - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{quoting-another-voice.ly} - - -@seealso -Notationsreferenz: -@ref{Instrument transpositions}, -@ref{Using tags}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{QuoteMusic}, -@rinternals{Voice}. - - -@knownissues - -Nur der Inhalt der ersten Stimme innerhalb eines -@code{\addQuote}-Befehls wird für das Zitat herangezogen, die -Variable @var{Noten} kann also keine @code{\new} oder @code{\context Voice}-Einheiten enthalten, die zu einer anderen -Stimme wechseln würden. - -Ziernoten und Vorschläge können nicht zitiert werden und können -sogar dazu führen, dass LilyPond abstürzt. - -Wenn geschachtelte Triolen zitiert werden, ist das Notenbild -unter Umständen sehr schlecht. - -In früheren LilyPond-Versionen (vor 2.11) wurde der Befehl -@code{addQuote} vollständig in Kleinbuchstaben geschrieben: -@code{\addquote}. - - -@node Formatting cue notes -@unnumberedsubsubsec Formatting cue notes - -@cindex Stichnoten -@cindex Noten, Stichnoten -@cindex Stichnoten, Formatierung -@cindex Fragmente -@cindex andere Stimmen zitieren -@cindex Zitieren von anderen Stimmen - -@funindex \cueDuring -@funindex cueDuring - -Der vorige Abschnitt zeigt, wie man Zitate erstellt. Der -@code{\cueDuring}-Befehl (engl. cue note = Stichnote) -ist eine spezialisierte Form des -@code{\quoteDuring}-Befehls, der insbesondere dazu dient, -Stichnoten zu einer Stimme hinzuzufügen. Seine Syntax lautet: - -@example -\cueDuring #@var{Stimmenbezeichnung} #@var{Stimme} @var{Noten} -@end example - -Dieser Befehl kopiert die entsprechenden Takte von -@var{Stimmenbezeichnung} in einen @code{CueVoice}-Kontext. Eine -@code{CueVoice} (Stichnoten-Stimme) wird implizit erstellt -und erscheint simultan mit @var{Noten}, wobei folglich eine -polyphone Situation entsteht. Das @var{Stimme}-Argument entscheidet, -ob die Stichnoten als eine erste oder zweite Stimme -eingefügt werden sollen; @code{UP} entspricht der ersten Stimme, -@code{DOWN} der zweiten. - -@lilypond[verbatim,quote] -oboe = \relative c'' { - r2 r8 d16 f e g f a - g8 g16 g g2. -} -\addQuote "oboe" { \oboe } - -\new Voice \relative c'' { - \cueDuring #"oboe" #UP { R1 } - g2 c, -} -@end lilypond - -@noindent -In diesem Beispiel muss der @code{Voice}-Kontext explizit -begonnen werden, damit nicht der gesamte musikalische Ausdruck -als Stichnoten-Stimme formatiert wird. - -Die Bezeichnung des Instruments, von dem die Stichnoten genommen -werden, kann auch ausgegeben werden, wenn die Eigenschaft -@code{instrumentCueName} im @code{CueVoice}-Kontext definiert wird. - -@lilypond[verbatim,quote] -oboe = \relative c''' { - g4 r8 e16 f e4 d -} -\addQuote "oboe" { \oboe } - -\new Staff \relative c'' << - \new CueVoice \with { - instrumentCueName = "ob." - } - \new Voice { - \cueDuring #"oboe" #UP { R1 } - g4. b8 d2 - } ->> -@end lilypond - -@cindex Entfernen von Stichnoten -@cindex Stichnoten, entfernen - -@funindex \killCues -@funindex killCues -@funindex \transposedCueDuring -@funindex transposedCueDuring - -Zusätzlich zu der Instrumentenbezeichnung kann auch die -Bezeichnung des Originalinstruments ausgegeben werden, und alle -Änderungen, die für die Stichnoten gemacht wurden, müssen -wieder rückgängig gemacht werden. Das kann mit den Befehlen -@code{\addInstrumentDefinition} und @code{\instrumentSwitch} -vorgenommen werden. Ein Beispiel und mehr Information findet -sich in -@ref{Instrument names}. - -Der @code{\killCues}-Befehl entfernt Stichnoten aus einem -musikalischen Ausdruck. Das kann nützlich sein, wenn die -Stichnoten von einer Stimme entfernt werden sollen, aber in -einer anderen Edition benötigt werden. - -@lilypond[verbatim,quote] -flute = \relative c''' { - r2 cis2 r2 dis2 -} -\addQuote "flute" { \flute } - -\new Voice \relative c'' { - \killCues { - \cueDuring #"flute" #UP { R1 } - g4. b8 d2 - } -} -@end lilypond - -Der @code{\transposedCueDuring}-Befehl bietet sich an, wenn man -Stichnoten eines Instrumentes mit einem vollständig anderen -Register hinzufügen will. Die Syntax ähnelt der des -@code{\cueDuring}-Befehls, aber ein zusätzliches Argument -wird benötigt, das die Transposition der Stichnoten-Stimme -bezeichnet. Mehr Information zu Transposition siehe -@ref{Instrument transpositions}. - -@lilypond[verbatim,quote] -piccolo = \relative c''' { - \clef "treble^8" - R1 - c8 c c e g2 - a4 g g2 -} -\addQuote "piccolo" { \piccolo } - -cbassoon = \relative c, { - \clef "bass_8" - c4 r g r - \transposedCueDuring #"piccolo" #UP c,, { R1 } - c4 r g r -} - -<< - \new Staff = "piccolo" \piccolo - \new Staff = "cbassoon" \cbassoon ->> -@end lilypond - -Es ist möglich, Zitate mit eindeutigen Bezeichnungen zu versehen -(unter Benutzung von @emph{tags}), um sie auf unterschiedliche -Weise zu verarbeiten. Einzelheiten zu diesem Vorgehen werden -vorgestellt in -@ref{Using tags}. - - -@seealso -Notationsreferenz: -@ref{Instrument transpositions}, -@ref{Instrument names}, -@ref{Using tags}. - -Schnipsel: -@rlsr{Staff notation}. - -Referenz der Interna: -@rinternals{CueVoice}, -@rinternals{Voice}. - - -@knownissues - -Zusammenstöße können zwischen Pausen der Hauptstimme und -den Stichnoten des @code{CueVoice}-Kontexts auftreten. diff --git a/Documentation/de/user/templates.itely b/Documentation/de/user/templates.itely deleted file mode 100644 index dfb3629152..0000000000 --- a/Documentation/de/user/templates.itely +++ /dev/null @@ -1,326 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Templates -@appendix Templates - -Dieser Abschnitt des Handbuches enthält Vorlagen, in denen die -LilyPond-Partitur schon eingerichtet ist. Sie müssen nur noch Ihre -Noten einfügen, die Datei mit LilyPond übersetzen und sich an dem -schönen Notenbild erfreuen! - -@c bad node name for ancient notation to avoid conflict -@menu -* Single staff:: -* Piano templates:: -* String quartet:: -* Vocal ensembles:: -* Ancient notation templates:: -* Jazz combo:: -* Lilypond-book templates:: -@end menu - - -@node Single staff -@appendixsec Single staff - -@appendixsubsec Notes only - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-only-notes.ly} - - -@appendixsubsec Notes and lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-notes-and-lyrics.ly} - - -@appendixsubsec Notes and chords - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes-and-chords.ly} - - -@appendixsubsec Notes, lyrics, and chords. - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes,-lyrics,-and-chords.ly} - - -@node Piano templates -@appendixsec Piano templates - -@appendixsubsec Solo piano - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-simple.ly} - - -@appendixsubsec Piano and melody with lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-melody-and-lyrics.ly} - - -@appendixsubsec Piano centered lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-lyrics.ly} - - -@appendixsubsec Piano centered dynamics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-dynamics.ly} - - -@node String quartet -@appendixsec String quartet - -@appendixsubsec String quartet - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-simple.ly} - - -@appendixsubsec String quartet parts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-with-separate-parts.ly} - - -@node Vocal ensembles -@appendixsec Vocal ensembles - -@appendixsubsec SATB vocal score - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template.ly} - - -@appendixsubsec SATB vocal score and automatic piano reduction - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-automatic-piano-reduction.ly} - - -@appendixsubsec SATB with aligned contexts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} - - -@c bad node name to avoid node name conflict -@node Ancient notation templates -@appendixsec Ancient notation templates - -@appendixsubsec Transcription of mensural music - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-mensural-music.ly} - - -@appendixsubsec Gregorian transcription template - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-gregorian-music.ly} - - -@node Jazz combo -@appendixsec Jazz combo - -@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.12.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 - - -@node Lilypond-book templates -@appendixsec Lilypond-book templates - -Diese Vorlagen können mit @code{lilypond-book} benutzt werden. Wenn -Sie dieses Programm noch nicht kennen, lesen Sie bitte den Abschnitt -@rprogram{LilyPond-book}. - -@appendixsubsec LaTeX - -LilyPond-Noten können in LaTeX-Dokumente eingefügt werden. - -@example -\documentclass[]@{article@} - -\begin@{document@} - -Normaler LaTeX-Ttext. - -\begin@{lilypond@} -\relative c'' @{ -a4 b c d -@} -\end@{lilypond@} - -Weiterer LaTeX-Text. - -\begin@{lilypond@} -\relative c'' @{ -d4 c b a -@} -\end@{lilypond@} -\end@{document@} -@end example - -@appendixsubsec Texinfo - -LilyPond-Noten können auch in Texinfo eingefügt werden -- dieses -gesamte Handbuch ist in Texinfo geschrieben. - -@example -\input texinfo -@@node Top - -Texinfo-Text - -@@lilypond[verbatim,fragment,ragged-right] -a4 b c d -@@end lilypond - -Weiterer Texinfo-Text - -@@lilypond[verbatim,fragment,ragged-right] -d4 c b a -@@end lilypond - -@@bye -@end example - - -@appendixsubsec 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 - diff --git a/Documentation/de/user/text.itely b/Documentation/de/user/text.itely deleted file mode 100644 index 54cf2646e2..0000000000 --- a/Documentation/de/user/text.itely +++ /dev/null @@ -1,1437 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Text -@section Text - -@lilypondfile[quote]{text-headword.ly} - -Dieser Abschnitt erklärt, wie man Text (mit vielfältiger -Formatierung) in Partituren einfügt. - -@noindent -Einige Textelemente, die hier nicht behandelt werden, finden sich -in anderen Abschnitten: @ref{Vocal music}, @ref{Titles and headers}. - -@menu -* Writing text:: -* Formatting text:: -* Fonts:: -@end menu - - -@node Writing text -@subsection Writing text - -Dieser Abschnitt zeigt verschiedene Arten, wie Text in die Partitur -eingefügt werden kann. - -@cindex Text, andere Sprachen - -@warning{Wenn man Zeichen mit Akzenten und Umlaute oder besondere -Zeichen (wie etwa Text mit anderen Alphabeten) eingeben möchte, -kann man die Zeichen einfach direkt in die Datei einfügen. Die -Datei muss als UTF-8 gespeichert werden. Für mehr Information -siehe @ref{Text encoding}.} - -@menu -* Text scripts:: -* Text spanners:: -* Text marks:: -* Separate text:: -@end menu - - -@node Text scripts -@unnumberedsubsubsec Text scripts - -@cindex Textarten -@cindex Textelemente, nicht leer -@cindex zitierter Text - -Am einfachsten kann Text mit geraden Anführungsstrichen -in eine Partitur eingefügt werden, wie das folgende Beispiel -zeigt. Derartiger Text kann manuell über oder unter dem -Notensystem platziert werden, die Syntax hierzu ist beschrieben -in @ref{Direction and placement}. - -@lilypond[quote,verbatim,relative=2] -d8^"pizz." g f e a4-"scherz." f -@end lilypond - -Diese Syntax ist eine Kurzform, komplexere Formatierungen -können einem Text hinzugefügt werden, wenn man -explizit den @code{\markup}-Befehl mit darauf folgenden -geschweiften Klammern einsetzt, wie beschrieben in -@ref{Formatting text}. - -@lilypond[quote,verbatim,relative=2] -a8^\markup { \italic pizz. } g f e -a4_\markup { \tiny scherz. \bold molto } f -@end lilypond - -Standardmäßig haben Textbeschriftungen keinen Einfluss auf die -Positionierung der Noten. Man kann aber auch bestimmen, dass -die Breite des Textes mit berücksichtigt wird. Im nächsten -Beispiel fordert der erste Text keinen Platz, während der -zweite die Note nach rechts verschiebt. Das Verhalten wird mit -dem Befehl @code{\textLengthOn} (Textlänge an) erreicht, rückgängig -kann es mit dem Befehl @code{\textLengthOff} gemacht werden. - -@lilypond[quote,verbatim,relative=2] -a8^"pizz." g f e -\textLengthOn -a4_"scherzando" f -@end lilypond - - -@predefined -@funindex \textLengthOn -@code{\textLengthOn}, -@funindex \textLengthOff -@code{\textLengthOff}. -@endpredefined - - -@seealso -Notationsreferenz: -@ref{Formatting text}, -@ref{Direction and placement}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: -@rinternals{TextScript}. - -@knownissues - -Eine Überprüfung, ob sich auch alle Textbeschriftungen und Gesangstext -innerhalb der Ränder der Noten befinden, braucht verhältnismäßig -viel Rechenaufwand. Diese Überprüfung ist standardmäßig ausgestellt, -damit LilyPond die Dateien schneller bearbeiten kann. Man kann -die Überprüfung aber mit folgendem Code einschalten: - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - - - -@node Text spanners -@unnumberedsubsubsec Text spanners - -@cindex Textstrecker -@cindex Strecker, Text - -Einige Aufführungsanweisungen, etwa @notation{rallentando} oder -@notation{accelerando}, werden als Text geschrieben, gefolgt von -einer gestrichelten Linie, die anzeigt, wie weit sich die Anweisung -auswirkt. Solche Objekte, @qq{Strecker} (engl. spanners) genannt, -können von einer Note bis zu einer anderen mit folgender -Anweisung erstellt werden: - -@lilypond[verbatim,quote,relative=2] -\override TextSpanner #'(bound-details left text) = "rit." -b1\startTextSpan -e,\stopTextSpan -@end lilypond - -@noindent -Der Text wird durch Objekteigenschaften beeinflusst. In den -Standardeinstellungen wird er kursiv ausgegeben, aber eine andere -Formatierung kann erreicht werden, indem man @code{\markup}-Blöcke -einsetzt, wie beschrieben in @ref{Formatting text}. - -@lilypond[quote,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) = - \markup { \upright "rit." } -b1\startTextSpan c -e,\stopTextSpan -@end lilypond - -Auch der Stil der Linie kann ähnlich wie der Text mit den Objekteigenschaften -geändert werden. Diese Syntax ist beschrieben in @ref{Line styles}. - - -@predefined -@funindex textSpannerUp -@code{\textSpannerUp}, -@funindex textSpannerDown -@code{\textSpannerDown}, -@funindex textSpannerNeutral -@code{\textSpannerNeutral}. -@endpredefined - - -@seealso -Notationsreferenz: -@ref{Line styles}, -@ref{Dynamics}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: -@rinternals{TextSpanner}. - - - -@node Text marks -@unnumberedsubsubsec Text marks - -@cindex Coda an Taktlinie -@cindex Segno an Taktlinie -@cindex Fermate an Taktlinie -@cindex Taktlinie, Symbole anfügen -@cindex Symbole auf der Taktlinie -@funindex \mark - -Verschiedene Textelemente können der Partitur hinzugefügt werden, -indem man die Syntax für Zeichen einsetzen, wie beschrieben in -@ref{Rehearsal marks}: - -@c \mark needs to be placed on a separate line (it's not -@c attached to an object like \markup is). -vv - -@lilypond[verbatim,quote,relative=2] -c4 -\mark "Allegro" -c c c -@end lilypond - -Diese Syntax ermöglicht es, beliebigen Text über eine Taktlinie -zu platzieren, weitere Formatierungsmöglichkeiten sind mit dem -@code{\markup}-Befehl gegeben, wie beschrieben in -@ref{Formatting text}: - -@lilypond[fragment,quote,relative=1] -1 -\mark \markup { \italic { colla parte } } -2 -1 -@end lilypond - -@noindent -Diese Syntax ermöglicht es auch, besondere Zeichen einzufügen, wie -etwa Coda-, Segno- oder Fermatenzeichen, indem das entsprechende -Symbol mit dem Befehl @code{\musicglyph} angegeben wird, wie -beschrieben in -@ref{Music notation inside markup}: - -@lilypond[fragment,quote,relative=2] -2 -\mark \markup { \musicglyph #"scripts.ufermata" } -1 -@end lilypond - -@noindent -Derartige Objekte werden über dem höchsten System einer Partitur -gesetzt -- abhängig davon, ob sie mitten im Takt oder an seinem -Ende notiert werden, werden sie zwischen Noten oder über der -Taktlinie gesetzt. Wenn sie an einem Zeilenumbruch angegeben -werden, wird das Zeichen zu Beginn der nächsten Zeile ausgegeben. - -@lilypond[fragment,quote,relative=2] -\mark "Allegro" -c1 c -\mark "assai" \break -c c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-at-the-end-of-a-line-or-a-score.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{aligning-marks-with-various-notation-objects.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-on-every-staff.ly} - -@seealso -Notationsreferenz: -@ref{Rehearsal marks}, -@ref{Formatting text}, -@ref{Music notation inside markup}, -@ref{The Feta font}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: -@rinternals{RehearsalMark}. - -@knownissues -@c To be removed when Issue 69 in the tracker gets fixed. -vv - -Wenn ein Zeichen am Ende des letzten Taktes eines Stückes notiert -wird (wo also keine nächste Zeile mehr existiert), wird das Zeichen -überhaupt nicht gesetzt. - - - -@node Separate text -@unnumberedsubsubsec Separate text - -@cindex separater Text -@cindex Text alleine -@cindex nur Text - -@funindex \markup - -Eine @code{\markup}-Umgebung kann auch für sich alleine existieren, -außerhalb einer @code{\score}-Umgebung, als ein Ausdruck auf der -höchsten Ebene. - -@c KEEP LY -@lilypond[verbatim,quote] -\markup { - Morgen, morgen, und morgen... -} -@end lilypond - -@noindent -Damit kann Text unabhängig von den Noten gesetzt werden. Das -bietet sich vor allem in Situationen an, in denen mehrere Stücke -in einer Datei vorkommen, wie beschrieben in -@ref{Multiple scores in a book}. - -@c KEEP LY -@lilypond[quote,verbatim] -\score { - c'1 -} -\markup { - Morgen, übermorgen, und überübermorgen... -} -\score { - c'1 -} -@end lilypond - -Unabhängige Textabschnitte können über mehrere Seiten reichen, so -dass man Textdokumente oder Bücher ausschließlich mit LilyPond -setzen kann. Einzelheiten zu den vielfältigen Möglichkeiten finden -sich in @ref{Multi-page markup}. - - -@predefined -@code{\markup}, -@funindex \markuplines -@code{\markuplines}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{stand-alone-two-column-markup.ly} - -@seealso -Notationsreferenz: -@ref{Formatting text}, -@ref{File structure}, -@ref{Multiple scores in a book}, -@ref{Multi-page markup}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: -@rinternals{TextScript}. - - - -@node Formatting text -@subsection Formatting text - -Dieser Abschnitt zeigt grundlegende und fortgeschrittene -Formatierung von Text, wobei der Textbeschriftungsmodus -(@code{\markup} benutzt wird. - -@menu -* Text markup introduction:: -* Selecting font and font size:: -* Text alignment:: -* Graphic notation inside markup:: -* Music notation inside markup:: -* Multi-page markup:: -@end menu - -@node Text markup introduction -@unnumberedsubsubsec Text markup introduction - -@cindex markup -@cindex Textbeschriftung -@cindex Beschriftung, Text -@cindex Setzen von Text -@funindex \markup - -Eine @code{\markup}-Umgebung wird benutzt, um Text mit einer -großen Anzahl von Formatierungsmöglichkeiten (im @qq{markup-Modus}) -zu setzen. - -@cindex Textbeschriftungs-Ausdrücke -@cindex Text, Syntax -@cindex markup, Syntax - -Die Syntax für Textbeschriftungen ähnelt der normalen Syntax von -LilyPond: ein @code{\markup}-Ausdruck wird in geschweifte Klammern -eingeschlossen (@code{@{@dots{} @}}). Ein einzelnes Wort wird als -ein Minimalausdruck erachtet und muss deshalb nicht notwendigerweise -eingeklammert werden. - -Anders als Text in Anführungsstrichen können sich in einer -Textbeschriftungsumgebung (@code{\markup}) geschachtelte Ausdrücke -oder weitere Textbefehle befinden, eingeführt mit einem Backslash -(@code{\}). Derartige Befehle beziehen sich nur auf den ersten -der folgenden Ausdrücke. - -@lilypond[quote,verbatim,relative=2] -a1-\markup intenso -a2^\markup { poco \italic più forte } -c e1 -d2_\markup { \italic "string. assai" } -e -b1^\markup { \bold { molto \italic agitato } } -c -@end lilypond - -@cindex Sonderzeichen in Textbeschriftungen -@cindex Textbeschriftung, Sonderzeichen -@cindex besondere Zeichen, Text -@cindex Text mit Sonderzeichen -@cindex Anführungsstriche im Text - -Eine @code{\markup}-Umgebung kann auch Text in -Anführungszeichen beinhalten. Derartige Zeichenketten werden als -ein Textausdruck angesehen, und darum werden innerhalb von ihnen -Befehle oder Sonderzeichen (wie @code{\} oder @code{#}) so -ausgegeben, wie sie eingeben werden. Doppelte Anführungsstriche -können gesetzt werden, indem man ihnen einen Backslash voranstellt. - -@c KEEP LY -@lilypond[quote,verbatim,relative=2] -a1^"\italic Text..." -a_\markup { \italic "... setzt \"kursive\" Buchstaben!" } -a a -@end lilypond - -Damit eine Anzahl von Wörtern als ein einziger Ausdruck behandelt -wird, müssen alle Wörter zwischen geraden Anführungszeichen (Shift+2) -stehen oder ihnen muss ein Befehl vorangestellt werden. Die Art, -wie die Ausdrücke definiert sind, wirkt sich darauf aus, wie -sie übereinander gestapelt, mittig und aneinander ausgerichtet -werden. Im folgenden Beispiel verhält sich der zweite -@code{\markup}-Ausdruck genauso wie der erste: - -@lilypond[quote,verbatim,relative=2] -c1^\markup { \center-column { a bbb c } } -c1^\markup { \center-column { a { bbb c } } } -c1^\markup { \center-column { a \line { bbb c } } } -c1^\markup { \center-column { a "bbb c" } } -@end lilypond - -Textbeschriftung kann auch durch Variablen definiert werden. Diese -Variablen können dann direkt an Noten angefügt werden: - -@lilypond[quote,verbatim] -allegro = \markup { \bold \large Allegro } - -{ - d''8.^\allegro - d'16 d'4 r2 -} -@end lilypond - - -@noindent -Eine ausführliche Liste der @code{\markup}-Befehle findet sich in -@ref{Text markup commands}. - - -@seealso -Notationsreferenz: -@ref{Text markup commands}. - -Schnipsel: -@rlsr{Text}. - -Installierte Dateien: -@file{scm/@/markup@/.scm}. - - -@knownissues - -Syntaxfehler im Textbeschriftungsmodus können sehr verwirrend sein. - - -@node Selecting font and font size -@unnumberedsubsubsec Selecting font and font size - -@cindex Schriftschnitt verändern -@funindex \italic -@funindex \bold -@funindex \underline - -Einfache Änderungen des Schriftartschnitts können im Textbeschriftungsmodus -vorgenommen werden: - -@lilypond[quote,verbatim,relative=2] -d1^\markup { - \bold { Più mosso } - \italic { non troppo \underline Vivo } -} -r2 r4 r8 -d,_\markup { \italic quasi \smallCaps Tromba } -f1 d2 r -@end lilypond - -@cindex Schriftgröße -@cindex Textgröße -@cindex Größe der Schriftart -@funindex \fontsize -@funindex \smaller -@funindex \larger -@funindex \magnify - -Die Größe von Buchstaben kann auf verschiedene Arten verändert werden: -@itemize -@item -die Schriftgröße kann auf bestimmte deinierte Standardgrößen gesetzt werden, - -@item -die Schriftgröße kann mit einem absoluten Wert gesetzt werden, - -@item -die Schriftgröße kann relativ zur vorhergehenden Größe geändert werden. -@end itemize - -@noindent -Das Beispiel unten zeigt alle drei Möglichkeiten: - -@lilypond[quote,verbatim,relative=1] -f1_\markup { - \tiny espressivo - \large e - \normalsize intenso -} -a^\markup { - \fontsize #5 Sinfonia - \fontsize #2 da - \fontsize #3 camera -} -bes^\markup { (con - \larger grande - \smaller emozione - \magnify #0.6 { e sentimento } ) -} -d c2 r8 c bes a g1 -@end lilypond - -@cindex hochgestellt -@cindex tiefergestellt -@funindex \super -@funindex \sub - -Text kann auch hoch- bzw. tiefgestellt gesetzt werden. Die so markierten -Buchstaben werden automatisch in einer kleineren Schriftgröße gesetzt, -aber die normale Schriftgröße kann auch eingesetzt werden: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { 1 \super st movement } - \line { 1 \normal-size-super st movement - \sub { (part two) } } - } -} -@end lilypond - -@cindex Schriftfamilien -@cindex Schriftschnitte - -Der Textbeschriftungsmodus stellt eine einfache Möglichkeit zur Verfügung -unterschiedliche Schriftschnitte anzuwählen. Ohne besondere Einstellungen -wird automatisch eine Schriftart mit Serifen ausgewählt. Das Beispiel -unten zeigt die Verwendung der eigenen Zahlenschriftart von LilyPond, -den Einsatz von serifenloser Schriftart und von Schreibmaschinenschriftart. -Die letzte Zeile zeigt, dass sich die Standardeinstellung mit dem -Befehl @code{\roman} wieder herstellen lässt. - -@lilypond[quote,verbatim] -\markup { - \column { - \line { Act \number 1 } - \line { \sans { Scene I. } } - \line { \typewriter { Verona. An open place. } } - \line { Enter \roman Valentine and Proteus. } - } -} -@end lilypond - -@noindent -Einige dieser Schriftarten, etwa die Zahlenschriftart oder die Schriftart -für Dynamikzeichen, stellen nicht alle Zeichen zur Verfügung, wie beschrieben -in @ref{New dynamic marks} und @ref{Manual repeat marks}. - -@c \concat is actually documented in Align (it is not -@c a font-switching command). But we need it here. -vv - -Einige Schriftartbefehle können ungewollte Leerzeichen innerhalb von Wörtern -hervorrufen. Das kann vermieden werden, indem die einzelnen Elemente mit -dem Befehl @code{\concat} zu einem Element verschmolzen werden: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \concat { 1 \super st } - movement - } - \line { - \concat { \dynamic p , } - \italic { con dolce espressione } - } - } -} -@end lilypond - -Eine ausführliche Liste der unterschiedlichen Befehl zur Beeinflussung -der Schriftarten findet sich in @ref{Font}. - -Es ist auch möglich, eigene Schriftfamlien zu definieren, wie erklärt in -@ref{Fonts}. - - -@predefined -@funindex \teeny -@code{\teeny}, -@funindex \tiny -@code{\tiny}, -@funindex \small -@code{\small}, -@funindex \normalsize -@code{\normalsize}, -@funindex \large -@code{\large}, -@funindex \huge -@code{\huge}, -@funindex \smaller -@code{\smaller}, -@funindex \larger -@code{\larger}. -@endpredefined - - -@seealso -Notationsreferenz: -@ref{Font}, -@ref{New dynamic marks}, -@ref{Manual repeat marks}, -@ref{Fonts}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: -@rinternals{TextScript}. - -Installierte Dateien: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node Text alignment -@unnumberedsubsubsec Text alignment - -@cindex Text, Ausrichtung -@cindex Ausrichtung von Text - -Dieser Abschnitt zeigt, wie man Text im Textbeschriftungsmodus -eingibt. Textobjekte können auch als eine Einheit verschoben -werden, wie beschrieben in @rlearning{Moving objects}. - -@c Padding commands should be mentioned on this page, but -@c most of these require \box to be more clearly illustrated. -vv - -@cindex Text, horizontale Ausrichtung -@cindex horizontale Ausrichtung von Text -@funindex \left-align -@funindex \center-align -@funindex \right-align - -Textbeschriftungsobjekte können auf verschiedene Weise ausgerichtet -werden. Standardmäßig wird ein Textobjekt an seiner linken Ecke -ausgerichtet, darum wird das erste und zweite Objekt gleichermaßen -an der linken Ecke ausgerichtet. - -@lilypond[quote,verbatim,relative=2] -d1-\markup { poco } -f -d-\markup { \left-align poco } -f -d-\markup { \center-align { poco } } -f -d-\markup { \right-align poco } -@end lilypond - -@funindex \halign - -Die horizontale Ausrichtung kann mit einer Zahl auf einen exakten -Wert festgelegt werden: - -@lilypond[quote,verbatim,relative=2] -a1-\markup { \halign #-1 poco } -e' -a,-\markup { \halign #0 poco } -e' -a,-\markup { \halign #0.5 poco } -e' -a,-\markup { \halign #2 poco } -@end lilypond - -@noindent -Manche Objekte haben eigene Ausrichtungsvorgänge und werden deshalb -nicht von diesen Befehlen beeinflusst. Es ist möglich, solche -Objekte als eine Einheit anzusprechen und zu bewegen, wie -gezeigt in @ref{Text marks}. - -@cindex Text, vertikale Ausrichtung -@cindex vertickale Ausrichtung von Text -@funindex \raise -@funindex \lower - -Die vertikale Ausrichtung ist etwas schwieriger. Textelemente -können komplett verschoben werden, es ist aber auch möglich, nur -einen Teil innerhalb der Textbeschriftung zu bewegen. In diesem -Fall muss dem zu verschiebenden Objekt ein Ankerpunkt zugewiesen -werden, welcher entweder ein anderes Textelement oder ein -unsichtbares Objekt sein kann (im Beispiel mit @code{\null} erstellt). -Der letzte Text im Beispiel hat keinen Anker und wird deshalb auch nicht verschoben. - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \raise #2 { Scène 1 } -} -a' -g_\markup { - \null - \lower #4 \bold { Très modéré } -} -a -d,^\markup { - \raise #4 \italic { Une forêt. } -} -a'4 a g2 a -@end lilypond - -@funindex \general-align -@funindex \translate -@funindex \translate-scaled - -Einige Befehle können sowohl die horizontale als auch die vertikale -Ausrichtung von Textobjekten beeinflussen. Jedes Objekt, das auf -diese Weise verschoben wird, benötigt einen Anker: - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \translate #'(-1 . 2) "Scène 1" -} -a' -g_\markup { - \null - \general-align #Y #3.2 \bold "Très modéré" -} -a -d,^\markup { - \null - \translate-scaled #'(-1 . 2) \teeny "Une forêt." -} -a'4 a g2 a -@end lilypond - -@funindex \column -@funindex \center-column - -@cindex mehrzeiliger Text -@cindex Text, mehrere Zeilen -@cindex Blöcke, Text -@cindex Textblöcke - -Ein Textbeschriftungsobjekt kann mehrere Zeilen beinhalten. Im folgenden -Beispiel wird jeder Ausdruck innerhalb von @code{\markup} auf einer -eigenen Zeile gesetzt, entweder linksbündig oder zentriert: - -@lilypond[quote,verbatim] -\markup { - \column { - a - "b c" - \line { d e f } - } - \hspace #10 - \center-column { - a - "b c" - \line { d e f } - } -} -@end lilypond - -@funindex \fill-line - -@cindex Text auf der Seite zentrieren -@cindex Zentrieren von Text auf der Seite - -Eine Anzahl an Ausdrücken innerhalb von @code{\markup} kann auch -gestreckt werden, so dass die gesamte Seitenbreite benutzt wird. Wenn -nur ein Objekt vorhanden ist, wird es zentriert gesetzt. Die Ausdrücke -selber können wiederum mehrzeilig sein und andere Textbeschriftungsbefehle -beinhalten. - -@lilypond[quote,verbatim] -\markup { - \fill-line { - \line { William S. Gilbert } - \center-column { - \huge \smallCaps "The Mikado" - or - \smallCaps "The Town of Titipu" - } - \line { Sir Arthur Sullivan } - } -} -\markup { - \fill-line { 1885 } -} -@end lilypond - -@funindex \wordwrap -@funindex \justify - -@cindex Umbruch von Text -@cindex Blocksatz, Text -@cindex Text, Blocksatz - -Längere Texte können auch automatisch umgebrochen werden, wobei es -möglich ist, die Zeilenbreite zu bestimmen. Der Text ist entweder -linksbündig oder im Blocksatz, wie das nächste Beispiel illustriert: - -@lilypond[quote,verbatim] -\markup { - \column { - \line \smallCaps { La vida breve } - \line \bold { Acto I } - \wordwrap \italic { - (La escena representa el corral de una casa de - gitanos en el Albaicín de Granada. Al fondo una - puerta por la que se ve el negro interior de - una Fragua, iluminado por los rojos resplandores - del fuego.) - } - \hspace #0 - - \line \bold { Acto II } - \override #'(line-width . 50) - \justify \italic { - (Calle de Granada. Fachada de la casa de Carmela - y su hermano Manuel con grandes ventanas abiertas - a través de las que se ve el patio - donde se celebra una alegre fiesta) - } - } -} -@end lilypond - -Eine vollständige Liste der Textausrichtungsbefehle findet sich in -@ref{Align}. - -@seealso -Handbuch zum Lernen: -@rlearning{Moving objects}. - -Notationsreferenz: -@ref{Align}, -@ref{Text marks}. - -Schnipsel: -@rlsr{Text}. - -Installierte Dateien: -@file{scm/@/define@/-markup@/-commands@/.scm}. - -Referenz der Interna: -@rinternals{TextScript}. - - - -@node Graphic notation inside markup -@unnumberedsubsubsec Graphic notation inside markup - -@cindex Graphik, eingebunden -@cindex Illustrationen im Text -@cindex Zeichnen im Text -@cindex Abbildungen im Text - -Verschiedene graphische Objekte können im Textbeschriftungsmodus -eingefügt werden. - -@funindex \box -@funindex \circle -@funindex \rounded-box -@funindex \bracket -@funindex \hbracket - -@cindex Kasten, Graphik -@cindex gerundeter Kasten, Graphik -@cindex Klammern, Graphik -@cindex Text verzieren -@cindex Text einrahmen -@cindex Rahmen, Text - -Mit bestimmten Textbeschriftungsbefehlen kann man Textelementen -Graphik hinzufügen, wie das nächste Beispiel zeigt: - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \circle Jack - \box "in the box" - \null - \line { - Erik Satie - \hspace #3 - \bracket "1866 - 1925" - } - \null - \rounded-box \bold Prelude - } -} -@end lilypond - -@funindex \pad-markup -@funindex \pad-x -@funindex \pad-to-box -@funindex \pad-around - -@cindex Platz um Text -@cindex Rand um Text -@cindex Füllung um Text -@cindex Text, Rand außen - -Es kann nötig sein, einem Text mehr Platz einzuräumen. Das geschieht mit -verschiedenen Befehlen, wie das folgende Beispiel zeigt. Eine ausführliche -Übersicht findet sich in @ref{Align}. - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \box "Charles Ives (1874 - 1954)" - \null - \box \pad-markup #2 "THE UNANSWERED QUESTION" - \box \pad-x #8 "A Cosmic Landscape" - \null - } -} -\markup \column { - \line { - \hspace #10 - \box \pad-to-box #'(-5 . 20) #'(0 . 5) - \bold "Largo to Presto" - } - \pad-around #3 - "String quartet keeps very even time, -Flute quartet keeps very uneven time." -} -@end lilypond - -@funindex \combine -@funindex \draw-circle -@funindex \filled-box -@funindex \triangle -@funindex \draw-line -@funindex \arrow-head - -@cindex Graphische Notation -@cindex Symbole, nicht Musik- - -Andere graphische Elemente oder Symbole können gesetzt werden, ohne dass -man Text benötigt. Wie mit allen Textbeschriftungen können Objekte -innerhalb von @code{\markup} kombiniert werden. - -@lilypond[quote,verbatim] -\markup { - \combine - \draw-circle #4 #0.4 ##f - \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 - \hspace #5 - - \center-column { - \triangle ##t - \combine - \draw-line #'(0 . 4) - \arrow-head #Y #DOWN ##f - } -} -@end lilypond - -@funindex \epsfile -@funindex \postscript - -@cindex Einbinden von Graphik -@cindex Bilder einbinden -@cindex Graphik einbinden -@cindex Postscript, Graphik - -Fortgeschrittene graphische Möglichkeiten bietet unter Anderem eine -Funktion, mit der man externe Graphiken im -Encapsulated PostScript (@emph{eps}) -Format einbinden kann oder -aber Graphiken direkt in den Quelltext unter Verwendung von -PostScript-Code notiert. In diesem Fall kann es nötig sein, die -Größe der Zeichnung explizit anzugeben, wie im Beispiel unten gezeigt: - -@lilypond[quote,verbatim,relative=1] -c1^\markup { - \combine - \epsfile #X #10 #"./context-example.eps" - \with-dimensions #'(0 . 6) #'(0 . 10) - \postscript #" - -2 3 translate - 2.7 2 scale - newpath - 2 -1 moveto - 4 -2 4 1 1 arct - 4 2 3 3 1 arct - 0 4 0 3 1 arct - 0 0 1 -1 1 arct - closepath - stroke" - } -c -@end lilypond - -Eine ausführliche Liste der Graphik-Befehle findet sich in -@ref{Graphic}. - -@seealso -Notationsreferenz: -@ref{Graphic}, -@ref{Editorial annotations}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: -@rinternals{TextScript}. - -Installierte Dateien: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/stencil@/.scm}. - - - -@node Music notation inside markup -@unnumberedsubsubsec Music notation inside markup - -@cindex Notationsobjekte, Einfügen -@cindex Einfügen von Notationsobjekten -@cindex Musikobjekte, Einfügen - -Auch Musikobjekte können innerhalb der Textbeschriftungsumgebung gesetzt -werden. - -Noten und Versetzungszeichen lassen sich mit @code{\markup} einfügen: - -@lilypond[quote,verbatim,relative=2] -a2 a^\markup { - \note #"4" #1 - = - \note-by-number #1 #1 #1.5 -} -b1_\markup { - \natural \semiflat \flat - \sesquiflat \doubleflat -} -\glissando -a1_\markup { - \natural \semisharp \sharp - \sesquisharp \doublesharp -} -\glissando b -@end lilypond - -Andere Notationsobjekte können auch eingefügt werden: - -@lilypond[quote,verbatim,relative=1] -g1 bes -ees-\markup { - \finger 4 - \tied-lyric #"~" - \finger 1 -} -fis_\markup { \dynamic rf } -bes^\markup { - \beam #8 #0.1 #0.5 -} -cis -d-\markup { - \markalphabet #8 - \markletter #8 -} -@end lilypond - -Allgemeiner gesagt kann jedes verfügbare Notationssymbol unabhängig -von der Notation als ein Textbeschriftungsobjekt eingefügt werden, wie -unten gezeigt. Eine vollständige Liste der verfügbaren Symbole findet -sich in -@ref{The Feta font}. - -@lilypond[quote,verbatim,relative=2] -c2 -c'^\markup { \musicglyph #"eight" } -c,4 -c,8._\markup { \musicglyph #"clefs.G_change" } -c16 -c2^\markup { \musicglyph #"timesig.neomensural94" } -@end lilypond - -@c TODO: add \lookup here? -vv -@c Probably better not to document \lookup, which is useful only for -@c printing braces, and instead document \left-brace and \right-brace -@c when these become available -td - -@noindent -Eine andere Möglichkeit, andere als Textsymbole zu schreiben, findet sich -in -@ref{Fonts explained}. - -Der Textbeschriftungsmodus unterstützt auch Diagramme für bestimmte -Instrumente: - -@lilypond[quote,verbatim,relative=2] -c1^\markup { - \fret-diagram-terse #"x;x;o;2;3;2;" -} -c^\markup { - \harp-pedal #"^-v|--ov^" -} -c -c^\markup { - \combine - \musicglyph #"accordion.accDiscant" - \combine - \raise #0.5 \musicglyph #"accordion.accDot" - \raise #1.5 \musicglyph #"accordion.accDot" -} -@end lilypond - -@c The accordion diagram is actually taken from a snippet. - -@noindent -Derartige Digramme sind dokumentiert in @ref{Instrument Specific Markup}. - -Sogar eine ganze Partitur kann in ein Textbeschriftungsobjekt eingefügt -werden. In diesem Fall muss die eingefügte @code{\score}-Umgebung -eine @code{\layout}-Umgebung haben, wie in diesem Beispiel: - -@lilypond[quote,verbatim,relative=1] -c4 d^\markup { - \score { - \relative { c4 d e f } - \layout { } - } -} -e f | -c d e f -@end lilypond - -Eine vollständige Liste der Musiksymbol-Befehle findet sich in -@ref{Music}. - -@seealso -Notationsreferenz: -@ref{Music}, -@ref{The Feta font}, -@ref{Fonts explained}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: -@rinternals{TextScript}. - -Installierte Dateien: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/fret@/-diagrams@/.scm}, -@file{scm/@/harp@/-pedals@/.scm}. - - - -@node Multi-page markup -@unnumberedsubsubsec Multi-page markup - -Normale Textbeschriftungsobjekte können nicht getrennt werden, aber mit -einer spezifischen Umgebung ist es möglich, Text auch über mehrere Seiten -fließen zu lassen: - -@lilypond[quote,verbatim] -\markuplines { - \justified-lines { - A very long text of justified lines. - ... - } - \wordwrap-lines { - Another very long paragraph. - ... - } - ... -} -@end lilypond - -Die Syntax braucht eine Liste von Textbeschriftungen folgender Art: - -@itemize -@item -das Resultat eines Beschriftungslistenbefehls, -@item -eine Textbeschriftungsliste, -@item -eine Liste von Beschriftungslisten. -@end itemize - -Eine vollständige Liste der Beschriftungslistenbefehle findet sich in -@ref{Text markup list commands}. - -@seealso -Notationsreferenz: -@ref{Text markup list commands}, -@ref{New markup list command definition}. - -Schnipsel: -@rlsr{Text}. - -Referenz der Interna: @rinternals{TextScript}. - -Installierte Dateien: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@predefined -@funindex \markuplines -@code{\markuplines}. -@endpredefined - - -@node Fonts -@subsection Fonts - -Dieser Abschnitt zeigt, wie Schriftarten eingesetzt werden können und -wie man sie in Partituren ändern kann. - -@menu -* Fonts explained:: -* Single entry fonts:: -* Entire document fonts:: -@end menu - -@node Fonts explained -@unnumberedsubsubsec Fonts explained - -@cindex Pango -@cindex Schriftarten, Hintergrundinformation -@funindex font-interface - -Schriftarten werden von mehreren Bibliotheken verwaltet. FontConfig wird -benützt, um die vorhandenen Schriftarten des Systems zu erkennen, die -gewählte Schriftart wird dann mit Pango verarbeitet. - -Notationsschriftarten können als eine Ansammlung von besonderen Zeichen -erklärt werden, wobei die Sonderzeichen in verschiedene Familien -klassifiziert werden. Die Syntax des folgenden Beispiels ermöglicht es, -direkt auf verschiedene nicht textuelle Sonderzeichen der -@code{feta}-Schriftart zuzugreifen. Das ist die Standardschriftart -für Notationselemente in LilyPond. - -@lilypond[quote,verbatim,relative=2] -a1^\markup { - \vcenter { - \override #'(font-encoding . fetaBraces) - \lookup #"brace120" - \override #'(font-encoding . fetaNumber) - \column { 1 3 } - \override #'(font-encoding . fetaDynamic) - sf - \override #'(font-encoding . fetaMusic) - \lookup #"noteheads.s0petrucci" - } -} -@end lilypond - -@noindent -Eine einfachere, aber weniger vielfältige Syntax wird beschrieben in -@ref{Music notation inside markup}. - -Drei Textschriftarten sind verfügbar (auf Englisch @code{family} genannt): -mit @code{roman} eine Schriftart -mit Serifen (Standard ist New Century Schoolbook), mit @code{sans} -eine serifenlose (gerade) Schriftart und mit @code{typewriter} eine -Schreibmaschinenschrift, in welcher die Buchstaben alle die gleiche -Weite haben. Die aktuelle Schriftart von @code{sans} und -@code{tpyewriter} wird durch Pango entspechend den Systemvorgaben -gewählt. - -Jede Familie kann verschiedene Schriftschnitte besitzen. Im Englischen -wird unterschieden zwischen @code{shape} für kursive Schnitte und -@code{series} für fette Schnitte. Im folgenden Beispiel wird -demonstriert, wie man die verschiedenen Eigenschaften auswählen kann. -Der Wert, der @code{font-size} übergeben wird, entspricht der geforderten -Änderung in Bezug auf die Standardschriftgröße. - -@lilypond[quote,verbatim,relative=2] - \override Score.RehearsalMark #'font-family = #'typewriter - \mark \markup "Ouverture" - \override Voice.TextScript #'font-shape = #'italic - \override Voice.TextScript #'font-series = #'bold - d'2.^\markup "Allegro" - \override Voice.TextScript #'font-size = #-3 - c4^smaller -@end lilypond - -@noindent -Eine ähnliche Syntax kann im Textbeschriftungsmodus eingesetzt werden, -hier bietet es sich aber an, die einfacheren Befehle zu verwenden, die -erklärt wurden in -@ref{Selecting font and font size}: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \override #'(font-shape . italic) - \override #'(font-size . 4) - Idomeneo, - } - \line { - \override #'(font-family . typewriter) - { - \override #'(font-series . bold) - re - di - } - \override #'(font-family . sans) - Creta - } - } -} -@end lilypond - -Auch wenn es einfach ist, zwischen den vorefinierten Schriftarten -umzuschalten, kann man auch eigene Schriftarten verwenden, wie erklärt -in folgenden Abschnitten: @ref{Single entry fonts} und -@ref{Entire document fonts}. - -@seealso -Notationsreferenz: -@ref{The Feta font}, -@ref{Music notation inside markup}, -@ref{Selecting font and font size}, -@ref{Font}. - - -@node Single entry fonts -@unnumberedsubsubsec Single entry fonts - -Jede Schriftart, die über das Betriebssystem installiert ist und von -FontConfig erkannt wird, kann in einer Partitur eingefügt werden. Dazu -verwendet man folgende Syntax: - -@lilypond[quote,verbatim,relative=2] -\override Staff.TimeSignature #'font-name = #"Charter" -\override Staff.TimeSignature #'font-size = #2 -\time 3/4 - -a1_\markup { - \override #'(font-name . "Vera Bold") - { Vera Bold } -} -@end lilypond - -@funindex show-available-fonts - -Mit folgendem Befehl erhält man eine Liste aller verfügbaren Schriftarten -des Betriebssystems: - -@example -lilypond -dshow-available-fonts x -@end example - -@noindent -Das letzte Argument kann ein beliebiges Zeichen sein, aber es darf nicht -fehlen. - -@seealso -Notationsreferenz: -@ref{Fonts explained}, -@ref{Entire document fonts}. - -Schnipsel: -@rlsr{Text}. - -Installierte Dateien: -@file{lily/@/font@/-config@/-scheme@/.cc}. - - - -@node Entire document fonts -@unnumberedsubsubsec Entire document fonts - -Es ist auch möglich, die Schriftarten für die gesamte Partitur zu ändern. -In diesem Fall müssen die Familien @code{roman}, -@code{sans} und @code{typewriter} in genaus dieser Reihenfolge -entsprechend der Syntax unten definiert werden. Einzelheiten zu -Schriftarten in @ref{Fonts explained}. - -@cindex Schriftartenfamilien, Definieren -@funindex make-pango-font-tree - -@lilypond[verbatim,quote] -\paper { - myStaffSize = #20 - #(define fonts - (make-pango-font-tree "Times New Roman" - "Nimbus Sans" - "Luxi Mono" - (/ myStaffSize 20))) -} - -\relative c'{ - c1-\markup { - roman, - \sans sans, - \typewriter typewriter. } -} -@end lilypond - -@c we don't do Helvetica / Courier, since GS incorrectly loads -@c Apple TTF fonts - -@seealso -Notationsreferenz: -@ref{Fonts explained}, -@ref{Single entry fonts}, -@ref{Selecting font and font size}, -@ref{Font}. - diff --git a/Documentation/de/user/tutorial.itely b/Documentation/de/user/tutorial.itely deleted file mode 100644 index 7a9ac2851f..0000000000 --- a/Documentation/de/user/tutorial.itely +++ /dev/null @@ -1,2161 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ignore -Tutorial guidelines: -- unless you have a really good reason, use either - @l ilypond[quote,verbatim] - or - @l ilypond[quote,verbatim,fragment,relative=2] - (without spaces) - Don't use any other relative=X commands. - -- use "aes" and "ees" instead of "as" and "aes". I know it's not - correct Dutch naming, but let's not confuse people with this until - we get to the Basic notation chapter. -- addition for German users to the pitches chapter about naming of pitches. -@end ignore - - -@node Tutorial -@chapter Tutorial - -Diese Übung führt ein in die Notationssprache des Programmes LilyPond -und erklärt, wie man damit Noten setzen kann. Nach einer ersten -Einleitung wird erklärt, wie die häufigsten Notenbilder in -schönen Notendruck umgesetzt werden können. - - -@menu -* First steps:: -* Single staff notation:: -* Multiple notes at once:: -* Songs:: -* Final touches:: -@end menu - - -@node First steps -@section First steps - -In diesem Abschnitt werden die Grundlagen zur Benutzung -des Programmes erklärt. - -@menu -* Compiling a file:: -* Simple notation:: -* Working on input files:: -* How to read the manual:: -@end menu - - -@node Compiling a file -@subsection Compiling a file - -@cindex Kompilieren -@cindex erstes Beispiel -@cindex Beispiel, erstes -@cindex Übersetzen von Quelltext -@cindex Groß- und Kleinschreibung -@cindex Quelltext, übersetzen -@cindex Großbuchstaben -@cindex Kleinbuchstaben - -@qq{Kompilation} ist der Begriff, der benutzt wird, um eine -Lilypond-Eingabedatei mit dem Programm LilyPond in eine -Notenausgabe umzuwandeln, die ausgedruckt werden kann. -Zusätzlich besteht die Option, eine MIDI-Datei zu produzieren, -die abgespielt werden kann. Das erste Beispiel zeigt, wie -solch eine einfache Eingabedatei ausschauen kann. - -Um Notensatz zu erstellen, muss die Notation in der Eingabedatei -beschrieben werden. Wenn man z.@w{}B. schreibt: - -@example -@{ - c' e' g' e' -@} -@end example - -@noindent -so erhält man folgendes Resultat: - -@c in this case we don't want verbatim -@lilypond[quote] -{ - c' e' g' e' -} -@end lilypond - -@warning{In jeder LilyPond-Datei müssen -@strong{@{ geschweifte Klammern @}} um die Noten -oder Gesangstext -gesetzt werden. Vor und hinter den Klammern sollten -Leerzeichen eingegeben werden, damit keine Unklarheiten -in Verbindung mit den eigentlichen Notensymbolen entstehen. -An Anfang und Ende der Zeile können diese Leerzeichen auch -weggelassen werden. Es kann sein, dass in diesem Handbuch -die Klammern in manchen Beispielen fehlen, aber man sollte -immer daran denken, sie in den eigenen Dateien zu benutzen! -Mehr Informationen zu der Darstellung der Beispiele in diesem -Handbuch gibt der Abschnitt @ref{How to read the manual}.} - -Zusätzlich unterscheidet LilyPond @strong{Groß- und Kleinschreibung}. -@w{@code{ @{ c d e @}}} ist zulässiger Code, -@w{@code{ @{ C D E @}}} dagegen resultiert in einer Fehlermeldung. - -@smallspace - -@subheading Entering music and viewing output - -@cindex PDF-Datei -@cindex Noten anzeigen -@cindex Anzeigen der Noten -@cindex Ansicht von Noten -@cindex Editoren -@cindex Texteditoren -@cindex LilyPond unter MacOS X -@cindex Windows, LilyPond starten -@cindex MacOS X, LilyPond starten -@cindex Unix, LilyPond starten -@cindex Starten von LilyPond - -In diesem Kapitel zeigen wir, welche Kommandos -eingegeben werden müssen, um ein Notenbild zu erzeugen, und wie -das Resultat dann betrachtet werden kann. - -Beachten Sie, dass es eine Reihe an Texteditoren mit besserer -Unterstützung für LilyPond gibt. Mehr dazu im Abschnitt -@rprogram{Text editor support}. - -@warning{Das erste Mal, wenn Sie LilyPond benutzen, kann es eine -Minute oder länger dauern, weil das Programm zuerst alle Schriftarten, -die auf dem System zur Verfügung stehen, untersucht. Aber nach -diesem ersten Mal läuft LilyPond sehr viel schneller.} - -@subsubheading MacOS X - -Wenn Sie das @command{LilyPond.app}-Symbol doppelt klicken, öffnet -sich eine Beispiel-Datei. Speichern Sie sie etwa als - @file{test.ly} auf dem Desktop und übersetzen Sie sie -mit dem Menü-Befehl @w{@qq{Compile > Typeset File}}. -Die PDF-Datei mit dem fertigen Notensatz wird automatisch -geöffnet. - -Das nächste Mal, wenn Sie LilyPond benutzen, sollten Sie - @qq{New} oder @qq{Open} wählen. Sie müssen die Datei -speichern, bevor Sie sie übersetzen können. Wenn es Fehler gibt, -lesen Sie die Meldungen im Log-Fenster. - -@subsubheading Windows - -Wenn sie auf das LilyPond-Symbol auf dem Desktop doppelklicken, -öffnet sich ein einfacher Texteditor mit einer Beispieldatei. Speichern -Sie sie z. B. als @file{test.ly} auf dem Desktop und klicken Sie dann -doppelt auf die Datei, um die Übersetzung zu beginnen (das Dateisymbol -ist eine Note). Nach einigen -Sekunden wird eine Datei @file{test.pdf} auf dem Desktop erscheinen. -Mit einem Doppelklick kann das fertige Notenbild in -der PDF-Datei angezeigt werden. -Eine Alternative ist es, die @file{test.ly}-Datei mit der Maus auf das -LilyPond-Symbol zu ziehen. - -Um eine schon existierende Datei zu bearbeiten, klicken Sie mit der rechten -Maustaste auf die Datei und wählen Sie @qq{Edit source}. Um eine leere -Datei zu erhalten, mit der Sie ein neues Stück beginnen können, öffnen Sie -den Texteditor durch Doppelklick auf das LilyPond-Symbol und benutzen Sie -@qq{New} im @qq{File}-Menü, oder klicken Sie mit der rechten -Maustaste auf den Desktop und wählen Sie @qq{Neu...Textdatei}, -ändern Sie dann den Namen so wie Sie möchten und ändern Sie -die Dateiendung in @code{.ly}. Doppelklicken Sie auf die Datei, -um Ihren LilyPond-Eingabecode einzugeben. - -Mit dem Doppelklick wird nicht nur die PDF-Datei erstellt, sondern -auch eine @file{.log}-Datei. Hier wird gespeichert, was LilyPond aus -der Quelldatei gelesen hat. Sollten Fehler auftreten, hilft oft ein -Blick in diese Datei. - -@subsubheading UNIX - -Erstellen Sie eine Text-Datei mit dem Namen @file{test.ly} und -geben Sie folgenden Text ein: - -@example -@{ - c' e' g' e' -@} -@end example - -Um die Datei zu bearbeiten, geben sie an der Konsole - -@example -lilypond test.ly -@end example - -@noindent -ein. -Sie werden ungefähr folgende Meldungen sehen: - - -@example -lilypond test.ly -GNU LilyPond @version{} -»test.ly« wird verarbeitet -Analysieren... -Interpretation der Musik... -Vorverarbeitung der grafischen Elemente... -Ideale Seitenanzahl wird gefunden... -Musik wird auf eine Seite angepasst... -Systeme erstellen... -Layout nach »test.ps« ausgeben... -Konvertierung nach »test.pdf«... -@end example - -Als Ergebnis erhalten Sie ein @file{test.pdf}, das Sie mit den -Standardprogrammen Ihres Betriebssystemes anschauen können. - -@node Simple notation -@subsection Simple notation - -@cindex einfache Notation -@cindex Notation, einfach - -LilyPond fügt einige Bestandteile des Notenbildes automatisch hinzu. Im -nächsten Beispiel sind nur vier Tonhöhen angegeben, aber LilyPond setzt -trotzdem einen Schlüssel, eine Taktangabe und Notendauern. - -@lilypond[verbatim,quote] -{ - c' e' g' e' -} -@end lilypond - -@noindent -Diese Einstellungen können verändert werden, aber in den meisten Fällen -sind die automatischen Werte durchaus brauchbar. - -@subheading Pitches - -@cindex Tonhöhen -@cindex relativer Modus -@cindex Apostroph -@cindex Komma -@cindex Versetzungszeichen und relativer Modus -@cindex relativer Modus und Versetzungszeichen - -@funindex \relative -@funindex relative -@funindex ' -@funindex , - - -Glossar: @rglos{pitch}, @rglos{interval}, -@rglos{scale}, @rglos{middle C}, @rglos{octave}, -@rglos{accidental}. - -@c Addition for German users about pitch naming conventions -Die Tonhöhen werden mit Kleinbuchstaben eingegeben, die den Notennamen -entsprechen. Es ist jedoch wichtig zu wissen, dass LilyPond in seiner -Standardeinstellung die englischen Notennamen verwendet. Bis auf eine -Ausnahme entsprechen sie den deutschen, deshalb wird die Voreinstellung -von LilyPond für diese Übung beibehalten. Die @emph{Ausnahme} ist das h -- in -LilyPond muss man anstelle dessen b schreiben! Das deutsche b dagegen -wird als bes notiert, ein his dagegen würde bis geschrieben. Siehe auch -@ruser{Accidentals} und @ruser{Note names in other languages}, hier -wird beschrieben, -wie sich die deutschen Notennamen benutzen lassen. -@c end addition - -Am einfachsten können Noten im @code{\relative}-Modus -eingegeben werden. In diesem Modus wird die Oktave der Note automatisch -gewählt, indem angenommen wird, dass die folgende Note immer so nah -wie möglich in Bezug auf die vorhergehende gesetzt wird, d. h. sie -wird höchstens drei Notenzeilen höher oder tiefer als die vorhergehende -Note gesetzt. Fangen -wir unser erstes Notationsbeispiel mit einer @notation{scale} an, wo also -die nächste Note immer nur eine Notenlinie über der vorherigen steht. - -@c KEEP LY -@lilypond[verbatim,quote] -% Beginnpunkt auf das mittlere C setzen -\relative c' { - c d e f - g a b c -} -@end lilypond - -Die erste Note ist ein @notation{eingestrichenes C}. Jede folgende Note -befindet sich so nah wie möglich bei der vorherigen -- das erste -@q{C} ist also das nächste C vom -eingestrichenen C aus gerechnet. Darauf folgt das nächstmögliche -D in Bezug auf die vorhergehende Note. Mit diesen Regeln können -auch Melodien mit größeren Intervallen im @code{\relative}-Modus -gebildet werden: - -@lilypond[verbatim,quote] -\relative c' { - d f a g - c b f d -} -@end lilypond - -@noindent -Es ist nicht notwendig, dass die erste Note der Melodie mit der -Note beginnt, die die erste Tonhöhe angibt. -Die erste Note (das @q{D}) des vorigen Beispiels ist das nächste D -vom eingestrichenen C aus gerechnet. - -Indem man Apostrophe @code{'} (Taste Shift+#) oder Kommata @code{,} -zu dem @w{@code{\relative c' @{}} hinzufügt oder entfernt, kann die -Oktave der ersten Tonhöhe verändert werden: - -@c KEEP LY -@lilypond[verbatim,quote] -% zweigestrichenes C -\relative c'' { - e c a c -} -@end lilypond - -Der relative Modus kann zunächst verwirrend erscheinen, aber es ist die -einfachste Art, die meisten Melodien zu notieren. Schauen wir uns an, -wie diese relative Berechnung in der Praxis funktioniert. Wenn wir mit -einem H beginnen (@code{b} in der LilyPond-Syntax), welches sich auf der -mittleren Linie im Violinschlüssel befindet, können wir C, D und E -aufwärts notieren, und A, G und F unter dem H. Wenn also die Note, die -auf das H folgt, ein C, D oder E ist, setzt LilyPond es oberhalb des -Hs, wenn es ein A, G oder F ist, wird es darunter gesetzt. - -@c KEEP LY -@lilypond[verbatim,quote] -\relative c'' { - b c % c ist 1 Zeile aufwärts, also c über dem b - b d % d ist 2 Zeilen aufwärts, oder 5 runter, also d über dem b - b e % e ist 3 aufwärts oder 4 runter, also e über dem b - b a % a ist 6 aufwärts oder 1 runter, also a unter dem b - b g % g ist 5 aufwärts oder 2 runter, also g unter dem b - b f % f ist 4 aufwärts oder 3 runter, also f unter dem b -} -@end lilypond - -Die gleiche Berechnung findet auch statt, wenn eine der Noten erhöht -oder erniedrigt ist. @notation{Versetzungszeichen} werden -@strong{vollständig ignoriert} bei der Berechnung. Genau die -gleiche Berechnung wird analog von jeder folgenden Tonhöhe aus -für die nächste Tonhöhe neu ausgeführt. - -Um Intervalle zu notieren, die größer als drei Notenzeilen sind, kann man die Oktave verändern. Mit einem Apostroph @code{'} (Taste Shift+#) -direkt hinter dem Notennamen wird die Oktave um eins erhöht, mit einem Komma @code{,} um eins erniedrigt. - -@lilypond[verbatim,quote] -\relative c'' { - a a, c' f, - g g'' a,, f' -} -@end lilypond - -@noindent -Um eine Notenhöhe um zwei (oder mehr!) Oktaven zu verändern, -werden sukzessive @code{''} oder @code{,,} benutzt -- es muss -sich dabei wirklich um zwei einzelne Apostrophen und nicht um das -Anführungszeichen @code{"}@tie{} (Taste Shift+2) handeln! Auch -die Anfangsoktave für einen @w{@code{\relative c'}}-Abschnitt kann so -verändert werden. - -@subheading Durations (rhythms) - -@cindex Notendauern -@cindex Dauern -@cindex Rhythmus -@cindex Ganze Noten -@cindex Halbe Noten -@cindex Viertelnoten -@cindex punktierte Noten - -Glossar: @rglos{beam}, @rglos{duration}, -@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, -@rglos{dotted note}. - -Die @notation{Dauer} einer Note wird durch eine Zahl bezeichnet, -die direkt auf den Notennamen folgend eingegeben wird. -@code{1} für eine @notation{ganze Note}, @code{2} für eine -@notation{halbe Note}, @code{4} für eine @notation{Viertelnote} -und so weiter. @notation{Notenhälse} und @notation{Balken} werden -automatisch hinzugefügt. - -Wenn keine Dauer bezeichnet wird, wird die der vorhergehenden Note -verwendet. Für die erste Note ist eine Viertel als Standard definiert. - -@lilypond[verbatim,quote] -\relative c'' { - a1 - a2 a4 a8 a - a16 a a a a32 a a a a64 a a a a a a a a2 -} -@end lilypond - -Um @notation{punktierte Noten} zu erzeugen, wird einfach ein Punkt -@code{.} hinter die Notendauer geschrieben. Die Dauer einer -punktierten Note muss explizit, also inklusive der Nummer, -angegeben werden. - -@lilypond[verbatim,quote] -\relative c'' { - a a a4. a8 - a8. a16 a a8. a8 a4. -} -@end lilypond - - -@subheading Rests - -@cindex Pausen -@cindex schreiben von Pausen -@cindex notieren von Pausen - -Eine @notation{Pause} wird genauso wie eine Noten eingegeben; ihre -Bezeichnung ist @code{r}@tie{}: - -@lilypond[verbatim,quote] -\relative c'' { - a r r2 - r8 a r4 r4. r8 -} -@end lilypond - - -@subheading Time signature - -@cindex Taktart - -@funindex \time -@funindex time - -Glossar: @rglos{time signature}. - -Die @notation{Taktart} kann mit dem -@code{\time}-Befehl definiert werden: - -@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 Clef - -@cindex Schlüssel -@cindex Alt -@cindex Sopran -@cindex Tenor -@cindex Bass - -@funindex \clef -@funindex clef - -Glossar: @rglos{time signature}. - -Der @notation{Notenschlüssel} kann mit dem @code{\clef}-Befehl -gesetzt werden: - -@lilypond[verbatim,quote] -\relative c' { - \clef treble - c1 - \clef alto - c1 - \clef tenor - c1 - \clef bass - c1 -} -@end lilypond - - -@subheading All together - -Hier ist ein kleines Beispiel, dass all diese Definitionen beinhaltet: - -@lilypond[verbatim,quote] -\relative c, { - \time 3/4 - \clef bass - c2 e8 c' g'2. - f4 e d c4 c, r4 -} -@end lilypond - - -@seealso -Notationsreferenz: @ruser{Writing pitches}, -@ruser{Writing rhythms}, @ruser{Writing rests}, -@ruser{Time signature}, @ruser{Clef}. - - -@node Working on input files -@subsection Working on input files - -@cindex geschweifte Klammern -@cindex Klammern, geschweift -@cindex Kommentare -@cindex Zeilenkommentare -@cindex Block-Kommentare -@cindex Groß- und Kleinschreibung -@cindex Ausdrücke -@cindex Großbuchstaben -@cindex Kleinbuchstaben - -@funindex { ... } -@funindex % -@funindex %@{ ... %@} - - -LilyPonds Quelldateien ähneln Dateien in den meisten -Programmiersprachen: Es ist auf Groß- und Kleinschreibung -zu achten und Leerzeichen werden ignoriert. Ausdrücke werden -mit geschweiften Klammern @{ @} eingeklammert und Kommentare -mit dem Prozentzeichen @code{%} auskommentiert -oder mit @code{%@{ ... %@}} umgeben. - -Wenn das jetzt unverständlich erscheint, sind hier die Erklärungen: - -@itemize - -@item -@strong{Groß- und Kleinschreibung:} -Die Bedeutung eines Zeichens verändert sich, je -nachdem, ob es groß (@w{@code{A, B, S, T}}) oder klein - (@w{@code{a, b, s, t}}) geschrieben wird. Noten müssen -immer klein geschrieben werden, @w{@code{@{ c d e @}}} funktioniert, -während @w{@code{@{ C D E @}}} einen Fehler produziert. - -@item @strong{Leerzeichen:} -Es spielt keine Rolle, wie viele Leerzeichen oder leere Zeilen sich zwischen -den Zeichen der Quelldatei befinden. -@w{@code{@{ c d e @}}} bedeutet das Gleiche wie -@w{@code{@{ c @ @ @ @ @ d e @}}} oder -@example - @{ -c d - e @} -@end example - -@noindent -Natürlich ist das letzte Beispiel etwas schwer zu lesen. Eine gute Daumenregel -ist es, Code-Blöcke mit der Tab-Taste oder zwei Leerzeichen einzurücken: -@example -@{ - c d e -@} -@end example - -@item @strong{Ausdrücke:} -Auch der kleinste Abschnitt an LilyPond-Code muss in -@strong{@{ geschweifte Klammern @}} eingeschlossen werden. Diese -Klammern zeigen LilyPond an, dass es sich um einen zusammengehörenden -musikalischen Ausdruck handelt, genauso wie Klammern @q{()} in der Mathematik. -Die Klammern sollten von jeweils einem Leerzeichen umgeben sein, um -Zweideutigkeiten auszuschließen, es sei denn, sie -befinden sich am Anfang oder Ende einer Zeile. -Ein LilyPond-Befehl gefolgt von einem einfachen Ausdruck -in Klammern (wie etwa @code{\relative @{ @}}) -wird auch als ein einzelner Musikausdruck gewertet. - -@item -@strong{Kommentare:} -Ein Kommentar ist eine Bemerkung für den menschlichen Leser -einer Quelldatei, es wird bei der Dateianalyse durch das Programm -ignoriert, so dass es also keine Auswirkung auf die Druckausgabe der -Noten hat. Es gibt zwei verschiedene Typen von Kommentaren. Das -Prozentzeichen @q{%} geht einem Zeilen-Kommentar voraus: Alles -nach diesem Zeichen wird in dieser Zeile ignoriert. -Üblicherweise wird ein Kommentar @emph{über} dem Code gesetzt, -auf den es sich bezieht. - -@example -a4 a a a -% Dieser Kommentar bezieht sich auf das H -b2 b -@end example - - -Ein Block-Kommentar ist ein ganzer Abschnitt mit einem -Kommentar. Alles, was von @code{%@{} -und @code{%@}} umgeben ist, wird ignoriert. Das heißt, -dass sich ein Block-Kommentar nicht ein einem anderen -Blockkommentar befinden kann. Wenn Sie das versuchen sollten, -beendet schon das erste @code{%@}} @emph{beide} -Block-Kommentare. Das folgende Beispiel zeigt eine -mögliche Anwendung von Kommentaren: - -@example -% Noten für twinkle twinkle hier - c4 c g' g a a g2 - -%@{ - Diese Zeilen, und die Noten unten werden - ignoriert, weil sie sich in einem Block-Kommentar - befinden. - - f f e e d d c2 -%@} -@end example - -@end itemize - - -@node How to read the manual -@subsection How to read the manual - -@cindex Handbuch, Lesen -@cindex Wie soll das Handbuch gelesen werden -@cindex Lesen des Handbuchs -@cindex Beispiele, klickbar -@cindex klickbare Beispiele -@cindex Vorlagen -@cindex Templates -@cindex Dateien konstruieren, Hinweise -@cindex Konstruieren von Dateien, Hinweise -@cindex Hinweise zur Konstruktion von Dateien - -LilyPond-Code muss immer von @{ @} Zeichen oder einem -@code{@w{\relative c'' @{ ... @}}} umgeben sein, wie -gezeigt in @ref{Working on input files}. -Im Rest dieses Handbuchs werden die meisten Beispiel allerdings darauf -verzichten. Um sie zu reproduzieren, können Sie den entsprechenden -Quellcode kopieren und in eine Textdatei einfügen, aber Sie -@strong{müssen} dabei -@code{@w{\relative c'' @{ @}}} einfügen, wie hier gezeigt: - -@example -\relative c'' @{ - ... hier das Beispiel ... -@} -@end example - -Warum werden die Klammern hier meist weggelassen? Die meisten -der Beispiele können in ein längeres Musikstück hineinkopiert -werden, und dann ist es natürlich nicht sinnvoll, wenn auch noch -@code{@w{\relative c'' @{ @}}} dazukommt; ein @code{\relative} darf -nicht innerhalb eines anderen @code{\relative} gesetzt werden, -deshalb wird es hier weggelassen, damit die Beispiele auch innerhalb -eines anderen Kontextes funktionieren. Wenn bei jedem -Beispiel @code{@w{\relative c'' @{ @}}} eingesetzt würde, -könnten Sie die kleinen Beispiele der Dokumentation -nicht einfach zu Ihrem eigenen Notentext hinzufügen. -Die meisten Benutzer wollen -Noten zu einer schon bestehenden Datei irgendwo in der Mitte -hinzufügen, deshalb wurde der relative Modus für die Beispiele -im Handbuch weggelassen. - -@subheading Clickable examples - -Viele Leute lernen Programme, indem sie einfach herumprobieren. Das -geht auch mit LilyPond. Wenn Sie in der HTML-Version dieses Handbuchs -eine Abbildung anklicken, erhalten sie exakt den LilyPond-Code, der -zum Satz der Abbildung benutzt wurde. Versuchen Sie es mit dieser -Abbildung: - -@c no verbatim here -@c KEEP LY -@lilypond[quote] -\relative c'' { - c-\markup { \bold \huge { Hier klicken! } } -} -@end lilypond - -Wenn Sie einfach alles kopieren, was im - @qq{ly snippet}-Abschnitt steht, und in eine Text-Datei -einfügen, haben Sie schon eine fertige Vorlage für weitere -Experimente. Damit Sie genau das gleiche Erscheinungsbild wie -bei dem Beispiel selber erreichen, müssen Sie alles kopieren ab der -Zeile @qq{Start -cut-&-pastable section} bis ganz zum Ende der Datei. - - -@seealso -Mehr Hinweise dazu, wie LilyPond-Eingabedateien konstruiert werden -sollten, finden sich in @ref{Suggestions for writing LilyPond input files}. -Es ist aber wahrscheinlich am Besten, zuerst -die gesamte Übung zu lesen. - - -@node Single staff notation -@section Single staff notation - -Dieses Kapitel lehrt grundlegende Bestandteile der Notation, -die für eine Stimme auf einem System gebraucht werden. - -@menu -* Accidentals and key signatures:: -* Ties and slurs:: -* Articulation and dynamics:: -* Adding text:: -* Automatic and manual beams:: -* Advanced rhythmic commands:: -@end menu - - -@node Accidentals and key signatures -@subsection Accidentals and key signatures - -@subheading Accidentals -@cindex Versetzungszeichen -@cindex Akzidentien -@cindex Kreuz -@cindex Doppelkreuz -@cindex B -@cindex Doppel-B - -@funindex es -@funindex is -@funindex eses -@funindex isis - - -Glossar: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, -@rglos{double flat}, @rglos{accidental}. - -Ein @notation{Kreuz}-Versetzungszeichen@footnote{In der Umgangssprache -werden die Versetzungszeichen häufig auch Vorzeichen genannt. In -diesem Handbuch wird jedoch zwischen Vorzeichen zur generellen Angabe -der Tonart und den Versetzungszeichen, die direkt im Notentext -erscheinen, unterschieden.} wird eingegeben, indem an den -Notennamen ein @q{is} gehängt wird, ein @notation{B}-Versetzungszeichen -durch Anhängen von @q{es}. Logischerweise wird dann ein - @notation{Doppelkreuz} oder @notation{Doppel-B} durch Anhängen -von @q{isis} oder @q{eses} geschrieben. Diese Syntax -stammt aus der Tradition der germanischen Sprachen und ist also für -deutsche Benutzer kein Problem. Es ist aber möglich, die Namen für die -@notation{Versetzungszeichen} in anderen -Sprachen zu benutzen, siehe @ruser{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -cis1 ees fisis, aeses -@end lilypond - - -@subheading Key signatures - -@cindex Tonart, Einstellung von -@cindex Vorzeichen -@cindex Dur -@cindex Moll -@cindex Vorzeichen und Versetzungszeichen -@cindex Inhalt & Darstellung -@cindex Darstellung & Inhalt - -@funindex \key -@funindex key -@funindex \major -@funindex major -@funindex \minor -@funindex minor - -Glossar: @rglos{key signature}, @rglos{major}, -@rglos{minor}. - -Die @notation{Tonart} eines Stückes wird erstellt mit dem -Befehl @code{\key}, gefolgt von einer Notenbezeichnung und -@code{\major} (für Dur) oder @code{\minor} -(für Moll). - -@lilypond[verbatim,quote,relative=2] -\key d \major -a1 -\key c \minor -a -@end lilypond - -@smallspace - -@subheading Warning: key signatures and pitches - -Glossar: @rglos{accidental}, @rglos{key signature}, -@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, -@rglos{transposition}. - -Um zu bestimmen, ob vor einer bestimmten Note ein Versetzungszeichen -erscheinen soll, untersucht LilyPond die Notenhöhen und die -Tonart. Die Tonart beeinflusst nur die @emph{gedruckten} -Versetzungszeichen, nicht die wirklichen Tonhöhen! Diese Besonderheit -scheint am Anfang oft verwirrend, so dass sie hier etwas -genauer betrachtet wird. - -LilyPond unterscheidet strickt zwischen dem musikalischen Inhalt -und dem Satz (Layout). Die Alteration (@notation{B}, -@notation{Kreuz} oder @notation{Auflösungszeichen}) einer Note gehört -zur Tonhöhe dazu und ist deshalb musikalischer -Inhalt. Ob ein Versetzungszeichen (also ein @emph{gedrucktes} Kreuz, b -oder Auflösungszeichen) auch vor der Note erscheint, hängt vom Kontext, -also vom Layout ab. Das Layout gehorcht bestimmten Regeln, und -Versetzungszeichen -werden automatisch nach diesen Regeln gesetzt. Die Versetzungszeichen im -fertigen Notenbild sind nach den Regeln des Notensatzes gesetzt. Deshalb -wird automatisch entschieden, wo sie erscheinen, und man muss -den Ton eingeben, den man @emph{hören} will. - -In diesem Beispiel - -@lilypond[verbatim,quote,relative=2] -\key d \major -d cis fis -@end lilypond - -@noindent -hat keine der Noten ein Versetzungszeichen, trotzdem muss im Quelltext -das @q{is} für @code{cis} und @code{fis} notiert werden. - -Der Code @q{b} (nach der holländischen Notenbezeichnung wird der Ton H mit -@code{b} gesetzt) heißt also nicht: @qq{Zeichne einen schwarzen Punkt -auf die Mittellinie des Systems.} Im Gegenteil, er heißt vielmehr: - @qq{Hier soll eine Note mit der Tonhöhe H gesetzt werden.} -In der Tonart As-Dur @emph{bekommt} sie ein Versetzungszeichen: - - -@lilypond[verbatim,quote,relative=2] -\key aes \major -b -@end lilypond - -Alle diese Versetzungszeichen ausdrücklich zu schreiben, bedeutet vielleicht -etwas mehr Schreibarbeit, hat aber den großen Vorteil, dass -@notation{Transpositionen} sehr viel einfacher gemacht wird -und der Druck von Versetzungszeichen nach -unterschiedlichen Regeln erfolgen kann. Siehe -@ruser{Automatic accidentals} für einige Beispiele, wie Vorzeichen -anhand von unterschiedlichen Regeln ausgegeben werden können. - - -@seealso -Notationsreferenz: @ruser{Note names in other languages}, -@ruser{Accidentals}, @ruser{Automatic accidentals}, -@ruser{Key signature}. - -Glossar: @rglos{Pitch names}. - - -@node Ties and slurs -@subsection Ties and slurs - -@cindex Legatobögen -@cindex Bögen, Legato -@cindex Bindebögen -@cindex Phrasierungsbögen -@cindex Legatobögen, Phrasierung - -@funindex ~ -@funindex ( ... ) -@funindex \( ... \) - - -@subheading Ties - -Glossar: @rglos{tie}. - -Ein @notation{Bindebogen} wird geschrieben, indem man eine Tilde @code{~} -an die erste der zu verbindenden Noten hängt. - -@lilypond[verbatim,quote,relative=2] -g4~ g c2~ -c4 ~ c8 a8 ~ a2 -@end lilypond - - -@subheading Slurs - -Glossar: @rglos{slur}. - -Ein @notation{Legatobogen} ist ein Bogen, der sich über mehrere Noten -erstreckt. Seine -Beginn- und Endnote werden mit @q{(} beziehungsweise @q{)} markiert. - -@lilypond[verbatim,quote,relative=2] -d4( c16) cis( d e c cis d) e( d4) -@end lilypond - -@subheading Phrasing slurs - -Glossar: @rglos{slur}, @rglos{phrasing}. - -Bögen, die längere Phrasierungseinheiten markieren -(Phrasierungsbögen), werden mit @code{\(} und -@code{\)} eingegeben. Es können sowohl Legato- als auch -Phrasierungsbögen gleichzeitig vorkommen, aber es kann nicht mehr -als jeweils einen Legato- und einen Phrasierungsbogen gleichzeitig -geben. - -@lilypond[verbatim,quote,relative=2] -a8(\( ais b c) cis2 b'2 a4 cis,\) -@end lilypond - -@sp 1 - -@cindex Binde- versus Legatobogen -@subheading Warnings: slurs vs. ties - -Glossar: @rglos{articulation}, @rglos{slur}, @rglos{tie}. - -Ein Legatobogen sieht aus wie ein @rglos{tie}, hat aber eine -andere Bedeutung. Ein Bindebogen verlängert nur die vorhergehende -Note und kann also nur bei zwei Noten gleicher Tonhöhe benutzt werden. -Legatobögen dagegen zeigen die Artikulation von Noten an und können -für größere Notengruppen gesetzt werden. Binde- und Legatobögen können -geschachtelt werden. - -@lilypond[verbatim,quote,relative=2] -c2~( c8 fis fis4 ~ fis2 g2) -@end lilypond - - -@seealso -Notationsreferenz: @ruser{Ties}, @ruser{Slurs}, -@ruser{Phrasing slurs}. - - -@node Articulation and dynamics -@subsection Articulation and dynamics - -@subheading Articulations - -@cindex Artikulation -@cindex Akzente -@cindex Staccato - -Glossar: @rglos{articulation}. - -Übliche @notation{Artikulationszeichen} können durch Anfügen von Minus -(@q{-}) und einem entsprechenden Zeichen eingegeben werden: - -@lilypond[verbatim,quote,relative=2] -c-. c-- c-> c-^ c-+ c-_ -@end lilypond - -@subheading Fingerings - -@cindex Fingersatz - -@funindex ^ -@funindex _ - -Glossar: @rglos{fingering}. - -Auf gleiche Weise können Fingersatzbezeichnungen hinzugefügt -werden, indem nach dem Minus (@q{-}) eine Zahl geschrieben wird: - -@lilypond[verbatim,quote,relative=2] -c-3 e-5 b-2 a-1 -@end lilypond - -Artikulationszeichen und Fingersätze werden normalerweise -automatisch platziert, aber man kann ihre Position auch vorgeben -durch die Zeichen @q{^} (oben) oder @q{_} (unten) anstelle -des Minuszeichen. An eine Note können auch mehrfache -Artikulationszeichen -gehängt werden. Meistens findet aber LilyPond alleine die beste -Möglichkeit, wie die Artikulationen platziert werden sollen. - -@lilypond[verbatim,quote,relative=2] -c_-^1 d^. f^4_2-> e^-_+ -@end lilypond - -@subheading Dynamics - -@cindex Dynamik -@cindex Crescendo -@cindex Lautstärke -@cindex Decrescendo - -@funindex \f -@funindex \ff -@funindex \mp -@funindex \p -@funindex \mf -@funindex \pp -@funindex \< -@funindex < -@funindex \> -@funindex > -@funindex \! -@funindex ! - -Glossar: @rglos{dynamics}, @rglos{crescendo}, -@rglos{decrescendo}. - -Die Dynamik innerhalb eines Stückes wird eingegeben, indem man -die Markierungen (mit einem Backslash) an -die Note hängt: - -@lilypond[verbatim,quote,relative=2] -c\ff c\mf c\p c\pp -@end lilypond - -@notation{Crescendi} und @notation{Decrescendi} werden mit dem -Befehl @code{\<} -beziehungsweise @code{\>} begonnen. Das nächste absolute -Dynamik-Zeichen, etwa @code{\f}, beendet das (De)Crescendo. -Auch mit dem Befehl @code{\!} kann es explizit beendet werden. - -@lilypond[verbatim,quote,relative=2] -c2\< c2\ff\> c2 c2\! -@end lilypond - - -@seealso -Notationsreferenz: @ruser{Articulations and ornamentations}, -@ruser{Fingering instructions}, @ruser{Dynamics}. - - -@node Adding text -@subsection Adding text - -@cindex Text, einfügen -@cindex Einfügen von Text -@cindex Hinzufügen von Text -@cindex Textbeschriftung -@cindex markup - -@funindex \markup -@funindex markup - -Text können Sie auf folgende Art in die Partitur einfügen: - -@lilypond[verbatim,quote,relative=2] -c1^"espr" a_"legato" -@end lilypond - -Zusätzliche Formatierung kann eingesetzt werden, wenn Sie den -@code{\markup}-Befehl benutzen: - -@lilypond[verbatim,quote,relative=2] -c1^\markup{ \bold espr} -a1_\markup{ - \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p -} -@end lilypond - - -@seealso -Notationsreferenz: @ruser{Writing text}. - - -@node Automatic and manual beams -@subsection Automatic and manual beams - -@cindex Balken, manuell -@cindex automatische Balken -@cindex Balken, automatisch -@cindex manuelle Balken - -@funindex [ ... ] -@funindex [ -@funindex ] -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -Alle @notation{Balken} werden automatisch gesetzt: - -@lilypond[verbatim,quote,relative=2] -a8 ais d ees r d c16 b a8 -@end lilypond - -@noindent -Wenn diese automatisch gesetzten Balken nicht gewollt sind, -können sie manuell geändert werden. Wenn nur ein Balken -hier und da korrigiert werde muss, erhält die Note, an der der Balken -anfängt, ein @q{[} (AltGr+8) und die, an der er enden soll, ein -@q{]} (AltGr+9). - -@lilypond[verbatim,quote,relative=2] -a8[ ais] d[ ees r d] a b -@end lilypond - -Wenn Sie die automatischen Balken vollständig oder für -einen längeren Abschnitt ausschalten wollen, benutzen Sie -den Befehl @code{\autoBeamOff}, um die Balken abzuschalten, -und @code{\autoBeamOn}, um sie wieder einzuschalten. - -@lilypond[verbatim,quote,relative=2] -\autoBeamOff -a8 c b4 d8. c16 b4 -\autoBeamOn -a8 c b4 d8. c16 b4 -@end lilypond - - -@seealso -Notationsreferenz: @ruser{Automatic beams}, @ruser{Manual beams}. - - -@node Advanced rhythmic commands -@subsection Advanced rhythmic commands - -@subheading Partial measure - -@cindex Auftakt -@funindex \partial -@funindex partial - -Ein @notation{Auftakt} wird mit dem Befehl @code{\partial} -eingegeben. Darauf folgt die Länge des Auftaktes: @code{\partial 4} -heißt eine Viertelnote Auftakt und @code{\partial 8} eine Achtelnote. - -@lilypond[verbatim,quote,relative=2] -\partial 8 -f8 c2 d -@end lilypond - - -@subheading Tuplets - -@cindex N-tolen -@cindex Triolen -@cindex Rhythmische Aufteilungen - -@funindex \times -@funindex times - -Glossar: @rglos{note value}, @rglos{triplet}. - -@notation{Triolen} und @notation{N-tolen} werden mit dem -@code{\times}-Befehl erzeugt. Er braucht -zwei Argumente: einen Bruch und die Noten, auf die er sich bezieht. -Die Dauer des Abschnittes wird mit dem Bruch multipliziert. -In einer Triole dauern die Noten 2/3 ihrer normalen Länge, -also hat eine Triole 2/3 als Bruch: - -@lilypond[verbatim,quote,relative=2] -\times 2/3 { f8 g a } -\times 2/3 { c r c } -\times 2/3 { f,8 g16[ a g a] } -\times 2/3 { d4 a8 } -@end lilypond - -@subheading Grace notes - -@cindex Verzierungen -@cindex Vorschlag -@cindex Vorhalt - -@funindex \grace -@funindex grace -@funindex \acciaccatura -@funindex acciaccatura -@funindex \appoggiatura -@funindex acciaccatura - -Glossar: @rglos{grace notes}, @rglos{acciaccatura}, -@rglos{appoggiatura}. - -Verzierungen werden mit dem Befehl @code{\grace} -eingegeben, Vorhalte durch den Befehl @code{\appoggiatura} -und Vorschläge mit @code{\acciaccatura}. - -@lilypond[verbatim,quote,relative=2] -c2 \grace { a32[ b] } c2 -c2 \appoggiatura b16 c2 -c2 \acciaccatura b16 c2 -@end lilypond - - -@seealso -Notationsreferenz: @ruser{Grace notes}, @ruser{Tuplets}, -@ruser{Upbeats}. - - -@node Multiple notes at once -@section Multiple notes at once - -In diesem Kapitel wird gezeigt, wie mehr als eine Note zur -gleichen Zeit gesetzt werden kann: auf unterschiedlichen Systemen -für verschiedene Instrumente oder für ein Instrument (z. B. Klavier) -und in Akkorden. - -Polyphonie nennt man in der Musik das Vorkommen von mehr als einer -Stimme -in einem Stück. Polyphonie bzw. Mehrstimmigkeit heißt für LilyPond allerdings -das Vorkommen von mehr als einer Stimme pro System. - -@menu -* Music expressions explained:: -* Multiple staves:: -* Staff groups:: -* Combining notes into chords:: -* Single staff polyphony:: -@end menu - - -@node Music expressions explained -@subsection Music expressions explained - -@cindex Musikalischer Ausdruck -@cindex Ausdruck, musikalischer -@cindex zusammengesetzter musikalischer Ausdruck - -In LilyPond-Quelldateien wird Musik durch @emph{musikalische -Ausdrücke} dargestellt. Eine einzelne Note ist ein musikalischer -Ausdruck. - -@lilypond[verbatim,quote,relative=2] -a4 -@end lilypond - -Eine Gruppe von Noten innerhalb von Klammern bildet einen neuen -Ausdruck. Dieser ist nun ein @emph{zusammengesetzter musikalischer -Ausdruck}. Hier wurde solch ein zusammengesetzter musikalischer -Ausdruck mit zwei Noten erstellt: - -@lilypond[verbatim,quote,relative=2] -{ a4 g4 } -@end lilypond - -Wenn eine Gruppe von musikalischen Ausdrücken (also beispielsweise -Noten) in geschweifte Klammern gesetzt wird, bedeutet das, dass eine -Gruppe nach der anderen gesetzt wird. Das Resultat ist ein neuer -musikalischer Ausdruck. - -@lilypond[verbatim,quote,relative=2] -{ { a4 g } f g } -@end lilypond - - -@subheading Analogy: mathematical expressions - -Die Anordnung von Ausrücken funktioniert ähnlich wie mathematische -Gleichungen. Eine längere Gleichung entsteht durch die -Kombination kleinerer Gleichungen. Solche Gleichungen -werden auch Ausdruck genannt und ihre Definition ist -rekursiv, sodass beliebig komplexe und lange Ausdrücke -erstellt werden können. So etwa hier: - -@example -1 - -1 + 2 - -(1 + 2) * 3 - -((1 + 2) * 3) / (4 * 5) -@end example - -Das ist eine Folge von (mathematischen) Ausdrücken, in denen -jeder Ausdruck in dem folgenden (größeren) enthalten ist. Die -einfachsten Ausdrücke sind Zahlen, und größere werden durch die -Kombination von Ausdrücken mit Hilfe von Operatoren (wie @q{+}, -@q{*} und @q{/}) sowie Klammern. Genauso wie mathematische -Ausdrücke können auch musikalische Ausdrücke beliebig tief verschachtelt -werden. Das wird benötigt für komplexe Musik mit vielen Stimmen. - - -@subheading Simultaneous music expressions: multiple staves - -@cindex mehrere Systeme -@cindex Notensysteme, mehrere -@cindex Polyphonie -@cindex Mehrstimmigkeit -@cindex parallele Ausdrücke -@cindex Ausdrücke, parallel -@cindex relative Noten und simulatane Musik -@cindex gleichzeitige Noten und relativer Modus - -@funindex << -@funindex >> -@funindex << ... >> - -Glossar: @rglos{polyphony}. - - -Mit dieser Technik kann @notation{polyphone} Musik gesetzt werden. -Musikalische -Ausdrücke werden einfach parallel kombiniert, damit sie gleichzeitig -als eigene Stimmen in dem gleichen Notensystem gesetzt werden. Um -anzuzeigen, dass an dieser Stelle gleichzeitige Noten gesetzt werden, -muss nur ein Kombinationszeichen eingefügt werden. Parallel werden -musikalische Ausdrücke kombiniert, indem man sie mit @code{<<} und -@code{>>} einrahmt. Im folgenden Beispiel sind drei Ausdrücke -(jeder mit zwei Noten) parallel kombiniert: - -@lilypond[verbatim,quote] -\relative c'' { - << - { a4 g } - { f e } - { d b } - >> -} -@end lilypond - -Es ist noch zu bemerken, dass wir hier für jede Ebene innerhalb der -Quelldatei eine andere Einrückung geschrieben haben. Für LilyPond -spielt es keine Rolle, wie viele Leerzeichen am Anfang einer Zeile sind, -aber für Menschen ist es eine große Hilfe, sofort zu sehen, welche -Teile des Quelltextes zusammen gehören. - -@warning{Jede Note ist relativ zu der vorhergehenden in der -Datei, nicht relativ zu dem zweigestrichenen C (@code{c''}), das im -@code{@bs{}relative}-Befehl angegeben ist. Die Klammern haben darauf -keinen Einfluss.} - - -@subheading Simultaneous music expressions: single staff - -Um die Anzahl der Notensysteme zu bestimmen, analysiert -LilyPond den Anfang des ersten Ausdrucks. Wenn sich hier -eine einzelne Note befindet, wird nur -ein System gesetzt, wenn es sich um eine parallele Anordnung von -Ausdrücken handelt, wird mehr als ein System gesetzt. Das -folgende Beispiel beginnt mit einer Note: - - -@lilypond[verbatim,quote] -\relative c'' { - c2 <> - << { e f } { c <> } >> -} -@end lilypond - - -@node Multiple staves -@subsection Multiple staves - -@cindex mehrere Systeme -@cindex Systeme, mehrere -@cindex Kontext -@cindex Notationskontext - -@funindex \new Staff -@funindex new Staff -@funindex Staff -@funindex \new -@funindex new -@funindex Score -@funindex Voice -@funindex Lyrics -@funindex ChordNames - -Wie wir in @ref{Music expressions explained} gesehen haben, sind -LilyPond-Quelldateien aus musikalischen Ausdrücken konstruiert. -Wenn die Noteneingabe mit parallelen Ausdrücken beginnt, werden -mehrere Notensysteme erstellt. Es ist aber sicherer und einfacherer -zu verstehen, wenn diese Systeme explizit erstellt werden. - -Um mehr als ein System zu schreiben, wird jedem Notenausdruck, der -in einem eigenen System stehen soll, der Befehl @code{\new Staff} -vorne angefügt. Diese @code{Staff} (engl. für Notensystem)-Elemente -werden dann parallel angeordnet mit den @code{<<} und -@code{>>}-Zeichen: - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - -Der Befehl @code{\new} beginnt einen neuen @qq{Notationskontext}. Ein -solcher Notationskontext ist eine Umgebung, in der musikalische -Ereignisse (wie Noten oder @code{\clef} (Schlüssel)-Befehle) -interpretiert werden. Für einfache Stücke werden diese -Umgebungen automatisch erstellt. Für kompliziertere Musik -ist es aber am besten, die Umgebungen explizit zu erstellen. - -Es gibt verschiedene Kontext-Typen. @code{Score} (Partitur), -@code{Staff} (Notensystem) und @code{Voice} (Stimme) -verarbeiten die Eingabe von Noten, während die @code{Lyrics} -(Text)-Umgebung zum Setzen von Liedtexten -und die @code{ChordNames} (Akkordbezeichnungs)-Umgebung -für Akkordsymbole verwendet wird. - -Indem @code{\new} vor einen musikalischen Ausdruck gesetzt wird, -wird ein größerer Ausdruck erstellt. In diesem Sinne erinnert -die Syntax des @code{\new}-Befehls an das Minuszeichen -in der Mathematik. Genauso wie @math{(4+5)} ein Ausdruck ist, der -durch @math{-(4+5)} zu einem größeren Ausdruck erweitert wurde, -werden auch musikalische Ausdrücke durch den @code{\new}-Befehl -erweitert. - -Die Taktangabe, die in einem einzelnen System angegeben wird, wirkt -sich auf alle anderen System aus. Die -Angabe der Tonart in einem System hingegen beeinflusst @emph{nicht} die -Tonart der anderen Systeme. Dieses Verhalten ist darin begründet, -dass Partituren mit transponierenden Instrumenten häufiger sind -als Partituren mit unterschiedlichen Taktarten. - - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble \key d \major \time 3/4 c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - - -@node Staff groups -@subsection Staff groups - -@cindex Akkolade -@cindex System für Klavier -@cindex Notensystem für Klavier -@cindex Notensystem für Chor -@cindex Partitur für Chor -@cindex Systemwechsel, manuell -@cindex Wechsel zwischen Systemen, manuell -@cindex Stimmwechsel zwischen Systemen, manuell -@cindex Chorpartitur -@cindex Klaviersystem -@cindex Partitur - -@funindex PianoStaff -@funindex GrandStaff -@funindex ChoirStaff - -Glossar: @rglos{brace}. - -Musik für das Klavier wird üblicherweise auf zwei Systemen notiert, -die durch eine @notation{geschweifte Klammer} verbunden sind -(Akkolade). Um ein derartiges -Notensystem zu erstellen, geht man ähnlich vor wie in dem Beispiel -aus @ref{Multiple staves}, nur dass der gesamte Ausdruck jetzt in -eine @code{PianoStaff}-Umgebung eingefügt wird. - -@example -\new PianoStaff << - \new Staff @dots{} - \new Staff @dots{} ->> >> -@end example - -Hier ein kleines Beispiel: - -@lilypond[verbatim,quote] -\relative c'' { - \new PianoStaff << - \new Staff { \time 2/4 c4 e g g, } - \new Staff { \clef bass c,, c' e c } - >> -} -@end lilypond - -Andere typische Gruppen von Notensystemen können mit den -Befehlen @code{\new StaffGroup} für Orchestersätze und -@code{\new ChoirStaff} für ein Chorsystem erstellt -werden. Jede dieser Systemgruppen erstellt einen -neuen Kontext, der dafür sorgt, dass die Klammern zu Beginn -des Systems erstellt werden und der zusätzlich auch -darüber entscheidet, ob die Taktlinien nur auf dem System -oder auch zwischen System gesetzt werden. - - -@seealso -Notationsreferenz: -@ruser{Keyboard and other multi-staff -instruments}, -@ruser{Displaying staves}. - - -@node Combining notes into chords -@subsection Combining notes into chords - -@cindex Akkorde -@cindex Notendauer in Akkorden - -@funindex < -@funindex > -@funindex < ... > - -Glossar: @rglos{chord}. - -Wir haben schon weiter oben gesehen, wie Akkorde ersetellt -werden können, indem sie mit spitzen Klammern eingeschlossen -und somit als gleichzeitig erklingend markiert werden. -Die normale Art, Akkorde zu notieren, ist aber, sie in -@emph{einfache} spitze Klammern (@q{<} und @q{>}) -einzuschließen. Beachten Sie, -dass alle Noten eines Akkordes die gleiche Dauer haben müssen, und -diese Dauer wird nach der schließenden Klammer geschrieben. - -@lilypond[verbatim,quote,relative=2] -r4 4 2 -@end lilypond - -Akkorde sind im Grunde gleichwertig mit einfachen Noten: -Fast alle Markierungen, die an einfache Noten angehängt -werden können, kann man auch an Akkorde hängen. -So können Markierungen wie Balken oder Bögen mit -den Akkorden kombiniert werden. Sie müssen jedoch außerhalb der -spitzen Klammern gesetzt werden. - -@lilypond[verbatim,quote,relative=2] -r4 8[ ]~ 2 -r4 8( \> 4 \!) -@end lilypond - - -@node Single staff polyphony -@subsection Single staff polyphony - -@cindex Mehrstimmigkeit -@cindex mehrere Stimmen -@cindex Stimmen, mehrere in einem System -@cindex unsichtbare Noten -@cindex Platzhalternoten -@cindex Noten, unsichtbar - -@funindex << ... \\ ... >> -@funindex << -@funindex \\ -@funindex >> - -Wenn unterschiedliche Melodien oder Stimmen in einem System -kombiniert werden sollen, werden sie als @qq{polyphone Stimmen} -realisiert: Jede Stimme hat eigene Hälse, Balken und Legatobögen, -und die Hälse der oberen Stimme zeigen immer nach oben, während -die Hälse der unteren Stimme nach unten zeigen. - -Diese Art von Notenbild wird erstellt, indem jede Stimme für sich -als Abfolge notiert wird (mit @w{@code{@{...@}}}) und diese dann -parallel kombiniert werden, indem die einzelnen Stimmen durch -@code{\\} voneinander getrennt werden. - -@lilypond[verbatim,quote,relative=2] -<< - { a4 g2 f4~ f4 } \\ - { r4 g4 f2 f4 } ->> -@end lilypond - -Für den Satz von mehrstimmigen Stücken kann es auch angebracht sein, -unsichtbare Pausen zu verwenden. Hiermit können Stimmen ausgefüllt -werden, die gerade nicht aktiv sind. Hier ist das obige Beispiel -mit einer unsichtbaren Pause (@q{s}) anstelle einer normalen (@q{r}): - -@lilypond[verbatim,quote,relative=2] -<< - { a4 g2 f4~ f4 } \\ - { s4 g4 f2 f4 } ->> -@end lilypond - -@noindent -Auch diese Ausdrücke wiederum könne beliebig miteinander -kombiniert werden. - -@lilypond[verbatim,quote,relative=2] -<< - \new Staff << - { a4 g2 f4~ f4 } \\ - { s4 g4 f2 f4 } - >> - \new Staff << - \clef bass - { 1 ~ 4 } \\ - { e,,4 d e2 ~ e4} - >> ->> -@end lilypond - - -@seealso -Notationsreferenz: -@ruser{Simultaneous notes}. - - -@node Songs -@section Songs - -@cindex Gesangstext, schreiben - -@funindex \addlyrics -@funindex addlyrics - -In diesem Kapitel wird in die Kombination von Musik mit -Text eingeführt und die Erstellung einfacher Song-Blätter -gezeigt. - -@menu -* Setting simple songs:: -* Aligning lyrics to a melody:: -* Lyrics to multiple staves:: -@end menu - - -@node Setting simple songs -@subsection Setting simple songs - -@cindex Text -@cindex Lieder -@cindex Liedtext - -@funindex \addlyrics -@funindex addlyrics - -Glossar: @rglos{lyrics}. - -Hier ist der Beginn eines einfachen Kinderliedes, -@notation{Girls and boys come out to play}: - -@lilypond[verbatim,quote] -\relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 -} -@end lilypond - -Zu diesen Noten kann Text hinzugefügt werden, indem beide -mit dem @code{\addlyrics}-Befehl kombiniert werden. Text -wird eingegeben, indem jede Silbe durch ein Leerzeichen getrennt wird. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - } - \addlyrics { - Girls and boys come out to play, - } ->> -@end lilypond - -Sowohl die Noten als auch der Text sind jeweils in geschweifte -Klammern eingefasst, und der gesamte Ausdruck ist zwischen -@w{@code{<< ... >>}} positioniert. Damit wird garantiert, dass -Text und Noten gleichzeitig gesetzt werden. - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@cindex Gesangstext, Ausrichten -@cindex Ausrichten von Gesangstext -@cindex Worte mit mehreren Silben -@cindex mehrere Silben in Gesangstext -@cindex Melisma -@cindex Unterstrich -@cindex Bindestrich -@cindex Fülllinie - -Glossar: @rglos{melisma}, @rglos{extender line}. - -Die nächste Zeile des Kinderliedes lautet: -@notation{The moon doth shine as bright as day}. So sieht es -notiert aus: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c b a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Die zusätzlichen Noten sind nicht korrekt an den Noten -positioniert. Das Wort @notation{shine} sollte eigentlich zu -zwei Noten gesungen werden, nicht nur zu einer. Das wird als -@notation{Melisma} bezeichnet, wenn eine Silbe zu mehreren -Noten gesungen wird. Es gibt mehrere Möglichkeiten, eine -Silbe über mehrere Noten zu erweitern. Die einfachste ist, -einen Legatobogen über die -betroffenen Noten zu notieren, zu Einzelheiten siehe -@ref{Ties and slurs}. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c( b) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Die Wörter orientieren sich jetzt richtig an den Noten, -aber der automatische Balken für die Noten zu -@notation{shine as} sieht nicht richtig aus. -Wir können das korrigieren, indem wir die Balkenlänge -manuell eingrenzen, damit sie der üblichen Notationsweise -für Gesang entspricht. Für Einzelheiten siehe -@ref{Automatic and manual beams}. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c([ b]) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Alternativ kann das Melisma auch im Text notiert werden, indem -für jede Note, die übersprungen werden soll, ein Unterstrich -@code{_} im Text geschrieben wird: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c[ b] a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine _ as bright as day; - } ->> -@end lilypond - -Wenn die letzte Silbe eines Wortes sich über mehrere Noten oder -eine sehr lange Note erstreckt, wird üblicherweise eine Fülllinie -gesetzt, die sich über alle Noten erstreckt, die zu der Silbe -gehören. Diese Fülllinie wird mit zwei Unterstrichen @code{__} -notiert. Hier ein Beispiel der ersten drei Takte aus -@notation{Didos Klage}, -aus Purcells @notation{Dido and Æneas}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \minor - \time 3/2 - g2 a bes bes( a) - b c4.( bes8 a4. g8 fis4.) g8 fis1 - } - \addlyrics { - When I am laid, - am laid __ in earth, - } ->> -@end lilypond - -Keins der bisherigen Beispiele hat bisher Wörter benutzt, die länger -als eine Silbe waren. Solche Wörter werden üblicherweise auf die -Noten aufgeteilt, eine Silbe pro Note, mit Bindestrichen zwischen -den Silben. Diese Silben werden durch zwei Minuszeichen notiert und -von LilyPond als ein zentrierter Bindestrich zwischen den Silben -gesetzt. Hier ein Beispiel, das dies und alle anderen Tricks -zeigt, mit denen Text an den Noten ausgerichtet werden kann: - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \key g \major - \time 3/4 - \partial 4 - d4 g4 g a8( b) g4 g4 - b8( c) d4 d e4 c2 - } - \addlyrics { - A -- way in a __ man -- ger, - no __ crib for a bed, __ - } ->> -@end lilypond - -Einige Texte, besonders in italienischer Sprache, brauchen das -Gegenteil: mehr als eine Silbe muss zu einer einzelnen Note -gesetzt werden. Das ist möglich, indem die Silben durch einen -einzelnen Unterstrich @code{_} zusammengekoppelt werden. Dazwischen -dürfen sich keine Leerzeichen befinden, oder indem man die -relevanten Silben in Anführungszeichen @code{"} setzt. -Hier ein Beispiel aus dem @notation{Figaro} von Rossini, wo die Silbe -@notation{al} auf der selben Note wie @notation{go} des Wortes @notation{Largo} -in Figaros Arie @notation{Largo al factotum} gesungen werden mus. - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \clef bass - \key c \major - \time 6/8 - c4.~ c8 d b c([ d]) b c d b c - } - \addlyrics { - Lar -- go_al fac -- to -- tum del -- la cit -- tà - } ->> -@end lilypond - - -@seealso -Notationsreferenz: @ruser{Vocal music}. - - -@node Lyrics to multiple staves -@subsection Lyrics to multiple staves - -@cindex Gesangstext auf mehreren Systemen -@cindex Mehrere Systeme und Gesangstext - -Die einfache Lösung mit @code{\addlyrics} kann benutzt werden, um -Text zu einem oder mehreren Systemen zu setzen. Hier ein Beispiel -aus Händels @notation{Judas Maccabäus}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key f \major - \time 6/8 - \partial 8 - c8 c([ bes]) a a([ g]) f f'4. b, c4.~ c4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, __ - } - \relative c' { - \key f \major - \time 6/8 - \partial 8 - r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, - } ->> -@end lilypond - -Aber Partituren, die komplizierter als dieses Beispiel sind, -werden besser notiert, indem man die Systemstruktur von den -Noten und dem Gesangstext durch Variablen trennt. Die Benutzung -von Variablen wird erklärt im Abschnitt @ref{Organizing pieces with variables}. - - -@seealso -Notationsreferenz: @ruser{Vocal music}. - - -@node Final touches -@section Final touches - -Das ist das letzte Kapitel der Übung. Hier soll demonstriert werden, -wie man den letzten Schliff an einfachen Stücken anbringen kann. -Gleichzeitig dient es als Einleitung zum Rest des Handbuches. - -@menu -* Organizing pieces with variables:: -* Version number:: -* Adding titles:: -* Absolute note names:: -* After the tutorial:: -@end menu - - -@node Organizing pieces with variables -@subsection Organizing pieces with variables - -@cindex Variable -@cindex Bezeichner -@cindex Makro -@cindex Variablen zuweisen -@cindex Variablen benutzen -@cindex Zuweisen von Variablen -@cindex Variable, erlaubte Zeichen -@cindex Zeichen, in Variablen erlaubt - -Wenn alle die Elemente, die angesprochen wurden, zu größeren Dateien -zusammengefügt werden, werden auch die musikalischen Ausdrücke sehr -viel größer. In polyphonen Dateien mit vielen Systemen kann das -sehr chaotisch aussehen. Das Chaos kann aber deutlich reduziert werden, -wenn @code{Variablen} definiert und verwendet werden. - -Variablen (die auch als Bezeichner oder Makros bezeichnet werden) -können einen Teil der Musik aufnehmen. Sie werden wie folgt definiert: - -@example -bezeichneteMusik = @{ @dots{} @} -@end example - -Der Inhalt des musikalischen Ausdrucks @code{bezeichneteMusik} kann -dann später wieder benutzt werden, indem man einen Backslash davor setzt -(@code{\bezeichneteMusik}), genau wie bei jedem LilyPond-Befehl. - -@c KEEP LY -@lilypond[quote,verbatim] -Geige = \new Staff - { \relative c'' { - a4 b c b - } -} -Cello = \new Staff - { \relative c { - \clef bass - e2 d - } -} -{ - << - \Geige - \Cello - >> -} -@end lilypond - -@noindent -In den Namen der Variablen dürfen nur Buchstaben des -Alphabets verwendet werden, keine Zahlen oder Striche. - -Variable müssen @emph{vor} dem eigentlichen musikalischen -Ausdruck definiert werden. Sie können dann aber beliebig oft -verwendet werden, nachdem sie einmal definiert worden sind. Sie -können sogar eingesetzt werden, um später in der Datei eine neue -Variable zu erstellen. Damit kann die Schreibarbeit erleichtert -werden, wenn Notengruppen sich oft wiederholen. - -@c KEEP LY -@lilypond[verbatim,quote] -trioleA = \times 2/3 { c,8 e g } -TaktA = { \trioleA \trioleA \trioleA \trioleA } - -\relative c'' { - \TaktA \TaktA -} -@end lilypond - -Man kann diese Variablen auch für viele andere Objekte -verwenden, etwa: - -@example -Breite = 4.5\cm -Name = "Tim" -aFünfPapier = \paper @{ paperheight = 21.0 \cm @} -@end example - -Abhängig vom Kontext kann solch ein Bezeichner in verschiedenen -Stellen verwendet werden. Das folgende Beispiel zeigt die -Benutzung der eben definierten Bezeichner: - -@example -\paper @{ - \aFünfPapier - line-width = \width -@} -@{ - c4^\Name -@} -@end example - - -@node Version number -@subsection Version number - -@cindex Update -@cindex Neue Version -@cindex Dateien aktualisieren -@cindex Aktualisieren von Dateien -@cindex Versionsnummern - -@funindex \version -@funindex version -@funindex convert-ly - -Der @code{\version}-Befehl zeigt an, welche LilyPond-Version -für eine bestimmte Quelldatei benutzt worden ist: - -@example -\version @w{"@version{}"} -@end example - -@noindent -Üblicherweise wird dieser Befehl am Anfang der Textdatei eingefügt. - -Durch diese Versionsmarkierung werden zukünftige Aktualisierungen -des LilyPond-Programmes einfacher gemacht. Syntax-Änderungen -zwischen den Programmversionen werden von einem speziellen -Programm, @command{convert-ly}, vorgenommen. Dieses Programm braucht -@code{\version}, um zu entscheiden, welche Regeln angewandt werden -müssen. Für Einzelheiten, siehe @rprogram{Updating files with convert-ly}. - -@node Adding titles -@subsection Adding titles - -@cindex Titel -@cindex header -@cindex Kopf -@cindex Titelei - -@funindex \header -@funindex header - -Titel, Komponist, Opusnummern und ähnliche Information werden in -einer @code{\header}-Umgebung eingefügt. Diese Umgebung befindet sich -außerhalb der musikalischen Ausdrücke, meistens wird die -@code{\header}-Umgebung direkt nach der @ref{Version number} eingefügt. - -@example -\version @w{"@version{}"} -\header @{ - title = "Symphony" - composer = "Ich" - opus = "Op. 9" -@} - -@{ - @dots{} Noten @dots{} -@} -@end example - -Wenn die Datei übersetzt wird, werden Titel- und Komponisteneinträge -über der Musik ausgegeben. Mehr Information über die Titelei findet -sich im Kapitel @ruser{Creating titles}. - - -@node Absolute note names -@subsection Absolute note names - -@cindex Notenbezeichnungen -@cindex absoluter Modus -@cindex absolute Werte für Tonhöhen -@cindex Tonhöhen, absolute Werte - -Bis jetzt haben wir immer @code{\relative} benutzt, um Tonhöhen zu -bestimmen. Das ist die einfachste Eingabeweise für die meiste Musik. -Es gibt aber noch eine andere Möglichkeit, Tonhöhen darzustellen: durch -absolute Bezeichnung. - -Wenn man das @code{\relative} weglässt, werden alle Tonhöhen von LilyPond -als absolute Werte interpretiert. Ein @code{c'} ist dann also immer das -eingestrichene C, ein @code{b} ist immer das kleine h unter dem -eingestrichenen C, und ein @code{g,} ist immer das große G -- also die -Note auf der letzten Linie im Bass-Schlüssel. - -@lilypond[verbatim,quote] -{ - \clef bass - c' b g, g, - g, f, f c' -} -@end lilypond - -Hier eine Tonleiter über vier Oktaven: - -@lilypond[verbatim,quote] -{ - \clef bass - c, d, e, f, - g, a, b, c - d e f g - a b c' d' - \clef treble - e' f' g' a' - b' c'' d'' e'' - f'' g'' a'' b'' - c'''1 -} -@end lilypond - -Wie leicht zu sehen ist, muss man sehr viele Apostrophe schreiben, -wenn die Melodie im Sopranschlüssel notiert ist. Siehe etwa dieses -Fragment von Mozart: - -@lilypond[verbatim,quote] -{ - \key a \major - \time 6/8 - cis''8. d''16 cis''8 e''4 e''8 - b'8. cis''16 b'8 d''4 d''8 -} -@end lilypond - -Alle diese Apostrophe machen den Quelltext schlecht lesbar und sind -eine mögliche Fehlerquelle. Mit dem @code{\relative}-Befehl ist das Beispiel -sehr viel einfacher zu lesen: - -@lilypond[verbatim,quote] -\relative c'' { - \key a \major - \time 6/8 - cis8. d16 cis8 e4 e8 - b8. cis16 b8 d4 d8 -} -@end lilypond - -Wenn man einen Fehler durch ein Oktavierungszeichen (@code{'} -oder @code{,}) im @code{\relative}-Modus macht, ist er sehr -schnell zu finden, denn viele Noten sind nacheinander in der -falschen Oktave. Im absoluten Modus dagegen ist ein einzelner Fehler -nicht so deutlich und deshalb auch nicht so einfach zu finden. - -Trotz allem ist der absolute Modus gut für Musik mit sehr großen -Sprüngen und vor allem für computergenerierte LilyPond-Dateien. - - -@node After the tutorial -@subsection After the tutorial - -Wenn Sie diese Übung absolviert haben, sollten Sie am -besten ein paar Stücke selber notieren. Beginnen Sie mit -den @ref{Templates} und fügen Sie einfach Ihre Noten -dazu. Wenn Sie irgendetwas brauchen, das nicht in der -Übung besprochen wurde, schauen Sie sich den Abschnitt Alles - über die Notation an, angefangen mit @ruser{Musical notation}. -Wenn Sie für ein Instrument oder Ensemble Noten schreiben -wollen, für das es keine Vorlage gibt, schauen Sie -sich @ref{Extending the templates} an. - -Wenn Sie ein paar kurze Stücke notiert haben, lesen Sie -den Rest des Handbuchs zum Lernen (Kapitel 3--5). Natürlich können -Sie auch sofort weiterlesen. Die nächsten Kapitel sind -aber mit der Annahme geschrieben, dass Sie die Eingabesprache -von LilyPond beherrschen. Sie können die weiteren Kapitel auch -überfliegen und dann darauf wieder zurückkommen, wenn -Sie einige Erfahrungen im Notieren gewonnen haben. - -In dieser Übung, genauso wie im gesamten Handbuch zum Lernen, -befindet sich ein Abschnitt @strong{Siehe auch} am Ende jedes -Abschnittes, wo sich Verweise auf andere Abschnitte befinden. -Diesen Verweisen sollten Sie nicht beim ersten Durchlesen -folgen; erst wenn Sie das gesamte Handbuch zum Lernen gelesen -haben, können Sie bei Bedarf diesen Verweisen folgen, um ein -Thema zu vertiefen. - -Bitte lesen Sie jetzt @ref{About the documentation}, wenn Sie -es bisher noch nicht getan haben. Es gibt ungeheuer viel -Information über LilyPond, so dass Neulinge sich nicht sofort -zurecht finden. Wenn Sie auch nur ein paar Minuten in diesem -Abschnitt lesen, können Sie sich Stunden frustrierendes Suchen -an der falschen Stelle ersparen! - diff --git a/Documentation/de/user/tweaks.itely b/Documentation/de/user/tweaks.itely deleted file mode 100644 index ace2c67eca..0000000000 --- a/Documentation/de/user/tweaks.itely +++ /dev/null @@ -1,4065 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Tweaking output -@chapter Tweaking output - -In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern -kann. In LilyPond kann man sehr viel konfigurieren, fast jedes -Notenfragment kann geändert werden. - - -@menu -* Tweaking basics:: -* The Internals Reference manual:: -* Appearance of objects:: -* Placement of objects:: -* Collisions of objects:: -* Further tweaking:: -@end menu - - -@node Tweaking basics -@section Tweaking basics - -@menu -* Introduction to tweaks:: -* Objects and interfaces:: -* Naming conventions of objects and properties:: -* Tweaking methods:: -@end menu - -@node Introduction to tweaks -@subsection Introduction to tweaks - -@qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die -verschiedenen Methoden, die Aktionen zu beeinflussen, die während -der Kompilation einer Notationsdatei vorgenommen werden sowie auf -das Notenbild einzuwirken. Einige dieser Opitmierungen sind sehr -einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das -System an Optimierungen so gut wie alle möglichen Erscheindungsformen -für die Notenausgabe. - -In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt, -um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen -Befehlen bereitgestellt werden, die einfach in die Quelldatei -kopiert werden können um den selben Effekt wie im Beispiel -zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle -konstruiert werden, so dass Sie in der Lage sein werden, eigene -Befehle auf dieser Grundlage zu entwickeln. - -Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den -Abschnitt @ref{Contexts and engravers} interessieren, dann -Kontexte und Engraver sowie die Eigenschaften, die mit ihnen -verknüpft sind, sind die Voraussetzung, um die Funktionsweise -von Optimierungen verstehen zu können. - - -@node Objects and interfaces -@subsection Objects and interfaces - -@cindex Objekte -@cindex Grobs -@cindex Spanners -@cindex Interfaces -@cindex Strecker -@cindex Schnittstellen -@cindex graphische Objekte (Grob) -@cindex Objekteigenschaften -@cindex Layout-Objekt -@cindex Objekt, Layout- -@cindex Eigenschaften von Objekten - -Optimierung bedeutet, die internen Operationen und Strukturen -des LilyPond-Programmes zu verändern, darum sollen hier -zunächst die wichtigesten Begriffe erklärt werden, die zur -Beschreibung dieser Operationen und Strukturen benutzt werden. - -Der Begriff @qq{Objekt} ist ein allgemeiner Begriff, mit dem -die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond -während der Bearbeitung des Quelltextes erstellt. Wenn etwa -ein Befehl wie @code{\new Staff} auftritt, wird ein neues Objekt -vom Typ @code{Staff} erstellt. Dieses Objekt @code{Staff} enthält -dann alle Eigenschaften, die mit diesem speziellen Notensystem -verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und -spezifische Angaben über die Engraver, die innerhalb dieses Systems -eingesetzt werden. Für alle anderen Kontexte gibt es genauso -Objekte, die deren Eigenschaften beinhalten, beispielsweise für -@code{Voice}-Objekte, @code{Score}-Objekte, @code{Lyrics}-Objekte, -aber auch für Objekte, die Notationselemente wie die Taktlinien, -Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes -Objekt hat eine eigene Gruppe an Eigenschaftswerten. - -Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die -Notationselemente der gesetzten Ausgabe repräsentieren, also -Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden -@qq{Layout-Objekte}, oft auch @qq{Graphische Objekte} genannt. -Daraus resultiert die künstliche Abkürzung @qq{Grob}. -Diese sind auch Objekte im allgemeinen Sinn und haben genauso -Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position, -Farbe usw. - -Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen, -Crescendo-Klammern, Oktavierungszeichen und viele andere -Grobs sind nicht an einer Stelle plaziert -- sie haben vielmehr -einen Anfangspunkt, einen Endpunkt und eventuell noch andere -Eigenschaften, die ihre Form bestimmen. Objekte mit solch -einer erweiterten Gestalt werden als @qq{Strecker} (engl. Spanners) -bezeichnet. - -Es bleibt uns noch übrig zu erklären, was @qq{Schnittstellen} -(engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich -sind, haben sie doch oft gemeinsame Eigenschaften, die auf -die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise -haben eine Farbe, eine Größe, eine Position usw. und alle -diese Eigenschaften werden von LilyPond auf die gleiche Weise -verarbeitet, während der Quelltext in Notensatz umgesetzt wird. -Um die internen Operationen zu vereinfachen, sind alle diese -gemeinsamen Prozesse und Eigenschaften in einem Objekt -mit der Bezeichnung @code{grob-interface} (Schnittstelle eines -graphischen Objektes) zusammengefasst. Es gibt viele andere -Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung -besitzen, welche auf @code{-interface} endet. Insgesamt -gibt es über 100 dieser Schnittstellen. Wir werden später sehen, -was es damit auf sich hat. - -Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung -kommen sollen. - - -@node Naming conventions of objects and properties -@subsection Naming conventions of objects and properties - -@cindex Benennungskonventionen für Objekte -@cindex Benennungskonventionen für Eigenschaften -@cindex Objekte, Benennungskonventionen -@cindex Eigenschaften, Benennungskonventionen -@cindex Regeln zur Benennung von Objekten/Eigenschaften - -Es wurden schon früher einige Regeln zur Benennung von -Objekten vorgestellt, siehe -@ref{Contexts and engravers}. Hier eine Referenzliste der -häufigsten Objekt- und Eigenschaftsbezeichnungen mit -den Regeln für ihre Bezeichnung und -illustrierenden echten Bezeichnungen. Es wurde @qq{A} -für einen beliebigen Großbuchstaben und @qq{aaa} für eine -beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere -Zeichen werden explizit angegeben. - -@multitable @columnfractions .33 .33 .33 -@headitem Objekt-/Eigenschaftstyp - @tab Naming convention - @tab Beispiele -@item Kontexte - @tab Aaaa oder AaaaAaaaAaaa - @tab Staff, GrandStaff -@item Layout-Objekte - @tab Aaaa oder AaaaAaaaAaaa - @tab Slur, NoteHead -@item Engraver - @tab Aaaa_aaa_engraver - @tab Clef_engraver, Note_heads_engraver -@item Schnittstellen - @tab aaa-aaa-interface - @tab grob-interface, break-aligned-interface -@item Kontext-Eigenschaften - @tab aaa oder aaaAaaaAaaa - @tab alignAboveContext, skipBars -@item Layout-Objekt-Eigenschaften - @tab aaa oder aaa-aaa-aaa - @tab direction, beam-thickness -@end multitable - -Es wird bald ersichtlich werden, dass die Eigenschaften von -unterschiedlichen Objekttypen mit unterschiedlichen Befehlen -geändert werden. Deshalb ist es nützlich, aus der -Schreibweise zu erkennen, um was -für ein Objekt es sich handelt, um den entsprechenden -Befehl einsetzen zu können. - - -@node Tweaking methods -@subsection Tweaking methods - -@cindex override-Befehl -@funindex \override -@funindex override - -@strong{Der \override-Befehl} - -Wir haben uns schon mit den Befehlen @code{\set} -und @code{\with} bekannt gemacht, mit welchen -Eigenschaften von @strong{Kontexten} verändert -und @strong{Engraver} entfernt oder hinzugefügt -werden können. Siehe dazu -@ref{Modifying context properties} und @ref{Adding -and removing engravers}. Jetzt wollen wir uns weitere -wichtige Befehle anschauen. - -Der Befehl, um die Eigenschaften von @strong{Layout-Objekten} -zu ändern, ist @code{\override}. Weil dieser Befehl interne -Eigenschaften tief in der Programmstruktur von LilyPond -verändern muss, ist seine Syntax nicht so einfach wie die der -bisherigen Befehle. Man muss genau wissen, welche Eigenschaft -welches Objektes in welchem Kontext geändert werder soll, -und welches der neu zu setzende Wert dann ist. Schauen wir -uns an, wie das vor sich geht. - -Die allgemeine Syntax dieses Befehles ist: - -@example -\override @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} = -#@var{Wert} -@end example - -@noindent -Damit wir die Eigenschaft mit der Bezeichnung @var{layout-property} -das Layout-Objektes mit der Bezeichnung@var{LayoutObject}, -welches ein Mitglied des @var{Kontext}-Kontextes ist, auf den -Wert @var{value}. - -Der @var{Kontext} kann (und wird auch normalerweise) ausgelassen -werden, wenn der benötigte Kontext eindeutig impliziert ist und einer -der untersten Kontexte ist, also etwa @code{Voice}, @code{ChordNames} -oder @code{Lyrics}. Auch in diesem Text wird der Kontext oft ausgelassen -werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich -definiert werden muss. - -Spätere Abschnitte behandeln umfassend Eigenschaften und ihre -Werte, aber um ihre Funktion und ihr Format zu demonstrieren, -werden wir hier nur einige einfache Eigenschaften und Werte einsetzen, -die einfach zu verstehen sind. - -Für den Moment könne Sie die @code{#'}-Zeichen ignorieren, die vor jeder -Layout-Eigenschaft, und die @code{#}-Zeichen, die vor jedem Wert -stehen. Sie müssen immer in genau dieser Form geschrieben werden. -Das ist der am häufigsten gebrauchte Befehl für die Optimierung, -und der größte Teil dieses Abschnittes wird dazu benutzt, seine Benutzung -zu erläutern. Hier ein einfaches Beispiel, um die Farbe des Notenkopfes -zu ändern: - -@cindex color-Eigenschaft, Beispiel -@cindex Farb-Eigenschaft, Beispiel -@cindex NoteHead, Beispiel für override -@cindex Notenkopf, Beispiel für Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a b c -@end lilypond - - -@strong{Der \revert-Befehl} - -@cindex revert-Befehl -@funindex \revert -@funindex revert - -Wenn eine Eigenschaft einmal überschrieben wurde, wird ihr -neuer Wert so lange bewahrt, bis er noch einmal überschrieben -wird oder ein @code{\revert}-Befehl vorkommt. Der -@code{\revert}-Befehl hat die folgende Syntax und setzt den -Wert der Eigenschaft zurück auf den Standardwert, nicht -jedoch auf den vorigen Wert, wenn mehrere -@code{\override}-Befehle benutzt wurden. - -@example -\revert @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} -@end example - -Wiederum, genauso wie der @var{Kontext} bei dem @code{\override}-Befehl, -wird @var{Kontext} oft nicht benötigt. Er wird in vielen der folgenden -Beispiele ausgelassen. Im nächsten Beispiel wird die Farbe des Notenkopfes -wieder auf den Standardwert für die letzten zwei Noten gesetzt. - -@cindex color-Eigenschaft, Beispiel -@cindex Farb-Eigenschaft, Beispiel -@cindex NoteHead, Beispiel für override -@cindex Notenkopf, Beispiel für Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a -\revert NoteHead #'color -b c -@end lilypond - -@strong{\once-Präfix} - -@funindex \once -@funindex once - -Sowohl der @code{\override}-Befehl als auch der @code{\set}-Befehl können mit -dem Präfix @code{\once} (@emph{einmal}) versehen werden. Dadurch wird -der folgende @code{\override}- oder @code{\set}-Befehl nur für den aktuellen -Musik-Moment wirksam, bevor sich wieder der Standard einstellt. Am gleichen -Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes -geändert werden: - -@cindex color-Eigenschaft, Beispiel -@cindex Farb-Eigenschaft, Beispiel -@cindex NoteHead, Beispiel für override -@cindex Notenkopf, Beispiel für Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\once \override NoteHead #'color = #red -e f g -\once \override NoteHead #'color = #green -a b c -@end lilypond - - -@strong{Der \overrideProperty-Befehl} - -@cindex overrideProperty-Befehl - -@funindex \overrideProperty -@funindex overrideProperty - -Es gibt eine andere Form des @code{override}-Befehls, -@code{\overrideProperty} (überschreibe Eigenschaft), -welcher ab und zu benötigt wird. Es wird hier nur der -Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert -in @ruser{Difficult tweaks}. -@c Maybe explain in a later iteration -td - - -@strong{Der \tweak-Befehl} - -@cindex tweak-Befehl -@funindex \tweak -@funindex tweak - -Der letzte Optimierungsbefehl in LilyPond ist @code{\tweak} -(engl. optimieren). Er wird eingesetzt um Eigenschaften -von Objekten zu verändern, die zum selben Musik-Moment -auftreten, wie etwa die Noten eines Akkordes. Ein -@code{\override} würde alle Noten des Akkords beeinflussen, -während mit @code{\tweak} nur das nächste Objekt der -Eingabe geändert wird. - -Hier ein Beispiel. Angenommen, die Größe des mittleren -Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert -werden. Schauen wir zuerst, was wir mit -@code{\once \override} erhalten: - -@cindex Schriftgröße, Beispiel -@cindex NoteHead, Beispiel für override -@cindex Notenkopf, Beispiel für Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - \once \override NoteHead #'font-size = #-3 - - -@end lilypond - -Wie man sehen kann, beeinflusst @code{override} @emph{alle} -Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten -eines Akkordes zum selben Musik-Moment auftreten und -die Funktion von @code{\once} ist es, die Optimierung auf -an allen Objekten auszuführen, die zum selben Musik-Moment -auftreten wie der @code{\override}-Befehl. - -Der @code{\tweak}-Befehl funktioniert anders. Er bezieht sich -auf das direkt folgende Element in der Eingabe-Datei. Es wirkt -aber auch nur mit Objekten, die direkt von der Eingabe kreirt -werden, insbesondere Notenköpfe und Artikulationszeichen. -Objekte wie etwa Hälse oder Versetzungszeichen werden erst -später erstellt und lassen sich nicht auf diese Weise ändern. -Zusätzlich @emph{müssen} sich etwa Notenköpfe innerhalb -eines Akkordes befinden, d. h. sie müssen von einfachen spitzen -Klammern umschlossen sein. Um also eine einzelne Note -mit @code{\tweak} zu verändern, muss der Befehl innerhalb -der spitzen Klammern zusammen mit der Note eingegeben werden. - -Um also zu unserem Beispiel zurückzukommen, könnte man die -mittlere Note eines Akkordes auf diese Weise ändern: - -@cindex font-size-Eigenschaft, Beispiel -@cindex Schriftgröße, Beispiel -@cindex @code{\tweak}-Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - 4 -@end lilypond - -Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich -von der des @code{\override}-Befehls unterscheidet. Weder -Kontext noch Layout-Objekt konnen angegeben werden, denn -das würde zu einem Fehler führen. Beide Angaben sind -durch das folgende Element impliziert. Hier sollte auch -kein Gleichheitzeichen vorhanden sein. Die verallgemeinerte -Syntax des @code{\tweak}-Befehls ist also einfach - -@example -\tweak #'@var{layout-eigenschaft} #@var{Wert} -@end example - -Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur -eine von mehreren Artikulationen zu ändern, wie im nächsten -Beispiel zu sehen ist. - -@cindex Farb-Eigenschaft, Beispiel -@cindex @code{\tweak}-Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a ^Black - -\tweak #'color #red ^Red - -\tweak #'color #green _Green -@end lilypond - -@noindent -Beachten Sie, dass dem @code{\tweak}-Befehl ein Artikulationsmodifikartor -vorangestellt werden muss, ganz als ob er selbst ein Artikulationszeichen -wäre. - -@cindex Triolen, geschachtelt -@cindex N-tolen, geschachtelt -@cindex Klammer, Triole -@cindex Triolenklammer -@cindex N-tolenklammer -@cindex Komplizierte Rhythmen, Schachtelung von -@funindex TupletBracket - -Der @code{\tweak}-Befehl muss auch benutzt werden, wenn das -Aussehen einer vor mehreren geschachtelten Triolenklammern -geändert werden soll, die zum selben Zeitpunkt beginnen. -Im folgenden Beispiel beginnen die lange Klammer und die -erste Triolenklammer zum selben Zeitpunkt, sodass ein -@code{\override}-Befehl sich auf beide beziehen würde. -In dem Beispiel wird @code{\tweak} benutzt, um zwischen -ihnen zu unterscheiden. Der erste @code{\tweak}Befehl -gibt an, dass die lange Klammer über den Noten gesetzt -werden soll, und der zweite, dass die Zahl der rhythmischen -Aufteilung für die erste der kurzen Klammern in rot -gesetzt wird. - -@cindex Farb-Eigenschaft, Beispiel -@cindex @code{\tweak}-Beispiel -@cindex Richtungs-Eigenschaft, Beispiel -@cindex color-Eigenschaft, Beispiel -@cindex direction-Eigenschaft, Beispiel - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -\tweak #'direction #up -\times 4/3 { - \tweak #'color #red - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } -} -@end lilypond - -Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt -beginnen, kann ihr Aussehen auf die übliche Art mit dem -@code{\override}-Befehl geändert werden: - -@cindex text-Eigenschaft, Beispiel -@cindex tuplet-number-Funktion, Beispiel -@cindex transparent-Eigenschaft, Beispiel -@cindex TupletNumber, Beispiel zur Veränderung -@cindex Triolennummer, Beispiel zur Veränderung -@cindex Triolen-Nummer-Funktion, Beispiel - -@c NOTE Tuplet brackets collide if notes are high on staff -@c See issue 509 -@lilypond[quote,ragged-right,verbatim,fragment,relative=1] -\times 2/3 { c8[ c c]} -\once \override TupletNumber - #'text = #tuplet-number::calc-fraction-text -\times 2/3 { - c[ c] - c[ c] - \once \override TupletNumber #'transparent = ##t - \times 2/3 { c8[ c c] } -\times 2/3 { c8[ c c]} -} -@end lilypond - - -@seealso -Notationsreferenz: -@ruser{The tweak command}. - - -@node The Internals Reference manual -@section The Internals Reference manual - -@menu -* Properties of layout objects:: -* Properties found in interfaces:: -* Types of properties:: -@end menu - -@node Properties of layout objects -@subsection Properties of layout objects - -@cindex Eigenschaften von Layout-Objekten -@cindex Eigenschaften von Grobs -@cindex Grobs, Eigenschaften von -@cindex Layout-Objekte, Eigenschaften von -@cindex Property (Layout-Objekte, Grobs) -@cindex Regerenz der Interna - -Angenommen, in Ihrer Partitur tritt ein Legatobogen -auf, der Ihrer Meinung nach zu dünn ausgefallen ist. -Sie würden ihn gerne etwas schwerer gezeichnet -sehen. Wie gehen Sie vor? Von den Anmerkungen in -früheren Abschnitten wissen Sie schon, dass LilyPond -sehr flexibel ist und eine derartige Modifikation -möglich sein sollte, und Sie erraten vielleicht, -dass ein @code{\override}-Befehl angebracht ist. -Aber gibt es eine Eigenschaft für die Dicke eines -Legatobogens (engl. slur), und wenn es sie gibt, -auf welche Weise lässt sie sich verändern? Hier -kommt die Referenz der Interna zur Geltung. Dort -finden sich alle Informationen, um den beschriebenen -und alle anderen @code{\override}-Befehle zu -konstruieren. - -Bevor Sie jetzt in die Referenz der Interna wechseln, ist -eine Warnung angebracht. Es handelt sich um ein -@strong{Referenz}dokument, was heißt, dass es sehr -wenig oder gar keine Erklärungen enthält: seine Aufgabe -ist es, Information klar und genau darzustellen. Das -bedeutet, dass es auf den ersten Blick entmutigend -wirkt. Die Einführung und Erklärung in diesem Abschnitt -wird Ihnen aber schnell ermöglichen, genau die Information -aus der Referenz zu entnehmen, die Sie benötigen. -@c For German users -Beachten Sie, dass die Referenz der Interna nur auf Englisch -existiert. Um die Eigenschaftsbezeichnung eines bestimmten -Objektes zu finden, können Sie das Glossar (siehe -@rglosnamed{Top,Musikglossar}) - verwenden, in dem -die englischen Begriffe in viele andere Sprachen übersetzt sind. - -@cindex Override-Beispiel -@cindex Referenz der Interna, Benutzung -@cindex IR (Referenz der Interna), Benutzung -@cindex @code{\addlyrics}-Beispiel - -Das Vorgehen soll an einem konkreten Beispiel einer echten -Komposition demonstriert werden. Hier das Beispiel: - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -Angenommen also, wir wollen die Legatobögen etwas -dicker setzten. Ist das möglich? Die Legatobögen sind mit -Sicherheit ein Layout-Objekt, die Frage muss also lauten: -@qq{Gibt es eine Eigenschaft von Legatobögen, die die -Dicke bestimmt?} Um diese Frage zu beantworten, müssen -wir in der Referenz der Interna ( kurz IR) nachschauen. - -Die IR für die LilyPond-Version, die Sie benutzen, findet sich -auf der LilyPond-Webseite unter der Adresse -@uref{http://lilypond.org}. Gehen Sie zur Dokumentationsseite -und klicken Sie auf den Link zur Referenz der Interna. -@c Addition for German users -Die Sprache ändert sich ab hier nach englisch. Für diese Übung -sollten Sie die HTML-Version benutzen, nicht die -@qq{auf einer großen Seite} oder die PDF-Version. -Damit Sie die nächsten Absätze verstehen können, müssen Sie -genauso vorgehen, während Sie weiterlesen. - -Unter der Überschrift @strong{Top} befinden sich fünf Links. -Wählen Sie den Link zum @emph{Backend}, wo sich die Information -über Layout-Objekte befindet. Hier, unter der Überschrift -@strong{Backend}, wählen Sie den Link @emph{All layout objects}. -Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte, -die in Ihrerer LilyPond-Version benutzt werden, in alphabetischer -Ordnung. Wählen Sie den Link @emph{Slur} und die Eigenschaften -der Legatobögen (engl. slur) werden aufgelistet. - -Eine alternative Methode, auf diese Seite zu gelangen, ist von -der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen -findet sich ein Link zur Referenz der Interna. Dieser Link führt -Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben, -wie die Bezeichnung des Layout-Objektes lauten könnte, das sie -ändern wollen, ist es oft schneller, direkt zur IR zu gehen und -dort nachzuschlagen. - -Aus der Slur-Seite in der IR könne wir entnehmen, dass -Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt -werden. Dann werden die Standardeinstellungen aufgelistet. -Beachten Sie, dass diese @strong{nicht} in alphabetischer Reihenfolge -geordnet sind. Schauen Sie sich die Liste an, ob sie eine Eigenschaft -enthält, mit der die Dicke von Legatobögen kontrolliert werden kann. -Sie sollten folgendes finden: - -@example -@code{thickness} (number) - @code{1.2} - Line thickness, generally measured in @code{line-thickness} -@end example - -Das sieht ganz danach aus, als ob damit die Dicke geändert -werden kann. Es bedeutet, dass der Wert von -@code{thickness} einfach eine Zahl (@emph{number}) ist, -dass der Standardwert 1.2 ist, und dass die Einheit -für die Dicke eine andere Eigenschaft mit der -Bezeichnung @code{line-thickness} ist. - -Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen -in der IR, aber wir haben schon genug Informationen, um -zu versuchen, die Dicke eines Legatobogens zu ändern. Die -Bezeichnung des Layout-Objekts ist offensichtlich -@code{Slur} und die Bezeichnung der Eigenschaft, die geändert -werden soll -@code{thickness}. Der neue Wert sollte etwas mehr als 1.2 sein, -denn der Bogen soll ja dicker werden. - -Den benötigten @code{\override}-Befehl können wir jetzt einfach -konstruieren, indem wir die Werte für die Bezeichnungen in den -Modellbefehl einfügen und den Kontext auslassen. Setzen wir -einmal einen sehr großen Wert für die Dicke um zu sehen, ob der -Befehl auch funktioniert. Also: - -@example -\override Slur #'thickness = #5.0 -@end example - -Vergessen Sie nicht das Rautenzeichen und Apostroph -(@code{#'}) vor der Eigenschaftsbezeichnung und das -Rautenzeichen vor dem neuen Wert! - -Die nächste Frage ist nun: @qq{Wohin soll dieser Befehl geschrieben -werden?} Solange wir uns noch im Lernstadium befinden, ist -die beste Antwort: @qq{Innerhalb der Noten, vor den ersten -Legatobogen und nahe bei ihm.} Also etwa so: - -@cindex Legatobogen, Beispiel für Veränderung -@cindex thickness-Eigenschaft, Beispiel -@cindex Dicke-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -und wirklich wird der Legatobogen dicker. - -Das ist also die grundlegende Herangehensweise, -@code{\override}-Befehl zu formulieren. Es gibt einige -zusätzliche Komplikationen, denen wir uns später widmen -werden, aber Sie haben jetzt das Handwerkszeug, um Ihre -eigenen Befehle zu konstruieren -- wenn Sie auch noch etwas -Übung benötigen. Die sollen Sie durch die folgenden Übungen -erhalten. - - -@subheading Finding the context - -@cindex Kontext, Finden und identifizieren - -Manchmal muss dennoch der Kontext spezifiziert werden. -Welcher aber ist der richtige Kontext? Wir könnten raten, -dass Legatobögen sich im @code{Voice}-Kontext befinden, -denn sie sind immer einzelnen Melodielinien zugewiesen. -Aber wir können uns dessen nicht sicher sein. Um unsere -Annahme zu überprüfen, gehen wir wieder zu der Seite im -IR, die die Legatobögen beschreibt und die Überschrift -@emph{Slur} hat. Dort steht: @qq{Slur objects are created -by: Slur engraver}. Legatobögen werden also in dem Kontext -erstellt, in dem sich der @code{Slur_engraver} befindet. -Folgen Sie dem Link zu der @code{Slur_engraver}-Seite. -Unten auf der Seite steht, dass der @code{Slur_engraver} -sich in fünf Stimmen-Kontexten befindet, unter anderem -auch im normalen @code{Voice}-Kontext. Unsere Annahme -war also richtig. Und weil @code{Voice} einer der Kontexte -der untersten Ebene ist, welcher eindeutig schon dadurch -definiert ist, dass wir Noten eingeben, kann er an dieser Stelle -auch weggelassen werden. - - -@subheading Overriding once only - -@cindex Override nur einmal -@cindex once override -@funindex \once -@funindex once - -Im Beispiel oben wurden @emph{alle} Legatobögen dicker -gesetzt. Vielleicht wollen Sie aber nur den ersten Bogen -dicker haben. Das können Sie mit dem @code{\once}-Befehl -erreichen. Er wird direkt vor den @code{\override}-Befehl -gesetzt und bewirkt, dass nur der Bogen geändert wird, der -@strong{unmittelbar an der nächsten Note beginnt.} Wenn -die nächste Note keinen Bogenbeginn hat, dann passiert -gar nichts -- der Befehl wird nicht gespeichert, sondern einfach -vergessen. Der Befehl, mit @code{\once} zusammen benutzt, -muss also wie folgt positioniert werden: - -@cindex Legatobogen, Beispiel zur Veränderung -@cindex thickness-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Jetzt bezieht er sich nur noch auf den ersten Legatobogen. - -Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl -eingesetzt werden. - - -@subheading Reverting - -@cindex Revert -@cindex Rückgängig machen -@cindex Wiederherstellen von Standardeinstellungen -@cindex Standardeinstellungen, Wiederherstellen -@funindex \revert -@funindex revert - -Eine weitere Möglichkeit: nur die beiden ersten Legatobögen sollen -dicker gesetzt werden. Gut, wir könnten jetzt zwei Befehle benutzen, -jeden mit dem @code{\once}-Präfix und direkt vor die entsprechende -Note gestellt, an welcher der Bogen beginnt: - -@cindex Legatobogen, Beispiel zur Veränderung -@cindex thickness-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle -dessen später den @code{\revert}-Befehl einsetzen, um die -@code{thickness}-Eigenschaft wieder auf ihren Standardwert zurückzusetzen: - -@cindex Legatobogen, Beispiel zur Veränderung -@cindex thickness-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) - % Revert thickness of all following slurs to default of 1.2 - \revert Slur #'thickness - e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Der @code{\revert}-Befehl kann benutzt werden, um eine beliebige -Eigenschaft, die mit @code{\override} geändert worden ist, wieder in -ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können -Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche -Resultat. - -Damit endet die Einleitung in die Referenz der Interna (IR) und die -grundlegenden Optimierungsmethoden. Einige Beispiele folgen in späteren -Abschnitten dieses Kapitel, einerseits um Sie mit weiteren Möglichkeiten -der IR bekanntzumachen, andererseits um Ihnen mehr Übungsmöglichkeiten -zu geben, die relevante Information dort zu finden. Die Beispiele werden -Schritt für Schritt immer weniger Erklärungen beinhalten. - - -@node Properties found in interfaces -@subsection Properties found in interfaces - -@cindex Interface-Eigenschaften -@cindex Eigenschaften von Interfaces -@cindex Schnittstellen, Eigenschaften von -@cindex Eigenschaften von Schnittstellen - -Der Text unseres Beispiels soll jetzt kursiv gesetzt werden. Was für -ein @code{\override}-Befehl wird dazu benötigt? Schauen wir -uns zunächst das Inhaltsverzeichnis in der IR an: @qq{All layout objects}, -wie auch schon zuvor. Welches Objekt könnte die Darstellung des -Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag @code{LyricText}, -das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften -an, die verändert werden können. Dazu gehört -@code{font-series} und @code{font-size}, aber nichts, womit man kursiven -Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen -Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzlenen -Layout-Objekt aufgelistet, sondern ist mit anderen ähnlichen Eigenschaften -zusammen in einem @strong{Interface} -- einer Schnittstelle -- verortet; -in diesem Fall das -@code{font-interface}. - -Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden -und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften -benutzen. - -Schauen Sie sich noch einmal die Seite in der IR an, die @code{LyricText} -beschreibt. Unten auf der Seite ist eine klickbare Liste (in der HTML-Version -der IR) an Eigenschaften, die von @code{LyricText} unterstützt -werden. Diese Liste enthält sieben Einträge, darunter auch -@code{font-interface}. Ein Klick hierauf bringt uns zu den Eigenschaften, -die mit dieser Schnittstelle verbunden sind, also auch @code{LyricText}. - -Jetzt sehen wir alle die Eigenschaften, die der Benutzer verändern kann, -um die Schriftartendarstellung zu beeinflussen. Dazu gehört nun auch -@code{font-shape(symbol)}, wobei @code{symbol} auf die Werte -@code{upright} (gerade), @code{italics} (kursiv) oder @code{caps} -(Kapitälchen) gesetzt werden kann. - -Sie werden gemerkt haben, dass @code{font-series} und @code{font-size} -hier auch aufgelistet sind. Es stellt sich die Frage, warum diese -allgemeinen Schriftarteigenschaften @code{font-series} und -@code{font-size} sowohl unter der Überschrift -@code{LyricText} als unter dem @code{font-interface} aufgelistet -sind, aber @code{font-shape} befindet sich nur im -@code{font-interface}? Die Antwort ist: Die globalen Einstellungen -von @code{font-series} und @code{font-size} werden geändert, wenn -ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape} -wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der -Überschrift @code{LyricText} beinhalten dann die Werte der -Standardeinstellungen dieser zwei Eigenschaften, wenn es sich -um ein @code{LyricText}-Objekt handelt. Andere Objekte, -die auch das @code{font-interface} unterstützen, setzen diese -Eigenschaften anders, wenn sie erstellt werden. - -Versuchen wir nun einen @code{\override}-Befehl zu konstruieren, -der den Gesantext kursiv setzt. Das Objekt hat die Bezeichnung -@code{LyricText}, die Eigenschaft ist @code{font-shape} -und der Wert @code{italic}. Wie vorher schon lassen wir den -Kontext aus. - -Am Rande sei angemerkt, dass die Werte der @code{font-shape}-Eigenschaft -mit einem Apostroph (@code{'}) gekennzeichnet werden -müssen, weil es sich um Symbole handelt. Aus dem gleichen -Grund mussten auch für @code{thickness} weiter oben im -Text ein Apostroph gesetzt werden. Symbole sind besondere -Bezeichnungen, die LilyPond intern bekannt sind. Einige -sind Bezeichnungen von Eigenschaften, wie eben @code{thickness} -oder @code{font-shape}. Andere sind besondere Werte, -die an Eigenschaften übergeben werden können, wie -@code{italic}. Im Unterschied hierzu gibt es auch beliebige -Zeichenketten, die immer mit Anführungszeichen, also -als @code{"Zeichenkette"} auftreten. Für weitere -Einzelheiten zu Zeichenketten und Werten, siehe -@ref{Scheme tutorial}. - -Gut, der @code{\override}-Befehl, mit dem der Gesangstext -kursiv gesetzt wird, lautet: - -@example -\override LyricText #'font-shape = #'italic -@end example - -@noindent -und er muss direkt vor den Text gesetzt werden, auf den er sich -bezieht, etwa so: - -@cindex font-shape-Eigenschaft, Beispiel -@cindex LyricText, Beispiel zur Veränderung -@cindex kursiv, Beispiel -@cindex @code{\addlyrics}, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - \override LyricText #'font-shape = #'italic - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Jetzt wird der Text kursiv gesetzt. - - -@subheading Specifying the context in lyric mode - - -@cindex Kontext im Gesangstextmodus angeben -@cindex Gesangstextmodus, Kontext angeben - -Bei Gesangstexten funktioniert der @code{\override}-Befehl -nicht mehr, wenn Sie den Kontext im oben dargestellten -Format angeben. Eine Silbe wird im Gesangtextmodus -(lyricmode) entweder von einem Leerzeichen, einer -neuen Zeile oder einer Zahl beendet. Alle anderen -Zeichen werden als Teil der Silbe integriert. Aus diesem -Grund muss auch vor der schließenden Klammer -@code{@}} ein Leerzeichen gesetzt oder eine neue -Zeile begonnen werden. Genauso müssen Leerzeichen -vor und nach einem Punkt benutzt werden, um die -Kontext-Bezeichnung von der Objekt-Bezeichnung zu -trennen, denn sonst würden beide Bezeichnungen als -ein Begriff interpretiert und von LilyPond nicht verstanden -werden. Der Befehl muss also lauten: - -@example -\override Lyrics . LyricText #'font-shape = #'italic -@end example - -@warning{Innerhalb von Gesangstext muss immer ein -Leerzeichen zwischen der letzten Silbe und der schließenden -Klammer gesetzt werden.} - -@warning{Innerhalb von @code{\override}-Befehlen in -Gesangstexten müssen Leerzeichen um Punkte zwischen -Kontext- und Objektbezeichnungen gesetzt werden.} - - -@node Types of properties -@subsection Types of properties - -@cindex Eigenschaftsarten - -Bis jetzt hatten wir es mit zwei Arten von Eigenschaften zu -tun: @code{number} (Zahl) und @code{symbol}. Damit -ein Befehl funktioniert, muss der Wert einer Eigenschaft -vom richtigen Typ sein und die Regeln befolgen, die -für diesen Typ gelten. Der Eigenschaftstyp ist in der -IR in Klammern hinter der Eigenschaftsbezeichnung -angegeben. Hier eine Liste der Typen, die Sie vielleicht -benötigen werden, mit den Regeln, die für den jeweiligen -Typ gelten und einigen Beispielen. Sie müssen immer -ein Rautenzeichen (@code{#}) vor den Typeintrag setzen, -wenn sie in einem @code{\override}-Befehl benutzt werden. - -@multitable @columnfractions .2 .45 .35 -@headitem Eigenschaftstyp - @tab Regeln - @tab Beispiele -@item Boolesch - @tab Entweder wahr oder falsch, dargestellt als #t oder #f - @tab @code{#t}, @code{#f} -@item Dimension (in Notenlinienabständen) - @tab Eine positive Dezimalzahl (in Notenlinienabstand-Einheiten) - @tab @code{2.5}, @code{0.34} -@item Richtung - @tab Eine gültige Richtungskonstante oder das numerische Äquivalent - @tab @code{LEFT}, @code{CENTER}, @code{UP}, - @code{1}, @code{-1} -@item Integer - @tab Eine positive ganze Zahl - @tab @code{3}, @code{1} -@item Liste - @tab Eine eingeklammerte Anzahl von Einträgen, mit Klammern getrennt - und angeführt von einem Apostroph - @tab @code{'(left-edge staff-bar)}, @code{'(1)}, - @code{'(1.0 0.25 0.5)} -@item Textbeschriftung (markup) - @tab Beliebige gültige Beschriftung - @tab @code{\markup @{ \italic "cresc." @}} -@item Moment - @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion - konstruiert - @tab @code{(ly:make-moment 1 4)}, - @code{(ly:make-moment 3 8)} -@item Zahl - @tab Eine beliebige positive oder negative Dezimalzahl - @tab @code{3.5}, @code{-2.45} -@item Paar (Zahlenpaar) - @tab Zwei Zahlen getrennt von @qq{Leerzeichen . Leerzeichen}, eingeklammert - und angeführt von einem Apostroph - @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} -@item Symbol - @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft - gültig sind, angeführt von einem Apostroph - @tab @code{'italic}, @code{'inside} -@item Unbekannt - @tab Eine Prozedur oder @code{#f} (um keine Aktion hervorzurufen) - @tab @code{bend::print}, @code{ly:text-interface::print}, - @code{#f} -@item Vektor - @tab Eine Liste mit drei Einträgen, eingeklammert und mit - Apostroph-Raute ( @code{'#}) angeführt. - @tab @code{'#(#t #t #f)} -@end multitable - - -@seealso -Handbuch zum Lernen: @ref{Scheme tutorial}. - - -@node Appearance of objects -@section Appearance of objects - -In diesem Abschnitt wollen wir zeigen, wie die Kenntnisse der -vorigen Abschnitte in der Praxis angewandt werden können, -um das Aussehen des Musiksatzes zu beeinflussen. - -@menu -* Visibility and color of objects:: -* Size of objects:: -* Length and thickness of objects:: -@end menu - - -@node Visibility and color of objects -@subsection Visibility and color of objects - -In Unterrichtsmaterial für den Musikunterricht wird oft -eine Partitur dargestellt, in der bestimmte Notationselemente -fehlen, so dass der Schüler die Aufgabe bekommt, die -nachzutragen. Ein einfaches Beispiel ist etwa, die -Taktlinien zu entfernen, damit der Schüler sie selber zeichnen -kann. Aber die Tatklinien werden normalerweise automatisch -eingefügt. Wie verhindern wir, dass sie ausgegeben werden? - -Bevor wir uns hieran machen, sei daran erinnert, dass -Objekteigenschaften in sogenannten @emph{Schnittstellen} --- engl. interface -- gruppiert sind, siehe auch -@ref{Properties found in interfaces}. Das dient ganz einfach -dazu, die Eigenschaften zusammenzufassen, die üblicherweise -zusammen benötigt werden -- wenn eine davon für ein Objekt -gilt, dann auch die anderen. Manche Objekte brauchen die -Eigenschaften von der einen Schnittstelle, andere von einer -anderen. Die Schnittstellen, die die Eigenschaften von einem -bestimmten Grob beinhalten, sind in der IR unten auf der -Seite aufgelistet, die dieses Grob beschreibt. Die Eigenschaften -können betrachtet werden, indem die Seite der entsprechenden -Schnittstelle geöffnet wird. - -Zu Information, wie man Eigenschaften von Grobs findet, siehe -@ref{Properties of layout objects}. Wir benutzen also jetzt -die selbe Methode um in der IR das Layout-Objekt zu finden, -dass für die Tatklinien zuständig ist. Über die Überschriften -@emph{Backend} und @emph{All layout objects} kommen -wir zu einem Layout-Objekt mit der Bezeichnung -@code{BarLine} (engl. TaktLinie). Seine Eigenschaften -beinhalten zwei, die über die Sichtbarkeit entscheiden: -@code{break-visibility} und @code{stencil}. -@code{BarLine} unterstützt auch einige Schnittstellen, -unter anderem @code{grob-interface}, wo wir eine -@code{transparent} und eine @code{color}-Eigenschaft -finden. Alle können die Sichtbarkeit von Taktlinien (und -natürlich auch die Sichtbarkeit von vielen anderen Objekten) -beeinflussen. Schauen wir uns diese Eigenschaften eine -nach der anderen an. - -@subheading stencil - -@cindex Stencil-Eigenschaft -@cindex Matrizen-Eigenschaft - -Diese Eigenschaft kontrolliert die Erscheinung der Taktlinien, -indem sie das Symbol bestimmt, das ausgegeben werden soll. -Wie bei vielen anderen Eigenschaften auch, kann sie so -eingestellt werden, dass sie nichts ausgibt, indem ihr Wert -auf @code{#f} (falsch) gesetzt wird. Ein Versuch also, -wie vorher, indem wir den impliziten Kontext (@code{Voice}) -auslassen: - -@cindex Taktlinie, Beispiel zur Veränderung -@cindex stencil-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Die Taktlinien werden aber immer noch angezeigt. Was ist da -falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf -die Seite, die die Eigenschafter für @code{BarLine} angibt. -Oben auf der Seite steht: @qq{Barline objects are created -by: Bar_engraver}. Schauen Sie sich die -@code{Bar_engraver}-Seite an. Unten auf der Seite steht -eine Liste der Kontexte, in denen der Takt-Engraver -funktioniert. Alle Kontexte sind @code{Staff}-Typen (also -Notensystem-Typen). Der Grund, warum der -@code{\override}-Befehl nicht funktioniert hat, liegt -also darin, dass das Taktlinie-Objekt (@code{BarLine}) sich nicht -im @code{Voice}-Kontextbefindet. Wenn der Kontext -falsch angegeben wird, bewirkt der Befehl einfach gar -nichts. Keine Fehlermeldung wird ausgegeben und auch -nichts in die Log-Datei geschrieben. Versuchen wir also, -den richtigen Kontext mitanzugeben: - -@cindex Taktlinie, Beispiel zur Veränderung -@cindex stencil-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Jetzt sind die Taktlinien wirklich verschwunden. - - -@subheading break-visibility - -@cindex break-visibility-Eigenschaft -@cindex Unsichtbar machen (break-visibility) - -Aus der Beschreibung der Eigenschaften für @code{BarLine} -in der IR geht hervor, dass die @code{break-visibility}-Eigenschaft -einen Vektor mit drei Booleschen Werten benötigt. Diese -kontrollieren jeweils, ob die Taktlinien am Ende einer Zeile, -in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben -werden. Wenn also alle Taktlinien unsichtbar sein sollen, wie in -unserem Beispiel, brauchen wir den Wert @code{'#(#f #f #f)}. -Versuchen wir es also, und berücksichtigen wir auch den -@code{Staff}-Kontext. Beachten Sie auch, dass Sie @code{#'#} -vor der öffnenden Klammer schreiben müssen: -@code{'#} wird benötigt als Teil des Wertes, um einen Vektor zu -signalisieren, und das erste @code{#} wird benötigt, um -den Wert in einem @code{\override}-Befehl anzuführen. - -@cindex Taktlinie, Beispiel zur Veränderung -@cindex break-visibility-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'break-visibility = #'#(#f #f #f) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Auch auf diesem Weg gelingt es, die Taktlinien unsichtbar zu machen. - - -@subheading transparent - -@cindex transparent-Eigenschaft -@cindex Durchsichtig machen (transparent) - -Aus den Eigenschaftsdefinitionen auf der @code{grob-interface}-Seite -in der IR geht hervor, dass die @code{transparent}-Eigenschaft -boolesch ist. Mit @code{#t} (wahr) wird also ein Grob durchsichtig -gemacht. Im unserem Beispiel soll jetzt die Taktart durchsichtig -gemacht werden, anstatt die Taktlinien durchsichtig zu machen. -Wir brauchen also wieder die Grob-Bezeichnung für die Taktart. -Auf der @qq{All layout objects}-Seite in der IR müssen wir die -Eigenschaften des @code{TimeSignature}-Layout-Objekts suchen -Das Objekt wird vom @code{Time_signature_engraver} erstellt, -der sich auch im @code{Staff}-Kontext befindet und genauso das -@code{grob-interface} unterstützt, wie Sie sich -überzeugen können. Der Befehl, um die Taktangabe unsichtbar zu -machen, ist also: - -@cindex Taktart, Beispiel zur Veränderung -@cindex transparent-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'transparent = ##t - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Die Taktangabe ist verschwunden, aber mit diesem Befehl wird ein -freier Platz gelassen, wo sich die Taktangabe eigentlich befinden -würde. Das braucht man vielleicht für eine Schulaufgabe, in der -die richtige Taktangabe eingefügt werden soll, aber in anderen -Fällen ist diese Lücke nicht schön. Um auch die Lücke zu entfernen, -muss die Matrize (stencil) der Taktangabe auf @code{#f} (falsch) -gesetzt werden: - -@cindex Taktart, Beispiel zur Veränderung -@cindex stencil-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Und der Unterschied wird deutlich: hiermit wird das gesamte Objekt -entfernt, während man mit @code{transparent} ein Objekt -unsichtbar machen kann, es aber an seinem Platz gelassen wird. - - -@subheading color - -@cindex color-Eigenschaft -@cindex Farb-Eigenschaft - -Abschließend wollen wir die Taktlinien unsichtbar machen, indem -wir sie weiß einfärben. (Es gibt hier eine Schwierigkeit: die weiße -Taktlinie übermalt manchmal die Taktlinienen, wo sie sie kreuzt, -manchmal aber auch nicht. Sie können in den Beispielen unten -sehen, dass das nicht vorhersagbar ist. Die Einzelheiten dazu, warum -das passiert und wie sie es kontrollieren können, werden dargestellt -in @ruser{Painting objects white}. Im Moment wollen wir lernen, wie -man mit Farbe arbeitet, akzeptieren Sie bitte an dieser Stelle die -Beschränkung.) - -Das @code{grob-interface} bestimmt, dass der Wert der Farb-Eigenschaft -eine Liste ist, aber es gibt keine Erklärung, was für eine Liste das -sein soll. Die Liste, die benötigt wird, ist eine Liste mit Werten in -internen Einheiten, aber damit Sie nicht wissen müssen, wie diese -aussehen, gibt es mehrere Wege, Farben anzugeben. Der erste -Weg ist es, @qq{normale} Farben zu benutzen, wie sie in der -Tabelle in @ruser{List of colors} aufgelistet sind. Beachten Sie, -dass die Bezeichnungen auf English sind. Um die Taktlinien auf -weiß zu setzen, können Sie schreiben: - -@cindex Taktlinie, Beispiel zur Veränderung -@cindex color-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #white - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -und die Taktlinien verschwinden in der Tat. Beachten Sie, -dass @emph{white} nicht mit einem Apostroph angeführt -wird -- es ist kein Symbol, sondern eine @emph{Funktion}. -Wenn sie aufgerufen wird, stellt sie eine Liste mit internen -Werten zu Verfügung, mit welcher die Farbe auf weiß -gestellt wird. Die anderen Farben in der Liste sind auch -Funktionen. Um sich zu überzeugen, dass der Befehl auch -wirklich funktioniert, können Sie die Farbe auf eine der -anderen Funktionen dieser Liste abändern. - -@cindex Farben, X11 -@cindex X11-Farben -@funindex x11-color - -Die zweite Art die Farbe zu ändern geschieht, indem die Liste -der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste -in @ruser{List of colors}. Diesen Farben muss jedoch eine -andere Funktion vorangestellt werden, die die X11-Farbbezeichnungen -in interne Werte konvertiert: -@code{x11-color}. Das geschieht wie folgt: - -@cindex Taktlinie, Beispiel zur Veränderung -@cindex color-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(x11-color 'white) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -In diesem Fall hat die Funktion @code{x11-color} ein Symbol -als Argument, darum muss dem Symbol ein Apostroph vorangestellt -und beide zusammen in Klammern gesetzt werden. - -@cindex RGB-Farben -@cindex Farben, RGB -@funindex rgb-color - -Es gibt noch eine dritte Funktion, die RGB-Werte in die -internen Werte übersetzt -- die @code{rgb-color}-Funktion. Sie -braucht drei Argumente, um die Stärke von Rot, Grün und -Blau darzustellen. Die Werte befinden sich zwischen -0 und 1. Um also die Farbe Rot darzustellen, muss der -Wert der Funktion lauten: @code{(rgb-color 1 0 0)}, weiß -würde sein: @code{(rgb-color 1 1 1)}. - -@cindex Taktlinie, Beispiel zur Veränderung -@cindex color-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(rgb-color 1 1 1) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Schließlich gibt es noch eine Grauskala, die zu den X11-Farben -gehört. Sie reicht von schwarz (@code{'grey0'}) bis -weiß (@code{'grey100}), in Einserschritten. Wir wollen das -illustrieren, indem alle Layout-Objekte im Beispiel -verschiede Grauschattierungen erhalten: - -@cindex StaffSymbol, Beispiel zur Veränderung -@cindex TimeSignature, Beispiel zur Veränderung -@cindex Schlüssel, Beispiel zur Veränderung -@cindex Notenhals, Beispiel zur Veränderung -@cindex Taktlinie, Beispiel zur Veränderung -@cindex Farbeigenschaft, Beispiel -@cindex x11-Farben, Beispiel -@cindex Taktlinien, Beispiel zur Veränderung -@cindex Taktart, Beispiel zur Veränderung -@cindex Clef, Beispiel zur Veränderung -@cindex Stem, Beispiel zur Veränderung -@cindex NoteHead, Beispiel zur Veränderung -@cindex Notenkopf, Beispiel zur Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.StaffSymbol #'color = #(x11-color 'grey30) - \override Staff.TimeSignature #'color = #(x11-color 'grey60) - \override Staff.Clef #'color = #(x11-color 'grey60) - \override Voice.NoteHead #'color = #(x11-color 'grey85) - \override Voice.Stem #'color = #(x11-color 'grey85) - \override Staff.BarLine #'color = #(x11-color 'grey10) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt -verbunden sind. Es ist wichtig, den richtigen Kontext einzusetzen, -damit die Befehle funktionieren. Denken Sie daran, dass der -Kontext sich daran orientiert, wo sich der entsprechende -Engraver befindet. Den Standardkontext für Engraver finden -Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver -gehen, der es produziert und auf der Seite des Engravers in der -IR finden Sie Information, in welchem Kontext sich der -Engraver normalerweise befindet. - - -@node Size of objects -@subsection Size of objects - -@cindex Veränderung von Objektgrößen -@cindex Objektgrößen, verändern -@cindex Größen von Objekten verändern - -Als Startpunkt wollen wir wieder ein früheres Beispiel -wählen, siehe @ref{Nesting music expressions}. Hier wurde -ein neues Notensystem erstellt, wie man es für ein @rglos{ossia} -braucht. - -@cindex alignAboveContext-Eigenschaft, Beispiel -@cindex über dem System anordnen, Beispiel -@cindex @code{\with}-Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } - } -@end lilypond - -Ossia-Systeme werden normalerweise ohne Schlüssel und Taktangabe -geschrieben, und sie werden etwas kleiner als das Hauptsystem gesetzt. -Wie man Schlüssel und Taktangabe entfernt, wissen wir schon: -wir setzen den Stencil von beiden auf @code{#f}: - -@cindex alignAboveContext-Eigenschaft, Beispiel -@cindex über dem System anordnen, Beispiel -@cindex @code{\with}-Beispiel -@cindex stencil-Eigenschaft, Beispiel -@cindex Schlüssel, Beispiel zur Veränderung -@cindex Taktart, Beispiel zur Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - } - { - \override Staff.Clef #'stencil = ##f - \override Staff.TimeSignature #'stencil = ##f - { f8 f c } - } - >> - r4 | - } -} -@end lilypond - -@noindent -wobei ein zusätzliches Klammerpaar nach der @code{\with}-Konstruktion -erforderlich ist um sicherzugehen, dass die Modifikation und -die Noten sich auch auf das Ossia-System beziehen. - -Was für einen Unterschied macht es, ob man den @code{Staff}-Kontext -mit @code{\with} verändert, oder ob man die Stencils mit -@code{\override} beeinflusst? Der größte Unterschied liegt -darin, dass Änderungen, die mit @code{\with} eingeführt werden, -während der Erstellung des Kontextes miterzeugt werden und -als @strong{Standardeinstellungen} für diesen Kontext während seiner -gesamten Dauer gelten, während @code{\set}- oder @code{\override}-Befehle -dynamisch in die Noten eingebettet werden -- sie führen die -Änderungen synchron mit einem bestimmten Zeitpunkt in -der Musik aus. Wenn die Änderungen mit @code{\unset} -oder @code{\revert} rückgängig gemacht werden, werden -wieder die Standardwerte eingesetzt, die also die sind, die -mit einer @code{\with}-Konstruktion definiert wurden, oder -wenn hier keine definiert worden sind, die normalen -Standardwerte. - -Manche Kontexteigenschaften können nur ein einer -@code{\with}-Konstruktion verändert werden. Das sind -Eigenschaften, die nicht sinnvoll mitten im System geändert -werden können. @code{alignAboveContext} (Orientierung -über dem Kontext) und die Parallele, -@code{alignBelowContext} (Orientierung unter dem Kontext) -sind zwei derartige Eigenschaften -- wenn das Notensystem -einmal erstellt wurde, ist die Orientierung schon bestimmt -und es wäre nicht sinnvoll, sie später zu ändern. - -Die Standardwerte für Layout-Objekt-Eigenschaften können -auch in der @code{\with}-Konstruktion gesetzt werden. -Benutzen Sie einfach den normalen @code{\override}-Befehl -ohne den Kontext, denn der Kontext ist eindeutig definiert -durch die Stelle, an welcher sich @code{\with} befindet. -Wenn an dieser Stelle ein Kontext angegeben wird, produziert LilyPond -eine Fehlermeldung. - -Das obige Beispiel könnte also auch so aussehen: - -@cindex alignAboveContext-Eigenschaft, Beispiel -@cindex über dem System anordnen, Beispiel -@cindex @code{\with}-Beispiel -@cindex stencil-Eigenschaft, Beispiel -@cindex Schlüssel, Beispiel zur Veränderung -@cindex Taktart, Beispiel zur Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - % Don't print clefs in this staff - \override Clef #'stencil = ##f - % Don't print time signatures in this staff - \override TimeSignature #'stencil = ##f - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Nun können wir daran gehen, auch wirklich die -Größe der Objekte zu ändern. - -Manche Layout-Objekte werden aus Glyphen erstellt, -die sich in einer Schriftartdatei befinden. Dazu gehören -die Notenköpfe, Versetzungszeichen, Text, Schlüssel, -Taktbezeichnung, Dynamik und Gesangstext. Ihre -Größe wird verändert, indem die -@code{font-size}- (Schriftgröße)-Eigenschaft geändert wird, wie -wir bald sehen werden. Andere Layout-Objekte, wie -Bögen -- oder allgemein Strecker-Objekte -- werden -individuell gezeichnet, es gibt dazu also keine -@code{font-size}, die mit ihnen verknüpft wäre. -Weitere Eigenschaften wie die Länge von Hälsen und -Taktlinien, Dicke von Balken und anderen Linien und -der Abstand der Notenlinien voneinander müssen auf -spezielle Weise verändert werden. - -In unserem Ossia-Beispiel wollen wir zuerst die -Schriftgröße verändern. Das ist auf zwei Arten möglich. -Entweder wir ändern die Schriftgröße für jede Objektart -mit einem eigenen Befehl, etwa: - -@example -\override NoteHead #'font-size = #-2 -@end example - -@noindent -oder wir ändern die Größe aller Schriftobjekte, indem wir -den Wert einer besonderen Eigenschaft, @code{fontSize}, -mit dem @code{\set}-Befehl bestimmen oder sie in -eine @code{\with}-Konstruktion (ohne @code{\set} einschließen. - -@example -\set fontSize = #-2 -@end example - -Beide Beispiele reduzieren die Schriftgröße um zwei Schritte -im Vergleich zum vorigen Wert, wobei jeder Schritt die -Schriftgröße um etwa 12% verändert. - -Setzen wir das also in unserem Ossia-Beispiel ein: - -@cindex alignAboveContext-Eigenschaft, Beispiel -@cindex über dem System anordnen, Beispiel -@cindex @code{\with}-Beispiel -@cindex stencil-Eigenschaft, Beispiel -@cindex Schlüssel, Beispiel zur Veränderung -@cindex Taktart, Beispiel zur Veränderung - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - % Reduce all font sizes by ~24% - fontSize = #-2 - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Das sieht aber immer noch nicht richtig aus. Die Notenköpfe -und Fähnchen sind kleiner, aber die Hälse im Vergleich -dazu zu lang und die Notenlinien zu weit auseinander. -Sie müssen auch proportional zur Schriftart verkleinert -werden. Der nächste Abschnitt behandelt diese Anpassung. - - -@node Length and thickness of objects -@subsection Length and thickness of objects - -@cindex Entfernungen -@cindex Dicke -@cindex Länge -@funindex magstep -@cindex Größe, verändern -@cindex Notenhalslänge, verändern -@cindex Hälse, Länge verändern -@cindex Notenlinien, Länge verändern - -Abstände und Längen werden in LilyPond üblicherweise -in Notenlinienabständen (engl. staff-spaces) gemessen. -Das ist der Abstand zwischen zwei Notenlinien im System. -Die meisten Dicken (engl. thickness) dagegen werden in -einer internen Einheit Linien-Dicke (engl. line-thickness) -gemessen. Die Linien von Dynamikklammern zum Beispiel -haben standardmäßig eine Dicke von einer Einheit -@code{line-thickness}, während die Dicke eines -Notenhalses 1,3 ist. Beachten Sie jedoch, dass sich -manche Dicken anders verhalten: die Dicke von -Balken etwa wird in Notenlinienabständen gemessen. - -Wie also werden Längen skaliert um der Schriftgröße -zu entsprechen? Das kann mit einer besonderen Funktion -@code{magstep} vorgenommen werden, die genau für -diesen Zweck vorhanden ist. Sie nimmt ein Argument auf, -die Änderung der Schriftgröße (#-2 im obigen Beispiel) -und gibt einen Skalierungsfaktor aus, der dazu dient, -Objekte proportionell zueinander zu verändern. So wird -sie benutzt: - -@cindex alignAboveContext-Eigenschaft, Beispiel -@cindex über dem System anordnen, Beispiel -@cindex @code{\with}-Beispiel -@cindex stencil-Eigenschaft, Beispiel -@cindex Schlüssel, Beispiel zur Veränderung -@cindex Taktart, Beispiel zur Veränderung -@cindex Notenlinienabstände verändern -@cindex staff-space-Eigenschaft verändern -@cindex magstep-Funktion, Beispiel -@cindex Schriftart-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - fontSize = #-2 - % Reduce stem length and line spacing to match - \override StaffSymbol #'staff-space = #(magstep -2) - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -@noindent -Da die Länge eines Halses und viele andere Längeneigenschaften -relativ zum Wert des Notenlinienabstands (@code{staff-space}) -errechnet werden, werden sie auch automatisch verkleinert. -Das wirkt sich jedoch nur auf die vertikale Skalierung des Ossias -aus -- die horizontale Skala ist durch das Layout des Haupsystems -bestimmt und wird also von diesen Größenänderungen nicht -betroffen. Wenn natürlich die Größe der gesamten Noten reduziert -würde, würde sich auch die horizontalen Abstände ändern. Dass -wird später im Layout-Abschnitt betrachtet. - -Mit dieser Änderung ist unser Ossia fertig. Die Größen und Längen -aller anderen Objekte können auf analoge Weise geändert -werden. - -Für kleine Größenänderungen, wie in dem obigen Beispiel, -braucht die Dicke der verschiedenen Linien, wie Taktlinien, -Notenlinien, Balken, Dynamikklammern usw. normalerweise -keine spezielle Anpassung. Wenn die Dicke eines bestimmten -Layout-Objektes angepasst werden muss, kann man das erreichen, -indem die entsprechende @code{thickness}-Eigenschaft des -Objekts mit @code{\override} verändert wird. Ein Beispiel, -wie man die Dicke von Bögen ändert, wurde schon gezeigt, -siehe @ref{Properties of layout objects}. Die Dicke aller -gezeichneten Objekte (die also nicht aus einer Schriftart -stammen) können auf gleiche Weise geändert werden. - - -@node Placement of objects -@section Placement of objects - -@menu -* Automatic behavior:: -* Within-staff objects:: -* Outside-staff objects:: -@end menu - - -@node Automatic behavior -@subsection Automatic behavior - -@cindex within-staff-Objekte -@cindex outside-staff-Objekte -@cindex Objekte innerhalb des Notensystems -@cindex Objekte außerhalb des Notensystems - -Es gibt Objekte der Notation, die zum Notensystem gehören, und -andere, die außerhalb des Systems gesetzt werden müssen. Sie -werden @code{within-staff}-Objekte bzw. -@code{outside-staff}-Objekte genannt. - -@code{within-staff}-Objekte werden innerhalb des Notensystems -(engl. staff) gesetzt: Notenköpfe, Hälse, Versetzungszeichen -usw. Ihre Position ist üblicherweise durch die notierte Musik -bestimmt -- sie werden vertikal auf bestimmten Linien notiert -oder sind an andere Objekte gebunden, die vertikal festgelegt -sind. Kollisionen von Notenköpfen, Hälsen und Versetzungszeichen -werden normalerweise automatisch vermieden. Es gibt -Befehle, um dieses automatische Verhalten zu verändern, wie -unten gezeigt werden soll. - -Objekte, die außerhalb des Notensystems gesetzt werden, sind -unter Anderem Übungsmarkierungen, Text und Dynamikzeichen. -LilyPonds Regel für ihre vertikale Positionierung lautet, sie so nah wie -möglich am Notensystem zu setzen, aber nicht so nah, dass -sie mit anderen Objekten kollidieren. Dabei wird die -@code{outside-staff-priority}-(Priorität außerhalb des Notensystems)-Eigenschaft -eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden -sollen. - -Zuerst werden alle Innersystemobjekte von LilyPond gesetzt. -Dann werden die Objekte außerhalb des Systems nach -ihrer -@code{outside-staff-priority} geordnet. Die @code{outside-staff}-Objekte -werden dann nacheinander gesetzt, mit der niedrigsten -Priorität beginnend, und so gesetzt, dass sie nicht mit anderen -Objekten kollidieren, die schon gesetzt wurden. Wenn also zwei -@code{outside-staff}-Objekte um den selben Platz streiten, -wird das mit der geringeren @code{outside-staff-priority} näher -am System gesetzt werden. Wenn zwei Objekte die selbe Priorität -haben, wird das näher am System gesetzt, welches zuerst -auftritt. - -Im folgenden Beispiel haben alle Textbeschriftungen die gleiche -Priorität (weil sie nicht explizit gesetzt worden ist). Beachten Sie, -dass @qq{Text3} wieder dicht am System gesetzt wurde, weil -er unter @qq{Text2} passt. - -@cindex Textbeschriftungsbeispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -Notensysteme werden in den Standardeinstellungen auch so dicht -beeinander gesetzt wie es möglich ist (mit einem minimalen Abstand). -Wenn Noten sehr weit aus einem System herausragen, zwingen sie -das nächste System weiter weg, wenn eine Kollision drohen würde. -Im nächsten Beispiel sehen Sie, wie Noten auf zwei Systemen -@qq{ineinander greifen}. - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \relative c' { c a, } - } - \new Staff { - \relative c'''' { c a, } - } ->> -@end lilypond - - -@node Within-staff objects -@subsection Within-staff objects - -Es wurde schon gezeigt, wie die Befehle @code{\voiceXXX} die Richtung -von Bögen, Fingersatz und allen anderen Objekten beeinflusst, -die von der Richtung der Notenhälsen abhängen. Diese Befehle -sind nötig, wenn polyphone Musik geschrieben wird, damit sich -die einzelnen Melodielinien klar abzeichnen. Es kann aber von Zeit -zu Zeit nötig sein, dieses automatische Verhalten zu verändern. Das -kann entweder für ganze Abschnitte, aber genauso auch nur für eine -einzelne Note vorgenommen werden. Die Eigenschaft, die die Richtung -bestimmt, ist die @code{direction}-Eigenschaft jedes Layout-Objekts. -Es soll erst erklärt werden, was sie bewirkt und dann eine Anzahl -an fertigen Befehlen für die üblicheren Situationen präsentiert werden, -mit denen Sie gleich loslegen können. - -Manche Layout-Objekte, wie Legato- und Bindebögen, biegen sich -oder zeigen entweder nach oben oder nach unten, andere, wie -Hälse und Fähnchen, verändern auch die Position rechts oder links, -je nach der Richtung, in die sie zeigen. Das wird automatisch -berücksichtigt, wenn die @code{direction}-Eigenschaft verändert -wird. - -@funindex down -@funindex up -@funindex center -@funindex neutral -@cindex hoch-Eigenschaft -@cindex runter-Eigenschaft -@cindex zentriert-Eigenschaft -@cindex neutral-Eigenschaft - -Das folgende Beispiel zeigt im ersten Takt die Standardeinstellung -für Hälse, die bei hohen Noten nach unten zeigen und bei tiefen -noten nach oben. Im nächsten Takt werden alle Hälse nach unten -gezwungen, im dritten Takt nach oben, und im vierten wird wieder -der Standard eingestellt. - -@cindex Notenhals, Beispiel zur Veränderung -@cindex Richtungseigenschaft, Beispiel - -@lilypond[quote,verbatim,relative=2] -a4 g c a -\override Stem #'direction = #DOWN -a g c a -\override Stem #'direction = #UP -a g c a -\revert Stem #'direction -a g c a -@end lilypond - -Hier werden die Konstanten @code{DOWN} und @code{UP} -eingesetzt. Sie haben die Werte @code{-1} bwz. @code{+1}, und -diese numerischen Werte können ebenso benutzt werden. Auch -der Wert @code{0} kann in manchen Fällen benutzt werden. Er -bedeutet für die Hälse das gleiche wie @code{UP}, für einige -andere Objekte jedoch @qq{zentiert}. Es gibt hierzu die Konstante -@code{CENTER}, die den Wert @code{0} hat. - -Es gibt aber einfachere Befehle, die normalerweise benutzt werden. -Hier eine Tabelle der häufigsten. Die Bedeutung des Befehls wird -erklärt, wenn sie nicht selbsverständlich ist. - -@multitable @columnfractions .2 .2 .25 .35 -@headitem Runter/Links - @tab Rauf/Rechts - @tab Rückgängig - @tab Wirkung -@item @code{\arpeggioArrowDown} - @tab @code{\arpeggioArrowUp} - @tab @code{\arpeggioNormal} - @tab Arpeggio mit Pfeil nach unten, oben oder ohne Pfeil -@item @code{\dotsDown} - @tab @code{\dotsUp} - @tab @code{\dotsNeutral} - @tab Richtung der Verschiebung eines Punktes, um Notenlinien zu vermeiden -@item @code{\dynamicDown} - @tab @code{\dynamicUp} - @tab @code{\dynamicNeutral} - @tab Position der Dynamik-Bezeichnung relativ zum System -@item @code{\phrasingSlurDown} - @tab @code{\phrasingSlurUp} - @tab @code{\phrasingSlurNeutral} - @tab Befehl für Richtung von Phrasierungsbögen -@item @code{\slurDown} - @tab @code{\slurUp} - @tab @code{\slurNeutral} - @tab Befehl für Richtung von Legatobögen -@item @code{\stemDown} - @tab @code{\stemUp} - @tab @code{\stemNeutral} - @tab Befehl für Richtung von Hälsen -@item @code{\textSpannerDown} - @tab @code{\textSpannerUp} - @tab @code{\textSpannerNeutral} - @tab Position von Textbeschrifungen, die als Strecker eingegeben werden -@item @code{\tieDown} - @tab @code{\tieUp} - @tab @code{\tieNeutral} - @tab Befehl für Richtung von Bindebögen -@item @code{\tupletDown} - @tab @code{\tupletUp} - @tab @code{\tupletNeutral} - @tab Befehl für Richtung von Klammern/Zahlen der N-tolen -@end multitable - -Diese vordefinierten Befehl können allerdings @strong{nicht} -zusammen mit @code{\once} benutzt werden. Wenn Sie die -Wirkung eines Befehl auf eine einzige Noten begrenzen wollen, -müssen Sie den entsprechenden -@code{\once \override}-Befehl benutzen oder den definierten -Befehl, gefolgt von dem entsprechenden neutralisierenden -@code{xxxNeutral}-Befehl nach der Note. - - -@subheading Fingering - -@cindex Fingersatz, Positionierung -@cindex Fingersatz, Akkorde - -Die Positionierung von Fingersatz kann auch durch den Wert -seiner @code{direction}-Eigenschaft beeinflusst werden, aber -eine Veränderung von @code{direction} hat keinen Einfluss auf -Akkorde. es gibt auch hier -besondere Befehle, mit denen der Fingersatz von einzelnen -Noten in Akkorden kontrolliert werden kann, wobei mögliche -Positionen über, unter der Note und rechts bzw. links von -ihr sind. - -Zunächst die Wirkungsweise von @code{direction} auf -den Fingersatz: im ersten Takt der Standard, dann -die Wirkung von @code{DOWN} (runter) und @code{UP} -(hinauf). - -@cindex Fingersatz, Beispiel zur Veränderung -@cindex direction-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #DOWN -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #UP -c-5 a-3 f-1 c'-5 -@end lilypond - -Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch -nicht die einfachste Art, Fingersatzbezeichnungen manuell über oder -unter das System zu setzen. Normalerweise bietet es sich an, -@code{_} oder @code{^} anstelle von @code{-} vor der Fingersatz-Zahl -zu benutzen. Hier das vorherigen Beispiel mit dieser Methode: - -@cindex Fingersatz-Beispiel - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -c_5 a_3 f_1 c'_5 -c^5 a^3 f^1 c'^5 -@end lilypond - -Die @code{direction}-Eigenschaft wirkt sich nicht auf -Akkorde aus, während die Präfixe @code{_} und @code{^} funktionieren. -Standardmäßig wird der Fingersatz automatisch entweder -über oder unter dem Akkord gesetzt: - -@cindex Fingersatz-Beispiel - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -@noindent -aber das kann manuell geändert werden, um einzelne Fingersatzanweisungen -nach oben oder unten zu zwingen: - -@cindex Fingersatz-Beispiel - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -Noch bessere Kontrolle über die Positionierung von Fingersatz für -einzelne Noten in einem Akkord ist mit dem -@code{\set fingeringOrientations}-Befehl möglich. Die Syntax -lautet: - -@example -@code{\set fingeringOrientations = #'([up] [left/right] [down])} -@end example - -@noindent -@code{\set}wird benutzt, weil @code{fingeringOrientations} eine -Eigenschaft des @code{Voice}-Kontextes ist, erstellt und eingesetzt -vom @code{New_fingering_engraver}. - -Die Eigenschaft kann als Wert eine Liste mit einem bis drei Einträgen -haben. Damit wird bestimmt, ob Fingersatz oberhalb gesetzt -werden kann (wenn @code{up} in der Liste auftaucht), darunter -(wenn@code{down} auftaucht), links (wenn @code{left} auftaucht) -oder rechts (wenn @code{right} auftaucht). Wenn andererseits -ein Wert nicht auftaucht, wir auch kein Fingersatz in dieser Richtung -gesetzt. LilyPond nimmt diese Beschränkung als Bedingung und -errechnet die besten Positionen für die Noten des nächsten Akkordes. -Die seitliche Positionierung kann nur auf einer Seite des Akkordes -geschehen, nicht auf beiden gleichzeitig, es kann also nur entweder -@code{left} oder @code{right} auftreten, nicth beide gleichzeitig. - -@warning{Damit eine einzelne Note mit diesem Befehl beeinflusst werden -kann, muss sie als ein @qq{Ein-Noten-Akkord} geschrieben -werden, indem einfache spitze Klammern um die Note positioniert -werden.} - -Hier ein paar Beispiele: - -@cindex Fingersatz-Beispiel -@cindex @code{\set}, Benutzungsbeispiel -@cindex fingerOrientations-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,relative=1] -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - -@noindent -Wenn die Fingersatzbezeichnung zu gedrungen aussieht, -kann auch die Schriftgröße (@code{font-size}) verringert -werden. Der Standardwert kann aus dem -@code{Fingering}-Objekt in der IR entnommen werden, -er ist @code{-5}, versuchen wir es also mit @code{-7}. - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\override Fingering #'font-size = #-7 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - - - -@node Outside-staff objects -@subsection Outside-staff objects - -Objekte außerhalb des Notensystems werden automatisch gesetzt, -um Kollisionen zu vermeiden. Objekten mit einem geringeren -Prioritätswert der Eigenschaft @code{outside-staff-priority} -werden näher an das System gesetzt, und andere Objekte außerhalb -des Systems werden dann soweit vom System entfernt gesetzt, dass -Zusammenstöße vermieden werden. Die -@code{outside-staff-priority}-Eigenschaft ist im -@code{grob-interface} definiert und ist also eine Eigenschaft -von allen Layout-Objekten. Standardmäßig ist sie für alle Objekte -auf falsch (@code{#f}) gesetzt; dieser Wert wird in einen numerischen -Wert dem Objekt entsprechend geändert, wenn das Objekt für die -Notenausgabe erstellt wird. Die Tabelle unten zeigt die -Standardwerte für die meistbenutzten @code{outside-staff}-Objekte, -die den Voreinstellungen nach im -@code{Staff}- oder @code{Voice}-Kontext gesetzt werden. - -@multitable @columnfractions .3 .3 .3 -@headitem Layout-Objekt - @tab Priorität - @tab Kontrolliert Position von: -@item @code{MultiMeasureRestText} - @tab @code{450} - @tab Text über Ganztaktpausen -@item @code{TextScript} - @tab @code{450} - @tab Textbeschriftung -@item @code{OttavaBracket} - @tab @code{400} - @tab Ottava (Oktavierungsklammern) -@item @code{TextSpanner} - @tab @code{350} - @tab Text-Strecker -@item @code{DynamicLineSpanner} - @tab @code{250} - @tab Alle Dynamik-Bezeichnungen -@item @code{VoltaBracketSpanner} - @tab @code{100} - @tab Volta-Klammern -@item @code{TrillSpanner} - @tab @code{50} - @tab Triller-Strecker -@end multitable - -Hier ein Beispiel, das die Standardpositionierung von einigen -Objekten zeigt. - -@cindex Text-Strecker -@cindex Text-Spanner -@funindex \startTextSpan -@funindex \stopTextSpan -@funindex startTextSpan -@funindex stopTextSpan -@cindex Ottava-Klammer -@cindex Oktavierungsklammer - -@cindex TextSpanner, Beispiel zur Veränderung -@cindex bound-details-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h. -Text mit Bindestrichen, der sich über eine bestimmte Länge -erstreckt. Der Strecker beginnt mit dem -@code{\startTextSpan}-Befehl und endet mit dem -@code{\stopTextSpan}-Befehl, und das Format des Textes -wird mit dem @code{\override TextSpanner}-Befehl bestimmt. -Mehr Einzelheiten siehe @ruser{Text spanners}. - -Im Beispiel wird auch gezeigt, wie Oktavierungsklammern -(Ottava) erstellt werden. - -@cindex Taktzahlposition verändern -@cindex Verändern der Taktzahlposition -@cindex Position der Taktzahl, verändern -@cindex Metronom-Bezeichnungsposition verändern -@cindex Verändern der Metronom-Bezeichnungsposition -@cindex Übungszeichenposition verändern -@cindex Verändern der Übungszeichenposition - -Beachten Sie, dass Taktnummern, Metronombezeichnungen -und Übungszeichen nicht gezeigt werden. Sie werden -standardmäßig im @code{Score}-(Partitur)-Kontext -erstellt und ihre @code{outside-staff-priority} wird -in Bezug auf die Layout-Objekte, die im @code{Staff}-Kontext -erstellt werden, ignoriert. Wenn Sie Taktnummern, -Metronombezeichnungen oder Übungszeichen entsprechend -ihrer Außersystem-Priorität setzen wollen, müssen Sie -die entsprechenden Engraver (@code{Bar_number_engraver}, -@code{Metronome_mark_engraver} oder @code{Mark_engraver}) -vom @code{Score}-Kontext entfernen und dem -@code{Staff}-Kontext hinzufügen. Wenn die Engraver so -geändert werden, erhalten sie folgenden Werte für -@code{outside-staff-priority}: - -@multitable @columnfractions .3 .3 -@headitem Layout-Objekt @tab Priorität -@item @code{RehearsalMark} @tab @code{1500} -@item @code{MetronomeMark} @tab @code{1000} -@item @code{BarNumber} @tab @code{ 100} -@end multitable - -Wenn die Standardwerte der @code{outside-staff-priority} nicht -die Positionierung hervorrufen, die Sie wünschen, kann die -Priorität eines jeden Objektes geändert werden. Als Beispiel -wollen wir zeigen, wie sich die Oktavierungsklammer unter -den Textstrecker des vorigen Beispiels setzen lässt. Wir müssen -nur die Priorität des -@code{OttavaBracket}-Objektes in der IR oder der Tabelle oben -herausfinden und einen kleineren Wert angeben als der Wert, den -das @code{TextSpanner}-(Strecker)-Objekt bekommt, wobei noch daran -zu denken ist, dass @code{OttavaBracket} im @code{Staff}-Kontext -erstellt wird: - -@cindex TextSpanner, Beispiel zur Veränderung -@cindex bound-details-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -%Place following Ottava Bracket below Text Spanners -\once \override Staff.OttavaBracket #'outside-staff-priority = #340 -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -@cindex Legatobögen und outside-staff-priority -@cindex Legatobögen und Artikulationszeichen -@cindex Artikulationszeichen und Legatobögen - -Legatobögen werden als Innersystem-Objekte klassifiziert, aber -sie erscheinen oft auch über dem System, wenn die Noten, an die -sie verbunden sind, sehr hoch im System notiert sind. Dadurch -können Außersystem-Objekte, wie Artikulationszeichen, zu hoch -gerückt werden. Die @code{avoid-slur}-Eigenschaft hat nur -eine Auswirkung, wenn auch die @code{outside-staff-priority} -auf @code{#f} gesetzt ist. Alternativ kann die -@code{outside-staff-priority} des Legatobogens auf einen -numerischen Wert gesetzt werden, sodass er mit anderen -Außersystem-Objekten anhand dieses Wertes gesetzt wird. -Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht: - -@lilypond[quote,verbatim,relative=2] -c4( c^\markup\tiny\sharp d4.) c8 -c4( -\once \override TextScript #'avoid-slur = #'inside -\once \override TextScript #'outside-staff-priority = ##f -c^\markup\tiny\sharp d4.) c8 -\once \override Slur #'outside-staff-priority = #500 -c4( c^\markup\tiny\sharp d4.) c8 -@end lilypond - -Eine Änderung der @code{outside-staff-priority} kann auch dazu -benutzt werden, die vertikale Plazierung von individuellen Objekten -zu kontrollieren, auch wenn das Ergebnis nicht immer optimal -ist. Im nächsten Beispiel soll @qq{Text3} oberhalb von @qq{Text4} -gesetzt werden, das Beispiel wurde behandelt in -@ref{Automatic behavior}. Der Wert der Priorität muss also für -die Eigenschaft @code{TextScript} entweder in der IR oder in der -Tabelle oben festgestellt werden und dann die Priorität für -@qq{Text3} höher eingestellt werden: - -@cindex TextScript, Beispiel zur Veränderung -@cindex outside-staff-priority-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -\once \override TextScript #'outside-staff-priority = #500 -c^"Text3" -c^"Text4" -@end lilypond - -Damit wird zwar @qq{Text3} ganz richtig über @qq{Text4} -platziert, aber auch über @qq{Text2}, und @qq{Text4} -wird jetzt weiter unten gesetzt. Eigentlich sollten ja alle -diese Anmerkungen gleichweit vom System entfernt sein. -Dazu muss offensichtlich horizontal etwas Platz gemacht -werden. Das kann erreicht werden mit dem -@code{textLengthOn}-(Textlänge an)-Befehl. - -@subheading \textLengthOn - -@cindex Noten, durch Text gespreizt -@funindex \textLengthOn -@funindex textLengthOn -@funindex \textLengthOff -@funindex textLengthOff - -Standardmäßig wird Text, der mit dem Beschriftungsbefehl -@code{\markup} bzw. Äquivalenten erstellt wird, kein -zusätzlicher Platz in Bezug auf die Positionierung der Noten -zugestanden. Der @code{\textLengthOn}-Befehl ändert -dieses Verhalten, so dass die Noten gespreizt werden, wenn -die Breite des Textes es erfordert: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\textLengthOn % Cause notes to space out to accommodate text -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl -rückgängig gemacht. Erinnern Sie sich, dass @code{\once} nur mit -@code{\override}, @code{\set}, @code{\revert} oder @code{unset} -funktioniert, der Befehl kann also nicht zusammen mit -@code{\textLengthOn} benutzt werden. - -@cindex Textbeschriftung, Vermeidung von Zusammenstößen -@cindex Zusammenstöße vermeiden mit Textbeschriftung - -Textbeschriftung vermeidet auch Noten, die über das System hinausstehen. -Wenn das nicht gewünscht ist, kann die automatische Verschiebung -nach oben hin auch vollständig ausgeschaltet werden, indem die -Priorität auf @code{#f} gesetzt wird. Hier ein Beispiel, wie -eine Textbeschriftung mit diesen Noten reagiert: - -@cindex Textbeschriftung, Beispiel zur Veränderung -@cindex outside-staff-priority-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -% This markup is short enough to fit without collision -c2^"Tex" -c''2 -R1 -% This is too long to fit, so it is displaced upwards -c,,2^"Text" -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -c,,2^"Long Text " -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\textLengthOn % and turn on textLengthOn -c,,2^"Long Text " % Spaces at end are honored -c''2 -@end lilypond - - -@subheading Dynamics - -@cindex Verändern der Positionierung von Dynamikzeichen -@cindex Dynamikzeichen: Positionierung verändern - -Dynamikbezeichnung wird üblicherweise unter dem System -gesetzt, kann aber auch nach oben mit dem Befehl -@code{dynamicUp} gezwungen werden. Die Bezeichnung -wird vertikal relativ zu der Note positioniert, an die sie angefügt -wurde. Sie wird vertikal variabel gesetzt in Bezug zu -Innersystemobjekten wie Bögen oder Taktnummern. Damit -können oft recht gute Resultate erreicht werden, wie im -folgenden Beispiel: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\clef "bass" -\key aes \major -\time 9/8 -\dynamicUp -bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | -ees,2.~\)\mf ees4 r8 | -@end lilypond - -Wenn aber Noten und Dynamikzeichen sehr dicht beieinander -stehen, positioniert die automatische Kollisionsvermeidung -später kommende Dynamikzeichen weiter weg, was allerdings -nicht immer die beste Möglichkeit ist, wie in dem folgenden, -etwas gewollten Beispiel zu sehen ist: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Wenn eine ähnliche Situation in @qq{echter} Musik auftaucht, -kann es nötig sein, die Noten etwas zu spreizen, damit die -Dynamikzeichen alle auf der selben vertikalen Position -gesetzt werden können. Dieses Verhalten war im Falle von -Textbeschriftungen möglich mit dem @code{\textLengthOn}-Befehl, -aber es gibt keinen entsprechenden Befehl für Dynamik. Wir -müssen also unsere eigenen Befehle mit @code{\override} -konstruieren. - - -@subheading Grob sizing - -@cindex Grob, Größenveränderung -@cindex Größenveränderung von grobs - -Zuallererst müssen wir lernen, wie die Größe von Grobs verändert -wird. Alle Grobs besitzen einen Referenzpunkt, der -benutzt wird, um ihre Position in Relation zu ihnen übergeordneten -Objekten zu bestimmen. Dieser Punkt innerhalb des Grobs wird dann -auf einer horizontalen Position (@code{X-offset}) und einer -vertikalen Position (@code{Y-offset}) ausgerichtet, immer bezüglich -des übergeordneten Objektes. Eine horizontale Strecke wird -durch ein Zahlenpaar angegeben (@code{X-extent}), welche -die linke und rechte Grenze relativ zum übergeordneten Objekt -bezeichnen. Die vertikale Strecke wir genauso durch ein -Zahlenpaar (@code{Y-extent}) definiert. Diese Eigenschaften -gehören zu allen Grobs, die das -@code{grob-interface} unterstützen. - -@cindex @code{extra-spacing-width} - -Standardmäßig haben Außersystemobjekte eine Länge von Null, -so dass sie sich in horizontaler Richtung überlappen können. Das -geschieht, indem dem linken Rand Unendlich zugewiesen wird -und dem rechten Rand minus Undendlich (der Code der -@code{extra-spacing-width}-(zusätzliche Positionierungslänge)-Eigenschaft -lautet: @code{'(+inf.0 . -inf.0)}). -Damit sich diese Objekte also horizontal nicht überschneiden, muss -der Wert von @code{extra-spacing-width} auf -@code{'(0 . 0)} gesetzt werden, sodass die wirkliche Länge eines -Objektes zur Geltung kommt. Mit diesem Befehl wird das für -Dynamik-Zeichen erledigt: - -@example -\override DynamicText #'extra-spacing-width = #'(0 . 0) -@end example - -@noindent -Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert: - -@cindex DynamicText, Beispiel zur Veränderung -@cindex extra-spacing-width-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -\override DynamicText #'extra-spacing-width = #'(0 . 0) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Damit werden die Dynamik-Zeichen also wirklich nebeneinander -gesetzt, aber es gibt noch zwei Probleme. Die Zeichen sollten -etwas weiter außeinander stehen und es wäre gut, wenn sie alle -den gleichen Abstand zum System hätte. Das erste Problem ist -einfach behoben. Anstatt der @code{extra-spacing-width}-Eigenschaft -Null zuzuweisen, können wir auch einen etwas größeren Wert -wählen. Die Einheit wird gemessen in dem Abstand zwischen zwei -Notenlinien, es scheint also gut, den rechten und linken -Rand eine halbe Einheit zu vergrößern: - -@cindex DynamicText, Beispiel zur Veränderung -@cindex extra-spacing-width-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 staff space -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Das sieht schon besser aus, aber es wäre noch besser, wenn die -Dynamik-Zeichen alle an einer Linie ausgerichtet wären, anstatt -höher und tiefer zu sitzen. Das kann mit der -@code{staff-padding}-Eigenschaft erreicht werden, -die wir uns im folgenden Abschnitt genauer anschauen werden. - - - -@node Collisions of objects -@section Collisions of objects - -@menu -* Moving objects:: -* Fixing overlapping notation:: -* Real music example:: -@end menu - -@node Moving objects -@subsection Moving objects - -@cindex Verschieben von überschneidenden Objekten -@cindex Verschieben von Zusammenstößen -@cindex Zusammenstöße vermeiden -@cindex Objekte, verschieben von Zusammestößen -@cindex Vermeiden von Zusammenstößen - -Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht -perfekt. Einige Notationselemente können sich überschneiden. Das -ist nicht schön, aber zum Glück sehr selten. Normalerweise müssen -die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben -werden -- sie könnten besser aussehen, wenn sie etwas zusätzlichen -Platz erhalten. - -Es gibt im Grunde drei Herangehensweisen, überlappende Notation -zu verbessern. Man sollte sie in der folgenden Reihenfolge -anwenden: - -@enumerate -@item -Die @strong{Richtung} eines der überlappenden Objekte kann -geändert werden, indem die vordefinierten Befehle für -Innersystemobjekte verwendet werden, wie beschrieben in -@ref{Within-staff objects}. Hälse, Bögen, Balken, Dynamik-Zeichen -und Triolen können auf diese Weise einfach umgeordnet -werden. Beschränkt ist diese Methode insofern, als es nur -zwei Möglichkeiten zur Veränderung gibt: oben oder unten. - -@item -Die @strong{Objekteigenschaft}, die LilyPond benutzt um die -Layout-Objekte zu platzieren, können mit dem -@code{\override}-Befehl positioniert werden. Die Vorteile -von Änderungen dieser Art sind a) dass einige Objekte -automatisch verschoben werden, wenn es nötig ist Platz zu -schaffen und b) ein einziges @code{\override} sich auf -alle Fälle eines Objekttyps bezieht. Zu diesen Eigenschaften -gehören: - -@itemize - -@item -@code{direction} (Richtung) - -Das wurde schon detailliert behandelt, siehe -@ref{Within-staff objects}. - -@item -@code{padding}, @code{left-padding}, -@code{right-padding}, @code{staff-padding} (Verschiebung) - -@cindex left-padding-Eigenschaft -@cindex Padding-Eigenschaft -@cindex right-padding-Eigenschaft -@cindex staff-padding-Eigenschaft -@cindex Verschieben (padding) -@cindex Füllung (padding) -@cindex padding (Füllung) - -Wenn ein Objekt platziert wird, bestimmt der Wert seiner -@code{padding}-(Füllungs)-Eigenschaft die Größe des -Abstandes, der zwischen dem Objekt selber und dem -Objekt, relativ zu welchem es positioniert wird, gelassen -werden muss. Dabei zählt der @code{padding}-Wert -des Objektes, das platziert werden soll, der @code{padding}-Wert -des Objektes, das schon gesetzt wurde, wird hingegegen -ignoriert. Abstände mit @code{padding} können zu -allen Objekten hinzugefügt werden, die das -@code{side-position-interface} unterstützen. - -Anstelle von @code{padding} wird die Position von -Versetzungszeichengruppen durch die Eigenschaften -@code{left-padding} und @code{right-padding} bestimmt. -Diese Eigenschaften werden im -@code{AccidentalPlacement}-(Versetzungszeichen-Positionierungs)-Objekt -gefunden, das sich innerhalb des @strong{Staff}-Kontexts -befindet. Während des Notensatzes werden die Notenköpfe -zuerst gesetzt und dann die Versetzungszeichen, wenn denn -welche gesetzt werden, durch die @code{right-padding}-Eigenschaft -auf die linke Seite der Notenköpfe positioniert, um die Entfernung -von den Notenköpfen zu bestimmen. Also nur die -@code{right-padding}-(Verschiebung nach rechts)-Eigenschaft des -@code{AccidentalPlacement}-Objekts hat Einfluss auf die -Positionierung der Versetzungszeichen. - -Die @code{staff-padding}-(Verschiebung zum System)-Eigenschaft -ist sehr ähnlich wie die @code{padding}-Eigenschaft: -@code{padding} bestimmt den Minimalabstand zwischen -einem Objekt, das das @code{side-position-interface} -unterstützt, und dem nächsten anderen Objekt (normalerweise -die Note oder Notenlinie); @code{staff-padding} dagegen -wirkt nur auf Objekte die immer außerhalb des Notensystems -sind -- damit wird der minimale Abstand bestimmt, der -zwischen dem Objekt und dem Notensystem gelassen werden -soll. @code{staff-padding} hat also @strong{keinen Einfluss} -auf Objekte, die relativ zu einer Note positioniert werden, sondern -nur auf solche, die zum System relativ stehen. Wenn es mit einem -anderen Objekt eingesetzt wird, erhält man keine Fehlermeldung, aber -der Befehl hat auch keine Auswirkungen. - -Um herauszufinden, welche @code{padding}-Eigenschaft für -das bestimmte Objekt nötig, ist, das Sie verschieben wollen, -müssen Sie in der IR nach den Objekt-Eigenschaften schauen. -Dabei sollten Sie bedenken, dass sich die @code{padding}-Eigenschaften -nicht unbedingt in dem Objekt selber befinden, schauen Sie -also auch in Objekten nach, die offensichtlich Ähnlichkeiten -haben. - -Alle @code{padding}-Werte werden in Notenlinienabständen -gemessen. Für die meisten Objekte ist der Wert ungefähr auf -1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt). -Der Wert kann geändert werden, wenn ein größerer (oder -kleinerer) Abstand gewünscht wird. - -@item -@code{self-alignment-X} (Selbstpositionierung) - -@cindex self-alignment-X-Eigenschaft -@cindex Selbstpositionierung von Objekten -@cindex Ausrichtung von Objekten - -Diese Eigenschaft kann benutzt werden, um ein Objekt -nach links, rechts oder zentriert an dem Referenzpunkt des Objekts -auszurichten, an das es verknüpft ist. Es kann bei allen -Objekten benutzt werden, die das @code{self-alignment-interface} -unterstützen. Das sind üblicherweise Objekte, die Text -enthalten. Die möglichen Werte der Eigenschaft sind @code{LEFT}, -@code{RIGHT} oder @code{CENTER}. Alternativ kann ein -numerischer Wert zwischen @code{-1} und @code{+1} -bestimmt werden: @code{-1} heißt linksbündig, @code{+1} -rechtsbündig und Zahlen dazwischen bewegen den Text -schrittweise von links nach rechts. Zahlen größer als -@code{1} können angegeben werdne, um den Text -noch weiter nach links zu bewegen, oder weniger als @code{-1}, -um ihn weiter nach rechts zu schieben. Eine Änderung -um @code{1} des Wertes entspricht einer Bewegung um -die halbe Textbreite. - -@item -@code{extra-spacing-width} (zusätzliche Breite) - -@cindex extra-spacing-width-Eigenschaft - -Diese Eigenschaft steht für alle Objekte zur Verfügung, die -das @code{item-interface} unterstützen. Es braucht zwei -Zahlen als Argument, die erste wird zur rechten Ausdehnung, -die zweite zur linken Ausdehnung hinzugerechnet. Negative -Zahlen verschieben die Ausdehnung nach rechts, positive nach -links, um also ein Objekt zu verbreitern, muss die erste -Zahl negativ und die zweite positiv sein. Allerdings beachten -nicht alle Objekte beide Zahlen. Das -@code{accidental}-(Versetzungszeichen)-Objekt etwa beachtet -nur erste Zahl für die linke Ausdehnung. - -@item -@code{staff-position} (Notensystempositionierung) - -@cindex staff-position-Eigenschaft - -@code{staff-position} ist eine Eigenschaft des -@code{staff-symbol-referencer-interface}, die von Objekten unterstützt -wird, die relativ zum Notensystem (engl. staff) positioniert werden. -Hiermit wird die vertikale Position eines Objekts relativ zur -Mittellinie des Systems in halben Notenlinienabständen angegeben. -Das ist sehr nützlich, um Zusammenstöße zwischen Layout-Objekten -wie Ganztaktpausen, Bögen und Noten in verschiedenen Stimmen -zu lösen. - -@item -@code{force-hshift} (vertikale Verschiebung erzwingen) - -@cindex force-hshift-Eigenschaft - -Eng beeinander stehende Noten in einem Akkord oder Noten, die zum -gleichen Zeitpunkt in unterschiedlichen Stimmen stehen, werden -in zwei oder manchmal auch mehr Kolumnen gesetzt, um Kollisionen -zu umgehen. Diese Kolumnen werden Notenkolumnen genannt; -ein @code{NoteColumn}-Objekt wird erstellt um die Noten in den -Kolumnen zu setzen. - -Die @code{force-hshift}-(erzwinge horizontale Verschiebung)-Eigenschaft -ist eine Eigenschaft von @code{NoteColumn} (bzw. vom -@code{note-column-interface}). Eine Veränderung dieser Eigenschaft -macht es möglich, eine Notenkolumne zu verschieben, dabei gilt als -Einheit die Breite einer Kolumne, also die Breite des Notenkopfes der -ersten Stimme. Diese Eigenschaft kann in Situationen benutzt werden, -in denen die normalen @code{\shiftOn}-Befehle (siehe auch -@ref{Explicitly instantiating voices}) das Problem nicht beseitigen. -Diese Eigenschaft ist besser in solchen Fällen zu verwenden als die -@code{extra-offset}-Eigenschaft, weil man die richtige Entfernung nicht -in Notenlinienabständen ausrechnen muss. Wenn eine Note in eine -Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere -Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen. - -@end itemize - -@item -Zu guter Letzt, wenn alles andere nicht funktioniert, können Objekte auch -manuell positioniert werden, entweder vertikal in Bezug auf die -Mittellinie des Systems, oder indem sie einen beliebigen Abstand weit -auf eine neue Position verschoben werden. Der Nachteil ist, dass die -richtigen Werte für eine gute Position manuell ausprobiert werden müssen, -meistens durch Herantasten an den richtigen Wert, und das für jedes -einzelne Objekt extra. Und weil diese Verschiebungen erst vorgenommen -werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als -Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt. -Am schwerwiegendsten ist aber die Tatsache, dass die -Verschiebungskoordinaten wahrscheinlich neu errechnent oder -ausprobiert werden müssen, wenn sich an den Noten und deren -Layout später irgend etwas ändert. Die Eigenschaften, die für diese -Arte der manuellen Verschiebung verwendet werden können, sind: - -@table @code -@item extra-offset (zusätzlicher Abstand) - -@cindex extra-offset-Eigenschaft - -Diese Eigenschaft gehört zu jedem Layout-Objekt, das das -@code{grob-interface} unterstützt. Sie braucht ein Zahlenpaar, -das die exakte Verschiebung in horizontaler und vertikaler Richtung -bezeichnet. Negative Zahlen verschieben das Objekt nach links oder -unten. Die Einheit sind Notenlinienabstände. Die zusätzliche -Positionierung wird vorgenommen, nachdem alle anderen Objekte -platziert sind, weshalb ein Objekt irgendwohin verschoben werden -kann, ohne den restlichen Satz zu beeinflussen. - -@item positions (Position) - -@cindex positions-Eigenschaft - -Diese Eigenschaft ist am sinnvollsten, um die Steigung und die -Höhe von Balken, Bögen und Triolenklammern anzupassen. -Sie braucht ein Zahlenpaar, das die Position des rechten und linken -Endes relativ zur Mittellinie des Notensystems bestimmt. Die -Einheit sind Notenlinienabstände. Bögen allerdings können nicht -beliebig weit weg positioniert werden. LilyPond erstellt zunächst eine -Liste an möglichen Positionen für den Bogen und findet normalerweise -die Version, die @qq{am besten aussieht}. Wenn die -@code{positions}-Eigenschaft verändert worden ist, wird der -Bogen aus der Liste gewählt, der der gewünschten Position am -nächsten kommt. -@end table - -@end enumerate - -Ein bestimmtes Objekt hat vielleicht nicht alle dieser Eigenschaften. -Darum ist es nötig, in der IR nachzuschlagen, welche Eigenschaften -ein bestimmtes Objekt unterstützt. - -Hier ist eine Liste an Objekten, die am wahrscheinlichsten an einer -Kollision beteiligt sind, daneben findet sich die Bezeichnung des -Objektes, mit der Sie es in der IR finden, um zu bestimmen, -welche Eigenschaften benutzt werden können, um es zu verschieben. - -@multitable @columnfractions .5 .5 -@headitem Objekttyp @tab Objektbezeichnung -@item Articulationszeichen @tab @code{Script} -@item Balken @tab @code{Beam} -@item Dynamikzeichen (vertikal) @tab @code{DynamicLineSpanner} -@item Dynamikzeichen (horizontal) @tab @code{DynamicText} -@item Fingersatz @tab @code{Fingering} -@item Übungs-/Textmarken @tab @code{RehearsalMark} -@item Legatobögen @tab @code{Slur} -@item Text z. B. @code{^"text"} @tab @code{TextScript} -@item Bindebögen @tab @code{Tie} -@item N-tolen @tab @code{TupletBracket} -@end multitable - - -@node Fixing overlapping notation -@subsection Fixing overlapping notation - -Hier soll nun gezeigt werden, wie die Eigenschaften, die im -vorigen Abschnitt vorgestellt wurden, bei der Problemlösung -mit sich überschneidenden Notationselementen eingesetzt -werden können. - -@subheading padding property - -@cindex padding (Verschiebungs-Eigenschaft) -@cindex Überschneidende Notation korrigieren -@cindex Korrigieren von überschneidender Notation - -Die @code{padding}-(Verschiebungs-)Eigenschaft kann benutzt -werden, um den Abstand zwischen Symbolen zu vergößern (oder -zu verkleinern), die über oder unter den Noten gesetzt werden. - -@cindex Script, Beispiel zur Veränderung -@cindex Verschiebungs-Eigenschaft, Beispiel -@cindex padding (Verschiebuns-Eigenschaft), Beispiel - -@lilypond[quote,fragment,relative=1,verbatim] -c2\fermata -\override Script #'padding = #3 -b2\fermata -@end lilypond - -@cindex MetronomMark, Beispiel zur Veränderung -@cindex Verschiebungs-Eigenschaft, Beispiel -@cindex padding (Verschiebuns-Eigenschaft), Beispiel - -@lilypond[quote,fragment,relative=1,verbatim] -% This will not work, see below: -\override MetronomeMark #'padding = #3 -\tempo 4=120 -c1 -% This works: -\override Score.MetronomeMark #'padding = #3 -\tempo 4=80 -d1 -@end lilypond - -Im zweiten Beispiel können Sie sehen, wie wichtig es ist den richtigen -Kontext anzugeben. Weil das @code{MetronomeMark}-Objekt -sich im @code{Score}-Kontext befindet, werden Eigenschaftsänderungen -im @code{Voice}-Kontext einfach ignoriert. Für mehr Einzelheiten siehe -@ruser{Modifying properties}. - -Wenn die @code{padding}-Eigenschaft eines Objektes erhöht wird, das -sich in einem Stapel von Objekten befindet, die nach ihrer -Außersystempriorität (@code{outside-staff-priority}) positioniert werden, -werden das Objekt und alle, die sich außerhalb davon befinden, -entsprechend verschoben. - -@subheading left-padding and right-padding - -@cindex left-padding-Eigenschaft (Verschiebung nach links) -@cindex Verschiebung nach rechts oder links -@cindex right-padding-Eigenschaft (Verschiebung nach rechts) - -Die @code{right-padding}-Eigenschaft wirkt sich auf den Abstand -zwischen einem Versetzungszeichen und der Note, auf das sie sich -bezieht, aus. Sie wird nicht sehr oft benötigt, aber das folgende -Beispiel zeigt eine Situation, wo man sie braucht. Das Beispiel -stellt eine Situation dar, in der in einem Akkord sowohl H als auch -B vorkommen sollen. Damit keine Ambiguität ensteht, sollen beide -Noten ein Zeichen haben, also ein B und ein Auflösungszeichen. -Hier einige Notationsversuche: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] - - - -@end lilypond - -@noindent -Keiner davon funktioniert, und der zweite und dritte weist -hässliche Zusammenstöße zwischen den Zeichen auf. - -Eine Möglichkeit, das Gewünschte zu erhalten, ist es den -Stencil des Versetzungszeichens zu ersetzen mit einer -Textbeschriftung (Markup), die sowohl das B als auch das -Aulösungszeichen enthält: - -@cindex Versetzungszeichen, Beispiel zur Veränderung -@cindex Accidental, Beispiel zur Veränderung -@cindex Text-Eigenschaft, Beispiel -@cindex stencil-Eigenschaft, Beispiel -@cindex AccidentalPlacement, Beispiel zur Veränderung -@cindex right-padding-Eigenschaft, Beispiel -@cindex Verschiebung nach rechts (rigth-padding), Beispiel - -@lilypond[quote,ragged-right,verbatim] -naturalplusflat = \markup { \natural \flat } -\relative c'' { - \once \override Accidental - #'stencil = #ly:text-interface::print - \once \override Accidental #'text = #naturalplusflat - \once \override Score.AccidentalPlacement #'right-padding = #1.5 - -} -@end lilypond - -@noindent -Dazu ist aber ein @code{\override}-Befehl für den Stencil des -Versetzungszeichens nötig, der bisher nicht behandelt wurde. -Der Typ des Stencils muss eine Prozedur sein, die hier geändert -wurde, um den Inhalt der @code{text}-Eigenschaft des -@code{Accidental} (Versetzungszeichen)-Objekts zu setzen, -die dann so definiert wird, dass sie ein Auflösungszeichen gefolgt -von einem B enthält. Diese werden dann mit @code{right-padding} -weiter nach rechts verschoben. - - -@subheading staff-padding property - -@cindex staff-padding-Eigenschaft -@cindex Objekte an der Grundlinie ausrichten -@cindex Ausrichten von Objekten an der Grundlinie - -@code{staff-padding} (Verschiebung zum Notensystem) kann -verwendet werden um Objekte wie Dynamikzeichen an einer -Grundlinie auf einer bestimmten Höhe über dem System -auszurichten, sodass sie nicht von der Position der Note abhängen, -an die sie angehängt sind. Diese Verschiebung ist keine Eigenschaft -von @code{DynamicText}, sondern von @code{DynamicLineSpanner}. -Das liegt daran, dass die Grundlinie sich gleicherweise auf -@strong{alle} Dynamikzeichen beziehen soll, also auch auf die, -die als Strecker erstellt wurden. Hier also die Lösung, die Dynamikzeichen -aus dem Beispiel des vorigen Abschnitts auszurichten: - -@cindex DynamikText, Beispiel zur Veränderung -@cindex extra-spacing-width-Eigenschaft, Beispiel -@cindex DynamicLineSpanner, Beispiel zur Veränderung -@cindex staff-padding-Eigenschaft, Beispiel - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 unit -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -% Align dynamics to a base line 2 units above staff -\override DynamicLineSpanner #'staff-padding = #2 -a4\f b\mf c\mp b\p -@end lilypond - - -@subheading self-alignment-X property - -@cindex self-alignment-X-Eigenschaft - -Das nächste Beispiel zeigt, wie man den Zusammenstoß -einer Fingersatzbezeichnung mit einem Notenhals -verhindern kann, indem die rechte Ecke an dem -Referenzpunkt der abhängigen Note angeordnet wird: - -@cindex StringNumber, Beispiel zur Veränderung - -@lilypond[quote,fragment,ragged-right,verbatim,relative=3] -\voiceOne -< a \2 > -\once \override StringNumber #'self-alignment-X = #RIGHT -< a \2 > -@end lilypond - - -@subheading staff-position property - -@cindex staff-position-Eigenschaft -@cindex Notensystem-Position-Eigenschaft -@cindex Kollision von Objekten im System -@cindex Zusammenstöße von Objekten im System - -Vieltaktpausen in einer Stimmen können mit Noten in anderen -Stimmen kollidieren. Da diese Pausen zentriert zwischen den -Taktlinien gesetzt werden, würde es für LilyPond eine recht große -Anstrengung bedeuten herauszufinden, welche Noten mit ihnen -zusammenstoßen könnten, denn alle Kollisionsvermeidung -für Noten und Pausen funktioniert nur für Noten bzw. Pausen, die -zur selben Zeit auftreten. Hier ein typisches Beispiel für eine -Kollision dieser Art: - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< {c c c c} \\ {R1} >> -@end lilypond - -Die beste Lösung ist es, die Ganztaktpause nach unten zu -schieben, denn die Pause ist in der zweiten Stimme. Per -Standardeinstellung für die zweite Stimme (@code{\voiceTwo}, -also die zweite Stimme in der -@code{<<@{...@} \\ @{...@}>>}-Konstruktion) wird die -Position auf dem System (@code{staff-position}) auf -4 -für @code{MultiMeasureRest}, in unserem Beispiel muss -es also bspw. auf die Position @code{-8} gesetzt werden, -d.h. vier halbe Notenlinienabstände weiter nach unten: - -@cindex MultiMeasureRest, Beispiel zur Veränderung -@cindex Ganztaktpausen, Beispiel zur Veränderung -@cindex staff-position-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< - {c c c c} -\\ - \override MultiMeasureRest #'staff-position = #-8 - {R1} ->> -@end lilypond - -Das ist besser, als etwa @code{extra-offset} zu benutzen, denn -in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt. - - -@subheading extra-offset property - -@cindex extra-offset-Eigenschaft -@cindex Zusätzlicher Abstand, Positionierung -@cindex Positionierung von Objekten -@cindex Objekte, Positionierung - -Die @code{extra-offset}-Eigenschaft bietet vollständige Kontrolle -über die Positionierung von Objekten in horizontaler und vertikaler -Richtung. - -Im Beispiel unten ist das zweite Fingersatzzeichen (@code{Fingering}) etwas nach -links und 1,8 Notenlinienabstände nach unten verschoben: - -@cindex Fingersatz, Beispiel zur Veränderung -@cindex extra-offset-Eigenschaft, Beispiel - -@lilypond[quote,fragment,relative=1,verbatim] -\stemUp -f-5 -\once \override Fingering - #'extra-offset = #'(-0.3 . -1.8) -f-5 -@end lilypond - - -@subheading positions property - -@cindex positions-Eigenschaft -@cindex Kontrolle über Triolen, Bögen und Balken manuell -@cindex manuelle Kontrolle über Triolen, Bögen, Balken -@cindex Balken, manuelle Kontrolle -@cindex Bögen, manuelle Kontrolle -@cindex Legatobögen, manuelle Kontrolle -@cindex Phrasierungsbögen, manuelle Kontrolle -@cindex Triollen-Klammer, manuelle Kontrolle - -Die @code{positions}-Eigenschaft erlaubt die Kontrolle von Position und -Steigung von Balken, Legato- und Phrasierungsbögen sowie Triolenklammern. -Hier ein Beispiel, in der ein unschöner Phrasierungsbogen auftritt, weil -er den Bogen des Vorschlags vermeidet: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 \acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -Man könnte einfach den Phrasierungsbogen oberhalb der Noten setzen, und -das wäre auch die beste Lösung: - -@cindex Phrasierungsbogen, Beispiel zur Veränderung -@cindex positions-Eigenschaft, Beispiel -@cindex Positionierung, Beispiel - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\phrasingSlurUp -\acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -aber wenn es einen Grund geben sollte, warum das nicht geht, könnte -man das linke Ende des Phrasierungsbogens etwas nach unten verschieben, -indem man die @code{positions}-Eigenschaft einsetzt. Damit -verschwindet auch die etwas unschöne Form: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\once \override PhrasingSlur #'positions = #'(-4 . -3) -\acciaccatura -e8\( d8 c ~c d c d\) -@end lilypond - -Hier noch ein weiteres Beispiel aus der Einleitung von Chopins -Prelude Op. 28 Nr. 2, das untere System. Wie zu sehen ist, -stößt der Balken mit den oberen Noten zusammen: - -@lilypond[quote,verbatim,fragment,ragged-right] -{ -\clef "bass" -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -} -@end lilypond - -@noindent -Das kann manuell gelöst werden, indem beide Enden des Balkens -von ihrer Position 2 Notenlinienabstände über der Mittellinie -hochgeschoben werden, etwa auf 3: - -@cindex Balken, Beispiel zur Veränderung -@cindex positions-Eigenschaft, Beispiel -@cindex Positionierung, Beispiel - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - \clef "bass" - << - \override Beam #'positions = #'(3 . 3) - {b,8 ais, b, g,} - \\ - {e, g e, g} - >> - << {b,8 ais, b, g,} \\ {e, g e, g} >> -} -@end lilypond - -@noindent -Hier ist zu beobachten, dass die Veränderung sich auch auf die -weiteren Achtelbalken der ersten Stimme auwirkt, während sie keine -Auswirkung auf die Balken der zweiten Stimme hat. - -@subheading force-hshift property - -@cindex force-hshift-Eigenschaft -@cindex Vertikale Verschiebung erzwingen - -@c FIXME: formatting stuff (ie not important right now IMO) -@c @a nchor Chopin finally corrected TODOgp - -An diesem Punkt können wir den letzten Feinschliff an unserem -Chopin-Beispiel vornhemen, das wir behandelt haben in -@ref{I'm hearing Voices}. Wir hatten es in folgende Form -gebracht: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - 2 - des2 - } - >> | - 1 | -} -@end lilypond - -@noindent -Die unteren zwei Noten des ersten Akkords (also diein der -dritten Stimme) sollten nicht aus der Notenkolumne der -oberen zwei Noten weggeschoben werden. Um das zu -korrigieren, setzen wir @code{force-hshift}, das eine -Eigenschaft von -@code{NoteColumn} ist, für diese Noten auf Null. -Die untere Note des zweiten Akkordes wird am besten -direkt rechts von den oberen Noten gesetzt. Das erreichen -wir, indem wir @code{force-hshift} für diese Note auf -0.5 setzen, also eine halbe Notenkopfbreite nach rechts von -der Kolumne der oberen Noten aus. - -Hier das Endergebnis: - -@cindex Notenkolumne, Beispiel zur Veränderung -@cindex force-hshift-Eigenschaft, Beispiel -@cindex vertikale Verschiebung, Beispiel - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - \once \override NoteColumn #'force-hshift = #0 2 - \once \override NoteColumn #'force-hshift = #0.5 des2 - } - >> | - 1 | -} -@end lilypond - - -@node Real music example -@subsection Real music example - -Das Kapitel zu Optimierungen soll mit einem komplizierten Beispiel -beendet werden, in dem verschiedene Optimierungen vorgenommen -werden müssen, bis das Ergebnis gut ausssieht. Das Beispiel wurde -ganz bewusst gewählt um die Benutzung der Notationsreferenz -zu zeigen, wenn ungewöhnliche Notationsprobleme gelöst werden -müssen. Es ist nicht repräsentativ für normale Notationsprojekte, -lassen Sie sich also nicht durch dieses Beispiel entmutigen! Zum -Glück sind Probleme wie die hier gezeigten nicht sehr häufig. - -Das Beispiel stammt aus Chopins Premiére Ballade, Op. 23, Takte -6--9, der Übergang vom Lento der Einleitung zum Moderato. -Hier zunächst der Satz, wie er aussehen soll, allerdings ohne -Dynamik, Fingersatz und Pedalbezeichnung, um das Beispiel nicht -zu kompliziert zu machen. - -@c This example should not be indexed -@lilypond[quote,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - bes2.^\markup {\bold "Moderato"} r8 - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Die erste Überlegung ist, dass das System für die rechte Hand -im dritten Takt vier Stimmen braucht. Das sind die fünf -Achtelnoten mit Balken, das übergebundene C, die Halbe D, die -mit der Achtel D verschmolzen ist, und die punktierte Viertel -Fis, die auch mit einer Achtelnote verschmolzen ist. Alles -andere ist eine einzige Stimme, es ist also am einfachsten, die -Stimmen nur zeitweise zu erstellen, wenn sie auftreten. Wenn -Sie vergessen haben, wie man das anstellt, schauen Sie sich -nochmal den Abschnitt @ref{I'm hearing Voices} an. Wir -wollen anfange, indem wir die Noten in zwei Variablen -notieren und dann die Systemstruktur in einer -@code{\score}-Umgebung erstellen. Das ist, was LilyPond -erstellt: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4. g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8 d fis bes a | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2. -} - -lhMusic = \relative c' { - r2 2 | - 1 | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Alle Noten sind richtig, aber die Positionierung sehr -verbesserungsbedürftig. Der Bindebogen stößt mit -der veränderten Taktart zusammen, die Balkung im -dritten Takt ist falsch, die Noten werden nicht -verschmolzen und einige Notationselemente fehlen ganz. -Behandeln wir zunächst die einfacheren Dinge. Der -Balken kann durch eine manuelle Begrenzung einfach -korrigiert werden, und auch der Legatobogen der linken -Hand und der Phrasierungsbogen der rechten Hand -sind schnell gesetzt, denn sie wurden schon in der -Übung erklärt. Damit haben wir folgendes Notenbild: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1) | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Der erste Takt stimmt jetzt schon. Der zweite Takt enthält ein -Arpeggio und wird mit einer doppelten Taktlinie beschlossen. -Wie können wir diese notieren, denn sie sind im Handbuch zum -Lernen nicht vorgekommen? Hier brauchen wir jetzt die -Notationsreferenz. Ein Blick in den Index zeigt uns die -Einträge für @qq{Arpeggio} und @qq{Taktlinien}: ein -Arpeggio also erstellt man mit dem Befehl @code{\arpeggio} -hinter einem Akkord und eine doppelte Taktlinie wird mit dem -Befehl @code{\bar "||"} erstellt. Das ist einfach. Als nächstes -muss der Zusammenstoß des Bindebogens mit der Taktartbezeichnung -gelöst werden. Das geht am besten, indem wir den Bogen nach -oben verschieben. Wie man Objekte verschiebt wurde schon -behandelt in @ref{Moving objects}, wo stand, dass Objekte -die -relativ zum System positioniert werden, verschoben werden -können, indem ihre @code{staff-position}-Eigenschaft -geändert wird, die in halben Notenlienienabständen relativ -zur Mittellinie angegeben wird. Dieser @code{\override}-Befehl -also, direkt vor die erste übergebundene Note gestellt, verschiebt -den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände -über die Mittellinie: - -@code{\once \override Tie #'staff-position = #3.5} - -Damit ist auch der zweite Takt vollständig: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -In Takt drei beginnt der Moderato-Abschnitt. In der -Übung wurde behandelt, wie man fetten Text mit dem -@code{\markup}-Befehl eingibt, es ist also einfach, das -@qq{Moderato} hinzuzufügen. Wie aber werden Noten -verschmolzen? Hier nehmen wir wieder die Notationsreferenz -zu Hilfe. Die Suche nach @qq{Verschmelzen} (engl. merge) -im Index führt uns zu den Befehlen um Noten mit -unterschiedlichen Köpfen und unterschiedlichen Punkten -zu verschmelzen in @ruser{Collision resolution}. In unserem -Beispiel müssen sowohl unterschiedliche Köpfe also auch -unterschiedliche Punktierung verschmolzen werden, wir -brauchen also die Befehle - -@example -\mergeDifferentlyHeadedOn -\mergeDifferentlyDottedOn -@end example - -@noindent -aus der Notationsreferenz, die wir an den Beginn unseres -Abschnittes stellen und - -@example -\mergeDifferentlyHeadedOff -\mergeDifferentlyDottedOff -@end example - -@noindent -um das Verhalten wieder auszuschalten. Das sieht so aus: - -@cindex Bindebogen, Beispiel zur Veränderung -@cindex staff-position-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Mit diesen Veränderungen wurden die beiden Fis-Noten -verschmolzen, aber nicht die zwei Ds. Warum nicht? Die -Antwort befindet sich im gleicher Abschnitt der Notationsreferenz: -Noten, die verschmolzen werden, müssen Hälse in entgegengesetzte -Richtungen aufweisen und zwei Noten können nicht verschmolzen -werden, wenn eine dritte Noten in der gleichen Kolumne -stört. In unserem Fall weisen beide Hälse nach oben und es -befindet sich zur gleichen Zeit auch noch eine dritte Note, das C. -Wie die Richtung von Hälsen geändert wird, wissen wir schon: -mit @code{\stemDown}, und in der Notationsreferenz findet -sich auch Information, wie das C verschoben werden kann: mit -dem @code{\shift}-Befehl. Aber welcher von ihnen? Das C -befindet sich in der zweiten Stimme, die @qq{shift off} hat, -die zwei Ds sind in den Stimmen eins und drei, die @qq{shift -off} bzw. @qq{shift on} haben. Das C muss also noch eine -Stufe weiter verschoben werden mit @code{\shiftOnn}, damit -es die Verschmelzung der Ds nicht stört. Das sieht jetzt so -aus: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - % Move the c2 out of the main note column so the merge will work - {c,8~ \shiftOnn c2 | } - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Fast schon geschafft. Nur noch ein Problem ist übrig: Der Hals nach -unten des verschmolzenen sollte nicht da sein, und das C sähe -besser auf der rechten Seite des Ds aus. Beides können wir mit den -gelernten Optimierungsmethoden erreichen. Den Hals machen -wir durchsichtig und das C verschieben wir mit der -@code{force-hshift}-Eigenschaft. Hier ist das Endergebnis: - -@cindex Notenkolumne, Beispiel zur Veränderung -@cindex force-hshift-Eigenschaft, Beispiel -@cindex Hals, Beispiel zur Veränderung -@cindex Notenhals, Beispiel zur Veränderung -@cindex transparent-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - - -@node Further tweaking -@section Further tweaking - -@menu -* Other uses for tweaks:: -* Using variables for tweaks:: -* Other sources of information:: -* Avoiding tweaks with slower processing:: -* Advanced tweaks with Scheme:: -@end menu - -@node Other uses for tweaks -@subsection Other uses for tweaks - -@cindex Transparente Objekte -@cindex Entfernen von Objekten -@cindex Verstecken von Objekten -@cindex Unsichtbare Objekte -@cindex transparent-Eigenschaft, Benutzung -@cindex Objekte unsichtbar machen -@cindex Objekte entfernen -@cindex Objekte verstecken -@cindex Noten zwischen Stimmen überbinden -@cindex Überbinden von Noten zwischen Stimmen - -@subheading Tying notes across voices - -Das nächste Beispiel zeigt, wie man Noten von verschiedenen -Stimmen miteinander verknüpfen kann, indem man Bindebögen -für Überbindungen benutzt. Normalerweise können nur zwei -Noten der gleichen Stimme übergebunden werden. Wenn -man zwei Stimmen benutzt, wobei die überbundenen Noten -sich in der selben befinden, - -@lilypond[quote,fragment,relative=2] -<< { b8~ b8\noBeam } -\\ { b[ g8] } ->> -@end lilypond - -@noindent -und dann den ersten Hals nach oben unsichtbar macht, -sieht es so aus, als ob die Überbindung zwischen -den Stimmen stattfindet: - -@cindex Hals, Beispiel zur Veränderung -@cindex Notenhals, Beispiel zur Veränderung -@cindex transparent-Eigenschaft, Beispiel - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -Um sicherzugehen, dass der unsichtbare Hals den Bindebogen -nicht zu sehr verkleinert, kann er verlängert werden, indem -seine Länge (@code{length}) auf den Wert @code{8} -gesetzt wird: - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - - -@subheading Simulating a fermata in MIDI - -@cindex stencil-Eigenschaft, Benutzung -@cindex Fermate, Benutzung in MIDI -@cindex MIDI: Fermate erstellen - -Für Objekte außerhalb des Notensystems ist es normalerweise -besser, die @code{stencil}-Eigenschaft anstelle der -@code{transparent}-Eigenschaft zu verändern, wenn man -sie vom fertigen Notensatz entfernen will. Indem die -@code{stencil}-Eigenschaft auf falsch (@code{#f}) gesetzt -wird, wird das entsprechende Objekt vollständig entfernt. -Das bedeutet, dass es die Positionierung der anderen Objekte -nicht beeinflusst. - -Auf diese Art kann etwa das Tempo geändert werden, damit -in der MIDI-Ausgabe eine Fermate zu hören ist, ohne dass -im Notensatz etwas von diesen Tempoänderungen zu sehen -ist. Die Metronombezeichnung soll auch nicht die Position -von Text an der gleichen Stelle oder die Abstände zwischen -zwei Systemen beeinflussen. Darum ist es am besten, -@code{stencil} auf @code{#f} zu setzen. Im Beispiel wird -der Unterschied zwischen einem unsichtbaren Objekt und -einem entfernten Objekt gezeigt: - -@cindex Metronom-Bezeichnung, Beispiel zur Veränderung -@cindex transparent-Eigenschaft, Beispiel - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'transparent = ##t - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'stencil = ##f - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@noindent -Mit beiden Methoden wird die Tempobezeichnung entfernt, mit -der die Fermate verlängert wird, und beide beeinflussen die -MIDI-Ausgabe wie gewünscht. Die unsichtbare Metronombezeichnung -schiebt aber die folgende Bezeichnung in die Höhe, während -das im zweiten Beispiel, in dem der @code{stencil} entfernt -wurde, nicht passiert. - - -@node Using variables for tweaks -@subsection Using variables for tweaks - -@cindex Variablen, Benutzung zur Optimierung -@cindex Optimierung mit Variablen - -@code{\override}-Befehle sind oft lang und mühsam zu -tippen, und sie müssen immer absolut richtig sein. Wenn -derselbe Befehl mehrere Male benutzt werden muss, lohnt -es sich oft schon, eine Variable zu definieren, in der er -sich befindet. - -Als Beispiel sollen einige Worte im -Gesangstext fett und kursiv hervorgehoben werden. -Die Befehle @code{\italic} und @code{\bold} funktionieren -im Gesangstext-Kontext nur, wenn sie gleichzeitig mit den Wörtern, -auf die sie angewendet werden sollen, zusätzlich -in eine @code{\markup}-Umgebung eingeschlossen -werden. Durch diese Einbettung können einzelne Wörter nicht -einfach zu einer Variable umgeformt werden. Als -Alternative versuchen wir, einen Befehl mit -@code{\override} und @code{\revert} zu konstruieren. - -@example -@code{\override Lyrics . LyricText #'font-shape = #'italic} -@code{\override Lyrics . LyricText #'font-series = #'bold} - -@code{\revert Lyrics . LyricText #'font-shape} -@code{\revert Lyrics . LyricText #'font-series} -@end example - -Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine -Hervorhebung benötigen. Anstelle dieser Befehlsketten @emph{können} -wir jedoch zwei Variablen definieren. Mit ihnen und dem entsprechenden -Wort in geschweiften Klammern erreichen wir den gewünschten Effekt. -Ein weiterer Vorteil ist, dass in diesem Fall die Leerzeichn um die -Punkte herum nicht benötigt werden, weil sie nicht innerhalb des -@code{lyricmode}-Kontextes interpretiert werden. Hier ein Beispiel; -die Bezeichnungen können natürlich auch kürzer sein, -um noch weniger schreiben zu müssen: - -@cindex LyricText, Beispiel zur Veränderung -@cindex Gesangstext, Beispiel zur Veränderung -@cindex font-shape-Eigenschaft, Beispiel -@cindex font-series-Eigenschaft, Beispiel - -@lilypond[quote,verbatim] -emphasize = { - \override Lyrics.LyricText #'font-shape = #'italic - \override Lyrics.LyricText #'font-series = #'bold -} -normal = { - \revert Lyrics.LyricText #'font-shape - \revert Lyrics.LyricText #'font-series -} - -global = { \time 4/4 \partial 4 \key c \major} -SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyrics { E -- | ter -- nal \emphasize Fa -- ther, \normal | strong to save, } -VerseTwo = \lyricmode { O | \emphasize Christ, \normal whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, \normal | who didst brood } -VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Soprano" { \VerseOne } - \new Lyrics \lyricsto "Soprano" { \VerseTwo } - \new Lyrics \lyricsto "Soprano" { \VerseThree } - \new Lyrics \lyricsto "Soprano" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - - -@node Other sources of information -@subsection Other sources of information - -Die Programmreferenz enthält sehr viel Information über LilyPond, aber -noch mehr Information findet sich in den internen -LilyPond-Dateien. Um sie erforschen zu können, müssen Sie erst -das richtige Verzeichnis auf Ihrem System finden. Die Position -hängt a) davon ab, ob Ihre LilyPond-Installation mit der vorkompilierten -Version von der LilyPond-Internetseite vorgenommen wurde oder Sie -die Version durch Ihren Paketmanager installiert haben (also -z. B. in einer Linux-Distribution oder unter fink oder cygwin -installiert), und b) auf welchem Betriebssystem Sie das Programm -benutzen: - -@strong{Von lilypond.org heruntergeladen} - -@itemize @bullet -@item Linux - -Wechseln Sie in das Verzeichnis -@file{@var{INSTALL_VERZ}/lilypond/usr/share/lilypond/current/} - -@item MacOS X - -Wechseln Sie in das Verzeichnis -@file{@var{INSTALL_VERZ}/LilyPond.app/Contents/Resources/share/lilypond/current/} -indem Sie entweder mit dem Befehl @code{cd} vom Terminal aus -in das Verzeichnis wechseln, oder mit Control-Klick auf das -LilyPond-Programmsymbol gehen und @qq{Show Package Contents} -auswählen. - -@item Windows - -Wechseln Sie mit dem Windows Explorer ins Verzeichnis -@file{@var{INSTALL_VERZ}/LilyPond/usr/share/lilypond/current/} - -@end itemize - -@strong{Mit einem Paket-Manager installiert oder selber aus -den Quellen kompiliert} - -Wechseln Sie in das Verzeichnis -@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, wobei -@var{PREFIX} bei Ihrem Paket-Manager oder dem -@code{configure}-Skript gesetzt wird, und @var{X.Y.Z} -die LilyPond-Versionsnummer. - -@smallspace - -In diesem Ordner sind die zwei interessanten Unterordner: - -@itemize -@item @file{ly/} - beinhaltet Dateien im LilyPond-Format -@item @file{scm/} - beinhaltet Dateien im Scheme-Format -@end itemize - -Schauen wir uns zuerst einige Dateien in @file{ly/} an. -Öffnen Sie @file{ly/property-init.ly} in einem Texteditor. -Der, den Sie normalerweise für @code{.ly}-Dateien benutzen, -genügt. Diese Datei enthält die Definitionen aller vordefinierten -Befehle für LilyPond, wie etwa @code{\stemUp} und -@code{\slurDotted}. Sie können sehen, dass es sich um -nichts mehr handelt als Definitionen von Variablen, die eine -oder mehrere @code{\override}-Befehle enthalten. Der -Befehl @code{/tieDotted} etwa wird folgendermaßen definiert: - -@example -tieDotted = @{ - \override Tie #'dash-period = #0.75 - \override Tie #'dash-fraction = #0.1 -@} -@end example - -Wenn Sie diese Voreinstellungen der vordefinierten Befehl nicht -mögen, können Sie sie ganz einfach umdefinieren, genauso wie -jede andere Variable auch, indem Sie sie an den Anfang Ihrer -Quelldatei schreiben. - -Hier sind die wichtisgsten Dateien, die sich im Ordner -@file{ly/} befinden: - -@multitable @columnfractions .4 .6 -@headitem Dateiname - @tab Inhalt -@item @file{ly/engraver-init.ly} - @tab Definitionen von Engraver-Kontexten -@item @file{ly/paper-defaults-init.ly} - @tab Spezifikationen von Voreinstellungen für Papiermaße -@item @file{ly/performer-init.ly} - @tab Definitionen von Performer-Kontexten -@item @file{ly/property-init.ly} - @tab Definitionen aller vordefinierten Befehle -@item @file{ly/spanner-init.ly} - @tab Definitionen aller vordefinierten Strecker-Befehle -@end multitable - -Andere Einstellungen (wie die Definitionen von Beschriftungsbefehlen) -sind in @code{.scm}-(Scheme)-Dateien gespeichert. Die -Scheme-Programmiersprache wird benutzt, um eine -programmierbare Schnittstelle zu den internen Operationen von -LilyPond zu haben. Eine weitere Erklärung dieser Dateien ist -im Moment außerhalb des Rahmens dieses Handbuchs, denn -sie erfordern einige Kenntnis der Scheme-Sprache. Die Warnung -ist hier angebracht, dass des ein gutes technisches Verständnis -oder sehr viel Zeit braucht, um Scheme und diese -Dateien zu verstehen (siehe auch @ref{Scheme tutorial}). - -Wenn Sie sich mit Scheme auskennen, sind hier mögliche -interessante Dateien: - -@multitable @columnfractions .4 .6 -@headitem Dateiname - @tab Inhalt -@item @file{scm/auto-beam.scm} - @tab Sub-Balken-Voreinstellungen -@item @file{scm/define-grobs.scm} - @tab Voreinstellungen für Grob-Eigenschaften -@item @file{scm/define-markup-commands.scm} - @tab Definition aller Markup-Beschriftungsbefehle -@item @file{scm/midi.scm} - @tab Voreinstellung für die MIDI-Ausgabe -@item @file{scm/output-lib.scm} - @tab Einstellungen mit Einfluss auf die Darstellung von Bunddiagrammen, Farben, Versetzungszeichen, Taktlinien usw. -@item @file{scm/parser-clef.scm} - @tab Definitionen der unterstützten Schlüssel -@item @file{scm/script.scm} - @tab Voreinstellungen for Artikulationszeichen -@end multitable - - -@node Avoiding tweaks with slower processing -@subsection Avoiding tweaks with slower processing - -LilyPond kann einige zusätzliche Tests durchführen, während -die Noten gesetzt werden. Dadurch braucht das Programm länger, -um den Notensatz zu produzieren, aber üblicherweise werden -weniger nachträgliche Anpassungen nötig sein. Wenn eine -Textsilbe oder eine Beschriftung aus dem Rand der Partitur -ragt, wird durch diese Tests die Zeile gerade so weit komprimiert, -dass sie sich innerhalb der Ränder befindet. - -@example -\new Score \with @{ - % Um sicher zu gehen, dass Texte und Liedtext - % innerhalb der Papierränder bleiben - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t -@} @{ - ... -@} -@end example - - -@node Advanced tweaks with Scheme -@subsection Advanced tweaks with Scheme - -Auch wenn viele Sachen mit @code{\override} und @code{\tweak} -möglich sind, gibt es eine sehr viel mächtigere Möglichkeit, die -Arbeitsweise von LilyPond mit Hilfe der programmierbaren Schnittstelle -zu beeinflussen. Code, der in der Scheme-Programmiersprache -geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond -eingefügt werden. Natürlich brauchen Sie dazu wenigstens ein -grundlegendes Verständnis von Scheme. Eine Einleitung finden -Sie in der @ref{Scheme tutorial}. - -Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine -Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine -Scheme-Prozedur gesetzt werden kann, die dann jedes Mal -aufgerufen wird, wenn die Eigenschaft von LilyPond benutzt -wird. Die Eigenschaft kann damit dynamisch auf einen Wert -gesetzt werden, der durch die Prozedur jedes Mal neu bestimmt -wird. In diesem Beispiel wird die Farbe der Notenköpfe entsprechend -zu ihrer Position innerhalb der Tonleiter gesetzt. - -@cindex x11-Farben, Beispiel zur Benutzung -@cindex Notenkopf, Beispiel zur Veränderung -@cindex Farb-Eigenschaft, in Scheme-Prozedur gesetzt - -@lilypond[quote,verbatim,ragged-right] -#(define (color-notehead grob) - "Color the notehead according to its position on the staff." - (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) - (case mod-position - ;; Return rainbow colors - ((1) (x11-color 'red )) ; for C - ((2) (x11-color 'orange )) ; for D - ((3) (x11-color 'yellow )) ; for E - ((4) (x11-color 'green )) ; for F - ((5) (x11-color 'blue )) ; for G - ((6) (x11-color 'purple )) ; for A - ((0) (x11-color 'violet )) ; for B - ) - ) -) - -\relative c' { - % Arrange to obtain color from color-notehead procedure - \override NoteHead #'color = #color-notehead - c2 c' | - b4 g8 a b4 c | - c,2 a' | - g1 | -} -\addlyrics { - Some -- where o -- ver the Rain -- bow, way up high, -} -@end lilypond - -Weiter Beispiele, die die Benutzung dieser programmierbaren -Schnittstelle zeigen, finden sich in @ref{Tweaking with Scheme}. diff --git a/Documentation/de/user/unfretted-strings.itely b/Documentation/de/user/unfretted-strings.itely deleted file mode 100644 index f3b3ca33cc..0000000000 --- a/Documentation/de/user/unfretted-strings.itely +++ /dev/null @@ -1,194 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Unfretted string instruments -@section Unfretted string instruments - -@lilypondfile[quote] -{unfretted-headword.ly} - -@cindex Streicher -@cindex Orcherster, Streicher -@cindex Notation für Streicher - -Dieser Abschnitt stellt Information und Referenzen zur Verfügung, die -beim Setzen von Noten für Saiteninstrumente ohne Bund herangezogen -werden können. - -@menu -* Common notation for unfretted strings:: -@end menu - -@node Common notation for unfretted strings -@subsection Common notation for unfretted strings - -Es gibt wenige Spezifikat für die Notation von Saiteninstrumenten ohne -Bund. Die Noten werden auf einem System notiert und meistens ist auch nur -eine Stimme erforderlich. Zwei Stimmen können für Doppelgriff- oder -Divisi-Stellen erforderlich sein. - -@menu -* References for unfretted strings:: -* Bowing indications:: -* Harmonics:: -* Snap (Bartok) pizzicato:: -@end menu - -@node References for unfretted strings -@unnumberedsubsubsec References for unfretted strings - -Die meisten Notationseigenschaften, die für Orchersterstreicher eingesetzt -werden, sind an anderer Stelle beschrieben: - -@itemize - -@item Textanweisungen wie @qq{pizz.} oder @qq{arco} werden als einfacher -Text eingefügt, siehe @ref{Text scripts}. - -@item Fingersatz, auch das Zeichen für den Daumen, ist erklärt in -@ref{Fingering instructions}. - -@item Doppelgriffe werden normalerweise als Akkord notiert, siehe hierzu -@ref{Chorded notes}. Anweisungen, wie Akkorde gespielt werden sollen, können -auch hinzugefügt werden, siehe @ref{Arpeggio}. - -@item Eine Vorlage für Streichquartett findet sich in -@rlearning{String quartet}. Andere sind als Schnipsel zur Verfügung -gestellt. - -@end itemize - -@seealso -Handbuch zum Lernen: -@rlearning{String quartet}. - -Notationsreferenz: -@ref{Text scripts}, -@ref{Fingering instructions}, -@ref{Chorded notes}, -@ref{Arpeggio}. - -Schnipsel: -@rlsr{Unfretted strings}. - -@node Bowing indications -@unnumberedsubsubsec Bowing indications - -@funindex \upbow -@funindex \downbow -@funindex \open - -@cindex Bogen, Anzeige -@cindex Streicher, Bogenanzeige -@cindex Offene Saite, anzeigen -@cindex Saite, offen - -Hinweise zur Bogenfügung können als Artikulationen erstellt werden, wie -beschrieben in -@ref{Articulations and ornamentations}. - -Die Befehle @code{\upbow} und @code{\downbow} werden mit Legatobögen -in folgender Weise eingesetzt: - -@lilypond[verbatim,quote,relative=2] -c4(\downbow d) e(\upbow f) -@end lilypond - -@noindent -und das nächste Beispiel zeigt drei Arten, eine offene A-Saite auf der -Geige anzuzeigen: - -@lilypond[verbatim,quote,relative=2] -a4 \open -a^\markup { \teeny "II" } -a2^\markup { \small "sul A" } -@end lilypond - -@predefined -@code{\downbow}, -@code{\upbow}, -@code{\open}. -@endpredefined - -@seealso -Notation Reference: -@ref{Articulations and ornamentations}, -@ref{Slurs}. - - -@node Harmonics -@unnumberedsubsubsec Harmonics - -@strong{@i{Natürliches Flageolett}} - -@cindex Flageolett -@funindex \harmonic -@funindex harmonic - -Flageolett-Töne können auf verschiedene Arten notiert werden. -Üblicherweise werden sie mit einem Rautenkopf notiert, wenn -ein Ton angezeigt werde, bei dem die Saite berührt wird, wo sie -sonst abgegriffen würde. - -@warning{Flageolett-Töne @strong{müssem} innerhalb von Akkorden -definiert werden, auch wenn nur eine einzelne Note vorhanden ist.} - -@lilypond[verbatim,quote,relative=2] -4 2. -\set harmonicDots = ##t -4 2. -@end lilypond - -Alternativ kann auch eine normale Noten die Tonhöhe anzeigen, die -erklingen soll, wobei ein kleiner Kreis angibt, dass es sich um -einen Flageolett-Ton handelt: - -@lilypond[verbatim,quote,relative=2] -d2^\flageolet d_\flageolet -@end lilypond - - -@strong{@i{Künstliches Flageolett}} - -@cindex künstliches Flageolett -@cindex Flageolett, künstliches - -Künstliche Flageoletttöne werden mit zwei Noten notiert, von denen -einen einen normalen Notenkopf besitzt und die Griffposition des -Fingers angibt, während die andere in Rautenform die Position des -leicht aufgesetzten Fingers anzeigt. - -@lilypond[verbatim,quote,relative=1] -2 -@end lilypond - -@seealso -Glossar: -@rglos{harmonics}. - -Notationsreferenz: -@ref{Special note heads}, -@ref{References for unfretted strings}. - - - -@node Snap (Bartok) pizzicato -@unnumberedsubsubsec Snap (Bartok) pizzicato - -@cindex Pizzicato, Bartók -@cindex Pizzicato, Knall- -@cindex Bartók-Pizzicato -@cindex Knall-Pizzicato - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{snap-pizzicato-markup-bartok-pizzicato.ly} diff --git a/Documentation/de/user/vocal.itely b/Documentation/de/user/vocal.itely deleted file mode 100644 index eda4095bac..0000000000 --- a/Documentation/de/user/vocal.itely +++ /dev/null @@ -1,1361 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Vocal music -@section Vocal music - -@c TODO: inspirational headword - -Dieser Abschnitt erklärt, wie Vokalmusik gesetzt werden kann und -die Silben von Gesangstext an den Noten ausgerichtet werden. - -@menu -* Common notation for vocal music:: -* Entering lyrics:: -* Aligning lyrics to a melody:: -* Specific uses of lyrics:: -* Stanzas:: -@end menu - - -@node Common notation for vocal music -@subsection Common notation for vocal music - -Dieser Abschnitt behandelt allgemeine Fragen der Notation -von Vokalmusik und einige spezifische Vokalmusikstile. - -@menu -* References for vocal music and lyrics:: -* Opera:: -* Song books:: -* Spoken music:: -* Chants:: -* Ancient vocal music:: -@end menu - - -@node References for vocal music and lyrics -@unnumberedsubsubsec References for vocal music and lyrics - -@c TODO: split this section in two parts? -vv - -Viele Probleme können auftreten, wenn man Vokalmusik setzt. Einige -davon werden in diesem Abschnitt behandelt, während weitere sich -in anderen Abschnitten befinden: - -@itemize -@item -Die meisten Vokalmusikstile benutzen Text für den Gesangstext. Eine -Einleitung hierzu findet sich in @rlearning{Setting simple songs}. - -@item -Vokalmusik braucht oft die Benutzung von Textbeschriftung (dem -@code{markup}-Modus) für den Gesangstext oder andere Textelemente -(Namen von Figuren usw.). Die entsprechende Syntax ist beschrieben in -@ref{Text markup introduction}. - -@item -Liedblätter können erstellt werden, indem eine Gesangsstimme mit Akkorden -kombiniert wird, Einzelheiten finden sich in @ref{Chord notation}. - -@item -@q{Ambitus} können zu Beginn der Stimmen hinzugefügt werden, dies findet -sich erklärt in -@ref{Ambitus}. - -@item -Gesangsstimmen können auch mit traditionellen Schlüsseln gesetzt werden, -siehe @ref{Clef}. - -@item -Alte Vokalmusik ist unterstützt, Einzelheiten hierzu in @ref{Ancient notation}. -@end itemize - - -@node Opera -@unnumberedsubsubsec Opera - -@c TODO -TBC - -@c add characters names snippet -vv - - -@node Song books -@unnumberedsubsubsec Song books - -@c TODO -TBC - -@snippets -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - -@seealso -Notationsreferenz: -@ref{Chord notation}. - - -@node Spoken music -@unnumberedsubsubsec Spoken music - -@cindex Parlato -@cindex Sprechgesang - -Effekte wie @qq{Parlato} bzw. @qq{Sprechgesang} erfordern, dass die Noten -ohne Tonhöhe, aber mit dem notierten Rhythmus gesprochen werden. Solche -Noten werden mit einem Kreuz als Notenkopf notiert, siehe hierzu -@ref{Special note heads}. - -@c TODO add "marking-notes-on-spoken-parts" snippet -vv -@c add "showing the rhythm of a melody" snip -@c add "one staff-line notation" -@c add "improvisation" ref -@c add "lyrics independents of notes" ref - - -@node Chants -@unnumberedsubsubsec Chants - -@c TODO Add text from lsr and -user -TBC - - -@node Ancient vocal music -@unnumberedsubsubsec Ancient vocal music - -@c TODO -TBC - -@c Add "Printing both the ancient and the modern clef in vocal music" snippet, -@c and "Transcription of Ancient music with incipit" snippet. -vv - -@seealso -Notationsreferenz: -@ref{Ancient notation}. - - -@node Entering lyrics -@subsection Entering lyrics - -@c TODO add one sentence here. -vv - -@menu -* Lyrics explained:: -* Setting simple songs:: -* Working with lyrics and variables:: -@end menu - - -@node Lyrics explained -@unnumberedsubsubsec Lyrics explained - -@cindex Gesangstext -@funindex \lyricmode -@cindex Satzzeichen -@cindex Leerzeichen, Gesangstext -@cindex Anführungszeichen, Gesangstext - -LilyPond-Eingabedateien sind einfache Textdateien, in denen -Text verwendet wird, um Notationssymbole darzustellen. Für -die Notation von Gesangstext muss also sichergestellt sein, -dass ein Buchstabe, etwa@tie{}@code{d}, nicht als Note, sondern -als Buchstabe @qq{d} interpretiert wird. Darum gibt es einen -besonderen Modus, in dem Gesangstext geschreiben werden kann, -den @qq{Lyric}-Modus (engl. lyrics = Gesangstext). - -Der Gesangstextmodus kann mit der Umgebung @code{\lyricmode} -spezifiziert werden, oder indem @code{\addlyrics} bzw. -@code{\lyricsto} eingesetzt wird. In diesem Modus kann -Text mit Akzenten und Satzzeichen notiert werden, und das -Programm geht davon aus, dass es sich auch um Text handelt. -Silben werden wie Noten notiert, indem ihnen ihre Dauer -angehängt wird: - -@example -\lyricmode @{ Twin-4 kle4 twin- kle litt- le star2 @} -@end example - -Es gibt zwei generelle Methoden, die horizontale Orientierung der -Textsilben zu spezifizieren, entweder indem ihre Dauer angegeben wird, -wie oben in dem Beispiel, oder indem die Silben automatisch an den -Noten ausgerichtet werden. Dazu muss entweder @code{\addlyrics} -oder @code{\lyricsto} eingesetzt werden. -@c TODO: broken -@c For more details see @ref{The Lyrics context}. - -Ein Wort oder eine Silbe beginnt mit einem alphabetischen Zeichen und -endet mit einem Leerzeichen oder einer Zahl. Die folgenden Zeichen -können beliebig sein, außer Leerzeichen und Zahlen. - -Jedes Zeichen, das nicht Leerzeichen noch Zahl ist, wird als Bestandteil -der Silbe angesehen. Eine Silbe kann also auch mit @code{@}} enden, -was oft zu dem Fehler - -@example -\lyricmode @{ lah- lah@} -@end example - -@noindent -führen kann. Hier wird @code{@}} als Teil der letzten Silbe gerechnet, so -dass die öffnende Klammer keine schließende Klammer hat und die Eingabedatei -nicht funktioniert. - - -@funindex \property in \lyricmode - -@noindent -Auch ein Punkt, der auf eine Silbe folgt, wird in die Silbe inkorporiert. -Infolgedessen müssen auch um Eigenschaftsbezeichnungen Leerzeichen gesetzt -werden. Ein Befehl heißt also @emph{nicht}: - -@example -\override Score.LyricText #'font-shape = #'italic -@end example - -@noindent -sondern - -@example -\override Score . LyricText #'font-shape = #'italic -@end example - -@funindex _ -@cindex Leerzeichen, Gesangstext -@cindex Bindestriche, Gesangstext -@cindex Gedanktenstriche, Gesangstext - -Um mehr als eine Silbe einer einzelnen Note zuzuweisen, kann -man die Silben mit geraden Anführungszeichen umgeben (Shift+2) -oder einen Unterstrich (@code{_}) benutzen, um Leerzeichen -zwischen die Silben zu setzen, bzw. die Tilde (@code{~}) -einsetzen, um einen Bindebogen zu erhalten. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - -@noindent -Dieser Bindebogen ist definiert als das Unicode-Zeichen -@code{U+203F}; es muss deshalb sichergestellt werden, -dass eine Schriftart benutzt wird (wie etwa DejaVuLGC), -die dieses Zeichen enthält. Mehr Information zur -Schriftartauswahl findet sich in @ref{Fonts}. - -Um Gesangstext mit Akzenten, Umlauten, besonderen Zeichen -oder anderen Alphabeten -zu setzen, müssen diese Zeichen direkt in den Text geschrieben -werden und die Datei als UTF-8 gespeichert werden. Für weitere -Information siehe @ref{Text encoding}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { e4 f e d e f e2 } -\addlyrics { He said: “Let my peo ple go”. } -@end lilypond - -Um gerade Anführungszeichen im Gesangstext zu verwenden, müssen -sie mit einem Backslash markiert werden, beispielsweise: - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } -\addlyrics { "\"I" am so lone- "ly\"" said she } -@end lilypond - -Die vollständige Definition eines Wortanfangs im Gesangstextmodus -ist jedoch etwas komplizierter. - -Eine Silbe im Gesangstextmodus beginnt mit: einem alphabetischen Zeichen, -@code{_}, @code{?}, @code{!}, @code{:}, @code{'}, den Kontrollzeichen @code{^A} -bis @code{^F}, @code{^Q} bis @code{^W}, @code{^Y}, @code{^^}, -einem beliebigen 8-Bit-Zeichen mit ASCII über 127, oder -Zeichenkombinationen, in denen ein Backslas mit @code{`}, @code{'}, -@code{"} oder @code{^} kommbiniert wird. - -@c " to balance double quotes for not-so-bright context-sensitive editors - -Um Variablen zu definieren, in denen sich Gesangstext befindet, muss -die @code{lyricmode}-Umgebung benutzt werden: - -@example -stropheEins = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "eins" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \stropheEins @} - >> -@} -@end example - - -@seealso -Notationsreferenz: -@ref{Fonts}. - -Referenz der Interna: -@rinternals{LyricText}, -@rinternals{LyricSpace}. - -@c FIXME: this title has to be changed (possible confusion with LM) -vv -@node Setting simple songs -@unnumberedsubsubsec Setting simple songs - -@funindex \addlyrics - -Am einfachsten kann Gesangstext zu Noten mit dem Befehl - -@example -\addlyrics @{ @var{Gesangstext} @} -@end example - -@noindent -hinzugefügt werden. Hier ein Beispiel: - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -@end lilypond - -Weitere Strophen können hinzugefügt werden, indem -weitere @code{\addlyrics}-Abschnitte erstellt werden: - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -\addlyrics { speel het spel } -\addlyrics { joue le jeu } -@end lilypond - -Der Befehl @code{\addlyrics} funktioniert nicht in polyphonen -Situationen. In diesem Fall solte man @code{\lyricsto} in Kombination -mit @code{\lyricmode} benutzen, wie erklärt in -@ref{Lyrics explained}. - -@c TODO: one additional section may be needed here, -@c such as "advanced lyric syntax" or whatever -vv - - -@node Working with lyrics and variables -@unnumberedsubsubsec Working with lyrics and variables - -@cindex Gesangstext, Variablen -@cindex Variablen, Gesangstext - -Um Variablen zu definieren, die Gesangstext beinhalten, muss die -@code{\lyricmode}-Umgebung benutzt werden. Man braucht hier -keine Dauern einzugeben, wenn die Variable mit -@code{\addlyrics} oder @code{\lyricsto} zu einer Melodie hinzugefügt -wird. - -@example -stropheEins = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "eins" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \stropheEins @} - >> -@} -@end example - -Für eine andere Anordnung oder kompliziertere Sitationen bietet -es sich an, zuerst Systeme und Gesangstextumgebungen zu definieren - -@example -\new ChoirStaff << - \new Voice = "soprano" @{ @emph{Noten} @} - \new Lyrics = "sopranoLyrics" @{ s1 @} - \new Lyrics = "tenorLyrics" @{ s1 @} - \new Voice = "tenor" @{ @emph{Noten} @} ->> -@end example - -@noindent -und erst dann die entsprechenden Stimmen mit den dem Text zu kombinieren - -@example -\context Lyrics = sopranoLyrics \lyricsto "soprano" -@emph{Gesangstext} -@end example - - - -@ignore -@c FIXME -http://code.google.com/p/lilypond/issues/detail?id=329 -The problem cannot be reproduced. -The following has no sense, because the issue seems to be fixed. -A comment is in tracker waiting for response ---FV - - -Be careful when defining a variable with lyrics that creates a new -context, for example, using the deprecated @code{\lyrics} command. See -the next erroneous example: - -@example -words = \lyrics{ %warning: this creates a new context - one two -} -<< - \new Voice = "sop" { c1 } - \new Lyrics \lyricsto "sop" { \words } - \new Voice = "alt" { c2 c } - \new Lyrics \lyricsto "alt" { \words } ->> -@end example - -the problem is that \lyricsto will try to connect the "sop" melody with the context -created by "\new Lyrics". - -Then \lyrics in \words creates another context, and the original "\new Lyrics" one -remains empty. - -@end ignore - -@seealso -@c TODO: document \new Staff << Voice \lyricsto >> bug -Referenz der Interna: -@rinternals{LyricCombineMusic}, -@rinternals{Lyrics}. - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@funindex \lyricmode -@funindex \addlyrics -@funindex \lyricsto - -@c FIXME: this stuff is to be rewritten. -vv - -Gesangstext kann an einer Melodie automatisch ausgerichtet werden, aber -wenn die Dauern der Silben angegeben werden, kann man sie auch manuell -ausrichten. Die Ausrichtung kann angepasst werden mit leeren Noten -(mit @code{\skip} oder @code{_}), Trennungsstrichen und Fülllinien. - -Gesantstext wird gesetzt, wenn er sich in dem Kontext @code{Lyrics} -befindet: - -@example -\new Lyrics \lyricmode @dots{} -@end example - -Es gibt zwei Methoden, mit denen man die horizontale Ausrichtung der Silben -beeinflussen kann: - -@itemize -@item -Automatische Ausrichtung mit @code{\addlyrics} oder @code{\lyricsto}. - -@item -Definition der Silbendauer innerhalb von @code{\lyricmode}. -@end itemize - - -@menu -* Automatic syllable durations:: -* Manual syllable durations:: -* Multiple syllables to one note:: -* Multiple notes to one syllable:: -* Skipping notes:: -* Extenders and hyphens:: -* Lyrics and repeats:: -@end menu - -@node Automatic syllable durations -@unnumberedsubsubsec Automatic syllable durations - -@cindex automatische Ausrichtung von Silben -@cindex Gesangstext, Ausrichtung -@cindex Ausrichtung von Gesangstext - -Die Silben des Gesangstextes können automatisch an einer -Melodie ausgerichtet werden. Das erreicht man, indem -der Gesangstext mit dem @code{\lyricsto}-Befehl einer -Melodie zugewiesen wird: - -@example -\new Lyrics \lyricsto @var{Bezeichnung} @dots{} -@end example - -Hiermit werden die Silben an den Noten eines @code{Voice}-Kontexts -mit der Bezeichnung @var{Bezeichnung} ausgerichtet. Dieser Kontext -muss schon vorher definiert sein, damit er aufgerufen werden kann. -Mit dem Befehl @code{\lyricsto} wird in den @code{\lyricmode} -gewechselt, so dass der Gesangstextmodus nicht mehr extra angegeben -werden muss. - -Das folgende Beispiel zeigt die Wirkung der unterschiedlichen -Befehle, mit welchen Gesangtext mit einer Melodie kombiniert werden -kann: - -@lilypond[quote,fragment,ragged-right,verbatim] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - -% not recommended: left aligns syllables - \new Lyrics \lyricmode { Joy4 to8. the16 world!4. the8 Lord4 is come.2 } - -% wrong: durations needed - \new Lyrics \lyricmode { Joy to the earth! the Sa -- viour reigns. } - -%correct - \new Lyrics \lyricsto "one" { No more let sins and sor -- rows grow. } ->> -@end lilypond - -@noindent -Die zweite Strophe ist nicht richtig ausgerichtet, weil die Dauern der -Silben nicht angegeben wurden. Anstelle dessen könnte besser @code{\lyricsto} -eingesetzt werden. - -Der @code{\addlyrics}-Befehl ist eigentlich nur eine Abkürzung für eine -etwas kompliziertere LilyPond-Struktur: - -@example -@{ Noten @} -\addlyrics @{ Gesangstext @} -@end example - -@noindent -bedeutet das Gleiche wie - -@example -\new Voice = "bla" @{ Noten @} -\new Lyrics \lyricsto "bla" @{ Gesangstext @} -@end example - - -@node Manual syllable durations -@unnumberedsubsubsec Manual syllable durations - -Gesangstext kann auch ohne @code{\addlyrics} bezw. @code{\lyricsto} -notiert werden. In diesem Fall werden die Silben wie Noten notiert --- indem die Tonhöhen durch den Text der Silbe ersetzt werden -- und -die Dauer jeder Silbe muss angegeben werden. Beispielsweise so: - -@example -play2 the4 game2. -sink2 or4 swim2. -@end example - -Die Ausrichtung an einer Melodie kann mit der -@code{associatedVoice}-Eigenschaft bestimmt werden, etwa: - -@example -\set associatedVoice = #"lala" -@end example - -@noindent -Das Argument dieser Eigenschaft (hier @code{"lala"}) muss die Bezeichnung -der entsprechenden Stimme sein. Ohne diese Einstellung werden -Fülllinien nicht richtig formatiert. - -Hier ein Beispiel, dass die manuale Ausrichtung von Gesangstext zeigt: - -@lilypond[relative=1,ragged-right,verbatim,fragment,quote] -<< \new Voice = "melody" { - \time 3/4 - c2 e4 g2. - } - \new Lyrics \lyricmode { - \set associatedVoice = #"melody" - play2 the4 game2. - } >> -@end lilypond - -@seealso -Referenz der Interna: -@rinternals{Lyrics}. - - -@node Multiple syllables to one note -@unnumberedsubsubsec Multiple syllables to one note - - -@funindex _ -@cindex Bindebogen, Gesangstext - -Um mehr als eine Silbe zu einer Note zuzuordnen, können die Silben -mit geraden Anführungszeichen (@code{"}) umgeben werden oder ein -Unterstricht (@code{_}) benutzt werden, um ein Leerzeichen zwischen -Silben zu setzen. Mit der Tilde (@code{~}) kann ein Bindebogen -gesetzt werden. Dies erfordert, dass eine Schriftart vorhanden ist, -die das entsprechende Symbol (U+203F) beinhaltet, wie etwa DejaVuLGC. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - -@seealso -Referenz der Interna: -@rinternals{LyricCombineMusic}. - -@c Here come the section which used to be "Melismata" -@c the new title might be more self-explanatory - - -@node Multiple notes to one syllable -@unnumberedsubsubsec Multiple notes to one syllable - -@cindex Melisma -@cindex Phrasierung, Gesang - -Öfters wird eine einzige Silbe zu mehreren Noten gesungen, was -als Melisma bezeichnet wird. - -@c this method seems to be the simplest; therefore -@c it might be better to present it first - vv - -Melismen können direkt im Gesangstext definiert werden, indem -ein Unterstrich (@code{_}) für jede Note notiert wird, die -übersprungen werden soll. - -@c FIXME: clarify: __ is used to crate a lyric extender, -@c _ is used to add a note to a melisma, so both __ and _ are needed. - -@c verbose! --FV -@c duplicated: TODO fix - -Zusätzlich kann auch eine Fülllinie eingefügt werden, die das Melisma anzeigt. -Sie wird notiert, indem ein doppelter Unterstrich direkt hinter -die Silbe des Melismas gesetzt wird. Das Beispiel unten zeigt -drei Elemente, die eingesetzt werden können: ein doppelter Bindestrich -erstellt Trennungsstriche zwischen Silben, mit Unterstrichen wird -eine Note übersprungen und mit einem doppelten Unterstrich wird eine -Fülllinie gesetzt. Alle diese Zeichen müssen von Leerzeichen umgeben -sein, damit sie erkannt werden. - -@c wrong: extender line only on last syllable of a word. Change example -@lilypond[relative=1,verbatim,fragment,quote] -{ \set melismaBusyProperties = #'() - c d( e) f f( e) e e } -\addlyrics - { Ky -- _ _ ri __ _ _ _ e } -@end lilypond - -Legatobögen können eingesetzt werden, wenn die Funktion -@code{melismaBusyProperties} aufgerufen wird, wie in dem Beispiel oben. - -Mit dem @code{\lyricsto}-Befehl können Melismen aber auch automatisch -zugewiesen werden: unter übergebundene Noten oder Notengruppen mit einem -Legatobogen wird nur eine einzige Silbe gesetzt. Wenn eine Notengruppe -ohne Legatobogen als Melisma definiert werden soll, kann die Reichweite -mit den Befehlen @code{\melisma} und @code{\melismaEnd} eingegrenzt -werden: - -@lilypond[quote,relative=2,ragged-right,fragment,verbatim] -<< - \new Voice = "lala" { - \time 3/4 - f4 g8 - \melisma - f e f - \melismaEnd - e2 - } - \new Lyrics \lyricsto "lala" { - la di __ daah - } ->> -@end lilypond - -Zusätzlich werden Noten als Melisma erachtet, wenn man sie manuell -zu einer Balkengruppe verbindet und die automatische Bebalkung -gleichzeitig ausgeschaltet ist. Siehe auch @ref{Setting automatic beam -behavior}. - -@c FIXME: this now links to LM -vv - -@cindex SATB -@cindex choral score - -Ein vollständiges Beispiel für einen SATB-Chorsatz findet -sich in -@rlearning{Vocal ensembles}. - - -@predefined -@code{\melisma}, @code{\melismaEnd} -@funindex \melismaEnd -@funindex \melisma -@endpredefined - -@seealso -@c @lsr{vocal,lyric@/-combine.ly}. - -@knownissues - -Melismen werde nicht automatisch erkannt, und Fülllinien müssen -manuell gestzt werden. - - -@node Skipping notes -@unnumberedsubsubsec Skipping notes - -Damit der Gesangstext langsamer als die Melodie fortschreitet, -kann man @code{\skip}-Befehle einfügen. Jeder @code{\skip}-Befehl -schiebt den Text eine Note weiter. Der Befehl muss von einer -gültigen Dauer gefolgt werden, wie das Beispiel zeigt: dieser -Dauerwert wird jedoch ignoriert, wenn man @code{\skip} im -Gesangstext einsetzt. - -@lilypond[verbatim,ragged-right,quote] -\relative c' { c c g' } -\addlyrics { - twin -- \skip 4 - kle -} -@end lilypond - - -@node Extenders and hyphens -@unnumberedsubsubsec Extenders and hyphens - -@cindex Melisma -@cindex Fülllinie - -@c leave this as samp. -gp -Wenn die letzte Silbe eines Wortes auf ein Melisma fällt, wird -das Melisma oft mit einer langen horizontalen Linie angezeigt, -die nach dem Wort beginnt und mit der letzten Note des Melismas -endet. Derartige Fülllinien werden mit einem doppelten -Unterstrich (@code{ __ }) eingegeben, wobei beachtet werden muss, -dass er von Leerzeichen umgeben ist. - -@warning{Melismen werden mit Fülllinien angezeigt, die als doppelter -Unterstrich notiert sind. Kurze Melismen können auch notiert werden, -indem eine Note übersprungen wird. Hierzu wird ein einfacher -Unterstrich notiert und keine Fülllinie gezogen.} - -@cindex Trennstriche, Gesangstext -@cindex Bindestriche, Gesangstext - -@c leave this as samp. -gp -Zentrierte Bindestriche zwischen den einzelnen Silben werden mit -einem doppelten Bindestrich (@code{ -- }) eingegeben, wobei beachtet -werden muss, dass er von Leerzeichen umgeben ist. Der Bindestrich -wird zwischen den Silben zentriert und seine Länge dem Notenabstand -angepasst. - -In sehr eng notierter Musik können die Bindestriche ganz wegfallen. -Dieses Verhalten kann aber auch unterbunden werden, wenn den Eigenschaften -@code{minimum-distance} (minimaler Abstand zwischen Silben) und -@code{minimum-length} (Wert, unterhalb von dem Bindestriche wegfallen) -andere Werte erhalten. - -@seealso -Referenz der Interna: -@rinternals{LyricExtender}, -@rinternals{LyricHyphen} - - -@node Lyrics and repeats -@unnumberedsubsubsec Lyrics and repeats - -@c TODO New section. Add text -TBC - - -@node Specific uses of lyrics -@subsection Specific uses of lyrics - -@c FIXME This whole section is to be reorganized. -vv - -In vielen Fällen werden unterschiedliche Strophen mit einer -Liedmelodie angeordnet, wobei kleine Schwankungen in der -Silbenaufteilung auftreten können. Derartige Variationen -können mit @code{\lyricsto} notiert werden. - -@menu -* Divisi lyrics:: -* Lyrics independent of notes:: -* Spacing out syllables:: -* Centering lyrics between staves:: -@end menu - - - -@node Divisi lyrics -@unnumberedsubsubsec Divisi lyrics - -Alternative (oder @emph{divisi} Gesangstexte können notiert -werden, indem Stimmenkontexten Bezeichnungen zugewiesen werden -und die Texte dann jeweils der entsprechenden Bezeichnung -zugewiesen wird. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" { - \relative c' { - c4 - << - { \voiceOne c8 e } - \new Voice = "splitpart" { \voiceTwo c4 } - >> - \oneVoice c4 c | c - } - } - \new Lyrics \lyricsto "melody" { we shall not o- ver- come } - \new Lyrics \lyricsto "splitpart" { will } ->> } -@end lilypond - -Mit diesem Trick kann auch ein unterschiedlicher Text für eine -wiederholte Stelle gesetzt werden: - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" \relative c' { - c2 e | g e | c1 | - \new Voice = "verse" \repeat volta 2 {c4 d e f | g1 | } - a2 b | c1} - \new Lyrics = "mainlyrics" \lyricsto melody \lyricmode { - do mi sol mi do - la si do } - \context Lyrics = "mainlyrics" \lyricsto verse \lyricmode { - do re mi fa sol } - \new Lyrics = "repeatlyrics" \lyricsto verse \lyricmode { - dodo rere mimi fafa solsol } ->> -} -@end lilypond - - - -@node Lyrics independent of notes -@unnumberedsubsubsec Lyrics independent of notes - -@cindex Devnull-Kontext - -In sehr komplexer Vokalmusik ist es manchmal erforderlich, -den Gesangstext vollständig unabhängig von den Noten zu -setzen. Das Beispiel unten zeigt das Vorgehen: die -Noten, die für @code{lyricrhythm} definiert sind, verschwinden -im @code{Devnull}-Kontext, während ihre Dauern immernoch -gültig sind, um die Silben daran auszurichten. - -@lilypond[quote,verbatim,ragged-right] -voice = { - c''2 - \tag #'music { c''2 } - \tag #'lyricrhythm { c''4. c''8 } - d''1 -} - -lyr = \lyricmode { I like my cat! } - -<< - \new Staff \keepWithTag #'music \voice - \new Devnull="nowhere" \keepWithTag #'lyricrhythm \voice - \new Lyrics \lyricsto "nowhere" \lyr - \new Staff { c'8 c' c' c' c' c' c' c' - c' c' c' c' c' c' c' c' } ->> -@end lilypond - -Diese Vorgehensweise ist nur empfehlenswert, wenn die Noten innerhalb -des @code{Devnull}-Kontextes keine Melismen enthalten. Melismen -werden im @code{Voice}-Kontext definiert. Wenn ein Gesangstext -mit einem @code{Devnull}-Kontext verknüpft wird, wird die Verbindung -von @code{Voice}- und @code{Lyrics}-Kontext aufgehoben und somit -auch die Information zu Melismen. Darum werden implizite Melismen -ignoriert. - -@c Conclusion: do not use devnull for lyrics -FV - -@c this clarifies http://code.google.com/p/lilypond/issues/detail?id=248 - - -@node Spacing out syllables -@unnumberedsubsubsec Spacing out syllables - -@cindex Silben spreizen -@cindex Spreizen von Silben -@cindex Gesangstext, Platz zwischen Silben -@cindex Abstand vergrößern, Gesangstext - -Um den Abstand zwischen Silben zu vergrößern, kann die -@code{minimum-distance}-Eigenschaft des -@code{LyricSpace}-Objekts gesetzt werden: - -@lilypond[relative,verbatim,fragment,quote,ragged-right] -{ - c c c c - \override Lyrics.LyricSpace #'minimum-distance = #1.0 - c c c c -} -\addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext -} -@end lilypond - -Damit diese Einstellung für alle Gesangtextzeilen in einer Partitur -wirkt, muss sie im @code{layout}-Block vorgenommen werden. - -@lilypond[verbatim,quote,ragged-right] -\score { - \relative c' { - c c c c - c c c c - } - \addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext - } - \layout { - \context { - \Lyrics - \override LyricSpace #'minimum-distance = #1.0 - } - } -} -@end lilypond - -@c @snippets -@c This snippet has been renamed to "lyrics-alignment.ly" -@c update as soon as lsr/is updated -vv -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {lyrics-alignment.ly} - -@c TODO: move to LSR -vv -@snippets - -Eine Überprüfung, mit der sichergestellt wird, dass kein Text in die -Seitenränder ragt, ist sehr rechenintensiv. Damit die Bearbeitungszeit -von Dateien nicht so lange dauert, wird diese Überprüfung nicht -automatisch vorgenommen. Man kann sie mit dem Befehl - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - -@noindent -aktivieren. Damit Gesangstext auch nicht mit Taktlinien -zusammenstößt, kann folgende Einstellung gesetzt werden: - -@example -\layout @{ - \context @{ - \Lyrics - \consists "Bar_engraver" - \consists "Separating_line_group_engraver" - \override BarLine #'transparent = ##t - @} -@} -@end example - -@c TODO Create and add lsr example of lyricMelismaAlignment -@c It's used like this to center-align all lyric syllables, -@c even when notes are tied. -td - -@ignore -\layout -{ - \context { \Score lyricMelismaAlignment = #0 } -} -@end ignore - - -@node Centering lyrics between staves -@unnumberedsubsubsec Centering lyrics between staves - -@c TODO Add text from -user -TBC - -@node Stanzas -@subsection Stanzas - -@menu -* Adding stanza numbers:: -* Adding dynamics marks to stanzas:: -* Adding singers' names to stanzas:: -* Stanzas with different rhythms:: -* Printing stanzas at the end:: -* Printing stanzas at the end in multiple columns:: -@end menu - - -@node Adding stanza numbers -@unnumberedsubsubsec Adding stanza numbers - -@cindex Strophennummer -@cindex Nummerierung, Strophen - -Strophennummerierung kann hinzugefügt werden: - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set stanza = #"1. " - Hi, my name is Bert. -} \addlyrics { - \set stanza = #"2. " - Oh, ché -- ri, je t'aime -} -@end lilypond - -@noindent -Die Zahl wird direkt vor die erste Silbe gesetzt. - -@c TODO Create and add snippet to show how two lines of a -@c stanza can be grouped together, along these lines: -@c (might need improving a bit) -td - -@ignore -leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup -#"brace105" } - -stanzaOneOne = { - \set stanza = \markup { "1. " \leftbrace } - \lyricmode { Child, you're mine and I love you. - Lend thine ear to what I say. - - } -} - -stanzaOneThree = { -% \set stanza = \markup { " "} - \lyricmode { Child, I have no great -- er joy - Than to have you walk in truth. - - } -} - -\new Voice { - \repeat volta 2 { c'8 c' c' c' c' c' c'4 - c'8 c' c' c' c' c' c'4 } -} \addlyrics { \stanzaOneOne } - \addlyrics { \stanzaOneThree } - -@end ignore - - -@node Adding dynamics marks to stanzas -@unnumberedsubsubsec Adding dynamics marks to stanzas - -Dynamikzeichen können zur Strophennummer hinzugefügt werden. -In LilyPond muss alles, was vor einer Strophe gesetzt wird, -als Teil der @code{stanza}-Eigenschaft definiert werden, also -auch Dynamikbezeichnung. Aus technischen Gründen muss die -Strophe außerhalb von @code{lyricmode} gesetzt werden: - -@lilypond[quote,ragged-right,verbatim] -text = { - \set stanza = \markup { \dynamic "ff" "1. " } - \lyricmode { - Big bang - } -} - -<< - \new Voice = "tune" { - \time 3/4 - g'4 c'2 - } -\new Lyrics \lyricsto "tune" \text ->> -@end lilypond - - -@node Adding singers' names to stanzas -@unnumberedsubsubsec Adding singers' names to stanzas - -@cindex Sängername -@cindex Name von Sänger - -Namen von Sängern können auch eingefügt werden. Sie werden zu Beginn -der Zeile gesetzt, ähnlich wie eine Instrumentenbezeichnung. Sie -werden mit der @code{vocalName}-Eigenschaft erstellt. Eine Kurzversion -kann mit @code{shortVocalName} definiert werden. - -@lilypond[fragment,ragged-right,quote,verbatim,relative=2] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set vocalName = #"Bert " - Hi, my name is Bert. -} \addlyrics { - \set vocalName = #"Ernie " - Oh, ché -- ri, je t'aime -} -@end lilypond - - -@node Stanzas with different rhythms -@unnumberedsubsubsec Stanzas with different rhythms - -@subsubheading Ignorieren von Melismen - -Teilweise wird zu einer Silbe ein Melisma in einer Strophe -gesungen, während in einer anderen jede Note eine Silbe erhält. -Eine Möglichkeit ist, dass die Strophe mit mehr Text das -Melisma ignoriert. Das wird mit der -@code{ignoreMelismata}-Eigenschaft im @code{Lyrics}-Kontext -vorgenommen. - -@lilypond[verbatim,ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - \slurDotted - f8.[( g16]) - a4 - } - \new Lyrics \lyricsto "lahlah" { - more slow -- ly - } - \new Lyrics \lyricsto "lahlah" { - go - \set ignoreMelismata = ##t - fas -- ter - \unset ignoreMelismata - still - } ->> -@end lilypond - -@knownissues -Anders als die meisten @code{\set}-Befehle funktioniert -@code{\set ignoreMelismata} nicht zusammen mit @code{\once}. -Es ist notwendig, explizit @code{\set} und @code{\unset} zu -verwenden, um den Text einzugrenzen, für den Melismen ignoriert -werden sollen. - - -@subsubheading Switching to an alternative melody - -Es ist auch möglich, die Silben von verschiedenen Textzeilen an -unterschiedlichen Melodien auszurichten. Das wird mit der -@code{associatedVoice}-Eigenschaft vorgenommen: - -@lilypond[ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - << - \new Voice = "alternative" { - \voiceOne - \times 2/3 { - % show associations clearly. - \override NoteColumn #'force-hshift = #-3 - f8 f g - } - } - { - \voiceTwo - f8.[ g16] - \oneVoice - } >> - a8( b) c - } - \new Lyrics \lyricsto "lahlah" { - Ju -- ras -- sic Park - } - \new Lyrics \lyricsto "lahlah" { - % Tricky: need to set associatedVoice - % one syllable too soon! - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex - } >> -@end lilypond - -@noindent -Der Text der ersten Strophe wird an der Stimme @qq{lahlah} -ausgerichtet: - -@example -\new Lyrics \lyricsto "lahlah" @{ - Ju -- ras -- sic Park -@} -@end example - -@noindent -Auch die zweite Strophe wird an @qq{lahlah} ausgerichtet, aber für die -Silbe @qq{ran} wird zu einer anderen Melodie gewechselt. Dazu wird -der Befehl - -@example -\set associatedVoice = alternative -@end example - -@noindent -eingesetzt. @code{alternative} ist die Bezeichnung der Stimme, die -die Triole enthält. - -@c FIXME: make this easier to understand -vv -Dieser Befehl muss eine Silbe vor der Note notiert werden, auf die er -sich auswirken soll, also vor @qq{Ty} in diesem Fall. - -@example -\new Lyrics \lyricsto "lahlah" @{ - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex -@} -@end example - -@noindent -Zurück zu der alten Stimme kommt man, indem wieder -@qq{lahlah} mit dem Text verknüpft wird. - - -@node Printing stanzas at the end -@unnumberedsubsubsec Printing stanzas at the end - -Manchmal soll nur eine Strophe mit der Melodie gesetzt -werden und die weiteren Strophen als Text under den Noten -hinzugefügt werden. Dazu wird der Text in einer -@code{markup}-Umgebung außerhalb der @code{\score}-Umgebung -gesetzt. Es gibt zwei Arten, die Zeilen auszurichten, -wie das Beispiel zeigt: - -@lilypond[ragged-right,verbatim,quote] -melody = \relative c' { -e d c d | e e e e | -d d e d | c1 | -} - -text = \lyricmode { -\set stanza = #"1." Ma- ry had a lit- tle lamb, -its fleece was white as snow. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text ->> - \layout { } -} -\markup { \column{ - \line{ Verse 2. } - \line{ All the children laughed and played } - \line{ To see a lamb at school. } - } -} -\markup{ - \wordwrap-string #" - Verse 3. - - Mary took it home again, - - It was against the rule." -} -@end lilypond - - -@node Printing stanzas at the end in multiple columns -@unnumberedsubsubsec Printing stanzas at the end in multiple columns - -Wenn in einem Lied sehr viele Strophen vorkommen, werden sie oft in -mehreren Spalten unter den Noten gesetzt. Eine nach außen versetzte Zahl -zeigt die Strophennummer an. Dieses Beispiel zeigt eine Methode, diese -Art von Notensatz zu produzieren. - -@lilypond[ragged-right,quote,verbatim] -melody = \relative c' { - c c c c | d d d d -} - -text = \lyricmode { - \set stanza = #"1." This is verse one. - It has two lines. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text - >> - \layout { } -} - -\markup { - \fill-line { - \hspace #0.1 % moves the column off the left margin; - % can be removed if space on the page is tight - \column { - \line { \bold "2." - \column { - "This is verse two." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "3." - \column { - "This is verse three." - "It has two lines." - } - } - } - \hspace #0.1 % adds horizontal spacing between columns; - % if they are still too close, add more " " pairs - % until the result looks good - \column { - \line { \bold "4." - \column { - "This is verse four." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "5." - \column { - "This is verse five." - "It has two lines." - } - } - } - \hspace #0.1 % gives some extra space on the right margin; - % can be removed if page space is tight - } -} -@end lilypond - - -@seealso -Referenz der Interna: -@rinternals{LyricText}, -@rinternals{StanzaNumber}. - - - - diff --git a/Documentation/de/user/wind.itely b/Documentation/de/user/wind.itely deleted file mode 100644 index 9ec26a833c..0000000000 --- a/Documentation/de/user/wind.itely +++ /dev/null @@ -1,239 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Wind instruments -@section Wind instruments - -@lilypondfile[quote]{wind-headword.ly} - -Dieser Abschnitt beinhaltet einige Notationselemente, die -bei der Notation von Blasinstrumenten auftreten. - -@menu -* Common notation for wind instruments:: -* Bagpipes:: -@end menu - - -@node Common notation for wind instruments -@subsection Common notation for wind instruments - -Dieser Abschnitt erklärt Eigenheiten, die für die meisten -Blasinstrumente gültig sind. - -@menu -* References for wind instruments:: -* Fingerings:: -@end menu - -@node References for wind instruments -@unnumberedsubsubsec References for wind instruments - -@cindex Blasinstrumente - -Viele Besonderheiten der Blasinstrumentenotation haben mit -Atmung und Spielart zu tun: - -@itemize -@item Atmung kann durch Pausen oder mit Atemzeichen angezeigt werden,, -siehe @ref{Breath marks}. -@item Legato kann durch Legatobögen angezeigt werden, siehe -@ref{Slurs}. -@item Unterschiedliche Artikulationen, Legato, Portato, Staccato, -werden normalerweise mit Artikulationszeichen angemerkt, teilweise -auch in Verbindung mit Legatobögen, siehe @ref{Articulations and -ornamentations} und @ref{List of articulations}. -@item Flatterzunge wird angezeigt, indem ein Tremolozeichen und eine -Anmerkung für die ensprechende Note gesetzt wird. Siehe @ref{Tremolo repeats}. -@end itemize - -Es gibt auch noch weitere Aspekte der Notation, die für Blasinstrumente -relevant sein können: - -@itemize -@item Viele Instrumente sind transponierend, siehe -@ref{Instrument transpositions}. -@item Das Zug-Glissando ist charakteristisch für die Posaune, aber -auch andere Instrumente können Glissandos ausführen. Siehe -@ref{Glissando}. -@item Obertonreihenglissandi, die auf allen Blechblasinstrumenten möglich, -aber besonders üblich für das Waldhorn sind, werden üblicherweise mit -Verzierungsnoten geschrieben. Siehe -@ref{Grace notes}. -@item Tonhöhenschwankungen am Ende eines Tons werden gezeigt in -@ref{Falls and doits}. -@item Ventil- oder Klappenschläge werden oft als Kreuznoten -dargestellt, siehe -@ref{Special note heads}. -@item Holzbläser können tiefe Noten überblasen. Derartige Noten -werden als @code{flageolet}-Artikulation notiert. Siehe -@ref{List of articulations}. -@item Die Benutzung von Dämpfern für Blechblasinstrumente wird meistens -durch Text gefordert, aber bei schnellem Wechsel bietet es sich an, -die Artikulationszeichen @code{stopped} und @code{open} zu benutzen. -Siehe -@ref{Articulations and ornamentations} und -@ref{List of articulations}. -@item Gestopfte Hörner werden mit dem @code{stopped}-Artikulationszeichen -notiert. Siehe -@ref{Articulations and ornamentations}. -@end itemize - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing--flageolet-mark-size.ly} - - -@seealso -Notationsreferenz: -@ref{Breath marks}, -@ref{Slurs}, -@ref{Articulations and ornamentations}, -@ref{List of articulations}, -@ref{Tremolo repeats}, -@ref{Instrument transpositions}, -@ref{Glissando}, -@ref{Grace notes}, -@ref{Falls and doits}, -@ref{Special note heads}, - -Schnipsel: -@rlsr{Winds} - - -@node Fingerings -@unnumberedsubsubsec Fingerings - -Alle Blasinstrumente außer der Posaune benötigen mehrere Finger, um -verschiedene Tonhöhen zu produzieren. - -TBC - - -@node Bagpipes -@subsection Bagpipes - -Dieser Abschnitt beinhaltet Information zur Notation von Dudelsackmusik. - -@menu -* Bagpipe definitions:: -* Bagpipe example:: -@end menu - - -@node Bagpipe definitions -@unnumberedsubsubsec Bagpipe definitions - -@cindex Dudelsack -@cindex Sackpfeife -@cindex Schottischer Dudelsack -@funindex \taor -@funindex taor -@funindex \hideKeySignature -@funindex hideKeySignature -@funindex \showKeySignature -@funindex showKeySignature - -LilyPond besitzt spezielle Definitionen, mit der die Musik -des schottischen Hochland-Dudelsacks notiert wird. Um sie -zu benutzen, muss - -@example -\include "bagpipe.ly" -@end example - -@noindent -am Anfang der LilyPond-Quelldatei eingefügt werden. Hierdurch -können dann bestimmte Verzierungsnoten, die für die Dudelsackmusik -üblich sind, mit kurzen Befehlen eingefügt werden. So reicht etwa der -Befehl @code{\taor}, anstatt - -@example -\grace @{ \small G32[ d G e] @} -@end example - -@noindent zu schreiben. - -@code{bagpipe.ly} enthält außerdem Definitionen für Tonhöhen von -Dudelsacknoten in bestimmten Oktaven, so dass man sich nicht mehr um -@code{\relative} oder @code{\transpose} kümmern muss. - -@lilypond[ragged-right,verbatim,quote,notime] -\include "bagpipe.ly" -{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } -@end lilypond - -Musik für den Dudelsack wird in D-Dur -geschrieben (auch wenn das eigentlich nicht stimmt). Weil -das aber die einzige Tonart ist, die benutzt werden kann, werden -die Vorzeichen meistens nicht geschrieben. Damit das funktioniert, -müssen die Noten immer mit @code{\hideKeySignature} beginnen. -Wenn die Vorzeichen hingegen angezeigt werden sollen, kann das -mithilfe des Befehls @code{\showKeySignature} vorgenommen werden. - -Einige moderne Dudelsacknoten benutzen halbe Finger auf c und f, um -diese Noten zu erniedrigen. Das kann angezeigt werden mit @code{cflat} -bzw. @code{fflat}. Gleicherweise kann das piobaireachd hohe g als -@code{gflat} geschrieben werden, wenn es in leichter Musik vorkommt. - -@seealso -Schnipsel: -@rlsr{Winds} - - -@node Bagpipe example -@unnumberedsubsubsec Bagpipe example - -So sieht die bekannte Melodie Amazing Grace aus, wenn man sie für -Dudelsack notiert. - -@lilypond[verbatim,quote] -\include "bagpipe.ly" -\layout { - indent = 0.0\cm - \context { \Score \remove "Bar_number_engraver" } -} - -\header { - title = "Amazing Grace" - meter = "Hymn" - arranger = "Trad. arr." -} - -{ - \hideKeySignature - \time 3/4 - \grg \partial 4 a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg e8. f16 - \dblA A2 \grg A4 - \grg A2 f8. A16 - \grg A2 \hdblf f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 e4 - \thrwd d2. - \slurd d2 - \bar "|." -} -@end lilypond - -@seealso -Schnipsel: -@rlsr{Winds} diff --git a/Documentation/de/user/working.itely b/Documentation/de/user/working.itely deleted file mode 100644 index f14c7dce85..0000000000 --- a/Documentation/de/user/working.itely +++ /dev/null @@ -1,861 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 5395f0433b4f09b18360118a23227a4a3cef8e72 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Working on LilyPond projects -@chapter Working on LilyPond projects - -Dieses Kapitel erklärt, wie bestimmte häufige Probleme zu -lösen oder ganz zu vermeiden sind. Wenn Sie schon -Programmiererfahrung mitbringen, erscheinen diese Hinweise -vielleicht überflüssig, aber es wird dennoch empfohlen, dieses Kapitel -zu lesen. - - -@menu -* Suggestions for writing LilyPond input files:: -* When things don't work:: -* Scores and parts:: -@end menu - - -@node Suggestions for writing LilyPond input files -@section Suggestions for writing LilyPond input files - -Jetzt sind Sie so weit, größere Stücke mit LilyPond zu schreiben -- -nicht nur die kleinen Beispiele aus der Übung, sondern ganze Stücke. -Aber wie geht man das am besten an? - -Solange LilyPond Ihre Dateien versteht und die Noten so setzt, -wie Sie das wollen, spielt es eigentlich keine Rolle, wie Ihre -Dateien aussehen. Es gibt aber trotzdem ein paar Dinge, die man -beim Schreiben von LilyPond-Code berücksichtigen sollte. - -@itemize @bullet -@item Was ist, wenn Sie einen Fehler machen? Die Struktur einer -LilyPond-Datei kann es erleichtern (oder erschweren), bestimmte -Fehler zu finden. - -@item Was ist, wenn Sie Ihre Dateien mit jemandem austauschen -wollen? Oder Ihre Dateien nach einige Jahren noch einmal überarbeiten -wollen? Manche LilyPond-Dateien versteht man auf den ersten Blick, -über anderen muss man eine Stunde grübeln, um die Struktur zu ahnen. - -@item Was ist, wenn sie Ihre Dateien auf eine neuere LilyPond-Version -aktualisieren wollen? Die Syntax der Eingabesprache verändert sich -allmählich mit Verbesserungen im Programm. Die meisten Veränderungen -können automatisch durch @code{convert-ly} gelöst werden, aber -bestimmte Änderungen brauchen Handarbeit. LilyPond-Dateien können -strukturiert werden, damit sie einfacher aktualisierbar sind. -@end itemize - -@menu -* General suggestions:: -* Typesetting existing music:: -* Large projects:: -* Saving typing with variables and functions:: -* Style sheets:: -@end menu - - -@node General suggestions -@subsection General suggestions - -Hier einige Vorschläge, wie Sie Probleme vermeiden oder lösen können: - -@itemize @bullet -@item @strong{Schreiben Sie immer mit @code{\version} die -Versionsnummer -in jede Datei}. Beachten Sie, dass in allen Vorlagen die Versionsnummer -@code{\version "2.12.0"} eingetragen ist. Es empfiehlt sich, in alle -Dateien, unabhängig von ihrer Größe, den @code{\version}-Befehl -einzufügen. Persönliche Erfahrung hat gezeigt, dass es ziemlich -frustrierend sein kann zu erinnern, welche Programmversion man etwa -vor einem Jahr verwendet hat. Auch @code{convert-ly} benötigt die -Versionsnummer. - -@item @strong{Benutzen Sie Überprüfungen}: @ruser{Octave checks}, und -@ruser{Bar and bar number checks}. Wenn Sie hier und da diese -Überprüfungen einfügen, finden Sie einen möglichen Fehler weit -schneller. Wie oft aber ist @qq{hier und da}? Das hängt von der -Komplexität der Musik ab. ei einfachen Stücken reicht es vielleicht -ein- oder zweimal, in sehr komplexer Musik sollte man sie vielleicht -in jeden Takt einfügen. - -@item @strong{Ein Takt pro Textzeile}. Wenn irgendetwas kompliziertes -vorkommt, entweder in der Musik selber oder in der Anpassung der -Ausgabe, -empfiehlt es sich oft, nur einen Takt pro Zeile zu schreiben. -Bildschirmplatz zu sparen, indem Sie acht Takte in eine Zeile zwängen, -hilft nicht weiter, wenn Sie ihre Datei @qq{debuggen} müssen. - -@item @strong{Kommentieren Sie ihre Dateien}. Benutzen Sie entweder -Taktnummern (in regelmäßigen Abständen) oder Verweise auf musikalische -Themen (@qq{Zweites Thema in den Geigen}, @qq{vierte Variation} usw.). -Sie brauchen diese Kommentare vielleicht noch nicht, wenn Sie das Stück -notieren, aber spätestens wenn Sie nach ein paar Jahren etwas -verändern -wollen oder Sie den Quelltext an einen Freund weitergeben wollen, -ist es weitaus komplizierter, die Dateistruktur ohne Kommentare zu -verstehen, als wenn Sie sie rechtzeitig eingefügt hätten. - -@item @strong{Schreiben Sie Klammern mit Einrückung}. Viele -Probleme entstehen durch ungerade Anzahl von @code{@{} and -@code{@}}-Klammern. - -@item @strong{Schreiben Sie Tondauerangaben} am Anfang von -Abschnitten und Bezeichnern. Wenn Sie beispielsweise - @code{c4 d e} am Anfang eines Abschnittes schreiben, -ersparen Sie sich viele Probleme, wenn Sie ihre Musik -eines Tages umarrangieren wollen. - -@item @strong{Trennen Sie Einstellungen} von den eigentlichen -Noten. Siehe auch @ref{Saving typing with variables and functions} -und -@ref{Style sheets}. - -@end itemize - - -@node Typesetting existing music -@subsection Typesetting existing music - -Wenn Sie Musik aus einer fertigen Partitur kopieren (z. B. die -LilyPond-Eingabe einer gedruckten Partitur): - -@itemize @bullet - -@item Schreiben Sie ein System ihrer Quelle nach dem anderen -(aber trotzdem nur einen Takt pro Textzeile) und überprüfen -Sie jedes System, nachdem Sie es fertig kopiert haben. Mit dem -@code{showLastLength}- oder @code{showFirstLenght}-Befehl können Sie den Übersetzungsprozess -beschleunigen. Siehe auch -@ruser{Skipping corrected music}. - -@item Definieren Sie @code{mBreak = @{ \break @}} und schreiben Sie - @code{\mBreak} in der Quelldatei immer dann, wenn im Manuskript -ein Zeilenumbruch vorkommt. Das macht es einfacher, die gesetzte -Zeile mit den ursprünglichen Noten zu vergleichen. Wenn Sie die -Partitur fertig gestellt haben, könne Sie @code{mBreak = @{ @}}, -also leer definieren, um diese manuellen Zeilenumbrüche zu entfernen. -Damit kann dann LilyPond selber entscheiden, wohin es passende -Zeilenumbrüche platziert. - -@item Wenn Sie eine Stimme für ein transponierendes Instrument als eine -Variable notieren, wird empfohlen, dass die Noten von - -@example -\transpose c klingende-Tonhöhe @{...@} -@end example - -eingefasst werden (wobei @code{klingende-Tonhöhe} die klingende Tonhöhe -des Instruments ist), sodass die Noten innerhalb der Variable für klingendes C -geschrieben sind. Sie können die Variable zurücktransponieren, wenn es -nötig ist, aber Sie müssen es nicht tun. Fehler in Transpositionen sind -treten seltener auf, wenn alle Noten in den Variablen für die gleiche -Ausgangstonhöhe geschrieben werden. - -Denken Sie auch daran, dass Sie nur von/nach C transponieren. Das heißt, -dass die einzigen anderen Tonhöhen, die Sie in Transpositionen benutzen, -die Tonhöhen der Instrumente sind, für die Sie schreiben: @code{bes} für -eine B-Trompete oder @code{aes} für eine As-Klarinette usw. - -@end itemize - - -@node Large projects -@subsection Large projects - -Besonders wenn Sie an größeren Projekten arbeiten, ist es -unumgänglich, dass Sie ihre LilyPond-Dateien klar strukturieren. - -@itemize @bullet - -@item @strong{Verwenden Sie Variablen für jede Stimme}, innerhalb -der Definition sollte so wenig Struktur wie möglich sein. Die -Struktur des @code{\score}-Abschnittes verändert sich am ehesten, -während die @code{violine}-Definition sich wahrscheinlich mit einer -neuen Programmversion nicht verändern wird. - -@example -violine = \relative c'' @{ -g4 c'8. e16 -@} -... -\score @{ - \new GrandStaff @{ - \new Staff @{ - \violine - @} - @} -@} -@end example - -@item @strong{Trennen Sie Einstellungen von den Noten}. Diese -Empfehlung wurde schon im Abschnitt @ref{General suggestions} gegeben, -aber für große Projekte ist es unumgänglich. Muss z. B. die -Definition für @code{fdannp} verändert werden, so braucht -man es nur einmal vorzunehmen und die Noten in der Geigenstimme, -@code{violin}, bleiben unberührt. - -@example -fdannp = _\markup@{ - \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} -violin = \relative c'' @{ -g4\fdannp c'8. e16 -@} -@end example - -@end itemize - - -@node Saving typing with variables and functions -@subsection Saving typing with variables and functions - -@cindex Variable -@cindex Bezeichner - -Bis jetzt haben Sie immer etwa solche Noten gesehen: - -@lilypond[quote,verbatim,ragged-right] -hornNotes = \relative c'' { c4 b dis c } -\score { - { - \hornNotes - } -} -@end lilypond - -Das könnte auch nützlich in Minimal-Music sein: - -@lilypond[quote,verbatim,ragged-right] -fragmentA = \relative c'' { a4 a8. b16 } -fragmentB = \relative c'' { a8. gis16 ees4 } -violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } -\score { - { - \violin - } -} -@end lilypond - -Sie können diese Bezeichner oder Variablen aber auch für -(eigene) Einstellungen verwenden: - -@lilypond[quote,verbatim,ragged-right] -dolce = \markup{ \italic \bold dolce } -padText = { \once \override TextScript #'padding = #5.0 } -fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } -violin = \relative c'' { - \repeat volta 2 { - c4._\dolce b8 a8 g a b | - \padText - c4.^"hi there!" d8 e' f g d | - c,4.\fthenp b8 c4 c-. | - } -} -\score { - { - \violin - } -\layout{ragged-right=##t} -} -@end lilypond - -Die Variablen haben in diesem Beispiel deutlich die -Tipparbeit erleichtert. Aber es lohnt sich, sie zu -einzusetzen, auch wenn man sie nur einmal anwendet, -denn sie vereinfachen die Struktur. -Hier ist das vorangegangene Beispiel ohne -Variablen. Es ist sehr viel komplizierter zu lesen, -besonders die letzte Zeile. - -@example -violin = \relative c'' @{ - \repeat volta 2 @{ - c4._\markup@{ \italic \bold dolce @} b8 a8 g a b | - \once \override TextScript #'padding = #5.0 - c4.^"hi there!" d8 e' f g d | - c,4.\markup@{ \dynamic f \italic \small @{ 2nd @} - \hspace #0.1 \dynamic p @} b8 c4 c-. | - @} -@} -@end example - -@c TODO Replace the following with a better example -td -@c Skylining handles this correctly without padText - -Bis jetzt wurde nur statische Substitution vorgestellt --- wenn LilyPond den Befehl @code{\padText} findet, wird -er ersetzt durch durch unsere vorherige Definition (alles, -was nach dem @code{padtext =} kommt). - -LilyPond kennt aber auch nicht-statische Substitutionen (man -kann sie sich als Funktionen vorstellen). - -@lilypond[quote,verbatim,ragged-right] -padText = -#(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -Die Benutzung von Variablen hilft auch, viele Schreibarbeit zu -vermeiden, wenn die Eingabesyntax von LilyPond sich verändert -(siehe auch @ref{Updating old files}). Wenn nur eine einzige -Definition (etwa @code{\dolce}) für alle Dateien verwendet wird -(vgl. @ref{Style sheets}), muss nur diese einzige Definition -verändert werden, wenn sich die Syntax ändert. Alle Verwendungen -des Befehles beziehen sich dann auf die neue Definition. - -@node Style sheets -@subsection Style sheets - -Die Ausgabe, die LilyPond erstellt, kann sehr stark modifiziert -werden, siehe @ref{Tweaking output} für Einzelheiten. Aber wie -kann man diese Änderungen auf eine ganze Serie von Dateien -anwenden? Oder die Einstellungen von den Noten trennen? Das -Verfahren ist ziemlich einfach. - -Hier ist ein Beispiel. Es ist nicht schlimm, wenn Sie nicht auf -Anhieb die Abschnitte mit den ganzen @code{#()} verstehen. Das -wird im Kapitel @ref{Advanced tweaks with Scheme} erklärt. - -@lilypond[quote,verbatim,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Es treten einige Probleme mit überlappenden Symbolen auf. Sie -werden beseitigt mit den Tricks aus dem Kapitel @ref{Moving objects}. -Aber auch die @code{mpdolce} und @code{tempoMark}-Definitionen -können verbessert werden. Sie produzieren das Ergebnis, das -gewünscht ist, aber es wäre schön, sie auch in anderen Stücken -verwenden zu können. Man könnte sie natürlich einfach kopieren -und in die anderen Dateien einfügen, aber das ist lästig. Die -Definitionen verbleiben auch in der Notendatei und diese @code{#()} -sehen nicht wirklich schön aus. Sie sollen in einer anderen -Datei versteckt werden: - -@example -%%% speichern in einer Datei "definitions.ly" -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) -@end example - -Jetzt muss natürlich noch die Notendatei angepasst werden (gespeichert -unter dem Namen @file{"music.ly"}). - -@c We have to do this awkward example/lilypond-non-verbatim -@c because we can't do the \include stuff in the manual. - -@example -\include "definitions.ly" - -\relative c'' @{ - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Das sieht schon besser aus, aber es sind noch einige Verbesserungen -möglich. -Das Glissando ist schwer zu sehen, also soll es etwas dicker erscheinen -und dichter an den Notenköpfen gesetzt werden. Das Metronom-Zeichen -soll über dem Schlüssel erscheinen, nicht über der ersten Note. Und -schließlich kann unser Kompositionsprofessor @qq{C}-Taktangaben -überhaupt nicht leiden, also -müssen sie in @qq{4/4} verändert werden. - -Diese Veränderungen sollten Sie aber nicht in der @file{music.ly}-Datei -vornehmen. Ersetzen Sie die @file{definitions.ly}-Datei hiermit: - -@example -%%% definitions.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - \override TimeSignature #'style = #'numbered - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Staff - \override TimeSignature #'style = #'numbered - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Das sieht schon besser aus! Aber angenommen Sie möchten dieses -Stück jetzt veröffentlichen. Ihr Kompositionsprofessor mag -die @qq{C}-Taktangaben nicht, aber Sie finden sie irgendwie -schöner. Also kopieren Sie die Datei @file{definitions.ly} nach -@file{web-publish.ly} und verändern diese. Weil die Noten -in einer PDF-Datei auf dem Bildschirm angezeigt werden sollen, -bietet es sich auch an, die gesamte Ausgabe zu vergrößern. - -@example -%%% definitions.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -#(set-global-staff-size 23) -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -#(set-global-staff-size 23) -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -In der Notendatei muss jetzt nur noch @code{\include "definitions.ly"} -durch @code{\include "web-publish.ly"} ausgetauscht werden. -Das könnte man natürlich noch weiter vereinfachen. Also -eine Datei @file{definitions.ly}, die nur die Definitionen -von @code{mpdolce} und @code{tempoMark} enthält, eine Datei -@file{web-publish.ly}, die alle die Änderungen für den -@code{\layout}-Abschnitt enthält und eine Datei @file{university.ly} -für eine Ausgabe, die den Wünschen des Professors entspricht. -Der Anfang der @file{music.ly}-Datei würde dann so aussehen: - -@example -\include "definitions.ly" - -%%% Nur eine der beiden Zeilen auskommentieren! -\include "web-publish.ly" -%\include "university.ly" -@end example - -Durch diese Herangehensweise kann auch bei der Erstellung -von nur einer Ausgabeversion Arbeit gespart werden. Ich -benutze ein halbes Dutzend verschiedener Stilvorlagen -für meine Projekte. Jede Notationsdatei fängt an mit -@code{\include "../global.ly"}, welches folgenden Inhalt hat: - - -@example -%%% global.ly -\version "2.12.0" -#(ly:set-option 'point-and-click #f) -\include "../init/init-defs.ly" -\include "../init/init-layout.ly" -\include "../init/init-headers.ly" -\include "../init/init-paper.ly" -@end example - - -@node When things don't work -@section When things don't work - -@menu -* Updating old files:: -* Troubleshooting (taking it all apart):: -* Minimal examples:: -@end menu - -@node Updating old files -@subsection Updating old files - -Die Syntax von LilyPond verändert sich ab und zu. Wenn LilyPond -besser wird, muss auch die Syntax (Eingabesprache) entsprechend -angepasst werden. Teilweise machen diese Veränderungen die -Eingabesprache einfacher lesbar, teilweise dienen sie dazu, neue -Eigenschaften des Programmes benutzbar zu machen. - -LilyPond stellt ein Programm bereit, das Aktualisierungen -vereinfacht: @code{convert-ly}. Einzelheiten zur Programmbenutzung -finden sich in @rprogram{Updating files with convert-ly}. - -Leider kann @code{convert-ly} nicht alle Veränderungen der Syntax -berücksichtigen. Hier werden einfache @qq{Suchen und -Ersetzen}-Veränderungen vorgenommen (wie etwa @code{raggedright} zu -@code{ragged-right}), aber einige Veränderungen sind zu -kompliziert. Die Syntax-Veränderungen, die das Programm nicht -berücksichtigt, sind im Kapitel @rprogram{Updating files with -convert-ly} aufgelistet. - -Zum Beispiel wurden in LilyPond 2.4 und früheren Versionen -Akzente und Umlaute mit LaTeX-Befehlen eingegeben, ein -@qq{No\"el} etwa ergäbe das französische Wort für Weihnachten. -In LilyPond 2.6 und höher müssen diese Sonderzeichen direkt -als utf-8-Zeichen eingegeben werden, in diesem Fall also @qq{ë}. -@code{convert-ly} kann nicht alle dieser LaTeX-Befehle -verändern, das muss manuell vorgenommen werden. - - -@node Troubleshooting (taking it all apart) -@subsection Troubleshooting (taking it all apart) - -Früher oder später werden Sie in die Lage kommen, -dass LilyPond Ihre Datei nicht kompilieren will. Die -Information, die LilyPond während der Übersetzung -gibt, können Ihnen helfen, den Fehler zu finden, aber -in vielen Fällen müssen Sie nach der Fehlerquelle -auf die Suche gehen. - -Die besten Hilfsmittel sind in diesem Fall das Zeilen- -und Blockkommentar (angezeigt durch @code{%} bzw. -@code{%@{ ... %@}}). Wenn Sie nicht bestimmen können, -wo sich das Problem befindet, beginnen Sie damit, große -Teile des Quelltextes auszukommentieren. Nachdem Sie -einen Teil auskommentiert haben, versuchen Sie, die Datei -erneut zu übersetzen. Wenn es jetzt funktioniert, muss -sich das Problem innerhalb der Kommentare befinden. -Wenn es nicht funktioniert, müssen Sie weitere Teile -auskommentieren bis sie eine Version haben, die funktioniert. - -In Extremfällen bleibt nur noch solch ein Beispiel übrig: - -@example -\score @{ - << - % \melody - % \harmony - % \bass - >> - \layout@{@} -@} -@end example - -@noindent -(also eine Datei ohne Noten). - -Geben Sie nicht auf, wenn das vorkommen sollte. Nehmen -Sie das Kommentarzeichen von einem Teil wieder weg, sagen -wir der Bassstimme, und schauen Sie, ob es funktioniert. -Wenn nicht, dann kommentieren Sie die gesamte Bassstimme -aus, aber nicht den @code{\bass}-Befehl in dem - @code{\score}-Abschnitt: - -@example -bass = \relative c' @{ -%@{ - c4 c c c - d d d d -%@} -@} -@end example - -Jetzt beginnen Sie damit, langsam Stück für Stück der -Bassstimme wieder hineinzunehmen, bis Sie die problematische -Zeile finden. - -Eine andere nützliche Technik zur Problemlösung ist es, -@ref{Minimal examples} zu konstruieren. - - -@node Minimal examples -@subsection Minimal examples - -Ein Minimalbeispiel ist eine Beispieldatei, die so klein wie -möglich ist. Diese Beispiele sind sehr viel einfacher zu -verstehen als die langen Originaldateien. Minimalbeispiele -werden benutzt, um - - -@itemize -@item Fehlerberichte zu erstellen, -@item eine Hilfeanfrage an die E-Mail-Liste zu schicken, -@item Ein Beispiel zur @uref{http://lsr@/.dsi@/.unimi@/.it/,LilyPond -Schnipselsammlung} hinzuzufügen. -@end itemize - -Um ein Beispiel zu konstruieren, das so klein wie möglich ist, -gibt es eine einfache Regel: Alles nicht Notwendige entfernen. -Wenn Sie unnötige Teile einer Datei entfernen, bietet es sich an, -sie auszukommentieren und nicht gleich zu löschen. Auf diese Weise -können Sie eine Zeile leicht wieder mit aufnehmen, sollten Sie sie -doch brauchen, anstatt sie von Anfang an neu zu schreiben. - -Es gibt zwei Ausnahmen dieser @qq{So klein wie möglich}-Regel: - -@itemize -@item Fügen Sie immer einen @code{\version}Befehl ein. -@item Wenn es möglich ist, benutzen Sie @code{\paper@{ ragged-right = ##t @}} -am Beginn des Beispiels. -@end itemize - -Der Sinn der Minimalbeispiele ist, dass sie einfach lesbar sind: - -@itemize -@item Vermeiden Sie es, komplizierte Noten, Schlüssel oder Taktangaben -zu verwenden, es sei denn, Sie wollen genau an diesen Elementen -etwas demonstrieren. -@item Benutzen Sie keine @code{\override}-Befehle, wenn sie nicht der -Zweck des Beispieles sind. -@end itemize - - -@node Scores and parts -@section Scores and parts - -Orchesternoten werden alle zweimal gesetzt. Erstens als Stimmen für -die Musiker, und dann als große Partitur für den Dirigenten. Mit -Variablen -kann hier doppelte Arbeit erspart werden. Die Musik muss nur einmal -eingegeben werden und wird in einer Variable abgelegt. Der Inhalt -dieser -Variable wird dann benutzt, um sowohl die Stimme als auch die Partitur -zu erstellen. - -Es bietet sich an, die Noten in eigenen Dateien zu speichern. Sagen wir -beispielsweise, dass in der Datei @file{Horn-Noten.ly} die folgenden -Noten eines Duetts für Horn und Fagott gespeichert sind: - -@example -HornNoten = \relative c @{ - \time 2/4 - r4 f8 a cis4 f e d -@} -@end example - -@noindent -Daraus wird dann eine eigene Stimme gemacht, indem folgende Datei -erstellt -wird: - -@example -\include "Horn-Noten.ly" -\header @{ - instrument = "Horn in F" -@} - -@{ - \transpose f c' \HornNoten -@} -@end example - -Die Zeile - -@example -\include "Horn-Noten.ly" -@end example - -@noindent -setzt den Inhalt der Datei @file{Horn-Noten.ly} an die Stelle des -Befehls in die aktuelle Datei. Damit besteht also eine Definition -für @code{HornNoten}, so dass die Variable verwendet werden kann. -Der Befehl @code{\transpose f@tie{}c'} zeigt an, dass das Argument, -also @code{\HornNoten}, um eine Quinte nach oben transponiert wird. -Klingendes @q{f} wird also als @code{c'} notiert. Das entspricht -der Notation eines Waldhorns in F. Die Transposition zeigt die folgende -Ausgabe: - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - r4 f8 a cis4 f e d -} -@end lilypond - -In der Musik für mehrere Instrumente kommt es oft vor, dass eine Stimme -für mehrere Takte nicht spielt. Das wird mit einer besonderen Pause -angezeigt, dem Pausenzeichen für mehrere Takte (engl. multi-measure -rest). Sie wird mit dem @emph{großen} Buchstaben @samp{R} eingegeben, -gefolgt von einer Dauer (@code{1}@tie{}für eine Ganze, @code{2}@tie{} -für eine Halbe usw.). Indem man die Dauer multipliziert, können längere -Pausen erstellt werden. Z. B. dauert diese Pause drei Takte eines -2/4-Taktes: - -@example -R2*3 -@end example - -Wenn die Stimme gedruckt wird, müssen diese Pausen zusammengezogen -werden. -Das wird durch eine Variable erreicht: - -@example -\set Score.skipBars = ##t -@end example - -@noindent -Dieser Befehl setzt die Eigenschaft des @code{skipBars} (@qq{überspringe -Takte}) auf wahr (@code{##t}). Wenn diese Option und die Pause -zu der Musik des Beispiels gesetzt wird, erhält man folgendes Ergebnis: - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - \set Score.skipBars = ##t - R2*3 - r4 f8 a cis4 f e d -} -@end lilypond - -Die Partitur wird erstellt, indem alle Noten zusammengesetzt werden. -Angenommen, die andere Stimme trägt den Namen @code{FagottNoten} - und ist in der Datei @file{Fagott-Noten.ly} gespeichert. Die -Partitur sieht dann folgendermaßen aus: - -@example -\include "Fagott-Noten.ly" -\include "Horn-Noten.ly" - -<< - \new Staff \HornNoten - \new Staff \FagottNoten ->> -@end example - -@noindent -Und mit LilyPond übersetzt: - -@lilypond[quote,ragged-right] -\relative c << - \new Staff { - \time 2/4 R2*3 - r4 f8 a cis4 f e d - } - \new Staff { - \clef bass - r4 d,8 f | gis4 c | b bes | - a8 e f4 | g d | gis f - } ->> -@end lilypond - - diff --git a/Documentation/de/user/world.itely b/Documentation/de/user/world.itely deleted file mode 100644 index f4982e82af..0000000000 --- a/Documentation/de/user/world.itely +++ /dev/null @@ -1,391 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c Translators: Till Rettig - -@c \version "2.12.0" - -@node World music -@section World music - -Dieser Abschnitt soll Besonderheiten der Notation aufzeigen, die -insbesondere relevant sind, um Musik nicht-westlicher Tradition -zu notieren. - - -@menu -* Arabic music:: -@end menu - -@node Arabic music -@subsection Arabic music - -Dieser Abschnitt zeigt Möglichkeiten, wie arabische Musik notiert -werden kann. - - -@menu -* References for Arabic music:: -* Arabic note names :: -* Arabic key signatures:: -* Arabic time signatures:: -* Arabic music example:: -* Further reading:: -@end menu - -@node References for Arabic music -@unnumberedsubsubsec References for Arabic music - -@cindex arabische Musik -@cindex Maqam - -Arabische Musik wurde bisher vor allem mündlich tradiert. Wenn -Musik transkribiert wird, handelt es sich meistens um ein Gerüst, -auf dem der Musiker eigene Improvisationen ausführt. Mehr und mehr -wird die westliche Notation mit einigen Veränderungen benutzt, um -die arabische Musiktradition weiterzugeben und zu konservieren. - -Einige Elemente der westlichen Notation wie etwa die Transkription -von Akkorden oder eigenständige Stimmen werden für die traditionelleren -arabischen Noten nicht benötigt. Es gibt allerdings einige andere -Probleme, wie etwa die Notwendigkeit, Zwischenintervalle zu -notieren, die sich irgendwo zwischen einem Halbton und einem -Ganzton befinden. Daneben werden auch die westlichen Halb- und -Ganztöne eingesetzt. Es muss auch möglich sein, eine große -Anzahl an maqam (Modi) der arabischen Musik zu bezeichnen und zu -gruppieren. - -Üblicherweise müssen Mikrotöne in der arabischen Musik nicht -präzise notiert werden. - -Einige Bereiche, die für die arabische Notation wichtig sind, sind -an anderer Stelle behandelt: - -@itemize -@item Notenbezeichnungen und Versetzungszeichen (inklusive Vierteltöne) -können angepasst werden, wie behandelt in -@ref{Note names in other languages}. - -@item Zusätzliche Taktarten können erstellt werden, siehe -@ref{Key signature}. - -@item Komplexe Taktarten erfordern evtl., dass Noten manual gruppiert -werden, wie gezeigt in -@ref{Manual beams}. - -@item @notation{Takasim}, rhythmisch freie Improvisationen, -können ohne Taktlinien notiert werden, siehe hierzu -@ref{Unmetered music}. - -@end itemize - - -@seealso -Notationsreferenz: -@ref{Note names in other languages}, -@ref{Key signature}, -@ref{Manual beams}. - -Schnipsel: -@rlsr{World music}. - - -@node Arabic note names -@unnumberedsubsubsec Arabic note names - -@cindex arabische Notenbezeichnungen -@cindex Notenbezeichnungen, arabisch - -An der arabischen Tradition orientierte Notenbezeichnungen können sehr -land sein und eignen sich daher nicht gut für die Notation von Musik. -Sie werden nicht benutzt. Englische Notenbezeichnungen hingegen sind -in der arabischen Musikerziehung recht unbekannt, weshalb italienische -Notenbezeichnungen (@code{do, re, mi, fa, sol, la, si}) eingesetzt -werden. Modifikatoren (Versetzungszeichen) können auch benutzt werden, -wie gezeigt in @ref{Note names in other languages}. - -Hier ein Beispiel der arabischen @notation{rast}-Tonleiter: - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - do re misb fa sol la sisb do sisb la sol fa misb re do -} -@end lilypond - -@cindex arabisches Halb-B Versetzungszeichen -@cindex Halb-B-Versetzungszeichen, arabische Musik - -Das Symbol für das Halb-B sieht anders aus als das Symbol, was -üblicherweise in arabischer Notation benutzt wird. Das -@code{\dwn}-Symbol, das in der Datei @code{arabic.ly} definiert -ist, kann als ein Workaround eingesetzt werden, wenn es notwendig -ist, das arabische Symbol zu benutzen. Das Aussehen des -Halb-Bs in den Vorzeichen kann mit dieser methode nicht verändert -werden. - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - \set Staff.extraNatural = ##f - dod dob dosd \dwn dob dobsb dodsd do do -} -@end lilypond - -@seealso -Notationsreferenz: -@ref{Note names in other languages}. - -Schnipsel: -@rlsr{World music}. - - - -@node Arabic key signatures -@unnumberedsubsubsec Arabic key signatures - -@cindex arabische Tonarten -@cindex arabische Vorzeichen - -Neben den westlichen Dur- und Moll-Tonarten sind folgende -Tonarten in @code{arabic.ly} definiert: @notation{bayati}, -@notation{rast}, @notation{sikah}, @notation{iraq} und -@notation{kurd}. Diese Tonarten definieren eine kleine -Gruppe von Maqams, die weitverbreitet sind. - -Ein Maqam kann die Tonart der Gruppe benutzen, zu der er gehört, -oder die einer benachbarten Gruppe. Zusätzlich können verschiedene -Versetzungszeichen in den Noten markiert werden. - -Um also etwa die Tonart des Maqams @qq{muhayer} folgendermaßen -notiert: - -@example -\key re \bayati -@end example - -@var{re} ist die Tonhöhe für den @qq{muhayer}-Maqam und @var{bayati} -ist die Bezeichnung des Basismaqams der Gruppe. - -Während die Vorzeichen eine Gruppe anzeigen, wird meistens der -eigentliche Maqam im Titel definiert. In diesem Beispiel müsste -also der @qq{muhayer}-Maqam im Titel erscheinen. - -Andere Maqams derselben Bayati-Gruppe, wie in der Tabelle unten -gezeigt ((bayati, hussaini, saba und ushaq) können auf die gleiche -Weise notiert werden. Sie sind alle Variationen des -Grundmaqams Bayati. Sie unterscheiden sich üblicherweise vom -grundlegenden Maqam in ihrem oberen Tetrachord oder in bestimmten -Einzelheiten, die aber nicht ihre eigentliche Qualität verändern. - -Der andere Maqam der gleichen Gruppe (Nawa) ist mit bayati durch -eine Modulation verwandt, deren Grundton in der Tabelle angezeigt -wird, wenn es sich um einen Maqam handelt, der eine Modulation -eines anderen Maqams darstellt. Nawa kann folgenderweise -notiert werden: - -@example -\key sol \bayati -@end example - -In der arabischen Musik ist ein Begriff wie bayati, der eine -Maqam-Gruppe bezeichnet, gleichzeitig auch selber ein Maqam, -meistens der häufigste dieser Gruppe. - -Hier ist eine Möglichkeit, Maqams zu gruppieren, womit die -häufigsten Maqams bestimmten Vorzeichen zugeordnet werden: - -@multitable @columnfractions 0.1 0.1 0.1 0.6 -@headitem Maqam-Gruppe - @tab Vorzeichen (@code{\key}) - @tab Finalis - @tab Andere Maqams der Gruppe (Finalis) -@item ajam - @tab major - @tab sib - @tab jaharka (fa) -@item bayati - @tab bayati - @tab re - @tab hussaini, muhayer, saba, ushaq, nawa (sol) -@item hijaz - @tab kurd - @tab re - @tab shahnaz, shad arban (sol), hijazkar (do) -@item iraq - @tab iraq - @tab sisb - @tab - -@item kurd - @tab kurd - @tab re - @tab hijazkar kurd (do) -@item nahawand - @tab minor - @tab do - @tab busalik (re), farah faza (sol) -@item nakriz - @tab minor - @tab do - @tab nawa athar, hisar (re) -@item rast - @tab rast - @tab do - @tab mahur, yakah (sol) -@item sikah - @tab sikah - @tab misb - @tab huzam -@end multitable - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - -@seealso -Notationsreferenz: -@ref{Key signature}. - -Handbuch zum Lernen: -@rlearning{Accidentals and key signatures}. - -Referenz der Interna: -@rinternals{KeySignature}. - -Schnipsel: -@rlsr{World music}, -@rlsr{Pitches}. - - -@node Arabic time signatures -@unnumberedsubsubsec Arabic time signatures - -@cindex Arabische Taktarten -@cindex Taktarten, arabisch -@cindex Semai-Form -@cindex taqasim - -Einige klassische Formen der arabischen und türkischen Musik -wie etwa @notation{Semai} haben ungewöhnliche Taktarten wie -etwa 10/8. Das kann dazu führen, dass die automatische -Bebalkung der Noten nicht zu dem Ergebnis kommt, welches in -der üblichen Notation dieser Musik eingesetzt wird. Die Noten -werden nicht anhand einer Taktzeit, sondern anhand von Kriterien -gruppiert, die man schwer mit einer automatischen Balkenfunktion -erfassen kann. Das kann umgangen werden, indem die automatische -Bebalkung ausgeschaltet wird und die Balken explizit gesetzt werden. -Auch wenn es nicht darauf ankommen sollte, eine schon notierte -Musik nachzuahmen, ist es in vielen Fällen dennoch erforderlich, -die Bebalkung anzupassen und/oder zusammengesetzte Taktarten -zu benutzen. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{compound-time-signatures.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{arabic-improvisation.ly} - - -@seealso -Notationsreferenz: -@ref{Manual beams}, -@ref{Automatic beams}, -@ref{Unmetered music}, -@ref{Automatic accidentals}, -@ref{Setting automatic beam behavior}, -@ref{Time signature}. - -Schnipsel: -@rlsr{World music}. - - -@node Arabic music example -@unnumberedsubsubsec Arabic music example - -@cindex Beispiel der arabischen Musik -@cindex arabische Musik, Beispiel -@cindex Vorlage, arabische Musik - -Hier eine Vorlage, welche den Beginn eines türkischen Semai -benutzt, der in der arabischen Musikerziehung oft herangezogen -wird, um Besonderheiten der arabischen Musiknotation, wie -etwa Zwischenintervalle und ungewöhnliche Modi, zu illustrieren. - -@lilypond[quote,verbatim] -\include "arabic.ly" -\score { - \relative re' { - \set Staff.extraNatural = ##f - \set Staff.autoBeaming = ##f - \key re \bayati - \time 10/8 - - re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 - re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb - fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb - do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 - } - \header { - title = "Semai Muhayer" - composer = "Jamil Bek" - } -} -@end lilypond - - -@seealso -Schnipsel: -@rlsr{World music} - - -@node Further reading -@unnumberedsubsubsec Further reading - -@enumerate - -@item -The Music of the Arabs von Habib Hassan Touma (Amadeus Press, 1996) -enthält eine Beschreibung von Maqams und Methoden zu ihrer -Gruppierung. - -Es gibt auch einige Internetseiten, die Maqams erklären und -teilweise auch Klangdateien zur Verfügung stellen: - -@itemize @bullet -@item -@uref{http://www.maqamworld.com/} -@item -@uref{http://www.turath.org/} -@end itemize - -Die Maqam-Gruppierungen unterscheiden sich in einigen Details, auch -wenn die allgemeinen Kriterien weithin anerkannt sind: -gemeinsame untere Tetrachorde sowie Modulation. - -@item -Es gibt keine Übereinstimmung darüber, wie die Vorzeichen für -bestimmte Maqams angegeben werden sollen. Oft wird eine -Vorzeichenart für eine ganze Maqam-Gruppe verwendet, anstatt -dass jeder Maqam eigene Vorzeichen hätte. - -Oud-Lehrbücher folgender Autoren enthalten Beispiele vor -allem türkischer und arabischer Kompositionen: - -@itemize @bullet -@item -Charbel Rouhana -@item -George Farah -@item -Ibrahim Ali Darwish Al-masri -@end itemize -@end enumerate diff --git a/Documentation/de/web.texi b/Documentation/de/web.texi new file mode 100644 index 0000000000..d6fcc28f77 --- /dev/null +++ b/Documentation/de/web.texi @@ -0,0 +1,319 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 3c814eb917c15f6f0d64f64f58046dd7b119e359 + + 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 Translators: Till Paala + +@setfilename web.info +@settitle LilyPond -- Notation für Jedermann +@documentencoding UTF-8 +@documentlanguage de +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 by the authors. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + + + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage German +@end ignore + +@copying +Copyright @copyright{} 2009--2011 by the authors. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +Diese Datei dokumentiert den Internetauftritt von LilyPond. + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@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 Handbuch zum Lernen: (lilypond-learning). Hier beginnen. +* Glossar: (music-glossary). Begriffsübersetzungen von Englisch in andere Sprachen. +* LilyPond Notationshandbuch: (lilypond-notation). LilyPond Notationshandbuch. +* LilyPond Schnipsel: (lilypond-snippets). Viele Tricks, Tipps und Beispiele. +* LilyPond Referenz der Interna: (lilypond-internals). Definitionen zum Einstellen. +* LilyPond Application Usage: (lilypond-usage). Programme installieren und benutzen. +* LilyPond Webseite: (lilypond-web). Vorschau der neuen Webseite. +* lilypond: (lilypond-usage)LilyPond starten. Das LilyPond-Programm aufrufen. +* abc2ly: (lilypond-usage)abc2ly starten. ABC-Notation importieren. +* convert-ly: (lilypond-usage)Dateien mit convert-ly aktualisieren. Ältere LilyPond-Versionen +* etf2ly: (lilypond-usage)etf2ly starten. Finale-Dateien importieren. +* lilypond-book: (lilypond-usage)LilyPond-book. Text und Musik integrieren. +* midi2ly: (lilypond-usage)midi2ly starten. MIDI importieren. +* musicxml2ly: (lilypond-usage)musicxml2ly starten. MusicXML-Dateien importieren. +@end direntry + + +@c TITLE PAGE +@ifnottex +@node Top +@top LilyPond... Notensatz für Jedermann +@translationof Top +@end ifnottex + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle Das Notensatzprogramm +@titlefont{Allgemeine Information} +@author Das LilyPond-Entwicklunsteam + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +Für LilyPond Version @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... Notensatz für Jedermann +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading Was ist LilyPond? + +LilyPond ist ein Notensatzprogramm, dass es sich zum Ziel gemacht hat, Notendruck von der bestmöglichen Qualität zu erstellen. Mit dem Programm wird es +möglich, die Ästhetik handgestochenen traditionellen Notensatzes mit computergesetzen Noten zu erreichen. LilyPond ist ein Open Source-Programm +und Teil des @uref{http://gnu.org,GNU Projekts}. + +@divClass{align-right} +Lesen Sie mehr in der @ref{Einleitung}! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Old news,,,,Ältere Neuigkeiten}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading Direktlinks + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Stabile Version + +@ref{Download, @versionStable herunterladen} + +@ref{Handbücher, @versionStable Handbücher} + +@subsubheading Entwicklerversion + +@ref{Gemeinschaft, @versionDevel herunterladen} + +@ref{Gemeinschaft, @versionDevel Handbücher} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* Einleitung:: Hier beginnen, um Noten zu setzen. +* Download:: LilyPond Herunterladen. +* Handbücher:: Lesen der Handbücher. +* Gemeinschaft:: Kontakt mit anderen Benutzern aufnehmen. +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@end ignore + + + + +@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 ************ + +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Lesen Sie + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (aufgeteilt HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (großes HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + das Handbuch wird auf viele HTML-Seiten aufgeteilt. + @*@ @ @emph{(kleiner Download für jede Seite)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + das Handbuch auf einer großen HTML-Seite. + @*@ @ @emph{(großer einmaliger Download, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + das Handbuch als PDF-Datei. + @*@ @ @emph{(großer einmaliger Download, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +Wenn Sie die Erwähnung von \topic\ hier vermissen, teilen Sie das uns +bitte mit und beachten Sie die Anleitung dazu unter +@ref{Fehlerberichte}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +Wenn Sie die Erwähnung von \topic\ hier vermissen, teilen Sie das uns +bitte mit und beachten Sie die Anleitung dazu unter +@ref{Fehlerberichte}. + +@end cartouche + +@end macro +@end ifnothtml + + + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/de/web/GNUmakefile b/Documentation/de/web/GNUmakefile new file mode 100644 index 0000000000..000480f365 --- /dev/null +++ b/Documentation/de/web/GNUmakefile @@ -0,0 +1,4 @@ +depth = ../../.. +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/de/web/community.itexi b/Documentation/de/web/community.itexi new file mode 100644 index 0000000000..e05836d39c --- /dev/null +++ b/Documentation/de/web/community.itexi @@ -0,0 +1,874 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 Translators: Till Paala + +@include included/authors.itexi +@include included/helpus.itexi + +@node Gemeinschaft +@unnumbered Gemeinschaft +@translationof Community + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Zusammenarbeit mit der Gemeinschaft + +@itemize + +@item +@ref{Kontakt}: hier erhalten Sie Hilfe, können diskutieren und +in in Kontakt mit der Gemeinschaft bleiben. + +@item +@ref{Minimalbeispiele}: sie werden @emph{sehr stark} empfohlen, +wenn man über LilyPond diskutieren will. + +@item +@ref{Fehlerberichte}: wenn etwas schief gelaufen ist. + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading LilyPond besser machen + +@itemize + +@item +@ref{Helfen Sie uns}: Ihre Mitarbeit wird benötigt. + +@item +@ref{Entwicklung}: für Mitarbeiter und Tester. + +@item +@ref{Autoren}: die Menschen, die LilyPond zu dem gemacht haben, +was es jetzt ist. + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading Verschiedenes + +@itemize + +@item +@ref{Veröffentlichungen}: was wir geschrieben haben oder was über +uns geschrieben wurde. + +@item +@ref{Ältere Neuigkeiten}: ein Archiv. + +@end itemize +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Kontakt:: +* Minimalbeispiele:: +* Fehlerberichte:: +* Helfen Sie uns:: +* Entwicklung:: +* Autoren:: +* Veröffentlichungen:: +* Ältere Neuigkeiten:: +@end menu +@divEnd + + +@node Kontakt +@unnumberedsec Kontakt +@translationof Contact + + +@divClass{column-left-bottom} +@subheading Benutzergruppen und Hilfe + +@subsubheading Mailingliste der Benutzer: @code{lilypond-user@@gnu.org} + +Diese Mailingliste ist der hauptsächliche Ort, wo Benutzer diskutieren +und einander helfen. Die Sprache der Liste ist Englisch. Zu deutschsprachiger Hilfe, siehe unten. + +@quotation +@uref{http://mail.gnu.org/mailman/listinfo/lilypond-user, +lilypond-user Abonnement und Info} + +@uref{http://mail.gnu.org/archive/html/lilypond-user/, +user Archiv1} +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +Archiv3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +mit gmaine an lilypond-user schicken} +@end quotation + +@warning{Wenn Sie Fragen stellen (immer auf Englisch) benutzen +Sie bitte @ref{Minimalbeispiele}!} + + +@subsubheading LilyPond-Schnipsel-Depot + +Das LilyPond-Schnipsel-Depot (LSR) ist eine große Sammlung durch die Benutzer +erstellter Beispiele, die frei kopiert und in eigenen Werken benutzt werden +dürfen. Schauen Sie, was andere Leute konstruiert haben und schreiben Sie +eigene Beispiele! + +@example +@uref{http://lsr.dsi.unimi.it} +@end example + +Besonders lehrreiche Beispiele aus dem LSR werden in unsere offizielle +Dokumentation eingefügt, in @ref{Schnipsel}. + +@subsubheading IRC + +Etwas Unterstützung können Sie auch auf unserem IRC-Kanal erhalten: + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +Dieser Kanal hat kein öffentliches Archiv, sodass jede Frage, die +auch für andere Benutzer nützlich sein könnte, besser auf der +Mailingliste gestellt wird. + +@html +
irc name: + + + + +
+ + +@end html + +@subsubheading Andere Sprachen + +@uref{http://www.lilypondforum.de/, +Deutsches LilyPond-Forum} + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-es, +Spanische Mailingliste} + +@uref{http://groups.google.com/group/lilypond-brasil, +Portugiesische Gruppe} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +Französische Mailingliste} + +@uref{http://www.lilypondforum.nl/, +Holländisches Forum} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Bleiben Sie informiert + +@subsubheading LilyPond Report + +Der einfachste Weg in Kontakt zu bleiben ist es, den Newsletter +unserer Gemeinschaft zu lesen, den LilyPond Report (auf Englisch). + +@example +@uref{http://news.lilynet.net} +@end example + +@subsubheading Mailingliste für neue Versionen: @code{info-lilypond@@gnu.org} + +Diese Mailingliste ist sehr wenig aktiv und kann nur gelesen werden: +hier wird über neue Versionen von LilyPond informiert. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +info-lilypond Abonnement und Info} + +@uref{http://mail.gnu.org/archive/html/info-lilypond/, +info Archiv1} +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +Archiv3} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading Diskussionen der Entwickler + +@subsubheading Entwickler-Mailingliste: @code{lilypond-devel@@gnu.org} + +Die meisten Diskussionen von Entwicklern finden auf dieser Liste +statt. Änderungen sollten hier hin geschickt werden. + +@quotation +@uref{http://mail.gnu.org/mailman/listinfo/lilypond-devel, +lilypond-devel Abonnement und Info} + +@uref{http://mail.gnu.org/archive/html/lilypond-devel/, +devel Archiv1} +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +Archiv3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +mit gmane an lilypond-devel schicken} +@end quotation + + +@subsubheading Mailingliste für Fehler: @code{bug-lilypond@@gnu.org} + +Fehlermeldungen und Diskussionen finden hier statt. + +@quotation +@uref{http://mail.gnu.org/mailman/listinfo/bug-lilypond, +bug-lilypond Abonnement und Info} + +@uref{http://mail.gnu.org/archive/html/bug-lilypond/, +bug Archiv1} +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +Archiv2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +Archiv3} + +@c don't include gmane posting here. -gp +@end quotation + +@warning{Bevor Sie eine Nachricht an die Fehler-Liste schreiben, +lesen Sie bitte unsere Richtlinien für @ref{Fehlerberichte}.} + +@divEnd + + + +@node Minimalbeispiele +@unnumberedsec Minimalbeispiele +@translationof Tiny examples + +@divClass{column-center-top} +@subheading Was sind @qq{Minimalbeispiele}? + +Ein kleines Beispiel ist ein Beispiel, von dem nichts mehr entfernt +werden kann. +@divEnd + +@divClass{column-left-bottom} +@subheading Warum sollte ich so etwas tun? + +@divClass{keep-bullets} +@itemize + +@item +Je einfacher ein Beispiel ist, um so schneller können mögliche +Hilfeleistende es verstehen und Ihnen helfen. + +@item +Ein einfaches Beispiel zeigt, dass Sie sich zuerst Mühe gegeben +haben, das Problem selber zu lösen. Wenn Leute große Abschnitte +an Code einschicken, sieht es so aus, dass sie sich auch nicht +interessieren, ob ihnen geholfen wird oder nicht. + +@item +Ein Minimalbeispiel zu erstellen zwingt Sie dazu zu verstehen, +was vorgeht. Viele falsche Problemberichte können vermieden werden, +wenn man versucht, erst einmal ein Minimalbeispiel zu erstellen. +Wenn Sie einen @qq{Bug} in Ihrem Minimalbeispiel nicht reproduzieren +können, was das Problem wohl eher zu geringes Verständnis von +LilyPond, nicht jedoch ein Fehler. + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading Wie soll ich sie erstellen? + +@divClass{keep-bullets} +@itemize + +@item +Immer die \version -Nummer einfügen. + +@item +Machen Sie es klein! Beispiele zur Platzverteilung oder dem +Seitenlayout können viele Notentakte erfordern, aber die meisten +Probleme können in einem einzigen Takt gezeigt werden. + +@item +Wenn Sie versuchen, ein Beispiel zu erstellen, versuchen Sie +zuerst, Abschnitt Ihrer Datei auszukommentieren @w{(@code{%} +oder @code{%@{ @dots{} %@}})}. Wenn Sie etwas auskommentieren +können, und das Problem immer noch gezeigt wird, entfernen Sie die +auskommentierten Abschnitte. + +@item +Vermeiden Sie komplizierte Noten, Tonarten, Schlüssel oder Taktarten, es sei denn Ihr Problem hat mit ihnen etwas zu tun. + +@item +Benutzen Sie nicht @code{\override} oder @code{\set}, es sei denn, +der Fehler zeigt sich im Zusammenhang mit diesen Befehlen. + +@end itemize +@divEnd + +@divEnd + + + + +@node Fehlerberichte +@unnumberedsec Fehlerberichte +@translationof Bug reports + +@divClass{column-center-top} +@subheading 1. Schritt: Bekannte Fehler + +Wenn Sie Eingabecode haben, der einen Programmabsturz oder +fehlerhaften Notensatz erzeugt, dann ist das ein Fehler. Es gibt +eine Liste der bekannten Fehler beim Google bug tracker: + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{Bitte fügen Sie @strong{NICHT} selber neue Fehlerberichte +hinzu! Wenn der Fehler einmal im Bug-Tracker zu sehen ist, +können Sie selber weitere Informationen hinzufügen.} + +@divEnd + + +@divClass{column-left-bottom} +@subheading 2. Schritt: Einen Fehlerbericht erstellen + +Wenn Sie einen Fehler entdeckt haben, der nicht aufgelistet ist, +helfen Sie uns bitte, indem Sie einen Fehlerbericht (bug report) +erstellen. + +@warning{Wir akzeptieren Fehlerberichte nur als +@ref{Minimalbeispiele}. Wir haben sehr begrenzte Ressourcen, +um Fehlerberichte zu bearbeiten, weshalb jedes nicht-Minimalbeispiel +zurückgewiesen wird. Fast jeder Fehler kann mit vier oder sogar +weniger Noten demonstriert werden!} + +Hier ein Beispiel eines guten bug reports: + +@example +% Accidentals should be printed for only +% the first note in a tie, but this version +% prints flats on both notes. +\version "2.10.1" + +\relative c'' @{ + bes1 ~ + bes1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading 3. Schritt: Einsenden eines Fehlerberichtes + +Wenn Sie sichergestellt haben, dass der Fehler noch nicht +bekannt ist und einen Fehlerbericht erstellt haben, senden sie +ihn bitte uns zu! + +@divClass{keep-bullets} +@itemize + +@item +Wenn Sie die Emailliste @uref{mailto:bug-lilypond@@gnu.org, ++bug-lilypond@@gnu.org} bereits abonniert haben, können Sie +ganz gewöhnlich eine E-Mail schicken. + +@item +Wenn Sie nicht Mitglied der Liste sind, können Sie trotzdem +einen Fehlerbericht über die +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +gmane lilypond.bugs web interface} schicken. + +Es gibt jedoch eine genaue Überprüfung auf der Liste, die verhindert, +dass man top-posted. Diese Überprüfung wird häufig inkorrekt +von LilyPond-Dateien alarmiert. Darum fügen Sie + +@example +> I'm not top posting. +@end example + +@noindent +(Sie @emph{müssen} das @code{>} mit einfügen) zu Anfang ihres +Fehlerberichtes hinzu. + +@end itemize +@divEnd +@divEnd + +@divClass{column-center-bottom} +@subheading 4. Schritt: Auf Antwort warten + +Wenn Ihr Fehlerbericht an die Liste versandt wurde, untersucht +unser Fehlerbeseitiger (engl. bug squad) den Bericht. Warten Sie +bitte 24 Stunden, da uns nur eine geringe Zahl an Helfern zur Verfügung stehen. Sie werden eventuell nach mehr Information gefragt oder +der Bericht wird zum Tracker hinzugefügt und Sie werden informiert, +welche Nummer er bekommen hat. + +Sie können den Fehler so markieren, dass Sie immer eine E-Mail +erhalten, wenn Aktivität für diesen Fehler vorkommt. Hierzu müssen +Sie einen Google-Account haben. +@divEnd + + +@divClass{column-center-bottom} +@subheading Optionale Hilfe: Das gewünschte Verhalten erklären + +Wenn ein Fehlerbericht einmal dem Tracker hinzugefügt wurde, kann es +sehr hilfreich sein, wenn wir sehen können, wie die gewünschte Ausgabe +aussieht. Sie können beliebig Code, Text und Bilder (auch mit +anderen Programmen erstellt) hinzufügen, die das gewünschte Bild +demonstrieren. + +@divEnd + + +@node Helfen Sie uns +@unnumberedsec Helfen Sie uns +@translationof Help us + +@divClass{column-center-top} +@helpusNeed + +@divEnd + +@divClass{column-left-top} +@divClass{keep-bullets} +@helpusTasks + +@divEnd +@divEnd + +@divClass{column-right-top} +@helpusProjects + +@divEnd + + +@node Entwicklung +@unnumberedsec Entwicklung +@translationof Development + +@divClass{heading-center} +@ifclear web_version + @heading Entwicklung für LilyPond @version +@end ifclear +@ifset web_version + @heading Entwicklung für LilyPond @versionDevel +@end ifset + + +@warning{Hier handelt es sich um nicht stabile Entwicklerversionen. +Wenn Sie nicht genau wissen, wie man LilyPond installiert und +benutzt, empfehlen wir ausdrücklich, die @ref{Download, stabilen Download}-Versionen +zu benutzen und die @ref{Handbücher, stabilen Handbücher} zu lesen.} + +@divEnd + +@divClass{column-center-top} +@subheading Veröffentlichungsnummern + +Es gibt zwei Veröffentlichungsreihen für LilyPond: stabile Versionen +und die unstabilen Entwicklerversionen. Stabile Versionen haben eine +gerade zweite Versionsnummer (also etwa 2.8, 2.10, 2.12). +Entwicklerversionen haben eine ungerade zweite Versionsnummer +(also 2.7, 2.9, 2.11). + +@divEnd + + +@divClass{column-left-top} +@subheading Download + +Anleitungen zu git und der Kompilierung finden sich im Contributor's Guide (nur auf Englisch). + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, lilypond git-Repositorium} +@end quotation + +Schreiber der Dokumentation und Tester sollten die neuesten +Binärpakete herunterladen: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource + +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Handbuch für Entwicklungsarbeiten (Contributor's guide) + +Die Entwicklung von LilyPond ist eine ziemlich komplizierte Angelegenheit. +Um neuen Mitarbeitern zu helfen und das ganze System (ziemlich) +stabil zu halten, haben wir ein Handbuch für Entwicklungsarbeiten +geschrieben (nur auf Englisch). + +@docLinksBare{Handbuch für Entwicklungsarbeiten, contributor, + @rcontribnamed{Top,Handbuch für Entwicklungsarbeiten}, + @manualDevelContributorSplit, + @manualDevelContributorBig, 500 kB, + @manualDevelContributorPdf, 2.8 MB} + +@divEnd + + +@divClass{column-center-top} +@subheading Regressionsteste + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@uref{../../input/regression/collated-files.html, Regressionsteste}: +Die Regressionsteste dieser Version. +(@uref{../../input/regression/collated-files.pdf, PDF-Version}) + +@item +@uref{../../input/regression/musicxml/collated-files.html, MusicXML-Teste}: +musicXML-Regressionsteste dieser Version. +(@uref{../../input/regression/musicxml/collated-files.pdf, PDF-Version}) + +@item +@uref{../../input/regression/abc2ly/collated-files.html, abc2ly-Teste}: +abc2ly-Teste dieser Version. +(@uref{../../input/regression/abc2ly/collated-files.pdf, PDF-Version}) + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, lilypond-book-Teste}: +lilypond-book-Teste dieser Version. +(@uref{../../input/regression/lilypond-book/collated-files.pdf, PDF-Version}) +@end itemize + +@end ifclear + +@ifset web_version +@subsubheading Entwicklungsversion + +@itemize +@item @regtestDevel (@regtestDevelPdf{}) + +@item @regtestDevelXml (@regtestDevelXmlPdf{}) + +@item @regtestDevelAbc (@regtestDevelAbcPdf{}) + +@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{}) +@end itemize + +@subsubheading Stabile Version + +@itemize +@item @regtestStable (@regtestStablePdf{}) + +@item @regtestStableXml (@regtestStableXmlPdf{}) + +@item @regtestStableAbc (@regtestStableAbcPdf{}) + +@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{}) +@end itemize + +@end ifset + + + +@subsubheading Alle Versionen + +@itemize +@item @uref{http://lilypond.org/test, Vergleiche zweier Versionen}: + +@item @uref{http://lilypond.org/download/binaries/test-output/, +Archiv aller Regressionsteste} + +@end itemize + +@divEnd +@divEnd + + + +@divClass{column-center-bottom} +@subheading Handbücher + +@ifclear web_version +@warning{Diese Handbücher sind für LilyPond @version{}; die neuesten +Handbücher finden sich auf @url{http://lilypond.org}.} +@end ifclear + +@divClass{normal-table} +@multitable @columnfractions .3 .3 .3 +@headitem Einleitung +@item +@docLinkSplit{Lernen,learning,@manualDevelLearningSplit-de} +@tab +@docLinkBig{Lernen,learning,@manualDevelLearningBig-de} +@tab +@docLinkPdf{Lernen,learning,@manualDevelLearningPdf-de} + +@item +@docLinkSplit{Glossar,music-glossary,@manualDevelGlossarySplit-de} +@tab +@docLinkBig{Glossar,music-glossary,@manualDevelGlossaryBig-de} +@tab +@docLinkPdf{Glossar,music-glossary,@manualDevelGlossaryPdf-de} + +@item +@docLinkSplit{Aufsatz,essay,@manualDevelEssaySplit-de} +@tab +@docLinkBig{Aufsatz,essay,@manualDevelEssayBig-de} +@tab +@docLinkPdf{Aufsatz,essay,@manualDevelEssayPdf-de} + +@headitem Häufig benutzte Handbücher + +@item +@docLinkSplit{Notation,notation,@manualDevelNotationSplit-de} +@tab +@docLinkBig{Notation,notation,@manualDevelNotationBig-de} +@tab +@docLinkPdf{Notation,notation,@manualDevelNotationPdf-de} + +@item +@docLinkSplit{Benutzung,usage,@manualDevelUsageSplit-de} +@tab +@docLinkBig{Benutzung,usage,@manualDevelUsageBig-de} +@tab +@docLinkPdf{Benutzung,usage,@manualDevelUsagePdf-de} + +@item +@docLinkSplit{Schnipsel,snippets,@manualDevelSnippetsSplit-de} +@tab +@docLinkBig{Schnipsel,snippets,@manualDevelSnippetsBig-de} +@tab +@docLinkPdf{Schnipsel,snippets,@manualDevelSnippetsPdf-de} + + +@headitem Seltenere Handbücher + +@item +@docLinkSplit{Webseite,web,@manualDevelWebSplit-de} +@tab +@docLinkBig{Webseite,web,@manualDevelWebBig-de} +@tab +@docLinkPdf{Webseite,web,@manualDevelWebPdf-de} + +@item +@docLinkSplit{Veränderungen,changes,@manualDevelChangesSplit-de} +@tab +@docLinkBig{Veränderungen,changes,@manualDevelChangesBig-de} +@tab +@docLinkPdf{Veränderungen,changes,@manualDevelChangesPdf-de} + +@item +@docLinkSplit{Erweitern,extending,@manualDevelExtendingSplit-de} +@tab +@docLinkBig{Erweitern,extending,@manualDevelExtendingBig-de} +@tab +@docLinkPdf{Erweitern,extending,@manualDevelExtendingPdf-de} + +@item +@docLinkSplit{Interna,internals,@manualDevelInternalsSplit-de} +@tab +@docLinkBig{Interna,internals,@manualDevelInternalsBig-de} +@tab +@docLinkPdf{Interna,internals,@manualDevelInternalsPdf-de} + +@ifset web_version +@headitem Zum Herunterladen + +@item +@doctarballDevel +@end ifset + +@end multitable + +@divEnd +@divEnd + + + +@node Autoren +@unnumberedsec Autoren +@translationof Authors + +@divClass{column-left-top} +@subheading Current Development Team + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Previous Development Team + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading Current Contributors + +@divClass{keep-bullets} +@subsubheading Programming + +@coreCurrent + +@subsubheading Font + +@fontCurrent + +@subsubheading Documentation + +@docCurrent + +@subsubheading Bug squad + +@bugsquadCurrent + +@subsubheading Support + +@supportCurrent + +@subsubheading Translation + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Previous Contributors + +@divClass{keep-bullets} +@subsubheading Programming + +@corePrevious + +@subsubheading Font + +@fontPrevious + +@subsubheading Documentation + +@docPrevious + +@c uncomment when we have any previous members -gp +@c @subsubheading Bug squad + +@c @bugsquadCurrent + +@subsubheading Support + +@supportPrevious + +@subsubheading Translation + +@translationsPrevious + +@divEnd +@divEnd + + + +@node Veröffentlichungen +@unnumberedsec Veröffentlichungen +@translationof Publications + +@divClass{column-center-top} +@subheading Was wir über LilyPond geschrieben haben + +@divClass{keep-bullets} + +@include we-wrote.itexi + +@divEnd +@divEnd + + +@divClass{column-center-bottom} + +@subheading Was andere mit LilyPond gemacht haben + +@divClass{keep-bullets} + +@include others-did.itexi + +@divEnd +@divEnd + +@contactUsAbout{wissenschaftliche Aufsätzen} + + +@node Ältere Neuigkeiten +@unnumberedsec Ältere Neuigkeiten +@translationof Old news + +@include web/news-front.itexi + +@include web/news.itexi diff --git a/Documentation/de/web/download.itexi b/Documentation/de/web/download.itexi new file mode 100644 index 0000000000..8893fe7073 --- /dev/null +++ b/Documentation/de/web/download.itexi @@ -0,0 +1,611 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745 + + 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 Translators: Till Paala + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond ist ein @strong{textbasiertes} Notationsprogramm, +es ähnelt eher einer Programmiersprache als einem graphischen +Programm zum Notensatz. Bevor Sie LilyPond herunterladen, lesen +Sie bitte über unsere @ref{Text-Eingabe}.} +@end macro + +@node Download +@unnumbered Download +@translationof Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want verisonDevel here, since the online links + @c for @version won't be up yet! + @heading Downloads for LilyPond @versionDevel + +Links für die stabile Version von LilyPond finden sich auf +@uref{http://lilypond.org, lilypond.org} +@end ifclear +@ifset web_version + @heading Downloads für LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Für Benutzer + +@itemize + +@item +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux und FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Für Entwickler + +@itemize + +@item +@ref{Quellen}: +für Paketersteller + +@item +@ref{Alte Downloads}: +alte Versionen + +@item @ref{Entwicklung}: +die letze unstabile Version + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-center-bottom} + +@subheading Programmlizenz + +LilyPond wird under der +@ref{GPL, GNU General Public License} publiziert. +@divEnd + + +@divClass{color1} + +@subheading Sponsoren + +Vielen Dank an @uref{http://www.vt.edu/, Virginia Tech} und +@uref{http://www.linuxaudio.org/, linuxaudio.org}, die unsere +Bandbreite bezahlen. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Legales + +@divClass{legal} +Alle Logos und Produktabbildungen erkennen Copyright und Trademark an. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Quellen:: +* Alte Downloads:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Generische Pakete oder distributionsabhängige Pakete? + +Viele Distributionen enthalten LilyPond in ihrem normalen +Paket-System. Diese Versionen sind einfacher zu installieren und +auch wieder zu entfernen als die generischen Pakete, aber sie können +älter sein. Wenn Sie unsere generischen Pakete benutzen wollen, +entfernen Sie zunächst die offizielle Version aus ihrem System mit +dem Paketmanager Ihrer Distribution. Lesen Sie die Dokumentation +Ihrer Distribution, wie Sie den Paketmanager einsetzen. + +@divEnd + + +@divClass{column-left-top} +@subheading Generische Pakete + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(Wenn Sie Zweifel haben, dann diese) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Installieren + +Auf der Kommandozeile schreiben Sie + +@example +cd PFAD-ZUM-DOWNLOADVERZEICHNIS +sh lilypond-@versionStable{}-OS-ART.sh +@end example + +@subsubheading Entfernen + +Auf der Kommandozeile schreiben Sie + +@example +uninstall-lilypond +@end example + +@divEnd + +@divClass{column-right-top} +@subheading Eine Datei kompilieren + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Distributionspezifische Pakete + +Benutzen Sie bitte den Paketmanager Ihrer Distribution um diese +Versionen zu installieren oder zu aktualisieren. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.2} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.2} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://download.opensuse.org/repositories/openSUSE:/Factory:/Contrib/standard/, +openSUSE: LilyPond 2.12.2} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legales + +@divClass{legal} +Alle Logos und Produktabbildungen erkennen Copyright und Trademark an. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Pakete + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Für MacOS X 10.4 und höher auf Intel-Prozessoren (wenn Sie Zweifel haben, benutzen Sie diese Version). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +Für MacOS X 10.4 oder höher auf G3 und G4 Prozessoren (alte Apple-Computer). + +@end itemize + +@subsubheading Installieren + +Doppelklicken Sie die heruntergeladene Datei, dann ziehen Sie es +dorthin, wo Sie das Programm speichern wollen. + +@subsubheading Entfernen + +Entfernen Sie den LilyPond.app-Ordner. + +@divEnd + + +@divClass{column-right-top} +@subheading Eine Datei kompilieren + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Benutzung auf der Kommandozeile + +@warning{Wenn Sie mit der GUI zufrieden sind, dann ignorieren Sie +bitte diese Anweisungen.} + + +@subsubheading MacOS X auf der Kommandozeile + +Die einfachste Art, lilypond-Skripte auszuführen ist es, eigene +@qq{Hilfsskripte} zu erstellen. + +@enumerate + +@item +Erstellen Sie einen Ordner, in dem diese Skripte gespeichert werden: + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Erstellen Sie eine Datei mit der Bezeichnung @command{lilypond} und +dem Inhalt: + +@divClass{h-scroll-auto} +@example +exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example +@divEnd + +@warning{@var{VERZ} ist üblicherweise @code{/Applications/}} + + +@item +Erstelle gleichartige Dateien @command{lilypond-book}, +@command{convert-ly} und andere Skripte, die Sie benutzen wollen, +wobei Sie @command{bin/lilypond} durch @command{bin/convert-ly} +(oder andere Programmbezeichnungen) ersetzen. + + +@item +Machen Sie die Datei ausführbar: + +@example +chmod u+x lilypond +@end example + + +@item +Jetzt müssen Sie das Verzeichnis zu Ihrem Pfad hinzufügen. Verändern +(oder erstellen) Sie eine Datei mit dem Namen @code{.profile} in +Ihrem home-Verzeichnis, sodass sie beinhaltet: + +@example +export PATH=$PATH:~/bin +@end example + +Diese Datei sollte mit einer leeren Zeile schließen. + +@end enumerate + + +@subsubheading Einzelne Skripte aufrufen + +Die Skripte -- wie @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly} und auch @command{lilypond} selber -- sind in +einer @code{.app}-Datei für MacOS@tie{}X enthalten. + +Skripte können auch von der Kommandozeile aus aufgerufen werden, +indem man sie direkt aufruft: + +@divClass{h-scroll-auto} +@example +@var{Pfad/zur}/LilyPond.app/Contents/Resources/bin/lilypond +@end example +@divEnd + +Das gilt auch für alle anderen Skripte in diesem Verzeichnis, wie +@command{lilypond-book} und @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legales + +@divClass{legal} +Alle Logos und Produktabbildungen erkennen Copyright und Trademark an. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Pakete + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Für Windows 2000, XP, Vista, and Windows 7. + +@end itemize + +@subsubheading Installieren + +@enumerate + +@item +Suchen Sie die heruntergeladene Datei und klicken Sie sie doppelt +um den Installer zu starten. Folgen Sie den Anweisung, die der +Installer gibt; wir empfehlen, dass Sie alle Installationsoptionen +annehmen und den Standardordner für die Installation akzeptieren. +Klicken Sie auf @qq{Fertigstellen} wenn der Installer fertig +ist. LilyPond ist jetzt installiert. + +@end enumerate + +@subsubheading Entfernen + +Um LilyPond zu entfernen, können Sie entweder + +@enumerate + +@item +den LilyPond-Ordner im Startmenü aufsuchen und auf@qq{Uninstall} +klicken.  Klicken Sie @qq{Fertigstellen} wenn der Deinstaller fertig +ist + +@item +oder Sie gehen über die Systemsteuerung zu Software, suchen den +Eintrag LilyPond und wählen die Option Entfernen. Klicken Sie auf +@qq{Fertigstellen}, wenn der Deinstaller fertig ist. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Compiling a file + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Benutzung auf der Kommandozeile + +@warning{Wenn Sie mit der GUI zufrieden sind, dann ignorieren Sie +bitte diese Anweisungen.} + +@subsubheading Windows auf der Kommandozeile + +Die einfachste Art LilyPond zu benutzen ist, den Installationsordner +zur Umgebungsvariable @qq{Path} hinzuzufügen. + + +@enumerate +@item +Öffnen Sie @qq{System} aus der Systemsteuerung, wählen Sie den +Reiter @qq{Erweitert} und klicken Sie auf Umgebungsvariablen. + +@item +Wählen Sie die Variable @qq{Path} aus der Umgebungsvariablenliste und klicken Sie auf Bearbeiten. Sie erhalten ein Fenster mit +der Überschrift @qq{Systemvariable bearbeiten}, fügen Sie zum Feld +@qq{Wert der Variablen} den Namen des Programmverzeichnisses +hinzu, ewta so: + +@example +[@var{voreingestellter PATH}];@var{VERZ}\LilyPond\usr\bin +@end example + +@warning{@var{VERZ} ist üblicherweise @code{C:\Program Files}.} + +@noindent +und klicken Sie auf @qq{OK} um das Fenster zu schließen. + +@end enumerate + +@subsubheading Einzelne Programme ausführen + +LilyPond-Programme +-- wie lilypond, lilypond-book, convert-ly und so weiter -- +können von der Kommandozeile aus aufgerufen werden: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legales + +@divClass{legal} +Alle Logos und Produktabbildungen erkennen Copyright und Trademark an. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Quellen +@unnumberedsec Quellen +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{Wir empfehlen @strong{nicht}, dass Sie versuchen, +LilyPond selber aus den Quellen zu kompilieren. Fast alle +Benutzer haben mehr Vorteile von der vorkompilierten Version.} + +@divClass{column-left-bottom} +@subheading Quell-Tarball + +@downloadStableSource-de{} + +Für ein ausführliche Liste aller Versionen (alt und neu) siehe +unsere +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, Download-Seite}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Anweisungen zum Kompilieren + +Anweisungen finden sich unter @rcontribnamed{Compiling LilyPond,LilyPond kompilieren}. + +@divEnd + + +@node Alte Downloads +@unnumberedsec Alte Downloads +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Alle Versionen + +Für eine ausführliche Liste aller Versionen (alt und neu) +siehe unsere +@uref{http://download.linuxaudio.org/lilypond/binaries/, Download-Seite}. + +@divEnd + + +@node GPL +@unnumberedsec GPL +@translationof GPL + +@divClass{column-center-top} +@subheading Software license + +GNU LilyPond wird unter der GNU General Public License publiziert. +Eine Einführung zu der Lizenz und unsere Gründe für diese Wahl +finden Sie in @ref{Freiheit}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd diff --git a/Documentation/de/web/introduction.itexi b/Documentation/de/web/introduction.itexi new file mode 100644 index 0000000000..ff51ba2919 --- /dev/null +++ b/Documentation/de/web/introduction.itexi @@ -0,0 +1,1297 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 Translators: Till Paala + +@node Einleitung +@unnumbered Einleitung +@translationof Introduction + +@divClass{column-center-top} +@subheading Unser Ziel + +@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, das schönere Orchesterstimmen setzen kann? + +Das Resultat ist ein System, welches Musiker von den Details des +Notensatzlayouts befreit, sodass sie sich darauf konzentrieren +können, Musik zu machen. LilyPond arbeitet mit ihnen zusammen, +um Notensatz professioneller Qualität zu erstellen, welche nach +dem ganzen Erfahrungsschatz und den Traditionen des klassischen +Notensatzes gesetzt werden. +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Die Fähigkeiten von LilyPond + +@itemize + +@item +@ref{Eigenschaften}: Was kann LilyPond? + +@item +@ref{Beispiele}: Ich will Noten sehen! + +@item +@ref{Freiheit}: LilyPond ist Open Source. + +@item +@ref{Hintergrund}: Unsere Ästhetik des computergestützten Notensatzes. + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading Lilypond im Einsatz + +@itemize + +@item +@ref{Produktionen}: Wirkliche Anwendung von LilyPond. + +@item +@ref{Rezensionen}: Was sagt man über uns? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading Wie LilyPond funktioniert + +@itemize + +@item +@ref{Text-Eingabe}: Ihr schreibt Noten als @emph{Text}?! + +@item +@ref{Leichteres Editieren}: Andere Möglichkeiten, mit LilyPond zu arbeiten. + +@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 +* Eigenschaften:: What can LilyPond do? +* Beispiele:: I want to see some music! +* Freiheit:: Freedom and the GPL. +* Hintergrund:: Computational aesthetics. +* Produktionen:: Real-life use of LilyPond. +* Rezensionen:: What do people say about it? +* Text-Eingabe:: You write music as text?! +* Leichteres Editieren:: Andere Wege, mit LilyPond zu arbeiten. +@end menu +@divEnd + + + +@node Eigenschaften +@unnumberedsec Eigenschaften +@translationof Features + + + +@divClass{column-center-top} +@subheading Eleganz + +@subsubheading Hervorragender klassischer Notensatz + +@imageFloat{flat-design,png,right} + +Durch die Benutzung von LilyPond erhalten Sie eleganten Notensatz, +der leicht zu lesen ist. Die Entwicklergemeinschaft des +Programmes hat tausende von Stunden damit verbracht, ein sehr +mächtiges Notensatzprogramm zu entwickeln, dass automatisch +schönen Notensatz ausgibt. Alle stilistischen Einstellungen, +Schriftartendesign und Algorithmen von LilyPond wurden von den +besten handgestochenen Notenbeispielen inspiriert. Die Ausgabe +von LilyPond hat das gleiche kraftvolle, ausbalancierte und +elegante Aussehen wie die besten gestochenen klassischen +Partituren. Dazu mehr in unserem @ref{Aufsatz}. + + +@subsubheading Effektive Layout-Einstellungen + +Verbringen Sie weniger Zeit damit, den Notensatz nachträglich zu +verändern: LilyPond formatiert die Noten von Anfang an richtig. +Die Platzaufteilung und die richtigen Zeilen- +und Seitenumbrüche werden von selber errechnet, um ein dichtes und gleichmäßiges +Notenbild zu erzeugen. Zusammenstöße zwischen Gesangstext, Noten +und Akkorden werden aufgelöst und alle Bögen sind automatisch +richtig gekrümmt! + +@divEnd + +@divClass{color2} +@subheading Einfach in der Benutzung + +@imageFloat{lilypond-book,png,right} + + +@subsubheading Text-basierte Eingabe + +LilyPond nimmt ASCII-Texteingabe, welche Sie mit Ihrem +Lieblingstexteditor erstellen können, schnell und bequem. Die Eingabe enthält alle +Information, sodass man keine komplexen Befehlssequenzen erinnern +muss. Speichern Sie die Eingabe einfach in einer Textdatei +für spätere Verwendung. + +@subsubheading Kombinieren Sie Noten und Text + +Sie können Notenfragmente in einen Text einfügen, ohne Bilder auszuschneiden +und einzufügen. Mit LilyPond lassen sich Noten in @LaTeX{} oder HTML +nahtlos einfügen und mit OOoLilyPond auch in OpenOffice.org-Dokumente +integrieren. Es gibt auch Plugins, mit denen LilyPond-Code für verschiedene +Blogs und Wikis ermöglicht wird, sodass auch eine Zusammenarbeit online +möglich wird. + +@subsubheading Barrierefreiheit + +Text-basierte Eingabe ermöglicht das Schreiben von Partituren auch +für Leute mit schweren physischen Behinderungen. Benutzer mit +motorischen Behinderungen, die Tastatur oder Maus nicht benutzen +können, können mit einem Spracherkennungsprogramm LilyPond-Dateien +bearbeiten. Sogar vollkommen blinde Benutzer können mit +Screenreader LilyPond-Dateien erstellen -- vollkommen unmöglich +mit graphisch-basierten Notationsprogrammen. + + +@subsubheading Erweiterbares Design + +Alle Einstellungen können verändert werden, um Ihrem persönlichen +typographischen Geschmack zu entsprechen. Wenn Ihnen das immer +noch nicht reicht, gibt es immer noch die eingebaute Scriptsprache +@qq{Scheme}, ein Dialekt des mächtigen LISP. Einstellungen, Variablen +und Funktionen sind alle in einem ausführlichen Programmhandbuch +dokumentiert. + +@divEnd + +@divClass{color3} + +@subheading Umgebung + +@imageFloat{frescobaldi-lilypond-editor-small,png,right} + +@subsubheading Freie Software + +LilyPond kann ohne jede Bezahlung heruntergeladen werden! +Wirklich, es ist vollkommen frei! Holen Sie es sich von der +Download-Seite. + +Es handelt sich um Freie Software, welche zusammen mit dem +Quellcode zur Verfügung gestellt wird -- mit der Erlaubnis, zu +verändern und zu kopieren. Stören Sie sich an einem Fehler oder +brauchen Sie dringend eine neue Funktion? Schreiben Sie sie +einfach selber, oder bezahlen Sie jemanden, der es für Sie tut. + + +@subsubheading Hervorragende Unterstützung + +LilyPond gibt es für alle verbreiteten Betriebssysteme: GNU/Linux, MacOS X und +Windows. LilyPond hat eine ausführliche Dokumentation und +hunderte von Beispieldateien. Es gibt eine aktive +Benutzergemeinschaft, die Fragen auf der LilyPond-Mailliste und in +einem deutschsprachigen Forum beantwortet, während das +Entwicklungsteam es ermöglicht, dass Probleme schnell gelöst werden. + + +@subsubheading Erweiterte Editoren + +Einige Entwickler, die selber aktive LilyPond-Benutzer sind, haben auch +spezielle Werkzeuge geschrieben, die dabei helfen sollen, LilyPond-Dateien +schneller und effektiver zu erstellen und zu editieren. Für einige +Beispiele siehe @ref{Leichteres Editieren}. + +@divEnd +@divClass{column-center-bottom} +@subheading Was jetzt? + +Sind Sie noch nicht überzeugt? Dann schauen Sie sich einige konkrete +@ref{Beispiele} an. Wenn Sie sich schon entschlossen haben, +LilyPond auszuprobieren, lesen Sie zuerst über unsere +@ref{Text-Eingabe}. +@divEnd + + + +@node Beispiele +@unnumberedsec Beispiele +@translationof Examples + +LilyPond ist ist ein sehr mächtiges und flexibles Werkzeug, dass Notensatz der unterschiedlichsten Art handhaben kann. Sehen Sie sich unsere Beispiele an und lassen Sie sich inspirieren! + +@newsItem +@subsubheading Klassische Musik + +Dieses Orgelpräludium von J. S. Bach ist ein recht typisches +Notensatzprojekt mit LilyPond. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Komplexe Notation + +Dieses Beispiel aus @emph{Goyescas} von Enrique Granados zeigt +einige der fortgeschrittenen Notensatzfunktionen, unter Anderem +Balken zwischen Notenzeilen, Hälse über die Notenzeilen hinweg und +Stimmfolgestriche. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Alte Musik + +LilyPond hat Unterstützung für verschiedene Notationsarten der +Alten Musik, wie etwa dieser Abschnitt eines Gregorianischen +Chorals. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Moderne Musik + +Zeitgenössische Komponisten werden feststellen, dass LilyPond sich +sehr gut dazu eignet, außergewöhnliche Notation darzustellen. +Hier ein Ausschnitt aus @emph{Čáry} von Trevor Bača für Bassflöte Solo. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Effiziente, flexible Erstellung von Aufführungsmaterial + +Verschiedenes Aufführungsmaterial kann aus dem selben Quellcode +erstellt werden. Hier ein Ausschnitt aus Händels @emph{Giulio +Cesare}, gesetzt von @uref{http://nicolas.sceaux.free.fr/, +Nicolas Sceaux}, als Partitur, Klavierauszug und eine Geigenstimme. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Tabulatur + +LilyPond unterstützt Tabulatur-Notation, die an ein beliebiges +Instrument angepasst werden kann, dass Tabulatur-Notation einsetzt. +Das Tabulatur-System wird automatisch anhand der Noten erstellt, +die man für das fünflinige Notensystem notiert hat. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Schenker-Graphen + +Das Standardnotenbild kann sehr stark verändert werden. Hier eine eindrucksvolle Schenker-Analyse, von Kris Schaffer mit LilyPond erstellt +für einen Artikel im @uref{http://www.linuxjournal.com/article/8364 , Linux Journal}. +Die Farben wurden zur Verdeutlichung hinzugefügt. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Vokalmusik + +LilyPond eignet sich hervorragend, um Vokalmusik aller Arten zu +notieren, von Hymnen bis zu einer Oper. Hier eine +mittelalterliche Motette mit geringfügig speziellen +Anforderungen. Die Tenorstimme ist in einer anderen Taktart als +die anderen Stimmen geschrieben, wird aber an den anderen Stimmen +ausgerichtet, als ob sie die gleiche Taktart hätte. LilyPond +kann damit sehr elegant umgehen. Beachten Sie auch die Incipite +mit Schlüsseln im Vaticana-Stil, durchgestrichene Notenhälse für +plicierte Noten und Ligaturklammern über bestimmten Notengruppen. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Anwendung für die Musikerziehung + +LilyPond eignet sich perfekt für eine Anwendung in der +Musikerziehung. Hier ein Beispiel einer einfachen +Kontrapunktaufgabe. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Popmusik + +Es ist einfach, ein Liedblatt mit Melodie, Text und Akkorden sowie +Griffsymbolen zu erstellen. In diesem Beispiel sind einige der +vordefinierten Griffdiagramme eingesetzt, aber sie können vollständig +angepasst werden, um fast jeder Situation gerecht zu werden. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Große Projekte + +LilyPond eignet sich großartig für große Projekte wie Opern oder Werke für großes Symphonieorchester. Zusätzlich ermöglicht die +texbasierte Eingabe größere Barrierefreiheit -- das folgende +Beispiel wurde von Hu Haipeng, einem blinden Komponisten, zur Verfügung gestellt. + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading Was jetzt? + +Noch immer nicht überzeugt? LilyPond ist Open Source und +garantiert Ihnen @ref{Freiheit}. Wenn Sie sich schon entschlossen +haben, LilyPond auszuprobieren, lesen zuerst über unsere +@ref{Text-Eingabe}. +@divEnd + + +@node Freiheit +@unnumberedsec Freiheit +@translationof Freedom + +@divClass{column-center-top} +@subheading Freie Software + +@uref{http://www.gnu.org/, GNU} LilyPond wird von einer +Gemeinschaft von Enthusiasten geschrieben und unterhalten. +Es wird unter der @ref{GPL, GNU General Public License} und der +@ref{FDL, GNU Free Documentation License} herausgegeben, sodass +jeder die Freiheit hat, Fehler zu verbessern, das Programm zu +ändern oder zu erweitern. Es sollte nicht hunderte Euro kosten, +ein Programm zum erstellen schönen Notensatzes zu erwerben. +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading Was für Nutzen haben die Benutzer? + +@itemize + +@item +Keine Kosten: Laden Sie das Programm und probieren Sie es. Was +haben Sie zu verlieren? + +@item +Teilen: wenn Sie das Programm gut finden, können Sie Ihren Freunden, Lehrern, Studenten oder Kollegen eine Kopie weitergeben! + +@item +Quellcode vorhanden: wenn es Sie interessiert, wie LilyPond +eine bestimmte Notation erstellt, können Sie genau verfolgen, +wie das Programm vor sich geht. + +@item +Erweiterbar: Sie können Eigenschaften hinzufügen, Fehler +verbessern und die Funktionalität ändern. Wenn Sie kein +Programmierer sind, können Sie jemanden anstellen, der diese +Aufgabe für Sie übernimmt. + +Das wird sich vielleicht für den gelegentlichen Musiker nicht +nach einem Vorteil anhören, aber die Möglichkeit, ein Programm +zu erweitern kann sich als sehr wertvoll für ernsthafte Komponisten, +Notenverlage und Wissenschaftler erweisen. + +@item +Sicherheit für die Zukunft: Wenn eine Firma bankrott geht, was +geschieht dann mit den elektronischen Noten, die von ihren +Programmen abhängen? Diese Sorge brauchen Sie nicht mit LilyPond +haben: auch wenn das gesamte Entwicklerteam auf einmal aufhören +würde (was sehr unwahrscheinlich ist), gibt es das Programm doch +immer noch legal im Internet, um es weiterzubenutzen, zu verändern +oder zu kopieren. + + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading Warum @qq{geben} die Entwickler von LilyPond ihre Arbeit umsonst her? + +Die meisten sehen die Entwicklungsarbeit an LilyPond als ein +Hobby oder freiwillige Arbeit. Man müsste also eigentlich fragen: +@qq{Warum machen Leute etwas freiwillig}? + +@itemize + +@item +Spaß: auf ein Ziel hinzuarbeiten kann sehr begeistern, besonders +wenn man im Team arbeiten kann. + +@item +Die gleichen Ziele: wir alle wollen schön gesetzte Noten, aber nur +wenige Leute haben Fähigkeiten (und niemand die Zeit), um ein +Programm zu schreiben, dass alle Situationen meistern kann. Aber +indem wir zusammen arbeiten -- einer verbessert die Form der +Bögen, ein anderer verbessert den Code für die automatischen +Balken und ein dritter schreibt die Dokumentation, wie diese +Eigenschaften genutzt werden können -- können wir unser Ziel +erreichen, sodass jeder nur einen Bruchteil der Zeit aufbringt, +die ein einzelner bräuchte. + +@item +@qq{Geschenkkultur}: Die Free Software (oder @qq{Open Source}) +Bewegung hat viele großartige Programme hervorgebracht, wie etwa +@uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox} und +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Als Dank +für den Nutzen, den sie von solchen Projekten erhalten haben, +wollen manche Entwickler der Gemeinschaft @qq{etwas zurück +geben}. + +@item +Arbeitserfahrung: zu einem Open Source Projekt beizutragen ist +eine gute Weise, sich im Programmieren, Schreiben und Übersetzen +von Dokumentation oder Design zu üben. Diese Übung hat einigen +Entwicklern geholfen, Arbeitsangebote oder Stipendien zu erhalten. + + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Was jetzt? + +Noch immer nicht überzeugt? Lesen Sie unseren ausführlichen +Aufsatz über unsere Notensatzphilosophie in @ref{Hintergrund}. +Wenn Sie sich schon entschlossen +haben, LilyPond auszuprobieren, lesen zuerst über unsere +@ref{Text-Eingabe}. +@divEnd + + +@node Hintergrund +@unnumberedsec Hintergrund +@translationof Background + +@divClass{column-center-top} +@subheading Aufzatz zu den Hintergründen + +Wir haben einen ausführlichen Aufsatz geschrieben, der die +Computerästhetik beschreibt: die Kunst, Schönheit mit dem +Computer zu erstellen. + +Wenn Sie nur eine kurze Einführung in LilyPond suchen, ist der +Aufsatz wahrscheinlich zu viel Material für Sie. Wenn Sie ihn +jetzt lesen wollen, gehen sie zu @ref{Aufsatz}. +@divEnd + +@divClass{column-center-bottom} +@subheading Was jetzt? + +Noch immer nicht überzeugt? Lesen Sie über einige der +@ref{Productions} unserer Benutzer und schauen Sie sich die Noten +an. Wenn Sie sich schon entschlossen +haben, LilyPond auszuprobieren, lesen zuerst über unsere +@ref{Text-Eingabe}. +@divEnd + + +@node Produktionen +@unnumberedsec Produktionen +@translationof Productions + +@divClass{column-left-top} +@subheading Konzerte + +LilyPond-Notensatz wurde für verschiedene Aufführungen rund um die +Welt eingesetzt. Einige Highlights: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire étrangère}, eine Oper von +@uref{http://valentin.villenave.net/,Valentin Villenave} mit +einem französischen Libretto von +@uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis Trondheim}, wurde am 1. Februar 2009 in der +@uref{http://www.orchestre-montpellier.com/, L'Opéra de Montpellier} +uraufgeführt. + +@item +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}s +Aufführung von Lullys @emph{Armide} am 15--16 Mai 2009 in Houston, +Texas (Notensatz von @uref{http://nicolas.sceaux.free.fr/, +Nicolas Sceaux}). + +@item +Instrumentale Ausschnitte von Rameaus @emph{Hippolyte et Aricie} in +der St. James Church in Manhattan am 8. Mai 2009 von Frederick +Renz und seinem Ensemble @uref{http://www.earlymusicny.org/, +Early Music New York} (Notensatz von Nicolas Sceaux). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Publizierte Noten + +@divClass{keep-bullets} +@itemize + +@item +@uref{http://www.mutopiaproject.org/index.html, Mutopia Project}, +über 1500 Stücke klassischer Musik zum freien Notendownload und +die beste Werbung für LilyPond. + +@c don't make this "Mutopia" a link, since that looks silly. +@item +@uref{http://etudeapp.com, Etude}, @qq{Notensatz unter Drogen} ist +eine iPhone-App, die Klaviermusik, gesetzt mit LilyPond, anzeigt. Hinzu +gehören viele Stücke von Mutopia. Die App enthält auch eine virtualle +Klaviatur, die anzeigt, welche Tasten gedrückt werden müssen, um +Anfängern beim Notenlesen zu helfen. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing}, +qualitativ hochwertige Partituren von Kirchenmusik, sowohl zum +direkten Download als auch auf Papier erhältlich. + +@item +@uref{http://shadylane.fr/, The Shady Lane +Publishing}, +ein @qq{Mikro-Notenverlag}, der es sich zum Ziel gesetzt hat, +eine neue Musikökonomie zu unterstützen, die den Musikern und +Musikliebhabern näher steht. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading Was jetzt? + +Immer noch nicht überzeugt?  Lesen Sie einige der @ref{Rezensionen} +unserer Benutzer. Wenn Sie sich schon entschlossen +haben, LilyPond auszuprobieren, lesen zuerst über unsere +@ref{Text-Eingabe}. +@divEnd + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/testimonials + +@node Rezensionen +@unnumberedsec Rezensionen +@translationof Reviews + +@divClass{column-left-top} +@subheading Publizierte Artikel + +@divClass{keep-bullets} +@itemize + +@item +Mai 2010 + +Peter Kirn publiziert auf der Create Digital Music-Webseite einen +@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,LilyPond-Test}. +Er nimmt einen gerechten Standpunkt in Bezug auf die Benutzbarkeit +ein, lobt die hohe Qualität des LilyPond-Notensatzes und fordert dazu aus, das +Programm einmal auszuprobieren. + +@item +September 2009 + +Die deutsche LinuxUser-Zeitschrift schrieb einen +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +Artikel über LilyPond}. + +@item +August 2009 + +Ann Drinan präsentiert auf der +@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org}-Webseite +Kommentare von zwei Orchsterbibliothekaren, die sich über die Benutzung von +Software zur Unterhaltung ihrer Bibliotheken unterhalten. + + @item +June 2009 + +In einem @uref{http://news.lilynet.net/Free-Music-Now, Artikel} +in der Jahreszeitschrift der @emph{National Conservatory Parent +Association} erklärt der französischer Komponist und LilyPond-Mitarbeiter +Valentin Villenave wie freie Lizenzen und insbesondere mit LilyPond +gesetzte Partituren dazu beitragen, dass notierte Musik allen zugänglich +gemacht wird. + +@item +Februar 2008 + +In @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, +Artikeln auf seiner Homepage} vergleicht Andrew Hawryluk Finale +und LilyPond generell und ermittelt detailliert die +Notensatzfähigkeiten beider Programme. Der zweite Artikel +ist eine informative Analyse des Notensatzes von +Rachmaninoffs Klavierprelude 6, mit einem Vergleich einer +handgestochenen Edition. + +@item +Juni 2006 + +@uref{http://distrowatch.com,DistroWatch} erteilt LilyPond einen +Preis und schreibt +@uref{http://distrowatch.com/weekly.php?issue=20060605,writes} +@qq{Ladies and Gentleman, we are pleased to announce that, based +on readers' requests, the DistroWatch May 2006 donation has been +awarded to LilyPond (@euro{} 190.00) and Lua (US$250.00).} + +@item +Dezember 2005 + +@uref{http://linuxjournal.com,Linux Journal} veröffentlicht einen +Artikel unter dem Titel +@uref{http://www.linuxjournal.com/article/8364, Make Stunning +Schenker Graphs with GNU LilyPond}. Es handelt sich um einen +tiefgehenden, aber sehr praktischen Artikel mit gestochen +scharfen LilyPond-Graphiken. Der Autor Kris Shaffer merkt an: +»GNU Lilypond erstellt schöne Graphik, die kommerzielle Alternativen +als zweite Wahl erscheinen lassen.« + +@item +20. August, 2005 + +Die belgische Zeitung De Standaard untersucht, was die Autoren von +Freier Software antreibt in dem Artikel +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} (Non-profit-Teilen von +Wissen) in ihrer `DS2 bijlage'. LilyPond wird als Beispiel +benutzt und der Artikel ist unterteilt durch Auszüge aus einem +E-Mail-Interview mit Jan Nieuwenhuizen. Hiermit erscheint LilyPond +gleichzeitig das erste Mal in der großen gedruckten Presse. + +@item +Juni 2005 + +Ein französischer Artikel über LilyPond Version 2.6 erscheint auf +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +Oktober 2004 + +Die Editoren von Computer!Totaal, einer holländischen +Computerzeitschrift, +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, +beschreiben LilyPond} in der Ausgabe Oktober 2004 als: @qq{Wunderbare +freie (Open Source) Software [..] Die Partituren von LilyPond +sind ausnahmslos schön [..] ein sehr mächtiges System das fast alles +tun kann.} + +@item +Juli, August 2004 + +Dave Phillips schrieb einen Einleitungsartikel für das +@uref{http://linuxjournal.com,Linux Journal}: At +the sounding edge: LilyPond, Teil +@uref{http://www.linuxjournal.com/article/7657, eins} und +@uref{http://www.linuxjournal.com/article/7719, zwei}. + +@item +März 2004 + +Chris Cannam +@uref{http://www.all-day-breakfast.com/cannam/linux-musician/lilypond.html,interviewte} +Han-Wen Nienhuys und Jan Nieuwenhuizen auf linuxmusician.com +(ursprüngliche Seite funktioniert nicht mehr). Das Interview wurde +auch in einer @uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, +slashdot Story} besprochen. + +@item +Februar 2004 + +Der Jazz-Sänger Gail Selkirk schreibt über +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Diving into LilyPond}. @qq{... man kann Liedblätter oder volle +Orchsterpartituren erstellen, und das Ergebnis kann einen +erstaunen.} +@uref{http://www.computermusic.co.uk/, Computer Music Special}, +Nummer CMS06. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading Empfehlungen von Benutzern + + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, Erstes Cello, New York Philharmonic + +@qq{@dots{} Ich habe einige Zugabestücke für Solo-Cello geschrieben + und mit LilyPond gedruckt. Sie sollen bei Schirmer herausgegeben werden. Ich + bin mir sicher, dass ihre eigene Version nicht halb so scharf gestochen ist + wie meine!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, Kompositionsprofessor, Musikhochschule Freiburg + +@qq{Auch wenn ich [LilyPond] noch nicht sehr gut kenne, bin ich schon außerordentlich + beeindruckt. Ich habe das Programm benutzt, um eine Motette von Josquin Desprez + in Mensuralnotation zu notieren. Es steht außer Frage, dass LilyPond in + der Geschwindigkeit, Einfachheit in der Benutzung und Notensatz alle + anderen Notationsprogramme leicht überholt.} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, Komponist (Brüssel, Belgien) + +@qq{[Nach der ersten Orchesterprobe] wurde die Qualität meiner Notenblätter + immer wieder gelobt. Und das, obwohl ich keine der vielen Möglichkeiten + in Anspruch genommen hatte, den Satz zu verbessern. Was ich dem Orchester + ausgeteilt habe, war im Grunde die rohe, unveränderte LilyPond-Version.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, Komponist (Toronto, Kanada) + +@qq{Anerkennung und Dank an das Entwicklungsteam für ihre unglaubliche + Arbeit. Ich habe noch nie etwas gesehen, das dem Satz nahekommt, den ich + mit LilyPond erhalte. Ich bin vollkommen überzeugt, dass meine + Publikationsanforderungen über alle Erwartungen erfüllt werden, + da ich dieses Programm verwenden kann. [...] sozusagen unveränderter + Notensatz von LilyPond [...] sieht besser aus als alle @qq{professionellen} + Publikationen der letzten Zeit, mit denen ich ihn verglichen habe (so ungefähr + alle Warner Bros.-Noten und sogar viele der @qq{traditionellen Notenhäuser}). [...] + } + +@qq{Das sollen erstmal Finale/Sibelius/Igor/usw. erreichen!!!!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, Chefprogrammierer des @uref{http://www.rosegardenmusic.com/, RoseGarden}-Projekts + +@qq{LilyPond ist offensichtlich der Super-Gorilla [des Notensatzes].} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} + +@qq{Die Art, in der die Noten mit LilyPond eingegeben werden, +lässt mich musikalischer denken -- es gab Zeiten, wenn ich vergeblich +versucht habe, LilyPond zu erklären, wie etwas in Noten gesetzt +werden soll, nur um festzustellen, dass, auch wenn ich es genauso +hinkriegen würde, wie der Komponist es wollte, die Noten +trotzdem sehr unklar zum Lesen sein würden. LilyPond macht es +für mich sehr viel einfacherer, in meiner Doppelrolle als Editor +und Notensetzer zu arbeiten.} + +@qq{Ich habe LilyPond ausschließlich für meine startende +Notendruckfirma benutzt. So gut wie ohne Ausnahme waren alle +Komponisten hingerissen von der Qualität des Notensatzes, wenn +ich ihnen die Korrekturfahnen ihrer Musik gezeigt habe. Ich +verdiene selber auch einen Teil dieses Lobes, denn ich habe viel +Zeit damit verbracht, die Ausgabe zu verändern, insbesondere +die Bindebögen von Akkorden -- aber LilyPond gibt einen wunderbaren +Punkt zum Beginnen, eine sehr intuitive Schnittstelle und die +Möglichkeit, absolut alles zu verändern, wenn ich mir nur die +Zeit nehme. Ich bin überzeugt, dass kein kommerzielles Produkt +dem auch nur nahe kommen kann.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, Bassposaunist, Iceland Symphonieorchester + +@qq{Ich finde LilyPond einfach toll [..] Je mehr ich darüber lerne, +desto mehr mag ich es!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, E-Gitarrenspieler (Ja, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, verwandt mit}) + +@qq{Ich bin total beeindruckt von LilyPond [..]} + +@qq{DAS IST DAS BESTE PROGRAMM ALLER ZEITEN!!!} + +@qq{Vielen, vielen Dank an euch alle für die harte Arbeit und die Hingabe!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, @uref{http://www.mutopiaproject.org/, Mutopia}-Mitarbeiter + +@qq{Ich hatte so eine Hassliebe zu ihm entwickelt. Liebe, weil + das erste Notenblatt, das ich gesehen hatte, so gut aussah. Die + Beschreibung lügt, wenn es um die Schönheit von LilyPond + geht -- das ist viel zu bescheiden! [...] da LilyPond immer besser + wird und ich mich mehr damit auseinander setze, wie Sachen in + Scheme gemacht werden, habe ich viel weniger Frustrationen. Auf + jeden Fall wollte ich sagen: Danke, dass ihr LilyPond anbietet, es + ist wirklich toll!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, Dirigent am Koblenzer Theater und herausragender GNU-Hacker + +@qq{Überhaupt macht LilyPond saubere Arbeit!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, Entwickler von @uref{http://jackaudio.org/, JACK} und @uref{http://www.ardour.org/, Ardour} + +@qq{Ich finde, [LilyPond ist] ein + außerordentliches Programm, und es erreicht wunderschöne + Ergebnisse. Als ich im letzten Jahr ein Interview darüber gelesen + habe, habe ich verschiedenen Freunden über sein Potential gepredigt.} +@divEnd + +@divClass{testimonial-item} +@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, Dr. Mika Kuuskankare}, Forscher an der @uref{http://siba.fi, Sibelius-Akademie Finnland}, Komponist +und Autor des Expressive Notation Package (ENP) + +@qq{Ich habe eine große Achtung vor LilyPond und denen, die es geschrieben +haben, denn ich weiß aus eigener Erfarhung, wie schwierig solch ein +Programm sein kann.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, Musiker, +professioneller Notensetzer und lange Zeit Score-Benutzer + +@qq{Den allergrößten Dank an alle, die zu diesem Projekt beitragen. Ich habe SCORE für einen großen Musikverlag in den 90er Jahren sehr intensiv benutzt, +aber jetzt sehe ich, dass LilyPond es mir endlich ermöglicht, genau das +Aussehen des Notendrucks zu erreichen, das ich will, besonders wenn es sich +nicht um "Standardlösungen" handelt.} +@divEnd + + + +@divEnd + + +@divClass{column-center-bottom} +@subheading Was jetzt? + +Lesen Sie über unsere @ref{Text-Eingabe}. +@divEnd + + + +@node Text-Eingabe +@unnumberedsec Text-Eingabe +@translationof Text input + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading Musik @qq{kompilieren} + +@imageClickable{nereid-shot-small,png, (Klick zum Vergrößern), nereid-shot,png, right} + +LilyPond ist ein @emph{kompiliertes} System: es wird über eine +Text-Datei gestartet, die die Noten beschreibt. Die resultierende Ausgabe +wird am Bildschirm betrachtet oder ausgedruckt. In einer +bestimmten Beziehung ist LilyPond eher eine Programmsprache als +ein graphisches Notensatzprogramm. + +Man schreibt die Noten nicht, indem man Notensymbole von einer +graphischen Leiste zieht und auf einem sich dynamisch immer +wieder erneuernden Notensystem platziert. Anstatt dessen schreibt +man Text. Dieser Text wird von LilyPond interpretiert (oder +@qq{kompiliert}) und dabei schön aussehender Notensatz produziert. + +Leute, die an das graphische Notensetzen gewöhnt sind, können eine +Weile brauchen, um die neue Arbeitsweise zu lernen, aber das +Resultat macht den Aufwand wett. + +@warning{Wir zeigen einen kurzen Überblick über unsere Texteingabe +-- es ist nicht so kompliziert, wie es sich anhört. Machen Sie +sich keine Sorge, wenn Sie nicht jedes Detail der Beispiele +verstehen. In unserer Dokumentation für Anfänger werden alle +Einzelheiten sehr viel ausführlicher behandelt.} + + +@subsubheading Es ist so einfach wie A B C + +Noten werden durch Buchstaben und Zahlen kodiert. Besondere Kommandos werden +mit einem Backslash eingegeben. + +@imageFloat{text-input-1-annotate-de,png,center} +@imageFloat{text-input-1-output,png,center} + +Versetzungszeichen werden durch verschiedene Endungen hinzugefügt: @code{-is} +nach der Note setzt ein Kreuz, @code{-es} dagegen ein b (-- das sind die deutschen +Endungen, Endungen in anderen Sprachen sind auch möglich). LilyPond entscheidet selber, wo +es die Versetzungszeichen platziert. + +@imageFloat{text-input-2-annotate-de,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading Popmusik + +Akkorde und Liedtext können einfach zu einem Lead Sheet kombiniert werden. + +@imageFloat{text-input-pop-annotate-de,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading Orchesterstimmen + +Die Eingabedatei enthält die Noten eines +Stückes. Partitur und Stimmen können aus einer einzigen Eingabe-Datei +erstellt werden. Wenn man eine Note verändert, findet sich die Veränderung +also gleichzeitig in der Stimme und der Partitur wieder. Damit die Noten mehrfach +verwendet werden, sollten sie einer Variablen zugewiesen werden: + +@imageFloat{text-input-parts-both-annotate-de,png,center} + + +Mit dieser Variable kann dann eine Einzelstimme erstellt werden (hier transponiert, +die Pausen sind zusammengezogen): + +@imageFloat{text-input-parts-single-annotate-de,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +Die gleiche Variable wird dann in der Partitur benutzt (hier in der Originaltonhöhe): + +@imageFloat{text-input-score-annotate-de,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Dokumentation für Anfänger + +Es ist uns klar, dass diese Art, Noten zu schreiben, vielen Benutzern +seltsam vorkommt. Aus diesem Grund haben wir eine ausführliche +Anleitung verfasst, die neuen Benutzern helfen soll. Man sollte +mit der @ref{Einführung} beginnen. Das Handbuch zum Lernen +funktioniert als Einführung und Beginn für das Arbeiten mit LilyPond; +hier werden viele Fragen beantwortet, bevor man sie überhaupt +stellen konnte! + +Lesen Sie bitte das Handbuch zum Lernen bevor Sie sich über +Fehler beschweren! Neue Benutzer denken manchmal, dass LilyPond +nicht richtig funktioniert, während das Programm in Wirklichkeit +genau das tut, wozu es geschrieben worden ist. + +Weitere Information findet sich unter @ref{Handbücher} + + +@subsubheading Einfachere Editionsumgebungen + +@imageClickable{lilykde-screenshot-small,png, + (Klick zum Vergrößern),lilykde-screenshot,png,right} + +LilyPond kümmert sich vor allem darum, Noten in bester Qualität +zu setzen -- das Programmieren einer graphischen Benutzeroberfläche +(GUI) würde uns nur von dieser Aufgabe ablenken. Es gibt dennoch +andere Projekte, deren Ziel es ist, LilyPond-Dateien zu erstellen. + +Einige Editionsumgebungen beinhalten Syntaxhervorhebung, automatische +Vervollständigung und vorgefertigte Vorlagen. Andere Programme +stellen tatsächliche eine GUI zur Verfügung, mit der man graphisch +eine Partitur editieren kann. Mehr Information finden Sie unter +@ref{Leichteres Editieren}. + + + +@divClass{column-center-bottom} +@subheading Was jetzt? + +Sie sind jetzt bereit, @ref{Download, LilyPond herunterzuladen}. +Sind Sie immer noch nicht überzeugt? Lesen Sie @ref{Leichteres +Editieren}. + +@divEnd + + +@node Leichteres Editieren +@unnumberedsec Leichteres Editieren +@translationof Easier editing + + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (Klick zum Vergrößern),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +Als Plugin für den @uref{http://www.jedit.org,jEdit}-Texteditor +erstellt, ist das LilyPondTool das textbasierte Werkzeug mit den +meisten Eigenschaften, um LilyPond-Partituren zu setzen und zu +editieren. Hierzu gehören ein Document Wizard um neue Dateien +(auch mit Gesangstexten) einfacher zu erstellen und ein eingebetteter +PDF-Betrachter mit fortschrittlicher Unterstützung für +point-and-click. + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (Klick zum Vergrößern),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi ist ein eigener Musik- und Texteditor für LilyPond +mit eingebauter PDF-Vorschau, einer vielseitigen Hilfe zum +Erstellen neuer Partituren und vielen Editionseigenschaften. +Er ist auf Grundlage der KDE4-Bibliotheken programmiert und läuft +zur Zeit auf allen Arten von Linux-Systemen und anderen +UNIX-artigen Betriebssystemen. + +@divEnd + +@divClass{column-center-top} +@subheading Denemo + +@imageClickable{screenshot-denemo-small,png, + (Klick zum Vergrößern),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo ist ein graphischer Editor, welcher LilyPond-Dateien +produzieren kann und auch Audioplayback erlaubt. Hiermit kann die LilyPond-Datei +parallel zum graphischen Notenbild betrachtet werden. Zusätzliche +Veränderungen und Anpassungen können an die Objekte angehängt +werden -- sie werden mit der Denemo-Datei gespeichert, sodass der +Benutzer graphisch weiterarbeiten kann. + +Wenn man den Cursor im LilyPond-Text bewegt, wird er auch im Notenbild +verschoben, und Syntaxfeher in LilyPond-Anpassungen werden in +Textansicht markiert, wenn man von dort aus druckt. + +@divEnd + +@divClass{column-center-top} +@subheading Texteditoren + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs ist ein Texteditor mit sprachensensitiven Eigenschaften +für sehr viele Computersprachen. Emacs ist ein sehr stark +erweiterbarer Editor, welcher auch als Integrierte +Entwicklungsumgebung benutzt werden kann. Es gibt einen +@qq{lilypond}-Modus, der die Sprachdefinitionen für das Arbeiten +mit LilyPond-Dateien zur Verfügung stellt. Einer unserer Entwickler +hat auch einen Hauptmodus für Emacs, +@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi} geschrieben. + +@uref{http://www.vim.org} + +Vim ist ein minimaler Texteditor und eine Erweiterung des älteren +Unix-Editors @command{vi}. Er ist auch erweiterbar und konfigurierbar. + +Allgemein gilt, dass Sie wahrscheinlich zu einem anderen Editor +greifen werden, wenn Sie nicht schon von Anfang an mit Emacs oder +Vim vertraut sind. + +Weiter Information zum Einstellen von Emacs und Vim findet sich unter +@rprogram{Unterstützung von Texteditoren}. + + +@sourceimage{logo-macosx,,,} +@uref{http://www.uoregon.edu/~koch/texshop} + +Der TexShop-Editor für MacOS@tie{}X kann erweitert werden, sodass +er LilyPond, @command{lilypond-book} und @command{convert-ly} +vom Editor aus ausführen kann. Hierzu wird eine Erweiterung +eingesetzt, die man hier erhält: + +@example +@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}. +@end example + + +@sourceimage{logo-macosx,,,} +Es gibt ein LilyPond-Paket für TeXMate, ein kommerzieller Editor für +MacOS. Es kann installiert +werden, indem man folgendes auf der Kommandozeile ausführt: + +@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 + + +@divClass{column-center-top} +@subheading Andere Programme können LilyPond-Doce exportieren + + +@subsubheading Score, Tab- und MIDI-Editoren: + +@itemize +@item +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}, ein Audio- und MIDI-Sequenzierer, +der auch einen Noteneditor für einzelne Systeme unterstützt. + +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, +auf der @uref{http://cairographics.org, Cairo}-Bibliothek basierend, +hat experimentelle Unterstützung für LilyPond-Export. + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, ein Tabulator-Editor und +-Spieler, stellt neben Tabulatur auch eine Partiturvorschau zur +Verfügung und kann nach LilyPond exportieren. + +@item +@uref{http://musescore.org,MuseScore} hat unvollständigen Export für LilyPond, +wird aber aktiv entwickelt. + +@item +@uref{http://canorus.org,Canorus} kann nach LilyPond exportieren, ist allerdings noch im Beta-Stadium. Testpersonen sind willkommen. + +@item +@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, +ein monophoner Echtzeitkonverter von MIDI nach LilyPond. + +@end itemize + +@subsubheading Algorithmische Code-Generatoren + +@itemize + +@item +@uref{http://strasheela.sourceforge.net, Strasheela} ist @qq{a +highly expressive constraint-based music composition system}. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, eine LISP-Bibliothek, +mit der Notation für Computermusik-Programmumgebungen generiert wird. + +@end itemize +@divEnd + + +@divClass{column-center-top} + +@subheading Weitere, nicht aktiv entwickelte Programme + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} wurde durch +@uref{http://www.frescobaldi.org/,Frescobaldi} ersetzt und existiert als +LilyKDE3 für KDE 3.5 und lilypond-KDE4 für KDE 4.1. + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, mit dem man +@uref{http://www.musicxml.com/xml.html,MusicXML} importieren kann, wird +als Fork unter +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +und @uref{http://canorus.org,Canorus} weiterentwickelt. + + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} ist ein graphisches +Notationsprogramm, das wie ein Zahlenblock funktioniert, mit dem man +LilyPond-Notation erstellen kann. + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Was jetzt? + +Sie sind jetzt bereit, @ref{Download, LilyPond herunterzuladen}. + +Sind Sie noch immer nicht überzeugt? Viele Komponisten, Musiker +und Dirigenten haben gelernt, wie man Noten in unserem Eingabeformat +schreibt. Erfahrene Benutzer haben sogar berichtet, dass sie +eine volle Partitur in LilyPond schneller notieren können als mit +Klaviertastatur oder Maus plus GUI! Vielleicht wollen Sie noch +einmal schauen, welche @ref{Eigenschaften}, @ref{Beispiele} oder +@ref{Freiheit} LilyPond ermöglicht oder über die @ref{Produktionen} +und @ref{Rezensionen} unserer Benutzer lesen. Zusätzlich +haben wir unsere Herangehensweise an die Computerästhetik der +klassischen Notensatzkunst im unserem @ref{Hintergrund} erklärt. + +@subheading Legales + +@divClass{legal} +Alle Logos und Produktabbildungen erkennen Copyright und Trademark an. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/de/web/manuals.itexi b/Documentation/de/web/manuals.itexi new file mode 100644 index 0000000000..804159c163 --- /dev/null +++ b/Documentation/de/web/manuals.itexi @@ -0,0 +1,609 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + 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 Translators: Till Paala + +@node Handbücher +@unnumbered Handbücher +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, Einzelheiten zu \reference\}) +@spanEnd +@end macro + +@divClass{heading-center} +@ifclear web_version + @heading Handbücher für LilyPond @version +@end ifclear +@ifset web_version + @heading Handbücher für LilyPond @versionStable +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Einleitung + +@itemize + +@item +@ref{Text-Eingabe}: +LilyPond ist ein @strong{textbasiertes} Notensatzprogramm. Wenn +Sie mit diesem Konzept nicht vertraut sind, lesen Sie darüber bitte +jetzt! + +@item +@ifWebLinks{@manualStableLearningSplitNoName-de,@rlearningnamed{Top,Einführung}} +eine sanfte @qq{unbedingt lesen!} Einführung in LilyPond. +@details{Einführung} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossar}} +@emph{(optional)} hier werden musikalische Begriffe auf englisch erklärt und +die passenden Übersetzungen in vielen anderen Sprachen gegeben. +@details{Glossar} + + + +@item +@ifWebLinks{@manualStableEssaySplitNoName-de,@ressaynamed{Top,Aufsatz}} +@emph{(optional)} Hintergrundinformation über den Notensatzprozess und die +Ästhetik des Notenstichs im 19. Jahrhundert. +@details{Aufsatz} + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Normale Benutzung + +@itemize + +@item +@ifWebLinks{@manualStableNotationSplitNoName-de,@rusernamed{Top,Notation}} +eine Syntaxreferenz. +@details{Notation} + +@item +@ifWebLinks{@manualStableUsageSplitNoName-de,@rprogramnamed{Top,Benutzung}} +wie die Programme aufgerufen werden. +@details{Benutzung} + +@item +@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Schnipsel}} +kurze Tricks, Tipps und Beispiele. +@details{Schnipsel} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Unregelmäßige Benutzung + +@itemize + +@item +@ref{FAQ}: +Häufig gestellte Fragen. + +@item +@ref{Top,Web}: +Dieses Dokument. + +@item +@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Änderungen}} +Was ist neu? +@details{Änderungen} + +@item +@ifWebLinks{@manualStableExtendingSplitNoName-de,@rextendnamed{Top,Erweitert}} +clevere Anpassungen. +@details{Erweitert} + +@item +@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Interna}} +Referenz für Anpassungen. +@details{Interna} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Anderes Material + +@itemize + +@item +@ref{Übersetzt}: +der Übersetzungsstatus für nicht Nicht-Englischsprachige. + +@item +@ref{Alles}: +Handbücher zum Herunterladen und alte Handbücher. + +@item +@ref{Entwicklung}: +Handbücher für die Entwicklerversion. + +@item +@ref{FDL}: +Diese Handbücher sind unter der GNU Free Documentation License herausgegeben. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Einführung:: +* Glossar:: +* Aufsatz:: +* Notation:: +* Benutzung:: +* Schnipsel:: +* FAQ:: +* Web:: +* Änderungen:: +* Erweitert:: +* Interna:: +* Übersetzt:: +* Alles:: +* FDL:: +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Einführung +@unnumberedsec Einführung +@translationof Learning + +@divClass{column-left-top} +@subheading Handbuch zum Lernen + +Dieses Buch erklärt, wie man beginnen sollte, LilyPond zu erlernen. +Hier werden auch einige Schlüsselkonzepte und einfache Begriffe +erklärt. Sie sollte diese Kapitel von vorne bis hinten lesen. + +Am Ende jeden Abschnitts gibt es einen Absatz @strong{Siehe auch}, +welcher Links in andere Abschnitte enthält. Beim ersten Durchlesen +sollten Sie diesen Verlinkungen nicht folgen. Wenn Sie das gesamte +Handbuch einmal gelesen haben, werden Sie wahrscheinlich einige +Abschnitte noch einmal lesen und dann auch den Links folgen, um +weitere Informationen zu erhalten. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Einführung, learning, + @rlearningnamed{Top,Einführung}, + @manualStableLearningSplit-de, + @manualStableLearningBig-de, 1.5 MB, + @manualStableLearningPdf-de, 3 MB} + +@divEnd + + +@node Glossar +@unnumberedsec Glossar +@translationof Glossary + +@divClass{column-left-top} +@subheading Glossar + +Hier werden musikalische Fachbegriffe auf Englisch erklärt und +Übersetzungen zu einer Reihe von Sprachen gegeben. Wenn Sie sich +mit der Terminologie der Musik und Musiknotation nicht auskennen +(und vor allem, wenn Sie Englisch nicht fließend sprechen) lohnt +es sich sehr, dieses Glossar zu Hilfe zu ziehen. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Glossar, music-glossary, + @rglosnamed{Top,Glossar}, + @manualStableGlossarySplit-de, + @manualStableGlossaryBig-de, 1 MB, + @manualStableGlossaryPdf-de, 1.5 MB} + +@divEnd + + +@node Aufsatz +@unnumberedsec Aufsatz +@translationof Essay + +@divClass{column-left-top} +@subheading Aufsatz + +Dieses Buch enthält eine kurze Geschichte des Musiknotensatzes und +anschließend eine Betrachtung der Notensatztechniken von LilyPond. +Ein Vergleich von LilyPond mit anderen Notensatzprogrammen wird +auch vorgenommen. + +@warning{Die detailierten typographischen Beispiele lassen sich +in der PDF-Version einfacher analysieren, weil sie eine höhere +Auflösung hat.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Aufsatz, essay, + @ressaynamed{Top,Aufsatz}, + @manualStableEssaySplit-de, + @manualStableEssayBig-de, 2 MB, + @manualStableEssayPdf-de, 2.5 MB} + +@divEnd + + +@node Notation +@unnumberedsec Notation +@translationof Notation + +@divClass{column-left-top} +@subheading Notationsreferenz + +Dieses Buch erklärt alle Befehle von LilyPond, die Notation erstellen. + +@warning{Die Notationsreferenz geht davon aus, dass der Leser +die Grundlagen von LilyPond bereits kennt, wie sie im Handbuch +zum Lernen ausgeführt werden. In einigen Fällen sollte die +englische Musikterminologie (siehe Glossar) bekannt sein.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notation, notation, + @rusernamed{Top,Notation}, + @manualStableNotationSplit-de, + @manualStableNotationBig-de, 7 MB, + @manualStableNotationPdf-de, 18 MB} + +@divEnd + + +@node Benutzung +@unnumberedsec Benutzung +@translationof Usage + +@divClass{column-left-top} +@subheading Handbuch zur Benutzung + +Dieses Buch erklärt, wie die Programme ausgeführt werden, wie man +LilyPond-Notation in andere Programme integrieren kann und macht +Vorschläge, wie man am besten seine Notationsdateien anlegt. Es +wird empfohlen, das Dokument zu lesen, bevor man größere Projekte +in Angriff nimmt. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Benutzung, usage, + @rprogramnamed{Top,Benutzung}, + @manualStableUsageSplit-de, + @manualStableUsageBig-de, 300 KB, + @manualStableUsagePdf-de, 400 KB} + +@divEnd + + +@node Schnipsel +@unnumberedsec Schnipsel +@translationof Snippets + +@divClass{column-left-top} +@subheading Schnipsel + +Hier werden ausgewählte Schnipsel an LilyPond-Code mit der produzierten +Notation gezeigt. Die Schnipsel stammen aus dem +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond-Schnipsel-Depot} +(LSR) und stehen alle unter der Public Domain. + +Beachten Sie, dass dieses Dokument keine bestimmte Teilmenge von +LSR darstellt. LSR läuft unter der stabilen Version von LilyPond, +sodass jedes Schnipsel, das eine neue Eigenschaft von der +Entwicklungsversion zeigt, extra hinzugefügt werden muss. Diese +Schipsel sind in der Datei @file{Documentation/snippets/new/} im +Quellverzeichnis von LilyPond gespeichert. + +Die Schnipsel-Listen für jeden Abschnitt der Notationsreferenz +sind auch verlinkt vom @strong{Siehe auch}-Absatz. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Schnipsel, snippets, + @rlsrnamed{Top,Schnipsel}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node FAQ +@unnumberedsec FAQ +@translationof FAQ + +@divClass{column-center-top} +@subheading Einleitende Fragen + +@subsubheading Wo sind die graphischen Menüs, Werkzeugleisten und Notenblatt? + +LilyPond erfordert es, dass Noten als Text eingegeben werden. +Lesen Sie bitte über unsere @ref{Text-Eingabe}. + + +@subsubheading Es gibt sehr viel Dokumentation! Muss ich das alles +lesen? + +Sie müssen das @ref{Learning, Handbuch zum Lernen} lesen. Der +Rest der Dokumentation ist zum Nachschlagen gedacht, wenn Sie +eine bestimmte Art von Notationszeichen oder -typ brauchen. + + +@subsubheading Das ist trotzdem noch viel zu lesen! Lohnt sich das +denn? + +Das müssen Sie selber entscheiden; die Gründe, warum Sie LilyPond +anderen Programmen vorziehen können, sind dargestellt in der +@ref{Einleitung}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Benutzungsfragen + +@subsubheading Etwas funktioniert nicht! Wie kann ich es reparieren? + +Das wird erklärt in @rprogram{Fehlersuche}. + + +@subsubheading Warum ändern Sie die Syntax? + +Das wird erklärt in @rprogram{Warum verändert sich die Syntax?}. + +@divEnd + + +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +Dieses Handbuch stellt allgemeine Information zu LilyPond zur +Verfügung. Es enthält auch Information über die verschiedenen +Gemeinschaftsforen, das Melden von Fehlern und die Mitarbeit am +Programm. + +@divEnd + +@divClass{column-right-bottom} +@subheading Lesen Sie es + +@subsubheading Das neueste Handbuch + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading Web-Handbuch von @versionDevel + +@docLinksBare{Web, web, + @ref{Top,Web}, + @manualDevelWebSplit-de, + @manualDevelWebBig-de, 1 MB, + @manualDevelWebPdf, 2 MB} + +@divEnd + + + +@node Änderungen +@unnumberedsec Änderungen +@translationof Changes + +@divClass{column-left-top} +@subheading Änderungen + +Hier eine Zusammenfassung von wichtigen Veränderungen und neuen +Eigenschaften in LilyPond seit der vorigen stabilen Version. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Änderungen, changes, + @rchangesnamed{Top,Änderungen}, + @manualStableChangesSplit, + @manualStableChangesBig, 6 KB, + @manualStableChangesPdf, 200 KB} + +@divEnd + + +@node Erweitert +@unnumberedsec Erweitert +@translationof Extend + +@divClass{column-left-top} +@subheading Erweitern Sie LilyPond + +Dieses Handbuch erklärt, wie man Erweiterungen für LilyPond schreibt. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Erweitert, extend, + @rextendnamed{Top,Erweitert}, + @manualStableExtendingSplit-de, + @manualStableExtendingBig-de, 200 KB, + @manualStableExtendingPdf-de, 400 KB} + +@divEnd + + +@node Interna +@unnumberedsec Interna +@translationof Internals + +@divClass{column-left-top} +@subheading Handbuch der Interna + +Hierbei handelt es sich um eine Anzahl sehr stark verlinkter +Seiten, welche alle klitzekleinen Details von jeder einzigen +LilyPond-Klasse, jedem Objekt und jeder Funktion dokumentieren. +Das Dokument wird direkt aus den Formatanweisungen des +Quellcodes erstellt und ist nur auf Englisch erhältlich. + +Fast alle Formatierungsfunktionen, die intern benutzt werden, +stehen auch direkt dem Benutzer zur Verfügung. Beispielsweise +die meisten Variablen, die Dickewerte, Entfernungen usw. kontrollieren, +können in der Eingabedatei verändert werden. Es gibt eine große +Anzahl von Formatierungsoptionen und alle sind in diesem Dokument +erklärt. Jeder Abschnitt der Notationsreferenz hat einen +@strong{Siehe auch}-Abschnitt, der auf diese Dokumentation verweist. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Interna, internals, + @rinternalsnamed{Top,Interna}, + @manualStableInternalsSplit-de, + @manualStableInternalsBig-de, 2.5 MB, + @manualStableInternalsPdf-de, 2.8 MB} + +@divEnd + + +@node Übersetzt +@unnumberedsec Übersetzt +@translationof Translated + +@divClass{column-center-bottom} +@subheading Status der Übersetzungen + +@include translations.itexi + +@divEnd + + +@node Alles +@unnumberedsec Alles +@translationof All + +@divClass{column-center-bottom} +@subheading Versionen zum Herunterladen + +@ifclear web_version +Tar-Archive zum Herunterladen sind nur über @uref{http://lilypond.org} +erhältlich. +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable-de + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Alte stabile Versionen + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +LilyPond 2.12 Dokumentation} (auf deutsch) + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +LilyPond 2.11 Dokumentation} (auf deutsch) + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +LilyPond 2.10 Dokumentation} (auf englisch) + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +LilyPond 2.8 Dokumentation} (auf englisch) + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +LilyPond 2.6 Dokumentation} (auf englisch) + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +LilyPond 2.4 Dokumentation} (auf englisch) + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +LilyPond 2.2 Dokumentation} (auf englisch) + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +LilyPond 2.0 Dokumentation} (auf englisch) + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +LilyPond 1.8 Dokumentation} (auf englisch) + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +LilyPond 1.6 Dokumentation} (auf englisch) + + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL + +@divClass{column-center-top} +@subheading Lizenz der Dokumentation + +Die Dokumentation für GNU LilyPond wird unter der GNU Free +Documentation License publiziert. Eine Einführung in diese +Lizenz und Gründe für ihre Benutzung finden sich in @ref{Freiheit}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd diff --git a/Documentation/devel/GNUmakefile b/Documentation/devel/GNUmakefile deleted file mode 100644 index dd4b822e25..0000000000 --- a/Documentation/devel/GNUmakefile +++ /dev/null @@ -1,39 +0,0 @@ -depth = ../.. - -XREF_MAP_FLAGS = --split section -I $(abs-src-dir) - -STEPMAKE_TEMPLATES = documentation tex texinfo topdocs -LOCALSTEPMAKE_TEMPLATES = ly - -# DOCUMENTATION_INCLUDES = -I $(top-src-dir)/Documentation/user - -include $(depth)/make/stepmake.make - -HTML_PAGE_NAMES = index -OUT_HTML_FILES = $(HTML_PAGE_NAMES:%=$(outdir)/%.html) - - -MASTER_TEXI_FILES = contrib-guide.texi -PDF_FILES = $(MASTER_TEXI_FILES:%.texi=$(outdir)/%.pdf) -HTML_FILES = $(MASTER_TEXI_FILES:%.texi=$(outdir)/%/index.html) \ - $(MASTER_TEXI_FILES:%.texi=$(outdir)/%-big-page.html) -source-links = $(outdir)/source $(MASTER_TEXI_FILES:%.texi=$(outdir)/%/source) - -default: local-doc - -$(outdir)/source: - @rm -f $(@) - ln -sf $(depth) $(@) - -$(outdir)/%/source: - @rm -f $(@) - mkdir -p $(dir $@) - ln -sf $(depth)/.. $(@) - -ifeq ($(out),www) -local-WWW-1: $(PDF_FILES) - -local-WWW-2: $(HTML_FILES) $(OUT_HTML_FILES) $(source-links) -endif - -$(PDF_FILES) $(HTML_FILES): $(ITEXI_FILES) diff --git a/Documentation/devel/compiling.itexi b/Documentation/devel/compiling.itexi deleted file mode 100644 index 18c2839c98..0000000000 --- a/Documentation/devel/compiling.itexi +++ /dev/null @@ -1,73 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- - -@node Compiling LilyPond -@chapter Compiling LilyPond - -@menu -* Compiling from source:: -* Concurrent Stable and Development Versions:: -@end menu - -@node Compiling from source -@section Compiling from source - -TODO (see AU 1 for now) -@c currently broken; will fix after 2.14 -@c @include compile.itely - - -@node Concurrent Stable and Development Versions -@section Concurrent Stable and Development Versions - -It can be useful to have both the stable and the development versions -of Lilypond available at once. One way to do this on GNU/Linux is to -install the stable version using the precompiled binary, and run the -development version from the source tree. After running @command{make -all} from the top directory of the Lilypond source files, there will -be a binary called @code{lilypond} in the @code{out} directory: - -@example -<@var{path to}>/lilypond/out/bin/lilypond -@end example - -This binary can be run without actually doing the @code{make -install} command. The advantage to this is that you can have all -of the latest changes available after pulling from git and running -@code{make all}, without having to uninstall the old version and -reinstall the new. - -So, to use the stable version, install it as usual and use the -normal commands: - -@example -lilypond foobar.ly -@end example - -To use the development version, create a link to the binary in the -source tree by saving the following line in a file somewhere in your -PATH: - -@example -exec <@var{path to}>/lilypond/out/bin/lilypond "$@@" -@end example - -Save it as @code{Lilypond} (with a capital L to distinguish it -from the stable @code{lilypond}), and make it executable: - -@example -chmod +x Lilypond -@end example - -Then you can invoke the development version this way: - -@example -Lilypond foobar.ly -@end example - - -TODO: ADD - -- how to build with debug info - -- other compilation tricks for developers - diff --git a/Documentation/devel/contrib-guide.texi b/Documentation/devel/contrib-guide.texi deleted file mode 100644 index f19c9d42ad..0000000000 --- a/Documentation/devel/contrib-guide.texi +++ /dev/null @@ -1,124 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename contrib-guide.info -@settitle GNU LilyPond Contributor's Guide -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - -@ifnottex -@node Top -@top GNU LilyPond --- Contributor's Guide -@chapheading The music typesetter -@end ifnottex - - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/devel/contrib-guide.pdf,PDF} and as -@c FIXME: update @uref{} stuff. -@uref{source/Documentation/devel/,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/devel/contrib-guide.pdf,PDF} and as a -@uref{source/Documentation/devel/contrib-guide/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - - -@iftex -@exampleindent 0 -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Contributor's Guide} -@author The LilyPond development team - -Copyright @copyright{} 1999--2008 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -For LilyPond version -@end titlepage -@end iftex - -@copying -Copyright @copyright{} 1999--2008 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -This file documents contributing to GNU LilyPond. - -Copyright 1999--2008 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex - -More information can be found at -@uref{http://@/www@/.lilypond@/.org/}. The website contains -on-line copies of this and other documentation. - -@menu -* Starting with git:: -* Compiling LilyPond:: -* Documentation work:: -* Website work:: -* LSR work:: -* Issues:: -* Programming work:: -* Release work:: -@end menu -@end ifnottex - -@contents - -@include git-starting.itexi -@include compiling.itexi -@include doc-work.itexi -@include website-work.itexi -@include lsr-work.itexi -@include issues.itexi -@include programming-work.itexi -@include release-work.itexi - -@bye - diff --git a/Documentation/devel/doc-translation-list.itexi b/Documentation/devel/doc-translation-list.itexi deleted file mode 100644 index 944c133930..0000000000 --- a/Documentation/devel/doc-translation-list.itexi +++ /dev/null @@ -1,85 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@c This file is part of file doc-work.itexi -@c Word counts are updated automatically by translations-status.py - -Translation of @file{Documentation/foo/bar} should be -@file{Documentation/@var{LANG}/foo/bar}. Unmentioned files should not -be translated. - -Priorities: -@itemize -@item 1. delivery, -@item 2. 3. 4. 5. later, -@item 6. optional. -@end itemize - -Files marked with priority 3, 4 or 5 may be submitted individually. -Word counts (excluding LilyPond snippets) are given for each file. - -@example --1- Documentation index and Tutorial -429 user/lilypond-learning.tely -6343 user/tutorial.itely -23 user/dedication.itely -432 user/macros.itexi -171 index.html.in -161 translations.template.html.in -6438 po/lilypond-doc.pot (translate to po/@var{MY_LANGUAGE}.po) ---- ../lilypond-texi2html.init (section TRANSLATIONS) -13997 total - --2- Introduction and beginning of Application Usage -411 user/preface.itely -3855 user/introduction.itely -407 user/lilypond-program.tely -193 user/install.itely (partial translation) -1149 user/setup.itely -2827 user/running.itely -8842 total - --3- Learning manual -10318 user/fundamental.itely -- Fundamental concepts -14816 user/tweaks.itely -- Tweaking output -4550 user/working.itely -- Working on LilyPond files -498 user/templates.itely -- Templates -30182 total - --4- Notation reference -724 user/lilypond.tely -91 user/notation.itely -- Musical notation -3145 user/pitches.itely -4772 user/rhythms.itely -1393 user/expressive.itely -555 user/repeats.itely -1456 user/simultaneous.itely -1708 user/staff.itely -905 user/editorial.itely -2376 user/text.itely -76 user/specialist.itely -- Specialist notation -2725 user/vocal.itely -1516 user/chords.itely -702 user/piano.itely -810 user/percussion.itely -826 user/guitar.itely -66 user/strings.itely -242 user/bagpipes.itely -4487 user/ancient.itely -6024 user/input.itely -- Input syntax -2164 user/non-music.itely -- Non-musical notation -8663 user/spacing.itely -- Spacing issues -11747 user/changing-defaults.itely -- Changing defaults -5187 user/programming-interface.itely -- Interfaces for programmers -1182 user/notation-appendices.itely -- Notation manual tables -252 user/cheatsheet.itely -- Cheat sheet -63794 total - --5- Application usage -3248 user/lilypond-book.itely -- LilyPond-book -1171 user/converters.itely -- Converting from other formats -4419 total - --6- Appendices whose translation is optional -310 user/literature.itely -960 user/scheme-tutorial.itely (needs to be revised first) -1270 total -@end example diff --git a/Documentation/devel/doc-work.itexi b/Documentation/devel/doc-work.itexi deleted file mode 100644 index 2e447deb4c..0000000000 --- a/Documentation/devel/doc-work.itexi +++ /dev/null @@ -1,1676 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@node Documentation work -@chapter Documentation work - -@menu -* Introduction to documentation work:: -* Documentation suggestions:: -* Texinfo introduction and usage policy:: -* Documentation policy:: -* Tips for writing docs:: -* Updating docs with convert-ly:: -* Translating the documentation:: -@end menu - - -@node Introduction to documentation work -@section Introduction to documentation work - -Our documentation tries to adhere to our @ref{Documentation -policy}. This policy contains a few items which may seem odd. -One policy in particular is often questioned by potential -contributors: we do not repeat material in the Notation Reference, -and instead provide links to the @qq{definitive} presentation of -that information. Some people point out, with good reason, that -this makes the documentation harder to read. If we repeated -certain information in relevant places, readers would be less -likely to miss that information. - -That reasoning is sound, but we have two counter-arguments. -First, the Notation Reference -- one of @emph{five} manuals for -users to read -- is already over 500 pages long. If we repeated -material, we could easily exceed 1000 pages! Second, and much -more importantly, LilyPond is an evolving project. New features -are added, bugs are fixed, and bugs are discovered and documented. -If features are discussed in multiple places, the documentation -team must find every instance. Since the manual is so large, it -is impossible for one person to have the location of every piece -of information memorized, so any attempt to update the -documentation will invariably omit a few places. This second -concern is not at all theoretical; the documentation used to be -plagued with inconsistent information. - -If the documentation were targeted for a specific version -- say, -LilyPond 2.10.5 -- and we had unlimited resources to spend on -documentation, then we could avoid this second problem. But since -LilyPond evolves (and that is a very good thing!), and since we -have quite limited resources, this policy remains in place. - -A few other policies (such as not permitting the use of tweaks in -the main portion of NR 1+2) may also seem counter-intuitive, but -they also stem from attempting to find the most effective use of -limited documentation help. - - -@node Documentation suggestions -@section Documentation suggestions - -@subheading Small additions - -For additions to the documentation, - -@enumerate - -@item -Tell us where the addition should be placed. Please include both -the section number and title (i.e. "LM 2.13 Printing lyrics"). - -@item -Please write exact changes to the text. - -@item -A formal patch to the source code is @emph{not} required; we can -take care of the technical details. Here is an example of a -perfect documentation report: - -@verbatim -To: lilypond-devel@gnu.org -From: helpful-user@example.net -Subject: doc addition - -In LM 2.13 (printing lyrics), above the last line ("More options, -like..."), please add: - ----- -To add lyrics to a divided part, use blah blah blah. For example, - -\score { - \notes {blah <> } - \lyrics {blah <> } - blah blah blah -} ----- - -In addition, the second sentence of the first paragraph is -confusing. Please delete that sentence (it begins "Users -often...") and replace it with this: ----- -To align lyrics with something, do this thing. ----- - -Have a nice day, -Helpful User -@end verbatim - -@end enumerate - - -@subheading Larger contributions - -To replace large sections of the documentation, the guidelines are -stricter. We cannot remove parts of the current documentation -unless we are certain that the new version is an improvement. - -@enumerate - -@item -Ask on the lilypond-devel maillist if such a rewrite is necessary; -somebody else might already be working on this issue! - -@item -Split your work into small sections; this makes it much easier to -compare the new and old documentation. - -@item -Please prepare a formal git patch. - -@end enumerate - -Once you have followed these guidelines, please send a message to -lilypond-devel with your documentation submissions. Unfortunately -there is a strict “no top-posting” check on the mailist; to avoid -this, add: - -> I'm not top posting. - -(you must include the > ) to the top of your documentation -addition. - -We may edit your suggestion for spelling, grammar, or style, and -we may not place the material exactly where you suggested, but if -you give us some material to work with, we can improve the manual -much faster. Thanks for your interest! - - -@node Texinfo introduction and usage policy -@section Texinfo introduction and usage policy - -@menu -* Texinfo introduction:: -* Documentation files:: -* Sectioning commands:: -* LilyPond formatting:: -* Text formatting:: -* Syntax survey:: -* Other text concerns:: -@end menu - - -@node Texinfo introduction -@subsection Texinfo introduction - -The language is called Texinfo; you can see its manual here: - -@uref{http://www.gnu.org/software/texinfo/manual/texinfo/} - -However, you don't need to read those docs. The most important -thing to notice is that text is text. If you see a mistake in the -text, you can fix it. If you want to change the order of -something, you can cut-and-paste that stuff into a new location. - -@warning{Rule of thumb: follow the examples in the existing docs. -You can learn most of what you need to know from this; if you want -to do anything fancy, discuss it on @code{lilypond-devel} first.} - - -@node Documentation files -@subsection Documentation files - -The user manuals lives in @file{Documentation/user/}. In -particular, the files @file{lilypond-learning.ly} (LM), -@file{lilypond.itely} (NR), @file{music-glossary.tely} (MG), and -@file{lilypond-program} (AU). Each chapter is written in a -separate file (ending in @file{.itely} for files containing -lilypond code, and @file{.itexi} for files without lilypond code); -see the @qq{main} file for each manual to determine the filename -of the specific chapter you wish to modify. - -Developer manuals live in @file{Documentation/devel}. Currently -there is only one; @file{contrib-guide.texi}. - -Although snippets are part of documentation, they are not -(directly) part of the manuals. For information about how to -modify them, see @ref{LSR work}. - - -@node Sectioning commands -@subsection Sectioning commands - -Most of the manual operates at the - -@example -@@node Foo -@@subsubsection Foo -@end example - -@noindent -level. Sections are created with - -@example -@@node Foo -@@subsection Foo -@end example - -@itemize -@item -Please leave two blank lines above a @@node; this makes it -easier to find sections in texinfo. - -@item -Sectioning commands (@@node and @@section) must not appear -inside an @@ignore. Separate those commands with a space, ie @@n -ode. - -@end itemize - - -@node LilyPond formatting -@subsection LilyPond formatting - -@itemize - -@item -Use two spaces for indentation in lilypond examples. (no -tabs) - -@item -All text strings should be prefaced with #. LilyPond does -not strictly require this, but it is helpful to get users -accustomed to this scheme construct. ie @code{\set -Staff.instrumentName = #"cello"} - -@item -All engravers should have double-quotes around them: - -@example -\consists "Spans_arpeggio_engraver" -@end example - -Again, LilyPond does not strictly require this, but it is a useful -standard to follow. - -@item -Examples should end with a complete bar if possible. - -@item -If possible, only write one bar per line. The notes on each -line should be an independent line -- tweaks should occur on their -own line if possible. Bad: - -@example -\override textscript #'padding = #3 c1^"hi" -@end example - -Good: - -@example -\override textscript #'padding = #3 -c1^"hi" -@end example - -@item -Most LilyPond input should be produced with: - -@example -@@lilypond[verbatim,quote,relative=2] -@end example - -@noindent -or - -@example -@@lilypond[verbatim,quote,relative=1] -@end example - -If you want to use \layout@{@} or define variables, use - -@example -@@lilypond[verbatim,quote] -@end example - -In rare cases, other options may be used (or omitted), but ask first. - -@item -Inspirational headwords are produced with - -@example -@@lilypondfile[quote,ragged-right,line-width=16\cm,staffsize=16] -@{pitches-headword.ly@} -@end example - -@item -LSR snippets are linked with - -@example -@@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@{filename.ly@} -@end example - -@noindent -excepted in Templates, where `doctitle' may be omitted. - -@item -Avoid long stretches of input code. Noone is going to read -them in print. Please create a smaller example. (the smaller -example does not need to be minimal, however) - -@item -Specify durations for at least the first note of every bar. - -@item -If possible, end with a complete bar. - -@item -Comments should go on their own line, and be placed before -the line(s) to which they refer. - -@item -Add extra spaces around @{ @} marks; ie - -@example -not: \chordmode @{c e g@} -but instead: \chordmode @{ c e g @} -@end example - -@item -If you only have one bar per line, omit bar checks. If you -put more than one bar per line (not recommended), then include bar -checks. - -@item -If you want to work on an example outside of the manual (for -easier/faster processing), use this header: - -@example -\paper @{ - #(define dump-extents #t) - indent = 0\mm - line-width = 160\mm - 2.0 * 0.4\in - ragged-right = ##t - force-assignment = #"" - line-width = #(- line-width (* mm 3.000000)) -@} - -\layout @{ -@} -@end example - -You may not change any of these values. If you are making an -example demonstrating special \paper@{@} values, contact the -Documentation Editor. - -@end itemize - - -@node Text formatting -@subsection Text formatting - -@itemize - -@item -Lines should be less than 72 characters long. (I personally -recommend writing with 66-char lines, but don't bother modifying -existing material.) - -@item -Do not use tabs. - -@item -Do not use spaces at the beginning of a line (except in -@@example or @@verbatim environments), and do not use more than a -single space between words. `makeinfo' copies the input lines -verbatim without removing those spaces. - -@item -Use two spaces after a period. - -@item -In examples of syntax, use @@var@{musicexpr@} for a music -expression. - -@item -Don't use @@rinternals@{@} in the main text. If you're -tempted to do so, you're probably getting too close to "talking -through the code". If you really want to refer to a context, use -@@code@{@} in the main text and @@rinternals@{@} in the @@seealso. - -@item -Variables or numbers which consist of a single character -(probably followed by a punctuation mark) should be tied properly, -either to the previous or the next word. Example: - -@example -The variable@@tie@{@}@@var@{a@} ... -@end example - -@item -To get consistent indentation in the DVI output it is better -to avoid the @@verbatim environment. Use the @@example -environment instead if possible, but without extraneous -indentation. For example, this - -@example -@@example - foo @{ - bar - @} -@@end example -@end example - -@noindent -should be replaced with - -@example -@@example -foo @{ - bar -@} -@@end example -@end example - -@noindent -where `@@example' starts the line (without leading spaces). - -@item -Do not compress the input vertically; this is, do not use - -@example - Beginning of logical unit - @@example - ... - @@end example - continuation of logical unit -@end example - -@noindent -but instead do - -@example -Beginning of logical unit - -@@example -... -@@end example - -@@noindent -continuation of logical unit -@end example - -This makes it easier to avoid forgetting the `@@noindent'. Only -use @@noindent if the material is discussing the same material; -new material should simply begin without anything special on the -line above it. - -@item -in @@itemize use @@item -on a separate line like this: - -@example -@@itemize -@@item -Foo - -@@item -Bar -@end example - -Do not use @@itemize @@bullet. - -@item -To get LilyPond version, use @@version@{@} (this does not work -inside LilyPond snippets). If you write "@@version@{@}" (enclosed -with quotes), or generally if @@version@{@} is not followed by a -space, tere will be an ugly line break in PDF output unless you -enclose it with - -@example -@@w@{ ... @} - - e.g. - -@@w@{"@@version@{@}"@} -@end example - -@end itemize - - -@node Syntax survey -@subsection Syntax survey - -@itemize -@item -@@c - single line comments - "@@c NOTE:" is a comment which should remain in the final - version. (gp only command ;) -@item -@@ignore ... @@end ignore - multi-line comment - -@item -@@cindex - General index. Please add as many as you can. Don't - capitalize the first word. -@item -@@funindex - is for a \lilycommand. - -@item -@@example ... @@end ignore - example text that should be set as a - blockquote. Any @{@} must be escaped with @@@{ @}@@ -@item -@@itemize @@item -A @@item -B ... @@end itemize - for bulleted lists. - Do not compress vertically like this. - -@item -@@code@{@} - typeset in a tt-font. Use for actual lilypond code or - property/context names. If the name contains a space, wrap - the entire thing inside @@w@{@@code@{ @}@}. -@item -@@notation@{@} - refers to pieces of notation, e.g. - "@@notation@{cres.@}". Also use to specific lyrics ("the - @@notation@{A - men@} is centered"). Only use once per subsection - per term. -@item -@@q@{@} - Single quotes. Used for `vague' terms. -@item -@@qq@{@} - Double quotes. Used for actual quotes ("he said") or for - introducing special input modes. - -@item -@@tie@{@} - Variables or numbers which consist of a single character - (probably followed by a punctuation mark) should be tied - properly, either to the previous or the next word. Example: - "The letter@@tie@{@}@@q@{I@} is skipped" - -@item -@@var - Use for variables. -@item -@@warning@{@} - produces a "Note: " box. Use for important messages. - -@item -@@bs - Generates a backslash inside @@warning. - Any `\' used inside @@warning (and @@q or @@qq) must be written as `@@bs@{@}' - (texinfo would also allow \\, but this breaks with PDF output). - -@item -@@ref@{@} - normal references (type the exact node name inside the -@{@}). -@item -@@ruser@{@} - link to the NR. -@item -@@rlearning@{@} - link to the LM. -@item -@@rglos@{@} - link to the MG. -@item -@@rprogram@{@} - link to the AU. -@item -@@rlsr@{@} - link to a Snippet section. -@item -@@rinternals@{@} - link to the IR. -@item -@@uref@{@} - link to an external url. - -@end itemize - - - -@node Other text concerns -@subsection Other text concerns - -@itemize - -@item -References must occur at the end of a sentence, for more -information see @@ref@{the texinfo manual@}. Ideally this should -also be the final sentence of a paragraph, but this is not -required. Any link in a doc section must be duplicated in the -@@seealso section at the bottom. - -@item -Introducing examples must be done with - -@example - . (ie finish the previous sentence/paragaph) - : (ie `in this example:') - , (ie `may add foo with the blah construct,') -@end example - -The old "sentence runs directly into the example" method is not -allowed any more. - -@item -Abbrevs in caps, e.g., HTML, DVI, MIDI, etc. - -@item -Colon usage - -@enumerate - -@item -To introduce lists - -@item -When beginning a quote: "So, he said,...". - -This usage is rarer. Americans often just use a comma. - -@item -When adding a defining example at the end of a sentence. - -@end enumerate - -@item -Non-ASCII characters which are in utf-8 should be directly used; -this is, don't say `Ba@@ss@{@}tuba' but `Baßtuba'. This ensures -that all such characters appear in all output formats. - -@end itemize - - - - -@node Documentation policy -@section Documentation policy - -@menu -* Books:: -* Section organization:: -* Checking cross-references:: -* General writing:: -* Technical writing style:: -@end menu - -@node Books -@subsection Books - -There are four parts to the documentation: the Learning Manual, -the Notation Reference, the Program Reference, and the Music -Glossary. - -@itemize - -@item -Learning Manual: - -The LM is written in a tutorial style which introduces the most -important concepts, structure and syntax of the elements of a -LilyPond score in a carefully graded sequence of steps. -Explanations of all musical concepts used in the Manual can be -found in the Music Glossary, and readers are assumed to have no -prior knowledge of LilyPond. The objective is to take readers to -a level where the Notation Reference can be understood and -employed to both adapt the templates in the Appendix to their -needs and to begin to construct their own scores. Commonly used -tweaks are introduced and explained. Examples are provided -throughout which, while being focussed on the topic being -introduced, are long enough to seem real in order to retain the -readers' interest. Each example builds on the previous material, -and comments are used liberally. Every new aspect is thoroughly -explained before it is used. - -Users are encouraged to read the complete Learning Manual from -start-to-finish. - - -@item -Notation Reference: a (hopefully complete) description of LilyPond -input notation. Some material from here may be duplicated in the -Learning Manual (for teaching), but consider the NR to be the -"definitive" description of each notation element, with the LM -being an "extra". The goal is _not_ to provide a step-by-step -learning environment -- do not avoid using notation that has not -be introduced previously in the NR (for example, use \break if -appropriate). This section is written in formal technical writing -style. - -Avoid duplication. Although users are not expected to read this -manual from start to finish, they should be familiar with the -material in the Learning Manual (particularly ``Fundamental -Concepts''), so do not repeat that material in each section of -this book. Also watch out for common constructs, like ^ - _ for -directions -- those are explained in NR 3. In NR 1, you can -write: DYNAMICS may be manually placed above or below the staff, -see @@ref@{Controlling direction and placement@}. - -Most tweaks should be added to LSR and not placed directly in the -.itely file. In some cases, tweaks may be placed in the main -text, but ask about this first. - -Finally, you should assume that users know what the notation -means; explaining musical concepts happens in the Music Glossary. - - -@item -Application Usage: information about using the program lilypond -with other programs (lilypond-book, operating systems, GUIs, -convert-ly, etc). This section is written in formal technical -writing style. - -Users are not expected to read this manual from start to finish. - - -@item -Music Glossary: information about the music notation itself. -Explanations and translations about notation terms go here. - -Users are not expected to read this manual from start to finish. - -@item -Internals Reference: not really a documentation book, since it is -automagically generated from the source, but this is its name. - -@end itemize - - -@node Section organization -@subsection Section organization - -@itemize - -@item -The order of headings inside documentation sections should -be: - -@example -main docs -@@predefined -@@endpredefined -@@snippets -@@seealso -@@knownissues -@end example - -@item -You @emph{must} include a @@seealso. - -@itemize -@item -The order of items inside the @@seealso section is - -@example -Music Glossary: -@@rglos@{foo@}, -@@rglos@{bar@}. - -Learning Manual: -@@rlearning@{baz@}, -@@rlearning@{foozle@}. - -Notation Reference: -@@ruser@{faazle@}, -@@ruser@{boo@}. - -Application Usage: -@@rprogram@{blah@}. - -Installed Files: -@@file@{path/to/dir/blahz@}. - -Snippets: @@rlsr@{section@}. - -Internals Reference: -@@rinternals@{fazzle@}, -@@rinternals@{booar@}. -@end example - -@item -If there are multiple entries, separate them by commas but do not -include an `and'. - -@item -Always end with a period. - -@item -Place each link on a new line as above; this makes it much easier -to add or remove links. In the output, they appear on a single -line. - -("Snippets" is REQUIRED; the others are optional) - -@item -Any new concepts or links which require an explanation should go -as a full sentence(s) in the main text. - -@item -Don't insert an empty line between @@seealso and the first entry! -Otherwise there is excessive vertical space in the PDF output. - -@end itemize - -@item -To create links, use @@ref@{@} if the link is within the same -manual. - -@item -@@predefined ... @@endpredefined is for commands in ly/*-init.ly -FIXME? - -@item -Do not include any real info in second-level sections (ie 1.1 -Pitches). A first-level section may have introductory material, -but other than that all material goes into third-level sections -(ie 1.1.1 Writing Pitches). - -@end itemize - - -@node Checking cross-references -@subsection Checking cross-references - -Cross-references between different manuals are heavily used in the -documentation, but they are not checked during compilation. -However, if you compile the documentation, a script called -check_texi_refs can help you with checking and fixing these -cross-references; for information on usage, cd into a source tree -where documentation has been built, cd into Documentation and look -for check-xrefs and fix-xrefs targets in 'make help' output. Note -that you have to find yourself the source files to fix -cross-references in the generated documentation such as the -Internals Reference; e.g. you can grep scm/ and lily/. - - -@node General writing -@subsection General writing - -@itemize - -@item -Do not forget to create @@cindex entries for new sections of text. -Enter commands with @@funindex, i.e. - -@example -@@cindex pitches, writing in different octaves -@@funindex \relative -@end example - -@noindent -do not bother with the @@code@{@} (they are added automatically). -These items are added to both the command index and the unified -index. - -Both index commands should go in front of the actual material. - -@@cindex entries should not be capitalized, ie - -@example -@@cindex time signature -@end example - -@noindent -is preferred instead of @qq{Time signature}, Only use capital -letters for musical terms which demand them, like D.S. al Fine. - -For scheme functions, only include the final part, i.e., - -@example -@@funindex modern-voice-cautionary - and NOT -@@funindex #(set-accidental-style modern-voice-cautionary) -@end example - -@item -Preferred terms: - -@itemize - -@item -In general, use the American spellings. The internal lilypond -property names use this spelling. - -@item -List of specific terms: - -@example -canceled -simultaneous NOT concurrent -measure: the unit of music -bar line: the symbol delimiting a measure NOT barline -note head NOT notehead -chord construct NOT chord (when referring to <>) -@end example - -@end itemize - -@end itemize - - -@node Technical writing style -@subsection Technical writing style - -These refer to the NR. The LM uses a more gentle, colloquial -style. - -@itemize - -@item -Do not refer to LilyPond in the text. The reader knows what the -manual is about. If you do, capitalization is LilyPond. - -@item -If you explicitly refer to @q{lilypond} the program (or any other -command to be executed), write @code{@@command@{lilypond@}}. - -@item -Do not explicitly refer to the reader/user. There is no one else -besides the reader and the writer. - -@item -Avoid contractions (don't, won't, etc.). Spell the words out completely. - -@item -Avoid abbreviations, except for commonly used abbreviations of foreign -language terms such as etc. and i.e. - -@item -Avoid fluff (@qq{Notice that,} @qq{as you can see,} -@qq{Currently,}). - -@item -The use of the word @q{illegal} is inappropriate in most cases. -Say @q{invalid} instead. - -@end itemize - - -@node Tips for writing docs -@section Tips for writing docs - -In the NR, I highly recommend focusing on one subsection at a -time. For each subsection, - -@itemize - -@item -check the mundane formatting. Are the headings (@@predefined, -@@seealso, etc.) in the right order? - -@item -add any appropriate index entries. - -@item -check the links in the @@seealso section -- links to music -glossary, internal references, and other NR sections are the main -concern. Check for potential additions. - -@item -move LSR-worthy material into LSR. Add the snippet, delete the -material from the .itely file, and add a @@lilypondfile command. - -@item -check the examples and descriptions. Do they still work? -@strong{Do not} assume that the existing text is -accurate/complete; some of the manual is highly out of date. - -@item -is the material in the @@knownissues still accurate? - -@item -can the examples be improved (made more explanatory), or is there -any missing info? (feel free to ask specific questions on -user; -a couple of people claimed to be interesting in being -@qq{consultants} who would help with such questions) - -@end itemize - -In general, I favor short text explanations with good examples -- -@qq{an example is worth a thousand words}. When I worked on the -docs, I spent about half my time just working on those tiny -lilypond examples. Making easily-understandable examples is much -harder than it looks. - - -@subsubheading Tweaks - -In general, any \set or \override commands should go in the -@qq{select snippets} section, which means that they should go in -LSR and not the .itely file. For some cases, the command -obviously belongs in the @qq{main text} (i.e. not inside -@@predefined or @@seealso or whatever) -- instrument names are a -good example of this. - -@example -\set Staff.instrumentName = #"foo" -@end example - -On the other side of this, - -@example -\override Score.Hairpin #'after-line-breaking = ##t -@end example - -clearly belongs in LSR. - -I'm quite willing to discuss specific cases if you think that a -tweaks needs to be in the main text. But items that can go into -LSR are easier to maintain, so I'd like to move as much as -possible into there. - - -It would be @qq{nice} if you spent a lot of time crafting nice -tweaks for users... but my recommendation is @strong{not} to do -this. There's a lot of doc work to do without adding examples of -tweaks. Tweak examples can easily be added by normal users by adding -them to the LSR. - -One place where a documentation writer can profitably spend time writing -or upgrading tweaks is creating tweaks to deal with known issues. It -would be ideal if every significant known issue had a workaround to avoid -the difficulty. - -@seealso - -@ref{Adding and editing snippets}. - - -@node Updating docs with convert-ly -@section Updating doc with @command{convert-ly} - -cd into Documentation and run - -@example -find . -name '*.itely' | xargs convert-ly -e -@end example - -@noindent -This also updates translated documentation. - - - -@node Translating the documentation -@section Translating the documentation - -@menu -* Getting started with documentation translation:: -* Documentation translation details:: -* Documentation translation maintenance:: -* Translations management policies:: -* Technical background:: -* Translation status:: -@end menu - -@node Getting started with documentation translation -@subsection Getting started with documentation translation - -First, get the sources from the Git repository, see @ref{Documentation -translations source code}. - -@menu -* Translation requirements:: -* Which documentation can be translated:: -* Starting translation in a new language:: -@end menu - -@node Translation requirements -@unnumberedsubsubsec Translation requirements - -Working on LilyPond documentation translations requires the following -pieces of software, in order to make use of dedicated helper tools: - -@itemize -@item Python 2.4 or higher, -@item GNU Make, -@item Gettext. -@end itemize - -It is not required to build LilyPond and the documentation to -translate the documentation. However, if you have enough time and -motivation and a suitable system, it can be very useful to build at -least the documentation so that you can check the output yourself and -more quickly; if you are interested, see @ref{Compiling from source}. - -@menu -@end menu - -@node Which documentation can be translated -@unnumberedsubsubsec Which documentation can be translated - -The makefiles and scripts infrastructure currently supports translation -of the following documentation: - -@itemize -@item documentation index (HTML); -@item user manual and program usage -- Texinfo source, PDF and HTML -output; Info output might be added if there is enough demand for it; -@item the News document. -@end itemize - -The following pieces of documentation should be added soon, by -descending order of priority: - -@itemize -@item automatically generated documentation: markup commands, -predefined music functions; -@item the Snippets List; -@item the examples page; -@item the Internals Reference. -@end itemize - - -@node Starting translation in a new language -@unnumberedsubsubsec Starting translation in a new language - -At top of the source directory, do - -@example -./autogen.sh -@end example - -@noindent -or (if you want to install your self-compiled LilyPond locally) - -@example -./autogen.sh --prefix=$HOME -@end example - -@noindent -If you want to compile LilyPond -- which is almost required to build -the documentation, but is not required to do translation only -- fix -all dependencies and rerun @command{./configure} (with the same -options as for @command{autogen.sh}). - -Then @command{cd} into @file{Documentation} and run - -@example -make ISOLANG=@var{MY-LANGUAGE} new-lang -@end example - -@noindent -where @var{MY-LANGUAGE} is the ISO 639 language code. - -Finally, add a language definition for your language in -@file{python/langdefs.py}. - -Before starting the real translation work, it is recommended to commit -changes you made so far to Git, so e.g. you are able to get back to -this state of the sources easily if needed; see @ref{Sharing your -changes}. - - -@node Documentation translation details -@subsection Documentation translation details - -Please follow all the instructions with care to ensure quality work. - -All files should be encoded in UTF-8. - -@menu -* Files to be translated:: -* Translating the Learning Manual and other Texinfo documentation:: -* Translating the Notation Reference and Application Usage:: -* Translating the Documentation index index.html.in:: -@end menu - -@node Files to be translated -@unnumberedsubsubsec Files to be translated - -@include doc-translation-list.itexi - -@node Translating the Learning Manual and other Texinfo documentation -@unnumberedsubsubsec Translating the Learning Manual and other Texinfo documentation - -Any title which comes with one of the following commands must not be -translated directly in the Texinfo source - -@example -@@node @@majorheading -@@chapter @@unnumbered @@appendix @@chapheading -@@section @@unnumberedsec @@appendixsec @@heading -@@subsection @@unnumberedsubsec @@appendixsubsec @@subheading -@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading -@@ref @@rglos @@ruser @@rlearning @@rprogram @@rlsr -@end example - -The same applies to first argument of @code{@@r@var{manual}named} -commands; however, the second argument @var{Bar baz} of -@code{@@ref@{@var{Foo},@var{Bar baz},,@var{info-file}@}} and -@code{@@r@var{manual}named@{@var{Foo},@var{Bar baz}@}} should be -translated. - -@code{@@uref}'s names are to be translated. - -In any section which looks like - -@example -@@menu -* @var{node1}:: @var{thing1} -* @var{node2}:: @var{thing2} -... -@@end menu -@end example - -@noindent -the node names @var{nodeN} are @emph{not} to be translated, whereas -extra title information @var{thingN} is. - -Every node name or section title must from now on be translated -separately in a @file{.po} file (just as well as LilyPond output -messages) in @file{Documentation/po}. The Gettext domain is named -@code{lilypond-doc}, and unlike @code{lilypond} domain it is not -managed through the Free Translation Project. - - -Take care of using typographic rules for your language, especially in -@file{user/macros.itexi}. - - -Please keep verbatim copies of music snippets (in @code{@@lilypond} -blocs). However, some music snippets containing text that shows in -the rendered music, and sometimes translating this text really helps -the user to understand the documentation; in this case, and only in -this case, you may as an exception translate text in the music -snippet, and then you must add a line immediately before the -@code{@@lilypond} block, starting with - -@example -@@c KEEP LY -@end example - -@noindent -Otherwise the music snippet would be reset to the same content as the -English version at next @command{make snippet-update} run -- see -@ref{Updating documentation translation}. - -When you encounter - -@example -@@lilypondfile[,texidoc]@{@var{filename.ly}@} -@end example - -@noindent -in the source, open @file{input/lsr/@var{filename}.ly}, translate the -@code{texidoc} header field it contains, enclose it with -@code{texidoc@var{MY-LANGUAGE} = "} and @code{"}, and write it into -@file{input/texidocs/@var{filename}.texidoc} -- please keep possibly -existing translations in other languages! Additionnally, you may -translate the snippet's title in @code{doctitle} header field, in case -@code{doctitle} is a fragment option used in @code{@@lilypondfile}; -you can do this exactly the same way as @code{texidoc}. For instance, -@file{input/texidocs/@var{filename}.texidoc} may contain - -@example -doctitlees = "Spanish title baz" -texidoces = " -Spanish translation blah -" -doctitlede = "German title bar" -texidocde = "German translation foo -" -@end example - -@code{@@example} blocs need not be verbatim copies, e.g. variable -names, file names and comments should be translated. - -Index entries (@code{@@cindex} and so on) should be translated. - -Finally, please carefully apply every rule exposed in @ref{Texinfo -introduction and usage policy}, and @ref{Documentation policy}. If -one of these rules conflicts with a rule specific to your language, -please ask the Translation meister and/or the Documentation Editors on -@email{lilypond-devel@@gnu.org}. - - -@node Translating the Notation Reference and Application Usage -@unnumberedsubsubsec Translating the Notation Reference and Application Usage - -Copy @file{user/lilypond.tely} (or @file{user/lilypond-program.tely}, -respectively) into @file{@var{MY-LANGUAGE}/user}, then translate this -file and run @code{skeleton-update} -- see @ref{Updating documentation -translation}. Your are now ready to translate the Notation Reference -(Application Usage, respectively) exactly like the Learning Manual. - - -@node Translating the Documentation index index.html.in -@unnumberedsubsubsec Translating the Documentation index @file{index.html.in} - -Unlike almost all HTML pages in this documentation, links in this page -are not tweaked by @file{postprocess_html.py}, so links should be -manually edited to link to existing translations. - - -@node Documentation translation maintenance -@subsection Documentation translation maintenance - -Several tools have been developed to make translations maintenance -easier. These helper scripts make use of the power of Git, the -version control system used for LilyPond development. - -@menu -* Check state of translation:: -* Updating documentation translation:: -@end menu - -@node Check state of translation -@unnumberedsubsubsec Check state of translation - -First pull from Git, then cd into @file{Documentation/} (or at top of -the source tree, replace @command{make} with @command{make -C -Documentation}) and run - -@example -make ISOLANG=@var{MY_LANGUAGE} check-translation -@end example - -@noindent -This presents a diff of the original files since the most recent -revision of the translation. To check a single file, cd into -@file{Documentation/} and run - -@example -make CHECKED_FILES=@var{MY_LANGUAGE/user/foo.itely} check-translation -@end example - -To see only which files need to be updated, do - -@example -make ISOLANG=@var{MY_LANGUAGE} check-translation | grep 'diff --git' -@end example - -To avoid printing terminal colors control characters, which is often -desirable when you redirect output to a file, run - -@example -make ISOLANG=@var{MY_LANGUAGE} NO_COLOR=1 check-translation -@end example - -Global state of the translation is recorded in -@file{Documentation/translations.html.in}, which is used to generate -Translations status page. To update that page, do from -@file{Documentation/} - -@example -make translation-status -@end example - -This will also leave @file{out/translations-status.txt}, which contains -up-to-dateness percentages for each translated file, and update word -counts of documentation files in this Guide. - -@seealso - -@ref{Maintaining without updating translations}. - - -@node Updating documentation translation -@unnumberedsubsubsec Updating documentation translation - -Instead of running @code{check-translation}, you may want to run -@code{update-translation}, which will run your favorite text editor to -update files. First, make sure environment variable @code{EDITOR} is -set to a text editor command, then run from @file{Documentation/} - -@example -make ISOLANG=@var{MY_LANGUAGE} update-translation -@end example - -or to update a single file - -@example -make CHECKED_FILES=@var{MY_LANGUAGE/user/foo.itely} update-translation -@end example - -For each file to be udpated, update-translation will open your text -editor with this file and a diff of the file in English; if the diff -cannot be generated or is bigger than the file in English itself, the -full file in English will be opened instead. - -Texinfo skeleton files, i.e. @file{.itely} files not yet translated, -containing only the Texinfo structure can be updated automatically: -whenever @command{make check-translation} shows that such files should -be updated, run from @file{Documentation/} - -@example -make ISOLANG=@var{MY_LANGUAGE} skeleton-update -@end example - -@file{.po} message catalogs in @file{Documentation/po/} may be updated -by issuing from @file{Documentation/} or @file{Documentation/po/} - -@example -make po-update -@end example - -@warning{if you run po-update and somebody else does the same and -pushes before you push or send a patch to be applied, there will be a -conflict when you pull. Therefore, it is better that only the -Translation meister runs this command.} - -Updating music snippets can quickly become cumbersome, as most -snippets should be identical in all languages. Fortunately, there is -a script that can do this odd job for you (run from -@file{Documentation/}): - -@example -make ISOLANG=@var{MY_LANGUAGE} snippet-update -@end example - -This script overwrites music snippets in -@file{@var{MY_LANGUAGE/user/every.itely}} with music snippets from -@file{@var{user/every.itely}}. It ignores skeleton files, and keeps -intact music snippets preceded with a line starting with @code{@@c -KEEP LY}; it reports an error for each @file{.itely} that has not the -same music snippet count in both languages. Always use this script -with a lot of care, i.e. run it on a clean Git working tree, and check -the changes it made with @command{git diff} before committing; if you -don't do so, some @code{@@lilypond} snippets might be broken or make -no sense in their context. - -Finally, a command runs the three update processes above for all -enabled languages (from @file{Documentation/}): - -@example -make all-translations-update -@end example - -Use this command with caution, and keep in mind it will not be really -useful until translations are stabilized after the end of GDP. - -@seealso - -@ref{Maintaining without updating translations}. - - -@node Translations management policies -@subsection Translations management policies - -These policies show the general intent of how the translations should -be managed, they aim at helping translators, developers and -coordinators work efficiently. - -@menu -* Maintaining without updating translations:: -* Managing documentation translation with Git:: -@end menu - -@node Maintaining without updating translations -@unnumberedsubsubsec Maintaining without updating translations - -Keeping translations up to date under heavy changes in the -documentation in English may be almost impossible, especially as -during the former Grand Documentation Project (GDP) or the Grand -Organization Project (GOP) when a lot of contributors brings changes. -In addition, transloators may be (and that) involved in these porjects too. - -it is possible -- and even recommended -- to -perform some maintaining that keeps translated documentation usable -and eases future translation updating. The rationale below the tasks -list motivates this plan. The rationale below the tasks -list motivates this plan. - -The following tasks are listed in decreasing priority order. - -@enumerate -@item Update macros.itexi. -For each obsolete macro definition, if it is possible to update macro -usage in documentation with an automatic text or regexp substitution, -do it and delete the macro definition from macros.itexi; otherwise, -mark this macro definition as obsolete with a comment, and keep it in -macros.itexi until the documentation translation has been updated and -no longer uses this macro. - -@item Update @file{*.tely} files completely with -@command{make check-translation} -- you may want to redirect ouptput -to a file because of overwhelming output, or call check-translation.py -on individual files, see @ref{Check state of translation}. - -@item In @file{.itelys}, match sections and .itely file names with those from -English docs, which possibly involves moving nodes contents in block -between files, without updating contents itself. In other words, the -game is catching where has gone each section. In Learning manual, and -in Notation Reference sections which have been revised in GDP, there -may be completely new sections: in this case, copy @code{@@node} and -@code{@@section}-command from English docs, and add the marker for -untranslated status @code{@@untranslated} on a single line. Note that -it is not possible to exactly match subsections or subsubsections of -documentation in English, when contents has been deeply revised; in -this case, keep obsolete (sub)subsections in the translation, marking -them with a line @code{@@c obsolete} just before the node. - -Emacs with Texinfo mode makes this step easier: - -@itemize -@item without Emacs AucTeX installed, @key{C-c C-s} shows structure of current -Texinfo file in a new buffer *Occur*; to show structure of two files -simultaneously, first split Emacs window in 4 tiles (with @key{C-x 1} -and @key{C-x 2}), press @key{C-c C-s} to show structure of one file -(e.g. the translated file), copy *Occur* contents into *Scratch*, then -press @key{C-c C-s} for the other file. - -If you happen to have installed AucTeX, you can either call the macro -by doing @key{M-x texinfo-show-structure} or create a key binding in your -@file{~/.emacs}, by adding the four following lines: - -@example -(add-hook 'Texinfo-mode-hook - '(lambda () - (define-key Texinfo-mode-map "\C-cs" - 'texinfo-show-structure))) -@end example - -@noindent -and then obtain the structure in the *Occur* buffer with @key{C-c s}. - -@item Do not bother updating @code{@@menu}s when all menu entries are in the same -file, just do @key{C-c C-u C-a} ("update all menus") when you have -updated all the rest of the file. - -@item Moving to next or previous node using incremental search: press -@key{C-s} and type @code{node} (or @key{C-s @@node} if the text -contains the word @q{node}) then press @key{C-s} to move to next node -or @key{C-r} to move to previous node. Similar operation can be used -to move to the next/previous section. Note that every cursor move -exits incremental search, and hitting @key{C-s} twice starts -incremental search with the text entered in previous incremental -search. - -@item Moving a whole node (or even a sequence of nodes): jump to beginning -of the node (quit incremental search by pressing an arrow), press -@key{C-SPACE}, press @key{C-s node} and repeat @key{C-s} until you -have selected enough text, cut it with @key{C-w} or @key{C-x}, jump to -the right place (moving between nodes with the previous hint is often -useful) and paste with @key{C-y} or @key{C-v}. -@end itemize - -@item Update sections finished in the English documentation; check -sections status at -@uref{http://lilypondwiki.tuxfamily.org/index.php?title=Documentation_coordination}. - -@item Update documentation PO. It is recommended not to update -strings which come from documentation that is currently deeply revised -in English, to avoid doing the work more than once. - -@item Fix broken cross-references by running (from @file{Documentation/}) - -@example -make ISOLANG=@var{YOUR-LANGUAGE} fix-xrefs -@end example - -@noindent -This step requires a sucessful documentation build (with @command{make -doc}). Some cross-references are broken because they point to a node -that exists in the documentation in English, which has not been added -to the translation; in this case, do not fix the cross-reference but -keep it "broken", so that the resulting HTML link will point to an -existing page of documentation in English. -@end enumerate - -@subsubheading Rationale - -You may wonder if it would not be better to leave translations as-is -until you can really start updating translations. There are several -reasons to do these maintenance tasks right now. - -@itemize -@item This will have to be done sooner or later anyway, before updating -translation of documentation contents, and this can already be done -without needing to be redone later, as sections of documentation in -English are mostly revised once. However, note that not all -documentation sectioning has been revised in one go, so all this -maintenance plan has to be repeated whenever a big reorganization is -made. - -@item This just makes translated documentation take advantage of the new -organization, which is better than the old one. - -@item Moving and renaming sections to match sectioning of documentation in -English simplify future updating work: it allows updating the -translation by side-by-side comparison, without bothering whether -cross-reference names already exist in the translation. - -@item Each maintenance task except @q{Updating PO files} can be done by -the same person for all languages, which saves overall time spent by -translators to achieve this task: the node names and section titles -are in English, so you can do. It is important to take advantage of -this now, as it will be more complicated (but still possible) to do -step 3 in all languages when documentation is compiled with -@command{texi2html} and node names are directly translated in source -files. -@end itemize - - -@node Managing documentation translation with Git -@unnumberedsubsubsec Managing documentation translation with Git - -This policy explains how to manage Git branches and commit -translations to Git. - -@itemize -@item Translation changes matching master branch are preferably made on -@code{lilypond/translation} branch; they may be pushed directly to -@code{master} only if they do not break compilation of LilyPond and -its documentation, and in this case they should be pushed to -@code{lilypond/translation} too. Similarly, changes matching -@code{stable/X.Y} are preferably made on -@code{lilypond/X.Ytranslation}. - -@item @code{lilypond/translation} Git branch may be merged into -master only if LilyPond (@command{make all}) and documentation -(@command{make doc}) compile succesfully. - -@item @code{master} Git branch may be merged into -@code{lilypond/translation} whenever @command{make} and @command{make -doc} are succesful (in order to ease documentation compilation by -translators), or when significant changes had been made in -documentation in English in master branch. - -@item General maintenance may be done by anybody who knows what he does -in documentation in all languages, without informing translators -first. General maintenance include simple text substitutions -(e.g. automated by sed), compilation fixes, updating Texinfo or -lilypond-book commands, updating macros, updating ly code, fixing -cross-references, and operations described in @ref{Maintaining -without updating translations}. -@end itemize - - -@node Technical background -@subsection Technical background - -A number of Python scripts handle a part of the documentation -translation process. All scripts used to maintain the translations -are located in @file{scripts/auxiliar/}. - -@itemize -@item @file{check_translation.py} -- show diff to update a translation, -@item @file{texi-langutils.py} -- quickly and dirtily parse Texinfo files to -make message catalogs and Texinfo skeleton files, -@item @file{texi-skeleton-update.py} -- update Texinfo skeleton files, -@item @file{update-snippets.py} -- synchronize ly snippets with those -from English docs, -@item @file{translations-status.py} -- update translations status pages and word -counts in the file you are reading, -@item @file{tely-gettext.py} -- gettext node names, section titles and references -in the sources; WARNING only use this script once for each file, when support for -"makeinfo --html" has been dropped. -@end itemize - -Other scripts are used in the build process, in @file{scripts/build/}: - -@itemize -@item @file{html-gettext.py} -- translate node names, section titles and cross -references in HTML files generated by @command{makeinfo}, -@item @file{texi-gettext.py} -- gettext node names, section titles and references -before calling @command{texi2pdf}, -@item @file{mass-link.py} -- link or symlink files between English documentation -and documentation in other languages. -@end itemize - -Python modules used by scripts in @file{scripts/auxiliar/} or @file{scripts/build/} (but -not by installed Python scripts) are located in @file{python/auxiliar/}: -@itemize -@item @file{manuals_definitions.py} -- define manual names and name of -cross-reference Texinfo macros, -@item @file{buildlib.py} -- common functions (read piped output -of a shell command, use Git), -@item @file{postprocess_html.py} (module imported by @file{www_post.py}) -- add footer and -tweak links in HTML pages. -@end itemize - -And finally -@itemize -@item @file{python/langdefs.py} -- language definitions module -@end itemize - - -@node Translation status -@subsection Translation status - - diff --git a/Documentation/devel/git-starting.itexi b/Documentation/devel/git-starting.itexi deleted file mode 100644 index c50ba18da4..0000000000 --- a/Documentation/devel/git-starting.itexi +++ /dev/null @@ -1,904 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@node Starting with git -@chapter Starting with git - -To complete or present in another form the introduction to Git usage -in this chapter, it may be a good idea to look for Git documentation -at @uref{http://git-scm.com/documentation}, - -@menu -* Getting the source code:: -* Updating the source code:: -* Sharing your changes:: -* Advanced git stuff:: -* Git on Windows:: -@end menu - - -@node Getting the source code -@section Getting the source code - -@menu -* Git introduction:: -* Main source code:: -* Website source code:: -* Documentation translations source code:: -* Other branches:: -* Other locations for git:: -* Git user configuration:: -@end menu - -@node Git introduction -@subsection Git introduction - -The source code is kept in a Git respository. This allows us to -track changes to files, and for multiple people to work on the -same set of files efficiently. - -@warning{These instructions assume that you are using the -command-line version of Git 1.5 or higher. Windows users should -skip to @ref{Git on Windows}.} - - -@node Main source code -@subsection Main source code - -To get the main source code and documentation, - -@c WARNING: when updating the commands below, please -@c update the other flavors in the two next nodes -@c and in Introduction to Git concepts -@smallexample -mkdir lilypond; cd lilypond -git init-db -git remote add -f -t master -m master origin git://git.sv.gnu.org/lilypond.git/ -git checkout -b master origin/master -@end smallexample - - -@node Website source code -@subsection Website source code - -To get the website (including translations), - -@smallexample -mkdir lilypond-web ; cd lilypond-web -git init-db -git remote add -f -t web -m web origin git://git.sv.gnu.org/lilypond.git/ -git checkout -b web origin/web -@end smallexample - - -@node Documentation translations source code -@subsection Documentation translations source code - -To translate the documentation (@emph{not} the website), - -@smallexample -mkdir lilypond-translation; cd lilypond-translation -git init-db -git remote add -f -t lilypond/translation -m lilypond/translation origin git://git.sv.gnu.org/lilypond.git/ -git checkout -b lilypond/translation origin/lilypond/translation -@end smallexample - - -@node Other branches -@subsection Other branches - -Most contributors will never need to touch the other branches. If -you wish to do so, you will need more familiarity with git. - -@itemize - -@item @code{gub}: -This stores the Grand Unified Binary, our cross-platform building -tool. -@c TODO: merge the gub stuff with this CG. -For more info, see @uref{http://lilypond.org/gub}. The git -location is: - -@example -http://github.com/janneke/gub -@end example - -@item @code{dev/XYZ}: -These branches are for individual developers. They store code -which is not yet stable enough to be added to the @code{master} -branch. - -@item @code{stable/XYZ}: -The branches are kept for archival reasons. - -@end itemize - - -@node Other locations for git -@subsection Other locations for git - -If you have difficulty connecting to most of the repositories -listed in earlier sections, try: - -@example -http://git.sv.gnu.org/r/lilypond.git -git://git.sv.gnu.org/lilypond.git -ssh://git.sv.gnu.org/srv/git/lilypond.git -@end example - -Using HTTP protocol is slowest, so it is not recommended unless both -SSH and Git protocols fail, which happens e.g. if you connect to -internet through a router that filters out Git and/or SSH connections. - - -@node Git user configuration -@subsection Git user configuration - -To configure git to automatically use your name and email address -for commits and patches, - -@example -git config --global user.name "MYNAME" -git config --global user.email MYEMAIL@@EXAMPLE.NET -@end example - - -@node Updating the source code -@section Updating the source code - -@menu -* Importance of updating:: -* Update command:: -* Resolving conflicts:: -@end menu - - -@node Importance of updating -@subsection Importance of updating - -In a large project like LilyPond, contributors sometimes edit the same -file at the same time. As long as everybody updates their version of -the file with the most recent changes (@emph{pulling}), there are -generally no problems with this multiple-person editing. However, -boring problems can arise if you do not pull before attempting commit, -e.g. you may encounter a conflict; in this case, see @ref{Resolving -conflicts}. - - -@node Update command -@subsection Updating command - -Whenever you are asked to pull, it means you should update your -local copy of the repository with the changes made by others on -the remote @code{git.sv.gnu.org} repository: - -@example -git pull -r -@end example - - -@node Resolving conflicts -@subsection Resolving conflicts - -Occasionally an update may result in conflicts -- this happens -when you and somebody else have modified the same part of the same -file and git cannot figure out how to merge the two versions -together. When this happens, you must manually merge the two -versions. - -If you need some documentation to understand and resolve conflicts, -see paragraphs @emph{How conflicts are presented} and @emph{How to -resolve conflicts} in @command{git merge} man page. - - -@node Sharing your changes -@section Sharing your changes - -@menu -* Producing a patch:: -* Committing directly:: -@end menu - - -@node Producing a patch -@subsection Producing a patch - -Once you have finished editing your files, checked that your changes -meet the @ref{Code style}, and/or @ref{Documentation policy}, properly -set up your name and email in @ref{Git user configuration}, and -checked that the entire thing compiles, you may: - -@example -git commit -a -git format-patch origin -@end example - -The commit should include a brief message describing the change. -This consists of a one-line summary describing the change, and -if necessary a blank line followed by several lines giving the -details: - -@example -Did household chores. - -I hung up the wet laundry and then washed the car. I also -vacuumed the floors, rinsed the dirty dishes, fed the cat, and -recalibrated the temporal flux machine. -@end example - -If the change is to the documentation only then the one-line -summary should be prefixed with @qq{Docs: }. - -If you added a file to the source code, you must add it to git -with: - -@example -git add FILENAME -@end example - -@noindent -(and possibly modify the @file{GNUmakefile}) - -These commands will produce one or more files named -@file{0001-xyz}, @file{0002-abc}, etc. in the top directory of the -git tree. Send an email to @email{lilypond-devel@@gnu.org} with -these files attached, and a developer will review and apply the -patches to the main repository. - - -@node Committing directly -@subsection Committing directly - -Most contributors do not have permission to commit directly. If you -do, make sure you have set up your name and email in @ref{Git user -configuration}, then edit @file{.git/config}: change the line - -@example -url = git://git.sv.gnu.org/lilypond.git/ -@end example - -@noindent -into - -@example -url = ssh://@var{user}@@git.sv.gnu.org/srv/git/lilypond.git -@end example - -@noindent -where @var{user} is your login name on Savannah. - -If you have not already done so, you should generate and upload a SSH -key: open @uref{https://savannah.gnu.org/my/} in your browser, then go to -@q{Preferences} then to something like @q{Edit SSH Keys}, and follow -the instructions on that page. - -You may then: - -@example -git push origin -@end example - -@node Advanced git stuff -@section Advanced git stuff - -@warning{This section is not necessary for normal contributors; -these commands are presented for information for people interested -in learning more about git.} - - -It is possible to work with several branches on the same local Git -repository; this is especially useful for translators who may have to -deal with both @code{lilypond/translation} and a stable branch, -e.g. @code{stable/2.12}. - -Some Git commands are introduced first, then a workflow with several -Git branches of LilyPond source code is presented. - -@menu -* Introduction to Git concepts:: -* Git commands for managing several branches:: -* Working on LilyPond sources with several branches:: -* Git log:: -* Applying git patches:: -@end menu - - -@node Introduction to Git concepts -@subsection Introduction to Git concepts - -A bit of Git vocabulary will be explained below. The following is -just introduction material; for better understanding of Git concepts, -you are invited to read further documentation, especially Git -Community Book at @uref{http://book.git-scm.com/}. - -The @code{git pull origin} command above is just a shortcut for this -command: - -@example -git pull git://git.sv.gnu.org/lilypond.git/ @var{branch}:origin/@var{branch} -@end example - -@noindent -where @code{@var{branch}} is typically @code{master}, @code{web} or -@code{lilypond/translation}; if you do not know or remember, see -@ref{Getting the source code} to remember which commands you issued or -which source code you wanted to get. - -A @emph{commit} is a set of changes made to the sources; it also -includes the committish of the parent commit, the name and e-mail of -the @emph{author} (the person who wrote the changes), the name and -e-mail of the @emph{committer} (the person who brings these changes -into the Git repository), and a commit message. - -A @emph{committish} is the SHA1 checksum of a commit, a number made of -40 hexadecimal digits, which acts as the internal unique identifier -for this commit. To refer to a particular revision, don't use vague -references like the (approximative) date, simply copy and paste the -committish. - -A @emph{branch} is nothing more than a pointer to a particular commit, -which is called the @emph{head} of the branch; when referring to a -branch, one often acutally thinks about its head and the ancestor -commits of the head. - -Now we will explain the two last commands you used to get the source -code from Git -- see @ref{Getting the source code}. - -@example -git remote add -f -t @var{branch} -m @var{branch} origin git://git.sv.gnu.org/lilypond.git/ -git checkout -b @var{branch} origin/@var{branch} -@end example - -The @command{git remote} has created a branch called -@code{origin/@var{branch}} in your local Git repository. As this -branch is a copy of the remote branch web from git.sv.gnu.org LilyPond -repository, it is called a @emph{remote branch}, and is meant to track -the changes on the branch from git.sv.gnu.org: it will be updated -every time you run @command{git pull origin} or @command{git fetch -origin}. - -The @command{git checkout} command has created a branch named -@code{@var{branch}}. At the beginning, this branch is identical to -@code{origin/@var{branch}}, but it will differ as soon as you make -changes, e.g. adding newly translated pages or editing some -documentation or code source file. Whenever you pull, you merge the -changes from @code{origin/@var{branch}} and @code{@var{branch}} since -the last pulling. If you do not have push (i.e. @qq{write}) access on -git.sv.gnu.org, your @code{@var{branch}} will always differ from -@code{origin/@var{branch}}. In this case, remember that other people -working like you with the remote branch @code{@var{branch}} of -git://git.sv.gnu.org/lilypond.git/ (called @code{origin/@var{branch}} -on your local repository) know nothing about your own -@code{@var{branch}}: this means that whenever you use a committish or -make a patch, others expect you to take the latest commit of -@code{origin/@var{branch}} as a reference. - -Finally, please remember to read the man page of every Git command you -will find in this manual in case you want to discover alternate -methods or just understand how it works. - - -@node Git commands for managing several branches -@subsection Git commands for managing several branches - -@subsubheading Listing branches and remotes - -You can get the exact path or URL of all remotes with -running - -@example -git remote -v -@end example - -To list Git branches on your local repositories, run - -@example -git branch # list local branches only -git branch -r # list remote branches -git branch -a # list all branches -@end example - - -@subsubheading Checking out branches - -To know the currently checked out branch, i.e. the branch whose source -files are present in your working tree, read the first line of the -output of - -@example -git status -@end example - -@noindent -The currently checked out branch is also marked with an asterisk in -the output of @command{git branch}. - -You can check out another branch @code{@var{other_branch}}, i.e. check -out @code{@var{other_branch}} to the working tree, by running - -@example -git checkout @var{other_branch} -@end example - -Note that it is possible to check out another branch while having -uncommitted changes, but it is not recommended unless you know what -you are doing; it is recommended to run @command{git status} to check -this kind of issue before checking out another branch. - - -@subsubheading Merging branches - -To merge branch @code{@var{foo}} into branch @code{@var{bar}}, i.e. to -@qq{add} all changes made in branch @code{@var{foo}} to branch -@code{@var{bar}}, run - -@example -git checkout @var{bar} -git merge @var{foo} -@end example - -If any conflict happens, see @ref{Resolving conflicts}. - -There are common usage cases for merging: as a translator, you will -often want to merge @code{master} into @code{lilypond/translation}; on -the other hand, the Translations meister wants to merge -@code{lilypond/translation} into @code{master} whenever he has checked -that @code{lilypond/translation} builds successfully. - - -@node Working on LilyPond sources with several branches -@subsection Working on LilyPond sources with several branches - -@subsubheading Fetching new branches from git.sv.gnu.org - -To fetch and check out a new branch named @code{@var{branch}} on -git.sv.gnu.org, run from top of the Git repository - -@example -git config --add remote.origin.fetch +refs/heads/@var{branch}:refs/remotes/origin/@var{branch} -git checkout --track -b @var{branch} origin/@var{branch} -@end example - -After this, you can pull @code{@var{branch}} from git.sv.gnu.org with - -@example -git pull origin -@end example - -Note that this command generally fetches all branches you added with -@command{git remote add} (when you initialized the repository) or -@command{git config --add}, i.e. it updates all remote branches from -remote @code{origin}, then it merges the remote branch tracked by -current branch into current branch. For example, if your current -branch is @code{master} --- which is the case if you got the sources -with the commands described in @ref{Main source code} and did not -issue any @command{git checkout} command --- @code{origin/master} will -be merged into @code{master}. - - -@subsubheading Local clones, or having several working trees - -If you play with several Git branches, e.g. @code{master}, -@code{lilypond/translation}, @code{stable/2.12}), you may want to have -one source and build tree for each branch; this is possible with -subdirectories of your local Git repository, used as local cloned -subrepositories. To create a local clone for the branch named -@code{@var{branch}}, run - -@example -git checkout @var{branch} -git clone -l -s -n . @var{subdir} -cd @var{subdir} -git reset --hard -@end example - -Note that @code{@var{subdir}} must be a directory name which does not -already exist. In @code{@var{subdir}}, you can use all Git commands -to browse revisions history, commit and uncommit changes; to update -the cloned subrepository with changes made on the main repository, cd -into @code{@var{subdir}} and run @command{git pull}; to send changes -made on the subrepository back to the main repository, run -@command{git push} from @code{@var{subdir}}. Note that only one -branch (the currently checked out branch) is created in the -subrepository by default; it is possible to have several branches in a -subrepository and do usual operations (checkout, merge, create, -delete...) on these branches, but this possibility is not detailed -here. - -When you push @code{@var{branch}} from @code{@var{subdir}} to the main -repository, and @code{@var{branch}} is checked out in the main -repository, you must save uncommitted changes (see @command{git -stash}) and do @command{git reset --hard} in the main repository in -order to apply pushed changes in the working tree of the main -repository. - - - -@node Git log -@subsection Git log - -The commands above don't only bring you the latest version of the -sources, but also the full history of revisions (revisons, also -called commits, are changes made to the sources), stored in the -.git directory. You can browse this history with - -@example -git log # only shows the logs (author, committish and commit message) -git log -p # also shows diffs -gitk # shows history graphically -@end example - -@warning{The @code{gitk} command may require a separate @code{gitk} package, -available in the appropriate distribution's repositories.} - -@node Applying git patches -@subsection Applying git patches - -Well-formed git patches should be committed with - -@example -git am -@end example - -Patches created without @code{git format-patch} should be -committed with - -@example -git apply -@end example - - - -@node Git on Windows -@section Git on Windows - -@c Some of this may duplicate stuff in other sections -@c Clear this up later -td - -@subsection Background to nomenclature - -Git is a system for tracking the changes made to source files by -a distributed set of editors. It is designed to work without a -master repository, but we have chosen to have a master respository -for LilyPond files. Editors hold local copies of the master -repository together with any changes they have made locally. Local -changes are held in a local @q{branch}, of which there may be -several, but these instructions assume you are using just one. The -files visible in the local repository always correspond to those -on the currently @q{checked out} local branch. - -Files are edited on a local branch, and in that state the -changes are said to be @q{unstaged}. When editing is complete, the -changes are moved to being @q{staged for commit}, and finally the -changes are @q{committed} to the local branch. Once -committed, the changes are given a unique reference number called the -@q{Committish} which identifies them to Git. Such committed changes -can be sent to the master repository by @q{pushing} them (if you -have write permission) or by sending them by email to someone who -has, either complete or as a @q{diff} or @q{patch} (which send -just the differences from master). - -@subsection Installing git - -Obtain Git from -@uref{http://code.google.com/p/msysgit/downloads/list} -(note, not msysGit, which is for Git developers and not PortableGit, -which is not a full git installation) and -install it. - -Note that most users will not need to install SSH. That is not -required until you have been granted direct push permissions to -the master git repository. - -Start Git by clicking on the desktop icon. -This will bring up a command line bash shell. This may be -unfamiliar to Windows users. If so, follow these -instructions carefully. Commands are entered at a $ prompt -and are terminated by keying a newline. - -@subsection Initialising Git - -Decide where you wish to place your local Git repository, -creating the folders in Windows as necessary. Here we -call the folder to contain the repository [path]/Git. -You will need to have space for around 150Mbytes. - -Start the Git bash shell by clicking on the desk-top icon installed -with Git and type - -@example -cd [path]/Git -@end example - -to position the shell at your new Git repository. - -Note: if [path] contains folders with names containing -spaces use - -@example -cd "[path]/Git" -@end example - -Then type - -@example -git init -@end example - -to initialize your Git repository. - -Then type (all on one line; the shell will wrap automatically) - -@example -git remote add -f -t master origin git://git.sv.gnu.org/lilypond.git -@end example - -to download the lilypond master files. - -@warning{Be patient! Even on a broadband connection this can take -10 minutes or more. Wait for lots of [new tag] messages -and the $ prompt.} - -We now need to generate a local copy of the downloaded files -in a new local branch. Your local branch needs to have a -name, here we call it @q{lily-local} - you may wish to make up -your own. - -Then, finally, type - -@example -git checkout -b lily-local origin/master -@end example - -to create the lily-local branch containing the local copies of the -master files. You will be advised your local branch has been set -up to track the remote branch. - -Return to Windows Explorer and look in your Git repository. You -should see lots of folders. For example, the LilyPond documentation -can be found in Git/Documentation/user. - -Terminate the Git bash shell by typing @code{exit}. - -@subsection Git GUI - -Almost all subsequent work will use the Git Graphical User -Interface, which avoids having to type command line -commands. To start Git GUI first start the Git bash shell by -clicking on the desktop icon, and type - -@example -cd [path]/Git -git gui -@end example - -The Git GUI will open in a new window. It contains four panels -and 7 pull-down menus. At this stage do not use any of the -commands under Branch, Commit, Merge or Remote. These will -be explained later. - -The two panels on the left contain the names of files which -you are in the process of editing (Unstaged Changes), and -files you have finished editing and have staged ready for -committing (Staged Changes). At this stage these panels will -be empty as you have not yet made any changes to any file. -After a file has been edited and saved the top panel on the right -will display the differences between the edited file selected -in one of the panels on the left and the last version committed. - -The final panel at bottom right is used to enter a descriptive -message about the change before committing it. - -The Git GUI is terminated by entering CNTL-Q while it is the -active window or by clicking on the usual Windows close-window -widget. - -@subsection Personalising your local git repository - -Open the Git GUI, click on - -@example -Edit -> Options -@end example - -and enter your name and email address in the -left-hand (Git Repository) panel. Leave everything -else unchanged and save it. - -Note that Windows users must leave the default setting for line -endings unchanged. All files in a git repository must have lines -terminated by just a LF, as this is required for Merge to work, but -Windows files are terminated by CRLF by default. The git default -setting causes the line endings of files in a Windows git repository -to be flipped automatically between LF and CRLF as required. This -enables files to be edited by any Windows editor without causing -problems in the git repository. - -@subsection Checking out a branch - -At this stage you have two branches in your local repository, -both identical. To see them click on - -@example -Branch -> Checkout -@end example - -You should have one local branch called @w{lily-local} and one -tracking branch called @w{origin/master}. The latter is your -local copy of the @w{remote/origin/master} branch in the master -LilyPond repository. The @w{lily-local} branch is where you -will make your local changes. - -When a particular branch is selected, i.e., checked out, the -files visible in your repository are changed to reflect the -state of the files on that branch. - -@subsection Updating files from @w{remote/origin/master} - -Before starting the editing of a file, ensure your local branches -contain the latest version in @w{remote/origin/master} by first -clicking - -@example -Remote -> Fetch from -> origin -@end example - -@noindent -in the Git GUI. - -This will place the latest version of every file, including all the -changes made by others, -into the @q{origin/master} branch of the tracking branches -in your git repository. You can see these files by checking -out this branch. This will not affect any files you have -modified in your local branch. - -You then need to merge these fetched files into your local -branch by clicking on - -@example -Merge -> Local Merge -@end example - -@noindent -and if necessary select the local branch into which the merge -is to be made. - -Note that a merge cannot be completed if there are any local -uncommitted changes on the lily-local branch. - -This will update all the files in that branch to reflect the -current state of the @w{origin/master} branch. If any of the -changes conflict with changes you have made yourself recently -you will be notified of the conflict (see below). - -@subsection Editing files - -First ensure your lily-local branch is checked out, then -simply edit the files in your local Git repository with your -favourite editor and save them back there. If any file contains -non-ASCII characters ensure you save it in UTF-8 format. Git will -detect any changes whenever you restart Git GUI and the file names -will then be listed in the Unstaged Changes panel. -Or you can click the Rescan button to refresh the panel -contents at any time. You may break off and resume at -editing any time. - -The changes you have made may be displayed in diff form -in the top right-hand panel by clicking on the name in -Git GUI. - -When your editing is complete, move the files from being -Unstaged to Staged by clicking the document symbol to -the left of each name. If you change your mind it can -be moved back by clicking on the ticked box to the -left of the name. - -Finally the changes you have made may be committed to -your lily-local branch by entering a brief message in -the Commit Message box and clicking the Commit button. - -If you wish to amend your changes after a commit has been -made, the original version and the changes you made in that -commit may be recovered by selecting - -@example -Commit -> Amend Last Commit -@end example - -@noindent -or by checking the Amend Last Commit radio button at bottom left. -This will return the changes to the Staged state, so further -editing made be carried out within that commit. This must only be -done @emph{before} the changes have been Pushed or sent to your -mentor for Pushing - after that it is too late and corrections -have to be made as a separate commit. - - -@subsection Sending changes to remote/origin/master - -If you do not have write access to @w{remote/origin/master} you will -need to send your changes by email to someone who does. - -First you need to create a diff or patch file containing -your changes. To create this, the file must first be -committed. Then terminate the Git GUI. In the -git bash shell first cd to your Git repository with - -@example -cd [path]/Git -@end example - -if necessary, then produce the patch with - -@example -git format-patch origin -@end example - -This will create a patch file for all the locally committed files -which differ from @w{origin/master}. The patch file can be found -in [path]/Git and will have a name formed from n and the commit -message. - -@subsection Resolving merge conflicts - -As soon as you have committed a changed file your local -branch has diverged from @w{origin/master}, and will -remain diverged until your changes have been committed -in @w{remote/origin/master} and Fetched back into your -@w{origin/master}. Similarly, if a new commit has been made -to @w{remote/origin/master} by someone else and Fetched, your -lily-local branch is divergent. You can detect a divergent -branch by clicking on - -@example -Repository -> Visualise all branch history -@end example - -This opens up a very useful new window called @q{gitk}. -Use this to browse all the commits made by others. - -If the diagram at top left of the resulting window -does not show your branch's tag on the same node as -the @w{remote/origins/master} tag your branch has diverged from -@w{origin/master}. This is quite normal if files you have modified -yourself have not yet been Pushed to @w{remote/origin/master} and -Fetched, or if files modified and committed by others have been -Fetched since you last Merged @w{origin/master} into your lily-local -branch. - -If a file being merged from @w{origin/master} differs from -one you have modified in a way that cannot be resolved -automatically by git, Merge will report a Conflict -which you must resolve by editing the file to create the -version you wish to keep. - -This could happen if the person updating @w{remote/origin/master} -for you has added some changes of his own before -committing your changes to @w{remote/origin/master}, or if someone -else has changed the same file since you last -fetched the file from @w{remote/origin/master}. - -Open the file in your editor and look for sections which -are delimited with ... - -[to be completed when I next have a merge conflict to be -sure I give the right instructions -td] - - -@subsection Other actions - -The instructions above describe the simplest way of using -git on Windows. Other git facilities which may usefully -supplement these include - -@itemize - -@item Using multiple local branches (Create, Rename, Delete) -@item Resetting branches -@item Cherry-picking commits -@item Pushing commits to @w{remote/origin/master} -@item Using gitk to review history - -@end itemize - -Once familiarity with using git on Windows has been gained the -standard git manuals can be used to learn about these. diff --git a/Documentation/devel/index.html.in b/Documentation/devel/index.html.in deleted file mode 100644 index 5e11693593..0000000000 --- a/Documentation/devel/index.html.in +++ /dev/null @@ -1,92 +0,0 @@ - - - - LilyPond @TOPLEVEL_VERSION@ Developers Resources - - - - - - - -
-

LilyPond developers resources

-
- -
-

- Version @TOPLEVEL_VERSION@ -
- @DATE@ -

-
- - - - - -
-
- Contributors' - Guide - (in one - big page, in PDF) -
(how to participate in development) -
- - - - - - - - - - - - - -
- - - diff --git a/Documentation/devel/issues.itexi b/Documentation/devel/issues.itexi deleted file mode 100644 index f7b5260aa9..0000000000 --- a/Documentation/devel/issues.itexi +++ /dev/null @@ -1,38 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@node Issues -@chapter Issues - -@menu -* Introduction to issues:: -* Issue classification:: -* Adding issues to the tracker:: -@end menu - - -@node Introduction to issues -@section Introduction to issues - -First, @qq{issue} isn't just a politically-correct term for -@qq{bug}. We use the same tracker for feature requests and code -TODOs, so the term @qq{bug} wouldn't be accurate. - -Second, the classification of what counts as a bug vs. feature -request, and the priorities assigned to bugs, are a matter of -concern @strong{for developers only}. If you are curious about -the classification, read on, but don't complain that your -particular issue is higher priority or counts as a bug rather than -a feature request. - - -@node Issue classification -@section Issue classification - - -@node Adding issues to the tracker -@section Adding issues to the tracker - - - - - - diff --git a/Documentation/devel/lsr-work.itexi b/Documentation/devel/lsr-work.itexi deleted file mode 100644 index b3d4996344..0000000000 --- a/Documentation/devel/lsr-work.itexi +++ /dev/null @@ -1,260 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@node LSR work -@chapter LSR work - -@menu -* Introduction to LSR:: -* Adding and editing snippets:: -* Approving snippets:: -* LSR to Git:: -* Fixing snippets in LilyPond sources:: -* Updating LSR to a new version:: -@end menu - - -@node Introduction to LSR -@section Introduction to LSR - -The -@uref{http://lsr.dsi.unimi.it/, LilyPond Snippet Repository (LSR)} -is a collection of lilypond examples. A subset of these examples -are automatically imported into the documentation, making it easy -for users to contribute to the docs without learning Git and -Texinfo. - - -@node Adding and editing snippets -@section Adding and editing snippets - -@subheading General guidelines - -When you create (or find!) a nice snippet, if it supported by LilyPond -version running on LSR, please add it to LSR. Go to -@uref{http://lsr.dsi.unimi.it/, LSR} and log in -- if you haven't -already, create an account. Follow the instructions on the website. -These instructions also explain how to modify existing snippets. - -If you think the snippet is particularly informative and you think it -should be included in the documentation, tag it with @qq{docs} and one -or more other categories, or ask somebody who has editing permissions to -do it on the development list. - -Please make sure that the lilypond code follows the guidelines in -@ref{LilyPond formatting}. - -If a new snippet created for documentation purposes compiles with -LilyPond version currently on LSR, it should be added to LSR, and a -reference to the snippet should be added to the documentation. - -If the new snippet uses new features that are not available in the -current LSR version, the snippet should be added to @file{input/new} and -a reference should be added to the manual. - -Snippets created or updated in @file{input/new} should be copied to -@file{input/lsr} by invoking at top of the source tree - -@example -scripts/auxiliar/makelsr.py -@end example - -Be sure that @command{make doc} runs successfully before submitting a -patch, to prevent breaking compilation. - -@subheading Formatting snippets in @file{input/new} - -When adding a file to this directory, please start the file with - -@example -\version "2.x.y" -\header @{ - lsrtags = "rhythms,expressive-marks" % use existing LSR tags other than -% 'docs'; see makelsr.py for the list of tags used to sort snippets. - texidoc = "This code demonstrates ..." % this will be formated by Texinfo - doctitle = "Snippet title" % please put this at the end so that - the '% begin verbatim' mark is added correctly by makelsr.py. -@} -@end example - -and name the file @file{snippet-title.ly}. - - -@node Approving snippets -@section Approving snippets - -The main task of LSR editors is approving snippets. To find a list of -unapproved snippets, log into @uref{http://lsr.dsi.unimi.it/, LSR} and -select @qq{No} from the dropdown menu to the right of the word -@qq{Approved} at the bottom of the interface, then click -@qq{Enable filter}. - -Check each snippet: - -@enumerate - -@item -Does the snippet make sense and does what the author claims that -it does? If you think the snippet is particularly helpful, add -the @qq{docs} tag and at least one other tag. - -@item -If the snippet is tagged with @qq{docs}, check to see if it -matches our guidelines for @ref{LilyPond formatting}. - -@item -If the snippet uses scheme, check that everything looks good and -there are no security risks. - -@warning{Somebody could sneak a @code{#'(system "rm -rf /")} -command into our source tree if you do not do this! Take this -step @strong{VERY SERIOUSLY}.} - -@end enumerate - - -@node LSR to Git -@section LSR to Git - -@enumerate - -@item -Make sure that @command{convert-ly} and @command{lilypond} commands in -current PATH are in a bleeding edge version -- latest release from -master branch, or even better a fresh snapshot from Git master branch. - -@item -From the top source directory, run: - -@example -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 - -@noindent -where @var{YYYY-MM-DD} is the current date, e.g. 2009-02-28. - -@item -Follow the instructions printed on the console to manually check for -unsafe files. - -@warning{Somebody could sneak a @code{#'(system "rm -rf /")} -command into our source tree if you do not do this! Take this -step @strong{VERY SERIOUSLY}.} - -@item -Do a git add / commit / push. - -@end enumerate - -Note that whenever there is one snippet from @file{input/new} and the -other from LSR with the same file name, the one from @file{input/new} -will be copied by @command{makelsr.py}. - - -@node Fixing snippets in LilyPond sources -@section Fixing snippets in LilyPond sources - -In case some snippet from @file{input/lsr} cause the documentation -compilation to fail, the following steps should be followed to fix it -reliably. - -@enumerate - -@item -Look up the snippet filename @file{@var{foo}.ly} in the error output -or log, then fix the file @file{input/lsr/@var{foo}.ly} to make the -documentation build succesfully. - -@item -Determine where it comes from by looking at its first line, e.g. run - -@example -head -1 input/lsr/@var{foo}.ly -@end example - -@item -@strong{In case the snippet comes from LSR}, apply the fix to the -snippet in LSR and send a notification email to a LSR editor with CC -to the development list -- see @ref{Adding and editing snippets}. The -failure may sometimes not be caused by the snippet in LSR but by the -syntax conversion made by @command{convert-ly}; in this case, try to -fix @command{convert-ly} or report the problem on the development -list, then run @command{makelsr.py} again, see @ref{LSR to Git}. In -some cases, when some features has been introduced or vastly changed -so it requires (or takes significant advantage of) important changes -in the snippet, it is simpler and recommended to write a new version -of the snippet in @file{input/new}, then run @command{makelsr.py}. - -@item -@strong{In case the snippet comes from} @file{input/new}, apply in -@file{input/new/@var{foo}.ly} the same fix you did in -@file{input/lsr/@var{foo}.ly}. In case the build failure was caused -by a translation string, you may have to fix -@file{input/texidocs/@var{foo}.texidoc} instead. - -@item -In any case, commit all changes to Git. - -@end enumerate - - - -@node Updating LSR to a new version -@section Updating LSR to a new version - -To update LSR, perform the following steps: - -@enumerate - -@item -Download the latest snippet tarball, extract it, and run -@code{convert-ly} on all files using the command-line option -@code{--to=VERSION} to ensure snippets are updated to the -correct stable version. - -@item -Copy relevant snippets (i.e., snippets whose version is equal to or -less than the new version of LilyPond) from @file{input/new/} into -the tarball. - -You must not rename any files during this, or the next, stage. - -@item -Verify that all files compile with the new version of LilyPond, -ideally without any warnings or errors. To ease the process, -you may use the shell script that appears after this list. - -Due to the workload involved, we @emph{do not} require that you -verify that all snippets produce the expected output. If you -happen to notice any such snippets and can fix them, great; but as -long as all snippets compile, don't delay this step due to some -weird output. If a snippet is broken, the hordes of willing -web-2.0 volunteers will fix it. It's not our problem. - -@item -Create a tarball and send it back to Sebastiano. - -@item -When LSR has been updated, download another snippet tarball, -verify that the relevant snippets from @file{input/new/} were -included, then delete those snippets from @file{input/new/}. - -@end enumerate - - -Here is a shell script to run all @code{.ly} files in a directory -and redirect terminal output to text files, which are then -searched for the word "failed" to see which snippets do not compile. - -@example -#!/bin/bash - -for LILYFILE in *.ly -do - STEM=$(basename "$LILYFILE" .ly) - echo "running $LILYFILE..." - lilypond --format=png -ddelete-intermediate-files "$LILYFILE" >& "$STEM".txt -done - -grep failed *.txt -@end example diff --git a/Documentation/devel/programming-work.itexi b/Documentation/devel/programming-work.itexi deleted file mode 100644 index 900d0a6846..0000000000 --- a/Documentation/devel/programming-work.itexi +++ /dev/null @@ -1,669 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@node Programming work -@chapter Programming work - -@menu -* Overview of LilyPond architecture:: -* LilyPond programming languages:: -* Programming without compiling:: -* Finding functions:: -* Code style:: -* Debugging LilyPond:: -@end menu - -@node Overview of LilyPond architecture -@section Overview of LilyPond architecture - -LilyPond processes the input file into graphical and musical output in a -number of stages. This process, along with the types of routines that -accomplish the various stages of the process, is described in this section. A -more complete description of the LilyPond architecture and internal program -execution is found in Erik Sandberg's -@uref{http://lilypond.org/web/images/thesis-erik-sandberg.pdf, master's -thesis}. - - -The first stage of LilyPond processing is @emph{parsing}. In the parsing -process, music expressions in LilyPond input format are converted to music -expressions in Scheme format. In Scheme format, a music expression is a list -in tree form, with nodes that indicate the relationships between various music -events. The LilyPond parser is written in Bison. - -The second stage of LilyPond processing is @emph{iterating}. Iterating -assigns each music event to a context, which is the environment in which the -music will be finally engraved. The context is responsible for all further -processing of the music. It is during the iteration stage that contexts are -created as necessary to ensure that every note has a Voice type context (e.g. -Voice, TabVoice, DrumVoice, CueVoice, MensuralVoice, VaticanaVoice, -GregorianTranscriptionVoice), that the Voice type contexts exist in -appropriate Staff type contexts, and that parallel Staff type contexts exist -in StaffGroup type contexts. In addition, during the iteration stage each -music event is assigned a moment, or a time in the music when the event -begins. - -Each type of music event has an associated iterator. Iterators are defined in -*-iterator.cc. During iteration, an -event's iterator is called to deliver that music event to the appropriate -context(s). - -The final stage of LilyPond processing is @emph{translation}. During -translation, music events are prepared for graphical or midi output. The -translation step is accomplished by translators or engravers (the distinction -is unclear). - -Translators are defined in C++ files named *-engraver.cc. In *-engraver.cc, a -C++ class of Engraver type is created. The Engraver is also declared as a -translator. Much of the work of translating is handled by Scheme functions, -which is one of the keys to LilyPond's exceptional flexibility. - - -@node LilyPond programming languages -@section LilyPond programming languages - -Programming in LilyPond is done in a variety of programming languages. Each -language is used for a specific purpose or purposes. This section describes -the languages used and provides links to reference manuals and tutorials for -the relevant language. - -@subsection C++ - -The core functionality of LilyPond is implemented in C++. - -C++ is so ubiquitous that it is difficult to identify either a reference -manual or a tutorial. Programmers unfamiliar with C++ will need to spend some -time to learn the language before attempting to modify the C++ code. - -The C++ code calls Scheme/GUILE through the GUILE interface, which is -documented in the -@uref{http://www.gnu.org/software/guile/manual/html_node/index.html, GUILE - Reference Manual}. - -@subsection GNU Bison - -The LilyPond parser is implemented in Bison, a GNU parser generator. The -Bison homepage is found at @uref{http://www.gnu.org/software/bison/, -gnu.org}. The manual (which includes both a reference and tutorial) is -@uref{http://www.gnu.org/software/bison/manual/index.html, available} in a -variety of formats. - -@subsection GNU Make - -GNU Make is used to control the compiling process and to build the -documentation and the website. GNU Make documentation is available at -@uref{http://www.gnu.org/software/make/manual/, the GNU website}. - -@subsection GUILE or Scheme - -GUILE is the dialect of Scheme that is used as LilyPond's extension language. Many extensions to LilyPond are written entirely in GUILE. The -@uref{http://www.gnu.org/software/guile/manual/html_node/index.html, -GUILE Reference Manual} is available online. - -@uref{http://mitpress.mit.edu/sicp/full-text/book/book.html, Structure and -Interpretation of Computer Programs}, a popular textbook used to teach -programming in Scheme is available in its entirety online. - -An introduction to Guile/Scheme as used in LilyPond can be found in the -Learning Manual, see @rlearning{Scheme tutorial}. - -@subsection MetaFont - -MetaFont is used to create the music fonts used by LilyPond. A MetaFont -tutorial is available at @uref{http://metafont.tutorial.free.fr/, the -METAFONT tutorial page}. - -@subsection PostScript - -PostScript is used to generate graphical output. A brief PostScript tutorial -is @uref{http://local.wasp.uwa.edu.au/~pbourke/dataformats/postscript/, -available online}. The -@uref{http://www.adobe.com/devnet/postscript/pdfs/PLRM.pdf, PostScript Lanugage -Reference} is available online in PDF format. - -@subsection Python - -Python is used for XML2ly and is used for buillding the documentation and the -website. - -Python documentation is available at @uref{http://www.python.org/doc/, -python.org}. - -@node Programming without compiling -@section Programming without compiling - -Much of the development work in LilyPond takes place by changing *.ly or -*.scm files. These changes can be made without compiling LilyPond. Such -changes are described in this section. - - -@subsection Modifying distribution files - -Much of LilyPond is written in Scheme or LilyPond input files. These -files are interpreted when the program is run, rather than being compiled -when the program is built, and are present in all LilyPond distributions. -You will find .ly files in the ly/ directory and the Scheme files in the -scm/ directory. Both Scheme files and .ly files can be modified and -saved with any text editor. It's probably wise to make a backup copy of -your files before you modify them, although you can reinstall if the -files become corrupted. - -Once you've modified the files, you can test the changes just by running -LilyPond on some input file. It's a good idea to create a file that -demonstrates the feature you're trying to add. This file will eventually -become a regression test and will be part of the LilyPond distribution. - -@subsection Desired file formatting - -Files that are part of the LilyPond distribution have Unix-style line -endings (LF), rather than DOS (CR+LF) or MacOS 9 and earlier (CR). Make -sure you use the necessary tools to ensure that Unix-style line endings are -preserved in the patches you create. - -Tab characters should not be included in files for distribution. All -indentation should be done with spaces. Most editors have settings to -allow the setting of tab stops and ensuring that no tab characters are -included in the file. - -Scheme files and LilyPond files should be written according to standard -style guidelines. Scheme file guidelines can be found at -@uref{http://community.schemewiki.org/?scheme-style}. Following these -guidelines will make your code easier to read. Both you and others that -work on your code will be glad you followed these guidelines. - -For LilyPond files, you should follow the guidelines for LilyPond snippets -in the documentation. You can find these guidelines at -@ref{Texinfo introduction and usage policy}. - -@node Finding functions -@section Finding functions - -When making changes or fixing bugs in LilyPond, one of the initial -challenges is finding out where in the code tree the functions to -be modified live. With nearly 3000 files in the source tree, -trial-and-error searching is generally ineffective. This section -describes a process for finding interesting code. - -@subsection Using the ROADMAP - -The file ROADMAP is located in the main directory of the lilypond source. -ROADMAP lists all of the directories in the LilPond source tree, along -with a brief description of the kind of files found in each directory. -This can be a very helpful tool for deciding which directories to search -when looking for a function. - - -@subsection Using grep to search - -Having identified a likely subdirectory to search, the grep utility can -be used to search for a function name. The format of the grep command is - -@example -grep -i functionName subdirectory/* -@end example - -This command will search all the contents of the directory subdirectory/ -and display every line in any of the files that contains -functionName. The @code{-i} option makes @command{grep} ignore -case -- this can be very useful if you are not yet familiar with -our capitalization conventions. - -The most likely directories to grep for function names are scm/ for -scheme files, ly/ for lilypond input (*.ly) files, and lily/ for C++ -files. - - -@subsection Using git grep to search - -If you have used git to obtain the source, you have access to a -powerful tool to search for functions. The command: - -@example -git grep functionName -@end example - -will search through all of the files that are present in the git -repository looking for functionName. It also presents the results -of the search using @code{less}, so the results are displayed one page -at a time. - -@subsection Searching on the git repository at Savannah - -You can also use the equivalent of git grep on the Savannah server. - -@itemize - -@item -Go to http://git.sv.gnu.org/gitweb/?p=lilypond.git - -@item -In the pulldown box that says commit, select grep. - -@item -Type functionName in the search box, and hit enter/return - -@end itemize - -This will initiate a search of the remote git repository. - - -@node Code style -@section Code style -@c email to wl@gnu.org when I get here. - -@menu -@end menu - -@subsection Handling errors - -As a general rule, you should always try to continue computations, -even if there is some kind of error. When the program stops, it -is often very hard for a user to pinpoint what part of the input -causes an error. Finding the culprit is much easier if there is -some viewable output. - -So functions and methods do not return errorcodes, they never -crash, but report a programming_error and try to carry on. - -@subsection Languages - -C++ and Python are preferred. Python code should use PEP 8. - -@subsection Filenames - -Definitions of classes that are only accessed via pointers (*) or -references (&) shall not be included as include files. - -@verbatim - filenames - - ".hh" Include files - ".cc" Implementation files - ".icc" Inline definition files - ".tcc" non inline Template defs - - in emacs: - - (setq auto-mode-alist - (append '(("\\.make$" . makefile-mode) - ("\\.cc$" . c++-mode) - ("\\.icc$" . c++-mode) - ("\\.tcc$" . c++-mode) - ("\\.hh$" . c++-mode) - ("\\.pod$" . text-mode) - ) - auto-mode-alist)) -@end verbatim - -The class Class_name is coded in @q{class-name.*} - -@subsection Indentation - -Standard GNU coding style is used. In emacs: - -@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}: - -@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 - - -@subsection Classes and Types - -@verbatim -This_is_a_class -@end verbatim - - -@subsection Members - -Member variable names end with an underscore: - -@verbatim -Type Class::member_ -@end verbatim - - -@subsection Macros - -Macro names should be written in uppercase completely. - - -@subsection Broken code - -Do not write broken code. This includes hardwired dependencies, -hardwired constants, slow algorithms and obvious limitations. If -you can not avoid it, mark the place clearly, and add a comment -explaining shortcomings of the code. - -We reject broken-in-advance on principle. - -@subsection Naming - - -@subsection Messages - -Messages need to follow Localization. - - -@subsection Localization - -This document provides some guidelines for programmers write user -messages. To help translations, user messages must follow -uniform conventions. Follow these rules when coding for LilyPond. -Hopefully, this can be replaced by general GNU guidelines in the -future. Even better would be to have an English (en_BR, en_AM) -guide helping programmers writing consistent messages for all GNU -programs. - -Non-preferred messages are marked with `+'. By convention, -ungrammatical examples are marked with `*'. However, such ungrammatical -examples may still be preferred. - -@itemize - -@item -Every message to the user should be localized (and thus be marked -for localization). This includes warning and error messages. - -@item -Don't localize/gettextify: - -@itemize -@item -`programming_error ()'s - -@item -`programming_warning ()'s - -@item -debug strings - -@item -output strings (PostScript, TeX, etc.) - -@end itemize - -@item -Messages to be localised must be encapsulated in `_ (STRING)' or -`_f (FORMAT, ...)'. E.g.: - -@example -warning (_ ("need music in a score")); -error (_f ("cannot open file: `%s'", file_name)); -@end example - -In some rare cases you may need to call `gettext ()' by hand. This -happens when you pre-define (a list of) string constants for later -use. In that case, you'll probably also need to mark these string -constants for translation, using `_i (STRING)'. The `_i' macro is -a no-op, it only serves as a marker for `xgettext'. - -@example -char const* messages[] = @{ - _i ("enable debugging output"), - _i ("ignore lilypond version"), - 0 -@}; - -void -foo (int i) -@{ - puts (gettext (messages i)); -@} -@end example - -See also `flower/getopt-long.cc' and `lily/main.cc'. - -@item -Do not use leading or trailing whitespace in messages. If you need -whitespace to be printed, prepend or append it to the translated -message - -@example -message ("Calculating line breaks..." + " "); -@end example - -@item -Error or warning messages displayed with a file name and line -number never start with a capital, eg, - -@example -foo.ly: 12: not a duration: 3 -@end example - -Messages containing a final verb, or a gerund (`-ing'-form) always -start with a capital. Other (simpler) messages start with a -lowercase letter - -@example -Processing foo.ly... -`foo': not declared. -Not declaring: `foo'. -@end example - -@item -Avoid abbreviations or short forms, use `cannot' and `do not' -rather than `can't' or `don't' -To avoid having a number of different messages for the same -situation, well will use quoting like this `"message: `%s'"' for all -strings. Numbers are not quoted: - -@example -_f ("cannot open file: `%s'", name_str) -_f ("cannot find character number: %d", i) -@end example - -@item -Think about translation issues. In a lot of cases, it is better to -translate a whole message. The english grammar must not be imposed -on the translator. So, instead of - -@example -stem at + moment.str () + does not fit in beam -@end example - -have - -@example -_f ("stem at %s does not fit in beam", moment.str ()) -@end example - -@item -Split up multi-sentence messages, whenever possible. Instead of - -@example -warning (_f ("out of tune! Can't find: `%s'", "Key_engraver")); -warning (_f ("cannot find font `%s', loading default", font_name)); -@end example - -rather say: - -@example -warning (_ ("out of tune:")); -warning (_f ("cannot find: `%s', "Key_engraver")); -warning (_f ("cannot find font: `%s', font_name)); -warning (_f ("Loading default font")); -@end example - -@item -If you must have multiple-sentence messages, use full punctuation. -Use two spaces after end of sentence punctuation. No punctuation -(esp. period) is used at the end of simple messages. - -@example -_f ("Non-matching braces in text `%s', adding braces", text) -_ ("Debug output disabled. Compiled with NPRINT.") -_f ("Huh? Not a Request: `%s'. Ignoring.", request) -@end example - -@item -Do not modularise too much; words frequently cannot be translated -without context. It is probably safe to treat most occurences of -words like stem, beam, crescendo as separately translatable words. - -@item -When translating, it is preferable to put interesting information -at the end of the message, rather than embedded in the middle. -This especially applies to frequently used messages, even if this -would mean sacrificing a bit of eloquency. This holds for original -messages too, of course. - -@example -en: cannot open: `foo.ly' -+ nl: kan `foo.ly' niet openen (1) -kan niet openen: `foo.ly'* (2) -niet te openen: `foo.ly'* (3) -@end example - - -The first nl message, although grammatically and stylistically -correct, is not friendly for parsing by humans (even if they speak -dutch). I guess we would prefer something like (2) or (3). - -@item -Do not run make po/po-update with GNU gettext < 0.10.35 - -@end itemize - - - -@node Debugging LilyPond -@section Debugging LilyPond - -The most commonly used tool for debugging LilyPond is the GNU debugger -gdb. Use of gdb is described in this section. - -@subsection Debugging overview - -Using a debugger simplifies troubleshooting in at least two ways. - -First, breakpoints can be set to pause execution at any desired point. -Then, when execution has paused, debugger commands can be issued to -explore the values of various variables or to execute functions. - -Second, the debugger allows the display of a stack trace, which shows -the sequence in which functions are called and the arguments to the -various function calls. - - -@subsection Compiling with debugging information - -In order to use a debugger with LilyPond, it is necessary to compile -LilyPond with debugging information. This is accomplished by ... - -TODO -- get good description here, or perhaps add debugging compile -to AU1.1 as it comes to CG and just use a reference here. - -TODO -- Test the following to make sure it is true. - -If you want to be able to set breakpoints in Scheme functions, it is -necessary to compile guile with debugging information. This is done -by ... - -TODO -- get compiling description for guile here. - -@subsection Typical gdb usage - -@subsection Typical .gdbinit files - -The behavior of gdb can be readily customized through the use of -@var{.gdbinit} files. A @var{.gdbinit} file is a file named -@var{.gdbinit} (notice the @qq{.} at the beginning of the file name) - that is placed in a user's home directory. - -The @var{.gdbinit} file below is from Han-Wen. It sets breakpoints -for all errors and defines functions for displaying scheme objects -(ps), grobs (pgrob), and parsed music expressions (pmusic). - -@example -file lily/out/lilypond -b scm_error -b programming_error -b Grob::programming_error - -define ps - print ly_display_scm($arg0) - end - define pgrob - print ly_display_scm($arg0->self_scm_) - print ly_display_scm($arg0->mutable_property_alist_) - print ly_display_scm($arg0->immutable_property_alist_) - print ly_display_scm($arg0->object_alist_) - end - define pmusic - print ly_display_scm($arg0->self_scm_) - print ly_display_scm($arg0->mutable_property_alist_) - print ly_display_scm($arg0->immutable_property_alist_) - end -@end example - -@subsection Using Guile interactively with LilyPond - -In order to experiment with Scheme programming in the LilyPond -environment, it is convenient to have a Guile interpreter that -has all the LilyPond modules loaded. This requires the following -steps. - -First, define a Scheme symbol for the active module -in the .ly file: - -@example -#(module-define! (resolve-module '(guile-user)) - 'lilypond-module (current-module)) -@end example - -Second, place a Scheme function in the .ly file that gives an interactive Guile -prompt: - -@example -#(top-repl) -@end example - -When the .ly file is compiled, this causes the compilation to be interrupted -and an interactive guile prompt to appear. When the guile prompt appears, -the LilyPond active module must be set as the current guile module: - -@example -guile> (set-current-module lilypond-module) -@end example - -Proper operation of these commands can be demonstrated by typing the name -of a LilyPond public scheme function to see if it's properly defined: - -@example -guile> fret-diagram-verbose-markup -# -@end example - -If the LilyPond module has not been correctly loaded, an error -message will be generated: - -@example -guile> fret-diagram-verbose-markup -ERROR: Unbound variable: fret-diagram-verbose-markup -ABORT: (unbound-variable) -@end example - -Once the module is properly loaded, any valid LilyPond Scheme expression -can be entered at the interactive prompt. - -After the investigation is complete, the interactive guile interpreter -can be exited: - -@example -guile> (quit) -@end example - -The compilation of the .ly file will then continue. - diff --git a/Documentation/devel/release-work.itexi b/Documentation/devel/release-work.itexi deleted file mode 100644 index c284ddc452..0000000000 --- a/Documentation/devel/release-work.itexi +++ /dev/null @@ -1,183 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@node Release work -@chapter Release work - -@menu -* Development phases:: -* Minor release checklist:: -* Major release checklist:: -* Making a release:: -@end menu - - -@node Development phases -@section Development phases - -There are 2.5 states of development for LilyPond. - -@itemize - -@item @strong{Stable phase}: -Starting from the release of a new major version @code{2.x.0}, the -following patches @strong{MAY NOT} be merged with master: - -@itemize -@item Any change to the input syntax. If a file compiled with a -previous @code{2.x} version, then it must compile in the new -version. - -@item New features with new syntax @emph{may be committed}, -although once committed that syntax cannot change during the -remainder of the stable phase. - -@item Any change to the build dependencies (including programming -libraries, documentation process programs, or python modules used -in the buildscripts). If a contributor could compile a previous -lilypond @code{2.x}, then he must be able to compile the new -version. - -@end itemize - -@item @strong{Development phase}: -Any commits are fine. Readers may be familiar with the term -@qq{merge window} from following Linux kernel news. - - -@item @strong{Release prep phase}: -FIXME: I don't like that name. - -A new git branch @code{stable/2.x} is created, and a major release -is made in two weeks. - -@itemize - -@item @code{stable/2.x branch}: -Only translation updates and important bugfixes are allows. - -@item @code{master}: -Normal @qq{stable phase} development occurs. - -@end itemize - -If we discover the need to change the syntax or build system, we -will apply it and re-start the release prep phase. - -@end itemize - -This marks a radical change from previous practice in LilyPond. -However, this setup is not intended to slow development -- as a -rule of thumb, the next development phase will start within a -month of somebody wanting to commit something which is not -permitted during the stable phase. - - - -@node Minor release checklist -@section Minor release checklist - -A @qq{minor release} means an update of @code{y} in @code{2.x.y}. - -email brief summary to info-lilypond - - - -@node Major release checklist -@section Major release checklist - -A @qq{major release} means an update of @code{x} in @code{2.x.0}. - -Before release: - -* write release notes. note: stringent size requirements for - various websites, so be brief. - -* write preface section for manual. - -* submit pots for translation : send url of tarball to -translation@@iro.umontreal.ca, mentioning lilypond-VERSION.pot - -* Check reg test - -* Check all 2ly scripts. - -* Run convert-ly on all files, bump parser minimum version. - -* Make FTP directories on lilypond.org - -* website: - - Make new table in download.html - - - add to documentation list - - - revise examples tour.html/howto.html - - - add to front-page quick links - - - change all links to the stable documentation - - - doc auto redirects to v2.LATEST-STABLE - -News: - - comp.music.research - comp.os.linux.announce - - comp.text.tex - rec.music.compose - -Mail: - - info-lilypond@@gnu.org - -linux-audio-announce@@lists.linuxaudio.org -linux-audio-user@@lists.linuxaudio.org -linux-audio-dev@@lists.linuxaudio.org - - tex-music@@icking-music-archive.org - - --- non-existant? - abcusers@@blackmill.net - - rosegarden-user@@lists.sourceforge.net - info-gnu@@gnu.org - noteedit-user@@berlios.de - - gmane.comp.audio.fomus.devel - gmane.linux.audio.users - gmane.linux.audio.announce - gmane.comp.audio.rosegarden.devel - -Web: - - lilypond.org - freshmeat.net - linuxfr.com - http://www.apple.com/downloads - harmony-central.com (news@@harmony-central.com) - versiontracker.com [auto] - hitsquad.com [auto] - http://www.svgx.org - - - -@node Making a release -@section Making a release - -@itemize - -@item -Build with GUB, and check the regtests. - -@item -Upload the tarballs and sh scripts. - -@item -(if major) -Branch MASTER to stable/2.x. - -@item -Make announcement. - -@end itemize - - diff --git a/Documentation/devel/website-work.itexi b/Documentation/devel/website-work.itexi deleted file mode 100644 index cb4e0aac9a..0000000000 --- a/Documentation/devel/website-work.itexi +++ /dev/null @@ -1,22 +0,0 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- -@node Website work -@chapter Website work - -@menu -* Introduction to website work:: -* Translating the website:: -@end menu - - -@node Introduction to website work -@section Introduction to website work - -Short answer: don't do it yet. We're completely revamping the -website. - - -@node Translating the website -@section Translating the website - - - diff --git a/Documentation/es/GNUmakefile b/Documentation/es/GNUmakefile index ed20093b3d..54197f95dd 100644 --- a/Documentation/es/GNUmakefile +++ b/Documentation/es/GNUmakefile @@ -1,7 +1,10 @@ ISOLANG = es depth = ../.. -SUBDIRS = topdocs user +SUBDIRS = essay learning notation texidocs usage web extending included STEPMAKE_TEMPLATES = documentation -LOCALSTEPMAKE_TEMPLATES = doc-i18n-root +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root + + +EXTRA_DIST_FILES = web.texi include $(depth)/make/stepmake.make diff --git a/Documentation/es/changes.tely b/Documentation/es/changes.tely new file mode 100644 index 0000000000..d945d1dd2b --- /dev/null +++ b/Documentation/es/changes.tely @@ -0,0 +1,723 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: caec41ae928a0b3352ecb2ca73ae45d8e3709026 + + 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 +@setfilename lilypond-changes.info +@settitle Registro de cambios de LilyPond + +@include macros.itexi + +@ifhtml +@macro inputfileref{DIR,NAME} +@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c +@end macro +@macro usermanref{NAME} +@inforef{\NAME\,,../user/lilypond/lilypond}@c +@end macro +@end ifhtml + +@ifnothtml +@macro inputfileref{DIR,NAME} +@file{\DIR\/\NAME\}@c +@end macro +@macro usermanref{NAME} +Véase el manual del usuario, \NAME\ +@end macro +@end ifnothtml + +@macro textanchor{NAME} +@html + +@end html +@end macro + + +@documentencoding UTF-8 +@documentlanguage es +@afourpaper +@c Translators: Francisco Vila + +@finalout + +@node Top +@top Funcionalidades nuevas de la versión 2.14 desde la 2.12 + +@allowcodebreaks false + +@itemize @bullet + +@ignore + +HINTS + +* add new items at the top + +* only show verbatim input for syntax/input changes + +* try to be as brief possible in those cases + +* don't try to provide real-world examples, they often get too big, +which scares away people. + +* Write complete sentences. + +* only show user-visible changes. + +@end ignore + +@item +¡Ahora Lilypond ayuda a las barras de corchea a evitar colisiones con +otros objetos gráficos! Esta funcionalidad funciona completamente con +las barras manuales. También funciona para todas las barras +automáticas que no terminan justo antes de un cambio de pauta. Para +este caso particular, le rogamos que utilice barras manuales. + +@item +Ahora forma parte de la distibución el script Articulate, obra de +Peter Chubb, que se publica bajo la licencia GPLv3. Permite la +producción sencilla de archivos MIDI que realizan de forma +predeterminada una articulación non-legato además de interpretar +correctamente las ligaduras de expresión, los picados, las +indicaciones de tempo, los trinos, etc. + +@example +\include "articulate.ly" +\articulate << + resto de la partitura... +>> +@end example + +@item +Ahora están contempladas las repeticiones de un pulso para +semicorcheas y figuras de menor duración y las repeticiones de pulso +para compases que contienen notas de duraciones diversas. + +@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 produce diagramas de digitación para instrumentos de viento +madera. + +@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 +Se ha mejorado la salida MIDI: +@itemize @bullet +@item las voces se mantienen separadas, lo que hace que el MIDI sea mucho más útil para el post-procesado +@item distribución óptima de los canales: los instrumentos idénticos comparten el mismo canal. Esto significa que p.ej. para una partitura orquestal siempre están disponibles 16 (15 más percusión) instrumentos de distinto sonido, sin limitarse al número de pautas o voces. +@item @code{\set Score.midiChannelMapping = #'staff} asigna un canal MIDI por cada pauta, que era el comportamiento anterior. Este ajuste es necesario si se quiere que los cambios de instrumento creen cambios de programa MIDI sobre un único canal MIDI. +@item los matices dinámicos ahora se realizan mediante velocidades de nota, ya no como volumen de MIDI. Esto mejora el sonido sobre los módulos MIDI de gama alta. +@end itemize + +@item +Se ha mejorado la importación de MIDI por medio de Midi2ly +@itemize @bullet +@item Midi2ly ahora funciona también en sistemas Windows +@item ahora se manejan bien los archivos MIDI con más de 32 pistas +@item ya no se ignoran las notas de ciertas voces simultáneas +@item no se truncan las notas que sobrepasan una línea divisoria +@item se respetan la armadura de la tonalidad y la indicación de compás iniciales +@item se ha arreglado un problema con las octavas en pistas o voces subsiguientes +@item se contemplan de forma incipiente varias voces sobre un pentagrama +@item se fija el instrumentName a partir de los datos de la pista +@item nueva opción --skip, por omisiión se muestran los silencios +@item no se truncan los silencios que sobrepasan una línea divisoria +@item nueva opción --include-header para establecer los títulos +@item nueva opción --preview para archivos MIDI grandes +@end itemize +La primera funcionalidad estuvo patrocinada por Valentin Villenave, +las otras funcionalidades han sido patrocinadas por Image-Line Software para FL Studio. + +@item +Está disponible un nuevo grabador @code{Completion_rest_engraver} para convertir automáticamente +silencios largos que sobrepasan a las líneas divisorias, de forma correspondiente al grabador +@code{Completion_heads_engraver} para las notas +@example +\layout @{ + \context @{ + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + @} +@} +@end example +Esta funcionalidad ha sido patrocinada por Image-Line Software para FL Studio. + +@item +Se pueden añadir puntos a los elementos del índice general utilizando: +@example +\paper @{ + tocItemMarkup = \tocItemWithDotsMarkup +@} +@end example + +@item +Hay disponibles dos nuevas instrucciones de marcado para patrones y +relleno con patrones: @code{\pattern} y @code{\fill-with-pattern}. + +@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 +Se ha añadido un conjunto de herramientas de transformación modal +mínimo para el compositor. Se puede @notation{transportar} un motivo, +@notation{invertirlo} y/o convertirlo en su @notation{retrogradación} +dentro de cualquier escala. + +@lilypond +pentatonicScale = \relative a' { a c d f g } +motif = \relative c'' { d8 c f,4 } + +\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 +Está mínimamente contemplada la notación mensural negra. + +@item +Están contempladas más ampliamente las formas oblicuas dentro de las +ligaduras mensurales blancas. + +@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 +Hay dos funciones nuevas @code{\with-link} y @code{\page-link} que +aportan hiperenlaces a una etiqueta o a un número de página dados. +Esto funciona solamente en el motor de salida PDF. Todos los +elementos de la tabla de contenidos añaden ahora hiperenlaces a las +páginas a que se refieren, automáticamente. + +@item +Ahora están contemplados los compases compuestos a través de la +instrucción @code{\compoundMeter}, que se puede usar en lugar de +@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 +Las líneas de letra por encima de una pauta deben tener la propiedad +@code{staff-affinity} ajustada al valor @code{DOWN} o la propiedad +@code{alignAboveContext} ajustada de manera que esté adecuadamente +alineada. Para ver más información, consulte @ruser{Posicionamiento +vertical de la letra}. + +@item +Los valores de la propiedad @code{stringTunings} han cambiado de una +lista de semitonos por encima del Do central a una lista de alturas de +notas de LilyPond. convert-ly maneja el cambio automáticamente donde +el valor de @code{stringTunings} esté establecido a un valor constante +de Scheme. + +Las nuevas instrucciones @code{makeStringTuning} y +@code{contextStringTuning} permiten la creación de afinaciones de +cuerdas en la forma de una construcción de acorde de LilyPond. + +@item +Mediante la utilización de @code{\cueDuringWithClef}, ahora las notas +guía también pueden llevar su propia clave que se reinicia +correctamente al final del pasaje de notas guía. Al comienzo de cada +línea aún se imprime la clave estándar, pero se muestra la clave de +las notas guía después de la armadura y compás en un tamaño menor. + +@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 +Los nombres de las notas se pueden seleccionar con una nueva +instrucción @code{@bs{}language "italiano"}, que se puede usar en el +modo seguro. La sintaxis antigua @code{@bs{}include "italiano.ly"} +está contemplada por ahora, pero quedará obsoleta en el futuro. + +@item +Ahora el barrado automático se desactiva mediante @code{\cadenzaOn} y +se habilita con @code{\cadenzaOff}. Hay que indicar el barrado de las +cadencias manualmente. Asimismo, si se usa una cadencia en una pieza +con el barrado automático desactivado, tiene que desactivarse de nuevo +después de la cadencia. + +@item +Ahora el usuario puede especificar el nombre de la tabla +predeterminada de diagramas de posiciones de acordes. Esto permite la +utilización de varias tablas y el cambio de una a otra en función de +los deseos del usuario. + +@item +Ahora se puede personalizar la decisión del combinador de voces de +combinar o no las notas. + +@lilypond[quote,relative=2] +\partcombine +\relative c' { c2 \partcombineApart c | \partcombineChordsOnce e' e } +\relative c' { c2 \partcombineApart c | c c } +@end lilypond + +@item +De forma predeterminada, las pautas de tablatura sólo muestran los +números de traste. Para conseguir el estilo anterior, se ofrece la +instrucción @code{\tabFullNotation}. + +@item +Se han añadido notas con forma en los estilos Funk y Walker. + +@item +Los silencios ya no mantienen vivo un contexto de pauta si se está +utilizando @code{\RemoveEmptyStaffContext}. + +@item +Nueva opción @code{-dinclude-settings=INCLUDEFILE.ly}, que indica a +lilypond que incluya el archivo especificado antes de que se procese +la partitura. Ello permite al usuario cambiar los ajustes globales +sin necesidad de modificar la propia partitura. De esta forma se +pueden generar distintas versiones o ediciones (como distintos tamaños +de página) a partir del mismo documento, sin tener que modificar la +partitura para cada una de las versiones. + +@item +Se ha modificado la sintaxis de los ajustes de barrado automático. Se +han eliminado beatLength, beatGrouping, beamSettings y +measureGrouping. El barrado automático está controlado ahora a través +de baseMoment, beatStructure y beamExceptions. Los ajustes +predeterminados para cada una de estas propiedades se pueden almacenar +en time-signature-settings, de manera que el autobarrado cambia +automáticamente cada vez que se modifica el tipo de compás. La nueva +sintaxis pretende ser mucho más sencilla de utilizar y requerir menos +ajustes manuales. + +@item +El @q{backend} de SVG contempla opcionalmente las fuentes tipográficas +@uref{http://www.w3.org/Submission/WOFF, WOFF}. Utilizar la opción de +Scheme @code{-d svg-woff} junto a la selección del backend SVG +@code{-d backend=svg} produce una salida SVG con selección CSS de la +fuente WOFF. + +@item +Se ha girado la clave de sol 1.5 grados a la derecha para mejorar su +equilibrio. Se pueden comparar las versiones antigua y moderna a +partir de la documentación: +@uref{http://lilypond.org/doc/v2.12/Documentation/user/lilypond/The-Feta-font.html#Clef-glyphs, +versión antigua}, +@uref{http://lilypond.org/doc/v2.13/Documentation/notation/the-feta-font.html#Clef-glyphs, +versión nueva}. + + +@item +Los elementos de extensión de reguladores de texto ahora se pueden +añadir directamente usando @code{\cresc}, @code{\dim} y +@code{\decresc}. +@lilypond[quote,relative=2] +c4\cresc c c c\f | +c4\dim c c c\! +@end lilypond + +@item +La sintaxis documentada del entorno @samp{lilypond} en el modo +@LaTeX{} de @command{lilypond-book} se ha modificado de forma que se +corresponda con la sintaxis estándar de @LaTeX{}: ahora las opciones +se colocan después del nombre del entorno: +@example +\begin@{lilypond@}[@var{opciones}] @dots{} +@end example + +La sintaxis anterior con las opciones después de @samp{\begin} todavía +se acepta por parte de @command{lilypond-book} pero está obsoleta. +Algo como +@example +sed -i '/begin\[/s/begin\(\[[^]]*]\)\(@{lilypond@}\)/begin\2\1/' +@end example + +puede servir para realizar la conversión. + +@item +Se ha mejorado el aspecto estético del sistema de cabezas de nota con +forma. Se ha implementado el grosor de líneas variable. Se han hecho +consistentes todas las anchuras de las notas. Se han añadido +instrucciones menores para el sistema de notas con forma, que utilizan +la tonalidad relativa mayor para las notas de la escala. + +@item +Se ofrece una variante de la llamada de tipo segno: +@lilypond[quote,relative=2] +c4 d e f \bar "S" +g4 f e d +@end lilypond + +@item +Las modificaciones de contexto (bloques @code{\with}) se pueden +almacenar en variables e insertarse dentro de contextos u otros +bloques @code{\with}: +@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 +Se ha añadido una articulación de semi-abierta: +@lilypond[quote,relative=2] +c4\halfopen +@end lilypond +A veces se utiliza para indicar golpes de hi-hat semi-abierto. + +@item +Ahora está totalmente contemplado el algoritmo bidireccional de +Unicode para elementos de marcado de una sola línea, gracias a la +integración mejorada con Pango. + +@item +LilyPond se encuentra ahora licenciado bajo la GPL v3+ de GNU. + +@item +En las tablaturas, los trastes se pueden indicar mediante etiquetas +que no sean números: + +@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")) + 4. 8 4 +} +@end lilypond + +@item +Los objetos de presentación se pueden imprimir sobre un fondo blanco, +lo que tiene el efecto de tapar los objetos de las capas inferiores +que coincidan en el mismo lugar: + +@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 +Los acordes se pueden repetir utilizando la abreviatura @code{q}: + +@lilypond[verbatim,quote,relative=2] +8.-^ q16 q4-^ +@end lilypond + +@item +En el modo de doble cara, los márgenes para las páginas impares y +pares se pueden fijar utilizando @code{inner-margin} y +@code{outer-margin}: + +@example +\paper @{ + two-sided = ##t + inner-margin = 10 \mm + outer-margin = 20 \mm +@} +@end example + +@item +Los márgenes predeterminados del papel, tal y como se especifican en +el archivo @file{ly/paper@/-defaults-init.ly}, se aplican al +tamaño de papel predeterminado (A4) y se redimensionan automáticamente +al tamaño del papel seleccionado. + +@item +Ahora funcionan todas las combinaciones de @code{left-margin}, +@code{right-margin} y @code{line-width}. Ya no hay necesidad de +establecer a mano el valor de @code{line-width} a no ser que queramos +hacerlo explícitamente. + +@item +A partir de ahora se contempla la utilización de una fuente +tipográfica alternativa para la música, como Gonville. + +@item +Además de la instrucción de marcado @code{\hspace}, se ha añadido una +nueva instrucción @code{\vspace} para proporcionar una forma fácil y +flexible de añadir espacio vertical dentro de los elementos de +marcado. + +@item +La dirección de las barras de corchea manuales se puede establecer con +@code{^[} y @code{_[}. + +@item +Se ha añadido una versión de la figura cuadrada que lleva dos líneas +verticales a cada lado. + +@lilypond[quote,relative=2] +\time 4/2 +\override Staff.NoteHead #'style = #'altdefault +c\breve | b\breve +@end lilypond + +@item +Ahora los nombres de instrumentos y voces tienen en cuenta, para su +posicionamiento, las dimensiones de los delimitadores iniciales de +sistema (llaves o corchetes) que están en otros pentagramas, con el +resultado de un mejor alineado predeterminado de los nombres por la +izquierda, por la derecha o centrados. + +@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 +Ahora se pueden seleccionar las llaves dentro de los elementos de +marcado por su tamaño en puntos, usando las instrucciones de marcado +@code{\left-brace} y @code{\right-brace}. + +@lilypond[quote] +\markup { + \left-brace #35 + \hspace #2 + \right-brace #45 +} +@end lilypond + +@item +Los archivos .ps intermedios que LilyPond crea +durante la compilación, ahora se borran de forma predeterminada. Para +conservarlos, escriba siguiente línea en el archivo de entrada: +@example +#(ly:set-option 'delete-intermediate-files #f) +@end example + +@item Las ligaduras de unión, de expresión y de fraseo, +discontinuas y punteadas, pueden ahora tener un grosor variable, +y están disponibles ligaduras parcialmente discontinuas: +@lilypond[quote,relative=2] +\slurDashed +c4( d e f) | +\slurDotted +g4( f e d) | +\slurHalfDashed +c4( d e f) +@end lilypond + + +@item +Se ha añadido una marca en forma de gafas, indicando con vehemencia que se mire al director: +@lilypond[quote,relative=2] +\mark \markup { \eyeglasses } +c4_\markup { \eyeglasses } +@end lilypond + +@item +Se ha añadido una articulación de pizzicato pellizcado (conocido +también como snap o pizzicato de Bartok): +@lilypond[quote,relative=2] +c4\snappizzicato +@end lilypond + +@item +Ahora están disponibles unas nuevas funciones de formateo de números +para imprimir otras fracciones y añadir figuras a los números o +fracciones de un grupo especial: +@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 +Los diagramas de posiciones ahora tienen una propiedad chordChanges +para evitar que se impriman de nuevo los objetos FretBoard repetidos. + +@item +El motor de espaciado vertical ha cambiado drásticamente haciéndolo +más flexible y sencillo de controlar. El espaciado entre los +pentagramas dentro de un sistema puede mejorar el uso del espacio +sobre la página. Los contextos definidos por el usuario pueden +participar en este espaciado flexible, según la forma en que se haya +definido el valor de su @code{staff-affinity}. Ciertas variables de +formateo de la página (@code{page-top-space}, +@code{between-system-space -padding} y @code{before- between- +after-title-space}) se han sustituido por dimensiones verticales +flexibles. + +@end itemize + + + +@ifhtml +Para ver noticias más antiguas, diríjase a +@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.es.html}, +@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS.html}, +o @uref{../,vuelva} al índice de la documentación. + + +@end ifhtml + +@bye diff --git a/Documentation/es/essay.tely b/Documentation/es/essay.tely new file mode 100644 index 0000000000..be0e9f6a07 --- /dev/null +++ b/Documentation/es/essay.tely @@ -0,0 +1,71 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 18e1018ce7446f2cb86990c31f112f6cf05ca371 + + 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 + +@setfilename lilypond-essay.info +@settitle Ensayo sobre grabado musical automatizado +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@c translator: Francisco Vila + +@macro manualIntro +Este ensayo trata de las funciones de grabado musical automatizado +dentro de LilyPond version @version{}. +@end macro + +@c `Essay' was born 2002-06-03 with git commit e38f5fc... +@macro copyrightDeclare +Copyright @copyright{} 2002--2011 por los autores. +@end macro + +@set FDL +@include macros.itexi + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen +@omfdescription Ensayo sobre grabado musical automatizado +@omftype essay +@omfcategory Applications|Publishing +@omflanguage Spanish +@end ignore + + +@lilyTitlePage{Ensayo sobre grabado musical automatizado} + + +@ifnottex + +@menu +* Grabado musical:: +* Lista de referencias bibliográficas:: +* GNU Free Documentation License:: Licencia de este documento. +* Índice de LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include essay/engraving.itely +@include essay/literature.itely + +@include fdl.itexi + +@node Índice de LilyPond +@appendix Índice de LilyPond + +@printindex cp + +@bye diff --git a/Documentation/es/essay/GNUmakefile b/Documentation/es/essay/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/es/essay/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/essay/engraving.itely b/Documentation/es/essay/engraving.itely new file mode 100644 index 0000000000..0e2af31b1e --- /dev/null +++ b/Documentation/es/essay/engraving.itely @@ -0,0 +1,1840 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 7ad21bc1c7d8407e8f21088415c1ad117e84fd9d + + 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 Grabado musical +@chapter Grabado musical +@translationof Music engraving + +Este ensayo describe porqué se creó LilyPond +y cómo puede producir partituras musicales tan bellas. + +@c TODO: +@c remove 3mm eps bounding box left padding for Sarabande (This will +@c require adding a new snippet option to lilypond-book.py +@c check formatting of HTML output + +@menu +* Historia de LilyPond:: +* Detalles del grabado:: +* Grabado automatizado:: +* Construcción del software:: +* Poner a LilyPond a trabajar:: +* Ejemplos de partituras (BWV 861):: +@end menu + +@node Historia de LilyPond +@section Historia de LilyPond +@translationof The LilyPond story + +Mucho antes de que LilyPond se hubiese utilizado para editar preciosas +partituras de trabajo, antes de que pudiese crear apuntes de cursos +universitarios o incluso melodías sencillas, antes de que tuviera una +comunidad de usuarios a lo largo y ancho del mundo o incluso un ensayo +sobre grabado musical, LilyPond comenzó con esta pregunta: + +@quotation +¿Por qué casi ninguna de las partituras hechas con ordenador consigue +la belleza y el equilibrio de una partitura grabada a mano? +@end quotation + +@noindent +Algunas de las respuestas pueden descubrirse examinando cuidadosamente +las dos partituras que aparecen +@ifnottex +debajo. +@end ifnottex +@iftex +en las siguientes páginas. +@end iftex +La primera es una hermosa partitura grabada a mano en 1950 y la +segunda es una edición moderna hecha con ordenador. + +@ifnottex +@quotation +@noindent +Bärenreiter BA 320, @copyright{}1950: + +@sourceimage{baer-suite1-fullpage,,,png} +@end quotation + +@quotation +@noindent +Henle núm. 666, @copyright{}2000: + +@sourceimage{henle-suite1-fullpage,,,png} +@end quotation +@end ifnottex + +Aquí, las notas son idénticas, y proceden de la primera suite para +violoncello solo de Bach, pero el aspecto es distinto, sobre todo si +las imprimimos en papel y las observamos desde una cierta distancia. +@ifnottex +(La versión del presente manual en PDF contiene imágenes de alta +resolución, adecuadas para la impresión en papel.) +@end ifnottex +Trate de leer o tocar a partir de cada una de las partituras, y se +dará cuenta de que la partitura grabada a mano es más agradable de +utilizar. Tiene unas líneas y un movimiento que parecen fluir, y se +aprecia como un fragmento de música vivo y palpitante, mientras que la +edición más reciente parece fría y mecánica. + +Es difícil apreciar inmediatamente en qué consiste la +diferencia entra las ediciones antigua y nueva. En ésta todo parece +pulcro y ordenado, posiblemente incluso @qq{mejor} a causa de su +aspecto computerizado y uniforme. De hecho, esto nos tuvo confundidos +durante un cierto tiempo. Queríamos mejorar la notación por +ordenador, pero en primer lugar teníamos que averiguar qué era lo que +fallaba. + +La respuesta radica en la uniformidad precisa y matemática de la +edición nueva. Fíjese en la línea divisoria central de cada línea: en +la partitura grabada a mano, la posición de estas líneas divisorias +tiene una cierta variación natural, mientras que en la versión moderna +estas líneas están alineadas de forma casi perfecta. Lo podemos +apreciar en estos diagramas simplificados de disposición de las +páginas, trazados a partir de la música grabada a mano (a la +izquierda) y la generada por ordenador (a la derecha): + +@quotation +@iftex +@sourceimage{pdf/page-layout-comparison,,,} +@end iftex +@ifnottex +@sourceimage{page-layout-comparison,,,png} +@end ifnottex +@end quotation +@noindent + +En el resultado producido por el ordenador, incluso las cabezas de las +notas individuales se alinean en columnas verticales, haciendo +desaparecer el contorno de la melodía en una cuadrícula rígida de +símbolos musicales. + +Existen también otras diferencias: en la edición grabada a mano todas +las líneas verticales son más gruesas, las ligaduras quedan más cerca +de la cabeza de las notas, y hay más variedad en las inclinaciones +de las barras de corchea. Aunque dichos detalles pueden parecer +minucias, el resultado es una partitura más fácil de leer. En la +partitura de ordenador, todas las líneas son casi idénticas y si el +músico levanta la mirada por un momento probablemente se pierda por +la página. + +LilyPond se diseñó para resolver los problemas que encontramos en el +software existente y para crear notación musical bella que emulara a +las mejores partituras trazadas a mano. + +@iftex +@page +@noindent +Bärenreiter BA 320, @copyright{}1950: + +@sourceimage{baer-suite1-fullpage-hires,16cm,,} +@page +@noindent +Henle núm. 666, @copyright{}2000: +@sp 3 +@sourceimage{henle-suite1-fullpage-hires,16cm,,} +@page +@end iftex + +@node Detalles del grabado +@section Detalles del grabado +@translationof Engraving details + +@cindex grabado +@cindex tipografía musical +@cindex musical, tipografía +@cindex grabado en placas +@cindex grabado musical + +El arte de la tipografía musical recibe el nombre de @emph{grabado (en +plancha)}, un término que deriva del proceso manual de la impresión +musical@footnote{Los impresores europeos de la antigüedad exploraron +diversos procesos, entre los que se incluían los bloques de madera +tallados a mano, los tipos móviles y planchas finas de metal grabadas. +La composición tipográfica tenía la ventaja de poderse corregir más +fácilmente y facilitar la inclusión de textos y la letra de las +canciones, pero sólo el grabado ofrecía la posibilidad de elaborar +notación libre de compromisos y limitaciones anticipadas. Al final, +las partituras grabadas a mano se convirtieron en el estándar de toda +la música impresa, con la excepción de algunos himnarios y cancioneros +en los que la composición tipográfica estaba justificada por su +comodidad y economía, incluso bien entrado el s.XX.}. Hace tan sólo +unas décadas, las partituras se hacían cortando y estampando la música +en una plancha de zinc o estaño en imagen invertida como en un espejo. +La plancha se entintaba, y las depresiones producidas por el grabado y +el estampado retenían la tinta. Se formaba una imagen presionando el +papel contra la plancha. El cortado y estampado se hacía +completamente a mano y era muy fastidioso hacer una corrección, por lo +que el grabado había de ser casi perfecto a la primera. El grabado +era una habilidad fuertemente especializada; un artesano tenía que +cursar unos cinco años de entrenamiento antes de poder obtener el +título de maestro grabador, y se necesitaban otros cinco años para +adquirir una verdadera habilidad en el oficio. + +@quotation +@iftex +@sourceimage{hader-slaan,,7cm,} +@end iftex +@ifnottex +@sourceimage{hader-slaan,,,jpg} +@end ifnottex +@end quotation + +La inspiración de LilyPond proviene de los grabados manuales +tradicionales publicados por los editores de música europeos de y +hasta la primera mitad del s.XX, entre ellos Bärenreiter, Duhem, +Durand, Hofmeister, Peters y Schott. En ocasiones se consideran a +éstos como la cima de la práctica del grabado musical tradicional. +Según hemos estudiado estas ediciones, hemos aprendido una gran +lección sobre el trabajo implícito en una partitura bien trazada, y +los aspectos de ella que queríamos tratar de imitar en LilyPond. + +@c Now all newly printed music is produced with computers. This has +@c obvious advantages: prints are cheaper to make, editorial work can be +@c delivered by email, and the original data can be easily stored. +@c Unfortunately, computer-generated scores rarely match the quality of +@c hand-engraved scores. Instead, computer printouts have a bland, +@c mechanical look, which makes them unpleasant to play from. + +@menu +* Fuentes tipográficas de música:: +* Espaciado óptico:: +* Líneas adicionales:: +* Escalado óptico:: +* ¿Para qué tanto esfuerzo?:: +@end menu + +@node Fuentes tipográficas de música +@unnumberedsubsec Fuentes tipográficas de música +@translationof Music fonts + +Las imágenes de abajo ilustran algunas de las diferencias entre el +grabado musical tradicional y la típica impresión por ordenador. La +imagen de la izquierda presenta un símbolo de bemol procedente de una +edición Bärenreiter grabada a mano, mientras que la imagen de la +derecha representa un símbolo procedente de una edición de la misma +música, publicada en el año 2000. Aunque las dos imágenes están +impresas en el mismo tono de tinta, la versión antigua parece más +oscura: las líneas del pentagrama son más gruesas, y el bemol de +Bärenreiter tiene una apariencia pesada y redonda, casi voluptuosa. +La imagen escaneada de la derecha, en cambio, tiene líneas más finas y +una disposición simple con esquinas afiladas. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab +@ifnotinfo +@iftex +@sourceimage{baer-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{baer-flat-gray,,,png} +@end ifnottex + +@tab +@iftex +@sourceimage{henle-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{henle-flat-gray,,,png} +@end ifnottex + +@end ifnotinfo +@ifinfo +@sourceimage{henle-flat-bw,,,png} +@sourceimage{baer-flat-bw,,,png} +@sourceimage{lily-flat-bw,,,png} +@end ifinfo + + +@item @tab +Bärenreiter (1950) +@tab +Henle (2000) + +@end multitable + +@cindex símbolos musicales +@cindex fuente tipográfica +@cindex negrura +@cindex equilibrio + +Cuando quisimos escribir un programa de ordenador para crear +tipografía musical, no existían fuentes tipográficas musicales que +estuviesen libremente disponibles y que igualaran la elegancia de +nuestras partituras favoritas. Sin desanimarnos, creamos una fuente de +símbolos musicales, apoyándonos en música grabada a mano muy bien +impresa. La experiencia nos ayudó a desarrollar un gusto tipográfico, +y nos hizo apreciar los sutiles detalles del diseño. Sin esa +experiencia, no nos habríamos dado cuenta de lo feas que eran las +fuentes que en un principio habíamos admirado. + +A continuación podemos ver una muestra de dos fuentes tipográficas de +música: el conjunto de arriba es la fuente predeterminada del programa +Sibelius (la fuente @emph{Opus}), y el conjunto inferior es nuestra +propia fuente de LilyPond. + +@quotation +@iftex +@sourceimage{pdf/OpusAndFeta,,,} +@end iftex +@ifnottex +@sourceimage{OpusAndFeta,,,png} +@end ifnottex +@end quotation + +Los símbolos de LilyPond son más pesados y sus pesos son más +consistentes, lo que los hace más fáciles de leer. Las terminaciones +finas, como las de los lados del silencio de negra, no deben finalizar +en puntas afiladas, sino de forma redonda. esto se debe a que las +esquinas afiladas de los punzones de grabado son frágiles y se +desgastan con rapidez al estampar con ellos sobre el metal. Si se +toma en su conjunto, la negrura de la fuente se debe ajustar +cuidadosamente en relación con el grosor de las líneas, las barras y +las ligaduras para dar una impresión general fuerte y pesada pero +equilibrada. + +Observe también que la cabeza de nuestra blanca no es elíptica sino +ligeramente romboidal. El trazo vertical del símbolo del bemol se +asemeja al trazo de un pincel, haciéndose más ancho en la parte +superior. El sostenido y el becuadro son más fáciles de distinguir +desde una cierta distancia porque sus ángulos tienen distinta +inclinación y los trazos verticales son más pesados. + +@node Espaciado óptico +@unnumberedsubsec Espaciado óptico +@translationof Optical spacing + +En el espaciado, la distribución del espacio debe reflejar las +duraciones de las figuras. Sin embargo, como vimos en la suite de +Bach más arriba, muchas partituras modernas se atañen a las duraciones +con precisión matemática, lo que lleva a un resultado pobre. En el +siguiente ejemplo se muestra un motivo impreso dos veces: la primera +vez utilizando espaciado matemático exacto, y la segunda con +correcciones. ¿Cuál prefiere? + +@cindex espaciado óptico + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.0 + \override NoteSpacing #'same-direction-correction = #0.0 + \override StaffSpacing #'stem-spacing-correction = #0.0 + } + } +} +@end lilypond + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 | + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} + +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.6 + } + } +} +@end lilypond + +@cindex duraciones regulares +@cindex espaciado regular +@cindex regular, espaciado + +Cada compás de este fragmento utiliza figuras de duración constante. +El espaciado debe reflejarlo. Desgraciadamente, el ojo nos traiciona; +no sólo aprecia la distancia entre la cabeza de las figuras, también +tiene en cuenta la distancia entre las plicas consecutivas. Como +resultado, las notas de una combinación plica arriba @/ plica abajo +deben separarse más, y las notas de una combinación plica abajo @/ +plica arriba se deben colocar más juntas, dependiendo siempre de las +posiciones verticales relativas de las notas. Los dos compases +inferiores están impresos con esta corrección; los dos superiores, por +el contrario, forman conglomerados de notas plica abajo @/ plica +arriba. Un grabador maestro ajustaría el espacio según se necesite +para agradar al ojo. + +Los algoritmos de espaciado de LilyPond tienen incluso en cuenta a las +líneas divisorias que es la razón por la que la última plica dirigida +hacia arriba en el ejemplo bien espaciado ha recibido un poco más de +espacio antes de la línea divisoria para evitar que tenga un aspecto +aglomerado. Una plica hacia abajo no necesitaría este ajuste. + +@node Líneas adicionales +@unnumberedsubsec Líneas adicionales +@translationof Ledger lines + +@cindex líneas adicionales +@cindex colisiones + +Las líneas adicionales presentan un desafío tipográfico: hacen más +difícil juntar los símbolos musicales y deben ser lo bastante claras +como para identificar la altura de la nota de un vistazo. En el +ejemplo siguiente, vemos que las líneas adicionales deben ser más +gruesas que las líneas normales del pentagrama y que un grabador +experto acortará una línea adicional para permitir un espaciado más +cercano con las alteraciones accidentales. Hemos incluido esta +posibilidad en el grabado que hace LilyPond. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab + +@iftex +@sourceimage{baer-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{baer-ledger,,,png} +@end ifnottex + +@tab + +@iftex +@sourceimage{lily-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{lily-ledger,,,png} +@end ifnottex + +@end multitable + + +@node Escalado óptico +@unnumberedsubsec Escalado óptico +@translationof Optical sizing + +Puede ser necesario imprimir la música en distintos tamaños. +Originalmente esto se conseguía mediante la creación de punzones de +estampado en cada uno de los tamaños necesarios, lo que significaba +que cada punzón estaba diseñado para presentar el mejor aspecto a ese +tamaño. Con la llegada de las fuentes tipográficas digitales, un solo +diseño se puede escalar matemáticamente a cualquier tamaño, lo que es +sin duda muy conveniente, pero a los tamaños menores los glifos +aparecen en tipo muy delgado. + +En LilyPond hemos creado las fuentes tipográficas en un cierto rango +de pesos que corresponden a la correspondiente variedad de tamaños de +notación musical. He aquí un grabado musical de LilyPond a un tamaño +de pentagrama de 26: + +@quotation +@iftex +@sourceimage{pdf/size26,,23mm,} +@end iftex +@ifnottex +@sourceimage{size26,,,png} +@end ifnottex +@end quotation + +@noindent +y éste es el mismo fragmento a un tamaño de 11, aumentado +posteriormente en un 236% para que se imprima al mismo tamaño que el +ejemplo anterior: + +@quotation +@iftex +@sourceimage{pdf/size11,,23mm,} +@end iftex +@ifnottex +@sourceimage{size11,,,png} +@end ifnottex +@end quotation + +@noindent +A tamaños más pequeños, LilyPond utiliza líneas proporcionalmente más +gruesas de manera que la música siga leyéndose con comodidad. + +@ignore +This also allows staves of different sizes to coexist peacefully when +used together on the same page: + +@c TODO: are the stems in this example the right thickness? How should +@c line weights be scaled for small staves? + +@c Grieg's Violin Sonata Op. 45 +@lilypond[indent=1.5cm] +global = { + \time 6/8 + \key c \minor +} + +\score { + << + \new Staff \with { + fontSize = #-4 + \override StaffSymbol #'staff-space = #(magstep -4) + \override StaffSymbol #'thickness = #(magstep -3) + } + \relative c' { + \global + \set Staff.instrumentName = #"Violin" + c8.(\f^> b16 c d) ees8.(^> d16 c b) + g8.(^> b16 c ees) g8-.^> r r + R2. + } + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff \relative c' { + \global + s2. + s4. s8 r8 r16 + 4.^> 8 r r + } + \new Staff \relative c { + \global + \clef "bass" + << + { + \once \override DynamicText #'X-offset = #-3 + 2.~->^\f + 4.~ 8 + } \\ { + 2.~ + 4.~ 8 + } + >> + r8 r16 16 + 4.-> 8 r r + } + >> + >> +} +@end lilypond +@end ignore + +@node ¿Para qué tanto esfuerzo? +@unnumberedsubsec ¿Para qué tanto esfuerzo? +@translationof Why work so hard? + +Los músicos están normalmente más absortos en su interpretación que en +el estudio del aspecto gráfico de una partitura impresa, por lo que +las minucias sobre los detalles tipográficos pueden parecer +académicas. Pero no lo son. La música impresa es material de +interpretación: todo se hace para ayudar al músico a tocar mejor, y +todo aquello que no está claro o no es agradable se convierte en un +obstáculo. + +La música grabada de forma tradicional utiliza símbolos gruesos sobre +pautas de líneas pesadas para producir una notación de aspecto fuerte +y equilibrado que adquiere gran presencia cuando el papel está lejos +del lector: por ejemplo, sobre un atril. Una distribución cuidadosa +del espacio vacío permite que la música se pueda disponer de forma muy +apretada sin aglomerar los símbolos entre sí. El resultado reduce a +un mínimo el número de saltos de página, lo que es una gran ventaja. + +Ésta es una característica común de la tipografía. La disposición +sobre la página debe ser bonita, no sólo por sí misma, sino +especialmente porque ayuda al lector en su cometido. Para las +partituras musicales esto es de doble importancia porque los músicos +tienen una cantidad de atención limitada. Cuanta menos atención +necesitan para leer, más pueden centrarse en tocar la música. En +otras palabras, una mejor tipografía lleva a mejores interpretaciones. + +Estos ejemplos demuestran que la tipografía musical es un arte sutil y +complejo, y que producirla requiere una considerable experiencia, algo +que los músicos no suelen tener. LilyPond es el resultado de nuestro +esfuerzo para llevar a la era de los ordenadores la excelencia gráfica +de la música grabada a mano, y ponerla a disposición de los músicos +normales. Hemos ajustado nuestros algoritmos, el diseño de nuestras +fuentes tipográficas y los valores predeterminados del programa para +producir una impresión que iguala en calidad a la de las antiguas +ediciones que tanto nos gusta ver y a partir de las que tanto nos +gusta tocar. + + +@node Grabado automatizado +@section Grabado automatizado +@translationof Automated engraving + +@cindex grabado automatizado +@cindex automatizado, grabado + +Aquí describimos lo que se necesita para crear un software que pueda +recrear la disposición de las partituras grabadas: un método de +explicar las buenas disposiciones al ordenador, y gran cantidad de +comparaciones detalladas con grabados de música reales. + +@menu +* Concursos de belleza:: +* Mejoras por medio de pruebas:: +* Hacer las cosas bien:: +@end menu + +@node Concursos de belleza +@unnumberedsubsec Concursos de belleza +@translationof Beauty contests + +¿Cómo realizamos las decisiones de formateo? En otras palabras, ¿cuál +de las tres configuraciones elegiríamos para la siguiente ligadura? + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[( f] g[ a b d,)] r4 + \once \override Slur #'positions = #'(2 . 3) + e8[( f] g[ a b d,)] r4 + e8[( f] g[ a b d,)] r4 +} +@end lilypond + +Están a nuestra disposición unos cuantos libros sobre el arte del +grabado musical. Desgraciadamente, contienen unas sencillas reglas +prácticas y unos pocos ejemplos. Dichas reglas pueden ser +instructivas, pero están muy lejos de constituir un algoritmo +preparado para poderlo implementar dentro de un programa. Siguiendo +las instrucciones de esta literatura nos lleva a algoritmos con gran +cantidad de excepciones codificadas manualmente. Hacer todo este +análisis de casos es mucho trabajo, y a menudo no todos los casos +están cubiertos completamente: + +@quotation +@iftex +@sourceimage{ross-beam-scan,7cm,,} +@end iftex +@ifnottex +@sourceimage{ross-beam-scan,,,.jpg} +@end ifnottex +@end quotation + +(Fuente de la imagen: Ted Ross, @emph{The Art of Music Engraving}) + +En lugar de intentar escribir detalladas reglas de disposición para +cada uno de los escenarios posibles, únicamente tenemos que describir +los objetivos lo suficientemente bien como para que LilyPond pueda +juzgar el nivel de atractivo visual de varias alternativas. Después, +para cada posible configuración calculamos una puntuación de +fealdad y seleccionamos la configuración menos fea. + +Por ejemplo, tenemos aquí tres configuraciones posibles para la +ligadura, y LilyPond ha otorgado una puntuación a cada una en +@q{puntos de fealdad}. El primer ejemplo obtiene 15.39 puntos por +rozar la cabeza de una de las figuras: + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[(_"15.39" f] g[ a b d,)] r4 +} +@end lilypond + +El segundo es mejor, pero la ligadura no comienza ni termina sobre la +cabeza de las notas. Obtiene 1.71 puntos por el lado izquierdo y 9.37 +puntos por el lado derecho, más otros 2 puntos porque la ligadura +asciende mientras la melodía desciende, dando un total de 13.08 puntos +de fealdad: + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(2 . 3) + e8[(_"13.08" f] g[ a b d,)] r4 +} +@end lilypond + +La ligadura final obtiene 10.04 puntos por el salto de la derecha y 2 +puntos por la inclinación hacia arriba, pero es la más atractiva de +las tres configuraciones, así que LilyPond selecciona ésta: + +@lilypond +\relative c { + \clef bass + e8[(_"12.04" f] g[ a b d,)] r4 +} +@end lilypond + +Esta técnica es bastante general, y se utiliza para tomar decisiones +óptimas para la configuración de las barras, ligaduras y puntillos de +los acordes, saltos de línea y saltos de página. El resultado de +estas decisiones se puede juzgar por comparación con grabados reales. + +@node Mejoras por medio de pruebas +@unnumberedsubsec Mejoras por medio de pruebas +@translationof Improvement by benchmarking + +La salida de LilyPond ha mejorado paulatinamente con el tiempo, y +continúa mejorando mediante su comparación con partituras grabadas a +mano. + +Por ejemplo, he aquí una línea de una pieza utilizada como banco de +pruebas procedente de una edición realizada a mano (Bärenreiter +BA320): + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@noindent +y el mismo fragmento grabado tal y como lo hacía una versión muy +antigua de LilyPond (versión 1.4, mayo de 2001): + +@iftex +@sourceimage{pdf/lily14-sarabande,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande,,,png} +@end ifnottex + +@noindent +Ciertamente, la salida de LilyPond 1.4 es legible pero una comparación +detenida con la partitura hecha a mano mostraba numerosos errores en +los detalles de formateo: + +@iftex +@sourceimage{lily14-sarabande-annotated-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande-annotated,,,png} +@end ifnottex + +@itemize @bullet +@item hay demasiado espacio antes de la indicación de compás +@item las plicas de las notas unidas por una barra son muy largas +@item los compases segundo y cuarto son muy estrechos +@item la ligadura tiene un aspecto extraño +@item el símbolo del trino es demasiado grande +@item las plicas son delgadas +@end itemize + +@noindent +(También faltaban dos cabezas de nota y varias anotaciones +editoriales, y ¡la altura de una nota era incorrecta!) + +Mediante el ajuste de las reglas de disposición y del diseño de la +fuente tipográfica, la salida ha mejorado de forma considerable. +Compare la misma partitura de referencia y la salida de la versión +actual de LilyPond (@version{}): + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@lilypond[staffsize=17.5,line-width=15.9\cm] +\relative c { + \clef "bass" + \key d \minor + \time 3/4 + \mergeDifferentlyDottedOn + << + { \slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e) } + \\ + { d4_2 a2 } + >> + \slurDashed + 4. e8( d c) + \slurSolid + bes8 g' f e16( f g_1 a_2 bes_3 d,_2) + \slurDashed + cis4.-\trill b8_3( a g) + << + { \slurDashed d'8.( e16) e4.-\trill( d16 e) } + \\ + { 4 a2 } + >> +} +@end lilypond + +@noindent +La salida actual no es un clon de la edición de referencia, pero está +mucho más cerca de la calidad de publicación que la salida más +antigua. + +@node Hacer las cosas bien +@unnumberedsubsec Hacer las cosas bien +@translationof Getting things right + +También podemos medir la capacidad de LilyPond para tomar decisiones +de grabado musical automáticamente comparando su salida con la de un +producto de software comercial. En este caso hemos elegido Finale +2008, que es uno de los editores de partituras comerciales más +populares, especialmente en los Estados Unidos. Sibelius es su +principal competidor y parece tener especial presencia en el mercado +europeo. + +Para nuestra comparación elegimos la fuga en Sol menor del Clave bien +temperado de Bach, libro I, BWV 861, cuyo sujeto inicial es + +@lilypond +\relative c' { + \key g \minor + \clef "treble_8" + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a bes8 +} +@end lilypond + +@noindent + +Hemos realizado nuestra comparación grabando los últimos siete +compases de la pieza (28 al 34) en Finale y en LilyPond. Éste es el +punto de la pieza en que el sujeto vuelve a aparecer en un estrecho a +tres partes y conduce a la sección conclusiva. En la versión de +Finale, hemos resistido la tentación de hacer cualquier ajuste sobre +la salida predeterminada porque tratamos de mostrar qué cosas hace +bien cada programa sin ayuda. Las únicas manipulaciones de +importancia que hemos hecho ha sido los ajustes del tamaño de la +página para que se corresponda con este ensayo y forzar que la música +quepa en dos sistemas para facilitar la comparación. De forma +predeterminada, Finale habría compuesto dos sistemas de tres compases +cada uno y un último sistema de plena anchura con un solo compás. + +Muchas de las diferencias entre los dos grabados son visibles en los +compases 28 al 29, como se muestra aquí con Finale en primer lugar y +LilyPond en segundo: + +@iftex +@sourceimage{pdf/bwv861mm28-29,14cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm28-29,,,png} +@end ifnottex + +@lilypond[staffsize=19.5,line-width=14\cm] +global = { \key g \minor } + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 +} + +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a +} + +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + \new Staff = "LH" + << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond + +Entre algunos de los puntos negativos de la salida sin retocar de +Finale se encuentran los siguientes: +@itemize @bullet +@item Casi todas las barras se salen demasiado del pentagrama. +Una barra que apunta hacia el centro del pentagrama debe tener una +longitud de una octava aproximadamente, pero los grabadores acortan +esta longitud cuando la barra apunta hacia fuera de la pauta en música +de varias voces. El barrado de Finale se puede mejorar fácilmente con +su complemento de barras de Patterson, pero hemos decidido saltarnos +ese paso para este ejemplo. +@item Finale no ajusta las posiciones de las cabezas que se bloquean mutuamente, +lo que hace a la música extremadamente difícil de leer cuando las +voces superior e inferior intercambian temporalmente sus posiciones: + +@c KEEP LY +@lilypond +collide = \once \override NoteColumn #'force-hshift = #0 + +\score { + << + \new Voice = "sample" \relative c''{ + \key g \minor + << + { \voiceOne g4 \collide g4 } + \new Voice { \voiceTwo bes \collide bes } + >> + } + \new Lyrics \lyricsto "sample" \lyricmode { "bien " " mal" } + >> +} +@end lilypond + +@item Finale ha colocado todos los silencios en alturas fijas sobre el +pentagrama. El usuario es libre de ajustarlos según se necesite, pero +el programa no hace ningún intento de tener en consideración el +contenido de la otra voz. Por suerte, en este ejemplo no se producen +verdaderas colisiones entre notas y silencios, pero ello tiene que ver +más con las posiciones de las notas que con otra cosa. Dicho de otro +modo, Bach se merece algo más de crédito para evitar una colisión +completa que la que Finale le concede. + +@end itemize + +Este ejemplo no pretende sugerir que Finale no se pueda usar para +producir resultados con calidad de producción. Por el contrario, en +las manos de un usuario hábil puede hacerlo y de hecho lo hace, pero +requiere destreza y tiempo. Una de las diferencias fundamentales +entre LilyPond y los editores de partituras comerciales es que +LilyPond aspira a reducir la cantidad de intervención humana a un +mínimo absoluto, mientras que otros paquetes pretenden ofrecer un +interfaz atractivo en el que hacer este tipo de ediciones. + +Una omisión particularmente flagrante que hemos encontrado por parte +de Finale es un bemol en el compás 33: + +@quotation +@iftex +@sourceimage{pdf/bwv861mm33-34-annotate,7.93cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm33-34-annotate,,,png} +@end ifnottex +@end quotation + +@noindent +El símbolo del bemol es necesario para cancelar el becuadro que está +en el mismo compás, pero Finale lo omite porque aparece en una voz +distinta. De forma que además de ejecutar un complemento de barrado y +comprobar el espaciado sobre las cabezas de nota y los silencios, el +usuario también tiene que comprobar las alteraciones entre voces +cruzadas para cada compás si pretende evitar la interrupción de un +ensayo a causa de un error en la edición de la partitura. + +Si está interesado en examinar estos ejemplos con más detalle, el +ejemplo de siete compases completo está al final de este ensayo junto +a cuatro ediciones publicadas distintas. Un examen detenido revela +que hay una cierta variación aceptable entre los grabados manuales, +pero también que LilyPond se compara de forma razonablemente buena con +este rango aceptable. Aún existen algunos inconvenientes en la salida +de LilyPond, por ejemplo, parece ser un tanto agresiva en acortar +algunas de las plicas, así que aún hay lugar para un desarrollo y +ajuste fino posteriores. + +Por supuesto, la tipografía se basa en el juicio humano sobre la +apariencia, de manera que las personas no se pueden sustituir por +completo. Con todo, gran parte del trabajo tedioso se puede +automatizar. Si LilyPond resuelve casi todas las situaciones más +comunes correctamente, esto ya constituirá una enorme ventaja sobre +los programas existentes. Con el transcurso de los años, software se +puede refinar de forma que realice más y más cosas automáticamente de +forma que los ajustes manuales sean también cada vez menos necesarios. +Donde se necesitan ajustes manuales, la estructura de LilyPond está +diseñada teniendo en mente esa flexibilidad. + + +@node Construcción del software +@section Construcción del software +@translationof Building software + +Esta sección describe algunas de las decisiones de programación que +hicimos cuando diseñamos el programa LilyPond. + +@menu +* Representación musical:: +* ¿Qué símbolos grabar?:: +* Arquitectura flexible:: +@end menu + + +@node Representación musical +@unnumberedsubsec Representación musical +@translationof Music representation + +@cindex sintaxis +@cindex recursivas, estructuras + +Idealmente, el formato de entrada de cualquier sistema de formateado +de alto nivel es una descripción abstracta del contenido. En este +caso, eso sería la propia música. Ello presenta un enorme problema: +¿cómo podemos definir qué es la música realmente? En lugar de buscar +una respuesta, le hemos dado la vuelta a la pregunta. Escribimos un +programa capaz de producir música impresa, y luego ajustamos el +formato de forma que sea lo más escueto posible. Cuando el formato ya +no se puede recortar más, por definición nos estamos quedando con el +propio contenido. Nuestro programa sirve como una definición formal +de un documento musical. + +La sintaxis es también el interfaz de usuario de LilyPond, de aquí +que sea tan fácil teclear: + +@example +@{ + c'4 d'8 +@} +@end example + +@noindent +para crear un Do central negra (Do 4) y un Re por encima del Do +central, corchea (Re 4). + +@lilypond[quote] +{ + c'4 d'8 +} +@end lilypond + +A una escala microscópica, esta sintaxis es fácil de usar. A una +escala mayor, la sintaxis necesita también una estructura. ¿De qué +otra forma podríamos introducir piezas complejas como sinfonías u +óperas? La estructura se forma por medio del concepto de expresiones +musicales: combinando pequeños fragmentos de música dentro de otros +más grandes, se puede expresar una música más compleja. Por ejemplo: + +@lilypond[quote,verbatim,fragment,relative=1] +f4 +@end lilypond + +@noindent +Las notas simultáneas se pueden construir encerrándolas dentro de +@code{<<} y @code{>>}: + +@example +<> +@end example + +@lilypond[quote,fragment,relative=1] +\new Voice { <> } +@end lilypond + +@noindent +La expresión se pone en secuencia encerrándola dentro de llaves +@code{@{@tie{}@dots{}@tie{}@}}: + +@example +@{ f4 <> @} +@end example + +@lilypond[quote,relative=1,fragment] +{ f4 <> } +@end lilypond + +@noindent +Esto es también una expresión, y así se puede combinar de nuevo con +otra expresión simultánea (una blanca) utilizando @code{<<}, @code{\\} +y @code{>>}: + +@example +<< g2 \\ @{ f4 <> @} >> +@end example + +@lilypond[quote,fragment,relative=2] +\new Voice { << g2 \\ { f4 <> } >> } +@end lilypond + +Tales estructuras recursivas se pueden especificar limpia y +formalmente dentro de una gramática independiente del contexto. El +código del analizador sintáctico también se genera a partir de esta +gramática. Dicho de otra forma, la sintaxis de LilyPond está definida +claramente y sin ambigüedades. + +Los interfaces de usuario y la sintaxis son aquello que la gente ve y +con lo que trata más frecuentemente. Son, en parte, cuestión de +gusto, y también objeto de mucha discusión. Aunque las discusiones +sobre el gusto tienen su mérito, no son muy productivas. Bajo el +punto de vista más amplio de LilyPond, la importancia de la sintaxis +de la entrada es pequeña: inventarse una sintaxis limpia es fácil, +pero escribir un código de formatead que sea decente es mucho más +difícil. Esto queda ilustrado por la cantidad de líneas que están +dedicadas a los componentes respectivos: el análisis sintáctico y la +representación se llevan menos del 10% del código fuente. + +Cuando estábamos diseñando las estructuras utilizadas dentro de +LilyPond, tomamos algunas decisiones de forma diferente a como es +aparente en otros programas. Consideremos la naturaleza jerárquica de +la notación musical: + +@lilypond[quote,fragment] +<< + \new Staff \relative c'' { + \key g \major + \time 3/4 + d4 g,8 a b c d4 g, g + } + \new Staff \relative c' { + \clef "bass" + \key g \major + 2 a4 b2. + } +>> +@end lilypond + +En este caso, hay notas agrupadas en acordes que están dentro de +compases, que pertenecen a pentagramas. Esto se parece a una +estructura ordenada de cajas anidadas unas dentro de otras: + +@quotation +@iftex +@sourceimage{pdf/nestedboxes,,4cm,} +@end iftex +@ifnottex +@sourceimage{nestedboxes,,,png} +@end ifnottex +@end quotation + +Desgraciadamente la estructura resulta ordenada porque está basada en +algunas suposiciones excesivamente restrictivas. Este extremo se hace +aparente si tenemos en cuenta un ejemplo musical más complejo: + +@lilypond[quote] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +\new PianoStaff << + \new Staff = "RH" << + \new Voice = "I" \relative c''' { + \time 3/4 + \voiceOne + \times 6/7 { g8 g g g g g g } + \oneVoice + r4 r4\fermata + } + \new Voice = "II" \relative c' { + \voiceTwo + c4 + \times 4/5 { + 8 f g + \change Staff = "LH" \oneVoice + \stemUp g,( c} + r4 + \override Stem #'cross-staff = ##t + \override Stem #'length = #12 + ) r\fermata + } + >> + \new Staff = "LH" << + \new Voice = "III" \relative c' { + \time 2/4 + \clef "bass" + g4 \stopStaff s + \startStaff s2*2 + } + >> +>> +@end lilypond + +En este ejemplo, los pentagramas parecen iniciarse y terminar a +capricho, las voces saltan de un pentagrama a otro, y las pautas +tienen tipos de compás diferentes. Muchos programas se las ven y se +las desean para reproducir este ejemplo porque están construidos sobre +la estructura de las cajas anidadas. Con LilyPond, por el contrario, +hemos tratado de conservar el formato del código de entrada y la +estructura lo más flexibles posible. + +@node ¿Qué símbolos grabar? +@unnumberedsubsec ¿Qué símbolos grabar? +@translationof What symbols to engrave? + +@cindex grabado +@cindex tipografía +@cindex grabador +@cindex plug-in o complemento +@cindex complemento o plug-in + +El proceso de formateo decide dónde colocar los símbolos. Sin +embargo, esto sólo puede hacerse una vez que se ha decidido @emph{qué} +símbolos se deben imprimir: en otras palabras, qué notación utilizar. + +La notación musical común es un sistema de registro de la música que +ha evolucionado durante los últimos mil años. La forma que es hoy día +de uso común data del Renacimiento temprano. Aunque la forma básica +(es decir, puntos sobre una pauta de cinco líneas) no ha cambiado, los +detalles aún evolucionan para expresar las innovaciones de la notación +contemporánea. De aquí que la notación musical común abarque unos +quinientos años de música. El ámbito de sus aplicaciones comprende +desde melodías monofónicas hasta monstruosos contrapuntos para gran +orquesta. + +¿Cómo podemos ensillar a tal bestia de siete cabezas, y forzarla +dentro de los confines de un programa de ordenador? Nuestra solución +es escindir el problema de la notación (en oposición al grabado, es +decir, a la tipografía) en fragmentos fácilmente digeribles y +programables: cada tipo de símbolo se maneja por parte de un módulo +separado conocido como plug-in. Cada plug-in es completamente modular +e independiente, de manera que cada uno se puede desarrollar y mejorar +por separado Estos plugines reciben el nombre de @code{engraver}s o +@qq{grabadores}, por analogía con los artesanos que traducían las +ideas musicales en símbolos gráficos. + +En el ejemplo siguiente, comenzamos con un plug-in para la cabeza de +las notas, el grabador @code{Note_heads_engraver}. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + \remove "Staff_symbol_engraver" + \consists "Pitch_squash_engraver" + } + } +} +@end lilypond + +@noindent +A continuación, un grabador del pentagrama, el +@code{Staff_symbol_engraver}, añade la pauta: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \consists "Pitch_squash_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +el grabador de la clave o @code{Clef_engraver} define un punto de +referencia para el pentagrama: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +y el grabador de las plicas @code{Stem_engraver} añade las plicas. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +El grabador @code{Stem_engraver} que traza las plicas recibe una +notificación por cada nota que le llega. Cada vez que se ve la cabeza +de una nota (o más, en el caso de un acorde), se crea un objeto plica +y se conecta a la cabeza. Añadiendo grabadores para las barras, +ligaduras, acentos, alteraciones, líneas divisorias, la indicación de +compás y la armadura, obtenemos un fragmento de notación musical +completo. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { \topVoice } +@end lilypond + +@cindex polifonía +@cindex grabado de varias voces +@cindex contextos + +Este sistema funciona bien para la música a una voz, pero ¿qué tal +para la polifonía? En la notación polifónica, muchas voces pueden +llegar a compartir el mismo pentagrama. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\new Staff << \topVoice \\ \botVoice >> +@end lilypond + +En esta situación, las alteraciones accidentales y la pauta se +comparten, pero las plicas, ligaduras, barras, etc., son privadas para +cada voz. De aquí que los grabadores deban estar agrupados. Los +grabadores de la cabeza de las notas, plicas, ligaduras, etc., van a +un grupo llamado @q{contexto de voz}, mientras que los grabadores de +la armadura, las alteraciones, los compases, etc., van a un grupo +llamado @q{contexto de pauta}. En el caso de la polifonía, un solo +contexto de pauta contiene más de un contexto de voz. De forma +similar, varios contextos de pentagrama se pueden reunir dentro de un +único contexto de partitura. El contexto de partitura es el contexto +de notación del nivel más alto que hay. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { + << + \new Staff << \topVoice \\ \botVoice >> + \new Staff << \pah \\ \hoom >> + >> +} +@end lilypond + +@seealso +Referencia de funcionamiento interno: +@rinternals{Contexts}. + +@node Arquitectura flexible +@unnumberedsubsec Arquitectura flexible +@translationof Flexible architecture + +Al principio escribimos el programa LilyPond completamente en el +lenguaje de programación C++; la funcionalidad del programa estaba +grabada en piedra por parte de los desarrolladores. Se comprobó que +esto no era satisfactorio por unas cuantas razones: + +@itemize + +@item Cuando LilyPond comete errores, los usuarios necesitan sobreescribir +las decisiones de formateo. Por tanto, el usuario debe tener acceso +al motor de formateo. De aquí que las reglas y los ajustes +predeterminados no se puedan fijar por nuestra parte en el tiempo de +compilación sino que deben estar accesibles para los usuarios en el +tiempo de ejecución. + +@item El grabado musical es cuestión de juicio visual, y por tanto está en +el terreno del buen gusto. Por más entendidos que pretendamos ser, +nuestros usuarios siempre podrían discrepar de nuestras decisiones +personales. Por ello, las definiciones del estilo tipográfico debe +también ser accesible para el usuario. + +@item Finalmente, nos encontramos refinando continuamente los algoritmos de +formateo, por lo que necesitamos un enfoque flexible para las reglas. +El lenguaje C++ fuerza un cierto método de agrupación de las reglas +que no está preparado para aplicarse al formateo de la notación +musical. + +@end itemize + +@cindex Scheme, lenguaje de programación + +Estos programas se han solucionado integrando un intérprete para el +lenguaje de programación Scheme y reescribiendo partes de LilyPond en +Scheme. La arquitectura de formateo actual está construida alrededor +de la noción de objetos gráficos, descritos por medio de variables y +funciones de Scheme. Esta arquitectura coordina las reglas de +formateo, el estilo tipográfico y las decisiones de formateo +individuales. El usuario tiene acceso directo a la mayoría de esos +controles. + +Las variables de Scheme controlan las decisiones de disposición en la +página. Por ejemplo, muchos objetos gráficos tienen una variable de +dirección que codifica la elección entre arriba y abajo (o izquierda y +derecha). A continuación vemos dos acordes, con acentos y símbolos de +arpegio. En el primer acorde, los objetos gráficos tienen todas las +direcciones hacia abajo (o hacia la izquierda). El segundo acorde +tiene todas las direcciones hacia arriba (o hacia la derecha). + +@lilypond[quote,ragged-right] +\score { + \relative c' { + \stemDown 4_>-\arpeggio + \override Arpeggio #'direction = #RIGHT + \stemUp 4^>-\arpeggio + } + \layout { + \context { + \Score + \override SpacingSpanner #'spacing-increment = #3 + \override TimeSignature #'transparent = ##t + } + } +} +@end lilypond + +@cindex partitura, formateo de +@cindex formateo de una partitura +@cindex formateo, reglas de + +@noindent +El proceso de dar formato a una partitura comprende la lectura y +escritura de las variables de los objetos gráficos. Algunas variables +tienen un valor preestablecido. Por ejemplo, el grosor de muchas +líneas (una característica del estilo tipográfico) es una variable con +un valor preestablecido. Somos libres de alterar este valor, dando a +nuestra partitura una impresión tipográfica distinta. + +@lilypond[quote,ragged-right] +fragment = { + \clef bass f8 as8 + c'4-~ c'16 as g f e16 g bes c' des'4 +} +<< + \new Staff \fragment + \new Staff \with { + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #0.5 + \override Bar #'thickness = #3.6 + \override Tie #'thickness = #2.2 + \override StaffSymbol #'thickness = #3.0 + \override Tie #'extra-offset = #'(0 . 0.3) + } + \fragment +>> +@end lilypond + +Las reglas de formateado también son variables preestablecidas: cada +objeto tiene variables que contienen procedimientos. Estos +procedimientos realizan el formateo propiamente dicho, y mediante la +sustitución de unos u otros, podemos modificar el aspecto de los +objetos. En el ejemplo siguiente, la regla que gobierna qué objetos +de cabeza se utilizan para producir el símbolo de la cabeza, se cambia +a lo largo del fragmento musical. + +@lilypond[quote,ragged-right] +#(set-global-staff-size 30) + +#(define (mc-squared grob orig current) + (let* ((interfaces (ly:grob-interfaces grob)) + (pos (ly:grob-property grob 'staff-position))) + (if (memq 'note-head-interface interfaces) + (begin + (ly:grob-set-property! grob 'stencil + (grob-interpret-markup grob + (make-lower-markup 0.5 + (case pos + ((-5) "m") + ((-3) "c ") + ((-2) (make-smaller-markup (make-bold-markup "2"))) + (else "bla"))))))))) + +\new Voice \relative c' { + \stemUp + \set autoBeaming = ##f + \time 2/4 + 4 + \once \override NoteHead #'stencil = #note-head::brew-ez-stencil + \once \override NoteHead #'font-size = #-7 + \once \override NoteHead #'font-family = #'sans + \once \override NoteHead #'font-series = #'bold + 4 + \once \override NoteHead #'style = #'cross + 4 + \applyOutput #'Voice #mc-squared + 4 + << + { d8[ es-( fis^^ g] fis2-) } + \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } + >> +} +@end lilypond + + + +@node Poner a LilyPond a trabajar +@section Poner a LilyPond a trabajar +@translationof Putting LilyPond to work + +@cindex simple, ejemplos +@cindex ejemplos simples + +Escribimos LilyPond como un experimento sobre cómo condensar el arte +del grabado musical dentro de un programa de ordenador. Gracias a +todo ese duro trabajo, ahora el programa se puede utilizar para que +realice muchas tareas útiles. La aplicación más simple es la +impresión de notas. + +@lilypond[quote,relative=1] +{ + \time 2/4 + c4 c g'4 g a4 a g2 +} +@end lilypond + +@noindent +Añadiendo nombres de acorde y la letra de la canción obtenemos una +hoja guía de acordes. + +@c KEEP LY +@lilypond[quote,ragged-right] +<< + \chords { c2 c f2 c } + \new Staff + \relative c' { + \time 2/4 + c4 c g' g a a g2 + } + \addlyrics { Cam -- pa ni -- ta del lu -- gar } +>> +@end lilypond + +También puede imprimirse notación polifónica y música para piano. El +ejemplo siguiente combina unas pocas construcciones algo más exóticas. + +@lilypond[quote,line-width=15.9\cm] +\header { + title = "Screech and boink" + subtitle = "Random complex notation" + composer = "Han-Wen Nienhuys" +} + +\score { + \context PianoStaff << + \new Staff = "up" { + \time 4/8 + \key c \minor + << { + \revert Stem #'direction + \change Staff = down + \set subdivideBeams = ##t + g16.[ + \change Staff = up + c'''32 + \change Staff = down + g32 + \change Staff = up + c'''32 + \change Staff = down + g16] + \change Staff = up + \stemUp + \set followVoice = ##t + c'''32([ b''16 a''16 gis''16 g''32)] + } \\ { + s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] + } \\ { + s4 \autoBeamOff d''8.. f''32 + } \\ { + s4 es''4 + } >> + } + + \new Staff = "down" { + \clef bass + \key c \minor + \set subdivideBeams = ##f + \override Stem #'french-beaming = ##t + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #4.0 + g'16[ b16 fis16 g16] + << \makeClusters { + as16 + + + } \\ { + \override Staff.Arpeggio #'arpeggio-direction =#down + 4\arpeggio + } + >> } + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 60 8) + } + } + \layout { + \context { + \Staff + \consists Horizontal_bracket_engraver + } + } +} +@end lilypond + +Los fragmentos que se muestran arriba se han escrito a mano, pero esto +no es obligatorio. Puesto que el motor de formateado es casi +totalmente automático, puede servir como un medio de salida para otros +programas que manipulan música. Por ejemplo, también se puede usar +para convertir bases de datos de fragmentos musicales en imágenes +orientadas a su utilización en páginas web y presentaciones +multimedia. + +Este manual muestra también una aplicación: el formato de entrada es +texto, y puede ser por tanto fácilmente empotrado dentro de otros +formatos basados en texto como @LaTeX{}, HTML, o en el caso de este +manual, Texinfo. Utilizando el programa @command{lilypond-book}, que +viene incluido con LilyPond, los fragmentos de entrada se pueden +reemplazar por imágenes de la música en los archivos de salida PDF o +HTML resultantes. Otro ejemplo es la extensión (de terceras partes) +OOoLilyPond para OpenOffice.org, que hace de la inclusión de ejemplos +musicales dentro de los documentos, una tarea extremadamente sencilla. + +Para ver más ejemplos de LilyPond en acción, la documentación +completa, y el programa propiamente dicho, visite nuestra página +principal: www.lilypond.org. + +@page +@node Ejemplos de partituras (BWV 861) +@section Ejemplos de partituras (BWV 861) +@translationof Engraved examples (BWV 861) + +Esta sección contiene cuatro grabados musicales de referencia y dos +versiones grabadas por ordenador de la fuga en Sol menor del libro I +del Clave Bien Temperado, BWV 861, de Bach (los últimos siete +compases). + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989): + +@iftex +@sourceimage{bwv861-baer,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-small,,,png} +@end ifnottex + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989), una fuente musical alternativa. Aparte de las diferencias +textuales, esto presenta ligeras variaciones en las decisiones de +grabado, incluso de la misma editorial y edición: + +@iftex +@sourceimage{bwv861-baer-alt,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-alt-small,,,png} +@end ifnottex + +@noindent +Breitkopf & Härtel, editado por Ferruccio Busoni (Wiesbaden, 1894), +disponible también a través de la Biblioteca Musical Petrucci (IMSLP +#22081). Las indicaciones editoriales (digitaciones, articulaciones, +etc.) se han suprimido para una comparación más clara con las otras +ediciones que presentamos aquí: + +@iftex +@sourceimage{bwv861-breitkopf,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-breitkopf-small,,,png} +@end ifnottex + +@noindent +Edición Bach-Gesellschaft (Leipzig, 1866), disponible a través de la +Biblioteca Musical Petrucci (IMSPL #02221): + +@iftex +@sourceimage{bwv861-gessellschaft,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-gessellschaft-small,,,png} +@end ifnottex + +@noindent +Finale 2008: + +@iftex +@sourceimage{pdf/bwv861-finale2008a,,,} +@end iftex +@ifnottex +@sourceimage{bwv861-finale2008a,,,png} +@end ifnottex + +@sp 4 +@noindent +LilyPond, versión @version{}: + +@lilypond[staffsize=14.3,line-width=15.9\cm] +global = {\key g \minor} + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 + r2 r8 d16 ees f8 ees16 d + ees4 ~ ees16 d c bes a4 r8 ees'16 d + c8 d16 ees d8 e16 fis g8 fis16 g a4 ~ + a8 d, g f ees d c bes + a2 g\fermata \bar "|." +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 + r8 fis16 g a8 g16 fis g2 ~ + g2 r8 d' ees g, + fis4 g r8 a16 bes c8 bes16 a + bes4. 8 r r + 4 d2 +} +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a + bes2 ~ bes8 b16 a g8 a16 b + c4 r r2 + R1 + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a b2 +} +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a + d,8 d'16 c bes8 c16 d ees2 ~ + ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a + d,8 d'16 c bes8 c16 d ees8 c a fis' + g f ees d c bes a g + c a d d, g2\fermata +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + + \new Staff = "LH" << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond diff --git a/Documentation/es/essay/literature.itely b/Documentation/es/essay/literature.itely new file mode 100644 index 0000000000..fbb65cc19c --- /dev/null +++ b/Documentation/es/essay/literature.itely @@ -0,0 +1,101 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: cfc6e57ef66601ecca367654f69ee8c27001c573 + + 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 Lista de referencias bibliográficas +@chapter Lista de referencias bibliográficas +@translationof Literature list + +A continuación presentamos algunas listas de referencias que se +utilizan en LilyPond. + +@menu +* Lista bibliográfica resumida:: +* Lista bibliográfica ampliada:: +@end menu + +@node Lista bibliográfica resumida +@section Lista bibliográfica resumida +@translationof Short literature list + +Si tiene necesidad de aprender más acerca de la notación musical, le +presentamos a continuación algunos títulos interesantes que puede +leer. + + +@table @cite +@item Ignatzek 1995 +Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne +1995. Mainz, Germany ISBN 3-7957-5140-3. + +Instructiva introducción a la interpretación de Jazz al piano. Uno de los primeros +capítulos contiene una panorámica de los acordes más comunes de la música de Jazz. + +@item Gerou 1996 + +Tom Gerou and Linda Lusk, Essential Dictionary of Music +Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. + +Una lista concisa y ordenada alfabéticamente de los problemas de la composición tipográfica y la notación +musical, que abarca la mayor parte de los casos más comunes. + +@item Read 1968 +Gardner Read, Music Notation: A Manual of Modern Practice. +Taplinger Publishing, New York (2nd edition). + +Una obra estándar sobre notación musical. + +@item Ross 1987 +Ted Ross, Teach yourself the art of music engraving and processing. +Hansen House, Miami, Florida 1987. + +Este libro trata del grabado musical, es decir, composición tipográfica profesional. +Contiene instrucciones sobre el estampado, la utilización de las plumillas y las +convenciones notacionales. También son interesantes las secciones sobre los tecnicismos +y la historia de la reproducción. + +@item Schirmer 2001 +The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. +(Este libro se puede pedir al departamento de alquiler.) + +Este manual se centra específicamente en la preparación de los manuscritos para la publicación por +Schirmer. Discute muchos detalles que no se pueden encontrar en otros libros de notación más +normales. También proporciona una buena idea sobre lo que se necesita para llevar la impresión +hasta la calidad editorial. + +@item Stone 1980 + +Kurt Stone, Music Notation in the Twentieth Century. +Norton, New York 1980. + +Este libro describe la notación musical para la música seria moderna, pero +empieza por una amplia panorámica de las prácticas existentes de la notación +tradicional. + +@end table + + +@node Lista bibliográfica ampliada +@section Lista bibliográfica ampliada +@translationof Long literature list + +@subheading Bibliografía sobre edición de música de la Universidad de Colorado + +@include colorado.itexi + +@subheading Bibliografía sobre notación por ordenador + +@include computer-notation.itexi + +@subheading Bibliografía sobre grabado musical + +@include engravingbib.itexi + diff --git a/Documentation/es/extending.tely b/Documentation/es/extending.tely new file mode 100644 index 0000000000..97fad5ad72 --- /dev/null +++ b/Documentation/es/extending.tely @@ -0,0 +1,78 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-extending.info +@settitle Extender LilyPond +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@c translator: Francisco Vila + +@macro manualIntro +Este archivo explica la forma de extender las funcionalidades de +LilyPond versión @version{}. +@end macro + +@c `Extending' was born 2003-04-23 with git commit c08f6e8... +@macro copyrightDeclare +Copyright @copyright{} 2003--2011 por los autores. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Programming extensions for the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Extender} + + +@c TOC -- non-tex +@ifnottex + +@menu +* Tutorial de Scheme:: Programación desde dentro de LilyPond. +* Interfaces para programadores:: Cómo interactuar con Scheme. +* Interfaces de Scheme de LilyPond:: Obtener información hacia dentro y fuera de la música. + +Apéndices + +* GNU Free Documentation License:: Licencia de este documento. +* Índice de LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include extending/scheme-tutorial.itely +@include extending/programming-interface.itely + +@include fdl.itexi + +@node Índice de LilyPond +@appendix Índice de LilyPond +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/es/extending/GNUmakefile b/Documentation/es/extending/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/es/extending/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/extending/programming-interface.itely b/Documentation/es/extending/programming-interface.itely new file mode 100644 index 0000000000..a1f552d15f --- /dev/null +++ b/Documentation/es/extending/programming-interface.itely @@ -0,0 +1,1085 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@c This file is part of extending.tely +@ignore + Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + +@node Interfaces para programadores +@chapter Interfaces para programadores +@translationof Interfaces for programmers + +Se pueden realizar trucos avanzados mediante el uso de Scheme. Si no +está familiarizado con Scheme, le conviene leer nuestro tutorial de +Scheme, @ref{Tutorial de Scheme}. + + +@menu +* Funciones musicales:: +* Funciones de marcado:: +* Contextos para programadores:: +* Funciones de callback:: +* Código de Scheme en línea:: +* Trucos difíciles:: +@end menu + +@node Funciones musicales +@section Funciones musicales +@translationof Music functions + +Las @emph{funciones musicales} son procedimientos de Scheme +que pueden crear automáticamente expresiones musicales, y se +pueden usar para simplificar enormemente el archivo de entrada. + +@menu +* Sintaxis de las funciones musicales:: +* Funciones de sustitución sencillas:: +* Funciones de sustitución intermedias:: +* Matemáticas dentro de las funciones:: +* Funciones sin argumentos:: +* Funciones vacías:: +@end menu + +@node Sintaxis de las funciones musicales +@subsection Sintaxis de las funciones musicales +@translationof Music function syntax + +La forma general de una función musical es: + +@example +funcion = +#(define-music-function + (parser location @var{arg1} @var{arg2} @dots{}) + (@var{type1?} @var{type2?} @dots{}) + @var{música}) +@end example + +@noindent +donde + +@multitable @columnfractions .33 .66 +@item @code{@var{argN}} +@tab @var{n}-ésimo argumento + +@item @code{@var{typeN?}} +@tab un @emph{predicado de tipo} de Scheme para el que @code{@var{argN}} +deve devolver @code{#t}. + +@item @code{@var{música}} +@tab una expresión musical, opcionalmente escrita en Scheme, con +el código de LilyPond que pudiera tener, encerrado entre llaves +con almohadilla +(@tie{}@w{@code{#@{@dots{}#@}}}@tie{}). Dentro de los bloques +de código de LilyPond, use @code{$} para referenciar a los argumentos +de la función (p. ej. @samp{$arg1}) +o para iniciar una expresión en línea de Scheme +que contenga argumentos de función +(p.ej., @w{@samp{$(cons arg1 arg2)}}). + +@end multitable + +@noindent +Para ver una lista de los predicados de tipo disponibles, consulte +@ruser{Predicados de tipo predefinidos}. +También se permiten predicados de tipo definidos por el usuario. + + + +@seealso + +Referencia de la notación: +@ruser{Predicados de tipo predefinidos}. + +Archivos de inicio: +@file{lily/music-scheme.cc}, +@file{scm/c++.scm}, +@file{scm/lily.scm}. + + +@node Funciones de sustitución sencillas +@subsection Funciones de sustitución sencillas +@translationof Simple substitution functions + +Una función de sustitución sencilla es una función musical cuya +expresión musical de salida está escrita en código de LilyPond +y contiene argumentos de la función en la expresión de salida. +Están descritas en @ruser{Ejemplos de funciones de sustitución}. + + +@node Funciones de sustitución intermedias +@subsection Funciones de sustitución intermedias +@translationof Intermediate substitution functions + +Las funciones de sustitución intermedias contienen una +mezcla de código de Scheme y de LilyPond +dentro de la expresión musical que se devuelve. + +Algunas instrucciones @code{\override} requieren un argumento que +consiste en una pareja de números (llamada una @emph{célula cons} en +Scheme). + +La pareja se puede pasar directamente dentro de la función musical, +usando una variable @code{pair?}: + +@example +barraManual = +#(define-music-function + (parser location principio-final) + (pair?) + #@{ + \once \override Beam #'positions = $principio-final + #@}) + +\relative c' @{ + \barraManual #'(3 . 6) c8 d e f +@} +@end example + +De forma alternativa, los números que componen la pareja se pueden +pasar como argumentos separados, y el código de Scheme que se ha usado +para crear la pareja se puede incluir dentro de la expresión musical: + +@lilypond[quote,verbatim,ragged-right] +manualBeam = +#(define-music-function + (parser location beg end) + (number? number?) + #{ + \once \override Beam #'positions = $(cons beg end) + #}) + +\relative c' { + \manualBeam #3 #6 c8 d e f +} +@end lilypond + + +@node Matemáticas dentro de las funciones +@subsection Matemáticas dentro de las funciones +@translationof Mathematics in functions + +Las funciones musicales pueden contar con programación de Scheme +además de la simple sustitución: + +@lilypond[quote,verbatim,ragged-right] +AltOn = +#(define-music-function + (parser location mag) + (number?) + #{ + \override Stem #'length = $(* 7.0 mag) + \override NoteHead #'font-size = + $(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) + #}) + +AltOff = { + \revert Stem #'length + \revert NoteHead #'font-size +} + +\relative c' { + c2 \AltOn #0.5 c4 c + \AltOn #1.5 c c \AltOff c2 +} +@end lilypond + +@noindent +Este ejemplo se puede reescribir de forma que pase expresiones +musicales: + +@lilypond[quote,verbatim,ragged-right] +withAlt = +#(define-music-function + (parser location mag music) + (number? ly:music?) + #{ + \override Stem #'length = $(* 7.0 mag) + \override NoteHead #'font-size = + $(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) + $music + \revert Stem #'length + \revert NoteHead #'font-size + #}) + +\relative c' { + c2 \withAlt #0.5 { c4 c } + \withAlt #1.5 { c c } c2 +} +@end lilypond + + +@node Funciones sin argumentos +@subsection Funciones sin argumentos +@translationof Functions without arguments + +En casi todos los casos, una función sin argumentos se debe escribir +con una variable: + +@example +dolce = \markup@{ \italic \bold dolce @} +@end example + +Sin embargo, en raras ocasiones puede ser de utilidad crear una +función musical sin argumentos: + +@example +mostrarNumeroDeCompas = +#(define-music-function + (parser location) + () + (if (eq? #t (ly:get-option 'display-bar-numbers)) + #@{ \once \override Score.BarNumber #'break-visibility = ##f #@} + #@{#@})) +@end example + +Para la impresión real de los números de compás donde se llama a esta +función, invoque a @command{lilypond} con + +@example +lilypond -d display-bar-numbers ARCHIVO.ly +@end example + + +@node Funciones vacías +@subsection Funciones vacías +@translationof Void functions + +Una función musical debe devolver una expresión musical, pero a veces +podemos necesitar una función en la que no hay música en juego (como +la desactivación de la funcionalidad Apuntar y Pulsar). Para hacerlo, +devolvemos una expresión musical @code{void} (vacía). + +Este es el motivo por el que la forma que se devuelve es +@code{(make-music ...)}. Con el valor de la propiedad @code{'void} +establecido a @code{#t}, le decimos al analizador que descarte la +expresión musical devuelta. así, la parte importante de la función +musical vacía es el proceso realizado por la función, no la expresión +musical que se devuelve. + +@example +noApuntarYPulsar = +#(define-music-function (parser location) () + (ly:set-option 'point-and-click #f) + (make-music 'SequentialMusic 'void #t)) +... +\noApuntarYPulsar % desactivar la funcionalidad Apuntar y Pulsar. +@end example + + +@node Funciones de marcado +@section Funciones de marcado +@translationof Markup functions + +Los elementos de marcado están implementados como funciones de Scheme +especiales que producen un objeto @code{Stencil} dada una serie de +argumentos. + + +@menu +* Construcción de elementos de marcado en Scheme:: +* Cómo funcionan internamente los elementos de marcado:: +* Definición de una instrucción de marcado nueva:: +* Definición de nuevas instrucciones de lista de marcado:: +@end menu + +@node Construcción de elementos de marcado en Scheme +@subsection Construcción de elementos de marcado en Scheme +@translationof Markup construction in Scheme + +@cindex marcado, definir instrucciones de + +El macro @code{markup} construye expresiones de marcado en Scheme, +proporcionando una sintaxis similar a la de LilyPond. Por ejemplo: + +@example +(markup #:column (#:line (#:bold #:italic "hola" #:raise 0.4 "mundo") + #:larger #:line ("fulano" "fulanito" "menganito"))) +@end example + +@noindent +equivale a: +@example +\markup \column @{ \line @{ \bold \italic "hola" \raise #0.4 "mundo" @} + \larger \line @{ fulano fulanito menganito @} @} +@end example + +@noindent +Este ejemplo muestra las principales reglas de traducción entre la +sintaxis del marcado normal de LilyPond y la sintaxis del marcado de +Scheme. + +@quotation +@multitable @columnfractions .3 .3 +@item @b{LilyPond} @tab @b{Scheme} +@item @code{\markup marcado1} @tab @code{(markup marcado1)} +@item @code{\markup @{ marcado1 marcado2 ... @}} @tab + @code{(markup marcado1 marcado2 ... )} +@item @code{\instruccion} @tab @code{#:instruccion} +@item @code{\variable} @tab @code{variable} +@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )} +@item @code{cadena} @tab @code{"cadena"} +@item @code{#argumento-de-scheme} @tab @code{argumento-de-scheme} +@end multitable +@end quotation + +Todo el lenguaje Scheme está accesible dentro del macro @code{markup}. +Por ejemplo, podemos usar llamadas a funciones dentro de @code{markup} +para así manipular cadenas de caracteres. Esto es útil si se están +definiendo instrucciones de marcado nuevas (véase @ref{Definición de una instrucción de marcado nueva}). + + +@knownissues + +El argumento markup-list de instrucciones como @code{#:line}, +@code{#:center} y @code{#:column} no puede ser una variable ni el +resultado de la llamada a una función. + +@lisp +(markup #:line (funcion-que-devuelve-marcados)) +@end lisp + +@noindent +no es válido. Hay que usar las funciones @code{make-line-markup}, +@code{make-center-markup} o @code{make-column-markup} en su lugar: + +@lisp +(markup (make-line-markup (funcion-que-devuelve-marcados))) +@end lisp + + +@node Cómo funcionan internamente los elementos de marcado +@subsection Cómo funcionan internamente los elementos de marcado +@translationof How markups work internally + +En un elemento de marcado como + +@example +\raise #0.5 "ejemplo de texto" +@end example + +@noindent +@code{\raise} se representa en realidad por medio de la función +@code{raise-markup}. La expresión de marcado se almacena como + +@example +(list raise-markup 0.5 (list simple-markup "ejemplo de texto")) +@end example + +Cuando el marcado se convierte en objetos imprimibles (Stencils o +sellos), se llama la función @code{raise-markup} como + +@example +(apply raise-markup + @var{\objeto de marcado} + @var{lista de listas asociativas de propiedades} + 0.5 + @var{el marcado "ejemplo de texto"}) +@end example + +Primero la función @code{raise-markup} crea el sello para la cadena +@code{ejemplo de texto}, y después eleva el sello Stencil en 0.5 +espacios de pentagrama. Este es un ejemplo bastante simple; en el +resto de la sección podrán verse ejemplos más complejos, así como en +@file{scm/define-markup-commands.scm}. + + +@node Definición de una instrucción de marcado nueva +@subsection Definición de una instrucción de marcado nueva +@translationof New markup command definition + +Esta sección trata sobre la definición de nuevas instrucciones de +marcado. + + +@menu +* Sintaxis de la definición de instrucciones de marcado:: +* Acerca de las propiedades:: +* Un ejemplo completo:: +* Adaptación de instrucciones incorporadas:: +@end menu + +@node Sintaxis de la definición de instrucciones de marcado +@unnumberedsubsubsec Sintaxis de la definición de instrucciones de marcado +@translationof Markup command definition syntax + +Se pueden definir instrucciones de marcado nuevas usando el macro de +Scheme @code{define-markup-command}, en el nivel sintáctico superior. + +@lisp +(define-markup-command (@var{nombre-de-la-instruccion} @var{layout} @var{props} @var{arg1} @var{arg2} ...) + (@var{tipo-de-arg1?} @var{tipo-de-arg2?} ...) + [ #:properties ((@var{propiedad1} @var{valor-predeterminado1}) + ...) ] + ..command body..) +@end lisp + +Los argumentos son + +@table @code +@item @var{nombre-de-la-instruccion} +nombre de la instrucción de marcado +@item layout +la definición de @q{layout} (disposición). +@item props +una lista de listas asociativas, que contienen todas las propiedades +activas. +@item @var{argi} +argumento @var{i}-ésimo de la instrucción +@item @var{tipo-de-argi?} +predicado de tipo para el argumento @var{i}-ésimo +@end table + +Si la instrucción utiliza propiedades de los argumentos @code{props}, +se puede usar la palabra clave @code{#:properties} para especificar +qué propiedades se usan, así como sus valores predeterminados. + +Los argumentos se distinguen según su tipo: +@itemize +@item un marcado, que corresponde al predicado de tipo @code{markup?}; +@item una lista de marcados, que corresponde al predicado de tipo +@code{markup-list?}; +@item cualquier otro objeto de Scheme, que corresponde a predicados de tipo como +@code{list?}, @code{number?}, @code{boolean?}, etc. +@end itemize + +No existe ninguna limitación en el orden de los argumentos (después de +los argumentos estándar @code{layout} y @code{props}). Sin embargo, las +funciones de marcado que toman un elemento de marcado como su último +argumento son un poco especiales porque podemos aplicarlas a una lista +de marcados y el resultado es una lista de marcados donde la función +de marcado (con los argumentos antecedentes especificados) se ha +aplicado a todos los elementos de la lista de marcados original. + +Dado que la replicación de los argumentos precedentes para aplicar una +función de marcado a una lista de marcados es poco costosa +principalmente por los argumentos de Scheme, se evitan las caídas de +reindimiento simplemente mediante la utilización de argumentos de +Scheme para los argumentos antecedentes de las funciones de marcado +que toman un marcado como su último argumento. + +@node Acerca de las propiedades +@unnumberedsubsubsec Acerca de las propiedades +@translationof On properties + +Los argumentos @code{layout} y @code{props} de las instrucciones de +marcado traen a escena un contexto para la interpretación del marcado: +tamaño de la tipografía, grueso de línea, etc. + +El argumento @code{layout} permite el acceso a las propiedades +definidas en los bloques @code{paper}, usando la función +@code{ly:output-def-lookup}. Por ejemplo, el grueso de línea (el +mismo que el que se usa en las partituras) se lee usando: + +@example +(ly:output-def-lookup layout 'line-width) +@end example + +El argumento @code{props} hace accesibles algunas propiedades a las +instrucciones de marcado. Por ejemplo, cuando se interpreta el +marcado del título de un libro, todas las variables definidas dentro +del bloque @code{\header} se añaden automáticamente a @code{props}, de +manera que el marcado del título del libro puede acceder al título del +libro, el autor, etc. También es una forma de configurar el +comportamiento de una instrucción de marcado: por ejemplo, cuando una +instrucción utiliza tamaños de tipografía durante el procesado, el +tamaño se lee de @code{props} en vez de tener un argumento +@code{font-size}. El que llama a una instrucción de marcado puede +cambiar el valor de la propiedad del tamaño de la tipografía con el +objeto de modificar el comportamiento. Utilice la palabra clave +@code{#:properties} de @code{define-markup-command} para especificar +qué propiedades se deben leer a partir de los argumentos de +@code{props}. + +El ejemplo de la sección siguiente ilustra cómo acceder y +sobreescribir las propiedades de una instrucción de marcado. + + +@node Un ejemplo completo +@unnumberedsubsubsec Un ejemplo completo +@translationof A complete example + +El ejemplo siguiente define una instrucción de marcado para trazar un +rectángulo doble alrededor de un fragmento de texto. + +En primer lugar, necesitamos construir un resultado aproximado +utilizando marcados. Una consulta a @ruser{Text markup commands} nos +muestra que es útil la instrucción @code{\box}: + +@lilypond[quote,verbatim,ragged-right] +\markup \box \box HELLO +@end lilypond + +Ahora, consideramos que es preferible tener más separación entre el +texto y los rectángulos. Según la documentación de @code{\box}, esta +instrucción usa una propiedad @code{box-padding}, cuyo valor +predeterminado es 0.2. La documentación también menciona cómo +sobreescribir este valor: + +@lilypond[quote,verbatim,ragged-right] +\markup \box \override #'(box-padding . 0.6) \box A +@end lilypond + +Después, el relleno o separación entre los dos rectángulos nos parece +muy pequeño, así que lo vamos a sobreescribir también: + +@lilypond[quote,verbatim,ragged-right] +\markup \override #'(box-padding . 0.4) \box \override #'(box-padding . 0.6) \box A +@end lilypond + +Repetir esta extensa instrucción de marcado una y otra vez sería un +quebradero de cabeza. Aquí es donde se necesita una instrucción de +marcado. Así pues, escribimos una instrucción de marcado +@code{double-box}, que toma un argumento (el texto). Dibuja los dos +rectángulos y añade una separación. + +@lisp +#(define-markup-command (double-box layout props text) (markup?) + "Trazar un rectángulo doble rodeando el texto." + (interpret-markup layout props + (markup #:override '(box-padding . 0.4) #:box + #:override '(box-padding . 0.6) #:box text))) +@end lisp + +@code{text} es el nombre del argumento de la instrucción, y +@code{markup?} es el tipo: lo identifica como un elemento de marcado. +La función @code{interpret-markup} se usa en casi todas las +instrucciones de marcado: construye un sello, usando @code{layout}, +@code{props}, y un elemento de marcado. Aquí, la marca se construye +usando el macro de Scheme @code{markup}, véase @ref{Construcción de +elementos de marcado en Scheme}. La transformación de una expresión +@code{\markup} en una expresión de marcado de Scheme es directa. + +La instrucción nueva se puede usar como sigue: + +@example +\markup \double-box A +@end example + +Sería buen hacer que la instrucción @code{double-box} fuera +personalizable: aquí, los valores de relleno @code{box-padding} son +fijos, y no se pueden cambiar por parte del usuario. Además, sería +mejor distinguir la separación entre los dos rectángulos, del relleno +entre el rectángulo interno y el texto. Así pues, introducimos una +nueva propiedad, @code{inter-box-padding}, para el relleno entre los +rectángulos. El @code{box-padding} se usará para el relleno interno. +Ahora el código nuevo es como se ve a continuación: + +@lisp +#(define-markup-command (double-box layout props text) (markup?) + #:properties ((inter-box-padding 0.4) + (box-padding 0.6)) + "Trazar un rectángulo doble rodeando el texto." + (interpret-markup layout props + (markup #:override `(box-padding . ,inter-box-padding) #:box + #:override `(box-padding . ,box-padding) #:box text))) +@end lisp + +Aquí, la palabra clave @code{#:properties} se usa de manera que las +propiedades @code{inter-box-padding} y @code{box-padding} se leen a +partir del argumento @code{props}, y se les proporcionan unos valores +predeterminados si las propiedades no están definidas. + +Después estos valores se usan para sobreescribir las propiedades +@code{box-padding} usadas por las dos instrucciones @code{\box}. +Observe el apóstrofo invertido y la coma en el argumento de +@code{\override}: nos permiten introducir un valor de variable dentro +de una expresión literal. + +Ahora, la instrucción se puede usar dentro de un elemento de marcado, +y el relleno de los rectángulos se puede personalizar: + +@lilypond[quote,verbatim,ragged-right] +#(define-markup-command (double-box layout props text) (markup?) + #:properties ((inter-box-padding 0.4) + (box-padding 0.6)) + "Draw a double box around text." + (interpret-markup layout props + (markup #:override `(box-padding . ,inter-box-padding) #:box + #:override `(box-padding . ,box-padding) #:box text))) + +\markup \double-box A +\markup \override #'(inter-box-padding . 0.8) \double-box A +\markup \override #'(box-padding . 1.0) \double-box A +@end lilypond + + +@node Adaptación de instrucciones incorporadas +@unnumberedsubsubsec Adaptación de instrucciones incorporadas +@translationof Adapting builtin commands + +Una buena manera de comenzar a escribir una instrucción de marcado +nueva, es seguir el ejemplo de otra instrucción ya incorporada. Casi +todas las instrucciones de marcado que están incorporadas en LilyPond +se pueden encontrar en el archivo +@file{scm/define-markup-commands.scm}. + +Por ejemplo, querríamos adaptar la instrucción @code{\draw-line}, para +que trace una línea doble. La instrucción @code{\draw-line} está +definida como sigue (se han suprimido los comentarios de +documentación): + +@lisp +(define-markup-command (draw-line layout props dest) + (number-pair?) + #:category graphic + #:properties ((thickness 1)) + "...documentación..." + (let ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (x (car dest)) + (y (cdr dest))) + (make-line-stencil th 0 0 x y))) +@end lisp + +Para definir una instrucción nueva basada en otra existente, copie la +definición y cámbiele el nombre. La palabra clave @code{#:category} +se puede eliminar sin miedo, pues sólo se utiliza para generar +documentación de LilyPond, y no tiene ninguna utilidad para las +instrucciones de marcado definidas por el usuario. + +@lisp +(define-markup-command (draw-double-line layout props dest) + (number-pair?) + #:properties ((thickness 1)) + "...documentación..." + (let ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (x (car dest)) + (y (cdr dest))) + (make-line-stencil th 0 0 x y))) +@end lisp + +A continuación se añade una propiedad para establecer la separación +entre las dos líneas, llamada @code{line-gap}, con un valor +predeterminado de p.ej. 0.6: + +@lisp +(define-markup-command (draw-double-line layout props dest) + (number-pair?) + #:properties ((thickness 1) + (line-gap 0.6)) + "...documentación..." + ... +@end lisp + +Finalmente, se añade el código para trazar las dos líneas. Se usan +dos llamadas a @code{make-line-stencil} para trazar las líneas, y los +sellos resultantes se combinan usando @code{ly:stencil-add}: + +@lilypond[quote,verbatim,ragged-right] +#(define-markup-command (my-draw-line layout props dest) + (number-pair?) + #:properties ((thickness 1) + (line-gap 0.6)) + "..documentation.." + (let* ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (dx (car dest)) + (dy (cdr dest)) + (w (/ line-gap 2.0)) + (x (cond ((= dx 0) w) + ((= dy 0) 0) + (else (/ w (sqrt (+ 1 (* (/ dx dy) (/ dx dy)))))))) + (y (* (if (< (* dx dy) 0) 1 -1) + (cond ((= dy 0) w) + ((= dx 0) 0) + (else (/ w (sqrt (+ 1 (* (/ dy dx) (/ dy dx)))))))))) + (ly:stencil-add (make-line-stencil th x y (+ dx x) (+ dy y)) + (make-line-stencil th (- x) (- y) (- dx x) (- dy y))))) + +\markup \my-draw-line #'(4 . 3) +\markup \override #'(line-gap . 1.2) \my-draw-line #'(4 . 3) +@end lilypond + + +@node Definición de nuevas instrucciones de lista de marcado +@subsection Definición de nuevas instrucciones de lista de marcado +@translationof New markup list command definition + +Las instrucciones de listas de marcado se definen con el macro de +Scheme @code{define-markup-list-command}, que es similar al macro +@code{define-markup-command} descrito en @ref{Definición de una +instrucción de marcado nueva}, excepto que donde éste devuelve un +sello único, aquél devuelve una lista de sellos. + +En el siguiente ejemplo se define una instrucción de lista de marcado +@code{\paragraph}, que devuelve una lista de líneas justificadas, +estando la primera de ellas sangrada. La anchura del sangrado se toma +del argumento @code{props}. + +@example +#(define-markup-list-command (paragraph layout props args) (markup-list?) + #:properties ((par-indent 2)) + (interpret-markup-list layout props + (make-justified-lines-markup-list (cons (make-hspace-markup par-indent) + args)))) +@end example + +Aparte de los argumentos usuales @code{layout} y @code{props}, la +instrucción de lista de marcados @code{paragraph} toma un argumento de +lista de marcados, llamado @code{args}. El predicado para listas de +marcados es @code{markup-list?}. + +En primer lugar, la función toma el ancho del sangrado, una propiedad +llamada aquí @code{par-indent}, de la lista de propiedades +@code{props}. Si no se encuentra la propiedad, el valor +predeterminado es @code{2}. Después, se hace una lista de líneas +justificadas usando la función +@code{make-justified-lines-markup-list}, que está relacionada con la +instrucción incorporada de lista de marcados @code{\justified-lines}. +Se añade un espacio horizontal al principio usando la función +@code{make-hspace-markup}. Finalmente, la lista de marcados se +interpreta usando la función @code{interpret-markup-list}. + +Esta nueva instrucción de lista de marcados se puede usar como sigue: + +@example +\markuplines @{ + \paragraph @{ + El arte de la tipografía musical se llama \italic @{grabado (en plancha).@} + El término deriva del proceso tradicional de impresión de música. + hace sólo algunas décadas, las partituras se hacían cortando y estampando + la música en una plancha de zinc o lata en una imagen invertida. + @} + \override-lines #'(par-indent . 4) \paragraph @{ + La plancha se tenía que entintar, y las depresiones causadas por los cortes + y estampados retienen la tinta. Se formaba una imagen presionando el papel + contra la plancha. El estampado y cortado se hacía completamente + a mano. + @} +@} +@end example + + +@node Contextos para programadores +@section Contextos para programadores +@translationof Contexts for programmers + +@menu +* Evaluación de contextos:: +* Ejecutar una función sobre todos los objetos de la presentación:: +@end menu + +@node Evaluación de contextos +@subsection Evaluación de contextos +@translationof Context evaluation + +@cindex código, llamadas durante la interpretación +@funindex \applyContext + +Se pueden modificar los contextos durante la interpretación con código +de Scheme. La sintaxis para esto es + +@example +\applyContext @var{función} +@end example + +@code{@var{función}} debe ser una función de Scheme que toma un único +argumento, que es el contexto al que aplicarla. El código siguiente +imprime el número del compás actual sobre la salida estándar durante +la compilación: + +@example +\applyContext + #(lambda (x) + (format #t "\nSe nos ha llamado en el compás número ~a.\n" + (ly:context-property x 'currentBarNumber))) +@end example + + +@node Ejecutar una función sobre todos los objetos de la presentación +@subsection Ejecutar una función sobre todos los objetos de la presentación +@translationof Running a function on all layout objects + +@cindex código, llamar sobre objetos de presentación +@funindex \applyOutput + + +La manera más versátil de realizar el ajuste fino de un objeto es +@code{\applyOutput}, que +funciona insertando un evento dentro del contexto especificado +(@rinternals{ApplyOutputEvent}). Su sintaxis es + +@example +\applyOutput @var{contexto} @var{proc} +@end example + +@noindent +donde @code{@var{proc}} es una función de Scheme que toma tres argumentos. + +Al interpretarse, la función @code{@var{proc}} se llama para cada objeto de +presentación que se encuentra en el contexto @code{@var{contexto}} +en el tiempo actual, con los siguientes argumentos: + +@itemize +@item el propio objeto de presentación, +@item el contexto en que se creó el objeto de presentación, y +@item el contexto en que se procesa @code{\applyOutput}. +@end itemize + + +Además, la causa del objeto de presentación, es decir el objeto o +expresión musical que es responsable de haberlo creado, está en la +propiedad @code{cause} del objeto. Por ejemplo, para la cabeza de una +nota, éste es un evento @rinternals{NoteHead}, y para un objeto +plica, éste es un objeto @rinternals{Stem}. + +He aquí una función que usar para @code{\applyOutput}; borra las +cabezas de las notas que están sobre la línea central y junto a ella: + +@lilypond[quote,verbatim,ragged-right] +#(define (blanker grob grob-origin context) + (if (and (memq 'note-head-interface (ly:grob-interfaces grob)) + (< (abs (ly:grob-property grob 'staff-position)) 2)) + (set! (ly:grob-property grob 'transparent) #t))) + +\relative c' { + a'4 e8 <<\applyOutput #'Voice #blanker a c d>> b2 +} +@end lilypond + + +@node Funciones de callback +@section Funciones de callback +@translationof Callback functions + +Las propiedades (como @code{thickness} (grosor), @code{direction} +(dirección), etc.) se pueden establecer a valores fijos con \override, +p. ej.: + +@example +\override Stem #'thickness = #2.0 +@end example + +Las propiedades pueden fijarse también a un procedimiento de scheme, + +@lilypond[fragment,verbatim,quote,relative=2] +\override Stem #'thickness = #(lambda (grob) + (if (= UP (ly:grob-property grob 'direction)) + 2.0 + 7.0)) +c b a g b a g b +@end lilypond + +@noindent +En este caso, el procedimiento se ejecuta tan pronto como el valor de +la propiedad se reclama durante el proceso de formateo. + +Casi todo el motor de tipografiado está manejado por estos +@emph{callbacks}. Entre las propiedades que usan normalmente +@emph{callbacks} están + +@table @code +@item stencil + La rutina de impresión, que construye un dibujo para el símbolo +@item X-offset + La rutina que establece la posición horizontal +@item X-extent + La rutina que calcula la anchura de un objeto +@end table + +El procedimiento siempre toma un argumento único, que es el grob (el +objeto gráfico). + +Si se deben llamar rutinas con varios argumentos, el grob actual se +puede insertar con una cerradura de grob. He aquí un ajuste +procedente de @code{AccidentalSuggestion}, + +@example +`(X-offset . + ,(ly:make-simple-closure + `(,+ + ,(ly:make-simple-closure + (list ly:self-alignment-interface::centered-on-x-parent)) + ,(ly:make-simple-closure + (list ly:self-alignment-interface::x-aligned-on-self))))) +@end example + +@noindent +En este ejemplo, tanto +@code{ly:self-alignment-interface::x-aligned-on-self} como +@code{ly:self-alignment-interface::centered-on-x-parent} se llaman con +el grob como argumento. El resultado se añade con la función +@code{+}. Para asegurar que esta adición se ejecuta adecuadamente, +todo ello se encierra dentro de @code{ly:make-simple-closure}. + +De hecho, usar un solo procedimiento como valor de una propiedad +equivale a + +@example +(ly:make-simple-closure (ly:make-simple-closure (list @var{proc}))) +@end example + +@noindent +El @code{ly:make-simple-closure} interior aporta el grob como +argumento de @var{proc}, el exterior asegura que el resultado de la +función es lo que se devuelve, en lugar del objeto +@code{simple-closure}. + +Desde dentro de un callback, el método más fácil para evaluar un +elemento de marcado es usar grob-interpret-markup. Por ejemplo: + +@example +mi-callback = #(lambda (grob) + (grob-interpret-markup grob (markup "fulanito"))) +@end example + + +@node Código de Scheme en línea +@section Código de Scheme en línea +@translationof Inline Scheme code + +La principal desventaja de @code{\tweak} es su inflexibilidad +sintáctica. Por ejemplo, lo siguiente produce un error de sintaxis. + +@example +F = \tweak #'font-size #-3 -\flageolet + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +En otras palabras, @code{\tweak} no se comporta como una articulación +en cuando a la sintaxis; concretamente, no se puede adjuntar con +@code{^} y @code{_}. + +Usando Scheme, se puede dar un rodeo a este problema. La ruta hacia +el resultado se da en @ref{Añadir articulaciones a las notas +(ejemplo)}, especialmente cómo usar @code{\displayMusic} como guía de +ayuda. + +@example +F = #(let ((m (make-music 'ArticulationEvent + 'articulation-type "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -3 + (ly:music-property m 'tweaks))) + m) + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +Aquí, las propiedades @code{tweaks} del objeto flageolet @code{m} +(creado con @code{make-music}) se extraen con +@code{ly:music-property}, se antepone un nuevo par clave-valor para +cambiar el tamaño de la tipografía a la lista de propiedades con la +función de Scheme @code{acons}, y finalmente el resultado se escribe +de nuevo con @code{set!}. El último elemento del bloque @code{let} es +el valor de retorno, el propio @code{m}. + + +@node Trucos difíciles +@section Trucos difíciles +@translationof Difficult tweaks + +Hay un cierto número de tipos de ajustes difíciles. + +@itemize + + +@item +Un tipo de ajuste difícil es la apariencia de los objetos de +extensión, como las ligaduras de expresión y de unión. Inicialmente, +sólo se crea uno de estos objetos, y pueden ajustarse con el mecanismo +normal. Sin embargo, en ciertos casos los objetos extensores cruzan +los saltos de línea. Si esto ocurre, estos objetos se clonan. Se +crea un objeto distinto por cada sistema en que se encuentra. Éstos +son clones del objeto original y heredan todas sus propiedades, +incluidos los @code{\override}s. + +En otras palabras, un @code{\override} siempre afecta a todas las +piezas de un objeto de extensión fragmentado. Para cambiar sólo una +parte de un extensor en el salto de línea, es necesario inmiscuirse en +el proceso de formateado. El @emph{callback} +@code{after-line-breaking} contiene el procedimiento Scheme que se +llama después de que se han determinado los saltos de línea, y los +objetos de presentación han sido divididos sobre los distintos +sistemas. + +En el ejemplo siguiente, definimos un procedimiento +@code{my-callback}. Este procedimiento + +@itemize +@item +determina si hemos sido divididos por los saltos de línea +@item +en caso afirmativo, reúne todos los objetos divididos +@item +comprueba si somos el último de los objetos divididos +@item +en caso afirmativo, establece @code{extra-offset}. +@end itemize + +Este procedimiento se instala en @rinternals{Tie} (ligadura de unión), +de forma que la última parte de la ligadura dividida se traslada hacia +arriba. + +@lilypond[quote,verbatim,ragged-right] +#(define (my-callback grob) + (let* ( + ;; have we been split? + (orig (ly:grob-original grob)) + + ;; if yes, get the split pieces (our siblings) + (siblings (if (ly:grob? orig) + (ly:spanner-broken-into orig) + '()))) + + (if (and (>= (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) + +\relative c'' { + \override Tie #'after-line-breaking = + #my-callback + c1 ~ \break + c2 ~ c +} +@end lilypond + +@noindent +Al aplicar este truco, la nueva función de callback +@code{after-line-breaking} también debe llamar a la antigua, +si existe este valor predeterminado. Por ejemplo, si se usa con +@code{Hairpin}, se debe llamar también a +@code{ly:spanner::kill-zero-spanned-time}. + + +@item Algunos objetos no se pueden cambiar con @code{\override} por +razones técnicas. Son ejemplos @code{NonMusicalPaperColumn} y +@code{PaperColumn}. Se pueden cambiar con la función +@code{\overrideProperty} que funciona de forma similar a @code{\once +\override}, pero usa una sintaxis distinta. + +@example +\overrideProperty +#"Score.NonMusicalPaperColumn" % Nombre del grob +#'line-break-system-details % Nombre de la propiedad +#'((next-padding . 20)) % Valor +@end example + +Observe, sin embargo, que @code{\override}, aplicado a +@code{NonMusicalPaperColumn} y a @code{PaperColumn}, aún funciona +como se espera dentro de los bloques @code{\context}. + +@end itemize + + +@node Interfaces de Scheme de LilyPond +@chapter Interfaces de Scheme de LilyPond +@translationof LilyPond Scheme interfaces + +Este capítulo cubre las diversas herramientas proporcionadas por +LilyPond como ayuda a los programadores de Scheme a extraer e +introducir información de los flujos musicales. + +HACER @c TODO -- figure out what goes in here and how to organize it diff --git a/Documentation/es/extending/scheme-tutorial.itely b/Documentation/es/extending/scheme-tutorial.itely new file mode 100644 index 0000000000..c7d53baaf6 --- /dev/null +++ b/Documentation/es/extending/scheme-tutorial.itely @@ -0,0 +1,1470 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097 + + 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 Tutorial de Scheme +@appendix Tutorial de Scheme +@translationof Scheme tutorial + +@funindex # +@cindex Scheme +@cindex GUILE +@cindex Scheme, código en línea +@cindex acceder a Scheme +@cindex evaluar Scheme +@cindex LISP + +LilyPond utiliza el lenguaje de programación Scheme, tanto como parte +de la sintaxis del código de entrada, como para servir de mecanismo +interno que une los módulos del programa entre sí. Esta sección es +una panorámica muy breve sobre cómo introducir datos en Scheme. Si +quiere saber más sobre Scheme, consulte +@uref{http://@/www@/.schemers@/.org}. + +LilyPond utiliza la implementación GNU Guile de Scheme, que está +basada en el estándar @qq{R5RS} del lenguaje. Si está aprendiendo +Scheme para usarlo con LilyPond, no se recomienda trabajar con una +implementación distinta (o que se refiera a un estándar diferente). +Hay información sobre Guile en +@uref{http://www.gnu.org/software/guile/}. El estándar de Scheme +@qq{R5RS} se encuentra en +@uref{http://www.schemers.org/Documents/Standards/R5RS/}. + +@menu +* Introducción a Scheme:: +* Scheme dentro de LilyPond:: +* Construir funciones complicadas:: +@end menu + +@node Introducción a Scheme +@section Introducción a Scheme +@translationof Introduction to Scheme + +Comenzaremos con una introducción a Scheme. Para esta breve +introducción utilizaremos el intérprete GUILE para explorar la manera +en que el lenguaje funciona. Una vez nos hayamos familiarizado con +Scheme, mostraremos cómo se puede integrar el lenguaje en los archivos +de LilyPond. + + +@menu +* Cajón de arena de Scheme:: +* Variables de Scheme:: +* Tipos de datos simples de Scheme:: +* Tipos de datos compuestos de Scheme:: +* Cálculos en Scheme:: +* Procedimientos de Scheme:: +* Condicionales de Scheme:: +@end menu + +@node Cajón de arena de Scheme +@subsection Cajón de arena de Scheme +@translationof Scheme sandbox + +La instalación de LilyPond incluye también la de la implementación +Guile de Scheme. Sobre casi todos los sistemas puede experimentar en +una @qq{caja de arena} de Scheme abriendo una ventana del terminal y +tecleando @q{guile}. En algunos sistemas, sobre todo en Windows, +podría necesitar ajustar la variable de entorno @code{GUILE_LOAD_PATH} +a la carpeta @code{../usr/shr/guile/1.8} dentro de la instalación de +LilyPond (para conocer la ruta completa a esta carpeta, consulte +@rlearning{Otras fuentes de información}). Como alternativa, los +usuarios de Windows pueden seleccionar simplemente @q{Ejecutar} del +menú Inicio e introducir @q{guile}. + +Una vez está funcionando el cajón de arena de Guile, verá un indicador +del sistema de Guile: + +@lisp +guile> +@end lisp + +Podemos introducir expresiones de Scheme en este indicador para +experimentar con Scheme. + +@node Variables de Scheme +@subsection Variables de Scheme +@translationof Scheme variables + +Las variables de Scheme pueden tener cualquier valor válido de Scheme, +incluso un procedimiento de Scheme. + +Las variables de Scheme se crean con @code{define}: + +@lisp +guile> (define a 2) +guile> +@end lisp + +Las variables de Scheme se pueden evaluar en el indicador del sistema +de guile, simplemente tecleando el nombre de la variable: + +@lisp +guile> a +2 +guile> +@end lisp + +Las variables de Scheme se pueden imprimir en la pantalla utilizando +la función display: + +@lisp +guile> (display a) +2guile> +@end lisp + +@noindent +Observe que el valor @code{2} y el indicador del sistema @code{guile} +se muestran en la misma línea. Esto se puede evitar llamando al +procedimiento de nueva línea o imprimiendo un carácter de nueva línea. + +@lisp +guile> (display a)(newline) +2 +guile> (display a)(display "\n") +2 +guile> +@end lisp + +Una vez que se ha creado una variable, su valor se puede modificar con +@code{set!}: + +@lisp +guile> (set! a 12345) +guile> a +12345 +guile> +@end lisp + +@node Tipos de datos simples de Scheme +@subsection Tipos de datos simples de Scheme +@translationof Scheme simple data types + +El concepto más básico de un lenguaje son sus tipos de datos: números, +cadenas de caracteres, listas, etc. He aquí una lista de los tipos de +datos que son de relevancia respecto de la entrada de LilyPond. + +@table @asis +@item Booleanos +Los valores Booleanos son Verdadero y Falso. Verdadero en Scheme es +@code{#t} y Falso es @code{#f}. +@funindex ##t +@funindex ##f + +@item Números +Los números se escriben de la forma normal, @code{1} es el número +(entero) uno, mientras que @code{-1.5} es un número en coma flotante +(un número no entero). + +@item Cadenas +Las cadenas se encierran entre comillas: + +@example +"esto es una cadena" +@end example + +Las cadenas pueden abarcar varias líneas: + +@example +"esto +es +una cadena" +@end example + +@noindent +y los caracteres de nueva línea al final de cada línea se incluirán +dentro de la cadena. + +Los caracteres de nueva línea también se pueden añadir mediante la +inclusión de @code{\n} en la cadena. + +@example +"esto\nes una\ncadena de varias líneas" +@end example + + +Las comillas dobles y barras invertidas se añaden a las cadenas +precediéndolas de una barra invertida. La cadena @code{\a dijo "b"} +se introduce como + +@example +"\\a dijo \"b\"" +@end example + +@end table + +Existen más tipos de datos de Scheme que no se estudian aquí. Para +ver un listado completo, consulte la guía de referencia de Guile, +@uref{http://www.gnu.org/software/guile/manual/html_node/Simple-Data-Types.html}. + +@node Tipos de datos compuestos de Scheme +@subsection Tipos de datos compuestos de Scheme +@translationof Scheme compound data types + +También existen tipos de datos compuestos en Scheme. Entre los tipos +más usados en la programación de LilyPond se encuentran las parejas, +las listas, las listas-A y las tablas de hash. + +@subheading Parejas + +El tipo fundacional de datos compuestos de Scheme es la @code{pareja}. +Como se espera por su nombre, una pareja son dos valores unidos en uno +solo. El operador que se usa para formar una pareja se llama +@code{cons}. + +@lisp +guile> (cons 4 5) +(4 . 5) +guile> +@end lisp + +Observe que la pareja se imprime como dos elementos rodeados por +paréntesis y separados por un espacio, un punto (@code{.}) y otro +espacio. El punto @emph{no es} un punto decimal, sino más bien un +indicador de pareja. + +Las parejas también se pueden introducir como valores literales +precediéndolos de un carácter de comilla simple o apóstrofo. + +@lisp +guile> '(4 . 5) +(4 . 5) +guile> +@end lisp + +Los dos elementos de una pareja pueden ser cualquier valor válido de +Scheme: + +@lisp +guile> (cons #t #f) +(#t . #f) +guile> '("bla-bla" . 3.1415926535) +("bla-bla" . 3.1415926535) +guile> +@end lisp + +Se puede accede al primero y segundo elementos de la pareja mediante +los procedimientos de Scheme @code{car} y @code{cdr}, respectivamente. + +@lisp +guile> (define mipareja (cons 123 "Hola") +... ) +guile> (car mipareja) +123 +guile> (cdr mipareja) +"Hola" +guile> +@end lisp + +@noindent + +Nota: @code{cdr} se pronuncia "could-er", según Sussman y Abelson, +véase +@uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133} + + +@subheading Listas + +Una estructura de datos muy común en Scheme es la @emph{lista}. +Formalmente, una lista se define como la lista vacía (representada +como @code{'()}, o bien como una pareja cuyo @code{cdr} es una lista. + +Existen muchas formas de crear listas. Quizá la más común es con el +procedimiento @code{list}: + +@lisp +guile> (list 1 2 3 "abc" 17.5) +(1 2 3 "abc" 17.5) +@end lisp + +Como se ve, una lista se imprime en la forma de elementos individuales +separados por espacios y encerradas entre paréntesis. A diferencia de +las parejas, no hay ningún punto entre los elementos. + +También se puede escribir una lista como una lista literal encerrando +sus elementos entre paréntesis y añadiendo un apóstrofo: + +@lisp +guile> '(17 23 "fulano" "mengano" "zutano") +(17 23 "fulano" "mengano" "zutano") +@end lisp + +Las listas son una parte fundamental de Scheme. De hecho, Scheme se +considera un dialecto de Lisp, donde @q{lisp} es una abreviatura de +@q{List Processing} (proceso de listas). Todas las expresiones de +Scheme son listas. + +@subheading Listas asociativas (listas-A) + +Un tipo especial de listas son las @emph{listas asociativas} o +@emph{listas-A}. Se puede usar una lista-A para almacenar datos para +su fácil recuperación posterior. + +Las listas-A son listas cuyos elementos son parejas. El @code{car} de +cada elemento se llama @emph{clave}, y el @code{cdr} de cada elemento +se llama @emph{valor}. El procedimiento de Scheme @code{assoc} se usa +para recuperar un elemento de la lista-A, y @code{cdr} se usa para +recuperar el valor: + +@lisp +guile> (define mi-lista-a '((1 . "A") (2 . "B") (3 . "C"))) +guile> mi-lista-a +((1 . "A") (2 . "B") (3 . "C")) +guile> (assoc 2 mi-lista-a) +(2 . "B") +guile> (cdr (assoc 2 mi-lista-a)) +"B" +guile> +@end lisp + +Las listas-A se usan mucho en LilyPond para almacenar propiedades y +otros datos. + +@subheading Tablas de hash + +Estructuras de datos que se utilizan en LilyPond de forma ocasional. +Una tabla de hash es similar a una matriz, pero los índices de la +matriz pueden ser cualquier tipo de valor de Scheme, no sólo enteros. + +Las tablas de hash son más eficientes que las listas-A si hay una gran +cantidad de datos que almacenar y los datos cambian con muy poca +frecuencia. + +La sintaxis para crear tablas de hash es un poco compleja, pero +veremos ejemplos de ello en el código fuente de LilyPond. + +@lisp +guile> (define h (make-hash-table 10)) +guile> h +# +guile> (hashq-set! h 'key1 "val1") +"val1" +guile> (hashq-set! h 'key2 "val2") +"val2" +guile> (hashq-set! h 3 "val3") +"val3" +@end lisp + +Los valores se recuperan de las tablas de hash mediante +@code{hashq-ref}. + +@lisp +guile> (hashq-ref h 3) +"val3" +guile> (hashq-ref h 'key2) +"val2" +guile> +@end lisp + +Las claves y los valores se recuperan como una pareja con +@code{hashq-get-handle}. Ésta es la forma preferida, porque devuelve +@code{#f} si no se encuentra la clave. + +@lisp +guile> (hashq-get-handle h 'key1) +(key1 . "val1") +guile> (hashq-get-handle h 'frob) +#f +guile> +@end lisp + +@node Cálculos en Scheme +@subsection Cálculos en Scheme +@translationof Calculations in Scheme + +@ignore +Todo el tiempo hemos estado usando listas. Un cálculo, como @code{(+ +1 2)} también es una lista (que contiene el símbolo @code{+} y los +números 1 y@tie{}2). Normalmente, las listas se interpretan como +cálculos, y el intérprete de Scheme sustituye el resultado del +cálculo. Para escribir una lista, detenemos la evaluación. Esto se +hace precediendo la lista por un apóstrofo @code{'}. Así, para los +cálculos no usamos ningún apóstrofo. + +Dentro de una lista o pareja precedida de apóstrofo, no hay necesidad +de escribir ningún apóstrofo más. Lo siguiente es una pareja de +símbolos, una lista de símbolos y una lista de listas respectivamente: + +@example +#'(stem . head) +#'(staff clef key-signature) +#'((1) (2)) +@end example +@end ignore + +Scheme se puede usar para hacer cálculos. Utiliza sintaxis +@emph{prefija}. Sumar 1 y@tie{}2 se escribe como @code{(+ 1 2)} y no +como el tradicional @math{1+2}. + +@lisp +guile> (+ 1 2) +3 +@end lisp + +Los cálculos se pueden anidar; el resultado de una función se puede +usar para otro cálculo. + +@lisp +guile> (+ 1 (* 3 4)) +13 +@end lisp + +Estos cálculos son ejemplos de evaluaciones; una expresión como +@code{(* 3 4)} se sustituye por su valor @code{12}. + +Los cálculos de Scheme son sensibles a las diferencias entre enteros y +no enteros. Los cálculos enteros son exactos, mientras que los no +enteros se calculan con los límites de precisión adecuados: + +@lisp +guile> (/ 7 3) +7/3 +guile> (/ 7.0 3.0) +2.33333333333333 +@end lisp + +Cuando el intérprete de Scheme encuentra una expresión que es una +lista, el primer elemento de la lista se trata como un procedimiento a +evaluar con los argumentos del resto de la lista. Por tanto, todos +los operadores en Scheme son operadores prefijos. + +Si el primer elemento de una expresión de Scheme que es una lista que +se pasa al intérprete @emph{no es} un operador o un procedimiento, se +produce un error: + +@lisp +guile> (1 2 3) + +Backtrace: +In current input: + 52: 0* [1 2 3] + +:52:1: In expression (1 2 3): +:52:1: Wrong type to apply: 1 +ABORT: (misc-error) +guile> +@end lisp + +Aquí podemos ver que el intérprete estaba intentando tratar el 1 como +un operador o procedimiento, y no pudo hacerlo. De aquí que el error +sea "Wrong type to apply: 1". + +Así pues, para crear una lista debemos usar el operador de lista, o +podemos precederla de un apóstrofo para que el intérprete no trate de +evaluarla. + +@lisp +guile> (list 1 2 3) +(1 2 3) +guile> '(1 2 3) +(1 2 3) +guile> +@end lisp + +Esto es un error que puede aparecer cuando trabaje con Scheme dentro +de LilyPond. + +@ignore +La misma asignación se puede hacer también completamente en Scheme, + +@example +#(define veintiCuatro (* 2 doce)) +@end example + +@c this next section is confusing -- need to rewrite + +El @emph{nombre} de una variable también es una expresión, similar a +un número o una cadena. Se introduce como + +@example +#'veintiCuatro +@end example + +@funindex #'symbol +@cindex comillas en Scheme + +El apóstrofo @code{'} evita que el intérprete de Scheme sustituya +@code{veintiCuatro} por @code{24}. En vez de esto, obtenemos el +nombre @code{veintiCuatro}. +@end ignore + + +@node Procedimientos de Scheme +@subsection Procedimientos de Scheme +@translationof Scheme procedures + +Los procedimientos de Scheme son expresiones de Scheme ejecutables que +devuelven un valor resultante de su ejecución. También pueden +manipular variables definidas fuera del procedimiento. + +@subheading Definir procedimientos + +Los procedimientos se definen en Scheme con @code{define}: + +@example +(define (nombre-de-la-función arg1 arg2 ... argn) + expresión-de-scheme-que-devuelve-un-valor) +@end example + +Por ejemplo, podemos definir un procedimiento para calcular la media: + +@lisp +guile> (define (media x y) (/ (+ x y) 2)) +guile> media +# +@end lisp + +Una vez se ha definido un procedimiento, se llama poniendo el nombre +del procedimiento dentro de una lista. Por ejemplo, podemos calcular +la media de 3 y 12: + +@lisp +guile> (media 3 12) +15/2 +@end lisp + +@subheading Predicados + +Los procedimientos de Scheme que devuelven valores booleanos se suelen +llamar @emph{predicados}. Por convenio (pero no por necesidad), +los nombres de predicados acaban en un signo de interrogación: + +@lisp +guile> (define (menor-que-diez? x) (< x 10)) +guile> (menor-que-diez? 9) +#t +guile> (menor-que-diez? 15) +#f +@end lisp + +@subheading Valores de retorno + +Los procedimientos de Scheme siempre devuelven un valor de retorno, +que es el valor de la última expresión ejecutada en el procedimiento. +El valor de retorno puede ser cualquier valor de Scheme válido, +incluso una estructura de datos compleja o un procedimiento. + +A veces, el usuario quiere tener varias expresiones de Scheme dentro +de un procedimiento. Existen dos formas en que se pueden combinar +distintas expresiones. La primera es el procedimiento @code{begin}, +que permite evaluar varias expresiones, y devuelve el valor de la +última expresión. + +@lisp +guile> (begin (+ 1 2) (- 5 8) (* 2 2)) +4 +@end lisp + +La segunda forma de combinar varias expresiones es dentro de un bloque +@code{let}. Dentro de un bloque let, se crean una serie de ligaduras +o asignaciones, y después se evalúa una secuencia de expresiones que +pueden incluir esas ligaduras o asignaciones. El valor de retorno del +bloque let es el valor de retorno de la última sentencia del bloque +let: + +@lisp +guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4)) +... (+ (* x y) (/ z x))) +508 +@end lisp + +@node Condicionales de Scheme +@subsection Condicionales de Scheme +@translationof Scheme conditionals + +@subheading if + +Scheme tiene un procedimiento @code{if}: + +@example +(if expresión-de-prueba expresión-de-cierto expresión-de-falso) +@end example + +@var{expresión-de-prueba} es una expresión que devuelve un valor +booleano. Si @var{expresión-de-prueba} devuelve @code{#t}, el +procedimiento @code{if} devuelve el valor de la +@var{expresión-de-cierto}, en caso contrario devuelve el valor de la +@var{expresión-de-falso}. + +@lisp +guile> (define a 3) +guile> (define b 5) +guile> (if (> a b) "a es mayor que b" "a no es mayor que b") +"a no es mayor que b" +@end lisp + +@subheading cond + +Otro procedimiento condicional en scheme es @code{cond}: + +@example +(cond (expresión-de-prueba-1 secuencia-de-expresiones-resultante-1) + (expresión-de-prueba-2 secuencia-de-expresiones-resultante-2) + ... + (expresión-de-prueba-n secuencia-de-expresiones-resultante-n)) +@end example + +Por ejemplo: + +@lisp +guile> (define a 6) +guile> (define b 8) +guile> (cond ((< a b) "a es menor que b") +... ((= a b) "a es igual a b") +... ((> a b) "a es mayor que b")) +"a es menor que b" +@end lisp + +@node Scheme dentro de LilyPond +@section Scheme dentro de LilyPond +@translationof Scheme in LilyPond + +@menu +* Sintaxis del Scheme de LilyPond:: +* Variables de LilyPond:: +* Variables de entrada y Scheme:: +* Propiedades de los objetos:: +* Variables de LilyPond compuestas:: +* Representación interna de la música:: +@end menu + +@node Sintaxis del Scheme de LilyPond +@subsection Sintaxis del Scheme de LilyPond +@translationof LilyPond Scheme syntax + +El intérprete Guile forma parte de LilyPond, lo que significa que se +puede incluir Scheme dentro de los archivos de entrada de LilyPond. +La marca de almohadilla @code{#} se utiliza para indicar al analizador +sintáctico de LilyPond que lo siguiente es un valor de Scheme. + +Una vez el analizador sintáctico se encuentra con un símbolo de +almohadilla, la entrada se le pasa al intérprete Guile para evaluar la +expresión de Scheme. El intérprete continúa procesando la entrada +hasta que se encuentra con el final de una expresión de Scheme. + +Los procedimientos de Scheme se pueden definir dentro de los archivos +de entrada de LilyPond: + +@example +#(define (average a b c) (/ (+ a b c) 3)) +@end example + +Observe que los comentarios de LilyPond (@code{%} y @code{%@{ %@}}) no +se pueden utilizar dentro del código de Scheme, ni siquiera dentro de +un archivo de entrada de LilyPond input file, porque es el intérprete +Guile, y no el analizador sintáctico de LilyPond, el que está +interpretando la expresión de Scheme. Los comentarios en el Scheme de +Guile se introducen como sigue: + +@example +; esto es un comentario de una línea + +#! + Esto es un comentario de bloque (no anidable) estilo Guile + Pero se usan rara vez por parte de los Schemers y nunca dentro del + código fuente de LilyPond +!# +@end example + +Durante el resto de esta sección, supondremos que los datos se +introducen en un archivo de música, por lo que añadiremos almohadillas +@code{#} al principio de todas las expresiones de Scheme. + +Todas las expresiones de Scheme del nivel jerárquico superior dentro +de un archivo de entrada de LilyPond se pueden combinar en una sola +expresión de Scheme mediante la utilización del operador @code{begin}: + +@example +#(begin + (define fulanito 0) + (define menganito 1)) +@end example + + +@node Variables de LilyPond +@subsection Variables de LilyPond +@translationof LilyPond variables + +Las variables de LilyPond se almacenan internamente en la forma de +variables de Scheme. Así, + +@example +doce = 12 +@end example + +@noindent +equivale a + +@example +#(define doce 12) +@end example + +Esto significa que las variables de LilyPond están disponibles para su +uso dentro de expresiones de Scheme. Por ejemplo, podríamos usar + +@example +veintiCuatro = (* 2 doce) +@end example + +@noindent +lo que daría lugar a que el número 24 se almacenase dentro de la +variable @code{veintiCuatro} de LilyPond (y de Scheme). + +@node Variables de entrada y Scheme +@subsection Variables de entrada y Scheme +@translationof Input variables and Scheme + +El formato de entrada contempla la noción de variables: en el +siguiente ejemplo, se asigna una expresión musical a una variable con +el nombre @code{traLaLa}. + +@example +traLaLa = @{ c'4 d'4 @} +@end example + +@noindent + +También hay una forma de ámbito: en el ejemplo siguiente, el bloque +@code{\layout} también contiene una variable @code{traLaLa}, que es +independiente de la @code{\traLaLa} externa. + +@example +traLaLa = @{ c'4 d'4 @} +\layout @{ traLaLa = 1.0 @} +@end example + +@c +En efecto, cada archivo de entrada constituye un ámbito, y cada bloque +@code{\header}, @code{\midi} y @code{\layout} son ámbitos anidados +dentro del ámbito de nivel superior. + +Tanto las variables como los ámbitos están implementados en el sistema +de módulos de GUILE. A cada ámbito se adjunta un módulo anónimo de +Scheme. Una asignación de la forma: + +@example +traLaLa = @{ c'4 d'4 @} +@end example + +@noindent +se convierte internamente en una definición de Scheme: + +@example +(define traLaLa @var{Valor Scheme de `@code{... }'}) +@end example + +Esto significa que las variables de LilyPond y las variables de Scheme +se pueden mezclar con libertad. En el ejemplo siguiente, se almacena +un fragmento de música en la variable @code{traLaLa}, y se duplica +usando Scheme. El resultado se importa dentro de un bloque +@code{\score} por medio de una segunda variable @code{twice}: + +@lilypond[verbatim] +traLaLa = { c'4 d'4 } + +%% dummy action to deal with parser lookahead +#(display "this needs to be here, sorry!") + +#(define newLa (map ly:music-deep-copy + (list traLaLa traLaLa))) +#(define twice + (make-sequential-music newLa)) + +{ \twice } +@end lilypond + +@c Due to parser lookahead + +En este ejemplo, la asignación se produce después de que el analizador +sintáctico ha verificado que no ocurre nada interesante después de +@code{traLaLa = @{ ... @}}. Sin la sentencia muda del ejemplo +anterior, la definición de @code{newLa} se ejecuta antes de que se +defina @code{traLaLa}, produciendo un error de sintaxis. + +El ejemplo anterior muestra cómo @q{exportar} expresiones musicales +desde la entrada al intérprete de Scheme. Lo contrario también es +posible. Envolviendo un valor de Scheme en la función +@code{ly:export}, se interpreta un valor de Scheme como si hubiera +sido introducido en la sintaxis de LilyPond. En lugar de definir +@code{\twice}, el ejemplo anterior podría también haberse escrito como + +@example +... +@{ #(ly:export (make-sequential-music (list newLa))) @} +@end example + +El código de Scheme se evalúa tan pronto como el analizador sintáctico +lo encuentra. Para definir código de Scheme dentro de un macro (para +llamarse más tarde), utilice @ref{Funciones vacías}, o bien + +@example +#(define (nopc) + (ly:set-option 'point-and-click #f)) + +... +#(nopc) +@{ c'4 @} +@end example + +@knownissues + +No es posible mezclar variables de Scheme y de LilyPond con la opción +@code{--safe}. + + +@node Propiedades de los objetos +@subsection Propiedades de los objetos +@translationof Object properties + +Las propiedades de los objetos se almacenan en LilyPond en forma de +cadenas de listas-A, que son listas de listas-A. Las propiedades se +establecen añadiendo valores al principio de la lista de propiedades. +Las propiedades se leen extrayendo valores de las listas-A. + +El establecimiento de un valor nuevo para una propiedad requiere la +asignación de un valor a la lista-A con una clave y un valor. La +sintaxis de LilyPond para hacer esto es la siguiente: + +@example +\override Stem #'thickness = #2.6 +@end example + +Esta instrucción ajusta el aspecto de las plicas. Se añade una +entrada de lista-A @code{'(thickness . 2.6)} a la lista de propiedades +de un objeto @code{Stem}. @code{thickness} se mide a partir del +grosor de las líneas del pentagrama, y así estas plicas serán +@code{2.6} veces el grosor de las líneas del pentagrama. Esto hace +que las plicas sean casi el doble de gruesas de lo normal. Para +distinguir entre las variables que se definen en los archivos de +entrada (como @code{veintiCuatro} en el ejemplo anterior) y las +variables de los objetos internos, llamaremos a las últimas +@q{propiedades} y a las primeras @q{variables.} Así, el objeto plica +tiene una propiedad @code{thickness} (grosor), mientras que +@code{veintiCuatro} es una variable. + +@cindex propiedades frente a variables +@cindex variables frente a propiedades + +@c todo -- here we're getting interesting. We're now introducing +@c LilyPond variable types. I think this deserves a section all +@c its own + +@node Variables de LilyPond compuestas +@subsection Variables de LilyPond compuestas +@translationof LilyPond compound variables + +@subheading Desplazamientos + +Los desplazamientos bidimensionales (coordenadas X e Y) se almacenan +como @code{parejas}. El @code{car} del desplazamiento es la +coordenada X, y el @code{cdr} es la coordenada Y. + +@example +\override TextScript #'extra-offset = #'(1 . 2) +@end example + +Esto asigna la pareja @code{(1 . 2)} a la propiedad +@code{extra-offset} del objeto TextScript. Estos números se miden en +espacios de pentagrama, y así esta instrucción mueve el objeto un +espacio de pentagrama a la derecha, y dos espacios hacia arriba. + +Los procedimientos para trabajar con desplazamientos están en +@file{scm/lily-library.scm}. + +@subheading Dimensiones + +Las parejas se usan también para almacenar intervalos, que representan +un rango de números desde el mínimo (el @code{car}) hasta el máximo +(el @code{cdr}). Los intervalos se usan para almacenar las +dimensiones en X y en Y de los objetos imprimibles. Para dimensiones +en X, el @code{car} es la coordenada X de la parte izquierda, y el +@code{cdr} es la coordenada X de la parte derecha. Para las +dimensiones en Y, el @code{car} es la coordenada inferior, y el +@code{cdr} es la coordenada superior. + +Los procedimientos para trabajar con intervalos están en +@file{scm/lily-library.scm}. Se deben usar estos procedimientos +siempre que sea posible, para asegurar la consistencia del código. + +@subheading Listas-A de propiedades + +Una lista-A de propiedades es una estructura de datos de LilyPond que +es una lista-A cuyas claves son propiedades y cuyos valores son +expresiones de Scheme que dan el valor deseado de la propiedad. + +Las propiedades de LilyPond son símbolos de Scheme, como por ejemplo +@code{'thickness}. + +@subheading Cadenas de listas-A + +Una cadena de listas-A es una lista que contiene listas-A de +propiedades. + +El conjunto de todas las propiedades que se aplican a un grob se +almacena por lo general como una cadena de listas-A. Para poder +encontrar el valor de una propiedad determinada que debería tener un +grob, se busca por todas las listas-A de la cadena, una a una, +tratando de encontrar una entrada que contenga la clave de la +propiedad. Se devuelve la primera entrada de lista-A que se +encuentre, y el valor es el valor de la propiedad. + +El procedimiento de Scheme @code{chain-assoc-get} se usa normalmente +para obtener los valores de propiedades. + +@node Representación interna de la música +@subsection Representación interna de la música +@translationof Internal music representation + +Internamente, la música se representa como una lista de Scheme. La +lista contiene varios elementos que afectan a la salida impresa. El +análisis sintáctico es el proceso de convertir la música de la +representación de entrada de LilyPond a la representación interna de +Scheme. + +Cuando se analiza una expresión musical, se convierte en un conjunto +de objetos musicales de Scheme. La propiedad definitoria de un objeto +musical es que ocupa un tiempo. El tiempo que ocupa se llama +@emph{duración}. Las duraciones se expresan como un número racional +que mide la longitud del objeto musical en redondas. + +Un objeto musical tiene tres clases de tipos: +@itemize +@item +nombre musical: Cada expresión musical tiene un nombre. Por ejemplo, +una nota lleva a un @rinternals{NoteEvent}, y @code{\simultaneous} +lleva a una @rinternals{SimultaneousMusic}. Hay una lista de todas +las expresiones disponibles en el manual de Referencia de +funcionamiento interno, bajo el epígrafe @rinternals{Music +expressions}. + +@item +@q{type} (tipo) o interface: Cada nombre musical tiene varios +@q{tipos} o interfaces, por ejemplo, una nota es un @code{event}, pero +también es un @code{note-event}, un @code{rhythmic-event}, y un +@code{melodic-event}. Todas las clases de música están listadas en el +manual de Referencia de funcionamiento interno, bajo el epígrafe +@rinternals{Music classes}. + +@item +objeto de C++: Cada objeto musical está representado por un objeto de +la clase @code{Music} de C++. +@end itemize + +La información real de una expresión musical se almacena en +propiedades. Por ejemplo, un @rinternals{NoteEvent} tiene propiedades +@code{pitch} y @code{duration} que almacenan la altura y la duración +de esa nota. Hay una lista de todas la propiedades disponibles en el +manual de Referencia de funcionamiento interno, bajo el epígrafe +@rinternals{Music properties}. + +Una expresión musical compuesta es un objeto musical que contiene +otros objetos musicales dentro de sus propiedades. Se puede almacenar +una lista de objetos dentro de la propiedad @code{elements} de un +objeto musical, o un único objeto musical @q{hijo} dentro de la +propiedad @code{element}. Por ejemplo, @rinternals{SequentialMusic} +tiene su hijo dentro de @code{elements}, y @rinternals{GraceMusic} +tiene su argumento único dentro de @code{element}. El cuerpo de una +repetición se almacena dentro de la propiedad @code{element} de +@rinternals{RepeatedMusic}, y las alternativas dentro de +@code{elements}. + +@node Construir funciones complicadas +@section Construir funciones complicadas +@translationof Building complicated functions + +Esta sección explica cómo reunir la información necesaria para crear +funciones musicales complicadas. + +@menu +* Presentación de las expresiones musicales:: +* Propiedades musicales:: +* Duplicar una nota con ligaduras (ejemplo):: +* Añadir articulaciones a las notas (ejemplo):: +@end menu + + +@node Presentación de las expresiones musicales +@subsection Presentación de las expresiones musicales +@translationof Displaying music expressions + +@cindex almacenamiento interno +@cindex imprimir expresiones musicales +@cindex representación interna, impresión de +@cindex displayMusic +@funindex \displayMusic + +Si se está escribiendo una función musical, puede ser muy instructivo +examinar cómo se almacena internamente una expresión musical. Esto se +puede hacer con la función musical @code{\displayMusic} + +@example +@{ + \displayMusic @{ c'4\f @} +@} +@end example + +@noindent +imprime lo siguiente: + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) + (make-music + 'AbsoluteDynamicEvent + 'text + "f"))))) +@end example + +De forma predeterminada, LilyPond imprime estos mensajes sobre la +consola junto al resto de los mensajes. Para separar estos mensajes y +guardar el resultado de @code{\display@{LOQUESEA@}}, redirija la +salida a un archivo. + +@example +lilypond archivo.ly >salida.txt +@end example + +Con la aplicación de un poco de formateo, la información anterior es +fácil de leer, + +@example +(make-music 'SequentialMusic + 'elements (list (make-music 'EventChord + 'elements (list (make-music 'NoteEvent + 'duration (ly:make-duration 2 0 1 1) + 'pitch (ly:make-pitch 0 0 0)) + (make-music 'AbsoluteDynamicEvent + 'text "f"))))) +@end example + +Una secuencia musical @code{@{ ... @}} tiene el nombre +@code{SequentialMusic}, y sus expresiones internas se almacenan coma +una lista dentro de su propiedad @code{'elements}. Una nota se +representa como una expresión @code{EventChord} que contiene un objeto +@code{NoteEvent} (que almacena las propiedades de duración y altura) y +cualquier información adicional (en este caso, un evento +@code{AbsoluteDynamicEvent} con una propiedad @code{"f"} de texto. + + +@node Propiedades musicales +@subsection Propiedades musicales +@translationof Music properties + +@c TODO -- make sure we delineate between @emph{music} properties, +@c @emph{context} properties, and @emph{layout} properties. These +@c are potentially confusing. + +El objeto @code{NoteEvent} es el primer objeto de la propiedad +@code{'elements} de @code{someNote}. + +@example +someNote = c' +\displayMusic \someNote +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)))) +@end example + +La función @code{display-scheme-music} es la función que se usa por +parte de @code{\displayMusic} para imprimir la representación de +Scheme de una expresión musical. + +@example +#(display-scheme-music (first (ly:music-property someNote 'elements))) +===> +(make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) +@end example + +Después se accede a la altura de la nota a través de la propiedad +@code{'pitch} del objeto @code{NoteEvent}: + +@example +#(display-scheme-music + (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch)) +===> +(ly:make-pitch 0 0 0) +@end example + +La altura de la nota se puede cambiar estableciendo el valor de esta +propiedad @code{'pitch}, + +@funindex \displayLilyMusic + +@example +#(set! (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch) + (ly:make-pitch 0 1 0)) ;; establecer la altura a d'. +\displayLilyMusic \someNote +===> +d' +@end example + + +@node Duplicar una nota con ligaduras (ejemplo) +@subsection Duplicar una nota con ligaduras (ejemplo) +@translationof Doubling a note with slurs (example) + +Supongamos que queremos crear una función que convierte una entrada +como @code{a} en @code{a( a)}. Comenzamos examinando la +representación interna de la música con la que queremos terminar. + +@example +\displayMusic@{ a'( a') @} +===> +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + -1))) + (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + 1))))) +@end example + +Las malas noticias son que las expresiones @code{SlurEvent} se deben +añadir @q{dentro} de la nota (o para ser más exactos, dentro de la +expresión @code{EventChord}). + +Ahora examinamos la entrada, + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)))))) +@end example + +Así pues, en nuestra función, tenemos que clonar esta expresión (de +forma que tengamos dos notas para construir la secuencia), añadir +@code{SlurEvent} a la propiedad @code{'elements} de cada una de +ellas, y por último hacer una secuencia @code{SequentialMusic} con los +dos @code{EventChords}. + +@example +doubleSlur = #(define-music-function (parser location note) (ly:music?) + "Return: @{ note ( note ) @}. + `note' is supposed to be an EventChord." + (let ((note2 (ly:music-deep-copy note))) + (set! (ly:music-property note 'elements) + (cons (make-music 'SlurEvent 'span-direction -1) + (ly:music-property note 'elements))) + (set! (ly:music-property note2 'elements) + (cons (make-music 'SlurEvent 'span-direction 1) + (ly:music-property note2 'elements))) + (make-music 'SequentialMusic 'elements (list note note2)))) +@end example + + +@node Añadir articulaciones a las notas (ejemplo) +@subsection Añadir articulaciones a las notas (ejemplo) +@translationof Adding articulation to notes (example) + +La manera fácil de añadir articulación a las notas es mezclar dos +expresiones musicales en un solo contexto, como se explica en +@ruser{Crear contextos}. Sin embargo, supongamos que queremos +escribir una función musical que lo haga. + +Una @code{$variable} dentro de la notación @code{#@{...#@}} es como +una @code{\variable} normal en la notación clásica de LilyPond. +Sabemos que + +@example +@{ \music -. -> @} +@end example + +@noindent +no funciona en LilyPond. Podríamos evitar este problema adjuntando la +articulación a una nota falsa, + +@example +@{ << \music s1*0-.-> @} +@end example + +@noindent +pero a los efectos de este ejemplo, aprenderemos ahora cómo hacerlo en +Scheme. Empezamos examinando nuestra entrada y la salida deseada, + +@example +% input +\displayMusic c4 +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)))) +===== +% desired output +\displayMusic c4-> +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)) + (make-music + 'ArticulationEvent + 'articulation-type + "marcato"))) +@end example + +Vemos que una nota (@code{c4}) se representa como una expresión +@code{EventChord}, con una expresión @code{NoteEvent} en su lista de +elementos. Para añadir una articulación de marcato, se debe añadir +una expresión @code{ArticulationEvent} a la propiedad elements de la +expresión @code{EventChord}. + +Para construir esta función, empezamos con + +@example +(define (add-marcato event-chord) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +La primera línea es la forma de definir una función en Scheme: el +nombre de la función es @code{add-marcato}, y tiene una variable +llamada @code{event-chord}. En Scheme, el tipo de variable suele +quedar claro a partir de su nombre (¡esto también es una buena +práctica en otros lenguajes de programación!) + +@example +"Add a marcato..." +@end example + +@noindent +es una descripción de lo que hace la función. No es estrictamente +necesaria, pero de igual forma que los nombres claros de variable, es +una buena práctica. + +@example +(let ((result-event-chord (ly:music-deep-copy event-chord))) +@end example + +Se usa @code{let} para declarar las variables locales. Aquí usamos +una variable local, llamada @code{result-event-chord}, a la que le +damos el valor @code{(ly:music-deep-copy event-chord)}. +@code{ly:music-deep-copy} es una función específica de LilyPond, como +todas las funciones que comienzan por @code{ly:}. Se usa para hacer +una copia de una expresión musical. Aquí, copiamos @code{event-chord} +(el parámetro de la función). Recuerde que nuestro propósito es +añadir un marcato a una expresión @code{EventChord}. Es mejor no +modificar el @code{EventChord} que se ha dado como argumento, porque +podría utilizarse en algún otro lugar. + +Ahora tenemos un @code{result-event-chord}, que es una expresión +@code{NoteEventChord} y es una copia de @code{event-chord}. Añadimos +el marcato a su propiedad de la lista de @code{'elements}. + +@example +(set! lugar valor-nuevo) +@end example + +Aquí, lo que queremos establecer (el @q{lugar}) es la propiedad +@code{'elements} de la expresión @code{result-event-chord}. + +@example +(ly:music-property result-event-chord 'elements) +@end example + +@code{ly:music-property} es la función que se usa para acceder a las +propiedades musicales (los @code{'elements}, @code{'duration}, +@code{'pitch}, etc, que vimos en la salida de @code{\displayMusic} +anterior). El nuevo valor es la antigua propiedad @code{'elements}, +con un elemento adicional: la expresión @code{ArticulationEvent}, que +copiamos a partir de la salida de @code{\displayMusic}, + +@example +(cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements)) +@end example + +@code{cons} se usa para añadir un elemento a una lista sin modificar +la lista original. Esto es lo que queremos: la misma lista que antes, +más la expresión @code{ArticulationEvent} nueva. El orden dentro de +la propiedad @code{'elements} no es importante aquí. + +Finalmente, una vez hemos añadido la articulación marcato a su +propiedad @code{elements}, podemos devolver @code{result-event-chord}, +de ahí la última línea de la función. + +Ahora transformamos la función @code{add-marcato} en una función +musical: + +@example +addMarcato = #(define-music-function (parser location event-chord) + (ly:music?) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +Podemos verificar que esta función musical funciona correctamente: + +@example +\displayMusic \addMarcato c4 +@end example + + + + + + +@ignore +@menu +* Trucos con Scheme:: +@end menu + +@c @nod e Trucos con Scheme +@c @sectio n Trucos con Scheme +@translationof Tweaking with Scheme + +Hemos visto cómo la salida de LilyPond se puede modificar +profundamente usando instrucciones como @code{\override TextScript +#'extra-offset = ( 1 . -1)}. Pero tenemos incluso mucho más poder si +utilizamos Scheme. Para ver una explicación completa de esto, +consulte el @ref{Tutorial de Scheme}, y @ruser{Interfaces para programadores}. + +Podemos usar Scheme simplemente para sobreescribir instrucciones con +@code{\override}, + +TODO Find a simple example +@c This isn't a valid example with skylining +@c It works fine without padText -td +@end ignore + +@ignore +@lilypond[quote,verbatim,ragged-right] +padText = #(define-music-function (parser location padding) (number?) +#{ + \once \override TextScript #'padding = #$padding +#}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond +@end ignore + +@ignore +Lo podemos usar para crear instrucciones nuevas: + +@c Check this is a valid example with skylining +@c It is - 'padding still works + + +@lilypond[quote,verbatim,ragged-right] +tempoPadded = #(define-music-function (parser location padding tempotext) + (number? string?) +#{ + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } +#}) + +\relative c'' { + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 +} +@end lilypond + + +Incluso se le pueden pasar expresiones musicales: + +@lilypond[quote,verbatim,ragged-right] +pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) +#{ + $x e8 a b $y b a e +#}) + +\relative c''{ + \pattern c8 c8\f + \pattern {d16 dis} { ais16-> b\p } +} +@end lilypond +@end ignore diff --git a/Documentation/es/included/GNUmakefile b/Documentation/es/included/GNUmakefile new file mode 100644 index 0000000000..afe7a4d738 --- /dev/null +++ b/Documentation/es/included/GNUmakefile @@ -0,0 +1,10 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation + +EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) +EXTRA_DIST_FILES+=$(call src-wildcard,*.ily) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itely) + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/included/generating-output.itexi b/Documentation/es/included/generating-output.itexi new file mode 100644 index 0000000000..527bcb0a3d --- /dev/null +++ b/Documentation/es/included/generating-output.itexi @@ -0,0 +1,242 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@c This file is part of web/download.itexi and +@c learning/tutorial.itely + +@ignore + Translation of GIT committish: fe2cae0fa47ec4ec0184e6b3d15572fbcba881cf + + 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 This is about "compiling" a lilypond file +@c (Learning 1 Tutorial), **not** compiling the +@c source code. + +@macro lilypadOSX +@warning{Estas instrucciones dan por sentado que está usando la propia +aplicación LilyPond. Si está usando alguno de los programas que se +describen en @rweb{Entornos mejorados}, debe consultar la +documentación de estos programas si se encuentra con algún problema.} + + +@subsubheading Paso 1. Creamos nuestro archivo @file{.ly} + +Haga doble clic sobre @command{LilyPond.app}, se abrirá un archivo de +ejemplo. + +@sourceimage{Learning_Macos_welcome,,,} + +Del menú de la parte superior izquierda de la pantalla, elija +@w{@code{Archivo > Guardar}}. + +@sourceimage{Learning_Macos_Save_menu,,,} + +ELija un nombre para su archivo, por ejemplo @file{prueba.ly}. + +@sourceimage{Learning_Macos_Save_file_with_name,,,} + + +@subsubheading Paso 2. Compilamos (con LilyPad) + +Del mismo menú, elija +@w{@code{Compilar > Procesar}}. + +@sourceimage{Learning_Macos_Typeset_menu,,,} + +Se abrirá una ventana que muestra un registro del progreso de la +compilación del archivo que acaba de guardar. + +@sourceimage{Learning_Macos_Compiling_log,,,} + + +@subsubheading Paso 3. Examinar el resultado + +Una vez la compilación ha terminado, se crea un archivo PDF con +el mismo nombre que el archivo original y se abrirá +automáticamente en el visor de documentos PDF predeterminado, +mostrándose en la pantalla. + +@sourceimage{Learning_Macos_pdf_output,,,} + + +@subsubheading Otras instrucciones + +Para crear archivos de LilyPond nuevos, comience seleccionando +@w{@code{Archivo > Nuevo}} + +@sourceimage{Learning_Macos_New_menu,,,} + +o bien @w{@code{Archivo > Abrir}} para abrir y editar archivos existentes +que haya guardado previamente. + +@sourceimage{Learning_Macos_Open_menu,,,} + +Debe guardar cualquier e modificación que haya realizado sobre el +archivo, antes de @w{@code{Compilar > Procesar}} y siempre que el PDF +no se muestre en pantalla debe comprobar que no haya errores en la +ventana que contiene el registro del progreso. + +Si no está utilizando el visor de documentos predeterminado que viene +con el sistema operativo del Mac, y tiene abierto el archivo PDF +generado a partir de una compilación previa, cualquier compilación +ulterior puede fallar al intentar generar un PDF actualizado hasta que +cierre el original. + +@end macro + + +@macro lilypadWindows +@warning{Estas instrucciones dan por sentado que está utilizando el +editor LilyPad incorporado. Si está usando alguno de los programas +que se describen en el apartado @rweb{Entornos mejorados}, consulte la +documentación de estos programas cuando encuentre algún problema +durante la compilación de un archivo.} + + +@subsubheading Paso 1. Creamos el archivo @file{.ly} + +Haga doble clic sobre el icono de LilyPond del escritorio +y se abrirá un archivo de ejemplo. + +@sourceimage{Learning_Win7_Welcome_File_Whole,,,} + +Del menú de la ventana que contiene el archivo de ejemplo, elija +@w{@code{Archivo > Guardar como}}. No use @w{@code{Archivo > Guardar}} +para este archivo de ejemplo porque no funcionará hasta que le aplique +un nombre de LilyPond válido. + +@sourceimage{Learning_Win7_Save_Menu,,,} + +Escoja un nombre para el archivo, por ejemplo @file{prueba.ly}. + +@sourceimage{Learning_Win7_Save_File_With_Name,,,} + + +@subsubheading Paso 2-A. Compílelo (arrastrando y soltando) + +Según su preferencia, para compilar el documento puede hacer una de +estas dos cosas: + +Arrastre el archivo y suéltelo directamente encima del icono de +LilyPond. + +@sourceimage{Learning_Win7_Open_Dragndrop,,,} + +Pulse con el botón derecho sobre el archivo y elija @w{@code{Abrir con +> LilyPond}} del menú contextual emergente. + +@sourceimage{Learning_Win7_Open_Context_Menu,,,} + + +@subsubheading Paso 2-B. Compílelo (con doble clic) + +O simplemente haga doble clic sobre el archivo @file{prueba.ly}. + + +@subsubheading Paso 3. Examinar el resultado + +Durante la compilación del archivo @file{prueba.ly}, se abrirá muy +brevemente una ventana de la consola y luego se cerrará. Durante este +proceso se habrán creado tres archivos adicionales: + +@sourceimage{Learning_Win7_All_Files_Created,,,} + +El archivo PDF contiene el documento @file{prueba.ly} convertido en +una partitura musical. + +@sourceimage{Learning_Win7_Pdf_Output,,,} + + +@subsubheading Otras instrucciones + +Para crear un archivo nuevo, comience eligiendo @w{@code{Archivo > Nuevo}} +desde dentro de algún archivo creado previamente. + +@sourceimage{Learning_Win7_New_Menu,,,} + +@noindent +o bien, elija @w{@code{Archivo > Abrir}} para abrir y editar cualquier +archivo que haya guardado antes. + +@sourceimage{Learning_Win7_Open_Menu,,,} + +Debe guardar cualquier edición que haya realizado sobre el archivo +antes de compilarlo, y si no se ha creado un PDF, deberá comprobar el +archivo @command{log} de registro que se ha creado durante el intento +de compilación, en busca de algún error. + +@sourceimage{Learning_Win7_Log_File,,,} + +Este archivo de registro se sobreescribe cada vez que compilamos un +archivo de LilyPond. + +El archivo PS se utiliza internamente por parte de LilyPond para crear +el archivo PDF, y se puede ignorar. También se sobreescribe cada vez +que compilamos nuestro documento. + +Si estamos viendo el archivo en un visor de documentos PDF, tiene que +cerrar el PDF cuando quiera realizar una compilación nueva, porque +podría fallar la creación del PDF nuevo mientras se está viendo con +algún programa. + + +@end macro + + +@c not lilypad at all, but I ran out of names. :( +@macro lilypadCommandLine +@warning{Estas instrucciones dan por sentado que usted está +familiarizado con los programas en línea de órdenes, o programas de +consola. Si está utilizando alguno de los programas que se describen +en @rweb{Entornos mejorados}, consulte la documentación de estos +programas cuando tenga algún problema al compilar un documento.} + + +@subsubheading Paso 1. Creamos el archivo @file{.ly} + +Haga un archivo de texto con el nombre +@file{prueba.ly} y escriba en él lo siguiente: + +@c double \\ required because this is inside a macro! +@example +\\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + + +@subsubheading Paso 2. Compilación (con la línea de órdenes) + +Para procesar el archivo @file{prueba.ly} escriba lo siguiente en la +línea de órdenes: + +@example +lilypond prueba.ly +@end example + +@noindent +Verá algo parecido a: + +@example +GNU LilyPond @version{} +Procesando `prueba.ly' +Analizando... +Interpretando la música... +Preprocesando los objetos gráficos... +Buscando el número de páginas ideal... +Disponiendo la música en 1 página... +Dibujando los sistemas... +Escribiendo la página de salida en `prueba.ps'... +Convirtiendo a `prueba.pdf'... +@end example + +@subsubheading Paso 3: Examinar el resultado + +Podemos ver o imprimir el archivo @file{prueba.pdf} resultante. + +@end macro + + diff --git a/Documentation/es/included/helpus.itexi b/Documentation/es/included/helpus.itexi new file mode 100644 index 0000000000..2b63fcc259 --- /dev/null +++ b/Documentation/es/included/helpus.itexi @@ -0,0 +1,162 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@c This file is part of web/community.itexi and +@c contributor/introduction.itely + +@ignore + Translation of GIT committish: 49d3a287160de19e29031b34c6307982d6ad9c9b + + 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 + +@macro helpusNeed +@subheading ¡Le necesitamos! + +El equipo de desarrollo de LilyPond es muy pequeño; verdaderamente nos +gustaría tener a más gente implicada. ¡Considere la posibilidad de +ayudar a sus colegas usuarios de LilyPond mediante contribuciones +al programa! + +Incluso el trabajo sobre pequeñas tareas puede tener un gran impacto: +ocuparse de ellas permite a los desarrolladores con experiencia +trabajar sobre las tareas avanzadas, en lugar de emplear su tiempo en +esos trabajos sencillos. + +@end macro + + +@macro helpusTasks +@subheading Tareas sencillas + +¡No son necesarios el código fuente ni la compilación! + +@itemize +@item +Apoyo en la lista de distribución de correo: responda las preguntas de +sus colegas usuarios. + +@item +Informar de fallos: ayude a los usuarios a crear @ref{Informes de +fallos} adecuados, y/o apúntese al Escuadrón de Fallos para +la organización de los @rcontribnamed{Issues,Problemas}. + +@item +Documentación: se pueden proponer cambios pequeños siguiendo las +indicaciones de @rcontribnamed{Documentation suggestions,Sugerencias +para la documentación}. + +@item +El Repositorio de Fragmentos de Código (LSR): elabore y arregle +fragmentos de código siguiendo las directrices que aparecen en +@rcontribnamed{Adding and editing snippets,Añadir y editar fragmentos de código}. + +@item +Discusión, revisión y pruebas: los desarrolladores suelen solicitar un +retorno sobre documentación nueva, potenciales cambios de sintaxis y +prueba de nuevas funcionalidades. ¡Contribuya a estas discusiones! + +@end itemize + +@subheading Tareas de nivel avanzado + +En general, estos trabajos requieren que usted tenga el +código fuente y sea capaz de compilar LilyPond. + +@warning{Sugerimos a los colaboradores nuevos que sean usuarios de Windows +o de MacOS X que @strong{no} traten de montar un entorno de desarrollo +por ellos mismos; en su lugar, utilice Lilydev como se explica en +@rcontribnamed{Quick start,Inicio rápido}.} + +Los colaboradores que utilicen Linux o FreeBSD también pueden usar +Lilydev, pero si prefieren tener su propio entorno de desarrollo, +deberían leer +@rcontribnamed{Working with source code,Trabajar con el código fuente} +y @rcontribnamed{Compiling,Compilación}. + +@itemize +@item +Documentación: para cambios grandes, consulte +@rcontribnamed{Documentation work,Trabajar en la documentación}. + +@item +Página web: nuestra página se construye a partir del código fuente +normal de la documentación. Consulte la información sobre la +documentación, y también @rcontribnamed{Website work,Trabajar en la +página web}. + +@item +Traducciones: consulte @rcontribnamed{Translating the +documentation,Traducir la documentación} y @rcontribnamed{Translating +the website,Traducir la página web}. + +@item +Corrección de fallos o funcionalidades nuevas: la mejor forma de +comenzar es unirse a los cazadores de bugs, los Frogs, y leer +@rcontribnamed{Programming work,Trabajos de programación}. + +@end itemize + +@end macro + + +@macro helpusProjects +@subheading Proyectos + +@subsubheading Frogs + +Página y lista de distribución de correo: + +@example +@uref{http://frogs.lilynet.net} +@end example + +Los Frogs son usuarios de LilyPond normales que voluntariamente se +implican en el desarrollo de su programa favorito. Arreglar fallos, +implementar funcionalidades nuevas, documentar el código fuente: es +mucho lo que hay que hacer, pero lo principal es: hay una oportunidad +para todos de aprender más sobre LilyPond, sobre el Software Libre, +sobre programación... y pasarlo bien. Si siente curiosidad sobre +cualquiera de ellos, el lema es: @emph{Join the Frogs!} + + + +@subsubheading El proyecto GLISS (Grand LilyPond Input Syntax Standardization) + +Página web: +@rcontrib{Grand LilyPond Input Syntax Standardization (GLISS)}. + +GLISS estabilizará la sintaxis del código de entrada, sin trucajes, +para el advenimiento de LilyPond 3.0. Después de la actualización a +3.0, la sintaxis de entrada para música sin trucajes, permanecerá +estable durante un futuro previsible. + +Habrá un amplio período de discusión para determinar la especificación +final de la entrada. + +@warning{El proyecto GLISS dará comienzo poco después del lanzamiento +de la versión 2.14.} + +@subsubheading El proyecto GOP (Grand Organizing Project) + +Página web: @rcontrib{Grand Organization Project (GOP)}. + +El GOP es nuestro gran proyecto de reclutamiento de nuevos +colaboradores. Necesitamos desesperadamente ampliar las tareas de +desarrollo (¡incluidas las @qq{tareas sencillas} que no requieren +programación ni interacción con el código fuente!) a un grupo mayor de +personas. También necesitamos documentar el conocimiento de los +desarrolladores existentes de manera que no se pierda. + +A diferencia de la mayoría de los @qq{Grandes Proyectos}, el GOP no se +va a ocupar de añadir un montón de funcionalidades nuevas o rediseñar +cosas completamente. Más bien está orientado a proporcionarnos una +base mucho más estable de forma que podamos afrontar mayores tareas en +el futuro. + +@warning{El proyecto GOP dará comienzo poco después del +lanzamiento de la versión 2.14.} + +@end macro + + diff --git a/Documentation/es/index.html.in b/Documentation/es/index.html.in deleted file mode 100644 index d70eb33780..0000000000 --- a/Documentation/es/index.html.in +++ /dev/null @@ -1,143 +0,0 @@ - - - - Documentación de LilyPond versión @TOPLEVEL_VERSION@ - - - - - - - -
-

Documentación de LilyPond

-
- -
-

- Versión @TOPLEVEL_VERSION@ -
- @DATE@ -

-
- - - - - - - - - - - - - - - - - - - - - - - - -

- Toda la documentación que puede leer desde estas páginas - está disponible para su descarga. - Descargar - el tarball. -

-

Como en todas las páginas HTML de esta documentación, en la - parte de abajo tiene enlaces a - las traducciones de esta página a otros - idiomas. -

- - diff --git a/Documentation/es/learning.tely b/Documentation/es/learning.tely new file mode 100644 index 0000000000..6241e00812 --- /dev/null +++ b/Documentation/es/learning.tely @@ -0,0 +1,84 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-learning.info +@settitle Manual de aprendizaje de GNU LilyPond +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@macro manualIntro +Este archivo ofrece una introducción al programa LilyPond versión +@version{}. +@end macro + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 por los autores. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Learning Manual of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Spanish +@end ignore + +@c Translators: Francisco Vila + +@lilyTitlePage{Manual de aprendizaje} + +@c TOC -- non-tex +@ifnottex + +@menu +* Tutorial:: Fundamentos de la tipografía musical con LilyPond. +* Notación corriente:: Escribir notación muy común. +* Conceptos fundamentales:: Conceptos básicos necesarios para leer el resto de los manuales. +* Trucar la salida:: Introducción a la modificación de la salida. + +Apéndices + +* Plantillas:: Plantillas listas para usar. +* GNU Free Documentation License:: Licencia de este documento. +* Índice de LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@c TOC - tex +@contents + +@allowcodebreaks false + +@c INCLUDES + +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely + +@include learning/templates.itely +@include fdl.itexi + +@node Índice de LilyPond +@appendix Índice de LilyPond +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/es/learning/GNUmakefile b/Documentation/es/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/es/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/learning/common-notation.itely b/Documentation/es/learning/common-notation.itely new file mode 100644 index 0000000000..3a310e7669 --- /dev/null +++ b/Documentation/es/learning/common-notation.itely @@ -0,0 +1,1527 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 463240fdfd30e9bd60238b246114e5d27319d6d5 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + +@ignore +Tutorial guidelines: (different from policy.txt!) +- unless you have a really good reason, use either + @lilypond[verbatim,quote] + or + @lilypond[verbatim,quote,relative=2] + + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "es". I know it's not + correct Dutch naming, but let's not confuse people with this + until we get to the Basic notation chapter. + +- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant + portions of the tutorial. + +@end ignore + + +@node Notación corriente +@chapter Notación corriente +@translationof Common notation + +Este capítulo explica cómo crear hermosas partituras que contengan +notación musical común, como continuación al material que está en el +@ref{Tutorial}. + +@menu +* Notación en un solo pentagrama:: +* Varias notas a la vez:: +* Canciones:: +* Retoques finales:: +@end menu + + +@node Notación en un solo pentagrama +@section Notación en un solo pentagrama +@translationof Single staff notation + +Esta sección presenta la notación común que se utiliza para música a +una voz sobre un pentagrama único. + +@menu +* Comprobaciones de compás:: +* Alteraciones accidentales y armaduras:: +* Ligaduras de unión y de expresión:: +* Articulaciones y matices dinámicos:: +* Añadir texto:: +* Barras automáticas y manuales:: +* Instrucciones rítmicas avanzadas:: +@end menu + + +@node Comprobaciones de compás +@subsection Comprobaciones de compás +@translationof Bar checks + +Aunque no es estrictamente necesario, es coneniente utilizar +@emph{comprobaciones de compás} dentro del código de entrada para +indicar dónde se supone que van las líneas divisorias. Se introducen +mediante el caráter de barra vertical, @code{|} (AltGr - 1 en el +teclado español). Con las comprobaciones de compás, el programa puede +verificar que hemos introducido las duraciones que completan los +compases correctamente. Las comprobaciones de compás también hacen +que el código de entrada sea más fácil de leer, porque ayudan a +organizar el material. + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +Referencia de la notación: +@ruser{Comprobación de compás y de número de compás}. + + +@node Alteraciones accidentales y armaduras +@subsection Alteraciones accidentales y armaduras +@translationof Accidentals and key signatures + + +@warning{Con frecuencia, los nuevos usuarios se encuentran confundidos +por las alteraciones accidentales: le rogamos que lea la advertencia +que aparece al final de esta sección, ¡especialmente si no está +familiarizado con la teoría musical!} + +@subheading Alteraciones accidentales + +@cindex accidentales, alteraciones +@cindex alteraciones +@cindex alteraciones y armaduras +@cindex sostenido +@cindex doble sostenido +@cindex sostenido, doble +@cindex bemol +@cindex doble bemol +@cindex bemol, doble + +@funindex es +@funindex is +@funindex eses +@funindex isis + +Glosario musical: +@rglos{sharp}, +@rglos{flat}, +@rglos{double sharp}, +@rglos{double flat}, +@rglos{accidental}. + +Una nota con @notation{sostenido} se hace añadiendo @code{is} al +nombre, y una nota @notation{bemol} añadiendo @code{es}. Como ha +podido adivinar, un @notation{doble sostenido} o @notation{doble +bemol} se hace añadiendo @code{isis} o @code{eses}. Esta sintaxis se +deriva de las convenciones de nomenclatura de las notas en las lenguas +nórdicas y germánicas como el alemán y el holandés. Para utilizar +otros nombres para las @notation{alteraciones accidentales}, véase +@ruser{Nombres de las notas en otros idiomas}. + +@lilypond[verbatim,quote,relative=2] +cis4 ees fisis, aeses +@end lilypond + +@cindex tonalidad, armadura de la, establecer +@subheading Armaduras + +@cindex tonalidad, armadura de +@cindex armadura +@cindex mayor +@cindex menor +@cindex alteraciones y armadura +@cindex contenido frente a presentación +@cindex presentación frente a contenido + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +Glosario musical: +@rglos{key signature}, +@rglos{major}, +@rglos{minor}. + +La @notation{armadura de la tonalidad} se establece mediante la +instrucción @code{\key} seguido de una nota y @code{\major} o +@code{\minor}. + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 | +\key c \minor +a1 | +@end lilypond + +@smallspace + +@subheading Advertencia: armaduras y alturas + +Glosario musical: +@rglos{accidental}, +@rglos{key signature}, +@rglos{pitch}, +@rglos{flat}, +@rglos{natural}, +@rglos{sharp}, +@rglos{transposition}, +@rglos{Pitch names}. + +Para determinar si hay que imprimir una @notation{alteración +accidental}, LilyPond examina las notas y la @notation{armadura de la +tonalidad}. La armadura solamente afecta a las alteraciones +@emph{impresas}, ¡no a las propias notas! Esta funcionalidad suele +confundir a los que están empezando con el programa, por ello +permítanos explicarla en detalle. + +LilyPond hace una clara distinción entre el contenido musical y la +presentación. La alteración (@notation{bemol}, @notation{becuadro} o +@notation{sostenido}) de una nota es parte de la altura, y por tanto +es contenido musical. Si una alteración (un signo @emph{impreso} de +bemol, becuadro o sostenido) se imprime o no delante de la nota +correspondiente, es una cuestión de presentación. La presentación es +algo que sigue unas reglas, así que las alteraciones accidentales se +imprimen automáticamente según dichas reglas. Las alturas de las +notas en su música son obras de arte, por tanto no se añadirán +automáticamente, y usted deberá introducir aquello que quiera oír. + +En el siguiente ejemplo: + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +Ninguna nota lleva una alteración impresa, pero de todas formas usted +debe escribir el @code{is} a @code{cis} y a @code{fis} en el archivoo +de entrada. + +El texto @code{b} no significa @qq{imprimir una bolita negra en la +tercera línea del pentagrama.} Más bien significa: @qq{hay una nota +Si natural.} En la tonalidad de La bemol mayor, @emph{lleva} una +alteración accidental: + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +Si se encuentra confundido por lo anterior, piense en lo siguiente: si +estuvises tocando un piano, ¿qué tecla pulsaría? Si se tratase de una +tecla negra, entonces ¡@emph{tiene que} añadir @code{-is} ó @code{-es} +al nombre de la nota! + +Poner todas las alteraciones de forma explícita puede que requiera +algo más de trabajo al teclear, pero la ventaja es que la +@notation{transposición} es más fácil, y las alteraciones se pueden +imprimir siguiendo varias convenciones distintas. Consulte +@ruser{Alteraciones accidentales automáticas} para ver ejemplos de +cómo se pueden imprimir las alteraciones de acuerdo a reglas +diferentes. + + +@seealso +Referencia de la notación: +@ruser{Nombres de las notas en otros idiomas}, +@ruser{Alteraciones accidentales}, +@ruser{Alteraciones accidentales automáticas}, +@ruser{Armadura de la tonalidad}. + + +@node Ligaduras de unión y de expresión +@subsection Ligaduras de unión y de expresión +@translationof Ties and slurs + +@cindex ligadura de unión +@cindex ligadura de expresión +@cindex ligadura de fraseo +@cindex fraseo, ligadura de + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + +@subheading Ligaduras de unión + +Glosario musical: +@rglos{tie}. + +Una @notation{ligadura de unión} se crea adjuntando un carácter de +tilde curva @code{~} a la primera nota ligada: + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4~ c8 a~ a2 | +@end lilypond + +@subheading Ligaduras de expresión + +Glosario musical: +@rglos{slur}. + +Una @notation{ligadura de expresión} es una curva que se traza +abarcando varias notas. Las notas inicial y final se marcan mediante +@code{(} y @code{)} respectivamente. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@subheading Ligaduras de fraseo + +Glosario musical: +@rglos{slur}, +@rglos{phrasing}. + +Las ligaduras que se utilizan para indicar @notation{fraseos} más +largos se pueden introducir mediante @code{\(} y @code{\)}. Puede +haber al mismo tiempo ligaduras de legato y ligaduras de fraseo, pero +no es posible tener legatos simultáneos o ligaduras de expresión +simultáneas. + +@lilypond[verbatim,quote,relative=2] +g4\( g8( a) b( c) b4\) +@end lilypond + +@smallspace + +@cindex ligaduras de expresión frente a ligaduras de unión +@subheading Advertencias: ligaduras de expresión frente a ligaduras de unión + +Glosario musical: +@rglos{articulation}, +@rglos{slur}, +@rglos{tie}. + +Una @notation{ligadura de expresión} parece una @notation{ligadura de +unión}, pero tiene un significado distinto. Una ligadura (de unión) +sencillamente hace que la primera nota sea más larga, y sólo se puede +utilizar sobre parejas de notas iguales. Las ligaduras de expresión +indican la @notation{articulación} de las notas, y se pueden utilizar +sobre grupos mayores de notas. Las ligaduras de unión y de expresión +se pueden anidar unas dentro de otras. + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Ligaduras de unión}, +@ruser{Ligaduras de expresión}, +@ruser{Ligaduras de fraseo}. + + +@node Articulaciones y matices dinámicos +@subsection Articulaciones y matices dinámicos +@translationof Articulation and dynamics + +@subheading Articulaciones + +@cindex articulación +@cindex acento +@cindex staccato + +Glosario musical: +@rglos{articulation}. + +Las @notation{articulaciones} más corrientes se pueden añadir a las +notas utilizando un guión @code{-} seguido de un carácter único: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +@subheading Digitaciones + +@cindex digitaciones + +@funindex ^ +@funindex _ + +Glosario musical: +@rglos{fingering}. + +De manera similar, las @notation{digitaciones} se pueden añadir a una +nota utilizando un guión (@code{-}) seguido del dígito deseado: + +@lilypond[verbatim,quote,relative=2] +c4-3 e-5 b-2 a-1 +@end lilypond + +Las articulaciones y digitaciones normalmente se colocan de forma +automática, pero puede especificar una dirección mediante @code{^} +(encima) o @code{_} (debajo). También puede usar varias +articulaciones sobre la misma nota. Sin embargo, casi siempre es +mejor dejar que LilyPond determine la dirección de las articulaciones. + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Matices dinámicos + +@cindex dinámica, indicaciones de +@cindex matices +@cindex decrescendo +@cindex crescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Glosario musical: +@rglos{dynamics}, +@rglos{crescendo}, +@rglos{decrescendo}. + +Las expresiones de @notation{matiz} o signos dinámicos se hacen +añadiendo las marcas (con una barra invertida) a la nota: + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + +Los @notation{crescendi} y @notation{decrescendi} comienzan con las +órdenes @code{\<} y @code{\>}. La siguiente indicación de matiz, como +por ejemplo @code{\f}, dará por terminado el (de)crescendo, o bien se +puede usar la instrucción @code{\!}: + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Articulaciones y ornamentos}, +@ruser{Indicaciones de digitación}, +@ruser{Matices dinámicos}. + + +@node Añadir texto +@subsection Añadir texto +@translationof Adding text + +@cindex texto, añadir +@cindex añadir texto +@cindex marcado + +@funindex \markup +@funindex markup + +Es posible añadir texto a la partitura: + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +Se puede aplicar un formateo adicional mediante la instrucción +@code{\markup}: + +@lilypond[verbatim,quote,relative=2] +c2^\markup { \bold espr } +a2_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Escritura del texto}. + + +@node Barras automáticas y manuales +@subsection Barras automáticas y manuales +@translationof Automatic and manual beams + +@cindex barras de corchea +@cindex barrado +@cindex automáticas, barras +@cindex manuales, barras +@cindex barras automáticas +@cindex barras manuales + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Glosario musical: +@rglos{beam}. + +Todas las @notation{barras} de las figuras se dibujan automáticamente: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@end lilypond + +Si no le gustan las barras automáticas, pueden forzarse manualmente. +Marque la primera nota que comprende la barra con @code{[} y la última +con @code{]}. + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +Si quiere desactivar completamente el barrado automático o para una +sección extensa de música, utilice la instrucción @code{\autoBeamOff} +para apagarlo y @code{\autoBeamOn} para activarlo de nuevo. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Barras automáticas}, +@ruser{Barras manuales}. + + +@node Instrucciones rítmicas avanzadas +@subsection Instrucciones rítmicas avanzadas +@translationof Advanced rhythmic commands + +@subheading Compás parcial + +@cindex anacrusa +@cindex compás parcial + +@funindex \partial +@funindex partial + +Glosario musical: +@rglos{anacrusis}. + +Una @notation{anacrusa} se introduce con la palabra clave +@code{\partial}. Va seguida de una duración: @code{\partial 4} es una +anacrusa de negra y @code{\partial 8} de corchea. + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + +@subheading Grupos especiales + +@cindex grupos especiales +@cindex tresillos + +@funindex \times +@funindex times + +Glosario musical: +@rglos{note value}, +@rglos{triplet}. + +Los grupos especiales como los tresillos se hacen con la palabra clave +@code{\times}. Requiere dos argumentos: una fracción y un fragmento +de música. La duración del fragmento de música se multiplica por la +fracción. Los tresillos hacen que las notas ocupen 2/3 de su duración +expresa, por tanto un @notation{tresillo} lleva una fracción de 2/3: + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Notas de adorno + +@cindex notas de adorno +@cindex acciaccatura +@cindex appoggiatura + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Glosario musical: +@rglos{grace notes}, +@rglos{acciaccatura}, +@rglos{appoggiatura}. + +Las @notation{notas de adorno} se crean con la instrucción +@code{\grace}, aunque también se pueden conseguir precediendo una +expresión musical por la palabra clave @code{\appoggiatura} o +@code{\acciaccatura} + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Notas de adorno}, +@ruser{Grupos especiales}, +@ruser{Anacrusas}. + + +@node Varias notas a la vez +@section Varias notas a la vez +@translationof Multiple notes at once + +Esta sección es una introducción a las notas simultáneas: varios +instrumentos, varios pentagramas para un solo instrumento +(p.ej. piano) y acordes. + +La palabra @qq{polifonía} en música hace referencia al hecho de tener +más de una voz en un momento determinado dentro de una pieza musical. +La palabra @qq{polifonía} en LilyPond se refiere al hecho de tener más +de una voz en el mismo pentagrama. + +@menu +* Explicación de las expresiones musicales:: +* Varios pentagramas:: +* Grupos de pentagramas:: +* Combinar notas para formar acordes:: +* Polifonía en un solo pentagrama:: +@end menu + + +@node Explicación de las expresiones musicales +@subsection Explicación de las expresiones musicales +@translationof Music expressions explained + +@cindex musical, expresión +@cindex expresión musical +@cindex compuesta, expresión musical +@cindex musical, expresión, compuesta + +En los archivos de entrada de LilyPond, la música se representa +mediante @emph{expresiones musicales}. Una sola nota es una expresión +musical: + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +Al encerrar un grupo de notas dentro de llaves creamos una +@emph{expresión musical compuesta}. Aquí hemos creado una expresión +musical compuesta con dos notas: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +Si colocamos un grupo de expresiones musicales (p.ej.: notas) dentro +de llaves, eso significa que se encuentran en secuencia (es decir, +cada una sigue a la anterior). El resultado es otra expresión +musical: + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f4 g } +@end lilypond + +@subheading Analogía: expresiones matemáticas + +Este mecanismo es semejante a las fórmulas matemáticas: una fórmula +grande se construye combinando fórmulas pequeñas. Dichas fórmulas se +llaman expresiones, y su definición es recursiva de tal forma que se +pueden construir expresiones de un tamaño y complejidad arbitrarios. +Por ejemplo: + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +Ésta es una secuencia de expresiones donde cada expresión se encuentra +contenida dentro de la siguiente, más grande. Las expresiones más +simples son números, y las mayores se hacen combinando expresiones +mediante operadores (como @code{+}, @code{*} y @code{/}) y paréntesis. +Del mismo modo que las expresiones matemáticas, las expresiones +musicales se pueden anidar a una profundidad arbitraria, lo que se +hace necesario para músicas complejas como las partituras polifónicas. + + +@subheading Expresiones musicales simultáneas: varios pentagramas + +@cindex varios pentagramas +@cindex pentagramas, varios +@cindex polifonía +@cindex combinar expresiones en paralelo +@cindex paralelas, expresiones +@cindex expresiones paralelas +@cindex relativo, modo, música simultánea y +@cindex relativo, modo, expresiones paralelas y +@cindex simultánea, música, modo relativo y +@cindex paralelas, expresiones, modo relativo y + +@funindex << +@funindex >> +@funindex << ... >> + +Glosario musical: +@rglos{polyphony}. + +Esta técnica es muy útil para la música @notation{polifónica}. Para +introducir música con más voces o con más pentagramas, lo que hacemos +es combinar varias expresiones en paralelo. Para indicar que dos +voces se deben interpretar al mismo tiempo, sencillamente introduzca +una combinación simultánea de expresiones musicales. Una expresión +musical @q{simultánea} se forma encerrando las expresiones dentro de +@code{<<} y @code{>>}. En el ejemplo que sigue, tres secuencias (cada +una de las cuales contiene dos notas diferentes) se combinan de forma +simultánea: + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +Tenga en cuenta que hemos sangrado cada nivel jerárquico de la entrada +con un margen distinto. A LilyPond no le importa cuánto (o cuán poco) +espacio haya al comienzo de una línea, pero el establecimiento de +márgenes distintos dentro del código de LilyPond, de esta forma, lo +hace mucho más fácil de leer por nosotros los seres humanos. + +@warning{Cada nota se entiende relativa a la nota anterior de la +entrada, no relativa a la @code{c''} dentro de la instrucción inicial +@code{@bs{}\relative}.} + + +@subheading Expresiones musicales simultáneas: un solo pentagrama + +Para determinar el número de pentagramas en una pieza, LilyPond +examina el comienzo de la primera expresión. Si hay una sola nota, +hay un solo pentagrama; si hay una expresión simultánea, hay más de un +pentagrama. El siguiente ejemplo presenta una expresión compleja, +pero dado que comienza con una sola nota, se dispone sobre un solo +pentagrama. + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e2 f } { c2 <> } >> | +} +@end lilypond + +@node Varios pentagramas +@subsection Varios pentagramas +@translationof Multiple staves + +@cindex varios pentagramas +@cindex pentagramas, varios +@cindex contexto +@cindex contexto de notación +@cindex notación, contexto de + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +Como ya hemos visto en @ref{Explicación de las expresiones musicales}, +los archivos de entrada para LilyPond se construyen a base de +expresiones musicales. Si la partitura comienza con expresiones +musicales simultáneas, LilyPond crea varios pentagramas. Sin embargo +es más fácil ver lo que ocurre si creamos cada uno de los pentagramas +de forma explícita. + +Para imprimir más de un pentagrama, cada fragmento de música que +constituye un pentagrama se marca escribiendo @code{\new Staff} antes +de él. Estos elementos @code{Staff} se combinan después en paralelo +con @code{<<} y @code{>>}: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +La instrucción @code{\new} inaugura un @q{contexto de notación}. Un +contexto de notación es un entorno dentro del que se interpretan los +acontecimientos musicales (como las notas o las instrucciones +@code{\clef}). Para piezas sencillas, tales contextos de notación se +crean automáticamente. Para piezas más complicadas, es mejor marcar +los contextos de forma explícita. + +Existen varias clases de contextos. @code{Score}, @code{Staff} y +@code{Voice} manejan la notación melódica, mientras que @code{Lyrics} +se ocupa de los textos cantados y @code{ChordNames} imprime los +nombres de los acordes. + +En términos de sintaxis, la anteposición de @code{\new} a una +expresión musical crea una expresión musical mayor. Es semejante al +signo menos de las matemáticas. La fórmula @math{(4+5)} es una +expresión, por tanto @math{-(4+5)} es una expresión más amplia. + +Las indicaciones de compás escritas en un pentagrama afectan al resto +de ellos, de forma predeterminada. En cambio, la armadura de la +tonalidad de un pentagrama @emph{no} afecta a los otros pentagramas. +Este comportamiento predeterminado diferente es a causa de que las +partituras con instrumentos transpositores son más comunes que las +partituras polirrítmicas. + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + +@node Grupos de pentagramas +@subsection Grupos de pentagramas +@translationof Staff groups + +@cindex sistema de piano +@cindex piano, sistema de +@cindex sistema de coro +@cindex coro, sistema de +@cindex grupo de pentagramas +@cindex pentagramas, grupo de + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Glosario musical: +@rglos{brace}, +@rglos{staff}, +@rglos{system}. + +La música para piano se compone tipográficamente en forma de dos +pentagramas unidos mediante una @notation{llave}. El aspecto impreso +de este sistema de pentagramas se parece al ejemplo polifónico que +aparece en @ref{Varios pentagramas}, pero en esta ocasión la expresión +completa se coloca dentro de un @code{PianoStaff}: + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> +@end example + +He aquí un pequeño ejemplo: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef "bass" c,,4 c' | e c | } + >> +} +@end lilypond + +Otros grupos de pentagramas se declaran mediante @code{\new +GrandStaff}, que es apropiado para partituras orquestales, y +@code{\new ChoirStaff}, que es apropiado para partituras vocales. +Cada uno de estos grupos de pautas forma un tipo de contexto distinto, +que produce la llave a la izquierda y que también controla el alcance +de las líneas divisorias. + + +@seealso +Referencia de la notación: +@ruser{Teclados y otros instrumentos de varios pentagramas}, +@ruser{Impresión de los pentagramas}. + + +@node Combinar notas para formar acordes +@subsection Combinar notas para formar acordes +@translationof Combining notes into chords + +Glosario musical: +@rglos{chord}. + +@cindex acordes +@cindex duraciones de notas en acordes + +@funindex < +@funindex > +@funindex < ... > + +Hemos visto con anterioridad cómo se pueden combinar las notas +formando @notation{acordes} que indican que son simultáneas, +encerrándolas entre dobles ángulos. Sin embargo, la forma normal de +indicar un acorde es encerrar las notas entre ángulos +@emph{sencillos}. Observe que todas las notas de un acorde deben +tener la misma duración, y que la duración se escribe después del +ángulo de cierre. + + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +Debemos pensar en los acordes como algo casi equivalente a las notas +sencillas: casi todo lo que se puede adjuntar a una nota se puede +adjuntar también a un acorde, y todo debe ir @emph{por fuera} de los +ángulos. Por ejemplo, puede combinar marcas como barras y ligaduras, +con acordes. Tan sólo debe recordar que se escriben por fuera de los +ángulos. + +@lilypond[verbatim,quote,relative=2] +r4 ~ 2 | +8[ ] \>[ ]\! | +r4 8.\p 16( 4-. ) | +@end lilypond + +@seealso +Referencia de la notación: +@ruser{Notas en acorde}. + +@node Polifonía en un solo pentagrama +@subsection Polifonía en un solo pentagrama +@translationof Single staff polyphony + +@cindex polifonía +@cindex varias voces +@cindex voces, más, en un solo pentagrama +@cindex único, polifonía en pentagrama +@cindex separador, silencio +@cindex silencio separador + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +La música polifónica en LilyPond, aunque no es difícil, utiliza +conceptos que aún no hemos tratado, por lo que no vamos a presentarlos +en este momento. En su lugar, las secciones siguientes presentan +estos conceptos y los explican en profundidad. + +@seealso +Manual de aprendizaje: +@ref{Las voces contienen música}. + +Referencia de la notación: +@ruser{Notas simultáneas}. + + +@node Canciones +@section Canciones +@translationof Songs + +En esta sección presentamos cómo elaborar música vocal y hojas de +canción sencillas. + +@menu +* Elaborar canciones sencillas:: +* Alineación de la letra a una melodía:: +* Letra en varios pentagramas:: +@end menu + + +@node Elaborar canciones sencillas +@subsection Elaborar canciones sencillas +@translationof Setting simple songs + +@cindex letra +@cindex canciones + +@funindex \addlyrics +@funindex addlyrics + +Glosario musical: +@rglos{lyrics}. + +Presentamos a continuación el inicio de la melodía de una canción +infantil, @qq{Girls and boys come out to play}: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +La @notation{letra} se puede asignar a esas notas, combinando ambas +con la palabra clave @code{\addlyrics}. La letra se escribe separando +cada sílaba mediante un espacio. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } +>> +@end lilypond + +@warning{Es +esencial que la última sílaba esté separada de la llave de cierre por +un silencio o línea en blanco, pues en caso contrario se tomará como +parte de la sílaba, dando lugar a un extraño error, véase +@rprogram{Apparent error in ../ly/init.ly}.} + +Observe los +ángulos dobles @w{@code{<< ... >>}} alrededor del fragmento entero +para expresar que la música y la letra han de suceder al mismo tiempo. + +@node Alineación de la letra a una melodía +@subsection Alineación de la letra a una melodía +@translationof Aligning lyrics to a melody + +@cindex melisma +@cindex línea de extensión +@cindex guión +@cindex guión bajo +@cindex letra, alineación de +@cindex alineación de la letra +@cindex letra, palabras polisílabas +@cindex palabras polisílabas en la letra + +Glosario musical: +@rglos{melisma}, +@rglos{extender line}. + +La siguiente línea de la canción infantil es @notation{The moon doth +shine as bright as day}. A continuación vamos a ampliarla: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Si compilamos el código del ejemplo anterior, veremos algunos mensajes +de advertencia sobre la consola: + +@example +song.ly:12:29: warning: la comprobación de compás ha fallado en: 5/8 + The | moon doth shine as + | bright as day; | +song.ly:12:46: warning: la comprobación de compás ha fallado en: 3/8 + The | moon doth shine as | bright as day; + | +@end example + +Éste es un buen ejemplo de la utilidad de las comprobaciones de +compás. Ahora, si miramos la música, podemos observar que la letra +adicional no se alinea correctamente con las notas. La palabra +@q{shine} se debe cantar sobre dos notas, no una. Esto se conoce como +@notation{melisma}, una sílaba única que se canta sobre más de una +nota. Existen varias formas de hacer que una sílaba recaiga sobre +varias notas, siendo la más sencilla escribir una ligadura de +expresión sobre ellas (véase @ref{Ligaduras de unión y de expresión}): + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Ahora la letra se alinea correctamente con las notas, pero el barrado +automático de las notas que corresponden a @notation{shine as} no +parece correcto. Podemos remediarlo insertando instrucciones de +barrado manual para sobreescribir el barrado automático; para ver más +detalles consulte @ref{Barras automáticas y manuales}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Como alternativa a la utilización de ligaduras de expresión, los +melismas se pueden indicar solamente en la letra utilizando un guión +bajo, @code{_}, para cada nota que queremos incluir dentro del +melisma: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +Si una sílaba se extiende sobre varias notas o una sola nota muy +larga, normalmente se traza una @notation{línea extensora} desde la +sílaba que se extiende y por debajo de todas las notas que +corresponden a dicha sílaba. Se escribe como dos guiones bajos +@code{__}. He aquí un ejemplo extraído de los primeros tres compases +del @notation{Lamento de Dido}, de @notation{Dido y Eneas} de Purcell: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +Hasta el momento, ninguno de los ejemplos implicaban palabras que +tuviesen más de una sílaba. Estas palabras se reparten por lo general +a razón de una nota por cada sílaba, con guiones cortos entre las +sílabas. Dichos guiones separadores se teclean como dos guiones, con +el resultado de un guión corto centrado entre las sílabas. +Presentamos a continuación un ejemplo que demuestra esto y todo lo que +hemos aprendido hasta el momento acerca de la alineación de la letra a +las notas. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +Algunos textos (especialmente los que están en italiano o en español) +requieren lo contrario: colocar más de una sílaba a una única nota. +Esto se consigue enlazando las sílabas entre sí mediante un guión bajo +simple @code{_} (sin ningún espacio), o bien encerrándolas entre +corchetes. Aquí aparece un ejemplo procedente del @notation{Barbero +de Sevilla} de Rossini, donde la sílaba @notation{al} se canta sobre +la misma nota que la sílaba @notation{go} de la palabra @q{Largo} en +el aria de Fígaro @notation{Largo al factotum}: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef "bass" + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Música vocal}. + + +@node Letra en varios pentagramas +@subsection Letra en varios pentagramas +@translationof Lyrics to multiple staves + +@cindex letra y varios pentagramas +@cindex varios pentagramas y letra + +La solución sencilla que utiliza @code{\addlyrics} se puede usar para +poner letra a más de un pentagrama. Aquí aparece un ejemplo sacado +del @notation{Judas Macabeo} de Haendel: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + + +Cualquier partitura de una complejidad mayor que la de este sencillo +ejemplo se hace mejor separando la letra de la estructura de +pentagramas mediante variables (expresiones con nombre). Éstas se +tratan en @ref{Organizar las piezas mediante variables}. + + +@seealso +Referencia de la notación: +@ruser{Música vocal}. + + +@node Retoques finales +@section Retoques finales +@translationof Final touches + +Éste es el último apartado del tutorial; muestra la forma de dar los +toques finales a piezas sencillas, y ofrece una introducción al resto +del manual. + +@menu +* Organizar las piezas mediante variables:: +* Añadir títulos:: +* Nombres de nota absolutos:: +* Más allá del tutorial:: +@end menu + + +@node Organizar las piezas mediante variables +@subsection Organizar las piezas mediante variables +@translationof Organizing pieces with variables + +@cindex variables +@cindex variables, definir +@cindex identificadores +@cindex macros +@cindex asignación de variables +@cindex uso de las variables +@cindex variables, uso de +@cindex variables, caracteres permitidos en +@cindex caracteres permitidos en variables + +Cuando los elementos que hemos discutido anteriormente se combinan +para producir archivos mayores, las expresiones musicales se hacen +enormes. En música polifónica con muchos pentagramas, los archivos de +entrada pueden volverse muy propensos a la confusión. Podemos reducir +esta confusión utilizando las @emph{variables}. + +Con las variables (también conocidas como identificadores o macros), +podemos trocear las expresiones musicales complejas. Una variable se +asigna de la manera siguiente: + +@example +musicaConNombre = @{ @dots{} @} +@end example + +El contenido de la expresión musical @code{musicaConNombre} se puede +usar posteriormente colocando una barra invertida delante del nombre +(@code{\musicaConNombre}, igual que una orden normal de LilyPond). + +@lilypond[verbatim,quote] +violin = \new Staff { + \relative c'' { + a4 b c b + } +} + +cello = \new Staff { + \relative c { + \clef "bass" + e2 d + } +} + +{ + << + \violin + \cello + >> +} +@end lilypond + +@noindent +El nombre de una variable debe consistir enteramente en caracteres +alfabéticos, es decir sin números, guiones ni guiones bajos. + +Las variables se deben definir @emph{antes} de la expresión musical +principal, pero se pueden usar tantas veces como se quiera, en +cualquier lugar, una vez que han sido definidas. Incluso se pueden +usar dentro de la definición de otra variable, proporcionando una vía +para acortar el código si una sección musical se repite muchas veces. + +@c KEEP LY +@lilypond[verbatim,quote,ragged-right] +tresilloA = \times 2/3 { c,8 e g } +compasA = { \tresilloA \tresilloA \tresilloA \tresilloA } + +\relative c'' { + \compasA \compasA +} +@end lilypond + +Las variables se pueden usar para otros muchos tipos de objetos dentro +del código de entrada. Por ejemplo, + +@example +ancho = 4.5\cm +nombre = "Wendy" +papelAcinco = \paper @{ paperheight = 21.0 \cm @} +@end example + +Dependiendo de su contenido, la variable se puede usar en distintos +lugares. El siguiente ejemplo utiliza las variables anteriores: + +@example +\paper @{ + \papelAcinco + line-width = \ancho +@} + +@{ + c4^\nombre +@} +@end example + + + + +@node Añadir títulos +@subsection Añadir títulos +@translationof Adding titles + +@cindex título +@cindex cabeceras +@cindex bloque de cabeceras + +@funindex \header +@funindex header + +La información sobre el título, autor, número de Opus y similares se +escriben en el bloque @code{\header}. Éste se encuentra fuera de la +expresión musical principal; el bloque @code{\header} normalmente se +sitúa por debajo del número de versión. + +@example +\version @w{"@version{}"} + +\header @{ + title = "Sinfonía" + composer = "Yo" + opus = "Op. 9" +@} + +@{ + @dots{} música @dots{} +@} +@end example + +Cuando se procesa el archivo, el título y el autor se imprimen por +encima de la música. Puede obtener más información sobre los títulos +en @ruser{Crear títulos}. + + +@node Nombres de nota absolutos +@subsection Nombres de nota absolutos +@translationof Absolute note names + +@cindex notas, nombres de +@cindex notas, nombres absolutos de +@cindex absoluto, modo +@cindex absolutos, valores de altura +@cindex alturas, valores absolutos de +@cindex absolutos, nombres de nota + +Hasta el momento siempre hemos utilizado @code{\relative} para definir +las alturas. Ésta es la forma más sencilla de escribir la mayor parte +de la música, pero existe otra forma de definir las alturas: el modo +absoluto. + +Si omite el @code{\relative}, LilyPond tratará todas las alturas como +valores absolutos. Una @code{c'} significará siembre un Do central, +una @code{b} significará siempre la nota inmediatamente por debajo del +Do central, y una @code{g,} significará siempre la nota que se coloca +en la primera línea del pentagrama en clave de Fa. + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +He aquí una escala que abarca cuatro octavas: + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +Como puede ver, escribir una melodía en clave de Sol implica escribir +gran cantidad de apóstrofos @q{'} . Consideremos este fragmento de +Mozart: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +Todos estos apóstrofos hacen casi ilegible el código de entrada y será +origen de numerosos errores. Con @code{\relative}, el ejemplo +anterior es mucho más fácil de leer: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 | + b8. cis16 b8 d4 d8 | +} +@end lilypond + +Si comete un error con una marca de octava (@code{'} o @code{,}) +mientras trabaja en el modo @code{\relative}, será muy obvio (muchas +notas estarán en la octava equivocada). Mientras trabaja en el modo +absoluto, un solo fallo no será tan visible, y tampoco será tan fácil +de localizar. + +Sin embargo, el modo absoluto es útil para escribir música que +contenga intervalos grandes, y será extremadamente útil para hacer +archivos de LilyPond generados por ordenador. + + + +@node Más allá del tutorial +@subsection Más allá del tutorial +@translationof After the tutorial + +Después de terminar el tutorial, quizá debería probar a escribir una o +dos piezas. Comience con una de las plantillas que aparecen en +@ref{Plantillas} y añada algunas notas. Si necesita un tipo de +notación que no ha sido tratada en el tutorial, eche un vistazo a la +Referencia de Notación, empezando por @ruser{Notación musical}. Si +quiere escribir música para un conjunto instrumental que no está +cubierto por ninguna plantilla, consulte @ref{Extender las +plantillas}. + +Una vez que ha escrito algunas piezas cortas, lea el resto del Manual +de aprendizaje (capítulos 3 al 5). ¡Por supuesto, no pasa nada por +leerlo ahora mismo! Sin embargo, el resto del Manual de Aprendizaje +da por sentado que está familiarizado con la entrada de LilyPond. +Puede saltarse estos capítulos ahora y volver a ellos cuando haya +adquirido más experiencia. + +En este tutorial y en el resto del Manual de aprendizaje, existe un +apartado @strong{Véase también} al final de cada una de las secciones, +que contiene referencias cruzadas a otras secciones: no siga estas +referencias durante la primera lectura; cuando haya leído el Manual de +aprendizaje completo, quizá desee releer ciertas secciones y seguir +las referencias cruzadas para obtener más información. + +Si no lo ha hecho aún, le @emph{rogamos} que lea @ref{Panorámica de +los manuales}. Existe una gran cantidad de información sobre +LilyPond, de manera que los recién llegados con frecuencia no saben +exactamente dónde deben buscar la ayuda. Si emplea cinco minutos en +leer cuidadosamente esta sección ¡se ahorrará horas de frustración +buscando en el sitio equivocado! + diff --git a/Documentation/es/learning/fundamental.itely b/Documentation/es/learning/fundamental.itely new file mode 100644 index 0000000000..e833266b33 --- /dev/null +++ b/Documentation/es/learning/fundamental.itely @@ -0,0 +1,3336 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 398e5e95c6cd11f2ef03a5ceed087d87ad28f1e1 + + 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 Conceptos fundamentales +@chapter Conceptos fundamentales +@translationof Fundamental concepts + +Ha podido ver en el tutorial cómo producir música bellamente impresa a +partir de un simple archivo de texto. Esta sección presenta los +conceptos y técnicas que se requieren para producir partituras +igualmente bellas pero más complejas. + +@menu +* Cómo funcionan los archivos de entrada de LilyPond:: +* Las voces contienen música:: +* Contextos y grabadores:: +* Extender las plantillas:: +@end menu + + +@node Cómo funcionan los archivos de entrada de LilyPond +@section Cómo funcionan los archivos de entrada de LilyPond +@translationof How LilyPond input files work + +El formato de entrada de LilyPond es bastante libre en su forma y +concede a los usuarios con experiencia mucha flexibilidad para +estructurar sus archivos de la forma que deseen. Sin embargo, toda +esta flexibilidad puede hacer que las cosas se vuelvan confusas para +los nuevos usuarios. Esta sección le va a explicar parte de esta +estructura, pero puede obviar ciertos detalles en aras de la +simplicidad. Para ver una descripción completa del formato de +entrada, consulte @ruser{Estructura del archivo}. + + +@menu +* Introducción a la estructura de los archivos de LilyPond:: +* La partitura es una (única) expresión musical compuesta:: +* Anidado de expresiones musicales:: +* Acerca de la no anidabilidad de llaves y ligaduras:: +@end menu + +@node Introducción a la estructura de los archivos de LilyPond +@subsection Introducción a la estructura de los archivos de LilyPond +@translationof Introduction to the LilyPond file structure + +@cindex entrada, formato de la +@cindex archivo, estructura del + +Un ejemplo básico de archivo de entrada de LilyPond es el siguiente: + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...expresión musical compuesta...} % toda la música viene aquí + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Existen muchas variaciones de este esquema básico, pero el ejemplo +constituye un útil punto de partida. + +@funindex \book +@funindex book +@funindex \score +@funindex score +@cindex book (libro) +@cindex score (partitura) +@cindex libro +@cindex partitura + +Hasta el momento, ninguno de los ejemplos que ha podido ver utiliza la +instrucción @code{\score@{@}}. Esto es así a causa de que LilyPond +añade automáticamente las órdenes adicionales que se requieren cuando +le proporcionamos una entrada sencilla. LilyPond trata una entrada +como esta: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +como una abreviatura de esta otra: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +En otras palabras, si la entrada consta de una única expresión +musical, LilyPond interpreta el archivo como si la expresión musical +estuviera rodeada por un envoltorio hecho por las instrucciones que +acabamos de ver. + +@cindex contextos implícitos +@cindex implícitos, contextos + +@strong{¡Advertencia!} Muchos de los ejemplos que aparecen en la +documentación de LilyPond omiten las instrucciones @code{\new Staff} y +@code{\new Voice}, dejando que se creen de forma implícita. Esto +funciona bien para ejemplos sencillos, pero para ejemplos más +complicados, especialmente cuando se usan instrucciones adicionales, +la creación implícita de los contextos puede dar lugar a resultados +inesperados, incluso en ocasiones crear pentagramas no deseados. La +forma de crear contextos de forma explícita se explica en +@ref{Contextos y grabadores}. + +@warning{Cuando se escriben más de unas pocas líneas de música, se +recomienda crear siempre los pentagramas y las voces de forma +explícita.} + +De todas formas, por ahora vamos a volver al primer ejemplo para +examinar la instrucción @code{\score}, dejando las demás en su forma +predeterminada. + +Un bloque @code{\score} siempre debe contener una expresión musical +única, que debe aparecer inmediatamente después de la instrucción +@code{\score}. Recuerde que una expresión musical podía ser cualquier +cosa entre una sola nota hasta una enorme expresión compuesta como + +@example +@{ + \new StaffGroup << + @var{...inserte aquí la partitura completa de una ópera de Wagner...} + >> +@} +@end example + +@noindent +Puesto que todo se encuentra dentro de @code{@{ ... @}}, cuenta como +una expresión musical. + +Como vimos anteriormente, el bloque @code{\score} puede contener otras +cosas, tales como + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex header +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi +@cindex midi +@cindex cabecera +@cindex disposición + +@noindent +Observe que estas tres instrucciones (@code{\header}, @code{\layout} y +@code{\midi}) son especiales: a diferencia del resto de las +instrucciones que comienzan con una barra invertida (@code{\}), +@emph{no} son expresiones musicales y no forman parte de ninguna +expresión musical. Por tanto, se pueden situar dentro de un bloque +@code{\score} o fuera de él. De hecho, estas instrucciones se sitúan +por lo general fuera del bloque @code{\score} (por ejemplo, +@code{\header} se suele colocar antes de la instrucción @code{\score}, +como muestra el ejemplo que aparece al principio de la sección. + +Dos instrucciones más que no hemos visto aún son @code{\layout @{ @}} +y @code{\midi @{ @}}. Si aparecen tal y como se muestran aquí, hacen +que LilyPond produzca una salida impresa y una salida MIDI, +respectivamente. Se describen con todo detalle en el manual de +Referencia de la notación, en @ruser{Disposición de la partitura} y en +@ruser{Crear archivos MIDI}. + +@cindex partituras, varias +@cindex book, bloque implícito +@cindex implícito, bloque book +@funindex \book +@funindex book + +Podemos escribir varios bloques @code{\score}. Cada uno de ellos +recibirá el mismo tratamiento que una partitura independiente, pero se +combinarán todos juntos en un archivo de salida único. No se necesita +ninguna instrucción @code{\book}, se creará una implícitamente. Sin +embargo, si quiere archivos de salida separados a partir de un único +archivo @file{.ly}, entonces es necesario utilizar la instrucción +@code{\book} para separar las distintas secciones: cada bloque +@code{\book} produce un archivo de salida distinto. + +En resumen: + +Cada bloque @code{\book} crea un archivo de salida distinto (por +ejemplo, un archivo PDF). Si no hemos escrito uno de forma explícita, +LilyPond envuelve todo nuestro código de entrada dentro de un bloque +@code{\book} de forma implícita. + +Cada bloque @code{\score} es un trozo de música separado dentro de un +bloque @code{\book}. + +@cindex layout, efecto de la situación del bloque + +Cada bloque @code{\layout} afecta al bloque @code{\score} o +@code{\book} dentro del cual aparece (es decir, un bloque +@code{\layout} dentro de un bloque @code{\score} afecta solamente a +ese bloque @code{\score}, pero un bloque @code{\layout} fuera de un +bloque @code{\score} (que por ello está dentro de un bloque +@code{\book}, ya sea explícita o implícitamente) afecta a los bloques +@code{\score} que están dentro de ese @code{\book}. + +Para ver más detalles, consulte @ruser{Varias partituras en un libro}. + +@cindex variables + +Otro magnífico atajo es la posibilidad de definir variables como +se muestra en @ref{Organizar las piezas mediante variables}. Todas las +plantillas emplean lo siguiente: + +@example +melodia = \relative c' @{ + c4 a b c +@} + +\score @{ + \melodia +@} +@end example + +Cuando LilyPond examina este archivo, toma el valor de @code{melodia} +(todo lo que está después del signo igual) y lo inserta dondequiera +que ve @code{\melodia}. No se requiere un cuidado especial con el +nombre (puede ser @code{melodia}, @code{global}, +@code{CompasArmadura}, @code{manoderechadelpiano} o +@code{fulanomengano} o cualquier otro). Recuerde que puede usar casi +cualquier nombre que se le ocurra, en la medida en que contenga +solamente caracteres alfabéticos y sea diferente de cualquiera de los +nombres de instrucción de LilyPond. Para ver más detalles, consulte @ref{Ahorrar +tecleo mediante variables y funciones}. Las limitaciones exactas que +afectan a los nombres de variable se detallan en @ruser{Estructura del +archivo}. + + +@seealso +Para ver una definición completa del formato del código de entrada, +consulte @ruser{Estructura del archivo}. + + +@node La partitura es una (única) expresión musical compuesta +@subsection La partitura es una (única) expresión musical compuesta +@translationof Score is a (single) compound musical expression + +@cindex score +@cindex partitura +@cindex contenido del bloque score +@cindex score, contenido del bloque +@cindex compuesta, expresión musical +@cindex musical, expresión, compuesta +@cindex expresión musical compuesta +@funindex \score +@funindex score + +En la sección anterior, @ref{Introducción a la estructura de los +archivos de LilyPond}, hemos podido ver la organización general de los +archivos de entrada de LilyPond. Pero parece que nos saltamos la +parte más importante: ¿cómo averiguamos qué escribir después de +@code{\score}? + +No nos hemos saltado nada en absoluto. El gran misterio es, +sencillamente, que no hay @emph{ningún} misterio. La siguiente línea +lo explica todo: + +@quotation +@emph{Un bloque @code{\score} debe comenzar con una expresión musical +compuesta.} +@end quotation + +@noindent +Para comprender lo que se entiende por expresión musical y expresión +musical compuesta, quizá encuentre útil dar un repaso al tutorial, +@ref{Explicación de las expresiones musicales}. En esta sección vimos cómo +elaborar grandes expresiones musicales a partir de pequeñas piezas +(comenzábamos con notas, luego acordes, etc.). Ahora partiremos de +una gran expresión musical y recorreremos el camino inverso hacia +abajo. Por simplicidad, vamos a hacer sólo un cantante y un piano. +No necesitamos un @code{StaffGroup} (que simplemente agrupa un cierto +número de pautas con un corchete a la izquierda) para este conjunto, +así que lo retiramos. Sin embargo, @emph{sí} necesitamos pentagramas +para un cantante y un piano. + +@example +\score @{ + << + \new Staff = "cantante" << + >> + \new PianoStaff = "piano" << + >> + >> + \layout @{ @} +@} +@end example + +Aquí hemos asignado nombres a los pentagramas: @qq{cantante} y +@qq{piano}. Esto no es esencial en este momento, pero es un hábito +que resulta útil cultivar de manera que podamos saber de un vistazo +para qué es cada pentagrama. + +Recuerde que utilizamos @code{<< ... >>} en lugar de @code{@{ ... @}} +para presentar la música simultánea. Esto hace que las partes vocal y +del piano aparezcan una sobre la otra en la partitura. La +construcción @code{<< ... >>} no sería necesaria para el pentagrama +del cantante en el ejemplo de arriba si contiene solamente una +expresión musical secuencial, pero se necesitarían los @code{<< +... >>} en lugar de las llaves si la música de ese pentagrama fuese a +contener dos o más expresiones simultáneas, p.ej. dos voces +simultáneas, o una voz con letra. Vamos a tener una voz con letra, +por lo que se requieren los ángulos dobles. Después añadiremos algo +de música real; por ahora limitémonos a poner unas cuantas notas y +texto de relleno. Si ha olvidado cómo añadir la letra, puede releer +la sección @code{\addlyrics} de @ref{Elaborar canciones sencillas}. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +Ahora tenemos muchos más detalles. Tenemos la pauta del cantante: +contiene una @code{Voice} o voz (en LilyPond, este término hace +referencia a un conjunto de notas, no necesariamente notas vocales -- +por ejemplo, un violín generalmente toca una voz --) y el texto de la +canción. También tenemos una pauta de piano: contiene un pentagrama +superior (mano derecha) y un pentagrama inferior (mano izquierda), +aunque el pentagrama inferior aún no tiene la clave de Fa. + +En este momento podríamos comenzar a meter las notas. Dentro de las +llaves que siguen a @code{\new Voice = "vocal"}, podríamos empezar +escribiendo + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +Pero si lo hiciéramos, la sección @code{\score} se haría bastante +larga y sería más difícil comprender lo que ocurre. En lugar de esto +utilizaremos identificadores o variables. Recordará que las vimos por +primera vez en la sección anterior. + +Para asegurarnos de que el contenido de la variable @code{text} se +interpreta como letra, lo precedemos por @code{\lyricmode}. Como +@code{\addlyrics}, esto activa el modo de entrada de letra. Sin ello, +LilyPond trataría de interpretar el contenido como notas, lo que +generaría errores (Existen algunos otros modos, véase @ruser{Modos de +entrada}). + +Así pues, escribiendo algunas notas, y una clave de Fa para la mano +izquierda, ahora tenemos un fragmento musical de verdad: + +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e } + +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond + +Cuando escriba una sección @code{\score} o cuando la esté leyendo, +hágalo despacio y con cuidado. Comience por el nivel exterior y luego +trabaje sobre cada uno de los niveles interiores. También es de gran +ayuda ser muy estricto con los márgenes (asegúrese de que en su editor +de texto cada elemento del mismo nivel comienza en la misma posición +horizontal). + + +@seealso +Referencia de la notación: +@ruser{Estructura de una partitura}. + + +@node Anidado de expresiones musicales +@subsection Anidado de expresiones musicales +@translationof Nesting music expressions + +@cindex pentagramas temporales +@cindex temporales, pentagramas +@cindex ossias + +No es esencial declarar todos los pentagramas al comienzo; se pueden +crear temporalmente en cualquier momento. Esto es de especial +utilidad para crear secciones de ossia (véase @rglos{ossia}). A +continuación presentamos un ejemplo sencillo que muestra cómo +introducir temporalmente un pentagrama nuevo mientras dura un +fragmento de tres notas: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Advierta que el tamaño de la clave es igual al que se imprime en un +cambio de clave (ligeramente menor que la clave al principio de una +línea). Esto es normal para cualquier clave que se imprime en la +mitad de una línea. + +@cindex pentagrama, posicionado del + +La sección ossia se puede colocar encima del pentagrama de la manera +siguiente: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } { f8 f c } + >> + r4 | + } +} +@end lilypond + +Este ejemplo utiliza @code{\with}, que se explica en todo detalle más +adelante. Es un medio de modificar el comportamiento predeterminado +de un solo pentagrama. Aquí, dice que el pentagrama nuevo se debe +colocar por encima del pentagrama llamado @qq{main} en vez de la +posición predeterminada que sería por debajo. + + +@seealso +Los fragmentos de ossia se escriben a menudo sin clave y sin +indicación de compás, y generalmente en un tipo más pequeño. Esto +necesitaría más instrucciones que aún no se han visto. Véase +@ref{Tamaño de los objetos} y @ruser{Pentagramas de Ossia}. + + +@node Acerca de la no anidabilidad de llaves y ligaduras +@subsection Acerca de la no anidabilidad de llaves y ligaduras +@translationof On the un-nestedness of brackets and ties + +@cindex corchetes y paréntesis, anidado de +@cindex corchetes y paréntesis, tipos de +@cindex corchetes y paréntesis, encerrar frente a marcar +@cindex paréntesis y corchetes, anidado de +@cindex paréntesis y corchetes, tipos de +@cindex paréntesis y corchetes, encerrar frente a marcar + +En la escritura del archivo de entrada de LilyPond, hemos podido ver +algunos tipos de paréntesis, llaves o ángulos de distintos tipos. +Éstos obedecen a distintas reglas que al principio pueden resultar +confusas. Antes de explicar estas reglas, demos un repaso a las +distintas clases de corchetes, llaves y paréntesis. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Tipo de paréntesis + @tab Función +@item @code{@{ .. @}} + @tab Encierra un fragmento secuencial de música +@item @code{< .. >} + @tab Encierra las notas de un acorde +@item @code{<< .. >>} + @tab Encierra expresiones musicales simultáneas +@item @code{( .. )} + @tab Marca el comienzo y el final de una ligadura de expresión +@item @code{\( .. \)} + @tab Marca el comienzo y el final de una ligadura de fraseo +@item @code{[ .. ]} + @tab Marca el comienzo y el final de un barrado manual +@end multitable + +A las anteriores, debemos añadir otras construcciones que generan +líneas entre o a través de las notas: las ligaduras de unión (marcadas +con una tilde curva, @code{~}), los grupos especiales que se escriben +como @code{\times x/y @{..@}}, y las notas de adorno, que se escriben +como @code{\grace@{..@}}. + +Fuera de LilyPond, el uso convencional de los paréntesis y otros +corchetes requiere que los distintos tipos se encuentren anidados +correctamente, como en: @code{<< [ @{ ( .. ) @} ] >>}, de manera que +los paréntesis que se cierran deben encontrarse en el orden +exactamente opuesto al de los paréntesis que se abren. Esto +@strong{es} un requisito para los tres tipos de paréntesis que se +describen mediante la palabra @q{Encierra} en la tabla anterior: se +deben anidar correctamente. Sin embargo, el resto de las llaves y +corchetes, que se encuentran descritos por la palabra @q{Marca} en la +misma tabla anterior, @strong{no} tienen por qué anidarse +estrictamente con ninguno de los otros paréntesis. De hecho, éstos no +son paréntesis en el sentido de que encierran algo: simplemente son +marcadores que indican dónde empieza o finaliza algo. + +Así pues, por ejemplo, una ligadura de fraseo puede dar comienzo +antes de una barra insertada manualmente, y acabar antes de que acabe +la barra (algo que quizá no sea muy musical, pero es posible): + +@lilypond[quote,verbatim,ragged-right,relative=2] +g8\( a b[ c b\) a] g4 +@end lilypond + +En general, los distintos tipos de corchete, y los implicados en +grupos especiales, ligaduras de unión y notas de adorno, se pueden +mezclar con total libertad. Este ejemplo muestra una barra que se +extiende hacia el interior de un grupo de valoración especial (línea +1), una ligadura de expresión que se prolonga hasta el interior de un +grupo especial (línea 2), una barra y una ligadura de expresión que se +prolongan hasta el interior de un grupo especial, una ligadura de +unión que atraviesa dos grupos especiales, y una ligadura de fraseo +que sale del interior de un grupo especial (líneas 3 y 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 + + +@node Las voces contienen música +@section Las voces contienen música +@translationof Voices contain music + +Igual que los cantantes, LilyPond necesita voces para cantar. En +realidad, la música para cualquier instrumento de una partitura está +siempre contenida dentro de una voz --el concepto de LilyPond más +fundamental de todos--. + +@menu +* Oigo voces:: +* Voces explícitas:: +* Voces y música vocal:: +@end menu + +@node Oigo voces +@subsection Oigo voces +@translationof I'm hearing Voices + +@cindex polifonía +@cindex capas +@cindex varias voces +@cindex voces, varias +@cindex Voice (voz), contexto de +@cindex contexto Voice (de voz) +@cindex simultánea, música +@cindex concurrente, música +@cindex voces frente a acordes +@cindex acordes frente a voces + +De las capas más profundas de una partitura de LilyPond, las más bajas +y más fundamentales reciben el nombre de @q{Voice contexts} +(«contextos de voz») o, abreviadamente, @q{Voices} («voces»). Las +voces reciben a veces el nombre de @q{layers} («capas») en otros +programas de edición de partituras. + +De hecho, una capa o contexto de voz es la única que puede contener +música. Si un contexto de voz no se declara explícitamente, se crea +uno de forma automática, como vimos al comienzo de este capítulo. +Ciertos instrumentos como el oboe solamente pueden tocar una nota cada +vez. La música escrita para estos instrumentos es monofónica y +solamente requiere una voz única. Los instrumentos que pueden tocar +más de una nota a la vez, como el piano, con frecuencia necesitarán +varias voces para codificar las distintas notas y ritmos concurrentes +que son capaces de tocar. + +Una sola voz puede contener muchas notas dentro de un acorde, por +supuesto; entonces ¿cuándo, exactamente, se necesitan varias voces? +En primer lugar observe este ejemplo de cuatro acordes: + +@lilypond[quote,verbatim,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +Esto se puede expresar utilizando sólo símbolos de acorde con ángulos +simples, @code{< ... >}, y para este propósito tan sólo se necesita +una voz. Pero suponga que el Fa sostenido fuese realmente una corchea +seguida de un Sol corchea, una nota de paso que conduce al La. Ahora +tenemos dos notas que empiezan en el mismo momento pero tienen +distintas duraciones: la negra Re, y la corchea Fa sostenido. ¿Cómo se +codifica esto? No se pueden escribir como un acorde porque todas las +notas de un acorde deben tener la misma duración. Y no se pueden +escribir como dos notas en secuencia porque tienen que empezar en el +mismo momento. Aquí es donde se necesitan dos voces. + +Veamos cómo se hace esto dentro de la sintaxis de entrada de LilyPond. + +@funindex << \\ >> +@funindex \\ + +La forma más fácil de introducir fragmentos con más de una voz en un +solo pentagrama es escribir cada voz como una secuencia (con +@code{@{...@}}), y combinarlas simultáneamente con ángulos dobles, +@code{<<...>>}. Los fragmentos también se deben separar mediante una +doble barra invertida, @code{\\}, para situarlos en voces separadas. +Sin esto, las notas irían a una sola voz, lo que normalmente produce +errores. Esta técnica se adapta especialmente bien a piezas de música +que son mayormente monofónicas pero ocasionalmente tienen cortas +secciones de polifonía. + +He aquí cómo dividimos los acordes anteriores en dos voces y añadimos +la nota de paso y la ligadura: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Observe cómo las plicas de la segunda voz ahora se dirigen hacia +abajo. + +A continuación veamos otro ejemplo sencillo: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | +<< { a2. r4 } \\ { fis2. s4 } >> | +@end lilypond + +No es necesario usar una construcción @code{<< \\ >>} distinta para +cada compás. Para música que tenga unas pocas notas en cada compás, +esta disposición podría facilitar la legibilidad del código, pero si +hay muchas notas en cada compás podría ser mejor dividirlo en dos +voces separadas, de la siguiente manera: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + +@cindex voces, nombrado de +@cindex voces que cruzan corchetes +@cindex ligaduras que cruzan corchetes + +Este ejemplo tiene sólo dos voces, pero la misma construcción se puede +usar para codificar tres o más voces mediante la adición de más +separadores de barra invertida. + +Los contextos de voz llevan los nombres de @code{"1"}, @code{"2"}, +etc. En cada uno de estos contextos, la dirección vertical de las +ligaduras, plicas, matices dinámicos, etc., se ajusta de la forma +correcta. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> | + << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | +} +@end lilypond + +Todas estas voces están separadas de la voz principal que contiene las +notas justo por fuera de la construcción @code{<< .. >>}. Le +llamaremos a esto la @emph{construcción simultánea}. Las ligaduras +(de prolongación y de expresión) solamente pueden conectar notas que +estén dentro de la misma voz, luego las ligaduras no pueden entrar o +salir de una construcción simultánea. A la inversa, las voces +paralelas de construcciones simultáneas distintas sobre el mismo +pentagrama, son la misma voz. Otras propiedades relativas a las voces +también conllevan construcciones simultáneas. A continuación vemos el +mismo ejemplo, con colores y cabezas distintos para cada voz. Observe +que los cambios en una voz no afectan a otras voces, pero persisten +más tarde dentro de la misma voz. Observe también que las notas +ligadas se pueden dividir entre las mismas voces de dos +construcciones, como se indica aquí en la voz de triángulos azules. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Las instrucciones @code{\voiceXXXStyle} están pensadas principalmente +para usarlas en documentos educativos como este mismo. Modifican el +color de la cabeza, la plica y las barras, y el estilo de la cabeza, +de forma que las voces se puedan distinguir fácilmente. La voz uno +está establecida a rombos rojos, la voz dos a triángulos azules, la +voz tres a círculos verdes con aspas, y la voz cuatro (que no se +utiliza aquí) a aspas color magenta. @code{\voiceNeutralStyle} (que +tampoco se usa aquí) devuelve todo al estilo predeterminado. Veremos +más adelante cómo el usuario puede crear instrucciones como éstas. +Véase @ref{Visibilidad y color de los objetos} y @ref{Uso de variables para los trucos}. + +@cindex polifonía y modo relativo +@cindex relativo, modo, polifonía y + +La polifonía no cambia la relación de las notas dentro de un bloque +@code{\relative}. La altura de cada nota aún se calcula con +relación a la nota que le precede inmediatamente, o a la primera nota +del acorde precedente. Así, en + +@example +\relative c' @{ notaA << < notaB notaC > \\ notaD >> notaE @} +@end example + +@noindent +@code{notaB} es relativa a @code{notaA} @* +@code{notaC} es relativa a @code{notaB}, no a @code{notaA}; @* +@code{notaD} es relativa a @code{notaB}, no a @code{notaA} ni a +@code{notaC}; @* +@code{notaE} es relativa a @code{notaD}, no a @code{notaA}. + +Una forma alternativa, que podría ser más clara si las notas en las +voces están muy separadas, es colocar una instrucción @code{\relative} +al principio de cada voz: + +@example +\relative c' @{ notaA ... @} +<< + \relative c'' @{ < notaB notaC > ... @} +\\ + \relative g' @{ notaD ... @} +>> +\relative c' @{ notaE ... @} +@end example + +Finalmente, analicemos las voces en una pieza de música más compleja. +He aquí las notas de los dos primeros compases del segundo de los Dos +Nocturnos de Chopin, Op 32. Este ejemplo se utilizará en fases +posteriores dentro del presente capítulo y el siguiente, para ilustrar +varias técnicas para producir notación, y por tanto le pedimos que +ignore por ahora cualquier cosa en el código subyacente que le parezca +misterioso y tan sólo se concentre en la música y las voces (todas +las complicaciones se explicarán en secciones posteriores). + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +Con frecuencia, la dirección de las plicas se utiliza para indicar la +continuidad de dos líneas melódicas simultáneas. Aquí, todas las +plicas de las notas agudas se dirigen hacia arriba y las de las notas +graves hacia abajo. Ésta es la primera indicación de que se requiere +más de una voz. + +Pero la necesidad real de varias voces aflora cuando hay notas que +comienzan en el mismo tiempo pero tienen distintas duraciones. +Observe las notas que comienzan en la tercera parte del primer compás. +El La bemol es una negra con puntillo, el Fa es una negra y el Re +bemol es una blanca. Estas notas no se pueden escribir como un acorde +porque todas las notas de un acorde deben tener la misma duración. +Tampoco se pueden escribir como notas secuenciales, pues deben +comenzar al mismo tiempo. Esta sección del compás requiere tres +voces, y la práctica común sería escribir todo el compás como tres +voces como se muestra abajo, donde hemos usado distintas cabezas y +colores para las tres voces. Una vez más, el código que subyace a +este ejemplo se explicará más tarde, así pues ignore todo lo que no +entienda. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +Vamos a intentar codificar esta música partiendo de cero. Como +veremos, esto se topa con ciertas dificultades. Comenzamos tal y como +hemos aprendido, usando la construcción @code{<< \\ >>} para +introducir la música del primer compás en tres voces: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des } + >> | + 1 | +} +@end lilypond + +@cindex plica abajo +@cindex voces y dirección de las plicas +@cindex plicas, voces y dirección de las +@cindex plica arriba + +Las direcciones de las plicas se asignan automáticamente de forma que +las voces de numeración impar reciben las plicas hacia arriba y las de +numeración par hacia abajo. Las plicas de las voces 1 y 2 están +correctas, pero las plicas de la voz 3 debería ir hacia abajo en este +fragmento en particular. Podemos corregir esto simplemente +olvidándonos de la voz tres y situando la música en la voz cuatro. +Esto se hace escribiendo otro par de barras invertidas (@code{\\}). + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des } + >> | + 1 | +} +@end lilypond + +@noindent +Vemos que esto arregla la dirección de la plica, pero presenta un +problema que se encuentra a veces con varias voces: las plicas de las +notas en una voz pueden colisionar con las cabezas de otras voces. Al +disponer las notas, LilyPond permite que las notas o acordes de dos +voces ocupen la misma columna vertical de notas teniendo en cuenta que +las plicas están en direcciones opuestas, pero las notas de la tercera +y cuarta voces se desplazan si es necesario para evitar la colisión +entre las cabezas. Esto funciona bien por lo general, pero en este +ejemplo claramente las notas de la voz inferior no están bien +colocadas de forma predeterminada. LilyPond proporciona diversas +maneras de ajustar la colocación horizontal de las notas. Aún no +estamos preparados para ver cómo corregir esto, así que dejaremos este +problema aparcado hasta una sección posterior (véase la propiedad +@code{force-hshift} en @ref{Arreglar notación con superposiciones}). + + +@seealso +Referencia de la notación: +@ruser{Varias voces}. + + +@node Voces explícitas +@subsection Voces explícitas +@translationof Explicitly instantiating voices + + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex contextos de voz, creación de + +Los contextos de voz también se pueden crear manualmente dentro de un +bloque @code{<< >>} para crear música polifónica, utilizando +@code{\voiceOne} ... @code{\voiceFour} para indicar las direcciones +requeridas de plicas, ligaduras, etc. En partituras más largas, este +método es más claro porque permite que las voces estén separadas y +reciban nombres más descriptivos. + +Concretamente, la construcción @code{<< \\ >>} que usamos en la +sección previa: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +equivale a + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Los dos ejemplos anteriores producen: + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex voces, retorno a única +@cindex retorno a voz única + +Las instrucciones @code{\voiceXXX} establecen la dirección de las +plicas, ligaduras de expresión, ligaduras de prolongación, +articulaciones, anotaciones de texto, puntillos y digitaciones. +@code{\voiceOne} y @code{\voiceThree} hacen que estos objetos apunten +hacia arriba, mientras que @code{\voiceTwo} y @code{\voiceFour} los +hacen apuntar hacia abajo. Estas instrucciones también producen un +desplazamiento horizontal para cada voz cuando es necesario para +evitar choques entre las cabezas. La instrucción @code{\oneVoice} +devuelve los ajustes de nuevo a los valores normales para una sola +voz. + +Veamos en algunos ejemplos sencillos exactamente qué efecto tienen +@code{\oneVoice}, @code{\voiceOne} y @code{voiceTwo} sobre el marcado, +las ligaduras de unión y de expresión y las indicaciones de dinámica: + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +A continuación veremos tres formas distintas de componer la notación +del mismo pasaje polifónico, cada una de las cuales tiene sus ventajas +según la circunstancia, utilizando el ejemplo de la sección anterior. + +Una expresión que aparece directamente dentro de @code{<< >>} +pertenece a la voz principal (pero, observe, @strong{no} dentro de una +construcción @code{<< \\ >>}). Esto es útil cuando aparecen voces +nuevas mientras la voz principal está sonando. A continuación podemos +ver una realización más correcta del ejemplo de la sección anterior. +Las notas rojas en forma de rombo muestran que la melodía principal +está ahora dentro de un contexto de una sola voz, haciendo que se +pueda trazar una ligadura por encima de ellas. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b c2 | + } + >> +} +@end lilypond + +@cindex anidado de expresiones musicales +@cindex anidado de construcciones simultáneas +@cindex anidado de voces +@cindex voces temporales +@cindex voces, anidado de + +Son posibles construcciones polifónicas anidadas más profundamente, y +si una voz aparece sólo brevemente podría haber una forma más natural +de tipografiar la música. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ | + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b c2 | + } + >> + } + >> +} +@end lilypond + +@cindex espaciadoras, notas + +Este método de anidar voces nuevas brevemente es útil cuando sólo hay +secciones polifónicas pequeñas, pero cuando todo el pentagrama es muy +polifónico podría ser más claro usar varias voces todo el tiempo, +usando notas espaciadoras para pasar por encima de las secciones en +que una voz está en silencio, como aquí: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b c2 | + } +>> +@end lilypond + +@subsubheading Columnas de notas + +@cindex columna de notas +@cindex colisiones de notas +@cindex notas, colisiones de +@cindex desplazamiento, instrucciones de +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +Las notas cercanas de un acorde, o las notas que se producen al mismo +tiempo en distintas voces, se disponen en dos (y ocasionalmente más) +columnas para evitar el solapamiento de las cabezas. Reciben el +nombre de columnas de notas. Hay columnas distintas para cada voz, y +el desplazamiento especificado en curso dependiente de la voz se +aplica a la columna de la nota si en caso contrario se produjese una +colisión. Esto se puede ver en el ejemplo anterior. En el compás 2 el +Do en la voz dos está desplazado a la derecha respecto del Re de la +voz uno, y en el último acorde el Do de la voz tres también está +desplazado a la derecha respecto de las otras notas. + +Las instrucciones @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} +y @code{\shiftOff} especifican el grado en que se deben desplazar las +notas y acordes de la voz si en caso contrario ocurriese una +colisión. De forma predeterminada, las voces exteriores (normalmente +las voces uno y dos) llevan especificado @code{\shiftOff}, mientras +que las voces interiores (tres y cuatro) tienen @code{\shiftOn} +especificado. Cuando se aplica un desplazamiento, las voces uno y +tres se desplazan hacia la derecha y las voces dos y cuatro se +desplazan hacia la izquierda. + +@code{\shiftOnn} y @code{\shiftOnnn} definen niveles adicionales de +desplazamiento que se pueden especificar temporalmente para resolver +colisiones en situaciones complejas (véase @ref{Ejemplos reales de música}). + +Una columna de notas puede contener sólo una nota (o acorde) de una +voz con las plicas hacia arriba y una not (o acorde) de una voz con +las plicas hacia abajo. Si las notas de dos voces que tienen las +plicas en la misma dirección se sitúan en la misma posición y las dos +voces no tienen ningún desplazamiento o llevan especificado el mismo +desplazamiento, se producirá el mensaje de error @qq{Chocan demasiadas +columnas de notas}. + + +@seealso +Referencia de la notación: +@ruser{Varias voces}. + + +@node Voces y música vocal +@subsection Voces y música vocal +@translationof Voices and vocals + + +La música vocal presenta una dificultad especial: tenemos que combinar +dos expresiones, a saber, las notas y la letra. + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics, creación de un contexto +@cindex letra, creación de un contexto de +@cindex letra, enlazar con una voz + +Ya ha visto la instrucción @code{\addlyrics@{@}}, que maneja bien +partituras sencillas. Sin embargo esta técnica es algo limitada. +Para música de mayor complejidad, tenemos que introducir la letra en +un contexto @code{Lyrics} utilizando @code{\new Lyrics} y enlazar +explícitamente la letra y las notas mediante @code{\lyricsto@{@}}, +usando el nombre asignado a la voz. + +@lilypond[quote,verbatim] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +Observe que la letra se debe enlazar a un contexto de @code{Voice}, +@emph{no} a un contexto de @code{Staff}. Este es un caso en que es +necesario crear contextos de @code{Staff} y de @code{Voice} +explícitamente. + +@cindex letra y barrado +@cindex barrado y letra +@funindex \autoBeamOff +@funindex autoBeamOff + +El barrado automático que LilyPond usa de forma predeterminada +funciona bien para la música instrumental, pero no tan bien para +música con letra, donde o bien el barrado no se necesita en absoluto, +o bien se utiliza para indicar los melismas de la letra. En el +ejemplo anterior hemos utilizado la instrucción @code{\autoBeamOff} +para desactivar el barrado automático. + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode +@cindex vocal, estructura de una partitura +@cindex coro, sistema de + +Ahora vamos a reutilizar el ejemplo anterior de «Judas Macabeo» para +ilustrar esta técnica más flexible. Primero la reescribiremos para +que use variables, de manera que la música y la letra se puedan +separar de la estructura de pentagramas. También introduciremos una +llave de grupo de ChoirStaff. La letra en sí se debe introducir con +@code{\lyricmode} para estar seguros de que se interpreta como letra y +no como música. + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +Ésta es la estructura básica de todas las partituras vocales. Se +pueden añadir más pentagramas según se necesite, se pueden añadir más +voces a los pentagramas y más estrofas a la letra, y las variables que +contienen la música se pueden colocar fácilmente en archivos separados +cuando se hagan demasiado largos. + +@cindex himno, estructura de +@cindex SATB, estructura de +@cindex vocal, partitura, varias estrofas +@cindex varias estrofas vocales +@cindex estrofas, varias, vocales + +A continuación podemos ver un ejemplo final de la primera línea de un +himno con cuatro estrofas, para coro SATB. En este caso la letra de +las cuatro partes es la misma. Observe cómo utilizamos variables para +separar la notación musical de la estructura de pentagramas. Observe +también cómo se utiliza una variable, para la que hemos elegido el +nombre @q{TimeKey} («compás y tonalidad»), para que contenga varias +instrucciones que se usarán dentro de los dos pentagramas. En otros +ejemplos se le suele dar el nombre de @q{global}. + + + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Música vocal}. + + +@node Contextos y grabadores +@section Contextos y grabadores +@translationof Contexts and engravers + +Los contextos y grabadores se han mencionado de manera informal en +secciones anteriores; ahora tan sólo vamos a ver estos conceptos con +más detalle, pues son importantes en el ajuste fino de la salida de +LilyPond. + +@menu +* Explicación de los contextos:: +* Crear contextos:: +* Explicación de los grabadores:: +* Modificar las propiedades de los contextos:: +* Añadir y eliminar grabadores:: +@end menu + +@node Explicación de los contextos +@subsection Explicación de los contextos +@translationof Contexts explained + +@cindex contextos, explicación de los + +Cuando se imprime la música, se tienen que añadir a la salida una gran +cantidad de elementos notacionales que no aparecen explícitamente en +el archivo de entrada. Por ejemplo, compare la entrada y la salida +del siguiente ejemplo: + +@lilypond[quote,verbatim,relative=2] +cis4 cis2. | a4 a2. | +@end lilypond + +La entrada es bastante escueta, pero en la salida se han añadido las +líneas divisorias, las alteraciones, la clave y la armadura de la +tonalidad. Cuando LilyPond @emph{interpreta} la entrada, la +información musical se analiza de izquierda a derecha de igual forma +que un intérprete lee la partitura. Mientras se lee el código de +entrada, el programa recuerda dónde están los límites de los compases, +y qué alturas requieren alteraciones accidentales explícitas. Esta +información se debe conservar a varios niveles. Por ejemplo, una +alteración accidental afecta solamente a un pentagrama, mientras que +una línea divisoria debe estar sincronizada a lo largo de todo el +sistema. + +Dentro de LilyPond, estas reglas y pequeñas porciones de información +se agrupan en @emph{Contexts}. Ya hemos visto el contexto de voz, +@code{Voice}. Otros ejemplos de contextos son @code{Staff} (Pauta o +pentagrama) y @code{Score} (Partitura). Los contextos son +jerárquicos, de forma que reflejan la naturaleza jerárquica de una +partitura musical. Por ejemplo: un contexto de @code{Staff} contener +muchos contextos de @code{Voice}, y un contexto de @code{Score} puede +contener muchos contextos de @code{Staff}. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Cada contexto asume la responsabilidad de imponer algunas reglas de +notación, creando ciertos objetos de notación y manteniendo las +propiedades asociadas. Por ejemplo, el contexto @code{Voice} puede +introducir una alteración accidental y entonces el contexto +@code{Staff} mantiene la regla de mostrar o suprimir la alteración +para el resto del compás. + +Otro ejemplo lo constituye el hecho de que la sincronización de las +líneas divisorias se gestiona dentro del contexto de la partitura, +@code{Score}, de forma predeterminada. Sin embargo, en algunas +músicas posiblemente no queramos que las líneas divisorias estén +sincronizadas (pensemos en una partitura polimétrica en compases de +4/4 y de 3/4). En tales casos, debemos modificar los ajustes por +omisión de los contextos @code{Score} y @code{Staff}. + +Para partituras muy sencillas, los contextos se crean implícitamente y +no debemos preocuparnos por ellos. Para piezas mayores, como por +ejemplo cualquiera que tenga más de un pentagrama, los contextos se +deben crear explícitamente para asegurarnos de que tendremos la +cantidad exacta de pentagramas que necesitamos, y que están en el +orden correcto. Para tipografiar piezas con notación especializada, +es frecuente la modificación de contextos existentes o incluso definir +unos completamente nuevos. + + +Además de los contextos @code{Score,} @code{Staff} y @code{Voice}, hay +contextos que se sitúan entre los niveles de partitura y de pentagrama +para controlar los grupos de pentagramas, como los contextos +@code{PianoStaff} y @code{ChoirStaff}. También existen contextos +alternativos de pentagrama y de voz, y contextos para la letra, la +percusión, diagramas de trastes, bajo cifrado, etc. + +Los nombres de todos los tipos de contextos se componen de una o más +palabras que comienzan con mayúscula y que están unidas unas a otras +sin guión ni barra baja, por ejemplo: +@code{GregorianTranscriptionStaff}. + + +@seealso +Referencia de la notación: +@ruser{Explicación de los contextos}. + + +@node Crear contextos +@subsection Crear contextos +@translationof Creating contexts + +@funindex \new +@funindex new +@cindex nuevos contextos +@cindex creación de contextos +@cindex contextos, creación de + +En un archivo de entrada, el bloque de partitura, que se presenta +precedido por la instrucción @code{\score}, contiene una sola +expresión musical y una definición de salida asociada (bien un bloque +@code{\layout} o bien un bloque @code{\midi}). El contexto +@code{Score} se suele dejar que se cree automáticamente cuando +comienza la interpretación de esa expresión musical. + +Para partituras que solamente tienen una voz y un pentagrama, podemos +también dejar que los contextos @code{Voice} y @code{Staff} se creen +automáticamente, pero para partituras más complejas es necesario +crearlos a mano. La instrucción más simple que hace esto es +@code{\new}. Se antepone a una expresión musical, por ejemplo + +@example +\new @var{tipo} @var{expresión_musical} +@end example + +@noindent +donde @var{tipo} es el nombre de un contexto (como @code{Staff} o +@code{Voice}). Esta instrucción crea un contexto nuevo, y comienza a +interpretar la @var{expresión_musical} que está dentro de ese +contexto. + +@warning{No se debe usar @bs{}@code{new Score} porque el contexto +@code{Score} esencial del nivel superior ya se crea automáticamente al +interpretarse la expresión musical que está dentro del bloque +@bs{}@code{score}. Los valores predeterminados de propiedades de +contexto válidos para toda la partitura se pueden cambiar dentro del +bloque @bs{}@code{layout}. Véase @ref{Modificar las propiedades de +los contextos}.} + +En las secciones anteriores ha podido ver muchos ejemplos prácticos que +creaban nuevos contextos de @code{Staff} y de @code{Voice}, pero para +recordarle cómo se emplean estas instrucciones en la práctica, he aquí +un ejemplo anotado de música real: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \clef "treble" + \key g \minor + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. | + d4 ees16 c8. | + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \clef "bass" + \key g \minor + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, | + g8 ees, | + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees | + g4 ees | + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Observe cómo todas las instrucciones que abren un bloque con una +llave curva, @code{@{}, o con ángulos dobles, @code{<<}, están +sangrados (tienen un margen adicional) con dos espacios adicionales, y +la llave de cierre correspondiente tiene un margen exactamente igual. +Aunque no es necesario, la observancia de esta práctica reducirá +considerablemente el número de errores de @q{paréntesis +descompensados}, y se recomienda vivamente. Permite apreciar de un +solo vistazo la estructura de la música, y cualquier paréntesis +descompensado aparecerá con obviedad. Observe también cómo el +pentagrama de la MI se crea usando dobles ángulos porque requiere dos +voces, mientras que el pentagrama de la MD se crea con una expresión +musical única encerrada entre llaves porque sólo requiere una voz.) + + +@cindex contextos, nombrado +@cindex nombrar contextos + +La instrucción @code{\new} también puede otorgar un nombre +identificativo al contexto para distinguirlo de otros contextos del +mismo tipo: + +@example +\new @var{tipo} = @var{identificador} @var{expresión_musical} +@end example + +Observe la distinción entre el nombre del tipo de contexto, +@code{Staff}, @code{Voice}, etc., y el nombre identificativo de una +instancia en particular de ese tipo, que puede ser cualquier secuencia +de letras inventada por el usuario. En el nombre identificativo +también se pueden utilizar dígitos y espacios, pero en este caso aquél +debe ir entre comillas p.ej. @code{\new Staff = "MiPentagrama 1" +@var{expresión_musical}}. El nombre identificativo se utiliza para +referirnos más tarde a esa instancia en particular de un contexto. +Hemos visto esto en la sección acerca de la letra, en @ref{Voces y música vocal}. + + +@seealso +Referencia de la notación: +@ruser{Crear contextos}. + + +@node Explicación de los grabadores +@subsection Explicación de los grabadores +@translationof Engravers explained + +@cindex grabadores + +Todas y cada una de las marcas de la salida impresa de una partitura +hecha con LilyPond está producida por un @code{Engraver} (grabador). +Así, tenemos un grabador para imprimir pentagramas, otro para imprimir +las cabezas de las notas, otro para las plicas, otro para las barras, +etc, etc. ¡En total hay más de 120 grabadores! Afortunadamente, para +la mayor parte de las partituras no es necesario conocer más que +algunos, y para partituras sencillas no tenemos que saber nada de +ninguno de ellos. + +Los grabadores residen y operan dentro de Contextos. Los grabadores +como el grabador de la indicación metronómica, +@code{Metronome_mark_engraver}, cuya acción y resultado se aplican a +la partitura como un todo, operan en el contexto del nivel más alto: +el contexto de partitura @code{Score}. + +El grabador de la clave @code{Clef_engraver} y el de la armadura +@code{Key_engraver} se encuentran probablemente en todos los contextos +de pentagrama (@code{Staff}), pues los distintos pentagramas podrían +requerir diferentes claves y armaduras. + +El grabador de las cabezas de nota @code{Note_heads_engraver} y el de +las plicas @code{Stem_engraver} viven en cada uno de los contextos de +voz @code{Voice}, el contexto de nivel más bajo de todos. + +Cada grabador procesa los objetos particulares asociados con su +función, y mantiene las propiedades que están relacionadas con dicha +función. Estas propiedades, como las que están asociadas con los +contextos, se pueden modificar para cambiar el funcionamiento del +grabador o el aspecto de esos elementos en la partitura impresa. + +Todos los grabadores tienen nombres compuestos de varias palabras que +describen su función. Sólo está en mayúsculas la inicial de la +primera palabra, y el resto se le une mediante guiones bajos. Así, el +grabador @code{Staff_symbol_engraver} es responsable de la creación de +las líneas del pentagrama, y el @code{Clef_engraver} determina y +establece la altura o el punto de referencia sobre el pentagrama +dibujando un símbolo de clave. + +A continuación presentamos algunos de los grabadores más comunes, +junto a su función. Podrá comprobar que es fácil adivinar la función +a partir del nombre (en inglés), y viceversa. + +@multitable @columnfractions .3 .7 +@headitem Grabador + @tab Función +@item Accidental_engraver + @tab Hace las alteraciones accidentales, de precaución y de sugerencia. +@item Beam_engraver + @tab Graba las barras +@item Clef_engraver + @tab Graba las claves +@item Completion_heads_engraver + @tab Divide las notas que atraviesan una línea divisoria +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Crea reguladores e indicaciones dinámicas textuales +@item Forbid_line_break_engraver + @tab Evita los saltos de línea si queda algún elemento musical activo +@item Key_engraver + @tab Crea la armadura de la tonalidad +@item Metronome_mark_engraver + @tab Graba la indicación metronómica +@item Note_heads_engraver + @tab Graba la cabeza de las notas +@item Rest_engraver + @tab Graba los silencios +@item Staff_symbol_engraver + @tab Graba las cinco líneas (de forma predeterminada) del pentagrama +@item Stem_engraver + @tab Crea las plicas y los trémolos de una sola plica +@item Time_signature_engraver + @tab Crea las indicaciones de compás +@end multitable + +@smallspace + +Más adelante veremos cómo la salida de LilyPond se puede cambiar +mediante la modificación del funcionamiento de los Grabadores. + + +@seealso +Referencia de funcionamiento interno: +@rinternals{Engravers and Performers}. + + +@node Modificar las propiedades de los contextos +@subsection Modificar las propiedades de los contextos +@translationof Modifying context properties + +@cindex contexto, propiedades de +@cindex contexto, propiedades de, modificación +@cindex modificar las propiedades de contexto +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +Los contextos se responsabilizan de mantener los valores de un cierto +número de @emph{properties} de contexto. Muchas de ellas se pueden +cambiar para influir en la interpretación del código de entrada y +cambiar así la apariencia de la salida impresa. Se modifican mediante +la instrucción @code{\set}. Esta instrucción toma la forma siguiente: + +@example +\set @emph{NombreDelContexto}.@emph{nombreDeLaPropiedad} = #@emph{valor} +@end example + +Donde el @emph{NombreDelContexto} es normalmente @code{Score}, +@code{Staff} o @code{Voice}. Se puede omitir, en cuyo caso se supone +que es el contexto en curso (normalmente @code{Voice}). + +Los nombres de las propiedades de contexto consisten en palabras +unidas sin ningún guión o barra baja, y donde todas las palabras +excepto la primera empiezan en mayúscula. A continuación podemos ver +algunos ejemplos de nombres de propiedades utilizadas con frecuencia. +Hay muchas más que las que se muestran aquí. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem nombreDeLaPropiedad + @tab Tipo + @tab Función + @tab Valor de ejemplo +@item extraNatural + @tab Booleano + @tab Si es verdadero, poner becuadros adicionales antes de las alteraciones + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Entero + @tab Ajustar el número del compás actual + @tab @code{50} +@item doubleSlurs + @tab Booleano + @tab Si es verdadero, imprimir ligaduras de expresión por encima y por debajo de las notas + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Texto + @tab Establecer el nombre del pentagrama, situado a la izquierda + @tab @code{"Cello I"} +@item fontSize + @tab Real + @tab Aumentar o disminuir el tamaño de la fuente tipográfica + @tab @code{2.4} +@item stanza + @tab Texto + @tab Establecer el texto que se imprime antes del comienzo de una estrofa + @tab @code{"2"} +@end multitable + +@noindent +donde un valor Booleano es verdadero (@code{#t}, True) o falso +(@code{#f}, False), un Entero es un número entero positivo, un número +Real es un número decimal positivo o negativo, y el texto se encierra +entre comillas dobles. Observe la aparición de signos de cuadradillo, +(@code{#}), en dos lugares diferentes: como parte del valor Booleano +antes de la @code{t} o la @code{f}, y antes del @emph{valor} dentro de +la sentencia @code{\set}. Así pues, cuando se está escribiendo un +valor Booleano, hay que escribir dos signos de cuadradillo, por +ejemplo: @code{##t}. + +@cindex propiedades que funcionan en contextos +@cindex establecer propiedades en contextos + +Antes de poder establecer cualquiera de estas propiedades, tenemos que +saber en qué contexto operan. A veces es algo obvio, pero en +ocasiones puede ser algo enrevesado. Si especificamos un contexto +equivocado, no se produce ningún mensaje de error, pero el +funcionamiento esperado no tendrá lugar. Por ejemplo, la propiedad +@code{instrumentName} (nombre del instrumento) vive claramente dentro +del contexto de @code{Staff}, puesto que es el pentagrama el que debe +ser nombrado. En este ejemplo, el primer pentagrama resulta +etiquetado, pero no el segundo, porque hemos omitido el nombre del +contexto. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c2 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d2 d + } +>> +@end lilypond + +Recuerde que el nombre del contexto predeterminado es @code{Voice}, +así que la segunda instrucción @code{\set} establece la propiedad +@code{instrumentName} del contexto @code{Voice} a @qq{Alto}, pero como +LilyPond no busca esta propiedad en el contexto @code{Voice}, no se +realiza ninguna acción. Esto no es un error, y no se registra ningún +mensaje en el archivo Log de registro de errores. + +De forma parecida, si el nombre de la propiedad se escribe con alguna +falta, no se produce ningún mensaje de error, y claramente la acción +esperada no puede tener lugar. De hecho, se puede establecer +cualquier @q{property} (ficticia) usando cualquier nombre que queramos +en cualquier contexto que exista, mediante el uso de la instrucción +@code{\set}. Pero si el nombre no es conocido para LilyPond, no +producirá ninguna acción. Algunos editores de texto que apoyan a los +archivos de entrada de LilyPond de manera especial, documentan los +nombres de propiedades con viñetas cuando pasamos sobre ellos con el +puntero del ratón, como JEdit con la extensión LilyPondTool, o +resaltan los nombres de propiedades desconocidas de manera diferente, +como ConTEXT. Si no se utiliza un editor con tales posibilidades, se +recomienda comprobar la corrección del nombre de la propiedad en el +manual de Referencia de funcionamiento interno: véase +@rinternals{Tunable context properties} o @rinternals{Contexts}. + +La propiedad @code{instrumentName} tendrá efecto solamente si se +establece dentro del contexto @code{Staff}, pero algunas propiedades +se pueden establecer en más de un contexto. Por ejemplo, la propiedad +@code{extraNatural} está establecida por defecto al valor @code{##t} +(verdadero) para todos los pentagramas. Si se establece a @code{##f} +(falso) en un contexto de @code{Staff} determinado, se aplicará +solamente a las alteraciones de ese pentagrama. Si se establece a +falso en el contexto de la partitura, @code{Score}, se aplicará a +todos los pentagramas. + +Así, esto desactivará los becuadros adicionales en un pentagrama: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +y esto los desactivará en todos los pentagramas: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +Como un ejemplo más, si se establece @code{clefOctavation} dentro del +contexto de @code{Score}, éste cambia inmediatamente el valor de la +octavación en todos los pentagramas en curso y establece un nuevo +valor predeterminado que se aplicará a todos los pentagramas. + +La instrucción opuesta, @code{\unset}, tiene el efecto de suprimir la +propiedad del contexto, lo que ocasiona que la mayoría de las +propiedades vuelvan a su valor predeterminado. Normalmente no es +necesario el uso de @code{\unset}, pues una nueva instrucción +@code{\set} hará el ajuste deseado. + +Las instrucciones @code{\set} y @code{\unset} pueden aparecer en +cualquier lugar del archivo de entrada y tendrán efecto a partir del +tiempo en que se encuentran y hasta el final de la partitura o hasta +que la propiedad se establezca de nuevo mediante @code{\set} o +@code{\unset}. Probemos a modificar el tamaño de la fuente +tipográfica, lo que afecta al tamaño de las cabezas de las notas +(entre otras cosas) varias veces. El cambio se toma a partir del +valor predeterminado, no el valor en curso. + +@lilypond[quote,verbatim,ragged-right,relative=1] +c4 d +% make note heads smaller +\set fontSize = #-4 +e4 f | +% make note heads larger +\set fontSize = #2.5 +g4 a +% return to default size +\unset fontSize +b4 c | +@end lilypond + +Hemos podido ver cómo establecer los valores de diversos tipos de +propiedad diferentes. Observe que los números enteros y reales van +siempre precedidos de un símbolo de cuadradillo, @code{#}, mientras +que un valor booleano verdadero o falso se especifica mediante +@code{##t} y @code{##f}, con dos cuadradillos. Una propiedad de texto +se debe encerrar entre comillas dobles, como antes, aunque veremos más +adelante que el texto realmente se puede especificar de una forma +mucho más general utilizando la potentísima instrucción @code{markup}. + +@subsubheading Cambiar las propiedades de un contexto con @code{\with} + +@funindex \with +@funindex with +@cindex contexto, propiedades de, establecimiento con \with + +El valor predeterminado de las propiedades de contexto se puede establecer en el momento +en que se crea el contexto. A veces esta forma de establecer el valor +de una propiedad es mucho más clara, si ha de quedar fijo durante todo +el tiempo que dure el contexto. Cuando se crea un contexto con una +instrucción @code{\new} puede ir inmediatamente seguido de un bloque +@code{\with @{ .. @}} en el que se establecen los valores predeterminados de las +propiedades. Por ejemplo, si queremos suprimir la impresión de +becuadros adicionales para toda la duración de un pentagrama, podemos +escribir: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +de la siguiente forma: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + gis4 ges aes ais + } + } + \new Staff \with { extraNatural = ##f } { + \relative c'' { + gis4 ges aes ais + } + } +>> +@end lilypond + +Las propiedades ajustadas de esta manera aún pueden cambiarse +dinámicamente utilizando @code{\set} y ser devueltas al valor +predeterminados que se estableció en el bloque @code{\with} mediante +@code{\unset}. + +@cindex fontSize (tamaño de la tipografía) +@cindex fuente, tamaño de la +@cindex tamaño de la fuente + +Así pues, si la propiedad @code{fontSize} se ajusta dentro de una +cláusula @code{\with}, tiene el efecto de reiniciar el valor +predeterminado del tamaño de la fuente tipográfica. Si más tarde se +modifica con @code{\set}, este nuevo valor predeterminado puede +restablecerse con la instrucción @code{\unset fontSize}. + +@subsubheading Cambiar las propiedades de un contexto con @code{\context} + +@cindex contextos, establecer propiedades de, con \context +@funindex \context +@funindex context + +Los valores de propiedad de los contextos se pueden establecer para +@emph{todos} los contextos de un tipo determinado, como por ejemplo +todos los contextos de @code{Staff}, con una única instrucción. El +tipo de contexto se identifica mediante la utilización del nombre de +su tipo, como @code{Staff}, precedido de una barra invertida: +@code{\Staff}. El enunciado que establece el valor de la propiedad es +el mismo que el que está en un bloque @code{\with}, presentado +anteriormente. Se coloca en un bloque @code{\context} dentro de un +bloque @code{\layout}. Cada bloque @code{\context} afecta a todos los +contextos del tipo especificado a lo largo del bloque @code{\score} o +@code{\book} en el que aparece el bloque @code{\layout}. A +continuación presentamos un ejemplo que muestra el formato: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond + +Si se quiere aplicar la sobreescritura de propiedades a todos los +pentagramas de la partitura: + +@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 +Las propiedades de contexto establecidas de esta forma se pueden +sobreescribir para ejemplares concretos de contextos mediante +enunciados dentro de un bloque @code{\with}, y mediante instrucciones +@code{\set} intercaladas dentro de enunciados musicales. + + +@seealso +Referencia de la notación: +@ruser{Cambiar los valores por omisión de los contextos}, +@c FIXME +@c uncomment when backslash-node-name issue is resolved -pm +@ruser{La instrucción set}. + +Referencia de funcionamiento interno: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Añadir y eliminar grabadores +@subsection Añadir y eliminar grabadores +@translationof Adding and removing engravers + +@cindex grabadores, adición +@cindex grabadores, eliminación +@cindex adición de grabadores +@cindex eliminación de grabadores + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +Hemos visto que cada uno de los contextos contiene varios grabadores, +cada uno de los cuales a su vez es responsable de la producción de una +fracción particular del resultado impreso, como líneas divisorias, +pentagramas, cabezas, plicas, etc. Si un grabador es eliminado de un +contexto, ya no podrá producir su salida impresa. Es una forma algo +radical de modificar la salida, pero a veces puede ser útil. + +@subsubheading Cambiar un solo contexto + +Para eliminar un grabador de un contexto único, usamos la instrucción +@code{\with} situada inmediatamente después de la instrucción que crea +el contexto, como en la sección anterior. + +Como ilustración, repitamos un ejemplo extraído de la sección anterior +con las líneas del pentagrama eliminadas. Recuerde que las líneas del +pentagrama están dibujadas por el grabador +@code{Staff_symbol_engraver}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % make note heads smaller + e4 f | + \set fontSize = #2.5 % make note heads larger + g4 a + \unset fontSize % return to default size + b4 c | +} +@end lilypond + +@cindex ámbito, grabador del + +Los grabadores también se pueden añadir a los contextos individuales +La instrucción que lo hace es + +@code{\consists @var{Nombre_del_grabador}}, + +situada dentro de un bloque @code{\with}. Ciertas partituras vocales +tienen una indicación de ámbito o tesitura situada al principio del +pentagrama para indicar el ámbito de notas en dicho pentagrama, véase +@rglos{ambitus}. El ambitus se produce por parte del grabador +@code{Ambitus_engraver}, que normalmente no está incluido en ningún +contexto. Si lo añadimos al contexto @code{Voice}, calcula el rango a +partir de esa única voz: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +pero si añadimos el grabador de ámbito al contexto de @code{Staff}, +calcula el rango de todas las notas en todas las voces de ese +pentagrama: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@subsubheading Cambiar todos los contextos del mismo tipo + +@funindex \layout +@funindex layout + +Los ejemplos anteriores muestran la manera de eliminar o añadir +grabadores a los contextos individuales. También es posible eliminar +o añadir grabadores a todos los contextos de un tipo específico, +situando las instrucciones en el contexto correspondiente dentro de un +bloque @code{\layout}. Por ejemplo, si queremos mostrar los rangos de +tesitura para todos los pentagramas de una partitura de cuatro pautas, +podemos escribir + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +Los valores predeterminados de las propiedades de los contextos +también se pueden establecer para todos los contextos de un tipo en +particular incluyendo la instrucción @code{\set} dentro de un bloque +@code{\context} de la misma forma. + + +@seealso +Referencia de la notación: +@ruser{Modificar los complementos (plug-ins) de contexto}, +@ruser{Cambiar los valores por omisión de los contextos}. + +@knownissues +Los grabadores @code{Stem_engraver} y @code{Beam_engraver} +(de plica y de barra) adjuntan a la cabeza de las notas +los objetos que crean. Si se suprime el grabador de cabezas de nota +@code{Note_heads_engraver}, no se produce ninguna cabeza y por tanto +no se crean tampoco plicas ni barras. + + +@node Extender las plantillas +@section Extender las plantillas +@translationof Extending the templates + +Ha leído el tutorial y ahora sabe escribir música. Pero ¿cómo puede +poner los pentagramas que quiere? Las plantillas están muy bien, pero +¿qué ocurre si quiere algo que no está en una de ellas? Bien, puede +encontrar montañas de plantillas (véase @ref{Plantillas}) que le pueden +servir como punto de partida. Pero ¿y si quiere algo que no está +contemplado aquí? Continúe leyendo. + + +@menu +* Soprano y violoncello:: +* Partitura vocal a cuatro voces SATB:: +* Crear una partitura partiendo de cero:: +* Ahorrar tecleo mediante variables y funciones:: +* Partituras y particellas:: +@end menu + +@node Soprano y violoncello +@subsection Soprano y violoncello +@translationof Soprano and cello + +@cindex plantilla, modificar +@cindex modificar plantillas + +Para empezar, tome la plantilla que le parezca más parecida a aquello +que quiere conseguir. Digamos que quiere escribir algo para soprano y +cello. En este caso comenzaríamos con la plantilla @q{Notas y letra} +(para la parte de soprano). + +@example +\version @w{"@version{}"} +melodia = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +texto = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "uno" @{ + \autoBeamOff + \melodia + @} + \new Lyrics \lyricsto "uno" \texto + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Ahora queremos añadir una parte de violoncello. Veamos el ejemplo +@q{Sólo notas}: + +@example +\version @w{"@version{}"} +melodia = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melodia + \layout @{ @} + \midi @{ @} +@} +@end example + +No necesitamos dos instrucciones @code{\version}. Vamos a necesitar +la sección @code{melodia}. No queremos dos secciones @code{\score} +(si tuviésemos dos @code{\score}s, acabaríamos con las dos particellas +por separado. Queremos las dos juntas, como un dúo. Dentro de la +sección @code{\score}, no nos hacen falta dos @code{\layout} ni dos +@code{\midi}. + +Si nos limitásemos a copiar y pegar la sección @code{melodia}, +acabaríamos con dos secciones @code{melodia} separadas, así que vamos +a cambiarles el nombre. Llamaremos @code{musicaSoprano} a la sección +de la soprano y @code{musicaCello} a la sección del violoncello. Al +mismo tiempo cambiaremos el nombre de @code{texto} a +@code{letraSoprano}. Recuerde cambiar el nombre a las dos apariciones +de todos estos nombres -- tanto la definición inicial (la parte +@code{melodia = relative c' @{ }) -- como el uso de ese nombre (en la +sección @code{\score}). + +También aprovecharemos para cambiar el pentagrama de la parte del +cello (los violoncellos se escriben normalmente en clave de Fa). +Asimismo, cambiaremos algunas notas del cello. + +@example +\version @w{"@version{}"} +musicaSoprano = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +letraSoprano = \lyricmode @{ + Aaa Bee Cee Dee +@} + +musicaCello = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score@{ + << + \new Voice = "uno" @{ + \autoBeamOff + \musicaSoprano + @} + \new Lyrics \lyricsto "uno" \letraSoprano + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Esto tiene una apariencia prometedora, pero la parte del cello no sale +en la partitura (no la hemos puesto en la sección @code{\score}). Si +queremos que la parte del cello aparezca debajo de la de soprano, +tenemos que añadir + +@example +\new Staff \musicaCello +@end example + +@noindent +justo debajo de todo lo de la soprano. También tenemos que poner +@code{<<} y @code{>>} antes y después de la música -- lo que indica a +LilyPond que hay más de una cosa (en este caso, @code{Staff}) +sucediendo al mismo tiempo --. La @code{\score} se parecerá ahora a +esto: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "uno" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "uno" \letraSoprano + >> + \new Staff \musicaCello + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Esto parece un poco enrevesado; los márgenes están descuadrados. Esto +tiene fácil solución. Presentamos aquí la plantilla completa para +soprano y cello. + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +Las plantillas de inicio se pueden encontrar en el apéndice +@q{Templates}, véase @ref{Pentagrama único}. + + +@node Partitura vocal a cuatro voces SATB +@subsection Partitura vocal a cuatro voces SATB +@translationof Four-part SATB vocal score + +La mayor parte de las partituras vocales escritas para coro mixto a +cuatro voces con acompañamiento orquestal, como el «Elías» de +Mendelssohn o el «Mesías» de Haendel, tienen la música coral y la +letra en cuatro pentagramas para S, A, T y B, respectivamente, con una +reducción de piano del acompañamiento de orquesta, por debajo. He aquí +un ejemplo del «Mesías» de Haendel: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} + +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords + +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords + +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords + +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} + +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +Ninguna de las plantillas proporciona esta disposición con exactitud. +La más parecida es @q{partitura vocal SATB y reducción de piano +automática} (véase @ref{Conjuntos vocales}), pero necesitamos cambiar la +disposición y añadir un acompañamiento de piano que no esté derivado +automáticamente de las partes vocales. Las variables que contienen la +música y la letra de las partes vocales es adecuada, pero tendremos +que añadir variables para la reducción de piano. + +El orden en que aparecen los contextos en el ChoirStaff de la +plantilla no se corresponde con el orden de la partitura vocal que +hemos mostrado más arriba. Tenemos que reordenarlas para que haya +cuatro pentagramas con la letra escrita directamente bajo las notas de +cada parte. Todas las voces deben ser @code{\voiceOne}, que es la +predeterminada, para que las instrucciones @code{\voiceXXX} se puedan +eliminar. También tenemos que especificar la clave de tenor (clave de +sol octava baja) en las partes de tenor. Aún no hemos encontrado la +forma en que la letra se especifica en la plantilla, así que tenemos +que utilizar el método que nos resulta familiar. También tenemos que +escribir los nombres de cada pentagrama. + +Al hacerlo así obtenemos el ChoirStaff siguiente: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \musicaSoprano + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \letraSoprano + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \musicaAlto + @} + >> + \new Lyrics \lyricsto "altos" @{ + \letraAlto + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \musicaTenor + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \letraTenor + @} + \new Staff = "bajos" << + \set Staff.instrumentName = #"Bajo" + \new Voice = "bajos" @{ + \global + \musicaBajo + @} + >> + \new Lyrics \lyricsto "bajos" @{ + \letraBajo + @} +>> % fin del ChoirStaff +@end example + +A continuación debemos trabajar sobre la parte de piano. Es fácil: +tan sólo hay que sacar la parte de piano de la plantilla de @q{Piano +solista}: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "superior" \superior + \new Staff = "inferior" \inferior +>> +@end example + +y escribir las definiciones de variable para @code{superior} e +@code{inferior}. + +Los grupos ChoirStaff y PianoStaff se deben combinar utilizando +ángulos dobles, ya queremos apilarlos unos sobre otros: + +@example +<< % combinar los grupos ChoirStaff y PianoStaff uno sobre el otro + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \musicaSoprano + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \letraSoprano + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \musicaAlto + @} + >> + \new Lyrics \lyricsto "altos" @{ + \letraAlto + @} + \new Staff = "tenores" << + \clef "G_8" % clave de tenor + \new Voice = "tenores" @{ + \global + \musicaTenor + @} + >> + \new Lyrics \lyricsto "tenores" @{ + \letraTenor + @} + \new Staff = "bajos" << + \clef "bass" + \new Voice = "bajos" @{ + \global + \musicaBajo + @} + >> + \new Lyrics \lyricsto "bajos" @{ + \letraBajo + @} + >> % fin del ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Al combinar todo esto junto y escribir la música de los tres compases +del ejemplo anterior, obtenemos: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Crear una partitura partiendo de cero +@subsection Crear una partitura partiendo de cero +@translationof Building a score from scratch + +@cindex plantilla, escribir su propia +@cindex ejemplo de escritura de una partitura +@cindex escribir una partitura, ejemplo +@cindex partitura, ejemplo de escritura + +Después de adquirir algo de soltura en la escritura del código de +LilyPond, se dará cuenta de que es más fácil construir completamente +una partitura partiendo de cero, que modificar una plantilla. También +puede desarrollar su propio estilo de forma que se adapte al tipo de +música que le apetezca. Veamos a continuación cómo confeccionar una +partitura para un preludio de órgano, como ejemplo. + +Comenzamos con una sección para el encabezamiento. Aquí es donde van +el título, nombre del compositor, etc., después van las definiciones +de las variables, y finalmente el bloque de partitura. Comencemos a +verlas por encima y más tarde completaremos los detalles. + +Utilizaremos los dos primeros compases del preludio de Bach basado en +@emph{Jesu, meine Freude}, que está escrito para órgano con dos +manuales y pedal. Tiene estos dos compases de música al final de la +sección. La parte del manual superior tiene dos voces, y el inferior +y el pedal, una voz cada uno. Así pues, necesitamos cuatro +definiciones para la música y una más para definir el compás y la +tonalidad: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +keyTime = @{ \key c \minor \time 4/4 @} +MusicaManualUnoVozUno = @{ s1 @} +MusicaManualUnoVozDos = @{ s1 @} +MusicaManualDos = @{ s1 @} +MusicaPedal = @{ s1 @} + +\score @{ +@} +@end example + +Por el momento hemos escrito tan sólo una nota espaciadora, @code{s1}, +en lugar de la música de verdad. La añadiremos más adelante. + +A continuación veamos qué va en el bloque de partitura. +Sencillamente, reflejaremos la estructura de pentagramas que deseemos. +La música de órgano se escribe por lo general en tres pentagramas, uno +para cada uno de los manuales y otro para el pedal. Los pentagramas +de los manuales se abarcan con una llave, así que los incluiremos en +un grupo PianoStaff. La primera parte de manual tiene dos voces, y la +segunda sólo una. + +@example +\new PianoStaff << + \new Staff = "ManualUno" << + \new Voice @{ + \MusicaManualUnoVozUno + @} + \new Voice @{ + \MusicaManualUnoVozDos + @} + >> % fin del contexto de Staff ManualUno + \new Staff = "ManualDos" << + \new Voice @{ + \MusicaManualDos + @} + >> % fin del contexto de Staff ManualDos +>> % fin del contexto de PianoStaff +@end example + +Después, tenemos que añadir un pentagrama para el órgano de pedal. +Esto va por debajo del PianoStaff, pero debe ser simultáneo con él, +por lo que escribimos dobles ángulos rodeando a los dos. Si esto se +nos olvida, se producirá un error en el archivo log de registro. ¡Es +un error muy común que cometerá antes o después! Intente copiar el +ejemplo final que aparece al final de la sección, borre los dobles +ángulos y procese el archivo para ver qué error produce. + +@example +<< % el grupo PianoStaff y el pentagrama de Pedal son simultáneos + \new PianoStaff << + \new Staff = "ManualUno" << + \new Voice @{ + \MusicaManualUnoVozUno + @} + \new Voice @{ + \MusicaManualUnoVozDos + @} + >> % fin del contexto de Staff ManualUno + \new Staff = "ManualDos" << + \new Voice @{ + \MusicaManualDos + @} + >> % fin del contexto de Staff ManualDos + >> % fin del contexto de PianoStaff + \new Staff = "OrganoPedal" << + \new Voice @{ + \MusicaOrganoPedal + @} + >> +>> +@end example + +No es necesario utilizar la construcción simultánea @code{<< >>} para +el pentagrama del manual dos y el pentagrama del órgano de pedal, ya +que contienen una única expresión, pero no hace daño, y es una buena +costumbre utilizar siempre dobles ángulos después de @code{\new Staff} +cuando hay varias voces. Lo opuesto es cierto para las voces: +normalmente deben ir seguidas de llaves @code{@{ .. @}} en caso de que +tengamos música codificada como distintas variables que se deben +situar consecutivamente. + +Añadamos esta estructura al bloque de partitura, y ajustemos el +sangrado de los márgenes. También escribimos las claves +correspondientes, nos aseguramos de que las plicas y ligaduras de +unión y de expresión en cada una de las voces del pentagrama superior +apuntan en la dirección adecuada con @code{\voiceOne} y +@code{\voiceTwo} y escribimos el compás y la tonalidad en cada uno de +los pentagramas usando nuestra variable previamente definida +@code{\TimeKey}. + +@example +\score @{ + << % el grupo PianoStaff y el pentagrama de Pedal son simultáneos + \new PianoStaff << + \new Staff = "ManualUno" << + \keyTime % establecer compás y tonalidad + \clef "treble" + \new Voice @{ + \voiceOne + \MusicaManualUnoVozUno + @} + \new Voice @{ + \voiceTwo + \MusicaManualUnoVozDos + @} + >> % fin del contexto de Staff ManualUno + \new Staff = "ManualDos" << + \keyTime + \clef "bass" + \new Voice @{ + \MusicaManualDos + @} + >> % fin del contexto de Staff ManualDos + >> % fin del contexto de PianoStaff + \new Staff = "OrganoPedal" << + \keyTime + \clef "bass" + \new Voice @{ + \MusicaOrganoPedal + @} + >> % fin del pentagrama de OrganoPedal + >> +@} % fin del contexto Score +@end example + +@cindex ampliabilidad de las pautas +@cindex pautas, ampliabilidad + +La disposición anterior de los pentagramas de órgano es casi perfecta; +sin embargo, existe un ligero defecto que no es visible cuando se +observa un solo sistema: la distancia entre el pentagrama de pedal y +el de la mano izquierda debiera ser aproximadamente la misma que la +que existe entre los pentagramas de las manos izquierda y derecha. +Concretamente, la ampliabilidad de los pentagramas dentro de un +contexto @code{PianoStaff} es limitada (de forma que la distancia +entre los pentagramas de las manos izquierda y derecha nunca crezcan +excesivamente), y el pentagrama de los pedales debería comportarse de +una forma similar. + +@cindex sub-propiedades +@cindex propiedades, sub-propiedades +@cindex objetos gráficos +@cindex gráficos, objetos +@cindex grobs + +El grado de ampliabilidad o separabilidad de los pentagramas se puede +controlar con la propiedad @code{staff-staff-spacing} del @q{objeto +gráfico} @code{VerticalAxisGroup} (los objetos gráficos reciben por lo +general el nombre de @q{grob}s en la documentación de lilypond); no se +preocupe por el momento de los detalles, pues esto se explica más +tarde de forma exhaustiva. Los más curiosos pueden echar un vistazo a +@ruser{Panorámica de la modificación de las propiedades}. En este +caso, queremos modificar solamente la sub-propiedad +@code{stretchability}. +De nuevo, los curiosos encontrarán los valores +predeterminados para la propiedad staff-staff-spacing +en el archivo @file{scm/define-grobs.scm} +examinando la definición del grob @code{VerticalAxisGroup} grob. El +valor de @code{stretchability} se toma de la definición del contexto +@code{PianoStaff} (en el archivo @file{ly/engraver-init.ly}) de +forma que los valores sean idénticos. + +@example +\score @{ + << % el grupo PianoStaff y el pentagrama de Pedal son simultáneos + \new PianoStaff << + \new Staff = "ManualUno" << + \keyTime % establecer compás y tonalidad + \clef "treble" + \new Voice @{ + \voiceOne + \MusicaManualUnoVozUno + @} + \new Voice @{ + \voiceTwo + \MusicaManualUnoVozDos + @} + >> % % fin del contexto de Staff ManualUno + \new Staff = "ManualDos" \with @{ + \override VerticalAxisGroup + #'staff-staff-spacing #'stretchability = 5 + @} << + \keyTime + \clef "bass" + \new Voice @{ + \MusicaManualDos + @} + >> % fin del contexto de Staff ManualDos + >> % fin del contexto de PianoStaff + \new Staff = "OrganoPedal" << + \keyTime + \clef "bass" + \new Voice @{ + \MusicaOrganoPedal + @} + >> % fin del pentagrama de OrganoPedal + >> +@} % fin del contexto Score +@end example + +Con esto se completa la estructura. Toda música para órgano de tres +pentagramas tendrá una estructura similar, aunque el número de voces +puede variar. Todo lo que nos queda es añadir la música, y combinar +todas las partes. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\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 context + >> +} % end Score context +@end lilypond + +@seealso +Glosario musical: +@rglos{system}. + +@node Ahorrar tecleo mediante variables y funciones +@subsection Ahorrar tecleo mediante variables y funciones +@translationof Saving typing with variables and functions + +@cindex variables +@cindex identificadores + +Llegado a este punto, usted ha visto cosas de este tipo: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } + +\score { + { + \hornNotes + } +} +@end lilypond + +Incluso se dará cuenta de que esto puede ser útil en música +minimalista: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } + +violin = \new Staff { + \fragmentA \fragmentA | + \fragmentB \fragmentA | +} + +\score { + { + \violin + } +} +@end lilypond + +Sin embargo también puede usar estos identificadores (que también se +conocen como variables, macros o instrucciones definidas por el +usuario) para hacer trucos: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } + +padText = { \once \override TextScript #'padding = #5.0 } +fthenp =_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b | + \padText + c4.^"hi there!" d8 e' f g d | + c,4.\fthenp b8 c4 c-. | + } +} + +\score { + { + \violin + } + \layout { ragged-right = ##t } +} +@end lilypond + +Obviamente estos identificadores son útiles para ahorrar tecleo. Pero +son dignos de tener en cuenta incluso si se van a utilizar una sola +vez: reducen la complejidad. Examinemos el ejemplo anterior reescrito +sin ningún identificador. Encontrará que es mucho más difícil de +leer, sobre todo la última línea. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d | + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +Hasta ahora hemos contemplado la sustitución estática: cuando LilyPond +se encuentra con @code{\padText}, lo sustituye con aquello que +hemos definido que sea (es decir, todo lo que está a la derecha de +@code{padtext=}). + +LilyPond también puede manejar sustituciones no estáticas (piense en +ellas como en funciones). + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +La utilización de identificadores también es una buena forma de +reducir el trabajo si la sintaxis de entrada de LilyPond cambia (véase +@rprogram{Actualizar ficheros con convert-ly}). Si tiene una sola +definición (como p.ej. @code{\dolce}) para todos sus archivos (ver +@ref{Hojas de estilo}), y después la sintaxis se modifica, sólo tendrá +que actualizar su definición @code{\dolce} única, en lugar de tener +que hacer cambios en cada uno de los archivos @file{.ly}. + + + +@node Partituras y particellas +@subsection Partituras y particellas +@translationof Scores and parts + +En música orquestal, todas las notas se imprimen dos veces. Una vez +en las particellas para los músicos, y otra para la partitura del +director. Los identificadores se pueden usar para evitar la +duplicación del trabajo. La música se escribe una vez y se almacena +en una variable. El contenido de dicha variable se usa después para +generar tanto la particella como la partitura del director. + +Es muy conveniente definir las notas en un archivo especial. Por +ejemplo, supongamos que el archivo @file{trompa.ly} contiene la +siguiente parte de un dúo para trompa y fagot: + +@example +notasTrompa = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e4 d | +@} +@end example + +@noindent +Luego se hace una particella escribiendo en un archivo lo siguiente + +@example +\include "trompa.ly" + +\header @{ + instrument = "Trompa en Fa" +@} + +@{ + \transpose f c' \notasTrompa +@} +@end example + +La línea + +@example +\include "trompa.ly" +@end example + +@noindent +sustituye el contenido de @file{trompa.ly} en esta posición dentro del +archivo, así que @code{notasTrompa} se define con posterioridad. La +instrucción @code{\transpose f@tie{}c'} indica que el argumento +constituido por @code{\notasTrompa} se debe transponer una quinta +hacia arriba. Lo que suena como @code{f} se escribe como @code{c'}, +lo que corresponde con el tono de afinación de una trompa normal +en@tie{}Fa. La transposición se puede ver en la siguiente salida + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +En piezas para conjunto, con frecuencia una de las voces no suena +durante muchos compases. Esto queda denotado por un silencio +especial, el silencio multicompás. Se introduce con una @code{R} +mayúscula seguida de una duración (@code{1}@tie{}en el caso de la +redonda, @code{2}@tie{}en el caso de una blanca, etc.). Multiplicando +la duración se pueden construir silencios más largos. Por ejemplo, +este silencio ocupa 3@tie{}compases de 2/4 + +@example +R2*3 +@end example + +Cuando se imprime la particella tienen que comprimirse los silencios +multicompás. Esto se hace estableciendo una variable en tiempo de +ejecución + +@example +\set Score.skipBars = ##t +@end example + +@noindent +Esta instrucción establece el valor de la propiedad @code{skipBars} en +el contexto de @code{Score} a verdadero (@code{##t}). Anteponiendo el +silencio y esta opción a la música anterior, llegamos al siguiente +resultado + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + + +Esta partitura se hace combinando toda la música junta. Suponiendo +que la otra voz se encuentra dentro de @code{notasFagot} en el archivo +@file{fagot.ly}, la partitura se hace con + +@example +\include "fagot.ly" +\include "trompa.ly" + +<< + \new Staff \notasTrompa + \new Staff \notasFagot +>> +@end example + +@noindent +lo que nos lleva a + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond + + + diff --git a/Documentation/es/learning/preface.itely b/Documentation/es/learning/preface.itely new file mode 100644 index 0000000000..5bab74213b --- /dev/null +++ b/Documentation/es/learning/preface.itely @@ -0,0 +1,65 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097 + + 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 Preámbulo +@unnumbered Preámbulo +@translationof Preface + + +Debió ser en el transcurso de un ensayo de la EJE (Joven Orquesta de +Eindhoven), allá por 1995 cuando Jan, uno de los violistas chiflados, +le habló a Han-Wen, uno de los trompistas distorsionados, acerca del +gran proyecto en que estaba trabajando. Era un sistema automático para +imprimir música (concretamente se trataba de MPP, un preprocesador +para MusiXTeX). Resulta que Han-Wen quiso imprimir unas particellas a +partir de una partitura, así que empezó a echarle un vistazo al +programa, pero se quedó estancado rápidamente. Decidieron que MPP era +un callejón sin salida. Después de muchísimo filosofar y de montañas +de encendidas conversaciones por correo electrónico, Han-Wen inició el +proyecto LilyPond en 1996. Esta vez fue Jan quien resultó absorbido +por el nuevo proyecto de Han-Wen. + +En ciertos aspectos, desarrollar un programa de ordenador es como +aprender a tocar un instrumento. Al principio es divertido descubrir +cómo funciona, y supone un divertido reto intentar aquello de lo que +aún no eres capaz. Una vez pasado el entusiasmo inicial, hay que +practicar más y más. Las escalas y los estudios pueden llegar a +aturdir, y si no está motivado por otras personas (profesores, +directores o el público) uno siempre está tentado de abandonarlo. Uno +persevera y, poco a poco, tocar se convierte en parte de la vida de +uno. Algunos días se acoge de forma natural, y es estupendo, y otros +simplemente la cosa no funciona, pero uno sigue tocando día tras día. + +Igual que hacer música, trabajar en LilyPond puede ser un trabajo muy +duro y hay días en que uno se siente como pisando un hormiguero. A +pesar de todo, se ha convertido en parte de nuestra vida y seguimos +haciéndolo. Con toda probabilidad la motivación más importante es que +nuestro programa realmente hace algo útil por las personas. Cuando +navegamos por la red encontramos mucha gente que utiliza LilyPond y +produce unas partituras impresionantes con él. De esta observación se +desprende una sensación algo irreal, pero muy agradable. + +Nuestros usuarios no sólo nos transmiten buenas vibraciones por usar +el programa, también muchos de ellos nos ayudan enviando sugerencias e +informes de fallo; por ello nos gustaría agradecer a todos los +usuarios que nos han enviado estos informes, emitido sugerencias o +contribuido a LilyPond de cualquier otra forma. + +Tocar e imprimir música es algo más que una bonita analogía. +Programar juntos es muy divertido, y ayudar a las personas es algo +profundamente gratificante, pero en último término trabajar en +LilyPond es una forma de expresar nuestro profundo amor por la música. +¡Ojalá le ayude a elaborar montañas de preciosas partituras! + +Han-Wen y Jan + +Utrecht/Eindhoven, Holanda, julio de 2002. diff --git a/Documentation/es/learning/templates.itely b/Documentation/es/learning/templates.itely new file mode 100644 index 0000000000..c4c27c1560 --- /dev/null +++ b/Documentation/es/learning/templates.itely @@ -0,0 +1,174 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097 + + 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 Plantillas +@appendix Plantillas +@translationof Templates + +Esta sección del manual contiene plantillas con la partitura de LilyPond +ya preparada. Sólo tiene que escribir las notas, lanzar LilyPond y ¡disfrutar de +unas hermosas partituras impresas! + +@c bad node name for ancient notation to avoid conflict +@menu +* Pentagrama único:: +* Plantillas de piano:: +* Cuarteto de cuerda:: +* Conjuntos vocales:: +* Plantillas orquestales:: +* Plantillas para notación antigua:: +* Otras plantillas:: +@end menu + + +@node Pentagrama único +@appendixsec Pentagrama único +@translationof Single staff + +@appendixsubsec Sólo notas + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-only-notes.ly} + + +@appendixsubsec Notas y letra + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-notes-and-lyrics.ly} + +@appendixsubsec Notas y acordes + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes-and-chords.ly} + +@appendixsubsec Notas, letra y acordes. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes,-lyrics,-and-chords.ly} + + +@node Plantillas de piano +@appendixsec Plantillas de piano +@translationof Piano templates + +@appendixsubsec Piano solo + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-simple.ly} + +@appendixsubsec Piano y melodía con letra + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-melody-and-lyrics.ly} + +@appendixsubsec Piano con letra centrada + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-lyrics.ly} + +@appendixsubsec Piano con dinámicas centradas + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-dynamics.ly} + + +@node Cuarteto de cuerda +@appendixsec Cuarteto de cuerda +@translationof String quartet + +@appendixsubsec Cuarteto de cuerda + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-simple.ly} + +@appendixsubsec Particellas de cuarteto de cuerda + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-with-separate-parts.ly} + + +@node Conjuntos vocales +@appendixsec Conjuntos vocales +@translationof Vocal ensembles + +@appendixsubsec Partitura vocal SATB + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template.ly} + +@appendixsubsec Partitura vocal SATB y reducción para piano automática + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-automatic-piano-reduction.ly} + +@appendixsubsec SATB con contextos alineados + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} + +@appendixsubsec SATB sobre cuatro pentagramas + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{satb-choir-template---four-staves.ly} + +@appendixsubsec Estrofas a solo y estribillo a dos voces + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-verse-and-refrain.ly} + +@appendixsubsec Melodías de himnos + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{hymn-template.ly} + +@appendixsubsec Salmos + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{anglican-psalm-template.ly} + + +@node Plantillas orquestales +@appendixsec Plantillas orquestales +@translationof Orchestral templates + +@appendixsubsec Orquesta, coro y piano +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{orchestra,-choir-and-piano-template.ly} + + +@c bad node name to avoid node name conflict +@node Plantillas para notación antigua +@appendixsec Plantillas para notación antigua +@translationof Ancient notation templates + +@appendixsubsec Transcripción de música mensural + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-mensural-music.ly} + +@appendixsubsec Plantilla para transcripción de canto gregoriano + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + + +@node Otras plantillas +@appendixsec Otras plantillas +@translationof Other templates + +@appendixsubsec Combo de jazz +@translationof Jazz combo + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{jazz-combo-template.ly} + + diff --git a/Documentation/es/learning/tutorial.itely b/Documentation/es/learning/tutorial.itely new file mode 100644 index 0000000000..41aa855688 --- /dev/null +++ b/Documentation/es/learning/tutorial.itely @@ -0,0 +1,826 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097 + + 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 + +@include included/generating-output.itexi + +@c \version "2.14.0" + +@node Tutorial +@chapter Tutorial +@translationof Tutorial + +Este capítulo ofrece una introducción básica al trabajo con LilyPond. + +@menu +* Compilación del archivo:: +* Cómo escribir archivos de entrada:: +* Tratar con los errores:: +* Cómo leer los manuales:: +@end menu + +@node Compilación del archivo +@section Compilación del archivo +@translationof Compiling a file + +Esta sección presenta el concepto de @qq{compilación}: el +procesamiento de los documentos de entrada de LilyPond (escritos por +uno mismo) para producir archivos de salida. + +@menu +* Escritura del código de entrada:: +* MacOS X:: +* Windows:: +* Línea de órdenes:: +@end menu + +@node Escritura del código de entrada +@subsection Escritura del código de entrada +@translationof Entering input + +@cindex compilación +@cindex ejemplo inicial +@cindex inicial, ejemplo +@cindex mayúsculas, sensible a + +@qq{Compilación} es una palabra que significa procesar un texto de +entrada en formato de LilyPond para producir un archivo que se puede +imprimir y (de manera opcional) un archivo MIDI que se puede +reproducir. El primer ejemplo muestra el aspecto de un sencillo +archivo de texto de entrada. + +Este ejemplo muestra un archivo de entrada sencillo: + +@example +\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + +El resultado tiene este aspecto: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@warning{la música y la letra escrita en el código de entrada de +LilyPond tiene que ir siempre entre @w{@strong{@{ llaves @}}}. Las llaves +deberían también estar rodeadas por espacios a no ser que se +encuentren al principio o al final de una línea, para evitar +ambigüedades. Es posible que se omitan en algunos ejemplos del +presente manual ¡pero no las omita en su propia música! Para ver más +información sobre la presentación de los ejemplos del manual, consulte +@ref{Cómo leer los manuales}.} + +Además, la entrada de LilyPond es @strong{sensible a las mayúsculas}. +@w{@samp{ @{ c d e @}}} es una entrada válida; @w{@samp{@{ C D E @}}} produce +un mensaje de error. + +@smallspace + +@subheading Generar el resultado + +@cindex PDF, archivo +@cindex ver la música +@cindex editores de texto + +El método para producir un resultado impreso depende de snuestro +sistema operativo y del programa o programas que utilicemos. + + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (gráfico) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (gráfico) + +@item +@ref{Línea de órdenes, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Línea de órdenes, Todos los sistemas operativos} (consola) + +@end itemize + +Existen varios otros editores de texto con un apoyo específico a la +edición de texto de LilyPond. Para ver más información, consulte +@rweb{Entornos mejorados}. + +@warning{La primera vez que ejecute LilyPond, tardará un minuto o dos +porque todas las tipografías del sistema han de ser analizadas +previamente. ¡Después de esto, LilyPond será mucho más rápido!} + + +@node MacOS X +@subsection MacOS X + +@cindex ejecución de LilyPond bajo MacOS X +@cindex MacOS X, ejecución de LilyPond + +@lilypadOSX + + +@node Windows +@subsection Windows + +@cindex ejecutar LilyPond bajo Windows +@cindex Windows, ejecutar LilyPond + +@lilypadWindows + + +@node Línea de órdenes +@subsection Línea de órdenes +@translationof Command-line + +@cindex ejecución de LilyPond bajo Unix +@cindex Unix, ejecución de LilyPond + +@lilypadCommandLine + +@node Cómo escribir archivos de entrada +@section Cómo escribir archivos de entrada +@translationof How to write input files + +Esta sección presenta una parte de la sintaxis básica de LilyPond como +ayuda para que se inicie en la escritura de archivos de entrada. + +@menu +* Notación sencilla:: +* Trabajar sobre los archivos de entrada:: +@end menu + + +@node Notación sencilla +@subsection Notación sencilla +@translationof Simple notation + +@cindex sencilla, notación +@cindex notación sencilla + +LilyPond añadirá ciertos elementos de notación de manera automática. +En el siguiente ejemplo hemos especificado solamente cuatro alturas, +pero LilyPond ha añadido la clave, el compás y las duraciones. + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +Este comportamiento se puede modificar, pero en general estos valores +automáticos son adecuados. + + +@subheading Alturas + +@cindex alturas +@cindex notas +@cindex relativo, modo +@cindex apóstrofo +@cindex comilla simple +@cindex coma +@cindex alteraciones y modo relativo +@cindex relativo, modo, alteraciones y + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +Glosario musical: +@rglos{pitch}, +@rglos{interval}, +@rglos{scale}, +@rglos{middle C}, +@rglos{octave}, +@rglos{accidental}. + +La manera más sencilla de introducir las notas es mediante la +utilización del modo @code{\relative} (relativo). En este modo, se +elige la octava automáticamente bajo la suposición de que la siguiente +nota se colocará siempre lo más cerca de la nota actual, es decir, se +colocará en la octava comprendida dentro de hasta tres espacios de +pentagrama a partir de la nota anterior. Comenzaremos por introducir +el fragmento musical más elemental: una @notation{escala}, donde cada +nota está comprendida dentro de tan sólo un espacio de pentagrama +desde la nota anterior. + +@lilypond[verbatim,quote] +% set the starting point to middle C +\relative c' { + c d e f + g a b c +} +@end lilypond + +La nota inicial es el @notation{Do central}. Cada nota sucesiva se +coloca lo más cerca posible de la nota previa (en otras palabras: la +primera @samp{c} es el Do más cercano al Do central; a éste le sigue +el Re más cercano a la nota previa, y así sucesivamente). Podemos +crear melodías con intervalos mayores, aún sin dejar de utilizar el +modo relativo: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +No es necesario que la primera nota de la melodía comience exactamente +en aquella que especifica la altura de inicio. En el ejemplo +anterior, la primera nota (@code{d}) es el Re más cercano al Do +central. + +Añadiendo (o eliminando) comillas simples @code{'} o comas @code{,} a +la instrucción @q{@w{@code{@bs{}\relative c'}}}, podemos cambiar la octava +de inicio: + +@c KEEP LY +@lilypond[verbatim,quote] +% una octava por encima del Do central +\relative c'' { + e c a c +} +@end lilypond + +Al principio, el modo relativo puede resultar algo confuso, pero es la +forma más sencilla de introducir la mayor parte de las melodías. +Veamos cómo funciona en la práctica este cálculo relativo. Comenzando +por Si, que está situado en la línea central en clave de Sol, podemos +alcanzar Do, Re y Mi dentro de los tres espacios de pentagrama hacia +arriba, y La, Sol y Fa dentro de los tres espacios hacia abajo. Por +tanto, si la nota siguiente a Si es Do, Re o Mi se supondrá que está +por encima del Si, mientras que La, Sol o Fa se entenderán situados +por debajo. + +@c KEEP LY +@lilypond[verbatim,quote] +\relative c'' { + b c % el Do está un espacio por encima, es el Do de arriba + b d % el Re está dos por encima ó 5 por debajo, es el Re de arriba + b e % el Mi está 3 por encima ó 4 por debajo, es el Mi de arriba + b a % el La está 6 por encima ó 1 por debajo, es el La de abajo + b g % el Sol está 5 por encima ó 2 por debajo, es el Sol de abajo + b f % el Fa está 4 por encima ó 3 por debajo, es el Fa de abajo +} +@end lilypond + +Lo mismo exactamente ocurre cuando cualquiera de esas notas llevan un +sostenido o un bemol. Las @notation{Alteraciones accidentales} se +@strong{ignoran totalmente} en el cálculo de la posición relativa. +Exactamente la misma cuenta de espacios de pentagrama se hace a partir +de una nota situada en cualquier otro lugar del mismo. + +Para añadir intervalos mayores de tres espacios de pentagrama, podemos +elevar la @notation{octava} añadiendo una comilla simple @code{'} (o +apóstrofo) a continuación del nombre de la nota. También podemos +bajar la octava escribiendo una coma @code{,} a continuación del +nombre de la nota. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +Para subir o bajar una nota en dos (¡o más!) octavas, utilizamos +varias @code{''} ó @code{,,} (pero tenga cuidado de utilizar dos +comillas simples @code{''} ¡y no una comilla doble @code{"}@tie{}!) +@c " - keeps quotes in order for context-sensitive editor -td + +@subheading Duraciones (valores rítmicos) + +@cindex duraciones de las notas +@cindex notas, duraciones de +@cindex ritmos +@cindex redonda +@cindex blanca +@cindex negra +@cindex figura con puntillo +@cindex puntillo +@cindex notación de las duraciones + +Glosario musical: +@rglos{beam}, +@rglos{duration}, +@rglos{whole note}, +@rglos{half note}, +@rglos{quarter note}, +@rglos{dotted note}. + +La @notation{duración} de una nota se especifica mediante un número +después del nombre de la nota: @code{1} significa @notation{redonda}, +@code{2} significa @notation{blanca}, @code{4} significa +@notation{negra} y así sucesivamente. Las @notation{barras de +corchea} se añaden automáticamente. + +Si no especifica una duración, se utiliza la duración previa para la +nota siguiente. La figura por omisión de la primera nota es una +negra. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +Para crear @notation{notas con puntillo}, añada un punto @code{.} al +número de la duración. La duración de una nota con puntillo se debe +especificar de forma explícita (es decir: mediante un número). + +@lilypond[verbatim,quote] +\relative c'' { + a4 a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Silencios + +@cindex silencio +@cindex notación de los silencios + +Glosario musical: +@rglos{rest}. + +Un @notation{silencio} se introduce igual que si fuera una nota con el +nombre @code{r}@tie{}: + +@lilypond[verbatim,quote] +\relative c'' { + a4 r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Indicación de compás + +@cindex compás, indicación de + +@funindex \time +@funindex time + +Glosario musical: +@rglos{time signature}. + +La @notation{indicación de compás} se puede establecer con la orden +@code{\time} : + +@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 Indicaciones de tempo + +@cindex tempo, indicaciones de +@cindex metronómicas, indicaciones + +@funindex \tempo +@funindex tempo + +Glosario musical: +@rglos{tempo indication}, +@rglos{metronome}. + +La @notation{indicación de tempo} y la @notation{indicación +metronómica} pueden establecerse con la instrucción @code{\tempo}: + +@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 + + +@subheading Clave + +@cindex clave +@cindex sol, clave de +@cindex do en tercera, clave de +@cindex do en cuarta, clave de +@cindex fa, clave de +@cindex soprano +@cindex alto +@cindex tenor +@cindex bajo + +@funindex \clef +@funindex clef + +Glosario musical: +@rglos{clef}. + +La @notation{clave} se puede establecer utilizando la orden +@code{\clef} : + +@lilypond[verbatim,quote] +\relative c' { + \clef "treble" + c1 + \clef "alto" + c1 + \clef "tenor" + c1 + \clef "bass" + c1 +} +@end lilypond + + +@subheading Todo junto + +He aquí un pequeño ejemplo que muestra todos los elementos anteriores +juntos: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + \tempo "Andante" 4 = 120 + c2 e8 c' + g'2. + f4 e d + c4 c, r +} +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{Escritura de notas}, +@ruser{Escritura de las duraciones (valores rítmicos)}, +@ruser{Escritura de silencios}, +@ruser{Indicación de compás}, +@ruser{Clave}. + + +@node Trabajar sobre los archivos de entrada +@subsection Trabajar sobre los archivos de entrada +@translationof Working on input files + +@cindex llaves +@cindex comentarios +@cindex línea, comentario de +@cindex comentario de línea +@cindex bloque, comentario de +@cindex mayúsculas, sensible a +@cindex espacios, insensible a +@cindex expresiones +@cindex versiones +@cindex versión +@cindex número de versión + + +@funindex \version +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + +Los archivos de entrada de LilyPond son como los archivos fuente de +muchos lenguajes de programación corrientes. Contienen un enunciado +de versión, son sensibles a las mayúsculas y generalmente los espacios +se ignoran. Las expresiones se forman con llaves @w{@code{@{ @}}} y los +comentarios se denotan por un signo de porcentaje (@code{%}) o por +@w{@code{%@{ @dots{} %@}}}@tie{}. + +Si la frase anterior no tiene sentido para usted ¡no se preocupe! A +continuación explicaremos el significado de todos estos términos: + +@itemize + +@item +@strong{Enunciado de la versión}: Todo archivo de LilyPond debe +contener un enunciado de versión. Un enunciado de versión es una +línea que describe la versión de LilyPond para la que se escribió este +archivo, como en el ejemplo siguiente: + +@example +\version "@w{@version{}}" +@end example + +Por convenio, el enunciado de versión se coloca al principio del +archivo de LilyPond. + +El enunciado de versión es importante por dos motivos como mínimo. En +primer lugar, permite la actualización automática del código de +entrada conforme se va modificando la sintaxis de LilyPond. En +segundo lugar, indica la versión de LilyPond que se necesita para +compilar el archivo. + +Si no se escribe ningún enunciado de versión en el archivo de entrada, +LilyPond imprime una advertencia durante la compilación del mismo. + +@item +@strong{Sensible a las mayúsculas}: tiene importancia el hecho de que +introduzca una letra en minúsculas (p.ej. @w{@code{a, b, s, t}}) o en +mayúsculas (p.ej. @w{@code{A, B, S, T}}). Las notas son minúsculas: +@w{@samp{@{ c d e @}}} es una entrada válida; @w{@samp{@{ C D E @}}} +produciría un mensaje de error. + +@item +@strong{Insensible al número de espacios}: no importa cuántos espacios +(o saltos de línea o de tabulación) añada. +@w{@samp{@{ c4 d e @}}} significa lo mismo que +@w{@samp{@{ c4 @tie{} @tie{} @tie{} d e @}}} y que + +@example +@{ c4 d + e @} +@end example + +@noindent +Por supuesto, el ejemplo anterior es difícil de leer. Una regla +práctica es sangrar los bloques de código con un carácter de +tabulación, o bien con dos espacios: + +@example +@{ + c4 d e +@} +@end example + +Sin embargo, @emph{sí} se necesitan espacios para separar muchos +elementos sintácticos unos de otros. En otras palabras, los espacios +se pueden siempre @emph{añadir}, pero no siempre @emph{eliminar}. +Dado que la falta de espacios puede dar lugar a extraños errores, +recomendamos insertar espacios siempre antes y después de cualquier +elemento sintáctico, por ejemplo, antes y después de las llaves. + +@item +@strong{Expresiones:} Todo fragmento de código de entrada para +LilyPond ha de llevar @strong{@{@tie{}llaves@tie{}@}} antes y después de la +entrada. Estas llaves le dicen a LilyPond que la entrada es una +expresión musical unitaria, igual que los paréntesis @samp{()} de las +matemáticas. Las llaves deben ir rodeadas de un espacio a no ser que +se encuentren al comienzo o al final de una línea, para evitar +cualquier ambigüedad. + +Una instrucción de LilyPond seguida de una expresión simple entre +llaves (como por ejemplo @q{@w{@code{@bs{}relative c' @{ @dots{} @}}}}) también es una +expresión musical unitaria. + +@cindex comentarios +@cindex comentario de línea +@cindex comentario de bloque +@item +@strong{Comentarios}: Un comentario es una nota para el lector humano +de la entrada musical; se ignora cuando esta entrada se analiza, de +manera que no tiene ningún efecto sobre la salida impresa. Existen +dos tipos de comentarios. El símbolo de porcentaje @samp{%} introduce +un comentario de línea; todo lo que se encuentra después de @samp{%} +en esa línea se ignora. Por convenio, una línea de comentario se +coloca @emph{por encima} del código a que se refiere el comentario. + +@example +a4 a a a +% este comentario se refiere a las notas Si +b2 b +@end example + +Un comentario de bloque marca una sección entera de entrada musical +como comentario. Todo lo que está encerrado dentro de @code{%@{} y +@code{%@}} se ignora (pero los comentarios no pueden anidarse, lo que +significa que un comentario de bloque no puede incluir otros +comentarios de bloque). Si lo hiciera, el primer @code{%@}} daría por +terminado @emph{los dos} comentarios de bloque. El siguiente +fragmento muestra algunos posibles usos para los comentarios: + +@example +% a continuación van las notas de campanitas del lugar + c4 c g' g a a g2 + +%@{ + Esta línea y las notas que aparecen más abajo + se ignoran, por estar dentro de un + comentario de bloque. + + f4 f e e d d c2 +%@} +@end example + +@end itemize + + +@node Tratar con los errores +@section Tratar con los errores +@translationof Dealing with errors + +@cindex depuración de errores + +A veces, LilyPond no produce el resultado esperado. Esta sección +aporta algunos enlaces para ayudarle a resolver los problemas que +pudiera encontrar. + +@menu +* Consejos generales de solución de problemas:: +* Algunos errores comunes:: +@end menu + +@node Consejos generales de solución de problemas +@subsection Consejos generales de solución de problemas +@translationof General troubleshooting tips + +La solución de problemas en LilyPond puede ser un desafío para las +personas acostumbradas a los interfaces gráficos, porque es posible +crear archivos de entrada inválidos. Cuando esto ocurre, la mejor +forma de identificar y resolver el problema es aplicar un enfoque +lógico. Se dan algunas guías para ayudarle a aprender a hacerlo, en +@rprogram{Solución de problemas}. + + +@node Algunos errores comunes +@subsection Algunos errores comunes +@translationof Some common errors + +@cindex comunes, errores +@cindex errores comunes + +Existen algunos errores comunes que son difíciles de solucionar si nos +basamos solamente en los mensajes de error que se nos presentan. +Éstos se describen en @rprogram{Errores comunes}. + + +@node Cómo leer los manuales +@section Cómo leer los manuales +@translationof How to read the manuals + +Esta sección muestra cómo leer la documentación de forma eficiente, y +presenta algunas interesantes funcionalidades interactivas de la +versión en línea. + +@menu +* Material omitido:: +* Ejemplos con enlace:: +* Panorámica de los manuales:: +@end menu + + +@node Material omitido +@subsection Material omitido +@translationof Omitted material + + +@cindex cómo leer el manual +@cindex manual, lectura del +@cindex leer el manual +@cindex ejemplos, pulsar +@cindex pulsar sobre los ejemplos +@cindex consejos para construir archivos +@cindex plantillas +@cindex construir archivos, consejos +@cindex archivos, consejos para construir + +Como ya vimos en @ref{Trabajar sobre los archivos de entrada}, el +código de entrada de LilyPond debe estar rodeado de llaves @code{@{ @}} o de +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}}. Durante el resto del presente +manual, la mayor parte de los ejemplos omitirán las llaves. Para +reproducir los ejemplos, deberá copiar y pegar la entrada que se +muestra, pero @strong{deberá} escribir el @q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}}, +de la siguiente forma: + +@example +\relative c'' @{ + @dots{}aquí va el ejemplo@dots{} +@} +@end example + +¿Por qué omitir las llaves? Casi todos los ejemplos del presente +manual se pueden insertar en medio de un fragmento mayor de música. +Para estos ejemplos no tiene ningún sentido añadir +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +(¡no debería poner un @code{\relative} dentro de otro +@code{\relative}!); si hubiésemos incluido +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +rodeando a cada uno de los ejemplos, usted no podría copiar un +ejemplo pequeño procedente de la documentación y pegarlo dentro de su +propia pieza. La mayoría querrá insertar el código dentro de una +pieza más grande, por eso hemos formateado el manual de esta manera. + +Asimismo, recuerde que todo archivo de LilyPond debe llevar un +enunciado @code{\version}. Dado que los ejemplos de los manuales +son fragmentos de código y no archivos completos, el enunciado +@code{\version} se omite. De todas formas, debemos acostumbrarnos +a incluirlo en nuestros documentos. + +@node Ejemplos con enlace +@subsection Ejemplos con enlace +@translationof Clickable examples + +@warning{Esta funcionalidad sólo está disponible en los manuales en +HTML.} + +Muchas personas aprenden a utilizar programas probando y enredando con +ellos. Esto también puede hacerse con LilyPond. Si hace clic sobre +una imagen en la versión en HTML de este manual, podrá ver la entrada +exacta de LilyPond que se utilizó para generar esa imagen. Pruébelo +sobre esta imagen: + +@c no verbatim here +@c KEEP LY +@lilypond[quote] +\relative c'' { + c4-\markup { \bold \huge { Haga clic aquí. } } +} +@end lilypond + +Cortando y pegando todo lo que se encuentra dentro de la sección +@qq{ly snippet} (fragmento de tipo ly), tendrá una plantilla inicial +para sus experimentos. Para poder ver exactamente el mismo resultado +(con igual anchura de línea y todo), copie todo lo que está desde +@qq{Start cut-&-pastable section} hasta el final del archivo. + + +@ignore +This is item 825 + +@n ode Navegación con el teclado +@s ubsection Navegación con el teclado +@translationof Keyboard navigation + +@warning{Esta posibilidad sólo está disponible en los manuales en +HTML.} + +@c TODO: once this is figured out, insert it here. + +Estamos trabajando sobre esta funcionalidad. +@end ignore + +@node Panorámica de los manuales +@subsection Panorámica de los manuales +@translationof Overview of manuals + +Existe abundantísima documentación sobre LilyPond. Con frecuencia, +los nuevos usuarios se encuentran desorientados respecto a qué parte o +partes deben leer, y ocasionalmente pasan por alto la lectura de +partes de importancia vital. + +@warning{Por favor: no se salte las partes importantes de la +documentación. Le resultará mucho más difícil comprender las +secciones subsiguientes.} + +@itemize + +@item +@strong{Antes de intentar hacer @emph{cualquier cosa}}: lea el +@ref{Tutorial} del manual de Aprendizaje, y la sección @ref{Notación +corriente}. Si encuentra términos musicales que no reconoce, +búsquelos en el @rglosnamed{Top, Glosario}. + +@item +@strong{Antes de tratar de escribir una pieza completa de música}: lea +la sección @ref{Conceptos fundamentales} del manual de Aprendizaje. +Después, le vendrá bien consultar las secciones correspondientes de la +@rusernamed{Top, Referencia de la notación}. + +@item +@strong{Antes de tratar de modificar los resultados predeterminados}: +lea la sección @ref{Trucar la salida} del manual de Aprendizaje. + +@item +@strong{Antes de afrontar un proyecto grande}: lea la sección +@rprogramnamed{Suggestions for writing files,Sugerencias para escribir +archivos de entrada de LilyPond} del manual de Utilización del +programa. + +@end itemize diff --git a/Documentation/es/learning/tweaks.itely b/Documentation/es/learning/tweaks.itely new file mode 100644 index 0000000000..7107666400 --- /dev/null +++ b/Documentation/es/learning/tweaks.itely @@ -0,0 +1,4320 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 7130696ee590df198a4dc039423dcc1d36512fd9 + + 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 Trucar la salida +@chapter Trucar la salida +@translationof Tweaking output + +Este capítulo trata de cómo modificar la salida. LilyPond es extremadamente +configurable; prácticamente todos los fragmentos de la salida se pueden cambiar. + + +@menu +* Elementos de trucaje:: +* Manual de referencia de funcionamiento interno:: +* Apariencia de los objetos:: +* Colocación de los objetos:: +* Colisiones de objetos:: +* Trucajes adicionales:: +@end menu + +@node Elementos de trucaje +@section Elementos de trucaje +@translationof Tweaking basics + +@menu +* Introducción al trucaje:: +* Objetos e interfaces:: +* Convenciones de nombres de objetos y propiedades:: +* Métodos de trucaje:: +@end menu + +@node Introducción al trucaje +@subsection Introducción al trucaje +@translationof Introduction to tweaks + +El @q{Trucaje} es un término de LilyPond que denota los diversos +métodos que el usuario tiene a su disposición para modificar el +proceso de interpretación del archivo de entrada y cambiar la +apariencia de la salida impresa. Algunos trucos son muy fáciles de +usar; otros son más complejos. Pero en su conjunto, los métodos de +trucaje disponibles posibilitan conseguir casi cualquier apariencia +que deseemos en la música impresa. + +En esta sección vamos a estudiar los conceptos básicos que se +necesitan para comprender el trucaje. Más tarde daremos un amplio +abanico de instrucciones listas para usar, que podrá simplemente +copiar para obtener el mismo efecto en sus partituras, y al mismo +tiempo mostraremos la forma de construir dichas instrucciones para que +pueda aprender cómo desarrollar sus propios trucos. + +Antes de comenzar con este capítulo, quizá quiera echar un vistazo a +la sección @ref{Contextos y grabadores}, pues los Contextos, los +Grabadores y las Propiedades que se contienen en ellos son +fundamentales para comprender y construir los trucos. + +@node Objetos e interfaces +@subsection Objetos e interfaces +@translationof Objects and interfaces + +@cindex objeto +@cindex grob +@cindex objeto de extensión +@cindex interfaz +@cindex propiedades de objetos +@cindex objeto, propiedades de +@cindex layout (disposición), objeto de +@cindex objeto de disposición (layout) + +El trucaje consiste en modificar el funcionamiento y estructura +interna del programa LilyPond, por lo que en primer lugar +introduciremos algunos términos que se usan para describir dichas +operaciones y estructuras internas. + +El término @q{Objeto} es un término genérico que se usa para referirse +a la multitud de estructuras internas que LilyPond construye durante +el procesado de un archivo de entrada. Así, cuando se encuentra una +instrucción como @code{\new Staff}, se construye un objeto nuevo del +tipo @code{Staff}. Entonces, este objeto @code{Staff} contiene todas +las propiedades asociadas con ese pentagrama en particular, por +ejemplo, su nombre y su armadura, además de otros detalles de los +grabadores que se han asignado para que operen dentro del contexto del +pentagrama. De forma similar, hay objetos que guardan las propiedades +de todos los demás contextos, como objetos de @code{Voice}, objetos de +@code{Score}, objetos de @code{Lyrics}, así como objetos que +representan todos los elementos notacionales como líneas divisorias, +cabezas de las notas, ligaduras, indicaciones dinámicas, etc. Cada +objeto tiene su propio conjunto de valores de propiedad. + +Ciertos tipos de objetos reciben nombres especiales. Los objetos que +representan elementos de notación sobre la salida impresa como cabezas +de notas, plicas, ligaduras de expresión y de unión, digitaciones, +claves, etc. reciben el nombre de @q{Objetos de presentación}, a +menudo conocidos como @q{Objetos gráficos}, o abreviadamente +@q{Grobs}. Aún son objetos en el sentido genérico que hemos +mencionado, y también todos ellos tienen propiedades asociadas, como +su posición, tamaño, color,etc. + +Ciertos objetos de presentación son aún más especializados. Las +ligaduras de fraseo, los reguladores, las indicaciones de octava alta +y baja, y muchos otros objetos gráficos no están situados en un solo +lugar: tienen un punto de inicio, un punto de final, y quizá otras +propiedades relacionadas con su forma. Los objetos con una forma +extendida como estos, reciben el nombre de «Objetos de extensión» o +@q{Spanners}. + +Aún falta por explicar qué son los @q{Interfaces}. Muchos objetos, +incluso aunque son bastante diferentes, comparten funcionalidades que +se deben procesar de la misma manera. Por ejemplo, todos los objetos +gráficos tienen un color, un tamaño, una posición, etc., y todas estas +propiedades se procesan de la misma forma durante la interpretación +del archivo de entrada por parte de LilyPond. Para simplificar estas +operaciones internas, estas acciones y propiedades comunes se agrupan +en un objeto llamado @code{grob-interface}, interface de grob. Hay +muchas otras agrupaciones de propiedades comunes como ésta, y cada +una recibe un nombre que acaba en @code{interface}. En total hay más +de 100 interfaces de éstos. Veremos más adelante porqué esto es del +interés y de utilidad para el usuario. + +Estos son, en fin, los términos principales relativos a los objetos +que vamos a utilizar en este capítulo. + +@node Convenciones de nombres de objetos y propiedades +@subsection Convenciones de nombres de objetos y propiedades +@translationof Naming conventions of objects and properties + +@cindex nomenclatura, convenciones de, para objetos +@cindex nomenclatura, convenciones de, para propiedades +@cindex objetos, convenciones de nomenclatura +@cindex propiedades, convenciones de nomenclatura + +Ya hemos visto ciertas convenciones de nomenclatura de objetos, en la +sección @ref{Contextos y grabadores}. En este lugar, para más fácil +referencia, presentamos una lista de los tipos de objetos y +propiedades más comunes, junto con las convenciones según las cuales +reciben su nombre, y un par de ejemplos de nombres reales. Hemos +utilizado una @q{A} mayúscula para denotar cualquier carácter +alfabético en mayúsculas, y @q{aaa} para cualquier número de +caracteres alfabéticos en minúscula. Otros caracteres se utilizan +literalmente como están. + +@multitable @columnfractions .33 .33 .33 +@headitem Objeto o tipo de propiedad + @tab Convención de nomenclatura + @tab Ejemplos +@item Contextos + @tab Aaaa o AaaaAaaaAaaa + @tab Staff, GrandStaff +@item Objetos de presentación + @tab Aaaa o AaaaAaaaAaaa + @tab Slur, NoteHead +@item Grabadores + @tab Aaaa_aaa_engraver + @tab Clef_engraver, Note_heads_engraver +@item Interfaces + @tab aaa-aaa-interface + @tab grob-interface, break-aligned-interface +@item Propiedades de contextos + @tab aaa o aaaAaaaAaaa + @tab alignAboveContext, skipBars +@item Propiedades de objetos de presentación + @tab aaa o aaa-aaa-aaa + @tab direction, beam-thickness +@end multitable + +Como podremos ver en breve, las propiedades de distintos tipos de +objeto se modifican por parte de diferentes instrucciones; así pues, +es útil poder reconocer el tipo de objeto a partir de sus nombres de +propiedad. + +@node Métodos de trucaje +@subsection Métodos de trucaje +@translationof Tweaking methods + +@cindex trucaje, métodos de + +@strong{La instrucción \override} + +@cindex override, instrucción +@cindex override (sobreescritura), sintaxis de + +@funindex \override +@funindex override + +Ya hemos visto las instrucciones @code{\set} y @code{\with}, que se +usan para cambiar las propiedades de los @strong{contextos} y para +quitar y poner @strong{grabadores}, en @ref{Modificar las propiedades de los contextos} +y @ref{Añadir y eliminar grabadores}. Ahora debemos +examinar algunas otras instrucciones importantes. + +La instrucción que cambia las propiedades de los @strong{objetos de +presentación} es @code{\override}. Puesto que esta instrucción debe +modificar propiedades internas que se encuentran en un lugar profundo +dentro de LilyPond, su sintaxis no es tan simple como la del resto de +las instrucciones que hemos usado hasta ahora. Tiene que saber +exactamente qué propiedad de qué objeto y en qué contexto se debe +modificar, y cuál debe ser su nuevo valor. Veamos cómo se hace. + +La sintaxis genérica de esta instrucción es: + +@example +\override @var{Contexto}.@var{ObjetoDePresentación} #'@var{propiedad-de-presentación} = +#@var{valor} +@end example + +@noindent +Esto establecerá la propiedad de nombre +@var{propiedad-de-presentación} del objeto de presentación con el +nombre @var{ObjetoDePresentación}, que es miembro del contexto +@var{Contexto}, al valor @var{valor}. + +El @var{contexto} se puede omitir (y normalmente así es) cuando el +contexto requerido se encuentra implicado sin ambigüedad y es uno de +los contextos del nivel más bajo, es decir: @code{Voice}, +@code{ChordNames} o @code{Lyrics}, y lo omitiremos en muchos de los +ejemplos siguientes. Veremos más tarde cuándo se debe especificar. + +Las últimas secciones tratan de forma exhaustiva las propiedades y sus +valores, pero para ilustrar el formato y utilización de estas +instrucciones usaremos sólo unas cuantas propiedades y valores +sencillos que sean fáciles de entender. + +Por ahora no se preocupe por el @code{#'}, que debe anteponerse a la +propiedad de presentación, y el @code{#}, que debe preceder al valor. +Deben estar presentes siempre y de esa forma exacta. Es la +instrucción de uso más común dentro del trucaje, y durante la mayor +parte del resto de este capítulo presentaremos ejemplos de cómo se +usa. A continuación hay un ejemplo sencillo para cambiar el color de +una cabeza: + +@cindex color, propiedad, ejemplo +@cindex NoteHead, ejemplo de sobreescritura + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{La instrucción \revert} + +@cindex revert, instrucción + +@funindex \revert +@funindex revert + +Una vez sobreescrita, la propiedad retiene su nuevo valor hasta que +se sobreescribe de nuevo o se encuentra una instrucción +@code{\revert}. La instrucción @code{\revert} tiene la siguiente +sintaxis y ocasiona que el valor de la propiedad se devuelva a su +valor predeterminado original; observe que no es a su valor previo si +se han utilizado varias instrucciones @code{\override}. + +@example +\revert @var{Contexto}.@var{ObjetoDePresentación} #'@var{propiedad-de-presentación} +@end example + +Una vez más, igual que @var{Contexto} dentro de la instrucción +@code{\override}, con frecuencia no es necesario especificar el +@var{Contexto}. Se omitirá en muchos de los ejemplos siguientes. +Aquí devolvemos el color de la cabeza al valor predeterminado para las +dos últimas notas: + +@cindex color, propiedad, ejemplo +@cindex NoteHead, ejemplo de sobreescritura + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a +\revert NoteHead #'color +b4 c | +@end lilypond + +@strong{El prefijo \once} + +@funindex \once +@funindex once + +Tanto la instrucción @code{\override} como @code{\set} se pueden +preceder por @code{\once}. Esto ocasiona que la siguiente instrucción +@code{\override} o @code{\set} sea efectiva solamente durante el +tiempo musical en curso y antes de que la propiedad vuelva a tener +otra vez su valor predeterminado. Utilizando el mismo ejemplo, +podemos cambiar el color de una sola nota de la siguiente manera: + +@cindex color, propiedad, ejemplo +@cindex NoteHead, ejemplo de sobreescritura + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\once \override NoteHead #'color = #red +e4 f | +\once \override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{La instrucción \overrideProperty} + +@cindex overrideProperty, instrucción + +@funindex \overrideProperty +@funindex overrideProperty + +Hay otra forma para la instrucción de sobreescritura, +@code{\overrideProperty}, que ocasionalmente es necesaria. La +mencionamos aquí con un propósito de exhaustividad, pero para ver más +detalles consulte @rextend{Trucos difíciles}. +@c Maybe explain in a later iteration -td + +@strong{La instrucción \tweak} + +@cindex tweak, instrucción + +@funindex \tweak +@funindex tweak + +La última instrucción de trucaje que está disponible es @code{\tweak}. +Se debe utilizar para cambiar las propiedades de objetos que suceden +en el mismo momento musical, como las notas de un acorde. El uso de +@code{\override} para la sobreescritura afectaría a todas las notas +del acorde, mientras que @code{\tweak} afecta solamente al siguiente +elemento del flujo de entrada. + +He aquí un ejemplo. Suponga que queremos cambiar el tamaño de la +cabeza de la nota intermedia (el Mi) en un acorde de Do mayor. En +primer lugar, veamos lo que haría @code{\once \override}: + +@cindex font-size, propiedad, ejemplo +@cindex NoteHead, ejemplo de sobreescritura + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +\once \override NoteHead #'font-size = #-3 +4 +4 +@end lilypond + +Vemos que la sobreescritura con override afecta a @emph{todas} las +cabezas de las notas del acorde. Esto es así porque todas las notas +de un acorde ocurren en el mismo @emph{momento musical}, y la acción +de @code{\once} es aplicar la sobreescritura a todos los objetos de +presentación del tipo especificado que ocurren en el mismo momento +musical que la propia instrucción de sobreescritura @code{\override}. + +La instrucción @code{\tweak} opera de una forma distinta. Actúa sobre +el elemento inmediatamente siguiente dentro del flujo de entrada. Sin +embargo, es efectivo solamente sobre objetos que se crean directamente +a partir del flujo de entrada, en esencia las cabezas y las +articulaciones; los objetos como las plicas y las alteraciones se +crean con posterioridad y no se pueden trucar de esta forma. Es más, +cuando se aplica a las cabezas de las notas, éstas @emph{deben} estar +dentro de un acorde, es decir, dentro de ángulos simples, así que para +trucar una sola nota la instrucción @code{\tweak} se debe colocar +dentro de ángulos simples junto con la nota. + +Así pues, volviendo a nuestro ejemplo, el tamaño de la nota intermedia +se cambiaría de la siguiente forma: + +@cindex font-size, propiedad, ejemplo +@cindex @code{\tweak}, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +4 +@end lilypond + +Observe que la sintaxis de @code{\tweak} no es igual que la de +@code{\override}. Ni el contexto ni el objeto de presentación se +deben especificar; de hecho, generaría un error hacerlo. Los dos +están implícitos por el siguiente elemento del flujo de entrada. +Observe también que no debe haber un signo igual. Así que la sintaxis +genérica de la instrucción @code{\tweak} es, simplemente, + +@example +\tweak #'@var{propiedad-de-presentación} #@var{valor} +@end example + +Una instrucción @code{\tweak} también se puede usar para modificar +sólo una de una serie de articulaciones, como se muestra aquí: + +@cindex color, propiedad, ejemplo +@cindex @code{\tweak}, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4^"Black" + -\tweak #'color #red ^"Red" + -\tweak #'color #green _"Green" +@end lilypond + +@noindent +Observe que la instrucción @code{\tweak} debe venir precedida de una +marca de articulación como si ella misma fuera una articulación. + +@cindex grupos especiales anidados +@cindex tresillos anidados +@cindex corchete del grupo especial +@cindex corchete de tresillo +@cindex grupo especial, corchete de +@cindex tresillo, corchete de + +@funindex TupletBracket + +La instrucción @code{\tweak} también se debe usar para cambiar la +apariencia de uno solo de un conjunto de grupos especiales anidados +que comiencen en el mismo instante musical. En el siguiente ejemplo, +el corchete del tresillo largo y el primero de los tres corchetes +cortos empiezan en el mismo momento musical, y por ello cualquier +instrucción @code{\override} se aplicaría a los dos. En el ejemplo se +usa @code{\tweak} para distinguir entre ellos. La primera instrucción +@code{\tweak} especifica que el corchete del tresillo largo se debe +colocar por encima de las notas y el segundo especifica que el número +del tresillo se debe imprimir en rojo sobre el corchete del primer +tresillo corto. + +@cindex @code{\tweak}, ejemplo +@cindex direction, propiedad, ejemplo +@cindex color, propiedad, ejemplo + +@lilypond[quote,ragged-right,verbatim,fragment,relative=2] +\tweak #'direction #up +\times 4/3 { + \tweak #'color #red + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + +Si los grupos anidados no comienzan en el mismo momento, su apariencia +se puede modificar de la forma usual mediante instrucciones +@code{\override}: + +@cindex text, propiedad, ejemplo +@cindex tuplet-number, función, ejemplo +@cindex transparent, propiedad, ejemplo +@cindex TupletNumber, ejemplo de sobreescritura + +@c NOTE Tuplet brackets collide if notes are high on staff +@c See issue 509 +@lilypond[quote,ragged-right,verbatim,fragment,relative=1] +\times 2/3 { c8[ c c] } +\once \override TupletNumber + #'text = #tuplet-number::calc-fraction-text +\times 2/3 { + c8[ c] + c8[ c] + \once \override TupletNumber #'transparent = ##t + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + + +@seealso +Referencia de la notación: +@ruser{La instrucción tweak}. + + +@node Manual de referencia de funcionamiento interno +@section Manual de referencia de funcionamiento interno +@translationof The Internals Reference manual + +@cindex Internals Reference + +@menu +* Propiedades de los objetos de presentación:: +* Propiedades de los interfaces:: +* Tipos de propiedades:: +@end menu + +@node Propiedades de los objetos de presentación +@subsection Propiedades de los objetos de presentación +@translationof Properties of layout objects + +@cindex propiedades de los objetos de presentación +@cindex propiedades de los grobs +@cindex grobs, propiedades de +@cindex presentación, propiedades de los objetos de +@cindex Referencia de funcionamiento interno + +Suponga que tiene una partitura con una ligadura de expresión que para +su gusto es demasiado fina y quiere trazarla un poco más gruesa. ¿Cómo +debe proceder? Ya sabe, por las afirmaciones anteriores acerca de la +flexibilidad de LilyPond, que tal posibilidad existe, y seguramente +piensa que una cierta instrucción de sobreescritura @code{\override} +será necesaria. Pero ¿existe una propiedad de grosor para las +ligaduras? y, si la hay, ¿cómo se puede modificar? Aquí es donde +interviene el Manual de Funcionamiento Interno. Contiene toda la +información que puede necesitar para construir ésta y todas las demás +instrucciones @code{\override}, de sobreescritura. + +Una advertencia antes de dirigir nuestra mirada a la referencia de +funcionamiento interno. Éste es un documento de @strong{referencia}, +lo que significa que hay pocas o ninguna explicación en él: su +propósito es presentar la información de forma precisa y concisa. Por +tanto, podrá parecerle desalentador a primera vista. ¡No se preocupe! +La guía y las explicaciones que presentamos aquí le permitirán extraer +la información de la referencia de funcionamiento interno por sí mismo +con tan sólo algo de práctica. + +@cindex sobreescritura, ejemplo de +@cindex Referencia de Funcionamiento Interno, ejemplo de utilización +@cindex @code{\addlyrics}, ejemplo + + +Utilicemos un ejemplo concreto con un sencillo fragmento de música +real: + +@c Mozart, dúo, núm. 7 de La Flauta Mágica + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +Suponga ahora que decidimos que nos gustan las ligaduras algo más +gruesas. ¿Es posible? La ligadura es, ciertamente, un objeto de +presentación, así que la cuestión es @q{¿Hay una propiedad +perteneciente a las ligaduras de expresión que controle su grosor?} +Para responder a esta pregunta debemos mirar el manual de Referencia +de Funcionamiento Interno, abreviadamente RFI@footnote{@strong{IR} +(Internals Reference) en inglés}. + +El RFI de la versión de LilyPond que está usando se puede encontrar en +la página web de LilyPond en @uref{http://lilypond.org}. Vaya a la +página de la documentación y siga el enlace Manual de Referencia de +Funcionamiento Interno (RFI). Para nuestros propósitos pedagógicos +sería mejor que utilizase la versión en HTML, no la @q{en una sola +página} ni el PDF. Para que los siguientes párrafos tengan algún +sentido deberá consultarlo realmente al tiempo que lee. + +@c Link names in English as those pages are not yet translated. FV +Bajo el encabezamiento @strong{Top} podrá ver cinco enlaces. +Seleccione el enlace @emph{Backend}, que es donde se encuentra la +información sobre los objetos de presentación. Una vez allí, bajo el +encabezamiento @strong{Backend}, siga el enlace @emph{All layout +objects}. La página que aparece relaciona todos los objetos de +presentación que se usan en su versión de LilyPond, en orden +alfabético. Siga el enlace Slur (ligadura de expresión), y aparecerán +relacionadas las propiedades de las ligaduras de expresión o Slurs. + +Una forma alternativa de encontrar esta página es a partir de la +Referencia de la Notación. En una de las páginas que tratan de las +ligaduras de expresión podrá encontrar un enlace al manual de +referencia del funcionamiento interno. Este enlace le llevará +directamente a esta página, aunque si tiene una idea del nombre del +objeto de presentación que pretende trucar, le resultará más fácil ir +directamente al RFI y buscar allí. + +Esta página sobre las ligaduras de expresión dentro del manual RFI nos +dice en primer lugar que los objetos Slur se crean por el grabador +Slur_engraver. A continuación relaciona los ajustes estándar. +Observe que @strong{no} están en orden alfabético. Navegue hacia +abajo buscando una propiedad que pudiera controlar el grosor de las +ligaduras, y encontrará + +@example +@code{thickness} (number) + @code{1.2} + Line thickness, generally measured in @code{line-thickness} +@end example + +Esto promete ser una buena opción para cambiar el grosor. Nos dice +que el valor de @code{thickness} es un simple @emph{número}, que el +valor predeterminado es 1.2, y que las unidades están dentro de otra +propiedad llamada @code{line-thickness}. + +Como dijimos con anterioridad, existen entre pocas y ninguna +explicación en el RFI, pero ya tenemos información suficiente para +probar a cambiar el grosor de la ligadura. Vemos que el nombre del +objeto de presentación es @code{Slur}, que el nombre de la propiedad +que debemos cambiar es @code{thickness} y que el nuevo valor debe ser +un número algo más grande que 1.2 si queremos hacer las ligaduras más +gruesas. + +Ahora podemos construir la instrucción de sobreescritura +@code{\override} simplemente mediante la sustitución de los valores +que hemos encontrado para los nombres, omitiendo el contexto. +Usaremos un valor muy grande para el grosor al principio, para estar +seguros de que la instrucción está funcionando. Obtenemos lo +siguiente: + +@example +\override Slur #'thickness = #5.0 +@end example + +¡No olvide el @code{#'} antes del nombre de la propiedad y @code{#} +antes del valor nuevo! + +La pregunta final es @q{¿Dónde se debe colocar esta instrucción?} +Aunque nos falta seguridad y estamos todavía aprendiendo, la mejor +respuesta es: @q{Dentro de la música, antes de la primera ligadura y +cerca de ella.} Hagámoslo así: + +@cindex Slur, ejemplo de sobreescritura +@cindex thickness, propiedad, ejemplo + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +y podemos ver que la ligadura, es sin duda, más pesada. + +Así pues, ésta es la forma básica de construir instrucciones +@code{\override} o de sobreescritura. Existen unas cuantas +complicaciones más con las que nos encontraremos en secciones +posteriores, pero ahora conoce todos los principios esenciales que +necesita para hacerlo por sí mismo (aunque aún necesita algo de +práctica). La cual vendrá proporcionada por los ejemplos que vienen a +continuación. + +@subheading Búsqueda del contexto + +@cindex contexto, encontrar +@cindex contexto, buscar el, correcto + +Pero en primer lugar ¿qué habría pasado si hubiésemos tenido que +especificar el contexto? ¿Cuál sería? Podemos suponer que las +ligaduras están en el contexto de Voz, por estar claramente asociados +de manera estrecha con las líneas individuales de música, pero +¿podemos estar seguros? Para averiguarlo, vayamos de nuevo al inicio +de la página del RFI que describe las ligaduras (Slur), donde dice +@q{Slur objects are created by: Slur engraver} («Los objetos de +ligadura de expresión se crean por: el grabador Slur»). Así pues, las +ligaduras de expresión se crean en cualquier contexto en el que se +encuentre el grabador @code{Slur_engraver}. Siga el enlace a la +página del grabador @code{Slur_engraver}. Al final del todo, dice que +el grabador @code{Slur_engraver} es parte de cinco contextos de voz, +incluido el contexto de voz estándar, @code{Voice}, por lo que nuestra +suposición era acertada. Y a causa de que @code{Voice} es uno de los +contextos de más bajo nivel que se encuentra implícito sin ambigüedad +por el hecho de que estamos escribiendo notas, podemos omitirlo en +este lugar concreto. + +@subheading Sobreescritura por una sola vez + +@cindex sobreescritura por una sola vez +@cindex once override + +@funindex \once +@funindex once + +Como puede ver, @emph{todas} las ligaduras son más gruesas en el +último ejemplo. Pero ¿y si quisiéramos que solamente la primera +ligadura fuese más gruesa? Esto se consigue con la instrucción o +prefijo @code{\once}. Colocado inmediatamente antes de la instrucción +@code{\override} ocasiona que solamente cambie la ligadura que +comienza en la nota @strong{inmediata siguiente}. Si la nota +inmediata siguiente no da inicio a una ligadura, la instrucción no +tiene ningún efecto en absoluto: no se recuerda hasta que se +encuentre alguna ligadura, sino que simplemente se ignora. Así pues, +la instrucción que lleva @code{\once} se debe reposicionar de la forma +siguiente: + +@cindex Slur, ejemplo de sobreescritura +@cindex thickness, propiedad, ejemplo + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes8[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Hemos hecho que ahora solamente la primera ligadura sea más gruesa. + +La instrucción o prefijo @code{\once} también se puede usar antes de +la instrucción @code{\set}. + +@subheading Recuperación del ajuste + +@cindex revertir +@cindex predeterminadas, recuperar las propiedades + +@funindex \revert +@funindex revert + +Finalmente ¿y si quisiéramos que solamente las dos primeras ligaduras +fuesen más gruesas? En fin; podríamos usar dos instrucciones, cada +una de ellas precedida por el prefijo @code{\once}, situadas +inmediatamente antes de cada una de las notas en que comienzan las +ligaduras: + +@cindex Slur, ejemplo de sobreescritura +@cindex thickness, propiedad, ejemplo + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes[( g]) g | + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +o podríamos omitir la instrucción prefija @code{\once} y utilizar la +instrucción @code{\revert} (restablecer) para devolver la propiedad +del grosor, @code{thickness}, a su valor predeterminado después de la +segunda ligadura: + +@cindex Slur, ejemplo de sobreescritura +@cindex thickness, propiedad, ejemplo + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + bes[( g]) g | + g8[( es]) es + % Revert thickness of all following slurs to default of 1.2 + \revert Slur #'thickness + d8[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +la instrucción @code{\revert} se puede utilizar para devolver +cualquier propiedad que se haya cambiado con @code{\override} a su +valor predeterminado. Puede utilizar el método que mejor se adapte a +aquello que quiere hacer. + +Así finaliza nuestra introducción al manual de RFI, y el método básico +de trucaje. A continuación, en las últimas secciones de este capítulo +encontrará varios ejemplos, en parte para introducirle en algunas de +las posibilidades adicionales del manual RFI, y en parte para +proporcionarle más práctica en cómo extraer información de él. Estos +ejemplos irán conteniendo cada vez menos palabras de guía y +explicación. + +@node Propiedades de los interfaces +@subsection Propiedades de los interfaces +@translationof Properties found in interfaces + +@cindex interface +@cindex propiedades de los interfaces +@cindex interfaces, propiedades + +Suponga ahora que queremos imprimir la letra de la canción en cursiva. +¿Qué forma de instrucción @code{\override} necesitamos para hacerlo? +En primer lugar miramos en la página del RFI que relaciona todos los +objetos, @q{All layout objects}, como antes, y buscamos un objeto que +pueda controlar la letra de la canción. Encontramos @code{LyricText}, +que parece adecuado. Al seguir este enlace se presentan las +propiedades ajustables para el texto de la letra. Estos incluyen +@code{font-series} y @code{font-size}, pero nada que pudiera aplicar +una forma cursiva. Esto es porque la propiedad de la forma es común a +todos los objetos de fuente tipográfica, y por tanto, en vez de +incluirlo en cada uno de los objetos de presentación, se agrupa junto +con otras propiedades comunes similares y se deposita en un +@strong{Interface}, el interface de las fuentes tipográficas +@code{font-interface}. + +Por tanto, ahora necesitamos aprender cómo encontrar las propiedades +de los interfaces, y descubrir qué objetos usan estas propiedades de +interface. + +Mire de nuevo la página del RFI que describe a LyricText. Al final de +la página hay una lista de enlaces a los interfaces que LyricText +contempla. La lista tiene siete elementos, entre ellos +@code{font-interface}. Al seguir este enlace llegamos a las +propiedades asociadas con este interface, que también son propiedades +de todos los objetos que lo llevan, entre ellos LyricText. + +Ahora vemos todas las propiedades ajustables por el usuario que +controlan las tipografías, entre ellas @code{font-shape(symbol)}, +donde @code{symbol} se puede establecer a @code{upright} (recta), +@code{italics} (cursiva)o @code{caps} (mayúsculas pequeñas). + +Observará que @code{font-series} y @code{font-size} también se +encuentran aquí relacionadas. Esto inmediatamente hace que surja la +pregunta: ¿Por qué están las propiedades comunes de tipografía +@code{font-series} y @code{font-size} relacionadas bajo +@code{LyricText} así como bajo el interface @code{font-interface} pero +@code{font-shape} no lo está? La respuesta es que @code{font-series} +y @code{font-size} se cambian a partir de sus valores predeterminados +globales cuando se crea un objeto @code{LyricText}, pero +@code{font-shape} no lo hace. Entonces los elementos de la lista +@code{LyricText} le dicen los valores para esas dos propiedades que +son de aplicación para @code{LyricText}. Otros objetos que contemplan +@code{font-interface} establecerán dichas propiedades de forma +diferente cuando se crean. + +Veamos si ahora podemos construir la instrucción @code{\override} para +cambiar la letra a cursiva. El objeto es @code{LyricText}, la +propiedad es @code{font-shape} y el valor es @code{italic}. Igual que +antes, omitiremos el contexto. + +Como nota aparte, aunque una nota importante, observe que a causa de +que los valores de @code{font-shape} son símbolos, deben ir precedidos +de un apóstrofo, @code{'}. Esa es la razón por la que se necesitan +apóstrofos antes de @code{thickness} en el ejemplo anterior y en +@code{font-shape}. Los dos son también símbolos. Los símbolos son +nombres especiales que son conocidos por LilyPond internamente. +Algunos de ellos son nombres de propiedades, como @code{thickness} o +@code{font-shape}, otros se utilizan como valores que se les puede dar +a las propiedades, como @code{italic}. Observe la distinción entre +esto y las cadenas de texto arbitrarias, que aparecerían +entrecomilladas como @code{"a text string"}. Para ver más detalles +relacionados con los símbolos y las cadenas, consulte +@rextend{Tutorial de Scheme}. + +Así pues, la instrucción @code{\override} necesaria para imprimir la +letra en cursiva, es: + +@example +\override LyricText #'font-shape = #'italic +@end example + +@noindent +Esto debe escribirse justo delante de la letra a la que debe afectar, +de esta forma: + +@cindex font-shape, propiedad, ejemplo +@cindex italic, ejemplo +@cindex LyricText, ejemplo de sobreescritura +@cindex @code{\addlyrics}, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + \override LyricText #'font-shape = #'italic + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +y toda la letra se imprime en cursiva. + +@subheading Especificación del contexto en modo letra + +@cindex contexto, especificación en modo letra +@cindex letra, modo, especificar el contexto en + +En el caso de la letra, si intenta especificar el contexto en el +formato que acabamos de dar, la instrucción no funcionará. Una +sílaba escrita en el modo letra, «lyricmode» termina en un espacio, un +salto de línea o un dígito. Cualquier otro carácter se incluye como +parte de la sílaba. Por esta razón, un espacio o salto de línea debe +aparecer antes del último símbolo @code{@}} para evitar que se incluya +como parte de la sílaba final. De forma similar, se deben insertar +espacios antes y después del punto, @q{.}, separando el nombre del +contexto del nombre del objeto, pues en caso contrario los dos nombres +se juntarán y el intérprete no podrá reconocerlos. Así pues, la +instrucción será: + +@example +\override Lyrics . LyricText #'font-shape = #'italic +@end example + +@warning{Dentro de la letra, deje siempre espacios entre la sílaba +final y la llave de cierre.} + +@warning{En las sobreescrituras con override dentro de la letra, +escriba siempre espacios antes y después del punto que separa el +nombre del contexto y el nombre del objeto.} + + +@seealso +Manual de Extensión: +@rextend{Tutorial de Scheme}. + + +@node Tipos de propiedades +@subsection Tipos de propiedades +@translationof Types of properties + +@cindex propiedades, tipos de + +Hasta ahora hemos visto dos tipos de propiedad:: @code{número} y +@code{símbolo}. Para que sea válido, el valor que se da a una +propiedad debe ser del tipo correcto y obedecer las reglas de dicho +tipo. El tipo de la propiedad se muestra siempre entre paréntesis +después del nombre de la propiedad en el RFI. He aquí una lista de +los tipos que podrá necesitar, junto con las reglas de dicho tipo, y +algunos ejemplos. Debe escribir siempre un símbolo de almohadilla, +@code{#}, por supuesto, delante de estos valores cuando se introducen +en la instrucción @code{\override}. + +@multitable @columnfractions .2 .45 .35 +@headitem Tipo de propiedad + @tab Reglas + @tab Ejemplos +@item Booleano + @tab Verdadero o Falso, representado por #t o #f + @tab @code{#t}, @code{#f} +@item Dimensión (en espacios de pentagrama) + @tab Un número decimal positivo (en unidades de espacios de pentagrama) + @tab @code{2.5}, @code{0.34} +@item Dirección + @tab Una constante válida de dirección o su equivalente numérico (se permiten valores decimales entre -1 y 1) + @tab @code{LEFT}, @code{CENTER}, @code{UP}, + @code{1}, @code{-1} +@item Entero + @tab Un número entero positivo + @tab @code{3}, @code{1} +@item Lista + @tab Un conjunto de valores separados por espacios, encerrado entre paréntesis y precedido de un apóstrofo + @tab @code{'(left-edge staff-bar)}, @code{'(1)}, + @code{'(1.0 0.25 0.5)} +@item Marcado + @tab Cualquier elemento válido de marcado de texto + @tab @code{\markup @{ \italic "cresc." @}} +@item Momento + @tab Una fracción de redonda construida con la función make-moment + @tab @code{(ly:make-moment 1 4)}, + @code{(ly:make-moment 3 8)} +@item Número + @tab Cualquier valor decimal positivo o negativo + @tab @code{3.5}, @code{-2.45} +@item Pareja (de números) + @tab Dos números separados por un @q{espacio . espacio}, encerrado entre paréntesis y precedido de un apóstrofo + @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} +@item Símbolo + @tab Cualquiera del conjunto de símbolos permitidos para esa propiedad, precedido de un apóstrofo + @tab @code{'italic}, @code{'inside} +@item Desconocido + @tab Un procedimiento o @code{#f} para no producir ninguna acción + @tab @code{bend::print}, @code{ly:text-interface::print}, + @code{#f} +@item Vector + @tab Una lista de tres elementos encerrados entre paréntesis y precedida de apóstrofo-almohadilla, @code{'#}. + @tab @code{'#(#t #t #f)} +@end multitable + + +@seealso +Manual de Extensión: +@rextend{Tutorial de Scheme}. + + +@node Apariencia de los objetos +@section Apariencia de los objetos +@translationof Appearance of objects + +Ahora vamos a poner en práctica lo que hemos aprendido con unos +cuantos ejemplos que muestran cómo se pueden usar los trucos para +cambiar el aspecto de la música impresa. + +@menu +* Visibilidad y color de los objetos:: +* Tamaño de los objetos:: +* Longitud y grosor de los objetos:: +@end menu + +@node Visibilidad y color de los objetos +@subsection Visibilidad y color de los objetos +@translationof Visibility and color of objects + +Dentro de un uso educativo de la música, podríamos desear imprimir una +partitura con ciertos elementos omitidos como ejercicio para el +alumno, a quien se le pide que los complete. A la manera de ejemplo +sencillo, supongamos que el ejercicio es escribir las líneas +divisorias que faltan en un fragmento musical. Pero las líneas +divisorias normalmente se insertan automáticamente. ¿Cómo hacemos para +que no se impriman? + +Antes de enredarnos con esto, recordemos que las propiedades de los +objetos se agrupan en lo que hemos llamado @emph{interfaces} (véase +@ref{Propiedades de los interfaces}). Esto es simplemente agrupar +las propiedades que se pueden usar juntas para trucar un objeto +gráfico: si una de ellas se necesita para un objeto, también las +otras. Así, ciertos objetos usan las propiedades de algunos +interfaces, otros usan las de otros interfaces. Los interfaces que +contienen las propiedades que un determinado grob necesita se +encuentran relacionadas en el manual RFI al final de la página que +describe dicho grob, y esas propiedades se pueden ver mirando dichos +interfaces. + +Hemos explicado cómo encontrar información sobre los grobs en +@ref{Propiedades de los objetos de presentación}. Usando el mismo +enfoque, vamos al RFI para buscar el objeto de presentación que +imprime las líneas divisorias. A través del enlace @emph{Backend} y +@emph{All layout objects} encontramos que hay un objeto de +presentación llamado @code{BarLine}. Entre sus propiedades se +encuentran dos que controlan la visibilidad: @code{break-visibility} y +@code{stencil}. Las líneas divisorias también contemplan un número de +interfaces, entre ellos el @code{grob-interface}, donde podemos +encontrar las propiedades @code{transparent} y @code{color}. Todas +ellas pueden afectar la visibilidad de las barras de compás (y, por +supuesto, por extensión, también la de muchos otros objetos de +presentación). Vamos a considerar cada uno de ellos por orden. + +@subheading stencil (sello) + +@cindex stencil (sello), propiedad + +Esta propiedad controla la apariencia de las barras de compás mediante +la especificación del símbolo (o «glifo») que se debe imprimir. Igual +que como otras muchas propiedades, se puede establecer de forma que no +imprima nada ajustando su valor a @code{#f}. Vamos a probarlo, como +antes, omitiendo el Contexto implícito, @code{Voice}: + +@cindex BarLine, ejemplo de sobreescritura +@cindex stencil, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Las barras de compás todavía se imprimen. ¿Qué es lo que está mal? +Vuelva al RFI y mire de nuevo la página que ofrece las propiedades del +objeto BarLine. Al principio de la página dice @qq{Barline objects +are created by: Bar_engraver} (los objetos Barline se crean por el +grabador Bar_engraver). Vaya a la página del grabador +@code{Bar_engraver} siguiendo el enlace. Al final da una lista de +contextos en los que el grabador de líneas divisorias opera. Todos +ellos son del tipo @code{Staff}, y así la razón de que la instrucción +@code{\override} no funcionara como esperábamos, es porque +@code{Barline} no se encuentra en el contexto predeterminado +@code{Voice}. Si el contexto no se especifica correctamente, la +instrucción simplemente no funciona. No se produce ningún mensaje de +error, y no se registra nada en el archivo log de registro. Vamos a +intentar corregirlo escribiendo el contexto correcto: + +@cindex BarLine, ejemplo de sobreescritura +@cindex stencil, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Ahora las barras de compás han desaparecido. + +Sin embargo, observe que el establecimiento de la propiedad +@code{stencil} al valor @code{#f} produce errores cuando las se +requieren las dimensiones del objeto para un procesamiento correcto. +Por ejemplo, se generan errores si la propiedad @code{stencil} del +objeto @code{NoteHead} se establece al valor @code{#f}. Si es el +caso, podemos en vez de ello utilizar la función @code{point-stencil}, +que establece el sello a un objeto con tamaño nulo: + +@lilypond[quote,verbatim,relative=2] +{ + c4 c + \once \override NoteHead #'stencil = #point-stencil + c4 c +} +@end lilypond + +@subheading break-visibility (visibilidad en el salto) + +@cindex break-visibility, propiedad + +Vemos en las propiedades de @code{BarLine} que aparecen en el RFI que +la propiedad @code{break-visibility} requiere un vector de tres +valores booleanos. Controlan respectivamente si las barras de compás +se imprimen al final de una línea, en mitad de una línea, y al +principio de las líneas. Para nuestro ejemplo, queremos que todas las +barras de compás se supriman, por lo que el valor que necesitamos es +@code{'#(#f #f #f)}. Vamos a probarlo, recordando incluir el contexto +de @code{Staff}. Observe también que al escribir este valor tenemos +@code{#'#} antes del paréntesis de apertura. Se necesita @code{'#} +como parte del valor para introducir un vector, y el primer símbolo de +almohadilla @code{#} se necesita, como siempre, para preceder el valor +en sí dentro de la instrucción @code{\override}. + +@cindex BarLine, ejemplo de sobreescritura +@cindex break-visibility, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'break-visibility = #'#(#f #f #f) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Y podemos ver que esto también quita todas las líneas divisorias. + +@subheading transparent (transparente) + +@cindex transparent, propiedad +@cindex transparencia + +En la relación de propiedades que se especifican en la página del +@code{grob-interface} del RFI podemos ver que la propiedad +@code{transparent} es un valor booleano. Esto se debe establecer a +@code{#t} para hacer que el grob sea transparente. En el ejemplo +siguiente vamos a hacer que la indicación de compás, y no las líneas +divisorias, sea transparente. Para hacerlo tenemos que buscar el +nombre del grob de la indicación de compás. Volviendo a la página +@q{All layout objects} del RFI, buscamos las propiedades del objeto de +presentación @code{TimeSignature}. Se produce por parte del grabador +@code{Time_signature_engraver} que como puede comprobar vive dentro +del contexto de @code{Staff} y también contempla el interface +@code{grob-interface}. Así pues, la instrucción que hace transparente +a la indicación de compás es: + +@cindex TimeSignature, ejemplo de sobreescritura +@cindex transparent, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'transparent = ##t + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +El compás ya no está, pero esta instrucción deja una separación en el +lugar donde antes estaba la indicación de compás. Quizá esto es lo +que queremos para un ejercicio en que el alumno deba escribirlo, pero +en otras circunstancias esta separación podría no ser deseable. En +vez de eso, para quitarla, el stencil o «sello» de la indicación de +compás se debe establecer al valor @code{#f}: + +@cindex TimeSignature, ejemplo de sobreescritura +@cindex stencil, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +y la diferencia es obvia: al establecer el sello al valor @code{#f} +quitamos el objeto por completo; al hacer el objeto @code{transparent} +lo dejamos donde está, pero lo hacemos invisible. + +@subheading color + +@cindex color, propiedad + +Para finalizar, intentemos hacer invisibles las barras de compás +pintándolas de color blanco (hay un problema relacionado, que consiste +en que la línea divisoria blanca puede tapar o no tapar las líneas del +pentagrama a las que cruza. Podrá observar en algunos de los ejemplos +que aparecen a continuación, que esto sucede de forma impredecible. +Los detalles sobre por qué esto ocurre así, y cómo controlarlo, se +estudian en @ruser{Pintar los objetos de blanco}; de momento estamos +estudiando el color, por lo que le rogamos que acepte esta limitación +por ahora). + +El interface @code{grob-interface} especifica que la propiedad del +color es una lista, pero no hay ninguna explicación sobre lo que debe +ir en esa lista. La lista que requiere es realmente una lista de +valores en unidades internas, pero para evitar tener que saber cuáles +son, se ofrecen varias vías para la especificación de los colores. La +primera forma es utilizar uno de los colores @q{normales} que están +relacionados en la primera tabla de la @ruser{Lista de colores}. Para +poner las líneas divisorias de color blanco, escribimos: + +@cindex BarLine, ejemplo de sobreescritura +@cindex color, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #white + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +y de nuevo podemos comprobar que las barras de compás no son visibles. +Observe que @emph{white} no viene precedido de un apóstrofo: no es un +símbolo, sino una @emph{función}. Cuando se invoca, proporciona la +lista de valores internos que se requieren para establecer el color a +blanco. Los otros colores de la lista normal también son funciones. +Para convencerse de que esto funciona, quizá quiera cambiar el color a +una de las otras funciones de la lista. + +@cindex colores de X11 +@cindex X11, colores de + +@funindex x11-color + +La segunda forma de cambiar el color es utilizar la lista de nombres +de colores de X11 que aparecen en la segunda lista de @ruser{Lista de +colores}. Sin embargo, éstos deben ir precedidos de otra función, que +convierte los nombres de colores de X11 en la lista de valores +internos, @code{x11-color}, de la siguiente manera: + +@cindex BarLine, ejemplo de sobreescritura +@cindex color, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(x11-color 'white) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Observe que en este caso la función @code{x11-color} toma un símbolo +como argumento, así que el símbolo debe ir precedido de un apóstrofo y +los dos deben ir entre paréntesis. + +@cindex rgb, colores +@cindex color, rgb + +@funindex rgb-color + +Aún hay una tercera función, que convierte valores RGB en colores +internos: la función @code{rgb-color}. Toma tres argumentos que dan +las intensidades de rojo, verde y azul. Cada uno de ellos puede tomar +valores entre 0 y 1. Por lo tanto, para establecer el color a rojo el +valor debe ser @code{(rgb-color 1 0 0)} y para blanco debe ser +@code{(rgb-color 1 1 1)}: + +@cindex BarLine, ejemplo de sobreescritura +@cindex color, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(rgb-color 1 1 1) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Finalmente, existe también una escala de grises como parte del +conjunto de colores de X11. Varían desde el negro, @code{'grey0'}, +hasta el blanco, @code{'grey100}, en pasos de 1. Vamos a ilustrar esto +estableciendo todos los objetos de presentación de nuestro ejemplo a +varias gradaciones de gris: + +@cindex StaffSymbol, ejemplo de sobreescritura +@cindex TimeSignature, ejemplo de sobreescritura +@cindex Clef, ejemplo de sobreescritura +@cindex NoteHead, ejemplo de sobreescritura +@cindex Stem, ejemplo de sobreescritura +@cindex BarLine, ejemplo de sobreescritura +@cindex color property, ejemplo +@cindex x11-color, ejemplo de utilización + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.StaffSymbol #'color = #(x11-color 'grey30) + \override Staff.TimeSignature #'color = #(x11-color 'grey60) + \override Staff.Clef #'color = #(x11-color 'grey60) + \override Voice.NoteHead #'color = #(x11-color 'grey85) + \override Voice.Stem #'color = #(x11-color 'grey85) + \override Staff.BarLine #'color = #(x11-color 'grey10) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Observe los contextos asociados con cada uno de los objetos de +presentación. Es importante que estén correctamente escritos, o las +instrucciones ¡no funcionarán! Recuerde que el contexto es aquel en +que se encuentra el grabador correspondiente. El contesto +predeterminado para los grabadores puede encontrarse empezando por el +objeto de presentación, de ahí al grabador que lo produce, y en la +página del grabador del RFI aparece en qué contexto se puede encontrar +normalmente el grabador. + + +@node Tamaño de los objetos +@subsection Tamaño de los objetos +@translationof Size of objects + +@cindex cambiar el tamaño de los objetos +@cindex tamaño de los objetos +@cindex objetos, tamaño de +@cindex objetos, cambiar el tamaño de + +Empezaremos examinando de nuevo un ejemplo anterior (véase +@ref{Anidado de expresiones musicales}) que nos mostraba cómo introducir un +pentagrama temporal, como en un @rglos{ossia}. + +@cindex alignAboveContext, propiedad, ejemplo +@cindex @code{\with}, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Los fragmentos de Ossia se escriben normalmente sin clave ni compás, y +por lo normal se imprimen más pequeños que el pentagrama principal. +Ya sabemos cómo quitar la clave y el compás: simplemente establecemos +el sello de cada uno de ellos a @code{#f}, como sigue: + +@cindex alignAboveContext, propiedad, ejemplo +@cindex @code{\with}, ejemplo +@cindex stencil, propiedad, ejemplo +@cindex Clef, ejemplo de sobreescritura +@cindex TimeSignature, ejemplo de sobreescritura + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } + { + \override Staff.Clef #'stencil = ##f + \override Staff.TimeSignature #'stencil = ##f + { f8 f c } + } + >> + r4 | + } +} +@end lilypond + +@noindent +donde el par de llaves adicional después de la cláusula @code{\with} +es necesario para asegurar que la sobreescritura encerrada y la música +se aplican al pentagrama de ossia. + +Pero ¿cuál es la diferencia entre modificar el contexto de pentagrama +usando @code{\with} y modificar los sellos de clave y de compás con +\override? La diferencia principal es que los cambios que se realizan +en una cláusula @code{\with} se hacen en el momento en que se crea el +contexto, y permanecen activos como valores @strong{predeterminados} +durante toda la duración de dicho contexto, mientras que las +instrucciones @code{\set} o @code{\override} incluidas dentro de la +música son dinámicas: hacen cambios sincronizados con un punto +concreto de la música. Si los cambios se deshacen o se devuelven +mediante @code{\unset} o @code{\revert} volverán a su valor +predeterminado que será el establecido en la cláusula @code{\with}, o +si no se ha establecido ninguno en este lugar, los valores +predeterminados normales. + +Ciertas propiedades de contexto se pueden modificar solamente dentro +de cláusulas @code{\with}. Son aquellas propiedades que no se pueden +cambiar después de que el contexto se ha creado. +@code{alignAboveContext} y su compañero, @code{alignBelowContext}, son +dos de tales propiedades: una vez que el pentagrama se ha creado, su +alineación está decidida y no tendría sentido intentar cambiarla más +tarde. + +Los valores predeterminados de las propiedades de los objetos de +presentación también se pueden establecer dentro de cláusulas +@code{\with}. Simplemente utilice la instrucción @code{\override} +normal dejando aparte el nombre del contexto, ya que está definido sin +ambigüedad como el contexto que la cláusula @code{\with} está +modificando. De hecho, se producirá un error si se especifica un +contexto en este lugar. + +Así pues, podemos reemplazar el ejemplo anterior con + +@cindex alignAboveContext, propiedad, ejemplo +@cindex @code{\with}, example +@cindex Clef, ejemplo de sobreescritura +@cindex TimeSignature, ejemplo de sobreescritura + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + % Don't print clefs in this staff + \override Clef #'stencil = ##f + % Don't print time signatures in this staff + \override TimeSignature #'stencil = ##f + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Finalmente llegamos a la forma de cambiar el tamaño de los objetos de +presentación. + +Ciertos objetos de presentación se crean como glifos sacados de una +fuente tipográfica. Entre ellos se encuentran las cabezas, +alteraciones, elementos de marcado, claves, indicaciones de compás, +indicaciones dinámicas y la letra de las canciones. Su tamaño se +cambia mediante la modificación de la propiedad @code{font-size}, como +veremos en breve. Otros objetos de presentación como ligaduras de +unión y de expresión (en general, objetos de extensión) se trazan +individualmente, por lo que no hay un tamaño de tipografía +@code{font-size} asociado a ellos. Estos objetos generalmente derivan +su tamaño de los objetos a los que están adosados, y por ello +normalmente no hay necesidad de cambiarles el tamaño manualmente. Aún +otras propiedades como la longitud de las plicas y las barras de +compás, el grosor de las barras de corchea y otras líneas, y la +separación de las líneas del pentagrama se deben modificar de otras +formas especiales. + +Volviendo al ejemplo del ossia, vamos a cambiar en primer lugar el +tamaño de la tipografía. Podemos hacerlo de dos formas. Podemos +cambiar el tamaño de las tipografías de cada uno de los tipos de +objeto como las cabezas (@code{NoteHead}s) con instrucciones como + +@example +\override NoteHead #'font-size = #-2 +@end example + +o podemos cambiar el tamaño de todas las tipografías estableciendo una +propiedad especial, @code{fontSize}, utilizando @code{\set}, o +mediante su inclusión dentro de una cláusula @code{\with} (pero sin el +@code{\set}). + +@example +\set fontSize = #-2 +@end example + +Los dos enunciados producirían una reducción del tamaño de la +tipografía en dos pasos a partir de su valor previo, donde cada paso +reduce o aumenta el tamaño aproximadamente en un 12%. + +Vamos a probarlo en nuestro ejemplo del ossia: + +@cindex alignAboveContext, propiedad, ejemplo +@cindex @code{\with}, ejemplo +@cindex Clef, ejemplo de sobreescritura +@cindex TimeSignature, ejemplo de sobreescritura +@cindex fontSize, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + % Reduce all font sizes by ~24% + fontSize = #-2 + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Aún no está demasiado bien. Las cabezas y los corchetes de las notas +son más pequeños, pero las plicas son demasiado largas en proporción, +y las líneas del pentagrama están demasiado separadas entre sí. Se +debe reducir su escala en proporción a la reducción de la tipografía. +El siguiente apartado trata sobre cómo se hace esto. + +@node Longitud y grosor de los objetos +@subsection Longitud y grosor de los objetos +@translationof Length and thickness of objects + +@cindex distancias +@cindex grosor +@cindex longitud +@cindex magstep +@cindex tamaño, cambiar +@cindex plica, cambiar la longitud +@cindex pentagrama, cambiar la separación de las líneas + +Las distancias y longitudes en LilyPond se miden generalmente en +espacios de pentagrama, la distancia entre líneas adyacentes de la +pauta (o de manera ocasional medios espacios), mientras que la mayoría +de las propiedades de @code{thickness} (grosor) se miden en unidades +de una propiedad interna llamada @code{line-thickness.} Por ejemplo, +de forma predeterminada, a las líneas de los reguladores se les da un +grosor de 1 unidad de @code{line-thickness}, mientras que el +@code{thickness} de una plica es 1.3. Observe sin embargo que ciertas +propiedades de grosor son diferentes; por ejemplo, el grosor de las +barras de corchea se controla por medio del valor de +@code{beam-thickness}, que se mide en espacios de pentagrama. + +Entonces ¿cómo se tienen que escalar las longitudes en proporción al +tamaño de la tipografía? Se puede hacer con la ayuda de una función +especial que se llama @code{magstep}, pensada especialmente para este +propósito. Toma un argumento, el cambio de tamaño de la tipografía +(#-2 en nuestro ejemplo) y devuelve un factor de escalado adecuado +para reducir otros objetos en la misma proporción. Se usa de la +siguiente forma: + +@cindex alignAboveContext, propiedad, ejemplo +@cindex @code{\with}, ejemplo +@cindex Clef, ejemplo de sobreescritura +@cindex TimeSignature, ejemplo de sobreescritura +@cindex fontSize, propiedad, ejemplo +@cindex StaffSymbol, ejemplo de sobreescritura +@cindex magstep, función, ejemplo de utilización +@cindex staff-space, propiedad, ejemplo +@cindex stencil, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + fontSize = #-2 + % Reduce stem length and line spacing to match + \override StaffSymbol #'staff-space = #(magstep -2) + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +@noindent +Puesto que la longitud de las plicas y muchas otras propiedades +relacionadas con la longitudes calculan siempre con relación al valor +de la propiedad @code{staff-space}, su longitud también ve reducida su +escala automáticamente. Observe que esto afecta solamente a la escala +vertical del ossia: la escala horizontal se determina por medio de la +disposición de la música principal con el objeto de mantenerse en +sincronía con ella, de forma que no resulte afectada por ninguno de +estos cambios de tamaño. Por supuesto, si la escala de toda la música +principal se cambiase de esta forma, entonces el espaciado horizontal +se vería afectado. Trataremos de esto más tarde en la sección sobre +la disposición. + +Esto, en fin, completa la creación de un ossia. Los tamaños y +longitudes del resto de los objetos se pueden modificar de manera +análoga. + +Para cambios de escala pequeños, como en el ejemplo de arriba, el +grosor de las diversas líneas dibujadas como divisorias, barras de +corchea, reguladores, ligaduras, etc, no requieren normalmente ningún +ajuste global. Si el grosor de cualquier objeto de presentación en +particular necesita ajustarse, se puede hacer mejor mediante la +sobreescritura de su propiedad @code{thickness}. Anteriormente +mostramos un ejemplo de cambio de grosor en las ligaduras, en +@ref{Propiedades de los objetos de presentación}. El grosor de todos los objetos +trazados (es decir, aquellos que no se producen a partir de una +tipografía) se pueden cambiar de la misma forma. + + +@node Colocación de los objetos +@section Colocación de los objetos +@translationof Placement of objects + +@menu +* Comportamiento automático:: +* Objetos interiores al pentagrama:: +* Objetos fuera del pentagrama:: +@end menu + + +@node Comportamiento automático +@subsection Comportamiento automático +@translationof Automatic behaviour + +@cindex dentro del pentagrama, objetos +@cindex fuera del pentagrama, objetos +@cindex objetos dentro del pentagrama +@cindex objetos fuera del pentagrama + +Hay ciertos objetos en notación musical que pertenecen al pentagrama y +otros cuyo lugar se sitúa fuera del pentagrama. Reciben el nombre de +objetos dentro-del-pentagrama y objetos fuera-del-pentagrama, +respectivamente. + +Los objetos dentro-del-pentagrama son los que se sitúan sobre la +pauta: cabezas, plicas, alteraciones, etc. Sus posiciones normalmente +se fijan por la propia música; se posicionan verticalmente sobre +líneas específicas del pentagrama o están unidos a otros objetos +posicionados de esta forma. Las colisiones entre cabezas, plicas y +alteraciones en acordes de notas muy juntas, normalmente se evitan +automáticamente. Hay instrucciones y sobreescrituras que pueden +modificar este comportamiento automático, como veremos en breve. + +Entre los objetos que pertenecen al exterior de la pauta se encuentran +cosas como las marcas de ensayo, las marcas de texto y las de +dinámica. La regla de LilyPond para la colocación vertical de los +objetos fuera-de-pentagrama es colocarlos tan cerca del pentagrama +como sea posible, pero no tan cerca como para que puedan chocar con +algún otro objeto. LilyPond utiliza la propiedad +@code{outside-staff-priority} para determinar el orden en que se deben +situar los objetos, como veremos ahora. + +En primer lugar, LilyPond sitúa todos los objetos +dentro-del-pentagrama. Después ordena los objetos +fuera-del-pentagrama de acuerdo con su prioridad +@code{outside-staff-priority}. Los objetos fuera-del-pentagrama se +toman de uno en uno, comenzando por el que tiene la prioridad +@code{outside-staff-priority} más baja, y se sitúan de forma que no +colisionen con ningún objeto que se haya colocado ya. Esto es, si dos +grobs fuera-del-pentagrama compiten por el mismo espacio, el que tiene +la prioridad @code{outside-staff-priority} más baja se colocará más +cerca del pentagrama. Si dos objetos tienen la misma +@code{outside-staff-priority}, el que se ha encontrado primero se +situará más cerca de la pauta. + +En el siguiente ejemplo, todos los textos de marcado tienen la misma +prioridad (pues no se ha establecido explícitamente). Observe que +@q{Text3} se posiciona de nuevo automáticamente cerca del pentagrama, +acomodado por debajo de @q{Text2}. + +@cindex markup, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +Los pentagramas también se posicionan, de forma predeterminada, tan +cerca unos de otros como sea posible (sujeto a una separación mínima). +Si las notas se proyectan muy lejos en dirección a un pentagrama +adyacente, forzarán a alejarse a los pentagramas sólo si en caso +contrario fuese a ocurrir un solapamiento de la notación. El ejemplo +siguiente muestra esta acomodación @q{nestling} de las notas sobre +pentagramas adyacentes: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \relative c' { c4 a, } + } + \new Staff { + \relative c'''' { c4 a, } + } +>> +@end lilypond + + +@node Objetos interiores al pentagrama +@subsection Objetos interiores al pentagrama +@translationof Within-staff objects + +Ya hemos visto cómo las instrucciones @code{\voiceXXX} afectan a la +dirección de las ligaduras de expresión y de unión, digitaciones y +todo lo demás que dependa de la dirección de las plicas. Cuando se +escribe música polifónica, estas instrucciones son esenciales para que +puedan distinguirse varias líneas melódicas entrelazadas. Pero +ocasionalmente puede ser necesario sobreescribir este comportamiento +automático. Se puede hacer por secciones de música completas o +incluso para una nota individual. La propiedad que controla este +comportamiento es la propiedad de @code{direction} (dirección) de cada +objeto de presentación. En primer lugar explicaremos qué hace esto, y +luego introduciremos algunas instrucciones listas para usar que le +evitarán tener que codificar sobreescrituras explícitas para las +modificaciones más comunes. + +Algunos objetos de presentación como las ligaduras se curvan hacia +arriba o hacia abajo; otros como las plicas y los corchetes también se +mueven a la derecha o a la izquierda cuando apuntan hacia arriba o +hacia abajo. Esto se controla automáticamente cuando está establecida +la propiedad @code{direction}. + +@cindex abajo +@cindex arriba +@cindex centro +@cindex neutro +@cindex down +@cindex up +@cindex center +@cindex neutral + +El ejemplo siguiente muestra en el compás 1 el comportamiento +predeterminado de las plicas, con las de las notas agudas apuntando +hacia abajo y las graves hacia arriba, seguidas de cuatro notas con +todas las plicas forzadas hacia abajo, cuatro notas con las plicas +forzadas hacia arriba, y por último cuatro notas devueltas al +comportamiento predeterminado. + +@cindex Stem, ejemplo de sobreescritura +@cindex direction, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4 g c a | +\override Stem #'direction = #DOWN +a4 g c a | +\override Stem #'direction = #UP +a4 g c a | +\revert Stem #'direction +a4 g c a | +@end lilypond + +Aquí utilizamos las constantes @code{DOWN} (abajo) y @code{UP} +(arriba). Éstos tienen los valores @code{-1} y @code{+1} +respectivamente, y dichos valores numéricos también se pueden usar +directamente. El valor @code{0} también se puede usar en algunos +casos. Se trata simplemente con el significado de @code{UP} para las +plicas, pero para algunos objetos tiene el significado de +@q{centrado}. Existe una constante @code{CENTER} que tiene el valor +@code{0}. + +Sin embargo, estas sobreescrituras no se usan muy a menudo porque +están disponibles instrucciones predefinidas equivalentes más +sencillas. Aquí podemos ver una tabla de las más comunes. Se +menciona el significado de cada una allí donde no es obvio. + +@multitable @columnfractions .2 .2 .25 .35 +@headitem Abajo o Izquierda + @tab Arriba o Derecha + @tab Anular + @tab Efecto +@item @code{\arpeggioArrowDown} + @tab @code{\arpeggioArrowUp} + @tab @code{\arpeggioNormal} + @tab La flecha está abajo, arriba o no hay flecha +@item @code{\dotsDown} + @tab @code{\dotsUp} + @tab @code{\dotsNeutral} + @tab Dirección del desplazamiento para evitar las líneas del pentagrama +@item @code{\dynamicDown} + @tab @code{\dynamicUp} + @tab @code{\dynamicNeutral} + @tab +@item @code{\phrasingSlurDown} + @tab @code{\phrasingSlurUp} + @tab @code{\phrasingSlurNeutral} + @tab Nota: diferente de las instrucciones de ligaduras de expresión +@item @code{\slurDown} + @tab @code{\slurUp} + @tab @code{\slurNeutral} + @tab +@item @code{\stemDown} + @tab @code{\stemUp} + @tab @code{\stemNeutral} + @tab +@item @code{\textSpannerDown} + @tab @code{\textSpannerUp} + @tab @code{\textSpannerNeutral} + @tab El texto introducido como objeto de extensión está debajo o encima del pentagrama +@item @code{\tieDown} + @tab @code{\tieUp} + @tab @code{\tieNeutral} + @tab +@item @code{\tupletDown} + @tab @code{\tupletUp} + @tab @code{\tupletNeutral} + @tab Los grupos especiales están debajo o encima de las notas +@end multitable + +Observe que estas instrucciones predefinidas @strong{no} pueden ir +precedidas de @code{\once}. Si quiere limitar el efecto a una sola +nota, deberá elegir entre usar la instrucción @code{\once \override} +equivalente, o usar la instrucción predefinida, seguida después de la +nota afectada por la instrucción @code{\xxxNeutral} correspondiente. + +@unnumberedsubsubsec Digitaciones + +@cindex digitación, colocación +@cindex digitación de acordes + +La colocación de las digitaciones sobre notas sueltas también se puede +controlar mediante la propiedad @code{direction}, pero los cambios +sobre @code{direction} no tienen ningún efecto sobre las notas de los +acordes. Como veremos, existen instrucciones especiales que permiten +controlar las digitaciones de notas individuales, situando la +digitación encima, debajo, a la izquierda o a la derecha de cada nota. + +En primer lugar, he aquí el efecto de @code{direction} sobre las +digitaciones aplicadas a notas sueltas. Se muestra en el primer +compás el comportamiento predeterminado, y en los dos compases +siguiente el efecto de especificar @code{DOWN} y @code{UP}: + +@cindex Fingering, ejemplo de sobreescritura +@cindex direction, propiedad, ejemplo + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #DOWN +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #UP +c4-5 a-3 f-1 c'-5 | +@end lilypond + +Sin embargo, la sobreescritura de la propiedad @code{direction} no es +la forma más sencilla de especificar manualmente la digitación por +encima o por debajo de las notas; suele ser preferible usar @code{_} o +@code{^} en lugar de @code{-}, antes del número de la digitación. +Este es el ejemplo anterior utilizando este método: + +@cindex fingering, ejemplo +@cindex digitación, ejemplo + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +c4_5 a_3 f_1 c'_5 | +c4^5 a^3 f^1 c'^5 | +@end lilypond + +La propiedad @code{direction} se ignora para los acordes, pero los +prefijos direccionales @code{_} y @code{^} sí funcionan. De forma +predeterminada, las digitaciones se colocan automáticamente encima y +debajo de las notas de un acorde, como se muestra aquí: + +@cindex fingering, ejemplo +@cindex digitación, ejemplo + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +@noindent +pero se puede forzar de manera que todos o algunos de los números de +digitación estén por encima o por debajo: + +@cindex fingering, ejemplo +@cindex digitación, ejemplo + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +Es posible ejercer un control aún mayor sobre la colocación de las +digitaciones mediante la utilización de la instrucción @code{\set +fingeringOrientations}. El formato de esta instrucción es: + +@example +@code{\set fingeringOrientations = #'([up] [left/right] [down])} +@end example + +@noindent +se utiliza @code{\set} porque @code{fingeringOrientations} es una +propiedad del contexto @code{Voice}, creado y usado por el grabador +@code{New_fingering_engraver}. + +La propiedad se puede establecer al valor de una lista de entre uno y +tres valores. Controla si las digitaciones se pueden colocar por +encima (si @code{up} aparece en la lista), por debajo (si aparece +@code{down}), a la izquierda (si aparece @code{left}) o a la derecha +(si aparece @code{right}). A la inversa, si una colocación no está en +la lista, no se sitúa ninguna digitación en dicho lugar. LilyPond +coma estas restricciones y se trabaja la mejor colocación para la +digitación de las notas de los acordes que siguen. Observe que +@code{left} y @code{right} son mutuamente excluyentes: las +digitaciones pueden situarse en un lado o en el otro, no en los dos. + +@warning{Para controlar la colocación de la digitación de una sola +nota usando esta instrucción es necesario escribirla como un acorde de +una sola nota encerrándola entre ángulos simples.} + +Aquí podemos ver algunos ejemplos: + +@cindex fingering, ejemplo +@cindex digitación, ejemplo +@cindex @code{\set}, ejemplo de utilización +@cindex fingeringOrientations, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + +@noindent +Si la digitación parece un poco superpoblada, se puede reducir el +tamaño @code{font-size}. El valor predeterminado puede verse en el +objeto @code{Fingering} del RFI que es @code{-5}, así que probaremos +@code{-7}: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\override Fingering #'font-size = #-7 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + + +@node Objetos fuera del pentagrama +@subsection Objetos fuera del pentagrama +@translationof Outside-staff objects + +Los objetos fuera-del-pentagrama se colocan automáticamente para +evitar las colisiones. Los objetos que tienen el valor más bajo de la +propiedad @code{outside-staff-priority} se sitúan más cerca del +pentagrama, y entonces otros objetos fuera-del-pentagrama se elevan +tanto como sea necesario para evitar la colisión. La prioridad +@code{outside-staff-priority} se defina en el @code{grob-interface} y +así es una propiedad de todos los objetos de presentación. De forma +predeterminada se establece a @code{#f} para todos los objetos +dentro-del-pentagrama, y a un valor numérico adecuado a cada objeto +fuera-del-pentagrama cuando se crea el objeto. La tabla siguiente +presenta los valores numéricos predeterminados para algunos de los +objetos fuera-del-pentagrama más comunes. + +@cindex objetos de extensión + +Observe los nombres algo inusuales de algunos de los objetos: los +objetos de extensión se cearn automáticamente para controlar el +posicionamiento vertical de los grobs que (quizá) comienzan y terminan +en distintos momentos musicales, de manera que cualquier modificación +a la prioridad @code{outside-staff-priority} del grob subyacente no +tiene ningún efecto. Por ejemplo, cambiar la +@code{outside-staff-priority} del objeto de regulador @code{Hairpin} +no tiene efecto sobre la posición vertical de los reguladores: en +lugar de eso, tenemos que cambar la @code{outside-staff-priority} del +objeto asociado @code{DynamicLineSpanner}. Esta sobreescritura se +debe escribir al comienzo del objeto de extensión, que podría incluir +varios reguladores o matices dinámicos encadenados. + +@multitable @columnfractions .3 .3 .3 +@headitem Objeto de presentación + @tab Prioridad + @tab Controla la posición de: +@item @code{RehearsalMark} + @tab @code{1500} + @tab Letras de ensayo +@item @code{MetronomeMark} + @tab @code{1000} + @tab Indicaciones metronómicas +@item @code{VoltaBracketSpanner} + @tab @code{600} + @tab Cajetines de primera y segunda vez +@item @code{TextScript} + @tab @code{450} + @tab Texto en elementos de marcado +@item @code{MultiMeasureRestText} + @tab @code{450} + @tab Texto sobre silencios de compás completo +@item @code{OttavaBracket} + @tab @code{400} + @tab Corchetes de octava alta y baja +@item @code{TextSpanner} + @tab @code{350} + @tab Objetos de extensión de texto +@item @code{DynamicLineSpanner} + @tab @code{250} + @tab Todas las indicaciones dinámicas +@item @code{VoltaBracketSpanner} + @tab @code{100} + @tab Números de compás +@item @code{TrillSpanner} + @tab @code{50} + @tab Trinos mantenidos +@end multitable + +He aquí un ejemplo que muestra la situación predeterminada de algunos +de ellos. + +@cindex texto, extensiones de +@cindex octava alta y baja, corchete de + +@funindex \startTextSpan +@funindex startTextSpan +@funindex \stopTextSpan +@funindex stopTextSpan + +@cindex TextSpanner, ejemplo de sobreescritura +@cindex bound-details, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text and hairpin +c4\pp\< +c4 +% Add Text Script +c4^Text | +c4 c +% Add Dynamic Text and terminate hairpin +c4\ff c \stopTextSpan | +% Stop Ottava Bracket +\ottava #0 +c,4 c c c | +@end lilypond + +Este ejemplo también muestra cómo crear textos con extensión (Text +Spanners): textos con líneas extensoras por encima de una sección de +música. El extensor abarca desde la instrucción @code{\startTextSpan} +hasta la instrucción @code{\stopTextSpan}, y el formado del texto se +define por medio de la instrucción @code{\override TextSpanner}. Para +ver más detalles, consulte @ruser{Extensiones de texto}. + +También muestra la manera de crear corchetes de octava alta y baja. + +@cindex trucar la situación de los números de compás +@cindex números de compás, ajustar posición +@cindex trucar la situación de marcas metronómicas +@cindex metrónomo, situación de las indicaciones de +@cindex trucar la situación de las letras de ensayo +@cindex ensayo, letras, trucar la colocación + +Si los valores predeterminados de @code{outside-staff-priority} no le +ofrecen las colocaciones deseadas se puede sobreescribir la prioridad +de cualquiera de los objetos. Suponga que quisiéramos que el corchete +de octava estuviera situado por debajo del elemento extensor de texto +en el ejemplo de arriba. Todo lo que debemos hacer es localizar la +prioridad de @code{OttavaBracket} en el RFI o en las tablas +anteriores, y reducirlo a un valor inferior al de @code{TextSpanner}, +recordando que @code{OttavaBracket} se crea dentro del contexto de +@code{Staff}: + +@cindex TextSpanner, ejemplo de sobreescritura +@cindex bound-details, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Place following Ottava Bracket below Text Spanners +\once \override Staff.OttavaBracket #'outside-staff-priority = #340 +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text +c4\pp +% Add Dynamic Line Spanner +c4\< +% Add Text Script +c4^Text | +c4 c +% Add Dynamic Text +c4\ff c \stopTextSpan | +% Stop Ottava Bracket +\ottava #0 +c,4 c c c | +@end lilypond + +Observe que algunos de estos objetos, concretamente los números de +compás, las indicaciones metronómicas y las letras de ensayo, se +alojan de forma predeterminada dentro del contexto @code{Score}; así +pues, debe asegurarse de que utiliza el contexto adecuado cuando se +sobreescriben sus propiedades. + +@cindex ligaduras y outside-staff-priority +@cindex ligaduras y articulaciones +@cindex articulaciones y ligaduras + +De forma predeterminada, las ligaduras de expresión están clasificadas +como objetos dentro-del-pentagrama, pero con frecuencia aparecen +encima del pentagrama si las notas que une son muy agudas. Ello puede +empujar a una posición muy elevada a los objetos fuera-del-pentagrama +como las articulaciones, pues la ligadura se colocará en primer lugar. +La propiedad @code{avoid-slur} de la articulación se puede establecer +al valor @code{'inside} (por dentro) para llevarla al interior de la +ligadura, pero la propiedad @code{avoid-slur} es efectiva solamente si +la prioridad @code{outside-staff-priority} está también ajustada al +valor @code{#f}. De forma alternativa, la prioridad +@code{outside-staff-priority} de la ligadura se puede fijar en un +valor numérico para hacer que se sitúe en línea con otros objetos +fuera del pentagrama de acuerdo con este valor. He aquí un ejemplo +que muestra el efecto de los dos métodos: + +@lilypond[quote,verbatim,relative=2] +c4( c^\markup { \tiny \sharp } d4.) c8 | +c4( +\once \override TextScript #'avoid-slur = #'inside +\once \override TextScript #'outside-staff-priority = ##f +c4^\markup { \tiny \sharp } d4.) c8 | +\once \override Slur #'outside-staff-priority = #500 +c4( c^\markup { \tiny \sharp } d4.) c8 | +@end lilypond + +Los cambios en @code{outside-staff-priority} también se pueden emplear +para controlar la situación vertical de los objetos individuales, +aunque los resultados pueden no siempre ser deseables. Suponga que +quiere que @qq{Text3} se sitúe por encima de @qq{Text4} en el ejemplo +bajo el epígrafe Comportamiento Automático de más arriba (véase +@ref{Comportamiento automático}). Todo lo que debemos hacer es localizar la +prioridad de @code{TextScript} en el RFI o en las tablas de arriba, y +aumentar la prioridad de @qq{Text3} hasta un valor superior: + +@cindex TextScript, ejemplo de sobreescritura +@cindex outside-staff-priority, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +\once \override TextScript #'outside-staff-priority = #500 +c2^"Text3" +c2^"Text4" | +@end lilypond + +Esto, ciertamente, eleva a @qq{Text3} por encima de @qq{Text4} pero +también lo eleva por encima de @qq{Text2}, y @qq{Text4} ahora se +desploma hacia abajo. Quizá no sea tan buena idea. ¿Y si lo que +realmente queremos hacer es posicionar todas las anotaciones a la +misma distancia por encima del pentagrama? Para hacerlo, vamos a +necesitar claramente espaciar las notas en sentido horizontal para +hacer sitio para el texto. Esto se hace empleando la instrucción +@code{textLengthOn}. + +@subheading \textLengthOn + +@cindex notas, espaciar junto al texto + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +De forma predeterminada, el texto producido mediante marcado no ocupa +ningún espacio horizontal en cuanto se refiere a la disposición de la +música. La instrucción @code{\textLengthOn} invierte este +comportamiento, ocasionando que las notas resulten tan espaciadas como +sea necesario para acomodar el texto: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\textLengthOn % Cause notes to space out to accommodate text +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +La instrucción para volver al comportamiento predeterminado es +@code{\textLengthOff}. Recuerde que @code{\once} funciona solamente +con @code{\override}, @code{\set}, @code{\revert} o @code{unset}, así +que no se puede usar con @code{\textLengthOn}. + +@cindex marcado, texto de, permitir las colisiones en + +El texto de marcado también evita las notas que se proyectan por +encima del pentagrama. Si esto no es lo que deseamos, el +desplazamiento automático hacia arriba se puede desactivar mediante el +establecimiento de la prioridad a @code{#f}. He aquí un ejemplo que +muestra cómo el texto de marcado interactúa con tales notas. + +@cindex TextScript, ejemplo de sobreescritura +@cindex outside-staff-priority, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +% This markup is short enough to fit without collision +c2^"Tex" c'' | +R1 | + +% This is too long to fit, so it is displaced upwards +c,,2^"Text" c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +c,,2^"Long Text " c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\textLengthOn % and turn on textLengthOn +c,,2^"Long Text " % Spaces at end are honored +c''2 | +@end lilypond + + +@subheading Matices dinámicos + +@cindex trucar la colocación de los matices +@cindex dinámica, trucar la colocación de las indicaciones de +@cindex matices, trucar la colocación + +Las indicaciones de matiz dinámico normalmente se colocarán por debajo +del pentagrama, pero se pueden posicionar por encima con la +instrucción @code{dynamicUp}. Se situarán verticalmente respecto a la +nota a la que van adosadas, y flotarán por debajo (o por encima) de +todos los objetos dentro-del-pentagrama tales como ligaduras de fraseo +y números de compás. Esto puede ofrecer resultados bastante +aceptables, como muestra este ejemplo: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\clef "bass" +\key aes \major +\time 9/8 +\dynamicUp +bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | +ees,2.~\)\mf ees4 r8 | +@end lilypond + +Sin embargo, si las notas y sus indicaciones dinámicas adosadas están +muy cerca, la colocación automática evitará las colisiones desplazando +las marcas dinámicas posteriores más lejos, aunque este puede no ser +el lugar óptimo, como muestra el siguiente ejemplo más bien +artificial: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Si se presentara una situación similar en música @q{real}, podría ser +preferible espaciar las notas un poco más entre sí, de forma que todas +las marcas dinámicas puedan caber a la misma distancia vertical desde +el pentagrama. Hemos sido capaces de hacer esto para el texto de +marcado utilizando la instrucción @code{\textLengthOn}, pero no existe +una instrucción equivalente para las indicaciones de matiz dinámico. +Por tanto, tendremos que averiguar cómo hacerlo utilizando +instrucciones @code{\override}. + +@subheading Escalado de un «Grob» + +@cindex grob, cambio de tamaño de un +@cindex escala de los grobs + +En primer lugar debemos aprender cómo se especifica el tamaño de los +grobs. Todos los grobs tienen un punto de referencia definido dentro +de ellos que se usa para colocarlos respecto a su objeto padre. +Entonces, este punto del grob se posiciona a una distancia horizontal, +@code{X-offset}, y una distancia vertical, @code{Y-offset}, a partir +de su padre. La dimensión horizontal del objeto viene dada por una +pareja de números, @code{X-extent}, que dice dónde están los límites +izquierdo y derecho respecto del punto de referencia. La amplitud +vertical se define de forma similar mediante una pareja de números, +@code{Y-extent}. Éstas son propiedades de todos los grobs que +contemplan el @code{grob-interface}. + +@cindex @code{extra-spacing-width} + +De forma predeterminada, los objetos fuera-del-pentagrama reciben una +anchura cero, de manera que pueden solaparse en la dirección +horizontal. Esto se hace mediante el truco de añadir una cantidad +infinita a la dimensión más a la izquierda y menos infinito a la +dimensión más a la derecha estableciendo el valor de +@code{extra-spacing-width} a @code{'(+inf.0 . -inf.0)}. Así, para +asegurar que no se superponen en la dirección horizontal tendremos que +sobreescribir este valor de @code{extra-spacing-width} a @code{'(0 +. 0)} de forma que el verdadero ancho se presente. Esta es la +instrucción que lo hace para las indicaciones dinámicas: + +@example +\override DynamicText #'extra-spacing-width = #'(0 . 0) +@end example + +@noindent +Veamos si funciona en nuestro ejemplo anterior: + +@cindex DynamicText, ejemplo de sobreescritura +@cindex extra-spacing-width, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +\override DynamicText #'extra-spacing-width = #'(0 . 0) +a4\f b\mf c\mp b\p | +@end lilypond + +@noindent +Bueno, ciertamente ha hecho que las marcas dinámicas ya no estén +desplazadas, pero aún quedan dos problemas. Las marcas tendrían que +separarse un poco más entre sí, y sería mejor si todas estuvieran a la +misma distancia del pentagrama. Podemos resolver el primer problema +fácilmente. En vez de hacer cero la anchura +@code{extra-spacing-width}, podemos añadirle algo más. Las unidades +son el espacio entre dos líneas de pentagrama, así que al mover el +límite izquierdo media unidad a la izquierda y el límite derecho media +unidad hacia la derecha, deberíamos conseguirlo: + +@cindex DynamicText, ejemplo de sobreescritura +@cindex extra-spacing-width, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 staff space +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Esto tiene un mejor aspecto, pero quizá habríamos preferido que las +indicaciones de dinámica estuvieran alineadas sobre la misma línea de +base en lugar de ir hacia arriba y hacia abajo con las notas. La +propiedad que lo hace es @code{staff-padding} (relleno de pentagrama) +que se estudia en la sección siguiente. + + +@node Colisiones de objetos +@section Colisiones de objetos +@translationof Collisions of objects + +@menu +* Mover objetos:: +* Arreglar notación con superposiciones:: +* Ejemplos reales de música:: +@end menu + +@node Mover objetos +@subsection Mover objetos +@translationof Moving objects + +@cindex mover objetos superpuestos +@cindex mover objetos que colisionan +@cindex mover grobs que colisionan +@cindex objetos que colisionan, mover +@cindex grobs que colisionan, mover + +Aunque pueda sorprenderle, LilyPond no es perfecto. Ciertos elementos +de notación se pueden superponer, lo que es una lástima, pero en +realidad es bastante poco frecuente. Normalmente la necesidad de +mover objetos es por claridad o razones estéticas: el aspecto es mejor +con un poco más o un poco menos de espacio de separación. + +Existen tres enfoques principales que llevan a la resolución de +superposiciones en la notación. Se deben considerar en el siguiente +orden: + +@enumerate +@item +La @strong{dirección} de uno de los objetos que se superponen se puede +cambiar usando las instrucciones predefinidas que están relacionadas +arriba para los objetos dentro-del-pentagrama (véase @ref{Objetos interiores al pentagrama}). +Se pueden recolocar fácilmente las +plicas, ligaduras de expresión y de unión, barras de corchea, +indicaciones dinámicas, texto y grupos de valoración especial de esta +forma. La limitación es que sólo tiene la posibilidad de elegir entre +dos posiciones, y podría ser que ninguna de ellas sea la adecuada. + +@item +Las @strong{propiedades del objeto}, que LilyPond usa cuando está +colocando los objetos de presentación, se pueden modificar usando la +instrucción de sobreescritura @code{\override}. Las ventadas de hacer +cambios a este tipo de propiedad son: a) que algún otro objeto se +moverá automáticamente si es necesario, para dejarle sitio, y b) una +única sobreescritura se puede aplicar a todas las instancias del mismo +tipo de objeto. Entre tales propiedades se encuentran: + +@itemize + +@item +@code{direction} (dirección) + +Ya se ha estudiado con cierto detalle: véase @ref{Objetos interiores al pentagrama}. + +@item +@code{padding} (relleno), +@code{right-padding} (relleno por la derecha), +@code{staff-padding} (relleno de pentagrama) + +@cindex relleno +@cindex padding, propiedad +@cindex right-padding, propiedad +@cindex staff-padding, propiedad + +Según un objeto se está colocando, el valor de su propiedad de relleno +@code{padding} especifica el espacio intermedio que se debe dejar +entre él mismo y el límite más próximo del objeto contra el que se +está colocando. Observe que es el valor de @code{padding} del objeto +@strong{que se está colocando} el que se usa; el valor de +@code{padding} del objeto que ya está colocado se ignora. Los +espacios intermedios especificados mediante @code{padding} se pueden +aplicar a todos los objetos que contemplan el interface +@code{side-position-interface}. + +En lugar de con @code{padding}, la colocación de los grupos de +alteraciones se controla con +@code{right-padding}. Esta propiedad se encuentra en el objeto +@code{AccidentalPlacement} que, observe, vive dentro del contexto de +@strong{Staff}. Durante el proceso tipográfico, las cabezas de las +notas se componen tipográficamente en primer lugar, y después las +alteraciones, si existen, se añaden a la izquierda de las cabezas +utilizando la propiedad de relleno por la derecha @code{right-padding} +para determinar la separación entre la alteración y la cabeza, y +de las alteraciones entre sí. Así +pues, sólo la propiedad de relleno por la derecha @code{right-padding} +del objeto @code{AccidentalPlacement} tiene efecto sobre la colocación +de las alteraciones. + +La propiedad @code{staff-padding} está estrechamente relacionada con +la propiedad @code{padding}: @code{padding} controla la separación +mínima entre cualquier objeto que contemple el interface +@code{side-position-interface} y el objeto más cercano (generalmente +la nota o las líneas del pentagrama); @code{staff-padding} se aplica +sólo a los objetos que siempre se sitúan fuera del pentagrama: +controla la separación mínima entre dicho objeto y el pentagrama. +Observe que @code{staff-padding} no tiene ningún efecto sobre objetos +que se posicionan respecto a la nota en vez de hacerlo respecto al +pentagrama, incluso aunque puede ser sobreescrito sin error por tales +objetos: simplemente se ignora. + +Para descubrir qué propiedad de relleno se necesita para el objeto que +quiere recolocar, debe volver al manual de RFI y buscar las +propiedades del objeto. Tenga cuidado porque las propiedades de +relleno podrían no estar en el objeto más obvio, así que busque en los +objetos que puedan tener alguna relación con él. + +Todos los valores de relleno se miden en espacios del pentagrama. +Para la mayor parte de los objetos el valor se establece de forma +predeterminada en aproximadamente 1.0 o menos (varía con cada objeto). +Se puede sobreescribir si se necesita una separación intermedia mayor +(o menor). + +@item +@code{self-alignment-X} (Auto-alineamiento en el eje X) + +@cindex self-alignment-X, propiedad + +Esta propiedad se puede usar para alinear el objeto a la izquierda, a +la derecha, o centrarlo con respecto al punto de referencia del objeto +«padre». Se puede usar con todos los objetos que contemplan el +interface +@code{self-alignment-interface}. En general son objetos que contienen +texto. Los valores son @code{LEFT}, @code{RIGHT} o @code{CENTER}. De +forma alternativa se puede especificar un valor numérico entre +@code{-1} y @code{+1}, donde @code{-1} es alineado por la izquierda, +@code{+1} es alineado por la derecha, y los números intermedios mueven +el texto progresivamente desde alineado por la izquierda hasta alineado +por la derecha. Se pueden especificar valores numéricos mayores de +@code{1} para mover el texto incluso más lejos hacia la izquierda, o +menos de @code{-1} para alejarlo más hacia la derecha. Un cambio en +@code{1} en el valor corresponde a un movimiento de la mitad de la +longitud total del propio texto. + +@item +@code{extra-spacing-width} (anchura de separación adicional) + +@cindex extra-spacing-width, propiedad + +Esta propiedad está disponible para todos los objetos que contemplan +el interface @code{item-interface}. Toma dos números, el primero se +suma al límite izquierdo y el segundo se suma al límite derecho. Los +números negativos desplazan el límite a la izquierda y los positivos a +la derecha, por lo que para ensanchar un objeto el primer número debe +ser negativo y el segundo positivo. Observe que no todos los objetos +ostentan los dos números. Por ejemplo, el objeto @code{Accidental} +(alteración) sólo toma nota del primer número (el borde izquierdo). + +@item +@code{staff-position} (posición de pentagrama) + +@cindex staff-position, propiedad + +@code{staff-position} es una propiedad del interface +@code{staff-symbol-referencer-interface}, que está contemplado por los +objetos que se colocan con relación al pentagrama. Especifica la +posición vertical del objeto con relación a la tercera línea del +pentagrama en medios espacios de pentagrama. Es útil en la +resolución de colisiones entre objetos de presentación como silencios +multi-compás, ligaduras de unión y notas en distintas voces. + +@item +@code{force-hshift} (forzar desplazamiento horizontal) + +@cindex force-hshift, propiedad + +Las notas muy juntas de un acorde, o aquellas que ocurren al mismo +tiempo en voces distintas, se disponen en dos (y ocasionalmente más) +columnas para evitar la superposición de las cabezas. Éstas reciben +el nombre de columnas de notas, y se crea un objeto llamado +@code{NoteColumn} para disponer las notas en dicha columna. + +La propiedad @code{force-hshift} es una propiedad de una +@code{NoteColumn} (realmente lo es del interface +@code{note-column-interface}). Modificarlo permite mover una columna +de notas en unidades adecuadas a una columna de notas, por ejemplo la +anchura de la cabeza de la nota de la primera voz. Se debe usar en +situaciones complejas donde las instrucciones @code{\shiftOn} normales +(véase @ref{Voces explícitas}) no resuelven el +conflicto entre las notas. Es preferible a la propiedad +@code{extra-offset} para este propósito porque no hay necesidad de +averiguar la distancia en espacios de pentagrama, y mover las notas +dentro o fuera de una @code{NoteColumn} afecta a otras acciones como a +la fusión entre cabezas de nota. + +@end itemize + +@item +Finalmente, cuando todo lo demás falla, los objetos se pueden +reposicionar manualmente con relación a la tercera línea del +pentagrama verticalmente, o desplazándolas una cierta distancia a una +nueva posición. Las desventajas son que los valores correctos para el +reposicionamiento se deben adivinar, a menudo por ensayo y error, para +cada objeto individual y, puesto que el movimiento se hace después de +que LilyPond ha colocado todos los demás objetos es usuario es +responsable de evitar cualquier colisión que pudiera producirse. Pero +la dificultar principal con este enfoque es que los valores de +reposicionado podrían tener que ser vueltos a calcular si la música se +modifica más tarde. Las propiedades que se pueden usar para este tipo +de posicionamiento manual son: + +@table @code +@item extra-offset (desplazamiento adicional) + +@cindex extra-offset, propiedad + +Esta propiedad se aplica a cualquier objeto de presentación que +contemple el @code{grob-interface}. Toma una pareja de números que +especifican el desplazamiento adicional en las direcciones horizontal +y vertical. Los números negativos mueven el objeto a la izquierda o +hacia abajo. Las unidades son espacios de pentagrama. El +desplazamiento adicional se hace después de que la composición +tipográfica de los objetos ha terminado, así que un objeto puede ser +reposicionado a cualquier lugar sin afectar a ninguna otra cosa. + +@item positions (posiciones) + +@cindex positions, propiedad + +Ésta es de la mayor utilidad para ajustar manualmente la inclinación y +la altura de las barras de corchea, ligaduras de expresión y corchetes +de grupos de valoración especial. Toma una pareja de números que dan +la posición de los extremos izquierdo y derecho de la barra, ligadura, +etc. con relación a la tercera línea del pentagrama. Las unidades son +espacios de pentagrama. Observe, sin embargo, que las ligaduras de +expresión y de fraseo no se pueden reposicionar en cantidades +arbitrariamente grandes. LilyPond en primer lugar genera una lista de +posiciones posibles para la ligadura y de forma predeterminada +encuentra la ligadura que tiene @qq{mejor aspecto}. Si la propiedad +@code{positions} se ha sobreescrito, la ligadura que está más cerca de +las posiciones que se han solicitado, se selecciona de la lista. +@end table + +@end enumerate + +Un objeto en particular podría no tener todas estas propiedades. Es +necesario ir al manual RFI para buscar qué propiedades se encuentran +disponibles para el objeto en cuestión. + + +Aquí presentamos una lista de los objetos que es más probable que +estén implicados en colisiones, con el nombre del objeto que habría +que buscar en el RFI para descubrir qué propiedades se deben usar para +moverlos. + +@multitable @columnfractions .5 .5 +@headitem Tipo de objeto @tab Nombre del objeto +@item Articulaciones @tab @code{Script} +@item Barras @tab @code{Beam} +@item Dinámica (verticalmente) @tab @code{DynamicLineSpanner} +@item Dinámica (horizontalmente) @tab @code{DynamicText} +@item Digitaciones @tab @code{Fingering} +@item Llamadas de ensayo y textuales @tab @code{RehearsalMark} +@item Ligaduras de expresión @tab @code{Slur} +@item Texto, por ejemplo @code{^"texto"} @tab @code{TextScript} +@item Ligaduras de unión @tab @code{Tie} +@item Grupos de valoración especial @tab @code{TupletBracket} +@end multitable + + +@node Arreglar notación con superposiciones +@subsection Arreglar notación con superposiciones +@translationof Fixing overlapping notation + +Veamos ahora cómo pueden ser de ayuda las propiedades que hemos visto +en la sección anterior, para resolver problemas de notación que se +superpone. + +@subheading la propiedad padding (relleno) + +@cindex relleno +@cindex arreglar notación que se superpone +@cindex superpuesta, notación + +La propiedad @code{padding} se puede ajustar para aumentar (o +disminuir) la distancia entre símbolos impresos encima o debajo de las +notas. + +@cindex Script, ejemplo de sobreescritura +@cindex padding, propiedad, ejemplo + +@lilypond[quote,fragment,relative=1,verbatim] +c2\fermata +\override Script #'padding = #3 +b2\fermata +@end lilypond + +@cindex MetronomeMark, ejemplo de sobreescritura +@cindex padding, propiedad, ejemplo + +@lilypond[quote,fragment,relative=1,verbatim] +% This will not work, see below +\override MetronomeMark #'padding = #3 +\tempo 4 = 120 +c1 | +% This works +\override Score.MetronomeMark #'padding = #3 +\tempo 4 = 80 +d1 | +@end lilypond + +Observe en el segundo ejemplo la gran importancia que tiene saber qué +contexto maneja un determinado objeto. Puesto que el objeto +@code{MetronomeMark} se maneja dentro del contexto @code{Score}, los +cambios de propiedades en el contexto @code{Voice} pasarán +inadvertidos. Para ver más detalles, consulte @ruser{Modificar las propiedades}. + +Si la propiedad de relleno @code{padding} de un objeto se incrementa +cuando dicho objeto se encuentra en una pila de objetos que se están +colocando de acuerdo a su prioridad @code{outside-staff-priority}, +entonces ese objeto se moverá, y también todos los que están por fuera +de él. + + +@subheading right-padding (relleno por la derecha) + +@cindex right-padding, propiedad + +La propiedad @code{right-padding} afecta al espaciado entre la +alteración y la nota a que se aplica. Normalmente no es necesaria, +pero el espaciado predeterminado puede estar mal para ciertos glifos +de alteraciones o combinaciones de glifos que se usan en música +microtonal. Éstos tienen que introducirse sobreescribiendo el sello +de la alteración con un elemento de marcado que contenga los símbolos +deseados, así: + +@cindex Accidental, ejemplo de sobreescritura +@cindex text, propiedad, ejemplo +@cindex stencil, propiedad, ejemplo +@cindex AccidentalPlacement, ejemplo de sobreescritura +@cindex right-padding, propiedad, ejemplo + + +@lilypond[quote,ragged-right,verbatim] +sesquisharp = \markup { \sesquisharp } +\relative c'' { + c4 + % This prints a sesquisharp but the spacing is too small + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 c + % This improves the spacing + \once \override Score.AccidentalPlacement #'right-padding = #0.6 + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 | +} +@end lilypond + +@noindent +Esto utiliza necesariamente una sobreescritura para el sello de la +alteración que no se estudiará hasta más adelante. El tipo de sello +debe ser un procedimiento, aquí modificado para que imprima el +contenido de la propiedad @code{text} del objeto @code{Accidental}, +que a su vez está establecido como un signo de sesquisostenido. +Entonces el signo se puede separar de la cabeza de la nota +sobreescribiendo @code{right-padding}. + +@noindent + +@subheading la propiedad staff-padding (relleno de pentagrama) + +@cindex alineación de objetos sobre la línea base +@cindex objetos, alineación sobre la línea base + +@code{staff-padding} se puede usar para alinear objetos como matices +dinámicos a lo largo de una línea de base a una altura fija sobre el +pentagrama, en lugar de hacerlo a una altura que dependa de la +posición de la nota a la que están adosados. No es una propiedad de +@code{DynamicText} sino de @code{DynamicLineSpanner}. Esto es así +porque la línea de base debe aplicarse por igual a @strong{todas} las +dinámicas, entre ellas las que se han creado como objetos de +extensión. Así que ésta es la forma de alinear las indicaciones de +matiz en el ejemplo de la sección anterior: + +@cindex DynamicText, ejemplo de sobreescritura +@cindex extra-spacing-width, propiedad, ejemplo +@cindex DynamicLineSpanner, ejemplo de sobreescritura +@cindex staff-padding, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 unit +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +% Align dynamics to a base line 2 units above staff +\override DynamicLineSpanner #'staff-padding = #2 +a4\f b\mf c\mp b\p +@end lilypond + + +@subheading la propiedad self-alignment-X (auto-alineación en X) + +El ejemplo siguiente muestra cómo esto puede resolver la colisión +entre un objeto de digitación de cuerda y la plica de una nota +mediante el alineamiento del límite derecho con el punto de referencia +de la nota «padre»: + +@cindex StringNumber, ejemplo de sobreescritura +@cindex self-alignment-X, propiedad, ejemplo + +@lilypond[quote,fragment,ragged-right,verbatim,relative=3] +\voiceOne + +\once \override StringNumber #'self-alignment-X = #RIGHT + +@end lilypond + +@subheading la propiedad staff-position (posición en el pentagrama) + +@cindex objeto, colisión dentro del pentagrama + +Los silencios multi-compás en una voz pueden chocar con las notas en +otra voz. Puesto que estos silencios se tipografían centrados entre +las barras de compás se necesitaría bastante esfuerzo para que +LilyPond averiguara qué otras notas podrían chocar con él, ya que +actualmente todo el manejo de colisiones entre notas y silencios se +hace solamente para notas y silencios que ocurren al mismo tiempo. He +aquí un ejemplo de colisión de este tipo: + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< { c4 c c c } \\ { R1 } >> +@end lilypond + +La mejor solución aquí es mover el silencio multi-compás hacia abajo, +pues el silencio está en la voz dos. El ajuste predeterminado para +@code{\voiceTwo} (es decir, en la segunda voz de una construcción +@code{<<@{...@} \\ @{...@}>>}) es que @code{staff-position} tenga el +valor -4 para MultiMeasureRest, así que tenemos que bajarlo, digamos, +cuatro semi-espacios de pentagrama, al valor @code{-8}. + +@cindex MultiMeasureRest, ejemplo de sobreescritura +@cindex staff-position, propiedad, ejemplo + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< + { c4 c c c } + \\ + \override MultiMeasureRest #'staff-position = #-8 + { R1 } +>> +@end lilypond + +Esto es mejor que utilizar, por ejemplo, @code{extra-offset}, porque +la línea adicional por encima del silencio se inserta automáticamente. + +@subheading la propiedad extra-offset (desplazamiento adicional) + +@cindex posicionar objetos +@cindex posicionar grobs +@cindex objetos, posicionar +@cindex grobs, posicionar + +La propiedad @code{extra-offset} da un completo control sobre el +posicionamiento de un objeto tanto vertical como horizontalmente. + +En el ejemplo siguiente, la segunda digitación se desplaza ligeramente +a la izquierda, y 1.8 espacios de pentagrama hacia abajo: + +@cindex Fingering, ejemplo de sobreescritura +@cindex extra-offset, propiedad, ejemplo + +@lilypond[quote,fragment,relative=1,verbatim] +\stemUp +f4-5 +\once \override Fingering #'extra-offset = #'(-0.3 . -1.8) +f4-5 +@end lilypond + + +@subheading la propiedad positions (posiciones) + +@cindex controlar manualmente grupos especiales, ligaduras y barras +@cindex manual, control, de grupos especiales, ligaduras y barras +@cindex grupos especiales, barras de, control manual +@cindex ligaduras de expresión, control manual +@cindex ligaduras de fraseo, control manual +@cindex barras de corchea, control manual + +La propiedad @code{positions} permite controlar manualmente la +posición e inclinación de los tresillos, ligaduras de expresión y de +fraseo, y barras de corchea. He aquí un ejemplo que tiene una fea +ligadura de fraseo debido a que intenta evitar la ligadura de +expresión que está sobre la acciaccatura. + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 \acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +Simplemente podemos mover la ligadura de fraseo por encima de las +notas, y de hecho ésta será la solución preferida: + +@cindex PhrasingSlur, ejemplo de sobreescritura +@cindex positions, propiedad, ejemplo + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\phrasingSlurUp +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +Pero si por algún motivo no pudiéramos hacerlo, la otra alternativa +sería mover el extremo izquierdo de la ligadura de fraseo un poco +hacia abajo usando la propiedad @code{positions}. Esto también +resuelve la forma algo indecente de la ligadura. + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\once \override PhrasingSlur #'positions = #'(-4 . -3) +\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: + +@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 } >> +} +@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: + +@cindex Beam, ejemplo de sobreescritura +@cindex positions, propiedad, ejemplo + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \clef "bass" + << + \override Beam #'positions = #'(3 . 3) + { b,8 ais, b, g, } + \\ + { e,8 g e, 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 +segunda voz. + +@subheading la propiedad force-hshift (forzar desplazamiento horizontal) + +Ahora podremos ver cómo aplicar las correcciones finales al ejemplo de +Chopin que presentamos al final de @ref{Oigo voces}, que +dejamos con este aspecto: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + 2 des + } + >> | + 1 | +} +@end lilypond + +@noindent +Las dos notas inferiores del primer acorde (es decir, las que están en +al tercera voz) no deberían separarse de la columna de notas de las dos +notas agudas. Para corregir esto, establecemos el valor de +@code{force-hshift} (que es una propiedad de @code{NoteColumn}) de +esas notas a cero. La nota más grave del segundo acorde se sitúa +mejor justo a la derecha de las más agudas. Lo conseguimos +estableciendo el valor de @code{force-hshift} de esta nota a 0.5, o +sea, la anchura de media cabeza de nota a la derecha de la columna de +las notas agudas. + +Presentamos a continuación el resultado final: + +@cindex NoteColumn, ejemplo de sobreescritura +@cindex force-hshift, propiedad, ejemplo + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +@node Ejemplos reales de música +@subsection Ejemplos reales de música +@translationof Real music example + +Finalizaremos esta sección sobre los trucos mostrando los pasos que se +deben tomar para tratar con un ejemplo complicado que necesita varios +trucos para producir el resultado deseado. El ejemplo se ha escogido +deliberadamente para ilustrar el uso de la Referencia de la Notación +para resolver problemas de notación poco comunes. No es +representativo del proceso de grabado más usual, por lo que ¡le +recomendamos que no deje que estas dificultades le desanimen! +¡Afortunadamente, las dificultades como éstas no son muy comunes! + +El ejemplo está extraído de la Primera Balada de Chopin, Op. 23, +compases 6 al 9, la transición entre el Lento inicial y el Moderato. +Presentamos en primer lugar el aspecto que queremos que tenga el +resultado, pero para evitar complicar demasiado el ejemplo hemos +quitado las indicaciones dinámicas, las digitaciones y el pedal. + +@c The following should appear as music without code +@c This example should not be indexed +@c line-width ensures no break +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + bes2.^\markup { \bold "Moderato" } r8 + << + { c,8 d fis bes a } + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Observamos en primer lugar que la parte de la mano derecha del tercer +compás requiere cuatro voces. Son las cinco corcheas unidas por una +barra, la nota Do ligada, el Re blanca que se funde con el Re corchea, +y el Fa sostenido negra con puntillo, que también está fundida con la +corchea de su misma altura. Todo lo demás está en una sola voz, así +que lo más fácil es introducir estas tres voces adicionales, en el +momento en que se necesiten y de forma temporal. Si ha olvidado cómo +hacerlo, lea las secciones @ref{Oigo voces} y @ref{Voces explícitas}. +Aquí tomamos la decisión de utilizar voces instanciadas explícitamente +para el pasaje polifónico, dado que LilyPond es más probable que pueda +evitar las colisiones si todas las voces se instancian explícitamente +de esta forma. + +Vamos a comenzar introduciendo las notas como dos variables y +disponiendo la estructura de pentagramas en un bloque Score, y veremos +qué produce LilyPond de forma predeterminada: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4. g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2. % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2 | + 1 | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Todas las notas son correctas, pero el aspecto está lejos de ser +satisfactorio. La ligadura de unión choca con el cambio de compás, +ciertas notas no se funden correctamente, y faltan algunos elementos de +notación. En primer lugar trataremos con lo más fácil. Podemos +añadir fácilmente la ligadura de expresión de la mano izquierda y la +ligadura de fraseo de la mano derecha, pues todo ello se estudió en el +Tutorial. Al hacerlo así obtenemos: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1) | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +El primer compás ahora es correcto. El segundo compás contiene un +arpegio y acaba en una doble barra. ¿Cómo los hacemos, pues no han +sido mencionados en este Manual de Aprendizaje? Aquí es donde tenemos +que volver e la Referencia de la Notación. Buscando la palabra +@q{arpegio} y @q{línea divisoria} en el índice nos muestra rápidamente +que un arpegio se hace añadiendo @code{\arpeggio} a un acorde, y la +doble barra se produce por medio de la instrucción @code{\bar "||"}. +Esto podemos hacerlo fácilmente. A continuación tenemos que corregir +la colisión entre la ligadura de unión y la indicación de compás. +Esto se hace mejor moviendo la ligadura hacia arriba. Estudiamos cómo +mover objetos anteriormente en @ref{Mover objetos}, donde dice que +los objetos que están situados de forma relativa al pentagrama se +pueden mover verticalmente +sobreescribiendo su propiedad @code{staff-position}, que +se especifica en unidades de medio espacio de pentagrama respecto de +la línea central del pentagrama. Así pues, la sobreescritura +siguiente colocada justo antes de la primera nota ligada subirá la +ligadura 3.5 medios espacios de pentagrama por encima de la línea +central: + +@code{\once \override Tie #'staff-position = #3.5} + +Con esto se completa el compás dos, dando como resultado: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Vayamos ahora al tercer compás y comienzo de la sección Moderato. El +tutorial nos enseñó cómo escribir texto en negrita mediante la +instrucción @code{\markup}, por lo que añadir @qq{Moderato} en negrita +es fácil. Pero ahora ¿cómo fundimos notas que están en distintas +voces? Aquí es donde debemos volver a buscar ayuda en el manual de +Referencia de la notación. Al buscar la palabra @qq{merge} (mezcla) en +el índice de la Referencia de la notación llegamos rápidamente a las +instrucciones para mezclar notas con distinta cabeza y con o sin +puntillo, en @ruser{Resolución de las colisiones}. En nuestro ejemplo tenemos +que fusionar ambos tipos de nota en el transcurso de la sección +polifónica del compás 3; por tanto, en virtud de la información que +aparece en la Referencia de la Notación, escribimos + +@example +\mergeDifferentlyHeadedOn +\mergeDifferentlyDottedOn +@end example + +@noindent +al principio de la sección, y + +@example +\mergeDifferentlyHeadedOff +\mergeDifferentlyDottedOff +@end example + +@noindent +al final, dando como resultado: + +@c line-width ensures no break +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Estas sobreescrituras han fundido los dos Fa sostenido, pero no los +dos Re. ¿Por qué no? La respuesta está en la misma sección de la +Referencia de la Notación: las notas que se fusionan deben tener las +plicas en direcciones opuestas y dos notas no se pueden fusionar bien +si hay una tercera nota en la misma columna. Aquí los dos Re tienen +las plicas hacia arriba y hay una tercera nota: el Do. Sabemos cómo +cambiar la dirección de la plica usando @code{\stemDown}, y la +Referencia de la Notación también explica cómo mover el Do: aplicar un +desplazamiento usando una de las instrucciones @code{\shift}. Pero +¿cuál? El Do está en la voz dos que tiene desactivado el +desplazamiento, y los dos Re están en las voces uno y tres, que tienen +el desplazamiento desactivado y activado, respectivamente. Por ello +tenemos que desplazar el Do un nivel más todavía, usando +@code{\shiftOnn} para evitar que interfiera con los dos Re. Al +aplicar estos cambios obtenemos: + +@cindex Tie, ejemplo de sobreescritura +@cindex staff-position, propiedad, ejemplo + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + % Move the c2 out of the main note column so the merge will work + c,8~ \shiftOnn c2 + } + \new Voice { + \voiceThree + % Stem on the d2 must be down to permit merging + s8 \stemDown d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Ya casi está. Solamente quedan dos problemas: la plica hacia abajo +sobre el Re fusionado no tendría que estar ahí, y el Do estaría mejor +colocado a la derecha de los Re. Sabemos cómo hacer las dos cosas a +partir de trucos anteriores: hacemos la plica transparente, y movemos +el Do con la propiedad @code{force-hshift}. Aquí tenemos el resultado +final: + +@cindex NoteColumn, ejemplo de sobreescritura +@cindex force-hshift, propiedad, ejemplo +@cindex Stem, ejemplo de sobreescritura +@cindex transparent, propiedad, ejemplo + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + + +@node Trucajes adicionales +@section Trucajes adicionales +@translationof Further tweaking + +@menu +* Otras aplicaciones de los trucos:: +* Uso de variables para los trucos:: +* Hojas de estilo:: +* Otras fuentes de información:: +* Trucos avanzados con Scheme:: +@end menu + +@node Otras aplicaciones de los trucos +@subsection Otras aplicaciones de los trucos +@translationof Other uses for tweaks + +@cindex transparent, uso de la propiedad +@cindex objetos, hace invisibles +@cindex eliminar objetos +@cindex objetos, eliminar +@cindex objetos, ocultar +@cindex ocultar objetos +@cindex invisibles, objetos +@cindex objetos invisibles +@cindex ligar notas entre voces distintas + +@subheading Ligar notas entre voces distintas + +El ejemplo siguiente muestra cómo conectar notas que están en +distintas voces utilizando ligaduras de unión. Normalmente sólo se +pueden conectar mediante ligaduras de unión dos notas que estén en la +misma voz. Usando dos voces, con las notas ligadas en una de ellas: + +@lilypond[quote,fragment,relative=2] +<< { b8~ b\noBeam } \\ { b8[ g] } >> +@end lilypond + +@noindent +y borrando la primera plica hacia arriba en esa voz, da la impresión +de que la ligadura se cruza entre las voces: + +@cindex Stem, ejemplo de sobreescritura +@cindex transparent, propiedad, ejemplo + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +Para estar seguros de que la plica que acabamos de borrar no aprieta +demasiado a la ligadura, podemos alargar la plica estableciendo su +valor de longitud @code{length} a @code{8}, + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +@subheading Simulación de un calderón en el MIDI + +@cindex sello, uso de la propiedad +@cindex fermata, realización en MIDI + +Para los objetos fuera-del-pentagrama, normalmente es mejor +sobreescribir la propiedad @code{stencil} («sello») del objeto que su +propiedad @code{transparent} cuando desee quitarlos de la salida +impresa. Mediante el establecimiento de la propiedad @code{stencil} +de un objeto al valor @code{#f} podemos quitar el objeto por completo +de la salida impresa. Esto significa que no tiene efecto sobre la +colocación de otros objetos que pudieran colocarse en relación a él. + +Por ejemplo, si quisiéramos cambiar la indicación metronómica con el +propósito de simular un calderón en la salida MIDI, seguramente no +querríamos que la indicación metronómica apareciese en la salida +impresa, y no querríamos influir sobre la separación entre los dos +sistemas ni sobre la colocación de las anotaciones adyacentes sobre el +pentagrama. Por lo tanto, establecer su propiedad @code{stencil} al +valor @code{#f} sería la mejor manera. Mostramos aquí el efecto de +los dos métodos: + +@cindex MetronomeMark, ejemplo de sobreescritura +@cindex transparent, propiedad, ejemplo + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'transparent = ##t + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@cindex MetronomeMark, ejemplo de sobreescritura +@cindex stencil, propiedad, ejemplo + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'stencil = ##f + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@noindent +Ambos métodos quitan de la salida impresa la indicación metronómica +que alarga el calderón, y los dos afectan al tempo del MIDI tal y como +queríamos, pero la indicación metronómica transparente de la primera +línea fuerza una colocación muy alta de la indicación de tempo que +sigue, mientras que la segunda (con el sello suprimido) no lo hace. + +@seealso +Glosario musical: +@rglos{system}. + + +@node Uso de variables para los trucos +@subsection Uso de variables para los trucos +@translationof Using variables for tweaks + +@cindex variables, uso de, para trucos +@cindex usar variables para hacer trucos +@cindex trucos, usar variables para hacer + +Las instrucciones de sobreescritura son con frecuencia largas y +tediosas de escribir, y se tienen que escribir de forma absolutamente +correcta. Si las mismas sobreescrituras se van a utilizar muchas +veces, podría merecer la pena definir variables para guardarlas. + +Supongamos que queremos realzar ciertas palabras de la letra de una +canción imprimiéndolas en cursiva y negrita. Las instrucciones +@code{\italic} y @code{\bold} sólo funcionan dentro de la letra de las +canciones si están incluidas, junto con la palabra o palabras que se +pretenden modificar, dentro de un @code{\markup}, lo que las hace +tediosas de escribir. La necesidad de incluir las propias palabras +impide que se puedan usar en variables simples. ¿Podríamos, como +alternativa, utilizar las instrucciones @code{\override} y +@code{\revert}? + +@example +@code{\override Lyrics . LyricText #'font-shape = #'italic} +@code{\override Lyrics . LyricText #'font-series = #'bold} + +@code{\revert Lyrics . LyricText #'font-shape} +@code{\revert Lyrics . LyricText #'font-series} +@end example + +Estas instrucciones también serían extremadamente tediosas de escribir +si hubiera muchas palabras que quisiéramos subrayar. Pero sí +@emph{podemos} definirlas como dos variables y usarlas para delimitar +las palabras que destacar. Otra ventaja de la utilización de +variables para estas sobreescrituras es que ya no son necesarios los +espacios que rodean al punto, puesto que no se interpretan +directamente en el modo @code{\lyricmode}. He aquí un ejemplo de +esto, aunque en la práctica quizá elegiríamos unos nombres de variable +más cortos para que fueran más rápidos de teclear: + +@cindex LyricText, ejemplo de sobreescritura +@cindex font-shape, propiedad, ejemplo +@cindex font-series, propiedad, ejemplo + +@lilypond[quote,verbatim] +emphasize = { + \override Lyrics.LyricText #'font-shape = #'italic + \override Lyrics.LyricText #'font-series = #'bold +} + +normal = { + \revert Lyrics.LyricText #'font-shape + \revert Lyrics.LyricText #'font-series +} + +global = { \key c \major \time 4/4 \partial 4 } + +SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = \lyrics { + E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, +} + +VerseTwo = \lyricmode { + O | \emphasize Christ, \normal whose voice the | wa -- ters heard, +} + +VerseThree = \lyricmode { + O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood +} + +VerseFour = \lyricmode { + O | \emphasize Tri -- ni -- ty \normal of | love and pow'r +} + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Soprano" { \VerseOne } + \new Lyrics \lyricsto "Soprano" { \VerseTwo } + \new Lyrics \lyricsto "Soprano" { \VerseThree } + \new Lyrics \lyricsto "Soprano" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@node Hojas de estilo +@subsection Hojas de estilo +@translationof Style sheets + +La salida que produce LilyPond se puede modificar profundamente; +consulte @ref{Trucar la salida} para leer detalles sobre este asunto. +Pero ¿qué ocurre si tiene muchos archivos a los que les quiere aplicar +sus propios trucos? O ¿qué ocurre si, sencillamente, quiere separar +los trucos de la propia música? Todo esto es bastante fácil de +conseguir. + +Veamos un ejemplo. No se preocupe si no entiende +las partes que tienen todos los @code{#()}. Esto se explicará en +@ref{Trucos avanzados con Scheme}. + +@lilypond[quote,verbatim,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Existen varios problemas con la salida que se superpone; los +arreglaremos utilizando las técnicas descritas en @ref{Mover objetos}. +Pero también haremos algo respecto a las definiciones @code{mpdolce} e +@code{inst}. Éstas producen la salida que deseamos, pero quizá las +querríamos utilizar en otra pieza. Podríamos simplemente copiarlas y +pegarlas al principio de cada archivo, pero sería bastante molesto. +También hace que se queden las definiciones a la vista dentro de +nuestros archivos de música, y yo personalmente encuentro todos los +@code{#()} bastante poco estéticos. Los vamos a esconder dentro de +otro archivo: + +@example +%%% guardar esto en un archivo de nombre "definiciones.ily" +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) +@end example + +Haremos referencia a este archivo utilizando la instrucción +@code{\include} al principio del archivo de música (la extensión +@code{.ily} se utiliza para distinguir este archivo de inclusión --que +se supone que no debe ser procesado de forma independiente-- del +archivo principal). Ahora modificaremos la música (guardemos este +archivo como @file{musica.ly}). + +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. + +@example +\include "definiciones.ily" + +\relative c'' @{ + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinete" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Eso tiene mejor aspecto, pero haremos algunos cambios más. El +glissando es difícil de ver, así que lo haremos más grueso y lo +acercaremos a las cabezas de las notas. Pondremos la indicación +metronómica encima de la clave, en lugar de ir encima de la primera +nota. Y por último, mi profesor de composición odia las indicaciones +de compás @q{C}, así que la convertiremos en @q{4/4}. + +Sin embargo, no debemos cambiar el archivo @file{musica.ly}. +Sustituyamos nuestro archivo @file{definiciones.ily} con éste: + +@example +%%% definiciones.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + \override TimeSignature #'style = #'numbered + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout{ + \context { + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { + \Staff + \override TimeSignature #'style = #'numbered + } + \context { + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +¡Eso tiene un aspecto mucho mejor! Ahora suponga que quiere publicar +esta pieza. A mi profesor de composición no le gustan las +indicaciones de compás @q{C}, pero yo les tengo cierto cariño. +Copiaremos el archivo actual @file{definiciones.ily} a +@file{publicar-web.ily} y modificaremos éste. Como el propósito de +esta música es producir un PDF que va a mostrarse en la pantalla, +también vamos a aumentar el tamaño general de la salida. + +@example +%%% definiciones.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Ahora, en la música, simplemente sustituyo @code{\include +"definiciones.ily"} por @code{\include "publicar-web.ily"}. Por +supuesto, podríamos hacer esto aún más práctico. Podríamos hacer un +archivo @file{definiciones.ily} que contuviera solamente las +definiciones de @code{mpdolce} y de @code{inst}, un archivo +@file{publicar-web.ily} que contuviera solamente la sección +@code{\layout} que se mostró en el ejemplo, y un archivo +@file{universidad.ily} que contendría solamente los trucos para +producir la salida que le gusta a mi profesor. El comienzo de +@file{musica.ly} tendría entonces este aspecto: + +@example +\include "definiciones.ily" + +%%% ¡Quitar el comentario de una sola de estas líneas! +\include "publicar-web.ily" +%\include "universidad.ily" +@end example + +Este enfoque puede ser útil incluso si va a producir sólo un conjunto +de particellas. Yo utilizo media docena de archivos de @q{hojas de +estilo} para mis proyectos. Comienzo todos los archivos de música con +@code{\include "../global.ily"}, que contiene + +@example +%%% global.ily +\version @w{"@version{}"} + +#(ly:set-option 'point-and-click #f) + +\include "../iniciar/iniciar-definiciones.ily" +\include "../iniciar/iniciar-disposicion.ily" +\include "../iniciar/iniciar-cabeceras.ily" +\include "../iniciar/iniciar-papel.ily" +@end example + + +@node Otras fuentes de información +@subsection Otras fuentes de información +@translationof Other sources of information + +La documentación del manual de Referencia de Funcionamiento Interno +contiene montañas de información sobre LilyPond, pero se puede obtener +más información aún leyendo los archivos internos de LilyPond. Para +echarles un vistazo, en primer lugar debe buscar la carpeta +correspondiente a su sistema. La ubicación de esta carpeta depende +(a) de si consiguió el programa LilyPond descargando un binario +precompilado desde el sitio web lilypond.org o si lo instaló mediante +un gestor de paquetes (es decir, distribuido con Linux, o instalado +bajo fink o cygwin) o fue compilado a partir de la fuente, y (b) de +qué sistema operativo está utilizando: + + +@strong{Descargado de lilypond.org} + +@itemize @bullet +@item Linux + +Diríjase a +@file{@var{CARPETA_DE_INSTALACIÓN}/lilypond/usr/@/share/lilypond/current/} + +@item MacOS X + +Diríjase a +@file{@var{CARPETA_DE_INSTALACIÓN}/LilyPond.app/Contents/@/Resources/share/lilypond/current/} +bien haciendo @code{cd} hacia este directorio desde el Terminal, o +bien manteniendo pulsada la tecla de Control y haciendo click sobre la +aplicación de LilyPond, y allí eligiendo @q{Mostrar el contenido del +paquete}. + +@item Windows + +Mediante el Explorador de Windows, diríjase a +@file{@var{CARPETA_DE_INSTALACIÓN}/LilyPond/usr/@/share/lilypond/current/} + +@end itemize + +@strong{Instalado mediante un gestor de paquetes o compilado a partir de la fuente} + +Diríjase a +@file{@var{PREFIJO}/share/lilypond/@var{X.Y.Z}/}, donde @var{PREFIJO} +se encuentra determinado por su administrador de paquetes o guión +@code{configure}, y @var{X.Y.Z} es el número de la versión de +LilyPond. + +@smallspace + +Dentro de esta carpeta, las dos subcarpetas interesantes son + +@itemize +@item @file{ly/} - contiene archivos en formato LilyPond +@item @file{scm/} - contiene archivos en formato Scheme +@end itemize + +Vamos a comenzar observando algunos archivos que están en @file{ly/}. +Abra @file{ly/property-init.ly} con un editor de textos. El mismo que +usaría normalmente para los archivos @file{.ly} servirá perfectamente. +Este archivo contiene las definiciones de todas las instrucciones +estándar predefinidas de LilyPond, como por ejemplo @code{\stemUp} y +@code{\slurDotted}. Podrá ver que no son nada más que definiciones de +variables que contienen una o varias instrucciones @code{\override}. +Por ejemplo, @code{/tieDotted} está definido de tal forma que su valor +es: + +@example +tieDotted = @{ + \override Tie #'dash-period = #0.75 + \override Tie #'dash-fraction = #0.1 +@} +@end example + +Si no le gustan los valores predeterminados, estas instrucciones +predefinidas se pueden redefinir con facilidad como cualquier otra +variable, al principio de su archivo de código de entrada. + +Los siguientes son los archivos más útiles que se encuentran en +@file{ly/}: + +@multitable @columnfractions .4 .6 +@headitem Archivo + @tab Contenido +@item @file{ly/engraver-init.ly} + @tab Definiciones de Contextos de grabadores +@item @file{ly/paper-defaults-init.ly} + @tab especificaciones de valores predeterminados relacionados con el papel +@item @file{ly/performer-init.ly} + @tab Definiciones de Contextos de interpretación +@item @file{ly/property-init.ly} + @tab Definiciones de todas las instrucciones predefinidas que son comunes +@item @file{ly/spanner-init.ly} + @tab Definiciones de las instrucciones predefinidas relacionadas con los objetos de extensión +@end multitable + +Otros ajustes (como las definiciones de las instrucciones de marcado) +se almacenan como archivos @file{.scm} (de Scheme). El lenguaje de +programación Scheme se utiliza para proporcionar un interfaz +programable en el funcionamiento interno de LilyPond. Cualquier +explicación adicional sobre estos archivos se encuentra por el momento +fuera del ámbito de este manual, porque se requieren conocimientos del +lenguaje Scheme. Se advierte a los usuarios que se necesita una +importante cantidad de conocimientos técnicos o de tiempo para +comprender el lenguaje Scheme y estos archivos (véase @rextend{Tutorial de Scheme}). + +Si ya tiene estos conocimientos, los archivos de Scheme que pueden +interesarle son: + +@multitable @columnfractions .4 .6 +@headitem Archivo + @tab Contenido +@item @file{scm/auto-beam.scm} + @tab Valores predeterminados de sub-barrado +@item @file{scm/define-grobs.scm} + @tab valores predeterminados de las propiedades de grobs +@item @file{scm/define-markup-commands.scm} + @tab Especificar todas las instrucciones de marcado +@item @file{scm/midi.scm} + @tab Ajustes predeterminados para la salida MIDI +@item @file{scm/output-lib.scm} + @tab Ajustes que afectan al aspecto de los trastes, colores, alteraciones, lineas divisorias, etc. +@item @file{scm/parser-clef.scm} + @tab Definiciones de las claves contempladas +@item @file{scm/script.scm} + @tab Ajustes predeterminados para las articulaciones +@end multitable + + +@node Trucos avanzados con Scheme +@subsection Trucos avanzados con Scheme +@translationof Advanced tweaks with Scheme + +Aunque es posible hacer muchas cosas con las instrucciones +@code{\override} y @code{\tweak} , tenemos una forma incluso más +poderosa de modificar el funcionamiento de LilyPond, a través de un +interface programable hacia las operaciones internas de LilyPond. Se +puede incorporar código escrito en el lenguaje de programación Scheme, +directamente en el mecanismo de funcionamiento de LilyPond. Por +supuesto, para hacer esto se necesitan al menos unos conocimientos +básicos de programación en Scheme, y damos una introducción en el +@rextend{Tutorial de Scheme}. + +Como ejemplo que ilustra una de las muchas posibilidades, en lugar de +dar a una propiedad un valor constante, se puede establecer al +resultado de un procedimiento de Scheme que se invoca cada vez que +LilyPond accede a esta propiedad. La propiedad se puede establecer +dinámicamente a un valor determinado por el procedimiento en el +momento en que se invoca. En este ejemplo damos a las cabezas de las +notas un color que depende de su posición dentro del pentagrama. + +@cindex x11-color, función, ejemplo de utilización +@cindex NoteHead, ejemplo de sobreescritura +@cindex color, propiedad, establecer a procedimiento de Scheme + +@lilypond[quote,verbatim,ragged-right] +#(define (color-notehead grob) + "Color the notehead according to its position on the staff." + (let ((mod-position (modulo (ly:grob-property grob 'staff-position) + 7))) + (case mod-position + ;; Return rainbow colors + ((1) (x11-color 'red )) ; for C + ((2) (x11-color 'orange )) ; for D + ((3) (x11-color 'yellow )) ; for E + ((4) (x11-color 'green )) ; for F + ((5) (x11-color 'blue )) ; for G + ((6) (x11-color 'purple )) ; for A + ((0) (x11-color 'violet )) ; for B + ))) + +\relative c' { + % Arrange to obtain color from color-notehead procedure + \override NoteHead #'color = #color-notehead + a2 b | c2 d | e2 f | g2 a | +} +@end lilypond + +Se pueden encontrar ejemplos adicionales que muestran la utilización +de estos interfaces programables, en +@rextendnamed{Callback functions,Funciones de callback}. + diff --git a/Documentation/es/macros.itexi b/Documentation/es/macros.itexi new file mode 100644 index 0000000000..1cb27ebb9d --- /dev/null +++ b/Documentation/es/macros.itexi @@ -0,0 +1,825 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore + + +@include version.itexi +@include common-macros.itexi + +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@quotedblleft{}\TEXT\@quotedblright{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@html +
+@end html +@strong{Nota:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Nota:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + +@c do not translate the following macro -- it is used in +@c an untranslated manual. + +@ifhtml + +@macro advanced{TEXT} +@html +
+@end html +@strong{Advanced note:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro advanced{TEXT} +@quotation +@b{Advanced note:} \TEXT\ +@end quotation +@end macro + +@end ifnothtml + + +@macro docMain +@cartouche +Para mayor información sobre la forma en que este manual se relaciona +con el resto de la documentación, o para leer este manual en otros +formatos, consulte @rweb{Manuales}. + +Si le falta algún manual, encontrará toda la documentación en +@w{@uref{http://@/www@/.lilypond@/.org/}}. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@emph{La traducción de la siguiente nota de copyright se ofrece como +cortesía para las personas de habla no inglesa, pero únicamente la +nota en inglés tiene validez legal.} + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@quotation +Se otorga permiso para copiar, distribuir y/o modificar este documento +bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 +o cualquier versión posterior publicada por la Free Software Foundation; +sin ninguna de las secciones invariantes. +Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia +de Documentación Libre de GNU''. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +Este documento se ha puesto en el dominio público. +@end copying +@end ifclear + + + +@c ***** Title page ***** +@ifnottex +@node Top +@top LilyPond --- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle El tipografiador de música +@titlefont{\TITLE\} +@author El equipo de desarrolladores de LilyPond + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +Para la versión de LilyPond @version{} +@end titlepage + +@end macro + + +@c ***** Headings in a doc subsection ***** + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Instrucciones predefinidas +@end macro + +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the next macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Fragmentos de código seleccionados +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading Véase también +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Advertencias y problemas conocidos +@end macro + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Glosario Musical} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Glosario Musical} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Manual de Aprendizaje} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Manual de Aprendizaje} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Referencia de la Notación} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Referencia de la Notación} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Extender} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extender} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Cambios} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Cambios} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Guía del colaborador} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Guía del colaborador} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,Información general} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,Información general} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Ensayo} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Ensayo} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Utilización del Programa} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Utilización del Programa} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Fragmentos de código} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Fragmentos de código} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Referencia de Funcionamiento Interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Referencia de Funcionamiento Interno} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glosario Musical} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glosario Musical} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Manual de Aprendizaje} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning,Manual de Aprendizaje} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Referencia de la Notación} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Referencia de la Notación} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Cambios} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Cambios} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extender} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Extender} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Guía del colaborador} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Guía del colaborador} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Información general} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Información general} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Ensayo} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Ensayo} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Utilización del Programa} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Utilización del Programa} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Fragmentos de código} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Fragmentos de código} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Referencia de Funcionamiento Interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Referencia de Funcionamiento Interno} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glosario musical} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glosario musical} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Manual de aprendizaje} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Manual de aprendizaje} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Referencia de la notación} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Referencia de la notación} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Cambios} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Cambios} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Extender} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Extender} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Guía del colaborador} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Guía del colaborador} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-web,Información general} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-web,Información general} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Ensayo} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Ensayo} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Utilización del programa} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Utilización del programa} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Fragmentos de código} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Fragmentos de código} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Referencia de funcionamiento interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Referencia de funcionamiento interno} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Glosario Musical} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glosario Musical} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning.es,Manual de Aprendizaje} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning.es,Manual de Aprendizaje} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation.es,Referencia de la Notación} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation.es,Referencia de la Notación} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Cambios} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Cambios} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Extender} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Extender} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Guía del colaborador} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Guía del colaborador} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web,Información general} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web,Información general} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Ensayo} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Ensayo} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage.es,Utilización del Programa} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage.es,Utilización del Programa} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Fragmentos de código} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Fragmentos de código} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Referencia de Funcionamiento Interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,Referencia de Funcionamiento Interno} +@end macro + +@end iftex + + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
+@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + +@macro help{TEXT} +@html +
+ + Necesitamos ayuda: + \TEXT\ +
+@end html +@end macro + +@c LEGALESE + +@macro logoLegalLinux +Tux, el pingüino de Linux, es obra de +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} hecha con +@uref{http://www.isc.tamu.edu/~lewing/gimp/, el Programa de +Manipulación de Imágenes de GNU}. + +@end macro + +@macro logoLegalFreeBSD +El logotipo de FreeBSD es una marca registrada de +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +La @qq{imagen de la X} no es una marca registrada. Es obra de +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} y +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, y se +puso bajo la Licencia de Documentación Libre de GNU versión 1.2 o +posterior. Encontramos esta imagen en +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +esta página de Wikimedia Commons}. + +@end macro + +@macro logoLegalWindows +La @qq{imagen de los cuatro rectángulos de colores} no es una marca +registrada. Es obra de +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} y está +puesta bajo la Licencia de Documentación Libre de GNU, versión 1.2. +Encontramos esta imagen en +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +esta página de Wikimedia Commons}. + +@end macro + +@end ifset + + +@c ***** Macros specific to translated docs ***** + + +@macro englishref +Esta sección aún no está traducida; consulte el manual en inglés. +@end macro + + + diff --git a/Documentation/es/notation.tely b/Documentation/es/notation.tely new file mode 100644 index 0000000000..8f942d7bb5 --- /dev/null +++ b/Documentation/es/notation.tely @@ -0,0 +1,126 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond.info +@settitle Referencia de la notación de GNU LilyPond +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@macro manualIntro +Este manual ofrece una referencia para toda la notación musical que se +puede producir con LilyPond versión @version{}. Da por sentado que el +lector está familiarizado con el material que hay en +@rlearningnamed{Top, Manual de aprendizaje}. +@end macro + +@c `Notation Reference' was born 1999-10-11 with git commit 940dda0... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 por los autores. +@end macro + + +@set FDL +@include macros.itexi + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Notation Reference of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage Spanish +@end ignore + +@c Translators: Francisco Vila + +@lilyTitlePage{Referencia de la notación} + + +@ifnottex + +@menu +* Notación musical:: Notación que se utiliza en casi todos los proyectos. +* Notación especializada:: Notación que sólo se usa para cometidos específicos. +* Entrada y salida generales:: Información teneral sobre la entrada y la salida de LilyPond. +* Problemas de espaciado:: Presentación del resultado en papel. +* Cambiar los valores por omisión:: Ajuste fino del resultado. + +Apéndices + +* Tablas del manual sobre notación:: Tablas y cuadros. +* Hoja de referencia rápida:: Resumen de la sintaxis de LilyPond. +* Gramática de LilyPond:: Diagrama de sintaxis para el analizador sintáctico de LilyPond. +* GNU Free Documentation License:: Licencia de este documento. +* Índice de instrucciones de LilyPond:: +* Índice de LilyPond:: +@end menu + +@docMain +@end ifnottex + +@contents + +@allowcodebreaks false + +@include notation/notation.itely +@include notation/specialist.itely + +@include notation/input.itely +@include notation/spacing.itely + +@include notation/changing-defaults.itely + + +@include notation/notation-appendices.itely +@include notation/cheatsheet.itely + +@node Gramática de LilyPond +@appendix Gramática de LilyPond +@translationof LilyPond grammar + +Este apéndice contiene una descripción de la gramática del lenguaje de +LilyPond, tal y como el analizador sintáctico la proporciona como +salida. + +@verbatiminclude ly-grammar.txt + + +@include fdl.itexi + +@node Índice de instrucciones de LilyPond +@appendix Índice de instrucciones de LilyPond +@translationof LilyPond command index + +Este índice relaciona todas las instrucciones y palabras clave de +LilyPond, con enlaces a aquellas secciones del manual que describen o +se ocupan de su uso. Cada uno de los enlaces consta de dos partes. +La primera parte apunta a la situación exacta del manual en que +aparece la instrucción o palabra clave; la segunda parte apunta al +comienzo de la sección correspondiente del manual en la que aparece la +instrucción o palabra clave. + +@printindex ky + +@node Índice de LilyPond +@appendix Índice de LilyPond +@translationof LilyPond index + +Además de todas las instrucciones y palabras clave de LilyPond, este +índice es una lista de términos musicales y las palabras que tienen +relación con cada uno de ellos, con enlaces a aquellas secciones del +manual que describen o se ocupan de dicho término. Cada uno de los +enlaces consta de dos partes. La primera parte apunta a la situación +exacta del manual en que aparece el término; la segunda parte apunta +al comienzo de la sección correspondiente del manual en la que se +discute dicho término. + +@printindex cp + +@bye diff --git a/Documentation/es/notation/GNUmakefile b/Documentation/es/notation/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/es/notation/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/notation/ancient.itely b/Documentation/es/notation/ancient.itely new file mode 100644 index 0000000000..3ddce36305 --- /dev/null +++ b/Documentation/es/notation/ancient.itely @@ -0,0 +1,2742 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@c vim: foldmethod=marker +@ignore + Translation of GIT committish: 274c916b48393e0f866cbab68c18a505f6fc7ea3 + + 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 Notación antigua +@section Notación antigua +@translationof Ancient notation + +@lilypondfile[quote]{ancient-headword.ly} + +@cindex Vaticana, Editio +@cindex Medicaea, Editio +@cindex hufnagel +@cindex Petrucci +@cindex mensural + +@menu +* Panorámica de los estilos contemplados:: +* Notación antigua - funcionalidades comunes:: +* Tipografiar música mensural:: +* Tipografiado del canto gregoriano:: +* Trabajar con música antigua - escenarios y soluciones:: +@end menu + +Entre las formas en que está contemplada la notación antigua se +encuentra la posibilidad de tipografiar notación mensural y canto +gregoriano. Se puede acceder a estas funcionalidades mediante la +modificación de propiedades de estilo de objetos gráficos como la +cabeza de las notas o los silencios, o bien mediante la utilización de +uno de los contextos predefinidos para la notación mensural o +gregoriana. + +Muchos objetos gráficos, como la cabeza y el corchete de las figuras, +las alteraciones, la indicación de compás y los silencios ofrecen una +propiedad @code{style} (estilo), que se puede cambiar para emular +varios estilos diferentes de notación antigua. Véase + +@itemize +@item @ref{Cabezas de nota de la música mensural}, +@item @ref{Alteraciones y armaduras de la música mensural}, +@item @ref{Silencios de la música mensural}, +@item @ref{Claves de la música mensural}, +@item @ref{Claves de canto gregoriano}, +@item @ref{Corchetes de la música mensural}, +@item @ref{Indicaciones de compás de la música mensural}. +@end itemize + +Ciertos conceptos de notación se incluyen específicamente para la +notación antigua: + +@itemize +@item @ref{Custos}, +@item @ref{Divisiones}, +@item @ref{Ligaduras}. +@end itemize + +@seealso +Glosario musical: +@rglos{custos}, +@rglos{ligature}, +@rglos{mensural notation}. + +Referencia de la notación: +@ref{Cabezas de nota de la música mensural}, +@ref{Alteraciones y armaduras de la música mensural}, +@ref{Silencios de la música mensural}, +@ref{Claves de canto gregoriano}, +@ref{Corchetes de la música mensural}, +@ref{Indicaciones de compás de la música mensural}, +@ref{Custos}, +@ref{Divisiones}, +@ref{Ligaduras}. + + +@node Panorámica de los estilos contemplados +@subsection Panorámica de los estilos contemplados +@translationof Overview of the supported styles + +Están disponibles tres estilos para la composición tipográfica del +canto gregoriano: + +@itemize +@item @emph{Editio Vaticana} +es un estilo completo para canto gregoriano, que sigue la apariencia +de las ediciones de Solesmes, los libros de canto oficiales del +Vaticano desde 1904. LilyPond contempla todos los signos de notación +que se utilizan en este estilo, entre ellos las ligaduras, +@emph{custodias} y símbolos especiales como el quilisma y el oriscus. + +@cindex Solesmes +@cindex Vaticana, Editio + +@item El estilo @emph{Editio Medicaea} +ofrece ciertas funcionalidades que se usan en las ediciones Medicaea +(o de Ratisbona) que se usaban con anterioridad a las ediciones de +Solesmes. Las diferencias más significativas con respecto al estilo +@emph{Vaticana} son las claves, que tienen trazos descendentes, y la +cabeza de las figuras, que son cuadradas y regulares. + +@cindex Ratisbona, Editio +@cindex Medicaea, Editio + +@item El estilo @emph{Hufnagel} (en @qq{uña de herradura}) o @emph{gótico} +reproduce el estilo de escritura en los manuscritos de canto +medievales de Alemania y Centro Europa. Recibe el nombre de la forma +de la nota básica (la @emph{virga}), que parece una pequeña uña. +@cindex hufnagel +@end itemize + +Tres estilos emulan la apariencia de los manuscritos y ediciones +impresas de música mensural tardomedievales y renacentistas: + +@itemize +@item El estilo @emph{Mensural} +se asemeja bastante al estilo de escritura utilizado en los +manuscritos tardomedievales y renacentistas tempranos, con la cabeza +de sus figuras en forma de rombo pequeñas y estrechas, y los silencios +que imitan un estilo dibujado a mano. + +@cindex mensural + +@item El estilo @emph{Neomensural} +es una versión modernizada y estilizada del anterior: la cabeza de las +figuras es más ancha y los silencios están formados por trazos +rectilíneos. Este estilo está particularmente indicado, p.ej., para +los @emph{incipits} de transcripciones de fragmentos de música +mensural. + +@cindex neomensural + +@item El estilo @emph{Petrucci} +recibe su nombre de Ottaviano Petrucci (1466-1539), el primer impresor +en utilizar tipos móviles para la música (en su @emph{Harmonice +musices odhecaton}, 1501). Este estilo utiliza para las figuras una +cabeza más grande que los otros estilos mensurales. + +@cindex Petrucci + +@end itemize + +@emph{Baroque} y @emph{Classical} no son estilos completos pero +difieren del estilo predeterminado solamente en ciertos detalles: +algunas cabezas de nota (Baroque) y el silencio de negra (Classical). + +Sólo el estilo mensural tiene alternativas para todos los aspectos de +la notación. Así, no existen silencios ni corchetes en los estilos +gregorianos, pues estos símbolos no se usan en la notación del canto +llano, y el estilo Petrucci no posee corchetes ni alteraciones por sí +mismo. + +Cada elemento de la notación se puede cambiar independientemente de +los otros, y así podemos usar corchetes mensurales, cabezas de +petrucci, silencios de classical y claves de vaticana en la misma +pieza, si queremos. + +@seealso +Glosario musical: +@rglos{mensural notation}, +@rglos{flag}. + + +@node Notación antigua - funcionalidades comunes +@subsection Notación antigua - funcionalidades comunes +@translationof Ancient notation---common features + +@menu +* Contextos predefinidos:: +* Ligaduras:: +* Custos:: +* Soporte para bajo cifrado:: +@end menu + + +@node Contextos predefinidos +@unnumberedsubsubsec Contextos predefinidos +@translationof Pre-defined contexts + +Para el canto gregoriano y la notación mensural, están a nuestra +disposición contextos predefinidos de voz y de pauta, que establecen +todos los símbolos de notación a unos valores adecuados para estos +estilos. Si nos satisfacen estos valores predeterminados, podemos a +continuación introducir directamente las notas sin la necesidad de +preocuparnos de los detalles sobre cómo personalizar un contexto. +Véanse uno de los contextos predefinidos @code{VaticanaVoice}, +@code{VaticanaStaff}, @code{MensuralVoice} y +@code{MensuralStaff}. + +@itemize +@item @ref{Contextos del canto gregoriano}, +@item @ref{Contextos de la música mensural}. +@end itemize + +@seealso +Glosario musical: +@rglos{mensural notation}. + +Referencia de la notación: +@ref{Contextos del canto gregoriano}, +@ref{Contextos de la música mensural}. + + +@node Ligaduras +@unnumberedsubsubsec Ligaduras +@translationof Ligatures + +@cindex Ligatures + +@c TODO: Should double check if I recalled things correctly when I wrote +@c down the following paragraph by heart. + +Una ligadura es un símbolo gráfico que representa al menos dos notas +distintas. Las ligaduras aparecieron originalmente en los manuscritos +de la notación del canto gregoriano para denotar secuencias de notas +ascendentes o descendentes en la misma sílaba. Se usan también en +notación mensural. + +Las ligaduras se escriben @emph{encerrándolas} dentro de un par +@code{\[} y @code{\]}. Ciertos estilos de ligadura podrían necesitar +una sintaxis de entrada adicional específica para este tipo de +ligadura en particular. De forma predeterminada, el grabador +@code{LigatureBracket} se limita a colocar un corchete recto +sobre la ligadura: + +@lilypond[quote,ragged-right,verbatim] +\transpose c c' { + \[ g c a f d' \] + a g f + \[ e f a g \] +} +@end lilypond + +Están disponibles otros dos estilos de ligaduras: el Vaticana para +canto gregoriano, y el Mensural para música mensural (sólo están +contempladas las ligaduras mensurales blancas para la música mensural, +y con ciertas limitaciones). Para usar cualquiera de estos estilos, +se debe sustituir el grabador predeterminado +@code{Ligature_bracket_engraver} por uno de los grabadores +especializados en ligaduras del contexto @code{Voice}, como se +explica en @ref{Ligaduras mensurales blancas} y +@ref{Ligaduras de neumas cuadrados gregorianos}. + +@seealso +Glosario musical: +@rglos{ligature}. + +Referencia de la notación: +@ref{Ligaduras mensurales blancas}, +@ref{Ligaduras de neumas cuadrados gregorianos}. + + +@knownissues + +Las ligaduras necesitan un espaciado especial que aún no se ha +desarrollado. Como consecuencia, la mayor parte del tiempo existe una +separación excesiva entre las ligaduras, y a menudo los cortes de +línea no son satisfactorios. Además, la letra de los cantos no se +alinea correctamente con las ligaduras. + +Las alteraciones accidentales no se deben imprimir dentro de las +ligaduras, sino que deben reunirse e imprimirse juntas delante de +ellas. + +La sintaxis todavía utiliza el obsoleto estilo infijo +@code{\[ expresión_musical \]}. Por motivos de consistencia, esto +cambiará algún día al estilo postfijo @code{nota\[ ... nota\]}. + + +@node Custos +@unnumberedsubsubsec Custos +@translationof Custodes + +@cindex custos +@cindex custodes + +Un @emph{custos} (en plural: @emph{custodias}, que en latín significa +@qq{guarda}) es un símbolo que aparece al final de una pauta. Anticipa +la altura de la primera o primeras notas de la línea siguiente, +ayudando al intérprete con los saltos de línea durante la ejecución. + +Las custodias se utilizaron mucho en la notación musical hasta el +siglo XVII. En nuestros días, sobreviven sólo en algunas formas +particulares de notación musical como las ediciones contemporáneas de +canto gregoriano como la @emph{Editio Vaticana}. Hay distintos glifos +para el custos que se utilizan en las diferentes variaciones de estilo +notacional. + +Para tipografiar las custodias, simplemente coloque un grabador +@code{Custos_engraver} dentro del contexto @code{Staff} +(el contexto del pentagrama) al declarar el bloque de @code{\layout} +(el bloque de disposición de la página), y modifique el estilo del +custos con una instrucción @code{\override} si lo desea, como se +muestra en el ejemplo siguiente: + +@lilypond[quote,ragged-right] +\score { + \relative c'' { + a1 + \break + g + } + \layout { + \context { + \Staff + \consists Custos_engraver + \override Custos #'style = #'mensural + } + } +} +@end lilypond + +El glifo del custos se selecciona mediante la propiedad @code{style}. +Los estilos contemplados son @code{vaticana}, @code{medicaea}, +@code{hufnagel} y @code{mensural}. Se muestran en el siguiente +fragmento: + +@lilypond[quote,ragged-right,fragment] +\new Lyrics \lyricmode { + \markup { \column { + \typewriter "vaticana " + \line { " " \musicglyph #"custodes.vaticana.u0" } + } } + \markup { \column { + \typewriter "medicaea " + \line { " " \musicglyph #"custodes.medicaea.u0" } + }} + \markup { \column { + \typewriter "hufnagel " + \line { " " \musicglyph #"custodes.hufnagel.u0" } + }} + \markup { \column { + \typewriter "mensural " + \line { " " \musicglyph #"custodes.mensural.u0" } + }} +} +@end lilypond + +@seealso +Glosario musical: +@rglos{custos}. + +Referencia de funcionamiento interno: +@rinternals{Custos}. + +Fragmentos de código: +@rlsr{Ancient notation}. + + +@node Soporte para bajo cifrado +@unnumberedsubsubsec Soporte para bajo cifrado +@translationof Figured bass support + +Está contemplada de forma limitada la notación de bajo cifrado +barroco: véase @ref{Bajo cifrado}. + +@seealso +Glosario musical: +@rglos{figured bass}. + +Referencia de la notación: +@ref{Bajo cifrado}. + + +@node Tipografiar música mensural +@subsection Tipografiar música mensural +@translationof Typesetting mensural music + +@menu +* Contextos de la música mensural:: +* Claves de la música mensural:: +* Indicaciones de compás de la música mensural:: +* Cabezas de nota de la música mensural:: +* Corchetes de la música mensural:: +* Silencios de la música mensural:: +* Alteraciones y armaduras de la música mensural:: +* Alteraciones de anotación (musica ficta):: +* Ligaduras mensurales blancas:: +@end menu + + +@node Contextos de la música mensural +@unnumberedsubsubsec Contextos de la música mensural +@translationof Mensural contexts + +@cindex MensuralVoiceContext +@cindex MensuralStaffContext + +Los contextos predefinidos de voz @code{MensuralVoice} y de pauta +@code{MensuralStaff} se pueden usar para grabar una pieza en estilo +mensural. Estos contextos establecen a unos valores iniciales +adecuados todas las propiedades relevantes de los contextos y de los +objetos gráficos, de manera que pueda comenzar inmediatamente a +escribir el canto, como lo demuestra el siguiente fragmento: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new MensuralVoice = "discantus" \transpose c c' { + \override Score.BarNumber #'transparent = ##t { + c'1\melisma bes a g\melismaEnd + f\breve + \[ f1\melisma a c'\breve d'\melismaEnd \] + c'\longa + c'\breve\melisma a1 g1\melismaEnd + fis\longa^\signumcongruentiae + } + } + \new Lyrics \lyricsto "discantus" { + San -- ctus, San -- ctus, San -- ctus + } + >> +} +@end lilypond + + +@seealso +Glosario musical: +@rglos{mensural notation}. + +@node Claves de la música mensural +@unnumberedsubsubsec Claves de la música mensural +@translationof Mensural clefs + +@cindex clefs + +La siguiente tabla presenta todas las claves antiguas que están +contempladas a través de la instrucción @code{\clef}. Algunas de las +claves usan el mismo glifo, pero se diferencian sólo en la línea en +que se imprimen. En tales casos, se usa un número añadido al nombre +para enumerar dichas claves, numerado desde la línea inferior hasta la +superior. Aún así, puede forzar manualmente que se escriba un glifo +de clave sobre una línea arbitraria, como se encuentra descrito en +@ref{Clave}. La nota impresa a la derecha de cada clave en la columna +de los ejemplos denota la situación del Do central (@code{c'}) con +respecto a dicha clave. + +Petrucci usaba claves de Do que tenían barras verticales en el lado +izquierdo en un equilibrio variable, dependiendo de la línea de la +pauta en que se imprimían. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Descripción} +@tab +@b{Claves posibles} +@tab +@b{Ejemplo} + +@item +clave de Do, mensural +@tab +@code{mensural-c1}, @code{mensural-c2},@* +@code{mensural-c3}, @code{mensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +clave de Fa, mensural +@tab +@code{mensural-f} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-f" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +clave de Sol, mensural +@tab +@code{mensural-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-g" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +clave de Do, neomensural +@tab +@code{neomensural-c1}, @code{neomensural-c2},@* +@code{neomensural-c3}, @code{neomensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "neomensural-c2" c +@end lilypond + +@item +claves de Do en el estilo de Petrucci, para su uso en distintas líneas +de la pauta (el ejemplo muestra la clave de Do en segunda) +@tab +@code{petrucci-c1}, @code{petrucci-c2},@* +@code{petrucci-c3}, @code{petrucci-c4},@* +@code{petrucci-c5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +claves de Fa en el estilo de Petrucci, para su uso en +distintas líneas de la pauta +(el ejemplo muestra la lclave de Fa en tercera línea) +@tab +@code{petrucci-f3}, @code{petrucci-f4},@* +@code{petrucci-f5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-f3" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +clave de Sol en el estilo de Petrucci +@tab +@code{petrucci-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-g" + \override NoteHead #'style = #'mensural + c +@end lilypond +@end multitable + +@seealso +Glosario musical: +@rglos{mensural notation}, +@rglos{clef}. + +Referencia de la notación: +@ref{Clave}. + + +@knownissues + +La clave de Sol mensural está asignada a la clave de Sol de Petrucci. + + +@node Indicaciones de compás de la música mensural +@unnumberedsubsubsec Indicaciones de compás de la música mensural +@translationof Mensural time signatures + +@cindex mensuración, símbolo de +@cindex compás, indicación de + +Los símbolos de mensuración (que son algo similar, pero no exactamente +igual que las indicaciones de compás) están contemplados de forma +limitada. Los glifos están configurados de forma fija para +determinadas fracciones de tiempo. En otras palabras, para obtener un +símbolo de mensuración determinado con la instrucción +@code{\time n/m}, se tienen que escoger @code{n} y @code{m} según la +siguiente tabla + +@lilypond[quote,ragged-right] +\layout { + indent = 0.0 + \context { + \Staff + \remove Staff_symbol_engraver + \remove Clef_engraver + \remove Time_signature_engraver + } +} +{ + \set Score.timing = ##f + \set Score.barAlways = ##t + s_\markup { "\\time 4/4" }^\markup { " " \musicglyph +#"timesig.neomensural44" } + s + s_\markup { "\\time 2/2" }^\markup { " " \musicglyph +#"timesig.neomensural22" } + s + s_\markup { "\\time 6/4" }^\markup { " " \musicglyph +#"timesig.neomensural64" } + s + s_\markup { "\\time 6/8" }^\markup { " " \musicglyph +#"timesig.neomensural68" } + \break + s_\markup { "\\time 3/2" }^\markup { " " \musicglyph +#"timesig.neomensural32" } + s + s_\markup { "\\time 3/4" }^\markup { " " \musicglyph +#"timesig.neomensural34" } + s + s_\markup { "\\time 9/4" }^\markup { " " \musicglyph +#"timesig.neomensural94" } + s + s_\markup { "\\time 9/8" }^\markup { " " \musicglyph +#"timesig.neomensural98" } + \break + s_\markup { "\\time 4/8" }^\markup { " " \musicglyph +#"timesig.neomensural48" } + s + s_\markup { "\\time 2/4" }^\markup { " " \musicglyph +#"timesig.neomensural24" } +} +@end lilypond + +Utilice la propiedad @code{style} del elemento gráfico +@code{TimeSignature} para seleccionar las indicaciones de compás +de la música antigua. Los estilos contemplados son @code{neomensural} +y @code{mensural}. La tabla anterior utiliza el estilo +@code{neomensural}. Los ejemplos siguientes muestran las diferencias +que existen entre los estilos: + +@lilypond[ragged-right,fragment,relative=1,quote] +{ + \textLengthOn + + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter default } + + \override Staff.TimeSignature #'style = #'numbered + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter numbered } + + \override Staff.TimeSignature #'style = #'mensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter mensural } + + \override Staff.TimeSignature #'style = #'neomensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter neomensural } + \override Staff.TimeSignature #'style = #'single-digit + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter single-digit } +} +@end lilypond + +@ref{Indicación de compás} +ofrece una introducción general al uso de las indicaciones de compás. + +@seealso +Glosario musical: +@rglos{mensural notation}. + +Referencia de la notación: +@ref{Indicación de compás}. + +@knownissues +Las relaciones de duración de las notas no pueden cambiar con la +indicación de compás, porque no son constantes. Por ejemplo, +la razón de 1@tie{}breve = 3@tie{}semibreves +(@emph{tempus perfectum}) se puede hacer a mano mediante el +establecimiento de + +@example +breveTP = #(ly:make-duration -1 0 3 2) +@dots{} +@{ c\breveTP f1 @} +@end example + +@noindent +Esto fija un valor para @code{breveTP} de 3/2 multiplicado por 2 = 3 +veces una redonda. + +Los símbolos @code{mensural68alt} y @code{neomensural68alt} +(alternativos al símbolo de 6/8) no se puede seleccionar directamente +con @code{\time}. En su lugar, utilice +@code{\markup @{\musicglyph #"timesig.mensural68alt" @}}. + + +@node Cabezas de nota de la música mensural +@unnumberedsubsubsec Cabezas de nota de la música mensural +@translationof Mensural note heads + +@cindex cabezas de nota antiguas + +Para la notación antigua, se puede elegir un estilo de cabezas de +notas distinto al @code{default} (estilo predeterminado). Esto se +consigue estableciendo la propiedad @code{style} del objeto +@code{NoteHead} a los valores @code{baroque}, +@code{neomensural}, @code{mensural}, @code{petrucci}, +@code{blackpetrucci} o @code{semipetrucci}. + +El estilo @code{baroque} se diferencia del estilo predeterminado +@code{default} en que: + +@itemize +@item Proporciona una cabeza de nota para la @code{maxima}, y +@item Usa una forma cuadrada para las cabezas de @code{\breve}. +@end itemize + +Los estilos @code{neomensural}, @code{mensural} y @code{petrucci} se +diferencian del estilo @code{baroque} en que: + +@itemize +@item Usan cabezas romboidales para las semibreves y todas las notas más cortas, y +@item Centran las plicas sobre las cabezas. +@end itemize + +El estilo @code{blackpetrucci} produce notas con una cabeza que puede +usarse en notación mensural negra o en secciones de coloratio dentro +de la notación mensural blanca. A causa de que el estilo de la cabeza +de las notas no influye en el número de corchetes, en este estilo la +notación de la semimínima debe hacer como @code{a8*2}, no como +@code{a4}, pues de lo contrario tendrá el aspecto de una mínima. El +multiplicador puede ser distinto si se usa la coloratio, es decir, +para la notación de tresillos. + +Utilice el estilo @code{semipetrucci} para dibujar notas con cabeza +semi-rellena (breves, longas y máximas). + +El ejemplo siguiente muestra el estilo @code{petrucci}: + +@c Renaissance music doesn't use bar lines ... but they do help to +@c separate the notes for easier identification. + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\autoBeamOff +\override NoteHead #'style = #'petrucci +a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a' +\override NoteHead #'style = #'semipetrucci +a'\breve*5/6 +\override NoteHead #'style = #'blackpetrucci +a'8*4/3 a' +\override NoteHead #'style = #'petrucci +a'\longa +@end lilypond + + +@ref{Estilos de cabezas de nota} ofrece una visión de conjunto sobre la +totalidad de los estilos de cabeza disponibles. + +@seealso +Glosario musical: +@rglos{mensural notation}, +@rglos{note head}. + +Referencia de la notación: +@ref{Estilos de cabezas de nota}. + + +@node Corchetes de la música mensural +@unnumberedsubsubsec Corchetes de la música mensural +@translationof Mensural flags + +@cindex flags + +Utilice la propiedad @code{flag-style} del elemento gráfico +@code{Stem} para seleccionar los corchetes de estilo antiguo. +Aparte del estilo de corchete por defecto @code{default}, sólo está +contemplado el estilo @code{mensural} + +@lilypond[quote,fragment,ragged-right,verbatim] +\override Stem #'flag-style = #'mensural +\override Stem #'thickness = #1.0 +\override NoteHead #'style = #'mensural +\autoBeamOff +c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 +c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 +@end lilypond + +Observe que la bandera más interna de cada uno de los corchetes +mensurales siempre se alinea verticalmente con una línea de la pauta. + +No existe un estilo particular de corchete para la notación neo-mensural ni Petrucci. +@c Hence, +@c when typesetting the incipit of a transcribed piece of mensural +@c music, the default flag style should be used. +No existen corchetes en la notación del canto gregoriano. + + +@seealso +Glosario musical: +@rglos{mensural notation}, +@rglos{flag}. + + +@knownissues + +La unión de los corchetes antiguos a las plicas está ligeramente +desviada. +@c due to a change in early 2.3.x. + +La alineación vertical de cada uno de los corchetes con una línea de +la pauta da por supuesto que las plicas siempre terminan exactamente +encima o bien exactamente en el medio de dos líneas de la pauta. Esto +puede no ser siempre cierto cuando se utilizan las posibilidades de +disposición avanzadas de la notación clásica (que, de todas formas, +por lo común se encuentra fuera del ámbito de la notación mensural). + + +@node Silencios de la música mensural +@unnumberedsubsubsec Silencios de la música mensural +@translationof Mensural rests + +@cindex rests, ancient + +Utilice la propiedad @code{style} del elemento gráfico +@code{Rest} para seleccionar silencios antiguos. Los estilos +contemplados son @code{classical}, @code{neomensural} y +@code{mensural}. @code{classical} se diferencia del estilo por +defecto @code{default} solamente en que el silencio de negra parece un +silencio de corchea invertido horizontalmente. Los estilos +@code{mensural} y @code{neomensural} reproducen el aspecto de los +silencios de los manuscritos y ediciones impresas de hasta el s.XVI. + +El ejemplo siguiente muestra los estilos @code{mensural} y +@code{neomensural}: + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\override Rest #'style = #'classical +r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'mensural +r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'neomensural +r\longa^"neomensural" r\breve r1 r2 r4 r8 r16 +@end lilypond + +No existen silencios de fusa y semifusa específicos para los estilos +mensural ni neo-mensural. En su lugar se tomarán los silencios del +estilo predeterminado. + +@seealso +Glosario musical: +@rglos{mensural notation}. + +Referencia de la notación: +@ref{Silencios}. + +Fragmentos de código: +@rlsr{Ancient notation}. + + +@knownissues +El glifo para el silencio de máxima en el estilo mensural es en +realidad un silencio de longa perfecta; use dos (o tres) silencios de +longa para imprimir un silencio de máxima. Los sliencions de longa no +se agrupan automáticamente, por lo que debe hacerse manualmente +utilizando silencios con altura determinada. + + +@node Alteraciones y armaduras de la música mensural +@unnumberedsubsubsec Alteraciones y armaduras de la música mensural +@translationof Mensural accidentals and key signatures + +@cindex alteraciones +@cindex armadura + +El estilo @code{mensural} ofrece unos símbolos de sostenido y bemol +distintos de los del estilo predeterminado. Si se solicita, el +símbolo de becuadro se extrae del estilo @code{vaticana}. + +@lilypond[quote,ragged-right,staffsize=26] +\markup { + \column { + "mensural" + \line { " " \musicglyph #"accidentals.mensural-1" + " " \musicglyph #"accidentals.mensural1" } + } +} +@end lilypond + +El estilo de las alteraciones y de la armadura de la tonalidad se +controlan a través de la propiedad @code{glyph-name-alist} de los +elementos gráficos @code{Accidental} y +@code{KeySignature}, respectivamente; p.ej.: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + +@seealso +Glosario musical: +@rglos{mensural notation}, +@rglos{Pitch names}, +@rglos{accidental}, +@rglos{key signature}. + +Referencia de la notación: +@ref{Alturas}, +@ref{Alteraciones accidentales}, +@ref{Alteraciones accidentales automáticas}, +@ref{Armadura de la tonalidad}. + +Referencia de funcionamiento interno: +@rinternals{KeySignature}. + + +@cindex alteraciones accidentales + + +@node Alteraciones de anotación (musica ficta) +@unnumberedsubsubsec Alteraciones de anotación (@emph{musica ficta}) +@translationof Annotational accidentals (musica ficta) + +En la música europea de hasta aprox. 1600, se esperaba de los +cantantes que alterasen cromáticamente ciertas notas según su propia +iniciativa y de acuerdo a ciertas reglas. Esto recibe el nombre de +@notation{musica ficta}. En las transcripciones modernas, estas +alteraciones accidentales se imprimen normalmente encima de la nota. + +@cindex alteraciones de la musica ficta +@cindex musica ficta, alteraciones + +Están contempladas estas alteraciones sugeridas, y se pueden activar +estableciendo @code{suggestAccidentals} al valor verdadero. + +@funindex suggestAccidentals + +@lilypond[verbatim,fragment,relative=1] +fis gis +\set suggestAccidentals = ##t +ais bis +@end lilypond + +Esto hará que se traten @emph{todas} las alteraciones siguientes como +@emph{musica ficta} hasta que se desactive con +@code{\set suggestAccidentals = ##f}. Una forma más práctica es usar +@code{\once \set suggestAccidentals = ##t}, que puede incluso +definirse como una forma breve muy conveniente: + +@lilypond[quote,verbatim] +ficta = { \once \set suggestAccidentals = ##t } +\score { \relative c'' + \new MensuralVoice { + \once \set suggestAccidentals = ##t + bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1 + } +} +@end lilypond + + +@seealso +Referencia de funcionamiento interno: +@rinternals{Accidental_engraver}, +@rinternals{AccidentalSuggestion}. + + +@node Ligaduras mensurales blancas +@unnumberedsubsubsec Ligaduras mensurales blancas +@translationof White mensural ligatures + +@cindex Mensural ligatures +@cindex White mensural ligatures + +Las ligaduras mensurales blancas están contempladas de forma limitada. + +Para grabar ligaduras mensurales blancas, en el bloque layout o de +diseño de página reemplace el grabador +@code{Ligature_bracket_engraver} por el grabador +@code{Mensural_ligature_engraver} en el contexto +@code{Voice}: + +@example +\layout @{ + \context @{ + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + @} +@} +@end example + +No existe ningún lenguaje de entrada adicional para describir la forma +de una ligadura mensural blanca. Más bien la forma se determina +exclusivamente a partir de la altura y duración de las notas +comprendidas. Si bien este enfoque podría hacer que un usuario con +poca experiencia tardase un tiempo en acostumbrarse a él, tiene la +gran ventaja de que toda la información musical de la ligadura se +conoce internamente. Esto no se requiere solamente para una salida +MIDI correcta, sino que también permite la transcripción automática de +las ligaduras. + +En algunos lugares, dos notas consecutivas se pueden representar bien +como dos cuadrados, bien como un paralelogramo oblicuo (forma de +flexa). En tales casos la forma por omisión es dos cuadrados, pero +puede requerirse una flexa fijando la propiedad @code{ligature-flexa} +de la @emph{segunda} cabeza. La longitud de una flexa se puede fijar +mediante la propiedad @code{flexa-width} de la cabeza. + +Por ejemplo: + +@c @example +@c \set Score.timing = ##f +@c \set Score.defaultBarType = "empty" +@c \override NoteHead #'style = #'neomensural +@c \override Staff.TimeSignature #'style = #'neomensural +@c \clef "petrucci-g" +@c \[ c'\maxima g \] +@c \[ d\longa c\breve f e d \] +@c \[ c'\maxima d'\longa \] +@c \[ e'1 a g\breve \] +@c @end example +@lilypond[quote,ragged-right,verbatim] +\score { + \transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'petrucci + \override Staff.TimeSignature #'style = #'mensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa + \override NoteHead #'ligature-flexa = ##t + \once \override NoteHead #'flexa-width = #3.2 + c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] + } + \layout { + \context { + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + } +} +@end lilypond + +Si no se sustituye el grabador @code{Ligature_bracket_engraver} +por el @code{Mensural_ligature_engraver}, la misma música se +transcribe de la siguiente manera: + +@lilypond[quote,ragged-right] +\transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'petrucci + \override Staff.TimeSignature #'style = #'mensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa + \override NoteHead #'ligature-flexa = ##t + \once \override NoteHead #'flexa-width = #3.2 + c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] +} +@end lilypond + +@seealso +Glosario musical: +@rglos{ligature}. + +Referencia de la notación: +@ref{Ligaduras de neumas cuadrados gregorianos}, +@ref{Ligaduras}. + +@knownissues +El espaciado horizontal de las ligaduras es pobre. + +Las alteraciones accidentales pueden colisionar con las notas previas. + +@node Tipografiado del canto gregoriano +@subsection Tipografiado del canto gregoriano +@translationof Typesetting Gregorian chant + +@menu +* Contextos del canto gregoriano:: +* Claves de canto gregoriano:: +* Alteraciones y armaduras de canto gregoriano:: +* Divisiones:: +* Articulaciones del canto gregoriano:: +* Puntos de aumentación (morae):: +* Ligaduras de neumas cuadrados gregorianos:: +@end menu + +Al componer tipográficamente una pieza en notación de canto +gregoriano, el grabador @code{Vaticana_ligature_engraver} selecciona +automáticamente la cabeza adecuada de las figuras, de manera que no es +necesario establecer explícitamente el estilo de las cabezas. A pesar +de ello se puede establecer el estilo de las cabezas, p.ej.: a +@code{vaticana_punctum} para producir neumas de punctum. De forma +similar, el grabador @code{Mensural_ligature_engraver} construye +ligaduras mensurales automáticamente. Consulte @ref{Ligaduras} para +ver cómo funcionan los grabadores de ligaduras. + +@seealso +Glosario musical: +@rglos{ligature}. + +Referencia de la notación: +@ref{Ligaduras mensurales blancas}, +@ref{Ligaduras}. + + +@node Contextos del canto gregoriano +@unnumberedsubsubsec Contextos del canto gregoriano +@translationof Gregorian chant contexts + +@cindex VaticanaVoiceContext +@cindex VaticanaStaffContext + +El contexto predefinido de voz @code{VaticanaVoiceContext} y el de +pauta @code{VaticanaStaffContext} se pueden utilizar para grabar una +pieza de canto gregoriano en el estilo de la Editio Vaticana. Estos +contextos establecen a unos valores iniciales adecuados todas las +propiedades relevantes de los contextos y de los objetos gráficos, de +forma que pueda inmediatamente comenzar a escribir el canto en sí, +como lo demuestra el siguiente fragmento: + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + << + \new VaticanaVoice = "cantus" { + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] + f \divisioMinima + \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] + c' \divisioMinima \break + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima + } + \new Lyrics \lyricsto "cantus" { + San- ctus, San- ctus, San- ctus + } + >> +} +@end lilypond + + +@c @seealso +@c TODO: nothing here yet ... + + + +@node Claves de canto gregoriano +@unnumberedsubsubsec Claves de canto gregoriano +@translationof Gregorian clefs + +@cindex claves + +La tabla siguiente muestra todas las claves gregorianas contempladas a +través de la instrucción @code{\clef}. Algunas de las claves usan el +mismo glifo, pero se diferencian solamente en la línea en que se +imprimen. En estos casos, para enumerar estas claves se usa un número +a continuación del nombre de la clave, contando desde la línea +inferior. Aún se puede forzar manualmente la composición tipográfica +de un glifo de clave sobre una línea arbitraria, como se describe en +@ref{Clave}. La nota que se imprime a la derecha junto a cada una de +las claves en la columna de los ejemplos, denota el Do central +(@code{c'}) respecto a dicha clave. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Descripción} +@tab +@b{Claves posibles} +@tab +@b{Ejemplo} + +@item +Clave de Do, estilo Editio Vaticana +@tab +@code{vaticana-do1}, @code{vaticana-do2},@* +@code{vaticana-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-do2" + c +@end lilypond + +@item +Clave de Fa, estilo Editio Vaticana +@tab +@code{vaticana-fa1}, @code{vaticana-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-fa2" + c +@end lilypond + +@item +Clave de Do, estilo Editio Medicaea +@tab +@code{medicaea-do1}, @code{medicaea-do2},@* +@code{medicaea-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-do2" + c +@end lilypond + +@item +Clave de Fa, estilo Editio Medicaea +@tab +@code{medicaea-fa1}, @code{medicaea-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-fa2" + c +@end lilypond + +@item +Clave de Do, estilo hufnagel +@tab +@code{hufnagel-do1}, @code{hufnagel-do2},@* +@code{hufnagel-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do2" + c +@end lilypond + +@item +Clave de Fa, estilo hufnagel +@tab +@code{hufnagel-fa1}, @code{hufnagel-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-fa2" + c +@end lilypond + +@item +Clave combinada de Do y Fa, estilo hufnagel +@tab +@code{hufnagel-do-fa} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do-fa" + c +@end lilypond +@end multitable + + +@seealso +Glosario musical: +@rglos{clef}. + +Referencia de la notación: +@ref{Clave}. + + +@node Alteraciones y armaduras de canto gregoriano +@unnumberedsubsubsec Alteraciones y armaduras de canto gregoriano +@translationof Gregorian accidentals and key signatures + +@cindex accidentals +@cindex key signature + +Están disponibles las alteraciones de los tres estilos gregorianos: + +@lilypond[quote,ragged-right,staffsize=26] +\markup { + \column { + "vaticana" + \line { " " \musicglyph #"accidentals.vaticana-1" + " " \musicglyph #"accidentals.vaticana0" } + } + \column { + "medicaea" + \line { " " \musicglyph #"accidentals.medicaea-1" } + } + \column { + "hufnagel" + \line { " " \musicglyph #"accidentals.hufnagel-1" } + } +} +@end lilypond + +Como se ve en el ejemplo, cada estilo no contempla todas las +alteraciones. Al intentar acceder a una alteración que no está +contemplada, LilyPond cambia a un estilo diferente. + + +El estilo de las alteraciones y las armaduras de tonalidad se controla +a través de la propiedad @code{glyph-name-alist} de los grobs (objetos +gráficos) @rinternals{Accidental} y @rinternals{KeySignature}, +respectivamente; p.ej.: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + + +@seealso +Glosario musical: +@rglos{accidental}, +@rglos{key signature}. + +Referencia de la notación: +@ref{Alturas}, +@ref{Alteraciones accidentales}, +@ref{Alteraciones accidentales automáticas}, +@ref{Armadura de la tonalidad}. + +Referencia de funcionamiento interno: +@rinternals{KeySignature}. + + +@node Divisiones +@unnumberedsubsubsec Divisiones +@translationof Divisiones + +@cindex divisio +@cindex divisiones +@cindex finalis + +En la notación del canto gregoriano no existen silencios, sino +@ref{Divisiones}. + +Una @emph{divisio} (en plural: @emph{divisiones}, que en latín +significa @q{división}) es un símbolo del contexto del pentagrama que +se usa para estructurar la música gregoriana en frases y secciones. +El significado musical de @emph{divisio minima}, @emph{divisio maior} +y @emph{divisio maxima} se podrían caracterizar como una pausa corta, +media y larga (respectivamente), algo así como las marcas de +respiración de @ref{Marcas de respiración}. El signo de +@emph{finalis} no sólo marca el final de un canto, sino que se usa +también con frecuencia dentro de un único canto antifonal o +responsorial para marcar el final de cada una de las secciones. + +Para usar divisiones, incluya el archivo @file{gregorian.ly}. +Contiene definiciones que podrá aplicar con tan sólo escribir +@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima} y +@code{\finalis} en los lugares adecuados de la entrada. Algunas +ediciones usan @emph{virgula} o @emph{caesura} en vez de divisio +minima. Por ello, @file{gregorian.ly} define también las +instrucciones @code{\virgula} y @code{\caesura}. + +@lilypond[quote,ragged-right] +\include "gregorian.ly" +\score { + << + \context VaticanaVoice { + \override TextScript #'padding = #3 + g a g + s^\markup { "divisio minima" } + \divisioMinima + g a g + s^\markup { "divisio maior" } + \divisioMaior + g a g + s^\markup { "divisio maxima" } + \divisioMaxima + \break + g a g + s^\markup { "finalis" } + \finalis + g a g + s^\markup { "virgula" } + \virgula + g a g + s^\markup { "caesura" } + \caesura + g a g + } + >> +} +@end lilypond + + +@predefined +@funindex \virgula +@code{\virgula}, +@funindex \caesura +@code{\caesura}, +@funindex \divisioMinima +@code{\divisioMinima}, +@funindex \divisioMaior +@code{\divisioMaior}, +@funindex \divisioMaxima +@code{\divisioMaxima}, +@funindex \finalis +@code{\finalis}. +@endpredefined + +@seealso +Glosario musical: +@rglos{caesura}, +@rglos{divisio}. + +Referencia de la notación: +@ref{Marcas de respiración}. + +Archivos de inicio: +@file{gregorian.ly}. + + +@node Articulaciones del canto gregoriano +@unnumberedsubsubsec Articulaciones del canto gregoriano +@translationof Gregorian articulation signs + +@cindex articulaciones + +Además de los signos de articulación estándar que se hallan descritos +en la sección @ref{Articulaciones y ornamentos}, se proveen signos de +articulación diseñados específicamente para utilizarlos con la +notación en el estilo de la @emph{Editio Vaticana}. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \override TextScript #'font-family = #'typewriter + \override TextScript #'font-shape = #'upright + \override Script #'padding = #-0.1 + a\ictus_"ictus " \bar "" \break + a\circulus_"circulus " \bar "" \break + a\semicirculus_"semicirculus " \bar "" \break + a\accentus_"accentus " \bar "" \break + \[ a_"episema" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] + } +} +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Articulaciones y ornamentos}. + +Fragmentos de código: +@rlsr{Ancient notation}. + +Referencia de funcionamiento interno: +@rinternals{Episema}, +@rinternals{EpisemaEvent}, +@rinternals{Episema_engraver}, +@rinternals{Script}, +@rinternals{ScriptEvent}, +@rinternals{Script_engraver}. + + +@knownissues +Ciertas articulaciones se colocan demasiado cerca verticalmente de las +cabezas de nota correspondientes. + + +@node Puntos de aumentación (morae) +@unnumberedsubsubsec Puntos de aumentación (@emph{morae}) +@translationof Augmentum dots (morae) + +Los puntos de aumentación, llamados también @emph{morae}, se escriben +con la función musical @code{\augmentum}. Observe que +@code{\augmentum} está programado como una función musical unaria y no +como un prefijo de cabeza. Se aplica solamente a la expresión musical +que sigue inmediatamente. Esto es, @code{\augmentum \virga c} no +tendrá ningún efecto visible. En su lugar, escriba @code{\virga +\augmentum c} o @code{\augmentum @{\virga c@}}. Tenga en cuenta +también que puede escribir @code{\augmentum @{a g@}} como abreviatura +de @code{\augmentum a \augmentum g}. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \[ \augmentum a \flexa \augmentum g \] + \augmentum g + } +} +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Marcas de respiración}. + +Referencia de funcionamiento interno: +@rinternals{BreathingSign}. + +Fragmentos de código: +@rlsr{Ancient notation}. + + +@node Ligaduras de neumas cuadrados gregorianos +@unnumberedsubsubsec Ligaduras de neumas cuadrados gregorianos +@translationof Gregorian square neume ligatures + +@cindex Square neumes ligatures +@cindex Gregorian square neumes ligatures + +La notación de neumas cuadrados gregorianos está contemplada de forma +limitada (siguiendo el estilo de la Editio Vaticana). El núcleo +principal del conjunto de las ligaduras ya se pueden tipografiar, pero +aún faltan aspectos esenciales para una composición tipográfica seria, +como (entre otros) la alineación horizontal de varias ligaduras, la +alineación de la letra y un correcto manejo de las alteraciones +accidentales. + +Se habilita el soporte de los neumas gregorianos por medio de la +inclusión con @code{\include} del archivo @file{gregorian.ly} al +principio del archivo. Esto hace que estén disponibles una cierta +cantidad de instrucciones adicionales para producir los símbolos de +los neumas que se usan en la notación de canto llano. + +Las cabezas de las notas se pueden @emph{modificar} y/o @emph{unir}. + +@itemize +@item La forma de la cabeza +se puede modificar @emph{precediendo} el nombre de la nota con una +cualquiera de las instrucciones siguientes: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. + +@item Las ligaduras hablando en propiedad, +(es decir, notas unidas), se producen escribiendo una de las +instrucciones de unión @code{\pes} o @code{\flexa}, para el movimiento +ascendente y descendente, respectivamente, @emph{intercaladas} entre +las notas que se han de unir. +@end itemize + +Una nota sin modificaciones produce un @emph{punctum}. Todos los +demás neumas, incluso los neumas de una nota con forma distinta como +la @emph{virga}, se consideran en principio como ligaduras y por ello +se deben escribir dentro de @code{\[...\]}. + +@noindent +Neumas de una nota: + +@itemize +@item El @emph{punctum} es la forma básica de nota (en el estilo +@emph{Vaticana}: un cuadrado con una ligera curvatura a modo de +excelencia tipográfica). Además del @emph{punctum} normal, están el +@emph{punctum inclinatum}, oblicuo, producido con el prefijo +@code{\inclinatum}. El @emph{punctum} normal se puede modificar con +@code{\cavum}, que produce una nota vacía, y @code{\linea}, que traza +líneas verticales a ambos lados de la nota. + +@item La @emph{virga} tiene una plica descendente en el lado derecho. Se +produce mediante el modificador @code{\virga}. +@end itemize + +@noindent +Ligaduras + +A diferencia de casi todos los otros sistemas de notación de neumas, +el aspecto tipográfico de las ligaduras no viene dictado directamente +por las instrucciones de la entrada, sino que sigue unas convenciones +que dependen del significado musical. Por ejemplo, una ligadura de +tres notas con la forma musical bajo-alto-bajo, como +@code{\[ a \pes b \flexa g \]}, produce un Torculus que consiste en +tres cabezas de Punctum, mientras que la forma alto-bajo-alto, como +@code{\[ a \flexa g \pes b \]}, produce un Porrectus con una forma de +flexa curvada y una sola cabeza de Punctum. No existe ninguna +instrucción para tipografiar explícitamente la forma de flexa curvada; +la decisión de cuándo tipografiar una forma de flexa curvada está +basada en la entrada musical. La idea de este enfoque es separar los +aspectos musicales de la entrada, del estilo de notación de la salida. +De esta forma, la misma entrada se puede reutilizar para tipografiar +la misma música en un estilo diferente de notación de canto +gregoriano. + +@noindent +Neumas licuescentes + +Otra categoría fundamental de notas en el canto gregoriano es la de +los llamados neumas licuescentes. Se utilizan bajo ciertas +circunstancias al final de una sílaba que acaba en una letra +@q{licuescente}, es decir, consonantes sonoras que pueden tener una +altura tonal, (nasales, l, r, v, j, y sus diptongos equivalentes). +Así, los neumas licuescentes nunca se utilizan aisladamente (aunque se +pueden producir algunos de ellos), y siempre están al final de una +ligadura. + +Los neumas licuescentes se representan gráficamente de dos formas +distintas más o menos intercambiables: con una nota pequeña o +@q{girando} la nota principal hacia arriba o hacia abajo. La primera +forma se produce haciendo un @code{pes} o una @code{flexa} normales y +modificando la forma de la segunda nota: @code{\[ a \pes \deminutum b +\] }, mientras que la segunda se hace modificando la forma de un neuma +de una nota con @code{\auctum} y uno de los generadores de dirección +@code{\descendens} o @code{\ascendens}, p.ej. @code{ \[ \auctum +\descendens a \] }. + +@noindent +Símbolos especiales + +Hay una tercera categoría de símbolos que se hace a partir de un +pequeño número de símbolos que tienen un significado especial (que, +por cierto, casi siempre se conocen sólo vagamente): el +@emph{quilisma}, el @emph{oriscus} y el @emph{strophicus}. Todos +ellos se producen anteponiendo al nombre de la nota el modificador +correspondiente, @code{\quilisma}, @code{\oriscus} o @code{\stropha}. + +Dentro de los delimitadores de ligadura @code{\[} y @code{\]}, se +pueden acumular prácticamente cualquier cantidad de cabezas de nota +para formar una sola ligadura, y los prefijos de cabeza como +@code{\pes}, @code{\flexa}, @code{\virga}, @code{\inclinatum}, etc. se +pueden mezclar libremente. El uso del conjunto de reglas que subyace +a la construcción de ligaduras en la tabla anterior está +consecuentemente extrapolada. De esta manera se pueden crear un +número infinito de ligaduras distintas. + +Observe que el uso de esos símbolos en la propia música sigue ciertas +reglas que LilyPond no comprueba. P.ej., el @emph{quilisma} siempre +es la nota intermedia de una ligadura ascendente, y suele caer sobre +un intervalo de semitono, pero es perfectamente posible, si bien +incorrecto, hacer un quilisma de una nota. + +Además de los símbolos de nota, el archivo @file{gregorian.ly} define +también las instrucciones @code{\versus}, @code{\responsum}, +@code{\ij}, @code{\iij}, @code{\IJ} y @code{\IIJ}, que producen los +caracteres correspondientes, p.ej. para utilizarlos en la letra, como +marcas de sección, etc. Estas instrucciones utilizan caracteres de +Unicode especiales y sólo funcionan si se usa una fuente tipográfica +que los contemple. + +La tabla siguiente muestra un conjunto limitado, pero representativo, +de ligaduras gregorianas, junto a los fragmentos de código que las +producen. La tabla está basada en la tabla de neumas extendidos del +segundo volumen del Antiphonale Romanum (@emph{Liber Hymnarius}), +publicado en 1983 por los monjes de Solesmes. La primera columna da +el nombre de la ligadura, con la forma principal en tipo negrita y las +formas licuescentes en cursiva. La tercera forma muestra el fragmento +de código que produce dicha ligadura, utilizando Sol, La y Si como +alturas de ejemplo. + + +@b{Neumas de una nota} + +@multitable @columnfractions .4 .2 .4 + +@item +Formas @b{Básica} y @emph{Licuescente} +@tab +@b{Salida} +@tab +@b{Código de LilyPond@*} + +@item +@b{Punctum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \cavum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \cavum b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \linea b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \linea b \]} + +@item +@emph{Punctum Auctum Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Ascendens + \[ \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \ascendens b \]} + +@item +@emph{Punctum Auctum Descendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Descendens + \[ \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \descendens b \]} + +@item +@b{Punctum inclinatum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum + \[ \inclinatum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum b \]} + +@item +@emph{Punctum Inclinatum Auctum} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Auctum + \[ \inclinatum \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \auctum b \]} + +@item +@emph{Punctum Inclinatum Parvum} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Parvum + \[ \inclinatum \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \deminutum b \]} + +@item +@b{Virga} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Virga + \[ \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@end multitable + +@noindent +@b{Ligaduras de dos notas} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Clivis vel Flexa} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis vel Flexa + \[ b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa g \]} + + +@item +@emph{Clivis Aucta Descendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Descendens + \[ b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \descendens g \]} + +@item +@emph{Clivis Aucta Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Ascendens + \[ b \flexa \auctum \ascendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \ascendens g \]} + +@item +@emph{Cephalicus} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Cephalicus + \[ b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \deminutum g \]} + +@item +@b{Podatus o Pes} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Podatus vel Pes + \[ g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes b \]} + +@item +@emph{Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens + \[ g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \descendens b \]} + +@item +@emph{Pes Auctus Ascendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Ascendens + \[ g \pes \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \ascendens b \]} + +@item +@emph{Epiphonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Epiphonus + \[ g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \deminutum b \]} + +@item +@emph{Pes Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Initio Debilis + \[ \deminutum g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes b \]} + +@item +@emph{Pes Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens Initio Debilis + \[ \deminutum g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes \auctum \descendens b \]} + +@end multitable + +@noindent +@b{Ligaduras de varias notas} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Torculus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus + \[ a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens + \[ a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus + \[ a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \deminutum g \]} + +@item +@emph{Torculus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Initio Debilis + \[ \deminutum a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens Initio Debilis + \[ \deminutum a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus Initio Debilis + \[ \deminutum a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \deminutum g \]} + +@item +@b{Porrectus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus + \[ a \flexa g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes b \]} + +@item +@emph{Porrectus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Auctus Descendens + \[ a \flexa g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \auctum \descendens b \]} + +@item +@emph{Porrectus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Deminutus + \[ a \flexa g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \deminutum b \]} + +@item +@b{Climacus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus + \[ \virga b \inclinatum a \inclinatum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum g \]} + +@item +@emph{Climacus Auctus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Auctus + \[ \virga b \inclinatum a \inclinatum \auctum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} + +@item +@emph{Climacus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Deminutus + \[ \virga b \inclinatum a \inclinatum \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} + +@item +@b{Scandicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus + \[ g \pes a \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \virga b \]} + +@item +@emph{Scandicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Auctus Descendens + \[ g \pes a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \auctum \descendens b \]} + +@item +@emph{Scandicus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Deminutus + \[ g \pes a \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \deminutum b \]} + +@end multitable + +@noindent +@b{Símbolos especiales} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Quilisma} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma + \[ g \pes \quilisma a \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \quilisma a \pes b \]} + +@item +@emph{Quilisma Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma Pes Auctus Descendens + \[ g \quilisma a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \quilisma g \pes \auctum \descendens b \]} + +@item +@b{Oriscus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Oriscus + \[ \oriscus b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus b \]} + +@item +@emph{Pes Quassus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus + \[ \oriscus g \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \virga b \]} + +@item +@emph{Pes Quassus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus Auctus Descendens + \[ \oriscus g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \auctum \descendens b \]} + +@item +@b{Salicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus + \[ g \oriscus a \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \virga b \]} + +@item +@emph{Salicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus Auctus Descendens + \[ g \oriscus a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \auctum \descendens b \]} + +@item +@b{(Apo)stropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha + \[ \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \]} + +@item +@emph{Stropha Aucta} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha Aucta + \[ \stropha \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha \auctum b \]} + +@item +@b{Bistropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Bistropha + \[ \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \]} + +@item +@b{Tristropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Tristropha + \[ \stropha b \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha b \]} + +@item +@emph{Trigonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Trigonus + \[ \stropha b \stropha b \stropha a \] + } + \layout { \neumeDemoLayout } +} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha a \]} + +@end multitable + + +@predefined +Están contemplados los siguientes prefijos de cabeza: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. +@endpredefined + + +Se pueden acumular los prefijos de cabeza, aunque con ciertas +restricciones. Por ejemplo, se pueden aplicar @code{\descendens} o +@code{\ascendens} a una cabeza, pero no los dos a la misma cabeza. + +@funindex \pes +@funindex \flexa + +Se pueden ligar dos cabezas adyacentes con las instrucciones infijas +@code{\pes} y @code{\flexa} para una línea melódica ascendente y +descendente, respectivamente. + +@funindex \augmentum + +Utilice la función musical unaria @code{\augmentum} para añadir puntos +de augmentum. + +@seealso +Glosario musical: +@rglos{ligature}. + +Referencia de la notación: +@ref{Ligaduras de neumas cuadrados gregorianos}, +@ref{Ligaduras mensurales blancas}, +@ref{Ligaduras}. + + +@knownissues +Cuando aparece un punto de @code{\augmentum} al final de la última +pauta dentro de una ligadura, a veces se posiciona defectuosamente en +el sentido vertical. Para rodear el problema, escriba una nota +adicional de salto (p.ej. @code{s8}) como última nota de la pauta. + +@code{\augmentum} debería estar implementado como un prefijo de cabeza +en vez de una función musical unaria, de forma que @code{\augmentum} +se pudiera entremezclar con los prefijos de cabeza en un orden +arbitrario. + + +@node Trabajar con música antigua - escenarios y soluciones +@subsection Trabajar con música antigua - escenarios y soluciones +@translationof Working with ancient music---scenarios and solutions + +@menu +* Incipits:: +* Disposición tipo «Mensurstriche»:: +* Transcripción de canto gregoriano:: +* Antigua y moderna desde la misma fuente:: +* Marcado editorial:: +@end menu + +El trabajo con música antigua implica con frecuencia tareas +adicionales que difieren considerablemente de la notación moderna para +la que se diseñó LilyPond. En el resto de esta sección se perfilan +unos cuantos escenarios típicos, con sugerencias de soluciones. Entre +ellos están los siguientes: + +@itemize +@item cómo hacer incipits +(o sea, material a modo de prefacio que indica cómo era el original) a +las transcripciones modernas de música mensural; +@item cómo conseguir el diseño @emph{Mensurstriche} +que se usa con frecuencia para las transcripciones modernas de música +polifónica; +@item cómo transcribir canto gregoriano en notación moderna; +@item cómo generar notación antigua y moderna a partir de la misma fuente. +@end itemize + + +@node Incipits +@unnumberedsubsubsec Incipits +@translationof Incipits + +Continuará... + + +@c @seealso +@c ... and reference to other sections ... + + +@node Disposición tipo «Mensurstriche» +@unnumberedsubsubsec Disposición tipo «Mensurstriche» +@translationof Mensurstriche layout + +@emph{Mensurstriche} (@q{líneas de mensuración}) es el término +aceptado para las barras de compás que se trazan entre los pentagramas +de un sistema pero no dentro de los propios pentagramas. Es una forma +común de preservar el aspecto visual de las duraciones del original, +es decir, sin tener que dividir las notas sincopadas en las barras de +compás, y al mismo tiempo ofrecer la ayuda orientativa que +proporcionan las barras de compás. + + +@lilypondfile[verbatim,lilyquote,texidoc] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + + +@c @seealso +@c ... and reference to other sections ... + + +@node Transcripción de canto gregoriano +@unnumberedsubsubsec Transcripción de canto gregoriano +@translationof Transcribing Gregorian chant + +El canto gregoriano se puede transcribir a notación moderna con +ciertos trucos sencillos. + +@b{Plicas}. Todas las plicas se pueden eliminar de una vez retirando +el grabador @code{Stem_engraver} del contexto de voz: + + +@example +\layout @{ + ... + \context @{ + \Voice + \remove "Stem_engraver" + @} +@} +@end example + +Sin embargo, en ciertos estilos de transcripción, se usan plicas de +forma ocasional, por ejemplo para indicar la transición a partir de un +recitativo monotónico a un gesto melódico fijo. En estos casos +podemos usar bien @code{\override Stem #'transparent = ##t} o bien +@code{\override Stem #'length = #0}, y restaurar la plica cuando se +necesite con el correspondiente @code{\once \override Stem +#'transparent = ##f} (véase el ejemplo de abajo). + +@b{Compás}. Para el canto no medido, existen diversas alternativas. + +Se puede eliminar el grabador Time_signature_engraver del contexto de +Staff sin ningún efecto secundario negativo. La alternativa, que es +hacer transparente la indicación de compás, deja un espacio en blanco +en la partitura, pues la indicación invisible sigue ocupando un +espacio. + +En muchos casos da un buen resultado @code{\set Score.timing = ##f}. +Otra alternativa es utilizar @code{\CadenzaOn} y @code{\CadenzaOff}. + +Para quitar las barras de compás, el enfoque radical consiste en +retirar (mediante la instrucción @code{\remove}) el grabador +Bar_engraver del contexto de pentagrama Staff. Una vez más, en vez de +ello podemos usar @code{\override BarLine #'transparent = ##t} si se +necesita ocasionalmente una barra de compás. + +Un tipo de transcripción muy común es el canto de recitativo, en el +que la nota repetida se indica con una breve. Se puede tratar el +texto del tono de recitativo de dos maneras. Podemos ponerlo como una +sola sílaba alineada por la izquierda: + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + c\breve c4 b4 a c2 c4 \divisioMaior + c\breve c4 c f, f \finalis +} + +verba = \lyricmode { + \once \override LyricText #'self-alignment-X = #-1 + "Noctem quietam et" fi -- nem per -- fec -- tum + \once \override LyricText #'self-alignment-X = #-1 + "concedat nobis Dominus" om -- ni -- po -- tens. +} +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics = "one" \lyricsto melody \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Bar_engraver" + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +Esto funciona bien en la medida en que el texto no comprenda un salto +de línea. Si es el caso, una alternativa sería añadir notas ocultas a +la partitura, en combinación con cambios en la visibilidad de las +plicas: + + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + \set Score.timing = ##f + c\breve \override NoteHead #'transparent = ##t c c c c c + \revert NoteHead #'transparent + \override Stem #'transparent = ##f \stemUp c4 b4 a + \override Stem #'transparent = ##t c2 c4 \divisioMaior + c\breve \override NoteHead #'transparent = ##t c c c c c c c + \revert NoteHead #'transparent c4 c f, f \finalis +} + +verba = \lyricmode { + No -- ctem qui -- e -- tam et fi -- nem per -- fec -- tum + con -- ce -- dat no -- bis Do -- mi -- nus om -- ni -- po -- tens. +} + +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics \lyricsto "melody" \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'transparent = ##t + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +Otra situación común es la transcripción de cantos neumáticos o +melismáticos, es decir, cantos con un número variable de notas en cada +sílaba. En este caso, podemos establecer los grupos de sílabas +claramente separados, normalmente también las subdivisiones de un +melisma mayor. Una forma de conseguirlo es usar un @code{\time} fijo, +p.ej. 1/4, y dejar que cada sílaba o grupo de notas llene uno de esos +compases, con la ayuda de grupos de valoración especial o duraciones +más breves. Si las líneas divisorias y todas las demás indicaciones +rítmicas se hacen transparentes, y el espacio que rodea las líneas +divisorias se aumenta, ello proporciona una aceptable representación +del original, en notación moderna. + +Para evitar que las sílabas de distinta anchura (como @qq{-ri} y +@qq{-rum}) dispongan los grupos de notas de las sílabas de forma +irregular, se puede ajustar la propiedad @code{#'X-extent} del objeto +@code{LyricText} a un valor fijo. Otra forma más engorrosa sería +añadir las sílabas como elementos de @code{\markup}. Si se necesitan +más ajustes posteriormente, esto se puede hacer fácilmente con +@q{notas} @code{s}. + +@lilypond[verbatim,quote] +spiritus = \relative c' { + \time 1/4 + \override Lyrics.LyricText #'X-extent = #'(0 . 3) + d4 \times 2/3 { f8 a g } g a a4 g f8 e + d4 f8 g g8 d f g a g f4 g8 a a4 s + \times 2/3 { g8 f d } e f g a g4 +} + +spirLyr = \lyricmode { + Spi -- ri -- _ _ tus _ Do -- mi -- ni _ re -- ple -- _ vit _ + or -- _ bem _ ter -- ra -- _ rum, al -- _ _ le -- _ lu + -- _ ia. +} +\score { + \new Staff << + \new Voice = "chant" \spiritus + \new Lyrics = "one" \lyricsto "chant" \spirLyr + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'X-extent = #'(-1 . 1) + \override Stem #'transparent = ##t + \override Beam #'transparent = ##t + \override BarLine #'transparent = ##t + \override TupletNumber #'transparent = ##t + } + } +} +@end lilypond + +@c extract from 1.6.1.1 + +@c @seealso +@c ... and reference to other sections ... + + +@node Antigua y moderna desde la misma fuente +@unnumberedsubsubsec Antigua y moderna desde la misma fuente +@translationof Ancient and modern from one source + +@c TODO Add text +@c Here among others the snippets about reducing note length +Continuará... + +@c @seealso +@c ... and reference to other sections ... + + +@node Marcado editorial +@unnumberedsubsubsec Marcado editorial +@translationof Editorial markings + + +@c @node Baroque rhythmic notation +@c @unnumberedsubsubsec Baroque rhythmic notation + +@c TODO Add text +@c try Till Rettig +@c Add example of white note heads: +@c In the french baroque some composers used white note heads in slow pieces, +@c mainly in 3/2-time. A quarter looks there like a eighth with a white +@c note head. (Franz-Rudolf Kuhnen) + +@c TODO Add example of this: +@c I was referring to e.g. notated a8. a16, which should, if I +@c remember correctly, be interpreted more like a8.. a32 (in the french +@c style). The editor might want to show that rythmic figure above the +@c staff as an hint to performers. (Karl Hammer) + + +Continuará... + + +@c @seealso +@c ... and reference to other sections ... + diff --git a/Documentation/es/notation/changing-defaults.itely b/Documentation/es/notation/changing-defaults.itely new file mode 100644 index 0000000000..3151ad0934 --- /dev/null +++ b/Documentation/es/notation/changing-defaults.itely @@ -0,0 +1,3947 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore +Translation of GIT committish: 274c916b48393e0f866cbab68c18a505f6fc7ea3 + + 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 Cambiar los valores por omisión +@chapter Cambiar los valores por omisión +@translationof Changing defaults + +El objetivo del diseño de LilyPond es proporcionar la más alta calidad +de los resultados, de forma predeterminada. A pesar de ello, podría +tener que cambiar este resultado predeterminado. La disposición sobre +el papel se controla a través de un amplio número de @q{botones e +interruptores} llamados en su conjunto @q{propiedades}. En el Manual +de aprendizaje podemos encontrar una introducción en forma de tutorial +al acceso y modificación de estas propiedades, véase +@rlearning{Trucar la salida}. Éste debería leerse en primer lugar. +Este capítulo cubre un terreno similar, pero con un estilo más +adecuado para un manual de referencia. + +@cindex Referencia de funcionamiento interno + +La descripción definitiva de los controles que están disponibles para +su ajuste fino están en un documento aparte: la +@rinternalsnamed{Top,Referencia de funcionamiento interno}. +Dicho manual relaciona todas +las variables, funciones y opciones que se encuentran disponibles en +LilyPond. Está escrito como un documento HTML, que se puede encontrar +@c leave the @uref as one long line. +@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,en línea}, +pero que también va incluido en el paquete de la documentación de LilyPond. + +Internamente, LilyPond utiliza el lenguaje Scheme (un dialecto de +LISP) para aportar la infraestructura. La sobreescritura de las +decisiones de disposición da acceso efectivo a las interioridades del +programa, lo que requiere código de Scheme como entrada. Los +elementos de Scheme se inauguran dentro de un archivo @file{.ly} con +el símbolo de cuadradillo @code{#}.@footnote{@rextend{Tutorial de Scheme} +contiene un breve tutorial sobre la introducción de números, +listas, cadenas y símbolos en Scheme.} + +@menu +* Contextos de interpretación:: +* Explicación del Manual de referencia de funcionamiento interno:: +* Modificar las propiedades:: +* Conceptos y propiedades útiles:: +* Trucos avanzados:: +* Uso de las funciones musicales:: +@end menu + + +@node Contextos de interpretación +@section Contextos de interpretación +@translationof Interpretation contexts + +Esta sección explica qué son los contextos y cómo modificarlos. + +@menu +* Explicación de los contextos:: +* Crear contextos:: +* Mantener vivos los contextos:: +* Modificar los complementos (plug-ins) de contexto:: +* Cambiar los valores por omisión de los contextos:: +* Definir contextos nuevos:: +* Alinear los contextos:: +@end menu + + +@seealso +Manual de aprendizaje: +@rlearning{Contextos y grabadores}. + +Archivos de inicio: +@file{ly/engraver-init.ly}, +@file{ly/performer-init.ly}. + +Fragmentos de código: +@rlsr{Contexts and engravers}. + +Referencia de funcionamiento interno: +@rinternals{Contexts}, +@rinternals{Engravers and Performers}. + + +@node Explicación de los contextos +@subsection Explicación de los contextos +@translationof Contexts explained + +Los contextos se disponen de forma jerárquica: + +@menu +* Score. El contexto maestro:: +* Contextos del nivel superior. Contenedores de pentagramas:: +* Contextos de nivel intermedio. Pentagramas:: +* Contextos del nivel más bajo. Voces:: +@end menu + +@node Score. El contexto maestro +@unnumberedsubsubsec Score. El contexto maestro +@translationof Score - the master of all contexts + +Este es el contexto de notación del nivel más alto. Ningún otro +contexto puede contener a un contexto Score. De forma predeterminada, +el contexto Score maneja la administración de las indicaciones de +compás y se asegura de que ciertos elementos como claves, compases y +armaduras están siempre alineados entre los distintos pentagramas. + +Se crea implícitamente una instancia del contexto Score cuando se +procesa un bloque @code{\score @{@dots{}@}} o @code{\layout +@{@dots{}@}}. + +@node Contextos del nivel superior. Contenedores de pentagramas +@unnumberedsubsubsec Contextos del nivel superior: contenedores de pentagramas +@translationof Top-level contexts - staff containers + +@strong{@emph{StaffGroup}} + +Agrupa pentagramas y añade un corchete en la parte izquierda, formando +un grupo. Las líneas divisorias de los pentagramas contenidos se +conectan verticalmente. @code{StaffGroup} sólo consiste en una +colección de pentagramas, con un corchete delante y líneas divisorias +de arriba a abajo. + +@strong{@emph{ChoirStaff}} + +Idéntico a @code{StaffGroup} excepto que las barras de compás de los +pentagramas contenidos no se conectan verticalmente. + +@strong{@emph{GrandStaff}} + +Un grupo de pentagramas, con una llave en la parte izquierda que +abarca el grupo. Las barras de compás de los pentagramas contenidos +se conectan verticalmente. + +@strong{@emph{PianoStaff}} + +Igual que @code{GrandStaff}, pero contempla la posibilidad de poner el +nombre del instrumento a la izquierda del sistema. + +@node Contextos de nivel intermedio. Pentagramas +@unnumberedsubsubsec Contextos de nivel intermedio. Pentagramas +@translationof Intermediate-level contexts - staves + +@strong{@emph{Staff}} + +Maneja claves, barras de compás, tonalidades y alteraciones +accidentales. Puede contener contextos de @code{Voice}. + +@strong{@emph{RhythmicStaff}} + +Como @code{Staff}, pero para imprimir ritmos. Se ignoran las alturas +de las notas; las notas se imprimen sobre una línea. + +@strong{@emph{TabStaff}} + +Contexto para generar tablaturas. De forma predeterminada dispone la +expresión musical como una tablatura de guitarra, impresa sobre seis +líneas. + +@strong{@emph{DrumStaff}} + +Maneja el tipografiado para instrumentos de percusión. Puede contener +contextos @code{DrumVoice}. + +@strong{@emph{VaticanaStaff}} + +Igual que @code{Staff}, excepto que está pensado para tipografiar +piezas en estilo gregoriano. + +@strong{@emph{MensuralStaff}} + +Igual que @code{Staff}, excepto que está diseñado para tipografiar +piezas en estilo mensural. + + +@node Contextos del nivel más bajo. Voces +@unnumberedsubsubsec Contextos del nivel más bajo. Voces +@translationof Bottom-level contexts - voices + +Los contextos del mismo nivel que Voice dan un valor inicial a ciertas +propiedades e inician los grabadores correspondientes. Siendo +contextos del nivel más bajo, no pueden contener a otros contextos. + +@strong{@emph{Voice}} + +Corresponde a una voz sobre un pentagrama. este contexto maneja la +conversión de las indicaciones dinámicas, plicas, barras, subíndices y +superíndices, ligaduras de expresión y de unión, y silencios. Tenemos +que crear instancias explícitas de este contexto si necesitamos varias +voces en el mismo pentagrama. + +@strong{@emph{VaticanaVoice}} + +Lo mismo que @code{Voice}, excepto que está diseñado para tipografiar +piezas en estilo gregoriano. + +@strong{@emph{MensuralVoice}} + +Lo mismo que @code{Voice}, con modificaciones para el tipografiado de +piezas en estilo mensural. + +@strong{@emph{Lyrics}} + +Corresponde a una voz con letra. Maneja la impresión de una sola +línea de letra. + +@strong{@emph{DrumVoice}} + +El contexto de voz utilizado en una pauta de percusión. + +@strong{@emph{FiguredBass}} + +El contexto en que los objetos @code{BassFigure} se crean a partir de +la entrada escrita en el modo @code{\figuremode}. + +@strong{@emph{TabVoice}} + +El contexto de voz utilizado dentro de un contexto @code{TabStaff}. +Se suele dejar que se cree implícitamente. + +@strong{@emph{CueVoice}} + +El contexto de voz que se utiliza para dibujar notas de tamaño +reducido, con el principal objetivo de añadir notas guía de un +pentagrama a otro, véase @ref{Formateo de las notas guía}. +Normalmente se deja que se cree implícitamente. + +@strong{@emph{ChordNames}} + +Tipografía nombres de acordes. + + +@node Crear contextos +@subsection Crear contextos +@translationof Creating contexts + +@c TODO more complete descriptions rather than learning style + +Para partituras que sólo tienen una voz y un pentagrama, los contextos +se crean automáticamente. Para partituras más complejas, es necesario +crearlos a mano. Existen tres instrucciones que hacen esto. + +@itemize + +@item +La instrucción más fácil es @code{\new}, y es también la más rápida de +escribir. Se antepone a una expresión musical, por ejemplo + +@funindex \new +@cindex nuevos, contextos +@cindex Contexto, creación de + +@example +\new @var{tipo} @var{expresión_musical} +@end example + +@noindent +donde @var{tipo} es el nombre de un contexto (como @code{Staff} o +@code{Voice}). Esta instrucción crea un contexto nuevo, y empieza a +interpretar la @var{expresión_musical} con él. + +Una aplicación práctica de @code{\new} es una partitura con muchos +pentagramas. Cada parte que debe ir en su propio pentagrama, va +precedida de @code{\new Staff}. + +@lilypond[quote,verbatim,relative=2,ragged-right] +<< + \new Staff { c4 c } + \new Staff { d4 d } +>> +@end lilypond + +La instrucción @code{\new} puede también dar nombre al contexto, + +@example +\new @var{tipo} = @var{identificador} @var{música} +@end example +Sin embargo, este nombre especificado por el usuario sólo se utiliza +si no hay ya otro contexto anterior con el mismo nombre. + + +@funindex \context + +@item +Como @code{\new}, la instrucción @code{\context} también dirige una +expresión musical a un objeto de contexto, pero da al contexto un +nombre explícito. La sintaxis es + +@example +\context @var{tipo} = @var{identificador} @var{música} +@end example + +En esta forma, la instrucción buscará un contexto existente del +@var{tipo} especificado que tenga el nombre @var{identificador}. Si +ese contexto aún no existe, se crea un contexto nuevo con el nombre +especificado. Esto es útil si nos vamos a referir más tarde al +contexto. Por ejemplo, cuando se escribe la letra, la melodía está +dentro de un contexto con nombre + +@example +\context Voice = "@b{tenor}" @var{música} +@end example + +@noindent +de forma que los textos se puedan alinear correctamente con sus notas, + +@example +\new Lyrics \lyricsto "@b{tenor}" @var{letra} +@end example + +@noindent + +Otro uso posible de los contextos con nombre es la fusión de dos +expresiones musicales distintas en un solo contexto. En el siguiente +ejemplo, se introducen por separado las articulaciones y las notas: + +@example +musica = @{ c4 c4 @} +decoracion = @{ s4-. s4-> @} +@end example + +se combinan enviando los dos al mismo contexto @code{Voice}, + +@example +<< + \new Staff \context Voice = "A" \musica + \context Voice = "A" \decoracion +>> +@end example +@lilypond[quote,ragged-right] +music = { c4 c4 } +arts = { s4-. s4-> } +\relative c'' << + \new Staff \context Voice = "A" \music + \context Voice = "A" \arts +>> +@end lilypond + +Con este mecanismo, es posible definir un @qq{urtext} (una edición +original), con la posibilidad de poner articulaciones distintas sobre +las mismas notas. + +@cindex crear contextos + +@item +La tercera instrucción para crear contextos es +@example +\context @var{tipo} @var{música} +@end example + + +@noindent +Esto es similar a @code{\context} con @code{= @var{identificador}}, +pero se corresponde con cualquier contexto del tipo @var{tipo}, sin +importar qué nombre se le ha dado. + +Esta variante se usa con expresiones musicales que se pueden +interpretar en varios niveles. Por ejemplo, la instrucción +@code{\applyOutput} (véase +@rextend{Ejecutar una función sobre todos los objetos de la presentación}). +Sin una instrucción @code{\context} +explícita, normalmente se aplicaría a @code{Voice} + +@example +\applyOutput #'@var{contexto} #@var{función} % aplicar al contexto Voice +@end example + +Para que se interprete dentro de los niveles de @code{Score} o +@code{Staff}, utilice las siguientes formas: + +@example +\applyOutput #'Score #@var{función} +\applyOutput #'Staff #@var{función} +@end example + +@end itemize + +@node Mantener vivos los contextos +@subsection Mantener vivos los contextos +@translationof Keeping contexts alive + +@cindex contextos, mantener vivos +@cindex contextos, tiempo de vida + +Normalmente los contextos finalizan en el primer momento musical en +que no tienen nada que hacer. Así, los contextos de @code{Voice} +mueren tan pronto como ya no contienen ningún evento; los contextos de +@code{Staff} mueren tan pronto como todos los contextos de +@code{Voice} que contenían ya no contengan ningún evento; etc. Esto +puede ocasionar dificultades si se tiene que hacer referencia a +contextos anteriores que ya han muerto, por ejemplo, al cambiar de +pentagramas con instrucciones @code{\change}, asociar letra con una +voz mediante instrucciones @code{\lyricsto}, o cuando se añaden +eventos musicales adicionales a un contexto anterior. + +Existe una excepción a esta regla general: precisamente uno de los +contextos de @code{Voice} que están dentro de un contexto de +@code{Staff} o de una construcción @code{<<...>>} persiste siempre +hasta el final de, contexto de @code{Staff} circundante o la +construcción @code{<<...>>}, incluso aunque puede haber períodos en +que no tiene nada que hacer. El contexto que persiste de esta forma +será el primero que se encuentre en la primera construcción encerrada +entre llaves @code{@{...@}}, ignorando cualquiera que se encuentre +dentro de construcciones encerradas por ángulos dobles @code{<<...>>}. + +Cualquier contexto se puede mantener vivo si nos aseguramos de que +tiene algo que hacer en cualquier momento musical dado. Los +contextos de @code{Staff} se mantienen con vida si nos aseguramos de +que una de sus voces se mantiene viva. Una manera de hacerlo es +añadir silencios de separación a una voz en paralelo con la música +real. Éstos deben añadirse a todos y cada uno de los contextos de +@code{Voice} que se hayan de mantener vivos. Si se van a usar +esporádicamente varias voces, es más seguro mantenerlas todas vivas en +lugar de tratar de confiar en las excepciones que hemos mencionado +arriba. + +En el ejemplo siguiente, tanto la voz A como la voz B se mantienen +vivas de esta manera durante la duración de la pieza: + +@lilypond[quote,verbatim] +musicA = \relative c'' { d4 d d d } +musicB = \relative c'' { g4 g g g } +keepVoicesAlive = { + << + \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars + \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars + >> +} + +music = { + \context Voice = "A" { + \voiceOneStyle + \musicA + } + \context Voice = "B" { + \voiceTwoStyle + \musicB + } + \context Voice = "A" { \musicA } + \context Voice = "B" { \musicB } + \context Voice = "A" { \musicA } +} + +\score { + \new Staff << + \keepVoicesAlive + \music + >> +} +@end lilypond + +@cindex letra, alineación con melodía esporádica + +El ejemplo siguiente muestra cómo se puede escribir una línea melódica +esporádica con letra utilizando este enfoque. Por supuesto, en una +situación real la melodía y el acompañamiento consistirían en varias +secciones diferentes. + +@lilypond[quote,verbatim] +melody = \relative c'' { a4 a a a } +accompaniment = \relative c' { d4 d d d } +words = \lyricmode { These words fol -- low the mel -- o -- dy } +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + s1*4 % Keep Voice "melody" alive for 4 bars + } + { + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + \context Voice = "accompaniment" { \accompaniment } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + +Una forma alternativa, que podría resultar mejor en muchas +situaciones, es mantener con vida la línea melódica simplemente +incluyendo notas espaciadoras para alinearla correctamente con el +acompañamiento: + +@lilypond[quote,verbatim] +melody = \relative c'' { + s1 % skip a bar + a4 a a a + s1 % skip a bar + a4 a a a +} +accompaniment = \relative c' { + d4 d d d + d4 d d d + d4 d d d + d4 d d d +} +words = \lyricmode { These words fol -- low the mel -- o -- dy } + +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + \melody + } + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + + +@node Modificar los complementos (plug-ins) de contexto +@subsection Modificar los complementos (plug-ins) de contexto +@translationof Modifying context plug-ins + +@c TODO Should this be Modifying engravers or Modifying contexts? + +Los contextos de notación (como @code{Score} y @code{Staff}) no sólo +almacenan propiedades, también contienen «plug-ins» o complementos +llamados @q{grabadores} que crean elementos de notación. Por ejemplo, +el contexto @code{Voice} contiene un grabador +@code{Note_heads_engraver} que crea las cabezas de nota y el contexto +@code{Staff} contiene un grabador @code{Key_signature_engraver} que +crea la indicación de compás. + +Para ver una descripción completa de todos y cada uno de los +complementos, consulte +@ifhtml +@rinternals{Engravers and Performers}. +@end ifhtml +@ifnothtml +Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Grabadores. +@end ifnothtml +Cada contexto que se describe en +@ifhtml +@rinternals{Contexts} +@end ifhtml +@ifnothtml +Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Contexto. +@end ifnothtml +relaciona los grabadores que se usan para ese contexto. + + +Puede ser de utilidad jugar un poco con estos complementos. Se hace +iniciando un contexto nuevo con @code{\new} o @code{\context} y +modificándolo: + +@funindex \with + +@example +\new @var{contexto} \with @{ + \consists @dots{} + \consists @dots{} + \remove @dots{} + \remove @dots{} + @emph{etc.} +@} +@{ + @emph{..música..} +@} +@end example + +@noindent +donde los @dots{} deben ser el nombre de un grabador. Aquí tenemos un +ejemplo sencillo que suprime los grabadores +@code{Time_signature_engraver} y @code{Clef_engraver} de un contexto +@code{Staff}: + +@lilypond[quote,relative=1,verbatim] +<< + \new Staff { + f2 g + } + \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + } { + f2 g2 + } +>> +@end lilypond + +En el segundo pentagrama no hay indicación de compás ni clave. Éste +es un método bastante rudimentario de hacer que desaparezcan los +objetos porque afecta a todo el pentagrama. Este método también +afecta al espaciado, lo que puede ser deseable o no serlo. Se +muestran métodos más sofisticados para quitar objetos en +@rlearning{Visibilidad y color de los objetos}. + +El ejemplo siguiente muestra una aplicación práctica. Normalmente las +líneas divisorias y las indicaciones de compás están sincronizadas a +lo largo de toda la partitura. Lo hacen los grabadores +@code{Timing_translator} y @code{Default_bar_line_engraver}. Estos +complementos mantienen al día la administración de las indicaciones de +compás, posición dentro del compás, etc. Moviendo estos grabadores +desde el contexto de @code{Score} al de @code{Staff}, podemos +conseguir una partitura en la que cada pentagrama tiene su propio +compás independiente. + +@cindex polimétricas, partituras +@cindex compases distintos al mismo tiempo + +@lilypond[quote,verbatim] +\score { + << + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 3/4 + c4 c c c c c + } + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 2/4 + c4 c c c c c + } +>> +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + } +} +@end lilypond + +@knownissues + +Normalmente, el orden en que se especifican los grabadores no tiene +importancia, pero en algunos casos especiales sí la tiene, por ejemplo +donde un grabador escribe una propiedad y otro la lee, o donde un +grabador crea un groby otro debe procesarlo. El orden en que los +grabadores se especifican es el orden en que se llaman para realizar +su tarea de procesamiento. + +Las siguientes ordenaciones son importantes: el grabador de compases +@code{Bar_engraver} debe ir normalmente en primer lugar, y el grabador +de digitaciones @code{New_fingering_engraver} debe ir antes del +grabador @code{Script_column_engraver} de columnas de inscripciones. +Podría haber otros que tengan dependencias de ordenación. + +@node Cambiar los valores por omisión de los contextos +@subsection Cambiar los valores por omisión de los contextos +@translationof Changing context default settings + +Los ajustes de contexto que están preparados para usarse de forma +predeterminada en los contextos @code{Score}, @code{Staff} y +@code{Voice}, se pueden especificar dentro de un bloque +@code{\layout}, como se ilustra en el ejemplo siguiente. El bloque +@code{\layout} se debe colocar dentro del bloque @code{\score} en que +se quiere que haga efecto, pero fuera de la música. + +Observe que la propia instrucción @code{\set} y el contexto se deben +omitir cuando se especifican de esta manera los valores de contexto +predeterminados: + +@lilypond[quote,verbatim] +\score { + \relative c'' { + a4^"Really small, thicker stems, no time signature" a a a + a a a a + } + \layout { + \context { + \Staff + fontSize = #-4 + \override Stem #'thickness = #4.0 + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +En este ejemplo, la instrucción @code{\Staff} especifica que los +ajustes siguientes se apliquen a todos los pentagramas dentro del +bloque de partitura. + +Se pueden realizar de forma similar modificaciones al contexto +@code{Score} o a todos los contextos @code{Voice}. + +@knownissues + +No es posible recolectar cambios de contexto dentro de una variable y +aplicarlos a una definición de @code{\context} por referencia a dicha +variable. + +La instrucción @code{\RemoveEmptyStaves} sobreescribe nuestros ajustes +en curso para el contexto @code{\Staff}. Si queremos cambiar los +valores predeterminados para un pentagrama que utilice +@code{\RemoveEmptyStaves}, debemos hacerlo después de llamar a +@code{\RemoveEmptyStaves}, o sea + +@example +\layout @{ + \context @{ + \Staff \RemoveEmptyStaves + + \override Stem #'thickness = #4.0 + @} +@} +@end example + +@c TODO: add \with in here. + + + +@node Definir contextos nuevos +@subsection Definir contextos nuevos +@translationof Defining new contexts + +@cindex contextos, definición de nuevos +@cindex grabadores, incluir en contextos + +@funindex \alias +@funindex alias +@funindex \name +@funindex name +@funindex \type +@funindex type +@funindex \consists +@funindex consists +@funindex \accepts +@funindex accepts +@funindex \denies +@funindex denies + +Los contextos específicos, como @code{Staff} y @code{Voice}, están +construidos a base de bloques sencillos. Es posible crear nuevos +tipos de contextos con combinaciones distintas de añadidos grabadores. + +El siguiente ejemplo muestra cómo construir un tipo diferente de +contexto de @code{Voice} partiendo de cero. Será parecido a +@code{Voice}, pero imprime solamente cabezas centradas en forma de +barra inclinada. Se puede usar para indicar improvisación en piezas +de jazz, + +@c KEEP LY +@lilypond[quote,ragged-right] +\layout { \context { + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Rhythmic_column_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +} +\context { \Staff + \accepts "ImproVoice" +}} + +\relative c'' { + a4 d8 bes8 \new ImproVoice { c4^"ad lib" c + c4 c^"desvístete" c_"mientras tocas :)" c } + a1 +} +@end lilypond + + +Estos ajustes se definen dentro de un bloque @code{\context} que a su +vez está dentro de un bloque @code{\layout}, + +@example +\layout @{ + \context @{ + @dots{} + @} +@} +@end example + +En el siguiente análisis, la entrada de ejemplo que se muestra debe ir +en el lugar de los puntos suspensivos @dots{} del fragmento anterior. + +En primer lugar es necesario definir un nombre para el nuevo contexto: + +@example +\name ImproVoice +@end example + +Debido a que es parecido al contexto @code{Voice}, queremos órdenes +que funcionen sobre contextos de @code{Voice} (existentes) para que +siga funcionando. Esto se consigue dando al contexto nuevo un alias +@code{Voice}, + +@example +\alias Voice +@end example + +El contexto imprimirá notas y textos explicativos, por ello tenemos +que añadir los grabadores que aportan esta funcionalidad: + +@example +\consists Note_heads_engraver +\consists Text_engraver +@end example + +pero sólo necesitamos esto en la línea central: + +@example +\consists Pitch_squash_engraver +squashedPosition = #0 +@end example + +El grabador @rinternals{Pitch_squash_engraver} modifica las cabezas de +nota (creadas por el grabador @rinternals{Note_heads_engraver}) y +establece sus posiciones verticales al valor de +@code{squashedPosition}, en este caso@tie{}@code{0}, la línea central. + +Las notas parecen barras inclinadas y no tienen plica: + +@example +\override NoteHead #'style = #'slash +\override Stem #'transparent = ##t +@end example + +Todos estos añadidos tienen que cooperar, y esto se consigue con un +añadido especial, que se debe marcar con la palabra clave +@code{\type}. Este será siempre @code{Engraver_group}, + +@example +\type "Engraver_group" +@end example + +Al juntarlo todo, obtenemos + +@example +\context @{ + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +@} +@end example + +@funindex \accepts +Los contextos dan lugar a jerarquías. Queremos colgar el contexto +@code{ImproVoice} bajo el contexto @code{Staff}, como simples +@code{Voice}s normales. Por tanto, modificamos la definición de +@code{Staff} con la instrucción @code{\accepts} (acepta), + +@example +\context @{ + \Staff + \accepts ImproVoice +@} +@end example + +@funindex \denies +Lo opuesto a @code{\accepts} (acepta) es @code{\denies} (deniega), lo +que a veces se necesita cuando se están reutilizando definiciones de +contexto existentes. + +Ponemos ambos dentro de un bloque @code{\layout}, como + +@example +\layout @{ + \context @{ + \name ImproVoice + @dots{} + @} + \context @{ + \Staff + \accepts "ImproVoice" + @} +@} +@end example + +Así pues, la salida que aparece al comienzo de esta sub-sección se +puede escribir como + +@example +\relative c'' @{ + a4 d8 bes8 + \new ImproVoice @{ + c4^"ad lib" c + c4 c^"desvístete" + c c_"mientras tocas :)" + @} + a1 +@} +@end example + + +@node Alinear los contextos +@subsection Alinear los contextos +@translationof Aligning contexts + +Los contextos nuevos se pueden alinear por encima o por debajo de +otros contextos existentes. Esto podría ser de utilidad al preparar +un pentagrama vocal (@rlearning{Conjuntos vocales}) y en el ossia, + +@cindex ossia +@funindex alignAboveContext +@funindex alignBelowContext + +@lilypond[quote,ragged-right] +ossia = { f4 f f f } +\score{ + \relative c' \new Staff = "main" { + c4 c c c + << + \new Staff \with { alignAboveContext = #"main" } \ossia + { d8 f d f d f d f } + >> + } +} +@end lilypond + +@cindex nested contexts +@cindex contexts, nested + +@funindex \accepts +@funindex \denies + +Los contextos como @code{PianoStaff} pueden llevar dentro otros +contextos anidados. Los contextos que se pueden aceptar para su +anidamiento están definidos por la lista @qq{accepts} (acepta) de un +contexto. Los contextos que no están en esta lista se colocan debajo +del contexto exterior en la partitura impresa. Por ejemplo, el +contexto @code{PianoStaff} está definido para que acepte contextos +@code{Staff} y @code{FiguredBass} de forma predeterminada, pero no un +contexto @code{Lyrics}, por ejemplo. Así pues, en la siguiente +estructura la letra se sitúa debajo del sistema de piano en lugar de +colocarse entre los dos pentagramas: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +La lista @qq{accepts} de un contexto se puede modificar para que +incluya contextos anidados adicionales, y así si quisiéramos que la +letra apareciese entre los dos pentagramas podríamos usar: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff \with { \accepts Lyrics } +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +Lo contrario de @code{\accepts} (acepta) es @code{\denies} (deniega); +esto suprime un contexto de la lista @qq{accepts}. + + +@node Explicación del Manual de referencia de funcionamiento interno +@section Explicación del Manual de referencia de funcionamiento interno +@translationof Explaining the Internals Reference + + +@menu +* Navegar por la referencia del programa:: +* Interfaces de la presentación:: +* Determinar la propiedad del grob:: +* Convenciones de nombres:: +@end menu + + + +@node Navegar por la referencia del programa +@subsection Navegar por la referencia del programa +@translationof Navigating the program reference + +Supongamos que queremos mover la indicación de digitación del +fragmento siguiente: + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Si hace una visita a la documentación en busca de instrucciones de +digitación (en @ref{Indicaciones de digitación}), encontrará: + +@quotation +@strong{Véase también} + +Referencia de funcionamiento interno: @rinternals{Fingering}. + +@end quotation + +@ifnothtml +La referencia del programador se encuentra disponible en forma de +documento HTML. Se recomienda mucho que lo lea en la forma HTML, bien +en línea o bien descargando los archivos de la documentación HTML. +Esta sección sería mucho más difícil de entender si está utilizando el +manual en formato PDF. +@end ifnothtml + +Siga el enlace que lleva a @rinternals{Fingering}. Al principio de la +página, puede ver + +@quotation +Los objetos de digitación se crean por parte de: +@rinternals{Fingering_engraver} y @rinternals{New_fingering_engraver}. +@end quotation + +Siguiendo los enlaces relacionados dentro de la referencia del +programa, podemos seguir el flujo de información dentro del programa: + +@itemize + +@item @rinternals{Fingering}: +los objetos @rinternals{Fingering} se crean por parte de: +@rinternals{Fingering_engraver} + +@item @rinternals{Fingering_engraver}: +Tipos de música aceptados: @rinternals{fingering-event} + +@item @rinternals{fingering-event}: +El tipo de evento musical @code{fingering-event} está descrito en +Expresiones musicales con el nombre de @rinternals{FingeringEvent} +@end itemize + +Este camino se recorre en contra de la corriente de información del +programa: comienza por la salida y acaba en el evento de entrada. +También podríamos haber empezado por un evento de la entrada, y leído +siguiendo el flujo de información terminando en su caso en el objeto +(u objetos) de la salida. + +La referencia del programa también se puede examinar como un documento +normal. Contiene capítulos que tratan de +@ifhtml +@rinternals{Music definitions}, +@end ifhtml +@ifnothtml +@code{Music definitions} +@end ifnothtml +de la @rinternals{Translation}, y del @rinternals{Backend}. Cada uno +de los capítulos relaciona todas las definiciones utilizadas y todas +las propiedades que se pueden ajustar. + + +@node Interfaces de la presentación +@subsection Interfaces de la presentación +@translationof Layout interfaces + +@cindex interfaz de la presentación +@cindex presentación, interfaz de la +@cindex grob + +La página HTML que pudimos ver en la sección anterior describe el +objeto de presentación llamado @rinternals{Fingering}. Dicho objeto +es un símbolo dentro de la partitura. Tiene propiedades que guardan +números (como grosores y direcciones), pero también punteros a objetos +relacionados. Un objeto de presentación también se llama un +@emph{Grob}, que es una abreviatura de Graphical Object (objeto +gráfico). Para ver más detalles acerca de los objetos gráficos o +Grobs, consulte @rinternals{grob-interface}. + +La página dedicada a @code{Fingering} relaciona las definiciones del +objeto @code{Fingering}. Por ejemplo, la página dice + +@quotation +@code{padding} (dimensión, en espacios de pentagrama): + +@code{0.5} +@end quotation + +@noindent +lo que significa que el número se mantendrá a una distancia de al +menos 0.5 de la cabeza de la nota. + + +Cada objeto de presentación puede tener varias funciones como elemento +notacional o tipográfico. Por ejemplo, el objeto de digitación +Fingering tiene los siguientes aspectos + +@itemize +@item +Su tamaño es independiente del espaciado horizontal, al contrario de +las ligaduras o las barras de las figuras. + +@item +Es un elemento de texto. Casi seguro que es un texto muy corto. + +@item +este elemento de texto se tipografía con un tipo de letra, no como las +ligaduras o las barras de las figuras. + +@item +Horizontalmente, el centro del símbolo se debe alinear con el centro +de la cabeza de la nota. + +@item +Verticalmente, el símbolo se coloca cerca de la nota y del pentagrama. + +@item +La posición vertical también está coordinada con otros símbolos de +superíndice y de subíndice. +@end itemize + +Cada uno de estos aspectos se capta en lo que se llaman +@emph{interface}s, que se relacionan al final de la página dedicada a +@rinternals{Fingering} + +@quotation +Este objeto contempla los siguientes interfaces: +@rinternals{item-interface}, +@rinternals{self-alignment-interface}, +@rinternals{side-position-interface}, @rinternals{text-interface}, +@rinternals{text-script-interface}, @rinternals{font-interface}, +@rinternals{finger-interface} y @rinternals{grob-interface}. +@end quotation + +Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la +página del respectivo interfaz del objeto. Cada interfaz tiene un +cierto número de propiedades. Algunas de ellas no son para que el +usuario las pueda ajustar (@q{Propiedades internas}), pero otras sí se +pueden modificar. + +Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero +realmente esto no significa mucho. El archivo de inicialización +(véase @rlearning{Otras fuentes de información}) +@file{scm/define-grobs.scm} muestra el alma del @q{objeto}, + +@example +(Fingering + . ((padding . 0.5) + (avoid-slur . around) + (slur-padding . 0.2) + (staff-padding . 0.5) + (self-alignment-X . 0) + (self-alignment-Y . 0) + (script-priority . 100) + (stencil . ,ly:text-interface::print) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaText) + (font-size . -5) ; don't overlap when next to heads. + (meta . ((class . Item) + (interfaces . (finger-interface + font-interface + text-script-interface + text-interface + side-position-interface + self-alignment-interface + item-interface)))))) +@end example + +@noindent +Como podemos ver, el objeto @code{Fingering} no es más que un montón +de valores de variables, y la página web de la Referencia de +funcionamiento interno se genera directamente a partir de esta +definición. + + +@node Determinar la propiedad del grob +@subsection Determinar la propiedad del grob +@translationof Determining the grob property + +Recordemos que queríamos cambiar la posición del @b{2} en + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota, +tenemos que negociar con el interfaz asociado con esta colocación. +Esto se hace usando @code{side-position-interface}. La página que +describe este interface dice: + +@quotation +@code{side-position-interface} + +Colocar un objeto víctima (este mismo) junto a otros objetos (el +soporte). La propiedad @code{direction} significa dónde poner el +objeto víctima con relación al soporte (¿a la izquierda o a la +derecha, encima o debajo?) +@end quotation + +@cindex relleno +@cindex padding (relleno) +@noindent +Debajo de esta descripción, la variable @code{padding} (relleno) se +describe como + +@quotation +@table @code +@item padding +(dimensión, en espacios de pentagrama) + +Añadir esta cantidad de espacio adicional entre objetos que están unos +junto a otros. +@end table +@end quotation + +Aumentando el valor de @code{padding}, podemos alejar la cifra de +digitación de la cabeza de la nota. La siguiente orden inserta un +espacio en blanco de 3 espacios de pentagrama entre la nota y la +digitación: +@example +\once \override Voice.Fingering #'padding = #3 +@end example + +Al insertar esta instrucción antes de que se haya creado el objeto +Fingering, es decir, antes del @code{c2}, llegamos al siguiente +resultado: + +@lilypond[quote,relative=2,verbatim] +\once \override Voice.Fingering #'padding = #3 +c-2 +\stemUp +f +@end lilypond + +En este caso, el contexto de este truco es @code{Voice}. Este hecho +se puede deducir también a partir de la referencia del programa, ya +que la página dedicada al añadido @rinternals{Fingering_engraver} dice + +@quotation +El grabador Fingering_engraver es parte de los contextos: @dots{} +@rinternals{Voice} +@end quotation + + +@node Convenciones de nombres +@subsection Convenciones de nombres +@translationof Naming conventions + +Se hace necesario presentar una panorámica de las diversas +convenciones de nomenclatura: + +@itemize +@item funciones de Scheme: minúsculas-con-guiones (incluso nombres de una sola palabra) +@item funciones de Scheme: ly:más-estilo-de-scheme +@item eventos, clases y propiedades musicales: como-las-funciones-de-scheme +@item interfaces de Grobs: estilo-scheme +@item propiedades de backend: estilo-scheme (¡pero X e Y en mayúsculas!) +@item contextos (y ExpresionesMusicales y grobs): Mayúsculas o MayúsculasDeCamello +@item propiedades de contexto: minúsculasSeguidoDeMayúsculasDeCamello +@item grabadores: Mayúsculas_seguido_de_minúsculas_y_con_barras_bajas +@end itemize + +@ignore +Preguntas aún sin respuesta +@itemize +@item ¿Cuáles de aquéllas son convenciones y cuáles son reglas? +@item ¿Cuáles son reglas del lenguaje subyacente, y cuáles son específicas de LilyPond? +@end itemize +@end ignore + +@node Modificar las propiedades +@section Modificar las propiedades +@translationof Modifying properties + +@menu +* Panorámica de la modificación de las propiedades:: +* La instrucción set:: +* La instrucción override:: +* La instrucción tweak:: +* set frente a override:: +* Modificación de las listas-A:: +@end menu + + +@node Panorámica de la modificación de las propiedades +@subsection Panorámica de la modificación de las propiedades +@translationof Overview of modifying properties + +Cada contexto es responsable de la creación de ciertos tipos de +objetos gráficos. Los ajustes que se usan para imprimir estos objetos +también se almacenan por contexto. Mediante la modificación de estos +ajustes, se puede alterar la apariencia de los objetos. + +Existen dos tipos diferentes de propiedades almacenadas en los +contextos: las propiedades de contexto y las propiedades de grob. Las +prpopiedades de contexto son propiedades que se aplican al contexto +como un todo y controlan la forma en que el propio contexto se +imprime. Por contra, las propiedades de grob se aplican a los tipos +de grob específicos que se imprimirán dentro del contexto. + +Las instrucciones @code{\set} y @code{\unset} se usan para cambiar los +valores de las propiedades de contexto. Las instrucciones +@code{\override} y @code{\revert} se usan para cambiar los valores de +las propiedades de grob. + +@ignore +La sintaxis de esto es + +@example +\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +@end example + +Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem} +o @code{NoteHead}, y @var{propiedad} es una variable interna del +sistema de formateo (@q{propiedad del grob} o @q{propiedad de +disposición}). Este último es un símbolo, y por ello debe ir +precedido de un apóstrofo. La subsección @ref{Modificar las propiedades} +explica cómo se deben cumplimentar los conceptos @var{nombre}, +@var{propiedad} y @var{valor}. Aquí sólo nos ocuparemos de la +funcionalidad des esta instrucción. + +La instrucción + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +hace más gruesas las plicas (el valor predeterminado es 1.3, con el +grosor de una línea del pentagrama como unidad). Puesto que la +instrucción especifica como contexto a @code{Staff}, sólo se aplica al +pentagrama actual. Otros pentagramas mantienen su aspecto normal. +Aquí vemos la instrucción en pleno funcionamiento: + +@lilypond[quote,verbatim,relative=2] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond + +La instrucción @code{\override} modifica la definición de la plica +@code{Stem} dentro del pentagrama en curso @code{Staff}. Después de +que la instrucción se ha interpretado, todas las plicas se engrosan. + +De manera análoga a @code{\set}, el argumento @var{contexto} se puede +omitir, ocasionando que se utilice el contexto predeterminado +@code{Voice}. Al añadir @code{\once} se aplica el cambio durante un +solo paso de tiempo. + +@lilypond[quote,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond + +El @code{\override} se debe hacer antes de que el objeto se inicia. +Por tanto, al alterar objetos @emph{Spanner} «de extensión» como +ligaduras o barras, la instrucción @code{\override} se debe ejecutar +en el momento en que se crea el objeto. En este ejemplo: + +@lilypond[quote,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'beam-thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +la ligadura es más gruesa pero la barra no lo es. Esto es así porque +la instrucción para @code{Beam}, la barra, va después de que la barra +se ha iniciado, y por ello no tiene ningún efecto. + +De forma análoga a @code{\unset}, la instrucción @code{\revert} para +un contexto deshace una instrucción @code{\override}; como con +@code{\unset}, solamente afecta a los ajustes que se hicieron dentro +del mismo contexto. En otras palabras, el @code{\revert} del +siguiente ejemplo no hace nada. + +@example +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Algunas opciones «trucables» se llaman @q{subpropiedades} y residen +dentro de las propiedades normales. Para trucarlas, utilice +instrucciones de la forma + +@c leave this as a long long +@example +\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} +@end example + +@noindent +tales como + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + +@end ignore + +@seealso +Referencia de funcionamiento interno: +@rinternals{Backend}, +@rinternals{All layout objects}, +@rinternals{OverrideProperty}, +@rinternals{RevertProperty}, +@rinternals{PropertySet}. + + +@knownissues + +El «back-end» o motor de salida no es muy estricto en la comprobación +de tipos de las propiedades de objetos. Las referencias cíclicas en +valores Scheme de propiedades pueden producir cuelgues o salidas +abruptas, o las dos cosas. + + +@node La instrucción set +@subsection La instrucción @code{@bs{}set} +@translationof The set command + +@cindex propiedades +@funindex \set +@cindex cambiar propiedades + +Cada contexto puede tener distintas @emph{propiedades}, variables +contenidas dentro de ese contexto. Se pueden cambiar mientras dura el +paso de interpretación. Se consigue insertando la instrucción +@code{\set} dentro de la música: + +@example +\set @var{contexto}.@var{propiedad} = #@var{valor} +@end example + +@var{valor} es un objeto de Scheme, razón por la que va precedido del +carácter almohadilla, @code{#}. + +El nombre de las propiedades de contexto suele ir en minúsculas con +mayúscula en medio. Controlan sobre todo la traducción de la música a +la notación, p.ej. @code{localKeySignature} (para determinar si hay +que impriir alteraciones o no), o @code{measurePosition} (para +determinar cuándo hay que imprimir una línea divisoria). El valor de +las propiedades de contexto puede modifcarse con el tiempo durante la +interpretación de la música; un ejemplo obvio es +@code{measurePosition}. Las propiedades de contexto se modifican +mediante la instrucción @code{\set}. + +Por ejemplo, los silencios multicompás se combinan en un solo compás +si el valor de la propiedad de contexto @code{skipBars} se establece a +@code{#t} (verdadero): + +@lilypond[quote,verbatim,relative=2] +R1*2 +\set Score.skipBars = ##t +R1*2 +@end lilypond + +Si se omite el argumento @var{context}, entonces se utiliza el +contexto actual de nivel más bajo (normalmente @code{ChordNames}, +@code{Voice} o @code{Lyrics}). En este ejemplo: + +@lilypond[quote,verbatim,relative=2] +\set Score.autoBeaming = ##f +<< + { + e8 e e e + \set autoBeaming = ##t + e8 e e e + } \\ { + c8 c c c c8 c c c + } +>> +@end lilypond + +El cambio se aplica @q{al vuelo}, mientras dura la música, de forma +que el ajuste sólo afecta al segundo grupo de corcheas. + +Observe que el contexto del nivel más bajo no siempre contiene la +propiedad que querríamos modificar: por ejemplo, intentar ajustar el +valor de la propiedad @code{skipBars} del contexto predeterminado del +nivel más bajo, que en este caso es @code{Voice}, no tendrá ningún +efecto, porque skipBars es una propiedad del contexto @code{Score}. + +@lilypond[quote,verbatim,relative=2] +R1*2 +\set skipBars = ##t +R1*2 +@end lilypond + +Los contextos son jerárquicos, y si se ha especificado un contexto +mayor, por ejemplo @code{Staff}, entonces el cambio se aplicaría +también a todos los contextos @code{Voice} dentro del pentagrama +actual. + +@funindex \unset + +También existe una instrucción @code{\unset}: +@example +\unset @var{contexto}.@var{propiedad} +@end example + +@noindent +que elimina la definición de @var{propiedad}. Esta instrucción +elimina la definición solamente si está establecida dentro de +@var{contexto}. Properties that have been set in enclosing contexts will +not be altered by an unset in an enclosed context: + +@lilypond[quote,verbatim,relative=2] +\set Score.autoBeaming = ##t +<< + { + \unset autoBeaming + e8 e e e + \unset Score.autoBeaming + e8 e e e + } \\ { + c8 c c c c8 c c c + } +>> +@end lilypond + +Como @code{\set}, el argumento @var{contexto} no se tiene que +especificar para un contexto del nivel más bajo, por lo que los dos +enunciados + +@example +\set Voice.autoBeaming = ##t +\set autoBeaming = ##t +@end example + +@noindent +son equivalentes si el contexto inferior en curso es @code{Voice}. + + +@cindex \once +Los ajustes que se aplican solamente a un único paso de tiempo se +pueden escribir con @code{\once}, por ejemplo en + +@lilypond[quote,verbatim,relative=2] +c4 +\once \set fontSize = #4.7 +c4 +c4 +@end lilypond + +En el manual de Referencia de funcionamiento interno hay una +descripción completa de todas las propiedades de contexto disponibles, +consulte +@ifhtml +@rinternals{Tunable context properties}. +@end ifhtml +@ifnothtml +Traducción @expansion{} Propiedades de contexto modificables por el +usuario. +@end ifnothtml + +@seealso + +Referencia de funcionamiento interno: +@rinternals{Tunable context properties}. + + +@cindex grob, propiedades de +@cindex propiedades de grob +@funindex \override + +@node La instrucción override +@subsection La instrucción @code{\override} +@translationof The override command + +Existe un tipo especial de propiedad de contexto: la descripción de +los grobs. Las decscripciones de los grobs reciben un nombre en +@code{MayúsculasDeCamello} (empezando en mayúscula). Contienen los +@q{ajustes predeterminados} para un tipo particular de grob, en forma +de lista asociativa. Consulte @file{scm/define-grobs.scm} para +ver los ajustes de cada descripción de grob. Las descripciones de +grob se modifican con @code{\override}. + +@code{\override} es en realidad una forma abreviada; + +@example +\override @var{contexto}.@var{NombreDelGrob} #'@var{propiedad} = #@var{valor} +@end example + +@noindent +equivale más o menos a + +@c leave this long line -gp +@example +\set @var{contexto}.@var{NombreDelGrob} = + #(cons (cons '@var{propiedad} @var{valor}) + ) +@end example + +El valor de @code{contexto}.@code{NombreDelGrob} (la lista-A) se +utiliza para inicializar las propiedades de los grobs individuales. +Los grobs tienen propiedades, denominadas en el estilo de Scheme, con +@code{palabras-con-guiones}. Los valores de las propiedades de grob +cambian durante el proceso de formateo: éste se realiza básicamente +calculando las propiedades utilizando funciones de @q{callback} +(pasadas como parámetro). + +Por ejemplo, podemos aumentar el grosor de la plica de una figura +sobreescribiendo la propiedad @code{thickness} (grosor) del objeto +@code{Stem} (plica): + +@lilypond[quote,verbatim,relative=2] +c4 c +\override Voice.Stem #'thickness = #3.0 +c4 c +@end lilypond + +Si no se ha especificado ningún contexto en la instrucción +@code{\override}, se utiliza el contexto del nivel inferior: + +@lilypond[quote,verbatim,relative=2] +{ \override Staff.Stem #'thickness = #3.0 + << + { + e4 e + \override Stem #'thickness = #0.5 + e4 e + } \\ { + c4 c c c + } + >> +} +@end lilypond + +@funindex \revert +@cindex reversión de sobreescrituras +@cindex sobreescrituras, reversión de + +El efecto de una instrucción de sobreescritura @code{\override} se +puede deshacer con @code{\revert}: + +@lilypond[quote,verbatim,relative=2] +c4 +\override Voice.Stem #'thickness = #3.0 +c4 c +\revert Voice.Stem #'thickness +c4 +@end lilypond + +Los efectos de @code{\override} y @code{\revert} se aplican a todos +los grobs del contexto afectado partiendo del momento actual y hacia +adelante: + +@lilypond[quote,verbatim,relative=2] +{ + << + { + e4 + \override Staff.Stem #'thickness = #3.0 + e4 e e + } \\ { + c4 c c + \revert Staff.Stem #'thickness + c4 + } + >> +} +@end lilypond + +@funindex \once +@cindex sobreescritura para un solo momento + +Se puede usar @code{\once} con @code{\override} para afectar solamente +al instante de tiempo actual: + +@lilypond[quote,verbatim,relative=2] +{ + << + { + \override Stem #'thickness = #3.0 + e4 e e e + } \\ { + c4 + \once \override Stem #'thickness = #3.0 + c4 c c + } + >> +} +@end lilypond + + +@ignore +Las instrucciones que modifican la salida tienen por lo general un +aspecto como + +@example +\override Voice.Stem #'thickness = #3.0 +@end example + +@noindent +Para construir este truco debemos determinar los siguientes datos: + +@itemize +@item el contexto: aquí @code{Voice}. +@item el objeto de presentación: aquí @code{Stem}. +@item la propiedad de presentación: aquí @code{thickness}. +@item un valor adecuado: aquí @code{3.0}. +@end itemize + +Ciertas opciones ajustables se denominan @q{subpropiedades} y residen +en el interior de las propiedades normales. Para modificarlas utilice +instrucciones de la forma + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + +@cindex documentación interna +@cindex buscar objetos gráficos +@cindex gráficos, descripción de los objetos +@cindex trucos +@funindex \override +@cindex interna, documentación + +Para muchas propiedades, independientemente del tipo de datos de la +propiedad, si se establece el valor de la propiedad a falso +(@code{##f}) se producirá su desactivación, ocasionando que LilyPond +ignore por completo dicha propiedad. Esto es especialmente útil para +«apagar» propiedades de grobs (objetos gráficos) que de otra manera +causarían problemas. + +Mostraremos a continuación cómo localizar esta información en el +manual de notación y en la referencia de funcionamiento interno. +@end ignore + +@seealso + +Referencia de funcionamiento interno: +@rinternals{Backend} + +@node La instrucción tweak +@subsection La instrucción @code{\tweak} +@translationof The tweak command + +@funindex \tweak +@cindex trucar + +El cambio de las propiedades de grob mediante @code{\override} produce +la aplicación del cambio a todos los grobs dados en el contexto en el +momento en que se aplica dicho cambio. Sin embargo, en ocasiones +podemos desear que los cambios se apliquen a un solo grob en lugar de +a todos los grobs del contexto afectado. Esto se consigue con la +instrucción @code{\tweak}, que tiene la sintaxis siguiente: + +@example +\tweak #'@code{propiedad-del-grob} #@code{valor} +@end example + +La instrucción @code{\tweak} se aplica al objeto que viene +inmediatamente después de @code{valor} dentro del flujo musical. + +@ignore +En ocasiones es posible tomar un atajo para realizar el ajuste fino de +los objetos gráficos. Para objetos que resultan directamente de un +elemento de código de la entrada, puede usar la función @code{\tweak}, +por ejemplo + +@lilypond[relative=2,verbatim,quote] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +-\tweak #'padding #8 +-^ +@end lilypond + + + +Pero el uso principal de la instrucción @code{\tweak} es modificar +solamente uno de varios elementos de notación que dan comienzo en el +mismo momento musical, como las notas de un acorde, o corchetes de +tresillo que empiezan al mismo tiempo. + +La instrucción @code{\tweak} fija una propiedad en el objeto que viene +a continuación de forma directa, sin necesidad de especificar el +nombre del grob o el contexto. Para que esto funcione, es necesario +que la instrucción @code{\tweak} permanezca inmediatamente adyacente +al objeto al que se aplica, después de que el archivo de entrada se ha +convertido en un flujo musical. Con frecuencia no es el caso, pues +muchos elementos adicionales se insertan en la corriente musical de +forma implícita. Por ejemplo, cuando se procesa una nota que no forma +parte de un acorde, LilyPond inserta implícitamente un evento +@code{ChordEvent} antes de la nota, separando así el truco de la nota. +Sin embargo, si los símbolos de acorde se sitúan cerca del truco y la +nota, la instrucción @code{\tweak} viene después del @code{ChordEvent} +en el flujo musical, permaneciendo así adyacente a la nota, y con la +posibilidad de modificarla. + +Así, esto funciona: + +@lilypond[relative=2,verbatim,quote] +<\tweak #'color #red c>4 +@end lilypond + +@noindent +pero esto no funciona: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +@end lilypond + +@end ignore + +Para ver una introducción a la sintaxis y los usos de la instrucción tweak, +consulte @rlearning{Métodos de trucaje}. + +Si se colocan varios elementos similares en el mismo momento musical, +la instrucción @code{\override} no se puede usar para modificar uno +solo de ellos: aquí es donde se debe usar la instrucción +@code{\tweak}. Entre los elementos que pueden aparecer más de una vez +en el mismo momento musical están los siguientes: + +@c TODO expand to include any further uses of \tweak +@itemize +@item las cabezas de las notas de un acorde +@item signos de articulación sobre la misma nota +@item ligaduras de unión entre notas de un acorde +@item corchetes de grupos especials que comienzan en el mismo momento +@end itemize + +@c TODO add examples of these + +@cindex acorde, modificación de una nota + +En este ejemplo se modifican el color de una cabeza y el tipo de otra, +dentro del mismo acorde: + +@lilypond[relative=2,verbatim,quote] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +@end lilypond + +@code{\tweak} se puede usar para modificar ligaduras de expresión: + +@lilypond[verbatim,quote,relative=1] +c-\tweak #'thickness #5 ( d e f) +@end lilypond + + +Para que funcione la instrucción @code{\tweak}, debe permanecer +adyacente al objeto al que se ha de aplicar después de que el código +de entrada se ha convertido a un flujo musical. A veces, LilyPond +puede insertar elementos adicionales dentro del flujo de música +durante el proceso de análisis sintáctico. Por ejemplo, cuando una +nota que no es parte explícita de un acorde se coloca dentro de un +acorde por parte de LilyPond de manera que las notas que se pretenden +modificar con @code{\tweak} se deben poner dentro de una construcción +de acorde: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +<\tweak #'color #red c>4 +@end lilypond + +La instrucción @code{\tweak} no se puede usar para modificar ningún +elemento que no aparezca explícitamente en el código de entrada. +Concretamente, no se puede usar para modificar plicas, barras o +alteraciones directamente, porque éstos se generan posteriormente por +parte de las cabezas de las notas, más que por elementos musicales del +flujo de entrada. Tampoco se puede usar @code{\tweak} para modificar +las claves ni las indicaciones de compás, porque se separarán de +cualquier instrucción @code{\tweak} que aparezca en el flujo de +entrada debido a la inserción automática de los elementos adicionales +que se requieren para especificar el contexto. + +También se pueden escribir varias instrucciones @code{\tweak} antes de +un elemento notacional, y todas ellas le afectan: + +@lilypond[verbatim,quote,relative=1] +c +-\tweak #'style #'dashed-line +-\tweak #'dash-fraction #0.2 +-\tweak #'thickness #3 +-\tweak #'color #red + \glissando +f' +@end lilypond + +El flujo musical que se genera a partir de una sección de un archivo +de entrada (incluido cualquier elemento insertado automáticamente) +puede examinarse, véase @rextend{Presentación de las expresiones musicales}. +Esto puede ser de utilidad en la determinación de lo que +puede modificarse por medio de una instrucción @code{\tweak}. + + +@seealso +Manual de aprendizaje: +@rlearning{Métodos de trucaje}. + +Manual de extensión: +@rextend{Presentación de las expresiones musicales}. + + +@knownissues + +@cindex trucos en una variable +La instrucción @code{\tweak} no se puede usar dentro de una variable. + +@cindex trucos en la letra +Las instrucciones @code{\tweak} no se pueden usar dentro del modo +@code{\lyricmode}. + +@cindex trucar puntos de control +@cindex control, trucar puntos de + +La instrucción @code{\tweak} solamente se aplica a la primera de +varias ligaduras generadas dentro de un acorde. + +@node set frente a override +@subsection @code{\set} frente a @code{\override} +@translationof set versus override + +@c HACER: probablemente esta sección es innecesaria. + +@ignore +We have seen two methods of changing properties: @code{\set} and +@code{\override}. There are actually two different kinds of +properties. + +@code{fontSize} is a special property: it is equivalent to +entering @code{\override ... #'font-size} for all pertinent +objects. Since this is a common change, the special +property (modified with @code{\set}) was created. + +@end ignore + + +@node Modificación de las listas-A +@subsection Modificación de las listas-A +@translationof Modifying alists + +Ciertas propiedades configurables por parte del usuario se representan +internamente como @emph{listas-A} (listas asociativas), que almacenan +duplas de @emph{claves} y @emph{valores}. La estructura de una +lista-A es la siguiente: + +@example +'((@var{clave1} . @var{valor1}) + (@var{clave2} . @var{valor2}) + (@var{clave3} . @var{valor3}) + @dots{}) +@end example + +Si una lista-A es una propiedad de un grob o una variable de +@code{\paper}, sus claves se pueden modificar individualmente sin que +afecte a las otras claves. + +Por ejemplo, para reducir el espacio entre pentagramas adyacentes +dentro de un grupo, use la propiedad @code{staff-staff-spacing} +del grob @code{StaffGrouper}. La propiedad es una lista-A con cuatro +claves: @code{basic-distance} (distancia básica), +@code{minimum-distance} (distancia mínima), @code{padding} (relleno) +y @code{stretchability} (ampliabilidad). +Los ajustes estándar para esta propiedad +se relacionan en la sección +@qq{Backend} de la Referencia de Funcionamiento Interno +(véase @rinternals{StaffGrouper}): + +@example +'((basic-distance . 9) + (minimum-distance . 7) + (padding . 1) + (stretchability . 5)) +@end example + +Una forma de acercar los pentagramas entre sí es reducir el valor de +la clave @code{basic-distance} (@code{9}) para que se corresponda con el valor +de @code{minimum-distance} (@code{7}). Para modificar una única clave +de forma individual, utilice una @emph{declaración anidada}: + +@lilypond[quote,verbatim] +% default space between staves +\new PianoStaff << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> + +% reduced space between staves +\new PianoStaff \with { + % this is the nested declaration + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7 +} << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> +@end lilypond + +La utilización de una declaración anidada actualiza la clave +especificada (como @code{basic-distance} en el ejemplo anterior) +sin alterar ninguna +de las otras claves que ya se habían establecido para la misma +propiedad. + +Ahora, supongamos que deseamos que los pentagramas estén tan próximos +como sea posible sin que se superpongan. La manera más sencilla de +hacerlo es establecer las cuatro claves de la lista-A a cero. Sin +embargo, no es necesario escribir cuatro declaraciones anidadas, +una por cada clave. En lugar de eso, se puede redefinir +completamente la propiedad con una sola declaración, como una lista-A: + +@lilypond[quote,verbatim] +\new PianoStaff \with { + \override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 0) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> +@end lilypond + +Observe que cualquier clave que no haya sido relacionada +explícitamente en la definición de la lista-A, será reiniciada a sus +valores @emph{predeterminados si no se han fijado}. En el caso de +@code{staff-staff-spacing}, el valor de cualquier clave no fijada se +reiniciaría a cero (excepto @code{stretchability}, que toma el valor +de @code{basic-distance} si no se fija). Así, las dos declaraciones siguientes +son equivalentes: + +@example +\override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 7)) + +\override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 7) + (minimum-distance . 0) + (padding . 0) + (stretchability . 7)) +@end example + +Una consecuencia de esto (posiblemente no intencionada) es la +eliminación de cualquier valor estándar que +se establezca en un archivo de inicio y que se carga cada vez que se +compila un archivo de entrada. En el ejemplo anterior, los ajustes +estándar para @code{padding} y +@code{minimum-distance} (definidos en @file{scm/define-grobs.scm}) se +reinician a sus valores predeterminados si no se han fijado (cero para +las dos claves). La definición de una propiedad o variable como una +lista-A (de cualquier tamaño) siempre reinicia todos los valores de +clave no establecidos a sus valores predeterminados si no se han +fijado. Ano ser que este sea el resultado deseado, es más seguro +actualizar los valores de clave individualmente con una declaración +anidada. + +@warning{Las declaraciones anidadas no funcionan para las listas-A de +propiedades de contexto (como @code{beamExceptions}, +@code{keySignature}, @code{timeSignatureSettings}, etc.). Estas +propiedades sólo se pueden modificar redefiniéndolas completamente +como listas-A.} + + +@node Conceptos y propiedades útiles +@section Conceptos y propiedades útiles +@translationof Useful concepts and properties + + +@menu +* Modos de entrada:: +* Dirección y posición:: +* Orden de disposición de los contextos:: +* Distancias y medidas:: +* Propiedades del símbolo del pentagrama:: +* Objetos de extensión:: +* Visibilidad de los objetos:: +* Estilos de línea:: +* Rotación de objetos:: +@end menu + +@node Modos de entrada +@subsection Modos de entrada +@translationof Input modes + +La forma en que se interpreta la notación contenida dentro de un +archivo de entrada, está determinada por el modo de entrada en curso. + +@strong{Modo de acordes} + +Se activa con la instrucción @code{\chordmode} y produce que la +entrada se interprete con al sintaxis de la notación de acordes, véase +@ref{Notación de acordes}. Los acordes se imprimen como notas sobre un +pentagrama. + +El modo de acordes se activa también con la instrucción +@code{\chords}. Esto crea también un contexto @code{ChordNames} nuevo +y produce que el código que sigue se interprete con la sintaxis de la +notación de acordes y se imprima como nombres de acorde dentro del +contexto @code{ChordNames}, véase @ref{Impresión de los nombres de acorde}. + +@strong{Modo de percusión} + +Se activa con la instrucción @code{\drummode} y produce que el código +de entrada se interprete con la sintaxis de la notación de percusión, +véase @ref{Notación básica de percusión}. + +El modo de percusión también se activa con la instrucción +@code{\drums}. También crea un contexto @code{DrumStaff} nuevo y hace +que el código que sigue se interprete con la sintaxis de la notación +de percusión y se imprima como símbolos de percusión sobre un +pentagrama de percusión, véase @ref{Notación básica de percusión}. + +@strong{Modo de cifras} + +Se activa con la instrucción @code{\figuremode} y hace que el código +de entrada se interprete con la sintaxis del bajo cifrado, véase +@ref{Introducir el bajo cifrado}. + +El modo de cifrase también se activa con la instrucción +@code{\figures}. También crea un contexto de @code{FiguredBass} nuevo +y hace que el código que viene a continuación se interprete con la +sintaxis del bajo cifrado y se imprima como símbolos de bajo cifrado +dentro del contexto @code{FiguredBass}, véase @ref{Introducción al bajo cifrado}. + +@strong{Modos de traste y tablatura} + +No existen modos de entrada especiales para introducir símbolos de +trastes y de tablatura. + +Para crear diagramas de trastes, escriba las notas o acordes en el +modo de notas e imprímalos dentro de un contexto @code{TabStaff}, +véase @ref{Tablaturas predeterminadas}. + +Para crear diagramas de trastes encima de un pentagrama, escríbalos +como elementos de marcado encima de las notas utilizando la +instrucción @code{\fret-diagram}, véase @ref{Marcas de diagramas de trastes}. + +@strong{Modo de letra} + +Se activa con la instrucción @code{\lyricmode}, y hace que la entrada +se interprete como sílabas de la letra de la canción con duraciones +opcionales y modificadores de letra asociados, véase @ref{Música vocal}. + +El modo de letra también se habilita con la instrucción +@code{\addlyrics}. Esto también crea un contexto @code{Lyrics} nuevo +y una instrucción @code{\lyricsto} implícita que asocia la letra que +viene a continuación con la música precedente. + +@strong{Modo de marcado} + +Se activa con la instrucción @code{\markup}, y hace que la entrada se +interprete con la sintaxis del marcado, véase @ref{Text markup commands}. + +@c silly work-around for texinfo broken-ness +@c (@strong{Note...} causes a spurious cross-reference in Info) +@b{Modo de notas} + +Es el modo predeterminado o se puede activar con la instrucción +@code{\notemode}. La entrada se interpreta como alturas, duraciones, +marcado, etc. y se imprime como notación musical sobre un pentagrama. + +Normalmente no es necesario especificar el modo de notas de forma +explícita, pero puede ser útil hacerlo en ciertas situaciones, por +ejemplo si estamos en el modo de letra, en el modo de acordes o en +otro modo y queremos insertar algo que solamente se puede hacer con la +sintaxis del modo de notas. + +Por ejemplo, para insertar indicaciones dinámicas para las estrofas de +una pieza coral es necesario entrar en el modo de notas para poder +interpretar dichas indicaciones: + +@lilypond[verbatim,relative=2,quote] +{ c4 c4 c4 c4 } +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic f 1. } } + To be sung loudly +} +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic p 2. } } + To be sung quietly +} +@end lilypond + + + +@node Dirección y posición +@subsection Dirección y posición +@translationof Direction and placement + +Al tipografiar música, la dirección y colocación de muchos elementos +es cuestión de elección. Por ejemplo, las plicas de las notas se +pueden dirigir hacia arriba o hacia abajo; la letra, las indicaciones +dinámicas y otras marcas expresivas se pueden colocar encima o debajo +del pentagrama; el texto se pude alinear a la izquierda, a la derecha +o centrado; etc. La mayoría de estas elecciones pueden dejarse que +LilyPond las determine automáticamente, pero en ciertos casos puede +ser deseable forzar una dirección o colocación concreta. + +@strong{Acciones predeterminadas} + +De forma predeterminada algunas direcciones siempre son hacia arriba o +siempre hacia abajo (p. ej. los matices o el calderón), mientras que +otras cosas pueden alternar entre arriba y abajo en función de la +dirección de las plicas (como las ligaduras o los acentos). + +@c TODO Add table showing these + +@strong{Disposición de contexto} + +Los contextos se colocan dentro de un sistema de arriba a abajo en el +orden en que se encuentran. Sin embargo, observe que se crea un +contexto implícitamente si se encuentra una instrucción cuando no está +disponible un contexto apropiado para contenerla. + +@c TODO Add example ? + +Se pude cambiar el orden predeterminado en que los contextos se +presentan, véase @ref{Alinear los contextos} + +@strong{Indicadores de dirección de las articulaciones} + +Al añadir articulaciones a notas se puede omitir normalmente el +indicador de dirección, @code{^} (que significa @qq{arriba}), @code{_} +(que significa @qq{abajo}) o @code{-} (que significa @qq{usar la +dirección predeterminada}), en cuyo caso se supone el predeterminado +@code{-}. Pero se necesita un indicador de dirección @strong{siempre} +antes de: + +@itemize +@item las instrucciones @code{\tweak} +@item las instrucciones @code{\markup} +@item las instrucciones @code{\tag} +@item los marcados de cadena, p.ej. -"cadena" +@item las instrucciones de digitación, p.ej. @code{-1} +@item las abreviaturas de articulación, p.ej. @code{-.}, @code{->}, @code{--} +@end itemize + +Estas indicaciones afectan sólo a la nota siguiente. + +@lilypond[verbatim,quote,relative=2] +c2( c) +c2_( c) +c2( c) +c2^( c) +@end lilypond + +@strong{La propiedad de dirección} + +La posición o dirección de muchos objetos de presentación está +controlada por la propiedad @code{direction}. + +El valor de la propiedad @code{direction} se puede establecer al valor +@code{1}, con el significado de @qq{hacia arriba} o @qq{encima}, o a +@code{-1}, con el significado de @qq{hacia abajo} o @qq{debajo}. Se +pueden usar los símbolos @code{UP} y @code{DOWN} en sustitución de +@code{1} y @code{-1} respectivamente. La dirección predeterminada se +puede especificar estableciendo @code{direction} a @code{0} ó a +@code{CENTER}. De forma alternativa, en muchos casos existen +instrucciones predefinidas para especificar la dirección. Todas ellas +son de la forma: + +@noindent +@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} + +@noindent +donde @code{xxxNeutral} significa @qq{utilizar la dirección +predeterminada}. Véase @rlearning{Objetos interiores al pentagrama}. + +En alguna que otra ocasión, con el único ejemplo usual del arpegio, el +valor de la propiedad @code{direction} especifica si el objeto se debe +colocar a la izquierda o a la derecha del objeto padre. En este caso +@code{-1} ó @code{LEFT} significan @qq{a la izquierda} y @code{1} ó +@code{RIGHT} significan @qq{a la derecha}. @code{0} ó @code{CENTER} +significan @qq{utilizar la dirección predeterminada}, como antes. + +Estas indicaciones afectan a todas las notas hasta que son canceladas. + +@lilypond[verbatim,quote,relative=2] +c2( c) +\slurDown +c2( c) +c2( c) +\slurNeutral +c2( c) +@end lilypond + + +@node Orden de disposición de los contextos +@subsection Orden de disposición de los contextos +@translationof Context layout order + +@cindex contextos, orden de disposición + +Los contextos se disponen en un sistema normalmente desde arriba hacia +abajo en el orden en que se encuentran en el archivo de entrada. +Cuando los contextos se anidan unos dentro de otros, el contexto +exterior incluye a los contextos anidados tal y como se especifica en +el archivo de entrada, siempre y cuando los contextos interiores estén +incluidos en la lista @qq{accepts} del contexto externo. Los +contextos anidados que no está nincluidos en la lista @qq{accepts} del +contexto externo se recolocan debajo del contexto externo en lugar de +anidarse dentro de él. + +Observe que discretamente se crea un contexto de forma implícita si se +encuentra una instrucción donde no hay un contexto apropiado para +contenerlo. Esto puede dar lugar a pentagramas o partituras nuevos no +esperados. + +El orden predeterminado en que los contextos se disponen, así como la +lista @qq{accepts}, pueden cambiarse; véase @ref{Alinear los +contextos}. + +@seealso +Manual de utilización del programa: +@rprogram{Aparece un pentagrama de más}. + +@node Distancias y medidas +@subsection Distancias y medidas +@translationof Distances and measurements + +@cindex distancias absolutas +@cindex distancias escaladas + +@funindex \mm +@funindex \cm +@funindex \in +@funindex \pt + +Las distancias en LilyPond son de dos tipos: absolutas y escaladas. + +Las distancias absolutas se usan para especificar márgenes, sangrados +y otros detalles de diseño de página, y de forma predeterminada se +especifican en milímetros. Las distancias se pueden especificar en +otras unidades escribiendo después de la cifra indicativa de la +cantidad, @code{\mm}, @code{\cm}, @code{\in}@tie{}(pulgadas), o +@code{\pt}@tie{}(puntos, 1/72.27 pulgadas). Las distancias de diseño +de página se pueden especificar también en unidades escalables (véase +el párrafo siguiente) adjuntando @code{\staff-space} a la cantidad. +La disposición de página se describe en detalle en +@ref{Disposición de la página}. + +Las distancias escaladas siempre se especifican en unidades de un +espacio del pentagrama o, más raramente, medio espacio del pentagrama. +El espacio de pentagrama es la distancia entre dos líneas del +pentagrama adyacentes. El valor predeterminado se puede cambiar +globalmente fijando el tamaño global del pentagrama, o se puede +sobreescribir localmente cambiando la propiedad @code{staff-space} del +objeto @code{StaffSymbol}. Las distancias escaladas se escalan +automáticamente con cualquier cambio al tamaño global del pentagrama o +a la propiedad @code{staff-space} del objeto @code{StaffSymbol}, pero +las fuentes tipográficas se escalan solamente con los cambios +efectuados al tamaño global del pentagrama. Así, el tamaño global del +pentagrama posibilita la fácil variación del tamaño general de una +partitura impresa. Para ver los métodos de establecimiento del tamaño +global del pentagrama, véase @ref{Establecer el tamaño del pentagrama}. + +@funindex magstep + +Si se necesita dibujar sólo una sección de una partitura a una escala +distinta, por ejemplo una sección ossia o una nota al pie, no se puede +simplemente cambiar el tamaño global del pentagrama porque esto +afectaría a toda la partitura. En tales casos, el cambio de tamaño se +hace sobreescribiendo tanto la propiedad @code{staff-space} de +@code{StaffSymbol} como el tamaño de las fuentes tipográficas. Está a +nuestra disposición una función de Scheme, @code{magstep}, para +convertir de un cambio en el tamaño de la fuente al cambio equivalente +en @code{staff-space}. Para ver una explicación y un ejemplo de su +utilización, consulte @rlearning{Longitud y grosor de los objetos}. + + +@seealso +Manual de aprendizaje: +@rlearning{Longitud y grosor de los objetos}. + +Referencia de la notación: +@ref{Disposición de la página}, +@ref{Establecer el tamaño del pentagrama}. + + +@node Propiedades del símbolo del pentagrama +@subsection Propiedades del símbolo del pentagrama +@translationof Staff symbol properties + +@cindex ajuste del símbolo del pentagrama +@cindex dibujar el símbolo del pentagrama +@cindex pentagrama, establecer el símbolo del + +@c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol +@c Need to think of uses for these properties. Eg 'line-positions +@c is used in a snippet to thicken centre line. +@c If retained, add @ref to here in 1.6.2 -td + +Se puede definir al mismo tiempo la posición vertical de las líneas de +la pauta y el número de líneas de la misma. Como muestra el siguiente +ejemplo, las posiciones de las notas no están influidas por las +posiciones de las líneas de la pauta. + +@warning{La propiedad @code{'line-positions} sobreescribe a la +propiedad @code{'line-count}. El número de líneas de la pauta está +definido implícitamente por el número de elementos de la lista de +valores de @code{'line-positions}.} + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) +} +{ a4 e' f b | d1 } +@end lilypond + +Se puede modificar la anchura de la pauta. Las unidades son espacios +de pentagrama. El espaciado de los objetos dentro del pentagrama no +resulta afectado por este ajuste. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'width = #23 +} +{ a4 e' f b | d1 } +@end lilypond + + +@node Objetos de extensión +@subsection Objetos de extensión +@translationof Spanners + +Muchos objetos de notación musical abarcan varias notas o incluso +varios compases. Son ejemplos los crescendi, trinos, corchetes de +grupo especial y corchetes de primera y segunda vez. Estos objetos se +llaman @qq{spanners} u «objetos de extensión», y tienen propiedades +especiales para controlar su apariencia y comportamiento. Algunas de +estas propiedades son comunes a todos los objetos de extensión; otras +se limitan a un subconjunto de los extensores. + +Todos los objetos de extensión contemplan el interface +@code{spanner-interface}. Algunos, básicamente aquellos que trazan +una línea recta entre los dos objetos, contemplan también el interface +@code{line-spanner-interface}. + +@unnumberedsubsubsec Uso del @code{spanner-interface} + +Este interface proporciona dos propiedades que se aplican a varios +extensores. + +@strong{@i{La propiedad @code{minimum-length}}} + +La longitud mínima del objeto de extensión se especifica a través de +la propiedad @code{minimum-length}. Su aumento suele producir el +efecto necesario de aumentar el espaciado de las notas entre los dos +puntos extremos. Sin embargo, esta sobreescritura no tiene ningún +efecto sobre muchos extensores, pues su longitud está determinada por +otras consideraciones. Más abajo se muestran algunos ejemplos de +dónde es efectiva. + +@ignore +Works for: + Tie + MultiMeasureRest + Hairpin + Slur + PhrasingSlur + +Works as long as callback is made: + Glissando + Beam + +Works not at all for: + LyricSpace + LyricHyphen + LyricExtender + TextSpanner + System + +@end ignore + +@lilypond[verbatim,quote,relative=2] +a~a +a +% increase the length of the tie +-\tweak #'minimum-length #5 +~a +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a1 +\compressFullBarRests +R1*23 +% increase the length of the rest bar +\once \override MultiMeasureRest #'minimum-length = #20 +R1*23 +a1 +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a \< a a a \! +% increase the length of the hairpin +\override Hairpin #'minimum-length = #20 +a \< a a a \! +@end lilypond + +Esta sobreescritura se puede usar también para aumentar la longitud de +las ligaduras de expresión y de fraseo: + +@lilypond[verbatim,quote,relative=2] +a( a) +a +-\tweak #'minimum-length #5 +( a) + +a\( a\) +a +-\tweak #'minimum-length #5 +\( a\) +@end lilypond + +Para algunos objetos de presentación, la propiedad +@code{minimum-length} es efectiva sólo si se llama explícitamente al +procedimiento @code{set-spacing-rods}. Para hacerlo, se debe fijar la +propiedad @code{springs-and-rods} al valor +@code{ly:spanner::set-spacing-rods}. Por ejemplo, la longitud mínima +de un glissando no tiene efecto a no ser que se establezca la +propiedad @code{springs-and-rods}: + +@lilypond[verbatim,quote,relative=1] +% default +e \glissando c' + +% not effective alone +\once \override Glissando #'minimum-length = #20 +e, \glissando c' + +% effective only when both overrides are present +\once \override Glissando #'minimum-length = #20 +\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods +e, \glissando c' +@end lilypond + +Lo mismo se puede decir del objeto @code{Beam}: + +@lilypond[verbatim,quote,relative=1] +% not effective alone +\once \override Beam #'minimum-length = #20 +e8 e e e + +% effective only when both overrides are present +\once \override Beam #'minimum-length = #20 +\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods +e8 e e e +@end lilypond + +@strong{@i{The @code{to-barline} property}} + +La segunda propiedad útil del @code{spanner-interface} es +@code{to-barline}. De forma predeterminada tiene el valor cierto, +haciendo que los reguladores y otros objetos de extensión que terminan +sobre la primera nota de un compás, en vez de eso terminen en la línea +divisoria inmediatamente precedente. Si se establece al valor falso, +el extensor llegará más allá de la barra de compás y terminará +exactamente sobre la nota: + +@lilypond[verbatim,quote,relative=2] +a \< a a a a \! a a a \break +\override Hairpin #'to-barline = ##f +a \< a a a a \! a a a +@end lilypond + +Esta propiedad no es efectiva para todos los extensores. Por ejemplo, +su establecimiento a @code{#t} no tienen ningún efecto sobre las +ligaduras de expresión o de fraseo, o sobre otros extensores para los +que terminar en la barra de compás no tendría ningún significado. + +@unnumberedsubsubsec Uso del @code{line-spanner-interface} + +Entre los objetos que contemplan el interface +@code{line-spanner-interface} se encuentran + +@itemize +@item @code{DynamicTextSpanner} +@item @code{Glissando} +@item @code{TextSpanner} +@item @code{TrillSpanner} +@item @code{VoiceFollower} +@end itemize + +La rutina responsable de dibujar los sellos de estos extensores es +@code{ly:line-interface::print}. esta rutina determina la +localización exacta de los dos puntos extremos y traza una línea entre +ellos, en el estilo solicitado. Las posiciones de los dos puntos +extremos del extensor se calculan al vuelo, pero es posible +sobreescribir sus coordenadas Y. Las propiedades que se deben +especificar están anidadas a dos niveles de profundidad en la +jerarquía de propiedades, pero la sintaxis de la instrucción +@code{\override} es bastante sencilla: + +@lilypond[relative=2,quote,verbatim] +e2 \glissando b +\once \override Glissando #'(bound-details left Y) = #3 +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando b +@end lilypond + +Las unidades para la propiedad @code{Y} son @code{staff-space}s, +siendo el punto del cero la línea central del pentagrama. Para el +glissando, esto es el valor de @code{Y} en la coordenada X que +corresponde al punto central de cada cabeza de nota si nos imaginamos +que la línea se extiende hasta allí. + +Si no está fijado @code{Y}, su valor se calcula a partir de la +posición vertical del punto de anclaje correspondiente del extensor. + +En caso de salto de línea, los valores para los puntos extremos se +especifican por las sub-listas @code{left-broken} y +@code{right-broken} de @code{bound-details}. Por ejemplo: + +@lilypond[relative=2,ragged-right,verbatim,quote] +\override Glissando #'breakable = ##t +\override Glissando #'(bound-details right-broken Y) = #-3 +c1 \glissando \break +f1 +@end lilypond + +Un número de propiedades adicionales de las sub-listas @code{left} y +@code{right} de la propiedad @code{bound-details} se pueden +especificar de la misma forma que @code{Y}: + +@table @code +@item Y +Establece la coordenada Y del punto extremo, en desplazamientos de +@code{staff-space}s desde la línea central del pentagrama. De forma +predeterminada es el centro del objeto ancla, y así un glissando +apunta al centro vertical de la cabeza de la nota. + +Para extensores horizontales como los extensores de texto y los +trinos, está inamoviblemente codificado como 0. + +@item attach-dir (dirección de anclaje) +Determina dónde comienza y termina la línea en la dirección X, con +relación al objeto ancla. Sí, un valor de @code{-1} (o @code{LEFT}, +izquierda) hace que la línea comience o termine en el lado izquierdo +de la cabeza de la nota a la que está anclado. + +@item X +Es la coordenada X absoluta del punto extremo. Se suele calcular al +vuelo, y su sobreescritura no tiene un efecto útil. + +@item stencil (sello) +Los extensores de línea pueden tener símbolos al comienzo o al final, +lo que está contenido en esta sub-propiedad. Esto es para uso +interno; se recomienda en su lugar el uso de @code{text}. + +@item text (texto) +Es un elemento de marcado que se evalúa para dar lugar al sello. Se +usa para escribir @i{cresc.}, @i{tr} y otros textos sobre los objetos +de extensión horizontales. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +c2\startTextSpan b c a\stopTextSpan +@end lilypond + +@item stencil-align-dir-y (alineación del sello en y) +@item stencil-offset (desplazamiento del sello) +Si no se modifican uno u otro, el sello se coloca sencillamente en el +punto extremo, centrado sobre la línea, como viene definido por las +subpropiedades @code{X} e @code{Y}. Si se fijan +@code{stencil-align-dir-y} o @code{stencil-offset} se moverá el +símbolo del borde verticalmente con relación al extremo de la línea: + +@lilypond[relative=1,quote,verbatim] +\override TextSpanner + #'(bound-details left stencil-align-dir-y) = #-2 +\override TextSpanner + #'(bound-details right stencil-align-dir-y) = #UP + +\override TextSpanner + #'(bound-details left text) = #"ggg" +\override TextSpanner + #'(bound-details right text) = #"hhh" +c4^\startTextSpan c c c \stopTextSpan +@end lilypond + +Observe que los valores negativos mueven el texto @emph{hacia arriba}, +al contrario de lo que podría esperarse, pues el valor de @code{-1} o +@code{DOWN} (abajo) significa alinear el borde @emph{inferior} del +texto con la línea de extensión. Un valor de @code{1} o @code{UP} +(arriba) alinea el borde superior del texto con la línea extensora. + +@item arrow (flecha) +Al establecer esta sub-propiedad a @code{#t} se produce una punta de +flecha en el extremo de la línea. + +@item padding (relleno) +Esta sub-propiedad controla el espacio entre el punto extremo +especificado de la línea y el extremo real. Sin relleno, un glissando +empezaría y terminaría en el centro de la cabeza de las notas. + +@end table + +La función musical @code{\endSpanners} finaliza de forma prematura el +extensor que comienza sobre la nota que sigue inmediatamente a +continuación. Se termina después de una nota exactamente, o en la +siguiente barra de compás si @code{to-barline} es verdadero y se +produce una divisoria antes de la siguiente nota. + +@lilypond[verbatim,quote,ragged-right,relative=2] +\endSpanners +c2 \startTextSpan c2 c2 +\endSpanners +c2 \< c2 c2 +@end lilypond + +Si se usa @code{\endSpanners} no es necesario cerrar \startTextSpan +con \stopTextSpan, ni cerrar los reguladores con @code{\!}. + + +@seealso +Referencia de funcionamiento interno: +@rinternals{TextSpanner}, +@rinternals{Glissando}, +@rinternals{VoiceFollower}, +@rinternals{TrillSpanner}, +@rinternals{line-spanner-interface}. + + +@node Visibilidad de los objetos +@subsection Visibilidad de los objetos +@translationof Visibility of objects + +@cindex objetos, visibilidad de +@cindex grobs, visibilidad de +@cindex visibilidad de los objetos + +Hay cuatro formas principales en que se puede controlar la visibilidad +de los objetos de presentación: se puede eliminar su sello, se pueden +volver transparentes, se pueden pintar de blanco, o se puede +sobreescribir su propiedad @code{break-visibility}. Las tres primeras +se aplican a todos los objetos de presentación; la última sólo a unos +pocos: los objetos @emph{divisibles}. El Manual de aprendizaje +introduce estas cuatro técnicas, véase @rlearning{Visibilidad y color de los objetos}. + +Hay también algunas otras técnicas que son específicas de ciertos +objetos de presentación. Se estudian bajo Consideraciones especiales. + +@menu +* Eliminar el sello:: +* Hacer transparentes los objetos:: +* Pintar los objetos de blanco:: +* Uso de break-visibility (visibilidad en el salto):: +* Consideraciones especiales:: +@end menu + + +@node Eliminar el sello +@unnumberedsubsubsec Eliminar el sello +@translationof Removing the stencil + +@cindex sello, eliminar + +Todo objeto de presentación tiene una propiedad stencil (sello). De +forma predeterminada está establecida a la función específica que +dibuja ese objeto. Si se sobreescribe esta propiedad a @code{#f} no +se llama a ninguna función y el objeto no se dibuja. La acción +predeterminada se puede recuperar con @code{\revert}. + +@lilypond[quote,verbatim,relative=1] +a1 a +\override Score.BarLine #'stencil = ##f +a a +\revert Score.BarLine #'stencil +a a a +@end lilypond + +@node Hacer transparentes los objetos +@unnumberedsubsubsec Hacer transparentes los objetos +@translationof Making objects transparent + +@cindex transparentes, hacer los objetos + +Todo objeto de presentación tiene una propiedad transparent +(transparente) que de forma predeterminada está establecida a +@code{#f}. Si se fija a @code{#t} el objeto aún ocupa espacio pero es +invisible. + +@lilypond[quote,verbatim,relative=2] +a4 a +\once \override NoteHead #'transparent = ##t +a a +@end lilypond + +@node Pintar los objetos de blanco +@unnumberedsubsubsec Pintar los objetos de blanco +@translationof Painting objects white + +@cindex objetos, coloreado de +@cindex coloreado de objetos +@cindex capas +@cindex impresión, orden de +@cindex sobreescritura de objetos +@cindex objetos, sobreescritura de +@cindex grobs, sobreescritura de + +Todo objeto de presentación tiene una propiedad de color que de forma +predeterminada está establecida a @code{black} (negro). Si se +sobreescribe a @code{white} (blanco) el objeto será indistinguible del +fondo blanco. Sin embargo, si el objeto cruza a otros objetos, el +color de los puntos de cruce queda determinado por el orden en que se +dibujan estos objetos, lo que puede dejar una imagen fantasma del +objeto blanco, como puede verse aquí: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +a1 +@end lilypond + +Se puede evitar esto cambiando el orden de impresión de los objetos. +Todos los objetos de presentación tienen una propiedad @code{layer} +(capa) que se debe establecer a un valor entero. Los objetos con el +valor de @code{layer} más bajo se dibujan primero, después se dibujan +los objetos con valores progresivamente mayores, y así los objetos con +valores más altos se dibujan encima de los que tienen valores más +bajos. De forma predeterminada, casi todos los objetos tienen +asignado un valor @code{layer} de @code{1}, aunque algunos objetos, +entre ellos el pentagrama y las líneas divisorias, @code{StaffSymbol} +y @code{BarLine}, tienen asignado un calor de @code{0}. El orden de +impresión de los objetos con el mismo valor de @code{layer} es +indeterminado. + +En el ejemplo de arriba, la clave blanca, con un valor @code{layer} +predeterminado de @code{1}, se dibuja después de las líneas del +pentagrama (valor @code{layer} predeterminado de @code{0}), +sobreimpresionándolas. Para cambiarlo, se debe dar al objeto +@code{Clef} un valor de @code{layer} más bajo, digamos @code{-1}, para +que se dibuje antes: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +\override Staff.Clef #'layer = #-1 +a1 +@end lilypond + +@node Uso de break-visibility (visibilidad en el salto) +@unnumberedsubsubsec Uso de break-visibility (visibilidad en el salto) +@translationof Using break-visibility + +@c TODO Add making other objects breakable + +@cindex break-visibility + +Casi todos los objetos de presentación se imprimen una sola vez, pero +algunos como las líneas divisorias, claves, indicaciones de compás y +armaduras de tonalidad, se pueden tener que imprimir dos veces cuando +se produce un salto de línea : una vez al final de la línea y otra al +comienzo de la siguiente. Estos objetos reciben el nombre de +@emph{divisibles}, y tienen una propiedad, @code{break-visibility} +(visibilidad en el salto), para controlar su visibilidad en las tres +posiciones en que pueden aparecer: al comienzo de una línea, dentro de +la línea si se produce un cambio, y al final de la línea si el cambio +se produce en ese lugar. + +Por ejemplo, la indicación de compás se imprime de forma +predeterminada al comienzo de la primera línea y en ningún otro lugar +a no ser que cambie, en cuyo caso se imprime en el punto en que se +produce el cambio. Si este cambio se produce al final de una línea, +la nueva indicación de compás se imprime al principio de la línea +siguiente y también al final de la línea anterior como indicación de +precaución. + +Este comportamiento se controla por medio de la propiedad +@code{break-visibility}, que se explica en +@c Leave this ref on a newline - formats incorrectly otherwise -td +@rlearning{Visibilidad y color de los objetos}. Esta propiedad toma un +vector de tres valores booleanos que, por orden, determinan si el +objeto se imprime al final, dentro, o al principio de la línea. O, +para ser más exactos: antes del salto de línea, si no hay salto, o +después del salto. + +Como alternativa se puede especificar cualquiera de las ocho +combinaciones mediante funciones predefinidas cuya definición está en +@file{scm/output-lib.scm}, donde las tres últimas columnas indican si +los objetos de presentación serán visibles en las posiciones que se +muestran en el encabezamiento de cada columna: + +@multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {yes} {yes} {yes} +@headitem Forma @tab Forma @tab Antes del @tab Si no hay @tab Después del +@headitem de función @tab de vector @tab salto @tab salto @tab salto + +@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab sí @tab sí @tab sí +@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab no @tab no @tab sí +@item @code{center-visible} @tab @code{'#(#f #t #f)} @tab no @tab sí @tab no +@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab sí @tab no @tab no +@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab sí @tab sí @tab no +@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab sí @tab no @tab sí +@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab no @tab sí @tab sí +@item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab no @tab no @tab no +@end multitable + +Los ajustes predeterminados de @code{break-visibility} dependen del +objeto de presentación. La tabla siguiente muestra todos los objetos +de presentación de interés que resultan afectados por +@code{break-visibility} y el ajuste predeterminado de esta propiedad: + +@multitable @columnfractions .3 .3 .4 + +@headitem Objeto @tab Contexto usual @tab Valor predet. + +@c omit Ambitus as it appears not to be affected by break-visibility -td +@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} +@item @code{BarLine} @tab @code{Score} @tab calculado +@item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible} +@c omit the following item until it can be explained -td +@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculado +@item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} +@item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@c omit KeyCancellation until it can be explained -td +@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} +@item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible} +@c omit LeftEdge until it can be explained -td +@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} +@item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible} +@item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible} + +@end multitable + +El ejemplo de abajo muestra el uso de la forma de vector para +controlar la visibilidad de las líneas divisorias: + +@lilypond[quote,verbatim,relative=1,ragged-right] +f4 g a b +f4 g a b +% Remove bar line at the end of the current line +\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) +\break +f4 g a b +f4 g a b +@end lilypond + +Aunque los tres componentes del vector utilizado para sobreescribir +@code{break-visibility} deben estar presentes, no todos son efectivos +para todos los objetos de presentación, y algunas combinaciones pueden +incluso dar errores. Son de aplicación las siguientes limitaciones: + +@itemize @bullet +@item Las líneas divisorias no se pueden imprimir al principio de la línea. +@item No se puede imprimir el número de compás al principio de la primera +línea a no ser que su valor establecido sea distinto de 1. +@item Clave: véase más abajo +@item Las repeticiones dobles de tipo porcentaje se imprimen completamente o +se suprimen por completo. Utilice begin-of line-invisible para +imprimirlas y all-invisible para suprimirlas. +@item Armadura: véase más abajo +@item OctavateEight: véase más abajo +@end itemize + +@node Consideraciones especiales +@unnumberedsubsubsec Consideraciones especiales +@translationof Special considerations + +@strong{@emph{Visibilidad después de un cambio explícito}} + +@cindex armadura, visibilidad después de un cambio explícito +@cindex explicitKeySignatureVisibility +@cindex clave, visibilidad después de un cambio explícito +@cindex explicitClefVisibility + +La propiedad @code{break-visibility} controla la visibilidad de las +armaduras y cambios de clave sólo al principio de las líneas, es +decir, después de un salto. No tiene ningún efecto sobre la +visibilidad de la armadura o la clave después de un cambio explícito +de tonalidad o de clave dentro o al final de una línea. En el ejemplo +siguiente la armadura que sigue al cambio explícito de tonalidad a Si +bemol mayor es visible incluso con @code{all-invisible} establecido. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +% Try to remove all key signatures +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b +\break +f4 g a b +f4 g a b +@end lilypond + +La visibilidad de estos cambios explícitos de tonalidad y de clave se +controla por medio de las propiedades +@code{explicitKeySignatureVisibility} y @code{explicitClefVisibility}. +Son los equivalentes de la propiedad @code{break-visibility} y las dos +toman un vector de tres valores booleanos o las funciones predefinidas +relacionadas anteriormente, exactamente igual que +@code{break-visibility}. Las dos son propiedades del contexto Staff, +no de los propios objetos de presentación, y por tanto se establecen +utilizando la instrucción @code{\set}. Las dos están establecidas de +forma predeterminada al valor @code{all-visible}. Estas propiedades +controlan sólo la visibilidad de las armaduras y las claves que +resultan de los cambios explícitos y no afectan a las armaduras y +tonalidades que están al principio de las líneas; para quitarlas, aún +se debe sobreescribir la propiedad @code{break-visibility} en el +objeto correspondiente. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +@strong{@emph{Visibilidad de las alteraciones de precaución}} + +Para eliminar las alteraciones de precaución que se imprimen en un +cambio de tonalidad explícito, establezca la propiedad +@code{printKeyCancellation} del contexto Staff a @code{#f}: + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.printKeyCancellation = ##f +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +Con estas sobreescrituras solamente permanecen las alteraciones +accidentales delante de las notas para indicar el cambio de tonalidad. + +@c TODO Add visibility of cautionary accidentals before notes + +@strong{@emph{Automatic bars}} + +@cindex automaticBars +@cindex líneas divisorias, eliminación + +Como caso especial, la impresión de las líneas divisorias también se +puede inhabilitar estableciendo la propiedad @code{automaticBars} en +el contexto Score. Si se fija a @code{#f}, las barras de compás no se +imprimen automáticamente; se deben crear explícitamente con una +instrucción @code{\bar}. A diferencia de la instrucción predefinida +@code{\cadenzaOn}, los compases se siguen contando. La generación de +compases continúa de acuerdo a esta cuenta si esta propiedad se +establece posteriormente a @code{#t}. Si se fija al valor @code{#f}, +sólo pueden producirse saltos de línea en instrucciones @code{\bar} +explícitas. + +@c TODO Add example + +@strong{@emph{Octavated clefs}} + +@cindex octavadas, visibilidad de las claves +@cindex visibilidad de las claves octavadas +@cindex claves, visibilidad de la octavación + +El pequeño símbolo de octava sobre las claves en octava alta o baja se +produce por parte del objeto @code{OctavateEight}. Su visibilidad se +hereda automáticamente de la del objeto @code{Clef}, así que no es +necesario aplicar las sobreescrituras correspondientes +@code{break-visibility} a los objetos +@code{OctavateEight} para suprimir los símbolos de octavación +para las claves invisibles. + +Para los cambios de clave explícitos, la propiedad +@code{explicitClefVisibility} controla tanto el símbolo de clave como +el símbolo de octava asociado. + + +@seealso +Manual de aprendizaje: +@rlearning{Visibilidad y color de los objetos} + + +@node Estilos de línea +@subsection Estilos de línea +@translationof Line styles + +Ciertas indicaciones de ejecución, p.ej., @i{rallentando}, +@i{accelerando} y los @i{trinos} se escriben como texto y se extienden +sobre muchos compases mediante líneas, a veces punteadas u onduladas. + +Todos ellos usan las mismas rutinas que el glissando para dibujar los +textos y las líneas, y por ello el ajuste fino de su comportamiento se +hace de la misma manera. Se hace con un spanner (un objeto de +extensión), y la rutina responsable de dibujar los objetos de +extensión es @code{ly:line-interface::print}. Esta rutina determina la +colocación exacta de los dos @i{extremos del objeto de extensión} y +dibuja una línea entre ellos, en el estilo solicitado. + +He aquí un ejemplo de los distintos estilos de línea disponibles, y +cómo aplicarles ajustes finos. + +@lilypond[relative=2,ragged-right,verbatim,quote] +d2 \glissando d'2 +\once \override Glissando #'style = #'dashed-line +d,2 \glissando d'2 +\override Glissando #'style = #'dotted-line +d,2 \glissando d'2 +\override Glissando #'style = #'zigzag +d,2 \glissando d'2 +\override Glissando #'style = #'trill +d,2 \glissando d'2 +@end lilypond + +Las posiciones de los puntos extremos del objeto de extensión se +computan al vuelo para cada uno de los objetos gráficos, pero es +posible sobreescribirlos: + +@c TODO Complete +@lilypond[relative=2,ragged-right,verbatim,quote] +e2 \glissando f +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando f +@end lilypond + +El valor de @code{Y} está establecido a @code{-2} para el extremo +derecho. El lado izquierdo se puede ajustar de forma similar +especificando @code{left} en vez de @code{right}. + +Si no está establecido @code{Y}, el valor se computa a partir de la +posición vertical de los puntos de anclaje izquierdo y derecho del +extensor. + +Son posibles otros ajustes de los extensores, para ver más detalles +consulte @ref{Objetos de extensión}. + + +@node Rotación de objetos +@subsection Rotación de objetos +@translationof Rotating objects + +Tanto los objetos de presentación como los elementos de texto de +marcado se pueden girar cualquier ángulo respecto a cualquier punto, +pero difiere el método de hacerlo. + +@menu +* Rotación de objetos de presentación:: +* Rotación de elementos de marcado:: +@end menu + +@node Rotación de objetos de presentación +@unnumberedsubsubsec Rotación de objetos de presentación +@translationof Rotating layout objects + +@cindex rotating objects +@cindex objects, rotating + +Todos los objetos de presentación que contemplan el interface +@code{grob-interface} se pueden rotar estableciendo su propiedad +@code{rotation}. Acepta una lista de tres elementos: el ángulo de la +rotación en sentido antihorario, y las coordenadas x e y del punto con +relación al punto de referencia del objeto, alrededor del que se va a +realizar la rotación. El ángulo de rotación se especifica en grados +y las coordenadas en espacios de pentagrama. + +El ángulo de rotación y las coordenadas del punto de rotación se deben +determinar por ensayo y error. + +@cindex reguladores en ángulo +@cindex ángulo, reguladores en + +Solamente en ciertas ocasiones es útil la rotación de objetos de +presentación; el ejemplo siguiente muestra una situación en que puede +serlo: + +@lilypond[quote,verbatim,relative=1] +g4\< e' d' f\! +\override Hairpin #'rotation = #'(20 -1 0) +g,,4\< e' d' f\! +@end lilypond + +@node Rotación de elementos de marcado +@unnumberedsubsubsec Rotación de elementos de marcado +@translationof Rotating markup + +Todos los textos de marcado se pueden rotar para que se dispongan en +cualquier ángulo precediéndolos de la instrucción @code{\rotate}. La +instrucción acepta dos argumentos: el ángulo de rotación en grados en +sentido antihorario, y el texto que rotar. Los límites que ocupa el +texto no se rotan: toman su valor a partir de los extremos de las +coordenadas x e y del texto rotado. En el ejemplo siguiente la +propiedad @code{outside-staff-priority} del texto se establece a +@code{#f} para desactivar la evitación automática de colisiones, lo +que empuja al texto a una posición muy alta. + +@lilypond[quote,verbatim,relative=1] +\override TextScript #'outside-staff-priority = ##f +g4^\markup { \rotate #30 "a G" } +b^\markup { \rotate #30 "a B" } +des^\markup { \rotate #30 "a D-Flat" } +fis^\markup { \rotate #30 "an F-Sharp" } +@end lilypond + +@node Trucos avanzados +@section Trucos avanzados +@translationof Advanced tweaks + +Esta sección trata sobre distintos enfoques en la realización de +ajustes finos a la apariencia de la partitura impresa. + +@menu +* Alineación de objetos:: +* Agrupación vertical de objetos gráficos:: +* Modificación de los sellos:: +* Modificación de las formas:: +@end menu + + +@seealso +Manual de aprendizaje: +@rlearning{Trucar la salida}, +@rlearning{Otras fuentes de información}. + +Referencia de la notación: +@ref{Explicación del Manual de referencia de funcionamiento interno}, +@ref{Modificar las propiedades}. + + +Archivos de inicio: +@file{scm/define-grobs.scm}. + +Fragmentos de código: +@rlsr{Tweaks and overrides}. + +Extender: +@rextend{Interfaces para programadores}. + +Referencia de funcionamiento interno: +@rinternals{All layout objects}. + + +@node Alineación de objetos +@subsection Alineación de objetos +@translationof Aligning objects + +Los objetos gráficos que soportan el interface +@code{self-alignment-interface} y/o el @code{side-position-interface} +se pueden alinear contra un objeto colocado previamente, de diversas +maneras. Para ver una lista de estos objetos, consulte +@rinternals{self-alignment-interface} y +@rinternals{side-position-interface}. + +Todos los objetos gráficos tienen un punto de referencia, una +extensión horizontal y una extensión vertical. La extensión +horizontal es una pareja de números que dan los desplazamientos a +partir del punto de referencia de los bordes izquierdo y derecho, +siendo negativos los desplazamientos hacia la izquierda. La extensión +vertical es una pareja de números que dan el desplazamiento a partir +del punto de referencia hasta los bordes inferior y superior, siendo +negativos los desplazamientos hacia abajo. + +La posición de un objeto sobre el pentagrama viene dada por los +valores de las propiedades @code{X-offset} e @code{Y-offset}. El +valor de @code{X-offset} da el desplazamiento desde la coordenada X +del punto de referencia del objeto padre, y el valor de +@code{Y-offset} da el desplazamiento a partir de la línea central del +pentagrama. Los valores de @code{X-offset} y @code{Y-offset} se +pueden establecer directamente o se puede dejar que se calculen por +parte de procedimientos para conseguir una alineación con el objeto +padre. + +@warning{Muchos objetos tienen consideraciones de posicionamiento +especiales que hacen que se ignore o se modifique cualquier ajuste +realizado a @code{X-offset} o a @code{Y-offset}, a pesar de que el +objeto contemple el interface @code{self-alignment-interface}. La +sobreescritura de las propiedades @code{X-offset} ó @code{Y-offset} a +un valor fijo hace que se descarte la respectiva propiedad +@code{self-alignment}.} + +Por ejemplo, una alteración accidental se puede reposicionar +verticalmente estableciendo @code{Y-offset} pero los cambios a +@code{X-offset} no tienen ningún efecto. + +Las letras de ensayo se pueden alinear con objetos divisibles como +líneas divisorias, claves, armaduras e indicaciones de compás. Hay +propiedades especiales que se encuentran en +@code{break-aligned-interface} para el posicionamiento de las letras +de ensayo sobre dichos objetos. + +@seealso +@ref{Uso del break-alignable-interface}, +@rextend{Funciones de callback}. + +@menu +* Establecer directamente X-offset e Y-offset:: +* Uso del side-position-interface:: +* Uso del self-alignment-interface:: +* Uso del break-alignable-interface:: +@end menu + +@node Establecer directamente X-offset e Y-offset +@unnumberedsubsubsec Establecer directamente @code{X-offset} y @code{Y-offset} +@translationof Setting X-offset and Y-offset directly + +Se pueden dar valores numéricos a las propiedades @code{X-offset} y +@code{Y-offset} de muchos objetos. El ejemplo siguiente muestra tres +notas con una digitación en su posición predeterminada y con los +valores @code{X-offset} y @code{Y-offset} modificados. + +@lilypond[verbatim,quote,relative=2] +a-3 +a +-\tweak #'X-offset #0 +-\tweak #'Y-offset #0 +-3 +a +-\tweak #'X-offset #-1 +-\tweak #'Y-offset #1 +-3 +@end lilypond + +@c TODO write more + +@node Uso del side-position-interface +@unnumberedsubsubsec Uso del @code{side-position-interface} +@translationof Using the side-position-interface + +Un objeto que contempla el @code{side-position-interface} se puede +colocar junto a su objeto padre de forma que los bordes especificados +de los dos objetos se toquen. El objeto se puede situar encima, +debajo, a la derecha o a la izquierda del objeto padre. El padre no +se puede especificar; viene determinado por el orden de los elementos +en el flujo de entrada. Casi todos los objetos tienen la cabeza de la +nota asociada como padre. + +Los valores de las propiedades @code{side-axis} y @code{direction} +determinan dónde colocar el objeto, como sigue: + +@c TODO add an example of each to the table + +@multitable @columnfractions .3 .3 .3 +@headitem @code{side-axis} @tab @code{direction} @tab +@headitem propiedad @tab propiedad @tab colocación + +@item @code{0} @tab @code{-1} @tab izquierda +@item @code{0} @tab @code{1} @tab derecha +@item @code{1} @tab @code{-1} @tab debajo +@item @code{1} @tab @code{1} @tab encima + +@end multitable + +Si @code{side-axis} es @code{0}, @code{X-offset} se debe establecer al +procedimiento @code{ly:side-position-interface::x-aligned-side}. Este +procedimiento devuelve el calor correcto de @code{X-offset} para +situar el objeto al lado izquierdo o derecho del padre de acuerdo con +el valor de @code{direction}. + +Si @code{side-axis} es @code{1}, @code{Y-offset} se debe establecer al +procedimiento @code{ly:side-position-interface::y-aligned-side}. Este +procedimiento devuelve el valor correcto de @code{Y-offset} para +situar el objeto encima o debajo del padre de acuerdo con el valor de +@code{direction}. + +@c TODO Add examples + +@node Uso del self-alignment-interface +@unnumberedsubsubsec Uso del @code{self-alignment-interface} +@translationof Using the self-alignment-interface + +@emph{Auto-alineación horizontal de los objetos} + +La alineación horizontal de un objeto que contempla el interface +@code{self-alignment-interface} está controlada por el valor de la +propiedad @code{self-alignment-X}, siempre y cuando la propiedad +@code{X-offset} de este objeto esté establecida a +@code{ly:self-alignment-interface::x-aligned-on-self}. Se le puede +dar a @code{self-alignment-X} cualquier valor real, en unidades de la +mitad de la extensión X total del objeto. Los valores negativos +mueven el objeto a la derecha, los positivos hacia la izquierda. Un +valor de @code{0} centra el objeto sobre el punto de referencia de su +padre, un valor de @code{-1} alinea el borde izquierdo del objeto +sobre el punto de referencia de su padre, y un valor de @code{1} +alinea el borde derecho del objeto sobre el punto de referencia de su +padre. Se pueden usar los símbolos @code{LEFT}, @code{CENTER} y +@code{RIGHT} en sustitución de los valores @code{-1, 0, 1}, +respectivamente. + +Normalmente se usaría la instrucción @code{\override} para modificar +el valor de @code{self-alignment-X}, pero se puede usar la instrucción +@code{\tweak} para alinear varias anotaciones por separado sobre una +sola nota: + +@lilypond[quote,verbatim,relative=1] +a' +-\tweak #'self-alignment-X #-1 +^"left-aligned" +-\tweak #'self-alignment-X #0 +^"center-aligned" +-\tweak #'self-alignment-X #RIGHT +^"right-aligned" +-\tweak #'self-alignment-X #-2.5 +^"aligned further to the right" +@end lilypond + +@emph{Auto-alineación vertical de los objetos} + +Los objetos se pueden alinear verticalmente en una forma análoga a la +alineación horizontal si la propiedad @code{Y-offset} está establecida +a @code{ly:self-alignment-interface::y-aligned-on-self}. Sin embargo, +a menudo se encuentran implicados otros mecanismos en la alineación +vertical: el valor de @code{Y-offset} es tan sólo una variable que se +tiene en cuenta. Esto puede hacer que ajustar el valor de ciertos +objetos sea una tarea dificultosa. Las unidades son sólo la mitad de +las dimensiones verticales del objeto, que suele ser bastante pequeño, +por lo que pueden requerirse números bastante grandes. Un valor de +@code{-1} alinea el borde inferior del objeto con el punto de +referencia del objeto padre, un valor de @code{0} alinea el centro del +objeto con el punto de referencia del padre, y un valor de @code{1} +alinea el borde superior del objeto con el punto de referencia del +padre. Se pueden usar los símbolos @code{DOWN}, @code{CENTER}, +@code{UP} en sustitución de @code{-1, 0, 1} respectivamente. + +@emph{Auto-alineación de objetos en las dos direcciones} + +Estableciendo tanto @code{X-offset} como @code{Y-offset}, se puede +alinear un objeto en las dos direcciones simultáneamente. + +El ejemplo siguiente muestra cómo ajustar una digitación de forma que +se acerque a la cabeza de la nota. + +@lilypond[quote,verbatim,relative=2] +a +-\tweak #'self-alignment-X #0.5 % move horizontally left +-\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self +-\tweak #'self-alignment-Y #-1 % move vertically up +-3 % third finger +@end lilypond + +@ignore +@unnumberedsubsubsec Uso de los procedimientos @code{aligned-on-parent} + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +The @code{aligned-on-parent} procedures are used in the same way +as the @code{aligned-on-self} procedures, they difference being +that they permit an object to be aligned with the @emph{edges} of +the parent rather than the parent's reference point. The following +example shows the difference: + +@c TODO Add example + +@lilypond[verbatim,quote] +@end lilypond + +@end ignore + +@ignore +@unnumberedsubsubsec Uso de los procedimientos @code{centered-on-parent} + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +@end ignore + +@c TODO The align-interface, BassFigureAlignment and VerticalAlignment + + +@node Uso del break-alignable-interface +@unnumberedsubsubsec Uso del @code{break-alignable-interface} +@translationof Using the break-alignable-interface + +@cindex alineación a objetos +@cindex break-align-symbols + +Las letras de ensayo se pueden alinear con objetos de notación +distintos a las barras de compás. Estos objetos son @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature} y +@code{time-signature}. + +De forma predeterminada, las letras de ensayo y los números de compás +se centran horizontalmente sobre el objeto: + +@lilypond[verbatim,quote,relative=1] +% The rehearsal mark will be centered above the Clef +\override Score.RehearsalMark #'break-align-symbols = #'(clef) +\key a \major +\clef treble +\mark "↓" +e1 +% The rehearsal mark will be centered above the Time Signature +\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) +\key a \major +\clef treble +\time 3/4 +\mark "↓" +e2. +% The rehearsal mark will be centered above the Breath Mark +\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign) +\key a \major +\clef treble +\time 4/4 +e1 +\breathe +\mark "↓" +@end lilypond + +Se puede especificar una lista de posibles objetos para la alineación. +Si algunos de los objetos son invisibles en ese punto debido al valor +de @code{break-visibility} o a valores de visibilidad explícitos para +las armaduras y las claves, la letra de ensayo o número de compás se +alinean con el primer objeto de la lista que sea visible. Si ningún +objeto de la lista es visible, el objeto se alinea con la línea +divisoria. Si la línea divisoria es invisible, el objeto se alinea +con el punto en el que se encontraría la línea divisoria. + +@lilypond[verbatim,quote,relative=1] +% The rehearsal mark will be centered above the Key Signature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef treble +\mark "↓" +e1 +% The rehearsal mark will be centered above the Clef +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef bass +\mark "↓" +gis,,1 +% The rehearsal mark will be centered above the Bar Line +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.explicitClefVisibility = #all-invisible +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef treble +\mark "↓" +e''1 +@end lilypond + +La alineación de la letra de ensayo con relación al objeto de notación +se puede cambiar, como se ve en el ejemplo siguiente. En una +partitura con varios pentagramas, este ajuste se debe hacer para todos +los pentagramas. + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be centered above the Key Signature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\key a \major +\clef treble +\time 4/4 +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the Key Signature +\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT +\mark "↓" +\key a \major +e1 +% The RehearsalMark will be aligned with the right edge of the Key Signature +\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT +\key a \major +\mark "↓" +e1 +@end lilypond + +La letra de ensayo también se puede desplazar al borde derecho o +izquierdo en una medida arbitraria. Las unidades son espacios de +pentagrama: + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be aligned with the left edge of the Key Signature +% and then shifted right by 3.5 staff-spaces +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\once \override Score.KeySignature #'break-align-anchor = #3.5 +\key a \major +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the Key Signature +% and then shifted left by 2 staff-spaces +\once \override Score.KeySignature #'break-align-anchor = #-2 +\key a \major +\mark "↓" +e1 +@end lilypond + + +@node Agrupación vertical de objetos gráficos +@subsection Agrupación vertical de objetos gráficos +@translationof Vertical grouping of grobs + +Los grobs (objetos gráficos) @code{VerticalAlignment} y +@code{VerticalAxisGroup} trabajan de manera coordinada. +@code{VerticalAxisGroup} agrupa distintos grobs como @code{Staff}, +@code{Lyrics}, etc. Después, @code{VerticalAlignment} alinea los +distintos grobs agrupados previamente por @code{VerticalAxisGroup}. +Normalmente sólo existe un @code{VerticalAlignment} por cada +partitura, pero cada @code{Staff}, @code{Lyrics}, etc. tiene su propio +@code{VerticalAxisGroup}. + + +@node Modificación de los sellos +@subsection Modificación de los sellos +@translationof Modifying stencils + +Todos los objetos de presentación tienen una propiedad @code{stencil} +que es parte del @code{grob-interface}. De forma predeterminada, esta +propiedad suele estar establecida a una función específica del objeto +que está hecha a medida para disponer el símbolo que lo representa en +la salida. Por ejemplo, el ajuste estándar para la propiedad +@code{stencil} del objeto @code{MultiMeasureRest} es +@code{ly:multi-measure-rest::print}. + +El símbolo estándar de cualquier objeto se puede sustituir modificando +la propiedad @code{stencil} para que haga referencia a un +procedimiento diferente escrito especialmente. Esto requiere un alto +nivel de conocimiento del funcionamiento interno de LilyPond, pero hay +una forma más fácil que a menudo puede dar resultados adecuados. + +El procedimiento es establecer la propiedad @code{stencil} al +procedimiento que imprime texto (@code{ly:text-interface::print}) y +añadir una propiedad @code{text} al objeto ajustada para que contenga +el texto de marcado que produce el símbolo requerido. Debido a la +flexibilidad del marcado, se pueden conseguir muchas cosas; en +particular, consulte @ref{Notación gráfica dentro de elementos de marcado}. + +El ejemplo siguiente muestra esto cambiando el símbolo de la cabeza de +la nota a unas aspas dentro de una circunferencia. + +@lilypond[verbatim,quote] +XinO = { + \once \override NoteHead #'stencil = #ly:text-interface::print + \once \override NoteHead #'text = \markup { + \combine + \halign #-0.7 \draw-circle #0.85 #0.2 ##f + \musicglyph #"noteheads.s2cross" + } +} +\relative c'' { + a a \XinO a a +} +@end lilypond + +Cualquiera de los glifos de la fuente tipográfica Feta se puede pasar +a la instrucción de marcado @code{\musicglyph}: véase @ref{La tipografía Feta}. + +@c TODO Add inserting eps files or ref to later + +@c TODO Add inserting Postscript or ref to later + + +@seealso +Referencia de la notación: +@ref{Notación gráfica dentro de elementos de marcado}, +@ref{Formatear el texto}, +@ref{Text markup commands}, +@ref{La tipografía Feta}. + + +@node Modificación de las formas +@subsection Modificación de las formas +@translationof Modifying shapes + +@menu +* Modificación de ligaduras de unión y de expresión:: +@end menu + +@node Modificación de ligaduras de unión y de expresión +@unnumberedsubsubsec Modificación de ligaduras de unión y de expresión +@translationof Modifying ties and slurs + +@cindex ligaduras de expresión, modificar +@cindex ligaduras de unión, modificar +@cindex Bézier, curvas de +@cindex Bézier, puntos de control + +Las ligaduras de unión, de expresión y de fraseo se trazan como curvas +de Bézier de tercer orden. Si la forma de la ligadura calculada +automáticamente no resulta óptima, se puede modificar su forma +manualmente mediante la especificación explícita de los cuatro puntos +de control necesarios para definir una curva de Bézier de tercer +orden. + +Las curvas Bézier de tercer orden o cúbicas están definidas por cuatro +puntos de control. El primer y cuarto puntos de control son +exactamente los puntos extremos de comienzo y de final de la curva. +Los dos puntos de control intermedios definen la forma. Se pueden +encontrar en la web animaciones que muestran cómo se traza la curva, +pero la descripción siguiente puede ser de ayuda. La curva comienza a +partir del primer punto de control dirigiéndose directamente hacia el +segundo, curvándose progresivamente para dirigirse hacia el tercero y +continuando la curva hacia el cuarto, llegando a éste en viaje directo +desde el tercer punto de control. La curva está contenida enteramente +dentro del cuadrilátero definido por los cuatro puntos de control. + +He aquí un ejemplo de un caso en que la ligadura no es óptima, y donde +@code{\tieDown} no sirve de ayuda. + +@lilypond[verbatim,quote,relative=1] +<< + { e1 ~ e } +\\ + { r4 } +>> +@end lilypond + +Una forma de mejorar esta ligadura es modificar manualmente sus puntos +de control como sigue. + +Las coordenadas de los puntos de control de Bézier se especifican en +unidades de espacios de pentagrama. La coordenada@tie{}X está en +relación con el punto de referencia de la nota a la que está unida la +ligadura, y la coordenada@tie{}Y está en relación con la línea central +del pentagrama. Las coordenadas se introducen como una lista de +cuatro parejas de números decimales (reales). Un enfoque es estimar +las coordenadas de los dos puntos extremos, y luego tratar de adivinar +los dos puntos intermedios. Los valores óptimos se encuentran por +ensayo y error. + +Es útil recordar que una curva simétrica necesita puntos de control +simétricos, y que las curvas de Bézier tienen la útil propiedad de que +las transformaciones de la curva tales como la traslación, rotación y +escalado se pueden obtener aplicando la misma transformación a los +puntos de control de la curva. + +Para el ejemplo anterior, la sobreescritura siguiente da una ligadura +satisfactoria. Observe la colocación: debe ir inmediatamente antes de +la nota a la que se asigna el comienzo de la ligadura de expresión o +de unión. + +@lilypond[verbatim,quote,relative=1] +<< + { + \once \override Tie + #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) + e1 ~ e1 + } +\\ + { r4 4 } +>> +@end lilypond + +@knownissues + +No es posible modificar la forma de las ligaduras de unión o de +expresión cambiando la propiedad @code{control-points} si hay más de +una en el mismo momento musical, ni siquiera usando la instrucción +@code{\tweak}. + + + +@node Uso de las funciones musicales +@section Uso de las funciones musicales +@translationof Using music functions + +@c TODO -- add @seealso, etc. to these subsections + +Dondequiera que se necesite reutilizar trucos con distintas +expresiones musicales, con frecuencia conviene hacer que el truco +forme parte de una @emph{función musical}. En esta sección +estudiaremos solamente las funciones de @emph{sustitución}, en las que +el objeto es sustituir una variable dentro de un fragmento de código +de entrada de LilyPond. Se describen otras funciones más complejas en +@rextend{Funciones musicales}. + +@menu +* Sintaxis de las funciones de sustitución:: +* Ejemplos de funciones de sustitución:: +@end menu + +@node Sintaxis de las funciones de sustitución +@subsection Sintaxis de las funciones de sustitución +@translationof Substitution function syntax + +Es fácil hacer una función que sustituya una variable dentro de código +de LilyPond. La forma general de estas funciones es + +@example +funcion = +#(define-music-function + (parser location @var{arg1} @var{arg2} @dots{}) + (@var{type1?} @var{type2?} @dots{}) + #@{ + @var{@dots{}música@dots{}} + #@}) +@end example + +@noindent +donde + +@multitable @columnfractions .33 .66 +@item @code{@var{argN}} +@tab @var{n}-ésimo argumento + +@item @code{@var{typeN?}} +@tab @emph{predicado de tipo} de Scheme para el que @code{@var{argN}} +debe devolver @code{#t}. + +@item @code{@var{@dots{}música@dots{}}} +@tab entrada de LilyPond normal, que utiliza @code{$} para +referenciar argumentos (p.ej. @samp{$arg1}). +@end multitable + + +Los argumentos @code{parser} y @code{location} son necesarios, y se +utilizan en algunas situaciones avanzadas como se encuentra descrito +en @rextend{Sintaxis de las funciones musicales}. Para las funciones +de sustitución, tan sólo hemos de asegurarnos de incluirlos. + +También es necesaria la lista de predicados de tipo. Algunos de los +predicados de tipo más comunes que se utilizan en las funciones +musicales son: + +@example +boolean? +cheap-list? @emph{(utilizar en lugar de }@q{list?}@emph{ para un procesado más rápido)} +ly:music? +markup? +number? +pair? +string? +symbol? +@end example + +@noindent +Para ver una lista de los predicados de tipo disponibles, consulte +@ref{Predicados de tipo predefinidos}. También se permiten los +predicados de tipo definidos por el usuario. + + +@seealso + +Referencia de la notación: +@ref{Predicados de tipo predefinidos}. + +Expansión de LilyPond: +@rextend{Sintaxis de las funciones musicales}. + +Archivos instalados: +@file{lily/music-scheme.cc}, +@file{scm/c++.scm}, +@file{scm/lily.scm}. + + +@node Ejemplos de funciones de sustitución +@subsection Ejemplos de funciones de sustitución +@translationof Substitution function examples + +Esta sección presenta algunos ejemplos de funciones de sustitución. +No pretenden ser exhaustivas, sino demostrar algunas de las +posibilidades de las funciones de sustitución sencillas. + +En el primer ejemplo se define una función que simplifica el ajuste +del relleno de un elemento de inscripción de texto TextScript: + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + +Además de números, podemos usar expresiones musicales, como notas, +para los argumentos de las funciones musicales: + +@c TODO: use a better example (the music argument is redundant). + +@lilypond[quote,verbatim,ragged-right] +custosNote = +#(define-music-function + (parser location note) + (ly:music?) + #{ + \once \override Voice.NoteHead #'stencil = + #ly:text-interface::print + \once \override Voice.NoteHead #'text = + \markup \musicglyph #"custodes.mensural.u0" + \once \override Voice.Stem #'stencil = ##f + $note + #}) + +\relative c' { c4 d e f \custosNote g } +@end lilypond + +Se pueden definir funciones de sustitución con más de un argumento: + +@lilypond[quote,verbatim,ragged-right] +tempoPadded = +#(define-music-function + (parser location padding tempotext) + (number? string?) + #{ + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } + #}) + +\relative c'' { + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 +} +@end lilypond + +@c TODO: add appropriate @@ref's here. diff --git a/Documentation/es/notation/cheatsheet.itely b/Documentation/es/notation/cheatsheet.itely new file mode 100644 index 0000000000..6875aa934c --- /dev/null +++ b/Documentation/es/notation/cheatsheet.itely @@ -0,0 +1,301 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 345522f312430725cdae0d61acfa716ce08622ca + + 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" + + +@c TODO: add tablature. + +@node Hoja de referencia rápida +@appendix Hoja de referencia rápida +@translationof Cheat sheet + + +@multitable @columnfractions .35 .3 .35 + +@item @b{Sintaxis} +@tab @b{Descripción} +@tab @b{Ejemplo} + +@item @code{1 2 8 16} +@tab duraciones +@tab +@lilypond[relative=2,notime] +\set Staff.autoBeaming = ##f +\override Staff.Clef #'break-visibility = #all-invisible +c1 c2 c8 c16 +@end lilypond + +@item @code{c4. c4..} +@tab puntillos +@tab +@lilypond[relative=2,notime] +\override Staff.Clef #'break-visibility = #all-invisible +c4. c4.. +@end lilypond + +@item @code{c d e f g a b } +@tab escala +@tab +@lilypond[relative=1,notime] +c d e f g a b +@end lilypond + +@item @code{fis bes} +@tab alteración +@tab +@lilypond[relative=1,notime] +fis bes +@end lilypond + +@item @code{\clef treble \clef bass } +@tab claves +@tab +@lilypond[relative=1,notime] +\clef treble +s4_" " +\clef bass +s4_" " +@end lilypond + +@item @code{\time 3/4 \time 4/4 } +@tab compás +@tab +@lilypond[relative=1] +\override Staff.Clef #'stencil = #empty-stencil +\time 3/4 +s4_" " +\time 4/4 +s16_" " +@end lilypond + + +@item @code{r4 r8} +@tab silencio +@tab +@lilypond[relative=2,notime] +\override Staff.Clef #'break-visibility = #all-invisible +r4 r8 +@end lilypond + +@item @code{d ~ d} +@tab ligadura de unión +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +d ~ d +@end lilypond + +@item @code{\key es \major } +@tab armadura +@tab +@lilypond[notime,relative=1] +\clef treble +\key es \major +\hideNotes +c128 +@end lilypond + +@item @var{note}@code{'} +@tab subir una octava +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +a a' +@end lilypond + +@item @var{note}@code{,} +@tab bajar una octava +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +c c, +@end lilypond + + +@item @code{c( d e)} +@tab ligadura de expresión +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c( d e) +@end lilypond + + +@item @code{c\( c( d) e\)} +@tab ligadura de fraseo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c\( c( d) e\) +@end lilypond + + +@item @code{a8[ b]} +@tab barra +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a8-[ b-] +@end lilypond + + +@item @code{<< \new Staff ... >>} +@tab más pentagramas +@tab +@lilypond[relative=1] +<< \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } + \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } >> +@end lilypond + + +@item @code{c-> c-.} +@tab articulaciones +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c-> c-. +@end lilypond + + +@item @code{c2\mf c\sfz} +@tab matices dinámicos +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c2\mf c\sfz +@end lilypond + + +@item @code{a\< a a\!} +@tab crescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\< a a\! +@end lilypond + +@item @code{a\> a a\!} +@tab decrescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\> a a\! +@end lilypond + + +@item @code{< >} +@tab acorde +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible + +@end lilypond + + +@item @code{\partial 8} +@tab anacrusa o compás incompleto +@tab +@lilypond[relative=2] +\partial 8 +f8 c2 d e +@end lilypond + + +@item @code{\times 2/3 @{f g a@}} +@tab tresillos +@tab +@lilypond[relative=1] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\times 2/3 { f8 g a } +@end lilypond + + +@item @code{\grace} +@tab mordentes +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Voice { \grace b16 c4 } +@end lilypond + +@item @code{\lyricmode @{ twinkle @}} +@tab escribir la letra +@tab +twinkle + + +@item @code{\new Lyrics} +@tab imprimir la letra +@tab +@lilypond[relative=1] +\new Lyrics \lyricmode { twinkle } +@end lilypond + +@item @code{twin -- kle} +@tab separador de sílabas +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +<< + { g'1 g } + \new Lyrics \lyricsto "" { twin -- kle } +>> +@end lilypond + +@item @code{\chordmode @{ c:dim f:maj7 @}} +@tab acordes +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\chordmode { c:dim f:maj7 } +@end lilypond + +@item @code{\context ChordNames} +@tab imprimir los nombres de los acordes +@tab +@lilypond[relative=2] +\chords { c:dim f:maj7 } +@end lilypond + +@item @code{<<@{e f@} \\ @{c d@}>>} +@tab polifonía +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Staff <<{e f} \\ {c d}>> +@end lilypond + + +@item @code{s4 s8 s16} +@tab silencios de separación +@tab + +@end multitable + diff --git a/Documentation/es/notation/chords.itely b/Documentation/es/notation/chords.itely new file mode 100644 index 0000000000..aa0a57d0b0 --- /dev/null +++ b/Documentation/es/notation/chords.itely @@ -0,0 +1,1201 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 9a40bd63b77375ac7ac1085d7eda9f5680bf06dd + + 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 Notación de acordes +@section Notación de acordes +@translationof Chord notation + +@lilypondfile[quote]{chords-headword.ly} + +Los acordes se pueden escribir en el modo de acordes, que reconoce +ciertas convenciones europeas tradicionales de nomenclatura de +acordes. También se pueden imprimir los nombres de los acordes. +Además se puede imprimir notación de bajo cifrado. + +@menu +* Modo de acordes:: +* Imprimir los acordes:: +* Bajo cifrado:: +@end menu + +@node Modo de acordes +@subsection Modo de acordes +@translationof Chord mode + +@cindex modo de acordes + +Para introducir acordes se utiliza el modo de acordes. Se usa un +indicador de la estructura del acorde en lugar de la altura de sus +notas. + +@menu +* Panorámica del modo de acordes:: +* Acordes más usuales:: +* Acordes extendidos y alterados:: +@end menu + +@node Panorámica del modo de acordes +@unnumberedsubsubsec Panorámica del modo de acordes +@translationof Chord mode overview + +@cindex acordes, nombres de +@cindex acordes, modo de +@cindex cifrado americano +@cindex acordes de jazz +@cindex jazz, acordes de + +Los acordes se pueden escribir como música simultánea, como se explica +en @ref{Notas en acorde}. + +También se pueden escribir los acordes en el @qq{modo de acordes}, que +es un modo de entrada que se centra en las estructuras de los acordes +dentro de la música europea tradicional (donde se conoce como «cifrado +americano») más que en las notas concretas. Esto es muy práctico para +los que están familiarizados con la utilización de nombres para +describir los acordes. Hay más información sobre los distintos modos +de entrada en @ref{Modos de entrada}. + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c1 g a g c } +@end lilypond + +Los acordes escritos con el modo de acordes son elementos musicales, y +se pueden transportar igual que los acordes escritos mediante +construcciones de música simultánea. @code{\chordmode} es absoluto, +pues @code{\relative} no tiene ningún efecto sobre los bloques +@code{chordmode}. Sin embargo, dentro de @code{\chordmode} las +alturas absolutas son una octava más agudas que en el modo de notas. + +Se pueden mezclar los modos de acorde y de nota en la música +secuencial: + +@lilypond[verbatim,quote,ragged-right,relative=1] +2 +\chordmode { c2 f } +2 +\chordmode { f2 g } +@end lilypond + + +@seealso +Glosario musical: +@rglos{chord}. + +Referencia de la notación: +@ref{Notas en acorde}, +@ref{Modos de entrada}. + +Fragmentos de código: +@rlsr{Chords}. + + +@knownissues + +No se pueden usar las abreviaturas predefinidas de articulaciones y +adornos sobre notas dentro del modo de acordes; véase +@ref{Articulaciones y ornamentos}. + +Cuando se mezclan los modos de acorde y de nota en música secuencial, +y el modo de acordes aparece en primer lugar, el modo de notas crea un +nuevo contexto de @code{Staff}: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\chordmode { c2 f } +2 +@end lilypond + +@noindent +Para evitar este comportamiento podemos crear explícitamente el +contexto de @code{Staff}: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\new Staff { + \chordmode { c2 f } + 2 +} +@end lilypond + +@node Acordes más usuales +@unnumberedsubsubsec Acordes más usuales +@translationof Common chords + +@cindex tríadas +@cindex séptima, acordes de +@cindex fundamental de un acorde +@cindex modificadores de acorde +@cindex acordes, variantes de + +Las tríadas mayores se introducen escribiendo la fundamental y una +duración opcional: + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c2 f4 g } +@end lilypond + +Las tríadas menores, aumentadas y disminuidas se escriben poniendo +@code{:} y una cadena modificadora de variante después de la duración: + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c2:m f4:aug g:dim } +@end lilypond + +Se pueden crear acordes de séptima: + +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } +@end lilypond + +@funindex aug +@funindex dim +@funindex maj +@funindex m + +La tabla que aparece más abajo muestra el efecto de los modificadores +de variante sobre los acordes de tríada y de séptima. La séptima +añadida de forma predeterminada a los acordes es menor, lo que hace +del acorde de séptima dominante el acorde básico de séptima. Todas +las alteraciones se consideran en relación con la séptima dominante. +Hay una tabla más completa donde aparecen los usos de los +modificadores en @ref{Modificadores de acorde más usuales}. + +@c @table @code +@multitable @columnfractions .2 .4 .3 + +@item +@b{Modificador} +@tab +@b{Acción} +@tab +@b{Ejemplo} + +@item +Ninguno +@tab +Acción predeterminada; produce una tríada mayor. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1 +} +@end lilypond + +@item +m, m7 +@tab +Acorde menor. Este modificador baja la tercera. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:m c:m7 +} +@end lilypond + + +@item +dim, dim7 +@tab +Acorde disminuido. Este modificador baja la tercera, la quinta y, si +existe, la séptima. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:dim c:dim7 +} +@end lilypond + +@item +aug +@tab +Acorde aumentado. Este modificador eleva la quinta. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:aug +} +@end lilypond + +@item +maj, maj7 +@tab +Acorde de séptima mayor. Este modificador añade una séptima elevada. +El @code{7} que sigue a @code{maj} es opcional. NO utilice este +modificador para crear una tríada mayor. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:maj c:maj7 +} +@end lilypond + +@end multitable + + +@seealso +Referencia de la notación: +@ref{Modificadores de acorde más usuales}, +@ref{Acordes extendidos y alterados}. + +Fragmentos de código: +@rlsr{Chords}. + +@knownissues +Sólo se puede usar un modificador por cada acorde, normalmente sobre +la nota más aguda del mismo. Los acordes con más de un modificador se +analizan sin producir errores ni advertencias, pero el resultado es +impredecible. Los acordes que no se pueden conseguir con un solo +modificador se deben alterar en sus notas individuales como se +describe en @ref{Acordes extendidos y alterados}. + +@node Acordes extendidos y alterados +@unnumberedsubsubsec Acordes extendidos y alterados +@translationof Extended and altered chords + +@cindex acordes extendidos +@cindex acordes alterados + +Se pueden crear estructuras de acorde de complejidad arbitraria dentro +del modo de acordes. Se puede usar la cadena modificadora para +extender un acorde, añadir o quitar notas, elevar o bajar notas del +acorde y añadir un bajo distinto o crear una inversión. + +El primer número que sigue al @code{:} se considera que es el ámbito +del acorde. El acorde se construye secuencialmente añadiendo terceras +a la fundamental hasta que se alcanza el número especificado. Observe +que la séptima añadida como parte de un acorde extendido es la séptima +menor, no mayor. Si el ámbito no es una tercera (p.ej. 6), se añaden +terceras hasta la tercera más alta inferior al ámbito, y después se +añade la nota del ámbito. El mayor valor posible para el ámbito es +13. Cualquier valor mayor se interpreta como 13. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:2 c:3 c:4 c:5 + c1:6 c:7 c:8 c:9 + c1:10 c:11 c:12 c:13 + c1:14 +} +@end lilypond + +@noindent +Observe que @code{c:5} es idéntico a @code{c} (los dos producen una +tríada de Do mayor). + +Puesto que una oncena sin alteración no suena bien cuando se combina +con una trecena sin alteración, se elimina la oncena de los acordes de +@code{:13} (a no ser que se añada explícitamente). + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:13 c:13.11 c:m13 +} +@end lilypond + +@cindex adiciones en acordes + +Se pueden añadir notas individuales a un acorde. Las adiciones siguen +el ámbito y van prefijadas por un punto (@code{.}). La séptima normal +que se añade a un acorde es la séptima menor, no mayor. + +@lilypond[quote,verbatim] +\chordmode { + c1:5.6 c:3.7.8 c:3.6.13 +} +@end lilypond + +Las notas añadidas pueden ser tan agudas como se desee. + +@lilypond[quote,verbatim] +\chordmode { + c4:5.15 c:5.20 c:5.25 c:5.30 +} +@end lilypond + +@cindex acordes, alteración de notas + +Las notas añadidas a los acordes se pueden alterar mediante la adición +de los sufijos @code{-} o @code{+} al número. Para alterar una nota +que se ha incluido automáticamente como parte de la estructura básica +del acorde, añádala como una nota alterada. + +@lilypond[quote,verbatim] +\chordmode { + c1:7+ c:5+.3- c:3-.5-.7- +} +@end lilypond + +@cindex acordes, supresiones en + +@funindex ^ + +Una nota que se quiere suprimir de un acorde se indica dentro de la +cadena modificadora prefijándola por un acento circunflejo @code{^}. +Sólo se permite una supresión con @code{^} dentro de una cadena +modificadora. + +@lilypond[quote,verbatim] +\chordmode { + c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 +} +@end lilypond + +@funindex sus + +Se puede añadir el modificador @code{sus} a la cadena modificadora +para crear acordes suspendidos. Esto elimina la tercera del acorde. +Escriba bien @code{2} o bien @code{4} para añadir la segunda o la cuarta +al acorde, respectivamente. @code{sus} equivale a @code{^3}; +@code{sus4} equivale a @code{.4^3}. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:sus c:sus2 c:sus4 c:5.4^3 +} +@end lilypond + +@funindex / +@cindex acordes, inversiones +@cindex bajo de los acordes +@cindex acordes, bajo de + +Se pueden especificar las inversiones (colocar en el bajo una nota +distinta de la fundamental del acorde) y notas de bajo añadidas +mediante la adición de @code{/}@var{nota} al acorde. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1 c/g c/f +} +@end lilypond + +@funindex /+ + +Se puede añadir una nota del bajo que forma parte del acorde, en lugar +de ser movida por efecto de una inversión, mediante el uso de +@code{/+}@var{nota}. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1 c/g c/+g +} +@end lilypond + +Los modificadores de acorde que se pueden utilizar para producir una +amplia variedad de acordes estándar se muestran en @ref{Modificadores de acorde más usuales}. + + +@seealso +Referencia de la notación: +@ref{Modificadores de acorde más usuales}. + +Fragmentos de código: +@rlsr{Chords}. + + +@knownissues + +Cada nota sólo puede estar presente en el acorde una sola vez. Lo que +sigue produce simplemente el acorde aumentado, porque @code{5+} se +interpreta en último lugar. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1:5.5-.5+ } +@end lilypond + +Sólo se puede crear la segunda inversión mediante la adición de un +bajo. La primera inversión requiere cambiar la fundamental del +acorde. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c'1: c':/g e:6-3-^5 e:m6-^5 +} +@end lilypond + +@node Imprimir los acordes +@subsection Imprimir los acordes +@translationof Displaying chords + +Los acordes se pueden imprimir por su nombre, además de la impresión +estándar como notas sobre un pentagrama. + +@menu +* Impresión de los nombres de acorde:: +* Nombres de acorde personalizados:: +@end menu + +@node Impresión de los nombres de acorde +@unnumberedsubsubsec Impresión de los nombres de acorde +@translationof Printing chord names + +@cindex impresión de los nombres de acorde +@cindex acordes, nombres de +@cindex acordes + +Los nombres de acorde se imprimen dentro del contexto +@code{ChordNames}: + +@lilypond[verbatim,quote,ragged-right] +\new ChordNames { + \chordmode { + c2 f4. g8 + } +} +@end lilypond + +Los acordes se pueden escribir como notas simultáneas o a través del +uso del modo de acordes. El nombre de acorde que se imprime es el +mismo independientemente del modo de entrada, a no ser que existan +inversiones o bajos añadidos: + +@lilypond[verbatim,quote,relative=1] +<< + \new ChordNames { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } + { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } +>> +@end lilypond + +@cindex sin acorde, símbolo +@cindex N.C., símbolo +@cindex indicar No Chord (sin acorde) en ChordNames + +Los silencios pasados a un contexto @code{ChordNames} hacen que se +imprima el elemento de marcado @code{noChordSymbol} (símbolo de N.C., +Sin Acorde). + +@lilypond[verbatim, quote, relative=1] +<< + \new ChordNames \chordmode { + c1 + r1 + g1 + c1 + } + \chordmode { + c1 + r1 + g1 + c1 + } +>> +@end lilypond + +@funindex{\chords} + +@code{\chords @{ ... @}} es una forma abreviada de escribir +@code{\new ChordNames @{ \chordmode @{ ... @} @}}. + +@lilypond[verbatim,quote,ragged-right] +\chords { + c2 f4.:m g8:maj7 +} +@end lilypond + +@lilypond[verbatim,quote,ragged-right] +\new ChordNames { + \chordmode { + c2 f4.:m g8:maj7 + } +} +@end lilypond + +@snippets + +@c Keep index entries with following snippet +@cindex acordes, eliminar repetidos +@funindex chordChanges + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{showing-chords-at-changes.ly} + +@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +@c {adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + + +@seealso +Glosario musical: +@rglos{chord}. + +Referencia de la notación: +@ref{Escribir música en paralelo}. + +Fragmentos de código: +@rlsr{Chords}. + +Referencia de funcionamiento interno: +@rinternals{ChordNames}, +@rinternals{ChordName}, +@rinternals{Chord_name_engraver}, +@rinternals{Volta_engraver}, +@rinternals{Bar_engraver}. + + +@knownissues + +Los acordes que contienen inversiones o bajos alterados no reciben un +nombre adecuado si se escriben usando música simultánea. + +@node Nombres de acorde personalizados +@unnumberedsubsubsec Nombres de acorde personalizados +@translationof Customizing chord names + +@cindex personalización de los nombres de acorde + +No hay un sistema único para nombrar acordes. Las distintas +tradiciones musicales usan distintos nombres para el mismo conjunto de +acordes. También hay distintos símbolos impresos para un nombre de +acorde dado. Los nombres y símbolos que se imprimen para los nombres +de acorde dados se pueden personalizar. + +@cindex Banter +@cindex jazz, acordes de +@cindex acordes de jazz + +El esquema de nomenclatura de acordes predeterminado es un sistema +para música de Jazz, propuesto por Klaus Ignatzek (véase +@ressay{Lista bibliográfica}). +También funcionan otros dos esquemas de nomenclatura +de acordes: una notación de acordes de Jazz alternativa y un esquema +sistemático llamado Acordes de Banter. La notación de Jazz +alternativa también se puede ver en el cuadro +@ref{Cuadro de nombres de acordes}. + +@c TODO -- Change this so we don't have a non-verbatim example. +@c Make short example in docs, then move longer example to +@c appendix, where the length of the snippet won't matter. + +Además de los distintos sistemas de nomenclatura, se usan diferentes +nombres de nota para la fundamental en los distintos idiomas. Las +variables predefinidas @code{\germanChords}, @code{\semiGermanChords}, +@code{\italianChords} y @code{\frenchChords} establecen el valor de +estas variables. El efecto se muestra aquí: + +@lilypondfile[ragged-right]{chord-names-languages.ly} + + +@funindex chordNameLowercaseMinor + +Algunos cancioneros alemanes indican los acordes menores como letras +minúsculas, sin el sufijo @var{m}. Esto se puede conseguir +estableciendo la propiedad @code{chordNameLowercaseMinor}: + +@lilypond[verbatim,quote,ragged-right] +\chords { + \set chordNameLowercaseMinor = ##t + c2 d:m e:m f +} +@end lilypond + +Si ninguno de los ajustes predeterminados proporciona el resultado +deseado, se puede afinar la presentación de los nombres de acorde a +través de las siguientes propiedades. + +@table @code + +@funindex chordRootNamer + +@item chordRootNamer + +El nombre de acorde se imprime normalmente como una letra para la +fundamental con una alteración opcional. La transformación de la nota +en la letra se realiza por parte de esta función. Los nombres de nota +especiales (por ejemplo, la @q{H} alemana para un acorde de Si) se +pueden producir almacenando una función nueva en esta propiedad. + +@funindex majorSevenSymbol + +@item majorSevenSymbol + +Esta propiedad contiene el objeto de marcado que se usa para hacer el +seguimiento de la salida de @code{chordRootNamer} para identificar un +acorde de séptima mayor. Las opciones predefinidas son +@code{whiteTriangleMarkup} (triángulo blanco) y +@code{blackTriangleMarkup} (triángulo negro). + +@funindex chordNoteNamer + +@item chordNoteNamer + +Cuando el nombre del acorde contiene notas adicionales aparte de la +fundamental (p.ej., un bajo añadido), se utiliza esta función para +imprimir la nota adicional. De forma predeterminada se imprime la +nota usando @code{chordRootNamer}. La propiedad @code{chordNoteNamer} +se puede establecer a una función especializada para cambiar este +comportamiento. Por ejemplo, el bajo se puede imprimir en minúscula. + +@funindex chordNameSeparator + +@item chordNameSeparator + +Las diferentes partes del nombre de un acorde se separan normalmente +mediante una barra inclinada. Mediante el ajuste de +@code{chordNameSeparator}, podemos usar cualquier marcado que deseemos +como separador. + +@funindex chordNameExceptions + +@item chordNameExceptions + +Esta propiedad es una lista de parejas. El primer elemento de cada +pareja es un conjunto de notas utilizadas para identificar los +elementos presentes en el acorde. El segundo elemento es un elemento +de marcado que sigue a la salida de @code{chordRootNamer} para crear +el nombre del acorde. + +@funindex chordPrefixSpacer +@item chordPrefixSpacer + +La @q{m} de los acordes menores se imprime por lo general +inmediatamente a la derecha de la fundamental. Se puede insertar un +símbolo separador entre la fundamental y @q{m} estableciendo +@code{chordPrefixSpacer}. El símbolo separador no se usa cuando el +acorde está alterado. + +@end table + + +@predefined +@funindex major seven symbols +@code{\whiteTriangleMarkup}, +@code{\blackTriangleMarkup}, +@funindex \germanChords +@code{\germanChords}, +@funindex \semiGermanChords +@code{\semiGermanChords}, +@funindex \italianChords +@code{\italianChords}, +@funindex \frenchChords +@code{\frenchChords}. +@endpredefined + + +@snippets + +@cindex excepciones, nombres de acorde +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-exceptions.ly} + +@c TODO - tweak snippet to use \blackTriangleMarkup as well +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-major7.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{volta-below-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-chord-separator.ly} + + +@seealso +Referencia de la notación: +@ref{Cuadro de nombres de acordes}, +@ref{Modificadores de acorde más usuales}. + +El ensayo sobre grabado musical automatizado: +@ressay{Lista de referencias bibliográficas}. + +Archivos instalados: +@file{scm/chords-ignatzek.scm}, +@file{scm/chord-entry.scm}, +@file{ly/chord-modifier-init.ly}. + +Fragmentos de código: +@rlsr{Chords}. + +@c Internals Reference: +@c @r internals{}. + + +@knownissues + +Los nombres de acorde se determinan a partir de las notas que están +presentes en el mismo y de la información acerca de la estructura del +acorde que ha podido ser introducida en @code{\chordmode}. Si el +método de las notas simultáneas se usa para introducir los acordes, +pueden resultar nombres no deseados a partir de las inversiones o de +las notas del bajo. + +@lilypond[quote,ragged-right,verbatim] +myChords = \relative c' { + \chordmode { c1 c/g c/f } + 1 +} +<< + \new ChordNames { \myChords } + \new Staff { \myChords } +>> +@end lilypond + +@node Bajo cifrado +@subsection Bajo cifrado +@translationof Figured bass + +@lilypondfile[quote]{figured-bass-headword.ly} + +Se puede imprimir notación de bajo cifrado. + +@menu +* Introducción al bajo cifrado:: +* Introducir el bajo cifrado:: +* Imprimir el bajo cifrado:: +@end menu + +@node Introducción al bajo cifrado +@unnumberedsubsubsec Introducción al bajo cifrado +@translationof Introduction to figured bass + +@cindex Basso continuo +@cindex Thorough bass +@cindex Figured bass +@cindex Bass, thorough +@cindex Bass, figured + +@c TODO: musicological blurb about FB + +LilyPond contempla el bajo cifrado, también conocido como basso +continuo: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice { \clef bass dis4 c d ais g fis} + \new FiguredBass { + \figuremode { + < 6 >4 < 7\+ >8 < 6+ [_!] > + < 6 >4 <6 5 [3+] > + < _ >4 < 6 5/>4 + } + } +>> +@end lilypond + +El soporte para bajo cifrado se compone de dos partes: hay un modo de +entrada, presentado por @code{\figuremode}, que admite la entrada de +las cifras del bajo, y hay un contexto llamado @code{FiguredBass} que +se ocupa de la impresión de los objetos del tipo @code{BassFigure}. +El bajo cifrado también se puede imprimir dentro de contextos de +@code{Staff}. + +@code{\figures@{ ... @}} es una notación abreviada de +@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. + +Aunque el soporte para bajo cifrado puede parecerse superficialmente +al de los acordes, realmente es mucho más simple. El modo +@code{\figuremode} simplemente almacena las cifras y el contexto +@code{FiguredBass} las imprime tal y como se han introducido. No hay +ninguna conversión a notas. + +@ignore +Las cifras se crean como textos de marcado. Cualquiera de las +propiedades estándar de marcado se pueden usar para modificar la +impresión de las cifras. Por ejemplo, el espaciado vertical de las +cifras se puede ajustar con @code{baseline-skip}. +@end ignore + + +@seealso +Glosario musical: +@rglos{figured bass}. + +Fragmentos de código: +@rlsr{Chords}. + + +@node Introducir el bajo cifrado +@unnumberedsubsubsec Introducir el bajo cifrado +@translationof Entering figured bass + +Se usa @code{\figuremode} para cambiar el modo de entrada al modo de +cifras. Hay más información sobre los distintos modos de entrada en +@ref{Modos de entrada}. + +En el modo de cifras, un grupo de cifras del bajo está delimitado +mediante ángulos simples, @code{<} y @code{>}. La duración se escribe +después del @code{>}. + +@lilypond[verbatim,quote,ragged-right] +\new FiguredBass { + \figuremode { + <6 4>2 + } +} +@end lilypond + +Se pueden añadir alteraciones accidentales (incluso becuadros) a las +cifras: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +Se pueden indicar elementos del acorde aumentados y disminuidos: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +Se puede crear una barra invertida cruzando una cifra (usada +normalmente para sextas elevadas): + +@lilypond[verbatim,quote,ragged-right] +\figures { + <6> <6\\> +} +@end lilypond + +Se pueden incluir espacios verticales y corchetes en las cifras: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <[12 _!] 8 [6 4]> +} +@end lilypond + +Se puede insertar cualquier elemento de marcado de texto como una cifra: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <\markup { \tiny \number 6 \super (1) } 5> +} +@end lilypond + +@c TODO We need to include notes any time we use extenders to +@c avoid extraneous staff creation due to Staff.use... in +@c \bassFigureExtendersOn + +Se pueden usar líneas de continuación para indicar cifras que se +repiten: + +@lilypond[verbatim,quote,ragged-right] +<< + { + \clef bass + e4 d c b, + e4 d c b, + } + \figures { + \bassFigureExtendersOn + <6 4>4 <6 3> <7 3> <7 3> + \bassFigureExtendersOff + <6 4>4 <6 3> <7 3> <7 3> + } +>> +@end lilypond + +@noindent +En este caso, las líneas de extensión sustituyen a las cifras +existentes, a no ser que las líneas de continuación hayan sido +terminadas explícitamente. + +@lilypond[verbatim,quote,ragged-right] +<< + \figures { + \bassFigureExtendersOn + <6 4>4 <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d4 d c c + } +>> +@end lilypond + + +La siguiente tabla resume los modificadores de cifrado disponibles. + +@multitable @columnfractions .1 .5 .4 + +@item +@b{Modificador} +@tab +@b{Propósito} +@tab +@b{Ejemplo} + +@item ++, -, ! +@tab +Alteraciones +@tab +@lilypond[line-width=4\cm] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +@item +\+, / +@tab +Aumentaciones y disminuciones +@tab +@lilypond[line-width=4\cm] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +@item +\\ +@tab +Sexta elevada +@tab +@lilypond[line-width=4\cm] +\figures { + <6\\> +} +@end lilypond + +@item +\! +@tab +Fin de línea de continuación +@tab +@lilypond[line-width=4\cm] +<< + \figures { + \bassFigureExtendersOn + <6 4> <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d d c c + } +>> +@end lilypond + +@end multitable + + +@predefined +@cindex bajo cifrado, líneas de extensión +@code{\bassFigureExtendersOn}, +@code{\bassFigureExtendersOff}. +@endpredefined + + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-positions-of-figured-bass-alterations.ly} + + +@seealso +Fragmentos de código: +@rlsr{Chords}. + +Referencia de funcionamiento interno: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + + +@c @knownissues + + +@node Imprimir el bajo cifrado +@unnumberedsubsubsec Imprimir el bajo cifrado +@translationof Displaying figured bass + +El bajo cifrado se puede imprimir usando el contexto +@code{FiguredBass}, o dentro de la mayoría de los contextos de +pentagrama. + +Cuando se presenta dentro de un contexto de @code{FiguredBass}, la +ubicación vertical de las cifras es independiente de las notas que +están en el pentagrama. + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c'' { + c4 c'8 r8 c,4 c' + } + \new FiguredBass { + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + } +>> +@end lilypond + +@noindent +En el ejemplo de arriba, el contexto @code{FiguredBass} se debe +instanciar explícitamente para evitar crear un segundo pentagrama +vacío. + +El bajo cifrado se puede añadir también a contextos de @code{Staff} +directamente. En este caso, la posición vertical de las cifras se +ajusta automáticamente. + +@lilypond[verbatim,ragged-right,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + +Cuando se escribe dentro de un contexto de pentagrama, el bajo cifrado +se puede presentar encima o debajo del mismo. + +@lilypond[verbatim,ragged-right,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + \bassFigureStaffAlignmentDown + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + + +@predefined +@cindex bajo cifrado, alineación +@code{\bassFigureStaffAlignmentDown}, +@code{\bassFigureStaffAlignmentUp}, +@code{\bassFigureStaffAlignmentNeutral}. +@endpredefined + + +@c @snippets + +@seealso +@c Music Glossary: +@c @rg los{}. +@c +@c Learning Manual: +@c @rle arning{}. +@c +@c Notation Reference: +@c @re f{}. +@c +@c Application Usage: +@c @rpr ogram{}. +@c +@c Installed Files: +@c @fil e{}. +@c +Fragmentos de código: +@rlsr{Chords}. + +Referencia de funcionamiento interno: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + + +@knownissues + +Para asegurar que las líneas extensoras funcionan adecuadamente, lo +más seguro es utilizar las mismas duraciones en la línea de cifras y +en la línea del bajo. + +@lilypond[verbatim,ragged-right,quote] +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are correct here, with the same rhythm as the bass + \repeat unfold 4 { <6 4->16. <6 4->32 } + <5>8. r16 <6>8 <6\! 5-> + } +>> +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are incorrect here, even though the timing is the same + <6 4->4 <6 4->4 + <5>8. r16 <6>8 <6\! 5-> + } +>> +@end lilypond + +Si se usan líneas extensoras, las cifras adyacentes con el mismo +número en distinta colocación puede hacer que se inviertan las +posiciones de las cifras. + +@lilypond[verbatim,ragged-right,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + \bassFigureExtendersOn + <6 5>4 <5\! 4> < 5 _!> <6> + } +>> +@end lilypond + +Para evitar este problema, sencillamente habilite los extensores +después de la cifra y quítelos al final de la línea extensora. + +@lilypond[verbatim,ragged-right,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + <6 5>4 <5 4> + \bassFigureExtendersOn + < 5 _!>4 <6> + \bassFigureExtendersOff + } +>> +@end lilypond diff --git a/Documentation/es/notation/contemporary.itely b/Documentation/es/notation/contemporary.itely new file mode 100644 index 0000000000..5696520ebb --- /dev/null +++ b/Documentation/es/notation/contemporary.itely @@ -0,0 +1,246 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: de924bddd22886a0a67decbde45acd5da441bf6d + + 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 Música contemporánea +@section Música contemporánea +@translationof Contemporary music + +A partir de comienzos del s.XX se ha producido una expansión masiva de +los estilos y técnicas composicionales. Los nuevos desarrollos +armónicos y rítmicos, una expansión del espectro de alturas y el +desarrollo de un amplio abanico de nuevas técnicas instrumentales han +venido acompañadas de una evolución y expansión paralelas de la +notación musical. El objetivo de esta sección es proporcionar +referencias e información relevante para el trabajo con estas nuevas +técnicas notacionales. + +@menu +* Altura y armonía en la música contemporánea:: +* Enfoques contemporáneos del ritmo:: +* Notación gráfica:: +* Técnicas de partitura contemporáneas:: +* Nuevas técnicas instrumentales:: +* Lecturas adicionales y partituras de interés:: +@end menu + + +@node Altura y armonía en la música contemporánea +@subsection Altura y armonía en la música contemporánea +@translationof Pitch and harmony in contemporary music + +Esta sección destaca los problemas de la notación de las alturas y la +armonía en la música contemporánea. + +@menu +* Referencias para alturas y armonía en música contemporánea:: +* Notación microtonal:: +* Armonía y armaduras de tonalidad contemporáneas:: +@end menu + + +@node Referencias para alturas y armonía en música contemporánea +@unnumberedsubsubsec Referencias para alturas y armonía en música contemporánea +@translationof References for pitch and harmony in contemporary music + +@itemize +@item La notación estándar de cuartos de tono se estudia en +@ref{Nombres de las notas en otros idiomas}. + +@item Las armaduras de tonalidad no estándar se estudian en +@ref{Armadura de la tonalidad}. + +@item Las prácticas contemporáneas en la presentación de las alteraciones +accidentales se estudian en @ref{Alteraciones accidentales automáticas}. + +@end itemize + + +@node Notación microtonal +@unnumberedsubsubsec Notación microtonal +@translationof Microtonal notation + +@ignore + Discussion of microtones other than quarter-tones, alternative +notations (arrows, slash-flats), etc. +@end ignore + + +@node Armonía y armaduras de tonalidad contemporáneas +@unnumberedsubsubsec Armonía y armaduras de tonalidad contemporáneas +@translationof Contemporary key signatures and harmony + +@ignore + Discussion of contemporary key signatures: + non-standard, polytonality, etc. +@end ignore + + +@node Enfoques contemporáneos del ritmo +@subsection Enfoques contemporáneos del ritmo +@translationof Contemporary approaches to rhythm + +Esta sección destaca los problemas de la notación de las duraciones en +la música contemporánea. + +@menu +* Referencias para enfoque contemporáneos del ritmo:: +* Grupos de valoración especial en música contemporánea:: +* Compases contemporáneos:: +* Notación polimétrica extendida:: +* Barrado en música contemporánea:: +* Líneas divisorias en música contemporánea:: +@end menu + + +@node Referencias para enfoque contemporáneos del ritmo +@unnumberedsubsubsec Referencias para enfoque contemporáneos del ritmo +@translationof References for contemporary approaches to rhythm + +@itemize +@item Los tipos de compás de amalgama se estudian en @ref{Indicación de compás}. + +@item La notación polimétrica básica se estudia en +@ref{Notación polimétrica}. + +@item Las barras en ángulo progresivas se estudian en @ref{Barras progresivas}. + +@item Las líneas divisorias de estilo Mensurstriche (líneas que están +solamente entre los pentagramas) se estudian en @ref{Agrupar +pentagramas}. + +@end itemize + + +@node Grupos de valoración especial en música contemporánea +@unnumberedsubsubsec Grupos de valoración especial en música contemporánea +@translationof Tuplets in contemporary music + +@ignore + Extended discussion of modern tuplets, including + non-standard ratios, nested tuplets and customising + the appearance of tuplets (ratios, note values etc.) + Also how to provide an ossia RhythmicStaff to help + players break down a complicated tuplet. +@end ignore + + +@node Compases contemporáneos +@unnumberedsubsubsec Compases contemporáneos +@translationof Contemporary time signatures + +@ignore + Extended discussion of compound time signatures + including Graham P.'s work; non-standard time + signatures such as 7/10, 5/6; alternative + notations such as Orff-esque 4/note, placing a + single time signature across multiple staves, or + placing time signatures at the top of StaffGroups + or systems rather than in the stave. +@end ignore + + +@node Notación polimétrica extendida +@unnumberedsubsubsec Notación polimétrica extendida +@translationof Extended polymetric notation + +@ignore + Extended examples e.g. different instruments + or ensembles with independent tempi +@end ignore + + +@node Barrado en música contemporánea +@unnumberedsubsubsec Barrado en música contemporánea +@translationof Beams in contemporary music + +@ignore + Beaming practises, stemlets, Boulez-esque displaying + of beamed notes with flags +@end ignore + + +@node Líneas divisorias en música contemporánea +@unnumberedsubsubsec Líneas divisorias en música contemporánea +@translationof Bar lines in contemporary music + + +@ignore + Mensurstriche barlines, tick barlines, etc. +@end ignore + + +@node Notación gráfica +@subsection Notación gráfica +@translationof Graphical notation + + +@node Técnicas de partitura contemporáneas +@subsection Técnicas de partitura contemporáneas +@translationof Contemporary scoring techniques + + +@node Nuevas técnicas instrumentales +@subsection Nuevas técnicas instrumentales +@translationof New instrumental techniques + + +@node Lecturas adicionales y partituras de interés +@subsection Lecturas adicionales y partituras de interés +@translationof Further reading and scores of interest + +Esta sección sugiere libros, ejemplos musicales y otros recursos de +utilidad en el estudio de la notación musical contemporánea. + +@menu +* Libros y artículos sobre notación musical contemporánea:: +* Partituras y ejemplos musicales:: +@end menu + + +@node Libros y artículos sobre notación musical contemporánea +@unnumberedsubsubsec Libros y artículos sobre notación musical contemporánea +@translationof Books and articles on contemporary musical notation + +@itemize +@item +@emph{Music Notation in the Twentieth Century: A Practical Guidebook} +de Kurt Stone [W. W. Norton, 1980] + +@item +@emph{Music Notation: A Manual of Modern Practice} de Gardner Read +[Taplinger, 1979] + +@item +@emph{Instrumentation and Orchestration} de Alfred Blatter [Schirmer, +2nd ed. 1997] + +@end itemize + + +@node Partituras y ejemplos musicales +@unnumberedsubsubsec Partituras y ejemplos musicales +@translationof Scores and musical examples + +@ignore + Rough list of composers whose work could be included + (in alphabetical order, perhaps with suggested work): + + Pierre Boulez (Le Marteau Sans Maître?) + John Cage (Freeman Etudes?) + George Crumb (Black Angels?) + Brian Ferneyhough (Transit? Time & Motion Studies?) + Ben Johnston (extended just intonation example) + György Ligeti (several, including Hamburg Concerto) + Krzysztof Penderecki (Threnody to the Victims of Hiroshima?) + Karlheinz Stockhausen (Gruppen?) +@end ignore + diff --git a/Documentation/es/notation/editorial.itely b/Documentation/es/notation/editorial.itely new file mode 100644 index 0000000000..b7a01feffa --- /dev/null +++ b/Documentation/es/notation/editorial.itely @@ -0,0 +1,733 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@c This file is included from notation.itely +@ignore + Translation of GIT committish: f93bc90b3ee5e5de96b59c8e81b4ea354d5b1927 + + 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 Anotaciones editoriales +@section Anotaciones editoriales +@translationof Editorial annotations + +@lilypondfile[quote]{editorial-headword.ly} + +Esta sección trata de las diversas maneras de modificar el aspecto de +las notas y de aplicar énfasis analítico o educativo. + +@menu +* Dentro del pentagrama:: +* Fuera del pentagrama:: +@end menu + + +@node Dentro del pentagrama +@subsection Dentro del pentagrama +@translationof Inside the staff + +Esta sección trata sobre cómo aplicar énfasis a los elementos situados +dentro del pentagrama. + +@menu +* Seleccionar el tamaño de la tipografía para la notación:: +* Indicaciones de digitación:: +* Notas ocultas:: +* Colorear objetos:: +* Paréntesis:: +* Plicas:: +@end menu + +@node Seleccionar el tamaño de la tipografía para la notación +@unnumberedsubsubsec Seleccionar el tamaño de la tipografía para la notación +@translationof Selecting notation font size + +@cindex fuente tipográfica (de notación), tamaño +@cindex selección del tamaño de la fuente tipográfica (de notación) +@cindex notación, tamaño de la fuente +@cindex notas, cabezas de + +@funindex fontSize +@funindex font-size +@funindex magstep +@funindex \huge +@funindex \large +@funindex \normalsize +@funindex \small +@funindex \tiny +@funindex \teeny +@funindex huge +@funindex large +@funindex normalsize +@funindex small +@funindex tiny +@funindex teeny + +Se puede alterar el tamaño de la fuente tipográfica de los elementos +de notación. Esto no cambia el tamaño de los símbolos variables, como +las barras de corchea o las ligaduras. + +@warning{Para los tamaños de tipografía del texto, consulte +@ref{Seleccionar la tipografía y su tamaño}.} + +@lilypond[verbatim,quote,relative=2] +\huge +c4.-> d8---3 +\large +c4.-> d8---3 +\normalsize +c4.-> d8---3 +\small +c4.-> d8---3 +\tiny +c4.-> d8---3 +\teeny +c4.-> d8---3 +@end lilypond + +Internamente, esto establece un valor para la propiedad +@code{fontSize}. Esto, a su vez, hace que se establezca el valor de +la propiedad @code{font-size} de todos los objetos de presentación. +El valor de @code{font-size} es un número que indica el tamaño con +relación al tamaño estándar para la altura vigente del pentagrama. +Cada unidad hacia arriba es un incremento de un 12% del tamaño de la +fuente, aproximadamente. Seis unidades son exactamente un factor de +dos. La función de Scheme @code{magstep} convierte un número de +tamaño @code{font-size} a un factor de escalado. La propiedad +@code{font-size} también se puede establecer directamente, de forma +que queden afectados solamente determinados objetos gráficos. + +@lilypond[verbatim,quote,relative=2] +\set fontSize = #3 +c4.-> d8---3 +\override NoteHead #'font-size = #-4 +c4.-> d8---3 +\override Script #'font-size = #2 +c4.-> d8---3 +\override Stem #'font-size = #-5 +c4.-> d8---3 +@end lilypond + +@cindex estándar, tamaño de la tipografía (de notación) +@cindex fuente tipográfica (de notación), tamaño estándar de + +@funindex font-interface +@funindex font-size + +Los cambios en el tamaño de la fuente se obtienen por medio del +escalado del tamaño del diseño que se encuentra más cerca del tamaño +deseado. El tamaño estándar para la tipografía (para @code{font-size += #0}), depende de la altura estándar del pentagrama. Para un +pentagrama de 20 puntos, se selecciona una fuente de 10 puntos. + +La propiedad @code{font-size} sólo se puede establecer en objetos +gráficos que utilicen fuentes tipográficas. Éstos son los que +contemplan el interfaz de presentación @code{font-interface}. + + +@predefined +@code{\teeny} (enano), +@code{\tiny} (muy pequeño), +@code{\small} (pequeño), +@code{\normalsize} (normal), +@code{\large} (grande), +@code{\huge} (enorme). +@endpredefined + + +@seealso +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{font-interface}. + + +@node Indicaciones de digitación +@unnumberedsubsubsec Indicaciones de digitación +@translationof Fingering instructions + +@cindex digitación +@cindex cambio de dedo + +@funindex \finger +@funindex finger + +Las instrucciones de digitación se pueden introducir usando +@samp{@var{nota}-@var{dígito}}: + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 e-3 +@end lilypond + +Para los cambios de dedo se pueden usar elementos de marcado de texto. + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } +@end lilypond + +@cindex thumb-script + +@funindex \thumb +@funindex thumb + +Puede usar la articulación de pulgar para indicar que una nota se debe +tocar con el pulgar (p.ej. en música de violoncello). + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +@cindex digitación de acordes +@cindex digitación, instrucciones de, para acordes +@cindex acordes, digitación de + +Las digitaciones para los acordes también se pueden añadir a las notas +individuales escribiéndolas después de las alturas. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +Las indicaciones de digitación se pueden situar manualmente encima o +debajo del pentagrama, véase @ref{Dirección y posición}. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{avoiding-collisions-with-chord-fingerings.ly} + + +@seealso +Referencia de la notación: +@ref{Dirección y posición}. + +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{FingeringEvent}, +@rinternals{fingering-event}, +@rinternals{Fingering_engraver}, +@rinternals{New_fingering_engraver}, +@rinternals{Fingering}. + +@knownissues +Por omisión, los números mayores de 9 no están coontemplados si se +utiliza @samp{@var{nota}-@var{dígito}}. + + +@node Notas ocultas +@unnumberedsubsubsec Notas ocultas +@translationof Hidden notes + +@cindex ocultas, notas +@cindex invisibles, notas +@cindex transparentes, notas +@cindex notas ocultas +@cindex notas invisibles +@cindex notas transparentes + +@funindex \hideNotes +@funindex hideNotes +@funindex \unHideNotes +@funindex unHideNotes + +Las notas ocultas (o invisibles, o transparentes) pueden ser de +utilidad en la preparación de ejercicios de teoría o de composición. + +@lilypond[verbatim,quote,relative=2] +c4 d +\hideNotes +e4 f +\unHideNotes +g a +\hideNotes +b +\unHideNotes +c +@end lilypond + +Los objetos de notación que están anclados a notas invisibles, son a +pesar de ello visibles. + +@lilypond[verbatim,quote,relative=2] +c4( d) +\hideNotes +e4(\p f)-- +@end lilypond + + +@predefined +@code{\hideNotes}, +@code{\unHideNotes}. +@endpredefined + + +@seealso +Manual de aprendizaje: +@rlearning{Visibilidad y color de los objetos}. + +Notation Reference: +@ref{Silencios invisibles}, +@ref{Visibilidad de los objetos}, +@ref{Ocultar pentagramas}. + +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{Note_spacing_engraver}, +@rinternals{NoteSpacing}. + + +@node Colorear objetos +@unnumberedsubsubsec Colorear objetos +@translationof Coloring objects + +@cindex coloreados, objetos +@cindex colores +@cindex colorear objetos +@cindex objetos, colorear +@cindex coloreadas, notas +@cindex colorear notas +@cindex notas coloreadas +@cindex x11, color de +@cindex x11-color +@cindex colores de x11 +@cindex with-color + +@funindex color +@funindex \with-color +@funindex with-color +@funindex x11-color + +Se pueden asignar colores a los objetos individuales. Los nombres de +color válidos se encuentran relacionados en la @ref{Lista de colores}. + +@lilypond[verbatim,quote,relative=2] +\override NoteHead #'color = #red +c4 c +\override NoteHead #'color = #(x11-color 'LimeGreen) +d +\override Stem #'color = #blue +e +@end lilypond + + +Se puede acceder al espectro completo de colores definido para X11 +usando la función de Scheme x11-color. Esta función acepta un único +argumento; éste puede ser un símbolo de la forma @code{@var{'FulanoMengano}} +o una cadena de la forma @code{"@var{FulanoMengano}"}. La primera forma es +más rápida de escribir y también más eficiente. Sin embargo, al usar +la segunda forma es posible acceder a los colores de X11 por medio de +la forma del nombre que tiene varias palabras. + +Si @code{x11-color} no entiende el parámetro, el color predeterminado +que se devuelve es el negro. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +gis8 a +\override Beam #'color = #(x11-color "medium turquoise") +gis a +\override Accidental #'color = #(x11-color 'DarkRed) +gis a +\override NoteHead #'color = #(x11-color "LimeGreen") +gis a +% this is deliberate nonsense; note that the stems remain black +\override Stem #'color = #(x11-color 'Boggle) +b2 cis +@end lilypond + +@cindex rgb-color +@cindex color rgb +@cindex rgb, color + +@funindex rgb-color + +Se pueden especificar colores RGB exactos utilizando la función de +Scheme @code{rgb-color}. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +\override Stem #'color = #(rgb-color 0 0 0) +gis8 a +\override Stem #'color = #(rgb-color 1 1 1) +gis8 a +\override Stem #'color = #(rgb-color 0 0 0.5) +gis4 a +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Lista de colores}, +@ref{La instrucción tweak}. + +Fragmentos de código: +@rlsr{Editorial annotations}. + + +@cindex x11, color de +@cindex coloreadas, notas de acorde +@cindex notas coloreadas en acordes +@cindex color en acordes + +@funindex x11-color + +@knownissues +Un color de X11 no es necesariamente de la misma tonalidad exacta que +un color normal de nombre similar. + +No todos los colores de X11 se distinguen entre sí en un navegador +web, es decir, un navegador de web podría no mostrar ninguna +diferencia entre @code{'LimeGreen} (verde lima) y @code{'ForestGreen} +(verde bosque). Para la web se recomiendan los colores normales (o +sea: @code{#blue}, azul, @code{#green}, verde, @code{#red}, rojo). + +Las notas de un acorde no se pueden colorear con @code{\override}; en +su lugar utilice @code{\tweak}. Consulte @ref{La instrucción tweak} para +ver más detalles. + + +@node Paréntesis +@unnumberedsubsubsec Paréntesis +@translationof Parentheses + +@cindex fantasma, notas +@cindex notas fantasma +@cindex notas entre paréntesis +@cindex paréntesis + +@funindex \parenthesize +@funindex parenthesize + +Los objetos se pueden encerrar entre paréntesis anteponiendo +@code{\parenthesize} al evento musical. Si se aplica a un acorde, +encierra cada nota dentro de un par de paréntesis. También se pueden +poner entre paréntesis las notas individuales de un acorde. + +@lilypond[verbatim,quote,relative=2] +c2 \parenthesize d +c2 \parenthesize +c2 +@end lilypond + +Los objetos que no son notas también se pueden poner entre paréntesis. +Para las articulaciones se necesita un guión antes de la instrucción +@code{\parenthesize}. + +@lilypond[verbatim,quote,relative=2] +c2-\parenthesize -. d +c2 \parenthesize r +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{Parenthesis_engraver}, +@rinternals{ParenthesesItem}, +@rinternals{parentheses-interface}. + +@knownissues + +Al poner un acorde entre paréntesis, se encierra cada una de las notas +individuales entre paréntesis, en vez de un solo paréntesis grande +rodeando al acorde completo. + + +@node Plicas +@unnumberedsubsubsec Plicas +@translationof Stems + +@cindex plica +@cindex plica invisible +@cindex invisible, plica +@cindex plica, dirección +@cindex plica arriba +@cindex plica abajo +@cindex plica neutral + +@funindex \stemUp +@funindex stemUp +@funindex \stemDown +@funindex stemDown +@funindex \stemNeutral +@funindex stemNeutral + +Cuando se encuentra con una nota, se crea automáticamente un objeto +@code{Stem} (plica). Para las redondas y los silencios, también se +crean pero se hacen invisibles. + +Se puede hacer manualmente que las plicas apunten hacia arriba o hacia +abajo; véase @ref{Dirección y posición}. + +@predefined +@code{\stemUp}, +@code{\stemDown}, +@code{\stemNeutral}. +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{default-direction-of-stems-on-the-center-line-of-the-staff.ly} + + +@seealso +Referencia de la notación: +@ref{Dirección y posición}. + +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{Stem_engraver}, +@rinternals{Stem}, +@rinternals{stem-interface}. + + +@node Fuera del pentagrama +@subsection Fuera del pentagrama +@translationof Outside the staff + +Esta sección trata sobre cómo enfatizar elementos que están dentro del +pentagrama, desde fuera del pentagrama. + +@menu +* Globos de ayuda:: +* Líneas de rejilla:: +* Corchetes de análisis:: +@end menu + +@node Globos de ayuda +@unnumberedsubsubsec Globos de ayuda +@translationof Balloon help + +@cindex globo +@cindex notación, explicación de +@cindex globo de ayuda +@cindex ayuda, globos de + +@funindex \balloonGrobText +@funindex \balloonText +@funindex Balloon_engraver +@funindex balloonGrobText +@funindex balloonText +@funindex \balloonLengthOn +@funindex balloonLengthOn +@funindex \balloonLengthOff +@funindex balloonLengthOff + +Los elementos de notación se pueden marcar y nombrar con la ayuda de +un cartel o globo de ayuda rectangular. El propósito principal de +esta funcionalidad es la explicación de la notación. + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonGrobText #'Stem #'(3 . 4) \markup { "Soy una plica" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "Soy un silencio" } + r + 2. +} +@end lilypond + +Existen dos funciones musicales, @code{balloonGrobText} y +@code{balloonText}; el primero se usa como @code{\once\override} para +adjuntar un texto a cualquier grob, y el último se usa como +@code{\tweak}, normalmente dentro de acordes, para adjuntar un texto a +una nota individual. + +Los textos de globo normalmente influyen en el espaciado de las notas, +pero esto puede cambiarse: + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonLengthOff + \balloonGrobText #'Stem #'(3 . 4) \markup { "Soy una plica" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "Soy un silencio" } + r + \balloonLengthOn + 2. +} +@end lilypond + + +@predefined +@code{\balloonLengthOn}, +@code{\balloonLengthOff}. +@endpredefined + + +@seealso +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{Balloon_engraver}, +@rinternals{BalloonTextItem}, +@rinternals{balloon-interface}. + + +@node Líneas de rejilla +@unnumberedsubsubsec Líneas de rejilla +@translationof Grid lines + +@cindex rejilla, líneas de +@cindex líneas de rejilla +@cindex vertical, línea, entre pentagramas +@cindex línea vertical entre pentagramas + +@funindex Grid_point_engraver +@funindex Grid_line_span_engraver +@funindex gridInterval + +Se pueden dibujar líneas verticales entre los pentagramas +sincronizadas con las notas. + +Se debe usar el grabador @code{Grid_point_engraver} para crear los +puntos extremos de las líneas, mientras que el grabador +@code{Grid_line_span_engraver} se debe utilizar para trazar +efectivamente las líneas. De forma predeterminada, esto centra las +líneas de rejilla horizontalmente debajo y al lado izquierdo de la +cabeza de las notas. Las líneas de rejilla se extienden a partir de +línea media de los pentagramas. El intervalo @code{gridInterval} debe +especificar la duración entre las líneas de rejilla. + +@lilypond[verbatim,quote] +\layout { + \context { + \Staff + \consists "Grid_point_engraver" + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + } +} + +\score { + \new ChoirStaff << + \new Staff \relative c'' { + \stemUp + c4. d8 e8 f g4 + } + \new Staff \relative c { + \clef bass + \stemDown + c4 g' f e + } + >> +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{grid-lines--changing-their-appearance.ly} + + +@seealso +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{Grid_line_span_engraver}, +@rinternals{Grid_point_engraver}, +@rinternals{GridLine}, +@rinternals{GridPoint}, +@rinternals{grid-line-interface}, +@rinternals{grid-point-interface}. + + +@node Corchetes de análisis +@unnumberedsubsubsec Corchetes de análisis +@translationof Analysis brackets + +@cindex corchetes +@cindex fraseo, corchetes de +@cindex corchetes de fraseo +@cindex musicológico, análisis +@cindex análisis musicológico +@cindex notas, corchetes de agrupación de +@cindex horizontal, corchete +@cindex corchete horizontal + +@funindex Horizontal_bracket_engraver +@funindex \startGroup +@funindex startGroup +@funindex \stopGroup +@funindex stopGroup + +Los corchetes se usan en análisis musical para indicar la estructura +de las piezas musicales. Están contemplados los corchetes +horizontales simples. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c2\startGroup + d\stopGroup +} +@end lilypond + +Los corchetes de análisis se pueden anidar. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c4\startGroup\startGroup + d4\stopGroup + e4\startGroup + d4\stopGroup\stopGroup +} +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Editorial annotations}. + +Referencia de funcionamiento interno: +@rinternals{Horizontal_bracket_engraver}, +@rinternals{HorizontalBracket}, +@rinternals{horizontal-bracket-interface}, +@rinternals{Staff}. diff --git a/Documentation/es/notation/expressive.itely b/Documentation/es/notation/expressive.itely new file mode 100644 index 0000000000..b9a8c47ed8 --- /dev/null +++ b/Documentation/es/notation/expressive.itely @@ -0,0 +1,1368 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 33903a90b916b4c42d767aa0feb800de1c3d8dbe + + 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 Expresiones +@section Expresiones +@translationof Expressive marks + +@lilypondfile[quote]{expressive-headword.ly} + +Esta sección relaciona diversas marcas de expresión que se pueden +crear en un a partitura. + +@menu +* Expresiones adosadas a las notas:: +* Expresiones como curvas:: +* Expresiones como líneas:: +@end menu + + +@node Expresiones adosadas a las notas +@subsection Expresiones adosadas a las notas +@translationof Expressive marks attached to notes + +Esta sección explica cómo crear marcas expresivas que están aplicadas +a notas: articulaciones, ornamentos y matices. También se tratan los +métodos para crear las nuevas marcas dinámicas. + +@menu +* Articulaciones y ornamentos:: +* Matices dinámicos:: +* Indicaciones dinámicas contemporáneas:: +@end menu + +@node Articulaciones y ornamentos +@unnumberedsubsubsec Articulaciones y ornamentos +@translationof Articulations and ornamentations + +@cindex articulaciones +@cindex ornamentación +@cindex guiones +@cindex ornamentos +@cindex espressivo +@cindex calderón +@cindex arco arriba +@cindex arco abajo +@cindex indicaciones de pedal +@cindex indicaciones de pedalero de órgano +@cindex pedal de órgano +@cindex grupeto +@cindex mordente circular +@cindex nota abierta +@cindex nota tapada +@cindex flageolet +@cindex mordente circular, inverso +@cindex trino +@cindex semitrino +@cindex mordente +@cindex prallprall +@cindex prallmordent +@cindex semitrino ascendente +@cindex semitrino descendente +@cindex mordente ascendente +@cindex mordente descendente +@cindex indicación de pulgar +@cindex segno +@cindex coda +@cindex varcoda + +@funindex \accent +@funindex \marcato +@funindex \staccatissimo +@funindex \espressivo +@funindex \staccato +@funindex \tenuto +@funindex \portato +@funindex \upbow +@funindex \downbow +@funindex \flageolet +@funindex \thumb +@funindex \lheel +@funindex \rheel +@funindex \ltoe +@funindex \rtoe +@funindex \open +@funindex \halfopen +@funindex \stopped +@funindex \snappizzicato +@funindex \turn +@funindex \reverseturn +@funindex \trill +@funindex \prall +@funindex \mordent +@funindex \prallprall +@funindex \prallmordent +@funindex \upprall +@funindex \downprall +@funindex \upmordent +@funindex \downmordent +@funindex \pralldown +@funindex \prallup +@funindex \lineprall +@funindex \signumcongruentiae +@funindex \shortfermata +@funindex \fermata +@funindex \longfermata +@funindex \verylongfermata +@funindex \fermataMarkup +@funindex \segno +@funindex \coda +@funindex \varcoda + + +@funindex - + +Se pueden adjuntar a las notas un amplio abanico de símbolos para +denotar articulaciones, adornos y otras indicaciones de ejecución, +utilizando la sintaxis siguiente: + +@example +@var{nota}\@var{nombre} +@end example + +La lista de los posibles valores de @code{@var{nombre}} está en +@ref{Lista de articulaciones}. Por ejemplo: + +@lilypond[verbatim,quote,relative=2] +c4\staccato c\mordent b2\turn +c1\fermata +@end lilypond + +@cindex marcato +@cindex tenuto +@cindex staccatissimo +@cindex acento +@cindex picado +@cindex staccato +@cindex portato + + +Algunas de estas articulaciones tienen abreviaturas que facilitan su +escritura. Las abreviaturas se escriben detrás del nombre de la nota, +y su sintaxis consiste en un guión @code{-} seguido de un símbolo que +especifica la articulación. Existen abreviaturas predefinidas para el +@notation{marcato}, @notation{stopped} (nota apagada), +@notation{tenuto}, @notation{staccatissimo}, @notation{accent} +(acento), @notation{staccato} (picado), y @notation{portato}. La +salida correspondiente a estas articulaciones aparece de la siguiente +manera: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +Las reglas para la colocación predeterminada de las articulaciones se +encuentran definidas en el archivo @file{scm/script.scm}. Las +articulaciones y ornamentos se pueden colocar manualmente por encima o +por debajo del pentagrama; véase @ref{Dirección y posición}. + +Las articulaciones son objetos @code{Script}. Sus propiedades se +describen de forma más completa en @rinternals{Script}. + +Las articulaciones se pueden adjuntar a los silencios así como a +las notas, pero no se pueden adjuntar a silencions multicompás. +Está disponible una instrucción predefinida especial, +@code{\fermataMarkup}, para adosar un calderón a un silencio +multicompás (y sólo a un silencio multicompás). La instrucción +crea un objeto @code{MultiMeasureRestText}. + +@lilypond[verbatim,quote,relative=2] +\override Script #'color = #red +\override MultiMeasureRestText #'color = #blue +a2\fermata r\fermata +R1\fermataMarkup +@end lilypond + +Además de articulaciones, se pueden adjuntar textos y elementos de +marcado a las notas. Véase @ref{Guiones de texto}. + +Para ver más información acerca de la ordenación de los elementos +Script y TextScript que se adjuntan a las notas, consulte +@rlearning{Colocación de los objetos}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{modifying-default-values-for-articulation-shorthand-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-vertical-ordering-of-scripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-a-delayed-turn.ly} + +@seealso +Glosario musical: +@rglos{tenuto}, +@rglos{accent}, +@rglos{staccato}, +@rglos{portato}. + +Manual de aprendizaje: +@rlearning{Colocación de los objetos}. + +Referencia de la notación: +@ref{Guiones de texto}, +@ref{Dirección y posición}, +@ref{Lista de articulaciones}, +@ref{Trinos}. + +Archivos instalados: +@file{scm/script.scm}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{Script}, +@rinternals{TextScript}. + + +@node Matices dinámicos +@unnumberedsubsubsec Matices dinámicos +@translationof Dynamics + +@cindex dinámica +@cindex matices absolutos +@cindex matices +@cindex absolutos, matices +@funindex \pppp +@funindex pppp +@funindex \ppp +@funindex ppp +@funindex \pp +@funindex pp +@funindex \p +@funindex p +@funindex \mp +@funindex mp +@funindex \mf +@funindex mf +@funindex \f +@funindex f +@funindex \ff +@funindex ff +@funindex \fff +@funindex fff +@funindex \ffff +@funindex ffff +@funindex \fffff +@funindex fffff +@funindex \fp +@funindex fp +@funindex \sf +@funindex sf +@funindex \sff +@funindex sff +@funindex \sp +@funindex sp +@funindex \spp +@funindex spp +@funindex \sfz +@funindex sfz +@funindex \rfz +@funindex rfz + +Las marcas dinámicas de matiz absoluto se especifican usando un +comando después de una nota: @code{c4\ff}. Las marcas dinámicas +disponibles son @code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, +@code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, +@code{\ffff}, @code{\fffff}, @code{\fp}, @code{\sf}, @code{\sff}, +@code{\sp}, @code{\spp}, @code{\sfz} y @code{\rfz}. Las indicaciones +dinámicas se pueden colocar manualmente por encima o por debajo del +pentagrama; para ver más detalles, consulte @ref{Dirección y +posición}. + +@lilypond[verbatim,quote,relative=2] +c2\ppp c\mp +c2\rfz c^\mf +c2_\spp c^\ff +@end lilypond + +@cindex regulador +@cindex crescendo +@cindex decrescendo +@cindex diminuendo + +@funindex \< +@funindex \> +@funindex \! +@funindex \cr +@funindex cr +@funindex \decr +@funindex decr + +Una indicación de @notation{crescendo} se comienza con @code{\<} y se +termina con @code{\!}, con un matiz absoluto o con otra indicación de +crescendo o de decrescendo. Una indicación de @notation{decrescendo} +comienza con @code{\>} y se termina también con @code{\!}, con un +matiz dinámico absoluto o con otra indicación de crescendo o de +decrescendo. Se pueden usar @code{\cr} y @code{\decr} en lugar de +@code{\<} y @code{\>}. De forma predeterminada, se tipografían +reguladores en ángulo cuando se utiliza esta notación. + +@lilypond[verbatim,quote,relative=2] +c2\< c\! +d2\< d\f +e2\< e\> +f2\> f\! +e2\> e\mp +d2\> d\> +c1\! +@end lilypond + +Un regulador terminado mediante @code{\!} finaliza en el borde +derecho de la nota que lleva el @code{\!} adosado. En el caso en +que esté terminado con el comienzo de otra indicación +@notation{crescendo} o @notation{decrescendo}, terminará en el +centro de la nota que tiene adosada la siguiente indicación +@code{\<} ó @code{\>}. El regulador siguiente empezará entonces +en el borde derecho de la misma nota en lugar del borde +izquierdo, como sería usual si hubiese terminado con @code{\!} +previamente. + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\< a | c4 a c\! a\< | c4 a c a\! +@end lilypond + +Los reguladores que terminan con indicaciones dinámicas absolutas +en lugar de con @code{\!} también se tipografían de manera +parecida. Sin embargo, la longitud de la propia indicación +dinámica puede alterar el punto en que finaliza el regulador +anterior. + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\mf a | c1\< | c4 a c\ffff a +@end lilypond + +@cindex varios matices sobre una nota +@cindex matices, varios sobre una nota +@cindex dinámica, varias indicaciones sobre una nota + +Se requieren silencios espaciadores para tipografiar varias +indicaciones dinámicas sobre una sola nota. Esto es útil +especialmente para añadir un @notation{crescendo} y un +@notation{decrescendo} a la misma nota: + +@lilypond[verbatim,quote,relative=2] +c4\< c\! d\> e\! +<< f1 { s4 s4\< s4\> s4\! } >> +@end lilypond + +@cindex espressivo, articulación + +@funindex \espressivo +@funindex espressivo + +Se puede usar la instrucción @code{\espressivo} para indicar un +crescendo y un decrescendo sobre la misma nota. Sin embargo, +advierta que esta indicación está implementada como una +articulación, no como una expresión dinámica. + +@lilypond[verbatim,quote,relative=2] +c2 b4 a +g1\espressivo +@end lilypond + +@funindex \cresc +@funindex cresc +@funindex \decresc +@funindex decresc +@funindex \dim +@funindex dim +Las indicaciones de crescendo textuales se inician con @code{\cresc}. +Los decrescendos textuales se inician con @code{\decresc} o con @code{\dim}. +Se trazan líneas extensoras cuando es necesario. + +@lilypond[verbatim,quote,relative=2] +g8\cresc a b c b c d e\mf | +f8\decresc e d c e\> d c b | +a1\dim ~ | +a2. r4\! | +@end lilypond + +@funindex \crescTextCresc +@funindex crescTextCresc +@funindex \dimTextDecresc +@funindex dimTextDecresc +@funindex \dimTextDecr +@funindex dimTextDecr +@funindex \dimTextDim +@funindex dimTextDim +@funindex \crescHairpin +@funindex crescHairpin +@funindex \dimHairpin +@funindex dimHairpin + +También pueden sustituirse los reguladores gráficos +por cambios de dinámica textuales: +@lilypond[verbatim,quote,relative=2] +\crescTextCresc +c4\< d e f\! | +\dimTextDecresc +g4\> e d c\! | +\dimTextDecr +e4\> d c b\! | +\dimTextDim +d4\> c b a\! | +\crescHairpin +\dimHairpin +c4\< d\! e\> d\! | +@end lilypond + + +Para crear nuevas indicaciones de matiz absoluto o de texto que deba +alinearse con los matices; véase @ref{Indicaciones dinámicas contemporáneas}. + +@cindex matices, posición vertical +@cindex dinámica, posición vertical +@cindex vertical, posición, de las indicaciones dinámicas +@funindex DynamicLineSpanner + +La colocación vertical de las indicaciones de dinámica se maneja por +parte de @rinternals{DynamicLineSpanner}. + +@funindex \dynamicUp +@funindex dynamicUp +@funindex \dynamicDown +@funindex dynamicDown +@funindex \dynamicNeutral +@funindex dynamicNeutral + +Está disponible un contexto @code{Dynamics} para tipografiar las +indicaciones de matiz dinámico en su propia línea horizontal. Utilice +silencios de separación para indicar los tiempos (las notas que están +dentro de un contexto @code{Dynamics} también ocupan tiempo musical, +pero no se imprimen). El contexto @code{Dynamics} puede contener +otros elementos como inscripciones textuales, objetos extensores de +texto e indicaciones de pedal de piano. + +@lilypond[verbatim,quote] +<< + \new Staff \relative c' { + c2 d4 e | + c4 e e,2 | + g'4 a g a | + c1 | + } + \new Dynamics { + s1\< | + s1\f | + s2\dim s2-"rit." | + s1\p | + } +>> +@end lilypond + +@predefined +@code{\dynamicUp}, +@code{\dynamicDown}, +@code{\dynamicNeutral}, +@code{\crescTextCresc}, +@code{\dimTextDim}, +@code{\dimTextDecr}, +@code{\dimTextDecresc}, +@code{\crescHairpin}, +@code{\dimHairpin}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-hairpin-behavior-at-bar-lines.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-minimum-length-of-hairpins.ly} + +@cindex al niente +@cindex niente, al + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-hairpins-using-al-niente-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligned-dynamics-and-textscripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{hiding-the-extender-line-for-text-dynamics.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-text-and-spanner-styles-for-text-dynamics.ly} + + +@seealso +Glosario musical: +@rglos{al niente}, +@rglos{crescendo}, +@rglos{decrescendo}, +@rglos{hairpin}. + +Manual de aprendizaje: +@rlearning{Articulaciones y matices dinámicos}. + +Referencia de la notación: +@ref{Dirección y posición}, +@ref{Indicaciones dinámicas contemporáneas}, +@ref{¿Qué sale por el MIDI?}, +@ref{Control de los matices en el MIDI}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{DynamicText}, +@rinternals{Hairpin}, +@rinternals{DynamicLineSpanner}, +@rinternals{Dynamics}. + + +@node Indicaciones dinámicas contemporáneas +@unnumberedsubsubsec Indicaciones dinámicas contemporáneas +@translationof New dynamic marks + +@cindex indicaciones dinámicas nuevas +@cindex dinámicas, indicaciones, nuevas + +La manera más fácil de crear indicaciones dinámicas es usar objetos de +marcado (@code{\markup}). + +@lilypond[verbatim,quote] +moltoF = \markup { molto \dynamic f } + +\relative c' { + 16_\moltoF + 2.. +} +@end lilypond + +@cindex dinámicas indicaciones editoriales +@cindex dinámicas, indicaciones entre paréntesis +@cindex editoriales, indicaciones dinámicas +@funindex \bracket +@funindex bracket +@funindex \dynamic +@funindex dynamic + +En el modo de marcado se pueden crear indicaciones dinámicas +editoriales (entre paréntesis o corchetes). La sintaxis del modo de +marcado se describe en @ref{Formatear el texto}. + +@lilypond[verbatim,quote] +roundF = \markup { + \center-align \concat { \bold { \italic ( } + \dynamic f \bold { \italic ) } } } +boxF = \markup { \bracket { \dynamic f } } +\relative c' { + c1_\roundF + c1_\boxF +} +@end lilypond + +@cindex make-dynamic-script +@funindex make-dynamic-script + +Las indicaciones dinámicas sencillas y centradas se crean fácilmente +con la función @code{make-dynamic-script}. + +@lilypond[verbatim,quote] +sfzp = #(make-dynamic-script "sfzp") +\relative c' { + c4 c c\sfzp c +} +@end lilypond + +En general @code{make-dynamic-script} toma cualquier objeto de marcado +como argumento. La fuente tipográfica de matices sólo contiene los +caracteres @code{f, m, p, r, s} y @code{z}, por lo que si se desea +obtener una indicación dinámica que incluya texto normal o signos de +puntuación, es necesario utilizar instrucciones de marcado que +devuelvan los ajustes de la familia de fuente tipográfica y su +codificación a las del texto normal, por ejemplo @code{\normal-text}. +El interés de la utilización de @code{make-dynamic-script} en lugar de +un elemento de marcado corriente está en asegurar la alineación +vertical de los objetos de marcado y reguladores que se aplican a la +misma cabeza de nota. + +@lilypond[verbatim,quote] +roundF = \markup { \center-align \concat { + \normal-text { \bold { \italic ( } } + \dynamic f + \normal-text { \bold { \italic ) } } } } +boxF = \markup { \bracket { \dynamic f } } +mfEspress = \markup { \center-align \line { + \hspace #3.7 mf \normal-text \italic espress. } } +roundFdynamic = #(make-dynamic-script roundF) +boxFdynamic = #(make-dynamic-script boxF) +mfEspressDynamic = #(make-dynamic-script mfEspress) +\relative c' { + c4_\roundFdynamic\< d e f + g,1~_\boxFdynamic\> + g1 + g'1~\mfEspressDynamic + g1 +} +@end lilypond + +Se puede utilizar en su lugar la forma Scheme del modo de marcado. Su +sintaxis se explica en @rextend{Construcción del marcado en Scheme}. + +@lilypond[verbatim,quote] +moltoF = #(make-dynamic-script + (markup #:normal-text "molto" + #:dynamic "f")) +\relative c' { + 16 + 2..\moltoF +} +@end lilypond + +Los ajustes para las fuentes tipográficas en el modo de marcado se +describen en @ref{Seleccionar la tipografía y su tamaño}. + + +@seealso +Referencia de la notación: +@ref{Formatear el texto}, +@ref{Seleccionar la tipografía y su tamaño}, +@ref{¿Qué sale por el MIDI?}, +@ref{Control de los matices en el MIDI}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Extender LilyPond: +@rextend{Construcción del marcado en Scheme}. + +@node Expresiones como curvas +@subsection Expresiones como curvas +@translationof Expressive marks as curves + +Esta sección explica cómo crear varias marcas expresivas de forma +curva: ligaduras de expresión y de fraseo, respiraciones, caídas y +elevaciones de tono. + +@menu +* Ligaduras de expresión:: +* Ligaduras de fraseo:: +* Marcas de respiración:: +* Caídas y elevaciones:: +@end menu + +@node Ligaduras de expresión +@unnumberedsubsubsec Ligaduras de expresión +@translationof Slurs + +@cindex ligaduras de expresión + +Las @notation{Ligaduras de expresión} se introducen utilizando paréntesis: + +@warning{En música polifónica, las ligaduras de expresión deben +terminar en la misma voz en la que empiezan.} + +@lilypond[verbatim,quote,relative=2] +f4( g a) a8 b( +a4 g2 f4) +2( 2) +@end lilypond + +@cindex ligaduras de expresión, posicionamiento manual +@cindex ligaduras de expresión, debajo de las notas +@cindex ligaduras de expresión, encima de las notas +@funindex \slurDown +@funindex slurDown +@funindex \slurNeutral +@funindex slurNeutral + +Las ligaduras de expresión se pueden colocar manualmente por encima o +por debajo de las notas; véase @ref{Dirección y posición}. + +@cindex fraseo, ligadura de +@cindex varias ligaduras de expresión +@cindex simultáneas, ligaduras de expresión +@cindex ligadura de fraseo +@cindex ligaduras de expresión, varias +@cindex ligaduras de expresión simultáneas + +No están permitidas las ligaduras de expresión simultáneas o +solapadas, pero una ligadura de fraseo se puede solapar con una +ligadura de expresión. Esto hace posible imprimir dos ligaduras +distintas al mismo tiempo. Para ver más detalles, consulte +@ref{Ligaduras de fraseo}. + +@cindex ligadura de expresión, estilo +@cindex ligadura continua +@cindex ligadura de puntos +@cindex ligadura discontinua +@cindex continua, ligadura +@cindex discontinua, ligadura +@cindex puntos, ligadura de +@cindex estilo de la ligadura + +@funindex \slurDashed +@funindex slurDashed +@funindex \slurDotted +@funindex slurDotted +@funindex \slurSolid +@funindex slurSolid + +Las ligaduras de expresión pueden ser continuas, discontinuas o de +puntos. El estilo predeterminado de las ligaduras de expresión es el +continuo: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashed +g4( e c2) +\slurDotted +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@cindex ligadura de expresión, mitad continua y mitad discontinua + +@funindex \slurHalfDashed +@funindex slurHalfDashed +@funindex \slurHalfSolid +@funindex slurHalfSolid + +También se puede hacer que las ligaduras de expresión sean +semi-discontinuas (la primera mitad discontinua y la segunda mitad +continua) o semi-continuas (la primera mitad continua y la segunda +discontinua): + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurHalfDashed +g4( e c2) +\slurHalfSolid +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@cindex ligadura de expresión, definir patrones de discontinuidad + +@funindex \slurDashPattern +@funindex slurDashPattern + +Se pueden definir patrones de discontinuidad para las ligaduras de +expresión: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashPattern #0.7 #0.75 +g4( e c2) +\slurDashPattern #0.5 #2.0 +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + + +@funindex \slurUp +@funindex slurUp + + +@predefined +@code{\slurUp}, +@code{\slurDown}, +@code{\slurNeutral}, +@code{\slurDashed}, +@code{\slurDotted}, +@code{\slurHalfDashed}, +@code{\slurHalfSolid}, +@code{\slurDashPattern}, +@code{\slurSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-double-slurs-for-legato-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-text-markups-inside-slurs.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-slurs-with-complex-dash-structure.ly} + + +@seealso +Glosario musical: +@rglos{slur}. + +Manual de aprendizaje: +@rlearning{Acerca de la no anidabilidad de llaves y ligaduras}. + +Referencia de la notación: +@ref{Dirección y posición}, +@ref{Ligaduras de fraseo}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{Slur}. + + +@node Ligaduras de fraseo +@unnumberedsubsubsec Ligaduras de fraseo +@translationof Phrasing slurs + +@cindex ligaduras de fraseo +@cindex marcas de fraseo +@cindex fraseo, ligaduras de +@cindex fraseo, marcas de +@funindex \( +@funindex \) + +Las @notation{ligaduras de fraseo} (o marcas de fraseo) que indican +una frase musical se escriben usando las instrucciones @code{\(} y +@code{\)} respectivamente: + +@lilypond[verbatim,quote,relative=2] +c4\( d( e) f( +e2) d\) +@end lilypond + +@funindex \phrasingSlurUp +@funindex phrasingSlurUp +@funindex \phrasingSlurDown +@funindex phrasingSlurDown +@funindex \phrasingSlurNeutral +@funindex phrasingSlurNeutral + +Tipográficamente, la ligadura de fraseo se comporta casi exactamente +igual que una ligadura de expresión normal. Sin embargo, se tratan +como objetos diferentes. Una @code{\slurUp} no tendrá ningún efecto +sobre una ligadura de fraseo. El fraseo se puede situar manualmente +por encima o por debajo de las notas; véase @ref{Dirección y posición}. + +@cindex simultáneas, ligaduras de fraseo +@cindex varias ligaduras de fraseo +@cindex ligaduras de fraseo simultáneas +@cindex ligaduras de fraseo, varias +@cindex fraseo, ligaduras de, simultáneas +@cindex fraseo, ligaduras de, varias + +No se pueden tener varias ligaduras de fraseo simultáneas o solapadas. + +@cindex fraseo, ligaduras de, discontinuas +@cindex discontinuas, ligaduras de fraseo +@cindex fraseo, ligaduras de, punteadas +@cindex punteadas, ligaduras de fraseo +@cindex ligaduras de fraseo discontinuas +@cindex ligaduras de fraseo punteadas + +@funindex phrasingSlurDashed +@funindex \phrasingSlurDashed +@funindex \phrasingSlurDotted +@funindex phrasingSlurDotted +@funindex \phrasingSlurSolid +@funindex phrasingSlurSolid + +Las ligaduras de fraseo pueden ser continuas, de puntos o de rayas. +El estilo predeterminado para las ligaduras de fraseo es el continuo: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashed +g4\( e c2\) +\phrasingSlurDotted +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@cindex fraseo, ligadura de, mitad continua y mitad discontinua +@cindex ligadura de fraseo mitad continua y mitad discontinua + +@funindex phrasingSlurHalfDashed +@funindex \phrasingSlurHalfDashed +@funindex \phrasingSlurHalfSolid +@funindex phrasingSlurHalfSolid + +Se puede hacer también que las ligaduras de fraseo sean +semi-discontinuas (la primera mitad discontinua y la segunda mitad +continua) o semi-continuas (la primera mitad continua y la segunda +mitad discontinua): + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurHalfDashed +g4\( e c2\) +\phrasingSlurHalfSolid +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@cindex fraseo, ligadura de, definir patrones de discontinuidad +@cindex ligadura de fraseo, definir patrones de discontinuidad + +@funindex \phrasingSlurDashPattern +@funindex phrasingSlurDashPattern + +Se pueden definir patrones de discontinuidad para las ligaduras de +fraseo: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashPattern #0.7 #0.75 +g4\( e c2\) +\phrasingSlurDashPattern #0.5 #2.0 +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +Las definiciones de patrones de discontinuidad tienen la misma +estructura que las definiciones de patrones de discontinuidad de las +ligaduras de expresión. Para ver más información acerca de patrones +de discontinuidad complejos, consulte los fragmentos de código bajo +@ref{Ligaduras de expresión}. + +@predefined +@code{\phrasingSlurUp}, +@code{\phrasingSlurDown}, +@code{\phrasingSlurNeutral}, +@code{\phrasingSlurDashed}, +@code{\phrasingSlurDotted}, +@code{\phrasingSlurHalfDashed}, +@code{\phrasingSlurHalfSolid}, +@code{\phrasingSlurDashPattern}, +@code{\phrasingSlurSolid}. +@endpredefined + + +@seealso +Manual de aprendizaje: +@rlearning{Acerca de la no anidabilidad de llaves y ligaduras}. + +Referencia de la notación: +@ref{Dirección y posición}, +@ref{Ligaduras de expresión}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{PhrasingSlur}. + + +@node Marcas de respiración +@unnumberedsubsubsec Marcas de respiración +@translationof Breath marks + +@cindex respiraciones +@cindex pausa, marcas de +@funindex \breathe +@funindex breathe + +Las respiraciones se introducen utilizando @code{\breathe}: + +@lilypond[verbatim,quote,relative=2] +c2. \breathe d4 +@end lilypond + +Las marcas de respiración dan por terminadas las barras automáticas; +para sobreescribir este comportamiento, consulte @ref{Barras manuales}. + +@lilypond[verbatim,quote,relative=2] +c8 \breathe d e f g2 +@end lilypond + +Están contemplados los indicadores musicales para las marcas de +respiración en la notación antigua, o divisiones. Para ver más +detalles, consulte @ref{Divisiones}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-breath-mark-symbol.ly} + +@cindex caesura + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{inserting-a-caesura.ly} + + +@seealso +Glosario musical: +@rglos{caesura}. + +Referencia de la notación: +@ref{Divisiones}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{BreathingEvent}, +@rinternals{BreathingSign}, +@rinternals{Breathing_sign_engraver}. + +@node Caídas y elevaciones +@unnumberedsubsubsec Caídas y elevaciones +@translationof Falls and doits + +@cindex falls (caídas de tono) +@cindex doits (elevaciones de tono) +@cindex caídas de tono (falls) +@cindex elevaciones de tono (doits) +@funindex \bendAfter +@funindex bendAfter + +Se pueden expresar @notation{caídas} y @notation{subidas} de tono +(falls y doits) añadidas a las notas mediante la instrucción +@code{\bendAfter}. La dirección de la caída o elevación se indica con +un signo más o menos (arriba o abajo). El número indica el intervalo +de alturas sobre el que se extiende la caída o elevación +@emph{partiendo de} la nota principal. + +@lilypond[verbatim,quote,relative=2] +c2-\bendAfter #+4 +c2-\bendAfter #-4 +c2-\bendAfter #+6.5 +c2-\bendAfter #-6.5 +c2-\bendAfter #+8 +c2-\bendAfter #-8 +@end lilypond + +El guión @code{-} que sigue al nombre de la nota es @emph{necesario} +al escribir caídas y elevaciones. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adjusting-the-shape-of-falls-and-doits.ly} + + +@seealso +Glosario musical: +@rglos{fall}, +@rglos{doit}. + +Fragmentos de código: +@rlsr{Expressive marks}. + + +@node Expresiones como líneas +@subsection Expresiones como líneas +@translationof Expressive marks as lines + +Esta sección explica cómo crear diversas marcas de expresión que +siguen un camino lineal: glissandi, arpegios y trinos. + +@menu +* Glissando:: +* Arpegio:: +* Trinos:: +@end menu + +@node Glissando +@unnumberedsubsubsec Glissando +@translationof Glissando + +@cindex glissando +@funindex \glissando +@funindex glissando + +Se crea un @notation{glissando} adjuntando @code{\glissando} a la +nota: + +@lilypond[verbatim,quote,relative=2] +g2\glissando g' +c2\glissando c, +@end lilypond + +Se pueden crear distintos tipos de glissando. Para ver más detalles, +consulte @ref{Estilos de línea}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{contemporary-glissando.ly} + + +@seealso +Glosario musical: +@rglos{glissando}. + +Referencia de la notación: +@ref{Estilos de línea}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{Glissando}. + + +@knownissues + +La impresión de texto sobre la línea (como @notation{gliss.}) no está +contemplada. + + +@node Arpegio +@unnumberedsubsubsec Arpegio +@translationof Arpeggio + +@cindex arpegio +@cindex acorde quebrado +@cindex acorde arpegiado +@cindex quebrado, acorde +@funindex \arpeggio +@funindex arpeggio +@funindex \arpeggioArrowUp +@funindex arpeggioArrowUp +@funindex \arpeggioArrowDown +@funindex arpeggioArrowDown +@funindex \arpeggioNormal +@funindex arpeggioNormal + +Un signo de @notation{acorde arpegiado} (conocido también como acorde +quebrado) sobre un acorde, se denota adjuntando @code{\arpeggio} al +acorde: + +@lilypond[verbatim,quote,relative=1] +1\arpeggio +@end lilypond + +Se pueden escribir distintos tipos de acordes arpegiados. +@code{\arpeggioNormal} produce la vuelta al arpegio normal: + +@lilypond[verbatim,quote,relative=1] +2\arpeggio + +\arpeggioArrowUp +2\arpeggio + +\arpeggioArrowDown +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +@cindex arpegiado, acorde, símbolos especiales +@cindex especial, símbolos de arpegio + +@funindex \arpeggioBracket +@funindex arpeggioBracket +@funindex \arpeggioParenthesis +@funindex arpeggioParenthesis +@funindex \arpeggioParenthesisDashed +@funindex arpeggioParenthesisDashed + +Se pueden crear símbolos especiales de arpegio @emph{con corchete}: + +@lilypond[verbatim,quote,relative=1] +2 + +\arpeggioBracket +2\arpeggio + +\arpeggioParenthesis +2\arpeggio + +\arpeggioParenthesisDashed +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +Las propiedades de discontinuidad del paréntesis del arpegio se +controlan mediante la propiedad @code{'dash-details}, que se describe +en @ref{Ligaduras de expresión}. + +Los acordes arpegiados se pueden desarrollar explícitamente utilizando +@notation{ligaduras de unión}. Véase @ref{Ligaduras de unión}. + +@predefined +@code{\arpeggio}, +@code{\arpeggioArrowUp}, +@code{\arpeggioArrowDown}, +@code{\arpeggioNormal}, +@code{\arpeggioBracket}, +@code{\arpeggioParenthesis} +@code{\arpeggioParenthesisDashed}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-a-piano-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-other-contexts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-arpeggios-across-notes-in-different-voices.ly} + + +@seealso +Glosario musical: +@rglos{arpeggio}. + +Referencia de la notación: +@ref{Ligaduras de expresión}, +@ref{Ligaduras de unión}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{Arpeggio}, +@rinternals{Slur}, +@rinternals{PianoStaff}. + + +@knownissues + +@cindex pentagrama cruzado, arpegios con paréntesis +@cindex arpegio de pentagrama cruzado con paréntesis +@cindex arpegio con paréntesis de pentagrama cruzado + +No es posible mezclar arpegios conectados y no conectados en un +@code{PianoStaff} en el mismo instante de tiempo. + +El corchete de los arpegios de paréntesis no funciona para los +arpegios de pentagrama cruzado. + +@node Trinos +@unnumberedsubsubsec Trinos +@translationof Trills + +@cindex trinos +@funindex \trill +@funindex trill +@funindex \startTrillSpan +@funindex startTrillSpan +@funindex \stopTrillSpan +@funindex stopTrillSpan + +Los trinos cortos sin línea extensora se imprimen con +@code{\trill}; véase @ref{Articulaciones y ornamentos}. + +Los @notation{trinos} largos mantenidos, con línea de extensión, se +hacen con @code{\startTrillSpan} y @code{\stopTrillSpan}: + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +c2\stopTrillSpan +r2 +@end lilypond + +Un trino extendido que atraviesa un salto de línea +recomienza exactamente encima de la primera nota +de la nueva línea. + +@lilypond[ragged-right,verbatim,quote,relative=2] +d1\startTrillSpan +\break +d1 +c2\stopTrillSpan +r2 +@end lilypond + +Los trinos extendidos consecutivos funcionan sin necesidad de +instrucciones @code{\stopTrillSpan} explícitas, porque cada trino +se convertirá automáticamente en el borde derecho del trino anterior. + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +b1\startTrillSpan +d2\stopTrillSpan +r2 +@end lilypond + +También se pueden combinar los trinos con notas de adorno. +La sintaxis de esta construcción y el método para colocar +las notas de adorno con precisión están descritos en +@ref{Notas de adorno}. + +@lilypond[verbatim,quote,relative=2] +d1~\afterGrace +d1\startTrillSpan { c32[ d]\stopTrillSpan } +c2 r2 +@end lilypond + +@cindex trinos de nota explícita +@cindex explícita, trinos de nota +@funindex \pitchedTrill +@funindex pitchedTrill + +Los trinos que se tienen que ejecutar sobre notas auxiliares +explícitas se pueden tipografiar con la instrucción +@code{pitchedTrill}. El primer argumento es la nota principal, y el +segundo es la nota @emph{trinada}, que se imprime como una cabeza de +nota, sin plica y entre paréntesis. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +d2\startTrillSpan fis +d2 +c2\stopTrillSpan +r2 +@end lilypond + +@cindex trino con nota y alteración +@cindex alteración, trino con + +Es necesario añadir manualmente las alteraciones subsiguientes de +la misma nota dentro del mismo compás. Sólo se imprime la +alteración del primer trino con nota, dentro de un compás. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan cis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis! +eis4\stopTrillSpan +@end lilypond + + +@predefined +@code{\startTrillSpan}, +@code{\stopTrillSpan}. +@endpredefined + + +@seealso +Glosario musical: +@rglos{trill}. + +Referencia de la notación: +@ref{Articulaciones y ornamentos}, +@ref{Notas de adorno}. + +Fragmentos de código: +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{TrillSpanner}. diff --git a/Documentation/es/notation/fretted-strings.itely b/Documentation/es/notation/fretted-strings.itely new file mode 100644 index 0000000000..8e50dc7afc --- /dev/null +++ b/Documentation/es/notation/fretted-strings.itely @@ -0,0 +1,1971 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 5becf12f5ada67346f70ad8cfe68589466619305 + + 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 Instrumentos de cuerda con trastes +@section Instrumentos de cuerda con trastes +@translationof Fretted string instruments + +@lilypondfile[quote]{fretted-headword.ly} + +Esta sección trata varios aspectos de la notación musical que son +exclusivos de los instrumentos de cuerda con trastes. + +@cindex tablatura +@cindex guitarra, tablatura de +@cindex tablatura de banjo +@cindex banjo, tablatura de + +@menu +* Notación común para cuerdas con trastes:: +* Guitarra:: +* Banjo:: +@end menu + +@node Notación común para cuerdas con trastes +@subsection Notación común para cuerdas con trastes +@translationof Common notation for fretted strings + +Esta sección se ocupa de la notación común exclusiva de los +instrumentos de cuerda con trastes. + +@menu +* Referencias para cuerdas con trastes:: +* Indicación de los números de cuerda:: +* Tablaturas predeterminadas:: +* Tablaturas personalizadas:: +* Marcas de diagramas de trastes:: +* Diagramas predefinidos de trastes:: +* Diagramas de traste automáticos:: +* Digitaciones de la mano derecha:: +@end menu + +@node Referencias para cuerdas con trastes +@unnumberedsubsubsec Referencias para cuerdas con trastes +@translationof References for fretted strings + +La notación musical para instrumentos de cuerda con trastes se realiza +normalmente en una sola pauta, ya sea en notación musical tradicional +o en tablatura. A veces se combinan los dos tipos, y es común en +música popular utilizar diagramas de acordes por encima de un +pentagrama de notación tradicional. La guitarra y el banjo son +instrumentos transpositores, que suenan una octava por debajo de lo +escrito. Las partituras para estos instrumentos deben usar la clave +de Sol octava baja @code{"treble_8"} (o @code{\transposition c} para +obtener una salida MIDI correcta). Otros elementos relativos a los +instrumentos de cuerda con trastes se estudian en otras partes de +manual: + +@itemize +@item +Las digitaciones se indican como se explica en @ref{Indicaciones de +digitación}. + +@item +Las instrucciones para ligaduras @notation{Laissez vibrer} así como +ligaduras de unión sobre arpegios y trémolos están en +@ref{Ligaduras de unión}. + +@item +Las instrucciones para el manejo de varias voces se encuentran en +@ref{Resolución de las colisiones}. + +@item Las instrucciones para la indicación de armónicos está en +@ref{Armónicos}. + +@end itemize + + +@seealso +Referencia de la notación: +@ref{Indicaciones de digitación}, +@ref{Ligaduras de unión}, +@ref{Resolución de las colisiones}, +@ref{Nombres de instrumentos}, +@ref{Escribir música en paralelo}, +@ref{Arpegio}, +@ref{Lista de articulaciones}, +@ref{Clave}, +@ref{Transposición de los instrumentos}. + + +@node Indicación de los números de cuerda +@unnumberedsubsubsec Indicación de los números de cuerda +@translationof String number indications + +@cindex cuerda, número de la +@cindex números de cuerda frente a digitaciones +@cindex digitación frente a números de cuerda + +Se puede indicar la cuerda en que se debe tocar una nota añadiendo +@code{\}@tie{}@var{número} a una nota dentro de una construcción de +acorde (@code{<>}). + +@warning{Los números de cuerda @strong{se deben} definir dentro de una +construcción de acorde con ángulos simples, incluso si se trata de una +sola nota.} + +@lilypond[verbatim,quote,relative=0] +\clef "treble_8" +4 2 +1 +@end lilypond + +Cuando se usan al mismo tiempo digitaciones e indicaciones del número +de cuerda, su colocación se controla por el orden en que aparecen +estos elementos en el código: + +@lilypond[verbatim,quote,relative=1] +\clef "treble_8" +2 + +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + + +@seealso +Referencia de la notación: +@ref{Indicaciones de digitación}. + +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de funcionamiento interno: +@rinternals{StringNumber}, +@rinternals{Fingering}. + + +@node Tablaturas predeterminadas +@unnumberedsubsubsec Tablaturas predeterminadas +@translationof Default tablatures + +@cindex tablatura, principios básicos +@cindex tablatura predeterminada + +@funindex TabStaff +@funindex TabVoice + +La notación para instrumentos de cuerda pulsada se realiza con +frecuencia utilizando un sistema de dedos y cifras, o tablatura. A +diferencia de la notación tradicional, las notas no se designan +mediante figuras, sino mediante números (o símbolos semejantes a +letras en la intavolatura histórica). Las líneas de la tablatura +indican sobre qué cuerda se debe tocar la nota, y el número sobre +una línea indica el traste en que la cuerda correspondiente debe +pisarse. Las notas que se deben tocar simultáneamente se +alinean en sentido vertical. + +De forma predeterminada, la cuerda 1 es la más aguda y corresponde +a la línea superior de la pauta @code{TabStaff}. La afinación +predeterminada de las cuerdas del @code{TabStaff} es la afinación +estándar de guitarra (con 6 cuerdas). Las notas se imprimen +como tablatura, usando los contextos @code{TabStaff} +y @code{TabVoice}. Se añade automáticamente una clave caligráfica +de tablatura. + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff \relative c' { + a,8 a' a + d,8 a' a +} +@end lilypond + +Las tablaturas predeterminadas no contienen símbolos para la duración +de las notas ni ningún otro símbolo musical, como p.ej. indicaciones +expresivas. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c~ c2\! + c'2.\prall\) +} + +\score { + << + \new Staff { \clef "G_8" \symbols } + \new TabStaff { \symbols } + >> +} +@end lilypond + +@funindex \tabFullNotation + +Si queremos que todos los símbolos musicales que se usan en la +notación tradicional aparezcan también en la tablatura, tenemos que +aplicar la instrucción @code{\tabFullNotation} dentro de un contexto +@code{TabStaff}. Tenga en cuenta que, en la tablatura, las blancas +tienen doble plica para poder distinguirlas de las negras. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c~ c2\! + c'2.\prall\) +} + +\score { + \new TabStaff { + \tabFullNotation + \symbols + } +} +@end lilypond + +@cindex traste + +@funindex minimumFret + +De forma predeterminada, las notas se asignan a la posición más baja +del mástil (primera posición). Las cuerdas al aire se toman como +preferencia, automáticamente. Si queremos que una nota determinada se +toque sobre una cuerda concreta, podemos añadir una indicación de +número de cuerda al nombre de la nota. Si definimos los nombres de +nota y los números de cuerda sin una construcción de acorde +(@code{<>}), las indicaciones de número de cuerda no aparecerán en la +notación tradicional. Es mucho más cómodo definir la posición +utilizando el valor de @code{minimumFret}. El valor predeterminado de +es 0. + + +@lilypond[quote,ragged-right,verbatim] +\new StaffGroup << + \new Staff \relative c { + \clef "treble_8" + \time 2/4 + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + c,16 d e f g4 + } + \new TabStaff \relative c { + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + \set TabStaff.minimumFret = #5 + c,16 d e f g4 + } +>> +@end lilypond + +@funindex \tabChordRepetition + +Las construcciones de acorde se pueden repetir mediante el símbolo de +repetición de acordes @code{q}. Para utilizar esta posibilidad en +combinación con la tablatura, se proporciona +@code{\tabChordRepetition}, que preserva la información de cuerdas +dada explícitamente dentro de las construcciones de acorde, de forma +que los acordes repetidos den lugar a representaciones de tablatura +idénticas. + +@lilypond[quote,verbatim] +\tabChordRepetition + +guitar = \relative c' { + r8 ~ q4 q8~ q q4 +} + +\new StaffGroup << + \new Staff { + \clef "treble_8" + \override Voice.StringNumber #'transparent = ##t + \guitar + } + \new TabStaff { + \guitar + } +>> +@end lilypond + +Las ligaduras de unión que cruzan saltos de línea llevan paréntesis de +forma predeterminada. Lo mismo rige para la casilla de segunda vez de +una repetición. + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ + } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~ + \break + b1 + \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@funindex \hideSplitTiedTabNotes + +La instrucción @code{\hideSplitTiedTabNotes} cancela el comportamiento +de imprimir los números de traste entre paréntesis: + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~ + \break + b1 + \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \hideSplitTiedTabNotes + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@cindex armónicos en tablatura +@cindex tablatura y armónicos +@cindex deslizamientos en notación de tablatura +@cindex tablatura y deslizamientos +@cindex glissandos de acordes +@funindex \harmonic +@funindex \harmonicByFret +@funindex \harmonicByRatio +@funindex \chordGlissando + +Se pueden añadir indicaciones de armónicos a la notación de tablatura +como sus alturas de sonido: + +@lilypond[verbatim,quote] +firstHarmonic = { + 4 + 4 + 2 +} +\score { + << + \new Staff { \firstHarmonic } + \new TabStaff { \firstHarmonic } + >> +} +@end lilypond + +Observe que la instrucción @code{\harmonic} se debe situar siempre +dentro de una construcción de acorde. Sólo tiene sentido para +armónicos sobre una cuerda abierta en el duodécimo traste. Cualquier +otro armónico debe estar calculado por parte de LilyPond. Se puede +conseguir esto indicando el traste en que debe rozar la cuerda el dedo +de la mano que pisa. + + +@lilypond[verbatim,quote] +fretHarmonics = { + \harmonicByFret #5 d16\4 + \harmonicByFret #4 d16\4 + \harmonicByFret #3 d8\4 + \harmonicByFret #5 2. +} +\score { + << + \new Staff { \fretHarmonics } + \new TabStaff { \fretHarmonics } + >> +} +@end lilypond + +De forma alternativa, se pueden calcular los armónicos definiendo la +razón de las longitudes de cuerda por encima y por debajo de la +digitación de armónico. + +@lilypond[verbatim,quote] +ratioHarmonics = { + \harmonicByRatio #1/2 4 + \harmonicByRatio #1/3 4 + \harmonicByRatio #1/4 { g8\3 b8\2 e'4\1 } +} +\score { + << + \new Staff { \ratioHarmonics } + \new TabStaff { \ratioHarmonics } + >> +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{stem-and-beam-behavior-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{polyphony-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{open-string-harmonics-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fretted-string-harmonics-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{slides-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-glissando-in-tablature.ly} + + +@seealso +Referencia de la notación: +@ref{Plicas}, +@ref{Armónicods}, +@ref{Glissando}. + +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de funcionamiento interno: +@rinternals{TabNoteHead}, +@rinternals{TabStaff}, +@rinternals{TabVoice}, +@rinternals{Beam}. + + +@knownissues + +Los acordes no se tratan de una forma especial, y de aquí que el +selector automático de la cuerda puede elegir fácilmente la misma +cuerda para dos notas del acorde. + +Para manejar @code{\partcombine}, es necesario que @code{TabStaff} +utilice voces especialmente creadas: + +@lilypond[quote,ragged-right,verbatim] +melodia = \partcombine { e4 g g g } { e4 e e e } +<< + \new TabStaff << + \new TabVoice = "one" s1 + \new TabVoice = "two" s1 + \new TabVoice = "shared" s1 + \new TabVoice = "solo" s1 + { \melodia } + >> +>> +@end lilypond + +Los efectos especiales de guitarra se limitan a armónicos y @emph{slides}. + +@node Tablaturas personalizadas +@unnumberedsubsubsec Tablaturas personalizadas +@translationof Custom tablatures + +@cindex tablaturas personalizadas +@cindex tablatura de banjo +@cindex tablatura de mandolina +@cindex tablatura de guitarra +@cindex tablatura de bajo +@cindex tablatura de ukelele +@cindex tablatura de violin +@cindex tablatura de viola +@cindex tablatura de violoncello +@cindex tablatura de bajo +@cindex tablatura de contrabajo +@cindex tablatura, afinaciones predefinidas de +@cindex trastes, instrumentos con, afinaciones predefinidas +@cindex predefinidas, afinaciones, para instrumentos de traste + +@funindex StringTunings + +La tablatura en LilyPond calcula automáticamente el traste para cada +nota, basándose en la cuerda a que está asignada la nota. Para +hacerlo, es necesario especificar la afinación de las cuerdas. La +afinación de las cuerdas se da en la propiedad @code{stringTunings}. + +LilyPond trae afinaciones predefinidas para el banjo, la mandolina, la +guitarra, el bajo, el ukelele, el violín, la viola, el violoncello y +el contrabajo. LilyPond establece automáticamente la transposición +correcta para las afinaciones predefinidas. El ejemplo siguiente es +para bajo, que suena una octava por debajo de lo escrito. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \clef "bass_8" + \relative c, { + c4 d e f + } + } + \new TabStaff { + \set TabStaff.stringTunings = #bass-tuning + \relative c, { + c4 d e f + } + } +>> +@end lilypond + +La afinación por omisión es @code{guitar-tuning} (la afinación +estándar Mi-La-Re-Sol-Si-Mi). Otras afinaciones predefinidas son +@code{guitar-open-g-tuning} (Sol Mayor al aire, Re-Sol-Re-Sol-Si-Re), +@code{mandolin-tuning} (mandolina) y @code{banjo-open-g-tuning} (banjo +con Sol Mayor al aire). Las afinaciones predefinidas están en +@file{ly/string-tuning-init.ly}. + +@funindex contextStringTunings +@funindex \contextStringTunings +@cindex tablaturas, afinaciones personalizadas +@cindex personalizadas, afinaciones de cuerdas + +Es posible crear cualquier afinación de cuerdas que se desee. Se +puede usar la función @code{\contextStringTuning} para definir una +afinación de cuerdas y establecerla como el valor de +@code{stringTunings} para el contexto actual. +@code{\contextStringTuning} admite dos argumentos: el símbolo en que +se almacena la afinación de cuerdas y una construcción de acorde +que define la altura de las notas de cada cuerda al aire en dicha +afinación. La construcción de acorde debe estar en el modo de +octava absoluto, véase @ref{Escritura de octava absoluta}. +La cuerda con el número más alto (generalmente la más grave) +debe ir primero en el acorde. Por ejemplo, podemos definir una +afinación para un instrumento de cuatro cuerdas con las alturas +@code{a''}, @code{d''}, @code{g'} y @code{c'}: + +@lilypond[quote,verbatim] + +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \contextStringTuning #'custom-tuning + \mynotes + } +>> +@end lilypond + +La propiedad @code{stringTunings} también se utiliza por parte de +@code{FretBoards} para calcular los diagramas de posición automáticos. + +@funindex makeStringTuning +@funindex \makeStringTuning + +Las afinaciones de cuerdas se utilizan como parte de la clave de +asociación para los diagramas de posición predefinidos (véase +@ref{Diagramas predefinidos de trastes}). Se usa la función +@code{\makeStringTuning} para crear una afinación sin fijar el valor +de la propiedad @code{stringTunings} en el contexto actual. Los +argumentos de @code{\makeStringTuning} son el símbolo que usar para la +nueva afinación y una construcción de acorde que se usa para definir +la afinación. El ejemplo anterior también se podría haber escrito +como sigue: + +@lilypond[quote,verbatim] +\makeStringTuning #'custom-tuning + +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #custom-tuning + \mynotes + } +>> +@end lilypond + +Internamente, una afinación de las cuerdas es una lista de Scheme de +alturas, una por cada cuerda, ordenadas de 1 a N, donde la cuerda 1 +está arriba en la pauta de tablatura y la cuerda N está abajo. Esto +resulta generalmente en un orden de la nota más aguda a la más grave, +pero algunos instrumentos (p.ej. el ukelele) no tienen las cuerdas +dispuestas en orden de altura. + +La altura de una cuerda dentro de una lista de alturas de cuerdas es +un objeto altura de LilyPond. Los objetos altura se crean con la +función de Scheme @code{ly:make-pitch} (véase +@ref{Funciones de Scheme}). + +Se así se desea, puede crearse una afinación de cuerdas como un +literal de Scheme. El ejemplo de abajo recrea los ejemplos +anteriores, pero la afinación no se guarda como un objeto separado: + +@lilypond[quote,verbatim] +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #`(,(ly:make-pitch 1 5 0) + ,(ly:make-pitch 1 1 0) + ,(ly:make-pitch 0 4 0) + ,(ly:make-pitch 0 0 0)) + \mynotes + } +>> +@end lilypond + +LilyPond calcula automáticamente el número de líneas dentro del +@code{TabStaff} y el número de cuerdas dentro de un @code{FretBoard} +calculado automáticamente como el número de elementos de +@code{stringTunings}. + +@cindex moderntab, clave +@cindex clave moderntab +@cindex clave de tablatura +@cindex tablatura, clave de + +También se puede usar una clave moderna de tablatura. + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff { + \clef moderntab + 1 + \break + \clef tab + 1 +} +@end lilypond + +La clave moderna de tablatura contempla tablaturas de 4 a 7 cuerdas. + +@seealso +Referencia de la notación: +@ref{Escritura de octava absoluta}, +@ref{Diagramas predefinidos de trastes}, +@ref{Funciones de Scheme}. + +Archivos instalados: +@file{ly/string-tuning-init.ly} +@file{scm/tablature.scm}. + +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de funcionamiento interno: +@rinternals{Tab_note_heads_engraver}. + +@knownissues +Los cálculos de tablatura automáticos no funcionan bien en la mayoría +de los casos para instrumentos en que la afinación de las cuerdas no +varía de forma monótona con el número de cuerda, como el ukelele. + + +@node Marcas de diagramas de trastes +@unnumberedsubsubsec Marcas de diagramas de trastes +@translationof Fret diagram markups + +@cindex trastes, diagramas de +@cindex acordes, diagramas de +@cindex diagramas de trastes +@cindex diagramas de acordes para instrumentos de trastes +@cindex trastes, diagramas de, personalizados +@cindex personalizados, diagramas de trastes + +Se pueden añadir diagramas de trastes a la música como elementos de +marcado sobre la nota deseada. El marcado contiene información sobre +el diagrama de trastes deseado. Existen tres interfaces distintos de +marcado de diagramas de trastes: standard (estándar), terse (escueto) +y verbose (prolijo). Los tres interfaces producen marcados +equivalentes, pero tienen cantidades variables de información en la +cadena de marcado. Hay más detalles sobre la sintaxis de las distintos +cadenas de marcado que se usan para definir diagramas de posiciones en +@ref{Instrument Specific Markup}. + +La cadena de marcado de los diagramas estándar de trastes indica el +número de la cuerda y el número de traste en que se coloca cada uno de +los puntos sobre la cuerda. Además se pueden indicar cuerdas al aire +y cuerdas mudas (que no se tocan). + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" + } + 1^\markup { + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" + } + } +>> +@end lilypond + +@cindex cejilla, indicación de + +Las indicaciones de cejilla se pueden añadir al diagrama a partir de +la cadena de marcado del diagrama de trastes. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + } + 1^\markup { + \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" + } + } +>> +@end lilypond + +@cindex fret-diagram, marcado con +@cindex ukelele + +@funindex fret-diagram +@funindex \fret-diagram + +El tamaño del diagrama de trastes y el número de trastes del diagrama, +se puede cambiar en la cadena de marcado @code{fret-diagram}. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + } + 1^\markup { + \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" + } + } +>> +@end lilypond + +Se puede cambiar el número de cuerdas de un diagrama de trastes para +que se adapte a distintos instrumentos como el bajo y el ukelele, con +la cadena de marcado del diagrama. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + a1 + } + } + \context Staff { + % An 'A' chord for ukulele + a'1^\markup { + \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" + } + } +>> +@end lilypond + +Se pueden añadir indicaciones de digitación, y la posición de las +etiquetas de los dedos se puede controlar mediante la cadena de +marcado del diagrama. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" + } + 1^\markup { + \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" + } + } +>> +@end lilypond + +Se puede controlar el radio y la posición de los puntos con la cadena +de marcado @code{fret-diagram}. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" + } + 1^\markup { + \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" + } + } +>> +@end lilypond + +@cindex fret-diagram-terse, marcado con + +@funindex fret-diagram-terse +@funindex \fret-diagram-terse + +La cadena de marcado de diagrama de trastes escueta, +@code{fret-diagram-terse}, omite los números de la cuerda; el número +de cuerda viene implícito por la presencia del punto y coma. Hay un +punto y coma por cada cuerda del diagrama. El primer punto y coma +corresponde al número de cuerda más alto, y el último punto y coma +corresponde a la primera cuerda. Se pueden indicad cuerdas mudas, al +aire y números de traste. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"x;3;2;o;1;o;" + } + 1^\markup { + \fret-diagram-terse #"x;x;o;2;3;1;" + } + } +>> +@end lilypond + +Se pueden incluir números de cejilla en la cadena de marcado escueta +@code{fret-diagram-terse}. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"1-(;3;3;2;1;1-);" + } + 1^\markup { + \fret-diagram-terse #"3-(;5;5;4;3;3-);" + } + } +>> +@end lilypond + +Se pueden incluir indicaciones de digitación en la cadena de marcado +escueta @code{fret-diagram-terse} + +@c Need to use override to enable fingerings to show this -- can we do so? +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" + } + 1^\markup { + \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" + } + } +>> +@end lilypond + +Otras propiedades de los diagramas de trastes se deben +ajustar usando @code{\override} al utilizar el marcado +escueto con fret-diagram-terse. + +@cindex fret-diagram-verbose, marcado con +@cindex capo + +@funindex fret-diagram-verbose +@funindex \fret-diagram-verbose + +La cadena de marcado prolija @code{fret-diagram-verbose} está en el +formato de una lista de Scheme. Cada elemento de la lista indica la +colocación un elemento sobre el diagrama de trastes. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-verbose #'( + (mute 6) + (place-fret 5 3) + (place-fret 4 2) + (open 3) + (place-fret 2 1) + (open 1) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (mute 6) + (mute 5) + (open 4) + (place-fret 3 2) + (place-fret 2 3) + (place-fret 1 1) + ) + } + } +>> +@end lilypond + +Se pueden incluir digitaciones y cejillas en una cadena de marcado +prolija @code{fret-diagram-verbose}. Es exclusiva del interfaz de +fret-diagram-verbose la indicación @q{capo} que se puede colocar sobre +el diagrama de posición. La indicación de capo es una barra gruesa +que cubre todas las cuerdas. El traste que tiene el capo es el más +bajo del diagrama de posición. + +@c \override is necessary to make fingering visible +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g c + } + } + \context Staff { + \clef "treble_8" + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + 1^\markup { + \fret-diagram-verbose #'( + (place-fret 6 1) + (place-fret 5 3) + (place-fret 4 3) + (place-fret 3 2) + (place-fret 2 1) + (place-fret 1 1) + (barre 6 1 1) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (place-fret 6 3 2) + (place-fret 5 2 1) + (open 4) + (open 3) + (open 2) + (place-fret 1 3 3) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (capo 3) + (mute 6) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + ) + } + } +>> +@end lilypond + +Todas las otras propiedades de diagrama de trastes se deben ajustar +utilizando @code{\override} cuando se usa el marcado prolijo con +fret-diagram-verbose. + +@ignore +The following example shows the three fret-diagram markup +interfaces, along with examples of common tweaks. For example, +the size of the verbose fret diagram is reduced to 0.75, and the +finger indications are specified to appear below the diagram. The +terse diagram includes tweaks to specify placement of finger code +and color of dots. + +@lilypond[verbatim,ragged-right,quote] +\new Voice { + \clef "treble_8" + d4^\markup { + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" + } + d4 d d + fis^\markup { + \override #'(size . 0.75) { + \override #'(finger-code . below-string) { + \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) + (place-fret 5 4 3) + (place-fret 4 4 4) + (place-fret 3 3 2) + (place-fret 2 2 1) + (place-fret 1 2 1)) + } + } + } + fis4 fis fis + c^\markup { + \override #'(dot-radius . 0.35) { + \override #'(finger-code . in-dot) { + \override #'(dot-color . white) { + \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" + } + } + } + } + c4 c c +} +@end lilypond +@end ignore + +@cindex personalizados, diagramas de trastes +@cindex trastes, diagramas personalizados de +@cindex diagrama de trastes personalizado + +@funindex fret-diagram-interface + +El aspecto gráfico de un diagrama de trastes se puede personalizar +según las preferencias del usuario a través de las propiedades del +interface @code{fret-diagram-interface}. Los detalles están en +@rinternals{fret-diagram-interface}. Para un marcado de diagrama de +trastes, las propiedades del interface pertenecen a +@code{Voice.TextScript}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-fret-orientations.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-markup-fret-diagrams.ly} + +@seealso +Referencia de la notación: +@ref{Instrument Specific Markup}. + +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de funcionamiento interno: +@rinternals{fret-diagram-interface}. + + +@node Diagramas predefinidos de trastes +@unnumberedsubsubsec Diagramas predefinidos de trastes +@translationof Predefined fret diagrams + +@cindex diagramas de posiciones +@cindex diagramas de posiciones de ukelele +@cindex diagramas de posiciones de mandolina +@cindex diagramas de acordes + +@funindex FretBoards +@funindex stringTunings + +Se pueden imprimir los diagramas de trastes usando el contexto +@code{FretBoards}. De forma predeterminada, el contexto +@code{FretBoards} imprime diagramas de trastes que están almacenados +en una tabla de búsqueda: + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { + c1 d + } +} +@end lilypond + +Los diagramas de traste predefinidos están en el archivo +@file{predefined-guitar-fretboards.ly}. Los diagramas de trastes se +almacenan tomando como base las notas de un acorde y el valor de +@code{stringTunings} que se está utilizando en cada momento. +@file{predefined-guitar-fretboards.ly} contiene diagramas de traste +predefinidos sólo para @code{guitar-tuning}. Los diagramas de traste +predefinidos se pueden añadir para otros instrumentos u otras +afinaciones siguiendo los ejemplos que aparecen en +@file{predefined-guitar-fretboards.ly}. + +Los diagramas de posiciones para el ukelele están en el archivo +@file{predefined-ukulele-fretboards.ly}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-ukulele-fretboards.ly" + +myChords = \chordmode { a1 a:m a:aug } + +\new ChordNames { + \myChords +} + +\new FretBoards { + \set stringTunings = #ukulele-tuning + \myChords +} +@end lilypond + +Los diagramas de posiciones para la mandolina +están contenidos en el archivo +@file{predefined-mandolin-fretboards.ly}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-mandolin-fretboards.ly" + +myChords = \chordmode { c1 c:m7.5- c:aug } + +\new ChordNames { + \myChords +} + +\new FretBoards { + \set stringTunings = #mandolin-tuning + \myChords +} +@end lilypond + +Las notas de los acordes se pueden introducir como música simultánea o +bien usando el modo de acordes (véase +@ref{Panorámica del modo de acordes}). + +@lilypond[verbatim, ragged-right,quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { c1 } + 1 +} +@end lilypond + +@cindex acordes, diagramas de trastes con nombres de +@cindex trastes, diagramas de, con nombres de acorde + +@funindex ChordNames +@funindex chordmode +@funindex \chordmode + +Es corriente que se impriman juntos los nombres de acorde y los +diagramas de traste. Esto se puede hacer poniendo un contexto de +nombres de acorde @code{ChordNames} en paralelo con un contexto de +trastes @code{FretBoards} y dando a los dos contextos el mismo +contenido musical. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex transporte de diagramas de trastes +@cindex trastes, diagramas de, transporte +@cindex diagramas de traste, transporte de los + +Los diagramas de traste predefinidos se pueden transportar, en la +medida en que esté almacenado un diagrama para el acorde transportado, +en la tabla de diagramas de traste. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +mychordlist = { + \mychords + \transpose c e { \mychords } +} +<< + \context ChordNames { + \mychordlist + } + \context FretBoards { + \mychordlist + } +>> +@end lilypond + + +La tabla de diagramas de traste predefinidos para la guitarra contiene +ocho acordes (mayor, menor, aumentado, disminuido, séptima dominante, +séptima mayor, menor séptima y novena domniante) para 17 tonalidades +distintas. La tabla de diagramas predefinidos para el ukelele +contiene estos acordes y además otros tres (sexta mayor, segunda +suspendida y cuarta suspendida). Se puede ver una lista completa de +los diagramas de traste predefinidos en +@ref{Diagramas predefinidos de trastes}. +Si no hay una entrada en la tabla para un acorde, el +grabador FretBoards calcula un cadena de diagrama fret-diagram usando +la funcionalidad de diagramas automáticos que se describe en +@ref{Diagramas de traste automáticos}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 c:maj9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex trastes personalizados, añadir diagramas de +@cindex personalizados, añadir diagramas de traste +@cindex diagramas de trastes personalizados, añadir + +Se pueden añadir diagramas de posiciones a la tabla de diagramas de +posiciones. Para añadir un diagrama debemos especificar la +tabla de correspondencias para el diagrama, el acorde del +diagrama, la afinación utilizada y una definición del diagrama. +Normalmente la tabla de correspondencias será +@var{default-fret-table}. La definición del diagrama puede ser +una cadena de definición escueta fret-diagram-terse o una lista +de marcados prolija fret-diagram-verbose. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table + \chordmode { c:maj9 } + #guitar-tuning + #"x;3-2;o;o;o;o;" + +mychords = \chordmode { + c1 c:maj9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +Se pueden almacenar distintos diagramas de traste para el mismo acorde +usando distintas octavas para las notas. Las octavas de diferencia +deben ser al menos dos por encima o por debajo de la octava +predeterminada, porque las octavas inmediatas superior e inferior de +la predeterminada se utilizan para los trasteros transpositores. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table + \chordmode { c'' } + #guitar-tuning + #(offset-fret 2 (chord-shape 'bes guitar-tuning)) + +mychords = \chordmode { + c1 c'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex trastes, instrumentos de, formas de acordes +@cindex acordes, formas de, en instrumentos de trastes + +@funindex \addChordShape +@funindex addChordShape +@funindex storePredefinedDiagram +@funindex \storePredefinedDiagram + +Además de los diagramas de traste, LilyPond almacena una lista interna +de formas de acorde. Las formas de acorde son diagramas de traste que +se pueden desplazar por el mástil para dar acordes distintos. Se +pueden añadir formas de acorde a la lista interna y luego usarlas para +definir diagramas de posición predefinidos. Dado que se pueden mover +a distintas posiciones dentro del mástil, las formas de acorde +normalmente no contienen cuerdas al aire. Como los diagramas de +posiciones, las formas de acorde se pueden introducir como cadenas +escuetas fret-diagram-terse o como listas de marcado prolijas +fret-diagram-verbose. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +% Add a new chord shape + +\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" + +% add some new chords based on the power chord shape + +\storePredefinedDiagram #default-fret-table + \chordmode { f'' } + #guitar-tuning + #(chord-shape 'powerf guitar-tuning) +\storePredefinedDiagram #default-fret-table + \chordmode { g'' } + #guitar-tuning + #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) + +mychords = \chordmode{ + f1 f'' g g'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +El aspecto gráfico de un diagrama de traste se puede personalizar +según las preferencias del usuario a través de las propiedades del +interface @code{fret-diagram-interface}. Los detalles están en +@rinternals{fret-diagram-interface}. Para un diagrama de trastes +predefinido, las propiedades de interface pertenecen a +@code{FretBoards.FretBoard}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-fretboard-fret-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{defining-predefined-fretboards-for-other-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chordchanges-for-fretboards.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fretboards-alternate-tables.ly} + + +@seealso +Referencia de la notación: +@ref{Tablaturas personalizadas}, +@ref{Diagramas de traste automáticos}, +@ref{Panorámica del modo de acordes}, +@ref{Diagramas predefinidos de trastes}. + +Archivos de inicio: +@file{ly/predefined-guitar-fretboards.ly}, +@file{ly/predefined-guitar-ninth-fretboards.ly}, +@file{ly/predefined-ukulele-fretboards.ly}, +@file{ly/predefined-mandolin-fretboards.ly}. + +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de funcionamiento interno: +@rinternals {fret-diagram-interface}. + + +@node Diagramas de traste automáticos +@unnumberedsubsubsec Diagramas de traste automáticos +@translationof Automatic fret diagrams + +@cindex trastes, diagramas automáticos de +@cindex acordes, diagramas automáticos de +@cindex automáticos, diagramas de traste +@cindex automáticos, diagramas de acordes + +Se pueden crear diagramas de traste automáticamente a partir de las +notas introducidas usando el contexto @code{FretBoards}. Si no está +disponible ningún diagrama predefinido para las notas introducidas en +la afinación @code{stringTunings} activa, este contexto calcula las +cuerdas y los trastes que se pueden usar para tocar las notas. + +@lilypond[quote,ragged-right,verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context FretBoards { + 1 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +@funindex predefinedFretboardsOff +@funindex \predefinedFretboardsOff +@funindex predefinedFretboardsOn +@funindex \predefinedFretboardsOn + +Puesto que de forma predeterminada no se carga ningún diagrama +predefinido, el comportamiento predeterminado es el cálculo automático +de los diagramas de traste. Una vez que los diagramas predeterminados +se han cargado, se puede habilitar e inhabilitar el cálculo automático +con instrucciones predefinidas: + +@lilypond[quote,ragged-right,verbatim] + +\storePredefinedDiagram #default-fret-table + + #guitar-tuning + #"x;3-1-(;5-2;5-3;5-4;3-1-1-);" +<< + \context ChordNames { + \chordmode { + c1 c c + } + } + \context FretBoards { + 1 + \predefinedFretboardsOff + 1 + \predefinedFretboardsOn + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + 1 + } +>> +@end lilypond + + + +A veces el calculador de trastes es incapaz de encontrar un diagrama +aceptable. Esto se puede remediar generalmente mediante la asignación +manual de una nota a una cuerda. En muchos casos sólo hay que colocar +manualmente una nota sobre una cuerda; el resto de las notas se +situará en el lugar adecuado por parte del contexto +@code{FretBoards}. + +@cindex trastes, añadir digitaciones a diagramas de +@cindex digitaciones, añadir, a diagramas de trastes + +Se pueden añadir digitaciones a los diagramas de traste del contexto +FretBoard. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context FretBoards { + 1 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +@funindex minimumFret + +El traste mínimo que usar en el cálculo de cuerdas y trastes para el +contexto FretBoard se puede fijar con la propiedad @code{minimumFret}. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + d1:m d:m + } + } + \context FretBoards { + 1 + \set FretBoards.minimumFret = #5 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +Las cuerdas y los trastes para el contexto @code{FretBoards} dependen +de la propiedad @code{stringTunings}, que tiene el mismo significado +que en el contexto de tablatura TabStaff. +Consulte @ref{Tablaturas personalizadas} para ver más información +sobre la propiedad @code{stringTunings}. + +El aspecto gráfico de un diagrama de trastes se puede personalizar de +acuerdo a las preferencias del usuario a través de las propiedades del +interface @code{fret-diagram-interface}. Los detalles están en +@rinternals{fret-diagram-interface}. Para un diagrama de +@code{FretBoards}, las propiedades del interface pertenecen a +@code{FretBoards.FretBoard}. + + +@predefined +@code{\predefinedFretboardsOff}, +@code{\predefinedFretboardsOn}. +@endpredefined + + +@seealso +Referencia de la notación: +@ref{Tablaturas personalizadas}. + +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de funcionamiento interno: +@rinternals {fret-diagram-interface}. + +@knownissues +Los cálculos de tablatura automáticos no funcionan bien para +instrumentos con afinaciones no monótonas. + + +@node Digitaciones de la mano derecha +@unnumberedsubsubsec Digitaciones de la mano derecha +@translationof Right-hand fingerings + +@cindex trastes, instrumentos de, digitaciones de la derecha +@cindex digitaciones de la mano derecha para instrumentos de trastes +@cindex derecha, mano, digitaciones para instrumentos de traste + +@funindex rightHandFinger +@funindex \rightHandFinger + +Las digitaciones de la mano derecha @var{p-i-m-a} se deben introducir +dentro de una construcción de acorde @code{<>} para que se impriman en +la partitura, incluso si se aplican a una nota suelta. + +@warning{@strong{Debe} haber un guión antes de +@code{@bs{}rightHandFinger} y un espacio antes del ángulo de cierre +@code{>}.} + +@lilypond[quote,verbatim,relative=0] +\clef "treble_8" +4 + + + +1 +@end lilypond + +Por brevedad, se puede escribir @code{\rightHandFinger} como algo más +corto, como por ejemplo @code{RH}: + +@example +#(define RH rightHandFinger) +@end example + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{placement-of-right-hand-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingerings,-string-indications,-and-right-hand-fingerings.ly} + + +@seealso +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de funcionamiento interno: +@rinternals{StrokeFinger}. + + +@node Guitarra +@subsection Guitarra +@translationof Guitar + +Casi todos los asuntos de notación relacionados con la música para +guitarra están suficientemente cubiertos en la sección general sobre +ajustes de instrumentos de trastes, pero hay algunos más de los que +merece la pena hablar aquí. De forma ocasional, los usuarios quieren +crear documentos del tipo de cancioneros que tengan sólo la letra de +las canciones con indicaciones de acordes sobre ella. Dado que +LilyPond es un tipografiador de música, no se recomienda para +documentos que no tienen notación musical. Una alternativa mejor es +un procesador de texto, editor de texto o, para usuarios con +experiencia, un tipografiador como GuitarTeX. + +@menu +* Indicar la posición y la cejilla:: +* Indicar armónicos y notas tapadas:: +* Indicación de acordes de potencia o de quinta vacía:: +@end menu + + +@node Indicar la posición y la cejilla +@unnumberedsubsubsec Indicar la posición y la cejilla +@translationof Indicating position and barring + +@cindex posición y cejilla, indicación para instrumentos de trastes +@cindex trastes, instrumentos de, indicación de la posición y cejilla + +Este ejemplo muestra cómo incluir indicaciones de posición y cejilla +de guitarra: + +@lilypond[quote,ragged-right,verbatim,relative=0] +\clef "treble_8" +b16 d g b e +\textSpannerDown +\override TextSpanner #'(bound-details left text) = #"XII " +g16\startTextSpan +b16 e g e b g\stopTextSpan +e16 b g d +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Extensiones de texto}. + +Fragmentos de código: +@rlsr{Fretted strings}, +@rlsr{Expressive marks}. + + +@node Indicar armónicos y notas tapadas +@unnumberedsubsubsec Indicar armónicos y notas tapadas +@translationof Indicating harmonics and dampened notes + +@cindex trastes, notas tapadas en instrumentos de +@cindex trastes, armónicos en instrumentos de +@cindex tapadas, notas, en instrumentos de trastes +@cindex armónicos en instrumentos de trastes + +Se pueden usar cabezas de nota especiales para indicar notas apagadas +o armónicos. Los armónicos se suelen explicar de forma más completa +con un marcado de texto. + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \clef "treble_8" + \override Staff.NoteHead #'style = #'harmonic-mixed + d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 +} +@end lilypond + +Las notas tapadas (llamadas también @notation{notas muertas}) están +contempladas dentro de los pentagramas normales y de tablatura: + +@lilypond[quote,ragged-right,verbatim] +music = \relative c' { + < a\3 \deadNote c\2 a'\1 >4 + < b\3 \deadNote d\2 b'\1 > + < c\3 \deadNote e\2 c'\1 > + \deadNotesOn + \times 2/3 { g8 b e } + \deadNotesOff + < a,\3 c\2 e\1 >1 +} +\new StaffGroup << + \new Staff { + \clef "treble_8" + \music + } + \new TabStaff { + \music + } +>> +@end lilypond + +Otra téctnica de ejecución (utilizada especialmente en la guitarra +eléctrica) se llama @notation{tapado de palma}. La cuerda es +parcialmente tapada por la palma de la mano que pulsa (de ahí el +nombre). Lilypond contempla la notación de las notas de estilo de +tapado de palma mediante el cambio de la forma de la cabeza de nota a +un triángulo. + +@lilypond[quote,ragged-right,verbatim] +\new Voice { % Warning: explicit Voice instantiation is + % required to have palmMuteOff work properly + % when palmMuteOn comes at the beginning of + % the piece. + \relative c, { + \clef "G_8" + \palmMuteOn + e8^\markup { \musicglyph #"noteheads.u2do" = palm mute } + < e b' e > e + \palmMuteOff + e e \palmMute e e e | + e8 \palmMute { e e e } e e e e | + < \palmMute e b' e >8 \palmMute { e e e } < \palmMute e b' e >2 + } +} +@end lilypond + +@seealso +Fragmentos de código: +@rlsr{Fretted strings}. + +Referencia de la notación: +@ref{Cabezas de nota especiales}, +@ref{Estilos de cabezas de nota}. + + +@node Indicación de acordes de potencia o de quinta vacía +@unnumberedsubsubsec Indicación de acordes de potencia o de quinta vacía +@translationof Indicating power chords + +@funindex powerChords +@funindex \powerChords + +@cindex potencia, acordes de +@cindex acordes de potencia +@cindex acordes de quinta vacía +@cindex quinta vacía, acordes de +@cindex vacía, acordes de quinta + +Los acordes de quinta vacía o acordes de potencia +(@emph{power chords}) y sus símbolos se pueden tipografiar +en el modo de acordes o como construcciones de acorde normales: + +@lilypond[quote,ragged-right,verbatim] +ChordsAndSymbols = { + \chordmode { + \powerChords + e,,1:1.5 + a,,1:1.5.8 + \set minimumFret = #8 + c,1:1.5 + f,1:1.5.8 + } + \set minimumFret = #5 + 1 + 1 +} +\score { + << + \new ChordNames { + \ChordsAndSymbols + } + \new Staff { + \clef "treble_8" + \ChordsAndSymbols + } + \new TabStaff { + \ChordsAndSymbols + } + >> +} +@end lilypond + +Los símbolos de acordes de quinta vacía se desactivan automáticamente +tan pronto como se utiliza cualquiera de los otros modificadores de +acorde: + +@lilypond[quote,ragged-right,verbatim] +mixedChords = \chordmode { + c,1 + \powerChords + b,,1:1.5 + fis,,1:1.5.8 + g,,1:m +} +\score { + << + \new ChordNames { + \mixedChords + } + \new Staff { + \clef "treble_8" + \mixedChords + } + \new TabStaff { + \mixedChords + } + >> +} +@end lilypond + +@seealso +Glosario musical: +@rglos{power chord}. + +Referencia de la notación: +@ref{Acordes extendidos y alterados}, +@ref{Impresión de los nombres de acorde}. + +Fragmentos de código: +@rlsr{Fretted strings}. + + +@node Banjo +@subsection Banjo +@translationof Banjo + +@menu +* Tablaturas de banjo:: +@end menu + +@node Tablaturas de banjo +@unnumberedsubsubsec Tablaturas de banjo +@translationof Banjo tablatures + +@cindex banjo, tablaturas de +@cindex tablatura de banjo + +LilyPond contempla el banjo de cinco cuerdas de una manera básica. +Cuando haga tablaturas para banjo de cinco cuerdas, utilice la función +de formato de tablatura de banjo para obtener los números correctos de +los trastes para la quinta cuerda: + +@c due to crazy intervals of banjo music, absolute pitch is recommended + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff << + \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo + \set TabStaff.stringTunings = #banjo-open-g-tuning + { + \stemDown + g8 d' g'\5 a b g e d' | + g4 d''8\5 b' a'\2 g'\5 e'\2 d' | + g4 + } +>> +@end lilypond + +@cindex banjo, afinaciones del +@cindex afinaciones del banjo + +@funindex banjo-c-tuning +@funindex banjo-modal-tuning +@funindex banjo-open-d-tuning +@funindex banjo-open-dm-tuning +@funindex four-string-banjo + +En LilyPond se encuentran predefinidas varias afinaciones comunes para +el banjo: @code{banjo-c-tuning} (sol-Do-Sol-Si-Re), +@code{banjo-modal-tuning} (sol-Re-Sol-Do-Re), +@code{banjo-open-d-tuning} (Re Mayor al aire, la-Re-Fa#-La-Re) y +@code{banjo-open-dm-tuning} (Re menor al aire, la-Re-Fa-La-Re). + +Estas afinaciones se pueden convertir a afinaciones para bajo de +cuatro cuerdas utilizando la función @code{four-string-banjo}: + +@example +\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) +@end example + + +@seealso +Fragmentos de código: +@rlsr{Fretted strings}. + +Archivos de inicio: +@file{scm/string-tunings-init.scm} contiene las afinaciones +predefinidas para el banjo. diff --git a/Documentation/es/notation/input.itely b/Documentation/es/notation/input.itely new file mode 100644 index 0000000000..c7d218157c --- /dev/null +++ b/Documentation/es/notation/input.itely @@ -0,0 +1,2664 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 9f651e1f5143787aeda825a4061f82eede4943a3 + + 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 Entrada y salida generales +@chapter Entrada y salida generales +@translationof General input and output + +Esta sección trata de asuntos relacionados con la entrada y salida +generales de LilyPond, más que con la notación específica. + +@menu +* Estructura del código de entrada:: +* Títulos y cabeceras:: +* Trabajar sobre los archivos de entrada:: +* Controlar la salida:: +* Salida MIDI:: +@end menu + + +@node Estructura del código de entrada +@section Estructura del código de entrada +@translationof Input structure + +El formato principal de entrada para LilyPond son archivos de texto. +Por convenio, el nombre de estos archivos termina en @file{.ly}. + +@menu +* Estructura de una partitura:: +* Varias partituras en un libro:: +* Varios archivos de salida a partir de uno de entrada:: +* Nombres de los archivos de salida:: +* Estructura del archivo:: +@end menu + + +@node Estructura de una partitura +@subsection Estructura de una partitura +@translationof Structure of a score + +@funindex \score + +Un bloque @code{\score} debe contener una expresión musical única +delimitada por un par de llaves: + +@example +\score @{ +... +@} +@end example + +@c outer? +@warning{Sólo puede haber @strong{una} expresión musical dentro del +bloque @code{\score}, y @strong{debe} estar encerrada entre llaves.} + +Esta expresión musical única puede tener cualquier tamaño, y puede +contener otras expresiones musicales hasta cualquier grado de +complejidad. Todos los siguientes ejemplos son expresiones musicales: + +@example +@{ c'4 c' c' c' @} +@end example + +@lilypond[verbatim,quote] +{ + { c'4 c' c' c' } + { d'4 d' d' d' } +} +@end lilypond + +@lilypond[verbatim,quote] +<< + \new Staff { c'4 c' c' c' } + \new Staff { d'4 d' d' d' } +>> +@end lilypond + +@example +@{ + \new GrandStaff << + \new StaffGroup << + \new Staff @{ \flute @} + \new Staff @{ \oboe @} + >> + \new StaffGroup << + \new Staff @{ \violinI @} + \new Staff @{ \violinII @} + >> + >> +@} +@end example + +Los comentarios son una excepción a esta regla general (para ver otras +excepciones, consulte @ref{Estructura del archivo}). Tanto los comentarios de +una línea como los que están delimitados por @code{%@{ .. %@}} se +pueden escribir en cualquier lugar dentro del archivo de entrada. Se +pueden escribir dentro o fuera del bloque @code{\score}, y dentro o +fuera de la expresión musical única dentro del bloque @code{\score}. + +Recuerde que incluso dentro de un archivo que contenga solamente un +bloque @code{\score}, éste se encuentra incluido implícitamente dentro +de un bloque @code{\book}. Un bloque @code{\book} dentro de un +archivo fuente produce al menos un archivo de salida, y de forma +predeterminada el nombre del archivo de salida que se produce está +derivado del nombre del archivo de entrada, de forma que +@file{fandangoforelephants.ly} da como resultado +@file{fandangoforelephants.pdf}. + +(Para ver más detalles acerca de los bloques @code{\book}, consulte +@ref{Varias partituras en un libro}, @ref{Varios archivos de salida a +partir de uno de entrada} y @ref{Estructura del archivo}.) + +@seealso +Manual de aprendizaje: +@rlearning{Trabajar sobre los archivos de entrada}, +@rlearning{Explicación de las expresiones musicales}, +@rlearning{La partitura es una (única) expresión musical compuesta}. + + +@node Varias partituras en un libro +@subsection Varias partituras en un libro +@translationof Multiple scores in a book + +@funindex \book +@cindex movimientos, varios + +Un documento puede contener varias piezas de música y texto. Son +ejemplos un libro de estudios o una parte orquestal con varios +movimientos. Cada movimiento se introduce con un bloque +@code{\score}: + +@example +\score @{ + @var{..música..} +@} +@end example + +y los textos se introducen con un bloque @code{\markup}: + +@example +\markup @{ + @var{..texto..} +@} +@end example + +@funindex \book + +Todos los movimientos y textos que aparecen en el mismo archivo +@file{.ly} se tipografían normalmente en la forma de un solo archivo +de salida. + +@example +\score @{ + @var{..} +@} +\markup @{ + @var{..} +@} +\score @{ + @var{..} +@} +@end example + +Una excepción importante se da dentro de los documentos de +lilypond-book, en los que tenemos que escribir explícitamente un +bloque @code{\book}, pues en caso contrario sólo aparecerá en la +salida el primer @code{\score} o @code{\markup}. + +El encabezamiento de cada pieza se puede poner dentro del bloque +@code{\score}. Antes de cada movimiento, se imprime el nombre de la +pieza (@code{piece}) extraído del encabezamiento. El título del libro +entero se puede poner dentro del bloque @code{\book}, pero si no está +presente se inserta el encabezamiento @code{\header} que está al +principio del archivo. + +@example +\header @{ + title = "Ocho miniaturas" + composer = "Igor Stravinsky" +@} +\score @{ + @dots{} + \header @{ piece = "Romanze" @} +@} +\markup @{ + ..texto de la segunda estrofa.. +@} +\markup @{ + ..texto de la tercera estrofa.. +@} +\score @{ + @dots{} + \header @{ piece = "Menuetto" @} +@} +@end example + + +@funindex \bookpart + +Se pueden agrupar distintas piezas de música en partes de un libro +utilizando bloques @code{\bookpart}. Las partes de libro se separan +por medio de saltos de página, y pueden dar comienzo con un título, +como el libro propiamente dicho, mediante la especificación del bloque +@code{\header}. + +@example +\bookpart @{ + \header @{ + title = "Título del libro" + subtitle = "Primera parte" + @} + \score @{ @dots{} @} + @dots{} +@} +\bookpart @{ + \header @{ + subtitle = "Segunda parte" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + +@node Varios archivos de salida a partir de uno de entrada +@subsection Varios archivos de salida a partir de uno de entrada +@translationof Multiple output files from one input file + +Si queremos varios archivos de salida a partir del mismo archivo +@file{.ly}, podemos escribir varios bloques @code{\book}, donde cada +uno de estos bloques @code{\book} dará como resultado un archivo de +salida distinto. Si no especificamos ningún bloque @code{\book} en el +archivo, LilyPond trata implícitamente todo el archivo como un solo +bloque @code{\book}, véase @ref{Estructura del archivo}. + +Al producir varios archivos a partir de un solo archivo fuente, +Lilypond se asegura de que ninguno de los archivos de salida de ningún +bloque @code{\book} sobreescribe el archivo de salida producido por un +@code{\book} anterior del mismo archivo de entrada. + +Lo hace añadiendo un sufijo al nombre de la salida para cada libro +@code{\book} que utiliza el nombre del archivo de salida +predeterminado, derivado del archivo fuente de entrada. + +El comportamiento predeterminado es añadir un sufijo con el número de +versión para cada nombre que pueda coincidir; así: + +@example +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +en el archivo fuente @file{eightminiatures.ly}, produce + +@itemize +@item +@file{eightminiatures.pdf}, +@item +@file{eightminiatures-1.pdf} y +@item +@file{eightminiatures-2.pdf}. +@end itemize + +@node Nombres de los archivos de salida +@subsection Nombres de los archivos de salida +@translationof Output file names + +@funindex \bookOutputSuffix +@funindex \bookOutputName + +Lilypond le ofrece unos mecanismos que le permiten controlar los +nombres de archivo que se utilizan por parte de los diversos motores +finales al producir los archivos de salida. + +En la sección anterior vimos cómo Lilypond evita las coincidencias de +nombres al producir varias salidas a partir de un único archivo fuente +de entrada. También podemos especificar nuestros propios sufijos para +cada bloque @code{\book}, de manera que podemos producir, por ejemplo, +archivos con los nombres @file{eightminiatures-Romanze.pdf}, +@file{eightminiatures-Menuetto.pdf} y +@file{eightminiatures-Nocturne.pdf} añadiendo una declaración +@code{\bookOutputSuffix} dentro de cada bloque @code{\book}. + +@example +\book @{ + \bookOutputSuffix "Romanze" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Menuetto" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Nocturne" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +También podemos especificar un nombre de archivo de salida diferente +para cada bloque @code{book}, mediante la utilización de declaraciones +@code{\bookOutputName}: + +@example +\book @{ + \bookOutputName "Romanze" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Menuetto" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Nocturne" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +El código anterior produce los siguientes archivos de salida: + +@itemize +@item +@file{Romanze.pdf}, +@item +@file{Menuetto.pdf} y +@item +@file{Nocturne.pdf}. +@end itemize + +@node Estructura del archivo +@subsection Estructura del archivo +@translationof File structure + +@funindex \paper +@funindex \midi +@funindex \layout +@funindex \header +@funindex \score +@funindex \book +@funindex \bookpart + +Un archivo @file{.ly} puede contener cualquier número de expresiones +del nivel superior, donde una expresión del nivel superior es una de +las siguientes posibilidades: + +@itemize +@item +Una definición de salida, como @code{\paper}, @code{\midi} y +@code{\layout}. Tal definición en el nivel más alto cambia los +ajustes predeterminados para todo el libro. Si se introduce más de +una de estas definiciones del mismo tipo en el nivel más alto, +cualquier definición en una expresión posterior tiene prioridad. + +@item +Una expresión directa de Scheme, como +@code{#(set-default-paper-size "a7" 'landscape)} o +@code{#(ly:set-option 'point-and-click #f)}. + +@item +Un bloque @code{\header}. Esto establece el bloque de encabezamiento +global. Es el bloque que contiene las definiciones de los ajustes +para todo el libro, como el compositor, título, etc. + +@item +Un bloque @code{\score}. Esta partitura se reúne con otras partituras +del nivel superior, y se combina con ellas formando un @code{\book} +(libro) único. Este comportamiento se puede cambiar estableciendo el +valor de la variable @code{toplevel-score-handler} en el nivel +superior. El @emph{handler} predeterminado se define en el archivo de +inicio @file{../scm/lily.scm}. + +@item +Un bloque @code{\book} combina lógicamente varios movimientos (es +decir, varios bloques @code{\score}) en un solo documento. Si hay +varias partituras @code{\score}, se crea un solo archivo de salida +para cada bloque @code{\book}, en el que se concatenan todos los +movimientos correspondientes. La única razón para especificar +explícitamente bloques @code{\book} en un archivo de entrada +@file{.ly} es si queremos crear varios archivos de salida a partir de +un único archivo de entrada. Una excepción se da dentro de los +documentos de lilypond-book, en los que tenemos que escribir +explícitamente un bloque @code{\book} si queremos tener más de una +única partitura @code{\score} o marcado @code{\markup} en el mismo +ejemplo. Se puede cambiar este comportamiento estableciendo el valor +de la variable @code{toplevel-book-handler} en el nivel superior. El +@emph{handler} predeterminado se define en el archivo de inicio +@file{../scm/lily.scm}. + +@item +Un bloque @code{\bookpart}. Un libro puede dividirse en varias +partes, utilizando bloques @code{\bookpart}, con objeto de facilitar +la inserción de saltos de página o usar distintos ajustes de +@code{\paper} en las distintas partes. + +@item +Una expresión musical compuesta, como +@example +@{ c'4 d' e'2 @} +@end example + +Esto añade la pieza al @code{\score} y la conforma dentro de un libro +único junto a todas las demás partituras @code{\score} y expresiones +musicales del nivel superior. En otras palabras, un archivo que +contiene sólo la expresión musical anterior se traduce a + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + @{ c'4 d' e'2 @} + @} + @} + @} + \layout @{ @} + \header @{ @} +@} +@end example + +Se puede cambiar este comportamiento estableciendo el valor de la +variable @code{toplevel-music-handler} en el nivel más alto. El +@emph{handler} predeterminado se define en el archivo de inicio +@file{../scm/lily.scm}. + +@item +Un texto de marcado, por ejemplo una estrofa +@example +\markup @{ + 2. Estrofa dos, línea uno +@} +@end example + +Los textos de marcado se colocan encima, en medio o debajo de las +partituras o expresiones musicales, según donde aparezcan escritos. + +@cindex variables + +@item +Una variable, como +@example +fulano = @{ c4 d e d @} +@end example + +Esto se puede utilizar más tarde en el archivo escribiendo +@code{\fulano}. El nombre de las variables ha de ser exclusivamente +alfabético; sin números, guiones ni barras bajas. + +@end itemize + +El ejemplo siguiente muestra tres cosas que se pueden introducir en el +nivel superior: + +@example +\layout @{ + % No justificar la salida + ragged-right = ##t +@} + +\header @{ + title = "Do-re-mi" +@} + +@{ c'4 d' e2 @} +@end example + +En cualquier punto del archivo se pueden introducir cualquiera de las +instrucciones léxicas siguientes: + +@itemize +@item @code{\version} +@item @code{\include} +@item @code{\sourcefilename} +@item @code{\sourcefileline} +@item +Un comentario de una línea, determinado por un símbolo @code{%} al principio. + +@item +Un comentario de varias líneas, delimitado por @code{%@{ .. %@}}. + +@end itemize + +@cindex espacios en blanco + +Por lo general se ignoran los espacios entre elementos del flujo de +entrada, y se pueden omitir o aumentar tranquilamente para mejorar la +legibilidad. Sin embargo, los espacios se deben utilizar siempre para +evitar errores, en las siguientes situaciones: + +@itemize +@item Alrededor de todas y cada una de las llaves curvas de apertura y cierre. +@item A continuación de las instrucciones y variables, es decir, todos los elementos +que comienzan con un signo @code{\} de barra invertida. +@item A continuación de todo elemento que se deba interpretar como expresión +de Scheme, es decir, todo elemento que comience por un signo @code{#}. +@item Para separar los elementos de una expresión de Scheme. +@item Dentro de @code{lyricmode} para separar todos los términos de las instrucciones +@code{\override} y @code{\set}. Concretamente, hay que usar espacios +alrededor del punto y el signo igual en instrucciones como +@code{\override Score . LyricText #'font-size = #5} y antes y después +de la instrucción completa. + +@end itemize + +@seealso +Manual de aprendizaje: +@rlearning{Cómo funcionan los archivos de entrada de LilyPond}. + + +@node Títulos y cabeceras +@section Títulos y cabeceras +@translationof Titles and headers + +Casi toda la música impresa tiene un título y el nombre del +compositor; ciertas piezas tienen mucha más información. + +@menu +* 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 cabeceras y pies de página +@subsection Crear títulos, cabeceras y pies de página +@translationof Creating titles headers and footers + +@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 + + +@node Explicación de los bloques de títulos +@unnumberedsubsubsec Explicación de los bloques de títulos +@translationof Title blocks explained + +@c TODO: figure out how \bookpart titles work + +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}. + +Si el libro tiene una única partitura, el bloque @code{\header} se +puede situar dentro o fuera del bloque @code{\score}. + +@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}.} + +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\header { + title = "SUITE I." + composer = "J. S. Bach." +} + +\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." + } +} + +\score { + \new Staff \relative b { + \clef bass + \key g \major + \partial 16 b16 | + 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 + +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: + +@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 + +@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" +} + +\score { + { s1 } + \header { + % The following fields are placed at opposite ends of the same line + piece = "Piece" + opus = "Opus" + } +} +@end lilypond + +@c Is the bit about \null markups true? -mp + +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. + +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. + +@cindex breakbefore + +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 { + title = "This is my Title" + subtitle = "This is my Subtitle" + copyright = "This is the bottom of the first page" + } + \score { + \repeat unfold 4 { e'' e'' e'' e'' } + \header { + 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 + } + } +} +@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 { + \relative c' { + c4 d e f + } + } +} +@end lilypond + +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 +scoreTitleMarkup = \markup @{ \column @{ + \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @} + \fill-line @{ + \fromproperty #'header:piece + \fromproperty #'header:opus + @} +@} +@} +@end example + +Esto sitúa los campos de texto @code{piece} y @code{opus} en extremos +opuestos de la misma línea: + +@lilypond[quote,verbatim,noragged-right] +\score { + { s1 } + \header { + piece = "PRAELUDIUM I" + opus = "BWV 846" + } +} +@end lilypond + +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. + +@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 + +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 + +También podemos crear nuestros propios campos de texto personalizados, +y referirnos a ellos en la definición del elemento de marcado. + +@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 + + +@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 + +@c can make-header and make-footer be removed from +@c paper-defaults-init.ly? -mp + +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}: + +@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 + +Estas variables de marcado se estudian en +@ref{Presentación predeterminada de los bloques de título del libro y la partitura}. + +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}: + +@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 + + +@node Referencia a números de página +@subsection Referencia a números de página +@translationof Reference to page numbers + +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] +\header { tagline = ##f } +\book { + \label #'firstScore + \score { + { + c'1 + \pageBreak \mark A \label #'markA + c'1 + } + } + \markup { The first score begins on page \page-ref #'firstScore "0" "?" } + \markup { Mark A is on page \page-ref #'markA "0" "?" } +} +@end lilypond + +La instrucción de marcado @code{\page-ref} toma tres argumentos: +@enumerate +@item la etiqueta, un símbolo de scheme, p.ej. @code{#'firstScore}; +@item un elemento de marcado que se usará como medidor para estimar las dimensiones del marcado; +@item un elemento de marcado que se utilizará en sustitución del número de página si la etiqueta es desconocida. +@end enumerate + +El motivo de que se necesite un medidor es que en el momento en que se +están interpretando los marcados, los saltos de página aún no se han +producido y por tanto los números de página no se conocen todavía. +Para sortear este inconveniente, la interpretación real del marcado se +retrasa hasta un momento posterior; sin embargo, las dimensiones del +marcado se tienen que conocer de antemano, así que se usa el medidor +para decidir estas dimensiones. Si el libro tiene entre 10 y 99 +páginas, el medidor puede ser "00", es decir, un número de dos +dígitos. + + +@predefined +@funindex \label +@code{\label}, +@funindex \page-ref +@code{\page-ref}. +@endpredefined + + +@node Índice general +@subsection Índice general +@translationof Table of contents + +Se puede insertar un índice general o tabla de contenidos utilizando +la instrucción @code{\markuplines \table-of-contents}. Los elementos +que deben aparecer en la tabla de contenidos se introducen con la +instrucción @code{\tocItem}, que se puede usar en el nivel más alto de +la jerarquía del código, o dentro de una expresión musical. + +@verbatim +\markuplines \table-of-contents +\pageBreak + +\tocItem \markup "Primera partitura" +\score { + { + c'4 % ... + \tocItem \markup "Un punto concreto dentro de la primera partitura" + d'4 % ... + } +} + +\tocItem \markup "Segunda partitura" +\score { + { + e'4 % ... + } +} +@end verbatim + +Los elementos de marcado que se usan para dar formato al índice +general se encuentran definidos dentro del bloque @code{\paper}. Los +elementos predeterminados son @code{tocTitleMarkup}, para dar formato +al título de la tabla, y @code{tocItemMarkup}, para aplicar formato a +los elementos del índice, que consisten en el título del elemento y el +número de página. Estas variables se pueden cambiar por parte del +usuario: + +@verbatim +\paper { + %% Traducir el título del índice al español: + tocTitleMarkup = \markup \huge \column { + \fill-line { \null "Índice general" \null } + \hspace #1 + } + %% usar una fuente mayor + tocItemMarkup = \markup \large \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page + } +} +@end verbatim + +Observe la forma en que nos referimos al texto y al número de página +del elemento de índice, dentro de la definición @code{tocItemMarkup}. + +También se pueden definir nuevas instrucciones y elementos de +marcado para crear índices generales más elaborados: +@itemize +@item en primer lugar, defina una variable de marcado nueva dentro del bloque @code{\paper} +@item luego defina una función de música cuyo propósito es añadir un elemento al índice general +utilizando esta variable de marcado del bloque @code{\paper}. +@end itemize + +En el ejemplo siguiente se define un estilo nuevo para introducir los +nombres de los actos de una ópera en el índice general: + +@verbatim +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) +@end verbatim + +@lilypond[line-width=11.0\cm] +\header { tagline = ##f } +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) + +\book { + \markuplines \table-of-contents + \tocAct \markup { Atto Primo } + \tocItem \markup { Coro. Viva il nostro Alcide } + \tocItem \markup { Cesare. Presti omai l'Egizzia terra } + \tocAct \markup { Atto Secondo } + \tocItem \markup { Sinfonia } + \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } + \markup \null +} +@end lilypond + +Se pueden añadir puntos de relleno entre un elemento y su número de página: + +@lilypond[verbatim,quote] +\header { tagline = ##f } +\paper { + tocItemMarkup = \tocItemWithDotsMarkup +} + +\book { + \markuplines \table-of-contents + \tocItem \markup { Allegro } + \tocItem \markup { Largo } + \markup \null +} +@end lilypond + + +@seealso +Archivos de inicio: +@file{../ly/toc-init.ly}. + + +@predefined +@funindex \table-of-contents +@code{\table-of-contents}, +@funindex \tocItem +@code{\tocItem}. +@endpredefined + + +@node Trabajar sobre los archivos de entrada +@section Trabajar sobre los archivos de entrada +@translationof Working with input files + +@menu +* 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 + + +@node Inclusión de archivos de LilyPond +@subsection Inclusión de archivos de LilyPond +@translationof Including LilyPond files + +@funindex \include +@cindex including files + +Un proyecto grande se puede dividir en varios archivos. Para +referirse a otro archivo, utilice + +@example +\include "otroarchivo.ly" +@end example + +La línea @code{\include "otroarchivo.ly"} equivale a pegar todo el +contenido de @file{otroarchivo.ly} en el archivo actual en el lugar en +que aparece el @code{\include}. Por ejemplo, en un proyecto grande +podríamos querer archivos distintos para cada parte instrumental y +crear un archivo de @qq{partitura completa} que reúne los archivos +individuales de los instrumentos. Normalmente el archivo incluido +define un cierto número de variables que a partir de entonces quedan +disponibles para poderlas utilizar en el archivo de la partitura +completa. En los archivos incluidos se pueden marcar las secciones +etiquetadas para ayudar a hacerlas utilizables en distintos lugares de +la partitura, véase @ref{Distintas ediciones a partir de una misma fuente}. + +Los archivos que están en el directorio de trabajo actual se pueden +referenciar simplemente especificando el nombre después de la +instrucción @code{\include}. Los archivos en otros lugares se pueden +incluir proporcionando una referencia de ruta completa o una ruta +relativa (pero utilice la barra inclinada normal del UNIX, /, no la +barra invertida de DOS/Windows, \, como separador de directorio). Por +ejemplo, si @file{material.ly} está situado un directorio por encima +del directorio de trabajo actual, utilice + +@example +\include "../material.ly" +@end example + +@noindent +o si los archivos de las partes orquestales incluidas están todos +situados en un subdirectorio llamado @file{partes} dentro del +directorio actual, use + +@example +\include "partes/VI.ly" +\include "partes/VII.ly" +... etc. +@end example + +Los archivos de inclusión también pueden contener enunciados +@code{\include} a su vez. De forma predeterminada, estos enunciados +@code{\include} de segundo nivel no se interpretan hasta que se +incorporan al archivo principal, por lo que los nombres de archivo que +especifican deben ser relativos al directorio que contiene el archivo +principal, no al directorio que contiene el archivo incluido. Sin +embargo, este comportamiento se puede modificar pasando la opción +@code{-drelative-includes} en la línea de órdenes (o mediante la +adición de @code{#(ly:set-option 'relative-includes #t)} al principio +del archivo principal de entrada). Con el valor de +@code{relative-includes} establecido, la ruta de cada instrucción +@code{\include} se considera relativa al archivo que contiene dicha +instrucción. Este comportamiento es el recomendado y se convertirá en +el comportamiento predeterminado en una versión futura de lilypond. + +También se pueden incluir archivos de un directorio que está en una +ruta de búsqueda especificada como opción al invocar a LilyPond desde +la línea de órdenes. Los archivos incluidos se especifican usando +solamente su nombre de archivo. Por ejemplo, para compilar mediante +este método un archivo @file{principal.ly} que incluye archivos +situados en un subdirectorio llamado @file{partes}, cambie al +directorio que contiene @file{principal.ly} e introduzca + +@example +lilypond --include=partes principal.ly +@end example + +y en @file{principal.ly} escriba + +@example +\include "VI.ly" +\include "VII.ly" +... etc. +@end example + +Los archivos que se incluyen en muchas partituras se pueden poner en +el directorio de LilyPond @file{../ly} (la localización de este +directorio depende de la instalación: véase +@rlearning{Otras fuentes de información}). Estos archivos se pueden +incluir sencillamente por su nombre en un enunciado @code{\include}. +De esta forma se incluyen los archivos dependientes del idioma como +@file{espanol.ly}. + +LilyPond incluye de forma predeterminada ciertos archivos cuando se +inicia el programa. Estas inclusiones no son visibles para el +usuario, pero los archivos se pueden identificar ejecutando +@code{lilypond --verbose} desde la línea de órdenes. Esto presentará +una lista de rutas y archivos que utiliza LilyPond, junto a muchas +otras indicaciones. De forma alternativa, pueden verse explicaciones +sobre los archivos más importantes de este conjunto en +@rlearning{Otras fuentes de información}. Estos archivos se pueden +editar, pero los cambios realizados sobre ellos se perderán al +instalar una nueva versión de LilyPond. + +Pueden verse ejemplos sencillos sobre el uso de @code{\include} en +@rlearning{Partituras y particellas}. + + +@seealso +Manual de aprendizaje: +@rlearning{Otras fuentes de información}, +@rlearning{Partituras y particellas}. + + +@knownissues + +Si un archivo incluido recibe un nombre igual al de uno de los +archivos de instalación de LilyPond, el archivo que tiene prioridad es +el de los archivos de instalación de LilyPond. + + +@node Distintas ediciones a partir de una misma fuente +@subsection Distintas ediciones a partir de una misma fuente +@translationof Different editions from one source + +Se encuentran disponibles varios mecanismos para facilitar la +producción de distintas versiones de una partitura a partir de la +misma fuente musical. Las variables son quizá más útiles para +combinar secciones extensas de música y/o anotaciones de diversas +formas, mientras que las etiquetas son más útiles para seleccionar una +de entra varias secciones de música más cortas. Cualquiera que sea el +método utilizado, la separación de la notación de la estructura de la +partitura hará que sea más fácil cambiar la estructura dejando intacta +la notación. + +@menu +* Uso de las variables:: +* Uso de etiquetas:: +* Uso de ajustes globales:: +@end menu + +@node Uso de las variables +@unnumberedsubsubsec Uso de las variables +@translationof Using variables + +@cindex variables, uso de las + +Si las secciones de la música se definen dentro de variables, se +pueden reutilizar en distintas partes de la partitura, véase +@rlearning{Organizar las piezas mediante variables}. Por ejemplo, una +partitura vocal @notation{a cappella} con frecuencia incluye una +reducción de piano de las partes para ensayar que es idéntica a la +música vocal, por lo que ésta sólo se tiene que escribir una vez. Se +puede combinar sobre un solo pentagrama la música de dos variables, +véase @ref{Combinación automática de las partes}. He aquí un ejemplo: + +@lilypond[verbatim,quote] +sopranoMusic = \relative c'' { a4 b c b8( a) } +altoMusic = \relative g' { e4 e e f } +tenorMusic = \relative c' { c4 b e d8( c) } +bassMusic = \relative c' { a4 gis a d, } +allLyrics = \lyricmode {King of glo -- ry } +<< + \new Staff = "Soprano" \sopranoMusic + \new Lyrics \allLyrics + \new Staff = "Alto" \altoMusic + \new Lyrics \allLyrics + \new Staff = "Tenor" { + \clef "treble_8" + \tenorMusic + } + \new Lyrics \allLyrics + \new Staff = "Bass" { + \clef "bass" + \bassMusic + } + \new Lyrics \allLyrics + \new PianoStaff << + \new Staff = "RH" { + \set Staff.printPartCombineTexts = ##f + \partcombine + \sopranoMusic + \altoMusic + } + \new Staff = "LH" { + \set Staff.printPartCombineTexts = ##f + \clef "bass" + \partcombine + \tenorMusic + \bassMusic + } + >> +>> +@end lilypond + +Se pueden producir partituras distintas que presenten sólo las partes +vocales o sólo la parte de piano, cambiando solamente los enunciados +estructurales, sin modificar la notación musical. + +Para partituras extensas, las definiciones de variable se pueden poner +en archivos separados que se incluyen más tarde, véase @ref{Inclusión de archivos de LilyPond}. + + +@node Uso de etiquetas +@unnumberedsubsubsec Uso de etiquetas +@translationof Using tags + +@funindex \tag +@funindex \keepWithTag +@funindex \removeWithTag +@cindex etiqueta +@cindex mantener música etiquetada +@cindex quitar música etiquetada + +La instrucción @code{\tag #'@var{parteA}} marca una expresión musical +con el nombre @var{parteA}. Las expresiones etiquetadas de esta +manera se pueden seleccionar o filtrar más tarde por su nombre, usando +bien @code{\keepWithTag #'@var{nombre}} o bien @code{\removeWithTag +#'@var{nombre}}. El resultado de la aplicación de estos filtros a la +música etiquetada es como sigue: + +@multitable @columnfractions .5 .5 +@headitem Filtro + @tab Resultado +@item +Música etiquetada precedida de @code{\keepWithTag #'@var{nombre}} +@tab +Se incluye la música no etiquetada y la música etiquetada con +@var{nombre}; se excluye la música etiquetada con cualquier otro +nombre de etiqueta. +@item +Música etiquetada precedida de @code{\removeWithTag #'@var{nombre}} +@tab +Se incluye la música no etiquetada y la música etiquetada con +cualquier nombre de etiqueta distinto a @var{nombre}; se excluye la +música etiquetada con @var{nombre}. +@item +Música etiquetada no precedida de @code{\keepWithTag} ni de +@code{\removeWithTag} +@tab Se incluye toda la música etiquetada y no etiquetada. +@end multitable + +Los argumentos de las instrucciones @code{\tag}, @code{\keepWithTag} y +@code{\removeWithTag} deben ser un símbolo (como @code{#'partitura} o +@code{#'parte}), seguido de una expresión musical. + +En el ejemplo siguiente vemos dos versiones de una pieza musical, una +que muestra trinos con la notación usual y otra con los trinos +expandidos explícitamente: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand { \repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \keepWithTag #'trills \music +} +\score { + \keepWithTag #'expand \music +} +@end lilypond + +@noindent +De forma alternativa, a veces es más fácil excluir secciones de música: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand {\repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \removeWithTag #'expand + \music +} +\score { + \removeWithTag #'trills + \music +} +@end lilypond + +El filtrado con etiquetas se puede aplicar a articulaciones, textos, +etc. anteponiendo + +@example +-\tag #'@var{mi-etiqueta} +@end example + +a una articulación. Por ejemplo, esto define una nota con una +indicación opcional de digitación y una nota con una anotación +condicional: + +@example +c1-\tag #'finger ^4 +c1-\tag #'warn ^"¡Ojo!" +@end example + +Se pueden poner varias etiquetas sobre expresiones con varias entradas +de @code{\tag}: + +@lilypond[quote,verbatim] +music = \relative c'' { + \tag #'a \tag #'both { a4 a a a } + \tag #'b \tag #'both { b4 b b b } +} +<< +\keepWithTag #'a \music +\keepWithTag #'b \music +\keepWithTag #'both \music +>> +@end lilypond + +Se pueden aplicar varios filtros @code{\removeWithTag} a una sola +expresión musical para quitar varias secciones etiquetadas con nombres +distintos: + +@lilypond[verbatim,quote] +music = \relative c'' { +\tag #'A { a4 a a a } +\tag #'B { b4 b b b } +\tag #'C { c4 c c c } +\tag #'D { d4 d d d } +} +{ +\removeWithTag #'B +\removeWithTag #'C +\music +} +@end lilypond + +Dos o más filtros @code{\keepWithTag} aplicados a una sola expresión +musical producen la eliminación de @emph{todas} las secciones +etiquetadas, porque el primer filtro quita todas las secciones +etiquetadas excepto la que se nombra, y el segundo filtro elimina +incluso esa sección etiquetada. + + +@seealso +Manual de aprendizaje: +@rlearning{Organizar las piezas mediante variables}. + +Referencia de la notación: +@ref{Combinación automática de las partes}, +@ref{Inclusión de archivos de LilyPond}. + + +@ignore +@c This warning is more general than this placement implies. +@c Rests are not merged whether or not they come from tagged sections. +@c Should be deleted? -td + + +@knownissues + +Multiple rests are not merged if you create a score with more +than one tagged section at the same place. + +@end ignore + +@node Uso de ajustes globales +@unnumberedsubsubsec Uso de ajustes globales +@translationof Using global settings + +@cindex include-settings + +Se pueden incluir ajustes globales a partir de un archivo distinto: + +@example +lilypond -dinclude-settings=MIS_AJUSTES.ly MI_PARTITURA.ly +@end example + +En archivos diferentes se pueden almacenar grupos de ajustes como +el tamaño de la página o las fuentes tipográficas. Ello permite +hacer diferentes ediciones de la mism a partitura así como aplicar +ajustes estándar a muchas partituras, simplemente por medio de la +especificación del archivo de ajustes adecuado. + +Esta técnica también funciona bien con el uso de hojas de estilo, +como se estudia en @rlearning{Hojas de estilo}. + +@seealso +Manual de aprendizaje: +@rlearning{Organizar las piezas mediante variables}, +@rlearning{Hojas de estilo}. + +Referencia de la notación: +@ref{Inclusión de archivos de LilyPond}. + +@node Codificación del texto +@subsection Codificación del texto +@translationof Text encoding + +@cindex Unicode +@cindex UTF-8 +@cindex caracteres no ASCII + +LilyPond usa el conjunto de caracteres definido por el consorcio +Unicode y la norma ISO/IEC 10646. Define un nombre único y un código +para los conjuntos de caracteres que se utilizan en prácticamente +todos los idiomas modernos y también en muchos otros. Unicode se +puede implementar utilizando varios esquemas de codificación +distintos. LilyPond usa la codificación UTF-8 (UTF son las siglas de +@emph{Unicode Transformation Format}, o formato de transformación de +Unicode) que representa todos los caracteres comunes de Latin en un +solo byte, y representa otros caracteres usando un formato de longitud +variable de hasta cuatro bytes. + +El aspecto visual real de los caracteres viene determinado por los +glifos que se definen en las fuentes tipográficas concretas que se +tengan disponibles: una fuente tipográfica define la asignación de un +subconjunto de los códigos de Unicode a glifos. LilyPond usa la +biblioteca Pango para representar y disponer tipográficamente textos +multilingües. + +LilyPond no realiza ninguna conversión en la codificación de la +entrada. Esto significa que cualquier text, ya sea el título, la +letra de la canción o una instrucción musical que contenga caracteres +distintos a los del conjunto ASCII, se deben codificar en UTF-8. La +forma más fácil de escribir dicho texto es utilizar un editor +preparado para Unicode y guardar el archivo con la codificación UTF-8. +Casi todos los editores modernos populares contemplan el UTF-8, por +ejemplo lo hacen vim, Emacs, jEdit, y GEdit. Todos los sistemas MS +Windows posteriores a NT usan Unicode como codificación de caracteres +nativa, de manera que incluso el accesorio Bloc de Notas (Notepad) +puede editar y guardar un archivo en el formato UTF-8. Una +alternativa más funcional para Windows es BabelPad. + +Si un archivo de entrada que contiene un carácter que no es ASCII, no +se guarda en el formato UTF-8, se genera el mensaje de error + +@example +FT_Get_Glyph_Name () error: argumento inválido +@end example + +He aquí un ejemplo que muestra texto cirílico, hebreo y portugués: + +@lilypond[quote] +%c No verbatim here as the code does not display correctly in PDF +% Cyrillic +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} + +% Hebrew +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} + +% Portuguese +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} + +\relative c' { + c2 d e f g f e +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \portuguese } +@end lilypond + +Para introducir un carácter aislado para el que se conoce el punto de +código Unicode pero no está disponible en el editor que se está +usando, use @code{\char ##xhhhh} o bien @code{\char #dddd} dentro de +un bloque @code{\markup}, donde @code{hhhh} es el código hexadecimal +del carácter en cuestión y @code{dddd} es su valor decimal +correspondiente. Pueden omitirse los ceros iniciales, pero es +costumbre indicar los cuatro caracteres en la representación +hexadecimal (observe que @emph{no} debe utilizarse la codificación +UTF-8 del punto de código Unicode después de @code{\char}, pues la +codificación UTF-8 contiene bits adicionales que indican el número de +octetos). Hay tablas de códigos Unicode y un índice de nombres de +caracteres que da el punto de código en hexadecimal para cualquier +carácter en el portal del Consorcio Unicode, +@uref{http://www.unicode.org/}. + + +Por ejemplo, tanto @code{\char ##x03BE} como @code{\char #958} +insertan el carácter Unicode U+03BE, que tiene el nombre Unicode +@qq{Letra griega Xi pequeña}. + +Se puede escribir de esta forma cualquier punto de código Unicode, y +si todos los caracteres especiales se escriben en este formato no es +necesario guardar el archivo de entrada en formato UTF-8. Por +supuesto, debe estar instalada y estar disponible para LilyPond una +fuente tipográfica que contenga codificados todos estos caracteres. + +El ejemplo siguiente muestra valores hexadecimales Unicode que se usan +en cuatro lugares: en una llamada de ensayo, como texto de +articulación, en la letra y como texto independiente bajo la +partitura: + +@lilypond[quote,verbatim] +\score { + \relative c'' { + c1 \mark \markup { \char ##x03EE } + c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } + } + \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } +} +\markup { "Copyright 2008--2011" \char ##x00A9 } +@end lilypond + +@cindex copyright, símbolo de + +Para escribir el símbolo de copyright en la nota de créditos, utilice: + +@example +\header @{ + copyright = \markup @{ \char ##x00A9 "2008" @} +@} +@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 + + + +@node Controlar la salida +@section Controlar la salida +@translationof Controlling output + +@menu +* Extracción de fragmentos de música:: +* Saltar la música corregida:: +* Formatos de salida alternativos:: +* Sustituir la tipografía de la notación:: +@end menu + +@node Extracción de fragmentos de música +@subsection Extracción de fragmentos de música +@translationof Extracting fragments of music + +Es posible citar pequeños fragmentos de una partitura grande +directamente a partir de la salida. Puede compararse con la +separación de una pieza de una partitura, recortándola con tijeras. + +Esto se hace definiendo los compases que se deben recortar. Por +ejemplo, la inclusión de la siguiente definición + +@verbatim +\layout { + clip-regions + = #(list + (cons + (make-rhythmic-location 5 1 2) + (make-rhythmic-location 7 3 4))) +} +@end verbatim + +@noindent +extrae un fragmento empezando por la mitad del quinto compás y +finalizando en el séptimo compás. El significado de @code{5 1 2} es: +después de una blanca (1/2) en el compás 5, y el de @code{7 3 4} +después de tres negras del compás 7. + +Se pueden definir más zonas de recorte añadiendo más parejas de +definición de tiempo rhythmic-location a la lista. + +Para poder utilizar esta funcionalidad, LilyPond se debe invocar con +la opción @code{-dclip-systems}. Los recortes aparecen en la salida +como archivos EPS, y se convierten en PDF y PNG si estos formatos +también están activados. + +Para ver más información sobre los formatos de salida, consulte +@rprogram{Invocar a LilyPond}. + + +@node Saltar la música corregida +@subsection Saltar la música corregida +@translationof Skipping corrected music + +@funindex skipTypesetting +@funindex showFirstLength +@funindex showLastLength + +Al escribir o copiar música, normalmente sólo es interesante de ver y +corregir la música cercana al final (donde estamos añadiendo las +notas). Para acelerar este proceso de corrección, es posible saltar +la composición tipográfica de todos excepto unos pocos de los últimos +compases. Esto se consigue poniendo + +@verbatim +showLastLength = R1*5 +\score { ... } +@end verbatim + +@noindent +en nuestro archivo fuente. Esto hará que se tracen sólo los últimos +cinco compases (suponiendo un compás de 4/4) de cada una de las +partituras @code{\score} del archivo de entrada. Para piezas largas, +el tipografiado de únicamente una parte pequeña es con frecuencia un +orden de magnitud más rápido que el de la obra completa. Si estamos +trabajando sobre el principio de una partitura que ya hemos +tipografiado (p.ej., para añadir una parte instrumental nueva), +también puede ser útil la propiedad @code{showFirstLength}. + +Este mecanismo de pasar por alto partes de un partitura se puede +controlar con un grano más fino mediante la propiedad +@code{Score.skipTypesetting}. Cuando su valor está establecido, no se +lleva a cabo ningún tipografiado en absoluto. + +Esta propiedad se usa también para controlar la salida al archivo +MIDI. Observe que pasa por alto todos los eventos, incluidos el tempo +y los cambios de instrumento. Está usted advertido. + +@lilypond[quote,relative=2,ragged-right,verbatim] +c8 d +\set Score.skipTypesetting = ##t +e8 e e e e e e e +\set Score.skipTypesetting = ##f +c8 d b bes a g c2 +@end lilypond + +En música polifónica, @code{Score.skipTypesetting} afecta a todas las +voces y pentagramas, ahorrando más tiempo incluso. + +@node Formatos de salida alternativos +@subsection Formatos de salida alternativos +@translationof Alternative output formats + +@cindex salida de gráficos de vector escalables +@cindex SVG, salida +@cindex salida de PostScript encapsulado +@cindex EPS, salida +@cindex PostScript encapsulado, salida de + +Los formatos de salida predeterminados para la partitura impresa son +el formato de documento portátil (PDF) y PostScript (PS). Los +formatos de salida Gráficos de vector escalables (SVG), PostScript +encapsulado (EPS) y Gráficos de red portátiles (PNG) también están +disponibles a través de opciones de la línea de órdenes, véase +@rprogram{Opciones de la línea de órdenes para lilypond}. + + +@node Sustituir la tipografía de la notación +@subsection Sustituir la tipografía de la notación +@translationof Replacing the notation font + +Gonville es una alternativa a la tipografía Feta que se utiliza en +LilyPond y se puede descargar de: +@example +@uref{http://www.chiark.greenend.org.uk/~sgtatham/gonville/ ,http://www.chiark.greenend.org.uk/~sgtatham/gonville/} +@end example + +Aquí presentamos algunos compases de muestra tipografiados con la +fuente Gonville: + +@c NOTE: these images are a bit big, but that's important +@c for the font comparison. -gp +@sourceimage{Gonville_after,,,} + +Aquí hay unos compases de muestra tipografiados en la fuente Feta de +LilyPond: + +@sourceimage{Gonville_before,,,} + +@subsubheading Instrucciones de instalación para MacOS + +Descargue y extraiga el archivo zip. Copie la carpeta @code{lilyfonts} +a @file{@var{SHARE_DIR}/lilypond/current}; para más información, +consulte @rlearning{Otras fuentes de información}. Mueva la carpeta +@code{fonts} existente a @code{fonts_orig} y mueva la carpeta +@code{lilyfonts} a @code{fonts}. Sencillamente vuelva a mover +@code{fonts_orig} a @code{fonts} para volver a la fuente Feta. + +@seealso +Manual de aprendizaje: +@rlearning{Otras fuentes de información}. + +@knownissues + +Gonville no se puede usar para tipografiar notación de @q{Música +Antigua}. Diríjase a la página web del autor para obtener más +información sobre éste y otros asuntos, entre ellos el régimen de +licencias de Gonville. + + +@node Salida MIDI +@section Salida MIDI +@translationof MIDI output + +@cindex sonido +@cindex MIDI + +El MIDI (Musical Instrument Digital Interface, Interfase Digital para +Instrumentos Musicales) es un estándar para interconectar y controlar +instrumentos musicales electrónicos. Un archivo o secuencia MIDI es +una serie de notas dentro de un conjunto de pistas. No es un archivo +de sonidos reales; se necesita un programa reproductor especial para +traducir la serie de notas en sonidos de verdad. + +Cualquier música se puede convertir a archivos MIDI, de manera que +podamos escuchar lo que hayamos introducido. Esto es muy conveniente +para comprobar la corrección de la música; las octavas equivocadas o +las alteraciones erróneas se ponen de relieve muy claramente al +escuchar la salida MIDI. + +La salida estándar de MIDI es un poco primitiva; de forma opcional, se +encuentra disponible una salida MIDI mejorada y mucho más realista, +por medio de @ref{El script Articulate}. + +@c TODO Check this +La salida MIDI reserva un canal por cada pentagrama, y otro para los +ajustes globales. Por ello, el archivo MIDI no debe tener más de 15 +pautas (o 14 si no se usa la percusión). Otros pentagramas permanecen +en silencio. + +@menu +* Crear archivos MIDI:: +* El bloque MIDI:: +* ¿Qué sale por el MIDI?:: +* Repeticiones y MIDI:: +* Control de los matices en el MIDI:: +* Percusión en MIDI:: +* El script Articulate:: +@end menu + +@node Crear archivos MIDI +@subsection Crear archivos MIDI +@translationof Creating MIDI files + +Para crear un MIDI a partir de una pieza de música, escriba un bloque +@code{\midi} en la partitura, por ejemplo: + +@example +\score @{ + @var{...música...} + \midi @{ @} +@} +@end example + +Si hay un bloque @code{\midi} dentro de un @code{\score} que no tenga +ningún bloque @code{\layout}, solamente se producirá MIDI. Si se +necesita una notación impresa, debe haber también un bloque +@code{\layout}: + +@example +\score @{ + @var{...música...} + \midi @{ @} + \layout @{ @} +@} +@end example + +Se traducen correctamente a la salida MIDI la altura y duración de las +notas, las ligaduras de unión, matices y cambios de tempo. Las +indicaciones dinámicas, crescendi y decrescendi se traducen a niveles +de volumen MIDI. Las marcas dinámicas se traducen a una fracción fija +del rango de volumen MIDI disponible. Los crescendi y decrescendi +hacen que el volumen varía linealmente entre sus dos extremos. El +efecto de las indicaciones dinámicas sobre la salida MIDI se puede +eliminar por completo, véase @ref{El bloque MIDI}. + +El tempo inicial y los cambios de tempo posteriores se pueden +especificar utilizando la instrucción @code{\tempo} dentro de la +propia notación musical. Se reflejan en cambios de tempo en la salida +MIDI. Esta instrucción normalmente hace que se imprima la indicación +metronómica, pero esto se puede eliminar, véase @ref{Indicaciones metronómicas}. +Más abajo se describe una forma alternativa de especificar el tempo +MIDI inicial o global, véase @ref{El bloque MIDI}. + +Debido a ciertas limitaciones de Windows, la extensión predeterminada +para los archivos MIDI en Windows es @code{.mid}. Otros sistemas +operativos utilizan la extensión @code{.midi}. Si prefiere una +extensión diferente, inserte la siguiente línea en el nivel jerárquico +superior del archivo de entrada, antes del inicio de cualquier bloque +@code{\book}, @code{\bookpart} o @code{\score}: + +@example +#(ly:set-option 'midi-extension "midi") +@end example + +La línea anterior establece la extensión predeterminada para los +archivos MIDI a @code{.midi}. + +De forma alternativa, esta opción se puede también proporcionar en la +línea de órdenes: + +@example +lilypond … -dmidi-extension=midi archivoLily.ly +@end example + + +@unnumberedsubsubsec Nombres de instrumentos + +@cindex instrumento, nombres de +@funindex Staff.midiInstrument + +El nombre del instrumento MIDI se establece mediante la propiedad +@code{Staff.midiInstrument}. El nombre del instrumento se debe elegir +de entre los que están en la lista que aparece en @ref{Instrumentos MIDI}. + +@example +\new Staff @{ + \set Staff.midiInstrument = #"glockenspiel" + @var{...notes...} +@} +@end example + +@example +\new Staff \with @{midiInstrument = #"cello"@} @{ + @var{...notes...} +@} +@end example + +Si el instrumento elegido no coincide exactamente con uno de los +instrumentos de la lista de instrumentos MIDI, se usará el instrumento +Piano de Cola (@code{"acoustic grand"}). + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-midi-output-to-one-channel-per-voice.ly} + +@knownissues + +@c In 2.11 the following no longer seems to be a problem -td +@ignore +Unterminated (de)crescendos will not render properly in the midi file, +resulting in silent passages of music. The workaround is to explicitly +terminate the (de)crescendo. For example, + +@example +@{ a4\< b c d\f @} +@end example + +@noindent +will not work properly but + +@example +@{ a4\< b c d\!\f @} +@end example + +@noindent +will. +@end ignore + +Los cambios del volumen MIDI sólo tienen lugar al principio de la +nota, por lo que los crescendi y decrescendi no pueden afectar al +volumen de una sola nota. + +No todos los reproductores de MIDI manejar adecuadamente los cambios de +tempo de la salida MIDI. Entre los reproductores que se sabe que +funcionan se encuentran el Reproductor de Medios de MS Windows y +@uref{http://@/timidity@/.sourceforge@/.net/,timidity}. + + +@node El bloque MIDI +@subsection El bloque MIDI +@translationof MIDI block + +@cindex bloque MIDI + +Si se requiere una salida MIDI, debe aparecer un bloque @code{\midi} +dentro de un bloque de partitura. Es análogo al bloque layout de +diseño de página, pero algo más simple. Con frecuencia, el bloque +@code{\midi} se deja vacío, pero puede contener reorganizaciones de +contextos, definiciones de contexto nuevas o código para fijar valores +de propiedades. Por ejemplo, en el ejemplo siguiente se establece el +tempo inicial exportado al archivo MIDI sin hacer que se imprima una +indicación de tempo: + +@example +\score @{ + @var{...música...} + \midi @{ + \context @{ + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + @} + @} +@} +@end example + +En este ejemplo, el tempo se establece a 72 pulsos de negra por +minuto. Esta clase de especificación de tempo no puede tomar como +argumento una figura con puntillo. Si necesitamos una figura con +puntillo, dividimos la nota con puntillo en figuras más pequeñas. Por +ejemplo, un tempo de 90 negras con puntillo por minuto se puede +especificar como 270 corcheas por minuto: + +@example +tempoWholesPerMinute = #(ly:make-moment 270 8) +@end example + +@cindex MIDI, definiciones de contexto + +Las definiciones de contexto siguen con precisión la misma sintaxis +que la de un bloque @code{\layout}. Los módulos de traducción para el +sonido reciben el nombre de ejecutantes. Los contextos para la salida +MIDI se definen en @file{../ly/performer-init.ly}, véase +@rlearning{Otras fuentes de información}. Por ejemplo, para eliminar +el efecto de los matices de la salida MIDI, inserte las líneas +siguientes en el bloque @code{\midi@{ @}}. + +@example +\midi @{ + ... + \context @{ + \Voice + \remove "Dynamic_performer" + @} +@} +@end example + +La salida MIDI se crea sólo cuando se incluye un bloque @code{\midi} +dentro de un bloque de partitura definido con una instrucción +@code{\score}. + +@example +\score @{ + @{ @dots{}notas@dots{} @} + \midi @{ @} +@} +@end example + +@node ¿Qué sale por el MIDI? +@subsection ¿Qué sale por el MIDI? +@translationof What goes into the MIDI output? + +@unnumberedsubsubsec Contemplado en el MIDI + +@cindex alturas en MIDI +@cindex MIDI, alturas +@cindex cuartos de tono en MIDI +@cindex MIDI, cuartos de tono +@cindex microtonos en MIDI +@cindex MIDI, microtonos +@cindex acordes, nombres de, en MIDI +@cindex MIDI, nombres de +@cindex duraciones en MIDI +@cindex MIDI, duraciones +@cindex Articlulate, scripts +@cindex MIDI, articulaciones +@cindex articulaciones en MIDI +@cindex trinos en MIDI +@cindex grupetos en MIDI +@cindex rallentando en MIDI +@cindex accelerando en MIDI +@c TODO etc + +Los siguientes elementos de notación se reflejan en la salida MIDI: + +@itemize +@item Alturas +@item Microtonos (véase @ref{Alteraciones accidentales}. La reproducción necesita un reproductor que contemple la curvatura de tono o @emph{pitch bend}.) +@item Acordes escritos como nombres de acorde +@item Ritmos escritos como duraciones de las notas, incluidos los grupos de valoración especial +@item Trémolos escritos sin @q{@code{:}[@var{número}]} +@item Ligaduras de unión +@item Matices o indicaciones de dinámica +@item Crescendi y decrescendi sobre varias notas +@item Cambios de tempo insertados con una marca metronómica +@item Letra de las canciones +@end itemize + +Utilizando @ref{El script Articulate}, a la lista anterior se añaden +una serie de elementos: + +@itemize +@item Articulaciones (ligaduras de expresión, picados, etc) +@item Trinos, mordentes circulares +@item Rallentando y accelerando +@end itemize + + +@unnumberedsubsubsec No contemplado en el MIDI + +@c TODO index as above + +Los siguientes elementos de notación no tienen ningún efecto sobre la +salida MIDI, a no ser que utilicemos @ref{El script Articulate}: + +@itemize +@item Duraciones escritas como anotaciones, p.ej. el swing +@item Cambios de tempo escritos como anotaciones sin marca de tempo +@item Staccato y otras articulaciones y ornamentos +@item Ligaduras de expresión y de fraseo +@item Crescendi y decrescendi sobre una nota única +@item Trémolos introducidos con @q{@code{:}[@var{número}]} +@item Bajo cifrado +@item Acordes microtonales +@end itemize + + +@node Repeticiones y MIDI +@subsection Repeticiones y MIDI +@translationof Repeats in MIDI + +@cindex repeticiones, expandir +@funindex \unfoldRepeats + +Con un poco de trucaje, se puede hacer que cualquier tipo de +repetición esté presente en la salida MIDI. Esto se consigue mediante +la aplicación de la función musical @code{\unfoldRepeats}. Esta +función cambia todas las repeticiones a repeticiones desplegadas. + +@lilypond[quote,verbatim] +\unfoldRepeats { + \repeat tremolo 8 { c'32 e' } + \repeat percent 2 { c''8 d'' } + \repeat volta 2 { c'4 d' e' f' } + \alternative { + { g' a' a' g' } + { f' e' d' c' } + } +} +\bar "|." +@end lilypond + +En partituras con varias voces, el desplegado de las repeticiones en +la salida MIDI solo se produce correctamente si @emph{todas y cada +una} de las voces incluye las repeticiones de manera completa y +explícita. + +Al crear un archivo de partitura que use @code{\unfoldRepeats} para el +MIDI, es necesario hacer dos bloques @code{\score}: uno para el MIDI +(con repeticiones desplegadas) y otro para la notación impresa (con +repeticiones de volta --primera y segunda vez--, tremolo --trémolo--, +y percent --repetición de compases--). Por ejemplo, + +@example +\score @{ + @var{..música..} + \layout @{ .. @} +@} +\score @{ + \unfoldRepeats @var{..música..} + \midi @{ .. @} +@} +@end example + + +@node Control de los matices en el MIDI +@subsection Control de los matices en el MIDI +@translationof Controlling MIDI dynamics + +La dinámica en el MIDI está implementada por medio del intérprete +Dynamic_performer que reside de forma predeterminada dentro del +contexto Voice. Es posible controlar el volumen MIDI general, el +volumen relativo de los matices dinámicos y el volumen relativo de los +distintos instrumentos. + +@unnumberedsubsubsec Indicaciones dinámicas + +Los matices o indicaciones de dinámica se traducen a una fracción fija +del rango de volumen MIDI disponible. Las fracciones predeterminadas +se extienden desde 0.25 para @notation{ppppp} hasta 0.95 para +@notation{fffff}. El conjunto de indicaciones dinámicas y las +fracciones asociadas pueden verse en @file{../scm/midi.scm}, véase +@rlearning{Otras fuentes de información}. Este conjunto de fracciones +se puede cambiar o extender proporcionando una función que toma como +argumento una indicación dinámica y devuelve la fracción requerida, y +estableciendo @code{Score.dynamicAbsoluteVolumeFunction} a esta +función. + +Por ejemplo, si se requiere una indicación dinámica +@notation{rinforzando}, @code{\rfz}, ésta no tiene ningún efecto +predeterminado sobre el volumen MIDI, pues no está incluida en el +conjunto predeterminado. De igual manera, si se define una indicación +dinámica nueva con @code{make-dynamic-script}, ésta tampoco estará +incluida en el conjunto predeterminado. El ejemplo siguiente muestra +cómo hay que añadir el volumen MIDI para estas indicaciones dinámicas. +La función Scheme establece la fracción a 0.9 si se encuentra una +indicación dinámica rfz, y en caso contrario llama a la función +predeterminada. + +@lilypond[verbatim,quote] +#(define (myDynamics dynamic) + (if (equal? dynamic "rfz") + 0.9 + (default-dynamic-absolute-volume dynamic))) + +\score { + \new Staff { + \set Staff.midiInstrument = #"cello" + \set Score.dynamicAbsoluteVolumeFunction = #myDynamics + \new Voice { + \relative c'' { + a4\pp b c-\rfz + } + } + } + \layout {} + \midi {} +} +@end lilypond + +Como alternativa, si se necesitara redefinir la tabla completa de +fracciones, sería mejor usar el procedimiento +@notation{default-dynamic-absolute-volume} que aparece en +@file{../scm/midi.scm} y la tabla asociada como modelo. El último +ejemplo de esta sección muestra cómo se puede hacer esto. + +@unnumberedsubsubsec Volumen maestro MIDI + +El volumen general máximo y mínimo de las indicaciones dinámicas de +MIDI se controla estableciendo valores para las propiedades +@code{midiMinimumVolume} y @code{midiMaximumVolume} en el nivel de +@code{Score}. Estas propiedades tienen efecto solamente sobre las +indicaciones dinámicas, por ello si queremos que tengan validez desde +el comienzo de la partitura, se debe colocar allí una indicación de +dinámica. La fracción que corresponde a cada indicación dinámica se +modifica con esta fórmula: + +@example +midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fracción +@end example + +En el ejemplo siguiente, el rango de intensidad dinámica del volumen +general MIDI está limitado al intervalo desde 0.2 hasta 0.5. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + midiMinimumVolume = #0.2 + midiMaximumVolume = #0.5 + } + } +} +@end lilypond + +@unnumberedsubsubsec Balance entre instrumentos (i) + +Si las propiedades de volumen MIDI máximo y mínimo están establecidas +en el contexto @code{Staff} se pueden controlar los volúmenes +relativos de los instrumentos MIDI. Esto proporciona un ecualizador +de instrumentos básico que puede realzar significativamente la calidad +de la salida MIDI. + +En este ejemplo se reduce el volumen del clarinete con relación al de +la flauta. Debe haber una indicación dinámica en la primera nota de +cada instrumento para que esto funcione correctamente. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \set Staff.midiMinimumVolume = #0.7 + \set Staff.midiMaximumVolume = #0.9 + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \set Staff.midiMinimumVolume = #0.3 + \set Staff.midiMaximumVolume = #0.6 + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@unnumberedsubsubsec Balance entre instrumentos (ii) + +Si las propiedades de volumen MIDI máximo y mínimo no están +establecidas, de forma predeterminada LilyPond aplica un pequeño grado +de ecualización a algunos instrumentos. Los instrumentos y la +ecualización que se aplica se muestra en la tabla +@notation{instrument-equalizer-alist} en @file{../scm/midi.scm}. + +El ecualizador básico predeterminado se puede sustituir estableciendo +@code{instrumentEqualizer} en el contexto @code{Score} a un +procedimiento Scheme nuevo que acepte el nombre de un instrumento MIDI +como único argumento y devuelva un par de fracciones que dan los +volúmenes máximo y mínimo que se aplican a dicho instrumento. Esta +sustitución se hace de la misma forma que mostramos para restablecer +la fracción de volumen absoluto @code{dynamicAbsoluteVolumeFunction} +al comienzo de esta sección. El ecualizador predeterminado, +@notation{default-instrument-equalizer}, en +@file{../scm/midi.scm}, muestra cómo se puede escribir tal +procedimiento. + +El ejemplo siguiente establece los volúmenes relativos de la flauta y +del clarinete a los mismos valores que el ejemplo anterior. + +@lilypond[verbatim,quote] +#(define my-instrument-equalizer-alist '()) + +#(set! my-instrument-equalizer-alist + (append + '( + ("flute" . (0.7 . 0.9)) + ("clarinet" . (0.3 . 0.6))) + my-instrument-equalizer-alist)) + +#(define (my-instrument-equalizer s) + (let ((entry (assoc s my-instrument-equalizer-alist))) + (if entry + (cdr entry)))) + +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Score.instrumentEqualizer = #my-instrument-equalizer + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@ignore +@c Delete when satisfied this is adequately covered elsewhere -td + +@n ode Microtones in MIDI +@s ubsection Microtones in MIDI + +@cindex microtones in MIDI + +Microtones consisting of half sharps and half flats are exported +to the MIDI file and render correctly in MIDI players which support +pitch bending. See @ref{Nombres de las notas en otros idiomas}. Here is +an example showing all the half sharps and half flats. It can be +copied out and compiled to test microtones in your MIDI player. + +@lilypond[verbatim,quote] +\score { + \relative c' { + c4 cih cis cisih + d4 dih ees eeh + e4 eih f fih + fis4 fisih g gih + gis4 gisih a aih + bes4 beh b bih + } + \layout {} + \midi {} +} +@end lilypond +@end ignore + + +@node Percusión en MIDI +@subsection Percusión en MIDI +@translationof Percussion in MIDI + +La notación de los instrumentos de percusión se realiza normalmente en +un contexto @code{DrumStaff} y cuando se hace de esta forma se les da +salida correctamente por el canal MIDI@tie{}10, pero ciertos +instrumentos de percusión de altura determinada, como el xilófono, +marimba, vibráfono, timbales, etc., se tratan como instrumentos +@qq{normales} y la música para estos instrumentos se debe introducir +en contextos de @code{Staff} normales, no en un contexto +@code{DrumStaff}, para obtener la salida MIDI correcta. + +Ciertos sonidos de altura indeterminada que están incluidos en el +estándar General MIDI, como el tom melódico, el tambor taiko, los +tambores sintéticos, etc., no se pueden acceder a través del canal +MIDI@tie{}10, por lo que la notación para dichos instrumentos se debe +introducir también en un contexto normal de @code{Staff}, utilizando +las alturas normales adecuadas. + +Muchos instrumentos de percusión no están incluidos dentro del +estándar General MIDI, p.ej. las castañuelas. El método más +fácil (aunque no satisfactorio) de producir una salida MIDI al +escribir para estos instrumentos es sustituirlos por el sonido más +parecido del conjunto estándar. + +@c TODO Expand with examples, and any other issues + +@knownissues + +Debido a que el estándar General MIDI no contiene golpes de aro +(@emph{rim shots}), para este propósito se utiliza en su lugar el +golpe lateral de baqueta (@emph{sidestick}). + +@node El script Articulate +@subsection El script Articulate +@translationof The Articulate script + +Es posible obtener una salida MIDI más real si se utiliza el script +Articulate. Éste trata de tener en cuenta las articulaciones +(ligaduras de expresión, picados, etc), mediante la sustitución de las +notas con secuencias musicales de silencios y notas escaladas en el +tiempo de forma apropiada. También trata de desplegar los trinos, +grupetos circulares, etc. y responder a las indicaciones de +rallentando y accelerando. + +Para utilizar el script Articulate, tenemos que incluirlo al principio +de nuestro archivo de entrada: + +@example +\include "articulate.ly" +@end example + +y en la sección @code{\score}, hacer lo siguiente: + +@example +\unfoldRepeats \articulate << + resto de la partitura... +>> +@end example + +Después de alterar el código de entrada de esta manera el resultado +visual se altera profundamente, pero el bloque @code{\midi} estándar +produce un archivo MIDI mejorado. + +Si bien no es esencial para que funcione el script Articulate, podemos +insertar la instrucción @code{\unfoldRepeats} según aparece en el +ejemplo anterior, dado que habilita la ejecución de abreviaturas tales +como los @notation{trinos}. + +@knownissues + +Articulate acorta los acordes, y ciertos fragmentos de música +(especialmente la música de órgano) es posible que suene peor. diff --git a/Documentation/es/notation/keyboards.itely b/Documentation/es/notation/keyboards.itely new file mode 100644 index 0000000000..05cf7deb4f --- /dev/null +++ b/Documentation/es/notation/keyboards.itely @@ -0,0 +1,729 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 104566603d933821fbdbb7696ef0b5bbd3fa0797 + + 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 Teclados y otros instrumentos de varios pentagramas +@section Teclados y otros instrumentos de varios pentagramas +@translationof Keyboard and other multi-staff instruments + +@lilypondfile[quote]{keyboard-headword.ly} + +Esta sección se ocupa de varios aspectos de la notación musical que +son exclusivos de los instrumentos de teclado y otros instrumentos +cuya notación se realiza sobre varios pentagramas, como el arpa o el +vibráfono. A los efectos de nomenclatura, en esta sección se +denominan abreviadamente @qq{teclados} a todo este grupo de +instrumentos de varios pentagramas, aunque algunos de ellos no tienen +teclado. + + +@menu +* Notación común para instrumentos de teclado:: +* Piano:: +* Acordeón:: +* Arpa:: +@end menu + +@node Notación común para instrumentos de teclado +@subsection Notación común para instrumentos de teclado +@translationof Common notation for keyboards + +Esta sección trata aspectos de notación que pueden aparecer en casi +todos los instrumentos de teclado. + +@menu +* Referencias para teclados:: +* Cambiar de pentagrama manualmente:: +* Cambiar de pentagrama automáticamente:: +* Líneas de cambio de pentagrama:: +* Plicas de pentagrama cruzado:: +@end menu + +@node Referencias para teclados +@unnumberedsubsubsec Referencias para teclados +@translationof References for keyboards + +@cindex piano, pentagramas de +@cindex pentagramas de piano +@cindex pentagramas de instrumentos de teclado +@cindex teclado, pentagramas para instrumentos de +@cindex tecla, pentagramas para instrumentos de +@cindex teclados, matices centrados +@cindex dinámicas, indicaciones centradas en música de tecla +@cindex piano, música de, matices centrados +@cindex centrados, matices, en música de piano + +@funindex PianoStaff + +La notación de los instrumentos de teclado se suele realizar con +sistemas de piano. Éstos son dos pentagramas normales agrupados +mediante una llave. También se utiliza esta notación para otros +instrumentos de teclado. La música de órgano se escribe normalmente +con dos pentagramas dentro de un grupo @code{PianoStaff} y un tercer +pentagrama normal para los pedales. + +Los pentagramas son hasta cierto punto independientes, pero a veces +las voces pueden cruzarse entre los dos pentagramas. Esta sección +trata técnicas de notación que son particulares de la música de +teclado. + +En otros lugares se tratan varios problemas comunes de la música de +teclado: + +@itemize + +@item La música para teclado suele contener varias voces y el número de +éstas puede variar ampliamente; esto se describe en @ref{Resolución de las colisiones}. + +@item La música para teclado se puede escribir en paralelo, como se describe +en @ref{Escribir música en paralelo}. + +@item Los matices dinámicos se pueden colocar en un contexto +@code{Dynamics}, entre los dos contextos @code{Staff} +para alinear las indicaciones de matiz sobre una línea horizontal +equidistante de los dos pentagramas; véase @ref{Matices dinámicos}. + +@item Las digitaciones se indican como puede verse en @ref{Indicaciones de digitación}. + +@item Las indicaciones de pedal de órgano se insertan como articulaciones, +véase @ref{Lista de articulaciones}. + +@item Las líneas verticales de rejilla se pueden mostrar como se describe en @ref{Líneas de rejilla}. + +@item La música para teclado incluye con frecuencia ligaduras +@notation{Laissez vibrer} así como ligaduras sobre arpegios y +trémolos, descritos en @ref{Ligaduras de unión}. + +@item La colocación de arpegios a través de varias voces y pentagramas se +cubre en @ref{Arpegio}. + +@item Las indicaciones de trémolo se describen en @ref{Repeticiones de trémolo}. + +@item Varios de los trucos que pueden ser necesarios en música para teclado +se muestran en @rlearning{Ejemplos reales de música}. + +@item Las notas ocultas se pueden usar para producir ligaduras de unión que +se cruzan entre voces, como se explica en @rlearning{Otras aplicaciones de los trucos}. + +@end itemize + +@c @snippets +@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] +@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly} +@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 + +@seealso +Manual de aprendizaje: +@rlearning{Ejemplos reales de música}, +@rlearning{Otras aplicaciones de los trucos}. + +Referencia de la notación: +@c @ref{Agrupar pentagramas}, +@ref{Nombres de instrumentos}, +@ref{Resolución de las colisiones}, +@ref{Escribir música en paralelo}, +@ref{Indicaciones de digitación}, +@ref{Lista de articulaciones}, +@ref{Líneas de rejilla}, +@ref{Ligaduras de unión}, +@ref{Arpegio}, +@ref{Repeticiones de trémolo}. + +Referencia de funcionamiento interno: +@rinternals{PianoStaff}. + +Fragmentos de código: +@rlsr{Keyboards}. + +@node Cambiar de pentagrama manualmente +@unnumberedsubsubsec Cambiar de pentagrama manualmente +@translationof Changing staff manually + +@cindex manual, cambio de pentagrama +@cindex pentagrama, cambios manuales de +@cindex cambio manual de pentagrama +@cindex cruzado, pentagrama, notas de +@cindex notes de pentagrama cruzado +@cindex barras de pentagrama cruzado +@cindex cruzado, pentagrama, barras de + +@funindex \change +@funindex change + +Las voces se pueden cambiar de pentagrama manualmente usando la instrucción + +@example +\change Staff = @var{nombre_del_pentagrama} +@end example + +@noindent +La cadena @var{nombre_del_pentagrama} es el nombre del pentagrama. +Cambia la voz actual de su pentagrama en curso al pentagrama de nombre +@var{nombre_del_pentagrama}. Los valores más corrientes para +@var{nombre_del_pentagrama} son @code{"arriba"} y @code{"abajo"}, o +bien @code{"MD"} y @code{"MI"}. + +El pentagrama al que salta la voz debe existir en el momento del +salto. Si es necesario, los pentagramas se tienen que @qq{mantener +con vida}, véase @ref{Mantener vivos los contextos}. + +Las notas de pentagrama cruzado reciben la barra automáticamente: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + 8 + \change Staff = "down" + g8 fis g + \change Staff = "up" + 8 + \change Staff = "down" + e8 dis e + \change Staff = "up" + } + \new Staff = "down" { + \clef bass + % keep staff alive + s1 + } +>> +@end lilypond + +Si el barrado necesita algún trucaje, efectúe en primer lugar los +cambios en las direcciones de las plicas. Las posiciones de las +barras se miden posteriormente a partir del centro del pentagrama que +está más cerca de la barra. Para ver un ejemplo sencillo de trucaje +de las barras, consulte @rlearning{Arreglar notación con superposiciones}. + +@cindex colisiones de pentagrama cruzado +@cindex colisiones, voces de pentagrama cruzado + +Se puede producir una superposición en la notación cuando las voces se +cruzan de un pentagrama a otro: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + \voiceOne + % Make space for fingering in the cross-staff voice + \once\override DynamicLineSpanner #'staff-padding = #3.4 + e''2\p\< d''\> s1*0\! + } + \new Staff = "down" << + { + \clef bass + s4. e,8\rest g,2\rest + } \\ { + c8\( g c' + \change Staff = "up" + e' g' b'-3 a' g'\) + } + >> +>> +@end lilypond + +La plica y la ligadura de expresión se superponen a la línea del +símbolo de dinámica porque la resolución automática de colisiones se +suspende para las barras, ligaduras y otros objetos de extensión que +conectan notas situadas en distintos pentagramas, así como para las +plicas y articulaciones si su colocación está afectada por un objeto +de extensión de pentagrama cruzado. Las colisiones resultantes se +pueden resolver manualmente donde sea necesario, utilizando los +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: +@rlearning{Arreglar notación con superposiciones}. + +Referencia de la notación: +@ref{Plicas}, +@ref{Barras automáticas}, +@ref{Mantener vivos los contextos}. + +Fragmentos de código: +@rlsr{Keyboards}. + +Referencia de funcionamiento interno: +@rinternals{Beam}, +@rinternals{ContextChange}. + + +@node Cambiar de pentagrama automáticamente +@unnumberedsubsubsec Cambiar de pentagrama automáticamente +@translationof Changing staff automatically + +@cindex cambio automático de pentagrama +@cindex automático, cambio de pentagrama +@cindex pentagrama, cambio automático de + +@funindex \autochange +@funindex autochange +@funindex PianoStaff + +Se puede hacer que las voces cambien automáticamente entre los +pentagramas inferior y superior. La sintaxis para conseguir esto es + +@example +\autochange @dots{}@var{música}@dots{} +@end example + +@noindent +Esto creará dos pentagramas dentro del grupo actual de pentagramas +(normalmente un @code{PianoStaff}), llamados @code{"up"} (arriba) y +@code{"down"} (abajo). El pentagrama inferior estará en clave de Fa +de forma predeterminada. El cambiador automático hace el cambio +basándose en la altura (el Do@tie{}central es el punto de inflexión), +y se adelanta saltando sobre los silencios para hacer cambios por +adelantado. + +@lilypond[quote,verbatim] +\new PianoStaff { + \autochange { + g4 a b c' + d'4 r a g + } +} +@end lilypond + +@cindex relativo, modo, autocambiador y +@cindex autocambiador y el modo relativo + +@funindex \relative +@funindex relative + +Una sección marcada @code{\relative} que se encuentra fuera de +@code{\autochange} no tiene efecto sobre las notas de la música; por +tanto, en caso necesario escriba @code{\relative} dentro de +@code{\autochange}. + +Si se necesita más control sobre los pentagramas individuales, se +pueden crear manualmente con los nombres @code{"up"} y @code{"down"}. +Entonces, la instrucción @code{\autochange} alternará su voz entre los +pentagramas existentes. + +@warning{Si se crean los pentagramas manualmente, @emph{se deben} +llamar @code{"up"} y @code{"down"} (en inglés).} + +Por ejemplo, esto es necesario para colocar una armadura de tonalidad +en el pentagrama inferior: + +@c Keep Ly needed, otherwise 'up' and 'down' get incorrectly translated in verbatim output +@c KEEP LY +@lilypond[quote,verbatim,nogettext] +\new PianoStaff << + \new Staff = "up" { + \new Voice = "melodiaUno" { + \key g \major + \autochange \relative c' { + g8 b a c b d c e + d8 r fis, g a2 + } + } + } + \new Staff = "down" { + \key g \major + \clef bass + } +>> +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Cambiar de pentagrama manualmente}. + +Fragmentos de código: +@rlsr{Keyboards}. + +Referencia de funcionamiento interno: +@rinternals{AutoChangeMusic}. + + +@knownissues + +@cindex acordes, división entre pentagramas con \autochange + +Los cambios de pentagrama pueden no acabar en lugares óptimos. Para +conseguir una salida de alta calidad es mejor especificar manualmente +los cambios de pentagrama. + +Los acordes no se dividen entre los pentagramas; se asignan a un +pentagrama en función de la primera nota nombrada dentro de la +construcción del acorde. + +@node Líneas de cambio de pentagrama +@unnumberedsubsubsec Líneas de cambio de pentagrama +@translationof Staff-change lines + +@cindex seguimiento de voz +@cindex pentagrama, cambio +@cindex cruce de pentagramas +@cindex pentagrama, línea de cambio de +@cindex cruzado, línea de pentagrama +@cindex línea de seguimiento de pentagrama +@cindex línea de cambio de pentagrama +@cindex seguimiento de voz +@cindex voz, seguimiento de +@cindex pentagrama, cambio de +@cindex cruzado, pentagrama + +@funindex followVoice +@funindex \showStaffSwitch +@funindex showStaffSwitch +@funindex \hideStaffSwitch +@funindex hideStaffSwitch + +Cuando una voz cambia a otro pentagrama, se puede imprimir +automáticamente una línea que conecte las notas: + +@lilypond[quote,verbatim,relative=1] +\new PianoStaff << + \new Staff = "one" { + \showStaffSwitch + c1 + \change Staff = "two" + b2 a + } + \new Staff = "two" { + \clef bass + s1*2 + } +>> +@end lilypond + + +@predefined +@code{\showStaffSwitch}, +@code{\hideStaffSwitch}. +@endpredefined + + +@seealso +Fragmentos de código: +@rlsr{Keyboards}. + +Referencia de funcionamiento interno: +@rinternals{Note_head_line_engraver}, +@rinternals{VoiceFollower}. + + +@node Plicas de pentagrama cruzado +@unnumberedsubsubsec Plicas de pentagrama cruzado +@translationof Cross-staff stems + +@cindex plica de pentagrama cruzado +@cindex pentagrama cruzado, plica de +@cindex distancia entre pentagramas en música de piano + +@cindex cruzado, notas de pentagrama +@cindex cruzado, plicas de pentagrama +@cindex cruzado, acordes de pentagrama +@cindex notas de pentagrama cruzado +@cindex plicas de pentagrama cruzado +@cindex acordes de pentagrama cruzado + +@funindex Stem +@funindex cross-staff +@funindex length +@funindex flag-style + +Se pueden hacer acordes que cruzan los pentagramas: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff { + \relative c' { + f8 e4 d8 d f e4 + } + } + \new Staff { + \relative c' { + << { + \clef bass + % stems may overlap the other staff + \override Stem #'cross-staff = ##t + % extend the stems to reach the other staff + \override Stem #'length = #12 + % do not print extra flags + \override Stem #'flag-style = #'no-flag + % prevent beaming as needed + a8 g4 f8 f bes\noBeam g4 + } + \\ + { + f,2 bes4 c + } >> + } + } +>> +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{indicating-cross-staff-chords-with-arpeggio-bracket.ly} + + +@seealso +Fragmentos de código: +@rlsr{Keyboards}. + +Referencia de funcionamiento interno: +@rinternals{Stem}. + + +@node Piano +@subsection Piano +@translationof Piano + +Esta sección trata de aspectos de la notación directamente +relacionados con el piano. + +@menu +* Pedales de piano:: +@end menu + +@node Pedales de piano +@unnumberedsubsubsec Pedales de piano +@translationof Piano pedals + +@cindex piano, pedales de +@cindex pedales de piano +@cindex pedal forte +@cindex pedal derecho +@cindex pedal sostenuto +@cindex derecho, pedal +@cindex forte, pedal +@cindex sostenuto, pedal +@cindex una corda +@cindex tre corde +@cindex sos. +@cindex U.C. + +@funindex \sustainOn +@funindex sustainOn +@funindex \sustainOff +@funindex sustainOff +@funindex \sostenutoOn +@funindex sostenutoOn +@funindex \sostenutoOff +@funindex sostenutoOff +@funindex \unaCorda +@funindex unaCorda +@funindex \treCorde +@funindex treCorde + +En general, los pianos tienen tres pedales que alteran la forma de +producir el sonido: el pedal de mantenimiento (pedal +@notation{derecho} o pedal @notation{forte}), el pedal +@notation{sostenuto} (@notation{sos.}, pedal central) y el pedal +@notation{una corda} (@notation{U.C.}, pedal izquierdo). Los pedales +de mantenimiento como el pedal derecho del piano se encuentran también +en el vibráfono y en la celesta. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn d e g +1\sustainOff +c4\sostenutoOn e g c, +1\sostenutoOff +c4\unaCorda d e g +1\treCorde +@end lilypond + +@cindex pedal, estilos de indicación +@cindex pedal, indicación textual +@cindex pedal, indicación por corchete +@cindex pedal, indicación mixta +@cindex pedal de mantenimiento, estilo de +@cindex mantenimiento, pedal, estilos de + +@funindex pedalSustainStyle +@funindex mixed +@funindex bracket +@funindex text + +Existen tres estilos de indicaciones de pedal: textual, corchete y +mixta. El pedal derecho y el pedal de una corda utilizan el estilo +textual de forma predeterminada, mientras que el pedal sostenuto +utiliza el método mixto de forma predeterminada. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn g c2\sustainOff +\set Staff.pedalSustainStyle = #'mixed +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2\sustainOff +\set Staff.pedalSustainStyle = #'bracket +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2 +\bar "|." +@end lilypond + +La colocación de las instrucciones de pedal se corresponden con el +movimiento físico del pedal derecho en el transcurso de la ejecución. +La pedalización hasta la barra final de compás se indica mediante la +omisión de la instrucción final de levantar el pedal. + +Las indicaciones de pedal se pueden poner dentro de un contexto +@code{Dynamics}, que los alinea sobre una línea horizontal. + +@seealso +Referencia de la notación: +@ref{Ligaduras de unión}. + +Fragmentos de código: +@rlsr{Keyboards}. + +Referencia de funcionamiento interno: +@rinternals{SustainPedal}, +@rinternals{SustainPedalLineSpanner}, +@rinternals{SustainEvent}, +@rinternals{SostenutoPedal}, +@rinternals{SostenutoPedalLineSpanner}, +@rinternals{SostenutoEvent}, +@rinternals{UnaCordaPedal}, +@rinternals{UnaCordaPedalLineSpanner}, +@rinternals{UnaCordaEvent}, +@rinternals{PianoPedalBracket}, +@rinternals{Piano_pedal_engraver}. + + +@node Acordeón +@subsection Acordeón +@translationof Accordion + +@cindex acordeón + +Esta sección se ocupa de la notación que es exclusiva del acordeón. + +@menu +* Símbolos de Discanto:: +@end menu + +@node Símbolos de Discanto +@unnumberedsubsubsec Símbolos de Discanto +@translationof Discant symbols + +@cindex acordeón, signos de discanto +@cindex discanto, signos de, del acordeón +@cindex acordeón, cambios en el +@cindex acordeón, signos de cambio en el + +Los acordeones se suelen construir con más de un conjunto de lengüetas +que pueden estar al unísono, una octava por encima, o una octava por +debajo de la altura escrita. Cada fabricante de acordeones utiliza +distintos nombres para los @notation{cambios} que seleccionan las +distintas combinaciones de lengüetas, como @notation{oboe}, +@notation{musette} o @notation{bandoneón}, de manera que se ha venido +en usar un sistema de signos para simplificar las instrucciones de +ejecución. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{accordion-discant-symbols.ly} + + +@seealso +Fragmentos de código: +@rlsr{Keyboards}. + + +@node Arpa +@subsection Arpa +@translationof Harp + +Esta sección trata sobre asuntos de notación específicos del arpa. + +@menu +* Referencias para notación de arpa:: +* Pedales de arpa:: +@end menu + +@node Referencias para notación de arpa +@unnumberedsubsubsec Referencias para notación de arpa +@translationof References for harps +@cindex harps +@cindex bisbiglando + +Ciertas características comunes de la música de arpa se estudian en +otras partes de la documentación: + +@itemize + +@item El glissando es la técnica más característica del arpa, +@ref{Glissando}. + +@item El @notation{bisbigliando} se escribe como un trémolo, @ref{Repeticiones de trémolo}. + +@item Los armónicos naturales se estudian bajo el epígrafe @ref{Armónicos}. + +@item Para los arpegios dirigidos y los no arpegios, véase @ref{Arpegio}. + +@end itemize + +@seealso +Referencia de la notación: +@ref{Repeticiones de trémolo}, +@ref{Glissando}, +@ref{Arpegio}, +@ref{Armónicos}. + +@node Pedales de arpa +@unnumberedsubsubsec Pedales de arpa +@translationof Harp pedals + +@cindex arpa, pedales +@cindex arpa, diagramas de pedal +@cindex pedales del arpa +@cindex pedales del arpa, diagramas + +Las arpas tienen siete cuerdas por octava que pueden sonar a la altura +natural, bemol o sostenido. En el arpa de palancas o arpa celta, cada +cuerda se ajusta individualmente, pero en las arpas de pedales todas +las cuerdas con igual nombre de nota se controlan por un único +pedal. Visto de izquierda a derecha desde la posición del ejecutante, +los pedales son Re, Do y Si a la izquierda y Mi, Fa, Sol y La a la +derecha. La posición de los pedales se puede indicar con indicaciones +textuales: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup \concat \vcenter { + [D \flat C \sharp B|E \sharp F \sharp G A \flat] } +c!1_\markup \concat \vcenter { + [ C \natural ] } +@end lilypond + +o mediante diagramas de pedal: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup { \harp-pedal #"^v-|vv-^" } +c!1_\markup { \harp-pedal #"^o--|vv-^" } +@end lilypond + +La instrucción @code{\harp-pedal} acepta una cadena de caracteres en +la que @code{^} es la posición alta del pedal (altura bemol), @code{-} +es la posición intermedia (altura natural), @code{v} es la posición +baja (altura sostenido), y @code{|} es la línea vertical separadora. +Si se antepone @code{o}, el siguiente símbolo de pedal se rodea por +una elipse. + +@seealso +Referencia de la notación: +@ref{Guiones de texto}, +@ref{Instrument Specific Markup}. diff --git a/Documentation/es/notation/notation-appendices.itely b/Documentation/es/notation/notation-appendices.itely new file mode 100644 index 0000000000..0958bd5fd5 --- /dev/null +++ b/Documentation/es/notation/notation-appendices.itely @@ -0,0 +1,1482 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 5becf12f5ada67346f70ad8cfe68589466619305 + + 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 Tablas del manual sobre notación +@appendix Tablas del manual sobre notación +@translationof Notation manual tables + +@menu +* Cuadro de nombres de acordes:: +* Modificadores de acorde más usuales:: +* Afinaciones de cuerdas predefinidas:: +* Diagramas predefinidos de posiciones:: +* Instrumentos MIDI:: +* Lista de colores:: +* La tipografía Feta:: +* Estilos de cabezas de nota:: +* Instrucciones de marcado de texto:: +* Instrucciones de listas de marcado de texto:: +* Lista de articulaciones:: +* Notas de percusión:: +* Glosario técnico:: +* Todas las propiedades de contexto:: +* Propiedades de disposición:: +* Funciones musicales disponibles:: +* Predicados de tipo predefinidos:: +* Funciones de Scheme:: +@end menu + + +@node Cuadro de nombres de acordes +@appendixsec Cuadro de nombres de acordes +@translationof Chord name chart + +Las siguientes tablas muestran dos sistemas estándar para imprimir los +nombres de los acordes, junto a las notas que representan. + +@lilypondfile{chord-names-jazz.ly} + +@node Modificadores de acorde más usuales +@appendixsec Modificadores de acorde más usuales +@translationof Common chord modifiers + +La tabla siguiente presenta los modificadores de acorde que se pueden +usar en el modo de acordes @code{\chordmode} para generar las +estructuras de acordes estándar. + +@multitable @columnfractions .2 .3 .2 .2 + +@item +@b{Tipo de acorde} +@tab +@b{Intervalos} +@tab +@b{Modificador(es)} +@tab +@b{Ejemplo} + + +@item +Mayor +@tab +Tercera mayor y quinta justa +@tab +@code{5} o nada +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:5 +} +@end lilypond + +@item +Menor +@tab +Tercera menor y quinta justa +@tab +@code{m} o @code{m5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m +} +@end lilypond + +@item +Aumentado +@tab +Tercera mayor y quinta aumentada +@tab +@code{aug} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug +} +@end lilypond + +@item +Disminuido +@tab +Tercera menor y quinta disminuida +@tab +@code{dim} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim +} +@end lilypond + +@item +Séptima dominante +@tab +Tríada mayor con séptima menor +@tab +@code{7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:7 +} +@end lilypond + +@item +Séptima mayor +@tab +Tríada mayor y séptima mayor +@tab +@code{maj7} ó @code{maj} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj7 +} +@end lilypond + +@item +Séptima menor +@tab +Tríada menor y séptima menor +@tab +@code{m7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7 +} +@end lilypond + +@item +Séptima disminuida +@tab +Tríada disminuida y séptima disminuida +@tab +@code{dim7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim7 +} +@end lilypond + +@item +Aumentado con séptima +@tab +Tríada aumentada y séptima menor +@tab +@code{aug7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug7 +} +@end lilypond + +@item +Séptima semi-disminuido +@tab +Tríada disminuida y séptima menor +@tab +@code{m7.5-} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7.5- +} +@end lilypond + +@item +Menor con séptima mayor +@tab +Tríada menor con séptima mayor +@tab +@code{m7+} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7+ +} +@end lilypond + +@item +Mayor con sexta +@tab +Tríada mayor y sexta +@tab +@code{6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:6 +} +@end lilypond + +@item +Menor con sexta +@tab +Tríada menor y sexta +@tab +@code{m6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m6 +} +@end lilypond + +@item +Novena dominante +@tab +Séptima dominante con novena mayor +@tab +@code{9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:9 +} +@end lilypond + +@item +Mayor con novena +@tab +Séptima mayor y novena mayor +@tab +@code{maj9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj9 +} +@end lilypond + +@item +Menor con novena +@tab +Séptima menor y novena mayor +@tab +@code{m9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m9 +} +@end lilypond + +@item +Oncena dominante +@tab +Novena dominante con oncena justa +@tab +@code{11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:11 +} +@end lilypond + +@item +Oncena mayor +@tab +Novena mayor y oncena justa +@tab +@code{maj11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj11 +} +@end lilypond + +@item +Menor con oncena +@tab +Novena menor y oncena justa +@tab +@code{m11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m11 +} +@end lilypond + +@item +Trecena dominante +@tab +Novena dominante y trecena mayor +@tab +@code{13} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13 +} +@end lilypond + +@item +Trecena dominante +@tab +Oncena dominante y trecena mayor +@tab +@code{13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13.11 +} +@end lilypond + +@item +Mayor con trecena +@tab +Oncena mayor y trecena mayor +@tab +@code{maj13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj13.11 +} +@end lilypond + +@item +Menor con trecena +@tab +Oncena menor y trecena mayor +@tab +@code{m13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m13.11 +} +@end lilypond + +@item +Segunda suspendida +@tab +Segunda mayor y quinta justa +@tab +@code{sus2} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus2 +} +@end lilypond + +@item +Cuarta suspendida +@tab +Cuarta justa y quinta justa +@tab +@code{sus4} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus4 +} +@end lilypond + +@item +Acorde de potencia o de quinta vacía (de dos notas) +@tab +Perfect fifth +@tab +@code{1.5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + \powerChords + c1:1.5 +} +@end lilypond + +@item +Acorde de potencia o de quinta vacía (de tres notas) +@tab +Perfect fifth, octave +@tab +@code{1.5.8} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + \powerChords + c1:1.5.8 +} +@end lilypond + +@end multitable + +@node Afinaciones de cuerdas predefinidas +@appendixsec Afinaciones de cuerdas predefinidas +@translationof Predefined string tunings + +El cuadro de abajo muestra las afinaciones predefinidas de cuerdas. + +@lilypondfile{display-predefined-string-tunings.ly} + +@node Diagramas predefinidos de posiciones +@appendixsec Diagramas predefinidos de posiciones +@translationof Predefined fretboard diagrams + +El cuadro siguiente presenta los diagramas de posiciones de acordes +predefinidos para guitarra. + +@lilypondfile{display-predefined-fretboards.ly} + +El cuadro siguiente presenta los diagramas de traste predefinidos para ukelele. + +@lilypondfile{display-predefined-ukulele-fretboards.ly} + +El siguiente cuadro presenta los diagramas de posiciones predefinidas +para la mandolina. + +@lilypondfile{display-predefined-mandolin-fretboards.ly} + +@node Instrumentos MIDI +@appendixsec Instrumentos MIDI +@translationof MIDI instruments + +A continuación figura una lista con los nombres que se pueden utilizar +para la propiedad @code{midiInstrument} (instrumento MIDI). El orden +de los instrumentos que aparece aquí, de arriba a abajo empezando por +la columna de la izquierda, corresponde a los 128 números de programa +del estándar General MIDI. + +@example +acoustic grand contrabass lead 7 (fifths) +bright acoustic tremolo strings lead 8 (bass+lead) +electric grand pizzicato strings pad 1 (new age) +honky-tonk orchestral harp pad 2 (warm) +electric piano 1 timpani pad 3 (polysynth) +electric piano 2 string ensemble 1 pad 4 (choir) +harpsichord string ensemble 2 pad 5 (bowed) +clav synthstrings 1 pad 6 (metallic) +celesta synthstrings 2 pad 7 (halo) +glockenspiel choir aahs pad 8 (sweep) +music box voice oohs fx 1 (rain) +vibraphone synth voice fx 2 (soundtrack) +marimba orchestra hit fx 3 (crystal) +xylophone trumpet fx 4 (atmosphere) +tubular bells trombone fx 5 (brightness) +dulcimer tuba fx 6 (goblins) +drawbar organ muted trumpet fx 7 (echoes) +percussive organ french horn fx 8 (sci-fi) +rock organ brass section sitar +church organ synthbrass 1 banjo +reed organ synthbrass 2 shamisen +accordion soprano sax koto +harmonica alto sax kalimba +concertina tenor sax bagpipe +acoustic guitar (nylon) baritone sax fiddle +acoustic guitar (steel) oboe shanai +electric guitar (jazz) english horn tinkle bell +electric guitar (clean) bassoon agogo +electric guitar (muted) clarinet steel drums +overdriven guitar piccolo woodblock +distorted guitar flute taiko drum +guitar harmonics recorder melodic tom +acoustic bass pan flute synth drum +electric bass (finger) blown bottle reverse cymbal +electric bass (pick) shakuhachi guitar fret noise +fretless bass whistle breath noise +slap bass 1 ocarina seashore +slap bass 2 lead 1 (square) bird tweet +synth bass 1 lead 2 (sawtooth) telephone ring +synth bass 2 lead 3 (calliope) helicopter +violin lead 4 (chiff) applause +viola lead 5 (charang) gunshot +cello lead 6 (voice) +@end example + + +@node Lista de colores +@appendixsec Lista de colores +@translationof List of colors + +@subsubheading Colores normales + +La sintaxis para el uso de colores se encuentra detallada en @ref{Colorear objetos}. + +@cindex lista de colores +@cindex colores, lista de + +@verbatim +black white red green +blue cyan magenta yellow +grey darkred darkgreen darkblue +darkcyan darkmagenta darkyellow +@end verbatim + + +@subsubheading Nombres de los colores de X + +Los nombres de los colores de X admiten algunas variantes: + +Un nombre que se escribe como una palabra única con mayúsculas +intercaladas (p.ej. @q{LightSlateBlue}) se puede escribir también como +palabras separadas por espacios y sin mayúsculas (p.ej. @q{light slate +blue}). + +La palabra @q{grey} siempre se puede escribir como @q{gray} (p.ej. @q{DarkSlateGray}). + +Algunos nombres admiten un sufijo numérico (p.ej. @q{LightSalmon4}). + + +@subsubheading Nombres de los colores sin sufijo numérico: + +@verbatim +snow GhostWhite WhiteSmoke gainsboro FloralWhite +OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond +bisque PeachPuff NavajoWhite moccasin cornsilk +ivory LemonChiffon seashell honeydew MintCream +azure AliceBlue lavender LavenderBlush MistyRose +white black DarkSlateGrey DimGrey SlateGrey +LightSlateGrey grey LightGrey MidnightBlue navy +NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue +LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue +DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue +LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise +turquoise cyan LightCyan CadetBlue MediumAquamarine +aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen +MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen +green chartreuse MediumSpringGreen GreenYellow LimeGreen +YellowGreen ForestGreen OliveDrab DarkKhaki khaki +PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold +LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed +SaddleBrown sienna peru burlywood beige +wheat SandyBrown tan chocolate firebrick +brown DarkSalmon salmon LightSalmon orange +DarkOrange coral LightCoral tomato OrangeRed +red HotPink DeepPink pink LightPink +PaleVioletRed maroon MediumVioletRed VioletRed magenta +violet plum orchid MediumOrchid DarkOrchid +DarkViolet BlueViolet purple MediumPurple thistle +DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed +LightGreen +@end verbatim + + +@subsubheading Nombres de los colores con sufijo numérico + +En los nombres siguientes, el sufijo N puede ser un número del 1 al 4: + +@verbatim +snowN seashellN AntiqueWhiteN bisqueN PeachPuffN +NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN +LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN +blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN +LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN +CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN +SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN +OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN +yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN +IndianRedN siennaN burlywoodN wheatN tanN +chocolateN firebrickN brownN salmonN LightSalmonN +orangeN DarkOrangeN coralN tomatoN OrangeRedN +redN DeepPinkN HotPinkN pinkN LightPinkN +PaleVioletRedN maroonN VioletRedN magentaN orchidN +plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN +thistleN +@end verbatim + + +@subsubheading Escala de grises + +Se puede obtener una escala de grises utilizando: + +@example +greyN +@end example + +@noindent +donde N es un número entre 0 y 100. + + +@node La tipografía Feta +@appendixsec La tipografía Feta +@translationof The Feta font + +@cindex Feta, tipografía +@cindex tipografía Feta + +Los símbolos siguientes están disponibles en la tipografía Emmentaler +y es posible acceder a ellos directamente utilizando elementos de +marcado textual con el nombre del glifo +tal y como se muestra en las tablas de abajo, +por ejemplo @code{g^\markup @{\musicglyph #"scripts.segno" @}} ó +@code{\markup @{\musicglyph #"five"@}}. Para ver más información, +consulte @ref{Formatear el texto}. + +@menu +* Glifos de clave:: +* Glifos de indicación de compás:: +* Glifos de cifras:: +* Glifos de alteraciones:: +* Glifos de las cabezas de nota predeterminadas:: +* Glifos de las cabezas de nota especiales:: +* Glifos de las cabezas de nota con formas:: +* Glifos de silencios:: +* Glifos de corchetes:: +* Glifos de puntillos:: +* Glifos de matices dinámicos:: +* Grifos de inscripciones:: +* Glifos de flechas:: +* Glifos de puntas de corchete:: +* Glifos de pedal:: +* Glifos de acordeón:: +* Glifos de vaticana:: +* Glifos de medicea:: +* Glifos de Hufnagel:: +* Glifos de mensural:: +* Glifos de neomensural:: +* Glifos de Petrucci:: +* Glifos de Solesmes:: +@end menu + + +@node Glifos de clave +@unnumberedsubsec Glifos de clave +@translationof Clef glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #clefs +@end lilypond + + +@node Glifos de indicación de compás +@unnumberedsubsec Glifos de indicación de compás +@translationof Time Signature glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #timesig +@end lilypond + + +@node Glifos de cifras +@unnumberedsubsec Glifos de cifras +@translationof Number glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #numbers +@end lilypond + + +@node Glifos de alteraciones +@unnumberedsubsec Glifos de alteraciones +@translationof Accidental glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accidentals +@end lilypond + + +@node Glifos de las cabezas de nota predeterminadas +@unnumberedsubsec Glifos de las cabezas de nota predeterminadas +@translationof Default Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #default-noteheads +@end lilypond + + +@node Glifos de las cabezas de nota especiales +@unnumberedsubsec Glifos de las cabezas de nota especiales +@translationof Special Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #special-noteheads +@end lilypond + + +@node Glifos de las cabezas de nota con formas +@unnumberedsubsec Glifos de las cabezas de nota con formas +@translationof Shape-note Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #shape-note-noteheads +@end lilypond + + +@node Glifos de silencios +@unnumberedsubsec Glifos de silencios +@translationof Rest glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #rests +@end lilypond + + +@node Glifos de corchetes +@unnumberedsubsec Glifos de corchetes +@translationof Flag glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #flags +@end lilypond + + +@node Glifos de puntillos +@unnumberedsubsec Glifos de puntillos +@translationof Dot glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dots +@end lilypond + + +@node Glifos de matices dinámicos +@unnumberedsubsec Glifos de matices dinámicos +@translationof Dynamic glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dynamics +@end lilypond + + +@node Grifos de inscripciones +@unnumberedsubsec Grifos de inscripciones +@translationof Script glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #scripts +@end lilypond + + +@node Glifos de flechas +@unnumberedsubsec Glifos de flechas +@translationof Arrowhead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #arrowheads +@end lilypond + + +@node Glifos de puntas de corchete +@unnumberedsubsec Glifos de puntas de corchete +@translationof Bracket-tip glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #brackettips +@end lilypond + + +@node Glifos de pedal +@unnumberedsubsec Glifos de pedal +@translationof Pedal glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #pedal +@end lilypond + + +@node Glifos de acordeón +@unnumberedsubsec Glifos de acordeón +@translationof Accordion glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accordion +@end lilypond + + +@node Glifos de vaticana +@unnumberedsubsec Glifos de vaticana +@translationof Vaticana glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #vaticana +@end lilypond + + +@node Glifos de medicea +@unnumberedsubsec Glifos de medicea +@translationof Medicaea glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #medicaea +@end lilypond + + +@node Glifos de Hufnagel +@unnumberedsubsec Glifos de Hufnagel +@translationof Hufnagel glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #hufnagel +@end lilypond + + +@node Glifos de mensural +@unnumberedsubsec Glifos de mensural +@translationof Mensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #mensural +@end lilypond + + +@node Glifos de neomensural +@unnumberedsubsec Glifos de neomensural +@translationof Neomensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #neomensural +@end lilypond + + +@node Glifos de Petrucci +@unnumberedsubsec Glifos de Petrucci +@translationof Petrucci glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #petrucci +@end lilypond + + +@node Glifos de Solesmes +@unnumberedsubsec Glifos de Solesmes +@translationof Solesmes glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #solesmes +@end lilypond + + +@node Estilos de cabezas de nota +@appendixsec Estilos de cabezas de nota +@translationof Note head styles + +@cindex nota, estilos de cabeza +Se pueden usar los siguientes estilos para las cabezas de las notas. + +@lilypondfile[noindent]{note-head-style.ly} + + +@node Instrucciones de marcado de texto +@appendixsec Instrucciones de marcado de texto +@translationof Text markup commands + +@include markup-commands.tely + + +@node Instrucciones de listas de marcado de texto +@appendixsec Instrucciones de listas de marcado de texto +@translationof Text markup list commands + +Se puede usar cualquiera de las siguientes instrucciones con +@code{\markuplines}: + +@include markup-list-commands.tely + + +@node Lista de articulaciones +@appendixsec Lista de articulaciones +@translationof List of articulations + +@cindex acento +@cindex apagado +@cindex arco abajo +@cindex arco arriba +@cindex calderón +@cindex circulus +@cindex coda +@cindex downbow +@cindex downmordent +@cindex downprall +@cindex espressivo +@cindex fermata +@cindex flageolet +@cindex grupeto circular +@cindex grupeto circular invertido +@cindex halfopen +@cindex ictus +@cindex indicación de pulgar +@cindex lheel +@cindex lineprall +@cindex longfermata +@cindex ltoe +@cindex marcas de pie +@cindex marcato +@cindex mordent +@cindex open +@cindex órgano, indicaciones de pedal de +@cindex pedal, indicaciones de +@cindex portato +@cindex prall +@cindex pralldown +@cindex prallmordent +@cindex prallprall +@cindex prallup +@cindex pulgar, indicación de +@cindex reverseturn +@cindex rheel +@cindex rtoe +@cindex segno +@cindex semicirculus +@cindex semitrino +@cindex semitrino descendente +@cindex shortfermata +@cindex signumcongruentiae +@cindex snappizzicato +@cindex staccatissimo +@cindex staccato +@cindex tenuto +@cindex trill +@cindex trino +@cindex upmordent +@cindex upprall +@cindex varcoda +@cindex verylongfermata + +Las siguientes inscripciones están disponibles en la tipografía Feta y +se pueden adjuntar a las notas (p.ej. @samp{c\accent}). + +@c Articulations and ornamentations +@c Fingering instructions (for "thumb") +@c Common notation for unfretted strings +@c Bowing indications +@c Harmonics +@c Snap (Bartók) pizzicato +@c Custom percussion staves (for "halfopen" -- not yet funindexed) +@c References for wind instruments (for "open"/"stopped" -- not yet funindexed) + + +@menu +* Indicaciones de articulación:: +* Indicaciones de adornos:: +* Indicaciones de calderón:: +* Indicaciones específicas de ciertos instrumentos:: +* Indicaciones de repetición:: +* Indicaciones antiguas:: +@end menu + + +@node Indicaciones de articulación +@unnumberedsubsec Indicaciones de articulación +@translationof Articulation scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #articulations } +@end lilypond + +@node Indicaciones de adornos +@unnumberedsubsec Indicaciones de adornos +@translationof Ornament scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #ornaments } +@end lilypond + +@node Indicaciones de calderón +@unnumberedsubsec Indicaciones de calderón +@translationof Fermata scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #fermatas } +@end lilypond + +@node Indicaciones específicas de ciertos instrumentos +@unnumberedsubsec Indicaciones específicas de ciertos instrumentos +@translationof Instrument-specific scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #instrument-specific } +@end lilypond + +@node Indicaciones de repetición +@unnumberedsubsec Indicaciones de repetición +@translationof Repeat sign scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #repeats } +@end lilypond + +@node Indicaciones antiguas +@unnumberedsubsec Indicaciones antiguas +@translationof Ancient scripts + +@lilypond[quote] +\include "script-chart.ly" +\include "gregorian.ly" +\new VaticanaStaff { \scriptStaffAncient #ancient } +@end lilypond + + +@node Notas de percusión +@appendixsec Notas de percusión +@translationof Percussion notes + +@lilypondfile[quote]{percussion-chart.ly} + + +@node Glosario técnico +@appendixsec Glosario técnico +@translationof Technical glossary + +Glosario de los términos técnicos y conceptos que se utilizan +internamente en LilyPond. Estos términos pueden aparecer en los +manuales, en las listas de distribución de correo o en el código +fuente. + +@menu +* alist (lista-A):: +* callback:: +* closure (cerradura):: +* glifo:: +* grob (objeto gráfico):: +* inmutable:: +* interfaz:: +* lexer (analizador léxico):: +* mutable:: +* output-def (definición de salida):: +* parser (analizador sintáctico):: +* variable del analizador sintáctico:: +* prob (objeto de propiedades):: +* cerradura simple:: +* smob (objeto de Scheme):: +* stencil (sello):: +@end menu + +@node alist (lista-A) +@unnumberedsubsec alist (lista-A) +@translationof alist + +@cindex lista-A +@cindex lista de asociación +@cindex alist + +Una lista asociativa o abreviadamente una @strong{lista-A} (alist en +inglés) es una pareja de Scheme que asocia un valor con una clave: +@w{@code{(clave . valor)}}. Por ejemplo, en @file{scm/lily.scm}, la +lista-A @w{@qq{type-p-name-alist}} asocia ciertos predicadps de tipo +(p.ej.@tie{}@code{ly:music?}) con nombres (p.ej.@tie{}@qq{music}) de +forma que se pueda informar de los fallos de comprobación de tipo con +un mensaje de consola que incluye el nombre del predicado de tipo +esperado. + +@node callback +@unnumberedsubsec callback +@translationof callback + +@cindex callback + +Una @strong{callback} es una rutina, función o método cuya referencia +se pasa como argumento en una llamada a otra rutina, permitiendo así +que la runtina llamada invoque a aquélla. La técnica permite que una +capa de software de nivel más bajo llame a una función definida en una +capa de nivel más alto. Las funciones de callback se usan ampliamente +en LilyPond para permitir al código de Scheme del nivel de usuario +definir cuántas acciones de bajo nivel se llevan a cabo. + + +@node closure (cerradura) +@unnumberedsubsec closure (cerradura) +@translationof closure + +@cindex cerradura +@cindex cerradura simple + +En Scheme, se crea una @strong{cerradura} cuando una función, por lo +general una expresión lambda, se pasa como variable. La cerradura +contiene el codigo de la función y referencias a las ligaduras léxicas +de las variables libres de la función (es decir, las variables que se +usan en la expresión pero se definen fuera de ella). Cuando más tarde +se aplica esta función a diferentes argumentos, las ligaduras de +variables libres que se capturaron dentro de la cerradura se utilizan +para obtener los valores de las variables libres que se usarán en el +cálculo. Una propiedad útil de las cerraduras es la retención de los +valores internos de las variables de una invocación a otra, +permitiendo así que se pueda mantener un estado. + +Una @strong{cerradura simple} es una cerradura cuya expresión no tiene +variables libres y por ello no tiene ligaduras de variables libres. + +Una cerradura simple se representa en LilyPond mediante un @q{smob} +que contiene la expresión y un método para aplicar la expresión a la +lista de argumentos que se le pasa. + + +@node glifo +@unnumberedsubsec glifo +@translationof glyph + +@cindex glifo +@cindex fuente tipográfica +@cindex tipografía + +Un @strong{glifo} es una representación gráfica particular de un +carácter tipográfico, o una combinación de dos caracteres que forman +una ligadura. Un conjunto de glifos con un estilo y forma uniformes +forman una fuente tipográfica, y un conjunto de fuentes tipográficas +que abarcan varios estilos forman un tipo. + + +@seealso +Referencia de la notación: +@ref{Tipografías}, +@ref{Codificación del texto}. + + +@node grob (objeto gráfico) +@unnumberedsubsec grob (objeto gráfico) +@translationof grob + +@cindex grob +@cindex objetos de presentación +@cindex objetos gráficos + +Los objetos de LilyPond que representan elementos de la notación en la +salida impresa tales como la cabeza y la plica de las notas, ligaduras +de unión y de expresión, digitaciones, claves, et. se denominan +@q{objetos de presentación}, a menudo conocidos como @q{OBjetos +GRáficos}, o abreviadamente @strong{grobs}. Se representan mediante +instancias de la clase @code{Grob}. + +@seealso +Manual de aprendizaje: +@rlearning{Objetos e interfaces}, +@rlearning{Convenciones de nombres de objetos y propiedades}, +@rlearning{Propiedades de los objetos de presentación}. + +Referencia de funcionamiento interno: +@rinternals{grob-interface}, +@rinternals{All layout objects}. + + +@node inmutable +@unnumberedsubsec inmutable +@translationof immutable + +@cindex objetos inmutables +@cindex propiedades inmutables +@cindex propiedades compartidas + +Un objeto @strong{inmutable} es aquél cuyo estado no se puede +modificar después de su creación, en contraste con los objetos +mutables, que se pueden modificar después de su creación. + +En LilyPond, las propiedades inmutables o compartidas definen el +estilo y comportamiento predeterminados de los grobs. Se comparten +por parte de muchos objetos. En aparente contradicción con su nombre, +se pueden cambiar utilizando @code{\override} y @code{\revert}. + +@seealso +Referencia de la notación: +@ref{mutable}. + +@node interfaz +@unnumberedsubsec interfaz +@translationof interface + +@cindex interfaz +@cindex interfaz de grob +@cindex interfaces de objetos gráficos + +Las acciones y propiedades comunes a un conjunto de grobs se agrupan +en un objeto denominado @code{interfaz de grob (grob-inerface)}, o +abreviadamente @q{interfaz}. + +@seealso +Manual de aprendizaje: +@rlearning{Objetos e interfaces}, +@rlearning{Convenciones de nombres de objetos y propiedades}, +@rlearning{Propiedades de los interfaces}. + +Referencia de la notación: +@ref{Interfaces de la presentación}. + +Referencia de funcionamiento interno: +@rinternals{Graphical Object Interfaces}. + + +@node lexer (analizador léxico) +@unnumberedsubsec lexer (analizador léxico) +@translationof lexer + +@cindex lexer +@cindex analizador léxico +@cindex Flex + +Un @strong{lexer} o analizador léxico es un programa que convierte una +secuencia de caracteres en una secuencia de elementos o tokens, en un +proceso que se llama análisis léxico. El analizador léxico de +LilyPond convierte el flujo obtenido a partir de un archivo de entrada +@file{.ly} en un flujo descompuesto en tokens más apto para la +siguiente fase del procesado: el análisis sintáctico, véase +@ref{parser (analizador sintáctico)}. El analizador léxico de +LilyPond lexer está construido con la herramienta Flex a partir del +archivo de lexer @file{lily/lexer.ll} que contiene las reglas léxicas. +Este archivo es parte del código fuente y no se incluye dentro de la +instalación binaria de LilyPond. + + +@node mutable +@unnumberedsubsec mutable +@translationof mutable + +@cindex objetos mutables +@cindex propiedades mutables + +Un objeto @strong{mutable} es aquél cuyo estado se puede modificar +después de su creación, en contraste con un objeto inmutable, cuyo +estado se fija en el momento de la creación. + +En LilyPond, las propiedades mutables contienen valores específicos de +un grob. Por lo general, las listas de otros objetos o los resultados +de los cálculos se almacenan en propiedades mutables. + +@seealso +Referencia de la notación: +@ref{inmutable}. + +@node output-def (definición de salida) +@unnumberedsubsec output-def (definición de salida) +@translationof output-def + +@cindex output-def +@cindex definición de salida + +Una instancia de la clase @code{Output-def} contiene los métodos y +estructuras de datos asociados con un bloque de salida. Se crean +instancias parra los bloques midi, layout y paper. + + +@node parser (analizador sintáctico) +@unnumberedsubsec parser (analizador sintáctico) +@translationof parser + +@cindex parser +@cindex analizador sintáctico +@cindex Bison +@cindex gramática de LilyPond +@cindex BNF + +Un @strong{parser} o analizador sintáctico analiza la secuencia de +tokens o elementos léxicos producida por un analizador léxico para +determinar su estructura gramatical, agrupando los elementos léxicos +en conjuntos mayores según las reglas de la gramática. Si la +secuencia de elementos léxicos es válida, el producto final es un +árbol de tokens cuya raíz es el símbolo inicial de la gramática. Si +no se puede conseguir esto, el archivo es inválido y se produce un +mensaje de error adecuado. Las agrupaciones sintácticas y las reglas +para construir estas agrupaciones a partir de sus elementos +constituyentes para la sintaxis de LilyPond están definidas en +@file{lily/parser.yy} y se muestran en la forma normal de Backus (BNF) +dentro de @ref{Gramática de LilyPond}. Este archivo se usa para +construir el analizador sintáctico durante la compilación del programa +por parte del generador de analizadores sintácticos, Bison. Es parte +del código fuente y no se incluye dentro de la instalación binaria de +LilyPond. + + +@node variable del analizador sintáctico +@unnumberedsubsec variable del analizador sintáctico +@translationof parser variable + +@cindex variable del analizador sintáctico +@cindex variable de Scheme +@cindex variable global +@cindex afterGraceFraction +@cindex musicQuotes +@cindex modo +@cindex output-count +@cindex output-suffix +@cindex parseStringResult +@cindex partCombineListener +@cindex pitchnames +@cindex toplevel-bookparts +@cindex toplevel-scores +@cindex showLastLength +@cindex showFirstLength + +Son variables definidas directamente dentro de Scheme. Su uso directo +por parte de los usuarios está fuertemente desaconsejado, porque su +semántica de ámbito puede ser confusa. + +Cuando el valor de una de estas variables se modifica dentro de un +archivo @file{.ly}, el cambio es global, y a no ser que se revierta +explícitamente, el nuevo valor persistirá hasta el final del archivo, +afectando a todos los bloques @code{\score} así como a los archivos +externos añadidos con la instrucción @code{\include}. Esto puede +conducir a consecuencias imprevistas y en proyectos de composición +tipográfica complejos puede ser difícil de rastrear. + +LilyPond utiliza las siguientes variables del analizador sintáctico: + +@itemize +@item afterGraceFraction +@item musicQuotes +@item mode +@item output-count +@item output-suffix +@item parseStringResult +@item partCombineListener +@item pitchnames +@item toplevel-bookparts +@item toplevel-scores +@item showLastLength +@item showFirstLength +@end itemize + + +@node prob (objeto de propiedades) +@unnumberedsubsec prob (objeto de propiedades) +@translationof prob + +@cindex objeto de propiedades +@cindex prob + +Los OBjetos de PRopiedades, o abreviadamente @strong{probs}, son +instancias de la clase @code{Prob}, que es una sencilla clase básica +que tiene listas-A de propiedades mutables e inmutables y los métodos +para manipularlas. Las clases @code{Music} y @code{Stream_event} +derivan de @code{Prob}. También se crean instancias de la clase +@code{Prob} para almacenar el contenido formateado de los grobs del +sistema y los bloques de títulos durante el proceso de disposición de +la página. + + +@node cerradura simple +@unnumberedsubsec cerradura simple +@translationof simple closure + +Véase @ref{closure (cerradura)}. + + +@node smob (objeto de Scheme) +@unnumberedsubsec smob (objeto de Scheme) +@translationof smob + +@cindex smob +@cindex objeto de Scheme + +Los @strong{Smobs}, u OBjetos de ScheMe, forman parte del mecanismo +utilizado por Guile para exportar objetos de C y de C++ al código de +Scheme. En LilyPond, se crean smobs a partir de objetos de C++ por +medio de macros. Hay dos tipos de objetos smob: los smobs simples, +orientados a objetos inmutables simples como números, y los smobs +complejos, usados para objetos con identidades. Si tiene acceso a las +fuentes de LilyPond sources, encontrará más información en +@file{lily/includes/smob.hh}. + +@node stencil (sello) +@unnumberedsubsec stencil (sello) +@translationof stenci + +@cindex stencil +@cindex sello + +Las instancias de la clase @strong{stencil} contienen la información +necesaria para imprimir un objeto tipográfico. Es un smob simple que +contiene una caja de confinamiento, que a su vez define las +dimensiones vertical y horizontal del objeto, y una expresión de +Scheme que imprime el objeto cuendo se evalúa. Los stencils o sellos +se pueden combinar para formar sellos más complejos definidos por un +árbol de expresiones de Scheme formado a partir de las expresiones de +Scheme de los sellos que lo componen. + +La propiedad @code{stencil}, que conecta a un grob con su sello, se +define dentro del interfaz @code{grob-interface}. + +@seealso +Referencia de funcionamiento interno: +@rinternals{grob-interface}. + + +@node Todas las propiedades de contexto +@appendixsec Todas las propiedades de contexto +@translationof All context properties + +@include context-properties.tely + + +@node Propiedades de disposición +@appendixsec Propiedades de disposición +@translationof Layout properties + +@include layout-properties.tely + + +@node Funciones musicales disponibles +@appendixsec Funciones musicales disponibles +@translationof Available music functions + +@include identifiers.tely + + +@node Predicados de tipo predefinidos +@appendixsec Predicados de tipo predefinidos +@translationof Predefined type predicates + +@include type-predicates.tely + + +@node Funciones de Scheme +@appendixsec Funciones de Scheme +@translationof Scheme functions + +@include scheme-functions.tely diff --git a/Documentation/es/notation/notation.itely b/Documentation/es/notation/notation.itely new file mode 100644 index 0000000000..3394c321de --- /dev/null +++ b/Documentation/es/notation/notation.itely @@ -0,0 +1,37 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097 + + 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 Notación musical +@chapter Notación musical +@translationof Musical notation + +Este capítulo explica cómo crear notación musical. + +@menu +* Alturas:: Escritura y presentación de la altura de las notas. +* Duraciones:: Escritura y presentación de las duraciones de las notas. +* Expresiones:: Añadir expresión a las notas. +* Repeticiones:: Repetir música. +* Notas simultáneas:: Más de una nota a la vez. +* Notación de los pentagramas:: Imprimir pentagramas. +* Anotaciones editoriales:: Notación especial para aumentar la legibilidad. +* Texto:: Añadir texto a las partituras. +@end menu + +@include notation/pitches.itely +@include notation/rhythms.itely +@include notation/expressive.itely +@include notation/repeats.itely +@include notation/simultaneous.itely +@include notation/staff.itely +@include notation/editorial.itely +@include notation/text.itely + diff --git a/Documentation/es/notation/percussion.itely b/Documentation/es/notation/percussion.itely new file mode 100644 index 0000000000..12b57c70c1 --- /dev/null +++ b/Documentation/es/notation/percussion.itely @@ -0,0 +1,645 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 274c916b48393e0f866cbab68c18a505f6fc7ea3 + + 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 Percusión +@section Percusión +@translationof Percussion + +@menu +* Notación común para percusión:: +@end menu + +@node Notación común para percusión +@subsection Notación común para percusión +@translationof Common notation for percussion + +La notación rítmica se emplea primordialmente para la percusión y la +batería, pero también se puede utilizar para mostrar los valores +rítmicos una melodía. + +@menu +* Referencias para percusión:: +* Notación básica de percusión:: +* Redobles:: +* Percusión afinada:: +* Pautas de percusión:: +* Pautas de percusión personalizadas:: +* Notas fantasma:: +@end menu + +@node Referencias para percusión +@unnumberedsubsubsec Referencias para percusión +@translationof References for percussion + +@c TODO add more references. + +@itemize + +@item +La notación de algunas percusiones se puede hacer sobre una pauta de +ritmo; esto se estudia en @ref{Mostrar los ritmos de la melodía} y +@ref{Crear instancias de pentagramas nuevos}. + +@item +La salida MIDI se trata en una sección aparte; véase @ref{Percusión en MIDI}. + +@end itemize + + +@seealso +Referencia de la notación: +@ref{Mostrar los ritmos de la melodía}, +@ref{Crear instancias de pentagramas nuevos}. +@ref{Percusión en MIDI}. + +Fragmentos de código: +@rlsr{Percussion}. + + +@node Notación básica de percusión +@unnumberedsubsubsec Notación básica de percusión +@translationof Basic percussion notation + +@cindex percusión +@cindex batería + +Las notas de percusión se pueden escribir en el modo @code{\drummode}, +que es similar al modo estándar para introducir notas. La manera más +fácil de escribir notas de percusión es utilizar la instrucción +@code{\drums}, que crea el contexto y el modo de entrada apropiados +para percusión: + +@lilypond[quote,verbatim] +\drums { + hihat4 hh bassdrum bd +} +@end lilypond + +Esto es una abreviatura de + +@lilypond[quote,verbatim] +\new DrumStaff { + \drummode { + hihat4 hh bassdrum bd + } +} +@end lilypond + +Cada elemento de un set de percusión lleva un nombre completo y un +nombre abreviado, y los dos se pueden usar en la entrada. La lista +completa de nombre de instrumentos de percusión se encuentra en +@ref{Notas de percusión}. + +@cindex clave de percusión +@cindex percusión, clave + +Observe que la notación normal de las notas con altura determinada +(como @code{cis4}) en un contexto @code{DrumStaff} producen un mensaje +de error. Las claves de percusión se añaden automáticamente al +contexto @code{DrumStaff} pero también se pueden establecer +explícitamente o utilizar otras claves. + +@lilypond[quote,ragged-right,verbatim] +\drums { + \clef treble + hh4 hh hh hh + \break + \clef percussion + bd4 bd bd bd +} +@end lilypond + + +Hay ciertos detalles respecto a cómo está contemplado el MIDI para los +instrumentos de percusión; para ver los detalles consulte +@ref{Percusión en MIDI}. + + +@seealso +Referencia de la notación: +@ref{Percusión en MIDI}, +@ref{Notas de percusión}. + +Archivos de inicio: +@file{ly/drumpitch-init.ly}. + +Fragmentos de código: +@rlsr{Percussion}. + + +@node Redobles +@unnumberedsubsubsec Redobles +@translationof Drum rolls + +Los redobles se indican mediante tres barras cruzadas en la plica. +Para las negras o notas más largas, las tres barras se muestran +explícitamente, las corcheas se presentan con dos barras cruzadas +(siendo la barra de corchea la tercera), y los redobles más breves que +las corcheas tienen una barra cruzada para complementar las barras +normales. Esto se consigue mediante la notación de trémolo, +@code{:32}, véase @ref{Repeticiones de trémolo}. He aquí un ejemplo de +redobles de caja: + +@lilypond[quote,verbatim] +\drums { + \time 2/4 + sn16 sn8 sn16 sn8 sn8:32 ~ + sn8 sn8 sn4:32 ~ + sn4 sn8 sn16 sn16 + sn4 r4 +} +@end lilypond + +Los golpes de baqueta se pueden indicar mediante la colocación de +@code{^"R"} o @code{^"L"} después de la nota. La propiedad +@code{staff-padding} se puede sobreescribir para conseguir una línea +de base satisfactoria. + +@lilypond[quote,verbatim] +\drums { + \repeat unfold 2 { + sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" + } +} +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Percussion}. + + +@node Percusión afinada +@unnumberedsubsubsec Percusión afinada +@translationof Pitched percussion + +Ciertos instrumentos de percusión de altura determinada (p.ej.: el +xilófono, el vibráfono y los timbales) se escriben usando pentagramas +normales. Esto se estudia en otras secciones del manual. + +@seealso +@c +@c TODO: possibly link to an alternate section of NR 3.5, if +@c "percussion in MIDI" gets a separate subsubsection for +@c pitched percussion sounds. -gp +Referencia de la notación: +@ref{Percusión en MIDI}. + +Fragmentos de código: +@rlsr{Percussion}. + + +@node Pautas de percusión +@unnumberedsubsubsec Pautas de percusión +@translationof Percussion staves + +@cindex percusión +@cindex batería + +Una parte de percusión para más de un instrumento, normalmente utiliza +una pauta de varias líneas donde cada posición dentro de la pauta se +refiere a un elemento de percusión. Para tipografiar la música, se +deben interpretar las notas dentro de los contextos +@rinternals{DrumStaff} y @rinternals{DrumVoice}. + +@lilypond[quote,verbatim] +up = \drummode { + crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat +} +down = \drummode { + bassdrum4 snare8 bd r bd sn4 +} +\new DrumStaff << + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + +El ejemplo anterior muestra una notación polifónica prolija. La +notación polifónica abreviada, descrita en @rlearning{Oigo voces}, +también se puede usar. Por ejemplo, + +@lilypond[quote,verbatim] +\new DrumStaff << + \drummode { + bd4 sn4 bd4 sn4 + << { + \repeat unfold 16 hh16 + } \\ { + bd4 sn4 bd4 sn4 + } >> + } +>> +@end lilypond + +También existen otras posibilidades en lo referente a la disposición. +Para usarlas, establezca la propiedad @code{drumStyleTable} en el +contexto @rinternals{DrumVoice}. Se han predefinido las siguientes +variables: + +@table @code + +@item drums-style +Es la opción por defecto. Tipografía un típico set de percusión sobre +pentagrama: + +@lilypond[quote,line-width=10.0\cm] +nam = \lyricmode { + cymc cyms cymr hh hhc hho hhho hhp + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } +mus = \drummode { + cymc cyms cymr hh hhc hho hhho hhp \break + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } +\score { + << \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics \nam + >> + \layout { + \context { + \Score + \override LyricText #'font-family = #'typewriter + \override BarNumber #'transparent =##T + } + } +} +@end lilypond + +El esquema de percusión contempla seis tambores graves (toms) +distintos. Cuando haya menos toms, sencillamente seleccione aquellos +que producen el resultado deseado, es decir, para tener toms en las +tres líneas centrales utilizará @code{tommh}, @code{tomml} y +@code{tomfh}. + +@item timbales-style +Esto tipografía timbales en una pauta de dos líneas: + +@lilypond[quote,ragged-right] +nam = \lyricmode { timh ssh timl ssl cb } +mus = \drummode { timh ssh timl ssl cb s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + \override StaffSymbol #'line-count = #2 + \override StaffSymbol #'staff-space = #2 + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) + drumStyleTable = #timbales-style + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item congas-style +Esto tipografía congas en una pauta de dos líneas: + +@lilypond[quote,ragged-right] +nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } +mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + drumStyleTable = #congas-style + \override StaffSymbol #'line-count = #2 + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item bongos-style +Esto tipografía bongos sobre una pauta de dos líneas: + +@lilypond[quote,ragged-right] +nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } +mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override StaffSymbol #'line-count = #2 + drumStyleTable = #bongos-style + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item percussion-style +Para tipografiar toda clase de percusiones simples sobre pautas de una +línea: + +@lilypond[quote,ragged-right] +nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } +mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } + +<< + \new DrumStaff \with{ + \remove Bar_engraver + drumStyleTable = #percussion-style + \override StaffSymbol #'line-count = #1 + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond +@end table + + +@node Pautas de percusión personalizadas +@unnumberedsubsubsec Pautas de percusión personalizadas +@translationof Custom percussion staves + +Si no le gusta ninguna de las listas predefinidas, puede definir su +propia lista al principio de su archivo + +@lilypond[quote,verbatim] +#(define mydrums '( + (bassdrum default #f -1) + (snare default #f 0) + (hihat cross #f 1) + (halfopenhihat cross "halfopen" 1) + (pedalhihat xcircle "stopped" 2) + (lowtom diamond #f 3))) +up = \drummode { hh8 hh hhho hhho hhp4 hhp } +down = \drummode { bd4 sn bd toml8 toml } + +\new DrumStaff << + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + +@snippets + +@c FIXME: MOVE ALL THESE TO LSR! -gp + +He aquí algunos ejemplos adicionales: + +Dos bloques de madera, escritos con wbh (@emph{woodblock-high}, bloque +alto) y wbl (@emph{woodblock-low} bloque bajo) + +@lilypond[quote,verbatim] +% These lines define the position of the woodblocks in the stave; +% if you like, you can change it or you can use special note heads +% for the woodblocks. +#(define mydrums '((hiwoodblock default #t 3) + (lowoodblock default #t -2))) + +woodstaff = { + % This defines a staff with only two lines. + % It also defines the positions of the two lines. + \override Staff.StaffSymbol #'line-positions = #'(-2 3) + + % This is necessary; if not entered, the barline would be too short! + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) +} + +\new DrumStaff { + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + % with this you load your new drum style table + \woodstaff + + \drummode { + \time 2/4 + wbl8 wbl16 wbl wbh8-> wbl | + wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | + } +} +@end lilypond + +Observe que en este caso especial se debe alterar la longitud de la +línea divisoria con @code{\override Staff.BarLine #'bar-extent #'(de . a)}. +En caso contrario resulta demasiado corta. También debe definir las +posiciones de las dos líneas del pentagrama. Para más información +sobre estos delicados asuntos, consulte @ref{El símbolo del pentagrama}. + +Una pandereta, escrita mediante @q{tamb} (@emph{tambourine}): + +@lilypond[quote,verbatim] +#(define mydrums '((tambourine default #t 0))) + +tambustaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Tambourine" +} + +\new DrumStaff { + \tambustaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + \time 6/8 + tamb8. tamb16 tamb8 tamb tamb tamb | + tamb4. tamb8 tamb tamb | + % the trick with the scaled duration and the shorter rest + % is neccessary for the correct ending of the trill-span! + tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | + } +} +@end lilypond + + +Música para gong, introducida con @q{tt} (tam-tam): + +@lilypond[quote,verbatim] +#(define mydrums '((tamtam default #t 0))) + +tamtamstaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Tamtam" +} + +\new DrumStaff { + \tamtamstaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + tt 1 \pp \laissezVibrer + } +} +@end lilypond + +Dos campanas, introducidas con @q{cb} (@emph{cowbell}, cencerro) y +@q{rb} (@emph{ridebell}, campana normal) + +@lilypond[quote,verbatim] +#(define mydrums '((ridebell default #t 3) + (cowbell default #t -2))) + +bellstaff = { + \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Different Bells" +} + +\new DrumStaff { + \bellstaff + \drummode { + \time 2/4 + rb8 rb cb cb16 rb-> ~ | + rb16 rb8 rb16 cb8 cb | + } +} +@end lilypond + +Aquí un breve ejemplo procedente de la @q{Historia del soldado} de +Stravinsky: + +@lilypond[quote,verbatim] +#(define mydrums '((bassdrum default #t 4) + (snare default #t -4) + (tambourine default #t 0))) + +global = { + \time 3/8 s4. + \time 2/4 s2*2 + \time 3/8 s4. + \time 2/4 s2 +} + +drumsA = { + \context DrumVoice << + { \global } + { \drummode { + \autoBeamOff + \stemDown sn8 \stemUp tamb s8 | + sn4 \stemDown sn4 | + \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | + \stemDown sn8 \stemUp tamb s8 | + \stemUp sn4 s8 \stemUp tamb + } + } + >> +} + +drumsB = { + \drummode { + s4 bd8 s2*2 s4 bd8 s4 bd8 s8 + } +} + +\layout { + indent = #40 +} + +\score { + \new StaffGroup << + \new DrumStaff { + \set DrumStaff.instrumentName = \markup { + \column { + "Tambourine" + "et" + "caisse claire s. timbre" + } + } + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsA + } + + \new DrumStaff { + \set DrumStaff.instrumentName = #"Grosse Caisse" + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsB } + >> +} +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Percussion}. + +Referencia de funcionamiento interno: +@rinternals{DrumStaff}, +@rinternals{DrumVoice}. + + +@c FIXME: check name -gp +@node Notas fantasma +@unnumberedsubsubsec Notas fantasma +@translationof Ghost notes + +Las notas fantasma para la batería e instrumentos de percusión se +pueden crear utilizando la instrucción @code{\parenthesize} detallada +en @ref{Paréntesis}. Sin embargo, el modo por defecto +@code{\drummode} no incluye el complemento grabador +@code{Parenthesis_engraver} que permite esto. + +@lilypond[quote,ragged-right,verbatim] +\new DrumStaff \with { + \consists "Parenthesis_engraver" +} +<< + \context DrumVoice = "1" { s1 } + \context DrumVoice = "2" { s1 } + \drummode { + << + { + hh8[ hh] hh16 + < \parenthesize sn > hh + < \parenthesize sn > hh8 hh + } \\ + { + bd4 r4 bd8 bd r8 bd + } + >> + } +>> +@end lilypond + +@noindent +Observe, además, que debe añadir acordes (paréntesis en ángulo @code{< +>}) alrededor de cada una de las instrucciones @code{\parenthesize}. + + +@seealso +Fragmentos de código: +@rlsr{Percussion}. + \ No newline at end of file diff --git a/Documentation/es/notation/pitches.itely b/Documentation/es/notation/pitches.itely new file mode 100644 index 0000000000..ddf1edc355 --- /dev/null +++ b/Documentation/es/notation/pitches.itely @@ -0,0 +1,3043 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 57e3ef0a15d9679cf31de90b2584e9803226d367 + + 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 Alturas +@section Alturas +@translationof Pitches + +@lilypondfile[quote]{pitches-headword.ly} + +En esta sección se discute cómo especificar la altura de las notas. +Este proceso se compone de tres fases: entrada, modificación y salida. + +@menu +* Escritura de notas:: +* Modificación de varias notas a la vez:: +* Imprimir las alturas:: +* Cabeza de las notas:: +@end menu + + +@node Escritura de notas +@subsection Escritura de notas +@translationof Writing pitches + +En esta sección se describe la manera de introducir la altura de las +notas. Existen dos formas distintas de colocar las notas en su octava +correspondiente: el modo absoluto y el relativo. En casi todas las +ocasiones, será más práctico el modo relativo. + +@menu +* Escritura de octava absoluta:: +* Escritura de octava relativa:: +* Alteraciones accidentales:: +* Nombres de las notas en otros idiomas:: +@end menu + + +@node Escritura de octava absoluta +@unnumberedsubsubsec Escritura de octava absoluta +@translationof Absolute octave entry + +@cindex nombres de las notas +@cindex alturas +@cindex absoluta +@cindex absoluta, especificación, de la octava +@cindex octava, especificación absoluta +@cindex absoluta, introducción, de la octava +@cindex octava, introducción absoluta + +El nombre de una nota se especifica usando las letras minúsculas de la +@code{a} a la @code{g}. Las notas cuyos nombres van desde @code{c} +hasta @code{b} se imprimen en la octava inferior al Do central. + +@c don't use c' here. +@lilypond[verbatim,quote] +{ + \clef bass + c4 d e f + g4 a b c + d4 e f g +} +@end lilypond + +@cindex octava, marca de cambio de + +@funindex ' +@funindex , + +Se pueden especificar otras octavas mediante una comilla simple +quote@tie{}(@code{'}) o una coma@tie{}(@code{,}) . +Cada@tie{}@code{'} eleva la altura en una octava; cada@tie{}@code{,} +baja la altura una octava. + +@lilypond[verbatim,quote] +{ + \clef treble + c'4 c'' e' g + d''4 d' d c + \clef bass + c,4 c,, e, g + d,,4 d, d c +} +@end lilypond + + +@seealso +Glosario musical: +@rglos{Pitch names}. + +Fragmentos de código: +@rlsr{Pitches}. + + +@node Escritura de octava relativa +@unnumberedsubsubsec Escritura de octava relativa +@translationof Relative octave entry + +@cindex relativo +@cindex relativas, especificación de octavas +@cindex octava, introducción relativa +@cindex relativa, especificación de la octava +@cindex octava, especificación relativa + +@funindex relative +@funindex \relative + +Cuando las octavas se especifican en modo absoluto, es fácil poner por +accidente una nota en la octava equivocada. El modo de octavas +relativas reduce estos errores porque casi todo el tiempo es +innecesario indicar octava alguna. Es más, en el modo absoluto puede +ser difícil encontrar un error aislado, mientras que en el modo +relativo un solo fallo hace que el resto de la pieza esté una octava +más alta o más baja de lo que debería. + + +@example +\relative @var{altura_inicial} @var{expresión_musical} +@end example + +En el modo relativo, se supone que cada nota se encuentra lo más cerca +posible de la nota anterior. Esto significa que la octava de una nota +que está dentro de @code{@var{expresión_musical}} se calcula como sigue: + +@itemize +@item +Si no se usa ninguna marca de cambio de octava en una nota, su octava +se calcula de forma que el intervalo que forme con la nota anterior +sea menor de una quinta. Este intervalo se determina sin considerar +las alteraciones. + +@item +Se puede añadir una marca de cambio de octava@tie{}@code{'} +o@tie{}@code{,} para elevar o bajar la altura, respectivamente, en una +octava más en relación con la altura calculada sin esta marca. + +@item +Se pueden usar varias marcas de cambio de octava. Por ejemplo, +@code{''}@tie{}y @code{,,}@tie{} alteran la altura en dos octavas. + +@item +La altura de la primera nota es relativa a +@code{@var{altura_inicial}}. @code{@var{altura_inicial}} se especifica en +modo de octava absoluta, y se recomienda que sea un Do (una octava de +@code{c}). + +@end itemize + + +Aquí podemos ver el modo relativo en acción: + +@lilypond[verbatim,quote] +\relative c { + \clef bass + c d e f + g a b c + d e f g +} +@end lilypond + +Las marcas de cambio de octava se utilizan para intervalos mayores de +la cuarta: + +@lilypond[verbatim,quote] +\relative c'' { + c g c f, + c' a, e'' c +} +@end lilypond + +Una serie de notas sin ninguna marca de octava puede, a pesar de todo, +abarcar intervalos muy grandes: + +@lilypond[verbatim,quote] +\relative c { + c f b e + a d g c +} +@end lilypond + +Cuando hay unos bloques @code{\relative} anidados dentro de otros, es +de aplicación el bloque @code{\relative} más interno. + +@lilypond[verbatim,quote] +\relative c' { + c d e f + \relative c'' { + c d e f + } +} +@end lilypond + +@code{\relative} no tiene efecto sobre los bloques @code{\chordmode}. + +@lilypond[verbatim,quote] +\new Staff { + \relative c''' { + \chordmode { c1 } + } + \chordmode { c1 } +} +@end lilypond + +@code{\relative} no se permite dentro de los bloques +@code{\chordmode}. + +La música que esa dentro de un bloque @code{\transpose} es absoluta, a +no ser que se incluya una instrucción @code{\relative}. + +@lilypond[verbatim,quote] +\relative c' { + d e + \transpose f g { + d e + \relative c' { + d e + } + } +} +@end lilypond + +@cindex acordes e introducción relativa de la octava +@cindex relativa, introducción de la octava, y acordes + +Si el elemento anterior es un acorde, la primera nota del acorde se +utiliza para determinar la primera nota del siguiente acorde. Dentro +de los acordes, la siguiente nota siempre está en relación a la +anterior. + +@lilypond[verbatim,quote] +\relative c' { + c + + + +} +@end lilypond + +Como se explicó más arriba, la octava de las notas se calcula +solamente a partir de sus nombres, sin tener en cuenta alteración +alguna. Por tanto, un Mi doble sostenido después de un Si se +escribirá más agudo, mientras que un Fa doble sostenido se escribirá +más grave. En otras palabras, se considera a la cuarta doble +aumentada un intervalo menor que la quinta doble disminuida, +independientemente del número de semitonos de cada uno de ellos. + +@lilypond[verbatim,quote] +\relative c'' { + c2 fis + c2 ges + b2 eisis + b2 feses +} +@end lilypond + + +@seealso +Glosario musical: +@rglos{fifth}, +@rglos{interval}, +@rglos{Pitch names}. + +Referencia de la notación: +@ref{Comprobación de octava}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{RelativeOctaveMusic}. + +@cindex relativo, modo, transposición y +@cindex transposición y modo relativo + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + + +@c DEPRECATED +Si no se especifica ninguna @code{@var{altura_inicial}} para +@code{\relative}, entonces se supone que es@tie{}@code{c'}. Sin +embargo, ésta es una opción en desuso y podría desaparecer en +versiones posteriores, por lo que su utilización está desaconsejada. + + +@node Alteraciones accidentales +@unnumberedsubsubsec Alteraciones accidentales +@translationof Accidentals + +@cindex accidental +@cindex key signature +@cindex clef + +@c duplicated in Key signature and Accidentals +@warning{Las alteraciones accidentales y las armaduras son una +frecuente causa de confusión para los nuevos usuarios. En LilyPond, +los nombres de las notas son el código de entrada en bruto; la +armadura y la clave determinan de qué forma se presenta este código en +bruto. Una nota sin alteración como@tie{}@code{c} significa @q{Do +natural}, si que le afecten la armadura ni la clave. Para ver más +información, consulte @rlearning{Alteraciones accidentales y armaduras}.} + +@cindex notas, nombres holandeses de +@cindex notas, nombres predeterminados +@cindex predeterminados, nombres de nota +@cindex sostenido +@cindex bemol +@cindex doble sostenido +@cindex sostenido, doble +@cindex doble bemol +@cindex bemol, doble +@cindex becuadro +@cindex natural, nota + +Se escribe una nota @notation{sostenida} añadiendo @code{is} al nombre +de la nota, y un @notation{bemol} añadiendo @code{es}. Como es de +esperar, un @notation{dobles sostenido} y un @notation{doble bemol} se +obtiene añadiendo @code{isis} o @code{eses}. Esta sintaxis deriva de +los nombres de las notas en holandés. Para utilizar otros nombres +para las alteraciones, consulte @ref{Nombres de las notas en otros idiomas}. + +@lilypond[verbatim,quote,relative=2] +ais1 aes aisis aeses +@end lilypond + +Un becuadro cancelará el efecto de una alteración accidental o de la +armadura. Sin embargo, los becuadros no se codifican dentro de la +sintaxis del nombre de la nota con un sufijo; una nota becuadro se +muestra como un simple nombre de nota natural: + +@lilypond[verbatim,quote,relative=2] +a4 aes a2 +@end lilypond + +@cindex cuartos de tono +@cindex semi-bemoles +@cindex semi-sostenidos + +Se pueden escribir medios bemoles y los medios sostenidos; a +continuación presentamos una serie de DOs cada vez más agudos: + +@lilypond[verbatim,quote,relative=2] +ceseh1 ces ceh c cih cis cisih +@end lilypond + + + +@cindex alteración recordatoria +@cindex alteración de precaución +@cindex alteración con paréntesis +@cindex recordatoria, alteración +@cindex precaución, alteración de +@cindex paréntesis, alteración con + +@funindex ? +@funindex ! + +Normalmente las alteraciones accidentales se imprimen automáticamente, +pero también puede imprimirlas manualmente. Un alteración +recordatoria se puede forzar añadiendo un signo de +admiración@tie{}@code{!} después de la altura de la nota. Se puede +obtener una alteración de precaución (o sea, una alteración entre +paréntesis) añadiendo el signo de interrogación@tie{}@code{?} después +del nombre de la nota. Estas alteraciones adicionales se pueden usar +también para producir notas con becuadro. + +@lilypond[verbatim,quote,relative=2] +cis cis cis! cis? c c c! c? +@end lilypond + +@cindex alteración en nota ligada +@cindex ligadura, alteraciones y + +Las alteraciones sobre notas unidas por ligadura sólo se imprimen al +comienzo de un sistema: + +@lilypond[verbatim,quote,relative=2] +cis1~ cis~ +\break +cis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle,ragged-right] +{hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-extra-naturals-from-being-automatically-added.ly} + +@seealso +Glosario musical: +@rglos{sharp}, +@rglos{flat}, +@rglos{double sharp}, +@rglos{double flat}, +@rglos{Pitch names}, +@rglos{quarter tone}. + +Manual de aprendizaje: +@rlearning{Alteraciones accidentales y armaduras}. + +Referencia de la notación: +@ref{Alteraciones accidentales automáticas}, +@ref{Alteraciones de anotación (musica ficta)}, +@ref{Nombres de las notas en otros idiomas}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{Accidental_engraver}, +@rinternals{Accidental}, +@rinternals{AccidentalCautionary}, +@rinternals{accidental-interface}. + + +@cindex alteración de cuartos de tono +@cindex cuartos de tono, alteraciones + +@knownissues + +No existen estándares reconocidos ampliamente para denotar +los bemoles de tres cuartos, de manera que los símbolos de LilyPond +no se ajustan a ningún estándar. + + +@node Nombres de las notas en otros idiomas +@unnumberedsubsubsec Nombres de las notas en otros idiomas +@translationof Note names in other languages + +@cindex notas, nombres de, en otros idiomas +@cindex alturas, nombres de, otros idiomas +@cindex idioma, nombres de nota en otros +@cindex idioma, alturas en otros + +Existen conjuntos predefinidos de nombres de notas y sus alteraciones +para algunos idiomas aparte del inglés. La selección del idioma de +los nombres de las notas se suele hacer al principio del archivo; el +ejemlo siguiente está escrito utilizando los nombres italianos de las +notas: + +@lilypond[quote,verbatim] +\language "italiano" + +\relative do' { + do re mi sib +} +@end lilypond + +Los idiomas disponibles y los nombres de las notas que definen son los +siguientes: + +@quotation +@multitable {@code{nederlands}} {do re mi fa sol la sib si} +@headitem Idioma + @tab Nombre de las notas +@item @code{nederlands} + @tab c d e f g a bes b +@item @code{catalan} + @tab do re mi fa sol la sib si +@item @code{deutsch} + @tab c d e f g a b h +@item @code{english} + @tab c d e f g a bf b +@item @code{espanol} + @tab do re mi fa sol la sib si +@item @code{italiano} + @tab do re mi fa sol la sib si +@item @code{norsk} + @tab c d e f g a b h +@item @code{portugues} + @tab do re mi fa sol la sib si +@item @code{suomi} + @tab c d e f g a b h +@item @code{svenska} + @tab c d e f g a b h +@item @code{vlaams} + @tab do re mi fa sol la sib si +@end multitable +@end quotation + +Además de los nombres de las notas, los sufijos de las alteraciones +pueden también variar dependiendo del idioma: + +@quotation +@multitable {@code{nederlands}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} +@headitem Idioma + @tab sostenido @tab bemol @tab doble sostenido @tab doble bemol +@item @code{nederlands} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{catalan} + @tab -d/-s @tab -b @tab -dd/-ss @tab -bb +@item @code{deutsch} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{english} + @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp + @tab -ff/-flatflat +@item @code{espanol} + @tab -s @tab -b @tab -ss/-x @tab -bb +@item @code{italiano} + @tab -d @tab -b @tab -dd @tab -bb +@item @code{norsk} + @tab -iss/-is @tab -ess/-es @tab -ississ/-isis + @tab -essess/-eses +@item @code{portugues} + @tab -s @tab -b @tab -ss @tab -bb +@item @code{suomi} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{svenska} + @tab -iss @tab -ess @tab -ississ @tab -essess +@item @code{vlaams} + @tab -k @tab -b @tab -kk @tab -bb +@end multitable +@end quotation + +En holandés, @code{aes} se contrae como @code{as}, pero las dos formas +se aceptan en LilyPond. De forma similar, se aceptan tanto @code{es} +como @code{ees}. Esto se aplica también a +@code{aeses}@tie{}/@tie{}@code{ases} y a +@code{eeses}@tie{}/@tie{}@code{eses}. A veces se definen solamente +estos nombres contraídos en los archivos de idioma correspondientes. + +@lilypond[verbatim,quote,relative=2] +a2 as e es a ases e eses +@end lilypond + +@cindex microtonos +@cindex semi-sostenido +@cindex semi-bemol +@cindex sesqui-sostenido +@cindex sesqui-bemol + +Algunas músicas utilizan microtonos cuyas alteraciones son fracciones +de un sostenido o bemol @q{normales}. La tabla siguiente relacione +los nombres de las notas para las alteraciones de un cuarto de tono en +distintos idiomas; aquí, los prefijos @notation{semi-} y +@notation{sesqui-} respectivamente significan @q{medio} y @q{uno y +medio}. Los idiomas que no aparecen en esta tabla no aportan aún +nombres especiales para las notas. + +@quotation +@multitable {@code{nederlands}} {@b{semi-sostenido}} {@b{semi-bemol}} {@b{sesqui-sostenido}} {@b{sesqui-bemol}} +@headitem Idioma + @tab semi-sostenido @tab semi-bemol @tab sesqui-sostenido @tab sesqui-bemol + +@item @code{nederlands} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{deutsch} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{english} + @tab -qs @tab -qf @tab -tqs @tab -tqf +@item @code{espanol} + @tab -cs @tab -cb @tab -tcs @tab -tcb +@item @code{italiano} + @tab -sd @tab -sb @tab -dsd @tab -bsb +@item @code{portugues} + @tab -sqt @tab -bqt @tab -stqt @tab -btqt +@end multitable +@end quotation + +Casi todos los idiomas presentados aquí están asociados comúnmente con +la música clásica occidental, también conocida como @notation{Período +de la práctica común}. Sin embargo, también están contempladas las +alturas y los sistemas de afinación alternativos: véase @ref{Notación +común para músicas no occidentales}. + + +@seealso +Glosario musical: +@rglos{Pitch names}, +@rglos{Common Practice Period}. + +Referencia de la notación: +@ref{Notación común para músicas no occidentales}. + +Archivos instalados: +@file{scm/define-note-names.scm}. + +Fragmentos de código: +@rlsr{Pitches}. + + +@node Modificación de varias notas a la vez +@subsection Modificación de varias notas a la vez +@translationof Changing multiple pitches + +Esta sección trata de la manera de modificar las alturas. + +@menu +* Comprobación de octava:: +* Transposición:: +* Inversion:: +* Retrograde:: +* Modal transformations:: +@end menu + + +@node Comprobación de octava +@unnumberedsubsubsec Comprobación de octava +@translationof Octave checks + +@cindex octava, comprobación de +@cindex octava, corrección de +@cindex control, alturas de + +@funindex = +@funindex \octaveCheck +@funindex octaveCheck +@funindex controlpitch + +En el modo relativo, es fácil olvidar una marca de cambio de octava. +Las comprobaciones de octava hacen más fácil encontrar estos errores, +mediante la presentación de una advertencia y corrigiendo la octava si +la nota se encuentra en una octava distinta de lo esperado. + +Para comprobar la octava de una nota, especifique la octava absoluta +después del símbolo@tie{}@code{=}. Este ejemplo genera un mensaje de +advertencia (y corrige la altura) porque la segunda nota es la octava +absoluta @code{d''} en lugar de @code{d'} como indica la corrección de +octava. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d='4 d + e2 f +} +@end lilypond + +La octava de las notas se puede comprobar también con la instrucción +@code{\octaveCheck@tie{}@var{altura_de_control}}. +@code{@var{altura_de_control}} se especifica en modo absoluto. Esto +comprueba que el intervalo entre la nota anterior y la +@code{@var{altura_de_control}} se encuentra dentro de una cuarta (es decir, el +cálculo normal para el modo relativo). Si esta comprobación fracasa, +se imprime un mensaje de advertencia, pero la nota previa no se +modifica. Las notas posteriores están en relación a la +@code{@var{altura_de_control}}. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d + \octaveCheck c' + e2 f +} +@end lilypond + +Compare los dos compases siguientes. La primera y tercera +comprobaciones de @code{\octaveCheck} fracasan, pero la segunda es +correcto. + +@lilypond[verbatim,quote] +\relative c'' { + c4 f g f + + c4 + \octaveCheck c' + f + \octaveCheck c' + g + \octaveCheck c' + f +} +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{RelativeOctaveCheck}. + + +@node Transposición +@unnumberedsubsubsec Transposición +@translationof Transpose + +@cindex transporte +@cindex transposición +@cindex transposición de alturas +@cindex transposición de notas +@cindex alturas, transporte de +@cindex notas, transporte de + +@funindex \transpose +@funindex transpose + +Una expresión musical se puede transportar mediante @code{\transpose}. +La sintaxis es +@example +\transpose @var{nota_origen} @var{nota_destino} @var{expresión_musical} +@end example + +Esto significa que la @code{@var{expresión_musical}} se transporta el +intervalo que hay entre las notas @code{@var{nota_origen}} y +@code{@var{nota_destino}}: cualquier nota con la altura de @code{@var{nota_origen}} +se cambia por @code{@var{nota_destino}} y cualquier otra nota se transporta +el mismo intervalo. Las dos notas se introducen en modo absoluto. + +@warning{La música que está dentro de un bloque @code{@bs{}transpose} +es absoluta, a no ser que se incluya una instrucción +@code{@bs{}relative} dentro del bloque.} + +Por ejemplo, tomemos una pieza escrita en la tonalidad de Re mayor. +Se puede transportar hacia arriba a Mi mayor; observe que también la +armadura de la tonalidad se transporta automáticamente. + +@lilypond[verbatim,quote] +\transpose d e { + \relative c' { + \key d \major + d4 fis a d + } +} +@end lilypond + +Si una particella escrita en Do (@notation{afinación de concierto} +normal) se debe tocar con un clarinete en La (para el que un La se +escribe como un Do, y que suena una tercera menor por debajo de lo que +está escrito), la particella correspondiente se produce mediante: + +@lilypond[verbatim,quote] +\transpose a c' { + \relative c' { + \key c \major + c4 d e g + } +} +@end lilypond + +@noindent +Observe que especificamos @code{\key c \major} de forma explícita. Si +no especificamos ninguna tonalidad, las notas se transportan pero no +se imprime la armadura. + +@code{\transpose} distingue entre notas enarmónicas: tanto +@code{\transpose c cis} como @code{\transpose c des} transportarán un +semitono hacia arriba. La primera versión imprimirá sostenidos y las +notas no se moverán de su lugar en la escala, la segunda imprimirá +bemoles de la nota siguiente. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \transpose c cis { \music } + \transpose c des { \music } +} +@end lilypond + +@cindex transpositores, instrumentos +@cindex instrumentos transpositores + +@code{\transpose} también se puede usar para introducir notas escritas +para un instrumento transpositor. Los ejemplos anteriores muestran +cómo escribir alturas en Do (o en @notation{afinación de concierto}) y +tipografiarlas para un instrumento transpositor, pero también es +posible el caso contrario si, por ejemplo, tenemos un conjunto de +partes instrumentales y quiere hacer un guión en Do para el director. +Por ejemplo, al introducir música para trompeta en Si bemol que +comienza por un Mi en la partitura (Re de concierto), se puede +escribir: + +@example +musicaEnSiBemol = @{ e4 @dots{} @} +\transpose c bes, \musicaEnSiBemol +@end example + +@noindent +Para imprimir esta música en Fa (por ejemplo, al arreglarla para +trompa) puede envolver la música existente con otro @code{\transpose}: + +@example +musicaEnSiBemol = @{ e4 @dots{} @} +\transpose f c' @{ \transpose c bes, \musicaEnSiBemol @} +@end example + +@noindent +Para ver más información sobre instrumentos transpositores, consulte +@ref{Transposición de los instrumentos}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} + + +@seealso +Referencia de la notación: +@ref{Transposición de los instrumentos}, +@ref{Inversión}, +@ref{Transformaciones modales}, +@ref{Escritura de octava relativa}, +@ref{Retrogradación}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{TransposedMusic}. + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + +@knownissues + +La conversión relativa no afecta a las secciones @code{\transpose}, +@code{\chordmode} ni @code{\relative} dentro de su argumento. Para +usar el modo relativo dentro de música transportada, se debe colocar +otro @code{\relative} dentro de @code{\transpose}. + +@node Inversión +@unnumberedsubsubsec Inversión +@translationof Inversion + +@cindex inversión +@cindex operación de inversión +@funindex \inversion + +Una expresión musical se puede invertir con: + +@example +\inversion @var{nota-origen} @var{nota-destino} @var{expresión_musical} +@end example + +La @code{@var{expresión_musical}} se invierte intervalo a intervalo, y +después se transporta de manera que @code{@var{nota-origen}} se asigna +a @code{@var{nota-destino}}. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \music + \inversion d' d' \music + \inversion d' ees' \music +} +@end lilypond + +@seealso +Referencia de la notación: +@ref{Transformaciones modales}, +@ref{Retrogradación}, +@ref{Transposición}. + + +@node Retrogradación +@unnumberedsubsubsec Retrogradación +@translationof Retrograde + +@cindex retrogradación, transformación de +@cindex transformación de retrogradación +@cindex operación de retrogradación +@funindex \retrograde +@funindex retrograde + +Se puede revertir una expresión musical para producir su +retrogradación: + +@lilypond[verbatim,quote] +music = \relative c' { c8. ees16( fis8. a16 b8.) gis16 f8. d16 } + +\new Staff { + \music + \retrograde \music +} +@end lilypond + +@knownissues +Las ligaduras de unión manuales dentro de @code{\retrograde} se +reomperán y generarán advertencias. Se pueden generar algunas +ligaduras automáticamente activando +@ref{División automática de las notas}. + +@seealso +Referencia de la notación: +@ref{Inversión}, +@ref{Transformaciones modales}, +@ref{Transposición}. + + +@node Transformaciones modales +@unnumberedsubsubsec Transformaciones modales +@translationof Modal transformations + +@cindex transformaciones modales +@cindex modales, transformaciones +@cindex operaciones modales + +En una composición musical que está basada en una escala, con +frecuencia se transforman los motivos de diversas formas. Un motivo +se puede @notation{transportar} para que comience en distintos lugares +de la escala o puede @notation{invertirse} alrededor de una nota +pivote de la escala. También se puede revertir para producir una +@notation{retrogradación}, véase @ref{Retrogradación}. + +@warning{Cualquier nota que no entre en la escada dada, se dejará sin +transformar.} + +@subsubheading Transposición modal + +@cindex transporte +@cindex transporte modal +@cindex modal, transposición +@cindex transposición modal +@cindex operación de transposición +@funindex \modalTranspose +@funindex modalTranspose + +Se puede transportar un motivo dentro de una escala dada con: + +@example +\modalTranspose @var{nota-origen} @var{nota-destino} @var{escala} @var{motivo} +@end example + +Las notas del @var{motivo} se desplazan dentro de la @var{escala} el +número de grados de la escala dados por el intervalo entre +@var{nota-destino} y @var{nota-origen}: + +@lilypond[verbatim,quote] +diatonicScale = \relative c' { c d e f g a b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \modalTranspose c f \diatonicScale \motif + \modalTranspose c b, \diatonicScale \motif +} +@end lilypond + +Se pueden especificar escalas ascendentes de cualquier longitud y con +cualesquiera intervalos: + +@lilypond[verbatim,quote] +pentatonicScale = \relative c' { ges aes bes des ees } +motif = \relative c' { ees8 des ges,4 } + +\new Staff { + \motif + \modalTranspose ges ees' \pentatonicScale \motif +} +@end lilypond + +Cuando se utiliza con una escala cromática, @code{\modalTranspose} +tiene un efecto similar a @code{\transpose}, pero con la posibilidad +de especificar los nombres de las notas que se quieren usar: + +@lilypond[verbatim,quote] +chromaticScale = \relative c' { c cis d dis e f fis g gis a ais b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \transpose c f \motif + \modalTranspose c f \chromaticScale \motif +} +@end lilypond + +@subsubheading Inversión modal + +@cindex modal, inversion +@cindex inversión modal +@cindex operación de inversión modal +@funindex \modalInversion +@funindex modalInversion + +Se puede invertir un motivo dentro de una escala dada alrededor de una +nota pivote dada y transportada al mismo tiempo en una única +operación, con: + +@example +\modalInversion @var{nota-pivote} @var{nota-destino} @var{escala} @var{motivo} +@end example + +Las notas del @var{motivo} se colocan al mismo número de grados de +distancia de la escala a partir de la @var{nota-pivote} dentro de la +@var{escala}, pero en la dirección opuestoa, y el resultado se +desplaza después dentro de la @var{escala} el número de grados de la +escala dados por el intervalo entre la @var{nota-destino} y la +@var{nota-pivote}. + +Así pues, para invertir sencillamente alrededor de una nota de la +escala, utilice el mismo valor para @var{nota-pivote} y +@var{nota-destino}: + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \modalInversion fis' fis' \octatonicScale \motif +} +@end lilypond + +Para invertir alrededor de una nota pivote entre dos notas de la +escala, invierta alrededor de una de las notas y después transporte en +un grado de la escala. Las dos notas especificadas se pueden +interpretar como que horquillan entre ellas a la nota pivote: + +@lilypond[verbatim,quote] +scale = \relative c' { c g' } +motive = \relative c' { c c g' c, } + +\new Staff { + \motive + \modalInversion c' g' \scale \motive +} +@end lilypond + +La operación combinada de inversión y retrogradación produce la +inversión retrógrada: + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \retrograde \modalInversion c' c' \octatonicScale \motif +} +@end lilypond + +@seealso +Referencia de la notación: +@ref{Inversión}, +@ref{Retrogradación}, +@ref{Transposición}. + + +@node Imprimir las alturas +@subsection Imprimir las alturas +@translationof Displaying pitches + +Esta sección trata de cómo alterar la presentación de la altura de las +notas. + +@menu +* Clave:: +* Armadura de la tonalidad:: +* Corchetes de octava:: +* Transposición de los instrumentos:: +* Alteraciones accidentales automáticas:: +* Tesitura:: +@end menu + +@node Clave +@unnumberedsubsubsec Clave +@translationof Clef + + +@cindex Sol, clave de +@cindex Do, clave de +@cindex Fa, clave de +@cindex violín, clave de +@cindex alto, clave de +@cindex tenor, clave de +@cindex bajo, clave de +@cindex francesa, clave +@cindex soprano, clave de +@cindex mezzosoprano, clave de +@cindex barítono, clave de +@cindex contrabajo, clave de +@cindex clave +@cindex antiguas, claves +@cindex clave antigua +@cindex clave de Sol +@cindex clave de Do +@cindex clave de Fa +@cindex clave de violín +@cindex clave de alto +@cindex clave de tenor +@cindex clave de bajo +@cindex clave francesa +@cindex clave de soprano +@cindex clave de mezzosoprano +@cindex clave de barítono +@cindex clave de contrabajo + +@funindex \clef +@funindex clef + +Es posible cambiar la clave. En todos los ejemplos se muestra el Do +central. Estos nombres de clave pueden (aunque no necesariamente) +encerrarse entre comillas. + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef alto +c2 c +\clef tenor +c2 c +\clef bass +c2 c +@end lilypond + +Otras claves son las siguientes: + +@lilypond[verbatim,quote,relative=1] +\clef french +c2 c +\clef soprano +c2 c +\clef mezzosoprano +c2 c +\clef baritone +c2 c + +\break + +\clef varbaritone +c2 c +\clef subbass +c2 c +\clef percussion +c2 c + +\break + +\clef G % synonym for treble +c2 c +\clef F % synonym for bass +c2 c +\clef C % synonym for alto +c2 c +@end lilypond + +@cindex transpositoras, claves +@cindex clave transpositora +@cindex octava, transposición de +@cindex coral, clave de tenor +@cindex tenor coral, clave + +Al añadir @code{_8} o @code{^8} al nombre de la clave, la clave se +transpone una octava hacia abajo o hacia arriba, respectivamente, y +@code{_15} y @code{^15} la transpone dos octavas. Si es necesario +se pueden usar otros números enteros. El argumento +@var{nombre_de_clave} se debe encerrar entre comillas si contiene +caracteres no alfabéticos: + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef "treble_8" +c2 c +\clef "bass^15" +c2 c +\clef "alto_2" +c2 c +\clef "G_8" +c2 c +\clef "F^5" +c2 c +@end lilypond + +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}. + +@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}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{Clef_engraver}, +@rinternals{Clef}, +@rinternals{OctavateEight}, +@rinternals{clef-interface}. + + +@node Armadura de la tonalidad +@unnumberedsubsubsec Armadura de la tonalidad +@translationof Key signature + +@cindex Armadura de la tonalidad + +@funindex \key +@funindex key + +@c duplicated in Key signature and Accidentals +@warning{Las alteraciones accidentales y las armaduras son una +frecuente causa de confusión para los nuevos usuarios. En LilyPond, +los nombres de las notas son el código de entrada en bruto; la +armadura y la clave determinan de qué forma se presenta este código en +bruto. Una nota sin alteración como@tie{}@code{c} significa @q{Do +natural}, si que le afecten la armadura ni la clave. Para ver más +información, consulte @rlearning{Alteraciones accidentales y armaduras}.} + +La armadura indica la tonalidad en que se toca una pieza. Está +denotada por un conjunto de alteraciones (bemoles o sostenidos) al +comienzo del pentagrama. El establecimiento o modificación de la +armadura se hace con la instrucción @code{\key}: + +@example +\key @var{nota} @var{modo} +@end example + +@funindex \major +@funindex major +@funindex \minor +@funindex minor +@funindex \ionian +@funindex ionian +@funindex \locrian +@funindex locrian +@funindex \aeolian +@funindex aeolian +@funindex \mixolydian +@funindex mixolydian +@funindex \lydian +@funindex lydian +@funindex \phrygian +@funindex phrygian +@funindex \dorian +@funindex dorian + +@cindex modos eclesiásticos +@cindex modos +@cindex mayor, modo +@cindex menor, modo +@cindex eonio, modo +@cindex locrio, modo +@cindex eolio, modo +@cindex mixolidio, modo +@cindex lidio, modo +@cindex frigio, modo +@cindex dórico, modo + +@noindent +Aquí, @code{@var{modo}} debe ser @code{\major} o @code{\minor} para obtener +la tonalidad @code{@var{nota}} mayor o @code{@var{nota}} menor, respectivamente. +También puede usar los nombres estándar de modo (también conocidos +como @notation{modos eclesiásticos}): @code{\ionian} (jónico), +@code{\dorian} (dórico), @code{\phrygian} (frigio), @code{\lydian} +(lidio), @code{\mixolydian} (mixolidio), @code{\aeolian} (eolio) y +@code{\locrian} (locrio). + +@lilypond[verbatim,quote,relative=2] +\key g \major +fis1 +f +fis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Glosario musical: +@rglos{church mode}, +@rglos{scordatura}. + +Manual de aprendizaje: +@rlearning{Alteraciones accidentales y armaduras}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{KeyChangeEvent}, +@rinternals{Key_engraver}, +@rinternals{Key_performer}, +@rinternals{KeyCancellation}, +@rinternals{KeySignature}, +@rinternals{key-cancellation-interface}, +@rinternals{key-signature-interface}. + + +@node Corchetes de octava +@unnumberedsubsubsec Corchetes de octava +@translationof Ottava brackets + +@cindex ottava +@cindex 15ma +@cindex 8va +@cindex octavación + +@funindex set-octavation +@funindex \ottava +@funindex ottava + +Los @notation{corchetes de Ottava} introducen un trasporte adicional +de una octava para el pentagrama. + +@lilypond[verbatim,quote,relative=2] +a2 b +\ottava #-2 +a2 b +\ottava #-1 +a2 b +\ottava #0 +a2 b +\ottava #1 +a2 b +\ottava #2 +a2 b +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ottava-text.ly} + + +@seealso +Glosario musical: +@rglos{octavation}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{Ottava_spanner_engraver}, +@rinternals{OttavaBracket}, +@rinternals{ottava-bracket-interface}. + + +@node Transposición de los instrumentos +@unnumberedsubsubsec Transposición de los instrumentos +@translationof Instrument transpositions + +@cindex transposición de MIDI +@cindex transposición instrumental +@cindex transpositor, instrumento +@cindex MIDI +@cindex MIDI, transposición + +@funindex \transposition +@funindex transposition + +Al tipografiar partituras donde participan instrumentos +transpositores, ciertas partes se pueden tipografiar en un tono +distinto del @notation{tono de concierto}. En estos casos, se debe +especificar la tonalidad del @notation{instrumento transpositor}; de +otro modo, la salida MIDI y las notas guía en otras partes producirían +alturas incorrectas. Para ver más información sobre partes citadas +como guía, consulte @ref{Citar otras voces}. + +@example +\transposition @var{pitch} +@end example + +El tono usado para @code{\transposition} debe corresponderse con el +sonido real que se oye cuando el instrumento transpositor interpreta +un Do central @code{c'} escrito en el pentagrama. Esta nota se +escribe en altura absoluta, por tanto un instrumento que produce un +sonido real un tono más agudo que la música impresa (un instrumento en +Re) debe usar @code{\transposition d'}. La instrucción +@code{\transposition} se debe usar @emph{solamente} si las notas +@emph{no} se van a escribir en afinación de concierto. + +A continuación pueden verse algunas notas para violín y para clarinete +en Si bemol, donde las partes se han introducido usando las notas y la +armadura tal y como aparecen en la partitura del director. Lo que +tocan los dos instrumentos está sonando al unísono. + +@lilypond[verbatim,quote] +\new GrandStaff << + \new Staff = "violin" { + \relative c'' { + \set Staff.instrumentName = #"Vln" + \set Staff.midiInstrument = #"violin" + % not strictly necessary, but a good reminder + \transposition c' + + \key c \major + g4( c8) r c r c4 + } + } + \new Staff = "clarinet" { + \relative c'' { + \set Staff.instrumentName = \markup { Cl (B\flat) } + \set Staff.midiInstrument = #"clarinet" + \transposition bes + + \key d \major + a4( d8) r d r d4 + } + } +>> +@end lilypond + +La @code{\transposition} se puede cambiar durante la pieza. Por +ejemplo, un clarinetista puede cambiar del clarinete en La al +clarinete en Si bemol. + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = #"Cl (A)" +\key a \major +\transposition a +c d e f +\textLengthOn +s1*0^\markup { Switch to B\flat clarinet } +R1 + +\key bes \major +\transposition bes +c2 g +@end lilypond + + +@seealso +Glosario musical: +@rglos{concert pitch}, +@rglos{transposing instrument}. + +Referencia de la notación: +@ref{Citar otras voces}, @ref{Transposición}. + +Fragmentos de código: +@rlsr{Pitches}. + + +@node Alteraciones accidentales automáticas +@unnumberedsubsubsec Alteraciones accidentales automáticas +@translationof Automatic accidentals + +@cindex automáticas, alteraciones +@cindex alteraciones automáticas +@cindex alteraciones accidentales +@cindex alteraciones, estilo de las +@cindex predeterminado, estilo de las alteraciones +@cindex alteraciones, estilo predeterminado de las + +@funindex set-accidental-style +@funindex voice +@funindex default + +Existen muchas convenciones distintas sobre la forma de tipografiar +las alteraciones. LilyPond proporciona una función para especificar +qué estilo de alteraciones usar. Esta función se invoca como sigue: + +@example +\new Staff << + #(set-accidental-style 'voice) + @{ @dots{} @} +>> +@end example + +El estilo de alteraciones se aplica al @code{Staff} en curso de forma +predeterminada (con la excepción de los estilos @code{piano} y +@code{piano-cautionary}, que se explican más adelante). +Opcionalmente, la función puede tomar un segundo argumento que +determina en qué ámbito se debe cambiar el estilo. Por ejemplo, para +usar el mismo estilo en todos los pentagramas del @code{StaffGroup} en +curso, use + +@example +#(set-accidental-style 'voice 'StaffGroup) +@end example + +Están contemplados los siguientes estilos de alteración. Para dar una +muestra de cada uno de los estilos, utilizamos el ejemplo siguiente: + +@lilypond[verbatim,quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +Observe que las últimas líneas de este ejemplo se pueden sustituir por +las siguientes, siempre y cuando queramos usar el mismo estilo en los +dos pentagramas. +@example +\new PianoStaff @{ + << + \context Staff = "up" @{ + %%% cambie la línea siguiente como desee: + #(set-accidental-style 'default 'Score) + \musicA + @} + \context Staff = "down" @{ + \musicB + @} + >> +@} +@end example + + +@c don't use verbatim in this table. +@table @code +@item default (predeterminado) + +@cindex alteraciones, estilo predeterminado + +@funindex default + +Es el comportamiento de composición tipográfica predeterminado. +Corresponde a la práctica común del s. XVIII: las alteraciones +accidentales se recuerdan hasta el final del compás en el que aparecen +y sólo en la misma octava. Así, en el ejemplo siguiente, no se +imprimen becuadros antes del Si natural en el segundo compás ni en el +último Do: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +@item voice (voz) + +@cindex alteración, estilo de voz de +@cindex voz, estilo de alteraciones +@cindex alteraciones estilo moderno +@cindex moderno, estilo de alteraciones +@cindex alteraciones, estilo, moderno-precaución +@cindex moderno-precaución, estilo de alteraciones + +@funindex voice + +El comportamiento normal es recordar las alteraciones accidentales al +nivel de @code{Staff}. En este estilo, sin embargo, se tipografían +las alteraciones individualmente para cada voz. Aparte de esto, la +regla es similar a @code{default}. + +Como resultado, las alteraciones de una voz no se cancelan en las +otras voces, lo que con frecuencia lleva a un resultado no deseado: en +el ejemplo siguiente, es difícil determinar si el segundo La se debe +tocar natural o sostenido. Por tanto, la opción @code{voice} se debe +usar sólo si las voces se van a leer individualmente por músicos +distintos. Si el pentagrama va a utilizarse por parte de un solo +músico (p.ej., un director, o en una partitura de piano), entonces se +deben usar en su lugar los estilos @code{modern} o +@code{modern-cautionary}. + + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'voice) + \musicB + } + >> +} +@end lilypond + +@item modern (moderno) + +@cindex alteraciones, estilo moderno +@cindex moderno, alteraciones de estilo + +@funindex modern + +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 +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 +octavas distintas. De aquí los becuadros antes del Si natural y del +Do en el segundo compás del pentagrama superior: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern) + \musicB + } + >> +} +@end lilypond + +@item modern-cautionary (moderno de precaución) + +@cindex alteraciones, estilo moderno de precaución +@cindex moderno, alteraciones de estilo +@cindex moderno de precaución, alteraciones de estilo + +@funindex modern-cautionary + +Esta regla es similar a @code{modern}, pero las alteraciones +@q{añadidas} (las que no se imprimen en el estilo @code{default}) se +imprimen como alteraciones de precaución. Se imprimen de forma +predeterminada con paréntesis, pero también se pueden imprimir en +tamaño reducido definiendo la propiedad @code{cautionary-style} de +@code{AccidentalSuggestion}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-cautionary) + \musicB + } + >> +} +@end lilypond + +@item modern-voice (moderno, para voces) + +@cindex alteraciones, en varias voces +@cindex alteraciones modernas +@cindex moderno, alteraciones de estilo +@cindex voces, alteraciones en varias +@cindex alteración, estilo moderno de + +@funindex modern-voice + +Esta regla se usa para que puedan leer las alteraciones en varias +voces, tanto músicos que tocan una voz como músicos que tocan todas +las voces. Se imprimen las alteraciones para cada voz, pero @emph{se +cancelan} entre voces dentro del mismo @code{Staff}. Por tanto, el La +en el último compás se cancela porque la cancelación anterior estaba +en una voz distinta, y el Re en el pentagrama inferior se cancela a +causa de la alteración en otra voz en el compás previo: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice) + \musicB + } + >> +} +@end lilypond + +@item modern-voice-cautionary (moderno, voz, de precaución) + +@cindex alteración, estilo de voz de precaución moderno +@cindex alteración de voz de precaución moderno, estilo de +@cindex alteración, moderno de precaución, voz, estilo de + +@funindex modern-voice-cautionary + +Esta regla es la misma que @code{modern-voice}, pero con las +alteraciones añadidas (las que el estilo @code{voice} no imprime) +compuestas como de precaución. Incluso aunque todas las alteraciones +impresas por el estilo @code{default} @emph{son} impresas con esta +regla, algunas de ellas se tipografían como de precaución. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item piano + +@cindex piano, alteraciones de +@cindex alteraciones de piano +@cindex piano, estilo de alteraciones de + +@funindex piano + +Esta regla refleja la práctica del s.XX para la notación de piano. Su +comportamiento es muy similar al estilo @code{modern}, pero aquí las +alteraciones también se cancelan entre distintos pentagramas del mismo +grupo @code{GrandStaff} o @code{PianoStaff}, de ahí todas las +cancelaciones de las últimas notas. + +Este estilo de alteración se aplica de manera predeterminada al grupo +@code{GrandStaff} o @code{PianoStaff} en curso. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + +@item piano-cautionary (piano, de precaución) + +@cindex alteraciones, piano de precaución, estilo de +@cindex alteraciones, piano de precaución +@cindex precaución, estilo de alteraciones, piano +@cindex precaución, alteraciones de piano de +@cindex piano de precaución, estilo de alteraciones +@cindex piano de precaución, alteraciones + +@funindex piano-cautionary + +Igual que @code{#(set-accidental-style 'piano)} pero con las +alteraciones añadidas compuestas como de precaución. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano-cautionary) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + + +@item neo-modern + +@cindex neo-moderno, estilo de alteraciones +@cindex alteraciones, estilo de, neo-moderno + +@funindex neo-modern + +Esta regla reproduce una práctica común en la música contemporánea: +las alteraciones accidentales se imprimen como en @code{modern}, pero +se vuelven a imprimir si aparece la misma nota otra vez en el mismo +compás (excepto si la nota se repite inmediatamente). + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-cautionary + +@cindex neo-moderno de precaución, estilo de alteraciones +@cindex alteraciones, estilo, neo-moderno de precaución + +@funindex neo-modern-cautionary + +Esta regla es similar a @code{neo-modern}, pero las alteraciones +adicionales se imprimen como alteraciones de precaución. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-cautionary) + \musicB + } + >> +} +@end lilypond + + +@item neo-modern-voice + +@cindex neo-modern-voice, estilo de alteración +@cindex alteraciones, estilo, neo-moderno de voz + +@funindex neo-modern-voice + +Esta regla se usa para alteraciones accidentales sobre varias voces +que se han de leer por parte de músicos que tocan una voz, así como +por músicos que tocan todas las voces. Las alteraciones se imprimen +para cada voz como con @code{neo-modern}, pero se cancelan para otras +voces que están en el mismo pentagrama @code{Staff}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-voice-cautionary + +@cindex neo-modern-voice-cautionary, estilo de alteraciones +@cindex alteraciones,estilo, neo-modern-voice-cautionary + +@funindex neo-modern-voice-cautionary + +Esta regla es similar a @code{neo-modern-voice}, pero las alteraciones +adicionales se imprimen como alteraciones de precaución. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item dodecaphonic + +@cindex dodecafónico, estilo de alteraciones +@cindex alteraciones, estilo, dodecafónico + +@funindex dodecaphonic + +Esta regla refleja una práctica introducida por los compositores de +principios del s.XX, en un intento de abolir la jerarquía entre notas +naturales y alteradas. Con este estilo, @emph{todas} las notas llevan +alteración, incluso becuadros. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'dodecaphonic) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'dodecaphonic) + \musicB + } + >> +} +@end lilypond + +@item teaching (enseñanza) + +@cindex teaching (enseñanza), estilo de alteraciones +@cindex alteraciones, estilo teaching (enseñanza) + +@funindex teaching + +Esta regla está pensada para estudiantes, y hace más sencillo crear +hojas de escalas con alteraciones de precaución creadas +automáticamente. Las alteraciones se imprimen como en el estilo +@code{modern}, pero se añaden alteraciones de precaución para todas +las notas sostenidas o bemoles especificadas por la armadura, excepto +si la nota se repite inmediatamente. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicA + } + \context Staff = "down" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicB + } + >> +} +@end lilypond + + +@item no-reset (no restablecer) + +@cindex alteraciones no restablecer, estilo de +@cindex no restablecer, estilo de alteraciones + +@funindex no-reset + +Es el mismo que @code{default} pero con alteraciones que duran @q{para +siempre} y no sólo dentro del mismo compás: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'no-reset) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'no-reset) + \musicB + } + >> +} +@end lilypond + +@item forget (olvidar) + +@cindex olvidar, estilo de alteraciones +@cindex alteración, estilo de, olvidar + +@funindex forget + +Es lo opuesto a @code{no-reset}: Las alteraciones no se recuerdan en +absoluto: de aquí que todas las alteraciones se compongan +tipográficamente en relación a la armadura de la tonalidad, sin que +estén afectadas por lo que viene antes. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'forget) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'forget) + \musicB + } + >> +} +@end lilypond +@end table + +@seealso +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{Accidental}, +@rinternals{Accidental_engraver}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{Staff}, +@rinternals{AccidentalSuggestion}, +@rinternals{AccidentalPlacement}, +@rinternals{accidental-suggestion-interface}. + + +@cindex alteraciones y notas simultáneas +@cindex simultáneas, notas y alteraciones +@cindex alteraciones en acordes +@cindex acordes, alteraciones dentro de + +@knownissues + +Las notas simultáneas no se tienen en cuenta para la +determinación automática de las alteraciones accidentales; +sólo se consideran las notas anteriores y la armadura de +la tonalidad. Puede ser necesario forzar las alteraciones +accidentales con with@tie{}@code{!} o@tie{}@code{?} cuando +la misma nota, con el mismo nombre, ocurre simultáneamente +con distintas alteraciones, como en @samp{}. + + +La cancelación de precaución de alteraciones se hace mirando el +compás previo. Sin embargo, en el bloque @code{\alternative} que +sigue a una sección de repetición de primera y segunda vez +@code{\repeat volta N}, se esperaría que la cancelación se calculase +utilizando el compás previo @emph{que se ha tocado}, no el compás +previo @emph{que se ha impreso}. En el ejemplo siguiente, el Do +natural de la casilla de segunda vez no necesita becuadro: + +@lilypond[quote] +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + c' + } +} +@end lilypond + +Se puede usar el siguiente rodeo del problema: definir una función que +cambie localmente el estilo de alteraciones a @code{forget}: + +@lilypond[verbatim,quote] +forget = #(define-music-function (parser location music) (ly:music?) #{ + #(set-accidental-style 'forget) + $music + #(set-accidental-style 'modern) +#}) +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + \forget c' + } +} +@end lilypond + +@node Tesitura +@unnumberedsubsubsec Tesitura +@translationof Ambitus + +@cindex ambitus +@cindex rango de alturas +@cindex tesitura + +El término @emph{ambitus} o ámbito, denota el rango de notas que +abarca una voz dada en una parte musical. También puede denotar el +margen de notas que es capaz de tocar un determinado instrumento +musical. Los ámbitos se imprimen en las partes vocales de tal manera +que los intérpretes puedan determinar con facilidad si cumplen con sus +propias posibilidades. + +Los ámbitos se presentan al comienzo de la pieza junto a la clave +inicial. El rango se especifica gráficamente mediante dos cabezas de +nota que representan a las notas inferior y superior. Sólo se +imprimen alteraciones si no forman parte de la armadura de la +tonalidad. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\relative c'' { + aes c e2 + cis,1 +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-ambitus-per-voice.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ambitus-with-multiple-voices.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-ambitus-gap.ly} + + +@seealso +Glosario musical: +@rglos{ambitus}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{Ambitus_engraver}, +@rinternals{Voice}, +@rinternals{Staff}, +@rinternals{Ambitus}, +@rinternals{AmbitusAccidental}, +@rinternals{AmbitusLine}, +@rinternals{AmbitusNoteHead}, +@rinternals{ambitus-interface}. + + +@knownissues + +No se efectúa un tratamiento de las posibles colisiones en caso de +varias indicaciones de ámbito simultáneas en distintas voces. + +@node Cabeza de las notas +@subsection Cabeza de las notas +@translationof Note heads + +Esta sección propone formas de alterar las cabezas de las figuras. + +@menu +* Cabezas de nota especiales:: +* Cabezas de notas de Notación Fácil:: +* Cabezas de notas con formas diversas:: +* Improvisación:: +@end menu + +@node Cabezas de nota especiales +@unnumberedsubsubsec Cabezas de nota especiales +@translationof Special note heads + +@cindex figura, cabeza de la +@cindex nota, cabeza especial de +@cindex nota, cabeza de, en aspas +@cindex nota, cabeza de, en rombo +@cindex nota, cabeza de, en parlato +@cindex nota, cabeza de, armónico +@cindex nota, cabeza de, guitarra +@cindex especiales, cabezas de figura +@cindex aspas, cabezas de nota +@cindex rombo, cabezas de nota +@cindex parlato, cabezas de nota +@cindex armónicos, cabezas de nota +@cindex guitarra, cabezas de nota +@cindex nota, cabeza de, estilos +@cindex estilos de cabeza de nota + +@funindex cross + +Se puede modificar la apariencia de la cabeza de las notas: + +@lilypond[verbatim,quote,relative=2] +c4 b +\override NoteHead #'style = #'cross +c4 b +\revert NoteHead #'style +a b +\override NoteHead #'style = #'harmonic +a b +\revert NoteHead #'style +c4 d e f +@end lilypond + +Para ver todos los estilos de cabeza de las notas, consulte +@ref{Estilos de cabezas de nota}. + +El estilo @code{cross} (aspas) se usa para representar una amplia +variedad de intenciones musicales. Las siguientes instrucciones +genéricas predefinidas modifican la forma de la cabeza de las figuras +tanto en el contexto de pentagrama normal como en el de tablatura, y +se pueden usar para representar cualquier significado musical: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNotesOn + a b c4 b +\xNotesOff +c4 d +@end lilypond + +La forma de función musical de esta instrucción predefinida se puede +usar dentro y fuera de los acordes para generar cabezas de nota en +aspa, tanto en el contexto de pentagrama normal como en el de +tablatura: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNote { e f } +c b < g \xNote c f > b +@end lilypond + +Como sinónimos de @code{\xNote}, @code{\xNotesOn} y @code{\xNotesOff}, +se pueden usar @code{\deadNote}, @code{\deadNotesOn} y +@code{\deadNotesOff}. El término @notation{dead note} (nota muerta) +se utiliza corrientemente por parte de los guitarristas. + +Existe una abreviatura para las formas en rombo que sólo se puede usar +en acordes: + +@lilypond[verbatim,quote,relative=2] +2 4 +@end lilypond + +@predefined +@code{\harmonic}, +@code{\xNotesOn}, +@code{\xNotesOff}, +@code{\xNote}. +@endpredefined + +@seealso +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de la notación: +@ref{Estilos de cabezas de nota}, +@ref{Notas en acorde}, +@ref{Indicar armónicos y notas tapadas}. + +Referencia de funcionamiento interno: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{Ledger_line_engraver}, +@rinternals{NoteHead}, +@rinternals{LedgerLineSpanner}, +@rinternals{note-head-interface}, +@rinternals{ledger-line-spanner-interface}. + + +@node Cabezas de notas de Notación Fácil +@unnumberedsubsubsec Cabezas de notas de Notación Fácil +@translationof Easy notation note heads + +@cindex Hal Leonard +@cindex principiantes, música para +@cindex fácil, notación, cabezas de nota de +@cindex música para principiantes +@cindex notas, cabezas de, estudio +@cindex notas, cabezas de, notación simplificada +@cindex notas, cabezas de, para practicar +@cindex simplificada, notación + +@funindex \easyHeadsOn +@funindex easyHeadsOn +@funindex \easyHeadsOff +@funindex easyHeadsOff + +Las notas con cabeza de @q{notación facilitada} tienen el nombre de la +nota (en inglés) dentro de la cabeza. Se usan en la música para +principiantes. Para que las letras sean legibles, se deben imprimir +en un tamaño grande de fuente tipográfica. Para imprimir con una +fuente más grande, véase @ref{Establecer el tamaño del pentagrama}. + +@lilypond[verbatim,quote] +#(set-global-staff-size 26) +\relative c' { + \easyHeadsOn + c2 e4 f + g1 + \easyHeadsOff + c,1 +} +@end lilypond + + +@predefined +@code{\easyHeadsOn}, +@code{\easyHeadsOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{numbers-as-easy-note-heads.ly} + + +@seealso +Referencia de la notación: +@ref{Establecer el tamaño del pentagrama}. + +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Cabezas de notas con formas diversas +@unnumberedsubsubsec Cabezas de notas con formas diversas +@translationof Shape note heads + +@cindex notas, cabezas de, con formas +@cindex formas, notas con + +@cindex Aiken, cabezas de nota con forma +@cindex arpa sacra, cabezas de nota con forma +@cindex Southern Harmony, cabezas de nota con forma +@cindex Funk, cabezas de nota con forma +@cindex Harmonica Sacra, cabezas de nota con forma +@cindex Christian Harmony, cabezas de nota con forma +@cindex Walker, cabezas de nota con forma + +@cindex notas, cabezas de, Aiken +@cindex notas, cabezas de, arpa sacra +@cindex notas, cabezas de, Southern Harmony +@cindex notas, cabezas de, Funk +@cindex notas, cabezas de, Harmonica Sacra +@cindex notas, cabezas de, Christian Harmony +@cindex notas, cabezas de, Walker + +@funindex \aikenHeads +@funindex aikenHeads +@funindex \sacredHarpHeads +@funindex sacredHarpHeads +@funindex \southernHarmonyHeads +@funindex southernHarmonyHeads +@funindex \funkHeads +@funindex funkHeads +@funindex \walkerHeads +@funindex walkerHeads + +En la notación de cabezas con forma, la forma de la cabeza corresponde +a la función armónica de una nota dentro de la escala. Esta notación +se hizo popular en los libros americanos de canciones durante el +s.XIX. Las cabezas de nota con formas se pueden producir en los +estilos @q{Sacred Harp}, @q{Southern Harmony}, +Funk (Harmonica Sacra), Walker y Aiken @q{(Christian +Harmony)}: + +@lilypond[verbatim,quote,relative=2] +\aikenHeads +c, d e f g2 a b1 c \break +\sacredHarpHeads +c,4 d e f g2 a b1 c \break +\southernHarmonyHeads +c,4 d e f g2 a b1 c \break +\funkHeads +c,4 d e f g2 a b1 c \break +\walkerHeads +c,4 d e f g2 a b1 c \break +@end lilypond + +@funindex \key +@funindex key +@funindex \aikenHeadsMinor +@funindex aikenHeadsMinor +@funindex \sacredHarpHeadsMinor +@funindex sacredHarpHeadsMinor +@funindex \southernHarmonyHeadsMinor +@funindex southernHarmonyHeadsMinor +@funindex \funkHeadsMinor +@funindex funkHeadsMinor +@funindex \walkerHeadsMinor +@funindex walkerHeadsMinor + +Las formas se determinan en función del grado de la escala, donde la +tónica está determinada por la instrucción @code{\key} Cuando se +escribe en un tono menor, la nota de la escala se puede determinar a +partir del relativo mayor: + +@lilypond[verbatim,quote,relative=2] +\key a \minor +\aikenHeads +a b c d e2 f g1 a \break +\aikenHeadsMinor +a,4 b c d e2 f g1 a \break +\sacredHarpHeadsMinor +a,2 b c d \break +\southernHarmonyHeadsMinor +a2 b c d \break +\funkHeadsMinor +a2 b c d \break +\walkerHeadsMinor +a2 b c d \break + +@end lilypond + + +@predefined +@code{\aikenHeads}, +@code{\aikenHeadsMinor}, +@code{\funkHeads}, +@code{\funkHeadsMinor}, +@code{\sacredHarpHeads}, +@code{\sacredHarpHeadsMinor}, +@code{\southernHarmonyHeads}, +@code{\southernHarmonyHeadsMinor}, +@code{\walkerHeads}, +@code{\walkerHeadsMinor}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} + +Para ver todos los estilos de formas de cabeza de nota, consulte +@ref{Estilos de cabezas de nota}. + + +@seealso +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de la notación: +@ref{Estilos de cabezas de nota}. + +Referencia de funcionamiento interno: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Improvisación +@unnumberedsubsubsec Improvisación +@translationof Improvisation + +@cindex improvisación +@cindex barradas, cabezas de nota +@cindex notas, cabezas de, improvisación +@cindex notas, cabezas de, barradas + +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +La improvisación se denota a veces mediante cabezas de nota en forma +de barra inclinada, donde el ejecutante puede elegir cualquier nota +pero con el ritmo especificado. Estas cabezas de nota se crean así: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { + \consists "Pitch_squash_engraver" +} { + e8 e g a a16( bes) a8 g + \improvisationOn + e8 ~ + e2 ~ e8 f4 f8 ~ + f2 + \improvisationOff + a16( bes) a8 g e +} +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@seealso +Fragmentos de código: +@rlsr{Pitches}. + +Referencia de funcionamiento interno: +@rinternals{Pitch_squash_engraver}, +@rinternals{Voice}, +@rinternals{RhythmicStaff}. diff --git a/Documentation/es/notation/repeats.itely b/Documentation/es/notation/repeats.itely new file mode 100644 index 0000000000..fdaf0e0854 --- /dev/null +++ b/Documentation/es/notation/repeats.itely @@ -0,0 +1,750 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 85fe0f15000f793435221fab2688ba3fa65a028f + + 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 Repeticiones +@section Repeticiones +@translationof Repeats + +@lilypondfile[quote]{repeats-headword.ly} + +La repetición es un concepto fundamental en música, y existen varios +tipos de notación para las repeticiones. LilyPond contempla los +siguientes tipos de repetición: + +@table @code +@item volta (primera y segunda vez) +La repetición de la música no se imprime de forma desarrollada, sino +que se indica encerrándola entre barras de repetición. Si el salto de +la repetición se encuentra al comienzo de una pieza, la barra de +repetición sólo se imprime al final del fragmento. Se imprimen una +serie de finales alternativos (volte) de izquierda a derecha indicados +mediante corchetes. Ésta es la notación estándar para las +repeticiones con finales alternativos. + +@item unfold (desplegada) +Las música repetida se escribe y se interpreta completamente tantas +veces como especifique el valor @code{@var{número_de_repeticiones}}. Es útil +cuando se está escribiendo música repetitiva. + +@item percent (porcentaje) +Hacer repeticiones de compases o parte de ellos. Tienen un aspecto +semejante a un signo de porcentaje. Las repeticiones de porcentaje se +deben declarar dentro de un contexto @code{Voice}. + +@item tremolo (trémolo) +Hacer barras de trémolo. + +@end table + + +@menu +* Repeticiones largas:: +* Repeticiones cortas:: +@end menu + +@node Repeticiones largas +@subsection Repeticiones largas +@translationof Long repeats + +Esta sección trata sobre la forma de introducir repeticiones largas, +normalmente de varios compases. Las repeticiones adoptan dos formas: +repeticiones encerradas entre signos de repetición, o repeticiones +explícitas, que se usan para escribir música repetitiva. También se +pueden controlar manualmente los signos de repetición. + +@menu +* Repeticiones normales:: +* Marcas de repetición manual:: +* Repeticiones explícitas:: +@end menu + +@cindex repeticiones normales +@cindex repetición con finales alternativos +@cindex finales alternativos +@cindex volta +@cindex prima volta +@cindex primera y segunda vez +@cindex seconda volta +@cindex volta, prima +@cindex volta, seconda +@funindex \repeat +@funindex \alternative +@funindex \partial + +@node Repeticiones normales +@unnumberedsubsubsec Repeticiones normales +@translationof Normal repeats + +La sintaxis de una repetición normal es + +@example +\repeat volta @var{número_de_repeticiones} @var{expresión_musical} +@end example + +@noindent +donde @code{@var{expresión_musical}} es una expresión musical. + +Una repetición simple sin finales alternativos: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f } +c2 d +\repeat volta 2 { d4 e f g } +@end lilypond + +Los filanes alternativos (casillas de primera y segunda vez) +se pueden generar utilizando @code{\alternative}. Cada +grupo de alternativas debe, a su vez, estar encerrado +entre llaves curvas. + +@example +\repeat volta @var{número_de_repeticiones} @var{expresión_musical} +\alternative @{ + @{ @var{expresión_musical} @} +@} +@end example + +@noindent +donde @code{@var{expresión_musical}} es una expresión musical. + +Si existen más repeticiones que finales alternativos, +se asigna el primer final alternativo +a las repeticiones más antiguas. + +Repetición única con primera y segunda vez: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + + +Repetición única con primera y segunda vez, +con más de un final alternativo: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 4 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +Más de una repetición con más de un final alternativo: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 3 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } + { a2 g | } +} +c1 +@end lilypond + +@warning{Si hay dos o más alternativas, no debe aparecer +nada entre la llave de cierre de una y la de apertura de la otra +dentro de un bloque @code{@bs{}alternative}, pues en caso +contrario no obtendremos el número de finales esperado.} + +@warning{Si incluimos @code{@bs{}relative} dentro de un +@code{@bs{}repeat} sin instanciar el contexto +@code{Voice} explícitamente, +aparecerán pentagramas adicionales no deseados. +Véase @rprogram{Aparece un pentagrama de más}.} + +@cindex repetición con anacrusa +@cindex anacrusa en repeticiones +@funindex \partial + +Si una repetición comienza en medio de un compás y no tiene finales +alternativos (primera y segunda vez), normalmente el final de la +repetición también caerá en el medio de un compás, de forma que el +comienzo y el final formen un compás completo. En tales casos, los +signos de repetición no son verdaderas líneas divisorias. No utilice +instrucciones @code{\partial} o comprobaciones de compás en los +lugares en que se imprimen estos símbolos de repetición: + +@lilypond[verbatim,quote,relative=1] +% no \partial here +c4 e g % no bar check here +% no \partial here +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +De forma similar, si una repetición compienza con el compás de +anacrusa inicial de una partitura y no tiene finales alternativos, se +dan las mismas condiciones que en el ejemplo anterior, excepto que en +este caso se necesita la instrucción @code{\partial} al principio de +la partitura: + +@lilypond[verbatim,quote,relative=1] +\partial 4 % required +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +Cuando se añaden primera y segunda vez a una repetición que comienza +con un compás incompleto, se hace necesario establecer la propiedad de +contexto @code{Timing.measureLength} manualmente, en los siguiente +lugares específicos: + +@itemize +@item +en el comienzo de los complases incompletos del bloque +@code{\alternative}, que normalmente se producen al final de cada +final alternativo, excepto (en la mayoría de los casos) el último de +ellos. + +@item +en el comienzo de cada uno de los finales alternativos, excepto el +primero. +@end itemize + +@lilypond[verbatim,quote,relative=1] +\partial 4 +\repeat volta 2 { e4 | c2 e | } +\alternative { + { + f2 d | + \set Timing.measureLength = #(ly:make-moment 3 4) + g4 g g % optional bar check is allowed here + } + { + \set Timing.measureLength = #(ly:make-moment 4 4) + a2 a | + } +} +g1 | +@end lilypond + +La propiedad @code{measureLength} se describe en @ref{Gestión del +tiempo}. + +@cindex repeticiones con ligaduras +@cindex primera y segunda vez con ligaduras +@cindex ligaduras en las repeticiones +@cindex ligaduras en primera y segunda vez +@funindex \repeatTie + +Se pueden añadir ligaduras de unión al segundo final: + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat volta 2 { c4 d e f~ } +\alternative { + { f2 d } + { f2\repeatTie f, } +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{shortening-volta-brackets.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-volta-brackets-to-additional-staves.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-double-repeat-default-for-volte.ly} + +@seealso +Glosario musical: +@rglos{repeat}, +@rglos{volta}. + +Referencia de la notación: +@ref{Barras de compás}, +@ref{Modificar los complementos (plug-ins) de contexto}, +@ref{Gestión del tiempo}. + +Fragmentos de código: +@rlsr{Repeats}. + +Referencia de funcionamiento interno: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@knownissues + +@cindex repetición ambigua +@cindex anidada, repetición +@cindex repetición anidada +@cindex repetición, contador de tiempo de la +@cindex repetición y números de compás +@cindex números de compás y repeticiones +@cindex tiempo, repeticiones y contador de +@cindex compás, repeticiones y números de +@cindex repetición y ligadura de expresión +@cindex ligaduras de expresión y repeticiones + +Las ligaduras de expresión que abarcan desde un bloque @code{\repeat} +hasta un bloque @code{\alternative} sólo funcionan para la casilla de +primera vez. Asimismo, no es posible hacer que las ligaduras de +expresión se replieguen desde el final de una alternativa hasta el +comienzo de la repetición. + +Si una repetición que comienza con un compás incompleto tiene un +bloque @code{\alternative} que contiene modificaciones a la propiedad +@code{measureLength}, la utilización de @code{\unfoldRepeats} dará +lugar a líneas divisorias erróneamente colocadas y advertencias de +comprobación de compás. + +Una repetición anidada como + +@example +\repeat @dots{} +\repeat @dots{} +\alternative +@end example + +@noindent +es ambigua porque no está claro a qué @code{\repeat} pertenece la +@code{\alternative}. Esta ambigüedad se resuelve haciendo que la +@code{\alternative} pertenezca siempre a la @code{\repeat} más +interna. Para más claridad, se recomienda usar llaves en tales +situaciones. + + +@node Marcas de repetición manual +@unnumberedsubsubsec Marcas de repetición manual +@translationof Manual repeat marks + + +@cindex manual, marca de repetición +@cindex repetición manual +@cindex comienzo de repetición +@cindex repetición, comienzo de +@cindex final de repetición +@cindex repetición, final de +@cindex repetición, cambiar número de +@cindex repetición, cambiar finales alternativos +@cindex corchete de primera y segunda vez +@funindex repeatCommands +@funindex start-repeat + +@warning{Estos métodos sólo se utilizan para realizar construcciones +de repetición poco usuales, y pueden tener un comportamiento distinto +al esperado. En casi todas las situaciones, se deben crear las +repeticiones utilizando la instrucción estándar @code{@bs{}repeat} o +imprimiendo las barras de compás correspondientes. Para ver más +información, consulte @ref{Barras de compás}.} + +Se puede usar la propiedad @code{repeatCommands} para controlar la +disposición de las repeticiones. Su valor es una lista de Scheme de +comandos de repetición. + +@table @code +@item start-repeat +Imprimir una barra de compás @code{|:} + +@lilypond[verbatim,quote,relative=2] +c1 +\set Score.repeatCommands = #'(start-repeat) +d4 e f g +c1 +@end lilypond + +En la práctica habitual del grabado no se imprimen signos de +repetición al principio de la pieza. + + +@item @code{end-repeat} +Imprimir una barra de compás @code{:|} + +@lilypond[verbatim,quote,relative=2] +c1 +d4 e f g +\set Score.repeatCommands = #'(end-repeat) +c1 +@end lilypond + +@item (volta @var{number}) ... (volta #f) +Crear una nueva casilla de repetición con el número que se especifica. +El corchete de vez se debe terminar de forma explícita, pues en caso +contrario no se imprimirá. + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2")) +g4 a g a +\set Score.repeatCommands = #'((volta #f)) +c1 +@end lilypond + +@end table + +Se pueden producir varias instrucciones de repetición en el mismo +punto: + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2, 5") end-repeat) +g4 a g a +c1 +\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) +b1 +\set Score.repeatCommands = #'((volta #f)) +@end lilypond + +@cindex corchete de casilla de repetición con texto +@cindex texto en casilla de repetición + +Se puede incluir texto dentro de la casilla de primera y segunda vez. +El texto puede ser un número o números, o un elemento de marcado, +véase @ref{Formatear el texto}. La forma más fácil de usar texto de +marcado es definir el marcado previamente, y luego incluirlo dentro de +una lista de Scheme. + +@lilypond[verbatim,quote] +voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } +\relative c'' { + c1 + \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) + c4 b d e + \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) + f1 + \set Score.repeatCommands = #'((volta #f)) +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} + + +@seealso +Referencia de la notación: +@ref{Barras de compás}, +@ref{Formatear el texto}. + +Fragmentos de código: +@rlsr{Repeats}. + +Referencia de funcionamiento interno: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}. + + +@node Repeticiones explícitas +@unnumberedsubsubsec Repeticiones explícitas +@translationof Written-out repeats + +@cindex explícitas, repeticiones +@cindex repetitiva, música +@cindex repeticiones explícitas +@cindex repetición desplegada +@cindex desplegar música +@cindex desplegar repetición +@cindex repetición desplegada con finales alternativos +@cindex música desplegada con finales alternativos +@cindex alternativos, finales, en repeticiones explícitas +@funindex unfold + +Mediante la utilización de la instrucción @code{unfold} se pueden usar +las repeticiones para simplificar la escritura desplegada de música +repetitiva. La sintaxis es: + +@example +\repeat unfold @var{número_de_repeticiones} @var{expresión_musical} +@end example + +@noindent +donde @code{@var{expresión_musical}} es una expresión musical y +@code{@var{número_de_repeticiones}} es el número de veces que +@code{@var{expresión_musical}} se repite. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +c1 +@end lilypond + +Se pueden hacer repeticiones desplegadas con finales alternativos. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } +} +c1 +@end lilypond + +Si hay más repeticiones que finales alternativos, el primer final +alternativo se aplica las veces necesarias hasta que +las alternativas restantes completan el número total +de repeticiones. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 4 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } + } +c1 +@end lilypond + +Si existen más finales alternativos que repeticiones, +se aplican los primeros finales alternativos y LilyPond +ignora las alternativas restantes, que no se imprimen. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } +} +c1 +@end lilypond + +Es posible también anidar varias funciones +@code{unfold} (con finales alternativos o sin ellos). + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { + \repeat unfold 2 { c4 d e f } + \alternative { + { c2 g' } + { c,2 b } + } +} +c1 +@end lilypond + + +@warning{Si pone @code{@bs{}relative} dentro de un bloque +@code{@bs{}repeat} sin instanciar explícitamente el contexto +@code{Voice}, aparecerán pentagramas no deseados. Véase +@rprogram{Aparece un pentagrama de más}.} + +@seealso +Fragmentos de código: +@rlsr{Repeats}. + +Referencia de funcionamiento interno: +@rinternals{RepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@node Repeticiones cortas +@subsection Repeticiones cortas +@translationof Short repeats + +Esta sección trata de cómo introducir repeticiones cortas. Las +repeticiones cortas pueden adoptar dos formas: +barras inclinadas o signos de porcentaje +si estamos representando repeticiones de una +sola nota, un compás o dos compases, +y trémolos en caso contrario. + +@menu +* Repeticiones de compás o parte de ellos:: +* Repeticiones de trémolo:: +@end menu + +@node Repeticiones de compás o parte de ellos +@unnumberedsubsubsec Repeticiones de compás o parte de ellos +@translationof Percent repeats + +@cindex porcentaje, repetición de +@cindex compás, repetición de +@cindex repetición de porcentaje +@cindex repetición de compás +@cindex repetición corta +@funindex \repeat percent +@funindex percent + +Los patrones cortos que se repiten se imprimen una sola vez, +y el patrón repetido se sustituye por un símbolo especial. + +La sintaxis es: + +@example +\repeat percent @var{número} @var{expresión_musical} +@end example + +@noindent +donde @code{@var{expresión_musical}} es una expresión musical. + +Los patrones más cortos que un compás se sustituyen por +barras inclinadas. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c128 d e f } +\repeat percent 4 { c64 d e f } +\repeat percent 5 { c32 d e f } +\repeat percent 4 { c16 d e f } +\repeat percent 4 { c8 d } +\repeat percent 4 { c4 } +\repeat percent 2 { c2 } +@end lilypond + +Los patrones de repetición de uno o dos compases se sustituyen +por signos parecidos al símbolo de porcentaje. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 2 { c4 d e f } +\repeat percent 2 { c2 d } +\repeat percent 2 { c1 } +@end lilypond + +@lilypond[verbatim,quote,relative=2] +\repeat percent 3 { c4 d e f | c2 g' } +@end lilypond + +Los patrones más cortos que un compás pero que contienen +duraciones mezcladas utilizan un símbolo de porcentaje doble. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c8. 16 } +\repeat percent 2 { \times 2/3 { r8 c d } e4 } +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-counter.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-count-visibility.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{isolated-percent-repeats.ly} + +@seealso +Glosario musical: +@rglos{percent repeat}, +@rglos{simile}. + +Fragmentos de código: +@rlsr{Repeats}. + +Referencia de funcionamiento interno: +@rinternals{RepeatSlash}, +@rinternals{RepeatSlashEvent}, +@rinternals{DoubleRepeatSlash}, +@rinternals{PercentRepeat}, +@rinternals{PercentRepeatCounter}, +@rinternals{PercentRepeatedMusic}, +@rinternals{Percent_repeat_engraver}, +@rinternals{DoublePercentEvent}, +@rinternals{DoublePercentRepeat}, +@rinternals{DoublePercentRepeatCounter}, +@rinternals{Double_percent_repeat_engraver}, +@rinternals{Slash_repeat_engraver}. + + +@node Repeticiones de trémolo +@unnumberedsubsubsec Repeticiones de trémolo +@translationof Tremolo repeats + +@cindex trémolo +@cindex barras de trémolo +@cindex repetición de trémolo +@funindex \repeat tremolo +@funindex tremolo + +Los trémolos pueden adoptar dos formas: alternancia entre dos acordes +o dos notas, y repetición rápida de una sola nota o acorde. Los +trémolos que consisten en una alternancia se indican por medio de la +adición de barras entre las notas o acordes que se alternan, mientras +que los trémolos que consisten en la repetición rápida de una sola +nota se indican mediante la adición de barras cruzadas a una nota +única. + +Para colocar marcas de trémolo entre las notas, use @code{\repeat} con +el estilo @code{tremolo} (trémolo): + +@lilypond[quote,verbatim,relative=2] +\repeat tremolo 8 { c16 d } +\repeat tremolo 6 { c16 d } +\repeat tremolo 2 { c16 d } +@end lilypond + +La sintaxis de @code{\repeat tremolo} espera que se escriban +exactamente dos notas dentro de las llaves, y el número de +repeticiones debe corresponderse con un valor que se pueda expresar +con figuras normales o con puntillo. Así, @code{\repeat tremolo 7} es +válido y produce una nota con doble puntillo, pero +@code{\repeat tremolo 9} no es válido. + +La duración del trémolo es igual a la duración de la expresión entre +llaves, multiplicada por el número de repeticiones: @code{\repeat +tremolo 8 @{ c16 d16 @}} da como resultado un trémolo de redonda, +escrito como dos redondas unidas por barras de trémolo. + +Existen dos maneras de colocar marcas de trémolo sobre una única nota. +Incluso aquí se puede utilizar la sintaxis @code{\repeat tremolo}, en +cuyo caso la nota no debe ir encerrada entre llaves: + +@lilypond[quote,verbatim,ragged-right] +\repeat tremolo 4 c'16 +@end lilypond + +@cindex trémolo, indicaciones de +@funindex tremoloFlags +@funindex : + +El mismo resultado se puede obtener escribiendo +@code{:@var{N}} después de la nota, donde @code{@var{N}} indica la +duración de la subdivisión (debe ser 8 como mínimo). Si @code{@var{N}} +es 8, se añade una barra de corchea a la plica de la nota. +Si @code{@var{N}} se omite, se utiliza el último valor (almacenado en +@code{tremoloFlags}): + +@lilypond[quote,verbatim,relative=2] +c2:8 c:32 +c: c: +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{cross-staff-tremolos.ly} + + +@seealso +Fragmentos de código: +@rlsr{Repeats}. + +@cindex trémolos de pentagrama cruzado +@cindex pentagrama cruzado, trémolo de diff --git a/Documentation/es/notation/rhythms.itely b/Documentation/es/notation/rhythms.itely new file mode 100644 index 0000000000..958153db86 --- /dev/null +++ b/Documentation/es/notation/rhythms.itely @@ -0,0 +1,3511 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 53390e0570f4544c131e77323cdc4f4ea738bddd + + 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 Duraciones +@section Duraciones +@translationof Rhythms + +@lilypondfile[quote]{rhythms-headword.ly} + +Esta sección trata de los ritmos, los silencios, las duraciones, las +barras y los compases. + +@menu +* Escritura de las duraciones (valores rítmicos):: +* Escritura de silencios:: +* Impresión de las duraciones:: +* Barras:: +* Compases:: +* Asuntos rítmicos especiales:: +@end menu + + +@node Escritura de las duraciones (valores rítmicos) +@subsection Escritura de las duraciones (valores rítmicos) +@translationof Writing rhythms + +@menu +* Duración de las notas:: +* Grupos especiales:: +* Escalar las duraciones:: +* Ligaduras de unión:: +@end menu + +@node Duración de las notas +@unnumberedsubsubsec Duración de las notas +@translationof Durations + +@cindex duración de las notas +@cindex notas, duración de +@cindex longitud de las notas +@cindex notas, longitud de + +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve +@funindex \maxima +@funindex maxima + +Las duraciones se designan mediante números y puntos. Las duraciones +se introducen como sus valores recíprocos respecto de la redonda. Por +ejemplo, una negra se escribe usando un @code{4} (puesto que es 1/4 de +redonda), mientras que una blanca se escribe con un @code{2} (por ser +1/2 de redonda). Para notas mayores de la redonda se deben usar los +comandos @code{\longa} (que es una breve doble) y @code{\breve}. Se +pueden especificar duraciones tan cortas como la garrapatea (con el +número 128). Son posibles valores más cortos, pero sólo como notas +unidas por una barra. + +@c Two 64th notes are needed to obtain beams +@lilypond[quote,verbatim,relative=2] +\time 8/1 +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +Aquí se pueden ver las mismas duraciones con el barrado automático +desactivado. + +@c not strictly "writing rhythms"; more of a "displaying" thing, +@c but it's ok here. -gp +@lilypond[quote,verbatim,relative=2] +\time 8/1 +\autoBeamOff +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +Se puede escribir una nota con la duración de una cuádruple breve +mediante @code{\maxima}, pero esto está contemplado solamente dentro +de la notación musical antigua. Para ver más detalles, consulte +@ref{Notación antigua}. + +@cindex duración predeterminada +@cindex predeterminada, duración de la nota +@cindex nota, duración predeterminada + +Si la duración se omite, su valor será el de la duración de la nota +anterior. Por omisión, el valor de la primera nota es el de una +negra. + +@lilypond[quote,verbatim,relative=2] +a a a2 a a4 a a1 a +@end lilypond + +@cindex notas, con puntillo +@cindex puntillo, notas con +@cindex notas, con doble puntillo +@cindex doble puntillo, notas con + +@funindex . + +Para obtener duraciones de notas con puntillo, escriba un punto +(@code{.}) después del número. Las notas con doble puntillo se +especifican escribiendo dos puntos, y así sucesivamente. + +@lilypond[quote,verbatim,relative=2] +a4 b c4. b8 a4. b4.. c8. +@end lilypond + +Ciertas duraciones no se pueden representar sólo con duraciones +binarias y puntillos; la única forma de representarlas es ligando dos +o más notas. Para ver más detalles, consulte @ref{Ligaduras de unión}. + +Para ver de qué manera se pueden especificar las duraciones de las +sílabas de la letra y cómo alinear la letra a las notas, consulte +@ref{Música vocal}. + +Opcionalmente se pueden espaciar las notas de forma estrictamente +proporcional a sus duraciones. Para ver más detalles sobre este y +otros ajustes que controlan la notación proporcional, consulte +@ref{Notación proporcional}. + +@funindex \dotsUp +@funindex dotsUp +@funindex \dotsDown +@funindex dotsDown +@funindex \dotsNeutral +@funindex dotsNeutral + +Normalmente los puntillos se desplazan hacia arriba para evitar las +líneas del pentagrama, excepto en situaciones de polifonía. Se pueden +situar los puntillos manualmente encima o debajo de las líneas de la +pauta; véase @ref{Dirección y posición}. + + +@predefined +@code{\autoBeamOn}, +@code{\autoBeamOff}, +@code{\dotsUp}, +@code{\dotsDown}, +@code{\dotsNeutral}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{alternative-breve-note.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-number-of-augmentation-dots-per-note.ly} + + +@seealso +Glosario musical: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}, +@rglos{note value}, +@rglos{Duration names notes and rests}. + +Referencia de la notación: +@ref{Barras automáticas}, +@ref{Ligaduras de unión}, +@ref{Plicas}, +@ref{Escritura de las duraciones (valores rítmicos)}, +@ref{Escritura de silencios}, +@ref{Música vocal}, +@ref{Notación antigua}, +@ref{Notación proporcional}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Dots}, +@rinternals{DotColumn}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +No existe un límite fundamental para las duraciones de los silencios +(tanto para el más largo como para el más corto), pero el numero de +glifos es limitado: sólo se pueden imprimir desde el silencio de +garrapatea (128) hasta el de máxima (8 redondas). + + +@node Grupos especiales +@unnumberedsubsubsec Grupos especiales +@translationof Tuplets + +@cindex grupos especiales +@cindex tresillos + +@funindex \times +@funindex times + +Los grupos especiales se obtienen a partir de una expresión musical +multiplicando todas las duraciones por una fracción: + +@example +\times @var{fracción} @{ @var{música} @} +@end example + +@noindent +La duración de @code{@var{música}} se multiplicará por la +fracción. El denominador de la fracción se imprimirá sobre las notas, +opcionalmente con un corchete. El grupo especial más común es el +tresillo, en el que 3 notas tienen el valor de 2, por tanto las notas +duran 2/3 de su valor escrito + +@lilypond[quote,verbatim,relative=2] +a2 \times 2/3 { b4 b b } +c4 c \times 2/3 { b4 a g } +@end lilypond + +@cindex grupos de valoración especial, colocación del corchete + +@funindex \tupletUp +@funindex tupletUp +@funindex \tupletDown +@funindex tupletDown +@funindex \tupletNeutral +@funindex tupletNeutral + +Se pueden colocar manualmente los corchetes de tresillo encima o +debajo de la pauta; véase @ref{Dirección y posición}. + +Los grupos pueden anidarse unos dentro de otros: + +@lilypond[quote,verbatim,relative=2] +\autoBeamOff +c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 +@end lilypond + +La modificación de los grupos especiales anidados que comienzan en el +mismo instante musical se debe hacer con @code{\tweak}. + +Para modificar la duración de las notas sin imprimir un corchete de +grupo especial, véase @ref{Escalar las duraciones}. + + +@predefined +@code{\tupletUp}, +@code{\tupletDown}, +@code{\tupletNeutral}. +@endpredefined + + +@snippets + +@cindex grupos especiales, formato de +@cindex tresillos, formato de + +@funindex tupletNumberFormatFunction +@funindex tupletSpannerDuration + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{entering-several-tuplets-using-only-one--times-command.ly} + +@cindex grupos de valoración especial, modificación del número + +@funindex TupletNumber + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-tuplet-number.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{non-default-tuplet-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-tuplet-bracket-visibility.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{permitting-line-breaks-within-beamed-tuplets.ly} + + +@seealso +Glosario musical: +@rglos{triplet}, +@rglos{tuplet}, +@rglos{polymetric}. + +Manual de aprendizaje: +@rlearning{Métodos de trucaje}. + +Referencia de la notación: +@ref{Gestión del tiempo}, +@ref{Escalar las duraciones}, +@ref{La instrucción tweak}, +@ref{Notación polimétrica}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{TupletBracket}, +@rinternals{TupletNumber}, +@rinternals{TimeScaledMusic}. + + +@cindex adorno, notas de, dentro de corchetes de grupo especial + +@knownissues +Las notas de adorno se pueden escribir dentro de los corchetes de +grupo especial, @emph{excepto} cuando un pentagrama comienza por una +nota de adorno seguida de un grupo de valoración especial. En este +caso concreto, se debe poner la nota de adorno antes de la instrucción +@code{\times} para evitar errores. + +@cindex indicaciones de tempo dentro de corchetes de grupo especial + +Cuando se utiliza un grupo de valoración especial al comienzo de una +pieza con una indicación de @code{\tempo}, la música se debe escribir +explícitamente dentro de un bloque @code{\new Voice}, tal y como se +explica en @rlearning{Las voces contienen música}. + + +@node Escalar las duraciones +@unnumberedsubsubsec Escalar las duraciones +@translationof Scaling durations + +@cindex escalar las duraciones +@cindex duraciones, escalado de + +Es posible alterar la duración de las figuras, silencios o acordes en +un factor @code{N/M} añadiendo @code{*N/M} (o @code{*N} si @code{M} es +1) a la duración. Esto no afectará a la apariencia de las notas o +silencios que se producen, pero la duración alterada se usará para +calcular la posición dentro del compás y para establecer la duración +en la salida MIDI. Los factores de multiplicación se pueden combinar +en la forma @code{*L*M/N}. + +En el siguiente ejemplo las tres primeras notas duran exactamente dos +partes, pero no se imprime ningún corchete de tresillo. + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Alter durations to triplets +a4*2/3 gis4*2/3 a4*2/3 +% Normal durations +a4 a4 +% Double the duration of chord +4*2 +% Duration of quarter, appears like sixteenth +b16*4 c4 +@end lilypond + +La duración de las notas espaciadoras también se puede modificar +mediante un multiplicador. Esto es útil para saltar muchos compases, +como por ejemplo @code{s1*23}. + +@cindex compresión de música +@cindex expansión de música + +@funindex \scaleDurations +@funindex scaleDurations + +De la misma forma, se pueden comprimir por una fracción trozos de +música más largos, como si cada nota, acorde o silencio tuviera la +fracción como multiplicador. Esto dejará intacta la apariencia de la +@emph{música}, pero la duración interna de las notas se multiplicará +por la fracción @emph{numerador}/@emph{denominador}. Los espacios que +rodean el punto son necesarios. He aquí un ejemplo que muestra cómo +se puede comprimir y expandir la música: + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Normal durations +4 c8 a +% Scale music by *2/3 +\scaleDurations #'(2 . 3) { + 4. c8 a f +} +% Scale music by *2 +\scaleDurations #'(2 . 1) { + 4 c8 b +} +@end lilypond + + +Una aplicación de esta instrucción se encuentra en la notación +polimétrica, véase @ref{Notación polimétrica}. + + +@seealso +Referencia de la notación: +@ref{Grupos especiales}, +@ref{Silencios invisibles}, +@ref{Notación polimétrica}. + +Fragmentos de código: +@rlsr{Rhythms}. + + +@node Ligaduras de unión +@unnumberedsubsubsec Ligaduras de unión +@translationof Ties + +@cindex ligadura de unión + +@funindex ~ + +Una ligadura de unión conecta dos notas adyacentes de la misma altura. La ligadura +en efecto extiende la longitud de una nota. + +@warning{No deben confundirse las ligaduras de unión con las +@emph{ligaduras de expresión}, que indican articulación, ni con las +@emph{ligaduras de fraseo}, que indican el fraseo musical. Una +ligadura de unión es tan sólo una manera de extender la duración de +una nota, algo parecido a lo que hace el puntillo.} + +Se introduce una ligadura de unión usando el símbolo de la tilde curva +(@code{~}). + +@lilypond[quote,verbatim,relative=2] +a2 ~ a +@end lilypond + +Se usan ligaduras de unión bien cuando la nota atraviesa la barra de +compás o bien cuando no se pueden usar puntillos para denotar el +ritmo. También se deben usar ligaduras cuando las notas atraviesan +subdivisiones del compás de mayor duración: + +@c KEEP LY +@lilypond[verbatim,quote] +\relative c' { + r8^"sí" c8 ~ c2 r4 | + r8^"no" c2 ~ c8 r4 +} +@end lilypond + +Si necesitamos ligar muchas notas a través de las líneas divisorias, +nos podría resultar más fácil utilizar la división automática de las +notas, véase @ref{División automática de las notas}. Este mecanismo divide +automáticamente las notas largas y las liga a través de las barras de +compás. + +@cindex ligaduras y acordes +@cindex acordes y ligaduras + +Cuando se aplica una ligadura de unión a un acorde, se conectan todas +las cabezas de las notas cuyas alturas coinciden. Si no coincide +ningún par de cabezas, no se crea ninguna ligadura. Los acordes se +pueden ligar parcialmente colocando la ligadura dentro del acorde. + +@lilypond[quote,verbatim,relative=1] + ~ + +@end lilypond + +@cindex repetición, ligaduras de unión en +@cindex ligaduras de unión, repeticiones y +@cindex primera y segunda vez, corchetes y ligaduras en +@cindex ligaduras de unión y corchetes de primera y segunda vez + +@funindex \repeatTie +@funindex repeatTie + +Cuando la segunda vez de una repetición comienza con una nota ligada, +es necesario especificar la ligadura repetida como sigue: + +@lilypond[quote,relative=2,verbatim] +\repeat volta 2 { c g 2 ~ } +\alternative { + % First alternative: following note is tied normally + { 2. r4 } + % Second alternative: following note has a repeated tie + { 2\repeatTie d4 c } } +@end lilypond + +@cindex laissez vibrer +@cindex ligaduras laissez vibrer + +@funindex \laissezVibrer +@funindex laissezVibrer + +Las ligaduras @notation{L.v.} (@notation{laissez vibrer}, dejar +vibrar) indican que las notas no se deben apagar al final. Se usan en +la notación para piano, arpa y otros instrumentos de cuerda y +percusión. Se pueden introducir de la siguiente manera: + +@lilypond[quote,verbatim,relative=1] +1\laissezVibrer +@end lilypond + +@cindex ligaduras, colocación + +@funindex \tieUp +@funindex tieUp +@funindex \tieDown +@funindex tieDown +@funindex \tieNeutral +@funindex tieNeutral + +Es posible hacer manualmente que las ligaduras de unión se coloquen +por encima o por debajo; véase @ref{Dirección y posición}. + +@cindex ligaduras, apariencia +@cindex ligaduras de puntos +@cindex ligaduras discontinuas +@cindex discontinuas, ligaduras +@cindex puntos, ligaduras de + +@funindex \tieDotted +@funindex tieDotted +@funindex \tieDashed +@funindex tieDashed +@funindex \tieSolid +@funindex tieSolid + +Se puede hacer que las ligaduras de expresión sean discontinuas, +punteadas o una combinación de continuas y discontinuas. + +@lilypond[quote, verbatim, relative=1] +\tieDotted +c2 ~ c +\tieDashed +c2 ~ c +\tieHalfDashed +c2 ~ c +\tieHalfSolid +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Se pueden especificar patrones de discontinuidad personalizados: + +@lilypond[quote, verbatim, relative=1] +\tieDashPattern #0.3 #0.75 +c2 ~ c +\tieDashPattern #0.7 #1.5 +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Las definiciones de patrones de discontinuidad para las ligaduras de +unión tienen la misma estructura que las definiciones de patrones de +discontinuidad para las ligaduras de expresión. Para ver más +información acerca de los patrones de discontinuidad complejos, +consulte los fragmentos de código bajo @ref{Ligaduras de expresión}. + +@predefined +@code{\tieUp}, +@code{\tieDown}, +@code{\tieNeutral}, +@code{\tieDotted}, +@code{\tieDashed}, +@code{\tieDashPattern}, +@code{\tieHalfDashed}, +@code{\tieHalfSolid}, +@code{\tieSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-ties-with-arpeggios.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{engraving-ties-manually.ly} + + +@seealso +Glosario musical: +@rglos{tie}, +@rglos{laissez vibrer}. + +Referencia de la notación: +@ref{Ligaduras de expresión}, +@ref{División automática de las notas}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{LaissezVibrerTie}, +@rinternals{LaissezVibrerTieColumn}, +@rinternals{TieColumn}, +@rinternals{Tie}. + + +@knownissues +Un cambio de pentagrama cuando hay una ligadura activa no producirá +una ligadura inclinada. + +Los cambios de clave o de octava durante una ligadura de unión no +están bien definidos realmente. En estos casos puede ser preferible +una ligadura de expresión. + + +@node Escritura de silencios +@subsection Escritura de silencios +@translationof Writing rests + +Los silencios se escriben como parte de la música dentro de las +expresiones musicales. + +@menu +* Silencios:: +* Silencios invisibles:: +* Silencios de compás completo:: +@end menu + +@node Silencios +@unnumberedsubsubsec Silencios +@translationof Rests + +@cindex silencio +@cindex silencios, indicar duraciones +@cindex maxima, silencio de +@cindex longa, silencio de +@cindex breve, silencio de + +@funindex \rest +@funindex rest +@funindex r +@funindex \maxima +@funindex maxima +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve + +Los silencios se introducen como notas con el nombre @code{r}. Las +duraciones mayores que la redonda utilizan las instrucciones +predefinidas que se muestran aquí: + +@c \time 16/1 is used to avoid spurious bar lines +@c and long tracts of empty measures +@lilypond[quote,verbatim,relative=2] +\new Staff { + % These two lines are just to prettify this example + \time 16/1 + \override Staff.TimeSignature #'stencil = ##f + % Print a maxima rest, equal to four breves + r\maxima + % Print a longa rest, equal to two breves + r\longa + % Print a breve rest + r\breve + r1 r2 r4 r8 r16 r32 r64 r128 +} +@end lilypond + +@cindex silencios multicompás +@cindex silencios de compás completo + +Los silencios de un compás, centrados en medio del compás, se deben +hacer con silencios multicompás. Se pueden usar para un solo compás +así como para muchos compases, y se tratan en @ref{Silencios de compás completo}. + +@cindex silencio, especificar la posición vertical + +Para especificar explícitamente la posición vertical de un silencio, +escriba una nota seguida de @code{\rest}. Se colocará un silencio en +la posición en que debería aparecer la nota. Esto posibilita la +aplicación manual precisa de formato a la música polifónica, ya que el +formateador automático de colisiones de silencios no mueve estos +silencios. + +@lilypond[quote,verbatim,relative=2] +a4\rest d4\rest +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{rest-styles.ly} + + +@seealso +Glosario musical: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}. + +Referencia de la notación: +@ref{Silencios de compás completo}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Rest}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +No existe un límite fundamental respecto de las duraciones de los +silencios (tanto para el más corto como para el más largo), pero el +número de glifos es limitado: hay silencios desde la garrapatea (128) +hasta la máxima (8 redondas). + + +@node Silencios invisibles +@unnumberedsubsubsec Silencios invisibles +@translationof Invisible rests + +@cindex desplazamiento +@cindex silencio invisible +@cindex invisible, silencio +@cindex nota de espaciado +@cindex silencio de separación + +@funindex s +@funindex \skip +@funindex skip + +Un silencio invisible (también conocido como @q{skip} o +desplazamiento) se puede introducir como una nota con el +nombre@tie{}@code{s}: + +@lilypond[verbatim,quote,relative=2] +c4 c s c +s2 c +@end lilypond + +@cindex letra, desplazamiento de + +Los silencios de separación sólo están disponible en el modo de notas +y en el modo de acordes. En otras situaciones, por ejemplo, cuando se +introduce la letra, se usa la instrucción @code{\skip} para producir +un desplazamiento de una cierta magnitud temporal. @code{\skip} +requiere una duración explícita, pero se ignora si las sílabas de la +letra toman sus duraciones de las notas de una melodía asociada, a +través de @code{\addlyrics} o de @code{\lyricsto}. + +@lilypond[quote,verbatim,relative=2] +<< + { + a2 \skip2 a2 a2 + } + \new Lyrics { + \lyricmode { + foo2 \skip 1 bla2 + } + } +>> +@end lilypond + +Dado que @code{\skip} es una instrucción, no afecta a las duraciones +por omisión de las notas siguientes, a diferencia de@tie{}@code{s}. + +@lilypond[quote,verbatim,relative=2] +<< + { + \repeat unfold 8 { a4 } + } + { + a4 \skip 2 a | + s2 a + } +>> +@end lilypond + +Un silencio de separación produce implícitamente contextos +@code{Staff} y @code{Voice} si no existe ninguno, igual que las notas +y los silencios normales: + +@lilypond[quote,verbatim,relative=2] +s1 s s +@end lilypond + +@code{\skip} tan sólo desplaza un tiempo musical; no produce ninguna +salida, de ninguna clase. + +@lilypond[quote,verbatim,relative=2] +% This is valid input, but does nothing +\skip 1 \skip1 \skip 1 +@end lilypond + + +@seealso +Manual de aprendizaje: +@rlearning{Visibilidad y color de los objetos}. + +Referencia de la notación: +@ref{Notas ocultas}, +@ref{Visibilidad de los objetos}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{SkipMusic}. + + +@node Silencios de compás completo +@unnumberedsubsubsec Silencios de compás completo +@translationof Full measure rests + +@cindex multicompás, silencios +@cindex compás completo, silencios de +@cindex silencios multicompás +@cindex silencios de compás completo +@cindex redonda, silencios de, para un compás completo +@cindex silencios de redonda para un compás completo + +@funindex R + +Los silencios de uno o más compases completos se introducen como notas +con el nombre @code{R} en mayúscula: + +@lilypond[quote,verbatim,relative=2] +% Rest measures contracted to single measure +\compressFullBarRests +R1*4 +R1*24 +R1*4 +b2^"Tutti" b4 a4 +@end lilypond + +La duración de los silencios de compás completo es idéntica a la +notación de la duración que se usa para las notas. La duración de un +silencio multi-compás debe ser siempre un número entero de compases, +por lo que con frecuencia han de utilizarse puntillos o fracciones: + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 2/4 +R1 | R2 | +\time 3/4 +R2. | R2.*2 | +\time 13/8 +R1*13/8 | R1*13/8*12 | +\time 10/8 +R4*5*4 | +@end lilypond + +Un silencio de un compás completo se imprime como un silencio de +redonda o de breve, centrado en el compás, según el tipo de compás +vigente. + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +R1 | +\time 6/4 +R1*3/2 | +\time 8/4 +R1*2 | +@end lilypond + +@cindex multicompás, silencios, expansión de +@cindex multicompás, silencios, contracción de + +@funindex \expandFullBarRests +@funindex expandFullBarRests +@funindex \compressFullBarRests +@funindex compressFullBarRests + +De forma predeterminada un silencio multicompás se expande en la +partitura impresa para mostrar explícitamente todos los compases de +silencio. De forma alternativa, un silencio multicompás se puede +presentar como un solo compás que contiene un símbolo de silencio +multicompás, con el número de compases impreso encima del compás: + +@lilypond[quote,verbatim,relative=2] +% Default behavior +\time 3/4 r2. | R2.*2 | +\time 2/4 R2 | +\time 4/4 +% Rest measures contracted to single measure +\compressFullBarRests +r1 | R1*17 | R1*4 | +% Rest measures expanded +\expandFullBarRests +\time 3/4 +R2.*2 | +@end lilypond + + +@cindex texto sobre un silencio multicompás +@cindex multicompás, silencio, adjuntar texto +@cindex inscripción sobre un silencio multicompás +@cindex multicompás, silencios, inscripción en +@cindex calderón sobre un silencio multicompás +@cindex multicompás, silencio, aplicar un calderón a +@cindex marcado sobre silencios multicompás +@cindex multicompás, silencio, con marcados + +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex MultiMeasureRestText + +Se pueden añadir elementos de marcado a los silencios multicompás. Se +proporciona la instrucción predefinida @code{\fermataMarkup} para +añadir calderones. + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 3/4 +R2.*10^\markup { \italic "ad lib." } +R2.^\fermataMarkup +@end lilypond + +@warning{Los elementos de marcado que se añaden a un silencio +multicompás son objetos del tipo @code{MultiMeasureRestText}, no +@code{TextScript}. Las sobreescrituras de propiedades deben ir +dirigidas hacia el objeto correcto, o se ignorarán. Véase el ejemplo +siguiente:} + +@lilypond[quote,verbatim,relative=2] +% This fails, as the wrong object name is specified +\override TextScript #'padding = #5 +R1^"wrong" +% This is the correct object name to be specified +\override MultiMeasureRestText #'padding = #5 +R1^"right" +@end lilypond + +Cuando un silencio multicompás sigue inmediatamente al establecimiento +de un compás parcial con @code{\partial}, es posible que no se emitan +las advertencias correspondientes de comprobación de compás. + + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex \compressFullBarRests +@funindex compressFullBarRests +@funindex \expandFullBarRests +@funindex expandFullBarRests + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}, +@code{\fermataMarkup}, +@code{\compressFullBarRests}, +@code{\expandFullBarRests}. +@endpredefined + + +@snippets + +@cindex eclesiásticos, silencios +@cindex silencios eclesiásticos +@cindex kirchenpausen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-form-of-multi-measure-rests.ly} + +@cindex multicompás, posicionamiento de los silencios +@cindex colocación de los silencios multicompás + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{positioning-multi-measure-rests.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{multi-measure-rest-markup.ly} + + +@seealso +Glosario musical: +@rglos{multi-measure rest}. + +Referencia de la notación: +@ref{Duraciones}, +@ref{Texto}, +@ref{Formatear el texto}, +@ref{Guiones de texto}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{MultiMeasureRest}, +@rinternals{MultiMeasureRestNumber}, +@rinternals{MultiMeasureRestText}. + +@cindex digitaciones y silencios multicompás +@cindex multicompás, silencios, digitaciones y + +@knownissues +En las digitaciones encima de silencios multicompás +(p. ej., @code{R1*10-4}), la cifra de la digitación +puede chocar con el número del compás. + +@cindex condensar silencios +@cindex silencio normal, condensar + +No hay ninguna forma de condensar automáticamente muchos silencios en +un solo silencio multicompás. + +@cindex silencio, colisiones de + +Los silencios multicompás no toman parte en las colisiones de +silencios. + + +@node Impresión de las duraciones +@subsection Impresión de las duraciones +@translationof Displaying rhythms + +@menu +* Indicación de compás:: +* Indicaciones metronómicas:: +* Anacrusas:: +* Música sin compasear:: +* Notación polimétrica:: +* División automática de las notas:: +* Mostrar los ritmos de la melodía:: +@end menu + +@node Indicación de compás +@unnumberedsubsubsec Indicación de compás +@translationof Time signature + +@cindex Indicación de compás +@cindex medida + +@funindex \time +@funindex time + +La indicación de compás se establece como sigue: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c2 +\time 3/4 c2. +@end lilypond + +@cindex compás, visibilidad de la indicación de + +La indicación de compás se imprime al comienzo de una pieza y siempre +que hay un cambio de compás. Si se produce un cambio al final de una +línea, se imprime una indicación de advertencia en dicho lugar. Se +puede modificar este comportamiento predeterminado, véase +@ref{Visibilidad de los objetos}. + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c2 c +\break +c c +\break +\time 4/4 +c c c c +@end lilypond + +@cindex compás, estilo de la indicación de +@cindex metro, estilo de + +@funindex \numericTimeSignature +@funindex numericTimeSignature +@funindex \defaultTimeSignature +@funindex defaultTimeSignature + +El símbolo de compás que se usa en 2/2 y 4/4 se puede cambiar a un +estilo numérico: + +@lilypond[quote,verbatim,relative=2] +% Default style +\time 4/4 c1 +\time 2/2 c1 +% Change to numeric style +\numericTimeSignature +\time 4/4 c1 +\time 2/2 c1 +% Revert to default style +\defaultTimeSignature +\time 4/4 c1 +\time 2/2 c1 +@end lilypond + +Las indicaciones de compás de la música mensural se tratan en +@ref{Indicaciones de compás de la música mensural}. + +@cindex compás, indicación de, ajustes predeterminados +@cindex autobarrado, propiedades para indicaciones de compás +@cindex barrado, propiedades predefinidas para el compás +@funindex \overrideTimeSignatureSettings + +Además de ajustar la indicación de compás que se imprime, la +instrucción @code{\time} establece también los valores predeterminados +basados en el tipo de compás para las propiedades @code{baseMoment}, +@code{beatStructure} y @code{beamExceptions}. Los valores +predefinidos de estas propiedades están en +@file{scm/time-signature-settings.scm}. Los valores predefinidos +existentes se pueden cambiar, o pueden añadirse valores nuevos: + +@lilypond[quote,verbatim] +\score { + \new Staff { + \relative c' { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + } + } +} +@end lilypond + +@code{\overrideTimeSignatureSettings} toma cuatro argumentos: + +@enumerate + +@item +@code{@var{timeSignatureFraction}}, una pareja de Scheme que describe +el tipo de compás. + +@item +@code{@var{baseMomentFraction}}, una pareja de Scheme que contiene el +numerador y denominador de la unidad de medida básica de ese tipo de +compás. + +@item +@code{@var{beatStructure}}, una lista de Scheme que indica la +estructura de los pulsos del compás, en unidades del momento base. + +@item +@code{@var{beamExceptions}}, una lista-A que contiene cualesquiera +reglas de barrado para el tipo de compás que vayan más allá de +terminar en cada pulso, como se describe en @ref{Establecer el +comportamiento de las barras automáticas}. +@end enumerate + +El contexto que contiene @code{\overrideTimeSignatureSettings} se debe +instanciar antes de que se ejecute la llamada a +@code{\overrideTimeSignatureSettings}. Ello significa que debe +instanciarse explícitamente o debe existir música dentro del contexto +antes de la llamada a @code{\overrideTimeSignatureSettings}: + +@lilypond[quote,verbatim] +\score { + \relative c' { + % This call will fail because the context isn't yet instantiated + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (2 2)"} + \repeat unfold 7 { c8 } | + % This call will succeed + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (3 1)"} + \repeat unfold 7 { c8 } | + } +} +@end lilypond + + +@cindex compás, propiedades, restaurar los valores predeterminados +@cindex restaurar las propiedades predeterminadas del tipo de compás +@funindex \revertTimeSignatureSettings + +Los valores modificados de las propiedades predeterminadas del tipo de +compás se pueden restaurar a los valores originales: + +@lilypond[quote,verbatim] +\score{ + \relative c' { + \repeat unfold 8 { c8 } | + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + \revertTimeSignatureSettings #'(4 . 4) + \time 4/4 + \repeat unfold 8 { c8 } | + } +} +@end lilypond + +Se pueden establecer diferentes valores de las propiedades +predeterminadas del tipo de compás para los distintos pentagramas +moviendo el @code{Timing_translator} y el +@code{Default_bar_line_engraver} del contexto @code{Score} al contexto +@code{Staff}. + +@lilypond[quote, verbatim] +\score { + \new StaffGroup << + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(1 3) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + >> + \layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } + } +} +@end lilypond + +@predefined +@code{\numericTimeSignature}, +@code{\defaultTimeSignature}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-time-signature-without-affecting-the-beaming.ly} + +@cindex compuesto, indicaciones de compás +@cindex compás compuesto, indicaciones de + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly} + + +@seealso +Glosario musical: +@rglos{time signature} + +Referencia de la notación: +@ref{Indicaciones de compás de la música mensural}, +@ref{Gestión del tiempo}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}. + + +@node Indicaciones metronómicas +@unnumberedsubsubsec Indicaciones metronómicas +@translationof Metronome marks + +@cindex tempo +@cindex pulsos por minuto +@cindex metrónomo, indicación de +@cindex metrónomo, indicación de, con texto + +@funindex \tempo +@funindex tempo + +Es muy sencillo escribir una indicación metronómica básica: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 120 +c2 d +e4. d8 c2 +@end lilypond + +También se pueden imprimir indicaciones metronómicas +como un intervalo entre dos números: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 40 ~ 46 +c4. e8 a4 g +b,2 d4 r +@end lilypond + +Se pueden usar indicaciones de tempo con texto: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +c4 e d c +b4. a16 b c4 r4 +@end lilypond + +La combinación de una indicación metronómica y un texto hace que la +marca de metrónomo se encierre entre paréntesis automáticamente: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegro" 4 = 160 +g4 c d e +d4 b g2 +@end lilypond + +En general, el texto puede ser cualquier objeto de marcado: + +@lilypond[verbatim,quote,relative=2] +\tempo \markup { \italic Faster } 4 = 132 +a8-. r8 b-. r gis-. r a-. r +@end lilypond + +Se puede escribir una indicación metronómica entre paréntesis sin +ninguna indicación textual, escribiendo una cadena vacía en la +entrada: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-tempo-without-a-metronome-mark.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-metronome-marks-in-markup-mode.ly} + +Para ver más detalles, consulte @ref{Formatear el texto}. + + +@seealso +Glosario musical: +@rglos{metronome}, +@rglos{metronomic indication}, +@rglos{tempo indication}, +@rglos{metronome mark}. + +Referencia de la notación: +@ref{Formatear el texto}, +@ref{Salida MIDI}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno:: +@rinternals{MetronomeMark}. + + +@node Anacrusas +@unnumberedsubsubsec Anacrusas +@translationof Upbeats + +@cindex anacrusa +@cindex parte al alzar +@cindex compás parcial +@cindex parcial, compás +@cindex compás, cambiar la longitud del + +@funindex measurePosition +@funindex \partial +@funindex partial + +Los compases parciales como las anacrusas o partes al alzar se +escriben usando la instrucción @code{\partial}, con la sintaxis + +@example +\partial @var{duración} +@end example + +@noindent +donde @code{@var{duración}} es el valor rítmico restante del compás actual +antes de que comience el siguiente. + +@lilypond[quote,verbatim,relative=2] +\partial 4 e4 | +a2. c,4 | +@end lilypond + +El compás parcial puede ser de cualquier duración menor de un compás +completo: + +@lilypond[quote,verbatim,relative=2] +\partial 8*3 c8 d e | +a2. c,4 | +@end lilypond + +Internamente, @code{\partial @var{duración}} se traduce a + +@example +\set Timing.measurePosition -@var{duración} +@end example + +Por ejemplo, @code{\partial 8*3} se convierte en: + +@example +\set Timing.measurePosition = #(ly:make-moment -3 8) +@end example + +La propiedad @code{measurePosition} contiene un número racional que +indica qué parte del compás ha transcurrido hasta el momento. Observe +que se establece a un número negativo por parte de la instrucción +@code{\partial}: es decir, @code{\partial 4} se traduce internamente a +@code{-4}, con el significado de @qq{queda un valor de negra en este +compás}. + + +@seealso +Glosario musical: +@rglos{anacrusis}. + +Referencia de la notación: +@ref{Notas de adorno}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Timing_translator}. + +@knownissues + +El uso de @code{\partial} está previsto solamente para el comienzo de +una pieza. Si se emplea después del comienzo se obtendrán varias +advertencias o efectos desagradables, en este caso utilice en su lugar +@code{\set Timing.measurePosition}. + + +@node Música sin compasear +@unnumberedsubsubsec Música sin compasear +@translationof Unmetered music + +@cindex cadencia +@cindex líneas divisorias, quitar +@cindex numeración de compases, quitar +@cindex música sin metro + +@funindex \cadenzaOn +@funindex cadenzaOn +@funindex \cadenzaOff +@funindex cadenzaOff + +Las líneas divisorias y los números de compás se calculan +automáticamente. Para música sin compasear (por ejemplo cadencias), +esto no es deseable. Para desactivar las barras y los números de +compás automáticos, utilice la instrucción @code{\cadenzaOn}, y para +activarlos de nuevo use @code{\cadenzaOff}. + +@lilypond[verbatim,relative=2,quote] +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +La numeración de compases se continúa al final de la cadencia como si +la cadencia no existiera: + +@lilypond[verbatim,relative=2,quote] +% Show all bar numbers +\override Score.BarNumber #'break-visibility = #all-visible +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +@cindex barras en las cadencias +@cindex barras en música sin compasear +@cindex cadencia con barras +@cindex música sin compasear con barras + +El barrado automático se desactiva mediante @code{\cadenzaOn} y se +activa con @code{\cadenzaOff}. Por tanto, todo el barrado en las +cadencias se debe introducir manualmente (@ref{Barras manuales}). + +@lilypond[verbatim,relative=2,quote] +\repeat unfold 8 { c8 } +\cadenzaOn +\repeat unfold 5 { c8 } +\bar"|" +\cadenzaOff +\repeat unfold 8 { c8 } +@end lilypond + +Observe que estas instrucciones predefinidas afectan a todas las +pautas de la partitura, aunque aparezcan en un solo contexto +@code{Voice}. Para cambiar esto, traslade el +@code{Timing_translator} del contexto @code{Score} al contexto +@code{Staff}, como se muestra en @ref{Notación polimétrica}. + +@predefined +@code{\cadenzaOn}, +@code{\cadenzaOff}. +@endpredefined + + +@seealso +Glosario musical: +@rglos{cadenza}. + +Referencia de la notación: +@ref{Visibilidad de los objetos}, +@ref{Notación polimétrica}, +@ref{Barras manuales}. + +Fragmentos de código: +@rlsr{Rhythms}. + +@cindex cadencias, saltos de línea en +@cindex cadencias, saltos de página en +@cindex sin medida, música, saltos de línea en +@cindex sin medida, música, saltos de página en +@cindex saltos, en música sin medida +@cindex línea, saltos de, en cadencias +@cindex página, saltos de, en cadencias +@cindex línea, saltos de, en música sin medida +@cindex página, saltos de, en música sin medida + +@knownissues + +LilyPond inserta saltos de línea y de página solamente en las barras +de compás. A menos que la música sin compasear acabe antes del final +de la línea del pentagrama, tendrá que insertar barras de compás +invisibles + +@example +\bar "" +@end example + +@noindent +para indicar dónde se pueden producir los saltos. + +Deberíamos crear un contexto de voz explícitamente al empezar una +pieza con @code{\cadenzaOn}, pues en caso contrario pueden +ocurrir algunos errores extraños. + +@example +\new Voice @{ + \relative c' @{ + \cadenzaOn + c16[^"Solo Free Time" d e f] g2. + \bar "||" + \cadenzaOff + @} +@} +@end example + +@node Notación polimétrica +@unnumberedsubsubsec Notación polimétrica +@translationof Polymetric notation + +@c This section necessarily uses \set +@c This is acceptable -td + +@cindex compás, doble +@cindex compases polimétricos +@cindex polimétricos, compases +@cindex metro polimétrico +@cindex doble compás + +@funindex timeSignatureFraction +@funindex \scaleDurations +@funindex scaleDurations +@funindex \times +@funindex times + +Está contemplada la notación polimétrica, ya sea explícitamente o +mediante la modificación de la indicación visible del compás y el +escalado de la duración de las notas. + +@strong{Pentagramas con distintas indicaciones de compás, compases de +igual longitud} + +Se puede crear esta notación estableciendo una indicación de compás +común para cada pentagrama pero sustituyendo el símbolo manualmente +mediante el establecimiento de @code{timeSignatureFraction} a la +fracción deseada y escalando las duraciones impresas en cada +pentagrama a la indicación de compás común; véase @ref{Indicación de +compás}. El escalado se hace con @code{\scaleDurations}, que se usa +de una forma similar a @code{\times}, pero no crea un corchete de +grupo especial, véase @ref{Escalar las duraciones}. + +@cindex barras en música polimétrica +@cindex polimétrico, metro, barras en + +En este ejemplo, se usa en paralelo música con compases de 3/4, 9/8 y +10/8. En el segundo pentagrama, las duraciones mostradas se +multiplican por 2/3, pues 2/3 * 9/8 = 3/4, y en el tercer pentagrama, +las duraciones que se muestran están multiplicadas por 3/5, pues 3/5 * +10/8 = 3/4. Con frecuencia se hace necesario insertar las barras de +forma manual, pues el escalado de las duraciones afecta a las reglas +de barrado automático. + +@lilypond[quote,verbatim] +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \repeat unfold 6 { c8[ c c] } + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(10 . 8) + \scaleDurations #'(3 . 5) { + \repeat unfold 2 { c8[ c c] } + \repeat unfold 2 { c8[ c] } | + c4. c4. \times 2/3 { c8[ c c] } c4 + } + } +>> +@end lilypond + +@strong{@i{Pentagramas con distintas indicaciones de compás y +longitudes de compás distintas}} + +Se puede dar a cada pentagrama su propia indicación de compás +independiente trasladando los grabadores @code{Timing_translator} y +@code{Default_bar_line_engraver} al contexto de @code{Staff}. + +@lilypond[quote,verbatim] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +% Now each staff has its own time signature. + +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c4 c c | + } + \new Staff { + \time 2/4 + c4 c | + c4 c | + c4 c | + } + \new Staff { + \time 3/8 + c4. | + c8 c c | + c4. | + c8 c c | + } +>> +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + + +@seealso +Glosario musical: +@rglos{polymetric}, +@rglos{polymetric time signature}, +@rglos{meter}. + +Referencia de la notación: +@ref{Indicación de compás}, +@ref{Escalar las duraciones}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}, +@rinternals{Default_bar_line_engraver}, +@rinternals{Staff}. + + +@knownissues + +Al usar distintos compases en paralelo, las notas que están en el +mismo instante de tiempo se colocan en la misma posición horizontal. +Sin embargo, las barras de compás en los distintos pentagramas harán +que el espaciado de notas sea menos regular en cada pentagrama +individual de lo que sería normal sin las distintas indicaciones de +compás. + + +@node División automática de las notas +@unnumberedsubsubsec División automática de las notas +@translationof Automatic note splitting + +@cindex notas, división de +@cindex división de notas +@cindex silencios, división de +@cindex división de silencios + +@funindex Note_heads_engraver +@funindex Completion_heads_engraver +@funindex Completion_rest_engraver + +Las notas largas se pueden convertir automáticamente en notas ligadas. +Se hace mediante la sustitución del @code{Note_heads_engraver} por el +@code{Completion_heads_engraver}. De forma similar, los silencios largos que +sobrepasan líneas de compás se dividen automáticamente sustituyendo el +grabador @code{Rest_engraver} con el grabador @code{Completion_rest_engraver}. +En el ejemplo siguiente, las notas y los silencios que atraviesan la barra +de compás se dividen, y además las notas se unen mediante una ligadura. + +@lilypond[quote,verbatim,relative=1] +\new Voice \with { + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" +} + +{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 r1*2 } +@end lilypond + +Estos grabadores dividen todas las notas y silencios largos en la +barra de compás, e inserta ligaduras en las notas. +Uno de sus usos es depurar partituras complejas: +si los compases no están completos, las ligaduras mostrarán +exactamente cuánto le falta a cada compás. + + +@seealso +Glosario musical: +@rglos{tie} + +Manual de aprendizaje: +@rlearning{Explicación de los grabadores}, +@rlearning{Añadir y eliminar grabadores}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Note_heads_engraver}, +@rinternals{Completion_heads_engraver}, +@rinternals{Rest_engraver}, +@rinternals{Completion_rest_engraver}, +@rinternals{Forbid_line_break_engraver}. + + +@knownissues + +No todas las duraciones (sobre todo las que contienen grupos +especiales) se pueden representar exactamente con notas normales y +puntillos, pero el grabador @code{Completion_heads_engraver} nunca +insertará grupos especiales. + +@code{Completion_heads_engraver} afecta sólo a las notas; no divide +silencios. + + +@node Mostrar los ritmos de la melodía +@unnumberedsubsubsec Mostrar los ritmos de la melodía +@translationof Showing melody rhythms + +@cindex melodía, mostrar las duraciones +@cindex duraciones de la melodía, mostrar + +A veces podemos querer mostrar solamente el ritmo de una melodía. +Esto se puede hacer con un pentagrama de ritmo. Todas las alturas de +las notas se convierten en barras inclinadas, y el pentagrama tiene +una sola línea: + +@lilypond[quote,relative=1,verbatim] +<< + \new RhythmicStaff { + \new Voice = "myRhythm" { + \time 4/4 + c4 e8 f g2 + r4 g g f + g1 + } + } + \new Lyrics { + \lyricsto "myRhythm" { + This is my song + I like to sing + } + } +>> +@end lilypond + +@cindex guitarra, tablas de acordes +@cindex rasgueado, mostrar ritmos +@cindex guitarra, mostrar ritmos rasgueados + +@funindex Pitch_squash_engraver +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +Las tablas de acordes de guitarra ofrecen a menudo los ritmos de +rasgueado. Esto se puede hacer con el grabador +@code{Pitch_squash_engraver} y @code{\improvisationOn}. + +@lilypond[quote,verbatim] +<< + \new ChordNames { + \chordmode { + c1 f g c + } + } + \new Voice \with { + \consists Pitch_squash_engraver + } \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } +>> +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{guitar-strum-rhythms.ly} + + +@seealso +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{RhythmicStaff}, +@rinternals{Pitch_squash_engraver}. + + +@node Barras +@subsection Barras +@translationof Beams + +@menu +* Barras automáticas:: +* Establecer el comportamiento de las barras automáticas:: +* Barras manuales:: +* Barras progresivas:: +@end menu + +@node Barras automáticas +@unnumberedsubsubsec Barras automáticas +@translationof Automatic beams + +De manera predeterminada, las barras de corchea se insertan +automáticamente: + +@cindex barras manuales +@cindex manuales, barras +@cindex barras, reglas personalizadas + +@funindex \autoBeamOn +@funindex autoBeamOn +@funindex \autoBeamOff +@funindex autoBeamOff + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c8 c c c +\time 6/8 c8 c c c8. c16 c8 +@end lilypond + +Cuando estas decisiones automáticas no son lo bastante buenas, se +pueden escribir los barrados de forma explícita; véase @ref{Barras manuales}. Las barras @emph{se deben} introducir manualmente si se +quieren extender por encima de los silencios. + +Si no se necesita el barrado automático, se puede desactivar con +@code{\autoBeamOff} y activarse con @code{\autoBeamOn}: + +@lilypond[quote,relative=1,verbatim] +c4 c8 c8. c16 c8. c16 c8 +\autoBeamOff +c4 c8 c8. c16 c8. +\autoBeamOn +c16 c8 +@end lilypond + +@cindex melismas, barras en +@cindex barras y melismas + +@warning{Si se usan barras para indicar los melismas de las canciones, +entonces se debe desactivar el barrado automático con +@code{\autoBeamOff} e indicar las barras manualmente.} + +@warning{La utilización de @code{@bs{}partcombine} con +@code{@bs{}autoBeamOff} puede producir resultados no deseados. Véase +el fragmento de código de abajo para mayor información.} + +Se pueden crear patrones de barrado que difieran de los valores +automáticos predeterminados; véase @ref{Establecer el comportamiento de las barras automáticas}. + + +@predefined +@code{\autoBeamOff}, +@code{\autoBeamOn}. +@endpredefined + +@cindex barras en saltos de línea +@cindex línea, barras en saltos de +@cindex barras en ángulo +@cindex dobladas, barras +@funindex breakable + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beams-across-line-breaks.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-beam-knee-gap.ly} + +@cindex barras, \partcombine con \autoBeamOff +@cindex voces, \partcombine con \autoBeamOff + +@lilypondfile [verbatim, lilyquote, ragged-right, texidoc, doctitle] +{partcombine-and-autobeamoff.ly} + +@seealso +Referencia de la notación: +@ref{Barras manuales}, +@ref{Establecer el comportamiento de las barras automáticas}. + +Archivos instalados: +@file{scm/auto-beam.scm}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}, +@rinternals{unbreakable-spanner-interface}. + +@node Establecer el comportamiento de las barras automáticas +@unnumberedsubsubsec Establecer el comportamiento de las barras automáticas +@translationof Setting automatic beam behavior + +@cindex barras y letra +@cindex letra y barras + +@funindex autoBeaming +@funindex baseMoment +@funindex beamExceptions +@funindex beatStructure +@funindex measureLength +@funindex \time +@funindex time +@funindex \set +@funindex set + +En la mayor parte de los casos, las barras automáticas terminan al +final de un pulso. Los puntos finales de las barras vienen +determinados por las propiedades de contexto @code{baseMoment} y +@code{beatStructure}. @code{beatStructure} es una lista de Scheme que +define la longitud de cada pulso dentro del compás en unidades de +@code{baseMoment}. De forma predeterminada, @code{baseMoment} es una +unidad más que el numerador del compás. De forma predeterminada +también, cada unidad de longitud @code{baseMoment} es un único pulso. + +@lilypond[quote,relative=2,verbatim] +\time 5/16 +c16^"default" c c c c | +\set Timing.beatStructure = #'(2 3) +c16^"(2+3)" c c c c | +\set Timing.beatStructure = #'(3 2) +c16^"(3+2)" c c c c | +@end lilypond + +Los cambios en los ajustes de barrado se pueden limitar a contextos +específicos. Si no se incluye ningún ajuste en un contexto de nivel +más bajo, se aplican los ajustes del contexto circundante. + +@lilypond[quote, verbatim,relative=1] +\new Staff { + \time 7/8 + \set Staff.beatStructure = #'(2 3 2) + << + \new Voice = one { + \relative c'' { + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \set Voice.beatStructure = #'(1 3 3) + f8 f f f f f f + } + } + >> +} +@end lilypond + +En caso de usar varias voces, se debe especificar el contexto +@code{Staff} si queremos aplicar el barrado a todas las voces del +pentagrama: + +@lilypond[quote,verbatim,relative=2] +\time 7/8 +% rhythm 3-1-1-2 +% Change applied to Voice by default -- does not work correctly +% Because of autogenerated voices, all beating will +% be at baseMoment (1 . 8) +\set beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> + +% Works correctly with context Staff specified +\set Staff.beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> +@end lilypond + +El valor de @code{baseMoment} se puede ajustar para cambiar el +comportamiento de las barras, si se desea. Cuando se hace, el valor +de @code{beatStructure} se debe fijar de manera que sea compatible con +el nuevo valor de @code{baseMoment}. + +@lilypond[quote,verbatim,relative=2] +\time 5/8 +\set Timing.baseMoment = #(ly:make-moment 1 16) +\set Timing.beatStructure = #'(7 3) +\repeat unfold 10 { a16 } +@end lilypond + +@code{baseMoment} es un @i{momento}, una unidad de duración musical. +Se crea una cantidad del tipo @i{momento} por medio de la función de +Scheme @code{ly:make-moment}. Para ver más información acerca de esta +función, consulte @ref{Gestión del tiempo}. + +De forma predeterminada @code{baseMoment} está fijado a una unidad más +que el denominador del compás. Todas las excepciones a este valor +predeterminado están en +@file{scm/time-signature-settings.scm}. + +Las reglas de autobarrado especiales (distintas de terminar una barra +sobre un pulso) están definidas en la propiedad @code{beamExceptions}. + +@lilypond[quote,relative=2,verbatim] +\time 3/16 +\set Timing.beatStructure = #'(2 1) +\set Timing.beamExceptions = + #'( ;start of alist + (end . ;entry for end of beams + ( ;start of alist of end points + ((1 . 32) . (2 2 2)) ;rule for 1/32 beams -- end each 1/16 + ))) %close all entries +c16 c c | +\repeat unfold 6 { c32 } | +@end lilypond + +@code{beamExceptions} es una lista-A con una clave de rule-type y un +valor de beaming-rules. + +En este momento el único valor disponible de rule-type es @code{#'end} +para la terminación de las barras. + +Beaming-rules es una lista-A de Scheme (o una lista de parejas) que +indica el tipo de barra y la agrupación que se aplica a las barras que +contienen notas con una duración más breve de ese tipo de barra. + +@example +#'((tipo-barra1 . agrupación1) + (tipo-barra2 . agrupación2) + (tipo-barra3 . agrupación3)) +@end example + +Tipo de barra es una dupla de Scheme que indica la duración de la +barra, p.ej. @code{(1 . 16)}. + +Agrupación es una lista de Scheme que indica la agrupación que aplicar +a la barra. El valor de agrupación está en unidades del tipo de +barra. + +@warning{ Un valor de @code{beamExceptions} debe ser una lista de +excepciones @emph{completa}. Esto es, toda excepción que se tenga que +aplicar debe estar incluida en este ajuste. No es posible añadir, +eliminar o cambiar sólo una de las excepciones. Aunque esto puede +parecer engorroso, significa que no es necesario conocer los ajustes +de barrado actuales para poder especificar un patrón de barrado +nuevo.} + +Cuando cambia el compás, se fijan los valores predeterminados de +@code{Timing.baseMoment}, @code{Timing.beatStructure} y +@code{Timing.beamExceptions}. Un ajuste en el tipo de compás da como +resultado un reinicio de los ajustes de barrado automático para el +contexto @code{Timing} al comportamiento predeterminado. + +@lilypond[quote,verbatim,relative=2] +\time 6/8 +\repeat unfold 6 { a8 } +% group (4 + 2) +\set Timing.beatStructure = #'(4 2) +\repeat unfold 6 { a8 } +% go back to default behavior +\time 6/8 +\repeat unfold 6 { a8 } +@end lilypond + +Los ajustes de barrado automático predeterminados para un tipo de +compás están determinados en el archivo +@file{scm/time-signature-settings.scm}. La forma de cambiar los +ajustes predeterminados de barrado automático para un tipo de +compás se describe en @ref{Indicación de compás}. + +Muchos ajustes de barrado automáticos para un tipo de compás +contienen una entrada para @code{beamExceptions}. Por ejemplo, el +compás de 4/4 trata de unir el compás en dos partes si solo hay +corcheas. La regla @code{beamExceptions} puede sobreescribir el +ajuste @code{beatStructure} si no se reinicia @code{beamExceptions}. + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +\set Timing.baseMoment = #(ly:make-moment 1 8) +\set Timing.beatStructure = #'(3 3 2) +% This won't beam (3 3 2) because of beamExceptions +\repeat unfold 8 {c8} | +% This will beam (3 3 2) because we clear beamExceptions +\set Timing.beamExceptions = #'() +\repeat unfold 8 {c8} +@end lilypond + +De un modo similar, las corcheas en compás de 3/4 se unen como un +compás completo, de forma predeterminada. Para unir las corcheas +mediante barras sobre los pulsos en un compás de 3/4, reinicie +@code{beamExceptions}. + +@lilypond[quote,verbatim,relative=2] +\time 3/4 +% by default we beam in (3) due to beamExceptions +\repeat unfold 6 {a8} | +% This will beam (1 1 1) due to beatLength +\set Timing.beamExceptions = #'() +\repeat unfold 6 {a8} +@end lilypond + +@i{@strong{Cómo funciona el barrado automático}} + +Cuando se habilita el barrado automático, la colocación de las barras +de corchea automáticas viene determinada por las propiedades de +contexto @code{baseMoment}, @code{beatStructure} y +@code{beamExceptions}. + +Son de aplicación las siguientes reglas, en orden de prioridad, cuando +se determina el aspecto de las barras: + +@itemize +@item +Si está especificada una barra manual con @code{[..]}, fijar la barra +tal y como se ha especificado; en caso contrario, + +@item +si está definida en @code{beamExceptions} una regla de barrado para +este tipo de barra, utilizarla para determinar los lugares válidos en +que pueden terminar las barras; en caso contrario, + +@item +si está definida en @code{beamExceptions} una regla de final de barra +para un tipo de barra más largo, utilizarla para determinar los +lugares válidos en que pueden terminar las barras; en caso contrario, + +@item +usar los valores de @code{baseMoment} y de @code{beatStructure} para +determinar los finales de los pulsos dentro del compás, y terminar las +barras al final de los pulsos. + +@end itemize + +En las reglas anteriores, el tipo de barra @emph{beam-type} es +la duración de la nota más breve dentro del grupo unido por una barra. + +Las reglas de barrado predefinidas están +en el archivo @file{scm/time-signature-settings.scm}. + +@snippets + +@cindex barras, subdivisión + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{subdividing-beams.ly} + +@cindex compás, agrupación +@cindex pulsos, agrupación +@cindex agrupar pulsos +@cindex compases, sub-agrupar + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{conducting-signs,-measure-grouping-signs.ly} + +@cindex barra, finales en la partitura +@cindex barra, finales con varias voces + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beam-endings-in-score-context.ly} + + +@seealso +Archivos de inicio: +@file{scm/beam-settings.scm}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}. + + +@knownissues +Si una partitura termina mientras una barra automática no ha terminado +aún todavía está aceptando notas, esta última barra no se imprimirá en +absoluto. Lo mismo sirve para las voces polifónicas, introducidas con +@code{<< @dots{} \\ @dots{} >>}. Si una voz polifónica termina +mientras una barra automática está aún aceptando notas, no se imprime. +El rodeo para estos problemas es aplicar el barrado +manual a la última barra de la voz o partitura. + +De forma predeterminada, el traductor @code{Timing} recibe el nombre +del contexto @code{Score} como alias. Esto significa que el +establecimiento del compás en ua pauta afectará al barrado de las +otras pautas también. Así, un ajuste en el compás en un pentagrama +tardío reiniciará el barrado personalizado que se había ajustado en un +pentagrama más temprano. Una forma de evitar este problema es ajustar +la indicación de compás en un pentagrama solamente. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \time 3/4 + \set Timing.baseMoment = #(ly:make-moment 1 8) + \set Timing.beatStructure = #'(1 5) + \repeat unfold 6 { a8 } + } + \new Staff { + \repeat unfold 6 { a8 } + } +>> +@end lilypond + +Los ajustes de barrado predeterminados para dicho compás también se +pueden cambiar, de forma que siempre se utilice siempre el barrado +deseado. La manera de efectuar cambios en los ajustes de barrado +automático para una indicación de compás se describe en +@ref{Indicación de compás}. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \overrideTimeSignatureSettings + #'(3 . 4) % timeSignatureFraction + #'(1 . 8) % baseMomentFraction + #'(1 5) % beatStructure + #'() % beamExceptions + \time 3/4 + \repeat unfold 6 { a8 } + } + \new Staff { + \time 3/4 + \repeat unfold 6 { a8 } + } +>> +@end lilypond + + +@node Barras manuales +@unnumberedsubsubsec Barras manuales +@translationof Manual beams + +@cindex barras manuales +@cindex manuales, barras + +@funindex ] +@funindex [ + +En ciertos casos puede ser preciso sobreescribir el algoritmo de +barrado automático. Por ejemplo, el barrador automático no escribe +barras por encima de los silencios o las líneas divisorias, y en las +partituras corales el barrado se ajusta con frecuencia para que siga +la medida de la letra en vez de la de las notas. Tales barras se +especifican manualmente marcando los puntos de comienzo y final con +@code{[} y @code{]} + +@lilypond[quote,relative=1,verbatim] +r4 r8[ g' a r] r g[ | a] r +@end lilypond + +@cindex barras manuales, abreviatura de dirección +@cindex barras manuales, notas de adorno + +La dirección de las barras se puede establecer manualmente utilizando +indicadores de dirección: + +@lilypond[quote,relative=2,verbatim] +c8^[ d e] c,_[ d e f g] +@end lilypond + +@funindex \noBeam +@funindex noBeam + +Se pueden marcar notas individuales con @code{\noBeam} para evitar que +resulten unidas por una barra: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c8 c\noBeam c c +@end lilypond + +Se pueden producir al mismo tiempo barras de notas de adorno y barras +normales. Las notas de adorno sin barra no se colocan dentro de las +barras de notas normales. + +@lilypond[quote,verbatim,relative=2] +c4 d8[ +\grace { e32[ d c d] } +e8] e[ e +\grace { f16 } +e8 e] +@end lilypond + +@funindex stemLeftBeamCount +@funindex stemRightBeamCount + +Se puede conseguir un control incluso más estricto sobre las barras +estableciendo las propiedades @code{stemLeftBeamCount} y +@code{stemRightBeamCount}. Especifican el número de barras que se +dibujarán en los lados izquierdo y derecho, respectivamente, de la +nota siguiente. Si cualquiera de estas dos propiedades está ajustada +a un valor, dicho valor se usará una sola vez, y luego se borrará. En +este ejemplo, el último Fa se imprime con sólo una barra en el lado +izquierdo, es decir, la barra de corchea del grupo como un todo. + +@lilypond[quote,relative=2,verbatim] +a8[ r16 f g a] +a8[ r16 +\set stemLeftBeamCount = #2 +\set stemRightBeamCount = #1 +f16 +\set stemLeftBeamCount = #1 +g16 a] +@end lilypond + + +@predefined +@code{\noBeam}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{flat-flags-and-beam-nibs.ly} + + +@seealso +Referencia de la notación: +@ref{Dirección y posición}, +@ref{Notas de adorno}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{Beam_engraver}, +@rinternals{beam-interface}, +@rinternals{Stem_engraver}. + + +@node Barras progresivas +@unnumberedsubsubsec Barras progresivas +@translationof Feathered beams + +@cindex barras progresivas +@cindex progresivas, barras + +@funindex \featherDurations +@funindex featherDurations +@funindex grow-direction + +Las barras progresivas se usan para indicar que un pequeño grupo de +notas se debe tocar a una velocidad creciente (o decreciente), sin +cambiar el tempo general de la pieza. El ámbito de la barra progresiva +se debe indicar manualmente usando @code{[} y @code{]}, el efecto de +ángulo de la barra se inicia especificando una dirección en la +propiedad @code{grow-direction} del objeto @code{Beam}. + +Si queremos que la colocación de las notas y el sonido de la salida +MIDI refleje el @emph{ritardando} o @emph{accelerando} +indicado por la barra +progresiva, las notas se deben agrupar como una expresión musical +delimitada por llaves y precedida de una instrucción +@code{featheredDurations} que especifica la razón entre las duraciones +de la primera y la última notas dentro del grupo. + +Los corchetes rectos muestran el ámbito de la barra y las llaves +muestran qué notas han de modificar sus duraciones. Normalmente +delimitarían el mismo grupo de notas, pero no es un requisito: las dos +instrucciones son independientes. + +En el ejemplo siguiente las ocho semicorcheas ocupan exactamente el +mismo tiempo que una blanca, pero la primera nota tiene la mitad de +duración que la última, con las notas intermedias alargándose +gradualmente. Las cuatro primeras fusas se aceleran gradualmente, +mientras que las últimas cuatro fusas están a un tempo constante. + +@lilypond[relative=1,verbatim,quote] +\override Beam #'grow-direction = #LEFT +\featherDurations #(ly:make-moment 2 1) +{ c16[ c c c c c c c] } +\override Beam #'grow-direction = #RIGHT +\featherDurations #(ly:make-moment 2 3) +{ c32[ d e f] } +% revert to non-feathered beams +\override Beam #'grow-direction = #'() +{ g32[ a b c] } +@end lilypond + +@noindent +El espaciado en la salida impresa representa las duraciones de las +notas de una forma sólo aproximada, pero la salida MIDI es exacta. + + +@predefined +@code{\featherDurations}. +@endpredefined + +@seealso +Fragmentos de código: +@rlsr{Rhythms}. + + +@knownissues + +La instrucción @code{\featherDurations} sólo funciona con fragmentos +musicales muy breves, y cuando los números de la fracción son +pequeños. + + +@node Compases +@subsection Compases +@translationof Bars + +@menu +* Barras de compás:: +* Numeración de compases:: +* Comprobación de compás y de número de compás:: +* Llamadas de ensayo:: +@end menu + + +@node Barras de compás +@unnumberedsubsubsec Barras de compás +@translationof Bar lines + +@cindex barras de compás +@cindex líneas divisorias +@cindex final, barra +@cindex barra final +@cindex doble barra +@cindex barra doble +@cindex repetición, barras de + +@funindex \bar +@funindex bar + +Las líneas divisorias delimitan a los compases pero también se pueden +usar para indicar las repeticiones. Normalmente, las líneas +divisorias normales se insertan de manera automática en la salida +impresa en lugares que están basados en el compás actual. + +Las barras de compás sencillas insertadas automáticamente se pueden +cambiar por otros tipos con la instrucción @code{\bar}. Por ejemplo, +se suele poner una doble barra de cierre al final de la pieza: + +@lilypond[quote,relative=1,verbatim] +e4 d c2 \bar "|." +@end lilypond + +No deja de ser válida la última nota de un compás si no termina sobre +la línea divisoria automática: se supone que la nota se prolonga sobre +el compás siguiente. Pero una secuencia larga de dichos compases +prolongados puede hacer que la música aparezca comprimida o incluso +que se salga de la página. Esto es a causa de que los saltos de línea +automáticos solamente se producen al final de compases completos, es +decir, cuando todas las notas han finalizado antes de que el compás +termine. + +@warning{Una duración incorrecta puede hacer que se trate de evitar la +producción de saltos de línea, dando como resultado una línea de +música con una compresión exagerada o música que se sale de la +página.} + +@cindex línea, saltos +@cindex líneas divisorias invisibles +@cindex compás, barras invisibles de + +También se permiten saltos de línea en las barras insertadas +manualmente incluso dentro de compases incompletos. Para permitir un +salto de línea donde no hay ninguna línea divisoria visible, utilice +lo siguiente: + +@example +\bar "" +@end example + +@noindent +De esta manera se insertará una barra invisible de compás y se hará +posible el salto de línea en este punto, sin forzarlo. No se +incrementa el contador de los números de compás. Para forzar un salto +de línea, consulte @ref{Saltos de línea}. + +@cindex manuales, líneas divisorias +@cindex manuales, barras de compás +@cindex barras de compás manuales +@cindex líneas divisorias manuales + +Esta y otras líneas divisorias especiales se pueden insertar +manualmente en cualquier punto. Cuando coinciden con el final de un +compás, sustituyen a la línea divisoria simple que se habría insertado +automáticamente en dicho lugar. Cuando no coinciden con el final de +un compás, se inserta la línea especificada en ese punto en la salida +impresa. + +Observe que las líneas divisorias manuales son puramente visuales. No +afectan a ninguna de las propiedades que una barra normal afectaría, +como a los números de compás, alteraciones, saltos de línea, etc. No +afectan tampoco al cálculo y colocación de las líneas divisorias +subsiguientes. Cuando una divisoria se coloca manualmente donde ya +existe una divisoria normal, los efectos de la línea original no se +alteran. + +Están disponibles para su inserción manual dos tipos de líneas +divisorias simples y cinco tipos de doble barra: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|" +f1 \bar "." +g1 \bar "||" +a1 \bar ".|" +b1 \bar ".|." +c1 \bar "|.|" +d1 \bar "|." +e1 +@end lilypond + +@noindent +así como la barra de puntos y la discontinua: + +@lilypond[quote,relative=1,verbatim] +f1 \bar ":" +g1 \bar "dashed" +a1 +@end lilypond + +@noindent +y cinco tipos de barra de repetición: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|:" +g1 \bar ":|:" +a1 \bar ":|.|:" +b1 \bar ":|.:" +c1 \bar ":|" +e1 +@end lilypond + +Además se puede imprimir una línea divisoria como una marca corta: +@lilypond[quote,relative=1,verbatim] +f1 \bar "'" +@end lilypond +Sin embargo, dado que las mencionadas marcas se utilizan usualmente en +el canto gregoriano, es preferible en este caso utilizar +@code{\divisioMinima}, que se describe en la sección @ref{Divisiones} +dentro de Canto gregoriano. + +@cindex segno + +Para los símbolos de segno en línea, existen tres tipos +de barras de compás que se diferencian en su comportamiento +en los saltos de línea: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "S" +c4 c c c \break +\bar "S" +c4 c c c +\bar "|S" +c4 c c c \break +\bar "|S" +c4 c c c +\bar "S|" +c4 c c c \break +\bar "S|" +c1 +@end lilypond + +@cindex repeticiones + +Aunque se pueden insertar manualmente barras de compás con significado +de repeticiones, no se reconocen como repeticiones por parte de +LilyPond. Las secciones repetidas se introducen mejor utilizando las +diversas instrucciones de repetición (véase @ref{Repeticiones}), que +imprimen automáticamente las barras correspondientes. + +Además se puede especificar @code{"||:"}, que equivale a @code{"|:"} +excepto en los saltos de línea, en que produce una doble barra al +final de la línea y una repetición izquierda (de comienzo) al +principio de la línea siguiente. + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "||:" +c4 c c c \break +\bar "||:" +c4 c c c +@end lilypond + +Para combinaciones de repeticiones con el símbolo de segno, +existen seis variantes diferentes: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar ":|S" +c4 c c c \break +\bar ":|S" +c4 c c c +\bar ":|S." +c4 c c c \break +\bar ":|S." +c4 c c c +\bar "S|:" +c4 c c c \break +\bar "S|:" +c4 c c c +\bar ".S|:" +c4 c c c \break +\bar ".S|:" +c4 c c c +\bar ":|S|:" +c4 c c c \break +\bar ":|S|:" +c4 c c c +\bar ":|S.|:" +c4 c c c \break +\bar ":|S.|:" +c1 +@end lilypond + + +En las partituras con muchos pentagramas, una instrucción @code{\bar} +en uno de ellos se aplica automáticamente a todos los demás. Las +líneas resultantes se conectan entre los distintos pentagramas de un +@code{StaffGroup}, @code{PianoStaff} o @code{GrandStaff}. + +@lilypond[quote,relative=1,verbatim] +<< + \new StaffGroup << + \new Staff { + e4 d + \bar "||" + f4 e + } + \new Staff { \clef bass c4 g e g } + >> + \new Staff { \clef bass c2 c2 } +>> +@end lilypond + + +@cindex predeterminada, línea divisoria, cambiar +@cindex línea divisoria predeterminada, cambiar + +@snippets + +@funindex whichBar +@funindex defaultBarType +@funindex \bar +@funindex bar +@funindex bartype + +La instrucción @samp{\bar @var{tipo de barra}} es una forma corta de +hacer @samp{\set Timing.whichBar = @var{tipo de barra}}. Cuando +@code{whichBar} se establece con el valor de una cadena, se crea una +línea divisoria de ese tipo. + +El tipo de barra predeterminado que se usa para las líneas divisorias +insertadas automáticamente es @code{"|"}. Se puede cambiar en +cualquier momento con +@samp{\set Timing.defaultBarType = @var{tipo de barra}}. + + +@seealso +Referencia de la notación: +@ref{Saltos de línea}, +@ref{Repeticiones}, +@ref{Agrupar pentagramas}. + + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{BarLine} (creada al nivel de @code{Staff} (pentagrama)), +@rinternals{SpanBar} (a través de los pentagramas), +@rinternals{Timing_translator} (para las propiedades del contador de tiempo Timing). + + +@node Numeración de compases +@unnumberedsubsubsec Numeración de compases +@translationof Bar numbers + +@cindex compás, números de +@cindex números de compás + +@funindex currentBarNumber + +Por defecto, los números de compás se imprimen al principio de la +línea, excepto la primera. El número propiamente dicho se almacena en +la propiedad @code{currentBarNumber}, que normalmente se actualiza +automáticamente para cada compás. También se puede establecer +manualmente: + +@lilypond[verbatim,quote,relative=1] +c1 c c c +\break +\set Score.currentBarNumber = #50 +c1 c c c +@end lilypond + +@cindex números de compás, espaciado regular + +@funindex barNumberVisibility +@funindex BarNumber + +Los números de compás se pueden tipografiar a intervalos regulares en +vez de al principio de cada línea. Para hacerlo se debe sobreescribir +el comportamiento predeterminado de forma que se puedan imprimir en +otros lugares. Esto viene controlado por la propiedad +@code{break-visibility} de @code{BarNumber}. Toma tres valores que se +pueden fijar al valor @code{#t} o @code{#f} para especificar si el +número de compás correspondiente es visible o no. El orden de los +tres valores es @code{visible al final de la línea}, @code{visible en +mitad de la línea}, @code{visible al principio de la línea}. En el +ejemplo siguiente se imprimen los números de compás en todos los +sitios posibles: + +@lilypond[verbatim,quote,relative=1] +\override Score.BarNumber #'break-visibility = #'#(#t #t #t) +\set Score.currentBarNumber = #11 +% Permit first bar number to be printed +\bar "" +c1 | c | c | c +\break +c1 | c | c | c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-the-bar-number-for-the-first-measure.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-at-regular-intervals.ly} + +@cindex compás, número de, formato +@cindex número de compases, formato de + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-inside-boxes-or-circles.ly} + +@cindex compás, número, alineación + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{aligning-bar-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{removing-bar-numbers-from-a-score.ly} + + +@seealso +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{BarNumber}, +@rinternals{Bar_number_engraver}. + + +@cindex número de compás, colisión +@cindex colisión del número de compás + +@knownissues +Los números de compás pueden colisionar con el corchete +@code{StaffGroup}, si hay uno en la parte de arriba. Para +solucionarlo, se puede usar la propiedad de relleno @code{padding} de +@code{BarNumber} para colocar el número correctamente. +Consulte @rinternals{StaffGroup} y @rinternals{BarNumber} +para ver más información. + + +@node Comprobación de compás y de número de compás +@unnumberedsubsubsec Comprobación de compás y de número de compás +@translationof Bar and bar number checks + +@cindex compás, comprobación de +@cindex número de compás, comprobación de +@cindex compás, comprobación +@cindex compás, número, comprobación + +@funindex barCheckSynchronize +@funindex | + +Las comprobaciones de compás ayudan a detectar errores en las +duraciones. Una comprobación de compás se escribe usando el símbolo +de la barra vertical, @code{|}, en cualquier lugar donde se espera que +caiga una línea divisoria. Si se encuentran líneas de comprobación de +compás en otros lugares, se imprime una lista de advertencias en el +archivo log de registro, mostrando los números de línea y columna en +que han fallado las comprobaciones de compás. En el siguiente +ejemplo, la segunda comprobación de compás avisará de un error + +@example +\time 3/4 c2 e4 | g2 | +@end example + +Las comprobaciones de compás también se pueden usar en la letra de las +canciones: + +@example +\lyricmode @{ + \time 2/4 + Bri -- lla, | bri -- lla, | +@} +@end example + +Las duraciones incorrectas a menudo desbaratan la partitura +completamente, sobre todo si la música es polifónica, por ello el +mejor sitio para empezar a corregir la entrada es hacer un barrido en +busca de comprobaciones de compás fallidas y duraciones incorrectas. + +Si varias comprobaciones de compás corresponden al mismo intervalo +musical, sólo se imprime el primer mensaje de advertencia. Esto +permite que la advertencia se centre en la fuente del error de cuenta +de tiempo. + +@funindex | +@funindex pipeSymbol + +También es posible redefinir la acción que se lleva a cabo cuando se +encuentra un símbolo de comprobación de compás o «símbolo de tubería», +@code{|}, en el código de entrada, de forma que haga algo distinto a +una comprobación de compás. Se hace asignando una expresión musical a +@code{pipeSymbol} («símbolo de tubería»). En el ejemplo siguiente se +establece @code{|} de forma que inserte una doble línea divisoria +cuando aparece en el código de entrada, en vez de comprobar el final +de un compás. + +@lilypond[quote,verbatim] +pipeSymbol = \bar "||" +{ + c'2 c' | + c'2 c' + c'2 | c' + c'2 c' +} +@end lilypond + +@funindex \barNumberCheck +@funindex barNumberCheck + +Al copiar piezas musicales grandes puede servir de ayuda comprobar que +el número de compás de LilyPond corresponde al original desde el que +está copiando. Esto se puede comprobar con @code{\barNumberCheck}, +por ejemplo: + +@verbatim +\barNumberCheck #123 +@end verbatim + +@noindent +imprimirá una advertencia si el @code{currentBarNumber} (número del +compás actual) no es 123 cuando se procesa. + + +@seealso +Fragmentos de código: +@rlsr{Rhythms}. + + +@node Llamadas de ensayo +@unnumberedsubsubsec Llamadas de ensayo +@translationof Rehearsal marks + +@cindex ensayo, letras de +@cindex letras de ensayo + +@funindex \mark +@funindex mark + +Para imprimir una letra de ensayo, utilice la orden @code{\mark}. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +La letra de ensayo se incrementa automáticamente si usa @code{\mark +\default}, pero también puede utilizar un número entero como argumento +para establecer la indicación manualmente. El valor que se utilizará +se almacena dentro de la propiedad @code{rehearsalMark}. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +La letra@tie{}@q{I} se salta de acuerdo con las tradiciones de +grabado. Si quiere incluir la letra @q{I}, use una de las +instrucciones siguientes, según el estilo de marcas de +ensayo que desee (sólo letras, letras dentro de un rectángulo +o letras dentro de un círculo). + +@example +\set Score.markFormatter = #format-mark-alphabet +\set Score.markFormatter = #format-mark-box-alphabet +\set Score.markFormatter = #format-mark-circle-alphabet +@end example + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-box-alphabet +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@cindex ensayo, letra de, formato +@cindex ensayo, letra de, estilo +@cindex estilo de la letra de ensayo +@cindex formato de la letra de ensayo +@cindex letra de ensayo, estilo +@cindex letra de ensayo, formato +@cindex marca de ensayo, estilo +@cindex marca de ensayo, formato +@cindex ensayo, letra de, manual +@cindex marca de ensayo manual +@cindex personalizada, marca de ensayo +@cindex manual, marca de ensayo + +El estilo se define por medio de la propiedad @code{markFormatter}. +Es una función que toma como argumentos la marca en curso (un número +entero) y el contexto actual. Debe devolver un objeto de marcado. En +el ejemplo siguiente, se establece @code{markFormatter} con el valor +de un procedimiento enlatado. Después de algunos compases, se +establece con el valor de una función que produce un número encerrado +en una caja. + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-numbers +c1 \mark \default +c1 \mark \default +\set Score.markFormatter = #format-mark-box-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-letters +c1 +@end lilypond + +El archivo @file{scm/translation-functions.scm} contiene las +definiciones de @code{format-mark-numbers} (el formato por omisión), +@code{format-mark-box-numbers}, @code{format-mark-letters} y +@code{format-mark-box-letters}. Se pueden usar éstos como inspiración +para otras funciones de formateo. + +Podemos utilizar @code{format-mark-barnumbers}, +@code{format-mark-box-barnumbers} y +@code{format-mark-circle-barnumbers} para obtener números de compás en +lugar de números o letras secuenciales. + +Se pueden especificar otros estilos de letra de ensayo de forma +manual: + +@example +\mark "A1" +@end example + +@noindent +Observe que @code{Score.markFormatter} no afecta a las marcas que se +especifican de esta forma. Sin embargo, es posible aplicar un +elemento @code{\markup} a la cadena. + +@example +\mark \markup@{ \box A1 @} +@end example + +@cindex segno +@cindex coda +@cindex D.S. al Fine +@cindex calderón +@cindex musicales, glifos +@cindex glifos musicales + +@funindex \musicglyph +@funindex musicglyph + +Los glifos musicales (como el segno) se pueden imprimir dentro de un +elemento @code{\mark} + +@lilypond[quote,verbatim,relative=1] +c1 \mark \markup { \musicglyph #"scripts.segno" } +c1 \mark \markup { \musicglyph #"scripts.coda" } +c1 \mark \markup { \musicglyph #"scripts.ufermata" } +c1 +@end lilypond + +@noindent +Consulte @ref{La tipografía Feta} para ver una lista de los símbolos que se +pueden imprimir con @code{\musicglyph}. + +Para ver formas comunes de trucar la colocación de las letras de +ensayo, consulte @ref{Indicaciones de texto}. Para un control más +preciso, consulte @code{break-alignable-interface} en la sección +@ref{Alinear los contextos}. + + +@seealso +Referencia de la notación: +@ref{La tipografía Feta}, +@ref{Formatear el texto}, +@ref{Alinear los contextos}. + +Archivos de inicio: @file{scm/translation-functions.scm} +contiene las definiciones de @code{format-mark-numbers} y de +@code{format-mark-letters}. Se pueden usar como inspiración para +escribir otras funciones de formateo. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + + +@node Asuntos rítmicos especiales +@subsection Asuntos rítmicos especiales +@translationof Special rhythmic concerns + +@menu +* Notas de adorno:: +* Alinear con una cadenza:: +* Gestión del tiempo:: +@end menu + +@node Notas de adorno +@unnumberedsubsubsec Notas de adorno +@translationof Grace notes + +@cindex ornamentos +@cindex mordentes +@cindex appoggiatura +@cindex acciaccatura + +@funindex \grace +@funindex grace + +Los mordentes y notas de adorno son ornamentos escritos. +Se imprimen en un tipo más pequeño y no ocupan ningún +tiempo lógico en el compás. + +@lilypond[quote,relative=2,verbatim] +c4 \grace c16 c4 +\grace { c16[ d16] } c2 +@end lilypond + +LilyPond también contempla dos tipos especiales de notas de adorno, la +@emph{acciaccatura} o mordente de una nota (una nota de adorno sin +medida que se indica mediante una pequeña nota ligada y con el +corchete tachado) y la @emph{appoggiatura}, que toma una fracción fija +de la nota principal, y se denota como una nota pequeña, ligada, sin +tachar. + +@lilypond[quote,relative=2,verbatim] +\grace c8 b4 +\acciaccatura d8 c4 +\appoggiatura e8 d4 +\acciaccatura { g16[ f] } e4 +@end lilypond + +La colocación de notas de adorno se sincroniza entre los distintos +pentagramas. En el siguiente ejemplo, hay dos semicorcheas de adorno +por cada corchea de adorno: + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e2 \grace { c16[ d e f] } e2 } + \new Staff { c2 \grace { g8[ b] } c2 } +>> +@end lilypond + +@cindex adorno, seguimiento de notas de + +@funindex \afterGrace +@funindex afterGrace + +Si queremos terminar una nota con un adorno, usamos la instrucción +@code{\afterGrace}. Toma dos argumentos: la nota principal, y las +notas de adorno que siguen a la nota principal. + +@lilypond[quote,verbatim,relative=2] +c1 \afterGrace d1 { c16[ d] } c1 +@end lilypond + +Esto pone las notas de adorno después de un espacio que dura 3/4 de la +longitud de la nota principal. La fracción predeterminada de 3/4 se +puede cambiar estableciendo @code{afterGraceFraction}. El ejemplo +siguiente muestra el resultado de establecer el espacio en su valor +predeterminado, en 15/16, y por último en 1/2 de la nota principal. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 15 16)) + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 1 2)) + c1 \afterGrace d1 { c16[ d] } c1 + } +>> +@end lilypond + +El espacio entre la nota principal y la de adorno también se puede +especificar usando espaciadores. El ejemplo siguiente sitúa +la nota de adorno después de un espacio que dura 7/8 de la +nota principal. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + << + { d1^\trill_( } + { s2 s4. \grace { c16[ d] } } + >> + c1) +} +@end lilypond + +@cindex trucaje de las notas de adorno +@cindex notas de adorno, trucar +@cindex notas de adorno, cambiar los ajustes de disposición + +Una expresión musical @code{\grace} introduce ajustes de tipografía +especiales, por ejemplo para producir un tipo más pequeño y para fijar +las direcciones. Por ello, cuando se introducen trucos para la +presentación, deben ir dentro de la expresión de adorno. Las +sobreescrituras se deben también revertir dentro de la expresión de +adorno. Aquí, la dirección predeterminada de la plica de la nota de +adorno se sobreescribe y luego se revierte. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + \acciaccatura { + \stemDown + f16-> + \stemNeutral + } + g4 e c2 +} +@end lilypond + + +@cindex plica cruzada + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-grace-note-slashes-with-normal-heads.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-grace-layout-within-music.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{redefining-grace-note-global-defaults.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-grace-notes-with-floating-space.ly} + + +@seealso +Glosario musical: +@rglos{grace notes}, +@rglos{acciaccatura}, +@rglos{appoggiatura}. + +Referencia de la notación: +@ref{Barras manuales}. + +Archivos de inicio: +@file{ly/grace-init.ly}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{GraceMusic}, +@rinternals{Grace_beam_engraver}, +@rinternals{Grace_engraver}, +@rinternals{Grace_spacing_engraver}. + + +@knownissues + +@cindex acciaccatura de varias notas +@cindex adorno, sincronización de notas de + +Una @i{acciaccatura} de varias notas con una barra se imprime sin +tachar, y tiene exactamente la misma apariencia que una +@i{appoggiatura} de varias notas con barra. + +@c TODO Add link to LSR snippet to add slash when available + +La sincronización de las notas de adorno también puede acarrear +sorpresas. La notación de pentagramas, como armaduras, líneas +divisorias, etc., se sincronizan también. Ponga cuidado cuando mezcle +pentagramas con adornos y sin adornos, por ejemplo + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" d2. } +>> +@end lilypond + +@noindent +Esto se puede remediar insertando desplazamientos de adorno de las +duraciones correspondientes en los otros pentagramas. Para el ejemplo +anterior + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" \grace s16 d2. } +>> +@end lilypond + +El uso de notas de adorno dentro de los contextos de voz tiende +a confundir la manera en que se tipografía la voz. +Esto se puede soslayar mediante la inserción de un silencio o nota +entre la instrucción de voz y la nota de adorno. + +@lilypond[quote,verbatim] +accMusic = { + \acciaccatura { f8 } e8 r8 \acciaccatura { f8 } e8 r4 +} + +\new Staff { + << + \new Voice { + \relative c'' { + r8 r8 \voiceOne \accMusic \oneVoice r8 | + r8 \voiceOne r8 \accMusic \oneVoice r8 | + } + } + \new Voice { + \relative c' { + s8 s8 \voiceTwo \accMusic \oneVoice s8 | + s8 \voiceTwo r8 \accMusic \oneVoice s8 | + } + } + >> +} +@end lilypond + +Las secciones de adorno sólo se deben usar dentro de expresiones de +música secuenciales. No están contemplados el anidado ni la +yuxtaposición de secciones de adorno, y podría producir caídas u otros +errores. + +Cada nota de adorno en la salida MIDI tiene una longitud que es 1/4 de +su duración real. Si la duración combinada de las notas de adorno es +mayor que la longitud de la nota precedente, se genera un error +@qq{@code{Retrocediendo en el tiempo MIDI}}. Tiene dos opciones: en +primer lugar, puede hacer más corta la duración de las notas de +adorno, por ejemplo: + +@example +\acciaccatura @{ c'8[ d' e' f' g'] @} +@end example + +se convierte en: + +@example +\acciaccatura @{ c'16[ d' e' f' g'] @} +@end example + +Otra opción es cambiar explícitamente la duración musical: + +@example +\acciaccatura @{ \scaleDurations #' (1 . 2) @{ c'8[ d' e' f' g'] @} @} +@end example + +Véase @ref{Escalar las duraciones}. + + +@node Alinear con una cadenza +@unnumberedsubsubsec Alinear con una cadenza +@translationof Aligning to cadenzas + +@cindex cadenza (cadencia) +@cindex cadenza (cadencia), alinear a +@cindex alineación a una cadenza (cadencia) + +En un contexto orquestal, las cadenzas presentan un problema especial: +al construir una partitura que tiene una cadenza, todos los demás +instrumentos deben saltar tantas notas como la longitud de la cadenza, +pues en caso contrario empezarán demasiado pronto o tarde. + +Una solución a este problema son las funciones @code{mmrest-of-length} +y @code{skip-of-length}. Estas funciones de Scheme toman un fragmento +de música como argumento y generan un @code{\skip} o silencio +multicompás, de la longitud exacta del fragmento. + +@lilypond[verbatim,quote] +MyCadenza = \relative c' { + c4 d8 e f g g4 + f2 g4 g +} + +\new GrandStaff << + \new Staff { + \MyCadenza c'1 + \MyCadenza c'1 + } + \new Staff { + #(ly:export (mmrest-of-length MyCadenza)) + c'1 + #(ly:export (skip-of-length MyCadenza)) + c'1 + } +>> +@end lilypond + + +@seealso +Glosario musical: +@rglos{cadenza}. + +Fragmentos de código: +@rlsr{Rhythms}. + + +@node Gestión del tiempo +@unnumberedsubsubsec Gestión del tiempo +@translationof Time administration + +@cindex tiempo, administración +@cindex tiempo, control del (dentro de la partitura) +@cindex música sin medida +@cindex medida, música sin + +@funindex currentBarNumber +@funindex measurePosition +@funindex measureLength + +El tiempo está administrado por el @code{Timing_translator}, que de +forma predeterminada vive en el contexto de @code{Score}. Se añade un +alias, @code{Timing}, al contexto en que se coloca el +@code{Timing_translator}. +Para asegurar que está disponible el alias @code{Timing}, quizá +tenga que crear explícitamente una instancia del contexto +contenedor (como @code{Voice} o @code{Staff}). + +Se usan las siguientes propiedades de @code{Timing} para seguir la +pista del tiempo dentro de la partitura. + +@cindex compás, número de +@cindex número de compás + +@table @code +@item currentBarNumber +El número de compás en curso. Para ver un ejemplo que muestra el uso +de esta propiedad, consulte @ref{Numeración de compases}. + +@item measureLength +La longitud de los compases dentro de la indicación actual de compás. +Para un 4/4 esto es@tie{}1, y para el 6/8 es 3/4. Su valor determinad +cuándo se insertan las líneas divisorias y cómo se generan las barras +automáticas. + +@item measurePosition +El punto en que nos encontramos dentro del compás. Esta cantidad se +reinicia sustrayendo @code{measureLength} cada vez que se alcanza o se +excede @code{measureLength}. Cuando eso ocurre, se incrementa +@code{currentBarNumber}. + +@item timing +Si tiene un valor verdadero, las variables anteriores se actualizan a +cada paso de tiempo. Cuando tiene un valor falso, el grabador se +queda en el compás actual indefinidamente. + +@end table + +La cuenta del tiempo se puede cambiar estableciendo el valor de +cualquiera de estas variables explícitamente. En el siguiente +ejemplo, se imprime la indicación de compás predeterminada 4/4, pero +@code{measureLength} tiene está ajustado a 5/4. En los 4/8 hasta el +tercer compás, la posición @code{measurePosition} se adelanta en 1/8 +hasta 5/8, acortando ese compás en 1/8. Entonces, la siguiente línea +divisoria cae en 9/8 en vez de hacerlo en 5/4. + +@lilypond[quote,verbatim] +\new Voice \relative c' { + \set Timing.measureLength = #(ly:make-moment 5 4) + c1 c4 | + c1 c4 | + c4 c + \set Timing.measurePosition = #(ly:make-moment 5 8) + b4 b b8 | + c4 c1 | +} +@end lilypond + +@noindent +Como lo ilustra el ejemplo, @code{ly:make-moment n m} construye una +duración de la fracción n/m de una redonda. Por ejemplo, +@code{ly:make-moment 1 8} es una duración de una corchea y +@code{ly:make-moment 7 16} es la duración de siete semicorcheas. + + +@seealso +Referencia de la notación: +@ref{Numeración de compases}, +@ref{Música sin compasear}. + +Fragmentos de código: +@rlsr{Rhythms}. + +Referencia de funcionamiento interno: +@rinternals{Timing_translator}, +@rinternals{Score}. diff --git a/Documentation/es/notation/simultaneous.itely b/Documentation/es/notation/simultaneous.itely new file mode 100644 index 0000000000..2477709156 --- /dev/null +++ b/Documentation/es/notation/simultaneous.itely @@ -0,0 +1,1105 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: d0c8e3162e9d2c0c7195ce8d58e3dd63bf57aca4 + + 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" + +@c Translation status: post-GDP + +@node Notas simultáneas +@section Notas simultáneas +@translationof Simultaneous notes + +@lilypondfile[quote]{simultaneous-headword.ly} + +La polifonía en música hace referencia a tener más de una voz en una +pieza cualquiera de música. En LilyPond la polifonía hace referencia +a tener más de una voz en el mismo pentagrama. + +@menu +* Una voz única:: +* Varias voces:: +@end menu + +@node Una voz única +@subsection Una voz única +@translationof Single voice + +Esta sección trata de la notas simultáneas dentro de la misma voz. + +@menu +* Notas en acorde:: +* Repetición de acordes:: +* Expresiones simultáneas:: +* Racimos (clusters):: +@end menu + +@node Notas en acorde +@unnumberedsubsubsec Notas en acorde +@translationof Chorded notes + +@cindex acordes +@cindex paréntesis en ángulo + +@funindex < +@funindex > +@funindex <...> + +Un acorde se forma encerrando un conjunto de notas entre @code{<} y +@code{>}. Un acorde puede ir seguido de una duración, +como si fueran simples notas. + +@lilypond[verbatim,quote,relative=2] +1 2 4 8. 16 +@end lilypond + +Los acordes también pueden ir seguidos de articulaciones, de nuevo como +si fueran simples notas. + +@lilypond[verbatim,quote,relative=2] +1\fermata 2-> 4\prall 8.^| 16-. +@end lilypond + +Las notas dentro del propio acorde también pueden ir seguidas +de articulaciones y ornamentos. + +@lilypond[verbatim,quote,relative=2] +1 c-^ e>2 4 8. 16 +@end lilypond + +Sin embargo, algunos elementos de notación tales como las +expresiones de matices dinámicos, los reguladores y las +ligaduras de espresión, se deben unir al acorde y no a las notas que integran +el mismo, pues en caso contrario no se imprimirán. + +@lilypond[verbatim,quote,relative=2] +1 \f ( ) \< \! +@end lilypond + +@cindex relativo, acordes en altura +@cindex acordes y altura relativa + +Se puede usar el modo relativo para la altura de las notas de los +acordes. La primera nota del acorde siempre es relativa a la primera nota +del acorde anterior, o en caso de que el elemento precedente no sea un acorde, +la altura de la última nota que vino antes del acorde. +El resto de las notas del acorde son relativas a la nota anterior +@emph{dentro del mismo acorde}. + +@lilypond[verbatim,quote,relative=2] +1 +@end lilypond + +Para ver más información sobre los acordes, consulte @ref{Notación de acordes}. + +@seealso +Glosario musical: +@rglos{chord}. + +Manual de aprendizaje: +@rlearning{Combinar notas para formar acordes}. + +Referencia de la notación: +@ref{Notación de acordes}, +@ref{Articulaciones y ornamentos}, +@ref{Escritura de octava relativa}, +@ref{Varias voces}. + +Fragmentos de código: +@rlsr{Simultaneous notes}. + +@knownissues +Los acordes que contienen más de dos alturas en el mismo espacio de pentagrama, +como @samp{}, crean notas cuyas cabezas se superponen. +Dependiendo de la situación, una mejor representación puede requerir: + +@itemize + +@item +el uso temporal de varias voces, véase @ref{Varias voces}, +@samp{<< f! \\ >>}, + +@item +la transcripción enarmónica de una o más notas, +@samp{}, or + +@item +Culsters o racimos; véase @ref{Racimos (clusters)}. + +@end itemize + +@node Repetición de acordes +@unnumberedsubsubsec Repetición de acordes +@translationof Chord repetition + +Para reducir el tecleo, se puede usar una abreviatura de repetición +del acorde anterior. El símbolo de repetición de acordes es @code{q}: + +@lilypond[verbatim,quote,relative=2] +1 q 2 q +@end lilypond + +Como en los acordes normales, el símbolo de repetición de acordes +puede usarse con duraciones, articulaciones, elementos de marcado, ligaduras +de expresión, barras, etc., pues sólo se duplican las notas del acorde precedente. + +@lilypond[verbatim,quote,relative=2] +1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +@end lilypond + +El símbolo de repetición de acordes +siempre recuerda la última ocurrencia de un acorde, +por lo que es posible repetir el acorde más reciente +incluso si se han escrito en medio otras notas que no están en un acorde, o silencios. + +@lilypond[verbatim,quote,relative=2] +1 c4 q2 r8 q8 +@end lilypond + +Sin embargo, el símbolo de repetición de acordes no retiene los +matices dinámicos, las articulaciones ni los ornamentos que +contiene o que están adosados al acorde anterior. + +@lilypond[verbatim,quote,relative=2] +1\sfz c4 q2 r8 q8 +@end lilypond + +@seealso +Notation Reference: +@ref{Notación de acordes}, +@ref{Articulaciones y ornamentos}. + +Archivos de inicio: +@file{ly/chord-repetition-init.ly}. + + +@node Expresiones simultáneas +@unnumberedsubsubsec Expresiones simultáneas +@translationof Simultaneous expressions + +Una o más expresiones musicales encerradas entre ángulos dobles se +entienden como simultáneas. Si la primera expresión comienza con una +sola nota o si toda la expresión simultánea aparece explícitamente +dentro de una sola voz, la expresión completa se sitúa sobre un solo +pentagrama; en caso contrario los elementos de la expresión simultánea +se sitúan en pentagramas distintos. + +Los ejemplos siguientes muestran expresiones simultáneas sobre un solo +pentagrama: + +@lilypond[quote,verbatim,relative=2] +\new Voice { % explicit single voice + << { a4 b g2 } { d4 g c,2 } >> +} +@end lilypond + +@lilypond[quote,verbatim,relative=2] +% single first note +a << { a4 b g } { d4 g c, } >> +@end lilypond + +Esto puede ser de utilidad si las secciones simultáneas tienen +idénticas duraciones, pero se producirán errores si se intentan poner +notas de distinta duración sobre la misma plica. + +El ejemplo siguiente muestra cómo las expresiones simultáneas pueden +generar varios pentagramas de forma implícita: + +@lilypond[quote,verbatim,relative=2] +% no single first note +<< { a4 b g2 } { d4 g2 c,4 } >> +@end lilypond + +Aquí no hay problema en tener distintas duraciones. + + +@node Racimos (clusters) +@unnumberedsubsubsec Racimos (clusters) +@translationof Clusters + +@cindex cluster +@cindex racimo (cluster) + +@funindex \makeClusters +@funindex makeClusters + + +Un «cluster» o racimo indica que se deben tocar simultáneamente un +conjunto de notas consecutivas. Se escriben aplicando la función +@code{\makeClusters} a una secuencia de acordes, p.ej.: + +@lilypond[quote,relative=2,verbatim] +\makeClusters { 2 } +@end lilypond + +Se pueden mezclar en el mismo pentagrama notas normales y clusters, +incluso al mismo tiempo. En tal caso, no se hace ningún intento de +evitar automáticamente las colisiones entre clusters y notas normales. + + +@seealso +Glosario musical: +@rglos{cluster}. + +Fragmentos de código: +@rlsr{Simultaneous notes}. + +Referencia de funcionamiento interno: +@rinternals{ClusterSpanner}, +@rinternals{ClusterSpannerBeacon}, +@rinternals{Cluster_spanner_engraver}. + + +@knownissues + +Los clusters sólo tienen un buen aspecto cuando abarcan un mínimo de +dos acordes. En caso contrario aparecerán excesivamente estrechos. + +Los clusters no llevan plica y por sí mismos no pueden indicar las +duraciones, pero la longitud del cluster que se imprime viene +determinada por la duración de los acordes que lo definen. Los +racimos separados necesitan silencios de separación entre ellos. + +Los clusters no producen ninguna salida MIDI. + +@node Varias voces +@subsection Varias voces +@translationof Multiple voices + +Esta sección trata las notas simultáneas en varias voces o varios +pentagramas. + +@menu +* Polifonía en un solo pentagrama:: +* Estilos de voz:: +* Resolución de las colisiones:: +* Combinación automática de las partes:: +* Escribir música en paralelo:: +@end menu + +@node Polifonía en un solo pentagrama +@unnumberedsubsubsec Polifonía en un solo pentagrama +@translationof Single-staff polyphony + +@cindex pentagrama único, polifonía de +@cindex polifonía en un solo pentagrama +@cindex voz +@cindex letra asignada a una voz + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceOne ... \voiceFour +@funindex Voice +@funindex \oneVoice +@funindex oneVoice + +@strong{@i{Instanciar las voces explícitamente}} + +La estructura básica necesaria para obtener varias voces +independientes en un mismo pentagrama se ilustra en el ejemplo +siguiente: + +@lilypond[quote,relative=3,verbatim] +\new Staff << + \new Voice = "first" + { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } + \new Voice= "second" + { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +@noindent +Aquí se crean explícitamente instancias de voces, cada una de las +cuales recibe un nombre. Las instrucciones @code{\voiceOne} +... @code{\voiceFour} (voz uno hasta voz cuatro) preparan las voces de +manera que la primera y segunda voces llevan las plicas hacia arriba, +las voces segunda y cuarta llevan las plicas hacia abajo, las cabezas +de las notas en las voces tercera y cuarta se desplazan +horizontalmente, y los silencios de las voces respectivas se desplazan +también automáticamente para evitar las colisiones. La instrucción +@code{\oneVoice} (una voz) devuelve todos los ajustes de las voces al +estado neutro predeterminado. + +@strong{@i{Pasajes polifónicos temporales}} + +Se puede crear un pasaje polifónico temporal con la construcción +siguiente: + +@example +<< @{ \voiceOne ... @} + \new Voice @{ \voiceTwo ... @} +>> \oneVoice +@end example + +@noindent +Aquí, la primera expresión dentro de un pasaje polifónico temporal se +coloca en el contexto @code{Voice} que estaba en uso inmediatamente +antes del pasaje polifónico, y ese mismo contexto @code{Voice} +continua después de la sección temporal. Otras expresiones dentro de +los ángulos se asignan a distintas voces temporales. Esto permite +asignar la letra de forma continua a una voz antes, durante y después +de la sección polifónica: + +@lilypond[quote, verbatim, relative=2] +<< + \new Voice = "melody" { + a4 + << + { + \voiceOne + g f + } + \new Voice { + \voiceTwo + d2 + } + >> + \oneVoice + e4 + } + \new Lyrics \lyricsto "melody" { + This is my song. + } +>> +@end lilypond + +@noindent +Aquí, las instrucciones @code{\voiceOne} y @code{\voiceTwo} son +necesarias para definir los ajustes de cada voz. + +@strong{@i{La construcción de la doble barra invertida}} + +La construcción @code{<< @{...@} \\ @{...@} >>}, en que las dos +expresiones (o más) están separadas por doble barra invertida, se +comporta de forma distinta a la construcción similar sin las dobles +barras: @emph{todas} las expresiones dentro de esta construcción se +asignan a contextos @code{Voice} nuevos. Estos contextos @code{Voice} +nuevos se crean implícitamente y reciben los nombres fijos @code{"1"}, +@code{"2"}, etc. + +El primer ejemplo podría haberse tipografiado de la manera siguiente: + +@lilypond[quote,relative=3,verbatim] +<< + { r8 r16 g e8. f16 g8[ c,] f e16 d } + \\ + { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +Esta sintaxis se puede usar siempre que no nos importe que se creen +nuevas voces temporales que después serán descartadas. Estas voces +creadas implícitamente reciben ajustes equivalentes al efecto de las +instrucciones @code{\voiceOne} ... @code{\voiceFour}, en el orden en +que aparecen en el código. + +En el siguiente ejemplo, la voz intermedia lleva las plicas hacia +arriba, de manera que la introducimos en tercer lugar para que pase a +ser la voz tres, que tiene las plicas hacia arriba tal y como +queremos. Se usan silencios de separación para evitar la aparición de +silencios duplicados. + +@lilypond[quote,relative=3,verbatim] +<< + { r8 g g g g f16 ees f8 d } + \\ + { ees,8 r ees r d r d r } + \\ + { d'8 s c s bes s a s } +>> +@end lilypond + +En todas las partituras excepto las más simples, se recomienda crear +contextos @code{Voice} explícitos como aparece explicado en +@rlearning{Contextos y grabadores} y en @rlearning{Voces explícitas}. + + +@strong{@i{Orden de las voces}} + +Al escribir varias voces en el archivo de entrada, +utilice el orden siguiente: + +@example +Voz 1: las más aguda +Voz 2: la más grave +Voz 3: la segunda más aguda +Voz 4: la segunda más grave +Voz 5: la tercera más aguda +Voz 6: la tercera más grave +etc. +@end example + +A pesar de que esto puede parecer contrario a la intuición, +simplifica el proceso de disposición automática de las figuras. +Observe que las voces de numeración impar reciben plicas +hacia arriba, y las de numeración par reciben plicas hacia abajo: + +@lilypond[quote,verbatim] +\new Staff << + \time 2/4 + { f''2 } % 1: highest + \\ + { c'2 } % 2: lowest + \\ + { d''2 } % 3: second-highest + \\ + { e'2 } % 4: second-lowest + \\ + { b'2 } % 5: third-highest + \\ + { g'2 } % 6: third-lowest +>> +@end lilypond + +@strong{@i{Duraciones idénticas}} + +En el caso especial en que queremos tipografiar fragmentos de música +que discurre en paralelo y con las mismas duraciones, se pueden +combinar en un solo contexto de voz, formando así acordes. Para +conseguirlo, las incorporamos dentro de una construcción de música +simultánea, dentro de una voz creada explícitamente: + +@lilypond[quote,relative=2,verbatim] +\new Voice << + { e4 f8 d e16 f g8 d4 } + { c4 d8 b c16 d e8 b4 } +>> +@end lilypond + +Este método conduce a barrados extraños y advertencias si los +fragmentos de música no tienen las mismas duraciones exactas. + + +@predefined +@code{\voiceOne}, +@code{\voiceTwo}, +@code{\voiceThree}, +@code{\voiceFour}, +@code{\oneVoice}. +@endpredefined + + +@seealso +Manual de aprendizaje: +@rlearning{Las voces contienen música}, +@rlearning{Voces explícitas}. + +Referencia de la notación: +@ref{Pautas de percusión}, +@ref{Silencios invisibles}, +@ref{Plicas}. + +Fragmentos de código: +@rlsr{Simultaneous notes}. + + +@node Estilos de voz +@unnumberedsubsubsec Estilos de voz +@translationof Voice styles + +@cindex voice styles +@cindex styles, voice +@cindex coloring voices +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Se pueden aplicar colores y formas distintos a las voces para permitir +identificarlas fácilmente: + +@lilypond[quote,relative=2,verbatim] +<< + { \voiceOneStyle d4 c2 b4 } + \\ + { \voiceTwoStyle e,2 e } + \\ + { \voiceThreeStyle b2. c4 } + \\ + { \voiceFourStyle g'2 g } +>> +@end lilypond + +Para recuperar la presentación normal se utiliza la instrucción +@code{\voiceNeutralStyle}. + + +@predefined +@code{\voiceOneStyle}, +@code{\voiceTwoStyle}, +@code{\voiceThreeStyle}, +@code{\voiceFourStyle}, +@code{\voiceNeutralStyle}. +@endpredefined + + +@seealso +Manual de aprendizaje: +@rlearning{Oigo voces}, +@rlearning{Otras fuentes de información}. + +Fragmentos de código: +@rlsr{Simultaneous notes}. + + +@node Resolución de las colisiones +@unnumberedsubsubsec Resolución de las colisiones +@translationof Collision resolution + +@cindex mezclar notas +@cindex notas, colisiones de +@cindex colisiones +@cindex desplazar nota +@cindex varias voces +@cindex voces, varias +@cindex polifónica, música +@cindex desplazamiento de voces +@cindex desplazamiento, silencio automático de +@cindex desplazamiento de silencios, automático +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn +@funindex \shiftOff +@funindex shiftOff +@funindex \mergeDifferentlyDottedOn +@funindex mergeDifferentlyDottedOn +@funindex \mergeDifferentlyDottedOff +@funindex mergeDifferentlyDottedOff +@funindex \mergeDifferentlyHeadedOn +@funindex mergeDifferentlyHeadedOn +@funindex \mergeDifferentlyHeadedOff +@funindex mergeDifferentlyHeadedOff + + +Las cabezas de notas que están en diferentes voces y tienen la misma +altura, la misma forma de cabeza, y dirección opuesta de la plica, se +combinan automáticamente, pero las que tienen cabezas distintas o la +misma dirección de la plica no se combinan. Los silencios que se +encuentran en el lado opuesto de una plica en otra voz se desplazan +verticalmente. El ejemplo siguiente muestra tres circunstancias +distintas, sobre los pulsos 1 y 3 en el primer compás y sobre el pulso +1 del segundo compás, donde la combinación automática falla. + + +@lilypond[quote,verbatim,relative=2] +<< + { + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Las cabezas de notas diferentes se pueden combinar, con la excepción +de blancas con negras, como se muestra más abajo. Aquí las cabezas +del pulso 1 del primer compás sí se combinan: + +@lilypond[quote,verbatim,relative=2] +<< + { + \mergeDifferentlyHeadedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +También se pueden combinar cabezas con puntillos diferentes, como se +muestra en el tercer pulso del primer compás: + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +La blanca y la corchea en el comienzo del segundo compás no están +correctamente combinadas porque la combinación automática no es capaz +de completarse satisfactoriamente cuando se encuentran tres o más +notas alineadas en la misma columna de notas, y en este caso la cabeza +combinada es incorrecta. Para conseguir que la combinación seleccione +la cabeza correcta, se debe aplicar un @code{\shift} o desplazamiento +a la nota que no se debe combinar. Aquí, se aplica @code{\shiftOn} +para mover el sol agudo fuera de la columna, y entonces +@code{\mergeDifferentlyHeadedOn} hace su trabajo correctamente. + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + \shiftOn + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +La instrucción @code{\shiftOn} permite (aunque no fuerza) +que las notas de una voz se puedan desplazar. Cuando@code{\shiftOn} +se aplica a una voz, una nota o acorde de esta voz se desplaza +solamente si su plica chocase en caso contrario con una plica de otra voz, +y sólo si las plicas en colisión apuntan en la misma dirección. +La instrucción @code{\shiftOff} evita la posibilidad de este tipo de desplazamiento. + +De forma predeterminada, las voces externas (normalmente las voces uno y dos) +tienen @code{\shiftOff} especificado (desplazamiento desactivado), mientras +que las voces interiores (tres y siguientes) tienen especificado +@code{\shiftOn} (desplazamiento activado). Cuando se aplica un desplazamiento, +las voces con plicas hacia arriba (voces de numeración impar) +se desplazan hacia la derecha, +y las voces con las plicas hacia abajo (voces con numeración par) +se desplazarn a la izquierda. + +He aquí un ejemplo que le ayudará a visualizar +la forma en que se expanidría internamente una expresión polifónica. + +@warning{Observe que con tres o más voces, el orden vertical de +las mismas dentro de su archivo de entrada ¡no sería el mismo que +el orden vertical de las voces en el pentagrama!} + +@lilypond[quote,verbatim] +\new Staff \relative c'' { + %% abbreviated entry + << + { f2 } % 1: highest + \\ + { g,2 } % 2: lowest + \\ + { d'2 } % 3: upper middle + \\ + { b2 } % 4: lower middle + >> + %% internal expansion of the above + << + \new Voice = "1" { \voiceOne \shiftOff f'2 } + \new Voice = "2" { \voiceTwo \shiftOff g,2 } + \new Voice = "3" { \voiceThree \shiftOn d'2 } % shifts right + \new Voice = "4" { \voiceFour \shiftOn b2 } % shifts left + >> +} +@end lilypond + +Dos instrucciones adicionales, @code{\shiftOnn} y @code{\shiftOnnn}, +ofrecen niveles de desplazamiento mayores que se pueden +especificar temporalmente para resolver colisiones en situaciones +complejas; véase @rlearning{Ejemplos reales de música}. + +Sólo se combinan las notas si tienen la plica en direcciones opuestas +(como la tienen, por ejemplo, en las voces uno y dos de forma +predeterminada o cuando las plicas se establecen explícitamente en +direcciones opuestas). + + +@predefined +@code{\mergeDifferentlyDottedOn}, +@code{\mergeDifferentlyDottedOff}, +@code{\mergeDifferentlyHeadedOn}, +@code{\mergeDifferentlyHeadedOff}. + +@code{\shiftOn}, +@code{\shiftOnn}, +@code{\shiftOnnn}, +@code{\shiftOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{additional-voices-to-avoid-collisions.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{forcing-horizontal-shift-of-notes.ly} + + +@seealso +Glosario musical: +@rglos{polyphony}. + +Manual de aprendizaje: +@rlearning{Varias notas a la vez}, +@rlearning{Las voces contienen música}, +@rlearning{Ejemplos reales de música}. + +Fragmentos de código: +@rlsr{Simultaneous notes}. + +Referencia de funcionamiento interno: +@rinternals{NoteColumn}, +@rinternals{NoteCollision}, +@rinternals{RestCollision}. + + +@ignore +@knownissues +@c TODO investigate! Sometimes it works, sometimes not. --FV +Los requisitos para combinar con éxito cabezas de nota distintas que +tienen también distinto puntillo, no están claros. +@end ignore + +@node Combinación automática de las partes +@unnumberedsubsubsec Combinación automática de las partes +@translationof Automatic part combining + +@cindex automática, combinación de partes +@cindex partes, combinación automática +@cindex partes, combinador de +@cindex a due, partes +@cindex solo, partes +@funindex \partcombine +@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. + +La sintaxis para la combinación 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. + +@lilypond[quote,verbatim] +instrumentOne = \relative c' { + 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 +} + +<< + \new Staff \instrumentOne + \new Staff \instrumentTwo + \new Staff \partcombine \instrumentOne \instrumentTwo +>> +@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 +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 +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}. + +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: + +@example +\partcombine + \relative @dots{} @var{expresión_musical_1} + \relative @dots{} @var{expresión_musical_2} +@end example + +@noindent +Una sección @code{\relative} que se encuentra fuera de +@code{\partcombine} no tiene ningún efecto sobre las notas de +@code{@var{expresión_musical_1}} y @code{@var{expresión_musical_2}}. + +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 +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: + +@itemize +@item +@code{\partcombineApart}, @code{\partcombineApartOnce}: +Mantener 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. + +@item +@code{\partcombineUnisono}, @code{\partcombineUnisonoOnce}: +Las dos voces forman unísono. + +@item +@code{\partcombineSoloI}, @code{\partcombineSoloIOnce}: +Mostrar solo la voz uno y marcarla como solo. + +@item +@code{\partcombineSoloII}, @code{\partcombineSoloIIOnce}: +Mostrar solo la voz dos y marcarla como solo. + +@item +@code{\partcombineAutomatic}, @code{\partcombineAutomaticOnce}: +Terminar el efecto de las instrucciones especiales anteriores y volver +al mecanismo predeterminado de combinación de partes. + +@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 | +} +instrumentTwo = \relative c' { + c2 c | + e2 e | + a,2 c | + c2 c' | + c2 c | + c2 c | +} + +<< + \new Staff { \instrumentOne } + \new Staff { \instrumentTwo } + \new Staff { \partcombine \instrumentOne \instrumentTwo } +>> +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{combining-two-parts-on-the-same-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-partcombine-texts.ly} + + +@seealso +Glosario musical: +@rglos{a due}, +@rglos{part}. + +Referencia de la notación: +@ref{Escritura de las particellas}. + +Fragmentos de código: +@rlsr{Simultaneous notes}. + +Referencia de funcionamiento interno: +@rinternals{PartCombineMusic}, +@rinternals{Voice}. + + +@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. + +@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 +@translationof Writing music in parallel + +@cindex escribir música en paralelo +@cindex música intercalada +@cindex paralelo, música en +@funindex \parallelMusic +@funindex parallelMusic + +La música para varias partes se puede intercalar dentro del código de +entrada. La función @code{\parallelMusic} admite una lista que +contiene los nombres de las variables que se van a crear, y una +expresión musical. El contenido de los compases alternativos +extraídos de la expresión se convierten en el valor de las variables +respectivas, de manera que podemos utilizarlas más tarde para imprimir +la música. + +@warning{Es obligatorio utilizar comprobaciones de compás @code{|}, y +los compases deben tener la misma longitud.} + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | + r16 e'8.~ e'4 r16 e'8.~ e'4 | + c'2 c'2 | + + % Bar 2 + r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | + r16 d'8.~ d'4 r16 d'8.~ d'4 | + c'2 c'2 | + +} +\new StaffGroup << + \new Staff << \voiceA \\ \voiceB >> + \new Staff { \clef bass \voiceC } +>> +@end lilypond + +Se puede usar el modo relativo. Observe que la instrucción +@code{\relative} no se utiliza dentro del propio bloque +@code{\parallelMusic}. Las notas guardan relación con la nota +anterior en la misma voz, no con la nota anterior dentro del código de +entrada (dicho de otra manera, las notas relativas de @code{vozA} +ignoran a las notas que hay en @code{vozB}. + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g16 c e g, c e r8 g,16 c e g, c e | + r16 e8.~ e4 r16 e8.~ e4 | + c2 c | + + % Bar 2 + r8 a,16 d f a, d f r8 a,16 d f a, d f | + r16 d8.~ d4 r16 d8.~ d4 | + c2 c | + + } +\new StaffGroup << + \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> + \new Staff \relative c' { \clef bass \voiceC } +>> +@end lilypond + +Esto funciona aceptablemente bien para música de piano. El siguiente +ejemplo asigna cada cuatro compases consecutivos a cuatro variables: + +@lilypond[quote,verbatim] +global = { + \key g \major + \time 2/4 +} + +\parallelMusic #'(voiceA voiceB voiceC voiceD) { + % Bar 1 + a8 b c d | + d4 e | + c16 d e fis d e fis g | + a4 a | + + % Bar 2 + e8 fis g a | + fis4 g | + e16 fis g a fis g a b | + a4 a | + + % Bar 3 ... +} + +\score { + \new PianoStaff << + \new Staff { + \global + << + \relative c'' \voiceA + \\ + \relative c' \voiceB + >> + } + \new Staff { + \global \clef bass + << + \relative c \voiceC + \\ + \relative c \voiceD + >> + } + >> +} +@end lilypond + + +@seealso +Manual de aprendizaje: +@rlearning{Organizar las piezas mediante variables} + +Fragmentos de código: +@rlsr{Simultaneous notes}. diff --git a/Documentation/es/notation/spacing.itely b/Documentation/es/notation/spacing.itely new file mode 100644 index 0000000000..3f150023c4 --- /dev/null +++ b/Documentation/es/notation/spacing.itely @@ -0,0 +1,3621 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 5e9d7b07e1da12e32ae7be0253b22cb28cf2fe58 + + 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 Problemas de espaciado +@chapter Problemas de espaciado +@translationof Spacing issues + +La disposición global sobre el papel viene determinada por tres +factores: el diseño de página, los saltos de línea y el espaciado. +Estos factores influyen entre sí. La elección de uno u otro espaciado +determina qué densidad termina teniendo cada sistema de música. Esto +influye en el lugar en que se eligen los saltos de línea y, en último +término, en el número de páginas que tiene una partitura. + +Considerado globalmente, este proceso se produce en cuatro fases: en +primer lugar se eligen unas distancias elásticas o @q{muelles}, +basados en la duración de las figuras. Se prueban todas las +combinaciones de saltos de línea posibles, y para cada una de ellas se +calcula una puntuación de @q{maldad}. Después se hace una estimación +de la altura de cada uno de los posibles sistemas. Finalmente se +selecciona una combinación de saltos de página y de línea de tal forma +que ni el espaciado horizontal ni el vertical estén demasiado +estrechos ni estirados. + +Hay dos tipos de bloques que pueden contener ajustes de disposición: +@code{\paper @{@dots{}@}} y @code{\layout @{@dots{}@}}. El bloque +@code{\paper} contiene ajustes de disposición de la página que se +espera sean los mismos para todas las partituras de un libro, como la +altura de la hoja o si se imprimen los números de página, etc. Véase +@ref{Disposición de la página}. El bloque @code{\layout} contiene +ajustes de disposición de la partitura, como el número de sistemas que +utilizar, o la separación entre grupos de pentagramas, etc. Véase +@ref{Disposición de la partitura}. + +@menu +* Disposición de la página:: +* Disposición de la partitura:: +* Saltos:: +* Espaciado vertical:: +* Espaciado horizontal:: +* Encajar la música en menos páginas:: +@end menu + + +@node Disposición de la página +@section Disposición de la página +@translationof Page layout + +Esta sección estudia las opciones de disposición de la página para el +bloque @code{\paper}. + +@menu +* El bloque \paper:: +* Tamaño del papel y escalado automático:: +* Variables de espaciado de \paper verticales fijas:: +* Variables de espaciado de \paper verticales flexibles:: +* Variables de espaciado de \paper horizontales:: +* Otras variables de \paper:: +@end menu + + +@node El bloque \paper +@subsection El bloque @code{\paper} +@translationof The \paper block + +El bloque @code{\paper} puede aparecer dentro de un bloque +@code{\book}, pero no dentro de un bloque @code{\score}. Los ajustes +de un bloque @code{\paper} se aplican a todo el libro, que puede +comprender varias partituras. Entre los ajustes que pueden aparecer +dentro de un bloque @code{\paper} están los siguientes: + +@itemize + +@item +la función de Scheme @code{set-paper-size}, + +@item +variables de @code{\paper} utilizadas para personalizar la disposición +de la página, y + +@item +definiciones de marcado utilizadas para personalizar la disposición de +los encabezamientos, pies y títulos. + +@end itemize + +La función @code{set-paper-size} se estudia en la sección siguiente, +@ref{Tamaño del papel y escalado automático}. Las variables de +@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}. + +Casi todas las variables de @code{\paper} funcionan solamente dentro +de un bloque @code{\paper}. Las pocas que funcionan también en un +bloque @code{\layout} están relacionadas en @ref{El bloque \layout}. + +Excepto cuando se especifica lo contrario, todas las variables de +@code{\paper} que corresponden a distancias sobre la página se miden +en milímetros, a no ser que se especifiquen unas unidades diferentes +por parte del usuario. Por ejemplo, la declaración siguiente +establece el margen superior @code{top-margin} a diez milímetros: + +@example +\paper @{ + top-margin = 10 +@} +@end example + +Para fijarlo en @code{0.5} pulgadas, utilice el sufijo de unidades +@code{\in}: + +@example +\paper @{ + top-margin = 0.5\in +@} +@end example + +Los sufijos de unidades que están disponibles son @code{\mm}, +@code{\cm}, @code{\in} y @code{\pt}. Estas unidades son valores +simples para convertir a partir de milímetros; están definidos en +@file{ly/paper-defaults-init.ly}. Por claridad, al usar milímetros, +se suele escribir el sufijo @code{\mm} aunque no es necesario +técnicamente. + +También es posible definir valores de @code{\paper} utilizando Scheme. +El equivalente de Scheme del ejemplo anterior es: + +@example +\paper @{ + #(define top-margin (* 0.5 in)) +@} +@end example + +@seealso +Referencia de la notación: +@ref{Tamaño del papel y escalado automático}, +@ref{Encabezamientos pies y títulos personalizados}, +@ref{El bloque \layout}. + +Archivos instalados: +@file{ly/paper-defaults-init.ly}. + + +@node Tamaño del papel y escalado automático +@subsection Tamaño del papel y escalado automático +@translationof Paper size and automatic scaling + +@cindex tamaño del papel +@cindex tamaño de la página + +@funindex \paper + +@menu +* Fijar el tamaño del papel:: +* Escalado automático al tamaño del papel:: +@end menu + + +@node Fijar el tamaño del papel +@unnumberedsubsubsec Fijar el tamaño del papel +@translationof Setting paper size + +Existen dos funciones para cambiar el tamaño del papel: +@code{set-default-paper-size} (establecer tamaño de página +predeterminado) y @code{set-paper-size} (establecer tamaño de página). +@code{set-default-paper-size} se debe poner en el ámbito del nivel +superior, y @code{set-paper-size} se debe poner en un bloque +@code{\paper}: + +@example +#(set-default-paper-size "a4") +@end example + +@example +\paper @{ + #(set-paper-size "a4") +@} +@end example + +@noindent +Dentro del ámbito del nivel jerárquico superior, se puede llamar sin +riesgo a la función @code{set-default-paper-size} desde cualquier +lugar antes del primer bloque @code{\paper} block. Dentro de un +bloque @code{\paper}, el lugar más seguro para llamar a +@code{set-paper-size} es al principio, por encima de la lista de +declaraciones de variables. Se explican las razones de esto en +@ref{Escalado automático al tamaño del papel}. + +@code{set-default-paper-size} establece el tamaño de todas las +páginas, mientras que @code{set-paper-size} establece sólo el tamaño +de las páginas a las que se aplica el bloque @code{\paper}. Por +ejemplo, si el bloque @code{\paper} está al principio del archivo, +aplica el tamaño de papel a todas las páginas. Si el bloque +@code{\paper} está dentro de un bloque @code{\book}, entonces el +tamaño del papel sólo se aplica a ese libro. + +Se encuentran disponibles los tamaños de papel más comunes, entre +ellos @code{a4}, @code{letter}, @code{legal} y @code{11x17} (conocido +también como tabloide). Están contemplados muchos más tamaños de papel +de forma predeterminada. Para ver más detalles, consulte +@file{scm/paper.scm} y busque la definición de @code{paper-alist}. + +@c TODO add a new appendix for paper sizes (auto-generated) -pm + +@warning{El tamaño predeterminado del papel es @code{a4}.} + +Se pueden añadir tamaños adicionales editando la definición de +@code{paper-alist} en el archivo de inicio @file{scm/paper.scm}, +aunque se sobreescribirán en la siguiente reinstalación del programa. + +@cindex orientación +@cindex apaisado +@cindex horizontal, papel + +Si se añade el símbolo @code{'landscape} (apaisado) como argumento a +@code{set-default-paper-size}, las páginas se giran 90 grados y se +establece en consonancia una mayor longitud de las líneas. + +@example +#(set-default-paper-size "a6" 'landscape) +@end example + +@seealso +Referencia de la notación: +@ref{Escalado automático al tamaño del papel}. + +Archivos instalados: +@file{scm/paper.scm}. + + +@node Escalado automático al tamaño del papel +@unnumberedsubsubsec Escalado automático al tamaño del papel +@translationof Automatic scaling to paper size + +Si se cambia el tamaño del papel con una de las funciones de Scheme +(@code{set-default-paper-size} o @code{set-paper-size}), los valores +de algunas variables de @code{\paper} se escalan automáticamente al +nuevo tamaño. Para sortear el escalado automático para una variable +determinada, fije el valor de la variable después de establecer el +tamaño del papel. Observe que el escalado automático no se activa +mediante el ajuste de las variables +@code{paper-height} o de @code{paper-width}, +incluso aunque @code{paper-width} puede influir sobre otros valores +(esto es distinto al escalado y se estudia más abajo). Las funciones +@code{set-default-paper-size} y @code{set-paper-size} se describen en +@ref{Fijar el tamaño del papel}. + +Las dimensiones verticales afectadas por el escalado automático son +@code{top-margin} y @code{bottom-margin} +(véase @ref{Variables de espaciado de \paper verticales fijas}). +Las dimensiones +horizontales afectadas por el escalado automático son +@code{left-margin}, @code{right-margin}, @code{inner-margin}, +@code{outer-margin}, @code{binding-offset}, @code{indent} y +@code{short-indent} (véase +@ref{Variables de espaciado de \paper horizontales}). + +Los valores predeterminados para estas dimensiones están fijados en el +archivo @file{ly/paper-defaults-init.ly}, usando variables internas +llamadas @code{top-margin-default}, @code{bottom-margin-default}, etc. +Estos son los valores que resultan del tamaño predeterminado del papel +@code{a4}. Como referencia, con el papel @code{a4} la altura +@code{paper-height} es @code{297\mm} y la anchura @code{paper-width} +es @code{210\mm}. + +@seealso +Referencia de la notación: +@ref{Variables de espaciado de \paper verticales fijas}, +@ref{Variables de espaciado de \paper horizontales}. + +Archivos de inicio: +@file{ly/paper-defaults-init.ly}, +@file{scm/paper.scm}. + + +@node Variables de espaciado de \paper verticales fijas +@subsection Variables de espaciado de @code{\paper} verticales fijas +@translationof Fixed vertical spacing \paper variables + +@warning{Algunas dimensiones de @code{@bs{}paper} se escalan +automáticamente al tamaño del papel, lo que puede llevar a un +comportamiento no esperado. Véase @ref{Escalado automático al tamaño +del papel}.} + +Los valores predeterminados (previos al escalado) están definidos en +el archivo @file{ly/paper-defaults-init.ly}. + +@table @code +@item paper-height (altura del papel) +@funindex paper-height + +Altura de la página, no fijada de forma predeterminada. Observe que +el escalado automático de algunas dimensiones verticales no resulta +afectado por esto. + +@item top-margin (margen superior) +@funindex top-margin + +Margen entre el extremo superior de la página y la parte superior de +la zona imprimible. Si se modifica el tamaño del papel, el valor +predeterminado de esta dimensión se escala de acuerdo con ello. + +@item bottom-margin (margen inferior) +@funindex bottom-margin + +Margen entre la parte inferior de la zona imprimible y el extremo +inferior de la página. Si se modifica el tamaño del papel, se escala +de acuerdo con ello el valor predeterminado de esta dimensión. + +@item ragged-bottom (sin justificar por abajo) +@funindex ragged-bottom + +Si se fija al valor verdadero, los sistemas no se reparten +verticalmente hasta abajo de la página. Esto no afecta a la última +página. Se debe fijar a verdadero para piezas que sólo tienen dos o +tres sistemas por página, como por ejemplo las partituras orquestales. + +@item ragged-last-bottom (sin justificar la última por abajo) +@funindex ragged-last-bottom + +Si se establece al valor falso, los sistemas se reparten verticalmente +hasta abajo de la última página. Las piezas que llenan sobradamente +dos o más páginas deben tener este valor fijado a verdadero. También +afecta a la última página de las partes de libro, es decir, partes de +un libro creadas con bloques @code{\bookpart}. + +@end table + +@seealso +Referencia de la notación: +@ref{Escalado automático al tamaño del papel}. + +Archivos de inicio: +@file{ly/paper-defaults-init.ly}. + +Fragmentos de código: +@rlsr{Spacing}. + +@knownissues + +Los títulos (extraídos del bloque @code{\header}) se tratan como +sistemas, así pues @code{ragged-bottom} y @code{ragged-last-bottom} +aumentan la separación entre los títulos y el primer sistema de la +partitura. + + +@node Variables de espaciado de \paper verticales flexibles +@subsection Variables de espaciado de @code{\paper} verticales flexibles +@translationof Flexible vertical spacing \paper variables + +En casi todos los casos es preferible que las distancias verticales +entre ciertos elementos (como márgenes, títulos, sistemas y las +distintas partituras) sean flexibles, de manera que se amplíen y +compriman adecuadamente dependiendo de la situación. Están +disponibles un cierto número de variables del bloque @code{\paper} +(relacionadas más abajo) para realizar un ajuste fino del +comportamiento de estas dimensiones frente a su ampliación o +compresión. + +Observe que las variables de @code{\paper} que se estudian en esta +sección no controlan el espaciado de los pentagramas que están dentro +de los sistemas individuales. El espaciado dentro de los sistemas se +controla por medio de propiedades de grob, con ajustes que se escriben +normalmente dentro de un bloque @code{\score} o @code{\layout}, y no +dentro del bloque @code{\paper}. +Véase @ref{Espaciado vertical flexible dentro de los sistemas}. + +@menu +* Estructura de las listas-A de espaciado vertical flexible:: +* Lista de variables de espaciado de \paper verticales flexibles:: +@end menu + + +@node Estructura de las listas-A de espaciado vertical flexible +@unnumberedsubsubsec Estructura de las listas-A de espaciado vertical flexible +@translationof Structure of flexible vertical spacing alists + +Cada una de las variables de espaciado de @code{\paper} flexibles es +una lista-A (lista asociativa) que contiene cuatro @emph{claves}: + +@itemize + +@item +@code{basic-distance} (distancia básica): +distancia vertical, medida en espacios de pentagrama, entre los +@emph{puntos de referencia} de los dos elementos, cuando no resulte +ninguna colisión, y no se produzca ninguna ampliación o compresión. +El punto de referencia de un elemento de marcado (de título o del +nivel jerárquico superior) es su punto más alto, y el punto de +referencia de un sistema es el centro vertical del @code{StaffSymbol} +más cercano (incluso si se trata de una línea que no es un pentagrama, +como un contexto @code{Lyrics}). Los valores de @code{distancia básica} menores +de @code{padding} o de @code{minimum-distance} no son significativos, +porque la distancia resultante nunca será menor de @code{padding} o de +@code{minimum-distance}. + +@item +@code{minimum-distance} (distancia mínima): +la distancia vertical mínima permitida, medida en espacios de +pentagrama, entre los puntos de referencia de los dos elementos, +cuando se produce una compresión. Los valores de +@code{minimum-distance} menores de @code{padding} no son +significativos, porque la distancia resultante nunca será menor de +@code{padding}. + +@c TODO: explain skylines somewhere and xref to it from here. + +@item +@code{padding} (relleno): +mínimo espacio vertical vacío necesario entre los rectángulos +circundantes (o las líneas de horizonte) de los dos elementos, +medido en espacios de pentagrama. + +@item +@code{stretchability} (ampliabilidad): +medida sin unidades de la propensión relativa de esta dimensión a +ampliarse. Si es cero, la distancia no se ampliará (a no ser que +resultasen colisiones). Si es positiva, la significación del valor de +ampliabilidad de una dimensión concreta depende solamente de su +relación con los valores de @code{stretchability} de las otras +dimensiones. Por ejemplo, si una dimensión tiene el doble de +@code{stretchability} que otra, se ampliará con el doble de facilidad. +Los valores deben ser no negativos y finitos. El valor @code{+inf.0} +desencadena un error de programación y se ignora, pero se puede usar +@code{1.0e7} para un muelle casi infinitamente ampliable. Si no se +fija un valor, el valor predeterminado se establece a @code{basic-distance}. +Observe que la propensión de la dimensión a @emph{comprimirse} no se +puede establecer directamente por el usuario y es igual a +(@code{basic-distance}@tie{}@minus{}@tie{}@code{minimum-distance}). + +@end itemize + +Si una página tiene un margen inferior no justificado, la distancia +resultante es la mayor de: + +@itemize + +@item +@code{basic-distance}, + +@item +@code{minimum-distance}, y + +@item +@code{padding} más la menor distancia necesaria +para eliminar las colisiones. + +@end itemize + +Los métodos específicos para la modificación de las listas-A se +estudian en @ref{Modificación de las listas-A}. El siguiente ejemplo +muestra las dos formas en que pueden modificarse estas listas-A. La +primera declaración actualiza un par clave-valor individualmente, y la +segunda redefine la variable completamente: + +@example +\paper @{ + system-system-spacing #'basic-distance = #8 + score-system-spacing = + #'((basic-distance . 12) + (minimum-distance . 6) + (padding . 1) + (stretchability . 12)) +@} +@end example + + +@node Lista de variables de espaciado de \paper verticales flexibles +@unnumberedsubsubsec Lista de variables de espaciado de @code{\paper} verticales flexibles +@translationof List of flexible vertical spacing \paper variables + +Los nombres de estas variables siguen el formato +@code{@var{superior}-@var{inferior}-spacing}, donde +@code{@var{superior}} e @code{@var{inferior}} son los elementos que +van a ser espaciados. Cada distancia se mide entre los puntos de +referencia de los dos elementos (véase más arriba la descripción de la +estructura de la lista-A). Observe que en estos nombres de variable, +el término @q{@code{markup}} se refiere tanto a @emph{elementos de +marcado de título} (@code{bookTitleMarkup} o @code{scoreTitleMarkup}) +como a @emph{elementos de marcado del nivel superior} (véase +@ref{Estructura del archivo}). Todas las distancias se miden en +espacios de pentagrama. + +Los ajustes predeterminados están definidos en el archivo +@file{ly/paper-defaults-init.ly}. + +@c TODO: Where do headers/footers fit in? -mp + +@table @code +@item markup-system-spacing +@funindex markup-system-spacing + +distancia entre un elemento de marcado (de título o del nivel +superior) y el sistema que le sigue. + +@item score-markup-spacing +@funindex score-markup-spacing + +distancia entre el último sistema de una partitura y el elemento de +marcado (de título o del nivel superior) que le sigue. + +@item score-system-spacing +@funindex score-system-spacing + +distancia entre el último sistema de una partitura y el primer sistema +de la partitura que le sigue, cuando no existe ningún elemento de +marcado (de título o del nivel superior) entre ellos. + +@item system-system-spacing +@funindex system-system-spacing + +distancia entre dos sistemas dentro de la misma partitura. + +@item markup-markup-spacing +@funindex markup-markup-spacing + +distancia entre dos elementos de marcado (de título o del nivel +superior). + +@item last-bottom-spacing +@funindex last-bottom-spacing + +distancia desde el último sistema o elemento de marcado del nivel +superior en una página, hasta la parte inferior de la zona imprimible +(es decir, el extremo superior del margen inferior). + +@item top-system-spacing +@funindex top-system-spacing + +distancia desde la parte superior de la zona imprimible (es decir, el +extremo inferior del margen superior) hasta el primer sistema de una +página, cuando no hay ningún elemento de marcado (de título o del +nivel superior) entre los dos. + +@item top-markup-spacing +@funindex top-markup-spacing + +distancia desde el extremo superior de la zona imprimible (es decir, +el extremo inferior del margen superior) hasta el primer elemento de +marcado (de título o del nivel superior) sobre una página, cuando no +hay ningún sistema entre los dos. +@end table + +@seealso +Referencia de la notación: +@ref{Espaciado vertical flexible dentro de los sistemas}. + +Archivos de inicio: +@file{ly/paper-defaults-init.ly}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@node Variables de espaciado de \paper horizontales +@subsection Variables de espaciado de \paper horizontales +@translationof Horizontal spacing \paper variables + +@warning{Algunas dimensiones de @code{@bs{}paper} se escalan +automáticamente al tamaño del papel, lo que puede dar lugar a un +comportamiento distinto al esperado. Véase +@ref{Escalado automático al tamaño del papel}.} + +@menu +* Variables de \paper para la anchura y los márgenes:: +* Variables de \paper para el modo de doble cara:: +* Variables de \paper para desplazamientos y sangrados:: +@end menu + + +@node Variables de \paper para la anchura y los márgenes +@unnumberedsubsubsec Variables de @code{\paper} para la anchura y los márgenes +@translationof \paper variables for widths and margins + +Los valores predeterminados (antes del escalado) que no están +relacionados aquí se encuentran definidos en el archivo +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item paper-width +@funindex paper-width + +Anchura de la página, sin fijar de forma predeterminada. Aunque +@code{paper-width} no tiene ningún efecto sobre el escalado automático +de algunas dimensiones horizontales, sí influye sobre la variable +@code{line-width}. Si están establecidas las dos variables +@code{paper-width} y @code{line-width}, entonces también se actualizan +@code{left-margin} y @code{right-margin}. Véase también +@code{check-consistency}. + +@item line-width +@funindex line-width + +Dimensiones horizontales de las líneas del pentagrama en los sistemas +sin sangrado y justificados, igual a +@code{(paper-width@tie{}@minus{}@tie{}left-margin@tie{}@minus{}@tie{}right-margin)} +cuando está sin fijar. Si @code{line-width} está fijado, y tanto +@code{left-margin} como @code{right-margin} están sin fijar, entonces +los márgenes se actualizan para centrar los sistemas automáticamente +sobre la página. Véase también @code{check-consistency}. +Esta variable también se puede fijar dentro de un bloque @code{\layout}. + +@item left-margin +@funindex left-margin + +Margen entre el extremos izquierdo de la página y el comienzo de las +líneas del pentagrama en los sistemas sin sangrado. Si el tamaño del +papel se modifica, el valor predeterminado de esta dimensión se escala +de acuerdo con ello. Si no se fija el valor de @code{left-margin}, y +tanto @code{line-width} como @code{right-margin} están fijados, +entonces se establece el valor de @code{left-margin} a +@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)}. +Si solamente está fijado @code{line-width}, entonces los dos márgenes +se establecen a +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}, y +como consecuencia los sistemas se centran sobre la página. Véase +también @code{check-consistency}. + +@item right-margin +@funindex right-margin + +Margen entre el extremo derecho de la página y el final de las líneas +del pentagrama en sistemas justificados. Si el tamaño de la página se +modifica, el valor predeterminado de esta dimensión se escala de +acuerdo con ello. Si @code{right-margin} está sin fijar, y tanto +@code{line-width} como @code{left-margin} están fijados, el valor de +@code{right-margin} se establece a +@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)}. +Si solamente está fijado @code{line-width}, los dos márgenes se +establecen a +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}, y +como consecuencia los sistemas aparecen centrados sobre la página. +Véase también @code{check-consistency}. + +@item check-consistency +@funindex check-consistency + +Si se establece al valor verdadero, se imprime una advertencia en caso +de que la suma de @code{left-margin}, @code{line-width} y +@code{right-margin} no coincida exactamente con el valor de +@code{paper-width}, y se sustituye cada uno de estos valores (excepto +@code{paper-width}) con su valor predeterminado (escalado al tamaño +del papel si es necesario). Si está fijado al valor falso, se ignora +cualquier inconsistencia y se permite que los sistemas se salgan del +borde del papel. + +@item ragged-right +@funindex ragged-right + +Si está fijado al valor verdadero, los sistemas no cubren el ancho de +la línea. En lugar de ello, los sistemas finalizan en su longitud +horizontal natural. Valor predeterminado: @code{#t} para las +partituras con un solo sistema, y @code{#f} para partituras que tienen +dos o más sistemas. Esta variable también se puede establecer dentro +de un bloque @code{\layout}. + +@item ragged-last +@funindex ragged-last + +Si está fijado al valor verdadero, el último sistema de la partitura +no llena toda la anchura de la línea. En lugar de ello, el último +sistema finaliza en su longitud horizontal natural. Valor +predeterminado: @code{#f}. Esta variable también puede ajustarse +dentro de un bloque @code{\layout}. + +@end table + +@seealso +Referencia de la notación: +@ref{Escalado automático al tamaño del papel}. + +Archivos de inicio: +@file{ly/paper-defaults-init.ly}. + + +@node Variables de \paper para el modo de doble cara +@unnumberedsubsubsec Variables de @code{\paper} para el modo de doble cara +@translationof \paper variables for two-sided mode + +Los valores predeterminados (antes del escalado) se definen en +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item two-sided +@funindex two-sided + +@cindex encuadernación +@cindex margen de encuadernación + +Si tiene el valor verdadero, utilizar @code{inner-margin}, +@code{outer-margin} y @code{binding-offset} para determinar los +márgenes dependiendo de si el número de la página es par o impar. +Esto sobreescribe a @code{left-margin} y a @code{right-margin}. + +@item inner-margin +@funindex inner-margin + +Margen que todas las páginas tienen en el lado interno si forman parte +de un libro. Si el tamaño del papel se modifica, el valor +predeterminado de esta dimensión se escala de acuerdo con ello. +Solamente funciona con @code{two-sided} fijado al valor verdadero. + +@item outer-margin +@funindex outer-margin + +Margen que todas las páginas tienen en el lado externo si forman parte +de un libro. Si el tamaño del papel se modifica, el valor +predeterminado de esta dimensión se escala de acuerdo con ello. +Solamente funciona con @code{two-sided} fijado al valor verdadero. + +@item binding-offset +@funindex binding-offset + +Medida en que se aumenta @code{inner-margin} para asegurar que no se +oculta nada a causa de la encuadernación. Si el tamaño del papel se +modifica, el valor predeterminado de esta dimensión se escala de +acuerdo con ello. Solamente funciona con @code{two-sided} fijado al +valor verdadero. + + +@end table + +@seealso +Referencia de la notación: +@ref{Escalado automático al tamaño del papel}. + +Archivos de inicio: +@file{ly/paper-defaults-init.ly}. + + +@node Variables de \paper para desplazamientos y sangrados +@unnumberedsubsubsec Variables de @code{\paper} para desplazamientos y sangrados +@translationof \paper variables for shifts and indents + +Los valores predeterminados (antes del escalado) que no se relacionan +aquí están definidos en el archivo @file{ly/paper-defaults-init.ly}. + +@table @code + +@item horizontal-shift +@funindex horizontal-shift + +@c This default value is buried in the middle of page.scm. -mp + +Medida en que todos los sistemas (incluidos los títulos de cabecera y +los separadores de sistemas) se desplazan a la derecha. +Predeterminado: @code{0.0}. + +@item indent +@funindex indent + +Nivel de sangrado para el primer sistema de una partitura. Si se +modifica el tamaño del papel, el valor predeterminado de esta +dimensión se escala de acuerdo con ello. Esta variable también se +puede ajustar dentro de un bloque @code{\layout}. + +@item short-indent +@funindex short-indent + +Nivel de sangrado para todos los sistemas de una partitura excepto el +primero. Si el tamaño del papel se modifica, el valor predeterminado +de esta dimensión se escala de acuerdo con ello. Esta variable +también se puede ajustar dentro de un bloque @code{\layout}. + +@end table + +@seealso +Referencia de la notación: +@ref{Escalado automático al tamaño del papel}. + +Archivos de inicio: +@file{ly/paper-defaults-init.ly}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@node Otras variables de \paper +@subsection Otras variables de @code{\paper} +@translationof Other \paper variables + +@menu +* Variables de \paper para los saltos de línea:: +* Variables de \paper para los saltos de página:: +* Variables de \paper para la numeración de las páginas:: +* Variables de \paper diversas:: +@end menu + + +@node Variables de \paper para los saltos de línea +@unnumberedsubsubsec Variables de @code{\paper} para los saltos de línea +@translationof \paper variables for line breaking + +@c TODO: Mention that ly:optimal-breaking is on by default? -mp + +@table @code + +@item max-systems-per-page +@funindex max-systems-per-page + +Número máximo de sistemas que se colocan sobre una página. Solo está +contemplado por el algoritmo @code{ly:optimal-breaking}. Valor +predeterminado: no fijado. + +@item min-systems-per-page +@funindex min-systems-per-page + +Número mínimo de sistemas que se colocan sobre una página. Puede +causar que las páginas aparezcan atiborradas si el valor es demasiado +grande En el momento actual solo está contemplado por el algoritmo +@code{ly:optimal-breaking}. Valor predeterminado: no fijado. + +@item systems-per-page +@funindex systems-per-page + +Número de sistemas que se deben colocar en cada página. En el momento +actual solo está contemplado por el algoritmo +@code{ly:optimal-breaking}. Valor predeterminado: no fijado. + +@item system-count +@funindex system-count + +Número de sistemas que utilizar para una partitura. Valor +predeterminado: no fijado. Esta variables también se puede ajustar +dentro de un bloque @code{\layout}. + +@end table + +@seealso +Referencia de la notación: +@ref{Saltos de línea}. + + +@node Variables de \paper para los saltos de página +@unnumberedsubsubsec Variables de @code{\paper} para los saltos de página +@translationof \paper variables for page breaking + +Los valores predeterminados que no están relacionados aquí, se definen +en el archivo @file{ly/paper-defaults-init.ly} + +@table @code + +@item blank-after-score-page-force +@funindex blank-after-score-page-force + +Penalización por tener una página vacía después del final de una +partitura y antes de la siguiente. De forma predeterminada, es menor +que @code{blank-page-force}, de manera que preferimos páginas vacías +después de las partituras que páginas vacías dentro de una partitura. + +@item blank-last-page-force +@funindex blank-last-page-force + +Penalización por terminar la partitura sobre una página impar. + +@item blank-page-force +@funindex blank-page-force + +Penalización por tener una página vacía en medio de una partitura. No +se utiliza por parte de @code{ly:optimal-breaking} porque nunca +considera páginas vacías en mitad de una partitura. + +@item page-breaking +@funindex page-breaking + +Algoritmo de saltos de página que utilizar. Se puede elegir entre +@code{ly:minimal-breaking}, @code{ly:page-turn-breaking} o +@code{ly:optimal-breaking}. + +@item page-breaking-system-system-spacing +@funindex page-breaking-system-system-spacing + +Engaña a la parte del programa encargada de los saltos de página para +que piense que @code{system-system-spacing} está establecido a un +valor distinto al que tiene realmente. Por ejemplo, si +@code{page-breaking-system-system-spacing #'padding} está establecido +a algo que es mucho mayor que @code{system-system-spacing #'padding}, +entonces el divisor de páginas pone menos sistemas en cada página. +Valor predeterminado: sin ajustar. + +@item page-count +@funindex page-count + +Número de páginas que utilizar en una partitura, no ajustado de forma +predeterminada. + +@end table + +@seealso +Referencia de la notación: +@ref{Saltos de página}, +@ref{Saltos de página óptimos}, +@ref{Paso de página óptimo}, +@ref{Saltos de página mínimos}. + +Archivos de inicio: +@file{ly/paper-defaults-init.ly}. + + +@node Variables de \paper para la numeración de las páginas +@unnumberedsubsubsec Variables de @code{\paper} para la numeración de las páginas +@translationof \paper variables for page numbering + +Los valores predeterminados que no se relacionan aquí están definidos +en el archivo @file{ly/paper-defaults-init.ly} + +@table @code + +@cindex números de página, automáticos +@item auto-first-page-number +@funindex auto-first-page-number + +El algoritmo de división de páginas está afectado por el hecho de que +el número de la primera página sea par o impar. Si está establecido +al valor verdadero, el algoritmo de división de páginas decide si +comenzar con un número par o impar. Esto hace que el número de la +primera página se quede como está, o que se aumente en una unidad. +Predeterminado: @code{#f}. + +@cindex números de página, especificar el primero +@item first-page-number +@funindex first-page-number + +Valor del número de pátina en la primera página. + +@item print-first-page-number +@funindex print-first-page-number + +Si está fijado a verdadero, se imprime un número de página en la +primera página. + +@cindex números de página, suprimir +@item print-page-number +@funindex print-page-number + +Si está fijado a falso, no se imprimen los números de página. + +@end table + +@seealso +Archivos de inicio: +@file{ly/paper-defaults-init.ly}. + +@knownissues +Los números de página impares siempre están a la derecha. +Si quiere que la música comience en la página 1 debe haber +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 + +@table @code + +@item page-spacing-weight +@funindex page-spacing-weight + +Importancia relativa del espacio (vertical) de las páginas y el +espaciado (horizontal) de las líneas. Los valores altos hacen que el +espaciado de la página tenga más importancia. Predeterminado: +@code{#10}. + +@item print-all-headers +@funindex print-all-headers + +Si está fijado a verdadero, imprime todos los encabezamientos para +cada una de las partituras @code{\score} de la salida. Normalmente +sólo se imprimen las variables de encabezamiento @code{piece} y +@code{opus}. Valor predeterminado: @code{#f}. + +@item system-separator-markup +@funindex system-separator-markup + +Objeto de marcado que se inserta entre los sistemas. Se suele usar +para partituras orquestales. Predeterminado: sin establecer. El +elemento de marcado @code{\slashSeparator}, definido en el archivo +@file{ly/titling-init.ly}, se aporta como un valor predeterminado +adecuado, por ejemplo: + +@lilypond[quote,verbatim,noragged-right,line-width=30\mm] +#(set-default-paper-size "a8") + +\book { + \paper { + system-separator-markup = \slashSeparator + } + \header { + tagline = ##f + } + \score { + \relative c'' { c1 \break c1 \break c1 } + } +} +@end lilypond + +@end table + + +@seealso +Archivos de inicio: +@file{ly/titling-init.ly}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@knownissues + +El encabezamiento de página predeterminado pone el número de página y +el campo @code{instrument} del bloque @code{\header} sobre la misma +línea. + + +@node Disposición de la partitura +@section Disposición de la partitura +@translationof Score layout + +Esta sección trata de las opciones de disposición de la partitura para +el bloque @code{\layout}. + +@menu +* El bloque \layout:: +* Establecer el tamaño del pentagrama:: +@end menu + + +@node El bloque \layout +@subsection El bloque @code{\layout} +@translationof The \layout block + +@funindex \layout + +Así como el bloque @code{\paper} contiene ajustes relativos al +formateo de la página para todo el documento, el bloque @code{\layout} +contiene ajustes para la disposición específica de las partituras. +Para fijar las opciones de disposición de partituras de forma global, +escríbalas en un bloque @code{\layout} del nivel jerárquico superior. +Para fijar opciones de disposición para una partitura individual +escríbalas dentro de un bloque @code{\layout} dentro del bloque +@code{\score}, después de la música. Entre los ajustes que pueden +aparecer en un bloque @code{\layout} se encuentran los siguientes: + +@itemize +@item la función de Scheme @code{layout-set-staff-size}, +@item las modificaciones de contexto de los bloques @code{\context}, y +@item las variables de @code{\paper} que afectan a la disposición de la partitura. +@end itemize + +La función @code{layout-set-staff-size} se estudia en la sección +siguiente, @ref{Establecer el tamaño del pentagrama}. Las +modificaciones de contexto se estudian en un capítulo distinto; véase +@ref{Modificar los complementos (plug-ins) de contexto} y +@ref{Cambiar los valores por omisión de los contextos}. Las variables de +@code{\paper} que pueden aparecer dentro de un bloque @code{\layout} +son: + +@itemize + +@item +@code{line-width}, @code{ragged-right} y @code{ragged-last} +(véase @ref{Variables de \paper para la anchura y los márgenes}) + +@item +@code{indent} y @code{short-indent} +(véase @ref{Variables de \paper para desplazamientos y sangrados}) + +@item +@code{system-count} +(véase @ref{Variables de \paper para los saltos de línea}) + +@end itemize + +He aquí un ejemplo de un bloque @code{\layout}: + +@example +\layout @{ + indent = 2\cm + \context @{ + \StaffGroup + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8 + @} + \context @{ + \Voice + \override TextScript #'padding = #1 + \override Glissando #'thickness = #3 + @} +@} +@end example + + +@seealso +Referencia de la notación: +@ref{Cambiar los valores por omisión de los contextos}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@node Establecer el tamaño del pentagrama +@subsection Establecer el tamaño del pentagrama +@translationof Setting the staff size + +@cindex tipografía, fijar el tamaño de +@cindex pentagrama, fijar el tamaño de +@funindex disposición, archivo de + +El @strong{tamaño de pentagrama} predeterminado se establece en 20 +puntos. Esto se puede modificar de dos maneras: + +Para establecer globalmente el tamaño del pentagrama para todas las +partituras de un archivo (o en un bloque @code{book}, para ser +exactos), utilice @code{set-global-staff-size}. + +@example +#(set-global-staff-size 14) +@end example + +@noindent +Esto establece el tamaño global predeterminado a una altura de +pentagrama de 14pt y escala todas las tipografías según corresponda. + +Para establecer el tamaño del pentagrama de forma individual para cada +partitura, use +@example +\score@{ + @dots{} + \layout @{ + #(layout-set-staff-size 15) + @} +@} +@end example + +La fuente tipográfica Feta ofrece símbolos musicales a ocho tamaños +distintos. Cada fuente tipográfica está afinada para un tamaño de +pentagrama distinto: a un tamaño menor la tipografía se vuelve más +pesada, para que coincida con las líneas de pentagrama relativamente +más gruesas. Los tamaños de tipografía recomendados están +relacionados en la tabla siguiente: + +@quotation +@multitable @columnfractions .15 .2 .22 .2 + +@item @b{nombre de la fuente} +@tab @b{altura del pentagrama (pt)} +@tab @b{altura del pentagrama (mm)} +@tab @b{usos} + +@item feta11 +@tab 11.22 +@tab 3.9 +@tab partituras de bolsillo + +@item feta13 +@tab 12.60 +@tab 4.4 +@tab + +@item feta14 +@tab 14.14 +@tab 5.0 +@tab + +@item feta16 +@tab 15.87 +@tab 5.6 +@tab + +@item feta18 +@tab 17.82 +@tab 6.3 +@tab cancioneros + +@item feta20 +@tab 20 +@tab 7.0 +@tab particellas estándar + +@item feta23 +@tab 22.45 +@tab 7.9 +@tab + +@item feta26 +@tab 25.2 +@tab 8.9 +@tab +@c modern rental material? + +@end multitable +@end quotation + +Estas tipografías están disponibles en cualquier tamaño. La propiedad +de contexto @code{fontSize} y la propiedad de disposición +@code{staff-space} (en @rinternals{StaffSymbol}) se pueden usar para +afinar el tamaño de los pentagramas individuales. Los tamaños de +pentagrama individuales están en relación al tamaño global. + + +@seealso +Referencia de la notación: +@ref{Seleccionar el tamaño de la tipografía para la notación}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@knownissues + +@code{layout-set-staff-size} no cambia la distancia entre las líneas +del pentagrama. + + +@node Saltos +@section Saltos +@translationof Breaks + +@menu +* Saltos de línea:: +* Saltos de página:: +* Saltos de página óptimos:: +* Paso de página óptimo:: +* Saltos de página mínimos:: +* Saltos de línea explícitos:: +* Utilizar una voz adicional para los saltos de línea:: +@end menu + + +@node Saltos de línea +@subsection Saltos de línea +@translationof Line breaking + +@cindex saltos de línea +@cindex línea, saltos de + +Normalmente los saltos de línea se determinan automáticamente. Se +eligen de forma que las líneas no aparezcan demasiado apretadas ni +demasiado sueltas, y que las líneas consecutivas tengan una densidad +similar. + +Para forzar manualmente un salto de línea sobre la línea divisoria, +utilice la instrucción @code{\break}: + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c c | \break +c4 c c c | +@end lilypond + +De forma predeterminada se ignora cualquier @code{\break} en la mitad +de un compás, y se imprime una advertencia. Para forzar un salto de +línea en medio de un compás, añada una barra de compás invisible con +@w{@samp{\bar ""}}: + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c +\bar "" \break +c | +c4 c c c | +@end lilypond + +También se ignora un @code{\break} que se produce en la línea +divisoria si el compás anterior termina en medio de una nota, como +cuando un grupo de valoración especial inicia y termina en compases +diferentes. Para permitir que las instrucciones @code{\break} +funcionen en estas situaciones, elimine el grabador +@code{Forbid_line_break_engraver} del contexto @code{Voice}. Observe +que los saltos de línea forzados manualmente se deben añadir en +paralelo con la música: + +@lilypond[quote,ragged-right,verbatim] +\new Voice \with { + \remove Forbid_line_break_engraver +} \relative c'' { + << + { c2. \times 2/3 { c4 c c } c2. | } + { s1 | \break s1 | } + >> +} +@end lilypond + +De forma similar, los saltos de línea están normalmente prohibidos +cuando hay barras de corchea que cruzan la línea divisoria. Se puede +cambiar este comportamiento fijando @code{\override Beam #'breakable = +##t}: + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Beam #'breakable = ##t +c2. c8[ c | \break +c8 c] c2. | +@end lilypond + +La instrucción @code{\noBreak}, prohíbe un salto de línea en +la barra divisoria en que se inserta. + +Los ajustes más básicos que influyen sobre el espaciado de las líneas +son @code{indent} y @code{line-width}. Se establecen dentro del bloque +@code{\layout}. Controlan el sangrado de la primera línea de música, +y la longitud de las líneas. + +Si se establece @code{ragged-right} a verdadero en el bloque +@code{\layout}, los sistemas terminan en su longitud horizontal +natural, en lugar de distribuirse horizontalmente para llenar toda la +línea. Esto es de utilidad para fragmentos cortos, y para efectuar una +comprobación de lo apretado que es el espaciado natural. + +@c TODO Check and add para on default for ragged-right + +La opción @code{ragged-last} es similar a @code{ragged-right}, pero +afecta sólo a la última línea de la pieza. + +@example +\layout @{ + indent = 0\mm + line-width = 150\mm + ragged-last = ##t +@} +@end example + + + +@cindex saltos de línea normales +@cindex música de cuatro compases por línea + +Para saltos de línea a intervalos regulares utilice @code{\break} +separado mediante desplazamientos con @code{\skip} y repetidos con +@code{\repeat}. Por ejemplo, esto haría que los 28 compases +siguientes (suponiendo un compás de 4/4) se dividan cada cuatro +compases, y sólo en dichos lugares: + +@example +<< + \repeat unfold 7 @{ + s1 \noBreak s1 \noBreak + s1 \noBreak s1 \break + @} + @{ @var{la música real@dots{}} @} +>> +@end example + +@c TODO Check this +Una configuración de división de líneas se puede guardar como archivo +@file{.ly} automáticamente. Ello permite que alineaciones verticales +se estiren para que encajen en las páginas durante una segunda +ejecución del proceso de formateo. Esta posibilidad es bastante +novedosa y difícil. Hay más detalles disponibles en @rlsr{Spacing}. + + +@predefined +@funindex \break +@code{\break}, +@funindex \noBreak +@code{\noBreak}. +@endpredefined + + +@seealso +Referencia de la notación: +@ref{Variables de \paper para los saltos de línea}. + +Fragmentos de código: +@rlsr{Spacing}. + +Referencia de funcionamiento interno: +@rinternals{LineBreakEvent}. + + +@node Saltos de página +@subsection Saltos de página +@translationof Page breaking + +Se puede sobreescribir el mecanismo predeterminado de salto de página +insertando instrucciones @code{\pageBreak} o @code{\noPageBreak}. +Estas instrucciones son análogas a @code{\break} y @code{\noBreak}. +Se deben insertar en una línea divisoria. Estas instrucciones fuerzan +y prohíben, respectivamente, la eventualidad de un salto de página. +Por supuesto, la instrucción @code{\pageBreak} también fuerza un salto +de línea. + +Las instrucciones @code{\pageBreak} y @code{\noPageBreak} también se +pueden insertar en el nivel más alto, entre las partituras y los +elementos de marcado situados en el nivel superior. + +Hay ajustes análogos a @code{ragged-right} y @code{ragged-last} que +tienen el mismo efecto sobre el espaciado vertical: +@code{ragged-bottom} y @code{ragged-last-bottom}. Si están +establecidos a @code{##t} los sistemas de todas las páginas o sólo de +la última página, respectivamente, no se verán justificados +verticalmente. Véase +@ref{Variables de espaciado de \paper verticales fijas}. + +Los saltos de página se calculan por medio de la función +@code{page-breaking}. LilyPond ofrece tres algoritmos para el cómputo +de los saltos de página: @code{ly:optimal-breaking}, +@code{ly:page-turn-breaking} y @code{ly:minimal-breaking}. El +predeterminado es @code{ly:optimal-breaking}, pero el valor se puede +cambiar en el bloque @code{\paper}: + +@example +\paper @{ + page-breaking = #ly:page-turn-breaking +@} +@end example + +@funindex \bookpart + +Cuando un libro tiene muchas partituras y páginas, puede ser difícil +resolver el problema de los saltos de página, necesitando mucha +memoria y prolongados tiempos de procesamiento. Para facilitar el +proceso de división en páginas, se usan los bloques @code{\bookpart} +para dividir el libro en varias partes: los saltos de página se +producen de manera independiente en cada parte. También se pueden +usar diferentes funciones de división en páginas para las distintas +partes del libro. + +@example +\bookpart @{ + \header @{ + subtitle = "Prefacio" + @} + \paper @{ + %% En una parte que consiste en texto principalmente, + %% puede ser preferible ly:minimal-breaking + page-breaking = #ly:minimal-breaking + @} + \markup @{ @dots{} @} + @dots{} +@} +\bookpart @{ + %% En esta parte, consistente en música, se usa la función + %% óptima predeterminada de saltos de página. + \header @{ + subtitle = "Primer movimiento" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + +@predefined +@funindex \pageBreak +@code{\pageBreak}, +@funindex \noPageBreak +@code{\noPageBreak}. +@endpredefined + + +@seealso +Referencia de la notación: +@ref{Variables de \paper para los saltos de página}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@node Saltos de página óptimos +@subsection Saltos de página óptimos +@translationof Optimal page breaking + +@funindex ly:optimal-breaking + +La función @code{ly:optimal-breaking} es el método predeterminado de +LilyPond para determinar los saltos de página. Intenta hallar una +división de páginas que haga mínimos el apretujamiento y la +distensión, tanto horizontal como verticalmente. A diferencia de +@code{ly:page-turn-breaking}, no tiene un concepto de los pasos de +página. + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@node Paso de página óptimo +@subsection Paso de página óptimo +@translationof Optimal page turning + +@funindex ly:page-turn-breaking + +Con frecuencia es necesario encontrar una configuración de división de +páginas de manera que haya un silencio al final de una página de cada +dos. De esta forma, el músico puede pasar la página sin perder notas. +La función @code{ly:page-turn-breaking} trata de encontrar una +división de páginas que haga mínimos el apretujamiento y el +estiramiento, pero con la restricción añadida de que sólo se permite +introducir vueltas de página en los lugares especificados. + +Hay dos etapas en el uso de esta función de división de páginas. En +primer lugar debemos habilitarlo en el bloque @code{\paper}, como se +explicó en @ref{Saltos de página}. Entonces debemos decirle a la función +dónde nos gustaría permitir los saltos de página. + +Hay dos formas de conseguir la segunda tarea. Primero, podemos +especificar manualmente cada uno de los pasos de página potenciales, +insertando @code{\allowPageTurn} en nuestro archivo de entrada en los +lugares adecuados. + +Si esto es demasiado tedioso, podemos añadir un grabador +@code{Page_turn_engraver} a un contexto Staff o Voice. El grabador +@code{Page_turn_engraver} analizará el contexto en busca de secciones +sin notas (observe que no busca silencios, sino la ausencia de notas. +Se hace así para que la polifonía en un solo pentagrama con silencios +en una de las voces no arruine la labor del grabador +@code{Page_turn_engraver}). Cuando encuentra una sección sin notas +suficientemente larga, el grabador @code{Page_turn_engraver} inserta +un @code{\allowPageTurn} en la última barra de compás de dicha +sección, a no ser que haya una barra @q{especial} de compás (como una +doble barra), en cuyo caso se insertará el @code{\allowPageTurn} en la +última barra @q{especial} de compás de la sección. + +@funindex minimumPageTurnLength +El grabador @code{Page_turn_engraver} lee la propiedad de contexto +@code{minimumPageTurnLength} para determinar qué longitud debe tener +una sección sin notas antes de que se considere la posibilidad de un +paso de página. El valor predeterminado para +@code{minimumPageTurnLength} es @code{#(ly:make-moment 1 1)}. Si +quiere inhabilitar las vueltas de página, puede establecerlo a algún +valor muy grande. + +@example +\new Staff \with @{ \consists "Page_turn_engraver" @} +@{ + a4 b c d | + R1 | % aquí se permite un salto de página + a4 b c d | + \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) + R1 | % aquí no se permite un salto de página + a4 b r2 | + R1*2 | % aquí se permite un salto de página + a1 +@} +@end example + +@funindex minimumRepeatLengthForPageTurn +El grabador @code{Page_turn_engraver} detecta las repeticiones de +primera y segunda vez. Sólo permite un pase de página durante la +repetición si hay suficiente tiempo al principio y al final de la +repetición para volver a pasar la página hacia atrás. El grabador +@code{Page_turn_engraver} también puede inhabilitar los pasos de +página si la repetición es muy corta. Si establecemos la propiedad de +contexto @code{minimumRepeatLengthForPageTurn} entonces el grabador +@code{Page_turn_engraver} sólo permitirá los pases de página en las +repeticiones cuya duración sea mayor que este valor. + +Las instrucciones de paso de página, @code{\pageTurn}, +@code{\noPageTurn} y @code{\allowPageTurn}, se pueden usar también en +el nivel más elevado del código, entre las partituras y los elementos +de marcado del nivel superior. + + +@predefined +@funindex \pageTurn +@code{\pageTurn}, +@funindex \noPageTurn +@code{\noPageTurn}, +@funindex \allowPageTurn +@code{\allowPageTurn}. +@endpredefined + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@knownissues + +Sólo debería haber un grabador @code{Page_turn_engraver} dentro de una +partitura. Si hay más de uno, se interferirán entre sí. + + +@node Saltos de página mínimos +@subsection Saltos de página mínimos +@translationof Minimal page breaking + +@funindex ly:minimal-breaking + +La función @code{ly:minimal-breaking} efectúa unos cálculos mínimos +para determinar los saltos de página: completa una página con tantos +sistemas como sea posible antes de continuar con la siguiente. Así, +puede preferirse para partituras con muchas páginas, donde las otras +funciones de salto de página pueden resultar demasiado lentas o ávidas +de memoria, o con una gran cantidad de textos. Se habilita utilizando: + +@example +\paper @{ + page-breaking = #ly:minimal-breaking +@} +@end example + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@node Saltos de línea explícitos +@subsection Saltos de línea explícitos +@translationof Explicit breaks + +Lily a veces rechaza las instrucciones @code{\break} y +@code{\pageBreak} explícitas. Hay dos instrucciones para +sobreescribir este comportamiento: + +@example +\override NonMusicalPaperColumn #'line-break-permission = ##f +\override NonMusicalPaperColumn #'page-break-permission = ##f +@end example + +Cuando se sobreescribe el valor de @code{line-break-permission} a +falso, Lily inserta saltos de línea en las instrucciones @code{\break} +explícitas y en ningún otro lugar. Cuando se sobreescribe el valor de +@code{page-break-permission} a falso, Lily inserta saltos de página en +las instrucciones @code{\pageBreak} explícitas y en ningún otro lugar. + +@lilypond[quote,verbatim] +\paper { + indent = #0 + ragged-right = ##t + ragged-bottom = ##t +} + +music = \relative c'' { c8 c c c } + +\score { + \new Staff { + \repeat unfold 2 { \music } \break + \repeat unfold 4 { \music } \break + \repeat unfold 6 { \music } \break + \repeat unfold 8 { \music } \pageBreak + \repeat unfold 8 { \music } \break + \repeat unfold 6 { \music } \break + \repeat unfold 4 { \music } \break + \repeat unfold 2 { \music } + } + \layout { + \context { + \Score + \override NonMusicalPaperColumn #'line-break-permission = ##f + \override NonMusicalPaperColumn #'page-break-permission = ##f + } + } +} +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@node Utilizar una voz adicional para los saltos de línea +@subsection Utilizar una voz adicional para los saltos de línea +@translationof Using an extra voice for breaks + +La información sobre saltos de línea y de página suele aparecer +directamente entremezclado dentro del código de notas. + +@example +music = \relative c'' @{ c4 c c c @} + +\score @{ + \new Staff @{ + \repeat unfold 2 @{ \music @} \break + \repeat unfold 3 @{ \music @} + @} +@} +@end example + +Esto hace sencillas de introducir a las instrucciones @code{\break} y +@code{\pageBreak}, pero mezcla la escritura de música con información +que especifica cómo se debe disponer la música sobre la página. +Podemos mantener la introducción de música y la información de saltos +de línea y de página en dos lugares separados mediante la introducción +de una voz adicional que contenga los saltos. Esta voz adicional +contiene solamente desplazamientos o @q{skips} junto con los +@code{\break}, @code{pageBreak} y otras informaciones sobre la +disposición de los saltos. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + s1 * 2 \break + s1 * 3 \break + s1 * 6 \break + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + +Este patrón resulta especialmente útil cuando se sobreescribe +@code{line-break-system-details} y las otras útiles (pero largas) +propiedades de @code{NonMusicalPaperColumnGrob}, como se explica en +@ref{Espaciado vertical}. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1 * 2 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 35)) + s1 * 3 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 70)) + s1 * 6 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 105)) + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Espaciado vertical}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@node Espaciado vertical +@section Espaciado vertical +@translationof Vertical spacing + +@cindex espaciado vertical +@cindex vertical, espaciado + +El espaciado vertical está controlado por tres factores: la cantidad +de espacio disponible (es decir, el tamaño del papel y los márgenes), +la separación entre los sistemas, y la separación entre los +pentagramas dentro de un sistema. + +@menu +* Espaciado vertical flexible dentro de los sistemas:: +* Posicionamiento explícito de los pentagramas y los sistemas:: +* Evitar las colisiones verticales:: +@end menu + + +@node Espaciado vertical flexible dentro de los sistemas +@subsection Espaciado vertical flexible dentro de los sistemas +@translationof Flexible vertical spacing within systems + +@cindex distancia entre pentagramas +@cindex pentagrama, distancia entre los +@cindex espacio entre pentagramas +@cindex espacio dentro de los sistemas + +Tres mecanismos distintos controlan el espaciado vertical flexible +dentro de los sistemas, uno por cada una de las categorías siguientes: + +@itemize + +@item +@emph{pautas sin agrupar}, + +@item +@emph{pautas agrupadas} (pautas dentro de un grupo de pentagramas como +@code{ChoirStaff}, etc.), y + +@item +@emph{líneas que no son pautas} (como @code{Lyrics}, +@code{ChordNames}, etc.). + +@end itemize + +@c TODO: Clarify this. This almost implies that non-staff lines +@c have NO effect on the spacing between staves. -mp + +La altura de cada sistema se determina en dos fases. Primero, todos +los pentagramas se disponen según la cantidad de espacio vacío +disponible. Después, las líneas que no son pautas se distribuyen +entre las pautas. + +Observe que los mecanismos de espaciado estudiados en esta sección +solamente controlan el espaciado vertical de las pautas y líneas que +no son pautas dentro de los sistemas individuales. El espaciado +vertical entre distintos sistemas, partituras, marcados y márgenes se +controla mediante variables de @code{\paper} que se estudian en +@ref{Flexible vertical spacing \paper variables}. + +@menu +* Propiedades de espaciado dentro de los sistemas:: +* Espaciado de pautas no agrupadas:: +* Espaciado de pautas agrupadas:: +@end menu + + +@node Propiedades de espaciado dentro de los sistemas +@unnumberedsubsubsec Propiedades de espaciado dentro de los sistemas +@translationof Within-system spacing properties + +@funindex staff-affinity +@funindex staffgroup-staff-spacing +@funindex staff-staff-spacing +@funindex nonstaff-unrelatedstaff-spacing +@funindex nonstaff-relatedstaff-spacing +@funindex nonstaff-nonstaff-spacing +@funindex default-staff-staff-spacing +@funindex minimum-Y-extent +@funindex extra-offset +@funindex self-alignment-X +@funindex X-offset +@funindex VerticalAxisGroup + +Los mecanismos de espaciado vertical dentro del sistema están +controlados por dos conjuntos de propiedades de grob. El primer +conjunto está asociado con el grob @code{VerticalAxisGroup}, que se +crea por parte de todas las pautas y líneas que no son pautas. El +segundo conjunto está asociado con el grob @code{StaffGrouper}, que +puede crearse por parte de los grupos de pentagramas, pero solamente +si se le llama explícitamente. Estas propiedades se describen +individualmente al final de la presente sección. + +Los nombres de estas propiedades (excepto para @code{staff-affinity}) +siguen el formato @code{@var{elemento1}-@var{elemento2}-spacing}, +donde @code{@var{elemento1}} y @code{@var{elemento2}} son los +elementos que se van a espaciar. Observe que @code{@var{elemento2}} +no está necesariamente por debajo de @code{@var{elemento1}}; por +ejemplo, @code{nonstaff-relatedstaff-spacing} mide hacia arriba a +partir de la línea del tipo no-pauta si @code{staff-affinity} es +@code{#UP}. + +Cada distancia se mide entre los @emph{puntos de referencia} de los +dos elementos. El @emph{punto de referencia} para un pentagrama y +otro tipo de pauta es el centro vertical de su @code{StaffSymbol} (es +decir, la línea central si @code{line-count} es un número impar; el +espacio central si @code{line-count} es par). Los puntos de +referencia para las líneas individuales que no son pautas aparecen en +la tabla siguiente: + +@multitable {Línea que no es una pauta} {Punto de referencia} +@headitem Línea que no es una pauta @tab Punto de referencia +@item @code{ChordNames} @tab línea de base +@item @code{NoteNames} @tab línea de base +@item @code{Lyrics} @tab línea de base +@item @code{Dynamics} @tab centro vertical +@item @code{FiguredBass} @tab punto más alto +@item @code{FretBoards} @tab línea superior +@end multitable + +En la siguiente imagen, las líneas horizontales indican las posiciones +de estos puntos de referencia: + +@lilypond[quote,noragged-right,line-width=110\mm] +#(define zero-space '((padding . -inf.0) (basic-distance . 0))) + +alignToZero = \with { + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space +} +lowerCaseChords = \with { + chordNameLowercaseMinor = ##t +} +staffAffinityDown = \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN +} +labelContext = +#(define-music-function + (parser location context) + (string?) + #{ s1*0^\markup { \typewriter $context } #}) + +\layout { + \context { \Dynamics \alignToZero } + \context { \FiguredBass \alignToZero } + \context { \Lyrics \alignToZero } + \context { \NoteNames \alignToZero \staffAffinityDown } + \context { \ChordNames \alignToZero + \staffAffinityDown + \lowerCaseChords } + \context { \FretBoards \alignToZero \staffAffinityDown } + \context { \Score + \override BarLine #'stencil = ##f + \override DynamicText #'self-alignment-X = #-1 + \override FretBoard #'X-offset = #1.75 + \override InstrumentName #'minimum-Y-extent = #'(-2 . 2) + \override InstrumentName #'extra-offset = #'(0 . -0.5) + \override TextScript #'minimum-Y-extent = #'(-2 . 3) + \override TimeSignature #'stencil = ##f + } +} + +%% These contexts have reference points at the baseline: +%% ChordNames, NoteNames, and Lyrics +<< + \new ChordNames { \chords { g1:m } } + \new NoteNames { s1 | g1 | } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"baseline " + \textLengthOn + \labelContext "ChordNames " s1 | + \labelContext "NoteNames " s1 | + \labelContext "Lyrics" s1 | + } + \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } } +>> + +%% The reference point for Dynamics is its vertical center +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"vertical center " + \labelContext "Dynamics" s1*3 + } + \new Dynamics { s1\mp s\fp } +>> + +%% The reference point for FiguredBass is its highest point +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"highest point " + \labelContext "FiguredBass" s1 + } + \new FiguredBass { \figuremode { <6 5>1 } } +>> + +%% The reference point for FretBoards is the top line +\include "predefined-guitar-fretboards.ly" +<< + \new FretBoards { \chordmode { e1 } } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"top line " + \labelContext "FretBoards " s1 + } +>> +@end lilypond + +Cada una de las propiedades de grob del espaciado vertical (excepto +@code{staff-affinity}) +usa la misma estructura de lista-A que las +variables de espaciado del bloque @code{\paper} que se han estudiado +en @ref{Flexible vertical spacing \paper variables}. +En @ref{Modificación de las listas-A} +se estudian métodos específicos para la modificación de +las listas-A. Las propiedades de los grobs deben ajustarse con un +@code{\override} dentro de un bloque @code{\score} o @code{\layout}, y +no dentro de un bloque @code{\paper}. + +El ejemplo que sigue muestra las dos maneras en que pueden modificarse +estas listas-A. La primera declaración actualiza un par clave-valor de +forma individual, y la segunda redefine la propiedad completamente: + +@example +\new Staff \with @{ + \override VerticalAxisGroup #'default-staff-staff-spacing + #'basic-distance = #10 +@} @{ @dots{} @} + +\new Staff \with @{ + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 10) + (minimum-distance . 9) + (padding . 1) + (stretchability . 10)) +@} @{ @dots{} @} +@end example + +Para modificar globalmente cualquiera de los ajustes de espaciado, +póngalos dentro del bloque @code{\layout}: + +@example +\layout @{ + \context @{ + \Staff + \override VerticalAxisGroup #'default-staff-staff-spacing + #'basic-distance = #10 + @} +@} +@end example + +Los ajustes estándar para las propiedades de grob del espaciado +vertical están relacionadas en @rinternals{VerticalAxisGroup} y en +@rinternals{StaffGrouper}. Las sobreescrituras predeterminadas para +los tipos específicos de líneas que no son pautas están relacionadas +en las descripciones de contexto correspondientes en +@rinternals{Contexts}. + + +@subsubheading Propiedades del grob @code{VerticalAxisGroup} + +Las propiedades de @code{VerticalAxisGroup} se suelen ajustar con una +instrucción @code{\override} en el nivel de @code{Staff} (o +equivalente). + +@table @code +@item staff-staff-spacing +Se utiliza para determinar la distancia entre la pauta actual +y la pauta que está justo por debajo +de ella dentro del mismo sistema, incluso si hay más líneas que no son +pautas (tales como @code{Lyrics}) entre las dos pautas. No se aplica +a la pauta inferior de un sistema. + +Inicialmente, el valor de espaciado @code{staff-staff-spacing} de un +grupo @code{VerticalAxisGroup} es una función de Scheme que aplica las +propiedades del @code{StaffGrouper} si la pauta forma parte de un +grupo, o el @code{default-staff-staff-spacing} de la pauta en caso +contrario. Esto hace posible que las pautas estén espaciadas de forma +diferente cuando están agrupadas. Para conseguir un espaciado regular +sin importar el agrupamiento, esta función se puede sustituir por una +lista-A de espaciado flexible, utilizando la forma de +sobreescritura de redefinición completa que se ha mostrado más arriba. + +@item default-staff-staff-spacing +Una lista-A de espaciado flexible que define el +espacio @code{staff-staff-spacing} que se usará para las pautas sin +agrupar, a no ser que se haya sobreescrito explícitamente +@code{staff-staff-spacing} con una instrucción @code{\override}. + +@item staff-affinity +Dirección de la pauta que utilizar para el espaciado de la línea +actual que no es pauta. Se puede elegir entre @code{UP} (arriba), +@code{DOWN} (abajo) y @code{CENTER} (centro). Si es @code{CENTER}, la +línea del tipo no-pauta se coloca equidistante entre las dos pautas +contiguas a ambos lados, a no ser que lo impidan colisiones u otras +restricciones de espaciado. Las líneas del tipo no-pauta adyacentes +han de llevar valores de @code{staff-affinity} no crecientes desde la +parte superior hasta la inferior, p.ej. una línea del tipo no-pauta +establecida a @code{UP} no debería seguir inmediatamente a otra que +esté establecida a @code{DOWN}. Las líneas del tipo no-pauta en la +parte superior de un sistema deben usar @code{DOWN}; las de la parte +inferior deben usar @code{UP}. El ajuste de @code{staff-affinity} +para una pauta hace que se le trate como una línea que no es una +pauta. El establecimiento de @code{staff-affinity} a @code{#f} para +una línea que no es una pauta hace que se trate como una pauta. +Establecer @code{staff-affinity} a @code{UP}, @code{CENTER}, o +@code{DOWN} hace que el pentagrama resulte espaciado como si fuera una +línea que no es una pauta. + +@item nonstaff-relatedstaff-spacing +Distancia entre la línea del tipo no-pauta actual y la pauta más +próxima en la dirección de @code{staff-affinity}, si no hay ninguna +línea que no sea una pauta entre las dos, y @code{staff-affinity} es +@code{UP} o @code{DOWN}. Si @code{staff-affinity} es @code{CENTER}, +entonces se usa @code{nonstaff-relatedstaff-spacing} para las pautas +más próximas @emph{a los dos lados}, incluso aunque aparezcan otras +líneas del tipo no-pauta entre la pauta actual y una de las otras. +Esto significa que la colocación de una línea que no es una pauta +depende tanto de las pautas que la rodean como de las líneas que no +son pautas y que la rodean. Establecer la ampliabilidad +@code{stretchability} de uno de estos tipos de espaciado a un valor +más pequeño provoca que este espaciado domine. El establecimiento de +@code{stretchability} a un valor mayor hace que dicho espaciado tenga +un menor efecto. + +@item nonstaff-nonstaff-spacing +Distancia entre la línea actual del tipo no-pauta y la siguiente línea +del tipo no-pauta en la dirección de @code{staff-affinity}, si las dos +están al mismo lado de la pauta relacionada, y @code{staff-affinity} +es @code{UP} o @code{DOWN}. + +@item nonstaff-unrelatedstaff-spacing +Distancia entre la línea actual del tipo no-pauta y la pauta en la +dirección opuesta de @code{staff-affinity}, si no hay ninguna otra +línea del tipo no-pauta entre las dos, y @code{staff-affinity} es +@code{UP} o @code{DOWN}. Se puede usar, por ejemplo, para requerir +una cantidad de relleno mínima entre una línea de @code{Lyrics} y la +pauta a la que no pertenece. +@end table + + +@subsubheading Propiedades del grob @code{StaffGrouper} + +Las propiedades de @code{StaffGrouper} se suelen ajustar con una +instrucción @code{\override} en el nivel de @code{StaffGroup} (o +equivalente). + +@table @code +@item staff-staff-spacing +Distancia entre pautas consecutivas dentro del grupo de pautas actual. +La propiedad @code{staff-staff-spacing} del grob +@code{VerticalAxisGroup} de una pauta individual se puede +sobreescribir con distintos ajustes de espaciado para dicha +pauta. + +@item staffgroup-staff-spacing +Distancia entre la última pauta del grupo en curso y la pauta que está +justo por debajo de ella dentro del mismo sistema, incluso si existen +una o más líneas que no son pautas (tales como @code{Lyrics}) entre +las dos pautas. No se aplica al pentagrama o pauta inferior de un +sistema. La propiedad @code{staff-staff-spacing} del grob +@code{VerticalAxisGroup} de una pauta individual se puede +sobreescribir con distintos ajustes de espaciado para dicha +pauta. +@end table + +@seealso +Referencia de la notación: +@ref{Variables de espaciado de \paper verticales flexibles}, +@ref{Modificación de las listas-A}. + +Referencia de funcionamiento interno: +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + +Archivos de inicio: +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + + +@node Espaciado de pautas no agrupadas +@unnumberedsubsubsec Espaciado de pautas no agrupadas +@translationof Spacing of ungrouped staves + +Las @emph{pautas}, tales como los pentagramas (@code{Staff}), pautas +de percusión (@code{DrumStaff}) o de tablatura (@code{TabStaff}), +etc. son contextos que pueden contener uno o más contextos de voz, +pero no pueden contener otras pautas. + +Las siguientes propiedades afectan al espaciado de las pautas @emph{no +agrupadas}: + +@itemize +@item Propiedades de @code{VerticalAxisGroup}: +@itemize +@item @code{default-staff-staff-spacing} +@item @code{staff-staff-spacing} +@end itemize +@end itemize + +Estas propiedades de grob se describen individualmente más arriba; +véase @ref{Propiedades de espaciado dentro de los sistemas}. + +Están implicadas ciertas propiedades adicionales para las pautas que +son parte de un grupo; véase @ref{Espaciado de pautas agrupadas}. + +El ejemplo siguiente muestra cómo la propiedad +@code{default-staff-staff-spacing} puede afectar al espaciado de pautas no +agrupadas. Las mismas sobreescrituras aplicadas a +@code{staff-staff-spacing} +tendrían el mismo efecto, pero también se aplicaría en caso de que las +pautas estuvieran combinadas en un grupo o grupos. + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Staff + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 8) + (minimum-distance . 7) + (padding . 1)) + } +} + +<< + % The very low note here needs more room than 'basic-distance + % can provide, so the distance between this staff and the next + % is determined by 'padding. + \new Staff { b,2 r | } + + % Here, 'basic-distance provides enough room, and there is no + % need to compress the space (towards 'minimum-distance) to make + % room for anything else on the page, so the distance between + % this staff and the next is determined by 'basic-distance. + \new Staff { \clef bass g2 r | } + + % By setting 'padding to a negative value, staves can be made to + % collide. The lowest acceptable value for 'basic-distance is 0. + \new Staff \with { + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 3.5) + (padding . -10)) + } { \clef bass g2 r | } + \new Staff { \clef bass g2 r | } +>> +@end lilypond + +@seealso +Archivos de inicio: +@file{scm/define-grobs.scm}. + +Fragmentos de código: +@rlsr{Spacing}. + +Referencia de funcionamiento interno: +@rinternals{VerticalAxisGroup}. + + +@node Espaciado de pautas agrupadas +@unnumberedsubsubsec Espaciado de pautas agrupadas +@translationof Spacing of grouped staves + +En partituras grandes como las orquestales, es común colocar los +pentagramas en grupos. El espacio entre los grupos suele ser mayor +que el espacio que hay entre los pentagramas dentro del mismo grupo. + +Los grupos de pautas, @emph{Staff-groups} (tales como +@code{StaffGroup}, @code{ChoirStaff}, etc.) son contextos que pueden +contener al mismo tiempo uno o más pentagramas o pautas. + +Las siguientes propiedades afectan al espaciado de las pautas dentro +de los grupos: + +@itemize +@item Propiedades de @code{VerticalAxisGroup}: +@itemize +@item @code{staff-staff-spacing} +@end itemize +@item Propiedades de @code{StaffGrouper}: +@itemize +@item @code{staff-staff-spacing} +@item @code{staffgroup-staff-spacing} +@end itemize +@end itemize + +Estas propiedades de grob se describen individualmente más arriba; +véase @ref{Propiedades de espaciado dentro de los sistemas}. + +El ejemplo siguiente muestra cómo pueden afectar las propiedades del +grob @code{StaffGrouper} al espaciado de las pautas agrupadas: + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Score + \override StaffGrouper #'staff-staff-spacing #'padding = #0 + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1 + } +} + +<< + \new PianoStaff \with { + \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20 + } << + \new Staff { c'1 } + \new Staff { c'1 } + >> + + \new StaffGroup << + \new Staff { c'1 } + \new Staff { c'1 } + >> +>> +@end lilypond + +@seealso +Archivos de inicio: +@file{scm/define-grobs.scm}. + +Fragmentos de código: +@rlsr{Spacing}. + +Referencia de funcionamiento interno: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@unnumberedsubsubsec Espaciado de las líneas que no son pautas + +Las @emph{Líneas que no son pautas} (tales como @code{Lyrics}, +@code{ChordNames}, etc.) son contextos cuyos objetos de presentación +se imprimen como pentagramas (es decir, en líneas horizontales dentro +de los sistemas). Específicamente, las líneas que no son pautas son +contextos del tipo no-pauta que crean el objeto de presentación +@code{VerticalAxisGroup}. + +Las siguientes propiedades afectan al espaciado de las líneas que no +son pautas: + +@itemize +@item Propiedades de @code{VerticalAxisGroup}: +@itemize +@item @code{staff-affinity} +@item @code{nonstaff-relatedstaff-spacing} +@item @code{nonstaff-nonstaff-spacing} +@item @code{nonstaff-unrelatedstaff-spacing} +@end itemize +@end itemize + +Estas propiedades de grob se describen individualmente más arriba; +véase @ref{Propiedades de espaciado dentro de los sistemas}. + +El ejemplo siguiente muestra cómo la propiedad +@code{nonstaff-nonstaff-spacing} puede afectar el espaciado de líneas +consecutivas que no son pautas. Aquí, mediante el establecimiento de +la clave de ampliabilidad @code{stretchability} a un valor muy grande, +la línea de letra es capaz de ampliarse mucho más de lo que es usual: + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Lyrics + \override VerticalAxisGroup + #'nonstaff-nonstaff-spacing #'stretchability = #1000 + } +} + +\new StaffGroup +<< + \new Staff \with { + \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30)) + } { c'1 } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #UP + } \lyricmode { up } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #CENTER + } \lyricmode { center } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN + } \lyricmode { down } + \new Staff { c'1 } +>> +@end lilypond + + +@seealso +Archivos de inicio: +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + +Fragmentos de código: +@rlsr{Spacing}. + +@c @lsr{spacing,page-spacing.ly}, +@c @lsr{spacing,alignment-vertical-spacing.ly}. + +Referencia de funcionamiento interno: +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}. + + +@node Posicionamiento explícito de los pentagramas y los sistemas +@subsection Posicionamiento explícito de los pentagramas y los sistemas +@translationof Explicit staff and system positioning + +Una forma de entender los mecanismos del espaciado vertical +flexible que se han explicado más arriba es como una +colección de ajustes que controlan la cantidad de relleno +vertical entre los pentagramas y los sistemas. + +Es posible enfrentarse al espaciado vertical de una forma distinta +utilizando @code{NonMusicalPaperColumn #'line-break-system-details}. +Mientras que los mecanismos del espaciado vertical flexible +especifican relleno vertical, @code{NonMusicalPaperColumn +#'line-break-system-details} puede especificar posiciones verticales +exactas sobre la página. + +@code{NonMusicalPaperColumn #'line-break-system-details} acepta una +lista asociativa de tres ajustes diferentes: + +@itemize +@item @code{X-offset} (desplazamiento en X) +@item @code{Y-offset} (desplazamiento en Y) +@item @code{alignment-distances} (distancias de alineación) +@end itemize + +Las sobreescrituras de los objetos gráficos, entre ellas las de +@code{NonMusicalPaperColumn} que aparecen más abajo, pueden ocurrir en +tres lugares distintos dentro de un archivo de entrada: + +@itemize +@item directamente en medio de las notas +@item en un bloque @code{\context} +@item en el bloque @code{\with} +@end itemize + +Cuando sobreescribimos @code{NonMusicalPaperColumn}, usamos la +instrucción @code{\override} usual en los bloques @code{\context} y en +el bloque @code{\with}. Por otra parte, cuando sobreescribimos +@code{NonMusicalPaperColumn} en medio de las notas, debemos usar la +instrucción especial @code{\overrideProperty}. He aquí algunas +sobreescrituras de @code{NonMusicalPaperColumn} de ejemplo con la +instrucción especial @code{\overrideProperty}: + +@example +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((alignment-distances . (15))) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40) + (alignment-distances . (15))) +@end example + +Para entender cómo funciona cada uno de los distintos ajustes, +empezamos observando un ejemplo que no incluye absolutamente ninguna +sobreescritura. + +@c \book { } is required in these examples to ensure the spacing +@c overrides can be seen between systems. -np + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + s1*5 \break + s1*5 \break + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Esta partitura mantiene aislada la información de los saltos de línea +y de página en una voz dedicada a ello. Esta técnica de crear una voz +de saltos ayuda a mantener separada de la escritura de notas conforme +el ejemplo se vuelve más complicado. Consulte +@ref{Utilizar una voz adicional para los saltos de línea}. + +Los saltos explícitos dividen la música de forma regular en seis +compases por línea. El espaciado vertical es el resultado de los +ajustes predeterminados de LilyPond. Para establecer explícitamente +el punto de origen vertical de cada sistema, podemos establecer el par +@code{Y-offset} en el atributo @code{line-break-system-details} del +grob (objeto gráfico) @code{NonMusicalPaperColumn}: + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 40)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 80)) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Observe que @code{line-break-system-details} toma una lista asociativa +de una cantidad de valores potencialmente elevada, pero aquí sólo +fijamos un valor. Observe también que aquí la propiedad +@code{Y-offset} determina la posición vertical exacta sobre la página +en la que se trazará cada uno de los nuevos sistemas. + +Ahora que hemos establecido explícitamente el punto de origen vertical +de cada sistema, podemos también establecer manualmente las distancias +verticales entre los pentagramas dentro de cada sistema. Lo hacemos +usando la subpropiedad @code{alignment-distances} de +@code{line-break-system-details}. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 20) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (15))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Observe que aquí asignamos dos valores distintos al atributo +@code{line-break-system-details} del grob +@code{NonMusicalPaperColumn}. Aunque el atributo alist de +@code{line-break-system-details} acepta muchos parámetros de espaciado +adicionales (entre ellos, por ejemplo, un par @code{X-offset} +correspondiente), sólo tenemos que establecer el desplazamiento +@code{Y-offset} y los pares @code{alignment-distances} para controlar +el punto de origen vertical de cada sistema y pentagrama. Finalmente, +observe que @code{alignment-distances} especifica el posicionamiento +vertical de los pentagramas pero no de los grupos de pentagramas. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0) + (alignment-distances . (30 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (10 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (10 30))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new StaffGroup << + \new Staff { \repeat unfold 15 { d'4 d' d' d' } } + \new Staff { \repeat unfold 15 { e'4 e' e' e' } } + >> + >> + } +} +@end lilypond + +Algunos puntos que tener en cuenta: + +@itemize +@item Al usar @code{alignment-distances}, la letra +y otras líneas que no son pautas, no cuentan como un pentagrama. + +@item Las unidades de los números que se pasan a @code{X-offset}, +@code{Y-offset} y @code{alignment-distances} se interpretan como +múltiplos de la distancia entre líneas de pentagrama adyacentes. Los +valores positivos mueven a los pentagramas y a la letra hacia arriba, +los valores negativos mueven los pentagramas y la letra hacia abajo. + +@item A causa de que los ajustes a @code{NonMusicalPaperColumn +#'line-break-system-details} dados aquí permiten el posicionamiento de +pentagramas y sistemas en cualquier lugar de la página, es posible +violar los márgenes o los límites del papel, o incluso imprimir +pentagramas o sistemas unos encima de otros. Esto se evitaría pasando +a los diferentes ajustes unos valores razonables. +@end itemize + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@node Evitar las colisiones verticales +@subsection Evitar las colisiones verticales +@translationof Vertical collision avoidance + +@funindex outside-staff-priority +@funindex outside-staff-padding +@funindex outside-staff-horizontal-padding + +Podemos decir intuitivamente que algunos objetos de la notación +musical pertenecen al pentagrama y otros se sitúan fuera del +pentagrama. Entre los objetos que pertenecen al exterior del +pentagrama están las marcas de ensayo, las marcas textuales y las +indicaciones de dinámica (en lo sucesivo, les llamaremos objetos fuera +del pentagrama). La regla de LilyPond para la colocación vertical de +los objetos fuera del pentagrama es ponerlos tan cerca del pentagrama +como sea posible pero no tan próximos como para que choquen con otro +objeto. + +LilyPond utiliza la propiedad @code{outside-staff-priority} para +determinar si un grob es un objeto fuera del pentagrama: si +@code{outside-staff-priority} es un número, el grob es un objeto fuera +del pentagrama. Además, @code{outside-staff-priority} informa a +LilyPond en qué orden se debe situar los objetos. + +En primer lugar, LilyPond sitúa todos los objetos que no pertenecen al +exterior del pentagrama. Después ordena los objetos fuera del +pentagrama de acuerdo a su prioridad @code{outside-staff-priority} (en +orden creciente). LilyPond toma los objetos fuera del pentagrama uno +a uno y los coloca de forma que no choquen con ningún objeto que ya +haya sido colocado. Esto es, si dos grobs fuera del pentagrama +compiten por el mismo espacio, el que tiene la prioridad +@code{outside-staff-priority} más baja se colocará más próximo al +pentagrama. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4_"Text"\pp +r2. +\once \override TextScript #'outside-staff-priority = #1 +c4_"Text"\pp % this time the text will be closer to the staff +r2. +% by setting outside-staff-priority to a non-number, +% we disable the automatic collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\once \override DynamicLineSpanner #'outside-staff-priority = ##f +c4_"Text"\pp % now they will collide +@end lilypond + +El relleno vertical entre un objeto fuera del pentagrama y los grobs +posicionados previamente se puede controlar con +@code{outside-staff-padding}. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\once \override TextScript #'outside-staff-padding = #0 +a'^"This text is placed very close to the note" +\once \override TextScript #'outside-staff-padding = #3 +c^"This text is padded away from the previous text" +c^"This text is placed close to the previous text" +@end lilypond + +De forma predeterminada, los objetos fuera del pentagrama se colocan +sólo para evitar una colisión horizontal con los grobs posicionados +previamente. Esto puede llevar a situaciones en las que los objetos +se colocan muy próximos entre sí en el sentido horizontal. El espacio +vertical entre pentagramas se puede fijar también de manera que los +objetos fuera del pentagrama se sitúen de forma intercalada. El +establecimiento del relleno horizontal +@code{outside-staff-horizontal-padding} ocasiona que un objeto se +desplace verticalmente para que tal situación no ocurra. + +@lilypond[quote,ragged-right,relative=2,verbatim] +% the markup is too close to the following note +c4^"Text" +c4 +c''2 +% setting outside-staff-horizontal-padding fixes this +R1 +\once \override TextScript #'outside-staff-horizontal-padding = #1 +c,,4^"Text" +c4 +c''2 +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@node Espaciado horizontal +@section Espaciado horizontal +@translationof Horizontal spacing + +@cindex horizontal, espaciado +@cindex espaciado horizontal + +@menu +* Panorámica del espaciado horizontal:: +* Área de espaciado nueva:: +* Cambiar el espaciado horizontal:: +* Longitud de la línea:: +* Notación proporcional:: +@end menu + + +@node Panorámica del espaciado horizontal +@subsection Panorámica del espaciado horizontal +@translationof Horizontal spacing overview + +El motor de espaciado traduce las diferencias en las duraciones a +distancias ampliables (@q{muelles}) de distintas longitudes. Las +duraciones más largas reciben un espacio mayor y las duraciones más +cortas reciben menos. Las duraciones más breves reciben un espacio de +tamaño fijo (que se controla mediante @code{shortest-duration-space} +en el objeto @rinternals{SpacingSpanner}). Cuanto más larga es la +duración, más espacio recibe: al doblar una duración se añade un +espacio de tamaño fijo (este tamaño se controla mediante +@code{spacing-increment}) a la nota. + +Por ejemplo, la pieza siguiente contiene numerosas blancas, negras y +corcheas; la corchea va seguida de un ancho de cabeza de blanca (ACB). +La negra va seguida de 2 ACB, la blanca por 3 ACB, etc. + +@lilypond[quote,verbatim,relative=1] +c2 c4. c8 c4. c8 c4. c8 c8 +c8 c4 c4 c4 +@end lilypond + +Normalmente, el valor de @code{spacing-increment} está establecido en +1.2 espacios de pentagrama, lo que es aproximadamente el ancho de una +cabeza, y @code{shortest-duration-space} está establecido en 2.0, lo +que significa que la nota más breve recibe 2.4 espacios de pentagrama +(2.0 multiplicado por el @code{spacing-increment}) de espacio +horizontal. Este espacio se cuenta a partir del borde izquierdo del +símbolo, de manera que las notas más breves van seguidas generalmente +por un espacio de 1 ACB. + +Si siguiésemos el procedimiento anterior exactamente, entonces la +adición de una sola fusa a una partitura que usa corcheas y +semicorcheas, aumentaría enormemente la anchura de la partitura +completa. La nota más breve ya no es la semicorchea, sino la fusa, +añadiendo así 1 ACB a cada una de las notas. Para evitarlo, la +duración más breve a efectos de espaciado no es la nota más breve de +la partitura, sino la que ocurre con más frecuencia. + +La duración más breve que es más común se determina de la siguiente +manera: en cada compás se determina la duración más breve. La menor +duración más común se toma como base para el espaciado, habiendo +estipulado que esta duración menor siempre debe ser igual o menor que +una corchea. La duración más breve se imprime cuando se ejecuta +@code{lilypond} con la opción @code{--verbose}. + +Estas duraciones también se pueden personalizar. Si establecemos la +@code{common-shortest-duration} en @rinternals{SpacingSpanner}, +entonces éste establece la duración base para el espaciado. La +duración máxima para esta base (normalmente una corchea), se fija a +través de @code{base-shortest-duration}. + +@funindex common-shortest-duration +@funindex base-shortest-duration +@funindex stem-spacing-correction +@funindex spacing + +Las notas que son aún más breves que la nota común más breve van +seguidas por un espacio proporcional a su duración en relación con la +nota común más breve. Así pues, si fuésemos a añadir tan sólo algunas +semicorcheas al ejemplo anterior, irían seguidas por medio ACB: + +@lilypond[quote,verbatim,relative=2] +c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 +@end lilypond + + +En el @emph{Ensayo sobre grabado musical automatizado}, +se explicó que las +direcciones de las plicas influyen en el espaciado +(véase @ressay{Espaciado óptico}). Esto se controla +con la propiedad @code{stem-spacing-correction} en el objeto +@rinternals{NoteSpacing}. Estos se generan para cada uno de los +contextos de @rinternals{Voice}. El objeto @code{StaffSpacing} +(generado en el contexto de @rinternals{Staff}) contiene la misma +propiedad para controlar el espaciado de las líneas de plica o +divisorias. El ejemplo siguiente muestra estas correcciones, una vez +con los valores predeterminados y otra con correcciones exageradas: + +@lilypond[quote,ragged-right] +{ + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | + \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 + \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | +} +@end lilypond + +Está contemplada la notación proporcional; consulte +@ref{Notación proporcional}. + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + +Referencia de funcionamiento interno: +@rinternals{SpacingSpanner}, +@rinternals{NoteSpacing}, +@rinternals{StaffSpacing}, +@rinternals{NonMusicalPaperColumn}. + +Ensayo sobre grabado musical automatizado: +@ressay{Espaciado óptico}. + + +@knownissues + +No existe ningún mecanismo conveniente para sobreescribir el espaciado +manualmente. Se puede usar el siguiente rodeo para insertar espacio +adicional en una partitura, ajustando el valor del relleno en la +medida necesaria. + +@example + \override Score.NonMusicalPaperColumn #'padding = #10 +@end example + +No existe ningún rodeo para disminuir la magnitud de la separación. + + +@node Área de espaciado nueva +@subsection Área de espaciado nueva +@translationof New spacing area + +Se pueden iniciar secciones nuevas con diferentes parámetros de +espaciado, con @code{newSpacingSection}. Esto es útil cuando hay +secciones que tienen distinta noción de las notas largas y cortas. + +En el ejemplo siguiente, el cambio de compás introduce una sección +nueva, y por ello las semicorcheas se separan de manera más amplia. + +@lilypond[relative=1,verbatim,quote] +\time 2/4 +c4 c8 c +c8 c c4 c16[ c c8] c4 +\newSpacingSection +\time 4/16 +c16[ c c8] +@end lilypond + +La instrucción @code{\newSpacingSection} crea un nuevo objeto +@code{SpacingSpanner}, y de ahí que se puedan usar nuevas +instrucciones de sobreescritura @code{\override} en dicho punto. + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + +Referencia de funcionamiento interno: +@rinternals{SpacingSpanner}. + + +@node Cambiar el espaciado horizontal +@subsection Cambiar el espaciado horizontal +@translationof Changing horizontal spacing + +Se puede alterar el espaciado horizontal con la propiedad +@code{base-shortest-duration}. Aquí compararemos la misma música, una +vez sin alterar la propiedad, y luego alterándola. Los valores +mayores de @code{ly:make-moment} producen música más pequeña. Observe +que @code{ly:make-moment} construye una duración, por lo que @code{1 +4} es una duración mayor que @code{1 16}. + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } +} +@end lilypond + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } +} +@end lilypond + + +@snippets + +De forma predeterminada, el espaciado en los grupos de valoración +especial depende de varios factores ajenos a la duración (como +alteraciones, cambios de clave, etc.). Para pasar por alto estos +símbolos y forzar un espaciado de duraciones iguales uniforme, use +@code{Score.SpacingSpanner #'uniform-stretching}. Esta propiedad sólo +puede cambiarse al principio de la partitura: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new Staff { + \times 4/5 { + c8 c8 c8 c8 c8 + } + c8 c8 c8 c8 + } + \new Staff { + c8 c8 c8 c8 + \times 4/5 { + c8 c8 c8 c8 c8 + } + } + >> + \layout { + \context { + \Score + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +Cuando se establece @code{strict-note-spacing}, las notas se separan +sin tener en cuenta las claves, líneas divisorias ni notas de adorno: + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Score.SpacingSpanner #'strict-note-spacing = ##t +\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@node Longitud de la línea +@subsection Longitud de la línea +@translationof Line length + +@cindex saltos de página +@cindex página, saltos de + +@funindex indent +@funindex line-width +@funindex ragged-right +@funindex ragged-last + +@c Although line-width can be set in \layout, it should be set in paper +@c block, to get page layout right. +@c Setting indent in \paper block makes not much sense, but it works. + +@c Bit verbose and vague, use examples? +Los ajustes más básicos que influyen en el espaciado son @code{indent} +y @code{line-width}. Se definen en el bloque @code{\layout}. +Controlan el sangrado de la primera línea de música y la longitud de +las líneas. + +Si se fija un valor verdadero para @code{ragged-right} en el bloque +@code{\layout}, entonces los sistemas terminan en su longitud +horizontal natural, en lugar de repartirse horizontalmente hasta +llenar toda la línea. Esto es útil para fragmentos cortos, y para +comprobar qué tan apretado es el espaciado natural. +El valor normal predeterminado es falso, pero si la partitura +tiene un solo sistema, el valor predeterminado es verdadero. + + +@cindex diseño de página +@cindex página, disposición de la +@cindex vertical, espaciado + +La opción @code{ragged-last} es similar a @code{ragged-right}, pero +afecta sólo a la última línea de la pieza. No se efectúa ninguna +restricción sobre dicha línea. El resultado es similar al formateo de +los párrafos de texto. En un párrafo, la última línea sencillamente +ocupa su longitud horizontal natural. +@c Note that for text there are several options for the last line. +@c While Knuth TeX uses natural length, lead typesetters use the same +@c stretch as the previous line. eTeX uses \lastlinefit to +@c interpolate between both these solutions. + +@example +\layout @{ + indent = #0 + line-width = #150 + ragged-last = ##t +@} +@end example + + +@seealso +Fragmentos de código: +@rlsr{Spacing}. + + +@node Notación proporcional +@subsection Notación proporcional +@translationof Proportional notation + +LilyPond contempla la notación proporcional, un tipo de espaciado +horizontal en el que cada nota consume una medida horizontal que +equivale exactamente a su duración rítmica. Este tipo de espaciado +proporcional es comparable al espaciado horizontal hecho sobre un +papel milimetrado. Ciertas partituras del finales del s.XX y +principios del s.XXI utilizan notación proporcional para clarificar +relaciones rítmicas complejas o para facilitar la colocación de líneas +cronométricas u otros gráficos directamente en la partitura. + +LilyPond contempla cinco ajustes distintos para la notación +proporcional, que se pueden usar solos o combinados: + +@itemize +@item @code{proportionalNotationDuration} +@item @code{uniform-stretching} +@item @code{strict-note-spacing} +@item @code{\remove Separating_line_group_engraver} +@item @code{\override PaperColumn #'used = ##t} +@end itemize + +En los ejemplos que siguen, exploramos el uso de estos cinco ajustes +de la notación proporcional y examinamos la forma en que interactúan. + +Comenzamos con el siguiente ejemplo de un solo compás, que usa un +espaciado clásico sin justificación por la derecha. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> +} +@end lilypond + +Observe que la blanca que inicia el compás ocupa mucho menos de la +mitad de todo el espacio horizontal del compás. De forma similar, las +semicorcheas y el cinquillo de semicorcheas con que finaliza el compás +ocupan en conjunto mucho más de la mitad de todo el espacio horizontal +del compás. + +En el grabado clásico, este espaciado puede ser exactamente el que +deseamos porque podemos tomar prestado el espacio horizontal de la +blanca y conservar el espacio horizontal a lo largo del compás como un +todo. + +Por otro lado, si queremos insertar una línea de tiempo graduada o +algún otro gráfico encima o debajo de la partitura, necesitamos la +notación proporcional. Se activa la notación proporcional con el +ajuste @code{proportionalNotationDuration}. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + +La blanca al principio del compás y las notas rápidas de la segunda +mitad del compás ocupan ahora cantidades iguales de espacio +horizontal. Podríamos colocar una línea de tiempo graduada o un +gráfico encima o debajo de este ejemplo. + +El ajuste @code{proportionalNotationDuration} es un ajuste de contexto +que reside en @code{Score}. Recordemos que los ajustes de contexto +aparecen en uno de tres posibles lugares del archivo de entrada: en un +bloque @code{\with}, en un bloque @code{\context}, o directamente +entre la música precedido por la instrucción @code{\set}. Como con +todos los ajustes de contexto, el usuario puede elegir en cuál de los +tres lugares diferentes prefiere establecer el valor de +@code{proportionalNotationDuration}. + +El ajuste @code{proportionalNotationDuration} acepta un solo +argumento, que es la duración de referencia contra el que se aplica el +espaciado de toda la música. La función Scheme de LilyPond +@code{make-moment} acepta dos argumentos: un numerador y un +denominador que, juntos, expresan una cierta fracción de redonda. La +llamada @code{#(ly:make-moment 1 20)}, por tanto, produce una duración +de referencia de una nota de un veinteavo de redonda (semicorcheas de +cinquillo). Son también posibles valores como +@code{#(ly:make-moment 1 16)}, +@code{#(ly:make-moment 1 8)} y @code{#(ly:make-moment 3 97)}. + +¿Cómo seleccionamos la duración correcta de referencia para pasarla a +@code{proportionalNotationDuration}? Normalmente mediante un proceso +de ensayo y error, comenzando con una duración cercana a la más rápida +(o más breve) duración de la pieza. Las duraciones de referencia más +pequeñas aplican un espaciado más suelto; las duraciones de referencia +más largas aplican un espaciado más apretado. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 8) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 16) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 32) + } + } +} +@end lilypond + +Observe que una duración de referencia demasiado grande (como la +corchea, en el ejemplo de arriba) produce un espaciado excesivamente +apretado y puede ser causa de colisiones entre las cabezas de nota. +Observe también que la notación proporcional en general ocupa más +espacio horizontal que el espaciado clásico. El espaciado +proporcional aporta claridad rítmica a expensas del espacio +horizontal. + +Ahora veremos cómo espaciar de forma óptima grupos de valoración +especial que se superponen. + +Empezamos por examinar qué le ocurre a nuestro ejemplo original, con +espaciado clásico, cuando añadimos un segundo pentagrama con un tipo +diferente de grupo especial. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> +} +@end lilypond + +El espaciado es defectuoso porque las notas regularmente espaciadas +del pentagrama inferior no se amplían de manera uniforme. Los grabados +clásicos incluyen muy pocos tresillos complejos y así las reglas del +grabado clásico pueden generar este tipo de resultado. El +establecimiento de @code{proportionalNotationDuration} lo +soluciona. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + + +Pero si observamos con mucho cuidado podremos ver que las notas de la +segunda mitad del 9-illo están espaciadas de forma ligeramente más +ancha que las de la primera mitad del 9-illo. Para asegurar una +ampliación uniforme, activamos @code{uniform-stretching}, que es una +propiedad de @code{SpacingSpanner}. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +Nuestro ejemplo de dos pentagramas ahora está espaciado exactamente, +nuestras relaciones rítmicas son visualmente claras, y podemos incluir +una línea de tiempo graduada o un gráfico, si queremos. + +Observe que el paquete de notación proporcional de LilyPond espera que +todas las partituras proporcionales establezcan el atributo +@code{uniform-stretching} de @code{SpacingSpanner} al valor ##t. El +establecimiento de @code{proportionalNotationDuration} sin ajustar +también el atributo @code{uniform-stretching} de @code{SpacingSpanner} +al valor ##t causará, por ejemplo, que los desplazamientos +(@code{skips}) consuman una cantidad de espacio horizontal incorrecta. + +El @code{SpacingSpanner} es un grob abstracto que reside en el +contexto de @code{Score}. Como con nuestros ajustes de +@code{proportionalNotationDuration}, las sobreescrituras al +@code{SpacingSpanner} sólo pueden ocurrir en uno de estos tres lugares +dentro del archivo de entrada: en el bloque @code{\with}, en el bloque +@code{\context} o directamente dentro de la escritura de notas. + +De manera predeterminada, sólo hay un @code{SpacingSpanner} por +@code{Score}. Esto supone que, por omisión, @code{uniform-stretching} +está activado para la partitura completa o desactivado para la +partitura completa. Sin embargo, podemos sobreescribir este +comportamiento y activar distintas posibilidades de espaciado en +distintos lugares de la partitura. Lo hacemos con la instrucción +@code{\newSpacingSection}. Consulte @ref{Área de espaciado nueva} +para más información. + +A continuación examinamos los efectos del grabador +@code{Separating_line_group_engraver} y veremos por qué las partituras +proporcionales con frecuencia eliminan este grabador. El ejemplo +siguiente muestra que hay una pequeña cantidad de espacio +@qq{preliminar} justo antes de la primera nota de cada sistema. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff { + c'1 + \break + c'1 +} +@end lilypond + + +Esta cantidad de espacio preliminar es la misma ya sea después de +una indicación de compás, una armadura o una clave. El grabador +@code{Separating_line_group_engraver} es responsable de este espacio. +La eliminación de @code{Separating_line_group_engraver} reduce este +espacio a cero. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff \with { + \remove Separating_line_group_engraver +} { + c'1 + \break + c'1 +} +@end lilypond + +Los elementos no musicales como la indicación de compás, la armadura, +la clave y las alteraciones son problemáticos en notación +proporcional. Ninguno de estos elementos tiene duración rítmica. +Pero todos ellos consumen espacio horizontal. Las distintas +partituras proporcionales abordan este problema de distinta manera. + +Sería posible evitar los problemas de espaciado con las armaduras, +simplemente evitando tenerlas. Esta es una opción válida pues casi +todas las partituras proporcionales son música contemporánea. Lo +mismo puede valer para las indicaciones de compás, especialmente para +las partituras que incluyen una línea de tiempo graduada u otro +gráfico. Pero estas partituras son excepcionales y casi todas las +partituras proporcionales incluyen al menos unas pocas indicaciones de +compás. Las claves y las alteraciones son aún más esenciales. + +Así pues ¿qué estrategias existen para el espaciado de los elementos +no musicales en un contexto proporcional? Una buena opción es la +propiedad @code{strict-note-spacing} de @code{SpacingSpanner}. +Compare las dos partituras siguientes: + +@lilypond[quote,verbatim,ragged-right] +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} + +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \override Score.SpacingSpanner #'strict-note-spacing = ##t + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} +@end lilypond + +Las dos partituras son proporcionales, pero el espaciado de la +primera es muy suelto a causa del cambio de clave. Sin embargo, el +espaciado de la segunda partitura se mantiene estricto, porque +@code{strict-note-spacing} está activado. La activación de +@code{strict-note-spacing} hace que el ancho de las indicaciones de +compás, armaduras, cambios de clave y alteraciones no tomen parte en +el algoritmo de espaciado. + +Además de los ajustes dados aquí, hay otros que aparecen con +frecuencia en las partituras proporcionales. Entre ellos están: + +@itemize +@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} +@item @code{tupletFullLength = ##t} +@item @code{\override Beam #'breakable = ##t} +@item @code{\override Glissando #'breakable = ##t} +@item @code{\override TextSpanner #'breakable = ##t} +@item @code{\remove Forbid_line_break_engraver in the Voice context} +@end itemize + +Estos ajustes dan a las notas de adorno un espaciado estricto, +extienden los corchetes de grupo especial para que marquen tanto los +puntos de comienzo como de final, y permiten que los elementos de +extensión se dividan entre los sistemas y las páginas. Consulte las +partes respectivas del manual para ver estos ajustes relacionados. + + +@seealso +Referencia de la notación: +@ref{Área de espaciado nueva}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@node Encajar la música en menos páginas +@section Encajar la música en menos páginas +@translationof Fitting music onto fewer pages + +En ocasiones, podemos terminar con uno o dos pentagramas en una +segunda página (o tercera, o cuarta...). Es fastidioso, especialmente +cuando vemos que las páginas anteriores parecen tener espacio de +sobra. + +Al investigar los problemas de disposición, una herramienta de valor +incalculable es @code{annotate-spacing}. Esta instrucción imprime los +valores de un cierto número de variables de espaciado; para ver más +detalles consulte la sección siguiente, @ref{Mostrar el espaciado}. + +@menu +* Mostrar el espaciado:: +* Cambiar el espaciado:: +@end menu + + +@node Mostrar el espaciado +@subsection Mostrar el espaciado +@translationof Displaying spacing + +@cindex espaciado, presentación del +@funindex annotate-spacing + +Para presentar gráficamente las dimensiones de las variables de +disposición vertical que pueden verse alteradas por el formato de la +página, establezca @code{annotate-spacing} en el bloque @code{\paper}: + +@c need to have \book{} otherwise we get the separate systems. -hwn +@lilypond[verbatim,quote] +#(set-default-paper-size "a6" 'landscape) +\book { + \score { { c4 } } + \paper { annotate-spacing = ##t } +} +@end lilypond + + +@noindent +Todas las dimensiones de disposición se muestran en espacios de +pentagrama, independientemente de las unidades especificadas en los +bloques @code{\paper} o @code{\layout}. En el ejemplo anterior, +@code{paper-height} tiene un valor de 59.75 @code{staff-spaces} +(espacios de pentagrama), y el @code{staff-size} (tamaño del +pentagrama) es de 20 puntos, el valor predeterminado. Observe que: + +@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm} + +@item 1 punto +@tab = (25.4/72.27) mm + +@item 1 staff-space +@tab = (@code{staff-size})/4 pts +@item +@tab = (@code{staff-size})/4 * (25.4/72.27) mm + +@end multitable + +@noindent +En este caso, un @code{staff-space} equivale aproximadamente a +1.757mm. Así, la medida @code{paper-height} de 59.75 +@code{staff-spaces} equivale a 105 milímetros, la altura de una hoja +@code{a6} en orientación apaisada. Las parejas (@var{a},@var{b}) son +intervalos, donde @var{a} es el límite inferior y @var{b} es el límite +superior del intervalo. + + +@seealso +Referencia de la notación: +@ref{Establecer el tamaño del pentagrama}. + +Fragmentos de código: +@rlsr{Spacing}. + + +@node Cambiar el espaciado +@subsection Cambiar el espaciado +@translationof Changing spacing + +La salida de @code{annotate-spacing} revela las dimensiones verticales +con gran detalle. Para ver más detalles acerca de la modificación de +los márgenes y otras variables de diseño de la página, consulte +@ref{Disposición de la página}. + +Aparte de los márgenes, hay algunas otras opciones para ahorrar espacio: + +@itemize +@item +Forzar los sistemas para que se junten lo más posible entre sí (de +forma que quepan la mayor cantidad de ellos en la página) y al mismo +tiempo estén espaciados de forma que no exista un espacio vacío en la +parte baja del papel. + +@example +\paper @{ + system-system-spacing = #'((basic-distance . 0.1) (padding . 0)) + ragged-last-bottom = ##f + ragged-bottom = ##f +@} +@end example + +@item +Forzar el número de sistemas. Puede ser de utilidad de dos formas. +Si tan sólo se establece un valor, incluso el mismo valor que el +número de sistemas que se están trazando de forma predeterminada, ello +ocasionará a veces que se traten de introducir más sistemas en cada +página, pues en este caso se omite un paso en que se produce una +estimación, dando así un encaje mejor en cada página. Asimismo, el +forzar una reducción neta en el número de sistemas puede producir el +ahorro de una página adicional. Por ejemplo, si la disposición +predeterminada tiene 11 sistemas, la asignación siguiente fuerza una +disposición con 10 sistemas. + +@example +\paper @{ + system-count = #10 +@} +@end example + +@item +Evitar (o reducir en número) los objetos que aumentan el tamaño +vertical de un sistema. Por ejemplo, las repeticiones de primera y +segunda vez (o repeticiones con finales alternativos) necesitan +espacio adicional. Si estas repeticiones se reparten a lo largo de +dos sistemas, ocupan más espacio que un sistema con las casillas de +repetición y otro sistema sin ellas. Por ejemplo, las indicaciones +dinámicas que se @q{salen} de un sistema se pueden acercar al +pentagrama: + +@lilypond[verbatim,quote,relative=1] +e4 c g\f c +e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c +@end lilypond + +@item +Alterar el espaciado horizontal por medio de @code{SpacingSpanner}. +Para ver más detalles, consulte @ref{Cambiar el espaciado horizontal}. +El ejemplo siguiente ilustra el espaciado predeterminado: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } +} +@end lilypond + +@noindent +El ejemplo siguiente modifica @code{common-shortest-duration} de un +valor de @code{1/4} (negra) a @code{1/2} (blanca). La negra es la +nota más común y la más breve del ejemplo, por lo que al agrandar esta +duración se produce un efecto de @q{apretujamiento}: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'common-shortest-duration = #(ly:make-moment 1 2) + } + } +} +@end lilypond + +@noindent +La propiedad @code{common-shortest-duration} no se puede modificar de +manera dinámica, por lo que se debe situar siempre dentro de un +bloque @code{\context} de forma que se aplique a la partitura +completa. + +@end itemize + + +@seealso +Referencia de la notación: +@ref{Disposición de la página}, +@ref{Cambiar el espaciado horizontal}. + +Fragmentos de código: +@rlsr{Spacing}. diff --git a/Documentation/es/notation/specialist.itely b/Documentation/es/notation/specialist.itely new file mode 100644 index 0000000000..3d6c6be0ee --- /dev/null +++ b/Documentation/es/notation/specialist.itely @@ -0,0 +1,41 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097 + + 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 Notación especializada +@chapter Notación especializada +@translationof Specialist notation + +Este capítulo explica cómo crear notación musical para instrumentos de +un tipo específico o dentro de estilos específicos. + +@menu +* Música vocal:: +* Teclados y otros instrumentos de varios pentagramas:: +* Instrumentos de cuerda sin trastes:: +* Instrumentos de cuerda con trastes:: +* Percusión:: +* Instrumentos de viento:: +* Notación de acordes:: +* Música contemporánea:: +* Notación antigua:: +* Músicas del mundo:: +@end menu + +@include notation/vocal.itely +@include notation/keyboards.itely +@include notation/unfretted-strings.itely +@include notation/fretted-strings.itely +@include notation/percussion.itely +@include notation/wind.itely +@include notation/chords.itely +@include notation/contemporary.itely +@include notation/ancient.itely +@include notation/world.itely diff --git a/Documentation/es/notation/staff.itely b/Documentation/es/notation/staff.itely new file mode 100644 index 0000000000..72b5518bc0 --- /dev/null +++ b/Documentation/es/notation/staff.itely @@ -0,0 +1,1453 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 502106f74b602ee5c9aeb9787338350df1c863f0 + + 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 Notación de los pentagramas +@section Notación de los pentagramas +@translationof Staff notation + +@lilypondfile[quote]{staff-headword.ly} + +Esta sección explica cómo influir sobre la apariencia de los +pentagramas, cómo imprimir partituras con más de un pentagrama y cómo +añadir indicaciones de tempo y notas guía a los pentagramas. + +@menu +* Impresión de los pentagramas:: +* Modificación de pentagramas sueltos:: +* Escritura de las particellas:: +@end menu + + +@node Impresión de los pentagramas +@subsection Impresión de los pentagramas +@translationof Displaying staves + +Esta sección describe los distintos métodos de creación de pentagramas +y grupos de ellos. + +@menu +* Crear instancias de pentagramas nuevos:: +* Agrupar pentagramas:: +* Grupos de pentagramas anidados:: +* Separación de sistemas:: +@end menu + + +@node Crear instancias de pentagramas nuevos +@unnumberedsubsubsec Crear instancias de pentagramas nuevos +@translationof Instantiating new staves + +@cindex nuevo pentagrama +@cindex pauta +@cindex pentagrama, iniciar +@cindex pentagrama, instanciar +@cindex pentagrama, nuevo +@cindex pentagrama de percusión +@cindex pentagrama único +@cindex percusión, pauta de +@cindex pauta de percusión +@cindex gregoriano, canto, pauta de transcripción de +@cindex rítmica, pauta +@cindex tablatura, pauta de + +@funindex \drummode +@funindex drummode +@funindex DrumStaff +@funindex RhythmicStaff +@funindex TabStaff +@funindex MensuralStaff +@funindex VaticanaStaff +@funindex GregorianTranscriptionStaff + +Las @notation{pautas} y los @notation{pentagramas} o pautas de cinco +líneas se crean con las instrucciones @code{\new} o @code{\context}. +Para ver más detalles, consulte @ref{Crear contextos}. + +El contexto básico de pentagrama es @code{Staff}: + +@lilypond[verbatim,quote,relative=2] +\new Staff { c4 d e f } +@end lilypond + +El contexto @code{DrumStaff} crea una pauta de cinco líneas preparada +para un conjunto de batería típico. Cada instrumento se presenta con +un símbolo distinto. Los instrumentos se escriben en el modo de +percusión que sigue a una instrucción @code{\drummode}, con cada +instrumento identificado por un nombre. Para ver más detalles, +consulte @ref{Pautas de percusión}. + +@lilypond[verbatim,quote] +\new DrumStaff { + \drummode { cymc hh ss tomh } +} +@end lilypond + +@code{RhythmicStaff} crea una pauta de una sola línea que sólo muestra +las duraciones de la entrada. Se preservan las duraciones reales. +Para ver más detalles, consulte @ref{Mostrar los ritmos de la melodía}. + +@lilypond[verbatim,quote,relative=2] +\new RhythmicStaff { c4 d e f } +@end lilypond + +@code{TabStaff} crea una tablatura con seis cuerdas en la afinación +estándar de guitarra. Para ver más detalles, consulte @ref{Tablaturas predeterminadas}. + +@lilypond[verbatim,quote,relative=2] +\new TabStaff { c4 d e f } +@end lilypond + +Existen dos contextos de pauta específicos para la notación de música +antigua: @code{MensuralStaff} y @code{VaticanaStaff}. Se describen en +@ref{Contextos predefinidos}. + +@code{GregorianTranscriptionStaff} crea una pauta para la notación +moderna de canto gregoriano. No muestra líneas divisorias. + +@lilypond[verbatim,quote,relative=2] +\new GregorianTranscriptionStaff { c4 d e f e d } +@end lilypond + +Se pueden definir contextos nuevos de pentagrama único. Para ver más +detalles, consulte @ref{Definir contextos nuevos}. + + +@seealso +Glosario musical: +@rglos{staff}, +@rglos{staves}. + +Referencia de la notación: +@ref{Crear contextos}, +@ref{Pautas de percusión}, +@ref{Mostrar los ritmos de la melodía}, +@ref{Tablaturas predeterminadas}, +@ref{Contextos predefinidos}, +@ref{El símbolo del pentagrama}, +@ref{Contextos del canto gregoriano}, +@ref{Contextos de la música mensural}, +@ref{Definir contextos nuevos}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{Staff}, +@rinternals{DrumStaff}, +@rinternals{GregorianTranscriptionStaff}, +@rinternals{RhythmicStaff}, +@rinternals{TabStaff}, +@rinternals{MensuralStaff}, +@rinternals{VaticanaStaff}, +@rinternals{StaffSymbol}. + + +@node Agrupar pentagramas +@unnumberedsubsubsec Agrupar pentagramas +@translationof Grouping staves + +@cindex comienzo del sistema +@cindex pentagramas, varios +@cindex corchete vertical +@cindex llave vertical +@cindex pentagramas de piano +@cindex pentagramas, grupo de +@cindex pauta de coro +@cindex sistema, delimitador de comienzo +@cindex coro, sistema de +@cindex piano, sistema de +@cindex piano, pentagramas de +@cindex sistema de piano +@cindex sistema de coro +@cindex sistema + +Existen varios contextos para agrupar pentagramas individuales +formando sistemas. Cada contexto de agrupación establece el estilo +del delimitador de comienzo del sistema y el comportamiento de las +barras de compás. + +Si no se especifica ningún contexto, se usan las propiedades +predeterminadas: el grupo comienza con una línea vertical y las barras +de compás no están conectadas. + +@lilypond[verbatim,quote,relative=2] +<< + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +En el contexto @code{StaffGroup}, el grupo se inicia con un corchete y +las barras de compás se dibujan atravesando todos los pentagramas. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +En un @code{ChoirStaff} (sistema de coro), el grupo se inicia con un +corchete, pero las barras de compás no están conectadas. + +@lilypond[verbatim,quote,relative=2] +\new ChoirStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +En un @code{GrandStaff} (sistema de piano), el grupo se inicia con una +llave y las barras de compás se conectan entre los pentagramas. + +@lilypond[verbatim,quote,relative=2] +\new GrandStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +El @code{PianoStaff} (sistema de piano) es idéntico a +@code{GrandStaff}, excepto que contempla directamente la impresión del +nombre del instrumento. Para ver más detalles, consulte +@ref{Nombres de instrumentos}. + +@lilypond[verbatim,quote,relative=2] +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Cada contexto de grupo de pentagramas fija la propiedad del +delimitador de inicio @code{systemStartDelimiter} a uno de los +siguientes valores: @code{SystemStartBar} (línea), +@code{SystemStartBrace} (llave) o @code{SystemStartBracket} +(corchete). También está disponible un cuarto delimitador, +@code{SystemStartSquare} (corchete en ángulo recto), pero se debe +especificar explícitamente. + +Se pueden definir contextos nuevos de grupo de pentagramas. Para ver +más detalles, consulte @ref{Definir contextos nuevos}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{use-square-bracket-at-the-start-of-a-staff-group.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{display-bracket-with-only-one-staff-in-a-system.ly} + +@cindex diseño «mensurstriche» +@cindex mensurstriche, diseño +@cindex renacimiento, música del +@cindex transcripción de música mensural +@cindex mensural, música, transcripción de + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + +@seealso +Glosario musical: +@rglos{brace}, +@rglos{bracket}, +@rglos{grand staff}. + +Referencia de la notación: +@ref{Nombres de instrumentos}, +@ref{Definir contextos nuevos}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{Staff}, +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + +@knownissues +@code{PianoStaff} no acepta @code{ChordNames} de forma predeterminada. + + +@node Grupos de pentagramas anidados +@unnumberedsubsubsec Grupos de pentagramas anidados +@translationof Nested staff groups + +@cindex pentagramas anidados +@cindex anidamiento de pentagramas +@cindex sistema, delimitadores de inicio anidados +@cindex anidados, corchetes de pentagrama +@cindex corchetes anidados +@cindex llaves, anidado de + +Los contextos de grupos de pentagramas se pueden anidar hasta una +profundidad arbitraria. En este caso, cada contexto descendiente crea +un corchete nuevo adyacente al corchete de su grupo padre. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c2 c | c2 c } + \new StaffGroup << + \new Staff { g2 g | g2 g } + \new StaffGroup \with { + systemStartDelimiter = #'SystemStartSquare + } + << + \new Staff { e2 e | e2 e } + \new Staff { c2 c | c2 c } + >> + >> +>> +@end lilypond + +Se pueden definir nuevos contextos de grupos de pentagramas anidados. +Para ver más detalles, consulte @ref{Definir contextos nuevos}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{nesting-staves.ly} + + +@seealso +Referencia de la notación: +@ref{Agrupar pentagramas}, +@ref{Nombres de instrumentos}, +@ref{Definir contextos nuevos}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + +@node Separación de sistemas +@unnumberedsubsubsec Separación de sistemas +@translationof Separating systems + +@cindex separación de sistemas, marca de + +Si el número de sistemas por p´agina varía de una página a otra, es +costumbre separar los sistemas colocando una marca separadora entre +ellos. De forma predeterminada, el separador de sistemas es nulo, +pero se puede activar con una opción de @code{\paper}. + +@c \book is required here to display the system separator +@c ragged-right is required as there are two systems +@lilypond[verbatim,quote,ragged-right] +\book { + \score { + \new StaffGroup << + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + >> + } + \paper { + system-separator-markup = \slashSeparator + % following commands are needed only to format this documentation + paper-width = 100\mm + paper-height = 100\mm + tagline = ##f + } +} +@end lilypond + +@seealso +Referencia de la notación: +@ref{Disposición de la página}. + +Fragmentos de código: +@rlsr{Notación de los pentagramas}. + +@node Modificación de pentagramas sueltos +@subsection Modificación de pentagramas sueltos +@translationof Modifying single staves + +Esta sección explica cómo cambiar los atributos específicos de un +pentagrama: por ejemplo, cambiar el número de líneas o el tamaño de la +pauta. También se describen los métodos para comenzar y terminar los +pentagramas, y establecer secciones de ossia. + +@menu +* El símbolo del pentagrama:: +* Pentagramas de Ossia:: +* Ocultar pentagramas:: +@end menu + + +@node El símbolo del pentagrama +@unnumberedsubsubsec El símbolo del pentagrama +@translationof Staff symbol + +@cindex ajuste del símbolo del pentagrama +@cindex dibujo del símbolo del pentagrama +@cindex pentagrama, ajuste del símbolo del +@cindex símbolo del pentagrama, dibujo del +@cindex detener líneas de pentagrama +@cindex iniciar líneas de pentagrama +@cindex pentagrama, número de líneas +@cindex pentagrama, grosor de las líneas +@cindex líneas, número de, de la pauta +@cindex grosor de líneas de pauta +@cindex adicionales, establecer líneas +@cindex ajuste de líneas adicionales +@cindex espaciado de líneas adicionales +@cindex número de líneas de pauta + +las líneas de un pentagrama pertenecen al grob @code{StaffSymbol}. Se +pueden modificar las propiedades de @code{StaffSymbol} para modificar +la apariencia de una pauta, pero han de modificarse antes de que se +produzca la creación de la misma. + +Se puede cambiar el número de líneas de la pauta. La posición de la +clave y del Do central pueden requerir una modificación para mantener +la correspondencia con la nueva pauta. Para ver una explicación, +consulte la sección de fragmentos de código en @ref{Clave}. + +@lilypond[verbatim,quote,relative=2] +\new Staff \with { + \override StaffSymbol #'line-count = #3 +} +{ d4 d d d } +@end lilypond + +Se puede modificar el grosor de las líneas de la pauta. El grosor de +las líneas adicionales y las plicas también resultan afectados, pues +dependen del grosor de las líneas de la pauta. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'thickness = #3 +} +{ e4 d c b } +@end lilypond + +El grosor de las líneas adicionales se puede fijar de forma +independiente al de las líneas de la pauta. En el ejemplo, los dos +números son factores que multiplican el grosor de las líneas del +pentagrama y su espaciado. Las dos contribuciones se suman para dar +el grosor de las líneas adicionales. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) +} +{ e4 d c b } +@end lilypond + +Se puede cambiar la distancia entre las líneas de la pauta. Este +ajuste afecta también al espaciado de las líneas adicionales. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'staff-space = #1.5 +} +{ a4 b c d } +@end lilypond + +Hay más detalles sobre las propiedades de @code{StaffSymbol} en +@rinternals{staff-symbol-interface}. + +@cindex detener el pentagrama +@cindex iniciar el pentagrama +@cindex pentagrama, iniciar +@cindex pentagrama, detener + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +Se pueden colocar modificaciones a las propiedades de una pauta en el +medio de una partitura, entre @code{\stopStaff} (detener pauta) y +@code{\startStaff} (iniciar pauta): + +@lilypond[verbatim,quote,relative=2] +c2 c +\stopStaff +\override Staff.StaffSymbol #'line-count = #2 +\startStaff +b2 b +\stopStaff +\revert Staff.StaffSymbol #'line-count +\startStaff +a2 a +@end lilypond + +@noindent +En general, se pueden usar @code{\startStaff} y @code{\stopStaff} para +detener o iniciar un pentagrama en mitad de una partitura. + +@lilypond[verbatim,quote,relative=2] +c4 b a2 +\stopStaff +b4 c d2 +\startStaff +e4 d c2 +@end lilypond + + +@predefined +@code{\startStaff}, +@code{\stopStaff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-some-staff-lines-thicker-than-the-others.ly} + + +@seealso +Glosario musical: +@rglos{line}, +@rglos{ledger line}, +@rglos{staff}. + +Referencia de la notación: +@ref{Clave}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{StaffSymbol}, +@rinternals{staff-symbol-interface}. + + +@node Pentagramas de Ossia +@unnumberedsubsubsec Pentagramas de Ossia +@translationof Ossia staves + +@cindex pentagrama a la francesa +@cindex ossia +@cindex francesa, pentagramas a la +@cindex pauta, escalado de +@cindex escalado de pentagramas + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +Los pentagramas @notation{Ossia} se pueden preparar mediante la +creación de un pentagrama simultáneo nuevo en la posición adecuada: + +@lilypond[verbatim,quote] +\new Staff \relative c'' { + c4 b d c + << + { c4 b d c } + \new Staff { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +@noindent +Sin embargo, el ejemplo anterior no es lo que normalmente se desea. +Para crear pentagramas de ossia que estén encima del pentagrama +original, que no tengan compás ni clave, y que tengan un tamaño menor +de tipografía se deben usar varios trucos. El Manual de aprendizaje +describe una técnica específica para llegar a este objetivo, empezando +por @rlearning{Anidado de expresiones musicales}. + +El ejemplo siguiente utiliza la propiedad @code{alignAboveContext} +para alinear el pentagrama de ossia. Este método es muy conveniente +cuando se necesitan sólo algunos pentagramas de ossia. + +@lilypond[verbatim,quote] +\new Staff = main \relative c'' { + c4 b d c + << + { c4 b d c } + + \new Staff \with { + \remove "Time_signature_engraver" + alignAboveContext = #"main" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + firstClef = ##f + } + { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +Si se requieren muchos pentagramas de ossia aislados, puede ser más +conveniente la creación de un contexto @code{Staff} vacío con un +@emph{identificador de contexto} específico; después se pueden crear +los pentagramas de ossia @emph{llamando} a este contexto y usando +@code{\startStaff} y @code{\stopStaff} en los puntos deseados. Las +ventajas de este método son más patentes si la pieza es más larga que +en ejemplo siguiente. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + { \stopStaff s1*6 } + + \new Staff \relative c' { + c4 b c2 + << + { e4 f e2 } + \context Staff = ossia { + \startStaff e4 g8 f e2 \stopStaff + } + >> + g4 a g2 \break + c4 b c2 + << + { g4 a g2 } + \context Staff = ossia { + \startStaff g4 e8 f g2 \stopStaff + } + >> + e4 d c2 + } +>> +@end lilypond + +Como alternativa, se puede usar la instrucción +@code{\RemoveEmptyStaves} para crear pentagramas de ossia. Este +método es muy conveniente cuando los pentagramas de ossia aparecen +inmediatamente después de un salto de línea. Para ver más información +sobre @code{\RemoveEmptyStaves}, consulte @ref{Ocultar pentagramas}. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } \relative c'' { + R1*3 + c4 e8 d c2 + } + \new Staff \relative c' { + c4 b c2 + e4 f e2 + g4 a g2 \break + c4 b c2 + g4 a g2 + e4 d c2 + } +>> + +\layout { + \context { + \Staff \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligning-ossias-and-lyrics.ly} + + +@seealso +Glosario musical: +@rglos{ossia}, +@rglos{staff}, +@rglos{Frenched staff}. + +Manual de aprendizaje: +@rlearning{Anidado de expresiones musicales}, +@rlearning{Tamaño de los objetos}, +@rlearning{Longitud y grosor de los objetos}. + +Referencia de la notación: +@ref{Ocultar pentagramas}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{StaffSymbol}. + + +@node Ocultar pentagramas +@unnumberedsubsubsec Ocultar pentagramas +@translationof Hiding staves + +@cindex francesa, partituras a la +@cindex ocultación de pentagramas +@cindex francesa, pentagrama a la +@cindex pentagrama, ocultación de +@cindex pentagrama vacío +@cindex ocultar pentagramas +@cindex vacío, pentagrama + +@funindex \RemoveEmptyStaves +@funindex RemoveEmptyStaves +@funindex Staff_symbol_engraver +@funindex \stopStaff +@funindex stopStaff + +Se pueden ocultar las líneas del pentagrama quitando el grabador +@code{Staff_symbol_engraver} del contexto de @code{Staff}. Como +alternativa se puede utilizar la instrucción @code{\stopStaff}. + +@lilypond[verbatim,quote] +\new Staff \with { + \remove "Staff_symbol_engraver" +} +\relative c''' { a8 f e16 d c b a2 } +@end lilypond + +Se pueden ocultar los pentagramas que están vacíos mediante la +instrucción @code{\RemoveEmptyStaves} dentro del bloque @code{\layout} +para el contexto @code{\Staff}. En las partituras orquestales, este +estilo se conoce como @q{partitura a la francesa}. De forma +predeterminada, esta instrucción oculta y elimina todos los +pentagramas vacíos de la partitura excepto los del primer sistema. + +@warning{Un pentagrama se considera vacío cuando contiene solamente +silencios, silencios multicompás, desplazamientos, silencios de +separación o una combinación de estos elementos.} + +@lilypond[verbatim,quote,ragged-right] +\layout { + \context { + \Staff \RemoveEmptyStaves + } +} + +\relative c' << + \new Staff { + e4 f g a \break + b1 \break + a4 b c2 + } + \new Staff { + c,4 d e f \break + R1 \break + f4 g c,2 + } +>> +@end lilypond + +@cindex ossia + +@noindent +También se puede usar @code{\RemoveEmptyStaves} en el contexto +@code{\Staff} para crear secciones de ossia para un pentagrama. Para +ver más detalles, consulte @ref{Pentagramas de Ossia}. + +@cindex ocultar pentagramas de música antigua +@cindex ocultar pentagramas rítmicos + +@funindex \RemoveEmptyStaves +@funindex RemoveEmptyStaves + +Se puede usar la instrucción @code{\RemoveEmptyStaves} para ocultar +los pentagramas vacíos en contextos de música antigua como +@code{\VaticanaStaff}. De forma similar, se puede usar +@code{\RhythmicStaff \RemoveEmptyStaves} para ocultar los contextos +@code{RhythmicStaff} vacíos. + + +@predefined +@code{\Staff \RemoveEmptyStaves}, +@code{\VaticanaStaff \RemoveEmptyStaves}, +@code{\RhythmicStaff \RemoveEmptyStaves}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{removing-the-first-empty-line.ly} + + +@seealso +Glosario musical: +@rglos{Frenched staff}. + +Manual de aprendizaje: +@rlearning{Visibilidad y color de los objetos}. + +Referencia de la notación: +@ref{Cambiar los valores por omisión de los contextos}, +@ref{El símbolo del pentagrama}, +@ref{Pentagramas de Ossia}, +@ref{Notas ocultas}, +@ref{Silencios invisibles}, +@ref{Visibilidad de los objetos}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{ChordNames}, +@rinternals{FiguredBass}, +@rinternals{Lyrics}, +@rinternals{Staff}, +@rinternals{VerticalAxisGroup}, +@rinternals{Staff_symbol_engraver}. + + +@knownissues + +La eliminación del grabador @code{Staff_symbol_engraver} también +oculta las barras de compás. Si se fuerza la visibilidad de la barra +de compás, pueden ocurrir errores de formato visual. En este caso, +utilice las siguientes sobreescrituras de valores en vez de quitar el +grabador: + +@example +\override StaffSymbol #'stencil = ##f +\override NoteHead #'no-ledgers = ##t +@end example + +Para ver los fallos y problemas conocidos, así como las advertencias +asociadas con @code{\RemoveEmptyStaves}, consulte +@ref{Cambiar los valores por omisión de los contextos}. + +@node Escritura de las particellas +@subsection Escritura de las particellas +@translationof Writing parts + +Esta sección explica cómo insertar indicaciones de tempo y nombres de +instrumento en una partitura. También se describen métodos para citar +otras voces y dar formato a las notas guía. + +@menu +* Nombres de instrumentos:: +* Citar otras voces:: +* Formateo de las notas guía:: +@end menu + + +@node Nombres de instrumentos +@unnumberedsubsubsec Nombres de instrumentos +@translationof Instrument names + +@cindex instrumento, nombre del +@cindex instrumento, nombre abreviado + +Se pueden imprimir los nombres de los instrumentos en el lado +izquierdo de los pentagramas dentro de los contextos +@code{Staff}, @code{PianoStaff}, @code{StaffGroup}, @code{GrandStaff} +y @code{ChoirStaff}. El valor de @code{instrumentName} se usa para el +primer pentagrama, y el valor de @code{shortInstrumentName} se usa +para todos los pentagramas siguientes. + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"Violin " +\set Staff.shortInstrumentName = #"Vln " +c4.. g'16 c4.. g'16 +\break +c1 +@end lilypond + +También podemos usar el modo de marcado para construir nombres de +instrumento más complicados: + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = \markup { + \column { "Clarinetti" + \line { "in B" \smaller \flat } } } +c4 c,16 d e f g2 +@end lilypond + +@cindex instrument names, centering + +Cuando se agrupan dos o más contextos de pentagrama, los nombres de +instrumento y los nombres cortos aparecen centrados de forma +predeterminada. Para centrar nombres de instrumento de varias líneas, +se debe utilizar @code{\center-column}: + +@lilypond[verbatim,quote,indent=1.5\cm,relative=2] +<< + \new Staff { + \set Staff.instrumentName = #"Flute" + f2 g4 f + } + \new Staff { + \set Staff.instrumentName = \markup \center-column { + Clarinet + \line { "in B" \smaller \flat } + } + c4 b c2 + } +>> +@end lilypond + +@funindex indent +@funindex short-indent + +Sin embargo, si los nombres de instrumento son más largos, éstos no se +centran para un grupo de pentagramas a no ser que se aumenten los +valores del sangrado, @code{indent}, y del sangrado corto, +@code{short-indent}. Para ver más detalles sobre estos ajustes, +consulte @ref{Variables de \paper para desplazamientos y sangrados}. + +@lilypond[verbatim,quote,ragged-right] +\layout { + indent = 3.0\cm + short-indent = 1.5\cm +} + +\relative c'' << + \new Staff { + \set Staff.instrumentName = #"Alto Flute in G" + \set Staff.shortInstrumentName = #"Fl." + f2 g4 f \break + g4 f g2 + } + \new Staff { + \set Staff.instrumentName = #"Clarinet" + \set Staff.shortInstrumentName = #"Clar." + c,4 b c2 \break + c2 b4 c + } +>> +@end lilypond + +@cindex nombres de instrumento, añadir a otros contextos + +Para añadir nombres de instrumento a otros contextos (como +@code{ChordNames} o @code{FiguredBass}), debemos +añadir el grabador @code{Instrument_name_engraver} a dicho +contexto. Para ver más detalles, consulte @ref{Modificar los complementos (plug-ins) de contexto}. + +@cindex nombres de instrumento, cambiar + +Los nombres de instrumento se pueden cambiar en mitad de una pieza; +sin embargo, recuerde que el @code{instrumentName} no se imprime en +mitad de la pieza, ya que sólo aparece en el primer pentagrama: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"First" +\set Staff.shortInstrumentName = #"one" +c1 c c c \break +c1 c c c \break +\set Staff.instrumentName = #"Second" +\set Staff.shortInstrumentName = #"two" +c1 c c c \break +c1 c c c \break +@end lilypond + +@cindex instrumento, cambio de +@cindex cambio de instrumento + +@funindex \addInstrumentDefinition +@funindex addInstrumentDefinition +@funindex \instrumentSwitch +@funindex instrumentSwitch + +Si se necesita un @emph{cambio} de instrumento, se debe usar +@code{\addInstrumentDefinition} en combinación con +@code{\instrumentSwitch} para crear una lista detallada de los cambios +necesarios para el intercambio. La instrucción +@code{\addInstrumentDefinition} tiene dos argumentos: una cadena +identificativa, y una lista asociativa de propiedades de contexto y +los valores que el instrumento va a usar. Se debe situar en el ámbito +del nivel más alto. @code{\instrumentSwitch} se usa en la expresión +musical para declarar el cambio de instrumento: + +@lilypond[verbatim,quote,ragged-right] +\addInstrumentDefinition #"contrabassoon" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Cbsn.") + (clefGlyph . "clefs.F") + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(make-bold-markup "cbsn.")) + (midiInstrument . "bassoon")) + +\new Staff \with { + instrumentName = #"Bassoon" +} +\relative c' { + \clef tenor + \compressFullBarRests + c2 g' + R1*16 + \instrumentSwitch "contrabassoon" + c,,2 g \break + c,1 ~ | c1 +} +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Variables de \paper para desplazamientos y sangrados}, +@ref{Modificar los complementos (plug-ins) de contexto}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{InstrumentName}, +@rinternals{PianoStaff}, +@rinternals{Staff}. + + +@node Citar otras voces +@unnumberedsubsubsec Citar otras voces +@translationof Quoting other voices + +@cindex guía, voces +@cindex citar otras voces +@cindex fragmentos, citar +@cindex notas guía + +@funindex \addQuote +@funindex addQuote +@funindex \quoteDuring +@funindex quoteDuring +@funindex \transposition +@funindex transposition + +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. + +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 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. + +@lilypond[verbatim,quote] +fluteNotes = \relative c'' { + a4 gis g gis | b4^"quoted" r8 ais\p a4( f) +} + +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 + +Si la expresión musical que se usa para @code{\quoteDuring} contiene +cualquier cosa que no sea un silencio de separación o un silencio +multicompás, se produce una situación de polifonía, lo que no suele +ser deseable: + +@lilypond[verbatim,quote] +fluteNotes = \relative c'' { + a4 gis g gis | b4^"quoted" r8 ais\p a4( f) +} + +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 + +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] +clarinetNotes = \relative c'' { + \transposition bes + \key d \major + b4 ais a ais | cis4^"quoted" r8 bis\p b4( f) +} + +oboeNotes = \relative c'' { + c4 cis c b \quoteDuring #"clarinet" { s1 } +} + +\addQuote "clarinet" { \clarinetNotes } + + +\score { + << + \new Staff \with { instrumentName = "Clarinet" } \clarinetNotes + \new Staff \with { instrumentName = "Oboe" } \oboeNotes + >> +} +@end lilypond + +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}. + +@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 +Referencia de la notación: +@ref{Transposición de los instrumentos}, +@ref{Uso de etiquetas}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{Music classes}, +@rinternals{QuoteMusic}, +@rinternals{Voice}. + +Archivos de inicio: +@file{scm/define-event-classes.scm}. + + +@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 +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 +@translationof Formatting cue notes + +@cindex guía, formateo de las notas +@cindex notas guía +@cindex guía, notas +@cindex guía, notas, formato de +@cindex fragmentos +@cindex citar otras voces + +@funindex \cueDuring +@funindex cueDuring +@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: + +@example +\cueDuring #@var{nombre_de_la_parte} #@var{voz} @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. + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +@noindent +En el ejemplo anterior, el contexto @code{Voice} se tuvo que declarar +explícitamente, pues en caso contrario toda la expresión musical +habría pertenecido al contexto @code{CueVoice}. + +Es posible ajustar qué aspectos de la música se citan con +@code{\cueDuring} estableciendo el valor de la propiedad +@code{quotedCueEventTypes}. Su valor por omisión es +@code{#'(note-event rest-event tie-event beam-event +tuplet-span-event)}, lo que significa que solamente las notas, +silencios, ligaduras de unión, barras y grupos especiales se citan, +pero no las articulaciones, marcas dinámicas, elementos de marcado, +etc. + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event + beam-event tuplet-span-event + dynamic-event slur-event) + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +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. + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \relative c { + \clef bass + R1 + \clef treble + s1*0^\markup { \tiny "flute" } + \cueDuring #"flute" #UP { R1 } + \clef bass + g4. b8 d2 +} +\addQuote "flute" { \flute } +\new Staff { + \bassoon +} +@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}. + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \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" { \flute } + +\new Staff { + \bassoon +} +\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 + +Como @code{\quoteDuring}, @code{\cueDuring} tiene en cuenta las +transposiciones instrumentales. Las notas guía se producen en las +alturas en que se escribirían para el instrumento que recibe la cita, +para así producir las alturas de sonido del instrumento original. + +Para transportar las notas guía de forma diferente, use +@code{\transposedCueDuring}. Esta instrucción acepta un argumento +adicional para especificar (en modo absoluto) la altura impresa con +que queremos representar el sonido de un Do central de concierto. +Esto es útil para toma citas de un instrumento que está en un registro +completamente diferente. + +@lilypond[verbatim,quote] +piccolo = \relative c''' { + \clef "treble^8" + R1 + c8 c c e g2 + c4 g g2 +} +bassClarinet = \relative c' { + \key d \major + \transposition bes, + d4 r a r + \transposedCueDuring #"piccolo" #UP d { R1 } + d4 r a r +} + +\addQuote "piccolo" { \piccolo } + +<< + \new Staff \piccolo + \new Staff \bassClarinet +>> +@end lilypond + +@cindex notas más pequeñas +@cindex pequeñas, notas más + +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. + +@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 + + +@seealso +Referencia de la notación: +@ref{Transposición de los instrumentos}, +@ref{Nombres de instrumentos}, +@ref{Guías musicales}, +@ref{Uso de etiquetas}. + +Fragmentos de código: +@rlsr{Staff notation}. + +Referencia de funcionamiento interno: +@rinternals{CueVoice}, +@rinternals{Voice}. + + +@knownissues + +Pueden ocurrir colisiones con los silencios si se usa +@code{\cueDuring}, entre los contextos de @code{Voice} y de +@code{CueVoice}. diff --git a/Documentation/es/notation/text.itely b/Documentation/es/notation/text.itely new file mode 100644 index 0000000000..64d3e4fceb --- /dev/null +++ b/Documentation/es/notation/text.itely @@ -0,0 +1,1608 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 53db923e715126eb9463220526b4838fbfd3dad4 + + 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 Texto +@section Texto +@translationof Text + +@lilypondfile[quote]{text-headword.ly} + +Esta sección explica cómo incluir texto (con diversos estilos de +formateo) en las partituras. + +@noindent +Ciertos elementos de texto de los que no nos ocupamos aquí se tratan +en otras secciones específicas: @ref{Música vocal}, @ref{Títulos y +cabeceras}. + +@menu +* Escritura del texto:: +* Formatear el texto:: +* Tipografías:: +@end menu + +@node Escritura del texto +@subsection Escritura del texto +@translationof Writing text + +Esta sección presenta las distintas formas de añadir texto a una +partitura. + +@cindex texto, en otros idiomas +@warning{Para escribir texto con caracteres acentuados y especiales +(como los de idiomas distintos del inglés), sencillamente inserte los +caracteres directamente en el archivo de LilyPond. El archivo se debe +guardar como UTF-8. Para ver más información, consulte +@ref{Codificación del texto}.} + + +@menu +* Guiones de texto:: +* Extensiones de texto:: +* Indicaciones de texto:: +* Texto separado:: +@end menu + + +@node Guiones de texto +@unnumberedsubsubsec Guiones de texto +@translationof Text scripts + +@cindex texto, inscripciones de +@cindex texto, elementos no vacíos de +@cindex no vacíos, textos +@cindex texto destacado + +Es posible añadir indicaciones de @qq{texto entre comillas} a una +partitura, como se muestra en el ejemplo siguiente. Estas +indicaciones se pueden colocar manualmente por encima o por debajo +del pentagrama, utilizando la sintaxis que se describe en +@ref{Dirección y posición}. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e a4-"scherz." f +@end lilypond + +Esta sintaxis es en realidad una abreviatura; se puede añadir +explícitamente a una nota un formateado de texto más complejo +utilizando un bloque @code{\markup}, como se describe bajo +@ref{Formatear el texto}. + +@lilypond[quote,verbatim,relative=2] +a8^\markup { \italic pizz. } g f e +a4_\markup { \tiny scherz. \bold molto } f +@end lilypond + +De forma predeterminada, las indicaciones de texto no afectan al +espaciado de las notas. Sin embargo, su anchura sí podría tenerse en +cuenta: en el siguiente ejemplo, la primera cadena de texto no afecta +al espaciado, pero la segunda sí afecta. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e +\textLengthOn +a4_"scherzando" f +@end lilypond + +Se pueden adjuntar articulaciones a las notas, además de inscripciones +de texto. Para ver más información, consulte @ref{Articulaciones y +ornamentos}. + +Para ver más información sobre el orden relativo de las inscripciones +de texto y las articulaciones, consulte @rlearning{Colocación de los +objetos}. + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}. +@endpredefined + + +@seealso +Manual de aprendizaje: +@rlearning{Colocación de los objetos}. + +Referencia de la notación: +@ref{Formatear el texto}, +@ref{Dirección y posición}, +@ref{Articulaciones y ornamentos}. + +Fragmentos de código: +@rlsr{Text}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}. + + +@cindex texto fuera del margen +@cindex margen, texto fuera del +@cindex texto, mantener dentro del margen +@cindex letra, mantener dentro del margen + + +@knownissues +La comprobación necesaria para asegurar que las inscripciones de texto +y la letra de las canciones se mantienen dentro de los márgenes, +requiere cálculos adicionales. En caso de que desee un proceso +ligeramente más rápido, puede utilizar + +@example +\override Score.PaperColumn #'keep-inside-line = ##f +@end example + + +@node Extensiones de texto +@unnumberedsubsubsec Extensiones de texto +@translationof Text spanners + +@cindex texto, elementos de extensión + +Ciertas indicaciones de ejecución, p.ej., @i{rallentando} o +@i{accelerando}, se escriben como texto y se extienden sobre muchos +compases mediante líneas de puntos. Estos objetos, que reciben el +nombre de @q{spanners} u objetos de extensión, se pueden crear desde +una nota hasta otra usando la siguiente sintaxis: + +@lilypond[verbatim,quote,relative=2] +\override TextSpanner #'(bound-details left text) = "rit." +b1\startTextSpan +e,\stopTextSpan +@end lilypond + +@cindex texto, formateado de los elementos de extensión +@cindex formato de los elementos de extensión de texto + +@noindent +La cadena de texto que imprimir se establece a través de propiedades +de objeto. De forma predeterminada se imprime en estilo cursiva, pero +se pueden conseguir distintos efectos de formato utilizando bloques +@code{\markup}, como se describe en @ref{Formatear el texto}. + +@lilypond[quote,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) = + \markup { \upright "rit." } +b1\startTextSpan c +e,\stopTextSpan +@end lilypond + +El estilo de la línea, así como la cadena de texto, se pueden definir +como una propiedad de objeto. Esta sintaxis se describe en +@ref{Estilos de línea}. + +@funindex \textSpannerUp +@funindex textSpannerUp +@funindex \textSpannerDown +@funindex textSpannerDown +@funindex \textSpannerNeutral +@funindex textSpannerNeutral + + +@predefined +@code{\textSpannerUp}, +@code{\textSpannerDown}, +@code{\textSpannerNeutral}. +@endpredefined + +@knownissues +LilyPond sólo puede manejar un objeto de extensión de texto por cada +voz. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-text-spanner-postfix.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-custom-text-spanner-postfix.ly} + +@seealso +Referencia de la notación: +@ref{Estilos de línea}, +@ref{Matices dinámicos}, +@ref{Formatear el texto}. + +Fragmentos de código: +@rlsr{Text}, +@rlsr{Expressive marks}. + +Referencia de funcionamiento interno: +@rinternals{TextSpanner}. + + +@node Indicaciones de texto +@unnumberedsubsubsec Indicaciones de texto +@translationof Text marks + +@cindex texto, indicaciones de +@cindex indicaciones de texto +@cindex texto sobre la barra de compás +@cindex coda sobre la línea divisoria +@cindex segno sobre la línea divisoria +@cindex calderón sobre la línea divisoria +@cindex líneas divisorias, símbolos sobre las + +@funindex \mark +@funindex mark +@funindex \markup +@funindex markup + +Se pueden añadir a la partitura varios elementos de texto con la +sintaxis que se describe en @ref{Llamadas de ensayo}: + +@c \mark needs to be placed on a separate line (it's not +@c attached to an object like \markup is). -vv + +@lilypond[verbatim,quote,relative=2] +c4 +\mark "Allegro" +c c c +@end lilypond + +Esta sintaxis posibilita colocar cualquier texto sobre la línea +divisoria; se pueden incorporar formatos más complejos para el texto +usando un bloque @code{\markup}, como está explicado en +@ref{Formatear el texto}: + +@lilypond[quote,verbatim,relative=1] +1 +\mark \markup { \italic { colla parte } } +2 +1 +@end lilypond + +@noindent +Esta sintaxis también permite imprimir símbolos especiales como +llamadas, segno o calderones, especificando el nombre del símbolo +correspondiente como se explica en +@ref{Notación musical dentro de elementos de marcado}: + +@lilypond[quote,verbatim,relative=2] +2 +\mark \markup { \musicglyph #"scripts.ufermata" } +1 +@end lilypond + +@noindent +Estos objetos se tipografían solamente sobre el pentagrama superior de +la partitura; dependiendo de si están especificados al final o en +medio de un compás, se colocarán sobre la línea divisoria o entre las +notas. Si se especifican en un salto de línea, las llamadas se +imprimen al principio de la línea siguiente. + +@lilypond[quote,verbatim,relative=2] +\mark "Allegro" +c1 c +\mark "assai" \break +c c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-at-the-end-of-a-line.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{aligning-marks-with-various-notation-objects.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-on-every-staff.ly} + + +@seealso +Referencia de la notación: +@ref{Llamadas de ensayo}, +@ref{Formatear el texto}, +@ref{Notación musical dentro de elementos de marcado}, +@ref{La tipografía Feta}. + +Fragmentos de código: +@rlsr{Text}. + +Referencia de funcionamiento interno: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + + +@node Texto separado +@unnumberedsubsubsec Texto separado +@translationof Separate text + +@cindex separado, texto +@cindex texto separado +@cindex independiente, texto +@cindex nivel superior, texto del +@cindex texto del nivel superior +@cindex texto independiente + +@funindex \markup +@funindex markup + +Un bloque @code{\markup} puede existir de forma independiente, fuera +de cualquier bloque @code{\score}, como una @qq{expresión de nivel +superior}. Esta sintaxis se describe en @ref{Estructura del archivo}. + +@lilypond[verbatim,quote] +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +@end lilypond + +@noindent +Esto hace posible imprimir texto separado de la música, lo que es +especialmente útil cuando el archivo de entrada contiene varias +piezas, tal y como se describe en @ref{Varias partituras en un libro}. + +@lilypond[quote,verbatim] +\score { + c'1 +} +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +\score { + c'1 +} +@end lilypond + +Los bloques de texto independientes pueden abarcar varias páginas, +posibilitando la impresión de documentos de texto o libros +íntegramente desde LilyPond. Esta funcionalidad y la sintaxis que +requiere se describen en @ref{Elementos de marcado de varias páginas}. + + +@funindex \markup +@funindex markup +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markup}, +@code{\markuplines}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{stand-alone-two-column-markup.ly} + + +@seealso +Referencia de la notación: +@ref{Formatear el texto}, +@ref{Estructura del archivo}, +@ref{Varias partituras en un libro}, +@ref{Elementos de marcado de varias páginas}. + +Fragmentos de código: +@rlsr{Text}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}. + + +@node Formatear el texto +@subsection Formatear el texto +@translationof Formatting text + +Esta sección presenta los formateados básico y avanzado de texto, +usando la sintaxis específica del modo de @code{\markup}. + +@menu +* Introducción al marcado de texto:: +* Seleccionar la tipografía y su tamaño:: +* Alineación de texto:: +* Notación gráfica dentro de elementos de marcado:: +* Notación musical dentro de elementos de marcado:: +* Elementos de marcado de varias páginas:: +@end menu + +@node Introducción al marcado de texto +@unnumberedsubsubsec Introducción al marcado de texto +@translationof Text markup introduction + +@cindex marcado +@cindex texto, marcado de +@cindex marcado de texto +@cindex tipografiar texto + +@funindex \markup +@funindex markup + +Se usa un bloque @code{\markup} para tipografiar texto con una +sintaxis ampliable que se denomina @qq{modo de marcado}. + +@cindex marcado, expresiones de +@cindex expresiones de marcado +@cindex marcado, sintaxis +@cindex sintaxis del marcado + +La sintaxis del marcado es similar a la sintaxis usual de LilyPond: +una expresión @code{\markup} se encierra entre llaves +@code{@{ @dots{} @}}. Una sola palabra se considera como una +expresión mínima, y por tanto no necesita estar encerrada entre +llaves. + +A diferencia de las indicaciones de @qq{texto entrecomillado} simples, +los bloques @code{\markup} pueden contener expresiones anidadas o +instrucciones de marcado, que se introducen utilizando el carácter de +barra invertida @code{\} . Estas instrucciones sólo afectan a la +expresión que sigue inmediatamente. + +@lilypond[quote,verbatim,relative=2] +a1-\markup intenso +a2^\markup { poco \italic più forte } +c e1 +d2_\markup { \italic "string. assai" } +e +b1^\markup { \bold { molto \italic agitato } } +c +@end lilypond + +@cindex caracteres especiales en modo de marcado +@cindex marcado, caracteres especiales en modo de +@cindex reservados, impresión de caracteres +@cindex impresión de caracteres especiales +@cindex texto entrecomillado en modo de marcado + +Un bloque @code{\markup} puede contener también cadenas de texto entre +comillas. Dichas cadenas se tratan como expresiones de texto mínimas, +y por tanto cualquier instrucción de marcado o carácter especial (como +@code{\} y @code{#}) se imprimen literalmente sin afectar al formateo +del texto. Se puede hacer que se impriman las propias comillas si se +les antepone una barra invertida. + +@lilypond[quote,verbatim,relative=2] +a1^"\italic markup..." +a_\markup { \italic "... prints \"italic\" letters!" } +a a +@end lilypond + +Para que se traten como una expresión distinta, es necesario que las +listas de palabras estén encerradas entre comillas o precedidas de una +instrucción. La forma en que están definidas las expresiones de +marcado afecta a cómo se apilan, se centran y se alinean estas +expresiones; en el ejemplo siguiente, la segunda expresión +@code{\markup} se trata igual que la primera: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { \center-column { a bbb c } } +c1^\markup { \center-column { a { bbb c } } } +c1^\markup { \center-column { a \line { bbb c } } } +c1^\markup { \center-column { a "bbb c" } } +@end lilypond + +Los marcados se pueden almacenar dentro de variables. Estas variables +se pueden adjuntar directamente a las notas: + +@lilypond[quote,verbatim] +allegro = \markup { \bold \large Allegro } + +{ + d''8.^\allegro + d'16 d'4 r2 +} +@end lilypond + + +@noindent +Se puede encontrar una lista exhaustiva de las instrucciones +específicas de @code{\markup} en @ref{Text markup commands}. + + +@seealso +Referencia de la notación: +@ref{Text markup commands}. + +Fragmentos de código: +@rlsr{Text}. + +Archivos de inicio: +@file{scm/markup.scm}. + + +@knownissues +Los errores de sintaxis para el modo de marcado a menudo producen +confusión. + + +@node Seleccionar la tipografía y su tamaño +@unnumberedsubsubsec Seleccionar la tipografía y su tamaño +@translationof Selecting font and font size + +@cindex fuente tipográfica, cambiar +@cindex cambio de la fuente tipográfica + +@funindex \italic +@funindex italic +@funindex \bold +@funindex bold +@funindex \underline +@funindex underline + +Está contemplado de forma básica el cambio de la fuente tipográfica en +el modo de marcado: + +@lilypond[quote,verbatim,relative=2] +d1^\markup { + \bold { Più mosso } + \italic { non troppo \underline Vivo } +} +r2 r4 r8 +d,_\markup { \italic quasi \smallCaps Tromba } +f1 d2 r +@end lilypond + +@cindex fuente tipográfica, tamaño de +@cindex texto, tamaño de + +@funindex \fontsize +@funindex fontsize +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger +@funindex \magnify +@funindex magnify + +El tamaño de los caracteres también se puede alterar de distintas +maneras: + +@itemize +@item +el tamaño de la tipografía se puede definir a una serie de tamaños +estándar predefinidos, + +@item +el tamaño de la tipografía se puede establecer a un valor absoluto, + +@item +el tamaño de la tipografía también se puede cambiar de forma relativa +respecto de su valor anterior. +@end itemize + +@noindent +El ejemplo siguiente ejemplifica estos tres métodos: + +@lilypond[quote,verbatim,relative=1] +f1_\markup { + \tiny espressivo + \large e + \normalsize intenso +} +a^\markup { + \fontsize #5 Sinfonia + \fontsize #2 da + \fontsize #3 camera +} +bes^\markup { (con + \larger grande + \smaller emozione + \magnify #0.6 { e sentimento } ) +} +d c2 r8 c bes a g1 +@end lilypond + +@cindex subíndice +@cindex superíndice + +@funindex \super +@funindex super +@funindex \sub +@funindex sub + +El texto se puede imprimir como subíndice o como superíndice. De +forma predeterminada se imprimen en un tamaño menor, pero también se +puede usar un tamaño normal: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { 1 \super st movement } + \line { 1 \normal-size-super st movement + \sub { (part two) } } + } +} +@end lilypond + +@cindex fuente tipográfica, familias de + +El modo de marcado ofrece una manera fácil de elegir familias de +tipografía alternativas. A no ser que se especifique de otro modo, se +selecciona automáticamente la fuente predeterminada con serifa, de +tipo romano: en la última línea del ejemplo siguiente, no hay +diferencia entre la primera y la segunda palabra. + +@lilypond[quote,verbatim] +\markup { + \column { + \line { Act \number 1 } + \line { \sans { Scene I. } } + \line { \typewriter { Verona. An open place. } } + \line { Enter \roman Valentine and Proteus. } + } +} +@end lilypond + +@noindent +Algunas de estas familias, usadas para elementos específicos como +números o matices, no ofrecen todos los caracteres, como se explica en +@ref{Indicaciones dinámicas contemporáneas} y +@ref{Marcas de repetición manual}. + +@c \concat is actually documented in Align (it is not +@c a font-switching command). But we need it here. -vv + +Si se usan dentro de una palabra, algunas instrucciones de cambio de +tipografía o de formateo pueden producir un espacio vacío no deseado. +Esto se puede solucionar concatenando en uno solo los distintos +elementos de texto: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \concat { 1 \super st } + movement + } + \line { + \concat { \dynamic p , } + \italic { con dolce espressione } + } + } +} +@end lilypond + +Se puede encontrar una lista exhaustiva de instrucciones de cambio y +utilización personalizada de las fuentes tipográficas en @ref{Font}. + +También es posible definir conjuntos personalizados de fuentes, tal y +como se explica en @ref{Tipografías}. + +@funindex \teeny +@funindex teeny +@funindex \tiny +@funindex tiny +@funindex \small +@funindex small +@funindex \normalsize +@funindex normalsize +@funindex \large +@funindex large +@funindex \huge +@funindex huge +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}, +@code{\smaller}, +@code{\larger}. +@endpredefined + + +@seealso +Referencia de la notación: +@ref{Font}, +@ref{Indicaciones dinámicas contemporáneas}, +@ref{Marcas de repetición manual}, +@ref{Tipografías}. + +Fragmentos de código: +@rlsr{Text}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}. + +Archivos de inicio: +@file{scm/define-markup-commands.scm}. + +@knownissues +La utilización de las instrucciones de tamaño de texto +@code{\teeny}, @code{\tiny}, +@code{\small}, @code{\normalsize}, @code{\large} y +@code{\huge} conducen a un espaciado de las líneas inconsistente +comparado con el uso de @code{\fontsize}. + + +@node Alineación de texto +@unnumberedsubsubsec Alineación de texto +@translationof Text alignment + +@cindex texto, alineación de +@cindex alinear texto +@cindex alinear texto de marcado +@cindex alinear elementos de marcado +@cindex marcado, elementos, alinear +@cindex marcado, texto, alinear + +Esta subsección trata sobre cómo colocar texto en el modo de marcado. +Los objetos de marcado también se pueden mover como un todo, usando la +sintaxis que se describe en @rlearning{Mover objetos}. + +@c Padding commands should be mentioned on this page, but +@c most of these require \box to be more clearly illustrated. -vv + +@cindex texto, alineación horizontal +@cindex horizontal, alineación de texto + +@funindex \left-align +@funindex left-align +@funindex \center-align +@funindex center-align +@funindex \right-align +@funindex right-align + +Los objetos de marcado se pueden alinear de distintas maneras. De +forma predeterminada, una indicación de texto se alinea sobre el borde +izquierdo: en el ejemplo siguiente, no existe diferencia entre los +marcados primero y segundo. + +@lilypond[quote,verbatim,relative=2] +d1-\markup { poco } +f +d-\markup { \left-align poco } +f +d-\markup { \center-align { poco } } +f +d-\markup { \right-align poco } +@end lilypond + +@funindex \halign +@funindex halign + +Se puede realizar un ajuste fino de la alineación horizontal usando un +valor numérico: + +@lilypond[quote,verbatim,relative=2] +a1-\markup { \halign #-1 poco } +e' +a,-\markup { \halign #0 poco } +e' +a,-\markup { \halign #0.5 poco } +e' +a,-\markup { \halign #2 poco } +@end lilypond + +@noindent +Ciertos objetos pueden poseer sus propios procedimientos de +alineación, y por tanto no resultan afectados por estas instrucciones. +Es posible mover estos objetos de marcado como un todo, como se +muestra por ejemplo en @ref{Indicaciones de texto}. + +@cindex texto, alineación vertical +@cindex vertical, alineación de texto + +@funindex \raise +@funindex raise +@funindex \lower +@funindex lower +@funindex \null +@funindex null + +La alineación vertical es un poco más compleja. Como se ha dicho más +arriba, los objetos de marcado se pueden mover como un todo; sin +embargo, también es posible mover elementos específicos dentro de un +bloque de marcado. En este caso, el elemento a mover se debe preceder +de un @emph{punto de anclaje}, que puede ser otro elemento de marcado +o un objeto invisible. El ejemplo siguiente ejemplifica estas dos +posibilidades; el último marcado en este ejemplo no tiene punto de +anclaje y por ello no resulta movido. + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \raise #2 { Scène 1 } +} +a' +g_\markup { + \null + \lower #4 \bold { Très modéré } +} +a +d,^\markup { + \raise #4 \italic { Une forêt. } +} +a'4 a g2 a +@end lilypond + +@funindex \general-align +@funindex general-align +@funindex \translate +@funindex translate +@funindex \translate-scaled +@funindex translate-scaled + +Algunas instrucciones pueden afectar tanto a la alineación horizontal +como a la vertical de los objetos de texto en el modo de marcado. +Cualquier objeto afectado por estas instrucciones se deben preceder de +un punto de anclaje: + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \translate #'(-1 . 2) "Scène 1" +} +a' +g_\markup { + \null + \general-align #Y #3.2 \bold "Très modéré" +} +a +d,^\markup { + \null + \translate-scaled #'(-1 . 2) \teeny "Une forêt." +} +a'4 a g2 a +@end lilypond + +@cindex varias líneas, marcado +@cindex marcado de varias líneas +@cindex varias líneas, texto +@cindex texto de varias líneas +@cindex texto en columnas +@cindex columnas, texto + +@funindex \column +@funindex column +@funindex \center-column +@funindex center-column + +Un objeto de marcado puede incluir varias líneas de texto. En el +ejemplo siguiente, cada elemento o expresión se sitúa en su propia +línea, ya sea alineada por la izquierda o centrada: + +@lilypond[quote,verbatim] +\markup { + \column { + a + "b c" + \line { d e f } + } + \hspace #10 + \center-column { + a + "b c" + \line { d e f } + } +} +@end lilypond + +@cindex centrar texto en la página +@cindex texto, centrar en la página +@cindex marcado, centrar en la página + +@funindex \fill-line +@funindex fill-line + +De forma similar, una lista de elementos o expresiones se puede +repartir de forma que rellene por completo el ancho de la línea +horizontal (si hay un solo elemento, se centra en el papel). A su +vez, estas expresiones pueden incluir texto de varias líneas o +cualquier otra expresión de marcado: + +@lilypond[quote,verbatim] +\markup { + \fill-line { + \line { William S. Gilbert } + \center-column { + \huge \smallCaps "The Mikado" + or + \smallCaps "The Town of Titipu" + } + \line { Sir Arthur Sullivan } + } +} +\markup { + \fill-line { 1885 } +} +@end lilypond + +@cindex texto ajustado a palabras +@cindex texto justificado +@cindex justificado, texto +@cindex ajustado a palabras, texto +@cindex marcado, texto, ajustado a palabras +@cindex texto de marcado ajustado a palabras +@cindex ajuste de línea, texto con + +@funindex \wordwrap +@funindex wordwrap +@funindex \justify +@funindex justify + + +Las indicaciones de texto largas se pueden también ajustar +automáticamente según un ancho de línea dado. Estarán alineados por +la izquierda o justificados, como se muestra en el ejemplo siguiente. + +@lilypond[quote,verbatim] +\markup { + \column { + \line \smallCaps { La vida breve } + \line \bold { Acto I } + \wordwrap \italic { + (La escena representa el corral de una casa de + gitanos en el Albaicín de Granada. Al fondo una + puerta por la que se ve el negro interior de + una Fragua, iluminado por los rojos resplandores + del fuego.) + } + \hspace #0 + + \line \bold { Acto II } + \override #'(line-width . 50) + \justify \italic { + (Calle de Granada. Fachada de la casa de Carmela + y su hermano Manuel con grandes ventanas abiertas + a través de las que se ve el patio + donde se celebra una alegre fiesta) + } + } +} +@end lilypond + +@cindex texto, instrucciones de alineación +@cindex marcado, texto, instrucciones de alineación +@cindex alineación, instrucciones de texto + +Hay una lista exhaustiva de instrucciones de alineación de texto en +@ref{Align}. + + +@seealso +Manual de aprendizaje: +@rlearning{Mover objetos}. + +Referencia de la notación: +@ref{Align}, +@ref{Indicaciones de texto}. + +Fragmentos de código: +@rlsr{Text}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}. + +Archivos de inicio: +@file{scm/define-markup-commands.scm}. + + +@node Notación gráfica dentro de elementos de marcado +@unnumberedsubsubsec Notación gráfica dentro de elementos de marcado +@translationof Graphic notation inside markup + +@cindex gráficos, insertar +@cindex dibujar objetos gráficos +@cindex gráficos, dibujar objetos +@cindex insertar objetos gráficos +@cindex gráficos, insertar objetos + +Se puede añadir diversos objetos gráficos a una partitura, utilizando +instrucciones de marcado. + +@cindex enmarcar texto +@cindex texto, enmarcar +@cindex texto, decorar +@cindex marcado, texto, decorar +@cindex marcado, texto, enmarcar +@cindex decorar texto + +@funindex \box +@funindex box +@funindex \circle +@funindex circle +@funindex \rounded-box +@funindex rounded-box +@funindex \bracket +@funindex bracket +@funindex \hbracket +@funindex hbracket + +Ciertas instrucciones de marcado permiten la decoración de elementos +de texto con gráficos, como se muestra en el ejemplo siguiente. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \circle Jack + \box "in the box" + \null + \line { + Erik Satie + \hspace #3 + \bracket "1866 - 1925" + } + \null + \rounded-box \bold Prelude + } +} +@end lilypond + +@cindex relleno alrededor de texto +@cindex texto, relleno de +@cindex marcado, relleno de textos de + +@funindex \pad-markup +@funindex pad-markup +@funindex \pad-x +@funindex pad-x +@funindex \pad-to-box +@funindex pad-to-box +@funindex \pad-around +@funindex pad-around + +Algunas instrucciones pueden requerir un aumento del relleno alrededor +del texto: esto se puede conseguir con algunas instrucciones de +marcado descritas exhaustivamente en @ref{Align}. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \box "Charles Ives (1874 - 1954)" + \null + \box \pad-markup #2 "THE UNANSWERED QUESTION" + \box \pad-x #8 "A Cosmic Landscape" + \null + } +} +\markup \column { + \line { + \hspace #10 + \box \pad-to-box #'(-5 . 20) #'(0 . 5) + \bold "Largo to Presto" + } + \pad-around #3 + "String quartet keeps very even time, +Flute quartet keeps very uneven time." +} +@end lilypond + +@cindex gráfica, notación +@cindex símbolos no musicales +@cindex no musicales, símbolos +@cindex notación gráfica + +@funindex \combine +@funindex combine +@funindex \draw-circle +@funindex draw-circle +@funindex \filled-box +@funindex filled-box +@funindex \triangle +@funindex triangle +@funindex \draw-line +@funindex draw-line +@funindex \arrow-head +@funindex arrow-head + +Se pueden imprimir otros símbolos o elementos gráficos sin que se +requiera ningún otro texto. De igual manera que en el caso de las +expresiones de marcado, dichos objetos se pueden combinar: + +@lilypond[quote,verbatim] +\markup { + \combine + \draw-circle #4 #0.4 ##f + \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 + \hspace #5 + + \center-column { + \triangle ##t + \combine + \draw-line #'(0 . 4) + \arrow-head #Y #DOWN ##f + } +} +@end lilypond + +@cindex insertar gráficos +@cindex imágenes, insertar +@cindex gráficos, insertar +@cindex PostScript + +@funindex \epsfile +@funindex epsfile +@funindex \postscript +@funindex postscript + +Entre las funcionalidades gráficas avanzadas se encuentran la +posibilidad de incluir archivos de imagen externos convertidos al +formato de PostScript Encapsulado (@emph{eps}), y la inclusión directa +de gráficos dentro del archivo de entrada, usando código PostScript +nativo. En tal caso puede ser de utilidad la especificación explícita +del tamaño del dibujo, como se ejemplifica a continuación: + +@lilypond[quote,verbatim,relative=1] +c1^\markup { + \combine + \epsfile #X #10 #"./context-example.eps" + \with-dimensions #'(0 . 6) #'(0 . 10) + \postscript #" + -2 3 translate + 2.7 2 scale + newpath + 2 -1 moveto + 4 -2 4 1 1 arct + 4 2 3 3 1 arct + 0 4 0 3 1 arct + 0 0 1 -1 1 arct + closepath + stroke" + } +c +@end lilypond + +Hay una lista exhaustiva de instrucciones específicas de gráficos en +@ref{Graphic}. + + +@seealso +Referencia de la notación: +@ref{Graphic}, +@ref{Anotaciones editoriales}. + +Fragmentos de código: +@rlsr{Text}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}. + +Archivos de inicio: +@file{scm/define-markup-commands.scm}, +@file{scm/stencil.scm}. + + +@node Notación musical dentro de elementos de marcado +@unnumberedsubsubsec Notación musical dentro de elementos de marcado +@translationof Music notation inside markup + +@cindex notación dentro de marcado +@cindex música dentro de marcado +@cindex marcado, notación musical dentro de + +Se pueden añadir a la partitura diversos elementos de notación +musical, dentro de un objeto de marcado. + +Las notas y las alteraciones se pueden escribir utilizando +instrucciones de marcado: + +@lilypond[quote,verbatim,relative=2] +a2 a^\markup { + \note #"4" #1 + = + \note-by-number #1 #1 #1.5 +} +b1_\markup { + \natural \semiflat \flat + \sesquiflat \doubleflat +} +\glissando +a1_\markup { + \natural \semisharp \sharp + \sesquisharp \doublesharp +} +\glissando b +@end lilypond + +Otros objetos de notación se pueden también imprimir en el modo de +marcado: + +@lilypond[quote,verbatim,relative=1] +g1 bes +ees-\markup { + \finger 4 + \tied-lyric #"~" + \finger 1 +} +fis_\markup { \dynamic rf } +bes^\markup { + \beam #8 #0.1 #0.5 +} +cis +d-\markup { + \markalphabet #8 + \markletter #8 +} +@end lilypond + +De forma más general, cualquier símbolo musical disponible se puede +incluir por separado dentro de un objeto de marcado, como se +ejemplifica a continuación; hay una lista exhaustiva de estos símbolos +y sus nombres en @ref{La tipografía Feta}. + +@lilypond[quote,verbatim,relative=2] +c2 +c'^\markup { \musicglyph #"eight" } +c,4 +c,8._\markup { \musicglyph #"clefs.G_change" } +c16 +c2^\markup { \musicglyph #"timesig.neomensural94" } +@end lilypond + +Otra forma de imprimir glifos que no son de texto se encuentra +descrita en @ref{Explicación de las fuentes tipográficas}. Tiene la +utilidad de imprimir llaves de distintos tamaños. + +El modo de marcado también contempla diagramas para instrumentos +específicos: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { + \fret-diagram-terse #"x;x;o;2;3;2;" +} +c^\markup { + \harp-pedal #"^-v|--ov^" +} +c +c^\markup { + \combine + \musicglyph #"accordion.discant" + \combine + \raise #0.5 \musicglyph #"accordion.dot" + \raise #1.5 \musicglyph #"accordion.dot" +} +@end lilypond + +@c The accordion diagram is actually taken from a snippet. + +@noindent +Dichos diagramas se encuentran documentados en @ref{Instrument +Specific Markup}. + +@cindex partitura dentro marcado +@cindex marcado, partitura dentro de + +Incluso una partitura completa se puede incluir dentro de un objeto de +marcado. En tal caso, el bloque anidado @code{\score} debe contener +un bloque @code{\layout}, como se muestra aquí: + +@lilypond[quote,verbatim,relative=1] +c4 d^\markup { + \score { + \relative c' { c4 d e f } + \layout { } + } +} +e f | +c d e f +@end lilypond + +Hay una lista exhaustiva de instrucciones relacionadas con la notación +musical en @ref{Music}. + + +@seealso +Referencia de la notación: +@ref{Music}, +@ref{La tipografía Feta}, +@ref{Explicación de las fuentes tipográficas}. + +Fragmentos de código: +@rlsr{Text}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}. + +Archivos de inicio: +@file{scm/define-markup-commands.scm}, +@file{scm/fret-diagrams.scm}, +@file{scm/harp-pedals.scm}. + + +@node Elementos de marcado de varias páginas +@unnumberedsubsubsec Elementos de marcado de varias páginas +@translationof Multi-page markup + +@cindex páginas, marcado de varias +@cindex marcado de varias páginas +@cindex marcado, texto de, varias páginas +@cindex texto que ocupa varias páginas + +@funindex \markuplines +@funindex markuplines +@funindex \justified-lines +@funindex justified-lines +@funindex \wordwrap-lines +@funindex wordwrap-lines + +Aunque los objetos de marcado estándar no se pueden dividir, una +sintaxis específica hace posible la introducción de líneas de texto +que pueden abarcar varias páginas: + +@c KEEP LY +@lilypond[quote,verbatim] +\markuplines { + \justified-lines { + Un texto muy largo de líneas justificadas. + ... + } + \wordwrap-lines { + Otro párrafo muy largo. + ... + } + ... +} +@end lilypond + +Esta sintaxis acepta una lista de elementos de marcado, que pueden ser +@itemize +@item +el resultado de una instrucción de lista de marcado, +@item +una lista de marcados, +@item +o una lista de listas de marcado. +@end itemize + +Hay una lista exhaustiva de las instrucciones de lista de marcado en +@ref{Text markup list commands}. + + +@seealso +Referencia de la notación: +@ref{Text markup list commands}. + +Fragmentos de código: +@rlsr{Text}. + +Manual de extensión: +@rextend{New markup list command definition}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}. + +Archivos de inicio: +@file{scm/define-markup-commands.scm}. + + +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markuplines}. +@endpredefined + + +@node Tipografías +@subsection Tipografías +@translationof Fonts + +Esta sección presenta la forma en que se manejan las fuentes +tipográficas, y cómo se pueden cambiar en las partituras. + +@menu +* Explicación de las fuentes tipográficas:: +* Fuentes de un solo elemento:: +* Fuentes tipográficas del documento completo:: +@end menu + + +@node Explicación de las fuentes tipográficas +@unnumberedsubsubsec Explicación de las fuentes tipográficas +@translationof Fonts explained + +@cindex Pango +@cindex fuentes tipográficas, explicación +@cindex llaves de distintos tamaños +@cindex fuentes tipográficas, explicación +@cindex llaves de varios tamaños +@cindex fuentes tipográficas de símbolos en marcado +@cindex símbolos, fuentes tipográficas en el marcado + +@funindex font-interface + +Las fuentes tipográficas se manejan a través de distintas bibliotecas. +FontConfig se utiliza para detectar las tipografías disponibles en el +sistema; las tipografías seleccionadas se trazan utilizando Pango. + +Las tipografías de notación musical se pueden describir como un +conjunto de glifos específicos, ordenados en varias familias. La +siguiente sintaxis permite usar directamente varias tipografías +@code{feta} de LilyPond distintas a las de texto en el modo de +marcado: + +@lilypond[quote,verbatim,relative=2] +a1^\markup { + \vcenter { + \override #'(font-encoding . fetaBraces) + \lookup #"brace120" + \override #'(font-encoding . fetaText) + \column { 1 3 sf } + \override #'(font-encoding . fetaMusic) + \lookup #"noteheads.s0petrucci" + } +} +@end lilypond + +@noindent +Sin embargo, todos estos glifos excepto las llaves de varios tamaños +que están contenidas en la fuente tipográfica @code{fetaBraces} están +disponibles utilizando la sintaxis más sencilla que se describe en +@ref{Notación musical dentro de elementos de marcado}. + +Cuando se usan los glifos de la fuente de llaves @code{fetaBraces}, el +tamaño de la llave se especifica por la parte numérica del nombre del +glifo, en unidades arbitrarias. Se puede especificar cualquier entero +de @code{0} a @code{575} inclusive, siendo @code{0} el que produce la +llave más pequeña. El valor óptimo se debe determinar por ensayo y +error. Todos estos glifos son llaves izquierdas; las llaves derechas +se pueden obtener mediante rotación, véase @ref{Rotación de objetos}. + +Están disponibles tres familias de tipografías de texto: la tipografía +@emph{romana} (con serifa), que de forma predeterminada es New Century +Schoolbook, la fuente @emph{sans} y la fuente monoespaciada +@emph{de máquina de escribir}. Estas dos últimas familias vienen +determinadas por la instalación de Pango. + +Cada familia puede incluir distintas formas y series. El ejemplo +siguiente muestra la posibilidad de seleccionar familias, formas, +series y tamaños alternativos. El valor que se da a @code{font-size} +es el cambio requerido a partir del tamaño predeterminado. + +@lilypond[quote,verbatim,relative=2] +\override Score.RehearsalMark #'font-family = #'typewriter +\mark \markup "Ouverture" +\override Voice.TextScript #'font-shape = #'italic +\override Voice.TextScript #'font-series = #'bold +d2.^\markup "Allegro" +\override Voice.TextScript #'font-size = #-3 +c4^smaller +@end lilypond + +@noindent +Se puede usar una sintaxis similar en el modo de marcado, aunque en +este caso es preferible usar la sintaxis sencilla que se explica en +@ref{Seleccionar la tipografía y su tamaño}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \override #'(font-shape . italic) + \override #'(font-size . 4) + Idomeneo, + } + \line { + \override #'(font-family . typewriter) + { + \override #'(font-series . bold) + re + di + } + \override #'(font-family . sans) + Creta + } + } +} +@end lilypond + +Aunque es fácil cambiar entre las fuentes tipográficas +preconfiguradas, también es posible usar otras fuentes, como se +explica en las siguientes secciones: @ref{Fuentes de un solo elemento} y +@ref{Fuentes tipográficas del documento completo}. + + +@seealso +Referencia de la notación: +@ref{La tipografía Feta}, +@ref{Notación musical dentro de elementos de marcado}, +@ref{Rotación de objetos}, +@ref{Seleccionar la tipografía y su tamaño}, +@ref{Font}. + + +@node Fuentes de un solo elemento +@unnumberedsubsubsec Fuentes de un solo elemento +@translationof Single entry fonts + +Se puede usar en una partitura cualquier fuente tipográfica que esté +instalada en el sistema operativo y reconocida por parte de +FontConfig, usando la siguiente sintaxis: + +@lilypond[quote,verbatim,relative=2] +\override Staff.TimeSignature #'font-name = #"Bitstream Charter" +\override Staff.TimeSignature #'font-size = #2 +\time 3/4 + +a1_\markup { + \override #'(font-name . "Vera Bold") + { Vera Bold } +} +@end lilypond + +@cindex fuentes tipográficas, buscar, disponibles +@cindex buscar fuentes tipográficas disponibles +@cindex listar fuentes tipográficas disponibles +@cindex disponibles, listar las fuentes tipográficas + +@funindex show-available-fonts + +La instrucción siguiente presenta una lista de todas las tipografías +disponibles en el sistema operativo: + +@example +lilypond -dshow-available-fonts x +@end example + + +@seealso +Referencia de la notación: +@ref{Explicación de las fuentes tipográficas}, +@ref{Fuentes tipográficas del documento completo}. + +Fragmentos de código: +@rlsr{Text}. + +@c A source file gets never installed... +@c Installed files: +@c @file{lily/font-config-scheme.cc}. + + +@node Fuentes tipográficas del documento completo +@unnumberedsubsubsec Fuentes tipográficas del documento completo +@translationof Entire document fonts + +Se pueden cambiar las fuentes tipográficas que se usan como +tipografías predeterminadas en las familias @emph{romana}, +@emph{sans-serif} y @emph{monoespaciada}, especificándolas en este +orden como se ve en el ejemplo de abajo. Para leer más explicaciones +sobre las fuentes tipográficas, consulte @ref{Explicación de las fuentes tipográficas}. + +@cindex fuente, establecer la familia de +@cindex fuentes tipográficas, cambiar para todo el documento + +@funindex make-pango-font-tree + +@lilypond[verbatim,quote] +\paper { + myStaffSize = #20 + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" + (/ myStaffSize 20))) +} + +\relative c'{ + c1-\markup { + roman, + \sans sans, + \typewriter typewriter. } +} +@end lilypond + +@c we don't do Helvetica / Courier, since GS incorrectly loads +@c Apple TTF fonts + + +@seealso +Referencia de la notación: +@ref{Explicación de las fuentes tipográficas}, +@ref{Fuentes de un solo elemento}, +@ref{Seleccionar la tipografía y su tamaño}, +@ref{Font}. + diff --git a/Documentation/es/notation/unfretted-strings.itely b/Documentation/es/notation/unfretted-strings.itely new file mode 100644 index 0000000000..181ff624e8 --- /dev/null +++ b/Documentation/es/notation/unfretted-strings.itely @@ -0,0 +1,238 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097 + + 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 Instrumentos de cuerda sin trastes +@section Instrumentos de cuerda sin trastes +@translationof Unfretted string instruments + +@lilypondfile[quote] +{unfretted-headword.ly} + +@cindex orquestales, cuerdas +@cindex cuerdas orquestales +@cindex cuerdas, escribir música para + +Esta sección aporta información y referencias que resultan útiles si +se escribe música para instrumentos de cuerda sin trastes, +principalmente instrumentos de cuerda orquestales. + +@menu +* Notación común para cuerdas sin trastes:: +@end menu + +@node Notación común para cuerdas sin trastes +@subsection Notación común para cuerdas sin trastes +@translationof Common notation for unfretted strings + +Hay poca notación especializada para los instrumentos de cuerdas sin +trastes. La notación de la música se realiza en un solo pentagrama, y +se suele usar una sola voz. Se pueden necesitar dos voces para +algunos pasajes en dobles cuerdas o en divisi. + +@menu +* Referencias para cuerdas sin trastes:: +* Indicaciones de arco:: +* Armónicos:: +* Pizzicato de Bartok (Snap):: +@end menu + +@node Referencias para cuerdas sin trastes +@unnumberedsubsubsec Referencias para cuerdas sin trastes +@translationof References for unfretted strings + +La mayor parte de la notación que resulta de utilidad para las cuerdas +orquestales y otros instrumentos de arco se estudia en otras partes +del manual: + +@itemize + +@item +Las indicaciones textuales como @qq{pizz.} y @qq{arco} se añaden como +texto simple: véase @ref{Guiones de texto}. + +@item +Las digitaciones, entre ellas la indicación de pulgar, se describen en +@ref{Indicaciones de digitación}. + +@item +Las dobles cuerdas se indican normalmente escribiendo un acorde, véase +@ref{Notas en acorde}. Hay otras indicaciones que se pueden añadir para +la interpretación de acordes, véase @ref{Arpegio}. + +@item +Hay una plantilla para cuarteto de cuerda en @rlearning{Cuarteto de cuerda}. Otras se muestran en la sección de fragmentos de código. + +@end itemize + + +@seealso +Manual de aprendizaje: +@rlearning{Cuarteto de cuerda}. + +Referencia de la notación: +@ref{Guiones de texto}, +@ref{Indicaciones de digitación}, +@ref{Notas en acorde}, +@ref{Arpegio}. + +Fragmentos de código: +@rlsr{Unfretted strings}. + + +@node Indicaciones de arco +@unnumberedsubsubsec Indicaciones de arco +@translationof Bowing indications + +@funindex \upbow +@funindex \downbow +@funindex \open + +@cindex arco, indicaciones de +@cindex arco arriba, indicación +@cindex arco abajo, indicación +@cindex arriba, arco +@cindex abajo, arco +@cindex al aire, indicación de cuerda +@cindex cuerda al aire, indicación de + +Las indicaciones de arco se crean como articulaciones, que se +describen en @ref{Articulaciones y ornamentos}. + +Las instrucciones de arco @code{\upbow} (arco arriba) y +@code{\downbow} (arco abajo) se usan con ligaduras de expresión de la +siguiente manera: + +@lilypond[verbatim,quote,relative=2] +c4(\downbow d) e(\upbow f) +@end lilypond + +@noindent +y el ejemplo siguiente muestra tres formas distintas de indicar un La +sobre una cuerda al aire del violín: + +@lilypond[verbatim,quote,relative=2] +a4 \open +a^\markup { \teeny "II" } +a2^\markup { \small "sul A" } +@end lilypond + + +@predefined +@code{\downbow}, +@code{\upbow}, +@code{\open}. +@endpredefined + + +@seealso +Referencia de la notación: +@ref{Articulaciones y ornamentos}, +@ref{Ligaduras de expresión}. + + +@node Armónicos +@unnumberedsubsubsec Armónicos +@translationof Harmonics + +@funindex \harmonic + +@strong{@i{Armónicos naturales}} + +@cindex notas, cabeza de, forma de rombo +@cindex rombo, cabezas en forma de +@cindex naturales, armónicos +@cindex armónicos naturales + +@funindex \harmonicsOn +@funindex \harmonicsOff + +La notación de los armónicos naturales se puede realizar de varias +formas. Generalmente, una nota con la cabeza en forma de rombo +significa tocar (sin apretar) la cuerda en el lugar donde se pisaría +la nota si no fuese un rombo. + +@lilypond[verbatim,quote,relative=2] +d4 e4. +\harmonicsOn +d8 e e +d4 e4. +\harmonicsOff +d8 e e +@end lilypond + +Como posibilidad alternativa está la de mostrar una cabeza normal de +nota en la altura de la nota que debe sonar, con un pequeño círculo +que indica que se debe tocar como armónico: + +@lilypond[verbatim,quote,relative=2] +d2^\flageolet d_\flageolet +@end lilypond + +Se puede hacer un círculo de menor tamaño, véase la lista de +fragmentos de código en @ref{Referencias para cuerdas sin trastes}. + +@strong{@i{Armónicos artificiales}} + +@cindex artificiales, armónicos +@cindex armónicos artificiales + +La notación de los armónicos artificiales se realiza con dos notas, +una con una cabeza normal que indica la posición donde se pisa, y otra +con una cabeza en forma de rombo hueco para indicar la posición donde +se roza la cuerda (sin pisar) para producir el armónico. + +@c TODO If the default for harmonicDots is changed, change this +Los armónicos artificiales indicados con @code{\harmonic} no presentan +los puntillos. La propiedad de contexto @code{harmonicDots} se debe +activar si se necesitan los puntillos. + +@lilypond[verbatim,quote,relative=1] +2. 4 +\set harmonicDots = ##t +2. 4 +@end lilypond + +@warning{@code{@bs{}harmonic} @strong{se debe} colocar dentro de una +construcción de acorde incluso si solamente hay una nota. Normalmente +se usaría @code{@bs{}harmonicsOn} en esta situación.} + + +@seealso +Glosario musical: +@rglos{harmonics}. + +Referencia de la notación: +@ref{Cabezas de nota especiales}, +@ref{Referencias para cuerdas sin trastes}. + + +@node Pizzicato de Bartok (Snap) +@unnumberedsubsubsec Snap (Bartók) pizzicato +@translationof Snap (Bartok) pizzicato + +@cindex pizzicato, Bartók +@cindex pizzicato, snap +@cindex Bartók pizzicato +@cindex snap pizzicato + +El @notation{snap pizzicato} (conocido también como @qq{pizzicato de Bartók}) es un +tipo de pizzicato en el que la cuerda se pulsa hacia arriba (y no lateralmente) +de forma deliberada, de forma que golpea la madera del diapasón. + +@lilypond[verbatim,quote,relative=1] +c4\snappizzicato +4\snappizzicato +4^\snappizzicato +4_\snappizzicato +@end lilypond + + diff --git a/Documentation/es/notation/vocal.itely b/Documentation/es/notation/vocal.itely new file mode 100644 index 0000000000..df4bc97cc9 --- /dev/null +++ b/Documentation/es/notation/vocal.itely @@ -0,0 +1,3364 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: a3cb316f14549de435c809a3b5cd11e7746a7a01 + + 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 Música vocal +@section Música vocal +@translationof Vocal music + +@lilypondfile[quote]{vocal-headword.ly} + +Esta sección explica cómo tipografiar música vocal, y cómo asegurarse +de que la letra se alinea con las notas de su melodía correspondiente. + +@menu +* Notación común para música vocal:: +* Técnicas específicas para la letra:: +* Versos:: +* Canciones:: +* Música coral:: +* Ópera y musicales:: +* Cánticos salmos e himnos:: +* Música vocal antigua:: +@end menu + + +@node Notación común para música vocal +@subsection Notación común para música vocal +@translationof Common notation for vocal music + +Esta sección se ocupa de las cuestiones comunes a la mayoría de los +tipos de música vocal. + +@menu +* Referencias para música vocal:: +* Introducir la letra:: +* Alineación de la letra a una melodía:: +* Duración automática de las sílabas:: +* Duración manual de las sílabas:: +* Varias sílabas sobre una nota:: +* Varias notas sobre una sílaba:: +* Líneas de extensión y guiones:: +@end menu + + +@node Referencias para música vocal +@unnumberedsubsubsec Referencias para música vocal +@translationof References for vocal music + +Esta sección indica dónde encontrar los detalles de las cuestiones de +notación que pueden surgir en cualquier tipo de música vocal. + +@itemize + +@item +Casi todos los estilos de música vocal utilizan texto escrito como +letra. Hay una introducción a esta notación en @rlearning{Elaborar +canciones sencillas}. + +@item +La música vocal probablemente requiere el uso del modo de marcado o +@code{markup}, ya sea para la letra o para otros elementos de texto +(nombres de los personajes, etc.). Esta sintaxis está descrita en +@ref{Introducción al marcado de texto}. + + +@item +Los @notation{ambitus} o indicaciones de tesitura vocal se pueden añadir al +principio de los pentagramas vocales, como se explica en +@ref{Tesitura}. + +@item +De forma predeterminada, las indicaciones dinámicas se sitúan debajo +del pentagrama, pero en la música coral se suelen disponer por encima +del pentagrama para evitar la letra, como se explica en +@ref{Disposiciones de la partitura para música coral}. + +@end itemize + +@seealso +Glosario musical: +@rglos{ambitus}. + +Manual de aprendizaje: +@rlearning{Elaborar canciones sencillas}. + +Referencia de la notación: +@ref{Introducción al marcado de texto}, +@ref{Tesitura}, +@ref{Disposiciones de la partitura para música coral}. + +Fragmentos de código: +@rlsr{Vocal music}. + +@node Introducir la letra +@unnumberedsubsubsec Introducir la letra +@translationof Entering lyrics + +@cindex letra +@cindex letra, introducir +@cindex introducir la letra +@cindex formateo de la letra +@cindex letra, formateado +@cindex puntuación en la letra +@cindex letra, puntuación en la +@cindex espacios en la letra +@cindex comillas en la letra +@cindex puntuación +@funindex \lyricmode + +@c TODO should we explain hyphens here + +La letra de las canciones se introduce en un modo de entrada especial +que se inicia mediante la palabra clave @code{\lyricmode}, o bien +mediante @code{\addlyrics} ó @code{\lyricsto}. En este modo especial +de entrada, el carácter @code{d} no se analiza como una nota, sino más +bien como una sílaba de una sola letra. Dicho de otra forma, las +sílabas se introducen como las notas, pero la altura de las notas se +sustituye por texto. + +Por ejemplo: + +@c TODO translate -FV +@example +\lyricmode @{ Three4 blind mice,2 three4 blind mice2 @} +@end example + + +Existen dos métodos principales para especificar la colocación +horizontal de las sílabas: mediante la indicación de la duración de +cada sílaba explícitamente, como en el ejemplo anterior, o dejando que +la letra se alinee automáticamente con una melodía u otra voz de +música, utilizando @code{\addlyrics} o @code{\lyricsto}. El primer +método se describe a continuación bajo el epígrafe @ref{Duración +manual de las sílabas}. El segundo método se describe en +@ref{Duración automática de las sílabas}. + +Una palabra o sílaba de la letra comienza con un carácter alfabético +(y algunos otros caracteres, véase más abajo) y termina con un espacio +o un dígito. El resto de los caracteres dentro de la sílaba pueden +ser cualesquier caracteres que no sean dígitos o espacios. + +A causa de que cualquier carácter que no es un dígito o un espacio se +considera parte de la sílaba, una palabra es válida incluso si termina +con @code{@}}, lo que a menudo lleva al siguiente fallo: + +@example +\lyricmode @{ la la la@} +@end example + +En este ejemplo, el símbolo @code{@}} se encuentra incluido dentro de +la sílaba final, por tanto la llave de apertura no se compensa con la +correspondiente llave de cierre y el archivo de entrada probablemente +no se podrá procesar. En vez de ello, las llaves siempre deben ir +rodeadas por espacios: + +@example +\lyricmode @{ la la la @} +@end example + +@cindex sobreescrituras en el modo de letra +@funindex \property dentro de \lyricmode + +De forma similar, en el modo de letra, un punto ortográfico se +incluirá dentro de la secuencia alfabética a la que sigue. Como +consecuencia, se deben insertar espacios antes y después del punto +dentro de las instrucciones @code{\override}. @emph{No} escriba lo +siguiente: + +@example +\override Score.LyricText #'font-shape = #'italic +@end example + +@noindent +sino lo siguiente: + +@example +\override Score . LyricText #'font-shape = #'italic +@end example + +Los signos de puntuación, las letras con caracteres acentuados o de +cualquier idioma distinto del inglés, o los caracteres especiales +(como el símbolo del corazón o las comillas inclinadas), se pueden +insertar directamente en el archivo de entrada, siempre que éste se +grabe con la codificación UTF-8. Para más información, consulte +@ref{Codificación del texto}. + +@lilypond[quote,verbatim] +\relative c'' { d8 c16 a bes8 f e' d c4 } +\addlyrics { „Schad’ um das schö -- ne grü -- ne Band, } +@end lilypond + +Se pueden usar las comillas normales dentro de la letra, pero deben ir +precedidas por el carácter de barra invertida y la sílaba en su +conjunto se debe encerrar en otro par de comillas. Por ejemplo, + +@lilypond[quote,verbatim] +\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } +\addlyrics { "\"I" am so lone -- "ly,\"" said she } +@end lilypond + +La definición completa del comienzo de una palabra en el modo Lyrics +(letra) es algo más compleja. Una palabra en el modo Lyrics comienza +por: un carácter alfabético, @code{_}, @code{?}, @code{!}, @code{:}, +@code{'}, los caracteres de control desde @code{^A} hasta @code{^F}, +desde @code{^Q} hasta @code{^W}, @code{^Y}, @code{^^}, cualquier +carácter de 8 bits con código ASCII por encima del 127, o una +combinación de dos caracteres consistente en la combinación de una +barra invertida seguida por @code{`}, @code{'}, @code{"} ó @code{^}. + +@c " to balance double quotes for not-so-bright context-sensitive editors + +Un enorme control sobre la apariencia de la letra proviene del uso de +elementos de marcado @code{\markup} dentro de la propia letra. Para +ver una explicación de muchas de las opciones, consulte +@ref{Formatear el texto}. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{formatting-lyrics-syllables.ly} + + +@seealso +Manual de aprendizaje: +@rlearning{Canciones}. + +Referencia de la notación: +@ref{Duración automática de las sílabas}, +@ref{Tipografías}, +@ref{Foramtear el texto}, +@ref{Modos de entrada}, +@ref{Duración manual de las sílabas}, +@ref{Codificación del texto}. + +Referencia de funcionamiento interno: +@rinternals{LyricText}. + +Fragmentos de código: +@rlsr{Text} + +@node Alineación de la letra a una melodía +@unnumberedsubsubsec Alineación de la letra a una melodía +@translationof Aligning lyrics to a melody + +@cindex letra, alineación a una melodía +@cindex @code{associatedVoice} +@funindex \lyricmode +@funindex \addlyrics +@funindex \lyricsto + +La letra se imprime mediante su interpretación dentro del contexto +llamado @code{Lyrics}, véase @ref{Explicación de los contextos}. + +@example +\new Lyrics \lyricmode @{ @dots{} @} +@end example + +La letra se puede alinear con la melodía de dos maneras principales: + +@itemize + +@item +Se puede alinear la letra automáticamente, tomándose las duraciones de +las sílabas de otra voz de música, o (en circunstancias especiales) +una melodía asociada, usando @code{\addlyrics}, @code{\lyricsto}, o +estableciendo el valor de la propiedad @code{associatedVoice}. Para +ver más detalles, consulte @ref{Duración automática de las sílabas}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e4 d c2 + } + >> + +% takes durations and alignment from notes in "one" + \new Lyrics \lyricsto "one" { + Life is __ _ love, live __ life. + } + +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +La primera línea de letra muestra la forma normal de introducir la +letra. + +La segunda línea de texto muestra cómo se puede cambiar la voz de la +que se toman las duraciones para las sílabas. Esto es útil si el +texto de las distintas estrofas corresponde a las mismas notas de +formas diferentes, y todas las duraciones están disponibles dentro de +contextos de voz. Para ver más detalles, consulte @ref{Versos}. + +@item +El texto se puede alinear independientemente de la duración de +cualquier nota si las duraciones de de las sílabas se especifican +explícitamente, y se escriben con @code{\lyricmode}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice = "one" \relative c'' { + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + +% uses previous explicit duration of 2; + \new Lyrics \lyricmode { + Joy to the earth! + } + +% explicit durations, set to a different rhythm + \new Lyrics \lyricmode { + Life4 is love,2. live4 life.2 + } +>> +@end lilypond + +El primer verso no está alineado con las notas porque no se +especificaron las duraciones, y se utiliza el valor previo de 2 +(blanca) para todas las sílabas. + +El segundo verso muestra cómo las palabras se pueden alinear de forma +independiente de las notas. Esto es útil si el texto de los distintos +versos se corresponde con las notas de maneras diferentes, pero las +duraciones requeridas no están disponibles en un contexto de música. +Para ver más detalles, consulte @ref{Duración manual de las sílabas}. +Esta técnica también es útil cuando se quiere preparar un diálogo +encima de la música; para ver ejemplos que lo muestran, consulte +@ref{Diálogos encima de la música}. + +Cuando se escriben de esta forma, las sílabas del texto se alinean por +la izquierda con las notas, de forma predeterminada, pero se pueden +centrar sobre las notas de una melodía especificando una voz asociada, +si existe. Para ver más detalles, consulte @ref{Duración manual de +las sílabas}. + +@end itemize + +@seealso +Manual de aprendizaje: +@rlearning{Alineación de la letra a una melodía}. + +Referencia de la notación: +@ref{Explicación de los contextos}, +@ref{Duración automática de las sílabas}. +@ref{Versos}, +@ref{Duración manual de las sílabas}, +@ref{Diálogos encima de la música}, +@ref{Duración manual de las sílabas}. + +Referencia de funcionamiento interno: +@rinternals{Lyrics}. + +@node Duración automática de las sílabas +@unnumberedsubsubsec Duración automática de las sílabas +@translationof Automatic syllable durations + +@cindex sílabas, duración automática de las +@cindex letra y melodías +@cindex associatedVoice +@funindex \addlyrics +@funindex \lyricsto + +Las sílabas de la letra se pueden alinear automáticamente con las +notas de una melodía de tres formas: + +@itemize + +@item +especificando por su nombre el contexto Voice que contiene la melodía, +con @code{\lyricsto}, + +@item +introduciendo la letra con @code{\addlyrics} y colocándola +inmediatamente después del contexto de voz que contiene la melodía, + +@item +estableciendo un valor para la propiedad @code{associatedVoice}, la +alineación de la letra se puede mover a un contexto de voz distinto, +especificado por su nombre, en cualquier momento musical. + +@end itemize + +En los tres métodos se pueden trazar guiones de separación entre las +sílabas de una palabra y líneas extensoras después del final de una +palabra. Para ver más detalles, véase @ref{Líneas de extensión y +guiones}. + +El contexto @code{Voice} que contiene la melodía con que se está +alineando la letra, no debe haber @qq{muerto}, o se perderá la letra a +partir de este punto. Esto puede ocurrir si existen períodos en que +dicha voz no tiene nada que hacer. Para ver métodos para mantener +vivos los contextos, consulte @ref{Mantener vivos los contextos}. + +@subheading Uso de @code{\lyricsto} + +@cindex \lyricsto +@funindex \lyricsto + +Las sílabas de la letra se pueden alinear automáticamente bajo las +notas de una melodía especificando por su nombre el contexto de voz +que contiene la melodía, con @code{\lyricsto}: + +@lilypond[quote,verbatim,relative=2] +<< + \new Voice = "melody" { + a4 a a a + } + \new Lyrics \lyricsto "melody" { + These are the words + } +>> +@end lilypond + +@noindent +Esto alinea las sílabas con las notas del contexto @code{Voice} +nombrado, que debe existir previamente. Por tanto, normalmente se +especifica primero el contexto @code{Voice} seguido del contexto +@code{Lyrics}. La letra en sí sigue a la instrucción +@code{\lyricsto}. La instrucción @code{\lyricsto} invoca +automáticamente el modo de letra, por lo que la palabra clave +@code{\lyricmode} se puede omitir. De forma predeterminada, la letra +se coloca por debajo de las notas. Para otras colocaciones, consulte +@ref{Posicionamiento vertical de la letra}. + + +@subheading Uso de @code{\addlyrics} + +@cindex \addlyrics +@funindex \addlyrics + +La instrucción @code{\addlyrics} es realmente tan sólo una forma +cómoda de escribir una estructura de LilyPond más complicada que +establece la letra. + +@example +@{ MÚSICA @} +\addlyrics @{ LETRA @} +@end example + +@noindent +es lo mismo que + +@example +\new Voice = "blabla" @{ MÚSICA @} +\new Lyrics \lyricsto "blabla" @{ LETRA @} +@end example + +He aquí un ejemplo: + +@lilypond[verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } +} +@end lilypond + +Se pueden añadir más versos poniendo más secciones @code{\addlyrics}: + +@lilypond[ragged-right,verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } + \addlyrics { speel het spel } + \addlyrics { joue le jeu } +} +@end lilypond + +La instrucción @code{\addlyrics} no es capaz de manejar situaciones de +polifonía. Para estos casos debería usar @code{\lyricsto}. + +@subheading Uso de @code{associatedVoice} + +Se puede cambiar la melodía a la que se alinea la letra mediante el +establecimiento de la propiedad @code{associatedVoice}, + +@example +\set associatedVoice = #"lala" +@end example + +@noindent + +El valor de la propiedad (aquí: @code{"lala"}) debe ser el nombre de +un contexto @code{Voice}. Por razones técnicas, la instrucción +@code{\set} se debe escribir una sílaba antes de aquella a la que se +quiere aplicar el cambio de voz. + +He aquí un ejemplo que muestra su uso: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e8 d4. c2 + } + >> +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +@seealso +Referencia de la notación: +@ref{Líneas de extensión y guiones}, +@ref{Mantener vivos los contextos}, +@ref{Posicionamiento vertical de la letra}. + +@node Duración manual de las sílabas +@unnumberedsubsubsec Duración manual de las sílabas +@translationof Manual syllable durations + +En ciertas músicas vocales complejas puede ser deseable colocar la +letra de forma completamente independiente de las notas. En este +caso, no use @code{\lyricsto} ni @code{\addlyrics} y no establezca un +valor para @code{associatedVoice}. Las sílabas se escriben como notas +-- pero sustituyendo los nombres de las notas por texto -- y la +duración de cada sílaba se escribe explícitamente después de la +sílaba. + +De forma predeterminada, las sílabas se alinean por la izquierda con +el momento musical correspondiente. Se pueden trazar líneas +separadores entre las sílabas, como es usual, pero no se pueden trazar +líneas extensoras cuando no hay una voz asociada. + +He aquí dos ejemplos: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g2 f + } + \new Lyrics \lyricmode { + play1 the4 game4 + } +>> +@end lilypond + + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + c2 c2 + d1 + } + } + \new Lyrics { + \lyricmode { + I2 like4. my8 cat!1 + } + } + \new Staff { + \relative c' { + c8 c c c c c c c + c8 c c c c c c c + } + } +>> +@end lilypond + +Esta técnica es muy útil cuando se escriben diálogos encima de la +música, véase @ref{Diálogos encima de la música}. + +Para centrar las sílabas sobre las notas en sus momentos musicales +correspondientes, ajuste @code{associatedVoice} al nombre del contexto +de voz que contiene dichas notas. Cuando está establecido el valor de +@code{associatedVoice}, se pueden usar tanto dobles guiones como +dobles barras bajas para trazar correctamente guiones separadores y +líneas extensoras bajos los melismas. + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g f g + } + \new Lyrics \lyricmode { + \set associatedVoice = #"melody" + play2 the4 game2. __ + } +>> +@end lilypond + +@c TODO see also feature request 707 - show how to do this with manual durations + +@seealso +Referencia de la notación: +@ref{Mantener vivos los contextos}. + +Referencia de funcionamiento interno: +@rinternals{Lyrics}, +@rinternals{Voice}. + + +@node Varias sílabas sobre una nota +@unnumberedsubsubsec Varias sílabas sobre una nota +@translationof Multiple syllables to one note + +@funindex _ +@cindex ligaduras en la letra +@cindex espacios en la letra +@cindex comillas en la letra + +Para asignar más de una sílaba a una única nota con espacios entre las +sílabas, podemos encerrar la frase entre comillas o utilizar un +carácter de guión bajo @code{_}. De forma alternativa, podemos usar +el símbolo de tilde curva (@code{~}) para obtener una ligadura de +texto. La ligadura de texto está implementada con el carácter Unicode +U+203F, por tanto debemos asegurarnos de usar una fuente tipográfica +para este glifo que realmente lo contenga. Algunas de las fuentes +tipográficas disponibles libremente con una ligadura de letra son, por +ejemplo, `FreeSerif' (un clon de Times), `DejaVuSans' (pero no +`DejaVuSerif') o `TeXGyreSchola' (un clon de Century Schoolbook). + +@lilypond[quote,ragged-right,verbatim] +{ + \time 3/4 + \relative c' { c2 e4 g2 e4 } + \addlyrics { gran- de_a- mi- go } + \addlyrics { pu- "ro y ho-" nes- to } + \addlyrics { pu- ro~y~ho- nes- to } +} +@end lilypond + + +@seealso +Referencia de funcionamiento interno: +@rinternals{LyricCombineMusic}. + + +@node Varias notas sobre una sílaba +@unnumberedsubsubsec Varias notas sobre una sílaba +@translationof Multiple notes to one syllable + +@cindex melisma +@cindex melismata +@cindex fraseo, en la letra +@funindex \melisma +@funindex \melismaEnd + +A veces, y sobre todo en la música medieval, varias notas se cantan +sobre una sílaba única; tales vocalizaciones reciben el nombre de +melismas, o melismata. La sílaba de un melisma se suele alinear por +la izquierda con la primera nota del melisma. + +Cuando se produce un melisma sobre una sílaba distinta de la última de +una palabra, dicha sílaba se suele unir a la siguiente con un guión +separador. Esto se indica en el código de entrada escribiendo un +doble guión, @code{--}, inmediatamente después de la sílaba. + +De forma alternativa, cuando se produce un melisma sobre la última o +sobre la única sílaba de una palabra, se suele trazar una línea +extensora desde el final de la sílaba hasta la última nota del +melisma. Esto se indica en el código de entrada escribiendo una doble +barra baja o carácter de subrayado, @code{__}, inmediatamente después +de la palabra. + +Existen cinco formas de indicar los melismas: + +@itemize + +@item +Se crean melismas automáticamente sobre las notas unidas mediante +ligadura de unión: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g2 ~ | + g4 e2 ~ | + e8 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +Se pueden crear melismas automáticamente a partir de la música +escribiendo ligaduras de expresión sobre las notas de cada melisma. +Ésta es la forma usual de escribir la letra: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 ( f e f ) + e8 ( d e2 ) + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +Se considera que las notas forman un melisma cuando se unen +manualmente mediante barra, siempre y cuando el barrado automático +esté desactivado. Véase @ref{Establecer el comportamiento de las +barras automáticas}. + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + \autoBeamOff + f4 g8[ f e f] + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond + +Claramente, esto no es adecuado para los melismas formados por notas +de duración más larga que la corchea. + +@item +Un grupo de notas sin ligadura de expresión se trata como un melisma +si están comprendidas entre @code{\melisma} y @code{\melismaEnd}. + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 + \melisma + f e f + \melismaEnd + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond + +Observe que este método no se puede usar para indicar dos melismas si +el primero va seguido inmediatamente por el otro. + +@item +Se puede definir un melisma enteramente dentro de la letra escribiendo +un carácter de barra baja suelto, @code{_}, por cada nota adicional +que se quiere añadir al melisma. + +@lilypond[verbatim, quote, relative=2] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 f e f + e8 d e2 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ _ _ e __ _ _ + } +>> +@end lilypond + +@end itemize + +Es posible tener ligaduras de unión o de expresión y barras manuales +en la melodía sin que indiquen melisma. Para hacerlo, ajuste el valor +de @code{melismaBusyProperties}: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e e -- le -- i -- son + } +>> +@end lilypond + +Se pueden usar otros valores para @code{melismaBusyProperties} si +queremos incluir o excluir selectivamente las ligaduras de unión, +ligaduras de expresión o barras de la detección automática +de los melismas; véase @code{melismaBusyProperties} +en el apartado @rinternals{Tunable context properties}. + +Como alternativa, si todas las indicaciones de melismas se van a +ignorar, se puede establecer @code{ignoreMelismata} al valor +verdadero; véase @ref{Versos con ritmos distintos}. + +Si se requiere un melisma en el transcurso de un pasaje en el que +@code{melismaBusyProperties} está activo, puede indicarse colocando +una sola barra baja en la letra por cada nota que se debe incluir +dentro del melisma: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] ~ f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ e __ _ _ _ + } +>> +@end lilypond + + +@predefined + +@code{\autoBeamOff}, +@code{\autoBeamOn}, +@code{\melisma}, +@code{\melismaEnd}. + +@seealso +Glosario musical: +@rglos{melisma}. + +Manual de aprendizaje: +@rlearning{Alineación de la letra a una melodía}. + +Referencia de la notación: +@ref{Alineación de la letra a una melodía}, +@ref{Duración automática de las sílabas}, +@ref{Establecer el comportamiento de las barras automáticas}, +@ref{Versos con ritmos distintos}. + +Referencia de funcionamiento interno: +@rinternals{Tunable context properties}. + +@knownissues + +No se crean automáticamente líneas extensoras bajo los melismas; se +deben insertar manualmente con un doble guión bajo. + + +@node Líneas de extensión y guiones +@unnumberedsubsubsec Líneas de extensión y guiones +@translationof Extenders and hyphens + +@cindex melisma +@cindex extensora, línea +@cindex línea de extensión + +@c TODO cf Multiple notes to one syllable; should this be merged in? + +@c leave this as samp. -gp +Los melismas se indican mediante una línea horizontal centrada entre +una sílaba y la siguiente. Esta línea recibe el nombre de línea de +extensión, y se escribe como @samp{ __ } (fíjese en los espacios antes +y después de los dos guiones bajos). + +@warning{Los melismas se indican en la partitura con líneas +extensoras, que se escriben con un doble guión bajo; pero también se +pueden introducir melismas cortos mediante saltos de notas +individuales, que se escriben como caracteres de guión bajo sueltos; +de forma predeterminada éstos no producen la impresión de una línea de +extensión.} + +@cindex guiones + +@c leave this as samp. -gp +Los guiones centrados se escriben como @samp{ -- } entre sílabas de +una misma palabra (fíjese en los espacios antes y después de los dos +guiones). El guión quedará centrado entre las sílabas, y su longitud +se ajustará en función del espacio que exista entre ellas. + +En la música grabada de modo muy apretado, se pueden quitar los +guiones. Se puede controlar si esto ocurre o no, mediante las +propiedades @code{minimum-distance} (distancia mínima entre las dos +sílabas) y la @code{minimum-length} (umbral por debajo del cual se +suprimen los guiones) de @code{LyricHyphen}. + + +@seealso +Referencia de funcionamiento interno: +@rinternals{LyricExtender}, +@rinternals{LyricHyphen}. + + +@node Técnicas específicas para la letra +@subsection Técnicas específicas para la letra +@translationof Techniques specific to lyrics + +@c TODO this whole section is to be reorganised + +@menu +* Trabajar con letra y variables:: +* Posicionamiento vertical de la letra:: +* Colocación horizontal de las sílabas:: +* Letra y repeticiones:: +* Letras en divisi:: +@end menu + + + +@node Trabajar con letra y variables +@unnumberedsubsubsec Trabajar con letra y variables +@translationof Working with lyrics and variables + +@cindex lyrics, using variables + +Se pueden crear variables que contienen letra, pero la letra se debe +introducir en el modo de letra: + +@lilypond[quote,verbatim] +musicOne = \relative c'' { + c4 b8. a16 g4. f8 e4 d c2 +} +verseOne = \lyricmode { + Joy to the world, the Lord is come. +} +\score { + << + \new Voice = "one" { + \time 2/4 + \musicOne + } + \new Lyrics \lyricsto "one" { + \verseOne + } + >> +} +@end lilypond + +No es necesario escribir las duraciones si la variables se va a +invocar con @code{\addlyrics} o con @code{\lyricsto}. + +Para disposiciones distintas o más complejas, la mejor forma es +definir en primer lugar las variables de la música y de la letra, +después preparar una jerarquía de pentagramas y letras, omitiendo la +letra en sí, y después poner la letra utilizando @code{\context} por +debajo. Esto asegura que las voces referenciadas por @code{\lyricsto} +siempre han sido definidas previamente. Por ejemplo: + +@lilypond[quote,verbatim] +sopranoMusic = \relative c'' { c4 c c c } +contraltoMusic = \relative c'' { a4 a a a } +sopranoWords = \lyricmode { Sop -- ra -- no words } +contraltoWords = \lyricmode { Con -- tral -- to words } + +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \sopranoMusic + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" + \new Staff { + \new Voice = "contraltos" { + \contraltoMusic + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + \sopranoWords + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + \contraltoWords + } + } + >> +} +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Posicionamiento vertical de la letra}. + +Referencia de funcionamiento interno: +@rinternals{LyricCombineMusic}, +@rinternals{Lyrics}. + + +@node Posicionamiento vertical de la letra +@unnumberedsubsubsec Posicionamiento vertical de la letra +@translationof Placing lyrics vertically + +@cindex posicionamiento de la letra +@cindex letra, posicionamiento + +Dependiendo del tipo de música, la letra puede colocarse sobre el +pentagrama, debajo del pentagrama, o entre dos pentagramas. Lo más +fácil es situar la letra debajo de la pauta asociada, y se puede +conseguir simplemente definiendo el contexto Lyrics por debajo del +contexto Staff: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Se puede colocar la letra sobre el pentagrama usando uno de los dos +métodos disponibles: el más sencillo (y preferible) es usar la misma +sintaxis que se ha visto más arriba y especificar explícitamente la +posición de la letra: + +@lilypond[quote,verbatim] +\score { + << + \new Staff = "staff" { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics \with { alignAboveContext = "staff" } { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Como alternativa, se puede usar un proceso en dos pasos. En primer +lugar se declara el contexto Lyrics (sin ningún contenido) antes de +los contextos Staff y Voice, y después se escribe la instrucción +@code{\lyricsto} después de la declaración de Voice a que hace +referencia, usando @code{\context}, como se ve a continuación: + +@lilypond[quote,verbatim] +\score { + << + \new Lyrics = "lyrics" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \context Lyrics = "lyrics" { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Cuando hay dos voces sobre pentagramas separados, la letra se puede +colocar entre ellos usando cualquiera de estos métodos. He aquí un +ejemplo del segundo método: + +@lilypond[quote,verbatim] +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \relative c'' { c4 c c c } + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "contraltos" { + \relative c'' { a4 a a a } + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + Sop -- ra -- no words + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + Con -- tral -- to words + } + } + >> +} +@end lilypond + +Es posible generar otras combinaciones de letra y pautas mediante la +elaboración de los ejemplos anteriores, o examinando las plantillas de +@rlearning{Conjuntos vocales} del manual de aprendizaje. + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{lyrics-old-spacing-settings.ly} + +@seealso +Manual de aprendizaje: +@rlearning{Conjuntos vocales}. + +Referencia de la notación: +@ref{Alinear los contextos}, +@ref{Crear contextos}. + +@node Colocación horizontal de las sílabas +@unnumberedsubsubsec Colocación horizontal de las sílabas +@translationof Placing syllables horizontally + +@cindex espaciado de la letra +@cindex letra, aumentar la separación + +Para aumentar la separación entre las líneas de texto, establezca la +propiedad @code{minimum-distance} de @code{LyricSpace}. + +@lilypond[relative=1,verbatim,quote,ragged-right] +{ + c c c c + \override Lyrics.LyricSpace #'minimum-distance = #1.0 + c c c c +} +\addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext +} +@end lilypond + +@noindent +Para efectuar este cambio en todas las letras de la partitura, ajuste +la propiedad dentro del bloque @code{\layout}. + +@lilypond[verbatim,quote,ragged-right] +\score { + \relative c' { + c c c c + c c c c + } + \addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext + } + \layout { + \context { + \Lyrics + \override LyricSpace #'minimum-distance = #1.0 + } + } +} +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{lyrics-alignment.ly} + +@c TODO: move to LSR -vv + +La comprobación necesaria para asegurar que las inscripciones de texto +están dentro de los márgenes, requiere cálculos adicionales. Para +acelerar ligeramente el procesado, se puede desactivar esta +funcionalidad: + +@example +\override Score.PaperColumn #'keep-inside-line = ##f +@end example + +Para hacer que el texto evite también las líneas divisorias, use + +@example +\layout @{ + \context @{ + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + \override BarLine #'transparent = ##t + @} +@} +@end example + +@c TODO Create and add lsr example of lyricMelismaAlignment +@c It's used like this to center-align all lyric syllables, +@c even when notes are tied. -td + +@ignore +\layout +{ + \context { \Score lyricMelismaAlignment = #0 } +} +@end ignore + + +@node Letra y repeticiones +@unnumberedsubsubsec Letra y repeticiones +@translationof Lyrics and repeats + +@cindex repeticiones y letra +@cindex letra, repeticiones + +@subheading Repeticiones sencillas + +Las repeticiones @emph{en la música} se describen extensamente en +alguna otra parte de este manual; véase @ref{Repeticiones}. Esta +sección explica cómo añadir letra a secciones de música que se +repiten. + +La letra que va con una sección de música que se repite, debiera estar +encerrada en la misma construcción de repeticiones exacta que la +música, si el texto no cambia. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> +} +@end lilypond + +El texto se expandirá correctamente de esta manera si las repeticiones +se despliegan. + +@lilypond[verbatim,quote] +\score { + \unfoldRepeats { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> + } +} +@end lilypond + +Si la sección repetida ha de desplegarse y tiene distinta letra, +escriba simplemente todo el texto: + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat unfold 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + The first time words. + Sec -- ond time words. + } + } + >> +} +@end lilypond + +Cuando el texto de las secciones de primera o segunda vez es distinto, +la letra de cada repetición se debe escribir dentro de contextos +@code{Lyrics} diferentes, +anidados correctamente en secciones paralelas: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics \lyricsto "melody" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "melody" + Sec -- ond time words. + } + >> + } + >> +} +@end lilypond + +Se pueden añadir más estrofas de una manera similar: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "singleVoice" { + \relative c'' { + a4 a a a + \repeat volta 3 { b4 b b b } + c4 c c c + } + } + } + \new Lyrics \lyricsto "singleVoice" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "singleVoice" + Sec -- ond time words. + } + \new Lyrics { + \set associatedVoice = "singleVoice" + The third time words. + } + >> + The end sec -- tion. + } + >> +} +@end lilypond + + +@c TODO positioning a common line of lyrics + +@subheading Repeticiones con finales alternativos (primera y segunda vez) + +@cindex letra, repeticiones con finales alternativos +@cindex letra, repeticiones con primera y segunda vez +@cindex repetición de la letra con finales alternativos +@cindex repetición de la letra con primera y segunda vez +@cindex finales alternativos y letra +@cindex primera y segunda vez y letra + +Si el texto de la sección repetida es el mismo, se puede usar +exactamente la misma estructura tanto para la letra como para la +música. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- } + \alternative { { ed twice. } { ed twice. } } + } + } + >> +} +@end lilypond + +@funindex \skip +@cindex saltar notas en la letra +@cindex letra, saltar notas + +Pero cuando la sección repetida tiene un texto distinto, no se puede +usar una construcción de repetición para el texto y es necesario +insertar manualmente instrucciones @code{\skip} +para saltar sobre las notas en las secciones +alternativas que no correspondan. + +Nota: no utilice un guión bajo, @code{_}, para saltar notas: el guión +bajo indica un melisma, y hace que la sílaba anterior resulte alineada +por la izquierda. + +@warning{La instrucción @code{@bs{}skip} debe ir seguida por un +número, pero este número se ignora dentro de la letra, que deriva las +duraciones de las notas de una melodía asociada a través de +@code{\addlyrics} o @code{\lyricsto}. Cada @code{@bs{}skip} salta una +sola nota de cualquier valor, independientemente del valor del número +que se escribe a continuación.} + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + The first time words. + \repeat unfold 2 { \skip 1 } + End here. + } + } + \new Lyrics { + \lyricsto "melody" { + Sec -- ond + \repeat unfold 2 { \skip 1 } + time words. + } + } + >> +} +@end lilypond + +@cindex letra y notas ligadas +@funindex \repeatTie + +Cuando una nota está ligada sobre dos o más finales alternativos +(sobre la primera nota de una casilla de primera y segunda vez), se +usa una ligadura de unión para arrastrar la nota dentro del primer +final alternativo y se usa una instrucción @code{\repeatTie} de +ligadura de repetición en las casillas de repetición siguientes. Esta +estructura produce problemas de alineación difíciles cuando hay letra +de por medio; aumentar la longitud de las secciones alternativas de +forma que las notas ligadas se vean contenidas completamente dentro de +ellas, puede ofrecer un resultado más aceptable. + +La ligadura de unión crea un melisma dentro de la casilla de primera +vez pero no en la segunda vez y siguientes; por tanto, para alinear la +letra correctamente es necesario inhabilitar la creación automática de +melismas sobre la sección de finales alternativos e insertar saltos +manuales. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \set melismaBusyProperties = #'() + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + \unset melismaBusyProperties + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + \repeat volta 2 { Here's a __ } + \alternative { + { \skip 1 verse } + { \skip 1 sec } + } + ond one. + } + } + >> +} +@end lilypond + +Observe que si se usa @code{\unfoldRepeats} sobre una sección que +contiene alguna @code{\repeatTie}, la @code{\repeatTie} se debe +eliminar para evitar que se impriman al mismo tiempo los dos tipos de +ligadura. + +Cuando la sección repetida tiene textos distintos, no se puede usar +@code{\repeat} para la letra y se deben insertar instrucciones +@code{\skip} manualmente, como se vio antes. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's one + \repeat unfold 2 { \skip 1 } + more to sing. + } + } + >> +} +@end lilypond + +Si queremos imprimir líneas extensoras y guiones que entran o salen de +las casillas de primera y segunda vez, hemos de insertarlos +manualmente. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's "a_" + \skip 1 + "_" sec -- ond one. + } + } + >> +} +@end lilypond + +@seealso +Referencia de la notación: +@ref{Mantener vivos los contextos}, +@ref{Repeticiones}. + + +@node Letras en divisi +@unnumberedsubsubsec Letras en divisi +@translationof Divisi lyrics + +@cindex dividida, letra +@cindex letra dividida + +Cuando solamente difieren las palabras y las duraciones de las dos +partes mientras que la altura de las notas es la misma, el método +adecuado puede ser la desactivación temporal de la detección +automática de los melismas e indicar el melisma dentro de la letra: + +@lilypond[quote,verbatim] +\score { + << + \new Voice = "melody" { + \relative c' { + \set melismaBusyProperties = #'() + \slurDown + \slurDashed + e4 e8 ( e ) c4 c | + \unset melismaBusyProperties + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "melody" { + We will _ + } + >> +} +@end lilypond + +Cuando difieren tanto la música como las palabras, puede ser mejor +imprimir la música y la letra que difieren mediante el nombrado de +contextos de voz y adjuntando la letra a estos contextos específicos: + +@lilypond[verbatim,ragged-right,quote] +\score { + << + \new Voice = "melody" { + \relative c' { + << + { + \voiceOne + e4 e8 e + } + \new Voice = "splitpart" { + \voiceTwo + c4 c + } + >> + \oneVoice + c4 c | + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "splitpart" { + We will + } + >> +} +@end lilypond + + +@node Versos +@subsection Versos +@translationof Stanzas + +@menu +* Añadir números de verso:: +* Añadir expresiones dinámicas a los versos:: +* Añadir el nombre de los cantantes a los versos:: +* Versos con ritmos distintos:: +* Imprimir los versos al final:: +* Imprimir los versos al final en varias columnas:: +@end menu + + +@node Añadir números de verso +@unnumberedsubsubsec Añadir números de verso +@translationof Adding stanza numbers + +@cindex verso, número de + +Los números de los versos se pueden añadir estableciendo +@code{stanza}, p.ej., + +@lilypond[quote,ragged-right,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set stanza = #"1. " + Hi, my name is Bert. +} \addlyrics { + \set stanza = #"2. " + Oh, ché -- ri, je t'aime +} +@end lilypond + + +@noindent +Estos números aparecerán inmediatamente antes de la primera sílaba. + +@c TODO Create and add snippet to show how two lines of a +@c stanza can be grouped together, along these lines: +@c (might need improving a bit) -td + +@ignore +leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup +#"brace105" } + +stanzaOneOne = { + \set stanza = \markup { "1. " \leftbrace } + \lyricmode { Child, you're mine and I love you. + Lend thine ear to what I say. + + } +} + +stanzaOneThree = { +% \set stanza = \markup { " "} + \lyricmode { Child, I have no great -- er joy + Than to have you walk in truth. + + } +} + +\new Voice { + \repeat volta 2 { c'8 c' c' c' c' c' c'4 + c'8 c' c' c' c' c' c'4 } +} \addlyrics { \stanzaOneOne } + \addlyrics { \stanzaOneThree } + +@end ignore + +@node Añadir expresiones dinámicas a los versos +@unnumberedsubsubsec Añadir expresiones dinámicas a los versos +@translationof Adding dynamics marks to stanzas + +Los versos que difieren en su sonoridad se pueden especificar +escribiendo una indicación dinámica antes de cada verso. En LilyPond, +todo lo que aparece delante de un verso está dentro del objeto +@code{StanzaNumber}; las indicaciones dinámicas no son diferentes. +Por razones técnicas, tendrá que establecer el valor de la sección +stanza (verso) fuera de @code{\lyricmode}: + +@lilypond[quote,ragged-right,verbatim] +text = { + \set stanza = \markup { \dynamic "ff" "1. " } + \lyricmode { + Big bang + } +} + +<< + \new Voice = "tune" { + \time 3/4 + g'4 c'2 + } +\new Lyrics \lyricsto "tune" \text +>> +@end lilypond + +@node Añadir el nombre de los cantantes a los versos +@unnumberedsubsubsec Añadir el nombre de los cantantes a los versos +@translationof Adding singers' names to stanzas + +@cindex cantante, nombre del +@cindex nombre del cantante + +También se pueden poner los nombres de los cantantes. Se imprimen al +comienzo de la línea, igual que los nombres de instrumento. Se crean +estableciendo un valor para @code{vocalName}. Se puede definir una +versión abreviada como @code{shortVocalName}. + +@lilypond[ragged-right,quote,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set vocalName = #"Bert " + Hi, my name is Bert. +} \addlyrics { + \set vocalName = #"Ernie " + Oh, ché -- ri, je t'aime +} +@end lilypond + + +@node Versos con ritmos distintos +@unnumberedsubsubsec Versos con ritmos distintos +@translationof Stanzas with different rhythms + +Con frecuencia, los distintos versos de una canción encajan de formas +ligeramente diferentes con la misma melodía. Estas variaciones se +pueden capturar con el uso de @code{\lyricsto}. + +@subsubheading Ignorar los melismas + +Existe la posibilidad de que el texto tenga un melisma en un verso, +pero varias sílabas en otro. Una solución es hacer que la voz más +rápida ignore el melisma. Esto se consigue estableciendo +@code{ignoreMelismata} en el contexto Lyrics. + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + \slurDotted + f8.[( g16]) + a4 + } + \new Lyrics \lyricsto "lahlah" { + more slow -- ly + } + \new Lyrics \lyricsto "lahlah" { + go + \set ignoreMelismata = ##t + fas -- ter + \unset ignoreMelismata + still + } +>> +@end lilypond + +@knownissues +A diferencia de casi todas las instrucciones @code{\set}, @code{\set +ignoreMelismata} no funciona si va precedido de @code{\once}. Es +necesario utilizar @code{\set} y @code{\unset} para delimitar la letra +en que se quieren ignorar los melismas. + +@subsubheading Aplicar sílabas a notas de adorno + +@cindex adorno, letra y notas de +@cindex letra sobre notas de adorno + + +De forma predeterminada, las notas de adorno (p.ej. insertadas por +medio de @code{\grace}) no pueden recibirla asignación de sílabas si +se utiliza @code{\lyricsto}, pero este comportamiento puede cambiarse: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + f4 \appoggiatura a32 b4 + \grace { f16[ a16] } b2 + \afterGrace b2 { f16[ a16] } + \appoggiatura a32 b4 + \acciaccatura a8 b4 + } + \new Lyrics + \lyricsto melody { + normal + \set includeGraceNotes = ##t + case, + gra -- ce case, + after -- grace case, + \set ignoreMelismata = ##t + app. case, + acc. case. + } +>> +@end lilypond + +@knownissues +Como ocurre con @code{associatedVoice}, @code{includeGraceNotes} se +tiene que establecer al menos una sílaba antes de la que se va a +colocar bajo una nota de adorno. Para el caso de una nota de adorno +al comienzo mismo de una pieza, considere la posibilidad de usar un +bloque @code{\with} o @code{\context}: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + \grace { c16[( d e f] } + g1) f + } + \new Lyrics \with { includeGraceNotes = ##t } + \lyricsto melody { + Ah __ fa + } +>> +@end lilypond + +@subsubheading Cambio a una melodía alternativa + +@cindex associatedVoice +@cindex melodía alternativa, cambio a una + +Son posibles variaciones más complejas en la coordinación de la letra +y la música. La melodía a la que se está alineando la letra puede +cambiarse desde dentro de la letra mediante el establecimiento de la +propiedad @code{associatedVoice}: + +@lilypond[verbatim,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + << + \new Voice = "alternative" { + \voiceOne + \times 2/3 { + % show associations clearly. + \override NoteColumn #'force-hshift = #-3 + f8 f g + } + } + { + \voiceTwo + f8.[ g16] + \oneVoice + } >> + a8( b) c + } + \new Lyrics \lyricsto "lahlah" { + Ju -- ras -- sic Park + } + \new Lyrics \lyricsto "lahlah" { + % Tricky: need to set associatedVoice + % one syllable too soon! + \set associatedVoice = "alternative" % applies to "ran" + Ty -- + ran -- + no -- + \set associatedVoice = "lahlah" % applies to "rus" + sau -- rus Rex + } >> +@end lilypond + +@noindent +El texto del primer verso se fija a la melodía llamada @q{lahlah} de +la forma usual, pero el segundo verso se fija inicialmente al contexto +@code{lahlah} y después se cambia a la melodía @code{alternative} para +las sílabas desde @q{ran} hasta @q{sau} mediante las líneas: + +@example +\set associatedVoice = "alternative" % se aplica a "ran" +Ty -- +ran -- +no -- +\set associatedVoice = "lahlah" % se aplica a "rus" +sau -- rus Rex +@end example + +@noindent +Aquí, @code{alternative} es el nombre del contexto de @code{Voice} que +contiene el tresillo. + +Observe la posición de la instrucción @code{\set associatedVoice}: +parece estar situada una sílaba antes de lo normal, pero está bien +así. + +@warning{La instrucción @code{\set associatedVoice} se debe escribir +una sílaba @emph{antes} de aquella en la que queremos que se produzca +el cambio a la voz nueva. Dicho de otra forma, el cambio de la voz +asociada se produce una sílaba más tarde de lo esperado. Esto es por +razones técnicas, y no es un fallo.} + + +@node Imprimir los versos al final +@unnumberedsubsubsec Imprimir los versos al final +@translationof Printing stanzas at the end + +En ocasiones es conveniente tener un verso ajustado a la música, y el +resto añadido en forma de estrofa al final de la pieza. Esto se puede +conseguir escribiendo los versos adicionales dentro de una sección +@code{\markup} fuera del bloque Score principal de la partitura. +Tenga en cuenta que existen dos formas distintas de forzar los saltos +de línea al utilizar @code{\markup}. + +@lilypond[ragged-right,verbatim,quote] +melody = \relative c' { +e d c d | e e e e | +d d e d | c1 | +} + +text = \lyricmode { +\set stanza = #"1." Ma- ry had a lit- tle lamb, +its fleece was white as snow. +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text +>> + \layout { } +} +\markup { \column{ + \line{ Verse 2. } + \line{ All the children laughed and played } + \line{ To see a lamb at school. } + } +} +\markup{ + \wordwrap-string #" + Verse 3. + + Mary took it home again, + + It was against the rule." +} +@end lilypond + + +@node Imprimir los versos al final en varias columnas +@unnumberedsubsubsec Imprimir los versos al final en varias columnas +@translationof Printing stanzas at the end in multiple columns + +Cuando una pieza tiene muchos versos, a menudo se imprimen en varias +columnas a lo largo de toda la página. Con frecuencia un número de +verso fuera del margen precede a cada verso. El ejemplo siguiente +muestra cómo producir dicha salida en LilyPond. + +@lilypond[ragged-right,quote,verbatim] +melody = \relative c' { + c c c c | d d d d +} + +text = \lyricmode { + \set stanza = #"1." This is verse one. + It has two lines. +} + +\score { + << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text + >> + \layout { } +} + +\markup { + \fill-line { + \hspace #0.1 % moves the column off the left margin; + % can be removed if space on the page is tight + \column { + \line { \bold "2." + \column { + "This is verse two." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "3." + \column { + "This is verse three." + "It has two lines." + } + } + } + \hspace #0.1 % adds horizontal spacing between columns; + % if they are still too close, add more " " pairs + % until the result looks good + \column { + \line { \bold "4." + \column { + "This is verse four." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "5." + \column { + "This is verse five." + "It has two lines." + } + } + } + \hspace #0.1 % gives some extra space on the right margin; + % can be removed if page space is tight + } +} +@end lilypond + + +@seealso +Referencia de funcionamiento interno: +@rinternals{LyricText}, +@rinternals{StanzaNumber}. + + +@node Canciones +@subsection Canciones +@translationof Songs + +@menu +* Referencias para canciones:: +* Hojas guía de acordes:: +@end menu + +@node Referencias para canciones +@unnumberedsubsubsec Referencias para canciones +@translationof References for songs + +Por lo general, las canciones se escriben sobre tres pentagramas con +la melodía del cantante en el pentagrama superior y dos pentagramas de +acompañamiento de piano en la parte inferior. La letra del primer +verso se imprime inmediatamente debajo del pentagrama superior. Si +existe solamente una pequeña cantidad de versos adicionales, pueden +imprimirse inmediatamente debajo del primero, pero si hay más versos +de los que caben cómodamente allí, el segundo verso y siguientes se +imprimen después de la música, como texto independiente. + +Todos los elementos notacionales necesarios para escribir canciones se +describen completamente en otras secciones de la documentación: + +@itemize + +@item +Para montar la disposición de las pautas, véase @ref{Impresión de los +pentagramas}. + +@item +Para escribir música para piano, véase @ref{Teclados y otros +instrumentos de varios pentagramas}. + +@item +Para imprimir la letra de una línea melódica, véase @ref{Notación +común para música vocal}. + +@item +Para colocar la letra, véase @ref{Posicionamiento vertical de la +letra}. + +@item +Para escribir versos véase @ref{Versos}. + +@item +Las canciones se imprimen frecuentemente con los acordes indicados +mediante cifrado americano (los nombres de los acordes en letras +mayúsculas) sobre las pautas. Esto se describe en +@ref{Imprimir los acordes}. + +@item +Para imprimir diagramas de posiciones de los acordes para +el acompañamiento de guitarra o para otros instrumentos con trastes en +el mástil, consulte @qq{Marcados de diagramas de posiciones de acorde} +dentro de @ref{Notación común para cuerdas con trastes}. + +@end itemize + +@seealso +Manual de aprendizaje: +@rlearning{Canciones}. + +Referencia de la notación: +@ref{Notación común para música vocal}, +@ref{Imprimir los acordes}, +@ref{Impresión de los pentagramas}, +@ref{Teclados y otros instrumentos de varios pentagramas}, +@ref{Posicionamiento vertical de la letra}, +@ref{Versos}. + +Fragmentos de código: +@rlsr{Vocal music}. + +@node Hojas guía de acordes +@unnumberedsubsubsec Hojas guía de acordes +@translationof Lead sheets + +Se pueden imprimir hojas guía de acordes combinando partes vocales y +el @q{modo de acordes}; esta sintaxis se explica en +@ref{Notación de acordes}. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + +@seealso +Referencia de la notación: +@ref{Chord notation}. + + +@node Música coral +@subsection Música coral +@translationof Choral + +@cindex anthems +@cindex partes cantadas +@cindex oratorios +@cindex SATB + +Esta sección trata los asuntos de notación más directamente +relacionados con la música coral. Esto incluye los anthems, las +canciones por partes, los oratorios, etc. + +@menu +* Referencias para música coral:: +* Disposiciones de la partitura para música coral:: +* Voces divididas:: +@end menu + +@node Referencias para música coral +@unnumberedsubsubsec Referencias para música coral +@translationof References for choral + +La notación de música coral se realiza normalmente sobre dos, tres o +cuatro pentagramas dentro de un grupo de pautas @code{ChoirStaff}. Si +se necesita un acompañamiento, se sitúa debajo dentro de un grupo +@code{PianoStaff}, que se suele reducir de tamaño en las obras corales +@emph{a capella}. Las notas de cada parte vocal se sitúan dentro de +un contexto @code{Voice}, y cara pentagrama recibe o una sola parte +vocal (es decir, una @code{Voice}) o un par de partes vocales (es +decir, dos @code{Voice}s). + +Los textos se disponen en contextos @code{Lyrics}, bien debajo de cada +pauta de música correspondiente, o bien una encima y una debajo de la +pauta de música, si ésta contiene la música de las dos partes. + +En otras partes del manual se describen completamente algunos otros +temas sobre música coral: + +@itemize + +@item +Hay una introducción a la creación de partituras vocales SATB en el +Manual de aprendizaje, véase @rlearning{Partitura vocal a cuatro voces +SATB}. + +@item +También en el Manual de aprendizaje hay varias plantillas adecuadas +para diversos estilos de música coral, véase @rlearning{Conjuntos +vocales}. + +@item +Para ver más información acerca de @code{ChoirStaff} y +@code{PianoStaff}, consulte @ref{Agrupar pentagramas}. + +@item +Las figuras con cabezas de formas, como las que se usan en la notación +del estilo Arpa Sacra y otros similares, se describen en @ref{Cabezas +de notas con formas diversas}. + +@item +Cuando dos partes vocales comparten un pentagrama, las plicas, +ligaduras, etc. de la parte aguda se orientan hacia arriba, y los de +la parte grave hacia abajo. Para hacerlo, utilice @code{\voiceOne} y +@code{\voiceTwo}. Véase @ref{Polifonía en un solo pentagrama}. + +@end itemize + +@predefined +@code{\oneVoice}, +@code{\voiceOne}, +@code{\voiceTwo}. + +@seealso +Manual de aprendizaje: +@rlearning{Partitura vocal a cuatro voces SATB}, +@rlearning{Conjuntos vocales}. + +Referencia de la notación: +@ref{Orden de disposición de los contextos}, +@ref{Agrupar pentagramas}, +@ref{Cabezas de notas con formas diversas}, +@ref{Polifonía en un solo pentagrama}. + +Fragmentos de código: +@rlsr{Vocal music}. + +Referencia de funcionamiento interno: +@rinternals{ChoirStaff}, +@rinternals{Lyrics}, +@rinternals{PianoStaff}. + +@node Disposiciones de la partitura para música coral +@unnumberedsubsubsec Disposiciones de la partitura para música coral +@translationof Score layouts for choral + +La música coral que contiene cuatro pentagramas, con o sin +acompañamiento de piano, se suele disponer con dos sistemas por +página. Dependiendo del tamaño de la página, conseguirlo puede +requerir cambios en ciertos ajustes predeterminados. Se deben tener +en cuenta los siguientes ajustes: + +@itemize + +@item +Se puede modificar el tamaño global de pentagrama para alterar el +tamaño general de los elementos de la partitura. Véase +@ref{Establecer el tamaño del pentagrama}. + +@item +Las diferentes distancias entre sistemas, pentagramas y líneas de +texto se pueden ajustar de manera independiente. Véase @ref{Espaciado +vertical}. + +@item +Se pueden imprimir las dimensiones de las variables de disposición +verticales como ayuda para el ajuste del espaciado vertical. Esta y +otras posibilidades para hacer encajar la música en un número de +páginas menor, se describen en @ref{Encajar la música en menos +páginas}. + +@item +Si el número de sistemas por página cambia de uno a dos, es costumbre +indicarlo mediante una marca separadora de sistemas entre los dos +sistemas. Véase @ref{Separación de sistemas}. + +@item +Para ver más detalles sobre otras propiedades de formateo de las +páginas, consulte @ref{Disposición de la página}. + +@end itemize + + +Las indicaciones dinámicas se colocan por omisión debajo del +pentagrama, pero en la música coral se suelen situar encima del +pentagrama para evitar las colisiones con el texto. La instrucción +predefinida @code{\dynamicUp} hace esta tarea para las indicaciones +dinámicas en un único contexto @code{Voice}. Si hay muchos contextos +de voz, esta instrucción predefinida tendría que colocarse en cada uno +de ellos. Como alternativa, se puede usar su forma expandida para +poner las indicaciones dinámicas de toda la partitura encima de sus +pautas respectivas, como se muestra aquí: + +@lilypond[verbatim,quote] +\score { + \new ChoirStaff << + \new Staff { + \new Voice { + \relative c'' { g4\f g g g } + } + } + \new Staff { + \new Voice { + \relative c' { d4 d d\p d } + } + } + >> + \layout { + \context { + \Score + \override DynamicText #'direction = #UP + \override DynamicLineSpanner #'direction = #UP + } + } +} +@end lilypond + +@predefined +@code{\dynamicUp}, @code{\dynamicDown}, @code{\dynamicNeutral}. + +@seealso +Referencia de la notación: +@ref{Cambiar el espaciado}, +@ref{Mostrar el espaciado}, +@ref{Encajar la música en menos páginas}, +@ref{Disposición de la página}, +@ref{Disposición de la partitura}, +@ref{Separación de sistemas}, +@ref{Establecer el tamaño del pentagrama}, +@ref{Utilizar una voz adicional para los saltos de línea}, +@ref{Espaciado vertical}. + +Referencia de funcionamiento interno: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Voces divididas +@unnumberedsubsubsec Voces divididas +@translationof Divided voices + +@cindex voces divididas + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-arpeggiobracket-to-make-divisi-more-visible.ly} + +@seealso +Referencia de la notación: +@ref{Expresiones como líneas}. + + +@node Ópera y musicales +@subsection Ópera y musicales +@translationof Opera and stage musicals + +La música, letra y diálogos de las óperas y musicales se disponen +normalmente de una o más de las siguientes formas: + +@itemize + +@item +Una @emph{Partitura del director} que contiene todas las partes +orquestales y vocales, junto a notas guía del libreto si existen +pasajes hablados. + +@item +@emph{Particellas orquestales} que contienen la música de los +instrumentos individuales de la orquesta o banda. + +@item +Una @emph{Partitura vocal} que contiene todas las partes vocales con +acompañamiento de piano. El acompañamiento es normalmente una +reducción de orquesta, y en este caso es frecuente indicar el nombre +del instrumento original de la orquesta. Las partituras vocales a +veces incluyen indicaciones de escena y notas guía del libreto. + +@item +Un @emph{Libro vocal} que contiene sólo las partes vocales (sin +acompañamiento), a veces en combinación con el libreto. + +@item +Un @emph{Libreto} que contiene los diálogos completos que normalmente +hay en los musicales, junto a la letra de las partes cantadas. Suelen +incluirse también las indicaciones de escena. Se puede utilizar +LilyPond para tipografiar libretos, pero dado que no contienen música, +puede ser preferible algún método alternativo. + +@end itemize + +En la sección de referencias que aparece a continuación están +relacionadas las secciones de la documentación de LilyPond que se +ocupan de los temas necesarios para crear partituras en los estilos +habituales de la ópera y los musicales. Después aparecen secciones +que cubren las técnicas peculiares de la tipografía musical de las +partituras de ópera y de musicales. + +@menu +* Referencias para ópera y musicales:: +* Nombres de los personajes:: +* Guías musicales:: +* Música hablada:: +* Diálogos encima de la música:: +@end menu + +@node Referencias para ópera y musicales +@unnumberedsubsubsec Referencias para ópera y musicales +@translationof References for opera and stage musicals +@itemize + +@item +Una partitura de director contiene muchos pentagramas y legras +agrupados. En @ref{Agrupar pentagramas} se explican maneras de +agrupar pentagramas. Para anidar unos grupos dentro de otros, +consulte @ref{Grupos de pentagramas anidados}. + +@item +La impresión de pentagramas vacíos en las partituras del director y +vocales se suele inhibir. Para crear estas partituras, conocidas como +@qq{Partituras francesas} consulte @ref{Ocultar pentagramas}. + +@item +La escritura de partituras orquestales se estudia en @ref{Escritura de +las particellas}. Pueden ser de relevancia otras secciones del +capítulo de Notación especializada, dependiendo de la orquestación +utilizada. Muchos instrumentos son transpositores, consulte +@ref{Transposición de los instrumentos}. + +@item +Si el número de sistemas por página varía de una a otra página, es +costumbre separar los sistemas con una marca separadora de sistemas. Véase +See @ref{Separación de sistemas}. + +@item +Para ver detalles acerca de otras propiedades de formateo de las +páginas, consulte @ref{Disposición de la página}. + +@item +Las notas guía de los diálogos y las instrucciones de escena se pueden +insertar con elementos de marcado. Véase @ref{Texto}. Se pueden +insertar indicaciones de escena extensas con una sección de marcado +independiente entre dos bloques @code{\score}. Véase @ref{Texto +separado}. + +@end itemize + +@seealso +Glosario musical: +@rglos{Frenched score}, +@rglos{Frenched staves}, +@rglos{transposing instrument}. + +Referencia de la notación: +@ref{Agrupar pentagramas}, +@ref{Ocultar pentagramas}, +@ref{Transposición de los instrumentos}, +@ref{Grupos de pentagramas anidados}, +@ref{Disposición de la página}, +@ref{Separación de sistemas}, +@ref{Transposición}, +@ref{Escritura de las particellas}, +@ref{Escritura del texto}. + +Snippets: +@rlsr{Vocal music}. + + +@node Nombres de los personajes +@unnumberedsubsubsec Nombres de los personajes +@translationof Character names + +@cindex personajes, nombres +@cindex nombres de personajes + +Se suelen mostrar los nombres de los personajes a la izquierda del +pentagrama cuando éste está dedicado a dicho personaje solamente: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \set Staff.vocalName = \markup \smallCaps Kaspar + \set Staff.shortVocalName = \markup \smallCaps Kas. + \relative c' { + \clef "G_8" + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \set Staff.vocalName = \markup \smallCaps Melchior + \set Staff.shortVocalName = \markup \smallCaps Mel + \clef "bass" + \relative c' { + a4 a a a + a4 a a a + } + } + >> +} +@end lilypond + +Cuando dos o más personajes comparten un pentagrama, el nombre del +personaje se suele imprimir encima del pentagrama al principio de cada +sección correspondiente a dicho personaje. Esto se puede hacer con +elementos de marcado. Con frecuencia se usa un tipo de letra especial +para este propósito. + +@lilypond[quote,verbatim,relative=1] +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +\clef "bass" +a4^\markup \fontsize #1 \smallCaps Melchior +a a a +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +@end lilypond + +Como alternativa, si hay muchos cambios de personajes, puede ser más +fácil establecer definiciones de @qq{instrumentos} para cada +instrumento en el nivel superior de la sintaxis, de forma que se puede +usar @code{\instrumentSwitch} para indicar cada uno de los cambios. + +@lilypond[quote,verbatim] +\addInstrumentDefinition #"kaspar" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Kas.") + (clefGlyph . "clefs.G") + (clefOctavation . -7) + (middleCPosition . 1) + (clefPosition . -2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar")) + (midiInstrument . "voice oohs")) + +\addInstrumentDefinition #"melchior" + #`((instrumentTransposition . ,(ly:make-pitch 0 0 0)) + (shortInstrumentName . "Mel.") + (clefGlyph . "clefs.F") + (clefOctavation . 0) + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior")) + (midiInstrument . "voice aahs")) + +\relative c' { + \instrumentSwitch "kaspar" + c4 c c c + \instrumentSwitch "melchior" + a4 a a a + \instrumentSwitch "kaspar" + c4 c c c +} +@end lilypond + +@seealso +Referencia de la notación: +@ref{Nombres de instrumentos}, +@ref{Funciones de Scheme}, +@ref{Texto}, +@ref{Instrucciones de marcado de texto}. + +Extender LilyPond: +@rextend{Construcción de elementos de marcado en Scheme}. + +@node Guías musicales +@unnumberedsubsubsec Guías musicales +@translationof Musical cues + +@cindex guías musicales +@cindex musicales, guías + +Se pueden insertar guías musicales en las partituras vocales, en los +libros vocales y en las partes orquestales para indicar qué música de +otra parte precede inmediatamente a una entrada. Asimismo, las guías +se suelen insertar en la reducción de piano en las partituras vocales +para indicar lo que está tocando cada parte orquestas. Esto sirve de +ayuda al director cuando no está disponible una partitura del +director. + +El mecanismo básico para insertar guías se explica de forma exhaustiva +en el texto principal, véase @ref{Citar otras voces} y @ref{Formateo +de las notas guía}. Pero cuando se deben insertar muchas guías, por +ejemplo, como ayuda para el director en una partitura vocal, el nombre +del instrumento se debe colocar cuidadosamente justo antes del +comienzo de las notas guía, y cerca de ellas. El siguiente ejemplo +muestra cómo se hace esto. + +@lilypond[quote,verbatim] +flute = \relative c'' { + s4 s4 e g +} +\addQuote "flute" { \flute } + +pianoRH = \relative c'' { + c4. g8 + % position name of cue-ing instrument just before the cue notes, + % and above the staff + s1*0^\markup { \right-align { \tiny "Flute" } } + \cueDuring "flute" #UP { g4 bes4 } +} +pianoLH = \relative c { c4 e, } + +\score { + \new PianoStaff << + \new Staff { + \pianoRH + } + \new Staff { + \clef "bass" + \pianoLH + } + >> +} +@end lilypond + +Si un instrumento transpositor se está citando, la parte instrumental +debe especificar la tonalidad de manera que la conversión de las notas +citadas se realice automáticamente. El ejemplo de abajo muestra esta +transposición para un clarinete en Si bemol. Las notas de este +ejemplo son bajas en el pentagrama, por lo que se especifica +@code{#DOWN} en @code{\cueDuring} (para que las plicas se orienten +hacia abajo) y el nombre del instrumento se coloca debajo del +pentagrama. Observe también que la voz de la mano derecha del piano +está declarada explícitamente. Esto es así porque las notas citadas en +este ejemplo comienzan al principio del primer compás y en caso +contrario produciría que todas las notas de la mano derecha del piano +se situaran dentro de un contexto @code{CueVoice}. + +@lilypond[quote,verbatim] +clarinet = \relative c' { + \transposition bes + fis4 d d c +} +\addQuote "clarinet" { \clarinet } + +pianoRH = \relative c'' { + \transposition c' + % position name of cue-ing instrument below the staff + s1*0_\markup { \right-align { \tiny "Clar." } } + \cueDuring "clarinet" #DOWN { c4. g8 } + g4 bes4 +} +pianoLH = \relative c { c4 e, } + +\score { + << + \new PianoStaff << + \new Staff { + \new Voice { + \pianoRH + } + } + \new Staff { + \clef "bass" + \pianoLH + } + >> + >> +} +@end lilypond + +A partir de estos dos ejemplos debería quedar claro que insertar +muchas notas guía en una partitura vocal puede ser +tedioso, y la visión de las notas de la parte de piano quedaría +entorpecida. Sin embargo, como +muestra el siguiente fragmento de código, es posible definir una +función musical para reducir la cantidad de texto que se teclea y para +hacer que las notas del piano estén más claras. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{adding-orchestral-cues-to-a-vocal-score.ly} + +@seealso +Glosario musical: +@rglos{cue-notes}. + +Referencia de la notación: +@ref{Alineación de objetos}, +@ref{Dirección y posición}, +@ref{Formateo de las notas guía}, +@ref{Citar otras voces}, +@ref{Uso de las funciones musicales}. + +Fragmentos de código: +@rlsr{Vocal music}. + +Referencia de funcionamiento interno: +@rinternals{InstrumentSwitch}, +@rinternals{CueVoice}. + +@knownissues +@code{\cueDuring} inserta automáticamente un contexto @code{CueVoice} +y todas las notas guía se colocan dentro de este contexto. Ello +significa que no es posible tener dos secuencias de notas guía +superpuestas mediante esta técnica. Las secuencias superpuestas se +podrían introducir declarando explícitamente contextos @code{CueVoice} +separados y usando @code{\quoteDuring} para extraer e insertar las +notas citadas. + + +@node Música hablada +@unnumberedsubsubsec Música hablada +@translationof Spoken music + +@cindex parlato +@cindex Sprechgesang + +Efectos tales como el @q{parlato} o el @q{Sprechgesang} requieren que +los intérpretes hablen sin altura definida pero con el ritmo adecuado; +la notación de estos estilos se realiza mediante figuras con la cabeza +en forma de cruz, como se muestra en @ref{Cabezas de nota especiales}. + +@c TODO add "marking-notes-on-spoken-parts" snippet -vv +@c add "showing the rhythm of a melody" snip +@c add "one staff-line notation" +@c add "improvisation" ref +@c add "lyrics independents of notes" ref + +@node Diálogos encima de la música +@unnumberedsubsubsec Diálogos encima de la música +@translationof Dialogue over music + +Los diálogos sobre la música se imprimen normalmente por encima de los +pentagramas en un estilo inclinado, con el comienzo de cada frase +ligado a un momento musical en particular. + +Para interjecciones cortas, basta un simple elemento de marcado. + +@lilypond[quote,verbatim,relative=2] +a4^\markup { \smallCaps { Alex - } \italic { He's gone } } a a a +a4 a a^\markup { \smallCaps { Bethan - } \italic Where? } a +a4 a a a +@end lilypond + +Para frases más largas puede ser necesario expandir la música de forma +que que las palabras quepan holgadamente. No está previsto en +LilyPond hacer esto de manera completamente automática, y puede ser +necesaria cierta intervención manual sobre la disposición. + +Para frases largas o pasajes con un diálogo en disposición apretada, +puede dar mejores resultados la utilización de un contexto de letra. +El contexto Lyrics no se debe asociar con una voz musical; en vez de +ello, cada sección del diálogo recibe una duración explícita. Si hay +una pausa en medio del diálogo, se debe separar la palabra final del +resto y dividirse la duración entre ellas de forma que la música +subyacente reciba un espaciado continuo y adecuado. + +Si el diálogo se extiende a más de una línea, será necesario insertar +@code{\break}s manualmente y ajustar la colocación del diálogo para +evitar que se extienda más allá del margen derecho. La última palabra +del último compás de una línea debe separarse también, como se ha +visto antes. + +He aquí un ejemplo que ilustra cómo puede hacerse. + +@c This should be a snippet, but it can't be as it needs to be +@c manually adjusted to suit the imposed line length. -td + +@lilypond[quote,verbatim,ragged-right] +music = \relative c'' { + \repeat unfold 3 { a4 a a a } +} + +dialogue = \lyricmode { + \markup { + \fontsize #1 \upright \smallCaps Abe: + "Say this over measures one and" + }4*7 + "two"4 | + \break + "and this over measure"4*3 + "three"4 | +} + +\score { + << + \new Lyrics \with { + \override LyricText #'font-shape = #'italic + \override LyricText #'self-alignment-X = #LEFT + } + { \dialogue } + \new Staff { + \new Voice { \music } + } + >> +} +@end lilypond + +@c TODO show use of \column to produce dialogue on two lines + +@seealso +Referencia de la notación: +@ref{Duración manual de las sílabas}, +@ref{Texto}. + +Referencia de funcionamiento interno: +@rinternals{LyricText}. + + +@node Cánticos salmos e himnos +@subsection Cánticos salmos e himnos +@translationof Chants psalms and hymns + +@cindex cánticos +@cindex salmos +@cindex himnos +@cindex música religiosa + +La música y la letra de los cánticos, salmos e himnos suelen seguir un +formato bien establecido dentro de cualquier iglesia en particular. +Aunque los formatos pueden diferir de una iglesia a otra, los +problemas de tipografiado que surgen son bastante similares, y se +estudian en esta sección. + +@menu +* Referencias para cánticos y salmos:: +* Preparar un cántico:: +* Puntuación de un salmo:: +* Compases parciales en melodías de himno:: +@end menu + +@node Referencias para cánticos y salmos +@unnumberedsubsubsec Referencias para cánticos y salmos +@translationof References for chants and psalms + +El tipografiado del canto gregoriano en distintos estilos de notación +antigua se describe en @ref{Notación antigua}. + +@seealso +Referencia de la notación: +@ref{Notación antigua}. + +Snippets: +@rlsr{Vocal music}. + + +@node Preparar un cántico +@unnumberedsubsubsec Preparar un cántico +@translationof Setting a chant + +La preparación moderna de los cánticos utiliza notación moderna con un +número variable de elementos tomados de la notación antigua. Algunos +de los elementos y métodos que considerar se presentan aquí. + +Los cánticos usan con frecuencia figuras negras sin plica para indicar +la altura, tomando las duraciones del ritmo hablado del texto. + +@lilypond[verbatim,quote] +stemOff = { \override Staff.Stem #'transparent = ##t } + +\relative c' { + \stemOff + a'4 b c2 | +} + +@end lilypond + +Los cánticos con frecuencia omiten las líneas divisorias o utilizan +barras de compás recortadas o discontinuas para indicar pausas en la +música. Para omitir todas las barras de compás de todos los +pentagramas, suprima completamente el grabador de barras: + +@lilypond[verbatim,quote] +\score { + \new StaffGroup << + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +Las líneas divisorias también se pueden quitar pentagrama a +pentagrama: + +@lilypond[verbatim, quote] +\score { + \new ChoirStaff << + \new Staff + \with { \remove Bar_engraver } { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> +} +@end lilypond + +Para suprimir las líneas divisorias sólo de una sección de música, +trátela como si fuera una cadencia. Si la sección es larga, podría +necesitar insertar líneas divisorias @qq{mudas} con @code{\bar ""} +para indicar dónde se debe producir el salto de línea. + +@lilypond[verbatim,quote,relative=2] +a4 b c2 | +\cadenzaOn +a4 b c2 +a4 b c2 +\bar "" +a4 b c2 +a4 b c2 +\cadenzaOff +a4 b c2 | +a4 b c2 | +@end lilypond + +Los silencios o pausas en los cánticos pueden indicarse mediante +barras de compás modificadas. + +@lilypond[verbatim, quote,relative=2] +a4 +\cadenzaOn +b c2 +a4 b c2 +\bar "'" +a4 b c2 +a4 b c2 +\bar ":" +a4 b c2 +\bar "dashed" +a4 b c2 +\bar "||" +@end lilypond + +Como alternativa, se usa a veces la notación del canto gregoriano para +las pausas o silencios, aunque el resto de la notación sea moderna. +Este ejemplo utiliza una marca @code{\breathe} modificada: + +@lilypond[verbatim,quote] +divisioMinima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaior = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaxima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +finalis = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis + \once \override BreathingSign #'Y-offset = #0 + \breathe +} + +\score { + \relative c'' { + g2 a4 g + \divisioMinima + g2 a4 g + \divisioMaior + g2 a4 g + \divisioMaxima + g2 a4 g + \finalis + } + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +Los cánticos suelen omitir la indicación de compás y con frecuencia +omiten la clave también. + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \layout { + \context { + \Staff + \remove Bar_engraver + \remove Time_signature_engraver + \remove Clef_engraver + } + } +} +@end lilypond + +Los cánticos de salmos en la tradición anglicana suelen ser +@emph{sencillos}, con siete compases de música, o @emph{dobles}, con +dos períodos de siete compases. Cada grupo de siete compases se +divide en dos mitades, que corresponden a las dos mitades de cada +verso, normalmente separados mediante una doble línea divisoria. Sólo +se utilizan redondas y blancas. El primer compás de cada mitad +siempre contiene un único acorde en redondas. Ésta es la @qq{nota de +recitado}. Los cánticos se suelen centrar sobre la página. + +@lilypond[verbatim,quote] +SopranoMusic = \relative g' { + g1 | c2 b | a1 | \bar "||" + a1 | d2 c | c b | c1 | \bar "||" +} + +AltoMusic = \relative c' { + e1 | g2 g | f1 | + f1 | f2 e | d d | e1 | +} + +TenorMusic = \relative a { + c1 | c2 c | c1 | + d1 | g,2 g | g g | g1 | +} + +BassMusic = \relative c { + c1 | e2 e | f1 | + d1 | b2 c | g' g | c,1 | +} + +global = { + \time 2/2 +} + +% Use markup to center the chant on the page +\markup { + \fill-line { + \score { % centered + << + \new ChoirStaff << + \new Staff << + \global + \clef "treble" + \new Voice = "Soprano" << + \voiceOne + \SopranoMusic + >> + \new Voice = "Alto" << + \voiceTwo + \AltoMusic + >> + >> + \new Staff << + \clef "bass" + \global + \new Voice = "Tenor" << + \voiceOne + \TenorMusic + >> + \new Voice = "Bass" << + \voiceTwo + \BassMusic + >> + >> + >> + >> + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 2) + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } + } % End score + } +} % End markup +@end lilypond + +Otros enfoques para la preparación de este cántico se muestran en el +primero de los siguientes fragmentos de código. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{chant-or-psalms-notation.ly} + +Los cánticos y otros textos litúrgicos pueden disponerse de una forma +más libre, y posiblemente usen elementos notacionales tomados de la +música antigua. Con frecuencia la letra se imprime por debajo y +alineada con las notas. En este caso, las notas se disponen +espaciadas de acuerdo con las sílabas en vez de hacerlo con las +duraciones de las notas. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + +@seealso +Manual de aprendizaje: +@rlearning{Visibilidad y color de los objetos}, +@rlearning{Conjuntos vocales}. + +Referencia de la notación: +@ref{Notación antigua}, +@ref{Barras de compás}, +@ref{Modificar los complementos (plug-ins) de contexto}, +@ref{Tipografiado del canto gregoriano}, +@ref{Música sin compasear}, +@ref{Visibilidad de los objetos}. + + +@node Puntuación de un salmo +@unnumberedsubsubsec Puntuación de un salmo +@translationof Pointing a psalm + +El texto de un salmo anglicano se suele imprimir en versos separados +debajo del canto. + +Los cantos sencillos (con siete compases) se repiten para cada verso. +Los cantos dobles (con 14 compases) se repiten para cada par de +versos. Se insertan marcas dentro del texto para indicar la forma en +que encajan con el canto. Cada verso se divide en dos mitades. Se +suele utilizar un signo de dos puntos para indicar esta división. +Esto corresponde a la doble línea divisoria de la música. El texto +antes de los dos puntos se canta con los tres primeros compases de la +música; el texto después de los dos puntos se canta con los últimos +cuatro compases. + +Se insertan líneas de compás simples (o en algunos casos una coma +invertida u otro símbolo similar) entre el texto para indicar dónde +caen las líneas divisorias de la música. En el modo de marcado, se +puede introducir una línea de compás simple con el símbolo de +comprobación de compás, la barra vertical, @code{|}. + +@lilypond[verbatim,quote] +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing | unto the | Lord : let } + \line { us heartily rejoice in the | strength of | our } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +otros símbolos pueden requerir glifos de las fuentes tipográficas +@code{fetaMusic}. Para ver más detalles, consulte @ref{Tipografías}. + +@lilypond[verbatim,quote] +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing \tick unto the \tick Lord : let } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +Donde hay una redonda en un compás, todo el texto que corresponde a ese +compás se recita sobre esa nota en el ritmo de la palabra. Donde hay +dos notas en un compás, suele haber solamente una o dos sílabas +correspondientes. Si hay más de dos sílabas, se suele insertar un +punto para indicar dónde se produce el cambio de nota. + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us sing \tick unto \dot the \tick Lord : let + } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +En algunos salterios (libros de salmos) se usa un asterisco para +indicar un corte en una sección recitada en lugar de una coma y las +sílabas acentuadas o ligeramente alargadas se indican en estilo +negrita. + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { Today if ye will hear his voice * } + \line { + \concat { \bold hard en } + | not your | hearts : as in the pro- + } + \line { vocation * and as in the \bold day of tempt- | } + \line { -ation | in the | wilderness. } + } + } + } +} +@end lilypond + +En otros salterios se coloca un acento sobre la sílaba para indicar el +énfasis. + +@lilypond[verbatim,quote] +tick = \markup { + \raise #2 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us \concat { + si \combine \tick ng + } + | unto the | Lord : let + } + \line { + us heartily \concat { + rejo \combine \tick ice + } + in the | strength of | our + } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +El uso del marcado para centrar texto y para disponer las líneas en +columnas se describe en @ref{Formatear el texto}. + +Casi todos estos elementos se muestran en uno u otro de los dos versos +en la plantilla, véase @qq{Salmos} en @rlearning{Conjuntos vocales}. + +@seealso +Manual de aprendizaje: +@rlearning{Conjuntos vocales}. + +Referencia de la notación: +@ref{Tipografías}, +@ref{Formatear el texto}. + + +@node Compases parciales en melodías de himno +@unnumberedsubsubsec Compases parciales en melodías de himno +@translationof Partial measures in hymn tunes + +Con frecuencia las melodías de himno comienzan y terminan cada línea +de música con compases parciales de forma que cada línea de música +corresponde exactamente con una línea de texto. Esto requiere una +instrucción @code{\partial} al principio de la música e instrucciones +@code{\bar "|"} ó @code{\bar "||"} al final de cada línea. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{hymn-template.ly} + + +@node Música vocal antigua +@subsection Música vocal antigua +@translationof Ancient vocal music + +Está contemplada la música vocal en estilo de tipografía antiguo, como +se explica en @ref{Notación antigua}. + +@c TODO + +@c Add "Printing both the ancient and the modern clef in vocal music" snippet, +@c and "Transcription of Ancient music with incipit" snippet. -vv + +@seealso +Referencia de la notación: +@ref{Notación antigua}. diff --git a/Documentation/es/notation/wind.itely b/Documentation/es/notation/wind.itely new file mode 100644 index 0000000000..5b42e8581f --- /dev/null +++ b/Documentation/es/notation/wind.itely @@ -0,0 +1,443 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: cc821da6e50c63beadf205719c72433460770a26 + + 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 Instrumentos de viento +@section Instrumentos de viento +@translationof Wind instruments + +@lilypondfile[quote]{wind-headword.ly} + +Esta sección incluye elementos de notación musical que afloran +al escribir para instrumentos de viento. + +@menu +* Notación común para instrumentos de viento:: +* Gaita:: +* Instrumentos de viento madera:: +@end menu + +@node Notación común para instrumentos de viento +@subsection Notación común para instrumentos de viento +@translationof Common notation for wind instruments + +Esta sección trata la notación común para casi todos los +instrumentos de viento. + +@menu +* Referencias para instrumentos de viento:: +* Digitaciones:: +@end menu + +@node Referencias para instrumentos de viento +@unnumberedsubsubsec Referencias para instrumentos de viento +@translationof References for wind instruments + +@cindex viento, instrumentos + +Muchas cuestiones de la notación para instrumentos de viento tienen +que ver con las respiraciones y los golpes de lengua: + +@itemize +@item Las respiraciones se pueden especificar mediante silencios o marcas de respiración, véase @ref{Marcas de respiración}. +@item La ejecución ligada se indica mediante ligaduras de expresión, véase @ref{Ligaduras de expresión}. +@item Los distintos golpes de lengua, desde legato hasta staccato pasando por non legato, se presentan por lo general mediante articulaciones, en ocasiones combinadas con ligaduras de expresión, véase @ref{Articulaciones y ornamentos} y @ref{Lista de articulaciones}. +@item El frullato se indica generalmente mediante una indicación de trémolo y una marca textual sobre la nota. Véase @ref{Repeticiones de trémolo}. +@end itemize + +También existen otros aspectos de la notación musical que son de +aplicación a los instrumentos de viento: + +@itemize +@item Muchos instrumentos de viento son transpositores, véase @ref{Transposición de los instrumentos}. +@item El portamento es característico del trombón, pero otros instrumentos de viento pueden realizar glissandos con llaves o válvulas. Véase @ref{Glissando}. +@item Los glissandos de serie armónica, que son posibles en todos los metales pero bastante específicos de las trompas, se escriben en general como notas de adorno, véase @ref{Notas de adorno}. +@item Las inflexiones de tono al final de una nota se tratan en @ref{Caídas y elevaciones}. +@item Los golpes de llave o de válvula se suelen indicar con el estilo @code{cross} (aspas) de cabezas de nota, véase @ref{Cabezas de nota especiales}. +@item Los instrumentos de viento-madera pueden sobreinflar las notas graves para producir armónicos. Éstos se muestran por medio de la articulación @code{flageolet}. Véase @ref{Lista de articulaciones}. +@item El uso de sordinas para los metales se suele indicar mediante marcas de texto, pero en los lugares donde se suceden muchos cambios rápidos es mejor utilizar las articulaciones @code{stopped} (tapado) y @code{open} (abierto). Véase @ref{Articulaciones y ornamentos} y @ref{Lista de articulaciones}. +@item Las trompas tapadas se indican por medio de la articulación @code{stopped}. Véase @ref{Articulaciones y ornamentos}. +@end itemize + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing--flageolet-mark-size.ly} + + +@seealso +Referencia de la notación: +@ref{Marcas de respiración}, +@ref{Ligaduras de expresión}, +@ref{Articulaciones y ornamentos}, +@ref{Lista de articulaciones}, +@ref{Repeticiones de trémolo}, +@ref{Transposición de los instrumentos}, +@ref{Glissando}, +@ref{Notas de adorno}, +@ref{Caídas y elevaciones}, +@ref{Cabezas de nota especiales}. + +Fragmentos de código: +@rlsr{Winds}. + + +@node Digitaciones +@unnumberedsubsubsec Digitaciones +@translationof Fingerings + +Todos los instrumentos de viento aparte del trombón requieren el uso +de los distintos dedos para producir cada nota. En los fragmentos +de código que aparecen a continuación pueden verse algunos ejemplos +de digitaciones. + +Se pueden producir diagramas de posiciones para instrumentos +de viento madera,como se describe en +@ref{Diagramas de posiciones para viento madera}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingering-symbols-for-wind-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{recorder-fingering-chart.ly} + +@seealso + +Referencia de la notación: +@ref{Diagramas de posiciones para viento madera}. + +Fragmentos de código: +@rlsr{Winds}. + + +@node Gaita +@subsection Gaita +@translationof Bagpipes + +Esta sección trata de la notación común +para gaita. + +@menu +* Definiciones para la gaita:: +* Ejemplo de música de gaita:: +@end menu + +@node Definiciones para la gaita +@unnumberedsubsubsec Definiciones para la gaita +@translationof Bagpipe definitions + +@cindex gaita +@cindex gaita escocesa de las tierras altas +@cindex mordentes +@cindex notas de adorno + +@funindex \taor +@funindex taor +@funindex \hideKeySignature +@funindex hideKeySignature +@funindex \showKeySignature +@funindex showKeySignature + +LilyPond contiene definiciones especiales para la música de gaita escocesa de las +tierras altas; para usarlas, escriba + +@example +\include "bagpipe.ly" +@end example + +@noindent +al principio del archivo de entrada. De esta forma podrá escribir las notas de adorno especiales +que son usuales en la música de gaita, mediante instrucciones breves. Por ejemplo, puede escribir +@code{\taor} en lugar de + +@example +\grace @{ \small G32[ d G e] @} +@end example + +@file{bagpipe.ly} también contiene definiciones de alturas para las notas de la +gaita en las octavas adecuadas, de forma que no se tenga que preocupar por +@code{\relative} o por @code{\transpose}. + +@lilypond[ragged-right,verbatim,quote,notime] +\include "bagpipe.ly" +{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } +@end lilypond + +La música de gaita utiliza siempre la tonalidad de Re mayor (aunque esto no es +completamente cierto). Sin embargo, puesto que es la única tonalidad que se puede utilizar, +normalmente la armadura no se escribe. Para configurar esto de forma correcta, +comience la música siempre con @code{\hideKeySignature} (ocultar armadura). Si, por algún motivo, +quiere mostrar la armadura, puede usar @code{\showKeySignature} +en su lugar. + +Alguna música moderna utiliza digitaciones cruzadas sobre el Do y el Fa para bemolizar estas notas. +Se puede indicar esto mediante @code{cflat} o @code{fflat}. De forma parecida, el +sol agudo piobaireachd se puede escribir @code{gflat} cuando aparece en música +ligera. + + +@seealso +Fragmentos de código: +@rlsr{Winds}. + + +@node Ejemplo de música de gaita +@unnumberedsubsubsec Ejemplo de música de gaita +@translationof Bagpipe example + +@cindex gaita, ejemplo de +@cindex Amazing Grace, ejemplo de gaita + +La conocida melodía Amazing Grace tiene este aspecto en notación de +gaita. + +@lilypond[verbatim,quote] +\include "bagpipe.ly" +\layout { + indent = 0.0\cm + \context { \Score \remove "Bar_number_engraver" } +} + +\header { + title = "Amazing Grace" + meter = "Hymn" + arranger = "Trad. arr." +} + +{ + \hideKeySignature + \time 3/4 + \grg \partial 4 a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg e8. f16 + \dblA A2 \grg A4 + \grg A2 f8. A16 + \grg A2 \hdblf f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 e4 + \thrwd d2. + \slurd d2 + \bar "|." +} +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{Winds}. + +@node Instrumentos de viento madera +@subsection Instrumentos de viento madera +@translationof Woodwinds + +Esta sección estudia la notación específica para instrumentos de +viento madera. + +@menu +* Diagramas de posiciones para viento madera:: +@end menu + +@node Diagramas de posiciones para viento madera +@subsubsection Diagramas de posiciones para viento madera +@translationof Woodwind diagrams + +Se pueden utilizar diagramas de posiciones para los instrumentos de +viento madera para indicar la digitación que usar al tocar ciertas +notas, y están disponibles para los +siguientes instrumentos: + +@itemize +@item flautín +@item flauta +@item oboe +@item clarinete +@item clarinete bajo +@item saxofón +@item fagot +@item contrafagot +@end itemize + +@noindent +Los diagramas se crean como elementos de marcado: + + +@lilypond[verbatim, quote, relative=2] +c1^ \markup \woodwind-diagram #'piccolo #'((lh . (gis)) + (cc . (one three)) + (rh . (ees))) +@end lilypond + +Las llaves pueden estar abiertas, parcialmente cubiertas, con el +anillo pulsado o totalmente apretadas: + +@lilypond[verbatim,quote,relative=2] +\textLengthOn +c1^\markup { + \center-column { + "one quarter" + \woodwind-diagram #'flute #'((cc . (one1q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "one half" + \woodwind-diagram #'flute #'((cc . (one1h)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "three quarter" + \woodwind-diagram #'flute #'((cc . (one3q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ring" + \woodwind-diagram #'flute #'((cc . (oneR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "full" + \woodwind-diagram #'flute #'((cc . (oneF two)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +Los trinos se indican mediante llaves sombreadas: + +@lilypond[verbatim,quote,relative=2] +c1^\markup { + \woodwind-diagram #'bass-clarinet + #'((cc . (threeT four)) + (lh . ()) + (rh . (b fis))) +} +@end lilypond + +Es posible imprimir una amplia variedad de trinos: + +@lilypond[verbatim,quote,relative=2] +\textLengthOn +c1^\markup { + \center-column { + "one quarter to ring" + \woodwind-diagram #'flute #'((cc . (one1qTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ring to shut" + \woodwind-diagram #'flute #'((cc . (oneTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ring to open" + \woodwind-diagram #'flute #'((cc . (oneRT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "open to shut" + \woodwind-diagram #'flute #'((cc . (oneT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "one quarter to three quarters" + \woodwind-diagram #'flute #'((cc . (one1qT3q)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +La lista de todas las tonalidades y ajustes posibles para un +instrumento dado, se pueden relacionar sobre la consola o en el +archivo de registro de salida, aunque no se pueden mostrar en la +salida de música impresa: + +@lilypond[verbatim,quote] + +#(print-keys-verbose 'flute) + +@end lilypond + +Se pueden crear diagramas nuevos siguiendo los patrones que están en +@file{scm/define-woodwind-diagrams.scm} y en +@file{scm/display-woodwind-diagrams.scm}. Sin embargo, esto requiere +conocimientos de Scheme y quizá no esté al alcance de todos los +usuarios. + +@predefined +@endpredefined + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-listing.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{graphical-and-text-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-size-of-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-key-lists.ly} + +@seealso + +Archivos de inicio: +@file{scm/define-woodwind-diagrams.scm}, +@file{scm/display-woodwind-diagrams.scm}. + +Fragmentos de código: +@rlsr{Winds}. + +Referencia de funcionamiento interno: +@rinternals{TextScript}, +@rinternals{instrument-specific-markup-interface}. diff --git a/Documentation/es/notation/world.itely b/Documentation/es/notation/world.itely new file mode 100644 index 0000000000..f018ed9ee3 --- /dev/null +++ b/Documentation/es/notation/world.itely @@ -0,0 +1,612 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033 + + 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 Músicas del mundo +@section Músicas del mundo +@translationof World music + +El propósito de esta sección es remarcar los problemas de notación que +son de relevancia a las tradiciones musicales distintas a la +occidental. + +@menu +* Notación común para músicas no occidentales:: +* Música árabe:: +* Música clásica de Turquía:: +@end menu + + +@node Notación común para músicas no occidentales +@subsection Notación común para músicas no occidentales +@translationof Common notation for non-Western music + +Esta sección estudia la forma de introducir e imprimir partituras +musicales que no pertenecen a la tradición clásica occidental, también +conocida como @notation{Período de la práctica común}. + +@menu +* Extensión de la notación y los sistemas de afinación:: +@end menu + + +@node Extensión de la notación y los sistemas de afinación +@unnumberedsubsubsec Extensión de la notación y los sistemas de afinación +@translationof Extending notation and tuning systems + +La notación clásica estándar (también conocida como la notación del +@notation{Período de la práctica común}) se usa normalmente en todo +tipo de música, sin limitación a la música occidental @q{clásica}. +Esta notación se estudia en @ref{Escritura de notas}, y los distintos +nombres de las notas que se pueden utilizar están explicados en +@ref{Nombres de las notas en otros idiomas}. + +Sin embargo, muchos tipos de música no occidental (y algunas clases de +música folk occidental y tradicional) emplea sistemas de afiniación +altenativos o extendidos que no encajan inmediatamente dentro de la +notación clásica estándar. + +En algunos casos aún se usa la notación estándar, estando implícitas +las diferencias de altura. Por ejemplo, la notación de la +@notation{música árabe} se realiza con alteraciones accidentales de +semitono y de cuarto de tonoc, estando determinadas por el contexto +las exactas alteraciones de altura. Se usan por lo general los +nombres de nota italianos, mientras que el archivo de inicio +@file{arabic.ly} proporciona un conjunto adecuado de macros y +definiciones que extienden la notación estándar. Para ver más +detalles, consulte @ref{Música árabe}. + +@cindex afinación no occidental + +Otros tipos de música requieren notaciones extendidas o singulares. +La @notation{música clásica turca} o música otomana, por ejemplo, +emplea formas melódicas conocidas como @notation{makamlar}, cuyos +intervalos están basados en divisiones de 1/9 de tono. Se siguen +usando las notas del pentagrama occidental, pero con alteraciones +accidentales exclusivas de la música turca, que están definidas en el +archivo @file{makam.ly}. Para ver más información sobre la música +clásica turca y los makamlar, consulte @ref{Música clásica de +Turquía}. + +PAra localizar los archivos de inicio como @file{arabic.ly} o +@file{makam.ly} en su sistema, consulte @rlearning{Otras fuentes de +información}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{makam-example.ly} + +@seealso +Glosario musical: +@rglos{Common Practice Period}, +@rglos{makamlar}. + +Manual de aprendizaje: +@rlearning{Otras fuentes de inforamción}. + +Referencia de la notación: +@ref{Escritura de notas}, +@ref{Nombres de las notas en otros idiomas}, +@ref{Música árabe}, +@ref{Música clásica de Turquía}. + + +@node Música árabe +@subsection Música árabe +@translationof Arabic music + +Esta sección destaca asuntos relativos a la música árabe. + +@menu +* Referencias para música árabe:: +* Nombres de nota árabes:: +* Armaduras de tonalidad árabes:: +* Indicaciones de compás árabes:: +* Ejemplo de música árabe:: +* Lecturas adicionales sobre música árabe:: +@end menu + + +@node Referencias para música árabe +@unnumberedsubsubsec Referencias para música árabe +@translationof References for Arabic music + +@cindex árabe, música +@cindex medios, intervalos +@cindex maqam +@cindex maqams +@cindex makamlar + +La música árabe ha sido principalmente una tradición oral hasta el +momento. Cuando se transcribe la música, se suele hacer en la forma +de un esbozo sobre el que los intérpretes deben improvisar +ampliamente. En una medida creciente, se está adoptando la notación +occidental con ciertas variantes para preservar y transmitir la música +árabe. + +Algunos elementos de la notación musical occidental como la +transcripción de acordes o las particellas independientes, no se +necesitan para tipografiar las piezas árabes, más tradicionales. Sin +embargo hay ciertos problemas, como la necesidad de indicar intervalos +que tienen una medida intermedia entre el semitono y el tono, además +de los intervalos mayores y menores de la música occidental. También +existe la necesidad de agrupar e indicar los numerosos maqams (modos) +que forman parte de la música árabe. + +Por lo general la notación musical árabe no trata de indicar con +precisión los elementos microtonales que se encuentran presentes en la +práctica musical. + +Son de relevancia para la música árabe ciertos asuntos que se +encuentran cubiertos en otras partes del manual: + +@itemize +@item Los nombres de las notas y sus alteraciones (entre ellos, cuartos de +tono) se pueden realizar como se estudia en @ref{Notación común para +músicas no occidentales}. + +@item Las armaduras adicionales también pueden realizarse como se describe +en @ref{Armadura de la tonalidad}. + +@item Los compases complejos pueden requerir agrupaciones manuales de las +notas tal y como se describe en @ref{Barras manuales}. + +@item Los @notation{takasim} o improvisaciones libres desde el punto de +vista rítmico se pueden escribir omitiendo las barras de compás como +aparece en @ref{Música sin compasear}. + +@end itemize + + +@seealso +Referencia de la notación: +@ref{Notación común para músicas no occidentales}, +@ref{Armadura de la tonalidad}, +@ref{Barras manuales}. + +Fragmentos de código: +@rlsr{World music}. + + +@node Nombres de nota árabes +@unnumberedsubsubsec Nombres de nota árabes +@translationof Arabic note names + + +@cindex Arabic note names + +Los nombres árabes tradicionales de las notas pueden llegar a ser +bastante largos y no son adecuados para la escritura musical, y por +ello no se utilizan. Los nombres ingleses de las notas no son muy +familiares dentro de la educación musical árabe, por lo que en su +lugar se utilizan los nombres italo-franco-españoles o del solfeo +(@code{do, re, mi, fa, sol, la, si}); también se pueden utilizar +modificadores (alteraciones). Los nombres italianos de las notas y +las alteraciones accidentales están explicados en @ref{Nombres de las +notas en otros idiomas}; el usao de la notación occidental estándar +para realizar la notación de música no occidental se discute en +@ref{Notación común para músicas no occidentales}. + +Por ejemplo, así es como puede ser la notación de la escala árabe +@notation{rast}: + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + do re misb fa sol la sisb do sisb la sol fa misb re do +} +@end lilypond + + +@cindex Arabic semi-flat symbol +@cindex Semi-flat symbol appearance + +El símbolo del semi-bemol no coincide con el símbolo que se utiliza en +la notación árabe. Se puede usar el símbolo @code{\dwn} definido en +@file{arabic.ly} precediendo a un bemol como vía alternativa si es +importante usar el símbolo árabe específico del semi-bemol. El +aspecto del símbolo del semi-bemol dentro de la armadura no se puede +alterar mediante este método. + + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + \set Staff.extraNatural = ##f + dod dob dosd \dwn dob dobsb dodsd do do +} +@end lilypond + + +@seealso +Referencia de la notación: +@ref{Note names in other languages}, +@ref{Notación común para músicas no occidentales}. + +Fragmentos de código: +@rlsr{World music}. + + +@node Armaduras de tonalidad árabes +@unnumberedsubsubsec Armaduras de tonalidad árabes +@translationof Arabic key signatures + +@cindex Arabic key signatures + +Además de las armaduras de tonalidad mayores y menores, están +definidas en @file{arabic.ly} las siguientes tonalidades: +@notation{bayati}, @notation{rast}, @notation{sikah}, @notation{iraq} +y @notation{kurd}. Estas armaduras de tonalidad definen una pequeña +cantidad de grupos de maqam, en contraste con los numerosos maqams que +son de uso común. + +En general, un maqam usa la armadura de su grupo o la de un grupo +vecino, y las alteraciones que difieren se van marcando a lo largo de +la música. + +Por ejemplo, para indicar la armadura de una pieza en el maqam +muhayer: + +@example +\key re \bayati +@end example + +@noindent +Aquí, @var{re} es la altura predeterminada del maqam muhayer, y +@var{bayati} es el nombre del maqam básico dentro del grupo. + +Al tiempo que la armadura indica el grupo, el título suele indicar el +maqam específico, y así en este ejemplo el nombra del maqam muhayer +debe aparecer en el título. + +Se pueden indicar de la misma forma otros maqams dentro del mismo +grupo bayati, como aparece en la tabla a continuación: bayati, +hussaini, saba y ushaq. Todos ellos son variantes del maqam básico y +más común dentro del grupo, que es bayati. Normalmente se diferencian +del maqam básico en su tetracordo superior, o en ciertos detalles de +discurso que no cambian su naturaleza fundamental como parientes. + +El otro maqam del grupo (Nawa) se relaciona con el bayati a través de +una modulación que se indica en la tabla entre paréntesis para +aquellos maqams que son modulaciones de su maqam básico. Los maqams +árabes admiten sólo modulaciones limitadas, a causa de la naturaleza +de los instrumentos musicales árabes. El Nawa se puede indicar de la +siguiente forma: + +@example +\key sol \bayati +@end example + +En la música árabe, el mismo término que se utiliza para indicar un +grupo de maqam, como bayati, es también un maqam que normalmente es el +más importante del grupo, y podemos verlo como el maqam básico. + +A continuación presentamos una posibilidad de agrupación que asigna +los maqams más comunes a armaduras de tonalidad: + +@multitable @columnfractions 0.1 0.1 0.1 0.6 +@headitem grupo de maqam + @tab tono + @tab final + @tab otros maqams del grupo (final) +@item ajam + @tab major + @tab sib + @tab jaharka (fa) +@item bayati + @tab bayati + @tab re + @tab hussaini, muhayer, saba, ushaq, nawa (sol) +@item hijaz + @tab kurd + @tab re + @tab shahnaz, shad arban (sol), hijazkar (do) +@item iraq + @tab iraq + @tab sisb + @tab - +@item kurd + @tab kurd + @tab re + @tab hijazkar kurd (do) +@item nahawand + @tab minor + @tab do + @tab busalik (re), farah faza (sol) +@item nakriz + @tab minor + @tab do + @tab nawa athar, hisar (re) +@item rast + @tab rast + @tab do + @tab mahur, yakah (sol) +@item sikah + @tab sikah + @tab misb + @tab huzam +@end multitable + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Glosario musical: +@rglos{maqam}, +@rglos{bayati}, +@rglos{rast}, +@rglos{sikah}, +@rglos{iraq}, +@rglos{kurd}. + +Referencia de la notación: +@ref{Armadura de la tonalidad}. + +Manual de aprendizaje: +@rlearning{Alteraciones accidentales y armaduras}. + +Referencia de funcionamiento interno: +@rinternals{KeySignature}. + +Fragmentos de código: +@rlsr{World music}, +@rlsr{Pitches}. + + +@node Indicaciones de compás árabes +@unnumberedsubsubsec Indicaciones de compás árabes +@translationof Arabic time signatures + +@cindex árabes, armaduras +@cindex Semai, forma +@cindex taqasim + +Ciertas formas clásicas de música árabe y turca como el +@notation{Semai} utilizan compases poco comunes como el 10/8. Ello +puede derivar en una agrupación automática de las notas muy distinta a +la de las partituras impresas existentes, donde las notas pueden no +estar agrupadas sobre el pulso, sino de una forma difícil de emular +ajustando el barrado automático. La alternativa sería desactivar el +barrado automático y realizar un barrado manual de las notas. Incluso +si no es necesaria una correspondencia con música escrita ya +existente, puede seguir siendo deseable ajustar el comportamiento del +barrado automático y/o utilizar indicaciones de compás compuestas. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{arabic-improvisation.ly} + + +@seealso +Glosario musical: +@rglos{semai}, +@rglos{taqasim}. + +Referencia de la notación: +@ref{Barras manuales}, +@ref{Barras automáticas}, +@ref{Música sin compasear}, +@ref{Alteraciones accidentales automáticas}, +@ref{Establecer el comportamiento de las barras automáticas}, +@ref{Indicación de compás}. + +Fragmentos de código: +@rlsr{World music}. + + +@node Ejemplo de música árabe +@unnumberedsubsubsec Ejemplo de música árabe +@translationof Arabic music example + +@cindex árabe, ejemplo de música +@cindex árabe, plantilla de música +@cindex plantilla música árabe + +A continuación aparece una plantilla que emplea también el comienzo de +un @notation{Semai} turco muy común en la educación musical árabe con +el objeto de ilustrar algunas de las peculiaridades de la notación +árabe, como los intervalos intermedios y los modos poco usuales que +tratamos en esta sección. + +@lilypond[quote,verbatim] +\include "arabic.ly" +\score { + \relative re' { + \set Staff.extraNatural = ##f + \set Staff.autoBeaming = ##f + \key re \bayati + \time 10/8 + + re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 + re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb + fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb + do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 + } + \header { + title = "Semai Muhayer" + composer = "Jamil Bek" + } +} +@end lilypond + + +@seealso +Fragmentos de código: +@rlsr{World music}. + + +@node Lecturas adicionales sobre música árabe +@unnumberedsubsubsec Lecturas adicionales sobre música árabe +@translationof Further reading for Arabic music + +@enumerate + +@item +@emph{The music of the Arabs}, de Habib Hassan Touma [Amadeus Press, +1996], contiene un tratado de los maqams y sus formas de agrupación. + +También existen varios sitios web que explican los maqams, y algunos +de ellos ofrecen ejemplos de audio, como: + +@itemize @bullet +@item +@uref{http://www.maqamworld.com/} +@item +@uref{http://www.turath.org/} +@end itemize + +Existen ciertas variantes en los detalles sobre la forma en que se +agrupan los maqams, a pesar del relativo acuerdo existente acerca de +los criterios de agrupación de maqams en función de los tetracordos +inferiores comunes, o por medio de la modulación. + +@item +No es completamente consistente, incluso a veces dentro del mismo +texto, la forma en que se deben especificar las armaduras para los +maqams concretos. Sin embargo, es usual utilizar una armadura por +grupo, más que una armadura distinta para cada maqam concreto. + +Varios métodos de los siguientes autores para el @dfn{Ud}, el laúd +árabe, contienen ejemplos de composiciones turcas y árabes, +principalmente. + +@itemize @bullet +@item +Charbel Rouhana +@item +George Farah +@item +Ibrahim Ali Darwish Al-masri +@end itemize +@end enumerate + + +@node Música clásica de Turquía +@subsection Música clásica de Turquía +@translationof Turkish classical music + +Esta sección destaca los problemas de relevancia para la notación de +la música clásica de Turquía. + +@menu +* Referencias para música clásica de Turquía:: +* Nombres de las notas en turco:: +@end menu + + +@node Referencias para música clásica de Turquía +@unnumberedsubsubsec Referencias para música clásica de Turquía +@translationof References for Turkish classical music + +@cindex Turquía, música de +@cindex Otomana, música +@cindex coma, intervalos de +@cindex makam +@cindex makamlar + +La música clásica de Turquía se desarrollo en el imperio Otomano +durante un período aproximadamente contemporáneo con la música clásica +de Europa, y se ha prolongado hasta los ss.XX y XXI como una viva y +característica tradición con sus propias formas composicionales, +teorías y estilos de interpretación. Entre sus características más +sobresalientes está el uso de intervalos microtonales basados en +@q{comas} de 1/9 de tono, a partir de los que se construyen las formas +melódicas conocidas como @notation{makam} (en plural +@notation{makamlar}). + +Ciertos asuntos de relevancia respecto a la música clásica de Turquía +se tratan en otras partes: + +@itemize +@item Los nombres especiales de las notas y las alteraciones se dan en +@ref{Notación común para músicas no occidentales}. + +@end itemize + + +@node Nombres de las notas en turco +@unnumberedsubsubsec Nombres de las notas en turco +@translationof Turkish note names + +@cindex Turquía, nombres de notas en +@cindex makam +@cindex makamlar + +Las notas en la música clásica de Turquía tienen tradicionalmente +nombres únicos, y la base de las alturas sobre divisiones de 1/9 de +tono significan que los makamlar utilizan un conjunto de intervalos +completamente diferente de las escalas y modos occidentales: +@notation{koma} (1/9 de tono), @notation{eksik bakiye} (3/9), +@notation{bakiye} (4/9), @notation{kücük mücenneb} (5/9), +@notation{büyük mücenneb} (8/9), @notation{tanîni} (un tono) y +@notation{artık ikili} (12/9 ó 13/9 de tono). + +Desde el punto de vista de la notación moderna, es conveniente +utilizar las notas occidentales (do, re, mi, ... ó c, d, e, ...) con +alteraciones especiales que elevan o bajan las notas en intervalos de +1/9, 4/9, 5/9 y 8/9 de tono. Esetas alteraciones están definidas en +el archivo @file{makam.ly}. + + +La tabla siguiente relaciona: +@itemize +@item +el nombre de estas alteraciones accidentales especiales, +@item +el sufijo de la alteración que se debe escribir detrás de las notas, y +@item +su alteración en altura expresada como una fracción de un tono. +@end itemize + +@quotation +@multitable {@b{büyük mücenneb (sharp)}} {@b{suffix}} {@b{pitch alteration}} +@headitem Nombre de la alteración + @tab sufijo @tab alteración de altura + +@item büyük mücenneb (sostenido) + @tab -bm @tab +8/9 +@item kücük mücenneb (sostenido) + @tab -k @tab +5/9 +@item bakiye (sostenido) + @tab -b @tab +4/9 +@item koma (sostenido) + @tab -c @tab +1/9 + +@item koma (bemol) + @tab -fc @tab -1/9 +@item bakiye (bemol) + @tab -fb @tab -4/9 +@item kücük mücenneb (bemol) + @tab -fk @tab -5/9 +@item büyük mücenneb (bemol) + @tab -fbm @tab -8/9 +@end multitable +@end quotation + +Para ver una explicación más general sobre la notación musical no +occidental, consulte @ref{Notación común para músicas no +occidentales}. + +@seealso +Glosario musical: +@rglos{makam}, +@rglos{makamlar}. + +Referencia de la notación: +@ref{Notación común para músicas no occidentales}. diff --git a/Documentation/es/search-box.ihtml b/Documentation/es/search-box.ihtml new file mode 100644 index 0000000000..a0dde284e6 --- /dev/null +++ b/Documentation/es/search-box.ihtml @@ -0,0 +1,20 @@ + + +
+ + + +
diff --git a/Documentation/es/texidocs/GNUmakefile b/Documentation/es/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/es/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/texidocs/accordion-discant-symbols.texidoc b/Documentation/es/texidocs/accordion-discant-symbols.texidoc new file mode 100644 index 0000000000..6a5f2a35f6 --- /dev/null +++ b/Documentation/es/texidocs/accordion-discant-symbols.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Los símbolos específicos de acordeón discanto se escriben mediante +@code{\\markup}. Se puede trucar la colocación vertical de los +símbolos modificando los argumentos de @code{\\raise}. + +" + doctitlees = "Símbolos de acordeón discanto" + diff --git a/Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc b/Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc new file mode 100644 index 0000000000..4e86e17fba --- /dev/null +++ b/Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc @@ -0,0 +1,17 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Al escribir un bajo cifrado, podemos situar las cifras encima o debajo +de las notas del bajo, mediante la definición de la propiedad +@code{BassFigureAlignmentPositioning #'direction} (exclusivamente +dentro de un contexto @code{Staff}). Se puede elegir entre @code{#UP} +(o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, centrado) y +@code{#DOWN} (o @code{#-1}, abajo). + +Esta propiedad se puede cambiar tantas veces como queramos. Utilice +@code{\\once \\override} si no quiere que la sobreescritura se aplique +a toda la partitura. + +" + doctitlees = "Añadir un bajo cifrado encima o debajo de las notas" + diff --git a/Documentation/es/texidocs/adding-ambitus-per-voice.texidoc b/Documentation/es/texidocs/adding-ambitus-per-voice.texidoc new file mode 100644 index 0000000000..1f00ae6e78 --- /dev/null +++ b/Documentation/es/texidocs/adding-ambitus-per-voice.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Añadir un ámbito por voz" + texidoces = " +Se puede añadir un ámbito por cada voz. En este caso, el ámbito se +debe desplazar manualmente para evitar colisiones. + +" diff --git a/Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc b/Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc new file mode 100644 index 0000000000..e0baad88b7 --- /dev/null +++ b/Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +(reservado para hacer sitio a un cambio de armadura que de todas +formas no se va a imprimir). La solución alternativa es añadir un +ajuste para @code{Staff.explicitKeySignatureVisibility} como se +muestra en el ejemplo. + +" + doctitlees = "Añadir un pentagrama adicional en un salto de línea" diff --git a/Documentation/es/texidocs/adding-an-extra-staff.texidoc b/Documentation/es/texidocs/adding-an-extra-staff.texidoc new file mode 100644 index 0000000000..c94d6e76e5 --- /dev/null +++ b/Documentation/es/texidocs/adding-an-extra-staff.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede añadir (posiblemente de forma temporal) un pentagrama +nuevo una vez que la pieza ha comenzado. + +" + doctitlees = "Añadir un pentagrama nuevo" diff --git a/Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc b/Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc new file mode 100644 index 0000000000..bd6d48af54 --- /dev/null +++ b/Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Para añadir indicaciones de línea divisoria dentro del contexto de +los nombres de acorde @code{ChordNames}, incluya el grabador +@code{Bar_engraver}. + +" + doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)" + diff --git a/input/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc b/Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc similarity index 92% rename from input/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc rename to Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc index a42cd46d38..0fb1667e3f 100644 --- a/input/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc +++ b/Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " La sintaxis de LilyPond puede implicar muchas colocaciones poco comunes para los paréntesis, corchetes, etc, que a veces se tienen diff --git a/Documentation/es/texidocs/adding-drum-parts.texidoc b/Documentation/es/texidocs/adding-drum-parts.texidoc new file mode 100644 index 0000000000..a6511ef1c6 --- /dev/null +++ b/Documentation/es/texidocs/adding-drum-parts.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Mediante la utilización de las potentes herramientas preconfiguradas +como la función @code{\\drummode} y el contexto @code{DrumStaff}, la +introducción de partes para percusión es muy fácil: las percusiones se +sitúan en sus propias posiciones de pentagrama (con una clave +especial) y tienen las cabezas correspondientes al instrumento. Es +posible añadir un símbolo adicional a la percusión o reducir el número +de líneas. + +" + doctitlees = "Escritura de partes de percusión" + diff --git a/Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc b/Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc new file mode 100644 index 0000000000..55dd984218 --- /dev/null +++ b/Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Para añadir digitaciones a las tablaturas, utilice una combinación de +@code{\\markup} y @code{\\finger}. +" + + doctitlees = "Añadir digitaciones a las tablaturas" + diff --git a/Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc b/Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc new file mode 100644 index 0000000000..78aca100df --- /dev/null +++ b/Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc @@ -0,0 +1,22 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + Este ejemplo muestra una forma de simplificar la adición de muchas +notas guía orquestales a la reducción de piano en una partitura vocal. +La función musical @code{\\cueWhile} toma cuatro argumentos: la música +de la que se toma la cita, como viene definida por @code{\\addQuote}, +el nombre que insertar antes de las notas guía, y después @code{#UP} o +@code{#DOWN} para especificar @code{\\voiceOne} con el nombre encima +del pentagrama o bien @code{\\voiceTwo} con el nombre debajo del +pentagrama, y finalmente la música de piano con la que las notas guía +deben aparecer en paralelo. El nombre del instrumento citado se +posiciona a la izquierda de las notas guía. Se pueden citar muchos +pasajes como guía, pero no se pueden superponer en el tiempo entre +ellos. + +" + + doctitlees = "Añadir notas guía orquestales a una partitura vocal" + + + diff --git a/Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc b/Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc new file mode 100644 index 0000000000..d764b087f1 --- /dev/null +++ b/Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La función @code{\\parenthesize} es un truco especial que encierra +objetos entre paréntesis. El grob asociado es @code{ParenthesesItem}. + +" + doctitlees = "Encerrar entre paréntesis una marca expresiva o una nota de un acorde" diff --git a/Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc b/Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc new file mode 100644 index 0000000000..7ac744d71d --- /dev/null +++ b/Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Con algo de código de Scheme, se puede añadir fácilmente la fecha +actual a una partitura. +" + doctitlees = "Añadir la fecha actual a una partitura" + diff --git a/Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc new file mode 100644 index 0000000000..97587b461c --- /dev/null +++ b/Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +El grabador @code{Volta_engraver} reside de forma predeterminada +dentro del contexto de @code{Score}, y los corchetes de la repetición +se imprimen así normalmente sólo encima del pentagrama superior. Esto +se puede ajustar añadiendo el grabador @code{Volta_engraver} al +contexto de @code{Staff} en que deban aparecer los corchetes; véase +también el fragmento de código @qq{Volta multi staff}. + +" + doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas" + diff --git a/Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc b/Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc new file mode 100644 index 0000000000..877986f4a0 --- /dev/null +++ b/Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Voces adicionales para evitar colisiones" + texidoces = " +En ciertos casos de polifonía compleja, se necesitan voces adicionales +para evitar colisiones entre las notas. Si se necesitan más de cuatro +voces paralelas, las voces adicionales se añaden definiendo una +variable que utiliza la función de Scheme @code{context-spec-music}. + +" + diff --git a/Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc b/Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc new file mode 100644 index 0000000000..8d34263a83 --- /dev/null +++ b/Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede ajustar la separación entre las notas de adorno utilizando la +propiedad @code{spacing-increment} de @code{Score.GraceSpacing}. + +" + + doctitlees = "Ajuste del espaciado de las notas de adorno" diff --git a/Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc b/Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc new file mode 100644 index 0000000000..d12e9b7075 --- /dev/null +++ b/Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Este fragmento de código muestra cómo situar la línea de base de la +letra más cerca del pentagrama. + +" + doctitlees = "Ajuste del especiado vertical de la letra" + diff --git a/Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc new file mode 100644 index 0000000000..a5f821393d --- /dev/null +++ b/Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Puede ser necesario trucar la propiedad +@code{shortest-duration-space} para poder ajustar el tamaño de las +caídas y subidas de tono («falls» y «doits»). + +" + doctitlees = "Ajustar la forma de las subidas y caídas de tono" + diff --git a/Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc b/Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc new file mode 100644 index 0000000000..f58b114aa5 --- /dev/null +++ b/Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La alineación horizontal de los nombres de instrumento se puede +trucar modificando la propiedad @code{Staff.InstrumentName +#'self-alignment-X}. Las variables de @code{\\layout} +@code{indent} y @code{short-indent} definen el espacio en que se +alinean los nombres de instrumento antes del primer sistema y de +los siguientes, respectivamente. + +" + doctitlees = "Alinear y centrar los nombres de instrumento" diff --git a/Documentation/es/texidocs/aligning-bar-numbers.texidoc b/Documentation/es/texidocs/aligning-bar-numbers.texidoc new file mode 100644 index 0000000000..11ee046b91 --- /dev/null +++ b/Documentation/es/texidocs/aligning-bar-numbers.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Los números de compás se alinean de forma predeterminada por la +derecha con su objeto padre. Éste es por lo general el borde +izquierdo de una línea o, si los números se imprimen dentro de la +línea, el lado izquierdo de una línea divisoria. Los números +también se pueden situar directamente sobre la barra de compás o +alineados por la izquierda con ella. + +" + + doctitlees = "Alineación de los números de compás" + diff --git a/Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc b/Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc new file mode 100644 index 0000000000..17f28039c7 --- /dev/null +++ b/Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +objetos se encuentran @code{ambitus}, @code{breathing-sign}, +@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge}, +@code{key-cancellation}, @code{key-signature} y @code{time-signature}. + +En estos casos, las marcas de texto se centran horizontalmente sobre +el objeto, aunque esto se puede cambiar, como se muestra en la segunda +línea de este ejemplo (en una partitura con varios pentagramas, se +debe hacer este ajuste para todos los pentagramas). + +" + doctitlees = "Alinear marcas con varios objetos de notación" + diff --git a/Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc new file mode 100644 index 0000000000..bc728c5348 --- /dev/null +++ b/Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Las cifras de digitación orientadas verticalmente se colocan de forma +predeterminada fuera del pentagrama. Sin embargo, este comportamiento +se puede cancelar. Nota: se debe usar una construcción de acorde <>, +aunque sea una sola nota. + + +" + doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama" + diff --git a/Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc b/Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc new file mode 100644 index 0000000000..f434045a52 --- /dev/null +++ b/Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc @@ -0,0 +1,17 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede variar la longitud de las plicas de las figuras unidas por +una barra mediante la sobreescritura de la propiedad +@code{beamed-lengths} de los detalles (@code{details}) del objeto +@code{Stem}. Si se utiliza un solo valor como argumento, la longitud +se aplica a todas las plicas. Si se usan varios argumentos, el +primero se aplica a las corcheas, el sgundo a las semicorcheas y así +sucesivamente. El último argumento también se aplica a todas las +figuras que son mmás cortas que la longitud de la figura del último +argumento. También se pueden usar argumentos no enteros. + +" + +doctitlees = "Alterar la longitud de las plicas unidas por una barra" + + diff --git a/Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc b/Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc new file mode 100644 index 0000000000..3474679172 --- /dev/null +++ b/Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Ámbitos con varias voces" + texidoces = " +La adición del grabador @code{Ambitus_engraver} al contexto de +@code{Staff} crea un solo ámbito por pentagrama, incluso en el caso de +pentagramas con varias voces. + +" + diff --git a/input/texidocs/analysis-brackets-above-the-staff.texidoc b/Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc similarity index 76% rename from input/texidocs/analysis-brackets-above-the-staff.texidoc rename to Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc index 3afa01494b..ab20f2f395 100644 --- a/input/texidocs/analysis-brackets-above-the-staff.texidoc +++ b/Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " De forma predeterminada se añaden corchetes de análisis sencillos debajo del pentagrama. El ejemplo siguiente muestra una manera de diff --git a/Documentation/es/texidocs/ancient-fonts.texidoc b/Documentation/es/texidocs/ancient-fonts.texidoc new file mode 100644 index 0000000000..23b7f135ac --- /dev/null +++ b/Documentation/es/texidocs/ancient-fonts.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +antigua. +" + + doctitlees = "Tipografía de música antigua" + diff --git a/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc new file mode 100644 index 0000000000..815d180cb7 --- /dev/null +++ b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Este ejemplo muestra cómo hacer una transcripción moderna de canto +gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza +solamente cabezas de nota de blanca y de negra, y unas marcas +especiales que indican silencios de distintas longitudes. + +" + + doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)" diff --git a/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc new file mode 100644 index 0000000000..4c39bf7c1c --- /dev/null +++ b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Al transcribir música mensural, es útil un «incipit» al compienzo +de la pieza para indicar la tonalidad y el tempo +originales. Aunque los músicos actuales están acostumbrados a las +barras de compás para reconocer con más facilidad los patrones +rítmicos, durante el período de la música mensural aún no se +habíen inventado las líneas divisorias; de hecho, la medida solía +cambiar a cada pocas notas. Como compromiso, a menudo las líneas +divisorias se imprimen entre los pentagramas en vez de hacerlo +encima de ellos. + +" + doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)" + diff --git a/Documentation/es/texidocs/ancient-time-signatures.texidoc b/Documentation/es/texidocs/ancient-time-signatures.texidoc new file mode 100644 index 0000000000..28b3f3d8ed --- /dev/null +++ b/Documentation/es/texidocs/ancient-time-signatures.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Las indicaciones de compás también se pueden grabar en estilo antiguo. + +" + doctitlees = "Indicaciones de compás antiguas" diff --git a/Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc new file mode 100644 index 0000000000..ac78c31791 --- /dev/null +++ b/Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc @@ -0,0 +1,24 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Aplicar estilos de cabeza según la nota de la escala" + texidoces = " +La propiedad @code{shapeNoteStyles} se puede usar para definir varios +estilos de cabezas de nota para cada grado de la escala (según esté +establecido por la armadura o por la propiedad @code{tonic}). Esta +propiedad requiere un conjunto de símbolos, que pueden ser puramente +arbitrarios (se permiten expresiones geométricas como @code{triangle}, +triángulo, @code{cross}, aspas, y @code{xcircle}, círculo con aspas) o +basados en una antigua tradición americana de grabado (ciertos nombres +de nota latinos trambién se permiten). + +Dicho esto, para imitar antiguos cancioneros americanos, existen varios +estilos predefinidos de cabezas de nota disponibles a través de +instrucciones de abreviatura como @code{\\aikenHeads} o +@code{\\sacredHarpHeads}. + +Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, +y muestra la capacidad de transportar una melodía sin perder la +correspondencia entre las funciones armónicas y los estilos de cabezas de +nota. + +" + diff --git a/Documentation/es/texidocs/arabic-improvisation.texidoc b/Documentation/es/texidocs/arabic-improvisation.texidoc new file mode 100644 index 0000000000..303c508705 --- /dev/null +++ b/Documentation/es/texidocs/arabic-improvisation.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +@code{\cadenzaOn}. Podría ser necesario ajustar el estilo de +alteraciones accidentales, porque la ausencia de líneas divisorias +hará que la alteración aparezca una sola vez. He aquí un ejemplo de +cómo podría ser el comienzo de una improvisación @emph{hijaz}: + +" +doctitlees = "Improvisación de música árabe" + diff --git a/Documentation/es/texidocs/asymmetric-slurs.texidoc b/Documentation/es/texidocs/asymmetric-slurs.texidoc new file mode 100644 index 0000000000..8d1c86cd4e --- /dev/null +++ b/Documentation/es/texidocs/asymmetric-slurs.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede hacer que una ligadura de expresión sea asimétrica para +adaptarse mejor a un patrón asimétrico de notas. + +" + doctitlees = "Ligaduras asimétricas" + + diff --git a/input/texidocs/automatic-beam-subdivisions.texidoc b/Documentation/es/texidocs/automatic-beam-subdivisions.texidoc similarity index 78% rename from input/texidocs/automatic-beam-subdivisions.texidoc rename to Documentation/es/texidocs/automatic-beam-subdivisions.texidoc index 904e9e39c9..1671983b75 100644 --- a/input/texidocs/automatic-beam-subdivisions.texidoc +++ b/Documentation/es/texidocs/automatic-beam-subdivisions.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " Se pueden subdividir las barras automáticamente. Estableciendo la propiedad @code{subdivideBeams}, las barras se subdividen en diff --git a/Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc b/Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc new file mode 100644 index 0000000000..e1fa21dc60 --- /dev/null +++ b/Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Las digitaciones y números de cuerda que se aplican a las notas +individuales evitan automáticamente las barras y las plicas de las +figuras, pero esto no es cierto de forma predeterminada para las +digitaciones y números de cuerda que se aplican sobre notas +individuales de acordes. El ejemplo siguiente muestra cómo se puede +sobreescribir este comportamiento predeterminado. + +" + doctitlees = "Evitar colisiones con digitaciones de acordes" + diff --git a/Documentation/es/texidocs/beam-endings-in-score-context.texidoc b/Documentation/es/texidocs/beam-endings-in-score-context.texidoc new file mode 100644 index 0000000000..54a18ba499 --- /dev/null +++ b/Documentation/es/texidocs/beam-endings-in-score-context.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Las reglas de final de barra especificadas en el contexto +@code{Score} se aplican a todos los pentagramas, pero se pueden +modificar tanto en los niveles de @code{Staff} como de +@code{Voice}: + +" + doctitlees = "Finales de barra en el contexto Score" + diff --git a/Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc b/Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc new file mode 100644 index 0000000000..bf850e88bd --- /dev/null +++ b/Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +barras automáticas se debe especificar la forma de agrupamiento. +Por ejemplo, para agrupar todas las barras en la forma 2-3-2 en el +compás de 7/8, especificamos los finales de barra en 2/8 y 5/8: + +" + doctitlees = "Agrupamiento de las barras en el compás de 7/8" + diff --git a/Documentation/es/texidocs/beams-across-line-breaks.texidoc b/Documentation/es/texidocs/beams-across-line-breaks.texidoc new file mode 100644 index 0000000000..be52b86006 --- /dev/null +++ b/Documentation/es/texidocs/beams-across-line-breaks.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Normalmente están prohibidos los saltos de línea si las barras +atraviesan las líneas divisorias. Se puede cambiar este +comportamiento como se muestra aquí: + +" + doctitlees = "Barras que atraviesan saltos de línea" + diff --git a/input/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc b/Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc similarity index 83% rename from input/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc rename to Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc index 251d3a5ab6..f4660a5482 100644 --- a/input/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc +++ b/Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " La instrucción @code{\\whiteout} intercala un rectángulo blanco debajo de un elemento de marcado. Este rectángulo blanco no tapa diff --git a/input/texidocs/broken-crescendo-hairpin.texidoc b/Documentation/es/texidocs/broken-crescendo-hairpin.texidoc similarity index 92% rename from input/texidocs/broken-crescendo-hairpin.texidoc rename to Documentation/es/texidocs/broken-crescendo-hairpin.texidoc index 69ecb3b55e..b08fff2745 100644 --- a/input/texidocs/broken-crescendo-hairpin.texidoc +++ b/Documentation/es/texidocs/broken-crescendo-hairpin.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 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 diff --git a/Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc b/Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc new file mode 100644 index 0000000000..e02418e940 --- /dev/null +++ b/Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +de código presenta una combinación visualmente satisfactoria de estas +dos marcas. + +" + doctitlees = "Cesura tipo \"vías del tren\" con calderón" diff --git a/Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc b/Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc new file mode 100644 index 0000000000..6ed9bf75a6 --- /dev/null +++ b/Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Este ejemplo proporciona una función para tipografiar un regulador con +texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra +también cómo modificar la manera en que se imprime normalmente un +objeto, utilizando código de Scheme. + +" + doctitlees = "Centrar texto debajo de un regulador" diff --git a/Documentation/es/texidocs/changing--flageolet-mark-size.texidoc b/Documentation/es/texidocs/changing--flageolet-mark-size.texidoc new file mode 100644 index 0000000000..eacf1ab36a --- /dev/null +++ b/Documentation/es/texidocs/changing--flageolet-mark-size.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Para hacer más pequeño el círculo de @code{\\flageolet} (armónico) +utilice la siguiente función de Scheme. + +" + doctitlees = "Cambiar el tamaño de la marca de \\flageolet" + diff --git a/Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc b/Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc new file mode 100644 index 0000000000..ef0fe4f6f4 --- /dev/null +++ b/Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden modificar notas individuales de un acorde con la instrucción +@code{\\tweak}, alterando la propiedad @code{font-size}. + +Dentro de un acorde (entre ángulos simples @code{< >}), antes de la +nota que queremos alterar, situamos la instrucción @code{\\tweak} +seguida por @code{#'font-size} y definimos el tamaño adecuado como +@code{#-2} (una cabeza pequeña). + +" + doctitlees = "Modificar el tamaño de una nota suelta de un acorde" diff --git a/Documentation/es/texidocs/changing-beam-knee-gap.texidoc b/Documentation/es/texidocs/changing-beam-knee-gap.texidoc new file mode 100644 index 0000000000..c8baea3a50 --- /dev/null +++ b/Documentation/es/texidocs/changing-beam-knee-gap.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se insertan automáticamente barras en ángulo cuando se detecta un +intervalo muy grande entre las notas. Se puede hacer un ajuste +fino de este comportamiento a través de la propiedad +@code{auto-knee-gap}. Se traza una barra doblada si el salto es +mayor que el valor de @code{auto-knee-gap} más el ancho del objeto +barra (que depende de la duración de las notas y de la inclinación +de la barra). De forma predeterminada @code{auto-knee-gap} está +establecido a 5.5 espacios de pentagrama. + +" + doctitlees = "Cambiar el salto de las barras en ángulo" + diff --git a/Documentation/es/texidocs/changing-chord-separator.texidoc b/Documentation/es/texidocs/changing-chord-separator.texidoc new file mode 100644 index 0000000000..45214f0d47 --- /dev/null +++ b/Documentation/es/texidocs/changing-chord-separator.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede establecer el separador entre las distintas partes del +nombre de un acorde para que sea cualquier elemento de marcado. + +" + doctitlees = "Modificación del separador de acordes" + diff --git a/Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc b/Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc new file mode 100644 index 0000000000..98538a917a --- /dev/null +++ b/Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Cambiar la forma de los silencios multicompás" + texidoces = " +Si hay diez compases de silencio o menos, se imprime en el pentagrama +una serie de silencios de breve y longa (conocidos en alemán como +@qq{Kirchenpausen}, «silencios eclesiásticos»); en caso contrario se +muestra una barra normal. Este número predeterminado de diez se +puede cambiar sobreescribiendo la propiedad @code{expand-limit}: + +" + diff --git a/Documentation/es/texidocs/changing-fret-orientations.texidoc b/Documentation/es/texidocs/changing-fret-orientations.texidoc new file mode 100644 index 0000000000..3744ff6632 --- /dev/null +++ b/Documentation/es/texidocs/changing-fret-orientations.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Los diagramas de posiciones de acordes se pueden orientar de tres +formas. De manera predeterminada se alinena la cuerda o traste +superior en las distintas alineaciones. + + +" + + doctitlees = "Modificar la orientación de los trastes" diff --git a/Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc b/Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc new file mode 100644 index 0000000000..04d12a9107 --- /dev/null +++ b/Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Al producir una salida MIDI, el comportamiento predeterminado es que +cada pentagrama representa un canal MIDI, con todas las voces de dicho +pentagrama mezcladas. Esto reduce al mínimo el riesgo de que se agote +el número de canales MIDI disponibles, pues existe un máximo de 16 +canales por cada puerto MIDI, y la mayoría de los dispositivos sólo +tiene un puerto. + +Sin embargo, cuando se traslada el interpretador +@code{Staff_performer} al contexto @code{Voice}, cada voz de un +pentagrama puede tener su propio canal MIDI, como se muestra en el +siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se +crean dos canales MIDI, cada uno con un @code{midiInstrument} +distinto. + +" + doctitlees = "Modificar la salida MIDI para que tenga un canal por cada voz" diff --git a/Documentation/es/texidocs/changing-partcombine-texts.texidoc b/Documentation/es/texidocs/changing-partcombine-texts.texidoc new file mode 100644 index 0000000000..f814b538f0 --- /dev/null +++ b/Documentation/es/texidocs/changing-partcombine-texts.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +y de unísono: + +" + doctitlees = "Cambiar los textos de partcombine" + diff --git a/Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc new file mode 100644 index 0000000000..d8016d904c --- /dev/null +++ b/Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede modificar el texto empleado para los crescendos y +decrescendos modificando las propiedades de contexto +@code{crescendoText} y @code{decrescendoText}. + +El estilo de la línea de extensión se puede cambiar modificando la +propiedad @code{'style} de @code{DynamicTextSpanner}. El valor +predeterminado es @code{'dashed-line} (línea discontinua), y entre +otros valores posibles se encuentran @code{'line} (línea), +@code{'dotted-line} (línea de puntos) y @code{'none} (nada): + +" + doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales" + diff --git a/Documentation/es/texidocs/changing-the-ambitus-gap.texidoc b/Documentation/es/texidocs/changing-the-ambitus-gap.texidoc new file mode 100644 index 0000000000..0da022fa33 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-ambitus-gap.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Es posible ajustar la separación en las indicaciones de tesitura. + +" + + doctitlees = "Modificación de la separación en las indicaciones de tesitura" diff --git a/Documentation/es/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc b/Documentation/es/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc new file mode 100644 index 0000000000..7fd7000c0e --- /dev/null +++ b/Documentation/es/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede cambiar el aspecto de las ligaduras de expresión de +continuas a punteadas o intermitentes. + +" + doctitlees = "Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente" diff --git a/Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc b/Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc new file mode 100644 index 0000000000..6d77b12cd0 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +El glifo de la marca de respiración se puede ajustar +sobreescribiendo la propiedad de texto del objeto de presentación +@code{BreathingSign}, con cualquier otro texto de marcado. + +" + doctitlees = "Cambiar el símbolo de la marca de respiración" + diff --git a/Documentation/es/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc b/Documentation/es/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc new file mode 100644 index 0000000000..ccb86e58bb --- /dev/null +++ b/Documentation/es/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La nomenclatura inglesa (predeterminada) para los acordes del cifrado +americano se puede cambiar por la alemana (@code{\\germanChords} +sustituye B y Bes por H y B) o por la semi-alemana +(@code{\\semiGermanChords} sustituye B y Bes por H y Bb). + +" + doctitlees = "Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana" diff --git a/Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc b/Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc new file mode 100644 index 0000000000..bcee3b51fc --- /dev/null +++ b/Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Este código muestra cómo cambiar la cantidad de puntillos de una nota. + +" + + doctitlees = "Modificar el número de puntillos de una nota" + diff --git a/Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc b/Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc new file mode 100644 index 0000000000..bb7d2285d6 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +@code{figuredBassAlterationDirection} y +@code{figuredBassPlusDirection}. + +" + doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado" + diff --git a/Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc b/Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc new file mode 100644 index 0000000000..333eedc328 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc @@ -0,0 +1,10 @@ +%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Se puede cambiar el tamaño y grosor de las líneas de los diagramas de +posiciones para instrumentos de viento madera. + +" + + doctitlees = "Modificar el tamaño de los diagramas de viento madera" diff --git a/Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc new file mode 100644 index 0000000000..2317c49ee9 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Para cambiar el tempo en la salida MIDI sin +imprimir nada, hacemos invisible la indicación metronómica: + +" + + doctitlees = "Cambiar el tempo sin indicación metronómica" + diff --git a/Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc b/Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc new file mode 100644 index 0000000000..8867575b20 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede usar @code{Staff.pedalSustainStrings} para fijar el texto de +las indicaciones de pisar pedal y levantar pedal. Observe que las +únicas cadenas válidas son las que están en la lista de glifos de +pedal: los valores que aparecen en este fragmento de código son una +relación exhaustiva. + +" + doctitlees = "Modificar el texto de las indicaciones de pedal" + + diff --git a/Documentation/es/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc b/Documentation/es/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc new file mode 100644 index 0000000000..ad757a2c0e --- /dev/null +++ b/Documentation/es/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La instrucción @code{\\time} establece las propiedades +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y +@code{measureLength} en el contexto @code{Timing}, que normalmente +tiene el alias @code{Score}. La modificación del valor de +@code{timeSignatureFraction} hace que se imprima la nueva indicación +de compás sin que cambie ninguna de las demás propiedades: + +" + doctitlees = "Cambio de compás sin afectar al barrado" + + diff --git a/Documentation/es/texidocs/changing-the-tuplet-number.texidoc b/Documentation/es/texidocs/changing-the-tuplet-number.texidoc new file mode 100644 index 0000000000..7dfc8ba3b8 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-tuplet-number.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Cambiar el número del grupo especial" + texidoces = " + +De forma predeterminada sólo se imprime el numerador del grupo +especial sobre el corchete de grupo, es decir, el denominador del +argumento de la instrucción @code{\\times}. De forma alternativa, se +puede imprimr un quebrado en la forma numerador:denominador del número +del grupo, o eliminar el número. + +" + diff --git a/input/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc b/Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc similarity index 89% rename from input/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc rename to Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc index d0fc068c25..465c6733f8 100644 --- a/input/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc +++ b/Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " La propiedad @code{measureLength}, junto con @code{measurePosition}, determina cuándo es necesario dibujar una diff --git a/Documentation/es/texidocs/chant-or-psalms-notation.texidoc b/Documentation/es/texidocs/chant-or-psalms-notation.texidoc new file mode 100644 index 0000000000..37e41c9c75 --- /dev/null +++ b/Documentation/es/texidocs/chant-or-psalms-notation.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Este tipo de notación se utiliza para el canto de los Salmos, en +que las estrofas no siempre tienen la misma longitud. + +" + doctitlees = "Notación de responsos o salmos" diff --git a/Documentation/es/texidocs/chord-glissando-in-tablature.texidoc b/Documentation/es/texidocs/chord-glissando-in-tablature.texidoc new file mode 100644 index 0000000000..aaaf849314 --- /dev/null +++ b/Documentation/es/texidocs/chord-glissando-in-tablature.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Los deslizamientos para acordes se pueden indicar tanto en el contexto +Staff como en TabStaff. Los números de cuerda son necesarios para +TabStaff porque los cálculos de cuerda automáticos son diferentes para +los acordes y para notas sueltas, y @code{\\chordGlissando} traza +líneas entre las notas individuales. + +" + + doctitlees = "Glissando de acordes en tablatura" \ No newline at end of file diff --git a/Documentation/es/texidocs/chord-name-exceptions.texidoc b/Documentation/es/texidocs/chord-name-exceptions.texidoc new file mode 100644 index 0000000000..171e5c5b8d --- /dev/null +++ b/Documentation/es/texidocs/chord-name-exceptions.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede usar la propiedad @code{chordNameExceptions} para +almacenar una lista de notaciones espaciales para acordes +específicos. + +" + doctitlees = "Excepciones para los nombres de acorde" + diff --git a/Documentation/es/texidocs/chord-name-major7.texidoc b/Documentation/es/texidocs/chord-name-major7.texidoc new file mode 100644 index 0000000000..961522aca8 --- /dev/null +++ b/Documentation/es/texidocs/chord-name-major7.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La presentación del acorde de séptima mayor se +puede ajustar mediante majorSevenSymbol. + +" + doctitlees = "Nombre de acorde maj7" + diff --git a/Documentation/es/texidocs/chordchanges-for-fretboards.texidoc b/Documentation/es/texidocs/chordchanges-for-fretboards.texidoc new file mode 100644 index 0000000000..243860a623 --- /dev/null +++ b/Documentation/es/texidocs/chordchanges-for-fretboards.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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. + +" + + doctitlees = "Cambios de acorde de posiciones de trastes" + diff --git a/Documentation/es/texidocs/clip-systems.texidoc b/Documentation/es/texidocs/clip-systems.texidoc new file mode 100644 index 0000000000..a02bfefc0e --- /dev/null +++ b/Documentation/es/texidocs/clip-systems.texidoc @@ -0,0 +1,26 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Este código muestra cómo recortar (extraer) fragmentos a partir de una +partitura completa. + +Este archivo tiene que procesarse de forma separada con la opción +@code{-dclip-systems}; la página de fragmentos de código podría no +mostrar el resultado adecuadamente. + +La salida consiste en archivos con los nombres +@samp{base-from-inicio-to-final[-número].eps}. + + +Si se incluyen los comienzos y finales de los sistemas, incluyen las +dimensiones del grob del sistema, por ejemplo los nombres de +instrumento. + + +Las notas de adorno en el punto final de la región no se incluyen. + + +Las regiones pueden abarcar varios sistemas. En este caso, se generan +varios archivos EPS. + +" + doctitlees = "Recorte de sistemas" diff --git a/Documentation/es/texidocs/clusters.texidoc b/Documentation/es/texidocs/clusters.texidoc new file mode 100644 index 0000000000..e08d62d488 --- /dev/null +++ b/Documentation/es/texidocs/clusters.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Los «clusters» o racimos son un mecanismo para indicar la +interpretación de un ámbito de notas al mismo tiempo. + +" + doctitlees = "Clusters («racimos»)" diff --git a/Documentation/es/texidocs/combining-dynamics-with-markup-texts.texidoc b/Documentation/es/texidocs/combining-dynamics-with-markup-texts.texidoc new file mode 100644 index 0000000000..4c2dc3775b --- /dev/null +++ b/Documentation/es/texidocs/combining-dynamics-with-markup-texts.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Ciertas indicaciones dinámicas pueden llevar textos (como @qq{più +forte} o @qq{piano subito}). Se pueden producir usando un bloque +@code{\\markup}. + +" + doctitlees = "Combinar indicaciones dinámicas con marcados textuales" diff --git a/Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc b/Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc new file mode 100644 index 0000000000..47e15dd42c --- /dev/null +++ b/Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc @@ -0,0 +1,22 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +La herramienta de combinación de partes (instrucción +@code{\\partcombine}) permite la combinación de varias partes +diferentes sobre el mismo pentagrama. Las indicaciones textuales +tales como @qq{solo} o @qq{a2} se añaden de forma predeterminada; para +quitarlas, sencillamente establezca la propiedad +@code{printPartCombineTexts} al valor @qq{falso}. Para partituras +vocales (como himnos), no hay necesidad de añadir los textos @qq{solo} +o @qq{a2}, por lo que se deben desactivar. Sin embargo, podría ser +mejor no usarlo si hay solos, porque éstos no se indicarán. En tales +casos podría ser preferible la notación polifónica estándar. + +Este fragmento de código presenta las tres formas en que se pueden +imprimir dos partes sobre un solo pentagrama: polifonía estándar, +@code{\\partcombine} sin textos, y @code{\\partcombine} con +textos. + +" + doctitlees = "Combinar dos partes sobre el mismo pentagrama" + diff --git a/Documentation/es/texidocs/compound-time-signatures.texidoc b/Documentation/es/texidocs/compound-time-signatures.texidoc new file mode 100644 index 0000000000..64dec02817 --- /dev/null +++ b/Documentation/es/texidocs/compound-time-signatures.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Indicaciones de compases compuestos" + texidoces = " +Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden +ejecutar como compases compuestos (p.ej. @qq{3/8 + 2/8}), que combinan +dos o más metros diferentes. LilyPond puede hacer la música de este +tipo fácil de leer e interpretar, imprimiendo explícitamente las +indicaciones de compás compuesto y adaptando el comportamiento +automático de las barras (también se pueden añadir indicaciones +gráficas de la agrupación de compases; véase el fragmento de código +apropiado en la base de datos). + +" + diff --git a/Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc new file mode 100644 index 0000000000..cba84750fe --- /dev/null +++ b/Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc @@ -0,0 +1,28 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La agrupación de pulsos dentro de un compás está controlada por la +propiedad de contexto @code{beatStructure}. Hay establecidos valores +de @code{beatStructure} para muchos tipos de compases en +@file{scm/time-signature-settings.scm}. Los valores de +@code{beatStructure} se pueden cambiar o establecer con @code{\\set}. +Como alternativa, se puede usar la función de Scheme +@code{set-time-signature} para establecer tanto el compás como la +estructura de pulsos. @code{set-time-signature} acepta tres +argumentos: el número de pulsos, la longitud del pulso y la agrupación +interna de los pulsos en el compás. Tanto @code{\\time} como +@code{set-time-signature} se aplican al contexto @code{Timing}, por lo +que no restablecen los valores de @code{beatStructure} ni de +@code{baseMoment} que se establezcan en otros contextos de nivel +inferior, como @code{Voice}. + +Si el grabador @code{Measure_grouping_engraver} está incluido en uno +de los contextos de presentación, se imprimirán signos de agrupación +de pulsos. Estos símbolos facilitan la lectura de música moderna +rítmicamente compleja. En este ejemplo, el compás de 9/8 se agrupa +según dos patrones distintos utilizando los dos métodos, mientras que +el compás de 5/8 se agrupa de acuerdo con el ajuste predeterminado que +está en @file{scm/time-signature-settings.scm}: + +" +doctitlees = "Símbolos de dirección y símbolos de agrupación de compás" + diff --git a/Documentation/es/texidocs/contemporary-glissando.texidoc b/Documentation/es/texidocs/contemporary-glissando.texidoc new file mode 100644 index 0000000000..e93ef8e00c --- /dev/null +++ b/Documentation/es/texidocs/contemporary-glissando.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede tipografiar un gissando contemporáneo sin nota final +utilizando una nota oculta y temporalización de cadenza. + +" + doctitlees = "Glissando contemporáneo" + diff --git a/Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc b/Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc new file mode 100644 index 0000000000..6947356e1f --- /dev/null +++ b/Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc @@ -0,0 +1,21 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +La visibilidad de los objetos de extensión que acaban en la primera +nota después de un salto de línea está controlada por la función de +callback de @code{after-line-breaking} +@code{ly:spanner::kill-zero-spanned-time}. + +Para los objetos como los glissandos y los reguladores, el +comportamiento predeterminado es ocultar el objeto de extensión +después del salto; la inhabilitación de la función de callback hace +que el objeto de extensión roto por la izquierda pueda mostrarse. + +De forma inversa, los objetos de extensión que son visibles +normalmente, como los objetos de extensión de texto, se pueden +ocultar habilitando la función de callback. +" + + doctitlees = "Controlar la visibilidad de los objetos de + extensión después de un salto de línea" + diff --git a/Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc new file mode 100644 index 0000000000..feed3ce3c6 --- /dev/null +++ b/Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +digitaciones, se debe utilizar una construcción de acorde <> aunque +sea una sola nota. + + +" + doctitlees = "Controlar la colocación de las digitaciones de acordes" + + diff --git a/Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc new file mode 100644 index 0000000000..c8efb34e07 --- /dev/null +++ b/Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +El orden vertical que ocupan las inscripciones gráficas está +controlado con la propiedad @code{'script-priority}. Cuanto más +bajo es este número, más cerca de la nota se colocará. En este +ejemplo, el @code{TextScript} (el sostenido) tiene primero la +prioridad más baja, por lo que se sitúa en la posición más baja en +el primer ejemplo. En el segundo, el semitrino (el @code{Script}) +es el que la tiene más baja, por lo que se sitúa en la parte +interior. Cuando dos objetos tienen la misma prioridad, el orden +en que se introducen determina cuál será el que aparece en primer +lugar. + +" + doctitlees = "Controlar la ordenación vertical de las inscripciones" + diff --git a/Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc b/Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc new file mode 100644 index 0000000000..4ff0544b59 --- /dev/null +++ b/Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +El comportamiento predeterminado de la visibilidad de los corchetes de +grupo de valoración especial es imprimir el corchete a no ser que haya +una barra de la misma longitud que el grupo especial. Para controlar +la visibilidad de los corchetes de grupo, establezca la propiedad +@code{'bracket-visibility} a @code{#t} (imprimir el corchete siempre), +@code{#f} (no imprimirlo nunca) o @code{#'if-no-beam} (imprimir el +corchete solamente si no hay barra). + +" + + doctitlees = "Controlar la visibilidad de los corchetes de grupo especial" diff --git a/Documentation/es/texidocs/creating-a-delayed-turn.texidoc b/Documentation/es/texidocs/creating-a-delayed-turn.texidoc new file mode 100644 index 0000000000..b94ab023bb --- /dev/null +++ b/Documentation/es/texidocs/creating-a-delayed-turn.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 +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 +varias sobreescriturasw de propiedades. La propiedad +@code{outside-staff-priority} se debe establecer al valor @code{#f}, pues en +caso contrario tendría prioridad sobre la propiedad @code{avoid-slur +property}. El valor de @code{halign} se utiliza para colocar el +grupeto horizontalmente. + +" + +doctitlees = "Crear un grupeto de anticipación" + + diff --git a/input/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc b/Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc similarity index 87% rename from input/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc rename to Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc index 4766324dd6..69ec5d38b3 100644 --- a/input/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc +++ b/Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " En una música que tenga muchas apariciones de la misma secuencia de notas a distintas alturas, podría ser de diff --git a/Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc new file mode 100644 index 0000000000..9c6df1902f --- /dev/null +++ b/Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede trazar un símbolo de arpegio entre notas de distintas +voces que están sobre el mismo pentagrama si el grabador +@code{Span_arpeggio_engraver} se traslada al contexto de +@code{Staff} context: + +" + doctitlees = "Crear arpegios entre notas de voces distintas" + diff --git a/Documentation/es/texidocs/creating-blank-staves.texidoc b/Documentation/es/texidocs/creating-blank-staves.texidoc new file mode 100644 index 0000000000..009f9f6d43 --- /dev/null +++ b/Documentation/es/texidocs/creating-blank-staves.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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} +del contexto @code{Score}, y los grabadores de la indicación de compás +@code{Time_signature_engraver}, de la clave @code{Clef_engraver} y de +los compases @code{Bar_engraver} del contexto de @code{Staff}. + +" + doctitlees = "Crear pentagramas en blanco" diff --git a/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc new file mode 100644 index 0000000000..82390ad449 --- /dev/null +++ b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Dentro de un @code{PianoStaff}, es posible hacer que un arpegio +cruce entre los pentagramas ajustando la propiedad +@code{PianoStaff.connectArpeggios}. + +" + doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano" + diff --git a/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc new file mode 100644 index 0000000000..7656904afe --- /dev/null +++ b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden crear arpegios que se cruzan entre pentagramas dentro de +contextos distintos a @code{GrandStaff}, @code{PianoStaff} y +@code{StaffGroup} si se incluye el grabador +@code{Span_arpeggio_engraver} en el contexto de @code{Score}. + +" + doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos" + diff --git a/Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc new file mode 100644 index 0000000000..5ca0a7964d --- /dev/null +++ b/Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden crear indicaciones metronómicas nuevas en modo de +marcado, pero no cambian el tempo en la salida MIDI. + +" + doctitlees = "Crear indicaciones metronómicas en modo de marcado" + diff --git a/Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc b/Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc new file mode 100644 index 0000000000..65235e26b4 --- /dev/null +++ b/Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +tiene un inconveniente: los objetos que se crean se comportarán +como elementos de marcado de texto y no como indicaciones +dinámicas. + +Sin embargo, es posible crear un objeto similar utilizando el código +de Scheme equivalente (como se explica en la Referencia de la +notación), en combinación con la función +@code{make-dynamic-script}. De esta forma, el elemento de marcado se +tratará como una indicación dinámica, y por tanto seguirá siendo +compatible con instrucciones como @code{\\dynamicUp} o +@code{\\dynamicDown}. + +" + doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis" diff --git a/input/texidocs/creating-simultaneous-rehearsal-marks.texidoc b/Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc similarity index 87% rename from input/texidocs/creating-simultaneous-rehearsal-marks.texidoc rename to Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc index 21419c1d74..44b8741f41 100644 --- a/input/texidocs/creating-simultaneous-rehearsal-marks.texidoc +++ b/Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 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 diff --git a/input/texidocs/creating-slurs-across-voices.texidoc b/Documentation/es/texidocs/creating-slurs-across-voices.texidoc similarity index 83% rename from input/texidocs/creating-slurs-across-voices.texidoc rename to Documentation/es/texidocs/creating-slurs-across-voices.texidoc index 6ae4a9a169..69a6d2e75e 100644 --- a/input/texidocs/creating-slurs-across-voices.texidoc +++ b/Documentation/es/texidocs/creating-slurs-across-voices.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " En determinadas situaciones es necesario crear ligaduras de expresión entre notas que están en voces distintas. diff --git a/input/texidocs/creating-text-spanners.texidoc b/Documentation/es/texidocs/creating-text-spanners.texidoc similarity index 82% rename from input/texidocs/creating-text-spanners.texidoc rename to Documentation/es/texidocs/creating-text-spanners.texidoc index 775955487b..a0fcd8c4dd 100644 --- a/input/texidocs/creating-text-spanners.texidoc +++ b/Documentation/es/texidocs/creating-text-spanners.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan} permiten la creación de elementos de extensión textuales tan diff --git a/Documentation/es/texidocs/cross-staff-tremolos.texidoc b/Documentation/es/texidocs/cross-staff-tremolos.texidoc new file mode 100644 index 0000000000..54008369f3 --- /dev/null +++ b/Documentation/es/texidocs/cross-staff-tremolos.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Dado que @code{\\repeat tremolo} espera exactamente dos argumentos +musicales para los trémolos de acorde, la nota o acorde que cambia de +pentagrama en un trémolo que cruza el pentagrama se debe colocar +dentro de llaves curvas junto a su instrucción @code{\\change Staff}. + +" + + doctitlees = "Trémolos de pentagrama cruzado" diff --git a/Documentation/es/texidocs/custodes.texidoc b/Documentation/es/texidocs/custodes.texidoc new file mode 100644 index 0000000000..7d6e56cfb6 --- /dev/null +++ b/Documentation/es/texidocs/custodes.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden tipografiar «custos» en diferentes estilos. + +" + doctitlees = "Custos" diff --git a/Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc b/Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc new file mode 100644 index 0000000000..02b1605e58 --- /dev/null +++ b/Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden establecer las propiedades de los diagramas de +posiciones de acordes por medio de @code{'fret-diagram-details}. +Para los diagramas de posiciones de FretBoard, se aplican los +overrides (sobreescrituras) al objeto @code{FretBoards.FretBoard}. +Como @code{Voice}, @code{FretBoards} es un contexto del nivel +inferior, y por tanto se puede omitir su nombre en la +sobreescritura de propiedades. + +" + doctitlees = "Personalizar los diagramas de posiciones" + diff --git a/Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc b/Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc new file mode 100644 index 0000000000..e7f8755c12 --- /dev/null +++ b/Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden establecer las propiedades de los diagramas de +posiciones a través de @code{'fret-diagram-details}. Para los +diagramas de posiciones de marcado, se pueden aplicar overrides +(sobreescrituras) al objeto @code{Voice.TextScript} o directamente al elemento de marcado. + +" + doctitlees = "Personalizar diagramas de posiciones de marcado" + diff --git a/Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc b/Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc new file mode 100644 index 0000000000..36ef3e62cf --- /dev/null +++ b/Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La dirección predeterminada de las plicas sobre la tercera línea +del pentagrama está determinada por la propiedad +@code{neutral-direction} del objeto @code{Stem}. + +" + doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama" + diff --git a/Documentation/es/texidocs/defining-an-engraver-in-scheme-ambitus-engraver.texidoc b/Documentation/es/texidocs/defining-an-engraver-in-scheme-ambitus-engraver.texidoc new file mode 100644 index 0000000000..5178d03144 --- /dev/null +++ b/Documentation/es/texidocs/defining-an-engraver-in-scheme-ambitus-engraver.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Este ejemplo demuestra cómo se puede definir el grabador de ámbito en +el espacio del usuario, con un grabador de Scheme. + +Esto es básicamente una reescritura en Scheme del código de +@file{lily/ambitus-engraver.cc}. + +" + + doctitlees = "Definir un grabador en Scheme: grabador de ámbito" diff --git a/Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc b/Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc new file mode 100644 index 0000000000..42e58df829 --- /dev/null +++ b/Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Se pueden añadir diagramas de posiciones predefinidas para +instrumentos nuevos además de los estándar que se usan para la +guitarra. Este archivo muestra cómo se hace, definiendo una afinación +nueva y unas cuantas posiciones para el cuatro venezolano. + +Este archivo también muestra cómo se pueden incluir las digitaciones +en los acordes que se usan como puntos de referencia para la búsqueda +de acordes en la tabla, y mostrarse en el diagrama de posiciones y la +tablatura @code{TabStaff}, pero no en la música. + +Estas posiciones no se pueden transportar porque contienen información +de las cuerdas. Hay planes para corregir esto en un futuro. + +" + doctitlees = "Definición de posiciones predefinidas para otros instrumentos" + diff --git a/Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc new file mode 100644 index 0000000000..3f324eafc4 --- /dev/null +++ b/Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Si hay un solo pentagrama en un de los tipos de sistema +@code{ChoirStaff} o @code{StaffGroup}, el comportamiento +predeterminado es que no se imprima el corchete en la barra inicial. +Esto se puede cambiar sobreescribiendo las propiedades adecuadas. + +Observe que en contextos como @code{PianoStaff} y +@code{GrandStaff} en que los sistemas empiezan con una llave en +lugar de un corchete, se debe establecer el valor de una propiedad +distinta, como se ve en el segundo sistema del ejemplo. + +" + doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama" + + diff --git a/Documentation/es/texidocs/displaying-complex-chords.texidoc b/Documentation/es/texidocs/displaying-complex-chords.texidoc new file mode 100644 index 0000000000..87acc19c39 --- /dev/null +++ b/Documentation/es/texidocs/displaying-complex-chords.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +He aquí una forma de imprimir un acorde en el que suena la misma nota +dos veces con distintas alteraciones. + +" + doctitlees = "Impresión de acordes complejos" diff --git a/Documentation/es/texidocs/displaying-grob-ancestry.texidoc b/Documentation/es/texidocs/displaying-grob-ancestry.texidoc new file mode 100644 index 0000000000..f693344dab --- /dev/null +++ b/Documentation/es/texidocs/displaying-grob-ancestry.texidoc @@ -0,0 +1,69 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Al trabajar con los callbacks de un grob, puede ser de mucha ayuda +entender el @qq{árbol genealógico} de un grob. La mayor parte de los +grobs tienen @qq{padres} que influyen en el posicionamiento del grob. +los padres X e Y influyen en las posiciones horizontal y vertical del +grob, respectivamente. Además, cada pade puede tener padres a su vez. + + +Por desgracia, existen varios aspectos de la genealogía de un grob que +pueden llevar a confusión: + + +@itemize + +@item Los tipos de padre que tiene un grob pueden depender del +contexto. + +@item Para ciertos grobs, los padres X e Y son el mismo. + +@item Un @qq{ancestro} concreto puede estar relacionado con un grob de +mas de una manera. + +@item El concepto de @qq{generaciones} es engañoso. + +@end itemize + + +Por ejemplo, el grob @code{System} puede ser tanto un padre (sobre el +lado Y) como un abuelo (dos veces en el lado X) de un grob +@code{VerticalAlignment}. + + +Este macro imprime, en la consola, una representación textual de la +genealogía de un grob. + + +Cuando se llama de esta forma + +@example +@{ + \\once \\override NoteHead #'before-line-breaking = #display-ancestry + c4 +@} +@end example + + +Se genera la siguiente salida: + + +@example +------------------------------------ + +NoteHead X,Y: NoteColumn + X: PaperColumn + X,Y: System + Y: VerticalAxisGroup + X: NonMusicalPaperColumn + X,Y: System + Y: VerticalAlignment + X: NonMusicalPaperColumn + X,Y: System + Y: System +@end example + +" + + doctitlees = "Imprimir el árbol genealógico de un grob" diff --git a/Documentation/es/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc b/Documentation/es/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc new file mode 100644 index 0000000000..06cbb391b5 --- /dev/null +++ b/Documentation/es/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +Webern (la @qq{Segunda} escuela de Viena), cada nota de la escala de +doce tonos se debe tratar con igualdad, sin ninguna jerarquía como los +grados clásicos tonales. Por tanto, estos compositores imprimen una +alteración accidental para cada nota, incluso en las notas naturales, +para enfatizar su nuevo enfoque de la teoría y el lenguaje musicales. + +Este fragmento de código muestra cómo conseguir dichas reglas de +notación. + +" + diff --git a/Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc b/Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc new file mode 100644 index 0000000000..e258dbe4e2 --- /dev/null +++ b/Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Funciones postfijas para la creación de objetos de extensión de texto +personalizados. Los objetos de extensión deben comenzar en la primera +nota del compás. Hay que utilizar -\mycresc, en caso contrario el +comienzo del eobjeto de extensión se asignará a la nota siguiente. + +" + + doctitlees = "Objeto personalizado de extensión de texto de matices dinámicos, postfijo" diff --git a/Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc b/Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc new file mode 100644 index 0000000000..a0e9e4735f --- /dev/null +++ b/Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Los objetos de extensión \cresc, \dim y \decresc ahora se pueden +redefinir como operadores postfijos y producir un solo objeto de +extensión de texto. La definición de extensores personalizados +también es fácil. Se pueden mezclar con facilidad los crescendi +textuales y en forma de reguladores. \< y \> producen reguladores +gráficos de forma predeterminada, \cresc etc. producen elementos +extensores de texto de forma predeterminada. + +" + + doctitlees = "Objetos extensores de texto postfijos para dinámica" diff --git a/Documentation/es/texidocs/embedding-native-postscript-in-a--markup-block.texidoc b/Documentation/es/texidocs/embedding-native-postscript-in-a--markup-block.texidoc new file mode 100644 index 0000000000..2b0fd93df3 --- /dev/null +++ b/Documentation/es/texidocs/embedding-native-postscript-in-a--markup-block.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede insertar códico PostScript directamente dentro de un +bloque @code{\\markup}. + +" + doctitlees = "Empotrar PostScript nativo dentro de un bloque \\markup" diff --git a/Documentation/es/texidocs/engravers-one-by-one.texidoc b/Documentation/es/texidocs/engravers-one-by-one.texidoc new file mode 100644 index 0000000000..00c356111a --- /dev/null +++ b/Documentation/es/texidocs/engravers-one-by-one.texidoc @@ -0,0 +1,28 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Del problema central de la notación, esto es, crear un determinado +símbolo, se encargan los «plugins» o complementos añadidos. Cada +uno de los complementos se conoce como un grabador. En este +ejemplo, los grabadores se van activando uno por uno, en el orden +siguiente: + +- cabeza de las notas, + +- el símbolo del pentagrama, + +- clave, + +- plicas, + +- barras, ligaduras de expresión, acentos, + +- alteraciones, líneas divisorias, indicación del compás, y armadura. + +Los grabadores se encuentran agrupados. Por ejemplo, las cabezas de +nota, ligaduras de expresión, barras de corchea, etc. forman un +contexto de voz, @code{Voice}. Los grabadores de la armadura, +alteraciones, líneas de compás, etc. forman un contexto de pentagrama, +@code{Staff}. + +" + doctitlees = "Los grabadores, uno por uno" diff --git a/Documentation/es/texidocs/engraving-ties-manually.texidoc b/Documentation/es/texidocs/engraving-ties-manually.texidoc new file mode 100644 index 0000000000..b51607698d --- /dev/null +++ b/Documentation/es/texidocs/engraving-ties-manually.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Grabado manual de las ligaduras" + texidoces = " +Se pueden grabar a mano las ligaduras modificando la propiedad +@code{tie-configuration} del objeto @code{TieColumn}. El primer número +indica la distancia a partir de la tercera línea del pentagrama en +espacios de pentagrama, y el segundo número indica la dirección (1 = +hacia arriba, -1 = hacia abajo). + +" + diff --git a/Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc new file mode 100644 index 0000000000..6090497cf8 --- /dev/null +++ b/Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times" + texidoces = " +La propiedad @code{tupletSpannerDuration} establece cuánto debe durar +cada grupo de valoración especial contenido dentro del corchete que +aparece después de @code{\\times}. Así, se pueden escribir muchos +tresillos seguidos dentro de una sola expresión @code{\\times}, +ahorrando trabajo de teclado. + +En el ejemplo se muestran dos tresillos, aunque se ha escrito +@code{\\times} una sola vez. + + +Para ver más inforamción sobre @code{make-moment}, véase la sección +correspondiente del manual de Referencia de la Notación. + +" + diff --git a/Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc b/Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc new file mode 100644 index 0000000000..02c525ea08 --- /dev/null +++ b/Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de +expresión. + +" + + doctitlees = "Simular un hammer o ligado ascendente en una tablatura" diff --git a/Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc b/Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc new file mode 100644 index 0000000000..843cd48251 --- /dev/null +++ b/Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden conseguir símbolos especiales combinando glifos existentes, +lo que es de utilidad para la notación de instrumentos de viento. + +" + doctitlees = "Símbolos de digitación para instrumentos de viento" diff --git a/Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc b/Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc new file mode 100644 index 0000000000..c8711879e1 --- /dev/null +++ b/Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +En este ejemplo se combinan las digitaciones de la mano izquierda, +indicaciones del número de cuerda y digitaciones de la mano +derecha. + +" + doctitlees = "Digitaciones - indicación del número de cuerda y digitaciones de mano derecha" + diff --git a/Documentation/es/texidocs/flamenco-notation.texidoc b/Documentation/es/texidocs/flamenco-notation.texidoc new file mode 100644 index 0000000000..fd6a0b957d --- /dev/null +++ b/Documentation/es/texidocs/flamenco-notation.texidoc @@ -0,0 +1,39 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Para la guitarra flamenca se utilizan ciertos elementos de notación +especiales: + + +@itemize + +@item un símbolo para indicar un golpe sobre la caja de la guitarra +con el nudillo del dedo anular + +@item una flecha para indicar la dirección de los rasgueos + +@item distintas legras para las digitaciones (@qq{p}: pulgar, @qq{i}: +índice, @qq{m}: medio, @qq{a}: anular y @qq{x}: meñique) + +@item Rasgueados de 3 y cautro dedos: hacia arriba con todos los dedos +y terminando con arriba y abajo con el índice + +@item abanicos: rasgueos en serie con el pulgar, hacia abajo y el +meñique y el índice hacia arriba (hay también un abanico 2 en el que +los dedos medio y anular se usan en lugar del meñique) + +@item alza púa: pulsaciones rápidas con el pulgar + +@end itemize + + +Casi todas las figuras utilizan flechas combinadas con digitaciones; +con los abanicos y los rasgueados, las notas se imprimen con cabeza +sólo en el primer acorde. + +Este fragmento de código contiene código de tipo cabecera que se puede +copiar como @file{flamenco.ly} e incluirse en los documentos fuente. + +" + doctitlees = "Notación del flamenco" diff --git a/Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc b/Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc new file mode 100644 index 0000000000..0628e9e69b --- /dev/null +++ b/Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc @@ -0,0 +1,35 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Son posibles tanto los corchetes rectos sobre notas sueltas como +extremos de barra sueltos en figuras unidas, con una combinación de +@code{stemLeftBeamCount}, @code{stemRightBeamCount} e indicadores de +barra @code{[]} emparejados. + +Para corchetes rectos que apunten a la derecha sobre notas sueltas, +use indicadores de barra emparejados @code{[]} y establezca +@code{stemLeftBeamCount} a cero (véase el ejemplo 1). + +Para corchetes rectos que apunten a la izquierda, establezca en su +lugar @code{stemRightBeamCount} (ejemplo 2). + +Para extremos sueltos que apunten a la derecha al final de un conjunto +de notas unidas, establezca @code{stemRightBeamCount} a un valor +positivo. Y para extremos sueltos que apunten a la izquierda al +principio de un conjunto de notas unidas, establezca +@code{stemLeftBeamCount} en su lugar (ejemplo 3). + +A veces, para una nota suelta rodeada de silencios tiene sentido que +lleve los dos extremos sueltos del corchete plano, apuntando a derecha +e izquierda. Hágalo solamente con indicadores de barra emparejados +@code{[ ]} (ejemplo 4). + +(Observe que @code{\\set stemLeftBeamCount} siempre equivale a +@code{\\once \\set}. En otras palabras, los ajustes de la cantidad de +barras no se recuerdan, y por ello el par de corchetes planos +aplicados a la nota Do semicorchea @code{c'16[]} del último ejemplo no +tiene nada que ver con el @code{\\set} de dos notas por detrás.) + +" + doctitlees = "Corchetes rectos y extremos de barra sueltos" + + diff --git a/Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc b/Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc new file mode 100644 index 0000000000..33acdbf16e --- /dev/null +++ b/Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + doctitlees = "Forzar el desplazamiento horizontal de las notas" + +texidoces = " + Cuando el motor de tipografiado no es capaz de todo, se puede usar la + sintaxis siguiente para sobreescribir las decisiones de tipografía. + Las unidades de medida que se usan aquí son espacios de pentagrama. + +" + diff --git a/Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc b/Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc new file mode 100644 index 0000000000..587efb0c16 --- /dev/null +++ b/Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Si LilyPond no cree que haya sitio suficiente para un guión separador +de sílabas, lo omitirá. Se puede sobreescribir este comportamiento +con la propiedad @code{minimum-distance} de @code{LyricHyphen}. + +" + doctitlees = "Forzar la visibilidad de los guiones separadores de sílabas" + + diff --git a/Documentation/es/texidocs/fretboards-alternate-tables.texidoc b/Documentation/es/texidocs/fretboards-alternate-tables.texidoc new file mode 100644 index 0000000000..ed3e9615e1 --- /dev/null +++ b/Documentation/es/texidocs/fretboards-alternate-tables.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Se pueden crear tablas alternativas de diagramas de posiciones. Se +utilizarían para tener diagramas altenativos para un acorde dado. + +Para usar una tabla alternativa de diagramas de posiciones, se debe +crear la tabla primero. Después se añaden los diagramas a la tabla. + +La tabla de diagramas de posiciones que se crea puede estar vacía o se +puede copiar a partir de una tabla existente. + +La tabla a usar en la impresión de de los diagramas predefinidos se +selecciona por medio de la propiedad @code{\\predefinedDiagramTable}. + +" + + doctitlees = "Tablas alternativas de diagramas de posiciones" diff --git a/Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc b/Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc new file mode 100644 index 0000000000..3c0507afb8 --- /dev/null +++ b/Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Armónicos sobre cuerdas pisadas (armónicos artificiales): +" + doctitlees = "Armónicos sobre cuerdas pisadas en tablatura" + + diff --git a/input/texidocs/generating-random-notes.texidoc b/Documentation/es/texidocs/generating-random-notes.texidoc similarity index 84% rename from input/texidocs/generating-random-notes.texidoc rename to Documentation/es/texidocs/generating-random-notes.texidoc index 6df201e0e3..f693aba4bf 100644 --- a/input/texidocs/generating-random-notes.texidoc +++ b/Documentation/es/texidocs/generating-random-notes.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " Este fragmento de código basado en Scheme genera 24 notas aleatorias (o tantas como se necesiten), basándose en la diff --git a/Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc b/Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc new file mode 100644 index 0000000000..4c62612287 --- /dev/null +++ b/Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc @@ -0,0 +1,9 @@ +%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +En muchos casos, las llaves que no están en la columna central se +pueden presentar por el nombre de la llave así como de forma gráfica. + +" + + doctitlees = "Diagramas para viento madera gráficos y textuales" diff --git a/Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc b/Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc new file mode 100644 index 0000000000..f29d1dd7dc --- /dev/null +++ b/Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede cambiar el aspecto de las líneas de rejilla +sobreescribiendo algunas de sus propiedades. + +" + doctitlees = "Líneas de rejilla: modificar su aspecto" + diff --git a/input/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc b/Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc similarity index 83% rename from input/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc rename to Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc index 4d54cf3357..f114913936 100644 --- a/input/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc +++ b/Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " Se pueden trazar líneas verticales normales entre pentagramas para mostrar la relación entre notas; sin embargo, en caso de música diff --git a/Documentation/es/texidocs/grouping-beats.texidoc b/Documentation/es/texidocs/grouping-beats.texidoc new file mode 100644 index 0000000000..007aefe141 --- /dev/null +++ b/Documentation/es/texidocs/grouping-beats.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Los patrones de barrado se pueden alterar con la propiedad +@code{beatGrouping}: + +" + doctitlees = "Agrupar los pulsos" + diff --git a/Documentation/es/texidocs/guitar-slides.texidoc b/Documentation/es/texidocs/guitar-slides.texidoc new file mode 100644 index 0000000000..995125fcc5 --- /dev/null +++ b/Documentation/es/texidocs/guitar-slides.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + + texidoces = " +A diferencia de los glissandos, los @q{slides} o ligaduras pueden +partir de un punto impreciso del mástil hasta un traste específico. +Una buena forma de hacerlo es añadir una nota de mordente antes de la +nota real, como se muestra en el ejemplo siguiente. + +" + + doctitlees = "Ligaduras de guitarra" diff --git a/Documentation/es/texidocs/guitar-strum-rhythms.texidoc b/Documentation/es/texidocs/guitar-strum-rhythms.texidoc new file mode 100644 index 0000000000..8e8871cb4f --- /dev/null +++ b/Documentation/es/texidocs/guitar-strum-rhythms.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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. + +" + doctitlees = "Ritmos rasgueados de guitarra" + diff --git a/Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc b/Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc new file mode 100644 index 0000000000..45f0c80f97 --- /dev/null +++ b/Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Los reguladores pueden imprimirse en uno cualquiera de los estilos de +@code{line-interface}: discontinuo, punteado, línea, trino o zig-zag. + +" + doctitlees = "Reguladores con distintos estilos de línea" + + diff --git a/Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc b/Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc new file mode 100644 index 0000000000..1dcce13c88 --- /dev/null +++ b/Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Aquí se muestra la manera de ocultar las alteraciones de las notas +ligadas al comienzo de un sistema nuevo. + +" + + doctitlees = "Ocultar las alteraciones sobre notas ligadas al principio de un sistema nuevo" + diff --git a/Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc new file mode 100644 index 0000000000..ae585d7e42 --- /dev/null +++ b/Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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. +Esta línea se puede suprimir de la siguiente manera: + +" + doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica" + diff --git a/Documentation/es/texidocs/hymn-template.texidoc b/Documentation/es/texidocs/hymn-template.texidoc new file mode 100644 index 0000000000..f9202e04df --- /dev/null +++ b/Documentation/es/texidocs/hymn-template.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +añadir los versos como texto independiente debajo de la música. + +" + + doctitlees = "Plantilla para himnos" diff --git a/Documentation/es/texidocs/incipit.texidoc b/Documentation/es/texidocs/incipit.texidoc new file mode 100644 index 0000000000..da33f0944f --- /dev/null +++ b/Documentation/es/texidocs/incipit.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Los «incipit» se pueden escribir utilizando el grob del nombre del +instruemento, pero manteniendo independientes las definiciones del +nombre del instrumento y del incipit." + + doctitlees = "Incipit" diff --git a/Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc b/Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc new file mode 100644 index 0000000000..895eaa8d36 --- /dev/null +++ b/Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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, +el @code{PianoStaff} se debe configurar para que acepte símbolos de +arpegio de pentagrama cruzado y los símbolos de arpegio se deben +configurar a la forma de corchete en el contexto de @code{PianoStaff}. + +(Debussy, Les collines d’Anacapri, m. 65) + +" + doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio" + diff --git a/Documentation/es/texidocs/inserting-a-caesura.texidoc b/Documentation/es/texidocs/inserting-a-caesura.texidoc new file mode 100644 index 0000000000..7174835db0 --- /dev/null +++ b/Documentation/es/texidocs/inserting-a-caesura.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Las marcas de cesura se pueden crear sobreescribiendo la propiedad +@code{'text} del objeto @code{BreathingSign}. También está disponible +una marca de cesura curva. + +" + doctitlees = "Insertar una cesura" + diff --git a/Documentation/es/texidocs/isolated-percent-repeats.texidoc b/Documentation/es/texidocs/isolated-percent-repeats.texidoc new file mode 100644 index 0000000000..028b195f1a --- /dev/null +++ b/Documentation/es/texidocs/isolated-percent-repeats.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +También se pueden imprimir símbolos de porcentaje sueltos. + +" + doctitlees = "Símbolos de porcentaje sueltos" + diff --git a/Documentation/es/texidocs/jazz-combo-template.texidoc b/Documentation/es/texidocs/jazz-combo-template.texidoc new file mode 100644 index 0000000000..9de4f4ce84 --- /dev/null +++ b/Documentation/es/texidocs/jazz-combo-template.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Ésta es una plantilla bastante avanzada, para un conjunto de +jazz. Observe que la notación de todos los instrumentos está en +@code{\\key c \\major} (Do mayor). Esto se refiere al tono de +concierto; la armadura se transporta automáticamente si la música está +dentro de una sección @code{\\transpose}. + +" + doctitlees = "Plantilla para combo de jazz" + diff --git a/Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc b/Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc new file mode 100644 index 0000000000..463cc444ca --- /dev/null +++ b/Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +@code{full-size-change}. + +" + doctitlees = "Mantener el tamaño del símbolo en los cambios de clave" + + diff --git a/Documentation/es/texidocs/letter-tablature-formatting.texidoc b/Documentation/es/texidocs/letter-tablature-formatting.texidoc new file mode 100644 index 0000000000..35732f8512 --- /dev/null +++ b/Documentation/es/texidocs/letter-tablature-formatting.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La tablatura se puede formatear utilizando letras en lugar de números. + +" + + doctitlees = "Formateado de tablaturas con letras" diff --git a/Documentation/es/texidocs/line-arrows.texidoc b/Documentation/es/texidocs/line-arrows.texidoc new file mode 100644 index 0000000000..268620b275 --- /dev/null +++ b/Documentation/es/texidocs/line-arrows.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden aplicar puntas de flecha a los elementos de extensión de +texto y de línea (como el Glissando). + +" + doctitlees = "Puntas de flecha para las líneas" diff --git a/Documentation/es/texidocs/lyrics-alignment.texidoc b/Documentation/es/texidocs/lyrics-alignment.texidoc new file mode 100644 index 0000000000..4329394244 --- /dev/null +++ b/Documentation/es/texidocs/lyrics-alignment.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La alineación horizontal de la letra se puede ajustar sobreescribiendo +la propiedad @code{self-alignment-X} del objeto @code{LyricText}. +@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; +sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y +@code{#RIGHT}. + +" + doctitlees = "Alineación de la letra" diff --git a/Documentation/es/texidocs/makam-example.texidoc b/Documentation/es/texidocs/makam-example.texidoc new file mode 100644 index 0000000000..7917eaea9a --- /dev/null +++ b/Documentation/es/texidocs/makam-example.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +El «Makam» es un tipo de melodía de Turquía que +utiliza alteraciones microtonales de 1/9 de tono. Consulte el +archivo de inicio @file{makam.ly} (véase el 'Manual de +aprendizaje @version{}, 4.6.3 Otras fuentes de información' para +averiguar la situación de este archivo) para ver detalles de los +nombres de las notas y las alteraciones. + +" + doctitlees = "Ejemplo de «Makam»" + + diff --git a/Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc b/Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc new file mode 100644 index 0000000000..f5724bccf5 --- /dev/null +++ b/Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc @@ -0,0 +1,28 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Las ligaduras de expresión se pueden construir con patrones de +discontinuidad complejos mediante la definición de la propiedad +@code{dash-definition}. @code{dash-definition} es una lista de +@code{elementos de discontinuidad}. Un @code{elemento de +discontinuidad} es una lista de parámetros que definen el +comportamiento de discontinuidad de un segmento de la ligadura de +expresión. + +La ligadura se define en términos del parámetro de bezier t cuyo +rango va de 0 a la izquierda de la ligadura hasta 1 en el extremo +derecho de la ligadura. Cada @code{elemento de discontinuidad} es +una lista @code{(t-inicio t-final fracción-discontinuidad +período-discontinuidad)}. La región de la ligadura desde +@code{t-inicio} hasta @code{t-final} tendrá una fracción +@code{fracción-discontinuidad} de cada +@code{período-discontinuidad} de color negro. +@code{período-discontinuidad} se define en términos de espacios de +pentagrama. @code{fracción-discontinuidad} se establece al valor +de 1 para una ligadura continua. + +" + + doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad" + + diff --git a/Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc new file mode 100644 index 0000000000..b159db239e --- /dev/null +++ b/Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +conseguir añadiendo más líneas muy cerca de la línea que se quiere +destacar, utilizando la propiedad @code{line-positions} del objeto +@code{StaffSymbol}. + +" + doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras" + diff --git a/Documentation/es/texidocs/measure-counter.texidoc b/Documentation/es/texidocs/measure-counter.texidoc new file mode 100644 index 0000000000..e9597c6fa9 --- /dev/null +++ b/Documentation/es/texidocs/measure-counter.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Este fragmento de código proporciona una solución alternativa a la +producción de contadores de compás utilizando repeticiones +transparentes de tipo porcentaje. + +" + doctitlees = "Contador de compases" diff --git a/Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc new file mode 100644 index 0000000000..c91f3bd095 --- /dev/null +++ b/Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La disposición «mensurstriche» en que las líneas divisorias no +están dibujadas sobre los pentagramas, sino entre ellos, se puede +conseguir con un @code{StaffGroup} en vez de un @code{ChoirStaff}. +La línea divisoria sobre los pentagramas se borra estableciendo la +propiedad @code{transparent}. + +" + + doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)" + diff --git a/Documentation/es/texidocs/modern-tab-text-clef.texidoc b/Documentation/es/texidocs/modern-tab-text-clef.texidoc new file mode 100644 index 0000000000..a935b04830 --- /dev/null +++ b/Documentation/es/texidocs/modern-tab-text-clef.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Utilice un texto de marcado para sustituir el glifo de clave (TAB) con +una fuente tipográfica moderna. + +" + doctitlees = "Clave de texto TAB moderna para tablatura" diff --git a/Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc new file mode 100644 index 0000000000..3a565a21d6 --- /dev/null +++ b/Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Las abreviaturas se encuentran definidas dentro del archivo +@file{ly/script-init.ly}, donde las variables @code{dashHat}, +@code{dashPlus}, @code{dashDash}, @code{dashBar}, +@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben +valores predeterminados. Se pueden modificar estos valores +predeterminados para las abreviaturas. Por ejemplo, para asociar +la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del +semitrino en lugar del símbolo predeterminado +, asigne el valor +@code{trill} a la variable @code{dashPlus}: + +" + doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones" + diff --git a/Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc b/Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc new file mode 100644 index 0000000000..235501b004 --- /dev/null +++ b/Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +desplazar la nota superior a la derecha. Se puede cambiar usando la +propiedad @code{prefer-dotted-right} de @code{NoteCollision}. + +" + doctitlees = "Desplazar las notas con puntillo en polifonía" + + diff --git a/Documentation/es/texidocs/moving-slur-positions-vertically.texidoc b/Documentation/es/texidocs/moving-slur-positions-vertically.texidoc new file mode 100644 index 0000000000..2a4b11ecab --- /dev/null +++ b/Documentation/es/texidocs/moving-slur-positions-vertically.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede ajustar la posición vertical de una ligadura de +expresión utilizando la propiedad @code{positions} del objeto +@code{Slur}. La propiedad tiene dos parámetros, refiriéndose el +primero al extremo izquierdo de la ligadura y el segundo al derecho. +Los valores de los parámetros no se utilizan por parte de LilyPond +para producir un desplazamiento exacto de la ligadura: más bien +selecciona la colocación que mejor aspecto tiene, teniendo en cuenta +los valores de los parámetros. Los valores positivos desplazan la +ligadura hacia arriba, y son adecuados a notas que tienen las plicas +hacia abajo. Los valores negativos desplazan las ligaduras bajas aún +más hacia abajo. + +" + doctitlees = "Desplazar ligaduras de expresión verticalmente" + + diff --git a/Documentation/es/texidocs/multi-measure-rest-markup.texidoc b/Documentation/es/texidocs/multi-measure-rest-markup.texidoc new file mode 100644 index 0000000000..bc7c6cff79 --- /dev/null +++ b/Documentation/es/texidocs/multi-measure-rest-markup.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 +texidoces = " +Los elementos de marcado aplicados a un silencio multicompás se +centran encima o debajo de éste. Los elementos de marcado extensos +que se adjuntan a silencios multicompás no producen la expansión del +compás. Para expandir un silencio multicompás de forma que quepa todo +el marcado, utilice un silencio de separación con un marcado aplicado +antes del silencio multicompás. + +Observe que el silencio separador produce la inserción de un compás. +El texto aplicado a un siencio sparador de esta forma se alinea por la +izquierda a la posición en que la nota estaría situada dentro del +compás, pero si la longitud del compás está determinada por la +longitud del texto, éste aparecerá centrado. + +" + +doctitlees = "Marcado de silencios multicompás" + diff --git a/Documentation/es/texidocs/nesting-staves.texidoc b/Documentation/es/texidocs/nesting-staves.texidoc new file mode 100644 index 0000000000..9c784357cf --- /dev/null +++ b/Documentation/es/texidocs/nesting-staves.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede utilizar la propiedad +@code{systemStartDelimiterHierarchy} para crear grupos de +pentagramas anidados de forma más compleja. La instrucción +@code{\\set StaffGroup.systemStartDelimiterHierarchy} toma una +lista alfabética del número de pentagramas producidos. Se puede +proporcionar antes de cada pentagrama un delimitador de comienzo +de sistema. Se debe encerrar entre corchetes y admite tantos +pentagramas como encierren las llaves. Se pueden omitir los +elementos de la lista, pero el primer corchete siempre abarca +todos los pentagramas. Las posibilidades son +@code{SystemStartBar}, @code{SystemStartBracket}, +@code{SystemStartBrace} y @code{SystemStartSquare}. + +" + doctitlees = "Anidado de grupos de pentagramas" + diff --git a/Documentation/es/texidocs/non-default-tuplet-numbers.texidoc b/Documentation/es/texidocs/non-default-tuplet-numbers.texidoc new file mode 100644 index 0000000000..5523350728 --- /dev/null +++ b/Documentation/es/texidocs/non-default-tuplet-numbers.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +LilyPond también proporciona funciones de formato para imprimir +números de grupo especial diferentes a la propia fracción, así +como para añadir una figura al número o a la fracción de la +agrupación. + +" + + doctitlees = "Números de agrupación especial distintos a los predeterminados" + diff --git a/Documentation/es/texidocs/non-traditional-key-signatures.texidoc b/Documentation/es/texidocs/non-traditional-key-signatures.texidoc new file mode 100644 index 0000000000..edcc780e45 --- /dev/null +++ b/Documentation/es/texidocs/non-traditional-key-signatures.texidoc @@ -0,0 +1,28 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Armaduras de tonalidad no tradicionales" + texidoces = " + +La muy utilizada instrucción @code{\\key} establece la propiedad +@code{keySignature} property, dentro del contexto @code{Staff}. + +Para crear armaduras de tonalidad no estándar, ajuste esta +propiedad directamente. El formato de esta instrucción es una +lista: + +@code{\\set Staff.keySignature = #`(((octava . paso) . alteración) +((octava . paso) . alteración) ...)} donde, para cada elemento +dentro de la lista, @code{octava} especifica la octava +(siendo@tie{}cero la octava desde el Do@tie{}central hasta el Si +por encima), @code{paso} especifica la nota dentro de la octava +(cero@tie{}significa@tie{}Do y 6@tie{}significa@tie{}Si), y +@code{alteración} es @code{,SHARP ,FLAT ,DOUBLE-SHARP} +etc. (observe la coma precedente.) + +De forma alternativa, para cada elemento de la lista el uso del +formato más conciso @code{(paso . alteración)} especifica que la +misma alteración debe estar en todas las octavas. + +He aquí un ejemplo de una posible armadura para generar una escala +exátona: +" + diff --git a/Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc b/Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc new file mode 100644 index 0000000000..25e815071d --- /dev/null +++ b/Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Las cabezas de nota de notación fácil utilizan la propiedad +@code{note-names} del objeto @code{NoteHead} para determinar lo que +aparece dentro de la cabeza. Mediante la sobreescritura de esta +propiedad, es posible imprimir números que representen el grado de la +escala. + +Se puede crear un grabador simple que haga esto para la cabeza de cada +nota que ve. + +" + + doctitlees = "Números como notas de notación fácil" diff --git a/Documentation/es/texidocs/open-string-harmonics-in-tablature.texidoc b/Documentation/es/texidocs/open-string-harmonics-in-tablature.texidoc new file mode 100644 index 0000000000..a35132a74a --- /dev/null +++ b/Documentation/es/texidocs/open-string-harmonics-in-tablature.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Referencia para armónicos sobre cuerdas al aire (armónicos naturales): + +" + doctitlees = "Referencia para armónicos sobre cuerdas al aire" diff --git a/Documentation/es/texidocs/orchestra,-choir-and-piano-template.texidoc b/Documentation/es/texidocs/orchestra,-choir-and-piano-template.texidoc new file mode 100644 index 0000000000..9555987b48 --- /dev/null +++ b/Documentation/es/texidocs/orchestra,-choir-and-piano-template.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Esta plantilla muestra el uso de contextos @code{StaffGroup} y +@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo +tipo, y una forma de usar @code{\\transpose} de manera que unas +variables contengan la música para instrumentos transpositores en +afinación de concierto. + +" + doctitlees = "Plantilla de orquesta con coro y piano" diff --git a/Documentation/es/texidocs/ottava-text.texidoc b/Documentation/es/texidocs/ottava-text.texidoc new file mode 100644 index 0000000000..27f2c0d9b0 --- /dev/null +++ b/Documentation/es/texidocs/ottava-text.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Internamente, @code{\\ottava} establece las propiedades +@code{ottavation} (por ejemplo, a @code{8va} o a @code{8vb}) y +@code{middleCPosition}. Para sobreescribir el texto del corchete, +ajuste @code{ottavation} después de invocar la instrucción +@code{\\ottava}. + +" + + doctitlees = "Texto de octava alta y baja" + diff --git a/Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc b/Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc new file mode 100644 index 0000000000..cc9df35f3c --- /dev/null +++ b/Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc @@ -0,0 +1,38 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Puede ser difícil comprender la función de @code{\\autoBeamOff} cuando +se usa con @code{\\partcombine}. + +Puede ser preferible usar + + +@code{\\set Staff.autoBeaming = ##f} + + +en su lugar, para asegurarse de que el barrado automático se desactiva +para todo el pentagrama. + + +@code{\\partcombine} funciona aparentemente con tres voces: plica +arriba cuando hay una sola voz, plica abajo con la otra, y plica +arriba cuando está combinada. + + +Una llamada a @code{\\autoBeamOff} en el primer argumento de +partcombine se aplica a la voz que está activa en el momento en que se +procesa la llamada, ya sea voz única con la plica hacia arriba, hacia +abajo o combinadas. Una llamada a @code{\\autoBeamOff} en el segundo +argumento se aplica a la voz que está sola con la plica abajo. + + +Para pode usar @code{\\autoBeamOff} con el objeto de detener todo el +barrado automático cuando se usa con @code{\\partcombine}, es +necesario hacer tres llamadas a @code{\\autoBeamOff}. + + + + +" + doctitlees = "Partcombine y autoBeamOff" diff --git a/Documentation/es/texidocs/percent-repeat-count-visibility.texidoc b/Documentation/es/texidocs/percent-repeat-count-visibility.texidoc new file mode 100644 index 0000000000..99644c9b4f --- /dev/null +++ b/Documentation/es/texidocs/percent-repeat-count-visibility.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden mostrar los contadores de las repeticiones del tipo +porcentaje a intervalos regulares mediante el establecimiento de +la propiedad de contexto @code{repeatCountVisibility}. + +" + doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" + diff --git a/Documentation/es/texidocs/percent-repeat-counter.texidoc b/Documentation/es/texidocs/percent-repeat-counter.texidoc new file mode 100644 index 0000000000..cb08b9cb44 --- /dev/null +++ b/Documentation/es/texidocs/percent-repeat-counter.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Las repeticiones de compases completos de más de dos repeticiones +pueden llevar un contador si se activa la propiedad adecuada, como se +ve en este ejemplo: + +" + doctitlees = "Contador de repeticiones de tipo porcentaje" + diff --git a/Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc new file mode 100644 index 0000000000..244b7efc64 --- /dev/null +++ b/Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra" + texidoces = " +Este ejemplo artificial muestra cómo se pueden permitir tanto los +saltos de línea manuales como los automáticos dentro de un grupo de +valoración especial unido por una barra. Observe que estos grupos +sincopados se deben barrar manualmente. + +" + diff --git a/Documentation/es/texidocs/piano-template-simple.texidoc b/Documentation/es/texidocs/piano-template-simple.texidoc new file mode 100644 index 0000000000..60108b6506 --- /dev/null +++ b/Documentation/es/texidocs/piano-template-simple.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Presentamos a continuación una plantilla de piano sencilla con algunas +notas. + +" + doctitlees = "Plantilla de piano (sencilla)" + diff --git a/Documentation/es/texidocs/piano-template-with-centered-dynamics.texidoc b/Documentation/es/texidocs/piano-template-with-centered-dynamics.texidoc new file mode 100644 index 0000000000..b855ca92c4 --- /dev/null +++ b/Documentation/es/texidocs/piano-template-with-centered-dynamics.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Muchas partituras de piano tienen las indicaciones dinámicas centradas +entre los dos pentagramas. El contexto @code{Dynamics}, si se sitúa +entre pentagramas, coloca los matices dinámicos correctamente de forma +automática. + +" + doctitlees = "Plantilla de piano con matices centrados" + diff --git a/Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc new file mode 100644 index 0000000000..cbc23a2050 --- /dev/null +++ b/Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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. + +" + doctitlees = "Plantilla de piano con letra centrada" + diff --git a/Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc new file mode 100644 index 0000000000..116d0d68f6 --- /dev/null +++ b/Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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. + +" + doctitlees = "Plantilla de piano con melodía y letra" + diff --git a/Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc b/Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc new file mode 100644 index 0000000000..903b8dee51 --- /dev/null +++ b/Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Es posible ejercer un mayor control sobre la colocación de las +digitaciones de la mano derecha estableciendo el valor de una +propiedad específica, como se muestra en el ejemplo siguiente. Nota: +se debe usar una construcción de acorde. + +" + doctitlees = "Posicionamiento de digitaciones de mano derecha" + diff --git a/Documentation/es/texidocs/polyphony-in-tablature.texidoc b/Documentation/es/texidocs/polyphony-in-tablature.texidoc new file mode 100644 index 0000000000..d4bef14108 --- /dev/null +++ b/Documentation/es/texidocs/polyphony-in-tablature.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +La polifonía se crea de la misma forma en un @code{TabStaff} que +en una pauta normal. + +" + doctitlees = "Polifonía en tablaturas" + diff --git a/Documentation/es/texidocs/positioning-arpeggios.texidoc b/Documentation/es/texidocs/positioning-arpeggios.texidoc new file mode 100644 index 0000000000..8c8735a345 --- /dev/null +++ b/Documentation/es/texidocs/positioning-arpeggios.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Si necesitamos alargar o acortar un símbolo de arpegio, podemos +modificar independientemente los extremos superior e inferior. + +" + doctitlees = "Posicionar símbolos de arpegio" + + diff --git a/Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc b/Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc new file mode 100644 index 0000000000..50ac3423a9 --- /dev/null +++ b/Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Cuando se colocan figuras sobre líneas adicionales, sus barras se +sitúan generalmente en medio del pentagrama. La barra de las notas de +adorno es más corta y las notas de adorno sobre líneas adicionales +podrían tener la barra fuera del pentagrama. Podemos corregir este +barrado para las notas de adorno. + +" + doctitlees = "Colocar las barras de las notas de adorno a la misma altura que las barras de notas normales" + + diff --git a/Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc b/Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc new file mode 100644 index 0000000000..a87b549312 --- /dev/null +++ b/Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Al establecer la propiedad @code{'strict-grace-spacing} hacemos que +las columnas musicales para las notas de adorno sean @q{flotantes}, es +decir, desacopladas de las notas que no son de adorno: primero se +aplica el espaciado de las notas normales, y luego se ponen las +columnas musicales de las notas de adorno a la izquierda de las +columnas musicales de las notas principales. + +" + + doctitlees = "Posicionamiento de las notas de adorno con espacio flotante" + + diff --git a/Documentation/es/texidocs/positioning-multi-measure-rests.texidoc b/Documentation/es/texidocs/positioning-multi-measure-rests.texidoc new file mode 100644 index 0000000000..83aa543507 --- /dev/null +++ b/Documentation/es/texidocs/positioning-multi-measure-rests.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Posicionar los silencios multicompás" + texidoces = " +A diferencia de los silencios normales, no existe una instrucción +predefinida para modificar la posición predeterminada de un +símbolo de silencio multicompás sobre el pentagrama, adjuntándolo +a una nota, independientemente de cuál sea su forma. Sin embargo, +en la música polifónica los silencios multicompás de las voces de +numeración par e impar están separados verticalmente. La +colocación de los silencios multicompás se puede controlar como se +ve a continuación: + +" diff --git a/Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc b/Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc new file mode 100644 index 0000000000..d6f3291ce5 --- /dev/null +++ b/Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Los elementos de marcado de texto deben tener la propiedad +@code{outside-staff-priority} establecida al valor falso para que se +impriman por dentro de las ligaduras de expresión. + +" + doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras" + diff --git a/Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc new file mode 100644 index 0000000000..4f2b7421a9 --- /dev/null +++ b/Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 +doctitlees = "Evitar que se añadan becuadros adicionales automáticamente" + +texidoces = " +Según las reglas estándar de composición +tipográfica, se imprime un becuadro antes de un sostenido o un +bemol cuando se tiene que cancelar una alteración anterior en la +misma nota. Para modificar este comportamiento, establezca el +valor de la propiedad @code{extraNatural} a @code{##f} (falso) +dentro del contexto de @code{Staff}. + +" + diff --git a/Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc new file mode 100644 index 0000000000..8f8a57fe61 --- /dev/null +++ b/Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 +doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura" + +texidoces = " + +Cuando cambia la armadura de la tonalidad, se imprimen becuadros +automáticamente para cancelar las alteraciones de las armaduras +anteriores. Esto se puede evitar estableciendo al valor @qq{falso} la +propiedad @code{printKeyCancellation} del contexto @code{Staff}. + +" + diff --git a/Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc new file mode 100644 index 0000000000..8da59006f5 --- /dev/null +++ b/Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede imprimir una línea divisoria de la forma @code{|:} al +principio de la pieza, sobreescribiendo la propiedad correspondiente: + +" + doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza" + diff --git a/Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc b/Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc new file mode 100644 index 0000000000..b122bce68d --- /dev/null +++ b/Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Se pueden imprimir los números de compás a intervalos regulares +mediante el establecimiento de la propiedad +@code{barNumberVisibility}. Aquí los números de compás se +imprimen a cada dos compases excepto al final de la línea. + +" + + doctitlees = "Imprimir números de compás a intervalos regulares" + + diff --git a/Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc b/Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc new file mode 100644 index 0000000000..ba44650d50 --- /dev/null +++ b/Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias. + +" + doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias" + + diff --git a/Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc new file mode 100644 index 0000000000..7fa14c4ca0 --- /dev/null +++ b/Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden imprimir reguladores con un círculo en la punta (notación +«al niente») estableciendo la propiedad @code{circled-tip} del objeto +@code{Hairpin} al valor @code{#t}. + +" + doctitlees = "Impresión de reguladores utilizando la notación «al niente»" + diff --git a/Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc b/Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc new file mode 100644 index 0000000000..2973adf632 --- /dev/null +++ b/Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Se pueden imprimir marcas al final de la línea actual, en vez de al +principio de la línea siguiente. En estos casos, puede ser preferible +alinear el borde derecho de la marca con la línea divisoria. + +" + doctitlees = "Imprimir marcas al final de una línea" \ No newline at end of file diff --git a/Documentation/es/texidocs/printing-marks-on-every-staff.texidoc b/Documentation/es/texidocs/printing-marks-on-every-staff.texidoc new file mode 100644 index 0000000000..da7949aceb --- /dev/null +++ b/Documentation/es/texidocs/printing-marks-on-every-staff.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Aunque normalmente las marcas de texto sólo se imprimen sobre el +pentagrama superior, también se pueden imprimir en otro pentagrama +cualquiera. + +" + doctitlees = "Imprimir marcas en cualquier pentagrama" + diff --git a/Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc new file mode 100644 index 0000000000..8eab0db1c9 --- /dev/null +++ b/Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +De forma predeterminada, las indicaciones metronómicas y las +letras de ensayo se imprimen encima del pentagrama. Para +colocarlas debajo del pentagrama, simplemente ajustamos +adecuadamente la propiedad @code{direction} de +@code{MetronomeMark} o de @code{RehearsalMark}. + +" + + doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama" + + diff --git a/Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc b/Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc new file mode 100644 index 0000000000..1c5bf2e9f1 --- /dev/null +++ b/Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede usar el contexto @code{NoteNames} para imprimir el valor +textual de las notas. La propiedad @code{printOctaveNames} activa o +desactiva la representación de la octava de las notas. + +" + doctitlees = "Impresión de los nombres de las notas con o sin indicación de la octava" + + diff --git a/Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc b/Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc new file mode 100644 index 0000000000..4f0a9764ee --- /dev/null +++ b/Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +De forma predeterminada se suprime el número del primer compás de una +partitura si es menor o igual a @q{1}. Al establecer el valor de +@code{barNumberVisibility} a @code{all-bar-numbers-visible}, se puede +imprimir cualquier número de compás para el primer compás y todos los +siguientes. Observe que, para que esto funcione, se debe insertar una +líinea divisoria vacía antes de la primera nota. + +" + + doctitlees = "Imprimir el número de compás en el primer compás" + + diff --git a/Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc b/Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc new file mode 100644 index 0000000000..31e6331389 --- /dev/null +++ b/Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Los pasajes citados tienen en cuenta la transposición de la fuente +tanto como la del destino. En este ejemplo, todos los +instrumentos interpreta una nota con el sonido del Do central; el +destino de un instrumento transpositor en Fa. La parte de destino +se puede transponer utilizando @code{\\transpose}. En este caso +se transportan todas las notas (incluidas las citadas). + +" + +doctitlees = "Citar otra voz con transposición" + diff --git a/Documentation/es/texidocs/quoting-another-voice.texidoc b/Documentation/es/texidocs/quoting-another-voice.texidoc new file mode 100644 index 0000000000..f83cb453b7 --- /dev/null +++ b/Documentation/es/texidocs/quoting-another-voice.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +La propiedad @code{quotedEventTypes} determina los tipos de eventos +musicales que resultan citados. El valor predeterminado es +@code{(note-event rest-event tie-event beam-event tuplet-span-event)}, +que significa que sólo aparecen en la expresión @code{\\quoteDuring} +las notas, silencios, ligaduras, barras y grupos especiales. En el +ejemplo siguiente, el silencio de semicorchea no aparece en el +fragmento citado porque @code{rest-event} no está dentro de los +@code{quotedEventTypes}. + +Para ver una lista de los tipos de evento, consulte la sección +@qq{Music classes} de la Referencia de funcionamiento interno. + + +" + doctitlees = "Citar otra voz" + diff --git a/Documentation/es/texidocs/recorder-fingering-chart.texidoc b/Documentation/es/texidocs/recorder-fingering-chart.texidoc new file mode 100644 index 0000000000..1161950d5d --- /dev/null +++ b/Documentation/es/texidocs/recorder-fingering-chart.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +El ejemplo siguiente muestra cómo se pueden realizar diagramas de +digitación para instrumentos de viento. + +" + + doctitlees = "Diagramas de digitación para la flauta dulce" diff --git a/Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc b/Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc new file mode 100644 index 0000000000..73e0ccbf4d --- /dev/null +++ b/Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Los valores predeterminados para las notas de adorno están +almacenados en los identificadores @code{startGraceMusic}, +@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, +@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y +@code{stopAppoggiaturaMusic}, que están definidos en el archivo +@file{ly/grace-init.ly}. Redefiniéndolos se pueden obtener otros +efectos. + +" + + doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno" + + diff --git a/Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc b/Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc new file mode 100644 index 0000000000..8ac8d86aea --- /dev/null +++ b/Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Se pueden eliminar completamente los números de compás quitando el +grabador @code{Bar_number_engraver} del contexto de @code{Score}. + +" + + doctitlees = "Suprimir los números de compás de toda la partitura" + + diff --git a/Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc b/Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc new file mode 100644 index 0000000000..ddb92b150c --- /dev/null +++ b/Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +De forma predeterminada, las líneas divisorias en los grupos +StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas. +Se puede alterar este comportamiento pentagrama a pentagrama. + +" + doctitlees = "Quitar las barras de compás entre los pentagramas de un StaffGroup PianoStaff o GrandStaff" + + diff --git a/Documentation/es/texidocs/removing-the-first-empty-line.texidoc b/Documentation/es/texidocs/removing-the-first-empty-line.texidoc new file mode 100644 index 0000000000..8de848e144 --- /dev/null +++ b/Documentation/es/texidocs/removing-the-first-empty-line.texidoc @@ -0,0 +1,17 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +El primer pentagrama vacío también se puede suprimir de la +partitura estableciendo la propiedad @code{remove-first} de +@code{VerticalAxisGroup}. Esto se puede hacer globalmente dentro +del bloque @code{\\layout}, o localmente dentro del pentagrama +concreto que se quiere suprimir. En este último caso, tenemos que +especificar el contexto (@code{Staff} se aplica sólo al pentagrama +actual) delante de la propiedad. + +El pentagrama inferior del segundo grupo no se elimina, porque el +ajuste sólo se aplica al pentagrama concreto dentro del que se +escribe. + +" + doctitlees = "Quitar la primera línea vacía" + diff --git a/Documentation/es/texidocs/rest-styles.texidoc b/Documentation/es/texidocs/rest-styles.texidoc new file mode 100644 index 0000000000..1949ffedbe --- /dev/null +++ b/Documentation/es/texidocs/rest-styles.texidoc @@ -0,0 +1,5 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Estilos de silencios" + texidoces = " +Los silencios se pueden imprimir en distintos estilos. +" diff --git a/Documentation/es/texidocs/reverting-default-beam-endings.texidoc b/Documentation/es/texidocs/reverting-default-beam-endings.texidoc new file mode 100644 index 0000000000..833aaff26d --- /dev/null +++ b/Documentation/es/texidocs/reverting-default-beam-endings.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} sólo +es necesario modificar la estructura de pulsos: + +" + doctitlees = "Alteración de los finales de barra predeterminados" + + diff --git a/Documentation/es/texidocs/script-chart.texidoc b/Documentation/es/texidocs/script-chart.texidoc new file mode 100644 index 0000000000..1348d5da20 --- /dev/null +++ b/Documentation/es/texidocs/script-chart.texidoc @@ -0,0 +1,5 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 +texidoces = " +He aquí un cuadro que muestra todas las articulaciones disponibles: + +" \ No newline at end of file diff --git a/Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc new file mode 100644 index 0000000000..1a069bc7f0 --- /dev/null +++ b/Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +inmediatamente precedente. Se puede controlar este comportamiento +sobreescribiendo la propiedad @code{'to-barline}. + +" + doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás" + diff --git a/Documentation/es/texidocs/setting-system-separators.texidoc b/Documentation/es/texidocs/setting-system-separators.texidoc new file mode 100644 index 0000000000..341a8caf8d --- /dev/null +++ b/Documentation/es/texidocs/setting-system-separators.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden insertar separadores sistema entre los sistemas de una +página. Se puede usar cualquier elemento de marcado, pero +@code{\\slashSeparator} está disponible como una elección +predeterminada adecuada. + +" + doctitlees = "Fijar un separador entre los sistemas" + + diff --git a/Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc b/Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc new file mode 100644 index 0000000000..9039db07e7 --- /dev/null +++ b/Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Existen tres estilos distintos de repeticiones dobles para la primera +y segunda vez, que se pueden ajustar utilizando +@code{doubleRepeatType}. + +" + + doctitlees = "Establecer el tipo de repetición doble predeterminado para la primera y segunda vez" diff --git a/Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc new file mode 100644 index 0000000000..51567b2547 --- /dev/null +++ b/Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Si los reguladores son demasiado cortos, se pueden alargar +modificando la propiedad @code{minimum-length} del objeto +@code{Hairpin}. + +" + doctitlees = "Ajustar la longitud mínima de los reguladores" + diff --git a/Documentation/es/texidocs/shortening-volta-brackets.texidoc b/Documentation/es/texidocs/shortening-volta-brackets.texidoc new file mode 100644 index 0000000000..841d3b6812 --- /dev/null +++ b/Documentation/es/texidocs/shortening-volta-brackets.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +De forma predeterminada, los corchetes de primera y segunda vez se +trazan encima de los finales alternativos completos, pero es posible +acortartlos estableciendo un valor cierto para +@code{voltaSpannerDuration}. En el ejemplo siguiente, el corchete +sólo dura un compás, que corresponde a una duración de 3/4. + +" + doctitlees = "Acortar los corchetes de primera y segunda vez" + diff --git a/Documentation/es/texidocs/showing-chords-at-changes.texidoc b/Documentation/es/texidocs/showing-chords-at-changes.texidoc new file mode 100644 index 0000000000..76266c710d --- /dev/null +++ b/Documentation/es/texidocs/showing-chords-at-changes.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se pueden imprimir los acordes exclusivamente al comienzo de las +líneas y cuando cambia el acorde. + +" + doctitlees = "Imprimir los acordes cuando se produce un cambio" + diff --git a/Documentation/es/texidocs/simple-lead-sheet.texidoc b/Documentation/es/texidocs/simple-lead-sheet.texidoc new file mode 100644 index 0000000000..6e1b7aaca8 --- /dev/null +++ b/Documentation/es/texidocs/simple-lead-sheet.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Al juntar nombres de acorde en cifrado americano, melodía y letra, +obtenemos una hoja guía de acordes o «lead sheet»: + +" + doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" + diff --git a/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc new file mode 100644 index 0000000000..c602129bfd --- /dev/null +++ b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Esta plantilla facilita la preparación de una canción con melodía, +letra y acordes. + +" + doctitlees = "Plantilla de pentagrama único con música, letra y acordes" + diff --git a/input/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc similarity index 76% rename from input/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc rename to Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc index af48c56313..9fccac5c8d 100644 --- a/input/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc +++ b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " Presentamos a continuación un ejemplo de plantilla para una hoja guía de acordes con melodía, letra, acordes y diagramas de diff --git a/Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc new file mode 100644 index 0000000000..09e3f91696 --- /dev/null +++ b/Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +¿Quiere preparar una hoja guía de acordes (o «lead sheet») con +melodía y acordes? ¡No busque más! + +" + +doctitlees = "Plantilla de pentagrama único con música y acordes" + diff --git a/Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc new file mode 100644 index 0000000000..39b94fcab9 --- /dev/null +++ b/Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +el barrado automático, que es lo más frecuente en las partes vocales +antiguas. Para usar el barrado automático modifique o marque como un +comentario la línea correspondiente. + +" + doctitlees = "Plantilla de pentagrama único don notas y letra" + diff --git a/Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc new file mode 100644 index 0000000000..9cedf523b6 --- /dev/null +++ b/Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +un archivo, escriba las notas y ¡ya está! + +" + doctitlees = "Plantilla de un solo pentagrama, con notas únicamente" + diff --git a/Documentation/es/texidocs/slides-in-tablature.texidoc b/Documentation/es/texidocs/slides-in-tablature.texidoc new file mode 100644 index 0000000000..4f3b191bbc --- /dev/null +++ b/Documentation/es/texidocs/slides-in-tablature.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Los deslizamientos se pueden componer tipográficamente tanto en los +contextos de @code{Staff} como en los de @code{TabStaff}: + +" + + doctitlees = "Deslizamientos en tablatura" diff --git a/Documentation/es/texidocs/snap-pizzicato-bartok-pizzicato.texidoc b/Documentation/es/texidocs/snap-pizzicato-bartok-pizzicato.texidoc new file mode 100644 index 0000000000..a8c09080f8 --- /dev/null +++ b/Documentation/es/texidocs/snap-pizzicato-bartok-pizzicato.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un +chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se +denota mediante una circunferencia con una línea vertical corta que parte +del centro de aquélla hacia fuera. Aunque LilyPond no tiene ninguna +instrucción predefinida para crear esta marca, es fácil hacer la definición +y colocarla directamente en el archivo de lilypond. +" + diff --git a/Documentation/es/texidocs/stand-alone-two-column-markup.texidoc b/Documentation/es/texidocs/stand-alone-two-column-markup.texidoc new file mode 100644 index 0000000000..6cbcaf3646 --- /dev/null +++ b/Documentation/es/texidocs/stand-alone-two-column-markup.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Los textos independientes se pueden disponer en varias columnas +utilizando instrucciones @code{\\markup}: + +" + doctitlees = "Elemento de marcado de texto independiente en dos columnas" + diff --git a/Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc b/Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc new file mode 100644 index 0000000000..fb83fa6e1b --- /dev/null +++ b/Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +poner horizontales, como se muestra en este ejemplo. + +" + doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas" + diff --git a/Documentation/es/texidocs/string-quartet-template-simple.texidoc b/Documentation/es/texidocs/string-quartet-template-simple.texidoc new file mode 100644 index 0000000000..86a9a55384 --- /dev/null +++ b/Documentation/es/texidocs/string-quartet-template-simple.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Esta plantilla muestra un cuarteto de cuerda normal. También utiliza +una sección @code{\\global} para el compás y la armadura + +" + doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" + diff --git a/Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc new file mode 100644 index 0000000000..d518f3f3a5 --- /dev/null +++ b/Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -0,0 +1,21 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +El fragmento de código @qq{Plantilla de cuarteto de cuerda} produce un +resultado satisfactorio para el cuarteto, pero ¿y si tenemos que +imprimir las particellas? Esta nueva plantilla muestra cómo usar la +funcionalidad @code{\\tag} (etiqueta) para dividir fácilmente una +pieza en particellas indicviduales. + +Tenemos que dividir esta plantilla en archivos independientes; los +nombres de archivo están dentro de los comentarios al principio de +cada archivo. @file{piece.ly} contiene todas las definiciones de +música. Los otros archivos (@file{score.ly}, @file{vn1.ly}, +@file{vn2.ly}, @file{vla.ly} y @file{vlc.ly}) producen la particella +correspondiente. + +¡No olvide quitar los comentarios que hemos especificado cuando use +los archivos independientes! + +" + doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" + diff --git a/Documentation/es/texidocs/subdividing-beams.texidoc b/Documentation/es/texidocs/subdividing-beams.texidoc new file mode 100644 index 0000000000..a3cfb3e570 --- /dev/null +++ b/Documentation/es/texidocs/subdividing-beams.texidoc @@ -0,0 +1,22 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Las barras de semicorchea, o de figuras más breves, no se subdividen +de forma predeterminada. Esto es, las tres (o más) barras se amplían +sin romperse sobre grupos completos de notas. Este comportamiento se +puede modificar para subdividir las barras en subgrupos mediante el +establecimiento de la propiedad @code{subdivideBeams}. Cuando está +activada, las barras se subdividen a intervalos definidos por el valor +actual de @code{baseMoment} mediante la reducción de las barras +repetidas a una sola entre los subgrupos. Observe que el valor +predeterminado de @code{baseMoment} es uno más que el denominador del +tipo de compás actual, si no se fija explícitamente. Se debe ajustar +a una fracción que da la duración del subgrupo de barras utilizando la +función @code{ly:make-moment}, como se ve en este fragmento de código. +Asimismo, cuando se modifica @code{baseMoment}, se debería cambiar +también @code{beatStructure} para que corresponda al @code{baseMoment} +nuevo: + +" + doctitlees = "Subdivisión de barras" diff --git a/Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc b/Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc new file mode 100644 index 0000000000..5dd8ca73d1 --- /dev/null +++ b/Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +A veces, la indicación de compás no debe imprimir la fracción completa +(p.ej. 7/4), sino sólo el numerador (7 en este caso). Esto se puede +hacer fácilmente utilizando @code{\\override Staff.TimeSignature +#'style = #'single-digit} para cambiar el estilo +permanentemente. Usando @code{\\revert Staff.TimeSignature #'style}, +se puede revertir el cambio. Para aplicar el estilo de un dígito +único a una sola indicación de compás, utilice la instrucción +@code{\\override} y anteponga la instrucción @code{\\once}. + +" + doctitlees = "Indicación de compás imprimiendo sólo el numerador (en lugar de la fracción)" diff --git a/input/texidocs/transcription-of-ancient-music-with-incipit.texidoc b/Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc similarity index 85% rename from input/texidocs/transcription-of-ancient-music-with-incipit.texidoc rename to Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc index f723963608..2a5c342bc0 100644 --- a/input/texidocs/transcription-of-ancient-music-with-incipit.texidoc +++ b/Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " A modo de alternativa para obtener auténticos «incipit» independientes de la partitura principal, se incluyen como diff --git a/Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc new file mode 100644 index 0000000000..1b8d025d78 --- /dev/null +++ b/Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc @@ -0,0 +1,31 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 +doctitlees = "Transportar música con el menor número de alteraciones" +texidoces = " +Este ejemplo utiliza código de Scheme para forzar las +modificaciones enarmónicas de las notas, y así tener el menor +número de alteraciones accidentales. En este caso se aplican las +siguientes reglas: + +@itemize +@item +Se quitan las dobles alteraciones + +@item +Si sostenido -> Do + +@item +Mi sistenido -> Fa + +@item +Do bemol -> Si + +@item +Fa bemol -> Mi + +@end itemize + +De esta forma se selecciona el mayor número de notas enarmónicas +naturales. + +" + diff --git a/Documentation/es/texidocs/tweaking-clef-properties.texidoc b/Documentation/es/texidocs/tweaking-clef-properties.texidoc new file mode 100644 index 0000000000..9fce5b9d13 --- /dev/null +++ b/Documentation/es/texidocs/tweaking-clef-properties.texidoc @@ -0,0 +1,35 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Trucaje de las propiedades de clave" + texidoces = " +La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de +@code{clefGlyph}, @code{clefPosition} (que controla la posición +vertical de la clave), @code{middleCPosition} y +@code{clefOctavation}. Se imprime una clave cada vez que se +modifica cualquiera de las propiedades excepto +@code{middleCPosition}. + +Observe que la modificación del glifo, la posición de la clave o +su octavación, no cambian 'per se' la posición de las siguientes +notas del pentagrama: para hacer esto también se debe especificar +la posición del Do central. Los parámetros posicionales están en +relación con la tercera línea del pentagrama, los números +positivos desplazan hacia arriba, contando una unidad por cada +línea y espacio. El valor de @code{clefOctavation} se +establecería normalmente a 7, -7, 15 or -15, pero son válidos +otros valores. + +Cuando se produce un cambio de clave en el salto de línea se +imprime la clave nueva tanto al final de la línea anterior como al +principio de la nueva, de forma predeterminada. Si no se necesita +la clave de advertencia al final de la línea anterior, se puede +quitar estableciendo el valor de la propiedad +@code{explicitClefVisibility} de @code{Staff}, a +@code{end-of-line-invisible}. El comportamiento predeterminado se +puede recuperar con @code{\\unset Staff.explicitClefVisibility}. + +Los siguientes ejemplos muestran las posibilidades cuando se +ajustan estas propiedades manualmente. En la primera línea, los +cambios manuales preservan el posicionamiento relativo estándar de +las claves y las notas, pero no lo hacen en la segunda línea. +" + diff --git a/Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc b/Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc new file mode 100644 index 0000000000..bb8b466eab --- /dev/null +++ b/Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +La disposición de las expresiones de adorno se puede cambiar a lo +largo de toda la música usando las funciones +@code{add-grace-property} y @code{remove-grace-property}. El +ejemplo siguiente borra la definición de la dirección de la plica +para esta nota de adorno, de manera que las plicas no siemmpre +apuntan hacia arriba, y cambia la forma predeterminada de las +cabezas a aspas. + +" + + doctitlees = "Trucar la disposición de las notas de adorno dentro de la música" + + diff --git a/Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc new file mode 100644 index 0000000000..1632ded001 --- /dev/null +++ b/Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Se puede usar el delimitador de comienzo de un sistema +@code{SystemStartSquare} estableciéndolo explícitamente dentro de +un contexto @code{StaffGroup} o @code{ChoirStaffGroup}. + +" + doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas" + diff --git a/Documentation/es/texidocs/using-alternative-flag-styles.texidoc b/Documentation/es/texidocs/using-alternative-flag-styles.texidoc new file mode 100644 index 0000000000..7b181284f0 --- /dev/null +++ b/Documentation/es/texidocs/using-alternative-flag-styles.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Se pueden imprimir estilos alternativos del corchete o gancho de las +corcheas y figuras menores, mediante la sobreescritura de la propiedad +@code{flag} del objeto @code{Stem}. Son valores válidos +@code{modern-straight-flag} y @code{old-straight-flag}. + +" + doctitlees = "Uso de estilos alternativos para los corchetes" + + diff --git a/Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc b/Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc new file mode 100644 index 0000000000..b59f3969e1 --- /dev/null +++ b/Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +El corchete de arpegios @code{arpeggioBracket} se puede usar para +indicar la división de voces cuando no hay plicas que puedan ofrecer +esta información. Se suele encontrar en la música coral. + +" + + doctitlees = "Uso de arpeggioBracket para hacer más visible un divisi" + diff --git a/Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc b/Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc new file mode 100644 index 0000000000..65c75a2223 --- /dev/null +++ b/Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Algunos compositores escriben dos ligaduras cuando quieren acordes +legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. + +" + doctitlees = "Utilizar ligaduras dobles para acordes legato" + diff --git a/Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc b/Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc new file mode 100644 index 0000000000..a8ba3d37c8 --- /dev/null +++ b/Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Es posible aplicar la barrita que cruza la barra de las +acciaccaturas, en otras situaciones. + +" + + doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales" + + diff --git a/Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc b/Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc new file mode 100644 index 0000000000..3fa5d94c82 --- /dev/null +++ b/Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc @@ -0,0 +1,39 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Se puede acceder @qq{lateralmente} a algunos grobs desde dentro de la +función de callback de otro grob. Éstos se encuentran relacionados +normalmente como @qq{layout objects} (objetos de presentación) en la +sección @qq{Internal properties} (propiedades internas) de un +interface de grob. Se usa la función @code{ly:grob-object} para +acceder a estos grobs. + + +Se presentan más abajo como ejemplo algunas formas de addecer a grobs +desde dentro de una función de callback de NoteHead, pero la técnica +no se limita a las cabezas de nota. Sin embargo, la función de +callback de NoteHead es especialmente importante, porque es la función +de callback implícita que utiliza la instrucción @code{\\tweak}. + + +La función de ejemplo que se define abajo (\"display-grobs\") no es +probablemente tan útil, pero muestra que se está accediendo +efectivamente a los grobs. + + +Salida de ejemplo de la consola: + + +@example +-------------------- +#-Grob Accidental - +#-Grob Arpeggio - +#-Grob Stem - +@end example + + +" + + doctitlees = "Utilizar ly:grob-object para acceder a los grobs con \\tweak" + diff --git a/Documentation/es/texidocs/using-the-whiteout-property.texidoc b/Documentation/es/texidocs/using-the-whiteout-property.texidoc new file mode 100644 index 0000000000..25622e5fe5 --- /dev/null +++ b/Documentation/es/texidocs/using-the-whiteout-property.texidoc @@ -0,0 +1,24 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +Se puede imprimir cualquier objeto gráfico sobre un fondo blanco para +enmascarar parte de los objetos que están por debajo. Esto puede ser +útil para mejorar el aspecto de las colisiones en situaciones +complejas cuando no es práctico reposicionar los objetos. Es +necesario establecer explícitamente la propiedad de capa +(@code{layer}) para controlar qué objetos resultan enmascarados por el +fondo blanco. + +En este ejemplo, la colisión de la ligadura de unión con la indicación +de compás resulta mejorada enmascarando la parte de la ligadura que +cruza a la indicación de compás mediante el establecimiento de la +propiedad @code{whiteout} de @code{TimeSignature}. Para hacer esto, +se mueve @code{TimeSignature} a una capa por encima de @code{Tie}, que +se deja en la capa predeterminada de 1, y @code{StaffSymbol} se mueve +a una capa por encima de @code{TimeSignature} de manera que no resulte +enmascarada. + +" + + doctitlees = "Uso de la propiedad whiteout" diff --git a/Documentation/es/texidocs/using-ties-with-arpeggios.texidoc b/Documentation/es/texidocs/using-ties-with-arpeggios.texidoc new file mode 100644 index 0000000000..c927221787 --- /dev/null +++ b/Documentation/es/texidocs/using-ties-with-arpeggios.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + doctitlees = "Uso de ligaduras en los arpegios" + texidoces = " +En ocasiones se usan ligaduras de unión para escribir los arpegios. +En este caso, las dos notas ligadas no tienen que ser consecutivas. +Esto se puede conseguir estableciendo la propiedad +@code{tieWaitForNote} al valor @code{#t}. La misma funcionalidad +es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero +en principio también se puede usar para notas normales consecutivas. + +" + diff --git a/Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc new file mode 100644 index 0000000000..ef2a87c186 --- /dev/null +++ b/Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor +adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e +indicaciones dinámicas textuales) se pueden alinear con un punto de +referencia común, independientemente de sus dimensiones. De esta +manera, todos los elementos estarán alineados verticalmente, +produciendo así un resultado más satisfactorio. + +Se usa una idea similar para alinear las inscripciones de texto a lo +largo de su línea de base. + +" + doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente" + diff --git a/input/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc b/Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc similarity index 84% rename from input/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc rename to Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc index 1c17d63d94..5b16cc5049 100644 --- a/input/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc +++ b/Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 texidoces = " Las expresiones dinámicas que se comienzan, terminan o se producen en la misma nota se alinean verticalmente. Para asegurar que las diff --git a/Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc new file mode 100644 index 0000000000..7d4bcfa303 --- /dev/null +++ b/Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Este fragmento de código muestra el uso de las propiedades de +contexto @code{alignBelowContext} y @code{alignAboveContext} para +controlar la posición de la letra y los compases de ossia. + +" + doctitlees = "Alineación vertical de la letra y los compases de ossia" + diff --git a/Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc b/Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc new file mode 100644 index 0000000000..5c5596d763 --- /dev/null +++ b/Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Allí donde se utilicen líneas extensoras para el bajo cifrado mediante +el establecimiento de @code{useBassFigureExtenders} al valor +verdadero, las parejas de líneas extensoras congruentes se centran +verticalmente si el valor de @code{figuredBassCenterContinuations} +tiene el valor verdadero. + +" + doctitlees = "Centrado vertical de las líneas de bajo cifrado emparejadas" + + diff --git a/Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc new file mode 100644 index 0000000000..b1518b7251 --- /dev/null +++ b/Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " + +Esta plantilla añade una reducción de piano automática a la partitura +vocal SATB estándar que se mostró en la @qq{Plantilla de conjunto +vocal}. Esto presenta uno de los puntos fuertes de LilyPond: podemos +usar una definición de música más de una vez. Si se hace cualquier +cambio en las notas de la parte vocal (digamos @code{tenorMusic}), +entonces los cambios se aplicarán también a la reducción de piano. + +" + doctitlees = "Plantilla de conjunto vocal con reducción de piano automática" + diff --git a/Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc new file mode 100644 index 0000000000..2f184d1d92 --- /dev/null +++ b/Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +colocan utilizando @code{alignAboveContext} y +@code{alignBelowContext}. + +" + doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" + diff --git a/Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc b/Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc new file mode 100644 index 0000000000..f35a6b09f8 --- /dev/null +++ b/Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " +Esta plantilla crea una partitura que comienza con una estrofa para +solista y continúa con un estribillo a dos voces. también muestra el +uso de silencios de separación dentro de la variable @code{\global} +para definir cambios de compás (y otros elementos que son comunes a +todas las partes) a lo largo de toda la partitura. + +" + + doctitlees = "Estrofa para solista y estribillo a dos voces" diff --git a/Documentation/es/texidocs/vocal-ensemble-template.texidoc b/Documentation/es/texidocs/vocal-ensemble-template.texidoc new file mode 100644 index 0000000000..022a2bbd3f --- /dev/null +++ b/Documentation/es/texidocs/vocal-ensemble-template.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +todas las partes. Por ejemplo, el compás y la armadura casi siempre +son los mismos para todas. Como en la plantilla @qq{Himno}, las cuatro +voces se reagrupan en sólo dos pentagramas. + +" + doctitlees = "Plantilla de conjunto vocal" + diff --git a/Documentation/es/texidocs/volta-below-chords.texidoc b/Documentation/es/texidocs/volta-below-chords.texidoc new file mode 100644 index 0000000000..1b2144b2f5 --- /dev/null +++ b/Documentation/es/texidocs/volta-below-chords.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + texidoces = " +Mediante la adición del grabador @code{Volta_engraver} al +pentagrama pertinente, se pueden poner los corchetes de primera y +segunda vez debajo de los acordes. + +" + doctitlees = "Corchetes de primera y segunda vez debajo de los acordes" + + diff --git a/Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc b/Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc new file mode 100644 index 0000000000..89560cc396 --- /dev/null +++ b/Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc @@ -0,0 +1,14 @@ +%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + + texidoces = " + +El fragmento de código que aparece a continuación produce una lista de +todas las llaves y disposiciones de llave posibles para los diagramas +de posiciones de instrumentos de viento madera, tal y como están +definidos en @file{scm/define-woodwind-diagrams.scm}. La lista se +presenta en la consola y en el archivo de registro de salida, pero no +en la salida de música. + +" + + doctitlees = "Listas de llaves para los diagramas de viento madera" diff --git a/Documentation/es/texidocs/woodwind-diagrams-listing.texidoc b/Documentation/es/texidocs/woodwind-diagrams-listing.texidoc new file mode 100644 index 0000000000..2359210016 --- /dev/null +++ b/Documentation/es/texidocs/woodwind-diagrams-listing.texidoc @@ -0,0 +1,8 @@ +%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2 + 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 +el momento. + +" + doctitlees = "Listado de los diagramas para viento madera" diff --git a/Documentation/es/topdocs/GNUmakefile b/Documentation/es/topdocs/GNUmakefile deleted file mode 100644 index ac7500444d..0000000000 --- a/Documentation/es/topdocs/GNUmakefile +++ /dev/null @@ -1,8 +0,0 @@ -depth = ../../.. - -ISOLANG=es - -STEPMAKE_TEPLATES=documentation tex topdocs -LOCALSTEPMAKE_TEMPLATES=lilypond ly doc-i18n-topdocs - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/topdocs/NEWS.tely b/Documentation/es/topdocs/NEWS.tely deleted file mode 100644 index 1026b01f5e..0000000000 --- a/Documentation/es/topdocs/NEWS.tely +++ /dev/null @@ -1,602 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: c7d6848e128f461a4cec093f7a71a34b2dc314eb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename NEWS.info -@settitle NEWS - -@ifhtml -@macro inputfileref{DIR,NAME} -@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c -@end macro -@macro usermanref{NAME} -@inforef{\NAME\,,../user/lilypond/lilypond}@c -@end macro -@end ifhtml - -@ifnothtml -@macro inputfileref{DIR,NAME} -@file{\DIR\/\NAME\}@c -@end macro -@macro usermanref{NAME} -Véase el manual del usuario, \NAME\ -@end macro -@end ifnothtml - -@macro textanchor{NAME} -@html -
-@end html -@end macro - - -@documentencoding utf-8 -@documentlanguage es -@c Translators: Francisco Vila - -@finalout - -@node Top -@top New features in 2.12 since 2.10 - -@ifhtml -Este documento está disponible también en formato @uref{NEWS.es.pdf,PDF}. Forma parte de -la @uref{../,Documentación de LilyPond}. -@end ifhtml - - - - -@itemize @bullet - -@ignore - -HINTS - -* only show verbatim input for syntax/input changes - -* try to be as brief possible in those cases - -* don't try to provide real-world examples, they often get too big, -which scares away people. - -* Write complete sentences. - -* only show user-visible changes. - -@end ignore - -@item -Ahora se contemplan las garrapateas sueltas: -@lilypond[quote] -\relative c'' { - g128 -} -@end lilypond - -@item -Como extensión de la forma en que LilyPond contempla actualmente los -microtonos, ahora hay alteraciones con flecha para la notación de las -alteraciones microtonales. Para usarlas, redefina la propiedad -@code{glyph-name-alist} de @code{Accidental} como en el ejemplo -siguiente que utiliza cuartos de tono para la composición tipográfica -de alteraciones con flecha. De forma alternativa, es posible definir -nombres distintos para todas las notas con alteraciones con flecha -(consulte @code{ly/makam.ly} para ver un ejemplo de código estándar). - -@lilypond[quote] -microAccs = #'((0 . "accidentals.natural") - (-1/2 . "accidentals.flat") - (1/2 . "accidentals.sharp") - - (1 . "accidentals.doublesharp") - (-1 . "accidentals.flatflat") - - (3/4 . "accidentals.sharp.arrowup") - (1/4 . "accidentals.sharp.arrowdown") - (-1/4 . "accidentals.flat.arrowup") - (-3/4 . "accidentals.flat.arrowdown")) - -\relative c'' { - #(set-accidental-style 'modern) - \override Accidental #'glyph-name-alist = #microAccs - geseh geh aih aisih -} -@end lilypond - -@item -Ahora están implementados los corchetes rectos (utilizados en -partituras antiguas de p.ej. Bach, pero también de forma distinta en -partituras modernas de p.ej. Stockhausen): -@lilypond[quote] -\relative c'' { - \override Stem #'flag = #modern-straight-flag - c,16 \acciaccatura {c'8} d4 d32 - \bar":" - \override Stem #'flag = #old-straight-flag - c,16 \acciaccatura {c'8} d4 d32 -} -@end lilypond - -@item -Los bloques @code{\bookpart} se pueden usar para dividir un libro en -varias partes, separadas por un salto de página, con el objeto de -facilitar la división en páginas o usar distintos ajustes de -@code{\paper} en partes distintas. - -@example -\bookpart @{ - \header @{ - title = "Título del libro" - subtitle = "Primera parte" - @} - \score @{ @dots{} @} - @dots{} -@} -\bookpart @{ - \header @{ - subtitle = "Segunda parte" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - -@item -Ahora se permiten contextos anidados del mismo tipo. -Esto hace obsoletos @code{InnerStaffGroup} e @code{InnerChoirStaff}. -@lilypond[quote,relative=1] -\new StaffGroup << - \new Staff { c1 } - \new StaffGroup << - \new Staff { c1 } - \new Staff { c1 } - >> ->> -@end lilypond - -@item -Se pueden mostrar contadores de repetición de tipo porcentaje a -intervalos regulares usando la propiedad de contexto -@code{repeatCountVisibility}. -@lilypond[quote,relative=1] -{ - \set countPercentRepeats = ##t - \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) - \repeat percent 6 { c4 d e f } -} -@end lilypond - -@item -Además de la propiedad existente @code{showLastLength}, ahora se puede -establecer también @code{showFirstLength}, componiendo sólo los -primeros compases de una pieza. Las dos propiedades se pueden -establecer al mismo tiempo: -@lilypond[quote] -showFirstLength = R1*2 -showLastLength = R1*3 -\relative c' { c1 d e f g a b c } -@end lilypond - -@item -La extensión de archivo para el MIDI se puede fijar usando el valor -predeterminado del programa en la línea de órdenes -@code{midi-extension}. Para Windows, la extensión predeterminada ha -cambiado a @code{.mid}. - -@item -Ahora están disponibles dos variaciones sobre la doble barra predeterminada de repetición. -@lilypond[quote] -{ - \set Score.doubleRepeatType = #":|.:" - \repeat volta 2 { - c'1 - } - \repeat volta 2 { - c'1 - } - \bar ":|.|:" - c'1 -} -@end lilypond - -@item -Se han añadido cuatro reglas de alteraciones accidentales automáticas: -@code{neo-modern}, @code{neo-modern-cautionary}, @code{dodecaphonic} y -@code{teaching}. El ejemplo siguiente ilustra la regla -@code{neo-modern}. -@lilypond[quote] -notes = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -\new Staff { - #(set-accidental-style 'neo-modern) - \notes -} -@end lilypond - -@item -Ahora se pueden generar los corchetes con código de Scheme usando la -propiedad @code{'flag} (corchete) del grob @code{Stem} (plica). Las -partituras existentes siguen funcionando sin ningún cambio. -@lilypond[quote] -testnotes = { - \autoBeamOff - c'8 d'16 c''8 d''16 -} - -#(define (inverted-flag stem-grob) - (let* ((dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u")) - (flag (retrieve-glyph-flag "" dir "" stem-grob)) - (line-thickness (ly:staff-symbol-line-thickness stem-grob)) - (stem-thickness (ly:grob-property stem-grob 'thickness)) - (stem-width (* line-thickness stem-thickness)) - (stroke-style (ly:grob-property stem-grob 'stroke-style)) - (stencil (if (null? stroke-style) flag - (add-stroke-glyph flag stem-grob dir stroke-style ""))) - (rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0))) - (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0)))) - -#(define-public (weight-flag stem-grob) - (let* ((log (- (ly:grob-property stem-grob 'duration-log) 2)) - (is-up (eqv? (ly:grob-property stem-grob 'direction) UP)) - (yext (if is-up (cons (* log -0.8) 0) (cons 0 (* log 0.8)))) - (flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext)) - (stroke-style (ly:grob-property stem-grob 'stroke-style)) - (stroke-stencil (if (equal? stroke-style "grace") - (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4) - empty-stencil))) - (ly:stencil-add flag-stencil stroke-stencil))) - -{ - \time 3/8 - \override Stem #'flag = #weight-flag - \testnotes - - \override Stem #'flag = #inverted-flag - \testnotes -} -@end lilypond - -@item -Se han añadido diagramas de pedal de arpa: - -@lilypond[quote] -\markup { \harp-pedal #"^v-|vv-o^" } -@end lilypond - -@item -Ahora están disponibles diagramas de posiciones predefinidos, -configurables por el usuario y transportables, en el contexto -@code{FretBoards}: -@lilypond[quote] -\include "predefined-guitar-fretboards.ly" -<< - \new ChordNames { - \chordmode { - c1 - \transpose c e { c } - } - } - \new FretBoards { - \chordmode { - c1 - \transpose c e { c } - } - } ->> -@end lilypond - -@item -Se han hecho los siguientes cambios en la sintaxis, en orden -cronológico. Además, las propiedades de los diagramas de posiciones se -han movido a @code{fret-diagram-details}, y se usa la propiedad -@code{#'style} para seleccionar líneas continuas o discontinuas en vez -de @code{#'dash-fraction}. - -@example -'break-align-symbol -> 'break-align-symbols -scripts.caesura -> scripts.caesura.curved -\setEasyHeads -> \easyHeadsOn -\easyHeadsOff (instrucción nueva) -\fatText -> \textLengthOn -\emptyText -> \textLengthOff -\set hairpinToBarline -> \override Hairpin #'to-barline -\compressMusic -> \scaleDurations -\octave -> \octaveCheck -\arpeggioUp -> \arpeggioArrowUp -\arpeggioDown -> \arpeggioArrowDown -\arpeggioNeutral -> \arpeggioNormal -\setTextCresc -> \crescTextCresc -\setTextDecresc -> \dimTextDecresc -\setTextDecr -> \dimTextDecr -\setTextDim -> \dimTextDim -\setHairpinCresc -> \crescHairpin -\setHairpinDecresc -> \dimHairpin -\sustainUp -> \sustainOff -\sustainDown -> \sustainOn -\sostenutoDown -> \sostenutoOn -\sostenutoUp -> \sostenutoOff -'infinite-spacing-height -> 'extra-spacing-height -#(set-octavation oct) -> \ottava #oct -\put-adjacent marcado eje dirección marcad -> \put-adjacent eje dirección marcado marcado -\pointAndClickOn (instrucción nueva) -\pointAndClickOff (instrucción nueva) -\center-align -> \center-column -\hcenter -> \center-align -printallheaders -> print-all-headers -\bigger -> \larger (instrucción existente) -systemSeparatorMarkup -> system-separator-markup -@end example - -@noindent -Además se han renombrado ciertos archivos del directorio @code{ly/}; -ahora los nombres de archivo *-init.ly sólo se usan para archivos que -se incluyen automáticamente, mientras que los archivos como -@code{makam-init.ly} o @code{gregorian-init.ly} se han renombrado como -@code{makam.ly} o @code{gregorian.ly}. - -@item -Se han suprimido los backends ``tex'' y ``texstr''. Ahora se accede a -las tipografías a través de la biblioteca fontconfig; para presentar -las cadenas de texto se usa la biblioteca Pango. - -@item -Ahora las indicaciones metronómicas también pueden contener una -dscripción textual. La duración y número (si se indican) se muestran -entre paréntesis después del texto. - -@lilypond[quote] -{ - \tempo "Fast" - c'4 c' c' c' - c'4 c' c' c' - \tempo "Andante" 4 = 120 - c'4 c' c' c' - c'4 c' c' c' - \tempo 4 = 100 - c'4 c' c' c' - c'4 c' c' c' - \tempo "" 4 = 30 - c'4 c' c' c' - c'4 c' c' c' -} -@end lilypond - -@item -En el bajo cifrado podemos ahora usar también una barra invertida -tachando una cifra para indicar una sexta aumentada. - -@lilypond[quote] -\new FiguredBass \figuremode { < 6\\ 5\\ > < 6/ > } -@end lilypond - -@item -Los arpegios pueden usar ahora corchetes de estilo ``paréntesis'': - -@lilypond[quote,relative=1] -\override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur - -% Note: does not work for cross-staff arpeggios. -\override Arpeggio #'X-extent = #ly:grob::stencil-width -2\arpeggio ~ c -@end lilypond - -@item -Las partituras de un solo sistema reciben ahora un especiado natural -en lugar de estirarse hasta llenar el ancho del papel. Se puede -cambiar estableciendo @code{ragged-right = ##f}. - -@item -Ahora es posible encerrar texto en rectángulos con esquinas -redondeadas, usando la instrucción de marcado @code{\rounded-box}. - -@item -@command{lilypond-book} puede ejecutar cualquier porgrama en lugar de -@command{latex} para determinar la anchura de la línea, gracias a la -opción de la línea de órdenes @code{--latex-program}. - -@item -Ahora se puede subrayar el texto con la instrucción de marcado -@code{\underline}. - -@item -Es posible ahora especificar, utilizando la variable @code{page-count} -en el bloque del papel, el número de páginas que usar. - -@item -Se dedica una función nueva, @code{ly:minimal-breaking}, a los libros -con muchas páginas o con mucho texto. - -@item -Se puede incluir un índice general usando @code{\markuplines -\table-of-contents}. Se añaden elementos a este índice usando la -instrucción @code{\tocItem}. - -@item -Los textos que abarcan varias páginas se introducen usando la palabra -clave @code{\markuplines}. Se pueden usar las instrucciones de lista -de marcado incorporadas, como @code{\justified-lines} o -@code{\wordwrap-lines}, y las nuevas que se crean usando el macro de -Scheme @code{define-markup-list-command}. - -@item -Se pueden marcar puntos concretos de un libro con la instrucción -@code{\label}. Luego nos podemos referir a la página en que estos -puntos se han colocado, usando la instrucción de marcado -@code{\page-ref}. - -@item -Las instrucciones de salto y paso de página (@code{\pageBreak}, -@code{\noPageBreak}, etc.) se pueden usar en el nivel superior, -intercaladas entre las partituras y los elementos de marcado del -superior. - -@item -Han cambiado las siguientes opciones a una sub-opción @code{-d}: -@code{--backend}, @code{--safe}, @code{--preview} y @code{--no-pages} -(que se ha convertido en @code{-dno-print-pages}). La opción -@code{-b} ya no existe. - -@item -Unos procedimientos de prueba mejorados ahora captan los cambios en el -desempeño de CPU y memoria, disposición de página, resultado MIDI y -advertencias. Esto ayuda a reducir el número de errores de regresión -durante el desarrollo, dando como resultado lanzamientos más estables. - -Consulte @uref{INSTALL.html#Testing-LilyPond} para ver más -información. - -@item -Las propiedades anidadas como @code{'details} en el objeto -@code{Slur}, se pueden también revertir. La sintaxis de esto es - -@example -\revert Slur #'(details closeness-factor) -@end example - -@item -Todos los objetos de extensión de líne son ahora más flexibles en la -configuración de los puntos extremos. Entre aquellos están el -glissando, las líneas de seguimiento de voz, los crescendos de texto y -otros objetos extensores de texto. La sintaxis antigua para fijar el -texto de los objetos de extensión ya no es válida. - -@lilypond[quote] -\relative c'' { - \override Glissando #'(bound-details right text) = \markup { \center-align \bold down } - \override Glissando #'(bound-details right Y) = #-4 - \override Glissando #'(bound-details right padding) = #0.0 - \override Glissando #'(bound-details left arrow) = ##t - \override Glissando #'(bound-details left padding) = #3.0 - \override Glissando #'style = #'trill - \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods - \override Glissando #'minimum-length = #12 - - c1 \glissando c' -} -@end lilypond - -Esta funcionalidad fue patrocinada por Trevor Bača. - -@item -La variable de entorno @code{LILYPONDPREFIX} se ha renombrado como -@code{LILYPOND_DATADIR}. - -@item -Las típicas notas o silencios finales que ocupan un compás completo -ahora vienen precedidas de algo más de espacio. -@lilypond[quote,relative=1] -\time 4/4 -s1 -c2. c4 -\time 3/4 -c2. -@end lilypond - -@item -Todas las @code{\score}s de un fragmento de lilypond-book se insertan -ahora dentro del documento. Asimismo, los marcados de nivel superior -no dan como resultado una página completa por sí solos. - -@item -Las alteraciones como el sostenido y el bemol pueden ahora ser -fracciones arbitrarias. Esto permite ciertas formas de música -microtonal. Por ejemplo, la música makam turca usa alteraciones de -1/9 de tono. - -@lilypondfile[quote]{makam-example.ly} - -@item -Se puede establecer la dirección de las ligaduras de unión con -@code{^~} y @code{_~}. - -@item -Las tablaturas contemplan ahora la posibilidad de armónicos y -deslizamientos: - -@lilypond[quote,relative=1] -\new TabVoice { - 4 d\2\glissando e2\2 -} -@end lilypond - -Esta funcionalidad fue patrocinada por Mike Amundsen. - -@item -El espaciado horizontal ahora sigue el contorno de los objetos de -manera más precisa. Esto permite un espaciado horizontal más -apretado. - -@lilypond[quote] -{ - \stemUp - c''4... ceses'! s16 -} -@end lilypond - -@item -Los objetos que corresponden a fuera del pentagrama ahora se -posicionan automáticamente para evitar las colisiones. - -@lilypond[quote,relative=1] -c''4 -\once \override TextScript #'self-alignment-X = #CENTER -a,4^"this doesn't collide with the c" -b4^"this goes above the previous markup" -a8_"this goes below the dynamic" -a8\f -@end lilypond - -@item -Los pentagramas se disponen verticalmente utilizando un algoritmo de -línea de horizonte. Esto ayuda a evitar un espaciado vertical -disparejo. - -@lilypond[quote,ragged-right] - -%% todo: fix 'landscape PDF. -#(set-default-paper-size "a6") -\header { - tagline = ##f -} - -\book { - \score { - { - a,,1 - a'4 b' c'' d'' \break - \repeat unfold 2 { a'4 b' c'' d''} - b''''1 - } - } -} -@end lilypond - -@end itemize - - - -@ifhtml -Para ver noticias más antiguas, diríjase a -@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS.html}, -o @uref{../,vuelva} al índica de la documentación. - - -@end ifhtml - -@bye diff --git a/Documentation/es/translations.html.in b/Documentation/es/translations.html.in deleted file mode 100644 index dcad26b1df..0000000000 --- a/Documentation/es/translations.html.in +++ /dev/null @@ -1,437 +0,0 @@ -

Actualizado en Sat Jan 24 01:17:40 UTC 2009 -

- - - - - Estado de la traducción de la documentación de LilyPond - - - - -

Volver al índice de la documentación

- -

Estado de la traducción de la documentación

- -

En esta página se muestra una relación de las partes de la - documentación de LilyPond @TOPLEVEL_VERSION@ y el estado de su - traducción al español. Para cada una de las secciones se indica el - número de palabras del original en inglés, el nombre de los - traductores y revisores, el porcentaje de material traducido, su - estado de actualización y si la traducción se ha actualizado después - del Proyecto Magno de Documentación (GDP). -

- -

En el transcurso del proyecto GDP, la documentación en inglés se ha - transformado profundamente y su revisión continúa realizándose aún; - el progreso de estas revisiones hace imposible mantener todas las - traducciones actualizadas. Sin embargo, esto no significa que la - traducción esté obsoleta con respecto a la versión actual de - LilyPond, sino tan sólo que la documentación traducida no se - encuentra sincronizada con la original en inglés: los traductores - hacen todo lo posible por mantener actualizada al menos toda la - información de sintaxis y nombres de instrucciones de LilyPond. La - actualización de las traducciones posterior al proyecto GDP está - desarrollándose actualmente, sección por sección; si el lector - quiere participar en la aceleración o mejora de este proceso, puede - colaborar en las traducciones o revisiones que se organizarán a - través de la lista de usuarios de LilyPond en español: el grupo - lilypond-es. -

- - - - - - - - - - - - - - - - - -
New features in 2.12 since 2.10 TraductoresRevisoresTraducidoActualizadoMás inf.
Títulos de sección
(1163)
Francisco Vilasísípre-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond: Manual de aprendizaje TraductoresRevisoresTraducidoActualizadoMás inf.
Títulos de sección
(429)
Francisco Vilasísípre-GDP
Preámbulo
(411)
Francisco Vilasísípre-GDP
1 Introducción
(3855)
Francisco Vilasísípost-GDP
2 Tutorial
(6365)
Francisco Vilasísípost-GDP
3 Conceptos fundamentales
(10318)
Francisco Vilasísípre-GDP
4 Trucar la salida
(14775)
Francisco Vilasísípre-GDP
5 Trabajar en proyectos de LilyPond
(3144)
Francisco Vilasísípre-GDP
A Plantillas
(483)
Francisco Vilasísípre-GDP
B Tutorial de Scheme
(960)
Francisco Vilasísípre-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond: Manual de utilización del programa TraductoresRevisoresTraducidoActualizadoMás inf.
Títulos de sección
(407)
Francisco Vilasísípre-GDP
1 Instalación
(1921)
Francisco Vilaparcialmente (11 %)sípre-GDP
2 Configuración
(1149)
Francisco Vilasísípre-GDP
3 Ejecutar LilyPond
(2827)
Francisco Vilasísípre-GDP
4 @command{lilypond-book}: integrar texto y música
(3248)
Francisco Vilasísípre-GDP
5 Conversión desde otros formatos
(1171)
Francisco Vilasísípre-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond: Manual de referencia de la notación TraductoresRevisoresTraducidoActualizadoMás inf.
Títulos de sección
(695)
Francisco Vilasísípre-GDP
1 Notación musical
(91)
Francisco Vilasísípre-GDP
1.1 Alturas
(3123)
Francisco Vilasísípre-GDP
1.2 Duraciones
(5197)
Francisco Vilasísípre-GDP
1.3 Expresiones
(1146)
Francisco Vilasísípre-GDP
1.4 Repeticiones
(555)
Francisco Vilasísípre-GDP
1.5 Notas simultáneas
(1455)
Francisco Vilasísípost-GDP
1.6 Notación de los pentagramas
(1701)
Francisco Vilasísípre-GDP
1.7 Anotaciones editoriales
(895)
Francisco Vilasísípre-GDP
1.8 Texto
(2286)
Francisco Vilasísípre-GDP
2 Notación especializada
(76)
Francisco Vilasísípre-GDP
2.1 Música vocal
(2670)
Francisco Vilasísípre-GDP
2.2 Teclados y otros instrumentos de varios pentagramas
(744)
Francisco Vilasísípre-GDP
2.3 Instrumentos de cuerda sin trastes
(235)
Francisco Vilasísípre-GDP
2.4 Instrumentos de cuerda con trastes
(1850)
Francisco Vilasísípre-GDP
2.5 Percusión
(810)
Francisco Vilasísípre-GDP
2.6 Instrumentos de viento
(136)
Francisco Vilasísípre-GDP
2.7 Notación de acordes
(1464)
Francisco Vilasísípre-GDP
2.8 Notación antigua
(4487)
Francisco Vilasísípre-GDP
2.9 Músicas del mundo
(1115)
Francisco Vilasísípre-GDP
3 Entrada y salida generales
(5873)
Francisco Vilasísípre-GDP
4 Problemas de espaciado
(8505)
Francisco Vilasísípre-GDP
5 Cambiar los valores por omisión
(11391)
Francisco Vilasísípre-GDP
6 Interfaces para programadores
(5202)
Francisco Vilasísípre-GDP
A Lista bibliográfica
(310)
Francisco Vilasísípre-GDP
B Tablas del manual sobre notación
(1190)
Francisco Vilasísípre-GDP
C Hoja de referencia rápida
(250)
Francisco Vilasísípre-GDP
-

- - - diff --git a/Documentation/es/translations.itexi b/Documentation/es/translations.itexi new file mode 100644 index 0000000000..afb096f057 --- /dev/null +++ b/Documentation/es/translations.itexi @@ -0,0 +1,1642 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Actualizado en Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Registro de cambios de LilyPond +@tab Traductores +@tab Revisores +@tab Traducido +@tab Actualizado +@tab Más inf. +@item +Títulos de sección +@* +1464 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Ensayo sobre grabado musical automatizado +@tab Traductores +@tab Revisores +@tab Traducido +@tab Actualizado +@tab Más inf. +@item +Títulos de sección +@* +92 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1 Grabado musical +@* +5297 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2 Lista de referencias bibliográficas +@* +326 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Extender LilyPond +@tab Traductores +@tab Revisores +@tab Traducido +@tab Actualizado +@tab Más inf. +@item +Títulos de sección +@* +107 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +A Tutorial de Scheme +@* +5007 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1 Interfaces para programadores +@* +3568 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Manual de aprendizaje de GNU LilyPond +@tab Traductores +@tab Revisores +@tab Traducido +@tab Actualizado +@tab Más inf. +@item +Títulos de sección +@* +124 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1 Tutorial +@* +2535 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2 Notación corriente +@* +4184 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +3 Conceptos fundamentales +@* +11139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +4 Trucar la salida +@* +15408 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +A Plantillas +@* +225 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Referencia de la notación de GNU LilyPond +@tab Traductores +@tab Revisores +@tab Traducido +@tab Actualizado +@tab Más inf. +@item +Títulos de sección +@* +355 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1 Notación musical +@* +91 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1.1 Alturas +@* +4479 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1.2 Duraciones +@* +6048 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +parcialmente +@end html +@end ifhtml +@ifnothtml +parcialmente +@end ifnothtml +@tab pre-GDP +@item +1.3 Expresiones +@* +1726 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1.4 Repeticiones +@* +930 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1.5 Notas simultáneas +@* +2163 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab post-GDP +@item +1.6 Notación de los pentagramas +@* +2056 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1.7 Anotaciones editoriales +@* +931 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1.8 Texto +@* +2716 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2 Notación especializada +@* +81 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.1 Música vocal +@* +4807 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.2 Teclados y otros instrumentos de varios pentagramas +@* +838 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.3 Instrumentos de cuerda sin trastes +@* +281 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.4 Instrumentos de cuerda con trastes +@* +2640 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.5 Percusión +@* +806 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.6 Instrumentos de viento +@* +312 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.7 Notación de acordes +@* +1855 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.8 Música contemporánea +@* +475 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.9 Notación antigua +@* +4752 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2.10 Músicas del mundo +@* +1446 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +3 Entrada y salida generales +@* +7069 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +4 Problemas de espaciado +@* +11017 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +parcialmente (96 %) +@end html +@end ifhtml +@ifnothtml +parcialmente (96 %) +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +5 Cambiar los valores por omisión +@* +12248 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +A Tablas del manual sobre notación +@* +1989 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +B Hoja de referencia rápida +@* +252 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond: manual de utilización del programa +@tab Traductores +@tab Revisores +@tab Traducido +@tab Actualizado +@tab Más inf. +@item +Títulos de sección +@* +135 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +1 Ejecutar LilyPond +@* +3622 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +2 Actualizar ficheros con @command{convert-ly} +@* +1189 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +3 Ejecución de @command{lilypond-book} +@* +3764 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +4 Programas externos +@* +2170 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +5 Sugerencias para escribir archivos de entrada +@* +2694 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond: notación musical para todos +@tab Traductores +@tab Revisores +@tab Traducido +@tab Actualizado +@tab Más inf. +@item +Títulos de sección +@* +585 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +Introducción +@* +4506 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +Descarga +@* +1183 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +Manuales +@* +1200 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@item +Comunidad +@* +1755 +@tab Francisco Vila +@tab +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab +@ifhtml + +@html +sí +@end html +@end ifhtml +@ifnothtml +sí +@end ifnothtml +@tab pre-GDP +@end multitable + diff --git a/Documentation/es/translations.template.html.in b/Documentation/es/translations.template.html.in deleted file mode 100644 index ed85aa63c5..0000000000 --- a/Documentation/es/translations.template.html.in +++ /dev/null @@ -1,45 +0,0 @@ - - - - Estado de la traducción de la documentación de LilyPond - - - - -

Volver al índice de la documentación

- -

Estado de la traducción de la documentación

- -

En esta página se muestra una relación de las partes de la - documentación de LilyPond @TOPLEVEL_VERSION@ y el estado de su - traducción al español. Para cada una de las secciones se indica el - número de palabras del original en inglés, el nombre de los - traductores y revisores, el porcentaje de material traducido, su - estado de actualización y si la traducción se ha actualizado después - del Proyecto Magno de Documentación (GDP). -

- -

En el transcurso del proyecto GDP, la documentación en inglés se ha - transformado profundamente y su revisión continúa realizándose aún; - el progreso de estas revisiones hace imposible mantener todas las - traducciones actualizadas. Sin embargo, esto no significa que la - traducción esté obsoleta con respecto a la versión actual de - LilyPond, sino tan sólo que la documentación traducida no se - encuentra sincronizada con la original en inglés: los traductores - hacen todo lo posible por mantener actualizada al menos toda la - información de sintaxis y nombres de instrucciones de LilyPond. La - actualización de las traducciones posterior al proyecto GDP está - desarrollándose actualmente, sección por sección; si el lector - quiere participar en la aceleración o mejora de este proceso, puede - colaborar en las traducciones o revisiones que se organizarán a - través de la lista de usuarios de LilyPond en español: el grupo - lilypond-es. -

- - - diff --git a/Documentation/es/usage.tely b/Documentation/es/usage.tely new file mode 100644 index 0000000000..836db06069 --- /dev/null +++ b/Documentation/es/usage.tely @@ -0,0 +1,86 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-usage.info +@settitle LilyPond: manual de utilización del programa +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@c Translators: Francisco Vila + +@macro manualIntro +Este archivo explica cómo ejecutar los programas que se distribuyen +con LilyPond versión @version{}. Además sugiere ciertas @qq{buenas +prácticas} para una utilización eficiente. +@end macro + +@c `Usage' was born 1999-10-10 with git commit c82c30c... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 por los autores. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Application Usage of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Utilización} + + +@c TOC -- non-tex +@ifnottex + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* Ejecutar LilyPond:: Manejo. +* Actualizar ficheros con convert-ly:: Actualizar los archivos de entrada. +* lilypond-book:: Integrar texto y música. +* Programas externos:: Mezclar LilyPond con otros programas. +* Sugerencias para escribir archivos de entrada:: Buenas prácticas y depuración de errores eficiente. + +Apéndices + +* GNU Free Documentation License:: Licencia de este documento. +* Índice de LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include usage/running.itely +@include usage/updating.itely +@include usage/lilypond-book.itely +@include usage/external.itely +@include usage/suggestions.itely + +@include fdl.itexi + +@node Índice de LilyPond +@appendix Índice de LilyPond +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/es/usage/GNUmakefile b/Documentation/es/usage/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/es/usage/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/usage/external.itely b/Documentation/es/usage/external.itely new file mode 100644 index 0000000000..1d92b50713 --- /dev/null +++ b/Documentation/es/usage/external.itely @@ -0,0 +1,656 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033 + + 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 Programas externos +@chapter Programas externos +@translationof External programs + +LilyPond es capaz de interactuar con otros programas de diversas +maneras. + +@menu +* Apuntar y pulsar:: +* Apoyo respecto de los editores de texto:: +* Conversión desde otros formatos:: +* Salida de LilyPond dentro de otros programas:: +* Archivos include independientes:: +@end menu + + +@node Apuntar y pulsar +@section Apuntar y pulsar +@translationof Point and click +@cindex apuntar y pulsar + + +«Point and click» (apuntar y pulsar con el ratón) le da la posibilidad +de localizar notas del código de entrada pulsando sobre ellas dentro +del visor de PDF. Ello facilita encontrar los fragmentos de la +entrada que producen algún tipo de error en la partitura. + +Cuando esta funcionalidad está activada, LilyPond añade hiper-enlaces +al archivo PDF. Estos hiper-enlaces se envían al navegador de web, que +a su vez abre un editor de texto con el cursor situado en el lugar +correcto. + +Para conseguir que esta cadena funcione, tendrá que configurar el +visor de PDF de forma que siga los hiper-enlaces usando el guión +@file{lilypond-invoke-editor} proporcionado con LilyPond. + +Para Xpdf sobre Unix, lo siguiente debe estar presente en +@file{xpdfrc}@footnote{En Unix, este archivo se encuentra o bien en +@file{/etc/xpdfrc} o como @file{.xpdfrc} en su directorio personal.} + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +El programa @file{lilypond-invoke-editor} es un pequeño programa de +apoyo. Invoca un editor para las URIs especiales de @code{textedit}, y +lanza un navegador de web para el resto. Comprueba la variable de +entorno @code{EDITOR} en busca de los siguientes patrones, + +@table @code +@item emacs + esto invoca a +@example +emacsclient --no-wait +@var{línea}:@var{columna} @var{archivo} +@end example +@item vim + esto invoca a +@example +gvim --remote +:@var{línea}:norm@var{carácter} @var{archivo} +@end example + +@item nedit +esto invoca a +@example + nc -noask +@var{línea} @var{archivo}' +@end example +@end table + +La variable de entorno @code{LYEDITOR} se utiliza para sobreescribir +esto. Contiene la instrucción de línea de órdenes para abrir el +editor, donde @code{%(archivo)s}, @code{%(columna)s} y +@code{%(línea)s} se sustituyen por el archivo, columna y línea +respectivamente. El ajuste + +@example +emacsclient --no-wait +%(línea)s:%(columna)s %(archivo)s +@end example + +@noindent +para @code{LYEDITOR} equivale a la invocación estándar de +emacsclient. + + +@cindex archivo de salida, tamaño del + +Los enlaces de apuntar y pulsar aumentan significativamente el tamaño +de los archivos de salida. Para reducir el tamaño de los archivos PDF +y PS, la posibilidad de apuntar y pulsar se puede desactivar +escribiendo + +@example +\pointAndClickOff +@end example + +@noindent +dentro de un archivo @file{.ly}. Se puede activar explícitamente la +posibilidad de apuntar y pulsar con + +@example +\pointAndClickOn +@end example + +De forma alternativa, puede desactivar la posibilidad de apuntar y +pulsar con una opción de la línea de órdenes: + +@example +lilypond -dno-point-and-click archivo.ly +@end example + +@warning{Recuerde desactivar siempre la posibilidad Apuntar y pulsar +en cualquier archivo de LilyPond que vaya a ser distribuido, para +evitar incluir información de rutas de archivo relativas a su equipo +dentro del archivo .pdf, lo que puede plantear un problema de +seguridad.} + + + +@node Apoyo respecto de los editores de texto +@section Apoyo respecto de los editores de texto +@translationof Text editor support + +@cindex editores +@cindex vim +@cindex emacs +@cindex modos del editor +@cindex sintaxis, resaltado de +@cindex colores, sintaxis + +Existe apoyo por parte de varios editores de texto para LilyPond. + +@menu +* Modo de Emacs:: +* Modo de Vim:: +* Otros editores:: +@end menu + +@node Modo de Emacs +@unnumberedsubsec Modo de Emacs +@translationof Emacs mode + +Emacs tiene un @file{lilypond-mode}, que proporciona autocompleción de +teclado, sangrado, compensación de paréntesis específica de LilyPond y +resaltado de sintaxis con colores, útiles combinaciones de teclas para +compilar y leer los manuales de LilyPond utilizando Info. Si el +@file{lilypond-mode} no está instalado en su sistema, siga leyendo. + +Está incluido un modo de Emacs para escribir música y ejecutar +LilyPond, en el archivo del código fuente dentro del directorio +@file{elisp}. Haga @command{make install} para instalarlo dentro de +@var{elispdir}. El archivo @file{lilypond-init.el} se debe situar en +@var{load-path}@file{/site-start.d/} o añadirse a su @file{~/.emacs} o +@file{~/.emacs.el}. + +Como usuario, puede querer añadir su ruta a las fuentes +(p.ej. @file{~/site-lisp/}) a su @var{load-path} añadiendo la +siguiente línea (modificada) a su @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 Modo de Vim +@unnumberedsubsec Modo de Vim +@translationof Vim mode + +Para @uref{http://@/www@/.vim@/.org,Vim}, se proporcionan para +su uso con LilyPond un plug-in o complemento para el tipo de archivo, +un modo de sangrado y un modo de resaltado de sintaxis. +Para habilitar todas estas posibilidades, cree (o modifique) +su archivo @file{$HOME/.vimrc} de manera que contenga estas tres líneas +en el mismo orden: + +@example +filetype off +set runtimepath+=/usr/local/share/lilypond/current/vim/ +filetype on +@end example + +Si LilyPond no está instalado en el directorio +@file{/usr/local/}, cambie esta ruta de una forma adecuada. +Este asunto se trata en +@rlearning{Otras fuentes de información}. + + + +@node Otros editores +@unnumberedsubsec Otros editores +@translationof Other editors + +Otros editores (de texto así como gráficos) tienen apoyo para +LilyPond, pero sus archivos de configuración especiales no se +distribuyen con LilyPond. Debe consultar la documentación de estos +programas para obtener más información. Estos editores se encuentran +relacionaddos en @rweb{Entornos mejorados}. + + +@node Conversión desde otros formatos +@section Conversión desde otros formatos +@translationof Converting from other formats + +También se puede escribir la música a través de su importación desde +otros formatos. Este capítulo trata de documentar las herramientas +incluidas en la distribución que permiten hacerlo. Existen otras +herramientas que producen código de entrada de LilyPond, como por +ejemplo secuenciadores con interfaz gráfico y convertidores de XML. +Consulte el @uref{http://@/lilypond@/.org,website} para ver más +detalles. + +Son programas distintos a @command{lilypond} propiamente dicho, y se +ejecutan desde la línea de órdenes; consulte @ref{Utilización desde la +línea de órdenes} para ver más información. Si tiene MacOS 10.3 o +10.4 y tiene problemas para ejecutar alguno de estos guiones, +p.ej. @code{convert-ly}, consulte @rweb{MacOS X}. + + +@knownissues +Por desgracia no disponemos de los recursos necesarios para poder +mantener estos programas; le rogamos que los tome @qq{tal cual +están}. Se agradecerá el envío de parches correctores, pero los +informes de fallo casi con certeza no se resolverán a medio plazo. + +@menu +* Invocar midi2ly:: Importar archivos MIDI. +* Invocar musicxml2ly:: Importar archivos MusicXML. +* Invocar abc2ly:: Importar archivos ABC. +* Invocar etf2ly:: Importar archivos de Finale. +* Otros formatos:: +@end menu + + + + +@node Invocar midi2ly +@subsection Invocar @command{midi2ly} +@translationof Invoking midi2ly + +@cindex MIDI + +@command{midi2ly} traduce un archivo MIDI de tipo@tie{}1 a un archivo +de código fuente de LilyPond. + +El MIDI (Music Instrument Digital Interface, Interfase Digital para +Instrumentos Musicales) es un estándar para instrumentos digitales: +especifica la interconexión física, un protocolo en serie y un formato +de archivo. El formato de archivo MIDI es un formato estándar de +facto para exportar música de otros programas, por lo que esta +posibilidad puede ser de utilidad al importar archivos de un programa +que tiene un convertidor para un formato directo. + +@command{midi2ly} convierte las pistas en contextos de +@rinternals{Staff}) y los canales en contextos de +@rinternals{Voice}. Se utiliza el modo relativo para las alturas, y +las duraciones se escriben solamente cuando es necesario. + +Es posible grabar un archivo MIDI usando un teclado digital y +convertirlo después a @file{.ly}. Sin embargo, los intérpretes +humanos no son lo suficientemente exactos desde el punto de vista +rítmico como para hacer que sea trivial la conversión de MIDI a LY. +Si se invoca con las opciones de cuantización (@code{-s} y @code{-d}), +@command{midi2ly} intenta compensar los errores de medida, pero no lo +hace muy bien. Por ello, no se recomienda usar @command{midi2ly} para +archivos midi generados por seres humanos. + + +Se invoca a partir de la línea de órdenes como sigue: +@example +midi2ly [@var{opción}]@dots{} @var{archivo_midi} +@end example + +Observe que al decir @q{línea de órdenes}, queremos decir la línea de +órdenes del sistema operativo. Consulte @ref{Conversión desde otros +formatos} para ver más información sobre esto. + +@command{midi2ly} contempla las siguientes opciones: + +@table @code +@item -a, --absolute-pitches +Imprimir alturas absolutas. + +@item -d, --duration-quant=@var{DURACIÓN} +Cuantizar las duraciones a @var{DURACIÓN}. + +@item -e, --explicit-durations +Imprimir valores de figura explícitos. + +@item -h,--help +Mostrar un resumen de las instrucciones de utilización. + +@item -k, --key=@var{alteración}[:@var{minor}] +Establecer la tonalidad predeterminada. @math{@var{alteración} > 0} +establece el número de sostenidos; @math{@var{alteración} < 0} +establece el número de bemoles. Se indica una tonalidad menor +mediante @code{:1}. + +@item -o, --output=@var{archivo} +Escribir la salida en @var{archivo}. + +@item -s, --start-quant=@var{DURACIÓN} +Cuantizar el inicio de las notas a @var{DURACIÓN}. + +@item -t, --allow-tuplet=@var{DURACIÓN}*@var{NUMERADOR}/@var{DENOMINADOR} +Permitir duraciones de grupos especiales @var{DURACIÓN}*@var{NUMERADOR}/@var{DENOMINADOR}. + +@item -v, --verbose +Ser prolijo en comentarios. + +@item -V, --version +Imprimir el número de la versión. + +@item -w, --warranty +Presentar la garantía y el copyright. + +@item -x, --text-lyrics +Tratar todos los textos como letra de la canción. +@end table + + +@knownissues + +Las notas superpuestas en un arpegio no se procesarán correctamente. +La primera nota se lee y el resto se ignoran. Aplique la misma +duración a todas las notas y añada marcas de fraseo o indicaciones de +pedal. + + +@node Invocar musicxml2ly +@subsection Invocar @command{musicxml2ly} +@translationof Invoking musicxml2ly + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} es un +dialecto del XML para representar notación musical. + +@command{musicxml2ly} extrae las notas, articulaciones, estructura de +la partitura, letra, etc., de archivos de MusicXML parte a parte, y +los escribe en un archivo @file{.ly}. Se invoca a través de la línea de +órdenes. + +La invocación desde la línea de órdenes se hace como sigue: + +@example +musicxml2ly [@var{opción}]@dots{} @var{archivo_xml} +@end example + +Observe que por @q{línea de órdenes}, nos referimos a la línea de +órdenes del sistema operativo. Consulte @ref{Conversión desde otros +formatos}, para obtener más información acerca de esto. + +Si el nombre de archivo proporcionado es @file{-}, +@command{musicxml2ly} lee la entrada desde la entrada estándar. + +@command{musicxml2ly} contempla las siguientes opciones: + +@table @code +@item -a, --absolute +convertir las alturas en modo absoluto. + +@item -h,--help +mostrar un resumen de la utilización y las opciones. + +@item -l, --language=IDIOMA +utilizar IDIOMA para los nombres de las notas, p.ej. +'espanol' para los nombres de las notas en español. + +@item --lxml +usar el paquete de Python lxml.etree para el análisis de XML; usa +menos memoria y tiempo de CPU. + +@item --nd --no-articulation-directions +no convertir las direcciones (@code{^}, @code{_} o @code{-}) para las +articulaciones, dinámica, etc. + +@item --no-beaming +no convertir la información de las barras, en vez de ello usar el +barrado automático de LilyPond. + +@item -o,--output=@var{archivo} +fijar el nombre del archivo de salida como @var{archivo}. Si +@var{archivo} es @file{-}, la salida se imprime sobre stdout, la +salida estándar. Si no se da, se usa @var{archivo_xml}@file{.ly}. + +@item -r,--relative +convertir las alturas en modo relativo (predeterminado). + +@item -v,--verbose +ser prolijo. + +@item -v,--version +imprimir la información de la versión. + +@item -z,--compressed +el archivo de entrada es un archivo MusicXML comprimido en zip. +@end table + + + +@node Invocar abc2ly +@subsection Invocar @code{abc2ly} +@translationof Invoking abc2ly + +@warning{Este programa ya no está soportado, y podría desaparecer +de versiones posteriores de LilyPond.} + +@cindex ABC + +ABC es un formato bastante simple basado en ASCII. Se encuentra +descrito en el sitio web de ABC: + +@quotation +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. +@end quotation + +@command{abc2ly} convierte ABC en LilyPond. Se invoca de la siguiente +manera: + +@example +abc2ly [@var{opción}]@dots{} @var{archivo_abc} +@end example + +@command{abc2ly} contempla las siguientes opciones: + +@table @code +@item -b,--beams=None +preservar la noción de ABC de las barras +@item -h,--help +esta ayuda +@item -o,--output=@var{archivo} +fijar el nombre del archivo de salida como @var{archivo}. +@item -s,--strict +ser estricto respecto al éxito +@item --version +imprimir la información de la versión. +@end table + +Existe una posibilidad rudimentaria para añadir código de LilyPond el +archivo fuente de ABC. Si decimos: + +@example +%%LY voices \set autoBeaming = ##f +@end example + +Producirá que el texto que sigue a la palabra clave @q{voices} se +inserte en la voz en curso del archivo de salida de LilyPond. + +De forma similar, + +@example +%%LY slyrics más palabras +@end example + +producirá que el texto que sigue a la palabra clave @q{slyrics} se +inserte en la línea de letra en curso. + + +@knownissues + +El estándar ABC no es muy @q{estándar}. Existen diferentes +convenciones para las posibilidades avanzadas (por ejemplo, +polifonía). + + +No se pueden convertir varias melodías de un solo archivo. + +ABC sincroniza las letras y las notas al principio de una línea; +@command{abc2ly} no lo hace. + +@command{abc2ly} ignora el barrado de ABC. + + +@node Invocar etf2ly +@subsection Invocar @command{etf2ly} +@translationof Invoking etf2ly + +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) es un formato utilizado por Finale, un +producto de Coda Music Technology. @command{etf2ly} convierte parte +de un archivo ETF en un archivo de LilyPond listo para usar. + +Se invoca a través de la línea de órdenes como sigue: + +@example +etf2ly [@var{opción}]@dots{} @var{archivo_etf} +@end example + +Observe que por @q{línea de órdenes}, nos referimos a la línea de +órdenes del sistema operativo. Consulte @ref{Conversión desde otros +formatos}, para obtener más información acerca de esto. + +@command{etf2ly} contempla las siguientes opciones: + +@table @code +@item -h,--help +esta ayuda +@item -o,--output=@var{ARCHIVO} +fijar el nombre del archivo de salida como @var{ARCHIVO} +@item --version +información de la versión +@end table + + +@knownissues + +La lista de inscripciones de articulación posibles es incompleta. Los +compases vacíos confunden a @command{etf2ly}. Las secuencias de notas +de adorno no se dan por finalizadas satisfactoriamente. + + + +@node Otros formatos +@subsection Otros formatos +@translationof Other formats + +@cindex programas externos, generación de archivos de LilyPond + +El propio LilyPond no contempla la utilización de ningún otro formato, +pero existen algunas herramientas externas que también generan +archivos de LilyPond. + +Se encuentran relacionados en la sección @rweb{Entornos mejorados}. + + + +@node Salida de LilyPond dentro de otros programas +@section Salida de LilyPond dentro de otros programas +@translationof LilyPond output in other programs + +Esta sección presenta métodos para integrar texto y música distintos +del método automatizado con @command{lilypond-book}. + +@menu +* Muchas citas de una partitura extensa:: +* Insertar la salida de LilyPond dentro de OpenOffice.org:: +* Insertar la salida de LilyPond dentro de otros programas:: +@end menu + +@node Muchas citas de una partitura extensa +@unnumberedsubsec Muchas citas de una partitura extensa +@translationof Many quotes from a large score + +Si tiene que citar muchos fragmentos extraídos de una partitura grade, +puede también usar la capacidad de recorte de sistemas, véase +@ruser{Extracción de fragmentos de música}. + + +@node Insertar la salida de LilyPond dentro de OpenOffice.org +@unnumberedsubsec Insertar la salida de LilyPond dentro de OpenOffice.org +@translationof Inserting LilyPond output into OpenOffice.org + +@cindex OpenOffice.org + +Se puede añadir notación de LilyPond a los documentos de +OpenOffice.org con +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. + + +@node Insertar la salida de LilyPond dentro de otros programas +@unnumberedsubsec Insertar la salida de LilyPond dentro de otros programas +@translationof Inserting LilyPond output into other programs + +Para insertar la salida de LilyPond dentro de otros programas, use +@code{lilypond} en vez de @code{lilypond-book}. Cada ejemplo debe +crearse individualmente y añadirse al documento; consulte la +documentación del programa correspondiente. La mayoría de los +programas podrán insertar la salida de LilyPond en los formatos +@file{PNG}, @file{EPS} o @file{PDF}. + +Para reducir el espacio vacío alrededor de la partitura de LilyPond, +utilice las siguientes opciones: + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +Para obtener un archivo @file{EPS} que sea útil, utilice + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts miarchivo.ly + +@file{PNG}: +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png miarchivo.ly +@end example + + +@node Archivos include independientes +@section Archivos @code{include} independientes +@translationof Independent includes + +Hay personas que han escrito extensas (¡y útiles!) piezas de código +que se pueden compartir entre distintos proyectos. Este código +podría, llegado el caso, incorporarse al propio LilyPond, pero hasta +que esto ocurra, tendrá que descargarlos e incluirlos mediante +@code{\include}, manualmente. + +@menu +* Articulación MIDI:: +@end menu + + +@node Articulación MIDI +@subsection Articulación MIDI +@translationof MIDI articulation + +LilyPond se puede usar para producir una salida MIDI, para efectuar +una revisión @qq{de oído} de lo que se ha escrito. Sin embargo, sólo +los matices dinámicos, las marcas de tempo explícitas y las propias +notas y duraciones se producen en la salida. + +El proyecto @emph{articulate} es un intento de llevar más información +de la partitura al MIDI. Funciona acortando las notas que no están +ligadas, para @q{articularlas}. El grado de acortamiento depende de +las marcas de articulación que se han puesto en las notas: los picados +dan la mitad de duración, el tenuto da la duración completa, y así +sucesivamente. El script también realiza los trinos y los grupetos, y +se puede extender para que desarrolle otros ornamentos como los +mordentes. + + +@example +@uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate} +@end example + +@knownissues + +Su principal limitación es que sólo afecta a las cosas de las que +tiene algún conocimiento: todo aquello que son meramente marcas +textuales (y no una propiedad de una nota) se ignora, por el momento. + + diff --git a/Documentation/es/usage/lilypond-book.itely b/Documentation/es/usage/lilypond-book.itely new file mode 100644 index 0000000000..503232b105 --- /dev/null +++ b/Documentation/es/usage/lilypond-book.itely @@ -0,0 +1,1348 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: f78131595ebafac25a416671e5a4b9c8b14e79b5 + + 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" + +@c Note: keep this node named so that `info lilypond-book' brings you here. +@node lilypond-book +@chapter Ejecución de @command{lilypond-book} +@translationof lilypond-book + +Si quiere añadir imágenes de música a un documento, puede hacerlo +simplemente de la forma en que lo haría con otros tipos de imágenes. +Las imágenes se crean por separado, dando como resultado una salida +PostScript o imágenes PNG, y luego se incluyen en un documento de +@LaTeX{} o de HTML. + +@command{lilypond-book} ofrece una manera de automatizar este proceso: +este programa extrae los fragmentos de música del documento, ejecuta +@command{lilypond} sobre cada uno de ellos, y devuelve como salida el +documento con la música sustituida por las imágenes. Las definiciones +de ancho de línea y tamaño de letra de la música se ajustan de forma +que coincidan con los ajustes de su documento. + +Es un programa distinto a @command{lilypond} propiamente dicho, y se +ejecuta sobre la línea de órdenes; para ver más información, consulte +@ref{Utilización desde la línea de órdenes}. Si tiene MacOS 10.3 o +10.4 y experimenta algún problema al ejecutar @code{lilypond-book}, +consulte @rweb{MacOS X}. + +Este procedimiento se puede aplicar a documentos de @LaTeX{}, HTML, +Texinfo o DocBook. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex documentos, insertar música en +@cindex HTML, música dentro de +@cindex Texinfo, música dentro de +@cindex DocBook, música dentro de +@cindex @LaTeX{}, música dentro de + +@menu +* Un ejemplo de documento musicológico:: +* Integrar música y texto:: +* Opciones de fragmentos de música:: +* Invocar lilypond-book:: +* Extensiones de nombres de archivo:: +* Plantillas de lilypond-book:: +* Compartir el índice general:: +* Métodos alternativos para mezclar texto y música:: +@end menu + + +@node Un ejemplo de documento musicológico +@section Un ejemplo de documento musicológico +@translationof An example of a musicological document + +@cindex musicología +Ciertos textos contienen ejemplos musicales. Son tratados musicales, +cancioneros o manuales como este mismo. Estos textos se pueden hacer +a mano, importando simplemente una imagen en formato PostScript en el +editor de textos. Sin embargo, hay un procedimiento automático para +reducir la carga de trabajo que esto implica los documentos de HTML, +@LaTeX{}, Texinfo y DocBook. + +Un guión ejecutable llamado @code{lilypond-book} extrae los fragmentos +de música, les da formato y vuelve a poner en su lugar la partitura +resultante. A continuación presentamos un pequeño ejemplo de su +utilización con @LaTeX{}. El ejemplo contiene también texto +explicativo, por lo que no vamos a comentarlo posteriormente. + +@subheading Entrada + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Los documentos para \verb+lilypond-book+ pueden mezclar libremente +música y texto. Por ejemplo: + +\begin{lilypond} +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +\end{lilypond} + +Las opciones se escriben entre corchetes. + +\begin{lilypond}[fragment,quote,staffsize=26,verbatim] + c'4 f16 +\end{lilypond} + +Los ejemplos grandes se pueden grabar en archivos separados e +introducirse con \verb+\lilypondfile+. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(Si es necesario, sustituya @file{screech-boink.ly} +por cualquier archivo @file{.ly} +situado en el mismo directorio que este archivo.) + +\end{document} +@end verbatim +@end quotation + +@subheading Procesado + +Guarde el código anterior como un archivo llamado +@file{lilybook.lytex}, y luego ejecute en un terminal: + +@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{Leyendo lilybook.lytex...} +@emph{..montañas de mensajes suprimidos..} +@emph{Compilando lilybook.tex...} +cd out +pdflatex lilybook +@emph{..montañas de mensajes suprimidos..} +xpdf lilybook +@emph{(sustituya @command{xpdf} por su visor de PDF favorito)} +@end example + +La ejecución de @command{lilypond-book} y @command{latex} crea un gran +número de archivos temporales, que podrían abarrotar el directorio de +trabajo. Para poner remedio a esto utilice la opción +@code{--output=@var{directorio}}. Creará los archivos en un +subdirectorio aparte @file{directorio}. + +Finalmente el resultado del ejemplo de @LaTeX{} que acabamos de +mostrar@footnote{Este tutorial se procesa con Texinfo, por lo que el +ejemplo presenta un resultado en la disposición ligeramente +distinto.}. Así acaba la sección del tutorial. + +@page + +@subheading Salida + +Los documentos para @command{lilypond-book} pueden mezclar libremente +música y texto. Por ejemplo: + +@lilypond +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +@end lilypond + +Las opciones se escriben entre corchetes. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Los ejemplos grandes se pueden grabar en archivos separados e +introducirse con @code{\lilypondfile}. + +@lilypondfile[quote,noindent]{screech-boink.ly} + +Si se requiere un campo @code{tagline}, ya sea predeterminado o +personalizado, entonces el fragmento completo se debe incluir dentro +de una construcción @code{\book @{ @}}. + +@c KEEP LY +@lilypond[papersize=a8,verbatim] +\book{ + \header{ + title = "Una escala en LilyPond" + } + + \relative c' { + c d e f g a b c + } +} +@end lilypond + +@page + +@node Integrar música y texto +@section Integrar música y texto +@translationof Integrating music and text + +Aquí vamos a explicar cómo integrar LilyPond con algunos otros +formatos de salida. + +@menu +* LaTeX:: +* Texinfo:: +* HTML:: +* DocBook:: +@end menu + +@node LaTeX +@subsection @LaTeX{} +@translationof LaTeX + +@LaTeX{} es el estándar de facto para la publicación en el mundo de +las ciencias exactas. Está construido encima del motor de composición +tipográfica @TeX{}, proporcionando la tipografía de mejor calidad que +existe. + +Consulte +@uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/english/, +@emph{The Not So Short Introduction to @LaTeX{}}} (Introducción no tan +breve a @LaTeX{}) para ver una panorámica sobre cómo usar @LaTeX{}. + +La música se introduce usando + +@example +\begin@{lilypond@}[las,opciones,van,aquí] + EL CÓDIGO DE LILYPOND +\end@{lilypond@} +@end example + +@noindent +o bien + +@example +\lilypondfile[las,opciones,van,aquí]@{@var{archivo}@} +@end example + +@noindent +o bien + +@example +\lilypond[las,opciones,van,aquí]@{ EL CÓDIGO DE LILYPOND @} +@end example + +De forma adicional, @code{\lilypondversion} imprime la versión actual +de lilypond. + +La ejecución de @command{lilypond-book} deja como resultado un archivo +que se puede procesar posteriormente con @LaTeX{}. + +A continuación mostramos algunos ejemplos. El entorno @code{lilypond} + +@example +\begin@{lilypond@}[quote,fragment,staffsize=26] + c' d' e' f' g'2 g'2 +\end@{lilypond@} +@end example + +@noindent +produce + +@lilypond[quote,fragment,staffsize=26] +c' d' e' f' g'2 g'2 +@end lilypond + +La versión corta + +@example +\lilypond[quote,fragment,staffsize=11]@{@} +@end example + +@noindent +produce + +@lilypond[quote,fragment,staffsize=11]{} + +@noindent +Por el momento no es posible incluir llaves @code{@{} o @code{@}} +dentro de @code{\lilypond@{@}}, así que esta instrucción solamente es +útil con la opción @code{fragment}. + +El ancho predeterminado de las líneas de música se ajusta mediante el +examen de las instrucciones del preámbulo del documento, la parte del +documento que está antes de @code{\begin@{document@}}. La instrucción +@command{lilypond-book} los envía a @LaTeX{} para averiguar la anchura +del texto. El ancho de la línea para los fragmentos de música se +ajusta entonces al ancho del texto. Observe que este algoritmo +heurístico puede fácilmente fallar; en estos casos es necesario usar +la opción @code{line-width} del fragmento de música. + +@cindex títulos y lilypond-book +@cindex \header dentro de documentos @LaTeX{} + +Cada fragmento ejecutará los macros siguientes si han sido definidos +por el usuario: + +@itemize @bullet +@item @code{\preLilyPondExample} que se llama antes de la música, + +@item @code{\postLilyPondExample} que se llama después de la música, + +@item @code{\betweenLilyPondSystem[1]} se llama entre los sistemas si +@code{lilypond-book} ha dividido el fragmento en varios archivos +PostScript. Se debe definir de forma que tome un parámetro y recibirá +el número de archivos ya incluidos dentro del fragmento actual. La +acción predeterminada es simplemente insertar 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 + +A veces es útil mostrar elementos de música (como ligaduras) como si +continuasen más allá del final del fragmento. Esto se puede hacer +dividiendo el pentagrama y suprimiendo la inclusión del resto de la +salida de LilyPond. + +En @LaTeX{}, defina @code{\betweenLilyPondSystem} de tal forma que la +la inclusión de otros sistemas se dé por terminada una vez que se ha +alcanzado el número deseado de sistemas requeridos. Puesto que +@code{\betweenLilyPondSystem} se llama en primer lugar @emph{después} +del primer sistema, incluir solamente el primer sistema es algo +trivial. + +@example +\def\betweenLilyPondSystem#1@{\endinput@} + +\begin[fragment]@{lilypond@} + c'1\( e'( c'~ \break c' d) e f\) +\end@{lilypond@} +@end example + +Si se necesita un mayor número de sistemas, se tiene que usar un +condicional de @TeX{} antes del @code{\endinput}. En este ejemplo, +sustituya el @q{2} por el número de sistemas que quiere en la salida: + +@example +\def\betweenLilyPondSystem#1@{ + \ifnum#1<2\else\expandafter\endinput\fi +@} +@end example + +@noindent +(Dado que @code{\endinput} detiene inmediatamente el procesado del +archivo de entrada actual, necesitamos @code{\expandafter} para +posponer la llamada de @code{\endinput} después de ejecutar +@code{\fi} de manera que la cláusula @code{\if}-@code{\fi} esté +equilibrada.) + +Recuerde que la definición de @code{\betweenLilyPondSystem} es +efectiva hasta que @TeX{} abandona el grupo actual (como el entorno +@LaTeX{}) o se sobreescribe por otra definición (lo que casi siempre +es por el resto del documento). Para reponer la definición, escriba + +@example +\let\betweenLilyPondSystem\undefined +@end example + +@noindent +dentro de la fuente de @LaTeX{}. + +Se puede simplificar esto definiendo un macro de @TeX{}: + +@example +\def\onlyFirstNSystems#1@{ + \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} +@} +@end example + +@noindent +y luego diciendo solamente cuántos sistemas quiere antes de cada +fragmento: + +@example +\onlyFirstNSystems@{3@} +\begin@{lilypond@}...\end@{lilypond@} +\onlyFirstNSystems@{1@} +\begin@{lilypond@}...\end@{lilypond@} +@end example + + +@seealso +Hay opciones de línea de órdenes específicas de +@command{lilypond-book} y otros detalles que conocer para procesar +documentos de@LaTeX{} véase @ref{Invocar lilypond-book}. + + +@node Texinfo +@subsection Texinfo +@translationof Texinfo + +Texinfo es el formato estándar para la documentación del proyecto GNU. +Este mismo manual es un ejemplo de documento Texinfo. Las versiones +HTML, PDF e Info del manual se hacen a partir del documento Texinfo. + + +En el archivo de entrada, la música se especifica con + +@example +@@lilypond[las,opciones,van,aquí] + EL CÓDIGO DE LILYPOND +@@end lilypond +@end example + +@noindent +o bien + +@example +@@lilypond[las,opciones,van,aquí]@{ EL CÓDIGO DE LILYPOND @} +@end example + +@noindent +o bien + +@example +@@lilypondfile[las,opciones,van,aquí]@{@var{archivo}@} +@end example + +De forma adicional, @code{@@lilypondversion} imprime la versión actual +de lilypond. + +Cuando se ejecuta @command{lilypond-book} sobre el archivo, se obtiene +como resultado un archivo Texinfo (con la extensión @file{.texi}) que +contiene etiquetas @code{@@image} para el HTML, Info y la salida +impresa. @command{lilypond-book} genera imágenes de la música en +formatos EPS y PDF para usarlos en la salida impresa, y en formato PNG +para usarlos en las salidas HTML e Info. + +Aquí podemos ver dos ejemplos sencillos. Un entorno @code{lilypond} + +@example +@@lilypond[fragment] +c' d' e' f' g'2 g' +@@end lilypond +@end example + +@noindent +produce + +@lilypond[fragment] +c' d' e' f' g'2 g' +@end lilypond + +La versión corta + +@example +@@lilypond[fragment,staffsize=11]@{@} +@end example + +@noindent +produce + +@lilypond[fragment,staffsize=11]{} + +No como @LaTeX{}, @code{@@lilypond@{...@}} no genera una imagen en +línea. Siempre consiste en un párrafo para ella sola. + + +@node HTML +@subsection HTML +@translationof HTML + +La música se introduce usando + +@example + +\key c \minor c4 es g2 + +@end example + +@noindent +@command{lilypond-book} entonces produce un archivo HTML con las +etiquetas de imagen adecuadas para los fragmentos de música: + +@lilypond[fragment,relative=2] +\key c \minor c4 es g2 +@end lilypond + +Para imágenes en línea, utilice @code{}, donde las +opciones están separadas de la música por el símbolo de dos puntos, +por ejemplo + +@example +Algo de música dentro de una línea de texto. +@end example + +Para incluir archivos externos, escriba + +@example +@var{archivo} +@end example + +Para ver una lista de las opciones que utilizar con las etiquetas +@code{lilypond} o @code{lilypondfile}, véase +@ref{Opciones de fragmentos de música}. + +De forma adicional, @code{} imprime la versión +actual de lilypond. + +@cindex títulos en HTML +@cindex vista previa, imagen +@cindex miniatura + +@node DocBook +@subsection DocBook +@translationof DocBook + +Para insertad fragmentos de LilyPond es bueno tratar de mantener la +conformidad del documento de DocBook, permitiendo así el uso de +editores de DocBook, validación, etc. Así pues, no usamos etiquetas +personalizadas, sólo especificamos una convención basada en los +elementos estándar de DocBook. + +@subheading Convenciones usuales + +Para insertar toda clase de fragmentos utilizamos los elementos +@code{mediaobject} y @code{inlinemediaobject}, de forma que nuestros +fragmentos puedan ser formateados en línea o no en línea. Las +opciones de formateo del fragmento se escriben siempre dentro de la +propiedad @code{role} del elemento más interno (véanse las secciones +siguientes). Las etiquetas se eligen de forma que permitan a los +editores de DocBook formatear el contenido satisfactoriamente. Los +archivos de DocBook que se van a procesar con @command{lilypond-book} +deben tener la extensión @file{.lyxml}. + +@subheading Incluir un archivo de LilyPond + +Este es el caso más sencillo. Debemos usar la extensión @file{.ly} +para el archivo incluido, e insertarlo como un @code{imageobject} +estándar, con la estructura siguiente: + +@example + + + + + +@end example + +Observe que puede usar mediaobject o inlinemediaobject como el +elemento más externo, a elección suya. + +@subheading Incluir código de LilyPond + +Se puede incluir código de LilyPond mediante la utilización de un +elemento @code{programlisting}, en que el lenguaje se establece como +@code{lilypond} con la estructura siguiente: + +@example + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@end example + +Como puede ver, el elemento más externo es un @code{mediaobject} o un +@code{inlinemediaobject}, y hay un elemento @code{textobject} que +lleva el @code{programlisting} en su interior. + +@subheading Procesar el documento de DocBook + +Al ejecutar @command{lilypond-book} sobre el archivo @file{.lyxml} se +creará un documento de DocBook válido que se puede procesar +posteriormente con la extensión @file{.xml}. Si usa +@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex}, creará un +archivo PDF a partir de este documento automáticamente. Para la +generación de HTML (HTML Help, JavaHelp, etc.) puede usar las hojas de +estilo oficiales XSL de DocBook, aunque es posible que tenga que +aplicarles algún tipo de personalización. + + +@node Opciones de fragmentos de música +@section Opciones de fragmentos de música +@translationof Music fragment options + +Durante los próximos párrafos, una @q{instrucción de LilyPond} se +refiere a cualquier instrucción descrita en las secciones anteriores +que se maneja por parte de @command{lilypond-book} para que produzca +un fragmento de música. Por simplicidad, las instrucciones de +LilyPond solamente se muestran en la sintaxis de @LaTeX{}. + +Observe que la cadena de opciones se analiza de izquierda a derecha; +si una opción aparece varias veces, se toma la última solamente. + +Están disponibles las siguientes opciones para las instrucciones de +LilyPond: + +@table @code +@item staffsize=@var{altura} +Establecer la altura del pentagrama como @var{altura}, medida en +puntos. + +@item ragged-right +Producir líneas no justificadas por la derecha y con espaciado +natural, es decir, se añade @code{ragged-right = ##t} al fragmento de +LilyPond. Esta es la opción predeterminada para la instrucción +@code{\lilypond@{@}} si no está presente la opción @code{line-width}. +También es la opción predeterminada para el entorno @code{lilypond} si +está establecida la opción @code{fragment}, y no se especifica la +anchura de la línea explícitamente. + +@item noragged-right +Para fragmentos de una sola línea, permitir que la longitud del +pentagrama se amplíe hasta igualar la anchura de la línea, es decir, +se añade @code{ragged-right = ##f} al fragmento de LilyPond. + +@item line-width +@itemx line-width=@var{tamaño}\@var{unidades} +Establecer el ancho de línea como @var{tamaño}, utilizando +@var{unidades} como unidad. @var{unidades} es una de las siguientes +cadenas: @code{cm}, @code{mm}, @code{in} o @code{pt}. Esta opción +afecta a la salida de LilyPond (esto es, a la longitud del pentagrama +del fragmento musical), no al formato del texto. + +Si se usa sin ningún argumento, se establece el ancho de la línea a un +valor predeterminado (calculado con un algoritmo heurístico). + +Si no se da ninguna opción @code{line-width}, @command{lilypond-book} +trata de adivinar un valor predeterminado para los entornos +@code{lilypond} que no usan la opción @code{ragged-right}. + +@item papersize=@var{cadena} +Donde @var{cadena} es un tamaño del papel definido en el archivo +@file{scm/paper.scm}, es decir, @code{a5}, @code{quarto}, +@code{11x17}, etc. + +Los valores no definidos en el archivo @file{scm/paper.scm} se +ignoran, se emite una advertencia y el fragmento se imprime utilizando +el tamaño predeterminado @code{a4}. + +@item notime +No imprimir la indicación de compás, y desactivar las indicaciones +temporales de la música (indicación del compás y líneas divisorias). + +@item fragment +Hacer que @command{lilypond-book} añada algunos códigos necesarios +para que podamos escribir simplemente, por ejemplo, + +@example +c'4 +@end example + +@noindent +sin @code{\layout}, @code{\score}, etc. + +@item nofragment +No incluir el código adicional que completa la sintaxis de +LilyPond en los fragmentos de música. Al ser la opción +predeterminada, @code{nofragment} normalmente es redundante. + +@item indent=@var{tamaño}\@var{unidades} +Establecer el sangrado del primer sistema de pentagramas como +@var{tamaño}, utilizando @var{unidades} como unidad. @var{unidades} es +una de las siguientes cadenas: @code{cm}, @code{mm}, @code{in} o +@code{pt}. Esta opción afecta a LilyPond, no al formato del texto. + +@item noindent +Establecer el sangrado del primer sistema de la música como cero. +Esta opción afecta a LilyPond, no al formato del texto. Puesto que el +valor predeterminado es que no haya ningún sangrado, @code{noindent} +normalmente es redundante. + +@item quote +Reducir la longitud de la línea de un fragmento musical en +@math{2*0.4}@dmn{in} (pulgadas) y colocar la salida dentro de un +bloque de cita (quotation). El valor de @q{0.4@dmn{in}} se puede +controlar con la opción @code{exampleindent}. + +@item exampleindent +Establecer la longitud del sangrado que la opción @code{quote} aplica +al fragmento musical. + +@item relative +@itemx relative=@var{n} +Usar el modo de octava relativa. De forma predeterminada, las notas +se especifican con relación al Do@tie{}central. El argumento entero +opcional especifica la octava de la nota inicial, donde el valor +predeterminado @code{1} es el Do central. La opción @code{relative} +sólo funciona cuando está establecida la opción @code{fragment}, de +manera que @code{fragment} viene implicada automáticamente por +@code{relative}, independientemente de la presencia de @code{fragment} +o de @code{nofragment} en la fuente. + +@end table + +LilyPond utiliza también @command{lilypond-book} para producir su +propia documentación. Para hacerlo, están a nuestra disposición +ciertas opciones algo esotéricas para los fragmentos musicales. + +@table @code +@item verbatim +El argumento de una instrucción de LilyPond se copia al archivo de +salida y se incluye dentro de un bloque «verbatim» o preformateado, +seguido del texto que se escriba con la opción @code{intertext} (que +no funciona aún); después se imprime la música en sí. Esta opción no +funciona bien con @code{\lilypond@{@}} si forma parte de un párrafo. + +Si se usa la opción @code{verbatim} dentro de una instrucción +@code{lilypondfile}, es posible incluir con estilo preformateado sólo +una parte del archivo fuente. Si el archivo de código fuente contiene +un comentario que contiene @samp{begin verbatim} (sin las comillas), +la cita del bloque de estilo preformateado empezará después de la +última vez que aparezca este comentario; de forma similar, la cita del +bloque preformateado se detendrá justo antes de la primera vez que +aparezca un comentario que contenga @samp{end verbatim}, si lo hay. +En el siguiente ejemplo de código fuente, la música se interpreta en +el modo relativo, pero la cita preformateada no presentará el bloque +@code{relative}, es decir + +@example +\relative c' @{ % begin verbatim + c4 e2 g4 + f2 e % end verbatim +@} +@end example + +@noindent +se imprimirá como un bloque preformateado como + +@example + c4 e2 g4 + f2 e +@end example + +@noindent +Si queremos traducir los comentarios y los nombres de variable en la +salida literal pero no en el código fuente, podemos establecer el +valor de la variable de entorno @code{LYDOC_LOCALEDIR} a la ruta de un +directorio; este directorio debe contener un árbol de catálogos de +mensajes @file{.mo} con @code{lilypond-doc} como dominio. + +@item addversion +(Sólo para la salida de Texinfo.) Anteponer la línea @code{\version +@@w@{"@@version@{@}"@}} a la salida de @code{verbatim}. + +@item texidoc +(Sólo para la salida de Texinfo.) Si se llama a @command{lilypond} +con la opción @option{--header=@/texidoc}, y el archivo que se procesa +se llama @file{fulanito.ly}, crea un archivo +@file{fulanito.texidoc} si existe un campo @code{texidoc} dentro del +bloque @code{\header} de cabecera. La opción @code{texidoc} hace que +@command{lilypond-book} incluya estos archivos, añadiendo su contenido +como un bloque de documentación inmediatamente antes del fragmento +musical. + +Suponiendo que el archivo @file{fulanito.ly} contiene + +@example +\header @{ + texidoc = "Este archivo es un ejemplo de una sola nota." +@} +@{ c'4 @} +@end example + +@noindent +y que tenemos lo siguiente en nuestro documento de Texinfo +@file{prueba.texinfo} + +@example +@@lilypondfile[texidoc]@{fulanito.ly@} +@end example + +@noindent +la siguiente orden da como salida el resultado esperado: + +@example +lilypond-book --pdf --process="lilypond \ + -dbackend=eps --header=texidoc" test.texinfo +@end example + +La mayoría de los documentos de prueba de LilyPond (en el directorio +@file{input} de la distribución) son pequeños archivos @file{.ly} que +tienen exactamente este aspecto. + +Por motivos de localización de idioma, si el documento de Texinfo +contiene @code{@@documentlanguage @var{LANG}} y la cabecera de +@file{loquesea.ly} contiene un campo @code{texidoc@var{LANG}}, y +@command{lilypond} se ejecuta con +@option{--header=@/texidoc@var{LANG}}, entonces se incluirá +@file{loquesea.texidoc@var{LANG}} en lugar de +@file{loquesea.texidoc}. + +@item lilyquote +(Sólo para la salida de Texinfo.) Esta opción es similar a quote, +pero se pone dentro del bloque de cita solamente el fragmento de +música (y el bloque preformateado que se da en la opción +@code{verbatim}). Esta opción es útil si queremos citar +(@code{quote}) el fragmento musical pero no el bloque de documentación +@code{texidoc}. + +@item doctitle +(Sólo para la salida de Texinfo.) Esta opción funciona de forma +parecida a la opción @code{texidoc}: si @command{lilypond} se llama +con la opción @option{--header=@/doctitle}, y el archivo que procesar +se llama @file{loquesea.ly} y contiene un campo @code{doctitle} en +el bloque @code{\header}, crea un archivo @file{loquesea.doctitle}. +Cuando se usa la opción @code{doctitle}, el contenido de +@file{loquesea.doctitle}, que debería ser una línea única de +@var{texto}, se inserta en el documento de Texinfo como +@code{@@lydoctitle @var{texto}}. @code{@@lydoctitle} debe ser un +macro definido en el documento de Texinfo. La misma indicación +referida al procesado de @code{texidoc} con idiomas localizados se +aplica a @code{doctitle}. + +@item nogettext +(Sólo para la salida de Texinfo.) No traducir los comentarios y +nombres de variable en el fragmento de código literal citado. + +@item printfilename +Si un archivo de entrada de LilyPond se incluye con +@code{\lilypondfile}, imprimir el nombre del archivo inmediatamente +antes del fragmento musical. Para la salida HTML, esto es un enlace. +Sólo se imprime el nombre base del archivo, es decir, se elimina la +parte del directorio de la ruta del archivo. + +@end table + + +@node Invocar lilypond-book +@section Invocar @command{lilypond-book} +@translationof Invoking lilypond-book + +@command{lilypond-book} produce un archivo con una de las siguientes +extensiones: @file{.tex}, @file{.texi}, @file{.html} o @file{.xml}, +dependiendo del formato de salida. Todos los archivos @file{.tex}, +@file{.texi} y @file{.xml} necesitan un procesado posterior. + +@subheading Instrucciones específicas de formato + +@subsubheading @LaTeX{} + +Hay dos formas de procesar el documento en @LaTeX{} para su impresión +o publicación: hacer un archivo PDF directamente con PDF@LaTeX{}, o +generar un archivo PostScript con @LaTeX{} a través de un traductor de +DVI a PostScript como @command{dvips}. la primera forma es más +sencilla y es la que se recomienda@footnote{Observe que PDF@LaTeX{} y +@LaTeX{} podrían no ser utilizables para compilar cualquier documento +@LaTeX{}, y es por lo que explicamos las dos formas.}, y cualquiera +que sea el método que utilice, podrá convertir fácilmente entre +PostScript y PDF con herramientas como @command{ps2pdf} y +@command{pdf2ps} que vienen incluidas con GhostScript. + +Para producir un archivo PDF por medio de PDF@LaTeX{}, utilice + +@example +lilypond-book --pdf miarchivo.pdftex +pdflatex miarchivo.tex +@end example + +@cindex tipografías de outline +@cindex type1, tipografías +@cindex dvips +@cindex invocación de dvips + +Para producir una salida PDF por medio de +@LaTeX{}/@command{dvips}/@command{ps2pdf}, debe hacer + +@example +lilypond-book miarchivo.lytex +latex miarchivo.tex +dvips -Ppdf miarchivo.dvi +ps2pdf miarchivo.ps +@end example + +@noindent +El archivo @file{.dvi} creado por este proceso no contiene las cabezas +de las notas. Esto es normal; si sigue las instrucciones, las cabezas +aparecerán en los archivos @file{.ps} y @file{.pdf}. + +La ejecución de @command{dvips} puede dar como resultado algunas +advertencias sobre las fuentes tipográficas; son inocuas y se pueden +ignorar. Si está ejecutando @command{latex} en modo de dos columnas, +recuerde añadir @code{-t landscape} a las opciones de @command{dvips}. + +@subsubheading Texinfo + +Para producir un documento de Texinfo (en cualquier formato de +salida), siga el procedimiento normal para Texinfo, esto es: o bien +llame a @command{texi2pdf} o a @command{texi2dvi} o a +@command{makeinfo}, según el formato de la salida que quiera crear. +@ifinfo +@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, y @ref{Creating +an Info File, , , texinfo, GNU Texinfo}. +@end ifinfo +@ifnotinfo +Consulte la documentación de Texinfo para ver más detalles. +@end ifnotinfo + + +@subheading Opciones de la línea de órdenes + +@command{lilypond-book} acepta las siguientes opciones de la línea de +órdenes: + +@table @code +@item -f @var{formato} +@itemx --format=@var{formato} +Especificar el tipo del documento que se va a procesar: @code{html}, +@code{latex}, @code{texi} (predeterminado) o @code{docbook}. Si falta +esta opción, @command{lilypond-book} tratará de detectar el formato +automáticamente, véase @ref{Extensiones de nombres de archivo}. Por el +momento, @code{texi} es lo mismo que @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} +Conducir los fragmentos a través de @var{filter} por medio de una +tubería. @code{lilypond-book} no obedecerá --filter y --process al +mismo tiempo. Por ejemplo, + +@example +lilypond-book --filter='convert-ly --from=2.0.0 -' mi-libro.tely +@end example + +@item -h +@itemx --help +Imprimir un breve mensaje de ayuda. + +@item -I @var{directorio} +@itemx --include=@var{directorio} +Añadir @var{directorio} a la ruta de inclusión. +@command{lilypond-book} busca también los fragmentos ya compilados en +la ruta de inclusión, y no los vuelve a escribir en el directorio de +salida, así que en ciertos casos es necesario invocar instrucciones de +procesado posteriores como @command{makeinfo} o @command{latex} con +las mismas opciones @code{-I @var{directorio}}. + +@item -o @var{directorio} +@itemx --output=@var{directorio} +Colocar los archivos generados en el @var{directorio}. La ejecución +de @command{lilypond-book} genera montañas de pequeños archivos que +luego procesará LilyPond. Para evitar toda esta parafernalia en el +mismo directorio que la fuente, utilice la opción @option{--output}, y +cambie a este directorio antes de ejecutar @command{latex} o +@command{makeinfo}. + +@example +lilypond-book --output=out miarchivo.lytex +cd out +... +@end example + +@itemx --skip-lily-check +Evitar el fracaso si no se encuentra ninguna salida de lilypond. Se +usa para la documentación de LilyPond en formato Info sin imágenes. + +@itemx --skip-png-check +Evitar el fracaso si no se encuentran las imágenes PNG de los archivos +EPS. Se usa para la documentación de LilyPond en formato Info sin +imágenes. + +@itemx --lily-output-dir=@var{directorio} +Escribir archivos lily-XXX en el directorio @var{directorio}, enlazar +en el directorio de @code{--output}. Use esta opción para ahorrar +tiempo de construcción para documentos de distintos directorios que +comparten muchos fragmentos idénticos de código. + +@itemx --info-images-dir=@var{directorio} +Dar formato a la salida de Texinfo de manera que Info busque las +imágenes de música en @var{directorio}. + +@itemx --latex-program=@var{prog} +Ejecutar el programa @command{prog} en vez de @command{latex}. Esto +es útil si nuestro documento se procesa con @command{xelatex}, por +ejemplo. + +@itemx --left-padding=@var{cantidad} +Rellenar las cajas EPS en esta medida, alrededor. @var{cantidad} se +mide en milímetros, y es 3.0 como valor predeterminado. Esta opción +se debe usar si las líneas de música están muy pegadas al margen +derecho. + +El ancho de un sistema que está muy ajustado dentro de su rectángulo +puede variar, debido a los elementos de notación que están pegados al +margen izquierdo, como los números de compás y el nombre del +instrumento. Esta opción acorta todas las líneas y las mueve a la +derecha en la misma medida. + + +@item -P @var{instrucción} +@itemx --process=@var{instrucción} +Procesar los fragmentos de LilyPond utilizando @var{instrucción}. La +instrucción predeterminada es @code{lilypond}. @code{lilypond-book} +no obedecerá a @code{--filter} y a @code{--process} al mismo tiempo. + +@item --pdf +Crear archivos PDF para su uso con PDF@LaTeX{}. + +@itemx --use-source-file-names +Escribir los archivos de salida de los fragmentos de música con el +mismo nombre de base que su archivo fuente. Esta opción sólo funciona +para fragmentos incluidos con @code{lilypondfile} y sólo si los +directorios determinados por las opciones @code{--output-dir} y +@code{--lily-output-dir} son distintos. + +@item -V +@itemx --verbose +Ser prolijo. + +@item -v +@itemx --version +Imprimir la información de la versión. +@end table + +@knownissues + +La instrucción de Texinfo @code{@@pagesizes} no se interpreta. De +forma similar, las instrucciones de @LaTeX{} que cambian los márgenes +y anchos de línea después del preámbulo se ignoran. + +Sólo se procesa el primer @code{\score} de un bloque LilyPond. + + +@node Extensiones de nombres de archivo +@section Extensiones de nombres de archivo +@translationof Filename extensions + +Puede usar cualquier extensión para el nombre del archivo de entrada, +pero si no usa la extensión recomendada para un formato en particular +tendrá que especificar manualmente el formato de salida; para ver más +detalles, consulte @ref{Invocar lilypond-book}. En caso contrario, +@command{lilypond-book} selecciona automáticamente el formato de +salida basándose en la extensión del nombre del archivo de entrada. + +@quotation +@multitable @columnfractions .2 .5 +@item @strong{extensión} @tab @strong{formato de salida} +@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 + +Si usa la misma extensión para el archivo de entrada que la que usa +@command{lilypond-book} para el archivo de salida, y si el archivo de +entrada está en el mismo directorio que el directorio de trabajo de +@command{lilypond-book}, debe usar la opción @code{--output} para que +funcione @command{lilypond-book}, pues en caso contrario saldrá con un +mensaje de error como @qq{La salida sobreescribirá al archivo de +entrada}. + +@node Plantillas de lilypond-book +@section Plantillas de lilypond-book +@translationof lilypond-book templates + +Estas plantillas se usan para @code{lilypond-book}. Si no está +familiarizado con este programa, consulte @rprogram{LilyPond-book}. + +@subsection LaTeX + +Podemos insertar fragmentos de LilyPond dentro de un documento de +LaTeX. + +@example +\documentclass[]@{article@} + +\begin@{document@} + +Texto normal en LaTeX. + +\begin@{lilypond@} +\relative c'' @{ + a4 b c d +@} +\end@{lilypond@} + +Más texto en LaTeX, y las opciones dentro de los corchetes. + +\begin@{lilypond@}[fragment,relative=2,quote,staffsize=26,verbatim] +d4 c b a +\end@{lilypond@} +\end@{document@} +@end example + +@subsection Texinfo + +Podemos insertar fragmentos de LilyPond dentro de Texinfo; de hecho, +todo el presente manual está escrito en Texinfo. + +@example +\input texinfo @c -*-texinfo-*- +@@node Top +@@top + +Texto en Texinfo + +@@lilypond +\relative c' @{ + a4 b c d +@} +@@end lilypond + +Más texto en Texinfo, y las opciones dentro de los corchetes. + +@@lilypond[verbatim,fragment,ragged-right] +d4 c b a +@@end lilypond + +@@bye +@end example + + +@subsection html + +@example + + + + + +

+Los documentos para lilypond-book pueden mezclar música y texto libremente. Por +ejemplo, + +\relative c'' @{ + a4 b c d + +

+Otro poco de lilypond, esta vez con opciones: + + +a4 b c d + +

+ + + + + +@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 +%Esto se puede dejar vacío si no vamos a utilizar pdftex +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{mathptmx}%Times +\usepackage{helvet}%Helvetica +\fi +%Aquí insertamos todos los paquetes que pdftex también entiende +\usepackage[ngerman,finnish,english]{babel} +\usepackage{graphicx} + +\begin{document} +\title{Un documento breve con LilyPond y xelatex} +\maketitle + +Las instrucciones \textbf{font} normales dentro del \emph{texto} +funcionan, porque \textsf{están contempladas por \LaTeX{} y XeteX.} +Si queremos usar instrucciones específicas como \verb+\XeTeX+, debemos +incluirlas de nuevo dentro de un entorno \verb+\ifxetex+. Podemos +utilizar esto para imprimir la instrucción \ifxetex \XeTeX{} \else +XeTeX \fi que no es conocida para el \LaTeX\ normal. + +Dentro del texto normal podemos utilizar instrucciones de LilyPond +fácilmente, de esta forma: + +\begin{lilypond} +{a2 b c'8 c' c' c'} +\end{lilypond} + +\noindent +y así sucesivamente. + +La fuente tipográfica de los fragmentos, establecida con LilyPond, +tendrá que establecerse desde dentro del fragmento. Para esto puede +leer la parte de lilypond-book en el manual de utilización. + +\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 Compartir el índice general +@section Compartir el índice general +@translationof Sharing the table of contents + +Estas funciones ya existen en el paquete OrchestralLily: + +@example +@url{http://repo.or.cz/w/orchestrallily.git} +@end example + +Para conseguir más flexibilidad en el manejo del texto, algunos +usuarios prefieren exportar la el índice general o tabla de contenidos +desde lilypond y leerla dentro de @LaTeX{}. + +@subsubheading Exportación del índice general desde LilyPond + +Esto supone que nuestra partitura tiene varios movimientos dentor del +mismo archivo de salida de 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 Importación del índice general dentro de LaTeX + +En LaTeX, la cabecera debe incluir lo siguiente: + +@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@{nombredelapartitura@} +@end smallexample + +@noindent +donde @code{\includescore} está definido como: + +@smallexample +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \includescore@{PossibleExtension@} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Leer las entradas del índice general para un archivo PDF +% a partir del archivo .toc correspondeiente. +% Esto requiere bastantes trucos de latex, porque leer cosas de un archivo +% e insertarlo dentro de los argumentos de un macro no es posible +% fácilmente. + +% Solución de Patrick Fimml en el canal #latex el 18 de abril de 2009: +% \readfile@{filename@}@{\variable@} +% lee el contenido del archivo en \variable (no definida si el +% archivo no existe) +\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 Métodos alternativos para mezclar texto y música +@section Métodos alternativos para mezclar texto y música +@translationof Alternate methods of mixing text and music + +Otras formas de mezclar texto y música (sin @command{lilypond-book}) +se estudian en @ref{Insertar la salida de LilyPond dentro de otros programas}. + + diff --git a/Documentation/es/usage/running.itely b/Documentation/es/usage/running.itely new file mode 100644 index 0000000000..8684fe7e56 --- /dev/null +++ b/Documentation/es/usage/running.itely @@ -0,0 +1,857 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: cff226053d927e433473697fe743bdfd721d2607 + + 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 Ejecutar LilyPond +@chapter Ejecutar LilyPond +@translationof Running LilyPond + +Este capítulo detalla los aspectos técnicos de la ejecución de +LilyPond. + +@menu +* Utilización normal:: +* Utilización desde la línea de órdenes:: +* Mensajes de error:: +* Errores comunes:: +@end menu + + +@node Utilización normal +@section Utilización normal +@translationof Normal usage + +Casi todos los usuarios ejecutan LilyPond por medio de un interfaz +gráfico; consulte @rlearning{Primeros pasos} si no lo ha leído aún. + + +@node Utilización desde la línea de órdenes +@section Utilización desde la línea de órdenes +@translationof Command-line usage + +Esta sección contiene información adicional sobre el uso de LilyPond +en la línea de órdenes. Esta forma puede ser preferible para pasarle +al programa algunas opciones adicionales. Además, existen algunos +programas complementarios @q{de apoyo} (como @code{midi2ly}) que sólo +están disponibles en la línea de órdenes. + +Al hablar de la @q{línea de órdenes}, nos referimos a la consola del +sistema operativo. Los usuarios de Windows posiblemente estén más +familiarizados con los términos @q{ventana de MS-DOS} o @q{línea de +comandos}; Los usuarios de MacOS@tie{}X puede que estén más +familiarizados con los términos @q{terminal} o @q{consola}. Éstos +podrían requerir algunas configuraciones adicionales y deberían +consultar también el apartado @rweb{MacOS X}. + +La descripción del uso de esta parte de los sistemas operativos se +sale del ámbito de este manual; le rogamos que consulte otros +documentos sobre este tema si no le resulta familiar la línea de +órdenes. + +@menu +* Invocar a LilyPond:: +* Opciones de la línea de órdenes para lilypond:: +* Variables de entorno:: +* LilyPond en una jaula de chroot:: +@end menu + +@node Invocar a LilyPond +@unnumberedsubsec Invocar @command{lilypond} +@translationof Invoking lilypond + +El ejecutable @command{lilypond} se puede llamar desde la línea de +órdenes de la siguiente manera: + +@example +lilypond [@var{opción}]@dots{} @var{archivo}@dots{} +@end example + +Cuando se invoca con un nombre de archivo sin extensión, se prueba en +primer lugar con la extensión @file{.ly}. Para leer la entrada desde +stdin, utilice un guión (@code{-}) en sustitución de @var{archivo}. + +Cuando se procesa @file{archivo.ly}, la salida resultante son los +archivos @file{archivo.ps} y @file{archivo.pdf}. Se pueden +especificar varios archivos; cada uno de ellos se procesará de forma +independiente@footnote{El estado de GUILE no se restablece después de +procesar un archivo @code{.ly}, por lo que debe tener cuidado de no +modificar ningún valor predeterminado desde dentro de Scheme.}. + +Si @file{archivo.ly} contiene más de un bloque @code{\score}, el resto +de las partituras se obtendrán como salida en archivos numerados, +empezando por @file{archivo-1.pdf}. además, el valor de +@code{output-suffix} (sufijo de salida) se insertará entre el nombre +base y el número. Un archivo de entrada que contenga + +@example +#(define output-suffix "violin") +\score @{ @dots{} @} +#(define output-suffix "cello") +\score @{ @dots{} @} +@end example + +@noindent +producirá como salida @var{base}@file{-violin.pdf} y +@var{base}@file{-cello-1.pdf}. + + +@unnumberedsubsubsec Instrucciones estándar de la línea de órdenes + +Si su terminal (o ventana de órdenes) contempla las redirecciones +normales, quizá le sean de utilidad las siguientes instrucciones para +redirigir la salida de la consola a un archivo: + +@itemize + +@item +@code{lilypond archivo.ly 1>salidaestandar.log} para redirigir la salida normal + +@item +@code{lilypond archivo.ly 2>salidadeerror.log} para redirigir los mensajes de error + +@item +@code{lilypond archivo.ly &>todo.log} para redirigir toda la salida + +@end itemize + +Consulte la documentación de su shell para ver si contempla estas +opciones, o si la sintaxis es distinta. Observe que son instrucciones +del shell y que no tienen nada que ver con lilypond. + +@node Opciones de la línea de órdenes para lilypond +@unnumberedsubsec Opciones de la línea de órdenes para @command{lilypond} +@translationof Command line options for lilypond + +@cindex invocación de @command{lilypond} +@cindex opciones de la línea de órdenes para @command{lilypond} +@cindex línea de órdenes, opciones de +@cindex modificadores + +Están contempladas las siguientes opciones: + +@table @code + +@item -e,--evaluate=@var{expresión} +Evaluar la @var{expresión} de Scheme antes de analizar los archivos +@file{.ly}. Se pueden pasar varias opciones @code{-e}, que se +evaluarán en secuencia. + +La expresión se evaluará en el módulo @code{guile-user}, de manera que +si quiere usar definiciones dentro de @var{expresión}, debe utilizar + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +en la línea de órdenes, e incluir + +@example +#(use-modules (guile-user)) +@end example + +@noindent +al principio del archivo @file{.ly}. + +@item -f,--format=@var{formato} +Formato de la salida. Como @code{formato} se puede elegir entre +@code{ps}, @code{pdf} y @code{png}. + +Ejemplo: @code{lilypond -fpng @var{archivo}.ly} + +@item -d,--define-default=@var{variable}=@var{valor} +Establece la opción interna del programa @var{variable} al valor de +Scheme @var{valor}. Si no se proporciona ningún @var{valor}, se usa +@var{#t}. Para desactivar una opción se puede anteponer @code{no-} a +la @var{variable}, p.ej.: + +@cindex apuntar y pulsar, línea de órdenes + +@example +-dno-point-and-click +@end example + +@noindent +es lo mismo que +@example +-dpoint-and-click='#f' +@end example + +A continuación veremos algunas opciones interesantes. + +@cindex help (ayuda), línea de órdenes + +@table @samp +@item help +La ejecución de @code{lilypond -dhelp} imprimirá todas las opciones +@code{-d} que están disponibles. + +@cindex paper-size, línea de órdenes + +@item paper-size +Esta opción establece el tamaño predeterminado del papel, +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Observe que la cadena se debe incluir dentro de comillas escapadas +( @code{\"} ). + +@c Match " in previous line to help context-sensitive editors + +@cindex safe, línea de órdenes + +@item safe +No confiar en la entrada @file{.ly}. + +Cuando el proceso de tipografía de LilyPond se encuentra disponible a +través de un servidor web, @b{SE DEBEN} pasar las opciones +@code{--safe} (seguro) o @code{--jail} (jaula). La opción +@code{--safe} evita que el código de Scheme en línea arme un desastre, +por ejemplo + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +La opción @code{-dsafe} funciona evaluando las expresiones en línea de +Scheme dentro de un módulo especial seguro. Este módulo seguro deriva +del módulo GUILE @file{safe-r5rs}, pero añade ciertas funciones del +API de LilyPond. Estas funciones se relacionan en +@file{scm/safe-lily.scm}. + +Además, el modo seguro prohíbe las directivas @code{\include} e +inhabilita el uso de barras invertidas en las cadenas de @TeX{}. + +En el modo seguro, no es posible la importación de variables de +LilyPond dentro de Scheme. + +@code{-dsafe} @emph{no} detecta la sobreutilización de recursos. Aún +es posible hacer que el programa se cuelgue indefinidamente, por +ejemplo alimentando el backend con estructuras de datos cíclicas. Por +tanto, si se está utilizando LilyPond sobre un servidor web accesible +públicamente, el proceso debe limitarse tanto en el uso de CPU como de +memoria. + +El modo seguro impide que muchos fragmentos útiles de código de +LilyPond se puedan compilar. La opción @code{--jail} es una +alternativa más segura, pero su preparación requiere más trabajo. + +@cindex salida, establecer el formato de +@item backend +el formato de salida que usar para el back-end o extremo final. +Para el @code{formato} se puede elegir entre +@table @code +@item ps +@cindex PostScript, salida +para PostScript. + +Los archivos PostScript incluyen las tipografías TTF, Type1 y OTF. No +se seleccionan subconjuntos de estas tipografías. Cuando se usan +conjuntos de caracteres orientales, esto puede dar lugar a archivos +enormes. + +@item eps + para obtener PostScript encapsulado. Esto vuelca cada una de las +páginas/sistemas como un archivo @file{EPS} distinto, sin tipografías, +y como un solo archivo @file{EPS} encuadernado con todas las +páginas/sistemas con las tipografías incluidas. + +Este modo se usa de forma predeterminada por parte de +@command{lilypond-book}. + +@item svg + +@cindex SVG (Gráficos vectoriales escalables) + + para obtener SVG (gráficos vectoriales escalables). + +Crea un único archivo SVG que contiene toda la salida de música, con +las tipografías incrustadas. Se necesita un visor de SVG que +contemple las tipografías incrustadas, o un visor de SVG que pueda +sustituir las tipografías incrustadas por tipografías OTF. Bajo UNIX, +puede usar @uref{http://www.inkscape.org,Inkscape} (versión 0.42 o +posterior), después de copiar las tipografías OTF del directorio de +LilyPond (que normalmente es +@file{/usr/share/lilypond/VERSIÓN/fonts/otf/}) al directorio +@file{~/.fonts/}. + +@item scm + +@cindex Scheme, volcado de + + para obtener un volcado de las instrucciones internas de dibujo +basadas en Scheme, en bruto. + +@item null + no producir una salida impresa; tiene el mismo efecto que @code{-dno-print-pages}. +@end table + +Ejemplo: @code{lilypond -dbackend=svg @var{archivo}.ly} + +@item preview +@cindex vista previa, línea de órdenes +Generar un archivo de salida que contenga solamente los títulos de +cabecera y el primer sistema de música. Si se usan bloques +@code{\bookpart}, los títulos y el primer sistema de todos los bloques +@code{\bookpart} aparecerán en la salida. Los motores @code{ps}, +@code{eps} y @code{svg} contemplan esta opción. + +@item print-pages +Generar las páginas completas, el ajuste predeterminado. +@code{-dno-print-pages} es útil en combinación con @code{-dpreview}. + +@end table + + + +@item -h,--help +Mostrar un resumen de las formas de utilización. + +@item -H,--header=@var{CAMPO} +Volcar un campo de cabecera al archivo @file{NOMBREBASE.@var{CAMPO}} + +@cindex archivos, búsqueda de +@cindex búsqueda, ruta de +@item --include, -I=@var{directorio} +Añadir el @var{directorio} a la ruta de búsqueda de archivos de +entrada. + +Se pueden escribir varias opciones -I. La búsqueda se inicia en el +primer directorio definido, y si el archivo que se debe incluir no se +encuentra, la búsqueda continúa en los directorios siguientes. + +@item -i,--init=@var{archivo} +Establecer el archivo de inicio a @var{archivo} (predeterminado: +@file{init.ly}). + +@cindex carpeta, dirigir la salida hacia +@cindex salida, establecer el nombre del archivo de + +@item -o,--output=@var{ARCHIVO} o @var{CARPETA} +Establecer el nombre del archivo de salida predeterminado a +@var{ARCHIVO} o, si existe una carpeta con ese nombre, dirigir la +salida hacia @var{CARPETA}, tomando el nombre de archivo del documento +de entrada. Se añade el sufijo correspondiente (por ejemplo, +@code{.pdf} para PDF) en los dos casos. + +@item --ps +Generar PostScript. + +@item --png +Generar imágenes de las páginas en formato PNG. Esto implica +@code{--ps}. La resolución en PPP de la imagen se puede establecer +con +@example +-dresolution=110 +@end example + +@cindex PDF (formato de documento portátil), salida de + +@item --pdf +Generar PDF. Implica @code{--ps}. + + + +@item -j,--jail=@var{usuario},@var{grupo},@var{jaula},@var{directorio} +Ejecutar @command{lilypond} en una jaula de chroot. + +La opción @code{--jail} (jaula) proporciona una alternativa más +flexible a la opción @code{--safe} cuando el proceso de tipografía de +LilyPond está disponible a través de un servidor web o cuando LilyPond +ejecuta archivos fuente procedentes del exterior. + +La opción @code{--jail} funciona cambiando la raíz de +@command{lilypond} a @var{jaula} justo antes de comenzar el proceso de +compilación en sí. Entonces se cambian el usuario y el grupo a los +que se han dado en la opción, y el directorio actual se cambia a +@var{directorio}. Esta instalación garantiza que no es posible, al +menos en teoría, escapar de la jaula. Observe que para que funcione +@code{--jail} se debe ejecutar @command{lilypond} como root, lo que +normalmente se puede hacer de una forma segura utilizando +@command{sudo}. + +La instalación de una jaula es un asunto algo delicado, pues debemos +asegurarnos de que LilyPond puede encontrar @emph{dentro de la jaula} +todo lo que necesita para poder compilar la fuente. Una configuración +típica consta de los siguientes elementos: + +@table @asis +@item Preparar un sistema de archivos separado +Se debe crear un sistema de archivos separado para LilyPond, de forma +que se pueda montar con opciones seguras como @code{noexec}, +@code{nodev} y @code{nosuid}. De esta forma, es imposible ejecutar +programas o escribir directamente a un dispositivo desde LilyPond. Si +no quiere crear una partición separada, tan sólo tiene que crear un +archivo de un tamaño razonable y usarlo para montar un dispositivo +loop. El sistema de archivos separado garantiza también que LilyPond +nunca pueda escribir en un espacio mayor del que se le permita. + +@item Preparar un usuario separado +Se debe usar un usuario y grupo separados (digamos +@code{lily}/@code{lily}) con bajos privilegios para ejecutar LilyPond +dentro de la jaula. Debería existir un solo directorio con permisos +de escritura para este usuario, y debe pasarse en el valor +@var{directorio}. + +@item Preparar la jaula +LilyPond necesita leer algunos archivos mientras se ejecuta. Todos +estos archivos se deben copiar dentro de la jaula, bajo la misma ruta +en que aparecen en el sistema de archivos real de root. Todo el +contenido de la instalación de LilyPond (por ejemplo +@file{/usr/share/lilypond}) se debe copiar. + +Si surgen problemas, la forma más sencilla de rastrearlos es ejecutar +LilyPond usando @command{strace}, lo que le permitirá determinar qué +archivos faltan. + +@item Ejecutar LilyPond +Dentro de una jaula montada con @code{noexec} es imposible ejecutar +ningún programa externo. Por tanto, LilyPond se debe ejecutar con un +backend que no necesite tal programa. Como ya mencionamos, también se +debe ejecutar con privilegios del superusuario (que por supuesto +perderá inmediatamente), posiblemente usando @command{sudo}. Es buena +idea limitar el número de segundos de tiempo de CPU que LilyPond puede +usar (p.ej., usando @command{ulimit -t}), y, si su sistema operativo +lo contempla, el tamaño de la memoria que se puede reservar. +@end table + + +@item -v,--version +Mostrar la información de la versión. + +@item -V,--verbose +Ser prolijo: mostrar las rutas completas de todos los archivos que se +leen, y dar información cronométrica. + +@item -w,--warranty +Mostrar la garantía con que viene GNU LilyPond (¡no viene con +@strong{NINGUNA GARANTÍA}!). +@end table + +@node Variables de entorno +@unnumberedsubsec Variables de entorno +@translationof Environment variables + + +@cindex LANG +@cindex LILYPOND_DATADIR + +@command{lilypond} reconoce las siguientes variables de entorno: +@table @code +@item LILYPOND_DATADIR +Especifica un directorio en el que los mensajes de localización y de +datos se buscarán de forma predeterminada. El directorio debe +contener subdirectorios llamados @file{ly/}, @file{ps/}, @file{tex/}, +etc. + +@item LANG +Selecciona el idioma de los mensajes de advertencia. + +@item LILYPOND_GC_YIELD +Una variable, como porcentaje, que ajusta el comportamiento de la +administración de memoria. Con valores más altos, el programa usa más +memoria; con valores más bajos, usa más tiempo de CPU. El valor +predeterminado es @code{70}. + +@end table + + +@node LilyPond en una jaula de chroot +@unnumberedsubsec LilyPond en una jaula de chroot +@translationof LilyPond in chroot jail + +La preparación del servidor para que ejecute LilyPond en una jaula de +chroot es una tarea muy complicada. Los pasos están relacionados más +abajo. Los ejemplos que aparecen en cada uno de los pasos son válidos +para Ubuntu Linux, y pueden requerir el uso de @code{sudo} según +corresponda. + +@itemize + +@item Instale los paquetes necesarios: LilyPond, GhostScript e ImageMagick. + +@item Cree un usuario nuevo con el nombre de @code{lily}: + +@example +adduser lily +@end example + +@noindent +Esto también creará un nuevo grupo para el usuario @code{lily}, y una +carpeta personal, @code{/home/lily} + +@item En la carpeta personal del usuario @code{lily}, cree un archivo para usarlo como un sistema de archivos separado: + +@example +dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000 +@end example + +@noindent +Este ejemplo crea un archivo de 200MB para su uso como el sistema de +archivos de la jaula. + +@item Cree un dispositivo loop, haga un sistema de archivos y móntelo, +después cree una carpeta que sea escribible por el usuario +@code{lily}: + +@example +mkdir /mnt/lilyloop +losetup /dev/loop0 /home/lily/loopfile +mkfs -t ext3 /dev/loop0 200000 +mount -t ext3 /dev/loop0 /mnt/lilyloop +mkdir /mnt/lilyloop/lilyhome +chown lily /mnt/lilyloop/lilyhome +@end example + +@item En la configuración de los servidores, JAIL será @code{/mnt/lilyloop} +y DIR será @code{/lilyhome}. + +@item Cree un gran árbol de directorios dentro de la jaula copiando los +archivos necesarios, como se muestra en el guión de ejemplo que aparece +más abajo. + +Puede usar @code{sed} para crear los archivos de copia necesarios para +un ejecutable dado: + +@example +for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done +@end example + +@end itemize + +@subheading Guión de ejemplo para Ubuntu 8.04 de 32 bits + +@example +#!/bin/sh +## aquí se fijan los valores predeterminados + +username=lily +home=/home +loopdevice=/dev/loop0 +jaildir=/mnt/lilyloop +# prefijo (¡sin la barra inicial!) +lilyprefix=usr/local +# el directorio en que lilypond se encuentra instalado en el sistema +lilydir=/$lilyprefix/lilypond/ + +userhome=$home/$username +loopfile=$userhome/loopfile +adduser $username +dd if=/dev/zero of=$loopfile bs=1k count=200000 +mkdir $jaildir +losetup $loopdevice $loopfile +mkfs -t ext3 $loopdevice 200000 +mount -t ext3 $loopdevice $jaildir +mkdir $jaildir/lilyhome +chown $username $jaildir/lilyhome +cd $jaildir + +mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp +chmod a+w tmp + +cp -r -L $lilydir $lilyprefix +cp -L /bin/sh /bin/rm bin +cp -L /usr/bin/convert /usr/bin/gs usr/bin +cp -L /usr/share/fonts/truetype usr/share/fonts + +# Ahora la magia de copiar las bibliotecas +for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done | sh -s + +# Los archivos compartidos para ghostscript... + cp -L -r /usr/share/ghostscript usr/share +# Los archivos compartidos para ImageMagick + cp -L -r /usr/lib/ImageMagick* usr/lib + +### Ahora, suponiendo que tenemos test.ly en /mnt/lilyloop/lilyhome, +### deberíamos poder ejecutar: +### Observe que /$lilyprefix/bin/lilypond es un guión, que establece +### un valor para LD_LIBRARY_PATH : esto es crucial + /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly +@end example + +@c " keep quote signs balanced for context-sensitive editors + +@node Mensajes de error +@section Mensajes de error +@translationof Error messages + +@cindex error, mensajes de +@cindex mensajes de error + +Pueden aparecer distintos mensajes de error al compilar un archivo: + +@table @emph + +@item Advertencia +@cindex advertencia +Algo tiene un aspecto sospechoso. Si estamos pidiendo algo fuera de +lo común, entenderemos el mensaje y podremos ignorarlo. Sin embargo, +las advertencias suelen indicar que algo va mal con el archivo de +entrada. + +@item Error +@cindex error +Algo va claramente mal. El paso actual de procesamiento (análisis, +interpretación o formateo visual) se dará por terminado, pero el +siguiente paso se saltará. + +@item Error fatal +@cindex error fatal +@cindex fatal, error +Algo va claramente mal, y LilyPond no puede seguir. Rara vez sucede +esto. La causa más frecuente son las tipografías mal instaladas. + +@item Error de Scheme +@cindex traza de Scheme +@cindex llamadas, traza de +@cindex Scheme, error de +@cindex error de Scheme +Los errores que ocurren al ejecutar código de Scheme se interceptan +por parte del intérprete de Scheme. Si se está ejecutando con las +opciones @code{-V} o @code{--verbose} (prolijo) entonces se imprime +una traza de llamadas de la función ofensiva. + +@item Error de programación +@cindex error de programación +@cindex programación, error de +Ha habido algún tipo de inconsistencia interna. Estos mensajes de +error están orientados a ayudar a los programadores y a los +depuradores. Normalmente se pueden ignorar. En ocasiones aparecen en +cantidades tan grandes que pueden entorpecer la visión de otros +mensajes de salida. + +@item Abortado (volcado de core) +Esto señala un error de programación serio que ha causado la +interrupción abrupta del programa. Estos errores se consideran +críticos. Si se topa con uno, envíe un informe de fallo. +@end table + +@cindex error, formato de los mensajes de + +Se los errores y advertencias se pueden ligar a un punto del archivo +de entrada, los mensajes tienen la forma siguiente: + +@example +@var{archivo}:@var{línea}:@var{columna}: @var{mensaje} +@var{línea de entrada problemática} +@end example + +Se inserta un salto de línea en la línea problemática para indicar la +columna en que se encontró el error. Por ejemplo, + +@example +prueba.ly:2:19: error: no es una duración: 5 + @{ c'4 e' + 5 g' @} +@end example + +Estas posiciones son la mejor suposición de LilyPond sobre dónde se ha +producido el mensaje de error, pero (por su propia naturaleza) las +advertencias y errores se producen cuando ocurre algo inesperado. Si +no ve un error en la línea que se indica del archivo de entrada, trate +de comprobar una o dos líneas por encima de la posición indicada. + +Se ofrece más información sobre los errores en la sección @ref{Errores +comunes}. + +@node Errores comunes +@section Errores comunes +@translationof Common errors + +Las condiciones de error que se describen más abajo se producen con +frecuencia, aunque su causa no es obvia o fácil de encontrar. Una vez +se han visto y comprendido, se manejan sin problema. + + +@menu +* La música se sale de la página:: +* Aparece un pentagrama de más:: +* Error aparente en ../ly/init.ly:: +* Mensaje de error Unbound variable %:: +* Mensaje de error FT_Get_Glyph_Name:: +* Advertencia sobre que las afinidades del pentagrama sólo deben decrecer:: +@end menu + +@node La música se sale de la página +@unnumberedsubsec La música se sale de la página +@translationof Music runs off the page + +La música que se sale de la página por el margen derecho o que aparece +exageradamente comprimida está causada casi siempre por haber +introducido una duración incorrecta para una nota, produciendo que la +nota final de un compás se extienda más allá de la línea divisoria. +Esto no es inválido si la nota final de un compás no termina sobre la +línea divisoria introducida automáticamente, pues simplemente se +supone que la nota se solapa encima del siguiente compás. Pero si se +produce una larga secuencia tales notas solapadas, la música puede +aparecer comprimida o salirse de la página porque los saltos de línea +automáticos solamente se pueden insertar al final de compases +completos, es decir, aquellos en que todas las notas terminan antes de +o justo al final del compás. + +@warning{Una duración incorrecta puede hacer que se inhiban los saltos +de línea, lo que llevaría a una sola línea de música muy comprimida o +que se salga de la página.} + +La duración incorrecta se puede encontrar fácilmente si se utilizan +comprobaciones de compás, véase @ruser{Comprobación de compás y de +número de compás}. + +Si realmente queremos tener una serie de estos compases con notas +solapadas, debemos insertar una línea divisoria invisible donde +queramos el salto de línea. Para ver más detalles, consulte +@ruser{Barras de compás}. + + +@node Aparece un pentagrama de más +@unnumberedsubsec Aparece un pentagrama de más +@translationof An extra staff appears + +Si no se crean los contextos explícitamente con @code{\new} o con +@code{\context}, se crearán discretamente tan pronto como se encuentra +una instrucción que no se puede aplicar a un contexto existente. En +partituras sencillas, la creación automática de los contextos es útil, +y casi todos los ejemplos de los manuales de LilyPond se aprovechan de +esta simplificación. Pero ocasionalmente la creación discreta de +contextos puede hacer aflorar pentagramas o partituras nuevos e +inesperados. Por ejemplo, podría esperarse que el código siguiente +hiciera que todas las notas dentro del pentagrama siguiente estuvieran +coloreadas de rojo, pero de hecho el resultado son dos pentagramas, +permaneciendo el de abajo con las notas en el color negro +predeterminado. + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +Esto es así porque no existe ningún contexto @code{Staff} cuando se +procesa la instrucción override de sobreescritura, se crea uno +implícitamente y la sobreescritura se aplica a éste, pero entonces la +instrucción @code{\new Staff} crea un pentagrama nuevo y distinto, en +el que se colocan las notas. El código correcto para colorear todas +las notas de rojo es + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +Como segundo ejemplo, si una instrucción @code{\relative} se escribe +dentro de una instrucción @code{\repeat}, el resultado son dos +pentagramas, el segundo desplazado respecto al primero, porque la +instrucción @code{\repeat} genera dos bloques @code{\relative}, +cada uno de los cuales crea implícitamente bloques @code{Staff} y +@code{Voice}. + +@lilypond[quote,verbatim] +\repeat unfold 2 { + \relative c' { c4 d e f } +} +@end lilypond + +El problema se resuelve instanciando el contexto @code{Voice} +explícitamente: + +@lilypond[quote,verbatim] +\new Voice { + \repeat unfold 2 { + \relative c' { c4 d e f } + } +} +@end lilypond + + +@node Error aparente en ../ly/init.ly +@unnumberedsubsec Error aparente en @code{../ly/init.ly} +@translationof Apparent error in ../ly/init.ly + +Pueden aparecer varios mensajes de error extraños acerca de errores de +sintaxis en @file{../ly/init.ly} si el archivo de entrada no está +correctamente formado, por ejemplo si no contiene llaves o comillas +correctamente emparejados. + +El error más común es la falta de una llave de cierre, (@code{@}}), al +final de un bloque @code{score}. Aquí la solución es obvia: compruebe +que el bloque @code{score} está correctamente cerrado. La estructura +correcta de un archivo de entrada está descrita en @rlearning{Cómo +funcionan los archivos de entrada de LilyPond}. Usando un editor que +resalte automáticamente las llaves correspondientes es de mucha ayuda +para evitar estos errores. + +Una segunda causa frecuente es la falta de un espacio entre la última +sílaba de un bloque lyrics (de letra) y la llave de cierre, +(@code{@}}). Sin esta separación, se considera que la llave forma +parte de la sílaba. Siempre se aconseja asegurarse de que hay +espacios antes y después de @emph{todas} las llaves. Para conocer la +importancia de este asunto al utilizar letras de canciones, consulte +@ruser{Introducir la letra}. + +Este mensaje de error también puede aparecer si se omiten las comillas +de terminación (@code{"}). En este caso, un mensaje de error +adicional debería indicar un número de línea cercano al de aquella +donde está el error. Las comillas desbalanceadas estarán por lo +general una o dos líneas por encima. + + +@node Mensaje de error Unbound variable % +@unnumberedsubsec Mensaje de error Unbound variable % +@translationof Error message Unbound variable % + +Este mensaje de error aparece al final de los mensajes de la consola o +del archivo de registro junto a un mensaje @qq{GUILE señaló un error +...} cada vez que se llame a una rutina de Scheme que +(incorrectamente) contenga un comentario @emph{de LilyPond} en lugar +de un comentario @emph{de Scheme}. + +Los comentarios de LilyPond comienzan con un símbolo de porcentaje, +(@code{%}), y no se deben utilizar dentro de las rutinas de Scheme. +Los comentarios de Scheme comienzan con punto y coma, (@code{;}). + +@node Mensaje de error FT_Get_Glyph_Name +@unnumberedsubsec Mensaje de error FT_Get_Glyph_Name +@translationof Error message FT_Get_Glyph_Name + +Este mensaje de error aparece en la salida de la consola o en el +archivo log de registro si un archivo de entrada contiene un carácter +que no es ASCII y no se ha guardado en la codificación de caracteres +UTF-8. Para ver más detalles, consulte @ruser{Codificación del +texto}. + + +@node Advertencia sobre que las afinidades del pentagrama sólo deben decrecer +@unnumberedsubsec Advertencia sobre que las afinidades del pentagrama sólo deben decrecer +@translationof Warning staff affinities should only decrease + +Esta advertencia puede aparecer si no hay ningún pentagrama en la +salida impresa, por ejemplo si sólo hay un contexto @code{ChordName} y +un contexto @code{Lyrics} como en una hoja guía de acordes. Los +mensajes de advertencia se pueden evitar haciendo que uno de los +contextos se comporte como un pentagrama, insertando + +@example +\override VerticalAxisGroup #'staff-affinity = ##f +@end example + +@noindent +al comienzo. Para ver más detalles, consulte @qq{Espaciado de las +líneas que no son pautas} en @ruser{Espaciado vertical flexible dentro +de los sistemas}. diff --git a/Documentation/es/usage/suggestions.itely b/Documentation/es/usage/suggestions.itely new file mode 100644 index 0000000000..13a84a40be --- /dev/null +++ b/Documentation/es/usage/suggestions.itely @@ -0,0 +1,628 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033 + + 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 Sugerencias para escribir archivos de entrada +@chapter Sugerencias para escribir archivos de entrada +@translationof Suggestions for writing files + +En este momento está preparado para comenzar a escribir archivos de +LilyPond más grandes -- no sólo los pequeños ejemplos que aparecen en +el tutorial, sino piezas completas --. Pero ¿cómo debe proceder para +hacerlo? + +En la medida en que LilyPond entienda sus archivos y produzca la +salida que usted pretendía, realmente no importa mucho qué aspecto +tengan sus archivos. Sin embargo existen algunas otras cosas a tener +en cuenta cuando se escriben archivos de LilyPond. + +@itemize +@item ¿Qué ocurre si comete un fallo? La estructura de un archivo +de LilyPond puede hacer que ciertos errores se hagan más fáciles (o +más difíciles) de encontrar. + +@item ¿Qué ocurre si quiere compartir sus archivos con otras personas? +De hecho, ¿y si quiere alterar sus propios archivos después de algunos +años? Algunos archivos de LilyPond se comprenden a primera vista; +otros pueden tenerle rascándose la cabeza durante una hora. + +@item ¿Qué ocurre si quiere actualizar su archivo de LilyPond para poderlo +usar con una versión más reciente del programa? + +La sintaxis de la entrada se modifica de forma ocasional según +LilyPond se va perfeccionando. Casi todos los cambios se pueden hacer +de forma automática con @code{convert-ly}, pero algunos podrían +necesitar de una ayuda manual. Los archivos de LilyPond se pueden +estructurar para que sean más fáciles (o más difíciles) de actualizar. + +@end itemize + +@menu +* Sugerencias de tipo general:: +* Tipografiar música existente:: +* Proyectos grandes:: +* Solución de problemas:: +* Make y los Makefiles:: +@end menu + + +@node Sugerencias de tipo general +@section Sugerencias de tipo general +@translationof General suggestions + +Presentamos algunas sugerencias que le pueden servir de ayuda para evitar +o corregir problemas: + +@itemize +@item @strong{Incluya los números de @code{\version} en todos los archivos}. Dése cuenta de que todas las +plantillas contienen información sobre la @code{\version}. Le +recomendamos mucho que siempre incluya la @code{\version}, sin +importar cuán pequeño pueda ser su archivo. Desde la experiencia +personal podemos decirle que es bastante frustrante intentar recordar +el número de versión de LilyPond que estaba usando hace unos años. +@code{convert-ly} requiere que declare qué versión de LilyPond +utilizó. + +@item @strong{Incluya comprobaciones}: @ruser{Comprobación de compás y de número de compás}, +@ruser{Comprobación de octava}. Si incluye comprobaciones de vez en cuando, en +caso de que cometa un error podrá localizarlo mucho más rápidamente. +¿Con qué frecuencia es @q{de vez en cuando}? Depende de la +complejidad de la música. Para una música muy sencilla, quizá tan +sólo una o dos veces. Para una música muy compleja, quizá a cada +compás. + +@item @strong{Un compás por cada línea de texto}. Si hay algo muy complicado, ya sea +en la propia música o en la salida que desea producir, a menudo +conviene escribir un solo compás por cada línea. El ahorro en espacio +de pantalla que se obtiene al amontonar ocho compases por línea no +merece la pena si luego tiene que @q{depurar} los archivos. + +@item @strong{Comente los archivos}. Utilice o números de compás (de vez en cuando) +o referencias a temas musicales (@q{segundo tema de los violines,} +@q{cuarta variación,} etc.). Puede que no necesite comentarios cuando +introduce una pieza por vez primera, pero si quiere volver a ella o +modificar algo al cabo de dos o tres años, y también si le pasa la +fuente a un amigo, será todo un desafío determinar sus intenciones o +de qué manera estaba estructurado el archivo si no le añadió los +comentarios. + +@item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una +falta de equilibrio en el número de @code{@{} y @code{@}}. + +@item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones +e identificadores. Si especifica @code{c4 d e} al principio de una +frase (en lugar de sólo @code{c d e}) se puede ahorrar problemas si +reelabora la música más tarde. + +@item @strong{Separe los trucos} de las definiciones musicales. Consulte +@rlearning{Ahorrar tecleo mediante variables y funciones} y +@rlearning{Hojas de estilo}. + +@end itemize + + +@node Tipografiar música existente +@section Tipografiar música existente +@translationof Typesetting existing music + +Si está introduciendo música a partir de una partitura existente (es +decir, tipografiando una hoja de música ya impresa), + +@itemize + +@item Introduzca en LilyPond un sistema del manuscrito, o copia física, de +cada vez (pero mantenga la práctica de escribir un compás por línea de +texto), y compruebe cada sistema cuando lo haya terminado. Puede usar +las propiedades @code{showLastLength} o @code{showFirstLength} para +acelerar el proceso (véase @ruser{Saltar la música corregida}). + +@item Defina @code{mBreak = @{ \break @}} e inserte @code{\mBreak} +dentro del archivo de entrada donde el manuscrito tenga un saldo de +línea. De esta forma le resultará mucho más fácil comparar la música +de LilyPond con la original. Cuando haya terminado de revisar su +partitura podrá definir @code{mBreak = @{ @}} para quitar todos esos +saltos de línea. Así permitirá a LilyPond colocar los saltos donde +éste lo estime más oportuno. + +@item Al escribir una parte para un instrumento transpositor dentro de una +variable, se recomienda que las notas estén envueltas dentro de + +@example +\transpose c altura-natural @{...@} +@end example + +@noindent +(donde @code{altura-natural} es la afinación natural del instrumento) +de forma que la música dentro de la variable esté realmente en Do +mayor. Después podemos volver a transportarlas en sentido inverso +cuando se utiliza la variable, si es necesario, pero quizá no queramos +hacerlo (p.ej., al imprimir una partitura en afinación de concierto, +al convertir una parte de trombón de clave de Sol a clave de Fa, +etc.). Es menos probable cometer errores en los transportes si toda +la música que está dentro de las variables se encuentra en un tono +coherente. + +Asimismo, haga los transportes exclusivamente hacia o desde Do mayor. +Esto significa que aparte de ésta, las únicas tonalidades que usaremos +serán los tonos de afinación de los instrumentos transpositores: bes +para una trompeta en Si bemol, aes para un clarinete en La bemol, etc. + +@end itemize + + + +@node Proyectos grandes +@section Proyectos grandes +@translationof Large projects + +Al trabajar en proyectos grandes se hace esencial tener una estructura +clara en los archivos de LilyPond: + +@itemize + +@item @strong{Utilice un identificador para cada voz}, con un mínimo de +estructura dentro de la definición. La estructura de la sección +@code{\score} es la que cambiará con mayor probabilidad; por contra, es +extremadamente improbable que cambie la definición de @code{violin} en +versiones nuevas de LilyPond. + +@example +violin = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violin + @} + @} +@} +@end example + +@item @strong{Separe los trucos de las definiciones musicales}. +Ya se mencionó con anterioridad, pero para proyectos grandes es vital. +Quizá tengamos que cambiar la definición de @code{fluegop}, pero en ese +caso sólo lo tendremos que hacer una vez, y aún podremos evitar tocar +nada dentro de @code{violin}. + +@example +fluegop = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fluegop c'8. e16 +@} +@end example + +@end itemize + + +@node Solución de problemas +@section Solución de problemas +@translationof Troubleshooting + +Antes o después escribirá un archivo que LilyPond no podrá compilar. +Los mensajes que LilyPond proporciona pueden ayudarle a encontrar el +error, pero en muchos casos tendrá que llevar a cabo algún tipo de +investigación para determinar el origen del problema. + +Las herramientas más poderosas para este cometido son el comentario de +una sola línea (indicado por @code{%}) y el comentario de bloque +(indicado por @code{%@{ ... %@}}). Si no sabe dónde está el problema, +comience convirtiendo grandes secciones del archivo de entrada en un +comentario. Después de eliminar una sección convirtiéndola en un +comentario, pruebe a compilar el archivo otra vez. Si funciona, +entonces el problema debía estar en la porción que había eliminado. +Si no funciona, continúe eliminando material (transformándolo en +comentarios) hasta que tenga algo que funcione. + +En un caso extremo podría terminar con sólo + +@example +\score @{ + << + % \melodia + % \armonia + % \bajo + >> + \layout@{@} +@} +@end example + +@noindent +(en otras palabras: un archivo sin música) + +Si ocurre esto, no abandone. Descomente un trozo pequeño -- digamos +la parte del bajo -- y observe si funciona. Si no es así, transforme +en comentarios toda la música del bajo (pero deje el @code{\bajo} de +la sección @code{\score} no comentado. + +@example +bajo = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +Ahora empiece poco a poco descomentando cada vez más fracciones de la +parte del @code{bajo} hasta que encuentre la línea del problema. + +Otra técnica de depuración muy útil es la construcción de +@rweb{Ejemplos mínimos}. + + +@node Make y los Makefiles +@section Make y los Makefiles +@translationof Make and Makefiles + +@cindex make, archivos de +@cindex make + +Posiblemente todas las plataformas en que puede correr LilyPond, +contemplan una posibilidad de software llamada @code{make}. Este +programa lee un archivo especial llamado @code{Makefile} que define +las relaciones de dependencia entre los archivos y qué instrucciones +necesitamos dar al sistema operativo para producir un archivo a partir +de otro. Por ejemplo, el archivo de make detallaría cómo obtener +@file{balada.pdf} y @file{balada.midi} a partir de @file{balada.ly} +mediante la ejecución de Lilypond. + +Existen ocasiones en las que es buena idea crear un @code{Makefile} +para nuestro proyecto, bien sea por nuestra propia comodidad o como +cortesía para otros que posiblemente tengan acceso a nuestros archivos +fuente. Esto es cierto para proyectos muy grandes con muchos archivos +de inclusión y distintas opciones de salida (p.ej. partitura completa, +particellas, partitura del director, reducción para piano, etc.), o +para proyectos que requieren instrucciones difíciles para montarlas +(como los proyectos de @code{lilypond-book}). La complejidad y +flexibilidad de los Makefiles varía enormemente según las necesidades +y la habilidad de los autores. El programa GNU Make viene instalado +en las distribuciones de GNU/Linux y en MacOS X, y también existe para +Windows. + +Consulte el @strong{Manual de GNU Make} para ver todos los detalles +sobre el uso de @code{make}, pues lo que sigue a continuación ofrece +solamente una pincelada de todo lo que es capaz de hacer. + +Las instrucciones que definen las reglas en un archivo de make +difieren en función de la plataforma; por ejemplo, las distintas +formas de Linux y MacOS usan @code{bash}, mientras que Windows usa +@code{cmd}. Observeque en MacOS X, tenemos que configurar el sistema +para que utilice el intérprete de órdenes. A continuación presentamos +algunos makefiles de ejemplo, con versiones tanto para Linux/MacOS +como para Windows. + +El primer ejemplo es para una obra orquestal en cuatro movimientos con +la estructura de directorios siguiente: + +@example +Sinfonia/ +|-- MIDI/ +|-- Makefile +|-- Notas/ +| |-- cello.ily +| |-- cifras.ily +| |-- trompa.ily +| |-- oboe.ily +| |-- trioCuerdas.ily +| |-- viola.ily +| |-- violinUno.ily +| `-- violinDos.ily +|-- PDF/ +|-- Particellas/ +| |-- sinfonia-cello.ly +| |-- sinfonia-trompa.ly +| |-- sinfonia-oboes.ly +| |-- sinfonia-viola.ly +| |-- sinfonia-violinUno.ly +| `-- sinfonia-violinDos.ly +|-- Partituras/ +| |-- sinfonia.ly +| |-- sinfoniaI.ly +| |-- sinfoniaII.ly +| |-- sinfoniaIII.ly +| `-- sinfoniaIV.ly +`-- sinfoniaDefs.ily +@end example + +Los archivos @file{.ly} de los directorios @code{Partituras} y +@code{Particellas} obtienen las notas de archivos @file{.ily} que están en +el directorio @code{Notas}: + +@example +%%% principio del archivo "sinfonia-cello.ly" +\include ../definiciones.ily +\include ../Notas/cello.ily +@end example + +El makefile tendrá los objetivos de @code{partitura} (la pieza +completa en todo su esplendor), @code{movimientos} (partitura completa +de los movimientos individuales) y @code{particellas} (partes +individuales para los atriles). También existe un objetivo +@code{archivo} que produce un tarball de los archivos fuente, adecuado +para compartirlo a través de la web o por correo electrónico. A +continuación presentamos el makefile para GNU/Linux o MacOS X. Se +debe guardar con el nombre exacto @code{Makefile} el el directorio +superior del proyecto: + +@warning{Cuando se define un objetivo o una regla de patrón, las +líneas siguientes deben comenzar con tabuladores, no con espacios.} + +@example +# nombre principal de los archivos de salida +nombre = sinfonia +# determinar cuántos procesadores existen +CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` +# La instrucción para ejecutar lilypond +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click -djob-count=$(CPU_CORES) + +# Los sufijos utilizados en este Makefile. +.SUFFIXES: .ly .ily .pdf .midi + +# Los archivos de entrada y salida se buscan dentro de los directorios relacionados en +# la variable VPATH. Todos esllos son subdirectorios del directorio +# en curso (dado por la variable de GNU make `CURDIR'). +VPATH = \ + $(CURDIR)/Partituras \ + $(CURDIR)/PDF \ + $(CURDIR)/Particellas \ + $(CURDIR)/Notas + +# La regla de patrón para crear archivos PDF y MIDI a partir de un archivo de entrada LY. +# Los archivos de salida .pdf se colocan en el subdirectorio `PDF', y los archivos +# .midi van al subdirectorio `MIDI'. +%.pdf %.midi: %.ly + $(LILY_CMD) $<; \ # esta línea comienza con un salto de tabulación + if test -f "$*.pdf"; then \ + mv "$*.pdf" PDF/; \ + fi; \ + if test -f "$*.midi"; then \ + mv "$*.midi" MIDI/; \ + fi + +notas = \ + cello.ily \ + trompa.ily \ + oboe.ily \ + viola.ily \ + violinUno.ily \ + violinDos.ily + +# Dependencias de los movimientos. +$(nombre)I.pdf: $(nombre)I.ly $(notas) +$(nombre)II.pdf: $(nombre)II.ly $(notas) +$(nombre)III.pdf: $(nombre)III.ly $(notas) +$(nombre)IV.pdf: $(nombre)IV.ly $(notas) + +# Dependencias de la partitura completa. +$(nombre).pdf: $(nombre).ly $(notas) + +# Dependencias de las particellas. +$(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily +$(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily +$(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily +$(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily +$(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily +$(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily + +# Teclee `make partitura' para generer la partitura completa de los cuatro +# movimientos como un archivo único. +.PHONY: partitura +partitura: $(nombre).pdf + +# Teclee `make particellas' para generar todas las particellas. +# Teclee `make fulanito.pdf' para generar la particella del instrumento `fulanito'. +# Ejemplo: `make sinfonia-cello.pdf'. +.PHONY: particellas +particellas: $(nombre)-cello.pdf \ + $(nombre)-violinUno.pdf \ + $(nombre)-violinDos.pdf \ + $(nombre)-viola.pdf \ + $(nombre)-oboes.pdf \ + $(nombre)-trompa.pdf + +# Teclee `make movimientos' para generar los archivos de los +# cuatro movimientos de forma separada. +.PHONY: movimientos +movimientos: $(nombre)I.pdf \ + $(nombre)II.pdf \ + $(nombre)III.pdf \ + $(nombre)IV.pdf + +all: partitura particellas movimientos + +archivo: + tar -cvvf stamitz.tar \ # esta línea comienza con un salto de tabulación + --exclude=*pdf --exclude=*~ \ + --exclude=*midi --exclude=*.tar \ + ../Stamitz/* +@end example + + +Existen ciertas complicaciones en la plataforma Windows. Después de +descargar e instalar el programa GNU Make para Windows, debemos +configurar la ruta adecuada en las variables de entorno del sistema de +forma que el shell del DOS pueda encontrar el programa Make. Para +hacerlo, pulse con el botón derecho sobre "Mi PC", elija +@code{Propiedades} y @code{Avanzadas}. Pulse sobre @code{Variables de +entorno}, y luego en la pestaña @code{Variables del sistema}, +seleccione @code{Ruta}, pulse sobre @code{editar} y añada la ruta al +archivo ejecutable de GNU Make, con lo que quedará algo parecido a lo +siguiente: + +@example +C:\Archivos de programa\GnuWin32\bin +@end example + +El makefile en sí debe modificarse para que maneje distintas +instrucciones del shell y para que pueda tratar con los espacios que +aparecen en el nombre de algunos directorios del sistema +predeterminados. El objetivo @code{archivo} se elimina porque Windows +no tiene la instrucción @code{tar}, y Windows tiene también una +extensión predeterminada distinta para los archivos MIDI. + + +@example +## VERSIÓN PARA WINDOWS +## +nombre = sinfonia +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click \ + -djob-count=$(NUMBER_OF_PROCESSORS) + +#obtener el nombre 8.3 de CURDIR (rodeo para los espacios en PATH) +workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ + do @@echo %%~sb) + +.SUFFIXES: .ly .ily .pdf .mid + +VPATH = \ + $(workdir)/Partituras \ + $(workdir)/PDF \ + $(workdir)/Particellas \ + $(workdir)/Notas + +%.pdf %.mid: %.ly + $(LILY_CMD) $< # esta línea comienza con un salto de tabulación + if exist "$*.pdf" move /Y "$*.pdf" PDF/ # comienzo con tab + if exist "$*.mid" move /Y "$*.mid" MIDI/ # comienzo con tab + +notas = \ + cello.ily \ + cifras.ily \ + trompa.ily \ + oboe.ily \ + trioCuerdas.ily \ + viola.ily \ + violinUno.ily \ + violinDos.ily + +$(nombre)I.pdf: $(nombre)I.ly $(notas) +$(nombre)II.pdf: $(nombre)II.ly $(notas) +$(nombre)III.pdf: $(nombre)III.ly $(notas) +$(nombre)IV.pdf: $(nombre)IV.ly $(notas) + +$(nombre).pdf: $(nombre).ly $(notas) + +$(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily +$(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily +$(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily +$(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily +$(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily +$(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily + +.PHONY: partitura +partitura: $(nombre).pdf + +.PHONY: particellas +particellas: $(nombre)-cello.pdf \ + $(nombre)-violinUno.pdf \ + $(nombre)-violinDos.pdf \ + $(nombre)-viola.pdf \ + $(nombre)-oboes.pdf \ + $(nombre)-trompa.pdf + +.PHONY: movimientos +movimientos: $(nombre)I.pdf \ + $(nombre)II.pdf \ + $(nombre)III.pdf \ + $(nombre)IV.pdf + +all: partitura particellas movimientos +@end example + + +El Makefile siguiente es para un documento de @command{lilypond-book} +hecho en LaTeX. Este proyecto tiene un índice, que requiere ejecutar +la instrucción @command{latex} dos veces para actualizar los enlaces. +Todos los archivos de salida se almacenan en el directorio +@code{salida} para los documentos .pdf y en el directorio +@code{salidahtml} para la salida en formato html. + +@example +SHELL=/bin/sh +NOMBRE=miproyecto +DIR_SALIDA=salida +DIR_WEB=salidahtml +VISOR=acroread +NAVEGADOR=firefox +LILYBOOK_PDF=lilypond-book --output=$(DIR_SALIDA) --pdf $(NOMBRE).lytex +LILYBOOK_HTML=lilypond-book --output=$(DIR_WEB) $(NOMBRE).lytex +PDF=cd $(DIR_SALIDA) && pdflatex $(NOMBRE) +HTML=cd $(DIR_WEB) && latex2html $(NOMBRE) +INDICE=cd $(DIR_SALIDA) && makeindex $(NOMBRE) +VISTA_PREVIA=$(VISOR) $(DIR_SALIDA)/$(NOMBRE).pdf & + +all: pdf web guardar + +pdf: + $(LILYBOOK_PDF) # comienza con un tab + $(PDF) # comienza con un tab + $(INDICE) # comienza con un tab + $(PDF) # comienza con un tab + $(VISTA_PREVIA) # comienza con un tab + +web: + $(LILYBOOK_HTML) # comienza con un tab + $(HTML) # comienza con un tab + cp -R $(DIR_WEB)/$(NOMBRE)/ ./ # comienza con un tab + $(NAVEGADOR) $(NOMBRE)/$(NOMBRE).html & # comienza con un tab + +guardar: pdf + cp $(DIR_SALIDA)/$(NOMBRE).pdf $(NOMBRE).pdf # comienza con un tab + +clean: + rm -rf $(DIR_SALIDA) # comienza con un tab + +web-clean: + rm -rf $(DIR_WEB) # comienza con un tab + +archivo: + tar -cvvf miproyecto.tar \ # comienza con un tab + --exclude=salida/* \ + --exclude=salidahtml/* \ + --exclude=miproyecto/* \ + --exclude=*midi \ + --exclude=*pdf \ + --exclude=*~ \ + ../MiProyecto/* +@end example + +HACER: conseguir que funcione en Windows + +El makefile anterior no funciona en Windows. Una alternativa para los +usuarios de Windows sería crear un archivo de lotes sencillo que +contenga las instrucciones de montaje. Esto no rastrea las +dependencias en la manera en que lo hace un makefile, pero al menos +reduce el proceso de construcción a una sola instrucción. Guarde el +código siguiente como @command{montaje.bat} o @command{montaje.cmd}. +El archivo de lotes se puede ejecutar en la línea de comandos del DOS +o simplemente haciendo doble click sobre su icono. + +@example +lilypond-book --output=salida --pdf miproyecto.lytex +cd salida +pdflatex miproyecto +makeindex miproyecto +pdflatex miproyecto +cd .. +copy salida\miproyecto.pdf MiProyecto.pdf +@end example + + +@seealso +Manual de utilización del programa: +@rprogram{Configuración para MacOS X}, +@rprogram{Utilización desde la línea de órdenes}, +@rprogram{LilyPond-book} diff --git a/Documentation/es/usage/updating.itely b/Documentation/es/usage/updating.itely new file mode 100644 index 0000000000..9c06abb33e --- /dev/null +++ b/Documentation/es/usage/updating.itely @@ -0,0 +1,278 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- + +@ignore + Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033 + + 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 Actualizar ficheros con convert-ly +@chapter Actualizar ficheros con @command{convert-ly} +@translationof Updating files with convert-ly + +@cindex actualización de un archivo de LilyPond +@cindex convert-ly + +La sintaxis del lenguaje de entrada de LilyPond se modifica de forma +habitual para simplificarla o mejorarla de distintas maneras. Como +efecto secundario, el intérprete de LilyPond a menudo ya no es +compatible con los archivos de entrada antiguos. Para poner remedio a +esto se puede utilizar el programa @command{convert-ly} para manejar +casi todos los cambios de sintaxis entre versiones de LilyPond. + +@menu +* ¿Por qué cambia la sintaxis?:: +* Invocar convert-ly:: +* Opciones de la línea de órdenes para convert-ly:: +* Problemas con convert-ly:: +* Conversiones manuales:: +@end menu + + +@node ¿Por qué cambia la sintaxis? +@section ¿Por qué cambia la sintaxis? +@translationof Why does the syntax change? + +@cindex convert-ly +@cindex actualizar archivos de entrada antiguos + +La sintaxis de la entrada de LilyPond cambia de manera ocasional. A +medida que el propio LilyPond mejora, la sintaxis (el lenguaje de la +entrada) se modifica en consonancia. A veces estos cambios se hacen +para conseguir que la entrada sea más fácil de leer y escribir, y +otras veces estos cambios son para dar cabida a nuevas funcionalidades +de LilyPond. + +Por ejemplo, se supone que todos los nombres de las propiedades de +@code{\paper} y de @code{\layout} están escritos en la dorma +@code{primero-segundo-tercero}. Sin embargo, en la versión 2.11.60, +observamos que la propiedad @code{printallheaders} no seguía esta +convención. ¿Deberíamos dejarla como está (confundiendo a los nuevos +usuarios que tienen que tratar con un formato de entrada +inconsistente), o cambiarla (fastidiando a los usuarios con +experiencia que tienen partituras antiguas)? En este caso, decidimos +cambiar el nombre a @code{print-all-headers}. Afortunadamente, este +cambio se puede automatizar con nuestra herramienta +@command{convert-ly}. + +Sin embargo, lamentablemente @code{convert-ly} no puede tratar todos +los cambios en la entrada. Por ejemplo, en la versión 2.4 y +anteriores de LilyPond, los acentos y las letras no inglesas se +introducían utilizando LaTeX: por ejemplo, @code{No\"el} (que +significa @q{Navidad} en francés). En LilyPond 2.6 y siguientes, el +carácter especial @code{ë} debe introducirse directamente en el +archivo de LilyPond como un carácter UTF-8. @code{convert-ly} no +puede cambiar todos los caracteres especiales de LaTeX a caracteres de +UTF-8; tendrá que actualizar manualmente sus archivos de LilyPond +antiguos. + + +@node Invocar convert-ly +@section Invocar @command{convert-ly} +@translationof Invoking convert-ly + +@command{convert-ly} utiliza los enunciados @code{\version} de los +archivos de entrada para detectar el número de versión antiguo. En +casi todos los casos, para actualizar el archivo de entrada basta con +ejecutar + +@example +convert-ly -e miarchivo.ly +@end example + +@noindent +dentro del directorio que contiene el archivo. Con esto se actualiza +@file{miarchivo.ly} @emph{in situ} y se preserva el archivo original +@file{miarchivo.ly~}. + +@warning{@command{convert-ly} siempre convierte hasta el último cambio +de sintaxis que es capaz de manejar. Esto significa que el número de +@code{\version} que aparece en el archivo convertido suele ser +inferior al número de versión del propio programa +@command{convert-ly}.} + +Para convertir de una vez todos los archivos de entrada que hay en un +directorio, use + +@example +convert-ly -e *.ly +@end example + +De forma alternativa, si queremos especificar un nombre distinto para +el archivo actualizado, preservando el archivo original con el mismo +nombre, haga + +@example +convert-ly miarchivo.ly > minuevoarchivo.ly +@end example + +El programa imprimirá una relación de los números de versión para los +que se han hecho conversiones. Si no se imprime ningún número de +versión, el archivo ya está actualizado. + +@noindent +Los usuarios de MacOS@tie{}X pueden ejecutar esta instrucción bajo el +menú @code{Compilar > Actualizar sintaxis}. + +Los usuarios de Windows deben introducir esta instrucción en una +ventana del terminal del sistema, que se encuentra por lo general bajo +@code{Inicio > Accesorios > Símbolo del sistema}. + + +@node Opciones de la línea de órdenes para convert-ly +@section Opciones de la línea de órdenes para @command{convert-ly} +@translationof Command line options for convert-ly + + +En general, el programa se invoca de la manera siguiente: + +@example +convert-ly [@var{opción}]@dots{} @var{archivo}@dots{} +@end example + + +Se pueden dar las siguientes opciones: + +@table @code +@item -e,--edit +Aplicar las conversiones directamente al archivo de entrada, +modificándolo in situ. + +@item -f,--from=@var{versión_de_origen} +Establece la versión desde la que convertir. Si no aparece esta +opción, @command{convert-ly} tratará de adivinarla, basándose en el +enunciado @code{\version} del archivo. Ejemplo: @code{--from=2.10.25} + +@item -n,--no-version +Normalmente @command{convert-ly} añade un indicador @code{\version} a +la salida. La especificación de esta opción lo suprime. + +@item -s, --show-rules +Mostrar todas las conversiones conocidas y salir. + +@item --to=@var{versión_final} +Fijar la versión de destino de la conversión. De forma predeterminada +se convierte a la última versión disponible. + +@item -h, --help +Imprimir la ayuda de la utilización. +@end table + +Para actualizar fragmentos de LilyPond en archivos de texinfo, use + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +Para ver los cambios en la sintaxis de LilyPond entre dos versiones +dadas, use + +@example +convert-ly --from=... --to=... -s +@end example + + +@node Problemas con convert-ly +@section Problemas con @code{convert-ly} +@translationof Problems with convert-ly + +Al ejecutar convert-ly en una ventana del Símbolo del Sistema bajo +Windows sobre un archivo que tiene espacios en el nombre o en la ruta, +es necesario encerrar todo el nombre del archivo de entrada con tres +(!) pares de comillas: + +@example +convert-ly """D:/Mis partituras/Oda.ly""" > "D:/Mis partituras/nueva Oda.ly" +@end example + +Si la orden simple @command{convert-ly -e *.ly} no funciona porque la +instrucción expandida se hace muy larga, en vez de ello la orden +@command{convert-ly} se puede poner dentro de un bucle. Este ejemplo +para UNIX actualiza todos los documentos @file{.ly} del directorio +actual + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +En la ventana del terminal de órdenes de Windows, la instrucción +correspondiente es + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +No se manejan todos los cambios en el lenguaje. Sólo se puede +especificar una opción de salida. La actualización automática de +Scheme y los interfaces Scheme de LilyPond es bastante improbable; +prepárese para trucar el código de Scheme a mano. + +@node Conversiones manuales +@section Conversiones manuales +@translationof Manual conversions + +En teoría, un programa como @command{convert-ly} debería poder tratar +cualquier cambio en la sintaxis. Después de todo, un programa de +ordenador interpreta las versiones antigua y nueva, por lo que otro +programa de ordenador podría traducir un archivo al otro@footnote{Al +menos, esto es posible en cualquier archivo de LilyPond que no +contenga Scheme. Si hay Scheme dentro del archivo, contiene un +lenguaje Turing-completo, y nos encontramos con el famoso @qq{Problema +de la parada} en informática.}. + +Sin embargo, el proyecto LilyPond cuenta con unos recursos limitados: +no todas las conversiones se efectúan automáticamente. A continuación +aparece una lista de los problemas conocidos. + + +@verbatim +1.6->2.0: + No siempre convierte el bajo cifrado correctamente, específicamente cosas como {< +>}. El comentario de Mats sobre cómo solventar el problema: + Para poder ejecutar convert-ly + sobre él, primero sustituí todas las apariciones de '{<' a algo mudo como '{#' + y de forma similar sustituí '>}' con '&}'. Después de la conversión, pude + volver a cambiarlos de '{ #' a '{ <' y de '& }' a '> }'. + No convierte todos los marcados de texto correctamente. En sintaxis antigua, + se podían agrupar varios marcados entre paréntesis, p.ej. + -#'((bold italic) "cadena") + Esto se convierte incorrectamente en + -\markup{{\bold italic} "cadena"} + en vez del correcto + -\markup{\bold \italic "cadena"} +2.0->2.2: + No maneja \partcombine + No hace \addlyrics => \lyricsto, esto rompe algunas partituras con varias estrofas. +2.0->2.4: + \magnify no se cambia por \fontsize. + - \magnify #m => \fontsize #f, donde f = 6ln(m)/ln(2) + remove-tag no se cambia. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number no se cambia. + - first-page-number no => print-first-page-number = ##f + Los saltos de línea en las cadenas de cabecera no se convierten. + - \\\\ como salto de línea en las cadenas de \header => \markup \center-align < + "Primera línea" "Segunda línea" > + Los terminadores de crescendo y decrescendo no se convierten. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (usado en \set Staff.VoltaBracket = \turnOff) no se convierte +adecuadamente. +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } se tendría que convertir en: + \markup{ \center-align {\line { ... }} } + pero ahora, falta el \line. +2.4->2.6 + Los caracteres especiales de LaTeX como $~$ en el texto no se convierten a UTF8. +2.8 + \score{} ahora debe empezar con una expresión musical. Cualquier otra cosa + (en particular, \header{}) debe ir después de la música. +@end verbatim + + diff --git a/Documentation/es/user/GNUmakefile b/Documentation/es/user/GNUmakefile deleted file mode 100644 index 4a3d585310..0000000000 --- a/Documentation/es/user/GNUmakefile +++ /dev/null @@ -1,4 +0,0 @@ -ISOLANG = es -depth = ../../.. -LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-user -include $(depth)/make/stepmake.make diff --git a/Documentation/es/user/ancient.itely b/Documentation/es/user/ancient.itely deleted file mode 100644 index 586a2d7265..0000000000 --- a/Documentation/es/user/ancient.itely +++ /dev/null @@ -1,2519 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Ancient notation -@section Ancient notation - -@lilypondfile[quote]{ancient-headword.ly} - -@cindex Vaticana, Editio -@cindex Medicaea, Editio -@cindex hufnagel -@cindex Petrucci -@cindex mensural - -@menu -* Overview of the supported styles:: -* Ancient notation---common features:: -* Typesetting mensural music:: -* Typesetting Gregorian chant:: -* Working with ancient music---scenarios and solutions:: -@end menu - -Entre las formas en que está contemplada la notación antigua se -encuentra la posibilidad de tipografiar notación mensural y canto -gregoriano. Se puede acceder a estas funcionalidades mediante la -modificación de propiedades de estilo de objetos gráficos como la -cabeza de las notas o los silencios, o bien mediante la utilización de -uno de los contextos predefinidos para la notación mensural o -gregoriana. - -Muchos objetos gráficos, como la cabeza y el corchete de las figuras, -las alteraciones, la indicación de compás y los silencios ofrecen una -propiedad @code{style} (estilo), que se puede cambiar para emular -varios estilos diferentes de notación antigua. Véase - -@itemize -@item @ref{Mensural note heads}, -@item @ref{Mensural accidentals and key signatures}, -@item @ref{Mensural rests}, -@item @ref{Mensural clefs}, -@item @ref{Gregorian clefs}, -@item @ref{Mensural flags}, -@item @ref{Mensural time signatures}. -@end itemize - -Ciertos conceptos de notación se incluyen específicamente para la -notación antigua: - -@itemize -@item @ref{Custodes}, -@item @ref{Divisiones}, -@item @ref{Ligatures}. -@end itemize - -@node Overview of the supported styles -@subsection Overview of the supported styles - -Están disponibles tres estilos para la composición tipográfica del -canto gregoriano: - -@itemize -@item @emph{Editio Vaticana} -es un estilo completo para canto gregoriano, que sigue la apariencia -de las ediciones de Solesmes, los libros de canto oficiales del -Vaticano desde 1904. Lilypond contempla todos los signos de notación -que se utilizan en este estilo, entre ellos las ligaduras, -@emph{custodias} y símbolos especiales como el quilisma y el oriscus. - -@cindex Solesmes -@cindex Vaticana, Editio - -@item El estilo @emph{Editio Medicaea} -ofrece ciertas funcionalidades que se usan en las ediciones Medicaea -(o de Ratisbona) que se usaban con anterioridad a las ediciones de -Solesmes. Las diferencias más significativas con respecto al estilo -@emph{Vaticana} son las claves, que tienen trazos descendentes, y la -cabeza de las figuras, que son cuadradas y regulares. - -@cindex Ratisbona, Editio -@cindex Medicaea, Editio - -@item El estilo @emph{Hufnagel} (en @qq{uña de herradura}) o @emph{gótico} -reproduce el estilo de escritura en los manuscritos de canto -medievales de Alemania y Centro Europa. Recibe el nombre de la forma -de la nota básica (la @emph{virga}), que parece una pequeña uña. -@cindex hufnagel -@end itemize - -Tres estilos emulan la apariencia de los manuscritos y ediciones -impresas de música mensural tardomedievales y renacentistas: - -@itemize -@item El estilo @emph{Mensural} -se asemeja bastante al estilo de escritura utilizado en los -manuscritos tardomedievales y renacentistas tempranos, con la cabeza -de sus figuras en forma de rombo pequeñas y estrechas, y los silencios -que imitan un estilo dibujado a mano. - -@cindex mensural - -@item El estilo @emph{Neomensural} -es una versión modernizada y estilizada del anterior: la cabeza de las -figuras es más ancha y los silencios están formados por trazos -rectilíneos. Este estilo está particularmente indicado, p.ej., para -los @emph{incipits} de transcripciones de fragmentos de música -mensural. - -@cindex neomensural - -@item El estilo @emph{Petrucci} -recibe su nombre de Ottaviano Petrucci (1466-1539), el primer impresor -en utilizar tipos móviles para la música (en su @emph{Harmonice -musices odhecaton}, 1501). Este estilo utiliza para las figuras una -cabeza más grande que los otros estilos mensurales. - -@cindex Petrucci - -@end itemize - -@emph{Baroque} y @emph{Classical} no son estilos completos pero -difieren del estilo predeterminado solamente en ciertos detalles: -algunas cabezas de nota (Baroque) y el silencio de negra (Classical). - -Sólo el estilo mensural tiene alternativas para todos los aspectos de -la notación. Así, no existen silencios ni corchetes en los estilos -gregorianos, pues estos símbolos no se usan en la notación del canto -llano, y el estilo Petrucci no posee corchetes ni alteraciones por sí -mismo. - -Cada elemento de la notación se puede cambiar independientemente de -los otros, y así podemos usar corchetes mensurales, cabezas de -petrucci, silencios de classical y claves de vaticana en la misma -pieza, si queremos. - -@node Ancient notation---common features -@subsection Ancient notation---common features - -@menu -* Pre-defined contexts:: -* Ligatures:: -* Custodes:: -* Figured bass support:: -@end menu - - -@node Pre-defined contexts -@unnumberedsubsubsec Pre-defined contexts - -Para el canto gregoriano y la notación mensural, están a nuestra -disposición contextos predefinidos de voz y de pauta, que establecen -todos los símbolos de notación a unos valores adecuados para estos -estilos. Si nos satisfacen estos valores predeterminados, podemos a -continuación introducir directamente las notas sin la necesidad de -preocuparnos de los detalles sobre cómo personalizar un contexto. -Véanse uno de los contextos predefinidos @code{VaticanaVoice}, -@code{VaticanaStaff}, @code{MensuralVoice}, y -@code{MensuralStaff}. - -@itemize -@item @ref{Gregorian chant contexts}, -@item @ref{Mensural contexts}. -@end itemize - - -@node Ligatures -@unnumberedsubsubsec Ligatures - -@cindex Ligatures - -@c TODO: Should double check if I recalled things correctly when I wrote -@c down the following paragraph by heart. - -Una ligadura es un símbolo gráfico que representa al menos dos notas -distintas. Las ligaduras aparecieron originalmente en los manuscritos -de la notación del canto gregoriano para denotar secuencias de notas -ascendentes o descendentes en la misma sílaba. Se usan también en -notación mensural. - -Las ligaduras se escriben @emph{encerrándolas} dentro de un par -@code{\[} y @code{\]}. Ciertos estilos de ligadura podrían necesitar -una sintaxis de entrada adicional específica para este tipo de -ligadura en particular. De forma predeterminada, el grabador -@rinternals{LigatureBracket} se limita a colocar un corchete recto -sobre la ligadura: - -@lilypond[quote,ragged-right,verbatim] -\transpose c c' { - \[ g c a f d' \] - a g f - \[ e f a g \] -} -@end lilypond - -Están disponibles otros dos estilos de ligaduras: el Vaticana para -canto gregoriano, y el Mensural para música mensural (sólo están -contempladas las ligaduras mensurales blancas para la música mensural, -y con ciertas limitaciones). Para usar cualquiera de estos estilos, -se debe sustituir el grabador predeterminado -@code{Ligature_bracket_engraver} por uno de los grabadores -especializados en ligaduras del contexto @rinternals{Voice}, como se -explica en @ref{White mensural ligatures} y @ref{Gregorian square -neume ligatures}. - - -@seealso - - -@knownissues - -Las ligaduras necesitan un espaciado especial que aún no se ha -desarrollado. Como consecuencia, la mayor parte del tiempo existe una -separación excesiva entre las ligaduras, y a menudo los cortes de -línea no son satisfactorios. Además, la letra de los cantos no se -alinea correctamente con las ligaduras. - -Las alteraciones accidentales no se deben imprimir dentro de las -ligaduras, sino que deben reunirse e imprimirse juntas delante de -ellas. - -La sintaxis todavía utiliza el obsoleto estilo infijo @code{\[ -expresión_musical \]}. Por motivos de consistencia, esto cambiará -algún día al estilo postfijo @code{nota\[ ... nota\]}. - - -@node Custodes -@unnumberedsubsubsec Custodes - -@cindex custos -@cindex custodes - -Un @emph{custos} (en plural: @emph{custodias}, que en latín significa -@qq{guarda}) es un símbolo que aparece al final de una pauta. Anticipa -la altura de la primera o primeras notas de la línea siguiente, -ayudando al intérprete con los saltos de línea durante la ejecución. - -Las custodias se utilizaron mucho en la notación musical hasta el -siglo XVII. En nuestros días, sobreviven sólo en algunas formas -particulares de notación musical como las ediciones contemporáneas de -canto gregoriano como la @emph{Editio Vaticana}. Hay distintos glifos -para el custos que se utilizan en las diferentes variaciones de estilo -notacional. - -Para tipografiar las custodias, simplemente coloque un grabador -@rinternals{Custos_engraver} dentro del contexto @rinternals{Staff} -(el contexto del pentagrama) al declarar el bloque de @code{\layout} -(el bloque de disposición de la página), y modifique el estilo del -custos con una instrucción @code{\override} si lo desea, como se -muestra en el ejemplo siguiente: - -@lilypond[quote,ragged-right] -\score { - \relative c'' { - a1 - \break - g - } - \layout { - \context { - \Staff - \consists Custos_engraver - \override Custos #'style = #'mensural - } - } -} -@end lilypond - -El glifo del custos se selecciona mediante la propiedad @code{style}. -Los estilos contemplados son @code{vaticana}, @code{medicaea}, -@code{hufnagel} y @code{mensural}. Se muestran en el siguiente -fragmento: - -@lilypond[quote,ragged-right,fragment] -\new Lyrics \lyricmode { - \markup { \column { - \typewriter "vaticana" - \line { " " \musicglyph #"custodes.vaticana.u0" } - } } - \markup { \column { - \typewriter "medicaea" - \line { " " \musicglyph #"custodes.medicaea.u0" } - }} - \markup { \column { - \typewriter "hufnagel" - \line { " " \musicglyph #"custodes.hufnagel.u0" } - }} - \markup { \column { - \typewriter "mensural" - \line { " " \musicglyph #"custodes.mensural.u0" } - }} -} -@end lilypond - - -@seealso -Referencia de funcionamiento interno: -@rinternals{Custos}. - -Fragmentos de código: -@rlsr{Ancient notation}. - - -@node Figured bass support -@unnumberedsubsubsec Figured bass support - -Está contemplada de forma limitada la notación de bajo cifrado -barroco: véase @ref{Figured bass}. - -@node Typesetting mensural music -@subsection Typesetting mensural music - -@menu -* Mensural contexts:: -* Mensural clefs:: -* Mensural time signatures:: -* Mensural note heads:: -* Mensural flags:: -* Mensural rests:: -* Mensural accidentals and key signatures:: -* Annotational accidentals (musica ficta):: -* White mensural ligatures:: -@end menu - - -@node Mensural contexts -@unnumberedsubsubsec Mensural contexts - -@cindex MensuralVoiceContext -@cindex MensuralStaffContext - -Los contextos predefinidos de voz @code{MensuralVoice} y de pauta -@code{MensuralStaff} se pueden usar para grabar una pieza en estilo -mensural. Estos contextos establecen a unos valores iniciales -adecuados todas las propiedades relevantes de los contextos y de los -objetos gráficos, de manera que pueda comenzar inmediatamente a -escribir el canto, como lo demuestra el siguiente fragmento: - -@lilypond[quote,ragged-right,verbatim] -\score { - << - \new MensuralVoice = "discantus" \transpose c c' { - \override Score.BarNumber #'transparent = ##t { - c'1\melisma bes a g\melismaEnd - f\breve - \[ f1\melisma a c'\breve d'\melismaEnd \] - c'\longa - c'\breve\melisma a1 g1\melismaEnd - fis\longa^\signumcongruentiae - } - } - \new Lyrics \lyricsto "discantus" { - San -- ctus, San -- ctus, San -- ctus - } - >> -} -@end lilypond - - -@seealso - - -@node Mensural clefs -@unnumberedsubsubsec Mensural clefs - -@cindex clefs - -La siguiente tabla presenta todas las claves antiguas que están -contempladas a través de la instrucción @code{\clef}. Algunas de las -claves usan el mismo glifo, pero se diferencian sólo en la línea en -que se imprimen. En tales casos, se usa un número añadido al nombre -para enumerar dichas claves, numerado desde la línea inferior hasta la -superior. Aún así, puede forzar manualmente que se escriba un glifo -de clave sobre una línea arbitraria, como se encuentra descrito en -@ref{Clef}. La nota impresa a la derecha de cada clave en la columna -de los ejemplos denota la situación del Do central (@code{c'}) con -respecto a dicha clave. - -Petrucci usaba claves de Do que tenían barras verticales en el lado -izquierdo en un equilibrio variable, dependiendo de la línea de la -pauta en que se imprimían. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Descripción} -@tab -@b{Claves posibles} -@tab -@b{Ejemplo} - -@item -clave de Do, mensural -@tab -@code{mensural-c1}, @code{mensural-c2},@* -@code{mensural-c3}, @code{mensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -clave de Fa, mensural -@tab -@code{mensural-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -clave de Sol, mensural -@tab -@code{mensural-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-g" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -clave de Do, neomensural -@tab -@code{neomensural-c1}, @code{neomensural-c2},@* -@code{neomensural-c3}, @code{neomensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "neomensural-c2" c -@end lilypond - -@item -claves de Do en el estilo de Petrucci, para su uso en distintas líneas -de la pauta (el ejemplo muestra la clave de Do en segunda) -@tab -@code{petrucci-c1}, @code{petrucci-c2},@* -@code{petrucci-c3}, @code{petrucci-c4},@* -@code{petrucci-c5} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -clave de Fa en el estilo de Petrucci -@tab -@code{petrucci-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -clave de Sol en el estilo de Petrucci -@tab -@code{petrucci-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-g" - \override NoteHead #'style = #'mensural - c -@end lilypond -@end multitable - - -@seealso -Referencia de la notación: -@ref{Clef}. - - -@knownissues - -La clave de Sol mensural está asignada a la clave de Sol de Petrucci. - - -@node Mensural time signatures -@unnumberedsubsubsec Mensural time signatures - -@cindex mensuración, símbolo de -@cindex compás, indicación de - -Los símbolos de mensuración (que son algo similar, pero no exactamente -igual que las indicaciones de compás) están contemplados de forma -limitada. Los glifos están configurados de forma fija para -determinadas fracciones de tiempo. En otras palabras, para obtener un -símbolo de mensuración determinado con la instrucción @code{\time -n/m}, se tienen que escoger @code{n} y @code{m} según la siguiente -tabla - -@lilypond[quote,ragged-right] -\layout { - indent = 0.0 - \context { - \Staff - \remove Staff_symbol_engraver - \remove Clef_engraver - \remove Time_signature_engraver - } -} -{ - \set Score.timing = ##f - \set Score.barAlways = ##t - s_\markup { "\\time 4/4" }^\markup { " " \musicglyph -#"timesig.neomensural44" } - s - s_\markup { "\\time 2/2" }^\markup { " " \musicglyph -#"timesig.neomensural22" } - s - s_\markup { "\\time 6/4" }^\markup { " " \musicglyph -#"timesig.neomensural64" } - s - s_\markup { "\\time 6/8" }^\markup { " " \musicglyph -#"timesig.neomensural68" } - \break - s_\markup { "\\time 3/2" }^\markup { " " \musicglyph -#"timesig.neomensural32" } - s - s_\markup { "\\time 3/4" }^\markup { " " \musicglyph -#"timesig.neomensural34" } - s - s_\markup { "\\time 9/4" }^\markup { " " \musicglyph -#"timesig.neomensural94" } - s - s_\markup { "\\time 9/8" }^\markup { " " \musicglyph -#"timesig.neomensural98" } - \break - s_\markup { "\\time 4/8" }^\markup { " " \musicglyph -#"timesig.neomensural48" } - s - s_\markup { "\\time 2/4" }^\markup { " " \musicglyph -#"timesig.neomensural24" } -} -@end lilypond - -Utilice la propiedad @code{style} del elemento gráfico -@rinternals{TimeSignature} para seleccionar las indicaciones de compás -de la música antigua. Los estilos contemplados son @code{neomensural} -y @code{mensural}. La tabla anterior utiliza el estilo -@code{neomensural}. Los ejemplos siguientes muestran las diferencias -que existen entre los estilos: - -@lilypond[ragged-right,fragment,relative=1,quote] -{ - \textLengthOn - - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter default } - - \override Staff.TimeSignature #'style = #'numbered - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter numbered } - - \override Staff.TimeSignature #'style = #'mensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter mensural } - - \override Staff.TimeSignature #'style = #'neomensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter neomensural } - \override Staff.TimeSignature #'style = #'single-digit - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter single-digit } -} -@end lilypond - - -@seealso -Referencia de la notación: -@ref{Time signature} -ofrece una introducción general al uso de las indicaciones de compás. - - -@knownissues - -Las relaciones de duración de las notas no se modifican cuando cambia -la indicación de compás. Por ejemplo, la razón de 1 breve = 3 -semibreves (@emph{tempus perfectum}) se debe hacer a mano mediante el -establecimiento de - -@example -breveTP = #(ly:make-duration -1 0 3 2) -@dots{} -@{ c\breveTP f1 @} -@end example - -@noindent -Esto fija un valor para @code{breveTP} de 3/2 multiplicado por 2 = 3 -veces una redonda. - -Los símbolos @code{mensural68alt} y @code{neomensural68alt} -(alternativos al símbolo de 6/8) no se puede seleccionar directamente -con @code{\time}. En su lugar, utilice @code{\markup @{\musicglyph -#"timesig.mensural68alt" @}}. - - -@node Mensural note heads -@unnumberedsubsubsec Mensural note heads - -@cindex cabezas de nota antiguas - -Para la notación antigua, se puede elegir un estilo de cabezas de -notas distinto al @code{default} (estilo predeterminado). Esto se -consigue estableciendo la propiedad @code{style} del objeto -@rinternals{NoteHead} a los valores @code{baroque}, -@code{neomensural}, @code{mensural} o @code{petrucci}. - -El estilo @code{baroque} se diferencia del estilo predeterminado -@code{default} en que: - -@itemize -@item Proporciona una cabeza de nota para la @code{maxima}, y -@item Usa una forma cuadrada para las cabezas de @code{\breve}. -@end itemize - -Los estilos @code{neomensural}, @code{mensural} y @code{petrucci} se -diferencian del estilo @code{baroque} en que: - -@itemize -@item Usan cabezas romboidales para las semibreves y todas las notas más cortas, y -@item Centran las plicas sobre las cabezas. -@end itemize - -El ejemplo siguiente muestra el estilo @code{petrucci}: - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\autoBeamOff -\override NoteHead #'style = #'petrucci -a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a' - -@end lilypond - - -@seealso -@ref{Note head styles} ofrece una visión de conjunto sobre la -totalidad de los estilos de cabeza disponibles. - - -@node Mensural flags -@unnumberedsubsubsec Mensural flags - -@cindex flags - -Utilice la propiedad @code{flag-style} del elemento gráfico -@rinternals{Stem} para seleccionar los corchetes de estilo antiguo. -Aparte del estilo de corchete por defecto @code{default}, sólo está -contemplado el estilo @code{mensural} - -@lilypond[quote,fragment,ragged-right,verbatim] -\override Stem #'flag-style = #'mensural -\override Stem #'thickness = #1.0 -\override NoteHead #'style = #'mensural -\autoBeamOff -c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 -c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 -@end lilypond - -Observe que la bandera más interna de cada uno de los corchetes -mensurales siempre se alinea verticalmente con una línea de la pauta. - -No existe un estilo particular de corchete para la notación neo-mensural. - -No existen corchetes en la notación del canto gregoriano. - - -@seealso - - -@knownissues - -La unión de los corchetes antiguos a las plicas está ligeramente -desviada. - -La alineación vertical de cada uno de los corchetes con una línea de -la pauta da por supuesto que las plicas siempre terminan exactamente -encima o bien exactamente en el medio de dos líneas de la pauta. Esto -puede no ser siempre cierto cuando se utilizan las posibilidades de -disposición avanzadas de la notación clásica (que, de todas formas, -por lo común se encuentra fuera del ámbito de la notación mensural). - - -@node Mensural rests -@unnumberedsubsubsec Mensural rests - -@cindex rests, ancient - -Utilice la propiedad @code{style} del elemento gráfico -@rinternals{Rest} para seleccionar silencios antiguos. Los estilos -contemplados son @code{classical}, @code{neomensural} y -@code{mensural}. @code{classical} se diferencia del estilo por -defecto @code{default} solamente en que el silencio de negra parece un -silencio de corchea invertido horizontalmente. Los estilos -@code{mensural} y @code{neomensural} reproducen el aspecto de los -silencios de los manuscritos y ediciones impresas de hasta el s.XVI. - -El ejemplo siguiente muestra los estilos @code{mensural} y -@code{neomensural}: - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\override Rest #'style = #'classical -r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break -\override Rest #'style = #'mensural -r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break -\override Rest #'style = #'neomensural -r\longa^"neomensural" r\breve r1 r2 r4 r8 r16 -@end lilypond - -No existen silencios de fusa y semifusa específicos para los estilos -mensural ni neo-mensural. En su lugar se tomarán los silencios del -estilo predeterminado. - -Consulte @rlsr{Ancient notation} para ver un cuadro de todos los -silencios. - - -@seealso -Referencia de la notación: -@ref{Rests} -ofrece una introducción general al uso de los silencios. - - -@node Mensural accidentals and key signatures -@unnumberedsubsubsec Mensural accidentals and key signatures - -@cindex alteraciones -@cindex armadura - -El estilo @code{mensural} ofrece unos símbolos de sostenido y bemol -distintos de los del estilo predeterminado. Si se solicita, el -símbolo de becuadro se extrae del estilo @code{vaticana}. - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "mensural" - \line { " " \musicglyph #"accidentals.mensural-1" - " " \musicglyph #"accidentals.mensural1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -El estilo de las alteraciones y de la armadura de la tonalidad se -controlan a través de la propiedad @code{glyph-name-alist} de los -elementos gráficos @rinternals{Accidental} y -@rinternals{KeySignature}, respectivamente; p.ej.: - -@code{\override Staff.Accidental #'glyph-name-alist = -#alteration-mensural-glyph-name-alist} - - -@seealso -Referencia de la notación: -@ref{Pitches}, -@ref{Accidentals} y -@ref{Automatic accidentals} -proporcionan una introducción general al uso de las alteraciones. -@ref{Key signature} -ofrece una introducción general al uso de las armaduras de tonalidad. - -Referencia de funcionamiento interno: -@rinternals{KeySignature}. - - -@cindex alteraciones accidentales - - -@node Annotational accidentals (musica ficta) -@unnumberedsubsubsec Annotational accidentals (@emph{musica ficta}) - -En la música europea de hasta aprox. 1600, se esperaba de los -cantantes que alterasen cromáticamente ciertas notas según su propia -iniciativa y de acuerdo a ciertas reglas. Esto recibe el nombre de -@notation{musica ficta}. En las transcripciones modernas, estas -alteraciones accidentales se imprimen normalmente encima de la nota. - -@cindex alteraciones de la musica ficta -@cindex musica ficta, alteraciones - -Están contempladas estas alteraciones sugeridas, y se pueden activar -estableciendo @code{suggestAccidentals} al valor verdadero. - -@funindex suggestAccidentals - -@lilypond[verbatim,fragment,relative=1] -fis gis -\set suggestAccidentals = ##t -ais bis -@end lilypond - -Esto hará que se traten @emph{todas} las alteraciones siguientes como -@emph{musica ficta} hasta que se desactive con @code{\set -suggestAccidentals = ##f}. Una forma más práctica es usar @code{\once -\set suggestAccidentals = ##t}, que puede incluso definirse como una -forma breve muy conveniente: - -@lilypond[quote,verbatim] -ficta = { \once \set suggestAccidentals = ##t } -\score { \relative c'' - \new MensuralVoice { - \once \set suggestAccidentals = ##t - bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1 - } -} -@end lilypond - - -@seealso -Referencia de funcionamiento interno: -el grabador @rinternals{Accidental_engraver} -y el objeto -@rinternals{AccidentalSuggestion}. - - -@node White mensural ligatures -@unnumberedsubsubsec White mensural ligatures - -@cindex Mensural ligatures -@cindex White mensural ligatures - -Las ligaduras mensurales blancas están contempladas de forma limitada. - -Para grabar ligaduras mensurales blancas, en el bloque layout o de -diseño de página reemplace el grabador -@rinternals{Ligature_bracket_engraver} por el grabador -@rinternals{Mensural_ligature_engraver} en el contexto -@rinternals{Voice}: - -@example -\layout @{ - \context @{ - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - @} -@} -@end example - -No existe ningún lenguaje de entrada adicional para describir la forma -de una ligadura mensural blanca. Más bien la forma se determina -exclusivamente a partir de la altura y duración de las notas -comprendidas. Si bien este enfoque podría hacer que un usuario con -poca experiencia tardase un tiempo en acostumbrarse a él, tiene la -gran ventaja de que toda la información musical de la ligadura se -conoce internamente. Esto no se requiere solamente para una salida -MIDI correcta, sino que también permite la transcripción automática de -las ligaduras. - -Por ejemplo: - -@lilypond[quote,ragged-right,verbatim] -\score { - \transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] - } - \layout { - \context { - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - } -} -@end lilypond - -Si no se sustituye el grabador @rinternals{Ligature_bracket_engraver} -por el @rinternals{Mensural_ligature_engraver}, la misma música se -transcribe de la siguiente manera: - -@lilypond[quote,ragged-right] -\transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] -} -@end lilypond - - -@seealso - - -@knownissues - -El espaciado horizontal de las ligaduras es pobre. - - -@node Typesetting Gregorian chant -@subsection Typesetting Gregorian chant - -@menu -* Gregorian chant contexts:: -* Gregorian clefs:: -* Gregorian accidentals and key signatures:: -* Divisiones:: -* Gregorian articulation signs:: -* Augmentum dots (@emph{morae}):: -* Gregorian square neume ligatures:: -@end menu - -Al componer tipográficamente una pieza en notación de canto -gregoriano, el grabador @rinternals{Vaticana_ligature_engraver} -selecciona automáticamente la cabeza adecuada de las figuras, de -manera que no es neceario establecer explícitamente el estilo de las -cabezas. A pesar de ello se puede establecer el estilo de las -cabezas, p.ej.: a @code{vaticana_punctum} para producir neumas de -punctum. De forma similar, el grabador -@rinternals{Mensural_ligature_engraver} construye ligaduras mensurales -automáticamente. Consulte @ref{Ligatures} para ver cómo funcionan los -grabadores de ligaduras. - - -@node Gregorian chant contexts -@unnumberedsubsubsec Gregorian chant contexts - -@cindex VaticanaVoiceContext -@cindex VaticanaStaffContext - -El contexto predefinido de voz @code{VaticanaVoiceContext} y el de -pauta @code{VaticanaStaffContext} se pueden utilizar para grabar una -pieza de canto gregoriano en el estilo de la Editio Vaticana. Estos -contextos establecen a unos valores iniciales adecuados todas las -propiedades relevantes de los contextos y de los objetos gráficos, de -forma que pueda inmediatamente comenzar a escribir el canto en sí, -como lo demuestra el siguiente fragmento: - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - << - \new VaticanaVoice = "cantus" { - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] - f \divisioMinima - \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] - c' \divisioMinima \break - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima - } - \new Lyrics \lyricsto "cantus" { - San- ctus, San- ctus, San- ctus - } - >> -} -@end lilypond - - -@seealso - - -@node Gregorian clefs -@unnumberedsubsubsec Gregorian clefs - -@cindex clefs - -La tabla siguiente muestra todas las claves gregorianas contempladas a -través de la instrucción @code{\clef}. Algunas de las claves usan el -mismo glifo, pero se diferencian solamente en la línea en que se -imprimen. En estos casos, para enumerar estas claves se usa un número -a continuación del nombre de la clave, contando desde la línea -inferior. Aún se puede forzar manualmente la composición tipográfica -de un glifo de clave sobre una línea arbitraria, como se describe en -@ref{Clef}. La nota que se imprime a la derecha junto a cada una de -las claves en la columna de los ejemplos, denota el Do central -(@code{c'}) respecto a dicha clave. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Descripción} -@tab -@b{Claves posibles} -@tab -@b{Ejemplo} - -@item -Clave de Do, estilo Editio Vaticana -@tab -@code{vaticana-do1}, @code{vaticana-do2},@* -@code{vaticana-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-do2" - c -@end lilypond - -@item -Clave de Fa, estilo Editio Vaticana -@tab -@code{vaticana-fa1}, @code{vaticana-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-fa2" - c -@end lilypond - -@item -Clave de Do, estilo Editio Medicaea -@tab -@code{medicaea-do1}, @code{medicaea-do2},@* -@code{medicaea-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-do2" - c -@end lilypond - -@item -Clave de Fa, estilo Editio Medicaea -@tab -@code{medicaea-fa1}, @code{medicaea-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-fa2" - c -@end lilypond - -@item -Clave de Do, estilo hufnagel -@tab -@code{hufnagel-do1}, @code{hufnagel-do2},@* -@code{hufnagel-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do2" - c -@end lilypond - -@item -Clave de Fa, estilo hufnagel -@tab -@code{hufnagel-fa1}, @code{hufnagel-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-fa2" - c -@end lilypond - -@item -Clave combinada de Do y Fa, estilo hufnagel -@tab -@code{hufnagel-do-fa} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do-fa" - c -@end lilypond -@end multitable - - -@seealso -Referencia de la notación: -@ref{Clef}. - - -@node Gregorian accidentals and key signatures -@unnumberedsubsubsec Gregorian accidentals and key signatures - -@cindex accidentals -@cindex key signature - -Están disponibles las alteraciones de los tres estilos gregorianos: - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "vaticana" - \line { " " \musicglyph #"accidentals.vaticana-1" - " " \musicglyph #"accidentals.vaticana0" } - } - \column { - "medicaea" - \line { " " \musicglyph #"accidentals.medicaea-1" } - } - \column { - "hufnagel" - \line { " " \musicglyph #"accidentals.hufnagel-1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -Como se ve en el ejemplo, cada estilo no contempla todas las -alteraciones. Al intentar acceder a una alteración que no está -contemplada, LilyPond cambia a un estilo diferente. - - -El estilo de las alteraciones y las armaduras de tonalidad se controla -a través de la propiedad @code{glyph-name-alist} de los grobs (objetos -gráficos) @rinternals{Accidental} y @rinternals{KeySignature}, -respectivamente; p.ej.: - -@code{\override Staff.Accidental #'glyph-name-alist = -#alteration-mensural-glyph-name-alist} - - -@seealso -Referencia de la notación: -@ref{Pitches}, -@ref{Accidentals} y -@ref{Automatic accidentals} -dan una introducción general del uso de las alteraciones. -@ref{Key signature} ofrece una introducción general al uso de las -armaduras de tonalidad. - -Referencia de funcionamiento interno: -@rinternals{KeySignature}. - - -@node Divisiones -@unnumberedsubsubsec Divisiones - -@cindex divisio -@cindex divisiones -@cindex finalis - -En la notación del canto gregoriano no existen silencios, sino -@ref{Divisiones}. - -Una @emph{divisio} (en plural: @emph{divisiones}, que en latín -significa @q{división}) es un símbolo del contexto del pentagrama que -se usa para estructurar la música gregoriana en frases y secciones. -El significado musical de @emph{divisio minima}, @emph{divisio maior} -y @emph{divisio maxima} se podrían caracterizar como una pausa corta, -media y larga (respectivamente), algo así como las marcas de -respiración de @ref{Breath marks}. El signo de @emph{finalis} no sólo -marca el final de un canto, sino que se usa también con frecuencia -dentro de un único canto antifonal o responsorial para marcar el final -de cada una de las secciones. - -Para usar divisiones, incluya el archivo @file{gregorian@/.ly}. -Contiene definiciones que podrá aplicar con tan sólo escribir -@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima} y -@code{\finalis} en los lugares adecuados de la entrada. Algunas -ediciones usan @emph{virgula} o @emph{caesura} en vez de divisio -minima. Por ello, @file{gregorian@/.ly} define también las -instrucciones @code{\virgula} y @code{\caesura}. - -@lilypondfile[quote,ragged-right]{divisiones.ly} - - -@predefined -@funindex \virgula -@code{\virgula}, -@funindex \caesura -@code{\caesura}, -@funindex \divisioMinima -@code{\divisioMinima}, -@funindex \divisioMaior -@code{\divisioMaior}, -@funindex \divisioMaxima -@code{\divisioMaxima}, -@funindex \finalis -@code{\finalis}. -@endpredefined - - -@node Gregorian articulation signs -@unnumberedsubsubsec Gregorian articulation signs - -@cindex articulaciones - -Además de los signos de articulación estándar que se hallan descritos -en la sección @ref{Articulations and ornamentations}, se proveen -signos de articulación diseñados específicamente para utilizarlos con -la notación en el estilo de la @emph{Editio Vaticana}. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \override TextScript #'font-family = #'typewriter - \override TextScript #'font-shape = #'upright - \override Script #'padding = #-0.1 - a\ictus_"ictus " \break - a\circulus_"circulus " \break - a\semicirculus_"semicirculus " \break - a\accentus_"accentus " \break - \[ a_"episema" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] - } -} -@end lilypond - - -@seealso - - -@knownissues - -Ciertas articulaciones se colocan demasiado cerca verticalmente de las -cabezas de nota correspondientes. - -La línea episemática no se muestra en muchos casos. Si se presenta, -el extremo derecho de la línea episemática se encuentra a menudo -demasiado lejos hacia la derecha. - - -@node Augmentum dots (@emph{morae}) -@unnumberedsubsubsec Augmentum dots (@emph{morae}) - -Los puntos de aumentación, llamados también @emph{morae}, se escriben -con la función musical @code{\augmentum}. Observe que -@code{\augmentum} está programado como una función musical unaria y no -como un prefijo de cabeza. Se aplica solamente a la expresión musical -que sigue inmediatamente. Esto es, @code{\augmentum \virga c} no -tendrá ningún efecto visible. En su lugar, escriba @code{\virga -\augmentum c} o @code{\augmentum @{\virga c@}}. Tenga en cuenta -también que puede escribir @code{\augmentum @{a g@}} como abreviatura -de @code{\augmentum a \augmentum g}. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \[ \augmentum a \flexa \augmentum g \] - \augmentum g - } -} -@end lilypond - - -@seealso -Referencia de la notación: -@ref{Breath marks}. - -Referencia de funcionamiento interno: -@rinternals{BreathingSign}. - -Fragmentos de código: -@rlsr{Ancient notation}. - - -@node Gregorian square neume ligatures -@unnumberedsubsubsec Gregorian square neume ligatures - -@cindex Square neumes ligatures -@cindex Gregorian square neumes ligatures - -La notación de neumas cuadrados gregorianos está contemplada de forma -limitada (siguiendo el estilo de la Editio Vaticana). El núcleo -principal del conjunto de las ligaduras ya se pueden tipografiar, pero -aún faltan aspectos esenciales para una composición tipográfica seria, -como (entre otros) la alineación horizontal de varias ligaduras, la -alineación de la letra y un correcto manejo de las alteraciones -accidentales. - -Se habilita el soporte de los neumas gregorianos por medio de la -inclusión con @code{\include} del archivo "gregorian.ly" al principio -del archivo. Esto hace que estén disponibles una cierta cantidad de -instrucciones adicionales para producir los símbolos de los neumas que -se usan en la notación de canto llano. - -Las cabezas de las notas se pueden @emph{modificar} y/o @emph{unir}. - -@itemize -@item La forma de la cabeza -se puede modificar @emph{precediendo} el nombre de la nota con una -cualquiera de las instrucciones siguientes: -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. - -@item Las ligaduras hablando en propiedad, -(es decir, notas unidas), se producen escribiendo una de las -instrucciones de unión @code{\pes} o @code{\flexa}, para el movimiento -ascendente y descendente, respectivamente, @emph{intercaladas} entre -las notas que se han de unir. -@end itemize - -Una nota sin modificaciones produce un @emph{punctum}. Todos los -demás neumas, incluso los neumas de una nota con forma distinta como -la @emph{virga}, se consideran en principio como ligaduras y por ello -se deben escribir dentro de @code{\[...\]}. - -@noindent -Neumas de una nota: - -@itemize -@item El @emph{punctum} es la forma básica de nota (en el estilo -@emph{Vaticana}: un cuadrado con una ligera curvatura a modo de -excelencia tipográfica). Además del @emph{punctum} normal, están el -@emph{punctum inclinatum}, oblicuo, producido con el prefijo -@code{\inclinatum}. El @emph{punctum} normal se puede modificar con -@code{\cavum}, que produce una nota vacía, y @code{\linea}, que traza -líneas verticales a ambos lados de la nota. - -@item La @emph{virga} tiene una plica descendente en el lado derecho. Se -produce mediante el modificador @code{\virga}. -@end itemize - -@noindent -Ligaduras - -A diferencia de casi todos los otros sistemas de notación de neumas, -el aspecto tipográfico de las ligaduras no viene dictado directamente -por las instrucciones de la entrada, sino que sigue unas convenciones -que dependen del significado musical. Por ejemplo, una ligadura de -tres notas con la forma musical bajo-alto-bajo, como @code{\[ a \pes b -\flexa g \]}, produce un Torculus que consiste en tres cabezas de -Punctum, mientras que la forma alto-bajo-alto, como @code{\[ a \flexa -g \pes b \]}, produce un Porrectus con una forma de flexa curvada y -una sola cabeza de Punctum. No existe ninguna instrucción para -tipografiar explícitamente la forma de flexa curvada; la decisión de -cuándo tipografiar una forma de flexa curvada está basada en la -entrada musical. La idea de este enfoque es separar los aspectos -musicales de la entrada, del estilo de notación de la salida. De esta -forma, la misma entrada se puede reutilizar para tipografiar la misma -música en un estilo diferente de notación de canto gregoriano. - -@noindent -Neumas licuescentes - -Otra categoría fundamental de notas en el canto gregoriano es la de -los llamados neumas licuescentes. Se utilizan bajo ciertas -circunstancias al final de una sílaba que acaba en una letra -@q{licuescente}, es decir, consonantes sonoras que pueden tener una -altura tonal, (nasales, l, r, v, j, y sus diptongos equivalentes). -Así, los neumas licuescentes nunca se utilizan aisladamente (aunque se -pueden producir algunos de ellos), y siempre están al final de una -ligadura. - -Los neumas licuescentes se representan gráficamente de dos formas -distintas más o menos intercambiables: con una nota pequeña o -@q{girando} la nota principal hacia arriba o hacia abajo. La primera -forma se produce haciendo un @code{pes} o una @code{flexa} normales y -modificando la forma de la segunda nota: @code{\[ a \pes \deminutum b -\] }, mientras que la segunda se hace modificando la forma de un neuma -de una nota con @code{\auctum} y uno de los generadores de -dirección @code{\descendens} o @code{\ascendens}, p.ej. @code{ \[ -\auctum \descendens a \] }. - -@noindent -Símbolos especiales - -Hay una tercera categoría de símbolos que se hace a partiru de un -pequeño número de símbolos que tienen un significado especial (que, -por cierto, casi siempre se conocen sólo vagamente): el -@emph{quilisma}, el @emph{oriscus} y el @emph{strophicus}. Todos -ellos se producen anteponiendo al nombre de la nota el modificador -correspondiente, @code{\quilisma}, @code{\oriscus} o @code{\stropha}. - -Dentro de los delimitadores de ligadura @code{\[} y @code{\]}, se -pueden acumular prácticamente cualquier cantidad de cabezas de nota -para formar una sola ligadura, y los prefijos de cabeza como -@code{\pes}, @code{\flexa}, @code{\virga}, @code{\inclinatum}, etc. se -pueden mezclar libremente. El uso del conjunto de reglas que subyace -a la construcción de ligaduras en la tabla anterior está -consecuentemente extrapolada. De esta manera se pueden crear un -número infinito de ligaduras distintas. - -Observe que el uso de esos símbolos en la propia música sigue ciertas -reglas que LilyPond no comprueba. P.ej., el @emph{quilisma} siempre -es la nota intermedia de una ligadura ascendente, y suele caer sobre -un intervalo de semitono, pero es perfectamente posible, si bien -incorrecto, hacer un quilisma de una nota. - -Además de los símbolos de nota, el archivo gregorian.ly define también -las instrucciones @code{\versus}, @code{\responsum}, @code{\ij}, -@code{\iij}, @code{\IJ} y @code{\IIJ}, que producen los caracteres -correspondientes, p.ej. para utilizarlos en la letra, como marcas de -sección, etc. Estas instrucciones utilizan caracteres de Unicode -especiales y sólo funcionan si se usa una fuente tipográfica que los -contemple. - -La tabla siguiente muestra un conjunto limitado, pero representativo, -de ligaduras gregorianas, junto a los fragmentos de código que las -producen. La tabla está basada en la tabla de neumas extendidos del -segundo volumen del Antiphonale Romanum (@emph{Liber Hymnarius}), -publicado en 1983 por los monjes de Solesmes. La primera columna da -el nombre de la ligadura, con la forma principal en tipo negrita y las -formas licuescentes en cursiva. La tercera forma muestra el fragmento -de código que produce dicha ligadura, utilizando Sol, La y Si como -alturas de ejemplo. - - -@b{Neumas de una nota} - -@multitable @columnfractions .4 .2 .4 - -@item -Formas @b{Básica} y @emph{Licuescente} -@tab -@b{Salida} -@tab -@b{Código de Lilypond@*} - -@item -@b{Punctum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \]} - -@item -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ \cavum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \cavum b \]} - -@item -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ \linea b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \linea b \]} - -@item -@emph{Punctum Auctum Ascendens} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Ascendens - \[ \auctum \ascendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \auctum \ascendens b \]} - -@item -@emph{Punctum Auctum Descendens} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Descendens - \[ \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \auctum \descendens b \]} - -@item -@b{Punctum inclinatum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum - \[ \inclinatum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum b \]} - -@item -@emph{Punctum Inclinatum Auctum} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Auctum - \[ \inclinatum \auctum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum \auctum b \]} - -@item -@emph{Punctum Inclinatum Parvum} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Parvum - \[ \inclinatum \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum \deminutum b \]} - -@item -@b{Virga} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Virga - \[ \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@end multitable - -@noindent -@b{Ligaduras de dos notas} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Clivis vel Flexa} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis vel Flexa - \[ b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa g \]} - - -@item -@emph{Clivis Aucta Descendens} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Descendens - \[ b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \auctum \descendens g \]} - -@item -@emph{Clivis Aucta Ascendens} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Ascendens - \[ b \flexa \auctum \ascendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \auctum \ascendens g \]} - -@item -@emph{Cephalicus} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Cephalicus - \[ b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \deminutum g \]} - -@item -@b{Podatus o Pes} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Podatus vel Pes - \[ g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes b \]} - -@item -@emph{Pes Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens - \[ g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \auctum \descendens b \]} - -@item -@emph{Pes Auctus Ascendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Ascendens - \[ g \pes \auctum \ascendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \auctum \ascendens b \]} - -@item -@emph{Epiphonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Epiphonus - \[ g \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \deminutum b \]} - -@item -@emph{Pes Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Initio Debilis - \[ \deminutum g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum g \pes b \]} - -@item -@emph{Pes Auctus Descendens Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens Initio Debilis - \[ \deminutum g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum g \pes \auctum \descendens b \]} - -@end multitable - -@noindent -@b{Ligaduras de varias notas} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Torculus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus - \[ a \pes b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa g \]} - -@item -@emph{Torculus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens - \[ a \pes b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa \auctum \descendens g \]} - -@item -@emph{Torculus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus - \[ a \pes b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa \deminutum g \]} - -@item -@emph{Torculus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Initio Debilis - \[ \deminutum a \pes b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa g \]} - -@item -@emph{Torculus Auctus Descendens Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens Initio Debilis - \[ \deminutum a \pes b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} - -@item -@emph{Torculus Deminutus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus Initio Debilis - \[ \deminutum a \pes b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa \deminutum g \]} - -@item -@b{Porrectus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus - \[ a \flexa g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes b \]} - -@item -@emph{Porrectus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Auctus Descendens - \[ a \flexa g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes \auctum \descendens b \]} - -@item -@emph{Porrectus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Deminutus - \[ a \flexa g \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes \deminutum b \]} - -@item -@b{Climacus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus - \[ \virga b \inclinatum a \inclinatum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum g \]} - -@item -@emph{Climacus Auctus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Auctus - \[ \virga b \inclinatum a \inclinatum \auctum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} - -@item -@emph{Climacus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Deminutus - \[ \virga b \inclinatum a \inclinatum \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} - -@item -@b{Scandicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus - \[ g \pes a \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \virga b \]} - -@item -@emph{Scandicus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Auctus Descendens - \[ g \pes a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \pes \auctum \descendens b \]} - -@item -@emph{Scandicus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Deminutus - \[ g \pes a \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \pes \deminutum b \]} - -@end multitable - -@noindent -@b{Símbolos especiales} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Quilisma} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma - \[ g \pes \quilisma a \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \quilisma a \pes b \]} - -@item -@emph{Quilisma Pes Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma Pes Auctus Descendens - \[ g \quilisma a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \quilisma g \pes \auctum \descendens b \]} - -@item -@b{Oriscus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Oriscus - \[ \oriscus b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus b \]} - -@item -@emph{Pes Quassus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus - \[ \oriscus g \pes \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus g \pes \virga b \]} - -@item -@emph{Pes Quassus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus Auctus Descendens - \[ \oriscus g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus g \pes \auctum \descendens b \]} - -@item -@b{Salicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus - \[ g \oriscus a \pes \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \oriscus a \pes \virga b \]} - -@item -@emph{Salicus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus Auctus Descendens - \[ g \oriscus a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \oriscus a \pes \auctum \descendens b \]} - -@item -@b{(Apo)stropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha - \[ \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \]} - -@item -@emph{Stropha Aucta} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha Aucta - \[ \stropha \auctum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha \auctum b \]} - -@item -@b{Bistropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Bistropha - \[ \stropha b \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \]} - -@item -@b{Tristropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Tristropha - \[ \stropha b \stropha b \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \stropha b \]} - -@item -@emph{Trigonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Trigonus - \[ \stropha b \stropha b \stropha a \] - } - \layout { \neumeDemoLayout } -} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \stropha a \]} - -@end multitable - -@predefined -Están contemplados los siguientes prefijos de cabeza: -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. -@endpredefined - - -Se pueden acumular los prefijos de cabeza, aunque con ciertas -restricciones. Por ejemplo, se pueden aplicar @code{\descendens} o -@code{\ascendens} a una cabeza, pero no los dos a la misma cabeza. - -@funindex \pes -@funindex \flexa -Se pueden ligar dos cabezas adyacentes con las instrucciones infijas -@code{\pes} y @code{\flexa} para una línea melódica ascendente y -descendente, respectivamente. - -@funindex \augmentum -Utilice la función musical unaria @code{\augmentum} para añadir puntos -de augmentum. - - -@seealso - - -@knownissues - -Cuando aparece un punto de @code{\augmentum} al final de la última -pauta dentro de una ligadura, a veces se posiciona defectuosamente en -el sentido vertical. Para rodear el problema, escriba una nota -adicionall de salto (p.ej. @code{s8}) como última nota de la pauta. - -@code{\augmentum} debería estar implementado como un prefijo de cabeza -en vez de una función musical unaria, de forma que @code{\augmentum} -se pudiera entremezclar con los prefijos de cabeza en un orden -arbitrario. - - -@node Working with ancient music---scenarios and solutions -@subsection Working with ancient music---scenarios and solutions - -@menu -* Incipits:: -* Mensurstriche layout:: -* Transcribing Gregorian chant:: -* Ancient and modern from one source:: -* Editorial markings:: -@end menu - -El trabajo con música antigua implica con frecuencia tareas -adicionales que difieren considerablemente de la notación moderna para -la que se diseñó Lilypond. En el resto de esta sección se perfilan -unos cuantos escenarios típicos, con sugerencias de soluciones. Entre -ellos están los siguientes: - -@itemize -@item cómo hacer incipits -(o sea, material a modo de prefacio que indica cómo era el original) a -las transcripciones modernas de música mensural; -@item cómo cosneguir el diseño @emph{Mensurstriche} -que se usa con frecuencia para las transcripciones modernas de música -polifónica; -@item cómo transcribir canto gregoriano en notación moderna; -@item cómo generar notación antigua y moderna a partir de la misma fuente. -@end itemize - - -@node Incipits -@unnumberedsubsubsec Incipits - -Continuará... - - -@seealso - - -@node Mensurstriche layout -@unnumberedsubsubsec Mensurstriche layout - -@emph{Mensurstriche} (@q{líneas de mensuración}) es el término -aceptado para las barras de compás que se trazan entre los pentagramas -de un sistema pero no dentro de los propios pentagramas. Es una forma -común de preservar el aspecto visual de las duraciones del original, -es decir, sin tener que dividir las notas sincopadas en las barras de -compás, y al mismo tiempo ofrecer la ayuda orientativa que -proporcionan las barras de compás. - - -@lilypondfile[verbatim,lilyquote,texidoc] -{mensurstriche-layout-bar-lines-between-the-staves.ly} - - -@seealso -@c ... and reference to other sections ... - - -@node Transcribing Gregorian chant -@unnumberedsubsubsec Transcribing Gregorian chant - -El canto gregoriano se puede transcribir a notación moderna con -ciertos trucos sencillos. - -@b{Plicas}. Todas las plicas se pueden eliminar de una vez retirando -el grabador @code{Stem_engraver} del contexto de voz: - - -@example -\layout @{ - ... - \context @{ - \Voice - \remove "Stem_engraver" - @} -@} -@end example - -Sin embargo, en ciertos estilos de transcripción, se usan plicas de -forma ocasional, por ejemplo para indicar la transición a partir de un -recitativo monotónico a un gesto melódico fijo. En estos casos -podemos usar bien @code{\override Stem #'transparent = ##t} o bien -@code{\override Stem #'length = #0}, y restaurar la plica cuando se -necesite con el correspondiente @code{\once \override Stem -#'transparent = ##f} (véase el ejemplo de abajo). - -@b{Compás}. Para el canto no medido, existen diversas alternativas. - -Se puede eliminar el grabador Time_signature_engraver del contexto de -Staff sin ningún efecto secundario negativo. La alternativa, que es -hacer transparente la indicación de compás, deja un espacio en blanco -en la partitura, pues la indicación invisible sigue ocupando un -espacio. - -En muchos casos da un buen resultado @code{\set Score.timing = ##f}. -Otra alternativa es utilizar \@code{\CadenzaOn} y @code{\CadenzaOff}. - -Para quitar las barras de compás, el enfoque radical consiste en -retirar (mediante la instrucción @code{\remove}) el grabador -Bar_engraver del contexto de pentagrama Staff. Una vez más, en vez de -ello podemos usar @code{\override BarLine #'transparent = ##t} si se -necesita ocasionalmente una barra de compás. - -Un tipo de transcripción muy común es el canto de recitativo, en el -que la nota repetida se indica con una breve. Se puede tratar el -texto del tono de recitativo de dos maneras. Podemos ponerlo como una -sola sílaba alineada por la izquierda: - -@lilypond[verbatim,ragged-right] -\include "gregorian.ly" -chant = \relative c' { - \clef "G_8" - c\breve c4 b4 a c2 c4 \divisioMaior - c\breve c4 c f, f \finalis -} - -verba = \lyricmode { - \once \override LyricText #'self-alignment-X = #-1 - "Noctem quietam et" fi -- nem per -- fec -- tum - \once \override LyricText #'self-alignment-X = #-1 - "concedat nobis Dominus" om -- ni -- po -- tens. -} -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics = "one" \lyricsto melody \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Bar_engraver" - \override Stem #'transparent = ##t - } - } -} -@end lilypond - -Esto funciona bien en la medida en que el texto no comprenda un salto -de línea. Si es el caso, una alternativa sería añadir notas ocultas a -la partitura, en combinación con cambios en la visibilidad de las -plicas: - - -@lilypond[verbatim,ragged-right] -\include "gregorian.ly" -chant = \relative c' { - \clef "G_8" - \set Score.timing = ##f - c\breve \override NoteHead #'transparent = ##t c c c c c - \revert NoteHead #'transparent - \override Stem #'transparent = ##f \stemUp c4 b4 a - \override Stem #'transparent = ##t c2 c4 \divisioMaior - c\breve \override NoteHead #'transparent = ##t c c c c c c c - \revert NoteHead #'transparent c4 c f, f \finalis -} - -verba = \lyricmode { - No -- ctem qui -- e -- tam et fi -- nem per -- fec -- tum - con -- ce -- dat no -- bis Do -- mi -- nus om -- ni -- po -- tens. -} - -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics \lyricsto "melody" \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \override BarLine #'transparent = ##t - \override Stem #'transparent = ##t - } - } -} -@end lilypond - -Otra situación común es la transcripción de cantos neumáticos o -melismáticos, es decir, cantos con un número variable de notas en cada -sílaba. En este caso, podemos establecer los grupos de sílabas -claramente separados, normalmente también las subdivisiones de un -melisma mayor. Una forma de conseguirlo es usar un @code{\time} fijo, -p.ej. 1/4, y dejar que cada sílaba o grupo de notas llene uno de esos -compases, con la ayuda de grupos de valoración especial o duraciones -más breves. Si las líneas divisorias y todas las demás indicaciones -rítmicas se hacen transparentes, y el espacio que rodea las líneas -divisorias se aumenta, ello proporciona una aceptable representación -del original, en notación moderna. - -Para evitar que las sílabas de distinta anchura (como @qq{-ri} y -@qq{-rum}) dispongan los grupos de notas de las sílabas de forma -irregular, se puede ajustar la propiedad @code{#'X-extent} del objeto -@code{LyricText} a un valor fijo. Otra forma más engorrosa sería -añadir las sílabas como elementos de @code{\markup}. Si se necesitan -más ajustes posteriormente, esto se puede hacer fácilmente con -@q{notas} @code{s}. - -@lilypond[verbatim,quote] -spiritus = \relative c' { - \time 1/4 - \override Lyrics.LyricText #'X-extent = #'(0 . 3) - d4 \times 2/3 { f8 a g } g a a4 g f8 e - d4 f8 g g8 d f g a g f4 g8 a a4 s - \times 2/3 { g8 f d } e f g a g4 -} - -spirLyr = \lyricmode { - Spi -- ri -- _ _ tus _ Do -- mi -- ni _ re -- ple -- _ vit _ - or -- _ bem _ ter -- ra -- _ rum, al -- _ _ le -- _ lu - -- _ ia. -} -\score { - \new Staff << - \new Voice = "chant" \spiritus - \new Lyrics = "one" \lyricsto "chant" \spirLyr - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \override BarLine #'X-extent = #'(-1 . 1) - \override Stem #'transparent = ##t - \override Beam #'transparent = ##t - \override BarLine #'transparent = ##t - \override TupletNumber #'transparent = ##t - } - } -} -@end lilypond - -@c extract from 1.6.1.1 - -@seealso -@c ... and reference to other sections ... - - -@node Ancient and modern from one source -@unnumberedsubsubsec Ancient and modern from one source - -Continuará... - - -@seealso - - -@node Editorial markings -@unnumberedsubsubsec Editorial markings - -Continuará... - - -@seealso - diff --git a/Documentation/es/user/changing-defaults.itely b/Documentation/es/user/changing-defaults.itely deleted file mode 100644 index 20d07a0965..0000000000 --- a/Documentation/es/user/changing-defaults.itely +++ /dev/null @@ -1,3155 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore -Translation of GIT committish: e16bb64a802f4f6a8b66c8714d6094f1866af6c0 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Changing defaults -@chapter Changing defaults - -El objetivo del diseño de LilyPond es proporcionar la más alta calidad -de los resultados, de forma predeterminada. A pesar de ello, podría -tener que cambiar este resultado predeterminado. La disposición sobre -el papel se controla a través de un amplio número de @q{botones e -interruptores} llamados en su conjunto @q{propiedades}. En el Manual -de aprendizaje podemos encontrar una introducción en forma de tutorial -al acceso y modificación de estas propiedades, véase -@rlearning{Tweaking output}. Éste debería leerse en primer lugar. -Este capítulo cubre un terreno similar, pero con un estilo más -adecuado para un manual de referencia. - -@cindex Referencia de funcionamiento interno - -La descripción definitiva de los controles que están dipsonibles para -su ajuste fino están en un documento aparte: @rinternalsnamed{Top,la -Referencia de funcionamiento interno}. Dicho manual relaciona todas -las variables, funciones y opciones que se encuentran disponibles en -LilyPond. Está escrito como un documento HTML, que se puede encontrar -en -@c leave the @uref as one long line. -@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line}, -pero que también va incluido en el paquete de la documentación de LilyPond. - -Internamente, LilyPond utiliza el lenguaje Scheme (un dialecto de -LISP) para aportar la infraestructura. La sobreescritura de las -decisiones de disposición da acceso efectivo a las interioridades del -programa, lo que requiere código de Scheme como entrada. Los -elementos de Scheme se inauguran dentro de un archivo @code{.ly} con -el símbolo de cuadradillo @code{#}.@footnote{@rlearning{Scheme -tutorial} contiene un breve tutorial sobre la introducción de números, -listas, cadenas y símbolos en Scheme.} - -@menu -* Interpretation contexts:: -* Explaining the Internals Reference:: -* Modifying properties:: -* Useful concepts and properties:: -* Advanced tweaks:: -@end menu - - -@node Interpretation contexts -@section Interpretation contexts - -Esta sección explica qué son los contextos y cómo modificarlos. - -@menu -* Contexts explained:: -* Creating contexts:: -* Modifying context plug-ins:: -* Changing context default settings:: -* Defining new contexts:: -* Aligning contexts:: -@end menu - - -@seealso -Manual de aprendizaje: -@rlearning{Contexts and engravers}. - -Archivos de inicio: -@file{ly/@/engraver@/-init@/.ly}, -@file{ly/@/performer@/-init@/.ly}. - -Fragmentos de código: -@rlsr{Contexts and engravers}. - -Referencia de funcionamiento interno: -@rinternals{Contexts}, -@rinternals{Engravers and Performers}. - - -@node Contexts explained -@subsection Contexts explained - -Los contextos se disponen de forma jerárquica: - -@menu -* Score - the master of all contexts:: -* Top-level contexts - staff containers:: -* Intermediate-level contexts - staves:: -* Bottom-level contexts - voices:: -@end menu - -@node Score - the master of all contexts -@unnumberedsubsubsec Score - the master of all contexts - -Este es el contexto de notación del nivel más alto. Ningún otro -contexto puede contener a un contexto Score. De forma predeterminada, -el contexto Score maneja la administración de las indicaciones de -compás y se asegura de que ciertos elementos como claves, compases y -armaduras están siempre alineados entre los distintos pentagramas. - -Se crea implícitamente una instancia del contexto Score cuando se -procesa un bloque @code{\score @{@dots{}@}} o @code{\layout -@{@dots{}@}}, o explícitamente cuando se ejecuta una instrucción -@code{\new Score}. - -@node Top-level contexts - staff containers -@unnumberedsubsubsec Top-level contexts - staff containers - -@strong{@emph{StaffGroup}} - -Agrupa pentagramas y añade un corchete en la parte izquierda, formando -un grupo. Las líneas divisorias de los pentagramas contenidos se -conectan verticalmente. @code{StaffGroup} sólo consiste en una -colección de pentagramas, con un corchete delante y líneas divisorias -de arriba a abajo. - -@strong{@emph{ChoirStaff}} - -Idéntico a @code{StaffGroup} excepto que las barras de compás de los -pentagramas contenidos no se conectan verticalmente. - -@strong{@emph{GrandStaff}} - -Un grupo de pentagramas, con una llave en la parte izquierda que -abarca el grupo. Las barras de compás de los pentagramas contenidos -se conectan verticalmente. - -@strong{@emph{PianoStaff}} - -Igual que @code{GrandStaff}, pero contempla la posibilidad de poner el -nombre del instrumento a la izquierda del sistema. - -@node Intermediate-level contexts - staves -@unnumberedsubsubsec Intermediate-level contexts - staves - -@strong{@emph{Staff}} - -Maneja claves, barras de compás, tonalidades y alteraciones -accidentales. Puede contener contextos de @code{Voice}. - -@strong{@emph{RhythmicStaff}} - -Como @code{Staff}, pero para imprimir ritmos. Se ignoran las alturas -de las notas; las notas se imprimen sobre una línea. - -@strong{@emph{TabStaff}} - -Contexto para generar tablaturas. De forma predeterminada dispone la -expresión musical como una tablatura de guitarra, impresa sobre seis -líneas. - -@strong{@emph{DrumStaff}} - -Maneja el tipografiado para instrumentos de percusión. Puede contener -contextos @code{DrumVoice}. - -@strong{@emph{VaticanaStaff}} - -Igual que @code{Staff}, excepto que está pensado para tipografiar -piezas en estilo gregoriano. - -@strong{@emph{MensuralStaff}} - -Igual que @code{Staff}, excepto que está diseñado para tipografiar -piezas en estilo mensural. - - -@node Bottom-level contexts - voices -@unnumberedsubsubsec Bottom-level contexts - voices - -Los contextos del mismo nivel que Voice dan un valor inicial a ciertas -propiedades e inician los grabadores correspondientes. Siendo -contextos del nivel más bajo, no pueden contener a otros contextos. - -@strong{@emph{Voice}} - -Corresponde a una voz sobre un pentagrama. este contexto maneja la -conversión de las indicaciones dinámicas, plicas, barras, subíndices y -superíndices, ligaduras de expresión y de unión, y silencios. Tenemos -que crear instancias explícitas de este contexto si necesitamos varias -voces en el mismo pentagrama. - -@strong{@emph{VaticanaVoice}} - -Lo mismo que @code{Voice}, excepto que está diseñado para tipografiar -piezas en estilo gregoriano. - -@strong{@emph{MensuralVoice}} - -Lo mismo que @code{Voice}, con modificaciones para el tipografiado de -piezas en estilo mensural. - -@strong{@emph{Lyrics}} - -Corresponde a una voz con letra. Maneja la impresión de una sola -línea de letra. - -@strong{@emph{DrumVoice}} - -El contexto de voz utilizado en una pauta de percusión. - -@strong{@emph{FiguredBass}} - -El contexto en que los objetos @code{BassFigure} se crean a partir de -la entrada escrita en el modo @code{\figuremode}. - -@strong{@emph{TabVoice}} - -El contexto de voz utilizado dentro de un contexto @code{TabStaff}. -Se suele dejar que se cree implícitamente. - -@strong{@emph{ChordNames}} - -Tipografía nombres de acordes. - - -@node Creating contexts -@subsection Creating contexts - -Para partituras que sólo tienen una voz y un pentagrama, los contextos -se crean automáticamente. Para partituras más complejas, es necesario -crearlos a mano. Existen tres instrucciones que hacen esto. - -@itemize - -@item -La instrucción más fácil es @code{\new}, y es también la más rápida de -escribir. Se antepone a una expresión musical, por ejemplo - -@funindex \new -@cindex nuevos, contextos -@cindex Contexto, creación de - -@example -\new @var{tipo} @var{expresión_musical} -@end example - -@noindent -donde @var{tipo} es el nombre de un contexto (como @code{Staff} o -@code{Voice}). Esta instrucción crea un contexto nuevo, y empieza a -interpretar la @var{expresión_musical} con él. - -Una aplicación práctica de @code{\new} es una partitura con muchos pentagramas. -Cada parte que debe ir en su propio pentagrama, va precedida de -@code{\new Staff}. - -@lilypond[quote,verbatim,relative=2,ragged-right,fragment] -<< - \new Staff { c4 c } - \new Staff { d4 d } ->> -@end lilypond - -La instrucción @code{\new} puede también dar nombre al contexto, - -@example -\new @var{tipo} = @var{identificador} @var{música} -@end example -Sin embargo, este nombre especificado por el usuario sólo se utiliza -si no hay ya otro contexto anterior con el mismo nombre. - - -@funindex \context - -@item -Como @code{\new}, la instrucción @code{\context} también dirige una -expresión musical a un objeto de contexto, pero da al contexto un -nombre explícito. La sintaxis es - -@example -\context @var{tipo} = @var{identificador} @var{música} -@end example - -En esta forma, la instrucción buscará un contexto existente del -@var{tipo} especificado que tenga el nombre @var{identificador}. Si -ese contexto aún no existe, se crea un contexto nuevo con el nombre -especificado. Esto es útil si nos vamos a referir más tarde al -contexto. Por ejemplo, cuando se escribe la letra, la melodía está -dentro de un contexto con nombre - -@example -\context Voice = "@b{tenor}" @var{música} -@end example - -@noindent -de forma que los textos se puedan alienar correctamente con sus notas, - -@example -\new Lyrics \lyricsto "@b{tenor}" @var{letra} -@end example - -@noindent - -Otro uso posible de los contextos con nombre es la fusión de dos -expresiones musicales distintas en un solo contexto. En el siguiente -ejemplo, se introducen por separado las articulaciones y las notas, - -@example -musica = @{ c4 c4 @} -decoracion = @{ s4-. s4-> @} -@end example - -se combinan enviando los dos al mismo contexto @code{Voice}, - -@example -<< - \new Staff \context Voice = "A" \musica - \context Voice = "A" \decoracion ->> -@end example -@lilypond[quote,ragged-right] -music = { c4 c4 } -arts = { s4-. s4-> } -\relative c'' << - \new Staff \context Voice = "A" \music - \context Voice = "A" \arts ->> -@end lilypond - -Con este mecanismo, es posible definir un Urtext (una edición -original), con la posibilidad de poner articulaciones distintas sobre -las mismas notas. - -@cindex crear contextos - -@item -La tercera instrucción para crear contextos es -@example -\context @var{tipo} @var{música} -@end example - - -@noindent -Esto es similar a @code{\context} con @code{= @var{identificador}}, -pero se corresponde con cualquier contexto del tipo @var{tipo}, sin -importar qué nombre se le ha dado. - -Esta variante se usa con expresiones musicales que se pueden -interpretar en varios niveles. Por ejemplo, la instrucción -@code{\applyOutput} (véase @ref{Running a function on all layout -objects}). Sin una instrucción @code{\context} explícita, normalmente -se aplicaría a @code{Voice} - -@example -\applyOutput #'@var{contexto} #@var{función} % aplicar al contexto Voice -@end example - -Para que se interprete dentro de los niveles de @code{Score} o -@code{Staff}, utilice las siguientes formas: - -@example -\applyOutput #'Score #@var{función} -\applyOutput #'Staff #@var{función} -@end example - -@end itemize - - -@node Modifying context plug-ins -@subsection Modifying context plug-ins - -Los contextos de notación (como @code{Score} y @code{Staff}) no sólo -almacenan propiedades, también contienen «plug-ins» o complementos -llamados @q{grabadores} que crean elementos de notación. Por ejemplo, -el contexto @code{Voice} contiene un grabador -@code{Note_head_engraver} que crea las cabezas de nota y el contexto -@code{Staff} contiene un grabador @code{Key_signature_engraver} que -crea la indicación de compás. - -Para ver una descripción completa de todos y cada uno de los -complementos, consulte -@ifhtml -@rinternals{Engravers and Performers}. -@end ifhtml -@ifnothtml -Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Grabadores. -@end ifnothtml -Cada contexto que se describe en -@ifhtml -@rinternals{Contexts} -@end ifhtml -@ifnothtml -Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Contexto. -@end ifnothtml -relaciona los grabadores que se usan para ese contexto. - - -Puede ser de utilidad jugar un poco con estos complementos. Se hace -iniciando un contexto nuevo con @code{\new} o @code{\context} y -modificándolo: - -@funindex \with - -@example -\new @var{contexto} \with @{ - \consists @dots{} - \consists @dots{} - \remove @dots{} - \remove @dots{} - @emph{etc.} -@} -@{ - @emph{..música..} -@} -@end example - -@noindent -donde los @dots{} debe ser el nombre de un grabador. Aquí tenemos un -ejemplo sencillo que suprime los grabadores -@code{Time_signature_engraver} y @code{Clef_engraver} de un contexto -@code{Staff}: - -@lilypond[quote,relative=1,verbatim,fragment] -<< - \new Staff { - f2 g - } - \new Staff \with { - \remove "Time_signature_engraver" - \remove "Clef_engraver" - } { - f2 g2 - } ->> -@end lilypond - -En el segundo pentagrama no hay indicación de compás ni clave. Éste -es un método bastante rudimentario de hacer que desaparezcan los -objetos porque afecta a todo el pentagrama. Este método también -afecta al espaciado, lo que puede ser deseable o no serlo. Se -muestran métodos más sofisticados para quitar objetos en -@rlearning{Visibility and color of objects}. - -El ejemplo siguiente muestra una aplicación práctica. Normalmente las -líneas divisorias y las indicaciones de compás están sincronizadas a -lo largo de toda la partitura. Lo hacen los grabadores -@code{Timing_translator} y @code{Default_bar_line_engraver}. Estos -complementos mantienen al día la administración de las indicaciones de -compás, posición dentro del compás, etc. Moviendo estos grabadores -desde el contexto de @code{Score} al de @code{Staff}, podemos -conseguir una partitura en la que cada pentagrama tiene su propio -compás independiente. - -@cindex polimétricas, partituras -@cindex compases distintos al mismo tiempo - -@lilypond[quote,relative=1,ragged-right,verbatim,fragment] -\new Score \with { - \remove "Timing_translator" - \remove "Default_bar_line_engraver" -} << - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 3/4 - c4 c c c c c - } - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 2/4 - c4 c c c c c - } ->> -@end lilypond - - -@node Changing context default settings -@subsection Changing context default settings - -Los ajustes de contexto que están preparados para usarse de forma -predeterminada en los contextos @code{Score}, @code{Staff} y -@code{Voice}, se pueden especificar dentro de un bloque -@code{\layout}, como se ilustra en el ejemplo siguiente. El bloque -@code{\layout} se debe colocar dentro del bloque @code{\score} en que -se quiere que haga efecto, pero fuera de la música. - -Observe que la propia instrucción @code{\set} y el contexto se deben -omitir cuando se especifican de esta manera los valores de contexto -predeterminados: - -@lilypond[quote,verbatim] -\score { - \relative c'' { - a4^"Really small, thicker stems, no time signature" a a a - a a a a - } - \layout { - \context { - \Staff - fontSize = #-4 - \override Stem #'thickness = #4.0 - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -En este ejemplo, la instrucción @code{\Staff} especifica que los -ajustes siguientes se apliquen a todos los pentagramas dentro del -bloque de partitura. - -Se pueden realizar de forma similar modificaciones al contexto -@code{Score} o a todos los contextos @code{Voice}. - -@knownissues - -No es posible recolectar cambios de contexto dentro de una variable y -aplicarlos a una definición de @code{\context} por referencia a dicha -variable. - -La instrucción @code{\RemoveEmptyStaffContext} sobreescribe nuestros -ajustes en curso para @code{\Staff}. Si queremos cambiar los valores -predeterminados para un pentagrama que utilice -@code{\RemoveEmptyStaffContext}, debe hacerlo después de llamar a -@code{\RemoveEmptyStaffContext}, o sea - -@example -\layout @{ - \context @{ - \RemoveEmptyStaffContext - - \override Stem #'thickness = #4.0 - @} -@} -@end example - - -@node Defining new contexts -@subsection Defining new contexts - -Los contextos específicos, como @code{Staff} y @code{Voice}, están -construidos a base de bloques sencillos. Es posible crear nuevos -tipos de contextos con combinaciones distintas de añadidos grabadores. - -El siguiente ejemplo muestra cómo construir un tipo diferente de contexto de -@code{Voice} partiendo de cero. Será parecido a -@code{Voice}, pero imprime solamente cabezas centradas en forma de barra inclinada. Se puede usar -para indicar improvisación en piezas de jazz, - -@c KEEP LY -@lilypond[quote,ragged-right] -\layout { \context { - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Rhythmic_column_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -} -\context { \Staff - \accepts "ImproVoice" -}} - -\relative c'' { - a4 d8 bes8 \new ImproVoice { c4^"ad lib" c - c4 c^"desvístete" c_"mientras juegas :)" c } - a1 -} -@end lilypond - - -Estos ajustes se definen dentro de un bloque @code{\context} que a su -vez está dentro de un bloque @code{\layout}, - -@example -\layout @{ - \context @{ - @dots{} - @} -@} -@end example - -En el siguiente análisis, la entrada de ejemplo que se muestra debe ir -en el lugar de los puntos suspensivos @dots{} del fragmento anterior. - -En primer lugar es necesario definir un nombre para el nuevo contexto: - -@example -\name ImproVoice -@end example - -Debido a que es parecido al contexto @code{Voice}, queremos órdenes -que funcionen sobre contextos de @code{Voice} (existentes) para que -siga funcionando. Esto se consigue dando al contexto nuevo un alias -@code{Voice}, - -@example -\alias Voice -@end example - -El contexto imprimirá notas y textos explicativos, por ello tenemos -que añadir los grabadores que aportan esta funcionalidad, - -@example -\consists Note_heads_engraver -\consists Text_engraver -@end example - -Pero sólo necesitamos esto en la línea central, - -@example -\consists Pitch_squash_engraver -squashedPosition = #0 -@end example - -El grabador @rinternals{Pitch_squash_engraver} modifica las cabezas de -nota (creadas por el grabador @rinternals{Note_heads_engraver}) y -establece sus posiciones verticales al valor de -@code{squashedPosition}, en este caso@tie{}@code{0}, la línea central. - -Las notas parecen barras inclinadas y no tienen plica, - -@example -\override NoteHead #'style = #'slash -\override Stem #'transparent = ##t -@end example - -Todos estos añadidos tienen que cooperar, y esto se consigue con un -añadido especial, que se debe marcar con la palabra clave -@code{\type}. Este será siempre @code{Engraver_group}, - -@example -\type "Engraver_group" -@end example - -Al juntarlo todo, obtenemos - -@example -\context @{ - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -@} -@end example - -@funindex \accepts -Los contextos dan lugar a jerarquías. Queremos colgar el contexto -@code{ImproVoice} bajo el contexto @code{Staff}, como simples -@code{Voice}s normales. Por tanto, modificamos la definición de -@code{Staff} con la instrucción @code{\accepts} (acepta), - -@example -\context @{ - \Staff - \accepts ImproVoice -@} -@end example - -@funindex \denies -Lo opuesto a @code{\accepts} (acepta) es @code{\denies} (deniega), lo -que a veces se necesita cuando se están reutilizando definiciones de -contexto existentes. - -Ponemos ambos dentro de un bloque @code{\layout}, como - -@example -\layout @{ - \context @{ - \name ImproVoice - @dots{} - @} - \context @{ - \Staff - \accepts "ImproVoice" - @} -@} -@end example - -Así pues, la salida que aparece al comienzo de esta sub-sección se -puede escribir como - -@example -\relative c'' @{ - a4 d8 bes8 - \new ImproVoice @{ - c4^"ad lib" c - c4 c^"undress" - c c_"while playing :)" - @} - a1 -@} -@end example - - -@node Aligning contexts -@subsection Aligning contexts - -Los contextos nuevos se pueden alinear por encima o por debajo de -otros contextos existentes. Esto podría ser de utilidad al preparar -un pentagrama vocal (@rlearning{Vocal ensembles}) y un ossia, - -@cindex ossia -@findex alignAboveContext -@findex alignBelowContext - -@lilypond[quote,ragged-right] -ossia = { f4 f f f } -\score{ - \relative c' \new Staff = "main" { - c4 c c c - << - \new Staff \with { alignAboveContext = #"main" } \ossia - { d8 f d f d f d f } - >> - } -} -@end lilypond - -@cindex nested contexts -@cindex contexts, nested - -@funindex \accepts -@funindex \denies - -Los contextos como @code{PianoStaff} pueden llevar dentro otros -contextos anidados. Los contextos que se pueden aceptar para su -anidamiento están definidos por la lista @qq{accepts} (acepta) de un -contexto. Los contextos que no están en esta lista se colocan debajo -del contexto exterior en la partitura impresa. Por ejemplo, el -contexto @code{PianoStaff} está definido para que acepte contextos -@code{Staff} y @code{FiguredBass} de forma predeterminada, pero no un -contexto @code{Lyrics}, por ejemplo. Así pues, en la siguiente -estructura la letra se sitúa debajo del sistema de piano en lugar de -colocarse entre los dos pentagramas: - -@lilypond[verbatim,quote,relative=1] -\new PianoStaff -<< - \new Staff { e4 d c2 } - \addlyrics { Three blind mice } - \new Staff { - \clef "bass" - { c,1 } - } ->> -@end lilypond - -La lista @qq{accepts} de un contexto se puede modificar para que -incluya contextos anidados adicionales, y así si quisiéramos que la -letra apareciese entre los dos pentagramas podríamos usar: - -@lilypond[verbatim,quote,relative=1] -\new PianoStaff \with { \accepts Lyrics } -<< - \new Staff { e4 d c2 } - \addlyrics { Three blind mice } - \new Staff { - \clef "bass" - { c,1 } - } ->> -@end lilypond - -Lo contrario de @code{\accepts} (acepta) es @code{\denies} (deniega); -esto suprime un contexto de la lista @qq{accepts}. - - -@node Explaining the Internals Reference -@section Explaining the Internals Reference - - -@menu -* Navigating the program reference:: -* Layout interfaces:: -* Determining the grob property:: -* Naming conventions:: -@end menu - - - -@node Navigating the program reference -@subsection Navigating the program reference - -Supongamos que queremos mover la indicación de digitación del -fragmento siguiente: - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -Si hace una visita a la documentación en busca de instrucciones de -digitación (en @ref{Fingering instructions}), encontrará: - -@quotation -@strong{Véase también} - -Referencia de funcionamiento interno: @rinternals{Fingering}. - -@end quotation - -@ifnothtml -La referencia del programador se encuentra disponible en forma de -documento HTML. Se recomienda mucho que lo lea en la forma HTML, bien -en línea o bien descargando los archivos de la documentación HTML. -Esta sección sería mucho más difícil de entender si está utilizando el -manual en formato PDF. -@end ifnothtml - -Siga el enlace que lleva a @rinternals{Fingering}. Al principio de la -página, puede ver - -@quotation -Los objetos de digitación se crean por parte de: -@rinternals{Fingering_engraver} y @rinternals{New_fingering_engraver}. -@end quotation - -Siguiendo los enlaces relacionados dentro de la referencia del -programa, podemos seguir el flujo de información dentro del programa: - -@itemize - -@item @rinternals{Fingering}: -los objetos @rinternals{Fingering} se crean por parte de: -@rinternals{Fingering_engraver} - -@item @rinternals{Fingering_engraver}: -Tipos de música aceptados: @rinternals{fingering-event} - -@item @rinternals{fingering-event}: -El tipo de evento musical @code{fingering-event} está descrito en -Expresiones musicales con el nombre de @rinternals{FingeringEvent} -@end itemize - -Este camino se recorre en contra de la corriente de información del -programa: comienza por la salida y acaba en el evento de entrada. -También podríamos haber empezado por un evento de la entrada, y leído -siguiendo el flujo de información terminando en su caso en el objeto -(u objetos) de la salida. - -La referencia del programa también se puede examinar como un documento -normal. Contiene capítulos que tratan de -@ifhtml -@rinternals{Music definitions}, -@end ifhtml -@ifnothtml -@code{Music definitions} -@end ifnothtml -de la @rinternals{Translation}, y del @rinternals{Backend}. Cada uno -de los capítulos relaciona todas las definiciones utilizadas y todas -las propiedades que se pueden ajustar. - - -@node Layout interfaces -@subsection Layout interfaces - -@cindex interfaz de la presentación -@cindex presentación, interfaz de la -@cindex grob - -La página HTML que pudimos ver en la sección anterior describe el -objeto de presentación llamado @rinternals{Fingering}. Dicho objeto -es un símbolo dentro de la partitura. Tiene propiedades que guardan -números (como grosores y direcciones), pero también punteros a objetos -relacionados. Un objeto de presentación también se llama un -@emph{Grob}, que es una abreviatura de Graphical Object (objeto -gráfico). Para ver más detalles acerca de los objetos gráficos o -Grobs, consulte @rinternals{grob-interface}. - -La página dedicada a @code{Fingering} relaciona las definiciones del -objeto @code{Fingering}. Por ejemplo, la página dice - -@quotation -@code{relleno} (dimensión, en espacios de pentagrama): - -@code{0.5} -@end quotation - -@noindent -lo que significa que el número se mantendrá a una distancia de al -menos 0.5 de la cabeza de la nota. - - -Cada objeto de presentación puede tener varias funciones como elemento -notacional o tipográfico. Por ejemplo, el objeto de digitación -Fingering tiene los siguientes aspectos - -@itemize -@item -Su tamaño es independiente del espaciado horizontal, al contrario de -las ligaduras o las barras de las figuras. - -@item -Es un elemento de texto. Casi seguro que es un texto muy corto. - -@item -este elemento de texto se tipografía con un tipo de letra, no como las -ligaduras o las barras de las figuras. - -@item -Horizontalmente, el centro del símbolo se debe alinear con el centro -de la cabeza de la nota. - -@item -Verticalmente, el símbolo se coloca cerca de la nota y del pentagrama. - -@item -La posición vertical también está coordinada con otros símbolos de -superíndice y de subíndice. -@end itemize - -Cada uno de estos aspectos se capta en lo que se llaman -@emph{interface}s, que se relacionan al final de la página dedicada a -@rinternals{Fingering} - -@quotation -Este objeto contempla los siguientes interfaces: -@rinternals{item-interface}, -@rinternals{self-alignment-interface}, -@rinternals{side-position-interface}, @rinternals{text-interface}, -@rinternals{text-script-interface}, @rinternals{font-interface}, -@rinternals{finger-interface} y @rinternals{grob-interface}. -@end quotation - -Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la -página del respectivo interfaz del objeto. Cada interfaz tiene un -cierto número de propiedades. Algunas de ellas no son para que el -usuario las pueda ajustar (@q{Propiedades internas}), pero otras sí se -pueden modificar. - -Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero -realmente esto no significa mucho. El archivo de inicialización -(véase @rlearning{Other sources of information}) -@file{scm/@/define@/-grobs@/.scm} muestra el alma del @q{objeto}, - -@example -(Fingering - . ((padding . 0.5) - (avoid-slur . around) - (slur-padding . 0.2) - (staff-padding . 0.5) - (self-alignment-X . 0) - (self-alignment-Y . 0) - (script-priority . 100) - (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) - (font-encoding . fetaNumber) - (font-size . -5) ; don't overlap when next to heads. - (meta . ((class . Item) - (interfaces . (finger-interface - font-interface - text-script-interface - text-interface - side-position-interface - self-alignment-interface - item-interface)))))) -@end example - -@noindent -Como podemos ver, el objeto @code{Fingering} no es más que un montón -de valores de variables, y la página web de la Referencia de -funcionamiento interno se genera directamente a partir de esta -definición. - - -@node Determining the grob property -@subsection Determining the grob property - -Recordemos que queríamos cambiar la posición del @b{2} en - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota, -tenemos que negociar con el interfaz asociado con esta colocación. -Esto se hace usando @code{side-position-interface}. La página que -describe este interface dice: - -@quotation -@code{side-position-interface} - -Colocar un objeto víctima (este mismo) junto a otros objetos (el -soporte). La propiedad @code{direction} significa dónde poner el -objeto víctima con relación al soporte (¿a la izquierda o a la -derecha, encima o debajo?) -@end quotation - -@cindex relleno -@noindent -Debajo de esta descripción, la variable @code{padding} (relleno) se describe como - -@quotation -@table @code -@item padding -(dimensión, en espacios de pentagrama) - -Añadir esta cantidad de espacio adicional entre objetos que están unos -junto a otros. -@end table -@end quotation - -Aumentando el valor de @code{padding}, podemos alejar la cifra de -digitación de la cabeza de la nota. La siguiente orden inserta un -espacio en blanco de 3 espacios de pentagrama entre la nota y la -digitación: -@example -\once \override Voice.Fingering #'padding = #3 -@end example - -Al insertar esta instrucción antes de que se haya creado el objeto -Fingering, es decir, antes del @code{c2}, llegamos al siguiente -resultado: - -@lilypond[quote,relative=2,fragment,verbatim] -\once \override Voice.Fingering #'padding = #3 -c-2 -\stemUp -f -@end lilypond - -En este caso, el contexto de este truco es @code{Voice}. Este hecho -se puede deducir también a partir de la referencia del programa, ya -que la página dedicada al añadido @rinternals{Fingering_engraver} dice - -@quotation -El grabador Fingering_engraver es parte de los contextos: @dots{} -@rinternals{Voice} -@end quotation - - - -@node Naming conventions -@subsection Naming conventions - -@ignore -Another thing that is needed, is an overview of the various naming -conventions: - - scheme functions: lowercase-with-hyphens (incl. one-word -names) - scheme functions: ly:plus-scheme-style - music events, music classes and music properties: -as-scheme-functions - Grob interfaces: scheme-style - backend properties: scheme-style (but X and Y!) - contexts (and MusicExpressions and grobs): Capitalized or -CamelCase - context properties: lowercaseFollowedByCamelCase - engravers: -Capitalized_followed_by_lowercase_and_with_underscores - -Which of these are conventions and which are rules? -Which are rules of the underlying language, and which are -LP-specific? -@end ignore - -@node Modifying properties -@section Modifying properties - -@menu -* Overview of modifying properties:: -* The set command:: -* The override command:: -* The tweak command:: -* set versus override:: -@end menu - - -@node Overview of modifying properties -@subsection Overview of modifying properties - -Cada contexto es responsable de la creación de ciertos tipos de -objetos gráficos. Los ajustes que se usan para imprimir estos objetos -también se almacenan por contexto. Mediante la modificación de estos -ajustes, se puede alterar la apariencia de los objetos. - -La sintaxis de esto es - -@example -\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} -@end example - -Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem} -o @code{NoteHead}, y @var{propiedad} es una variable interna del -sistema de formateo (@q{propiedad del grob} o @q{propiedad de -disposición}). Este último es un símbolo, y por ello debe ir -precedido de un apóstrofo. La subsección @ref{Modifying properties} -explica cómo se deben cumplimentar los conceptos @var{nombre}, -@var{propiedad} y @var{valor}. Aquí sólo nos ocuparemos de la -funcionalidad des esta instrucción. - -La instrucción - -@verbatim -\override Staff.Stem #'thickness = #4.0 -@end verbatim - -@noindent -hace más gruesas las plicas (el valor predeterminado es 1.3, con el -grosor de una línea del pentagrama como unidad). Puesto que la -instrucción especifica como contexto a @code{Staff}, sólo se aplica al -pentagrama actual. Otros pentagramas mantienen su aspecto normal. -Aquí vemos la instrucción en pleno funcionamiento: - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\override Staff.Stem #'thickness = #4.0 -c4 -c4 -c4 -@end lilypond - -La instrucción @code{\override} modifica la definición de la plica -@code{Stem} dentro del pentagrama en curso @code{Staff}. Después de -que la instrucción se ha interpretado, todas las plicas se engrosan. - -De manera análoga a @code{\set}, el argumento @var{contexto} se puede -omitir, ocasionando que se utilice el contexto predeterminado -@code{Voice}. Al añadir @code{\once} se aplica el cambio durante un -solo paso de tiempo. - -@lilypond[quote,fragment,verbatim,relative=2] -c4 -\once \override Stem #'thickness = #4.0 -c4 -c4 -@end lilypond - -El @code{\override} se debe hacer antes de que el objeto se inicia. -Por tanto, al alterar objetos @emph{Spanner} «de extensión» como -ligaduras o barras, la instrucción @code{\override} se debe ejecutar -en el momento en que se crea el objeto. En este ejemplo: - -@lilypond[quote,fragment,verbatim,relative=2] -\override Slur #'thickness = #3.0 -c8[( c -\override Beam #'thickness = #0.6 -c8 c]) -@end lilypond - -@noindent -la ligadura es más gruesa pero la barra no lo es. Esto es así porque -la instrucción para @code{Beam}, la barra, va después de que la barra -se ha iniciado, y por ello no tiene ningún efecto. - -De forma análoga a @code{\unset}, la instrucción @code{\revert} para -un contexto deshace una instrucción @code{\override}; como con -@code{\unset}, solamente afecta a los ajustes que se hicieron dentro -del mismo contexto. En otras palabras, el @code{\revert} del -siguiente ejemplo no hace nada. - -@example -\override Voice.Stem #'thickness = #4.0 -\revert Staff.Stem #'thickness -@end example - -Algunas opciones «trucables» se llaman @q{subpropiedades} y residen -dentro de las propiedades normales. Para trucarlas, utilice -instrucciones de la forma - -@c leave this as a long long -@example -\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} -@end example - -@noindent -tales como - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - - -@seealso -Referencia de funcionamiento interno: -@rinternals{OverrideProperty}, -@rinternals{RevertProperty}, -@rinternals{PropertySet}, -@rinternals{Backend}, -@rinternals{All layout objects}. - - -@knownissues - -El «back-end» o motor de salida no es muy estricto en la comprobación -de tipos de las propiedades de objetos. Las referencias cíclicas en -valores Scheme de propiedades pueden producir cuelgues o salidas -abruptas, o las dos cosas. - - -@node The set command -@subsection The @code{\set} command - -@cindex propiedades -@funindex \set -@cindex cambiar propiedades - -Cada contexto puede tener distintas @emph{propiedades}, variables -contenidas dentro de ese contexto. Se pueden cambiar mientras dura el -paso de interpretación. Se consigue insertando la instrucción -@code{\set} dentro de la música: - -@example -\set @var{contexto}.@var{propiedad} = #@var{valor} -@end example - -Por ejemplo: -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set Score.skipBars = ##t -R1*2 -@end lilypond - -Estas instrucción salta los compases que no tienen notas. El -resultado es que los silencios multicompás se condensan. El valor -asignado es un objeto de Scheme. En este caso, es @code{#t}, el valor -booleano True o verdadero. - -Si se omite el argumento @var{context}, entonces se utiliza el -contexto actual de nivel más bajo (normalmente @code{ChordNames}, -@code{Voice} o @code{Lyrics}). En este ejemplo: - -@lilypond[quote,verbatim,relative=2,fragment] -c8 c c c -\set autoBeaming = ##f -c8 c c c -@end lilypond - -@noindent -el argumento @var{contexto} de la instrucción @code{\set} se omite, -así pues el barrado automático se desactiva en la voz actual. Observe -que el contexto de nivel más bajo no siempre contiene la propiedad que -queremos cambiar (por ejemplo, no tendrá ningún efecto intentar -establecer un valor para la propiedad @code{skipBars} del contexto de -nivel más bajo, en este caso @code{Voice}). - -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set skipBars = ##t -R1*2 -@end lilypond - -Los contextos son jerárquicos, y si se ha especificado un contexto -mayor, por ejemplo @code{Staff}, entonces el cambio se aplicaría -también a todos los contextos @code{Voice} dentro del pentagrama -actual. El cambio se aplica @q{al vuelo}, durante la música, de -manera que el ajuste sólo afecta al segundo grupo de corcheas. - -@funindex \unset - -También existe una instrucción @code{\unset}: -@example -\unset @var{contexto}.@var{propiedad} -@end example - -@noindent -que elimina la definición de @var{propiedad}. Esta instrucción -elimina la definición solamente si está establecida dentro de -@var{contexto}, de manera que - -@example -\set Staff.autoBeaming = ##f -@end example - -@noindent -introduce un ajuste de la propiedad en el nivel de @code{Staff}. El -ajuste también se aplica a la @code{Voice} actual. Sin embargo: - -@example -\unset Voice.autoBeaming -@end example - -@noindent -no tiene ningúun efecto. Para cancelar este ajuste, se debe -especificar el @code{\unset} en el mismo nivel que el @code{\set} -original. Dicho de otra forma, para deshacer el efecto de -@code{Staff.autoBeaming = ##f} se necesita -@example -\unset Staff.autoBeaming -@end example - -Como @code{\set}, el argumento @var{contexto} no se tiene que -especificar para un contexto del nivel más bajo, por lo que los dos -enunciados - -@example -\set Voice.autoBeaming = ##t -\set autoBeaming = ##t -@end example - -@noindent -son equivalentes. - - -@cindex \once -Los ajustes que se aplican solamente a un único paso de tiempo se -pueden escribir con @code{\once}, por ejemplo en - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\once \set fontSize = #4.7 -c4 -c4 -@end lilypond - -la propiedad @code{fontSize} se deshace automáticamente después de la -segunda nota. - -En el manual de Referencia de funcionamiento interno hay una -descripción completa de todas las propiedades de contexto disponibles, -consulte -@ifhtml -@rinternals{Tunable context properties}. -@end ifhtml -@ifnothtml -Traducción @expansion{} Propiedades de contexto modificables por el -usuario. -@end ifnothtml - - - -@node The override command -@subsection The @code{\override} command - -Las instrucciones que modifican la salida tienen por lo general un -aspecto como - -@example -\override Voice.Stem #'thickness = #3.0 -@end example - -@noindent -Para construir este truco debemos determinar los siguientes datos: - -@itemize -@item el contexto: aquí @code{Voice}. -@item el objeto de presentación: aquí @code{Stem}. -@item la propiedad de presentación: aquí @code{thickness}. -@item un valor adecuado: aquí @code{3.0}. -@end itemize - -Ciertas opciones ajustables se denominan @q{subpropiedades} y residen -en el interior de las propiedades normales. Para modificarlas utilice -instrucciones de la forma - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - -@cindex documentación interna -@cindex buscar objetos gráficos -@cindex gráficos, descripción de los objetos -@cindex trucos -@funindex \override -@cindex interna, documentación - -Para muchas propiedades, independientemente del tipo de datos de la -propiedad, si se establece el valor de la propiedad a falso -(@code{##f}) se producirá su desactivación, ocasionando que LilyPond -ignore por completo dicha propiedad. Esto es especialmente útil para -«apagar» propiedades de grobs (objetos gráficos) que de otra manera -causarína problemas. - -Mostraremos a continuación cómo localizar esta información en el -manual de notación y en la referencia de funcionamiento interno. - - -@node The tweak command -@subsection The @code{\tweak} command - -@funindex \tweak -@cindex trucar - -En ocasiones es posible tomar un atajo para realizar el ajuste fino de -los objetos gráficos. Para objetos que reusultan directamente de un -elemento de código de la entrada, puede usar la función @code{\tweak}, -por ejemplo - -@lilypond[relative=2,verbatim] -< c - \tweak #'color #red - d - g - \tweak #'duration-log #1 - a -> 4 --\tweak #'padding #8 --^ -@end lilypond - -@cindex chord, modifying one note in - -Pero el uso principal de la instrucción @code{\tweak} es modificar -solamente uno de varios elementos de notación que dan comienzo en el -mismo momento musical, como las notas de un acorde, o corchetes de -tresillo que empiezan al mismo tiempo. - -Para ver una introducción a la sintaxis y los usos de la instrucción -tweak, consulte @rlearning{Tweaking methods}. - -La instrucción @code{\tweak} fija una propiedad en el objeto que viene -a continuación de forma directa, sin necesidad de especificar el -nombre del grob o el contexto. Para que esto funcione, es necesario -que la instrucción @code{\tweak} permanezca inmediatamente adyacente -al objeto al que se aplica, después de que el archivo de entrada se ha -convertido en un flujo musical. Con frecuencia no es el caso, pues -muchos elementos adicionales se insertan en la corriente musical de -forma implícita. Por ejemplo, cuando se procesa una nota que no forma -parte de un acorde, LilyPond inserta implícitamente un evento -@code{ChordEvent} antes de la nota, separando así el truco de la nota. -Sin embargo, si los símbolos de acorde se sitúan cerca del truco y la -nota, la instrucción @code{\tweak} viene después del @code{ChordEvent} -en el flujo musical, permaneciendo así adyacente a la nota, y con la -posibilidad de modificarla. - -Así, esto funciona: - -@lilypond[relative=2,verbatim,quote] -<\tweak #'color #red c>4 -@end lilypond - -@noindent -pero esto no funciona: - -@lilypond[relative=2,verbatim,quote] -\tweak #'color #red c4 -@end lilypond - -Si se colocan varios elementos similares en el mismo momento musical, -la instrucción @code{\override} no se puede usar para modificar uno -solo de ellos: aquí es donde se debe usar la instrucción -@code{\tweak}. Entre los elementos que pueden aparecer más de una vez -en el mismo momento musical están los siguientes: - -@c TODO expand to include any further uses of \tweak -@itemize -@item las cabezas de las notas de un acorde -@item signos de articulación sobre la misma nota -@item ligaduras de unión entre notas de un acorde -@item corchetes de grupos especials que comienzan en el mismo momento -@end itemize - -@c TODO add examples of these - -@noindent -y se puede usar @code{\tweak} para modificar cualquier aparición -específica de estos elementos. - -Es de resaltar que la instrucción @code{\tweak} no se puede usar para -modificar plicas, barras o alteraciones accidentales, porque éstos se -generan más tarde por parte de las cabezas de nota, en vez de por -elementos musicales que están en el flujo de entrada. Ni se puede -usar una instrucción @code{\tweak} para modificar claves o -indicaciones de compás, ya que éstos están separados de cualquier -instrucción @code{\tweak} precedente en el flujo de entrada a causa de -la inserción automática de elementos adicionales necesarios para -especificar el contexto. - -Pero la instrucción @code{\tweak} se puede usar como alternativa a la -instrucción @code{\override} para modificar estos elementos -notacionales que no producen la adición de ningún elemento notacional -implícito antes de ellos mismos en el flujo musical. Por ejemplo, las -ligaduras de expresión se pueden modificar de esta forma: - -@lilypond[verbatim,quote,relative=1] -c-\tweak #'thickness #5 ( d e f) -@end lilypond - -También se pueden escribir varias instrucciones @code{\tweak} antes de -un elemento notacional, y todas ellas le afectan: - -@lilypond[verbatim,quote,relative=1] -c --\tweak #'style #'dashed-line --\tweak #'dash-fraction #0.2 --\tweak #'thickness #3 --\tweak #'color #red - \glissando -f' -@end lilypond - -El flujo musical que se genera a partir de una sección de un archivo -de entrada, incluido cualquier elemento insertado automáticamente, -puede examinarse, véase @ref{Displaying music expressions}. Esto -puede ser de utilidad en la determinación de lo que puede modificarse -por medio de una instrucción @code{\tweak}. - - -@seealso -Manual de aprendizaje: -@rlearning{Tweaking methods}. - -Referencia de la notación: -@ref{Displaying music expressions}. - - -@knownissues - -@cindex trucos en una variable -La instrucción @code{\tweak} no se puede usar dentro de una variable. - -@cindex trucos en la letra -Las instrucciones @code{\tweak} no se pueden usar dentro del modo @code{\lyricmode}. - -@cindex trucar puntos de control -@cindex control, trucar puntos de - -La instrucción @code{\tweak} no se puede usar para modificar los -puntos de control de una única ligadura entre varias dentro de un -acorde, aparte de la primera que aparece en el archivo de entrada. - -@node set versus override -@subsection @code{\set} vs. @code{\override} - -Hemos visto dos formas de cambiar las propiedades: @code{\set} y -@code{\override}. De hecho, en realidad existen dos clases diferentes -de propiedades. - -Los contextos pueden tener propiedades, que por lo general reciben -nombres en @code{mayúsculasDeCamello}. Principalmente controlan la -traducción de la música a la notación, p.ej. @code{localKeySignature} -(para determinar si hay que imprimir las alteraciones accidentales), -@code{measurePosition} (para determinar cuándo imprimir una línea -divisoria). Las propiedades de contexto pueden ver modificado su -valor con el tiempo según se interpreta una pieza de música; -@code{measurePosition} es un ejemplo obvio de esto. Las propiedades -de contexto se modifican con @code{\set}. - -Hay un tipo especial de propiedad de contexto: la descripción del -elemento. Estas propiedades reciben nombres en -@code{MayúsculasDeCamello} (comenzando en letra mayúscula). Contienen -los @q{ajustes por defecto} para dicho elemento gráfico como una lista -asociativa. Consulte @file{scm/@/define@/-grobs@/.scm} para ver qué -tipos de ajustes hay. Las descripciones de los elementos se pueden -modificar con @code{\override}. - -Realmente, @code{\override} es un atajo; - -@example -\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} -@end example - -@noindent -es más o menos equivalente a - -@c leave this long line -gp -@example -\set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) }, @code{--} -@end itemize - -@strong{La propiedad de dirección} - -La posición o dirección de muchos objetos de presentación está -controlada por la propiedad @code{direction}. - -El valor de la propiedad @code{direction} se puede establecer al valor -@code{1}, con el significado de @qq{hacia arriba} o @qq{encima}, o a -@code{-1}, con el significado de @qq{hacia abajo} o @qq{debajo}. Se -pueden usar los símbolos @code{UP} y @code{DOWN} en sustitución de -@code{1} y @code{-1} respectivamente. La dirección predeterminada se -puede especificar estableciendo @code{direction} a @code{0} ó a -@code{CENTER}. De forma alternativa, en muchos casos existen -instrucciones predefinidas para especificar la dirección. Todas ellas -son de la forma: - -@noindent -@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} - -@noindent -donde @code{xxxNeutral} significa @qq{utilizar la dirección -predeterminada}. Véase @rlearning{Within-staff objects}. - -En alguna que otra ocasión, con el único ejemplo usual del arpegio, el -valor de la propiedad @code{direction} especifica si el objeto se debe -colocar a la izquierda o a la derecha del objeto padre. En este caso -@code{-1} ó @code{LEFT} significan @qq{a la izquierda} y @code{1} ó -@code{RIGHT} significan @qq{a la derecha}. @code{0} ó @code{CENTER} -significan @qq{utilizar la dirección predeterminada}, como antes. - - -@node Distances and measurements -@subsection Distances and measurements - -@cindex distances, absolute -@cindex distances, scaled - -@funindex \mm -@funindex \cm -@funindex \in -@funindex \pt - -Las distancias en LilyPond son de dos tipos: absolutas y escaladas. - -Las distancias absolutas se usan para especificar márgenes, sangrados -y otros detalles de diseño de página, y de forma predeterminada se -especifican en milímetros. Las distancias se pueden especificar en -otras unidades escribiendo después de la cifra indicativa de la -cantidad, @code{\mm}, @code{\cm}, @code{\in}@tie{}(pulgadas), o -@code{\pt}@tie{}(puntos, 1/72.27 pulgadas). Las distancias de diseño -de página se pueden especificar también en unidades escalables (véase -el párrafo siguiente) adjuntando @code{\staff-space} a la cantidad. -La disposición de página se describe en detalle en @ref{Page -formatting}. - -Las distancias escaladas siempre se especifican en unidades de un -espacio del pentagrama o, más raramente, medio espacio del pentagrama. -El espacio de pentagrama es la distancia entre dos líneas del -pentagrama adyacentes. El valor predeterminado se puede cambiar -globalmente fijando el tamaño global del pentagrama, o se puede -sobreescribir localmente cambiando la propiedad @code{staff-space} del -objeto @code{StaffSymbol}. Las distancias escaladas se escalan -automáticamente con cualquier cambio al tamaño global del pentagrama o -a la propiedad @code{staff-space} del objeto @code{StaffSymbol}, pero -las fuentes tipográficas se escalan solamente con los cambios -efectuados al tamaño global del pentagrama. Así, el tamaño global del -pentagrama posibilita la fácil variación del tamaño general de una -partitura impresa. Para ver los métodos de establecimiento del tamaño -global del pentagrama, véase @ref{Setting the staff size}. - -@funindex magstep - -Si se necesita dibujar sólo una sección de una partitura a una escala -distinta, por ejemplo una sección ossia o una nota al pie, no se puede -simplemente cambiar el tamaño global del pentagrama porque esto -afectaría a toda la partitura. En tales casos, el cambio de tamaño se -hace sobreescribiendo tanto la propiedad @code{staff-space} de -@code{StaffSymbol} como el tamaño de las fuentes tipográficas. Está a -nuestra disposición una función de Scheme, @code{magstep}, para -convertir de un cambio en el tamaño de la fuente al cambio equivalente -en @code{staff-space}. Para ver una explicación y un ejemplo de su -utilización, consulte @rlearning{Length and thickness of objects}. - - -@seealso -Manual de aprendizaje: -@rlearning{Length and thickness of objects}. - -Referencia de la notación: -@ref{Page formatting}, -@ref{Setting the staff size}. - - -@node Staff symbol properties -@subsection Staff symbol properties - -@cindex ajuste del símbolo del pentagrama -@cindex dibujar el símbolo del pentagrama -@cindex pentagrama, establecer el símbolo del - -@c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol -@c Need to think of uses for these properties. Eg 'line-positions -@c is used in a snippet to thicken centre line. -@c If retained, add @ref to here in 1.6.2 -td - -Se puede definir al mismo tiempo la posición vertical de las líneas de -la pauta y el número de líneas de la misma. Como muestra el siguiente -ejemplo, las posiciones de las notas no están influidas por las -posiciones de las líneas de la pauta. - -@warning{La propiedad @code{'line-positions} sobreescribe a la -propiedad @code{'line-count}. El número de líneas de la pauta está -definido implícitamente por el número de elementos de la lista de -valores de @code{'line-positions}.} - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) -} -{ a4 e' f b | d1 } -@end lilypond - -Se puede modificar la anchura de la pauta. Las unidades son espacios -de pentagrama. El espaciado de los objetos dentro del pentagrama no -resulta afectado por este ajuste. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'width = #23 -} -{ a4 e' f b | d1 } -@end lilypond - - -@node Spanners -@subsection Spanners - -Muchos objetos de notación musical abarcan varias notas o incluso -varios compases. Son ejemplos los crescendi, trinos, corchetes de -grupo especial y corchetes de primera y segunda vez. Estos objetos se -llaman @qq{spanners} u «objetos de extensión», y tienen propiedades -especiales para controlar su apariencia y comportamiento. Algunas de -estas propiedades son comunes a todos los objetos de extensión; otras -se limitan a un subconjunto de los extensores. - -Todos los objetos de extensión contemplan el interface -@code{spanner-interface}. Algunos, básicamente aquellos que trazan -una línea recta entre los dos objetos, contemplan también el interface -@code{line-spanner-interface}. - -@unnumberedsubsubsec Using the @code{spanner-interface} - -Este interface proporciona dos propiedades que se aplican a varios -extensores. - -@strong{@i{La propiedad @code{minimum-length}}} - -La longitud mínima del objeto de extensión se pesoecifica a través de -la propiedad @code{minimum-length}. Su aumento suele producir el -efecto necesario de aumentar el espaciado de las notas entre los dos -puntos extremos. Sin embargo, esta sobreescritura no tiene ningún -efecto sobre muchos extensores, pues su longitud está determinada por -otras consideraciones. Más abajo se muestran algunos ejemplos de -dónde es efectiva. - -@ignore -Works for: - Tie - MultiMeasureRest - Hairpin - Slur - PhrasingSlur - -Works as long as callback is made: - Glissando - Beam - -Works not at all for: - LyricSpace - LyricHyphen - LyricExtender - TextSpanner - System - -@end ignore - -@lilypond[verbatim,quote,relative=2] -a~a -a -% increase the length of the tie --\tweak #'minimum-length #5 -~a -@end lilypond - -@lilypond[verbatim,quote,relative=2] -a1 -\compressFullBarRests -R1*23 -% increase the length of the rest bar -\once \override MultiMeasureRest #'minimum-length = #20 -R1*23 -a1 -@end lilypond - -@lilypond[verbatim,quote,relative=2] -a \< a a a \! -% increase the length of the hairpin -\override Hairpin #'minimum-length = #20 -a \< a a a \! -@end lilypond - -Esta sobreescritura se puede usar también para aumentar la longitud de -las ligaduras de expresión y de fraseo: - -@lilypond[verbatim,quote,relative=2] -a( a) -a --\tweak #'minimum-length #5 -( a) - -a\( a\) -a --\tweak #'minimum-length #5 -\( a\) -@end lilypond - -Para algunos objetos de preesentación, la propiedad -@code{minimum-length} es efectiva sólo si se llama explícitamente al -procedimiento @code{set-spacing-rods}. Para hacerlo, se debe fijar la -propiedad @code{springs-and-rods} al valor -@code{ly:spanner::set-spacing-rods}. Por ejemplo, la longitud mínima -de un glissando no tiene efecto a no ser que se establezca la -propiedad @code{springs-and-rods}: - -@lilypond[verbatim,quote,relative=1] -% default -e \glissando c' - -% not effective alone -\once \override Glissando #'minimum-length = #20 -e, \glissando c' - -% effective only when both overrides are present -\once \override Glissando #'minimum-length = #20 -\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods -e, \glissando c' -@end lilypond - -Lo mismo se puede decir del objeto @code{Beam}: - -@lilypond[verbatim,quote,relative=1] -% not effective alone -\once \override Beam #'minimum-length = #20 -e8 e e e - -% effective only when both overrides are present -\once \override Beam #'minimum-length = #20 -\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods -e8 e e e -@end lilypond - -@strong{@i{The @code{to-barline} property}} - -La segunda propiedad útil del @code{spanner-interface} es -@code{to-barline}. De forma predeterminada tiene el valor cierto, -haciendo que los reguladores y otros objetos de extensión que terminan -sobre la primera nota de un compás, en vez de eso terminen en la línea -divisoria inmediatamente precedente. Si se establece al valor falso, -el extensor llegará más allá de la barra de compás y terminará -excatamente sobre la nota: - -@lilypond[verbatim,quote,relative=2] -a \< a a a a \! a a a \break -\override Hairpin #'to-barline = ##f -a \< a a a a \! a a a -@end lilypond - -Esta propiedad no es efectiva para todos los extensores. Por ejemplo, -su establecimiento a @code{#t} no tienen ningún efecto sobre las -ligaduras de expresión o de fraseo, o sobre otros extensores para los -que terminar en la barra de compás no tendría ningún significado. - -@unnumberedsubsubsec Using the @code{line-spanner-interface} - -Entre los objetos que contemplan el interface -@code{line-spanner-interface} se encuentran - -@itemize -@item @code{DynamicTextSpanner} -@item @code{Glissando} -@item @code{TextSpanner} -@item @code{TrillSpanner} -@item @code{VoiceFollower} -@end itemize - -La rutina responsable de dibujar los sellos de estos extensores es -@code{ly:line-interface::print}. esta rutina determina la -localización exacta de los dos puntos extremos y traza una línea entre -ellos, en el estilo solicitado. Las posiciones de los dos puntos -extremos del extensor se calculan al vuelo, pero es posible -sobreescribir sus coordenadas Y. Las propiedades que se deben -especificar están anidadas a dos niveles de profundidad en la -jerarquía de propiedades, pero la sintaxis de la instrucción -@code{\override} es bastante sencilla: - -@lilypond[relative=2,quote,verbatim] -e2 \glissando b -\once \override Glissando #'(bound-details left Y) = #3 -\once \override Glissando #'(bound-details right Y) = #-2 -e2 \glissando b -@end lilypond - -Las unidades para la propiedad @code{Y} son @code{staff-space}s, -siendo el punto del cero la línea central del pentagrama. Para el -glissando, esto es el valor de @code{Y} en la coordenada X que -corresponde al punto central de cada cabeza de nota si nos imaginamos -que la línea se extiende hasta allí. - -Si no está fijado @code{Y}, su valor se calcula a partir de la -posición vertical del punto de anclaje correspondiente del extensor. - -En caso de salto de línea, los valores para los puntos extremos se -especifican por las sub-listas @code{left-broken} y -@code{right-broken} de @code{bound-details}. Por ejemplo: - -@lilypond[relative=2,ragged-right,verbatim,fragment] -\override Glissando #'breakable = ##t -\override Glissando #'(bound-details right-broken Y) = #-3 -c1 \glissando \break -f1 -@end lilypond - -Un número de propiedades adicionales de las sub-listas @code{left} y -@code{right} de la propiedad @code{bound-details} se pueden -especificar de la misma forma que @code{Y}: - -@table @code -@item Y -Establece la coordenada Y del punto extremo, en desplazamientos de -@code{staff-space}s desde la línea central del pentagrama. De forma -predeterminada es el centro del objeto ancla, y así un glissando -apunta al centro vertical de la cabeza de la nota. - -Para extensores horizontales como los extensores de texto y los -trinos, está inamoviblemente codificado como 0. - -@item attach-dir (dirección de anclaje) -Determina dónde comienza y termina la línea en la dirección X, con -relación al objeto ancla. Sí, un valor de @code{-1} (o @code{LEFT}, -izquierda) hace que la línea comienze o termine en el lado izquierdo -de la cabeza de la nota a la que está anclado. - -@item X -Es la coordenada X absoluta del punto extremo. Se suele calcular al -vuelo, y su sobreescritura no tiene un efecto útil. - -@item stencil (sello) -Los extensores de línea pueden tener símbolos al comienzo o al final, -lo que está contenido en esta sub-propiedad. Esto es para uso -interno; se recomienda en su lugar el uso de @code{text}. - -@item text (texto) -Es un elemento de marcado que se evalúa para dar lugar al sello. Se -usa para escribir @i{cresc.}, @i{tr} y otros textos sobre los objetos -de extensión horizontales. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -c2\startTextSpan b c a\stopTextSpan -@end lilypond - -@item stencil-align-dir-y (alineación del sello en y) -@item stencil-offset (desplazamiento del sello) -Si no se modifican uno u otro, el sello se coloca sencillamente en el -punto extremo, centrado sobrer la línea, como viene definido por las -subpropiedades @code{X} e @code{Y}. Si se fijan -@code{stencil-align-dir-y} o @code{stencil-offset} se moverá el -símbolo del borde verticalmente con relación al extremo de la línea: - -@lilypond[relative=1,fragment,verbatim] -\override TextSpanner - #'(bound-details left stencil-align-dir-y) = #-2 -\override TextSpanner - #'(bound-details right stencil-align-dir-y) = #UP - -\override TextSpanner - #'(bound-details left text) = #"ggg" -\override TextSpanner - #'(bound-details right text) = #"hhh" -c4^\startTextSpan c c c \stopTextSpan -@end lilypond - -Observe que los valores negativos mueven el texto @emph{hacia arriba}, -al contrario de lo que podríoa esperarse, pues el valor de @code{-1} o -@code{DOWN} (abajo) significa alinear el bborde @emph{inferior} del -texto con la línea de extensión. Un valor de @code{1} o @code{UP} -(arriba) alinea el borde superior del texto con la línea extensora. - -@item arrow (flecha) -Al establecer esta sub-propiedad a @code{#t} se produce una punta de -flecha en el extremo de la línea. - -@item padding (relleno) -Esta sub-propiedad controla el espacio entre el punto extremo -especificado de la línea y el extremo real. Sin relleno, un glissando -empezaría y terminaría en el centro de la cabeza de las notas. - -@end table - -La función musical @code{\endSpanners} finaliza de forma prematura el -extensor que comienza sobre la nota que sigue inmediatamente a -continuación. Se termina después de una nota exactamente, o en la -siguiente barra de compás si @code{to-barline} es verdadero y se -produce una divisoria antes de la siguiente nota. - -@lilypond[verbatim,quote,ragged-right,relative=2,fragment] -\endSpanners -c2 \startTextSpan c2 c2 -\endSpanners -c2 \< c2 c2 -@end lilypond - -Si se usa @code{\endSpanners} no es necesario cerrar \startTextSpan -con \stopTextSpan, ni cerrar los reguladores con @code{\!}. - - -@seealso -Referencia de funcionamiento interno: -@rinternals{TextSpanner}, -@rinternals{Glissando}, -@rinternals{VoiceFollower}, -@rinternals{TrillSpanner}, -@rinternals{line-spanner-interface}. - - -@node Visibility of objects -@subsection Visibility of objects - -@cindex objetos, visibilidad de -@cindex grobs, visibilidad de -@cindex visibilidad de los objetos - -Hay cuatro formas principales en que se puede controlar la visibilidad -de los objetos de presentación: se puede eliminar su sello, se pueden -volver transparentes, se pueden pintar de blanco, o se puede -sobreescribir su propiedad @code{break-visibility}. Las tres primeras -se aplican a todos los objetos de presentación; la última sólo a unos -pocos: los objetos @emph{divisibles}. El Manual de aprendizaje -introduce estas cuatro técnicas, véase @rlearning{Visibility and color -of objects}. - -Hay también algunas otras técnicas que son específicas de ciertos -objetos de presentación. Se estudian bajo Consideraciones especiales. - -@menu -* Removing the stencil:: -* Making objects transparent:: -* Painting objects white:: -* Using break-visibility:: -* Special considerations:: -@end menu - - -@node Removing the stencil -@unnumberedsubsubsec Removing the stencil - -@cindex sello, eliminar - -Todo objeto de presentación tiene una propiedad stencil (sello). De -forma predeterminada está establecida a la función específica que -dibuja ese objeto. Se se sobreescribe eesta propiedad a @code{#f} no -se llama a ninguna función y el objeto no se dibuja. La acción -predeterminada se puede recuperar con @code{\revert}. - -@lilypond[quote,verbatim,relative=1] -a1 a -\override Score.BarLine #'stencil = ##f -a a -\revert Score.BarLine #'stencil -a a a -@end lilypond - -@node Making objects transparent -@unnumberedsubsubsec Making objects transparent - -@cindex transparentes, hacer los objetos - -Todo objeto de presentación tiene una propiedad transparent -(transparente) que de forma predeterminada está establecida a -@code{#f}. Si se fija a @code{#t} el objeto aún ocupa espacio pero es -invisible. - -@lilypond[quote,verbatim,relative=2] -a4 a -\once \override NoteHead #'transparent = ##t -a a -@end lilypond - -@node Painting objects white -@unnumberedsubsubsec Painting objects white - -@cindex objetos, coloreado de -@cindex coloreado de objetos -@cindex capas -@cindex impresión, orden de -@cindex sobreescritura de objetos -@cindex objetos, sobreescritura de -@cindex grobs, sobreescritura de - -Todo objeto de presentación tiene una propiedad de color que de forma -predeterminada está establecida a @code{black} (negro). Si se -sobreescribe a @code{white} (blanco) el objeto será indistinguible del -fondo blanco. Sin embargo, si el objeto cruza a otros objetos, el -color de los puntos de cruce queda determinado por el orden en que se -dibujan estos objetos, lo que puede dejar una imagen fantasma del -objeto blanco, como puede verse aquí: - -@lilypond[quote,verbatim,relative=2] -\override Staff.Clef #'color = #white -a1 -@end lilypond - -Se puede evitar esto cambiando el orden de impresión de los objetos. -Todos los objetos de presentación tienen una propiedad @code{layer} -(capa) que se debe establecer a un valor entero. Los objetos con el -valor de @code{layer} más bajo se dibujan primero, después se dibujan -los objetos con valores progresivamente mayores, y así los objetos con -valores más altos se dibujan encima de los que tienen valores más -bajos. De forma predeterminada, casi todos los objetos tienen -asignado un valor @code{layer} de @code{1}, aunque algunos objetos, -entre ellos el pentagrama y las líneas divisorias, @code{StaffSymbol} -y @code{BarLine}, tienen asignado un calor de @code{0}. El orden de -impresión de los objetos con el mismo valor de @code{layer} es -indeterminado. - -En el ejemplo de arriba, la clave blanca, con un valor @code{layer} -predeterminado de @code{1}, se dibuja después de las líneas del -pentragrama (valor @code{layer} predeterminado de @code{0}), -sobreimpresionándolas. Para cambiarlo, se debe dar al objeto -@code{Clef} un valor de @code{layer} más bajo, digamos @code{-1}, para -que se dibuje antes: - -@lilypond[quote,verbatim,relative=2] -\override Staff.Clef #'color = #white -\override Staff.Clef #'layer = #-1 -a1 -@end lilypond - -@node Using break-visibility -@unnumberedsubsubsec Using break-visibility - -@c TODO Add making other objects breakable - -@cindex break-visibility - -Casi todos los objetos de presentación se imprimen una sola vez, pero -algunos como las líneas divisorias, claves, indicaciones de compás y -armaduras de tonalidad, se pueden tener que imprimir dos veces cuando -se produce un salto de línea : una vez al final de la línea y otra al -comienzo de la siguiente. Estos objetos reciben el nombre de -@emph{divisibles}, y tienen una propiedad, @code{break-visibility} -(visibilidad en el salto), para controlar su visibilidad en las tres -posiciones en que pueden aparecer: al comienzo de una línea, dentro de -la línea si se produce un cambio, y al final de la línea si el cambio -se produce en ese lugar. - -Por ejemplo, la indicación de compás se imprime de forma -predeterminada al comienzo de la primera línea y en ningún otro lugar -a no ser que cambie, en cuyo caso se imprime en el punto en que se -produce el cambio. Si este cambio se produce al final de una línea, -la nueva indicación de compás se imprime al principio de la línea -siguiente y también al final de la línea anterior como indicación de -precaución. - -Este comportamiento se controla por medio de la propiedad -@code{break-visibility}, que se explica en -@c Leave this ref on a newline - formats incorrectly otherwise -td -@rlearning{Visibility and color of objects}. Esta propiedad toma un -vector de tres valores booleanos que, por orden, determinan si el -objeto se imprime al final, dentro, o al principio de la línea. O, -para ser más exactos: antes del salto de línea, si no hay salto, o -después del salto. - -Como alternativa se puede especificar cualquiera de las ocho -combinaciones mediante funciones predefinidas cuya definición está en -@file{scm/output-lib.scm}, donde las tres últimas columnas indican si -los objetos de presentación serán visibles en las posiciones que se -muestran en el encabezamiento de cada columna: - -@multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {yes} {yes} {yes} -@headitem Forma @tab Forma @tab Antes del @tab Si no hay @tab Después del -@headitem de función @tab de vector @tab salto @tab salto @tab salto - -@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab sí @tab sí @tab sí -@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab no @tab no @tab sí -@item @code{center-visible} @tab @code{'#(#f #t #f)} @tab no @tab sí @tab no -@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab sí @tab no @tab no -@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab sí @tab sí @tab no -@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab sí @tab no @tab sí -@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab no @tab sí @tab sí -@item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab no @tab no @tab no -@end multitable - -Los ajustes predeterminados de @code{break-visibility} dependen del -objeto de presentación. La tabla siguiente muestra todos los objetos -de presentación de interés que resultan afectados por -@code{break-visibility} y el ajuste predeterminado de esta propiedad: - -@multitable @columnfractions .3 .3 .4 - -@headitem Objeto @tab Contexto usual @tab Valor predet. - -@c omit Ambitus as it appears not to be affected by break-visibility -td -@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} -@item @code{BarLine} @tab @code{Score} @tab calculado -@item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible} -@c omit the following item until it can be explained -td -@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated -@item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible} -@item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible} -@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} -@item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible} -@c omit KeyCancellation until it can be explained -td -@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} -@item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible} -@c omit LeftEdge until it can be explained -td -@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} -@item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible} -@item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible} -@item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible} - -@end multitable - -El ejemplo de abajo muestra el uso de la forma de vector para -controlar la visibilidad de las líneas divisorias: - -@lilypond[quote,verbatim,relative=1,ragged-right] -f4 g a b -f4 g a b -% Remove bar line at the end of the current line -\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) -\break -f4 g a b -f4 g a b -@end lilypond - -Aunque los tres componentes del vector utilizado para sobreescribir -@code{break-visibility} deben estar presentes, no todos son efectivos -para todos los objetos de presentación, y algunas combinaciones pueden -incluso dar errores. Son de aplicación las siguientes limitaciones: - -@itemize @bullet -@item Las líneas divisorias no se pueden imprimir al principio de la línea. -@item No se puede imprimir el número de compás al principio de la primera -línea a no ser que su valor establecido sea distinto de 1. -@item Clave: véase más abajo -@item Las repeticiones dobles de tipo porcentaje se imprimen completamente o -se suprimen por completo. Utilice begin-of line-invisible para -imprimirlas y all-invisible para suprimirlas. -@item Armadura: véase más abajo -@item OctavateEight: véase más abajo -@end itemize - -@node Special considerations -@unnumberedsubsubsec Special considerations - -@strong{@emph{Visibilidad después de un cambio explícito}} - -@cindex armadura, visibilidad después de un cambio explícito -@cindex explicitKeySignatureVisibility -@cindex clave, visibilidad después de un cambio explícito -@cindex explicitClefVisibility - -La propiedad @code{break-visibility} controla la visibilidad de las -armaduras y cambios de clave sólo al principio de las líneas, es -decir, después de un salto. No tiene ningún efecto sobre la -visibilidad de la armadura o la clave después de un cambio explícito -de tonalidad o de clave dentro o al final de una línea. En el ejemplo -siguiente la armadura que sigue al cambio explícito de tonalidad a Si -bemol mayor es visible incluso con @code{all-invisible} establecido. - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -% Try to remove all key signatures -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b -\break -f4 g a b -f4 g a b -@end lilypond - -La visibilidad de estos cambios explícitos de tonalidad y de clave se -controla por medio de las propiedades -@code{explicitKeySignatureVisibility} y @code{explicitClefVisibility}. -Son los equivalentes de la propiedad @code{break-visibility} y las dos -toman un vector de tres valores booleanos o las funciones predefinidas -relacionadas anteriormente, exactamente igual que -@code{break-visibility}. Las dos son propiedades del contexto Staff, -no de los propios objetos de presentación, y por tanto se establecen -utilizando la instrucción @code{\set}. Las dos están establecidas de -forma predeterminada al valor @code{all-visible}. Estas propiedades -controlan sólo la visibilidad de las armaduras y las claves que -resultan de los cambios explícitos y no afectan a las armaduras y -tonalidades que están al principio de las líneas; para quitarlas, aún -se debe sobreescribir la propiedad @code{break-visibility} en el -objeto correspondiente. - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -\set Staff.explicitKeySignatureVisibility = #all-invisible -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b \break -f4 g a b -f4 g a b -@end lilypond - -@strong{@emph{Visibilidad de las alteraciones de precaución}} - -Para eliminar las alteraciones de precaución que se imprimen en un -cambio de tonalidad explícito, establezca la propiedad -@code{printKeyCancellation} del contexto Staff a @code{#f}: - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -\set Staff.explicitKeySignatureVisibility = #all-invisible -\set Staff.printKeyCancellation = ##f -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b \break -f4 g a b -f4 g a b -@end lilypond - -Con estas sobreescrituras solamente permanecen las alteraciones -accidentales delante de las notas para indicar el cambio de tonalidad. - -@c TODO Add visibility of cautionary accidentals before notes - -@strong{@emph{Automatic bars}} - -@cindex automaticBars -@cindex líneas divisorias, eliminación - -Como caso especial, la impresión de las líneas divisorias también se -puede inhabilitar estableciendo la propiedad @code{automaticBars} en -el contexto Score. Si se fija a @code{#f}, las barras de compás no se -imprimen automáticamente; se deben crear explícitamente con una -instrucción @code{\bar}. A diferencia de la instrucción predefinida -@code{\cadenzaOn}, los compases se siguen contando. La generación de -compases continúa de acuerdo a esta cuenta si esta propiedad se -establece posteriormente a @code{#t}. Si se fija al valor @code{#f}, -sólo pueden producirse saltos de línea en instrucciones @code{\bar} -explícitas. - -@c TODO Add example - -@strong{@emph{Octavated clefs}} - -@cindex octavadas, visibilidad de las claves -@cindex visibilidad de las claves octavadas -@cindex claves, visibilidad de la octavación - -El pequeño símbolo de octava sobre las claves en octava alta o baja se -produce por parte del objeto @code{OctavateEight}. Su visibilidad se -controla independientemente de la del objeto @code{Clef}, así que es -necesario aplicar las sobreescrituras correspondientes -@code{break-visibility} tanto a los objetos @code{Clef} como -@code{OctavateEight} para suprimir completamente estos símbolos de -clave al comienzo de cada línea. - -Para los cambios de clave explícitos, la propiedad -@code{explicitClefVisibility} controla tanto el símbolo de clave como -el símbolo de octava asociado. - - -@seealso -Manual de aprendizaje: -@rlearning{Visibility and color of objects} - - -@node Line styles -@subsection Line styles - -Ciertas indicaciones de ejecución, p.ej., @i{rallentando}, -@i{accelerando} y los @i{trinos} se escriben como texto y se extienden -sobre muchos compases mediante líneas, a veces punteadas u onduladas. - -Todos ellos usan las mismas rutinas que el glissando para dibujar los -textos y las líneas, y por ello el ajuste fino de su comportamiento se -hace de la misma manera. Se hace con un spanner (un objeto de -extensión), y la rutina responsable de dibujar los objetos de -extensión es @code{ly:line-interface::print}. Esta rutina determina la -colocación exacta de los dos @i{extremos del objeto de extensión} y -dibuja una línea entre ellos, en el estilo solicitado. - -He aquí un ejemplo de los distintos estilos de línea disponibles, y -cómo aplicarles ajustes finos. - -@lilypond[relative=2,ragged-right,verbatim,fragment] -d2 \glissando d'2 -\once \override Glissando #'style = #'dashed-line -d,2 \glissando d'2 -\override Glissando #'style = #'dotted-line -d,2 \glissando d'2 -\override Glissando #'style = #'zigzag -d,2 \glissando d'2 -\override Glissando #'style = #'trill -d,2 \glissando d'2 -@end lilypond - -Las posiciones de los puntos extremos del objeto de extensión se -computan al vuelo para cada uno de los objetos gráficos, pero es -posible sobreescribirlos: - -@lilypond[relative=2,ragged-right,verbatim,fragment] -e2 \glissando f -\once \override Glissando #'(bound-details right Y) = #-2 -e2 \glissando f -@end lilypond - -El valor de @code{Y} está establecido a @code{-2} para el extremo -derecho. El lado izquierdo se puede ajustar de forma similar -especificando @code{left} en vez de @code{right}. - -Si no está establecido @code{Y}, el valor se computa a partir de la -posición vertical de los puntos de anclaje izquierdo y derecho del -extensor. - -Son posibles otros ajustes de los extensores, para ver más detalles -consulte @ref{Spanners}. - - -@node Rotating objects -@subsection Rotating objects - -Tanto los objetos de presentación como los elementos de texto de -marcado se pueden girar cualquier ángulo respecto a cualquier punto, -pero difiere el método de hacerlo. - -@menu -* Rotating layout objects:: -* Rotating markup:: -@end menu - -@node Rotating layout objects -@unnumberedsubsubsec Rotating layout objects - -@cindex rotating objects -@cindex objects, rotating - -Todos los objetos de presentación que contemplan el interface -@code{grob-interface} se pueden rotar estableciendo su propiedad -@code{rotation}. Acepta una lista de tres elementos: el ángulo de la -rotación en sentido antihorario, y las coordenadas x e y del punto con -relación al punto de referencia del objeto, alrededor del que se va a -realizar la rotación. El ángulo de rotación se pespecifica en grados -y las coordenadas en espacios de pentagrama. - -El ángulo de rotación y las coordenadas del punto de rotación se deben -determinar por ensayo y error. - -@cindex reguladores en ángulo -@cindex ángulo, reguladores en - -Solamente en ciertas ocasiones es útil la rotación de objetos de -presentación; el ejemplo siguiente muestra una situación en que puede -serlo: - -@lilypond[quote,verbatim,relative=1] -g4\< e' d' f\! -\override Hairpin #'rotation = #'(20 -1 0) -g,,4\< e' d' f\! -@end lilypond - -@node Rotating markup -@unnumberedsubsubsec Rotating markup - -Todos los textos de marcado se pueden rotar para que se dispongan en -cualquier ángulo predeciéndolos de la instrucción @code{\rotate}. La -instrucción acepta dos argumentos: el ángulo de rotación en grados en -sentido antihorario, y el texto que rotar. Los límites que ocupa el -texto no se rotan: toman su valor a partir de los extremos de las -coordenadas x e y del texto rotado. En el ejemplo siguiente la -propiedad @code{outside-staff-priority} del texto se establece a -@code{#f} para desactivar la evitación automática de colisiones, lo -que empuja al texto a una posición muy alta. - -@lilypond[quote,verbatim,relative=1] -\override TextScript #'outside-staff-priority = ##f -g4^\markup { \rotate #30 "a G" } -b^\markup { \rotate #30 "a B" } -des^\markup { \rotate #30 "a D-Flat" } -fis^\markup { \rotate #30 "an F-Sharp" } -@end lilypond - -@node Advanced tweaks -@section Advanced tweaks - -Esta sección trata sobre distintos enfoques en la realización de -ajustes finos a la apariencia de la partitura impresa. - -@menu -* Aligning objects:: -* Vertical grouping of grobs:: -* Modifying stencils:: -* Modifying shapes:: -@end menu - - -@seealso -Manual de aprendizaje: -@rlearning{Tweaking output}, -@rlearning{Other sources of information}. - -Referencia de la notación: -@ref{Explaining the Internals Reference}, -@ref{Modifying properties}, -@ref{Interfaces for programmers}. - -Archivos de inicio: -@file{scm/@/define@/-grobs@/.scm}. - -Fragmentos de código: -@rlsr{Tweaks and overrides}. - -Referencia de funcionamiento interno: -@rinternals{All layout objects}. - - -@node Aligning objects -@subsection Aligning objects - -Los objetos gráficos que soportan el interface -@code{self-alignment-interface} y/o el @code{side-position-interface} -se pueden alinear contra un objeto colocado previamente, de diversas -maneras. Para ver una lista de estos objetos, consulte -@rinternals{self-alignment-interface} y -@rinternals{side-position-interface}. - -Todos los objetos gráficos tienen un punto de referencia, una -extensión horizontal y una extensión vertical. La extensión -horizontal es una pareja de números que dan los desplazamientos a -partir del punto de referencia de los bordes izquierdo y derecho, -siendo negativos los desplazamientos hacia la izquierda. La extensión -vertical es una pareja de números que dan el desplazamiento a partir -del punto de referencia hasta los bordes inferior y superior, siendo -negativos los deplazamientos hacia abajo. - -La posición de un objeto sobre el pentagrama viene dada por los -valores de las propiedades @code{X-offset} e @code{Y-offset}. El -valor de @code{X-offset} da el desplazamiento desde la coordenada x -del punto de referencia del objeto padre, y el valor de -@code{Y-offset} da el desplazamiento a partir de la línea central del -pentagrama. Los valores de @code{X-offset} y @code{Y-offset} se -pueden establecer directamente o se puede dejar que se calculen por -parte de procedimientos para conseguir una alineación con el objeto -padre de distintas maneras. - -@warning{Muchos objetos tienen consideraciones de posicionamiento -especiales que hacen que se ignore o se modifique cualquier ajuste -realizado a @code{X-offset} o a @code{Y-offset}, a pesar de que el -objeto contemple el interface @code{self-alignment-interface}.} - -Por ejemplo, una alteración accidental se puede reposicionar -verticalmente estableciendo @code{Y-offset} pero los cambios a -@code{X-offset} no tienen ningún efecto. - -Las letras de ensayo se pueden alinear con objetos divisibles como -líneas divisorias, claves, armaduras e indicaciones de compás. Hay -propiedades especiales que se encuentran en -@code{break-aligned-interface} para el posicionamiento de las letras -de ensayo sobre dichos objetos. - -@menu -* Setting @code{X-offset} and @code{Y-offset} directly:: -* Using the @code{side-position-interface}:: -* Using the @code{self-alignment-interface}:: -* Using the @code{break-alignable-interface}:: -@end menu - -@node Setting @code{X-offset} and @code{Y-offset} directly -@unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly - -Se pueden dar valores numéricos a las propiedades @code{X-offset} y -@code{Y-offset} de muchos objetos. El ejemplo siguiente muestra tres -notas con una digitación en su posición predeterminada y con los -valores @code{X-offset} y @code{Y-offset} modificados. - -@lilypond[verbatim,quote,relative=2] -a-3 -a --\tweak #'X-offset #0 --\tweak #'Y-offset #0 --3 -a --\tweak #'X-offset #-1 --\tweak #'Y-offset #1 --3 -@end lilypond - -@c TODO write more - -@node Using the @code{side-position-interface} -@unnumberedsubsubsec Using the @code{side-position-interface} - -Un objeto que contempla el @code{side-position-interface} se puede -colocar junto a su objeto padre de forma que los bordes especificados -de los dos objetos se toquen. El objeto se puede situar encima, -debajo, a la derecha o a la izquierda del objeto padre. El padre no -se puede especificar; ciene determinado por el orden de los elementos -en el flujo de entrada. Casi todos los objetos tienen la cabeza de la -nota asociada como padre. - -Los valores de las propiedades @code{side-axis} y @code{direction} -determinan dónde colocar el objeto, como sigue: - -@c TODO add an example of each to the table - -@multitable @columnfractions .3 .3 .3 -@headitem @code{side-axis} @tab @code{direction} @tab -@headitem propiedad @tab propiedad @tab colocación - -@item @code{0} @tab @code{-1} @tab izquierda -@item @code{0} @tab @code{1} @tab derecha -@item @code{1} @tab @code{-1} @tab debajo -@item @code{1} @tab @code{1} @tab encima - -@end multitable - -Si @code{side-axis} es @code{0}, @code{X-offset} se debe establecer al -procedimiento @code{ly:side-position-interface::x-aligned-side}. Este -procedimiento devuelve el calor correcto de @code{X-offset} para -situar el objeto al lado izquierdo o derecho del padre de acuerdo con -el valor de @code{direction}. - -Si @code{side-axis} es @code{1}, @code{Y-offset} se debe establecer al -procedimiento @code{ly:side-position-interface::y-aligned-side}. Este -procedimiento devuelve el valor correcto de @code{Y-offset} para -situar el objeto encima o debajo del padre de acuerdo con el valor de -@code{direction}. - -@c TODO Add examples - -@node Using the @code{self-alignment-interface} -@unnumberedsubsubsec Using the @code{self-alignment-interface} - -@emph{Auto-alineación horizontal de los objetos} - -La alineación horizontal de un objeto que contempla el interface -@code{self-alignment-interface} está controlada por el valor de la -propiedad @code{self-alignment-X}, siempre y cuando la propiedad -@code{X-offset} de este objeto esté establecida a -@code{ly:self-alignment-interface::x-aligned-on-self}. Se le puede -dar a @code{self-alignment-X} cualquier valor real, en unidades de la -mitad de la extensión X total del objeto. Los valores negativos -mueven el objeto a la derecha, los positivos hacia la izquierda. Un -valor de @code{0} centra el objeto sobre el punto de referencia de su -padre, un valor de @code{-1} alinea el borde izquierdo del objeto -sobre el punto de referencia de su padre, y un valor de @code{1} -alinea el borde derecho del objeto sobre el punto de referencia de su -padre. Se pueden usar los símbolos @code{LEFT}, @code{CENTER} y -@code{RIGHT} en sustitución de los valores @code{-1, 0, 1}, -respectivamente. - -Normalmente se usaría la instrucción @code{\override} para modificar -el valor de @code{self-alignment-X}, pero se puede usar la instrucción -@code{\tweak} para alinear varias anotaciones por separado sobre una -sola nota: - -@lilypond[quote,verbatim,relative=1] -a' --\tweak #'self-alignment-X #-1 -^"left-aligned" --\tweak #'self-alignment-X #0 -^"center-aligned" --\tweak #'self-alignment-X #RIGHT -^"right-aligned" --\tweak #'self-alignment-X #-2.5 -^"aligned further to the right" -@end lilypond - -@emph{Auto-alineación vertical de los objetos} - -Los objetos se pueden alinear verticalmente en una forma análoga a la -alineación horizontal si la propiedad @code{Y-offset} está establecida -a @code{ly:self-alignment-interface::y-aligned-on-self}. Sin embargo, -a menudo se encuentran implicados otros mecanismos en la alineación -vertical: el valor de @code{Y-offset} es tan sólo una variable que se -tiene en cuenta. Esto puede hacer que ajustar el valor de ciertos -objetos sea una tarea dificultosa. Las unidades son sólo la mitad de -las dimensiones verticales del objeto, que suele ser bastante pequeño, -por lo que pueden requerirse números bastante grandes. Un valor de -@code{-1} alinea el borde inferior del objeto con el punto de -referencia del objeto padre, un valor de @code{0} alinea el centro del -objeto con el punto de referencia del padre, y un valor de @code{1} -alinea el borde superior del objeto con el punto de referencia del -padre. Se pueden usar los símbolos @code{DOWN}, @code{CENTER}, -@code{UP} en sustitución de @code{-1, 0, 1} respectivamente. - -@emph{Auto-alineación de objetos en las dos direcciones} - -Estableciendo tanto @code{X-offset} como @code{Y-offset}, se puede -alinear un objeto en las dos direcciones simultáneamente. - -El ejemplo siguiente muestra cómo ajustar una digitación de forma que -se acerque a la cabeza de la nota. - -@lilypond[quote,verbatim,relative=2] -a --\tweak #'self-alignment-X #0.5 % move horizontally left --\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self --\tweak #'self-alignment-Y #-1 % move vertically up --3 % third finger -@end lilypond - -@ignore -@unnumberedsubsubsec Using the @code{aligned-on-parent} procedures - -@c Cannot document as they do not seem to operate consistently on all objects -td -@c TODO investigate further - -The @code{aligned-on-parent} procedures are used in the same way -as the @code{aligned-on-self} procedures, they difference being -that they permit an object to be aligned with the @emph{edges} of -the parent rather than the parent's reference point. The following -example shows the difference: - -@c TODO Add example - -@lilypond[verbatim,quote] -@end lilypond - -@end ignore - -@ignore -@unnumberedsubsubsec Using the @code{centered-on-parent} procedures - -@c Cannot document as they do not seem to operate consistently on all objects -td -@c TODO investigate further - -@end ignore - -@c TODO The align-interface, BassFigureAlignment and VerticalAlignment - - -@node Using the @code{break-alignable-interface} -@unnumberedsubsubsec Using the @code{break-alignable-interface} - -@cindex alineación a objetos -@cindex break-align-symbols - -Las letras de ensayo se pueden alinear con objetos de notación -distintos a las barras de compás. Estos objetos son @code{ambitus}, -@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, -@code{left-edge}, @code{key-cancellation}, @code{key-signature} y -@code{time-signature}. - -De forma predeterminada, las letras de ensayo y los números de compás -se centran horizontalmente sobre el objeto: - -@lilypond[verbatim,quote,relative=1] -e1 -% the RehearsalMark will be centered above the Clef -\override Score.RehearsalMark #'break-align-symbols = #'(clef) -\key a \major -\clef treble -\mark "↓" -e -% the RehearsalMark will be centered above the TimeSignature -\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) -\key a \major -\clef treble -\time 3/4 -\mark "↓" -e2. -@end lilypond - -Se puede especificar una lista de posibles objetos para la alineación. -Si algunos de los objetos son invisibles en ese punto debido al valor -de @code{break-visibility} o a valores de visibilidad explícitos para -las armaduras y las claves, la letra de ensayo o número de compás se -alinean con el primer objeto de la lista que sea visible. Si ningún -objeto de la lista es visible, el objeto se alinea con la línea -divisoria. Si la línea divisoria es invisible, el objeto se alinea -con el punto en el que se encontraría la línea divisoria. - -@lilypond[verbatim,quote,relative=1] -e1 -% the RehearsalMark will be centered above the Key Signature -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) -\key a \major -\clef treble -\mark "↓" -e -% the RehearsalMark will be centered above the Clef -\set Staff.explicitKeySignatureVisibility = #all-invisible -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) -\key a \minor -\clef bass -\mark "↓" -e, -@end lilypond - -La alineación de la letra de ensayo con relación al objeto de notación -se puede cambiar, como se ve en el ejemplo siguiente. En una -partitura con varios pentagramas, este ajuste se debe hacer para todos -los pentagramas. - -@lilypond[verbatim,quote,relative=1] -% The RehearsalMark will be centered above the KeySignature -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) -\key a \major -\clef treble -\time 4/4 -\mark "↓" -e1 -% The RehearsalMark will be aligned with the left edge of the KeySignature -\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT -\mark "↓" -\key a \major -e -% The RehearsalMark will be aligned with the right edge of the KeySignature -\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT -\key a \major -\mark "↓" -e -@end lilypond - -La letra de ensayo también se puede desplazar al borde derecho o -izquierdo en una medida arbitraria. Las unidades son espacios de -pentagrama: - -@lilypond[verbatim,quote,relative=1] -% The RehearsalMark will be aligned with the left edge of the KeySignature -% and then shifted right by 3.5 staff-spaces -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) -\once \override Score.KeySignature #'break-align-anchor = #3.5 -\key a \major -\mark "↓" -e -% The RehearsalMark will be aligned with the left edge of the KeySignature -% and then shifted left by 2 staff-spaces -\once \override Score.KeySignature #'break-align-anchor = #-2 -\key a \major -\mark "↓" -e -@end lilypond - - -@node Vertical grouping of grobs -@subsection Vertical grouping of grobs - -Los grobs (objetos gráficos) @code{VerticalAlignment} y -@code{VerticalAxisGroup} trabajan de manera coordinada. -@code{VerticalAxisGroup} agrupa distintos grobs como @code{Staff}, -@code{Lyrics}, etc. Después, @code{VerticalAlignment} alinea los -distintos grobs agrupados previamente por @code{VerticalAxisGroup}. -Normalmente sólo existe un @code{VerticalAlignment} por cada -partitura, pero cada @code{Staff}, @code{Lyrics}, etc. tiene su propio -@code{VerticalAxisGroup}. - - -@node Modifying stencils -@subsection Modifying stencils - -Todos los objetos de presentación tienen una propiedad @code{stencil} -que es parte del @code{grob-interface}. De forma predeterminada, esta -propiedad suele estar establecida a una función específica del objeto -que está hecha a medida para disponer el símbolo que lo representa en -la salida. Por ejemplo, el ajuste estándar para la propiedad -@code{stencil} del objeto @code{MultiMeasureRest} es -@code{ly:multi-measure-rest::print}. - -El símbolo estándar de cualquier objeto se puede sustituir modificando -la propiedad @code{stencil} para que haga referencia a un -procedimiento diferente escrito especialmente. Esto requiere un alto -nivel de conocimiento del funcionamiento interno de LilyPond, pero hay -una forma más fácil que a menudo puede dar resultados adecuados. - -El procedimiento es establecer la propiedad @code{stencil} al -procedimiento que imprime texto (@code{ly:text-interface::print}) y -añadir una propiedad @code{text} al objeto ajustada para que contenga -el texto de marcado que produce el símbolo requerido. Debido a la -flexibilidad del marcado, se pueden conseguir muchas cosas; en -particular, consulte @ref{Graphic notation inside markup}. - -El ejemplo siguiente muestra esto cambiando el símbolo de la cabeza de -la nota a unas aspas dentro de una circunferencia. - -@lilypond[verbatim,quote] -XinO = { - \once \override NoteHead #'stencil = #ly:text-interface::print - \once \override NoteHead #'text = \markup { - \combine - \halign #-0.7 \draw-circle #0.85 #0.2 ##f - \musicglyph #"noteheads.s2cross" - } -} -\relative c'' { - a a \XinO a a -} -@end lilypond - -Cualquiera de los glifos de la fuente tipográfica Feta se puede pasar -a la instrucción de marcado @code{\musicglyph}: véase @ref{The Feta -font}. - -@c TODO Add inserting eps files or ref to later - -@c TODO Add inserting Postscript or ref to later - - -@seealso -Referencia de la notación: -@ref{Graphic notation inside markup}, -@ref{Formatting text}, -@ref{Text markup commands}, -@ref{The Feta font}. - - -@node Modifying shapes -@subsection Modifying shapes - -@menu -* Modifying ties and slurs:: -@end menu - -@node Modifying ties and slurs -@unnumberedsubsubsec Modifying ties and slurs - -Las ligaduras de unión, de expresión y de fraseo se trazan como curvas -de Bézier de tercer orden. Si la forma de la ligadura calculada -automáticamente no resulta óptima, se puede modificar su forma -manualmente mediante la especificación explícita de los cuatro puntos -de control necesarios para definir una curva de Bézier de tercer -orden. - -Las curvas Bézier de tercer orden o cúbicas están definidas por cuatro -puntos de control. El primer y cuarto puntos de control son -exactamente los puntos extremos de comienzo y de final de la curva. -Los dos puntos de contros intermedios definen la forma. Se pueden -encontrar en la web animaciones que muestran cómo se traza la curva, -pero la descripción siguiente puede ser de ayuda. La curva comienza a -partir del primer punto de control dirigiéndose directamente hacia el -segundo, curvándose progresivamente para dirigirse hacia el tercero y -continuando la curva hacia el cuarto, llegando a éste en viaje directo -desde el tercer punto de control. La curva está contenida enteramente -dentro del cuadrilátero definido por los cuatro puntos de control. - -He aquí un ejemplo de un caso en que la ligadura no es óptima, y donde -@code{\tieDown} no sirve de ayuda. - -@lilypond[verbatim,quote,relative=1] -<< - { e1 ~ e } -\\ - { r4 } ->> -@end lilypond - -Una forma de mejorar esta ligadura es modificar manualmente sus puntos -de control como sigue. - -Las coordenadas de los puntos de control de Bézier se especifican en -unidades de espacios de pentagrama. La coordenada@tie{}X está en -relación con el punto de referencia de la nota a la que está unida la -ligadura, y la coordenada@tie{}Y está en relación con la línea central -del pentagrama. Las coordenadas se introducen como una lista de -cuatro parejas de números decimales (reales). Un enfoque es estimar -las coordenadas de los dos puntos extremos, y luego tratar de adivinar -los dos puntos intermedios. Los valores óptimos se encuentran por -ensayo y error. - -Es útil recordar que una curva simétrica necesita puntos de contros -simétricos, y que las curvas de Bézier tienen la útil propiedad de que -las transformaciones de la curva tales como la traslación, rotación y -escalado se pueden obtener aplicando la misma transformación a los -puntos de control de la curva. - -Para el ejemplo anterior, la sobreescritura siguiente da una ligadura -satisfactoria: - -@lilypond[verbatim,quote,relative=1] -<< - \once \override Tie - #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) - { e1 ~ e1 } -\\ - { r4 4 } ->> -@end lilypond - -@knownissues - -No es posible modificar la forma de las ligaduras de unión o de -expresión cambiando la propiedad @code{control-points} si hay más de -una en el mismo mom ento musical, ni siquiera usando la instrucción -@code{\tweak}. - diff --git a/Documentation/es/user/cheatsheet.itely b/Documentation/es/user/cheatsheet.itely deleted file mode 100644 index b2946e657e..0000000000 --- a/Documentation/es/user/cheatsheet.itely +++ /dev/null @@ -1,298 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@c TODO: add tablature. - -@node Cheat sheet -@appendix Cheat sheet - - -@multitable @columnfractions .35 .3 .35 - -@item @b{Sintaxis} -@tab @b{Descripción} -@tab @b{Ejemplo} - -@item @code{1 2 8 16} -@tab duraciones -@tab -@lilypond[fragment,relative=2,notime] -\set Staff.autoBeaming = ##f -\override Staff.Clef #'break-visibility = #all-invisible -c1 c2 c8 c16 -@end lilypond - -@item @code{c4. c4..} -@tab puntillos -@tab -@lilypond[fragment,relative=2,notime] -\override Staff.Clef #'break-visibility = #all-invisible -c4. c4.. -@end lilypond - -@item @code{c d e f g a b } -@tab escala -@tab -@lilypond[fragment,relative=1,notime] -c d e f g a b -@end lilypond - -@item @code{fis bes} -@tab alteración -@tab -@lilypond[fragment,relative=1,notime] -fis bes -@end lilypond - -@item @code{\clef treble \clef bass } -@tab claves -@tab -@lilypond[fragment,notime] -\clef treble -s4_" " -\clef bass -s4_" " -@end lilypond - -@item @code{\time 3/4 \time 4/4 } -@tab compás -@tab -@lilypond[fragment] -\override Staff.Clef #'transparent = ##t -\time 3/4 -s4_" " -\time 4/4 -s16_" " -@end lilypond - - -@item @code{r4 r8} -@tab silencio -@tab -@lilypond[relative=2,notime,fragment] -\override Staff.Clef #'break-visibility = #all-invisible -r4 r8 -@end lilypond - -@item @code{d ~ d} -@tab ligadura de unión -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -d ~ d -@end lilypond - -@item @code{\key es \major } -@tab armadura -@tab -@lilypond[notime,fragment] -\clef treble -\key es \major -s4 -@end lilypond - -@item @var{note}@code{'} -@tab subir una octava -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -a a' -@end lilypond - -@item @var{note}@code{,} -@tab bajar una octava -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -c c, -@end lilypond - - -@item @code{c( d e)} -@tab ligadura de expresión -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c( d e) -@end lilypond - - -@item @code{c\( c( d) e\)} -@tab ligadura de fraseo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c\( c( d) e\) -@end lilypond - - -@item @code{a8[ b]} -@tab barra -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a8-[ b-] -@end lilypond - - -@item @code{<< \new Staff ... >>} -@tab más pentagramas -@tab -@lilypond[fragment] -<< \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } - \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } >> -@end lilypond - - -@item @code{c-> c-.} -@tab articulaciones -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c-> c-. -@end lilypond - - -@item @code{c2\mf c\sfz} -@tab matices dinámicos -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c2\mf c\sfz -@end lilypond - - -@item @code{a\< a a\!} -@tab crescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\< a a\! -@end lilypond - -@item @code{a\> a a\!} -@tab decrescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\> a a\! -@end lilypond - - -@item @code{< >} -@tab acorde -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible - -@end lilypond - - -@item @code{\partial 8} -@tab anacrusa -@tab -@lilypond[fragment,relative=2] -\partial 8 -f8 c2 d e -@end lilypond - - -@item @code{\times 2/3 @{f g a@}} -@tab tresillos -@tab -@lilypond[relative=1,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\times 2/3 { f8 g a } -@end lilypond - - -@item @code{\grace} -@tab mordentes -@tab -@lilypond[relative=2,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Voice { \grace b16 c4 } -@end lilypond - -@item @code{\lyricmode @{ twinkle @}} -@tab escribir la letra -@tab -twinkle - - -@item @code{\new Lyrics} -@tab imprimir la letra -@tab -@lilypond[fragment] -\new Lyrics \lyricmode { twinkle } -@end lilypond - -@item @code{twin -- kle} -@tab separador de sílabas -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -<< - { g'1 g } - \new Lyrics \lyricsto "" { twin -- kle } ->> -@end lilypond - -@item @code{\chordmode @{ c:dim f:maj7 @}} -@tab acordes -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\chordmode { c:dim f:maj7 } -@end lilypond - -@item @code{\context ChordNames} -@tab imprimir los nombres de los acordes -@tab -@lilypond[fragment,relative=2] -\chords { c:dim f:maj7 } -@end lilypond - -@item @code{<<@{e f@} \\ @{c d@}>>} -@tab polifonía -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Staff <<{e f} \\ {c d}>> -@end lilypond - - -@item @code{s4 s8 s16} -@tab silencios de separación -@tab - -@end multitable - diff --git a/Documentation/es/user/chords.itely b/Documentation/es/user/chords.itely deleted file mode 100644 index 22fe662a3f..0000000000 --- a/Documentation/es/user/chords.itely +++ /dev/null @@ -1,1134 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Chord notation -@section Chord notation - -@lilypondfile[quote]{chords-headword.ly} - -Los acordes se pueden escribir en el modo de acordes, que reconoce -ciertas convenciones europeas tradicionales de nomenclatura de -acordes. También se pueden imprimir los nombres de los acordes. -Además se puede imprimir notación de bajo cifrado. - -@menu -* Chord mode:: -* Displaying chords:: -* Figured bass:: -@end menu - -@node Chord mode -@subsection Chord mode - -@cindex modo de acordes - -Para introducir acordes se utiliza el modo de acordes. Se usa un -indicador de la estructura del acorde en lugar de la altura de sus -notas. - -@menu -* Chord mode overview:: -* Common chords:: -* Extended and altered chords:: -@end menu - -@node Chord mode overview -@unnumberedsubsubsec Chord mode overview - -@cindex acordes, nombres de -@cindex acordes, modo de -@cindex cifrado americano -@cindex acordes de jazz -@cindex jazz, acordes de - -Los acordes se pueden escribir como música simultánea, como se explica -en @ref{Chorded notes}. - -También se pueden escribir los acordes en el @qq{modo de acordes}, que -es un modo de entrada que se centra en las estructuras de los acordes -dentro de la música europea tradicional (donde se conoce como «cifrado -americano») más que en las notas concretas. Esto es muy práctico para -los que están familiarizados con la utilización de nombres para -describir los acordes. Hay más información sobre los distintos modos -de entrada en @ref{Input modes}. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c1 g a g c } -@end lilypond - -Los acordes escritos con el modo de acordes son elementos musicales, y -se pueden transportar igual que los acordes escritos mediante -construcciones de música simultánea. - -Se pueden mezclar los modos de acorde y de nota en la música -secuencial: - -@lilypond[verbatim,quote,ragged-right,relative=1] -2 -\chordmode { c2 f } -2 -\chordmode { f2 g } -@end lilypond - - -@seealso -Glossario musical: -@rglos{chord}. - -Referencia de la notación: -@ref{Chorded notes}, -@ref{Input modes}. - -Fragmentos de código: -@rlsr{Chords} - - -@knownissues - -Cuando se mezclan los modos de acorde y de nota en música secuencial, -y el modo de acordes aparece en primer lugar, el modo de notas crea un -nuevo contexto de @code{Staff}. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2 f } -2 -@end lilypond - -Para evitar este comportamiento podemos crear explícitamente el -contexto de @code{Staff}: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\new Staff { - \chordmode { c2 f } - 2 -} -@end lilypond - -@node Common chords -@unnumberedsubsubsec Common chords - -@cindex tríadas -@cindex séptima, acordes de -@cindex fundamental de un acorde -@cindex modificadores de acorde -@cindex acordes, variantes de - -Las tríadas mayores se introducen escribiendo la fundamental y una -duración opcional: - -@lilypond[verbatim,quote,relative=1,ragged-right] -\chordmode { c2 f4 g } -@end lilypond - -Las tríadas menores, aumentadas y disminuidas se escriben poniendo -@code{:} y una cadena modificadora de variante después de la duración: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2:m f4:aug g:dim } -@end lilypond - -Se pueden crear acordes de séptima: - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } -@end lilypond - -@funindex aug -@funindex dim -@funindex maj -@funindex m - -La tabla que aparece más abajo muestra el efecto de los modificadores -de variante sobre los acordes de tríada y de séptima. La séptima -añadida de forma predeterminada a los acordes es menor, lo que hace -del acorde de séptima dominante el acorde básico de séptima. Todas -las alteraciones se consideran en relación con la séptima dominante. -Hay una tabla más completa donde aparecen los usos de los -modificadores en @ref{Common chord modifiers}. - -@c @table @code -@multitable @columnfractions .2 .4 .3 - -@item -@b{Modificador} -@tab -@b{Acción} -@tab -@b{Ejemplo} - -@item -Ninguno -@tab -Acción predeterminada; produce una tríada mayor. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1 -} -@end lilypond - -@item -m, m7 -@tab -Acorde menor. Este modificador baja la tercera. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:m c:m7 -} -@end lilypond - - -@item -dim, dim7 -@tab -Acorde disminuido. Este modificador baja la tercera, la quinta y, si -existe, la séptima. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:dim c:dim7 -} -@end lilypond - -@item -aug -@tab -Acorde aumentado. Este modificador eleva la quinta. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:aug -} -@end lilypond - -@item -maj, maj7 -@tab -Acorde de séptima mayor. Este modificador añade una séptima elevada. -El @code{7} que sigue a @code{maj} es opcional. NO utilice este -modificador para crear una tríada mayor. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:maj c:maj7 -} -@end lilypond - -@end multitable - - -@seealso -Referencia de la notación: -@ref{Common chord modifiers}, -@ref{Extended and altered chords}. - -Fragmentos de código: -@rlsr{Chords}. - -@knownissues -Sólo se puede usar un modificador por cada acorde, normalmente sobre -la nota más aguda del mismo. Los acordes con maś de un modificador se -analizan sin producir errores ni advertencias, pero el resultado es -impredecible. Los acordes que no se pueden conseguir con un solo -modificador se deben alterar en sus notas individuales como se -describe en @ref{Extended and altered chords}. - -@node Extended and altered chords -@unnumberedsubsubsec Extended and altered chords - -@cindex acordes extendidos -@cindex acordes alterados - -Se pueden crear estructuras de acorde de complejidad arbitraria dentro -del modo de acordes. Se puede usar la cadena modificadora para -extender un acorde, añadir o quitar notas, elevar o bajar notas del -acorde y añadir un bajo distinto o crear una inversión. - -El primer número que sigue al @code{:} se considera que es el ámbito -del acorde. El acorde se construye secuencialmente añadiendo terceras -a la fundamental hasta que se alcanza el número especificado. Observe -que la séptima añadida como parte de un acorde extendido es la séptima -menor, no mayor. Si el ámbito no es una tercera (p.ej. 6), se añaden -terceras hasta la tercera más alta inferior al ámbito, y después se -añade la nota del ámbito. El mayor valor posible para el ámbito es -13. Cualquier valor mayor se interpreta como 13. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:2 c:3 c:4 c:5 - c1:6 c:7 c:8 c:9 - c1:10 c:11 c:12 c:13 - c1:14 -} -@end lilypond - -@noindent -Observe que @code{c:5} es idéntico a @code{c} (los dos producen una -tríada de Do mayor). - -Puesto que una oncena sin alteración no suena bien cuando se combina -con una trecena sin alteración, se elimina la oncena de los acordes de -@code{:13} (a no ser que se añada explícitamente). - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:13 c:13.11 c:m13 -} -@end lilypond - -@cindex adiciones en acordes - -Se pueden añadir notas individuales a un acorde. Las adiciones siguen -el ámbito y van prefijadas por un punto (@code{.}). La séptima normal -que se añade a un acorde es la séptima menor, no mayor. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:5.6 c:3.7.8 c:3.6.13 -} -@end lilypond - -Las notas añadidas pueden ser tan agudas como se desee. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c4:5.15 c:5.20 c:5.25 c:5.30 -} -@end lilypond - -@cindex acordes, alteración de notas - -Las notas añadidas a los acordes se pueden alterar mediante la adición -de los sufijos @code{-} o @code{+} al número. Para alterar una nota -que se ha incluido automáticamente como parte de la estructura básica -del acorde, añádala como una nota alterada. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:7+ c:5+.3- c:3-.5-.7- -} -@end lilypond - -@cindex acordes, supresiones en - -@funindex ^ - -Una nota que se quiere suprimir de un acorde se indica dentro de la -cadena modificadora prefijándola por un acento circunflejo @code{^}. -Sólo se permite una supresión con @code{^} dentro de una cadena -modificadora. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 -} -@end lilypond - -@funindex sus - -Se puede añadir el modificador @code{sus} a la cadena modificadora -para crear acordes suspendidos. Esto elimina la tercera del acorde. -Esciba bien @code{2} o bien @code{4} para añadir la seguna o la cuarta -al acorde, respectivamente. @code{sus} equivale a @code{^3}; -@code{sus4} equivale a @code{.4^3}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1:sus c:sus2 c:sus4 c:5.4^3 -} -@end lilypond - -@funindex / -@cindex acordes, inversiones -@cindex bajo de los acordes -@cindex acordes, bajo de - -Se pueden especificar las inversiones (colocar en el bajo una nota -distinta de la fundamental del acorde) y notas de bajo añadidas -mediante la adición de @code{/}@var{nota} al acorde. - -@lilypond[quote,ragged-right,fragment,verbatim, relative=2] -\chordmode { - c1 c/g c/f -} -@end lilypond - -@funindex /+ - -Se puede añadir una nota del bajo que forma parte del acorde, en lugar -de ser movida por efecto de una inversión, mediante el uso de -@code{/+}@var{nota}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1 c/g c/+g -} -@end lilypond - -Los modificadores de acorde que se pueden utilizar para producir una -amplia variedad de acordes estándar se muestran en @ref{Common chord -modifiers}. - - -@seealso -Referencia de la notación: -@ref{Common chord modifiers}. - -Fragmentos de código: -@rlsr{Chords}. - - -@knownissues - -Cada nota sólo puede estar presente en el acorde una sola vez. Lo que -sigue produce simplemente el acorde aumentado, porque @code{5+} se -interpreta en último lugar. - -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { c1:5.5-.5+ } -@end lilypond - -Sólo se puede crear la primera inversión mediante la adición de un -bajo. La segunda inversión requiere cambiar la fundamental del -acorde. - -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { - c'1: c':/g e:6-3-^5 e:m6-^5 -} -@end lilypond - -@node Displaying chords -@subsection Displaying chords - -Los acordes se pueden imprimir por su nombre, además de la impresión -estándar como notas sobre un pentagrama. - -@menu -* Printing chord names:: -* Customizing chord names:: -@end menu - -@node Printing chord names -@unnumberedsubsubsec Printing chord names - -@cindex impresión de los nombres de acorde -@cindex acordes, nombres de -@cindex acordes - -Los nombres de acorde se imprimen dentro del contexto -@code{ChordNames}: - -@lilypond[verbatim,quote,relative=1,ragged-right] -\new ChordNames { - \chordmode { - c2 f4. g8 - } -} -@end lilypond - -Los acordes se pueden escribir como notas simultáneas o a través del -uso del modo de acordes. El nombre de acorde que se imprime es el -mismo independientemente del modo de entrada, a no ser que existan -inversiones o bajos añadidos: - -@lilypond[verbatim,quote,relative=1] -<< - \new ChordNames { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } - { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } ->> -@end lilypond - -@funindex{\chords} - -@code{\chords @{ ... @}} es una forma abreviada de escribir -@code{\new ChordNames @{ \chordmode @{ ... @} @}}. - -@lilypond[verbatim,quote,ragged-right, relative=1] -\chords { - c2 f4.:m g8:maj7 -} -@end lilypond - -@lilypond[verbatim,quote,ragged-right, relative=1] -\new ChordNames { - \chordmode { - c2 f4.:m g8:maj7 - } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{showing-chords-at-changes.ly} - -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - - -@seealso -Glosario musical: -@rglos{chord}. - -Referencia de la notación: -@ref{Writing music in parallel}. - -Fragmentos de código: -@rlsr{Chords}. - -Referencia de funcionamiento interno: -@rinternals{ChordNames}, -@rinternals{ChordName}, -@rinternals{Chord_name_engraver}, -@rinternals{Volta_engraver}, -@rinternals{Bar_engraver}. - - -@knownissues - -Los acordes que contienen inversiones o bajos alterados no reciben un -nombre adecuado si se escriben usando música simultánea. - -@node Customizing chord names -@unnumberedsubsubsec Customizing chord names - -@cindex personalización de los nombres de acorde - -No hay un sistema único para nombrar acordes. Las distintas -tradiciones musicales usan distintos nombres para el mismo conjunto de -acordes. Tabién hay distintos símbolos impresos para un nombre de -acorde dado. Los nombres y símbolos que se imprimen para los nombres -de acorde dados se pueden personalizar. - -@cindex Banter -@cindex jazz, acordes de -@cindex acordes de jazz - -El esquema de nomenclatura de acordes predeterminado es un sistema -para música de Jazz, propuesto por Klaus Ignatzek (véase -@ref{Literature list}). También funcionan otros dos esquemas de -nomenclatura de acordes: una notación de acordes de Jazz alternativa y -un esquema sistemático llamado Acordes de Banter. La notación de Jazz -alternativa también se puede ver en el cuadro @ref{Chord name chart}. - -@c TODO -- Change this so we don't have a non-verbatim example. -@c Make short example in docs, then move longer example to -@c appendix, where the length of the snippet won't matter. - -Además de los distintos sistemas de nomenclatura, se usan diferentes -nombres de nota para la fundamental en los distintos idiomas. Las -variables predefinidas @code{\germanChords}, @code{\semiGermanChords}, -@code{\italianChords} y @code{\frenchChords} establecen el valor de -estas variables. El efecto se muestra aquí: - -@lilypondfile[ragged-right]{chord-names-languages.ly} - -Si ninguno de los ajustes predeterminados proporciona el resultado -deseado, se puede afinar la presentación de los nombres de acorde a -través de las siguientes propiedades. - -@table @code - -@funindex chordRootNamer - -@item chordRootNamer - -El nombre de acorde se imprime normalmente como una letra para la -fundamental con una alteración opcional. La transformación de la nota -en la letra se realiza por parte de esta función. Los nombres de nota -especiales (por ejemplo, la @q{H} alemana para un acorde de Si) se -pueden producir almacenando una cunción nueva en esta propiedad. - -@funindex majorSevenSymbol - -@item majorSevenSymbol - -Esta propiedad contiene el objeto de marcado que se usa para hacer el -seguimiento de la salida de @code{chordRootNamer} para identificar un -acorde de séptima mayor. Las opciones predefinidas son -@code{whiteTriangleMarkup} (triángulo blanco) y -@code{blackTriangleMarkup} (triángulo negro). - -@funindex chordNoteNamer - -@item chordNoteNamer - -Cuando el nombre del acorde contiene notas adicionales aparte de la -fundamental (p.ej., un bajo añadido), se utiliza esta función para -imprimir la nota adicional. De forma predeterminada se imprime la -nota usando @code{chordRootNamer}. La propiedad @code{chordNoteNamer} -se puede establecer a una función especializada para cambiar este -comportamiento. Por ejemplo, el bajo se puede imprimir en minúscula. - -@funindex chordNameSeparator - -@item chordNameSeparator - -Las diferentes partes del nombre de un acorde se separan normalmente -mediante una barra inclinada. Mediante el ajuste de -@code{chordNameSeparator}, podemos usar cualquier marcado que deseemos -como separador. - -@funindex chordNameExceptions - -@item chordNameExceptions - -Esta propiedad es una lista de parejas. El primer elemento de cada -pareja es un conjunto de notas utilizadas para identificar los -elementos presentes en el acorde. El segundo elemento es un elemento -de marcado que sigue a la salida de @code{chordRootNamer} para crear -el nombre del acorde. - -@funindex chordPrefixSpacer -@item chordPrefixSpacer - -La @q{m} de los acordes menores se imprime por lo general -imediatamente a la derecha de la fundamental. Se puede insertar un -símbolo separador entre la fundamental y @q{m} estableciendo -@code{chordPrefixSpacer}. El símbolo separador no se usa cuando el -acorde está alterado. - -@end table - - -@predefined -@funindex major seven symbols -@code{\whiteTriangleMarkup}, -@code{\blackTriangleMarkup}, -@funindex \germanChords -@code{\germanChords}, -@funindex \semiGermanChords -@code{\semiGermanChords}, -@funindex \italianChords -@code{\italianChords}, -@funindex \frenchChords -@code{\frenchChords}. -@endpredefined - - -@snippets - -@cindex excepciones, nombres de acorde -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-exceptions.ly} - -@c TODO - tweak snippet to use \blackTriangleMarkup as well -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-major7.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{volta-below-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-chord-separator.ly} - - - -@seealso -Referencia de la notación: -@ref{Chord name chart}, -@ref{Common chord modifiers}. - -Archivos instalados: -@file{scm/@/chords@/-ignatzek@/.scm}, -@file{scm/@/chord@/-entry@/.scm}, -@file{ly/@/chord@/-modifier@/-init@/.ly}. - -Fragmentos de código: -@rlsr{Chords}. - -@c Internals Reference: -@c @rinternals{ }. - - -@knownissues - -Los nombres de acorde se determinan a partir de las notas que están -presentes en el mismo y de la información acerca de la estructura del -acorde que ha podido ser introducida en @code{\chordmode}. Si el -método de las notas simultáneas se usa para introducir los acordes, -pueden resultar nombres no deseados a partir de las inversiones o de -las notas del bajo. - -@lilypond[quote,ragged-right,verbatim] -myChords = \relative c' { - \chordmode { c1 c/g c/f } - 1 -} -<< - \new ChordNames { \myChords } - \new Staff { \myChords } ->> -@end lilypond - -@node Figured bass -@subsection Figured bass - -@lilypondfile[quote]{figured-bass-headword.ly} - -Se puede imprimir notación de bajo cifrado. - -@menu -* Introduction to figured bass:: -* Entering figured bass:: -* Displaying figured bass:: -@end menu - -@node Introduction to figured bass -@unnumberedsubsubsec Introduction to figured bass - -@cindex Basso continuo -@cindex Thorough bass -@cindex Figured bass -@cindex Bass, thorough -@cindex Bass, figured - -@c TODO: musicological blurb about FB - -LilyPond contempla el bajo cifrado, también conocido como basso -continuo: - -@lilypond[quote,ragged-right,verbatim,fragment] -<< - \new Voice { \clef bass dis4 c d ais g fis} - \new FiguredBass { - \figuremode { - < 6 >4 < 7\+ >8 < 6+ [_!] > - < 6 >4 <6 5 [3+] > - < _ >4 < 6 5/>4 - } - } ->> -@end lilypond - -El soporte para bajo cifrado se compone de dos partes: hay un modo de -entrada, presentado por @code{\figuremode}, que admite la entrada de -las cifras del bajo, y hay un contexto llamado @code{FiguredBass} que -se ocupa de la impresión de los objetos del tipo @code{BassFigure}. -El bajo cifrado también se puede imprimir dentro de contextos de -@code{Staff}. - -@code{\figures@{ ... @}} es una notación abreviada de -@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. - -Aunque el soporte para bajo cifrado puede parecerse superficialmente -al de los acordes, realmente es mucho más simple. El modo -@code{\figuremode} simplemente almacena las cifras y el contexto -@code{FiguredBass} las imprime tal y como se han introducido. No hay -ninguna conversión a notas. - -@ignore -Las cifras se crean como textos de marcado. Cualquiera de las -propiedades estándar de marcado se pueden usar para modificar la -impresión de las cifras. Por ejemplo, el espaciado vertical de las -cifras se puede ajustar con @code{baseline-skip}. -@end ignore - - -@seealso -Glosario musical: -@rglos{figured bass}. - -Fragmentos de código: -@rlsr{Chords} - - -@node Entering figured bass -@unnumberedsubsubsec Entering figured bass - -Se usa @code{\figuremode} para cambiar el mod de entrada al modo de -cifras. Hay más información sobre los distintos modos de entrada en -@ref{Input modes}. - -En el modo de cifras, un grupo de cifras del bajo está delimitado -mediante ángulos simples, @code{<} y @code{>}. La duración se escribe -después del @code{>}. - -@lilypond[verbatim,quote,ragged-right,fragment] -\new FiguredBass { - \figuremode { - <6 4>2 - } -} -@end lilypond - -Se pueden añadir alteraciones accidentales (incluso becuadros) a las -cifras: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -Se pueden indicar elementos del acorde aumentados y disminuidos: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -Se puede crear una barra invertida cruzando una cifra (usada -normalmente para sextas elevadas): - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6> <6\\> -} -@end lilypond - -Se pueden incluir espacios verticales y corchetes en las cifras: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <[12 _!] 8 [6 4]> -} -@end lilypond - -Se puede insertar cualquier elemento de marcado de texto como una cifra: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <\markup { \tiny \number 6 \super (1) } 5> -} -@end lilypond - -@c TODO We need to include notes any time we use extenders to -@c avoid extraneous staff creation due to Staff.use... in -@c \bassFigureExtendersOn - -Se pueden usar líneas de continuación para indicar cifras que se -repiten: - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - { - \clef bass - e4 d c b, - e4 d c b, - } - \figures { - \bassFigureExtendersOn - <6 4>4 <6 3> <7 3> <7 3> - \bassFigureExtendersOff - <6 4>4 <6 3> <7 3> <7 3> - } ->> -@end lilypond - -@noindent -En este caso, las líneas de extensión sustituyen a las cifras -existentes, a no ser que las líneas de continuación hayan sido -terminadas explícitamente. - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - \figures { - \bassFigureExtendersOn - <6 4>4 <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d4 d c c - } ->> -@end lilypond - - -La siguiente tabla resume los modificadores de cifrado disponibles. - -@multitable @columnfractions .1 .5 .4 - -@item -@b{Modificador} -@tab -@b{Propósito} -@tab -@b{Ejemplo} - -@item -+, -, ! -@tab -Alteraciones -@tab -@lilypond[line-width=4\cm] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -@item -\+, / -@tab -Aumentaciones y disminuciones -@tab -@lilypond[line-width=4\cm] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -@item -\\ -@tab -Sexta elevada -@tab -@lilypond[line-width=4\cm] -\figures { - <6\\> -} -@end lilypond - -@item -\! -@tab -Fin de línea de continuación -@tab -@lilypond[line-width=4\cm] -<< - \figures { - \bassFigureExtendersOn - <6 4> <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d d c c - } ->> -@end lilypond - -@end multitable - - -@predefined -@cindex bajo cifrado, líneas de extensión -@code{\bassFigureExtendersOn}, -@code{\bassFigureExtendersOff}. -@endpredefined - - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-positions-of-figured-bass-alterations.ly} - - -@seealso -Fragmentos de código: -@rlsr{Chords}. - -Referencia de funcionamiento interno: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - - -@c @knownissues - - -@node Displaying figured bass -@unnumberedsubsubsec Displaying figured bass - -El bajo cifrado se puede imprimir usando el contexto -@code{FiguredBass}, o dentro de la mayoría de los contextos de -pentagrama. - -Cuando se presenta dentro de un contexto de @code{FiguredBass}, la -ubicación vertical de las cifras es independiente de las notas que -están en el pentagrama. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \relative c'' { - c4 c'8 r8 c,4 c' - } - \new FiguredBass { - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - } ->> -@end lilypond - -@noindent -En el ejemplo de arriba, el contexto @code{FiguredBass} se debe -instanciar explícitamente para evitar crear un segundo pentagrama -vacío. - -El bajo cifrado se puede añadir también a contextos de @code{Staff} -directamente. En este caso, la posición vertical de las cifras se -ajusta automáticamente. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - -Cuando se escribe dentro de un contexto de pentagrama, el bajo cifrado -se puede presentar encima o debajo del mismo. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - \bassFigureStaffAlignmentDown - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - - -@predefined -@cindex bajo cifrado, alineación -@code{\bassFigureStaffAlignmentDown}, -@code{\bassFigureStaffAlignmentUp}, -@code{\bassFigureStaffAlignmentNeutral}. -@endpredefined - - -@c @snippets - -@seealso -@c Music Glossary: -@c @rg los{}. -@c -@c Learning Manual: -@c @rle arning{}. -@c -@c Notation Reference: -@c @re f{}. -@c -@c Application Usage: -@c @rpr ogram{}. -@c -@c Installed Files: -@c @fil e{}. -@c -Snippets: -@rlsr{Chords}. - -Referencia de funcionamiento interno: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - - -@knownissues - -Para asegurar que las líneas extensoras funcionan adecuadamente, lo -más seguro es utilizar las mismas duraciones en la línea de cifras y -en la línea del bajo. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are correct here, with the same rhythm as the bass - \repeat unfold 4 { <6 4->16. <6 4->32 } - <5>8. r16 <6>8 <6\! 5-> - } ->> -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are incorrect here, even though the timing is the same - <6 4->4 <6 4->4 - <5>8. r16 <6>8 <6\! 5-> - } ->> -@end lilypond - -Si se usan líneas extensoras, las cifras adyacentes con el mismo -número en distinta colocación puede hacer que se inviertan las -posiciones de las cifras. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - \bassFigureExtendersOn - <6 5>4 <5\! 4> < 5 _!> <6> - } ->> -@end lilypond - -Para evitar este problema, sencillamente habilite los extensores -después de la cifra y quítelos al final de la línea extensora. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - <6 5>4 <5 4> - \bassFigureExtendersOn - < 5 _!>4 <6> - \bassFigureExtendersOff - } ->> -@end lilypond diff --git a/Documentation/es/user/converters.itely b/Documentation/es/user/converters.itely deleted file mode 100644 index e62cef0301..0000000000 --- a/Documentation/es/user/converters.itely +++ /dev/null @@ -1,360 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Converting from other formats -@chapter Converting from other formats - -También se puede escribir la música a través de su importación desde -otros formatos. Este capítulo trata de documentar las herramientas -incluidas en la dirstribución que permiten hacerlo. Existen otras -herramientas que producen código de entrada de LilyPond, como por -ejemplo secuenciadores con interfaz gráfico y comvertidores de XML. -Consulte el @uref{http://@/lilypond@/.org,website} para ver más -detalles. - -Son programas distintos a @command{lilypond} propiamente dicho, y se -ejecutan desde la línea de órdenes; consulte @ref{Command-line usage} -para ver más información. Si tiene MacOS 10.3 o 10.4 y tiene -problemas para ejecutar alguno de estos guiones, -p.ej. @code{convert-ly}, consulte @ref{Setup for MacOS X}. - - -@knownissues -Por desgracia no disponemos de los recursos necesarios para poder -mantener estos programas; le rogramos que los tome @qq{tal cual -están}. Se agradecerá el envío de parches correctores, pero los -informes de fallo casi con certeza no se resolverán a medio plazo. - -@menu -* Invoking midi2ly:: Importar archivos MIDI. -* Invoking musicxml2ly:: Importar archivos MusicXML. -* Invoking abc2ly:: Importar archivos ABC. -* Invoking etf2ly:: Importar archivos de Finale. -* Generating LilyPond files:: Interfaces gráficos, transcriptores y programas de composición algorítmica. -@end menu - - - -@node Invoking midi2ly -@section Invoking @command{midi2ly} - -@cindex MIDI - -@command{midi2ly} traduce un archivo MIDI de tipo@tie{}1 a un acrhivo -de código fuente de LilyPond. - -El MIDI (Music Instrument Digital Interface, Interfase Digital para -Instrumentos Musicales) es un estándar para instrumentos digitales: -especifica la interconexión física, un protocolo en serie y un formato -de archivo. El formato de archivo MIDI es un formato estándar de -facto para exportar música de otros programas, por lo que esta -posibilidad puede ser de utilidad al importar archivos de un programa -que tiene un convertidor para un formato directo. - -@command{midi2ly} convierte las pistas en contextos de -@rinternals{Staff}) y los canales en contextos de -@rinternals{Voice}. Se utiliza el modo relativo para las alturas, y -las duraciones se escriben solamente cuando es necesario. - -Es posible grabar un archivo MIDI usando un teclado digital y -convertirlo después a @file{.ly}. Sin embargo, los intérpretes -humanos no son lo suficientemente exactos desde el punto de vista -rítmico como para hacer que sea trivial la conversión de MIDI a LY. -Si se invoca con las opciones de cuantización (@code{-s} y @code{-d}), -@command{midi2ly} intenta compensar los errores de medida, pero no lo -hace muy bien. Por ello, no se recomienda usar @command{midi2ly} para -archivos midi generados por seres humanos. - - -Se invoca a partir de la línea de órdenes como sigue: -@example -midi2ly [@var{opción}]@dots{} @var{archivo_midi} -@end example - -Observe que al decir @q{línea de órdenes}, queremos decir la línea de -órdenes del sistema operativo. Consulte @ref{Converting from other -formats} para ver más información sobre esto. - -@command{midi2ly} contempla las siguientes opciones: - -@table @code -@item -a, --absolute-pitches -Imprimir alturas absoultas. - -@item -d, --duration-quant=@var{DURACIÓN} -Cuantizar las duraciones a @var{DURACIÓN}. - -@item -e, --explicit-durations -Imprimir valores de figura explícitos. - -@item -h,--help -Mostrar un resumen de las instrucciones de utilización. - -@item -k, --key=@var{alteración}[:@var{minor}] -Establecer la tonalidad predeterminada. @math{@var{alteración} > 0} -establece el número de sostenidos; @math{@var{alteración} < 0} -establece el número de bemoles. Se indica una tonalidad menor -mediante @code{:1}. - -@item -o, --output=@var{archivo} -Escribir la salida en @var{archivo}. - -@item -s, --start-quant=@var{DURACIÓN} -Cuantizar el inicio de las notas a @var{DURACIÓN}. - -@item -t, --allow-tuplet=@var{DURACIÓN}*@var{NUMERADOR}/@var{DENOMINADOR} -Permitir duraciones de grupos especiales @var{DURACIÓN}*@var{NUMERADOR}/@var{DENOMINADOR}. - -@item -v, --verbose -Ser prolijo en comentarios. - -@item -V, --version -Imprimir el número de la versión. - -@item -w, --warranty -Presentar la garantía y el copyright. - -@item -x, --text-lyrics -Tratar todos los textos como letra de la canción. -@end table - - -@knownissues - -Las notas superpuestas en un arpegio no se procesarán correctamente. -La primera nota se lee y el resto se ignoran. Aplique la misma -duración a todas las notas y añada marcas de fraseo o indicaciones de -pedal. - - -@node Invoking musicxml2ly -@section Invoking @code{musicxml2ly} - -@cindex MusicXML - -@uref{http://@/www.@/musicxml@/.org/,MusicXML} es un -dialecto del XML para representar notación musical. - -@command{musicxml2ly} extrae las notas, articulaciones, estructura de -la partitura, letra, etc., de archivos de MusicXML parte a parte, y -los escribe en un archivo .ly. Se invoca a través de la línea de -órdenes. - -La invocación desde la línea de órdenes se hace como sigue: - -@example -musicxml2ly [@var{opción}]@dots{} @var{archivo_xml} -@end example - -Observe que por @q{línea de órdenes}, nos referimos a la línea de -órdenes del sistema operativo. Consulte @ref{Converting from other -formats}, para obtener más información acerca de esto. - -Si el nombre de archivo proporcionado es @file{-}, -@command{musicxml2ly} lee la entrada desde la entrada estándar. - -@command{musicxml2ly} contempla las siguientes opciones: - -@table @code -@item -a, --absolute -convertir las alturas en modo absoluto. - -@item -h,--help -mostrar un resumen de la utilización y las opciones. - -@item -l, --language=IDIOMA -utilizar un archivo de idioma distinto 'IDIOMA.ly' y los -correspondientes nombres de nota, p.ej. 'deutsch' para deutsch.ly y -los nombres de nota en alemán. - -@item --lxml -usar el paquete de Python lxml.etree para el análisis de XML; usa -menos memoria y tiempo de CPU. - -@item --nd --no-articulation-directions -no convertir las direcciones (@code{^}, @code{_} o @code{-}) para las -articulaciones, dinámica, etc. - -@item --no-beaming -no convertir la información de las barras, en vez de ello usar el -barrado automático de LilyPond. - -@item -o,--output=@var{archivo} -fijar el nombre del archivo de salida como @var{archivo}. Si -@var{archivo} es @file{-}, la salida se imprime sobre stdout, la -salida estándar. Si no se da, se usa @var{archivo_xml}@file{.ly}. - -@item -r,--relative -convertir las alturas en modo relativo (predeterminado). - -@item -v,--verbose -ser prolijo. - -@item -v,--version -imprimir la información de la versión. - -@item -z,--compressed -el archivo de entrada es un archivo MusicXML comprimido en zip. -@end table - - - -@node Invoking abc2ly -@section Invoking @code{abc2ly} - -@cindex ABC - -ABC es un formato bastante simple basado en ASCII. Se encuentra -descrito en el sitio web de ABC: - -@quotation -@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. -@end quotation - -@command{abc2ly} convierte ABC en LilyPond. Se invoca de la siguiente -manera: - -@example -abc2ly [@var{opción}]@dots{} @var{archivo_abc} -@end example - -@command{abc2ly} contempla las siguientes opciones: - -@table @code -@item -b,--beams=None -preservar la noción de ABC de las barras -@item -h,--help -esta ayuda -@item -o,--output=@var{archivo} -fijar el nombre del archivo de salida como @var{archivo}. -@item -s,--strict -ser estricto respecto al éxito -@item --version -imprimir la infomación de la versión. -@end table - -Existe una posibilidad rudimentaria para añadir código de LilyPond el -archivo fuente de ABC. Si decimos: - -@example -%%LY voices \set autoBeaming = ##f -@end example - -Producirá que el texto que sigue a la palabra clave @q{voices} se -inserte en la voz en curso del archivo de salida de LilyPond. - -De forma similar, - -@example -%%LY slyrics más palabras -@end example - -producirá que el texto que sigue a la palabra clave @q{slyrics} se -inserte en la línea de letra en curso. - - -@knownissues - -El estándar ABC no es muy @q{estándar}. Existen diferentes -convenciones para las posibilidades avanzadas (por ejemplo, -polifonía). - - -No se pueden convertir varias melodías de un solo archivo. - -ABC sincroniza las letras y las notas al principio de una línea; -@command{abc2ly} no lo hace. - -@command{abc2ly} ignora el barrado de ABC. - - -@node Invoking etf2ly -@section Invoking @command{etf2ly} - -@cindex ETF -@cindex enigma -@cindex Finale -@cindex Coda Technology - -ETF (Enigma Transport Format) es un formato utilizado por Finale, un -producto de Coda Music Technology. @command{etf2ly} convierte parte -de un archivo ETF en un archivo de LilyPond listo para usar. - -Se invoca a través de la línea de órdenes como sigue: - -@example -etf2ly [@var{opción}]@dots{} @var{archivo_etf} -@end example - -Observe que por @q{línea de órdenes}, nos referimos a la línea de -órdenes del sistema operativo. Consulte @ref{Converting from other -formats}, para obtener más información acerca de esto. - -@command{etf2ly} contempla las siguientes opciones: - -@table @code -@item -h,--help -esta ayuda -@item -o,--output=@var{ARCHIVO} -fijar el nombre del archivo de salida como @var{ARCHIVO} -@item --version -información de la versión -@end table - - -@knownissues - -La lista de inscripciones de articulación posibles es incompleta. Los -compases vacíos confunden a @command{etf2ly}. Las secuencias de notas -de adorno no se dan por finalizadas satisfactoriamente. - - -@node Generating LilyPond files -@section Generating LilyPond files - -@cindex programas externos, generación de archivos de LilyPond - -El propio LilyPond no contempla la utilización de ningún otro formato, -pero existen algunas herramientas externas que también generan -archivos de LilyPond. - -Entre ellas se encuentran las siguientes: - -@itemize -@item -@uref{http://@/www@/.denemo@/.org/,Denemo}, editor de partituras gráfico. -@item -@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, -convertidor monofónico de MIDI a LilyPond en tiempo real. -@item -@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, -un modo principal para Emacs. -@item -@uref{http://@/www@/.nongnu@/.org/@/xml2ly/,xml2ly}, que importa -@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML}. -@item -@uref{http://@/noteedit@/.berlios@/.de,NoteEdit} que importa -@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML}. -@item -@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden}, que importa -MIDI. -@item -@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, -una biblioteca de LISP para generar notación musical. -@item -@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml}, -contempla experimentalmente la exportación para LilyPond. -@item -@uref{http://www.tuxguitar.com.ar/}, puede exportar a LilyPond. -@item -@uref{http://musescore.org} también puede exportar a LilyPond. -@end itemize - diff --git a/Documentation/es/user/dedication.itely b/Documentation/es/user/dedication.itely deleted file mode 100644 index 95ac2e4af6..0000000000 --- a/Documentation/es/user/dedication.itely +++ /dev/null @@ -1,17 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@quotation -Queremos dedicar este programa a todos los amigos que hemos -hecho a través de la música. - -Han-Wen y Jan -@end quotation diff --git a/Documentation/es/user/editorial.itely b/Documentation/es/user/editorial.itely deleted file mode 100644 index bd48ad828c..0000000000 --- a/Documentation/es/user/editorial.itely +++ /dev/null @@ -1,704 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is included from notation.itely -@ignore - Translation of GIT committish: c7d6848e128f461a4cec093f7a71a34b2dc314eb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Editorial annotations -@section Editorial annotations - -@lilypondfile[quote]{editorial-headword.ly} - -Esta sección trata de las diversas maneras de modificar el aspecto de -las notas y de aplicar énfasis analítico o educativo. - -@menu -* Inside the staff:: -* Outside the staff:: -@end menu - - -@node Inside the staff -@subsection Inside the staff - -Esta sección trata sobre cómo aplicar énfasis a los elementos situados -dentro del pentagrama. - -@menu -* Selecting notation font size:: -* Fingering instructions:: -* Hidden notes:: -* Coloring objects:: -* Parentheses:: -* Stems:: -@end menu - -@node Selecting notation font size -@unnumberedsubsubsec Selecting notation font size - -@cindex fuente tipográfica (de notación), tamaño -@cindex selección del tamaño de la fuente tipográfica (de notación) -@cindex notación, tamaño de la fuente -@cindex notas, cabezas de - -@funindex fontSize -@funindex font-size -@funindex magstep -@funindex \huge -@funindex \large -@funindex \normalsize -@funindex \small -@funindex \tiny -@funindex \teeny -@funindex huge -@funindex large -@funindex normalsize -@funindex small -@funindex tiny -@funindex teeny - -Se puede alterar el tamaño de la fuente tipográfica de los elementos -de notación. Esto no cambia el tamaño de los símbolos variables, como -las barras de corchea o las ligaduras. - -@warning{Para los tamaños de tipografía del texto, consulte -@ref{Selecting font and font size}.} - -@lilypond[verbatim,quote,relative=2] -\huge -c4.-> d8---3 -\large -c4.-> d8---3 -\normalsize -c4.-> d8---3 -\small -c4.-> d8---3 -\tiny -c4.-> d8---3 -\teeny -c4.-> d8---3 -@end lilypond - -Internamente, esto establece un valor para la propiedad -@code{fontSize}. Esto, a su vez, hace que se establezca el valor de -la propiedad @code{font-size} de todos los objetos de presentación. -El valor de @code{font-size} es un número que indica el tamaño con -relación al tamaño estándar para la altura vigente del pentagrama. -Cada unidad hacia arriba es un incremento de un 12% del tamaño de la -fuente, aproximadamente. Seis unidades son exactamente un factor de -dos. La función de Scheme @code{magstep} convierte un número de -tamaño @code{font-size} a un factor de escalado. La propiedad -@code{font-size} también se puede establecer directamente, de forma -que queden afectados solamente determinados objetos gráficos. - -@lilypond[verbatim,quote,relative=2] -\set fontSize = #3 -c4.-> d8---3 -\override NoteHead #'font-size = #-4 -c4.-> d8---3 -\override Script #'font-size = #2 -c4.-> d8---3 -\override Stem #'font-size = #-5 -c4.-> d8---3 -@end lilypond - -@cindex estándar, tamaño de la tipografía (de notación) -@cindex fuente tipográfica (de notación), tamaño estándar de - -@funindex font-interface -@funindex font-size - -Los cambios en el tamaño de la fuente se obtienen por medio del -escalado del tamaño del diseño que se encuentra más cerca del tamaño -deseado. El tamaño estándar para la tipografía (para @code{font-size -= #0}), depende de la altura estándar del pentagrama. Para un -pentagrama de 20 puntos, se selecciona una fuente de 10 puntos. - -La propiedad @code{font-size} sólo se puede establecer en objetos -gráficos que utilicen fuentes tipográficas. Éstos son los que -contemplan el interfaz de presentación @code{font-interface}. - - -@predefined -@code{\teeny} (enano), -@code{\tiny} (muy pequeño), -@code{\small} (pequeño), -@code{\normalsize} (normal), -@code{\large} (grande), -@code{\huge} (enorme). -@endpredefined - - -@seealso -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funcionamiento interno: -@rinternals{font-interface}. - - -@node Fingering instructions -@unnumberedsubsubsec Fingering instructions - -@cindex digitación -@cindex cambio de dedo - -@funindex \finger -@funindex finger - -Las instrucciones de digitación se pueden introducir usando -@var{nota}-@var{dígito}: - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 e-3 -@end lilypond - -Para los cambios de dedo se pueden usar elementos de marcado de texto. - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } -@end lilypond - -@cindex thumb-script - -@funindex \thumb -@funindex thumb - -Puede usar la articulación de pulgar para indicar que una nota se debe -tocar con el pulgar (p.ej. en música de cello). - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -@cindex digitación de acordes -@cindex digitación, instrucciones de, para acordes -@cindex acordes, digitación de - -Las digitaciones para los acordes también se pueden añadir a las notas -individuales del acorde escribiéndolas después de las alturas. - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -Las indicaciones de digitación se pueden situar manualmente encima o -debajo del pentagrama, véase @ref{Direction -and placement}. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{avoiding-collisions-with-chord-fingerings.ly} - - -@seealso -Referencia de la notación: -@ref{Direction and placement}. - -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funcionamiento interno: -@rinternals{FingeringEvent}, -@rinternals{fingering-event}, -@rinternals{Fingering_engraver}, -@rinternals{New_fingering_engraver}, -@rinternals{Fingering}. - - -@node Hidden notes -@unnumberedsubsubsec Hidden notes - -@cindex ocultas, notas -@cindex invisibles, notas -@cindex transparentes, notas -@cindex notas ocultas -@cindex notas invisibles -@cindex notas transparentes - -@funindex \hideNotes -@funindex hideNotes -@funindex \unHideNotes -@funindex unHideNotes - -Las notas ocultas (o invisibles, o transparentes) pueden ser de -utilidad en la preparación de ejercicios de teoría o de composición. - -@lilypond[verbatim,quote,relative=2] -c4 d -\hideNotes -e4 f -\unHideNotes -g a -\hideNotes -b -\unHideNotes -c -@end lilypond - -Los objetos de notación que están anclados a notas invisibles, son a -pesar de ello visibles. - -@lilypond[verbatim,quote,relative=2] -c4( d) -\hideNotes -e4(\p f)-- -@end lilypond - - -@predefined -@code{\hideNotes}, -@code{\unHideNotes}. -@endpredefined - - -@seealso -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funcionamiento interno: -@rinternals{Note_spacing_engraver}, -@rinternals{NoteSpacing}. - - -@node Coloring objects -@unnumberedsubsubsec Coloring objects - -@cindex coloreados, objetos -@cindex colores -@cindex colorear objetos -@cindex objetos, colorear -@cindex coloreadas, notas -@cindex colorear notas -@cindex notas coloreadas -@cindex x11, color de -@cindex x11-color -@cindex colores de x11 -@cindex with-color - -@funindex color -@funindex \with-color -@funindex with-color -@funindex x11-color - -Se pueden asignar colores a los objetos individuales. Los nombres de -color válidos se encuentran relacionados en la @ref{List of colors}. - -@lilypond[verbatim,quote,relative=2] -\override NoteHead #'color = #red -c4 c -\override NoteHead #'color = #(x11-color 'LimeGreen) -d -\override Stem #'color = #blue -e -@end lilypond - -Se puede acceder al espectro completo de colores definido para X11 -usando la función de Scheme x11-color. Esta función acepta un único -argumento; éste puede ser un símbolo de la forma @var{'FulanoMengano} -o una cadena de la forma @var{"FulanoMengano"}. La primera forma es -más rápida de escribir y también más eficiente. Sin embargo, al usar -la segunda forma es posible acceder a los colores de X11 por medio de -la forma del nombre que tiene varias palabras. - -Si @code{x11-color} no entiende el parámetro, el color predeterminado -que se devuelve es el negro. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -gis8 a -\override Beam #'color = #(x11-color "medium turquoise") -gis a -\override Accidental #'color = #(x11-color 'DarkRed) -gis a -\override NoteHead #'color = #(x11-color "LimeGreen") -gis a -% this is deliberate nonsense; note that the stems remain black -\override Stem #'color = #(x11-color 'Boggle) -b2 cis -@end lilypond - -@cindex rgb-color -@cindex color rgb -@cindex rgb, color - -@funindex rgb-color - -Se pueden especificar colores RGB exactos utilizando la función de -Scheme @code{rgb-color}. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -\override Stem #'color = #(rgb-color 0 0 0) -gis8 a -\override Stem #'color = #(rgb-color 1 1 1) -gis8 a -\override Stem #'color = #(rgb-color 0 0 0.5) -gis4 a -@end lilypond - - -@seealso -Referencia de la notación: -@ref{List of colors}, -@ref{The tweak command}. - -Fragmentos de código: -@rlsr{Editorial annotations}. - - -@cindex x11, color de -@cindex coloreadas, notas de acorde -@cindex notas coloreadas en acordes -@cindex color en acordes - -@funindex x11-color - -@knownissues -Un color de X11 no es necesariamente de la misma tonalidad exacta que -un color normal de nombre similar. - -No todos los colores de X11 se distinguen entre sí en un navegador -web, es decir, un navegador de web podría no mostrar ninguna -diferencia entre @code{'LimeGreen} (verde lima) y @code{'ForestGreen} -(verde bosque). Para la web se recomiendan los colores normales (o -sea: @code{#blue}, azul, @code{#green}, verde, @code{#red}, rojo). - -Las notas de un acorde no se pueden colorear con @code{\override}; en -su lugar utilice @code{\tweak}. Consulte @ref{The tweak command} para -ver más detalles. - - -@node Parentheses -@unnumberedsubsubsec Parentheses - -@cindex fantasma, notas -@cindex notas fantasma -@cindex notas entre paréntesis -@cindex paréntesis - -@funindex \parenthesize -@funindex parenthesize - -Los objetos se pueden encerrar entre paréntesis anteponiendo -@code{\parenthesize} al evento musical. Si se aplica a un acorde, -encierra cada nota dentro de un par de paréntesis. También se pueden -poner entre paréntesis las notas individuales de un acorde. - -@lilypond[verbatim,quote,relative=2] -c2 \parenthesize d -c2 \parenthesize -c2 -@end lilypond - -Los objetos que no son notas también se pueden poner entre paréntesis. - -@lilypond[verbatim,quote,relative=2] -c2-\parenthesize -. d -c2 \parenthesize r -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funciionamiento interno: -@rinternals{Parenthesis_engraver}, -@rinternals{ParenthesesItem}, -@rinternals{parentheses-interface}. - -@knownissues - -Al poner un acorde entre paréntesis, se encierra cada una de las notas -individuales entre paréntesis, en vez de un solo paréntesis grande -rodeando al acorde completo. - - -@node Stems -@unnumberedsubsubsec Stems - -@cindex plica -@cindex plica invisible -@cindex invisible, plica - -@funindex \stemUp -@funindex stemUp -@funindex \stemDown -@funindex stemDown -@funindex \stemNeutral -@funindex stemNeutral - -Cuando se encuentra con una nota, se crea automáticamente un objeto -@code{Stem} (plica). Para las redondas y los silencios, también se -crean pero se hacen invisibles. - -@predefined -@code{\stemUp}, -@code{\stemDown}, -@code{\stemNeutral}. -@endpredefined - -@snippets - -@cindex stem, direction -@cindex stem, up -@cindex stem, down -@cindex stem, neutral - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{default-direction-of-stems-on-the-center-line-of-the-staff.ly} - - -@seealso -Referencia de la notación: -@ref{Direction and placement}. - -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funcionamiento interno: -@rinternals{Stem_engraver}, -@rinternals{Stem}, -@rinternals{stem-interface}. - - -@node Outside the staff -@subsection Outside the staff - -Esta sección trata sobre cómo enfatizar elementos que están dentro del -pentagrama, desde fuera del pentagrama. - -@menu -* Balloon help:: -* Grid lines:: -* Analysis brackets:: -@end menu - -@node Balloon help -@unnumberedsubsubsec Balloon help - -@cindex globo -@cindex notación, explicación de -@cindex globo de ayuda -@cindex ayuda, globos de - -@funindex \balloonGrobText -@funindex \balloonText -@funindex Balloon_engraver -@funindex balloonGrobText -@funindex balloonText -@funindex \balloonLengthOn -@funindex balloonLengthOn -@funindex \balloonLengthOff -@funindex balloonLengthOff - -Los elementos de notación se pueden marcar y nombrar con la ayuda de -un cartel o globo de ayuda rectangular. El propósito principal de -esta funcionalidad es la explicación de la notación. - -@c KEEP LY -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonGrobText #'Stem #'(3 . 4) \markup { "Soy una plica" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "Soy un silencio" } - r - 2. -} -@end lilypond - -Existen dos funciones musicales, @code{balloonGrobText} y -@code{balloonText}; el primero se usa como @code{\once\override} para -adjuntar un texto a cualquier grob, y el último se usa coqmo -@code{\tweak}, normalmente dentro de acordes, para adjuntar un texto a -una nota individual. - -Los textos de globo normalmente influyen en el espaciado de las notas, -pero esto puede cambiarse: - -@c KEEP LY -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonLengthOff - \balloonGrobText #'Stem #'(3 . 4) \markup { "Soy una plica" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "Soy un silencio" } - r - \balloonLengthOn - 2. -} -@end lilypond - - -@predefined -@code{\balloonLengthOn}, -@code{\balloonLengthOff}. -@endpredefined - - -@seealso -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funcionamiento interno: -@rinternals{Balloon_engraver}, -@rinternals{BalloonTextItem}, -@rinternals{balloon-interface}. - - -@node Grid lines -@unnumberedsubsubsec Grid lines - -@cindex rejilla, líneas de -@cindex líneas de rejilla -@cindex vertical, línea, entre pentagramas -@cindex línea vertical entre pentagramas - -@funindex Grid_point_engraver -@funindex Grid_line_span_engraver -@funindex gridInterval - -Se pueden dibujar líneas verticales entre los pentagramas -sincronizadas con las notas. - -Se debe usar el grabador @code{Grid_point_engraver} para crear los -puntos extremos de las líneas, mientras que el grabador -@code{Grid_line_span_engraver} se debe utilizar para trazar -efectivamente las líneas. De forma predeterminada, esto centra las -líneas de rejilla horizontalmente debajo y al lado izquierdo de la -cabeza de las notas. Las líneas de rejilla se extienden a partir de -línea media de los pentagramas. El intervalo @code{gridInterval} debe -especificar la duración entre las líneas de rejilla. - -@lilypond[verbatim,quote] -\layout { - \context { - \Staff - \consists "Grid_point_engraver" - gridInterval = #(ly:make-moment 1 4) - } - \context { - \Score - \consists "Grid_line_span_engraver" - } -} - -\score { - \new ChoirStaff << - \new Staff \relative c'' { - \stemUp - c4. d8 e8 f g4 - } - \new Staff \relative c { - \clef bass - \stemDown - c4 g' f e - } - >> -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grid-lines--changing-their-appearance.ly} - - -@seealso -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funcionamiento interno: -@rinternals{Grid_line_span_engraver}, -@rinternals{Grid_point_engraver}, -@rinternals{GridLine}, -@rinternals{GridPoint}, -@rinternals{grid-line-interface}, -@rinternals{grid-point-interface}. - - -@node Analysis brackets -@unnumberedsubsubsec Analysis brackets - -@cindex corchetes -@cindex fraseo, corchetes de -@cindex corchetes de fraseo -@cindex musicológico, análisis -@cindex análisis musicológico -@cindex notas, corchetes de agrupación de -@cindex horizontal, corchete -@cindex corchete horizontal - -@funindex Horizontal_bracket_engraver -@funindex \startGroup -@funindex startGroup -@funindex \stopGroup -@funindex stopGroup - -Los corchetes se usan en análisis musical para indicar la estructura -de las piezas musicales. Están contemplados los corchetes -horizontales simples. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c2\startGroup - d\stopGroup -} -@end lilypond - -Los corchetes de análisis se pueden anidar. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c4\startGroup\startGroup - d4\stopGroup - e4\startGroup - d4\stopGroup\stopGroup -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Editorial annotations}. - -Referencia de funcionamiento interno: -@rinternals{Horizontal_bracket_engraver}, -@rinternals{HorizontalBracket}, -@rinternals{horizontal-bracket-interface}, -@rinternals{Staff}. diff --git a/Documentation/es/user/expressive.itely b/Documentation/es/user/expressive.itely deleted file mode 100644 index 06328b781e..0000000000 --- a/Documentation/es/user/expressive.itely +++ /dev/null @@ -1,1046 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Expressive marks -@section Expressive marks - -@lilypondfile[quote]{expressive-headword.ly} - -Esta sección relaciona diversas marcas de expresión que se pueden -crear en un a partitura. - -@menu -* Attached to notes:: -* Curves:: -* Lines:: -@end menu - - -@node Attached to notes -@subsection Attached to notes - -Esta sección explica cómo crear marcas expresivas que están aplicadas -a notas: articulaciones, ornamentos y matices. También se tratan los -métodos para crear las nuevas marcas dinámicas. - -@menu -* Articulations and ornamentations:: -* Dynamics:: -* New dynamic marks:: -@end menu - -@node Articulations and ornamentations -@unnumberedsubsubsec Articulations and ornamentations - -@cindex articulaciones -@cindex ornamentación -@cindex guiones -@cindex ornamentos -@cindex espressivo -@cindex calderón -@cindex arco arriba -@cindex arco abajo -@cindex indicaciones de pedal -@cindex indicaciones de pedalero de órgano -@cindex pedal de órgano -@cindex grupeto -@cindex mordente circular -@cindex nota abierta -@cindex nota tapada -@cindex flageolet -@cindex mordente circular, inverso -@cindex trino -@cindex semitrino -@cindex mordente -@cindex prallprall -@cindex prallmordent -@cindex semitrino ascendente -@cindex semitrino descendente -@cindex indicación de pulgar -@cindex segno -@cindex coda -@cindex varcoda - -@funindex - - -Se pueden adjuntar a las notas un amplio abanico de símbolos para -denotar articulaciones, adornos y otras indicaciones de ejecución, -utilizando la sintaxis siguiente: - -@example -@var{nota}\@var{nombre} -@end example - -La lista de los posibles valores de @var{nombre} está en @ref{List of -articulations}. Por ejemplo: - -@lilypond[verbatim,quote,relative=2] -c4\staccato c\mordent b2\turn -c1\fermata -@end lilypond - -@cindex marcato -@cindex tenuto -@cindex staccatissimo -@cindex acento -@cindex picado -@cindex staccato -@cindex portato - - -Algunas de estas articulaciones tienen abreviaturas que facilitan su -escritura. Las abreviaturas se escriben detrás del nombre de la nota, -y su sintaxis consiste en un guión @code{-} seguido de un símbolo que -especifica la articulación. Existen abreviaturas predefinidas para el -@notation{marcato}, @notation{stopped} (nota apagada), -@notation{tenuto}, @notation{staccatissimo}, @notation{accent} -(acento), @notation{staccato} (picado), y @notation{portato}. La -salida correspondiente a estas articulaciones aparece de la siguiente -manera: - -@lilypond[verbatim,quote,relative=2] -c4-^ c-+ c-- c-| -c4-> c-. c2-_ -@end lilypond - -Las reglas para la colocación predeterminada de las articulaciones se -encuentran definidas en el archivo @file{scm/@/script@/.scm}. Las -articulaciones y ornamentos se pueden colocar manualmente por encima o -por debajo del pentagrama, véase @ref{Direction and placement}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{modifying-default-values-for-articulation-shorthand-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-vertical-ordering-of-scripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-a-delayed-turn.ly} - -@seealso -Glosario musical: -@rglos{tenuto}, -@rglos{accent}, -@rglos{staccato}, -@rglos{portato}. - -Referencia de la notación: -@ref{Direction and placement}, -@ref{List of articulations}, -@ref{Trills}. - -Archivos instalados: -@file{scm/@/script@/.scm}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{Script}, -@rinternals{TextScript}. - - -@node Dynamics -@unnumberedsubsubsec Dynamics - -@cindex dinámica -@cindex matices absolutos -@cindex matices -@cindex absolutos, matices -@funindex \pppp -@funindex pppp -@funindex \ppp -@funindex ppp -@funindex \pp -@funindex pp -@funindex \p -@funindex p -@funindex \mp -@funindex mp -@funindex \mf -@funindex mf -@funindex \f -@funindex f -@funindex \ff -@funindex ff -@funindex \fff -@funindex fff -@funindex \ffff -@funindex ffff -@funindex \fp -@funindex fp -@funindex \sf -@funindex sf -@funindex \sff -@funindex sff -@funindex \sp -@funindex sp -@funindex \spp -@funindex spp -@funindex \sfz -@funindex sfz -@funindex \rfz -@funindex rfz - -Las marcas dinámicas de matiz absoluto se especifican usando un -comando después de una nota: @code{c4\ff}. Las marcas dinámicas -disponibles son @code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, -@code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, -@code{\ffff}, @code{\fp}, @code{\sf}, @code{\sff}, @code{\sp}, -@code{\spp}, @code{\sfz} y @code{\rfz}. Las indicaciones dinámicas se -pueden colocar manualmente por encima o por debajo del pentagrama; -para ver más detalles, consulte @ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2\ppp c\mp -c2\rfz c^\mf -c2_\spp c^\ff -@end lilypond - -@cindex regulador -@cindex crescendo -@cindex decrescendo -@cindex diminuendo - -@funindex \< -@funindex \> -@funindex \! -@funindex \cr -@funindex cr -@funindex \decr -@funindex decr - -Una indicación de @notation{crescendo} se comienza con @code{\<} y se -termina con @code{\!}, con un matiz absoluto o con otra indicación de -crescendo o de decrescendo. Una indicación de @notation{decrescendo} -comienza con @code{\>} y se termina también con @code{\!}, con un -matiz dinámico absoluto o con otra indicación de crescendo o de -decrescendo. Se pueden usar @code{\cr} y @code{\decr} en lugar de -@code{\<} y @code{\>}. De forma predeterminada, se tipografían -reguladores en ángulo cuando se utiliza esta notación. - -@lilypond[verbatim,quote,relative=2] -c2\< c\! -d2\< d\f -e2\< e\> -f2\> f\! -e2\> e\mp -d2\> d\> -c1\! -@end lilypond - -Se requieren silencios espaciadores para tipografiar varias -indicaciones dinámicas sobre una sola nota. - -@cindex varios matices sobre una nota -@cindex matices, varios sobre una nota -@cindex dinámica, varias indicaciones sobre una nota - -@lilypond[verbatim,quote,relative=2] -c4\< c\! d\> e\! -<< f1 { s4 s4\< s4\> s4\! } >> -@end lilypond - -@cindex espressivo, articulación - -@funindex \espressivo -@funindex espressivo - -En algunas situaciones, la marca de articulación @code{\espressivo} -puede ser apropiada para indicar un crescendo y decrescendo sobre una -nota: - -@lilypond[verbatim,quote,relative=2] -c2 b4 a -g1\espressivo -@end lilypond - -@funindex \crescTextCresc -@funindex crescTextCresc -@funindex \dimTextDecresc -@funindex dimTextDecresc -@funindex \dimTextDecr -@funindex dimTextDecr -@funindex \dimTextDim -@funindex dimTextDim -@funindex \crescHairpin -@funindex crescHairpin -@funindex \dimHairpin -@funindex dimHairpin - -Los crescendi y decrescendi se pueden tipografiar como marcas -textuales en lugar de reguladores. Las instrucciones incorporadaas -que activan estos modos de texto son @code{\crescTextCresc}, -@code{\dimTextDecresc}, @code{\dimTextDecr} y @code{\dimTextDim}. Las -instrucciones correspondientes @code{\crescHairpin} y -@code{\dimHairpin} hacen que vuelvan a aparecer los reguladores de -nuevo: - -@lilypond[verbatim,quote,relative=2] -\crescTextCresc -c2\< d | e f\! -\dimTextDecresc -e2\> d | c b\! -\crescHairpin -c2\< d | e f\! -\dimHairpin -e2\> d\! -@end lilypond - -Para crear nuevas indicaciones de matiz absoluto o de texto que deba -alinearse con los matices, véase @ref{New dynamic marks}. - -@cindex matices, posición vertical -@cindex dinámica, posición vertical -@cindex vertical, posición, de las indicaciones dinámicas -@funindex DynamicLineSpanner - -La colocación vertical de las indicaciones de dinámica se maneja por -parte de @rinternals{DynamicLineSpanner}. - -@funindex \dynamicUp -@funindex dynamicUp -@funindex \dynamicDown -@funindex dynamicDown -@funindex \dynamicNeutral -@funindex dynamicNeutral - - -@predefined -@code{\dynamicUp}, -@code{\dynamicDown}, -@code{\dynamicNeutral}, -@code{\crescTextCresc}, -@code{\dimTextDim}, -@code{\dimTextDecr}, -@code{\dimTextDecresc}, -@code{\crescHairpin}, -@code{\dimHairpin}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-hairpin-behavior-at-bar-lines.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-the-minimum-length-of-hairpins.ly} - -@cindex al niente -@cindex niente, al - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-hairpins-using-al-niente-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligned-dynamics-and-textscripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{hiding-the-extender-line-for-text-dynamics.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-text-and-spanner-styles-for-text-dynamics.ly} - - -@seealso -Glosario musical: -@rglos{al niente}, -@rglos{crescendo}, -@rglos{decrescendo}, -@rglos{hairpin}. - -Manual de aprendizaje: -@rlearning{Articulation and dynamics}. - -Referencia de la notación: -@ref{Direction and placement}, -@ref{New dynamic marks}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{DynamicText}, -@rinternals{Hairpin}, -@rinternals{DynamicLineSpanner}. - - -@node New dynamic marks -@unnumberedsubsubsec New dynamic marks - -@cindex indicaciones dinámicas nuevas -@cindex dinámicas, indicaciones, nuevas - -La manera más fácil de crear indicaciones dinámicas es usar objetos de -marcado (@code{\markup}). - -@lilypond[verbatim,quote] -moltoF = \markup { molto \dynamic f } - -\relative c' { - 16_\moltoF - 2.. -} -@end lilypond - -@cindex dinámicas indicaciones editoriales -@cindex dinámicas, indicaciones entre paréntesis -@cindex editoriales, indicaciones dinámicas -@funindex \bracket -@funindex bracket -@funindex \dynamic -@funindex dynamic - -En el modo de marcado se pueden crear indicaciones dinámicas -editoriales (entre paréntesis o corchetes). La sintaxis del modo de -marcado se describe en @ref{Formatting text}. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { \bold { \italic ( } - \dynamic f \bold { \italic ) } } } -boxF = \markup { \bracket { \dynamic f } } -\relative c' { - c1_\roundF - c1_\boxF -} -@end lilypond - -@cindex make-dynamic-script -@funindex make-dynamic-script - -Las indicaciones dinámicas sencillas y centradas se crean fácilmente -con la función @code{make-dynamic-script}. La fuente tipográfica de -matices sólo contiene los caracteres @code{f, m, p, r, s} y @code{z}. - -@lilypond[verbatim,quote] -sfzp = #(make-dynamic-script "sfzp") -\relative c' { - c4 c c\sfzp c -} -@end lilypond - -En general @code{make-dynamic-script} toma cualquier objeto de marcado -como argumento. En el siguiente ejemplo, el uso de -@code{make-dynamic-script} asegura la alineación de los objetos de -marcado y reguladores que están aplicados sobre la misma nota. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { - \normal-text { \bold { \italic ( } } - \dynamic f - \normal-text { \bold { \italic ) } } } } -boxF = \markup { \bracket { \dynamic f } } -roundFdynamic = #(make-dynamic-script roundF) -boxFdynamic = #(make-dynamic-script boxF) -\relative c' { - c4_\roundFdynamic\< d e f - g,1_\boxFdynamic -} -@end lilypond - -Se puede utilizar en su lugar la forma Scheme del modo de marcado. Su -sintaxis se explica en @ref{Markup construction in Scheme}. - -@lilypond[verbatim,quote] -moltoF = #(make-dynamic-script - (markup #:normal-text "molto" - #:dynamic "f")) -\relative c' { - 16 - 2..\moltoF -} -@end lilypond - -Los ajustes para las fuentes tipográficas en el modo de marcado se -describen en @ref{Selecting font and font size}. - - -@seealso -Referencia de la notación: -@ref{Formatting text}, -@ref{Selecting font and font size}, -@ref{Markup construction in Scheme}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Fragmentos de código: -@rlsr{Expressive marks}. - - -@node Curves -@subsection Curves - -Esta sección explica cómo crear varias marcas expresivas de forma -curva: ligaduras de expresión y de fraseo, respiraciones, caídas y -elevaciones de tono. - -@menu -* Slurs:: -* Phrasing slurs:: -* Breath marks:: -* Falls and doits:: -@end menu - -@node Slurs -@unnumberedsubsubsec Slurs - -@cindex ligaduras de expresión - -Las @notation{Ligaduras de expresión} se introducen utilizando paréntesis: - -@lilypond[verbatim,quote,relative=2] -f4( g a) a8 b( -a4 g2 f4) -2( 2) -@end lilypond - -@cindex ligaduras de expresión, posicionamiento manual -@cindex ligaduras de expresión, debajo de las notas -@cindex ligaduras de expresión, encima de las notas -@funindex \slurDown -@funindex slurDown -@funindex \slurNeutral -@funindex slurNeutral - -Las ligaduras de expresión se pueden colocar manualmente por encima o -por debajo de las notas, véase @ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2( d) -\slurDown -c2( d) -\slurNeutral -c2( d) -@end lilypond - -@cindex fraseo, ligadura de -@cindex varias ligaduras de expresión -@cindex simultáneas, ligaduras de expresión -@cindex ligadura de fraseo -@cindex ligaduras de expresión, varias -@cindex ligaduras de expresión simultáneas - -No están permitidas las ligaduras de expresión simultáneas o -solapadas, pero una ligadura de fraseo se puede solapar con una -ligadura de expresión. Esto hace posible imprimir dos ligaduras -distintas al mismo tiempo. Para ver más detalles, consulte -@ref{Phrasing slurs}. - -@cindex ligadura de expresión, estilo -@cindex continua, ligadura -@cindex puntos, ligadura de -@cindex discontinua, ligadura -@cindex ligadura continua -@cindex ligadura de puntos -@cindex ligadura discontinua -@cindex estilo de la ligadura -@funindex \slurDashed -@funindex slurDashed -@funindex \slurDotted -@funindex slurDotted -@funindex \slurSolid -@funindex slurSolid - -Las ligaduras de expresión pueden ser continuas, discontinuas o de -puntos. El estilo predeterminado de las ligaduras de expresión es el -continuo: - -@lilypond[verbatim,quote,relative=1] -c4( e g2) -\slurDashed -g4( e c2) -\slurDotted -c4( e g2) -\slurSolid -g4( e c2) -@end lilypond - -@funindex \slurUp -@funindex slurUp - - -@predefined -@code{\slurUp}, -@code{\slurDown}, -@code{\slurNeutral}, -@code{\slurDashed}, -@code{\slurDotted}, -@code{\slurSolid}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{using-double-slurs-for-legato-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{positioning-text-markups-inside-slurs.ly} - -@seealso -Glosario musical: -@rglos{slur}. - -Manual de aprendizaje: -@rlearning{On the un-nestedness of brackets and ties}. - -Referencia de la notación: -@ref{Direction and placement}, -@ref{Phrasing slurs}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{Slur}. - - -@node Phrasing slurs -@unnumberedsubsubsec Phrasing slurs - -@cindex ligaduras de fraseo -@cindex marcas de fraseo -@cindex fraseo, ligaduras de -@cindex fraseo, marcas de -@funindex \( -@funindex \) - -Las @notation{ligaduras de fraseo} (o marcas de fraseo) que indican -una frase musical se escriben usando las instrucciones @code{\(} y -@code{\)} respectivamente: - -@lilypond[verbatim,quote,relative=2] -c4\( d( e) f( -e2) d\) -@end lilypond - -@funindex \phrasingSlurUp -@funindex phrasingSlurUp -@funindex \phrasingSlurDown -@funindex phrasingSlurDown -@funindex \phrasingSlurNeutral -@funindex phrasingSlurNeutral -@funindex phrasingSlurDashed -@funindex \phrasingSlurDashed -@funindex \phrasingSlurDotted -@funindex phrasingSlurDotted -@funindex \phrasingSlurSolid -@funindex phrasingSlurSolid - -Tipográficamente, la ligadura de fraseo se comporta casi exactamente -igual que una ligadura de expresión normal. Sin embargo, se tratan -como objetos diferentes. Una @code{\slurUp} no tendrá ningún efecto -sobre una ligadura de fraseo. Las ligaduras de fraseo se pueden -situar manualmente por encima o por debajo de las notas, véase -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=1] -c4\( g' c,( b) | c1\) -\phrasingSlurUp -c4\( g' c,( b) | c1\) -@end lilypond - -@cindex simultaneous phrasing slurs -@cindex multiple phrasing slurs -@cindex slurs, simultaneous phrasing -@cindex slurs, multiple phrasing -@cindex phrasing slurs, simultaneous -@cindex phrasing slurs, multiple - -No se pueden tener varias ligaduras de fraseo simultáneas o solapadas. - -Las ligaduras de fraseo pueden ser continuas, de puntos o de rayas. -El estilo predeterminado para las ligaduras de fraseo es el continuo: - -@lilypond[verbatim,quote,relative=1] -c4\( e g2\) -\phrasingSlurDashed -g4\( e c2\) -\phrasingSlurDotted -c4\( e g2\) -\phrasingSlurSolid -g4\( e c2\) -@end lilypond - - -@predefined -@code{\phrasingSlurUp}, -@code{\phrasingSlurDown}, -@code{\phrasingSlurNeutral}, -@code{\phrasingSlurDashed}, -@code{\phrasingSlurDotted}, -@code{\phrasingSlurSolid}. -@endpredefined - - -@seealso -Manual de aprendizaje: -@rlearning{On the un-nestedness of brackets and ties}. - -Referencia de la notación: -@ref{Direction and placement}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{PhrasingSlur}. - - -@node Breath marks -@unnumberedsubsubsec Breath marks - -@cindex respiraciones -@cindex pausa, marcas de -@funindex \breathe -@funindex breathe - -Las respiraciones se introducen utilizando @code{\breathe}: - -@lilypond[verbatim,quote,relative=2] -c2. \breathe d4 -@end lilypond - -Están contemplados los indicadores musicales para las marcas de -respiración en la notación antigua, o divisiones. Para ver más -detalles, consulte @ref{Divisiones}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-breath-mark-symbol.ly} - -@cindex caesura - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{inserting-a-caesura.ly} - - -@seealso -Glosario musical: -@rglos{caesura}. - -Referencia de la notación: -@ref{Divisiones}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{BreathingSign}. - - -@node Falls and doits -@unnumberedsubsubsec Falls and doits - -@cindex falls (caídas de tono) -@cindex doits (elevaciones de tono) -@cindex caídas de tono (falls) -@cindex elevaciones de tono (doits) -@funindex \bendAfter -@funindex bendAfter - -Se pueden expresar @notation{caídas} y @notation{subidas} de tono -(falls y doits) añadidas a las notas mediante la instrucción -@code{\bendAfter}. La dirección de la caída o elevación se indica con -un signo más o menos (arriba o abajo). El número indica el intervalo -de alturas sobre el que se extiende la caída o elevación -@emph{partiendo de} la nota principal. - -@lilypond[verbatim,quote,relative=2] -c2-\bendAfter #+4 -c2-\bendAfter #-4 -c2-\bendAfter #+8 -c2-\bendAfter #-8 -@end lilypond - -El guión @code{-} que sigue al nombre de la nota es @emph{necesario} -al escribir caídas y elevaciones. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adjusting-the-shape-of-falls-and-doits.ly} - - -@seealso -Glosario musical: -@rglos{fall}, -@rglos{doit}. - -Fragmentos de código: -@rlsr{Expressive marks}. - - -@node Lines -@subsection Lines - -Esta sección explica cómo crear diversas marcas de expresión que -siguen un camino lineal: glissandi, arpegios y trinos. - -@menu -* Glissando:: -* Arpeggio:: -* Trills:: -@end menu - -@node Glissando -@unnumberedsubsubsec Glissando - -@cindex glissando -@funindex \glissando -@funindex glissando - -Se crea un @notation{glissando} adjuntando @code{\glissando} a la -nota: - -@lilypond[verbatim,quote,relative=2] -g2\glissando g' -c2\glissando c, -@end lilypond - -Se pueden crear distintos tipos de glissando. Para ver más detalles, -consulte @ref{Line styles}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{contemporary-glissando.ly} - - -@seealso -Glosario musical: -@rglos{glissando}. - -Referencia de la notación: -@ref{Line styles}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{Glissando}. - - -@knownissues - -La impresión de texto sobre la línea (como @notation{gliss.}) no está -contemplada. - - -@node Arpeggio -@unnumberedsubsubsec Arpeggio - -@cindex arpegio -@cindex acorde quebrado -@cindex acorde arpegiado -@cindex quebrado, acorde -@funindex \arpeggio -@funindex arpeggio -@funindex \arpeggioArrowUp -@funindex arpeggioArrowUp -@funindex \arpeggioArrowDown -@funindex arpeggioArrowDown -@funindex \arpeggioNormal -@funindex arpeggioNormal - -Un signo de @notation{acorde arpegiado} (conocido también como acorde -quebrado) sobre un acorde, se denota adjuntando @code{\arpeggio} al -acorde: - -@lilypond[verbatim,quote,relative=1] -1\arpeggio -@end lilypond - -Se pueden escribir distintos tipos de acordes arpegiados. -@code{\arpeggioNormal} produce la vuelta al arpegio normal: - -@lilypond[verbatim,quote,relative=1] -2\arpeggio -\arpeggioArrowUp -2\arpeggio -\arpeggioArrowDown -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -@cindex arpegiado, acorde, símbolos especiales -@cindex especial, símbolos de arpegio - -@funindex \arpeggioBracket -@funindex arpeggioBracket -@funindex \arpeggioParenthesis -@funindex arpeggioParenthesis - -Se pueden crear símbolos especiales de arpegio @emph{con corchete}: - -@lilypond[verbatim,quote,relative=1] -2 -\arpeggioBracket -2\arpeggio -\arpeggioParenthesis -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -Los acordes arpegiados se pueden desarrollar explícitamente utilizando -@notation{ligaduras de unión}. Véase @ref{Ties}. - - -@predefined -@funindex \arpeggio -@code{\arpeggio}, -@funindex \arpeggioArrowUp -@code{\arpeggioArrowUp}, -@funindex \arpeggioArrowDown -@code{\arpeggioArrowDown}, -@funindex \arpeggioNormal -@code{\arpeggioNormal}, -@funindex \arpeggioBracket -@code{\arpeggioBracket}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-a-piano-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-other-contexts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-arpeggios-across-notes-in-different-voices.ly} - - -@seealso -Glosario musical: -@rglos{arpeggio}. - -Referencia de la notación: -@ref{Ties}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{Arpeggio}, -@rinternals{PianoStaff}. - - -@knownissues - -@cindex pentagrama cruzado, arpegios con paréntesis -@cindex arpegio de pentagrama cruzado con paréntesis -@cindex arpegio con paréntesis de pentagrama cruzado - -No es posible mezclar arpegios conectados y no conectados en un -@code{PianoStaff} en el mismo instante de tiempo. - -El corchete de los arpegios de paréntesis no funciona para los -arpegios de pentagrama cruzado. - -@node Trills -@unnumberedsubsubsec Trills - -@cindex trinos -@funindex \trill -@funindex trill -@funindex \startTrillSpan -@funindex startTrillSpan -@funindex \stopTrillSpan -@funindex stopTrillSpan - -Los @notation{trinos} cortos sin línea extensora se imprimen con -@code{\trill}; véase @ref{Articulations and ornamentations}. - -Los @notation{trinos} largos mantenidos, con línea de extensión, se -hacen con @code{\startTrillSpan} y @code{\stopTrillSpan}: - -@lilypond[verbatim,quote,relative=2] -d1~\startTrillSpan -d1 -c2\stopTrillSpan r2 -@end lilypond - -En el ejemplo siguiente se muestra un trino en combinación con notas -de adorno. La sintaxis de esta construcción y el método para efectuar -un control más preciso sobre la colocación de las notas de adorno se -describe en @ref{Grace notes}. - -@lilypond[verbatim,quote,relative=2] -c1 \afterGrace -d1\startTrillSpan { c32[ d]\stopTrillSpan } -e2 r2 -@end lilypond - -@cindex pitched trills -@cindex trills, pitched -@funindex \pitchedTrill -@funindex pitchedTrill - -Los trinos que se tienen que ejecutar sobre notas auxiliares -explícitas se pueden tipografiar con la instrucción -@code{pitchedTrill}. El primer argumento es la nota principal, y el -segndo es la nota @emph{trinada}, que se imprime como una cabeza de -nota, sin plica y entre paréntesis. - -@lilypond[verbatim,quote,relative=1] -\pitchedTrill e2\startTrillSpan fis -d\stopTrillSpan -@end lilypond - -@cindex trino con nota y alteración forzada -@cindex alteración forzada para trino con nota - -En el ejemplo siguiente, el segundo trino con nota es ambiguo; la -alteración de la nota trinada no se imprime. Como manera de rodear el -problema se pueden forzar las alteraciones de las notas trinadas. El -segundo compás ejemplifica este método: - -@lilypond[verbatim,quote,relative=2] -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis! -g\stopTrillSpan -@end lilypond - - -@predefined -@code{\startTrillSpan}, -@code{\stopTrillSpan}. -@endpredefined - - -@seealso -Glosario musical: -@rglos{trill}. - -Referencia de la notación: -@ref{Articulations and ornamentations}, -@ref{Grace notes}. - -Fragmentos de código: -@rlsr{Expressive marks}. - -Referencia de funcionamiento interno: -@rinternals{TrillSpanner}. diff --git a/Documentation/es/user/fretted-strings.itely b/Documentation/es/user/fretted-strings.itely deleted file mode 100644 index 67357964ac..0000000000 --- a/Documentation/es/user/fretted-strings.itely +++ /dev/null @@ -1,1360 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Fretted string instruments -@section Fretted string instruments - -@lilypondfile[quote]{fretted-headword.ly} - -Esta sección trata varios aspectos de la notación musical que son -exclusivos de los instrumentos de cuerda con trastes. - -@cindex tablatura -@cindex guitarra, tablatura de -@cindex tablatura de banjo -@cindex banjo, tablatura de - -@menu -* Common notation for fretted strings:: -* Guitar:: -* Banjo:: -@end menu - -@node Common notation for fretted strings -@subsection Common notation for fretted strings - -Esta sección se ocupa de la notación común exclusiva de los -instrumentos de cuerda con trastes. - -@menu -* References for fretted strings:: -* String number indications:: -* Default tablatures:: -* Custom tablatures:: -* Fret diagram markups:: -* Predefined fret diagrams:: -* Automatic fret diagrams:: -* Right-hand fingerings:: -@end menu - -@node References for fretted strings -@unnumberedsubsubsec References for fretted strings - -La notación musical para instrumentos de cuerda con trastes se realiza -normalmente en una sola pauta, ya sea en notación musical tradicional -o en tablatura. A veces se combinan los dos tipos, y es común en -música popular utilizar diagramas de acordes por encima de un -pentagrama de notación tradicional. La guitarra y el banjo son -instrumentos transpositores, que suenan una octava por debajo de lo -escrito. Las partituras para estos instrumentos deben usar la clave -de Sol octava baja @code{"treble_8"}. Otros elementos relativos a los -instrumentos de cuerda con trastes se estudian en otras partes de -manual: - -@itemize -@item -Las digitaciones se indican como se explica en @ref{Fingering instructions}. - -@item -Las instrucciones para ligaduras @notation{Laissez vibrer} así como -ligaduras de unión sobre arpegios y trémolos están en -@ref{Ties}. - -@item -Las instrucciones para el manejo de varias voces se encuentran en -@ref{Collision resolution}. - -@item Las instrucciones para la indicación de armónicos está en -@ref{Harmonics}. - -@end itemize - - -@seealso -Referencia de la notación: -@ref{Fingering instructions}, -@ref{Ties}, -@ref{Collision resolution}, -@ref{Instrument names}, -@ref{Writing music in parallel}, -@ref{Arpeggio}, -@ref{List of articulations}, -@ref{Clef}. - - -@node String number indications -@unnumberedsubsubsec String number indications - -@cindex cuerda, número de la -@cindex números de cuerda frente a digitaciones -@cindex digitación frente a números de cuerda - -Se puede indicar la cuerda en que se debe tocar una nota añadiendo -@code{\}@tie{}@var{número} a una nota dentro de una construcción de -acorde (@code{<>}). - -@warning{Los números de cuerda @strong{se deben} definir dentro de una -construcción de acorde con ángulos simples, incluso si se trata de una -sola nota.} - -@lilypond[verbatim,quote,relative=0] -\clef "treble_8" -4 2 -1 -@end lilypond - -Cuando se usan al mismo tiempo digitaciones e indicaciones del número -de cuerda, su colocación se controla por el orden en que aparecen -estos elementos en el código: - -@lilypond[verbatim,quote,relative=1] -\clef "treble_8" -2 - -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - - -@seealso -Referencia de la notación: -@ref{Fingering instructions}. - -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de funcionamiento interno: -@rinternals{StringNumber}, -@rinternals{Fingering}. - - -@node Default tablatures -@unnumberedsubsubsec Default tablatures - -@cindex tablatura, principios básicos -@cindex tablatura predeterminada - -@funindex TabStaff -@funindex TabVoice - -La notación de tablatura se utiliza para la notación de música de -instrumentos de cuerda pulsada. Las alturas no se denotan mediante -cabezas de nota, sino mediante números que indican sobre qué cuerda y -traste se debe tocar la nota. LilyPond contempla las tablaturas de -forma limitada. - -El número de cuerda asociado a una nota se proporciona en la forma de -una barra invertida seguida por un número, p.ej. @code{c4\3} es un Do -negra sobre la tercera cuerda. Por defecto, la cuerda 1 es la más -aguda, y la afinación normal es la afinación estándar de guitarra (con -6 cuerdas). Las notas se imprimen como tablatura, usando lo contextos -@rinternals{TabStaff} y @rinternals{TabVoice}: - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff { - a,4\5 c'\2 a\3 e'\1 - e\4 c'\2 a\3 e'\1 -} -@end lilypond - -@funindex minimumFret - -@cindex traste - -Si se especifica ninguna cuerda para una nota, se le asigna la cuerda -más aguda que produce la nota con un número de traste mayor o igual -que el valor de @code{minimumFret} (traste mínimo). El valor -predeterminado de @code{minimumFret} es cero. - -@lilypond[quote,ragged-right,verbatim] -\new StaffGroup << - \new Staff \relative c { - \clef "treble_8" - c16 d e f g4 - c,16 d e f g4 - } - \new TabStaff \relative c { - c16 d e f g4 - \set TabStaff.minimumFret = #5 - c,16 d e f g4 - } ->> -@end lilypond - -@cindex armónicos en tablatura -@cindex tablatura y armónicos -@cindex slides en notación de tablatura -@cindex tablatura y slides - -Se pueden añadir indicaciones de armónicos y @emph{slides} a la -notación de tablatura. - -@lilypond[fragment, verbatim, quote, relative=1] -\new TabStaff { - \new TabVoice { - d\2\glissando e\2 - } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{stem-and-beam-behavior-in-tablature.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{polyphony-in-tablature.ly} - - -@seealso -Referencia de la notación: -@ref{Stems}. - -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de funcionamiento interno: -@rinternals{TabNoteHead}, -@rinternals{TabStaff}, -@rinternals{TabVoice}, -@rinternals{Beam}. - - -@knownissues - -Los acordes no se tratan de una forma especial, y de aquí que el -selector automático de la cuerda puede elegir fácilmente la misma -cuerda para dos notas del acorde. - -Para manejar @code{\partcombine}, es necesario que @code{TabStaff} -utilice voces expecialmente creadas: - -@lilypond[quote,ragged-right,verbatim] -melodia = \partcombine { e4 g g g }{ e4 e e e } -<< - \new TabStaff << - \new TabVoice = "one" s1 - \new TabVoice = "two" s1 - \new TabVoice = "shared" s1 - \new TabVoice = "solo" s1 - { \melodia } - >> ->> -@end lilypond - -Los efectos especiales de guitarra se limitan a armónicos y @emph{slides}. - -@node Custom tablatures -@unnumberedsubsubsec Custom tablatures - -@cindex tablaturas personalizadas -@cindex tablatura de banjo -@cindex tablatura de mandolina -@cindex tablatura de bajo -@cindex tablatura, afinaciones predefinidas de -@cindex trastes, instrumentos con, afinaciones predefinidas -@cindex predefinidas, afinaciones, para instrumentos de traste - -@funindex StringTunings - -La tablatura en LilyPond calcula automáticamente el traste para cada -nota, basándose en la cuerda a que está asignada la nota. Para -hacerlo, es necesario especificar la afinación de las cuerdas. La -afinación de las cuerdas se da en la propiedad @code{StringTunings}. - -LilyPond trae afinaciones predefinidas para el banjo, la mandolina, la -guitarra y el bajo. Lilypond establece automáticamente la -transposición correcta para las afinaciones predefinidas. El ejemplo -siguiente es para bajo, que suena una octaba por debajo de lo escrito. - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \clef "bass_8" - \relative c, { - c4 d e f - } - } - \new TabStaff { - \set TabStaff.stringTunings = #bass-tuning - \relative c, { - c4 d e f - } - } ->> -@end lilypond - -La afinación por omisión es @code{guitar-tuning} (la afinación -estándar Mi-La-Re-Sol-Si-Mi). Otras afinaciones predefinidas son -@code{guitar-open-g-tuning} (Sol Mayor al aire, Re-Sol-Re-Sol-Si-Re), -@code{mandolin-tuning} (mandolina) y @code{banjo-open-g-tuning} (banjo -con Sol Mayor al aire). The predefined string tunings -are found in @code{scm/output-lib.scm}. - -Una afinación de las cuerdas es una lista de Scheme de alturas, una -por cada cuerda, ordenadas de 1 a N, donde la cuerda 1 está arriba en -la pauta de tablatura y la cuerda N está abajo. Esto resulta -generalmente en un orden de la nota más aguda a la más grave, pero -algunos instrumentos (p.ej. el ukelele) no tienen las cuerdas -dispuestas en orden de altura. - -La altura de una cuerda en una lista de afinación de cuerdas es el -intervalo que forma la cuerda al aire con el Do central, medido en -semitonos. La altura debe ser un número entero. Lilypond calcula la -altura real de la cuerda añadiendo la altura de la afinación a la -altura real del Do central. - -LilyPond calcula automáticamente el número de cuerdas de la pauta -@code{TabStaff} como el número de elementos de la lista -@code{stringTunings}. - -Se puede crear cualquier afinación de cuerdas deseada. Por ejemplo, -podemos definir una afinación para un instrumento de cuatro cuerdas -con las alturas @code{a''}, @code{d''}, @code{g'} y @code{c'}: - - -@lilypond[quote,verbatim] -mynotes = { - c'4 e' g' c'' | - e'' g'' b'' c''' -} - -<< - \new Staff { - \clef treble - \mynotes - } - \new TabStaff { - \set TabStaff.stringTunings = #'(21 14 7 0) - \mynotes - } ->> -@end lilypond - - -@seealso -Archivos de inicio: -@file{scm/output-lib.scm}. - -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de funcionamiento interno: -@rinternals{Tab_note_heads_engraver}. - - -@node Fret diagram markups -@unnumberedsubsubsec Fret diagram markups - -@cindex trastes, diagramas de -@cindex acordes, diagramas de -@cindex diagramas de trastes -@cindex diagramas de acordes para instrumentos de trastes -@cindex trastes, diagramas de, personalizados -@cindex personalizados, diagramas de trastes - -Se pueden añadir diagramas de trastes a la música como elementos de -marcado sobre la nota deseada. El marcado contiene información sobre -el diagrama de trastes deseado. Existen tres interfaces distintos de -marcado de diagramas de trastes: standard (estándar), terse (escueto) -y verbose (prolijo). Los tres interfaces producen marcados -equivalentes, pero tienen cantidades variables de información en la -cadena de marcado. Hay más detalles sobre los interfaces de marcado -en @ref{Text markup commands}. - -La cadena de marcado de los diagramas estándar de trastes indica el -número de la cuerda y el número de traste en que se coloca cada uno de -los puntos sobre la cuerda. Además se pueden indicar cuerdas al aire -y cuerdas mudas (que no se tocan). - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex cejilla, indicación de - -Las indicaciones de cejilla se pueden añadir al diagrama a partir de -la cadena de marcado del diagrama de trastes. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, d g b d' g'> ^\markup - \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" - } ->> -@end lilypond - -@cindex fret-diagram, marcado con - -@funindex fret-diagram -@funindex \fret-diagram - -El tamaño del diagrama de trastes y el número de trastes del diagrama, -se puede cambiar en la cadena de marcado @code{fret-diagram}. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, b, d g b g'> ^\markup - \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" - } ->> -@end lilypond - -Se puede cambiar el número de cuerdas de un diagrama de trastes para -que se adapte a distintos instrumentos como el bajo y el ukelele, con -la cadena de marcado del diagrama. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - a1 - } - } - \context Staff { - %% A chord for ukelele - a'1 ^\markup \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" - } ->> -@end lilypond - -Se pueden apadir indicaciones de digitación, y la posición de las -etiquetas de los dedos se puede controlar mediante la cadena de -marcado del diagrama. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" - } ->> -@end lilypond - -Se puede controlar el radio y la posición de los puntos con la cadena -de marcado @code{fret-diagram}. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex fret-diagram-terse, marcado con - -@funindex fret-diagram-terse -@funindex \fret-diagram-terse - -La cadena de marcado de diagrama de trastes escueta, -@code{fret-diagram-terse}, omite los números de la cuerda; el número -de cuerda viene implícito por la presencia del punto y coma. Hay un -punto y coma por cada cuerda del diagrama. El primer punto y coma -corresponde al número de cuerda más alto, y el último punto y coma -corresponde a la primera cuerda. Se pueden indicad cuerdas mudas, al -aire y números de traste. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3;2;o;1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2;3;1;" - } ->> -@end lilypond - -Se pueden incluir números de cejilla en la cadena de marcado escueta -@code{fret-diagram-terse}. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram-terse #"1-(;3;3;2;1;1-);" - < g, d g b d' g'> ^\markup - \fret-diagram-terse #"3-(;5;5;4;3;3-);" - } ->> -@end lilypond - -Se pueden incluir indicaciones de digitación en la cadena de marcado -escueta @code{fret-diagram-terse} - -@c Need to use override to enable fingerings to show this -- can we do so? -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" - } ->> -@end lilypond - -Otras propiedades de los diagramas de trastes se deben ajustar usando -@code{\override} al utilizar el marcado escueto con -fret-diagram-terse. - -@cindex fret-diagram-verbose, marcado con - -@funindex fret-diagram-verbose -@funindex \fret-diagram-verbose - -La cadena de marcado prolija @code{fret-diagram-verbose} está en el -formato de una lista de Scheme. Cada elemento de la lista indica la -colocación un elemento sobre el diagrama de trastes. - -@lilypond[quote, verbatim] -<< \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-verbose #'( - (mute 6) - (place-fret 5 3) - (place-fret 4 2) - (open 3) - (place-fret 2 1) - (open 1) - ) - < d a d' f'> ^\markup - \fret-diagram-verbose #'( - (mute 6) - (mute 5) - (open 4) - (place-fret 3 2) - (place-fret 2 3) - (place-fret 1 1) - ) - } ->> -@end lilypond - -Se pueden incluir digitaciones y cejillas en una cadena de marcado -prolija @code{fret-diagram-verbose}. Es exclusiva del interfaz de -fret-diagram-verbose la indicación @q{capo} que se puede colocar sobre -el diagrama de posición. La indicación de capo es una barra gruesa -que cubre todas las cuerdas. El traste que tiene el capo es el más -bajo del diagrama de posición. - -@c \override is necessary to make fingering visible -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g c - } - } - \context Staff { - \clef "treble_8" - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - - < f, c f a c' f'>1 ^\markup - \fret-diagram-verbose #'( - (place-fret 6 1) - (place-fret 5 3) - (place-fret 4 3) - (place-fret 3 2) - (place-fret 2 1) - (place-fret 1 1) - (barre 6 1 1) - ) - < g, b, d g b g'> ^\markup - \fret-diagram-verbose #'( - (place-fret 6 3 2) - (place-fret 5 2 1) - (open 4) - (open 3) - (open 2) - (place-fret 1 3 3) - ) - < c e g c' e'> ^\markup - \fret-diagram-verbose #'( - (capo 3) - (mute 6) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - ) - } ->> -@end lilypond - -Todas las otras propiedades de diagrama de trastes se deben ajustar -utilizando @code{\override} cuando se usa el marcado prolijo con -fret-diagram-verbose. - -@ignore -The following example shows the three fret-diagram markup -interfaces, along with examples of common tweaks. For example, -the size of the verbose fret diagram is reduced to 0.75, and the -finger indications are specified to appear below the diagram. The -terse diagram includes tweaks to specify placement of finger code -and color of dots. - -@lilypond[verbatim,ragged-right,quote] -\new Voice { - \clef "treble_8" - d^\markup \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" - d d d - fis^\markup \override #'(size . 0.75) { - \override #'(finger-code . below-string) { - \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) - (place-fret 5 4 3) - (place-fret 4 4 4) - (place-fret 3 3 2) - (place-fret 2 2 1) - (place-fret 1 2 1)) - } - } - fis fis fis - c^\markup \override #'(dot-radius . 0.35) { - \override #'(finger-code . in-dot) { - \override #'(dot-color . white) { - \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" - } - } - } - c c c -} -@end lilypond -@end ignore - -@cindex personalizados, diagramas de trastes -@cindex trastes, diagramas personalizados de -@cindex diagrama de trastes personalizado - -@funindex fret-diagram-interface - -El aspecto gráfico de un diagrama de trastes se puede personalizar -según las preferencias del usuario a través de las propiedades del -interface @code{fret-diagram-interface}. Los detalles están en -@rinternals{fret-diagram-interface}. Para un marcado de diagrama de -trastes, las propiedades del interface pertenecen a -@code{Voice.TextScript}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-markup-fret-diagrams.ly} - - -@seealso -Referencia de la notación: -@ref{Text markup commands}. - -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de funcionamiento interno: -@rinternals{fret-diagram-interface}. - - -@node Predefined fret diagrams -@unnumberedsubsubsec Predefined fret diagrams - -@cindex fret diagrams -@cindex chord diagrams - -@funindex FretBoards -@funindex stringTunings - -Se pueden imprimir los diagramas de trastes usando el contexto -@code{FretBoards}. De forma predeterminada, el contexto -@code{FretBoards} imprime diagramas de trastes que están almacenados -en una tabla de búsqueda: - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode { - c1 d - } -} -@end lilypond - -Los diagramas de traste predefinidos están en el archivo -@code{predefined-guitar-fretboards.ly}. Los diagramas de trastes se -almacenan tomando como base las notas de un acorde y el valor de -@code{stringTunings} que se está utilizando en cada momento. -@code{predefined-guitar-fretboards.ly} contiene diagramas de traste -predefinidos sólo para @code{guitar-tuning}. Los diagramas de traste -predefinidos se pueden añadir para otros instrumentos u otras -afinaciones siguiendo los ejemplos que aparecen en -@code{predefined-guitar-fretboards.ly}. - -Las notas de los acordes se pueden introducir como música simultánea o -bein usando el modo de acordes (véase @ref{Chord mode overview}). - -@lilypond[verbatim, ragged-right,quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode {c1} - 1 -} -@end lilypond - -@cindex acordes, diagramas de trastes con nombres de -@cindex trastes, diagramas de, con nombres de acorde - -@funindex ChordNames -@funindex chordmode -@funindex \chordmode - -Es corriente que se impriman juntos los nombres de acorde y los -diagramas de traste. Esto se puede hacer poniendo un contexto de -nombres de acorde @code{ChordNames} en paralelo con un contexto de -trastes @code{FretBoards} y dando a los dos contextos el mismo -contenido musical. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex transporte de diagramas de trastes -@cindex trastes, diagramas de, transporte -@cindex diagramas de traste, transporte de los - -Los diagramas de traste predefinidos se pueden transportar, en la -medida en que esté almacenado un diagrama para el acorde transportado, -en la tabla de diagramas de traste. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -mychordlist = { - \mychords - \transpose c e { \mychords} -} -<< - \context ChordNames { - \mychordlist - } - \context FretBoards { - \mychordlist - } ->> -@end lilypond - - -La tabla de diagramas de traste predefinidos contiene siete acordes -(mayor, menor, aumentado, disminuido, séptima dominante, séptima mayor -y menor séptima) para 17 tonalidades distintas. Se puede ver una -lista completa de los diagramas de traste predefinidos en -@ref{Predefined fretboard diagrams}. Si no hay una entrada en la -tabla para un acorde, el grabador FretBoards calcula un cadena de -diagrama fret-diagram usando la funcionalidad de diagramas automáticos -que se describe en @ref{Automatic fret diagrams}. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex trastes personalizados, añadir diagramas de -@cindex personalizados, añadir diagramas de traste -@cindex diagramas de trastes personalizados, añadir - -Se pueden añadir diagramas de posiciones a la tabla de diagramas de -posiciones. Para añadir un diagrama debemos especificar el acorde del -diagrama, la afinación utilizada y una definición del diagrama. La -definición del diagrama puede ser una cadena de definición escueta -fret-diagram-terse o una lista de marcados prolija -fret-diagram-verbose. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c:9} - #guitar-tuning - #"x;3-2;2-1;3-3;3-4;x;" - -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -Se pueden almacenar distintos diagramas de traste para el mismo acorde -usando distinas octavas para las notas. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c'} - #guitar-tuning - #(offset-fret 2 (chord-shape 'bes guitar-tuning)) - -mychords = \chordmode{ - c1 c' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex trastes, instrumentos de, formas de acordes -@cindex acordes, formas de, en instrumentos de trastes - -@funindex \addChordShape -@funindex add ChordShape -@funindex storePredefinedDiagram -@funindex \storePredefinedDiagram - -Además de los diagramas de traste, LilyPond almacena una lista interna -de formas de acorde. Las formas de acorde son diagramas de traste que -se pueden desplazar por el mástil para dar acordes distintos. Se -pueden añadir formas de acorde a la lista interna y luego usarlas para -definir diagramas de posición predefinidos. Dado que se pueden mover -a distintas posiciones dentro del mástil, las formas de acorde -normalmente no contienen cuerdas al aire. Como los diagramas de -posiciones, las formas de acorde se pueden introducir como cadenas -escuetas fret-diagram-terse o como listas de marcado prolijas -fret-diagram-verbose. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -% add a new chord shape - -\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" - -% add some new chords based on the power chord shape - -\storePredefinedDiagram \chordmode {f'} - #guitar-tuning - #(chord-shape 'powerf guitar-tuning) -\storePredefinedDiagram \chordmode {g'} - #guitar-tuning - #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) - -mychords = \chordmode{ - f1 f' g g' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -El aspecto gráfico de un diagrama de traste se puede personalizar -según las preferencias del usuario a través de las propiedades del -interface @code{fret-diagram-interface}. Los detalles están en -@rinternals{fret-diagram-interface}. Para un diagrama de trastes -predefinido, las propiedades de interface pertenecen a -@code{FretBoards.FretBoard}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-fretboard-fret-diagrams.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{defining-predefined-fretboards-for-other-instruments.ly} - - -@seealso -Referencia de la notación: -@ref{Custom tablatures}, -@ref{Automatic fret diagrams}, -@ref{Chord mode overview}, -@ref{Predefined fretboard diagrams}. - -Archivos de inicio: -@file{ly/predefined-guitar-fretboards.ly}, -@file{ly/predefined-guitar-ninth-fretboards.ly}. - -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de funcionamiento interno: -@rinternals {fret-diagram-interface}. - - -@node Automatic fret diagrams -@unnumberedsubsubsec Automatic fret diagrams - -@cindex trastes, diagramas automáticos de -@cindex acordes, diagramas automáticos de -@cindex automáticos, diagramas de traste -@cindex automáticos, diagramas de acordes - -Se pueden crear diagramas de traste automáticamente a partir de las -notas introducidas usando el contexto @code{FretBoards}. Si no está -disponible ningún diagrama predefinido para las notas introducidas en -la afinación @code{stringTunings} activa, este contexto calcula las -cuerdas y los trastes que se pueden usar para tocar las notas. - -@lilypond[quote,ragged-right,verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context FretBoards { - < f, c f a c' f'>1 - < g,\6 b, d g b g'> - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 - < g, b, d g b' g'> - } ->> -@end lilypond - -@funindex predefinedFretboardsOff -@funindex \predefinedFretboardsOff -@funindex predefinedFretboardsOn -@funindex \predefinedFretboardsOn - -Puesto que de forma predeterminada no se carga ningún diagrama -predefinido, el comportamiento predeterminado es el cálculo automático -de los diagramas de traste. Una vez que los diagramas predeterminados -se han cargado, se puede habilitar e inhabilitar el cálculo automático -con instrucciones predefinidas: - -@lilypond[quote,ragged-right,verbatim] - -\storePredefinedDiagram - #guitar-tuning - #"x;3-1-(;5-2;5-3;5-4;3-1-1);" -<< - \context ChordNames { - \chordmode { - c1 c c - } - } - \context FretBoards { - 1 - \predefinedFretboardsOff - - \predefinedFretboardsOn - - } - \context Staff { - \clef "treble_8" - 1 - - - } ->> -@end lilypond - -A veces el calculador de trastes es incapaz de encontrar un diagrama -aceptable. Esto se puede remediar generalmente mediante la asignación -manual de una nota a una cuerda. En muchos casos sólo hay que colocar -manualmente una nota sobre una cuerda; el resto de las notas se -situará en el lugar adecuado por parte del contexto @code{FretBoards}. - -@cindex trastes, añadir digitaciones a diagramas de -@cindex digitaciones, añadir, a diagramas de trastes - -Se pueden añadir digitaciones a los diagramas de traste del contexto -FretBoard. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context FretBoards { - < c-3 e-2 g c'-1 e' > 1 - < d a-2 d'-3 f'-1> - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 - < d a d' f'> - } ->> -@end lilypond - -El traste mínimo que usar en el cálculo de cuerdas y trastes para el -contexto FretBoard se puede fijar con la propiedad @code{minimumFret}. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - d1:m d:m - } - } - \context FretBoards { - < d a d' f'> - \set FretBoards.minimumFret = #5 - < d a d' f'> - } - \context Staff { - \clef "treble_8" - < d a d' f'> - < d a d' f'> - } ->> -@end lilypond - -Las cuerdas y los trastes para el contexto @code{FretBoards} dependen -de la propiedad @code{stringTunings}, que tiene el mismo significado -que en el contexto de tablatura TabStaff. Consulte @ref{Custom -tablatures} para ver más información sobre la propiedad -@code{stringTunings}. - -El aspecto gráfico de un diagrama de trastes se puede personalizar de -acuerdo a las preferncias del usuario a través de las propiedades del -interface @code{fret-diagram-interface}. Los detalles están en -@rinternals{fret-diagram-interface}. Para un diagrama de -@code{FretBoards}, las propiedades del interface pertenecen a -@code{FretBoards.FretBoard}. - - -@predefined -@code{\predefinedFretboardsOff}, -@code{\predefinedFretboardsOn}. -@endpredefined - - -@seealso -Referencia de la notación: -@ref{Custom tablatures}. - -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de funcionamiento interno: -@rinternals {fret-diagram-interface}. - - -@node Right-hand fingerings -@unnumberedsubsubsec Right-hand fingerings - -@cindex trastes, instrumentos de, digitaciones de la derecha -@cindex digitaciones de la mano derecha para instrumentos de trastes -@cindex derecha, mano, digitaciones para instrumentos de traste - -@funindex rightHandFinger -@funindex \rightHandFinger - -Las digitaciones de la mano derecha @var{p-i-m-a} se deben introducir -dentro de una construcción de acorde @code{<>} para que se impriman en -la partitura, incluso si se aplican a una nota suelta. - -@warning{@strong{Debe} haber un guión después de la nota y un espacio -antes del ángulo de cierre @code{>}.} - -@lilypond[quote,verbatim,relative=0] -\clef "treble_8" -4 - - - -1 -@end lilypond - -Por brevedad, se puede escribir @code{\rightHandFinger} como algo más -corto, como por ejemplo @code{RH}: - -@example -#(define RH rightHandFinger) -@end example - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{placement-of-right-hand-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{fingerings,-string-indications,-and-right-hand-fingerings.ly} - - -@seealso -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de funcionamiento interno: -@rinternals{StrokeFinger}. - - -@node Guitar -@subsection Guitar - -Casi todos los asintos de notación relacionados con la música para -guitarra están suficientemente cubiertos en la sección general sobre -ajustes de instrumentos de trastes, pero hay algunos más de los que -merece la pena hablar aquí. De forma ocasional, los usuarios quieren -crear documentos del tipo de cancioneros que tengan sólo la letra de -las canciones con indicaciones de acordes sobre ella. Dado que -Lilypond es un tipografiador de música, no se recomienda para -documentos que no tienen notación musical. Una alternativa mejor es -un procesador de texto, editor de texto o, para usuarios con -experiencia, un tipografiador como GuitarTeX. - -@menu -* Indicating position and barring:: -* Indicating harmonics and dampened notes:: -@end menu - - -@node Indicating position and barring -@unnumberedsubsubsec Indicating position and barring - -@cindex posición y cejilla, indicación para instrumentos de trastes -@cindex trastes, instrumentos de, indicacion de la posición y cejilla - -Este ejemplo muestra cómo incluir indicaciones de posición y cejilla -de guitarra: - -@lilypond[quote,ragged-right,fragment,verbatim,relative=0] -\clef "treble_8" -b16 d g b e -\textSpannerDown -\override TextSpanner #'(bound-details left text) = #"XII " - g16\startTextSpan - b16 e g e b g\stopTextSpan -e16 b g d -@end lilypond - - -@seealso -Referencia de la notación: -@ref{Text spanners}. - -Fragmentos de código: -@rlsr{Fretted strings}, -@rlsr{Expressive marks}. - - -@node Indicating harmonics and dampened notes -@unnumberedsubsubsec Indicating harmonics and dampened notes - -@cindex trastes, notas tapadas en instrumentos de -@cindex trastes, armónicos en instrumentos de -@cindex tapadas, notas, en instrumentos de trastes -@cindex armónicos en instrumentos de trastes - -Se pueden usar cabezas de nota especiales para indicar notas apagadas -o armónicos. Los armónicos se suelen explicar de forma más completa -con un marcado de texto. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { - \clef "treble_8" - \override Staff.NoteHead #'style = #'cross - g8 a b c b4 - \override Staff.NoteHead #'style = #'harmonic-mixed - d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Fretted strings}. - -Referencia de la notación: -@ref{Special note heads}, -@ref{Note head styles}. - - -@node Banjo -@subsection Banjo - -@menu -* Banjo tablatures:: -@end menu - -@node Banjo tablatures -@unnumberedsubsubsec Banjo tablatures - -@cindex banjo, tablaturas de -@cindex tablatura de banjo - -LilyPond contempla el banjo de cinco cuerdas de una manera básica. -Cuando haga tablaturas para banjo de cinco cuerdas, utilice la función -de formato de tablatura de banjo para obtener los números correctos de -los trastes para la quinta cuerda: - -@c due to crazy intervals of banjo music, absolute pitch is recommended - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff << - \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo - \set TabStaff.stringTunings = #banjo-open-g-tuning - { - \stemDown - g8 d' g'\5 a b g e d' | - g4 d''8\5 b' a'\2 g'\5 e'\2 d' | - g4 - } ->> -@end lilypond - -@cindex banjo, afinaciones del -@cindex afinaciones del banjo - -@funindex banjo-c-tuning -@funindex banjo-modal-tuning -@funindex banjo-open-d-tuning -@funindex banjo-open-dm-tuning -@funindex four-string-banjo - -En LilyPond se encuentran predefinidas varias afinaciones comunes para -el banjo: @code{banjo-c-tuning} (sol-Do-Sol-Si-Re), -@code{banjo-modal-tuning} (sol-Re-Sol-Do-Re), -@code{banjo-open-d-tuning} (Re Mayor al aire, la-Re-Fa#-La-Re) y -@code{banjo-open-dm-tuning} (Re menor al aire, la-Re-Fa-La-Re). - -Estas afinaciones se pueden convertir a afinaciones para bajo de -cuatro cuerdas utilizando la función @code{four-string-banjo}: - -@example -\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) -@end example - - -@seealso -Fragmentos de código: -@rlsr{Fretted strings}. - -El archivo @file{scm/@/output@/-lib@/.scm} contiene las afinaciones -predefinidas para el banjo. - diff --git a/Documentation/es/user/fundamental.itely b/Documentation/es/user/fundamental.itely deleted file mode 100644 index 15351cbc65..0000000000 --- a/Documentation/es/user/fundamental.itely +++ /dev/null @@ -1,2994 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Fundamental concepts -@chapter Fundamental concepts - -Ha podido ver en el tutorial cómo producir música bellamente impresa a -partir de un simple archivo de texto. Esta sección presenta los -conceptos y técnicas que se requieren para producir partituras -igualmente bellas pero más complejas. - -@menu -* How LilyPond input files work:: -* Voices contain music:: -* Contexts and engravers:: -* Extending the templates:: -@end menu - - -@node How LilyPond input files work -@section How LilyPond input files work - -El formato de entrada de LilyPond es bastante libre en su forma y -concede a los usuarios con experiencia mucha flexibilidad para -estructurar sus archivos de la forma que deseen. Sin embargo, toda -esta flexibilidad puede hacer que las cosas se vuelvan confusas para -los nuevos usuarios. Esta sección le va a explicar parte de esta -estructura, pero puede obviar ciertos detalles en aras de la -simplicidad. Para ver una descripción completa del formato de -entrada, consulte @ruser{File structure}. - - -@menu -* Introduction to the LilyPond file structure:: -* Score is a (single) compound musical expression:: -* Nesting music expressions:: -* On the un-nestedness of brackets and ties:: -@end menu - -@node Introduction to the LilyPond file structure -@subsection Introduction to the LilyPond file structure - -@cindex entrada, formato de la -@cindex archivo, estructura del - -Un ejemplo básico de archivo de entrada de LilyPond es el siguiente: - -@example -\version @w{"@version{}"} -\header @{ @} -\score @{ - @var{...expresión musical compuesta...} % toda la música viene aquí - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -Existen muchas variaciones de este esquema básico, pero el ejemplo -constituye un útil punto de partida. - -@funindex \book -@funindex book -@funindex \score -@funindex score -@cindex book (libro) -@cindex score (partitura) -@cindex libro -@cindex partitura - -Hasta el momento, ninguno de los ejemplos que ha podido ver utiliza la -instrucción @code{\score@{@}}. Esto es así a causa de que LilyPond -añade automáticamente las órdenes adicionales que se requieren cuando -le proporcionamos una entrada sencilla. LilyPond trata una entrada -como esta: - -@example -\relative c'' @{ - c4 a d c -@} -@end example - -@noindent -como una abreviatura de esta otra: - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - \relative c'' @{ - c4 a b c - @} - @} - @} - \layout @{ @} - @} -@} -@end example - -En otras palabras, si la entrada consta de una única expresión -musical, LilyPond interpreta el archivo como si la expresción musical -estuviera rodeada por un envoltorio hecho por las instrucciones que -acabamos de ver. - -@cindex contextos implícitos -@cindex implícitos, contextos - -@strong{¡Advertencia!} Muchos de los ejemplos que aparecen en la -documentación de LilyPond omiten las instrucciones @code{\new Staff} y -@code{\new Voice}, dejando que se creen de forma implícita. Esto -funciona bien para ejemplos sencillos, pero para ejemplos más -complicados, especialmente cuando se usan instrucciones adicionales, -la creación implícita de los contextos puede dar lugar a resultados -inesperados, incluso en ocasiones crear pentagramas no deseados. La -forma de crear contextos de forma explícita se explica en -@ref{Contexts and engravers}. - -@warning{Cuando se escriben más de unas pocas líneas de música, se -recomienda crear siempre los pentagramas y las voces de forma -explícita.} - -De todas formas, por ahora vamos a volver al primer ejemplo para -examinar la instrucción @code{\score}, dejando las demás en su forma -predeterminada. - -Un bloque @code{\score} siempre debe contener una expresión musical -única, que debe aparecer inmediatamente después de la instrucción -@code{\score}. Recuerde que una expresión musical podía ser cualquier -cosa entre una sola nota hasta una enorme expresión compuesta como - -@example -@{ - \new StaffGroup << - @var{...inserte aquí la partitura completa de una ópera de Wagner...} - >> -@} -@end example - -@noindent -Puesto que todo se encuentra dentro de @code{@{ ... @}}, cuenta como -una expresión musical. - -Como vimos anteriormente, el bloque @code{\score} puede contener otras -cosas, tales como - -@example -\score @{ - @{ c'4 a b c' @} - \header @{ @} - \layout @{ @} - \midi @{ @} -@} -@end example - -@funindex \header -@funindex header -@funindex \layout -@funindex layout -@funindex \midi -@funindex midi -@cindex header -@cindex layout -@cindex midi -@cindex cabecera -@cindex disposición - -@noindent -Observe que estas tres instrucciones (@code{\header}, @code{\layout} y -@code{\midi}) son especiales: a diferencia del resto de las -instrucciones que comienzan con una barra invertida (@code{\}), -@emph{no} son expresiones musicales y no forman parte de ninguna -expresión musical. Por tanto, se pueden situar dentro de un bloque -@code{\score} o fuera de él. De hecho, estas instrucciones se sitúan -por lo general fuera del bloque @code{\score} (por ejemplo, -@code{\header} se suele colocar antes de la instrucción @code{\score}, -como muestra el ejemplo que aparece al principio de la sección. - -Dos instrucciones más que no hemos visto aún son @code{\layout @{ @}} -y @code{\midi @{ @}}. Si aparecen tal y como se muestran aquí, hacen -que LilyPond produzca una salida impresa y una salida MIDI, -respectivamente. Se describen con todo detalle en el manual de -Referencia de la notación, en @ruser{Score layout} y en -@ruser{Creating MIDI files}. - -@cindex partituras, varias -@cindex book, bloque implícito -@cindex implícito, bloque book -@funindex \book -@funindex book - -Podemos escribir varios bloques @code{\score}. Cada uno de ellos -recibirá el mismo tratamiento que una partitura independiente, pero se -combinarán todos juntos en un archivo de salida único. No se necesita -ninguna instrucción @code{\book}, se creará una implícitamente. Sin -embargo, si quiere archivos de salida separados a partir de un único -archivo @code{.ly}, entonces es necesario utilizar la instrucción -@code{\book} para separar las distintas secciones: cada bloque -@code{\book} produce un archivo de salida distinto. - -En resumen: - -Cada bloque @code{\book} crea un archivo de salida distinto (por -ejemplo, un archivo PDF). Si no hemos escrito uno de forma explícita, -LilyPond envuelve todo nuestro código de entrada dentro de un bloque -@code{\book} de forma implícita. - -Cada bloque @code{\score} es un trozo de música separado dentro de un -bloque @code{\book}. - -@cindex layout, efecto de la situación del bloque - -Cada bloque @code{\layout} afecta al bloque @code{\score} o -@code{\book} dentro del cual aparece (es decir, un bloque -@code{\layout} dentro de un bloque @code{\score} afecta solamente a -ese bloque @code{\score}, pero un bloque @code{\layout} fuera de un -bloque @code{\score} (que por ello está dentro de un bloque -@code{\book}, ya sea explícita o implícitamente) afecta a los bloques -@code{\score} que están dentro de ese @code{\book}. - -Para ver más detalles, consulte @ruser{Multiple scores in a book}. - -@cindex variables - -Otro atajo genial es la posibilidad de definir variables. Todas las -plantillas emplean lo siguiente: - -@example -melodia = \relative c' @{ - c4 a b c -@} - -\score @{ - \melodia -@} -@end example - -Cuando LilyPond examina este archivo, toma el valor de @code{melodia} -(todo lo que está después del signo igual) y lo inserta dondequiera -que ve @code{\melodia}. No se requiere un cuidado especial con los -nombres (puede ser @code{melodia}, @code{global}, -@code{CompasArmadura}, @code{manoderechadelpiano} o -@code{fulanomengano}). Para ver más detalles, consulte @ref{Saving -typing with variables and functions}. Recuerde que puede usar casi -cualquier nombre que se le ocurra, en la medida en que contenga -solamente caracteres alfabéticos y sea diferente de cualquiera de los -nombres de instrucción de LilyPond. Las limitaciones exactas que -afectan a los nombres de variable se detallan en @ruser{File -structure}. - - -@seealso -Para ver una definición completa del formato del código de entrada, -consulte @ruser{File structure}. - - -@node Score is a (single) compound musical expression -@subsection Score is a (single) compound musical expression - -@cindex score -@cindex partitura -@cindex contenido del bloque score -@cindex score, contenido del bloque -@cindex compuesta, expresión musical -@cindex musical, expresión, compuesta -@cindex expresión musical compuesta -@funindex \score -@funindex score - -En la sección anterior, @ref{Introduction to the LilyPond file -structure}, hemos podido ver la organización general de los archivos -de entrada de LilyPond. Pero parece que nos saltamos la parte más -importante: ¿cómo averiguamos qué escribir después de @code{\score}? - -No nos hemos saltado nada en absoluto. El gran misterio es, sencillamente, -que no hay @emph{ningún} misterio. La siguiente línea lo explica -todo: - -@quotation -@emph{Un bloque @code{\score} debe comenzar con una expresión musical -compuesta.} -@end quotation - -@noindent -Para comprender lo que se entiende por expresión musical y expresión -musical compuesta, quizá encuentre útil dar un repaso al tutorial, -@ref{Music expressions explained}. En esta sección vimos cómo -elaborar grandes expresiones musicales a partir de pequeñas piezas -(comenzábamos con notas, luego acordes, etc.). Ahora partiremos de -una gran expresión musical y recorreremos el camino inverso hacia -abajo. - -@example -\score @{ - @{ % esta llave da inicio a toda la expresión musical compuesta - \new StaffGroup << - @var{...introduzca aquí la partitura completa de una ópera de Wagner...} - >> - @} % esta llave da por terminada toda expresión musical completa - \layout @{ @} -@} -@end example - -Una ópera de Wagner completa puede ser fácilmente el doble de larga -que este manual, por tanto vamos a hacer sólo un cantante y un piano. -No necesitamos un @code{StaffGroup} (que simplemente agrupa un cierto -número de pautas con un corchete a la izquierda) para este conjunto, -así que lo retiramos. Sin embargo, @emph{sí} necesitamos un cantante -y un piano. - -@example -\score @{ - << - \new Staff = "cantante" << - >> - \new PianoStaff = "piano" << - >> - >> - \layout @{ @} -@} -@end example - -Recuerde que usamos @code{<<} y @code{>>} en vez de @code{@{ ... @}} -para presentar música simultánea. Y, por supuesto, queremos presentar -las partes vocal y del piano al mismo tiempo, ¡no una después de otra! -Observe que la construcción @code{<< ... >>} no es realmente necesaria -para el pentagrama del cantante (pues contiene una sola expresión -musical); sin embargo, el uso de @code{<< ... >>} en lugar de llaves -sigue siendo necesario si la música que debe ir en el pentagrama está -compuesta por dos expresiones simultáneas, por ejemplo dos voces -simultáneas o una voz con letra. Escribiremos algo de música real más -tarde; por ahora limitémonos a poner algunas notas y letra de relleno. - -@lilypond[verbatim,quote,ragged-right] -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { c'1 } - \addlyrics { And } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { c'1 } - \new Staff = "lower" { c'1 } - >> - >> - \layout { } -} -@end lilypond - -Ahora tenemos muchos más detalles. Tenemos la pauta del cantante: -contiene una @code{Voice} o voz (en LilyPond, este término hace -referencia a un conjunto de notas, no necesariamente notas vocales -- -por ejemplo, un violín generalmente toca una voz --) y el texto de la -canción. También tenemos una pauta de piano: contiene un pentagrama -superior (mano derecha) y un pentagrama inferior (mano izquierda). - -En este momento podríamos comenzar a meter las notas. Dentro de las -llaves que siguen a @code{\new Voice = "vocal"}, podríamos empezar -escribiendo - -@example -\relative c'' @{ - r4 d8\noBeam g, c4 r -@} -@end example - -Pero si lo hiciéramos, la sección @code{\score} se haría bastante -larga y sería más difícil comprender lo que ocurre. En lugar de esto -utilizaremos identificadores o variables. Recordará que las vimos por -primera vez en la sección anterior. Así pues, escribiendo algunas -notas, ahora tenemos un fragmento musical de verdad: - -@lilypond[verbatim,quote,ragged-right] -melody = \relative c'' { r4 d8\noBeam g, c4 r } -text = \lyricmode { And God said, } -upper = \relative c'' { 2~ } -lower = \relative c { b2 e2 } - -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { \melody } - \addlyrics { \text } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { \upper } - \new Staff = "lower" { - \clef "bass" - \lower - } - >> - >> - \layout { } -} -@end lilypond - -Tenga cuidado con la diferencia entre las notas, que van precedidas de -@code{\relative} o insertadas directamente en la expresión musical, y -la letra, que va precedida de @code{\lyricmode}. Estas instrucciones -son esenciales para decirle a LilyPond que interprete el contenido que -viene a continuación como música y texto, respectivamente. - -Cuando escriba una sección @code{\score} o cuando la esté leyendo, -hágalo despacio y con cuidado. Comience por el nivel exterior y luego -trabaje sobre cada uno de los niveles interiores. También es de gran -ayuda ser muy estricto con los márgenes (asegúrese de que en su editor -de texto cada elemento del mismo nivel comienza en la misma posición -horizontal). - - -@seealso -Referencia de la notación: -@ruser{Structure of a score}. - - -@node Nesting music expressions -@subsection Nesting music expressions - -@cindex pentagramas temporales -@cindex temporales, pentagramas -@cindex ossias - -No es esencial declarar todos los pentagramas al comienzo; se pueden -crear temporalmente en cualquier momento. Esto es de especial -utilidad para crear secciones de ossia (véase @rglos{ossia}). A -continuación presentamos un ejemplo sencillo que muestra cómo -introducir temporalmente un pentagrama nuevo mientras dura un -fragmento de tres notas: - -@lilypond[verbatim,quote,ragged-right] -\new Staff { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff { - f8 f c - } - >> - r4 | - } -} -@end lilypond - -@noindent -Advierta que el tamaño de la clave es igual al que se imprime en un -cambio de clave (ligeramente menor que la clave al principio de una -línea). Esto es normal para cualquier clave que se imprime en la -mitad de una línea. - -@cindex pentagrama, posicionado del - -La sección ossia se puede colocar encima del pentagrama de la manera -siguiente: - -@lilypond[verbatim,quote,ragged-right] -\new Staff = "main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Este ejemplo utiliza @code{\with}, que se explica en todo detalle más -adelante. Es un medio de modificar el comportamiento predeterminado -de un solo pentagrama. Aquí, dice que el pentagrama nuevo se debe -colocar por encima del pentagrama llamado @qq{main} en vez de la -posición predeterminada que sería por debajo. - - -@seealso -Los fragmentos de ossia se escriben a menudo sin clave y sin -indicación de compás, y generalmente en un tipo más pequeño. Esto -necesitaría más instrucciones que aún no se han visto. Véase -@ref{Size of objects} y @ruser{Ossia staves}. - - -@node On the un-nestedness of brackets and ties -@subsection On the un-nestedness of brackets and ties - -@cindex corchetes y paréntesis, anidado de -@cindex corchetes y paréntesis, tipos de -@cindex corchetes y paréntesis, encerrar frente a marcar -@cindex paréntesis y corchetes, anidado de -@cindex paréntesis y corchetes, tipos de -@cindex paréntesis y corchetes, encerrar frente a marcar - -En la escritura del archivo de entrada de LilyPond, hemos podido ver -algunos tipos de paréntesis, llaves o ángulos de distintos tipos. -Éstos obedecen a distintas reglas que al principio pueden resultar -confusas. Antes de explicar estas reglas, demos un repaso a las -distintas clases de corchetes, llaves y paréntesis. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .3 .7 -@headitem Tipo de paréntesis - @tab Función -@item @code{@{ .. @}} - @tab Encierra un fragmento secuencial de música -@item @code{< .. >} - @tab Encierra las notas de un acorde -@item @code{<< .. >>} - @tab Encierra expresiones musicales simultáneas -@item @code{( .. )} - @tab Marca el comienzo y el final de una ligadura de expresión -@item @code{\( .. \)} - @tab Marca el comienzo y el final de una ligadura de fraseo -@item @code{[ .. ]} - @tab Marca el comienzo y el final de un barrado manual -@end multitable - -A las anteriores, debemos añadir otras construcciones que generan -líneas entre o a través de las notas: las ligaduras de unión (marcadas -con una tilde curva, @code{~}), los grupos especiales que se escriben -como @code{\times x/y @{..@}}, y las notas de adorno, que se escriben -como @code{\grace@{..@}}. - -Fuera de LilyPond, el uso convencional de los paréntesis y otros -corchetes requiere que los distintos tipos se encuentren anidados -correctamente, como en: @code{<< [ @{ ( .. ) @} ] >>}, de manera que -los paréntesis que se cierran deben encontrarse en el orden -exactamente opuesto al de los paréntesis que se abren. Esto -@strong{es} un requisito para los tres tipos de paréntesis que se -describen mediante la palabra @q{Encierra} en la tabla anterior: se -deben anidar correctamente. Sin embargo, el resto de las llaves y -corchetes, que se encuentran descritos por la palabra @q{Marca} en la -misma tabla anterior, @strong{no} tienen por qué anidarse -estrictamente con ninguno de los otros paréntesis. De hecho, éstos no -son paréntesis en el sentido de que encierran algo: simplemente son -marcadores que indican dónde empieza o finaliza algo. - -Así pues, por ejemplo, una ligadura de fraseo puede dar comienzo -antes de una barra insertada manualmente, y acabar antes de que acabe -la barra (algo que quizá no sea muy musical, pero es posible): - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] - { g8\( a b[ c b\) a] } -@end lilypond - -En general, los distintos tipos de corchete, y los implicados en -grupos especiales, ligaduras de unión y notas de adorno, se pueden -mezclar con total libertad. Este ejemplo muestra una barra que se -extiende hacia el interior de un grupo de valoración especial (línea -1), una ligadura de expresión que se prolonga hasta el interior de un -grupo especial (línea 2), una barra y una ligadura de expresión que se -prolongan hasta el interior de un grupo especial, una ligadura de -unión que atraviesa dos grupos especiales, y una ligadura de fraseo -que sale del interior de un grupo especial (líneas 3 y 4). - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - r16[ g16 \times 2/3 {r16 e'8] } - g16( a \times 2/3 {b d) e' } - g8[( a \times 2/3 {b d') e'~]} - \times 4/5 {e'32\( a b d' e'} a'4.\) -} -@end lilypond - - -@node Voices contain music -@section Voices contain music - -Igual que los cantantes, LilyPond necesita voces para cantar. En -realidad, la música para cualquier instrumento de una partitura está -siempre contenida dentro de una voz --el concepto de LilyPond más -fundamental de todos--. - -@menu -* I'm hearing Voices:: -* Explicitly instantiating voices:: -* Voices and vocals:: -@end menu - -@node I'm hearing Voices -@subsection I'm hearing Voices - -@cindex polifonía -@cindex capas -@cindex varias voces -@cindex voces, varias -@cindex Voice (voz), contexto de -@cindex contexto Voice (de voz) -@cindex simultánea, música -@cindex concurrente, música -@cindex voces frente a acordes -@cindex acordes frente a voces - -De las capas más profundas de una partitura de LilyPond, las más bajas -y más fundamentales reciben el nombre de @q{Voice contexts} -(«contextos de voz») o, abreviadamente, @q{Voices} («voces»). Las -voces reciben a veces el nombre de @q{layers} («capas») en otros -programas de edición de partituras. - -De hecho, una capa o contexto de voz es la única que puede contener -música. Si un contexto de voz no se declara explícitamente, se crea -uno de forma automática, como vimos al comienzo de este capítulo. -Ciertos instrumentos como el oboe solamente pueden tocar una nota cada -vez. La música escrita para estos instrumentos es monofónica y -solamente requiere una voz única. Los instrumentos que pueden tocar -más de una nota a la vez, como el piano, con frecuencia necesitarán -varias voces para codificar las distintas notas y ritmos concurrentes -que son capaces de tocar. - -Una sola voz puede contener muchas notas dentro de un acorde, por -supuesto; entonces ¿cuándo, exactamente, se necesitan varias voces? -En primer lugar observe este ejemplo de cuatro acordes: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -\key g \major -4 -@end lilypond - -Esto se puede expresar utilizando sólo símbolos de acorde con ángulos -simples, @code{< ... >}, y para este propósito tan sólo se necesita -una voz. Pero suponga que el Fa sostenido fuese realmente una corchea -seguida de un Sol corchea, una nota de paso que conduce al La. Ahora -tenemos dos notas que empiezan en el mismo momento pero tienen -distintas duraciones: la negra Re, y la corchea Fa sostenido. ¿Cómo se -codifica esto? No se pueden escribir como un acorde porque todas las -notas de un acorde deben tener la misma duración. Y no se pueden -escribir como dos notas en secuencia porque tienen que empezar en el -mismo momento. Aquí es donde se necesitan dos voces. - -Veamos cómo se hace esto dentro de la sintaxis de entrada de LilyPond. - -@funindex << \\ >> -@funindex \\ - -La forma más fácil de introducir fragmentos con más de una voz en un -solo pentagrama es escribir cada voz como una secuencia (con -@code{@{...@}}), y combinarlas simultáneamente con ángulos dobles, -@code{<<...>>}. Los fragmentos también se deben separar mediante una -doble barra invertida, @code{\\}, para situarlos en voces separadas. -Sin esto, las notas irían a una sola voz, lo que normalmente produce -errores. Esta técnica se adapta especialmente bien a piezas de música -que son mayormente monofónicas pero ocasionalmente tienen cortas -secciones de polifonía. - -He aquí cómo dividimos los acordes anteriores en dos voces y añadimos -la nota de paso y la ligadura: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key g \major -% Voice "1" Voice "2" -<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> | -@end lilypond - -Observe cómo las plicas de la segunda voz ahora se dirigen hacia -abajo. - -A continuación veamos otro ejemplo sencillo: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -% Voice "1" Voice "2" -<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | -<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | -<< { a2. r4 } \\ { fis2. s4 } >> | -@end lilypond - -No es necesario usar una construcción @code{<< \\ >>} distinta para -cada compás. Para música que tenga unas pocas notas en cada compás, -esta disposición podría facilitar la legibilidad del código, pero si -hay muchas notas en cada compás podría ser mejor dividirlo en dos -voces separadas, de la siguiente manera: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -<< { - % Voice "1" - r4 g g4. a8 | - bes4 bes c bes | - a2. r4 | -} \\ { - % Voice "2" - d,2 d4 g | - g4 g g8( a) g4 | - fis2. s4 | -} >> -@end lilypond - -@cindex voces, nombrado de -@cindex voces que cruzan corchetes -@cindex ligaduras que cruzan corchetes - -Este ejemplo tiene sólo dos voces, pero la misma construcción se puede -usar para codificar tres o más voces mediante la adición de más -separadores de barra invertida. - -Los contextos de voz llevan los nombres de @code{"1"}, @code{"2"}, -etc. En cada uno de estos contextos, la dirección vertical de las -ligaduras, plicas, matices dinámicos, etc., se ajusta de la forma -correcta. - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - % Main voice - c16 d e f - % Voice "1" Voice "2" Voice "3" - << { g4 f e } \\ { r8 e4 d c8 ~ } >> | - << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | -} -@end lilypond - -Todas estas voces están separadas de la voz principal que contiene las -notas justo por fuera de la construcción @code{<< .. >>}. Le -llamaremos a esto la @emph{construcción simultánea}. Las ligaduras -(de prolongación y de expresión) solamente pueden conectar notas que -estén dentro de la misma voz, luego las ligaduras no pueden entrar o -salir de una construcción simultánea. A la inversa, las voces -paralelas de construcciones simultáneas distintas sobre el mismo -pentagrama, son la misma voz. Otras propiedades relativas a las voces -también conllevan construcciones simultáneas. A continuación vemos el -mismo ejemplo, con colores y cabezas distintos para cada voz. Observe -que los cambios en una voz no afectan a otras voces, pero persisten -más tarde dentro de la misma voz. Observe también que las notas -ligadas se pueden dividir entre las mismas voces de dos -construcciones, como se indica aquí en la voz de triángulos azules. - -@lilypond[quote,verbatim] -\new Staff \relative c' { - % Main voice - c16 d e f - << % Bar 1 - { - \voiceOneStyle - g4 f e - } - \\ - { - \voiceTwoStyle - r8 e4 d c8 ~ - } - >> - << % Bar 2 - % Voice 1 continues - { d2 e2 } - \\ - % Voice 2 continues - { c8 b16 a b8 g ~ g2 } - \\ - { - \voiceThreeStyle - s4 b4 c2 - } - >> -} -@end lilypond - -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -Las instrucciones @code{\voiceXXXStyle} están pensadas principalmente -para usarlas en documentos educativos como este mismo. Modifican el -color de la cabeza, la plica y las barras, y el estilo de la cabeza, -de forma que las voces se puedan distinguir fácilmente. La voz uno -está establecida a rombos rojos, la voz dos a triángulos azules, la -voz tres a círculos verdes con aspas, y la voz cuatro (que no se -utiliza aquí) a aspas color magenta. @code{\voiceNeutralStyle} (que -tampoco se usa aquí) devuelve todo al estilo predeterminado. Veremos -más adelante cómo el usuario puede crear instrucciones como éstas. -Véase @ref{Visibility and color of objects} y @ref{Using variables for -tweaks}. - -@cindex polifonía y modo relativo -@cindex relativo, modo, polifonía y - -La polifonía no cambia la relación de las notas dentro de un bloque -@code{\relative @{ @}}. La altura de cada nota aún se calcula con -relación a la nota que le precede inmediatamente, o a la primera nota -del acorde precedente. Así, en - -@example -\relative c' @{ notaA << < notaB notaC > \\ notaD >> notaE @} -@end example - -@noindent -@code{notaB} es relativa a @code{notaA} @* -@code{notaC} es relativa a @code{notaB}, no a @code{notaA}; @* -@code{notaD} es relativa a @code{notaB}, no a @code{notaA} ni a -@code{notaC}; @* -@code{notaE} es relativa a @code{notaD}, no a @code{notaA}. - -Una forma alternativa, que podría ser más clara si las notas en las -voces están muy separadas, es colocar una instrucción @code{\relative} -al principio de cada voz: - -@example -\relative c' @{ notaA ... @} -<< - \relative c'' @{ < notaB notaC > ... @} -\\ - \relative g' @{ notaD ... @} ->> -\relative c' @{ notaE ... @} -@end example - -Finalmente, analicemos las voces en una pieza de música más compleja. -He aquí las notas de los dos primeros compases del segundo de los Dos -Nocturnos de Chopin, Op 32. Este ejemplo se utilizará en fases -posteriores dentro del presente capítulo y el siguiente, para ilustrar -varias técnicas para producir notación, y por tanto le pedimos que -ignore por ahora cualquier cosa en el código subyacente que le parezca -misterioso y tan sólo se concentre en la música y las voces (todas -las complicaciones se explicarán en secciones posteriores). - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % No voice three - \\ % Voice four - { - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - -Con frecuencia, la dirección de las plicas se utiliza para indicar la -continuidad de dos líneas melódicas simultáneas. Aquí, todas las -plicas de las notas agudas se dirigen hacia arriba y las de las notas -graves hacia abajo. Ésta es la primera indicación de que se requiere -más de una voz. - -Pero la necesidad real de varias voces aflora cuando hay notas que -comienzan en el mismo tiempo pero tienen distintas duraciones. -Observe las notas que comienzan en la tercera parte del primer compás. -El La bemol es una negra con puntillo, el Fa es una negra y el Re -bemol es una blanca. Estas notas no se pueden escribir como un acorde -porque todas las notas de un acorde deben tener la misma duración. -Tampoco se pueden escribir como notas secuenciales, pues deben -comenzar al mismo tiempo. Esta sección del compás requiere tres -voces, y la práctica común sería escribir todo el compás como tres -voces como se muestra abajo, donde hemos usado distintas cabezas y -colores para las tres voces. Una vez más, el código que subyace a -este ejemplo se explicará más tarde, así pues ignore todo lo que no -entienda. - -@c The following should appear as music without code -@c The three voice styles should be defined in -init -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { % Voice one - \voiceOneStyle - c2 aes4. bes8 - } - \\ % Voice two - { \voiceTwoStyle - aes2 f4 fes - } - \\ % No Voice three (we want stems down) - \\ % Voice four - { \voiceThreeStyle - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - - -Vamos a intentar codificar esta música partiendo de cero. Como -veremos, esto se topa con ciertas dificultades. Comenzamos tal y como -hemos aprendido, usando la construcción @code{<< \\ >>} para -introducir la música del primer compás en tres voces: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } - >> - 1 -} -@end lilypond - -@cindex plica abajo -@cindex voces y dirección de las plicas -@cindex plicas, voces y dirección de las -@cindex plica arriba - -Las direcciones de las plicas se asignan automáticamente de forma que -las voces de numeración impar reciben las plicas hacia arriba y las de -numeración par hacia abajo. Las plicas de las voces 1 y 2 están -correctas, pero las plicas de la voz 3 debería ir hacia abajo en este -fragmento en particular. Podemos corregir esto simplemente -olvidándonos de la voz tres y situando la música en la voz cuatro: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % Omit Voice three - \\ % Voice four - { 2 des2 } - >> | - 1 | -} -@end lilypond - -@noindent -Vemos que esto arregla la dirección de la plica, pero presenta un -problema que se encuentra a veces con varias voces: las plicas de las -notas en una voz pueden colisionar con las cabezas de otras voces. Al -disponer las notas, LilyPond permite que las notas o acordes de dos -voces ocupen la misma columna vertical de notas teniendo en cuenta que -las plicas están en direcciones opuestas, pero las notas de la tercera -y cuarta voces se desplazan si es necesario para evitar la colisión -entre las cabezas. Esto funciona bien por lo general, pero en este -ejemplo claramente las notas de la voz inferior no están bien -colocadas de forma predeterminada. LilyPond proporciona diversas -maneras de ajustar la colocación horizontal de las notas. Aún no -estamos preparados para ver cómo corregir esto, así que dejaremos este -problema aparcado hasta una sección posterior (véase la propiedad -@code{force-hshift} en @ref{Fixing overlapping notation}). - - -@seealso -Referencia de la notación: -@ruser{Multiple voices}. - - -@node Explicitly instantiating voices -@subsection Explicitly instantiating voices - - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceTwo -@funindex voiceTwo -@funindex \voiceThree -@funindex voiceThree -@funindex \voiceFour -@funindex voiceFour -@funindex \oneVoice -@funindex oneVoice -@funindex \new Voice -@cindex contextos de voz, creación de - -Los contextos de voz también se pueden crear manualmente dentro de un -bloque @code{<< >>} para crear música polifónica, utilizando -@code{\voiceOne} ... @code{\voiceFour} para indicar las direcciones -requeridas de plicas, ligaduras, etc. En partituras más largas, este -método es más claro porque permite que las voces estén separadas y -reciban nombres más descriptivos. - -Concretamente, la construcción @code{<< \\ >>} que usamos en la -sección previa: - -@example -\new Staff @{ - \relative c' @{ - << @{ e4 f g a @} \\ @{ c,4 d e f @} >> - @} -@} -@end example - -@noindent -equivale a - -@example -\new Staff << - \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} - \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} ->> -@end example - -Los dos ejemplos anteriores producen: - -@c The following example should not display the code -@lilypond[ragged-right,quote] -\new Staff << - \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } - \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } ->> -@end lilypond - -@cindex voces, retorno a única -@cindex retorno a voz única - -Las instrucciones @code{\voiceXXX} establecen la dirección de las -plicas, ligaduras de expresión, ligaduras de prolongación, -articulaciones, anotaciones de texto, puntillos y digitaciones. -@code{\voiceOne} y @code{\voiceThree} hacen que estos objetos apunten -hacia arriba, mientras que @code{\voiceTwo} y @code{\voiceFour} los -hacen apuntar hacia abajo. Estas instrucciones también producen un -desplazamiento horizontal para cada voz cuando es necesario para -evitar choques entre las cabezas. La instrucción @code{\oneVoice} -devuelve los ajustes de nuevo a los valores normales para una sola -voz. - -Veamos en algunos ejemplos sencillos exactamente qué efecto tienen -@code{\oneVoice}, @code{\voiceOne} y @code{voiceTwo} sobre el marcado, -las ligaduras de unión y de expresión y las indicaciones de dinámica: - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - % Default behavior or behavior after \oneVoice - c d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceOne - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceTwo - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -A continuación veremos tres formas distintas de componer la notación -del mismo pasaje polifónico, cada una de las cuales tiene sus ventajas -según la circunstancia, utilizando el ejemplo de la sección anterior. - -Una expresión que aparece directamente dentro de @code{<< >>} -pertenece a la voz principal (pero, observe, @strong{no} dentro de una -construcción @code{<< \\ >>}). Esto es útil cuando aparecen voces -nuevas mientras la voz principal está sonando. A continuación podemos -ver una realización más correcta del ejemplo de la sección anterior. -Las notas rojas en forma de rombo muestran que la melodía principal -está ahora dentro de un contexto de una sola voz, haciendo que se -pueda trazar una ligadura por encima de ellas. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - \voiceOneStyle - % The following notes are monophonic - c16^( d e f - % Start simultaneous section of three voices - << - % Continue the main voice in parallel - { g4 f e | d2 e2) } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s2. | s4 b4 c2 - } - >> -} -@end lilypond - -@cindex anidado de expresiones musicales -@cindex anidado de construcciones simultáneas -@cindex anidado de voces -@cindex voces temporales -@cindex voces, anidado de - -Son posibles construcciones polifónicas anidadas más profundamente, y -si una voz aparece sólo brevemente podría haber una forma más natural -de tipografiar la música. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - c16^( d e f - << - { g4 f e | d2 e2) } - \new Voice { - \voiceTwo - r8 e4 d c8 ~ | - << - {c8 b16 a b8 g ~ g2} - \new Voice { - \voiceThree - s4 b4 c2 - } - >> - } - >> -} -@end lilypond - -@cindex espaciadoras, notas - -Este método de anidar voces nuevas brevemente es útil cuando sólo hay -secciones polifónicas pequeñas, pero cuando todo el pentagrama es muy -polifónico podría ser más claro usar varias voces todo el tiempo, -usando notas espaciadoras para pasar por encima de las secciones en -que una voz está en silencio, como aquí: - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' << - % Initiate first voice - \new Voice { - \voiceOne - c16^( d e f g4 f e | d2 e2) | - } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s1 | s4 b4 c2 | - } ->> -@end lilypond - -@subsubheading Note columns - -@cindex columna de notas -@cindex colisiones de notas -@cindex notas, colisiones de -@cindex desplazamiento, instrucciones de -@funindex \shiftOff -@funindex shiftOff -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn - -Las notas cercanas de un acorde, o las notas que se producen al mismo -tiempo en distintas voces, se disponen en dos (y ocasionalmente más) -columnas para evitar el solapamiento de las cabezas. Reciben el -nombre de columnas de notas. Hay columnas distintas para cada voz, y -el desplazamiento especificado en curso dependiente de la voz se -aplica a la columna de la nota si en caso contrario se produjese una -colisión. Esto se puede ver en el ejemplo anterior. En el compás 2 el -Do en la voz dos está desplazado a la derecha respecto del Re de la -voz uno, y en el último acorde el Do de la voz tres también está -desplazado a la derecha respecto de las otras notas. - -Las instrucciones @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} -y @code{\shiftOff} especifican el grado en que se deben desplazar las -notas y acordes de la voz si en caso contrario ocurriese una -colisión. De forma predeterminada, las voces exteriores (normalmente -las voces uno y dos) llevan especificado @code{\shiftOff}, mientras -que las voces interiores (tres y cuatro) tienen @code{\shiftOn} -especificado. Cuando se aplica un desplazamiento, las voces uno y -tres se desplazan hacia la derecha y las voces dos y cuatro se -desplazan hacia la izquierda. - -@code{\shiftOnn} y @code{\shiftOnnn} definen niveles adicionales de -desplazamiento que se pueden especificar temporalmente para resolver -colisiones en situaciones complejas (véase @ref{Real music example}). - -Una columna de notas puede contener sólo una nota (o acorde) de una -voz con las plicas hacia arriba y una not (o acorde) de una voz con -las plicas hacia abajo. Si las notas de dos voces que tienen las -plicas en la misma dirección se sitúan en la misma posición y las dos -voces no tienen ningún desplazamiento o llevan especificado el mismo -desplazamiento, se producirá el mensaje de error @qq{Chocan demasiadas -columnas de notas}. - - -@seealso -Referencia de la notación: -@ruser{Multiple voices}. - - -@node Voices and vocals -@subsection Voices and vocals - - -La música vocal presenta una dificultad especial: tenemos que combinar -dos expresiones, a saber, las notas y la letra. - -@funindex \new Lyrics -@funindex \lyricsto -@funindex lyricsto -@funindex Lyrics -@cindex Lyrics, creación de un contexto -@cindex letra, creación de un contexto de -@cindex letra, enlazar con una voz - -Ya ha visto la instrucción @code{\addlyrics@{@}}, que maneja bien -partituras sencillas. Sin embargo esta técnica es algo limitada. -Para música de mayor complejidad, tenemos que introducir la letra en -un contexto @code{Lyrics} utilizando @code{\new Lyrics} y enlazar -explícitamente la letra y las notas mediante @code{\lyricsto@{@}}, -usando el nombre asignado a la voz. - -@lilypond[quote,verbatim,fragment] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - \new Lyrics \lyricsto "one" { - No more let sins and sor -- rows grow. - } ->> -@end lilypond - -Observe que la letra se debe enlazar a un contexto de @code{Voice}, -@emph{no} a un contexto de @code{Staff}. Este es un caso en que es -necesario crear contextos de @code{Staff} y de @code{Voice} -explícitamente. - -@cindex letra y barrado -@cindex barrado y letra -@funindex \autoBeamOff -@funindex autoBeamOff - -El barrado automático que LilyPond usa de forma predeterminada -funciona bien para la música instrumental, pero no tan bien para -música con letra, donde o bien el barrado no se necesita en absoluto, -o bien se utiliza para indicar los melismas de la letra. En el -ejemplo anterior hemos utilizado la instrucción @code{\autoBeamOff} -para desactivar el barrado automático. - -@funindex \new ChoirStaff -@funindex ChoirStaff -@funindex \lyricmode -@funindex lyricmode -@cindex vocal, estructura de una partitura -@cindex coro, sistema de - -Ahora vamos a reutilizar el ejemplo anterior de «Judas Macabeo» para -ilustrar esta técnica más flexible. Primero la reescribiremos para -que use variables, de manera que la música y la letra se puedan -separar de la estructura de pentagramas. También introduciremos una -llave de grupo de ChoirStaff. La letra en sí se debe introducir con -@code{\lyricmode} para estar seguros de que se interpreta como letra y -no como música. - -@lilypond[quote,verbatim] -global = { \time 6/8 \partial 8 \key f \major} -SopOneMusic = \relative c'' { - c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } -SopTwoMusic = \relative c' { - r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' } -SopOneLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, __ } -SopTwoLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, } - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "SopOne" { - \global - \SopOneMusic - } - \new Lyrics \lyricsto "SopOne" { - \SopOneLyrics - } - >> - \new Staff << - \new Voice = "SopTwo" { - \global - \SopTwoMusic - } - \new Lyrics \lyricsto "SopTwo" { - \SopTwoLyrics - } - >> - >> -} -@end lilypond - -Ésta es la estructura básica de todas las partituras vocales. Se -pueden añadir más pentagramas según se necesite, se pueden añadir más -voces a los pentagramas y más estrofas a la letra, y las variables que -contienen la música se pueden colocar fácilmente en archivos separados -cuando se hagan demasiado largos. - -@cindex himno, estructura de -@cindex SATB, estructura de -@cindex vocal, partitura, varias estrofas -@cindex varias estrofas vocales -@cindex estrofas, varias, vocales - -A continuación podemos ver un ejemplo final de la primera línea de un -himno con cuatro estrofas, para coro SATB. En este caso la letra de -las cuatro partes es la misma. Observe cómo utilizamos variables para -separar la notación musical de la estructura de pentagramas. Observe -también cómo se utiliza una variable, para la que hemos elegido el -nombre @q{TimeKey} («compás y tonalidad»), para que contenga varias -instrucciones que se usarán dentro de los dos pentagramas. En otros -ejemplos se le suele dar el nombre de @q{global}. - - - -@lilypond[quote,verbatim] -TimeKey = { \time 4/4 \partial 4 \key c \major} -SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyricmode { - E -- | ter -- nal fa -- ther, | strong to save, } -VerseTwo = \lyricmode { - O | Christ, whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { - O | Ho -- ly Spi -- rit, | who didst brood } -VerseFour = \lyricmode { - O | Tri -- ni -- ty of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Sop" { \VerseOne } - \new Lyrics \lyricsto "Sop" { \VerseTwo } - \new Lyrics \lyricsto "Sop" { \VerseThree } - \new Lyrics \lyricsto "Sop" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - -@cindex estrofa y estribillo - -Finalizamos con un ejemplo que muestra cómo podemos codificar una -estrofa para solista seguida de un estribillo en dos partes sobre dos -pentagramas. El posicionado de las secciones secuencial y simultánea -para conseguirlo dentro de una sola partitura es un poco enrevesado, -por tanto siga esta explicación con todo cuidado. - -Comenzamos el ejemplo con un bloque de partitura que contiene un -@code{ChoirStaff}, pues queremos que aparezca un corchete al comienzo -de la parte de coro. Normalmente necesitaríamos dobles ángulos -después de @code{\new ChoirStaff} para meter dentro todos los -pentagramas en paralelo, pero aquí queremos postponer el paralelismo -mientras dura el solo y por ello usaremos llaves, aunque aquí unos -ángulos dobles no harían daño. Dentro del @code{ChoirStaff} queremos -en primer lugar el pentagrama que va a contener la estrofa. Debe -contener notas y letra en paralelo, así que necesitamos dobles ángulos -encerrando el @code{\new Voice} y el @code{\new Lyrics} para que den -comienzo al mismo tiempo: - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -versewords = \lyricmode { - One two three four five six -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - } - \new Lyrics \lyricsto verse { - \versewords - } - >> - } -} -@end lilypond - -Con esto tenemos la línea de la estrofa. - -Ahora deseamos continuar con estribilloA (la primera parte del -estribillo) sobre el mismo pentagrama, mientras un segundo pentagrama -aparece en paralelo con él para estribilloB (estribillo, segunda parte), -por lo que ésta es una sección paralela que se debe situar -inmediatamente a continuación del salto de línea @code{\break} en la -voz de la estrofa. ¡Sí, @emph{dentro} de la voz de la estrofa! He -aquí dicha sección paralela. Se podrían introducir más pentagramas de -la misma forma. - -@example -<< - \notas_estribilloA - \new Lyrics \lyricsto estrofa @{ - \letra_estribilloA - @} - \new Staff << - \new Voice = "estribilloB" @{ - \notas_estribilloB - @} - \new Lyrics \lyricsto "estribilloB" @{ - \letra_estribilloB - @} - >> ->> -@end example - -Aquí tenemos el resultado final con dos pentagramas en el estribillo -mostrando cómo la sección paralela se posiciona dentro de la voz de la -estrofa: - -@lilypond[quote,verbatim, ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - << - \refrainnotesA - \new Lyrics \lyricsto "verse" { - \refrainwordsA - } - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> - } -} -@end lilypond - -@cindex libro -@cindex book, ejemplo de su uso -@funindex \book -@funindex book - -Sin embargo, y aunque esto es un interesante y útil ejercicio -destinado a ayudarle a comprender cómo funcionan los bloques -secuenciales y simultáneos, en la práctica quizá nos decidiríamos por -codificarlo como dos bloques @code{\score} dentro de un bloque -@code{\book} implícito, como sigue: - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new Staff << - \new Voice = "verse" { - \versenotes - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> -} - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "refrainA" { - \refrainnotesA - } - \new Lyrics \lyricsto "refrainA" { - \refrainwordsA - } - >> - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> -} -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Vocal music}. - - -@node Contexts and engravers -@section Contexts and engravers - -Los contextos y grabadores se han mencionado de manera informal en -secciones anteriores; ahora tan sólo vamos a ver estos conceptos con -más detalle, pues son importantes en el ajuste fino de la salida de -LilyPond. - -@menu -* Contexts explained:: -* Creating contexts:: -* Engravers explained:: -* Modifying context properties:: -* Adding and removing engravers:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@cindex contextos, explicación de los - -Cuando se imprime la música, se tienen que añadir a la salida una gran -cantidad de elementos notacionales que no aparecen explícitamente en -el archivo de entrada. Por ejemplo, compare la entrada y la salida -del siguiente ejemplo: - -@lilypond[quote,verbatim,relative=2,fragment] -cis4 cis2. g4 -@end lilypond - -La entrada es bastante escueta, pero en la salida se añaden líneas -divisorias, alteraciones accidentales, la clave y la indicación de -compás. LilyPond @emph{interpreta} la entrada. En esta fase se -inspecciona la información musical en orden temporal, de forma -parecida a la lectura de una partitura de izquierda a -derecha. Mientras se lee la entrada, el programa recuerda dónde se -encuentran los límites de los compases, y qué notas requieren -alteraciones explícitas. Esta información se puede presentar sobre -varios niveles. Por ejemplo, el efecto de una alteración accidental -se encuentra limitada a un solo pentagrama, mientras que una barra -divisoria debe estar sincronizada a través de la partitura de arriba a -abajo. - -Dentro de LilyPond, estas reglas y pequeñas porciones de información -se agrupan en @emph{Contexts}. Algunos ejemplos de contextos son -@code{Voice} (Voz), @code{Staff} (Pauta o pentagrama) y @code{Score} -(Partitura). Los contextos son jerárquicos, de forma que reflejan la -naturaleza jerárquica de una partitura musical. Por ejemplo: un -contexto de @code{Staff} contener muchos contextos de @code{Voice}, y -un contexto de @code{Score} puede contener muchos contextos de -@code{Staff}. - -@quotation -@sourceimage{context-example,5cm,,} -@end quotation - -Cada contexto asume la responsabilidad de imponer algunas reglas de -notación, creando ciertos objetos de notación y manteniendo las -propiedades asociadas. Por ejemplo, el contexto @code{Voice} puede -introducir una alteración accidental y entonces el contexto -@code{Staff} mantiene la regla de mostrar o suprimir la alteración -para el resto del compás. - -Otro ejemplo lo constituye el hecho de que la sincronización de las -líneas divisorias se gestiona dentro del contexto de la partitura, -@code{Score}, de forma predeterminada. Sin embargo, en algunas -músicas posiblemente no queramos que las líneas divisorias estén -sincronizadas (pensemos en una partitura polimétrica en compases de -4/4 y de 3/4). En tales casos, debemos modificar los ajustes por -omisión de los contextos @code{Score} y @code{Staff}. - -Para partituras muy sencillas, los contextos se crean implícitamente y -no debemos preocuparnos por ellos. Para piezas mayores, como por -ejemplo cualquiera que tenga más de un pentagrama, los contextos se -deben crear explícitamente para asegurarnos de que tendremos la -cantidad exacta de pentagramas que necesitamos, y que están en el -orden correcto. Para tipografiar piezas con notación especializada, -es frecuente la modificación de contextos existentes o incluso definir -unos completamente nuevos. - - -Además de los contextos @code{Score,} @code{Staff} y @code{Voice}, hay -contextos que se sitúan entre los niveles de partitura y de pentagrama -para controlar los grupos de pentagraamas, como los contextos -@code{PianoStaff} y @code{ChoirStaff}. También existen contextos -alternativos de pentagrama y de voz, y contextos para la letra, la -percusión, diagramas de trastes, bajo cifrado, etc. - -Los nombres de todos los tipos de contextos se componen de una o más -palabras que comienzan con mayúscula y que están unidas unas a otras -sin guión ni barra baja, por ejemplo: -@code{GregorianTranscriptionStaff}. - - -@seealso -Referencia de la notación: -@ruser{Contexts explained}. - - -@node Creating contexts -@subsection Creating contexts - -@funindex \new -@funindex new -@cindex nuevos contextos -@cindex creación de contextos -@cindex contextos, creación de - -Sólo puede haber un contexto en el nivel más alto: el contexto de -partitura @code{Score}. Se crea con la instrucción @code{\score} o, -en partituras sencillas, se crea automáticamente. - -Para partituras que solamente tienen una voz y un pentagrama, podemos -dejar que los contextos @code{Voice} y @code{Staff} se creen -automáticamente, pero para partituras más complejas es necesario -crearlos a mano. La instrucción más simple que hace esto es -@code{\new}. Se antepone a una expresión musical, por ejemplo - -@example -\new @var{tipo} @var{expresión_musical} -@end example - -@noindent -donde @var{tipo} es el nombre de un contexto (como @code{Staff} o -@code{Voice}). Esta instrucción crea un contexto nuevo, y comienza a -interpretar la @var{expresión_musical} que está dentro de ese -contexto. - -Observe que no hay ninguna instrucción @code{\new Score}; el contexto -@code{Score} único en el nivel más alto se introduce con -@code{\score}. - - -En las secciones anteriore ha podido ver muchos ejemplos prácticos que -creaban nuevos contextos de @code{Staff} y de @code{Voice}, pero para -recordarle cómo se emplean estas instrucciones en la práctica, he aquí -un ejemplo anotado de música real: - -@lilypond[quote,verbatim,ragged-right] -\score { % start of single compound music expression - << % start of simultaneous staves section - \time 2/4 - \new Staff { % create RH staff - \key g \minor - \clef "treble" - \new Voice { % create voice for RH notes - \relative c'' { % start of RH notes - d4 ees16 c8. | - d4 ees16 c8. | - } % end of RH notes - } % end of RH voice - } % end of RH staff - \new Staff << % create LH staff; needs two simultaneous voices - \key g \minor - \clef "bass" - \new Voice { % create LH voice one - \voiceOne - \relative g { % start of LH voice one notes - g8 ees, | - g8 ees, | - } % end of LH voice one notes - } % end of LH voice one - \new Voice { % create LH voice two - \voiceTwo - \relative g { % start of LH voice two notes - g4 ees | - g4 ees | - } % end of LH voice two notes - } % end of LH voice two - >> % end of LH staff - >> % end of simultaneous staves section -} % end of single compound music expression -@end lilypond - -(Observe cómo todas las instrucciones que abren un bloque con una -llave curva, @code{@{}, o con ángulos dobles, @code{<<}, están -sangrados (tienen un margen adicional) con dos espacios adicionales, y -la llave de cierre correspondiente tiene un margen exactamente igual. -Aunque no es necesario, la observancia de esta práctica reducirá -considerablemente el número de errores de @q{paréntesis -descompensados}, y se recomienda vivamente. Permite apreciar de un -solo vistazo la estructura de la música, y cualquier paréntesis -descompensado aprecerá con obviedad. Observe también cómo el -pentagrama de la MI se crea usando dobles ángulos porque requiere dos -voces, mientras que el pentagrama de la MD se crea con una expresión -musical única encerrada entre llaves porque sólo requiere una voz.) - - -@cindex contextos, nombrado -@cindex nombrar contextos - -La instrucción @code{\new} también puede otorgar un nombre -identificativo al contexto para distinguirlo de otros contextos del -mismo tipo: - -@example -\new @var{tipo} = @var{identificador} @var{expresión_musical} -@end example - -Observe la distinción entre el nombre del tipo de contexto, -@code{Staff}, @code{Voice}, etc., y el nombre identificativo de una -instancia en particular de ese tipo, que puede ser cualquier secuencia -de letras inventada por el usuario. En el nombre identificativo -también se pueden utilizar dígitos y espacios, pero en este caso aquél -debe ir entre comillas p.ej. @code{\new Staff = "MiPentagrama 1" -@var{expresión_musical}}. El nombre identificativo se utiliza para -referirnos más tarde a esa instancia en particular de un contexto. -Hemos visto esto en la sección acerca de la letra, en @ref{Voices and -vocals}. - - -@seealso -Referencia de la notación: -@ruser{Creating contexts}. - - -@node Engravers explained -@subsection Engravers explained - -@cindex grabadores - -Todas y cada una de las marcas de la salida impresa de una partitura -hecha con LilyPond está producida por un @code{Engraver} (grabador). -Así, tenemos un grabador para imprimir pentagramas, otro para imprimir -las cabezas de las notas, otro para las plicas, otro para las barras, -etc, etc. ¡En total hay más de 120 grabadores! Afortunadamente, para -la mayor parte de las partituras no es necesario conocer más que -algunos, y para partituras sencillas no tenemos que saber nada de -ninguno de ellos. - -Los grabadores residen y operan dentro de Contextos. Los grabadores -como el grabador de la indicación metronómica, -@code{Metronome_mark_engraver}, cuya acción y resultado se aplican a -la partitura como un todo, operan en el contexto del nivel más alto: -el contexto de partitura @code{Score}. - -El grabador de la clave @code{Clef_engraver} y el de la armadura -@code{Key_engraver} se encuentran probablemente en todos los contextos -de pentagrama (@code{Staff}), pues los distintos pentagramas podrían -requerir diferentes claves y armaduras. - -El grabador de las cabezas de nota @code{Note_heads_engraver} y el de -las plicas @code{Stem_engraver} viven en cada uno de los contextos de -voz @code{Voice}, el contexto de nivel más bajo de todos. - -Cada grabador procesa los objetos particulares asociados con su -función, y mantiene las propiedades que están relacionadas con dicha -función. Estas propiedades, como las que están asociadas con los -contextos, se pueden modificar para cambiar el funcionamiento del -grabador o el aspecto de esos elementos en la partitura impresa. - -Todos los grabadores tienen nombres compuestos de varias palabras que -describen su función. Sólo está en mayúsculas la inicial de la -primera palabra, y el resto se le une mediante guiones bajos. Así, el -grabador @code{Staff_symbol_engraver} es responsable de la creación de -las líneas del pentagrama, y el @code{Clef_engraver} determina y -establece la altura o el punto de referencia sobre el pentagrama -dibujando un símbolo de clave. - -A continuación presentamos algunos de los grabadores más comunes, -junto a su función. Podrá comprobar que es fácil adivinar la función -a partir del nombre (en inglés), y viceversa. - -@multitable @columnfractions .3 .7 -@headitem Grabador - @tab Función -@item Accidental_engraver - @tab Hace las alteraciones accidentales, de precaución y de sugerencia. -@item Beam_engraver - @tab Graba las barras -@item Clef_engraver - @tab Graba las claves -@item Completion_heads_engraver - @tab Splits notes which cross bar lines -@c The old Dynamic_engraver is deprecated. -jm -@item New_dynamic_engraver - @tab Crea reguladores e indicaciones dinámicas textuales -@item Forbid_line_break_engraver - @tab Prevents line breaks if a musical element is still active -@item Key_engraver - @tab Crea la armadura de la tonalidad -@item Metronome_mark_engraver - @tab Graba la indicación metronómica -@item Note_heads_engraver - @tab Graba la cabeza de las notas -@item Rest_engraver - @tab Graba los silencios -@item Staff_symbol_engraver - @tab Graba las cinco líneas (de forma predeterminada) del pentagrama -@item Stem_engraver - @tab Crea las plicas y los trémolos de una sola plica -@item Time_signature_engraver - @tab Crea las indicaciones de compás -@end multitable - -@smallspace - -Más adelante veremos cómo la salida de LilyPond se puede cambiar -mediante la modificación del funcionamiento de los Grabadores. - - -@seealso -Referencia de funcionamiento interno: -@rinternals{Engravers and Performers}. - - -@node Modifying context properties -@subsection Modifying context properties - -@cindex contexto, propiedades de -@cindex contexto, propiedades de, modificación -@cindex modificar las propiedades de contexto -@funindex \set -@funindex set -@funindex \unset -@funindex unset - -Los contextos se responsabilizan de mantener los valores de un cierto -número de @emph{properties} de contexto. Muchas de ellas se pueden -cambiar para influir en la interpretación del código de entrada y -cambiar así la apariencia de la salida impresa. Se modifican mediante -la instrucción @code{\set}. Esta instrucción toma la forma siguiente: - -@example -\set @emph{NombreDelContexto}.@emph{nombreDeLaPropiedad} = #@emph{valor} -@end example - -Donde el @emph{NombreDelContexto} es normalmente @code{Score}, -@code{Staff} o @code{Voice}. Se puede omitir, en cuyo caso se supone -que es @code{Voice}. - -Los nombres de las propiedades de contexto consisten en palabras -unidas sin ningún guión o barra baja, y donde todas las palabras -excepto la primera empiezan en mayúscula. A continuación podemos ver -algunos ejemplos de nombres de propiedades utilizadas con frecuencia. -Hay muchas más que las que se muestran aquí. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .25 .15 .45 .15 -@headitem nombreDeLaPropiedad - @tab Tipo - @tab Función - @tab Valor de ejemplo -@item extraNatural - @tab Booleano - @tab Si es verdadero, poner becuadros adicionales antes de las alteraciones - @tab @code{#t}, @code{#f} -@item currentBarNumber - @tab Entero - @tab Ajustar el número del compás actual - @tab @code{50} -@item doubleSlurs - @tab Booleano - @tab Si es verdadero, imprimir ligaduras de expresión por encima y por debajo de las notas - @tab @code{#t}, @code{#f} -@item instrumentName - @tab Texto - @tab Establecer el nombre del pentagrama, situado a la izquierda - @tab @code{"Cello I"} -@item fontSize - @tab Real - @tab Aumentar o disminuir el tamaño de la fuente tipográfica - @tab @code{2.4} -@item stanza - @tab Texto - @tab Establecer el texto que se imprime antes del comienzo de una estrofa - @tab @code{"2"} -@end multitable - -@noindent -donde un valor Booleano es verdadero (@code{#t}, True) o falso -(@code{#f}, False), un Entero es un número entero positivo, un número -Real es un número decimal positivo o negativo, y el texto se encierra -entre comillas dobles. Observe la aparición de signos de cuadradillo, -(@code{#}), en dos lugares diferentes: como parte del valor Booleano -antes de la @code{t} o la @code{f}, y antes del @emph{valor} dentro de -la sentencia @code{\set}. Así pues, cuando se está escribiendo un -valor Booleano, hay que escribir dos signos de cuadradillo, por -ejemplo: @code{##t}. - -@cindex propiedades que funcionan en contextos -@cindex establecer propiedades en contextos - -Antes de poder establecer cualquiera de estas propiedades, tenemos que -saber en qué contexto operan. A veces es algo obvio, pero en -ocasiones puede ser algo enrevesado. Si especificamos un contexto -equivocado, no se produce ningún mensaje de error, pero el -funcionamiento esperado no tendrá lugar. Por ejemplo, la propiedad -@code{instrumentName} (nombre del instrumento) vive claramente dentro -del contexto de @code{Staff}, puesto que es el pentagrama el que debe -ser nombrado. En este ejemplo, el primer pentagrama resulta -etiquetado, pero no el segundo, porque hemos omitido el nombre del -contexto. - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - \set Staff.instrumentName = #"Soprano" - c4 c - } - \new Staff \relative c' { - \set instrumentName = #"Alto" % Wrong! - d4 d - } ->> -@end lilypond - -Recuerde que el nombre del contexto predeterminado es @code{Voice}, -así que la segunda instrucción @code{\set} establece la propiedad -@code{instrumentName} del contexto @code{Voice} a @qq{Alto}, pero como -LilyPond no busca esta propiedad en el contexto @code{Voice}, no se -realiza ninguna acción. Esto no es un error, y no se registra ningún -mensaje en el archivo Log de registro de errores. - -De forma parecida, si el nombre de la propiedad se escribe con alguna -falta, no se produce ningún mensaje de error, y claramente la acción -esperada no puede tener lugar. De hecho, se puede establecer -cualquier @q{property} (ficticia) usando cualquier nombre que queramos -en cualquier contexto que exista, mediante el uso de la instrucción -@code{\set}. Pero si el nombre no es conocido para LilyPond, no -producirá ninguna acción. Algunos editores de texto que apoyan a los -archivos de entrada de LilyPond de manera especial, documentan los -nombres de propiedades con viñetas cuando psamos sobre ellos con el -puntero del ratón, como JEdit con la extensión LilyPondTool, o -resaltan los nombres de propiedades desconocidas de manera diferente, -como ConTEXT. Si no se utiliza un editor con tales posibilidades, se -recomienda comprobar la corrección del nombre de la propiedad en el -manual de Referencia de funcionamiento interno: véase -@rinternals{Tunable context properties} o @rinternals{Contexts}. - -La propiedad @code{instrumentName} tendrá efecto solamente si se -establece dentro del contexto @code{Staff}, pero algunas propiedades -se pueden establecer en más de un contexto. Por ejemplo, la propiedad -@code{extraNatural} está establecida por defecto al valor @code{##t} -(verdadero) para todos los pentagramas. Si se establece a @code{##f} -(falso) en un contexto de @code{Staff} determinado, se aplicará -solamente a las alteraciones de ese pentagrama. Si se establece a -falso en el contexto de la partitura, @code{Score}, se aplicará a -todos los pentagramas. - -Así, esto desactivará los becuadros adicionales en un pentagrama: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Staff.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -@noindent -y esto los desactivará en todos los pentagramas: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Score.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -Como un ejemplo más, si se establece @code{clefOctavation} dentro del -contexto de @code{Score}, éste cambia inmediatamente el valor de la -octavación en todos los pentagramas en curso y establece un nuevo -valor predeterminado que se aplicará a todos los pentagramas. - -La instrucción opuesta, @code{\unset}, tiene el efecto de suprimir la -propiedad del contexto, lo que ocasiona que la mayoría de las -porpiedades vuelvan a su valor predeterminado. Normalmente no es -necesario el uso de @code{\unset}, pues una nueva instrucción -@code{\set} hará el ajuste deseado. - -Las instrucciones @code{\set} y @code{\unset} pueden aparecer en -cualquier lugar del archivo de entrada y tendrán efecto a partir del -tiempo en que se encuentran y hasta el final de la partitura o hasta -que la propiedad se establezca de nuevo mediante @code{\set} o -@code{\unset}. Probemos a modificar el tamaño de la fuente -tipográfica, lo que afecta al tamaño de las cabezas de las notas -(entre otras cosas) varias veces. El cambio se toma a partir del -valor predeterminado, no el valor en curso. - -@lilypond[quote,verbatim,ragged-right,relative=1,fragment] -c4 -% make note heads smaller -\set fontSize = #-4 -d e -% make note heads larger -\set fontSize = #2.5 -f g -% return to default size -\unset fontSize -a b -@end lilypond - -Hemos podido ver cómo establecer los valores de diversos tipos de -propiedad diferentes. Observe que los números enteros y reales van -siempre precedidos de un símbolo de cuadradillo, @code{#}, mientras -que un valor booleano verdadero o falso se especifica mediante -@code{##t} y @code{##f}, con dos cuadradillos. Una propiedad de texto -se debe encerrar entre comillas dobles, como antes, aunque veremos más -adelante que el texto realmente se puede especificar de una forma -mucho más general utilizando la potentísima instrucción @code{markup}. - -@subsubheading Setting context properties with @code{\with} - -@funindex \with -@funindex with -@cindex contexto, propiedades de, establecimiento con \with - -Las propiedades de contexto también se pueden establecer en el momento -en que se crea el contexto. A veces esta forma de establecer el valor -de una propiedad es mucho más clara, si ha de quedar fijo durante todo -el tiempo que dure el contexto. Cuando se crea un contexto con una -instrucción @code{\new} puede ir inmediatamente seguido de un bloque -@code{\with @{ .. @}} en el que se establecen los valores de las -propiedades. Por ejemplo, si queremos suprimir la impresión de -becuadros adicionales para toda la duración de un pentagrama, podemos -escribir: - -@example -\new Staff \with @{ extraNatural = ##f @} -@end example - -@noindent -de la siguiente forma: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff - \relative c'' { - gis ges aes ais - } - \new Staff \with { extraNatural = ##f } - \relative c'' { - gis ges aes ais - } ->> -@end lilypond - -Las propiedades ajustadas de esta manera aún pueden cambiarse -dinámicamente utilizando @code{\set} y ser devueltas a sus valores -predeterminados mediante @code{\unset}. - -@cindex fontSize (tamaño de la tipografía) -@cindex fuente, tamaño de la -@cindex tamaño de la fuente - -La propiedad @code{fontSize} se trata de forma distinta. Si se ajusta -dentro de una cláusula @code{\with}, tiene el efecto de reiniciar el -valor predeterminado del tamaño de la fuente tipográfica. Si más -tarde se modifica con @code{\set}, este nuevo valor predeterminado -puede restablecerse con la instrucción @code{\unset fontSize}. - -@subsubheading Setting context properties with @code{\context} - -@cindex contextos, establecer propiedades de, con \context -@funindex \context -@funindex context - -Los valores de propiedad de los contextos se pueden establecer para -@emph{todos} los contextos de un tipo determinado, como por ejemplo -todos los contextos de @code{Staff}, con una única instrucción. El -tipo de contexto se identifica mediante la utilización del nombre de -su tipo, como @code{Staff}, precedido de una barra invertida: -@code{\Staff}. El enunciado que establece el valor de la propiedad es -el mismo que el que está en un bloque @code{\with}, presentado -anteriormente. Se coloca en un bloque @code{\context} dentro de un -bloque @code{\layout}. Cada bloque @code{\context} afecta a todos los -contextos del tipo especificado a lo largo del bloque @code{\score} o -@code{\book} en el que aparece el bloque @code{\layout}. A -continuación presentamos un ejemplo que muestra el formato: - -@lilypond[verbatim,quote] -\score { - \new Staff { - \relative c'' { - cis4 e d ces - } - } - \layout { - \context { - \Staff - extraNatural = ##t - } - } -} -@end lilypond - -@noindent -Las propiedades de contexto establecidas de esta forma se pueden -sobreescribir para ejemplares concretos de contextos mediante -enunciados dentro de un bloque @code{\with}, y mediante instrucciones -@code{\set} intercaladas dentro de enunciados musicales. - - -@seealso -Referencia de la notación: -@ruser{Changing context default settings}. -@c FIXME -@c uncomment when backslash-node-name issue is resolved -pm -@c @ruser{The set command}. - -Referencia de funcionamiento interno: -@rinternals{Contexts}, -@rinternals{Tunable context properties}. - - -@node Adding and removing engravers -@subsection Adding and removing engravers - -@cindex grabadores, adición -@cindex grabadores, eliminación -@cindex adición de grabadores -@cindex eliminación de grabadores - -@funindex \consists -@funindex consists -@funindex \remove -@funindex remove - -Hemos visto que cada uno de los contextos contiene varios grabadores, -cada uno de los cuales a su vez es responsable de la producción de una -fracción particular del resultado impreso, como líneas divisorias, -pentagramas, cabezas, plicas, etc. Si un grabador es eliminado de un -contexto, ya no podrá producir su salida impresa. Es una forma algo -radical de modificar la salida, pero a veces puede ser útil. - -@subsubheading Changing a single context - -Para eliminar un grabador de un contexto único, usamos la instrucción -@code{\with} situada inmediatamente después de la instrucción que crea -el contexto, como en la sección anterior. - -Como ilustración, repitamos un ejemplo extraído de la sección anterior -con las líneas del pentagrama eliminadas. Recuerde que las líneas del -pentagrama están dibujadas por el grabador -@code{Staff_symbol_engraver}. - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \remove Staff_symbol_engraver -} -\relative c' { - c4 - \set fontSize = #-4 % make note heads smaller - d e - \set fontSize = #2.5 % make note heads larger - f g - \unset fontSize % return to default size - a b -} -@end lilypond - -@cindex ámbito, grabador del - -Los grabadores también se pueden añadir a los contextos individuales -La instrucción que lo hace es - -@code{\consists @var{Nombre_del_grabador}}, - -situada dentro de un bloque @code{\with}. Ciertas partituras vocales -tienen una indicación de ámbito o tesitura situada al principio del -pentagrama para indicar el ámbito de notas en dicho pentagrama, véase -@rglos{ambitus}. El ambitus se produce por parte del grabador -@code{Ambitus_engraver}, que normalmente no está incluido en ningún -contexto. Si lo añadimos al contexto @code{Voice}, calcula el rango a -partir de esa única voz: - -@lilypond[quote,verbatim,ragged-right] -\new Staff << - \new Voice \with { - \consists Ambitus_engraver - } - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@noindent -pero si añadimos el grabador de ámbito al contexto de @code{Staff}, -calcula el rango de todas las notas en todas las voces de ese -pentagrama: - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \consists Ambitus_engraver - } - << - \new Voice - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@subsubheading Changing all contexts of the same type - -@funindex \layout -@funindex layout - -Los ejemplos anteriores muestran la manera de eliminar o añadir -grabadores a los contextos individuales. También es posible eliminar -o añadir grabadores a todos los contextos de un tipo específico, -situando las instrucciones en el contexto correspondiente dentro de un -bloque @code{\layout}. Por ejemplo, si queremos mostrar los rangos de -tesitura para todos los pentagramas de una partitura de cuatro pautas, -podemos escribir - -@lilypond[quote,verbatim,ragged-right] -\score { - << - \new Staff << - \relative c'' { c a b g } - >> - \new Staff << - \relative c' { c a b g } - >> - \new Staff << - \clef "G_8" - \relative c' { c a b g } - >> - \new Staff << - \clef "bass" - \relative c { c a b g } - >> - >> - \layout { - \context { - \Staff - \consists Ambitus_engraver - } - } -} -@end lilypond - -@noindent -Los valores predeterminados de las propiedades de los contextos -también se pueden establecer para todos los contextos de un tipo en -particular incluyendo la instrucción @code{\set} dentro de un bloque -@code{\context} de la misma forma. - - -@seealso -Referencia de la notación: -@ruser{Modifying context plug-ins}, -@ruser{Changing context default settings}. - - -@node Extending the templates -@section Extending the templates - -Ha leído el tutorial y ahora sabe escribir música. Pero ¿cómo puede -poner los pentagramas que quiere? Las plantillas están muy bien, pero -¿qué ocurre si quiere algo que no está en una de ellas? Bien, puede -encontrar montañas de plantillas (véase @ref{Templates}) que le pueden -servir como punto de partida. Pero ¿y si quiere algo que no está -contemplado aquí? Continúe leyendo. - - -@menu -* Soprano and cello:: -* Four-part SATB vocal score:: -* Building a score from scratch:: -@end menu - -@node Soprano and cello -@subsection Soprano and cello - -@cindex plantilla, modificar -@cindex modificar plantillas - -Para empezar, tome la plantilla que le parezca más parecida a aquello -que quiere conseguir. Digamos que quiere escribir algo para soprano y -cello. En este caso comenzaríamos con la plantilla @q{Notas y letra} -(para la parte de soprano). - -@example -\version @w{"@version{}"} -melodia = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -texto = \lyricmode @{ - Aaa Bee Cee Dee -@} - -\score @{ - << - \new Voice = "uno" @{ - \autoBeamOff - \melodia - @} - \new Lyrics \lyricsto "uno" \texto - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Ahora queremos añadir una parte de violoncello. Veamos el ejemplo -@q{Sólo notas}: - -@example -\version @w{"@version{}"} -melodia = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -\score @{ - \new Staff \melodia - \layout @{ @} - \midi @{ @} -@} -@end example - -No necesitamos dos instrucciones @code{\version}. Vamos a necesitar -la sección @code{melodia}. No queremos dos secciones @code{\score} -(si tuviésemos dos @code{\score}s, acabaríamos con las dos particellas -por separado. Queremos las dos juntas, como un dúo. Dentro de la -sección @code{\score}, no nos hacen falta dos @code{\layout} ni dos -@code{\midi}. - -Si nos limitásemos a copiar y pegar la sección @code{melodia}, -acabaríamos con dos secciones @code{melodia} separadas, así que vamos -a cambiarles el nombre. Llamaremos @code{musicaSoprano} a la sección -de la soprano y @code{musicaCello} a la sección del violoncello. Al -mismo tiempo cambiaremos el nombre de @code{texto} a -@code{letraSoprano}. Recuerde cambiar el nombre a las dos apariciones -de todos estos nombres -- tanto la definición inicial (la parte -@code{melodia = relative c' @{ }) -- como el uso de ese nombre (en la -sección @code{\score}). - -También aprovecharemos para cambiar el pentagrama de la parte del -cello (los violoncellos se escriben normalmente en clave de Fa). -Asimismo, cambiaremos algunas notas del cello. - -@example -\version @w{"@version{}"} -musicaSoprano = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -letraSoprano = \lyricmode @{ - Aaa Bee Cee Dee -@} - -musicaCello = \relative c @{ - \clef bass - \key c \major - \time 4/4 - - d4 g fis8 e d4 -@} - -\score@{ - << - \new Voice = "uno" @{ - \autoBeamOff - \sopranoMusic - @} - \new Lyrics \lyricsto "uno" \letraSoprano - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Esto tiene una apariencia prometedora, pero la parte del cello no sale -en la partitura (no la hemos puesto en la sección @code{\score}). Si -queremos que la parte del cello aparezca debajo de la de soprano, -tenemos que añadir - -@example -\new Staff \musicaCello -@end example - -@noindent -justo debajo de todo lo de la soprano. También tenemos que poner -@code{<<} y @code{>>} antes y después de la música -- lo que indica a -LilyPond que hay más de una cosa (en este caso, @code{Staff}) -sucediendo al mismo tiempo --. La @code{\score} se parecerá ahora a -esto: - -@c Indentation in this example is deliberately poor -@example -\score@{ - << - << - \new Voice = "uno" @{ - \autoBeamOff - \sopranoMusic - @} - \new Lyrics \lyricsto "uno" \letraSoprano - >> - \new Staff \musicaCello - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -Esto parece un poco enrevesado; los márgenes están descuadrados. Esto -tiene fácil solución. Presentamos aquí la plantilla completa para -soprano y cello. - -@lilypond[quote,verbatim,ragged-right,addversion] -sopranoMusic = \relative c' { - \clef treble - \key c \major - \time 4/4 - a4 b c d -} - -sopranoLyrics = \lyricmode { - Aaa Bee Cee Dee -} - -celloMusic = \relative c { - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -} - -\score { - << - << - \new Voice = "one" { - \autoBeamOff - \sopranoMusic - } - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \new Staff \celloMusic - >> - \layout { } - \midi { } -} -@end lilypond - - -@seealso -Las plantillas de inicio se pueden encontrar en el apéndice -@q{Templates}, véase @ref{Single staff}. - - -@node Four-part SATB vocal score -@subsection Four-part SATB vocal score - -La mayor parte de las partituras vocales escritas para coro mixto a -cuatro voces con acompañamiento orquestal, como el «Elías» de -Mendelssohn o el «Mesías» de Haendel, tienen la música coral y la -letra en cuatro pentagramas para S, A, T y B, respectivamente, con una -reducción de piano del acompañamiento de orquesta, por debajo. He aquí -un ejemplo del «Mesías» de Haendel: - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - -Ninguna de las plantillas proporciona esta disposición con exactitud. -La más parecida es @q{partitura vocal SATB y reducción de piano -automática} (véase @ref{Vocal ensembles}), pero necesitamos cambiar la -disposición y añadir un acompañamiento de piano que no esté derviado -automáticamente de las partes vocales. Las variables que contienen la -música y la letra de las partes vocales es adecuada, pero tendremos -que añadir variables para la reducción de piano. - -El orden en que aparecen los contextos en el ChoirStaff de la -plantilla no se corresponde con el orden de la partitura vocal que -hemos mostrado más arriba. Tenemos que reordenarlas para que haya -cuatro pentagramas con la letra escrita directamente bajo las notas de -cada parte. Todas las voces deben ser @code{\voiceOne}, que es la -predeterminada, para que las instrucciones @code{\voiceXXX} se puedan -eliminar. También tenemos que especificar la clave de tenor (clave de -sol octava baja) en las partes de tenor. Aún no hemos encontrado la -forma en que la letra se especifica en la plantilla, así que tenemos -que utilizar el método que nos resulta familiar. También tenemos que -escribir los nombres de cada pentagrama. - -Al hacerlo así obtenemos el ChoirStaff siguiente: - -@example - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" @{ \global \musicaSoprano @} - >> - \new Lyrics \lyricsto "sopranos" @{ \latraSoprano @} - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" @{ \global \musicaAlto @} - >> - \new Lyrics \lyricsto "altos" @{ \letraAlto @} - \new Staff = "tenores" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenores" @{ \global \musicaTenor @} - >> - \new Lyrics \lyricsto "tenores" @{ \letraTenor @} - \new Staff = "bajos" << - \set Staff.instrumentName = #"Bass" - \new Voice = "bajos" @{ \global \musicaBajo @} - >> - \new Lyrics \lyricsto "bajos" @{ \letraBajo @} - >> % fin del ChoirStaff -@end example - -A continuación debemos trabajar sobre la parte de piano. Es fácil: -tan sólo hay que sacar la parte de piano de la plantilla de @q{Piano -solista}: - -@example -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "superior" \superior - \new Staff = "inferior" \inferior ->> -@end example - -y escribir las definiciones de variable para @code{superior} e -@code{inferior}. - -Los grupos ChoirStaff y PianoStaff se deben combinar utilizando -ángulos dobles, ya queremos apilarlos unos sobre otros: - -@example -<< % combinar los grupos ChoirStaff y PianoStaff uno sobre el otro - \new ChoirStaff << - \new Staff = "sopranos" << - \new Voice = "sopranos" @{ \global \musicaSoprano @} - >> - \new Lyrics \lyricsto "sopranos" @{ \letraSoprano @} - \new Staff = "altos" << - \new Voice = "altos" @{ \global \musicaAlto @} - >> - \new Lyrics \lyricsto "altos" @{ \letraAlto @} - \new Staff = "tenores" << - \clef "G_8" % clave de tenor - \new Voice = "tenores" @{ \global \musicaTenor @} - >> - \new Lyrics \lyricsto "tenores" @{ \letraTenor @} - \new Staff = "bajos" << - \clef "bass" - \new Voice = "bajos" @{ \global \musicaBajo @} - >> - \new Lyrics \lyricsto "bajos" @{ \letraBajo @} - >> % fin del ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> ->> -@end example - -Al combinar todo esto junto y escribir la música de los tres compases -del ejemplo anterior, obtenemos: - -@lilypond[quote,verbatim,ragged-right,addversion] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - - -@node Building a score from scratch -@subsection Building a score from scratch - -@cindex plantilla, escribir su propia -@cindex ejemplo de escritura de una partitura -@cindex escribir una partitura, ejemplo -@cindex partitura, ejemplo de escritura - -Después de adquirir algo de soltura en la escritura del código de -LilyPond, se dará cuenta de que es más fácil construir completamente -una partitura partiendo de cero, que modificar una plantilla. También -puede desarrollar su propio estilo de forma que se adapte al tipo de -música que le apetezca. Veamos a continuación cómo confeccionar una -partitura para un preludio de órgano, como ejemplo. - -Comenzamos con una sección para el encabezamiento. Aquí es donde van -el título, nombre del compositor, etc., después van las definiciones -de las variables, y finalmente el bloque de partitura. Comencemos a -verlas por encima y más tarde completaremos los detalles. - -Utilizaremos los dos primeros compases del preludio de Bach basado en -@emph{Jesu, meine Freude}, que está escrito para órgano con dos -manuales y pedal. Tiene estos dos compases de música al final de la -sección. La parte del manual superior tiene dos voces, y el inferior -y el pedal, una voz cada uno. Así pues, necesitamos cuatro -definiciones para la música y una más para definir el compás y la -tonalidad: - -@example -\version @w{"@version{}"} -\header @{ - title = "Jesu, meine Freude" - composer = "J S Bach" -@} -TimeKey = @{ \time 4/4 \key c \minor @} -MusicaManualUnoVozUno = @{s1@} -MusicaManualUnoVozDos = @{s1@} -MusicaManualDos = @{s1@} -MusicaPedal = @{s1@} - -\score @{ -@} -@end example - -Por el momento hemos escrito tan sólo una nota espaciadora, @code{s1}, -en lugar de la música de verdad. La añadiremos más adelante. - -A continuación veamos qué va en el bloque de partitura. -Sencillamente, reflejaremos la estructura de pentagramas que deseemos. -La música de órgano se escribe por lo general en tres pentagramas, uno -para cada uno de los manuales y otro para el pedal. Los pentagramas -de los manuales se abarcan con una llave, así que los incluiremos en -un grupo PianoStaff. La primera parte de manual tiene dos voces, y la -segunda sólo una. - -@example - \new PianoStaff << - \new Staff = "ManualUno" << - \new Voice @{ \MusicaManualUnoVozUno @} - \new Voice @{ \MusicaManualUnoVozDos @} - >> % fin del contexto de Staff ManualUno - \new Staff = "ManualDos" << - \new Voice @{ \MusicaManualDos @} - >> % fin del contexto de Staff ManualDos - >> % fin del contexto de PianoStaff -@end example - -Después, tenemos que añadir un pentagrama para el órgano de pedal. -Esto va por debajo del PianoStaff, pero debe ser simultáneo con él, -por lo que escribimos dobles ángulos rodeando a los dos. Si esto se -nos olvida, se producirá un error en el archivo log de registro. ¡Es -un error muy común que cometerá antes o después! Intente copiar el -ejemplo final que aparece al final de la sección, borre los dobles -ángulos y procese el archivo para ver qué error produce. - -@example -<< % el grupo PianoStaff y el pentagrama de Pedal son simultáneos - \new PianoStaff << - \new Staff = "ManualUno" << - \new Voice @{ \MusicaManualUnoVozUno @} - \new Voice @{ \MusicaManualUnoVozDos @} - >> % fin del contexto de Staff ManualUno - \new Staff = "ManualDos" << - \new Voice @{ \MusicaManualDos @} - >> % fin del contexto de Staff ManualDos - >> % fin del contexto de PianoStaff - \new Staff = "OrganoPedal" << - \new Voice @{ \MusicaOrganoPedal @} - >> ->> -@end example - -No es necesario utilizar la construcción simultánea @code{<< >>} para -el pentagrama del manual dos y el pentagrama del órgano de pedal, ya -que contienen una única expresión, pero no hace daño, y es una buena -costumbre utilizar siempre dobles ángulos después de @code{\new Staff} -cuando hay varias voces. Lo opuesto es cierto para las voces: -normalmente deben ir seguidas de llaves @code{@{ .. @}} en caso de que -tengamos música codificada como distintas variables que se deben -situar consecutivamente. - -Añadamos esta estructura al bloque de partitura, y ajustemos el -sangrado de los márgenes. También escribimos las claves -correspondientes, nos aseguramos de que las plicas y ligaduras de -unión y de expresión en cada una de las voces del pentagrama superior -apuntan en la dirección adecuada con @code{\voiceOne} y -@code{\voiceTwo} y escribimos el compás y la tonalidad en cada uno de -los pentagramas usando nuestra variable previamente definida -@code{\TimeKey}. - -@example -\score @{ - << % el grupo PianoStaff y el pentagrama de Pedal son simultáneos - \new PianoStaff << - \new Staff = "ManualUno" << - \TimeKey % establecer compás y tonalidad - \clef "treble" - \new Voice @{ \voiceOne \MusicaManualUnoVozUno @} - \new Voice @{ \voiceTwo \MusicaManualUnoVozDos @} - >> % fin del contexto de Staff ManualUno - \new Staff = "ManualDos" << - \TimeKey - \clef "bass" - \new Voice @{ \MusicaManualDos @} - >> % fin del contexto de Staff ManualDos - >> % fin del contexto de PianoStaff - \new Staff = "OrganoPedal" << - \TimeKey - \clef "bass" - \new Voice @{ \MusicaOrganoPedal @} - >> % fin del pentagrama de OrganoPedal - >> -@} % end Score context -@end example - -Con esto se completa la estructura. Toda música para órgano de tres -pentagramas tendrá una estructura similar, aunque el número de voces -puede variar. Todo lo que nos queda es añadir la música, y combinar -todas las partes. - -@lilypond[quote,verbatim,ragged-right,addversion] -\header { - title = "Jesu, meine Freude" - composer = "J S Bach" -} -TimeKey = { \time 4/4 \key c \minor } -ManualOneVoiceOneMusic = \relative g' { - g4 g f ees | d2 c2 | -} -ManualOneVoiceTwoMusic = \relative c' { - ees16 d ees8~ ees16 f ees d c8 d~ d c~ | - c c4 b8 c8. g16 c b c d | -} -ManualTwoMusic = \relative c' { - c16 b c8~ c16 b c g a8 g~ g16 g aes ees | - f ees f d g aes g f ees d e8~ ees16 f ees d | -} -PedalOrganMusic = \relative c { - r8 c16 d ees d ees8~ ees16 a, b g c b c8 | - r16 g ees f g f g8 c,2 | - } - -\score { - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice { \voiceOne \ManualOneVoiceOneMusic } - \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice { \ManualTwoMusic } - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \clef "bass" - \new Voice { \PedalOrganMusic } - >> % end PedalOrgan Staff context - >> -} % end Score context -@end lilypond diff --git a/Documentation/es/user/input.itely b/Documentation/es/user/input.itely deleted file mode 100644 index 782e9ef213..0000000000 --- a/Documentation/es/user/input.itely +++ /dev/null @@ -1,2035 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: c7d6848e128f461a4cec093f7a71a34b2dc314eb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node General input and output -@chapter General input and output - -Esta sección trata de asuntos relacionados con la entrada y salida -generales de LilyPond, más que con la notación específica. - -@menu -* Input structure:: -* Titles and headers:: -* Working with input files:: -* Controlling output:: -* MIDI output:: -@end menu - - -@node Input structure -@section Input structure - -El formato principal de entrada para LilyPond son archivos de texto. -Por convenio, el nombre de estos archivos termina en @code{.ly}. - -@menu -* Structure of a score:: -* Multiple scores in a book:: -* File structure:: -@end menu - - -@node Structure of a score -@subsection Structure of a score - -@funindex \score - -Ub bloque @code{\score} debe contener una expresión musical única -delimitada por un par de llaves: - -@example -\score @{ -... -@} -@end example - -@c outer? -@warning{Sólo puede haber @strong{una} expresión musical dentro del -bloque @code{\score}, y @strong{debe} estar encerrada entre llaves.} - -Esta expresión musical única puede tener cualquier tamaño, y puede -contener otras expresiones musicales hasta cualquier grado de -complejidad. Todos los siguientes ejemplos son expresiones musicales: - -@example -@{ c'4 c' c' c' @} -@end example - -@lilypond[verbatim,quote] -{ - { c'4 c' c' c'} - { d'4 d' d' d'} -} -@end lilypond - -@lilypond[verbatim,quote] -<< - \new Staff { c'4 c' c' c' } - \new Staff { d'4 d' d' d' } ->> -@end lilypond - -@example -@{ - \new GrandStaff << - \new StaffGroup << - \new Staff @{ \flute @} - \new Staff @{ \oboe @} - >> - \new StaffGroup << - \new Staff @{ \violinI @} - \new Staff @{ \violinII @} - >> - >> -@} -@end example - -Los comentarios son una excepción a esta regla general (para ver otras -excepciones, consulte @ref{File structure}). Tanto los comentarios de -una línea como los que están delimitados por @code{%@{ .. %@}} se -pueden escribir en cualquier lugar dentro del archivo de entrada. Se -pueden escribir dentro o fuera del bloque @code{\score}, y dentro o -fuera de la expresión musical única dentro del bloque @code{\score}. - - -@seealso -Manual de aprendizaje: -@rlearning{Working on input files}, -@rlearning{Music expressions explained}, -@rlearning{Score is a (single) compound musical expression}. - - -@node Multiple scores in a book -@subsection Multiple scores in a book - -@funindex \book -@cindex movimientos, varios - -Un documento puede contener varias piezas de música y texto. Son -ejemplos un libro de estudios o una parte orquestal con varios -movimientos. Cada movimiento se introduce con un bloque -@code{\score}: - -@example -\score @{ - @var{..música..} -@} -@end example - -y los textos se introducen con un bloque @code{\markup}: - -@example -\markup @{ - @var{..texto..} -@} -@end example - -@funindex \book - -Todos los movimientos y textos que aparecen en el mismo archivo -@code{.ly} se tipografían normalmente en la forma de un solo archivo -de salida. - -@example -\score @{ - @var{..} -@} -\markup @{ - @var{..} -@} -\score @{ - @var{..} -@} -@end example - -Sin embargo, si queremos varios archivos de salida a partir del mismo -archivo @code{.ly}, podemos escribir varios bloques @code{\book}, -donde cada uno de estos bloques @code{\book} dará como resultado un -archivo de salida distinto. Si no especificamos ningún bloque -@code{\book} en el archivo,, LilyPond trata implícitamente todo el -archivo como un solo bloque @code{\book}, véase @ref{File structure}. -Una excepción importante se da dentro de los documentos de -lilypond-book, en los que tenemos que escribir explícitamente un -bloque @code{\book}, pues en caso contrario sólo aparecerá en la -salida el primer @code{\score} o @code{\markup}. - -El encabezamiento de cada pieza se puede poner dentro del bloque -@code{\score}. Antes de cada movimiento, se imprime el nombre de la -pieza (@code{piece}) extraído del encabezamiento. El título del libro -entero se puede poner dentro del bloque @code{\book}, pero si no está -presente se inserta el encabezamiento @code{\header} que está al -principio del archivo. - -@example -\header @{ - title = "Ocho miniaturas" - composer = "Igor Stravinsky" -@} -\score @{ - @dots{} - \header @{ piece = "Romanze" @} -@} -\markup @{ - ..texto de la segunda estrofa.. -@} -\markup @{ - ..texto de la tercera estrofa.. -@} -\score @{ - @dots{} - \header @{ piece = "Menuetto" @} -@} -@end example - - -@funindex \bookpart - -Se pueden agrupar distintas piezas de música en partes de un libro -utilizando bloques @code{\bookpart}. Las partes de libro se separan -por medio de saltos de página, y pueden dar comienzo con un título, -como el libro propiamente dicho, mediante la especificación del bloque -@code{\header}. - -@example -\bookpart @{ - \header @{ - title = "Título del libro" - subtitle = "Primera parte" - @} - \score @{ @dots{} @} - @dots{} -@} -\bookpart @{ - \header @{ - subtitle = "Segunda parte" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - - -@node File structure -@subsection File structure - -@funindex \paper -@funindex \midi -@funindex \layout -@funindex \header -@funindex \score -@funindex \book -@funindex \bookpart - -Un archivo @code{.ly} puede contener cualquier número de expresions -del nivel superior, donde una expresión del nivel superior es una de -las siguientes posibilidades: - -@itemize @bullet -@item -Una definición de salida, como @code{\paper}, @code{\midi} y -@code{\layout}. Tal definición en el nivel más alto cambia los -ajustes predeterminados para todo el libro. Si se introduce más de -una de estas definiciones del mismo tipo en el nivel más alto, -cualquier definición en una expresión posterior tiene prioridad. - -@item -Una expresión directa de Scheme, como -@code{#(set-default-paper-size "a7" 'landscape)} o -@code{#(ly:set-option 'point-and-click #f)}. - -@item -Un bloque @code{\header}. Esto establece el bloque de encabezamiento -global. Es el bloque que contiene las definiciones de los ajustes -para todo el libro, como el compositor, título, etc. - -@item -Un bloque @code{\score}. Esta partitura se reúne con otras partituras -del nivel superior, y se combina con ellas formando un @code{\book} -(libro) único. Este comportamiento se puede cambiar estableciendo el -valor de la variable @code{toplevel-score-handler} en el nivel -superior. El @emph{handler} predeterminado se define en el archivo de -inicio @file{../scm/@/lily@/.scm}. - -@item -Un bloque @code{\book} combina lógicamente varios movimientos (es -decir, varios bloques @code{\score}) en un solo documento. Si hay -varias partituras @code{\score}, se crea un solo archivo de salida -para cada bloque @code{\book}, en el que se concatenan todos los -movimientos correspondientes. La únca razón para especificar -explícitamente bloques @code{\book} en un archivo de entrada -@code{.ly} es si queremos crear varios archivos de salida a partir de -un único archivo de entrada. Una excepción se da dentro de los -documentos de lilypond-book, en los que tenemos que escribir -explícitamente un bloque @code{\book} si queremos tener más de una -única partitura @code{\score} o marcado @code{\markup} en el mismo -ejemplo. Se puede cmbiar este comportamiento estableciendo el valor -de la variable @code{toplevel-book-handler} en el nivel superior. El -@emph{handler} predeterminado se define en el archivo de inicio -@file{../scm/@/lily@/.scm}. - -@item -Un bloque @code{\bookpart}. Un libro puede dividirse en varias -partes, utilizando bloques @code{\bookpart}, con objeto de facilitar -la inserción de saltos de página o usar distintos ajustes de -@code{\paper} en las distintas partes. - -@item -Una expresión musical compuesta, como -@example -@{ c'4 d' e'2 @} -@end example - -Esto añade la pieza al @code{\score} y la conforma dentro de un libro -único junto a todas las demás partituras @code{\score} y expresiones -musicales del nivel superior. En otras palabras, un archivo que -contiene sólo la expresión musical anterior se traduce a - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - @{ c'4 d' e'2 @} - @} - @} - @} - \layout @{ @} - \header @{ @} -@} -@end example - -Se puede cambiar este comportamiento estableciendo el valor de la -bariable @code{toplevel-music-handler} en el nivel más alto. El -@emph{handler} predeterminado se define en el archivo de inicio -@file{../scm/@/lily@/.scm}. - -@item -Un texto de marcado, por ejemplo una estrofa -@example -\markup @{ - 2. Estrofa dos, línea uno -@} -@end example - -Los textos de marcado se colocan encima, en medio o debajo de las -partituras o expresiones musicales, según donde aparezcan escritos. - -@cindex variables - -@item -Una variable, como -@example -fulano = @{ c4 d e d @} -@end example - -Esto se puede utilizar más tarde en el archivo escribiendo -@code{\fulano}. El nombre de las variables ha de ser exclusivamente -alfabético; sin números, guiones ni barras bajas. - -@end itemize - -El ejemplo siguiente muestra tres cosas que se pueden introducir en el -nivel superior: - -@example -\layout @{ - % No justificar la salida - ragged-right = ##t -@} - -\header @{ - title = "Do-re-mi" -@} - -@{ c'4 d' e2 @} -@end example - -En cualquier punto del archivo se pueden introducir cualquiera de las -instrucciones léxicas siguientes: - -@itemize -@item @code{\version} -@item @code{\include} -@item @code{\sourcefilename} -@item @code{\sourcefileline} -@item -Un comentario de una línea, determinado por un símbolo @code{%} al principio. - -@item -Un comentario de varias líneas, delimitado por @code{%@{ .. %@}}. - -@end itemize - - -@seealso -Manual de aprendizaje: -@rlearning{How LilyPond input files work}. - - -@node Titles and headers -@section Titles and headers - -Casi toda la música impresa tiene un título y el nombre del -compositor; ciertas piezas tienen mucha más información. - -@menu -* Creating titles:: -* Custom titles:: -* Reference to page numbers:: -* Table of contents:: -@end menu - - -@node Creating titles -@subsection Creating titles - -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}). - -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. - -@funindex title -@item title -El título de la música, centrado justo debajo de la -dedicatoria. - -@funindex subtitle -@item subtitle -Subtítulo, centrado debajo del título. - -@funindex subsubtitle -@item subsubtitle -Sub-subtítulo, centrado debajo del subtítulo. - -@funindex poet -@item poet -Nombre del poeta, a la izquierda, debajo del subtítulo. - -@funindex composer -@item composer -Nombre del compositor, a la derecha, debajo del subtítulo. - -@funindex meter -@item meter -Texto de la medida, a la izquierda, debajo del poeta. - -@funindex opus -@item opus -Nombre del Opus, a la derecha, debajo del compositor. - -@funindex arranger -@item arranger -Nombre del arreglista, a la derecha, debajo del Opus. - -@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). - -@funindex piece -@item piece -Nombre de la pieza, a la izquierda, debajo del instrumento. - -@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). - -@funindex copyright -@item copyright -Aviso de Copyright, centrado en la parte inferior de la primera -página. Para insertar el símbolo de copyright symbol, consulte -@ref{Text encoding}. - -@funindex tagline -@item tagline -Cartel de propósito general en el pie de página, centrado al final de la última. - -@end table - -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{Formatting text}). - -@lilypond[quote,verbatim,line-width=11.0\cm] -\paper { - line-width = 9.0\cm - paper-height = 10.0\cm -} - -\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" - } - - \score { - { c'1 } - \header { - piece = "piece1" - opus = "opus1" - } - } - \markup { - and now... - } - \score { - { c'1 } - \header { - piece = "piece2" - opus = "opus2" - } - } -} -@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. - -@example -\header @{ - composer = "Compositor" -@} -\header @{ - piece = "Pieza" -@} -\score @{ - \new Staff @{ c'4 @} - \header @{ - piece = "Otra pieza" % sobreescribe a la anterior - @} -@} -@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}. - -@lilypond[quote,verbatim,line-width=11.0\cm] -\score { - { c'4 } - \header { - title = "title" % not printed - piece = "piece" - opus = "opus" - } -} -@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 - -@example -\paper@{ - print-all-headers = ##t -@} -@end example - -@cindex copyright -@cindex tagline - -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.} - -Las cabeceras se pueden quitar completamente estableciendo su valor a -falso. - -@example -\header @{ - tagline = ##f - composer = ##f -@} -@end example - - -@node Custom titles -@subsection Custom titles - -Una opción más avanzada es cambiar las definiciones de las variables -siguientes dentro del bloque @code{\paper} block. 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 isntrumento -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. - -@verbatim -\paper { - bookTitleMarkup = \markup { - \fill-line { - \fromproperty #'header:title - \fromproperty #'header:composer - } - } -} -@end verbatim - -@node Reference to page numbers -@subsection 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}. - -@lilypond[verbatim,line-width=11.0\cm] -\header { tagline = ##f } -\book { - \label #'firstScore - \score { - { - c'1 - \pageBreak \mark A \label #'markA - c' - } - } - - \markup { The first score begins on page \page-ref #'firstScore "0" "?" } - \markup { Mark A is on page \page-ref #'markA "0" "?" } -} -@end lilypond - -La instrucción de marcado @code{\page-ref} toma tres argumentos: -@enumerate -@item la etiqueta, un símbolo de scheme, p.ej. @code{#'firstScore}; -@item un elemento de marcado que se usará como medidor para estimar las dimensiones del marcado; -@item un elemento de marcado que se utilizará en sustitución del número de página si la etiqueta es desconocida. -@end enumerate - -El motivo de que se necesite un medidor es que en el momento en que se -están interpretando los marcados, los saltos de página aún no se han -producido y por tanto los números de página no se conocen todavía. -Para sortear este inconveniente, la interpretación real del marcado se -retrasa hasta un momento posterior; sin embargo, las dimensiones del -marcado se tienen que conocer de antemano, así que se usa el medidor -para decidir estas dimensiones. Si el libro tiene entre 10 y 99 -páginas, el medidor puede ser "00", es decir, un número de dos -dígitos. - - -@predefined -@funindex \label -@code{\label}, -@funindex \page-ref -@code{\page-ref}. -@endpredefined - - -@node Table of contents -@subsection Table of contents - -Se puede insertar un índice general o tabla de contenidos utilizando -la instrucción @code{\markuplines \table-of-contents}. Los elementos -que deben aparecer en la tabla de contenidos se introducen con la -instrucción @code{\tocItem}, que se puede usar en el nivel más alto de -la jerarquía del código, o dentro de una expresión musical. - -@verbatim -\markuplines \table-of-contents -\pageBreak - -\tocItem \markup "Primera partitura" -\score { - { - c' % ... - \tocItem \markup "Un punto concreto dentro de la primera partitura" - d' % ... - } -} - -\tocItem \markup "Segunda partitura" -\score { - { - e' % ... - } -} -@end verbatim - -Los elementos de marcado que se usan para dar formato al índice -general se encuentran definidos dentro del bloque @code{\paper}. Los -elementos predeterminados son @code{tocTitleMarkup}, para dar formato -al título de la tabla, y @code{tocItemMarkup}, para aplicar formato a -los elementos del índice, que consisten en el título del elemento y el -número de página. Estas variables se pueden cambiar por parte del -usuario: - -@verbatim -\paper { - %% Traducir el título del índice al español: - tocTitleMarkup = \markup \huge \column { - \fill-line { \null "Índice general" \null } - \hspace #1 - } - %% usar una fuente mayor - tocItemMarkup = \markup \large \fill-line { - \fromproperty #'toc:text \fromproperty #'toc:page - } -} -@end verbatim - -Observe la forma en que nos referimos al texto y al número de página -del elemento de índice, dentro de la definición @code{tocItemMarkup}. - -También se pueden definir nuevas instrucciones y elementos de -marcado para crear índices generales más eleborados: -@itemize -@item en primer lugar, defina una variable de marcado nueva dentro del bloque @code{\paper} -@item luego defina una función de música cuyo propósito es añadir un elemento al índice general -utilizando esta variable de marcado del bloque @code{\paper}. -@end itemize - -En el ejemplo siguiente se define un estilo nuevo para introducir los -nombres de los actos de una ópera en el índice general: - -@verbatim -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) -@end verbatim - -@lilypond[line-width=11.0\cm] -\header { tagline = ##f } -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) - -\book { - \markuplines \table-of-contents - \tocAct \markup { Atto Primo } - \tocItem \markup { Coro. Viva il nostro Alcide } - \tocItem \markup { Cesare. Presti omai l'Egizzia terra } - \tocAct \markup { Atto Secondo } - \tocItem \markup { Sinfonia } - \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } - \markup \null -} -@end lilypond - - -@seealso -Archivos de inicio: -@file{ly/@/toc@/-init@/.ly}. - - -@predefined -@funindex \table-of-contents -@code{\table-of-contents}, -@funindex \tocItem -@code{\tocItem}. -@endpredefined - - -@node Working with input files -@section Working with input files - -@menu -* Including LilyPond files:: -* Different editions from one source:: -* Text encoding:: -* Displaying LilyPond notation:: -@end menu - - -@node Including LilyPond files -@subsection Including LilyPond files - -@funindex \include -@cindex including files - -Un proyecto grande se puede dividir en varios archivos. Para -referirse a otro archivo, utilice - -@example -\include "otroarchivo.ly" -@end example - -La línea @code{\include "otroarchivo.ly"} equivale a pegar todo el -contenido de @file{otroarchivo.ly} en el archivo actual en el lugar en -que aparece el @code{\include}. Por ejemplo, en un proyecto grande -podríamos querer archivos distintos para cada parte instrumental y -crear un archivo de @qq{partitura completa} que reúne los archivos -individuales de los instrumentos. Normalmente el archivo incluido -define un cierto número de variables que a partir de entonces quedan -disponibles para poderlas utilizar en el archivo de la partitura -completa. En los archivos incluidos se pueden marcar las secciones -etiquetadas para ayudar a hacerlas utilizables en distintos lugares de -la partitura, véase @ref{Different editions from one source}. - -Los archivos que están en el directorio de trabajo actual se pueden -referenciar simplemente especificando el nombre depués de la -instrucción @code{\include}. Los archivos en otros lugares se pueden -incluir proporcionando una referencia de ruta completa o una ruta -relativa (pero utilice la barra inclinada normal del UNIX, /, no la -barra invertida de DOS/Windows, \, como separador de directorio). Por -ejemplo, si @file{material.ly} está situado un directorio por encima -del directorio de trabajo actual, utilice - -@example -\include "../material.ly" -@end example - -@noindent -o si los archivos de las partes orquestales incluidas están todos -situados en un subdirectorio llamado @file{partes} dentro del -directorio actual, use - -@example -\include "partes/VI.ly" -\include "partes/VII.ly" -... etc. -@end example - -Los archivos de inclusión también pueden contener enunciados -@code{\include} a su vez. De forma predeterminada, estos enunciados -@code{\include} de segundo nivel no se interpretan hasta que se -incorporan al archivo principal, por lo que los nombres de archivo que -especifican deben ser relativos al directorio que contiene el archivo -principal, no al directorio que contiene el archivo incluido. Sin -embargo, este comportamiento se puede modificar pasando la opción -@code{-drelative-includes} en la línea de órdenes (o mediante la -adición de @code{#(ly:set-option 'relative-includes #t)} al principio -del archivo principal de entrada). Con el valor de -@code{relative-includes} establecido, la ruta de cada instrucción -@code{\include} se considera relativa al archivo que contiene dicha -instrucción. Este comportamiento es el recomendado y se convertirá en -el comportamiento predeterminado en una versión futura de lilypond. - -También se pueden incluir archivos de un directorio que está en una -ruta de búsqueda especificada como opción al invocar a LilyPond desde -la línea de órdenes. Los archivos incluidos se especifican usando -solamente su nombre de archivo. Por ejemplo, para compilar mediante -este método un archivo @file{principal.ly} que incluye archivos -situados en un subdirectorio llamado @file{partes}, cambie al -directorio que contiene @file{principal.ly} e introduzca - -@example -lilypond --include=partes principal.ly -@end example - -y en @file{principal.ly} escriba - -@example -\include "VI.ly" -\include "VII.ly" -... etc. -@end example - -Los archivos que se incluyen en muchas partituras se pueden poner en -el directorio de LilyPond @file{../ly} (la localización de este -directorio depende de la instalación: véase -@rlearning{Other sources of information}). Estos archivos se pueden -incluir sencillamente por su nombre en un enunciado @code{\include}. -De esta forma se incluyen los archivos dependientes del idioma como -@file{espanol.ly}. - -LilyPond incluye de forma predeterminada ciertos archivos cuando se -inicia el programa. Estas inclusiones no son visibles para el -usuario, pero los archivos se pueden identificar ejecutando -@code{lilypond --verbose} desde la línea de órdenes. Esto presentará -una lista de rutas y archivos que utiliza LilyPond, junto a muchas -otras indicaciones. De forma alternativa, pueden verse explicaciones -sobre los archivos más importantes de este conjunto en -@rlearning{Other sources of information}. Estos archivos se pueden -editar, pero los cambios realizados sobre ellos se perderán al -instalar una nueva versión de LilyPond. - -Pueden verse ejemplos sencillos sobre el uso de @code{\include} en -@rlearning{Scores and parts}. - - -@seealso -Manual de aprendizaje: -@rlearning{Other sources of information}, -@rlearning{Scores and parts}. - - -@knownissues - -Si un archivo incluido recibe un nombre igual al de uno de los -archivos de instalación de LilyPond, el archivo que tiene prioridad es -el de los archivos de instalación de LilyPond. - - -@node Different editions from one source -@subsection Different editions from one source - -Se encuentran disponibles varios mecanismos para facilitar la -producción de distintas versiones de una partitura a partir de la -misma fuente musical. Las variables son quizá más útiles para -combinar secciones extensas de música y/o anotaciones de diversas -formas, mientras que las etiquetas son más útiles para seleccionar una -de entra varias secciones de música más cortas. Cualquiera que sea el -método utilizado, la separación de la notación de la estructura de la -partitura hará que sea más fácil cambiar la estructura dejando intacta -la notación. - -@menu -* Using variables:: -* Using tags:: -@end menu - -@node Using variables -@unnumberedsubsubsec Using variables - -@cindex variables, uso de las - -Si las secciones de la música se definen dentro de variables, se -pueden reutilizar en distintas partes de la partitura, véase -@rlearning{Organizing pieces with variables}. Por ejemplo, una -partitura vocal @notation{a cappella} con frecuencia incluye una -reducción de piano de las partes para ensayar que ees idéntica a la -música vocal, por lo que ésta sólo se tiene que escribir una vez. Se -puede combinar sobre un solo pentagrama la música de dos variables, -véase @ref{Automatic part combining}. He aquí un ejemplo: - -@lilypond[verbatim,quote] -sopranoMusic = \relative c'' { a4 b c b8( a)} -altoMusic = \relative g' { e4 e e f } -tenorMusic = \relative c' { c4 b e d8( c) } -bassMusic = \relative c' { a4 gis a d, } -allLyrics = \lyricmode {King of glo -- ry } -<< - \new Staff = "Soprano" \sopranoMusic - \new Lyrics \allLyrics - \new Staff = "Alto" \altoMusic - \new Lyrics \allLyrics - \new Staff = "Tenor" { - \clef "treble_8" - \tenorMusic - } - \new Lyrics \allLyrics - \new Staff = "Bass" { - \clef "bass" - \bassMusic - } - \new Lyrics \allLyrics - \new PianoStaff << - \new Staff = "RH" { - \set Staff.printPartCombineTexts = ##f - \partcombine - \sopranoMusic - \altoMusic - } - \new Staff = "LH" { - \set Staff.printPartCombineTexts = ##f - \clef "bass" - \partcombine - \tenorMusic - \bassMusic - } - >> ->> -@end lilypond - -Se pueden producir partituras distintas que presenten sólo las partes -vocales o sólo la parte de piano, cambiando solamente los enunciados -estructurales, sin modificar la notación musical. - -Para partituras extensas, las definiciones de variable se pueden poner -en archivos separados que se incluyen más tarde, véase @ref{Including -LilyPond files}. - - -@node Using tags -@unnumberedsubsubsec Using tags - -@funindex \tag -@funindex \keepWithTag -@funindex \removeWithTag -@cindex etiqueta -@cindex manetener música etiquetada -@cindex quitar música etiquetada - -La instrucción @code{\tag #'@var{parteA}} marca una expresión musical -con el nombre @var{parteA}. Las expresiones etoiquetadas de esta -manera se pueden seleccionar o filtrar más tarde por su nombre, usando -bien @code{\keepWithTag #'@var{nombre}} o bien @code{\removeWithTag -#'@var{nombre}}. El resultado de la aplicación de estos filtros a la -música etiquetada es como sigue: - -@multitable @columnfractions .5 .5 -@headitem Filtro - @tab Resultado -@item -Música etiquetada precedida de @code{\keepWithTag #'@var{nombre}} -@tab -Se incluye la música no etiquetada y la música etiquetada con -@var{nombre}; se excluye la música etiquetada con cualquier otro -nombre de etiqueta. -@item -Música etiquetada precedida de @code{\removeWithTag #'@var{nombre}} -@tab -Se incluye la música no etiquetada y la música etiquetada con -cualquier nombre de etiqueta distinto a @var{nombre}; se excluye la -música etiquetada con @var{nombre}. -@item -Música etiquetada no precedida de @code{\keepWithTag} ni de -@code{\removeWithTag} -@tab Se incluye toda la música etiquetada y no etiquetada. -@end multitable - -Los argumentos de las instrucciones @code{\tag}, @code{\keepWithTag} y -@code{\removeWithTag} deben ser un símbolo (como @code{#'partitura} o -@code{#'parte}), seguido de una expresión musical. - -En el ejemplo siguiente vemos dos versiones de una pieza musical, una -que muestra trinos con la notación usual y otra con los trinos -expandidos explícitamente: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \keepWithTag #'trills \music -} -\score { - \keepWithTag #'expand \music -} -@end lilypond - -@noindent -De forma alternativa, a veces es más fácil excluir secciones de música: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \removeWithTag #'expand - \music -} -\score { - \removeWithTag #'trills - \music -} -@end lilypond - -El flitrado con etiquetas se puede aplicar a articulaciones, textos, -etc. anteponiendo - -@example --\tag #'@var{mi-etiqueta} -@end example - -a una articulación. Por ejemplo, esto define una nota con una -indicación opcional de digitación y una nota con una anotación -condicional: - -@example -c1-\tag #'finger ^4 -c1-\tag #'warn ^"¡Ojo!" -@end example - -Se pueden poner varias etiquetas sobre expresiones con varias entradas -de @code{\tag}: - -@lilypond[quote,verbatim] -music = \relative c'' { - \tag #'a \tag #'both { a a a a } - \tag #'b \tag #'both { b b b b } -} -<< -\keepWithTag #'a \music -\keepWithTag #'b \music -\keepWithTag #'both \music ->> -@end lilypond - -Se pueden aplicar varios filtros @code{\removeWithTag} a una sola -expresión musical para quitar varias secciones etiquetadas con nombres -distintos: - -@lilypond[verbatim,quote] -music = \relative c'' { -\tag #'A { a a a a } -\tag #'B { b b b b } -\tag #'C { c c c c } -\tag #'D { d d d d } -} -{ -\removeWithTag #'B -\removeWithTag #'C -\music -} -@end lilypond - -Dos o más filtros @code{\keepWithTag} aplicados a una sola expresión -musical producen la eliminación de @emph{todas} las secciones -etiquetadas, porque el primer filtro quita todas las secciones -etiquetadas excepto la que se nombra, y el segundo filtro elimina -incluso esa sección etiquetada. - - -@seealso -Manual de aprendizaje: -@rlearning{Organizing pieces with variables}. - -Referencia de la notación: -@ref{Automatic part combining}, -@ref{Including LilyPond files}. - - -@ignore -@c This warning is more general than this placement implies. -@c Rests are not merged whether or not they come from tagged sections. -@c Should be deleted? -td - - -@knownissues - -Multiple rests are not merged if you create a score with more -than one tagged section at the same place. - -@end ignore - -@node Text encoding -@subsection Text encoding - -LilyPond usa el conjunto de caracteres definido por el consorcio -Unicode y la norma ISO/IEC 10646. Define un nombre único y un código -para los conjuntos de caracteres que se utilizan en prácticamente -todos los idiomas modernos y también en muchos otros. Unicode se -puede implementar utilizando varios esquemas de codificación -distintos. LilyPond usa la codificación UTF-8 (UTF son las siglas de -@emph{Unicode Transformation Format}, o formato de transformación de -Unicode) que representa todos los caracteres comunes de Latin en un -solo byte, y representa otros caracteres usando un formato de longitud -variable de hasta cuatro bytes. - -El aspecto visual real de los caracteres viene determinado por los -glifos que se definen en las fuentes tipográficas concretas que se -tengan disponibles: una fuente tipográfica define la asignación de un -subconjunto de los códigos de Unicode a glifos. LilyPond usa la -biblioteca Pango para representar y disponer tipográficamente textos -multilingües. - -Lilypond no realiza ninguna conversión en la codificación de la -entrada. Esto significa que cualquier text, ya sea el título, la -letra de la canción o una instrucción musical que contenga caracteres -distintos a los del conjunto ASCII, se deben codificar en UTF-8. La -forma más fácil de escribir dicho texto es utilizar un editor -preparado para Unicode y guardar el archivo con la codificación UTF-8. -Casi todos los editores modernos populares contemplan el UTF-8, por -ejemplo lo hacen vim, Emacs, jEdit, y GEdit. Todos los sistemas MS -Windows posteriores a NT usan Unicode como codificación de caracteres -nativa, de manera que incluso el accesorio Bloc de Notas (Notepad) -puede editar y guardar un archivo en el formato UTF-8. Una -alternativa más funcional para Windows es BabelPad. - -Si un archivo de entrada que contiene un carácter que no es ASCII, no -se guarda en el formato UTF-8, se genera el mensaje de error - -@example -FT_Get_Glyph_Name () error: argumento inválido -@end example - -He aquí un ejemplo que muestra texto cirílico, hebreo y portugués: - -@lilypond[quote] -%c No verbatim here as the code does not display correctly in PDF -% Cyrillic -bulgarian = \lyricmode { - Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. -} - -% Hebrew -hebrew = \lyricmode { - זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. -} - -% Portuguese -portuguese = \lyricmode { - à vo -- cê uma can -- ção legal -} - -\relative { - c2 d e f g f e -} -\addlyrics { \bulgarian } -\addlyrics { \hebrew } -\addlyrics { \portuguese } -@end lilypond - -Para introducir un caracter aislado para el que se conoce la secuencia -de escape de Unicode pero no está disponible en el editor que se está -usando, use @code{\char ##xhhhh} dentro de un bloque @code{\markup}, -donde @code{hhhh} es el código hexadecimal del carácter en cuestión. -Por ejemplo, @code{\char ##x03BE} inserta el carácter Unicode U+03BE, -que tiene el nombre Unicode @qq{Letra griega Xi pequeña}. Se puede -sustituir cualquier código hexadecimal Unicode, y si todos los -caracteres especiales se escriben en este formato no es necesario -guardar el archivo de entrada en formato UTF-8. Por supuesto, debe -estar instalada y estar disponible para Lilypond una fuente -tipográfica que contenga codificados todos estos caracteres. - -El ejemplo siguiente muestra caracteres codificados en UTF-8 que se -usan en cuatro lugares: en una llamada de ensayo, como texto de -articulación, en la letra y como texto independiente bajo la -partitura: - -@lilypond[quote,verbatim] -\score { - \relative c'' { - c1 \mark \markup { \char ##x03EE } - c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } - } - \addlyrics { O \markup { \concat{ Ph \char ##x0153 be! } } } -} -\markup { "Copyright 2008--2009" \char ##x00A9 } -@end lilypond - -Para escribir el símbolo de copyright en la nota de créditos, utilice: - -@example -\header @{ - copyright = \markup @{ \char ##x00A9 "2008" @} -@} -@end example - - -@node Displaying LilyPond notation -@subsection Displaying LilyPond notation - -@funindex \displayLilyMusic -La impresión textual de una expresión musical en notación de LilyPond -puede hacerse usando la función musical @code{\displayLilyMusic}. Por -ejemplo, - -@example -@{ - \displayLilyMusic \transpose c a, @{ c e g a bes @} -@} -@end example - -imprimirá - -@example -@{ a, cis e fis g @} -@end example - -De forma predeterminada, LilyPond imprime estos mensajes en la consola -junto al resto de los mensajes. Para discernir entre estos mensajes y -guardar el resultado de @code{\display@{MATERIAL@}}, redireccione la -salida hacia un archivo. - -@c TODO What happens under Windows? - -@example -lilypond archivo.ly >resultado.txt -@end example - - - -@node Controlling output -@section Controlling output - -@menu -* Extracting fragments of music:: -* Skipping corrected music:: -@end menu - -@node Extracting fragments of music -@subsection Extracting fragments of music - -Es posible citar pequeños fragmentos de una partitura grande -directamente a partir de la salida. Puede compararse con la -separación de una pieza de una partitura, recortándola con tijeras. - -Esto se hace definiendo los compases que se deben recortar. Por -ejemplo, la inclusión de la siguiente definición - -@verbatim -\layout { - clip-regions - = #(list - (cons - (make-rhythmic-location 5 1 2) - (make-rhythmic-location 7 3 4))) -} -@end verbatim - -@noindent -extrae un fragmento empezando por la mitad del quinto compás y -finalizando en el séptimo compás. El significado de @code{5 1 2} es: -después de una blanca (1/2) en el compás 5, y el de @code{7 3 4} -después de tres negras del compás 7. - -Se pueden definir más zonas de recorte añadiendo más parejas de -definición de tiempo rhythmic-location a la lista. - -Para poder utilizar esta funcionalidad, LilyPond se debe invocar con -la opción @code{-dclip-systems}. Los recortes aparecen en la salida -como archivos EPS, y se convierten en PDF y PNG si estos formatos -también están activados. - -Para ver más información sobre los formatos de salida, consulte -@rprogram{Invoking lilypond}. - - -@node Skipping corrected music -@subsection Skipping corrected music - -@funindex skipTypesetting -@funindex showFirstLength -@funindex showLastLength - -Al escribir o copiar música, normalmente sólo es interesante de ver y -corregir la música cercana al final (donde estams añadiendo las -notas). Para acelerar este proceso de corrección, es posible saltar -la composición tipográfica de todos excepto unos pocos de los últimos -compases. Esto se consigue poniendo - -@verbatim -showLastLength = R1*5 -\score { ... } -@end verbatim - -@noindent -en nuestro archivo fuente. Esto hará que se tracen sólo los últimos -cinco compases (suponniendo un compás de 4/4) de cada una de las -partituras @code{\score} del archivo de entrada. Para piezas largas, -el tipografiado de únicamente una parte pequeña es con frecuencia un -orden de magnitud más rápido que el de la obra completa. Si estamos -trabajando sobre el principio de una partitura que ya hemos -tipografiado (p.ej., para añadir una parte instrumental nueva), -también puede ser útil la propiedad @code{showFirstLength}. - -Este mecanismo de pasar por alto partes de un partitura se puede -controlar con un grano más fino mediante la propiedad -@code{Score.skipTypesetting}. Cuando su valor está establecido, no se -lleva a cabo ningún tipografiado en absoluto. - -Esta propiedad se usa también para controlar la salida al archivo -MIDI. Observe que pasa por alto todos los eventos, incluidos el tempo -y los cambios de instrumento. Está usted advertido. - -@lilypond[quote,fragment,ragged-right,verbatim] -\relative c'' { - c8 d - \set Score.skipTypesetting = ##t - e e e e e e e e - \set Score.skipTypesetting = ##f - c d b bes a g c2 } -@end lilypond - -En música polifónica, @code{Score.skipTypesetting} afecta a todas las -voces y pentagramas, ahorrando más tiempo incluso. - - -@node MIDI output -@section MIDI output - -@cindex sonido -@cindex MIDI - -El MIDI (Musical Instrument Digital Interface, Interfase Digital para -Instrumentos Musicales) es un estándar para interconectar y controlar -instrumentos musicales electrónicos. Un archivo o secuencia MIDI es -una serie de notas dentro de un conjunto de pistas. No es un archivoo -de sonidos reales; se necesita un programa reproductor especial para -traducir la serie de notas en sonidos de verdad. - -Cualquier música se puede convertir a archivos MIDI, de manera que -podamos escuchar lo que hayamos introducido. Esto es muy conveniente -para comprobar la corrección de la música; las octavas equivocadas o -las alteraciones erróneas se ponen de relieve muy claramente al -escuchar la salida MIDI. - -@c TODO Check this -La salida MIDI reserva un canal por cada pentagrama, y otro para los -ajustes globales. Por ello, el archivo MIDI no debe tener más de 15 -pautas (o 14 si no se usa la percusión). Otros pentagramas permanecen -en silencio. - -@menu -* Creating MIDI files:: -* MIDI block:: -* What goes into the MIDI output?:: -* Repeats in MIDI:: -* Controlling MIDI dynamics:: -* Percussion in MIDI:: -@end menu - -@node Creating MIDI files -@subsection Creating MIDI files - -Para crear un MIDI a partir de una pieza de música, escriba un bloque -@code{\midi} en la partitura, por ejemplo: - -@example -\score @{ - @var{...música...} - \midi @{ @} -@} -@end example - -Si hay un bloque @code{\midi} dentro de un @code{\score} que no tenga -ningún bloque @code{\layout}, solamente se producirá MIDI. Si se -necesita una notación impresa, debe haber también un bloque -@code{\layout}: - -@example -\score @{ - @var{...música...} - \midi @{ @} - \layout @{ @} -@} -@end example - -Se traducen correctamente a la salida MIDI la altura y duración de las -notas, las ligaduras de unión, matices y cambios de tempo. Las -indicaciones dinámicas, crescendi y decrescendi se traducen a niveles -de volumen MIDI. Las marcas dinámicas se traducen a una fracción fija -del rango de volumen MIDI disponible. Los crescendi y decrescendi -hacen que el volumen varía linealmente entre sus dos extremos. El -efecto de las indicaciones dinámicas sobre la salida MIDI se puede -eliminar por completo, véase @ref{MIDI block}. - -El tempo inicial y los cambios de tempo posteriores se pueden -especificar utilizando la instrucción @code{\tempo} dentro de la -propia notación musical. Se reflejan en cambios de tempo en la salida -MIDI. Esta instrucción normalmente hace que se imprima la indicación -metronómica, pero esto se puede eliminar, véase @ref{Metronome marks}. -Más abajo se describe una forma alternativa de especificar el tempo -MIDI inicial o global, véase @ref{MIDI block}. - -@unnumberedsubsubsec Instrument names - -@cindex instrumento, nombres de -@funindex Staff.midiInstrument - -El nombre del instrumento MIDI se establece mediante la propiedad -@code{Staff.midiInstrument}. El nombre del instrumento se debe elegir -de entre los que están en la lista que aparece en @ref{MIDI -instruments}. - -@example -\new Staff @{ - \set Staff.midiInstrument = #"glockenspiel" - @var{...notes...} -@} -@end example - -@example -\new Staff \with @{midiInstrument = #"cello"@} @{ - @var{...notes...} -@} -@end example - -Si el instrumento elegido no coincide exactamente con uno de los -instrumentos de la lista de instrumentos MIDI, se usará el instrumento -Piano de Cola (@code{"acoustic grand"}). - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-midi-output-to-one-channel-per-voice.ly} - -@knownissues - -@c In 2.11 the following no longer seems to be a problem -td -@ignore -Unterminated (de)crescendos will not render properly in the midi file, -resulting in silent passages of music. The workaround is to explicitly -terminate the (de)crescendo. For example, - -@example -@{ a\< b c d\f @} -@end example - -@noindent -will not work properly but - -@example -@{ a\< b c d\!\f @} -@end example - -@noindent -will. -@end ignore - -Los cambios del volumen MIDI sólo tienen lugar al principio de la -nota, por lo que los crescendi y decrescendi no pueden afectar al -volumen de una sola nota. - -No todos los repoductores de MIDI manejar adecuadamente los cambios de -tempo de la salida MIDI. Entre los reproductores que se sabe que -funcionan se encuentran el Reproductor de Medios de MS Windows y -@uref{http://@/timidity@/.sourceforge@/.net/,timidity}. - - -@node MIDI block -@subsection MIDI block - -@cindex bloque MIDI - -Si se requiere una salida MIDI, debe aparecer un bloque @code{\midi} -dentro de un bloque de partitura. Es análogo al bloque layout de -diseño de página, pero algo maś simple. Con frecuencia, el bloque -@code{\midi} se deja vacío, pero puede contener reorganizaciones de -contextos, definiciones de contexto nuevas o código para fijar valores -de propiedades. Por ejemplo, en el ejemplo siguiente se establece el -tempo inicial exportado alarchivo MIDI sin hacer que se imprima una -indicación de tempo: - -@example -\score @{ - @var{...música...} - \midi @{ - \context @{ - \Score - tempoWholesPerMinute = #(ly:make-moment 72 4) - @} - @} -@} -@end example - -En este ejemplo, el tempo se establece a 72 pulsos de negra por -minuto. Esta clase de especificación de tempo no puede tomar como -argumento una figura con puntillo. Si necesitamos una figura con -puntillo, dividimos la nota con puntillo en figuras más pequeñas. Por -ejemplo, un tempo de 90 negras con puntillo por minuto se puede -especificar como 270 corcheas por minuto: - -@example -tempoWholesPerMinute = #(ly:make-moment 270 8) -@end example - -@cindex MIDI, definiciones de contexto - -Las definiciones de contexto siguen con precisión la misma sintaxis -que la de un bloque @code{\layout}. Los módulos de traducción para el -sonido reciben el nombre de ejecutantes. Los contextos para la salida -MIDI se definen en @file{../ly/@/performer@/-init@/.ly}, véase -@rlearning{Other sources of information}. Por ejemplo, para eliminar -el efecto de los matices de la salida MIDI, inserte las líneas -siguientes en el bloque @code{\midi@{ @}}. - -@example -\midi @{ - ... - \context @{ - \Voice - \remove "Dynamic_performer" - @} -@} -@end example - -La salida MIDI se crea sólo cuando se incluye un bloque @code{\midi} -dentro de un bloque de partitura definido con una instrucción -@code{\score}. Si se sitúa dentro de un contexto de partitura -instanciado explícitamente (es decir, dentro de un bloque @code{\new -Score}) el archivo no funciona. Para resolverlo, encierre las -instrucciones @code{\new Score} y @code{\midi} dentro de un bloque -@code{\score}. - -@example -\score @{ - \new Score @{ @dots{}notas@dots{} @} - \midi @{ @} -@} -@end example - -@node What goes into the MIDI output? -@subsection What goes into the MIDI output? - -@unnumberedsubsubsec Supported in MIDI - -@cindex alturas en MIDI -@cindex MIDI, alturas -@cindex cuartos de tono en MIDI -@cindex MIDI, cuartos de tono -@cindex microtonos en MIDI -@cindex MIDI, microtonos -@cindex acordes, nombres de, en MIDI -@cindex MIDI, nombres de -@cindex duraciones en MIDI -@cindex MIDI, duraciones -@c TODO etc - -Los siguientes elementos de notación se reflejan en la salida MIDI: - -@itemize -@item Alturas -@item Microtonos (véase @ref{Accidentals}. La reproducción necesita un reproductor que contemple la curvatura de tono o @emph{pitch bend}.) -@item Acordes escritos como nombres de acorde -@item Ritmos escritos como duraciones de las notas, incluidos los grupos de valoración especial -@item Trémolos escritos sin @q{@code{:}[@var{número}]} -@item Ligaduras de unión -@item Matices o indicaciones de dinámica -@item Crescendi y decrescendi sobre varias notas -@item Cambios de tempo insertados con una marca metronómica -@item Letra de las canciones -@end itemize - -@unnumberedsubsubsec Unsupported in MIDI - -@c TODO index as above - -Los siguientes elementos de notación no tienen ningún efecto sobre la -salida MIDI: - -@itemize -@item Duraciones escritas como anotaciones, p.ej. el swing -@item Cambios de tempo escritos como anotacioens sin marca de tempo -@item Staccato y otras articulaciones y ornamentos -@item Ligaduras de expresión y de fraseo -@item Crescendi y decrescendi sobre una nota única -@item Trémolos introducidos con @q{@code{:}[@var{número}]} -@item Bajo cifrado -@item Acordes microtonales -@end itemize - - -@node Repeats in MIDI -@subsection Repeats in MIDI - -@cindex repeticiones, expandir -@funindex \unfoldRepeats - -Con un poco de trucaje, se puede hacer que cualquier tipo de -repetición esté presente en la salida MIDI. Esto se consigue mediante -la aplicación de la función musical @code{\unfoldRepeats}. Esta -función cambia todas las repeticiones a repeticiones desplegadas. - -@lilypond[quote,verbatim] -\unfoldRepeats { - \repeat tremolo 8 {c'32 e' } - \repeat percent 2 { c''8 d'' } - \repeat volta 2 {c'4 d' e' f'} - \alternative { - { g' a' a' g' } - {f' e' d' c' } - } -} -\bar "|." -@end lilypond - -Al crear un archivo de partitura que use @code{\unfoldRepeats} para el -MIDI, es necesario hacer dos bloques @code{\score}: uno para el MIDI -(con repeticiones desplegadas) y otro para la notación impresa (con -repeticiones de volta --primera y segunda vez--, tremolo --trémolo--, -y percent --repetición de compases--). Por ejemplo, - -@example -\score @{ - @var{..música..} - \layout @{ .. @} -@} -\score @{ - \unfoldRepeats @var{..música..} - \midi @{ .. @} -@} -@end example - - -@node Controlling MIDI dynamics -@subsection Controlling MIDI dynamics - -La dinámica en el MIDI está implementada por medio del intérprete -Dynamic_performer que reside de forma predeterminada dentro del -contexto Voice. Es posible controlar el volumen MIDI general, el -volumen relativo de los matices dinámicos y el volumen relativo de los -distintos instrumentos. - -@unnumberedsubsubsec Dynamic marks - -Los matices o indicaciones de dinámica se traducen a una fracción fija -del rango de volumen MIDI disponible. Las fracciones predeterminadas -se extienden desde 0.25 para @notation{ppppp} hasta 0.95 para -@notation{fffff}. El conjunto de indicaciones dinámicas y las -fracciones asociadas pueden verse en @file{../scm/midi.scm}, véase -@rlearning{Other sources of information}. Este conjunto de fracciones -se puede cmbiar o extender proporcionando una función que toma como -argumento una indicación dinámica y devuelve la fracción requerida, y -estableciendo @code{Score.dynamicAbsoluteVolumeFunction} a esta -función. - -Por ejemplo, si se requiere una indicación dinámica -@notation{rinforzando}, @code{\rfz}, ésta no tiene ningún efecto -predeterminado sobre el voumen MIDI, pues no está incluida en el -conjunto predeterminado. De igual manera, si se define una indicación -dinámica nueva con @code{make-dynamic-script}, ésta tampoco estará -incluida en el conjunto predeterminado. El ejemplo siguiente muestra -cómo hay que añadir el volumen MIDI para estas indicaciones dinámicas. -La función Scheme establece la fracción a 0.9 si se encuentra una -indicación dinámica rfz, y en caso contrario llama a la función -predeterminada. - -@lilypond[verbatim,quote] -#(define (myDynamics dynamic) - (if (equal? dynamic "rfz") - 0.9 - (default-dynamic-absolute-volume dynamic))) - -\score { - \new Staff { - \set Staff.midiInstrument = #"cello" - \set Score.dynamicAbsoluteVolumeFunction = #myDynamics - \new Voice { - \relative c'' { - a\pp b c-\rfz - } - } - } - \layout {} - \midi {} -} -@end lilypond - -Como alternativa, si se necesitara redefinir la tabla completa de -fracciones, sería mejor usar el procedimiento -@notation{default-dynamic-absolute-volume} que aparece en -@file{../scm/midi.scm} y la tabla asociada como modelo. El último -ejemplo de esta sección muestra cómo se puede hacer esto. - -@unnumberedsubsubsec Overall MIDI volume - -El volumen general máximo y mínimo de las indicaciones dinámicas de -MIDI se controla estableciendo valores para las propiedades -@code{midiMinimumVolume} y @code{midiMaximumVolume} en el nivel de -@code{Score}. Estas propiedades tienen efecto solamente sobre las -indicaciones dinámicas, por ello si queremos que tengan validez desde -el comienzo de la partitura, se debe colocar allí una indicación de -dinámica. La fracción que corresponde a cada indicación dinámica se -modifica con esta fórmula: - -@example -midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fracción -@end example - -En el ejemplo siguiente, el rango de intensidad dinámica del volumen -general MIDI está limitado al intervalo desde 0.2 hasta 0.5. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - midiMinimumVolume = #0.2 - midiMaximumVolume = #0.5 - } - } -} -@end lilypond - -@unnumberedsubsubsec Equalizing different instruments (i) - -Si las propiedades de volumen MIDI máximo y mínimo están establecidas -en el contexto @code{Staff} se pueden controlar los volúmenes -relativos de los instrumentos MIDI. Esto proporciona un ecualizador -de instrumentos básico que puede realzar significativamente la calidad -de la salida MIDI. - -En este ejemplo se reduce el volumen del clarinete con relación al de -la flauta. Debe haber una indicación dinámica en la primera nota de -cada instrumento para que esto funcione correctamente. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \set Staff.midiMinimumVolume = #0.7 - \set Staff.midiMaximumVolume = #0.9 - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \set Staff.midiMinimumVolume = #0.3 - \set Staff.midiMaximumVolume = #0.6 - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - -@unnumberedsubsubsec Equalizing different instruments (ii) - -Si las propiedades de volumen MIDI máximo y mínimo no están -establecidas, de forma predeterminada LilyPond aplica un pequeño grado -de ecualización a algunos instrumentos. Los instrumentos y la -ecualización que se aplica se muestra en la tabla -@notation{instrument-equalizer-alist} en @file{../scm/midi.scm}. - -El ecualizador básico predeterminado se puede sustituir estableciendo -@code{instrumentEqualizer} en el contexto @code{Score} a un -procedimiento Scheme nuevo que acepte el nombre de un instrumento MIDI -como único argumento y devuelva un par de fracciones que dan los -volúmenes máximo y mínimo que se aplican a dicho instrumento. Esta -sustitución se hace de la misma forma que mostramos para reestablecer -la fracción de volumen absoluto @code{dynamicAbsoluteVolumeFunction} -al comienzo de esta sección. El ecualizador predeterminado, -@notation{default-instrument-equalizer}, en @file{../scm/midi.scm}, -muestra cómo se puede escribir tal procedimiento. - -El ejemplo siguiente establece los volúmenes relativos de la flauta y -del clarinete a los mismos valores que el ejemplo anterior. - -@lilypond[verbatim,quote] -#(define my-instrument-equalizer-alist '()) - -#(set! my-instrument-equalizer-alist - (append - '( - ("flute" . (0.7 . 0.9)) - ("clarinet" . (0.3 . 0.6))) - my-instrument-equalizer-alist)) - -#(define (my-instrument-equalizer s) - (let ((entry (assoc s my-instrument-equalizer-alist))) - (if entry - (cdr entry)))) - -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Score.instrumentEqualizer = #my-instrument-equalizer - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - -@ignore -@c Delete when satisfied this is adequately covered elsewhere -td - -@n ode Microtones in MIDI -@s ubsection Microtones in MIDI - -@cindex microtones in MIDI - -Microtones consisting of half sharps and half flats are exported -to the MIDI file and render correctly in MIDI players which support -pitch bending. See @ref{Note names in other languages}. Here is -an example showing all the half sharps and half flats. It can be -copied out and compiled to test microtones in your MIDI player. - -@lilypond[verbatim,quote] -\score { - \relative c' { - c cih cis cisih - d dih ees eeh - e eih f fih - fis fisih g gih - gis gisih a aih - bes beh b bih - } - \layout {} - \midi {} -} -@end lilypond -@end ignore - - -@node Percussion in MIDI -@subsection Percussion in MIDI - -La notación de los instrumentos de percusión se realiza normalmente en -un contexto @code{DrumStaff} y cuando se hace de esta forma se les da -salida correctamente por el canal MIDI@tie{}10, pero ciertos -instrumentos de percusión de altura determinada, como el xilófono, -marimba, vibráfono, timbales, etc., se tratan como instrumentos -@qq{normales} y la música para estos instrumentos se debe introducir -en contestos de @code{Staff} normales, no en un contexto -@code{DrumStaff}, para obtener la salida MIDI correcta. - -Ciertos sonidos de altura indeterminada que están incluidos en el -estándar General MIDI, como el tom melódico, el tambor taiko, los -tambores sintéticos, etc., no se pueden acceder a través del canal -MIDI@tie{}10, por lo que la notación para dichos instrumentos se debe -introducir también en un contexto normal de @code{Staff}, utilizando -las alturas normales adecuadas. - -Muchos instrumentos de percusión no están incluidos dentro del -estándar General MIDI standard, p.ej. las castañuelas. El método más -fácil (aunque no satisfactorio) de producir una salida MIDI al -escribir para estos instrumentos es sustituirlos por el sonido más -parecido del conjunto estándar. - -@c TODO Expand with examples, and any other issues - -@knownissues - -Debido a que el estándar General MIDI no contiene golpes de aro -(@emph{rim shots}), para este propósito se utiliza en su lugar el -golpe lateral de baqueta (@emph{sidestick}). diff --git a/Documentation/es/user/install.itely b/Documentation/es/user/install.itely deleted file mode 100644 index a139f106c3..0000000000 --- a/Documentation/es/user/install.itely +++ /dev/null @@ -1,90 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 3e63320d65c86c823949f70ab9791eab96c98352 - - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Francisco Vila - -@ifclear INSTALL -@node Install -@chapter Install -@end ifclear - -Existen dos conjuntos de ediciones o lanzamientos de LilyPond: las -ediciones estables y las ediciones inestables de desarrollo. Las -versiones estables tienen como número @q{menor} de versión un número -par (es decir: 2.8, 2.10, 2.12, etc). Las versiones de desarrollo -tienen un número @q{menor} de versión impar (esto es: 2.7, 2.9, 2.11, -etc). - -La compilación de LilyPond es un proceso muy enrevesado, por tanto -recomendamos @strong{fervientemente} el uso de los archivos binarios -precompilados. - -@menu -* Precompiled binaries:: -* Compiling from source:: -@end menu - - -@node Precompiled binaries -@section Precompiled binaries - -@unnumberedsubsec Downloading - -Revise el enlace @uref{http://lilypond.org/web/install/} para ver -información actualizada sobre los paquetes binarios para su -plataforma. Si su sistema operativo no está contemplado en dicha -página general, consulte la lista completa que está en -@uref{http://download.linuxaudio.org/lilypond/binaries/} - -Por el momento estamos creando archivos binarios para - -@example -darwin-ppc - MacOS X powerpc -darwin-x86 - MacOS X intel -freebsd-64 - FreeBSD 6.x, x86_64 -freebsd-x86 - FreeBSD 4.x, x86 -linux-64 - Cualquier distribución de GNU/Linux, x86_64 -linux-ppc - Cualquier distribución de GNU/Linux, powerpc -linux-x86 - Cualquier distribución de GNU/Linux, x86 -mingw - Windows x86 -@end example - -@knownissues - -Si tiene MacOS 10.3 o 10.4 y quiere usar guiones de Python como -@command{convert-ly} y @command{lilypond-book}, consulte @ref{Setup -for MacOS X,,,lilypond-program,Application Usage}. - -@node Compiling from source -@section Compiling from source - -Es posible compilar LilyPond directamente del código fuente. Ello -requiere poder leer en inglés, motivo por el que esta sección se deja -sin traducir. Si verdaderamente quiere compilar LilyPond, consulte -@iftex -@c DO NOT translate the following line at all. -@ref{Compiling from source,,,lilypond-program,Application Usage}. -@end iftex -@ifhtml -@c Please translate the following line (but not the .html file name) -la @uref{Compiling-from-source.html,documentación en inglés}. -@end ifhtml - - -@c TRANSLATORS: -@c Please **do not** translate anything below this line. Users -@c should not be compiling LilyPond themselves; if they really -@c want to do so, they should be able to read the English docs, -@c because they'll probably need to ask questions in English -@c on the -devel list. -gp -@c Instead, please uncomment and translate the paragraph above, -@c and remove all stuff (menu, nodes, contents) below this line. diff --git a/Documentation/es/user/introduction.itely b/Documentation/es/user/introduction.itely deleted file mode 100644 index 1e64e15b9f..0000000000 --- a/Documentation/es/user/introduction.itely +++ /dev/null @@ -1,1187 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translation status: post-GDP - -@node Introduction -@chapter Introduction - -En este capítulo se presentan al lector LilyPond y su documentación. - -@menu -* Background:: -* About the documentation:: -@end menu - -@node Background -@section Background - -Esta sección se ocupa de las metas principales y la arquitectura de -LilyPond. - - -@menu -* Engraving:: -* Automated engraving:: -* What symbols to engrave?:: -* Music representation:: -* Example applications:: -@end menu - - -@node Engraving -@unnumberedsubsec Engraving - -@cindex grabado -@cindex typografía musical -@cindex musical, tipografía -@cindex plancha, grabado en -@cindex musical, grabado - -El arte de la tipografía musical se conoce como @emph{grabado (en -plancha)}. El término deriva del proceso tradicional de la impresión -musical. Hace sólo unas décadas, la música impresa se hacía -estampando la música sobre planchas de zinc o estaño de forma -invertida como en un espejo. Después la plancha se entintaba y las -depresiones causadas por los cortes y estampados retenían la tinta. -Al presionar una hoja de papel sobre la plancha, se formaba una -imagen. El estampado y cortado se hacía completamente a mano. -Cualquier corrección era muy fastidiosa de realizar, si es que era -posible hacerla siquiera, así que el grabado tenía que quedar perfecto -a la primera. El grabado era una habilidad altamente especializada; -un artesano necesitaba unos cinco años de preparación antes de poder -ostentar el título de maestro grabador, y se necesitaban otros cinco -años de experiencia para ser un auténtico experto. - -Hoy en día, toda la música impresa nueva se produce con ordenadores. -Esto tiene unas ventajas evidentes: las copias son más baratas de -producir y el trabajo editorial se puede repartir por correo -electrónico. Desgraciadamente la penetrante utilización de -ordenadores también ha hecho disminuir la calidad gráfica de las -partituras. Las impresiones de ordenador tienen un aspecto insulso y -mecánico, lo que hace que sea desagradable tocar a partir de ellas. - -@c introduce illustrating aspects of engraving, font... -Las imágenes siguientes ilustran la diferencia entre el grabado -tradicional y la salida típica de ordenador, y la tercera imagen -muestra cómo LilyPond imita el aspecto tradicional. La imagen de la -izquierda presenta el dibujo escaneado de un símbolo de bemol sacado -de una edición publicada en el año 2000. La del centro es un símbolo -procedente de una edición de B@"{a}renreiter grabada a mano de la -misma música. La de la izquierda ilustra los típicos puntos débiles -de la impresión por ordenador: las líneas del pentagrama son muy -delgadas, el peso del símbolo del bemol es también demasiado ligero -como las líneas del pentagrama, y tiene una apariencia rectilínea con -esquinas afiladas. En contraste, el bemol de Bärenreiter tiene una -apariencia redonda, pesada, casi voluptuosa. Nuestro símbolo del -bemol se diseñó según éste, entre otros. Es de forma redondeada y su -peso está en armonía con el grosor de nuestras líneas de pentagrama, -que son asimismo mucho más gruesas que las de la edición por -ordenador. - -@multitable @columnfractions .125 .25 .25 .25 .125 -@item @tab -@ifnotinfo -@iftex -@image{henle-flat-gray,,4cm} -@end iftex -@ifnottex -@image{henle-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{baer-flat-gray,,4cm} -@end iftex -@ifnottex -@image{baer-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{lily-flat-bw,,4cm} -@end iftex -@ifnottex -@image{lily-flat-bw,,,png} -@end ifnottex -@end ifnotinfo -@ifinfo -@c workaround for makeinfo-4.6: line breaks and multi-column cookies -@image{henle-flat-bw,,,png} @image{baer-flat-bw,,,png} -@image{lily-flat-bw,,,png} -@end ifinfo - -@item @tab -Henle (2000) -@tab -B@"{a}renreiter (1950) -@tab -Tipografía Feta de LilyPond (2003) - -@end multitable - - -@cindex símbolos musicales -@cindex tipografías -@cindex negrura -@cindex equilibrio - -@c introduce illustrating aspects of engraving, spacing... -Tratándose del espaciado, la distribución del espacio debe reflejar -las duraciones que hay entre las notas. Sin embargo muchas partituras -modernas se atañen a las duraciones con precisión matemática, lo que -lleva a unos resultados bastante pobres. En el siguiente ejemplo se -muestra un ejemplo dos veces: una utilizando espaciado matemáticamente -exacto, y otra con ciertas correcciones. ¿Puede adivinar cuál es -cuál? - -@cindex espaciado óptico -@c file spacing-optical. -@c need to include it here, because we want two images. -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} - -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.6 - } - } -} -@end lilypond - -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.0 - \override NoteSpacing #'same-direction-correction = #0.0 - \override StaffSpacing #'stem-spacing-correction = #0.0 - } - } -} -@end lilypond - -@cindex ritmos regulares -@cindex espaciado regular -@cindex regular, espaciado - -Cada uno de los dos compases de este fragmento tiene solamente notas -de duración constante. El espaciado debería reflejarlo. -Desgraciadamente el ojo nos engaña un poco; no solamente percibe la -distancia entre las cabezas de las notas, sino que tiene también en -cuenta la distancia entre las plicas. Como resultado, las notas de -una combinación plica arriba/@/plica abajo se tendrían que separar -más, y las notas de una combinación plica abajo/@/plica arriba -deberían juntarse, todo ello dependiendo de las posiciones combinadas -de las notas. Los dos compases de arriba están impresos con esta -corrección y los de abajo sin ella, formando grupos de notas pegadas -con plica abajo/@/plica arriba. - -Los músicos están normalmente más concentrados en tocar que en -estudiar el aspecto de una partitura, y por ello las pequeñeces sobre -los detalles tipográficos pueden parecer académicas. Pero no lo son. -En las partituras más largas con ritmos monótonos, las correcciones de -espaciado llevan a sutiles variaciones en la disposición de cada una -de las líneas dándoles una especie de firma visual distintiva. Sin -esta firma, todas las líneas parecerían iguales, y se convertirían en -un laberinto. Si un músico aparta la mirada o tiene un lapsus de -concentración, las líneas podrían perder su lugar sobre el papel. - -De forma similar, la fuerza visual de unos símbolos pesados sobre -gruesas líneas de pentagrama se sostiene mejor cuando el lector se -aleja del papel, por ejemplo cuando está sobre un atril. Una -distribución cuidadosa del espacio blanco permite disponer la música -muy apretada sin que los símbolos se toquen unos a otros. El -resultado reduce a un mínimo las vueltas de página, lo que es una gran -ventaja. - -Ésta es una característica normal del arte tipográfico. La -disposición de la página tiene que ser bonita, no sólo por sí misma, -sino sobre todo porque así ayuda al lector en su tarea. Para los -materiales destinados a la interpretación, como las partituras, esto -es de una importancia doble: los músicos tienen una capacidad de -concentración limitada. Cuanta menos atención necesiten para el acto -de leer, más se pueden dedicar al acto de tocar la música. Dicho de -otra forma: una mejor tipografía se traduce en una mejor -interpretación. - -Estos ejemplos demuestran que la tipografía musical es un arte sutil y -complejo, y que su elaboración requiere una experiencia considerable, -que los músicos no suelen tener. LilyPond representa nuestro esfuerzo -para llevar la excelencia visual de la música grabada a mano a la era -de la informática, y ponerla a disposición de los músicos normales. -Hemos ido afinando nuestros algoritmos, diseños de tipografía y -preferencias del programa para producir una impresión cuya calidad se -equipara con la de las viejas ediciones que tanto nos gusta contemplar -y de las que tanto nos gusta tocar. - - -@node Automated engraving -@unnumberedsubsec Automated engraving - -@cindex grabado automatizado -@cindex automático, grabado - -¿Cómo nos las arreglamos para implementar la tipografía? Si un -artesano necesita más de diez años para convertirse en un auténtico -maestro ¿cómo vamos a poder nosotros, simples «hackers», escribir un -programa que les quite el trabajo? - -La respuesta es: no podemos. Puesto que la tipografía se fundamenta -en el juicio humano sobre la apariencia, nunca se puede sustituir -completamente a las personas. Sin embargo, se puede automatizar gran -parte del trabajo más duro y repetitivo. Si LilyPond resuelve la -mayoría de las situaciones comunes de forma correcta, esto ya será una -tremenda mejoría sobre los programas existentes. El resto de los -casos se podrán afinar a mano. Con el transcurso de los años, el -software se puede refinar para que haga un mayor número de cosas de -forma automática, de tal forma que los ajustes manuales tienden a ser -cada vez menos necesarios. - -Cuando empezamos, escribimos el programa LilyPond completamente en el -lenguaje C++; la funcionalidad del programa quedaba como esculpida en -piedra por los desarrolladores. Este esquema resultó no ser muy -satisfactorio por una serie de motivos: - -@itemize -@item Cuando LilyPond comete fallos, -los usuarios tienen la necesidad de superar las decisiones de -formateo. Por ello el usuario debe tener acceso al motor de formateo. -De aquí que no podamos dejar establecidas las reglas y valores durante -la compilación, sino que los usuarios deben poder acceder a ellos -durante la ejecución del programa. - -@item El grabado de música es cosa de juicio visual y por ello es cuestión de gustos. -A pesar de saber tanto como creemos saber, los usuarios pueden no -estar de acuerdo con nuestras decisiones personales. Por tanto la -definición del estilo tipográfico también debe estar al alcance del -usuario. - -@item Por último, estamos continuamente refinando los algoritmos de formateo y por -tanto necesitamos un enfoque flexible para las reglas. El lenguaje -C++ fuerza un cierto método para agrupar las reglas que no encaja bien -con la manera de funcionar de la notación musical. - -@end itemize - -@cindex Scheme, lenguaje de programación - -Estos problemas se han solucionado integrando un intérprete del -lenguaje Scheme y reescribiendo parte del código de LilyPond en -Scheme. La actual arquitectura de formateo se construye alrededor del -concepto de objetos gráficos, descrita por variables y funciones de -Scheme. Esta arquitectura puede tratar al mismo tiempo con las reglas -de formateo, el estilo tipográfico y las decisiones de formateo -individuales. El usuario tiene acceso directo a la mayor parte de -estos controles. - -Las variables de Scheme controlan las decisiones de formateo. Por -ejemplo, muchos objetos gráficos tienen una variable de dirección que -codifica la elección entre arriba y abajo (o izquierda y -derecha). Aquí puede ver dos acordes con acentos y signos de arpegio. -En el primer acorde los objetos gráficos tienen todas sus direcciones -hacia abajo (o hacia la izquierda). El segundo acorde tiene todas las -direcciones hacia arriba (o hacia la derecha). - -@lilypond[quote,ragged-right] -\new Score \with { - \override SpacingSpanner #'spacing-increment = #3 - \override TimeSignature #'transparent = ##t -} \relative c' { - \stemDown 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT - \stemUp 4^>-\arpeggio -} -@end lilypond - -@cindex partitura, dar formato a -@cindex formato, dar a una partitura -@cindex formateado, reglas de - -@noindent -El proceso de formatear una partitura consiste en leer y escribir las -variables de los objetos gráficos. Ciertas variables tienen un valor -predefinido. Por ejemplo, el grosor de muchas líneas (una -característica del estilo tipográfico) son variables con un valor -preestablecido. Podemos alterar este valor libremente dando así a -nuestra partitura una impresión tipográfica distinta. - -@lilypond[quote,ragged-right] -fragment = { - \clef bass f8 as8 - c'4-~ c'16 as g f e16 g bes c' des'4 -} -<< - \new Staff \fragment - \new Staff \with { - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #0.5 - \override Bar #'thickness = #3.6 - \override Tie #'thickness = #2.2 - \override StaffSymbol #'thickness = #3.0 - \override Tie #'extra-offset = #'(0 . 0.3) - } - \fragment ->> -@end lilypond - -Las reglas de formateo también son variables que están predefinidas: -cada objeto tiene unas variables que contienen procedimientos. Estos -procedimientos realizan el trabajo real de formateo y sustituyéndolos -por otros podemos alterar el aspecto de los objetos. En el siguiente -ejemplo, la regla que define cómo se dibuja la cabeza de una nota se -altera durante el transcurso del fragmento musical. - -@lilypond[quote,ragged-right] -#(set-global-staff-size 30) - -#(define (mc-squared grob orig current) - (let* ((interfaces (ly:grob-interfaces grob)) - (pos (ly:grob-property grob 'staff-position))) - (if (memq 'note-head-interface interfaces) - (begin - (ly:grob-set-property! grob 'stencil - (grob-interpret-markup grob - (make-lower-markup 0.5 - (case pos - ((-5) "m") - ((-3) "c ") - ((-2) (make-smaller-markup (make-bold-markup "2"))) - (else "bla"))))))))) - -\new Voice \relative c' { - \stemUp - \set autoBeaming = ##f - \time 2/4 - 4 - \once \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil - \once \override NoteHead #'font-size = #-7 - \once \override NoteHead #'font-family = #'sans - \once \override NoteHead #'font-series = #'bold - 4 - \once \override NoteHead #'style = #'cross - 4 - \applyOutput #'Voice #mc-squared - 4 - << - { d8[ es-( fis^^ g] fis2-) } - \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } - >> -} -@end lilypond - - - -@node What symbols to engrave? -@unnumberedsubsec What symbols to engrave? - -@cindex grabado -@cindex tipografía -@cindex grabador -@cindex plug-in -@cindex complemento (plugin) - -El proceso de formateo toma las decisiones sobre dónde colocar los -símbolos. Sin embargo esto sólo se puede hacer una vez que se ha -decidido @emph{qué} símbolos han de imprimirse, o dicho de otro modo: -qué notación utilizar. - -La notación musical común es un sistema de registro de música que ha -venido evolucionando desde hace mil años. La forma que se usa en -nuestros días data de los primeros tiempos del Renacimiento. Aunque -la forma básica (es decir: puntos sobre una pauta de cinco líneas) no -ha cambiado, los detalles continúan evolucionando para expresar todas -las innovaciones de la notación contemporánea. Por tanto abarca unos -quinientos años de música. Sus aplicaciones se extienden sobre un -amplio rango que abarca desde melodías monofónicas hasta monstruosos -contrapuntos para gran orquesta. - -¿Cómo podemos tratar con una bestia de tantas cabezas, y obligarla a -que se encierre dentro de los límites de un programa de ordenador? -Nuestra solución es trocear el problema de la notación (por oposición -al grabado, esto es, a la tipografía) en fragmentos digeribles y más -fáciles de programar: cada tipo de símbolo se maneja por un módulo -separado que recibe el nombre de «plug-in». Cada «plug-in» es -completamente modular e independiente, de forma que puede -desarrollarse y mejorarse por separado. Estos «plug-ins» se llaman -@code{engraver}s (grabadores), por analogía con los artesanos que -traducen las ideas musicales a símbolos gráficos. - -En el siguiente ejemplo vemos cómo comenzamos con un plug-in para las -cabezas de las notas, el @code{Note_heads_engraver}. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \consists "Pitch_squash_engraver" - } - } -} -@end lilypond - -@noindent -A continuación un @code{Staff_symbol_engraver} (grabador del -pentagrama) añade la pauta. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \consists "Pitch_squash_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -El @code{Clef_engraver} (grabador de la clave) define un punto de -referencia para el pentagrama. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -y el @code{Stem_engraver} (grabador de las plicas) añade las plicas. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -El @code{Stem_engraver} (grabador de plicas) recibe una notificación -cuando llega una cabeza. Cada vez que se ve una cabeza (o más, si es -un acorde), se crea un objeto plica y se conecta a la cabeza. -Añadiendo grabadores para las barras, ligaduras, acentos, -alteraciones, líneas divisorias, indicación de compás y armadura -conseguimos una notación completa. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { \topVoice } -@end lilypond - -@cindex polifonía -@cindex grabar varias voces -@cindex contextos - -Este sistema funciona bien para la música monofónica, pero ¿y con la -polifonía? En notación polifónica muchas voces pueden compartir el -mismo pentagrama. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\new Staff << \topVoice \\ \botVoice >> -@end lilypond - -En esta situación, las alteraciones y la pauta se comparten, pero las -plicas, ligaduras, barras, etc. son propias de cada voz. Por tanto -los grabadores han de agruparse. Los grabadores de cabezas, plicas, -ligaduras, etc. se unen en un grupo llamado @q{Contexto de voz}, -mientras que los grabadores de la armadura, alteraciones, compás, etc. -van a un grupo que se llama @q{Contexto de la pauta}. En el caso de -la polifonía, un único Contexto de pauta contiene más de un Contexto -de voz. De forma semejante, varios Contextos de pauta pueden -agruparse en un único Contexto de partitura. El Contexto de partitura -es el contexto de notación de más alto nivel. - - -@seealso -Referencia de funcionamiento interno: -@rinternals{Contexts}. - - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { - << - \new Staff << \topVoice \\ \botVoice >> - \new Staff << \pah \\ \hoom >> - >> -} -@end lilypond - -@node Music representation -@unnumberedsubsec Music representation - -@cindex sintaxis -@cindex recursivas, estructuras - -Idealmente el formato de entrada para cualquier sistema de formateo de -alto nivel es una descripción abstracta del contenido. En este caso, -eso constituiría la propia música, lo que plantea un tremendo -problema: ¿cómo podemos definir qué es realmente la música? En lugar -de intentar hallar una respuesta, le hemos dado la vuelta a la -pregunta. Escribimos un programa capaz de producir partituras y -ajustamos el formato para que sea tan escueto como sea posible. -Cuando el formato ya no puede reducirse más, por definición nos -habremos quedado con el contenido musical propiamente dicho. Nuestro -programa sirve como definición formal de un documento musical. - - -La sintaxis también es el interfaz de usuario de LilyPond, así que es -fácil teclear - -@example -@{ - c'4 d'8 -@} -@end example - -@noindent -un Do4 (Do central) negra, y un Re4 (el Re por encima del Do central) -corchea. - -@lilypond[quote] -{ - c'4 d'8 -} -@end lilypond - -A una escala microscópica, dicha sintaxis es fácil de utilizar. A una -escala mayor, la sintaxis también requiere una estructura. ¿De qué -otra forma podríamos introducir piezas complejas como sinfonías u -óperas? La estructura se forma mediante el concepto de expresiones -musicales: al combinar pequeños fragmentos de música dentro de otros -mayores, se pueden expresar ideas musicales más complejas. Por -ejemplo - -@lilypond[quote,verbatim,fragment,relative=1] -f4 -@end lilypond - -@noindent -Los acordes se pueden construir encerrando las notas entre @code{<<} y -@code{>>} - -@c < > is not a music expression, -@c so we use <<>> iso. <> to drive home the point of -@c expressions. Don't change this back --hwn. - -@c FIXME: change this. I can explain it better. -gp -@example -<> -@end example - -@lilypond[quote,fragment,relative=1] -\new Voice { <> } -@end lilypond - -@noindent -Esta expresión se coloca en secuencia encerrándola dentro de llaves -@code{@{@tie{}@dots{}@tie{}@}} - -@example -@{ f4 <> @} -@end example - -@lilypond[quote,relative=1,fragment] -{ f4 <> } -@end lilypond - -@noindent -Lo anterior, a su vez también es una expresión, y por ello se puede combinar -de nuevo con otra expresión simultánea (una blanca) usando <<, -@code{\\}, y >> - -@example -<< g2 \\ @{ f4 <> @} >> -@end example - -@lilypond[quote,fragment,relative=2] -\new Voice { << g2 \\ { f4 <> } >> } -@end lilypond - -Las mencionadas estructuras recursivas se pueden especificar de forma -nítida y formal dentro de una gramática independiente del contexto. -El código de análisis también se genera a partir de esta gramática. -En otras palabras, la sintaxis de LilyPond está definida de una forma -clara y sin ambigüedades. - -Los interfaces de usuario y la sintaxis son lo que la persona ve y con -lo que trata principalmente. En parte, son fruto de preferencias -personales y como tales están sujetas a mucha discusión. Aunque las -discusiones sobre el gusto tienen su mérito, no son demasiado -productivas. Dentro de la escena global de LilyPond, la sintaxis de -la entrada tiene una importancia relativamente pequeña: inventarse una -sintaxis elegante es fácil, pero escribir un código de formateo -decente es mucho más difícil. Esto también queda ilustrado por la -cantidad de líneas de código de los componentes respectivos: el -análisis y la representación se llevan menos del 10% del código -fuente. - - -@node Example applications -@unnumberedsubsec Example applications - -@cindex sencillos, ejemplos -@cindex ejemplos sencillos - -Escribimos LilyPond como un experimento de cómo condensar el arte del -grabado de música dentro de un programa de ordenador. Gracias a todo -este duro trabajo, el programa ahora se puede usar para hacer trabajos -útiles. La aplicación más sencilla es imprimir notas. - -@lilypond[quote,relative=1] -{ - \time 2/4 - c4 c g'4 g a4 a g2 -} -@end lilypond - -@noindent -Añadiendo los nombres de acordes y la letra, obtenemos una hoja guía -de acordes (lead sheet). - -@c KEEP LY -@lilypond[quote,ragged-right] -<< - \chords { c2 c f2 c } - \new Staff - \relative c' { - \time 2/4 - c4 c g' g a a g2 - } - \addlyrics { cam -- pa -- ni -- ta del lu -- gar } ->> -@end lilypond - -También se puede imprimir notación polifónica y música para piano. -El ejemplo siguiente combina algunas otras construcciones exóticas. - -@lilypond[quote] -\header { - title = "Screech and boink" - subtitle = "Random complex notation" - composer = "Han-Wen Nienhuys" -} - -\score { - \context PianoStaff << - \new Staff = "up" { - \time 4/8 - \key c \minor - << { - \revert Stem #'direction - \change Staff = down - \set subdivideBeams = ##t - g16.[ - \change Staff = up - c'''32 - \change Staff = down - g32 - \change Staff = up - c'''32 - \change Staff = down - g16] - \change Staff = up - \stemUp - \set followVoice = ##t - c'''32([ b''16 a''16 gis''16 g''32)] - } \\ { - s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] - } \\ { - s4 \autoBeamOff d''8.. f''32 - } \\ { - s4 es''4 - } >> - } - - \new Staff = "down" { - \clef bass - \key c \minor - \set subdivideBeams = ##f - \override Stem #'french-beaming = ##t - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #4.0 - g'16[ b16 fis16 g16] - << \makeClusters { - as16 - - - } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down - 4\arpeggio - } - >> } - >> - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 8) - } - } - \layout { - \context { - \Staff - \consists Horizontal_bracket_engraver - } - } -} -@end lilypond - -Todos los fragmentos mostrados se han escrito a mano, pero esto no es -necesariamente así. Puesto que el motor de formateo es casi -completamente automático, puede servir como medio de salida para otros -programas que manipulan música. Por ejemplo, se puede usar también -para convertir bases de datos de fragmentos musicales en imágenes con -destino a páginas web y presentaciones multimedia. - -Este manual también es un ejemplo de aplicación: el formato de entrada -es texto sencillo, y por ello se puede empotrar fácilmente dentro de -otros formatos basados en texto, como @LaTeX{}, HTML, o en el caso -concreto de este manual, Texinfo. A través de un programa especial, -los fragmentos de entrada se pueden sustituir por imágenes musicales -dentro de los archivos de salida PDF o HTML resultantes. Esto -convierte la tarea de mezclar música y texto dentro de los documentos, -en algo muy sencillo. - - - -@node About the documentation -@section About the documentation - -Esta sección explica la distintas partes de la documentación. - -@cindex Manual de aprendizaje -@cindex Glosario musical -@cindex Referencia de la notación -@cindex Utilización del programa -@cindex Fragmentos de código -@cindex Referencia de funcionamiento interno - -@c leave these lines wrapping around. It's some texinfo 4.12 thing. -gp -@c This is actually a limitation of texi2html. -jm -@menu -* About the Learning Manual:: Este manual es una introducción a LilyPond que porporciona explicaciones en profundidad sobre cómo crear notación. -* About the Music Glossary:: Este manual explica términos musicales y aporta traducciones de términos a otros idiomas. -* About the Notation Reference:: Este manual es la porción más importante de la documentación. Proporciona información detallada sobre la creación de notación. Este libro da por supuesto que el lector ya conoce el material básico cubierto en el Manual de aprendizaje y que está familiarizado con los términos musicales ingleses presentados en el Glosario musical. -* About the Application Usage:: Trata sobre los programas concretos y los asuntos específicos de distintos sistemas operativos. -* About the Snippet List:: Es una colección de ejemplos breves de LilyPond. -* About the Internals Reference:: Este documento proporciona información sobre la programación interna de LilyPond, que es necesaria para construir los trucos. -* Other documentation:: Existen algunas otras porciones de la documentación, como las Noticias y los archivos históricos de las listas de correo. -@end menu - - -@node About the Learning Manual -@unnumberedsubsec About the Learning Manual - -@cindex Manual de aprendizaje - -Este libro explica cómo empezar a aprender LilyPond, así como algunos -conceptos clave en términos sencillos. Se recomienda leer estos -capítulos de forma secuencial. - -@itemize - -@item -@ref{Introduction}: -explica los antecedentes y las metas generales de LilyPond. - -@item -@ref{Tutorial}: -da una amable introducción a la tipografía musical. Los usuarios que -se acercan por primera vez deben comenzar por aquí. - -@item -@ref{Fundamental concepts}: -explica algunos conceptos generales sobre el formato de los archivos -de entrada de LilyPond. Si no está seguro de dónde colocar una -instrucción ¡lea este capítulo! - -@item -@ref{Tweaking output}: -muestra la manera de cambiar el grabado predeterminado que produce -LilyPond. - -@item -@ref{Working on LilyPond projects}: -trata los usos prácticos de LilyPond y cómo evitar ciertos problemas -bastante comunes. ¡Léalo antes de emprender proyectos grandes! - - -@end itemize - -El Manual de aprendizaje contiene también apéndices que no forman -parte de la lectura lineal recomendada. Pueden ser útiles para una -mirada posterior: - -@itemize - -@item -@ref{Templates}: muestra plantillas de piezas de LilyPond, listas para -usar. Tan sólo tiene que cortar y pegar una plantilla en un archivo, -escribir las notas, y ¡habrá terminado! - -@item -@ref{Scheme tutorial}: presenta una breve introducción a Scheme, el -lenguaje de programación que usan las funciones musicales. Se trata -de material para trucos avanzados; muchos usuarios jamás llegan -siquiera a tocar el Scheme. - -@end itemize - - -@node About the Music Glossary -@unnumberedsubsec About the Music Glossary - -@cindex Glosario musical -@cindex frase idiomática -@cindex jerga -@cindex terminología -@cindex idomas extranjeros -@cindex idiomas - -@rglosnamed{Top,Glosario musical}: explica términos musicales e incluye -traducciones a varios idiomas. Si no está familiarizado con la -notación o la terminología musicales (especialmente si no es un -anglófono nativo), es muy recomendable que consulte el glosario. - - -@node About the Notation Reference -@unnumberedsubsec About the Notation Reference - -@cindex Referencia de la notación -@cindex apéndices -@cindex referencia, cuadros de -@cindex cuadros de referencia - -Este libro explica todas las instrucciones de LilyPond que producen -notación impresa. Da por supuesto que el lector está familiarizado -con los conceptos del manual de aprendizaje. - -@itemize - -@item -@ruser{Musical notation}: -trata ciertos temas agrupados según las construcciones de notación. -Esta sección proporciona detalles sobre notación básica que -probablemente serán de utilidad en casi cualquier proyecto de -notación. - -@item -@ruser{Specialist notation}: -también trata los temas agrupados por construcciones de notación. -Esta sección proporciona detalles sobre notación especial que -solamente será útil para ciertos grupos de instrumentos (o voces). - -@item -@ruser{General input and output}: -trata de información general sobre los archivos de LilyPond y el -control sobre la salida. - -@item -@ruser{Spacing issues}: -trata asuntos que afectan a la salida global, como la elección del -tamaño del papel o la especificación de los saltos de página. - -@item -@ruser{Changing defaults}: -explica cómo hacer los ajustes que permitan a LilyPond producir -exactamente la notación que desee. - -@item -@ruser{Interfaces for programmers}: -explica cómo crear funciones musicales con Scheme. - -@end itemize - -El manual de Referencia de la notación también contiene unos apéndices con útiles tablas de -referencia. - - -@itemize - -@item -@ruser{Literature list}: -contiene un conjunto de libros de referencia muy útiles para aquellas -personas que desean saber más sobre notación y grabado. - -@item -@ruser{Notation manual tables}: -son un conjunto de tablas que relacionan los nombres de los acordes, -instrumentos MIDI, nombres de los colores y la tipografía Feta. - -@item -@ruser{Cheat sheet}: -es una manejable referencia de las instrucciones de LilyPond más -comunes. - -@item -@ruser{LilyPond command index}: -un úndice de todas las @code{\instrucciones} de LilyPond. - -@item -@ruser{LilyPond index}: -un índice completo. - -@end itemize - -@node About the Application Usage -@unnumberedsubsec About the Application Usage - -@cindex Utilización del programa -@cindex integrar LilyPond con otros programas - -Este libro explica la manera de ejecutar el programa y cómo integrar -la notación de LilyPond con otros programas. - -@itemize - -@item -@rprogram{Install}: -explica cómo instalar LilyPond (incluyendo la compilación, si se -desea). - -@item -@rprogram{Setup}: -describe cómo debe configurar el sistema para una utilización óptima -de LilyPond, como por ejemplo el uso de entornos especiales para -determinados editores de texto. - -@item -@rprogram{Running LilyPond}: -trata sobre cómo ejecutar LilyPond y sus programas de apoyo. Además, -esta sección explica cómo actualizar las partituras a partir de -versiones anteriores de LilyPond. - -@item -@rprogram{LilyPond-book}: -da los detalles que se encuentran detrás de la creación de documentos -con ejemplos de música insertados, como este mismo manual. - -@item -@rprogram{Converting from other formats}: -explica cómo ejecutar los programas de conversión. Estos programas -vienen incluidos en el mismo paquete que el propio LilyPond, y -convierten una amplia variedad de formatos de música al formato -@code{.ly}. - -@end itemize - -@node About the Snippet List -@unnumberedsubsec About the Snippet List - -@cindex snippets (fragmentos de código) -@cindex fragmentos de código (snippets) -@cindex LSR -@cindex LilyPond Snippet Repository - -@rlsrnamed{Top,Lista de fragmentos de código de LilyPond}: presenta un conjunto -seleccionado de fragmentos de código de LilyPond procedentes del -@uref{http://lsr@/.dsi@/.unimi@/.it,Repositorio de Fragmentos de -Código} (LSR). Todos los fragmentos se encuentran en el dominio -público. - -Observe que este documento no es un subconjunto exacto de LSR. El LSR -ejecuta una versión estable de LilyPond, por lo que cualquier -fragmento de código que muestre posibilidades nuevas de una versión de -desarrollo se tiene que añadir por separado. Éstas se almacenan en -@file{input/new/} dentro del árbol del código fuente de LilyPond. - -La lista de fragmentos de código para cada una de las subsecciones del -Manual de Referencia de la Notación también se encuentran -enlazados desde la parte @strong{Véase también}. - - -@node About the Internals Reference -@unnumberedsubsec About the Internals Reference - -@cindex Referencia de funcionamiento interno - -@rinternalsnamed{Top,Referencia de funcionamiento interno}: -es un conjunto de páginas HTML con una tupida red de enlaces cruzados, -que documentan al detalle el meollo de todas y cada una de las clases, -objetos y funciones de LilyPond. Se produce directamente a partir de -las definiciones de formateo que se utilizan. - -Casi toda la funcionalidad de formateo que se emplea internamente, se -encuentra disponible para el usuario de forma directa. Por ejemplo, -todas las variables que controlan los valores de grosor, distancias, -etc., se pueden cambiar dentro de los archivos de entrada. Hay un -enorme número de opciones de formateo, y todas ellas se describen en -este documento. Cada sección del manual de notación tiene una -subsección @b{Véase también}, que hace referencia a la documentación -generada. En el documento HTML, estas subsecciones llevan enlaces que -se pueden seguir, pulsando sobre ellos. - - -@node Other documentation -@unnumberedsubsec Other documentation - -Existen algunos otros lugares que pueden resultar muy valiosos como -fuente de información. - -@itemize - -@item -@ifhtml -@ifset bigpage -@uref{../topdocs/NEWS.html,News}: -@end ifset -@ifclear bigpage -@uref{../../topdocs/NEWS.html,News}: -@end ifclear -@end ifhtml -@ifnothtml -Noticias: -@end ifnothtml -es un resumen de los cambios importantes y las posibilidades nuevas de -LilyPond desde la versión anterior. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-user/, Los archivos de la -lista de correo de usuarios lilypond-user}: es una recopilación de -todos los mensajes de correo que se han enviado a la lista de -usuarios. Hay muchas preguntas que se han formulado varias veces; muy -probablemente, si tiene alguna pregunta, la respuesta puede -encontrarse en estos archivos. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-devel/, Los -archivos de la lista de correo de desarrollo lilypond-devel}: es una -recopilación de todos los mensajes de correo que se han enviado a la -lista de los desarrolladores. Aquí la discusión tiene un carácter más -técnico; si tiene una pregunta avanzada relacionada con el -funcionamiento interno de lilypond, la respuesta puede estar en estos -archivos. - -@item Fragmentos de música incrustados: en todos los documentos en HTML que -tienen fragmentos de música incluidos, el código de entrada exacto de -LilyPond que se utilizó para producir dicha imagen se puede ver -pulsando sobre ella. - -@item Archivos de inicio: La localización exacta de los archivos de -documentación que hemos mencionado puede variar de un sistema a otro. -En ocasiones este manual hace referencia a archivos de inicialización -y de ejemplo. A lo largo del manual, nos referimos a archivos de -entrada por su ruta relativa respecto de directorio de nivel más alto -de los archivos de código fuente. Por ejemplo, -@file{input/@/lsr/@/carpeta/@/bla@/.ly} puede referirse al archivo -@file{lilypond@/2.x.y/@/input/@/lsr/@/carpeta/@/bla@/.ly}. En los -paquetes binarios para la plataforma UNIX, normalmente la -documentación y los ejemplos se encuentran en algún lugar dentro de -@file{/usr/@/share/@/doc/@/lilypond/}. Los archivos de inicialización, -como por ejemplo @file{scm/@/lily@/.scm}, o -@file{ly/@/engraver@/-init@/.ly}, se encuentran normalmente en el -directorio @file{/usr/@/share/@/lilypond/}. Para ver más detalles, -consulte @ref{Other sources of information}. - -@end itemize diff --git a/Documentation/es/user/keyboards.itely b/Documentation/es/user/keyboards.itely deleted file mode 100644 index 7e791c303d..0000000000 --- a/Documentation/es/user/keyboards.itely +++ /dev/null @@ -1,674 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Keyboard and other multi-staff instruments -@section Keyboard and other multi-staff instruments - -@lilypondfile[quote]{keyboard-headword.ly} - -Esta sección se ocupa de varios aspectos de la notación musical que -son exclusivos de los instrumentos de teclado y otros instrumentos -cuya notación se realiza sobre varios pentagramas, como el arpa o el -vibráfono. A los efectos de nomenclatura, en esta sección se -denominan abreviadamente @qq{teclados} a todo este grupo de -instrumentos de varios pentagramas, aunque algunos de ellos no tienen -teclado. - - -@menu -* Common notation for keyboards:: -* Piano:: -* Accordion:: -* Harp:: -@end menu - -@node Common notation for keyboards -@subsection Common notation for keyboards - -Esta sección trata aspectos de notación que pueden aparecer en casi -todos los instrumentos de teclado. - -@menu -* References for keyboards:: -* Changing staff manually:: -* Changing staff automatically:: -* Staff-change lines:: -* Cross-staff stems:: -@end menu - -@node References for keyboards -@unnumberedsubsubsec References for keyboards - -@cindex piano, pentagramas de -@cindex pentagramas de piano -@cindex pentagramas de instrumentos de teclado -@cindex teclado, pentagramas para instrumentos de -@cindex tecla, pentagramas para instrumentos de - -@funindex PianoStaff - -La notación de los instrumentos de teclado se suele realizar con -sistemas de piano. Éstos son dos pentagramas normales agrupados -mediante una llave. También se utiliza esta notación para otros -instrumentos de teclado. La música de órgano se escribe normalmente -con dos pentagramas dentro de un grupo @code{PianoStaff} y un tercer -pentagrama normal para los pedales. - -Los pentagramas son hasta cierto punto independientes, pero a veces -las voces pueden cruzarse entre los dos pentagramas. Esta sección -trata técnicas de notación que son particulares de la música de -teclado. - -En otros lugares se tratan varios problemas comunes de la música de -teclado: - -@itemize - -@item La música para teclado suele contener varias voces y el número de -éstas puede variar ampliamente; esto se describe en @ref{Collision -resolution}. - -@item La música para teclado se puede escribir en paralelo, como se describe -en @ref{Writing music in parallel}. - -@item Las digitaciones se indican como puede verse en @ref{Fingering instructions}. - -@item Las indicaciones de pedal de órgano se insertan como articulaciones, -véase @ref{List of articulations}. - -@item Las líneas verticales de rejilla se pueden mostrar como se describe en @ref{Grid lines}. - -@item La música para teclado incluye con frecuencia ligaduras -@notation{Laissez vibrer} así como ligaduras sobre arpegios y -trémolos, descritos en @ref{Ties}. - -@item La colocación de arpegios a través de varias voces y pentagramas se -cubre en @ref{Arpeggio}. - -@item Las indicaciones de trémolo se describen en @ref{Tremolo repeats}. - -@item Varios de los trucos que pueden ser necesarios en música para teclado -se muestran en @rlearning{Real music example}. - -@item Las notas ocultas se pueden usar para producir ligaduras de unión que -se cruzan entre voces, como se explica en @rlearning{Other uses for -tweaks}. - -@end itemize - -@c @snippets -@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] -@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly} -@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 - -@seealso -Manual de aprendizaje: -@rlearning{Real music example}, -@rlearning{Other uses for tweaks}. - -Referencia de la notación: -@c @ref{Grouping staves}, -@ref{Instrument names}, -@ref{Collision resolution}, -@ref{Writing music in parallel}, -@ref{Fingering instructions}, -@ref{List of articulations}, -@ref{Grid lines}, -@ref{Ties}, -@ref{Arpeggio}, -@ref{Tremolo repeats}. - -Referencia de funcionamiento interno: -@rinternals{PianoStaff}. - -Fragmentos de código: -@rlsr{Keyboards}. - - -@knownissues - -@cindex teclado, matices centrados para música de -@cindex dinámica, indicaciones de, centradas para música de teclado -@cindex piano, dinámica centrada para música de -@cindex centrar indicaciones dinámicas en música para piano - -@funindex staff-padding - -Los matices no se colocan centrados, pero se pueden utilizar ciertas -alternativas. Una opción es la plantilla @q{piano con matices -centrados} que está en @rlearning{Piano templates}; otra opción es -aumentar el relleno (@code{staff-padding}) de los matices como se -estudia en @rlearning{Moving objects}. - - -@node Changing staff manually -@unnumberedsubsubsec Changing staff manually - -@cindex manual, cambio de pentagrama -@cindex pentagrama, cambios manuales de -@cindex cambbio manual de pentagrama -@cindex cruzado, pentagrama, notas de -@cindex notes de pentagrama cruzado -@cindex barras de pentagrama cruzado -@cindex cruzado, pentagrama, barras de - -@funindex \change -@funindex change - -Las voces se pueden cambiar de pentagrama manualmente usando la instrucción - -@example -\change Staff = @var{nombre_del_pentagrama} -@end example - -@noindent -La cadena @var{nombre_del_pentagrama} es el nombre del pentagrama. -Cambia la voz actual de su pentagrama en curso al pentagrama de nombre -@var{nombre_del_pentagrama}. Los valores más corrientes para -@var{nombre_del_pentagrama} son @code{"arriba"} y @code{"abajo"}, o -bien @code{"MD"} y @code{"MI"}. - -Las notas de pentagrama cruzado reciben la barra automáticamente: - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff = "up" { - 8 - \change Staff = "down" - g8 fis g - \change Staff = "up" - 8 - \change Staff = "down" - e8 dis e - \change Staff = "up" - } - \new Staff = "down" { - \clef bass - % keep staff alive - s1 - } ->> -@end lilypond - -Si el barrado necesita algún trucaje, efectúe en primer lugar los -cambios en las direcciones de las plicas. Las posiciones de las -barras se miden posteriormente a partir del centro del peentagrama que -está más cerca de la barra. Para ver un ejemplo sencillo de trucaje -de las barras, consulte @rlearning{Fixing overlapping notation}. - - -@seealso -Manual de aprendizaje: -@rlearning{Fixing overlapping notation}. - -Referencia de la notación: -@ref{Stems}, -@ref{Automatic beams}. - -Fragmentos de código: -@rlsr{Keyboards}. - -Referencia de funcionamiento interno: -@rinternals{Beam}, -@rinternals{ContextChange}. - - -@node Changing staff automatically -@unnumberedsubsubsec Changing staff automatically - -@cindex cambio automático de pentagrama -@cindex automático, cambio de pentagrama -@cindex pentagrama, cambio automático de - -@funindex \autochange -@funindex autochange -@funindex PianoStaff - -Se puede hacer que las voces cambien automáticamente entre los -pentagramas inferior y superior. La sintaxis para conseguir esto es - -@example -\autochange @dots{}@var{música}@dots{} -@end example - -@noindent -Esto creará dos pentagramas dentro del grupo actual de pentagramas -(normalmente un @code{PianoStaff}), llamados @code{"up"} (arriba) y -@code{"down"} (abajo). El pentagrama inferior estará en clave de Fa -de forma predeterminada. El cambiador automático hace el cambio -basándose en la altura (el Do@tie{}central es el punto de inflexión), -y se adelanta saltando sobre los silencios para hacer cambios por -adelantado. - -@lilypond[quote,verbatim] -\new PianoStaff { - \autochange { - g4 a b c' - d'4 r a g - } -} -@end lilypond - -@cindex relativo, modo, autocambiador y -@cindex autocambiador y el modo relativo - -@funindex \relative -@funindex relative - -Una sección marcada @code{\relative} que se encuentra fuera de -@code{\autochange} no tiene efecto sobre las notas de la música; por -tanto, en caso necesario escriba @code{\relative} dentro de -@code{\autochange}. - -Si se necesita más control sobre los pentagramas individuales, se -pueden crear manualmente con los nombres @code{"up"} y @code{"down"}. -Entonces, la instrucción @code{\autochange} alternará su voz entre los -pentagramas existentes. - -@warning{Si se crean los pentagramas manualmente, @emph{se deben} -llamar @code{"up"} y @code{"down"} (en inglés).} - -Por ejemplo, esto es necesario para colocar una armadura de tonalidad -en el pentagrama inferior: - -@c Keep Ly needed, otherwise 'up' and 'down' get incorrectly translated in verbatim output -@c KEEP LY -@lilypond[quote,verbatim,nogettext] -\new PianoStaff << - \new Staff = "up" { - \new Voice = "melodiaUno" { - \key g \major - \autochange \relative c' { - g8 b a c b d c e - d8 r fis, g a2 - } - } - } - \new Staff = "down" { - \key g \major - \clef bass - } ->> -@end lilypond - - -@seealso -Referencia de la notación: -@ref{Changing staff manually}. - -Fragmentos de código: -@rlsr{Keyboards}. - -Referencia de funcionamiento interno: -@rinternals{AutoChangeMusic}. - - -@knownissues - -@cindex acordes, división entre pentagramas con \autochange - -Los cambios de pentagrama pueden no acabar en lugares óptimos. Para -conseguir una salida de alta calidad es mejor especificar manualmente -los cambios de pentagrama. - -Los acordes no se dividen entre los pentagramas; se asignan a un -pentagrama en función de la primera nota nombrada dentro de la -construcción del acorde. - -@node Staff-change lines -@unnumberedsubsubsec Staff-change lines - -@cindex seguimiento de voz -@cindex pentagrama, cambio -@cindex cruce de pentagramas -@cindex pentagrama, línea de cambio de -@cindex cruzado, línea de pentagrama -@cindex línea de seguimiento de pentagrama -@cindex línea de cambio de pentagrama -@cindex seguimiento de voz -@cindex voz, seguimiento de -@cindex pentagrama, cambio de -@cindex cruzado, pentagrama - -@funindex followVoice -@funindex \showStaffSwitch -@funindex showStaffSwitch -@funindex \hideStaffSwitch -@funindex hideStaffSwitch - -Cuando una voz cambia a otro pentagrama, se puede imprimir -automáticamente una línea que conecte las notas: - -@lilypond[quote,verbatim,relative=1] -\new PianoStaff << - \new Staff = "one" { - \showStaffSwitch - c1 - \change Staff = "two" - b2 a - } - \new Staff = "two" { - \clef bass - s1*2 - } ->> -@end lilypond - - -@predefined -@code{\showStaffSwitch}, -@code{\hideStaffSwitch}. -@endpredefined - - -@seealso -Fragmentos de código: -@rlsr{Keyboards}. - -Referencia de funcionamiento interno: -@rinternals{Note_head_line_engraver}, -@rinternals{VoiceFollower}. - - -@node Cross-staff stems -@unnumberedsubsubsec Cross-staff stems - -@cindex plica de pentagrama cruzado -@cindex pentagrama cruzado, plica de -@cindex distancia entre pentagramas en música de piano - -@cindex cruzado, notas de pentagrama -@cindex cruzado, plicas de pentagrama -@cindex cruzado, acordes de pentagrama -@cindex notas de pentagrama cruzado -@cindex plicas de pentagrama cruzado -@cindex acordes de pentagrama cruzado - -@funindex Stem -@funindex cross-staff -@funindex length -@funindex flag-style - -Se pueden hacer acordes que cruzan los pentagramas: - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff { - \relative c' { - f8 e4 d8 d f e4 - } - } - \new Staff { - \relative c' { - << { - \clef bass - % stems may overlap the other staff - \override Stem #'cross-staff = ##t - % extend the stems to reach other other staff - \override Stem #'length = #12 - % do not print extra flags - \override Stem #'flag-style = #'no-flag - % prevent beaming as needed - a8 g4 f8 f bes\noBeam g4 - } - \\ - { - f,2 bes4 c - } >> - } - } ->> -@end lilypond - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{indicating-cross-staff-chords-with-arpeggio-bracket.ly} - - -@seealso -Fragmentos de código: -@rlsr{Keyboards}. - -Referencia de funcionamiento interno: -@rinternals{Stem}. - - -@node Piano -@subsection Piano - -Esta sección trata de aspectos de la notación directamente -relacionados con el piano. - -@menu -* Piano pedals:: -@end menu - -@node Piano pedals -@unnumberedsubsubsec Piano pedals - -@cindex piano, pedales de -@cindex pedales de piano -@cindex pedal forte -@cindex pedal derecho -@cindex pedal sostenuto -@cindex derecho, pedal -@cindex forte, pedal -@cindex sostenuto, pedal -@cindex una corda -@cindex tre corde -@cindex sos. -@cindex U.C. - -@funindex \sustainOn -@funindex sustainOn -@funindex \sustainOff -@funindex sustainOff -@funindex \sostenutoOn -@funindex sostenutoOn -@funindex \sostenutoOff -@funindex sostenutoOff -@funindex \unaCorda -@funindex unaCorda -@funindex \treCorde -@funindex treCorde - -En general, los pianos tienen tres pedales que alteran la forma de -producir el sonido: el pedal de mantenimiento (pedal -@notation{derecho} o pedal @notation{forte}), el pedal -@notation{sostenuto} (@notation{sos.}, pedal central) y el pedal -@notation{una corda} (@notation{U.C.}, pedal izquierdo). Los pedales -de mantenimiento como el pedal derecho del piano se encuentran también -en el vibráfono y en la celesta. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn d e g -1\sustainOff -c4\sostenutoOn e g c, -1\sostenutoOff -c4\unaCorda d e g -1\treCorde -@end lilypond - -@cindex pedal, estilos de indicación -@cindex pedal, indicación textual -@cindex pedal, indicación por corchete -@cindex pedal, indicación mixta -@cindex pedal de mantenimiento, estilo de -@cindex mantenimiento, pedal, estilos de - -@funindex pedalSustainStyle -@funindex mixed -@funindex bracket -@funindex text - -Existen tres estilos de indicaciones de pedal: textual, corchete y -mixta. El pedal derecho y el pedal de una corda utilizan el estilo -textual de forma predeterminada, mientras que el pedal sostenuto -utiliza el método mixto de forma predeterminada. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn g c2\sustainOff -\set Staff.pedalSustainStyle = #'mixed -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2\sustainOff -\set Staff.pedalSustainStyle = #'bracket -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2 -\bar "|." -@end lilypond - -La colocación de las instrucciones de pedal se corresponden con el -movimiento físico del pedal derecho en el transcurso de la ejecución. -La pedalización hasta la barra final de compás se indica mediante la -omisión de la instrucción final de levantar el pedal. - - -@seealso -Referencia de la notación: -@ref{Ties}. - -Fragmentos de código: -@rlsr{Keyboards}. - -Referencia de funcionamiento interno: -@rinternals{SustainPedal}, -@rinternals{SustainPedalLineSpanner}, -@rinternals{SustainEvent}, -@rinternals{SostenutoPedal}, -@rinternals{SostenutoPedalLineSpanner}, -@rinternals{SostenutoEvent}, -@rinternals{UnaCordaPedal}, -@rinternals{UnaCordaPedalLineSpanner}, -@rinternals{UnaCordaEvent}, -@rinternals{PianoPedalBracket}, -@rinternals{Piano_pedal_engraver}. - - -@node Accordion -@subsection Accordion - -@cindex acordeón - -Esta sección se ocupa de la notación que es exclusiva del acordeón. - -@menu -* Discant symbols:: -@end menu - -@node Discant symbols -@unnumberedsubsubsec Discant symbols - -@cindex acordeón, signos de discanto -@cindex discanto, signos de, del acordeón -@cindex acordeón, cambios en el -@cindex acordeón, signos de cambio en el - -Los acordeones se suelen construir con más de un conjunto de lengüetas -que pueden estar al unísono, una octava por encima, o una octava por -debajo de la altura escrita. Cada fabricante de acordeones utiliza -distintos nombres para los @notation{cambios} que seleccionan las -distintas combinaciones de lengüetas, como @notation{oboe}, -@notation{musette} o @notation{bandoneón}, de manera que se ha venido -en usar un sistema de signos para simplificar las instrucciones de -ejecución. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{accordion-discant-symbols.ly} - - -@seealso -Fragmentos de código: -@rlsr{Keyboards}. - - -@node Harp -@subsection Harp - -Esta sección trata sobre asuntos de notación específicos del arpa. - -@menu -* References for harps:: -* Harp pedals:: -@end menu - -@node References for harps -@unnumberedsubsubsec References for harps -@cindex harps -@cindex bisbiglando - -Ciertas características comunes de la música de arpa se estudian en -otras partes de la documentación: - -@itemize - -@item El glissando es la técnica más característica del arpa, -@ref{Glissando}. - -@item El @notation{bisbigliando} se escribe como un trémolo, @ref{Tremolo -repeats} - -@item Los armónicos naturales se estudian bajo el epígrafe @ref{Harmonics}. - -@item Para los arpegios dirigidos y los no arpegios, véase @ref{Arpeggio}. - -@end itemize - -@seealso -Referencia de la notación: -@ref{Tremolo repeats}, -@ref{Glissando}, -@ref{Arpeggio}, -@ref{Harmonics}. - -@node Harp pedals -@unnumberedsubsubsec Harp pedals - -@cindex arpa, pedales -@cindex arpa, diagramas de pedal -@cindex pedales del arpa -@cindex pedales del arpa, diagramas - -Las arpas tienen siete cuerdas por octava que pueden sonar a la altura -natural, bemol o sostenido. En el arpa de palancas o arpa celta, cada -cuerda se ajusta individualmente, pero en las arpas de pedales todas -las cuerdas con igual nombre de nota se controlan por un único -pedal. Visto de izquierda a derecha desde la posición del ejecutante, -los pedales son Re, Do y Si a la izquierda y Mi, Fa, Sol y La a la -derecha. La posición de los pedales se puede indicar con indicaciones -textuales: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup \concat \vcenter { [D \flat C \sharp B|E \sharp F \sharp G A \flat] } -c!1_\markup \concat \vcenter {[ C \natural ]} -@end lilypond - -o mediante diagramas de pedal: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup { \harp-pedal #"^v-|vv-^" } -c!1_\markup { \harp-pedal #"^o--|vv-^" } -@end lilypond - -La instrucción @code{\harp-pedal} acepta una cadena de caracteres en -la que @code{^} es la posición alta del pedal (altura bemol), @code{-} -es la posición intermedia (altura natural), @code{v} es la posición -baja (altura sostenido), y @code{|} es la línea vertical separadora. -Si se antepone @code{o}, el siguiente símbolo de pedal se rodea por -una elipse. - -@seealso -Referencia de la notación: -@ref{Text scripts}, -@ref{Instrument Specific Markup}. diff --git a/Documentation/es/user/lilypond-book.itely b/Documentation/es/user/lilypond-book.itely deleted file mode 100644 index 3fca92a9cf..0000000000 --- a/Documentation/es/user/lilypond-book.itely +++ /dev/null @@ -1,1104 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@c Note: keep this node named so that `info lilypond-book' brings you here. -@node LilyPond-book -@chapter @command{lilypond-book}: Integrating text and music - -Si quiere añadir imágenes de música a un documento, puede hacerlo -simplemente de la forma en que lo haría con otros tipos de imágenes. -Las imágenes se crean por separado, dando como resultado una salida -PostScript o imágenes PNG, y luego se incluyen en un documento de -@LaTeX{} o de HTML. - -@command{lilypond-book} ofrece una manera de automatizar este proceso: -este programa extrae los fragmentos de música del documento, ejecuta -@command{lilypond} sobre cada uno de ellos, y devuelve como salida el -documento con la música sustituida por las imágenes. Las definiciones -de ancho de línea y tamaño de letra de la música se ajustan de forma -que coincidan con los ajustes de su documento. - -Es un programa distinto a @command{lilypond} propiamente dicho, y se -ejecuta sobre la línea de órdenes; para ver más información, consulte -@ref{Command-line usage}. Si tiene MacOS 10.3 o 10.4 y experimenta -algún problema al ajecutar @code{lilypond-book}, consulte @ref{Setup -for MacOS X}. - -Este procedimiento se puede aplicar a documentos de @LaTeX{}, HTML, -Texinfo o DocBook. - -@cindex texinfo -@cindex latex -@cindex texi -@cindex html -@cindex docbook -@cindex documentos, insertar música en -@cindex HTML, música dentro de -@cindex Texinfo, música dentro de -@cindex DocBook, música dentro de -@cindex @LaTeX{}, música dentro de - -@menu -* An example of a musicological document:: -* Integrating music and text:: -* Music fragment options:: -* Invoking lilypond-book:: -* Filename extensions:: -* Alternate methods of mixing text and music:: -@end menu - - -@node An example of a musicological document -@section An example of a musicological document - -@cindex musicología -Ciertos textos contienen ejemplos musicales. Son tratados musicales, -cancioneros o manuales como este mismo. Estos textos se pueden hacer -a mano, importando simplemente una imagen en formato PostScript en el -editor de textos. Sin embargo, hay un procedimiento automático para -reducir la carga de trabajo que esto implica los documentos de HTML, -@LaTeX{}, Texinfo y DocBook. - -Un guión ejecutable llamado @code{lilypond-book} extrae los fragmentos -de música, les da formato y vuelve a poner en su lugar la partitura -resultante. A continuación presentamos un pequeño ejemplo de su -utilización con @LaTeX{}. El ejemplo contiene también texto -explicativo, por lo que no vamos a comentarlo posteriormente. - -@subheading Input - -@quotation -@verbatim -\documentclass[a4paper]{article} - -\begin{document} - -Los documentos para \verb+lilypond-book+ pueden mezclar libremente -música y texto. Por ejemplo: - -\begin{lilypond} -\relative c' { - c2 g'2 \times 2/3 { f8 e d } c'2 g4 -} -\end{lilypond} - -Las opciones se escriben entre corchetes. - -\begin[fragment,quote,staffsize=26,verbatim]{lilypond} - c'4 f16 -\end{lilypond} - -Los ejemplos grandes se pueden grabar en archivos separados e -introducirse con \verb+\lilypondfile+. - -\lilypondfile[quote,noindent]{screech-boink.ly} - -(Si es necesario, sustituya screech-boink.ly por cualquier archivo .ly -situado en el mismo directorio que este archivo.) - -\end{document} -@end verbatim -@end quotation - -@subheading Processing - -Guarde el código anterior como un archivo llamado -@file{lilybook.lytex}, y luego ejecute en un terminal: - -@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{Leyendo lilybook.lytex...} -@emph{..montañas de mensajes suprimidos..} -@emph{Compilando lilybook.tex...} -cd out -pdflatex lilybook -@emph{..montañas de mensajes suprimidos..} -xpdf lilybook -@emph{(sustituya @command{xpdf} por su visor de PDF favorito)} -@end example - -La ejecución de @command{lilypond-book} y @command{latex} crea un gran -número de archivos temporales, que podrían abarrotar el directorio de -trabajo. Para poner remedio a esto utilice la opción -@code{--output=@var{directorio}}. Creará los archivos en un subdirectorio -aparte @file{directorio}. - -Finalmente el resultado del ejemplo de @LaTeX{} que acabamos de -mostrar@footnote{Este tutorial se procesa con Texinfo, por lo que el -ejemplo presenta un resultado en la disposición ligeramente -distinto.}. Así acaba la sección del tutorial. - -@page - -@subheading Output - -Los documentos para @command{lilypond-book} pueden mezclar libremente -música y texto. Por ejemplo: - -@lilypond -\relative c' { - c2 g'2 \times 2/3 { f8 e d } c'2 g4 -} -@end lilypond - -Las opciones se escriben entre corchetes. - -@lilypond[fragment,quote,staffsize=26,verbatim] -c'4 f16 -@end lilypond - -Los ejemplos grandes se pueden grabar en archivos separados e -introducirse con @code{\lilypondfile}. - -@lilypondfile[quote,noindent]{screech-boink.ly} - - -@page - -@node Integrating music and text -@section Integrating music and text - -Aquí vamos a explicar cómo integrar LilyPond con algunos otros -formatos de salida. - -@menu -* LaTeX:: -* Texinfo:: -* HTML:: -* DocBook:: -@end menu - -@node LaTeX -@subsection @LaTeX{} - -@LaTeX{} es el estándar de facto para la publicación en el mundo de -las ciencias exactas. Está construido encima del motor de composición -tipográfica @TeX{}, proporcionando la tipografía de mejor calidad que -existe. - -Consulte -@uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/english/, -@emph{The Not So Short Introduction to @LaTeX{}}} (Introducción no tan -breve a @LaTeX{}) para ver una panorámica sobre cómo usar @LaTeX{}. - -La música se introduce usando - -@example -\begin[las,opciones,van,aquí]@{lilypond@} - EL CÓDIGO DE LILYPOND -\end@{lilypond@} -@end example - -@noindent -o bien - -@example -\lilypondfile[las,opciones,van,aquí]@{@var{archivo}@} -@end example - -@noindent -o bien - -@example -\lilypond@{ EL CÓDIGO DE LILYPOND @} -@end example - -De forma adicional, @code{\lilypondversion} imprime la versión actual -de lilypond. - -La ejecución de @command{lilypond-book} deja como resultado un archivo -que se puede procesar posteriormente con @LaTeX{}. - -A continuación mostramos algunos ejemplos. El entorno @code{lilypond} - -@example -\begin[quote,fragment,staffsize=26]@{lilypond@} - c' d' e' f' g'2 g'2 -\end@{lilypond@} -@end example - -@noindent -produce - -@lilypond[quote,fragment,staffsize=26] -c' d' e' f' g'2 g'2 -@end lilypond - -La versión corta - -@example -\lilypond[quote,fragment,staffsize=11]@{@} -@end example - -@noindent -produce - -@lilypond[quote,fragment,staffsize=11]{} - -@noindent -Por el momento no es posible incluir llaves @code{@{} o @code{@}} -dentro de @code{\lilypond@{@}}, así que esta instrucción solamente es -útil con la opción @code{fragment}. - -El ancho predeterminado de las líneas de música se ajusta mediante el -examen de las instrucciones del preámbulo del documento, la parte del -documento que está antes de @code{\begin@{document@}}. La instrucción -@command{lilypond-book} los envía a @LaTeX{} para averiguar la anchura -del texto. El ancho de la línea para los fragmentos de música se -ajusta entonces al ancho del texto. Observe que este algoritmo -heurístico puede fácilmente fallar; en estos casos es necesario usar -la opción @code{line-width} del fragmento de música. - -@cindex títulos y lilypond-book -@cindex \header dentro de documentos @LaTeX{} - -Cada fragmento ejecutará los macros siguientes si han sido definidos -por el usuario: - -@itemize @bullet -@item @code{\preLilyPondExample} que se llama antes de la música, - -@item @code{\postLilyPondExample} que se llama después de la música, - -@item @code{\betweenLilyPondSystem[1]} se llama entre los sistemas si -@code{lilypond-book} ha dividido el fragmento en varios archivos -PostScript. Se debe definir de forma que tome un parámetro y recibirá -el número de archivos ya incluidos dentro del fragmento actual. La -acción predeterminada es simplemente insertar 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 - -A veces es útil mostrar elementos de música (como ligaduras) como si -continuasen más allá del final del fragmento. Esto se puede hacer -dividiendo el pentagrama y suprimiendo la inclusión del resto de la -salida de LilyPond. - -En @LaTeX{}, defina @code{\betweenLilyPondSystem} de tal forma que la -la inclusión de otros sistemas se dé por terminada una vez que se ha -alcanzado el número deseado de sistemas requeridos. Puesto que -@code{\betweenLilypondSystem} se llama en primer lugar @emph{después} -del primer sistema, incluir solamente el primer sistema es algo -trivial. - -@example -\def\betweenLilyPondSystem#1@{\endinput@} - -\begin[fragment]@{lilypond@} - c'1\( e'( c'~ \break c' d) e f\) -\end@{lilypond@} -@end example - -Si se necesita un mayor número de sistemas, se tiene que usar un -condicional de @TeX{} antes del @code{\endinput}. En este ejemplo, -sustituya el @q{2} por el número de sistemas que quiere en la salida: - -@example -\def\betweenLilyPondSystem#1@{ - \ifnum##1<2\else\endinput\fi -@} -@end example - -Recuerde que la definición de @code{\betweenLilyPondSystem} es -efectiva hasta que @TeX{} abandona el grupo actual (como el entorno -@LaTeX{}) o se sobreescribe por otra definición (lo que casi siempre -es por el resto del documento). Para reponer la definición, escriba - -@example -\let\betweenLilyPondSystem\undefined -@end example - -@noindent -dentro de la fuente de @LaTeX{}. - -Se puede simplificar esto definiendo un macro de @TeX{}: - -@example -\def\onlyFirstNSystems#1@{ - \def\betweenLilyPondSystem##1@{\ifnum##1<#1\else\endinput\fi@} -@} -@end example - -@noindent -y luego diciendo solamente cuántos sistemas quiere antes de cada -fragmento: - -@example -\onlyFirstNSystems@{3@} -\begin@{lilypond@}...\end@{lilypond@} -\onlyFirstNSystems@{1@} -\begin@{lilypond@}...\end@{lilypond@} -@end example - - -@seealso -Hay opciones de línea de órdenes específicas de -@command{lilypond-book} y otros detalles que conocer para procesar -documentos de@LaTeX{} véase @ref{Invoking lilypond-book}. - - -@node Texinfo -@subsection Texinfo - -Texinfo es el formato estándar para la documentación del proyecto GNU. -Este mismo manual es un ejemplo de documento Texinfo. Las versiones -HTML, PDF e Info del manual se hacen a partir del documento Texinfo. - - -En el archivo de entrada, la música se especifica con - -@example -@@lilypond[las,opciones,van,aquí] - EL CÓDIGO DE LILYPOND -@@end lilypond -@end example - -@noindent -o bien - -@example -@@lilypond[las,opciones,van,aquí]@{ EL CÓDIGO DE LILYPOND @} -@end example - -@noindent -o bien - -@example -@@lilypondfile[las,opciones,van,aquí]@{@var{archivo}@} -@end example - -De forma adicional, @code{@@lilypondversion} imprime la versión actual -de lilypond. - -Cuando se ejecuta @command{lilypond-book} sobre el archivo, se obtiene -como resultado un archivo Texinfo (con la extensión @file{.texi}) que -contiene etiquetas @code{@@image} para el HTML, Info y la salida -impresa. @command{lilypond-book} genera imágenes de la música en -formatos EPS y PDF para usarlos en la salida impresa, y en formato PNG -para usarlos en las salidas HTML e Info. - -Aquí podemos ver dos ejemplos sencillos. Un entorno @code{lilypond} - -@example -@@lilypond[fragment] -c' d' e' f' g'2 g' -@@end lilypond -@end example - -@noindent -produce - -@lilypond[fragment] -c' d' e' f' g'2 g' -@end lilypond - -La versión corta - -@example -@@lilypond[fragment,staffsize=11]@{@} -@end example - -@noindent -produce - -@lilypond[fragment,staffsize=11]{} - -No como @LaTeX{}, @code{@@lilypond@{...@}} no genera una imagen en -línea. Siempre consiste en un párrafo para ella sola. - - -@node HTML -@subsection HTML - -La música se introduce usando - -@example - -\key c \minor c4 es g2 - -@end example - -@noindent -@command{lilypond-book} entonces produce un archivo HTML con las -etiquetas de imagen adecuadas para los fragmentos de música: - -@lilypond[fragment,relative=2] -\key c \minor c4 es g2 -@end lilypond - -Para imágenes en línea, utilice @code{}, donde las -opciones están separadas de la música por el símbolo de dos puntos, -por ejemplo - -@example -Algo de música dentro de una línea de texto. -@end example - -Para incluir archivos externos, escriba - -@example -@var{archivo} -@end example - -De forma adicional, @code{} imprime la versión -actual de lilypond. - -@cindex títulos en HTML -@cindex vista previa, imagen -@cindex miniatura - -@node DocBook -@subsection DocBook - -Para insertad fragmentos de LilyPond es bueno tratar de mantener la -conformidad del documento de DocBook, permitiendo así el uso de -editores de DocBook, validación, etc. Así pues, no usamos etiquetas -personalizadas, sólo especificamos una convención basada en los -elementos estándar de DocBook. - -@subheading Common conventions - -Para insertar toda clase de fragmentos utilizamos los elementos -@code{mediaobject} y @code{inlinemediaobject}, de forma que nuestros -fragmentos puedan ser formateados en línea o no en línea. Las -opciones de formateo del fragmento se escriben siempre dentro de la -propiedad @code{role} del elemento más interno (véanse las secciones -siguientes). Las etiquetas se eligen de forma que permitan a los -editores de DocBook formatear el contenido satisfactoriamente. Los -archivos de DocBook que se van a procesar con @command{lilypond-book} -deben tener la extensión @file{.lyxml}. - -@subheading Including a LilyPond file - -Este es el caso más sencillo. Debemos usar la extensión @file{.ly} -para el archivo incluido, e insertarlo como un @code{imageobject} -estándar, con la estructura siguiente: - -@example - - - - - -@end example - -Observe que puede usar mediaobject o inlinemediaobject como el -elemento más externo, a elección suya. - -@subheading Including LilyPond code - -Se puede incluir código de LilyPond mediante la utilización de un -elemento @code{programlisting}, en que el lenguaje se establece como -@code{lilypond} con la estructura siguiente: - -@example - - - -\context Staff \with @{ - \remove Time_signature_engraver - \remove Clef_engraver@} - @{ c4( fis) @} - - - -@end example - -Como puede ver, el elemento más externo es un @code{mediaobject} o un -@code{inlinemediaobject}, y hay un elemento @code{textobject} que -lleva el @code{programlisting} en su interior. - -@subheading Processing the DocBook document - -Al ejecutar @command{lilypond-book} sobre el archivo @file{.lyxml} se -creará un documento de DocBook válido que se puede procesar -posteriormente con la extensión @file{.xml}. Si usa -@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex}, creará un -archivo PDF a partir de este documento automáticamente. Para la -generación de HTML (HTML Help, JavaHelp, etc.) puede usar las hojas de -estilo oficiales XSL de DocBook, aunque es posible que tenga que -aplicarles algún tipo de personalización. - - -@node Music fragment options -@section Music fragment options - -Durante los próximos párrafos, una @q{instrucción de LilyPond} se -refiere a cualquier instrucción descrita en las secciones anteriores -que se maneja por parte de @command{lilypond-book} para que produzca -un fragmento de música. Por simplicidad, las instrucciones de -LilyPond solamente se muestran en la sintaxis de @LaTeX{}. - -Observe que la cadena de opciones se analiza de izquierda a derecha; -si una opción aparece varias veces, se toma la última solamente. - -Están disponibles las siguientes opciones para las instrucciones de -LilyPond: - -@table @code -@item staffsize=@var{altura} -Establecer la altura del pentagrama como @var{altura}, medida en -puntos. - -@item ragged-right -Producir líneas no justificadas por la derecha y con espaciado -natural, es decir, se añade @code{ragged-right = ##t} al fragmento de -LilyPond. Esta es la opción predeterminada para la instrucción -@code{\lilypond@{@}} si no está presente la opción @code{line-width}. -También es la opción predeterminada para el entorno @code{lilypond} si -está establecida la opción @code{fragment}, y no se especifica la -anchura de la línea explícitamente. - -@item noragged-right -Para fragmentos de una sola línea, permitir que la longitud del -pentagrama se amplíe hasta igualar la anchura de la línea, es decir, -se añade @code{ragged-right = ##f} al fragmento de LilyPond. - -@item line-width -@itemx line-width=@var{tamaño}\@var{unidades} -Establecer el ancho de línea como @var{tamaño}, utilizando -@var{unidades} como unidad. @var{unidades} es una de las siguientes -cadenas: @code{cm}, @code{mm}, @code{in} o @code{pt}. Esta opción -afecta a la salida de LilyPond (esto es, a la longitud del pentagrama -del fragmento musical), no al formato del texto. - -Si se usa sin ningún argumento, se establece el ancho de la línea a un -valor predeterminado (calculado con un algoritmo heurístico). - -Si no se da ninguna opción @code{line-width}, @command{lilypond-book} -trata de adivinar un valor predeterminado para los entornos -@code{lilypond} que no usan la opción @code{ragged-right}. - -@item notime -No imprimir la indicación de compás, y desactivar las indicaciones -temporales de la música (indicación del compás y líneas divisorias). - -@item fragment -Hacer que @command{lilypond-book} añada algunos códigos necesarios -para que podamos escribir simplemente, por ejemplo, - -@example -c'4 -@end example - -@noindent -sin @code{\layout}, @code{\score}, etc. - -@item nofragment -No añadir escribir el código adicional que completa la sintaxis de -LilyPond en los fragmentos de música. Al ser la opción -predeterminada, @code{nofragment} normalmente es redundante. - -@item indent=@var{tamaño}\@var{unidades} -Establecer el sangrado del primer sistema de pentagramas como -@var{tamaño}, utilizando @var{unidades} como unidad. @var{unidades} es -una de las siguientes cadenas: @code{cm}, @code{mm}, @code{in} o -@code{pt}. Esta opción afecta a LilyPond, no al formato del texto. - -@item noindent -Establecer el sangrado del primer sistema de la música como cero. -Esta opción afecta a LilyPond, no al formato del texto. Puesto que el -valor predeterminado es que no haya ningún sangrado, @code{noindent} -normalmente es redundante. - -@item quote -Reducir la longitud de la línea de un fragmento musical en -@math{2*0.4}@dmn{in} (pulgadas) y colocar la salida dentro de un -bloque de cita (quotation). El valor de @q{0.4@dmn{in}} se puede -controlar con la opción @code{exampleindent}. - -@item exampleindent -Establecer la longitud del sangrado que la opción @code{quote} aplica -al fragmento musical. - -@item relative -@itemx relative=@var{n} -Usar el modo de octava relativa. De forma predeterminada, las notas -se especifican con relación al Do@tie{}central. El argumento entero -opcional especifica la octava de la nota inicial, donde el valor -predeterminado @code{1} es el Do central. La opción @code{relative} -sólo funciona cuando está establecida la opción @code{fragment}, de -manera que @code{fragment} viene implicada automáticamente por -@code{relative}, independientemenre de la presencia de @code{fragment} -o de @code{nofragment} en la fuente. - -@end table - -LilyPond utiliza también @command{lilypond-book} para producir su -propia documentación. Para hacerlo, están a nuestra disposición -ciertas opciones algo esotéricas para los fragmentos musicales. - -@table @code -@item verbatim -El argumento de una instrucción de LilyPond se copia al archivo de -salida y se incluye dentro de un bloque «verbatim» o preformateado, -seguido del texto que se escriba con la opción @code{intertext} (que -no funciona aún); después se imprime la música en sí. Esta opción no -funciona bien con @code{\lilypond@{@}} si forma parte de un párrafo. - -Si se usa la opción @code{verbatim} dentro de una instrucción -@code{lilypondfile}, es posible incluir con estilo preformateado sólo -una parte del archivo fuente. Si el archivo de código fuente contiene -un comentario que contiene @samp{begin verbatim} (sin las comillas), -la cita del bloque de estilo preformateado empezará después de la -última vez que aparezca este comentario; de forma similar, la cita del -bloque preformateado se detendrá justo antes de la primera vez que -aparezca un comentario que contenga @samp{end verbatim}, si lo hay. -En el siguiente ejemplo de código fuente, la música se interpreta en -el modo relativo, pero la cita preformateada no presentará el bloque -@code{relative}, es decir - -@example -\relative c' @{ % begin verbatim - c4 e2 g4 - f2 e % end verbatim -@} -@end example - -@noindent -se imprimirá como un bloque preformateado como - -@example - c4 e2 g4 - f2 e -@end example - -@noindent -Si queremos traducir los comentarios y los nombres de variable en la -salida literal pero no en el código fuente, podemos establecer el -valor de la variable de entorno @code{LYDOC_LOCALEDIR} a la ruta de un -directorio; este directorio debe contener un árbol de catálogos de -mensajes @file{.mo} con @code{lilypond-doc} como dominio. - -@item addversion -(Sólo para la salida de Texinfo.) Anteponer la línea @code{\version -@@w@{"@@version@{@}"@}} a la salida de @code{verbatim}. - -@item texidoc -(Sólo para la salida de Texinfo.) Si se llama a @command{lilypond} -con la opción @option{--header=@/texidoc}, y el archivo que se procesa -se llama @file{fulanito@/.ly}, crea un archivo -@file{fulanito@/.texidoc} si existe un campo @code{texidoc} dentro del -bloque @code{\header} de cabecera. La opción @code{texidoc} hace que -@command{lilypond-book} incluya estos archivos, añadiendo su contenido -como un bloque de documentación inmediatamente antes del fragmento -musical. - -Suponiendo que el archivo @file{fulanito@/.ly} contiene - -@example -\header @{ - texidoc = "Este archivo es un ejemplo de una sola nota." -@} -@{ c'4 @} -@end example - -@noindent -y que tenemos lo siguiente en nuestro documento de Texinfo -@file{prueba.texinfo} - -@example -@@lilypondfile[texidoc]@{fulanito.ly@} -@end example - -@noindent -la siguiente orden da como salida el resultado esperado: - -@example -lilypond-book --pdf --process="lilypond \ - -dbackend=eps --header=texidoc" test.texinfo -@end example - -La mayoría de los documentos de prueba de LilyPond (en el directorio -@file{input} de la distribución) son pequeños archivos @file{.ly} que -tienen exactamente este aspecto. - -Por motivos de localización de idioma, si el documento de Texinfo -contiene @code{@@documentlanguage @var{LANG}} y la cabecera de -@file{loquesea@/.ly} contiene un campo @code{texidoc@var{LANG}}, y -@command{lilypond} se ejecuta con -@option{--header=@/texidoc@var{LANG}}, entonces se incluirá -@file{loquesea@/.texidoc@var{LANG}} en lugar de -@file{loquesea@/.texidoc}. - -@item lilyquote -(Sólo para la salida de Texinfo.) Esta opción es similar a quote, -pero se pone dentro del bloque de cita solamente el fragmento de -música (y el bloque preformateado que se da en la opción -@code{verbatim}). Esta opción es útil si queremos citar -(@code{quote}) el fragmento musical pero no el bloque de documentación -@code{texidoc}. - -@item doctitle -(Sólo para la salida de Texinfo.) Esta opción funciona de forma -parecida a la opción @code{texidoc}: si @command{lilypond} se llama -con la opción @option{--header=@/doctitle}, y el archivo que procesar -se llama @file{loquesea@/.ly} y contiene un campo @code{doctitle} en -el bloque @code{\header}, crea un archivo @file{loquesea@/.doctitle}. -Cuando se usa la opción @code{doctitle}, el contenido de -@file{loquesea@/.doctitle}, que debería ser una línea única de -@var{texto}, se inserta en el documento de Texinfo como -@code{@@lydoctitle @var{texto}}. @code{@@lydoctitle} debe ser un -macro definido en el documento de Texinfo. La misma indicación -referida al procesado de @code{texidoc} con idiomas localizados se -aplica a @code{doctitle}. - -@item nogettext -(Sólo para la salida de Texinfo.) No traducir los comentarios y -nombres de variable en el fragmento de código literal citado. - -@item printfilename -Si un archivo de entrada de LilyPond se incluye con -@code{\lilypondfile}, imprimir el nombre del archivo inmediatamente -antes del fragmento musical. Para la salida HTML, esto es un enlace. -Sólo se imprime el nombre base del archivo, es decir, se elimina la -parte del directorio de la ruta del archivo. - -@item fontload -Esta opción incluye las fuentes tipográficas en todos los archivos EPS -generados para este fragmento. Se debe usar si el fragmento usa -cualquier tipografía que @LaTeX{} no es capaz de encontrar por sí -solo. - -@end table - - -@node Invoking lilypond-book -@section Invoking @command{lilypond-book} - -@command{lilypond-book} produce un archivo con una de las siguientes -extensiones: @file{.tex}, @file{.texi}, @file{.html} o @file{.xml}, -dependiendo del formato de salida. Todos los archivos @file{.tex}, -@file{.texi} y @file{.xml} necesitan un procesado posterior. - -@subheading Format-specific instructions - -@subsubheading @LaTeX{} - -Hay dos formas de procesar el documento en @LaTeX{} para su impresión -o publicación: hacer un archivo PDF directamente con PDF@LaTeX{}, o -generar un archivo PostScript con @LaTeX{} a través de un traductor de -DVI a PostScript como @command{dvips}. la primera forma es más -sencilla y es la que se recomienda@footnote{Observe que PDF@LaTeX{} y -@LaTeX{} podrían no ser utilizables para compilar cualquier documento -@LaTeX{}, y es por lo que explicamos las dos formas.}, y cualquiera -que sea el método que utilice, podrá convertir fácilmente entre -PostScript y PDF con herramientas como @command{ps2pdf} y -@command{pdf2ps} que vienen incluidas con Ghostscript. - -Para producir un archivo PDF por medio de PDF@LaTeX{}, utilice - -@example -lilypond-book --pdf miarchivo.pdftex -pdflatex miarchivo.tex -@end example - -@cindex tipografías de outline -@cindex type1, tipografías -@cindex dvips -@cindex invocación de dvips - -Para producir una salida PDF por medio de -@LaTeX{}/@command{dvips}/@command{ps2pdf}, debe hacer - -@example -lilypond-book miarchivo.lytex -latex miarchivo.tex -dvips -Ppdf miarchivo.dvi -ps2pdf miarchivo.ps -@end example - -@noindent -El archivo @file{.dvi} creado por este proceso no contiene las cabezas -de las notas. Esto es normal; si sigue las instrucciones, las cabezas -aparecerán en los archivos @file{.ps} y @file{.pdf}. - -La ejecución de @command{dvips} puede dar como resultado algunas -advertencias sobre las fuentes tipográficas; son inocuas y se pueden -ignorar. Si está ejecutando @command{latex} en modo de dos columnas, -recuerde añadir @code{-t landscape} a las opciones de @command{dvips}. - -@subsubheading Texinfo - -Para producir un documento de Texinfo (en cualquier formato de -salida), siga el procedimiento normal para Texinfo, esto es: o bien -llame a @command{texi2pdf} o a @command{texi2dvi} o a -@command{makeinfo}, según el formato de la salida que quiera crear. -@ifinfo -@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, y @ref{Creating -an Info File, , , texinfo, GNU Texinfo}. -@end ifinfo -@ifnotinfo -Consulte la documentación de Texinfo para ver más detalles. -@end ifnotinfo - - -@subheading Command line options - -@command{lilypond-book} acepta las siguientes opciones de la línea de -órdenes: - -@table @code -@item -f @var{formato} -@itemx --format=@var{formato} -Especificar el tipo del documento que se va a procesar: @code{html}, -@code{latex}, @code{texi} (predeterminado) o @code{docbook}. Si falta -esta opción, @command{lilypond-book} tratará de detectar el formato -automáticamente, véase @ref{Filename extensions}. Por el momento, -@code{texi} es lo mismo que @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} -Conducir los fragmentos a través de @var{filter} por medio de una -tubería. @code{lilypond-book} no obedecerá --filter y --process al -mismo tiempo. Por ejemplo, - -@example -lilypond-book --filter='convert-ly --from=2.0.0 -' mi-libro.tely -@end example - -@item -h -@itemx --help -Imprimir un breve mensaje de ayuda. - -@item -I @var{directorio} -@itemx --include=@var{directorio} -Añadir @var{directorio} a la ruta de inclusión. -@command{lilypond-book} busca también los fragmentos ya compilados en -la ruta de inclusión, y no los vuelve a escribir en el directorio de -salida, así que en ciertos casos es necesario invocar instrucciones de -procesado posteriores como @command{makeinfo} o @command{latex} con -las mismas opciones @code{-I @var{directorio}}. - -@item -o @var{directorio} -@itemx --output=@var{directorio} -Colocar los archivos generados en el @var{directorio}. La ejecución -de @command{lilypond-book} genera montañas de pequeños archivos que -luego procesará LilyPond. Para evitar toda esta parafernalia en el -mismo directorio que la fuente, utilice la opción @option{--output}, y -cambie a este directorio antes de ejecutar @command{latex} o -@command{makeinfo}. - -@example -lilypond-book --output=out miarchivo.lytex -cd out -... -@end example - -@itemx --skip-lily-check -Evitar el fracaso si no se encuentra ninguna salida de lilypond. Se -usa para la documentación de LilyPond en formato Info sin imágenes. - -@itemx --skip-png-check -Evitar el fracaso si no se encuentran las imágenes PNG de los archivos -EPS. Se usa para la documentación de LilyPond en formato Info sin -imágenes. - -@itemx --lily-output-dir=@var{directorio} -Escribir archivos lily-XXX en el directorio @var{directorio}, enlazar -en el directorio de @code{--output}. Use esta opción para ahorrar -tiempo de construcción para documentos de distintos directorios que -comparten muchos fragmentos idénticos de código. - -@itemx --info-images-dir=@var{directorio} -Dar formato a la salida de Texinfo de manera que Info busque las -imágenes de música en @var{directorio}. - -@itemx --latex-program=@var{prog} -Ejecutar el propgrama @command{prog} en vez de @command{latex}. Esto -es útil si nuestro documento se procesa con @command{xelatex}, por -ejemplo. - -@itemx --left-padding=@var{cantidad} -Rellenar las cajas EPS en esta medida, alrededor. @var{cantidad} se -mide en milímetros, y es 3.0 como valor predeterminado. Esta opción -se debe usar si las líneas de música están muy pegadas al margen -derecho. - -El ancho de un sistema que está muy ajustado dentro de su rectángulo -puede variar, debido a los elementos de notación que están pegados al -margen izquierdo, como los números de compás y el nombre del -instrumento. Esta opción acorta todas las líneas y las mueve a la -derecha en la misma medida. - - -@item -P @var{instrucción} -@itemx --process=@var{instrucción} -Procesar los fragmentos de LilyPond utilizando @var{instrucción}. La -instrucción predeterminada es @code{lilypond}. @code{lilypond-book} no -obedecerá a @code{--filter} y a @code{--process} al mismo tiempo. - -@item --pdf -Crear archivos PDF para su uso con PDF@LaTeX{}. - -@itemx --psfonts -Extraer todas las tipografías PostScript en -@file{@var{archivo}.psfonts} para dvips. Esto es necesario para -@command{dvips -h @var{archivo}.psfonts}. - -@item -V -@itemx --verbose -Ser prolijo. - -@item -v -@itemx --version -Imprimir la información de la versión. -@end table - -@knownissues - -La instrucción de Texinfo @code{@@pagesizes} no se interpreta. De -forma similar, las instrucciones de @LaTeX{} que cambian los márgenes -y anchos de línea después del preámbulo se ignoran. - -Sólo se procesa el primer @code{\score} de un bloque LilyPond. - - -@node Filename extensions -@section Filename extensions - -Puede usar cualquier extensión para el nombre del archivo de entrada, -pero si no usa la extensión recomendada para un formato en particular -tendrá que especificar manualmente el formato de salida; para ver más -detalles, consulte @ref{Invoking lilypond-book}. En caso contrario, -@command{lilypond-book} selecciona automáticamente el formato de -salida basándose en la extensión del nombre del archivo de entrada. - -@quotation -@multitable @columnfractions .2 .5 -@item @strong{extensión} @tab @strong{formato de salida} -@item -@item @file{.html} @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 - -Si usa la misma extensión para el archivo de entrada que la que usa -@command{lilypond-book} para el archivo de salida, y si el archivo de -entrada está en el mismo directorio que el directorio de trabajo de -@command{lilypond-book}, debe usar la opción @code{--output} para que -funcione @command{lilypond-book}, pues en caso contrario saldrá con un -mensaje de error como @qq{La salida sobreescribirá al archivo de -entrada}. - - -@node Alternate methods of mixing text and music -@section Alternative methods of mixing text and music - -Esta sección presenta métodos para integrar texto y música distintos -del método automatizado con @command{lilypond-book}. - -@menu -* Many quotes from a large score:: -* Inserting LilyPond output into OpenOffice.org:: -* Inserting LilyPond output into other programs:: -@end menu - -@node Many quotes from a large score -@unnumberedsubsec Many quotes from a large score - -Si tiene que citar muchos fragmentos extraídos de una partitura grade, -puede también usar la capacidad de recorte de sistemas, véase -@ruser{Extracting fragments of music}. - - -@node Inserting LilyPond output into OpenOffice.org -@unnumberedsubsec Inserting LilyPond output into OpenOffice.org - -@cindex OpenOffice.org - -Se puede añadir notación de LilyPond a los documentos de -OpenOffice.org con -@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. - - -@node Inserting LilyPond output into other programs -@unnumberedsubsec Inserting LilyPond output into other programs - -Para insertar la salida de LilyPond dentro de otros programas, use -@code{lilypond} en vez de @code{lilypond-book}. Cada ejemplo debe -crearse individualmente y añadirse al documento; consulte la -documentación del programa correspondiente. La mayoría de los -programas podrán insertar la salida de LilyPond en los formatos -@file{PNG}, @file{EPS} o @file{PDF}. - -Para reducir el espacio vacío alrededor de la partitura de LilyPond, -utilice las siguientes opciones: - -@example -\paper@{ - indent=0\mm - line-width=120\mm - oddFooterMarkup=##f - oddHeaderMarkup=##f - bookTitleMarkup = ##f - scoreTitleMarkup = ##f -@} - -@{ c1 @} -@end example - -Para obtener un archivo @file{EPS} que sea útil, utilice - -@example -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts miarchivo.ly - -@file{PNG}: -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png miarchivo.ly -@end example diff --git a/Documentation/es/user/lilypond-learning.tely b/Documentation/es/user/lilypond-learning.tely deleted file mode 100644 index c570e2f545..0000000000 --- a/Documentation/es/user/lilypond-learning.tely +++ /dev/null @@ -1,207 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: c7d6848e128f461a4cec093f7a71a34b2dc314eb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@documentlanguage es -@setfilename lilypond-learning.info -@settitle Manual de aprendizaje de GNU LilyPond - -@include macros.itexi - -@afourpaper - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Learning Manual of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage Spanish -@end ignore - -@c Translators: Francisco Vila - -@ifnottex -@node Top -@top GNU LilyPond: Manual de aprendizaje -@end ifnottex - -@ifhtml -@ifclear bigpage -Este documento también está disponible en formato -@uref{source/Documentation/user/lilypond-learning.es.pdf,PDF} y como -@uref{source/Documentation/user/lilypond-learning-big-page.es.html,una sola página}. -@end ifclear -@ifset bigpage -Este documento también está disponible en formato -@uref{source/Documentation/user/lilypond-learning.es.pdf,PDF} y como -@uref{source/Documentation/user/lilypond-learning/index.es.html,un documento HTML normal de muchas páginas}. -@end ifset -@end ifhtml - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle El tipografiador de música -@titlefont{Manual de aprendizaje} -@author El equipo de desarrollo de LilyPond - - -Copyright @copyright{} 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Para LilyPond versión @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@c TRANSLATE ME -@ifnottex -Este archivo es la documentación de GNU LilyPond orientada a quienes empiezan con el programa. - -Copyright @copyright{} 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@c TRANSLATE ME -@ifnottex -El presente documento es el manual de aprendizaje de GNU LilyPond, -versión @version{}. Para ver más información sobre la relación entre -éste y el resto de los documentos, consulte @ref{About the -documentation}. - -@cindex web, página -@cindex página web -@cindex URL - -Encontrará más información en -@uref{http://@/www@/.lilypond@/.org/}. La página web contiene copias -en línea de la presente y otras documentaciones. - -@menu -* Preface:: Prefacio. -* Introduction:: Qué, por qué y cómo. -* Tutorial:: Introducción en forma de tutorial. -* Fundamental concepts:: Conceptos básicos necesarios para leer el resto de este manual. -* Tweaking output:: Introducción a las modificaciones de la salida. -* Working on LilyPond projects:: Sobre la utilización en el mundo real. - -Apéndices - -* Templates:: Plantillas listas para usar. -* Scheme tutorial:: Programar dentro de LilyPond. -* GNU Free Documentation License:: La licencia de este documento. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include preface.itely -@include introduction.itely -@include tutorial.itely -@include fundamental.itely -@include tweaks.itely -@include working.itely - -@include templates.itely -@include scheme-tutorial.itely -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/es/user/lilypond-program.tely b/Documentation/es/user/lilypond-program.tely deleted file mode 100644 index 81c53d7f56..0000000000 --- a/Documentation/es/user/lilypond-program.tely +++ /dev/null @@ -1,202 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: c7d6848e128f461a4cec093f7a71a34b2dc314eb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@documentlanguage es -@setfilename lilypond-program.info -@settitle GNU LilyPond: manual de utilización del programa - -@include macros.itexi - -@afourpaper - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Program Usage of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - -@c Translators: Francisco Vila - -@ifnottex -@node Top -@top GNU LilyPond: Manual de utilización del programa -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - - -@ifhtml -@ifclear bigpage -Este documento también está disponible en formato -@uref{source/Documentation/user/lilypond-program.es.pdf,PDF} y como -@uref{source/Documentation/user/lilypond-program-big-page.es.html,una sola página}. -@end ifclear -@ifset bigpage -Este documento también está disponible en formato -@uref{source/Documentation/user/lilypond-program.es.pdf,PDF} y como -@uref{source/Documentation/user/lilypond-program/index.es.html,un documento HTML normal de muchas páginas}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle El tipografiador de música -@titlefont{Utilización del programa} -@author El equipo de desarrollo de LilyPond - - -Copyright @copyright{} 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Para LilyPond versión @version{} -@end titlepage - - -@copying -Copyright @copyright{} 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -Este archivo es la documentación de la utilización del programa GNU LilyPond. - -Copyright 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -El presente documento es el manual de utilización del programa GNU -LilyPond, versión @version{}. Para ver más información sobre la -relación entre éste y el resto de los documentos, consulte -@rlearning{About the documentation}. - -@cindex web, página -@cindex página web -@cindex URL - -Se puede encontrar más información en -@uref{http://@/www@/.lilypond@/.org/}. La página web incluye copias -en línea de la presente documentación y de otras. - -@menu -* Install:: Cómo instalarlo o compilarlo. -* Setup:: Utilizar LilyPond con otros programas. -* Running LilyPond:: Funcionamiento. -* LilyPond-book:: Integrar texto y música. -* Converting from other formats:: Convertir al formato del código de entrada de lilypond. - -Apéndices - -* GNU Free Documentation License:: Licencia de este documento. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - -@include install.itely -@include setup.itely -@include running.itely -@include lilypond-book.itely -@include converters.itely - -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/es/user/lilypond.tely b/Documentation/es/user/lilypond.tely deleted file mode 100644 index c43ca09dcd..0000000000 --- a/Documentation/es/user/lilypond.tely +++ /dev/null @@ -1,274 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: c7d6848e128f461a4cec093f7a71a34b2dc314eb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@documentlanguage es -@setfilename lilypond.info -@settitle Referencia de la notación de GNU LilyPond - -@include macros.itexi - -@afourpaper - -@c Keep this here, since it pertains to the direntry below. -@ignore -Distributions will want to install lilypond.info in postinstall, doing: - - install-info --info-dir=/usr/share/info out/lilypond.info - - * Prepend GNU for dir, must be unique. - - * Do not list the `lilypond' node at toplevel, so that `info lilypond' - goes to Top. - - * List all commands in direntry. - -@c * lilypond: (lilypond/lilypond)Running LilyPond. Invoking the -@c LilyPond program. -@end ignore - - -@c -@c Info files are no longer installed in a subdirectory, images are -@c expected to be found in lilypond/ subdirectory. -@dircategory GNU LilyPond: el tipografiador de música. -@direntry -* LilyPond Learning Manual: (lilypond-learning). Comience por aquí. -* Music Glossary: (music-glossary). Para usuarios de habla no inglesa. -* LilyPond: (lilypond). Referencia de la notación con LilyPond. -* LilyPond Internals Reference: (lilypond-internals). Definiciones para el trucaje. -* LilyPond Application Usage: (lilypond-program). Instalar y ejecutar las aplicaciones. -* abc2ly: (lilypond-program)Invocar abc2ly. Importar archivos de ABC. -* convert-ly: (lilypond-program)Actualizar archivos mediante convert-ly. Versiones de LilyPond antiguas. -* etf2ly: (lilypond-program)Invocar etf2ly. Importar archivos de Finale. -* lilypond-book: (lilypond-program)LilyPond-book. Integrar texto y música. -* midi2ly: (lilypond-program)Invocar midi2ly. Importar archivos MIDI. -* musicxml2ly: (lilypond-program)Invocar musicxml2ly. Importar MusicXML. -@end direntry - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Notation Reference of the LilyPond music engraving system -@omftype user manual -@omfcategory Applications|Publishing -@omflanguage Spanish -@end ignore - -@c Translators: Francisco Vila - -@ifnottex -@node Top -@top GNU LilyPond: Manual de referencia de la notación -@chapheading El tipografiador de música -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - - -@ifhtml -@ifclear bigpage -Este documento también está disponible en formato -@uref{source/Documentation/user/lilypond.es.pdf,PDF} y como -@uref{source/Documentation/user/lilypond-big-page.es.html,una sola página}. -@end ifclear -@ifset bigpage -Este documento también está disponible en formato -@uref{source/Documentation/user/lilypond.es.pdf,PDF} y como -@uref{source/Documentation/user/lilypond/index.es.html,un documento HTML normal de muchas páginas}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle El tipografiador de música -@titlefont{Manual de referencia de la notación} -@author El equipo de desarrollo de LilyPond - -Copyright @copyright{} 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Para LilyPond versión @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -Este archivo es la documentación de GNU LilyPond. - -Copyright 1999--2009 por los autores - -@emph{La traducción de la siguiente nota de copyright se ofrece como -cortesía para las personas de habla no inglesa, pero únicamente la -nota en inglés tiene validez legal.} - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@quotation -Se otorga permiso para copiar, distribuir y/o modificar este documento -bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 -o cualquier versión posterior publicada por la Free Software Foundation; -sin ninguna de las secciones invariantes. -Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia -de Documentación Libre de GNU''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -El presente documento es el manual de referencia de la notación del -programa GNU LilyPond, versión @version{}. Para ver más información -sobre la relación entre éste y el resto de los documentos, consulte -@rlearning{About the documentation}. - -@cindex web, página -@cindex página web -@cindex URL - -Se puede encontrar más información en -@uref{http://@/www@/.lilypond@/.org/}. La página web contiene copias -en línea de la presente documentación y de otras. - -@include dedication.itely - -@c TRANSLATE ME -@menu -* Musical notation:: Notación musical. -* Specialist notation:: Notación que solamente se utiliza para propósitos específicos. -* General input and output:: Información general sobre la salida y la entrada de LlilyPond. -* Spacing issues:: Presentación de la salida sobre papel. -* Changing defaults:: Ajuste fino de la salida. -* Interfaces for programmers:: Utilización por expertos. - -Apéndices - -* Literature list:: Obras de referencia sobre notación musical. -* Notation manual tables:: Tablas y cuadros. -* Cheat sheet:: Resumen de la sintaxis de LilyPond. -* GNU Free Documentation License:: Licencia de este documento. -* LilyPond command index:: -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include notation.itely -@include specialist.itely - -@include input.itely -@include spacing.itely - -@include changing-defaults.itely -@include programming-interface.itely - -@include literature.itely -@include notation-appendices.itely -@include cheatsheet.itely -@include fdl.itexi - -@node LilyPond command index -@appendix LilyPond command index - -Este índice relaciona todas las instrucciones y palabras clave de -LilyPond, con enlaces a aquellas secciones del manual que describen o -se ocupan de su uso. Cada uno de los enlaces consta de dos partes. -La primera parte apunta a la situación exacta del manual en que -aparece la instrucción o palabra clave; la segunda parte apunta al -comienzo de la sección correspondiente del manual en la que aparece la -instrucción o palabra clave. - -@printindex ky - -@node LilyPond index -@appendix LilyPond index - -Además de todas las instrucciones y palabras clave de LilyPond, este -índice es una lista de términos musicales y las palabras que tienen -relación con cada uno de ellos, con enlaces a aquellas secciones del -manual que describen o se ocupan de dicho término. Cada uno de los -enlaces consta de dos partes. La primera parte apunta a la situación -exacta del manual en que aparece el término; la segunda parte apunta -al comienzo de la sección correspondiente del manual en la que se -discute dicho término. - -@printindex cp - -@bye diff --git a/Documentation/es/user/literature.itely b/Documentation/es/user/literature.itely deleted file mode 100644 index bfed834bf9..0000000000 --- a/Documentation/es/user/literature.itely +++ /dev/null @@ -1,84 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Literature list -@appendix Literature list - -Si tiene necesidad de aprender más acerca de la notación musical, le presentamos a continuación -algunos títulos interesantes que puede leer. - - - -@table @cite -@item Ignatzek 1995 -Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne -1995. Mainz, Germany ISBN 3-7957-5140-3. - -Instructiva introducción a la interpretación de Jazz al piano. Uno de los primeros -capítulos contiene una panorámica de los acordes más comunes de la música de Jazz. - -@item Gerou 1996 - -Tom Gerou and Linda Lusk, Essential Dictionary of Music -Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. - -Una lista concisa y ordenada alfabéticamente de los problemas de la composición tipográfica y la notación -musical, que abarca la mayor parte de los casos más comunes. - -@item Read 1968 -Gardner Read, Music Notation: A Manual of Modern Practice. -Taplinger Publishing, New York (2nd edition). - -Una obra estándar sobre notación musical. - -@item Ross 1987 -Ted Ross, Teach yourself the art of music engraving and processing. -Hansen House, Miami, Florida 1987. - -Este libro trata del grabado musical, es decir, composición tipográfica profesional. -Contiene instrucciones sobre el estampado, la utilización de las plumillas y las -convenciones notacionales. También son interesantes las secciones sobre los tecnicismos -y la historia de la reproducción. - -@item Schirmer 2001 -The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. -(Este libro se puede pedir al departamento de alquiler.) - -Este manual se centra específicamente en la preparación de los manuscritos para la publicación por -Schirmer. Discute muchos detalles que no se pueden encontrar en otros libros de notación más -normales. También proporciona una buena idea sobre lo que se necesita para llevar la impresión -hasta la calidad editorial. - -@item Stone 1980 - -Kurt Stone, Music Notation in the Twentieth Century. -Norton, New York 1980. - -Este libro describe la notación musical para la música seria moderna, pero -empieza por una amplia panorámica de las prácticas existentes de la notación -tradicional. - -@end table - -El archivo de código fuente incluye una bibliografía de Bib@TeX{} más elaborada con más de -100 elementos, en -@ifhtml -@ifset bigpage -@uref{../bibliography/index.html, the bibliography}. -@end ifset -@ifclear bigpage -@uref{../../bibliography/index.html, the bibliography}. -@end ifclear -@end ifhtml -@ifnothtml -@file{Documentation/@/bibliography/}. -@end ifnothtml - diff --git a/Documentation/es/user/macros.itexi b/Documentation/es/user/macros.itexi deleted file mode 100644 index 3c40e02653..0000000000 --- a/Documentation/es/user/macros.itexi +++ /dev/null @@ -1,344 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 312827f1242ea7d2864659fa292bc9861ac19c6c - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@include version.itexi -@include common-macros.itexi - - -@c ***** Displaying text ***** - -@c To get decent quotes in `foo' and ``foo''. - -@macro q{TEXT} -@quoteleft{}\TEXT\@quoteright{} -@end macro - -@macro qq{TEXT} -@quotedblleft{}\TEXT\@quotedblright{} -@end macro - - -@ifhtml - -@macro warning{TEXT} -@cartouche -@b{Nota:} \TEXT\ -@end cartouche -@end macro - -@end ifhtml - -@ifnothtml - -@macro warning{TEXT} -@quotation -@quotation -@cartouche -@b{Nota:} \TEXT\ -@end cartouche -@end quotation -@end quotation -@end macro - -@end ifnothtml - - - - - - -@c ***** Headings in a doc subsection ***** - -@c Don't insert an empty line after @predefined! Right now -@c it doesn't matter, but a future implementation will probably -@c add some code which needs this restriction. - -@macro predefined -@noindent -@subsubheading Instrucciones predefinidas -@end macro - -@c The next macro is a dummy currently since texinfo doesn't -@c provide a real ragged-right environment yet. -@c -@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) -@c the macro must not be empty. - -@macro endpredefined -@c -@end macro - - -@macro snippets -@noindent -@subsubheading Fragmentos de código seleccionados -@end macro - - -@c * Deprecated: not in English macros.itexi * -@macro commonprop -@noindent -@subsubheading Propiedades trucadas frecuentemente -@end macro - - -@c Don't insert an empty line after @seealso! Otherwise we get -@c unwanted extra vertical space in the PDF output. - -@macro seealso -@noindent -@subsubheading Véase también -@indent -@end macro - - -@macro knownissues -@noindent -@subsubheading Advertencias y problemas conocidos -@end macro - - -@c ***** Links and references ***** - -@c Definitions for references: -@c -@c @rglos -@c @rlearning -@c @ruser -@c @rprogram -@c @rlsr -@c @rinternals -@c -@c All these also have a @...named version which allows to specify the -@c displayed text for the reference as second argument. -@c -@c ***** HTML + bigpage is a special case (other manual names); all other -@c formats are treated similarly. - - -@c *** not TeX *** - -@ifnottex - -@c ** bigpage ** - -@ifset bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary-big-page,Glosario Musical} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Glosario Musical} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning-big-page,Manual de Aprendizaje} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning-big-page,Manual de Aprendizaje} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-big-page,Referencia de la Notación} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-big-page,Referencia de la Notación} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program-big-page,Utilización del Programa} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program-big-page,Utilización del Programa} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets-big-page,Fragmentos de código} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets-big-page,Fragmentos de código} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals-big-page,Referencia de Funcionamiento Interno} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals-big-page,Referencia de Funcionamiento Interno} -@end macro - -@end ifset - - -@c ** not bigpage ** - -@ifclear bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary,Glosario Musical} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary,Glosario Musical} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning,Manual de Aprendizaje} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Manual de Aprendizaje} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond,Referencia de la Notación} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond,Referencia de la Notación} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program,Utilización del Programa} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Utilización del Programa} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets,Fragmentos de código} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Fragmentos de código} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals,Referencia de Funcionamiento Interno} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Referencia de Funcionamiento Interno} -@end macro - -@end ifclear - -@end ifnottex - - -@c *** TeX *** - -@iftex - -@c All commands below should work in the middle of the line; -@c we thus must not use @vindex directly since it works only if placed -@c on a line of its own. To overcome this problem, we define a -@c replacement macro using the internal definition of @vindex which -@c delimits arguments in the standard way (i.e., with braces). - -@tex -\gdef\lilyvindex#1{\doind{vr}{\code #1}\ignorespaces} -@end tex - -@macro rglos{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,music-glossary,Glosario Musical} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,music-glossary,Glosario Musical} -@end macro - -@macro rlearning{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-learning.es,Manual de Aprendizaje} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-learning.es,Manual de Aprendizaje} -@end macro - -@macro ruser{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond.es,Referencia de la Notación} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond.es,Referencia de la Notación} -@end macro - -@macro rprogram{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-program.es,Utilización del Programa} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-program.es,Utilización del Programa} -@end macro - -@macro rlsr{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-snippets,Fragmentos de código} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Fragmentos de código} -@end macro - -@macro rinternals{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-internals,Referencia de Funcionamiento Interno} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Referencia de Funcionamiento Interno} -@end macro - -@end iftex - - - -@c ***** Macros specific to translated docs ***** - - -@macro englishref -Esta sección aún no está traducida; consulte el manual en inglés. -@end macro diff --git a/Documentation/es/user/notation-appendices.itely b/Documentation/es/user/notation-appendices.itely deleted file mode 100644 index 13d74776a6..0000000000 --- a/Documentation/es/user/notation-appendices.itely +++ /dev/null @@ -1,671 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Notation manual tables -@appendix Notation manual tables - -@c Please do not delete the following @ignore block. -@ignore -Note for editors and translators: In the following menu, two entries -are needed to link to a pair of automatically generated sections. -Please keep them and, if using emacs, do not run -texinfo-all-menus-update without manually restoring them back. These -menu entries are: - -* Text markup commands:: -* Text markup list commands:: - -and they should go just after -* Note head styles:: - -and just before -* List of articulations:: -@end ignore - -@menu -* Chord name chart:: -* Common chord modifiers:: -* Predefined fretboard diagrams:: -* MIDI instruments:: -* List of colors:: -* The Feta font:: -* Note head styles:: -* Text markup commands:: -* Text markup list commands:: -* List of articulations:: -* Percussion notes:: -* All context properties:: -* Layout properties:: -* Identifiers:: -* Scheme functions:: -@end menu - - - -@node Chord name chart -@appendixsec Chord name chart - -Las siguientes tablas muestran dos sistemas estándar para imprimir los nombres de los acordes, -junto a las notas que representan. - -@lilypondfile{chord-names-jazz.ly} - -@node Common chord modifiers -@appendixsec Common chord modifiers - -La tabla siguiente presenta los modificadores de acorde que se pueden -usar en el modo de acordes @code{\chordmode} para generar las -estructuras de acordes estándar. - -@multitable @columnfractions .2 .3 .2 .2 - -@item -@b{Tipo de acorde} -@tab -@b{Intervalos} -@tab -@b{Modificador(es)} -@tab -@b{Ejemplo} - - -@item -Mayor -@tab -Tercera mayor y quinta justa -@tab -@code{5} o nada -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:5 -} -@end lilypond - -@item -Menor -@tab -Tercera menor y quinta justa -@tab -@code{m} o @code{m5} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m -} -@end lilypond - -@item -Aumentado -@tab -Tercera mayor y quinta aumentada -@tab -@code{aug} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug -} -@end lilypond - -@item -Disminuido -@tab -Tercera menor y quinta disminuida -@tab -@code{dim} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim -} -@end lilypond - -@item -Séptima dominante -@tab -Tríada mayor con séptima menor -@tab -@code{7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:7 -} -@end lilypond - -@item -Séptima mayor -@tab -Tríada mayor y séptima mayor -@tab -@code{maj7} or @code{maj} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7 -} -@end lilypond - -@item -Séptima menor -@tab -Tríada menor y séptima menor -@tab -@code{m7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m7 -} -@end lilypond - -@item -Séptima disminuida -@tab -Tríada disminuida y séptima disminuida -@tab -@code{dim7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim7 -} -@end lilypond - -@item -Aumentado con séptima -@tab -Tríada aumentada y séptima menor -@tab -@code{aug7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug7 -} -@end lilypond - -@item -Séptima semi-disminuido -@tab -Tríada disminuida y séptima menor -@tab -@code{m7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim5m7 -} -@end lilypond - -@item -Menor con séptima mayor -@tab -Tríada menor con séptima mayor -@tab -@code{maj7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7.5- -} -@end lilypond - -@item -Mayor con sexta -@tab -Tríada mayor y sexta -@tab -@code{6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:6 -} -@end lilypond - -@item -Menor con sexta -@tab -Tríada menor y sexta -@tab -@code{m6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m6 -} -@end lilypond - -@item -Novena dominante -@tab -Séptima dominante con novena mayor -@tab -@code{9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:9 -} -@end lilypond - -@item -Mayor con novena -@tab -Séptima mayor y novena mayor -@tab -@code{maj9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj9 -} -@end lilypond - -@item -Menor con novena -@tab -Séptima menor y novena mayor -@tab -@code{m9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m9 -} -@end lilypond - -@item -Oncena dominante -@tab -Novena dominante con oncena justa -@tab -@code{11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:11 -} -@end lilypond - -@item -Oncena mayor -@tab -Novena mayor y oncena justa -@tab -@code{maj11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj11 -} -@end lilypond - -@item -Menor con oncena -@tab -Novena menor y oncena justa -@tab -@code{m11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m11 -} -@end lilypond - -@item -Trecena dominante -@tab -Novena dominante y trecena mayor -@tab -@code{13} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13 -} -@end lilypond - -@item -Trecena dominante -@tab -Oncena dominante y trecena mayor -@tab -@code{13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13.11 -} -@end lilypond - -@item -Mayor con trecena -@tab -Oncena mayor y trecena mayor -@tab -@code{maj13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj13.11 -} -@end lilypond - -@item -Menor con trecena -@tab -Oncena menor y trecena mayor -@tab -@code{m13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m13.11 -} -@end lilypond - -@item -Segunda suspendida -@tab -Segunda mayor y quinta justa -@tab -@code{sus2} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus2 -} -@end lilypond - -@item -Cuarta suspendida -@tab -Cuarta justa y quinta justa -@tab -@code{sus4} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus4 -} -@end lilypond - - -@end multitable - -@node Predefined fretboard diagrams -@appendixsec Predefined fretboard diagrams - -El cuadro siguiente presenta los diagramas de traste predefinidos. - -@lilypondfile{display-predefined-fretboards.ly} - - -@node MIDI instruments -@appendixsec MIDI instruments - -A continuación figura una lista con los nombres que se pueden utilizar para la -propiedad @code{midiInstrument} (instrumento MIDI). - -@example -acoustic grand contrabass lead 7 (fifths) -bright acoustic tremolo strings lead 8 (bass+lead) -electric grand pizzicato strings pad 1 (new age) -honky-tonk orchestral strings pad 2 (warm) -electric piano 1 timpani pad 3 (polysynth) -electric piano 2 string ensemble 1 pad 4 (choir) -harpsichord string ensemble 2 pad 5 (bowed) -clav synthstrings 1 pad 6 (metallic) -celesta synthstrings 2 pad 7 (halo) -glockenspiel choir aahs pad 8 (sweep) -music box voice oohs fx 1 (rain) -vibraphone synth voice fx 2 (soundtrack) -marimba orchestra hit fx 3 (crystal) -xylophone trumpet fx 4 (atmosphere) -tubular bells trombone fx 5 (brightness) -dulcimer tuba fx 6 (goblins) -drawbar organ muted trumpet fx 7 (echoes) -percussive organ french horn fx 8 (sci-fi) -rock organ brass section sitar -church organ synthbrass 1 banjo -reed organ synthbrass 2 shamisen -accordion soprano sax koto -harmonica alto sax kalimba -concertina tenor sax bagpipe -acoustic guitar (nylon) baritone sax fiddle -acoustic guitar (steel) oboe shanai -electric guitar (jazz) english horn tinkle bell -electric guitar (clean) bassoon agogo -electric guitar (muted) clarinet steel drums -overdriven guitar piccolo woodblock -distorted guitar flute taiko drum -guitar harmonics recorder melodic tom -acoustic bass pan flute synth drum -electric bass (finger) blown bottle reverse cymbal -electric bass (pick) shakuhachi guitar fret noise -fretless bass whistle breath noise -slap bass 1 ocarina seashore -slap bass 2 lead 1 (square) bird tweet -synth bass 1 lead 2 (sawtooth) telephone ring -synth bass 2 lead 3 (calliope) helicopter -violin lead 4 (chiff) applause -viola lead 5 (charang) gunshot -cello lead 6 (voice) -@end example - - -@node List of colors -@appendixsec List of colors - -@subsubheading Normal colors - -La sintaxis para el uso de colores se encuentra detallada en @ref{Coloring objects}. - -@cindex lista de colores -@cindex colores, lista de - -@verbatim -black white red green -blue cyan magenta yellow -grey darkred darkgreen darkblue -darkcyan darkmagenta darkyellow -@end verbatim - - -@subsubheading X color names - -Los nombres de los colores de X admiten algunas variantes: - -Un nombre que se escribe como una palabra única con mayúsculas -intercaladas (p.ej. @q{LightSlateBlue}) se puede escribir también como -palabras separadas por espacios y sin mayúsculas (p.ej. @q{light slate -blue}). - -La palabra @q{grey} siempre se puede escribir como @q{gray} (p.ej. @q{DarkSlateGray}). - -Algunos nombres admiten un sufijo numérico (p.ej. @q{LightSalmon4}). - - -@subsubheading Color Names without a numerical suffix: - -@verbatim -snow GhostWhite WhiteSmoke gainsboro FloralWhite -OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond -bisque PeachPuff NavajoWhite moccasin cornsilk -ivory LemonChiffon seashell honeydew MintCream -azure AliceBlue lavender LavenderBlush MistyRose -white black DarkSlateGrey DimGrey SlateGrey -LightSlateGrey grey LightGrey MidnightBlue navy -NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue -LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue -DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue -LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise -turquoise cyan LightCyan CadetBlue MediumAquamarine -aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen -MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen -green chartreuse MediumSpringGreen GreenYellow LimeGreen -YellowGreen ForestGreen OliveDrab DarkKhaki khaki -PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold -LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed -SaddleBrown sienna peru burlywood beige -wheat SandyBrown tan chocolate firebrick -brown DarkSalmon salmon LightSalmon orange -DarkOrange coral LightCoral tomato OrangeRed -red HotPink DeepPink pink LightPink -PaleVioletRed maroon MediumVioletRed VioletRed magenta -violet plum orchid MediumOrchid DarkOrchid -DarkViolet BlueViolet purple MediumPurple thistle -DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed -LightGreen -@end verbatim - - -@subsubheading Color names with a numerical suffix - -En los nombres siguientes, el sufijo N puede ser un número del 1 al 4: - -@verbatim -snowN seashellN AntiqueWhiteN bisqueN PeachPuffN -NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN -LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN -blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN -LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN -CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN -SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN -OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN -yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN -IndianRedN siennaN burlywoodN wheatN tanN -chocolateN firebrickN brownN salmonN LightSalmonN -orangeN DarkOrangeN coralN tomatoN OrangeRedN -redN DeepPinkN HotPinkN pinkN LightPinkN -PaleVioletRedN maroonN VioletRedN magentaN orchidN -plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN -thistleN -@end verbatim - - -@subsubheading Grey Scale - -Se puede obtener una escala de grises utilizando: - -@example -greyN -@end example - -@noindent -donde N es un número entre 0 y 100. - - -@node The Feta font -@appendixsec The Feta font - -@cindex Feta, tipografía -@cindex tipografía Feta - -Los símbolos siguientes están disponibles en la tipografía Emmentaler -y es posible acceder a ellos directamente utilizando elementos de -marcado textual como @code{g^\markup @{ \musicglyph #"scripts.segno" -@}}, véase @ref{Formatting text}. - -@lilypondfile[noindent]{font-table.ly} - - -@node Note head styles -@appendixsec Note head styles - -@cindex nota, estilos de cabeza -Se pueden usar los siguientes estilos para las cabezas de las notas. - -@lilypondfile[noindent]{note-head-style.ly} - -@include markup-commands.tely - -@include markup-list-commands.tely - -@node List of articulations -@appendixsec List of articulations - -@cindex accent -@cindex acento -@cindex apagado -@cindex arco abajo -@cindex arco arriba -@cindex calderón -@cindex coda -@cindex downbow -@cindex espressivo -@cindex fermata -@cindex flageolet -@cindex foot marks -@cindex grupeto circular -@cindex grupeto circular invertido -@cindex marcato -@cindex mordent -@cindex open -@cindex organ pedal marks -@cindex pedal, indicaciones de -@cindex portato -@cindex prall -@cindex prallmordent -@cindex prallprall -@cindex reverseturn -@cindex segno -@cindex semitrino -@cindex semitrino descendente -@cindex staccatissimo -@cindex staccato -@cindex stopped -@cindex tenuto -@cindex thumb marking -@cindex trill -@cindex trino -@cindex turn -@cindex upbow -@cindex varcoda -@cindex órgano, indicaciones de pedal de - -He aquí un cuadro que muestra todas las articulaciones disponibles: - -@lilypondfile[quote]{script-chart.ly} - - -@node Percussion notes -@appendixsec Percussion notes - -@lilypondfile[quote]{percussion-chart.ly} - - -@node All context properties -@appendixsec All context properties - -@include context-properties.tely - - -@node Layout properties -@appendixsec Layout properties - -@include layout-properties.tely - - -@node Identifiers -@appendixsec Identifiers - -@include identifiers.tely - - -@node Scheme functions -@appendixsec Scheme functions - -@include scheme-functions.tely diff --git a/Documentation/es/user/notation.itely b/Documentation/es/user/notation.itely deleted file mode 100644 index ce26345cca..0000000000 --- a/Documentation/es/user/notation.itely +++ /dev/null @@ -1,35 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Musical notation -@chapter Musical notation - -Este capítulo explica cómo crear notación musical. - -@menu -* Pitches:: Escritura y presentación de la altura de las notas. -* Rhythms:: Escritura y presentación de las duraciones de las notas. -* Expressive marks:: Añadir expresión a las notas. -* Repeats:: Repetir música. -* Simultaneous notes:: Más de una nota a la vez. -* Staff notation:: Imprimir pentagramas. -* Editorial annotations:: Notación especial para aumentar la legibilidad. -* Text:: Añadir texto a las partituras. -@end menu - -@include pitches.itely -@include rhythms.itely -@include expressive.itely -@include repeats.itely -@include simultaneous.itely -@include staff.itely -@include editorial.itely -@include text.itely - diff --git a/Documentation/es/user/percussion.itely b/Documentation/es/user/percussion.itely deleted file mode 100644 index 628917fe4f..0000000000 --- a/Documentation/es/user/percussion.itely +++ /dev/null @@ -1,621 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Percussion -@section Percussion - -@menu -* Common notation for percussion:: -@end menu - -@node Common notation for percussion -@subsection Common notation for percussion - -La notación rítmica se emplea primordialmente para la percusión y la -batería, pero también se puede utilizar para mostrar los valores -rítmicos una melodía. - -@menu -* References for percussion:: -* Basic percussion notation:: -* Drum rolls:: -* Pitched percussion:: -* Percussion staves:: -* Custom percussion staves:: -* Ghost notes:: -@end menu - -@node References for percussion -@unnumberedsubsubsec References for percussion - -@itemize - -@item -La notación de algunas percusiones se puede hacer sobre una pauta de -ritmo; esto se estudia en @ref{Showing melody rhythms} y -@ref{Instantiating new staves}. - -@item -La salida MIDI se trata en una sección aparte; véase @ref{Percussion -in MIDI}. - -@end itemize - - -@seealso -Referencia de la notación: -@ref{Showing melody rhythms}, -@ref{Instantiating new staves}. -@ref{Percussion in MIDI}. - -Fragmentos de código: -@rlsr{Percussion}. - - -@node Basic percussion notation -@unnumberedsubsubsec Basic percussion notation - -@cindex percusión -@cindex batería - -Las notas de percusión se pueden escribir en el modo @code{\drummode}, -que es similar al modo estándar para introducir notas. La manera más -fácil de escribir notas de percusión es utilizar la instrucción -@code{\drums}, que crea el contexto y el modo de entrada apropiados -para percusión: - -@lilypond[quote,verbatim] -\drums { - hihat4 hh bassdrum bd -} -@end lilypond - -Esto es una abreviatura de - -@lilypond[quote,verbatim] -\new DrumStaff { - \drummode { - hihat4 hh bassdrum bd - } -} -@end lilypond - -Cada elemento de un set de percusión lleva un nombre completo y un -nombre abreviado, y los dos se pueden usar en la entrada. La lista -completa de nombre de instrumentos de percusión se encuentra en -@ref{Percussion notes}. - -Observe que la notación normal de las notas con altura determinada -(como @code{cis4}) en un contexto @code{DrumStaff} procuden un mensaje -de error. Las claves de percusión se añaden automáticamente al -contexto @code{DrumStaff}, pero también se pueden usar otras claves. - -Hay ciertos detalles respecto a cómo está contemplado el MIDI para los -instrumentos de percusión; para ver los detalles consulte -@ref{Percussion in MIDI}. - - -@seealso -Referencia de la notación: -@ref{Percussion in MIDI}, -@ref{Percussion notes}. - -Archivos de inicio: -@file{ly/@/drumpitch@/-init@/.ly}. - -Fragmentos de código: -@rlsr{Percussion}. - - -@node Drum rolls -@unnumberedsubsubsec Drum rolls - -Los redobles se indican mediante tres barras cruzadas en la plica. -Para las negras o notas más largas, las tres barras se muestran -explícitamente, las corcheas se presentan con dos barras cruzadas -(siendo la barra de corchea la tercera), y los redobles más breves que -las corcheas tienen una barra cruzada para complementar las barras -normales. Esto se consigue mediante la notación de trémolo, -@code{:32}, véase @ref{Tremolo repeats}. He aquí un ejemplo de -redobles de caja: - -@lilypond[quote,verbatim] -\drums { - \time 2/4 - sn16 sn8 sn16 sn8 sn8:32 ~ - sn8 sn8 sn4:32 ~ - sn4 sn8 sn16 sn16 - sn4 r4 -} -@end lilypond - -Los golpes de baqueta se pueden indicar mediante la colocación de -@code{^"R"} o @code{^"L"} después de la nota. La propiedad -@code{staff-padding} se puede sobreescribir para conseguir una línea -de base satisfactoria. - -@lilypond[quote,verbatim] -\drums { - \repeat unfold 2 { - sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" - } -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Percussion}. - - -@node Pitched percussion -@unnumberedsubsubsec Pitched percussion - -Ciertos instrumentos de percusión de altura determinada (p.ej.: el -xilófono, el vibráfono y los timbales) se escriben usando pentagramas -normales. Esto se estudia en otras secciones del manual. - -@seealso -@c -@c TODO: possibly link to an alternate section of NR 3.5, if -@c "percussion in MIDI" gets a separate subsubsection for -@c pitched percussion sounds. -gp -Referencia de la notación: -@ref{Percussion in MIDI}. - -Fragmentos de código: -@rlsr{Percussion}. - - -@node Percussion staves -@unnumberedsubsubsec Percussion staves - -@cindex percusión -@cindex batería - -Una parte de percusión para más de un instrumento, normalmente utiliza -una pauta de varias líneas donde cada posición dentro de la pauta se -refiere a un elemento de percusión. Para tipografiar la música, se -deben interpretar las notas dentro de los contextos -@rinternals{DrumStaff} y @rinternals{DrumVoice}. - -@lilypond[quote,verbatim] -up = \drummode { - crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat -} -down = \drummode { - bassdrum4 snare8 bd r bd sn4 -} -\new DrumStaff << - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - -El ejemplo anterior muestra una notación polifónica prolija. La -notación polifónica abreviada, descrita en @rlearning{I'm hearing -Voices}, también se puede usar si las voces se instancian primero a -mano. Por ejemplo, - -@lilypond[quote,verbatim] -\new DrumStaff << - \new DrumVoice = "1" { s1*2 } - \new DrumVoice = "2" { s1*2 } - \drummode { - bd4 sn4 bd4 sn4 - << { - \repeat unfold 16 hh16 - } \\ { - bd4 sn4 bd4 sn4 - } >> - } ->> -@end lilypond - -También existen otras posibilidades en lo referente a la disposición. -Para usarlas, establezca la propiedad @code{drumStyleTable} en el -contexto @rinternals{DrumVoice}. Se han predefinido las siguientes -variables: - -@table @code - -@item drums-style -Es la opción por defecto. Tipografía un típico set de percusión sobre -pentagrama: - -@lilypond[quote,line-width=10.0\cm] -nam = \lyricmode { - cymc cyms cymr hh hhc hho hhho hhp - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } -mus = \drummode { - cymc cyms cymr hh hhc hho hhho hhp \break - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } -\score { - << \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4.0 . 5.0) - } \mus - \new Lyrics \nam - >> - \layout { - \context { - \Score - \override LyricText #'font-family = #'typewriter - \override BarNumber #'transparent =##T - } - } -} -@end lilypond - -El esquema de percusión contempla seis tambores graves (toms) -distintos. Cuando haya menos toms, sencillamente seleccione aquellos -que producen el resultado deseado, es decir, para tener toms en las -tres líneas centrales utilizará @code{tommh}, @code{tomml} y -@code{tomfh}. - -@item timbales-style -Esto tipografía timbales en una pauta de dos líneas: - -@lilypond[quote,ragged-right] -nam = \lyricmode { timh ssh timl ssl cb } -mus = \drummode { timh ssh timl ssl cb s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override StaffSymbol #'line-count = #2 - \override StaffSymbol #'staff-space = #2 - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) - drumStyleTable = #timbales-style - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item congas-style -Esto tipografía congas en una pauta de dos líneas: - -@lilypond[quote,ragged-right] -nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } -mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - drumStyleTable = #congas-style - \override StaffSymbol #'line-count = #2 - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item bongos-style -Esto tipografía bongos sobre una pauta de dos líneas: - -@lilypond[quote,ragged-right] -nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } -mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override StaffSymbol #'line-count = #2 - drumStyleTable = #bongos-style - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item percussion-style -Para tipografiar toda clase de percusiones simples sobre pautas de una -línea: - -@lilypond[quote,ragged-right] -nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } -mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } - -<< - \new DrumStaff \with{ - \remove Bar_engraver - drumStyleTable = #percussion-style - \override StaffSymbol #'line-count = #1 - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond -@end table - - -@node Custom percussion staves -@unnumberedsubsubsec Custom percussion staves - -Si no le gusta ninguna de las listas predefinidas, puede definir su -propia lista al principio de su archivo - -@lilypond[quote,verbatim] -#(define mydrums '( - (bassdrum default #f -1) - (snare default #f 0) - (hihat cross #f 1) - (pedalhihat xcircle "stopped" 2) - (lowtom diamond #f 3))) -up = \drummode { hh8 hh hh hh hhp4 hhp } -down = \drummode { bd4 sn bd toml8 toml } - -\new DrumStaff << - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - -@snippets - -@c FIXME: MOVE ALL THESE TO LSR! -gp - -He aquí algunos ejemplos adicionales: - -Dos bloques de madera, escritos con wbh (@emph{woodblock-high}, bloque -alto) y wbl (@emph{woodblock-low} bloque bajo) - -@lilypond[quote,verbatim] -% These lines define the position of the woodblocks in the stave; -% if you like, you can change it or you can use special note heads -% for the woodblocks. -#(define mydrums '((hiwoodblock default #t 3) - (lowoodblock default #t -2))) - -woodstaff = { - % This defines a staff with only two lines. - % It also defines the positions of the two lines. - \override Staff.StaffSymbol #'line-positions = #'(-2 3) - - % This is neccessary; if not entered, the barline would be too short! - \override Staff.BarLine #'bar-size = #3 -} - -\new DrumStaff { - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - % with this you load your new drum style table - \woodstaff - - \drummode { - \time 2/4 - wbl8 wbl16 wbl wbh8-> wbl | - wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | - } -} -@end lilypond - -Observe que en este caso especial se debe alterar la longitud de la -línea divisoria con @code{\override Staff.BarLine #'bar-size #number}. -En caso contrario resulta demasiado corta. También debe definir las -posiciones de las dos líneas del pentagrama. Para más información -sobre estos delicados asuntos, consulte @ref{Staff symbol}. - -Una pandereta, escrita mediante @q{tamb} (@emph{tambourine}: - -@lilypond[quote,verbatim] -#(define mydrums '((tambourine default #t 0))) - -tambustaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tambourine" -} - -\new DrumStaff { - \tambustaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - \time 6/8 - tamb8. tamb16 tamb8 tamb tamb tamb | - tamb4. tamb8 tamb tamb | - % the trick with the scaled duration and the shorter rest - % is neccessary for the correct ending of the trill-span! - tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | - } -} -@end lilypond - - -Música para gong, introducida con @q{tt} (tam-tam): - -@lilypond[quote,verbatim] -#(define mydrums '((tamtam default #t 0))) - -tamtamstaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tamtam" -} - -\new DrumStaff { - \tamtamstaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - tt 1 \pp \laissezVibrer - } -} -@end lilypond - -Dos campanas, introducidas con @q{cb} (@emph{cowbell}, cencerro) y -@q{rb} (@emph{ridebell}, campana normal) - -@lilypond[quote,verbatim] -#(define mydrums '((ridebell default #t 3) - (cowbell default #t -2))) - -bellstaff = { - \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Different Bells" -} - -\new DrumStaff { - \bellstaff - \drummode { - \time 2/4 - rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | - } -} -@end lilypond - -Aquí un breve ejemplo del maestro Stravinsky (procedende de la -@q{Historia del soldado}) - -@lilypond[quote,verbatim] -#(define mydrums '((bassdrum default #t 4) - (snare default #t -4) - (tambourine default #t 0))) - -global = { - \time 3/8 s4. - \time 2/4 s2*2 - \time 3/8 s4. - \time 2/4 s2 -} - -drumsA = { - \context DrumVoice << - { \global } - { \drummode { - \autoBeamOff - \stemDown sn8 \stemUp tamb s8 | - sn4 \stemDown sn4 | - \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | - \stemDown sn8 \stemUp tamb s8 | - \stemUp sn4 s8 \stemUp tamb - } - } - >> -} - -drumsB = { - \drummode { - s4 bd8 s2*2 s4 bd8 s4 bd8 s8 - } -} - -\layout { - indent = #40 -} - -\score { - \new StaffGroup << - \new DrumStaff { - \set DrumStaff.instrumentName = \markup { - \column { - "Tambourine" - "et" - "caisse claire s. timbre" - } - } - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsA - } - - \new DrumStaff { - \set DrumStaff.instrumentName = #"Grosse Caisse" - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsB } - >> -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Percussion}. - -Referencia de funcionamiento interno: -@rinternals{DrumStaff}, -@rinternals{DrumVoice}. - - -@c FIXME: check name -gp -@node Ghost notes -@unnumberedsubsubsec Ghost notes - -Las notas fantasma para la batería e instrumentos de percusión se -pueden crear utilizando la instrucción @code{\parenthesize} detallada -en @ref{Parentheses}. Sin embargo, el modo por defecto -@code{\drummode} no incluye el complemento grabador -@code{Parenthesis_engraver} que permite esto. - -@lilypond[quote,ragged-right,verbatim,fragment] -\new DrumStaff \with { - \consists "Parenthesis_engraver" -} -<< - \context DrumVoice = "1" { s1 } - \context DrumVoice = "2" { s1 } - \drummode { - << - { - hh8[ hh] hh16 - < \parenthesize sn > hh - < \parenthesize sn > hh8 hh - } \\ - { - bd4 r4 bd8 bd r8 bd - } - >> - } ->> -@end lilypond - -@noindent -Observe, además, que debe añadir acordes (paréntesis en ángulo @code{< ->}) alrededor de cada una de las instrucciones @code{\parenthesize}. - - -@seealso -Fragmentos de código: -@rlsr{Percussion}. diff --git a/Documentation/es/user/pitches.itely b/Documentation/es/user/pitches.itely deleted file mode 100644 index 1435a097b2..0000000000 --- a/Documentation/es/user/pitches.itely +++ /dev/null @@ -1,2441 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Pitches -@section Pitches - -@lilypondfile[quote]{pitches-headword.ly} - -En esta sección se discute cómo especificar la altura de las notas. -Este proceso se compone de tres fases: entrada, modificación y salida. - -@menu -* Writing pitches:: -* Changing multiple pitches:: -* Displaying pitches:: -* Note heads:: -@end menu - - -@node Writing pitches -@subsection Writing pitches - -En esta sección se describe la manera de introducir la altura de las -notas. Esisten dos formas distintas de colocar las notas en su octava -correspondiente: el modo absoluto y el relativo. En casi todas las -ocasiones, será más práctico el modo relativo. - -@menu -* Absolute octave entry:: -* Relative octave entry:: -* Accidentals:: -* Note names in other languages:: -@end menu - - -@node Absolute octave entry -@unnumberedsubsubsec Absolute octave entry - -@cindex nombres de las notas -@cindex alturas -@cindex absoluta -@cindex absoluta, especificación, de la octava -@cindex octava, especificación absoluta -@cindex absoluta, introducción, de la octava -@cindex octava, introducción absoluta - -El nombre de una nota se especifica usando las letras minúsculas de la -@code{a} a la @code{g}. Las notas cuyos nombres van desde @code{c} -hasta @code{b} se imprimen en la octava inferior al Do central. - -@c don't use c' here. -@lilypond[verbatim,quote,fragment] -\clef bass -c d e f -g a b c -d e f g -@end lilypond - -@cindex octava, marca de cambio de - -@funindex ' -@funindex , - -Se pueden especificar otras octavas mediante una comilla simple -quote@tie{}(@code{'}) o una coma@tie{}(@code{,}) . -Cada@tie{}@code{'} eleva la altura en una octava; cada@tie{}@code{,} -baja la altura una octava. - -@lilypond[verbatim,quote,fragment] -\clef treble -c' c'' e' g -d'' d' d c -\clef bass -c, c,, e, g -d,, d, d c -@end lilypond - - -@seealso -Glosario musical: -@rglos{Pitch names}. - -Fragmentos de código: -@rlsr{Pitches}. - - -@node Relative octave entry -@unnumberedsubsubsec Relative octave entry - -@cindex relativo -@cindex relativas, especificación de octavas -@cindex octava, introducción relativa -@cindex relativa, especificación de la octava -@cindex ocatva, especificación relativa - -@funindex relative -@funindex \relative - -Cuando las octavas se especifican en modo absoluto, es fácil poner por -accidente una nota en la octava equivocada. El modo de octavas -relativas reduce estos errores porque casi todo el tiempo es -innecesario indicar octava alguna. Es más, en el modo absoluto puede -ser difícil encontrar un error aislado, mientras que en el modo -relativo un solo fallo hace que el resto de la pieza esté una octava -más alta o más baja de lo que debería. - - -@example -\relative @var{altura_inicial} @var{expresión_musical} -@end example - -En el modo relativo, se supone que cada nota se encuentra lo más cerca -posible de la nota anterior. Esto significa que la octava de una nota -que está dentro de @var{expresión_musical} se calcula como sigue: - -@itemize -@item -Si no se usa ninguna marca de cambio de octava en una nota, su octava -se calcula de forma que el intervalo que forme con la nota anterior -sea menor de una quinta. Este intervalo se determina sin considerar -las alteraciones. - -@item -Se puede añadir una marca de cambio de octava@tie{}@code{'} -o@tie{}@code{,} para elevar o bajar la altura, respectivamente, en una -octava más en relación con la altura calculada sin esta marca. - -@item -Se pueden usar varias marcas de cambio de octava. Por ejemplo, -@code{''}@tie{}y @code{,,}@tie{} alteran la altura en dos octavas. - -@item -La altura de la primera nota es relativa a -@code{@var{altura_inicial}}. @var{altura_inicial} se especifica en -modo de octava absoluta, y se recomienda que sea un Do (una octava de -@code{c}). - -@end itemize - - -Aquí podemos ver el modo relativo en acción: - -@lilypond[verbatim,quote] -\relative c { - \clef bass - c d e f - g a b c - d e f g -} -@end lilypond - -Las marcas de cambio de octava se utilizan para intervalos mayores de -la cuarta: - -@lilypond[verbatim,quote] -\relative c'' { - c g c f, - c' a, e'' c -} -@end lilypond - -Una serie de notas sin ninguna marca de octava puede, a pesar de todo, -abarcar intervalos muy grandes: - -@lilypond[verbatim,quote] -\relative c { - c f b e - a d g c -} -@end lilypond - -@cindex acordes e introducción relativa de la octava -@cindex relativa, introducción de la octava, y acordes - -Si el elemento anterior es un acorde, la primera nota del acorde se -utiliza para determinar la primera nota del siguiente acorde. Dentro -de los acordes, la siguiente nota siempre está en relación a la -anterior. - -@lilypond[verbatim,quote] -\relative c' { - c - - - -} -@end lilypond - -Como se explicó más arriba, la octava de las notas se calcula -solamente a partir de sus nombres, sin tener encuenta alteración -alguna. Por tanto, un Mi doble sostenido después de un Si se -escribirá más agudo, mientras que un Fa doble sostenido se escribirá -más grave. En otras palabras, se considera a la cuarta doble -aumentada un intervalo menor que la quinta doble disminuida, -independientemente del número de semitonos de cada uno de ellos. - -@lilypond[verbatim,quote] -\relative c'' { - c2 fis - c2 ges - b2 eisis - b2 feses -} -@end lilypond - -@seealso -Glosario musical: -@rglos{fifth}, -@rglos{interval}, -@rglos{Pitch names}. - -Referencia de la notación: -@ref{Octave checks}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{RelativeOctaveMusic}. - -@cindex relativo, modo, transposición y -@cindex transposición y modo relativo - -@funindex \transpose -@funindex transpose -@funindex \chordmode -@funindex chordmode -@funindex \relative -@funindex relative - -@knownissues - -La conversión relativa no afecta a las secciones @code{\transpose}, -@code{\chordmode} o @code{\relative} en su argumento. Para usar el -modo relativo dentro de música transportada, se debe escribir un -@code{\relative} adicional dentro de @code{\transpose}. - -@c DEPRECATED -Si no se especifica ninguna @var{altura_inicial} para -@code{\relative}, entonces se supone que es@tie{}@code{c'}. Sin -embargo, ésta es una opción en desuso y podría desaparecer en -versiones posteriores, por lo que su utilización está desaconsejada. - - -@node Accidentals -@unnumberedsubsubsec Accidentals - -@cindex accidental -@cindex key signature -@cindex clef - -@c duplicated in Key signature and Accidentals -@warning{Las alteraciones accidentales y las armaduras son una -frecuente causa de confusión para los nuevos usuarios. En LilyPond, -los nombres de las notas son el código de entrada en bruto; la -armadura y la clave determinan de qué forma se presenta este código en -bruto. Una nota sin alteración como@tie{}@code{c} significa @q{Do -natural}, si que le afecten la armadura ni la clave. Para ver más -información, consulte @rlearning{Accidentals and key signatures}.} - -@cindex notas, nombres holandeses de -@cindex notas, nombres predeterminados -@cindex predeterminados, nombres de nota -@cindex sostenido -@cindex bemol -@cindex doble sostenido -@cindex sostenido, doble -@cindex doble bemol -@cindex bemol, doble -@cindex becuadro -@cindex natural, nota - -Se escribe una nota @notation{sostenida} añadiendo @code{is} al nombre -de la nota, y un @notation{bemol} añadiendo @code{es}. Como es de -esperar, un @notation{dobles sostenido} y un @notation{doble bemol} se -obtiene añadiendo @code{isis} o @code{eses}. Esta sintaxis deriva de -los nombres de las notas en holandés. Para utilizar otros nombres -para las alteraciones, consulte @ref{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -ais1 aes aisis aeses -@end lilypond - -Un becuadro cancelará el efecto de una alteración accidental o de la -armadura. Sin embargo, los becuadros no se codifican dentro de la -sintaxis del nombre de la nota con un sufijo; una nota becuadro se -muestra como un simple nombre de nota natural: - -@lilypond[verbatim,quote,relative=2] -a4 aes a2 -@end lilypond - -@cindex cuartos de tono -@cindex semi-bemoles -@cindex semi-sostenidos - -Se pueden escribir medios bemoles y los medios sostenidos; a -continuación presentamos una serie de DOs cada vez más agudos: - -@lilypond[verbatim,quote,relative=2] -ceseh1 ces ceh c cih cis cisih -@end lilypond - - - -@cindex alteración recordatoria -@cindex alteración de precaución -@cindex alteración con paréntesis -@cindex recordatoria, alteración -@cindex precaución, alteración de -@cindex paréntesis, alteración con - -@funindex ? -@funindex ! - -Normalmente las alteraciones accidentales se imprimen automáticamente, -pero también puede imprimirlas manualmente. Un alteración -recordatoria se puede forzar añadiendo un signo de -admiración@tie{}@code{!} después de la altura de la nota. Se puede -obtener una alteración de precaución (o sea, una alteración entre -paréntesis) añadiendo el signo de interrogación@tie{}@code{?} después -del nombre de la nota. Estas alteraciones adicionales se pueden usar -también para producir notas con becuadro. - -@lilypond[verbatim,quote,relative=2] -cis cis cis! cis? c c c! c? -@end lilypond - -@cindex alteración en nota ligada -@cindex ligadura, alteraciones y - -Las alteraciones sobre notas unidas por ligadura sólo se imprimen al -comienzo de un sistema: - -@lilypond[verbatim,quote,relative=2] -cis1 ~ cis ~ -\break -cis -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-extra-naturals-from-being-automatically-added.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{makam-example.ly} - - -@seealso -Glosario musical: -@rglos{sharp}, -@rglos{flat}, -@rglos{double sharp}, -@rglos{double flat}, -@rglos{Pitch names}, -@rglos{quarter tone}. - -Manual de aprendizaje: -@rlearning{Accidentals and key signatures}. - -Referencia de la notación: -@ref{Automatic accidentals}, -@ref{Annotational accidentals (musica ficta)}, -@ref{Note names in other languages}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{Accidental_engraver}, -@rinternals{Accidental}, -@rinternals{AccidentalCautionary}, -@rinternals{accidental-interface}. - - -@cindex alteración de cuartos de tono -@cindex cuartos de tono, alteraciones - -@knownissues - -No existen estándares reconocidos ampliamente para denotar -los bemoles de tres cuartos, de manera que los símbolos de LilyPond -no se ajustan a ningún estándar. - - -@node Note names in other languages -@unnumberedsubsubsec Note names in other languages - -@cindex notas, nombres de, en otros idiomas -@cindex alturas, nombres de, otros idiomas -@cindex idioma, nombres de nota en otros -@cindex idioma, alturas en otros - -Existen conjuntos predefinidos de nombres de notas y sus alteraciones -para algunos idiomas aparte del inglés. Para usarlos, incluya el -archivo de inicio específico del idioma según aparece relacionado más -abajo. Por ejemplo, para usar los nombres de las notas en español, -escriba @code{@w{\include "espanol.ly"}} al principio del archivo de -entrada. - -Los archivos de idioma disponibles y los nombres de las notas que -definen son los siguientes: - -@quotation -@multitable {@file{nederlands.ly}} {do re mi fa sol la sib si} -@headitem Archivo de idioma - @tab Nombre de las notas -@item @file{nederlands.ly} - @tab c d e f g a bes b -@item @file{arabic.ly} - @tab do re mi fa sol la sib si -@item @file{catalan.ly} - @tab do re mi fa sol la sib si -@item @file{deutsch.ly} - @tab c d e f g a b h -@item @file{english.ly} - @tab c d e f g a bf b -@item @file{espanol.ly} - @tab do re mi fa sol la sib si -@item @file{italiano.ly} - @tab do re mi fa sol la sib si -@item @file{norsk.ly} - @tab c d e f g a b h -@item @file{portugues.ly} - @tab do re mi fa sol la sib si -@item @file{suomi.ly} - @tab c d e f g a b h -@item @file{svenska.ly} - @tab c d e f g a b h -@item @file{vlaams.ly} - @tab do re mi fa sol la sib si -@end multitable -@end quotation - -@noindent -y los sufijos de las alteraciones correspondientes que definen son: - -@quotation -@multitable {@file{nederlands.ly}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} -@headitem Archivo de idioma - @tab sostenido @tab bemol @tab doble sostenido @tab doble bemol -@item @file{nederlands.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{arabic.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{catalan.ly} - @tab -d/-s @tab -b @tab -dd/-ss @tab -bb -@item @file{deutsch.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{english.ly} - @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp - @tab -ff/-flatflat -@item @file{espanol.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{italiano.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{norsk.ly} - @tab -iss/-is @tab -ess/-es @tab -ississ/-isis - @tab -essess/-eses -@item @file{portugues.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{suomi.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{svenska.ly} - @tab -iss @tab -ess @tab -ississ @tab -essess -@item @file{vlaams.ly} - @tab -k @tab -b @tab -kk @tab -bb -@end multitable -@end quotation - -En holandés, @code{aes} se contrae como @code{as}, pero las dos formas -se aceptan en LilyPond. De forma similar, se aceptan tanto @code{es} -como @code{ees}. Esto se aplica también a -@code{aeses}@tie{}/@tie{}@code{ases} y a -@code{eeses}@tie{}/@tie{}@code{eses}. A veces se definen solamente -estos nombres contraídos en los archivos de idioma correspondientes. - -@lilypond[verbatim,quote,relative=2] -a2 as e es a ases e eses -@end lilypond - -@cindex microtonos -@cindex semi-sostenido -@cindex semi-bemol -@cindex sesqui-sostenido -@cindex sesqui-bemol - -@noindent -Algunas músicas utilizan microtonos cuyas alteraciones son fracciones -de un sostenido o bemol @q{normales}. Los nombres de nota para -cuartos de tono que se definen en los distintos archivos de idioma se -encuentran listados en la tabla siguiente. Aquí los prefijos -@q{semi-} y @q{sesqui-} significan @q{medio} y @q{uno y medio} -respectivamente. Para los idiomas noruego, sueco, catalán y español -no se ha definido aún ningún nombre especial. - -@quotation -@multitable {@file{nederlands.ly}} {@b{semi-sostenido}} {@b{semi-bemol}} {@b{sesqui-sostenido}} {@b{sesqui-bemol}} -@headitem Archivo de idioma - @tab semi-sostenido @tab semi-bemol @tab sesqui-sostenido @tab sesqui-bemol - -@item @file{nederlands.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{arabic.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{deutsch.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{english.ly} - @tab -qs @tab -qf @tab -tqs @tab -tqf -@item @file{italiano.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{portugues.ly} - @tab -sqt @tab -bqt @tab -stqt @tab -btqt -@end multitable -@end quotation - - -@seealso -Glosario musical: -@rglos{Pitch names}. - -Fragmentos de código: -@rlsr{Pitches}. - - -@node Changing multiple pitches -@subsection Changing multiple pitches - - -Esta sección trata de la manera de modificar las alturas. - - -@menu -* Octave checks:: -* Transpose:: -@end menu - - -@node Octave checks -@unnumberedsubsubsec Octave checks - -@cindex octava, comprobación de -@cindex octava, corrección de -@cindex control, alturas de - -@funindex = -@funindex \octaveCheck -@funindex octaveCheck -@funindex controlpitch - -En el modo relativo, es fácil olvidar una marca de cambio de octava. -Las comprobaciones de octava hacen más fácil encontrar estos errores, -mediante la presentación de una advertencia y corrigiendo la octava si -la nota se encuentra en una octava distinta de lo esperado. - -Para comprobar la octava de una nota, especifique la octava absoluta -después del símbolo@tie{}@code{=}. Este ejemplo genera un mensaje de -advertencia (y corrige la altura) porque la segunda nota es la octava -absoluta @code{d''} en lugar de @code{d'} como indica la corrección de -octava. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d='4 d - e2 f -} -@end lilypond - -La octava de las notas se puede comprobar también con la instrucción -@code{\octaveCheck}@tie{}@var{altura_de_control}. -@var{altura_de_control} se especifica en modo absoluto. Esto -comprueba que el intervalo entre la nota anterior y la -@var{altura_de_control} se encuntra dentro de una cuarta (es decir, el -cálculo normal para el modo relativo). Si esta comprobación fracasa, -se imprime un mensaje de advertencia, pero la nota previa no se -modifica. Las notas posteriores están en relación a la -@var{altura_de_control}. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d - \octaveCheck c' - e2 f -} -@end lilypond - -Compare los dos compases siguientes. La primera y tercera -comprobaciones de @code{\octaveCheck} fracasan, pero la segunda es -correcto. - -@lilypond[verbatim,quote] -\relative c'' { - c4 f g f - - c4 - \octaveCheck c' - f - \octaveCheck c' - g - \octaveCheck c' - f -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{RelativeOctaveCheck}. - - -@node Transpose -@unnumberedsubsubsec Transpose - -@cindex transporte -@cindex transposición -@cindex transposición de alturas -@cindex transposición de notas -@cindex alturas, transporte de -@cindex notas, transporte de - -@funindex \transpose -@funindex transpose - -Una expresión musical se puede transportar mediante @code{\transpose}. -La sintaxis es -@example -\transpose @var{nota_origen} @var{nota_destino} @var{expresión_musical} -@end example - -Esto significa que la @var{expresión_musical} se transporta el -intervalo que hay entre las notas @var{nota_origen} y -@var{nota_destino}: cualquier nota con la altura de @code{nota_origen} -se cambia por @code{nota_destino} y cualquier otra nota se transporta -el mismo intervalo. Las dos notas se introducen en modo absoluto. - -Por ejemplo, tomemos una pieza escrita en la tonalidad de Re mayor. -Se puede transportar hacia arriba a Mi mayor; observe que también la -armadura de la tonalidad se transporta automáticamente. - -@lilypond[verbatim,quote] -\transpose d e { - \relative c' { - \key d \major - d4 fis a d - } -} -@end lilypond - -Si una particella escrita en Do (@notation{afinación de concierto} -normal) se debe tocar con un clarinete en La (para el que un La se -escribe como un Do, y que suena una tercera menor por debajo de lo que -está escrito), la particella correspondiente se produce mediante: - -@lilypond[verbatim,quote] -\transpose a c' { - \relative c' { - \key c \major - c4 d e g - } -} -@end lilypond - -@noindent -Observe que especificamos @code{\key c \major} de forma explícita. Si -no especificamos ninguna tonalidad, las notas se transportan pero no -se imprime la armadura. - -@code{\transpose} distingue entre notas enarmónicas: tanto -@code{\transpose c cis} como @code{\transpose c des} transportarán un -semitono hacia arriba. La primera versión imprimirá sostenidos y las -notas no se moverán de su lugar en la escala, la segunda imprimirá -bemoles de la nota siguiente. - -@lilypond[verbatim,quote] -music = \relative c' { c d e f } -\new Staff { - \transpose c cis { \music } - \transpose c des { \music } -} -@end lilypond - -@cindex transpositores, instrumentos -@cindex instrumentos transpositores - -@code{\transpose} también se puede usar para introducir notas escritas -para un instrumento transpositor. Los ejemplos anteriores muestran -cómo escribir alturas en Do (o en @notation{afinación de concierto}) y -tipografiarlas para un instrumento transpositor, pero también es -posible el caso contrario si, por ejemplo, tenemos un conjunto de -partes instrumentales y quiere hacer un guión en Do para el director. -Por ejemplo, al introducir música para trompeta en Si bemol que -comienza por un Mi en la partitura (Re de concierto), se puede -escribir: - -@example -musicaEnSiBemol = @{ e4 @dots{} @} -\transpose c bes, \musicaEnSiBemol -@end example - -@noindent -Para imprimir esta música en Fa (por ejemplo, al arreglarla para -trompa) puede envolver la música existente con otro @code{\transpose}: - -@example -musicaEnSiBemol = @{ e4 @dots{} @} -\transpose f c' @{ \transpose c bes, \musicaEnSiBemol @} -@end example - -@noindent -Para ver más información sobre instrumentos transpositores, consulte -@ref{Instrument transpositions}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} - - -@seealso -Referencia de la notación: -@ref{Instrument transpositions}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{TransposedMusic}. - -@funindex \transpose -@funindex transpose -@funindex \chordmode -@funindex chordmode -@funindex \relative -@funindex relative - -@knownissues - - -La conversión relativa no afecta a las secciones @code{\transpose}, -@code{\chordmode} ni @code{\relative} dentro de su argumento. Para -usar el modo relativo dentro de música transportada, se debe colocar -otro @code{\relative} dentro de @code{\transpose}. - - -@node Displaying pitches -@subsection Displaying pitches - -Esta sección trata de cómo alterar la presentación de la altura de las -notas. - -@menu -* Clef:: -* Key signature:: -* Ottava brackets:: -* Instrument transpositions:: -* Automatic accidentals:: -* Ambitus:: -@end menu - -@node Clef -@unnumberedsubsubsec Clef - - -@cindex Sol, clave de -@cindex Do, clave de -@cindex Fa, clave de -@cindex violín, clave de -@cindex alto, clave de -@cindex tenor, clave de -@cindex bajo, clave de -@cindex francesa, clave -@cindex soprano, clave de -@cindex mezzosoprano, clave de -@cindex barítono, clave de -@cindex contrabajo, clave de -@cindex clave -@cindex antiguas, claves -@cindex clave antigua -@cindex clave de Sol -@cindex clave de Do -@cindex clave de Fa -@cindex clave de violín -@cindex clave de alto -@cindex clave de tenor -@cindex clave de bajo -@cindex clave francesa -@cindex clave de soprano -@cindex clave de mezzosoprano -@cindex clave de barítono -@cindex clave de contrabajo - -@funindex \clef -@funindex clef - -La clave se establece con la instrucción @code{\clef} -@var{nombre_de_clave}. En todos los ejemplos se muestra el Do -central. - -@lilypond[verbatim,quote,relative=1] -\clef treble -c2 c -\clef alto -c2 c -\clef tenor -c2 c -\clef bass -c2 c -@end lilypond - -Otras claves son las siguientes: - -@lilypond[verbatim,quote,relative=1] -\clef french -c2 c -\clef soprano -c2 c -\clef mezzosoprano -c2 c -\clef baritone -c2 c - -\break - -\clef varbaritone -c2 c -\clef subbass -c2 c -\clef percussion -c2 c -\clef tab -c2 c -@end lilypond - -Están contempladas claves adicionales que se describen bajo -@ref{Mensural clefs} y @ref{Gregorian clefs}. - -@cindex transpositoras, claves -@cindex clave transpositora -@cindex octava, transposición de -@cindex coral, clave de tenor -@cindex tenor coral, clave - -Al añadir @code{_8} o @code{^8} al nombre de la clave, la clave se -transpone una octava hacia abajo o hacia arriba, respectivamente, y -@code{_15} y @code{^15} la transpone dos octavas. El argumento -@var{nombre_de_clave} se debe encerrar entre comillas cuando contiene -guiones bajos o dígitos. - -@lilypond[verbatim,quote,relative=2] -\clef treble -c2 c -\clef "treble_8" -c2 c -\clef "bass^15" -c2 c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{tweaking-clef-properties.ly} - - -@seealso -Referencia de la notación: -@ref{Mensural clefs}, -@ref{Gregorian clefs}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{Clef_engraver}, -@rinternals{Clef}, -@rinternals{OctavateEight}, -@rinternals{clef-interface}. - - -@node Key signature -@unnumberedsubsubsec Key signature - -@cindex Armadura de la tonalidad - -@funindex \key -@funindex key - -Las alteraciones accidentales y las armaduras son una frecuente causa de confusión para los nuevos usuarios, -porque las notas sin alteración pueden llevar signos de becuadro en función de la armadura. -Para ver más información, consulte @ref{Accidentals} o @rlearning{Accidentals and key signatures}. - -@c duplicated in Key signature and Accidentals -@warning{Las alteraciones accidentales y las armaduras son una -frecuente causa de confusión para los nuevos usuarios. En LilyPond, -los nombres de las notas son el código de entrada en bruto; la -armadura y la clave determinan de qué forma se presenta este código en -bruto. Una nota sin alteración como@tie{}@code{c} significa @q{Do -natural}, si que le afecten la armadura ni la clave. Para ver más -información, consulte @rlearning{Accidentals and key signatures}.} - -La armadura indica la tonalidad en que se toca una pieza. Está -denotada por un conjunto de alteraciones (bemoles o sostenidos) al -comienzo del pentagrama. El establecimiento o modificación de la -armadura se hace con la instrucción @code{\key}: - -@example -\key @var{nota} @var{tipo} -@end example - -@funindex \major -@funindex major -@funindex \minor -@funindex minor -@funindex \ionian -@funindex ionian -@funindex \locrian -@funindex locrian -@funindex \aeolian -@funindex aeolian -@funindex \mixolydian -@funindex mixolydian -@funindex \lydian -@funindex lydian -@funindex \phrygian -@funindex phrygian -@funindex \dorian -@funindex dorian - -@cindex modos eclesiásticos -@cindex modos -@cindex mayor, modo -@cindex menor, modo -@cindex eonio, modo -@cindex locrio, modo -@cindex eolio, modo -@cindex mixolidio, modo -@cindex lidio, modo -@cindex frigio, modo -@cindex dórico, modo - - -Aquí, @var{tipo} debe ser @code{\major} o @code{\minor} para obtener -la tonalidad @var{nota} mayor o @var{nota} menor, respectivamente. -También puede usar los nombres estándar de modo (también conocidos -como @notation{modos eclesiásticos}): @code{\ionian} (jónico), -@code{\dorian} (dórico), @code{\phrygian} (frigio), @code{\lydian} -(lidio), @code{\mixolydian} (mixolidio), @code{\aeolian} (eolio) y -@code{\locrian} (locrio). - -@lilypond[verbatim,quote,relative=2] -\key g \major -fis1 -f -fis -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - - -@seealso -Glosario musical: -@rglos{church mode}, -@rglos{scordatura}. - -Manual de aprendizaje: -@rlearning{Accidentals and key signatures}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{KeyChangeEvent}, -@rinternals{Key_engraver}, -@rinternals{Key_performer}, -@rinternals{KeyCancellation}, -@rinternals{KeySignature}, -@rinternals{key-cancellation-interface}, -@rinternals{key-signature-interface}. - - -@node Ottava brackets -@unnumberedsubsubsec Ottava brackets - -@cindex ottava -@cindex 15ma -@cindex 8va -@cindex octavación - -@funindex set-octavation -@funindex \ottava -@funindex ottava - -Los @notation{corchetes de Ottava} introducen un trasporte adicional -de una octava para el pentagrama. - -@lilypond[verbatim,quote,relative=2] -a'2 b -\ottava #1 -a b -\ottava #0 -a b -@end lilypond - -La función @code{ottava} también admite los valores -1 (para -8va bassa), 2@tie{}(para 15ma) y -2 (para 15ma bassa) como argumentos. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ottava-text.ly} - - -@seealso -Glosario musical: -@rglos{octavation}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{Ottava_spanner_engraver}, -@rinternals{OttavaBracket}, -@rinternals{ottava-bracket-interface}. - - -@node Instrument transpositions -@unnumberedsubsubsec Instrument transpositions - -@cindex transposición de MIDI -@cindex transposición instrumental -@cindex transpositor, instrumento -@cindex MIDI -@cindex MIDI, transposición - -@funindex \transposition -@funindex transposition - -Al tipografiar partituras donde participan instrumentos -transpositores, ciertas partes se pueden tipografiar en un tono -distinto del @notation{tono de concierto}. En estos casos, se debe -especificar la tonalidad del @notation{instrumento transpositor}; de -otro modo, la salida MIDI y las notas guía en otras partes producirían -alturas incorrectas. Para ver más información sobre partes citadas -como guía, consulte @ref{Quoting other voices}. - -@example -\transposition @var{pitch} -@end example - -El tono usado para @code{\transposition} debe corresponderse con el -sonido real que se oye cuando el instrumento transpositor interpreta -un Do central @code{c'} escrito en el pentagrama. Esta nota se -escribe en altura absoluta, por tanto un instrumento que produce un -sonido real un tono más agudo que la música impresa (un instrumento en -Re) debe usar @code{\transposition d'}. La instrucción -@code{\transposition} se debe usar @emph{solamente} si las notas -@emph{no} se van a escribir en afinación de concierto. - -A continuación pueden verse algunas notas para violín y para clarinete -en Si bemol, donde las partes se han introducido usando las notas y la -armadura tal y como aparecen en la partitura del director. Lo que -tocan los dos instrumentos está sonando al unísono. - -@lilypond[verbatim,quote] -\new GrandStaff << - \new Staff = "violin" { - \relative c'' { - \set Staff.instrumentName = #"Vln" - \set Staff.midiInstrument = #"violin" - % not strictly necessary, but a good reminder - \transposition c' - - \key c \major - g4( c8) r c r c4 - } - } - \new Staff = "clarinet" { - \relative c'' { - \set Staff.instrumentName = \markup { Cl (B\flat) } - \set Staff.midiInstrument = #"clarinet" - \transposition bes - - \key d \major - a4( d8) r d r d4 - } - } ->> -@end lilypond - -La @code{\transposition} se puede cambiar durante la pieza. Por -ejemplo, un clarinetista puede cambiar del clarinete en La al -clarinete en Si bemol. - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = #"Cl (A)" -\key a \major -\transposition a -c d e f -\textLengthOn -s1*0^\markup { Switch to B\flat clarinet } -R1 - -\key bes \major -\transposition bes -c2 g -@end lilypond - - -@seealso -Glosario musical: -@rglos{concert pitch}, -@rglos{transposing instrument}. - -Referencia de la notación: -@ref{Quoting other voices}, @ref{Transpose}. - -Fragmentos de código: -@rlsr{Pitches}. - - -@node Automatic accidentals -@unnumberedsubsubsec Automatic accidentals - -@cindex automáticas, alteraciones -@cindex alteraciones automáticas -@cindex alteraciones accidentales -@cindex alteraciones, estilo de las -@cindex predeterminado, estilo de las alteraciones -@cindex alteraciones, estilo predeterminado de las - -@funindex set-accidental-style -@funindex voice -@funindex default - -Existen muchas convenciones distintas sobre la forma de tipografiar -las alteraciones. LilyPond proporciona una función para especificar -qué estilo de alteraciones usar. Esta función se invoca como sigue: - -@example -\new Staff << - #(set-accidental-style 'voice) - @{ @dots{} @} ->> -@end example - -El estilo de alteraciones se aplica al @code{Staff} en curso de forma -predeterminada (con la excepción de los estilos @code{piano} y -@code{piano-cautionary}, que se explican más adelante). -Opcionalmente, la función puede tomar un segundo argumento que -determina en qué ámbito se debe cambiar el estilo. Por ejemplo, para -usar el mismo estilo en todos los pentagramas del @code{StaffGroup} en -curso, use - -@example -#(set-accidental-style 'voice 'StaffGroup) -@end example - -Están contemplados los siguientes estilos de alteración. Para dar una -muestra de cada uno de los estilos, utilizamos el ejemplo siguiente: - -@lilypond[verbatim,quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -Observe que las últimas líneas de este ejemplo se pueden sustituir por -las siguientes, siempre y cuando queramos usar el mismo estilo en los -dos pentagramas. -@example -\new PianoStaff @{ - << - \context Staff = "up" @{ - %%% cambie la línea siguiente como desee: - #(set-accidental-style 'default 'Score) - \musicA - @} - \context Staff = "down" @{ - \musicB - @} - >> -@} -@end example - - -@c don't use verbatim in this table. -@table @code -@item default (predeterminado) - -@cindex alteraciones, estilo predeterminado - -@funindex default - -Es el comportamiento de composición tipográfica predeterminado. -Corresponde a la práctica común del s. XVIII: las alteraciones -accidentales se recuerdan hasta el final del compás en el que aparecen -y sólo en la misma octava. Así, en el ejemplo siguiente, no se -imprimen becuadros antes del Si natural en el segundo compás ni en el -último Do: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -@item voice (voz) - -@cindex alteración, estilo de voz de -@cindex voz, estilo de alteraciones -@cindex alteraciones estilo moderno -@cindex moderno, estilo de alteraciones -@cindex alteraciones, estilo, moderno-precaución -@cindex moderno-precaución, estilo de alteraciones - -@funindex voice - -El comportamiento normal es recordar las alteraciones accidentales al -nivel de @code{Staff}. En este estilo, sin embargo, se tipografían -las alteraciones individualmente para cada voz. Aparte de esto, la -regla es similar a @code{default}. - -Como resultado, las alteraciones de una voz no se cancelan en las -otras voces, lo que con frecuencia lleva a un resultado no deseado: en -el ejemplo siguientem es difífil determinar si el segundo La se debe -tocar natural o sostenido. Por tanto, la opción @code{voice} se debe -usar sólo si las voces se van a leer individualmente por músicos -distintos. Si el pentagrama va a utilizarse por parte de un solo -músico (p.ej., un director, o en una partitura de piano), entonces se -deben usar en su lugar los estilos @code{modern} o -@code{modern-cautionary}. - - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'voice) - \musicB - } - >> -} -@end lilypond - -@item modern (moderno) - -@cindex alteraciones, estilo moderno -@cindex moderno, alteraciones de estilo - -@funindex modern - -Esta regla corresponde a la práctica común del s. XX. Imprime las -mismas alteraciones que el estilo @code{default}, con dos excepciones -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 octavas distintas. De aquí los becuadros antes -del Si natural y del Do en el segundo compás del pentagrama superior: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern) - \musicB - } - >> -} -@end lilypond - -@item modern-cautionary (moderno de precaución) - -@cindex alteraciones, estilo moderno de precaución -@cindex moderno, alteraciones de estilo -@cindex moderno de precaución, alteraciones de estilo - -@funindex modern-cautionary - -Esta regla es similar a @code{modern}, pero las alteraciones -@q{añadidas} (las que no se imprimen en el estilo @code{default}) se -imprimen como alteraciones de precacución. Se imprimen de forma -predeterminada con paréntesis, pero también se pueden imprimir en -tamaño reducido definiendo la propiedad @code{cautionary-style} de -@code{AccidentalSuggestion}. - - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-cautionary) - \musicB - } - >> -} -@end lilypond - -@item modern-voice (moderno, para voces) - -@cindex alteraciones, en varias voces -@cindex alteraciones modernas -@cindex moderno, alteraciones de estilo -@cindex voces, alteraciones en varias -@cindex alteración, estilo moderno de - -@funindex modern-voice - -Esta regla se usa para que puedan leer las alteraciones en varias -voces, tanto músicos que tocan una voz como músicos que tocan todas -las voces. Se imprimen las alteraciones para cada voz, pero @emph{se -cancelan} entre voces dentro del mismo @code{Staff}. Por tanto, el La -en el último compás se cancela porque la cancelación anterior estaba -en una voz distinta, y el Re en el pentagrama inferior se cancela a -causa de la alteración en otra voz en el compás previo: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice) - \musicB - } - >> -} -@end lilypond - -@item modern-voice-cautionary (moderno, voz, de precaución) - -@cindex alteración, estilo de voz de precaución moderno -@cindex alteración de voz de precaución moderno, estilo de -@cindex alteración, moderno de precaución, voz, estilo de - -@funindex modern-voice-cautionary - -Esta regla es la misma que @code{modern-voice}, pero con las -alteraciones añadidas (las que el estilo @code{voice} no imprime) -compuestas como de precaución. Incluso aunque todas las alteraciones -impresas por el estilo @code{default} @emph{son} impresas con esta -regla, algunas de ellas se tipografían como de precaución. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice-cautionary) - \musicB - } - >> -} -@end lilypond - -@item piano - -@cindex piano, alteraciones de -@cindex alteraciones de piano -@cindex piano, estilo de alteraciones de - -@funindex piano - -Esta regla refleja la práctica del s.XX para la notación de piano. Su -comportamiento es muy similar al estilo @code{modern}, pero aquí las -alteraciones también se cancelan entre distintos pentagramas del mismo -grupo @code{GrandStaff} o @code{PianoStaff}, de ahí todas las -cancelaciones de las últimas notas. - -Este estilo de alteración se aplica de manera predeterminada al grupo -@code{GrandStaff} o @code{PianoStaff} en curso. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond - -@item piano-cautionary (piano, de precaución) - -@cindex alteraciones, piano de precaución, estilo de -@cindex alteraciones, piano de precaución -@cindex precaución, estilo de alteraciones, piano -@cindex precaución, alteraciones de piano de -@cindex piano de precaución, estilo de alteraciones -@cindex piano de precaución, alteraciones - -@funindex piano-cautionary - -Igual que @code{#(set-accidental-style 'piano)} pero con las -alteraciones añadidas compuestas como de precaución. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano-cautionary) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond -@item neo-modern - -@cindex neo-moderno, estilo de alteraciones -@cindex alteraciones, estilo de, neo-moderno - -@funindex neo-modern - -Esta regla reproduce una práctica común en la música contemporánea: -las alteraciones accidentales se imprimen como en @code{modern}, pero -se vuelven a imprimir si aparece la misma nota otra vez en el mismo -compás (excepto si la nota se repite inmediatamente). - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern) - \musicB - } - >> -} -@end lilypond - -@item neo-modern-cautionary - -@cindex neo-moderno de precaución, estilo de alteraciones -@cindex alteraciones, estilo, neo-moderno de precaución - -@funindex neo-modern-cautionary - -Esta regla es similar a @code{neo-modern}, pero las alteraciones -adicionales se imprimen como alteraciones de precaución. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern-cautionary) - \musicB - } - >> -} -@end lilypond - - -@item dodecaphonic - -@cindex dodecafónico, estilo de alteraciones -@cindex alteraciones, estilo, dodecafónico - -@funindex dodecaphonic - -Esta regla refleja una práctica introducida por los compositores de -principios del s.XX, en un intento de abolir la jerarquía entre notas -naturales y alteradas. Con este estilo, @emph{todas} las notas llevan -alteración, incluso becuadros. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'dodecaphonic) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'dodecaphonic) - \musicB - } - >> -} -@end lilypond - -@item teaching (enseñanza) - -@cindex teaching (enzeñanza), estilo de alteraciones -@cindex alteraciones, estilo teaching (enseñanza) - -@funindex teaching - -Esta regla está pensada para estudiantes, y hace más sencillo crear -hojas de escalas con alteraciones de precaución creadas -automáticamente. Las alteraciones se imprimen como en el estilo -@code{modern}, pero se añaden alteraciones de precaución para todas -las notas sostenidas o bemoles especificadas por la armadura, excepto -si la nota se repite inmediatamente. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicA - } - \context Staff = "down" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicB - } - >> -} -@end lilypond - - -@item no-reset (no restablecer) - -@cindex alteraciones no restablecer, estilo de -@cindex no restablecer, estilo de alteraciones - -@funindex no-reset - -Es el mismo que @code{default} pero con alteraciones que duran @q{para -siempre} y no sólo dentro del mismo compás: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'no-reset) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'no-reset) - \musicB - } - >> -} -@end lilypond - -@item forget (olvidar) - -@cindex olvidar, estilo de alteraciones -@cindex alteración, estilo de, olvidar - -@funindex forget - -Es lo opuesto a @code{no-reset}: Las alteraciones no se recuerdan en -absoluto: de aquí que todas las alteraciones se compongan -tipográficamente en relación a la armadura de la tonalidad, sin que -estén afectadas por lo que viene antes. A diferencia de -@code{dodecaphonic}, esta regla nunca imprime becuadros: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'forget) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'forget) - \musicB - } - >> -} -@end lilypond -@end table - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{dodecaphonic-style-accidentals-for-each-note-including-naturals.ly} - - -@seealso -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{Accidental}, -@rinternals{Accidental_engraver}, -@rinternals{GrandStaff} and -@rinternals{PianoStaff}, -@rinternals{Staff}, -@rinternals{AccidentalSuggestion}, -@rinternals{AccidentalPlacement}, -@rinternals{accidental-suggestion-interface}. - - -@cindex alteraciones y notas simultáneas -@cindex simultáneas, notas y alteraciones -@cindex alteraciones en acordes -@cindex acordes, alteraciones dentro de - -@knownissues - -Las notas simultáneas se consideran introducidas en modo secuencial. -Esto significa que dentro de un acorde las alteraciones se tipografían -como si las notas del acorde se sucedieran una a una en el tiempo, en -el orden en que aparecen en el archivo de entrada. Esto plantea un -problema cuando las alteraciones de un acorde dependen unas de otras, -lo que no se da en el estilo ds alteraciones predeterminado. El -problema se puede resolver insertando manualmente@tie{}@code{!} -y@tie{}@code{?} para las notas problemáticas. - -@node Ambitus -@unnumberedsubsubsec Ambitus - -@cindex ambitus -@cindex rango de alturas -@cindex tesitura - -El término @emph{ambitus} o ámbito, denota el rango de notas que -abarca una voz dada en una parte musical. También puede denotar el -margen de notas que es capaz de tocar un determinado instrumento -musical. Los ámbitos se imprimen en las partes vocales de tal manera -que los intérpretes puedan determinar con facilidad si cumplen con sus -propias posibilidades. - -Los ámbitos se presentan al comienzo de la pieza junto a la clave -inicial. El rango se especifica gráficamente mediante dos cabezas de -nota que representan a las notas inferior y superior. Sólo se -imprimen alteraciones si no forman parte de la armadura de la -tonalidad. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Ambitus_engraver" - } -} - -\relative c'' { - aes c e2 - cis,1 -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-ambitus-per-voice.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ambitus-with-multiple-voices.ly} - - -@seealso -Glosario musical: -@rglos{ambitus}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{Ambitus_engraver}, -@rinternals{Voice}, -@rinternals{Staff}, -@rinternals{Ambitus}, -@rinternals{AmbitusAccidental}, -@rinternals{AmbitusLine}, -@rinternals{AmbitusNoteHead}, -@rinternals{ambitus-interface}. - - -@knownissues - -No se efectúa un tratamiento de las posibles colisiones en caso de -varias indicaciones de ámbito simultáneas en distintas voces. - -@node Note heads -@subsection Note heads - -Esta sección propone formas de alterar las cabezas de las figuras. - -@menu -* Special note heads:: -* Easy notation note heads:: -* Shape note heads:: -* Improvisation:: -@end menu - -@node Special note heads -@unnumberedsubsubsec Special note heads - -@cindex figura, cabeza de la -@cindex nota, cabeza especial de -@cindex nota, cabeza de, en aspas -@cindex nota, cabeza de, en rombo -@cindex nota, cabeza de, en parlato -@cindex nota, cabeza de, armónico -@cindex nota, cabeza de, guitarra -@cindex especiales, cabezas de figura -@cindex aspas, cabezas de nota -@cindex rombo, cabezas de nota -@cindex parlato, cabezas de nota -@cindex armónicos, cabezas de nota -@cindex guitarra, cabezas de nota -@cindex nota, cabeza de, estilos -@cindex estilos de cabeza de nota - -@funindex cross - -Se puede modificar la cabeza de las notas: - -@lilypond[verbatim,quote,relative=2] -c4 b a b -\override NoteHead #'style = #'cross -c4 b a b -\revert NoteHead #'style -c4 d e f -@end lilypond - -Existe una abreviatura para las formas en rombo que sólo se puede usar en acordes: - -@lilypond[verbatim,quote,relative=2] -2 4 -@end lilypond - -@noindent -Para ver todos los estilos de cabeza de las notas, consulte @ref{Note -head styles}. - - -@seealso -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de la notación: -@ref{Note head styles}. - -Referencia de funcionamiento interno: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{Ledger_line_engraver}, -@rinternals{NoteHead}, -@rinternals{LedgerLineSpanner}, -@rinternals{note-head-interface}, -@rinternals{ledger-line-spanner-interface}. - - -@node Easy notation note heads -@unnumberedsubsubsec Easy notation note heads - -@cindex Hal Leonard -@cindex principiantes, música para -@cindex fácil, notación, cabezas de nota de -@cindex música para principiantes -@cindex notas, cabezas de, estudio -@cindex notas, cabezas de, notación simplificada -@cindex nots, cabezas de, para precticar -@cindex simplificada, notación - -@funindex \easyHeadsOn -@funindex easyHeadsOn -@funindex \easyHeadsOff -@funindex easyHeadsOff - -Las cabezas @q{easy play} (fáciles de tocar) tienen el nombre de la -nota (en inglés) dentro de la cabeza. Se usa en la música para -principiantes. - -@lilypond[verbatim,quote] -#(set-global-staff-size 26) -\relative c' { - \easyHeadsOn - c2 e4 f - g1 - \easyHeadsOff - c,1 -} -@end lilypond - -La instrucción @code{\easyHeadsOn} sobreescribe los ajustes del objeto -@code{NoteHead}. Estos ajustes se pueden deshacer mediante la -isntrucción @code{\easyHeadsOff}. Para que las letras sean legibles, -se tienen que imprimir en un tamaño grande de la tipografía. Para -imprimir con un tamaño de tipografía mayor, consulte @ref{Setting the -staff size}. - - -@predefined -@code{\easyHeadsOn}, -@code{\easyHeadsOff}. -@endpredefined - - -@seealso -Referencia de la notación: -@ref{Setting the staff size}. - -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Shape note heads -@unnumberedsubsubsec Shape note heads - -@cindex notas, cabezas de, con formas -@cindex notas, cabezas de, Aiken -@cindex notas, cabezas de, arpa sacra -@cindex formas, notas con -@cindex Aiken, cabezas de nota con forma de -@cindex arpa sacra, cabezas de nota de - -@funindex \key -@funindex key -@funindex \aikenHeads -@funindex aikenHeads -@funindex \sacredHarpHeads -@funindex sacredHarpHeads - -En la notación de cabezas con forma, la forma de la cabeza corresponde -a la función armónica de una nota dentro de la escala. Esta notación -se hizo popular en los libros americanos de canciones durante el -s.XIX. - -@lilypond[verbatim,quote,relative=2] -\aikenHeads -c, d e f g a b c -\sacredHarpHeads -c, d e f g a b c -@end lilypond - -Las formas se determinan en función del grado de la escala, donde la -tónica está determinada por la instrucción @code{\key} - - -@predefined -@code{\aikenHeads}, -@code{\sacredHarpHeads}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} - -@noindent -Para ver todos los estilos de formas de cabeza de nota, consulte -@ref{Note head styles}. - - -@seealso -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de la notación: -@ref{Note head styles}. - -Referencia de funcionamiento interno: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Improvisation -@unnumberedsubsubsec Improvisation - -@cindex improvisación -@cindex barradas, cabezas de nota -@cindex notas, cabezas de, improvisación -@cindex notas, cabezas de, barradas - -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -La improvisación se denota a veces mediante cabezas de nota en forma -de barra inclinada, donde el ejecutante puede elegir cualquier nota -pero con el ritmo especificado. Estas cabezas de nota se crean así: - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { - \consists "Pitch_squash_engraver" -} { - e8 e g a a16( bes) a8 g - \improvisationOn - e8 ~ - e2 ~ e8 f4 f8 ~ - f2 - \improvisationOff - a16( bes) a8 g e -} -@end lilypond - - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - - -@seealso -Fragmentos de código: -@rlsr{Pitches}. - -Referencia de funcionamiento interno: -@rinternals{Pitch_squash_engraver}, -@rinternals{Voice}, -@rinternals{RhythmicStaff}. diff --git a/Documentation/es/user/preface.itely b/Documentation/es/user/preface.itely deleted file mode 100644 index 838ee659f3..0000000000 --- a/Documentation/es/user/preface.itely +++ /dev/null @@ -1,63 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Preface -@unnumbered Preface - - -Debió ser en el transcurso de un ensayo de la EJE (Joven Orquesta de -Eindhoven), allá por 1995 cuando Jan, uno de los violistas chiflados, -le habló a Han-Wen, uno de los trompistas distorsionados, acerca del -gran proyecto en que estaba trabajando. Era un sistema automático para -imprimir música (concretamente se trataba de MPP, un preprocesador -para MusiXTeX). Resulta que Han-Wen quiso imprimir unas particellas a -partir de una partitura, así que empezó a echarle un vistazo al -programa, pero se quedó estancado rápidamente. Decidieron que MPP era -un callejón sin salida. Después de muchísimo filosofar y de montañas -de encendidas conversaciones por correo electrónico, Han-Wen inició el -proyecto LilyPond en 1996. Esta vez fue Jan quien resultó absorbido -por el nuevo proyecto de Han-Wen. - -En ciertos aspectos, desarrollar un programa de ordenador es como -aprender a tocar un instrumento. Al principio es divertido descubrir -cómo funciona, y supone un divertido reto intentar aquello de lo que -aún no eres capaz. Una vez pasado el entusiasmo inicial, hay que -practicar más y más. Las escalas y los estudios pueden llegar a -aturdir, y si no está motivado por otras personas (profesores, -directores o el público) uno siempre está tentado de abandonarlo. Uno -persevera y, poco a poco, tocar se convierte en parte de la vida de -uno. Algunos días se acoge de forma natural, y es estupendo, y otros -simplemente la cosa no funciona, pero uno sigue tocando día tras día. - -Igual que hacer música, trabajar en LilyPond puede ser un trabajo muy -duro y hay días en que uno se siente como pisando un hormiguero. A -pesar de todo, se ha convertido en parte de nuestra vida y seguimos -haciéndolo. Con toda probabilidad la motivación más importante es que -nuestro programa realmente hace algo útil por las personas. Cuando -navegamos por la red encontramos mucha gente que utiliza LilyPond y -produce unas partituras impresionantes con él. De esta observación se -desprende una sensación algo irreal, pero muy agradable. - -Nuestros usuarios no sólo nos transmiten buenas vibraciones por usar -el programa, también muchos de ellos nos ayudan enviando sugerencias e -informes de fallo; por ello nos gustaría agradecer a todos los -usuarios que nos han enviado estos informes, emitido sugerencias o -contribuido a LilyPond de cualquier otra forma. - -Tocar e imprimir música es algo más que una bonita analogía. -Programar juntos es muy divertido, y ayudar a las personas es algo -profundamente gratificante, pero en último término trabajar en -LilyPond es una forma de expresar nuestro profundo amor por la música. -¡Ojalá le ayude a elaborar montañas de preciosas partituras! - -Han-Wen y Jan - -Utrecht/Eindhoven, Holanda, julio de 2002. diff --git a/Documentation/es/user/programming-interface.itely b/Documentation/es/user/programming-interface.itely deleted file mode 100644 index e801062b9d..0000000000 --- a/Documentation/es/user/programming-interface.itely +++ /dev/null @@ -1,1530 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Interfaces for programmers -@chapter Interfaces for programmers - -Se pueden realizar trucos avanzados mediante el uso de Scheme. Si no -está familizarizado con Scheme, le conviene leer nuestro tutorial de -Scheme, @rlearning{Scheme tutorial}. - -@menu -* Music functions:: -* Programmer interfaces:: -* Building complicated functions:: -* Markup programmer interface:: -* Contexts for programmers:: -* Scheme procedures as properties:: -* Using Scheme code instead of \tweak:: -* Difficult tweaks:: -@end menu - - -@node Music functions -@section Music functions - -Esta sección trata sobre cómo crear funciones musicales dentro de -LilyPond. - -@menu -* Overview of music functions:: -* Simple substitution functions:: -* Paired substitution functions:: -* Mathematics in functions:: -* Void functions:: -* Functions without arguments:: -* Overview of available music functions:: -@end menu - -@node Overview of music functions -@subsection Overview of music functions - -Es fácil hacer una función que sustituya a una variable en código de -LilyPond. La forma general de estas funciones es: - -@example -function = -#(define-music-function (parser location @var{var1} @var{var2}...@var{vari}... ) - (@var{var1-type?} @var{var2-type?}...@var{vari-type?}...) - #@{ - @emph{...música...} - #@}) -@end example - -@noindent -donde - -@multitable @columnfractions .33 .66 -@item @var{vari} @tab @var{i}-ésima variable -@item @var{vari-type?} @tab tipo de la @var{i}-ésima variable -@item @var{...música...} @tab entrada normal de LilyPond, usando las variables como @code{#$var1}, etc. -@end multitable - -Los siguientes tipos de entrada se pueden usar como variables en una -función musical. Esta lista no es exhaustiva; consulte otros lugares -de la documentación específica de Scheme para ver otros tipos de -variables. - -@multitable @columnfractions .33 .66 -@headitem Tipo de entrada @tab notación de @var{vari-type?} -@item Entero @tab @code{integer?} -@item Flotante (número decimal) @tab @code{number?} -@item Cadena de texto @tab @code{string?} -@item Marcado @tab @code{markup?} -@item Expresión musical @tab @code{ly:music?} -@item Pareja de variables @tab @code{pair?} -@end multitable - -Los argumentos @code{parser} y @code{location} son obligatorios, y se -usan en ciertas situaciones avanzadas. El argumento @code{parser} se -usa para tener acceso al valor de otra variable de LilyPond. El -argumento @code{location} se usa para establecer el @q{origen} de la -expresión musical que construye la función musical, de forma que en -caso de producirse un error de sintaxis LilyPond pueda informar al -usuario de un lugar adecuado donde buscar en el archivo de entrada. - - -@node Simple substitution functions -@subsection Simple substitution functions - -He aquí un ejemplo sencillo: - -@lilypond[quote,verbatim,ragged-right] -padText = #(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -También se pueden sustituir las expresiones musicales: - -@lilypond[quote,verbatim,ragged-right] -custosNote = #(define-music-function (parser location note) - (ly:music?) - #{ - \once \override Voice.NoteHead #'stencil = - #ly:text-interface::print - \once \override Voice.NoteHead #'text = - \markup \musicglyph #"custodes.mensural.u0" - \once \override Voice.Stem #'stencil = ##f - $note - #}) - -{ c' d' e' f' \custosNote g' } -@end lilypond - -Se pueden usar más de una variable: - -@lilypond[quote,verbatim,ragged-right] -tempoMark = #(define-music-function (parser location padding marktext) - (number? string?) -#{ - \once \override Score . RehearsalMark #'padding = $padding - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $marktext } -#}) - -\relative c'' { -c2 e -\tempoMark #3.0 #"Allegro" -g c -} -@end lilypond - - -@node Paired substitution functions -@subsection Paired substitution functions - -Algunas instrucciones @code{\override} requieren un par de números -(llamados en Scheme una @code{célula cons}). Para pasar estos números -a una función, usamos una variable @code{pair?} o bien insertamos el -@code{cons} en la función musical. - -@quotation -@example -manualBeam = -#(define-music-function (parser location beg-end) - (pair?) -#@{ - \once \override Beam #'positions = #$beg-end -#@}) - -\relative @{ - \manualBeam #'(3 . 6) c8 d e f -@} -@end example -@end quotation - -@noindent -o bien - -@lilypond[quote,verbatim,ragged-right] -manualBeam = -#(define-music-function (parser location beg end) - (number? number?) -#{ - \once \override Beam #'positions = #(cons $beg $end) -#}) - -\relative { - \manualBeam #3 #6 c8 d e f -} -@end lilypond - - -@node Mathematics in functions -@subsection Mathematics in functions - -Las funciones musicales pueden contar con programación de Scheme -además de la simple sustitución: - -@lilypond[quote,verbatim,ragged-right] -AltOn = #(define-music-function (parser location mag) (number?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) - -AltOff = { - \revert Stem #'length - \revert NoteHead #'font-size -} - -{ c'2 \AltOn #0.5 c'4 c' - \AltOn #1.5 c' c' \AltOff c'2 } -@end lilypond - -@noindent -Este ejemplo se puede reescribir de forma que pase expresiones -musicales: - -@lilypond[quote,verbatim,ragged-right] -withAlt = #(define-music-function (parser location mag music) (number? ly:music?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) - $music - \revert Stem #'length - \revert NoteHead #'font-size #}) - -{ c'2 \withAlt #0.5 {c'4 c'} - \withAlt #1.5 {c' c'} c'2 } -@end lilypond - - -@node Void functions -@subsection Void functions - -Una función musical debe devolver una expresión musical, per a veces -podemos necesitar una función en la que no hay música en juego (como -la desactivación de la funcionalidad Apuntar y Pulsar). Para hacerlo, -devolvemos una expresión musical @code{void} (vacía). - -Este es el motivo por el que la forma que se devuelve es -@code{(make-music ...)}. Con el valor de la propiedad @code{'void} -establecido a @code{#t}, le decimos al analizador que descarte la -expresión musical devuelta. así, la parte importante de la función -musical vacía es el proceso realizado por la función, no la expresión -musical que se devuelve. - -@example -noPointAndClick = -#(define-music-function (parser location) () - (ly:set-option 'point-and-click #f) - (make-music 'SequentialMusic 'void #t)) -... -\noPointAndClick % desactivar la funcionalidad Apuntar y Pulsar. -@end example - - -@node Functions without arguments -@subsection Functions without arguments - -En casi todos los casos, una función sin argumentos se debe escribir -con una variable: - -@example -dolce = \markup@{ \italic \bold dolce @} -@end example - -Sin embargo, en raras ocasiones puede ser de utilidad crear una -función musical sin argumentos: - -@example -displayBarNum = -#(define-music-function (parser location) () - (if (eq? #t (ly:get-option 'display-bar-numbers)) - #@{ \once \override Score.BarNumber #'break-visibility = ##f #@} - #@{#@})) -@end example - -Para la imresión real de los números de compás donde se llama a esta -función, invoque a @command{lilypond} con - -@example -lilypond -d display-bar-numbers ARCHIVO.ly -@end example - - -@node Overview of available music functions -@subsection Overview of available music functions - -@c fixme ; this should be move somewhere else? -Las siguientes instrucciones son funciones musicales: - -@include identifiers.tely - - -@node Programmer interfaces -@section Programmer interfaces - -Esta sección contiene información sobre cómo mezclar LilyPond y -Scheme. - -@menu -* Input variables and Scheme:: -* Internal music representation:: -@end menu - -@node Input variables and Scheme -@subsection Input variables and Scheme - -El formato de entrada contempla la noción de variables: en el ejemplo -siguiente, se asigna una expresión musical a una variable con el -nombre @code{traLaLa}. - -@example -traLaLa = @{ c'4 d'4 @} -@end example - -@noindent - -También existe una forma de ámbito léxico: en el ejemplo siguiente, el -bloque @code{\layout} también contiene una variable @code{traLaLa}, -que es independiente de la @code{\traLaLa} exterior. - -@example -traLaLa = @{ c'4 d'4 @} -\layout @{ traLaLa = 1.0 @} -@end example -@c -De hecho, cada archivo de entrada es un ámbito léxico, y todos los -bloques @code{\header}, @code{\midi} y @code{\layout} son ámbitos -anidados dentro de dicho ámbito de nivel superior. - -Tanto el ámbito léxico como las variables están implementados en el -sistema de módulos GUILE. Se adjunta un módulo anónimo de Scheme a -cada ámbito. Una asignación de la forma -@example -traLaLa = @{ c'4 d'4 @} -@end example - -@noindent -se convierte internamente a una definición de Scheme -@example -(define traLaLa @var{Scheme value of `@code{... }'}) -@end example - -Esto supone que las variables de entrada y las variables de Scheme se -pueden intermezclar con libertad. En el ejemplo siguiente, se -almacena un fragmento musical en la variable @code{traLaLa}, y se -dupplica utilizando Scheme. El resultado se importa en un bloque -@code{\score} por medio de una segunda variable @code{twice}: - -@lilypond[verbatim] -traLaLa = { c'4 d'4 } - -%% dummy action to deal with parser lookahead -#(display "this needs to be here, sorry!") - -#(define newLa (map ly:music-deep-copy - (list traLaLa traLaLa))) -#(define twice - (make-sequential-music newLa)) - -{ \twice } -@end lilypond - -@c Due to parser lookahead - -En este ejemplo, la asignación se produce después de que el analizador -sintáctico ha verificado que no ocurre nada interesante después de -@code{traLaLa = @{ ... @}}. Sin el argumento mudo del ejemplo, la -definición @code{newLa} se ejecuta antes de que se defina -@code{traLaLa}, conduciendo a un error de sintaxis. - -El ejemplo anterior muestra cómo @q{exportar} expresiones musicales -desde la entrada hasta el intérprete de Scheme. También es posible lo -contrario. Envolviendo un valor de Scheme en la función -@code{ly:export}, un valor de Scheme se interpreta como si hubiera -sido introducido en sintaxis de LilyPond. En vez de definir -@code{\twice}, el ejemplo anterior podría también haberse escrito como - -@example -... -@{ #(ly:export (make-sequential-music (list newLa))) @} -@end example - -El sódigo de Scheme se evalúa tan pronto como el analizador sintáctico -lo encuentra. Para definir código de Scheme en un macro (para -llamarlo con posterioridad), use @ref{Void functions}, o bien - -@example -#(define (nopc) - (ly:set-option 'point-and-click #f)) - -... -#(nopc) -@{ c'4 @} -@end example - -@knownissues - -No es posible mezclar variables de Scheme y de LilyPond con la opción -@code{--safe}. - - -@node Internal music representation -@subsection Internal music representation - -Cuando se analiza sintácticamente una expresión musical, se convierte -en un conjunto de objetos musicales de Scheme. La propiedad que -define a un objeto musical es que tiene una cierta duración. El -tiempo es un número racional que mide la longitud de un fragmento de -música en unidades del valor de una redonda. - -Un objeto musical tiene tres clases de tipos: -@itemize -@item -nombre musical: cada expresión musical tiene un nombre. Por ejemplo, -una nota conduce a un evento @rinternals{NoteEvent}, y -@code{\simultaneous} conduce a @rinternals{SimultaneousMusic}. Hay -una lista de todas las expresiones que están disponibles en el Manual -de referencia de funcionamiento interno, bajo @rinternals{Music -expressions}. - -@item -@q{typo} o intterface: cada nombre de música tiene varios @q{tipos} o -interfaces, por ejemplo una nota es un @code{event}, pero también es -un @code{note-event}, un @code{rhythmic-event} y un -@code{melodic-event}. Todas las clases musicales se encuentran -relacionadas en la Referencia de funcionamiento interno bajo -@rinternals{Music classes}. - -@item -Objeto de C++: cada objeto musical está representado por un objeto de -la clase de C++ @code{Music}. -@end itemize - -La información real de una expresión musical se almacena en forma de -propiedades. Por ejemplo, un evento @rinternals{NoteEvent} tiene -propiedades @code{pitch} y @code{duration} que almacenan la altura y -duración de la nota. Hay una lista completa de las propiedades que -están disponibles en la Referencia de funcionamiento interno, bajo -@rinternals{Music properties}. - -Una expresión musical compuesta es un objeto musical que contiene -otros objetos musicales en sus propiedades. Se puede almacernar una -lista de objetos en la propiedad @code{elements} de un objeto musical, -o un solo objeto musical @q{hijo} en la propiedad @code{element}. Por -ejemplo, @rinternals{SequentialMusic} tiene sus hijos en -@code{elements}, y @rinternals{GraceMusic} tiene su elemento único en -@code{element}. El cuerpo de una repetición se almacena en la -propiedad @code{element} de @rinternals{RepeatedMusic}, y las -alternativas en @code{elements}. - - -@node Building complicated functions -@section Building complicated functions - -Esta sección explica cómo reunir la información necesaria para crear -funciones musicales complejas. - - -@menu -* Displaying music expressions:: -* Music properties:: -* Doubling a note with slurs (example):: -* Adding articulation to notes (example):: -@end menu - -@node Displaying music expressions -@subsection Displaying music expressions - -@cindex interno, almacenamiento -@funindex \displayMusic - -Si se está escribiendo una función musical puede ser muy instructivo -examinar cómo se almacena internamente una expresión musical. Esto se -puede hacer con la función musical @code{\displayMusic}: - -@example -@{ - \displayMusic @{ c'4\f @} -@} -@end example - -@noindent -imprime lo siguiente: - -@example -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)) - (make-music - 'AbsoluteDynamicEvent - 'text - "f"))))) -@end example - -De forma predeterminada, LilyPond imprime estos mensajes en la consola -junto al resto de los mensajes. Para discernir entre estos mensajes y -guardar el resultado de @code{\display@{MATERIAL@}}, redirija la -salida hacia un archivo. - -@example -lilypond archivo.ly >resultado.txt -@end example - -Con la aplicación de un poco de formato, la inforamción anterior es -fácil de leer: - -@example -(make-music 'SequentialMusic - 'elements (list (make-music 'EventChord - 'elements (list (make-music 'NoteEvent - 'duration (ly:make-duration 2 0 1 1) - 'pitch (ly:make-pitch 0 0 0)) - (make-music 'AbsoluteDynamicEvent - 'text "f"))))) -@end example - -Una secuencia musical @code{@{ ... @}} tiene el nombre -@code{SequentialMusic}, y sus expresiones internas se almacenan como -una lista en su propiedad @code{'elements}. Una nota se representa -como una expresión @code{EventChord} que contiene un objeto -@code{NoteEvent} (que almacena las propiedades de duración y altura) y -cualquier otra información adicional (en este caso, un evento -@code{AbsoluteDynamicEvent} con una porpiedad de texto @code{"f"}. - - -@node Music properties -@subsection Music properties - -El objeto @code{NoteEvent} es el primer objeto de la propiedad -@code{'elements} de @code{someNote}. - -@example -unaNota = c' -\displayMusic \unaNota -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)))) -@end example - -La función @code{display-scheme-music} es la función utilizada por -@code{\displayMusic} para imprimir la representación de Scheme de una -expresión musical. - -@example -#(display-scheme-music (first (ly:music-property unaNota 'elements))) -===> -(make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)) -@end example - -Después se accede a la altura de la nota a través de la propiedad -@code{'pitch} del objeto @code{NoteEvent}: - -@example -#(display-scheme-music - (ly:music-property (first (ly:music-property unaNota 'elements)) - 'pitch)) -===> -(ly:make-pitch 0 0 0) -@end example - -La altura de la nota se puede cambiar estableciendo el valor de esta -propiedad 'pitch: - -@funindex \displayLilyMusic - -@example -#(set! (ly:music-property (first (ly:music-property unaNota 'elements)) - 'pitch) - (ly:make-pitch 0 1 0)) ;; fijar la altura a d'. -\displayLilyMusic \unaNota -===> -d' -@end example - - -@node Doubling a note with slurs (example) -@subsection Doubling a note with slurs (example) - -Supongamos que queremos crear una función que traduce una entrada como -@code{a} a algo como @code{a( a)}. Empezamos examinando la -representación interna de la música con la que queremos terminar. - -@example -\displayMusic@{ a'( a') @} -===> -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)) - (make-music - 'SlurEvent - 'span-direction - -1))) - (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)) - (make-music - 'SlurEvent - 'span-direction - 1))))) -@end example - -Las malas noticias son que las espresiones @code{SlurEvent} se deben -añadir @q{dentro} de la nota (o más concretamente, dentro de la -expresión @code{EventChord}). - -Ahora observamos la entrada: - -@example -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)))))) -@end example - -Así pues, en nuestra función, tenemos que clonar esta expresión (de -forma que tengamos dos notas para construir la secuencia), añadir -@code{SlurEvents} a la propiedad @code{'elements} de cada una de -ellas, y por último hacer una secuencia @code{SequentialMusic} con los -dos @code{EventChords}. - -@example -doubleSlur = #(define-music-function (parser location note) (ly:music?) - "Return: @{ note ( note ) @}. - `note' is supposed to be an EventChord." - (let ((note2 (ly:music-deep-copy note))) - (set! (ly:music-property note 'elements) - (cons (make-music 'SlurEvent 'span-direction -1) - (ly:music-property note 'elements))) - (set! (ly:music-property note2 'elements) - (cons (make-music 'SlurEvent 'span-direction 1) - (ly:music-property note2 'elements))) - (make-music 'SequentialMusic 'elements (list note note2)))) -@end example - - -@node Adding articulation to notes (example) -@subsection Adding articulation to notes (example) - -La manera fácil de añadir articulación a las notas es fundir dos -expresiones musicales en un contexto único, como está explicado en -@ref{Creating contexts}. Sin embargo, suponga que queremos escribir -una función musical que haga esto. - -Una @code{$variable} dentro de la notación @code{#@{...#@}} es como -usar una @code{\variable} normal en la notación clásica de LilyPond. -Sabemos que - -@example -@{ \musica -. -> @} -@end example - -@noindent -no funciona en LilyPond. Podemos evitar este problema adjuntando la -articulación a una nota de mentira, - -@example -@{ << \musica s1*0-.-> @} -@end example - -@noindent -pero a los efectos de este ejemplo, aprenderemos ahora cómo hacerlo en -Scheme. Comenzamos examinando nuestra entrada y la salida deseada: - -@example -% entrada -\displayMusic c4 -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch -1 0 0)))) -===== -% salida deseada -\displayMusic c4-> -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch -1 0 0)) - (make-music - 'ArticulationEvent - 'articulation-type - "marcato"))) -@end example - -Vemos que una nota (@code{c4}) se representa como una expresión -@code{EventChord}, con una expresión @code{NoteEvent} en su lista de -elementos. Para añadir una articulación marcato, se debe añadir una -expresión @code{ArticulationEvent} a la propiedad elementos de la -expresión @code{EventChord}. - -Para construir esta función, empezamos con - -@example -(define (add-marcato event-chord) - "Añadir una ArticulationEvent de marcato a los elementos de `event-chord', - que se ssupone que es una expresión EventChord." - (let ((result-event-chord (ly:music-deep-copy event-chord))) - (set! (ly:music-property result-event-chord 'elements) - (cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements))) - result-event-chord)) -@end example - -La primera línea es la forma de definir una función en Scheme: el -nombre de la función es @code{add-marcato}, y tiene una variable -llamada @code{event-chord}. En Scheme, el tipo de variable suele -quedar claro a partir de su nombre (¡esto también es una buena -práctica en otros lenguajes de programación!). - -@example -"Añadir una ArticulationEvent de marcato..." -@end example - -@noindent -es una descripción de lo que hace la función. No es estrictamente -necesario, pero como los nombres de variable claros, es una buena -práctica. - -@example -(let ((result-event-chord (ly:music-deep-copy event-chord))) -@end example - -@code{let} se usa para declarar variables locales. Aquí usamos una -variable local, llamada @code{result-event-chord}, a la que le damos -el valor @code{(ly:music-deep-copy event-chord)}. -@code{ly:music-deep-copy} es una función específica de LilyPond, como -todas las funciones que comienzan por @code{ly:}. Se usa para hacer -una copia de una expresión musical. Aquí, copiamos @code{event-chord} -(el parámetro de la función). Recuerde que el propósito es añadir un -marcato a una expresión @code{EventChord}. Es mejor no modificar el -@code{EventChord} que se dio como argumento, porque podría utilizarse -en algún otro lugar. - -Ahora tenemos un @code{result-event-chord}, que es una expresión -@code{NoteEventChord} y es una copia de @code{event-chord}. Añadimos -el marcato a su propiedad lista de elementos. - -@example -(set! place new-value) -@end example - -Aquí, lo que queremos establecer (el @q{place}) es la propiedad -@q{elements} de la expresión @code{result-event-chord}. - -@example -(ly:music-property result-event-chord 'elements) -@end example - -@code{ly:music-property} es la función que se usa para acceder a las -propiedades musicales (los @code{'elements}, @code{'duration}, -@code{'pitch}, etc., que vemos en la salida de @code{\displayMusic} -más arriba). El nuevo valor es la anterior propiedad elements, con un -elemento adicional: la expresión @code{ArticulationEvent}, que -copiamos a partir de la salida de @code{\displayMusic}, - -@example -(cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements)) -@end example - -@code{cons} se usa para añadir un elemento a una lsita sin modificar -la lista original. Esto es lo que queremos: la misma lista que antes, -más la nueva expresión @code{ArticulationEvent}. El orden dentro de -la propiedad elements no es importante aquí. - -Finalmente, una vez añadida la articulación marcato a su propiedad -@code{elements}, podemos devolver @code{result-event-chord}, de aquí -la última línea de la función. - -Ahora transformamos la función @code{add-marcato} en una función -musical, - -@example -addMarcato = #(define-music-function (parser location event-chord) - (ly:music?) - "Add a marcato ArticulationEvent to the elements of `event-chord', - which is supposed to be an EventChord expression." - (let ((result-event-chord (ly:music-deep-copy event-chord))) - (set! (ly:music-property result-event-chord 'elements) - (cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements))) - result-event-chord)) -@end example - -Podemos verificar que esta función musical funciona correctamente, - -@example -\displayMusic \addMarcato c4 -@end example - - -@node Markup programmer interface -@section Markup programmer interface - -Los marcados están implementados como funciones de Scheme especiales -que producen un elemento Stencil (sello) dado un número de argumentos. - -@menu -* Markup construction in Scheme:: -* How markups work internally:: -* New markup command definition:: -* New markup list command definition:: -@end menu - -@node Markup construction in Scheme -@subsection Markup construction in Scheme - -@cindex marcado, definir instrucciones de - -El macro @code{markup} construye expresiones de marcado en Scheme, -proporcionando una sintaxis similar a la de LilyPond. Por ejemplo: - -@example -(markup #:column (#:line (#:bold #:italic "hola" #:raise 0.4 "mundo") - #:larger #:line ("fulano" "fulanito" "menganito"))) -@end example - -@noindent -equivale a: -@example -\markup \column @{ \line @{ \bold \italic "hola" \raise #0.4 "mundo" @} - \larger \line @{ fulano fulanito menganito @} @} -@end example - -@noindent -Este ejemplo muestra las principales reglas de traducción entre la -sitaxis del marcado normal de LilyPond y la sintaxis del marcado de -Scheme. - -@quotation -@multitable @columnfractions .3 .3 -@item @b{LilyPond} @tab @b{Scheme} -@item @code{\markup marcado1} @tab @code{(markup marcado1)} -@item @code{\markup @{ marcado1 marcado2 ... @}} @tab - @code{(markup marcado1 marcado2 ... )} -@item @code{\instruccion} @tab @code{#:instruccion} -@item @code{\variable} @tab @code{variable} -@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )} -@item @code{cadena} @tab @code{"cadena"} -@item @code{#argumento-de-scheme} @tab @code{argumento-de-scheme} -@end multitable -@end quotation - -Todo el lenguaje Scheme está accesible dentro del macro @code{markup}. -Por ejemplo, podemos usar llamadas a funciones dentro de @code{markup} -para así manipular cadenas de caracteres. Esto es útil si se están -definiendo instrucciones de marcado nuevas (véase @ref{New markup -command definition}). - -@knownissues - -El argumento markup-list de instrucciones como @code{#:line}, -@code{#:center} y @code{#:column} no pueden se una variable o el -resultado de la llamada a una función. - -@lisp -(markup #:line (funcion-que-devuelve-marcados)) -@end lisp - -@noindent -no es válido. Hay que usar las funciones @code{make-line-markup}, -@code{make-center-markup} o @code{make-column-markup} en su lugar: - -@lisp -(markup (make-line-markup (funcion-que-devuelve-marcados))) -@end lisp - - -@node How markups work internally -@subsection How markups work internally - -En un elemento de marcado como - -@example -\raise #0.5 "ejemplo de texto" -@end example - -@noindent -@code{\raise} se representa en realidad por medio de la función -@code{raise-markup}. La expresión de marcado se almacena como - -@example -(list raise-markup 0.5 (list simple-markup "ejemplo de texto")) -@end example - -Cuando el marcado se convierte en objetos imprimibles (Stencils o -sellos), se llama la función @code{raise-markup} como - -@example -(apply raise-markup - @var{\objeto de marcado} - @var{lista de listas asociativas de propiedades} - 0.5 - @var{el marcado "ejemplo de texto"}) -@end example - -Primero la función @code{raise-markup} crea el sello para la cadena -@code{ejemplo de texto}, y después eleva el sello Stencil en 0.5 -espacios de pentagrama. Este es un ejemplo bastante simple; en el -resto de la sección podrán verse ejemplos más complejos, así como en -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node New markup command definition -@subsection New markup command definition - -Las instrucciones de marcado nuevas se pueden definir con el macro de -Scheme @code{define-markup-command}. - -@lisp -(define-markup-command (@var{nombre-de-la-instruccion} @var{layout} @var{props} @var{arg1} @var{arg2} ...) - (@var{arg1-type?} @var{arg2-type?} ...) - ..command body..) -@end lisp - -Los argumentos son - -@table @var -@item argi -@var{i}-ésimo argumento de la instrucción -@item argi-type? -predicado de tipo para el argumento @var{i}-ésimo -@item layout -la definición de @q{presentación} -@item props -lista de listas asociativas, que contiene todas las propiedades -activas. -@end table - -Como ejemplo sencillo, mostramos cómo añadir una instrucción -@code{\smallcaps}, que selecciona una tipografía de versalitas. -Normalmente podríamos seleccionar la tipografía de versalitas, - -@example -\markup @{ \override #'(font-shape . caps) Texto-en-versalitas @} -@end example - -@noindent -Esto selecciona la tipografía de versalitas mediante el -establecimiento de la propiedad @code{font-shape} a @code{#'caps} para -la interpretación de @code{Texto-en-versalitas}. - -Para poner lo anterior disponible como la instrucción -@code{\smallcaps}, tenemos que definir una función utilizando -@code{define-markup-command}. La instrucción ha de tomar un argumento -del tipo @code{markup}. Por tanto, el inicio de la definición ha de -ser - -@example -(define-markup-command (smallcaps layout props argument) (markup?) -@end example - -@noindent - -Lo que aparece a continuación es el contenido de la instrucción: -debemos interpretar el @code{argument} como un marcado, es decir: - -@example -(interpret-markup layout @dots{} argument) -@end example - -@noindent -Esta interpretación tiene que añadir @code{'(font-shape . caps)} a las -propiedades activas, por lo que sustituimos lo siguiente por los -@dots{} en el ejemplo anterior: - -@example -(cons (list '(font-shape . caps) ) props) -@end example - -@noindent -La variable @code{props} es una lista de a-listas, y se lo anteponemos -haciendo la operación cons de una lista con el ajuste adicional. - -Supongamos que estamos tipografiando un recitativo de una ópera y nos -gustaría definir una instrucción que presente los nombres de los -personajes de una forma personalizada. Queremos que los nombres se -impriman con versalitas y se desplacen un poco a la izquierda y hacia -arriba. Definimos una instrucción @code{\character} que toma en -cuenta la traslación necesaria y utiliza la instrucción -@code{\smallcaps} recién definida: - -@example -#(define-markup-command (character layout props nombre) (string?) - "Imprimir el nombre del personaje en versalitas, desplazado a la izquierda y hacia - arriba. Sintaxis: \\character #\"nombre\"" - (interpret-markup layout props - (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps nombre))) -@end example - -Esta es una complicación que requiere una explicación: los textos por -encima y por debajo del pentagrama se mueven verticalmente de forma -que estén a una cierta distancia (la propiedad @code{padding}) del -pentagrama y de las notas. Para asegurar que este mecanismo no anula -el efecto de nuestro @code{#:translate}, añadimos una cadena vacía -(@code{#:hspace 0}) antes del texto trasladado. Ahora el -@code{#:hspace 0} se pone encima de las notas, y el @code{nombre} se -mueve en relación a dicha cadena vacía. El efecto neto es que el -texto se mueve hacia la izquierda y hacia arriba. - -El resultado final es como sigue: - -@example -@{ - c''^\markup \character #"Cleopatra" - e'^\markup \character #"Giulio Cesare" -@} -@end example - -@lilypond[quote,ragged-right] -#(define-markup-command (smallcaps layout props str) (string?) - "Print the string argument in small caps. Syntax: \\smallcaps #\"string\"" - (interpret-markup layout props - (make-line-markup - (map (lambda (s) - (if (= (string-length s) 0) - s - (markup #:large (string-upcase (substring s 0 1)) - #:translate (cons -0.6 0) - #:tiny (string-upcase (substring s 1))))) - (string-split str #\Space))))) - -#(define-markup-command (character layout props name) (string?) - "Print the character name in small caps, translated to the left and - top. Syntax: \\character #\"name\"" - (interpret-markup layout props - (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name))) - -{ - c''^\markup \character #"Cleopatra" c'' c'' c'' - e'^\markup \character #"Giulio Cesare" e' e' e' -} -@end lilypond - -Hemos usado la forma de fuente tipográfica @code{caps}, pero -supongamos que nuestra fuente no tiene la variante de versalitas. En -ese caso tenemos que hacer una falsa fuente de mayúsculas pequeñas -haciendo que la cadena en mayúsculas tenga la primera legra un poco -mayor: - -@example -#(define-markup-command (smallcaps layout props str) (string?) - "Print the string argument in small caps." - (interpret-markup layout props - (make-line-markup - (map (lambda (s) - (if (= (string-length s) 0) - s - (markup #:large (string-upcase (substring s 0 1)) - #:translate (cons -0.6 0) - #:tiny (string-upcase (substring s 1))))) - (string-split str #\Space))))) -@end example - -La instrucción @code{smallcaps} primero divide su argumento de cadena -en unidades o palabras separadas por espacios (@code{(string-split str -#\Space)}); para cada unidad o palabra, se construye un marcado con la -primera letra agrandada y en mayúscula (@code{#:large (string-upcase -(substring s 0 1))}), y un segundo marcado construido con las letras -siguientes reducidas de tamaño y en mayúsculas (@code{#:tiny -(string-upcase (substring s 1))}). Como LilyPond introduce un espacio -entre los marcados de una misma línea, el segundo marcado se traslada -a la izquierda (@code{#:translate (cons -0.6 0) ...}). Después, los -marcados construidos para cada palabra se ponen en una línea mediante -@code{(make-line-markup ...)}. Finalmente, el marcado resultante se -pasa a la función @code{interpret-markup}, con los argumentos -@code{layout} y @code{props}. - -Nota: ahora existe una instrucción interna @code{\smallCaps} que se -puede usar para poner texto en versalitas. Consulte @ref{Text markup -commands}, para ver más detalles. - -@knownissues - -Actualmente las combinaciones de argumentos que hay disponibles -(después de los argumentos estándar @var{layout} y @var{props}) para -una instrucción de marcado definida con @code{define-markup-command} -se limitan a la siguiente lista: - -@table @asis -@item (ningún argumento) -@itemx @var{list} -@itemx @var{markup} -@itemx @var{markup markup} -@itemx @var{scm} -@itemx @var{scm markup} -@itemx @var{scm scm} -@itemx @var{scm scm markup} -@itemx @var{scm scm markup markup} -@itemx @var{scm markup markup} -@itemx @var{scm scm scm} -@end table - -@noindent -En la tabla de arriba, @var{scm} representa los tipos de datos nativos -de Scheme como @q{number} (número) o @q{string} (cadena). - -Como ejemplo, no es posible usar una instrucción de marcado -@code{fulanito} con cuatro argumentos definida como - -@example -#(define-markup-command (fulanito layout props - num1 str1 num2 str2) - (number? string? number? string?) - ...) -@end example - -@noindent -Si la aplicamos como, digamos, - -@example -\markup \fulanito #1 #"mengano" #2 #"zutano" -@end example - -@cindex Scheme signature -@cindex signature, Scheme -@noindent -@command{lilypond} protesta diciendo que no puede analizar -@code{fulanito} debido a su firma de Scheme desconocida. - - -@node New markup list command definition -@subsection New markup list command definition - -Las instrucciones de listas de marcado se definen con el macro de -Scheme @code{define-markup-list-command}, que es similar al macro -@code{define-markup-command} descrito en @ref{New markup command -definition}, excepto que donde éste devuelve un sello único, aquél -devuelve una lista de sellos. - -En el siguiente ejemplo se define una instrucción de lista de marcado -@code{\paragraph}, que devuelve una lista de líneas justificadas, -estando la primera de ellas sangrada. La anchura del sangrado se toma -del argumento @code{props}. - -@example -#(define-markup-list-command (paragraph layout props args) (markup-list?) - (let ((indent (chain-assoc-get 'par-indent props 2))) - (interpret-markup-list layout props - (make-justified-lines-markup-list (cons (make-hspace-markup indent) - args))))) -@end example - -Aparte de los argumentos usuales @code{layout} y @code{props}, la -instrucción de lista de marcados @code{paragraph} toma un argumento de -lista de marcados, llamado @code{args}. El predicado para listas de -marcados es @code{markup-list?}. - -Em primer lugar, la función toma el ancho del sangrado, una propiedad -llamada aquí @code{par-indent}, de la lista de propiedades -@code{props}. Si no se encuentra la propiedad, el valor -predeterminado es @code{2}. Después, se hace una lista de líneas -justificadas usando la función -@code{make-justified-lines-markup-list}, que está relacionada con la -instrucción incorporada de lista de marcados @code{\justified-lines}. -Se añade un espacio horizontal al principio usando la función -@code{make-hspace-markup}. Finalmente, la lista de marcados se -interpreta usando la función @code{interpret-markup-list}. - -Esta nueva instrucción de lista de marcados se puede usar como sigue: - -@example -\markuplines @{ - \paragraph @{ - El arte de la tipografía musical se llama \italic @{grabado (en plancha).@} - El término deriva del proceso tradicional de impresión de música. - hace sólo algunas décadas, las partituras se hacían cortando y estampando - la música en una plancha de zinc o lata en una imagen invertida. - @} - \override-lines #'(par-indent . 4) \paragraph @{ - La plancha se tenía que entintar, y las depresiones causadas por los cortes - y estampados retienen la tinta. Se formaba una imagen presionando el papel - contra la plancha. El estampado y cortado se hacía completamente - a mano. - @} -@} -@end example - - -@node Contexts for programmers -@section Contexts for programmers - -@menu -* Context evaluation:: -* Running a function on all layout objects:: -@end menu - -@node Context evaluation -@subsection Context evaluation - -@cindex código, llamadas durante la interpretación -@funindex \applyContext - -Se pueden modificar los contextos durante la interpretación con código -de Scheme. La sintaxis para esto es - -@example -\applyContext @var{función} -@end example - -@var{función} debe ser una función de Scheme que toma un único -argumento, que es el contexto al que aplicarla. El código siguiente -imprime el número del compás actual sobre la salida estándar durante -la compilación: - -@example -\applyContext - #(lambda (x) - (format #t "\nSe nos ha llamado en el compás número ~a.\n" - (ly:context-property x 'currentBarNumber))) -@end example - - -@node Running a function on all layout objects -@subsection Running a function on all layout objects - - -@cindex código, llamar sobre objetos de presentación -@funindex \applyOutput - - -La manera más versátil de realizar el ajuste fino de un objeto es -@code{\applyOutput}. Su sintaxis es - -@example -\applyOutput @var{contexto} @var{proc} -@end example - -@noindent -donde @var{proc} es una función de Scheme, que toma tres argumentos. - -Al interpretarse, la función @var{proc} se llama para cada objeto de -presentación que se encuentra en el contexto @var{contexto}, con los -siguientes argumentos: - -@itemize -@item el propio objeto de presentación, -@item el contexto en que se creó el objeto de presentación, y -@item el contexto en que se procesa @code{\applyOutput}. -@end itemize - -Además, la causa del objeto de presentación, es decir el objeto o -expresión musical que es responsable de haberlo creado, está en la -propiedad @code{cause} del objeto. Por ejemplo, para la cabeza de una -nota, éste es un evento @rinternals{NoteHead}, y para un objeto -@rinternals{Stem} (plica), éste es un objeto @rinternals{Stem}. -@c Impossible - changed to Stem --FV - -He aquí una función que usar para @code{\applyOutput}; borra las -cabezas de las notas que están sobre la línea central: - -@example -(define (blanker grob grob-origin context) - (if (and (memq (ly:grob-property grob 'interfaces) - note-head-interface) - (eq? (ly:grob-property grob 'staff-position) 0)) - (set! (ly:grob-property grob 'transparent) #t))) -@end example - - -@node Scheme procedures as properties -@section Scheme procedures as properties - -Las propiedades (como el grosor, la dirección, etc.) se pueden -establecer a valores fijos con \override, p. ej. - -@example -\override Stem #'thickness = #2.0 -@end example - -Las propiedades pueden fijarse también a un procedimiento de scheme, - -@lilypond[fragment,verbatim,quote,relative=2] -\override Stem #'thickness = #(lambda (grob) - (if (= UP (ly:grob-property grob 'direction)) - 2.0 - 7.0)) -c b a g b a g b -@end lilypond - -@noindent -En este caso, el procedimiento se ejecuta tan pronto como el valor de -la propiedad se reclama durante el proceso de formateo. - -Casi todo el motor de tipografiado está manejado por estos -@emph{callbacks}. Entre las propiedades que usan normalmente -@emph{callbacks} están - -@table @code -@item stencil - La rutina de impresión, que construye un dibujo para el símbolo -@item X-offset - La rutina que establece la posición horizontal -@item X-extent - La rutina que calcula la anchura de un objeto -@end table - -El procedimiento siempre toma un argumento único, que es el grob (el -objeto gráfico). - -Si se deben llamar rutinas con varios argumentos, el grob actual se -puede insertar con una cerradura de grob. He aquí un ajuste -procedente de @code{AccidentalSuggestion}, - -@example -(X-offset . - ,(ly:make-simple-closure - `(,+ - ,(ly:make-simple-closure - (list ly:self-alignment-interface::centered-on-x-parent)) - ,(ly:make-simple-closure - (list ly:self-alignment-interface::x-aligned-on-self))))) -@end example - -@noindent -En este ejemplo, tanto -@code{ly:self-alignment-interface::x-aligned-on-self} como -@code{ly:self-alignment-interface::centered-on-x-parent} se llaman con -el grob como argumento. El resultado se añade con la función -@code{+}. Para asegurar que esta adición se ejecuta adecuadamente, -todo ello se encierra dentro de @code{ly:make-simple-closure}. - -De hecho, usar un solo procedimiento como valor de una propiedad -equivale a - -@example -(ly:make-simple-closure (ly:make-simple-closure (list @var{proc}))) -@end example - -@noindent -El @code{ly:make-simple-closure} interior aporta el grob como -argumento de @var{proc}, el exterior asegura que el resultado de la -función es lo que se devuelve, en lugar del objeto -@code{simple-closure}. - - -@node Using Scheme code instead of \tweak -@section Using Scheme code instead of @code{\tweak} - -La principal desventaja de @code{\tweak} es su inflexibilidad -sintáctica. Por ejemplo, lo siguiente produce un error de sintaxis. - -@example -F = \tweak #'font-size #-3 -\flageolet - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -En otras palabras, @code{\tweak} no se comporta como una articulación -en cuando a la sintaxis; concretamente, no se puede adjuntar con -@code{^} y @code{_}. - -Usando Scheme, se puede dar un rodeo a este problema. La ruta hacia -el resultado se da en @ref{Adding articulation to notes (example)}, -especialmente cómo usar @code{\displayMusic} como guía de ayuda. - -@example -F = #(let ((m (make-music 'ArticulationEvent - 'articulation-type "flageolet"))) - (set! (ly:music-property m 'tweaks) - (acons 'font-size -3 - (ly:music-property m 'tweaks))) - m) - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -Aquí, las propiedades @code{tweaks} del objeto flageolet @code{m} -(creado con @code{make-music}) se extraen con -@code{ly:music-property}, se antepone un nuevo par clave-valor para -cambiar el tamaño de la tipografía a la lista de propiedades con la -función de Scheme @code{acons}, y finalmente el resultado se escribe -de nuevo con @code{set!}. El último elemento del bloque @code{let} es -el valor de retorno, el propio @code{m}. - -@node Difficult tweaks -@section Difficult tweaks - -Hay un cierto número de tipos de ajustes difíciles. - -@itemize - -@item -Un tipo de ajuste difícil es la apariencia de los objetos de -extensión, como las ligaduras de expresión y de unión. Inicialmente, -sólo se crea uno de estos objetos, y pueden ajustarse con el mecanismo -normal. Sin embargo, en ciertos casos los objetos extensores cruzan -los saltos de línea. Si esto ocurre, estos objetos se clonan. Se -crea un objeto distinto por cada sistema en que se encuentra. Éstos -son clones del objeto original y heredan todas sus propiedades, -incluidos los @code{\override}s. - -En otras palabras, un @code{\override} siempre afecta a todas las -piezas de un objeto de extensión fragmentado. Para cambiar sólo una -parte de un extensor en el salto de línea, es necesario inmiscuirse en -el proceso de formateado. El @emph{callback} -@code{after-line-breaking} contiene el procedimiento Scheme que se -llama después de que se han determinado los saltos de línea, y los -objetos de presentación han sido divididos sobre los distintos -sistemas. - -En el ejemplo siguiente, definimos un procedimiento -@code{my-callback}. Este procedimiento - -@itemize -@item -determina si hemos sido divididos por los saltos de línea -@item -en caso afirmativo, reúne todos los objetos divididos -@item -comprueba si somos el último de los objetos divididos -@item -en caso afirmativo, establece @code{extra-offset}. -@end itemize - -Este procedimiento se instala en @rinternals{Tie} (ligadura de unión), -de forma que la última parte de la ligadura dividida se traslada hacia -arriba. - -@lilypond[quote,verbatim,ragged-right] -#(define (my-callback grob) - (let* ( - ; have we been split? - (orig (ly:grob-original grob)) - - ; if yes, get the split pieces (our siblings) - (siblings (if (ly:grob? orig) - (ly:spanner-broken-into orig) '() ))) - - (if (and (>= (length siblings) 2) - (eq? (car (last-pair siblings)) grob)) - (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) - -\relative c'' { - \override Tie #'after-line-breaking = - #my-callback - c1 ~ \break c2 ~ c -} -@end lilypond - -@noindent -Al aplicar este truco, la nueva función de callback -@code{after-line-breaking} también debe llamar a la antigua -@code{after-line-breaking}, si existe. Por ejemplo, si se usa con -@code{Hairpin}, se debe llamar también a -@code{ly:hairpin::after-line-breaking}. - - -@item Algunos objetos no se pueden cambiar con @code{\override} por -razones técnicas. Son ejemplos @code{NonMusicalPaperColumn} y -@code{PaperColumn}. Se pueden cambiar con la función -@code{\overrideProperty} que funciona de forma similar a @code{\once -\override}, pero usa una sintaxis distinta. - -@example -\overrideProperty -#"Score.NonMusicalPaperColumn" % Nombre del grob -#'line-break-system-details % Nombre de la propiedad -#'((next-padding . 20)) % Valor -@end example - -Observe, sin embargo, que @code{\override}, aplicado a -@code{NoteMusicalPaperColumn} y a @code{PaperColumn}, aún funciona -como se espera dentro de los bloques @code{\context}. - -@end itemize diff --git a/Documentation/es/user/repeats.itely b/Documentation/es/user/repeats.itely deleted file mode 100644 index cbdbbae036..0000000000 --- a/Documentation/es/user/repeats.itely +++ /dev/null @@ -1,566 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Repeats -@section Repeats - -@lilypondfile[quote]{repeats-headword.ly} - -La repetición es un concepto fundamental en música, y existen varios -tipos de notación para las repeticiones. LilyPond contempla los -siguientes tipos de repetición: - -@table @code -@item volta (primera y segunda vez) -La repetición de la música no se imprime de forma desarrollada, sino -que se indica encerrándola entre barras de repetición. Si el salto de -la repetición se encuentra al comienzo de una pieza, la barra de -repetición sólo se imprime al final del fragmento. Se imprimen una -serie de finales alternativos (volte) de izquierda a derecha indicados -mediante corchetes. Ésta es la notación estándar para las -repeticiones con finales alternativos. - -@item unfold (desplegada) -Las música repetida se escribe y se interpreta completamente tantas -veces como especifique el valor @var{número_de_repeticiones}. Es útil -cuando se está escribiendo música repetitiva. - -@item percent (porcentaje) -Hacer repeticiones de compases o parte de ellos. Tienen un aspecto -semejante a un signo de porcentaje. Las repeticiones de porcentaje se -deben declarar dentro de un contexto @code{Voice}. - -@item tremolo (trémolo) -Hacer barras de trémolo. - -@end table - - -@menu -* Long repeats:: -* Short repeats:: -@end menu - -@node Long repeats -@subsection Long repeats - -Esta sección trata sobre la forma de introducir repeticiones largas, -normalmente de varios compases. Las repeticiones adoptan dos formas: -repeticiones encerradas entre signos de repetición, o repeticiones -explícitas, que se usan para escribir música repetitiva. También se -pueden controlar manualmente los signos de repetición. - -@menu -* Normal repeats:: -* Manual repeat marks:: -* Written-out repeats:: -@end menu - -@cindex repeticiones normales -@cindex repetición con finales alternativos -@cindex finales alternativos -@cindex volta -@cindex prima volta -@cindex primera y segunda vez -@cindex seconda volta -@cindex volta, prima -@cindex volta, seconda -@funindex \repeat -@funindex \alternative -@funindex \partial - -@node Normal repeats -@unnumberedsubsubsec Normal repeats - -La sintaxis de una repetición simple es - -@example -\repeat @var{variante} @var{número_de_repeticiones} @var{cuerpo_de_la_repetición} -@end example - -donde @var{cuerpo_de_la_repetición} es una expresión musical. Los -finales alternativos se pueden obtener utilizando @code{\alternative}. -Para delimitar los finales alternativos, el grupo de alternativas se -debe incluir dentro de un par de llaves. Si existen más repeticiones -que finales alternativos, las primeras repeticiones recibirán la -primera alternativa. - - -Repeticiones normales sin finales alternativos: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 2 { c4 d e f } -c2 d -\repeat volta 2 { d4 e f g } -@end lilypond - -Repeticiones normales con primera y segunda vez: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 4 { c4 d e f } -\alternative { - { d2 e } - { f2 g } -} -c1 -@end lilypond - - -@cindex repetición con anacrusa -@cindex anacrusa en repeticiones -@funindex \partial - -Las repeticiones con anacrusa se pueden introducir de dos formas: - -@lilypond[verbatim,quote,relative=2] -\partial 4 -e | -\repeat volta 4 { c2 d | e2 f | } -\alternative { - { g4 g g e } - { a4 a a a | b2. } -} -@end lilypond - -@noindent -o bien - -@lilypond[verbatim,quote,relative=2] -\partial 4 -\repeat volta 4 { e4 | c2 d | e2 f | } -\alternative { - { \partial 4*3 g4 g g } - { a4 a a a | b2. } -} -@end lilypond - - -@cindex repeticiones con ligaduras -@cindex primera y segunda vez con ligaduras -@cindex ligaduras en las repeticiones -@cindex ligaduras en primera y segunda vez -@funindex \repeatTie - - -Se pueden añadir ligaduras de unión al segundo final: - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat volta 2 { c4 d e f ~ } -\alternative { - { f2 d } - { f2\repeatTie f, } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{shortening-volta-brackets.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-volta-brackets-to-additional-staves.ly} - - -@seealso -Glosario musical: -@rglos{repeat}, -@rglos{volta}. - -Referencia de la notación: -@ref{Bar lines}, -@ref{Modifying context plug-ins}. - -Fragmentos de código: -@rlsr{Repeats}. - -Referencia de funcionamiento interno: -@rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, -@rinternals{VoltaRepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - - -@knownissues - -@cindex repetición ambigua -@cindex anidada, repetición -@cindex repetición anidada -@cindex repetición, contador de tiempo de la -@cindex repetición y números de compás -@cindex números de compás y repeticiones -@cindex tiempo, repeticiones y contador de -@cindex compás, repeticiones y números de -@cindex repetición y ligadura de expresión -@cindex ligaduras de expresión y repeticiones - -Una repetición anidada como - -@example -\repeat @dots{} -\repeat @dots{} -\alternative -@end example - -@noindent -es ambigua porque no está claro a qué @code{\repeat} pertenece la -@code{\alternative}. Esta ambigüedad se resuelve haciendo que la -@code{\alternative} pertenezca siempre a la @code{\repeat} más -interna. Para más claridad, se recomienda usar llaves en tales -situaciones. - -La información del contador de tiempo no se recuerda al comienzo de -una alternativa, por ello después de una repetición la información de -la cuenta de tiempo se debe reajustar manualmente; por ejemplo, -estableciendo el valor de @code{Score.measurePosition} o introduciendo -@code{\partial}. De forma similar, las ligaduras de expresión tampoco -se repiten. - - - -@node Manual repeat marks -@unnumberedsubsubsec Manual repeat marks - - -@cindex manual, marca de repetición -@cindex repetición manual -@cindex comienzo de repetición -@cindex repetición, comienzo de -@cindex final de repetición -@cindex repetición, final de -@cindex repetición, cambiar número de -@cindex repetición, cambiar finales alternativos -@cindex corchete de primera y segunda vez -@funindex repeatCommands -@funindex start-repeat - -@warning{Estos métodos sólo se utilizan para realizar construcciones -de repetición poco usuales, y pueden tener un comportamiento distinto -al esperado. En casi todas las situaciones, se deben crear las -repeticiones utilizando la instrucción estándar @code{\\repeat} o -imprimiendo las barras de compás correspondientes. Para ver más -información, consulte @ref{Bar lines}.} - -Se puede usar la propiedad @code{repeatCommands} para controlar la -disposición de las repeticiones. Su valor es una lista de Scheme de -comandos de repetición. - -@table @code -@item start-repeat -Imprimir una barra de compás @code{|:} - -@lilypond[verbatim,quote,relative=2] -c1 -\set Score.repeatCommands = #'(start-repeat) -d4 e f g -c1 -@end lilypond - -En la práctica habitual del grabado no se imprimen signos de -repetición al principio de la pieza. - - -@item @code{end-repeat} -Imprimir una barra de compás @code{:|} - -@lilypond[verbatim,quote,relative=2] -c1 -d4 e f g -\set Score.repeatCommands = #'(end-repeat) -c1 -@end lilypond - - -@item (volta @var{number}) ... (volta #f) -Crear una nueva casilla de repetición con el número que se especifica. -El corchete de vez se debe terminar de forma explícita, pues en caso -contrario no se imprimirá. - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2")) -g4 a g a -\set Score.repeatCommands = #'((volta #f)) -c1 -@end lilypond - -@end table - -Se pueden producir varias instrucciones de repetición en el mismo -punto: - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2, 5") end-repeat) -g4 a g a -c1 -\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) -b1 -\set Score.repeatCommands = #'((volta #f)) -@end lilypond - -@cindex corchete de casilla de repetición con texto -@cindex texto en casilla de repetición - -Se puede incluir texto dentro de la casilla de primera y segunda vez. -El texto puede ser un número o números, o un elemento de marcado, -véase @ref{Formatting text}. La forma más fácil de usar texto de -marcado es definir el marcado previamente, y luego incluirlo dentro de -una lista de Scheme. - -@lilypond[verbatim,quote] -voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } -\relative c'' { - c1 - \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) - c4 b d e - \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) - f1 - \set Score.repeatCommands = #'((volta #f)) -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} - - -@seealso -Referencia de la notación: -@ref{Bar lines}, -@ref{Formatting text}. - -Fragmentos de código: -@rlsr{Repeats}. - -Referencia de funcionamiento interno: -@rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, -@rinternals{VoltaRepeatedMusic}. - - -@node Written-out repeats -@unnumberedsubsubsec Written-out repeats - -@cindex explícitas, repeticiones -@cindex repetitiva, música -@cindex repeticiones explícitas -@cindex repetición delplegada -@cindex desplegar música -@cindex desplegar repetición -@cindex repetición deplegada con finales alternativos -@cindex música desplegada con finales alternativos -@cindex alternativos, finales, en repeticiones explícitas -@funindex unfold - -Mediante la utilización de la instrucción @code{unfold} se pueden usar -las repeticiones para simplificar la escritura deplegada de música -repetitiva. La sintaxis es: - -@example -\repeat unfold @var{número_de_repeticiones} @var{expresión_musical} -@end example - -donde @var{expresión_musical} es una expresión musical y -@var{nnúmero_de_repeticiones} es el número de veces que -@var{expresión_musical} se repite. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { c4 d e f } -c1 -@end lilypond - -Se pueden hacer repeticiones desplegadas con finales alternativos. Si -hay más repeticiones que finales alternativos, el primer final -alternativo se aplica a las primeras repeticiones. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { g4 f e d } - \alternative { - { cis2 g' } - { cis,2 b } - } -c1 -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Repeats}. - -Referencia de funcionamiento interno: -@rinternals{RepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - - -@node Short repeats -@subsection Short repeats - -Esta sección trata de cómo introducir repeticiones cortas. Las -repeticiones cortas adoptan dos formas básicas: repeticiones desde una -sola nota hasta dos compases representadas por barras inclinadas o -símbolos de porcentaje, y trémolos. - -@menu -* Percent repeats:: -* Tremolo repeats:: -@end menu - -@node Percent repeats -@unnumberedsubsubsec Percent repeats - -@cindex porcentaje, repetición de -@cindex compás, repetición de -@cindex repetición de porcentaje -@cindex repetición de compás -@cindex repetición corta -@funindex \repeat percent -@funindex percent - -Están contempladas las repeticiones de patrones cortos de notas. La -música se imprime una sola vez, y el patrón se sustituye por un -símbolo especial. Los patrones que son más cortos de un compás se -sustituyen por barras inclinadas, y los patrones de uno o dos compases -se sustituyen por símbolos de tipo porcentaje. La sintaxis es: - -@example -@code{\repeat percent @var{número} @var{expresión_musical}} -@end example - -donde @var{expresión_musical} es una expresión musical. - -@lilypond[verbatim,quote,relative=2] -\repeat percent 4 { c4 } -\repeat percent 2 { b4 a g f } -\repeat percent 2 { c2 es | f4 fis g c | } -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-counter.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-count-visibility.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{isolated-percent-repeats.ly} - - -@seealso -Glosario musical: -@rglos{percent repeat}, -@rglos{simile}. - -Fragmentos de código: -@rlsr{Repeats}. - -Referencia de funcionamiento interno: -@rinternals{RepeatSlash}, -@rinternals{PercentRepeat}, -@rinternals{DoublePercentRepeat}, -@rinternals{DoublePercentRepeatCounter}, -@rinternals{PercentRepeatCounter}, -@rinternals{PercentRepeatedMusic}. - - -@knownissues - -Sólo están contempladas tres clases de repeticiones del tipo -porcentaje: una barra inclinada única que representa un solo pulso -(sin que importe la duración de las notas repetidas); una sola barra -inclinada con puntos que representa un compás completo; y dos barras -con puntos que cruzan a una línea divisoria y que representa dos -compases completos. No están contempladas ni varias barras inclinadas -que representan repeticiones de un pulso consistentes en semicorcheas -o figuras menores, ni dos barras con puntos que representan -repeticiones de un solo pulso consistentes en notas de duraciones -variables. - - -@node Tremolo repeats -@unnumberedsubsubsec Tremolo repeats - -@cindex trémolo -@cindex barras de trémolo -@cindex repetición de trémolo -@funindex \repeat tremolo -@funindex tremolo - -Los trémolos pueden adoptar dos formas: alternancia entre dos acordes -o dos notas, y repetición rápida de una sola nota o acorde. Los -trémolos que consisten en una alternancia se indican por medio de la -adición de barras entre las notas o acordes que se alternan, mientras -que los trémolos que consisten en la repetición rápida de una sola -nota se indican mediante la adición de barras cruzadas a una nota -única. - -Para colocar marcas de trémolo entre las notas, use @code{\repeat} con -el estilo @code{tremolo} (trémolo): - -@lilypond[quote,verbatim,relative=2] -\repeat tremolo 8 { c16 d } -\repeat tremolo 6 { c16 d } -\repeat tremolo 2 { c16 d } -@end lilypond - -La sintaxis de @code{\repeat tremolo} espera que se escriban -exactamente dos notas dentro de las llaves, y el número de -repeticiones debe corresponderse con un valor que se pueda expresar -con figuras normales o con puntillo. Así, @code{\repeat tremolo 7} es -válido y produce una nota con doble puntillo, pero @code{\repeat -tremolo 9} no es válido. - -La duración del trémolo es igual a la duración de la expresión entre -llaves, multiplicada por el número de repeticiones: @code{\repeat -tremolo 8 @{ c16 d16 @}} da como resultado un trémolo de redonda, -escrito como dos redondas unidas por barras de trémolo. - -Existen dos maneras de colocar marcas de trémolo sobre una única nota. -Incluso aquí se puede utilizar la sintaxis @code{\repeat tremolo}, en -cuyo caso la nota no debe ir encerrada entre llaves: - -@lilypond[quote,verbatim,ragged-right] -\repeat tremolo 4 c'16 -@end lilypond - -@cindex trémolo, indicaciones de -@funindex tremoloFlags -@funindex : - -El mismo resultado se puede obtener escribiendo -@q{@code{:}[@var{número}]} después de la nota. El número indica la -duración de la subdivisión, y debe ser 8 como mínimo. Un valor de 8 -para @var{número} produce una línea que atraviesa la plica de la nota. -Si se omite la longitud, se utiliza el último valor (almacenado en -@code{tremoloFlags}) - -@lilypond[quote,verbatim,relative=2] -c2:8 c:32 -c: c: -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Repeats}. - - -@cindex trémols de pentagrama cruzado -@cindex pentagrama cruzado, trémolo de - - -@knownissues - -Los trémolos de pentagrama cruzado no funcionan bien. - diff --git a/Documentation/es/user/rhythms.itely b/Documentation/es/user/rhythms.itely deleted file mode 100644 index 9772477f46..0000000000 --- a/Documentation/es/user/rhythms.itely +++ /dev/null @@ -1,2941 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: 312827f1242ea7d2864659fa292bc9861ac19c6c - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Rhythms -@section Rhythms - -@lilypondfile[quote]{rhythms-headword.ly} - -Esta sección trata de los ritmos, los silencios, las duraciones, las -barras y los compases. - -@menu -* Writing rhythms:: -* Writing rests:: -* Displaying rhythms:: -* Beams:: -* Bars:: -* Special rhythmic concerns:: -@end menu - - -@node Writing rhythms -@subsection Writing rhythms - -@menu -* Durations:: -* Tuplets:: -* Scaling durations:: -* Ties:: -@end menu - -@node Durations -@unnumberedsubsubsec Durations - -@cindex duración de las notas -@cindex notas, duración de -@cindex longitud de las notas -@cindex notas, longitud de - -@funindex \longa -@funindex longa -@funindex \breve -@funindex breve -@funindex \maxima -@funindex maxima - -Las duraciones se designan mediante números y puntos. Las duraciones -se introducen como sus valores recíprocos respecto de la redonda. Por -ejemplo, una negra se escribe usando un @code{4} (puesto que es 1/4 de -redonda), mientras que una blanca se escribe con un @code{2} (por ser -1/2 de redonda). Para notas mayores de la redonda se deben usar los -comandos @code{\longa} (que es una breve doble) y @code{\breve}. Se -pueden especificar duraciones tan cortas como la garrapatea (con el -número 128). Son posibles valores más cortos, pero sólo como notas -unidas por una barra. - -@c Two 64th notes are needed to obtain beams -@lilypond[quote,verbatim,relative=2] -\time 8/1 -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c64 -@end lilypond - -@noindent -Aquí se pueden ver las mismas duraciones con el barrado automático -desactivado. - -@c not strictly "writing rhythms"; more of a "displaying" thing, -@c but it's ok here. -gp -@lilypond[quote,verbatim,relative=2] -\time 8/1 -\autoBeamOff -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c64 -@end lilypond - -Se puede escribir una nota con la duración de una cuádruple breve -mediante @code{\maxima}, pero esto está contemplado solamente dentro -de la notación musical antigua. Para ver más detalles, consulte -@ref{Ancient notation}. - -Si la duración se omite, su valor será el de la duración de la nota -anterior. Por omisión, el valor de la primera nota es el de una -negra. - -@lilypond[quote,verbatim,relative=2] -a a a2 a a4 a a1 a -@end lilypond - -@cindex notas, con puntillo -@cindex puntillo, notas con -@cindex notas, con doble puntillo -@cindex doble puntillo, notas con - -@funindex . - -Para obtener duraciones de notas con puntillo, escriba un punto -(@code{.}) después del número. Las notas con doble puntillo se -especifican escribiendo dos puntos, y así sucesivamente. - -@lilypond[quote,verbatim,relative=2] -a4 b c4. b8 a4. b4.. c8. -@end lilypond - -Ciertas duraciones no se pueden representar sólo con duraciones -binarias y puntillos; la única forma de representarlas es ligando dos -o más notas. Para ver más detalles, consulte @ref{Ties}. - -Para ver de qué manera se pueden especificar las duraciones de las -sílabas de la letra y cómo alinear la letra a las notas, consulte -@ref{Vocal music}. - -Opcionalmente se pueden espaciar las notas de forma estrictamente -proporcional a sus duraciones. Para ver más detalles sobre este y -otros ajustes que controlan la notación proporcional, consulte -@ref{Proportional notation}. - -@funindex \dotsUp -@funindex dotsUp -@funindex \dotsDown -@funindex dotsDown -@funindex \dotsNeutral -@funindex dotsNeutral - -Normalmente los puntillos se desplazan hacia arriba para evitar las -líneas del pentagrama, excepto en situaciones de polifonía. Para -forzar una dirección concreta de forma manual, véase @ref{Direction -and placement}. - - -@predefined -@code{\autoBeamOff}, -@code{\dotsUp}, -@code{\dotsDown}, -@code{\dotsNeutral}. -@endpredefined - - -@seealso -Glosario musical: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}, -@rglos{note value}, -@rglos{Duration names notes and rests}. - -Referencia de la notación: -@ref{Automatic beams}, -@ref{Ties}, -@ref{Writing rhythms}, -@ref{Writing rests}, -@ref{Vocal music}, -@ref{Ancient notation}, -@ref{Proportional notation}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{Dots}, -@rinternals{DotColumn}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -No existe un límite fundamental para las duraciones de los silencios -(tanto para el más largo como para el más corto), pero el numero de -glifos es limitado: sólo se pueden imprimir desde el silencio de -garrapatea (128) hasta el de máxima (8 redondas). - - -@node Tuplets -@unnumberedsubsubsec Tuplets - -@cindex grupos especiales -@cindex tresillos - -@funindex \times -@funindex times - -Los grupos especiales se obtienen a partir de una expresión musical -multiplicando todas las duraciones por una fracción: - -@example -\times @var{fracción} @{ @var{música} @} -@end example - -@noindent -La duración de @var{música} se multiplicará por la -fracción. El denominador de la fracción se imprimirá sobre las notas, -opcionalmente con un corchete. El grupo especial más común es el -tresillo, en el que 3 notas tienen el valor de 2, por tanto las notas -duran 2/3 de su valor escrito - -@lilypond[quote,verbatim,relative=2] -a2 \times 2/3 { b4 b b } -c4 c \times 2/3 { b4 a g } -@end lilypond - -@funindex \tupletUp -@funindex tupletUp -@funindex \tupletDown -@funindex tupletDown -@funindex \tupletNeutral -@funindex tupletNeutral - -La colocación automática del corchete de grupo especial por encima o -por debajo de las notas se puede sobreescribir manualmente mediante -instrucciones predefinidas, para ver más detalles consulte -@ref{Direction and placement}. - -Los grupos pueden anidarse unos dentro de otros: - -@lilypond[quote,verbatim,relative=2] -\autoBeamOff -c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 | -@end lilypond - -La modificación de los grupos especiales anidados que comienzan en el -mismo instante musical se debe hacer con @code{\tweak}. - -Para modificar la duración de las notas sin imprimir un corchete de -grupo especial, véase @ref{Scaling durations}. - - -@predefined -@code{\tupletUp}, -@code{\tupletDown}, -@code{\tupletNeutral}. -@endpredefined - - -@snippets - -@cindex grupos especiales, formato de -@cindex tresillos, formato de - -@funindex tupletNumberFormatFunction -@funindex tupletSpannerDuration - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{entering-several-tuplets-using-only-one--times-command.ly} - -@funindex TupletNumber - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-tuplet-number.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{permitting-line-breaks-within-beamed-tuplets.ly} - - -@seealso -Glosario musical: -@rglos{triplet}, -@rglos{tuplet}, -@rglos{polymetric}. - -Manual de aprendizaje: -@rlearning{Tweaking methods}. - -Referencia de la notación: -@ref{Time administration}, -@ref{Scaling durations}, -@ref{The tweak command}, -@ref{Polymetric notation}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{TupletBracket}, -@rinternals{TupletNumber}, -@rinternals{TimeScaledMusic}. - - -@knownissues - -@cindex adorno, notas de, dentro de corchetes de grupo especial - -Cuando la primera nota de un pentagrama es una nota de adorno (un -mordente de una nota) seguida de un grupo de valoración especial, la -nota de adorno se debe situar antes de la instrucción @code{\times} -para evitar errores. En cualquier otro lugar, las notas de adorno sí -se pueden colocar dentro de los corchetes de grupo especial. - - -@node Scaling durations -@unnumberedsubsubsec Scaling durations - -@cindex scaling durations -@cindex durations, scaling - -Es posible alterar la duración de las figuras, silencios o acordes en -un factor @code{N/M} añadiendo @code{*N/M} (o @code{*N} si @code{M} es -1) a la duración. Esto no afectará a la apariencia de las notas o -silencios que se producen, pero la duración alterada se usará para -calcular la posición dentro del compás y para establecer la duración -en la salida MIDI. Los factores de multiplicación se pueden combinar -en la forma @code{*L*M/N}. - -En el siguiente ejemplo las tres primeras notas duran exactamente dos -partes, pero no se imprime ningún corchete de tresillo. - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Alter durations to triplets -a4*2/3 gis4*2/3 a4*2/3 -% Normal durations -a4 a4 -% Double the duration of chord -4*2 -% Duration of quarter, appears like sixteenth -b16*4 c4 -@end lilypond - -La duración de las notas de salto o espaciadoras también se puede -modificar mediante un multiplicador. Esto es útil para saltar muchos -compases, como por ejemplo @code{s1*23}. - -@cindex compresión de música - -@funindex \scaleDurations -@funindex scaleDurations - -De la misma forma, se pueden comprimir por una fracción trozos de -música más largos, como si cada nota, acorde o silencio tuviera la -fracción como multiplicador. Esto dejará intacta la apariencia de la -@emph{música}, pero la duración interna de las notas se multiplicará -por la fracción @emph{numerador}/@emph{denominador}. Los espacios que -rodean el punto son necesarios. He aquí un ejemplo que muestra cómo -se puede comprimir y expandir la música: - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Normal durations -4 c8 a -% Scale music by *2/3 -\scaleDurations #'(2 . 3) { - 4. c8 a f -} -% Scale music by *2 -\scaleDurations #'(2 . 1) { - 4 c8 b -} -@end lilypond - -@noindent -Una aplicación de esta instrucción se encuentra en la notación -polimétrica, véase @ref{Polymetric notation}. - - -@seealso -Referencia de la notación: -@ref{Tuplets}, -@ref{Invisible rests}, -@ref{Polymetric notation}. - -Fragmentos de código: -@rlsr{Rhythms}. - - -@node Ties -@unnumberedsubsubsec Ties - -@cindex ligadura de unión - -@funindex ~ - -Una ligadura de unión conecta dos notas adyacentes de la misma altura. La ligadura -en efecto extiende la longitud de una nota. - -@warning{No deben confundirse las ligaduras de unión con las -@emph{ligaduras de expresión}, que indican articulación, ni con las -@emph{ligaduras de fraseo}, que indican el fraseo musical. Una -ligadura de unión es tan sólo una manera de extender la duración de -una nota, algo parecido a lo que hace el puntillo.} - -Se introduce una ligadura de unión usando el símbolo de la tilde curva -@code{~} - -@lilypond[quote,verbatim,relative=2] -a2 ~ a -@end lilypond - -@noindent -Se usan ligaduras de unión bien cuando la nota atraviesa la barra de -compás o bien cuando no se pueden usar puntillos para denotar el -ritmo. También se deben usar ligaduras cuando las notas atraviesan -subdivisiones del compás de mayor duración: - -@c KEEP LY -@lilypond[verbatim,quote] -\relative c' { - r8^"sí" c8 ~ c2 r4 | - r8^"no" c2 ~ c8 r4 -} -@end lilypond - -Si necesitamos ligar muchas notas a través de las líneas divisorias, -nos podría resultar más fácil utilizar la división automática de las -notas, véase @ref{Automatic note splitting}. Este mecanismo divide -automáticamente las notas largas y las liga a través de las barras de -compás. - -@cindex ties and chords -@cindex chords and ties - -Cuando se aplica una ligadura de unión a un acorde, se conectan todas -las cabezas de las notas cuyas alturas coinciden. Si no coincide -ningún par de cabezas, no se crea ninguna ligadura. Los acordes se -pueden ligar parcialmente colocando la ligadura dentro del acorde. - -@lilypond[quote,verbatim,relative=1] - ~ - -@end lilypond - -@cindex repetición, ligaduras de unión en -@cindex ligaduras de unión, repeticiones y -@cindex primera y segunda vez, corchetes y ligaduras en -@cindex ligaduras de unión y corchetes de primera y segunda vez - -@funindex \repeatTie -@funindex repeatTie - -Cuando la segunda vez de una repetición comienza con una nota ligada, -es necesario especificar la ligadura repetida como sigue: - -@lilypond[quote,relative=2,verbatim] -\repeat volta 2 { c g 2 ~ } -\alternative { - % First alternative: following note is tied normally - { 2. r4 } - % Second alternative: following note has a repeated tie - { 2\repeatTie d4 c } } -@end lilypond - -@cindex laissez vibrer -@cindex ligaduras laissez vibrer - -@funindex \laissezVibrer -@funindex laissezVibrer - -Las ligaduras @notation{L.v.} (@notation{laissez vibrer}, dejar -vibrar) indican que las notas no se deben apagar al final. Se usan en -la notación para piano, arpa y otros instrumentos de cuerda y -percusión. Se pueden introducir de la siguiente manera: - -@lilypond[quote,verbatim,relative=1] -1\laissezVibrer -@end lilypond - -@cindex ligaduras, colocación - -@funindex \tieUp -@funindex tieUp -@funindex \tieDown -@funindex tieDown -@funindex \tieNeutral -@funindex tieNeutral - -Es posible controlar la colocación vertical de las ligaduras de unión; -véase la sección de instrucciones predefinidas, o para ver más -detalles, consulte @ref{Direction and placement}. - -@cindex ligaduras, apariencia -@cindex ligaduras de puntos -@cindex ligaduras discontinuas -@cindex discontinuas, ligaduras -@cindex puntos, ligaduras de - -@funindex \tieDotted -@funindex tieDotted -@funindex \tieDashed -@funindex tieDashed -@funindex \tieSolid -@funindex tieSolid - -Se pueden especificar ligaduras continuas, de puuntos o intermitentes, -véase la sección de instrucciones predefinidas. - - -@predefined -@code{\tieUp}, -@code{\tieDown}, -@code{\tieNeutral}, -@code{\tieDotted}, -@code{\tieDashed}, -@code{\tieSolid}, -@code{\repeatTie}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-ties-with-arpeggios.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{engraving-ties-manually.ly} - - -@seealso -Glosario musical: -@rglos{tie}, -@rglos{laissez vibrer}. - -Referencia de la notación: -@ref{Automatic note splitting}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{LaissezVibrerTie}, -@rinternals{LaissezVibrerTieColumn}, -@rinternals{TieColumn}, -@rinternals{Tie}. - - -@knownissues - -Un cambio de pentagrama cuando hay una ligadura activa no producirá -una ligadura inclinada. - -Los cambios de clave o de octava durante una ligadura de unión no -están bien definidos realmente. En estos casos puede ser preferible -una ligadura de expresión. - - -@node Writing rests -@subsection Writing rests - -Los silencios se escriben como parte de la música dentro de las -expresiones musicales. - -@menu -* Rests:: -* Invisible rests:: -* Full measure rests:: -@end menu - -@node Rests -@unnumberedsubsubsec Rests - -@cindex silencio -@cindex silencios, indocar duraciones -@cindex maxima, silencio de -@cindex longa, silencio de -@cindex breve, silencio de - -@funindex \rest -@funindex rest -@funindex r -@funindex \maxima -@funindex maxima -@funindex \longa -@funindex longa -@funindex \breve -@funindex breve - -Los silencios se introducen como notas con el nombre @code{r}. Las -duraciones mayores que la redonda utilizan las instrucciones -predefinidas que se muestran aquí: - -@c \time 16/1 is used to avoid spurious bar lines -@c and long tracts of empty measures -@lilypond[fragment,quote,verbatim] -\new Staff { - % These two lines are just to prettify this example - \time 16/1 - \override Staff.TimeSignature #'stencil = ##f - % Print a maxima rest, equal to four breves - r\maxima - % Print a longa rest, equal to two breves - r\longa - % Print a breve rest - r\breve - r1 r2 r4 r8 r16 r32 r64 r128 -} -@end lilypond - -@cindex silencios multicompás -@cindex silencios de compás completo - -Los silencios de un compás, centrados en medio del compás, se deben -hacer con silencios multicompás. Se pueden usar para un solo compás -así como para muchos compases, y se tratan en @ref{Full measure -rests}. - -@cindex silencio, especificar la posición vertical - -Para especificar explícitamente la posición vertical de un silencio, -escriba una nota seguida de @code{\rest}. Se colocará un silencio en -la posición en que debería aparecer la nota. Esto posibilita la -aplicación manual precisa de formato a la música polifónica, ya que el -formateador automático de colisiones de silencios no mueve estos -silencios. - -@lilypond[quote,verbatim,relative=2] -a4\rest d4\rest -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{rest-styles.ly} - - -@seealso -Glosario musical: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}. - -Referencia de la notación: -@ref{Full measure rests}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{Rest}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -No existe un límite fundamental respecto de las duraciones de los -silencios (tanto para el más corto como para el más largo), pero el -número de glifos es limitado: hay silencios desde la garrapatea (128) -hasta la máxima (8 redondas). - - -@node Invisible rests -@unnumberedsubsubsec Invisible rests - -@cindex desplazamiento -@cindex silencio invisible -@cindex invisible, silencio -@cindex nota de espaciado -@cindex silencio de separación - -@funindex s -@funindex \skip -@funindex skip - -Un silencio invisible (también conocido como @q{skip} o -desplazamiento) se puede introducir como una nota con el -nombre@tie{}@code{s}: - -@lilypond[verbatim,quote,relative=2] -c4 c s c -s2 c -@end lilypond - -@cindex letra, desplazamiento de - -Los silencios de separación sólo están disponible en el modo de notas -y en el modo de acordes. En otras situaciones, por ejemplo, cuando se -introduce la letra, se usa la instrucción @code{\skip} para producir -un desplazamiento de una cierta magnitud temporal. @code{\skip} -requiere una duración explícita. - -@lilypond[quote,verbatim,relative=2] -<< - { - a2 \skip2 a2 a2 - } - \new Lyrics { - \lyricmode { - foo2 \skip 1 bla2 - } - } ->> -@end lilypond - -Un silencio de separación produce implícitamente contextos -@code{Staff} y @code{Voice} si no existe ninguno, igual que las notas -y los silencios normales: - -@lilypond[quote,verbatim,fragment] -s1 s s -@end lilypond - -@code{\skip} tan sólo desplaza un tiempo musical; no produce ninguna -salida, de ninguna clase. - -@lilypond[quote,verbatim,fragment] -% This is valid input, but does nothing -\skip 1 \skip1 \skip 1 -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{SkipMusic}. - - -@node Full measure rests -@unnumberedsubsubsec Full measure rests - -@cindex multicompás, silencios -@cindex compás completo, silencios de -@cindex silencios multicompás -@cindex silencios de compás completo -@cindex redonda, silencios de, para un compás completo -@cindex silencios de redonda para un compás completo - -@funindex R - -Los silencios de uno o más compases completos se introducen como notas -con el nombre @code{R} en mayúscula: - -@lilypond[quote,verbatim,relative=2] -% Rest measures contracted to single measure -\compressFullBarRests -R1*4 -R1*24 -R1*4 -b2^"Tutti" b4 a4 -@end lilypond - -La duración de los silencios de compás completo es idéntica a la -notación de la duración que se usa para las notas. La duración de un -silencio multi-compás debe ser siempre un número entero de compases, -por lo que con frecuencia han de utilizarse puntillos o fracciones: - -@lilypond[quote,fragment,verbatim] -\compressFullBarRests -\time 2/4 -R1 | R2 | -\time 3/4 -R2. | R2.*2 | -\time 13/8 -R1*13/8 | R1*13/8*12 | -\time 10/8 -R4*5*4 | -@end lilypond - -Un silencio de un compás completo se imprime como un silencio de -redonda o de breve, centrado en el compás, según el tipo de compás -vigente. - -@lilypond[quote,verbatim,fragment] -\time 4/4 -R1 | -\time 6/4 -R1*3/2 | -\time 8/4 -R1*2 | -@end lilypond - -@cindex multicompás, silencios, expansión de -@cindex multicompás, silencios, contracción de - -@funindex \expandFullBarRests -@funindex expandFullBarRests -@funindex \compressFullBarRests -@funindex compressFullBarRests - -De forma predeterminada un silencio multicompás se expande en la -partitura impresa para mostrar explícitamente todos los compases de -silencio. De forma alternatica, un silencio multicompás se puede -presentar como un solo compás que contiene un símbolo de silencio -multicompás, con el número de compases impreso encima del compás: - -@lilypond[quote,fragment,verbatim] -% Default behavior -\time 3/4 r2. | R2.*2 | -\time 2/4 R2 | -\time 4/4 -% Rest measures contracted to single measure -\compressFullBarRests -r1 | R1*17 | R1*4 | -% Rest measures expanded -\expandFullBarRests -\time 3/4 -R2.*2 | -@end lilypond - - -@cindex texto sobre un silencio multicompás -@cindex multicompás, silencio, adjuntar texto -@cindex inscripción sobre un silencio multicompás -@cindex multicompás, silencios, inscripción en -@cindex calderón sobre un silencio multicompás -@cindex multicompás, silencio, aplicar un calderón a - -@funindex \fermataMarkup -@funindex fermataMarkup - -Se pueden añadir elementos de marcado a los silencios multicompás. Se -proporciona la instrucción predefinida @code{\fermataMarkup} para -añadir calderones. - -@lilypond[quote,verbatim,fragment] -\compressFullBarRests -\time 3/4 -R2.*10^\markup { \italic "ad lib." } -R2.^\fermataMarkup -@end lilypond - -@warning{Los elementos de marcado que se añaden a un silencio -multicompás son objetos del tipo @code{MultiMeasureRestText}, no -@code{TextScript}. Las sobreescrituras de propiedades deben ir -dirigidas hacia el objeto correcto, o se ignorarán. Véase el ejemplo -siguiente.} - -@lilypond[quote,verbatim,fragment] -% This fails, as the wrong object name is specified -\override TextScript #'padding = #5 -R1^"wrong" -% This is correct and works -\override MultiMeasureRestText #'padding = #5 -R1^"right" -@end lilypond - -Cuando un silencio multicompás sigue inmediatamente al establecimiento -de un compás parcial con @code{\partial}, es posible que no se emitan -las advertencias correspondientes de comprobación de compás. - - -@predefined -@code{\textLengthOn}, -@code{\textLengthOff}, -@code{\fermataMarkup}, -@code{\compressFullBarRests}, -@code{\expandFullBarRests}. -@endpredefined - - -@snippets - -@cindex eclesiásticos, silencios -@cindex silencios eclesiásticos -@cindex kirchenpausen - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-form-of-multi-measure-rests.ly} - -@cindex multicompás, posicionamiento de los silencios -@cindex colocación de los silencios multicompás - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{positioning-multi-measure-rests.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{multi-measure-rest-markup.ly} - - -@seealso -Glosario musical: -@rglos{multi-measure rest}. - -Referencia de la notación: -@ref{Durations}, -@ref{Text}, -@ref{Formatting text}, -@ref{Text scripts}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{MultiMeasureRest}, -@rinternals{MultiMeasureRestNumber}, -@rinternals{MultiMeasureRestText}. - -@cindex digitaciones y silencios multicompás -@cindex multicompás, silencios, digitaciones y - -@knownissues - -Si se trata de usar digitaciones (p. ej., @code{R1*10-4}) para poner -números encima de los silencios multicompás, la cifra de la digitación -(el 4) puede chocar con el número del compás (aquí el 10). - -@cindex condensar silencios -@cindex silencio normal, condensar - -No hay ninguna forma de condensar automáticamente muchos silencios en -un solo silencio multicompás. - -@cindex silencio, colisiones de - -Los silencios multicompás no toman parte en las colisiones de -silencios. - - -@node Displaying rhythms -@subsection Displaying rhythms - -@menu -* Time signature:: -* Upbeats:: -* Unmetered music:: -* Polymetric notation:: -* Automatic note splitting:: -* Showing melody rhythms:: -@end menu - -@node Time signature -@unnumberedsubsubsec Time signature - -@cindex Indicación de compás -@cindex medida - -@funindex \time -@funindex time - -La indicación de compás se establece como sigue: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c2 -\time 3/4 c2. -@end lilypond - -@cindex compás, visibilidad de la indicación de - -La indicación de compás se imprime al comienzo de una pieza y siempre -que hay un cambio de compás. Si se produce un cambio al final de una -línea, se imprime una indicación de advertencia en dicho lugar. Se -puede modificar este comportamiento predeterminado, véase -@ref{Visibility of objects}. - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -c2 c -\break -c c -\break -\time 4/4 -c c c c -@end lilypond - -@cindex compás, estilo de la indicación de -@cindex metro, estilo de - -@funindex \numericTimeSignature -@funindex numericTimeSignature -@funindex \defaultTimeSignature -@funindex defaultTimeSignature - -El símbolo de compás que se usa en 2/2 y 4/4 se puede cambiar a un -estilo numérico: - -@lilypond[quote,verbatim,relative=2] -% Default style -\time 4/4 c1 -\time 2/2 c1 -% Change to numeric style -\numericTimeSignature -\time 4/4 c1 -\time 2/2 c1 -% Revert to default style -\defaultTimeSignature -\time 4/4 c1 -\time 2/2 c1 -@end lilypond - -Las indicaciones de compás de la música mensural se tratan en -@ref{Mensural time signatures}. - - -@predefined -@code{\numericTimeSignature}, -@code{\defaultTimeSignature}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-time-signature-without-affecting-the-beaming.ly} - -@cindex compuesto, indicaciones de compás -@cindex compás compuesto, indicaciones de - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Glosario musical: -@rglos{time signature} - -Referencia de la notación: -@ref{Mensural time signatures}, -@ref{Time administration}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}. - - -@node Upbeats -@unnumberedsubsubsec Upbeats - -@cindex anacrusa -@cindex parte al alzar -@cindex compás parcial -@cindex parcial, compás -@cindex compás, cambiar la longitud del -@funindex measurePosition - -@funindex \partial -@funindex partial - -Los compases parciales como las anacrusas o partes al alzar se -escriben usando la instrucción @code{\partial}, con la sintaxis - -@example -\partial @var{duración} -@end example - -donde @code{duración} es el valor rítmico que se se debe añadir antes -del comienzo del siguiente compás completo: - -@lilypond[quote,verbatim,relative=2] -\partial 4 e4 | -a2. c,4 | -@end lilypond - -El compás parcial puede ser de cualquier duración menor de un compás -completo: - -@lilypond[quote,verbatim,relative=2] -\partial 8*3 c8 d e | -a2. c,4 | -@end lilypond - -Esto se traduce internamente a - -@example -\set Timing.measurePosition = -@var{duración} -@end example - -La propiedad @code{measurePosition} contiene un número racional que -indica qué parte del compás ha transcurrido hasta el momento. Observe -que se establece a un número negativo por parte de la instrucción -@code{\partial}: es decir, @code{\partial 4} se traduce internamente a -@code{-4}, con el significado de @qq{queda un valor de negra en este -compás}. - - -@seealso -Glosario musical: -@rglos{anacrusis}. - -Referencia de la notación: -@ref{Grace notes}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{Timing_translator}. - - -@knownissues - -El uso de @code{\partial} está previsto solamente para el comienzo de -una pieza. Si se emplea después del comienzo se obtendrán varias -advertencias desagradables. - - -@node Unmetered music -@unnumberedsubsubsec Unmetered music - -@cindex cadencia -@cindex líneas divisorias, quitar -@cindex numeración de compases, quitar -@cindex música sin metro - -@funindex \cadenzaOn -@funindex cadenzaOn -@funindex \cadenzaOff -@funindex cadenzaOff - -Las líneas divisorias y los números de compás se calculan -automáticamente. Para música sin compasear (por ejemplo cadencias), -esto no es deseable. Para desactivar las barras y los números de -compás automáticos, utilice la instrucción @code{\cadenzaOn}, y para -activarlos de nuevo use @code{\cadenzaOff}. - -@lilypond[verbatim,relative=2,fragment] -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - -La numeración de compases se continúa al final de la cadencia como si -la cadencia no existiera: - -@lilypond[verbatim,relative=2,fragment] -% Show all bar numbers -\override Score.BarNumber #'break-visibility = #all-visible -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - - -@predefined -@code{\cadenzaOn}, -@code{\cadenzaOff}. -@endpredefined - - -@seealso -Glosario musical: -@rglos{cadenza}. - -Referencia de la notación: -@c ref{Controlling visibility of objects} - -Fragmentos de código: -@rlsr{Rhythms}. - - -@knownissues - -LilyPond inserta saltos de línea y de página solamente en las barras -de compás. A menos que la música sin compasear acabe antes del final -de la línea del pentagrama, tendrá que insertar barras de compás -invisibles - -@example -\bar "" -@end example - -@noindent -para indicar dónde se pueden producir los saltos. - - -@node Polymetric notation -@unnumberedsubsubsec Polymetric notation - -@c This section necessarily uses \set -@c This is acceptable -td - -@cindex compás, doble -@cindex compases polimétricos -@cindex polimétricos, compases -@cindex metro polimétrico -@cindex doble compás - -@funindex timeSignatureFraction -@funindex \scaleDurations -@funindex scaleDurations -@funindex \times -@funindex times - -Está contemplada la notación polimétrica, ya sea explícitamente o -mediante la modificación de la indicación visible del compás y el -escalado de la duración de las notas. - -@strong{Pentagramas con distintas indicaciones de compás, compases de -igual longitud} - -Se puede crear esta notación estableciendo una indicación de compás -común para cada pentagrama per sustituyendo el símbolo manualmente -mediante el establecimiento de @code{timeSignatureFraction} a la -fracción deseada y escalando las duraciones impresas en cada -pentagrama a la indicación de compás común; véase @ref{Time -signature}. El escalado se hace con @code{\scaleDurations}, que se -usa de una forma similar a @code{\times}, pero no crea un corchete de -grupo especial, véase @ref{Scaling durations}. - -@cindex barrado en música polimétrica -@cindex barrado en metro polimétrico - -En este ejemplo, se usa en paralelo música con compases de 3/4, 9/8 y -10/8. En el segundo pentagrama, las duraciones mostradas se -multiplican por 2/3, pues 2/3 * 9/8 = 3/4, y en el tercer pentagrama, -las duraciones que se muestran están multiplicadas por 3/5, pues 3/5 * -10/8 = 3/4. Con frecuencia se hace necesario insertar las barras de -forma manual, pues el escalado de las duraciones afecta a las reglas -de barrado automático. - -@lilypond[quote,verbatim,fragment] -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(9 . 8) - \scaleDurations #'(2 . 3) - \repeat unfold 6 { c8[ c c] } - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(10 . 8) - \scaleDurations #'(3 . 5) { - \repeat unfold 2 { c8[ c c] } - \repeat unfold 2 { c8[ c] } | - c4. c4. \times 2/3 { c8[ c c] } c4 - } - } ->> -@end lilypond - -@strong{@i{Pentagramas con distinas indicaciones de compás y -longitudes de compás distintas}} - -Se puede dar a cada pentagrama su propia indicación de compás -independiente trasladando los grabadores @code{Timing_translator} y -@code{Default_bar_line_engraver} al contexto de @code{Staff}. - -@lilypond[quote,verbatim] -\layout { - \context { - \Score - \remove "Timing_translator" - \remove "Default_bar_line_engraver" - } - \context { - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } -} - -% Now each staff has its own time signature. - -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 2/4 - c4 c | - c c | - c c | - } - \new Staff { - \time 3/8 - c4. | - c8 c c | - c4. | - c8 c c | - } ->> -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Glosario musical: -@rglos{polymetric}, -@rglos{polymetric time signature}, -@rglos{meter}. - -Referencia de la notación: -@ref{Time signature}, -@ref{Scaling durations}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}, -@rinternals{Default_bar_line_engraver}, -@rinternals{Staff}. - - -@knownissues - -Al usar distintos compases en paralelo, las notas que están en el -mismo instante de tiempo se colocan en la misma posición horizontal. -Sin embargo, las barras de compás en los distintos pentagramas harán -que el espaciado de notas sea menos regular en cada pentagrama -individual de lo que sería normal sin las distintas indicaciones de -compás. - - -@node Automatic note splitting -@unnumberedsubsubsec Automatic note splitting - -@cindex notas, división de -@cindex división de notas - -@funindex Note_heads_engraver -@funindex Completion_heads_engraver - -Las notas largas se pueden convertir automáticamente en notas ligadas. -Se hace mediante la sustitución del @code{Note_heads_engraver} por el -@code{Completion_heads_engraver}. En el ejemplo siguiente, las notas -que atraviesan la barra de compás se dividen y se unen mediante una -ligadura. - -@lilypond[quote,verbatim,relative=1] -\new Voice \with { - \remove "Note_heads_engraver" - \consists "Completion_heads_engraver" -} - -{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } -@end lilypond - -Este grabador divide todas las notas largas en la barra de compás e -inserta ligaduras. Uno de sus usos es depurar partituras complejas: -si los compases no están completos, las ligaduras mostrarán -exactamente cuánto le falta a cada compás. - - -@seealso -Glosario musical: -@rglos{tie} - -Manual de aprendizaje: -@rlearning{Engravers explained}, -@rlearning{Adding and removing engravers}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{Note_heads_engraver}, -@rinternals{Completion_heads_engraver}, -@rinternals{Forbid_line_break_engraver}. - - -@knownissues - -No todas las duraciones (sobre todo las que contienen grupos -especiales) se pueden representar exactamente con notas normales y -puntillos, pero el grabador @code{Completion_heads_engraver} nunca -insertará grupos especiales. - -@code{Completion_heads_engraver} afecta sólo a las notas; no divide -silencios. - - -@node Showing melody rhythms -@unnumberedsubsubsec Showing melody rhythms - -@cindex melodía, mostrar las duraciones -@cindex duraciones de la melodía, mostrar - -A veces podemos querer mostrar solamente el ritmo de una melodía. -Esto se puede hacer con un pentagrama de ritmo. Todas las alturas de -las notas se convierten en barras inclinadas, y el pentagrama tiene -una sola línea: - -@lilypond[quote,relative=1,verbatim] -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \time 4/4 - c4 e8 f g2 - r4 g g f - g1 - } - } - \new Lyrics { - \lyricsto "myRhythm" { - This is my song - I like to sing - } - } ->> -@end lilypond - -@cindex guitarra, tablas de acordes -@cindex rasgueado, mostrar ritmos -@cindex guitarra, mostrar ritmos rasgueados - -@funindex Pitch_squash_engraver -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -Las tablas de acordes de guitarra ofrecen a menudo los ritmos de -rasgueado. Esto se puede hacer con el grabador -@code{Pitch_squash_engraver} y @code{\improvisationOn}. - -@lilypond[quote,verbatim] -<< - \new ChordNames { - \chordmode { - c1 f g c - } - } - - \new Voice \with { - \consists Pitch_squash_engraver - } \relative c'' { - \improvisationOn - c4 c8 c c4 c8 c - f4 f8 f f4 f8 f - g4 g8 g g4 g8 g - c4 c8 c c4 c8 c - } ->> -@end lilypond - - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{guitar-strum-rhythms.ly} - - -@seealso -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{RhythmicStaff}, -@rinternals{Pitch_squash_engraver}. - - -@node Beams -@subsection Beams - -@menu -* Automatic beams:: -* Setting automatic beam behavior:: -* Manual beams:: -* Feathered beams:: -@end menu - -@node Automatic beams -@unnumberedsubsubsec Automatic beams - -De manera predeterminada, las barras de corchea se insertan -automáticamente: - -@cindex barras manuales -@cindex manuales, barras -@cindex barras, establecer reglas -@cindex barras, reglas personalizadas - -@funindex measureLength -@funindex beatLength -@funindex beatGrouping -@funindex \autoBeamOn -@funindex autoBeamOn -@funindex \autoBeamOff -@funindex autoBeamOff - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c c c -\time 6/8 c c c c8. c16 c8 -@end lilypond - -Cuando estas decisiones automáticas no son lo bastante buenas, se -pueden escribir los barrados de forma explícita; véase @ref{Manual -beams}. También es posible definir patrones de barrado que difieran -de los ajustes por defecto. Las reglas de barrado predeterminadas -están definidas en el archivo @file{scm/@/auto@/-beam@/.scm}. Si no -hay definidas reglas de barrado para una duración dada de la barra en -el tipo de compás en uso, el barrado se controla mediante los valores -de tres propiedades de contexto, @code{measureLength}, -@code{beatLength} y @code{beatGrouping}. Tanto las reglas de barrado -como las propiedades de contexto se pueden sobreescribir, véase -@ref{Setting automatic beam behavior}. - -@warning{Si se usan barras para indicar los melismas de las canciones, -entonces se debe desactivar el barrado automático con -@code{\autoBeamOff} e indicar las barras manualmente.} - - -@noindent -El barrado automático se puede habilitar o desactivar con las -instrucciones @code{\autoBeamOff} y @code{\autoBeamOn}: - -@lilypond[quote,relative=1,verbatim] -c4 c8 c8. c16 c8. c16 c8 -\autoBeamOff -c4 c8 c8. c16 c8. -\autoBeamOn -c16 c8 -@end lilypond - - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - - -@snippets - - -@cindex saltos de línea y barrado -@cindex línea, saltos de, y barrado - -@funindex divisible - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beams-across-line-breaks.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-beam-knee-gap.ly} - - -@seealso -Referencia de la notación: -@ref{Manual beams}, -@ref{Setting automatic beam behavior}. - -Archivos instalados: -@file{scm/@/auto@/-beam@/.scm}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{Beam}. - - -@knownissues - -No se pueden usar conjuntamente barras dobladas automáticamente que -cruzan pentagramas y pentagramas ocultos. Véase @ref{Hiding staves}. - -Las barras pueden colisionar con las cabezas de las notas y las -alteraciones accidentales de las otras voces. - -@node Setting automatic beam behavior -@unnumberedsubsubsec Setting automatic beam behavior - - -@cindex barras automáticas, ajuste fino -@cindex ajuste fino de las barras automáticas -@cindex automáticas, generación de barras -@cindex barras automáticas -@cindex letra y barrado - -@funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) -@funindex measureLength -@funindex beatLength -@funindex beatGrouping -@funindex \time -@funindex time -@funindex \set -@funindex set - -La colocación de barras automáticas viene determinada por las reglas -descritas en @ref{Automatic beams}. Existen dos formas mutuamente -excluyentes de modificar estas reglas. La primera es modificar la -agrupación de los pulsos y se aplica a compases poco usuales, es -decir, aquellos para los que no ha reglas predefinidas que definen los -puntos de final de las barras. El segundo método, modificar la -especificación de los puntos finales de las barras, se puede usar para -cualquier tipo de compás. Este segundo método @strong{se debe} usar -para aquellos compases y combinaciones de duración de barras para los -que existen reglas predefinidas de final de barra, a no ser que se -hayan revertido. Hay reglas predefinidas para los compases de 3/2, -3/4, 4/4, 2/4, 4/8, 4/16, 6/8, 9/8 y 12/8. - -@i{@strong{Modificar las agrupaciones de pulsos}} - -Si no hay definida ninguna regla de final de barra para la duración de -una barra en particular dentro del tipo de compás en uso, su barrado -se controla mediante tres propiedades de contexto: -@code{measureLength}, @code{beatLength} y @code{beatGrouping}. Estas -propiedades se deben establecer en los contextos @code{Score}, -@code{Staff} o @code{Voice} para delimitar el ámbito de su efecto. -Los valores predeterminados se establecen al procesarse las -instrucciones @code{\time}, por ello las instrucciones @code{\set} se -deben escribir después de todas las instrucciones @code{\time}. - -Dichas propiedades determinan el barrado de la siguiente forma: - -Las barras pueden dar comienzo en cualquier lugar (excepto si ya hay -una barra activa). Las barras terminan en un tiempo determinado por -los valores de @code{beatGrouping} y @code{beatLength}, com se ve a -continuación: - -@itemize - -@item -Si @code{beatGrouping} y @code{beatLength} con consistentes con -@code{measureLength}, se utiliza @code{beatGrouping} para determinar -los puntos finales de las barras. - -@item -Si @code{beatGrouping} y @code{beatLength} no concuerdan con -@code{measureLength}, se usa @code{beatLength} para determinar los -puntos finales de las barras. - -@end itemize - - -@warning{Estas tres propiedades se hacen efectivas para una barra -concreta @strong{solamente} si no hay reglas de final de barra -predefinidas para esa duración de barra en el tipo de compás en uso, o -si todas esas reglas de final de barra se han revertido.} - -De forma predeterminada, las propiedades the @code{measureLength} y -@code{beatLength} se derivan del compás establecido por la instrucción -@code{\time}. La longitud @code{measureLength} está establecida de -forma que sea exactamente la misma que la longitud del compás dado por -la indicación de compás, y la longitud del pulso @code{beatLength} -tiene un valor dado igual a una parte de compás (1/n, siendo n el -denominador del compás). - -El valor predeterminado de @code{beatGrouping} se toma de una tabla -que está en @file{scm/@/music@/-functions@/.scm}. Para localizarla, -véase @rlearning{Other sources of information}. Define la agrupación -de pulsos para los compases de 5/8, 6/8, 8/8, 9/8 y 12/8. - -Tanto @code{measureLength} como @code{beatLength} son @i{momentos}, -unidades de duración musical. Las cantidades del tipo @i{moment} se -crean por la función de Scheme @code{ly:make-moment}. Para ver más -información sobre esta función, consulte @ref{Time administration}. - -@code{beatGrouping} es una lista de enteros que dan el número de -pulsos en cada grupo. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grouping-beats.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{specifying-context-with-beatgrouping.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-beatlength-and-beatgrouping.ly} - -@funindex subdivideBeams - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{sub-dividing-beams.ly} - -@cindex compases, agrupaciones de -@cindex pulsos, agrupar -@cindex agrupación de pulsos -@cindex compases, subgrupos dentro de - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{conducting-signs,-measure-grouping-signs.ly} - - -@strong{@i{Modificar los puntos finales de las barras}} - -En compases de tipo normal, las barras automáticas pueden comenzar en -cualquier nota pero solamente pueden terminar en algunas poriciones -dentro del compás, concretamente en las duraciones que estén -especificadas por las propiedades de @code{autoBeamSettings}. Estas -propiedades consisten en una lista de reglas que especifican dónde -pueden terminar las barras. Las reglas predeterminadas de -@code{autoBeamSettings} están definidas en -@file{scm/@/auto@/-beam@/.scm}. Para localizarlo, consulte -@rlearning{Other sources of information}. - -@strong{Se debe} usar este método para los tipos de compás para los -que existen reglas de final de barra definidas de forma -predeterminada, a no ser que todas ellas se hayan revertido. También -es particularmente apropiado para otros muchos compases si la -indicación de compás cambia con frecuencia, o si el barrado debe ser -distinto para las distintas duraciones de barra. - -Para añadir una regla a la lista, utilice - -@example -#(override-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) -@end example - -@noindent -donde: - -@itemize - -@item @code{límite-barra} es el tipo de límte de barra automática que se -define. Puede ser @code{begin} o @code{end}, pero sólo es efectivo -@code{end}. - -@item @code{numerador-barra/denominador-barra} es la duración de la barra -a la que se quiere aplicar la regla. Se considera que una barra tiene -la duración de su nota más breve. Ajuste @code{numerador-barra} y -@code{denominador-barra} a un asterisco @code{'*'} para que la regla -se aplique a las barras de cualquier duración. - -@item @code{numerador-compás/denominador-compás} especifica la indicación de compás -a que se aplica esta regla. Si @code{numerador-compás} y -@code{denominador-compás} tienen el valor de un asterisco @code{'*'}, -esta regla se aplica a cualquier tipo de compás. - -@item @code{numerador-momento/denominador-momento} es la posición dentro del -compás en que la barra debe terminar. - -@item @code{contexto} es opcional, y especifica el contexto en que se debe -hacer el cambio. El valor predeterminado es @code{'Voice}. - -@code{#(score-override-auto-beam-setting '(A B C D) E F)} es -equivalente a @code{#(override-auto-beam-setting '(A B C D) E F -'Score)}. - -@end itemize - -Por ejemplo, si las barras automáticas siempre deben terminar sobre la -primera negra, para cualquier tipo de compás o duración de la barra, -use - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -Podemos forzar los ajustes de las barras para que tengan efecto sólo -sobre las barras cuya nota más breve sea de una cierta duración: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -Podemos forzar los ajustes de las barras para que tengan efecto -solamente en ciertos tipos de compás: - -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d -@end lilypond - -En caso de usar varias voces, se debe especificar el contexto -@code{Staff} si queremos aplicar el barrado a todas las voces del -pentagrama: - -@lilypond[quote,verbatim,relative=2] -\time 7/8 -% rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> - -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -@end lilypond - -@warning{Si se produce un comportamiento inesperado de las barras, -compruebe la existencia de una posible interferencia en los ajustes -predeterminados del barrado automático que están en -@file{scm/@/auto@/-beam@/.scm}, porque los finales de barra definidos -aquí aún son válidos además de los suyos.} - -Debemos revertir cualquer final predeterminado indeseado o -conflictivo, para nuestro compás concreto. Podemos eliminar una regla -de barrado automático previamente establecida usando - -@example -#(revert-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) -@end example - -@noindent -@code{límite-barra}, @code{numerador-barra}, @code{denominador-barra}, -@code{numerador-compás}, @code{denominador-compás}, -@code{numerador-momento}, @code{denominador-momento} y @code{contexto} -son los mismos que antes. - -@lilypond[quote,verbatim,relative=2] -\time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -La regla de un enunciado @code{revert-auto-beam-setting} debe -corresponderse exactamente con la regla original. Esto es, no se -tiene en cuenta ninguna expansión de comodines. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-endings-in-score-context.ly} - -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - -@cindex barra, última en la partitura -@cindex barra, última en una voz polifónica - -@knownissues - -Si una partitura termina mientras una barra automática no ha terminado -aún todavía está aceptando notas, esta última barra no se imprimirá en -absoluto. Lo mismo sirve para las voces polifónicas, introducidas con -@code{<< @dots{} \\ @dots{} >>}. Si una voz polifónica termina -mientras una barra automática está aún aceptando notas, no se imprime. - - -@seealso -Fragmentos de código: -@rlsr{Rhythms}. - - -@node Manual beams -@unnumberedsubsubsec Manual beams - -@cindex barras manuales -@cindex manuales, barras - -@funindex ] -@funindex [ - -En ciertos casos puede ser preciso sobreescribir el algoritmo de -barrado automático. Por ejemplo, el barrador automático no escribe -barras por encima de los silencios o las líneas divisorias, y en las -partituras corales el barrado se ajusta con frecuencia para que siga -la medida de la letra en vez de la de las notas. Tales barras se -especifican manualmente marcando los puntos de comienzo y final con -@code{[} y @code{]} - -@lilypond[quote,relative=1,verbatim] -{ - r4 r8[ g' a r8] r8 g[ | a] r8 -} -@end lilypond - -@funindex \noBeam -@funindex noBeam - -Se pueden marcar notas individuales con @code{\noBeam} para evitar que -resulten unidas por una barra: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c\noBeam c c -@end lilypond - -@funindex stemLeftBeamCount -@funindex stemRightBeamCount - -Se puede conseguir un control incluso más estritcto sobre las barras -estableciendo las propiedades @code{stemLeftBeamCount} y -@code{stemRightBeamCount}. Especifican el número de barras que se -dibujarán en los lados izquierdo y derecho, respectivamente, de la -nota siguiente. Si cualquiera de estas dos propiedades está ajustada -a un valor, dicho valor se usará una sola vez, y luego se borrará. En -este ejemplo, el último Fa se imprime con sólo una barra en el lado -izquierdo, es decir, la barra de corchea del grupo como un todo. - -@lilypond[quote,relative=2,verbatim] -a8[ r16 f g a] -a8[ r16 -\set stemLeftBeamCount = #2 -\set stemRightBeamCount = #1 -f -\set stemLeftBeamCount = #1 -g a] -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{flat-flags-and-beam-nibs.ly} - -@node Feathered beams -@unnumberedsubsubsec Feathered beams - -@cindex barras progresivas - -@funindex \featherDurations -@funindex featherDurations -@funindex grow-direction - -Las barras progresivas se usan para indicar que un pequeño grupo de -notas se debe tocar a una velocidad creciente (o decreciente), sin -cambiar el tempo general de la pieza. El ámbito de la barra progresiva -se debe indicar manualmente usando @code{[} y @code{]}, el efecto de -ángulo de la barra se inicia especificando una dirección en la -propiedad @code{grow-direction} del objeto @code{Beam}. - -Si queremos que la colocación de las notas y el sonido de la salida -MIDI refleje el ritardando o accelerando indicado por la barra -progresiva, las notas se deben agrupar como una expresión musical -delimitada por llaves y precedida de una instrucción -@code{featheredDurations} que especifica la razón entre las duraciones -de la primera y la última notas dentro del grupo. - -Los corchetes rectos muestran el ábito de la barra y las llaves -muestran qué notas han de modificar sus duraciones. Normalmente -delimitarían el mismo grupo de notas, pero no es un requisito: las dos -instrucciones son independientes. - -En el ejemplo siguiente las ocho semicorcheas ocupan exactamente el -mismo tiempo que una blanca, pero la primera nota tiene la mitar de -duración que la última, con las notas intermedias alargándose -gradualmente. Las cuatro primeras fusas se aceleran gradualmente, -mientras que las últimas cuatro fusas están a un tempo constante. - -@lilypond[relative=1,verbatim,quote] -\override Beam #'grow-direction = #LEFT -\featherDurations #(ly:make-moment 2 1) -{ c16[ c c c c c c c] } -\override Beam #'grow-direction = #RIGHT -\featherDurations #(ly:make-moment 2 3) -{ c32[ d e f] } -% revert to non-feathered beams -\override Beam #'grow-direction = #'() -{ g32[ a b c] } -@end lilypond - -@noindent -El espaciado en la salida impresa representa las duraciones de las -notas de una forma sólo aproximada, pero la salida MIDI es exacta. - -@knownissues - -La instrucción @code{\featherDurations} sólo funciona con fragmentos -musicales muy breves, y cuando los números de la fracción son -pequeños. - - -@seealso -Fragmentos de código: -@rlsr{Rhythms}. - - -@node Bars -@subsection Bars - -@menu -* Bar lines:: -* Bar numbers:: -* Bar and bar number checks:: -* Rehearsal marks:: -@end menu - - -@node Bar lines -@unnumberedsubsubsec Bar lines - -@cindex barras de compás -@cindex líneas divisorias -@cindex repetición, barras de - -@funindex \bar -@funindex bar - -Las líneas divisorias delimitan a los compases pero también se pueden -usar para indicar las repeticiones. Normalmente, las líneas -divisorias normales se insertan de manera automática en la salida -impresa en lugares que están basados en el compás actual. - -Las barras de compás sencillas insertadas automáticamente se pueden -cambiar por otros tipos con la instrucción @code{\bar}. Por ejemplo, -se suele poner una doble barra de cierre al final de la pieza: - -@lilypond[quote,relative=1,verbatim] -e4 d c2 \bar "|." -@end lilypond - -No deja de ser válida la última nota de un compás si no termina sobre -la línea divisoria automática: se supone que la nota se prolonga sobre -el compás siguiente. Pero una secuencia larga de dichos compases -prolongados puede hacer que la música aparezca comprimida o incluso -que se salga de la página. Esto es a causa de que los saltos de línea -automáticos solamente se producen al final de compases completos, es -decir, cuando todas las notas han finalizado antes de que el compás -termine. - -@warning{Una duración incorrecta puede hacer que se trate de evitar la -producción de saltos de línea, dando como resultado una línea de -música con una compresión exagerada o música que se sale de la -página.} - -@cindex línea, saltos -@cindex líneas divisorias invisibles -@cindex compás, barras invisibles de - -También se permiten saltos de línea en las barras insertadas -manualmente incluso dentro de compases incompletos. Para permitir un -salto de línea donde no hay ninguna línea divisoria visible, utilice - -@example -\bar "" -@end example - -@noindent -De esta manera se insertará una barra invisible de compás y se hará -posible el salto de línea en este punto, sin forzarlo. No se -incrementa el contador de los números de compás. Para forzar un salto -de línea, consulte @ref{Line breaking}. - -@cindex manuales, líneas divisorias -@cindex manuales, barras de compás -@cindex barras de compás manuales -@cindex líneas divisorias manuales - -Este y otras líneas divisorias especiales se pueden insertar -manualmente en cualquier punto. Cuando coinciden con el final de un -compás, sustituyen a la línea divisoria simple que se habría insertado -automáticamente en dicho lugar. Cuando no coinciden con el final de -un compás, se inserta la línea especificada en ese punto en la salida -impresa. Dichas inserciones no afectan al cálculo y colocación de las -líneas divisorias automáticas subsiguientes. - -Están disponibles para su inserción manual la línea divisoria simple y -cinco tipos de doble barra: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|" g \bar "||" a \bar ".|" b \bar ".|." c \bar "|.|" d \bar "|." e -@end lilypond - -@noindent -así como la barra de puntos y la discontinua: - -@lilypond[quote,relative=1,verbatim] -f1 \bar ":" g \bar "dashed" a -@end lilypond - -@noindent -y cinco tipos de barra de repetición: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|:" g \bar ":|:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|" d -@end lilypond - -@cindex repeats - -Aunque se pueden insertar manualmente barras de compás con significado -de repeticiones, no se reconocen como repeticiones por parte de -LilyPond. Las secciones repetidas se introducen mejor utilizando las -diversas instrucciones de repetición (véase @ref{Repeats}), que -imprimen automáticamente las barras correspondientes. - -Además se puede especificar @code{"||:"}, que equivale a @code{"|:"} -excepto en los saltos de línea, en que produce una doble barra al -final de la línea y una repetición izquierda (de comienzo) al -principio de la línea siguiente. - -@lilypond[quote,relative=2,verbatim] -\override Score.RehearsalMark #'padding = #3 -c c c c -\bar "||:" -c c c c \break -\bar "||:" -c c c c -@end lilypond - -En las partituras con muchos pentagramas, una instrucción @code{\bar} -en uno de ellos se aplica automáticamente a todos los demás. Las -líneas resultantes se conectan entre los distintos pentagramas de un -@code{StaffGroup}, @code{PianoStaff} o @code{GrandStaff}. - -@lilypond[quote,fragment,verbatim] -<< - \new StaffGroup << - \new Staff { - e'4 d' - \bar "||" - f' e' - } - \new Staff { \clef bass c4 g e g } - >> - \new Staff { \clef bass c2 c2 } ->> -@end lilypond - -@snippets - -@funindex whichBar -@funindex defaultBarType -@funindex \bar -@funindex bar -@funindex bartype - -La instrucción @code{\bar }@var{tipo_de_barra} es una forma corta de -hacer @code{\set Timing.whichBar = }@var{tipo_de_barra}. Cuando -@code{whichBar} se establece con el valor de una cadena, se crea una -línea divisoria de ese tipo. - -El tipo de barra predeterminado que se usa para las líneas divisorias -insertadas automáticamente es @code{"|"}. Se puede cambiar en -cualquier momento con @code{\set Timing.defaultBarType = -}@var{bartype}. - - -@seealso -Referencia de la notación: -@ref{Line breaking}, -@ref{Repeats}, -@ref{Grouping staves}. - - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: - -@rinternals{BarLine} (creada al nivel de @rinternals{Staff} (pentagrama)), -@rinternals{SpanBar} (a través de los pentagramas), -@rinternals{Timing_translator} (para las propiedades del contador de tiempo Timing). - - -@node Bar numbers -@unnumberedsubsubsec Bar numbers - -@cindex compás, números de -@cindex números de compás - -@funindex currentBarNumber - -Por defecto, los números de compás se imprimen al principio de la -línea, excepto la primera. El número propiamente dicho se almacena en -la propiedad @code{currentBarNumber}, que normalmente se actualiza -automáticamente para cada compás. También se puede establecer -manualmente: - -@lilypond[verbatim,quote,fragment,relative=1] -c1 c c c -\break -\set Score.currentBarNumber = #50 -c1 c c c -@end lilypond - -@snippets - -@cindex bar numbers, regular spacing - -@funindex barNumberVisibility - -@c Uncomment this after next LSR update. -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {printing-the-bar-number-for-the-first-measure.ly} - -Los números de compás se pueden tipografiar a intervalos regulares en -vez de al principio de cada línea. Para hacerlo se debe sobreescribir -el comportamiento predeterminado de forma que se puedan imprimir en -otros lugares. Esto viene controlado por la propiedad -@code{break-visibility} de @code{BarNumber}. Toma tres valores que se -pueden fijar al valor @code{#t} o @code{#f} para especificar si el -número de compás correspondiente es visible o no. El orden de los -tres valores es @code{visible al final de la línea}, @code{visible en -mitad de la línea}, @code{visible al principio de la línea}. En el -ejemplo siguiente se imprimen los números de compás en todos los -sitios posibles: - -@lilypond[verbatim,quote,relative=1] -\override Score.BarNumber #'break-visibility = #'#(#t #t #t) -\set Score.currentBarNumber = #11 -\bar "" % Permit first bar number to be printed -c1 c c c -\break -c c c c -@end lilypond - -@c All the rest of these examples will be added to LSR -@c and moved into the Snippets. -gp - -@noindent -y aquí los números de compás se imprimen cada dos compases excepto al -final de la línea: - -@lilypond[verbatim,quote,relative=1] -\override Score.BarNumber #'break-visibility = #'#(#f #t #t) -\set Score.currentBarNumber = #11 -\bar "" % Permit first bar number to be printed -% Print a bar number every second measure -\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) -c1 c c c c -\break -c c c c c -@end lilypond - -@cindex compás, número de, formato -@cindex número de compases, formato de - -Se puede cambiar el tamaño del número de compás. Esto queda ilustrado -en el siguiente ejemplo, que también muestra cómo encerrar los números -de compás en rectángulos y circunferencias, y ofrece una forma -alternativa de especificar @code{#(#f #t #t)} para -@code{break-visibility}. - -@lilypond[verbatim,quote,relative=1] -% Prevent bar numbers at the end of a line and permit them elsewhere -\override Score.BarNumber #'break-visibility - = #end-of-line-invisible - -% Increase the size of the bar number by 2 -\override Score.BarNumber #'font-size = #2 -\repeat unfold 3 { c1 } \bar "|" - -% Draw a box round the following bar number(s) -\override Score.BarNumber #'stencil - = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) -\repeat unfold 3 { c1 } \bar "|" - -% Draw a circle round the following bar number(s) -\override Score.BarNumber #'stencil - = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) -\repeat unfold 4 { c1 } \bar "|." -@end lilypond - -@cindex bar number alignment - -Los números de compás están alineados de forma predeterminada por la -izquierda a su objeto padre. Esto suele corresponder al límite -izquierdo de una línea o, si los números se imprimen dentro de la -línea, la divisoria izquierda del compás. Los números también se -pueden colocar directamente sobre la línea divisoria o alinearse por -la derecha con ella: - -@lilypond[verbatim,quote,relative=1] -\set Score.currentBarNumber = #111 -\override Score.BarNumber #'break-visibility = #'#(#t #t #t) -% Increase the size of the bar number by 2 -\override Score.BarNumber #'font-size = #2 -% Print a bar number every second measure -\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) -c1 c1 -% Center-align bar numbers -\override Score.BarNumber #'self-alignment-X = #0 -c1 c1 -% Right-align bar numbers -\override Score.BarNumber #'self-alignment-X = #-1 -c1 c1 -@end lilypond - -Los números de compás se pueden suprimir completamente quitando el -grabador @code{Bar_number_engraver} de números de compás del contexto -de partitura @code{Score}. - -@lilypond[verbatim,quote] -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} -\relative c''{ - c4 c c c \break - c4 c c c -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{BarNumber}. - -@cindex número de compás, colisión -@cindex colisión del número de compás - -@knownissues - -Los números de compás pueden colisionar con el corchete -@rinternals{StaffGroup}, si hay uno en la parte de arriba. Para -solucionarlo, se puede usar la propiedad de relleno @code{padding} de -@rinternals{BarNumber} para colocar el número correctamente. - -@c esto va a input/lsr/printing-the-bar-number-for-the-first-measure.ly -@ignore -Los números de compás solamente se pueden imprimir en las líneas -divisorias; para imprimir un número de compás al principio de la -pieza, se debe insertar allí una barra de compás vacía, y se debe -poner un valor distinto a @code{1} en @code{currentBarNumber}: - -@lilypond[verbatim,quote,relative=1] -\set Score.currentBarNumber = #50 -\bar "" -c1 c c c -c1 c c c -\break -@end lilypond -@end ignore - -@node Bar and bar number checks -@unnumberedsubsubsec Bar and bar number checks - -@cindex compás, comprobación de -@cindex número de compás, comprobación de - -@funindex barCheckSynchronize -@funindex | - -Las comprobaciones de compás ayudan a detectar errores en las -duraciones. Una comprobación de compás se escribe usando el símbolo -de la barra vertical, @code{|}, en cualquier lugar donde se espera que -caiga una línea divisoria. Si se encuentran líneas de comprobación de -compás en otros lugares, se imprime una lista de advertencias en el -archivo log de registro, mostrando los números de línea y columna en -que han fallado las comprobaciones de compás. En el siguiente -ejemplo, la segunda comprobación de compás avisará de un error - -@example -\time 3/4 c2 e4 | g2 | -@end example - -Las comprobaciones de compás también se pueden usar en la letra de las -canciones, por ejemplo - -@example -\lyricmode @{ - \time 2/4 - Bri -- lla | Bri -- lla | -@} -@end example - -Las duraciones incorrectas a menudo desbaratan la partitura -completamente, sobre todo si la música es polifónica, por ello el -mejor sitio para empezar a corregir la entrada es hacer un barrido en -busca de comprobaciones de compás fallidas y duraciones incorrectas. - -Si varias comprobaciones de compás corresponden al mismo intervalo -musical, sólo se imprime el primer mensaje de advertencia. Esto -permite que la advertencia se centre en la fuente del error de cuenta -de tiempo. - -@funindex | -@funindex pipeSymbol - -También es posible redefinir la acción que se lleva a cabo cuando se -encuentra un símbolo de comprobación de compás o «símbolo de tubería», -@code{|}, en el código de entrada, de forma que haga algo distinto a -una comprobación de compás. Se hace asignando una expresión musical a -@code{pipeSymbol} («símbolo de tubería»). En el ejemplo siguiente se -establece @code{|} de forma que inserte una doble línea divisoria -cuando aparece en el código de entrada, en vez de comprobar el final -de un compás. - -@lilypond[quote,verbatim] -pipeSymbol = \bar "||" -{ - c'2 c'2 | - c'2 c'2 - c'2 | c'2 - c'2 c'2 -} -@end lilypond - -@funindex \barNumberCheck -@funindex barNumberCheck - -Al copiar piezas musicales grandes puede servir de ayuda comprobar que -el número de compás de LilyPond corresponde al original desde el que -está copiando. Esto se puede comprobar con @code{\barNumberCheck}, -por ejemplo: - -@verbatim -\barNumberCheck #123 -@end verbatim - -@noindent -imprimirá una advertencia si el @code{currentBarNumber} (número del -compás actual) no es 123 cuando se procesa. - - -@seealso -Fragmentos de código: -@rlsr{Rhythms}. - - -@node Rehearsal marks -@unnumberedsubsubsec Rehearsal marks - -@cindex ensayo, letras de -@cindex letras de ensayo - -@funindex \mark -@funindex mark - -Para imprimir una letra de ensayo, utilice la orden @code{\mark} - -@lilypond[quote,verbatim,relative=2] -c1 \mark \default -c1 \mark \default -c1 \mark #8 -c1 \mark \default -c1 \mark \default -@end lilypond - -@noindent -La letra@tie{}@q{I} se salta de acuerdo con las tradiciones de -grabado. Si quiere incluir la letra @q{I}, use - -@example -\set Score.markFormatter = #format-mark-alphabet -@end example - -La letra de ensayo se incrementa automáticamente si usa @code{\mark -\default}, pero también puede utilizar un número entero como argumento -para establecer la indicación manualmente. El valor que se utilizará -se almacena dentro de la propiedad @code{rehearsalMark}. - -@cindex ensayo, letra de, formato -@cindex ensayo, letra de, estilo -@cindex estilo de la letra de ensayo -@cindex formato de la letra de ensayo -@cindex letra de ensayo, estilo -@cindex letra de ensayo, formato -@cindex marca de ensayo, estilo -@cindex marca de ensayo, formato -@cindex ensayo, letra de, manual -@cindex marca de ensayo manual -@cindex personalizada, marca de ensayo - -El estilo se define por medio de la propiedad @code{markFormatter}. -Es una función que toma como argumentos la marca en curso (un número -entero) y el contexto actual. Debe devolver un objeto de marcado. En -el ejemplo siguiente, se establece @code{markFormatter} con el valor -de un procedimiento enlatado. Después de algunos compases, se -establece con el valor de una función que produce un número encerrado -en una caja. - -@lilypond[quote,verbatim,relative=2] -\set Score.markFormatter = #format-mark-numbers -c1 \mark \default -c1 \mark \default -\set Score.markFormatter = #format-mark-box-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-letters -c1 -@end lilypond - -El archivo @file{scm/@/translation@/-functions@/.scm} contiene las -definiciones de @code{format-mark-numbers} (el formato por omisión), -@code{format-mark-box-numbers}, @code{format-mark-letters} y -@code{format-mark-box-letters}. Se pueden usar éstos como inspiración -para otras funciones de formateo. - -Podemos utilizar @code{format-mark-barnumbers}, -@code{format-mark-box-barnumbers} y -@code{format-mark-circle-barnumbers} para obtener números de compás en -lugar de números o letras secuenciales. - -Se pueden especificar otros estilos de letra de ensayo de forma -manual: - -@example -\mark "A1" -@end example - -@noindent -@code{Score.markFormatter} no afecta a las marcas que se especifican -de esta forma. Sin embargo, es posible aplicar un elemento -@code{\markup} a la cadena. - -@example -\mark \markup@{ \box A1 @} -@end example - -@cindex segno -@cindex coda -@cindex D.S al Fine -@cindex calderón -@cindex musicales, glifos -@cindex glifos musicales - -@funindex \musicglyph -@funindex musicglyph - -Los glifos musicales (como el segno) se pueden imprimir dentro de un -elemento @code{\mark} - -@lilypond[quote,verbatim,relative=1] -c1 \mark \markup { \musicglyph #"scripts.segno" } -c1 \mark \markup { \musicglyph #"scripts.coda" } -c1 \mark \markup { \musicglyph #"scripts.ufermata" } -c1 -@end lilypond - -@noindent -Consulte @ref{The Feta font} para ver una lista de los símbolos que se -pueden imprimir con @code{\musicglyph}. - -Para ver formas comunes de trucar la colocación de las letras de -ensayo, consulte @ref{Text marks}. - - -@seealso -Referencia de la notación: -@ref{The Feta font}, -@ref{Formatting text}. - -Archivos de inicio: @file{scm/@/translation@/-functions@/.scm} -contiene la definición de @code{format-mark-numbers} y de -@code{format-mark-letters}. Se pueden usar como inspiración para -escribir otras funciones de formateo. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{RehearsalMark}. - - -@node Special rhythmic concerns -@subsection Special rhythmic concerns - -@menu -* Grace notes:: -* Aligning to cadenzas:: -* Time administration:: -@end menu - -@node Grace notes -@unnumberedsubsubsec Grace notes - -@cindex ornamentos -@cindex mordentes -@cindex appoggiatura -@cindex acciaccatura - -@funindex \grace -@funindex grace - -Los mordentes y notas de adorno son ornamentos escritos. Se imprimen -en un tipo más pequeño y no ocupan ningún tiempo lógico en el -compás. - -@lilypond[quote,relative=2,verbatim] -c4 \grace c16 c4 -\grace { c16[ d16] } c2 -@end lilypond - -Lilypond también contempla dos tipos especiales de notas de adorno, la -@emph{acciaccatura} o mordente de una nota (una nota de adorno sin -medida que se indica mediante una pequeña nota ligada y con el -corchete tachado) y la @emph{appoggiatura}, que toma una fracción fija -de la nota principal, y se denota como una nota pequeña, ligada, sin -tachar. - -@lilypond[quote,relative=2,verbatim] -\grace c8 b4 -\acciaccatura d8 c4 -\appoggiatura e8 d4 -\acciaccatura { g16[ f] } e4 -@end lilypond - -La colocación de notas de adorno se sincroniza entre los distintos -pentagramas. En el siguiente ejemplo, hay dos semicorcheas de adorno -por cada corchea de adorno: - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e2 \grace { c16[ d e f] } e2 } - \new Staff { c2 \grace { g8[ b] } c2 } >> -@end lilypond - -@funindex \afterGrace - -@cindex adorno, seguimiento de notas de - -@funindex \afterGrace -@funindex afterGrace - -Si queremos terminar una nota con un adorno, usamos la instrucción -@code{\afterGrace}. Toma dos argumentos: la nota principal, y las -notas de adorno que siguen a la nota principal. - -@lilypond[quote,verbatim,relative=2] -c1 \afterGrace d1 { c16[ d] } c1 -@end lilypond - -Esto pone las notas de adorno después de un espacio que dura 3/4 de la -longitud de la nota principal. La fracción predeterminada de 3/4 se -puede cambiar estableciendo @code{afterGraceFraction}. El ejemplo -siguiente muestra el resultado de establecer el espacio en su valor -predeterminado, en 15/16, y por último en 1/2 de la nota principal. - -@lilypond[quote,verbatim,relative=2] -<< - \new Staff { - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 15 16)) - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 1 2)) - c1 \afterGrace d1 { c16[ d] } c1 - } ->> -@end lilypond - -El espacio entre la nota principal y la de adorno también se puede -especificar usando espaciadores. El ejemplo siguiente sitúa la nota de -adorno después de un espacio que dura 7/8 de la nota principal. - -@lilypond[quote,verbatim,relative=2] -\new Voice { - << { d1^\trill_( } - { s2 s4. \grace { c16[ d] } } >> - c1) -} -@end lilypond - -Una expresión musical @code{\grace} introduce ajustes de tipografía -especiales, por ejemplo para producir un tipo más pequeño y para fijar -las direcciones. Por ello, cuando se introducen trucos para la -presentación, deben ir dentro de la expresión de adorno. Las -sobreescrituras se deben también revertir dentro de la expresión de -adorno. Aquí, la dirección predeterminada de la plica de la nota de -adorno se sobreescribe y luego se revierte. - -@lilypond[quote,verbatim,relative=2] -\new Voice { - \acciaccatura { - \stemDown - f16-> - \stemNeutral - } - g4 e c2 -} -@end lilypond - - -@cindex stem, with slash - - -@snippets - -El trazo inclinado que atraviesa al corchete de las -@emph{acciaccatura}s se puede aplicar en otras situaciones: - -@lilypond[quote,verbatim,relative=2] -\relative c'' { - \override Stem #'stroke-style = #"grace" - c8( d2) e8( f4) -} -@end lilypond - -La disposición de las expresiones de adorno se pueden cambiar a lo -largo de la música usando la función @code{add-grace-property}. El -siguiente ejemplo suprime la definición de la dirección de la -@code{Stem} (plica) para este adorno, y así las plicas no siempre -apuntan hacia arriba. - -@lilypond[quote,verbatim,relative=2] -\relative c'' { - \new Staff { - #(add-grace-property 'Voice 'Stem 'direction ly:stem::calc-direction) - #(remove-grace-property 'Voice 'Stem 'direction) - \new Voice { - \acciaccatura { f16 } g4 - \grace { d16[ e] } f4 - \appoggiatura { a,32[ b c d] } e2 - } - } -} -@end lilypond - -Otra opción es modificar las variables @code{startGraceMusic}, -@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, -@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y -@code{stopAppoggiaturaMusic}. Sus valores predeterminados están en el -archivo @file{ly/@/grace@/-init@/.ly}. Al redefinirlos se pueden -obtener otros efectos. - -Se puede forzar la alineación de las notas de adorno con las notas -normales de los otros pentagramas: - -@lilypond[verbatim,quote] -\relative c'' { - << - \override Score.SpacingSpanner #'strict-grace-spacing = ##t - \new Staff { - c4 - \afterGrace c4 { c16[ c8 c16] } - c4 r - } - \new Staff { - c16 c c c c c c c c4 r - } - >> -} -@end lilypond - - -@seealso -Glosario musical: -@rglos{grace notes}, -@rglos{acciaccatura}, -@rglos{appoggiatura}. - -Archivos de inicio: -@file{ly/@/grace@/-init@/.ly}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{GraceMusic}. - - -@knownissues - -Una @i{acciaccatura} de varias notas con una barra se imprime sin -tachar, y tiene exactamente la misma apariencia que una -@i{appoggiatura} de varias notas con barra. - -@c TODO Add link to LSR snippet to add slash when available - -La sincronización de las notas de adorno también puede acarrear -sorpresas. La notación de pentagramas, como armaduras, líneas -divisorias, etc., se sincronizan también. Ponga cuidado cuando mezcle -pentagramas con adornos y sin adornos, por ejemplo - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e4 \bar "|:" \grace c16 d2. } - \new Staff { c4 \bar "|:" d2. } >> -@end lilypond - -@noindent -Esto se puede remediar insertando desplazamientos de adorno de las -duraciones correspondientes en los otros pentagramas. Para el ejemplo -anterior - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e4 \bar "|:" \grace c16 d2. } - \new Staff { c4 \bar "|:" \grace s16 d2. } >> -@end lilypond - -Las secciones de adorno sólo se deben usar dentro de expresiones de -música secuenciales. No están contemplados el anidado ni la -yuxtaposición de secciones de adorno, y podría producir caídas u otros -errores. - - -@node Aligning to cadenzas -@unnumberedsubsubsec Aligning to cadenzas - -@cindex cadenza (cadencia) -@cindex cadenza (cadencia), alinear a -@cindex alineación a una cadenza (cadencia) - -En un contexto orquestal, las cadenzas presentan un problema especial: -al construir una partitura que tiene una cadenza, todos los demás -instrumentos deben saltar tantas notas como la longitud de la cadenza, -pues en caso contrario empezarán demasiado pronto o tarde. - -Una solución a este problema son las funciones @code{mmrest-of-length} -y @code{skip-of-length}. Estas funciones de Scheme toman un fragmento -de música como argumento y generan un @code{\skip} o silencio -multicompás, de la longitud exacta del fragmento. - -@lilypond[verbatim,quote] -MyCadenza = \relative c' { - c4 d8 e f g g4 - f2 g4 g -} - -\new GrandStaff << - \new Staff { - \MyCadenza c'1 - \MyCadenza c'1 - } - \new Staff { - #(ly:export (mmrest-of-length MyCadenza)) - c'1 - #(ly:export (skip-of-length MyCadenza)) - c'1 - } ->> -@end lilypond - - -@seealso -Glosario musical: -@rglos{cadenza}. - -Fragmentos de código: -@rlsr{Rhythms}. - - -@node Time administration -@unnumberedsubsubsec Time administration - -@cindex tiempo, administración -@cindex tiempo, control del (dentro de la partitura) -@cindex música sin medida -@cindex medida, música sin - -@funindex currentBarNumber -@funindex measurePosition -@funindex measureLength - -El tiempo está administrado por el @code{Timing_translator}, que de -forma predeterminada vive en el contexto de @code{Score}. Se añade un -alias, @code{Timing}, al contexto en que se coloca el -@code{Timing_translator}. - -Se usan las siguientes propiedades de @code{Timing} para seguir la -pista del tiempo dentro de la partitura. - -@cindex compás, número de -@cindex número de compás - -@table @code -@item currentBarNumber -El número de compás en curso. Para ver un ejemplo que muestra el uso -de esta propiedad, consulte @ref{Bar numbers}. - -@item measureLength -La longitud de los compases dentro de la indicación actual de compás. -Para un 4/4 esto es@tie{}1, y para el 6/8 es 3/4. Su valor determinad -cuándo se insertan las líneas divisorias y cómo se generan las barras -automáticas. - -@item measurePosition -El punto en que nos encontramos dentro del compás. Esta cantidad se -reinicia sustrayendo @code{measureLength} cada vez que se alcanza o se -excede @code{measureLength}. Cuando eso ocurre, se incrementa -@code{currentBarNumber}. - -@item timing -Si tiene un valor verdadero, las variables anteriores se actualizan a -cada paso de tiempo. Cuando tiene un valor falso, el grabador se -queda en el compás actual indefinidamente. - -@end table - -La cuenta del tiempo se puede cambiar estableciendo el valor de -cualquiera de estas variables explícitamente. En el siguiente -ejemplo, se imprime la indicación de compás predeterminada 4/4, pero -@code{measureLength} tiene está ajustado a 5/4. En los 4/8 hasta el -tercer compás, la posición @code{measurePosition} se adelanta en 1/8 -hasta 5/8, acortando ese compás en 1/8. Entonces, la siguiente línea -divisoria cae en 9/8 en vez de hacerlo en 5/4. - -@lilypond[quote,verbatim,relative=1] -\set Score.measureLength = #(ly:make-moment 5 4) -c1 c4 -c1 c4 -c4 c4 -\set Score.measurePosition = #(ly:make-moment 5 8) -b4 b4 b8 -c4 c1 -@end lilypond - -@noindent -Como lo ilustra el ejemplo, @code{ly:make-moment n m} construye una -duración de la fracción n/m de una redonda. Por ejemplo, -@code{ly:make-moment 1 8} es una duración de una corchea y -@code{ly:make-moment 7 16} es la duración de siete semicorcheas. - - -@seealso -Referencia de la notación: -@ref{Bar numbers}, -@ref{Unmetered music}. - -Fragmentos de código: -@rlsr{Rhythms}. - -Referencia de funcionamiento interno: -@rinternals{Timing_translator}, -@rinternals{Score}. diff --git a/Documentation/es/user/running.itely b/Documentation/es/user/running.itely deleted file mode 100644 index 9743df6095..0000000000 --- a/Documentation/es/user/running.itely +++ /dev/null @@ -1,676 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Running LilyPond -@chapter Running LilyPond - -Este capítulo detalla los aspectos técnicos de la ejecución de -LilyPond. - -@menu -* Normal usage:: -* Command-line usage:: -* Error messages:: -* Updating files with convert-ly:: -* Reporting bugs:: -@end menu - - -@node Normal usage -@section Normal usage - -Casi todos los usuarios ejecutan LilyPond por medio de un interfaz -gráfico; consulte @rlearning{First steps} si no lo ha leído aún. - - -@node Command-line usage -@section Command-line usage - -Esta sección contiene información adicional sobre el uso de LilyPond -en la línea de órdenes. Esta forma puede ser preferible para pasarle -al programa algunas opciones adicionales. Además, existen algunos -programas complementarios @q{de apoyo} (como @code{midi2ly}) que sólo -están disponibles en la línea de órdenes. - -Al hablar de la @q{línea de órdenes}, nos referimos a la consola del -sistema operativo. Los usuarios de Windows posiblemente estén más -familiarizados con los términos @q{ventana de MS-DOS} o @q{línea de -comandos}; Los usuarios de MacOS@tie{}X puede que estén más -familiarizados con los términos @q{terminal} o @q{consola}. Éstos -deberían consultar también el apartado @ref{Setup for MacOS X}. - -La descripción del uso de esta parte de los sistemas operativos se -sale del ámbito de este manuual; le rogamos que consulte otros -documentos sobre este tema si no le resulta familiar la línea de -órdenes. - -@menu -* Invoking lilypond:: -* Command line options for lilypond:: -* Environment variables:: -@end menu - -@node Invoking lilypond -@subsection Invoking @command{lilypond} - -@cindex invocar @command{lilypond} -@cindex opciones de la línea de órdenes para @command{lilypond} -@cindex órdenes, opciones de la línea de - -El ejecutable @command{lilypond} se puede llamar desde la línea de -órdenes de la siguiente manera: - -@example -lilypond [@var{opción}]@dots{} @var{archivo}@dots{} -@end example - -Cuando se invoca con un nombre de archivo sin extensión, se prueba en -primer lugar con la extensión @file{.ly}. Para leer la entrada desde -stdin, utilice un guión (@code{-}) en sustitución de @var{archivo}. - -Cuando se procesa @file{archivo.ly}, la salida resultante son los -archivos @file{archivo.ps} y @file{archivo.pdf}. Se pueden -especificar varios archivos; cada uno de ellos se procesará de forma -independiente@footnote{El estado de GUILE no se restablece después de -procesar un archivo @code{.ly}, por lo que debe tener cuidado de no -modificar ningún valor predeterminado desde dentro de Scheme.}. - -Si @file{archivo.ly} contiene más de un bloque @code{\score}, el resto -de las partituras se obtendrán como salida en archivos numerados, -empezando por @file{archivo-1.pdf}. además, el valor de -@code{output-suffix} (sufijo de salida) se insertará entre el nombre -base y el número. Un archivo de entrada que contenga - -@example -#(define output-suffix "violin") -\book @{ @dots{} @} -#(define output-suffix "cello") -\book @{ @dots{} @} -@end example - -@noindent -producirá como salida @var{base}@file{-violin.pdf} y -@var{base}@file{-cello-1.pdf}. - - -@node Command line options for lilypond -@subsection Command line options for @command{lilypond} - -Están contempladas las siguientes opciones: - -@table @code - -@item -e,--evaluate=@var{expresión} -Evaluar la @var{expresión} de Scheme antes de analizar los archivos -@file{.ly}. Se pueden pasar varias opciones @code{-e}, que se -evaluarán en secuencia. - -La expresión se evaluará en el módulo @code{guile-user}, de manera que -si quiere usar definiciones dentro de @var{expresión}, debe utilizar - -@example -lilypond -e '(define-public a 42)' -@end example - -@noindent -en la línea de órdenes, e incluir - -@example -#(use-modules (guile-user)) -@end example - -@noindent -al principio del archivo @code{.ly}. - -@item -f,--format=@var{formato} -Formato de la salida. Como @code{formato} se puede elegir entre -@code{svg}, @code{ps}, @code{pdf} y @code{png}. - -Ejemplo: @code{lilypond -fpng @var{archivo}.ly} - -@item -d,--define-default=@var{variable}=@var{valor} -Establece la opción interna del programa @var{variable} al valor de -Scheme @var{valor}. Si no se proporciona ningún @var{valor}, se usa -@var{#t}. Para desactivar una opción se puede anteponer @code{no-} a -la @var{variable}, p.ej.: - -@cindex apuntar y pulsar, línea de órdenes - -@example --dno-point-and-click -@end example - -@noindent -es lo mismo que -@example --dpoint-and-click='#f' -@end example - -A continuación veremos algunas opciones interesantes. - -@table @samp -@item help -La ejecución de @code{lilypond -dhelp} imprimirá todas las opciones -@code{-d} que están disponibles. - -@item paper-size -Esta opción establece el tamaño predeterminado del papel, -@example --dpaper-size=\"letter\" -@end example - -@noindent -Observe que la cadena se debe incluir dentro de comillas escapadas -( @code{\"} ). - -@c Match " in previous line to help context-sensitive editors - -@item safe -No confiar en la entrada @code{.ly}. - -Cuando el proceso de tipografía de LilyPond se encuentra disponible a -través de un servidor web, @b{SE DEBEN} pasar las opciones -@code{--safe} (seguro) o @code{--jail} (jaula). La opción -@code{--safe} evita que el código de Scheme en línea arme un desastre, -por ejemplo - -@quotation -@verbatim -#(system "rm -rf /") -{ - c4^#(ly:export (ly:gulp-file "/etc/passwd")) -} -@end verbatim -@end quotation - -La opción @code{-dsafe} funciona evaluando las expresiones en línea de -Scheme dentro de un módulo especial seguro. Este módulo seguro deriva -del módulo GUILE @file{safe-r5rs}, pero añade ciertas funciones del -API de LilyPond. Estas funciones se relacionan en -@file{scm/@/safe@/-lily@/.scm}. - -Además, el modo seguro prohíbe las directivas @code{\include} e -inhabilita el uso de barras invertidas en las cadenas de @TeX{}. - -En el modo seguro, no es posible la importación de variables de -LilyPond dentro de Scheme. - -@code{-dsafe} @emph{no} detecta la sobreutilización de recursos. Aún -es posible hacer que el programa se cuelgue indefinidamente, por -ejemplo alimentándo el backend con estructuras de datos cíclicas. Por -tanto, si se está utilizando LilyPond sobre un servidor web accesible -públicamente, el proceso debe limitarse tanto en el uso de CPU como de -memoria. - -El modo seguro impide que muchos fragmentos útiles de código de -LilyPond se puedan compilar. La opción @code{--jail} es una -alternativa más segura, pero su preparación requiere más trabajo. - -@cindex salida, establecer el formato de -@item backend -el formato de salida que usar para el back-end o extremo final. -Para el @code{formato} se puede elegir entre -@table @code -@item ps -@cindex PostScript, salida -para PostScript. - -Los archivos PostScript incluyen las tipografías TTF, Type1 y OTF. No -se seleccionan subconjuntos de estas tipografías. Cuando se usan -conjuntos de caracteres orientales, esto puede dar lugar a archivos -enormes. - -@item eps - para obtener PostScript encapsulado. Esto vuelca cada una de las -páginas/sistemas como un archivo @file{EPS} distinto, sin tipografías, -y como un solo archivo @file{EPS} encuadernado con todas las -páginas/sistemas con las tipografías incluidas. - -Este modo se usa de forma predeterminada por parte de -@command{lilypond-book}. - -@item svg -@cindex SVG (Scalable Vector Graphics) - para obtener SVG (gráficos vectoriales escalables). Vuelca cada -página como un archivo @file{SVG} distinto, con las tipografías -incrustadas. - Se necesita un visor de SVG que contemple las tipografías -incrustadas, o un visor de SVG que pueda sustituir las tipografías -incrustadas por tipografías OTF. Bajo UNIX, puede usar -@uref{http://www.inkscape.org,Inkscape} (versión 0.42 o posterior), -después de copiar las tipografías OTF del directorio de LilyPond (que -normalmente es @file{/usr/share/lilypond/VERSIÓN/fonts/otf/}) al -directorio @file{~/.fonts/}. -@item scm -@cindex Scheme, volcado de - para obtener un volcado de las instrucciones internas de dibujo -basadas en Scheme, en bruto. -@item null - no producir una salida impresa; tiene el mismo efecto que @code{-dno-print-pages}. -@end table - -Ejemplo: @code{lilypond -dbackend=svg @var{archivo}.ly} - -@item preview -Generar un archivo de salida que contenga solamente los títulos de -cabecera y el primer sistema de la primera página. - -@item print-pages -Generar las páginas completas, el ajuste predeterminado. -@code{-dno-print-pages} es útil en combinación con @code{-dpreview}. - -@end table - - - -@item -h,--help -Mostrar un resumen de las formas de utilización. - -@item -H,--header=@var{CAMPO} -Volcar un campo de cabecera al archivo @file{NOMBREBASE.@var{CAMPO}} - -@item --include, -I=@var{directorio} -Añadir el @var{directorio} a la ruta de búsqueda de archivos de -entrada. -@cindex archivos, búsqueda de -@cindex búsqueda, ruta de - -@item -i,--init=@var{archivo} -Establecer el archivo de inicio a @var{archivo} (predeterminado: -@file{init.ly}). - -@item -o,--output=@var{ARCHIVO} -Establecer el nombre del archivo de salida predeterminado a -@var{ARCHIVO}. Se añade el sufijo correspondiente (por ejemplo, -@code{.pdf} para PDF). - -@item --ps -Generar PostScript. - -@item --png -Generar imágenes de las páginas en formato PNG. Esto implica -@code{--ps}. La resolución en PPP de la imagen se puede establecer -con -@example --dresolution=110 -@end example - -@item --pdf -Generar PDF. Implica @code{--ps}. - -@item -j,--jail=@var{usuario},@var{grupo},@var{jaula},@var{directorio} -Ejecutar @command{lilypond} en una jaula de chroot. - -La opción @code{--jail} (jaula) proporciona una alternativa más -flexible a la opción @code{--safe} cuando el proceso de tipografía de -LilyPond está disponible a través de un servidor web o cuando LilyPond -ejecuta archivos fuente procedentes del exterior. - -La opción @code{--jail} funciona cambiando la raíz de -@command{lilypond} a @var{jaula} justo antes de comenzar el proceso de -compilación en sí. Entonces se cambian el usuario y el grupo a los -que se han dado en la opción, y el directorio actual se cambia a -@var{directorio}. Esta instalación garantiza que no es posible, al -menos en teoría, escapar de la jaula. Observe que para que funcione -@code{--jail} se debe ejecutar @command{lilypond} como root, lo que -normalmente se puede hacer de una forma segura utilizando -@command{sudo}. - -La instalación de una jaula es un asunto algo delicado, pues debemos -asegurarnos de que LilyPond puede encontrar @emph{dentro de la jaula} -todo lo que necesita para poder compilar la fuente. Una configuración -típica consta de los siguientes elementos: - -@table @asis -@item Preparar un sistema de archivos separado -Se debe crear un sistema de archivos separado para LilyPond, de forma -que se pueda montar con opciones seguras como @code{noexec}, -@code{nodev} y @code{nosuid}. De esta forma, es imposible ejecutar -programas o escribir directamente a un dispositivo desde LilyPond. Si -no quiere crear una partición separada, tan sólo tiene que crear un -archivo de un tamaño razonable y usarlo para montar un dispositivo -loop. El sistema de archivos separado garantiza también que LilyPond -nunca pueda escribir en un espacio mayor del que se le permita. - -@item Preparar un usuario separado -Se debe usar un usuario y grupo separados (digamos -@code{lily}/@code{lily}) con bajos privilegios para ejecutar LilyPond -dentro de la jaula. Debería existir un solo directorio con permisos -de escritura para este usuario, y debe pasarse en el valor -@var{directorio}. - -@item Preparar la jaula -LilyPond necesita leer algunos archivos mientras se ejecuta. Todos -estos archivos se deben copiar dentro de la jaula, bajo la misma ruta -en que aparecen en el sistema de archivos real de root. Todo el -contenido de la instalación de LilyPond (por ejemplo -@file{/usr/share/lilypond}) se debe copiar. - -Si surgen problemas, la forma más sencilla de rastrearlos es ejecutar -LilyPond usando @command{strace}, lo que le permitirá determinar qué -archivos faltan. - -@item Ejecutar LilyPond -Dentro de una jaula montada con @code{noexec} es imposible ejecutar -ningún programa externo. Por tanto, LilyPond se debe ejecutar con un -backend que no necesite tal programa. Como ya mencionamos, también se -debe ejecutar con privilegios del superusuario (que por supuesto -perderá inmediatamente), posiblemente usando @command{sudo}. Es buena -idea limitar el número de segundos de tiempo de CPU que LilyPond puede -usar (p.ej., usando @command{ulimit -t}), y, si su sistema operativo -lo contempla, el tamaño de la memoria que se puede reservar. -@end table - - -@item -v,--version -Mostrar la información de la versión. - -@item -V,--verbose -Ser prolijo: mostrar las rutas completas de todos los archivos que se -leen, y dar información cronométrica. - -@item -w,--warranty -Mostrar la garantía con que viene GNU LilyPond (¡no viene con -@strong{NINGUNA GARANTÍA}!). -@end table - -@node Environment variables -@subsection Environment variables - - -@cindex LANG -@cindex LILYPOND_DATADIR - -@command{lilypond} reconoce las siguientes variables de entorno: -@table @code -@item LILYPOND_DATADIR -Especifica un directorio en el que los mensajes de localización y de -datos se buscarán de forma predeterminada. El directorio debe -contener subdirectorios llamados @file{ly/}, @file{ps/}, @file{tex/}, -etc. - -@item LANG -Selecciona el idioma de los mensajes de advertencia. - -@item LILYPOND_GC_YIELD -Con esta variable se puede ajustar la huella y el desempeño de -memoria. Es un porcentaje que ajusta el comportamiento de la -administración de memoria. Con valores más altos, el programa usa más -memoria; con valores más bajos, usa más tiempo de CPU. El valor -predeterminado es @code{70}. - -@end table - - -@node Error messages -@section Error messages - -@cindex error, mensajes de -@cindex mensajes de error - -Pueden aparecer distintos mensajes de error al compilar un archivo: - -@table @emph - -@item Advertencia -@cindex advertencia -Algo tiene un aspecto sospechoso. Si estamos pidiendo algo fuera de -lo común, entenderemos el mensaje y podremos ignorarlo. Sin embargo, -las advertencias suelen indicar que algo va mal con el archivo de -entrada. - -@item Error -@cindex error -Algo va claramente mal. El paso actual de procesamiento (análisis, -interpretación o formateo visual) se dará por terminado, pero el -siguiente paso se saltará. - -@item Error fatal -@cindex error fatal -@cindex fatal, error -Algo va claramente mal, y LilyPond no puede seguir. Rara vez sucede -esto. La causa más frecuente son las tipografías mal instaladas. - -@item Error de Scheme -@cindex traza de Scheme -@cindex llamadas, traza de -@cindex Scheme, error de -@cindex error de Scheme -Los errores que ocurren al ejecutar código de Schheme se interceptan -por parte del intérprete de Scheme. Si se está ejecutando con las -opciones @code{-V} o @code{--verbose} (prolijo) entonces se imprime -una traza de llamadas de la función ofensiva. - -@item Error de programación -@cindex error de programación -@cindex programación, error de -Ha habido algún tipo de inconsistencia interna. Estos mensajes de -error están orientados a ayudar a los programadores y a los -depuradores. Normalmente se pueden ignorar. En ocasiones aparecen en -cantidades tan grandes que pueden entorpecer la visión de otros -mensajes de salida. - -@item Abortado (volcado de core) -Esto señala un error de programación serio que ha causado la -interrupción abrupta del programa. Estos errores se consideran -críticos. Si se topa con uno, envíe un informe de fallo. -@end table - -@cindex error, formato de los mensajes de - -Se los errores y advertencias se pueden ligar a un punto del archivo -de entrada, los mensajes tienen la forma siguiente: - -@example -@var{archivo}:@var{línea}:@var{columna}: @var{mensaje} -@var{línea de entrada problemática} -@end example - -Se inserta un salto de línea en la línea problemática para indicar la -columna en que se encontró el error. Por ejemplo, - -@example -prueba.ly:2:19: error: no es una duración: 5 - @{ c'4 e' - 5 g' @} -@end example - -Estas posiciones son la mejor suposición de LilyPond sobre dónde se ha -producido el mensaje de error, pero (por su propia naturaleza) las -advertencias y errores se producen cuando ocurre algo inesperado. Si -no ve un error en la línea que se indica del archivo de entrada, trate -de comprobar una o dos líneas por encima de la posición indicada. - - -@node Updating files with convert-ly -@section Updating files with @command{convert-ly} - -@cindex actualización de un archivo de LilyPond -@cindex version -@cindex versión de los archivos -@cindex convert-ly - -La sintaxis del lenguaje de entrada de LilyPond se modifica de forma -habitual para simplificarla o mejorarla de distintas maneras. Como -efecto secundario, el intérprete de LilyPond a menudo ya no es -compatible con los archivos de entrada antiguos. Para poner remedio a -esto se puede utilizar el programa @command{convert-ly} para manejar -casi todos los cambios de sintaxis entre versiones de LilyPond. - -Utiliza los enunciados @code{\version} de los archivos de entrada para -detectar el número de versión antiguo. En casi todos los casos, para -actualizar el archivo de entrada basta con ejecutar - -@example -convert-ly -e miarchivo.ly -@end example - -@noindent -Los usuarios de MacOS@tie{}X pueden ejecutar esta instrucción bajo el -menú @code{Compilar > Actualizar sintaxis}. - -Si no hay cambios en miarchivo.ly y se crea el archivo llamado -miarchivo.ly.NEW, entonces miarchivo.ly ya está actualizado. - -@menu -* Command line options for convert-ly:: -* Problems with convert-ly:: -@end menu - -@node Command line options for convert-ly -@subsection Command line options for @command{convert-ly} - -@command{convert-ly} convierte siempre al últimmo cambio de sintaxis -que puede manejar. Eesto supone que el número de @code{\version} que -aparece en el archivo convertido suele ser más bajo que la versión del -propio programa @command{convert-ly}. - -Para actualizar fragmentos de LilyPond en archivos de texinfo, use - -@example -convert-ly --from=... --to=... --no-version *.itely -@end example - -Para ver los cambios en la sintaxis de LilyPond entre dos versiones, -use - -@example -convert-ly --from=... --to=... -s -@end example - -Para actualizar muchos archivos de una vez, combine @code{convert-ly} -con las instrucciones estándar de UNIX. Este ejemplo actualiza todos -los archivos @code{.ly} del directorio actual: - -@example -for f in *.ly; do convert-ly -e $f; done; -@end example - -En general, el programa se invoca de la manera siguiente: - -@example -convert-ly [@var{opción}]@dots{} @var{archivo}@dots{} -@end example - - -Se pueden dar las siguientes opciones: - -@table @code -@item -e,--edit -Hace una edición en línea del archivo de entrada. Sobreescribe a -@code{--output}. - -@item -f,--from=@var{versión_de_origen} -Establece la versión desde la que convertir. Si no aparece esta -opción, @command{convert-ly} tratará de adivinarla, basándose en el -enunciado @code{\version} del archivo. - -@item -n,--no-version -Normalmente @command{convert-ly} añade un indicador @code{\version} a -la salida. La especificación de esta opción lo suprime. - -@item -s, --show-rules -Mostrar todas las conversiones conocidas y salir. - -@item --to=@var{versión_final} -Fijar la versión de destino de la conversión. De forma predeterminada -se convierte a la última versión disponible. - -@item -h, --help -Imprimir la ayuda de la utilización. -@end table - - -@node Problems with convert-ly -@subsection Problems with @code{convert-ly} - -No se manejan todos los cambios en el lenguaje. Sólo se puede -especificar una opción de salida. La actualización automática de -Scheme y los interfaces Scheme de LilyPond es bastante improbable; -prepárese para trucar el código de Scheme a mano. - -@verbatim -Hay algunas cosas que convert-ly no puede manejar. He aquí una lista -de aquellas limitaciones que han dado lugar a protestas de la -comunidad. - -Se ha escogido esta estructura de informe de fallo porque convert-ly -tiene una estructura que no permite implementar de forma progresiva -todos los cambios necesarios. Así pues esto es sólo una lista de -deseos, y se incluye aquí como referencia. - -1.6->2.0: - No siempre convierte el bajo cifrado correctamente, específicamente cosas como {< ->}. El comentario de Mats sobre cómo solventar el problema: - Para poder ejecutar convert-ly - sobre él, primero sustituí todas las apariciones de '{<' a algo mudo como '{#' - y de forma similar sustituí '>}' con '&}'. Después de la conversión, pude - volver a cambiarlos de '{ #' a '{ <' y de '& }' a '> }'. - No convierte todos los marcados de texto correctamente. En sintaxis antigua, - se podían agrupar varios marcados entre paréntesis, p.ej. - -#'((bold italic) "cadena") - Esto se convierte incorrectamente en - -\markup{{\bold italic} "cadena"} - en vez del correcto - -\markup{\bold \italic "cadena"} -2.0->2.2: - No maneja \partcombine - No hace \addlyrics => \lyricsto, esto rompe algunas partituras con varias estrofas. -2.0->2.4: - \magnify no se cambia por \fontsize. - - \magnify #m => \fontsize #f, donde f = 6ln(m)/ln(2) - remove-tag no se cambia. - - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . - first-page-number no se cambia. - - first-page-number no => print-first-page-number = ##f - Los saltos de línea en las cadenas de cabecera no se convierten. - - \\\\ como salto de línea en las cadenas de \header => \markup \center-align < - "Primera línea" "Segunda línea" > - Los terminadores de crescendo y decrescendo no se convierten. - - \rced => \! - - \rc => \! -2.2->2.4: - \turnOff (usado en \set Staff.VoltaBracket = \turnOff) no se convierte -adecuadamente. -2.4.2->2.5.9 - \markup{ \center-align <{ ... }> } se tendría que convertir en: - \markup{ \center-align {\line { ... }} } - pero ahora, falta el \line. -2.4->2.6 - Los caracteres especiales de LaTeX como $~$ en el texto no se convierten a UTF8. -2.8 - \score{} ahora debe empezar con una expresión musical. Cualquier otra cosa - (en particular, \header{}) debe ir después de la música. -@end verbatim - - -@node Reporting bugs -@section Reporting bugs - -@cindex bugs (fallos) -@cindex fallos (bugs) -@cindex informes de fallo - -Si tiene una entrada que produce una interrupción abrupta o una salida -errónea, entonces eso es un bug (fallo). Hay una lista de los fallos -actuales en nuestro rastreador de fallos de Google Code: - -@uref{http://code.google.com/p/lilypond/issues/list} - -Si descubre un error que no está en la lista, le rogramos que envíe un -informe del fallo siguiendo las instrucciones que aparecen en - -@uref{http://lilypond.org/web/devel/participating/bugs} - -Le rogamos, asimismo, que para los informes prepare y envíe ejemplos -mínimos de los fallos. No tenemos los recursos para investigar -informes que no sean lo más pequeños posible. diff --git a/Documentation/es/user/scheme-tutorial.itely b/Documentation/es/user/scheme-tutorial.itely deleted file mode 100644 index 90f0fa4f53..0000000000 --- a/Documentation/es/user/scheme-tutorial.itely +++ /dev/null @@ -1,295 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Scheme tutorial -@appendix Scheme tutorial - -@funindex # -@cindex Scheme -@cindex GUILE -@cindex Scheme, código en línea -@cindex acceder a Scheme -@cindex evaluar Scheme -@cindex LISP - -LilyPond utiliza el lenguaje de programación Scheme, tanto como parte -de la sintaxis del código de entrada, como para servir de mecanismo -interno que une los módulos del programa entre sí. Esta sección es -una panorámica muy breve sobre cómo introducir datos en Scheme. Si -quiere saber más sobre Scheme, consulte -@uref{http://@/www@/.schemers@/.org}. - -Lo más básico de un lenguaje son los datos: números, cadenas de -caracteres, listas, etc. He aquí una lista de los tipos de datos que -son de relevancia respecto de la entrada de LilyPond. - -@table @asis -@item Booleanos -Los valores Booleanos son Verdadero y Falso. Verdadero en Scheme es @code{#t} -y Falso es @code{#f}. -@funindex ##t -@funindex ##f - -@item Números -Los números se escriben de la forma normal, @code{1} es el número -(entero) uno, mientras que @code{-1.5} es un número en coma flotante -(un número no entero). - -@item Cadenas -Las cadenas se encierran entre comillas: - -@example -"esto es una cadena" -@end example - -Las cadenas pueden abarcar varias líneas: - -@example -"esto -es -una cadena" -@end example - -También se pueden añadir comillas y saltos de línea con las llamadas -secuencias de escape. La cadena @code{a dijo "b"} se escribe como - -@example -"a dijo \"b\"" -@end example - -Los saltos de línea t las barras invertidas se escapan mediante -@code{\n} y @code{\\} respectivamente. -@end table - - -En un archivo de música, los fragmentos de código de Scheme se -escriben con el signo de almohadilla @code{#}. Así, los ejemplos -anteriores traducidos a LilyPond son: - -@example -##t ##f -#1 #-1.5 -#"esto es una cadena" -#"esto -es -una cadena" -@end example - -Durante el resto de esta sección, supondremos que los datos se -introducen en un archivo de música, por lo que añadiremos almohadillas -@code{#} en todas partes. - -Scheme se puede usar para hacer cálculos. Utiliza sintaxis -@emph{prefija}. Sumar 1 y@tie{}2 se escribe como @code{(+ 1 2)} y no -como el tradicional @math{1+2}. - -@lisp -#(+ 1 2) - @result{} #3 -@end lisp - -La flecha @result{} muestra que el resultado de evaluar @code{(+ 1 2)} -es@tie{}@code{3}. Los cálculos se pueden anidar; el resultado de una -función se puede usar para otro cálculo. - -@lisp -#(+ 1 (* 3 4)) - @result{} #(+ 1 12) - @result{} #13 -@end lisp - -Estos cálculos son ejemplos de evaluaciones; una expresión como -@code{(* 3 4)} se sustituye por su valor @code{12}. Algo similar -ocurre con las variables. Después de haber definido una variable - -@example -doce = #12 -@end example - -@noindent -las variables se pueden usar también dentro de las expresiones, aquí - -@example -veintiCuatro = #(* 2 doce) -@end example - -@noindent -el número 24 se almacena dentro de la variable @code{veintiCuatro}. -La misma asignación se puede hacer también completamente en Scheme, - -@example -#(define veintiCuatro (* 2 doce)) -@end example - -El @emph{nombre} de una variable también es una expresión, similar a -un número o una cadena. Se introduce como - -@example -#'veintiCuatro -@end example - -@funindex #'symbol -@cindex comillas en Scheme - -El apóstrofo @code{'} evita que el intérprete de Scheme sustituya -@code{veintiCuatro} por @code{24}. En vez de esto, obtenemos el -nombre @code{veintiCuatro}. - -Esta sintaxis se usará con mucha frecuencia, pues muchos de los trucos -de presentación consisten en asignar valores (de Scheme) a variables -internas, por ejemplo - -@example -\override Stem #'thickness = #2.6 -@end example - -Esta instrucción ajusta el aspecto de las plicas. El valor @code{2.6} -se pone dentro de la variable @code{thickness} de un objeto -@code{Stem}. @code{thickness} se mide a partir del grosor de las -líneas del pentagrama, y así estas plicas serán @code{2.6} veces el -grosor de las líneas del pentagrama. Esto hace que las plicas sean -casi el doble de gruesas de lo normal. Para distinguir entre las -variables que se definen en los archivos de entrada (como -@code{veintiCuatro} en el ejemplo anterior) y las variables de los -objetos internos, llamaremos a las últimas @q{propiedades} y a las -primeras @q{variables.} Así, el objeto plica tiene una propiedad -@code{thickness} (grosor), mientras que @code{veintiCuatro} es una -variable. - -@cindex propiedades frente a variables -@cindex variables frente a propiedades - -Los desplazamientos bidimensionales (coordenadas X e Y) así como los -tamaños de los objetos (intervalos con un punto izquierdo y otro -derecho) se introducen como @code{parejas}. Una pareja@footnote{En la -terminología de Scheme, la pareja se llama @code{cons}, y sus dos -elementos se llaman @code{car} y @code{cdr} respectivamente.} se -introduce como @code{(primero . segundo)} y, como los símbolos, se deben -preceder de un apóstrofo: - -@example -\override TextScript #'extra-offset = #'(1 . 2) -@end example - -Esto asigna la pareja (1, 2) a la propiedad @code{extra-offset} del -objeto TextScript. Estos números se miden en espacios de pentagrama, -y así esta instrucción mueve el objeto un espacio de pentagrama a la -derecha, y dos espacios hacia arriba. - -Los dos elementos de una pareja pueden ser valores arbitrarios, por -ejemplo - -@example -#'(1 . 2) -#'(#t . #f) -#'("bla-bla" . 3.14159265) -@end example - -Una lista se escribe encerrando sus elementos entre paréntesis, y -añadiendo un apóstrofo. Por ejemplo, - -@example -#'(1 2 3) -#'(1 2 "cadena" #f) -@end example - -Todo el tiempo hemos estado usando listas. Un cálculo, como @code{(+ -1 2)} también es una lista (que contiene el símbolo @code{+} y los -números 1 y@tie{}2). Normalmente, las listas se interpretan como -cálculos, y el intérprete de Scheme sustituye el resultado del -cálculo. Para escribir una lista, detenemos la evaluación. Esto se -hace precediendo la lista por un apóstrofo @code{'}. Así, para los -cálculos no usamos ningún apóstrofo. - -Dentro de una lista o pareja precedida de apóstrofo, no hay necesidad -de escribir ningún apóstrofo más. Lo siguiente es una pareja de -símbolos, una lista de símbolos y una lista de listas respectivamente: - -@example -#'(stem . head) -#'(staff clef key-signature) -#'((1) (2)) -@end example - - -@menu -* Tweaking with Scheme:: -@end menu - -@node Tweaking with Scheme -@appendixsec Tweaking with Scheme - -Hemos visto cómo la salida de LilyPond se puede modificar -profundamente usando instrucciones como @code{\override TextScript -#'extra-offset = ( 1 . -1)}. Pero tenemos incluso mucho más poder si -utilizamos Scheme. Para ver una explicación completa de esto, -consulte el @ref{Scheme tutorial}, y @ruser{Interfaces for -programmers}. - -Podemos usar Scheme simplemente para sobreescribir instrucciones con -@code{\override}, - -@c This isn't a valid example with skylining -@c It works fine without padText -td - -@ignore -@lilypond[quote,verbatim,ragged-right] -padText = #(define-music-function (parser location padding) (number?) -#{ - \once \override TextScript #'padding = #$padding -#}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond -@end ignore - -Lo podemos usar para crear instrucciones nuevas: - -@c Check this is a valid example with skylining -@c It is - 'padding still works - -@lilypond[quote,verbatim,ragged-right] -tempoMark = #(define-music-function (parser location padding marktext) - (number? string?) -#{ - \once \override Score . RehearsalMark #'padding = $padding - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $marktext } -#}) - -\relative c'' { - c2 e - \tempoMark #3.0 #"Allegro" - g c -} -@end lilypond - -Incluso se le pueden pasar expresiones musicales: - -@lilypond[quote,verbatim,ragged-right] -pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) -#{ - $x e8 a b $y b a e -#}) - -\relative c''{ - \pattern c8 c8\f - \pattern {d16 dis} { ais16-> b\p } -} -@end lilypond - diff --git a/Documentation/es/user/setup.itely b/Documentation/es/user/setup.itely deleted file mode 100644 index caebbe1612..0000000000 --- a/Documentation/es/user/setup.itely +++ /dev/null @@ -1,340 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Setup -@chapter Setup - -Este capítulo trata sobre varias opciones de configuración, posteriores a la instalación, para -LilyPond y otros programas. Este capítulo se puede tratar tranquilamente como una referencia: -lea solamente las secciones que le interesen. - -@menu -* Setup for specific Operating Systems:: -* Text editor support:: -* Point and click:: -@end menu - - -@node Setup for specific Operating Systems -@section Setup for specific Operating Systems - -Esta sección explica cómo realizar puestas a punto adicionales para sistemas operativos -específicos. - -@menu -* Setup for MacOS X:: -@end menu - -@node Setup for MacOS X -@subsection Setup for MacOS X - -@subsubheading Using Python scripts on MacOS 10.3 or 10.4 - -Los archivos binarios de LilyPond para MacOS X no incluyen Python, -pero se necesita Python 2.4 o posterior por parte de -@command{convert-ly}. Por ello, si usamos MacOS 10.3 o 10.4, debemos -instalar una versión de Python más reciente desde -@uref{http://python.org/download/}, y luego editar la primera línea de -@command{convert-ly} y @command{lilypond-book} como sigue: si el -binario de Python que hemos instalado está en nuestro @var{PATH}, la -primera línea debe ser - -@example -#!/usr/bin/env python -@end example - -@noindent -en caso contrario, debe ser - -@example -#!@var{/path/to/newly_installed/python} -@end example - - -@subsubheading MacOS X on the command line - -Los «scripts» (guiones como @command{lilypond-book}, -@command{convert-ly}, @command{abc2ly} e incluso el propio -@command{lilypond}) van incluidos dentro del archivo de aplicación -.app de MacOS X. Se pueden ejecutar a partir de la línea de órdenes -invocándolos directamente, p.ej. - -@example -@var{ruta/hacia}/LilyPond.app/Contents/Resources/bin/lilypond -@end example - -@noindent -Lo mismo vale para otros scripts de ese directorio, incluidos los -guiones @command{lilypond-book}, @command{convert-ly}, -@command{abc2ly}, etc. - -Como alternativa, puede crear scripts que añadan la ruta -automáticamente. Cree un directorio para guardar estos guiones, - -@example -mkdir -p ~/bin -cd ~/bin -@end example - -Cree un archivo de nombre @code{lilypond} que contenga - -@example -exec @var{ruta/hacia}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" -@end example - -Cree archivos similares @code{lilypond-book}, @code{convert-ly} y cualesquiera -otros programas de apoyo que vaya a utilizar (@code{abc2ly}, @code{midi2ly}, -etc). Sencillamente, sustituya el fragmento @code{bin/lilypond} por -@code{bin/convert-ly} (u otro nombre de programa) en el archivo anterior. - -Haga ejecutable al archivo, - -@example -chmod u+x lilypond -@end example - -Y ahora añada este directorio a su ruta de ejecución. Modifique (o cree) -un archivo llamado @code{.profile} en su directorio personal que contenga - -@example -export PATH=$PATH:~/bin -@end example - -@noindent -Este archivo debe acabar con una línea en blanco. - -Fíjese en que @var{ruta/hacia} será por lo general @code{/Applications/}. - - -@node Text editor support -@section Text editor support - -@cindex editores -@cindex vim -@cindex emacs -@cindex modos del editor -@cindex sintaxis, resaltado de -@cindex colores, sintaxis - -Existe apoyo por parte de varios editores de texto para LilyPond. - -@menu -* Emacs mode:: -* Vim mode:: -* jEdit:: -* TexShop:: -* TextMate:: -* LilyKDE:: -@end menu - -@node Emacs mode -@subsection Emacs mode - -Emacs tiene un @file{lilypond-mode}, que proporciona autocompleción de -teclado, sangrado, compensación de paréntesis específica de LilyPond -y resaltado de sintaxis con colores, útiles combinaciones de teclas para compilar y leer los manuales de LilyPond -utilizando Info. Si el @file{lilypond-mode} no está instalado en su sistema, -siga leyendo. - -Está incluido un modo de Emacs para escribir música y ejecutar LilyPond, en -el archivo del código fuente dentro del directorio @file{elisp}. Haga @command{make -install} para instalarlo dentro de @var{elispdir}. El archivo @file{lilypond-init.el} -se debe situar en @var{load-path}@file{/site-start.d/} o añadirse a su -@file{~/.emacs} o @file{~/.emacs.el}. - -Como usuario, puede querer añadir su ruta a las fuentes (p.ej. @file{~/site-lisp/}) a su -@var{load-path} añadiendo la siguiente línea (modificada) a su -@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 Vim mode -@subsection Vim mode - -Para @uref{http://@/www@/.vim@/.org,VIM} se proporciona un @file{vimrc}, -junto con herramientas de resaltado de sintaxis con colores. Se encuentra incluido un modo de Vim para escribir música y -ejecutar LilyPond, dentro del archivo de código fuente, en el directorio -@code{$VIM}. - -El tipo de archivo de LilyPond se detecta si el archivo -@file{~/.vim/filetype.vim} tiene el siguiente contenido - -@example -if exists("did_load_filetypes") - finish -endif -augroup filetypedetect - au! BufNewFile,BufRead *.ly,*.ily setf lilypond -augroup END -@end example - -Incluya esta ruta añadiendo la siguiente línea a su -@file{~/.vimrc} - -@example -set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ -@end example - -@noindent -donde $@{LILYPOND_VERSION@} es su versión de lilypond. Si Lilypond no se instaló -en su momento en @file{/usr/local/}, cambie esta ruta de la forma correspondiente. - - -@node jEdit -@subsection jEdit - -Creado como un «plugin» o añadido para el editor de texto @uref{http://@/www@/.jedit@/.org@/,jEdit}, -LilyPondTool es la herramienta basada en texto más rica en posibilidades para -editar partituras de LilyPond. Sus posibilidades incluyen un Asistente de Documentos con apoyo para las -letras de las canciones para preparar documentos más fácilmente, y un visor de PDF empotrado con apoyo -avanzado para el uso del cursor del ratón. Para ver capturas de pantalla, demostraciones e -instrucciones de instalación, visite -@uref{http://lilypondtool@/.organum@/.hu} - - -@node TexShop -@subsection TexShop - -El editor @uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop} -para Mac OS X se puede extender para la ejecución de LilyPond, lilypond-book y -convert-ly desde dentro del editor, usando las extensiones disponibles en -@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. - - -@node TextMate -@subsection TextMate - -Hay un tinglado de LilyPond para TextMate. Se puede instalar ejecutando - -@example -mkdir -p /Library/Application\ Support/TextMate/Bundles -cd /Library/Application\ Support/TextMate/Bundles -svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ -@end example - - -@node LilyKDE -@subsection LilyKDE - -@uref{http://lilykde.googlecode.com/,LilyKDE} es un plugin o -complemento para el editor de texto de KDE, -@uref{http://kate-editor.org/,Kate}. Tiene un potente Asistente de -Partitura para preparar rápidamente un documento de LilyPond, y un -visor de PDF incluido. - -LilyKDE puede utilizar -@uref{http://www.volny.cz/smilauer/rumor/,Rumor}, de manera que se -puede introducir la música tocando sobre un teclado MIDI. - -Otras posibilidades son el enguionado de la letra y la ejecución de -LilyPond sobre varios archivos de una sola vez desde dentro del -administrador de archivos de KDE. - - -@node Point and click -@section Point and click -@cindex apuntar y pulsar - - -«Point and click» (apuntar y pulsar con el ratón) le da la posibilidad de localizar notas del código de entrada pulsando sobre ellas -dentro del visor de PDF. Ello facilita encontrar los fragmentos de la entrada que producen -algún tipo de error en la partitura. - -Cuando esta funcionalidad está activada, LilyPond añade hiper-enlaces al archivo -PDF. Estos hiper-enlaces se envían al navegador de web, que a su vez abre un -editor de texto con el cursor situado en el lugar correcto. - -Para conseguir que esta cadena funcione, tendrá que configurar el visor de PDF de forma que -siga los hiper-enlaces usando el guión @file{lilypond-invoke-editor} proporcionado -con LilyPond. - -Para Xpdf sobre Unix, lo siguiente debe estar presente en -@file{xpdfrc}@footnote{En Unix, este archivo se encuentra o bien en -@file{/etc/xpdfrc} o como @file{.xpdfrc} en su directorio personal.} - -@example -urlCommand "lilypond-invoke-editor %s" -@end example - -El programa @file{lilypond-invoke-editor} es un pequeño programa de -apoyo. Invoca un editor para las URIs especiales de @code{textedit}, -y lanza un navegador de web para el resto. Comprueba la variable de entorno -@code{EDITOR} en busca de los siguientes patrones, - -@table @code -@item emacs - esto invoca a -@example -emacsclient --no-wait +@var{línea}:@var{columna} @var{archivo} -@end example -@item vim - esto invoca a -@example -gvim --remote +:@var{línea}:norm@var{carácter} @var{archivo} -@end example - -@item nedit -esto invoca a -@example - nc -noask +@var{línea} @var{archivo}' -@end example -@end table - -La variable de entorno @code{LYEDITOR} se utiliza para sobreescribir -esto. Contiene la instrucción de línea de órdenes para abrir el -editor, donde @code{%(archivo)s}, @code{%(columna)s} y -@code{%(línea)s} se sustituyen por el archivo, columna y línea -respectivamente. El ajuste - -@example -emacsclient --no-wait +%(línea)s:%(columna)s %(archivo)s -@end example - -@noindent -para @code{LYEDITOR} equivale a la invocación estándar de -emacsclient. - - -@cindex archivo de salida, tamaño del - -Los enlaces de apuntar y pulsar aumentan significativamente el tamaño de los archivos de salida. Para -reducir el tamaño de los archivos PDF y PS, la posibilidad de apuntar y pulsar se puede desactivar -escribiendo - -@example -\pointAndClickOff -@end example - -@noindent -dentro de un archivo @file{.ly}. Se puede activar explícitamente la -posibilidad de apuntar y pulsar con - -@example -\pointAndClickOn -@end example - -De forma alternativa, puede desactivar la posibilidad de apuntar y -pulsar con una opción de la línea de órdenes: - -@example -lilypond -dno-point-and-click archivo.ly -@end example - -@warning{Recuerde desactivar siempre la posibilidad Apuntar y pulsar -en cualquier archivo de LilyPond que vaya a ser distribuido, para -evitar incluir información de rutas de archivo relativas a su equipo -dentro del archivo .pdf, lo que puede plantear un problema de -seguridad.} - diff --git a/Documentation/es/user/simultaneous.itely b/Documentation/es/user/simultaneous.itely deleted file mode 100644 index 00f4024bbc..0000000000 --- a/Documentation/es/user/simultaneous.itely +++ /dev/null @@ -1,855 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translation status: post-GDP - -@node Simultaneous notes -@section Simultaneous notes - -@lilypondfile[quote]{simultaneous-headword.ly} - -La polifonía en música hace referencia a tener más de una voz en una -pieza cualquiera de música. En LilyPond la polifonía hace referencia -a tener más de una voz en el mismo pentagrama. - -@menu -* Single voice:: -* Multiple voices:: -@end menu - -@node Single voice -@subsection Single voice - -Esta sección trata de la notas simultáneas dentro de la misma voz. - -@menu -* Chorded notes:: -* Simultaneous expressions:: -* Clusters:: -@end menu - -@node Chorded notes -@unnumberedsubsubsec Chorded notes - -@cindex acordes -@cindex paréntesis en ángulo -@cindex ángulo, paréntesis en -@cindex relativa, altura en acordes - -@funindex < -@funindex > -@funindex <...> - -Un acorde se forma encerrando un conjunto de notas entre @code{<} y -@code{>}. Un acorde puede ir seguido de una duración o un conjunto de -articulaciones, como si fueran simples notas. - -@lilypond[verbatim,quote,relative=1] -2 4-> -. -@end lilypond - -Se puede usar el modo relativo para la altura de las notas de los -acordes. La octava de cada nota se determina utilizando como -referencia la nota precedente, excepto en el caso de la primera nota -de un acorde: la referencia para la primera nota es la @emph{primera} -nota del acorde anterior. - -Para ver más información sobre los acordes, consulte @ref{Chord -notation}. - - -@seealso -Glosario musical: -@rglos{chord}. - -Manual de aprendizaje: -@rlearning{Combining notes into chords}. - -Referencia de la notación: -@ref{Chord notation}. - -Fragmentos de código: -@rlsr{Simultaneous notes}. - - -@node Simultaneous expressions -@unnumberedsubsubsec Simultaneous expressions - -Una o más expresiones musicales encerradas entre ángulos dobles se -entienden como simultáneas. Si la primera expresión comienza con una -sola nota o si toda la expresión simultánea aparece explícitamente -dentro de una sola voz, la expresión completa se sitúa sobre un solo -pentagrama; en caso contrario los elementos de la expresión simultánea -se sitúan en pentagramas distintos. - -Los ejemplos siguientes muestran expresiones simultáneas sobre un solo -pentagrama: - -@lilypond[quote,verbatim,relative=2] -\new Voice { % explicit single voice - << {a4 b g2} {d4 g c,2} >> -} -@end lilypond - -@lilypond[quote,verbatim,relative=2] -% single first note -a << {a4 b g} {d4 g c,} >> -@end lilypond - -Esto puede ser de utilidad si las secciones siimultáneas tienen -idénticas duraciones, pero se producirán errores si se intentan poner -notas de distinta duración sobre la misma plica. - -El ejemplo siguiente muestra cómo las expresiones simultáneas pueden -generar varios pentagramas de forma implícita: - -@lilypond[quote,verbatim,relative=2] -% no single first note -<< {a4 b g2} {d4 g2 c,4} >> -@end lilypond - -Aquí no hay problema en tener distintas duraciones. - - -@node Clusters -@unnumberedsubsubsec Clusters - -@cindex cluster -@cindex racimo (cluster) - -@funindex \makeClusters -@funindex makeClusters - - -Un «cluster» o racimo indica que se deben tocar simultáneamente un -conjunto de notas consecutivas. Se escriben aplicando la función -@code{\makeClusters} a una secuencia de acordes, p.ej.: - -@lilypond[quote,relative=2,verbatim] -\makeClusters { 2 } -@end lilypond - -Se pueden mezclar en el mismo pentagrama notas normales y clusters, -incluso al mismo tiempo. En tal caso, no se hace ningún intento de -evitar automáticamente las colisiones entre clusters y notas normales. - - -@seealso -Glosario musical: -@rglos{cluster}. - -Fragmentos de código: -@rlsr{Simultaneous notes}. - -Referencia de funcionamiento interno: -@rinternals{ClusterSpanner}, -@rinternals{ClusterSpannerBeacon}, -@rinternals{Cluster_spanner_engraver}. - - -@knownissues - -Los clusters sólo tienen un buen aspecto cuando abarcan un mínimo de -dos acordes. En caso contrario aparecerán excesivamente estrechos. - -Los clusters no llevan plica y por sí mismos no pueden indicar las -duraciones, pero la longitud del cluster que se imprime viene -determinada por la duración de los acordes que lo definen. Los -racimos separados necesitan silencios de separación entre ellos. - -Los clusters no producen ninguna salida MIDI. - -@node Multiple voices -@subsection Multiple voices - -Esta sección trata las notas simultáneas en varias voces o varios -pentagramas. - -@menu -* Single-staff polyphony:: -* Voice styles:: -* Collision resolution:: -* Automatic part combining:: -* Writing music in parallel:: -@end menu - -@node Single-staff polyphony -@unnumberedsubsubsec Single-staff polyphony - -@cindex pentagrama único, polifonía de -@cindex polifonía en un solo pentagrama -@cindex voz -@cindex letra asignada a una voz - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceOne ... \voiceFour -@funindex Voice -@funindex \oneVoice -@funindex oneVoice - -@strong{@i{Instanciar las voces explícitamente}} - -La estructura básica necesaria para obtener varias voces -independientes en un mismo pentagrama se ilustra en el ejemplo -siguiente: - -@lilypond[quote,relative=3,verbatim] -\new Staff << - \new Voice = "first" - { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } - \new Voice= "second" - { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -Aquí se crean explícitamente instancias de voces, cada una de las -cuales recibe un nombre. Las instrucciones @code{\voiceOne} -... @code{\voiceFour} (voz uno hasta voz cuatro) preparan las voces de -manera que la primera y segunda voces llevan las plicas hacia arriba, -las voces segunda y cuarta llevan las plicas hacia abajo, las cabezas -de las notas en las voces tercera y cuarta se desplazan -horizontalmente, y los silencios de las voces respectivas se desplazan -también automáticamente para evitar las colisiones. La instrucción -@code{\oneVoice} (una voz) devuelve todos los ajustes de las voces al -estado neutro predeterminado. - -@strong{@i{Pasajes polifónicos temporales}} - -Se puede crear un pasaje polifónico temporal con la construcción -siguiente: - -@example -<< @{ \voiceOne ... @} - \new Voice @{ \voiceTwo ... @} ->> \oneVoice -@end example - -Aquí, la primera expresión dentro de un pasaje polifónico temporal se -coloca en el contexto @code{Voice} que estaba en uso inmediatamente -antes del pasaje polifónico, y ese mismo contexto @code{Voice} -continua después de la sección temporal. Otras expresiones dentro de -los ángulos se asignan a distintas voces temporales. Esto permite -asignar la letra de forma continua a una voz antes, durante y después -de la sección polifónica: - -@lilypond[quote, verbatim, relative=2] -<< - \new Voice = "melody" { - a4 - << - { - \voiceOne - g f - } - \new Voice { - \voiceTwo - d2 - } - >> - \oneVoice - e4 - } - \new Lyrics \lyricsto "melody" { - This is my song. - } ->> -@end lilypond - -Aquí, las instrucciones @code{\voiceOne} y @code{\voiceTwo} son -necesarias para definir los ajustes de cada voz. - -@strong{@i{La construcción de la doble barra invertida}} - -La construcción @code{<< @{...@} \\ @{...@} >>}, en que las dos -expresiones (o más) están separadas por doble barra invertida, se -comporta de forma distinta a la construcción similar sin las dobles -barras: @emph{todas} las expresiones dentro de esta construcción se -asignan a contextos @code{Voice} nuevos. Estos contextos @code{Voice} -nuevos se crean implícitamente y reciben los nombres fijos @code{"1"}, -@code{"2"}, etc. - -El primer ejemplo podría haberse tipografiado de la manera siguiente: - -@lilypond[quote,relative=3,verbatim] -<< - { r8 r16 g e8. f16 g8[ c,] f e16 d } - \\ - { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -Esta sintaxis se puede usar siempre que no nos importe que se creen -nuevas voces temporales que después serán descartadas. Estas voces -creadas implícitamente reciben ajustes equivalentes al efecto de las -instrucciones @code{\voiceOne} ... @code{\voiceFour}, en el orden en -que aparecen en el código. - -En el siguiente ejemplo, la voz intermedia lleva las plicas hacia -arriba, de manera que la introducimos en tercer lugar para que pase a -ser la voz tres, que tiene las plicas hacia arriba tal y como -queremos. Se usan silencios de separación para evitar la aparición de -silencios duplicados. - -@lilypond[quote,relative=3,verbatim] -<< - { r8 g g g g f16 ees f8 d } - \\ - { ees,8 r ees r d r d r } - \\ - { d'8 s c s bes s a s } ->> -@end lilypond - -En todas las partituras excepto las más simples, se recomienda crear -contextos @code{Voice} explícitos como aparece explicado en -@rlearning{Contexts and engravers} y en @rlearning{Explicitly -instantiating voices}. - -@strong{@i{Duraciones idénticas}} - -En el caso especial en que queremos tipografiar fragmentos de música -que discurre en paralelo y con las mismas duraciones, se pueden -combinar en un solo contexto de voz, formando así acordes. Para -conseguirlo, las incorporamos dentro de una construcción de música -simultánea, dentro de una voz creada explícitamente: - -@lilypond[quote,relative=2,verbatim] -\new Voice << - { e4 f8 d e16 f g8 d4 } - { c4 d8 b c16 d e8 b4 } ->> -@end lilypond - -Este método conduce a barrados extraños y advertencias si los -fragmentos de música no tienen las mismas duraciones exactas. - - -@predefined -@code{\voiceOne}, -@code{\voiceTwo}, -@code{\voiceThree}, -@code{\voiceFour}, -@code{\oneVoice}. -@endpredefined - - -@seealso -Manual de aprendizaje: -@rlearning{Voices contain music}, -@rlearning{Explicitly instantiating voices}. - -Referencia de la notación: -@ref{Percussion staves}, -@ref{Invisible rests}. - -Fragmentos de código: -@rlsr{Simultaneous notes}. - - -@node Voice styles -@unnumberedsubsubsec Voice styles - -@cindex voice styles -@cindex styles, voice -@cindex coloring voices -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -Se pueden aplicar colores y formas distintos a las voces para permitir -identificarlas fácilmente: - -@lilypond[quote,relative=2,verbatim] -<< - { \voiceOneStyle d4 c2 b4 } - \\ - { \voiceTwoStyle e,2 e } - \\ - { \voiceThreeStyle b2. c4 } - \\ - { \voiceFourStyle g'2 g } ->> -@end lilypond - -Para recuperar la presentación normal se utiliza la instrucción -@code{\voiceNeutralstyle}. - - -@predefined -@code{\voiceOneStyle}, -@code{\voiceTwoStyle}, -@code{\voiceThreeStyle}, -@code{\voiceFourStyle}, -@code{\voiceNeutralStyle}. -@endpredefined - - -@seealso -Manual de aprendizaje: -@rlearning{I'm hearing Voices}, -@rlearning{Other sources of information}. - -Fragmentos de código: -@rlsr{Simultaneous notes}. - - -@node Collision resolution -@unnumberedsubsubsec Collision resolution - -@cindex mezclar notas -@cindex notas, colisiones de -@cindex colisiones -@cindex desplazar nota -@cindex varias voces -@cindex voces, varias -@cindex polifónica, música -@cindex desplazamiento de voces -@cindex desplazamiento, silencio automático de -@cindex desplazamiento de silencios, automático -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn -@funindex \shiftOff -@funindex shiftOff -@funindex \mergeDifferentlyDottedOn -@funindex mergeDifferentlyDottedOn -@funindex \mergeDifferentlyDottedOff -@funindex mergeDifferentlyDottedOff -@funindex \mergeDifferentlyHeadedOn -@funindex mergeDifferentlyHeadedOn -@funindex \mergeDifferentlyHeadedOff -@funindex mergeDifferentlyHeadedOff - - -Las cabezas de notas que están en diferentes voces y tienen la misma -altura, la misma forma de cabezaa, y dirección opuesta de la plica, se -combinan automáticamente, pero las que tienen cabezas distintas o la -misma dirección de la plica no se combinan. Los silencios que se -encuentran en el lado opuesto de una plica en otra voz se desplazan -verticalmente. - -@lilypond[quote,verbatim,relative=2] -<< - { - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Las cabezas de notas diferentes se pueden combinar, con la excepción -de blancas con negras: - -@lilypond[quote,verbatim,relative=2] -<< - { - \mergeDifferentlyHeadedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Se pueden combinar cabezas con puntillos diferentes: - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -La blanca y la corchea en el comienzo del segundo compás no están -correctamente combinadas porque @code{\mergeDifferentlyHeadedOn} no es -capaz de completar satisfactoriamente la combinación cuando se -encuentran tres o más notas alineadas en la misma columna, y en este -caso se obtiene una advertencia. Para conseguir que la combinación -funcione adecuadamente, se debe aplicar un @code{\shift} o -desplazamiento a la nota que no se debe combinar. Aquí, se aplica -@code{\shiftOn} para mover el sol agudo fuera de la columna, y -entonces @code{\mergeDifferentlyHeadedOn} hace su trabajo -correctamente. - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - \shiftOn - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } - ->> -@end lilypond - -Las instrucciones @code{\shiftOn}, @code{\shiftOnn} y -@code{\shiftOnnn} especifican el grado en que se deben desplazar los -acordes de la voz en curso. Las voces exteriores (normalmente: la voz -uno y la voz dos) tienen @code{\shiftOff} (desplazamiento -desactivado), mientras que las voces interiores (tres y cuatro) tienen -@code{\shiftOn} (desplazamiento activado). @code{\shiftOnn} y -@code{\shiftOnnn} definen niveles de desplazamiento más grandes. - -Sólo se combinan las notas si tienen la plica en direcciones opuestas -(por ejemplo, en las @code{Voice}s 1 y 2). - - -@predefined -@code{\mergeDifferentlyDottedOn}, -@code{\mergeDifferentlyDottedOff}, -@code{\mergeDifferentlyHeadedOn}, -@code{\mergeDifferentlyHeadedOff}. - -@code{\shiftOn}, -@code{\shiftOnn}, -@code{\shiftOnnn}, -@code{\shiftOff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{additional-voices-to-avoid-collisions.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{forcing-horizontal-shift-of-notes.ly} - - -@seealso -Glosario musical: -@rglos{polyphony}. - -Manual de aprendizaje: -@rlearning{Multiple notes at once}, -@rlearning{Voices contain music}, -@rlearning{Collisions of objects}. - -Fragmentos de código: -@rlsr{Simultaneous notes}. - -Referencia de funcionamiento interno: -@rinternals{NoteColumn}, -@rinternals{NoteCollision}, -@rinternals{RestCollision}. - - -@knownissues - -Cuando se emplea @code{\mergeDifferentlyHeadedOn} con una corchea (o -una nota más corta) con la plica hacia arriba, y una blanca con la -plica hacia abajo, la corchea recibe un desplazamiento ligeramente -incorrecto a causa de la anchura diferente del símbolo de la cabeza de -la blanca. - -@ignore -@c TODO investigate! Sometimes it works, sometimes not. --FV -Los requisitos para combinar con éxito cabezas de nota distintas que -tienen también distinto puntillo, no están claros. -@end ignore - -No están contemplados los acordes en que la misma nota se presenta con -diferentes alteraciones accidentales dentro del mismo. En este caso -se recomienda usar la transcripción enarmónica, o usar la notación -especial de racimos (véase @ref{Clusters}). - -@node Automatic part combining -@unnumberedsubsubsec Automatic part combining - -@cindex automática, combinación de partes -@cindex partes, combinación automática -@cindex partes, combinador de -@cindex a due, partes -@cindex solo, partes -@funindex \partcombine -@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. - -La sintaxis para la combinación 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. - -@lilypond[quote,verbatim] -instrumentOne = \relative c' { - 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 -} - -<< - \new Staff \instrumentOne - \new Staff \instrumentTwo - \new Staff \partcombine \instrumentOne \instrumentTwo ->> -@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 -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 -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 @q{Solo} y @q{Solo II}, -respectivamente. Las partes en unísono (@notation{a due}) se marcan -con el texto predeterminado @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: - -@example -\partcombine - \relative @dots{} @var{expresión_musical_1} - \relative @dots{} @var{expresión_musical_2} -@end example - -@noindent -Una sección @code{\relative} que se encuentra fuera de -@code{\partcombine} no tiene ningún efecto sobre las notas de -@var{expresión_musical_1} y @var{expresión_musical_2}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{combining-two-parts-on-the-same-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-partcombine-texts.ly} - - -@seealso -Glosario musical: -@rglos{a due}, -@rglos{part}. - -Referencia de la notación: -@ref{Writing parts}. - -Fragmentos de código: -@rlsr{Simultaneous notes}. - -Referencia de funcionamiento interno: -@rinternals{PartCombineMusic}, -@rinternals{Voice}. - - -@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. - -@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 Writing music in parallel -@unnumberedsubsubsec Writing music in parallel - -@cindex escribir música en paralelo -@cindex música intercalada -@cindex paralelo, música en -@funindex \parallelMusic -@funindex parallelMusic - -La música para varias partes se puede intercalar dentro del código de -entrada. La función @code{\parallelMusic} admite una lista que -contiene los nombres de las variables que se van a crear, y una -expresión musical. El contenido de los compases alternativos -extraídos de la expresión se convierten en el valor de las variables -respectivas, de manera que podemos utilizarlas más tarde para imprimir -la música. - -@warning{Es obligatorio utilizar comprobaciones de compás @code{|}, y -los compases deben tener la misma longitud.} - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | - r16 e'8.~ e'4 r16 e'8.~ e'4 | - c'2 c'2 | - - % Bar 2 - r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | - r16 d'8.~ d'4 r16 d'8.~ d'4 | - c'2 c'2 | - -} -\new StaffGroup << - \new Staff << \voiceA \\ \voiceB >> - \new Staff { \clef bass \voiceC } ->> -@end lilypond - -Se puede usar el modo relativo. Observe que la instrucción -@code{\relative} no se utiliza dentro del propio bloque -@code{\parallelMusic}. Las notas guardan relación con la nota -anterior en la misma voz, no con la nota anterior dentro del código de -entrada (dicho de otra manera, las notas relativas de @code{vozA} -ignoran a las notas que hay en @code{vozB}. - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g16 c e g, c e r8 g,16 c e g, c e | - r16 e8.~ e4 r16 e8.~ e4 | - c2 c | - - % Bar 2 - r8 a,16 d f a, d f r8 a,16 d f a, d f | - r16 d8.~ d4 r16 d8.~ d4 | - c2 c | - - } -\new StaffGroup << - \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> - \new Staff \relative c' { \clef bass \voiceC } ->> -@end lilypond - -Esto funciona aceptablemente bien para música de piano. El siguiente -ejemplo asigna cada cuatro compases consecutivos a cuatro variables: - -@lilypond[quote,verbatim] -global = { - \key g \major - \time 2/4 -} - -\parallelMusic #'(voiceA voiceB voiceC voiceD) { - % Bar 1 - a8 b c d | - d4 e | - c16 d e fis d e fis g | - a4 a | - - % Bar 2 - e8 fis g a | - fis4 g | - e16 fis g a fis g a b | - a4 a | - - % Bar 3 ... -} - -\score { - \new PianoStaff << - \new Staff { - \global - << - \relative c'' \voiceA - \\ - \relative c' \voiceB - >> - } - \new Staff { - \global \clef bass - << - \relative c \voiceC - \\ - \relative c \voiceD - >> - } - >> -} -@end lilypond - - -@seealso -Manual de aprendizaje: -@rlearning{Organizing pieces with variables} - -Fragmentos de código: -@rlsr{Simultaneous notes}. diff --git a/Documentation/es/user/spacing.itely b/Documentation/es/user/spacing.itely deleted file mode 100644 index f60c4c149c..0000000000 --- a/Documentation/es/user/spacing.itely +++ /dev/null @@ -1,2680 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 3e63320d65c86c823949f70ab9791eab96c98352 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Spacing issues -@chapter Spacing issues - -La disposición global sobre el papel viene determinada por tres -factores: el diseño de página, los saltos de línea y el espaciado. -Estos factores influyen entre sí. La elección de uno u otro espaciado -determina qué densidad termina teniendo cada sistema de música. Esto -influye en el lugar en que se eligen los saltos de línea, y en último -término, en el número de páginas que tiene una partitura. - -Considerado globalmente, este proceso se produce en cuatro fases: en -primer lugar se eligen unas distancias elásticas o @q{muelles}, -basados en la duración de las figuras. Se prueban todas las -combinaciones de saltos de línea posibles, y para cada una de ellas se -calcula una puntuación de @q{maldad}. Después se hace una estimacion -de la altura de cada uno de los posibles sistemas. Finalmente se -selecciona una combinación de saltos de página y de línea de tal forma -que ni el espaciado horizontal ni el vertical estén demasiado -estrechos ni estirados. - -Los ajustes que influyen en la disposición se pueden agrupar en dos -bloques. El bloque @code{\paper @{...@}} se sitúa fuera de los -bloques @code{\score @{...@}} y contiene ajustes relacionados con el -documento como un todo. El bloque @code{\layout @{...@}} se sitúa -dentro de un bloque @code{\score @{...@}} y contiene ajustes para -dicha partitura en concreto. Si sólo tiene un bloque @code{\score -@{...@}}, los dos tienen el mismo efecto. En general las -instrucciones que se muestran en este capítulo se pueden poner en -cualquiera de los dos. - -@menu -* Paper and pages:: -* Music layout:: -* Breaks:: -* Vertical spacing:: -* Horizontal spacing:: -* Fitting music onto fewer pages:: -@end menu - - -@node Paper and pages -@section Paper and pages - -Esta sección se ocupa de los límites que definen la zona del papel en -que se puede imprimir la música. - -@menu -* Paper size:: -* Page formatting:: -@end menu - - -@node Paper size -@subsection Paper size - -@cindex papel, tamaño del -@cindex página, tamaño de la - -Existen dos funciones para cambiar el tamaño del papel: -@code{set-default-paper-size} (establecer tamaño de página -predeterminado) y @code{set-paper-size} (establecer tamaño de página). -@code{set-default-paper-size} se debe poner en el ámbito del nivel -superior, y @code{set-paper-size} se debe poner en un bloque -@code{\paper}: - -@example -#(set-default-paper-size "a4") -@end example - -@example -\paper @{ - #(set-paper-size "a4") -@} -@end example - -@noindent -@code{set-default-paper-size} establece el tamaño de todas las -páginas, mientras que @code{set-paper-size} establece sólo el tamaño -de las páginas a las que se aplica el bloque @code{\paper}. Por -ejemplo, si el bloque @code{\paper} está al principio del archivo, -aplica el tamaño de papel a todas las páginas. Si el bloque -@code{\paper} está dentro de un bloque @code{\book}, entonces el -tamaño del papel sólo se aplica a ese libro. - -Se encuentran disponibles los tamaños de papel más comunes, entre -ellos @code{a4}, @code{letter}, @code{legal} y @code{11x17} (conocido -también como tabloide). Están contemplados muchos más tamaños de papel -de forma predeterminada. Para ver más detalles, consulte -@file{scm/@/paper@/.scm} y busque la definición de @code{paper-alist}. - -@c TODO add a new appendix for paper sizes (auto-generated) -pm - -@warning{El tamaño predeterminado del papel es @code{a4}.} - -Se pueden añadir tamaños adicionales editando la definición de -@code{paper-alist} en el archivo de inicio @file{scm/@/paper@/.scm}, -aunque se sobreescribirán en la siguiente reinstalación del programa. - -@cindex orientación -@cindex apaisado -@cindex horizontal, papel - -Si se añade el símbolo @code{'landscape} (apaisado) como argumento a -@code{set-default-paper-size}, las páginas se giran 90 grados y se -establece en consonancia una mayor longitud de las líneas. - -@example -#(set-default-paper-size "a6" 'landscape) -@end example - -Al establecer el tamaño del papel se ajustan un cierto número de -variables del @code{\paper}, tales como los márgenes. Para utilizar -un tamaño de página determinado con variables de @code{\paper} -alteradas, establezca el tamaño de página antes de dar valores a las -variables. - - -@seealso -Archivos instalados: -@file{scm/@/paper@/.scm}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@node Page formatting -@subsection Page formatting - -Los márgenes, encabezamientos y pies de página y otras variables de -diseño de página se establecen automáticamente de acuerdo con el -tamaño del papel. - -Esta sección relaciona y describe cierto número de variables del papel -que se pueden alterar. - -@menu -* Vertical dimensions:: -* Horizontal dimensions:: -* Other layout variables:: -@end menu - - -@node Vertical dimensions -@unnumberedsubsubsec Vertical dimensions - -Estas variables se utilizan para establecer las diferentes dimensiones -verticales de la página: - -@funindex \paper - -@table @code - -@item after-title-space -@funindex after-title-space - -Espacio entre el título y el primer sistema. -Predeterminado: @code{5\mm}. - -@item before-title-space -@funindex before-title-space - -Distancia entre el último sistema de la pieza anterior y el título de -la siguiente. Predeterminado: @code{10\mm}. - -@item between-system-padding -@funindex between-system-padding - -Distancia mínima que se deja siempre entre el símbolo más bajo de un -sistema y el más alto del siguiente. Predeterminado: @code{4\mm}. - -El aumento de este valor separa más los sistemas cuyas cajas -circundantes casi se tocan. - -@item between-system-space -@funindex between-system-space - -Distancia entre los sistemas. Es la distancia ideal desde el centro -del pentagrama inferior de un sistema hasta el centro del pentagrama -superior del sistema siguiente. Predeterminado: @code{20\mm}. - -El aumento de este valor da a la página un aspecto más regular a costa -de utilizar más espacio vertical. - -@item between-title-space -@funindex between-title-space - -Distancia entre títulos consecutivos (p.ej., el título del libro y el -título de una pieza). Predeterminado: @code{2\mm}. - -@item bottom-margin -@funindex bottom-margin - -Margen entre el pie de página y la parte inferior del papel. -Predeterminado: @code{6\mm}. - -@item foot-separation -@funindex foot-separation - -Distancia entre el sistema situado más abajo y el pie de página. -Predeterminado: @code{4\mm}. - -@item head-separation -@funindex head-separation - -Distancia entre el sistema situado más arriba y el encabezamiento de -la página. Predeterminado: @code{4\mm}. - -@item page-top-space -@funindex page-top-space - -Distancia desde la parte alta del área imprimible hasta el centro del -primer pentagrama. Esto sólo funciona para pentagramas con una -anchura vertical pequeña. Los pentagramas grandes se establecen con -la parte alta de su caja circundante alineada a la parte alta del área -imprimible. Predeterminado: @code{12\mm}. - -@item paper-height -@funindex paper-height - -Altura de la página. Predeterminado: altura del tamaño actual del -papel. Para ver más detalles, consulte @ref{Paper size}. - -@item top-margin -@funindex top-margin - -Margen entre el encabezamiento y la parte alta del papel. -Predeteminado: @code{5\mm}. - -@end table - - -@snippets - -El encabezamiento y el pie se crean por parte de las funciones -@code{make-footer} y @code{make-header}, definidas dentro de -@code{\paper}. Las implementaciones predeterminadas están en -@file{ly/paper-defaults.ly} y en @file{ly/titling-init.ly}. - -El diseño de la página en sí está realizado por dos funciones dentro -del bloque @code{\paper}, @code{page-music-height} y -@code{page-make-stencil}. El primero informa al algoritmo de saltos -de línea de la cantidad de espacio que está disponible en una página, -y el último crea la propia página dado el sistema que poner sobre -ella. - -Se pueden definir valores del bloque @code{\paper} en Scheme. En tal -caso, @code{mm}, @code{in}, @code{pt}, y @code{cm} son variables que -están definidas en @file{paper-defaults.ly} con valores en milímetros. -Por ello el valor 2 cm se debe multiplicar en el siguiente ejemplo: - -@example -\paper @{ - #(define bottom-margin (* 2 cm)) -@} -@end example - - -Ejemplo: - -@example -\paper@{ - paper-width = 2\cm - top-margin = 3\cm - bottom-margin = 3\cm - ragged-last-bottom = ##t -@} -@end example - -Este segundo ejemplo centra los números de página en la parte baja del -papel. - -@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 - - -@seealso -Referencia de la notación: -@ref{Vertical spacing between systems}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@node Horizontal dimensions -@unnumberedsubsubsec Horizontal dimensions - -@warning{Si se establece @code{paper-width} manualmente, -@code{line-width}, @code{left-margin}, @code{indent} y -@code{short-indent} pueden necesitar ajustarse también.} - -Existe un cierto número de variables que determinan las dimensiones -horizontales de una página: - -@table @code - -@item horizontal-shift -@funindex horizontal-shift - -Medida en que todos los sistemas (incluidos los títulos de cabecera y -los separadores de sistemas) se desplazan a la derecha. -Predeterminado: @code{0.0}. - -@item indent -@funindex indent - -Nivel de sangrado para el primer sistema de una partitura. -Predeterminado: @code{paper-width} dividido por @code{14}, tal y como -viene determinado por @code{set-default-paper-size} o -@code{set-paper-size}. - -@item left-margin -@funindex left-margin - -El margen entre el límite izquierdo del papel y el comienzo de los -sistemas. Predeterminado: @code{10\mm}, tal y como se define por -parte de @code{set-default-paper-size} o de @code{set-paper-size}. - -@item line-width -@funindex line-width - -Ancho de los sistemas. Predeterminado: @code{paper-width} menos -@code{20\mm}, como viene determinado por @code{set-default-paper-size} -o por @code{set-paper-size}. - -@item paper-width -@funindex paper-width - -Ancho de la página. Predeterminado: la anchura del tamaño actual del -papel. Para ver más detalles, consulte @ref{Paper size}. - -@item short-indent -@funindex short-indent - -Nivel de sangrado para todos los sistemas de una partitura excepto el -primero. Predeterminado: @code{0}, como se determina en -@code{set-default-paper-size} o en @code{set-paper-size}. - -@end table - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@knownissues - -La opción @code{right-margin} está definida pero no establece aún el -margen derecho. El valor del margen derecho se debe definir ajustando -los valores de @code{left-margin} y de @code{line-width}. - - -@node Other layout variables -@unnumberedsubsubsec Other layout variables - -Estas variables se pueden usar para ajustar el diseño de la página en -general. - -@table @code - -@item auto-first-page-number -@funindex auto-first-page-number - -El algoritmo de división de páginas está afectado por el hecho de que -el número de la primera página sea par o impar. Si está establecido -al valor verdadero, el algoritmo de división de páginas decide si -comenzar con un número par o impar. Esto hace que el número de la -primera página se quede como está, o que se aumente en una unidad. -Predeterminado: @code{##f}. - -@ignore - -FIXME: this variable is used, but I don't know what it does. -pm -@item blank-after-score-page-force -@funindex blank-after-score-page-force - -Default: @code{2}. - -@end ignore - -@item blank-last-page-force -@funindex blank-last-page-force - -Penalización por terminar la partitura en una página de numeración -impar. Predeterminado: @code{0}. - -@item blank-page-force -@funindex blank-page-force - -Penalización por tener una página en blanco en medio de una partitura. -Esto no se usa por parte de @code{ly:optimal-breaking} porque éste -nunca considera la posibilidad de tener páginas en blanco en mitad de -una partitura. Predeterminado: @code{5}. - -@item first-page-number -@funindex first-page-number - -Valor del número de la primera página. Predeterminado: @code{#1}. - -@item page-breaking-between-system-padding -@funindex page-breaking-between-system-padding - -Engaña al divisor de páginas para que crea que -@code{between-system-padding} está establecido a algo distinto de lo -que está realmente. Por ejemplo, si esta variable se establece a algo -mucho mayor que @code{between-system-padding}, entonces el divisor de -páginas colocará menos sistemas en cada página. Predeterminado: no -establecido. - -@item page-count -@funindex page-count - -Número de páginas que usar para una partitura. Predeterminado: sin -fijar. - -@item page-limit-inter-system-space -@funindex page-limit-inter-system-space - -Si tiene un valor verdadero, limita el espacio entre los sistemas de -una página en la que sobra mucho espacio. Predeterminado: @code{##f}. -Para ver más detalles, consulte @ref{Vertical spacing between -systems}. - -@item page-limit-inter-system-space-factor -@funindex page-limit-inter-system-space-factor - -Factor usado por @code{page-limit-inter-system-space}. -Predeterminado: @code{1.4}. Para ver más detalles, consulte -@ref{Vertical spacing between systems}. - -@item page-spacing-weight -@funindex page-spacing-weight - -Importancia relativa del espacio (vertical) de las páginas y el -espaciado (horizontal) de las líneas. Los valores altos hacen que el -espaciado de la página tenga más importancia. Predeterminado: -@code{#10}. - -@item print-all-headers -@funindex print-all-headers - -Si está establecido a un valor verdadero, imprime todas las cabeceras -para cada una de las @code{\score} en la salida impresa. Normalmente -sólo se imprimen las variables de encabezamiento de pieza y opus. -Predeterminado: @code{##f}. - -@item print-first-page-number -@funindex print-first-page-number - -Si está establecido a un valor verdadero, se imprime un número de -página en la primera página. Predeterminado: @code{##f}. - -@item print-page-number -@funindex print-page-number - -Si está establecido a un valor falso, no se imprimen los números de -página. Predeterminado: @code{##t}. - -@item ragged-bottom -@funindex ragged-bottom - -Si está establecido a un valor verdadero, los sistemas no ocuparán -verticalmente toda la altura de la página. Esto no afecta a la última -página. Predeterminado: @code{##f}. - -Esto se debería establecer al valor verdadero para piezas que tienen -sólo dos o tres sistemas por página, por ejemplo partituras -orquestales. - -@item ragged-last -@funindex ragged-last - -Si está establecido a un valor verdadero, el último sistema de la -partitura no llenará la anchura de la línea. En su lugar, el último -sistema termina en su longitud horizontal natural. Predeterminado: -@code{##f}. - -@item ragged-last-bottom -@funindex ragged-last-bottom - -Si está establecido a un valor falso, los sistemas se repartirán -verticalmente por toda la última página. Predeterminado: @code{##t}. - -Las piezas que llenan generosamente dos o más páginas deberían tener -esto establecido al valor verdadero. - -También afecta a la última página de las partes de libro, es decir, -partes de un libro que se han creado con bloques @code{\bookpart}. - -@item ragged-right -@funindex ragged-right - -Si está establecido a un valor verdadero, los sistemas no llenarán el -ancho de línea disponible. En su lugar, los sistemas terminan en su -longitud horizontal natural. Predeterminado: @code{##f}. - -Si la partitura sólo tiene un sistema, el valor predeterminado es -@code{##t}. - -@item system-separator-markup -@funindex system-separator-markup - -Objeto de marcado que se inserta entre los sistemas. Se suele usar -para partituras orquestales. Predeterminado: sin establecer. - -Se ofrece la instrucción de marcado @code{\slashSeparator} como un -valor predeterminado apropiado, por ejemplo - -@lilypond[quote,ragged-right] -#(set-default-paper-size "a6" 'landscape) -\book { - \score { - \relative { c1 \break c1 } - } - \paper { - system-separator-markup = \slashSeparator - } -} -@end lilypond - -@item system-count -@funindex system-count - -Cantidad de sistemas que usar por parte de la partitura. -Predeterminado: sin establecer. - -@end table - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@knownissues - -El encabezamiento de página predeterminado pone el número de página y -el campo @code{instrument} del bloque @code{\header} sobre la misma -línea. - -Los títulos de cabecera (tomados de la sección @code{\header@{@}}) se -tratan como un sistema, por lo que @code{ragged-bottom} y -@code{ragged-last-bottom} añaden espacio entre los títulos y el primer -sistema de la partitura. - - -@node Music layout -@section Music layout - -@menu -* Setting the staff size:: -* Score layout:: -@end menu - - -@node Setting the staff size -@subsection Setting the staff size - -@cindex tipografía, establecer tamaño de -@cindex pentagrama, establecer tamaño de -@funindex layout file - -El @strong{tamaño de pentagrama} predeterminado se establece en 20 -puntos. Esto se puede modificar de dos maneras: - -Para establecer globalmente el tamaño del pentagrama para todas las -partituras de un archivo (o en un bloque @code{book}, para ser -exactos), utilice @code{set-global-staff-size}. - -@example -#(set-global-staff-size 14) -@end example - -@noindent -Esto establece el tamaño global predeterminado a una altura de -pentagrama de 14pt y escala todas las tipografías según corresponda. - -Para establecer el tamaño del pentagrama de forma individual para cada -partitura, use -@example -\score@{ - ... - \layout@{ - #(layout-set-staff-size 15) - @} -@} -@end example - -La fuente tipográfica Feta ofrece símbolos musicales a ocho tamaños -distintos. Cada fuente tipográfica está afinada para un tamaño de -pentagrama distinto: a un tamaño menor la tipografía se vuelve más -pesada, para que coincida con las líneas de pentagrama relativamente -más gruesas. Los tamaños de tipografía recomendados están -relacionados en la tabla siguiente: - -@quotation -@multitable @columnfractions .15 .2 .22 .2 - -@item @b{nombre de la fuente} -@tab @b{altura del pentagrama (pt)} -@tab @b{altura del pentagrama (mm)} -@tab @b{usos} - -@item feta11 -@tab 11.22 -@tab 3.9 -@tab partituras de bolsillo - -@item feta13 -@tab 12.60 -@tab 4.4 -@tab - -@item feta14 -@tab 14.14 -@tab 5.0 -@tab - -@item feta16 -@tab 15.87 -@tab 5.6 -@tab - -@item feta18 -@tab 17.82 -@tab 6.3 -@tab cancioneros - -@item feta20 -@tab 20 -@tab 7.0 -@tab particellas estándar - -@item feta23 -@tab 22.45 -@tab 7.9 -@tab - -@item feta26 -@tab 25.2 -@tab 8.9 -@tab -@c modern rental material? - -@end multitable -@end quotation - -Estas tipografías están disponibles en cualquier tamaño. La propiedad -de contexto @code{fontSize} y la propiedad de disposición -@code{staff-space} (en @rinternals{StaffSymbol}) se pueden usar para -afinar el tamaño de los pentagramas individuales. Los tamaños de -pentagrama individuales están en relación al tamaño global. - - -@seealso -Referencia de la notación: -@ref{Selecting notation font size}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@knownissues - -@code{layout-set-staff-size} no cambia la distancia entre las líneas -del pentagrama. - - -@node Score layout -@subsection Score layout - -@funindex \layout - -Mientras que @code{\paper} contiene ajustes relativos al formato de -página del documento completo, @code{\layout} contiene ajustes para la -disposición específica de cada partitura. - -@example -\layout @{ - indent = 2.0\cm - \context @{ \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6) - @} - \context @{ \Voice - \override TextScript #'padding = #1.0 - \override Glissando #'thickness = #3 - @} -@} -@end example - - -@seealso -Referencia de la notación: -@ref{Changing context default settings}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@node Breaks -@section Breaks - -@menu -* Line breaking:: -* Page breaking:: -* Optimal page breaking:: -* Optimal page turning:: -* Minimal page breaking:: -* Explicit breaks:: -* Using an extra voice for breaks:: -@end menu - - -@node Line breaking -@subsection Line breaking - -@cindex saltos de línea -@cindex línea, saltos de - -Normalmente los saltos de línea se determinan automáticamente. Se -eligen de forma que las líneas no aparezcan demasiado apretadas ni -demasiado sueltas, y que las líneas consecutivas tengan una densidad -similar. Ocasionalmente podemos querer sobreescribir los saltos -automáticos; podemos hacerlo especficando @code{\break}. Esto fuerza -un salto de línea en ese punto. Sin embargo, los saltos de línea sólo -pueden suceder al final de los compases @q{completos}, es decir, donde -no queda ninguna nota o grupo especial @q{colgando} por encima de la -línea divisoria. Si queremos poner un salto de línea donde no hay -línea divisoria, podemos forzar una barra de compás invisible -introduciendo @code{\bar ""}, aunque de nuevo no deben quedar notas -colgando en ninguno de los pentagramas en este punto, o se ignorarán. - -La instrucción opuesta, @code{\noBreak}, prohíbe un salto de línea en -la barra divisoria en que se inserta. - -Los ajustes más básicos que influyen sobre el espaciado de las líneas -son @code{indent} y @code{line-width}. Se establecen dentro del bloque -@code{\layout}. Controlan el sangrado de la primera línea de música, -y la longitud de las líneas. - -Si se establece @code{ragged-right} a verdadero en el bloque -@code{\layout}, los sistemas terminan en su longitud horizontal -natural, en lugar de distribuirse horizontalmente para llenar toda la -línea. Esto es de utilidad para fragmentos cortos, y para efectuar una -comprobación de lo apretado que es el espaciado natural. - -@c TODO Check and add para on default for ragged-right - -La opción @code{ragged-last} es similar a @code{ragged-right}, pero -afecta sólo a la última línea de la pieza. - -@example -\layout @{ -indent = #0 -line-width = #150 -ragged-last = ##t -@} -@end example - - - -@cindex regular line breaks -@cindex four bar music. - -Para saltos de línea a intervalos regulares utilice @code{\break} -separado mediante desplazamientos con @code{\skip} y repetidos con -@code{\repeat}. Por ejemplo, esto haría que los 28 compases -siguientes (suponiendo un compás de 4/4) se dividan cada cuatro -compases, y sólo en dichos lugares: - -@example -<< \repeat unfold 7 @{ - s1 \noBreak s1 \noBreak - s1 \noBreak s1 \break @} - @emph{the real music} ->> -@end example - -@c TODO Check this -Una configuración de división de líneas se puede guardar como archivo -@code{.ly} automáticamente. Ello permite que alineaciones verticales -se estiren para que encajen en las páginas durante una segunda -ejecución del proceso de formateo. Esta posibilidad es bastante -novedosa y difícil. Hay más detalles disponibles en @rlsr{Spacing}. - - -@predefined -@funindex \break -@code{\break}, -@funindex \noBreak -@code{\noBreak}. -@endpredefined - - -@seealso -Referencia de funcionamiento interno: -@rinternals{LineBreakEvent}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@knownissues - -Sólo pueden ocurrir saltos de línea si hay una @q{buena} línea -divisoria. Una nota colgando de una línea divisoria no es adecuada, -como - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -c4 c2 << c2 {s4 \break } >> % this does nothing -c2 c4 | % a break here would work -c4 c2 c4 ~ \break % as does this break -c4 c2 c4 -@end lilypond - -Esto se puede evitar eliminando el grabador -@code{Forbid_line_break_engraver}. Observe que los saltos de línea -forzados manualmente se tienen que añadir en paralelo con la música. - -@lilypond[quote,ragged-right,verbatim] -\new Voice \with { - \remove Forbid_line_break_engraver -} { - c4 c2 << c2 {s4 \break } >> % now the break is allowed - c2 c4 -} -@end lilypond - -De forma parecida, los saltos de línea están prohibidos normalmente -cuando las barras cruzan a las líneas divisorias. Este comportamiento -se puede modificar con el establecimiento de @code{\override Beam -#'breakable = ##t}. - - -@node Page breaking -@subsection Page breaking - -Se puede sobreescribir el mecanismo predeterminado de salto de página -insertando instrucciones @code{\pageBreak} o @code{\noPageBreak}. -Estas instrucciones son análogas a @code{\break} y @code{\noBreak}. -Se deben insertar en una línea divisoria. Estas instrucciones fuerzan -y prohíben, respectivamente, la eventualidad de un salto de página. -Por supuesto, la instrucción @code{\pageBreak} también fuerza un salto -de línea. - -Las instrucciones @code{\pageBreak} y @code{\noPageBreak} también se -pueden insertar en el nivel más alto, entre las partituras y los -elementos de marcado situados en el nivel superior. - -Hay ajustes análogos a @code{ragged-right} y @code{ragged-last} que -tienen el mismo efecto sobre el espaciado vertical: -@code{ragged-bottom} y @code{ragged-last-bottom}. Si están -establecidos a @code{##t} los sistemas de todas las páginas o sólo de -la última página, respectivamente, no se verán justificados -verticalmente. - -Para ver más detalles, consulte @ref{Vertical spacing}. - -Los saltos de página se calculan por medio de la función -@code{page-breaking}. LilyPond ofrece tres algoritmos para el cómputo -de los saltos de página: @code{ly:optimal-breaking}, -@code{ly:page-turn-breaking} y @code{ly:minimal-breaking}. El -predeterminado es @code{ly:optimal-breaking}, pero el valor se puede -cambiar en el bloque @code{\paper}: - -@example -\paper@{ - #(define page-breaking ly:page-turn-breaking) -@} -@end example - -@c TODO Check this -td -El antiguo algoritmo de división de páginas se llama -@code{optimal-page-breaks}. Si tiene problemas con los nuevos -divisores de página, puede habilitar el antiguo como forma de rodear -el problema. - - -@funindex \bookpart - -Cuando un libro tiene muchas partituras y páginas, puede ser difícil -resolver el problema de los saltos de página, necesitando mucha -memoria y prolongados tiempos de procesamiento. Para facilitar el -proceso de división en páginas, se usan los bloques @code{\bookpart} -para dividir el libro en varias partes: los saltos de página se -producen de manera independiente en cada parte. También se pueden -usar diferentes funciones de división en páginas para las distintas -partes del libro. - -@example -\bookpart @{ - \header @{ - subtitle = "Prefacio" - @} - \paper @{ - %% En una parte que consiste en texto principalmente, - %% puede ser preferible ly:minimal-breaking - #(define page-breaking ly:minimal-breaking) - @} - \markup @{ @dots{} @} - @dots{} -@} -\bookpart @{ - %% En esta parte, consistente en música, se usa la función - %% óptima predeterminada de saltos de página. - \header @{ - subtitle = "Primer movimiento" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - - -@predefined -@funindex \pageBreak -@code{\pageBreak}, -@funindex \noPageBreak -@code{\noPageBreak}. -@endpredefined - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Optimal page breaking -@subsection Optimal page breaking - -@funindex ly:optimal-breaking - -La función @code{ly:optimal-breaking} es el método predeterminado de -LilyPond para determinar los saltos de página. Intenta hallar una -división de páginas que haga mínimos el apretujamiento y la -distensión, tanto horizontal como verticalmente. A diferencia de -@code{ly:page-turn-breaking}, no tiene un concepto de los pasos de -página. - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Optimal page turning -@subsection Optimal page turning - -@funindex ly:page-turn-breaking - -Con frecuencia es necesario encontrar una configuración de división de -páginas de manera que haya un silencio al final de una página de cada -dos. De esta forma, el músico puede pasar la página sin perder notas. -La función @code{ly:page-turn-breaking} trata de encontrar una -división de páginas que haga mínimos el apretujamiento y el -estiramiento, pero con la restricción añadida de que sólo se permite -introducir vueltas de página en los lugares especificados. - -Hay dos etapas en el uso de esta función de división de páginas. En -primer lugar debemos habilitarlo en el bloque @code{\paper}, como se -explicó en @ref{Page breaking}. Entonces debemos decirle a la función -dónde nos gustaría permitir los saltos de página. - -Hay dos formas de conseguir la segunda tarea. Primero, podemos -especificar manualmente cada uno de los pasos de página potenciales, -insertando @code{\allowPageTurn} en nuestro archivo de entrada en los -lugares adecuados. - -Si esto es demasiado tedioso, podemos añadir un grabador -@code{Page_turn_engraver} a un contexto Staff o Voice. El grabador -@code{Page_turn_engraver} analizará el contexto en biusca de secciones -sin notas (observe que no busca silencios, sino la ausencia de notas. -Se hace así para que la polifonía en un solo pentagrama con silencios -en una de las voces no arruine la labor del grabador -@code{Page_turn_engraver}). Cuando encuentra una sección sin notas -suficientemente larga, el grabador @code{Page_turn_engraver} inserta -un @code{\allowPageTurn} en la última barra de compás de dicha -sección, a no ser que haya una barra @q{especial} de compás (como una -doble barra), en cuyo caso se insertará el @code{\allowPageTurn} en la -última barra @q{especial} de compás de la sección. - -@funindex minimumPageTurnLength -El grabador @code{Page_turn_engraver} lee la propiedad de contexto -@code{minimumPageTurnLength} para determinar qué longitud debe tener -una sección sin notas antesd e que se considere la posibilidad de un -paso de página. El valor predeterminado para -@code{minimumPageTurnLength} es @code{#(ly:make-moment 1 1)}. Si -quiere inhabilitar las vueltas de página, puede establecerlo a algún -valor muy grande. - -@example -\new Staff \with @{ \consists "Page_turn_engraver" @} -@{ - a4 b c d | - R1 | % a page turn will be allowed here - a4 b c d | - \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) - R1 | % a page turn will not be allowed here - a4 b r2 | - R1*2 | % a page turn will be allowed here - a1 -@} -@end example - -@funindex minimumRepeatLengthForPageTurn -El grabador @code{Page_turn_engraver} detecta las repeticiones de -primera y segunda vez. Sólo permite un pase de página durante la -repetición si hay suficiente tiempo al principio y al final de la -repetición para volver a pasar la página hacia atrás. El grabador -@code{Page_turn_engraver} también puede inhabilitar los pasos de -página si la repetición es muy corta. Si establecemos la propiedad de -contexto @code{minimumRepeatLengthForPageTurn} entonces el grabador -@code{Page_turn_engraver} sólo permitirá los pases de página en las -repeticiones cuya duración sea mayor que este valor. - -Las instrucciones de paso de página, @code{\pageTurn}, -@code{\noPageTurn} y @code{\allowPageTurn}, se pueden usar también en -el nivel más elevado del código, entre las partituras y los elementos -de marcado del nivel superior. - - -@predefined -@funindex \pageTurn -@code{\pageTurn}, -@funindex \noPageTurn -@code{\noPageTurn}, -@funindex \allowPageTurn -@code{\allowPageTurn}. -@endpredefined - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@knownissues - -Sólo debería haber un grabador @code{Page_turn_engraver} dentro de una -partitura. Si hay más de uno, se interferirán entre sí. - - -@node Minimal page breaking -@subsection Minimal page breaking - -@funindex ly:minimal-breaking - -La función @code{ly:minimal-breaking} efectúa unos cálculos mínimos -para determinar los saltos de página: completa una página con tantos -sistemas como sea posible antes de continuar con la siguiente. Así, -puede preferirse para partituras con muchas páginas, donde las otras -funciones de salto de página pueden resultar demasiado lentas o ávidas -de memoria, o con una gran cantidad de textos. Se habilita utilizando: - -@example -\paper @{ - #(define page-breaking ly:minimal-breaking) -@} -@end example - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Explicit breaks -@subsection Explicit breaks - -Lily a veces rechaza las instrucciones @code{\break} y -@code{\pageBreak} explícitas. Hay dos instrucciones para -sobreescribir este comportamiento: - -@example -\override NonMusicalPaperColumn #'line-break-permission = ##f -\override NonMusicalPaperColumn #'page-break-permission = ##f -@end example - -Cuando se sobreescribe el valor de @code{line-break-permission} a -falso, Lily inserta saltos de línea en las instrucciones @code{\break} -explícitas y en ningún otro lugar. Cuando se sobreescribe el valor de -@code{page-break-permission} a falso, Lily inserta saltos de página en -las instrucciones @code{\pageBreak} explícitas y en ningún otro lugar. - -@lilypond[quote,verbatim] -\paper { - indent = #0 - ragged-right = ##t - ragged-bottom = ##t -} - -\score { - \new Score \with { - \override NonMusicalPaperColumn #'line-break-permission = ##f - \override NonMusicalPaperColumn #'page-break-permission = ##f - } { - \new Staff { - \repeat unfold 2 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 8 { c'8 c'8 c'8 c'8 } \pageBreak - \repeat unfold 8 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 2 { c'8 c'8 c'8 c'8 } - } - } -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Using an extra voice for breaks -@subsection Using an extra voice for breaks - -La información sobre saltos de línea y de página suele aparecer -directamente intermezclado dentro del código de notas. - -@example -\new Score @{ - \new Staff @{ - \repeat unfold 2 @{ c'4 c'4 c'4 c'4 @} - \break - \repeat unfold 3 @{ c'4 c'4 c'4 c'4 @} - @} -@} -@end example - -Esto hace sencillas de introducir a las instrucciones @code{\break} y -@code{\pageBreak}, pero mezcla la escritura de música con información -que especifica cómo se debe disponer la música sobre la página. -Podemos mantener la introducción de música y la información de saltos -de línea y de página en dos lugares separados mediante la introducción -de una voz adicional que contenga los saltos. Esta voz adicional -contiene solamente desplazamientos o @q{skips} junto con los -@code{\break}, @code{pageBreak} y otras informaciones sobre la -disposición de los saltos. - -@lilypond[quote,verbatim] -\new Score { - \new Staff << - \new Voice { - s1 * 2 \break - s1 * 3 \break - s1 * 6 \break - s1 * 5 \break - } - \new Voice { - \repeat unfold 2 { c'4 c'4 c'4 c'4 } - \repeat unfold 3 { c'4 c'4 c'4 c'4 } - \repeat unfold 6 { c'4 c'4 c'4 c'4 } - \repeat unfold 5 { c'4 c'4 c'4 c'4 } - } - >> -} -@end lilypond - -Este patrón resulta especialmente útil cuando se sobreescribe -@code{line-break-system-details} y las otras útiles (pero largas) -propiedades de @code{NonMusicalPaperColumnGrob}, como se explica en -@ref{Vertical spacing}. - -@lilypond[quote,verbatim] -\new Score { - \new Staff << - \new Voice { - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0)) - s1 * 2 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 35)) - s1 * 3 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 70)) - s1 * 6 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 105)) - s1 * 5 \break - } - \new Voice { - \repeat unfold 2 { c'4 c'4 c'4 c'4 } - \repeat unfold 3 { c'4 c'4 c'4 c'4 } - \repeat unfold 6 { c'4 c'4 c'4 c'4 } - \repeat unfold 5 { c'4 c'4 c'4 c'4 } - } - >> -} -@end lilypond - - -@seealso -Referencia de la notación: -@ref{Vertical spacing}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@node Vertical spacing -@section Vertical spacing - -@cindex espaciado vertical -@cindex vertical, espaciado - -El espaciado vertical está controlado por tres factores: la cantidad -de espacio disponible (es decir, el tamaño del papel y los márgenes), -la separación entre los sistemas, y la separación entre los -pentagramas dentro de un sistema. - -@menu -* Vertical spacing inside a system:: -* Vertical spacing between systems:: -* Explicit staff and system positioning:: -* Two-pass vertical spacing:: -* Vertical collision avoidance:: -@end menu - - -@node Vertical spacing inside a system -@subsection Vertical spacing inside a system - -@cindex distancia entre pentagramas -@cindex pentagrama, distancia entre los -@cindex espacio entre pentagramas -@cindex espacio dentro de los sistemas - -La altura de cada sistema se determina automáticamente. Para evitar -que los pentagramas se superpongan unos encima de otros, se establecen -algunas distancias mínimas. Al modificarlas, podemos poner los -pentagramas más cerca unos de otros. Esto reduce el espacio que -requiere cada sistema y puede resultar en la obtención de más sistemas -por página. - -Normalmente los pentagramas se apilan verticalmente. Para hacer que -los pentagramas guarden una distancia, se rellena su tamaño vertical. -Esto se hace con la propiedad @code{minimum-Y-extent}. Si se aplica a -@rinternals{VerticalAxisGroup}, controla el tamaño de una línea -horizontal, como un pentagrama o una línea de letra. -@code{minimum-Y-extent} acepta una pareja de números, de forma que si -queremos hacerlo más pequeño que su valor predeterminado @code{#'(-4 -. 4)} entonces podemos establecer - -@example -\override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) -@end example - -@noindent -Esto fija el tamaño vertical del pentagrama en curso a 3 espacios de -pentagrama a cada lado de la tercera línea. El valor @code{(-3 . 3)} -se interpreta como un intervalo, donde la línea central es el 0, por -lo que el primer número es negativo en general. Los números no tienen -que coincidir; por ejemplo, el pentagrama se puede hacer mayor por -debajo dándole el valor @code{(-6 . 4)}. - -Después de que se han determinado los saltos de página, se reevalúa el -espaciado vertical dentro de cada sistema para llenar la página de -forma más regular; si una página tiene más espacio de sobra, se -amplían los sistemas para poder llenar este espacio. La magnitud de -esta ampliación se puede configurar a través de la propiedad -@code{max-stretch} del grob @rinternals{VerticalAlignment}. De forma -predeterminada, @code{max-stretch} se establece a cero, inhabilitando -la ampliación. Para habilitar la ampliación, un valor prudente para -@code{max-stretch} es @code{ly:align-interface::calc-max-stretch}. - -En ciertas situaciones, podemos querer ampliar la mayor parte de un -sistema y al mismo tiempo dejar algunas partes fijas. Por ejemplo, si -una parte de piano aparece en el medio de una partitura orquestal, -podemos querer dejar los pentagramas de piano cercanos entre sí -mientras se estira el resto de la partitura. Se puede usar la -propiedad @code{keep-fixed-while-stretching} de -@rinternals{VerticalAxisGroup} para conseguirlo. Cuando se establece -al valor @code{##t}, esta propiedad evita que su pentagrama (o línea -de letra) se desplace en relación al que está directamente encima de -él. En el ejemplo anterior, podríamos sobreescribir -@code{keep-fixed-while-stretching} al valor @code{##t} en el segundo -pentagrama del piano: - -@lilypond[verbatim] -#(set-default-paper-size "a6") -#(set-global-staff-size 14.0) - -\book { -\paper { - ragged-last-bottom = ##f -} - -\new Score \with -{ - \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch -} -{ -\new GrandStaff -<< - \new StaffGroup - << - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - >> - - \new PianoStaff - << - \new Staff {c' d' e' f'} - \new Staff \with { - \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t - } - {c' d' e' f'} - >> - - \new StaffGroup - << - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - >> ->> -} -} -@end lilypond - -La alineación vertical de los pentagramas está manejada por el objeto -@code{VerticalAlignment}. Los parámetros de contexto que especifican -las dimensiones verticales están descritas en conexión con el grabador -@code{Axis_group_engraver}. - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - -@c @lsr{spacing,page-spacing.ly}, -@c @lsr{spacing,alignment-vertical-spacing.ly}. - -Referencia de funcionamiento interno: -@rinternals{VerticalAlignment}, -@rinternals{Axis_group_engraver}. - - -@node Vertical spacing between systems -@subsection Vertical spacing between systems - -La separación entre los sistemas está controlada por cuatro variables -del papel: - -@example -\paper @{ - between-system-space = 1.5\cm - between-system-padding = #1 - ragged-bottom=##f - ragged-last-bottom=##f -@} -@end example - -Cuando sólo se ponen dos simples sistemas en una página, el espaciado -vertical resultante puede ser bastante poco elegante: un sistema en la -parte alta de la página y el otro en la parte baja, con un enorme -hueco entre ellos. Para evitar esta situación se puede limitar el -espacio que se añade entre los sistemas. Esta posibilidad se activa -mediante el establecimiento al valor @code{#t} de la variable -@code{page-limit-inter-system-space} en el bloque @code{\paper}. La -variable del papel @code{page-limit-inter-system-space-factor} -determina en qué cantidad se puede incrementar el espacio: por -ejemplo, el valor @code{1.3} significa que el espacio puede ser un -30% mayor que lo que sería en una página no justificada hasta abajo. - -En el ejemplo siguiente, si el espacio entre los sistemas no estuviese -limitado, el segundo sistema de la página 1 se situaría en la parte de -abajo de la página. Activando la limitación de espacio, el segundo -sistema se coloca más cerca del primero. Estableciendo -@code{page-limit-inter-system-space-factor} a @code{1}, el espacio -sería el mismo que en una página sin justificar por abajo, como la -última página. - -@lilypond[verbatim] -#(set-default-paper-size "a6") -\book { - \paper { - page-limit-inter-system-space = ##t - page-limit-inter-system-space-factor = 1.3 - - oddFooterMarkup = \markup "page bottom" - evenFooterMarkup = \markup "page bottom" - oddHeaderMarkup = \markup \fill-line { - "page top" \fromproperty #'page:page-number-string } - evenHeaderMarkup = \markup \fill-line { - "page top" \fromproperty #'page:page-number-string } - } - \new Staff << \repeat unfold 4 { g'4 g' g' g' \break } - { s1*2 \pageBreak } >> -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Explicit staff and system positioning -@subsection Explicit staff and system positioning - -Una forma de entender los ajustes de @code{VerticalAxisGroup} y de -@code{\paper} que se explicaron en las dos secciones anteriores es -como una colección de distintos ajustes que conciernen principalmente -a la cantidad de relleno vertical que adquieren los distintos -pentagramas y sistemas al ocupar la página. - -Es posible abordar el problema del espaciado vertical de una forma -distinta utilizando @code{NonMusicalPaperColumn -#'line-break-system-details}. Donde los ajustes de -@code{VerticalAxisGroup} y de @code{\paper} especifican el relleno -vertical, @code{NonMusicalPaperColumn #'line-break-system-details} -especifica las posiciones verticales exactas en la página. - -@code{NonMusicalPaperColumn #'line-break-system-details} acepta una -lista asociativa de cinco ajustes distintos: - -@itemize -@item @code{X-offset} -@item @code{Y-offset} -@item @code{alignment-offsets} -@item @code{alignment-extra-space} -@item @code{fixed-alignment-extra-space} -@end itemize - -Las sobreescrituras de los objetos gráficos, entre ellas las de -@code{NonMusicalPaperColumn} que aparece más abajo, pueden ocurrir en -tres lugares distintos dentro de un archivo de entrada: - -@itemize -@item directamente en medio de las notas -@item en un bloque @code{\context} -@item en el bloque @code{\with} -@end itemize - -Cuando sobreescribimos @code{NonMusicalPaperColumn}, usamos la -instrucción @code{\override} usual en los bloques @code{\context} y en -el bloque @code{\with}. Por otra parte, cuando sobreescribimos -@code{NonMusicalPaperColumn} en medio de las notas, debemos usar la -instrucción especial @code{\overrideProperty}. He aquí algunas -sebreescrituras de @code{NonMusicalPaperColumn} de ejemplo con la -instrucción especial @code{\overrideProperty}: - -@example -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((Y-offset . 40)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20) (Y-offset . 40)) - -\override NonMusicalPaperColumn - #'line-break-system-details #'((alignment-offsets . (0 -15))) - -\override NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20) (Y-offset . 40) - (alignment-offsets . (0 -15))) -@end example - -Para entender cómo funciona cada uno de los distintos ajustes, -empezamos observando un ejemplo que no incluye absolutamente ninguna -sobreescritura. - -@c \book { } is required in these examples to ensure the spacing -@c overrides can be seen between systems. -np - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - s1*5 \break - s1*5 \break - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -Esta partitura mantiene aislada la información de los saltos de línea -y de página en una voz dedicada a ello. Esta técnica de crear una voz -de saltos ayuda a mantener separada de la escritura de notas conforme -el ejemplo se vuelve más complicado. Consulte @ref{Using an extra -voice for breaks}. - -Los saltos explícitos dividen la música de forma regular en seis -compases por línea. El espaciado vertical es el resultado de los -ajustes predeterminados de LilyPond. Para establecer explícitamente -el punto de origen vertical de cada sistema, podemos establecer el par -@code{Y-offset} en el atributo @code{line-break-system-details} del -grob (objeto gráfico) @code{NonMusicalPaperColumn}: - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0)) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 40)) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 80)) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -Observe que @code{line-break-system-details} toma una lista asociativa -de una cantidad de valores potencialmente elevada, pero aquí sólo -fijamos un valor. Observe también que aquí la propiedad -@code{Y-offset} determina la posición vertical exacta sobre la página -en la que se trazará cada uno de los nuevos sistemas. - -Ahora que hemos establecido explícitamente el punto de origen vertical -de cada sistema, podemos también establecer manualmente el punto de -origen vertical de cada pentagrama dentro de cada sistema. Lo hacemos -usando la subpropiedad @code{alignment-offsets} de -@code{line-break-system-details}. - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 20) - (alignment-offsets . (0 -15))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 60) - (alignment-offsets . (0 -15))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 100) - (alignment-offsets . (0 -15))) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -Observe que aquí asignamos dos valores distintos al atributo -@code{line-break-system-details} del grob -@code{NonMusicalPaperColumn}. Aunque el atributo alist de -@code{line-break-system-details} acepta muchos parámetros de espaciado -adicionales (entre ellos, por ejemplo, un par @code{X-offset} -correspondiente), sólo tenemos que establecer el desplazamiento -@code{Y-offset} y los pares @code{alignment-offsets} para controlar el -punto de origen vertical de cada sistema y pentagrama. Finalmente, -observe que @code{alignment-offsets} especifica el posicionamiento -vertical de los pentagramas pero no de los grupos de pentagramas. - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0) - (alignment-offsets . (0 -30 -40))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 60) - (alignment-offsets . (0 -10 -20))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 100) - (alignment-offsets . (0 -10 -40))) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new StaffGroup << - \new Staff { \repeat unfold 15 { d'4 d' d' d' } } - \new Staff { \repeat unfold 15 { e'4 e' e' e' } } - >> - >> - } -} -@end lilypond - -Algunos puntos que tener en cuenta: - -@itemize -@item Al usar @code{alignment-offsets}, la letra cuenta como un pentagrama. - -@item Las unidades de los números que se pasan a @code{X-offset}, -@code{Y-offset} y @code{alignment-offsets} se interpretan como -múltiplos de la distancia entre líneas de pentagrama adyacentes. Los -valores positivos mueven a los pentagramas y a la letra hacia arriba, -los valores negativos mueven los pentagramas y la letra hacia abajo. - -@item A causa de que los ajustes a @code{NonMusicalPaperColumn #'line-break-system-details} -dados aquí permiten el posicionamiento de pentagramas y sistemas en -cualquier lugar de la página, es posible violar los márgenes o los -límites del papel, o incluso imprimir pentagramas o sistemas unos -encima de otros. Esto se evitaría pasando a los diferentes ajustes -unos valores razonables. -@end itemize - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Two-pass vertical spacing -@subsection Two-pass vertical spacing - -@warning{El espaciado vertical en dos pasadas está obsoleto y se -eliminará en una versión futura de LilyPond. Ahora los sistemas se -amplían automáticamente en un solo paso. Véase @ref{Vertical spacing -inside a system}.} - -In order to automatically stretch systems so that they should fill the -space left on a page, a two-pass technique can be used: - -@enumerate -@item In the first pass, the amount of vertical space used to increase -the height of each system is computed and dumped to a file. -@item In the second pass, spacing inside the systems are -stretched according to the data in the page layout file. -@end enumerate - -The @code{ragged-bottom} property adds space between systems, while -the two-pass technique adds space between staves inside a system. - -To allow this behavior, a @code{tweak-key} variable has to be set in -each score @code{\layout} block, and the tweaks included in each score -music, using the @code{\scoreTweak} music function. - -@quotation -@verbatim -%% include the generated page layout file: -\includePageLayoutFile - -\score { - \new StaffGroup << - \new Staff << - %% Include this score tweaks: - \scoreTweak "scoreA" - { \clef french c''1 \break c''1 } - >> - \new Staff { \clef soprano g'1 g'1 } - \new Staff { \clef mezzosoprano e'1 e'1 } - \new Staff { \clef alto g1 g1 } - \new Staff { \clef bass c1 c1 } - >> - \header { - piece = "Score with tweaks" - } - %% Define how to name the tweaks for this score: - \layout { #(define tweak-key "scoreA") } -} -@end verbatim -@end quotation - -For the first pass, the @code{dump-tweaks} option should be set to -generate the page layout file. - -@example -lilypond -dbackend=null -d dump-tweaks .ly -lilypond .ly -@end example - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Vertical collision avoidance -@subsection Vertical collision avoidance - -@funindex outside-staff-priority -@funindex outside-staff-padding -@funindex outside-staff-horizontal-padding - -Podemos decir intuitivamente que algunos objetos de la notación -musical pertenecen al pentagrama y otros se sitúan fuera del -pentagrama. Entre los objetos que pertenecen al exterior del -pentagrama están las marcas de ensayo, las marcas textuales y las -indicaciones de dinámica (en lo sucesivo, les llamaremos objetos fuera -del pentagrama). La regla de LilyPond para la colocación vertical de -los objetos fuera del pentagrama es ponerlos tan cerca del pentagrama -como sea posible pero no tan próximos como para que choquen con otro -objeto. - -LilyPond utiliza la propiedad @code{outside-staff-priority} para -determinar si un grob es un objeto fuera del pentagrama: si -@code{outside-staff-priority} es un número, el grob es un objeto fuera -del pentagrama. Además, @code{outside-staff-priority} informa a -LilyPond en qué orden se debe situar los objetos. - -En primer lugar, LilyPond sitúa todos los objetos que no pertenecen al -exterior del pentagrama. Después ordena los objetos fuera del -pentagrama de acuerdo a su prioridad @code{outside-staff-priority} (en -orden creciente). LilyPond toma los objetos fuera del pentagrama uno -a uno y los coloca de forma que no choquen con ningún objeto que ya -haya sido colocado. Esto es, si dos grobs fuera del pentagrama -compiten por el mismo espacio, el que tiene la prioridad -@code{outside-staff-priority} más baja se colocará más próximo al -pentagrama. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -c4_"Text"\pp -r2. -\once \override TextScript #'outside-staff-priority = #1 -c4_"Text"\pp % this time the text will be closer to the staff -r2. -% by setting outside-staff-priority to a non-number, -% we disable the automatic collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\once \override DynamicLineSpanner #'outside-staff-priority = ##f -c4_"Text"\pp % now they will collide -@end lilypond - -El relleno vertical entre un objeto fuera del pentagrama y los grobs -posicionados previamente se puede controlar con -@code{outside-staff-padding}. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\once \override TextScript #'outside-staff-padding = #0 -a'^"This text is placed very close to the note" -\once \override TextScript #'outside-staff-padding = #3 -c^"This text is padded away from the previous text" -c^"This text is placed close to the previous text" -@end lilypond - -De forma predeterminada, los objetos fuera del pentagrama se colocan -sólo para evitar una colisión horizontal con los grobs posicionados -previamente. Esto puede llevar a situaciones en las que los objetos -se colocan muy próximos entre sí en el sentido horizontal. El espacio -vertical entre pentagramas se puede fijar también de manera que los -objetos fuera del pentagrama se sitúen de forma intercalada. El -establecimiento del relleno horizontal -@code{outside-staff-horizontal-padding} ocasiona que un objeto se -desplace verticalmente para que tal situación no ocurra. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -% the markup is too close to the following note -c4^"Text" -c4 -c''2 -% setting outside-staff-horizontal-padding fixes this -R1 -\once \override TextScript #'outside-staff-horizontal-padding = #1 -c,,4^"Text" -c4 -c''2 -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Horizontal spacing -@section Horizontal spacing - -@cindex horizontal, espaciado -@cindex espaciado horizontal - -@menu -* Horizontal spacing overview:: -* New spacing area:: -* Changing horizontal spacing:: -* Line length:: -* Proportional notation:: -@end menu - - -@node Horizontal spacing overview -@subsection Horizontal spacing overview - -El motor de espaciado traduce las diferencias en las duraciones a -distancias ampliables (@q{muelles}) de distintas longitudes. Las -duraciones más largas reciben un espacio mayor y las duraciones más -cortas reciben menos. Las duraciones más breves reciben un espacio de -tamaño fijo (que se controla mediante @code{shortest-duration-space} -en el objeto @rinternals{SpacingSpanner}). Cuanto más larga es la -duración, más espacio recibe: al doblar una duración se añade un -espacio de tamaño fijo (este tamaño se controla mediante -@code{spacing-increment}) a la nota. - -Por ejemplo, la pieza siguiente contiene numerosas blancas, negras y -corcheas; la corchea va seguida de un ancho de cabeza de blanca (ACB). -La negra va seguida de 2 ACB, la blanca por 3 ACB, etc. - -@lilypond[quote,fragment,verbatim,relative=1] -c2 c4. c8 c4. c8 c4. c8 c8 -c8 c4 c4 c4 -@end lilypond - -Normalmente, el valor de @code{spacing-increment} está establecido en -1.2 espacios de pentagrama, lo que es aproximadamente el ancho de una -cabeza, y @code{shortest-duration-space} está establecido en 2.0, lo -que significa que la nota más breve recibe 2.4 espacios de pentagrama -(2.0 multiplicado por el @code{spacing-increment}) de espacio -horizontal. Este espacio se cuenta a partir del borde izquierdo del -símbolo, de manera que las notas más breves van seguidas generalmente -por un espacio de 1 ACB. - -Si siguiésemos el procedimiento anterior exactamente, entonces la -adición de una sola fusa a una partitura que usa corcheas y -semicorcheas, aumentaría enormemente la anchura de la partitura -completa. La nota más breve ya no es la semicorchea, sino la fusa, -añadiendo así 1 ACB a cada una de las notas. Para evitarlo, la -duración más breve a efectos de espaciado no es la nota más breve de -la partitura, sino la que ocurre con más frecuencia. - -La duración más breve que es más común se determina de la siguiente -manera: en cada compás se determina la duración más breve. La menor -duración más común se toma como base para el espaciado, habiendo -estipulado que esta duración menor siempre debe ser igual o menor que -una corchea. La duración más breve se imprime cuando se ejecuta -@code{lilypond} con la opción @code{--verbose}. - -Estas duraciones también se pueden personalizar. Si establecemos la -@code{common-shortest-duration} en @rinternals{SpacingSpanner}, -entonces éste establece la duración base para el espaciado. La -duración máxima para esta base (normalmente una corchea), se fija a -través de @code{base-shortest-duration}. - -@funindex common-shortest-duration -@funindex base-shortest-duration -@funindex stem-spacing-correction -@funindex spacing - -Las notas que son aún más breves que la nota común más breve van -seguidas por un espacio proporcional a su duración en relación con la -nota común más breve. Así pues, si fuésemos a añadir tan sólo algunas -semicorcheas al ejemplo anterior, irían seguidas por medio ACB: - -@lilypond[quote,fragment,verbatim,relative=2] -c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 -@end lilypond - -En la introducción (véase @rlearning{Engraving}), se explicó que las -direcciones de las plicas influyen en el espaciado. Esto se controla -con la propiedad @code{stem-spacing-correction} en el objeto -@rinternals{NoteSpacing}. Estos se generan para cada uno de los -contextos de @rinternals{Voice}. El objeto @code{StaffSpacing} -(generado en el contexto de @rinternals{Staff}) contiene la misma -propiedad para controlar el espaciado de las líneas de plica o -divisorias. El ejemplo siguiente muestra estas correcciones, una vez -con los valores predeterminados y otra con correcciones exageradas: - -@lilypond[quote,ragged-right] -{ - c'4 e''4 e'4 b'4 | - b'4 e''4 b'4 e''4| - \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 - \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 - c'4 e''4 e'4 b'4 | - b'4 e''4 b'4 e''4| -} -@end lilypond - -Está contemplada la notación proporcional; consulte @ref{Proportional -notation}. - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - -Referencia de funcionamiento interno: -@rinternals{SpacingSpanner}, -@rinternals{NoteSpacing}, -@rinternals{StaffSpacing}, -@rinternals{SeparationItem}. - - -@knownissues - -No existe ningún mecanismo conveniente para sobreescribir el espaciado -manualmente. Se puede usar el siguiente rodeo para insertar espacio -adicional en una partitura. - -@example - \once \override Score.SeparationItem #'padding = #1 -@end example - -No existe ningún rodeo para disminuir la magnitud de la separación. - - -@node New spacing area -@subsection New spacing area - -Se pueden inicar secciones nuevas con diferentes parámetros de -espaciado, con @code{newSpacingSection}. Esto es útil cuando hay -secciones que tienen distinta noción de las notas largas y cortas. - -En el ejemplo siguiente, el cambio de compás introduce una sección -nueva, y por ello las semicorcheas se separan de manera más amplia. - -@lilypond[relative,fragment,verbatim,quote] -\time 2/4 -c4 c8 c -c8 c c4 c16[ c c8] c4 -\newSpacingSection -\time 4/16 -c16[ c c8] -@end lilypond - -La instrucción @code{\newSpacingSection} crea un nuevo objeto -@code{SpacingSpanner}, y de ahí que se puedan usar nuevas -instrucciones de sobreescritura @code{\override} en dicho punto. - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - -Referencia de funcionamiento interno: -@rinternals{SpacingSpanner}. - - -@node Changing horizontal spacing -@subsection Changing horizontal spacing - -Se puede alterar el espaciado horizontal con la propiedad -@code{base-shortest-duration}. Aquí compararemos la misma música, una -vez sin alterar la propiedad, y luego alterándola. Los valores -mayores de @code{ly:make-moment} producen música más pequeña. Observe -que @code{ly:make-moment} construye una duración, por lo que @code{1 -4} es una duración mayor que @code{1 16}. - -@lilypond[verbatim,line-width=12\cm] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } -} -@end lilypond - -@lilypond[verbatim,line-width=12\cm] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 16) - } - } -} -@end lilypond - - -@snippets - -De forma predeterminada, el espaciado en los grupos de valoración -especial depende de varios factores ajenos a la duración (como -alteraciones, cambios de clave, etc.). Para pasar por alto estos -símbolos y forzar un espaciado de duraciones iguales uniforme, use -@code{Score.SpacingSpanner #'uniform-stretching}. Esta propiedad sólo -puede cambiarse al principio de la partitura: - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\new Score \with { - \override SpacingSpanner #'uniform-stretching = ##t -} << - \new Staff{ - \times 4/5 { - c8 c8 c8 c8 c8 - } - c8 c8 c8 c8 - } - \new Staff{ - c8 c8 c8 c8 - \times 4/5 { - c8 c8 c8 c8 c8 - } - } ->> -@end lilypond - -Cuando se establece @code{strict-note-spacing}, las notas se separan -sin tener en cuenta las claves, líneas divisorias ni notas de adorno: - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\override Score.SpacingSpanner #'strict-note-spacing = ##t -\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Line length -@subsection Line length - -@cindex saltos de página -@cindex página, saltos de - -@funindex indent -@funindex line-width -@funindex ragged-right -@funindex ragged-last - -@c Although line-width can be set in \layout, it should be set in paper -@c block, to get page layout right. -@c Setting indent in \paper block makes not much sense, but it works. - -@c Bit verbose and vague, use examples? -Los ajustes más básicos que influyen en el espaciado son @code{indent} -y @code{line-width}. Se definen en el bloque @code{\layout}. -Controlan el sangrado de la primera línea de música y la longitud de -las líneas. - -Si se fija un valor verdadero para @code{ragged-right} en el bloque -@code{\layout}, entonces los sistemas terminan en su longitud -horizontal natural, en lugar de repartirse horizontalmente hasta -llenar toda la línea. Esto es útil para fragmentos cortos, y para -comprobar qué tan apretado es el espaciado natural. - -@cindex diseño de página -@cindex página, disposición de la -@cindex vertical, espaciado - -La opción @code{ragged-last} es similar a @code{ragged-right}, pero -afecta sólo a la última línea de la pieza. No se efectúa ninguna -restricción sobre dicha línea. El resultado es similar al formateo de -los párrafos de texto. En un párrafo, la última línea sencillamente -ocupa su longitud horizontal natural. -@c Note that for text there are several options for the last line. -@c While Knuth TeX uses natural length, lead typesetters use the same -@c stretch as the previous line. eTeX uses \lastlinefit to -@c interpolate between both these solutions. - -@c interesting! -FV - -@example -\layout @{ - indent = #0 - line-width = #150 - ragged-last = ##t -@} -@end example - - -@seealso -Fragmentos de código: -@rlsr{Spacing}. - - -@node Proportional notation -@subsection Proportional notation - -LilyPond contempla la notación proporcional, un tipo de espaciado -horizontal en el que cada nota consume una medida horizontal que -equivale exactamente a su duración rítmica. Este tipo de espaciado -proporcional es comparable al espaciado horizontal hecho sobre un -papel milimetrado. Ciertas partituras del finales del s.XX y -principios del s.XXI utilizan notación proporcional para clarificar -relaciones rítmicas complejas o para facilitar la colocación de líneas -cronométricas u otros gráficos directamente en la partitura. - -LilyPond contempla cinco ajustes distintos para la notación -proporcional, que se pueden usar solos o combinados: - -@itemize -@item @code{proportionalNotationDuration} -@item @code{uniform-stretching} -@item @code{strict-note-spacing} -@item @code{\remove Separating_line_group_engraver} -@item @code{\override PaperColumn #'used = ##t} -@end itemize - -En los ejemplos que siguen, exploramos el uso de estos cinco ajustes -de la notación proporcional y examinamos la forma en que interactúan. - -Comenzamos con el siguiente ejemplo de un solo compás, que usa un -espaciado clásico sin justificación por la derecha. - -@lilypond[quote,verbatim,ragged-right] -\new Score << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -Observe que la blanca que inicia el compás ocupa mucho menos de la -mitad de todo el espacio horizontal del compás. De forma similar, las -semicorcheas y el cinquillo de semicorcheas con que finaliza el compás -ocupan en conjunto mucho más de la mitad de todo el espacio horizontal -del compás. - -En el grabado clásico, este espaciado puede ser exactamente el que -deseamos porque podemos tomar prestado el espacio horizontal de la -blanca y conservar el espacio horizontal a lo largo del compás como un -todo. - -Por otro lado, si quieremos insertar una línea de tiempo graduada o -algún otro gráfico encima o debajo de la partitura, necesitamos la -notación proporcional. Se activa la notación proporcional con el -ajuste @code{proportionalNotationDuration}. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -La blanca al princpio del compás y las notas rápidas de la segunda -mitad del compás ocupan ahora cantidades iguales de espacio -horizontal. Podríamos colocar una línea de tiempo graduada o un -gráfico encima o debajo de este ejemplo. - -El ajuste @code{proportionalNotationDuration} es un ajuste de contexto -que reside en @code{Score}. Recordemos que los ajustes de contexto -aparecen en uno de tres posibles lugares del archivo de entrada: en un -bloque @code{\with}, en un bloque @code{\context}, o directamente -entre la música precedido por la instrucción @code{\set}. Como con -todos los ajustes de contexto, el usuario puede elegir en cuál de los -tres lugares diferentes prefiere establecer el valor de -@code{proportionalNotationDuration}. - -El ajuste @code{proportionalNotationDuration} acepta un solo -argumento, que es la duración de referencia contra el que se aplica el -espaciado de toda la música. La función Scheme de LilyPond -@code{make-moment} acepta dos argumentos: un numerador y un -denominador que, juntos, expresan una cierta fracción de redonda. La -llamada @code{#(ly:make-moment 1 20)}, por tanto, produce una duración -de referencia de una nota de un veinteavo de redonda (semicorcheas de -cinquillo). Los valores @code{#(ly:make-moment 1 16)}, -@code{#(ly:make-moment 1 8)} y @code{#(ly:make-moment 3 97)} son -también posibles. - -¿Cómo seleccionamos la duración correcta de referencia para pasarla a -@code{proportionalNotationDuration}? Normalmente mediante un proceso -de ensayo y error, comenzando con una duración cercana a la más rápida -(o más breve) duración de la pieza. Las duraciones de referencia más -pequeñas aplican un espaciado más suelto; las duraciones de referencia -más largas aplican un espaciado más apretado. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 8) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> - -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 16) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> - -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 32) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -Observe que una duración de referencia demasiado grande (como la -corchea, en el ejemplo de arriba) produce un espaciado excesivamente -apretado y puede ser causa de colisiones entre las cabezas de nota. -Observe también que la notación proporcional en general ocupa más -espacio horizontal que el espaciado clásico. El espaciado -proporcional aporta claridad rítmica a expensas del espacio -horizontal. - -Ahora veremos cómo espaciar de forma óptima grupos de valoración -especial que se superponen. - -Empezamos por examinar qué le ocurre a nuestro ejemplo original, con -espaciado clásico, cuando añadimos un segundo pentagrama con un tipo -diferente de grupo especial. - -@lilypond[quote,verbatim,ragged-right] -\new Score << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -El espaciado es defectuoso porque las notas regularmente espaciadas -del pentagrama inferior no se amplían de manera uniforme. El grabado -clásico incluye muy pocos tresillos complejos y así las reglas del -grabado clásico pueden generar este tipo de resultado. El -establecimiento de @code{proportionalNotationDuration} remedia esta -situación considerablemente. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -Pero si observamos con mucho cuidado podremos ver que las notas de la -segunda mitad del 9-illo están espaciadas de forma ligeramente más -ancha que las de la primera mitad del 9-illo. Para asegurar una -ampliación uniforme, activamos @code{uniform-stretching}, que es una -propiedad de @code{SpacingSpanner}. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) - \override SpacingSpanner #'uniform-stretching = ##t -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -Nuestro ejemplo de dos pentagramase ahora está espaciado exactamente, -nuestras relaciones rítmicas son visualmente claras, y podemos incluir -una línea de tiempo graduada o un gráfico, si queremos. - -Observe que el paquere de notación proporcional de LilyPond espera que -todas las partituras proporcionales establezcan el atributo -@code{uniform-stretching} de @code{SpacingSpanner} al valor ##t. El -establecimiento de @code{proportionalNotationDuration} sin ajustar -también el atributo @code{uniform-stretching} de @code{SpacingSpanner} -al valor ##t causará, por ejemplo, que los desplazamientos -(@code{skips}) consuman una cantidad de espacio horizontal incorrecta. - -El @code{SpacingSpanner} es un grob abstracto que reside en el -contexto de @code{Score}. Como con nuestros ajustes de -@code{proportionalNotationDuration}, las sobreescrituras al -@code{SpacingSpanner} sólo pueden ocurrir en uno de estos tres lugares -dentro del archivo de entrada: en el bloque @code{\with}, en el bloque -@code{\context} o directamente dentro de la escritura de notas. - -De manera predeterminada, sólo hay un @code{SpacingSpanner} por -@code{Score}. Esto supone que, por omisión, @code{uniform-stretching} -está activado para la partitura completa o desactivado para la -partitura completa. Sin embargo, podemos sobreesacibir este -comportamiento y activar distintas posibilidades de espaciado en -distintos lugares de la partitura. Lo hacemos con la instrucción -@code{\newSpacingSection}. Consulte @ref{New spacing area} para más -información. - -A continuación examinamos los efectos del grabador -@code{Separating_line_group_engraver} y veremos por qué las partituras -proporcionales con frecuencia eliminan este grabador. El ejemplo -siguiente muestra que hay una pequeña cantidad de espacio -@qq{preparatorio} justo antes de la primera nota de cada sistema. - -@lilypond[quote,verbatim,ragged-right] -\paper { - indent = #0 -} - -\new Staff { - c'1 - \break - c'1 -} -@end lilypond - - -Esta cantidad de espacio preparatorio es la misma ya sea después de -una indicación de compás, una armadura o una clave. El grabador -@code{Separating_line_group_engraver} es responsable de este espacio. -La eliminación de @code{Separating_line_group_engraver} reduce este -espacio a cero. - -@lilypond[quote,verbatim,ragged-right] -\paper { - indent = #0 -} - -\new Staff \with { - \remove Separating_line_group_engraver -} { - c'1 - \break - c'1 -} -@end lilypond - -Los elementos no musicales como la indicación de compás, la armadura, -la clave y las alteraciones son problemáticos en notación -proporcional. Ninguno de estos elementos tiene duración rítmica. -Pero todos ellos consumen espacio horizontal. Las distintas -partituras proporcionales abordan este problema de distinta manera. - -Sería posible evitar los problemas de espaciado con las armaduras, -simplemente evitando tenerlas. Esta es una opción válida pues casi -todas las partituras proporcionales son música contemporánea. Lo -mismo puede valer para las indicaciones de compás, especialmente para -las partituras que incluyen una línea de tiempo graduada u otro -gráfico. Pero estas partituras son excepcionales y casi todas las -partituras proporcionales incluyen al menos unas pocas indicaciones de -compás. Las claves y las alteraciones son aún más esenciales. - -Así pues ¿qué estrategias existen para el espaciado de los elementos -no musicales en un contexto proporcional? Una buena opción es la -propiedad @code{strict-note-spacing} de @code{SpacingSpanner}. -Compare las dos partituras siguientes: - -@lilypond[quote,verbatim,ragged-right] -\new Staff { - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - c''8 - c''8 - c''8 - \clef alto - d'8 - d'2 -} - -\new Staff { - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - \override Score.SpacingSpanner #'strict-note-spacing = ##t - c''8 - c''8 - c''8 - \clef alto - d'8 - d'2 -} -@end lilypond - -Las dos poartituras son proporcionales, pero el espaciado de la -primera es muy suelto a causa del cambio de clave. Sin embargo, el -espaciado de la segunda partitura se mantiene estricto, porque -@code{strict-note-spacing} está activado. La activación de -@code{strict-note-spacing} hace que el ancho de las indicaciones de -compás, armaduras, cambios de clave y alteraciones no tomen parte en -el algoritmo de espaciado. - -Además de los ajustes dados aquí, hay otros que aparecen con -frecuencia en las partituras proporcionales. Entre ellos están: - -@itemize -@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} -@item @code{tupletFullLength = ##t} -@item @code{\override Beam #'breakable = ##t} -@item @code{\override Glissando #'breakable = ##t} -@item @code{\override TextSpanner #'breakable = ##t} -@item @code{\remove Forbid_line_break_engraver in the Voice context} -@end itemize - -Estos ajustes dan a las notas de adorno un espaciado estricto, -extienden los corchetes de grupo especial para que marquen tanto los -puntos de comienzo como de final, y permiten que los elementos de -extensión se dividan entre los sistemas y las páginas. Consulte las -partes respectivas del manual para ver estos ajustes relacionados. - - -@seealso -Referencia de la notación: -@ref{New spacing area}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@node Fitting music onto fewer pages -@section Fitting music onto fewer pages - -En ocasiones, podemos terminar con uno o dos pentagramas en una -segunda página (o tercera, o cuarta...). Es fastidioso, especialmente -cuando vemos que las páginas anteriores parecen tener espacio de -sobra. - -Al investigar los problemas de disposición, una herramienta de valor -incalculable es @code{annotate-spacing}. Esta instrucción imprime los -valores de un cierto número de variables de espaciado; para ver más -detalles consulte la sección siguiente, @ref{Displaying spacing}. - -@menu -* Displaying spacing:: -* Changing spacing:: -@end menu - - -@node Displaying spacing -@subsection Displaying spacing - -@cindex espaciado, presentación del -@funindex annotate-spacing - -Para presentar gráficamente las dimensiones de las variables de -disposición vertical que pueden verse alteradas por el formato de la -página, establezca @code{annotate-spacing} en el bloque @code{\paper}: - -@c need to have \book{} otherwise we get the separate systems. -hwn -@lilypond[verbatim,quote] -#(set-default-paper-size "a6" 'landscape) -\book { - \score { { c4 } } - \paper { annotate-spacing = ##t } -} -@end lilypond - -@noindent -Todas las dimensiones de disposición se muestran en espacios de -pentagrama, independientemenre de las unidades especificadas en los -bloques @code{\paper} o @code{\layout}. En el ejemplo anterior, -@code{paper-height} tiene un valor de 59.75 @code{staff-spaces} -(espacios de pentagrama), y el @code{staff-size} (tamaño del -pentagrama) es de 20 puntos, el valor predeterminado. Observe que: - -@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm} - -@item 1 punto -@tab = (25.4/72.27) mm - -@item 1 staff-space -@tab = (@code{staff-size})/4 pts -@item -@tab = (@code{staff-size})/4 * (25.4/72.27) mm - -@end multitable - -@noindent -En este caso, un @code{staff-space} equivale aproximadamente a -1.757mm. Así, la medida @code{paper-height} de 59.75 -@code{staff-spaces} equivale a 105 milímetros, la altura de una hoja -@code{a6} en orientación apaisada. Las parejas (@var{a},@var{b}) son -intervalos, donde @var{a} es el límite inferior y @var{b} es el límite -superior del intervalo. - - -@seealso -@ref{Setting the staff size}. - -Fragmentos de código: -@rlsr{Spacing}. - - -@node Changing spacing -@subsection Changing spacing - -La salida de @code{annotate-spacing} revela las dimensiones verticales -con gran detalle. Para ver más detalles acerda de la modificación de -los márgenes y otras variables de diseño de la página, consulte -@ref{Page formatting}. - -Aparte de los márgenes, hay algunas otras opciones para ahorrar espacio: - -@itemize -@item -Forzar los sistemas para que se junten lo más posible entre sí (de -forma que quepan la mayor cantidad de ellos en la página) y al mismo -tiempo estén espaciados de forma que no exista un espacio vacío en la -parte baja del papel. - -@example -\paper @{ - between-system-padding = #0.1 - between-system-space = #0.1 - ragged-last-bottom = ##f - ragged-bottom = ##f -@} -@end example - -@item -Forzar el número de sistemas. Por ejemplo, si la disposición -predeterminada tiene 11 sistemas, la asignación siguiente fuerza una -disposición con 10 sistemas. - -@example -\paper @{ - system-count = #10 -@} -@end example - -@item -Evitar (o reducir en número) los objetos que aumentan el tamaño -vertical de un sistema. Por ejemplo, las repeticiones de primera y -segunda vez (o repeticiones con finales alternativos) necesitan -espacio adicional. Si estas repeticiones se reparten a lo largo de -dos sistemas, ocupan más espacio que un sistema con las casillas de -repetición y otro sistema sin ellas. Por ejemplo, las indicaciones -dinámicas que se @q{salen} de un sistema se pueden acercar al -pentagrama: - -@lilypond[verbatim,quote,relative=1] -e4 c g\f c -\override DynamicText #'extra-offset = #'( -2.2 . 2.0) -e4 c g\f c -@end lilypond - -@item -Alterar el espaciado horizontal por medio de @code{SpacingSpanner}. -Para ver más detalles, consulte @ref{Changing horizontal spacing}. El -ejemplo siguiente ilustra el espaciado predeterminado: - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | - f4 d d2 | - c4 d e f | - g4 g g2 | - g4 e e2 | - } -} -@end lilypond - -@noindent -El ejemplo siguiente modifica @code{common-shortest-duration} de un -valor de @code{1/4} (negra) a @code{1/2} (blanca). La negra es la -nota más común y la más breve del ejemplo, por lo que al agrandar esta -duración se produce un efecto de @q{apretujamiento}: - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | - f4 d d2 | - c4 d e f | - g4 g g2 | - g4 e e2 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'common-shortest-duration = #(ly:make-moment 1 2) - } - } -} -@end lilypond - -@noindent -La propiedad @code{common-shortest-duration} no se puede modificar de -manera dinámica, por lo que se debe situar siemmpre dentro de un -bloque @code{\context} de forma que se aplique a la partitura -completa. - -@end itemize - - -@seealso -Referencia de la notación: -@ref{Page formatting}, -@ref{Changing horizontal spacing}. - -Fragmentos de código: -@rlsr{Spacing}. diff --git a/Documentation/es/user/specialist.itely b/Documentation/es/user/specialist.itely deleted file mode 100644 index 23dfb3118a..0000000000 --- a/Documentation/es/user/specialist.itely +++ /dev/null @@ -1,37 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Specialist notation -@chapter Specialist notation - -Este capítulo explica cómo crear notación musical para instrumentos de -un tipo específico o dentro de estilos específicos. - -@menu -* Vocal music:: -* Keyboard and other multi-staff instruments:: -* Unfretted string instruments:: -* Fretted string instruments:: -* Percussion:: -* Wind instruments:: -* Chord notation:: -* Ancient notation:: -* World music:: -@end menu - -@include vocal.itely -@include keyboards.itely -@include unfretted-strings.itely -@include fretted-strings.itely -@include percussion.itely -@include wind.itely -@include chords.itely -@include ancient.itely -@include world.itely diff --git a/Documentation/es/user/staff.itely b/Documentation/es/user/staff.itely deleted file mode 100644 index dfa29c300c..0000000000 --- a/Documentation/es/user/staff.itely +++ /dev/null @@ -1,1340 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Staff notation -@section Staff notation - -@lilypondfile[quote]{staff-headword.ly} - -Esta sección explica cómo influir sobre la apariencia de los -pentagramas, cómo imprimir partituras con más de un pentagrama y cómo -añadir indicaciones de tempo y notas guía a los pentagramas. - -@menu -* Displaying staves:: -* Modifying single staves:: -* Writing parts:: -@end menu - - -@node Displaying staves -@subsection Displaying staves - -Esta sección describe los distintos métodos de creación de pentagramas -y grupos de ellos. - -@menu -* Instantiating new staves:: -* Grouping staves:: -* Nested staff groups:: -@end menu - - -@node Instantiating new staves -@unnumberedsubsubsec Instantiating new staves - -@cindex nuevo pentagrama -@cindex pauta -@cindex pentagrama, iniciar -@cindex pentagrama, instanciar -@cindex pentagrama, nuevo -@cindex pentagrama de percusión -@cindex pentagrama único -@cindex percusión, pauta de -@cindex pauta de percusión -@cindex gregoriano, canto, pauta de transcripción de -@cindex rítmica, pauta -@cindex tablatura, pauta de - -@funindex \drummode -@funindex drummode - -Las @notation{pautas} y los @notation{pentagramas} o pautas de cinco -líneas se crean con las instrucciones @code{\new} o @code{\context}. -Para ver más detalles, consulte @ref{Creating contexts}. - -El contexto básico de pentagrama es @code{Staff}: - -@lilypond[verbatim,quote,relative=2] -\new Staff { c4 d e f } -@end lilypond - -El contexto @code{DrumStaff} crea una pauta de cinco líneas preparada -para un conjunto de batería típico. Cada instrumento se presenta con -un símbolo distinto. Los instrumentos se escriben en el modo de -percusión que sigue a una instrucción @code{\drummode}, con cada -instrumento identificado por un nombre. Para ver más detalles, -consulte @ref{Percussion staves}. - -@lilypond[verbatim,quote] -\new DrumStaff { - \drummode { cymc hh ss tomh } -} -@end lilypond - -@code{RhythmicStaff} crea una pauta de una sola línea que sólo muestra -las duraciones de la entrada. Se preservan las duraciones reales. -Para ver más detalles, consulte @ref{Showing melody rhythms}. - -@lilypond[verbatim,quote,relative=2] -\new RhythmicStaff { c4 d e f } -@end lilypond - -@code{TabStaff} crea una tablatura con seis cuerdas en la afinación -estándar de guitarra. Para ver más detalles, consulte @ref{Default -tablatures}. - -@lilypond[verbatim,quote,relative=2] -\new TabStaff { c4 d e f } -@end lilypond - -Existen dos contextos de pauta específicos para la notación de música -antigua: @code{MensuralStaff} y @code{VaticanaStaff}. Se describen en -@ref{Pre-defined contexts}. - -@code{GregorianTranscriptionStaff} crea una pauta para la notación -moderna de canto gregoriano. No muestra líneas divisorias. - -@lilypond[verbatim,quote,relative=2] -\new GregorianTranscriptionStaff { c4 d e f e d } -@end lilypond - -Se pueden definir contextos nuevos de pentagrama único. Para ver más -detalles, consulte @ref{Defining new contexts}. - - -@seealso -Glosario musical: -@rglos{staff}, -@rglos{staves}. - -Referencia de la notación: -@ref{Creating contexts}, -@ref{Percussion staves}, -@ref{Showing melody rhythms}, -@ref{Default tablatures}, -@ref{Pre-defined contexts}, -@ref{Staff symbol}, -@ref{Gregorian chant contexts}, -@ref{Mensural contexts}, -@ref{Defining new contexts}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{Staff}, -@rinternals{DrumStaff}, -@rinternals{GregorianTranscriptionStaff}, -@rinternals{RhythmicStaff}, -@rinternals{TabStaff}, -@rinternals{MensuralStaff}, -@rinternals{VaticanaStaff}, -@rinternals{StaffSymbol}. - - -@node Grouping staves -@unnumberedsubsubsec Grouping staves - -@cindex comienzo del sistema -@cindex pentagramas, varios -@cindex corchete vertical -@cindex llave vertical -@cindex pentagramas de piano -@cindex pentagramas, grupo de -@cindex pauta de coro -@cindex sistema, delimitador de comienzo -@cindex coro, sistema de -@cindex piano, sistema de -@cindex piano, pentagramas de -@cindex sistema de piano -@cindex sistema de coro -@cindex system - -Existen varios contextos para agrupar pentagramas individuales -formando sistemas. Cada contexto de agrupación establece el estilo -del delimitador de comienzo del sistema y el comportamiento de las -barras de compás. - -Si no se especifica ningún contexto, se usan las propiedades -predeterminadas: el grupo comienza con una línea vertical y las barras -de compás no están conectadas. - -@lilypond[verbatim,quote,relative=2] -<< - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -En el contexto @code{StaffGroup}, el grupo se inicia con un corchete y -las barras de compás se dibujan atravesando todos los pentagramas. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -En un @code{ChoirStaff} (sistema de coro), el grupo se inicia con un -corchete, pero las barras de compás no están conectadas. - -@lilypond[verbatim,quote,relative=2] -\new ChoirStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -En un @code{GrandStaff} (sistema de piano), el grupo se inicia con una -llave y las barras de compás se conectan entre los pentagramas. - -@lilypond[verbatim,quote,relative=2] -\new GrandStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -El @code{PianoStaff} (sistema de piano) es idéntico a -@code{GrandStaff}, excepto que contempla directamente la impresión del -nombre del instrumento. Para ver más detalles, consulte -@ref{Instrument names}. - -@lilypond[verbatim,quote,relative=2] -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -Cada contexto de grupo de pentagramas fija la propiedad del -delimitador de inicio @code{systemStartDelimiter} a uno de los -siguientes valores: @code{SystemStartBar} (línea), -@code{SystemStartBrace} (llave) o @code{SystemStartBracket} -(corchete). También está disponible un cuarto delimitador, -@code{SystemStartSquare} (corchete en ángulo recto), pero se debe -especificar explícitamente. - -Se pueden definir contextos nuevos de grupo de pentagramas. Para ver -más detalles, consulte @ref{Defining new contexts}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{use-square-bracket-at-the-start-of-a-staff-group.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{display-bracket-with-only-one-staff-in-a-system.ly} - -@cindex diseño «mensurstriche» -@cindex mensurstriche, diseño -@cindex renacimiento, música del -@cindex transcripción de música mensural -@cindex mensural, música, transcripción de - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{mensurstriche-layout-bar-lines-between-the-staves.ly} - -@seealso -Glosario musical: -@rglos{brace}, -@rglos{bracket}, -@rglos{grand staff}. - -Referencia de la notación: -@ref{Instrument names}, -@ref{Defining new contexts}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{Staff}, -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{GrandStaff}, -@rinternals{PianoStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Nested staff groups -@unnumberedsubsubsec Nested staff groups - -@cindex pentagramas anidados -@cindex anidamiento de pentagramas -@cindex sistema, delimitadores de inicio anidados -@cindex anidados, corchetes de pentagrama -@cindex corchetes anidados -@cindex llaves, anidado de - -Los contextos de grupos de pentagramas se pueden anidar hasta una -profundidad arbitraria. En este caso, cada contexto descendiente crea -un corchete nuevo adyacente al corchete de su grupo padre. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c2 c | c2 c } - \new StaffGroup << - \new Staff { g2 g | g2 g } - \new StaffGroup \with { - systemStartDelimiter = #'SystemStartSquare - } - << - \new Staff { e2 e | e2 e } - \new Staff { c2 c | c2 c } - >> - >> ->> -@end lilypond - -Se pueden definir nuevos contextos de grupos de pentagramas anidados. -Para ver más detalles, consulte @ref{Defining new contexts}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{nesting-staves.ly} - - -@seealso -Referencia de la notación: -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Defining new contexts}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Modifying single staves -@subsection Modifying single staves - -Esta sección explica cómo cambiar los atributos específicos de un -pentagrama: por ejemplo, cambiar el número de líneas o el tamaño de la -pauta. También se describen los métodos para comenzar y terminar los -pentagramas, y establecer secciones de ossia. - -@menu -* Staff symbol:: -* Ossia staves:: -* Hiding staves:: -@end menu - - -@node Staff symbol -@unnumberedsubsubsec Staff symbol - -@cindex ajuste del símbolo del pentagrama -@cindex dibujo del símbolo del pentagrama -@cindex pentagrama, ajuste del símbolo del -@cindex símbolo del pentagrama, dibujo del -@cindex detener líneas de pentagrama -@cindex iniciar líneas de pentagrama -@cindex pentagrama, número de líneas -@cindex pentagrama, grosor de las líneas -@cindex líneas, número de, de la pauta -@cindex grosor de líneas de pauta -@cindex adicionales, establecer líneas -@cindex ajuste de líneas adicionales -@cindex espaciado de líneas adicionales -@cindex número de líneas de pauta - -las líneas de un pentagrama pertenecen al grob @code{StaffSymbol}. Se -pueden modificar las propiedades de @code{StaffSymbol} para modificar -la apariencia de una pauta, pero han de modificarse antes de que se -produzca la creación de la misma. - -Se puede cambiar el número de líneas de la pauta. La posición de la -clave y del Do central pueden requerir una modificación para mantener -la correspondencia con la nueva pauta. Para ver una explicación, -consulte la sección de fragmentos de código en @ref{Clef}. - -@lilypond[verbatim,quote,relative=2] -\new Staff \with { - \override StaffSymbol #'line-count = #3 -} -{ d4 d d d } -@end lilypond - -Se puede modificar el grosor de las líneas de la pauta. El grosor de -las líneas adicionales y las plicas también resultan afectados, pues -dependen del grosor de las líneas de la pauta. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'thickness = #3 -} -{ e4 d c b } -@end lilypond - -El grosor de las líneas adicionales se puede fijar de forma -independiente al de las líneas de la pauta. En el ejemplo, los dos -números son factores que multiplican el grosor de las líneas del -pentagrama y su espaciado. Las dos contribuciones se suman para dar -el grosor de las líneas adicionales. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) -} -{ e4 d c b } -@end lilypond - -Se puede cambiar la distancia entre las líneas de la pauta. Este -ajuste afecta también al espaciado de las líneas adicionales. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'staff-space = #1.5 -} -{ a4 b c d } -@end lilypond - -Hay más detalles sobre las propiedades de @code{StaffSymbol} en -@rinternals{staff-symbol-interface}. - -@cindex detener el pentagrama -@cindex iniciar el pentagrama -@cindex pentagrama, iniciar -@cindex pentagrama, detener - -@funindex \startStaff -@funindex startStaff -@funindex \stopStaff -@funindex stopStaff - -Se pueden colocar modificaciones a las propiedades de una pauta en el -medio de una partitura, entre @code{\stopStaff} (detener pauta) y -@code{\startStaff} (iniciar pauta): - -@lilypond[verbatim,quote,relative=2] -c2 c -\stopStaff -\override Staff.StaffSymbol #'line-count = #2 -\startStaff -b2 b -\stopStaff -\revert Staff.StaffSymbol #'line-count -\startStaff -a2 a -@end lilypond - -@noindent -En general, se pueden usar @code{\startStaff} y @code{\stopStaff} para -detener o iniciar un pentagrama en mitad de una partitura. - -@lilypond[verbatim,quote,relative=2] -c4 b a2 -\stopStaff -b4 c d2 -\startStaff -e4 d c2 -@end lilypond - - -@predefined -@code{\startStaff}, -@code{\stopStaff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{making-some-staff-lines-thicker-than-the-others.ly} - - -@seealso -Glosario musical: -@rglos{line}, -@rglos{ledger line}, -@rglos{staff}. - -Referencia de la notación: -@ref{Clef}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{StaffSymbol}, -@rinternals{staff-symbol-interface}. - - -@knownissues - -Al establecer manualmente las posiciones de las líneas de la pauta, -las barras de compás siempre se centran alrededor de la posición 0, -por lo que la distancia máxima entre las barras de compás más externas -en cualquiera de las direcciones, debe ser igual. - - -@node Ossia staves -@unnumberedsubsubsec Ossia staves - -@cindex pentagrama a la francesa -@cindex ossia -@cindex francesa, pentagramas a la -@cindex pauta, escalado de -@cindex escalado de pentagramas - -@funindex \startStaff -@funindex startStaff -@funindex \stopStaff -@funindex stopStaff - -Los pentagramas @notation{Ossia} se pueden preparar mediante la -creación de un pentagrama simultáneo nuevo en la posición adecuada: - -@lilypond[verbatim,quote] -\new Staff \relative c'' { - c4 b d c - << - { c4 b d c } - \new Staff { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -@noindent -Sin embargo, el ejemplo anterior no es lo que normalmente se desea. -Para crear pentagramas de ossia que estén encima del pentagrama -original, que no tengan compás ni clave, y que tengan un tamaño menor -de tipografía se deben usar varios trucos. El Manual de aprendizaje -describe una técnica específica para llegar a este objetivo, empezando -por @rlearning{Nesting music expressions}. - -El ejemplo siguiente utiliza la propiedad @code{alignAboveContext} -para alinear el pentagrama de ossia. Este método es muy conveniente -cuando se necesitan sólo algunos pentagramas de ossia. - -@lilypond[verbatim,quote] -\new Staff = main \relative c'' { - c4 b d c - << - { c4 b d c } - - \new Staff \with { - \remove "Time_signature_engraver" - alignAboveContext = #"main" - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - firstClef = ##f - } - { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -Si se requieren muchos pentagramas de ossia aislados, puede ser más -conveniente la creación de un contexto @code{Staff} vacío con un -@emph{identificador de contexto} específico; después se pueden crear -los pentagramas de ossia @emph{llamando} a este contexto y usando -@code{\startStaff} y @code{\stopStaff} en los puntos deseados. Las -ventajas de este método son más patentes si la pieza es más larga que -en ejemplo siguiente. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - { \stopStaff s1*6 } - - \new Staff \relative c' { - c4 b c2 - << - { e4 f e2 } - \context Staff = ossia { - \startStaff e4 g8 f e2 \stopStaff - } - >> - g4 a g2 \break - c4 b c2 - << - { g4 a g2 } - \context Staff = ossia { - \startStaff g4 e8 f g2 \stopStaff - } - >> - e4 d c2 - } ->> -@end lilypond - -Como alternativa, se puede usar la instrucción -@code{\RemoveEmptyStaffContext} para crear pentagramas de ossia. Este -método es muy conveniente cuando los pentagramas de ossia aparecen -inmediatamente después de un salto de línea. En este caso, no es -necesario en absoluto utilizar silencios de separación; solamente son -necesarios @code{\startStaff} y @code{\stopStaff}. Para ver más -información sobre @code{\RemoveEmptyStaffContext}, consulte -@ref{Hiding staves}. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - \new Staff \relative c' { - c4 b c2 - e4 f e2 - g4 a g2 \break - << - { c4 b c2 } - \context Staff = ossia { - c4 e8 d c2 \stopStaff - } - >> - g4 a g2 - e4 d c2 - } ->> - -\layout { - \context { - \RemoveEmptyStaffContext - \override VerticalAxisGroup #'remove-first = ##t - } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligning-ossias-and-lyrics.ly} - - -@seealso -Glosario musical: -@rglos{ossia}, -@rglos{staff}, -@rglos{Frenched staff}. - -Mannual de aprendizaje: -@rlearning{Nesting music expressions}, -@rlearning{Size of objects}, -@rlearning{Length and thickness of objects}. - -Referencia de la notación: -@ref{Hiding staves}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{StaffSymbol}. - - -@node Hiding staves -@unnumberedsubsubsec Hiding staves - -@cindex francesa, partituras a la -@cindex ocultación de pentagramas -@cindex francesa, pentagrama a la -@cindex pentagrama, ocultación de -@cindex pentagrama vacío -@cindex ocultar pentagramas -@cindex vacío, pentagrama - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext - -Se pueden ocultar las líneas del pentagrama quitando el grabador -@code{Staff_symbol_engraver} del contexto de @code{Staff}. Como -alternativa se puede utilizar la instrucción @code{\stopStaff}. - -@lilypond[verbatim,quote] -\new Staff \with { - \remove "Staff_symbol_engraver" -} -\relative c''' { a8 f e16 d c b a2 } -@end lilypond - -Se pueden ocultar los pentagramas que están vacíos mediante la -instrucción @code{\RemoveEmptyStaffContext} dentro del bloque -@code{\layout}. En las partituras orquestales, este estilo se conoce -como @q{partitura a la francesa}. De forma predeterminada, esta -instrucción oculta y elimina todos los pentagramas vacíos de la -partitura excepto los del primer sistema. - -@warning{Un pentagrama se considera vacío cuando contiene solamente -silencios multicompás, desplazamientos, silencios de separación o una -combinación de estos elementos.} - -@lilypond[verbatim,quote,ragged-right] -\layout { - \context { - \RemoveEmptyStaffContext - } -} - -\relative c' << - \new Staff { - e4 f g a \break - b1 \break - a4 b c2 - } - \new Staff { - c,4 d e f \break - R1 \break - f4 g c,2 - } ->> -@end lilypond - -@cindex ossia - -@noindent -También se puede usar @code{\RemoveEmptyStaffContext} para crear -secciones de ossia para un pentagrama. Para ver más detalles, -consulte @ref{Ossia staves}. - -@cindex ocultar pentagramas de música antigua -@cindex ocultar pentagramas rítmicos - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext -@funindex \AncientRemoveEmptyStaffContext -@funindex AncientRemoveEmptyStaffContext -@funindex \RemoveEmptyRhythmicStaffContext -@funindex RemoveEmptyRhythmicStaffContext - -Se puede usar la instrucción @code{\AncientRemoveEmptyStaffContext} -para ocultar los pentagramas vacíos en contextos de música antigua. -de forma similar, se puede usar -@code{\RemoveEmptyRhythmicStaffContext} para ocultar los contextos -@code{RhythmicStaff} vacíos. - - -@predefined -@code{\RemoveEmptyStaffContext}, -@code{\AncientRemoveEmptyStaffContext}, -@code{\RemoveEmptyRhythmicStaffContext}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{removing-the-first-empty-line.ly} - - -@seealso -Glosario musical: -@rglos{Frenched staff}. - -Referencia de la notación: -@ref{Staff symbol}, -@ref{Ossia staves}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{ChordNames}, -@rinternals{FiguredBass}, -@rinternals{Lyrics}, -@rinternals{Staff}, -@rinternals{VerticalAxisGroup}, -@rinternals{Staff_symbol_engraver}. - - -@knownissues - -La eliminación del grabador @code{Staff_symbol_engraver} también -oculta las barras de compás. Si se fuerza la visibilidad de la barra -de compás, pueden ocurrir errores de formato visual. En este caso, -utilice las siguientes sobreescrituras de valores en vez de quitar el -grabador: - -@example -\override StaffSymbol #'stencil = ##f -\override NoteHead #'no-ledgers = ##t -@end example - - -@node Writing parts -@subsection Writing parts - -Esta sección explica cómo insertar indicaciones de tempo y nombres de -instrumento en una partitura. También se describen métodos para citar -otras voces y dar formato a las notas guía. - -@menu -* Metronome marks:: -* Instrument names:: -* Quoting other voices:: -* Formatting cue notes:: -@end menu - - -@node Metronome marks -@unnumberedsubsubsec Metronome marks - -@cindex tempo -@cindex pulsos por minuto -@cindex metrónomo, indicación de -@cindex metrónomo, indicación de, con texto - -@funindex \tempo -@funindex tempo - -Es muy sencillo escribir una indicación metronómica básica: - -@lilypond[verbatim,quote,relative=1] -\tempo 4 = 120 -c2 d -e4. d8 c2 -@end lilypond - -Se pueden usar indicaciones de tempo con texto: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegretto" -c4 e d c -b4. a16 b c4 r4 -@end lilypond - -La combinación de una indicación metronómica y un texto hace que la -marca de metrónomo se encierre entre paréntesis automáticamente: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegro" 4 = 160 -g4 c d e -d4 b g2 -@end lilypond - -En general, el texto puede ser cualquier objeto de marcado: - -@lilypond[verbatim,quote,relative=2] -\tempo \markup { \italic Faster } 4 = 132 -a8-. r8 b-. r gis-. r a-. r -@end lilypond - -Se puede escribir una indicación metronómica entre paréntesis sin -ninguna indicación textual, escribiendo una cadena vacía en la -entrada: - -@lilypond[verbatim,quote,relative=2] -\tempo "" 8 = 96 -d4 g e c -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-metronome-and-rehearsal-marks-below-the-staff.ly} - -@c perhaps also an example of how to move it horizontally? - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-tempo-without-a-metronome-mark.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-metronome-marks-in-markup-mode.ly} - -Para ver más detalles, consulte @ref{Formatting text}. - - -@seealso -Glosario musical: -@rglos{metronome}, -@rglos{metronomic indication}, -@rglos{tempo indication}, -@rglos{metronome mark}. - -Referencia de la notación: -@ref{Formatting text}, -@ref{MIDI output}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno:: -@rinternals{MetronomeMark}. - - -@node Instrument names -@unnumberedsubsubsec Instrument names - -@cindex instrumento, nombre del -@cindex instrumento, nombre abreviado - -Se pueden imprimir los nombres de los instrumentos en el lado -izquierdo de los pentagramas dentro de los contextos @code{Staff} y -@code{PianoStaff}. El valor de @code{instrumentName} se usa para el -primer pentagrama, y el valor de @code{shortInstrumentName} se usa -para todos los pentagramas siguientes. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"Violin " -\set Staff.shortInstrumentName = #"Vln " -c4.. g'16 c4.. g'16 -\break -c1 -@end lilypond - -También podemos usar el modo de marcado para construir nombres de -instrumento más complicados: - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = \markup { - \column { "Clarinetti" - \line { "in B" \smaller \flat } } } -c4 c,16 d e f g2 -@end lilypond - -@cindex instrument names, centering - -Cuando se agrupan dos o más contextos de pentagrama, los nombres de -instrumento y los nombres cortos aparecen centrados de forma -predeterminada. Para centrar nombres de instrumento de varias líneas, -se debe utilizar @code{\center-column}: - -@lilypond[verbatim,quote,indent=1.5\cm,relative=2] -<< - \new Staff { - \set Staff.instrumentName = #"Flute" - f2 g4 f - } - \new Staff { - \set Staff.instrumentName = \markup \center-column { - Clarinet - \line { "in B" \smaller \flat } - } - c4 b c2 - } ->> -@end lilypond - -@funindex indent -@funindex short-indent - -Sin embargo, si los nombres de instrumento son más largos, éstos no se -centran para un grupo de pentagramas a no ser que se aumenten los -valores del sangrado, @code{indent}, y del sangrado corto, -@code{short-indent}. Para ver más detalles sobre estos ajustes, -consulte @ref{Horizontal dimensions}. - -@lilypond[verbatim,quote,ragged-right] -\layout { - indent = 3.0\cm - short-indent = 1.5\cm -} - -\relative c'' << - \new Staff { - \set Staff.instrumentName = #"Alto Flute in G" - \set Staff.shortInstrumentName = #"Fl." - f2 g4 f \break - g4 f g2 - } - \new Staff { - \set Staff.instrumentName = #"Clarinet" - \set Staff.shortInstrumentName = #"Clar." - c,4 b c2 \break - c2 b4 c - } ->> -@end lilypond - -Para añadir nombres de instrumento a otros contextos (como -@code{GrandStaff}, @code{ChoirStaff} o @code{StaffGroup}), debemos -añadir el grabador @code{Instrument_name_engraver} a dicho -contexto. Para ver más detalles, consulte @ref{Modifying context -plug-ins}. - -@cindex instrument names, changing - -Los nombres de instrumento se pueden cambiar en mitad de una pieza: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"First" -\set Staff.shortInstrumentName = #"one" -c1 c c c \break -c1 c c c \break -\set Staff.instrumentName = #"Second" -\set Staff.shortInstrumentName = #"two" -c1 c c c \break -c1 c c c \break -@end lilypond - -@cindex instrumento, cambio de -@cindex cambio de instrumento - -@funindex \addInstrumentDefinition -@funindex addInstrumentDefinition -@funindex \instrumentSwitch -@funindex instrumentSwitch - -Si se necesita un @emph{cambio} de instrumento, se debe usar -@code{\addInstrumentDefinition} en combinación con -@code{\instrumentSwitch} para crear una lista detallada de los cambios -necesarios para el intercambio. La instrucción -@code{\addInstrumentDefinition} tiene dos argumentos: una cadena -identificativa, y una lista asociativa de propiedades de contexto y -los valores que el instrumento va a usar. Se debe situar en el ámbito -del nivel más alto. @code{\instrumentSwitch} se usa en la expresión -musical para declarar el cambio de instrumento: - -@lilypond[verbatim,quote,ragged-right] -\addInstrumentDefinition #"contrabassoon" - #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) - (shortInstrumentName . "Cbsn.") - (clefGlyph . "clefs.F") - (middleCPosition . 6) - (clefPosition . 2) - (instrumentCueName . ,(make-bold-markup "cbsn.")) - (midiInstrument . "bassoon")) - -\new Staff \with { - instrumentName = #"Bassoon" -} -\relative c' { - \clef tenor - \compressFullBarRests - c2 g' - R1*16 - \instrumentSwitch "contrabassoon" - c,,2 g \break - c,1 ~ | c1 -} -@end lilypond - - -@seealso -Referencia de la notación: -@ref{Horizontal dimensions}, -@ref{Modifying context plug-ins}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{InstrumentName}, -@rinternals{PianoStaff}, -@rinternals{Staff}. - - -@node Quoting other voices -@unnumberedsubsubsec Quoting other voices - -@cindex guías -@cindex citar otras voces -@cindex fragmentos -@cindex notas guía - -@funindex \addQuote -@funindex addQuote -@funindex \quoteDuring -@funindex quoteDuring -@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. - -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{\quoteDuring} se usa para indicar el punto en que -comienza la cita. va seguido 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 de la -voz citada se inserta dentro de la expresión musical: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { s2 } -} -@end lilypond - -Si la expresión musical que se usa para @code{\quoteDuring} contiene -cualquier cosa que no sea un silencio de separación o un silencio -multicompás, ase produce una situación de polifonía, lo que no suele -ser deseable: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { c4 b } -} -@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{Instrument transpositions}. - -@lilypond[verbatim,quote] -clarinet = \relative c'' { - \transposition bes - a4 gis g gis -} -\addQuote "clarinet" { \clarinet } - -\relative c' { - c4 cis \quoteDuring #"clarinet" { s2 } -} -@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{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 - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{quoting-another-voice.ly} - - -@seealso -Referencia de la notación: -@ref{Instrument transpositions}, -@ref{Using tags}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{QuoteMusic}, -@rinternals{Voice}. - - -@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 -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 Formatting cue notes -@unnumberedsubsubsec Formatting cue notes - -@cindex guía, formateo de las notas -@cindex notas guía -@cindex guía, notas -@cindex guía, notas, formato de -@cindex fragmentos -@cindex citar otras voces - -@funindex \cueDuring -@funindex cueDuring - -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: - -@example -\cueDuring #@var{nombre_de_la_parte} #@var{voz} @var{música} -@end example - -Esta instrucción copa los compases correspondientes a partir de -@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 @var{música}, lo que crea una situación -polifónica. El argumento @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. - -@lilypond[verbatim,quote] -oboe = \relative c'' { - r2 r8 d16 f e g f a - g8 g16 g g2. -} -\addQuote "oboe" { \oboe } - -\new Voice \relative c'' { - \cueDuring #"oboe" #UP { R1 } - g2 c, -} -@end lilypond - -@noindent -En el ejemplo anterior, el contexto @code{Voice} se tuvo que declarar -explícitamente, pues en caso contrario toda la expresión musical -habría pertenecido al contexto @code{CueVoice}. - -Se puede imprimir el nombre del instrumento de las notas guía -estableciendo la propiedad @code{instrumentCueName} en el contexto -@code{CueVoice}. - -@lilypond[verbatim,quote] -oboe = \relative c''' { - g4 r8 e16 f e4 d -} -\addQuote "oboe" { \oboe } - -\new Staff \relative c'' << - \new CueVoice \with { - instrumentCueName = "ob." - } - \new Voice { - \cueDuring #"oboe" #UP { R1 } - g4. b8 d2 - } ->> -@end lilypond - -@cindex quitar notas guía -@cindex notas guía, quitar - -@funindex \killCues -@funindex killCues -@funindex \transposedCueDuring -@funindex transposedCueDuring - -Además de imprimir el nombre del instrumento de las notas guía, cuando -éstas finalizan se debe imprimir el nombre del instrumento original, y -cualquier otro cambio introducido por la parte de guía se debe -deshacer. Esto se puede hacer mediante la utilización de -@code{\addInstrumentDefinition} (añadir definición de instrumento) y -@code{\instrumentSwitch} (cambio de instrumento). Para ver un ejemplo -con su explicación, consulte @ref{Instrument names}. - -La instrucción @code{\killCues} quita las notas guía de una expresión -musical. Esto puede ser útil si las notas guía se tienen que eliminar -de una particella pero posiblemente se deban reponer más tarde. - -@lilypond[verbatim,quote] -flute = \relative c''' { - r2 cis2 r2 dis2 -} -\addQuote "flute" { \flute } - -\new Voice \relative c'' { - \killCues { - \cueDuring #"flute" #UP { R1 } - g4. b8 d2 - } -} -@end lilypond - -La instrucción @code{\transposedCueDuring} es útil para añadir guías -instrumentales a partir de un registro completamente diferente. La -sintaxis es similar a la de @code{\cueDuring}, pero necesita un -argumento adicional para especificar la transposición del instrumento -de guía. Para ver más información sobre la transposición, consulte -@ref{Instrument transpositions}. - -@lilypond[verbatim,quote] -piccolo = \relative c''' { - \clef "treble^8" - R1 - c8 c c e g2 - a4 g g2 -} -\addQuote "piccolo" { \piccolo } - -cbassoon = \relative c, { - \clef "bass_8" - c4 r g r - \transposedCueDuring #"piccolo" #UP c,, { R1 } - c4 r g r -} - -<< - \new Staff = "piccolo" \piccolo - \new Staff = "cbassoon" \cbassoon ->> -@end lilypond - -Es posible etiquetar las partes guía con numbres exclusivos de forma -que se puedan procesar de diversas formas. Para ver más detalles -sobre este procedimiento, consulte @ref{Using tags}. - - -@seealso -Referencia de la notación: -@ref{Instrument transpositions}, -@ref{Instrument names}, -@ref{Using tags}. - -Fragmentos de código: -@rlsr{Staff notation}. - -Referencia de funcionamiento interno: -@rinternals{CueVoice}, -@rinternals{Voice}. - - -@knownissues - -Pueden ocurrir colisiones con los silencios si se usa -@code{\cueDuring}, entre los contextos de @code{Voice} y de -@code{CueVoice}. diff --git a/Documentation/es/user/templates.itely b/Documentation/es/user/templates.itely deleted file mode 100644 index 31c366c083..0000000000 --- a/Documentation/es/user/templates.itely +++ /dev/null @@ -1,243 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Templates -@appendix Templates - -Esta sección del manual contiene plantillas con la partitura de LilyPond -ya preparada. Sólo tiene que escribir las notas, lanzar LilyPond y ¡disfrutar de -unas hermosas partituras impresas! - -@c bad node name for ancient notation to avoid conflict -@menu -* Single staff:: -* Piano templates:: -* String quartet:: -* Vocal ensembles:: -* Ancient notation templates:: -* Jazz combo:: -* lilypond-book templates:: -@end menu - - -@node Single staff -@appendixsec Single staff - -@appendixsubsec Notes only - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-only-notes.ly} - - -@appendixsubsec Notes and lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-notes-and-lyrics.ly} - -@appendixsubsec Notes and chords - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes-and-chords.ly} - -@appendixsubsec Notes, lyrics, and chords. - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes,-lyrics,-and-chords.ly} - - -@node Piano templates -@appendixsec Piano templates - -@appendixsubsec Solo piano - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-simple.ly} - -@appendixsubsec Piano and melody with lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-melody-and-lyrics.ly} - -@appendixsubsec Piano centered lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-lyrics.ly} - -@appendixsubsec Piano centered dynamics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-dynamics.ly} - - -@node String quartet -@appendixsec String quartet - -@appendixsubsec String quartet - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-simple.ly} - -@appendixsubsec String quartet parts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-with-separate-parts.ly} - - -@node Vocal ensembles -@appendixsec Vocal ensembles - -@appendixsubsec SATB vocal score - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template.ly} - -@appendixsubsec SATB vocal score and automatic piano reduction - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-automatic-piano-reduction.ly} - -@appendixsubsec SATB with aligned contexts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} - - -@c bad node name to avoid node name conflict -@node Ancient notation templates -@appendixsec Ancient notation templates - -@appendixsubsec Transcription of mensural music - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-mensural-music.ly} - -@appendixsubsec Gregorian transcription template - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-gregorian-music.ly} - -@node Jazz combo -@appendixsec Jazz combo - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{jazz-combo-template.ly} - -@node lilypond-book templates -@appendixsec lilypond-book templates - -Estas plantillas se usan para @code{lilypond-book}. Si no está familiarizado con este -programa, consulte @rprogram{LilyPond-book}. - -@appendixsubsec LaTeX - -Podemos insertar fragmentos de LilyPond dentro de un documento de LaTeX. - -@example -\documentclass[]@{article@} - -\begin@{document@} - -Texto normal en LaTeX. - -\begin@{lilypond@} -\relative c'' @{ -a4 b c d -@} -\end@{lilypond@} - -Más texto en LaTeX. - -\begin@{lilypond@} -\relative c'' @{ -d4 c b a -@} -\end@{lilypond@} -\end@{document@} -@end example - -@appendixsubsec Texinfo - -Podemos insertar fragmentos de LilyPond dentro de Texinfo; de hecho, todo el presente manual -está escrito en Texinfo. - -@example -\input texinfo -@@node Top - -Texto en Texinfo - -@@lilypond[verbatim,fragment,ragged-right] -a4 b c d -@@end lilypond - -Más texto en Texinfo - -@@lilypond[verbatim,fragment,ragged-right] -d4 c b a -@@end lilypond - -@@bye -@end example - - -@appendixsubsec xelatex - -@verbatim -\documentclass{article} -\usepackage{ifxetex} -\ifxetex -%xetex specific stuff -\usepackage{xunicode,fontspec,xltxtra} -\setmainfont[Numbers=OldStyle]{Times New Roman} -\setsansfont{Arial} -\else -%Esto puede estar en blanco si no vamos a usar pdftex -\usepackage[T1]{fontenc} -\usepackage[utf8]{inputenc} -\usepackage{mathptmx}%Times -\usepackage{helvet}%Helvetica -\fi -%Aquí podemos insertar todos los paquetes que pdftex también entiende -\usepackage[spanish,ngerman,finnish,english]{babel} -\usepackage{graphicx} - -\begin{document} -\title{Un breve documento con LilyPond y xelatex} -\maketitle - -Las instrucciones \textbf{font} normales dentro del \emph{text} -funcionan, porque \textsf{están contempladas por \LaTeX{} y XeteX.} -Si quiere usar instrucciones específicas como \verb+\XeTeX+, debe -incluirlas también dentro de un entorno \verb+\ifxetex+. Puede usar -esto para imprimir la instrucción \ifxetex \XeTeX{} \else XeTeX \fi -que no es conocida para el \LaTeX normal. - -Dentro del texto normal puede usar fácilmente instrucciones de -LilyPond, como ésta: - -\begin{lilypond} -{a2 b c'8 c' c' c'} -\end{lilypond} - -\noindent -etcétera. - -Las tipografías de los fragmentos establecidas con LilyPond se tendrán -que ajustar desde dentro del fragmento. Para esto debe leer el manual -UA en cuanto a cómo usar 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 diff --git a/Documentation/es/user/text.itely b/Documentation/es/user/text.itely deleted file mode 100644 index 231d78e007..0000000000 --- a/Documentation/es/user/text.itely +++ /dev/null @@ -1,1405 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Text -@section Text - -@lilypondfile[quote]{text-headword.ly} - -Esta sección explica cómo incluir texto (con diversos estilos de -formateo) en las partituras. - -@noindent -Ciertos elementos de texto de los que no nos ocupamos aquí se tratan -en otras secciones específicas: @ref{Vocal music}, @ref{Titles and -headers}. - -@menu -* Writing text:: -* Formatting text:: -* Fonts:: -@end menu - -@node Writing text -@subsection Writing text - -Esta sección presenta las distintas formas de añadir texto a una -partitura. - -@cindex texto, en otros idiomas -@warning{Para escribir texto con caracteres acentuados y especiales -(como los de idiomas distintos del inglés), sencillamente inserte los -caracteres directamente en el archivo de LilyPond. El archivo se debe -guardar como UTF-8. Para ver más información, consulte @ref{Text -encoding}.} - - -@menu -* Text scripts:: -* Text spanners:: -* Text marks:: -* Separate text:: -@end menu - - -@node Text scripts -@unnumberedsubsubsec Text scripts - -@cindex Texto, inscripciones de -@cindex texto, elementos no vacíos de -@cindex no vacíos, textos -@cindex texto destacado - -Es posible añadir indicaciones de @qq{texto entrecomillado} a una -partitura, como se muestra en el ejemplo siguiente. Tales -indicaciones se pueden colocar también manulamente encima o debajo del -pentagrama utilizando la sintaxis que se describe en @ref{Direction -and placement}. - -@lilypond[quote,verbatim,relative=2] -a8^"pizz." g f e a4-"scherz." f -@end lilypond - -Esta sintaxis es en realidad una abreviatura; se puede añadir -explícitamente a una nota un formateado de texto más complejo -utilizando un bloque @code{\markup}, como se describe bajo -@ref{Formatting text}. - -@lilypond[quote,verbatim,relative=2] -a8^\markup { \italic pizz. } g f e -a4_\markup { \tiny scherz. \bold molto } f -@end lilypond - -De forma predeterminada, las indicaciones de texto no afectan al -espaciado de las notas. Sin embargo, su anchura sí podría tenerse en -cuenta: en el siguiente ejemplo, la primera cadena de texto no afecta -al espaciado, pero la segunda sí afecta. - -@lilypond[quote,verbatim,relative=2] -a8^"pizz." g f e -\textLengthOn -a4_"scherzando" f -@end lilypond - - -@predefined -@funindex \textLengthOn -@code{\textLengthOn}, -@funindex \textLengthOff -@code{\textLengthOff}. -@endpredefined - - -@seealso -Referencia de la notación: -@ref{Formatting text}, -@ref{Direction and placement}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextScript}. - - -@knownissues - -La comprobación necesaria para asegurar que las inscripciones de texto -y la letra de las canciones se mantienen dentro de los márgenes, es -una tarea computacional relativamente grande. Para acelerar el -procesado, LilyPond no realiza estos cálculos de forma predeterminada; -para habilitarlos, utilice - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - - -@node Text spanners -@unnumberedsubsubsec Text spanners - -@cindex text spanners - -Ciertas indicaciones de ejecución, p.ej., @i{rallentando} o -@i{accelerando}, se escriben como texto y se extienden sobre muchos -compases mediante líneas de puntos. Estos objetos, que reciben el -nombre de @q{spanners} u objetos de extensión, se pueden crear dede -una nota hasta otra usando la siguiente sintaxis: - -@lilypond[verbatim,quote,relative=2] -\override TextSpanner #'(bound-details left text) = "rit." -b1\startTextSpan -e,\stopTextSpan -@end lilypond - -@noindent -La cadena de texto que imprimir se establece a través de propiedades -de objeto. De forma predeterminada se imprime en estilo cursiva, pero -se pueden conseguir distintos efectos de formato utilizando bloques -@code{\markup}, como se describe en @ref{Formatting text}. - -@lilypond[quote,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) = - \markup { \upright "rit." } -b1\startTextSpan c -e,\stopTextSpan -@end lilypond - -El estilo de la línea, así como la cadena de texto, se pueden definir -como una propiedad de objeto. Esta sintaxis se describe en @ref{Line -styles}. - - -@predefined -@funindex textSpannerUp -@code{\textSpannerUp}, -@funindex textSpannerDown -@code{\textSpannerDown}, -@funindex textSpannerNeutral -@code{\textSpannerNeutral}. -@endpredefined - - -@seealso -Referencia de la notación: -@ref{Line styles}, -@ref{Dynamics}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextSpanner}. - - -@node Text marks -@unnumberedsubsubsec Text marks - -@cindex coda sobre la línea divisoria -@cindex segno sobre la línea divisoria -@cindex calderón sobre la línea divisoria -@cindex líneas divisorias, símbolos sobre las -@funindex \mark - -Se pueden añadir a la partitura varios elementos de texto con la -sintaxis que se describe en @ref{Rehearsal marks}: - -@c \mark needs to be placed on a separate line (it's not -@c attached to an object like \markup is). -vv - -@lilypond[verbatim,quote,relative=2] -c4 -\mark "Allegro" -c c c -@end lilypond - -Esta sintaxis posibilita colocar cualquier texto sobre la línea -divisoria; se pueden incorporar formatos más complejos para el texto -usando un bloque @code{\markup}, como está explicado en -@ref{Formatting text}: - -@lilypond[quote,verbatim,relative=1] -1 -\mark \markup { \italic { colla parte } } -2 -1 -@end lilypond - -@noindent -Esta sintaxis también permite imprimir símbolos especiales como -llamadas, segno o calderones, especificando el nombre del símbolo -correspondiente como se esplica en @ref{Music notation inside markup}: - -@lilypond[quote,verbatim,relative=2] -2 -\mark \markup { \musicglyph #"scripts.ufermata" } -1 -@end lilypond - -@noindent -Estos objetos se tipografían solamente sobre el pentagrama superior de -la partitura; dependiendo de si están especificados al final o en -medio de un compás, se colocarán sobre la línea divisoria o entre las -notas. Si se especifican en un salto de línea, las llamadas se -imprimen al principio de la línea siguiente. - -@lilypond[quote,verbatim,relative=2] -\mark "Allegro" -c1 c -\mark "assai" \break -c c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-at-the-end-of-a-line-or-a-score.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{aligning-marks-with-various-notation-objects.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-on-every-staff.ly} - - -@seealso -Referencia de la notación: -@ref{Rehearsal marks}, -@ref{Formatting text}, -@ref{Music notation inside markup}, -@ref{The Feta font}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{RehearsalMark}. - - -@knownissues -@c To be removed when Issue 69 in the tracker gets fixed. -vv - -Si se introduce una llamada al final del último compás de la partitura -(donde no hay línea siguiente), la llamada no se imprime en absoluto. - -@node Separate text -@unnumberedsubsubsec Separate text - -@cindex separate text -@cindex standalone text -@cindex top-level text -@cindex text, standalone -@funindex \markup - -Un bloque @code{\markup} puede existir de forma independiente, fuera -de cualquier bloque @code{\score}, como una @qq{expresión de nivel -superior}. Esta sintaxis se describe en @ref{File structure}. - -@lilypond[verbatim,quote] -\markup { - Tomorrow, and tomorrow, and tomorrow... -} -@end lilypond - -@noindent -Esto hace posible imprimir texto separado de la música, lo que es -especialmente útil cuando el archivo de entrada contiene varias -piezas, tal y como se describe en @ref{Multiple scores in a book}. - -@lilypond[quote,verbatim] -\score { - c'1 -} -\markup { - Tomorrow, and tomorrow, and tomorrow... -} -\score { - c'1 -} -@end lilypond - -Los bloques de texto independientes pueden abarcar varias páginas, -posibilitando la impresión de documentos de texto o libros -íntegramente desde LilyPond. Esta funcionalidad y la sintaxis que -requiere se describen en @ref{Multi-page markup}. - - -@predefined -@funindex \markuplines -@code{\markup}, -@code{\markuplines}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{stand-alone-two-column-markup.ly} - -@seealso -Referencia de la notación: -@ref{Formatting text}, -@ref{File structure}, -@ref{Multiple scores in a book}, -@ref{Multi-page markup}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextScript}. - - -@node Formatting text -@subsection Formatting text - -Esta sección presenta los formateados básico y avanzado de texto, -usando la sintaxis específica del modo de @code{\markup}. - -@menu -* Text markup introduction:: -* Selecting font and font size:: -* Text alignment:: -* Graphic notation inside markup:: -* Music notation inside markup:: -* Multi-page markup:: -@end menu - -@node Text markup introduction -@unnumberedsubsubsec Text markup introduction - -@cindex marcado -@cindex texto, marcado de -@cindex marcado de texto -@cindex tipografiar texto -@funindex \markup - -Se usa un bloque @code{\markup} para tipografiar texto con una -sintaxis ampliable que se denomina @qq{modo de marcado}. - -@cindex marcado, expresiones de -@cindex marcado, sintaxis - -La sintaxis del marcado es similar a la sintaxis usual de LilyPond: -una expresión @code{\markup} se encierra entre llaves @code{@{ @dots{} -@}}. Una sola palabra se considera como una expresión mínima, y por -tanto no necesita estar encerrada entre llaves. - -A diferencia de las indicaciones de @qq{texto entrecomillado} simples, -los bloques @code{\markup} pueden contener expresiones anidadas o -instrucciones de marcado, que se introducen utilizando el carácter de -barra invertida @code{\} . Estas instrucciones sólo afectan a la -expresión que sigue inmediatamente. - -@lilypond[quote,verbatim,relative=2] -a1-\markup intenso -a2^\markup { poco \italic più forte } -c e1 -d2_\markup { \italic "string. assai" } -e -b1^\markup { \bold { molto \italic agitato } } -c -@end lilypond - -@cindex caracteres especiales en modo de marcado -@cindex marcado, caracteres especiales en modo de -@cindex reservados, impresión de caracteres -@cindex impresión de caracteres especiales -@cindex texto entrecomillado en modo de marcado - -Un bloque @code{\markup} puede contener también cadenas de texto entre -comillas. Dichas cadenas se tratan como expresiones de texto mínimas, -y por tanto cualquier instrucción de marcado o carácter especial (como -@code{\} y @code{#}) se imprimen literalmente sin afectar al formateo -del texto. Se puede hacer que se impriman las propias comillas si se -les antepone una barra invertida. - -@lilypond[quote,verbatim,relative=2] -a1^"\italic markup..." -a_\markup { \italic "... prints \"italic\" letters!" } -a a -@end lilypond - -Para que se traten como una expresión distinta, es necesario que las -listas de palabras estén encerradas entre comillas o precedidas de una -instrucción. La forma en que están definidas las expresiones de -marcado afecta a cómo se apilan, se centran y se alinean estas -expresiones; en el ejemplo siguiente, la segunda expresión -@code{\markup} se trata igual que la primera: - -@lilypond[quote,verbatim,fragment,relative=1] -c1^\markup { \center-column { a bbb c } } -c1^\markup { \center-column { a { bbb c } } } -c1^\markup { \center-column { a \line { bbb c } } } -c1^\markup { \center-column { a "bbb c" } } -@end lilypond - -Los marcados se pueden almacenar dentro de variables. Estas variables -se pueden adjuntar directamente a las notas: - -@lilypond[quote,verbatim] -allegro = \markup { \bold \large Allegro } - -{ - d''8.^\allegro - d'16 d'4 r2 -} -@end lilypond - - -@noindent -Se puede encontrar una lista exhaustiva de las instrucciones -específicas de @code{\markup} en @ref{Text markup commands}. - - -@seealso -Referencia de la notación: -@ref{Text markup commands}. - -Fragmentos de código: -@rlsr{Text}. - -Archivos de inicio: -@file{scm/@/markup@/.scm}. - - -@knownissues - -Los errores de sintaxis para el modo de marcado a menudo producen -confusión. - - -@node Selecting font and font size -@unnumberedsubsubsec Selecting font and font size - -@cindex fuente tipográfica, cambiar -@funindex \italic -@funindex \bold -@funindex \underline - -Está contemplado de forma básica el cambio de la fuente tipográfica en -el modo de marcado: - -@lilypond[quote,verbatim,relative=2] -d1^\markup { - \bold { Più mosso } - \italic { non troppo \underline Vivo } -} -r2 r4 r8 -d,_\markup { \italic quasi \smallCaps Tromba } -f1 d2 r -@end lilypond - - -@cindex fuente tipográfica, tamaño de -@cindex texto, tamaño de -@funindex \fontsize -@funindex \smaller -@funindex \larger -@funindex \magnify - -El tamaño de los caracteres también se puede alterar de distintas -maneras: - -@itemize -@item -el tamaño de la tipografía se puede definir a una serie de tamaños -estándar predefinidos, - -@item -el tamaño de la tipografía se puede establecer a un valor absoluto, - -@item -el tamaño de la tipografía también se puede cambiar de forma relativa -respecto de su valor anterior. -@end itemize - -@noindent -El ejemplo siguiente ejemplifica estos tres métodos: - -@lilypond[quote,verbatim,relative=1] -f1_\markup { - \tiny espressivo - \large e - \normalsize intenso -} -a^\markup { - \fontsize #5 Sinfonia - \fontsize #2 da - \fontsize #3 camera -} -bes^\markup { (con - \larger grande - \smaller emozione - \magnify #0.6 { e sentimento } ) -} -d c2 r8 c bes a g1 -@end lilypond - -@cindex subíndice -@cindex superíndice -@funindex \super -@funindex \sub - -El texto se puede imprimir como subíndice o como superíndice. De -forma predeterminada se imprimen en un tamaño menor, pero también se -puede usar un tamaño normal: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { 1 \super st movement } - \line { 1 \normal-size-super st movement - \sub { (part two) } } - } -} -@end lilypond - -@cindex fuente tipográfica, familias de - -El modo de marcado ofrece una manera fácil de elegir familias de -tipografía alternativas. A no ser que se especifique de otro modo, se -selecciona automáticamente la fuente predeterminada con serifa, de -tipo romano: en la última línea del ejemplo siguiente, no hay -diferencia entre la primera y la segunda palabra. - -@lilypond[quote,verbatim] -\markup { - \column { - \line { Act \number 1 } - \line { \sans { Scene I. } } - \line { \typewriter { Verona. An open place. } } - \line { Enter \roman Valentine and Proteus. } - } -} -@end lilypond - -@noindent -Algunas de estas familias, usadas para elementos específicos como -números o matices, no ofrecen todos los caracteres, como se explica en -@ref{New dynamic marks} y @ref{Manual repeat marks}. - -@c \concat is actually documented in Align (it is not -@c a font-switching command). But we need it here. -vv - -Si se usan dentro de una palabra, algunas instrucciones de cambio de -tipografía o de formateo pueden producir un espacio vacío no deseado. -Esto se puede solucionar concatenando en uno solo los distintos -elementos de texto: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \concat { 1 \super st } - movement - } - \line { - \concat { \dynamic p , } - \italic { con dolce espressione } - } - } -} -@end lilypond - -Se puede encontrar una lista exhaustiva de instrucciones de cambio y -utilización personalizada de las fuentes tipográficas en @ref{Font}. - -También es posible definir conjuntos personalizados de fuentes, tal y -como se explica en @ref{Fonts}. - - -@predefined -@funindex \teeny -@code{\teeny}, -@funindex \tiny -@code{\tiny}, -@funindex \small -@code{\small}, -@funindex \normalsize -@code{\normalsize}, -@funindex \large -@code{\large}, -@funindex \huge -@code{\huge}, -@funindex \smaller -@code{\smaller}, -@funindex \larger -@code{\larger}. -@endpredefined - - -@seealso -Referencia de la notación: -@ref{Font}, -@ref{New dynamic marks}, -@ref{Manual repeat marks}, -@ref{Fonts}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextScript}. - -Archivos de inicio: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node Text alignment -@unnumberedsubsubsec Text alignment - -@cindex texto alineación de -@cindex alinear texto - -Esta subsección trata sobre cómo colocar texto en el modo de marcado. -Los objetos de marcado también se pueden mover como un todo, usando la -sintaxis que se describe en @rlearning{Moving objects}. - -@c Padding commands should be mentioned on this page, but -@c most of these require \box to be more clearly illustrated. -vv - -@cindex texto, alineación horizontal -@cindex horizontal, alineación de texto -@funindex \left-align -@funindex \center-align -@funindex \right-align - -Los objetos de marcado se pueden alinear de distintas maneras. De -foma predeterminada, una indicación de texto se alinea sobre el borde -izquierdo: en el ejemplo siguiente, no existe diferencia entre los -marcados primero y segundo. - -@lilypond[quote,verbatim,relative=2] -d1-\markup { poco } -f -d-\markup { \left-align poco } -f -d-\markup { \center-align { poco } } -f -d-\markup { \right-align poco } -@end lilypond - -@funindex \halign - -Se puede realizar un ajuste fino de la alineación horizontal usando un -valor numérico: - -@lilypond[quote,verbatim,relative=2] -a1-\markup { \halign #-1 poco } -e' -a,-\markup { \halign #0 poco } -e' -a,-\markup { \halign #0.5 poco } -e' -a,-\markup { \halign #2 poco } -@end lilypond - -@noindent -Ciertos objetos pueden poseer sus propios procedimientos de -alineación, y por tanto no resultan afectados por estas instrucciones. -Es posible mover estos objetos de marcado como un todo, como se -muestra por ejemplo en @ref{Text marks}. - -@cindex texto, alineación vertical -@cindex vertical, alineación de texto -@funindex \raise -@funindex \lower - -La alineación vertical es un poco más compleja. Como se ha dicho más -arriba, los objetos de marcado se pueden mover como un todo; sin -embargo, también es posible mover elementos específicos dentro de un -bloque de marcado. En este caso, el elemento a mover se debe preceder -de un @emph{punto de anclaje}, que puede ser otro elemento de marcado -o un objeto invisible. El ejemplo siguiente ejemplifica estas dos -posibilidades; el último marcado en este ejemplo no tiene punto de -anclaje y por ello no resulta movido. - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \raise #2 { Scène 1 } -} -a' -g_\markup { - \null - \lower #4 \bold { Très modéré } -} -a -d,^\markup { - \raise #4 \italic { Une forêt. } -} -a'4 a g2 a -@end lilypond - -@funindex \general-align -@funindex \translate -@funindex \translate-scaled - -Algunas instrucciones pueden afcetar tanto a la alineación horizontal -como a la vertical de los objetos de texto en el modo de marcado. -Cualquier objeto afectado por estas instrucciones se deben preceder de -un punto de anclaje: - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \translate #'(-1 . 2) "Scène 1" -} -a' -g_\markup { - \null - \general-align #Y #3.2 \bold "Très modéré" -} -a -d,^\markup { - \null - \translate-scaled #'(-1 . 2) \teeny "Une forêt." -} -a'4 a g2 a -@end lilypond - -@funindex \column -@funindex \center-column - -@cindex varias líneas, marcado de -@cindex texto de varias líneas -@cindex columnas, texto en - -Un objeto de marcado puede incluir varias líneas de texto. En el -ejemplo siguiente, cada elemento o expresión se sitúa en su propia -línea, ya sea alineada por la izquierda o centrada: - -@lilypond[quote,verbatim] -\markup { - \column { - a - "b c" - \line { d e f } - } - \hspace #10 - \center-column { - a - "b c" - \line { d e f } - } -} -@end lilypond - -@funindex \fill-line - -@cindex centrar texto en la página - -De forma similar, una lista de elementos o expresiones se puede -repartir de forma que rellene por completo el ancho de la línea -horizontal (si hay un solo elemento, se centra en el papel). A su -vez, estas expresiones pueden incluir texto de varias líneas o -cualquier otra expresión de marcado: - -@lilypond[quote,verbatim] -\markup { - \fill-line { - \line { William S. Gilbert } - \center-column { - \huge \smallCaps "The Mikado" - or - \smallCaps "The Town of Titipu" - } - \line { Sir Arthur Sullivan } - } -} -\markup { - \fill-line { 1885 } -} -@end lilypond - -@funindex \wordwrap -@funindex \justify - -@cindex ajuste de línea, texto con -@cindex justificado, texto - -Las indicaciones de texto largas se pueden también ajustar -automáticamente según un ancho de línea dado. Estarán alineados por -la izquierda o justificados, como se muestra en el ejemplo siguiente. - -@lilypond[quote,verbatim] -\markup { - \column { - \line \smallCaps { La vida breve } - \line \bold { Acto I } - \wordwrap \italic { - (La escena representa el corral de una casa de - gitanos en el Albaicín de Granada. Al fondo una - puerta por la que se ve el negro interior de - una Fragua, iluminado por los rojos resplandores - del fuego.) - } - \hspace #0 - - \line \bold { Acto II } - \override #'(line-width . 50) - \justify \italic { - (Calle de Granada. Fachada de la casa de Carmela - y su hermano Manuel con grandes ventanas abiertas - a través de las que se ve el patio - donde se celebra una alegre fiesta) - } - } -} -@end lilypond - -Hay una lista exhaustiva de instrucciones de alineación de texto en -@ref{Align}. - - -@seealso -Manual de aprendizaje: -@rlearning{Moving objects}. - -Referencia de la notación: -@ref{Align}, -@ref{Text marks}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextScript}. - -Archivos de inicio: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node Graphic notation inside markup -@unnumberedsubsubsec Graphic notation inside markup - -@cindex gráficos, insertar -@cindex dibujar objetos gráficos - -Se puede añadir diversos objetos gráficos a una partitura, utilizando -instrucciones de marcado. - -@funindex \box -@funindex \circle -@funindex \rounded-box -@funindex \bracket -@funindex \hbracket - -@cindex decorar texto -@cindex enmarcar texto - -Ciertas instrucciones de marcado permiten la decoración de elementos -de texto con gráficos, como se muestra en el ejemplo siguiente. - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \circle Jack - \box "in the box" - \null - \line { - Erik Satie - \hspace #3 - \bracket "1866 - 1925" - } - \null - \rounded-box \bold Prelude - } -} -@end lilypond - -@funindex \pad-markup -@funindex \pad-x -@funindex \pad-to-box -@funindex \pad-around - -@cindex relleno alrededor del texto -@cindex texto, relleno de - -Algunas instrucciones pueden requerir un aumento del relleno alrededor -del texto: esto se puede conseguir con algunas instrucciones de -marcado descritas exhaustivamente en @ref{Align}. - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \box "Charles Ives (1874 - 1954)" - \null - \box \pad-markup #2 "THE UNANSWERED QUESTION" - \box \pad-x #8 "A Cosmic Landscape" - \null - } -} -\markup \column { - \line { - \hspace #10 - \box \pad-to-box #'(-5 . 20) #'(0 . 5) - \bold "Largo to Presto" - } - \pad-around #3 - "String quartet keeps very even time, -Flute quartet keeps very uneven time." -} -@end lilypond - -@funindex \combine -@funindex \draw-circle -@funindex \filled-box -@funindex \triangle -@funindex \draw-line -@funindex \arrow-head - -@cindex gráfica, notación -@cindex símbolos no musicales - -Se pueden imprimir otros símbolos o elementos gráficos sin que se -requiera ningún otro texto. De igual manera que en el caso de las -expresiones de marcado, dichos objetos se pueden combinar: - -@lilypond[quote,verbatim] -\markup { - \combine - \draw-circle #4 #0.4 ##f - \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 - \hspace #5 - - \center-column { - \triangle ##t - \combine - \draw-line #'(0 . 4) - \arrow-head #Y #DOWN ##f - } -} -@end lilypond - -@funindex \epsfile -@funindex \postscript - -@cindex insertar gráficos -@cindex imágenes, insertar -@cindex gráficos, insertar -@cindex PostScript - -Entre las funcionalidades gráficas avanzadas se encuentran la -posibilidad de incluir archivos de imagen externos convertidos al -formato de PostScript Encapsulado (@emph{eps}), y la inclusión directa -de gráficos dentro del archivo de entrada, usando código PostScript -nativo. En tal caso puede ser de utilidad la especificación explícita -del tamaño del dibujo, como se ejemplifica a continuación: - -@lilypond[quote,verbatim,relative=1] -c1^\markup { - \combine - \epsfile #X #10 #"./context-example.eps" - \with-dimensions #'(0 . 6) #'(0 . 10) - \postscript #" - -2 3 translate - 2.7 2 scale - newpath - 2 -1 moveto - 4 -2 4 1 1 arct - 4 2 3 3 1 arct - 0 4 0 3 1 arct - 0 0 1 -1 1 arct - closepath - stroke" - } -c -@end lilypond - -Hay una lista exhaustiva de instrucciones específicas de gráficos en -@ref{Graphic}. - - -@seealso -Referencia de la notación: -@ref{Graphic}, -@ref{Editorial annotations}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextScript}. - -Archivos de inicio: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/stencil@/.scm}. - - -@node Music notation inside markup -@unnumberedsubsubsec Music notation inside markup - -Se pueden añadir a la partitura diversos elementos de notación -musical, dentro de un objeto de marcado. - -Las notas y las alteraciones se pueden escribir utilizando -instrucciones de marcado: - -@lilypond[quote,verbatim,relative=2] -a2 a^\markup { - \note #"4" #1 - = - \note-by-number #1 #1 #1.5 -} -b1_\markup { - \natural \semiflat \flat - \sesquiflat \doubleflat -} -\glissando -a1_\markup { - \natural \semisharp \sharp - \sesquisharp \doublesharp -} -\glissando b -@end lilypond - -Otros objetos de notación se pueden también imprimir en el modo de -marcado: - -@lilypond[quote,verbatim,relative=1] -g1 bes -ees-\markup { - \finger 4 - \tied-lyric #"~" - \finger 1 -} -fis_\markup { \dynamic rf } -bes^\markup { - \beam #8 #0.1 #0.5 -} -cis -d-\markup { - \markalphabet #8 - \markletter #8 -} -@end lilypond - -De forma más general, cualquier símbolo musical disponible se puede -incluir por separado dentro de un objeto de marcado, como se -ejemplifica a continuación; hay una lista exhaustiva de estos símbolos -y sus nombres en @ref{The Feta font}. - -@lilypond[quote,verbatim,relative=2] -c2 -c'^\markup { \musicglyph #"eight" } -c,4 -c,8._\markup { \musicglyph #"clefs.G_change" } -c16 -c2^\markup { \musicglyph #"timesig.neomensural94" } -@end lilypond - -@c TODO: add \lookup here? -vv -@c Probably better not to document \lookup, which is useful only for -@c printing braces, and instead document \left-brace and \right-brace -@c when these become available -td - -@noindent -Otra forma de imprimir glifos que no son de texto se encuentra -descrita en @ref{Fonts explained}. - -El modo de marcado también contempla diagramas para instrumentos -específicos: - -@lilypond[quote,verbatim,relative=2] -c1^\markup { - \fret-diagram-terse #"x;x;o;2;3;2;" -} -c^\markup { - \harp-pedal #"^-v|--ov^" -} -c -c^\markup { - \combine - \musicglyph #"accordion.accDiscant" - \combine - \raise #0.5 \musicglyph #"accordion.accDot" - \raise #1.5 \musicglyph #"accordion.accDot" -} -@end lilypond - -@c The accordion diagram is actually taken from a snippet. - -@noindent -Dichos diagramas se encuentran documentados es @ref{Instrument -Specific Markup}. - -Incluso una partitura completa se puede incluir dentro de un objeto de -marcado. En tal caso, el bloque anidado @code{\score} debe contener -un bloque @code{\layout}, como se muestra aquí: - -@lilypond[quote,verbatim,relative=1] -c4 d^\markup { - \score { - \relative c' { c4 d e f } - \layout { } - } -} -e f | -c d e f -@end lilypond - -Hay una lista exhaustiva de instrucciones relacionadas con la notación -musical en @ref{Music}. - - -@seealso -Referencia de la notación: -@ref{Music}, -@ref{The Feta font}, -@ref{Fonts explained}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextScript}. - -Archivos de inicio: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/fret@/-diagrams@/.scm}, -@file{scm/@/harp@/-pedals@/.scm}. - - -@node Multi-page markup -@unnumberedsubsubsec Multi-page markup - -Aunque los objetos de marcado estándar no se pueden dividir, una -sintaxis específica hace posible la introducción de líneas de texto -que pueden abarcar varias páginas: - -@c KEEP LY -@lilypond[quote,verbatim] -\markuplines { - \justified-lines { - Un texto muy largo de líneas justificadas. - ... - } - \wordwrap-lines { - Otro párrafo muy largo. - ... - } - ... -} -@end lilypond - -Esta sintaxis acepta una lista de elementos de marcado, que pueden ser -@itemize -@item -el resultado de una instrucción de lista de marcado, -@item -una lista de marcados, -@item -o una lista de listas de marcado. -@end itemize - -Hay una lista exhaustiva de las instrucciones de lista de marcado en -@ref{Text markup list commands}. - - -@seealso -Referencia de la notación: -@ref{Text markup list commands}, -@ref{New markup list command definition}. - -Fragmentos de código: -@rlsr{Text}. - -Referencia de funcionamiento interno: -@rinternals{TextScript}. - -Archivos de inicio: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@predefined -@funindex \markuplines -@code{\markuplines}. -@endpredefined - - -@node Fonts -@subsection Fonts - -Esta sección presenta la forma en que se manejan las fuentes -tipográficas, y cómo se pueden cambiar en las partituras. - -@menu -* Fonts explained:: -* Single entry fonts:: -* Entire document fonts:: -@end menu - - -@node Fonts explained -@unnumberedsubsubsec Fonts explained - -@cindex Pango -@cindex fuentes tipográficas, explicación -@funindex font-interface - -Las fuentes tipográficas se manejan a través de distintas bibliotecas. -FontConfig se utiliza para detectar las tipografías disponibles en el -sistema; las tipografías seleccionadas se trazan utilizando Pango. - -Las tipografías de notación musical se pueden describir como un -conjunto de glifos específicos, ordenados en varias familias. La -siguiente sintaxis permite usar directamente varias tipografías -@code{feta} de LilyPond distintas a las de texto en el modo de -marcado: - -@lilypond[quote,verbatim,relative=2] -a1^\markup { - \vcenter { - \override #'(font-encoding . fetaBraces) - \lookup #"brace120" - \override #'(font-encoding . fetaNumber) - \column { 1 3 } - \override #'(font-encoding . fetaDynamic) - sf - \override #'(font-encoding . fetaMusic) - \lookup #"noteheads.s0petrucci" - } -} -@end lilypond - -@noindent -Una sintaxis más simple pero más limitada se describe en @ref{Music -notation inside markup}. - -Están disponibles tres familias de tipografías de texto: la tipografía -@emph{romana} (con serifa), que de forma predeterminada es New Century -Schoolbook, la fuente @emph{sans} y la fuente monoespaciada @emph{de -máquina de escribir}. Estas dos últimas familias vienen determinadas -por la instalación de Pango. - -Cada familia puede incluir distintas formas y series. El ejemplo -siguiente muestra la posibilidad de seleccionar familias, formas, -series y tamaños alternativos. El valor que se da a @code{font-size} -es el cambio requerido a partir del tamaño predeterminado. - -@lilypond[quote,verbatim,relative=2] -\override Score.RehearsalMark #'font-family = #'typewriter -\mark \markup "Ouverture" -\override Voice.TextScript #'font-shape = #'italic -\override Voice.TextScript #'font-series = #'bold -d2.^\markup "Allegro" -\override Voice.TextScript #'font-size = #-3 -c4^smaller -@end lilypond - -@noindent -Se puede usar una sintaxis similar en el modo de marcado, aunque en -este caso es preferible usar la sintaxis sencilla que se explica en -@ref{Selecting font and font size}: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \override #'(font-shape . italic) - \override #'(font-size . 4) - Idomeneo, - } - \line { - \override #'(font-family . typewriter) - { - \override #'(font-series . bold) - re - di - } - \override #'(font-family . sans) - Creta - } - } -} -@end lilypond - -Aunque es fácil cambiar entre las fuentes tipográficas -preconfiguradas, también es posible usar otras fuentes, como se -explica en las siguientes secciones: @ref{Single entry fonts} y -@ref{Entire document fonts}. - - -@seealso -Referencia de la notación: -@ref{The Feta font}, -@ref{Music notation inside markup}, -@ref{Selecting font and font size}, -@ref{Font}. - - -@node Single entry fonts -@unnumberedsubsubsec Single entry fonts - -Se puede usar en una partitura cualquier fuente tipográfica que esté -instalada en el sistema operativo y reconocida por parte de -FontConfig, usando la siguiente sintaxis: - -@lilypond[quote,verbatim,relative=2] -\override Staff.TimeSignature #'font-name = #"Charter" -\override Staff.TimeSignature #'font-size = #2 -\time 3/4 - -a1_\markup { - \override #'(font-name . "Vera Bold") - { Vera Bold } -} -@end lilypond - -@funindex show-available-fonts - -La instrucción siguiente presenta una lista de todas las tipografías -disponibles en el sistema operativo: - -@example -lilypond -dshow-available-fonts x -@end example - -@noindent -El último argumento de la instrucción puede ser cualquiera, pero debe -estar presente. - - -@seealso -Referencia de la notación: -@ref{Fonts explained}, -@ref{Entire document fonts}. - -Fragmentos de código: -@rlsr{Text}. - -Archivos de inicio: -@file{lily/@/font@/-config@/-scheme@/.cc}. - - -@node Entire document fonts -@unnumberedsubsubsec Entire document fonts - -Se pueden cambiar las fuentes tipográficas que se usan como -tipografías predeterminadas en las familias @emph{romana}, -@emph{sans-serif} y @emph{monoespaciada}, especificándolas en este -orden como se ve en el ejemplo de abajo. Para leer más explicaciones -sobre las fuentes tipográficas, consulte @ref{Fonts explained}. - -@cindex fuente, establecer la familia de -@funindex make-pango-font-tree - -@lilypond[verbatim,quote] -\paper { - myStaffSize = #20 - #(define fonts - (make-pango-font-tree "Times New Roman" - "Nimbus Sans" - "Luxi Mono" - (/ myStaffSize 20))) -} - -\relative c'{ - c1-\markup { - roman, - \sans sans, - \typewriter typewriter. } -} -@end lilypond - -@c we don't do Helvetica / Courier, since GS incorrectly loads -@c Apple TTF fonts - - -@seealso -Referencia de la notación: -@ref{Fonts explained}, -@ref{Single entry fonts}, -@ref{Selecting font and font size}, -@ref{Font}. - diff --git a/Documentation/es/user/tutorial.itely b/Documentation/es/user/tutorial.itely deleted file mode 100644 index b1e0cd25eb..0000000000 --- a/Documentation/es/user/tutorial.itely +++ /dev/null @@ -1,2146 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ignore -Tutorial guidelines: (different from policy.txt!) -- unless you have a really good reason, use either - @lilypond[verbatim,quote] - or - @lilypond[verbatim,quote,relative=2] - - Don't use any other relative=X commands. - -- use "aes" and "ees" instead of "as" and "es". I know it's not - correct Dutch naming, but let's not confuse people with this - until we get to the Basic notation chapter. - -- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant - portions of the tutorial. - -@end ignore - -@c Translation status: post-GDP - -@node Tutorial -@chapter Tutorial - -Este tutorial comienza con una introducción al lenguaje musical -LilyPond y explica cómo producir música impresa. Después de este -primer contacto, explicaremos cómo crear música impresa de forma -bella, que contenga notación musical usual. - - -@menu -* First steps:: -* Single staff notation:: -* Multiple notes at once:: -* Songs:: -* Final touches:: -@end menu - - -@node First steps -@section First steps - -Esta sección le ofrece una introducción básica al trabajo con LilyPond. - -@menu -* Compiling a file:: -* Simple notation:: -* Working on input files:: -* How to read the manual:: -@end menu - - -@node Compiling a file -@subsection Compiling a file - -@cindex compilación -@cindex ejemplo inicial -@cindex inicial, ejemplo -@cindex mayúsculas, sensible a - -@qq{Compilación} es una palabra que significa procesar un texto de -entrada en formato de LilyPond para producir un archivo que se puede -imprimir y (de manera opcional) un archivo MIDI que se puede -reproducir. El primer ejemplo muestra el aspecto de un sencillo -archivo de texto de entrada. - -Para crear una partitura, escribimos un archivo de texto que detalla -la notación deseada. Por ejemplo, si escribimos - -@example -@{ - c' e' g' e' -@} -@end example - -@noindent -el resultado tiene este aspecto: - -@c in this case we don't want verbatim -@lilypond[quote] -{ - c' e' g' e' -} -@end lilypond - -@warning{la música y la letra escrita en el código de entrada de -LilyPond tiene que ir siempre entre @strong{@{ llaves @}}. Las llaves -deberían también estar rodeadas por espacios a no ser que se -encuentren al principio o al final de una línea, para evitar -ambigüedades. Es posible que se omitan en algunos ejemplos del -presente manual ¡pero no las omita en su propia música! Para ver más -información sobre la presentación de los ejemplos del manual, consulte -@ref{How to read the manual}.} - -Además, la entrada de LilyPond es @strong{sensible a las mayúsculas}. -@code{ @{ c d e @}} es una entrada válida; @code{@{ C D E @}} produce -un mensaje de error. - -@smallspace - -@subheading Entering music and viewing output - -@cindex PDF, archivo -@cindex ver la música -@cindex editores de texto -@cindex ejecutar LilyPond bajo MacOS X -@cindex MacOS X, ejecutar LilyPond -@cindex ejecutar LilyPond bajo Windows -@cindex Windows, ejecutar LilyPond -@cindex ejecutar LilyPond bajo UNIX -@cindex UNIX, ejecutar LilyPond - -En esta sección vamos a explicar qué órdenes hay que ejecutar y cómo, -para ver o imprimir el resultado. - -Tenga en cuenta que están disponibles varios otros editores de texto -con un mejor apoyo a la edición de texto de LilyPond. Para ver más -información, consulte @rprogram{Text editor support}. - -@warning{La primera vez que ejecute LilyPond, tardará un minuto o dos -porque todas las tipografías del sistema han de ser analizadas -previamente. ¡Después de esto, LilyPond será mucho más rápido!} - -@subsubheading MacOS X - -Si hace doble clic sobre @code{LilyPond.app}, se abrirá con un archivo -de ejemplo. Guárdelo, por ejemplo, como @file{prueba.ly} en el -Escritorio, y a continuación procéselo con la orden de menú -@samp{Compilar > Componer archivo}. El PDF resultante se mostrará en -la pantalla. - - -Para posteriores usos de LilyPond, debería comenzar eligiendo -@q{Nuevo} o @q{Abrir}. Tiene que grabar el archivo antes de -componerlo tipográficamente. Si se produce algún error durante el -proceso, observe la ventana del registro. - - -@subsubheading Windows - -En Windows, si hace doble clic sobre el icono de LilyPond que está en -el escritorio, se abrirá un sencillo editor de texto con un archivo de -ejemplo. Guárdelo, por ejemplo, con el nombre @file{prueba.ly} en el -escritorio y después haga doble clic sobre el icono del archivo para -procesarlo (el icono tiene la forma de una corchea). Transcurridos -unos segundos, obtendrá un archivo @file{prueba.pdf} en el -escritorio. Haga doble clic sobre este archivo PDF para ver la -partitura compuesta tipográficamente. Un método alternativo para -procesar el archivo @file{prueba.ly} es arrastrarlo y soltarlo sobre -el icono de LilyPond utilizando el ratón. - -Para editar un archivo @file{.ly} existente, haga clic sobre él con el -botón derecho del ratón y elija @qq{Editar la fuente}. Para empezar -con un archivo vacío, arranque el editor como se describe más arriba y -elija @qq{Nuevo} del menú @qq{Archivo}, o haga clic con el botón -derecho sobre el escritorio y elija @qq{Nuevo..Documento de texto}, -cámbiele el nombre por otro de su elección y cambie la extensión del -archivo a @code{.ly}. Edítelo y luego haga doble click sobre él para -procesarlo como se explicó antes. - -Al hacer doble clic sobre el archivo no sólo se obtiene como resultado -un archivo PDF, sino también un archivo @file{.log} que contiene -cierta información acerca de lo que LilyPond ha hecho con el -archivo. Si se produce algún error, examine este archivo de registro. - - -@subsubheading UNIX - -Cree un archivo de texto con el nombre @file{prueba.ly} y escriba en él: - -@example -@{ - c' e' g' e' -@} -@end example - -Para procesar el archivo @file{prueba.ly} haga lo siguiente: - -@example -lilypond prueba.ly -@end example - -@noindent -Verá algo parecido a: - -@example -lilypond prueba.ly -GNU LilyPond @version{} -Procesando `prueba.ly' -Analizando... -Interpretando la música... -Preprocesando los objetos gráficos... -Buscando el número de páginas ideal... -Disponiendo la música en 1 página... -Dibujando los sistemas... -Escribiendo la página de salida en `prueba.ps'... -Convirtiendo a `prueba.pdf'... -@end example - - -@node Simple notation -@subsection Simple notation - -@cindex sencilla, notación -@cindex notación sencilla - -LilyPond añadirá ciertos elementos de notación de manera automática. -En el siguiente ejemplo hemos especificado solamente cuatro alturas, -pero LilyPond ha añadido la clave, el compás y las duraciones. - -@lilypond[verbatim,quote] -{ - c' e' g' e' -} -@end lilypond - -@noindent -Este comportamiento se puede modificar, pero en general estos valores -automáticos son adecuados. - - -@subheading Pitches - -@cindex alturas -@cindex notas -@cindex relativo, modo -@cindex apóstrofo -@cindex comilla simple -@cindex coma -@cindex alteraciones y modo relativo -@cindex relativo, modo, alteraciones y - -@funindex \relative -@funindex relative -@funindex ' -@funindex , - - -Glosario musical: -@rglos{pitch}, -@rglos{interval}, -@rglos{scale}, -@rglos{middle C}, -@rglos{octave}, -@rglos{accidental}. - -La manera más sencilla de introducir las notas es mediante la -utilización del modo @code{\relative} (relativo). En este modo, se -elige la octava automáticamente bajo la suposición de que la siguiente -nota se colocará siempre lo más cerca de la nota actual, es decir, se -colocará en la octava comprendida dentro de hasta tres espacios de -pentagrama a partir de la nota anterior. Comenzaremos por introducir -el fragmento musical más elemental: una @notation{escala}, donde cada -nota está comprendida dentro de tan sólo un espacio de pentagrama -desde la nota anterior. - -@lilypond[verbatim,quote] -% set the starting point to middle C -\relative c' { - c d e f - g a b c -} -@end lilypond - -La nota inicial es el @notation{Do central}. Cada nota sucesiva se -coloca lo más cerca posible de la nota previa (en otras palabras: la -primera @samp{c} es el Do más cercano al Do central; a éste le sigue -el Re más cercano a la nota previa, y así sucesivamente). Podemos -crear melodías con intervalos mayores, aún sin dejar de utilizar el -modo relativo: - -@lilypond[verbatim,quote] -\relative c' { - d f a g - c b f d -} -@end lilypond - -@noindent -No es necesario que la primera nota de la melodía comience exactamente -en aquella que especifica la altura de inicio. En el ejemplo -anterior, la primera nota (@code{d}) es el Re más cercano al Do -central. - -Añadiendo (o eliminando) comillas simples @code{'} o comas @code{,} a -la instrucción @code{@w{\relative c' @{}}, podemos cambiar la octava -de inicio: - -@lilypond[verbatim,quote] -% one octave above middle C -\relative c'' { - e c a c -} -@end lilypond - -Al principio, el modo relativo puede resultar algo confuso, pero es la -forma más sencilla de introducir la mayor parte de las melodías. -Veamos cómo funciona en la práctica este cálculo relativo. Comenzando -por Si, que está situado en la línea central en clave de Sol, podemos -alcanzar Do, Re y Mi dentro de los tres espacios de pentagrama hacia -arriba, y La, Sol y Fa dentro de los tres espacios hacia abajo. Por -tanto, si la nota siguiente a Si es Do, Re o Mi se supondrá que está -por encima del Si, mientras que La, Sol o Fa se entenderán situados -por debajo. - -@lilypond[verbatim,quote] -\relative c'' { - b c % c is 1 staff space up, so is the c above - b d % d is 2 up or 5 down, so is the d above - b e % e is 3 up or 4 down, so is the e above - b a % a is 6 up or 1 down, so is the a below - b g % g is 5 up or 2 down, so is the g below - b f % f is 4 up or 3 down, so is the f below -} -@end lilypond - -Lo mismo exactamente ocurre cuando cualquiera de esas notas llevan un -sostenido o un bemol. Las @notation{Alteraciones accidentales} se -@strong{ignoran totalmente} en el cálculo de la posición relativa. -Exactamente la misma cuenta de espacios de pentagrama se hace a partir -de una nota situada en cualquier otro lugar del mismo. - -Para añadir intervalos mayores de tres espacios de pentagrama, podemos -elevar la @notation{octava} añadiendo una comilla simple @code{'} (o -apóstrofo) a continuación del nombre de la nota. También podemos -bajar la octava escribiendo una coma @code{,} a continuación del -nombre de la nota. - -@lilypond[verbatim,quote] -\relative c'' { - a a, c' f, - g g'' a,, f' -} -@end lilypond - - -@noindent -Para subir o bajar una nota en dos (¡o más!) octavas, utilizamos -varias @code{''} ó @code{,,} (pero tenga cuidado de utilizar dos -comillas simples @code{''} ¡y no una comilla doble @code{"}@tie{}!) -El valor inicial de @code{@w{\relative c'}} también puede modificarse -de esta forma. -@c " - keeps quotes in order for context-sensitive editor -td - -@subheading Durations (rhythms) - -@cindex duraciones de las notas -@cindex notas, duraciones de -@cindex ritmos -@cindex redonda -@cindex blanca -@cindex negra -@cindex figura con puntillo -@cindex puntillo -@cindex notación de las duraciones - -Glosario musical: -@rglos{beam}, -@rglos{duration}, -@rglos{whole note}, -@rglos{half note}, -@rglos{quarter note}, -@rglos{dotted note}. - -La @notation{duración} de una nota se especifica mediante un número -después del nombre de la nota. @code{1} significa @notation{redonda}, -@code{2} significa @notation{blanca}, @code{4} significa -@notation{negra} y así sucesivamente. Las @notation{barras de -corchea} se añaden automáticamente. - -Si no especifica una duración, se utiliza la duración previa para la -nota siguiente. La figura por omisión de la primera nota es una -negra. - -@lilypond[verbatim,quote] -\relative c'' { - a1 - a2 a4 a8 a - a16 a a a a32 a a a a64 a a a a a a a a2 -} -@end lilypond - -Para crear @notation{notas con puntillo}, añada un punto @code{.} al -número de la duración. La duración de una nota con puntillo se debe -especificar de forma explícita (es decir: mediante un número). - -@lilypond[verbatim,quote] -\relative c'' { - a a a4. a8 - a8. a16 a a8. a8 a4. -} -@end lilypond - - -@subheading Rests - -@cindex silencio -@cindex notación de los silencios - -Glosario musical: -@rglos{rest}. - -Un @notation{silencio} se introduce igual que si fuera una nota con el -nombre @code{r}@tie{}: - -@lilypond[verbatim,quote] -\relative c'' { - a r r2 - r8 a r4 r4. r8 -} -@end lilypond - - -@subheading Time signature - -@cindex compás, indicación de - -@funindex \time -@funindex time - -Glosario musical: -@rglos{time signature}. - -La @notation{indicación de compás} se puede establecer con la orden -@code{\time} : - -@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 Clef - -@cindex clave -@cindex sol, clave de -@cindex do en tercera, clave de -@cindex do en cuarta, clave de -@cindex fa, clave de -@cindex treble -@cindex alto -@cindex tenor -@cindex bass - -@funindex \clef -@funindex clef - -Glosario musical: -@rglos{clef}. - -La @notation{clave} se puede establecer utilizando la orden -@code{\clef} : - -@lilypond[verbatim,quote] -\relative c' { - \clef treble - c1 - \clef alto - c1 - \clef tenor - c1 - \clef bass - c1 -} -@end lilypond - - -@subheading All together - -He aquí un pequeño ejemplo que muestra todos los elementos anteriores -juntos: - -@lilypond[verbatim,quote] -\relative c, { - \time 3/4 - \clef bass - c2 e8 c' g'2. - f4 e d c4 c, r4 -} -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Writing pitches}, -@ruser{Writing rhythms}, -@ruser{Writing rests}, -@ruser{Time signature}, -@ruser{Clef}. - - -@node Working on input files -@subsection Working on input files - -@cindex llaves -@cindex comentarios -@cindex línea, comentario de -@cindex comentario de línea -@cindex bloque, comentario de -@cindex mayúsculas, sensible a -@cindex espacios, insensible a -@cindex expresiones - -@funindex { ... } -@funindex % -@funindex %@{ ... %@} - -Los archivos de entrada de LilyPond son como los archivos fuente de -muchos lenguajes de programación corrientes. Son sensibles a las -mayúsculas e insensibles al número de espacios. Las expresiones se -forman con llaves @{ @} y los comentarios se denotan por un signo de -porcentaje (@code{%}) o por @w{@code{%@{ ... %@}}}. - -Si la frase anterior no tiene sentido para usted ¡no se preocupe! A -continuación explicaremos el significado de todos estos términos: - -@itemize - -@item -@strong{Sensible a las mayúsculas}: tiene importancia el hecho de que -introduzca una letra en minúsculas (p.ej. @w{@code{a, b, s, t}}) o en -mayúsculas (p.ej. @w{@code{A, B, S, T}}). Las notas son minúsculas: -@w{@code{@{ c d e @}}} es una entrada válida; @w{@code{@{ C D E @}}} -produciría un mensaje de error. - -@item -@strong{Insensible al número de espacios}: no importa cuántos espacios -(o saltos de línea) añada. @w{@code{@{ c d e @}}} significa lo mismo -que @w{@code{@{ c @tie{}} @tie{} @tie{} d e @}} y que - -@example -@{ c d - e @} -@end example - -@noindent -Por supuesto, el ejemplo anterior es difícil de leer. Una regla -práctica es sangrar los bloques de código con un carácter de -tabulación, o bien con dos espacios: - -@example -@{ - c d e -@} -@end example - -@item -@strong{Expresiones:} -Todo fragmento de código de entrada para LilyPond ha de llevar -@strong{@{ llaves @}} antes y después de la entrada. Estas llaves le dicen a -LilyPond que la entrada es una expresión musical unitaria, igual que -los paréntesis @samp{()} de las matemáticas. Las llaves deben ir rodeadas -de un espacio a no ser que se encuentren al comienzo o al final de una -línea, para evitar cualquier ambigüedad. - -Una instrucción de LilyPond seguida de una expresión simple entre -llaves (como por ejemplo @w{@code{\relative @{ @}}}) también es una -expresión musical unitaria. - -@cindex comentarios -@cindex comentario de línea -@cindex comentario de bloque -@item -@strong{Comentarios}: -Un comentario es una nota para el lector humano de la entrada musical; -se ignora cuando esta entrada se analiza, de manera que no tiene -ningún efecto sobre la salida impresa. Existen dos tipos de -comentarios. El símbolo de porcentaje @samp{%} introduce un -comentario de línea; todo lo que se encuentra después de @samp{%} en -esa línea se ignora. Por convenio, una línea de comentario se coloca -@emph{por encima} del código a que se refiere el comentario. - -@example -a4 a a a -% este comentario se refiere a las notas Si -b2 b -@end example - -Un comentario de bloque marca una sección entera de entrada musical -como comentario. Todo lo que está encerrado dentro de @code{%@{} y -@code{%@}} se ignora (pero los comentarios no pueden anidarse, lo que -significa que un comentario de bloque no puede incluir otros -comentarios de bloque). Si lo hiciera, el primer @code{%@}} daría por -terminado @emph{los dos} comentarios de bloque. El siguiente -fragmento muestra algunos posibles usos para los comentarios: - -@example -% a continuación van las notas de campanitas del lugar - c4 c g' g a a g2 - -%@{ - Esta línea y las notas que aparecen más abajo - se ignoran, por estar dentro de un - comentario de bloque. - - f f e e d d c2 -%@} -@end example - -@end itemize - - -@node How to read the manual -@subsection How to read the manual - -@cindex cómo leer el manual -@cindex manual, lectura del -@cindex leer el manual -@cindex ejemplos, pulsar -@cindex pulsar sobre los ejemplos -@cindex consejos para construir archivos -@cindex plantillas -@cindex construir archivos, consejos -@cindex archivos, consejos para construir - -Como ya vimos en @ref{Working on input files}, el código de entrada de -LilyPond debe estar rodeado de llaves @{ @} o de @code{@w{\relative -c'' @{ ... @}}}. Durante el resto del presente manual, la mayor parte -de los ejemplos omitirán las llaves. Para reproducir los ejemplos, -deberá copiar y pegar la entrada que se muestra, pero @strong{deberá} -escribir el @code{@w{\relative c'' @{ @}}}, de la siguiente forma: - -@example -\relative c'' @{ - ... aquí va el ejemplo... -@} -@end example - -¿Por qué omitir las llaves? Casi todos los ejemplos del presente -manual se pueden insertar en medio de un fragmento mayor de música. -Para estos ejemplos no tiene ningún sentido añadir @code{@w{\relative -c'' @{ @}}} (¡no debería poner un @code{\relative} dentro de otro -@code{\relative}!); si hubiésemos incluido @code{@w{\relative c'' @{ -@}}} rodeando a cada uno de los ejemplos, usted no podría copiar un -ejemplo pequeño procedente de la documentación y pegarlo dentro de su -propia pieza. La mayoría querrá insertar el código dentro de una -pieza más grande, por eso hemos formateado el manual de esta manera. - - - -@subheading Clickable examples - -Muchas personas aprenden a utilizar programas probando y enredando con -ellos. Esto también puede hacerse con LilyPond. Si hace clic sobre -una imagen en la versión en HTML de este manual, podrá ver la entrada -exacta de LilyPond que se utilizó para generar esa imagen. Pruébelo -sobre esta imagen: - -@c no verbatim here -@lilypond[quote] -\relative c'' { - c-\markup { \bold \huge { Click here. } } -} -@end lilypond - -Cortando y pegando todo lo que se encuentra dentro de la sección -@qq{ly snippet} (fragmento de tipo ly), tendrá una plantilla inicial -para sus experimentos. Para poder ver exactamente el mismo resultado -(con igual anchura de línea y todo), copie todo lo que está desde -@qq{Start cut-&-pastable section} hasta el final del archivo. - - -@seealso -Podrá encontrar más consejos y trucos para la construcción de archivos -de entrada en @ref{Suggestions for writing LilyPond files}; pero quizá -sea mejor leer primero el resto del tutorial. - - -@node Single staff notation -@section Single staff notation - -Esta sección es una introducción a la notación corriente que se utiliza para una voz -o un pentagrama. - -@menu -* Accidentals and key signatures:: -* Ties and slurs:: -* Articulation and dynamics:: -* Adding text:: -* Automatic and manual beams:: -* Advanced rhythmic commands:: -@end menu - - -@node Accidentals and key signatures -@subsection Accidentals and key signatures - -@subheading Accidentals - -@cindex accidentales, alteraciones -@cindex alteraciones -@cindex alteraciones y armaduras -@cindex sostenido -@cindex doble sostenido -@cindex sostenido, doble -@cindex bemol -@cindex doble bemol -@cindex bemol, doble - -@funindex es -@funindex is -@funindex eses -@funindex isis - -Glosario musical: -@rglos{sharp}, -@rglos{flat}, -@rglos{double sharp}, -@rglos{double flat}, -@rglos{accidental}. - -Una nota con @notation{sostenido} se hace añadiendo @code{is} al -nombre, y una nota @notation{bemol} añadiendo @code{es}. Como ha -podido adivinar, un @notation{doble sostenido} o @notation{doble -bemol} se hace añadiendo @code{isis} o @code{eses}. Esta sintaxis se -deriva de las convenciones de nomenclatura de las notas en las lenguas -nórdicas y germánicas como el alemán y el holandés. Para utilizar -otros nombres para las @notation{alteraciones accidentales}, véase -@ruser{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -cis1 ees fisis, aeses -@end lilypond - -@cindex tonalidad, armadura de la, establecer -@subheading Key signatures - -@cindex tonalidad, armadura de -@cindex armadura -@cindex mayor -@cindex menor -@cindex alteraciones y armadura -@cindex contenido frente a presentación -@cindex presentación frente a contenido - -@funindex \key -@funindex key -@funindex \major -@funindex major -@funindex \minor -@funindex minor - -Glosario musical: -@rglos{key signature}, -@rglos{major}, -@rglos{minor}. - -La @notation{armadura de la tonalidad} se establece mediante la -instrucción @code{\key} seguido de una nota y @code{\major} o -@code{\minor}. - -@lilypond[verbatim,quote,relative=2] -\key d \major -a1 -\key c \minor -a -@end lilypond - -@smallspace - -@subheading Warning: key signatures and pitches - -Glosario musical: -@rglos{accidental}, -@rglos{key signature}, -@rglos{pitch}, -@rglos{flat}, -@rglos{natural}, -@rglos{sharp}, -@rglos{transposition}. - -Para determinar si hay que imprimir una @notation{alteración -accidental}, LilyPond examina las notas y la @notation{armadura de la -tonalidad}. La armadura solamente afecta a las alteraciones -@emph{impresas}, ¡no a las propias notas! Esta funcionalidad suele -confundir a los que están empezando con el programa, por ello -permítanos explicarla en detalle. - -LilyPond hace una clara distinción entre el contenido musical y la -presentación. La alteración (@notation{bemol}, @notation{becuadro} o -@notation{sostenido}) de una nota es parte de la altura, y por tanto -es contenido musical. Si una alteración (un signo @emph{impreso} de -bemol, becuadro o sostenido) se imprime o no delante de la nota -correspondiente, es una cuestión de presentación. La presentación es -algo que sigue unas reglas, así que las alteraciones accidentales se -imprimen automáticamente según dichas reglas. Las alturas de las -notas en su música son obras de arte, por tanto no se añadirán -automáticamente, y usted deberá introducir aquello que quiera oír. - -En el siguiente ejemplo: - -@lilypond[verbatim,quote,relative=2] -\key d \major -d cis fis -@end lilypond - -@noindent -ninguna nota lleva una alteración impresa, pero de todas formas usted -debe añadir el @code{is} a @code{cis} y a @code{fis}. - -El texto @code{b} no significa @qq{imprimir una bolita negra en la -tercera línea del pentagrama.} Más bien significa: @qq{hay una nota -Si natural.} En la tonalidad de La bemol mayor, @emph{lleva} una -alteración accidental: - -@lilypond[verbatim,quote,relative=2] -\key aes \major -b -@end lilypond - -Poner todas las alteraciones de forma explícita puede que requiera -algo más de trabajo al teclear, pero la ventaja es que la -@notation{transposición} es más fácil, y las alteraciones se pueden -imprimir siguiendo varias convenciones distintas. Consulte -@ruser{Automatic accidentals} para ver ejemplos de cómo se pueden -imprimir las alteraciones de acuerdo a reglas diferentes. - - -@seealso -Referencia de la notación: -@ruser{Note names in other languages}, -@ruser{Accidentals}, -@ruser{Automatic accidentals}, -@ruser{Key signature}. - -Glosario musical: -@rglos{Pitch names}. - - -@node Ties and slurs -@subsection Ties and slurs - -@cindex ligadura de unión -@cindex ligadura de expresión -@cindex ligadura de fraseo -@cindex fraseo, ligadura de - -@funindex ~ -@funindex ( ... ) -@funindex \( ... \) - -@subheading Ties - -Glosario musical: -@rglos{tie}. - -Una @notation{ligadura de unión} se crea adjuntando un carácter de -tilde curva @code{~} a la primera nota ligada: - -@lilypond[verbatim,quote,relative=2] -g4~ g c2~ -c4 ~ c8 a8 ~ a2 -@end lilypond - -@subheading Slurs - -Glosario musical: -@rglos{slur}. - -Una @notation{ligadura de expresión} es una curva que se traza -abarcando varias notas. Las notas inicial y final se marcan mediante -@code{(} y @code{)} respectivamente. - -@lilypond[verbatim,quote,relative=2] -d4( c16) cis( d e c cis d) e( d4) -@end lilypond - -@subheading Phrasing slurs - -Glosario musical: -@rglos{slur}, -@rglos{phrasing}. - -Las ligaduras que se utilizan para indicar @notation{fraseos} más -largos se pueden introducir mediante @code{\(} y @code{\)}. Puede -haber al mismo tiempo ligaduras de legato y ligaduras de fraseo, pero -no es posible tener legatos simultáneos o ligaduras de expresión -simultáneas. - -@lilypond[verbatim,quote,relative=2] -a8(\( ais b c) cis2 b'2 a4 cis,\) -@end lilypond - -@smallspace - -@cindex ligaduras de expresión frente a ligaduras de unión -@subheading Warnings: slurs vs. ties - -Glosario musical: -@rglos{articulation}, -@rglos{slur}, -@rglos{tie}. - -Una @notation{ligadura de expresión} parece una @notation{ligadura de -unión}, pero tiene un significado distinto. Una ligadura (de unión) -sencillamente hace que la primera nota sea más larga, y sólo se puede -utilizar sobre parejas de notas iguales. Las ligaduras de expresión -indican la @notation{articulación} de las notas, y se pueden utilizar -sobre grupos mayores de notas. Las ligaduras de unión y de expresión -se pueden anidar unas dentro de otras. - -@lilypond[verbatim,quote,relative=2] -c2~( c8 fis fis4 ~ fis2 g2) -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Ties}, -@ruser{Slurs}, -@ruser{Phrasing slurs}. - - -@node Articulation and dynamics -@subsection Articulation and dynamics - -@subheading Articulations - -@cindex articulación -@cindex acento -@cindex staccato - -Glosario musical: -@rglos{articulation}. - -Las @notation{articulaciones} más corrientes se pueden añadir a las -notas utilizando un guión @code{-} seguido de un carácter único: - -@lilypond[verbatim,quote,relative=2] -c-. c-- c-> c-^ c-+ c-_ -@end lilypond - -@subheading Fingerings - -@cindex digitaciones - -@funindex ^ -@funindex _ - -Glosario musical: -@rglos{fingering}. - -De manera similar, las @notation{digitaciones} se pueden añadir a una -nota utilizando un guión (@code{-}) seguido del dígito deseado: - -@lilypond[verbatim,quote,relative=2] -c-3 e-5 b-2 a-1 -@end lilypond - -Las articulaciones y digitaciones normalmente se colocan de forma -automática, pero puede especificar una dirección mediante @code{^} -(encima) o @code{_} (debajo). También puede usar varias -articulaciones sobre la misma nota. Sin embargo, casi siempre es -mejor dejar que LilyPond determine la dirección de las articulaciones. - -@lilypond[verbatim,quote,relative=2] -c_-^1 d^. f^4_2-> e^-_+ -@end lilypond - -@subheading Dynamics - -@cindex dinámica, indicaciones de -@cindex matices -@cindex decrescendo -@cindex crescendo - -@funindex \f -@funindex \ff -@funindex \mp -@funindex \p -@funindex \mf -@funindex \pp -@funindex \< -@funindex < -@funindex \> -@funindex > -@funindex \! -@funindex ! - -Glosario musical: -@rglos{dynamics}, -@rglos{crescendo}, -@rglos{decrescendo}. - -Las expresiones de @notation{matiz} o signos dinámicos se hacen -añadiendo las marcas (con una barra invertida) a la nota: - -@lilypond[verbatim,quote,relative=2] -c\ff c\mf c\p c\pp -@end lilypond - -Los @notation{crescendi} y @notation{decrescendi} comienzan con las -órdenes @code{\<} y @code{\>}. La siguiente indicación de matiz, como -por ejemplo @code{\f}, dará por terminado el (de)crescendo, o bien se -puede usar la instrucción @code{\!}: - -@lilypond[verbatim,quote,relative=2] -c2\< c2\ff\> c2 c2\! -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Articulations and ornamentations}, -@ruser{Fingering instructions}, -@ruser{Dynamics}. - - -@node Adding text -@subsection Adding text - -@cindex texto, añadir -@cindex añadir texto -@cindex marcado - -@funindex \markup -@funindex markup - -Es posible añadir texto a la partitura: - -@lilypond[verbatim,quote,relative=2] -c1^"espr" a_"legato" -@end lilypond - -Se puede aplicar un formateo adicional mediante la instrucción @code{\markup}: - -@lilypond[verbatim,quote,relative=2] -c1^\markup{ \bold espr} -a1_\markup{ - \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p -} -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Writing text}. - - -@node Automatic and manual beams -@subsection Automatic and manual beams - -@cindex barras de corchea -@cindex barrado -@cindex automáticas, barras -@cindex manuales, barras -@cindex barras automáticas -@cindex barras manuales - -@funindex [ ... ] -@funindex [ -@funindex ] -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -Glosario musical: -@rglos{beam}. - -Todas las @notation{barras} de las figuras se dibujan automáticamente: - -@lilypond[verbatim,quote,relative=2] -a8 ais d ees r d c16 b a8 -@end lilypond - -@noindent -Si no le gustan las barras automáticas, pueden forzarse manualmente. -Marque la primera nota que comprende la barra con @code{[} y la última -con @code{]}. - -@lilypond[verbatim,quote,relative=2] -a8[ ais] d[ ees r d] a b -@end lilypond - -Si quiere desactivar completamente el barrado automático o para una -sección extensa de música, utilice la instrucción @code{\autoBeamOff} -para apagarlo y @code{\autoBeamOn} para activarlo de nuevo. - -@lilypond[verbatim,quote,relative=2] -\autoBeamOff -a8 c b4 d8. c16 b4 -\autoBeamOn -a8 c b4 d8. c16 b4 -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Automatic beams}, -@ruser{Manual beams}. - - -@node Advanced rhythmic commands -@subsection Advanced rhythmic commands - -@subheading Partial measure - -@cindex anacrusa -@cindex compás parcial - -@funindex \partial -@funindex partial - -Glosario musical: -@rglos{anacrusis}. - -Una @notation{anacrusa} se introduce con la palabra clave -@code{\partial}. Va seguida de una duración: @code{\partial 4} es una -anacrusa de negra y @code{\partial 8} de corchea. - -@lilypond[verbatim,quote,relative=2] -\partial 8 -f8 c2 d -@end lilypond - -@subheading Tuplets - -@cindex grupos especiales -@cindex tresillos - -@funindex \times -@funindex times - -Glosario musical: -@rglos{note value}, -@rglos{triplet}. - -Los grupos especiales como los tresillos se hacen con la palabra clave -@code{\times}. Requiere dos argumentos: una fracción y un fragmento -de música. La duración del fragmento de música se multiplica por la -fracción. Los tresillos hacen que las notas ocupen 2/3 de su duración -expresa, por tanto un @notation{tresillo} lleva una fracción de 2/3: - -@lilypond[verbatim,quote,relative=2] -\times 2/3 { f8 g a } -\times 2/3 { c r c } -\times 2/3 { f,8 g16[ a g a] } -\times 2/3 { d4 a8 } -@end lilypond - -@subheading Grace notes - -@cindex notas de adorno -@cindex acciaccatura -@cindex appoggiatura - -@funindex \grace -@funindex grace -@funindex \acciaccatura -@funindex acciaccatura -@funindex \appoggiatura -@funindex acciaccatura - -Glosario musical: -@rglos{grace notes}, -@rglos{acciaccatura}, -@rglos{appoggiatura}. - -Las @notation{notas de adorno} se crean con la instrucción -@code{\grace}, aunque también se pueden conseguir precediendo una -expresión musical por la palabra clave @code{\appoggiatura} o -@code{\acciaccatura} - -@lilypond[verbatim,quote,relative=2] -c2 \grace { a32[ b] } c2 -c2 \appoggiatura b16 c2 -c2 \acciaccatura b16 c2 -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Grace notes}, -@ruser{Tuplets}, -@ruser{Upbeats}. - - -@node Multiple notes at once -@section Multiple notes at once - -Esta sección es una introducción a las notas simultáneas: varios -instrumentos, varios pentagramas para un solo instrumento -(p.ej. piano) y acordes. - -La palabra @qq{polifonía} en música hace referencia al hecho de tener -más de una voz en un momento determinado dentro de una pieza musical. -La palabra @qq{polifonía} en LilyPond se refiere al hecho de tener más -de una voz en el mismo pentagrama. - -@menu -* Music expressions explained:: -* Multiple staves:: -* Staff groups:: -* Combining notes into chords:: -* Single staff polyphony:: -@end menu - - -@node Music expressions explained -@subsection Music expressions explained - -@cindex musical, expresión -@cindex expresión musical -@cindex compuesta, expresión musical -@cindex musical, expresión, compuesta - -En los archivos de entrada de LilyPond, la música se representa -mediante @emph{expresiones musicales}. Una sola nota es una expresión -musical: - -@lilypond[verbatim,quote,relative=2] -a4 -@end lilypond - -Al encerrar un grupo de notas dentro de llaves creamos una -@emph{expresión musical compuesta}. Aquí hemos creado una expresión -musical compuesta con dos notas: - -@lilypond[verbatim,quote,relative=2] -{ a4 g4 } -@end lilypond - -Si colocamos un grupo de expresiones musicales (p.ej.: notas) dentro -de llaves, eso significa que se encuentran en secuencia (es decir, -cada una sigue a la anterior). El resultado es otra expresión -musical: - -@lilypond[verbatim,quote,relative=2] -{ { a4 g } f g } -@end lilypond - -@subheading Analogy: mathematical expressions - -Este mecanismo es semejante a las fórmulas matemáticas: una fórmula -grande se construye combinando fórmulas pequeñas. Dichas fórmulas se -llaman expresiones, y su definición es recursiva de tal forma que se -pueden construir expresiones de un tamaño y complejidad arbitrarios. -Por ejemplo: - -@example -1 - -1 + 2 - -(1 + 2) * 3 - -((1 + 2) * 3) / (4 * 5) -@end example - -Ésta es una secuencia de expresiones donde cada expresión se encuentra -contenida dentro de la siguiente, más grande. Las expresiones más -simples son números, y las mayores se hacen combinando expresiones -mediante operadores (como @code{+}, @code{*} y @code{/}) y paréntesis. -Del mismo modo que las expresiones matemáticas, las expresiones -musicales se pueden anidar a una profundidad arbitraria, lo que se -hace necesario para músicas complejas como las partituras polifónicas. - - -@subheading Simultaneous music expressions: multiple staves - -@cindex varios pentagramas -@cindex pentagramas, varios -@cindex polifonía -@cindex combinar expresiones en paralelo -@cindex paralelas, expresiones -@cindex expresiones paralelas -@cindex relativo, modo, música simultánea y -@cindex relativo, modo, expresiones paralelas y -@cindex simultánea, música, modo relativo y -@cindex paralelas, expresiones, modo relativo y - -@funindex << -@funindex >> -@funindex << ... >> - -Glosario musical: -@rglos{polyphony}. - -Esta técnica es muy útil para la música @notation{polifónica}. Para -introducir música con más voces o con más pentagramas, lo que hacemos -es combinar varias expresiones en paralelo. Para indicar que dos -voces se deben interpretar al mismo tiempo, sencillamente introduzca -una combinación simultánea de expresiones musicales. Una expresión -musical @q{simultánea} se forma encerrando las expresiones dentro de -@code{<<} y @code{>>}. En el ejemplo que sigue, tres secuencias (cada -una de las cuales contiene dos notas diferentes) se combinan de forma -simultánea: - -@lilypond[verbatim,quote] -\relative c'' { - << - { a4 g } - { f e } - { d b } - >> -} -@end lilypond - -Tenga en cuenta que hemos sangrado cada nivel jerárquico de la entrada -con un margen distinto. A LilyPond no le importa cuánto (o cuán poco) -espacio haya al comienzo de una línea, pero el establecimiento de -márgenes distintos dentro del código de LilyPond, de esta forma, lo -hace mucho más fácil de leer por nosotros los seres humanos. - -@warning{cada nota se entiende relativa a la nota anterior de la -entrada, no relativa a la @code{c''} dentro de la instrucción inicial -@code{@bs{}\relative}.} - - -@subheading Simultaneous music expressions: single staff - -Para determinar el número de pentagramas en una pieza, LilyPond -examina la primera expresión. Si ésta consiste en una sola nota, hay -un solo pentagrama; si hay una expresión simultánea, hay más de un -pentagrama. - -@lilypond[verbatim,quote] -\relative c'' { - c2 <> - << { e f } { c <> } >> -} -@end lilypond - -@node Multiple staves -@subsection Multiple staves - -@cindex varios pentagramas -@cindex pentagramas, varios -@cindex contexto -@cindex contexto de notación -@cindex notación, contexto de - -@funindex \new Staff -@funindex new Staff -@funindex Staff -@funindex \new -@funindex new -@funindex Score -@funindex Voice -@funindex Lyrics -@funindex ChordNames - -Como ya hemos visto en @ref{Music expressions explained}, los -archivos de entrada para LilyPond se construyen a base de expresiones -musicales. Si la partitura comienza con expresiones musicales -simultáneas, LilyPond crea varios pentagramas. Sin embargo es más -fácil ver lo que ocurre si creamos cada uno de los pentagramas de -forma explícita. - -Para imprimir más de un pentagrama, cada fragmento de música que -constituye un pentagrama se marca escribiendo @code{\new Staff} antes -de él. Estos elementos @code{Staff} se combinan después en paralelo -con @code{<<} y @code{>>}: - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - -La instrucción @code{\new} inaugura un @q{contexto de notación}. Un -contexto de notación es un entorno dentro del que se interpretan los -acontecimientos musicales (como las notas o las instrucciones -@code{\clef}). Para piezas sencillas, tales contextos de notación se -crean automáticamente. Para piezas más complicadas, es mejor marcar -los contextos de forma explícita. - -Existen varias clases de contextos. @code{Score}, @code{Staff} y -@code{Voice} manejan la notación melódica, mientras que @code{Lyrics} -se ocupa de los textos cantados y @code{ChordNames} imprime los -nombres de los acordes. - -En términos de sintaxis, la anteposición de @code{\new} a una -expresión musical crea una expresión musical mayor. Es semejante al -signo menos de las matemáticas. La fórmula @math{(4+5)} es una -expresión, por tanto @math{-(4+5)} es una expresión más amplia. - -Las indicaciones de compás escritas en un pentagrama afectan al resto -de ellos, de forma predeterminada. En cambio, la armadura de la -tonalidad de un pentagrama @emph{no} afecta a los otros pentagramas. -Este comportamiento predeterminado diferente es a causa de que las -partituras con instrumentos transpositores son más comunes que las -partituras polirrítmicas. - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble \key d \major \time 3/4 c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - -@node Staff groups -@subsection Staff groups - -@cindex sistema de piano -@cindex piano, sistema de -@cindex sistema de coro -@cindex coro, sistema de -@cindex grupo de pentagramas -@cindex pentagramas, grupo de - -@funindex PianoStaff -@funindex GrandStaff -@funindex ChoirStaff - -Glosario musical: -@rglos{brace}. - -La música para piano se compone tipográficamente en forma de dos -pentagramas unidos mediante una @notation{llave}. El aspecto impreso -de este sistema de pentagramas se parece al ejemplo polifónico que -aparece en @ref{Multiple staves}, pero en esta ocasión la expresión -completa se coloca dentro de un @code{PianoStaff}: - -@example -\new PianoStaff << - \new Staff @dots{} - \new Staff @dots{} ->> -@end example - -He aquí un pequeño ejemplo: - -@lilypond[verbatim,quote] -\relative c'' { - \new PianoStaff << - \new Staff { \time 2/4 c4 e g g, } - \new Staff { \clef bass c,, c' e c } - >> -} -@end lilypond - -Otros grupos de pentagramas se declaran mediante @code{\new -GrandStaff}, que es apropiado para partituras orquestales, y -@code{\new ChoirStaff}, que es apropiado para partituras vocales. -Cada uno de estos grupos de pautas forma un tipo de contexto distinto, -que produce la llave a la izquierda y que también controla el alcance -de las líneas divisorias. - - -@seealso -Referencia de la notación: -@ruser{Keyboard and other multi-staff instruments}, -@ruser{Displaying staves}. - - -@node Combining notes into chords -@subsection Combining notes into chords - -@cindex acordes -@cindex duraciones de notas en acordes - -@funindex < -@funindex > -@funindex < ... > - -Glosario musical: -@rglos{chord}. - -Hemos visto con anterioridad cómo se pueden combinar las notas -formando @notation{acordes} que indican que son simultáneas, -encerrándolas entre dobles ángulos. Sin embargo, la forma normal de -indicar un acorde es encerrar las notas entre ángulos -@emph{sencillos}. Observe que todas las notas de un acorde deben -tener la misma duración, y que la duración se escribe después del -ángulo de cierre. - - -@lilypond[verbatim,quote,relative=2] -r4 4 2 -@end lilypond - -Debemos pensar en los acordes como algo casi equivalente a las notas -sencillas: casi todo lo que se puede adjuntar a una nota se puede -adjuntar también a un acorde, y todo debe ir @emph{por fuera} de los -ángulos. Por ejemplo, puede combinar marcas como barras y ligaduras, -con acordes. Tan sólo debe recordar que se escriben por fuera de los -ángulos. - -@lilypond[verbatim,quote,relative=2] -r4 8[ ]~ 2 -r4 8( \> 4 \!) -@end lilypond - - -@node Single staff polyphony -@subsection Single staff polyphony - -@cindex polifonía -@cindex varias voces -@cindex voces, más, en un solo pentagrama -@cindex único, polifonía en pentagrama -@cindex separador, silencio -@cindex silencio separador - -@funindex << ... \\ ... >> -@funindex << -@funindex \\ -@funindex >> - -Cuando distintas líneas melódicas se combinan sobre un solo -pentagrama, se imprimen como voces polifónicas; cada voz lleva sus -propias plicas, ligaduras y barras de corchea, y la voz superior tiene -las plicas hacia arriba mientras que la voz inferior las tiene hacia -abajo. - -La introducción de estas partes se hace escribiendo cada voz en forma -de secuencia (con @w{@code{@{...@}}}) y combinando éstas de forma -simultánea, separando las voces con @code{\\} - -@lilypond[verbatim,quote,relative=2] -<< - { a4 g2 f4~ f4 } \\ - { r4 g4 f2 f4 } ->> -@end lilypond - -Para el tipografiado de música polifónica, puede ser conveniente la -utilización de silencios separadores, o sea, silencios que no aparecen -impresos. Son muy útiles para rellenar voces que temporalmente no -están cantando. He aquí el mismo ejemplo con un silencio separador -(@code{s}) en vez de un silencio normal (@code{r}): - -@lilypond[verbatim,quote,relative=2] -<< - { a4 g2 f4~ f4 } \\ - { s4 g4 f2 f4 } ->> -@end lilypond - -@noindent -Una vez más, las expresiones de este tipo se pueden anidar de forma arbitraria. - -@lilypond[verbatim,quote,relative=2] -<< - \new Staff << - { a4 g2 f4~ f4 } \\ - { s4 g4 f2 f4 } - >> - \new Staff << - \clef bass - { 1 ~ 4 } \\ - { e,,4 d e2 ~ e4} - >> ->> -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Simultaneous notes}. - - -@node Songs -@section Songs - -En esta sección presentamos cómo elaborar música vocal y hojas de -canción sencillas. - -@menu -* Setting simple songs:: -* Aligning lyrics to a melody:: -* Lyrics to multiple staves:: -@end menu - - -@node Setting simple songs -@subsection Setting simple songs - -@cindex letra -@cindex canciones - -@funindex \addlyrics -@funindex addlyrics - -Glosario musical: -@rglos{lyrics}. - -Presentamos a continuación el inicio de la melodía de una canción -infantil, @qq{Girls and boys come out to play}: - -@lilypond[verbatim,quote] -\relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 -} -@end lilypond - -La @notation{letra} se puede asignar a esas notas, combinando ambas -con la palabra clave @code{\addlyrics}. La letra se escribe separando -cada sílaba mediante un espacio. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - } - \addlyrics { - Girls and boys come out to play, - } ->> -@end lilypond - -Observe las llaves rodeando tanto la música como la letra, y los -ángulos dobles @w{@code{<< ... >>}} alrededor del fragmento entero -para expresar que la música y la letra han de suceder al mismo tiempo. - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@cindex melisma -@cindex línea de extensión -@cindex guión -@cindex guión bajo -@cindex letra, alineación de -@cindex alineación de la letra -@cindex letra, palabras polisílabas -@cindex palabras polisílabas en la letra - -Glosario musical: -@rglos{melisma}, -@rglos{extender line}. - -La siguiente línea de la canción infantil es @notation{The moon doth -shine as bright as day}. A continuación vamos a ampliarla: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c b a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Podemos observar que la letra adicional no se alinea correctamente con -las notas. La palabra @q{shine} se debe cantar sobre dos notas, no -una. Esto se conoce como @notation{melisma}, una sílaba única que se -canta sobre más de una nota. Existen varias formas de hacer que una -sílaba recaiga sobre varias notas, siendo la más sencilla escribir una -ligadura de expresión sobre ellas (véase @ref{Ties and slurs}): - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c( b) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Ahora la letra se alinea correctamente con las notas, pero el barrado -automático de las notas que corresponden a @notation{shine as} no -parece correcto. Podemos remediarlo insertando instrucciones de -barrado manual para sobreescribir el barrado automático; para ver más -detalles consulte @ref{Automatic and manual beams}. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c([ b]) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Como alternativa a la utilización de ligaduras de expresión, los -melismas se pueden indicar solamente en la letra utilizando un guión -bajo, @code{_}, para cada nota que queremos incluir dentro del -melisma: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c[ b] a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine _ as bright as day; - } ->> -@end lilypond - -Si una sílaba se extiende sobre varias notas o una sola nota muy -larga, normalmente se traza una @notation{línea extensora} desde la -sílaba que se extiende y por debajo de todas las notas que -corresponden a dicha sílaba. Se escribe como dos guiones bajos -@code{__}. He aquí un ejemplo extraído de los primeros tres compases -del @notation{Lamento de Dido}, de @notation{Dido y Eneas} de Purcell: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \minor - \time 3/2 - g2 a bes bes( a) - b c4.( bes8 a4. g8 fis4.) g8 fis1 - } - \addlyrics { - When I am laid, - am laid __ in earth, - } ->> -@end lilypond - -Hasta el momento, ninguno de los ejemplos implicaban palabras que -tuviesen más de una sílaba. Estas palabras se reparten por lo general -a razón de una nota por cada sílaba, con guiones cortos entre las -sílabas. Dichos guiones separadores se teclean como dos guiones, con -el resultado de un guión corto centrado entre las sílabas. -Presentamos a continuación un ejemplo que demuestra esto y todo lo que -hemos aprendido hasta el momento acerca de la alineación de la letra a -las notas. - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \key g \major - \time 3/4 - \partial 4 - d4 g4 g a8( b) g4 g4 - b8( c) d4 d e4 c2 - } - \addlyrics { - A -- way in a __ man -- ger, - no __ crib for a bed, __ - } ->> -@end lilypond - -Algunos textos (especialmente los que están en italiano o en español) -requieren lo contrario: colocar más de una sílaba a una única nota. -Esto se consigue enlazando las sílabas entre sí mediante un guión bajo -simple @code{_} (sin ningún espacio), o bien encerrándolas entre -corchetes. Aquí aparece un ejemplo procedente del @notation{Barbero -de Sevilla} de Rossini, donde la sílaba @notation{al} se canta sobre -la misma nota que la sílaba @notation{go} de la palabra @q{Largo} en -el aria de Fígaro @notation{Largo al factotum}: - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \clef bass - \key c \major - \time 6/8 - c4.~ c8 d b c([ d]) b c d b c - } - \addlyrics { - Lar -- go_al fac -- to -- tum del -- la cit -- tà - } ->> -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{Vocal music}. - - -@node Lyrics to multiple staves -@subsection Lyrics to multiple staves - -@cindex letra y varios pentagramas -@cindex varios pentagramas y letra - -La solución sencilla que utiliza @code{\addlyrics} se puede usar para -poner letra a más de un pentagrama. Aquí aparece un ejemplo sacado -del @notation{Judas Macabeo} de Haendel: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key f \major - \time 6/8 - \partial 8 - c8 c([ bes]) a a([ g]) f f'4. b, c4.~ c4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, __ - } - \relative c' { - \key f \major - \time 6/8 - \partial 8 - r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, - } ->> -@end lilypond - - -Cualquier partitura de una complejidad mayor que la de este sencillo -ejemplo se hace mejor separando la letra de la estructura de -pentagramas mediante variables (expresiones con nombre). Éstas se -tratan en @ref{Organizing pieces with variables}. - - -@seealso -Referencia de la notación: -@ruser{Vocal music}. - - -@node Final touches -@section Final touches - -Éste es el último apartado del tutorial; muestra la forma de dar los -toques finales a piezas sencillas, y ofrece una introducción al resto -del manual. - -@menu -* Organizing pieces with variables:: -* Version number:: -* Adding titles:: -* Absolute note names:: -* After the tutorial:: -@end menu - - -@node Organizing pieces with variables -@subsection Organizing pieces with variables - -@cindex variables -@cindex variables, definir -@cindex identificadores -@cindex macros -@cindex assignación de variables -@cindex uso de las variables -@cindex variables, uso de -@cindex variables, caracteres permitidos en -@cindex caracteres permitidos en variables - -Cuando los elementos que hemos discutido anteriormente se combinan -para producir archivos mayores, las expresiones musicales se hacen -enormes. En música polifónica con muchos pentagramas, los archivos de -entrada pueden volverse muy propensos a la confusión. Podemos reducir -esta confusión utilizando las @emph{variables}. - -Con las variables (también conocidas como identificadores o macros), -podemos trocear las expresiones musicales complejas. Una variable se -asigna de la manera siguiente: - -@example -musicaConNombre = @{ @dots{} @} -@end example - -El contenido de la expresión musical @code{musicaConNombre} se puede usar -posteriormente colocando una barra invertida delante del nombre -(@code{\musicaConNombre}, igual que una orden normal de LilyPond). - -@lilypond[verbatim,quote] -violin = \new Staff { - \relative c'' { - a4 b c b - } -} -cello = \new Staff { - \relative c { - \clef bass - e2 d - } -} -{ - << - \violin - \cello - >> -} -@end lilypond - - -@noindent -El nombre de una variable debe consistir enteramente en caracteres -alfabéticos, es decir sin números, guiones ni guiones bajos. - -Las variables se deben definir @emph{antes} de la expresión musical -principal, pero se pueden usar tantas veces como se quiera, en -cualquier lugar, una vez que han sido definidas. Incluso se pueden -usar dentro de la definición de otra variable, proporcionando una vía -para acortar el código si una sección musical se repite muchas veces. - -@c KEEP LY -@lilypond[verbatim,quote,ragged-right] -tresilloA = \times 2/3 { c,8 e g } -compasA = { \tresilloA \tresilloA \tresilloA \tresilloA } - -\relative c'' { - \compasA \compasA -} -@end lilypond - -Las variables se pueden usar para otros muchos tipos de objetos dentro -del código de entrada. Por ejemplo, - -@example -ancho = 4.5\cm -nombre = "Wendy" -papelAcinco = \paper @{ paperheight = 21.0 \cm @} -@end example - -Dependiendo de su contenido, la variable se puede usar en distintos -lugares. El siguiente ejemplo utiliza las variables anteriores: - -@example -\paper @{ - \aFivePaper - line-width = \width -@} -@{ - c4^\name -@} -@end example - - -@node Version number -@subsection Version number - -@cindex versión -@cindex versión, indicación de -@cindex versión, número de -@cindex actualizaciones -@cindex futuras, actualizaciones -@cindex actualizar archivos -@cindex archivos, actualización de - -@funindex \version -@funindex version -@funindex convert-ly - -La indicación @code{\version} deja registrado para qué versión de -LilyPond se escribió el archivo: - -@example -\version @w{"@version{}"} -@end example - -@noindent -por convenio se sitúa al principio del archivo de partitura de -LilyPond. - -Estas anotaciones hacen menos problemáticas las subsiguientes -actualizaciones de LilyPond. Los cambios en la sintaxis se tratan -mediante un programa especial, @command{convert-ly}, y utiliza -@code{\version} para determinar qué reglas hay que aplicar. Para ver -más detalles, consulte @rprogram{Updating files with convert-ly}). - - -@node Adding titles -@subsection Adding titles - -@cindex título -@cindex cabeceras -@cindex bloque de cabeceras - -@funindex \header -@funindex header - -La información sobre el título, autor, número de Opus y similares se -escriben en el bloque @code{\header}. Éste se encuentra fuera de la -expresión musical principal; el bloque @code{\header} normalmente se -sitúa por debajo del número de versión. - -@example -\version @w{"@version{}"} -\header @{ - title = "Sinfonía" - composer = "Yo" - opus = "Op. 9" -@} - -@{ - @dots{} música @dots{} -@} -@end example - -Cuando se procesa el archivo, el título y el autor se imprimen por -encima de la música. Puede obtener más información sobre los títulos -en @ruser{Creating titles}. - - -@node Absolute note names -@subsection Absolute note names - -@cindex notas, nombres de -@cindex notas, nombres absolutos de -@cindex absoluto, modo -@cindex absolutos, valores de altura -@cindex alturas, valores absolutos de -@cindex absolutos, nombres de nota - -Hasta el momento siempre hemos utilizado @code{\relative} para definir -las alturas. Ésta es la forma más sencilla de escribir la mayor parte -de la música, pero existe otra forma de definir las alturas: el modo -absoluto. - -Si omite el @code{\relative}, LilyPond tratará todas las alturas como -valores absolutos. Una @code{c'} significará siembre un Do central, -una @code{b} significará siempre la nota inmediatamente por debajo del -Do central, y una @code{g,} significará siempre la nota que se coloca -en la primera línea del pentagrama en clave de Fa. - -@lilypond[verbatim,quote] -{ - \clef bass - c' b g, g, - g, f, f c' -} -@end lilypond - -He aquí una escala que abarca cuatro octavas: - -@lilypond[verbatim,quote] -{ - \clef bass - c, d, e, f, - g, a, b, c - d e f g - a b c' d' - \clef treble - e' f' g' a' - b' c'' d'' e'' - f'' g'' a'' b'' - c'''1 -} -@end lilypond - -Como puede ver, escribir una melodía en clave de Sol implica escribir -gran cantidad de apóstrofos @q{'} . Consideremos este fragmento de -Mozart: - -@lilypond[verbatim,quote] -{ - \key a \major - \time 6/8 - cis''8. d''16 cis''8 e''4 e''8 - b'8. cis''16 b'8 d''4 d''8 -} -@end lilypond - -Todos estos apóstrofos hacen casi ilegible el código de entrada y será -origen de numerosos errores. Con @code{\relative}, el ejemplo -anterior es mucho más fácil de leer: - -@lilypond[verbatim,quote] -\relative c'' { - \key a \major - \time 6/8 - cis8. d16 cis8 e4 e8 - b8. cis16 b8 d4 d8 -} -@end lilypond - -Si comete un error con una marca de octava (@code{'} o @code{,}) -mientras trabaja en el modo @code{\relative}, será muy obvio (muchas -notas estarán en la octava equivocada). Mientras trabaja en el modo -absoluto, un solo fallo no será tan visible, y tampoco será tan fácil -de localizar. - -Sin embargo, el modo absoluto es útil para escribir música que -contenga intervalos grandes, y será extremadamente útil para hacer -archivos de LilyPond generados por ordenador. - - -@node After the tutorial -@subsection After the tutorial - -Después de terminar el tutorial, quizá debería probar a escribir una o -dos piezas. Comience con una de las plantillas que aparecen en -@ref{Templates} y añada algunas notas. Si necesita un tipo de -notación que no ha sido tratada en el tutorial, eche un vistazo a la -Referencia de Notación, empezando por @ruser{Musical notation}. Si -quiere escribir música para un conjunto instrumental que no está -cubierto por ninguna plantilla, consulte @ref{Extending the -templates}. - -Una vez que ha escrito algunas piezas cortas, lea el resto del Manual -de aprendizaje (capítulos 3 al 5). ¡Por supuesto, no pasa nada por -leerlo ahora mismo! Sin embargo, el resto del Manual de Aprendizaje -da por sentado que está familiarizado con la entrada de LilyPond. -Puede saltarse estos capítulos ahora y volver a ellos cuando haya -adquirido más experiencia. - -En este tutorial y en el resto del Manual de aprendizaje, existe un -apartado @strong{Véase también} al final de cada una de las secciones, -que contiene referencias cruzadas a otras secciones: no siga estas -referencias durante la primera lectura; cuando haya leído el Manual de -aprendizaje completo, quizá desee releer ciertas secciones y seguir -las referencias cruzadas para obtener más información. - -Si no lo ha hecho aún, le @emph{rogamos} que lea @ref{About the -documentation}. Existe una gran cantidad de información sobre -LilyPond, de manera que los recién llegados con frecuencia no saben -exactamente dónde deben buscar la ayuda. Si emplea cinco minutos en -leer cuidadosamente esta sección ¡se ahorrará horas de frustración -buscando en el sitio equivocado! diff --git a/Documentation/es/user/tweaks.itely b/Documentation/es/user/tweaks.itely deleted file mode 100644 index 7b2c8f2e4b..0000000000 --- a/Documentation/es/user/tweaks.itely +++ /dev/null @@ -1,3868 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Tweaking output -@chapter Tweaking output - -Este capítulo trata de cómo modificar la salida. LilyPond es extremadamente -configurable; prácticamente todos los fragmentos de la salida se pueden cambiar. - - -@menu -* Tweaking basics:: -* The Internals Reference manual:: -* Appearance of objects:: -* Placement of objects:: -* Collisions of objects:: -* Further tweaking:: -@end menu - -@node Tweaking basics -@section Tweaking basics - -@menu -* Introduction to tweaks:: -* Objects and interfaces:: -* Naming conventions of objects and properties:: -* Tweaking methods:: -@end menu - -@node Introduction to tweaks -@subsection Introduction to tweaks - -El @q{Trucaje} es un término de LilyPond que denota los diversos -métodos que el usuario tiene a su disposición para modificar el -proceso de interpretación del archivo de entrada y cambiar la -apariencia de la salida impresa. Algunos trucos son muy fáciles de -usar; otros son más complejos. Pero en su conjunto, los métodos de -trucaje disponibles posibilitan conseguir casi cualquier apariencia -que deseemos en la música impresa. - -En esta sección vamos a estudiar los conceptos básicos que se -necesitan para comprender el trucaje. Más tarde daremos un amplio -abanico de instrucciones listas para usar, que podrá simplemente -copiar para obtener el mismo efecto en sus partituras, y al mismo -tiempo mostraremos la forma de construir dichas instrucciones para que -pueda aprender cómo desarrollar sus propios trucos. - -Antes de comenzar con este capítulo, quizá quiera echar un vistazo a -la sección @ref{Contexts and engravers}, pues los Contextos, los -Grabadores y las Propiedades que se contienen en ellos son -fundamentales para comprender y construir los trucos. - -@node Objects and interfaces -@subsection Objects and interfaces - -@cindex objeto -@cindex grob -@cindex objeto de extensión -@cindex interfaz -@cindex propiedades de objetos -@cindex objeto, propiedades de -@cindex layout (disposición), objeto de -@cindex objeto de disposición (layout) - -El trucaje consiste en modificar el funcionamiento y estructura -interna del programa LilyPond, por lo que en primer lugar -introduciremos algunos términos que se usan para describir dichas -operaciones y estructuras internas. - -El término @q{Objeto} es un término genérico que se usa para referirse -a la multitud de estructuras internas que LilyPond construye durante -el procesado de un archivo de entrada. Así, cuando se encuentra una -instrucción como @code{\new Staff}, se construye un objeto nuevo del -tipo @code{Staff}. Entonces, este objeto @code{Staff} contiene todas -las propiedades asociadas con ese pentagrama en particular, por -ejemplo, su nombre y su armadura, además de otros detalles de los -grabadores que se han asignado para que operen dentro del contexto del -pentagrama. De forma similar, hay objetos que guardan las propiedades -de todos los demás contextos, como objetos de @code{Voice}, objetos de -@code{Score}, objetos de @code{Lyrics}, así como objetos que -representan todos los elementos notacionales como líneas divisorias, -cabezas de las notas, ligaduras, indicaciones dinámicas, etc. Cada -objeto tiene su propio conjunto de valores de propiedad. - -Ciertos tipos de objetos reciben nombres especiales. Los objetos que -representan elementos de notación sobre la salida impresa como cabezas -de notas, plicas, ligaduras de expresión y de unión, digitaciones, -claves, etc. reciben el nombre de @q{Objetos de presentación}, a -menudo conocidos como @q{Objetos gráficos}, o abreviadamente -@q{Grobs}. Aún son objetos en el sentido genérico que hemos -mencionado, y también todos ellos tienen propiedades asociadas, como -su posición, tamaño, color,etc. - -Ciertos objetos de presentación son aún más especializados. Las -ligaduras de fraseo, los reguladores, las indicaciones de octava alta -y baja, y muchos otros objetos gráficos no están situados en un solo -lugar: tienen un punto de inicio, un punto de final, y quizá otras -propiedades relacionadas con su forma. Los objetos con una forma -extendida como estos, reciben el nombre de «Objetos de extensión» o -@q{Spanners}. - -Aún falta por explicar qué son los @q{Interfaces}. Muchos objetos, -incluso aunque son bastante diferentes, comparten funcionalidades que -se deben procesar de la misma manera. Por ejemplo, todos los objetos -gráficos tienen un color, un tamaño, una posición, etc., y todas estas -propiedades se procesan de la misma forma durante la interpretación -del archivo de entrada por parte de LilyPond. Para simplificar estas -operaciones internas, estas acciones y propiedades comunes se agrupan -en un objeto llamado @code{grob-interface}, interface de grob. Hay -muchas otras agrupaciones de propiedades comunes como ésta, y cada -una recibe un nombre que acaba en @code{interface}. En total hay más -de 100 interfaces de éstos. Veremos más adelante porqué esto es del -interés y de utilidad para el usuario. - -Estos son, en fin, los términos principales relativos a los objetos -que vamos a utilizar en este capítulo. - -@node Naming conventions of objects and properties -@subsection Naming conventions of objects and properties - -@cindex nomemclatura, convenciones de, para objetos -@cindex nomemclatura, convenciones de, para propiedades -@cindex objetos, convenciones de nomenclatura -@cindex propiedades, convenciones de nomenclatura - -Ya hemos visto ciertas convenciones de nomenclatura de objetos, en la -sección @ref{Contexts and engravers}. En este lugar, para más fácil -referencia, presentamos una lista de los tipos de objetos y -propiedades más comunes, junto con las convenciones según las cuales -reciben su nombre, y un par de ejemplos de nombres reales. Hemos -utilizado una @q{A} mayúscula para denotar cualquier carácter -alfabético en mayúsculas, y @q{aaa} para cualquier número de -caracteres alfabéticos en minúscula. Otros caracteres se utilizan -literalmente como están. - -@multitable @columnfractions .33 .33 .33 -@headitem Objeto o tipo de propiedad - @tab Convención de nomenclatura - @tab Ejemplos -@item Contextos - @tab Aaaa o AaaaAaaaAaaa - @tab Staff, GrandStaff -@item Objetos de presentación - @tab Aaaa o AaaaAaaaAaaa - @tab Slur, NoteHead -@item Grabadores - @tab Aaaa_aaa_engraver - @tab Clef_engraver, Note_heads_engraver -@item Interfaces - @tab aaa-aaa-interface - @tab grob-interface, break-aligned-interface -@item Propiedades de contextos - @tab aaa o aaaAaaaAaaa - @tab alignAboveContext, skipBars -@item Propiedades de objetos de presentación - @tab aaa o aaa-aaa-aaa - @tab direction, beam-thickness -@end multitable - -Como podremos ver en breve, las propiedades de distintos tipos de -objeto se modifican por parte de diferentes instrucciones; así pues, -es útil poder reconocer el tipo de objeto a partir de sus nombres de -propiedad. - -@node Tweaking methods -@subsection Tweaking methods - -@cindex trucaje, métodos de - -@strong{La instrucción \override} - -@cindex override, instrucción -@cindex override (sobreescritura), sintaxis de - -@funindex \override -@funindex override - -Ya hemos visto las instrucciones @code{\set} y @code{\with}, que se -usan para cambiar las propiedades de los @strong{contextos} y para -quitar y poner @strong{grabadores}, en @ref{Modifying context -properties} y @ref{Adding and removing engravers}. Ahora debemos -examinar algunas instrucciones importantes más. - -La instrucción que cambia las propiedades de los @strong{objetos de -presentación} es @code{\override}. Puesto que esta instrucción debe -modificar propiedades internas que se encuentran en un lugar profundo -dentro de LilyPond, su sintaxis no es tan simple como la del resto de -las instrucciones que hemos visto hasta ahora. Tiene que saber -exactamente qué propiedad de qué objeto y en qué contexto se debe -modificar, y cuál debe ser su nuevo valor. Veamos cómo se hace. - -La sintaxis genérica de esta instrucción es: - -@example -\override @var{Contexto}.@var{ObjetoDePresentación} #'@var{propiedad-de-presentación} = -#@var{valor} -@end example - -@noindent -Esto establecerá la propiedad de nombre -@var{propiedad-de-presentación} del objeto de presentación con el -nombre @var{ObjetoDePresentación}, que es miembro del contexto -@var{Contexto}, al valor @var{valor}. - -El @var{contexto} se puede omitir (y normalmente así es) cuando el -contexto requerido se encuentra implicado sin ambigüedad y es uno de -los contextos del nivel más bajo, es decir: @code{Voice}, -@code{ChordNames} o @code{Lyrics}, y lo omitiremos en muchos de los -ejemplos siguientes. Veremos más tarde cuándo se debe especificar. - -Las últimas secciones tratan de forma exhaustiva las propiedades y sus -valores, pero para ilustrar el formato y utilización de estas -instrucciones usaremos sólo unas cuantas propiedades y valores -sencillos que sean fáciles de entender. - -Por ahora no se preocupe por el @code{#'}, que debe anteponerse a la -propiedad de presentación, y el @code{#}, que debe preceder al valor. -Deben estar presentes siempre y de esa forma exacta. Es la -instrucción de uso más común dentro del trucaje, y durante la mayor -parte del resto de este capítulo presentaremos ejemplos de cómo se -usa. A continuación hay un ejemplo sencillo para cambiar el color de -una cabeza: - -@cindex color, propiedad, ejemplo -@cindex NoteHead, ejemplo de sobreescritura - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a b c -@end lilypond - -@strong{La instrucción \revert} - -@cindex revert, instrucción - -@funindex \revert -@funindex revert - -Una vez sobreescrita, la propiedad retiene su nuevo valor hasta que -se sobreescribe de nuevo o se encuentra una instrucción -@code{\revert}. La instrucción @code{\revert} tiene la siguiente -sintaxis y ocasiona que el valor de la propiedad se devuelva a su -valor predeterminado original; observe que no es a su valor previo si -se han utilizado varias instrucciones @code{\override}. - -@example -\revert @var{Contexto}.@var{ObjetoDePresentación} #'@var{propiedad-de-presentación} -@end example - -Una vez más, igual que @var{Contexto} dentro de la instrucción -@code{\override}, con frecuencia no es necesario especificar el -@var{Contexto}. Se omitirá en muchos de los ejemplos siguientes. -Aquí devolvemos el color de la cabeza al valor predeterminado para las -dos últimas notas: - -@cindex color, propiedad, ejemplo -@cindex NoteHead, ejemplo de sobreescritura - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a -\revert NoteHead #'color -b c -@end lilypond - -@strong{El prefijo \once} - -@funindex \once -@funindex once - -Tanto la instrucción @code{\override} como @code{\set} se pueden -preceder por @code{\once}. Esto ocasiona que la siguiente instrucción -@code{\override} o @code{\set} sea efectiva solamente durante el -tiempo musical en curso y antes de que la propiedad vuelva a tener -otra vez su valor predeterminado. Utilizando el mismo ejemplo, -podemos cambiar el color de una sola nota de la siguiente manera: - -@cindex color, propiedad, ejemplo -@cindex NoteHead, ejemplo de sobreescritura - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\once \override NoteHead #'color = #red -e f g -\once \override NoteHead #'color = #green -a b c -@end lilypond - -@strong{La instrucción \overrideProperty} - -@cindex overrideProperty, instrucción - -@funindex \overrideProperty -@funindex overrideProperty - -Hay otra forma para la instrucción de sobreescritura, -@code{\overrideProperty}, que ocasionalmente es necesaria. La -mencionamos aquí con un propósito de exhaustividad, pero para ver más -detalles consulte @ruser{Difficult tweaks}. -@c Maybe explain in a later iteration -td - -@strong{La instrucción \tweak} - -@cindex tweak, instrucción - -@funindex \tweak -@funindex tweak - -La última instrucción de trucaje que está disponible es @code{\tweak}. -Se debe utilizar para cambiar las propiedades de objetos que suceden -en el mismo momento musical, como las notas de un acorde. El uso de -@code{\override} para la sobreescritura afectaría a todas las notas -del acorde, mientras que @code{\tweak} afecta solamente al siguiente -elemento del flujo de entrada. - -He aquí un ejemplo. Suponga que queremos cambiar el tamaño de la -cabeza de la nota intermedia (el Mi) en un acorde de Do mayor. En -primer lugar, veamos lo que haría @code{\once \override}: - -@cindex font-size, propiedad, ejemplo -@cindex NoteHead, ejemplo de sobreescritura - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - \once \override NoteHead #'font-size = #-3 - - -@end lilypond - -Vemos que la sobreescritura con override afecta a @emph{todas} las -cabezas de las notas del acorde. Esto es así porque todas las notas -de un acorde ocurren en el mismo @emph{momento musical}, y la acción -de @code{\once} es aplicar la sobreescritura a todos los objetos de -presentación del tipo especificado que ocurren en el mismo momento -musical que la propia instrucción de sobreescritura @code{\override}. - -La instrucción @code{\tweak} opera de una forma distinta. Actúa sobre -el elemento inmediatamente siguiente dentro del flujo de entrada. Sin -embargo, es efectivo solamente sobre objetos que se crean directamente -a partir del flujo de entrada, en esencia las cabezas y las -articulaciones; los objetos como las plicas y las alteraciones se -crean con posterioridad y no se pueden trucar de esta forma. Es más, -cuando se aplica a las cabezas de las notas, éstas @emph{deben} estar -dentro de un acorde, es decir, dentro de ángulos simples, así que para -trucar una sola nota la instrucción @code{\tweak} se debe colocar -dentro de ángulos simples junto con la nota. - -Así pues, volviendo a nuestro ejemplo, el tamaño de la nota intermedia -se cambiaría de la siguiente forma: - -@cindex font-size, propiedad, ejemplo -@cindex @code{\tweak}, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - 4 -@end lilypond - -Observe que la sintaxis de @code{\tweak} no es igual que la de -@code{\override}. Ni el contexto ni el objeto de presentación se -deben especificar; de hecho, generaría un error hacerlo. Los dos -están implícitos por el siguiente elemento del flujo de entrada. -Observe también que no debe haber un signo igual. Así que la sintaxis -genérica de la instrucción @code{\tweak} es, simplemente, - -@example -\tweak #'@var{propiedad-de-presentación} #@var{valor} -@end example - -Una instrucción @code{\tweak} también se puede usar para modificar -sólo una de una serie de articulaciones, como se muestra aquí: - -@cindex color, propiedad, ejemplo -@cindex @code{\tweak}, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a ^Black - -\tweak #'color #red ^Red - -\tweak #'color #green _Green -@end lilypond - -@noindent -Observe que la instrucción @code{\tweak} debe venir precedida de una -marca de articulación como si ella misma fuera una articulación. - -@cindex grupos especiales anidados -@cindex tresillos anidados -@cindex corchete del grupo especial -@cindex corchete de tresillo -@cindex grupo especial, corchete de -@cindex tresillo, corchete de - -@funindex TupletBracket - -La instrucción @code{\tweak} también se debe usar para cambiar la -apariencia de uno solo de un conjunto de grupos especiales anidados -que comiencen en el mismo instante musical. En el siguiente ejemplo, -el corchete del tresillo largo y el primero de los tres corchetes -cortos empiezan en el mismo momento musical, y por ello cualquier -instrucción @code{\override} se aplicaría a los dos. En el ejemplo se -usa @code{\tweak} para distinguir entre ellos. La primera instrucción -@code{\tweak} especifica que el corchete del tresillo largo se debe -colocar por encima de las notas y el segundo especifica que el número -del tresillo se debe imprimir en rojo sobre el corchete del primer -tresillo corto. - -@cindex @code{\tweak}, ejemplo -@cindex direction, propiedad, ejemplo -@cindex color, propiedad, ejemplo - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -\tweak #'direction #up -\times 4/3 { - \tweak #'color #red - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } -} -@end lilypond - -Si los grupos anidados no comienzan en el mismo momento, su apariencia -se puede modificar de la forma usual mediante instrucciones -@code{\override}: - -@cindex text, propiedad, ejemplo -@cindex tuplet-number, función, ejemplo -@cindex transparent, propiedad, ejemplo -@cindex TupletNumber, ejemplo de sobreescritura - -@c NOTE Tuplet brackets collide if notes are high on staff -@c See issue 509 -@lilypond[quote,ragged-right,verbatim,fragment,relative=1] -\times 2/3 { c8[ c c]} -\once \override TupletNumber - #'text = #tuplet-number::calc-fraction-text -\times 2/3 { - c[ c] - c[ c] - \once \override TupletNumber #'transparent = ##t - \times 2/3 { c8[ c c] } -\times 2/3 { c8[ c c]} -} -@end lilypond - - -@seealso -Referencia de la notación: -@ruser{The tweak command}. - - -@node The Internals Reference manual -@section The Internals Reference manual - -@cindex Internals Reference - -@menu -* Properties of layout objects:: -* Properties found in interfaces:: -* Types of properties:: -@end menu - -@node Properties of layout objects -@subsection Properties of layout objects - -@cindex propiedades de los objetos de presentación -@cindex propiedades de los grobs -@cindex grobs, propiedades de -@cindex presentación, propiedades de los objetos de -@cindex Referencia de funcionamiento interno - -Suponga que tiene una partitura con una ligadura de expresión que para -su gusto es demasiado fina y quiere trazarla un poco más gruesa. ¿Cómo -debe proceder? Ya sabe, por las afirmaciones anteriores acerca de la -flexibilidad de LilyPond, que tal posibilidad existe, y seguramente -piensa que una cierta instrucción de sobreescritura @code{\override} -será necesaria. Pero ¿existe una propiedad de grosor para las -ligaduras? y, si la hay, ¿cómo se puede modificar? Aquí es donde -interviene el Manual de Funcionamiento Interno. Contiene toda la -información que puede necesitar para construir ésta y todas las demás -instrucciones @code{\override}, de sobreescritura. - -Una advertencia antes de dirigir nuestra mirada a la referencia de -funcionamiento interno. Éste es un documento de @strong{referencia}, -lo que significa que hay pocas o ninguna explicación en él: su -propósito es presentar la información de forma precisa y concisa. Por -tanto, podrá parecerle desalentador a primera vista. ¡No se preocupe! -La guía y las explicaciones que presentamos aquí le permitirán extraer -la información de la referencia de funcionamiento interno por sí mismo -con tan sólo algo de práctica. - -@cindex sobreescritura, ejemplo de -@cindex Referencia de Funcionamiento Interno, ejemplo de utilización -@cindex @code{\addlyrics}, ejemplo - - -Utilicemos un ejemplo concreto con un sencillo fragmento de música -real: - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -Suponga ahora que decidimos que nos gustan las ligaduras algo más -gruesas. ¿Es posible? La ligadura es, ciertamente, un objeto de -presentación, así que la cuestión es @q{¿Hay una propiedad -perteneciente a las ligaduras de expresión que controle su grosor?} -Para responder a esta pregunta debemos mirar el manual de Referencia -de Funcionamiento Interno, abreviadamente RFI@footnote{@strong{IR} -(Internals Reference) en inglés}. - -El RFI de la versión de LilyPond que está usando se puede encontrar en -la página web de LilyPond en @uref{http://lilypond.org}. Vaya a la -página de la documentación y siga el enlace Manual de Referencia de -Funcionamiento Interno (RFI). Para nuestros propósitos pedagógicos -sería mejor que utilizase la versión en HTML, no la @q{en una sola -página} ni el PDF. Para que los siguientes párrafos tengan algún -sentido deberá consultarlo realmente al tiempo que lee. - -@c Link names in English as those pages are not yet translated. FV -Bajo el encabezamiento @strong{Top} podrá ver cinco enlaces. -Seleccione el enlace @emph{Backend}, que es donde se encuentra la -información sobre los objetos de presentación. Una vez allí, bajo el -encabezamiento @strong{Backend}, siga el enlace @emph{All layout -objects}. La página que aparece relaciona todos los objetos de -presentación que se usan en su versión de LilyPond, en orden -alfabético. Siga el enlace Slur (ligadura de expresión), y aparecerán -relacionadas las propiedades de las ligaduras de expresión o Slurs. - -Una forma alternativa de encontrar esta página es a partir de la -Referencia de la Notación. En una de las páginas que tratan de las -ligaduras de expresión podrá encontrar un enlace al manual de -referencia del funcionamiento interno. Este enlace le llevará -directamente a esta página, aunque si tiene una idea del nombre del -objeto de presentación que pretende trucar, le resultará más fácil ir -directamente al RFI y buscar allí. - -Esta página sobre las ligaduras de expresión dentro del manual RFI nos -dice en primer lugar que los objetos Slur se crean por el grabador -Slur_engraver. A continuación relaciona los ajustes estándar. -Observe que @strong{no} están en orden alfabético. Navegue hacia -abajo buscando una propiedad que pudiera controlar el grosor de las -ligaduras, y encontrará - -@example -@code{thickness} (number) - @code{1.2} - Line thickness, generally measured in @code{line-thickness} -@end example - -Esto promete ser una buena opción para cambiar el grosor. Nos dice -que el valor de @code{thickness} es un simple @emph{número}, que el -valor predeterminado es 1.2, y que las unidades están dentro de otra -propiedad llamada @code{line-thickness}. - -Como dijimos con anterioridad, existen entre pocas y ninguna -explicación en el RFI, pero ya tenemos información suficiente para -probar a cambiar el grosor de la ligadura. Vemos que el nombre del -objeto de presentación es @code{Slur}, que el nombre de la propiedad -que debemos cambiar es @code{thickness} y que el nuevo valor debe ser -un número algo más grande que 1.2 si queremos hacer las ligaduras más -gruesas. - -Ahora podemos construir la instrucción de sobreescritura -@code{\override} simplemente mediante la sustitución de los valores -que hemos encontrado para los nombres, omitiendo el contexto. -Usaremos un valor muy grande para el grosor al principio, para estar -seguros de que la instrucción está funcionando. Obtenemos lo -siguiente: - -@example -\override Slur #'thickness = #5.0 -@end example - -¡No olvide el @code{#'} antes del nombre de la propiedad y @code{#} -antes del valor nuevo! - -La pregunta final es @q{¿Dónde se debe colocar esta instrucción?} -Aunque nos falta seguridad y estamos todavía aprendiendo, la mejor -respuesta es: @q{Dentro de la música, antes de la primera ligadura y -cerca de ella.} Hagámoslo así: - -@cindex Slur, ejemplo de sobreescritura -@cindex thickness, propiedad, ejemplo - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -y podemos ver que la ligadura, es sin duda, más pesada. - -Así pues, ésta es la forma básica de construir instrucciones -@code{\override} o de sobreescritura. Existen unas cuantas -complicaciones más con las que nos encontraremos en secciones -posteriores, pero ahora conoce todos los principios esenciales que -necesita para hacerlo por sí mismo (aunque aún necesita algo de -práctica). La cual vendrá proporcionada por los ejemplos que vienen a -continuación. - -@subheading Finding the context - -@cindex contexto, encontrar -@cindex contexto, buscar el, correcto - -Pero en primer lugar ¿qué habría pasado si hubiésemos tenido que -especificar el contexto? ¿Cuál sería? Podemos suponer que las -ligaduras están en el contexto de Voz, por estar claramente asociados -de manera estrecha con las líneas individuales de música, pero -¿podemos estar seguros? Para averiguarlo, vayamos de nuevo al inicio -de la página del RFI que describe las ligaduras (Slur), donde dice -@q{Slur objects are created by: Slur engraver} («Los objetos de -ligadura de expresión se crean por: el grabador Slur»). Así pues, las -ligaduras de expresión se crean en cualquier contexto en el que se -encuentre el grabador @code{Slur_engraver}. Siga el enlace a la -página del grabador @code{Slur_engraver}. Al final del todo, dice que -el grabador @code{Slur_engraver} es parte de cinco contextos de voz, -incluido el contexto de voz estándar, @code{Voice}, por lo que nuestra -suposición era acertada. Y a causa de que @code{Voice} es uno de los -contextos de más bajo nivel que se encuentra implícito sin ambigüedad -por el hecho de que estamos escribiendo notas, podemos omitirlo en -este lugar concreto. - -@subheading Overriding once only - -@cindex sobreescritura por una sola vez -@cindex once override - -@funindex \once -@funindex once - -Como puede ver, @emph{todas} las ligaduras son más gruesas en el -último ejemplo. Pero ¿y si quisiéramos que solamente la primera -ligadura fuese más gruesa? Esto se consigue con la instrucción o -prefijo @code{\once}. Colocado inmediatamente antes de la instrucción -@code{\override} ocasiona que solamente cambie la ligadura que -comienza en la nota @strong{inmediata siguiente}. Si la nota -inmediata siguiente no da inicio a una ligadura, la instrucción no -tiene ningún efecto en absoluto: no se recuerda hasta que se -encuentre alguna ligadura, sino que simplemente se ignora. Así pues, -la instrucción que lleva @code{\once} se debe reposicionar de la forma -siguiente: - -@cindex Slur, ejemplo de sobreescritura -@cindex thickness, propiedad, ejemplo - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Hemos hecho que ahora solamente la primera ligadura sea más gruesa. - -La instrucción o prefijo @code{\once} también se puede usar antes de -la instrucción @code{\set}. - -@subheading Reverting - -@cindex revertir -@cindex predeterminadas, recuperar las propiedades - -@funindex \revert -@funindex revert - -Finalmente ¿y si quisiéramos que solamente las dos primeras ligaduras -fuesen más gruesas? En fin; podríamos usar dos instrucciones, cada -una de ellas precedida por el prefijo @code{\once}, situadas -inmediatamente antes de cada una de las notas en que comienzan las -ligaduras: - -@cindex Slur, ejemplo de sobreescritura -@cindex thickness, propiedad, ejemplo - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -o podríamos omitir la instrucción prefija @code{\once} y utilizar la -instrucción @code{\revert} (restablecer) para devolver la propiedad -del grosor, @code{thickness}, a su valor predeterminado después de la -segunda ligadura: - -@cindex Slur, ejemplo de sobreescritura -@cindex thickness, propiedad, ejemplo - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) - % Revert thickness of all following slurs to default of 1.2 - \revert Slur #'thickness - e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -la instrucción @code{\revert} se puede utilizar para devolver -cualquier propiedad que se haya cambiado con @code{\override} a su -valor predeterminado. Puede utilizar el método que mejor se adapte a -aquello que quiere hacer. - -Así finaliza nuestra introducción al manual de RFI, y el método básico -de trucaje. A continuación, en las últimas secciones de este capítulo -encontrará varios ejemplos, en parte para introducirle en algunas de -las posibilidades adicionales del manual RFI, y en parte para -proporcionarle más práctica en cómo extraer información de él. Estos -ejemplos irán conteniendo cada vez menos palabras de guía y -explicación. - -@node Properties found in interfaces -@subsection Properties found in interfaces - -@cindex interface -@cindex propiedades de los interfaces -@cindex interfaces, propiedades - -Suponga ahora que queremos imprimir la letra de la canción en cursiva. -¿Qué forma de instrucción @code{\override} necesitamos para hacerlo? -En primer lugar miramos en la página del RFI que relaciona todos los -objetos, @q{All layout objects}, como antes, y buscamos un objeto que -pueda controlar la letra de la canción. Encontramos @code{LyricText}, -que parece adecuado. Al seguir este enlace se presentan las -propiedades ajustables para el texto de la letra. Estos incluyen -@code{font-series} y @code{font-size}, pero nada que pudiera aplicar -una forma cursiva. Esto es porque la propiedad de la forma es común a -todos los objetos de fuente tipográfica, y por tanto, en vez de -incluirlo en cada uno de los objetos de presentación, se agrupa junto -con otras propiedades comunes similares y se deposita en un -@strong{Interface}, el interface de las fuentes tipográficas -@code{font-interface}. - -Por tanto, ahora necesitamos aprender cómo encontrar las propiedades -de los interfaces, y descubrir qué objetos usan estas propiedades de -interface. - -Mire de nuevo la página del RFI que describe a LyricText. Al final de -la página hay una lista de enlaces a los interfaces que LyricText -contempla. La lista tiene siete elementos, entre ellos -@code{font-interface}. Al seguir este enlace llegamos a las -propiedades asociadas con este interface, que también son propiedades -de todos los objetos que lo llevan, entre ellos LyricText. - -Ahora vemos todas las propiedades ajustables por el usuario que -controlan las tipografías, entre ellas @code{font-shape(symbol)}, -donde @code{symbol} se puede establecer a @code{upright} (recta), -@code{italics} (cursiva)o @code{caps} (mayúsculas pequeñas). - -Observará que @code{font-series} y @code{font-size} también se -encuentran aquí relacionadas. Esto inmediatamente hace que surja la -pregunta: ¿Por qué están las propiedades comunes de tipografía -@code{font-series} y @code{font-size} relacionadas bajo -@code{LyricText} así como bajo el interface @code{font-interface} pero -@code{font-shape} no lo está? La respuesta es que @code{font-series} -y @code{font-size} se cambian a partir de sus valores predeterminados -globales cuando se crea un objeto @code{LyricText}, pero -@code{font-shape} no lo hace. Entonces los elementos de la lista -@code{LyricText} le dicen los valores para esas dos propiedades que -son de aplicación para @code{LyricText}. Otros objetos que contemplan -@code{font-interface} establecerán dichas propiedades de forma -diferente cuando se crean. - -Veamos si ahora podemos construir la instrucción @code{\override} para -cambiar la letra a cursiva. El objeto es @code{LyricText}, la -propiedad es @code{font-shape} y el valor es @code{italic}. Igual que -antes, omitiremos el contexto. - -Como nota aparte, aunque una nota importante, observe que a causa de -que los valores de @code{font-shape} son símbolos, deben ir precedidos -de un apóstrofo, @code{'}. Esa es la razón por la que se necesitan -apóstrofos antes de @code{thickness} en el ejemplo anterior y en -@code{font-shape}. Los dos son también símbolos. Los símbolos son -nombres especiales que son conocidos por LilyPond internamente. -Algunos de ellos son nombres de propiedades, como @code{thickness} o -@code{font-shape}, otros se utilizan como valores que se les puede dar -a las propiedades, como @code{italic}. Observe la distinción entre -esto y las cadenas de texto arbitrarias, que aparecerían -entrecomilladas como @code{"a text string"}. Para ver más detalles -relacionados con los símbolos y las cadenas, consulte @ref{Scheme -tutorial}. - -Así pues, la instrucción @code{\override} que necesitamos para -imprimir la letra en cursiva sería - -@example -\override LyricText #'font-shape = #'italic -@end example - -@noindent -y debe colocarse justo delante de, y cerca de, la letra a la que debe -afectar, como esto: - -@cindex font-shape, propiedad, ejemplo -@cindex italic, ejemplo -@cindex LyricText, ejemplo de sobreescritura -@cindex @code{\addlyrics}, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - \override LyricText #'font-shape = #'italic - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -y toda la letra se imprime en cursiva. - -@subheading Specifying the context in lyric mode - -@cindex contexto, especificación en modo letra -@cindex letra, modo, especificar el contexto en - -En el caso de la letra, si intenta especificar el contexto en el -formato que acabamos de dar, la instrucción no funcionará. Una -sílaba escrita en el modo letra, «lyricmode» termina en un espacio, un -salto de línea o un dígito. Cualquier otro carácter se incluye como -parte de la sílaba. Por esta razón, un espacio o salto de línea debe -aparecer antes del último símbolo @code{@}} para evitar que se incluya -como parte de la sílaba final. De forma similar, se deben insertar -espacios antes y después del punto, @q{.}, separando el nombre del -contexto del nombre del objeto, pues en caso contrario los dos nombres -se juntarán y el intérprete no podrá reconocerlos. Así pues, la -instrucción será: - -@example -\override Lyrics . LyricText #'font-shape = #'italic -@end example - -@warning{Dentro de la letra, deje siempre espacios entre la sílaba -final y la llave de cierre.} - -@warning{En las sobreescrituras con override dentro de la letra, -escriba siempre espacios antes y después del punto que separa el -nombre del contexto y el nombre del objeto.} - - -@seealso -Manual de aprendizaje: -@ref{Scheme tutorial}. - - -@node Types of properties -@subsection Types of properties - -@cindex propiedades, tipos de - -Hasta ahora hemos visto dos tipos de propiedad:: @code{número} y -@code{símbolo}. Para que sea válido, el valor que se da a una -propiedad debe ser del tipo correcto y obedecer las reglas de dicho -tipo. El tipo de la propiedad se muestra siempre entre paréntesis -después del nombre de la propiedad en el RFI. He aquí una lista de -los tipos que podrá necesitar, junto con las reglas de dicho tipo, y -algunos ejemplos. Debe escribir siempre un símbolo de almohadilla, -@code{#}, por supuesto, delante de estos valores cuando se introducen -en la instrucción @code{\override}. - -@multitable @columnfractions .2 .45 .35 -@headitem Tipo de propiedad - @tab Reglas - @tab Ejemplos -@item Booleano - @tab Verdadero o Falso, representado por #t o #f - @tab @code{#t}, @code{#f} -@item Dimensión (en espacios de pentagrama) - @tab Un número decimal positivo (en unidades de espacios de pentagrama) - @tab @code{2.5}, @code{0.34} -@item Dirección - @tab Una constante válida de dirección o su equivalente numérico (se permiten valores decimales entre -1 y 1) - @tab @code{LEFT}, @code{CENTER}, @code{UP}, - @code{1}, @code{-1} -@item Entero - @tab Un número entero positivo - @tab @code{3}, @code{1} -@item Lista - @tab Un conjunto de valores separados por espacios, encerrado entre paréntesis y precedido de un apóstrofo - @tab @code{'(left-edge staff-bar)}, @code{'(1)}, - @code{'(1.0 0.25 0.5)} -@item Marcado - @tab Cualquier elemento válido de marcado de texto - @tab @code{\markup @{ \italic "cresc." @}} -@item Momento - @tab Una fracción de redonda construida con la función make-moment - @tab @code{(ly:make-moment 1 4)}, - @code{(ly:make-moment 3 8)} -@item Número - @tab Cualquier valor decimal positivo o negativo - @tab @code{3.5}, @code{-2.45} -@item Pareja (de números) - @tab Dos números separados por un @q{espacio . espacio}, encerrado entre paréntesis y precedido de un apóstrofo - @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} -@item Símbolo - @tab Cualquiera del conjunto de símbolos permitidos para esa propiedad, precedido de un apóstrofo - @tab @code{'italic}, @code{'inside} -@item Desconocido - @tab Un procedimiento o @code{#f} para no producir ninguna acción - @tab @code{bend::print}, @code{ly:text-interface::print}, - @code{#f} -@item Vector - @tab Una lista de tres elementos encerrados entre paréntesis y precedida de apóstrofo-almohadilla, @code{'#}. - @tab @code{'#(#t #t #f)} -@end multitable - - -@seealso -Manual de aprendizaje: -@ref{Scheme tutorial}. - - -@node Appearance of objects -@section Appearance of objects - -Ahora vamos a poner en práctica lo que hemos aprendido con unos -cuantos ejemplos que muestran cómo se pueden usar los trucos para -cambiar el aspecto de la música impresa. - -@menu -* Visibility and color of objects:: -* Size of objects:: -* Length and thickness of objects:: -@end menu - -@node Visibility and color of objects -@subsection Visibility and color of objects - -Dentro de un uso educativo de la música, podríamos desear imprimir una -partitura con ciertos elementos omitidos como ejercicio para el -alumno, a quien se le pide que los complete. A la manera de ejemplo -sencillo, supongamos que el ejercicio es escribir las líneas -divisorias que faltan en un fragmento musical. Pero las líneas -divisorias normalmente se insertan automáticamente. ¿Cómo hacemos para -que no se impriman? - -Antes de enredarnos con esto, recordemos que las propiedades de los -objetos se agrupan en lo que hemos llamado @emph{interfaces} (véase -@ref{Properties found in interfaces}). Esto es simplemente agrupar -las propiedades que se pueden usar juntas para trucar un objeto -gráfico: si una de ellas se necesita para un objeto, también las -otras. Así, ciertos objetos usan las propiedades de algunos -interfaces, otros usan las de otros interfaces. Los interfaces que -contienen las propiedades que un determinado grob necesita se -encuentran relacionadas en el manual RFI al final de la página que -describe dicho grob, y esas propiedades se pueden ver mirando dichos -interfaces. - -Hemos explicado cómo encontrar información sobre los grobs en -@ref{Properties of layout objects}. Usando el mismo enfoque, vamos al -RFI para buscar el objeto de presentación que imprime las líneas -divisorias. A través del enlace @emph{Backend} y @emph{All layout -objects} encontramos que hay un objeto de presentación llamado -@code{BarLine}. Entre sus propiedades se encuentran dos que controlan -la visibilidad: @code{break-visibility} y @code{stencil}. Las líneas -divisorias también contemplan un número de interfaces, entre ellos el -@code{grob-interface}, donde podemos encontrar las propiedades -@code{transparent} y @code{color}. Todas ellas pueden afectar la -visibilidad de las barras de compás (y, por supuesto, por extensión, -también la de muchos otros objetos de presentación). Vamos a -considerar cada uno de ellos por orden. - -@subheading stencil - -@cindex stencil (sello), propiedad - -Esta propiedad controla la apariencia de las barras de compás mediante -la especificación del símbolo (o «glifo») que se debe imprimir. Igual -que como otras muchas propiedades, se puede establecer de forma que no -imprima nada ajustando su valor a @code{#f}. Vamos a probarlo, como -antes, omitiendo el Contexto implícito, @code{Voice}: - -@cindex BarLine, ejemplo de sobreescritura -@cindex stencil, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Las barras de compás todavía se imprimen. ¿Qué es lo que está mal? -Vuelva al RFI y mire de nuevo la página que ofrece las propiedades del -objeto BarLine. Al principio de la página dice @qq{Barline objects -are created by: Bar_engraver} (los objetos Barline se crean por el -grabador Bar_engraver). Vaya a la página del grabador -@code{Bar_engraver} siguiendo el enlace. Al final da una lista de -contextos en los que el grabador de líneas divisorias opera. Todos -ellos son del tipo @code{Staff}, y así la razón de que la instrucción -@code{\override} no funcionara como esperábamos, es porque -@code{Barline} no se encuentra en el contexto predeterminado -@code{Voice}. Si el contexto se especifica mal, la instrucción -simplemente no funciona. No se produce ningún mensaje de error, y no -se registra nada en el archivo log de registro. Vamos a intentar -corregirlo escribiendo el contexto correcto: - -@cindex BarLine, ejemplo de sobreescritura -@cindex stencil, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Ahora las barras de compás han desaparecido. - -@subheading break-visibility - -@cindex break-visibility, propiedad - -Vemos en las propiedades de @code{BarLine} que aparecen en el RFI que -la propiedad @code{break-visibility} requiere un vector de tres -valores booleanos. Controlan respectivamente si las barras de compás -se imprimen al final de una línea, en mitad de una línea, y al -principio de las líneas. Para nuestro ejemplo, queremos que todas las -barras de compás se supriman, por lo que el valor que necesitamos es -@code{'#(#f #f #f)}. Vamos a probarlo, recordando incluir el contexto -de @code{Staff}. Observe también que al escribir este valor tenemos -@code{#'#} antes del paréntesis de apertura. Se necesita @code{'#} -como parte del valor para introducir un vector, y el primer símbolo de -almohadilla @code{#} se necesita, como siempre, para preceder el valor -en sí dentro de la instrucción @code{\override}. - -@cindex BarLine, ejemplo de sobreescritura -@cindex break-visibility, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'break-visibility = #'#(#f #f #f) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Y podemos ver que esto también quita todas las líneas divisorias. - -@subheading transparent - -@cindex transparent, propiedad -@cindex transparencia - -En la relación de propiedades que se especifican en la página del -@code{grob-interface} del RFI podemos ver que la propiedad -@code{transparent} es un valor booleano. Esto se debe establecer a -@code{#t} para hacer que el grob sea transparente. En el ejemplo -siguiente vamos a hacer que la indicación de compás, y no las líneas -divisorias, sea transparente. Para hacerlo tenemos que buscar el -nombre del grob de la indicación de compás. Volviendo a la página -@q{All layout objects} del RFI, buscamos las propiedades del objeto de -presentación @code{TimeSignature}. Se produce por parte del grabador -@code{Time_signature_engraver} que como puede comprobar vive dentro -del contexto de @code{Staff} y también contempla el interface -@code{grob-interface}. Así pues, la instrucción que hace transparente -a la indicación de compás es: - -@cindex TimeSignature, ejemplo de sobreescritura -@cindex transparent, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'transparent = ##t - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -El compás ya no está, pero esta instrucción deja una separación en el -lugar donde antes estaba la indicación de compás. Quizá esto es lo -que queremos para un ejercicio en que el alumno deba escribirlo, pero -en otras circunstancias esta separación podría no ser deseable. En -vez de eso, para quitarla, el stencil o «sello» de la indicación de -compás se debe establecer al valor @code{#f}: - -@cindex TimeSignature, ejemplo de sobreescritura -@cindex stencil, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -y la diferencia es obvia: al establecer el sello al valor @code{#f} -quitamos el objeto por completo; al hacer el objeto @code{transparent} -lo dejamos donde está, pero lo hacemos invisible. - -@subheading color - -@cindex color, propiedad - -Para finalizar, intentemos hacer invisibles las barras de compás -pintándolas de color blanco (hay un problema relacionado, que consiste -en que la línea divisoria blanca puede tapar o no tapar las líneas del -pentagrama a las que cruza. Podrá observar en algunos de los ejemplos -que aparecen a continuación, que esto sucede de forma impredecible. -Los detalles sobre por qué esto ocurre así, y cómo controlarlo, se -estudian en @ruser{Painting objects white}; de momento estamos -estudiando el color, por lo que le rogamos que acepte esta limitación -por ahora). - -El interface @code{grob-interface} especifica que la propiedad del -color es una lista, pero no hay ninguna explicación sobre lo que debe -ir en esa lista. La lista que requiere es realmente una lista de -valores en unidades internas, pero para evitar tener que saber cuáles -son, se ofrecen varias vías para la especificación de los colores. La -primera forma es utilizar uno de los colores @q{normales} que están -relacionados en la primera tabla de la @ruser{List of colors}. Para -poner las líneas divisorias de color blanco, escribimos: - -@cindex BarLine, ejemplo de sobreescritura -@cindex color, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #white - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -y de nuevo podemos comprobar que las barras de compás no son visibles. -Observe que @emph{white} no viene precedido de un apóstrofo: no es un -símbolo, sino una @emph{función}. Cuando se invoca, proporciona la -lista de valores internos que se requieren para establecer el color a -blanco. Los otros colores de la lista normal también son funciones. -Para convencerse de que esto funciona, quizá quiera cambiar el color a -una de las otras funciones de la lista. - -@cindex colores de X11 -@cindex X11, colores de - -@funindex x11-color - -La segunda forma de cambiar el color es utilizar la lista de nombres -de colores de X11 que aparecen en la segunda lista de @ruser{List of -colors}. Sin embargo, éstos deben ir precedidos de otra función, que -convierte los nombres de colores de X11 en la lista de valores -internos, @code{x11-color}, de la siguiente manera: - -@cindex BarLine, ejemplo de sobreescritura -@cindex color, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(x11-color 'white) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Observe que en este caso la función @code{x11-color} toma un símbolo -como argumento, así que el símbolo debe ir precedido de un apóstrofo y -los dos deben ir entre paréntesis. - -@cindex rgb, colores -@cindex color, rgb - -@funindex rgb-color - -Aún hay una tercera función, que convierte valores RGB en colores -internos: la función @code{rgb-color}. Toma tres argumentos que dan -las intensidades de rojo, verde y azul. Cada uno de ellos puede tomar -valores entre 0 y 1. Por lo tanto, para establecer el color a rojo el -valor debe ser @code{(rgb-color 1 0 0)} y para blanco debe ser -@code{(rgb-color 1 1 1)}: - -@cindex BarLine, ejemplo de sobreescritura -@cindex color, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(rgb-color 1 1 1) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Finalmente, existe también una escala de grises como parte del -conjunto de colores de X11. Varían desde el negro, @code{'grey0'}, -hasta el blanco, @code{'grey100}, en pasos de 1. Vamos a ilustrar esto -estableciendo todos los objetos de presentación de nuestro ejemplo a -varias gradaciones de gris: - -@cindex StaffSymbol, ejemplo de sobreescritura -@cindex TimeSignature, ejemplo de sobreescritura -@cindex Clef, ejemplo de sobreescritura -@cindex NoteHead, ejemplo de sobreescritura -@cindex Stem, ejemplo de sobreescritura -@cindex BarLine, ejemplo de sobreescritura -@cindex color property, ejemplo -@cindex x11-color, ejemplo de utilización - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.StaffSymbol #'color = #(x11-color 'grey30) - \override Staff.TimeSignature #'color = #(x11-color 'grey60) - \override Staff.Clef #'color = #(x11-color 'grey60) - \override Voice.NoteHead #'color = #(x11-color 'grey85) - \override Voice.Stem #'color = #(x11-color 'grey85) - \override Staff.BarLine #'color = #(x11-color 'grey10) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Observe los contextos asociados con cada uno de los objetos de -presentación. Es importante que estén correctamente escritos, o las -instrucciones ¡no funcionarán! Recuerde que el contexto es aquel en -que se encuentra el grabador correspondiente. El contesto -predeterminado para los grabadores puede encontrarse empezando por el -objeto de presentación, de ahí al grabador que lo produce, y en la -página del grabador del RFI aparece en qué contexto se puede encontrar -normalmente el grabador. - - -@node Size of objects -@subsection Size of objects - -@cindex cambiar el tamaño de los objetos -@cindex tamaño de los objetos -@cindex objetos, tamaño de -@cindex objetos, cambiar el tamaño de - -Empezaremos examinando de nuevo un ejemplo anterior (véase -@ref{Nesting music expressions}) que nos mostraba cómo introducir un -pentagrama temporal, como en un @rglos{ossia}. - -@cindex alignAboveContext, propiedad, ejemplo -@cindex @code{\with}, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } - } -@end lilypond - -Los fragmentos de Ossia se escriben normalmente sin clave ni compás, y -por lo normal se imprimen más pequeños que el pentagrama principal. -Ya sabemos cómo quitar la clave y el compás: simplemente establecemos -el sello de cada uno de ellos a @code{#f}, como sigue: - -@cindex alignAboveContext, propiedad, ejemplo -@cindex @code{\with}, ejemplo -@cindex stencil, propiedad, ejemplo -@cindex Clef, ejemplo de sobreescritura -@cindex TimeSignature, ejemplo de sobreescritura - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - } - { - \override Staff.Clef #'stencil = ##f - \override Staff.TimeSignature #'stencil = ##f - { f8 f c } - } - >> - r4 | - } -} -@end lilypond - -@noindent -donde el par de llaves adicional después de la cláusula @code{\with} -es necesario para asegurar que la sobreescritura encerrada y la música -se aplican al pentagrama de ossia. - -Pero ¿cuál es la diferencia entre modificar el contexto de pentagrama -usando @code{\with} y modificar los sellos de clave y de compás con -\override? La diferencia principal es que los cambios que se realizan -en una cláusula @code{\with} se hacen en el momento en que se crea el -contexto, y permanecen activos como valores @strong{predeterminados} -durante toda la duración de dicho contexto, mientras que las -instrucciones @code{\set} o @code{\override} incluidas dentro de la -música son dinámicas: hacen cambios sincronizados con un punto -concreto de la música. Si los cambios se deshacen o se devuelven -mediante @code{\unset} o @code{\revert} volverán a su valor -predeterminado que será el establecido en la cláusula @code{\with}, o -si no se ha establecido ninguno en este lugar, los valores -predeterminados normales. - -Ciertas propiedades de contexto se pueden modificar solamente dentro -de cláusulas @code{\with}. Son aquellas propiedades que no se pueden -cambiar después de que el contexto se ha creado. -@code{alignAboveContext} y su compañero, @code{alignBelowContext}, son -dos de tales propiedades: una vez que el pentagrama se ha creado, su -alineación está decidida y no tendría sentido intentar cambiarla más -tarde. - -Los valores predeterminados de las propiedades de los objetos de -presentación también se pueden establecer dentro de cláusulas -@code{\with}. Simplemente utilice la instrucción @code{\override} -normal dejando aparte el nombre del contexto, ya que está definido sin -ambigüedad como el contexto que la cláusula @code{\with} está -modificando. De hecho, se producirá un error si se especifica un -contexto en este lugar. - -Así pues, podemos reemplazar el ejemplo anterior con - -@cindex alignAboveContext, propiedad, ejemplo -@cindex @code{\with}, example -@cindex Clef, ejemplo de sobreescritura -@cindex TimeSignature, ejemplo de sobreescritura - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - % Don't print clefs in this staff - \override Clef #'stencil = ##f - % Don't print time signatures in this staff - \override TimeSignature #'stencil = ##f - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Finalmente llegamos a la forma de cambiar el tamaño de los objetos de -presentación. - -Ciertos objetos de presentación se crean como glifos sacados de una -fuente tipográfica. Entre ellos se encuentran las cabezas, -alteraciones, elementos de marcado, claves, indicaciones de compás, -indicaciones dinámicas y la letra de las canciones. Su tamaño se -cambia mediante la modificación de la propiedad @code{font-size}, como -veremos en breve. Otros objetos de presentación como ligaduras de -unión y de expresión (en general, objetos de extensión) se trazan -individualmente, por lo que no hay un tamaño de tipografía -@code{font-size} asociado a ellos. Estos objetos generalmente derivan -su tamaño de los objetos a los que están adosados, y por ello -normalmente no hay necesidad de cambiarles el tamaño manualmente. Aún -otras propiedades como la longitud de las plicas y las barras de -compás, el grosor de las barras de corchea y otras líneas, y la -separación de las líneas del pentagrama se deben modificar de otras -formas especiales. - -Volviendo al ejemplo del ossia, vamos a cambiar en primer lugar el -tamaño de la tipografía. Podemos hacerlo de dos formas. Podemos -cambiar el tamaño de las tipografías de cada uno de los tipos de -objeto como las cabezas (@code{NoteHead}s) con instrucciones como - -@example -\override NoteHead #'font-size = #-2 -@end example - -o podemos cambiar el tamaño de todas las tipografías estableciendo una -propiedad especial, @code{fontSize}, utilizando @code{\set}, o -mediante su inclusión dentro de una cláusula @code{\with} (pero sin el -@code{\set}). - -@example -\set fontSize = #-2 -@end example - -Los dos enunciados producirían una reducción del tamaño de la -tipografía en dos pasos a partir de su valor previo, donde cada paso -reduce o aumenta el tamaño aproximadamente en un 12%. - -Vamos a probarlo en nuestro ejemplo del ossia: - -@cindex alignAboveContext, propiedad, ejemplo -@cindex @code{\with}, ejemplo -@cindex Clef, ejemplo de sobreescritura -@cindex TimeSignature, ejemplo de sobreescritura -@cindex fontSize, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - % Reduce all font sizes by ~24% - fontSize = #-2 - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Aún no está demasiado bien. Las cabezas y los corchetes de las notas -son más pequeños, pero las plicas son demasiado largas en proporción, -y las líneas del pentagrama están demasiado separadas entre sí. Se -debe reducir su escala en proporción a la reducción de la tipografía. -El siguiente apartado trata sobre cómo se hace esto. - -@node Length and thickness of objects -@subsection Length and thickness of objects - -@cindex distancias -@cindex grosor -@cindex longitud -@cindex magstep -@cindex tamaño, cambiar -@cindex plica, cambiar la longitud -@cindex pentagrama, cambiar la separación de las líneas - -Las distancias y longitudes en LilyPond se miden generalmente en -espacios de pentagrama, la distancia entre líneas adyacentes de la -pauta (o de manera ocasional medios espacios), mientras que la mayoría -de las propiedades de @code{thickness} (grosor) se miden en unidades -de una propiedad interna llamada @code{line-thickness.} Por ejemplo, -de forma predeterminada, a las líneas de los reguladores se les da un -grosor de 1 unidad de @code{line-thickness}, mientras que el -@code{thickness} de una plica es 1.3. Observe sin embargo que ciertas -propiedades de grosor son diferentes; por ejemplo, el grosor de las -barras de corchea se mide en espacios de pentagrama. - -Entonces ¿cómo se tienen que escalar las longitudes en proporción al -tamaño de la tipografía? Se puede hacer con la ayuda de una función -especial que se llama @code{magstep}, pensada especialmente para este -propósito. Toma un argumento, el cambio de tamaño de la tipografía -(#-2 en nuestro ejemplo) y devuelve un factor de escalado adecuado -para reducir otros objetos en la misma proporción. Se usa de la -siguiente forma: - -@cindex alignAboveContext, propiedad, ejemplo -@cindex @code{\with}, ejemplo -@cindex Clef, ejemplo de sobreescritura -@cindex TimeSignature, ejemplo de sobreescritura -@cindex fontSize, propiedad, ejemplo -@cindex StaffSymbol, ejemplo de sobreescritura -@cindex magstep function, ejemplo de utilización -@cindex staff-space, propiedad, ejemplo -@cindex stencil, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - fontSize = #-2 - % Reduce stem length and line spacing to match - \override StaffSymbol #'staff-space = #(magstep -2) - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -@noindent -Puesto que la longitud de las plicas y muchas otras propiedades -relacionadas con la longitudes calculan siempre con relación al valor -de la propiedad @code{staff-space}, su longitud también ve reducida su -escala automáticamente. Observe que esto afecta solamente a la escala -vertical del ossia: la escala horizontal se determina por medio de la -disposición de la música principal con el objeto de mantenerse en -sincronía con ella, de forma que no resulte afectada por ninguno de -estos cambios de tamaño. Por supuesto, si la escala de toda la música -principal se cambiase de esta forma, entonces el espaciado horizontal -se vería afectado. Trataremos de esto más tarde en la sección sobre -la disposición. - -Esto, en fin, completa la creación de un ossia. Los tamaños y -longitudes del resto de los objetos se pueden modificar de manera -análoga. - -Para cambios de escala pequeños, como en el ejemplo de arriba, el -grosor de las diversas líneas dibujadas como divisorias, barras de -corchea, reguladores, ligaduras, etc, no requieren normalmente ningún -ajuste global. Si el grosor de cualquier objeto de presentación en -particular necesita ajustarse, se puede hacer mejor mediante la -sobreescritura de su propiedad @code{thickness}. Anteriormente -mostramos un ejemplo de cambio de grosor en las ligaduras, en -@ref{Properties of layout objects}. El grosor de todos los objetos -trazados (es decir, aquellos que no se producen a partir de una -tipografía) se pueden cambiar de la misma forma. - - -@node Placement of objects -@section Placement of objects - -@menu -* Automatic behaviour:: -* Within-staff objects:: -* Outside-staff objects:: -@end menu - - -@node Automatic behaviour -@subsection Automatic behaviour - -@cindex dentro del pentagrama, objetos -@cindex fuera del pentagrama, objetos -@cindex objetos dentro del pentagrama -@cindex objetos fuera del pentagrama - -Hay ciertos objetos en notación musical que pertenecen al pentagrama y -otros cuyo lugar se sitúa fuera del pentagrama. Reciben el nombre de -objetos dentro-del-pentagrama y objetos fuera-del-pentagrama, -respectivamente. - -Los objetos dentro-del-pentagrama son los que se sitúan sobre la -pauta: cabezas, plicas, alteraciones, etc. Sus posiciones normalmente -se fijan por la propia música; se posicionan verticalmente sobre -líneas específicas del pentagrama o están unidos a otros objetos -posicionados de esta forma. Las colisiones entre cabezas, plicas y -alteraciones en acordes de notas muy juntas, normalmente se evitan -automáticamente. Hay instrucciones y sobreescrituras que pueden -modificar este comportamiento automático, como veremos en breve. - -Entre los objetos que pertenecen al exterior de la pauta se encuentran -cosas como las marcas de ensayo, las marcas de texto y las de -dinámica. La regla de LilyPond para la colocación vertical de los -objetos fuera-de-pentagrama es colocarlos tan cerca del pentagrama -como sea posible, pero no tan cerca como para que puedan chocar con -algún otro objeto. LilyPond utiliza la propiedad -@code{outside-staff-priority} para determinar el orden en que se deben -situar los objetos, como veremos ahora. - -En primer lugar, LilyPond sitúa todos los objetos -dentro-del-pentagrama. Después ordena los objetos -fuera-del-pentagrama de acuerdo con su prioridad -@code{outside-staff-priority}. Los objetos fuera-del-pentagrama se -toman de uno en uno, comenzando por el que tiene la prioridad -@code{outside-staff-priority} más baja, y se sitúan de forma que no -colisionen con ningún objeto que se haya colocado ya. Esto es, si dos -grobs fuera-del-pentagrama compiten por el mismo espacio, el que tiene -la prioridad @code{outside-staff-priority} más baja se colocará más -cerca del pentagrama. Si dos objetos tienen la misma -@code{outside-staff-priority}, el que se ha encontrado primero se -situará más cerca de la pauta. - -En el siguiente ejemplo, todos los textos de marcado tienen la misma -prioridad (pues no se ha establecido explícitamente). Observe que -@q{Text3} se posiciona de nuevo automáticamente cerca del pentagrama, -acomodado por debajo de @q{Text2}. - -@cindex markup, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -Los pentagramas también se posicionan, de forma predeterminada, tan -cerca unos de otros como sea posible (sujeto a una separación mínima). -Si las notas se proyectan muy lejos en dirección a un pentagrama -adyacente, forzarán a alejarse a los pentagramas sólo si en caso -contrario fuese a ocurrir un solapamiento de la notación. El ejemplo -siguiente muestra esta acomodación @q{nestling} de las notas sobre -pentagramas adyacentes: - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \relative c' { c a, } - } - \new Staff { - \relative c'''' { c a, } - } ->> -@end lilypond - - -@node Within-staff objects -@subsection Within-staff objects - -Ya hemos visto cómo las instrucciones @code{\voiceXXX} affectan a la -dirección de las ligaduras de expresión y de unión, digitaciones y -todo lo demás que dependa de la dirección de las plicas. Cuando se -escribe música polifónica, estas instrucciones son esenciales para que -puedan distinguirse varias líneas melódicas entrelazadas. Pero -ocasionalmente puede ser necesario sobreescribir este comportamiento -automático. Se puede hacer por secciones de música completas o -incluso para una nota individual. La propiedad que controla este -comportamiento es la propiedad de @code{direction} (dirección) de cada -objeto de presentación. En primer lugar explicaremos qué hace esto, y -luego introduciremos algunas instrucciones listas para usar que le -evitarán tener que codificar sobreescrituras explícitas para las -modificaciones más comunes. - -Algunos objetos de presentación como las ligaduras se curvan hacia -arriba o hacia abajo; otros como las plicas y los corchetes también se -mueven a la derecha o a la izquierda cuando apuntan hacia arriba o -hacia abajo. Esto se controla automáticamente cuando está establecida -la propiedad @code{direction}. - -@cindex abajo -@cindex arriba -@cindex centro -@cindex neutro -@cindex down -@cindex up -@cindex center -@cindex neutral - -El ejemplo siguiente muestra en el compás 1 el comportamiento -predeterminado de las plicas, con las de las notas agudas apuntando -hacia abajo y las graves hacia arriba, seguidas de cuatro notas con -todas las plicas forzadas hacia abajo, cuatro notas con las plicas -forzadas hacia arriba, y por último cuatro notas devueltas al -comportamiento predeterminado. - -@cindex Stem, ejemplo de sobreescritura -@cindex direction, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a4 g c a -\override Stem #'direction = #DOWN -a g c a -\override Stem #'direction = #UP -a g c a -\revert Stem #'direction -a g c a -@end lilypond - -Aquí utilizamos las constantes @code{DOWN} (abajo) y @code{UP} -(arriba). Éstos tienen los valores @code{-1} y @code{+1} -respectivamente, y dichos valores numéricos también se pueden usar -directamente. El valor @code{0} también se puede usar en algunos -casos. Se trata simplemente con el significado de @code{UP} para las -plicas, pero para algunos objetos tiene el significado de -@q{centrado}. Existe una constante @code{CENTER} que tiene el valor -@code{0}. - -Sin embargo, estas sobreescrituras no se usan muy a menudo porque -están disponibles instrucciones predefinidas equivalentes más -sencillas. Aquí podemos ver una tabla de las más comunes. Se -menciona el significado de cada una allí donde no es obvio. - -@multitable @columnfractions .2 .2 .25 .35 -@headitem Abajo o Izquierda - @tab Arriba o Derecha - @tab Anular - @tab Efecto -@item @code{\arpeggioArrowDown} - @tab @code{\arpeggioArrowUp} - @tab @code{\arpeggioNormal} - @tab La flecha está abajo, arriba o no hay flecha -@item @code{\dotsDown} - @tab @code{\dotsUp} - @tab @code{\dotsNeutral} - @tab Dirección del desplazamiento para evitar las líneas del pentagrama -@item @code{\dynamicDown} - @tab @code{\dynamicUp} - @tab @code{\dynamicNeutral} - @tab -@item @code{\phrasingSlurDown} - @tab @code{\phrasingSlurUp} - @tab @code{\phrasingSlurNeutral} - @tab Nota: diferente de las instrucciones de ligaduras de expresión -@item @code{\slurDown} - @tab @code{\slurUp} - @tab @code{\slurNeutral} - @tab -@item @code{\stemDown} - @tab @code{\stemUp} - @tab @code{\stemNeutral} - @tab -@item @code{\textSpannerDown} - @tab @code{\textSpannerUp} - @tab @code{\textSpannerNeutral} - @tab El texto introducido como objeto de extensión está debajo o encima del pentagrama -@item @code{\tieDown} - @tab @code{\tieUp} - @tab @code{\tieNeutral} - @tab -@item @code{\tupletDown} - @tab @code{\tupletUp} - @tab @code{\tupletNeutral} - @tab Los grupos especiales están debajo o encima de las notas -@end multitable - -Observe que estas instrucciones predefinidas @strong{no} pueden ir -precedidas de @code{\once}. Si quiere limitar el efecto a una sola -nota, deberá elegir entre usar la instrucción @code{\once \override} -equivalente, o usar la instrucción predefinida, seguida después de la -nota afectada por la instrucción @code{\xxxNeutral} correspondiente. - -@subheading Fingering - -@cindex digitación, colocación -@cindex digitación de acordes - -La colocación de las digitaciones sobre notas sueltas también se puede -controlar mediante la propiedad @code{direction}, pero los cambios -sobre @code{direction} no tienen ningún efecto sobre las notas de los -acordes. Como veremos, existen instrucciones especiales que permiten -controlar las digitaciones de notas individuales, situando la -digitación encima, debajo, a la izquierda o a la derecha de cada nota. - -En primer lugar, he aquí el efecto de @code{direction} sobre las -digitaciones aplicadas a notas sueltas. Se muestra en el primer -compás el comportamiento predeterminado, y en los dos comases -siguiente el efecto de especificar @code{DOWN} y @code{UP}: - -@cindex Fingering, ejemplo de sobreescritura -@cindex direction, propiedad, ejemplo - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #DOWN -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #UP -c-5 a-3 f-1 c'-5 -@end lilypond - -Sin embargo, la sobreescritura de la propiedad @code{direction} no es -la forma más sencilla de especificar manualmente la digitación por -encima o por debajo de las notas; suele ser preferible usar @code{_} o -@code{^} en lugar de @code{-}, antes del número de la digitación. -Este es el ejemplo anterior utilizando este método: - -@cindex fingering, ejemplo -@cindex digitación, ejemplo - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -c_5 a_3 f_1 c'_5 -c^5 a^3 f^1 c'^5 -@end lilypond - -La propiedad @code{direction} se ignora para los acordes, pero los -prefijos direccionales @code{_} y @code{^} sí funcionan. De forma -predeterminada, las digitaciones se colocan automáticamente encima y -debajo de las notas de un acorde, como se muestra aquí: - -@cindex fingering, ejemplo -@cindex digitación, ejemplo - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -@noindent -pero se puede forzar de manera que todos o algunos de los números de -digitación estén por encima o por debajo: - -@cindex fingering, ejemplo -@cindex digitación, ejemplo - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -Es posible ejercer un control aún mayor sobre la colocación de las -digitaciones mediante la utilización de la instrucción @code{\set -fingeringOrientations}. El formato de esta instrucción es: - -@example -@code{\set fingeringOrientations = #'([up] [left/right] [down])} -@end example - -@noindent -se utiliza @code{\set} porque @code{fingeringOrientations} es una -propiedad del contexto @code{Voice}, creado y usado por el grabador -@code{New_fingering_engraver}. - -La propiedad se puede establecer al valor de una lista de entre uno y -tres valores. Controla si las digitaciones se pueden colocar por -encima (si @code{up} aparece en la lista), por debajo (si aparece -@code{down}), a la izquierda (si aparece @code{left}) o a la derecha -(si aparece @code{right}). A la inversa, si una colocación no está en -la lista, no se sitúa ninguna digitación en dicho lugar. LilyPond -coma estas restricciones y se trabaja la mejor colocación para la -digitación de las notas de los acordes que siguen. Observe que -@code{left} y @code{right} son mutuamente excluyentes: las -digitaciones pueden situarse en un lado o en el otro, no en los dos. - -@warning{Para controlar la colocación de la digitación de una sola -nota usando esta instrucción es necesario escribirla como un acorde de -una sola nota encerrándola entre ángulos simples.} - -Aquí podemos ver algunos ejemplos: - -@cindex fingering, ejemplo -@cindex digitación, ejemplo -@cindex @code{\set}, ejemplo de utilización -@cindex fingeringOrientations, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - -@noindent -Si la digitación parece un poco superpoblada, se puede reducir el -tamaño @code{font-size}. El valor predeterminado puede verse en el -objeto @code{Fingering} del RFI que es @code{-5}, así que probaremos -@code{-7}: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\override Fingering #'font-size = #-7 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - - -@node Outside-staff objects -@subsection Outside-staff objects - -Los objetos fuera-del-pentagrama se colocan automáticamente para -evitar las colisiones. Los objetos que tienen el valor más bajo de la -propiedad @code{outside-staff-priority} se sitúan más cerca del -pentagrama, y entonces otros objetos fuera-del-pentagrama se elevan -tanto como sea necesario para evitar la colisión. La prioridad -@code{outside-staff-priority} se defina en el @code{grob-interface} y -así es una propiedad de todos los objetos de presentación. De forma -predeterminada se establece a @code{#f} para todos los objetos -dentro-del-pentagrama, y a un valor numérico adecuado a cada objeto -fuera-del-pentagrama cuando se crea el objeto. La tabla siguiente -presenta los valores numéricos predeterminados para algunos de los -objetos fuera-del-pentagrama que están inicialmente dentro de los -contextos @code{Staff} o @code{Voice}. - -@multitable @columnfractions .3 .3 .3 -@headitem Objeto de presentación - @tab Prioridad - @tab Controla la posición de: -@item @code{MultiMeasureRestText} - @tab @code{450} - @tab Texto sobre silencios de compás completo -@item @code{TextScript} - @tab @code{450} - @tab Elementos de marcado de texto -@item @code{OttavaBracket} - @tab @code{400} - @tab Corchetes de octava alta y baja -@item @code{TextSpanner} - @tab @code{350} - @tab Objetos de extensión de texto -@item @code{DynamicLineSpanner} - @tab @code{250} - @tab Todas las indicaciones dinámicas -@item @code{VoltaBracketSpanner} - @tab @code{100} - @tab Corchetes de primera y segunda vez -@item @code{TrillSpanner} - @tab @code{50} - @tab Trinos mantenidos -@end multitable - -He aquí un ejemplo que muestra la situación predeterminada de algunos -de ellos. - -@cindex texto, extensiones de -@cindex octava alta y baja, corchete de - -@funindex \startTextSpan -@funindex startTextSpan -@funindex \stopTextSpan -@funindex stopTextSpan - -@cindex TextSpanner, ejemplo de sobreescritura -@cindex bound-details, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -Este ejemplo también muestra cómo crear textos con extensión (Text -Spanners): textos con líneas extensoras por encima de una sección de -música. El extensor abarca desde la instrucción @code{\startTextSpan} -hasta la instrucción @code{\stopTextSpan}, y el formado del texto se -define por medio de la instrucción @code{\override TextSpanner}. Para -ver más detalles, consulte @ruser{Text spanners}. - -También muestra la manera de crear corchetes de octava alta y baja. - -@cindex trucar la situación de los números de compás -@cindex números de compás, ajustar posición -@cindex trucar la situación de marcas metronómicas -@cindex metrónomo, situación de las indicaciones de -@cindex trucar la situación de las letras de ensayo -@cindex ensayo, letras, trucar la colocación - -Observe que los números de compás, las indicaciones metronómicas y las -mercas de ensayo no se muestran. De forma predeterminada, se crean -dentro del contexto @code{Score} y su prioridad -@code{outside-staff-priority} se ignora con relación a los objetos de -presentación que se crean dentro del contexto @code{Staff}. Si quiere -colocar los números de compás, indicaciones metronómicas o llamadas de -ensayo en concordancia con el valor de su -@code{outside-staff-priority}, los grabadores -@code{Bar_number_engraver}, @code{Metronome_mark_engraver} o -@code{Mark_engraver} respectivamente se deben eliminar del contexto -@code{Score} y colocarlos en el contexto @code{Staff} del nivel -superior. Si se hace así, estas marcas obtendrán los siguientes -valores predeterminados de @code{outside-staff-priority}: - -@multitable @columnfractions .3 .3 -@headitem Objeto de presentación @tab Prioridad -@item @code{RehearsalMark} @tab @code{1500} -@item @code{MetronomeMark} @tab @code{1000} -@item @code{BarNumber} @tab @code{ 100} -@end multitable - -Si los valores predeterminados de @code{outside-staff-priority} no le -ofrecen las colocaciones deseadas se puede sobreescribir la prioridad -de cualquiera de los objetos. Suponga que quisiéramos que el corchete -de octava estuviera situado por debajo del elemento extensor de texto -en el ejemplo de arriba. Todo lo que debemos hacer es localizar la -prioridad de @code{OttavaBracket} en el RFI o en las tablas -anteriores, y reducirlo a un valor inferior al de @code{TextSpanner}, -recordando que @code{OttavaBracket} se crea dentro del contexto de -@code{Staff}: - -@cindex TextSpanner, ejemplo de sobreescritura -@cindex bound-details, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -%Place following Ottava Bracket below Text Spanners -\once \override Staff.OttavaBracket #'outside-staff-priority = #340 -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -@cindex ligaduras y outside-staff-priority -@cindex ligaduras y articulaciones -@cindex articulaciones y ligaduras - -De forma predeterminada, las ligaduras de expresión están clasificadas -como objetos dentro-del-pentagrama, pero con frecuencia aparecen -encima del pentagrama si las notas que une son muy agudas. Ello puede -empujar a una posición muy elevada a los objetos fuera-del-pentagrama -como las articulaciones, pues la ligadura se colocará en primer lugar. -La propiedad @code{avoid-slur} de la articulación se puede establecer -al valor @code{'inside} (por dentro) para llevarla al interior de la -ligadura, pero la propiedad @code{avoid-slur} es efectiva solamente si -la prioridad @code{outside-staff-priority} está también ajustada al -valor @code{#f}. De forma alternativa, la prioridad -@code{outside-staff-priority} de la ligadura se puede fijar en un -valor numérico para hacer que se sitúe en línea con otros objetos -fuera del pentagrama de acuerdo con este valor. He aquí un ejemplo -que muestra el efecto de los dos métodos: - -@lilypond[quote,verbatim,relative=2] -c4( c^\markup\tiny\sharp d4.) c8 -c4( -\once \override TextScript #'avoid-slur = #'inside -\once \override TextScript #'outside-staff-priority = ##f -c^\markup\tiny\sharp d4.) c8 -\once \override Slur #'outside-staff-priority = #500 -c4( c^\markup\tiny\sharp d4.) c8 -@end lilypond - -Los cambios en @code{outside-staff-priority} también se pueden emplear -para controlar la situación vertical de los objetos individuales, -aunque los resultados pueden no siempre ser deseables. Suponga que -quiere que @qq{Text3} se sitúe por encima de @qq{Text4} en el ejemplo -bajo el epígrafe Comportamiento Automático de más arriba (véase -@ref{Automatic behaviour}). Todo lo que debemos hacer es localizar la -prioridad de @code{TextScript} en el RFI o en las tablas de arriba, y -aumentar la prioridad de @qq{Text3} hasta un valor superior: - -@cindex TextScript, ejemplo de sobreescritura -@cindex outside-staff-priority, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -\once \override TextScript #'outside-staff-priority = #500 -c^"Text3" -c^"Text4" -@end lilypond - -Esto, ciertamente, eleva a @qq{Text3} por encima de @qq{Text4} pero -también lo eleva por encima de @qq{Text2}, y @qq{Text4} ahora se -desploma hacia abajo. Quizá no sea tan buena idea. ¿Y si lo que -realmente queremos hacer es posicionar todas las anotaciones a la -misma distancia por encima del pentagrama? Para hacerlo, vamos a -necesitar claramente espaciar las notas en sentido horizontal para -hacer sitio para el texto. Esto se hace empleando la instrucción -@code{textLengthOn}. - -@subheading \textLengthOn - -@cindex notas, espaciar junto al texto - -@funindex \textLengthOn -@funindex textLengthOn -@funindex \textLengthOff -@funindex textLengthOff - -De forma predeterminada, el texto producido mediante marcado no ocupa -ningún espacio horizontal en cuanto se refiere a la disposición de la -música. La instrucción @code{\textLengthOn} invierte este -comportamiento, ocasionando que las notas resulten tan espaciadas como -sea necesario para acomodar el texto: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\textLengthOn % Cause notes to space out to accommodate text -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -La instrucción para volver al comportamiento predeterminado es -@code{\textLengthOff}. Recuerde que @code{\once} funciona solamente -con @code{\override}, @code{\set}, @code{\revert} o @code{unset}, así -que no se puede usar con @code{\textLengthOn}. - -@cindex marcado, texto de, permitir las colisiones en - -El texto de marcado también evita las notas que se proyectan por -encima del pentagrama. Si esto no es lo que deseamos, el -desplazamiento automático hacia arriba se puede desactivar mediante el -establecimiento de la prioridad a @code{#f}. He aquí un ejemplo que -muestra cómo el texto de marcado interactúa con tales notas. - -@cindex TextScript, ejemplo de sobreescritura -@cindex outside-staff-priority, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -% This markup is short enough to fit without collision -c2^"Tex" -c''2 -R1 -% This is too long to fit, so it is displaced upwards -c,,2^"Text" -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -c,,2^"Long Text " -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\textLengthOn % and turn on textLengthOn -c,,2^"Long Text " % Spaces at end are honored -c''2 -@end lilypond - - -@subheading Dynamics - -@cindex trucar la colocación de los matices -@cindex dinámica, trucar la colocación de las indicaciones de -@cindex matices, trucar la colocación - -Las indicaciones de matiz dinámico normalmente se colocarán por debajo -del pentagrama, pero se pueden posicionar por encima con la -instrucción @code{dynamicUp}. Se situarán verticalmente respecto a la -nota a la que van adosadas, y flotarán por debajo (o por encima) de -todos los objetos dentro-del-pentagrama tales como ligaduras de fraseo -y números de compás. Esto puede ofrecer resultados bastante -aceptables, como muestra este ejemplo: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\clef "bass" -\key aes \major -\time 9/8 -\dynamicUp -bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | -ees,2.~\)\mf ees4 r8 | -@end lilypond - -Sin embargo, si las notas y sus indicaciones dinámicas adosadas están -muy cerca, la colocación automática evitará las colisiones desplazando -las marcas dinámicas posteriores más lejos, aunque este puede no ser -el lugar óptimo, como muestra el siguiente ejemplo más bien -artificial: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Si se presentara una situación similar en música @q{real}, podría ser -preferible espaciar las notas un poco más entre sí, de forma que todas -las marcas dinámicas puedan caber a la misma distancia vertical desde -el pentagrama. Hemos sido capaces de hacer esto para el texto de -marcado utilizando la instrucción @code{\textLengthOn}, pero no existe -una instrucción equivalente para las indicaciones de matiz dinámico. -Por tanto, tendremos que averiguar cómo hacerlo utilizando -instrucciones @code{\override}. - -@subheading Grob sizing - -@cindex grob, cambio de tamaño de un -@cindex escala de los grobs - -En primer lugar debemos aprender cómo se especifica el tamaño de los -grobs. Todos los grobs tienen un punto de referencia definido dentro -de ellos que se usa para colocarlos respecto a su objeto padre. -Entonces, este punto del grob se posiciona a una distancia horizontal, -@code{X-offset}, y una distancia vertical, @code{Y-offset}, a partir -de su padre. La dimensión horizontal del objeto viene dada por una -pareja de números, @code{X-extent}, que dice dónde están los límites -izquierdo y derecho respecto del punto de referencia. La amplitud -vertical se define de forma similar mediante una pareja de números, -@code{Y-extent}. Éstas son propiedades de todos los grobs que -contemplan el @code{grob-interface}. - -@cindex @code{extra-spacing-width} - -De forma predeterminada, los objetos fuera-del-pentagrama reciben una -anchura cero, de manera que pueden solaparse en la dirección -horizontal. Esto se hace mediante el truco de añadir una cantidad -infinita a la dimensión más a la izquierda y menos infinito a la -dimensión más a la derecha estableciendo el valor de -@code{extra-spacing-width} a @code{'(+inf.0 . -inf.0)}. Así, para -asegurar que no se superponen en la dirección horizontal tendremos que -sobreescribir este valor de @code{extra-spacing-width} a @code{'(0 -. 0)} de forma que el verdadero ancho se presente. Esta es la -instrucción que lo hace para las indicaciones dinámicas: - -@example -\override DynamicText #'extra-spacing-width = #'(0 . 0) -@end example - -@noindent -Veamos si funciona en nuestro ejemplo anterior: - -@cindex DynamicText, ejemplo de sobreescritura -@cindex extra-spacing-width, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -\override DynamicText #'extra-spacing-width = #'(0 . 0) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Bueno, ciertamente ha hecho que las marcas dinámicas ya no estén -desplazadas, pero aún quedan dos problemas. Las marcas tendrían que -separarse un poco más entre sí, y sería mejor si todas estuvieran a la -misma distancia del pentagrama. Podemos resolver el primer problema -fácilmente. En vez de hacer cero la anchura -@code{extra-spacing-width}, podemos añadirle algo más. Las unidades -son el espacio entre dos líneas de pentagrama, así que al mover el -límite izquierdo media unidad a la izquierda y el límite derecho media -unidad hacia la derecha, deberíamos conseguirlo: - -@cindex DynamicText, ejemplo de sobreescritura -@cindex extra-spacing-width, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 staff space -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Esto tiene un mejor aspecto, pero quizá habríamos preferido que las -indicaciones de dinámica estuvieran alineadas sobre la misma línea de -base en lugar de ir hacia arriba y hacia abajo con las notas. La -propiedad que lo hace es @code{staff-padding} (relleno de pentagrama) -que se estudia en la sección siguiente. - - -@node Collisions of objects -@section Collisions of objects - -@menu -* Moving objects:: -* Fixing overlapping notation:: -* Real music example:: -@end menu - -@node Moving objects -@subsection Moving objects - -@cindex mover objetos superpuestos -@cindex mover objetos que colisionan -@cindex moving grobs que colisionan -@cindex objetos que colisionan, mover -@cindex grobs, mover, que colisionan - -Aunque pueda sorprenderle, LilyPond no es perfecto. Ciertos elementos -de notación se pueden superponer, lo que es una lástima, pero en -realidad es bastante poco frecuente. Normalmente la necesidad de -mover objetos es por claridad o razones estéticas: el aspecto es mejor -con un poco más o un poco menos de espacio de separación. - -Existen tres enfoques principales que llevan a la resolución de -superposiciones en la notación. Se deben considerar en el siguiente -orden: - -@enumerate -@item -La @strong{dirección} de uno de los objetos que se superponen se puede -cambiar usando las instrucciones predefinidas que están relacionadas -arriba para los objetos dentro-del-pentagrama (véase @ref{Within-staff -objects}). Se pueden recolocar fácilmente las plicas, ligaduras de -expresión y de unión, barras de corchea, indicaciones dinámicas, texto -y grupos de valoración especial de esta forma. La limitación es que -sólo tiene la posibilidad de elegir entre dos posiciones, y podría ser -que ninguna de ellas sea la adecuada. - -@item -Las @strong{propiedades del objeto}, que LilyPond usa cuando está -colocando los objetos de presentación, se pueden modificar usando la -instrucción de sobreescritura @code{\override}. Las ventadas de hacer -cambios a este tipo de propiedad son: a) que algún otro objeto se -moverá automáticamente si es necesario, para dejarle sitio, y b) una -única sobreescritura se puede aplicar a todas las instancias del mismo -tipo de objeto. Entre tales propiedades se encuentran: - -@itemize - -@item -@code{direction} (dirección) - -Ya se ha estudiado con cierto detalle: véase @ref{Within-staff -objects}. - -@item -@code{padding} (relleno), @code{left-padding} (relleno por la -izquierda), @code{right-padding} (relleno por la derecha), -@code{staff-padding} (relleno de pentagrama) - -@cindex relleno -@cindex left-padding, propiedad -@cindex padding, propiedad -@cindex right-padding, propiedad -@cindex staff-padding, propiedad - -Según un objeto se está colocando, el valor de su propiedad de relleno -@code{padding} especifica el espacio intermedio que se debe dejar -entre él mismo y el límite más próximo del objeto contra el que se -está colocando. Observe que es el valor de @code{padding} del objeto -@strong{que se está colocando} el que se usa; el valor de -@code{padding} del objeto que ya está colocado se ignora. Los -espacios intermedios especificados mediante @code{padding} se pueden -aplicar a todos los objetos que contemplan el interface -@code{side-position-interface}. - -En lugar de con @code{padding}, la colocación de los grupos de -alteraciones se controla con @code{left-padding} y -@code{right-padding}. Estas propiedades se encontrarán en el objeto -@code{AccidentalPlacement} que, observe, vive dentro del contexto de -@strong{staff}. Durante el proceso tipográfico, las cabezas de las -notas se componen tipográficamente en primer lugar, y después las -alteraciones, si existen, se añaden a la izquierda de las cabezas -utilizando la propiedad de relleno por la derecha @code{right-padding} -para determinar la separación entre la alteración y la cabeza. así -pues, sólo la propiedad de relleno por la derecha @code{right-padding} -del objeto @code{AccidentalPlacement} tiene efecto sobre la colocación -de las alteraciones. - -La propiedad @code{staff-padding} está estrechamente relacionada con -la propiedad @code{padding}: @code{padding} controla la separación -mínima entre cualquier objeto que contemple el interface -@code{side-position-interface} y el objeto más cercano (generalmente -la nota o las líneas del pentagrama); @code{staff-padding} se aplica -sólo a los objetos que siempre se sitúan fuera del pentagrama: -controla la separación mínima entre dicho objeto y el pentagrama. -Observe que @code{staff-padding} no tiene ningún efecto sobre objetos -que se posicionan respecto a la nota en vez de hacerlo respecto al -pentagrama, incluso aunque puede ser sobreescrito sin error por tales -objetos: simplemente se ignora. - -Para descubrir qué propiedad de relleno se necesita para el objeto que -quiere recolocar, debe volver al manual de RFI y buscar las -propiedades del objeto. Tenga cuidado porque las propiedades de -relleno podrían no estar en el objeto más obvio, así que busque en los -objetos que puedan tener alguna relación con él. - -Todos los valores de relleno se miden en espacios del pentagrama. -Para la mayor parte de los objetos el valor se establece de forma -predeterminada en aproximadamente 1.0 o menos (varía con cada objeto). -Se puede sobreescribir si se necesita una separación intermedia mayor -(o menor). - -@item -@code{self-alignment-X} (Auto-alineamiento en el eje X) - -@cindex self-alignment-X, propiedad - -Esta propiedad se puede usar para alinear el objeto a la izquierda, a -la derecha, o centrarlo con respecto al punto de referencia del objeto -«padre». Se puede usar con todos los objetos que contemplan el -interface -@code{self-alignment-interface}. En general son objetos que contienen -texto. Los valores son @code{LEFT}, @code{RIGHT} o @code{CENTER}. De -forma alternativa se puede especificar un valor numérico entre -@code{-1} y @code{+1}, donde @code{-1} es alineado por la izquierda, -@code{+1} es alineado por la derecha, y los números intermedios mueven -el texto progresivamente desde alineado por la izquierda hasta alineado -por la derecha. Se pueden especificar valores numéricos mayores de -@code{1} para mover el texto incluso más lejos hacia la izquierda, o -menos de @code{-1} para alejarlo más hacia la derecha. Un cambio en -@code{1} en el valor corresponde a un movimiento de la mitad de la -longitud total del propio texto. - -@item -@code{extra-spacing-width} (anchura de separación adicional) - -@cindex extra-spacing-width, propiedad - -Esta propiedad está disponible para todos los objetos que contemplan -el interface @code{item-interface}. Toma dos números, el primero se -suma al límite izquierdo y el segundo se suma al límite derecho. Los -números negativos desplazan el límite a la izquierda y los positivos a -la derecha, por lo que para ensanchar un objeto el primer número debe -ser negativo y el segundo positivo. Observe que no todos los objetos -ostentan los dos números. Por ejemplo, el objeto @code{Accidental} -(alteración) sólo toma nota del primer número (el borde izquierdo). - -@item -@code{staff-position} (posición de pentagrama) - -@cindex staff-position, propiedad - -@code{staff-position} es una propiedad del interface -@code{staff-symbol-referencer-interface}, que está contemplado por los -objetos que se colocan con relación al pentagrama. Especifica la -posición vertical del objeto con relación a la tercera línea del -pentagrama en medios espacios de pentagrama. Es útil en la -resolución de colisiones entre objetos de presentación como silencios -multi-compás, ligaduras de unión y notas en distintas voces. - -@item -@code{force-hshift} (forzar desplazamiento horizontal) - -@cindex force-hshift, propiedad - -Las notas muy juntas de un acorde, o aquellas que ocurren al mismo -tiempo en voces distintas, se disponen en dos (y ocasionalmente más) -columnas para evitar la superposición de las cabezas. Éstas reciben -el nombre de columnas de notas, y se crea un objeto llamado -@code{NoteColumn} para disponer las notas en dicha columna. - -La propiedad @code{force-hshift} es una propiedad de una -@code{NoteColumn} (realmente lo es del interface -@code{note-column-interface}). Modificarlo permite mover una columna -de notas en unidades adecuadas a una columna de notas, por ejemplo la -anchura de la cabeza de la nota de la primera voz. Se debe usar en -situaciones complejas donde las instrucciones @code{\shiftOn} normales -(véase @ref{Explicitly instantiating voices}) no resuelven el -conflicto entre las notas. Es preferible a la propiedad -@code{extra-offset} para este propósito porque no hay necesidad de -averiguar la distancia en espacios de pentagrama, y mover las notas -dentro o fuera de una @code{NoteColumn} afecta a otras acciones como a -la fusión entre cabezas de nota. - -@end itemize - -@item -Finalmente, cuando todo lo demás falla, los objetos se pueden -reposicionar manualmente con relación a la tercera línea del -pentagrama verticalmente, o desplazándolas una cierta distancia a una -nueva posición. Las desventajas son que los valores correctos para el -reposicionamiento se deben adivinar, a menudo por ensayo y error, para -cada objeto individual y, puesto que el movimiento se hace después de -que LilyPond ha colocado todos los demás objetos es usuario es -responsable de evitar cualquier colisión que pudiera producirse. Pero -la dificultar principal con este enfoque es que los valores de -reposicionado podrían tener que ser vueltos a calcular si la música se -modifica más tarde. Las propiedades que se pueden usar para este tipo -de posicionamiento manual son: - -@table @code -@item extra-offset (desplazamiento adicional) - -@cindex extra-offset, propiedad - -Esta propiedad se aplica a cualquier objeto de presentación que -contemple el @code{grob-interface}. Toma una pareja de números que -especifican el desplazamiento adicional en las direcciones horizontal -y vertical. Los números negativos mueven el objeto a la izquierda o -hacia abajo. Las unidades son espacios de pentagrama. El -desplazamiento adicional se hace después de que la composición -tipográfica de los objetos ha terminado, así que un objeto puede ser -reposicionado a cualquier lugar sin afectar a ninguna otra cosa. - -@item positions (posiciones) - -@cindex positions, propiedad - -Ésta es de la mayor utilidad para ajustar manualmente la inclinación y -la altura de las barras de corchea, ligaduras de expresión y corchetes -de grupos de valoración especial. Toma una pareja de números que dan -la posición de los extremos izquierdo y derecho de la barra, ligadura, -etc. con relación a la tercera línea del pentagrama. Las unidades son -espacios de pentagrama. Observe, sin embargo, que las ligaduras de -expresión y de fraseo no se pueden reposicionar en cantidades -arbitrariamente grandes. LilyPond en primer lugar genera una lista de -posiciones posibles para la ligadura y de forma predeterminada -encuentra la ligadura que tiene @qq{mejor aspecto}. Si la propiedad -@code{positions} se ha sobreescrito, la ligadura que está más cerca de -las posiciones que se han solicitado, se selecciona de la lista. -@end table - -@end enumerate - -Un objeto en particular podría no tener todas estas propiedades. Es -necesario ir al manual RFI para buscar qué propiedades se encuentran -disponibles para el objeto en cuestión. - - -Aquí presentamos una lista de los objetos que es más probable que -estén implicados en colisiones, con el nombre del objeto que habría -que buscar en el RFI para descubrir qué propiedades se deben usar para -moverlos. - -@multitable @columnfractions .5 .5 -@headitem Tipo de objeto @tab Nombre del objeto -@item Articulaciones @tab @code{Script} -@item Barras @tab @code{Beam} -@item Dinámica (verticalmente) @tab @code{DynamicLineSpanner} -@item Dinámica (horizontalmente) @tab @code{DynamicText} -@item Digitaciones @tab @code{Fingering} -@item Llamadas de ensayo y textuales @tab @code{RehearsalMark} -@item Ligaduras de expresión @tab @code{Slur} -@item Texto, por ejemplo @code{^"texto"} @tab @code{TextScript} -@item Ligaduras de unión @tab @code{Tie} -@item Grupos de valoración especial @tab @code{TupletBracket} -@end multitable - - -@node Fixing overlapping notation -@subsection Fixing overlapping notation - -Veamos ahora cómo pueden ser de ayuda las propiedades que hemos visto -en la sección anterior, para resolver problemas de notación que se -superpone. - -@subheading padding property - -@cindex relleno -@cindex arreglar notación que se superpone -@cindex superpuesta, notación - -La propiedad @code{padding} se puede ajustar para aumentar (o -disminuir) la distancia entre símbolos impresos encima o debajo de las -notas. - -@cindex Script, ejemplo de sobreescritura -@cindex padding, propiedad, ejemplo - -@lilypond[quote,fragment,relative=1,verbatim] -c2\fermata -\override Script #'padding = #3 -b2\fermata -@end lilypond - -@cindex MetronomeMark, ejemplo de sobreescritura -@cindex padding, propiedad, ejemplo - -@lilypond[quote,fragment,relative=1,verbatim] -% This will not work, see below: -\override MetronomeMark #'padding = #3 -\tempo 4=120 -c1 -% This works: -\override Score.MetronomeMark #'padding = #3 -\tempo 4=80 -d1 -@end lilypond - -Observe en el segundo ejemplo la gran importancia que tiene saber qué -contexto maneja un determinado objeto. Puesto que el objeto -@code{MetronomeMark} se maneja dentro del contexto @code{Score}, los -cambios de propiedades en el contexto @code{Voice} pasarán -inadvertidos. Para ver más detalles, consulte @ruser{Modifying -properties}. - -Si la propiedad de relleno @code{padding} de un objeto se incrementa -cuando dicho objeto se encuentra en una pila de objetos que se están -colocando de acuerdo a su prioridad @code{outside-staff-priority}, -entonces ese objeto se moverá, y también todos los que están por fuera -de él. - - -@subheading left-padding and right-padding - -@cindex left-padding, propiedad -@cindex right-padding, propiedad - -La propiedad @code{right-padding} afecta al espaciado entre la -alteración y la nota a que se aplica. Normalmente no es necesaria, -pero el ejemplo siguiente muestra una situación en la que sí se -necesita. Suponga que queremos presentar un acorde que contiene un Si -natural y un Si bemol. Para evitar la ambigüedad querríamos preceder -las notas con un becuadro y un bemol. Aquí vienen varios intentos de -hacerlo así: - -@cindex Accidental, ejemplo de sobreescritura -@cindex text, propiedad, ejemplo -@cindex stencil, propiedad, ejemplo -@cindex AccidentalPlacement, ejemplo de sobreescritura -@cindex right-padding, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] - - - -@end lilypond - -Ninguno de ellos funciona y el segundo además presenta una fea -colisión entre las dos alteraciones. - -Una forma de conseguirlo es sobreescribir el sello de la alteración -con un elemento de marcado que contenga los símbolos de becuadro y -bemol en el orden que nos gustaría que estuvieran, así: - -@lilypond[quote,ragged-right,verbatim] -naturalplusflat = \markup { \natural \flat } -\relative c'' { - \once \override Accidental - #'stencil = #ly:text-interface::print - \once \override Accidental #'text = #naturalplusflat - \once \override Score.AccidentalPlacement #'right-padding = #1.5 - -} -@end lilypond - -@noindent -Esto utiliza necesariamente una sobreescritura para el sello de la -alteración que no se estudiará hasta más adelante. El tipo de sello -debe ser un procedimiento, aquí modificado para que imprima el -contenido de la propiedad @code{text} del objeto @code{Accidental}, -que a su vez está establecido como un signo de becuadro seguido de un -bemol. Entonces el conjunto se puede separar de la cabeza de la nota -sobreescribiendo @code{right-padding}. - -@noindent - -@subheading staff-padding property - -@cindex alineación de objetos sobre la línea base -@cindex objetos, alineación sobre la línea base - -@code{staff-padding} se puede usar para alinear objetos como matices -dinámicos a lo largo de una línea de base a una altura fija sobre el -pentagrama, en lugar de hacerlo a una altura que dependa de la -posición de la nota a la que están adosados. No es una propiedad de -@code{DynamicText} sino de @code{DynamicLineSpanner}. Esto es así -porque la línea de base debe aplicarse por igual a @strong{todas} las -dinámicas, entre ellas las que se han creado como objetos de -extensión. Así que ésta es la forma de alinear las indicaciones de -matiz en el ejemplo de la sección anterior: - -@cindex DynamicText, ejemplo de sobreescritura -@cindex extra-spacing-width, propiedad, ejemplo -@cindex DynamicLineSpanner, ejemplo de sobreescritura -@cindex staff-padding, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 unit -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -% Align dynamics to a base line 2 units above staff -\override DynamicLineSpanner #'staff-padding = #2 -a4\f b\mf c\mp b\p -@end lilypond - - -@subheading self-alignment-X property - -El ejemplo siguiente muestra cómo esto puede resolver la colisión -entre un objeto de digitación de cuerda y la plica de una nota -mediante el alineamiento del límite derecho con el punto de referencia -de la nota «padre»: - -@cindex StringNumber, ejemplo de sobreescritura -@cindex self-alignment-X, propiedad, ejemplo - -@lilypond[quote,fragment,ragged-right,verbatim,relative=3] -\voiceOne -< a \2 > -\once \override StringNumber #'self-alignment-X = #RIGHT -< a \2 > -@end lilypond - -@subheading staff-position property - -@cindex objeto, colisión dentro del pentagrama - -Los silencios multi-compás en una voz pueden chocar con las notas en -otra voz. Puesto que estos silencios se tipografían centrados entre -las barras de compás se necesitaría bastante esfuerzo para que -LilyPond averiguara qué otras notas podrían chocar con él, ya que -actualmente todo el manejo de colisiones entre notas y silencios se -hace solamente para notas y silencios que ocurren al mismo tiempo. He -aquí un ejemplo de colisión de este tipo: - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< {c c c c} \\ {R1} >> -@end lilypond - -La mejor solución aquí es mover el silencio multi-compás hacia abajo, -pues el silencio está en la voz dos. El ajuste predeterminado para -@code{\voiceTwo} (es decir, en la segunda voz de una construcción -@code{<<@{...@} \\ @{...@}>>}) es que @code{staff-position} tenga el -valor -4 para MultiMeasureRest, así que tenemos que bajarlo, digamos, -cuatro semi-espacios de pentagrama, al valor @code{-8}. - -@cindex MultiMeasureRest, ejemplo de sobreescritura -@cindex staff-position, propiedad, ejemplo - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< - {c c c c} -\\ - \override MultiMeasureRest #'staff-position = #-8 - {R1} ->> -@end lilypond - -Esto es mejor que utilizar, por ejemplo, @code{extra-offset}, porque -la línea adicional por encima del silencio se inserta automáticamente. - -@subheading extra-offset property - -@cindex posicionar objetos -@cindex posicionar grobs -@cindex objetos, posicionar -@cindex grobs, posicionar - -La propiedad @code{extra-offset} da un completo control sobre el -posicionamiento de un objeto tanto vertical como horizontalmente. - -En el ejemplo siguiente, la segunda digitación se desplaza ligeramente -a la izquierda, y 1.8 espacios de pentagrama hacia abajo: - -@cindex Fingering, ejemplo de sobreescritura -@cindex extra-offset, propiedad, ejemplo - -@lilypond[quote,fragment,relative=1,verbatim] -\stemUp -f-5 -\once \override Fingering - #'extra-offset = #'(-0.3 . -1.8) -f-5 -@end lilypond - - -@subheading positions property - -@cindex controlar manualmente grupos especiales, ligaduras y barras -@cindex manual, control, de grupos especiales, ligaduras y barras -@cindex grupos especiales, barras de, control manual -@cindex ligaduras de expresión, control manual -@cindex ligaduras de fraseo, control manual -@cindex barras de corchea, control manual - -La propiedad @code{positions} permite controlar manualmente la -posición e inclinación de los tresillos, ligaduras de expresión y de -fraseo, y barras de corchea. He aquí un ejemplo que tiene una fea -ligadura de fraseo debido a que intenta evitar la ligadura de -expresión que está sobre la acciaccatura. - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 \acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -Simplemente podemos mover la ligadura de fraseo por encima de las -notas, y de hecho ésta será la solución preferida: - -@cindex PhrasingSlur, ejemplo de sobreescritura -@cindex positions, propiedad, ejemplo - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\phrasingSlurUp -\acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -Pero si por algún motivo no pudiéramos hacerlo, la otra alternativa -sería mover el extremo izquierdo de la ligadura de fraseo un poco -hacia abajo usando la propiedad @code{positions}. Esto también -resuelve la forma algo indecente de la ligadura. - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\once \override PhrasingSlur #'positions = #'(-4 . -3) -\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: - -@lilypond[quote,verbatim,fragment,ragged-right] -{ -\clef "bass" -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -<< {b,8 ais, b, g,} \\ {e, g e, 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: - -@cindex Beam, ejemplo de sobreescritura -@cindex positions, propiedad, ejemplo - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - \clef "bass" - << - \override Beam #'positions = #'(3 . 3) - {b,8 ais, b, g,} - \\ - {e, g e, g} - >> - << {b,8 ais, b, g,} \\ {e, 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 -segunda voz. - -@subheading force-hshift property - -@c FIXME: formatting stuff (ie not important right now IMO) -@c @a nchor Chopin finally corrected TODOgp - -Ahora podremos ver cómo aplicar las correcciones finales al ejemplo de -Chopin que presentamos al final de @ref{I'm hearing Voices}, que -dejamos con este aspecto: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - 2 - des2 - } - >> | - 1 | -} -@end lilypond - -@noindent -Las dos notas inferiores del primer acorde (es decir, las que están en -al tercera voz) no deberían separarse de la columna de notas de las dos -notas agudas. Para corregir esto, establecemos el valor de -@code{force-hshift} (que es una propiedad de @code{NoteColumn}) de -esas notas a cero. La nota más grave del segundo acorde se sitúa -mejor justo a la derecha de las más agudas. Lo conseguimos -estableciendo el valor de @code{force-hshift} de esta nota a 0.5, o -sea, la anchura de media cabeza de nota a la derecha de la columna de -las notas agudas. - -Presentamos a continuación el resultado final: - -@cindex NoteColumn, ejemplo de sobreescritura -@cindex force-hshift, propiedad, ejemplo - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - \once \override NoteColumn #'force-hshift = #0 2 - \once \override NoteColumn #'force-hshift = #0.5 des2 - } - >> | - 1 | -} -@end lilypond - - -@node Real music example -@subsection Real music example - -Finalizaremos esta sección sobre los trucos mostrando los pasos que se -deben tomar para tratar con un ejemplo complicado que necesita varios -trucos para producir el resultado deseado. El ejemplo se ha escogido -deliberadamente para ilustrar el uso de la Referencia de la Notación -para resolver problemas de notación poco comunes. No es -representativo de un proceso de grabado más usual, por lo que ¡le -recomendamos que no deje que estas dificultades le desanimen! -¡Afortunadamente, las dificultades como éstas no son muy comunes! - -El ejemplo está extraído de la Primera Balada de Chopin, Op. 23, -compases 6 al 9, la transición entre el Lento inicial y el Moderato. -Presentamos en primer lugar el aspecto que queremos que tenga el -resultado, pero para evitar complicar demasiado el ejemplo hemos -quitado las indicaciones dinámicas, las digitaciones y el pedal. - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - bes2.^\markup {\bold "Moderato"} r8 - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Observamos en primer lugar que la parte de la mano derecha del tercer -compás requiere cuatro voces. Son las cinco corcheas unidas por una -barra, la nota Do ligada, el Re blanca que se funde con el Re corchea, -y el Fa sostenido negra con puntillo, que también está fundida con la -corchea de su misma altura. Todo lo demás está en una sola voz, así -que lo más fácil es introducir estas cuatro voces temporalmente en el -momento en que se necesiten. Si ha olvidado cómo hacerlo, lea -@ref{I'm hearing Voices}. Vamos a comenzar introduciendo las notas -como dos variables y disponiendo la estructura de pentagramas en un -bloque score, y veremos qué produce LilyPond de forma predeterminada: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4. g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8 d fis bes a | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2. -} - -lhMusic = \relative c' { - r2 2 | - 1 | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Todas las notas son correctas, pero el aspecto está lejos de ser -satisfactorio. La ligadura de unión choca con el cambio de compás, el -barrado del tercer compás es incorrecto, las notas no se funden -correctamente, y faltan algunos elementos de notación. En primer -lugar trataremos con lo más fácil. Podemos corregir el barrado de las -corcheas insertando una barra manualmente, y podemos añadir fácilmente -la ligadura de expresión de la mano izquierda y la ligadura de fraseo -de la mano derecha, pues todo ello se estudió en el Tutorial. Al -hacerlo así obtenemos: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1) | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -El primer compás ahora es correcto. El segundo compás contiene un -arpegio y acaba en una doble barra. ¿Cómo los hacemos, pues no han -sido mencionados en este Manual de Aprendizaje? Aquí es donde tenemos -que volver e la Referencia de la Notación. Buscando la palabra -@q{arpegio} y @q{línea divisoria} en el índice nos muestra rápidamente -que un arpegio se hace añadiendo @code{\arpeggio} a un acorde, y la -doble barra se produce por medio de la instrucción @code{\bar "||"}. -Esto podemos hacerlo fácilmente. A continuación tenemos que corregir -la colisión entre la ligadura de unión y la indicación de compás. -Esto se hace mejor moviendo la ligadura hacia arriba. Estudiamos cómo -mover objetos anteriormente en @ref{Moving objects}, donde dice que -los objetos que están situados de forma relativa al pentagrama se -pueden mover sobreescribiendo su propiedad @code{staff-position}, que -se especifica en unidades de medio espacio de pentagrama respecto de -la línea central del pentagrama. Así pues, la sobreescritura -siguiente colocada justo antes de la primera nota ligada subirá la -ligadura 3.5 medios espacios de pentagrama por encima de la línea -central: - -@code{\once \override Tie #'staff-position = #3.5} - -Con esto se completa el compás dos, dando como resultado: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Vayamos ahora al tercer compás y comienzo de la sección Moderato. El -tutorial nos enseñó cómo escribir texto en negrita mediante la -instrucción @code{\markup}, por lo que añadir @q{Moderato} en negrita -es fácil. Pero ahora ¿cómo fundimos notas que están en distintas -voces? Aquí es donde debemos volver a buscar ayuda en el manual de -Referencia de la notación. Al buscar la palabra @qq{merge} (mezcla) en -el índice de la Referencia de la notación llegamos rápidamente a las -instrucciones para mezclar notas con distinta cabeza y con o sin -puntillo, en @ruser{Collision resolution}. En nuestro ejemplo tenemos -que fusionar ambos tipos de nota en el transcurso de la sección -polifónica del compás 3; por tanto, en virtud de la información que -aparece en la Referencia de la Notación, escribimos - -@example -\mergeDifferentlyHeadedOn -\mergeDifferentlyDottedOn -@end example - -@noindent -al principio de la sección, y - -@example -\mergeDifferentlyHeadedOff -\mergeDifferentlyDottedOff -@end example - -@noindent -al final, dando como resultado: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Estas sobreescrituras han fundido los dos Fa sostenido, pero no los -dos Re. ¿Por qué no? La respuesta está en la misma sección de la -Referencia de la Notación: las notas que se fusionan deben tener las -plicas en direcciones opuestas y dos notas no se pueden fusionar bien -si hay una tercera nota en la misma columna. Aquí los dos Re tienen -las plicas hacia arriba y hay una tercera nota: el Do. Sabemos cómo -cambiar la dirección de la plica usando @code{\stemDown}, y la -Referencia de la Notación también explica cómo mover el Do: aplicar un -desplazamiento usando una de las instrucciones @code{\shift}. Pero -¿cuál? El Do está en la voz dos que tiene desactivado el -desplazamiento, y los dos Re están en las voces uno y tres, que tienen -el desplazamiento desactivado y activado, respectivamente. Por ello -tenemos que desplazar el Do un nivel más todavía, usando -@code{\shiftOnn} para evitar que interfiera con los dos Re. Al -aplicar estos cambios obtenemos: - -@cindex Tie, ejemplo de sobreescritura -@cindex staff-position, propiedad, ejemplo - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - % Move the c2 out of the main note column so the merge will work - {c,8~ \shiftOnn c2 | } - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Ya casi está. Solamente quedan dos problemas: la plica hacia abajo -sobre el Re fusionado no tendría que estar ahí, y el Do estaría mejor -colocado a la derecha de los Re. Sabemos cómo hacer las dos cosas a -partir de trucos anteriores: hacemos la plica transparente, y movemos -el Do con la propiedad @code{force-hshift}. Aquí tenemos el resultado -final: - -@cindex NoteColumn, ejemplo de sobreescritura -@cindex force-hshift, propiedad, ejemplo -@cindex Stem, ejemplo de sobreescritura -@cindex transparent, propiedad, ejemplo - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - - -@node Further tweaking -@section Further tweaking - -@menu -* Other uses for tweaks:: -* Using variables for tweaks:: -* Other sources of information:: -* Avoiding tweaks with slower processing:: -* Advanced tweaks with Scheme:: -@end menu - -@node Other uses for tweaks -@subsection Other uses for tweaks - -@cindex transparent, uso de la propiedad -@cindex objetos, hace invisibles -@cindex eliminar objetos -@cindex objetos, eliminar -@cindex objetos, ocultar -@cindex ocultar objetos -@cindex invisibles, objetos -@cindex objetos invisibles -@cindex ligar notas entre voces distintas - -@subheading Tying notes across voices - -El ejemplo siguiente muestra cómo conectar notas que están en -distintas voces utilizando ligaduras de unión. Normalmente sólo se -pueden conectar mediante ligaduras de unión dos notas que estén en la -misma voz. Usando dos voces, con las notas ligadas en una de ellas: - -@lilypond[quote,fragment,relative=2] -<< { b8~ b8\noBeam } -\\ { b[ g8] } ->> -@end lilypond - -@noindent -y borrando la primera plica hacia arriba en esa voz, da la impresión -de que la ligadura se cruza entre las voces: - -@cindex Stem, ejemplo de sobreescritura -@cindex transparent, propiedad, ejemplo - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -Para estar seguros de que la plica que acabamos de borrar no aprieta -demasiado a la ligadura, podemos alargar la plica estableciendo su -valor de longitud @code{length} a @code{8}, - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -@subheading Simulating a fermata in MIDI - -@cindex sello, uso de la propiedad -@cindex fermata, realización en MIDI - -Para los objetos fuera-del-pentagrama, normalmente es mejor -sobreescribir la propiedad @code{stencil} («sello») del objeto que su -propiedad @code{transparent} cuando desee quitarlos de la salida -impresa. Mediante el establecimiento de la propiedad @code{stencil} -de un objeto al valor @code{#f} podemos quitar el objeto por completo -de la salida impresa. Esto significa que no tiene efecto sobre la -colocación de otros objetos que pudieran colocarse en relación a él. - -Por ejemplo, si quisiéramos cambiar la indicación metronómica con el -propósito de simular un calderón en la salida MIDI, seguramente no -querríamos que la indicación metronómica apareciese en la salida -impresa, y no querríamos influir sobre la separación entre los dos -sistemas ni sobre la colocación de las anotaciones adyacentes sobre el -pentagrama. Por lo tanto, establecer su propiedad @code{stencil} al -valor @code{#f} sería la mejor manera. Mostramos aquí el efecto de -los dos métodos: - -@cindex MetronomeMark, ejemplo de sobreescritura -@cindex transparent, propiedad, ejemplo - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'transparent = ##t - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@cindex MetronomeMark, ejemplo de sobreescritura -@cindex stencil, propiedad, ejemplo - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'stencil = ##f - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@noindent -Ambos métodos quitan de la salida impresa la indicación metronómica -que alarga el calderón, y los dos afectan al tempo del MIDI tal y como -queríamos, pero la indicación metronómica transparente de la primera -línea fuerza una colocación muy alta de la indicación de tempo que -sigue, meintras que la segunda (con el sello suprimido) no lo hace. - -@node Using variables for tweaks -@subsection Using variables for tweaks - -@cindex variables, uso de, para trucos -@cindex usar variables para hacer trucos -@cindex trucos, usar variables para hacer - -Las instrucciones de sobreescritura son con frecuencia largas y -tediosas de escribir, y se tienen que escribir de forma absolutamente -correcta. Si las mismas sobreescrituras se van a utilizar muchas -veces, podría merecer la pena definir variables para guardarlas. - -Supongamos que queremos realzar ciertas palabras de la letra de una -canción imprimiéndolas en cursiva y negrita. Las instrucciones -@code{\italic} y @code{\bold} sólo funcionan dentro de la letra de las -canciones si están incluidas, junto con la palabra o palabras que se -pretenden modificar, dentro de un @code{\markup}, lo que las hace -tediosas de escribir. La necesidad de incluir las propias palabras -impide que se puedan usar en variables simples. ¿Podríamos, como -alternativa, utilizar las instrucciones @code{\override} y -@code{\revert}? - -@example -@code{\override Lyrics . LyricText #'font-shape = #'italic} -@code{\override Lyrics . LyricText #'font-series = #'bold} - -@code{\revert Lyrics . LyricText #'font-shape} -@code{\revert Lyrics . LyricText #'font-series} -@end example - -Estas instrucciones también serían extremadamente tediosas de escribir -si hubiera muchas palabras que quisiéramos subrayar. Pero sí -@emph{podemos} definirlas como dos variables y usarlas para delimitar -las palabras que destacar. Otra ventaja de la utilización de -variables para estas sobreescrituras es que ya no son necesarios los -espacios que rodean al punto, puesto que no se interpretan -directamente en el modo @code{\lyricmode}. He aquí un ejemplo de -esto, aunque en la práctica quizá elegiríamos unos nombres de variable -más cortos para que fueran más rápidos de teclear: - -@cindex LyricText, ejemplo de sobreescritura -@cindex font-shape, propiedad, ejemplo -@cindex font-series, propiedad, ejemplo - -@lilypond[quote,verbatim] -emphasize = { - \override Lyrics.LyricText #'font-shape = #'italic - \override Lyrics.LyricText #'font-series = #'bold -} -normal = { - \revert Lyrics.LyricText #'font-shape - \revert Lyrics.LyricText #'font-series -} - -global = { \time 4/4 \partial 4 \key c \major} -SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyrics { E -- | ter -- nal \emphasize Fa -- ther, \normal | strong to save, } -VerseTwo = \lyricmode { O | \emphasize Christ, \normal whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, \normal | who didst brood } -VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Soprano" { \VerseOne } - \new Lyrics \lyricsto "Soprano" { \VerseTwo } - \new Lyrics \lyricsto "Soprano" { \VerseThree } - \new Lyrics \lyricsto "Soprano" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - - -@node Other sources of information -@subsection Other sources of information - -La documentación del manual de Referencia de Funcionamiento Interno -contiene montañas de información sobre LilyPond, pero se puede obtener -más información aún leyendo los archivos internos de LilyPond. Para -echarles un vistazo, en primer lugar debe buscar la carpeta -correspondiente a su sistema. La ubicación de esta carpeta depende -(a) de si consiguió el programa LilyPond descargando un binario -precompilado desde el sitio web lilypond.org o si lo instaló mediante -un gestor de paquetes (es decir, distribuido con Linux, o instalado -bajo fink o cygwin) o fue compilado a partir de la fuente, y (b) de -qué sistema operativo está utilizando: - - -@strong{Descargado de lilypond.org} - -@itemize @bullet -@item Linux - -Diríjase a -@file{@var{CARPETA_DE_INSTALACIÓN}/lilypond/usr/share/lilypond/current/} - -@item MacOS X - -Diríjase a -@file{@var{CARPETA_DE_INSTALACIÓN}/LilyPond.app/Contents/Resources/share/lilypond/current/} -bien haciendo @code{cd} hacia este directorio desde el Terminal, o -bien manteniendo pulsada la tecla de Control y haciendo click sobre la -aplicación de LilyPond, y allí eligiendo @q{Mostrar el contenido del -paquete}. - -@item Windows - -Mediante el Explorador de Windows, diríjase a -@file{@var{CARPETA_DE_INSTALACIÓN}/LilyPond/usr/share/lilypond/current/} - -@end itemize - -@strong{Instalado mediante un gestor de paquetes o compilado a partir de la fuente} - -Diríjase a -@file{@var{PREFIJO}/share/lilypond/@var{X.Y.Z}/}, donde @var{PREFIJO} -se encuentra determinado por su administrador de paquetes o guión -@code{configure}, y @var{X.Y.Z} es el número de la versión de -LilyPond. - -@smallspace - -Dentro de esta carpeta, las dos subcarpetas interesantes son - -@itemize -@item @file{ly/} - contiene archivos en formato LilyPond -@item @file{scm/} - contiene archivos en formato Scheme -@end itemize - -Vamos a comenzar observando algunos archivos que están en @file{ly/}. -Abra @file{ly/property-init.ly} con un editor de textos. El mismo que -usaría normalmente para los archivos @code{.ly} servirá perfectamente. -Este archivo contiene las definiciones de todas las instrucciones -estándar predefinidas de LilyPond, como por ejemplo @code{\stemUp} y -@code{\slurDotted}. Podrá ver que no son nada más que definiciones de -variables que contienen una o varias instrucciones @code{\override}. -Por ejemplo, @code{/tieDotted} está definido de tal forma que su valor -es: - -@example -tieDotted = @{ - \override Tie #'dash-period = #0.75 - \override Tie #'dash-fraction = #0.1 -@} -@end example - -Si no le gustan los valores predeterminados, estas instrucciones -predefinidas se pueden redefinir con facilidad como cualquier otra -variable, al principio de su archivo de código de entrada. - -Los siguientes son los archivos más útiles que se encuentran en -@file{ly/}: - -@multitable @columnfractions .4 .6 -@headitem Archivo - @tab Contenido -@item @file{ly/engraver-init.ly} - @tab Definiciones de Contextos de grabadores -@item @file{ly/paper-defaults-init.ly} - @tab especificaciones de valores predeterminados relacionados con el papel -@item @file{ly/performer-init.ly} - @tab Definiciones de Contextos de interpretación -@item @file{ly/property-init.ly} - @tab Definiciones de todas las instrucciones predefinidas que son comunes -@item @file{ly/spanner-init.ly} - @tab Definiciones de las instrucciones predefinidas relacionadas con los objetos de extensión -@end multitable - -Otros ajustes (como las definiciones de las instrucciones de marcado) -se almacenan como archivos @code{.scm} (de Scheme). El lenguaje de -programación Scheme se utiliza para proporcionar un interfaz -programable en el funcionamiento interno de LilyPond. Cualquier -explicación adicional sobre estos archivos se encuentra por el momento -fuera del ámbito de este manual, porque se requieren conocimientos del -lenguaje Scheme. Se advierte a los usuarios que se necesita una -importante cantidad de conocimientos técnicos o de tiempo para -comprender el lenguaje Scheme y estos archivos (véase @ref{Scheme -tutorial}). - -Si ya tiene estos conocimientos, los archivos de Scheme que pueden -interesarle son: - -@multitable @columnfractions .4 .6 -@headitem Archivo - @tab Contenido -@item @file{scm/auto-beam.scm} - @tab Valores predeterminados de sub-barrado -@item @file{scm/define-grobs.scm} - @tab valores predeterminados de las propiedades de grobs -@item @file{scm/define-markup-commands.scm} - @tab Especificar todas las instrucciones de marcado -@item @file{scm/midi.scm} - @tab Ajustes predeterminados para la salida MIDI -@item @file{scm/output-lib.scm} - @tab Ajustes que afectan al aspecto de los trastes, colores, alteraciones, lineas divisorias, etc. -@item @file{scm/parser-clef.scm} - @tab Definiciones de las claves contempladas -@item @file{scm/script.scm} - @tab Ajustes predeterminados para las articulaciones -@end multitable - - - -@node Avoiding tweaks with slower processing -@subsection Avoiding tweaks with slower processing - -LilyPond puede llevar a cabo comprobaciones adicionales al tiempo que -procesa los archivos. Estas instrucciones consumen tiempo, pero el -resultado puede necesitar menos trucos manuales para obtener un -resultado aceptable. Si una inscripción de texto o parte de la letra -se sale de los márgenes, estas comprobaciones comprimirán dicha línea -en la medida justa como para que encaje dentro de los márgenes. - -Para que sean efectivos bajo cualquier circunstancia, estas -comprobaciones deben habilitarse colocando las instrucciones de -sobreescritura dentro del bloque @code{\with} dentro de un Score, y no -en línea con la música, de la forma siguiente: - - -@example -\new Score \with @{ - % asegura que las marcas de texto y letras de las canciones se encuentran dentro de los márgenes de la página - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t -@} @{ - .. -@} -@end example - -@node Advanced tweaks with Scheme -@subsection Advanced tweaks with Scheme - -Aunque es posible hacer muchas cosas con las instrucciones -@code{\override} y @code{\tweak} , tenemos una forma incluso más -poderosa de modificar el funcionamiento de LilyPond, a través de un -interface programable hacia las operaciones internas de LilyPond. Se -puede incorporar código escrito en el lenguaje de programación Scheme, -directamente en el mecanismo de funcionamiento de LilyPond. Por -supuesto, para hacer esto se necesitan al menos unos conocimientos -básicos de programación en Scheme, y damos una introducción en el -@ref{Scheme tutorial}. - -Como ejemplo que ilustra una de las muchas posibilidades, en lugar de -dar a una propiedad un valor constante, se puede establecer al -resultado de un procedimiento de Scheme que se invoca cada vez que -LilyPond accede a esta propiedad. La propiedad se puede establecer -dinámicamente a un valor determinado por el procedimiento en el -momento en que se invoca. En este ejemplo damos a las cabezas de las -notas un color que depende de su posición dentro del pentagrama. - -@cindex x11-color function, ejemplo de utilización -@cindex NoteHead, ejemplo de sobreescritura -@cindex color, propiedad, establecer a procedimiento de Scheme - -@lilypond[quote,verbatim,ragged-right] -#(define (color-notehead grob) - "Color the notehead according to its position on the staff." - (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) - (case mod-position - ;; Return rainbow colors - ((1) (x11-color 'red )) ; for C - ((2) (x11-color 'orange )) ; for D - ((3) (x11-color 'yellow )) ; for E - ((4) (x11-color 'green )) ; for F - ((5) (x11-color 'blue )) ; for G - ((6) (x11-color 'purple )) ; for A - ((0) (x11-color 'violet )) ; for B - ) - ) -) - -\relative c' { - % Arrange to obtain color from color-notehead procedure - \override NoteHead #'color = #color-notehead - c2 c' | - b4 g8 a b4 c | - c,2 a' | - g1 | -} -\addlyrics { - Some -- where o -- ver the Rain -- bow, way up high, -} -@end lilypond - -Se pueden encontrar ejemplos adicionales que muestran la utilización -de estos interfaces programables, en @ref{Tweaking with Scheme}. diff --git a/Documentation/es/user/unfretted-strings.itely b/Documentation/es/user/unfretted-strings.itely deleted file mode 100644 index 1ad9543259..0000000000 --- a/Documentation/es/user/unfretted-strings.itely +++ /dev/null @@ -1,213 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Unfretted string instruments -@section Unfretted string instruments - -@lilypondfile[quote] -{unfretted-headword.ly} - -@cindex orquestales, cuerdas -@cindex cuerdas orquestales -@cindex cuerdas, escribir música para - -Esta sección aporta información y referencias que resultan útiles si -se escribe música para instrumentos de cuerda sin trastes, -principalmente instrumentos de cuerda orquestales. - -@menu -* Common notation for unfretted strings:: -@end menu - -@node Common notation for unfretted strings -@subsection Common notation for unfretted strings - -Hay poca notación especializada para los instrumentos de cuerdas sin -trastes. La notación de la música se realiza en un solo pentagrama, y -se suele usar una sola voz. Se pueden necesitar dos voces para -algunos pasages en dobles cuerdas o en divisi. - -@menu -* References for unfretted strings:: -* Bowing indications:: -* Harmonics:: -* Snap (Bartok) pizzicato:: -@end menu - -@node References for unfretted strings -@unnumberedsubsubsec References for unfretted strings - -La mayor parte de la notación que resulta de utilidad para las cuerdas -orquestales y otros instrumentos de arco se estudia en otras partes -del manual: - -@itemize - -@item -Las indicaciones textuales como @qq{pizz.} y @qq{arco} se añaden como -texto simple: véase @ref{Text scripts}. - -@item -Las digitaciones, entre ellas la indicación de pulgar, se describen en -@ref{Fingering instructions}. - -@item -Las dobles cuerdas se indican normalmente escribiendo un acorde, véase -@ref{Chorded notes}. Hay otras indicaciones que se pueden añadir para -la interpretación de acordes, véase @ref{Arpeggio}. - -@item -Hay una plantilla para cuarteto de cuerda en @rlearning{String -quartet}. Otras se muestran en la sección de fragmentos de código. - -@end itemize - - -@seealso -Manual de aprendizaje: -@rlearning{String quartet}. - -Referencia de la notación: -@ref{Text scripts}, -@ref{Fingering instructions}, -@ref{Chorded notes}, -@ref{Arpeggio}. - -Fragmentos de código: -@rlsr{Unfretted strings}. - - -@node Bowing indications -@unnumberedsubsubsec Bowing indications - -@funindex \upbow -@funindex \downbow -@funindex \open - -@cindex arco, indicaciones de -@cindex arco arriba, indicación -@cindex arco abajo, indicación -@cindex arriba, arco -@cindex abajo, arco -@cindex al aire, indicación de cuerda -@cindex cuerda al aire, indicación de - -Las indicaciones de arco se crean como articulaciones, que se -describen en @ref{Articulations and ornamentations}. - -Las instrucciones de arco @code{\upbow} (arco arriba) y -@code{\downbow} (arco abajo) se usan con ligaduras de expresión de la -siguiente manera: - -@lilypond[verbatim,quote,relative=2] -c4(\downbow d) e(\upbow f) -@end lilypond - -@noindent -y el ejemplo siguiente muestra tres formas distintas de indicar un La -sobre una cuerda al aire del violín: - -@lilypond[verbatim,quote,relative=2] -a4 \open -a^\markup { \teeny "II" } -a2^\markup { \small "sul A" } -@end lilypond - - -@predefined -@code{\downbow}, -@code{\upbow}, -@code{\open}. -@endpredefined - - -@seealso -Referencia de la notación: -@ref{Articulations and ornamentations}, -@ref{Slurs}. - - -@node Harmonics -@unnumberedsubsubsec Harmonics - -@funindex \harmonic - -@strong{@i{Armónicos naturales}} - -@cindex naturales, armónicos -@cindex armónicos naturales - -La notación de los armónicos naturales se puede realizar de varias -formas. Generalmente, una nota con la cabeza en forma de rombo -significa tocar (sin apretar) la cuerda en el lugar donde se pisaría -la nota si no fuese un rombo. - -@warning{Los armónicos @strong{se deben} definir dentro de una -construcción de acorde incluso si hay una sola nota.} - -@c TODO If the default for harmonicDots is changed, change this -Los armónicos con puntillo indicados con @code{\harmonic} no muestran -el puntillo. Se debe establecer la propiedad de contexto -@code{harmonicDots} si se necesita el puntillo. - -@lilypond[verbatim,quote,relative=2] -4 2. -\set harmonicDots = ##t -4 2. -@end lilypond - -Como posibilidad alternativa está la de mostrar una cabeza normal de -nota en la altura de la nota que debe sonar, con un pequeño círculo -que indica que se debe tocar como armónico: - -@lilypond[verbatim,quote,relative=2] -d2^\flageolet d_\flageolet -@end lilypond - -Se puede hacer un círculo de menor tamaño, véase la lista de -fragmentos de código en @ref{References for unfretted strings}. - -@strong{@i{Armónicos artificiales}} - -@cindex artificiales, armónicos -@cindex armónicos artificiales - -La notación de los armónicos artificiales se realiza con dos notas, -una con una cabeza normal que indica la posición donde se pisa, y otra -con una cabeza en forma de rombo hueco para indicar la posición donde -se roza la cuerda (sin pisar) para producir el armónico. - -@lilypond[verbatim,quote,relative=1] -2 -@end lilypond - - -@seealso -Glosario musical: -@rglos{harmonics}. - -Referencia de la notación: -@ref{Special note heads}, -@ref{References for unfretted strings}. - - -@node Snap (Bartok) pizzicato -@unnumberedsubsubsec Snap (Bartók) pizzicato - -@cindex pizzicato, Bartók -@cindex pizzicato, snap -@cindex Bartók pizzicato -@cindex snap pizzicato - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{snap-pizzicato-markup-bartok-pizzicato.ly} diff --git a/Documentation/es/user/vocal.itely b/Documentation/es/user/vocal.itely deleted file mode 100644 index f90892648e..0000000000 --- a/Documentation/es/user/vocal.itely +++ /dev/null @@ -1,1327 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Vocal music -@section Vocal music - -@c TODO: inspirational headword - -Esta sección explica cómo tipografiar música vocal, y cómo asegurarse -de que la letra se alinea con las notas de su melodía correspondiente. - -@menu -* Common notation for vocal music:: -* Entering lyrics:: -* Aligning lyrics to a melody:: -* Specific uses of lyrics:: -* Stanzas:: -@end menu - - -@node Common notation for vocal music -@subsection Common notation for vocal music - -Esta sección trata sobre asuntos relacinados con la música vocal en -general y con ciertos estilos concretos de música vocal. - - -@menu -* References for vocal music and lyrics:: -* Opera:: -* Song books:: -* Spoken music:: -* Chants:: -* Ancient vocal music:: -@end menu - - -@node References for vocal music and lyrics -@unnumberedsubsubsec References for vocal music and lyrics - -@c TODO: split this section in two parts? -vv - -Pueden surgir varias cuestiones al tipografiar música vocal. Algunas -se discuten en esta sección, pero otras están tratadas en otros -lugares del manual: - -@itemize -@item -Casi todos los estilos de música vocal utilizan texto escrito como -letra. Hay una introducción a esta notación en @rlearning{Setting -simple songs}. - -@item -La música vocal probablemente requiere el uso del modo de marcado o -@code{markup}, ya sea para la letra o para otros elementos de texto -(nombres de los personajes, etc.). Esta sintaxis está descrita en -@ref{Text markup introduction}. - -@item -Las hojas guía de acordes o @emph{Lead sheets} se pueden imprimir -combinando partes vocales y el @q{modo de acordes}; esta sintaxis se -explica en @ref{Chord notation}. - -@item -Los @q{ambitus} o indicaciones de tesitura vocal se pueden añadir al -principio de los pentagramas vocales, como se explica en -@ref{Ambitus}. - -@item -Las partes vocales se pueden imprimir utilizando las claves -tradicionales, como se muestra en @ref{Clef}. - -@item -Está contemplada la música vocal en estilo de notación antiguo, como -se explica en @ref{Ancient notation}. -@end itemize - - -@node Opera -@unnumberedsubsubsec Opera - -@c TODO -Continuará... - -@c add characters names snippet -vv - -@node Song books -@unnumberedsubsubsec Song books - -@c TODO -Continuaará... - -@snippets -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - - -@seealso -Referencia de la notación: -@ref{Chord notation}. - - -@node Spoken music -@unnumberedsubsubsec Spoken music - -@cindex parlato -@cindex Sprechgesang - -@c TODO Add @refs - -Los efectos como el @q{parlato} o el @q{Sprechgesang} requieren de los -intérpretes que hablen sin altura determinada pero con su ritmo; su -notación se realiza mediante cabezas de nota en forma de aspas, como -se muestra en @ref{Special note heads}. - -@c TODO add "marking-notes-on-spoken-parts" snippet -vv -@c add "showing the rhythm of a melody" snip -@c add "one staff-line notation" -@c add "improvisation" ref -@c add "lyrics independents of notes" ref - - -@node Chants -@unnumberedsubsubsec Chants - -@c TODO Add text from lsr and -user -Continuará... - - -@node Ancient vocal music -@unnumberedsubsubsec Ancient vocal music - -@c TODO -Continuará... - -@c Add "Printing both the ancient and the modern clef in vocal music" snippet, -@c and "Transcription of Ancient music with incipit" snippet. -vv - - -@seealso -Referencia de la notación: -@ref{Ancient notation}. - - -@node Entering lyrics -@subsection Entering lyrics - -@c TODO add one sentence here. -vv - -@menu -* Lyrics explained:: -* Setting simple songs:: -* Working with lyrics and variables:: -@end menu - - -@node Lyrics explained -@unnumberedsubsubsec Lyrics explained - -@cindex letra -@funindex \lyricmode -@cindex puntuación -@cindex espacios, en la letra -@cindex comillas, en la letra - -@c FIXME: this section is to be rewritten. -Dado que los archivos de entrada de LilyPond son de texto, existe al -menos un asunto que tener en cuenta al trabajar con música vocal: los -textos de las canciones se deben interpretar como texto, no como -notas. Por ejemplo, la entrada@tie{}@code{d} debe interpretarse como -una sílaba de una sola letra, no como la nota@tie{}Re. Por tanto se -hace necesario utilizar un modo especial para la letra, ya sea -explícitamente o mediante el uso de métodos abreviados. - -La letra de las canciones se introduce en un modo de entrada especial -que se inicia mediante la palabra clave @code{\lyricmode}, o bien -mediante @code{\addlyrics} ó @code{\lyricsto}. En este modo puede -introducir la letra, con puntuación y acentos, y el carácter @code{d} -no se analiza como una nota, sino más bien como una sílaba de una sola -letra. Las sílabas se introducen como las notas, pero con texto en -lugar de alturas de nota. Por ejemplo, - -@example -\lyricmode @{ Cam-4 pa-4 ni- ta del- lu- gar2 @} -@end example - -Existen dos métodos principales para especificar la colocación -horizontal de las sílabas, bien especificando la duración de cada -sílaba de forma explícita, como en el ejemplo anterior, o bien -alineando automáticamente la letra a la melodía o a cualquier otra -voz, usando @code{\addlyrics} o @code{\lyricsto}. -@c TODO: broken -@c For more details see @ref{The Lyrics context}. - -Una palabra o sílaba de la letra comienza con un carácter alfabético, -y termina con cualquier espacio o dígito. Los caracteres que siguen -pueden ser cualesquiera excepto un dígito o un espacio. - -Cualquier carácter excepto un dígito o un espacio en blanco se -considera parte de una sílaba; esto tiene una importante consecuencia, -y es que una palabra puede terminar en @code{@}}, lo que con -frecuencia conduce al siguiente error: - -@example -\lyricmode @{ la- la@} -@end example - -En este ejemplo, el símbolo @code{@}} se encuentra incluido dentro de -la sílaba final, por tanto la llave de apertura no se compensa con la -correspondiente llave de cierre y el archivo de entrada probablemente -no se podrá procesar. - - -@funindex \property dentro de \lyricmode - -@noindent -De forma similar, un punto que sigue a una secuencia alfabética queda -incluido dentro de la cadena resultante. Como consecuencia, se deben -insertar espacios antes y después de los comandos de propiedades: -@emph{no} escriba - -@example -\override Score.LyricText #'font-shape = #'italic -@end example - -@noindent -sino lo siguiente: - -@example -\override Score . LyricText #'font-shape = #'italic -@end example - -@funindex _ -@cindex espacios, en la letra -@cindex comillas, en la letra -@cindex ligaduras, en la letra - -Para asignar más de una sílaba a una única nota, puede rodearlas por -comillas o usar un carácter @code{_} (guión bajo), para obtener -espacios entre las sílabas, o usar el símbolo de tilde curva -(@code{~}) para obtener una ligadura entre sílabas de la letra. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - -La ligadura de texto se construye con el carácter Unicode U+203F, por -tanto debe asegurarse de que tiene instalada una tipografía (como -DejaVuLGC) que incluya este glifo. - - -Para escribir letra con caracteres de una lengua no inglesa, o que -tenga caracteres acentuados o especiales (como el símbolo del corazón -o comillas inclinadas), introduzca simplemente los caracteres -directamente en el archivo de entrada y guárdelo con una codificación -utf-8. Consulte @ref{Text encoding}, para ver más información. - -@c FIXME: quotes. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { e4 f e d e f e2 } -\addlyrics { He said: “Let my peo ple go”. } -@end lilypond - -Para utilizar comillas normales en la letra, escriba una barra -invertida antes de las comillas. Por ejemplo, - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } -\addlyrics { "\"I" am so lone- "ly\"" said she } -@end lilypond - -La definición completa del comienzo de una palabra en el modo Lyrics -(letra) es algo más compleja. - -Una palabra en el modo Lyrics comienza por: un carácter alfabético, -@code{_}, @code{?}, @code{!}, @code{:}, @code{'}, los caracteres de -control desde @code{^A} hasta @code{^F}, desde @code{^Q} hasta -@code{^W}, @code{^Y}, @code{^^}, cualquier carácter de 8 bits con -código ASCII por encima del 127, o una combinación de dos caracteres -consistente en la combinación de una barra invertida seguida por -@code{`}, @code{'}, @code{"} ó @code{^}. - -@c " to balance double quotes for not-so-bright context-sensitive editors - -Para definir identificadores que contengan letra, se debe usar la -función @code{lyricmode}. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - - -@seealso -Referencia de la notación: -@ref{Fonts}. - -Referencia de funcionamiento interno: -@rinternals{LyricText}, -@rinternals{LyricSpace}. - - -@c FIXME: this title has to be changed (possible confusion with LM) -vv -@node Setting simple songs -@unnumberedsubsubsec Setting simple songs - -@cindex \addlyrics - -La manera más fácil de poner letra a una melodía es añadir - -@example -\addlyrics @{ @var{la letra} @} -@end example - -@noindent -a la melodía. He aquí un ejemplo: - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -@end lilypond - -Se pueden añadir más versos mediante la adición de más secciones -@code{\addlyrics} - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -\addlyrics { speel het spel } -\addlyrics { joue le jeu } -@end lilypond - -La instrucción @code{\addlyrics} no puede manejar situaciones de -polifonía. Para estos casos tendrá que usar @code{\lyricsto} y -@code{\lyricmode}, tal y como se explicará en @ref{Lyrics explained}. - - -@node Working with lyrics and variables -@unnumberedsubsubsec Working with lyrics and variables - -@cindex letra, identificadores de - -Para definir identificadores que contengan texto, se debe usar la -función @code{\lyricmode}. Si embargo no tendrá que escribir las -duraciones, si añade @code{\addlyrics} o @code{\lyricsto} en el -momento de invocar el identificador. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - -Para arreglos distintos o más complejos, la mejor forma es preparar -previamente la jerarquía de pautas y textos, p.ej.: -@example -\new ChoirStaff << - \new Voice = "soprano" @{ @emph{música} @} - \new Lyrics = "textoSoprano" @{ s1 @} - \new Lyrics = "textoTenor" @{ s1 @} - \new Voice = "tenor" @{ @emph{música} @} ->> -@end example - -y después combinar las melodías y líneas de texto correspondientes: - -@example -\context Lyrics = textoSoprano \lyricsto "soprano" -@emph{el texto} -@end example - -@noindent - -El código de entrada definitivo sería algo como - -@example -<<\new ChoirStaff << @emph{prepare la música} >> - \lyricsto "soprano" @emph{etc} - \lyricsto "alto" @emph{etc} -@emph{etc} ->> -@end example - - -@seealso -@c TODO: document \new Staff << Voice \lyricsto >> bug -Referencia de funcionamiento interno: -@rinternals{LyricCombineMusic}, -@rinternals{Lyrics}. - - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@funindex \lyricmode -@funindex \addlyrics -@funindex \lyricsto - -La alineación del texto con las melodías se puede hacer -automáticamente, pero si especificamos las duraciones de las sílabas -también puede hacerse de forma manual. La alineación y el -tipografiado de la letra se preparan con la ayuda de saltos o -@i{skips}, guiones y líneas extensoras. - -La letra se imprime a través de su interpretación dentro del contexto -llamado @rinternals{Lyrics}. - -@example -\new Lyrics \lyricmode @dots{} -@end example - -Existen dos métodos principales para especificar la colocación -horizontal de las sílabas: - -@itemize -@item -alineando automáticamente el texto a una melodía o a otra voz, -utilizando @code{\addlyrics} o @code{\lyricsto}. - -@item -o especificando la duración de cada sílaba explícitamente, utilizando -@code{\lyricmode} -@end itemize - -@menu -* Automatic syllable durations:: -* Manual syllable durations:: -* Multiple syllables to one note:: -* Multiple notes to one syllable:: -* Skipping notes:: -* Extenders and hyphens:: -* Lyrics and repeats:: -@end menu - -@node Automatic syllable durations -@unnumberedsubsubsec Automatic syllable durations - -@cindex duraciones automáticas de las sílabas -@cindex letra y melodías - -La letra se puede alinear automáticamente bajo una melodía dada. Esto -se consigue combinando la melodía y el texto con la expresión -@code{\lyricsto} - -@example -\new Lyrics \lyricsto @var{nombre} @dots{} -@end example - -Esto alinea la letra a las notas del contexto de @rinternals{Voice} -llamado @var{nombre}, que debe existir previamente. Por ello la -@code{Voice} normalmente se especifica en primer lugar, y después se -especifica la letra con @code{\lyricsto}. La instrucción -@code{\lyricsto} cambia automáticamente al modo @code{\lyricmode}, por -lo que la palabra clave @code{\lyricmode} se puede omitir. - -El ejemplo siguiente utiliza comandos diferentes para introducir la -letra. - -@lilypond[quote,fragment,ragged-right,verbatim] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - -% not recommended: left aligns syllables - \new Lyrics \lyricmode { Joy4 to8. the16 world!4. the8 Lord4 is come.2 } - -% wrong: durations needed - \new Lyrics \lyricmode { Joy to the earth! the Sa -- viour reigns. } - -%correct - \new Lyrics \lyricsto "one" { No more let sins and sor -- rows grow. } ->> -@end lilypond - -El segundo verso no está bien alineado porque las duraciones -no se han especificado. Una solución para eso sería usar @code{\lyricsto}. - -El comando @code{\addlyrics} es realmente tan sólo una forma cómoda de -escribir una estructura de LilyPond más complicada que establece la -letra. - -@example -@{ MÚSICA @} -\addlyrics @{ LETRA @} -@end example - -@noindent -es lo mismo que - -@example -\new Voice = "blabla" @{ MÚSICA @} -\new Lyrics \lyricsto "blabla" @{ LETRA @} -@end example - -@node Manual syllable durations -@unnumberedsubsubsec Manual syllable durations - -El texto también se puede introducir sin @code{\addlyrics} ni -@code{\lyricsto}. En este caso, las sílabas se escriben como notas -(pero con las alturas sustituidas por texto) y la duración de cada -sílaba se debe escribir explícitamente. Por ejemplo: - -@example -play2 the4 game2. -sink2 or4 swim2. -@end example - -La alineación respecto de una melodía se puede especificar con la -propiedad @code{associatedVoice}, - -@example -\set associatedVoice = #"lala" -@end example - -@noindent -El valor de la propiedad (aquí: @code{"lala"}) ha de ser el nombre de -un contexto de @rinternals{Voice}. Sin este ajuste, las líneas de -extensión no se formatearán correctamente. - -Presentamos a continuación un ejemplo que muestra el uso de las -duraciones manuales de las sílabas del texto: - -@lilypond[relative=1,ragged-right,verbatim,fragment,quote] -<< \new Voice = "melody" { - \time 3/4 - c2 e4 g2. - } - \new Lyrics \lyricmode { - \set associatedVoice = #"melody" - play2 the4 game2. - } >> -@end lilypond - - -@seealso -Referencia de funcionamiento interno: -@rinternals{Lyrics}. - - -@node Multiple syllables to one note -@unnumberedsubsubsec Multiple syllables to one note - -@funindex _ -@cindex ligaduras, en el texto - -Para asignar más de una sílaba a una sola nota, puede encerrarlas -entre comillas o utilizar un guión bajo (@code{_}), para dejar -espacios entre las sílabas, o usar el símbolo de tilde curva -(@code{~}) para obtener una ligadura en el texto@footnote{Las -ligaduras de texto están hechas con el carácter de Unicode U+203F, por -tanto debe asegurarse de tener instalada una tipografía (como -DejaVuLGC) que incluya este glifo.}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - - -@seealso -Referencia de funcionamiento interno: @rinternals{LyricCombineMusic}. - -@c Here come the section which used to be "Melismata" -@c the new title might be more self-explanatory - - -@node Multiple notes to one syllable -@unnumberedsubsubsec Multiple notes to one syllable - -@cindex melisma -@cindex melismata -@cindex fraseo, en la letra - -A veces, y sobre todo en la música medieval, varias notas se cantan -sobre una sílaba única; tales vocalizaciones reciben el nombre de -melismas, o melismata. - -@c this method seems to be the simplest; therefore -@c it might be better to present it first - vv - -Podemos definir los melismas completamente dentro de la letra, -escribiendo un guión bajo @code{_} por cada nota que se quiere añadir -al melisma. - -@c FIXME: clarify: __ is used to crate a lyric extender, -@c _ is used to add a note to a melisma, so both __ and _ are needed. - -@c verbose! --FV -@c duplicated: TODO fix -Además, podemos hacer que se imprima una línea extensora para indicar -el melisma en la partitura, escribiendo un doble guión bajo junto a la -primera sílaba del melisma. Este ejemplo presenta los tres elementos -que se usan con este fin (todos ellos circundados por espacios): -guiones dobles para separar las sílabas de una palabra, guiones bajos -para añadir notas al melisma, y un doble guión bajo para poner una -línea extensora. - -@c wrong: extender line only on last syllable of a word. Change example -@lilypond[relative=1,verbatim,fragment,quote] -{ \set melismaBusyProperties = #'() - c d( e) f f( e) e e } -\addlyrics - { Ky -- _ _ ri __ _ _ _ e } -@end lilypond - -En este caso también podemos tener ligaduras de unión y de expresión -en la melodía, si establecemos @code{melismaBusyProperties}, como se -hizo en el ejemplo anterior. - -Sin embargo la instrucción @code{\lyricsto} también puede detectar los -melismas automáticamente: sólo pone una sílaba debajo de un grupo de -notas unidas mediante ligadura de unión o de expresión. Si quiere -forzar que un grupo de notas sin ligadura sea un melisma, inserte -@code{\melisma} después de la primera nota del grupo, y -@code{\melismaEnd} después de la última, p.ej.: - -@lilypond[quote,relative=2,ragged-right,fragment,verbatim] -<< - \new Voice = "lala" { - \time 3/4 - f4 g8 - \melisma - f e f - \melismaEnd - e2 - } - \new Lyrics \lyricsto "lala" { - la di __ daah - } ->> -@end lilypond - -Además, las notas se consideran un melisma si están unidas manualmente -mediante una barra, y el barrado automático (véase @ref{Setting -automatic beam behavior}) está desactivado. - -@c FIXME: this now links to LM -vv - -@cindex SATB -@cindex coral, partitura - -Hay un ejemplo completo de una disposición de partitura SATB en la -sección @rlearning{Vocal ensembles}. - - -@predefined -@funindex \melisma -@code{\melisma}, -@funindex \melismaEnd -@code{\melismaEnd}. -@endpredefined - - -@seealso -@c @lsr{vocal,lyric@/-combine.ly}. - - -@knownissues - -Los melismas no se detectan automáticamente, y las líneas de extensión -se deben insertar a mano. - -@node Skipping notes -@unnumberedsubsubsec Skipping notes - -Se puede conseguir que una línea de letra progrese más lentamente que -la melodía, mediante la inserción de desplazamientos o @code{\skip}s -en la letra. Por cada @code{\skip}, el texto se retrasa en una nota. -La instrucción @code{\skip} debe ir seguida de una duración válida, -pero esta duración se ignora cuando se usa @code{\skip} en las letras. - -Por ejemplo, - -@lilypond[verbatim,ragged-right,quote] -\relative c' { c c g' } -\addlyrics { - twin -- \skip 4 - kle -} -@end lilypond - - -@node Extenders and hyphens -@unnumberedsubsubsec Extenders and hyphens - -@cindex melisma -@cindex extensora, línea -@cindex línea de extensión - -@c leave this as samp. -gp -Los melismas se indican mediante una línea horizontal centrada entre -una sílaba y la siguiente. Esta línea recibe el nombre de línea de -extensión, y se escribe como @samp{ __ } (fíjese en los espacios antes -y después de los dos guiones bajos). - -@warning{Los melismas se indican en la partitura con líneas -extensoras, que se escriben con un doble guión bajo; pero también se -pueden introducir melismas cortos mediante saltos de notas -individuales, que se escriben como caracteres de guión bajo sueltos; -de forma predeterminada éstos no producen la impresión de una línea de -extensión.} - -@cindex guiones - -@c leave this as samp. -gp -Los guiones centrados se escriben como @samp{ -- } entre sílabas de -una misma palabra (fíjese en los espacios antes y después de los dos -guiones). El guión quedará centrado entre las sílabas, y su longitud -se ajustará en función del espacio que exista entre ellas. - -En la música grabada de modo muy apretado, se pueden quitar los -guiones. Se puede controlar si esto ocurre o no, mediante la -@code{minimum-distance} (distancia mínima entre las dos sílabas) y la -@code{minimum-length} (umbral por debajo del cual se suprimen los -guiones). - - -@seealso -Referencia de funcionamiento interno: -@rinternals{LyricExtender}, -@rinternals{LyricHyphen}. - - -@node Lyrics and repeats -@unnumberedsubsubsec Lyrics and repeats - -@c TODO New section. Add text -Continuará... - -@node Specific uses of lyrics -@subsection Specific uses of lyrics - -@c FIXME This whole section is to be reorganized. -vv - -A menudo se aplican a una melodía distintos versos de una canción de -formas ligeramente distintas. Tales variantes pueden aún captarse -mediante @code{\lyricsto}. - -@menu -* Divisi lyrics:: -* Lyrics independent of notes:: -* Spacing out syllables:: -* Centering lyrics between staves:: -@end menu - - -@node Divisi lyrics -@unnumberedsubsubsec Divisi lyrics - -Puede presentar letras alternativas (o divisi) nombrando contextos de -voz y aplicando la letra a los mencionados contextos específicos. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" { - \relative c' { - c4 - << - { \voiceOne c8 e } - \new Voice = "splitpart" { \voiceTwo c4 } - >> - \oneVoice c4 c | c - } - } - \new Lyrics \lyricsto "melody" { we shall not o- ver- come } - \new Lyrics \lyricsto "splitpart" { will } ->> } -@end lilypond - - -Puede usar este truco para presentar las distintas letras de una -sección que se repite. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" \relative c' { - c2 e | g e | c1 | - \new Voice = "verse" \repeat volta 2 {c4 d e f | g1 | } - a2 b | c1} - \new Lyrics = "mainlyrics" \lyricsto melody \lyricmode { - do mi sol mi do - la si do } - \context Lyrics = "mainlyrics" \lyricsto verse \lyricmode { - do re mi fa sol } - \new Lyrics = "repeatlyrics" \lyricsto verse \lyricmode { - dodo rere mimi fafa solsol } ->> -} -@end lilypond - - -@node Lyrics independent of notes -@unnumberedsubsubsec Lyrics independent of notes - -En cierta música vocal compleja, podría ser deseable colocar la letra -de forma totalmente independiente de las notas. La música que se -define dentro de @code{lyricrhythm} desaparece dentro del contexto -@code{Devnull}, pero los valores rítmicos aún se pueden utilizar para -colocar la letra. - -@lilypond[quote,verbatim,ragged-right] -voice = { - c''2 - \tag #'music { c''2 } - \tag #'lyricrhythm { c''4. c''8 } - d''1 -} - -lyr = \lyricmode { I like my cat! } - -<< - \new Staff \keepWithTag #'music \voice - \new Devnull="nowhere" \keepWithTag #'lyricrhythm \voice - \new Lyrics \lyricsto "nowhere" \lyr - \new Staff { c'8 c' c' c' c' c' c' c' - c' c' c' c' c' c' c' c' } ->> -@end lilypond - -Sólo se recomienda este método si la música que está en el contexto -@code{Devnull} no contiene melismas. Los melismas están definidos por -el contexto @code{Voice}. La conexión de la letra a un contexto -@code{Devnull} hace que se pierdan los enlaces entre la voz y las -sílabas, y también la información relativa a los melismas. Por tanto, -si enlazamos la letra a un contexto @code{Devnull}, los melismas -implícitos se ignoran. - -@c Conclusion: do not use devnull for lyrics -FV - -@c this clarifies http://code.google.com/p/lilypond/issues/detail?id=248 - -@node Spacing out syllables -@unnumberedsubsubsec Spacing out syllables - -@cindex Espaciado de la letra -@cindex Letra, aumentar el espaciado - -Para aumentar el espaciado entre las sílabas de la letra, establezca -la propiedad minimum-distance de LyricSpace. - -@lilypond[relative,verbatim,fragment,quote,ragged-right] -{ - c c c c - \override Lyrics.LyricSpace #'minimum-distance = #1.0 - c c c c -} -\addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext -} -@end lilypond - -Para que este cambio sea válido para la letra de la partitura -completa, establezca la propiedad dentro del @q{layout} o disposición. - -@lilypond[verbatim,quote,ragged-right] -\score { - \relative c' { - c c c c - c c c c - } - \addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext - } - \layout { - \context { - \Lyrics - \override LyricSpace #'minimum-distance = #1.0 - } - } -} -@end lilypond - -@c @snippets -@c This snippet has been renamed to "lyrics-alignment.ly" -@c update as soon as lsr/is updated -vv -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {lyrics-alignment.ly} - -@c TODO: move to LSR -vv -@snippets - -La comprobación que asegura que las inscripciones de texto y la letra -de las canciones se mantienen dentro de los márgenes, es una tarea -computacional relativamente costosa. Para acelerar el procesado, -LilyPond no hace tales cálculos de forma predeterminada; para -habilitarlos, utilice - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - -Para hacer también que las sílabas de la letra eviten las barras de compás, use - -@example -\layout @{ - \context @{ - \Lyrics - \consists "Bar_engraver" - \consists "Separating_line_group_engraver" - \override BarLine #'transparent = ##t - @} -@} -@end example - -@c TODO Create and add lsr example of lyricMelismaAlignment -@c It's used like this to center-align all lyric syllables, -@c even when notes are tied. -td - -@ignore -\layout -{ - \context { \Score lyricMelismaAlignment = #0 } -} -@end ignore - - -@node Centering lyrics between staves -@unnumberedsubsubsec Centering lyrics between staves - -@c TODO Add text from -user -Continuará... - - -@node Stanzas -@subsection Stanzas - -@menu -* Adding stanza numbers:: -* Adding dynamics marks to stanzas:: -* Adding singers' names to stanzas:: -* Stanzas with different rhythms:: -* Printing stanzas at the end:: -* Printing stanzas at the end in multiple columns:: -@end menu - - -@node Adding stanza numbers -@unnumberedsubsubsec Adding stanza numbers - -@cindex verso, número de - -Los números de los versos se pueden añadir estableciendo -@code{stanza}, p.ej., - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set stanza = #"1. " - Hi, my name is Bert. -} \addlyrics { - \set stanza = #"2. " - Oh, ché -- ri, je t'aime -} -@end lilypond - -@noindent -Estos números aparecerán inmediatamente antes de la primera sílaba. - -@c TODO Create and add snippet to show how two lines of a -@c stanza can be grouped together, along these lines: -@c (might need improving a bit) -td - -@ignore -leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup -#"brace105" } - -stanzaOneOne = { - \set stanza = \markup { "1. " \leftbrace } - \lyricmode { Child, you're mine and I love you. - Lend thine ear to what I say. - - } -} - -stanzaOneThree = { -% \set stanza = \markup { " "} - \lyricmode { Child, I have no great -- er joy - Than to have you walk in truth. - - } -} - -\new Voice { - \repeat volta 2 { c'8 c' c' c' c' c' c'4 - c'8 c' c' c' c' c' c'4 } -} \addlyrics { \stanzaOneOne } - \addlyrics { \stanzaOneThree } - -@end ignore - -@node Adding dynamics marks to stanzas -@unnumberedsubsubsec Adding dynamics marks to stanzas - -Los versos que difieren en su sonoridad se pueden especificar -escribiendo una indicación dinámica antes de cada verso. En LilyPond, -todo lo que aparece delante de un verso está dentro del objeto -@code{StanzaNumber}; las indicaciones dinámicas no son diferentes. -Por razones técnicas, tendrá que establecer el valor de la sección -stanza (verso) fuera de @code{\lyricmode}: - -@lilypond[quote,ragged-right,verbatim] -text = { - \set stanza = \markup { \dynamic "ff" "1. " } - \lyricmode { - Big bang - } -} - -<< - \new Voice = "tune" { - \time 3/4 - g'4 c'2 - } -\new Lyrics \lyricsto "tune" \text ->> -@end lilypond - - -@node Adding singers' names to stanzas -@unnumberedsubsubsec Adding singers' names to stanzas - -@cindex cantante, nombre del -@cindex nombre del cantante - -También se pueden poner los nombres de los cantantes. Se imprimen al -comienzo de la línea, igual que los nombres de instrumento. Se crean -estableciendo un valor para @code{vocalName}. Se puede definir una -versión abreviada como @code{shortVocalName}. - -@lilypond[fragment,ragged-right,quote,verbatim,relative=2] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set vocalName = #"Bert " - Hi, my name is Bert. -} \addlyrics { - \set vocalName = #"Ernie " - Oh, ché -- ri, je t'aime -} -@end lilypond - - -@node Stanzas with different rhythms -@unnumberedsubsubsec Stanzas with different rhythms - -@subsubheading Ignoring melismata - -Existe la posibilidad de que el texto tenga un melisma en un verso, -pero varias sílabas en otro. Una solución es hacer que la voz más -rápida ignore el melisma. Esto se consigue estableciendo -@code{ignoreMelismata} en el contexto Lyrics. - -@lilypond[verbatim,ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - \slurDotted - f8.[( g16]) - a4 - } - \new Lyrics \lyricsto "lahlah" { - more slow -- ly - } - \new Lyrics \lyricsto "lahlah" { - go - \set ignoreMelismata = ##t - fas -- ter - \unset ignoreMelismata - still - } ->> -@end lilypond - -@knownissues -A diferencia de casi todas las instrucciones @code{\set}, @code{\set -ignoreMelismata} no funciona si va precedido de @code{\once}. Es -necesario utilizar @code{\set} y @code{\unset} para delimitar la letra -en que se quieren ignorar los melismas. - - -@subsubheading Switching to an alternative melody - -Son posibles variaciones más complejas en la disposición del texto. -Se puede cambiar la melodía para una línea de la letra durante el -texto. Esto se hace estableciendo la propiedad -@code{associatedVoice}. En el ejemplo - -@lilypond[ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - << - \new Voice = "alternative" { - \voiceOne - \times 2/3 { - % show associations clearly. - \override NoteColumn #'force-hshift = #-3 - f8 f g - } - } - { - \voiceTwo - f8.[ g16] - \oneVoice - } >> - a8( b) c - } - \new Lyrics \lyricsto "lahlah" { - Ju -- ras -- sic Park - } - \new Lyrics \lyricsto "lahlah" { - % Tricky: need to set associatedVoice - % one syllable too soon! - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex - } >> -@end lilypond - -@noindent -el texto del primer verso se aplica a una melodía llamada @q{lahlah}, - -@example -\new Lyrics \lyricsto "lahlah" @{ - Ju -- ras -- sic Park -@} -@end example - - -El segundo verso se aplica en principio al contexto de @code{lahlah}, -pero para la sílaba @q{ran}, cambia a una melodía diferente. Esto se -consigue con -@example -\set associatedVoice = alternative -@end example - -@noindent -Aquí, @code{alternative} es el nombre del contexto de @code{Voice} que -contiene el tresillo. - -@c FIXME: make this easier to understand -vv -La instrucción debe ir una sílaba antes de la cuenta, antes de @q{Ty} -en este caso. En otras palabras, el cambio en la voz asociada -associatedVoice se produce un paso más tarde de lo que se espera. -Esto es así por razones técnicas, y no es un fallo del programa. - -@example -\new Lyrics \lyricsto "lahlah" @{ - \set associatedVoice = alternative % se aplica al "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % se aplica al "rus" - sau -- rus Rex -@} -@end example - -@noindent -La disposición se vuelve a cambiar a la situación inicial mediante la -asignación de @code{lahlah} a @code{associatedVoice}. - - -@node Printing stanzas at the end -@unnumberedsubsubsec Printing stanzas at the end - -En ocasiones es conveniente tener un verso ajustado a la música, y el -resto añadido en forma de estrofa al final de la pieza. Esto se puede -conseguir escribiendo los versos adicionales dentro de una sección -@code{\markup} fuera del bloque score principal de la partitura. -Tenga en cuenta que existen dos formas distintas de forzar los saltos -de línea al utilizar @code{\markup}. - -@lilypond[ragged-right,verbatim,quote] -melody = \relative c' { -e d c d | e e e e | -d d e d | c1 | -} - -text = \lyricmode { -\set stanza = #"1." Ma- ry had a lit- tle lamb, -its fleece was white as snow. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text ->> - \layout { } -} -\markup { \column{ - \line{ Verse 2. } - \line{ All the children laughed and played } - \line{ To see a lamb at school. } - } -} -\markup{ - \wordwrap-string #" - Verse 3. - - Mary took it home again, - - It was against the rule." -} -@end lilypond - - -@node Printing stanzas at the end in multiple columns -@unnumberedsubsubsec Printing stanzas at the end in multiple columns - -Cuando una pieza tiene muchos versos, a menudo se imprimen en varias -columnas a lo largo de toda la página. Con frecuencia un número de -verso fuera del margen precede a cada verso. El ejemplo siguiente -muestra cómo producir dicha salida en Lilypond. - -@lilypond[ragged-right,quote,verbatim] -melody = \relative c' { - c c c c | d d d d -} - -text = \lyricmode { - \set stanza = #"1." This is verse one. - It has two lines. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text - >> - \layout { } -} - -\markup { - \fill-line { - \hspace #0.1 % moves the column off the left margin; - % can be removed if space on the page is tight - \column { - \line { \bold "2." - \column { - "This is verse two." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "3." - \column { - "This is verse three." - "It has two lines." - } - } - } - \hspace #0.1 % adds horizontal spacing between columns; - % if they are still too close, add more " " pairs - % until the result looks good - \column { - \line { \bold "4." - \column { - "This is verse four." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "5." - \column { - "This is verse five." - "It has two lines." - } - } - } - \hspace #0.1 % gives some extra space on the right margin; - % can be removed if page space is tight - } -} -@end lilypond - - -@seealso -Referencia de funcionamiento interno: -@rinternals{LyricText}, -@rinternals{StanzaNumber}. diff --git a/Documentation/es/user/wind.itely b/Documentation/es/user/wind.itely deleted file mode 100644 index a53990d4af..0000000000 --- a/Documentation/es/user/wind.itely +++ /dev/null @@ -1,216 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Wind instruments -@section Wind instruments - -@lilypondfile[quote]{wind-headword.ly} - -Esta sección incluye ciertos elementos de notación musical que afloran -al escribir para instrumentos de viento. - -@menu -* Common notation for wind instruments:: -* Bagpipes:: -@end menu - -@node Common notation for wind instruments -@subsection Common notation for wind instruments - -Esta sección trata algunos asuntos que son comunes a casi todos los -instrumentos de viento. - -@menu -* References for wind instruments:: -* Fingerings:: -@end menu - -@node References for wind instruments -@unnumberedsubsubsec References for wind instruments - -@cindex viento, instrumentos - -Muchas cuestiones de la notación para instrumentos de viento tienen -que ver con las respiraciones y los golpes de lengua: - -@itemize -@item Las respiraciones se pueden especificar mediante silencios o marcas de respiración, véase @ref{Breath marks}. -@item La ejecución ligada se indica mediante ligaduras de expresión, véase @ref{Slurs}. -@item Los distintos golpes de lengua, desde legato hasta staccato pasando por non legato, se presentan por lo general mediante articulaciones, en ocasiones combinadas con ligaduras de expresión, véase @ref{Articulations and ornamentations} y @ref{List of articulations}. -@item El frullato se indica generalmente mediante una indicación de trémolo y una marca textual sobre la nota. Véase @ref{Tremolo repeats}. -@end itemize - -También existen otros aspectos de la notación musical que son de -aplicación a los instrumentos de viento: - -@itemize -@item Muchos instrumentos de viento son transpositores, véase @ref{Instrument transpositions}. -@item El portamento es característico del trombón, pero otros instrumentos de viento pueden realizar glissandos con llaves o válvulas. Véase @ref{Glissando}. -@item Los glissandos de serie armónica, que son posibles en todos los metales pero bastante específicos de las trompas, se escriben en general como notas de adorno, véase @ref{Grace notes}. -@item Las inflexiones de tono al final de una nota se tratan en @ref{Falls and doits}. -@item Los golpes de llave o de válvula se suelen indicar con el estilo @code{cross} (aspas) de cabezas de nota, véase @ref{Special note heads}. -@item Los instrumentos de viento-madera pueden sobreinflar las notas graves para producir armónicos. Éstos se muestran por medio de la articulación @code{flageolet}. Véase @ref{List of articulations}. -@item El uso de sordinas para los metales se suele indicar mediante marcas de texto, pero en los lugares donde se suceden muchos cambios rápidos es mejor utilizar las articulaciones @code{stopped} (tapado) y @code{open} (abierto). Véase @ref{Articulations and ornamentations} y @ref{List of articulations}. -@item Las trompas tapadas se indican por medio de la articulación @code{stopped}. Véase @ref{Articulations and ornamentations}. -@end itemize - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing--flageolet-mark-size.ly} - - -@seealso -Referencia de la notación: -@ref{Breath marks}, -@ref{Slurs}, -@ref{Articulations and ornamentations}, -@ref{List of articulations}, -@ref{Tremolo repeats}, -@ref{Instrument transpositions}, -@ref{Glissando}, -@ref{Grace notes}, -@ref{Falls and doits}, -@ref{Special note heads}. - -Snippets: -@rlsr{Winds} - - -@node Fingerings -@unnumberedsubsubsec Fingerings - -@c TODO add link to LSR snippet by Libero Mureddo once he has added -@c it (after August 15th). -Todos los instrumentos de viento aparte del trombón requieren el uso -de los distintos dedos para producir cada nota. - -[REDACTAR] - -@node Bagpipes -@subsection Bagpipes - -Esta sección contiene información adicional de utilidad para la -escritura para gaita. - -@menu -* Bagpipe definitions:: -* Bagpipe example:: -@end menu - -@node Bagpipe definitions -@unnumberedsubsubsec Bagpipe definitions - -@cindex gaita -@cindex gaita escocesa de las tierras altas -@cindex mordentes -@cindex notas de adorno -@funindex \taor -@funindex taor -@funindex \hideKeySignature -@funindex hideKeySignature -@funindex \showKeySignature -@funindex showKeySignature - -LilyPond contiene definiciones especiales para la música de gaita escocesa de las -tierras altas; para usarlas, escriba - -@example -\include "bagpipe.ly" -@end example - -@noindent -al principio del archivo de entrada. De esta forma podrá escribir las notas de adorno especiales -que son usuales en la música de gaita, mediante instrucciones breves. Por ejemplo, puede escribir -@code{\taor} en lugar de - -@example -\grace @{ \small G32[ d G e] @} -@end example - -@code{bagpipe.ly} también contiene definiciones de alturas para las notas de la -gaita en las octavas adecuadas, de forma que no se tenga que preocupar por -@code{\relative} o por @code{\transpose}. - -@lilypond[ragged-right,verbatim,quote,notime] -\include "bagpipe.ly" -{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } -@end lilypond - -La música de gaita utiliza siempre la tonalidad de Re mayor (aunque esto no es -completamente cierto). Sin embargo, puesto que es la única tonalidad que se puede utilizar, -normalmente la armadura no se escribe. Para configurar esto de forma correcta, -comience la música siempre con @code{\hideKeySignature} (ocultar armadura). Si, por algún motivo, -quiere mostrar la armadura, puede usar @code{\showKeySignature} -en su lugar. - -Alguna música moderna utiliza digitaciones cruzadas sobre el Do y el Fa para bemolizar estas notas. -Se puede indicar esto mediante @code{cflat} o @code{fflat}. De forma parecida, el -sol agudo piobaireachd se puede escribir @code{gflat} cuando aparece en música -ligera. - - -@seealso -Fragmentos de código: -@rlsr{Winds}. - - -@node Bagpipe example -@unnumberedsubsubsec Bagpipe example - -@cindex gaita, ejemplo de -@cindex Amazing Grace, ejemplo de gaita - -La conocida melodía Amazing Grace tiene este aspecto en notación de -gaita. - -@lilypond[verbatim,quote] -\include "bagpipe.ly" -\layout { - indent = 0.0\cm - \context { \Score \remove "Bar_number_engraver" } -} - -\header { - title = "Amazing Grace" - meter = "Hymn" - arranger = "Trad. arr." -} - -{ - \hideKeySignature - \time 3/4 - \grg \partial 4 a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg e8. f16 - \dblA A2 \grg A4 - \grg A2 f8. A16 - \grg A2 \hdblf f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 e4 - \thrwd d2. - \slurd d2 - \bar "|." -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{Winds}. diff --git a/Documentation/es/user/working.itely b/Documentation/es/user/working.itely deleted file mode 100644 index fd2e3ecca2..0000000000 --- a/Documentation/es/user/working.itely +++ /dev/null @@ -1,829 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 3e63320d65c86c823949f70ab9791eab96c98352 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Working on LilyPond projects -@chapter Working on LilyPond projects - -Esta sección explica cómo resolver o evitar ciertos problemas comunes. -Si tiene experiencia en programación muchos de estos -consejos pueden parecer obvios, pero aún así le recomendamos -que lea este capítulo. - - -@menu -* Suggestions for writing LilyPond files:: -* When things don't work:: -* Scores and parts:: -@end menu - - -@node Suggestions for writing LilyPond files -@section Suggestions for writing LilyPond files - -En este momento está preparado para comenzar a escribir archivos de -LilyPond más grandes -- no sólo los pequeños ejemplos que aparecen en -el tutorial, sino piezas completas --. Pero ¿cómo debe proceder para -hacerlo? - -En la medida en que LilyPond entienda sus archivos y produzca la -salida que usted pretendía, realmente no importa mucho qué aspecto -tengan sus archivos. Sin embargo existen algunas otras cosas a tener -en cuenta cuando se escriben archivos de LilyPond. - -@itemize -@item ¿Qué ocurre si comete un fallo? La estructura de un archivo -de LilyPond puede hacer que ciertos errores se hagan más fáciles (o -más difíciles) de encontrar. - -@item ¿Qué ocurre si quiere compartir sus archivos con otras personas? -De hecho, ¿y si quiere alterar sus propios archivos después de algunos -años? Algunos archivos de LilyPond se comprenden a primera vista; -otros pueden tenerle rascándose la cabeza durante una hora. - -@item ¿Qué ocurre si quiere actualizar su archivo de LilyPond para poderlo usar con -una versión más reciente del programa? La sintaxis de la entrada se -modifica de forma ocasional según LilyPond se va perfeccionando. Casi -todos los cambios se pueden hacer de forma automática con -@code{convert-ly}, pero algunos podrían necesitar de una ayuda manual. -Los archivos de LilyPond se pueden estructurar para que sean más -fáciles (o más difíciles) de actualizar. - -@end itemize - -@menu -* General suggestions:: -* Typesetting existing music:: -* Large projects:: -* Saving typing with variables and functions:: -* Style sheets:: -@end menu - - -@node General suggestions -@subsection General suggestions - -Presentamos algunas sugerencias que le pueden servir de ayuda para evitar -o corregir problemas: - -@itemize -@item @strong{Incluya los números de @code{\version} en todos los archivos}. Dese cuenta de que todas las -plantillas contienen información sobre la @code{\version}. Le -recomendamos mucho que siempre incluya la @code{\version}, sin -importar cuán pequeño pueda ser su archivo. Desde la experiencia -personal podemos decirle que es bastante frustrante intentar recordar -el número de versión de LilyPond que estaba usando hace unos años. -@code{convert-ly} requiere que declare qué versión de LilyPond -utilizó. - -@item @strong{Incluya comprobaciones}: @ruser{Bar and bar number checks}, -@ruser{Octave checks}. Si incluye comprobaciones de vez en cuando, en -caso de que cometa un error podrá localizarlo mucho más rápidamente. -¿Con qué frecuencia es @q{de vez en cuando}? Depende de la -complejidad de la música. Para una música muy sencilla, quizá tan -sólo una o dos veces. Para una música muy compleja, quizá a cada -compás. - -@item @strong{Un compás por cada línea de texto}. Si hay algo muy complicado, ya sea -en la propia música -o en la salida que desea producir, a menudo conviene escribir un solo compás -por cada línea. El ahorro en espacio de pantalla que se obtiene al amontonar ocho compases por línea no merece la pena -si luego tiene que @q{depurar} los archivos. - -@item @strong{Comente los archivos}. Utilice o números de compás (de vez en cuando) -o -referencias a temas musicales (@q{segundo tema de los violines,} @q{cuarta -variación,} etc.). Puede que no necesite comentarios cuando introduce una pieza por vez primera, -pero si quiere volver a ella o modificar algo al cabo de dos o tres años, -y también si le pasa la fuente a un amigo, -será todo un desafío -determinar sus intenciones o de qué manera estaba estructurado el archivo -si no le añadió los comentarios. - -@item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una -falta de equilibrio -en el número de @code{@{} y @code{@}}. - -@item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones -e identificadores. Si especifica @code{c4 d e} al principio de una frase -(en lugar de sólo @code{c d e}) se puede ahorrar problemas -si reelabora la música más tarde. - -@item @strong{Separe los trucos} de las definiciones musicales. Consulte -@ref{Saving typing with variables and functions} y -@ref{Style sheets}. - -@end itemize - - -@node Typesetting existing music -@subsection Typesetting existing music - -Si está introduciendo música a partir de una partitura existente (es decir, tipografiando una hoja -de música ya impresa), - -@itemize - -@item Introduzca un sistema del manuscrito (la copia física) cada vez (pero mantenga -la práctica de escribir un compás por línea de texto), y compruebe -cada sistema cuando lo haya terminado. Puede usar las instrucciones -@code{showLastLength} o @code{showFirstLength} para acelerar el -proceso -- ver @ruser{Skipping corrected music} -- . - -@item Defina @code{mBreak = @{ \break @}} e inserte @code{\mBreak} -dentro del archivo de entrada donde el manuscrito tenga un saldo de línea. De esta forma -le resultará mucho más fácil comparar la música de LilyPond con la original. -Cuando haya terminado de revisar su partitura podrá -definir @code{mBreak = @{ @}} para quitar todos esos saltos de línea. Así -permitirá a LilyPond colocar los saltos donde éste lo estime -más oportuno. - -@item Al escribir una parte para un instrumento transpositor dentro de una -variable, se recomienda que las notas estén envueltas dentro de - -@example -\transpose c altura-natural @{...@} -@end example -(donde @code{altura-natural} es la afinación natural del instrumento) -de forma que la música dentro de la variable esté realmente en Do -mayor. Después podemos volver a transportarlas en sentido inverso -cuando se utiliza la variable, si es necesario, pero quizá no queramos -hacerlo (p.ej., al imprimir una partitura en afinación de concierto, -al convertir una parte de trombón de clave de Sol a clave de Fa, -etc.). Es menos probable cometer errores en los transportes si toda -la música que está dentro de las variables se encuentra en un tono -coherente. - -Asimismo, haga los transportes exclusivamente hacia o desde Do mayor. -Esto significa que aparte de ésta, las únicas tonalidades que usaremos -serán los tonos de afinación de los instrumentos transpositores: bes -para una trompeta en Si bemol, aes para un clarinete en La bemol, etc. - -@end itemize - - -@node Large projects -@subsection Large projects - -Al trabajar en proyecto grande se hace esencial tener una estructura clara -en los archivos de LilyPond - -@itemize - -@item @strong{Utilice un identificador para cada voz}, con un mínimo de -estructura dentro de la definición. La estructura de la sección -@code{\score} es la que cambiará con mayor probabilidad; por contra, es -extremadamente improbable que cambie la definición de @code{violin} en -versiones nuevas de LilyPond. - -@example -violin = \relative c'' @{ -g4 c'8. e16 -@} -... -\score @{ - \new GrandStaff @{ - \new Staff @{ - \violin - @} - @} -@} -@end example - -@item @strong{Separe los trucos de las definiciones musicales}. -Ya se mencionó con anterioridad, pero para proyectos grandes es vital. -Quizá tengamos que cambiar la definición de @code{fluegop}, pero en ese -caso sólo lo tendremos que hacer una vez, y aún podremos evitar tocar -nada dentro de @code{violin}. - -@example -fluegop = _\markup@{ - \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} -violin = \relative c'' @{ -g4\fluegop c'8. e16 -@} -@end example - -@end itemize - - -@node Saving typing with variables and functions -@subsection Saving typing with variables and functions - -@cindex variables -@cindex identificadores - -Llegado a este punto, usted ha visto cosas de este tipo: - -@lilypond[quote,verbatim,ragged-right] -hornNotes = \relative c'' { c4 b dis c } -\score { - { - \hornNotes - } -} -@end lilypond - -Incluso se dará cuenta de que esto puede ser útil en música minimalista: - -@lilypond[quote,verbatim,ragged-right] -fragmentA = \relative c'' { a4 a8. b16 } -fragmentB = \relative c'' { a8. gis16 ees4 } -violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } -\score { - { - \violin - } -} -@end lilypond - -Sin embargo también puede usar estos identificadores (que también se conocen como -variables, macros o instrucciones definidas por el usuario) para hacer trucos: - -@lilypond[quote,verbatim,ragged-right] -dolce = \markup{ \italic \bold dolce } -padText = { \once \override TextScript #'padding = #5.0 } -fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } -violin = \relative c'' { - \repeat volta 2 { - c4._\dolce b8 a8 g a b | - \padText - c4.^"hi there!" d8 e' f g d | - c,4.\fthenp b8 c4 c-. | - } -} -\score { - { - \violin - } -\layout{ragged-right=##t} -} -@end lilypond - -Obviamente estos identificadores son útiles para ahorrar tecleo. -Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez: -reducen la complejidad. Examinemos -el ejemplo anterior reescrito sin ningún identificador. -Encontrará que es mucho más difícil de leer, sobre todo -la última línea. - -@example -violin = \relative c'' @{ - \repeat volta 2 @{ - c4._\markup@{ \italic \bold dolce @} b8 a8 g a b | - \once \override TextScript #'padding = #5.0 - c4.^"hi there!" d8 e' f g d | - c,4.\markup@{ \dynamic f \italic \small @{ 2nd @} - \hspace #0.1 \dynamic p @} b8 c4 c-. | - @} -@} -@end example - -@c TODO Replace the following with a better example -td -@c Skylining handles this correctly without padText - -Hasta ahora hemos contemplado la sustitución estática: cuando LilyPond -se encuentra con @code{\padText}, lo sustituye con aquello que -hemos definido que sea (es decir, todo lo que está a la derecha de -@code{padtext=}). - -LilyPond también puede manejar sustituciones no estáticas (piense en ellas -como en funciones). - -@lilypond[quote,verbatim,ragged-right] -padText = -#(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -La utilización de identificadores también es una buena forma de reducir el trabajo si -la sintaxis de entrada de LilyPond cambia (véase @ref{Updating old files}). Si -tiene una sola definición (como p.ej. @code{\dolce}) para todos sus -archivos (ver @ref{Style sheets}), y después la sintaxis se modifica, sólo tendrá -que actualizar su definición @code{\dolce} única, -en lugar de tener que hacer cambios en cada uno de los archivos @code{.ly}. - - -@node Style sheets -@subsection Style sheets - -La salida que produce LilyPond se puede modificar profundamente; consulte -@ref{Tweaking output} para leer detalles sobre este asunto. Pero ¿qué ocurre si tiene muchos -archivos a los que les quiere aplicar sus propios trucos? O ¿qué ocurre si, sencillamente, -quiere separar los trucos de la propia música? Todo esto -es bastante fácil de conseguir. - -Veamos un ejemplo. No se preocupe si no entiende -las partes que tienen todos los @code{#()}. Esto se explicará en -@ref{Advanced tweaks with Scheme}. - -@lilypond[quote,verbatim,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Existen varios problemas con la salida que se superpone; los arreglaremos utilizando -las técnicas descritas en @ref{Moving objects}. Pero también haremos algo respecto a -las definiciones @code{mpdolce} y @code{tempoMark}. Éstas producen la salida que -deseamos, pero quizá las querríamos utilizar en otra pieza. -Podríamos simplemente copiarlas y pegarlas al principio de cada archivo, -pero sería bastante molesto. También hace que se queden las definiciones -a la vista dentro de nuestros archivos de música, y yo personalmente encuentro -todos los @code{#()} bastante poco estéticos. Los vamos a esconder dentro de otro archivo: - -@example -%%% guardar esto en un archivo de nombre "definiciones.ly" -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) -@end example - -Ahora modificaremos la música (guardemos este archivo como @file{"musica.ly"}). - -@c We have to do this awkward example/lilypond-non-verbatim -@c because we can't do the \include stuff in the manual. - -@example -\include "definiciones.ly" - -\relative c'' @{ - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Eso tiene mejor aspecto, pero haremos algunos cambios más. El glissando es difícil -de ver, así que lo haremos más grueso y lo acercaremos a las cabezas de las notas. Pondremos -la indicación metronómica encima de la clave, en lugar de ir encima de la primera -nota. Y por último, mi profesor de composición odia las indicaciones de compás @q{C}, -así que la convertiremos en @q{4/4}. - -Sin embargo, no debe cambiar el archivo @file{musica.ly}. Sustituya nuestro archivo @file{definiciones.ly} -con éste: - -@example -%%% definiciones.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - \override TimeSignature #'style = #'numbered - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Staff - \override TimeSignature #'style = #'numbered - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -¡Eso tiene un aspecto mucho mejor! Ahora suponga que quiere publicar esta -pieza. A mi profesor de composición no le gustan las indicaciones de compás @q{C}, -pero yo les tengo cierto cariño. Copiaremos el archivo -actual @file{definiciones.ly} a @file{publicar-web.ly} y modificaremos -éste. Como el propósito de esta música es producir un PDF que va a mostrarse -en la pantalla, también vamos a aumentar el -tamaño general de la salida. - -@example -%%% definiciones.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -#(set-global-staff-size 23) -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -#(set-global-staff-size 23) -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Ahora, en la música, simplemente sustituyo -@code{\include "definiciones.ly"} por -@code{\include "publicar-web.ly"}. Por supuesto, podríamos hacer esto aún más -práctico. Podríamos hacer un archivo @file{definiciones.ly} que contuviera -solamente las definiciones de @code{mpdolce} y @code{tempoMark}, un archivo -@file{web-publish.ly} que contuviera solamente la sección @code{\layout} -que se mostró en el ejemplo, y un archivo @file{universidad.ly} que contendría -solamente los trucos para producir la salida que le gusta a mi -profesor. La parte más alta de @file{musica.ly} tendría entonces este aspecto: - -@example -\include "definiciones.ly" - -%%% ¡Quitar el comentario de una sola de estas líneas! -\include "publicar-web.ly" -%\include "universidad.ly" -@end example - -Este enfoque puede ser útil incluso si va a producir sólo un conjunto de particellas. -Yo utilizo media docena de archivos de -@q{hojas de estilo} para mis proyectos. Comienzo todos los archivos de música con -@code{\include "../global.ly"}, que contiene - -@example -%%% global.ly -\version @w{"@version{}"} -#(ly:set-option 'point-and-click #f) -\include "../iniciar/iniciar-definiciones.ly" -\include "../iniciar/iniciar-disposicion.ly" -\include "../iniciar/iniciar-cabeceras.ly" -\include "../iniciar/iniciar-papel.ly" -@end example - - -@node When things don't work -@section When things don't work - -@menu -* Updating old files:: -* Troubleshooting (taking it all apart):: -* Minimal examples:: -@end menu - -@node Updating old files -@subsection Updating old files - -La sintaxis de la entrada de LilyPond cambia de manera ocasional. A medida que el propio -LilyPond mejora, la sintaxis (el lenguaje de la entrada) se modifica en consonancia. A -veces estos cambios se hacen para conseguir que la entrada sea más fácil de leer y escribir, y -otras veces estos cambios son para dar cabida a nuevas funcionalidades de LilyPond. - -LilyPond lleva incorporado un archivo que facilita esta actualización: -@code{convert-ly}. Para ver detalles sobre cómo ejecutar este programa, consulte -@rprogram{Updating files with convert-ly}. - -Desgraciadamente @code{convert-ly} no puede tratar todos los cambios en la entrada. -Se ocupa de los cambios sencillos de búsqueda y sustitución (como @code{raggedright} -que se convierte en @code{ragged-right}), pero algunos cambios son demasiado -complicados. Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar -se relacionan en @rprogram{Updating files with convert-ly}. - -Por ejemplo, en la versión 2.4 y anteriores de LilyPond, -los acentos y las letras no inglesas se introducían utilizando -LaTeX: por ejemplo, @code{No\"el} (que significa @q{Navidad} en francés). -En LilyPond 2.6 y siguientes, el carácter especial @code{ë} -debe introducirse directamente en el archivo de LilyPond como un carácter UTF-8. -@code{convert-ly} no puede cambiar todos los caracteres especiales -de LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente -sus archivos de LilyPond antiguos. - - -@node Troubleshooting (taking it all apart) -@subsection Troubleshooting (taking it all apart) - -Antes o después escribirá un archivo que LilyPond no podrá compilar. -Los mensajes que LilyPond proporciona pueden ayudarle a encontrar el -error, pero en muchos casos tendrá que llevar a cabo algún tipo de -investigación para determinar el origen del problema. - -Las herramientas más poderosas para este cometido son el -comentario de una sola línea (indicado por @code{%}) y el comentario de bloque -(indicado por @code{%@{ ... %@}}). Si no sabe dónde está -el problema, comience convirtiendo grandes secciones del -archivo de entrada en un comentario. Después de eliminar una -sección convirtiéndola en un comentario, pruebe a compilar el -archivo otra vez. Si funciona, entonces el problema debía estar -en la porción que había eliminado. Si no funciona, continúe eliminando material -(transformándolo en comentarios) hasta que tenga algo que funcione. - -En un caso extremo podría terminar con sólo - -@example -\score @{ - << - % \melodia - % \armonia - % \bajo - >> - \layout@{@} -@} -@end example - -@noindent -(en otras palabras: un archivo sin música) - -Si ocurre esto, no abandone. Descomente un trozo pequeño -- digamos -la parte del bajo -- y observe si funciona. Si no es así, -transforme en comentarios toda la música del bajo (pero deje el -@code{\bajo} de la sección @code{\score} no comentado. - -@example -bajo = \relative c' @{ -%@{ - c4 c c c - d d d d -%@} -@} -@end example - -Ahora empiece poco a poco descomentando cada vez más fracciones de la -parte del @code{bajo} hasta que encuentre la línea del problema. - -Otra técnica de depuración muy útil es la construcción de -@ref{Minimal examples}. - - -@node Minimal examples -@subsection Minimal examples - -Un ejemplo mínimo es un ejemplo tan pequeño como sea posible. Estos -ejemplos son mucho más fáciles de comprender que los ejemplos largos. Los ejemplos -mínimos se utilizan para - -@itemize -@item Informes de fallo -@item Solicitudes de ayuda a las listas de correo -@item Añadir ejemplos al @uref{http://lsr@/.dsi@/.unimi@/.it/,Repositorio de Fragmentos de Código de LilyPond} -@end itemize - - -Para construir un ejemplo que sea lo más pequeño posible, la regla es -bastante simple: quite todo lo que no sea necesario. Al tratar de -quitar partes innecesarias de un archivo, es una buena idea convertir líneas en -comentarios en vez de borrarlas. De esta forma, si descubre que en realidad -sí @emph{necesitaba} algunas de estas líneas, podrá descomentarlas y no tendrá que -teclearlas de nuevo partiendo de cero. - -Existen dos excepciones a la regla del @qq{lo más pequeño posible}: - -@itemize -@item Incluya el número de @code{\version}. -@item Si puede, ponga @code{\paper@{ ragged-right=##t @}} al principio del ejemplo. -@end itemize - - -En resumen, el objetivo de un ejemplo mínimo es que sea fácil de leer: - -@itemize -@item Evite usar notas, tonalidades o compases demasiado complicados, a no ser que quiera -demostrar algo sobre el comportamiento de estos elementos precisamente. -@item No use instrucciones @code{\override} a no ser que ése sea el propósito -del ejemplo. -@end itemize - - -@node Scores and parts -@section Scores and parts - -En música orquestal, todas las notas se imprimen dos veces. Una vez -en las particellas para los músicos, y otra para la partitura del director. -Los identificadores se pueden usar para evitar la duplicación del trabajo. -La música se escribe una vez y se almacena en una variable. -El contenido de dicha variable se usa después para generar tanto la particella como la partitura del director. - -Es muy conveniente definir las notas en un archivo especial. Por -ejemplo, supongamos que el archivo @file{trompa.ly} contiene la -siguiente parte de un dúo para trompa y fagot: - -@example -notasTrompa = \relative c @{ - \time 2/4 - r4 f8 a cis4 f e d -@} -@end example - -@noindent -Luego se hace una particella escribiendo en un archivo lo siguiente - -@example -\include "trompa.ly" -\header @{ - instrument = "Trompa en Fa" -@} - -@{ - \transpose f c' \notasTrompa -@} -@end example - -La línea - -@example -\include "trompa.ly" -@end example - -@noindent -sustituye el contenido de @file{trompa.ly} en esta posición dentro del -archivo, así que @code{notasTrompa} se define con posterioridad. La -instrucción @code{\transpose f@tie{}c'} indica que el argumento -constituido por @code{\notasTrompa} se debe transponer una quinta -hacia arriba. Lo que suena como @code{f} se escribe como @code{c'}, -lo que corresponde con el tono de afinación de una trompa normal -en@tie{}Fa. La transposición se puede ver en la siguiente salida - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - r4 f8 a cis4 f e d -} -@end lilypond - -En piezas para conjunto, con frecuencia una de las voces no suena durante muchos compases. -Esto queda denotado por un silencio especial, el silencio multicompás. -Se introduce con una @code{R} mayúscula seguida de una duración -(@code{1}@tie{}en el caso de la redonda, @code{2}@tie{}en el caso de una blanca, -etc.). Multiplicando la duración se pueden construir -silencios más largos. Por ejemplo, este silencio ocupa -3@tie{}compases de 2/4 - -@example -R2*3 -@end example - -Cuando se imprime la particella tienen que comprimirse los silencios -multicompás. Esto se hace estableciendo una variable en tiempo de ejecución - -@example -\set Score.skipBars = ##t -@end example - -@noindent -Esta instrucción establece el valor de la propiedad @code{skipBars} en el -contexto de @code{Score} a verdadero (@code{##t}). Anteponiendo el silencio y -esta opción a la música anterior, llegamos al siguiente resultado - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - \set Score.skipBars = ##t - R2*3 - r4 f8 a cis4 f e d -} -@end lilypond - - -Esta partitura se hace combinando toda la música junta. Suponiendo -que la otra voz se encuentra dentro de @code{notasFagot} en el archivo -@file{fagot.ly}, la partitura se hace con - -@example -\include "fagot.ly" -\include "trompa.ly" - -<< - \new Staff \notasTrompa - \new Staff \notasFagot ->> -@end example - -@noindent -lo que nos lleva a - -@lilypond[quote,ragged-right] -\relative c << - \new Staff { - \time 2/4 R2*3 - r4 f8 a cis4 f e d - } - \new Staff { - \clef bass - r4 d,8 f | gis4 c | b bes | - a8 e f4 | g d | gis f - } ->> -@end lilypond diff --git a/Documentation/es/user/world.itely b/Documentation/es/user/world.itely deleted file mode 100644 index 459b5397e6..0000000000 --- a/Documentation/es/user/world.itely +++ /dev/null @@ -1,391 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 41ef91786a08102d9b9a839f6a2f40cec263d723 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node World music -@section World music - -El propósito de esta sección es remarcar los problemas de notación que -son de relevancia a las tradiciones musicales distintas a la -occidental. - -@menu -* Arabic music:: -@end menu - -@node Arabic music -@subsection Arabic music - -Esta sección destaca asuntos relativos a la música árabe. - -@menu -* References for Arabic music:: -* Arabic note names :: -* Arabic key signatures:: -* Arabic time signatures:: -* Arabic music example:: -* Further reading:: -@end menu - - -@node References for Arabic music -@unnumberedsubsubsec References for Arabic music - -@cindex árabe, música -@cindex medios, intervalos -@cindex maqam -@cindex maqams - -La música árabe ha sido principalmente una tradición oral hasta el -momento. Cuando se transcribe la música, se suele hacer en la forma -de un esbozo sobre el que los intérpretes deben improvisar -ampliamente. En una medida creciente, se está adoptando la notación -occidental con ciertas variantes para preservar y transmitir la música -árabe. - -Algunos elementos de la notación musical occidental como la -transcripción de acordes o las particellas independientes, no se -necesitan para tipografiar las piezas árabes, más tradicionales. Sin -embargo hay ciertos problemas, como la necesidad de indicar intervalos -que tienen una medida intermedia entre el semitono y el tono, además -de los intervalos mayores y menores de la música occidental. También -existe la necesidad de agrupar e indicar los numerosos maqams (modos) -que forman parte de la música árabe. - -Por lo general la notación musical árabe no trata de indicar con -precisión los elementos microtonales que se encuentran presentes en la -práctica musical. - -Son de relevancia para la música árabe ciertos asuntos que se -encuentran cubiertos en otras partes del manual: - -@itemize -@item Los nombres de las notas y sus alteraciones (entre ellos, cuartos de -tono) se pueden realizar como se estudia en @ref{Note names in other -languages}. - -@item Las armaduras adicionales también pueden realizarse como se describe -en @ref{Key signature}. - -@item Los compases complejos pueden requerir agrupaciones manuales de las -notas tal y como se describe en @ref{Manual beams}. - -@item Los @notation{takasim} o improvisaciones libres desde el punto de -vista rítmico se pueden escribir omitiendo las barras de compás como -aparece en @ref{Unmetered music}. - -@end itemize - - -@seealso -Referencia de la notación: -@ref{Note names in other languages}, -@ref{Key signature}, -@ref{Manual beams}. - -Fragmentos de código: -@rlsr{World music}. - - -@node Arabic note names -@unnumberedsubsubsec Arabic note names - - -@cindex Arabic note names - -Los nombres árabes tradicionales de las notas pueden llegar a ser -bastante largos y no son adecuados para la escritura musical, y por -ello no se utilizan. Los nombres ingleses de las notas no son muy -familiares dentro de la educación musical árabe, por lo que en su -lugar se utilizan los nombres italo-franco-españoles o del solfeo -(@code{do, re, mi, fa, sol, la, si}). También se pueden utilizar los -modificadores (alteraciones), como se estudia en @ref{Note names in -other languages}. - -Por ejemmplo, así es como puede ser la notación de la escala árabe -@notation{rast}: - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - do re misb fa sol la sisb do sisb la sol fa misb re do -} -@end lilypond - - -@cindex Arabic semi-flat symbol -@cindex Semi-flat symbol appearance - -El símbolo del semi-bemol no coincide con el símbolo que se utiliza en -la notación árabe. Se puede usar el símbolo @code{\dwn} definido en -@code{arabic.ly} precediendo a un bemol como vía alternativa si es -importante usar el símbolo árabe específico del semi-bemol. El -aspecto del síimbolo del semi-bemol dentro de la armadura no se puede -alterar mediante este método. - - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - \set Staff.extraNatural = ##f - dod dob dosd \dwn dob dobsb dodsd do do -} -@end lilypond - - -@seealso -Referencia de la notación: -@ref{Note names in other languages}. - -Fragmentos de código: -@rlsr{World music}. - - -@node Arabic key signatures -@unnumberedsubsubsec Arabic key signatures - -@cindex Arabic key signatures - -Además de las armaduras de tonalidad mayores y menores, están -definidas en @code{arabic.ly} las siguientes tonalidades: -@notation{bayati}, @notation{rast}, @notation{sikah}, @notation{iraq} -y @notation{kurd}. Estas armaduras de tonalidad definen una pequeña -cantidad de grupos de maqam, en contraste con los numerosos maqams que -son de uso común. - -En general, un maqam usa la armadura de su grupo o la de un grupo -vecino, y las alteraciones que difieren se van marcando a lo largo de -la música. - -Por ejemplo, para indicar la armadura de una pieza en el maqam -muhayer: - -@example -\key re \bayati -@end example - -Aquí, @var{re} es la altura predeterminada del maqam muhayer, y -@var{bayati} es el nombre del maqam básico dentro del grupo. - -Al tiempo que la armadura indica el grupo, el título suele indicar el -maqam específico, y así en este ejemplo el nombra del maqam muhayer -debe aparecer en el título. - -Se pueden indicar de la misma forma otros maqams dentro del mismo -grupo bayati, como aparece en la tabla a continuación: bayati, -hussaini, saba y ushaq. Todos ellos son variantes del maqam básico y -más común dentro del grupo, que es bayati. Normalmente se diferencian -del maqam básico en su tectacordo superior, o en ciertos detalles de -discurso que no cambian su naturaleza fundamental como parientes. - -El otro maqam del grupo (Nawa) se relaciona con el bayati a través de -una modulación que se indica en la tabla entre paréntesis para -aquellos maqams que son modulaciones de su maqam básico. Los maqams -árabes admiten sólo modulaciones limitadas, a causa de la naturaleza -de los instrumentos musicales árabes. El Nawa se puede indicar de la -siguiente forma: - -@example -\key sol \bayati -@end example - -En la música árabe, el mismo término que se utiliza para indicar un -grupo de maqam, como bayati, es también un maqam que normalmente es el -más importante del grupo, y podemos verlo como el maqam básico. - -A continuación presentamos una posibilidad de agrupación que asigna -los maqams más comunes a armaduras de tonalidad: - -@multitable @columnfractions 0.1 0.1 0.1 0.6 -@headitem grupo de maqam - @tab tono - @tab final - @tab otros maqams del grupo (final) -@item ajam - @tab major - @tab sib - @tab jaharka (fa) -@item bayati - @tab bayati - @tab re - @tab hussaini, muhayer, saba, ushaq, nawa (sol) -@item hijaz - @tab kurd - @tab re - @tab shahnaz, shad arban (sol), hijazkar (do) -@item iraq - @tab iraq - @tab sisb - @tab - -@item kurd - @tab kurd - @tab re - @tab hijazkar kurd (do) -@item nahawand - @tab minor - @tab do - @tab busalik (re), farah faza (sol) -@item nakriz - @tab minor - @tab do - @tab nawa athar, hisar (re) -@item rast - @tab rast - @tab do - @tab mahur, yakah (sol) -@item sikah - @tab sikah - @tab misb - @tab huzam -@end multitable - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - - -@seealso -Referencia de la notación: -@ref{Key signature}. - -Manual de aprendizaje: -@rlearning{Accidentals and key signatures}. - -Referencia de funcionamiento interno: -@rinternals{KeySignature}. - -Fragmentos de código: -@rlsr{World music}, -@rlsr{Pitches}. - - -@node Arabic time signatures -@unnumberedsubsubsec Arabic time signatures - -@cindex árabes, armaduras -@cindex Semai, forma -@cindex taqasim - -Ciertas formas clásicas de música árabe y turca como el -@notation{Semai} utilizan compases poco comunes como el 10/8. Ello -puede derivar en una agrupación automática de las notas muy distinta a -la de las partituras impresas existentes, donde las notas pueden no -estar agrupadas sobre el pulso, sino de una forma difícil de emular -ajustando el barrado automático. Este comportamiento se puede -sobreescribir desactivando el barrado automático e indicándolo -manualmente. Cuando no es problema la coincidencia con partituras -impresas existentes, aún podemos ajustar el comportamiento del barrado -y/o utilizar compases compuestos. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{compound-time-signatures.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{arabic-improvisation.ly} - - -@seealso -Referencia de la notación: -@ref{Manual beams}, -@ref{Automatic beams}, -@ref{Unmetered music}, -@ref{Automatic accidentals}, -@ref{Setting automatic beam behavior}, -@ref{Time signature}. - -Fragmentos de código: -@rlsr{World music}. - - -@node Arabic music example -@unnumberedsubsubsec Arabic music example - -@cindex árabe, ejemplo de música -@cindex árabe, plantilla de música -@cindex plantilla música árabe - -A continuación aparece una plantilla que emplea también el comienzo de -un Semai turco muy común en la educación musical árabe con el objeto -de ilustrar algunas de las peculiaridades de la notación árabe, como -los intervalos intermedios y los modos poco usuales que tratamos en -esta sección. - -@lilypond[quote,verbatim] -\include "arabic.ly" -\score { - \relative re' { - \set Staff.extraNatural = ##f - \set Staff.autoBeaming = ##f - \key re \bayati - \time 10/8 - - re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 - re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb - fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb - do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 - } - \header { - title = "Semai Muhayer" - composer = "Jamil Bek" - } -} -@end lilypond - - -@seealso -Fragmentos de código: -@rlsr{World music} - - -@node Further reading -@unnumberedsubsubsec Further reading - -@enumerate - -@item -The music of the Arabs, de Habib Hassan Touma [Amadeus Press, 1996], -contiene un tratado de los maqams y sus formas de agrupación. - -También existen varios sitios web que explican los maqams, y algunos -de ellos ofrecen ejemplos de audio, como: - -@itemize @bullet -@item -@uref{http://www.maqamworld.com/} -@item -@uref{http://www.turath.org/} -@end itemize - -Existen ciertas variantes en los detalles sobre la forma en que se -agrupan los maqams, a pesar del relativo acuerdo existente acerca de -los criterios de agrupación de maqams en función de los tetracordos -inferiores comunes, o por medio de la modulación. - -@item -No es completamente consistente, incluso a veces dentro del mismo -texto, la forma en que se deben especificar las armaduras para los -maqams concretos. Sin embargo, es usual utilizar una armadura por -grupo, más que una armadura distinta para cada maqam concreto. - -Varios métodos de los siguientes autores contienen ejemplos de -composiciones turcas y árabes, principalmente. - -@itemize @bullet -@item -Charbel Rouhana -@item -George Farah -@item -Ibrahim Ali Darwish Al-masri -@end itemize -@end enumerate diff --git a/Documentation/es/web.texi b/Documentation/es/web.texi new file mode 100644 index 0000000000..6759fdb1ad --- /dev/null +++ b/Documentation/es/web.texi @@ -0,0 +1,321 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 18e1018ce7446f2cb86990c31f112f6cf05ca371 + + 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 + +@setfilename web.info +@settitle LilyPond: notación musical para todos +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 by the authors. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Spanish +@end ignore + +@c Translators: Francisco Vila + +@copying +Copyright @copyright{} 2009--2011 por los autores. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +This file documents the LilyPond website. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@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: el tipografiador de música +@direntry +* Manual de aprendizaje de LilyPond: (lilypond-learning). Comience por aquí. +* Glosario musical: (music-glossary). Para usuarios de habla no inglesa. +* LilyPond: (lilypond-notation). Referencia de la notación con LilyPond. +* Fragmentos de código de LilyPond: (lilypond-snippets). Consejos, trucos y ejemplos cortos. +* Referencia de funcionamiento interno: (lilypond-internals). Definiciones para la construcción de trucos. +* Utilización del programa: (lilypond-usage). Instalación y ejecución de las aplicaciones. +* Página web: (lilypond-web). Vista previa de la nueva página. +* lilypond: (lilypond-usage)Ejecutar LilyPond. Invocar el programa LilyPond. +* abc2ly: (lilypond-usage)Invocación de abc2ly. Importación de ABC. +* convert-ly: (lilypond-usage)Actualización de archivos mediante convert-ly. Versiones antiguas de LilyPond. +* etf2ly: (lilypond-usage)Invocar etf2ly. Importación de Finale. +* lilypond-book: (lilypond-usage)LilyPond-book. Intergrar texto y música. +* midi2ly: (lilypond-usage)Invocar midi2ly. Importación de MIDI. +* musicxml2ly: (lilypond-usage)Invocar musicxml2ly. Importación de MusicXML. +@end direntry + + +@c TITLE PAGE +@ifnottex +@node Top +@top LilyPond... notación musical para todos +@translationof Top +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle El tipografiador de música +@titlefont{Información general} +@author El equipo de desarrollo de LilyPond + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +Para LilyPond versión @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... notación musical para todos +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading ¿Qué es LilyPond? + +LilyPond es un programa de grabado musical +(tipografía musical o edición de partituras), +consagrado a la producción de partituras de la +calidad más alta posible. Lleva la estética +de la música tipografiada de la forma tradicional +a las partituras impresas mediante ordenador. +LilyPond es software libre y forma parte del +@uref{http://gnu.org,Proyecto GNU}. + + +@divClass{align-right} +¡Puede leer más en nuestra @ref{Introducción}! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Noticias antiguas}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} + +@subheading Enlaces rápidos + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Estable + +@ref{Descarga, Descarga de @versionStable} + +@ref{Manuales, Manuales de @versionStable} + +@subsubheading Desarrollo + +@ref{Desarrollo, Descarga de @versionDevel} + +@ref{Desarrollo, Manuales de @versionDevel} + +@divEnd +@end ifset + +@ifnottex + +@divClass{hide} +@menu +* Introducción:: Empiece aquí a crear partituras musicales. +* Descarga:: Obtener LilyPond. +* Manuales:: Léase los dichosos manuales (RTFM). +* Comunidad:: Póngase en contacto con otros usuarios. +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@end ignore + +@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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Léalo + + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (HTML seccionado)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (HTML monolítico)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.es.pdf, \base\.es.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + el manual está dividido en muchas páginas HTML. + @*@ @ @emph{(una descarga pequeña por cada página)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + lea este manual como una sola página HTML enorme. + @*@ @ @emph{(una sola descarga grande, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + descárguelo como un archivo en formato PDF. + @*@ @ @emph{(una sola descarga grande, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +Si tiene conocimiento de cualesquiera otros \topic\ que merezcan +aparecer relacionados aquí, +le rogamos que nos lo haga saber siguiendo las instrucciones +que hay en @ref{Informes de fallos}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/es/web/GNUmakefile b/Documentation/es/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/es/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/es/web/community.itexi b/Documentation/es/web/community.itexi new file mode 100644 index 0000000000..277c7b536f --- /dev/null +++ b/Documentation/es/web/community.itexi @@ -0,0 +1,862 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: b1eca8bedcef213d00b5ce85d0c4df8c338c2bb2 + + 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 + +@include included/authors.itexi +@include included/helpus.itexi + +@node Comunidad +@unnumbered Comunidad +@translationof Community + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Interactuar con la comunidad + +@itemize + +@item +@ref{Contacto}: obtener ayuda, charlar y ¡mantenerse en contacto! + +@item +@ref{Ejemplos mínimos}: son @emph{muy} recomendables cuando se habla +de LilyPond. + +@item +@ref{Informes de fallos}: algo ha ido mal. + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading Mejorar LilyPond + +@itemize + +@item +@ref{Preste su ayuda}: se solicita su colaboración. + +@item +@ref{Desarrollo}: para colaboradores y pilotos de prueba. + +@item +@ref{Autores}: las personas que han hecho a LilyPond lo que hoy es. + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading Miscelánea + +@itemize + +@item +@ref{Publicaciones}: qué hemos escrito, y qué han escrito sobre nosotros. + +@item +@ref{Noticias antiguas}: el archivo. + +@end itemize +@divEnd + +@divEnd + +@divClass{hide} +@menu +* Contacto:: +* Ejemplos mínimos:: +* Informes de fallos:: +* Preste su ayuda:: +* Desarrollo:: +* Autores:: +* Publicaciones:: +* Noticias antiguas:: +@end menu +@divEnd + + +@node Contacto +@unnumberedsec Contacto +@translationof Contact + +@divClass{column-left-bottom} +@subheading Discusión y ayuda entre usuarios + +@subsubheading Lista de distribución de usuarios: @code{lilypond-user@@gnu.org} + +Esta lista de distribución de correo (en inglés) es el lugar principal +que tienen los usuarios para discutir y prestarse mutua ayuda. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user, +suscripción e información sobre lilypond-user} + +@uref{http://lists.gnu.org/archive/html/lilypond-user/, +archivo 1 de la lista de usuarios} +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +archivo 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +archivo 3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +escribir a la lista lilypond-user a través de gmane} +@end quotation + +@warning{Al formular preguntas, por favor, ¡utilice @ref{Ejemplos mínimos}!} + +@subsubheading El Repositorio de Fragmentos de Código de LilyPond + +El Repositorio de Fragmentos de Código de LilyPond es una gran +colección de ejemplos remitidos por los usuarios, que se pueden copiar +y usar libremente en sus propias obras. ¡Vea las cosas que otros han +escrito, y añada las suyas propias! + +@example +@uref{http://lsr.dsi.unimi.it} +@end example + +Los ejemplos del LSR que son especialmente instructivos se incluyen en +nuestra documentación oficial, en @ref{Fragmentos}. + +@subsubheading IRC + +Existe un cierto grado de apoyo a través de nuestro canal de IRC, + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +Este canal no tiene unos archivos públicos, por lo que cualquier +cuestión que pudiera ser de utilidad para los demás debiera +preferentemente enviarse a una de las listas de correo. + +@html +
nombre de IRC: + + + + +
+ + +@end html + +@subsubheading Otros idiomas + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-es, +lista de correo en español} + +@uref{http://www.lilypondforum.de/, +foro alemán} + +@uref{http://groups.google.com/group/lilypond-brasil, +grupo de portugués} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +lista de correo en francés} + +@uref{http://www.lilypondforum.nl/, +foro de holandés} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Esté siempre informado + +@subsubheading LilyPond Report (el Informe LilyPond) + +La manera más fácil de estar en contacto es leer el boletín de nuestra +comunidad, el Informe LilyPond: + +@example +@uref{http://news.lilynet.net} +@end example + +@subsubheading Lista de correo de lanzamientos: @code{info-lilypond@@gnu.org} + +Esta lista de distribución de correo es una lista de sólo lectura y +bajo tráfico, que envía notificaciones de los últimos lanzamientos. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +suscripción e información sobre info-lilypond} + +@uref{http://lists.gnu.org/archive/html/info-lilypond/, +archivo 1 de la lista info} +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +archivo 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +archivo 3} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading Discusión entre desarrolladores + +@subsubheading La lista de distribución de desarrolladores: @code{lilypond-devel@@gnu.org} + +Casi toda la discusión entre desarrolladores tiene lugar en esta +lista. Los parches se deben enviar aquí. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel, +subscripción e información sobre lilypond-devel} + +@uref{http://lists.gnu.org/archive/html/lilypond-devel/, +archivo 1 de la lista devel} +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +archivo 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +archivo 3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +escribir a la lista lilypond-devel a través de gmane} +@end quotation + + +@subsubheading Lista de fallos: @code{bug-lilypond@@gnu.org} + +La discusión específica sobre fallos se produce aquí. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond, +subscripción e información sobre bug-lilypond} + +@uref{http://lists.gnu.org/archive/html/bug-lilypond/, +archivo 1 de la lista bug} +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +archivo 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +archivo 3} + +@c don't include gmane posting here. -gp +@end quotation + +@warning{Antes de enviar un mensaje a la lista de fallos, lea nuestras +indicaciones para elaborar @ref{Informes de fallos}.} + +@divEnd + + + +@node Ejemplos mínimos +@unnumberedsec Ejemplos mínimos +@translationof Tiny examples + +@divClass{column-center-top} +@subheading ¿Qué son los @qq{ejemplos mínimos}? + +Un ejemplo mínimo es un ejemplo del que no se puede eliminar nada. +@divEnd + +@divClass{column-left-bottom} +@subheading ¿Por qué crearlos? + +@divClass{keep-bullets} +@itemize + +@item +Cuanto más simple es el ejemplo, más rápidamente pueden los +desarrolladores entenderlo y ayudarle. + +@item +Un ejemplo simple demuestra que se ha esforzado en resolver el +problema por sí mismo. Cuando alguien envía bloques grandes de código +de entrada, da la impresión de que no le importa que le ayudemos o que +no. + +@item +La creación de un ejemplo mínimo le fuerza a entender lo que está +ocurriendo. Muchos informes falsos de problemas se podrían evitar +intentando crear un ejemplo mínimo; si no puede reproducir un @qq{bug} +en un ejemplo mínimo, probablemente el problema era una comprensión +insuficiente sobre LilyPond, ¡no un verdadero bug! + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading ¿Cómo los hago? + +@divClass{keep-bullets} +@itemize + +@item +Incluya el número de versión en una instrucción @code{\version}. + +@item +¡Hágalo muy pequeño! Los ejemplos relacionados con el espaciado o la +disposición de las páginas pueden requerir muchos compases, pero casi +todos los problemas se pueden reproducir mediante un solo compás. + +@item +Cuando trate de crear un ejemplo, pruebe a convertir en comentarios +@w{(@code{%} ó @code{%@{ @dots{} %@}})} distintas secciones del +archivo. Si puede convertir un bloque en un comentario y aún mostrar +la idea principal, entonces ¡elimine ese bloque! + +@item +Evite la utilización de notas, tonalidades o compases muy complicados, +a no ser que el bug esté relacionado con el comportamiento de esos +elementos. + +@item +No utilice instrucciones @code{\override} ni @code{\set} a no ser que +el bug se refiera a esas instrucciones en particular. + +@end itemize +@divEnd + +@divEnd + + + + +@node Informes de fallos +@unnumberedsec Informes de fallos +@translationof Bug reports + +@divClass{column-center-top} +@subheading Paso 1: fallos conocidos + +Si tiene un código de entrada que produce una terminación abrupta o +una salida defectuosa, eso es un bug. Hay una lista de los fallos en +vigor en nuestro sistema de seguimiento de fallos, + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{Le rogamos que @strong{NO} añada informes de fallos +directamente al sistema de seguimiento. Una vez que un problema se ha +añadido al sistema, ya puede añadir libremente más información a ese +informe.} + +@divEnd + + +@divClass{column-left-bottom} +@subheading Paso 2: creación de un informe de fallo + +Si ha descubierto un fallo que no está en la lista, ayúdenos +elaborando un informe de fallo. + +@warning{Sólo aceptamos informes de fallos en forma de @ref{Ejemplos +mínimos}. Disponemos de recursos muy limitados para tratar los +informes de fallos, por lo que cualquier ejemplo que no sea mínimo va +a ser rechazado. ¡Casi todos los bugs se pueden demostrar con cuatro +notas o menos!} + +He aquí un ejemplo de un buen informe de fallo: + +@example +% Accidentals should be printed for only +% the first note in a tie, but this version +% prints flats on both notes. +\version "2.10.1" + +\relative c'' @{ + bes1 ~ + bes1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading Paso 3: enviar el informe de fallo + +Una vez que ha verificado que el problema no es conocido ya, y ha +creado el informe, ¡puede enviárnoslo! + +@divClass{keep-bullets} +@itemize + +@item +Si está suscrito a la lista de correo +@uref{mailto:bug-lilypond@@gnu.org,bug-lilypond@@gnu.org}, +envíe un mensaje de la forma habitual. + +@item +Si no está suscrito, aún puede enviar un informe de fallo con el +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +interfaz web de gmane para lilypond.bugs}. + +Sin embargo, existe una comprobación muy estricta de que no hay +@qq{top-posting} (contestar por encima) en el interfaz de gmane, que se +dispara incorrectamente con frecuencia a causa de los archivos de lilypond. +Para evitarlo, escriba: + +@example +> I'm not top posting. +@end example + +@noindent +(@emph{debe} escribir el ángulo @code{>} ) al principio de su informe. + +@end itemize +@divEnd +@divEnd + +@divClass{column-center-bottom} +@subheading Paso 4: Esperar respuesta + +Una vez que su fallo se ha enviado a la lista, nuestro Escuadrón de +Fallos examinará el informe. Déles un tiempo de unas 24 horas, pues +disponemos de un número limitado de voluntarios para esta tarea. +Puede que le pidan más información, o que añadan el informe al sistema +de seguimiento y le comuniquen qué número se ha asignado al problema. + +Puede marcar el bug de forma que reciba mensajes automáticamente +cuando se produce cualquier actividad sobre él. Ello requiere que +usted disponga de una cuenta en Google. +@divEnd + +@divClass{column-center-bottom} +@subheading Ayuda opcional: mostrar el resultado deseado + +Una vez que el problema se ha añadido al sistema de seguimiento, +puede ser de mucha ayuda que veamos la salida deseada. +¡Con toda libertad añada código de entrada y/o imágenes +(creadas posiblemente con otras herramientas) +que muestren el aspecto que usted cree que debe tener! + +@divEnd + + +@node Preste su ayuda +@unnumberedsec Preste su ayuda +@translationof Help us + +@divClass{column-center-top} +@helpusNeed + +@divEnd + +@divClass{column-left-top} +@divClass{keep-bullets} +@helpusTasks + +@divEnd +@divEnd + +@divClass{column-right-top} +@helpusProjects + +@divEnd + + +@node Desarrollo +@unnumberedsec Desarrollo +@translationof Development + +@divClass{heading-center} +@ifclear web_version + @heading Materiales de desarrollo para LilyPond @version +@end ifclear +@ifset web_version + @heading Materiales de desarrollo para LilyPond @versionDevel +@end ifset + + +@c we normally don't allow named references, but in this case +@c it's good to emphasize the "stable" part. -gp +@warning{Éstas son las versiones @emph{inestables de desarrollo}. Si +tiene la más ligera duda acerca de cómo usar o instalar LilyPond, le +conminamos a que utilice la @ref{Descarga, descarga estable}, +y lea los @ref{Manuales, manuales estables}.} + +@divEnd + +@divClass{column-center-top} +@subheading Números de versión + +Existen dos conjuntos de lanzamientos para LilyPond: lanzamientos +estables, y lanzamientos inestables de desarrollo. Las versiones +estables tienen un número de versión @q{menor} par (p.ej., 2.8, 2.10, +2.12). Las versiones de desarrollo tienen un número @q{menor} de +versión impar (p.ej., 2.7, 2.9, 2.11). + +@divEnd + + +@divClass{column-left-top} +@subheading Descarga + +Las instrucciones de Git y para la compilación están en la Guía del +Colaborador. + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, Repositorio Git de lilypond} +@end quotation + +En general, los redactores de la documentación y los pilotos de +pruebas querrán descargar el último archivo binario: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource-es + +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Guía del colaborador + +El desarrollo de LilyPond es un asunto bastante complicado. LilyPond +es un proyecto grande y (más o menos) estable. Para poder ayudar a +los nuevos colaboradores, y para mantener todo el sistema (más o +menos) estable, hemos escrito un manual para los colaboradores. + +@docLinksBare{Guía del colaborador, contributor, + @rcontribnamed{Top,Guía del colaborador}, + @manualDevelContributorSplit, + @manualDevelContributorBig, 500 kB, + @manualDevelContributorPdf, 2.8 MB} + +@divEnd + + +@divClass{column-center-top} +@subheading Pruebas de regresión + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@item @uref{../../input/regression/collated-files.html, Pruebas de regresión}: +Pruebas del lanzamiento actual. +(@uref{../../input/regression/collated-files.pdf, versión PDF}) + +@item +@uref{../../input/regression/musicxml/collated-files.html, Pruebas de regresión de MusicXML}: +las pruebas de MusicXML de la versión actual. +(@uref{../input/regression/musicxml/collated-files.pdf, versión PDF}). + +@item +@uref{../../input/regression/abc2ly/collated-files.html, pruebas de abc2ly}: +Las pruebas de abc2ly de esta versión. +(@uref{../../input/regression/abc2ly/collated-files.pdf, versión en PDF}) + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, pruebas de lilypond-book}: +Las pruebas de lilypond-book de esta versión. +(@uref{../../input/regression/lilypond-book/collated-files.pdf, versión en PDF}) +@end itemize + +@end ifclear + +@ifset web_version +@subsubheading Versión de desarrollo + +@itemize +@item @regtestDevel-es (@regtestDevelPdf-es{}) + +@item @regtestDevelXml-es (@regtestDevelXmlPdf-es{}) + +@item @regtestDevelAbc (@regtestDevelAbcPdf{}) + +@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{}) +@end itemize + +@subsubheading Versión estable + +@itemize +@item @regtestStable (@regtestStablePdf{}) + +@item @regtestStableXml (@regtestStableXmlPdf{}) + +@item @regtestStableAbc (@regtestStableAbcPdf{}) + +@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{}) +@end itemize +@end ifset + + +@subsubheading Todas las versiones + +@itemize +@item @uref{http://lilypond.org/test, Comparaciones entre pruebas de regresión} + +@item @uref{http://lilypond.org/download/binaries/test-output/, +Archivo de todas las pruebas de regresión} + +@end itemize + +@divEnd +@divEnd + + + +@divClass{column-center-bottom} +@subheading Manuales + +@ifclear web_version +@warning{Estos manuales son para LilyPond @version{}; los manuales más recientes +están en @url{http://lilypond.org}} +@end ifclear + +@divClass{normal-table} +@multitable @columnfractions .3 .3 .3 +@headitem Introducción +@item +@docLinkSplit{Aprendizaje,learning,@manualDevelLearningSplit-es} +@tab +@docLinkBig{Aprendizaje,learning,@manualDevelLearningBig-es} +@tab +@docLinkPdf{Aprendizaje,learning,@manualDevelLearningPdf-es} + +@item +@docLinkSplit{Glosario,music-glossary,@manualDevelGlossarySplit} +@tab +@docLinkBig{Glosario,music-glossary,@manualDevelGlossaryBig} +@tab +@docLinkPdf{Glosario,music-glossary,@manualDevelGlossaryPdf} + +@item +@docLinkSplit{Ensayo,essay,@manualDevelEssaySplit-es} +@tab +@docLinkBig{Ensayo,essay,@manualDevelEssayBig-es} +@tab +@docLinkPdf{Ensayo,essay,@manualDevelEssayPdf-es} + +@headitem Estándar + +@item +@docLinkSplit{Notación,notation,@manualDevelNotationSplit-es} +@tab +@docLinkBig{Notación,notation,@manualDevelNotationBig-es} +@tab +@docLinkPdf{Notación,notation,@manualDevelNotationPdf-es} + +@item +@docLinkSplit{Utilización,usage,@manualDevelUsageSplit-es} +@tab +@docLinkBig{Utilización,usage,@manualDevelUsageBig-es} +@tab +@docLinkPdf{Utilización,usage,@manualDevelUsagePdf-es} + +@item +@docLinkSplit{Fragmentos,snippets,@manualDevelSnippetsSplit} +@tab +@docLinkBig{Fragmentos,snippets,@manualDevelSnippetsBig} +@tab +@docLinkPdf{Fragmentos,snippets,@manualDevelSnippetsPdf} + +@headitem Poco frecuentes + +@item +@docLinkSplit{Web,web,@manualDevelWebSplit-es} +@tab +@docLinkBig{Web,web,@manualDevelWebBig-es} +@tab +@docLinkPdf{Web,web,@manualDevelWebPdf} + +@item +@docLinkSplit{Cambios,changes,@manualDevelChangesSplit} +@tab +@docLinkBig{Cambios,changes,@manualDevelChangesBig} +@tab +@docLinkPdf{Cambios,changes,@manualDevelChangesPdf-es} + +@item +@docLinkSplit{Extensiones,extending,@manualDevelExtendingSplit-es} +@tab +@docLinkBig{Extensiones,extending,@manualDevelExtendingBig-es} +@tab +@docLinkPdf{Extensiones,extending,@manualDevelExtendingPdf-es} + +@item +@docLinkSplit{Funcionamiento interno,internals,@manualDevelInternalsSplit} +@tab +@docLinkBig{Funcionamiento interno,internals,@manualDevelInternalsBig} +@tab +@docLinkPdf{Funcionamiento interno,internals,@manualDevelInternalsPdf} + +@ifset web_version +@headitem Para descargar + +@item +@doctarballDevel-es +@end ifset + +@end multitable + +@divEnd +@divEnd + + + + +@node Autores +@unnumberedsec Autores +@translationof Authors + +@divClass{column-left-top} +@subheading Equipo de desarrollo actual + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Cargos del equipo de desarrollo anterior + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading Colaboradores actuales + +@divClass{keep-bullets} +@subsubheading Programación + +@coreCurrent + +@subsubheading Fuente tipográfica + +@fontCurrent + +@subsubheading Documentación + +@docCurrent + +@subsubheading Bug squad + +@bugsquadCurrent + +@subsubheading Soporte + +@supportCurrent + +@subsubheading Traducción + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Colaboradores anteriores + +@divClass{keep-bullets} +@subsubheading Programación + +@corePrevious + +@subsubheading Fuente tipográfica + +@fontPrevious + +@subsubheading Documentación + +@docPrevious + +@c uncomment when we have any previous members -gp +@c @subsubheading Bug squad + +@c @bugsquadCurrent + +@subsubheading Soporte + +@supportPrevious + +@subsubheading Traducción + +@translationsPrevious + +@divEnd +@divEnd + + + +@node Publicaciones +@unnumberedsec Publicaciones +@translationof Publications + +@divClass{column-center-top} +@subheading Lo que nosotros hemos escrito sobre LilyPond + +@divClass{keep-bullets} + +@include we-wrote.itexi + +@divEnd +@divEnd + +@divClass{column-center-bottom} + +@subheading Lo que otros han hecho con LilyPond + + +@divClass{keep-bullets} + +@include others-did.itexi + +@divEnd +@divEnd + +@contactUsAbout{artículos académicos} + + +@node Noticias antiguas +@unnumberedsec Noticias antiguas +@translationof Old news + +@include web/news-front.itexi + +@include web/news.itexi diff --git a/Documentation/es/web/download.itexi b/Documentation/es/web/download.itexi new file mode 100644 index 0000000000..ec0af5eb7f --- /dev/null +++ b/Documentation/es/web/download.itexi @@ -0,0 +1,619 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: f64b0d88f1c8355e87f37d2e6cacdcf47c959d5a + + 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 + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond es un sistema de grabado musical @strong{basado en +texto}; se parece más a un lenguaje de programación que a un programa +gráfico de edición de partituras. Antes de descargar LilyPond +infórmese sobre nuestra @ref{Entrada de texto}.} +@end macro + +@node Descarga +@unnumbered Descarga +@translationof Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want versionDevel here, since the online links + @c for @version won't be up yet! +@heading Descargas para LilyPond @versionDevel + +@warning{Los enlaces para la versión estable de LilyPond están en +@uref{http://lilypond.org, lilypond.org}} +@end ifclear +@ifset web_version + @heading Descargas para LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Para usuarios + +@itemize + +@item +@c ref is duplicated to avoid underlining ref as image. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux y FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Para desarrolladores + +@itemize + +@item +@ref{Código fuente}: +para mantenedores de paquetes + +@item +@ref{Descargas antiguas}: +versiones anteriores + +@item @ref{Desarrollo}: +última versión de desarrollo + +@end itemize +@divEnd + +@divEnd + +@divClass{column-center-bottom} + +@subheading Licencia del Software + +LilyPond está publicado bajo la +@ref{GPL, Licencia General Pública de GNU}. +@divEnd + + +@divClass{color1} + +@subheading Patrocinadores + +Nuestro agradecimiento a @uref{http://www.vt.edu/, Virginia Tech} y a +@uref{http://www.linuxaudio.org/, linuxaudio.org} por patrocinar +nuestro ancho de banda. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Legalismos + +@divClass{legal} +Se reconoce el copyright y la marca registrada de todos los logotipos +e imágenes de productos. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Código fuente:: +* Descargas antiguas:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading ¿Paquetes genéricos, o paquetes específicos de la distribución? + +Muchas distribuciones incluyen a LilyPond dentro de su sistema normal +de paquetes. Estas versiones son más fáciles de instalar y +desinstalar que los paquetes genéricos, pero pueden ser más antiguas. +Si quiere utilizar nuestros paquetes genéricos, desinstale la versión +oficial de su sistema utilizando el gestor normal de paquetes para su +distribución. Consulte la documentación de su distribución sobre cómo +usar su gestor de paquetes. + +@divEnd + + +@divClass{column-left-top} +@subheading Paquetes genéricos + +@subsubheading Descarga + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version +@downloadStableLinuxNormal +@end ifset + +(si no está seguro, utilice éste) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Instalación + +En la línea de órdenes, escriba: + +@example +cd RUTA-DEL-DIRECTORIO-DE-DESCARGA +sh lilypond-@versionStable{}-SISTEMA-OPERATIVO.sh +@end example + +@subsubheading Desinstalación + +En la línea de órdenes, escriba: + +@example +uninstall-lilypond +@end example + +@divEnd + + + +@divClass{column-right-top} +@subheading Compilación de un archivo + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Paquetes específicos de cada distribución + +Utilice el gestor de paquetes de su distribución para instalar o +actualizar a estas versiones. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.3} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.3} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=lilypond, +openSUSE: LilyPond 2.12.3} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalismos + +@divClass{legal} Se reconoce el copyright y las marcas registradas de +todos los logotipos e imágenes de producto. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X +@translationof MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Paquetes + +@subsubheading Descarga + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Para MacOS X 10.4 o superior sobre +CPU Intel (si no está seguro, utilice éste). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +Para MacOS X 10.4 o superior sobre +CPUs G3 y G4 (ordenadores Apple antiguos). + +@end itemize + +@subsubheading Instalación + +Haga doble clic sobre el archivo descargado. Después, arrástrelo a +donde quiera. + +@subsubheading Desinstalación + +Borre la carpeta LilyPond.app. + +@divEnd + +@divClass{column-right-top} +@subheading Compilar un archivo + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Ejecución desde la línea de órdenes + +@warning{Si está satisfecho con el GUI, ignore estas instrucciones.} + +@subsubheading MacOS X sobre la línea de órdenes + +La forma más práctica de procesar proyectos de lilypond es mediante la +preparación de guiones @qq{de apoyo} hechos por usted mismo. + +@enumerate + +@item +Cree un directorio para guardar estos guiones, + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Cree un archivo llamado @command{lilypond} que contenga + +@divClass{h-scroll-auto} +@example +exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example +@divEnd + +@warning{en general, @var{DIR} será @code{/Applications/}} + + +@item +Cree archivos similares @command{lilypond-book}, @command{convert-ly}, +y cualesquiera otros que vaya a utilizar, sustituyendo la parte +@command{bin/lilypond} con @command{bin/convert-ly} (u otro nombre de +programa). + + +@item +Haga el archivo ejecutable, + +@example +chmod u+x lilypond +@end example + + +@item +Ahora, añada este directorio a su ruta de ejecución. Modifique (o +cree) un archivo llamado @code{.profile} en su directorio principal de +forma que contenga + +@example +export PATH=$PATH:~/bin +@end example + +Este archivo debe terminar en una línea vacía. + +@end enumerate + + +@subsubheading Invocar los guiones individuales + +Los guiones (como @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly} e incluso el propio @command{lilypond}) están +incluidos dentro del archivo @code{.app} para MacOS@tie{}X. + +Los guiones también se pueden lanzar desde la línea de órdenes +mediante su invocación directa: + +@divClass{h-scroll-auto} +@example +@var{ruta/de}/LilyPond.app/Contents/Resources/bin/lilypond +@end example +@divEnd + +Lo mismo vale para el resto de los guiones de ese directorio, como +@command{lilypond-book} y @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalismos + +@divClass{legal} +Se reconoce el copyright y la marca registrada de todos los logotipos +e imágenes de productos. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows +@translationof Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Paquetes + +@subsubheading Descarga + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Para Windows 2000, XP, Vista y Windows 7. + +@end itemize + +@subsubheading Instalación + +@enumerate + +@item +Localice el archivo descargado y haga doble clic sobre él para +arrancar el instalador. Siga las instrucciones que le indica +el instalador; le recomendamos que deje seleccionadas todas +las opciones de instalación y que utilice +la ruta de instalación predeterminada. Pulse sobre el botón +@q{Finalizar} cuando el instalador termine. LilyPond está instalado. + +@end enumerate + +@subsubheading Desinstalación + +Para la desinstalación, elija entre: + +@enumerate + +@item +Localizar el apartado de LilyPond en el menú Inicio y elegir +@q{Uninstall}. Pulse el botón @q{Finish} cuando termine el programa +de desinstalación. + +@item +O bien, desde el Panel de control, busque y seleccione el programa +LilyPond y elija la opción de desinstalar/quitar programa. +Pulse el botón @q{Finish} cuando termine el programa de desinstalación. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Compilar un archivo + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Ejecución desde la línea de órdenes + +@warning{Si le satisface el interfaz gráfico, ignore estas +instrucciones.} + +@subsubheading Windows sobre la línea de órdenes + +La forma más conveniente de ejecutar LilyPond es añadir la carpeta que +contiene los archivos ejecutables del programa a la variable de +entorno @qq{Path}. + + +@enumerate +@item +Abra el apartado @qq{Sistema} en el Panel de Control, elija la pestaña +Avanzado y pulse sobre el botón Variables de Entorno. + +@item +Elija la variable @qq{Path} de la lista de variables de entorno y +pulse el botón Edit. Se le abrirá una ventana con el título +@qq{Editar variable del sistema}; añada al final del @qq{Valor de la +variable} el nombre de la carpeta que contiene los archivos +ejecutables de LilyPond de la siguiente manera: + +@example +[@var{ruta preestablecida}];@var{CARPETA}\LilyPond\usr\bin +@end example + +@warning{@var{CARPETA} será por lo general @code{C:\Archivos de programa}.} + +@noindent +y pulse el botón @qq{Aceptar} para cerrar la ventana. + +@end enumerate + +@subsubheading Invocar archivos ejecutables individuales + +Los archivos ejecutables de LilyPond (como lilypond, lilypond-book, +convert-ly y así sucesivamente) se pueden ejecutar desde la línea de +órdenes, invocándolos: + +@example +lilypond prueba.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalismos + +@divClass{legal} +Se reconoce el copyright y la marca registrada de todos los logotipos +e imágenes de productos. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Código fuente +@unnumberedsec Código fuente +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{@strong{No} recomendamos que intente compilar LilyPond por sí +mismo; casi todas las necesidades del usuario se satisfacen mejor con +la versión precompilada.} + +@divClass{column-left-bottom} +@subheading Tarball del código fuente + +@downloadStableSource-es{} + +Para ver un amplio listado de todas las versiones (antiguas y +modernas), consulte nuestra +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, página +de descarga}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Instrucciones de compilación + +Las instrucciones se encuentran desarrolladas dentro de +@rcontribnamed{Compiling,Compilación de LilyPond}. + +@divEnd + + +@node Descargas antiguas +@unnumberedsec Descargas antiguas +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Todas las versiones + +Para ver un amplio listado con todas las versiones (antiguas y +modernas), consulte nuestra +@uref{http://download.linuxaudio.org/lilypond/binaries/, página de +descarga}. + +@divEnd + + +@node GPL +@unnumberedsec GPL +@translationof GPL + +@divClass{column-center-top} +@subheading Licencia del Software + +GNU LilyPond está publicado bajo la Licencia General Pública de GNU. +Se ofrece una introducción a esta licencia y a nuestros motivos para +haberla elegido, en @ref{Libertad}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Licencia General Pública de GNU + +@include gpl.itexi + +@divEnd diff --git a/Documentation/es/web/introduction.itexi b/Documentation/es/web/introduction.itexi new file mode 100644 index 0000000000..d2e79d4954 --- /dev/null +++ b/Documentation/es/web/introduction.itexi @@ -0,0 +1,1313 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: 346067ab7e42c9cbc359d48b23c79dc0780c8320 + + 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 + +@node Introducción +@unnumbered Introducción +@translationof Introduction + +@divClass{column-center-top} +@subheading Nuestras metas + +@imageFloat{flat-design,png,right} + +LilyPond apareció cuando dos músicos quisieron ir más allá de la +inexpresiva apariencia de la música impresa mediante ordenador. Los +músicos prefieren leer partituras bonitas, así que ¿por qué no iban a +poder los programadores escribir software para producir partituras +elegantes? + +El resultado es un sistema que libera a los músicos de preocuparse por +los detalles de la disposición sobre el papel, lo que les permite +centrarse en la música. LilyPond trabaja codo con codo con ellos para +crear partituras de calidad editorial, realizadas dentro de las +mejores tradiciones del grabado musical clásico. + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Qué hace LilyPond + +@itemize + +@item +@ref{Posibilidades}: ¿Qué puede hacer LilyPond? + +@item +@ref{Ejemplos}: ¡Quiero ver música! + +@item +@ref{Libertad}: LilyPond es Software Libre. + +@item +@ref{Trasfondo}: Nociones de nuestra estética computacional. + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading LilyPond en la práctica + +@itemize + +@item +@ref{Producciones}: Usos de LilyPond en el mundo real. + +@item +@ref{Reseñas}: ¿Qué dice la gente? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading Cómo funciona LilyPond +@itemize + +@item +@ref{Entrada de texto}: ¡¿Escriben música como @emph{texto}?! + +@item +@ref{Entornos mejorados}: Otras formas de trabajar con LilyPond. + +@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 +* Posibilidades:: +* Ejemplos:: +* Libertad:: La libertad y la GPL. +* Trasfondo:: Estética computacional. +* Producciones:: Uso de LilyPond en el mundo real. +* Reseñas:: +* Entrada de texto:: +* Entornos mejorados:: Otras formas de trabajar con LilyPond. +@end menu +@divEnd + + + +@node Posibilidades +@unnumberedsec Posibilidades +@translationof Features +@divClass{column-center-top} + + +@subheading Elegancia +@subsubheading Excelencia en grabado clásico + +@imageFloat{flat-design,png,right} + +LilyPond permite a los músicos producir partituras elegantes que sean +fáciles de leer. Su comunidad de desarrolladores ha empleado miles de +horas en desarrollar un programa de grabado musical que produce como +resultado música impresa de forma hermosa. Todos los ajustes de +estilo de LilyPond, el diseño de las fuentes y los algoritmos se han +inspirado en la mejor música grabada a mano. La salida de LilyPond +tiene el mismo aspecto robusto, equilibrado y elegante que las +partituras clásicas mejor grabadas. Todo esto se explica con detalle +en nuestro @ref{Ensayo}. + + +@subsubheading Opciones de aspecto efectivas + +Pierda menos tiempo en los ajustes de la salida; LilyPond consigue el +formateado más correcto desde el principio. Determina el espaciado +por sí solo y parte las líneas y las páginas de forma que ofrece una +disposición compacta y uniforme. Los choques entre la letra de las +canciones, las notas y los acordes se resuelven, y las ligaduras y las +barras se inclinan ¡automáticamente! + +@divEnd + +@divClass{color2} +@subheading Facilidad de uso + +@imageFloat{lilypond-book,png,right} + +@subsubheading Entrada basada en texto + +LilyPond toma una entrada en texto normal, que podemos elaborar en +nuestro editor de texto de preferencia, de forma rápida y cómoda. La +entrada de texto contiene toda la información, de manera que no hay +necesidad de recordar complejas secuencias de instrucciones: tan sólo +guarde un código de entrada para que sirva como referencia futura. + +@subsubheading Combinar música y texto + +Coloque fragmentos de música dentro de textos sin cortar y pegar +imágenes. Integre música dentro de @LaTeX{} o HTML de forma sencilla, +o añada música a documentos de OpenOffice.org mediante OOoLilyPond. +También hay plugins o complementos disponibles para permitir código de +LilyPond dentro de diversos blogs y wikis, haciendo posible la +colaboración en línea. + + +@subsubheading Accesibilidad + +La entrada basada en texto también hace posible la escritura de +partituras para usuarios con deficiencias físicas. Los usuarios con +alguna dificultad manual que no pueden teclear o manejar un ratón de +ordenador pueden usar software de reconocimiento de voz para editar +los archivos de LilyPond. Incluso las personas totalmente ciegas +pueden usar lectores de pantalla para escribir los archivos de +LilyPond (una tarea imposible en los programas de edición de +partituras basados en gráficos). + +@subsubheading Diseño ampliable + +Todos los ajustes se pueden modificar para que se combinen con su +gusto tipográfico personal. Si eso no es suficiente, siempre nos +queda el lenguaje de guiones Scheme incorporado, un dialecto del +potente lenguaje LISP. Todos los ajustes, variables y funciones están +documentados en el completo manual de referencia del programa. + +@divEnd + +@divClass{color3} + +@subheading Entorno + +@imageFloat{frescobaldi-lilypond-editor-small,png,right} + +@subsubheading Software libre + +¡LilyPond se puede descargar sin coste! Sí: es gratis. Obténgalo de +la página de descarga. + +También es software libre, como la libertad de expresión. Se ofrece +con el código fuente con el permiso para modificarlo y copiarlo. Así +pues, ¿está cansado de algún fallo o suplica una determinada +funcionalidad? tan sólo añádala por sí mismo, o pague a alguien para +que lo haga. + + +@subsubheading Soporte excelente + +LilyPond funciona en todas las plataformas populares: GNU/Linux, MacOS +X y Windows. LilyPond viene con una completa documentación y cientos +de archivos de ejemplo. Existe una activa comunidad de usuarios +dispuesta a responder dudas y cuestiones en la lista de distribución +de correo de usuarios de LilyPond, lilypond-user, mientras que el +equipo de desarrollo se asegura de que los problemas se resuelven con +prontitud. + +@subsubheading Editores mejorados + +Varios desarrolladores que son a su vez usuarios activos de LilyPond, +han escrito herramientas orientadas específicamente a hacer más fácil +y efectivo el proceso de editar archivos de LilyPond. Para ver +algunos ejemplos, consulte @ref{Easier editing}. + +@divEnd +@divClass{column-center-bottom} +@subheading ¿Ahora qué? + +¿Aún no está convencido? Eche un vistazo a algunos @ref{Ejemplos} +concretos. Si ya está decidido a probar LilyPond, en primer lugar +infórmese de nuestra @ref{Entrada de texto}. +@divEnd + + + +@node Ejemplos +@unnumberedsec Ejemplos +@translationof Examples + +LilyPond es una herramienta potente y flexible para tareas de grabado +musical de todo tipo. Explore libremente nuestra galería de ejemplos +e ¡inspírese! + + +@newsItem +@subsubheading Música Clásica + +Esta pieza de órgano de J.S. Bach es un proyecto bastante típico de +grabado con LilyPond. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Notación compleja + +Este ejemplo procedente de las @emph{Goyescas} de Enrique Granados +muestra algunas de las posibilidades más avanzadas de la composición +tipográfica, como las barras en ángulo, plicas de pentagrama cruzado y +líneas de seguimiento de voces. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Música antigua + +LilyPond también contempla distintos tipos de notación antigua, como +este pasaje de canto gregoriano. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Música moderna + +Los compositores contemporáneos encuentran que LilyPond es adecuado +para la impresión de notación inusual. He aquí un extracto de la obra +@emph{Čáry}, de Trevor Bača, para flauta baja sola. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Creación flexible y eficiente de material de interpretación + +Se pueden crear distintos materiales de lectura a partir del mismo +código fuente. He aquí un extracto de la realización de +@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux} de @emph{Giulio +Cesare} de Haendel, en partitura completa, reducción para piano y voz, +y una particella de violín. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Tablatura + +LilyPond contempla la notación de cifra para guitarra, que se puede +personalizar para adaptarla a cualquier instrumento que lea de +tablatura. La pauta de tablatura se genera automáticamente a partir +de las notas que se escriben para el pentagrama normal. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Gráficos de Schenker + +La salida estándar se puede modificar de forma muy profunda. He aquí +un impresionante análisis schenkeriano creado por Kris Schaffer, para +un artículo de la revista +@uref{http://www.linuxjournal.com/article/8364 , Linux Journal}. Se +han añadido algunos colores para mejorar la visibilidad. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Música vocal + +LilyPond es excelente para todo tipo de música vocal, desde himnos de +música sacra hasta óperas. Presentamos a continuación un motete +medieval con unos requisitos ligeramente inusuales. La voz de tenor +está escrita en un compás distinto a las otras pero debe alinearse +como si estuviera en el mismo compás. LilyPond trata esta situación +con suma elegancia. Observe también los incipit con las claves en el +estilo de la edición Vaticana, las plicas barradas que indican notas +repetidas, y los corchetes de ligadura por encima de ciertos grupos de +notas. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Aplicaciones para la educación + +LilyPond está muy indicado también para aplicaciones educativas. He +aquí un ejemplo de un sencillo ejercicio de contrapunto. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Música pop + +Es sencillo crear hojas guía de acordes en cifrado americano para +música pop con melodía, letra, nombres de acordes y diagramas de +posiciones de acorde. En este ejemplo vemos algunos de los diagramas +de posiciones predefinidas, pero se pueden personalizar profundamente +para cumplir con casi cualquier situación. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Proyectos grandes + +LilyPond es excelente para proyectos grandes como óperas u obras para +orquesta sinfónica, también. Además, la entrada basada en texto +proporciona una mayor accesibilidad (este ejemplo ha sido aportado por +Hu Haipeng, un compositor ciego). + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading ¿Ahora qué? + +¿Aún no está convencido? LilyPond es software libre, le concede a +usted, el usuario, la @ref{Libertad}. Si ya está decidido a probar +LilyPond, lea en primer lugar lo que tenemos que decirle sobre la +@ref{Entrada de texto}. +@divEnd + + +@node Libertad +@unnumberedsec Libertad +@translationof Freedom + +@divClass{column-center-top} +@subheading Software libre + +@uref{http://www.gnu.org/, GNU} LilyPond está escrito y mantenido por +una comunidad de entusiastas. Está publicado bajo la @ref{GPL, +Licencia General Pública de GNU} y la @ref{FDL, Licencia de +Documentación Libre de GNU}, dando a todos la libertad de arreglar, +modificar y ampliar el programa. ¡Crear música hermosa no debería +requerir cientos de euros en software! +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading ¿Cuáles son los beneficios para los usuarios? + +@itemize + +@item +Sin coste: ¡descárguelo y pruébelo! ¿Qué puede perder? + +@item +Compartir: si le gusta el programa ¡pase una copia a sus amigos, +profesores, alumnos y colegas! + +@item +Disponibilidad de la fuente: si tiene curiosidad acerca de cómo +LilyPond crea algún tipo de notación musical, puede ver exactamente +cómo está hecha. + +@item +Ampliable: usted puede añadir posibilidades, corregir errores y +cambiar el funcionamiento. Si no es un programador, puede contratar a +alguien para que haga estas tareas. + +Esto puede parecer poco atractivo para músicos ocasionales, pero la +capacidad de expandir el software puede ser muy valiosa para los +compositores serios, empresas y académicos. + +@item +Seguridad para el futuro: si una empresa comercial va a la quiebra, +¿qué le ocurre a cualquier música electrónica que dependa de sus +productos? Esto no es un problema con LilyPond; incluso si todo el +equipo de desarrollo lo abandonara (algo extremadamente improbable), +el programa aún seguiría estando disponible de forma legal para su +copia, modificaciones y distribución. + + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading ¿Por qué los desarrolladores de LilyPond @qq{regalan} su trabajo sin pedir nada a cambio? + +Casi todos nosotros vemos el desarrollo de LilyPond como un hobby o un +trabajo voluntario. Así pues, la pregunta es realmente @qq{¿por qué +las personas se prestan voluntarias?} + +@itemize + +@item +Por diversión: el trabajo en busca de una meta puede ser divertido, +¡en especial cuando trabajas en equipo! + +@item +Metas comunes: todos nosotros queremos partituras con buen aspecto, +pero son pocos los que tienen la experiencia (y ninguno tiene tiempo) +para crear un programa que pueda manejar todas las situaciones. +Trabajando en equipos (una persona mejora el código que traza las +barras de corchea, otra mejora la forma de las ligaduras y un tercero +escribe documentación explicando cómo utilizar estas posibilidades) +podemos alcanzar nuestra meta con tan sólo una fracción del esfuerzo +individual. + +@item +La @qq{cultura del regalo}: el movimiento del Software Libre (o de +@qq{fuente abierta}) ha creado muchos proyectos geniales de software, +como @uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox} y el juego +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Después de +haberse visto beneficiados por estos proyectos, algunos +desarrolladores desean @qq{devolver} algo a la comunidad. + +@item +Experiencia laboral: las contribuciones a proyectos de código abierto +son una magnífica forma de practicar la programación, la escritura de +documentación, la traducción de documentación o el diseño. Esta +experiencia ha ayudado a muchos programadores a encontrar trabajo en +empresas o en universidades. + + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Y ahora ¿qué? + +¿Aún no está convencido? Lea nuestro extenso ensayo sobre nuestra +filosofía del grabado en @ref{Trasfondo}. Si ya está decidido a +probar LilyPond, en primer lugar lea lo que hemos escrito sobre la +@ref{Entrada de texto}. +@divEnd + + +@node Trasfondo +@unnumberedsec Trasfondo +@translationof Background + +@divClass{column-center-top} +@subheading Ensayo sobre el trasfondo + +Tenemos un amplio ensayo que describe la estética computacional: el +arte de crear belleza con un ordenador. + +Si tan sólo quiere una introducción rápida a LilyPond, leer todo el +material que constituye el ensayo podría ser demasiado. Si quiere +leerlo ahora, continúe hacia @ref{Ensayo}. +@divEnd + +@divClass{column-center-bottom} +@subheading Y ahora ¿qué? + +¿Aún no está convencido? Lea algo acerca de las @ref{Producciones} y +partituras de algunos de nuestros usuarios. Si ya se ha decidido a +probar LilyPond, en primer lugar lea algo sobre nuestra @ref{Entrada +de texto}. +@divEnd + + +@node Producciones +@unnumberedsec Producciones +@translationof Productions + +@divClass{column-left-top} +@subheading Conciertos + +La música grabada con LilyPond se ha utilizado en interpretaciones y +actuaciones por todo el mundo. Algunos titulares: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire Étrangère}, ópera de +@uref{http://valentin.villenave.net/,Valentin Villenave}, con +libreto en francés de +@uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis Trondheim}, +estrenada el 1 de febrero de 2009 en +@uref{http://www.opera-montpellier.com/, L'Opéra National de +Montpellier}, en Francia. + +@item +La interpretación de +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque} de +@emph{Armide} de Lully, 15 y 16 de mayo de 2009, en Houston, Texas +(tipografía de @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}). + +@item +Extractos instrumentales de @emph{Hippolyte et Aricie} de Rameau en la +iglesia de St. James en Manhattan, el 8 de mayo de 2009, por Frederick +Renz y su conjunto @uref{http://www.earlymusicny.org/, Early Music New +York} (realización tipográfica de Nicolas Sceaux). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Partituras publicadas + +@divClass{keep-bullets} +@itemize + +@item +El @uref{http://www.mutopiaproject.org/index.html, Proyecto Mutopia} +incluye más de 1500 partituras de música clásica para su libre +descarga, y es el principal escaparate de partituras de LilyPond. + +@c don't make this "Mutopia" a link, since that looks silly. +@item +@uref{http://etudeapp.com, Etude}, @qq{partituras en versión extra} es +una aplicación para el iPhone que presenta en pantalla música para +piano editada con LilyPond, entre ellas muchas piezas procedentes de +Mutopia. La aplicación incluye un teclado virtual de piano que +muestra las teclas que hay que pulsar para ayuda de los principiantes +que están aprendiendo a leer música. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing}, +partituras de música sacra de alta calidad, disponibles para su +descarga inmediata o en el formato tradicional de papel. + +@item +@uref{http://www.shadylane.fr, The Shady Lane Publishing}, +una @qq{micro editorial musical} cuya meta es promover una nueva forma +de economía más cercana a los músicos y amantes de la música. + +@end itemize + +@divEnd + +@divEnd + +@contactUsAbout{conciertos o partituras} + +@divClass{column-center-bottom} +@subheading Y ahora ¿qué? + +¿Aún no está convencido? Lea algunas de las @ref{Reseñas} de +nuestros usuarios. Si ya tiene decidido probar LilyPond, en primer +lugar infórmese sobre nuestra @ref{Entrada de texto}. +@divEnd + + +@node Reseñas +@unnumberedsec Reseñas +@translationof Reviews + +@divClass{column-left-top} +@subheading Artículos publicados + +@divClass{keep-bullets} +@itemize + +@item +Abril de 2011 + +@uref{http://www.linux-magazine.com,Linux Magazine} publica un +artículo titulado +@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf, +Projects on the Move}. Es un artículo introductorio sobre MuseScore, +LilyPond y Chordii. La autora Carla Schroder dice que @qq{LilyPond se +maneja desde la línea de órdenes, pero no deje que la falta de una IGU +le atemorize; LilyPond es amigable y fácil de aprender}, y aporta un +ejemplo fácil de abordar. + +@item +Mayo de 2010 + +Peter Kirn, en el sitio web Create Digital Music website, publica una +@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,revisión +de LilyPond}. Arroja una mirada equilibrada sobre la utilización, alaba +la notación de alta calidad de LilyPond y sugiere a los lectores que lo prueben. + +@item +Septiembre de 2009 + +La revista LinuxUser alemana publicó un +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +artículo sobre lilypond}. + + +@item +Agosto de 2009 + +Ann Drinan, en la página +@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org}, +presenta algunos comentarios de dos archiveros de orquesta que +charlan acerca del uso de software para el mantenimiento de sus bibliotecas. + +@item +Junio de 2009 + +En un @uref{http://news.lilynet.net/Free-Music-Now, artículo} +publicado en la revista anual de la @emph{Asociación Nacional de +Padres de Alumnos de Conservatorios} de Francia, el compositor y +miembro del proyecto LilyPond, Valentin Villenave, explica cómo las +Licencias Libres, y concretamente las partituras tipografiadas con +LilyPond, participan del objetivo de lograr que la música escrita sea +accesible para todos. + +@item +Febrero de 2008 + +En @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, artículos +en su página personal}, Andrew Hawryluk compara a Finale con LilyPond +en términos generales, y evalúa en detalle las posibilidades de grabado +musical de los dos programas. El segundo artículo es un instructivo +análisis de la edición del Preludio para piano número 6 de +Rachmaninoff, incluyendo comparaciones con una edición de referencia +grabada a mano. + +@item +Junio de 2006 + +@uref{http://distrowatch.com,DistroWatch} premia a LilyPond y +@uref{http://distrowatch.com/weekly.php?issue=20060605,escribe} +@qq{Damas y caballeros, nos complace anunciar que, basándonos +en la demanda de los lectores, la donación de DistroWatch de mayo de 2006 ha sido +concedida a LilyPond (190.00 @euro{}) y a Lua (US$250.00).} +@item +Diciembre de 2005 + +Linux Journal publica un artículo titulado +@uref{http://www.linuxjournal.com/article/8364, Elabore fantásticos +gráficos de Schenker con GNU LilyPond}. Es un artículo destacado, +profundo pero práctico con atractivos gráficos de LilyPond. El autor, +Kris Shaffer, destaca: @qq{GNU LilyPond genera unos gráficos preciosos +que hace a las alternativas comerciales parecer de segunda fila.} + +@item +20 de agosto de 2005 + +El diario belga De Standaard investiga qué empuja a los autores de +Software Libre en un artículo titulado +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} (Compartir el conocimiento sin +ánimo de lucro) en su @q{DS2 bijlage}. LilyPond se usa como ejemplo y +el artículo está salpicado de citas procedentes de una entrevista por +e-mail con Jan Nieuwenhuizen. Esto marca la primera aparición de +LilyPond en la prensa escrita de importancia. + +@item +Junio de 2005 + +Un artículo en francés sobre el lanzamiento de LilyPond 2.6 apareció +en @uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +Octubre de 2004 + +Los editores de Computer!Totaal, una revista holandesa de informática, +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, describen a +LilyPond} en la edición de octubre de 2004 como: @qq{Maravilloso +software libre (de código abierto) (...) Las partituras producidas por +LilyPond son excepcionalmente bonitas (...) un sistema muy potente que +puede hacer casi cualquier cosa.} + +@item +Julio/agosto de 2004 + +Dave Phillips escribió un artículo introductorio para Linux Journal At +the sounding edge: LilyPond, +@uref{http://www.linuxjournal.com/article/7657, primera} y +@uref{http://www.linuxjournal.com/article/7719, segunda} parte. + +@item +Marzo de 2004 + +Chris Cannam entrevistó a Han-Wen Nienhuys y a Jan Nieuwenhuizen en +linuxmusician.com (una página ahora desaparecida). Esta entrevista se +reseñó también en una +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, +historia de slashdot}. + +@item +Febrero de 2004 + +El cantante de jazz Gail Selkirk escribe sobre +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Sumergirse en el estanque de los nenúfares (Lily Pond)}. +@qq{... puede hacer hojas guía de acordes o partes orquestales +completas, y el resultado puede ser increíble.} +@uref{http://www.computermusic.co.uk/, Computer Music Special}, número +CMS06. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading Reseñas de los usuarios + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, primer cello de la Filarmónica de Nueva York + +@qq{@dots{} He escrito un par de piezas para violoncello solista que he +impreso con LilyPond y que voy a enviar a Schirmer para su +publicación. ¡Puedo apostar a que su grabado no será ni la mitad de +bueno que el mío!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, profesor de composición, Conservatorio Superior de Friburgo + +@qq{Aún cuando no domino [LilyPond] todavía, estoy @strong{muy} +impresionado. Usé el programa para digitalizar un motete de Josquin +Desprez en notación mensural y no cabe duda de que lilypond ¡se lleva +por delante a otros programas de notación en cuanto a velocidad, +facilidad de uso y apariencia de los resultados!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, compositor (Bruselas, Bélgica) + +@qq{[...después del primer ensayo orquestal] obtuve numerosos +cumplidos sobre la calidad de las partituras. Lo que es incluso más +importante: mientras que LilyPond proporciona numerosas formas de +mejorar la apariencia de las partituras, lo que entregué a la orquesta +es básicamente la impresión en bruto, sin retocar.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, compositor (Toronto, Canadá) + +@qq{Gracias y felicitaciones al equipo de desarrollo por su increíble +trabajo. Nunca he visto nada que se acerque al resultado que obtengo +con LilyPond; confío plenamente en que mis necesidades de publicación +musical serán satisfechas más allá de toda expectativa usando esta +genial aplicación. (...) básicamente, la impresión de LilyPond sin +retocar (...) se ve mejor que la mayoría de las publicaciones +"profesionales" más recientes con que las he comparado (p.ej., +prácticamente cualquier partitura de Warner Bros, e incluso muchas de +las más recientes de @q{las editoras antiguas}). (...)} + +@qq{¡¡¡Toma eso, Finale/Sibelius/Igor/lo que sea!!!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, programador principal del proyecto @uref{http://www.rosegardenmusic.com/, RoseGarden} + +@qq{LilyPond es, obviamente, King Kong [de la tipografía musical a lo +grande].} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} + +@qq{La forma en que se introduce la música para LilyPond me hace +pensar de una manera más musical -- ha habido veces en que me he +bloqueado sobre cómo decirle a Lily que imprima algo, sólo para darme +cuenta de que incluso si hiciera exactamente lo que el compositor +quería, la música sería confusa de leer. LilyPond me lo pone mucho +más fácil al trabajar en mi doble papel de editor y copista.} + +@qq{Llevo utilizando exclusivamente LilyPond para mi negocio de +publicación recién inaugurado. Prácticamente sin excepción, todos los +compositores se han quedado boquiabiertos con la calidad del grabado +cuando se lo presentaba con las pruebas de su música previa a la +publicación. Me reservo parte del mérito de esto (empleo mucho tiempo +en trucar los resultados, especialmente las ligaduras, sobre todo en +los acordes), pero LilyPond me da un excelente punto de partida, un +interfaz muy intuitivo, y la capacidad de modificar absolutamente +cualquier cosa si le quiero dedicar el tiempo necesario. Estoy +convencido de que ningún producto comercial se le acerca ni de lejos.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, trombón bajo, Orquesta Sinfónica de Islandia + +@qq{Creo que LilyPond es genial (...) cuanto más aprendo de LilyPond, +¡más me gusta!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, intérprete de guitarra eléctrica (sí, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, pariente de...}) + +@qq{Estoy súper-impresionado con LilyPond (...)} + +@qq{¡¡¡EL MEJOR PROGRAMA DE LA HISTORIA!!!} + +@qq{¡Muchísimas gracias a todos por vuestro duro trabajo y +dedicación!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, colaborador de @uref{http://www.mutopiaproject.org/, Mutopia} + +@qq{Tenía una especie de relación pasión-odio con LilyPond. Pasión +porque la primera partitura que vi ¡era tan increíble! La descripción +de LilyPond se fundamenta en la belleza. ¡Esto es demasiada modestia! +(...) conforme LilyPond mejora continuamente y observo cómo se hacen +las cosas con Scheme, tengo cada vez menos frustraciones. De +cualquier forma, lo que quiero decir es: gracias por darnos LilyPond, +es realmente bueno.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, director de orquesta en el Teatro de Koblenz, Alemania, y destacado hacker de GNU + +@qq{¡De cualquier manera, LilyPond hace un trabajo sensacional!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, desarrollador de @uref{http://jackaudio.org/, JACK} y @uref{http://www.ardour.org/, Ardour} + +@qq{Creo que [LilyPond] es un programa increíble, y produce un +resultado realmente maravilloso. Después de haber leído una reseña +sobre él el año pasado, estuve dando la paliza a varios amigos míos +hablándoles de su potencial.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, El Dr. Mika Kuuskankare}, investigador de la @uref{http://siba.fi, Sibelius Academy de Finlandia}, compositor y autor del Expressive Notation Package (ENP) + +@qq{Siento el más hondo respeto hacia LilyPond y sus creadores y +mantenedores debido a que sé por mi experiencia personal lo difícil +que puede ser este tipo de software.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, Músico, tipógrafo musical profesional y usuario experimentado de SCORE + +@qq{Mi agradecimiento de todo corazón a todo aquel que contribuye a +este proyecto. Yo fui un usuario intensivo de SCORE para casas +grandes de edición musical, allá por los años 90, pero ahora siento +que LilyPond, por fin, me permite conseguir exactamente los que quiero +hacer sobre la página, especialmente cuando no se trata de la práctica +"estándar".} +@divEnd + +@divEnd + +@contactUsAbout{artículos de noticias o testimonios} + +@divClass{column-center-bottom} +@subheading Y ahora ¿qué? + +Lea lo que tenemos que decirle sobre nuestra @ref{Entrada de texto}. +@divEnd + + + +@node Entrada de texto +@unnumberedsec Entrada de texto +@translationof Text input + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading @qq{Compilar} la música + +@imageClickable{nereid-shot-small,png, (pulse para ver una imagen más grande), +nereid-shot,png, right} + +LilyPond es un sistema @emph{compilado}: se ejecuta sobre un archivo +de texto que describe la música. El resultado se puede ver en la +pantalla o imprimirse. En cierto modo, LilyPond se parece más a un +lenguaje de programación que a los programas de edición gráfica de +partituras. + +No escribimos la música por el procedimiento de coger las notas de una +barra de herramientas gráfica y arrastrarlas a una partitura que se +refresca de forma dinámica; escribimos la música tecleando un texto. +Este texto es interpretado (o @qq{compilado}) por parte de LilyPond, +que a su vez produce una hermosa música impresa. + +Es posible que las personas acostumbradas a interfaces gráficos de +usuario tengan que aprender una forma de trabajo nueva, pero ¡los +resultados, sin duda alguna, merecen la pena! + +@warning{Presentamos aquí una panorámica de nuestro paradigma de +entrada de texto: ¡no es tan complicado como suena! No se preocupe +ahora por comprender todos y cada uno de los detalles de estos +ejemplos; nuestra documentación para principiantes se ocupa de todo +ello a un ritmo mucho más progresivo.} + + +@subsubheading La ele con la a, "La" + +Las notas se codifican mediante letras y números. Las instrucciones +especiales se introducen mediante barras invertidas. + +@imageFloat{text-input-1-annotate-es,png,center} +@imageFloat{text-input-1-output,png,center} + +Las alteraciones se hacen con nombres distintos: añada @code{-is} para +obtener un sostenido, y @code{-es} para un bemol (son los nombres de +las notas en holandés, pero están disponibles otros idiomas). +LilyPond averigua dónde hay que imprimir las alteraciones. + +@imageFloat{text-input-2-annotate-es,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading Música pop + +Junte acordes y letra para obtener una hoja guía de acordes: + +@imageFloat{text-input-pop-annotate-es,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading Particellas de orquesta + +El archivo de entrada contiene las notas de la pieza musical. La +partitura y las particellas se pueden hacer a partir de un solo +archivo de entrada, de manera que un cambio en una nota siempre afecta +tanto a las particellas como a la partitura general. Para poder +incluir la misma música en varios lugares, asignamos la música a una +@qq{variable} (un nombre): + +@imageFloat{text-input-parts-both-annotate-es,png,center} + + +Esta variable se usa entonces en una sola parte instrumental (aquí +transportada, con los silencios de varios compases agrupados): + +@imageFloat{text-input-parts-single-annotate-es,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +La misma variable se utiliza en la partitura general (aquí en tono de +concierto): + +@imageFloat{text-input-score-annotate-es,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Documentación para el principiante + +Nos damos cuenta de que muchos usuarios ven un poco extraña esta forma +de introducir la música. Por este motivo, hemos escrito una amplia +documentación de ayuda a los nuevos usuarios, comenzando con +@ref{Aprendizaje}. El Manual de aprendizaje es el mejor sitio para +empezar, porque allí se responden muchas preguntas antes de que se +formulen. + +¡Le rogamos que lea el Manual de Aprendizaje antes de protestar por +posibles fallos en el programa! Con frecuencia, los usuarios noveles +creen que LilyPond no funciona, cuando de hecho está funcionando +exactamente tal y como está diseñado para hacerlo. + +Tiene a su disposición una documentación mucho más profunda en la +sección @ref{Manuales}. + + +@subsubheading Entornos de edición facilitados + +@imageClickable{lilykde-screenshot-small,png, + (puse para ver una imagen más grande),lilykde-screenshot,png,right} + +La preocupación de LilyPond está en primer lugar en la producción de +música tipografiada con la máxima calidad; la creación de una interfaz +gráfica de usuario (un GUI) nos habría distraído de esta meta. Sin +embargo, existen otros proyectos cuyo propósito es hacer más fácil la +creación de archivos de entrada de LilyPond. + +Ciertos entornos de edición incluyen el coloreado sintáctico, +compleción automática de instrucciones y plantillas preelaboradas. +Otros programas ofrecen realmente un GUI que permite la manipulación +directa de una partitura gráfica. Para ver más información, consulte +@ref{Entornos mejorados}. + + +@divClass{column-center-bottom} +@subheading Y ahora ¿qué? + +Ya está preparado para @ref{Descarga, Descargar LilyPond}. ¿Aún no +está convencido? Lea algo sobre los entornos de edición en +@ref{Entornos mejorados}. + +@divEnd + + +@node Entornos mejorados +@unnumberedsec Entornos mejorados +@translationof Easier editing + + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, (pulse para +ver una imagen más grande),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +Creado como un @q{plugin} o complemento para el editor de texto +@uref{http://www.jedit.org,jEdit}, LilyPondTool es una de las +herramientas basadas en texto más ricas en funcionalidades para la +edición de partituras de LilyPond. Entre sus posibilidades se +encuentran: un asistente de documentos que contempla la posibilidad de +introducir letras de canciones para la preparación fácil de +documentos, y un visor de PDF integrado que contempla la posibilidad +de apuntar y pulsar con reflejo en el código. + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, (pulse para ver +una imagen más grande),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi es un editor dedicado de texto y música para LilyPond con +un visor de PDF incorporado, un potente asistente de partituras y +muchas funcionalidades de edición. Está construido alrededor de las +bibliotecas de KDE4 y se ejecuta actualmente en todos los sabores de +Linux y otros sistemas operativos del tipo UNIX. + +@divEnd + +@divClass{column-center-top} +@subheading Entorno gráfico: Denemo + +@imageClickable{screenshot-denemo-small,png, + (pulse para ver una imagen más grande),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo es un editor gráfico que genera código fuente de LilyPond, en +la versión 2.8.7, y también permite la reproducción sonora de la +música. Permite a los usuarios ver el código de entrada de LilyPond +en paralelo con la visualización gráfica. Se pueden aplicar a las +notas, acordes, etc. trucos de LilyPond adicionales y se guardan con +el documento de Denemo, de forma que los usuarios pueden continuar +editándolo de manera gráfica. + +Al mover el cursor por el texto de LilyPond se mueve también en la +presentación gráfica, y los errores de sintaxis de sus trucos de +LilyPond se destacan en la ventana de texto cuando se imprimen desde +el programa. + +@divEnd + +@divClass{column-center-top} +@subheading Editores de texto + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs es un editor de texto con funcionalidades avanzadas para muchos +lenguajes de programación. Emacs es un editor ampliamente expansible y +se puede usar como un entorno integrado de desarrollo. Existe un +@q{modo de lilypond} que ofrece las definiciones del lenguaje para +trabajar sobre archivos fuente de LilyPond. +Asimismo, uno de nuestros desarrolladores ha escrito +@uref{http://nicolas.sceaux.free.fr/ lilypond/lyqi.html,lyqi}, un modo +principal de Emacs. + +@uref{http://www.vim.org} + +Vim es un editor de texto minimalista que es una extensión del antiguo +editor @command{vi} de Unix. También es expansible y configurable. + +Por regla general, si no está familiarizado previamente con Emacs o +con Vim, probablemente prefiera utilizar un editor distinto para +escribir archivos de entrada de LilyPond. + +Hay más información sobre la configuración de Emacs y de Vim en +@rprogram{Apoyo respecto de los editores de texto}. + +@sourceimage{logo-macosx,,,} +@uref{http://www.uoregon.edu/~koch/texshop} + +El editor TexShop para MacOS@tie{}X se puede extender para que ejecute +LilyPond, @command{lilypond-book} y @command{convert-ly} desde dentro +del editor, utilizando las extensiones que están disponibles en: + +@example +@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts} +@end example + +@sourceimage{logo-macosx,,,} +Existe un paquete de LilyPond para TextMate, un editor +comercial para MacOS. Se puede instalar ejecutando: + +@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 + +@divClass{column-center-top} +@subheading Programas capaces de exportar código de LilyPond + + +@subsubheading Editores de partitura, tablatura y MIDI: + +@itemize +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}, un secuenciador MIDI +y de audio, que tiene también un editor de partitura para edición de +un solo pentagrama. + +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, +un editor de partitura basado en la biblioteca +@uref{http://www.cairographics.org,Cairo}, +contempla de forma experimental la exportación a LilyPond. + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, un editor y reproductor +de tablatura multipista, tiene visor de partitura +y es capaz de exportar hacia LilyPond. + +@item +@uref{http://www.musescore.org,MuseScore}, unu editor de partituras, +tiene exportación incompleta de LilyPond +pero se está desarrollando de forma activa. + +@item +@uref{http://www.canorus.org,Canorus}, un editor de partituras, +también puede exportar a LilyPond, +pero aún es un programa en fase beta, se agradecen las pruebas por +parte de los usuarios. + +@item +@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, un +convertidor monofónico de MIDI a LilyPond en tiempo real. + +@item +@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm, +NW2LY} es un programa en C# que convierte una canción de +@uref{http://www.noteworthysoftware.com/, NoteWorthy} en +LilyPond. + +@end itemize + +@subsubheading Generadores de código algorítmicos + +@itemize + +@item +@uref{http://www.projectabjad.org/,Abjad}, una API de +@uref{http://www.python.org/,Python} para el control formalizado +de partituras, diseñado para ayudar a los compositores +a construir fragmentos complejos de notación de LilyPond +de una forma iterativa e incremental. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, una +biblioteca de LISP para generar notación musical a partir +de entornos de software musical. + +@item +@uref{http://strasheela.sourceforge.net,Strasheela}, un entorno +construido sobre el lenguaje de restricciones +@uref{http://www.mozart-oz.org/, Mozart/Oz}. + + +@end itemize +@divEnd + +@divClass{column-center-top} + +@subheading Otros programas sin desarrollo activo en la actualidad + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} se ha sustituido por +@uref{http://www.frescobaldi.org/,Frescobaldi}, y existe como LilyKDE3 +para KDE 3.5 y como lilypond-KDE4 para KDE 4.1 solamente. + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, que importaba +@uref{http://www.musicxml.com/xml.html,MusicXML}, se ha escindido en +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +y @uref{http://canorus.org,Canorus}. + + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} es un programa +gráfico de introducción de notas, que actúa más o menos como un +teclado numérico que produce notas de lilypond. + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Y ahora ¿qué? + +Ya está preparado para @ref{Descarga, Descargar LilyPond}. + +¿Aún no está convencido? Muchos compositores, músicos y directores de +orquesta han aprendido a escribir música en nuestro formato de +entrada. Los usuarios con experiencia incluso informan de que pueden +introducir una partitura completa en LilyPond ¡más rápido que con un +teclado de piano o con el ratón y un GUI! Posiblemente le apetezca +echar un vistazo a las @ref{Posibilidades}, @ref{Ejemplos} o a la +@ref{Libertad} que LilyPond ofrece, o leer algo sobre las +@ref{Producciones} y @ref{Reseñas} de nuestros usuarios. Además, +nuestro enfoque de la estética computacional del grabado musical +clásico viene explicado en nuestro tratado sobre el @ref{Trasfondo}. + + +@subheading Formalidades legales + +@divClass{legal} + +Se reconoce el copyright de todos los logotipos e imágenes de marca de +productos. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/es/web/manuals.itexi b/Documentation/es/web/manuals.itexi new file mode 100644 index 0000000000..8b4753a099 --- /dev/null +++ b/Documentation/es/web/manuals.itexi @@ -0,0 +1,600 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: a9e295650dc1d588ac03cf0c43230b8b28229bdd + + 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 + +@node Manuales +@unnumbered Manuales +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, detalles de \reference\}) +@spanEnd +@end macro + +@divClass{heading-center} +@ifclear web_version +@heading Manuales de LilyPond @version +@end ifclear +@ifset web_version + @heading Manuales de LilyPond @versionStable +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Introducción + +@itemize + +@item +@ref{Entrada de texto}: +LilyPond es un sistema de grabado musical @strong{basado en texto}. +¡Lea esto primero! + +@item +@ifWebLinks{@manualStableLearningSplitNoName-es,@rlearningnamed{Top,Aprendizaje}} +una introducción a LilyPond amable e @qq{imprescindible}. +@details{Aprendizaje} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glosario}} +@emph{(lectura opcional)} términos musicales y traducciones. +@details{Glosario} + +@item +@ifWebLinks{@manualStableEssaySplitNoName-es,@ressaynamed{Top,Ensayo}} +@emph{(lectura opcional)} la información de trasfondo sobre grabado musical. +@details{Ensayo} + + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Uso frecuente + +@itemize + +@item +@ifWebLinks{@manualStableNotationSplitNoName-es,@rusernamed{Top,Notación}} +referencia de la sintaxis. +@details{Notación} + +@item +@ifWebLinks{@manualStableUsageSplitNoName-es,@rprogramnamed{Top,Utilización}} +cómo ejecutar los programas. +@details{Utilización} + +@item +@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Fragmentos}} +trucos y consejos cortos. +@details{Fragmentos} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Uso infrecuente + +@itemize + +@item +@ref{FAQ}: +Preguntas más frecuentes (Frequently Asked Questions). + +@item +@ref{Top,Web}: +este documento. +@details{Web} + +@item +@ifWebLinks{@manualStableChangesSplitNoName-es,@rchangesnamed{Top,Cambios}} +¿qué hay de nuevo? +@details{Cambios} + +@item +@ifWebLinks{@manualStableExtendingSplitNoName-es,@rextendnamed{Top,Extender}} +trucos interesantes. +@details{Extender} + +@item +@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Funcionamiento interno}} +referencia sobre el trucaje. +@details{Funcionamiento interno} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Otros materiales + +@itemize + +@item +@ref{Traducido}: +estado del proceso de traducción para los lectores no anglófonos. + +@item +@ref{Todos}: +enlaces rápidos, manuales descargables y manuales antiguos. + +@item +@ref{Desarrollo}: +manuales para la versión de desarrollo. + +@item +@ref{FDL}: +estos manuales están publicados bajo la Licencia de Documentación +Libre de GNU. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Aprendizaje:: Aprendizaje. +* Glosario:: Glosario. +* Ensayo:: Ensayo. +* Notación:: Referencia. +* Utilización:: Utilización. +* Fragmentos:: Fragmentos de código. +* FAQ:: Preguntas frecuentes. +* Web:: Web. +* Cambios:: Noticias. +* Extender:: Programación. +* Funcionamiento interno:: Interioridades. +* Traducido:: Estado de la traducción. +* Todos:: Todos los manuales. +* FDL:: Licencia. +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Aprendizaje +@unnumberedsec Aprendizaje +@translationof Learning + +@divClass{column-left-top} +@subheading Manual de aprendizaje + +Este libro explica cómo comenzar a aprender LilyPond, así como algunos +conceptos clave en términos sencillos. Debería leer estos capítulos +en secuencia lineal. + +Al final de todas las secciones hay un párrafo @strong{Véase también} +que contiene referencias cruzadas a otras secciones: no debiera seguir +las referencias cruzadas la primera vez que lea este manual. Cuando +haya leído todo el manual, le vendrá bien leer de nuevo algunas +secciones y seguir esas referencias cruzadas para obtener más +información. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Aprendizaje, learning, + @rlearningnamed{Top,Aprendizaje}, + @manualStableLearningSplit-es, + @manualStableLearningBig-es, 1.5 MB, + @manualStableLearningPdf-es, 3 MB} + +@divEnd + + +@node Glosario +@unnumberedsec Glosario +@translationof Glossary + +@divClass{column-left-top} +@subheading Glosario + +El glosario explica términos musicales e incluye traducciones a varios +idiomas. Si no está familiarizado como la notación o la terminología +musicales (en especial si no es un hablante nativo de inglés), se +recomienda fervientemente que consulte el glosario. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Glosario musical, music-glossary, + @rglosnamed{Top,Glosario musical}, + @manualStableGlossarySplit, + @manualStableGlossaryBig, 1 MB, + @manualStableGlossaryPdf, 1.5 MB} + +@divEnd + + +@node Ensayo +@unnumberedsec Ensayo +@translationof Essay + +@divClass{column-left-top} +@subheading Ensayo + +Este libro ofrece una breve historia de la tipografía musical, seguida +de un examen de las técnicas de grabado musical de LilyPond. Se hace +una comparación entre LilyPond y ogros sistemas de tipografía musical. + +@warning{Los ejemplos tipográficos detallados se analizan mejor en la +versión en formato PDF a causa de su mayor resolución.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Ensayo, essay, + @ressaynamed{Top,Ensayo}, + @manualStableEssaySplit-es, + @manualStableEssayBig-es, 2 MB, + @manualStableEssayPdf-es, 2.5 MB} + +@divEnd + + +@node Notación +@unnumberedsec Notación +@translationof Notation + +@divClass{column-left-top} +@subheading Referencia de la notación + +Este libro explica todas las instrucciones de LilyPond que producen +notación musical. + +@warning{La Referencia de la Notación supone que el lector está al +tanto del material básico que aparece en el Manual de Aprendizaje y +está familiarizado con los términos musicales ingleses que se +presentan en el Glosario Musical.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notación, notation, + @rusernamed{Top,Notación}, + @manualStableNotationSplit-es, + @manualStableNotationBig-es, 7 MB, + @manualStableNotationPdf-es, 18 MB} + +@divEnd + + +@node Utilización +@unnumberedsec Utilización +@translationof Usage + +@divClass{column-left-top} +@subheading Manual de utilización del programa + +Este libro explica cómo ejecutar los programas, cómo integrar la +notación de LilyPond con otros programas, y sugiere @qq{buenas +prácticas} para un uso eficiente de estas herramientas. Se recomienda +su lectura antes de afrontar proyectos grandes. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Utilización, usage, + @rprogramnamed{Top,Utilización}, + @manualStableUsageSplit-es, + @manualStableUsageBig-es, 400 KB, + @manualStableUsagePdf-es, 600 KB} + +@divEnd + + +@node Fragmentos +@unnumberedsec Fragmentos +@translationof Snippets + +@divClass{column-left-top} +@subheading Fragmentos + +Este manual presenta un conjunto seleccionado de fragmentos de código +de LilyPond extraídos del +@uref{http://lsr@/.dsi@/.unimi@/.it,Repositorio de fragmentos de +código de LilyPond} (LSR). Todos los fragmentos se encuentran en el +dominio público. + +Observe que este documento no es un subconjunto estricto del LSR. El +LSR ejecuta una versión estable de LilyPond por lo que cualquier +fragmento de código que muestre funcionalidades nuevas de una versión +de desarrollo se debe añadir por separado. Están almacenados dentro +de @file{input/new/} en el árbol de código fuente de LilyPond. + +La lista de fragmentos de código para cada subsección del manual de +Notación están enlazados también a partir de la sección @strong{Véase +también}. +@divEnd + + +@divClass{column-right-bottom} + +@docLinks{Fragmentos, snippets, + @rlsrnamed{Top,Fragmentos}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node FAQ +@unnumberedsec FAQ +@translationof FAQ + +@divClass{column-center-top} +@subheading Preguntas preliminares + +@subsubheading ¿Dónde están el lienzo gráfico, los menús y las barras de herramientas? + +LilyPond requiere que escribamos la música como texto. Infórmese de +ello leyendo nuestra @ref{Entrada de texto}. + + +@subsubheading ¡Hay un montón de documentación! ¿Tengo que leerla? + +Debe leer el manual de @ref{Aprendizaje}. Respecto al resto +de la documentación, sólo tiene que leer las secciones que tratan de +la notación que quiera crear. + + +@subsubheading ¡Eso es aún mucho leer! ¿Merece la pena? + +Decida por sí mismo; las razones por las que querría utilizar LilyPond +se dan en la @ref{Introducción}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Cuestiones sobre la utilización + +@subsubheading ¡Algo no funciona! ¿Cómo lo arreglo? + +Se explica en @rprogram{Solución de problemas}. + + +@subsubheading ¿Por qué cambian la sintaxis del lenguaje? + +Se explica en @rprogram{¿Por qué cambia la sintaxis?}. + +@divEnd + + +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +Este manual da una información general sobre LilyPond. También +contiene información sobre varios foros de la comunidad, maneras de +informar de los fallos, y desarrollo. + +@divEnd + +@divClass{column-right-bottom} +@subheading Léalo + +@subsubheading Últimos manuales + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading Manual web en @versionDevel + +@docLinksBare{Web, web, + @ref{Arriba,Web}, + @manualDevelWebSplit-es, + @manualDevelWebBig-es, 1 MB, + @manualDevelWebPdf, 2 MB} + +@divEnd + + +@node Cambios +@unnumberedsec Cambios +@translationof Changes + +@divClass{column-left-top} +@subheading Cambios + +Esto es un resumen de los cambios importantes y nuevas funcionalidades +producidas en LilyPond a partir de la version estable anterior. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Cambios, changes, + @rchangesnamed{Top,Cambios}, + @manualStableChangesSplit-es, + @manualStableChangesBig-es, 6 KB, + @manualStableChangesPdf-es, 200 KB} + +@divEnd + + +@node Extender +@unnumberedsec Extender +@translationof Extend + +@divClass{column-left-top} +@subheading Expansión de LilyPond + +Este manual explica cómo escribir extensiones de LilyPond. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Extender, extending, + @rextendnamed{Top,Extender}, + @manualStableExtendingSplit-es, + @manualStableExtendingBig-es, 200 KB, + @manualStableExtendingPdf-es, 400 KB} + +@divEnd + +@node Funcionamiento interno +@unnumberedsec Funcionamiento interno +@translationof Internals + +@divClass{column-left-top} +@subheading Referencia de funcionamiento interno + +Éste es un conjunto de páginas repleta de referencias cruzadas +que constituyen la documentación de todos los detalles de cada una de +las clases, objetos y funciones de LilyPond. Se produce directamente +a partir de las definiciones de formateo del código fuente. + +Casi toda la funcionalidad de formateo que se utiliza internamente +está disponible para el usuario directamente. Por ejemplo, casi todas +las variables que controlan los valores de grosor, las distancias, +etc., se pueden modificar en los archivos de entrada. Existe un +inmenso número de opciones de formateo, y todas ellas se encuentran +descritas en este documento. Cada una de las secciones de la +Referencia de la Notación tiene una subsección @b{Véase también}, que +se refiere a la documentación generada. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Funcionamiento interno, internals, + @rinternalsnamed{Top,Funcionamiento interno}, + @manualStableInternalsSplit, + @manualStableInternalsBig, 2.5 MB, + @manualStableInternalsPdf, 2.8 MB} + +@divEnd + + +@node Traducido +@unnumberedsec Traducido +@translationof Translated + +@divClass{column-center-bottom} +@subheading Estado de la traducción + +@include translations.itexi + +@divEnd + + +@node Todos +@unnumberedsec Todos +@translationof All + +@divClass{column-left-top} +@subheading Versiones para descargar + +@ifclear web_version +Los @emph{tarballs} para descargar +sólo están disponibles en @uref{http://lilypond.org} +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable-es + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Versiones estables anteriores + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +Documentación de LilyPond 2.12} + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +Documentación de LilyPond 2.11} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +Documentación de LilyPond 2.10} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +Documentación de LilyPond 2.8} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +Documentación de LilyPond 2.6} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +Documentación de LilyPond 2.4} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +Documentación de LilyPond 2.2} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +Documentación de LilyPond 2.0} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +Documentación de LilyPond 1.8} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +Documentación de LilyPond 1.6} + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL +@translationof FDL + +@divClass{column-center-top} +@subheading Licencia de la documentación + +La documentación de GNU LilyPond está publicada bajo la Licencia de +Documentación Libre de GNU. Hay una introducción a esta licencia y a +nuestros motivos para haberla elegido, en @ref{Libertad}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd + + diff --git a/Documentation/es/web/news-front.itexi b/Documentation/es/web/news-front.itexi new file mode 100644 index 0000000000..64c9c328f9 --- /dev/null +++ b/Documentation/es/web/news-front.itexi @@ -0,0 +1,96 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: e816bb2cfe498d49732ac66616ca351738585028 + + 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 This file is part of lilypond-web.texi and community.itexi + +@c when you add a new item, consider moving the lowest item(s) +@c into news-old.itexi. + +@c Translators: Francisco Vila +@c keep two blank lines between news entries + +@c used for news about the upcoming release; see CG 10.2 + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.14.0! @emph{6 de junio de 2011} + +Nos llena de orgullo anunciar el lanzamiento de GNU LilyPond 2.14. +LilyPond es un programa de grabado musical (edición de partituras) +dedicado a la producción de música impresa de la más alta calidad +posible. Lleva a la impresión por ordenador la estética de las +partituras tipografiadas al estilo tradicional. + +Durante los últimos dos años y medio son muchas las mejoras que se han +producido a partir de la anterior versión principal estable. Algunas +de las más importantes son: + +@itemize +@item +LilyPond se licencia ahora bajo la GNU GPL v3 o posterior. + +@item +Se ha modificado drásticamente el motor de espaciado vertical, +haciéndolo mucho más flexible y fácil de controlar. + +@item +Ahora la aplicación automática de barras de corchea es más flexible y +se evitan las colisiones de barras. + +@end itemize + +Se da una lista completa de las funcionalidades nuevas en: + +@example +@uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html} +@end example + +¡Feliz edición de partituras! LilyPond 2.14 llega a usted de la mano de... + +El equipo principal de desarrollo: + +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. + +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 +Wilson, Rodolfo Zitellini. + +Colaboradores de fuenteas tipográficas: + +Keith OHara, Marc Hohl, Alexander Kobel, Carsten Steger. + +Colaboradores de documentación: + +Colin Campbell, Andrew Hawryluk, James Lowe, Mike Moral, Ralph +Palmer, David Pounder, Patrick Schmidt. + +Escuadrón de caza de bugs: + +James E. Bailey, Colin Campbell, Phil Holmes, Urs Liska, Ralph +Palmer, Kieren MacMillan, Dmytro O. Redchuk. + +Colaboradores de los archivos binarios: + +Christian Hitz. + +Colaboradores de traducción: + +Federico Bruni, Dénes Harmath, Jean-Charles Malahieude, Tineke de +Munnik, Till Paala, Ralf Wildenhues, Yoshiki Sawada. + +@newsEnd diff --git a/Documentation/es/web/news.itexi b/Documentation/es/web/news.itexi new file mode 100644 index 0000000000..f86b286c98 --- /dev/null +++ b/Documentation/es/web/news.itexi @@ -0,0 +1,4282 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@ignore + Translation of GIT committish: c32e3fdb278522c2772cbbe01f532ed24cb9d838 + + 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 + +@ignore + +(I'd rather have the below in the CG. -gp) +NOTE: + + * avoid "HERE" as name for links, use descriptive link names like + @uref{,Download LilyPond 2.5.16} + + * avoid putting links in running text. They make text harder to read. + Preferably: (@uref{,...}, etc. ) + + * use a descriptive title in @subsubheading + + * writing date in "Month DD, YYYY" format is required for + generating the RSS feed; in case the message (and thus the date) + is not in English, you must write a well-formed date in English + like above in a comment between the closing brace of @emph and the + following line + (see "Japanese translation" below for an example). + + * Split news items in small chunks. It's OK to have more than 1 item + on one day. + + * don't duplicate entries from news-front.itexi +@end ignore + + +@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 +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 10 de abril de 2011. Si +descubre algún problema, le rogamos que nos envíe +@ref{Informes de fallos}. + +@newsEnd + + +@newsItem +@subsubheading Cuarta versión candidata al lanzamiento de 2.14: ¡Lanzado LilyPond 2.13.56! @emph{29 de marzo de 2011} + +Ha salido LilyPond 2.13.56; ésta es la cuarta 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 5 de abril de 2011. Si +descubre algún problema, le rogamos que nos envíe +@ref{Informes de fallos}. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.55! @emph{22 de marzo de 2011} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.55. Esta +versión contiene el conjunto habitual de correcciones de fallos. + +Tenga en cuenta que esta @strong{no} es la tercera versión candidata +al lanzamiento estable, debido a que aún permanecen unos cuantos +fallos críticos. + +@newsEnd + + +@newsItem +@subsubheading Retirada de la tercera versión candidata al lanzamiento @emph{15 de marzo de 2011} + +Hemos decubierto una regresión desde la versión 2.12.3, de manera que +lilypond 2.13.54 ya no es candidata para el lanzamiento de la versión +2.14.0. Sin embargo, continúen probándola: nos gustaría descubrir (y +corregir) cualquier regresión adicional tan pronto como sea posible. +Si descubre algún problema, le rogamos que nos envíe +@ref{Informes de fallos}. + +@newsEnd + + +@newsItem +@subsubheading Tercera versión candidata al lanzamiento de 2.14: ¡Lanzado LilyPond 2.13.54! @emph{13 de marzo de 2011} + +Ha salido LilyPond 2.13.54; ésta es la tercera 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 27 de marzo de 2011. Si +descubre algún problema, le rogamos que nos envíe +@ref{Informes de fallos}. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.53! @emph{6 de marzo de 2011} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.53. Esta +versión contiene el conjunto habitual de correcciones de fallos. + +Tenga en cuenta que esta @strong{no} es la tercera versión candidata +al lanzamiento estable, debido a que aún permanecen unos cuantos +fallos críticos. + +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.52! @emph{1 de marzo de 2011} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.52. Esta +versión contiene el conjunto habitual de correcciones de fallos. + +Tenga en cuenta que esta @strong{no} es la tercera versión candidata +al lanzamiento estable, debido a que aún permanecen unos cuantos +fallos críticos. + +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.51! @emph{22 de febrero de 2011} + + +Nos complace anunciar el lanzamiento de LilyPond 2.13.51. Esta +versión contiene el conjunto habitual de correcciones de fallos. + +Tenga en cuenta que esta @strong{no} es la tercera versión candidata +al lanzamiento estable, debido a que aún permanecen unos cuantos +fallos críticos. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.50! @emph{13 de febrero de 2011} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.50. Esta +versión contiene el conjunto habitual de correcciones de fallos. + +Tenga en cuenta que esta @strong{no} es la tercera versión candidata +al lanzamiento estable, debido a que aún permanecen unos cuantos +fallos críticos. +@newsEnd + + +@newsItem +@subsubheading ¡Nuevas traducciones de la página web al checo y al chino! @emph{11 de febrero de 2011} + +Se han añadido dos idiomas nuevos a nuestra página web: el chino, obra +de Ben Luo, y el checo, por Pavel Fric. Es un trabajo que está en +desarrollo pero estas páginas son completamente funcionales. ¡Con +esto ya son diez idiomas para elegir! + +@newsEnd + + +@newsItem +@subsubheading Segunda versión candidata al lanzamiento de 2.14: ¡Lanzado LilyPond 2.13.49! @emph{9 de febrero de 2011} + + +Ha salido LilyPond 2.13.49; ésta es la segunda 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 23 de febrero de 2011. Si +descubre algún problema, le rogamos que nos envíe +@ref{Informes de fallos}. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.48! @emph{5 de febrero de 2011} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.48. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.47! @emph{28 de enero de 2011} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.47. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading Retirada de la versión candidata al lanzamiento @emph{13 de enero de 2011} + +Hemos decubierto una regresión desde la versión 2.12.3, de manera que +lilypond 2.13.46 ya no es candidata para el lanzamiento de la versión +2.14.0. Sin embargo, continúen probándola: nos gustaría descubrir (y +corregir) cualquier regresión adicional tan pronto como sea posible. +Si descubre algún problema, le rogamos que nos envíe +@ref{Informes de fallos}. + +@newsEnd + + +@newsItem +@subsubheading Primera versión candidata al lanzamiento de 2.14: ¡Lanzado LilyPond 2.13.46! @emph{12 de enero de 2011} + +Ha salido LilyPond 2.13.46; ésta es la primera 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 26 de enero de 2011. Si +descubre algún problema, le rogamos que nos envíe +@ref{Informes de fallos}. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.45! @emph{3 de enero de 2011} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.45. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading Tercera versión de pruebas Beta de 2.14: ¡Lanzado LilyPond 2.13.44! @emph{25 de diciembre de 2010} + +Ha salido LilyPond 2.13.44; ésta es la primera versión beta 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. + +Aún queda un problema calificado como Crítico en esta versión: existe +un caso en que el espaciado vertical está excesivamente comprimido. +Si se decide a probar esta versión, no se sorprenda al descubrir +problemas; tan sólo envíenos @ref{Informes de fallos} educados. + +@newsEnd + + +@newsItem +@subsubheading Segunda versión de pruebas Beta de 2.14: ¡Lanzado LilyPond 2.13.43! @emph{14 de diciembre de 2010} + +Ha salido LilyPond 2.13.43; ésta es la primera versión beta 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. + +Aún queda un problema calificado como Crítico en esta versión: existe +un caso en que el espaciado vertical está excesivamente comprimido. +Si se decide a probar esta versión, no se sorprenda al descubrir +problemas; tan sólo envíenos @ref{Informes de fallos} educados. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.42! @emph{8 de diciembre de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.42. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +Tenga en cuenta que ésta @strong{no} es la segunda versión de pruebas +beta. A causa de la aparición de algunos cambios en nuestro proceso +de construcción del programa que no se han probado, no podemos estar +completamente seguros de la calidad de esta versión. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.41! @emph{4 de diciembre de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.41. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +Tenga en cuenta que ésta @strong{no} es la segunda versión de pruebas +beta. A causa de la aparición de algunos cambios en nuestro proceso +de construcción del programa que no se han probado, no podemos estar +completamente seguros de la calidad de esta versión. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.40! @emph{21 de noviembre de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.40. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +Tenga en cuenta que ésta @strong{no} es la segunda versión de pruebas +beta. A causa de la aparición de algunos cambios en nuestro proceso +de construcción del programa que no se han probado, no podemos estar +completamente seguros de la calidad de esta versión. + +@newsEnd + + +@newsItem +@subsubheading Primera versión de pruebas Beta de 2.14: ¡Lanzado LilyPond 2.13.39! @emph{15 de noviembre de 2010} + +Ha salido LilyPond 2.13.39; ésta es la primera versión beta 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. + +Aún permanecen algunos problemas calificados como Críticos +en esta versión: el espaciado vertical sorprende en +dos casos, y lilypond puede salir de manera abrupta frente +a algunos códigos de entrada extraños. Si se decide a probar +2.13.39, no se sorprenda al descubrir problemas; tan sólo +envíenos @ref{Informes de fallos} educados. + +@newsEnd + + +@newsItem +@subsubheading El Informe LilyPond, número 22. @emph{3 de noviembre de 2010} + +¡Vuelve el @emph{Informe LilyPond}, con algunas sorpresas y noticias +interesantes para toda la comunidad de LilyPond! +Podrá encontrarse en esta edición una lista completa y actualizada +de todas las listas de distribución de correo y foros de LilyPond +de todo el mundo. También, por primera vez nuestro invitado especial +es el co-fundador y desarrollador principal de LilyPond +@strong{Jan Nieuwenhuizen}, que ha estado muy ocupado los últimos meses: +¡dispóngase a leer en qué! + +Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-22, +Informe LilyPond 22} y léalo ahora mismo; ¡animamos calurosamente a +todos a que hagan sus comentarios y contribuciones! + +@newsEnd + + +@newsItem +@subsubheading Cuarta versión de pruebas Alfa de 2.14: ¡Lanzado LilyPond 2.13.38! @emph{31 de octubre de 2010} + +Ha salido LilyPond 2.13.38; ésta es la cuarta versión alfa 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. + +Aún permanecen algunos problemas calificados como Críticos +en esta versión: el espaciado vertical sorprende en +dos casos, y lilypond puede salir de manera abrupta frente +a algunos códigos de entrada extraños. Si se decide a probar +2.13.38, no se sorprenda al descubrir problemas; tan sólo +envíenos @ref{Informes de fallos} educados. + +@newsEnd + + +@newsItem +@subsubheading Tercera versión de pruebas Alfa de 2.14: ¡Lanzado LilyPond 2.13.37! @emph{25 de octubre de 2010} + +Ha salido LilyPond 2.13.37; ésta es la tercera versión alfa 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. + +Aún permanecen algunos problemas calificados como Críticos +en esta versión: el espaciado vertical sorprende en +dos casos, y lilypond puede salir de manera abrupta frente +a algunos códigos de entrada extraños. Si se decide a probar +2.13.37, no se sorprenda al descubrir problemas; tan sólo +envíenos @ref{Informes de fallos} educados. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.36! @emph{19 de octubre de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.36. +Esta versión contiene el conjunto habitual de correcciones de fallos. +Sin embargo, aún permanecen un cierto número de problemas críticos, +por lo que está orientada solamente a los desarrolladores. + +Tenga en cuenta que ésta @strong{no} es la tercera versión +de pruebas alfa. A causa de la aparición de algunos cambios en nuestro +proceso de construcción del programa que no se han probado, +no podemos estar completamente seguros de la calidad +de esta versión. + +@newsEnd + + +@newsItem +@subsubheading El Informe LilyPond, número 21. @emph{3 de octubre de 2010} + +¡Vuelve el @emph{Informe LilyPond}, con sus dos editores: @qq{gruñón} +y @qq{blandito}! Esta edición se ocupa principalmente de la notación +microtonal en LilyPond, pero también incluye un tutorial sobre la +forma de ejecutar LilyPond a partir de una memoria USB, sin olvidar +las acostumbradas notas de lanzamientos, el fragmento de código del +día y las noticias que nos llegan de la charca de las ranas. + +Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-21, +Informe LilyPond 21} y léalo ahora mismo; ¡animamos calurosamente a +todos a que hagan sus comentarios y contribuciones! + +@newsEnd + + +@newsItem +@subsubheading Segunda versión de pruebas Alfa de 2.14: ¡Lanzado LilyPond 2.13.35! @emph{29 de septiembre de 2010} + +Ha salido LilyPond 2.13.35; ésta es la segunda versión alfa 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. + +Aún existen tres regresiones conocidas contra 2.12.3: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1173, +Problema número 1173 - No se pueden alinear las MetronomeMarks sobre +una nota si existe un silencio multicompás en otra voz}, y dos fallos +de espaciado: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1240, +Problema 1240} y +@uref{http://code.google.com/p/lilypond/issues/detail?id=1252, +Problema 1252} pero esperamos encontrar más. Si se decide a probar +2.13.35, no se sorprenda al encontrar problemas; tan sólo envíenos +@ref{Informes de fallos} educados. + +@newsEnd + + +@newsItem +@subsubheading Versión de pruebas Alfa de 2.14: ¡Lanzado LilyPond 2.13.34! @emph{21 de septiembre de 2010} + +Ha salido LilyPond 2.13.34; ésta es la primera versión alfa 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. + +Aún existe una regresión conocida contra 2.12.3: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1173, +Problema número 1173 - No se pueden alinear las MetronomeMarks sobre una +nota si existe un silencio multicompás en otra voz}, pero esperamos +encontrar más. Si se decide a probar 2.13.34, no se sorprenda al +encontrar problemas; tan sólo envíenos @ref{Informes de fallos} +educados. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.33! @emph{10 de septiembre de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.33. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading Segunda versión de pruebas Alfa de 2.14: ¡Lanzado LilyPond 2.13.35! @emph{29 de septiembre de 2010} + +Ha salido LilyPond 2.13.35; ésta es la segunda versión alfa 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. + +Aún existen tres regresiones conocidas contra 2.12.3: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1173, +Problema número 1173 - No se pueden alinear las MetronomeMarks sobre +una nota si existe un silencio multicompás en otra voz}, y dos fallos +de espaciado: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1240, +Problema 1240} y +@uref{http://code.google.com/p/lilypond/issues/detail?id=1252, +Problema 1252} pero esperamos encontrar más. Si se decide a probar +2.13.35, no se sorprenda al encontrar problemas; tan sólo envíenos +@ref{Informes de fallos} educados. + +@newsEnd + + +@newsItem +@subsubheading Versión de pruebas Alfa de 2.14: ¡Lanzado LilyPond 2.13.34! @emph{21 de septiembre de 2010} + +Ha salido LilyPond 2.13.34; ésta es la primera versión alfa 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. + +Aún existe una regresión conocida contra 2.12.3: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1173, +Problema número 1173 - No se pueden alinear las MetronomeMarks sobre una +nota si existe un silencio multicompás en otra voz}, pero esperamos +encontrar más. Si se decide a probar 2.13.34, no se sorprenda al +encontrar problemas; tan sólo envíenos @ref{Informes de fallos} +educados. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.33! @emph{10 de septiembre de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.33. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.32! @emph{3 de septiembre de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.32. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading El Informe LilyPond, número 20. @emph{2 de septiembre de 2010} + +¡Vuelve el @emph{Informe LilyPond}, con sus dos editores: @qq{gruñón} +y @qq{blandito}! Esta edición contiene la revisión de un editor de +notación en línea que utiliza lilypond, además de las acostumbradas +notas de lanzamientos, el fragmento de código del día, noticias desde +la charca de las ranas y el informe de fallos del día. + +Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-20, +Informe LilyPond 20} y léalo ahora mismo; ¡animamos calurosamente a +todos a que hagan sus comentarios y contribuciones! +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.31! @emph{24 de agosto de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.31. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.30! @emph{13 de agosto de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.30. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading El Informe LilyPond, número 19. @emph{9 de agosto de 2010} + +¡Vuelve el @emph{Informe LilyPond}, con sus dos editores: @qq{gruñón} +y @qq{blandito}! Esta edición contiene noticias sobre conferencias, +además de las acostumbradas notas sobre lanzamientos, el fragmento de +código del día, noticias desde la charca de las ranas, y el informe de +fallo del día. + +Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-19, +Informe LilyPond 19} y léalo ahora mismo; ¡animamos calurosamente a +todos a que hagan sus comentarios y contribuciones! +@newsEnd + + + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.29! @emph{4 de agosto de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.29. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +Esta versión cambia radicalmente las reglas del barrado automático, +por lo que debe emplear un cuidado especial y estar preparado para +algún resultado inesperado. +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.28! @emph{13 de julio de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.28. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +Esta edición incluye ciertos cambios importantes, no suficientemente +probados, en el editor lilypad para Windows. Los usuarios de Windows +no deben utilizar esta versión porque está orientada solamente a los +desarrolladores, pero si quiere ignorar nuestra advertencia y probarla +de todas formas, tenga especial cuidado. +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.27! @emph{5 de julio de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.27. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +@newsEnd + + +@newsItem +@subsubheading ¡Probando nuestra nueva página! @emph{29 de junio de 2010} + +¡Estamos probando nuestras nuevas páginas! Durante las próximas +24 horas, las páginas predeterminadas serán las de nuestro nuevo sitio; +después, cambiaremos de nuevo al sitio antiguo mientras +examinamos el retorno de los usuarios y efectuamos algunas +mejoras a las nuevas páginas. + +Envíe sus comentarios a @code{lilypond-user}; encontrará +más información en nuestra página de @ref{Contacto}. + +@warning{Existen algunos problemas conocidos con las traducciones. +Si no domina el inglés, quizá prefiera ver el sitio web anterior +de LilyPond en: @uref{http://lilypond.org/web/}} + +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.26! @emph{26 de junio de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.26. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.25! @emph{20 de junio de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.25. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.24! @emph{14 de junio de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.24. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.23! @emph{3 de junio de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.23. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.22! @emph{27 de mayo de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.22. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.21! @emph{12 de mayo de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.21. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +Esta versión debiera ser de especial interés +para los mantenedores de paquetes: hemos hecho algunos +cambios en el guión de configuración y en las bibliotecas +requeridas. Aparte de algún posible informe urgente de fallo, +éstos son el sistema de montaje y las bibliotecas que se van +a utilizar en la próxima edición estable. +@newsEnd + + +@newsItem +@subsubheading El Informe LilyPond, número 18. @emph{11 de mayo de 2010} + +¡Vuelve el @emph{Informe LilyPond}, con sus dos editores: @qq{gruñón} +y @qq{blandito}! Esta edición está repleta de emoción e interés, +bolsas de papel y pentagramas terminados en zigzag, además de las +secciones habituales Ranas y Bichos. + +Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-18, +Informe LilyPond 18} y léalo ahora mismo; ¡animamos calurosamente a +todos a que hagan sus comentarios y contribuciones! +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.20! @emph{5 de mayo de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.20. Esta +versión contiene el conjunto habitual de correcciones de fallos. Sin +embargo, aún quedan algunos problemas críticos, por lo que esta +versión está orientada solamente a los desarrolladores. + +Hay un pequeño cambio de sintaxis: las instrucciones no documentadas +@code{\cresc} y @code{\decresc} han cambiado. Además, el bloque de +[opciones] para el modo LaTeX de @code{lilypond-book} viene ahora +después del @code{@{lilypond@}}, según la práctica normal de LaTeX. +Como siempre, consulte el documento Cambios para ver más información. +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.19! @emph{24 de abril de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.19. Esta +edición contiene unas cuantas correcciones de fallos, como es usual. +Sin embargo, aún quedan 11 fallos críticos, por lo que esta versión +está orientada solamente a los desarrolladores. +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.18! @emph{16 de abril de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.18. Esta +edición contiene el número usual de correcciones de fallos, junto a +unas traducciones de la página web mejoradas. Sin embargo, aún quedan +14 fallos críticos, por lo que esta versión está orientada solamente a +los desarrolladores. +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.17! @emph{2 de abril de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.17. Esta +versión incluye la corrección de 4 fallos críticos. Sin embargo, aún +permanecen 15 fallos críticos, por lo que esta versión está orientada +solamente a los desarrolladores. +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.16! @emph{15 de marzo de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.16. Está +orientado solamente a los desarrolladores, e incluye la ronda usual de +corrección de fallos. +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.15! @emph{4 de marzo de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.15. Está +orientado solamente a los desarrolladores, e incluye algunas +actualizaciones del proceso de construcción del binario además de la +ronda usual de corrección de fallos. +@newsEnd + + +@newsItem +@subsubheading El Informe LilyPond, número 17. @emph{1 de marzo de 2010} + +¡Viva, vuelve el Informe, con un equipo nuevo! Dicen que dos cabezas +es mejor que una: ¿valdrá también para los diarios? Léalo y ¡díganos +qué le parece! En esta edición hablaremos de páginas web y poesía, +ranas y bichos, ¡por no mencionar una extensa reseña del editor +Frescobaldi! + +¿A qué espera? Acérquese y +¡@uref{http://news.lilynet.net/The-LilyPond-Report-17, lea el Informe +LilyPond número 17} (en inglés) ahora mismo! +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.14! @emph{27 de febrero de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.14. Esta +versión está orientada solamente a los desarrolladores, e incluye una +amplia actualización de las traducciones, además de la ronda usual de +correcciones de fallos. +@newsEnd + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.13! @emph{13 de febrero de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.13. Esta +versión está orientada solamente a los desarrolladores, y arregla +diversos problemas con el sistema de construcción de la documentación, +así como la adición de un marco de vista previa para el back-end de +salida SVG. Además, los archivos binarios instalables son ahora unos +6 Mb más pequeños. +@newsEnd + + +@newsItem +@subsubheading ¡Lanzado LilyPond 2.13.12! @emph{2 de febrero de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.12. Esta +versión está orientada solamente a los desarrolladores, y aporta más +estabilidad y menos bugs al sistema de construcción y a la guía del +colaborador. +@newsEnd + +@newsItem +@subsubheading Lanzado LilyPond 2.13.11! @emph{16 de enero de 2010} + +Nos complace anunciar el lanzamiento de LilyPond 2.13.11. Esta +edición está orientada solamente a los dearrolladores, y trae algunas +mejoras en el sistema de construcción, al guía del colaborador, y +arregla cuatro regresiones críticas contra versiones anteriores. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.10 released! @emph{December 31, 2009} + +We are happy to announce the release of LilyPond 2.13.10. This +release is intended for developers only, and brings a number of +improvements such as predictable regression test output filenames +and English names for feta filenames. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.12.3 released! @emph{December 20, 2009} + +We are happy to announce the release of LilyPond 2.12.3. This +version contains the long-awaited fix for our GUI on MacOS X 10.5 +and 10.6. In addition to the GUI fixes, this version contains +dozens of bugfixes backported from the unstable development +version. + +We recommend that all users upgrade to this version. This is the +last planned release in the 2.12 stable series; development now +shifts towards the upcoming 2.14 series. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.9 released! @emph{December 12, 2009} + +LilyPond 2.13.9 is now out. From 2.13.9 onwards, LilyPond is +licensed under the GNU GPL v3+ for code, and the GNU FDL 1.3+ for +documentation. In addition to the usual round of bugfixes, this +release adds a shortcut for repeated chords. + +Please note that 2.13 is an @strong{unstable development} branch; +normal users should continue to use 2.12. + +@newsEnd + +@newsItem +@subsubheading New Website! @emph{October 3, 2009} + +As you can see, we have a new website design. Many thanks to +texi2html and CSS for being so flexible! + +@newsEnd + + +@newsItem +@subsubheading LilyPond Report #16. @emph{September 6, 2009} + +The LilyPond Report is back! This short, informal opinion column is +about the LilyPond project: its team, its world, its community. +Read @uref{http://news.lilynet.net/The-LilyPond-Report-16, issue 16} +now! + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.3. @emph{July 2, 2009} + +This unstable release contains working menus in OSX 10.5; many +thanks to Christian Hitz for fixing this long-standing problem! +This release also contains numerous other bugfixes and features +such as ties with variable thickness, partially dashed slurs, and +eyeglasses.@* +We are planning another 2.12 release in the next week or two, +which will include the menu fixes for OSX 10.5. Normal users may +wish to wait for this release rather than using an unstable +release.@* +@ref{Cambios}, +@ref{Desarrollo}. +@newsEnd + + +@newsItem +@subsubheading A LilyPond weboldala magyarul. @emph{May 22, 2009} + +Elkészült a lilypond.org nagy részének magyar fordítása a LilyPond +honosítási projekt első lépéseként. A projekt célja a LilyPond +szabad kottaszedő szoftver minél széleskörűbben elérhetővé tétele +a magyar felhasználók számára a teljes weboldal és dokumentáció +lefordítása révén. A teljes dokumentáció lefordításához +közreműködőket keresünk. Ha részt vennél a honosításban, küldj egy +e-mailt a @code{harmathdenes AT gmail.com} címre!@* +Harmath Dénes, a LilyPond honosítási projekt +vezetője +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #15. @emph{May 18, 2009} + +The @emph{LilyPond Report} is a short, informal opinion column about the LilyPond project: +its team, its world, its community. +Follow @uref{http://news.lilynet.net/The-LilyPond-Report-15,this link} +to read the full issue... +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #14. @emph{April 13, 2009} + +The @emph{LilyPond Report} is back, on a new website! +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://news.lilynet.net/The-LilyPond-Report-14,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.12.2 and 2.13.0 — @emph{March 21, 2009} + +As a very belated announcement, the stable version of LilyPond is +now 2.12.2, and the next development version has begun with +2.13.0. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.12.0 @qq{Rune} — @emph{December 27, 2008} + +A new stable release of LilyPond is available. +@* +@uref{announce-v2.12,Announcement}, +@ref{Cambios}, +@ref{Descarga}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.65 — Release Candidate. @emph{December 2, 2008} + +This release has improvements to MusicXML import, contributed by +Reinhold Kainhofer, and adds support for splitting a book in several +book parts, contributed by Nicolas Sceaux. +Nested contexts of the same type are now allowed with any depth, and +overriding nested properties can be done with list syntax, thanks to +Neil Puttock. +This is hopefully the last Release Candidate before stable release 2.12, +so you are welcome to test this release if you can to report new +issues.@* +@bugfixes{2_11_65,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.64. @emph{November 18, 2008} + +LilyPond 2.11.64 is available. MusicXML import has been improved, +including church modes support, and a few bugs in the compilation +and documentation building processes are fixed. The three +documentation manuals are now fully translated in Spanish, thanks +to Francisco Vila. The font cache problem in Windows binaries +which used to cause excessive slowness should be fixed. +@* +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.63. @emph{October 29, 2008} + +LilyPond 2.11.63 is available. This release has lots of updates to the +documentation and translations. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.62 – Release Candidate. @emph{October 11, 2008} + +LilyPond 2.11.62 is available. This is is one of the last releases +before 2.12, so testing it is encouraged. In addition to a bugfix +in @code{\tempo} command, this release has lot of updates +to Spanish and German documentation translations, and the +stylesheet for HTML documentation has been improved. +@* +@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_62&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.61 available. @emph{October 1, 2008} + +LilyPond 2.11.61 has been released. It has updates to +documentation translations, and a new automatic accidentals style +(teaching) has been added. +@* +@bugfixes{2_11_61,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.60 available. @emph{September 25, 2008} + +LilyPond 2.11.60 has been released. A new style of double repeat +bar line has been added, and @code{printallheaders} variable in +score block has been renamed to @code{print-all-headers}. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.59 available. @emph{September 20, 2008} + +Release 2.11.59 is out. LilyPond now uses 64 bit integers for +rational numbers, which allows typesetting more complex polymetric +music. This release also has updates to German and Spanish +translations of the documentation. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.58 available. @emph{September 13, 2008} + +LilyPond 2.11.58 is a beta release, which means the next stable +release is expected in a few weeks. This release is also special, +as it includes code which supports more flexible automatic +accidentals rules, written several months ago by Rune Zedeler, +deceased since then. All the development team express their +condolences to his family and his friends. Besides this, +automatic beaming has been improved by Carl Sorensen, support +for creating stem flags in a new style has been contributed by +Reinhold Kainhofer, and a few bugs have been fixed. +@* +@bugfixes{2_11_58,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.57 available. @emph{August 27, 2008} + +LilyPond 2.11.57 is out. This release adds support for harp pedal +diagrams, contributed by Reinhold Kainhofer, and some changes in +markup command names have been made. +@* +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.56 available. @emph{August 17, 2008} + +LilyPond 2.11.56 is out. This release features transposable fret +diagrams, contributed by Carl Sorensen. Translations status pages +are now available from the documentation start page. Two +predefined commands @code{\pointAndClickOn}, +@code{\pointAndClickOff} have also been added. +@* +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.55 available. @emph{August 6, 2008} + +LilyPond 2.11.55 is out. This release fixes several bugs, and for octavation brackets +@code{set-octavation} has been replaced by a more user-friendly command, @code{\ottava}. +@* +@bugfixes{2_11_55,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.54 available. @emph{July 30, 2008} + +LilyPond 2.11.54 is out. This release fixes a bug in tie formatting +following a line break, and changes the behavior of @code{short-indent} +so that short instrument names are no longer indented in the margin. +@* +@bugfixes{2_11_54,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.53 available. @emph{July 23, 2008} + +LilyPond 2.11.53 is out. This release fixes a lot of bugs. +@* +@bugfixes{2_11_53,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.52 available. @emph{July 14, 2008} + +Release 2.11.52 fixes wrong offset of a bar number when it follows +a breath mark, and syntax changes made in recent development +releases are now fully listed on the News page. +@* +@bugfixes{2_11_52,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.51 available. @emph{July 8, 2008} + +Release 2.11.51 has a couple of bugfixes, and a lot of changes in +predefined command names. Fret diagrams formatting has been +improved by Carl Sorensen, it is now controlled +by @code{fret-diagram-details} property. +@* +@bugfixes{2_11_51,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.50 available. @emph{July 2, 2008} + +Release 2.11.50 adds support for metronome marks with text, and +backslashed numbers for figured bass, contributed by +Reinhold Kainhofer. +@* +@bugfixes{2_11_50,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #13. @emph{June 23, 2008} + +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-13,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #12. @emph{June 16, 2008} + +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-12,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.49 released. @emph{June 12, 2008} + +LilyPond 2.11.49 is out. It fixes a number of bugs, including bugs in beams formatting. +@* +@bugfixes{2_11_49,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.48 released. @emph{June 9, 2008} + +LilyPond 2.11.48 is out. This release fixes a few bugs, and +@code{\compressMusic} has been renamed +to @code{\scaleDurations}. +@* +@bugfixes{2_11_48,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #11. @emph{June 9, 2008} + +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-11,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #10. @emph{June 2, 2008} + +Welcome to this special tenth issue of the @emph{LilyPond Report}, entirely dedicated to Algorithmic Composition systems.@* +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-10,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.47 released. @emph{May 28, 2008} + +LilyPond now allows all text context properties to be markups, +except in @code{\lyricmode}. This release also fixes +regression tests maintenance for developers. +@* +@bugfixes{2_11_47,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.46 available. @emph{May 22, 2008} + +Release 2.11.46 fixes a lot of bugs and includes a rewrite of +dynamics engravers. Support for slur-shaped arpeggios has been added. +@* +@bugfixes{2_11_46,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading RSS feed - @emph{May 21, 2008} + +A RSS feed is now available on lilypond.org. It contains all +news announced on the web site start page: releases, LilyPond +report, new translations of the site and publications. +@uref{http://lilypond.org/web/lilypond-rss-feed.xml,Feed URL}. +The info mailing list (see @ref{Contacto}) is still used to +announce releases and special events. +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #9. @emph{May 05, 2008} + +Welcome to this ninth issue of the @emph{LilyPond Report}!@* +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-9,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.45 available. @emph{April 26, 2008} + +Release 2.11.45 fixes a couple of bugs in the formatting +engine. @code{lilypond-book} has been improved, with better +performance, a bugfix about included files, and more flexibility +for preprocessing documents with LaTeX variants. Support for +enclosing text in a rounded box has been contributed by Valentin +Villenave. +@* +@bugfixes{2_11_45,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.44 available. @emph{April 14, 2008} + +Release 2.11.44 is available. Support for figured bass and chord +names has been added to the MusicXML +converter. +@* +@bugfixes{2_11_44,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading lilypond.org日本語訳 (lilypond.org Japanese translation). @emph{2008å¹´4月8日 (April 4, 2008)} + +Lilypond.orgのいくつかのページの日本語訳が出来ました。 +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.43 available. @emph{March 31, 2008} + +Release 2.11.43 has been available since March 27. It fixes a +couple of formatting bugs, and the font cache problem with +MS-Windows binaries which caused excessive slowness has been +fixed. +@* +@bugfixes{2_11_43,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.42 available. @emph{March 9, 2008} + +Release 2.11.42 is out. It fixes some formatting and spacing +bugs. +@* +@bugfixes{2_11_42,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading Comparison of music engraving with Finale and LilyPond. @emph{February 25, 2008} + +In three articles, Andrew Hawryluk compares Finale and LilyPond in +general terms, and evaluates in detail engraving capabilities of +both pieces of software. The second article is an instructive +analysis of Rachmaninoff's Piano Prelude 6 engraving, including +comparisons with a reference hand-engraved edition. +@uref{http://www.musicbyandrew.ca/finale-lilypond-1.html,Read +the articles}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.41 available. @emph{February 25, 2008} + +Release 2.11.41 is available. It has a few bugfixes, updated +program messages in French, German, Spanish and Vietnamese, and +updates to the MusicXML converter. +@* +@bugfixes{2_11_41,}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.37 available. @emph{January 3, 2008} + +Release 2.11.37 is available. It has a few bugfixes, and +documentation changes. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.36 available. @emph{December 13, 2007} + +Release 2.11.36 is now available. It has many bugfixes, updates +for MusicXML import, and it includes major documentation changes from +Grand Documentation Project. +@* +@bugfixes{2_11_36,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.33 and 2.10.33 available. @emph{September 20, 2007} + +Release 2.11.33 is now available. +@* +@bugfixes{2_10_33,2.10}, +@bugfixes{2_11_33,2.11}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.32 available. @emph{September 2, 2007} + +Release 2.11.32 is now available. +@* +@bugfixes{2_11_32,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.31 available. @emph{August 31, 2007} + +Release 2.11.31 is now available. It has more bugfixes, updates +for MusicXML import and lots of updates for the translations. +@* +@bugfixes{2_11_31,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.30 available. @emph{August 20, 2007} + +Release 2.11.30 is now available. It has various bugfixes among +others in the new spacing code, MusicXML import and lots of updates +for the translations. +@* +@bugfixes{2_11_30,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.29 and 2.11.29 available. @emph{August 11, 2007} + +Release 2.11.29 is now available. 2.10.29 has a few small fixes. +2.11.29 has several bugfixes, among others in the new spacing code, +and lots of updates for the translations. +@* +@bugfixes{2_10_29,2.10}, +@bugfixes{2_11_29,2.11}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.28 for FreeBSD x86_64. @emph{August 10, 2007} + +Release 2.11.28 is now available as a binary installer for +FreeBSD x86_64. Download +@uref{http://lilypond.org/download/binaries/freebsd-64/lilypond-2.11.28-1.freebsd-64.sh,the installer} and +do @emph{sh lilypond-2.11.28-1.freebsd-64.sh} in a command window. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.28 available - @emph{July 25, 2007} +Release 2.11.28 has several updates to the manual and its +translations, an plethora of bugfixes and a complete cleanup of the +spacing engine code. +@* +@bugfixes{2_11_28,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.26 available - @emph{June 8, 2007} + +Release 2.11.26 supports page markers, eg. for use in +tables-of-contents. In addition, it fixes a number of bugs. Enjoy! +@* +@bugfixes{2_11_26,}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.25 and 2.11.25 available - @emph{May 20, 2007} + +Release 2.11.25 has support for toplevel page breaking commands, +and page breaking as a whole has been sped up significantly. Enjoy! +@* +@bugfixes{2_10_25,2.10}, +@bugfixes{2_11_25,2.11}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.23 and 2.11.23 available - @emph{May 1, 2007} +This has lots of bugfixes. +@* +@bugfixes{2_10_23,2.10}, +@bugfixes{2_11_23,2.11}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading Übersetzung der Dokumentation - @emph{10. April 2007} +Die Kapitel 1-5 (der Abschnitt für Anfänger) des +LilyPond-Benutzerhandbuchs +sind auf deutsch übersetzt — sie sind erhältlich für +die @ref{Cambios} +online und @ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.22 available - @emph{April 10, 2007} +This release has updates of the dot collision code. +@* +@bugfixes{2_11_22,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.21 available - @emph{March 24, 2007} +This release has some documentation updates. +@* +@bugfixes{2_11_21,}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading Traduction de la documentation en français - @emph{25 février 2007} +Les chapitres 1 à 4 et 6 du manuel de l'utilisateur sont +désormais traduits, et disponibles en ligne — @uref{@@DOC@@v2.10/Documentation/user/lilypond/index.fr.html,version +2.10}, @uref{@@DOC@@v2.11/Documentation/user/lilypond/index.fr.html,version +2.11}. Les traductions sont également incluses dans la @uref{install,documentation téléchargeable}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.20 and 2.11.20 available - @emph{February 25, 2007} +This release fixes many bugs. +@* +@bugfixes{2_10_20,2.10}, +@bugfixes{2_11_20,2.11}, +@ref{Cambios}, +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.19 and 2.11.19 available - @emph{February 18, 2007} +This release fixes many bugs. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_19&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.11}, +@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_19&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.10}, @ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.18 available - @emph{February 12, 2007} +This release fixes still more bugs, and included +singing support through festival contributed by Milan Zamazal. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_18&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.11}, @ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.17 available - @emph{February 9, 2007} +This release fixes still more bugs. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_17&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.11}, @ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.16 and 2.11.16 available - @emph{February 4, 2007} +This release fixes many bugs. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_16&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.11}, +@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_16&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.10}, +@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.15 and 2.11.15 available - @emph{February 1, 2007} +This release will stretch piano staves on a +system-by-system basis and add a few glyphs: a black harmonic note +head and the slashed mirrored flat. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_15&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.11}, +@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_15&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes +2.10}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.14 and 2.11.14 available - @emph{January 26, 2007} +This release has a rewrite of the line-spanner code, responsible for +among other glissandi and text-crescendos, making them more flexible. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_14&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.13 and 2.11.13 available - @emph{January 17, 2007} +This release fixes a few minor but irritating bugs. In addition, the +2.11 release has updates of the tutorial. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_13&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.12 available - @emph{January 17, 2007} +This release fixes lots of bugs. In particular, the tie formatting has +been further improved, and memory usage has been improved enormously. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_12&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.12 available - @emph{January 17, 2007} +This release mirrors 2.11.12. Notably, it has the same memory +usage improvements. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_12&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.11 available - @emph{January 12, 2007} +This release mostly has the same fixes as 2.11.11. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_11&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.11 available - @emph{January 11, 2007} +This release has further fixes for popular bugs. Timing of the MIDI +output won't get confused by tuplets and grace notes anymore. Some fat +has also been trimmed of the skyline code performance. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_11&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.10 available - @emph{January 8, 2007} +LilyPond 2.11.10 has further review of the test-suite, performance and +code coverage. This brought to light several problems that were +fixed. Notably, 2.11.10 fixes lots of regressions in optical +correction spacing and MIDI dynamics. Also, this version is 20 to 50 +% faster than previous 2.11 releases. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_10&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.10 available - @emph{January 8, 2007} +This release fixes several popular bugs, among others: MIDI files +that go silent after (de)crescendi, and tuplets problems with quoting +and part-combining (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_10&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.9 and 2.10.9 available - @emph{January 3, 2007} +This release has a couple of bugfixes, and —in 2.11.9&mdash +further improvements in the regression test suite (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_9&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.8 and 2.10.8 available - @emph{January 3, 2007} +New! Improved! With even more bugfixes! (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_8&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading @code{lilypond.org} auf deutsch - @emph{31. Dezember 2006} +Die LilyPond-Webseiten sind jetzt auch auf deutsch übersetzt! +@newsEnd + + +@newsItem +@subsubheading @code{lilypond.org} en español - @emph{December 29, 2006} +¡Ya está disponible la versión en español del sitio web de LilyPond! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.7 and 2.10.7 available - @emph{January 1, 2007} +New! Improved! With even more bugfixes! (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_7&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.6 available - @emph{December 30, 2006} +This release supports arbitrary fractional alterations, allowing +music with different microtonal conventions to be typeset. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_6&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.6 available - @emph{December 30, 2006} +New! Improved! With even more bugfixes! +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_6&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.5 available - @emph{December 24, 2006} +These releases complete the translation infrastructure for +Documentation. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_5&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.5 available - @emph{December 24, 2006} +New! Improved! With even more bugfixes! +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_5&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.4 available - @emph{December 21, 2006} +The vertical spacing improvements that were introduced in 2.11.0 now work +within a system as well as between systems. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_4&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.3 available - @emph{December 19, 2006} +This release has @uref{http://lilypond.org/doc/v2.11/compare-v2.10.3/index.html,graphical +test results} and several website build improvements. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_3&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.3 available - @emph{December 19, 2006} +This release fixes several bugs. +(@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_3&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LinuxPPC binaries available! - @emph{December 19, 2006} +From now on, our GUB binary builds include support for Linux/PPC. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading Traduction du tutoriel en français. @emph{December 13, 2006} +Fruit du travail d'une équipe de traducteurs, le tutoriel en +français est maintenant disponible en ligne. @uref{@@DOC@@v2.10/Documentation/user/lilypond/Tutorial.fr.html,Version +2.10}, @uref{@@DOC@@v2.11/Documentation/user/lilypond/Tutorial.fr.html,Version +2.11}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.2 available - @emph{December 12, 2006} +This release supports glissandi and harmonics in tablature. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_2&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.2 available - @emph{December 12, 2006} +A new stable release of LilyPond is available. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_2&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.1 available - @emph{December 4, 2006} +This release has improved support for horizontal spacing. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_11_1&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.1 available - @emph{December 3, 2006} +A new stable release of LilyPond is available. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_10_1&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.0 available - @emph{November 27, 2006} +This release has improved support for vertical spacing. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.0 available - @emph{November 11, 2006} +A new stable release of LilyPond is available. (@uref{announce-v2.10.html,Announcement}, @ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading GIT repository online - @emph{November 11, 2006} +LilyPond development has moved over its source code to @uref{http://git.or.cz,GIT}, the fast version control +system. Check out our repository at @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=summary,gnu.org}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.29 available - @emph{November 5, 2006} +This release has many more bugfixes. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_9_29&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.28 available - @emph{November 3, 2006} +This release has many more bugfixes. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_9_28&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.27 available - @emph{October 28, 2006} +This release has a new @code{FretBoards} context, and some further +bugfixes. (@ref{Cambios}, @uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_9_27&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading Music streams thesis available - @emph{October 21, 2006} +The last months, Erik Sandberg has been overhauling the internals of +Lily. This change introduces a new intermediate format, Music Streams, +which will make it easier get music data out of LilyPond. A copy of +the thesis is now available from lilypond.org +(@ref{Publicaciones}). +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.26 available - @emph{October 20, 2006} +This release has further bugfixes. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_9_26&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.25 available - @emph{October 18, 2006} +This release has more bugfixes; from now on, binaries are also +available for x86/64. (@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed_2_9_25&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.24 available - @emph{October 15, 2006} +This release has support for right hand guitar fingerings, and offers +some bugfixes. (@ref{Cambios}, +@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed2924&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.23 available - @emph{October 12, 2006} +This release cuts fragments of EPS directly from your finished score, +and makes it easier to insert ties into lyrics. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.22 available - @emph{October 9, 2006} +Test this release candidate for LilyPond 2.10! (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.21 available - @emph{October 4, 2006} +Test this release candidate for LilyPond 2.10! (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.20 available - @emph{October 3, 2006} +Test this release candidate for LilyPond 2.10! (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.17 available - @emph{September 2, 2006} +This release fixes many bugs. Among others, MacOS X QuickTime now +honors tempo changes are in the MIDI output. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.16 available - @emph{August 25, 2006} +In this release, chords may be partially tied and lyric extenders have +tunable padding. Moreover, many bugs were fixed +(@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.15 available - @emph{August 20, 2006} +This releases fixes many bugs in the 2.9.14 release. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.6 available - @emph{August 8, 2006} +This release contains a few minor bugfixes; the source tarball is also +available. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.14 available - @emph{August 4, 2006} +This release supports instrument name changes, dotted barlines and +better spacing for floating grace notes. In addition, it contains +ongoing work by Erik Sandberg to extend the interpretation phase with +stream support. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.13 available - @emph{July 23, 2006} +This release supports doits and falls, and more tuning options for +grace note spacing and tuplet brackets. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.12 available - @emph{July 18, 2006} +This release supports pdftex for lilypond-book, and uses PdfTeX for +generating manuals, so page numbers and references are now clickable. +(@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.11 available - @emph{July 12, 2006} +This release wraps improvements of the last two weeks. As a new +feature, it supports tunable tuplet number formatting for nested +tuplets. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.10 available - @emph{June 15, 2006} +This releases fixes a couple of bugs in 2.9.9. +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.9 available - @emph{June 15, 2006} +This releases fixes many bugs in 2.9.8 and earlier. +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.8 available - @emph{June 6, 2006} +2.9.8 has support for different spacing sections within a single +score, and better infrastructure for automated regression testing. +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.4 available - @emph{June 4, 2006} +2.8.4 fixes some minor bugs, and includes a backport of the +infrastructure for automated regression testing. +(@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading First test results available - @emph{June 4, 2006} +After a week of frantic tweaking, the first automated testing results +are available. You can now see @uref{http://lilypond.org/doc/v2.9/compare-v2.8.4/index.html,in full +glory} what features are broken in the development release +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.7 available - @emph{May 30, 2006} +2.9.7 has improvements in the formatting for figured bass, and +includes a new framework for detecting bugs earlier, which will make +the development releases even better +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.6 available - @emph{May 24, 2006} +This +release has new features in beam formatting: beams may now be put on +single stems, and obey the @code{beatGrouping} property. MusicXML +converter. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading New essay pages! - @emph{May 22, 2006} +The @emph{Automated Engraving} essay has been updated with material +from the @uref{http://fisl.softwarelivre.org,FISL} talk, with +pages on @uref{about/automated-engraving/problem-statement,modeling +notation} and @uref{about/automated-engraving/scoring-esthetics,algorithms for +esthetics}. Happy reading! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.5 available - @emph{May 17, 2006} +This release supports object rotation, hairpins with circled tips, +hairpins that run to barlines before notes and improvements in the +MusicXML converter. +(@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.4 available - @emph{May 12, 2006} +This release has support for feathered beaming, and note head styles in +the markup @code{\note} command. In addition, it has a lot of updates +of the manual and a clean up of the spring spacer. +(@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.2 available - @emph{May 12, 2006} +This release has fixes for minor bugs and compilation issues. +(@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.3 is out! - @emph{May 7, 2006} +This new release has lots of updates of the manual, courtesy Graham +and the contributors of the mailing. It handles formatting for ties in +arpegiated chords better (feature sponsored by +Steve Doonan), it has al niente hairpins, courtesy of Erlend Aasland, +and some cleanups of the PostScript output, courtesy David Feuer. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading FISL7.0 slides available - @emph{April 22, 2006} +The slides for Han-Wen's talk at +@uref{http://fisl.softwarelivre.org,FISL 7} are now online. +(@ref{Publicaciones}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.1 is out! - @emph{April 3, 2006} +Important bugfixes include CJK font handling and a Darwin/x86 port. +(@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.1 is out! - @emph{April 3, 2006} +It's mostly a bugfix release, and it's almoste the same as 2.8.1. This +release mainly fixes problems with CJK font loading. +(@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond on MacOS X/Intel - @emph{March 31, 2006} +LilyPond now also runs on Intel based macs, offering a 400% +speedup over the emulated PowerPC binaries. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.0 is out! - @emph{March 22, 2006} +Version 2.8 is here! Read the @uref{announce-v2.8.html,release +announcement}. (@ref{Cambios}, @ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.39 is out - @emph{March 17, 2006} +This release has even more bug fixes. Please test before 2.8 is +released. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.38 is out - @emph{March 12, 2006} +This is likely to be the last release candidate before we release 2.8, +so report any bugs that you might find. New attractions include: +lilypond postscript files now work with GSView, cut & pasting lily +code from PDF files should now work, and spacing fixes for +multi-measure rests. +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.37 is out - @emph{March 4, 2006} +This release has more bug fixes. Please help us by testing it! +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.36 is out - @emph{February 24, 2006} +This is another release candidate for 2.8. It has lots of bug fixes +and polishes to the documentation. It also contains support for +creating ties that are only on their right side connected to note +heads, which is handy for repeats (feature sponsored by Steve Doonan). +The documentation suite can now be downloaded as a separate tarball +from lilypond.org. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.35 is out - @emph{February 19, 2006} +This release has lots of bugs fixes. The plan is to release 2.8 at the +end of this month, so bug reports are @strong{very} welcome. By +definition a bug is release critical if it wasn't present in version +2.6. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.34 is out - @emph{February 16, 2006} +This release has a bunch of bugfixes, and new features. Newly created +contexts may also be named with @code{\new Voice = +"alto"}. Thicknesses of tie and slurs may be tuned separately for +the endings and the middle +part. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.33 is out - @emph{February 10, 2006} +Items directly connected with a music input element may be +parenthesized, for example, +@verbatim +{ + c4 -\parenthesize -. + +} +@end verbatim + +This feature was sponsored by Ramana Kumar. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.32 is out - @emph{February 7, 2006} +This release contains some syntax changes: words inside the \paper and +\layout block are henceforth written with dashes, for instance: + +@verbatim +{ + \layout { + ragged-right = ##t + } +} +@end verbatim + +Furthermore, in this release, we have dropped some legacy code from +our library. Now, lily uses standard C++ strings and the STL +vector. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.31 is out - @emph{February 2, 2006} +This release fixes a load of bugs, and has some internal +cleanups. Exported C++ members are now named +ly:class-name::function-name in Scheme instead of +Class_name::function_name. We are now using C++ vectors and strings +instead of our own. The Linux/FreeBSD builds now include wrappers for +Python scripts too, so you can run convert-ly and midi2ly. +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.30 is out - @emph{January 30, 2006} +This release has a few bug fixes, like the solfa note head shape and +collisions, the \epsfile command, and in getting No. ligature in +normal words. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.29 is out - @emph{January 27, 2006} +This release has the following new features. Alignments of staves may +be tuned per system (feature sponsored by Trevor Baca), individual +systems may be positioned manually (feature sponsored by Trevor Baca +and Nicolas Sceaux), a linebreaking configuration can now be saved as +a `.ly' file automatically. This allows vertical alignments to be +stretched to fit pages in a second formatting run (feature sponsored +by Trevor Baca and Nicolas +Sceaux). (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.28 is out - @emph{January 22, 2006} +This release contains numerous small fixes that were already in our +GUB binaries. In addition, it has further polish for formatting of +tied chords. Theses improvements were sponsored by Steve +Doonan. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27, release 4 - @emph{January 13, 2006} + +The fourth release of our Grand Unified Binary for 2.7.27 is +available. This release uses Pango 1.11.1, which has support for +ligatures and kerning. Enjoy! (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27, release 3 - @emph{January 12, 2006} +The third release of our Grand Unified Binaries is available. This +release fixes external font-support, the decompression flag for +Linux. Also, we have support for @strong{FreeBSD} as well! Jump +to the @ref{Descargas antiguas} get them! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27 binaries are out - @emph{January 7, 2006} +Starting with 2.7.26, the development team has been working on the +installers. We're proud to announce another version of these: they are +now available for +@uref{http://lilypond.org/download/binaries/linux-x86/lilypond-2.7.27-1.linux.sh, +Linux/x86}, +@uref{http://lilypond.org/download/binaries/MacOS/lilypond-2.7.27-2.zip, +MacOS X} and +@uref{http://lilypond.org/download/binaries/mingw/lilypond-2.7.27-2.exe, +Windows}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27 is out - @emph{January 7, 2006} +This release allows you to switch staff lines on and off individually +(feature sponsored by Andrea +Valle). (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading Linux Journal article - @emph{January 2006} +Linux Journal publishes an article on +@uref{http://www.linuxjournal.com/article/8364,@emph{Make +Stunning Schenker Graphs with GNU LilyPond}}. It is a +in-depth but hands-on feature article with crisp LilyPond +graphics. +@* +Author Kris Shaffer remarks +“GNU Lilypond generates beautiful graphics that make commercial +alternatives seem second-rate.” +This article is now available @uref{http://www.linuxjournal.com/article/8583,on-line}. +@newsEnd + + +@newsItem +@subsubheading New binaries for LilyPond 2.7.26 - @emph{January 4, 2006} +The Development team has been working around the clock to improve +to fix the first wave bugs reported by you. The new results for MacOS +and Windows are up on the @ref{Descargas antiguas} +page. Let us know how you fare! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.26 is out - @emph{December 31, 2005} +This release has an improvement in the MusicXML importer (feature +sponsored by Mark vd Borre's Music Academy): now, staves and voices +are also setup, so you can readily run LilyPond on the .ly output. +The important occasion for this release is our new build +environment: we have completely revamped it, which means that binaries +for all platforms (including MacOS, Windows, Linux/x86, but probably +FreeBSD too) will be more quickly available for download. +A happy 2006 from the LilyPond Development Team! +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.25 is out - @emph{December 24, 2005} +This release has various bugfixes. Also, stems on the center line now +have their directions interpolated to minimize the number of direction +changes (feature sponsored by Basil Crow and Mike +Rolish). (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.24 is out - @emph{December 20, 2005} +This release fixes a couple of bugs, but more importantly, slurs now +avoid TupletNumbers, and tuplet numbers may enter the staff (feature +sponsored by Trent Johnston), tuplet brackets and numbers are +implemented as separate grobs, TupletBracket and TupletNumber (rewrite +sponsored by Trent Johnston), string arguments for music functions may +be specified without # marks. This allows syntactical constructs (like +\clef and \bar) to be expressed in generic music +functions. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.23 is out - @emph{December 19, 2005} +This release has the following new features: +@itemize +@item +Ties in chords are also formatted using score based +formatting. This reduces the number of collisions for ties in chords +(feature sponsored by Steve Doonan). +@item +With the \tweak music function, layout objects that are directly +connected to input may be tuned easily (feature sponsored by Sean Reed +and Bertalan Fodor). +@item +Generic music functions may now also be used on +articulations and chord elements (feature sponsored by Sean Reed and +Bertalan Fodor). +@item +Better support for MusicXML, more options for spacing Lyrics; +it is now possible to separately specify minimum distances for normal +and hyphenated syllables (features sponsored by Mark van den Borre and +Bertalan Fodor. +@end itemize +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.22 is out - @emph{December 9, 2005} +This release has better support for MusicXML: it also supports ties, +beams and editorial accidentals. It also has more options for spacing +Lyrics; it is now possible to separately specify minimum distances for +normal and hyphenated syllables. These features were sponsored by Mark +van den Borre and Bertalan +Fodor. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.21 is out - @emph{December 5, 2005} +Saint Nicholas brings you ... a @uref{http://www.musicxml.org/,MusicXML} convertor for LilyPond! +The convertor is basic, but working. Check out the @uref{http://www.lilypond-design.com/sponsor/open-features.html#inputfilter, +LilyPond Software Design} pages for MusicXML features that can be +sponsored. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.20 is out - @emph{December 2, 2005} +This release contains the following improvements: Texts set in a +TrueType font are now kerned. Using the TeX no longer requires linking +or dynamically opening the kpathsea library, making the backend more +easily usable on various systems (feature sponsored by Christian Ebert +of Black Trash +Productions). (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.5 is out - @emph{December 1, 2005} +This release updates the bugreporting address and reorganizes the +documentation tree. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.19 is out - @emph{November 26, 2005} +This version contains a few bugfixes, and now allows the type of +brackets in system start bracket hierarchies to be specified. Also, +the horizontal alignment of rehearsal marks may be changed: marks can +be put on key signatures, clefs, time signatures, +etc. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.18 is out - @emph{November 21, 2005} +This version features nestable system start delimiters, like bracket, +brace. It also adds "square" line bracket (feature sponsored by Trevor +Baca). It also has refactored routines for tie formatting. This will +make it easier to get better tie formatting for chords (feature +sponsored by Steve Doonan). It also has a few bug +fixes. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.17 is out - @emph{November 17, 2005} +This version has refactored routines for tie formatting. This will +make it easier to get better tie formatting for chords (feature +sponsored by Steve Doonan). It also has a few bug +fixes. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.16 is out - @emph{November 11, 2005} +This release fixes a large number of bugs. Please upgrade before +reporting bugs in the 2.7 series. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.15 is out - @emph{November 3, 2005} +This release has another massive cleanup of the backend. Each grob +property may also be a "grob closure". This means that it is possible +to combine functions. Calculation of extent and offset of grob is now +controlled via the `X-extent', `Y-extent', `X-offset' and `Y-offset' +properties. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.14 is out - @emph{October 23, 2005} +This release has more cleanup in the layout-engine. Now, +properties that have Procedure values are thought to be procedures +that compute said property, i.e. +@verbatim + +\override Beam #'direction = #(lambda (grob) +(if (> (random 10) 5) UP DOWN)) + +@end verbatim +will set a random direction for beams. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.13 is out - @emph{October 18, 2005} +This release features slashed numerals, plus signs and interruptible +extender lines for figured bass. Merging of Figured bass lines has +been made switchable with the figuredBassCenterContinuations +property. For each grob, a subproperty in `callbacks' property defines +the procedure which computes it. This is major internal cleanup, which +also provides advanced tweakability for power +users. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.4 is out - @emph{October 11, 2005} +This release fixes a few minor problems with the stable +series. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.12 is out - @emph{October 07, 2005} +It features more annotations for the page layout engine and some more +sponsored features. Beamlets may stick out of the side of beams +(feature sponsored by Trevor Baca); new support for figured bass with +support for continuation lines and tuning of figures, brackets, and +alignments (feature sponsored by Trent Johnston); vertical alignments +of staves can now be tuned easily for individual systems (feature +sponsored by Nicolas +Sceaux). (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.11 is out - @emph{October 02, 2005} +Vertical spacing for page layout can now be tuned for each system +individually (feature sponsored by Trevor Baca and Nicolas +Sceaux). The slope of a stem-tremolo may be set manually (feature +sponsored by Sven Axelsson). There are a number of cleanups in the +handling and representation of systems, among other features and bug +fixes. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.10 is out - @emph{September 13, 2005} +This version adds proper support for "laissez vibrer ties", just enter +\laissezVibrer after a chord. This feature was sponsored by Henrik +Frisk. It also has a couple of minor +bugfixes. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.9 is out - @emph{September 5, 2005} +This is mainly a bugfix +release. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading Traduction française du site - @emph{September 03, 2005} +Grâce à @uref{about/thanks#website,l'équipe des traducteurs}, +de nombreuses pages du site sont maintenant disponibles en français, +notamment l'@uref{about/automated-engraving/index.fr.html,essai sur +la gravure musicale}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.8 is out - @emph{August 29, 2005} +This release has support for right-to-left text formatting in markup +commands (sponsored by Aaron Mehl). In addition, it fixes a great +number of bugs, among others, support for writing MIDI files. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading Article in `De Standaard' - @emph{August 20, 2005} +The Belgian newspaper @emph{De Standaard} investigates what drives +Free Software authors in an article titled @emph{Delen van KENNIS +zonder WINSTBEJAG} (Non-profit sharing of +knowlegde) using LilyPond as an example. This marks +LilyPond's first appearance in mainstream printed press. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.7 is out - @emph{August 22, 2005} +This release has a rewriting of tie formatting which was sponsored by +Bertalan Fodor, Jay Hamilton, Kieren MacMillan, Steve Doonan, Trevor +Baca, and Vicente Solsona +Dellá. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.6 is out - @emph{August 19, 2005} +This release adds support for numbered percent repeats, a feature +sponsored by Yoshinobu Ishizaki. It also has bugfixes for clashes +between slurs and symbols, like fingers dynamic +signs. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.5 is out - @emph{August 16, 2005} +Lily 2.7.5 has a large number of bugfixes, among others, in slur +formatting, spacing, rest collisions and tuplet bracket +formatting. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.4 is out - @emph{August 7, 2005} +LilyPond 2.7.4 has support for proportional notation, where the space +for a note is proportional to the time it +takes. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.3 is out - @emph{August 4, 2005} +This release fixes a memory corruption bug that was triggered by +\override'ing Beam settings. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.2 is out - @emph{August 2, 2005} +This release has a few bugfixes, among them: the autopackage will run +in more platforms, LilyPond will be much quicker for large +lilypond-book documents, and the up and down Fa note heads for shaped +heads have been +swapped. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.3 is out - @emph{July 25, 2005} +LilyPond 2.7.3 has improvements in performance which should result in +faster operations (15 to 20 percent). It also contains the new +"\displayLilyMusic" function. +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.2 is out - @emph{July 21, 2005} +LilyPond 2.7.2 has support for suggested accidentals for musica +ficta notation, easy entry for lyric melismata and improvements for +quicker entry of scores. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6 released - @emph{June 27, 2005} +Version 2.6 is the latest stable release of LilyPond. +It now +installs in a snap on Windows, MacOS X, and any version of Linux (x86). +@strong{Get up and running in minutes!} Pango text formatting lets you +print @strong{Unicode } lyrics in your favorite script and font. Create +@strong{SVG} files, and edit them in Inkscape. +(@uref{announce-v2.6.html,Announcement}, @ref{Descargas antiguas}, @ref{Cambios}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.1 is out - @emph{July 20, 2005} +LilyPond 2.7.1 has no user-visible changes. However, due to +restructuring @qq{under the hood}, this version will be 10 to +20 % faster. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.1 is out - @emph{July 11, 2005} +This version fixes a few minor bugs found in +2.6.0, and also works on DOS-based Windows versions. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7 is out - @emph{July 9, 2005} +LilyPond 2.7.0 is out. It has support for paragraph text and +pitched trill notation. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.31 released - @emph{June 22, 2005} +LilyPond 2.5.32 is now available for download (binaries for Fedora + +MacOS only). It has a few very minor bugfixes, and a rewrite of the +TTF embedding code, which should be a lot more robust now. +(@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading Traduction du site de LilyPond - @emph{15 juin 2005} +@uref{about/thanks#website,L'équipe des traducteurs} vous présente +le site de LilyPond en français. Nous travaillons sur la traduction des +pages encore non traduites. Bon surf ! +@newsEnd + + +@newsItem +@subsubheading 2.5.31 for Windows and MacOS - @emph{June 15, 2005} +2.5.31 is now available for both Windows and MacOS X. The Windows +version should now work with embedding TTF fonts, and the MacOS X has +better help functionality. +(@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.31 released - @emph{June 15, 2005} +This release has a few bugfixes. In the MacOS X version, ClickEdit has +been renamed to LilyPond, and you can now upgrade your files and +compile them directly from +LilyPond. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.30 released - @emph{June 10, 2005} +This is (hopefully) the last Release Candidate before 2.6. Give it a +good shake to find those last bugs! (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.29 released - @emph{June 7, 2005} +In this release the documentation also has pictures. In addition, the +Mac version can also read native mac fonts (.dfonts and fonts in +resource forks). (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.27 released - @emph{May 31, 2005} +It has a big bunch of minor bugfixes. This is another release +candidate for version 2.6, which should be released within the next 2 +weeks. Please send a bug report if you find a critical problem with this +release. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading Windows and MacOS installers available - @emph{May 26, 2005} +There are now a native, standalone installers for Windows and +MacOS. They also support PDF point & click. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.26 released - @emph{May 26, 2005} +This release has a couple of small bugfixes. +@newsEnd + + +@newsItem +@subsubheading 2.5.25 released - @emph{May 20, 2005} +This release has many small bugfixes and updates to the +documentation. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.24 released - @emph{May 12, 2005} +2.5.24 fixes a bunch of bugs; in particular, chord symbols (such as +slashed o) should now work on all platforms. This release has a new +feature: it is now possible to make staves appear in a different order +from the order that they were defined. (@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.23 released - @emph{May 6, 2005} +This release has a couple of small bugfixes, and a new feature. It is +now possible to start and stop the @code{StaffSymbol}, during a piece of +music, by doing @code{\stopStaff \startStaff}. This can be used to produce +Ossia +staves. (@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading 2.5.22 released - @emph{May 3, 2005} +2.5.22 is a bugfix +release. The most visible improvement is in the PDF : this release +will produce smaller PDF files, with symbols that look better on +screen. +(@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading April 25, 2005 - 2.5.21 released! +2.5.21 has more bugfixes. It also has support for "grid +lines", bar like vertical line, which are aligned with the notes. The +auto-beam engraver was rewritten, so it also works with irregular time +signatures like 5/8. +(@ref{Cambios}, +@ref{Descargas antiguas}) +@newsEnd + + +@newsItem +@subsubheading April 18, 2005 +LilyPond 2.5.20 has lots of bugfixes, in particular, MIDI files of +multi-movement pieces don't overwrite each other. Version 2.5.20 also +supports putting arrows on lines, such as glissandi. +More details are in the +the @ref{Cambios} +file, or go straight to @ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading April 15, 2005 +LilyPond 2.5.19 was released. The command `\epsfile' allows inclusion +of EPS graphics into markup texts and the music function +`\musicDisplay' will display a music expression as indented +Scheme code. Take a look at +the @ref{Cambios} +file and @ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading April 6, 2005 +2.5.18 is a bugfix release. It has many small cleanups in the +web-based documentation, and many small cleanups all over the +place. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading March 31, 2005 +2.5.17 is out. This release features many small bugfixes. In addition, +it has support for string number notation for guitar. This feature was +sponsored by Gunther Strube. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading March 20, 2005 +LilyPond 2.5.16 is out. This release fixes a few minor but irritating +errors. A Fedora Core 3 binary is also available. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading March 14, 2005 +LilyPond 2.5.15 is out. This release has clean ups in the SVG output, +and now uses the LilyPond number font for time signatures. It is +now possible to add text before and after music. This can be used to +add verses after a music. Take a look at the @ref{Cambios} +file and @ref{Descargas antiguas}! +@newsEnd + + +@newsItem +@subsubheading March 7, 2005 +LilyPond 2.5.14 is out. It is now possible (and in fact, encouraged), +to build LilyPond either without the Kpathsea TeX library or with the +Kpathsea dynamically loaded, but only for the -btex backend. This +means that packages do not have to depend on TeX anymore. With this, +the Windows download size will go down significantly. Take a look at +the @ref{Cambios} +file and download @ref{Descargas antiguas}! +@newsEnd + + +@newsItem +@subsubheading March 7, 2005 +LilyPond 2.4.5 is out. This release backports the tieWaitForNote +feature and has support for tetex-3.0. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 28, 2005 +LilyPond 2.5.13 is available for Fedora Core 3. You need to install @uref{http://lilypond.org/download/binaries/Fedora-3/ghostscript-8.15rc3-0.i386.rpm,ESP +Ghostscript 8.15rc3}. Unfortunately, this version of Ghostscript +lacks the IJS dynamic library, which means that it will conflict with +the gimp-print package. You may install it with --nodeps. Use at your +own risk. +@newsEnd + + +@newsItem +@subsubheading February 28, 2005 +LilyPond 2.5.13 is out. This release has Point and click support for +PDF output. You can read more about it @uref{http://lilypond.org/doc/v2.5/Documentation/user/out-www/lilypond/Point-and-click.html,here}. +Take a look at the @ref{Cambios} +file and download @ref{Descargas antiguas}! +@newsEnd + + +@newsItem +@subsubheading February 26, 2005 +The @uref{http://lsr.dsi.unimi.it/,Lilypond Snippet +Repository (LSR)} is a searchable database of Lilypond code +snippets. You can add snippets too, so join the LSR project, and +contribute creative ideas for using Lilypond. +@newsEnd + + +@newsItem +@subsubheading February 21, 2005 +LilyPond 2.5.12 is out. The big news is that this release supports +TrueType fonts. This means that it is now possible to use @strong{all} +fonts available via FontConfig. Also, arpeggios may be written out +using ties and individual objects may have colors! Take a look at +the @ref{Cambios} +file and @ref{Descargas antiguas}! +@newsEnd + + +@newsItem +@subsubheading February 4, 2005 +LilyPond 2.5.11 is out. In this +release, foreign character sets are now supported in lilypond-book +too, and it is possible to put system separators between systems. +@ref{Descargas antiguas}! +@newsEnd + + +@newsItem +@subsubheading January 31, 2005 +LilyPond 2.5.10 is out. This release +sports as new EPS backend, based on the PS backend. This backend is +used in the new and improved lilypond-book script. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 26, 2005 +LilyPond 2.5.9 is out. This release fixes a couple of annoying +bugs in the direct PS output for piano braces. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 16, 2005 +LilyPond 2.5.8 is out. This +release has many internal code cleanups. In addition, +accuracy of error reporting has been improved. +See the +@uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.3065&content-type=text/vnd.viewcvs-markup, +change log +} and @ref{Descargas antiguas}! +@newsEnd + + +@newsItem +@subsubheading January 11, 2005 +LilyPond 2.5.7 is out. This release has a completely usable +Pango integration for the PS backend. The default font is +Century Schoolbook from the PS font suite. It also has +small updates to the tablature settings by Erlend Aasland, +assorted manual updates by Graham, and an overhaul of the +font code by Werner. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.3048&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading January 02, 2005 +LilyPond 2.5.6 was released. This is a "technology preview" +release, which means that it has all kinds of nifty +features, but is not actually usable for producing nicely +printed scores. For this reason, an RPM of this release was +not produced. The PS backend is now completely switched over +to Pango/FontConfig: for -f ps, LilyPond only accepts UTF8 +input, all text fonts are loaded through Pango, the TeX +backend now offloads all metric computations to LaTeX, the +SVG and GNOME backends are broken, most probably. +@ref{Descargas antiguas} +and check out the +changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.3013&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading December 28, 2004 +LilyPond 2.5.5 is out. It is the first one to link against +FontConfig and Pango, although it is only available in the "-f +ps" output. The default output format has been changed back TeX +while we stabilize the Pango/FontConfig integration. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev= 1.3000&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading December 20, 2004 +LilyPond 2.5.4 is out. This release has some major +brainsurgery in the font handling. As of now, LilyPond loads +the music fonts in OpenType font format using FreeType. +This has made a lot of things simpler, including font +handling for the GNOME backend and SVG backend. +@ref{Descargas antiguas} +and check out the +changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2974&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading December 3, 2004 +LilyPond 2.5.3 was released. A new script, `\espressivo' has +been added, for a combination of crescendo and decrescendo +on a single note. In markups, expressions stacked with +`\column', `\center-align', etc, are not grouped with `< ... +>' anymore, but with `@{ ... @}'. LilyPond will now avoid line +breaks that cause long texts to stick outside of the page +staff. Grace notes following a main note, used to be entered +by letting the grace notes follow a skip in a parallel +expression. +@ref{Descargas antiguas} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2908&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 26, 2004 +LilyPond 2.5.2 was released. It has several goodies, +including solfa-notation (shaped noteheads), and an easier +mechanism for customizing title, footer and header +layout. Don't forget to rebuild the fonts, as they have been +changed to accomodate the solfa-notation. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2898&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 20, 2004 +LilyPond 2.5.1 is out. This is an experimental release, +containing some proof-of-concept code for our graphical +layout editor. You can add and remove things from the file, +and the tweaks will still work, as long as the tweaked notes +remain in the place (ie. start at the same time-wise and be +part of the same context). Further attractions are: the +gnome backend now also draws beams and slurs, updates to the +SVG backend, support for the lmodern font set for TeX, +various bugfixes. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2881&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 12, 2004 +The LilyPond development is OPEN once again! The first +release of the 2.5 series has the following new Features: +Positioning of slurs can now be adjusted manually, Grace +notes are correctly quoted and formatted when using cue +notes, Cue notes can now be created with +@verbatim + +\cueDuring #VOICE-NAME #DIRECTION { MUSIC } + +@end verbatim +Stemlets (short stems over beamed rests) have been added. +In addition, Jan hacked together some highly experimental +code where you can use the mouse to drag and drop objects in +the -f gnome backend. These tweaks can be saved and are +applied to the PS and TeX output as well. +@ref{Descargas antiguas} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2837&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 11, 2004 +LilyPond 2.4.2 is out. This release fixes a number of security +problems with --safe, and adds a lot of polishing fixes. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading November 4, 2004 +LilyPond 2.4.1 is out. This release includes a number of small +fixes that were made to 2.4.0 last week. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2780.2&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 31, 2004 +LilyPond 2.4.0 was just @uref{announce-v2.4.html,released!} +This new stable version has support for page-layout, +completely rewritten slur formatting and many other +improvements. Read about them in the @ref{Cambios} +file. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading October 29, 2004 +LilyPond 2.3.26 is out. This is another 2.4 release +candidate. This release fixes a number of minor bugs, and +some problems with the conversion scripts. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2773&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 29, 2004 +2.3.25 is the final release candidate for Lilypond 2.4. +Werner has been overhauling the TeX macros and +lilypond-book. In addition, this release contains an +important fix for raggedbottom page-layout. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2765&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 27, 2004 +LilyPond 2.3.24 is a further polished 2.4 release candidate. +This release has more improvements by Werner for the TeX +backend, and a bunch of other small fixes. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2752&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 24, 2004 +LilyPond 2.3.23 has bugfixes in the documentation, lilypond-book and +--preview output. This release can be considered as a release +candidate for LilyPond 2.4. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2742&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 10, 2004 +LilyPond 2.3.22 fixes a bunch more bugs, to make 2.4 a really +stable release. In addition, it renames the \paper@{@} block to +\layout@{@}. The \bookpaper@{@} block is now called +\paper@{@}. +@ref{Descargas antiguas} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2709&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 09, 2004 +LilyPond 2.3.21 is out. It is a serious release candidate for +the next stable release LilyPond. This version has a cleanup +and some small formatting improvements of the slur +code. +@ref{Descargas antiguas} +and check +out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2692&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 02, 2004 +LilyPond 2.3.20 was released. It fixes the biggest problems +with encoding and the TeX backend. As a result, latin1 +characters (like the german SS) show up correctly in the +output once again. Also it has the usual bugfixes and updates +in the documentation. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2674&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 29, 2004 +The LilyPond development team will be present at the @uref{http://www.nluug.nl/events/sane2004/bazaar/index.html,Free +Software Bazaar} of the NLUUG SANE 2004 conference today. If you +are in the neighborhood, drop by for live contact with the Team or +just a friendly chat. Registration is not required to attend. +@newsEnd + + +@newsItem +@subsubheading September 26, 2004 +LilyPond 2.3.19 is out. It's mainly a bugfix release. +@ref{Descargas antiguas} +and check out the changes +in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2652&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 20, 2004 +LilyPond 2.3.18 was released. It has further improvements in +the slur formatting, and a small syntax change: the mode +changing commands (`\chords', `\lyrics', etc.) have been +renamed to `\chordmode', `\lyricmode', etc. The command +`\chords' is an abbreviation for \new ChordNames \chordmode +... `\drums', `\lyrics', `\chords', `\figures' function +similarly. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2614&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 11, 2004 +LilyPond 2.3.16 was released. It fixes a couple of annoying +bugs, and has an important addition in the slur-formatter. Slurs that +pass note heads much closer than the average distance get an extra +penalty. This fixes a lot of difficult slurring cases. See +input/regression/new-slur for some examples. +Please consider this release as a 3.0 pre-release so try to find as +many bugs as possible. A report including a small .ly example +can be filed at bug-lilypond@@gnu.org +In this case, a bug is defined as something that the current 2.3 does +worse than the latest 2.2 release. We want to be sure that no output +will get uglier by upgrading to 3.0, so that once 3.0 is out, nothing +will hold users back in switching. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2562&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 10, 2004 +LilyPond 2.3.15 was released. It fixes for some gaffes with +the new vertical spacing engine, has lots of documentation +updates, and has support for landscape output in the direct +postscript output. Also, the types of events quoted with +`\quote' can now be tuned with `quotedEventTypes'. By default, +only notes and rests end up in quotes. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2553&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 6, 2004 +LilyPond 2.3.14 was released and has exciting features! +LilyPond will try to keep staves at the same distances across a +page, but it will stretch distances to prevent collisions; key +signature cancellations are now printed before the bar line; +different voices that all use "\quote" can now refer to each +other. +@ref{Descargas antiguas} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2534&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 29, 2004 +LilyPond now has a Documentation +Editor, Graham Percival. From now on, he will oversee that +useful information flows from the mailiing list into the +manual. Also, if there are unclear sections in the manual, +let him know via one of the mailing lists. +As a start of his career, he worked to transform the +"Templates" section of the website into a readable and comprehensive +chapter of the user manual. +A lot of cheers for Graham! +@newsEnd + + +@newsItem +@subsubheading August 29, 2004 +LilyPond 2.3.13 was released. The new slur code was +improved, scripts can be made to avoid slurs, by setting +inside-slur to #f. It is no longer necessary to instantiate +"up" and "down" staves separately when using +\autochange. Jurgen Reuter refreshed the logic around +mensural flags, so they are adjusted for staff lines once +again. +@ref{Descargas antiguas} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2520&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 24, 2004 +LilyPond 2.2.6 fixes a few minor issues, among others, the +disappearing metronome mark. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.33&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 23, 2004 +LilyPond 2.3.12 is out. This release has a lot of fixes and +a new feature: there is now support for putting two slurs on +chords, both above and below. This is switched on with the +`doubleSlurs' property. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2489&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 3, 2004 +LilyPond 2.3.11 is out. This release basically is 2.3.10 with a few +annoying bugs fixed. +@ref{Descargas antiguas} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2449&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 1, 2004 +LilyPond 2.3.10 is out. This release has a major clean-up of the +input/test/ directory. Many examples have been moved to the regression +test or manual, and the superfluous or outdated ones have been +removed. The directory has gone from 146 examples to 72 examples. That +means that we're halfway cleaning it out. Incidentally, the manual +has gone from 200 to 220 pages. New features: +@itemize +@item +Running trills now have their own spanner and event. They are +started and stopped with \startTrillSpan and \stopTrillSpan +@item +There is a new markup command `\postscript' that takes a string +that is dumped as verbatim PostScript +@end itemize + +@ref{Descargas antiguas} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2435&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 30, 2004 +LilyPond 2.3.9 is out. The important change is that lilypond +now once-again directly runs the binary. The old wrapper script has +been renamed to lilypond-latex.py, and should only be used for legacy +projects. The recommended route is either using lilypond directly +(with \book, you can have multiple movements within one document), or +to run lilypond-book with a LaTeX wrapper file. +This release also fixes a bunch of small errors. I now consider +LilyPond feature complete for a 3.0 release. Next on the TODO list is +updating the manual, and after that's done we can release 3.0. The +projected date for this to happen is in about a month. +@ref{Descargas antiguas} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2416&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 23, 2004 +Lilypond 2.3.8 fixes a few minor bugs in the new slur code, +and has rewritten support for ledger lines. Now, in tight +situations, ledger lines will be shortened so they stay +separate. This also required a cleanup of the Ambitus +implementation. +@ref{Descargas antiguas} +and check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2395&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 19, 2004 +LilyPond 2.3.7 was released and has new exciting features! +The slur formatting has been rewritten. The new slur code +works similar to the Beam formatter: scores are assigned for +all esthetic components of a slur. A large number of +combinations for begin and end points is then tried out. +Slurs will now also take into account collisions with staff +lines, scripts (like staccato and accent) and accidentals. In +the LilyPond emacs mode, the `|' will now display the current +beat within the measure. +@ref{Descargas antiguas} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2383&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 15, 2004 +LilyPond 2.2.5 was released. It has a few bug fixes from +2.3.x. +@ref{Descargas antiguas} +and check +out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.28&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 11, 2004 +An introductory article on LilyPond appeared on @uref{http://www.linuxjournal.com/article.php?sid=7657&mode=thread&order=0,Linux +Journal}. +@newsEnd + + +@newsItem +@subsubheading July 5, 2004 +LilyPond 2.3.6 was released. This release has more updates +for the Fret diagram code (thanks, Carl!), fixes a bunch of +bugs, including a serious one that trashed a lot of beam +formatting, and was also present in the 2.2 series. +@ref{Descargas antiguas} +and check out the changes +in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2306&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 5, 2004 +LilyPond 2.2.4 was released. It is mainly a bug fix +release. +@ref{Descargas antiguas} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.23&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading June 25, 2004 +LilyPond 2.3.5 has numerous small bugfixes and cleanups, and +features more work in the experimental GNOME output +module. Adventurous hackers can check the instructions at +scm/output-gnome.scm and try to run +buildscripts/guile-gnome.sh to see what the fuss is all about. +Carl Sorensen also provided us with more patches to the +fret-diagram output. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2293&content-type=text/vnd.viewcvs-markup,ChangeLog} +and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading June 20, 2004 +LilyPond 2.2.3 has a turkish translation and fixes a few minor +bugs that were reported over the past month. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.16&content-type=text/vnd.viewcvs-markup,ChangeLog} for a full description and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading June 13, 2004 +LilyPond 2.3.4 further improves the output backends. As a +result, manual page-breaks, multiple output formats and putting +@code{\score} into markups now works. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2242&content-type=text/vnd.viewcvs-markup,ChangeLog} +and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading May 31, 2004 +LilyPond 2.3.3 has many internal changes relating to the output +backend (PostScript) and page-layout. In addition, it contains a few +bugfixes for recently reported problems. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2207&content-type=text/vnd.viewcvs-markup,ChangeLog} +and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading May 31, 2004 +LilyPond 2.2.2 is out. It has a number of small bugfixes, so upgrade +if any of these errors concern you. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.9,ChangeLog} +or head straight to the +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading May 26, 2004 +LilyPond 2.3.2 is out. This release has a lot of internal +changes relating to page layout, but also sports experimental +fret-diagram code. Check out the @ref{Cambios} or head straight to the +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading May 9, 2004 +LilyPond 2.3.1 is out. This release has many new and cool +features. Check out the @ref{Cambios} or head straight to the +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading May 4, 2004 +Help LilyPond get better, and join in on LilyPond +development! This +@uref{devel/participating/call-for-help.html,call for +help} was posted on the mailing list a month ago, and we +are still looking for a Release Meister, Code Janitor, +Newsletter editor and a Writer for implementation +Documentation. Of course, any other help is also welcome! +@newsEnd + + +@newsItem +@subsubheading May 3, 2004 +LilyPond 2.2.1 has been released. It fixes a handful of bugs. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading April 17, 2004 +LilyPond 2.2.0 is now available +on Windows, and should find its way to the Cygwin mirrors +soon. +@newsEnd + + +@newsItem +@subsubheading April 12, 2004 +LilyPond 2.3.0 is the first release +in the 2.3 cycle. The focus for 2.3 is page layout, so +instrumentalists can force parts to have page breaks at sane turning +points. This release is @emph{experimental}; expect things to break! +More info in the @ref{Cambios}. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading April 8, 2004 +A French article on the new LilyPond +release appeared on @uref{http://linuxfr.org/2004/04/08/15968.html,linuxfr.org}. +@newsEnd + + +@newsItem +@subsubheading April 8, 2004 +Binaries for LilyPond 2.2.0 are available for +MacOS X, Slackware, Mandrake and Debian Woody. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading April 1, 2004 +LilyPond 2.2.0 is out! This new stable version has +completely revamped support for for orchestral score +formatting, cue notes, font size management, lyric formatting, +drum notation/playback and document integration. Read about it in +the @uref{announce-v2.2.html,announcement} or skip to the +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading March 31, 2004 +LilyPond 2.1.37 has build fixes for Cygwin and SUSE, +bugfixes for part-combining and chord tremolos and even more +documentation polish. This should be the final release +candidate; expect only regression bugs to be fixed before +2.2. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading March 30, 2004 +LilyPond 2.1.36 has many fixes in +the user manual. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading March 28, 2004 +LilyPond 2.1..35 fixes a slew of +bugs, and has the @code{raggedlast} option, which causes +paragraph like line breaking for scores. More info in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading March 22, 2004 +LilyPond 2.1.34 fixes minor bugs, and has more rewriting. +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading March 21, 2004 +LilyPond 2.1.33 fixes a serious bug, and a few other +irritations. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading March 20, 2004 +LilyPond 2.1.32 has more rewriting +in the user manual. There is also an experimental +implementation of optimal page breaking (Postscript backend +only). +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading March 15, 2004 +LilyPond 2.1.31 is out. It has fixes the alignment of bass +figures and spurious dynamic warnings in MIDI. New +attractions include rewritten font-selection routines. See +the +@ref{Cambios} and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading March 14, 2004 +The +@uref{http://linuxmusician.com/index.php?option=articles&task=viewarticle&artid=10,linuxmusician.com interview} made the +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&mode=thread&tid=141&tid=188,slashdot +frontpage!}. +@newsEnd + + +@newsItem +@subsubheading March 11, 2004 +@uref{http://linuxmusician.com,linuxmusician.com} is +running an +@uref{http://linuxmusician.com/index.php?option=articles&task=viewarticle&artid=10,interview} +with Han-Wen Nienhuys and Jan Nieuwenhuizen, the main +authors of LilyPond. +@newsEnd + + +@newsItem +@subsubheading March 11, 2004 +LilyPond 2.1.30 has editorial fixes for the manual, and +experimental support for page layout in the PostScript +backend. See the +@ref{Cambios} and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading March 9, 2004 +LilyPond 2.1.29 fixes a couple of MIDI bugs, and has +experimental support for producing titles with +@code{markup}. +@newsEnd + + +@newsItem +@subsubheading February 29, 2004 +In LilyPond 2.1.28 Scheme property functions may be used +argument to @code{set!}. In addition, parts of the manual +have been proofread and corrected in this release. See the +@ref{Cambios} and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading February 24, 2004 +LilyPond 2.1.27 takes into account instrument transpositions +when quoting other voices. This release also fixes a number +of lyrics related bugs. See the +@ref{Cambios} and +@ref{Descargas antiguas}. +@newsEnd + + +@newsItem +@subsubheading February 23, 2004 +LilyPond 2.1.26 has a new, experimental feature for quoting +other voices in instrumental parts. This can be used to +produce cue notes. More information in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 18, 2004 +LilyPond 2.1.25 fixes many bugs, and changes the conventions +for altering accidental rules. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 16, 2004 +LilyPond 2.1.24 has a big +internal rewrite. One of its practical consequences is that +@code{\with} now also works with @code{Score} +contexts. Further 2.1.23, which was not announced here, +fixes a few bugs caused by the change of @code{\property} +syntax and has updates in the Program Reference document. +More information in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 13, 2004 +LilyPond 2.1.22 has a +simplification of the @code{\property} syntax: it is +shorter and more consistent now. More information in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 12, 2004 +In LilyPond 2.1.21, output +tweaks can be done at multiple levels of the context +hierarchy. In addition, it has a bunch of bugfixes, +improvements in the documentation. More information in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 9, 2004 +LilyPond 2.1.20 has MIDI +output for drums. It also sports a completely rewritten +lilypond-book script, which is cleaner, shorter, and faster. +It also has a large number of bugfixes. +More information in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 5, 2004 +LilyPond 2.1.19 has rewritten +support for drum notation. This release also makes some +long-standing cleanups: the removal of @code{Thread} (all +functionality is now moved into @code{Voice}) and Lyrics +(functionality moved to @code{LyricsVoice}) context. +More information in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 4, 2004 +LilyPond 2.1.18 is out. This +release has the new part-combiner installed by default, and a +similar implementation of @code{autochange}. More information +in the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading February 2, 2004 +LilyPond 2.1.17 is out. It adds texts +(solo, a due) for the part combiner. It also reinstates the +@code{--safe} option which prevents havoc by Scheme exploits. More +information in the +@ref{Cambios}. +@newsEnd + + +@newsItem +@subsubheading January 28, 2004 +LilyPond 2.1.16 is out; its main feature +is that it fixes the autobeams gaffe of 2.1.15. The part-combiner +has been tested successfully on larger pieces. In the near future, +expect more part-combining eye-candy. +More information in +the +@ref{Cambios}. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 26, 2004 +LilyPond 2.1.15 further improves the part-combiner, and fixes many +bugs, among others in pedal brackets and finger positioning. +More information in +the +@ref{Cambios}. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 21, 2004 +LilyPond 2.1.14 +has the first release of the new part combiner. If you have scores that +use part-combining, please consider giving it a test-run. In addition +many bugs relating to mixed staff sizes have been fixed. +More information in +the +@ref{Cambios}. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 20, 2004 +The lilypond.org domain has been moved to a new server. This +will result in better connectivity and more bandwidth. Due +to security concerns, the new server does not offer FTP +access, but only HTTP downloads. +@newsEnd + + +@newsItem +@subsubheading January 20, 2004 +LilyPond 2.1.13 fixes a small but +nasty bug in side-positioning placement, and some bugs in +tuplet, tie and accidental formatting. This release contains +rudimentary work on a new part-combiner. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 19, 2004 +LilyPond 2.1.12 fixes many bugs +and improves formatting of ottava brackets. More information in +the +@ref{Cambios}. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 18, 2004 +LilyPond 2.1.11 is now also +available for Windows! For downloading, go +@uref{http://www.inf.bme.hu/~berti/lilypond/,here}. +@newsEnd + + +@newsItem +@subsubheading January 17, 2004 +In 2.1.11, the mechanism for +setting staff size and page is much simplified. In addition +there are improvements in the notehead shape, and there is +balloon help! +More information in the +@ref{Cambios}. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 16, 2004 +LilyPond 2.1.10 has a load of +bugfixes and a shorter syntax for octave checks. More +information in the +@ref{Cambios}. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 13, 2004 +LilyPond 2.1.9 has a new mechanism +for adding lyrics to melodies. It is now possible to have +different melismatic variations for each stanza. More +information in the +@ref{Cambios}. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 9, 2004 +LilyPond 2.1.8 has an important new +feature: it is now possible to use @code{\property} to tune +the appearance of spanning objects like @code{StaffSymbol} and +@code{SystemStartBrace}. In addition, contexts may be +modified with @code{\remove} and @code{\consists} for +individual music expressions. +More information in the +@ref{Cambios}. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 7, 2004 +An update to the stable branch, +version 2.0.2, was released today. It contains a couple of +minor bugfixes. @ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading January 6, 2004 +LilyPond 2.1.7 continues to +improve the layout of the Schubert test piece; this release +focuses on dot placement and multi measure rests centering. +More information in the +@ref{Cambios} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading January 4, 2004 +LilyPond 2.1.6 continues to +improve the layout of lyrics. More +information in the +@uref{@@DOC@@v2.1/Documentation/topdocs/out-www/NEWS.html,release +notes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading January 2, 2004 +in LilyPond 2.1.5, the lyric +alignment is completely revamped, and now matches my Edition +Peters version of the Schubert song Sängers Morgen. More +information in the +@ref{Cambios} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 30, 2003 +LilyPond 2.1.4 is released. Font shapes and linethickness +are now truly different for different staff sizes, thus lending +an engraved look to scores printed in smaller type too. See the +@ref{Cambios} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 23, 2003 +LilyPond 2.1.3 released. +Interpreting and formatting is now done while parsing the +file. This allows for Scheme manipulation of music, and could +be used to implement experimental MusicXML output (volunteers +to implement this are welcome!) See the +@ref{Cambios} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 17, 2003 +LilyPond 2.1.2 released. This +release has a new mechanism for setting font sizes, which +combines different font design sizes and continuous font +scaling. See the +@ref{Cambios} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 16, 2003 +LilyPond 2.1.1 released. This +release wraps together all the small fixes made during +Han-Wen's absence. See the +@ref{Cambios} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading October 11, 2003 +LilyPond 2.1.0 released. See the +@ref{Cambios} and +download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading October 11, 2003 +LilyPond 2.0.1 binaries for Mandrake 9.1 +available from +@uref{http://rpm.nyvalls.se/sound9.1.html,here} +thanks to Heikki Junes. +@newsEnd + + +@newsItem +@subsubheading October 9, 2003 +LilyPond 2.0.1 binaries for Slackware 9 +available from @uref{install/#2.0,here}, +thanks to Ricardo Hoffman. +@newsEnd + + +@newsItem +@subsubheading October 5, 2003 +LilyPond 2.0.1 binaries are available for Macos X, many thanks to +Matthias Neeracher. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading October 4, 2003 +LilyPond 2.0.1 binaries are available for Windows (Cygwin +version 1.5). +@ref{Descargas antiguas}. Thanks to Bertalan +Fodor, our new Cygwin maintainer! +@newsEnd + + +@newsItem +@subsubheading September 29, 2003 +LilyPond 2.0.1 is released. It +contains minor bugfixes. +See the @ref{Cambios} +or download @uref{install/#2.0,here} directly. +@newsEnd + + +@newsItem +@subsubheading September 27, 2003 +PlanetCCRMA has been updated to include LilyPond 2.0. Go +@uref{http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html#lilypond, +here} to download. Thanks to Fernando Pablo +Lopez-Lezcano! +@newsEnd + + +@newsItem +@subsubheading September 24, 2003 +LilyPond 2.0.0 is released. The +focus of this release is cleanups of the syntax: entering music is +now much easier and more efficient. Read the announcement +@uref{announce-v2.0.html,here}, or go to the +@uref{install/#2.0,download page} directly. +@newsEnd + + +@newsItem +@subsubheading September 24, 2003 +LilyPond 1.9.10 is released. This is +the final LilyPond 2.0 release candidate. Check +the @ref{Cambios} and +download @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading September 23, 2003 +LilyPond 1.9.9 is released. This is +the second LilyPond 2.0 prerelease. Check +the @ref{Cambios} and +download @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading September 19, 2003 +LilyPond 1.9.8 is released. This is +the first LilyPond 2.0 prerelease. Check +the @ref{Cambios} and +download @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading September 17, 2003 +LilyPond 1.9.7 is released. LilyPond +now has support for quarter tone accidentals! +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading September 16, 2003 +LilyPond 1.9.6 is released. +It has a lot of minor fixes and updates. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading September 10, 2003 +LilyPond 1.9.5 is released. +With this release, the 1.9 branch is feature +complete. After some stabilization and documentation work, 2.0 +will be available in a few weeks. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading September 9, 2003 +LilyPond 1.8.2 is released. This +release fixes a couple of minor bugs. +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading September 7, 2003 +LilyPond 1.8 binaries are available +for Windows (Cygwin version 1.5). +@ref{Descargas antiguas} +@newsEnd + + +@newsItem +@subsubheading August 31, 2003 +LilyPond 1.9.4 is released. +@emph{This is an experimental release}: read the +@uref{http://lists.gnu.org/archive/html/lilypond-devel/2003-08/msg00133.html,announcement} +before trying. +@newsEnd + + +@newsItem +@subsubheading August 31, 2003 +LilyPond 1.8 binaries for slackware +available. Get them @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading August 31, 2003 +LilyPond 1.9.3 is released. This +release supports tagging for music version control, and has better +fingering placement flexibility. Read the +@ref{Cambios} and get it @uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 28, 2003 +LilyPond 1.9.2 is released. Read the +@ref{Cambios} and get it +@uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 26, 2003 +LilyPond 1.9.1 is released. Read the +@ref{Cambios} and get it +@uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 25, 2003 +The LilyPond 1.9 development release is available. Read the +@ref{Cambios} and get it +@uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 25, 2003 +Mandrake 9.1 RPMS available, get them +@uref{http://rpm.nyvalls.se/sound9.1.html,here}. +@newsEnd + + +@newsItem +@subsubheading August 21, 2003 +LilyPond 1.8.1 was released. Get it @uref{install/,here}, or +read the @ref{Cambios}. +@newsEnd + + +@newsItem +@subsubheading August 18, 2003 +PlanetCCRMA (eg. RedHat 8 and 9) +has been updated to 1.8. +Download @uref{http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html#lilypond,here.} +@newsEnd + + +@newsItem +@subsubheading August 7, 2003 +LilyPond 1.8 is released. Read +@ref{Cambios} and get it @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading August 7, 2003 +New website went live! +@newsEnd + + +@newsItem +@subsubheading August 6, 2003 +Announced new website. +@newsEnd + + +@newsItem +@subsubheading August 1, 2003 +LilyPond 1.7.30 released. +@newsEnd + + +@newsItem +@subsubheading July 30, 2003 +Website: present @uref{about/automated-engraving/index.html,treatise} +about music engraving, music printing software, and LilyPond's +unique faculties. +@newsEnd + + +@newsItem +@subsubheading July 29, 2003 +1.7.29 - release candidate 4 has been released. Packages for +Red Hat, Debian, Cygwin are @uref{install/,available}. +@newsEnd + diff --git a/Documentation/essay.tely b/Documentation/essay.tely new file mode 100644 index 0000000000..bb6d7b9e4f --- /dev/null +++ b/Documentation/essay.tely @@ -0,0 +1,69 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-essay.info +@settitle Essay on automated music engraving +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@macro manualIntro +This essay discusses automatic music engraving functions within +LilyPond version @version{}. +@end macro + +@c `Essay' was born 2002-06-03 with git commit e38f5fc... +@macro copyrightDeclare +Copyright @copyright{} 2002--2011 by the authors. +@end macro + +@set FDL +@include macros.itexi + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen +@omfdescription Essay on automated music engraving +@omftype essay +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Essay on automated music engraving} + + +@ifnottex + +@menu +* Music engraving:: +* Literature list:: +* GNU Free Documentation License:: License of this document. +* LilyPond index:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include essay/engraving.itely +@include essay/literature.itely + +@include fdl.itexi + +@node LilyPond index +@appendix LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/essay/GNUmakefile b/Documentation/essay/GNUmakefile new file mode 100644 index 0000000000..068109cdcf --- /dev/null +++ b/Documentation/essay/GNUmakefile @@ -0,0 +1,40 @@ +depth = ../.. + +STEPMAKE_TEMPLATES=tex documentation +LOCALSTEPMAKE_TEMPLATES = lilypond ly + +OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES)) +EXTRA_DIST_FILES= $(BIB_FILES) $(call src-wildcard,*.bst) +BIB_FILES= $(call src-wildcard,*.bib) + +include $(depth)/make/stepmake.make + +# we no longer create bibliography files in this subdir, +# since it needs to be done in the main Documentation/ dir. +# all the below can _probably_ be removed, but I haven't +# examined it in detail. +# I think this is just going to wait until we switch to waf. -gp +dvi: $(DVI_FILES) $(OUT_BIB_FILES) + +ps: $(PS_FILES) + +default: + +GENHTMLS = engraving colorado computer-notation +OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) + +ifeq ($(out),www) +# temporary build fix; we don't know yet what's happening +# to the literature index. -gp +# local-WWW-2: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html) lit-index.html) +endif + +$(outdir)/%.bib: %.bib + ln -f $< $@ + +$(outdir)/%.html: %.bib + BSTINPUTS=$(src-dir) $(buildscript-dir)/bib2html -o $@ $< + +local-clean: + rm -f fonts.aux fonts.log feta*.tfm feta*.*pk + diff --git a/Documentation/essay/colorado.bib b/Documentation/essay/colorado.bib new file mode 100644 index 0000000000..614e0cfc30 --- /dev/null +++ b/Documentation/essay/colorado.bib @@ -0,0 +1,500 @@ +% +% title =University of Colorado Engraving music bibliography +% author =Alyssa Lamb (edited & converted to bibtex by HWN) +% + +@Book{jacob47, + author = {Jacob, Archibald}, + year = 1947, + title = {Musical handwriting : or, How to put music on paper : A handbook for all musicians, professional and amateur}, + address = {London}, + publisher = {Oxford University Press}, + note = {subject: Musical notation}, +} + +@Book{brandt, + author = {Carl Brandt and Clinton Roemer}, + title = {Standardized Chord Symbol Notation}, + address = {Sherman Oaks, CA}, + publisher = {Roerick Music Co.}, + note = {subject: musical notation}, +} + +@Book{johnson46, + author = {Johnson, Harold M}, + year = 1946, + title = {How to write music manuscript an exercise-method handbook for the music student, copyist, arranger, composer, teacher}, + publisher = {Carl Fischer, Inc.}, + address = {New York}, + note = {subject: Musical notation --Handbooks, manuals}, +} + +@Book{sadie90, + title = {Music Printing & Publishing}, + author = {Donald W. Krummel \& Stanley Sadie}, + year = 1990, + publisher = {Macmillan Press}, + note = {subject: musical notation}, +} + +@Book{foss, + author = {Foss, Hubert}, + title = {Music Printing}, + series = {Practical Printing and Binding}, + address = {London}, + publisher = {Oldhams Press Ltd., Long Acre}, + note = {subject: musical notation}, +} + +@Book{steele03, + author = {Steele, Robert}, + year = 1903, + title = {The Earliest English Music Printing}, + address = {London}, + note = {subject: history of music printing and engraving}, +} + +@Book{austin, + author = {Austin, Ernest}, + title = {The Story of Music Printing}, + address = {London}, + publisher = {Lowe and Brydone Printers, Ltd.}, + note = {subject: history of music printing and engraving}, +} + +@Book{unknown_author, + author = {unknown author}, + title = {Pictorial History of Music Printing}, + address = {Elhardt, Indiana}, + publisher = {H. and A. Selmer, Inc.}, + note = {subject: history of music printing and engraving}, +} + +@Book{wintermitz55, + author = {Wintermitz, Emmanuel}, + year = 1955, + title = {Musical Autographs from Monteverdi to Hindemith}, + address = {Princeton}, + publisher = {Princeton University Press}, + note = {subject: history of music printing and engraving}, +} + +@Book{novello47, + + author = {Novello, A}, + year = 1847, + title = {Some Account of the Methods of Musick Printing, with Specimens of the Various Sizes of Moveable Types and of Other Matters}, + address = {London}, + note = {subject: history of music printing and engraving}, +} + +@Book{chrsander18, + author = {Chrsander, F.}, + year = {18??}, + title = {A Sketch of the HIstory of Music printing, from the 15th to the 16th century}, + note = {subject: history of music printing and engraving}, +} + +@Article{squire1897, + author = {Squire, W}, + year = 1897, + title = {Notes on Early Music Printing}, + journal = {Bibliographica}, + volume = {iii}, + number = 99, + note = {subject: history of music printing and engraving}, +} + +@Article{meyer35, + author = {Meyer, K. and O'Meara, J}, + year = 1935, + title = {The Printing of Music, 1473-1934}, + journal = {The Dolphin}, + volume = {ii}, + pages = {171--207}, + note = {subject: history of music printing and engraving}, +} + +% 4th ver., +@Article{pattison39, + author = {Pattison, B}, + year = 1939, + title = {Notes on Early Music Printing}, + journal = {The Library}, + note = {subject: history of music printing and engraving}, + volume = {xix}, + pages = {389-421}, +} + +@Book{king64, + author = {King, H}, + year = 1964, + title = {Four Hundred Years of Music Printing}, + address = {London}, + note = {subject: history of music printing and engraving}, +} + +%(Rev.1961). +@Book{deutsch46, + author = {Deutsch, O.F.}, + year = 1946, + title = {Music Publishers' Numbers}, + address = {London}, + note = {subject: history of music printing and engraving}, +} + +@Book{marco62, + author = {Marco, G.A}, + year = 1962, + title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work}, + address = {Charlottesville, Virginia}, + note = {subject: history of music printing and engraving}, +} + +@Article{kinkeldey32, + author = {Kinkeldey, O}, + year = 1932, + title = {Music And Music Printing in Incunabula}, + journal = {Papers of the Bibliographical Society of America}, + volume = {xxvi}, + pages = {89-118}, + note = {subject: history of music printing and engraving}, +} + +@Book{oldman34, + author = {Oldman, C.B}, + year = 1934, + title = {Collecting Musical First Editions}, + address = {London}, + note = {subject: history of music printing and engraving}, +} + +@Book{carter34, + author = {Carter, J}, + year = 1934, + title = {New Paths in Book Collecting}, + address = {London}, + note = {subject: history of music printing and engraving}, +} + +@Book{krummel58, + author = {Krummel, D.W.}, + year = 1958, + month = 9, + title = {Graphic Analysis in Application to Early American Engraved Music}, + journal = {Notes}, + volume = {xvi}, + pages = 213, + note = {subject: history of music printing and engraving}, +} + +@Book{krummel71, + author = {Krummel, D.W}, + year = 1971, + title = {Oblong Format in Early Music Books}, + journal = {The Library}, + volume = {5th ser., xxvi}, + pages = 312, + note = {subject: history of music printing and engraving}, +} + +@Book{king73, + author = {King, A.H}, + year = 1973, + title = {The 50th Anniversary of Music Printing}, +} + +@Book{rastall82, + author = {Rastall, Richard}, + year = 1982, + title = {The notation of Western music : an introduction}, + address = {New York, N.Y.}, + publisher = {St. Martin's Press}, + note = {Musical notation}, +} + +@Book{tappolet47, + author = {Tappolet, Willy}, + year = 1947, + title = {La Notation Musicale}, + address = {Paris}, + note = {subject: general notation}, + publisher = {Neuchâtel}, +} + +@Book{williams03, + author = {Williams, C.F. Abdy}, + year = 1903, + title = {The Story of Notation}, + address = {New York}, + publisher = {Charles Scribner's Sons}, + note = {subject: general notation}, +} + +@Book{apel53, + author = {Apel, Willi}, + year = 1953, + title = {The notation of polyphonic music, 900-1600}, + address = {Cambridge, Mass}, + institution= {Mediaeval Academy of America}, + note = {Musical notation}, +} + +@Book{berger93, + author = {Berger, Anna Maria Busse}, + year = 1993, + title = {Mensuration and proportion signs : origins and evolution}, + address = {Oxford, England}, + publisher = {Clarendon Press}, + scnd_address = {New York}, + scnd_publisher = {Oxford University Press}, + note = {subject: early notation}, +} + +@Book{parrish57, + author = {Parrish, Carl}, + year = 1957, + title = {The notation of medieval music}, + address = {New York}, + publisher = {Norton}, + note = {Musical notation}, +} + +@Book{parrish46, + author = {Parrish, Carl}, + year = 1946, + title = {The Notation of Medieval Music}, + address = {New York}, + publisher = {Carl Fischer, Inc.}, + note = {subject: early notation}, +} + +@Book{patch49, + author = {Patch, Harry}, + year = 1949, + title = {Genesis of a Music}, + address = {Madison}, + publisher = {University of Wisconsin Press}, + note = {subject: early notation}, +} + +@Book{cage69, + author = {Cage, John}, + year = 1969, + title = {Notations}, + address = {New York}, + publisher = {Something Else Press}, + note = {Music, Manuscripts, Facsimiles. + Facsimiles of holographs from the Foundation for Contemporary + Performance Arts, with text by 269 composers, but rearranged using + chance operations.,V)}, +} + +@Book{gaburo77, + author = {Gaburo, Virginia}, + year = 1977, + title = {Notation}, + publisher = {Lingua Press}, + address = {La Jolla, California}, + note = {A Lecture about notation, new ideas about}, +} + +@Book{risatti75, + author = {Risatti, Howard}, + year = 1975, + title = {New Music Vocabulary}, + address = {Urbana, Illinois}, + publisher = {University of Illinois Press}, + note = {A Guide to Notational Signs for Contemporary Music}, +} + +@Book{cowell30, + author = {Cowell, Henry}, + year = 1930, + title = {New Musical Resources}, + address = {New York}, + publisher = {Alfred A. Knopf, Inc.}, + note = {subject: 20th century notation}, +} + +@Article{cowell27, + author = {Cowell, Henry}, + year = 1927, + title = {Our Inadequate Notation}, + journal = {Modern Music}, + volume = 4, + number = 3, + note = {subject: 20th century notation}, +} + +@Book{bowers92, + author = {Bowers, Roger}, + year = 1992, + title = {Music & Letters}, + volume = 73, + number = 3, + month = {August}, + pages = {347(52)}, + note = {Some reflection upon notation and proportion in Monteverdi's mass and vespers}, +} + +@Book{brainard92, + author = {Brainard, Paul}, + year = 1992, + title = {Current Musicology}, + number = 50, + month = {July-Dec}, + pages = {21(26)}, + note = {Proportional notation in the music of Schutz and his contemporaries in the 17th Century}, +} + +@Book{monelle89, + author = {Monelle, Raymond}, + year = 1989, + title = {Comparative Literature}, + volume = 41, + number = 3, + month = {Summer}, + pages = {252(18)}, + note = {Music notation and the poetic foot}, +} + +@Book{pinegar93, + author = {Pinegar, Sandra}, + year = 1993, + title = {Current Musicology}, + number = 53, + month = {July}, + pages = {99(10)}, + note = {The seeds of notation and music paleography.}, +} + +@Book{smith90, + author = {Smith, Norman E}, + year = 1990, + title = {Current Musicology}, + number = {45-47}, + month = {Jan-Dec}, + pages = {283(22)}, + note = {The notation of fractio modi.}, +} + +@Book{treitler92, + author = {Treitler, Leo}, + year = 1992, + title = {The Journal of Musicology}, + volume = 10, + number = 2, + month = {Spring}, + pages = {131(61)}, + note = {The unwritten and written transmission, of medieval chant + and the start-up of musical notation. + Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition.}, +} + +@Book{west94, + author = {West, M.L}, + year = 1994, + title = {Music & Letters}, + volume = 75, + number = 2, + month = {May}, + pages = {161(19)}, + note = {The Babylonian musical notation and the Hurrian melodic texts. + A new way of deciphering the ancient Babylonian musical notation.} +} + +@Book{brown86, + author = {Brown, Earle}, + year = 1986, + title = {Musical Quarterly}, + volume = 72, + month = {Spring}, + pages = {180(22)}, + note = {The notation and performance of new music.}, +} + +@Book{eggleston94, + author = {Eggleston, Suzanne}, + year = 1994, + title = {Notes}, + volume = 51, + number = 2, + month = {Dec}, + pages = {657(7)}, + journal= {New periodicals}, + note = {A list of new music periodicals covering the period + Jun.-Dec. 1994. Includes aims, formats and a description of the + contents of each listed periodical. Includes Music Notation News}, +} + +@Book{fuller89, + author = {Fuller, David}, + year = 1989, + title = {The Journal of Musicology}, + volume =7, + number = 1, + month = {Winter}, + pages = {21(8)}, + note = {Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation).} +}, + +@Book{jones90, + author = {Jones, David Evan}, + year = 1990, + title = {Perspectives of New Music}, + note = {Speech extrapolated. (includes notation)} +} + +@Book{lependorf89, + author = {Lependorf, Jeffrey}, + year = 1989, + journal= {Perspectives of New Music}, + volume = 27, + title = {?}, + number = 2, + month = {Summer}, + pages = {232(20)}, + note = {Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan)}, +} + +@Book{rastall93, + author = {Rastall, Richard}, + year = 1993, + title = {Music & Letters}, + volume =74, + number = 4, + month = {November}, + pages = {639(2)}, + note = {Equal Temperament Music Notation: The Ailler-Brennink + Chromatic Notation. Results and Conclusions of the Music Notation + Refor by the Chroma Foundation (book reviews).}, +} + +@Article{francois92, + author = {Francois, Jean-Charles}, + journal = {Perspectives of New Music}, + volume = {30}, + number = {1}, + month = {Winter}, + pages = {6(15)}, + year = {1992}, + note = {subject: Modern music has outgrown notation. While the + computer is used to write down music with accuracy never + before achieved, the range of modern sounds has surpassed + the relevance of the computer...}, + title = {Writing without representation, and unreadable notation.}, +} + +@Book{hamel89, + author = {Hamel, Keith A}, + year = 1989, + journal = {Perspectives of New Music}, + volume = 27, + number = 1, + month = {Winter}, + pages = {70(14)}, + title = {A design for music editing and printing software based +on notational syntax}, +} + diff --git a/Documentation/essay/computer-notation.bib b/Documentation/essay/computer-notation.bib new file mode 100644 index 0000000000..547a990c81 --- /dev/null +++ b/Documentation/essay/computer-notation.bib @@ -0,0 +1,660 @@ +% +% title =The music notation with computer bibliography +% author =Han-Wen Nienhuys +% + +@String{CitH = {Computing and the Humanities}} +@String{CMJ = {Computer Music Journal}} + +@Book{smith73, + year = {1973}, + title = {Editing and Printing Music by Computer}, + author = {Leland Smith}, + totalentry = {Journal of Music Theory}, + volume = {17}, + pages = {292-309}, + note = {Gourlay [gourlay86] writes: A discussion of Smith's +music-printing system SCORE} +} + +@Article{byrd74, + year = {1974}, + title = {A System for Music Printing by Computer}, + author = {Donald Byrd}, + journal = {Computers and the Humanities}, + volume = {8}, + pages = {161-72}, +} + +@Article{ericson75, + author = {R. F. Ericson}, + title = {The DARMS Project: A status report}, + journal = {Computing in the humanities}, + year = 1975, + volume = 9, + number = 6, + pages = {291--298}, + note = {Gourlay [gourlay86] writes: A discussion of the design + and potential uses of the DARMS music-description language.} +} + +% Gomberg +@PhdThesis{gomberg75, + year = {1975}, + title = {A Computer-Oriented System for Music Printing}, + author = {David A. Gomberg}, + school = {Washington University}, +} + +@Book{gomberg77, + title = {A Computer-oriented System for Music Printing}, + author = {David A. Gomberg}, + journal = CitH, + volume = {11}, + month = {march}, + year = {1977}, + pages = {63-80}, + note = {Gourlay [gourlay86] writes: "A discussion of the + problems of representing the conventions of musical notation in + computer algorithms."} +} + +@TechReport{ornstein83, + author = {Ornstein, Severo M. and John Turner Maxwell III}, + title = {Mockingbird: A Composer's Amanuensis}, + institution = {Xerox Palo Alto Research Center}, + address = {3333 Coyote Hill Road, Palo Alto, CA, 94304}, + number = {CSL-83-2}, + month = {January}, + year = {1983} +} + +@Article{ornstein84, + author = {Ornstein, Severo M. and John Turner Maxwell III}, + title = {Mockingbird: A Composer's Amanuensis}, + journal = {Byte}, + volume = 9, + month = {January}, + year = { 1984}, + note = {A discussion of an interactive and graphical computer system +for music composition} +} + +% byrd +@PhdThesis{byrd85, + year = {1985}, + title = {Music Notation by Computer}, + author = {Donald Byrd}, + school = {Indiana University}, + note = {Describes the SMUT (sic) system for automated music printout.} +} + +@InProceedings{assayaag86, + author = {G. Assayaag and D. Timis}, + title = {A Toolbox for music notation}, + booktitle = {Proceedings of the 1986 International Computer Music Conference}, + year = 1986 +} + +@TechReport{roush88, + year = {1988}, + title = {Music Formatting Guidelines}, + author = {D. Roush}, + number = {OSU-CISRC-3/88-TR10}, + institution = {Department of Computer and Information Science, The Ohio State University}, + note = {Rules on formatting music formulated for use in + computers. Mainly distilled from [Ross] HWN}, +} + +@Article{byrd94, + author = {Donald Byrd}, + title = {Music Notation Software and Intelligence}, + journal = {Computer Music Journal}, + year = 1994, + pages = {17--20}, + volume = 18, + number = 1, + note = {Byrd (author of Nightingale) shows four problematic +fragments of notation, and rants about notation programs that try to +exhibit intelligent behaviour. HWN} +} + +@Article{field-richards93, + author = {H.S. Field-Richards}, + title = {Cadenza: A Music Description Language}, + journal = CMJ, + year = 1993, + volume = 17, + number = 4, + note = {A description through examples of a music entry language. +Apparently it has no formal semantics. There is also no +implementation of notation convertor. HWN} +} + +@Article{bielawa93, + author = {Herbert Bielawa}, + title = {Review of Sibelius 7}, + journal = CMJ, + year = {1993?}, + note = {A raving review/tutorial of Sibelius 7 for Acorn. (And did +they seriously program a RISC chip in ... assembler ?!) HWN} +} + +@Article{sloan93, + author = {Donald Sloan}, + title = {Aspects of Music Representation in HyTime/SMDL}, + journal = CMJ, + year = 1993, + volume = 17, + number = 4, + note = {An introduction into HyTime and its score description variant +SMDL. With a short example that is quite lengthy in SMDL} +} + +@Article{wiggins93, + author = {Geraint Wiggins and Eduardo Miranda and Alaaaan Smaill and Mitch Harris}, + title = {A Framework for the evaluation of music representation systems}, + journal = CMJ, + year = 1993, + volume = 17, + number = 3, + note = {A categorisation of music representation systems (languages, +OO systems etc) splitted into high level and low level expressiveness. +The discussion of Charm and parallel processing for music +representation is rather vague. HWN} +} + +@Article{dannenberg93, + author = {Roger B. Dannenberg}, + title = {Music Representation: Issues, Techniques, and Systems}, + journal = CMJ, + year = 1993, + volume = 17, + number = 3, + url = {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.6067}, + note = {This article points to some problems and solutions with music +representation. HWN}, +} + +@Article{rothstein93, + author = {Joseph Rothstein}, + title = {Review of Passport Designs' Encore Music Notation Software}, + journal = CMJ, + year = {?}, +} + +@Article{belkin94, + author = {Alan Belkin}, + title = {Macintosh Notation Software: Present and Future}, + journal = CMJ, + year = 1994, + volume = 18, + number = 1, + note = {Some music notation systems are analysed for ease of use, + MIDI handling. The article ends with a plea for a standard notation + format. HWN}, +} + +@InProceedings{montel97, + author = {Dominique Montel}, + title = {La gravure de la musique, lisibilité esthétique, respect de l'oevre}, + booktitle = {Musique \& Notations}, + year = 1997, + address= {Lyon}, + editors = {Genevois \& Orlarey} +} + +@Book{casr, + note = {Annual editions since 1985, many containing surveys of music typesetting technology. SP}, + title = {Directory of Computer Assisted Research in Musicology}, + author = {Walter B Hewlett and Eleanor Selfridge-Field}, + totalentry = {Menlo Park, CA: Center for Computer Assisted Research in the Humanities}, +} + +@Book{selfridge-field97, + title = {Beyond MIDI: the handbook of musical codes}, + editor = {Eleanor Selfridge-Field}, + publisher = {MIT Press}, + year = 1997, + note = {A description of various music interchange formats.} +} + +@InProceedings{hoos98, + title = {The GUIDO Music Notation Format---A Novel Approach +for Adequately Representing Score-level Music}, + author = {H. H. Hoos and K. A. Hamel and K. Renz and J. Kilian}, + booktitle = {Proceedings of International Computer Music Conference}, + year = 1998, + pages = {451--454}, +} + +@Article{blostein91, + note = {This paper provides a overview of the algorithm used in LIME + for spacing individual lines. HWN}, + year = {1991}, + title = {Justification of Printed Music}, + author = {Dorothea Blostein and Lippold Haken}, + journal = {Communications of the ACM}, + volume = {J34}, + number = {3}, + month = {March}, + pages = {88-99}, +} + +@Article{haken93, + year = {1993}, + title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor}, + author = {Lippold Haken and Dorothea Blostein}, + journal = {Computer Music Journal}, + volume = {17}, + number = {3}, + pages = {43--58}, +} + +@Article{blostein94, + author = {Dorothea Blostein and Lippold Haken}, + title = {The Lime Music Editor: A Diagram Editor Involving Complex + Translations}, + journal = {Software Practice and Experience}, + year = {1994}, + volume = {24}, + number = {3}, + month = {march}, + pages = {289--306}, + note = {A description of various conversions, decisions and issues +relating to this interactive editor HWN}, +} + +@InProceedings{haken95, + year = {1995}, + title = {A New Algorithm for Horizontal Spacing of Printed Music}, + author = {Lippold Haken and Dorothea Blostein}, + booktitle = {International Computer Music Conference}, + address = {Banff}, + month= {Sept}, + pages = {118-119}, + note = {This describes an algorithm which uses springs between +adjacent columns.}, +} + +@InProceedings{bouzaiene98, + author = {Nabil Bouzaiene and Loïc Le Gall and Emmanuel Saint-James}, + title = {Une bibliothèque pour la notation musicale baroque}, + booktitle = {EP '98}, + year = 1998, + series = {LNCS}, + note = {Describes ATYS, an extension to Berlioz, that can mimick + handwritten baroque style beams} +} + +@InProceedings{balaban88, + author = {M. Balaban}, + title = {A Music Workstation Based on Multiple Hierarchical Views of Music}, + booktitle = {Proceedings of the 1988 International Computer Music Conference}, + year = 1988, + address = {San Francisco}, + organization = {International Computer Music Association} +} + +% +% MusiCopy +% +@TechReport{gourlay87-spacing, +annote = {Algorithm for generating spacing in one line of (polyphonic) music, tailored for use with MusiCopy. LilyPond uses a variant of it.}, + year = {1987}, + title = {Spacing a Line of Music,}, + author = {John S. Gourlay}, + number = {OSU-CISRC-10/87-TR35}, + institution = {Department of Computer and Information Science, The Ohio State University}, +} + +@TechReport{parish87, + annote = {A brief overview of MusiCopy}, + year = {1987}, + title = {MusiCopy: An automated Music Formatting System}, + author = {Allen Parish and Wael A. Hegazy and John S. Gourlay and Dean K. Roush and F. Javier Sola}, + totalentry = {OSU-CISRC-10/87-TR29}, + institution = {Department of Computer and Information Science, The Ohio State University}, +} + +@TechReport{gourlay87-formatting, + note = {This paper discusses the development of algorithms for the +formatting of musical scores (from abstract). It also appeared at +PROTEXT III, Ireland 1986}, + year = {1987}, + title = {Computer Formatting of Music}, + author = {John S. Gourlay and A. Parrish +and D. Roush and F. Sola and Y. Tien}, + number = {OSU-CISRC-2/87-TR3}, + institution = {Department of Computer and Information Science, +The Ohio State University}, +} + +@TechReport{hegazy87, + year = {1987}, + title = {On the Implementation of the MusiCopy Language Processor,}, + author = {Wael A. Hegazy}, + number = {OSU-CISRC-10/87-TR34}, + institution= {Department of Computer and Information Science, The Ohio State University}, + note = {Describes the "parser" which converts MusiCopy MDL to + MusiCopy Simultaneities and columns. + +MDL is short for Music Description Language [gourlay86]. It +accepts music descriptions that are organised into measures filled +with voices, which are filled with notes. The measures can be arranged +simultaneously or sequentially. To address the 2-dimensionality, +almost all constructs in MDL must be labeled. + +MDL uses begin/end markers for attribute values and spanners. +Rightfully the author concludes that MusiCopy must administrate a +"state" variable containing both properties and current spanning symbols. + +MusiCopy attaches graphic information to the objects constructed in +the input: the elements of the input are partially complete graphic +objects.}, +} + +@TechReport{hegazy87-breaking-tr, + annote = {This generalizes \TeX's breaking algorithm to music. It also +appeared in Document Manipulation and Typography, J.C. van Vliet (ed) +1988}, + year = {1987}, + title = {Optimal line breaking in music}, + author = {Wael A. Hegazy and John S. Gourlay}, + number = {OSU-CISRC-8/87-TR33}, + institution= {Department of Computer and Information Science, The Ohio State University,}, +} + +@InProceedings{hegazy88, + author = {Wael A. Hegazy and John S. Gourlay}, + booktitle = {Proceedings of the International Conference on +Electronic Publishing, Document Manipulation and Typography. Nice (France)}, + month = {April}, + year = 1988, + editor = {J. C. van Vliet}, + publisher = {Cambridge University Press}, + ISBN = {0-521-36294-6}, + title = {Optimal line breaking in music}, +} + +@TechReport{roush87, + note = {User manual of MusiCopy.}, + year = {1987}, + title = {Using MusiCopy}, + author = {Dean K. Roush}, + number = {OSU-CISRC-18/87-TR31}, + institution= {Department of Computer and Information Science, The Ohio State University}, +} + +@TechReport{parrish87-simultaneities, + note = {This note discusses + placement of balls, stems, dots which occur at the same moment + ("Simultaneity")}, + year = {1987}, + title = {Computer Formatting of Musical Simultaneities,}, + author = {A. Parrish and John S. Gourlay}, + institution= {Department of Computer and Information Science, The Ohio State University}, + number = {OSU-CISRC-10/87-TR28}, +} + +@TechReport{sola87, + note = {Overview of a procedure for generating slurs}, + year = {1987}, + title = {Computer Design of Musical Slurs, Ties and Phrase Marks,}, + author = {F. Sola}, + institution= {Department of Computer and Information Science, The Ohio State University}, + number = {OSU-CISRC-10/87-TR32}, +} + +@Article{gourlay86, + note = {This paper describes the MusiCopy musicsetting system and an input language to go with it.}, + year = {1986}, + title = {A language for music printing}, + author = {John. S. Gourlay}, + journal = {Communications of the ACM}, + volume = {29}, + number = {5}, + pages = {388--401}, +} + +@TechReport{sola87-beams, + institution= {Department of Computer and Information Science, The Ohio +State University}, + note = {Calculating beam slopes HWN}, + year = {1987}, + title = {Design of Musical Beams,}, + author = {F. Sola and D. Roush}, + number = {OSU-CISRC-10/87-TR30}, +} + +@PhdThesis{page88, + note = {Don't ask Stephen for a copy. Write to the Bodleian Library, Oxford, or to the British Library, instead. SP}, + year = {1988}, + title = {Computer Tools for Music Information Retrieval}, + author = {Stephen Dowland Page}, + school = {Dissertation University of Oxford}, +} + +% +% three part study by John Grøver +@TechReport{grover89-symbols, + author = {John Grøver}, + title = {A computer-oriented description of Music Notation. Part I. The Symbol Inventory}, + institution = {Department of informatics, University of Oslo}, + year = 1989, + number = 133, + note = {The goal of this series of reports is a full description of +music formatting. As these largely depend on parameters of fonts, it +starts with a verbose description of music symbols. + +The subject is treated backwards: from general rules of typesetting +the author tries to extract dimensions for characters, whereas the +rules of typesetting (in a particular font) follow from the dimensions +of the symbols. His symbols do not match (the stringent) constraints +formulated by eg. [wanske]}, +} + +@TechReport{grover89-twovoices, + author = {John Grøver}, + title = {A computer-oriented description of Music Notation. Part II: Two Voice Sharing a Staff, Leger Line Rules, Dot Positioning}, + institution = {Department of informatics, University of Oslo}, + year = 1989, + number = 134, + note = {A lot rules for what is in the title are formulated. The +descriptions are long and verbose. The verbosity shows that +formulating specific rules is not the proper way to approach the +problem. Instead, the formulated rules should follow from more +general rules, similar to [parrish87-simultaneities]}, +} + +@TechReport{grover89-accidentals, + author = {John Grøver}, + title = {A computer-oriented description of Music Notation. Part III: Accidental Positioning}, + institution = {Department of informatics, University of Oslo}, + year = 1989, + number = 135, + note = {Placement of accidentals crystallised in an enormous set of +rules. Same remarks as for [grover89-twovoices] applies}, +} + +@PhdThesis{mueller90, + author = {Giovanni Müller}, + title = {Interaktive Bearbeitung konventioneller Musiknotation}, + school = {Eidgenössische Technische Hochschule Zürich}, + year = 1990, + note = {This is about engraver-quality typesetting with computers. It +accepts the axiom that notation is too difficult to generate +automatically. The result is that a notation program should be a +WYSIWYG editor that allows one to tweak everything.}, +} + +@MastersThesis{roelofs91, + note = {This dutch thesis describes a monophonic typesetting system, + and focuses on the breaking algorithm, which is taken from Hegazy & + Gourlay}, + year = {1991}, + title = {Een Geautomatiseerd Systeem voor het Afdrukken van Muziek}, + author = {René Roelofs}, + school= {Erasmus Universiteit Rotterdam}, + number= {45327}, + translation = {``An automated system for printing music'' Master's Thesis Managerial Computer Science.}, +} + +@Article{filgueiras93, + year = {1993}, + title = {Representation and manipulation of music documents in SceX}, + author = {Miguel Filgueiras and José Paulo Leal}, + journal = {Electronic Publishing}, + volume = {6}, + number= {4}, pages = {507--518}, + url= {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.1480}, +} + +@Article{foxley87, + note = {A paper on a simple TROFF preprocessor to typeset music.}, + year = {1987}, + title = {Music --- A language for typesetting music scores}, + author = {Eric Foxley}, + journal = {Software --- Practice and Experience}, + volume = {17}, + number = {8}, + pages = {485-502}, +} + +@Article{langston90, + note = {This paper deals with some command-line + tools for music editing and playback.}, + year = {1990}, + title = {Unix music tools at Bellcore}, + author = {Peter S. Langston}, + journal = {Software --- Practice and Experience}, + volume = {20}, + number= {S1}, + pages = {47--61}, +} + +@Book{filgueiras96, + year = {1996}, + title = {Implementing a Symbolic Music Processing System}, + author = {Miguel Filgueiras}, + totalentry = {LIACC, Universidade do Porto, 1996; submitted}, +} + +@Book{filgueiras, + title = {Some Music Typesetting Algorithms}, + author = {Miguel Filgueiras}, + totalentry = {Miguel Filgueiras. ``Some Music Typesetting Algorithms''. LIACC, Universidade do Porto, forthcoming}, +} + +@Article{colorado-web, + author = {Alyssa Lamb}, + note = {Webpages about engraving (designed with finale +users in mind) (sic) HWN}, + institution = {The University of Colorado}, + title = {The University of Colorado Music Engraving page}, + HTML= {http://www.cc.colorado.edu/Dept/MU/Musicpress/}, + year = {1996} +} + +@Article{tablature-web, + note = {FAQ (with answers) about TAB, the ASCII variant of Tablature. HWN}, + title = {how to read and write tab: a guide to tab notation}, + author = {Howard Wright}, + email= {Howard.Wright@ed.ac.uk}, + url= {http://www.guitartabs.cc/tabfaq.shtml}, +} + +@Article{niff-web, + note = {Specs for NIFF, a reasonably comprehensive but binary + format for notation HWN}, + year = {1995}, + title = {NIFF6a Notation Interchange File Format}, + author = {Cindy Grande}, + publisher= {Grande Software Inc.}, + HTML= {http://www.jtauber.com/music/encoding/niff/}, + ftp = {ftp://blackbox.cartah.washington.edu} +} + +@Article{smdl-web, + author = {International Organization for Standardization (ISO)}, + title = {Information Technology - Document Description and Processing Languages - Standard Music Description Language (SMDL)}, + pdf = {ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf}, + number = {ISO/IEC DIS 10743}, + year = {1992}, + annote = {SGML instance for describing music. Very comprehensive in music +definition, but no support for notation / performance whatsoever (They +basically say: "You can embed a NIFF or MIDI file")}, +} + +@Article{rader96, + note = {Describes a system called MusicEase, and explains that it + uses "constraints" (which go unexplained) to automatically position + various elements.}, + html = {http://mesastate.edu/~grader/ieeeme.pdf}, + year = {1996}, + title = {Creating Printed Music Automatically}, + author = {Gary M. Rader}, + journal = {Computer}, + volume = {29}, + number= {6}, + month= {June}, + pages = {61--69}, +} + +@MastersThesis{gall97, + author = {Loïc Le Gall}, + title = {Création d'une police adaptée à la notation musicale baroque}, + school = {École Estienne}, + year = 1997, +} + +@TechReport{droettboom00, + author = {Michael Droettboom}, + title = {Study of music Notation Description Languages}, + year = 2000, + url = {http://www.music.mcgill.ca/~ich/research/omr/levy/format.pdf}, + note = {GUIDO and lilypond compared. LilyPond wins on practical +issues as usability and availability of tools, GUIDO wins on +implementation simplicity.}, +} + +@PhdThesis{gieseking01, + author = {Martin Gieseking}, + title = {Code-basierte Generierung interaktiver Notengraphik}, + school = {Universität Osnabrück}, + year = 2001, + isbn = {ISBN 3-923486-30-8} +} + +@Book{hewlett01, + editor = {Walter B. Hewlett and Eleanor Selfridge-Field}, + title = {The Virtual Score; representation, retrieval and restoration}, + publisher = {MIT Press}, + series = {Computing in Musicology}, + year = 2001 +} + +@PhdThesis{renz02, + author = {Kai Renz}, + title = {Algorithms and data structures for a music notation system based on GUIDO music notation}, + school = {Universität Darmstadt}, + year = 2002 +} + +@InBook{powell02, + author = {Steven Powell}, + title = {Music engraving today}, + publisher = {Brichtmark}, + year = 2002, + note = {A "How Steven uses Finale" manual.} +} + +@InProceedings{nienhuys03, + author = {Han-Wen Nienhuys and Jan Nieuwenhuizen}, + title = {LilyPond, a system for automated music engraving}, + booktitle = {XIV Colloquium on Musical Informatics}, + year = 2003, + pages = {167--172}, + address = {Firenze}, + month = {May} +} diff --git a/Documentation/essay/engraving.itely b/Documentation/essay/engraving.itely new file mode 100644 index 0000000000..e2409ce725 --- /dev/null +++ b/Documentation/essay/engraving.itely @@ -0,0 +1,1734 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Music engraving +@chapter Music engraving + +This essay describes why LilyPond was created and how it can produce +such beautiful sheet music. + +@c TODO: +@c remove 3mm eps bounding box left padding for Sarabande (This will +@c require adding a new snippet option to lilypond-book.py +@c check formatting of HTML output + +@menu +* The LilyPond story:: +* Engraving details:: +* Automated engraving:: +* Building software:: +* Putting LilyPond to work:: +* Engraved examples (BWV 861):: +@end menu + +@node The LilyPond story +@section The LilyPond story + +Long before LilyPond had been used to engrave beautiful performance +scores, before it could create university course notes or even simple +melodies, before there was a community of users around the world or even +an essay on music engraving, LilyPond began with a question: + +@quotation +Why does most computer output fail to achieve the beauty and balance of +a hand-engraved score? +@end quotation + +@noindent +Some of the answers can be found by examining the two scores +@ifnottex +below. +@end ifnottex +@iftex +on the following pages. +@end iftex +The first score is a beautiful hand-engraved score from 1950 and the +second is a modern, computer-engraved edition. + +@ifnottex +@quotation +@noindent +Bärenreiter BA 320, @copyright{}1950: + +@sourceimage{baer-suite1-fullpage,,,png} +@end quotation + +@quotation +@noindent +Henle no. 666, @copyright{}2000: + +@sourceimage{henle-suite1-fullpage,,,png} +@end quotation +@end ifnottex + +The notes here are identical, taken from Bach's first Suite for solo +cello, but the appearance is different, especially if you print them out +and view them from a distance. +@ifnottex +(The PDF version of this manual has high-resolution images suitable for +printing.) +@end ifnottex +Try reading or playing from each of the scores and you will find that +the hand-engraved score is more enjoyable to use. It has flowing lines +and movement, and it feels like a living, breathing piece of music, +while the newer edition seems cold and mechanical. + +It is hard to immediately see what makes the difference with the newer +edition. Everything looks neat and tiny, possibly even @qq{better} +because it looks more computerized and uniform. This really puzzled us +for quite a while. We wanted to improve computer notation, but we first +had to figure out what was wrong with it. + +The answer lies in the precise, mathematical uniformity of the newer +edition. Find the bar line in the middle of each line: in the +hand-engraved score the position of these bar lines has some +natural variation, while in the newer version they line up almost +perfectly. This is shown in these simplified page layout diagrams, +traced from the hand-engraved (left) and computer-generated music +(right): + +@quotation +@iftex +@sourceimage{pdf/page-layout-comparison,,,} +@end iftex +@ifnottex +@sourceimage{page-layout-comparison,,,png} +@end ifnottex +@end quotation +@noindent + +In the computer-generated output, even the individual note heads are +aligned in vertical columns, making the contour of the melody disappear +into a rigid grid of musical markings. + +There are other differences as well: in the hand-engraved edition the +vertical lines are all stronger, the slurs lie closer to the note heads, +and there is more variety in the slopes of the beams. Although such +details may seem like nitpicking, the result is a score that is easier +to read. In the computer-generated output, each line is nearly identical +and if the musician looks away for a moment she will be lost on the +page. + +LilyPond was designed to solve the problems we found in existing +software and to create beautiful music that mimics the finest +hand-engraved scores. + +@iftex +@page +@noindent +Bärenreiter BA 320, @copyright{}1950: + +@sourceimage{baer-suite1-fullpage-hires,16cm,,} +@page +@noindent +Henle no. 666, @copyright{}2000: +@sp 3 +@sourceimage{henle-suite1-fullpage-hires,16cm,,} +@page +@end iftex + +@node Engraving details +@section Engraving details + +@cindex engraving +@cindex typography, music +@cindex music typography +@cindex plate engraving +@cindex music engraving + +The art of music typography is called @emph{(plate) engraving}, a term +that derives from the manual process of music printing@footnote{Early +European printers explored several processes, including hand-carved +wooden blocks, movable type, and engraved sheets of thin metal. +Typesetting had the advantage of being more easily corrected and +facilitating the inclusion of text and lyrics, but only engraving +offered the ability to do unimpeded layout and unanticipated notation. +In the end, hand-engraved scores became the standard for all printed +music, with the exception of some hymnals and songbooks where +typesetting was justified by its ease and economy, even into the +twentieth century.}. Just a few decades ago, sheet music was made by +cutting and stamping the music into a zinc or pewter plate in mirror +image. The plate would be inked, and the depressions caused by the +cutting and stamping would hold ink. An image was formed by pressing +paper to the plate. The stamping and cutting was done completely by hand +and making a correction was cumbersome, so the engraving had to be +nearly perfect in one go. Engraving was a highly specialized skill; a +craftsman had to complete around five years of training before earning +the title of master engraver, and another five years of experience were +necessary to become truly skilled. + +@quotation +@iftex +@sourceimage{hader-slaan,,7cm,} +@end iftex +@ifnottex +@sourceimage{hader-slaan,,,jpg} +@end ifnottex +@end quotation + +LilyPond is inspired by traditional manual engravings published by +European music publishers in and towards the end of the first half of +the twentieth century, including Bärenreiter, Duhem, Durand, +Hofmeister, Peters, and Schott. This is sometimes regarded as the peak +of traditional musical engraving practice. As we have studied these +editions we have learned a great deal about what goes into a +well-engraved score, and the aspects that we wanted to imitate in +LilyPond. + +@c Now all newly printed music is produced with computers. This has +@c obvious advantages: prints are cheaper to make, editorial work can be +@c delivered by email, and the original data can be easily stored. +@c Unfortunately, computer-generated scores rarely match the quality of +@c hand-engraved scores. Instead, computer printouts have a bland, +@c mechanical look, which makes them unpleasant to play from. + +@menu +* Music fonts:: +* Optical spacing:: +* Ledger lines:: +* Optical sizing:: +* Why work so hard?:: +@end menu + +@node Music fonts +@unnumberedsubsec Music fonts + +The images below illustrate some differences between traditional +engraving and typical computer output. The left picture shows a scan of +a flat symbol from a hand-engraved Bärenreiter edition, while the right +picture depicts a symbol from an edition of the same music published in +2000. Although both images are printed in the same shade of ink, the +earlier version looks darker: the staff lines are heavier, and the +Bärenreiter flat has a bold, almost voluptuous rounded look. The right +scan, on the other hand, has thinner lines and a straight layout with +sharp corners. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab +@ifnotinfo +@iftex +@sourceimage{baer-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{baer-flat-gray,,,png} +@end ifnottex + +@tab +@iftex +@sourceimage{henle-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{henle-flat-gray,,,png} +@end ifnottex + +@end ifnotinfo +@ifinfo +@sourceimage{henle-flat-bw,,,png} +@sourceimage{baer-flat-bw,,,png} +@sourceimage{lily-flat-bw,,,png} +@end ifinfo + + +@item @tab +Bärenreiter (1950) +@tab +Henle (2000) + +@end multitable + +@cindex musical symbols +@cindex font +@cindex blackness +@cindex balance + +When we wanted to write a computer program to create music typography, +there were no musical fonts freely available that could match the +elegance of our favorite scores. Undeterred, we created a font of +musical symbols, relying on nice printouts of hand-engraved music. The +experience helped develop a typographical taste, and it made us +appreciate subtle design details. Without that experience, we would not +have realized how ugly the fonts were that we admired at first. + +Below is a sample of two music fonts: the upper set is the default font +in the Sibelius software (the @emph{Opus} font), and the lower set is +our own LilyPond font. + +@quotation +@iftex +@sourceimage{pdf/OpusAndFeta,,,} +@end iftex +@ifnottex +@sourceimage{OpusAndFeta,,,png} +@end ifnottex +@end quotation + +The LilyPond symbols are heavier and their weight is more consistent, +which makes them easier to read. Fine endings, such as the ones on the +sides of the quarter rest, should not end in sharp points, but rather +in rounded shapes. This is because sharp corners of the punching dies +are fragile and quickly wear out when stamping in metal. Taken together, +the blackness of the font must be carefully tuned together with the +thickness of lines, beams and slurs to give a strong yet balanced +overall impression. + +Also, notice that our half-note head is not elliptic but slightly diamond +shaped. The vertical stem of a flat symbol is slightly brushed, becoming +wider at the top. The sharp and the natural are easier to distinguish +from a distance because their angled lines have different slopes and the +vertical strokes are heavier. + +@node Optical spacing +@unnumberedsubsec Optical spacing + +In spacing, the distribution of space should reflect the durations +between notes. However, as we saw in the Bach Suite above, many modern +scores adhere to the durations with mathematical precision, which leads +to poor results. In the next example a motive is printed twice: the +first time using exact mathematical spacing, and the second with +corrections. Which do you prefer? + +@cindex optical spacing + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.0 + \override NoteSpacing #'same-direction-correction = #0.0 + \override StaffSpacing #'stem-spacing-correction = #0.0 + } + } +} +@end lilypond + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 | + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} + +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.6 + } + } +} +@end lilypond + +@cindex regular rhythms +@cindex regular spacing +@cindex spacing, regular + +Each bar in the fragment only uses notes that are played in a constant +rhythm. The spacing should reflect that. Unfortunately, the eye deceives +us a little; not only does it notice the distance between note heads, it +also takes into account the distance between consecutive stems. As a +result, the notes of an up-stem/@/down-stem combination should be put +farther apart, and the notes of a down-stem/@/up-stem combination should +be put closer together, all depending on the combined vertical positions +of the notes. The lower two measures are printed with this correction, +the upper two measures, however, form down-stem/@/up-stem clumps of +notes. A master engraver would adjust the spacing as needed to please +the eye. + +The spacing algorithms in LilyPond even take the barlines into account, +which is why the final up-stem in the properly spaced example has been +given a little more space before the barline to keep it from looking +crowded. A down-stem would not need this adjustment. + +@node Ledger lines +@unnumberedsubsec Ledger lines + +@cindex ledger lines +@cindex collisions + +Ledger lines present a typographical challenge: they make it more +difficult to space musical symbols close together and they must be clear +enough to identify the pitch at a glance. In the example below, we see +that ledger lines should be thicker than normal staff lines and that an +expert engraver will shorten a ledger line to allow closer spacing with +accidentals. We have included this feature in LilyPond's engraving. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab + +@iftex +@sourceimage{baer-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{baer-ledger,,,png} +@end ifnottex + +@tab + +@iftex +@sourceimage{lily-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{lily-ledger,,,png} +@end ifnottex + +@end multitable + + +@node Optical sizing +@unnumberedsubsec Optical sizing + +Music may need to be printed in a range of sizes. Originally, this was +accomplished by creating punching dies in each of the required sizes, +which meant that each die was designed to look its best at that size. +With the advent of digital fonts, a single outline can be mathematically +scaled to any size, which is very convenient, but at the smaller sizes +the glyphs will appear very light. + +In LilyPond, we have created fonts in a range of weights, corresponding +to a range of music sizes. This is a LilyPond engraving at staff size +26: + +@quotation +@iftex +@sourceimage{pdf/size26,,23mm,} +@end iftex +@ifnottex +@sourceimage{size26,,,png} +@end ifnottex +@end quotation + +@noindent +and this is the same engraving set at staff size 11, then +magnified by 236% to print at the same size as the previous example: + +@quotation +@iftex +@sourceimage{pdf/size11,,23mm,} +@end iftex +@ifnottex +@sourceimage{size11,,,png} +@end ifnottex +@end quotation + +@noindent +At smaller sizes, LilyPond uses proportionally heavier lines so the +music will still read well. + +@ignore +This also allows staves of different sizes to coexist peacefully when +used together on the same page: + +@c TODO: are the stems in this example the right thickness? How should +@c line weights be scaled for small staves? + +@c Grieg's Violin Sonata Op. 45 +@lilypond[indent=1.5cm] +global = { + \time 6/8 + \key c \minor +} + +\score { + << + \new Staff \with { + fontSize = #-4 + \override StaffSymbol #'staff-space = #(magstep -4) + \override StaffSymbol #'thickness = #(magstep -3) + } + \relative c' { + \global + \set Staff.instrumentName = #"Violin" + c8.(\f^> b16 c d) ees8.(^> d16 c b) + g8.(^> b16 c ees) g8-.^> r r + R2. + } + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff \relative c' { + \global + s2. + s4. s8 r8 r16 + 4.^> 8 r r + } + \new Staff \relative c { + \global + \clef "bass" + << + { + \once \override DynamicText #'X-offset = #-3 + 2.~->^\f + 4.~ 8 + } \\ { + 2.~ + 4.~ 8 + } + >> + r8 r16 16 + 4.-> 8 r r + } + >> + >> +} +@end lilypond +@end ignore + +@node Why work so hard? +@unnumberedsubsec Why work so hard? + +Musicians are usually more absorbed with performing than with studying +the looks of a piece of music, so nitpicking typographical details may +seem academic. But it is not. Sheet music is performance material: +everything is done to aid the musician in letting her perform better, +and anything that is unclear or unpleasant to read is a hindrance. + +Traditionally engraved music uses bold symbols on heavy staff to create +a strong, well-balanced look that stands out well when the music is far +away from the reader: for example, if it is on a music stand. A careful +distribution of white space allows music to be set very tightly without +crowding symbols together. The result minimizes the number of page +turns, which is a great advantage. + +This is a common characteristic of typography. Layout should be pretty, +not only for its own sake, but especially because it helps the reader in +his task. For sheet music this is of double importance because musicians +have a limited amount of attention. The less attention they need for +reading, the more they can focus on playing the music. In other words, +better typography translates to better performances. + +These examples demonstrate that music typography is an art that is +subtle and complex, and that producing it requires considerable +expertise, which musicians usually do not have. LilyPond is our +effort to bring the graphical excellence of hand-engraved music to +the computer age, and make it available to normal musicians. We +have tuned our algorithms, font-designs, and program settings to +produce prints that match the quality of the old editions we love +to see and love to play from. + + +@node Automated engraving +@section Automated engraving + +@cindex engraving, automated +@cindex automated engraving + +Here we describe what is required to create software that can mimic the +layout of engraved scores: a method of describing good layouts to the +computer and a lot of detailed comparisons with real engravings. + +@menu +* Beauty contests:: +* Improvement by benchmarking:: +* Getting things right:: +@end menu + +@node Beauty contests +@unnumberedsubsec Beauty contests + +How do we actually make formatting decisions? In other words, which +of the three configurations should we choose for the following slur? + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[( f] g[ a b d,)] r4 + \once \override Slur #'positions = #'(2 . 3) + e8[( f] g[ a b d,)] r4 + e8[( f] g[ a b d,)] r4 +} +@end lilypond + +There are a few books on the art of music engraving +available. Unfortunately, they contain simple rules of thumb and some +examples. Such rules can be instructive, but they are a far cry from +an algorithm that we could readily implement in a computer. Following +the instructions from literature leads to algorithms with lots of +hand-coded exceptions. Doing all this case analysis is a lot of work, +and often not all cases are covered completely: + +@quotation +@iftex +@sourceimage{ross-beam-scan,7cm,,} +@end iftex +@ifnottex +@sourceimage{ross-beam-scan,,,.jpg} +@end ifnottex +@end quotation + +(Image source: Ted Ross, @emph{The Art of Music Engraving}) + +Rather than trying to write detailed layout rules for every possible +scenario, we only have to describe the objectives well enough that +LilyPond can judge the attractiveness of several alternatives. Then, +for each possible configuration we compute an ugliness score and we +choose the least ugly configuration. + +For example, here are three possible slur configurations, and LilyPond +has given each one a score in @q{ugly points}. The first example gets +15.39 points for grazing one of the noteheads: + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[(_"15.39" f] g[ a b d,)] r4 +} +@end lilypond + +The +second one is nicer, but the slur doesn't start or end on the note heads. +It gets 1.71 points for the left side and 9.37 points for the right +side, plus another 2 points because the slur ascends while the melody +descends for a total of 13.08 ugly points: + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(2 . 3) + e8[(_"13.08" f] g[ a b d,)] r4 +} +@end lilypond + +The final slur gets 10.04 +points for the gap on the right and 2 points for the upward slope, but +it is the most attractive of the three configurations, so LilyPond +selects this one: + +@lilypond +\relative c { + \clef bass + e8[(_"12.04" f] g[ a b d,)] r4 +} +@end lilypond + +This technique is quite general, and is used to make optimal decisions +for beam configurations, ties and dots in chords, line breaks, and page +breaks. The results of these decisions can be judged by comparison to +real engravings. + +@node Improvement by benchmarking +@unnumberedsubsec Improvement by benchmarking + +LilyPond's output has improved gradually over time, and it continues to +improve by comparing its output to hand-engraved scores. + +For example, here is one line of a benchmark piece from a +hand-engraved edition (Bärenreiter BA320): + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@noindent +and the same quotation as engraved by a very old version of LilyPond +(version 1.4, May 2001): + +@iftex +@sourceimage{pdf/lily14-sarabande,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande,,,png} +@end ifnottex + +@noindent The LilyPond 1.4 output is certainly readable, but close +comparison with the hand-engraved score showed a lot of errors in the +formatting details: + +@iftex +@sourceimage{lily14-sarabande-annotated-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande-annotated,,,png} +@end ifnottex + +@itemize @bullet +@item there is too much space before the time signature +@item the stems of the beamed notes are too long +@item the second and fourth measures are too narrow +@item the slur is awkward-looking +@item the trill marks are too big +@item the stems are too thin +@end itemize + +@noindent +(There were also two missing note heads, several missing editorial +annotations, and an incorrect pitch!) + +By adjusting the layout rules and font design, the output has improved +considerably. Compare the same reference score and the output +from the current version of LilyPond (@version{}): + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@lilypond[staffsize=17.5,line-width=15.9\cm] +\relative c { + \clef "bass" + \key d \minor + \time 3/4 + \mergeDifferentlyDottedOn + << + { \slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e) } + \\ + { d4_2 a2 } + >> + \slurDashed + 4. e8( d c) + \slurSolid + bes8 g' f e16( f g_1 a_2 bes_3 d,_2) + \slurDashed + cis4.-\trill b8_3( a g) + << + { \slurDashed d'8.( e16) e4.-\trill( d16 e) } + \\ + { 4 a2 } + >> +} +@end lilypond + +@noindent +The current output is not a clone of the reference edition, but it is +much closer to publication quality that the earlier output. + +@node Getting things right +@unnumberedsubsec Getting things right + +We can also measure LilyPond's ability to make music engraving decisions +automatically by comparing LilyPond's output to the output of a +commercial software product. In this case we have chosen Finale 2008, +which is one of the most popular commercial score writers, particularly +in North America. Sibelius is their major rival and they appear to be +especially strong in the European market. + +For our comparison we selected Bach's Fugue in G minor from the +Well-Tempered Clavier, Book I, BWV 861, whose opening subject is + +@lilypond +\relative c' { + \key g \minor + \clef "treble_8" + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a bes8 +} +@end lilypond + +@noindent + +We made our comparison by engraving the last seven measures of the piece +(28--34) in Finale and LilyPond. This is the point in the piece where +the subject returns in a three-part stretto and leads into the closing +section. In the Finale version, we have resisted the temptation to make +any adjustments to the default output because we are trying to show the +things that each software package gets right without assistance. The +only major edits that we made were adjusting the page size to match this +essay and forcing the music onto two systems to make the comparison +easier. By default Finale would have engraved two systems of three +measures each and a final, full-width system containing a single +measure. + +Many of the differences between the two engravings are visible in +measures 28--29, as shown here with Finale first and LilyPond second: + +@iftex +@sourceimage{pdf/bwv861mm28-29,14cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm28-29,,,png} +@end ifnottex + +@lilypond[staffsize=19.5,line-width=14\cm] +global = { \key g \minor } + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 +} + +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a +} + +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + \new Staff = "LH" + << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond + +Some shortcomings in the unedited Finale output include: +@itemize @bullet +@item Most of the beams extend too far off the staff. A beam that points +towards the center of the staff should have a length of about one +octave, but engravers shorten this when the beam points away from the +staff in multi-voice music. The Finale beaming can be easily improved +with their Patterson Beams plug-in, but we elected to skip that step for +this example. +@item Finale doesn't adjust the positions of interlocking note heads, +which makes the music extremely difficult to read when the upper and +lower voices exchange positions temporarily: + +@lilypond +collide = \once \override NoteColumn #'force-hshift = #0 + +\score { + << + \new Voice = "sample" \relative c''{ + \key g \minor + << + { \voiceOne g4 \collide g4 } + \new Voice { \voiceTwo bes \collide bes } + >> + } + \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" } + >> +} +@end lilypond + +@item Finale has placed all of the rests at fixed heights on the staff. +The user is free to adjust them as needed, but the software makes no +attempt to consider the content of the other voice. As luck would have +it, there are no true collisions between notes and rests in this example, +but that has more to do with the positions of the notes than the rest. +In other words, Bach deserves more credit for avoiding a complete +collision than Finale does. + +@end itemize + +This example is not intended to suggest that Finale cannot be used to +produce publication-quality output. On the contrary, in the hands of a +skilled user it can and does, but it requires skill and time. One of the +fundamental differences between LilyPond and commercial scorewriters is +that LilyPond hopes to reduce the amount of human intervention to an +absolute minimum, while other packages try to provide an attractive +interface in which to make these types of edits. + +One particularly glaring omission we found from Finale is a missing flat +in measure 33: + +@quotation +@iftex +@sourceimage{pdf/bwv861mm33-34-annotate,7.93cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm33-34-annotate,,,png} +@end ifnottex +@end quotation + +@noindent +The flat symbol is required to cancel out the natural in the same +measure, but Finale misses it because it occurred in a different voice. +So in addition to running a beaming plug-in and checking the spacing on +the noteheads and rests, the user must also check each measure for +cross-voice accidentals to avoid interrupting a rehearsal over an +engraving error. + +If you are interested in examining these examples in more detail, the +full seven-measure excerpt can be found at the end of this essay along +with four different published engravings. Close examination reveals that +there is some acceptable variation among the hand-engravings, but that +LilyPond compares reasonably well to that acceptable range. There are +still some shortcomings in the LilyPond output, for example, it appears +a bit too aggressive in shortening some of the stems, so there is room +for further development and fine-tuning. + +Of course, typography relies on human judgment of appearance, so people +cannot be replaced completely. However, much of the dull work can be +automated. If LilyPond solves most of the common situations correctly, +this will be a huge improvement over existing software. Over the course +of years, the software can be refined to do more and more things +automatically, so manual overrides are less and less necessary. Where +manual adjustments are needed, LilyPond's structure has been designed +with that flexibility in mind. + +@node Building software +@section Building software + +This section describes some of the programming decisions that we made +when designing LilyPond. + +@menu +* Music representation:: +* What symbols to engrave?:: +* Flexible architecture:: +@end menu + + +@node Music representation +@unnumberedsubsec Music representation + +@cindex syntax +@cindex recursive structures + +Ideally, the input format for any high-level formatting system is +an abstract description of the content. In this case, that would +be the music itself. This poses a formidable problem: how can we +define what music really is? Instead of trying to find an answer, +we have reversed the question. We write a program capable of +producing sheet music, and adjust the format to be as lean as +possible. When the format can no longer be trimmed down, by +definition we are left with content itself. Our program serves as +a formal definition of a music document. + +The syntax is also the user-interface for LilyPond, hence it is +easy to type: + +@example +@{ + c'4 d'8 +@} +@end example + +@noindent +to create a quarter note on middle C (C1) and an eighth note on +the D above middle C (D1). + +@lilypond[quote] +{ + c'4 d'8 +} +@end lilypond + +On a microscopic scale, such syntax is easy to use. On a larger +scale, syntax also needs structure. How else can you enter +complex pieces like symphonies and operas? The structure is +formed by the concept of music expressions: by combining small +fragments of music into larger ones, more complex music can be +expressed. For example + +@lilypond[quote,verbatim,fragment,relative=1] +f4 +@end lilypond + +@noindent +Simultaneous notes can be constructed by enclosing them with +@code{<<} and @code{>>}: + +@example +<> +@end example + +@lilypond[quote,fragment,relative=1] +\new Voice { <> } +@end lilypond + +@noindent +This expression is put in sequence by enclosing it in curly braces +@code{@{@tie{}@dots{}@tie{}@}}: + +@example +@{ f4 <> @} +@end example + +@lilypond[quote,relative=1,fragment] +{ f4 <> } +@end lilypond + +@noindent +The above is also an expression, and so it may be combined again +with another simultaneous expression (a half note) using +@code{<<}, @code{\\}, and @code{>>}: + +@example +<< g2 \\ @{ f4 <> @} >> +@end example + +@lilypond[quote,fragment,relative=2] +\new Voice { << g2 \\ { f4 <> } >> } +@end lilypond + +Such recursive structures can be specified neatly and formally in +a context-free grammar. The parsing code is also generated from +this grammar. In other words, the syntax of LilyPond is clearly +and unambiguously defined. + +User-interfaces and syntax are what people see and deal with most. +They are partly a matter of taste, and also the subject of much +discussion. Although discussions on taste do have their merit, +they are not very productive. In the larger picture of LilyPond, +the importance of input syntax is small: inventing neat syntax is +easy, while writing decent formatting code is much harder. This +is also illustrated by the line-counts for the respective +components: parsing and representation take up less than 10% of +the source code. + +When designing the structures used in LilyPond, we made some different +decisions than are apparent in other software. Consider the hierarchical +nature of music notation: + +@lilypond[quote,fragment] +<< + \new Staff \relative c'' { + \key g \major + \time 3/4 + d4 g,8 a b c d4 g, g + } + \new Staff \relative c' { + \clef "bass" + \key g \major + 2 a4 b2. + } +>> +@end lilypond + +In this case, there are pitches grouped into chords that belong to +measures, which belong to staves. This resembles a tidy structure of +nested boxes: + +@quotation +@iftex +@sourceimage{pdf/nestedboxes,,4cm,} +@end iftex +@ifnottex +@sourceimage{nestedboxes,,,png} +@end ifnottex +@end quotation + +Unfortunately, the structure is tidy because it is based on some +excessively restrictive assumptions. This becomes apparent if we +consider a more complicated musical example: + +@lilypond[quote] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +\new PianoStaff << + \new Staff = "RH" << + \new Voice = "I" \relative c''' { + \time 3/4 + \voiceOne + \times 6/7 { g8 g g g g g g } + \oneVoice + r4 r4\fermata + } + \new Voice = "II" \relative c' { + \voiceTwo + c4 + \times 4/5 { + 8 f g + \change Staff = "LH" \oneVoice + \stemUp g,( c} + r4 + \override Stem #'cross-staff = ##t + \override Stem #'length = #12 + ) r\fermata + } + >> + \new Staff = "LH" << + \new Voice = "III" \relative c' { + \time 2/4 + \clef "bass" + g4 \stopStaff s + \startStaff s2*2 + } + >> +>> +@end lilypond + +In this example, staves start and stop at will, voices jump around +between staves, and the staves have different time signatures. Many +software packages would struggle with reproducing this example because +they are built on the nested box structure. With LilyPond, on the other +hand, we have tried to keep the input format and the structure as +flexible as possible. + +@node What symbols to engrave? +@unnumberedsubsec What symbols to engrave? + +@cindex engraving +@cindex typography +@cindex engraver +@cindex plug-in + +The formatting process decides where to place symbols. However, +this can only be done once it is decided @emph{what} symbols +should be printed -- in other words, what notation to use. + +Common music notation is a system of recording music that has +evolved over the past 1000 years. The form that is now in common +use dates from the early Renaissance. Although the basic form +(i.e., note heads on a 5-line staff) has not changed, the details +still evolve to express the innovations of contemporary notation. +Hence, common music notation encompasses some 500 years of music. +Its applications range from monophonic melodies to monstrous +counterpoints for a large orchestra. + +How can we get a grip on such a seven-headed beast, and force it +into the confines of a computer program? Our solution is to break +up the problem of notation (as opposed to engraving, i.e., +typography) into digestible and programmable chunks: every type of +symbol is handled by a separate module, a so-called plug-in. Each +plug-in is completely modular and independent, so each can be +developed and improved separately. Such plug-ins are called +@code{engraver}s, by analogy with craftsmen who translate musical +ideas to graphic symbols. + +In the following example, we start out with a plug-in for note +heads, the @code{Note_heads_engraver}. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + \remove "Staff_symbol_engraver" + \consists "Pitch_squash_engraver" + } + } +} +@end lilypond + +@noindent +Then a @code{Staff_symbol_engraver} adds the staff, + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \consists "Pitch_squash_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +the @code{Clef_engraver} defines a reference point for the staff, + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +and the @code{Stem_engraver} adds stems. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +The @code{Stem_engraver} is notified of any note head coming +along. Every time one (or more, for a chord) note head is seen, a +stem object is created and connected to the note head. By adding +engravers for beams, slurs, accents, accidentals, bar lines, time +signature, and key signature, we get a complete piece of notation. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { \topVoice } +@end lilypond + +@cindex polyphony +@cindex engraving multiple voices +@cindex contexts + +This system works well for monophonic music, but what about +polyphony? In polyphonic notation, many voices can share a staff. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\new Staff << \topVoice \\ \botVoice >> +@end lilypond + +In this situation, the accidentals and staff are shared, but the +stems, slurs, beams, etc., are private to each voice. Hence, +engravers should be grouped. The engravers for note heads, stems, +slurs, etc., go into a group called @q{Voice context}, while the +engravers for key, accidental, bar, etc., go into a group called +@q{Staff context}. In the case of polyphony, a single Staff +context contains more than one Voice context. Similarly, multiple +Staff contexts can be put into a single Score context. The Score +context is the top level notation context. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { + << + \new Staff << \topVoice \\ \botVoice >> + \new Staff << \pah \\ \hoom >> + >> +} +@end lilypond + +@seealso +Internals Reference: @rinternals{Contexts}. + +@node Flexible architecture +@unnumberedsubsec Flexible architecture + +When we started, we wrote the LilyPond program entirely in the C++ +programming language; the program's functionality was set in stone +by the developers. That proved to be unsatisfactory for a number +of reasons: + +@itemize + +@item When LilyPond makes mistakes, users need to override +formatting decisions. Therefore, the user must have access to the +formatting engine. Hence, rules and settings cannot be fixed by +us at compile-time but must be accessible for users at run-time. + +@item Engraving is a matter of visual judgment, and therefore a +matter of taste. As knowledgeable as we are, users can disagree +with our personal decisions. Therefore, the definitions of +typographical style must also be accessible to the user. + +@item Finally, we continually refine the formatting algorithms, so +we need a flexible approach to rules. The C++ language forces a +certain method of grouping rules that cannot readily be applied to +formatting music notation. + +@end itemize + +@cindex Scheme programming language + +These problems have been addressed by integrating an interpreter +for the Scheme programming language and rewriting parts of +LilyPond in Scheme. The current formatting architecture is built +around the notion of graphical objects, described by Scheme +variables and functions. This architecture encompasses formatting +rules, typographical style and individual formatting decisions. +The user has direct access to most of these controls. + +Scheme variables control layout decisions. For example, many +graphical objects have a direction variable that encodes the +choice between up and down (or left and right). Here you see two +chords, with accents and arpeggios. In the first chord, the +graphical objects have all directions down (or left). The second +chord has all directions up (right). + +@lilypond[quote,ragged-right] +\score { + \relative c' { + \stemDown 4_>-\arpeggio + \override Arpeggio #'direction = #RIGHT + \stemUp 4^>-\arpeggio + } + \layout { + \context { + \Score + \override SpacingSpanner #'spacing-increment = #3 + \override TimeSignature #'transparent = ##t + } + } +} +@end lilypond + +@cindex score formatting +@cindex formatting a score +@cindex formatting rules + +@noindent +The process of formatting a score consists of reading and writing +the variables of graphical objects. Some variables have a preset +value. For example, the thickness of many lines -- a +characteristic of typographical style -- is a variable with a +preset value. You are free to alter this value, giving your score +a different typographical impression. + +@lilypond[quote,ragged-right] +fragment = { + \clef bass f8 as8 + c'4-~ c'16 as g f e16 g bes c' des'4 +} +<< + \new Staff \fragment + \new Staff \with { + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #0.5 + \override Bar #'thickness = #3.6 + \override Tie #'thickness = #2.2 + \override StaffSymbol #'thickness = #3.0 + \override Tie #'extra-offset = #'(0 . 0.3) + } + \fragment +>> +@end lilypond + +Formatting rules are also preset variables: each object has +variables containing procedures. These procedures perform the +actual formatting, and by substituting different ones, we can +change the appearance of objects. In the following example, the +rule governing which note head objects are used to produce the +note head symbol is changed during the music fragment. + +@lilypond[quote,ragged-right] +#(set-global-staff-size 30) + +#(define (mc-squared grob orig current) + (let* ((interfaces (ly:grob-interfaces grob)) + (pos (ly:grob-property grob 'staff-position))) + (if (memq 'note-head-interface interfaces) + (begin + (ly:grob-set-property! grob 'stencil + (grob-interpret-markup grob + (make-lower-markup 0.5 + (case pos + ((-5) "m") + ((-3) "c ") + ((-2) (make-smaller-markup (make-bold-markup "2"))) + (else "bla"))))))))) + +\new Voice \relative c' { + \stemUp + \set autoBeaming = ##f + \time 2/4 + 4 + \once \override NoteHead #'stencil = #note-head::brew-ez-stencil + \once \override NoteHead #'font-size = #-7 + \once \override NoteHead #'font-family = #'sans + \once \override NoteHead #'font-series = #'bold + 4 + \once \override NoteHead #'style = #'cross + 4 + \applyOutput #'Voice #mc-squared + 4 + << + { d8[ es-( fis^^ g] fis2-) } + \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } + >> +} +@end lilypond + + + +@node Putting LilyPond to work +@section Putting LilyPond to work + +@cindex simple examples +@cindex examples, simple + +We have written LilyPond as an experiment of how to condense the +art of music engraving into a computer program. Thanks to all +that hard work, the program can now be used to perform useful +tasks. The simplest application is printing notes. + +@lilypond[quote,relative=1] +{ + \time 2/4 + c4 c g'4 g a4 a g2 +} +@end lilypond + +@noindent +By adding chord names and lyrics we obtain a lead sheet. + +@lilypond[quote,ragged-right] +<< + \chords { c2 c f2 c } + \new Staff + \relative c' { + \time 2/4 + c4 c g' g a a g2 + } + \addlyrics { twin -- kle twin -- kle lit -- tle star } +>> +@end lilypond + +Polyphonic notation and piano music can also be printed. The +following example combines some more exotic constructs. + +@lilypond[quote,line-width=15.9\cm] +\header { + title = "Screech and boink" + subtitle = "Random complex notation" + composer = "Han-Wen Nienhuys" +} + +\score { + \context PianoStaff << + \new Staff = "up" { + \time 4/8 + \key c \minor + << { + \revert Stem #'direction + \change Staff = down + \set subdivideBeams = ##t + g16.[ + \change Staff = up + c'''32 + \change Staff = down + g32 + \change Staff = up + c'''32 + \change Staff = down + g16] + \change Staff = up + \stemUp + \set followVoice = ##t + c'''32([ b''16 a''16 gis''16 g''32)] + } \\ { + s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] + } \\ { + s4 \autoBeamOff d''8.. f''32 + } \\ { + s4 es''4 + } >> + } + + \new Staff = "down" { + \clef bass + \key c \minor + \set subdivideBeams = ##f + \override Stem #'french-beaming = ##t + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #4.0 + g'16[ b16 fis16 g16] + << \makeClusters { + as16 + + + } \\ { + \override Staff.Arpeggio #'arpeggio-direction =#down + 4\arpeggio + } + >> } + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 60 8) + } + } + \layout { + \context { + \Staff + \consists Horizontal_bracket_engraver + } + } +} +@end lilypond + +The fragments shown above have all been written by hand, but that +is not a requirement. Since the formatting engine is mostly +automatic, it can serve as an output means for other programs that +manipulate music. For example, it can also be used to convert +databases of musical fragments to images for use on websites and +multimedia presentations. + +This manual also shows an application: the input format is text, and can +therefore be easily embedded in other text-based formats such as +@LaTeX{}, HTML, or in the case of this manual, Texinfo. Using the +@command{lilypond-book} program, included with LilyPond, the input +fragments can be replaced by music images in the resulting PDF or HTML +output files. Another example is the third-party OOoLilyPond extension +for OpenOffice.org, which makes it extremely easy to embed musical +examples in documents. + +For more examples of LilyPond in action, full documentation, and the +software itself, see our main website: www.lilypond.org. + +@page +@node Engraved examples (BWV 861) +@section Engraved examples (BWV 861) + +This section contains four reference engravings and two +software-engraved versions of Bach's Fugue in G minor from the +Well-Tempered Clavier, Book I, BWV 861 (the last seven measures). + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989): + +@iftex +@sourceimage{bwv861-baer,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-small,,,png} +@end ifnottex + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989), an alternate musical source. Aside from the textual differences, +this demonstrates slight variations in the engraving decisions, even +from the same publisher and edition: + +@iftex +@sourceimage{bwv861-baer-alt,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-alt-small,,,png} +@end ifnottex + +@noindent +Breitkopf & Härtel, edited by Ferruccio Busoni (Wiesbaden, 1894), also +available from the Petrucci Music Library (IMSLP #22081). The editorial +markings (fingerings, articulations, etc.) have been removed for clearer +comparison with the other editions here: + +@iftex +@sourceimage{bwv861-breitkopf,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-breitkopf-small,,,png} +@end ifnottex + +@noindent +Bach-Gesellschaft edition (Leipzig, 1866), available from the Petrucci +Music Library (IMSPL #02221): + +@iftex +@sourceimage{bwv861-gessellschaft,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-gessellschaft-small,,,png} +@end ifnottex + +@noindent +Finale 2008: + +@iftex +@sourceimage{pdf/bwv861-finale2008a,,,} +@end iftex +@ifnottex +@sourceimage{bwv861-finale2008a,,,png} +@end ifnottex + +@sp 4 +@noindent +LilyPond, version @version{}: + +@lilypond[staffsize=14.3,line-width=15.9\cm] +global = {\key g \minor} + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 + r2 r8 d16 ees f8 ees16 d + ees4 ~ ees16 d c bes a4 r8 ees'16 d + c8 d16 ees d8 e16 fis g8 fis16 g a4 ~ + a8 d, g f ees d c bes + a2 g\fermata \bar "|." +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 + r8 fis16 g a8 g16 fis g2 ~ + g2 r8 d' ees g, + fis4 g r8 a16 bes c8 bes16 a + bes4. 8
r r + 4 d2 +} +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a + bes2 ~ bes8 b16 a g8 a16 b + c4 r r2 + R1 + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a b2 +} +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a + d,8 d'16 c bes8 c16 d ees2 ~ + ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a + d,8 d'16 c bes8 c16 d ees8 c a fis' + g f ees d c bes a g + c a d d, g2\fermata +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + + \new Staff = "LH" << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond diff --git a/Documentation/essay/engravingbib.bib b/Documentation/essay/engravingbib.bib new file mode 100644 index 0000000000..f419af4e65 --- /dev/null +++ b/Documentation/essay/engravingbib.bib @@ -0,0 +1,323 @@ +% This file cannot be named "engraving.bib" due to a conflict +% with the existing engraving.itely file. -gp + +% +% TITLe =The engraving bibliography +% AUTHOr =Han-Wen Nienhuys +% + +@Book{banter87, + author = {Harald Banter}, + title = {Akkord Lexikon}, + publisher = {Schott's Söhne}, + year = {1987}, + isbn = {ISBN 3-7957-2095-8}, + note = {Comprehensive overview of commonly used + chords. Suggests (and uses) a unification for all different kinds + of chord names.}, + address = {Mainz, Germany}, +} + +@Book{rastall83, + author = {Richard Rastall}, + ALTeditor = {}, + title = {The Notation of Western Music: an + Introduction}, + publisher = {J. M. Dent \& Sons London}, + year = {1983}, + note = {Interesting account of the evolution and origin of common notation starting from neumes, and ending with modern innovations HWN}, +} + +@Book{ignatzek95, + author = {Klaus Ignatzek}, + title = {Die Jazzmethode für Klavier 1}, + publisher = {Schott}, + year = 1995, + note = {This book contains a system for denoting chords that is used in LilyPond.} +} + +@Book{mcgrain91, + author = {Mark Mc Grain}, + title = {Music notation}, + year = 1991, + publisher = {Hal Leonard Publishing Corporation}, + isbn = {0793508479}, + note = {HWN writes: `Book' edition of lecture notes from XXX school of +music. The book looks like it is xeroxed from bad printouts. The +content has nothing you won't find in other books like [read] or +[heussenstamm]. } +} + +@Book{ross87, + author = {Ted Ross}, + title = {Teach yourself the art of music engraving and processing}, + publisher = {Hansen House}, + year = 1987, + annote = {This is about engraving, i.e. professional typesetting. It contains + directions on good typesetting, but the sections on reproduction + technicalities, how to use pens and history are interesting. + Especially the section on Music Typewriters is amusing HWN}, + address = {Miami, Florida}, +} + +@Book{read78, + note = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN}, + year = {1978}, + title = {Modern Rhythmic Notation}, + author = {Gardner Read}, + publisher = {Indiana University Press}, +} + +@Book{read79, + note = {This is as close to the ``standard'' +reference work for music notation issues as one is likely to get.}, + title = {Music Notation: a Manual of Modern Practice}, + author = {Gardner Read}, + totalentry = {(2nd edition)}, + year = 1979, + publisher = {Taplinger Publishing}, + address = {New York}, +} + +@Book{weaner93, + year = {1993}, + title = {Standard Music Notation Practice}, + author = {Maxwell Weaner and Walter Boelke}, + totalentry = {revised edition by Arnold Broido and Daniel Dorff.}, + publisher = {Music Publisher's Association of the United States Inc}, + address = {New York} +} + +@Book{wanske88, + annote = {I. A very thorough overview of engraving practices of various +craftsmen. It includes detailed specs of characters, dimensions +etc. II. a thorough overview of a anonymous (by now antiquated) +automated system. EDV Means e(lektronischen) D(aten)v(erarbeitung), +electronic data processing HWN.}, + year = {1988}, + title = {Musiknotation --- Von der Syntax des +Notenstichs zum EDV-gesteuerten Notensatz}, + author = {Helene Wanske}, + publisher = {Schott-Verlag}, + address = {Mainz}, + isbn = {ISBN 3-7957-2886-x}, +} + +@Book{hader48, + year = {1948}, + title = {Aus der Werkstatt eines Notenstechers}, + author = {Karl Hader}, + publisher = {Waldheim--Eberle Verlag}, + address = {Vienna}, + note = {Hader was a chief-engraver in a Viennese engraving +workshop. This beautiful booklet was intended as an introduction for +laymen on the art of engraving. It contains a step by step, in-depth +explanation of how to cut and stamp music into zinc plates. It also +contains a few compactly formulated rules on musical orthography. Out +of print.} +} + +@Book{gamble23, + author = {William Gamble}, + title = {Music Engraving and printing. Historical and Technical Treatise}, + publisher = {Sir Isaac Pitman & Sons, ltd.}, + year = 1923, + note = {This patriotic book was an attempt to promote and help +British music engravers. It is somewhat similar to Hader's +book [hader48] in scope and style, but Gamble focuses more on +technical details (Which French punch cutters are worth buying from, +etc.), and does not treat typographical details, such as optical +illusions. It is available as reprint from Da Capo Press, New York +(1971).} +} + +@Booklet{mpa96, + note = {Pamphlet explaining a few fine points in music font design HWN}, + year = {1996}, + title = {Standard music notation specifications for computer programming.}, + month = {December}, + author = {mpa}, + publisher = {MPA}, +} + +@Book{donato63, + year = {1963}, + author = {Anthony Donato}, + title = {Preparing Music Manuscript}, + address = {Englewood Cliffs, NJ}, + publisher = {Prentice-Hall}, +} + +@Book{karkoshka72, + year = {1972}, + title = {Notation in New Music; a critical guide to interpretation and realisation}, + author = {Erdhard Karkoshka}, + translator = {Ruth Koenig}, + publisher = {Praeger Publishers}, + address = {New York}, + note = {(Out of print)}, +} + +@Book{roemer84, + year = {1984}, + title = {The Art of Music Copying}, + author = {Clinton Roemer}, + publisher = {Roerick music co.}, + address = {Sherman Oaks (CA)}, + note = {Out of print. Heussenstamm writes: an instructional manual +which specializes in methods used in the commercial field. }, + edition = {2nd}, +} + +@Book{rosecrans79, + year = {1979}, + title = {Music Notation Primer}, + author = {Glen Rosecrans}, + publisher = {Passantino}, + address = {New York}, + note = {Heussenstamm writes: Limited in scope, similar to [Roemer84]} +} + +@Book{donemus82, + year = {1982}, + title = {Uitgeven van muziek}, + subtitle = {Handleiding voor componisten en copiisten}, + author = {Donemus}, + publisher = {Donemus Amsterdam}, + note = {Manual on copying for composers and copyists at the Dutch +publishing house Donemus. Besides general comments on copying, it +also contains a lot of hands-on advice for making performance +material for modern pieces.} +} + +@Book{vinci, + author = {Vinci, Albert C.}, + title = {Fundamentals of Traditional Music Notation}, + publisher = {Kent State University Press}, + year = {1989} +} + +@Book{schirmer90, + author = {Schirmer}, + title = {The G. Schirmer Manual of Style and Usage}, + address = {New York}, + publisher = {The G. Schirmer Publications Department}, + year = {2001}, + note = {This is the style guide for Schirmer publications. This manual +specifically focuses on preparing print for publication by +Schirmer. It discusses many details that are not in other, normal +notation books. It also gives a good idea of what is necessary to bring +printouts to publication quality. It can be ordered from the rental department.}, +} + +@Book{stone80, + year = {1980}, + title = {Music Notation in the Twentieth Century}, + author = {Kurt Stone}, + publisher = {Norton}, + address = {New York}, + note = {Heussenstamm writes: The most important book on notation in recent years.}, +} + +@Book{heussenstamm87, + year = {1987}, + title = {The Norton Manual of Music Notation}, + author = {George Heussenstamm}, + address = {New York}, + publisher = {Norton}, + note = {Hands-on instruction book for copying (ie. handwriting) music. Fairly complete. HWN} +} + +@Book{gerou96, + note = {A cheap, concise, alphabetically ordered list of typesetting and music (notation) issues with a rather simplistic attitude but in most cases "good-enough" answers JCN}, + year = {1996}, + title = {Essential Dictionary of Music Notation}, + author = {Tom Gerou and Linda Lusk}, + publisher = {Alfred Publishing}, + address = {Van Nuys CA}, + isbn = {ISBN 0-88284-768-6}, +} + +@Book{chlapik87, + note = {An clearly written book for the casually interested +reader. It shows some of the conventions and difficulties in +printing music HWN}, + year = {1987}, + title = {Die Praxis des Notengraphikers}, + author = {Herbert Chlapik}, + publisher = {Doblinger}, + isbn = {ISBN 3-9000 035-96-2}, +} + +@Book{barksdale57, + author = {Barksdale, A}, + year = {1957}, + title = {The Printed Note: 500 Years of Music Printing and Engraving}, + address = {Toledo, Ohio}, + month = {January}, + note = {`The exhibition "The Printed Note" attempts to show the various processes used since the second of the 15th century for reproducing music mechanically ... '. The illustration mostly feature ancient music}, + publisher = {The Toledo Museum of Art}, +} + +@Book{wolf19, + author = {Wolf, Johannes}, + year = {1919}, + title = {Handbuch der Notationskunde}, + address = {Leipzig}, + publisher = {Breitkopf & Hartel}, + note = {Very thorough treatment (in two volumes) of the history of music notation}, +} + +@Book{rosenthal67, + author = {Rosenthal, Carl A}, + year = {1967}, + title = {A Practical Guide to Music Notation}, + address = {New York}, + publisher = {MCA Music}, + note = {Heussenstamm writes: Informative in terms of traditional notation. Does not concern score preparation} +} + +@Book{boehm61, + author = {Boehm, Laszlo}, + year = {1961}, + title = {Modern Music Notation}, + address = {New York}, + publisher = {G. Schirmer, Inc.}, + note = {Heussenstamm writes: A handy compact reference book in basic notation.} +} + +@Book{button20, + author = {Button, H. Elliot}, + title = {System in Musical Notation}, + publisher = {Novello and co.}, + year = 1920, + address = {London} +} + +@Book{johnson46, + author = {Johnson, Harold}, + title = {How to write music manuscript}, + publisher = {Carl Fischer, Inc.}, + year = 1946, + address = {New York} +} + +@Book{tyboni94, + author = {Börje Tyboni}, + title = {Noter Handbok I Traditionell Notering}, + publisher = {Gehrmans Musikförlag}, + year = 1994, + address = {Stockholm}, + note = {Swedish book on music notation.} +} + +@Book{jaschinski00, + editor = {Andreas Jaschinski}, + title = {Notation}, + publisher = {Bärenreiter Verlag}, + year = 2000, + number = {BVK1625}, + annote = {Articles from "Musik in Geschichte und Gegenwart" +pertaining to notation. Both "alternative" notation and ancient +notation is treated in depth, while "common" notation is not. } +} diff --git a/Documentation/essay/literature.itely b/Documentation/essay/literature.itely new file mode 100644 index 0000000000..43d8188179 --- /dev/null +++ b/Documentation/essay/literature.itely @@ -0,0 +1,98 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Literature list +@chapter Literature list + +Here are lists of references used in LilyPond. + +@menu +* Short literature list:: +* Long literature list:: +@end menu + +@node Short literature list +@section Short literature list + + +If you need to know more about music notation, here are some +interesting titles to read. + + + +@table @cite +@item Ignatzek 1995 +Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne +1995. Mainz, Germany ISBN 3-7957-5140-3. + +A tutorial introduction to playing Jazz on the piano. One of the first +chapters contains an overview of chords in common use for Jazz music. + +@item Gerou 1996 + +Tom Gerou and Linda Lusk, Essential Dictionary of Music +Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. + +A concise, alphabetically ordered list of typesetting and music +(notation) issues, covering most of the normal cases. + +@item Read 1968 +Gardner Read, Music Notation: A Manual of Modern Practice. +Taplinger Publishing, New York (2nd edition). + +A standard work on music notation. + +@item Ross 1987 +Ted Ross, Teach yourself the art of music engraving and processing. +Hansen House, Miami, Florida 1987. + +This book is about music engraving, i.e., professional typesetting. +It contains directions on stamping, use of pens and notational +conventions. The sections on reproduction technicalities and history +are also interesting. + +@item Schirmer 2001 +The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. +(This book can be ordered from the rental department.) + +This manual specifically focuses on preparing print for publication by +Schirmer. It discusses many details that are not in other, normal +notation books. It also gives a good idea of what is necessary to bring +printouts to publication quality. + +@item Stone 1980 + +Kurt Stone, Music Notation in the Twentieth Century. +Norton, New York 1980. + +This book describes music notation for modern serious music, but +starts out with a thorough overview of existing traditional notation +practices. + +@end table + + +@node Long literature list +@section Long literature list + +@subheading University of Colorado Engraving music bibliography + +@include colorado.itexi + +@subheading Computer notation bibliography + +@include computer-notation.itexi + +@subheading Engraving bibliography + +@include engravingbib.itexi + diff --git a/Documentation/extending.tely b/Documentation/extending.tely new file mode 100644 index 0000000000..684f7216c3 --- /dev/null +++ b/Documentation/extending.tely @@ -0,0 +1,75 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-extending.info +@settitle Extending LilyPond +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@macro manualIntro +This file explains how to extend the functionality of +LilyPond version @version{}. +@end macro + +@c `Extending' was born 2003-04-23 with git commit c08f6e8... +@macro copyrightDeclare +Copyright @copyright{} 2003--2011 by the authors. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Programming extensions for the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Extending} + + +@c TOC -- non-tex +@ifnottex + +@menu +* Scheme tutorial:: Programming inside LilyPond. +* Interfaces for programmers:: How to interface with scheme. +* LilyPond Scheme interfaces:: Getting information in and out of music + +Appendices + +* GNU Free Documentation License:: License of this document. +* LilyPond index:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include extending/scheme-tutorial.itely +@include extending/programming-interface.itely + +@include fdl.itexi + +@node LilyPond index +@appendix LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/extending/GNUmakefile b/Documentation/extending/GNUmakefile new file mode 100644 index 0000000000..cab24d6a17 --- /dev/null +++ b/Documentation/extending/GNUmakefile @@ -0,0 +1,7 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make + + diff --git a/Documentation/extending/programming-interface.itely b/Documentation/extending/programming-interface.itely new file mode 100644 index 0000000000..acbff57119 --- /dev/null +++ b/Documentation/extending/programming-interface.itely @@ -0,0 +1,1019 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Interfaces for programmers +@chapter Interfaces for programmers + +Advanced tweaks may be performed by using Scheme. If you are +not familiar with Scheme, you may wish to read our +@ref{Scheme tutorial}. + +@menu +* Music functions:: +* Markup functions:: +* Contexts for programmers:: +* Callback functions:: +* Inline Scheme code:: +* Difficult tweaks:: +@end menu + + +@node Music functions +@section Music functions + +@emph{Music functions} are scheme procedures that can create music +expressions automatically, and can be used to greatly simplify the +input file. + +@menu +* Music function syntax:: +* Simple substitution functions:: +* Intermediate substitution functions:: +* Mathematics in functions:: +* Functions without arguments:: +* Void functions:: +@end menu + + +@node Music function syntax +@subsection Music function syntax + +The general form for music functions is: + +@example +function = +#(define-music-function + (parser location @var{arg1} @var{arg2} @dots{}) + (@var{type1?} @var{type2?} @dots{}) + @var{music}) +@end example + +@noindent +where + +@multitable @columnfractions .33 .66 +@item @code{@var{argN}} +@tab @var{n}th argument + +@item @code{@var{typeN?}} +@tab a scheme @emph{type predicate} for which @code{@var{argN}} +must return @code{#t}. + +@item @code{@var{music}} +@tab A music expression, optionally written in scheme, with any +LilyPond code enclosed in hashed braces +(@tie{}@w{@code{#@{@dots{}#@}}}@tie{}). Within LilyPond code +blocks, use @code{$} to reference function arguments (eg., +@samp{$arg1}) or to start an inline scheme expression containing +function arguments (eg., @w{@samp{$(cons arg1 arg2)}}). + +@end multitable + +@noindent +For a list of available type predicates, see +@ruser{Predefined type predicates}. User-defined type predicates +are also allowed. + + +@seealso + +Notation Reference: +@ruser{Predefined type predicates}. + +Installed Files: +@file{lily/music-scheme.cc}, +@file{scm/c++.scm}, +@file{scm/lily.scm}. + + +@node Simple substitution functions +@subsection Simple substitution functions + +Simple substitution functions are music functions whose output +music expression is written in LilyPond format and contains +function arguments in the output expression. They are described +in @ruser{Substitution function examples}. + + +@node Intermediate substitution functions +@subsection Intermediate substitution functions + +Intermediate substitution functions involve a mix of Scheme code +and LilyPond code in the music expression to be returned. + +Some @code{\override} commands require an argument consisting of +a pair of numbers (called a @emph{cons cell} in Scheme). + +The pair can be directly passed into the music function, +using a @code{pair?} variable: + +@example +manualBeam = +#(define-music-function + (parser location beg-end) + (pair?) + #@{ + \once \override Beam #'positions = $beg-end + #@}) + +\relative c' @{ + \manualBeam #'(3 . 6) c8 d e f +@} +@end example + +Alternatively, the numbers making up the pair can be +passed as separate arguments, and the Scheme code +used to create the pair can be included in the +music expression: + +@lilypond[quote,verbatim,ragged-right] +manualBeam = +#(define-music-function + (parser location beg end) + (number? number?) + #{ + \once \override Beam #'positions = $(cons beg end) + #}) + +\relative c' { + \manualBeam #3 #6 c8 d e f +} +@end lilypond + + +@node Mathematics in functions +@subsection Mathematics in functions + +Music functions can involve Scheme programming in +addition to simple substitution, + +@lilypond[quote,verbatim,ragged-right] +AltOn = +#(define-music-function + (parser location mag) + (number?) + #{ + \override Stem #'length = $(* 7.0 mag) + \override NoteHead #'font-size = + $(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) + #}) + +AltOff = { + \revert Stem #'length + \revert NoteHead #'font-size +} + +\relative c' { + c2 \AltOn #0.5 c4 c + \AltOn #1.5 c c \AltOff c2 +} +@end lilypond + +@noindent +This example may be rewritten to pass in music expressions, + +@lilypond[quote,verbatim,ragged-right] +withAlt = +#(define-music-function + (parser location mag music) + (number? ly:music?) + #{ + \override Stem #'length = $(* 7.0 mag) + \override NoteHead #'font-size = + $(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) + $music + \revert Stem #'length + \revert NoteHead #'font-size + #}) + +\relative c' { + c2 \withAlt #0.5 { c4 c } + \withAlt #1.5 { c c } c2 +} +@end lilypond + + +@node Functions without arguments +@subsection Functions without arguments + +In most cases a function without arguments should be written +with a variable, + +@example +dolce = \markup@{ \italic \bold dolce @} +@end example + +However, in rare cases it may be useful to create a music function +without arguments, + +@example +displayBarNum = +#(define-music-function + (parser location) + () + (if (eq? #t (ly:get-option 'display-bar-numbers)) + #@{ \once \override Score.BarNumber #'break-visibility = ##f #@} + #@{#@})) +@end example + +To actually display bar numbers where this function is called, +invoke @command{lilypond} with + +@example +lilypond -d display-bar-numbers FILENAME.ly +@end example + + +@node Void functions +@subsection Void functions + +A music function must return a music expression, but sometimes we +may want to have a function that does not involve music (such as +turning off Point and Click). To do this, we return a @code{void} +music expression. + +That is why the form that is returned is the +@w{@code{(make-music @dots{})}}. With the @code{'void} property +set to @code{#t}, the parser is told to actually disregard this +returned music expression. Thus the important part of the void +music function is the processing done by the function, not the +music expression that is returned. + +@example +noPointAndClick = +#(define-music-function + (parser location) + () + (ly:set-option 'point-and-click #f) + (make-music 'SequentialMusic 'void #t)) +... +\noPointAndClick % disable point and click +@end example + + +@node Markup functions +@section Markup functions + +Markups are implemented as special Scheme functions which produce a +@code{Stencil} object given a number of arguments. + +@menu +* Markup construction in Scheme:: +* How markups work internally:: +* New markup command definition:: +* New markup list command definition:: +@end menu + + +@node Markup construction in Scheme +@subsection Markup construction in Scheme + +@cindex defining markup commands + +The @code{markup} macro builds markup expressions in Scheme while +providing a LilyPond-like syntax. For example, +@example +(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world") + #:larger #:line ("foo" "bar" "baz"))) +@end example + +@noindent +is equivalent to: +@example +\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @} + \larger \line @{ foo bar baz @} @} +@end example + +@noindent +This example demonstrates the main translation rules between regular +LilyPond markup syntax and Scheme markup syntax. + +@quotation +@multitable @columnfractions .3 .3 +@item @b{LilyPond} @tab @b{Scheme} +@item @code{\markup markup1} @tab @code{(markup markup1)} +@item @code{\markup @{ markup1 markup2 ... @}} @tab + @code{(markup markup1 markup2 ... )} +@item @code{\markup-command} @tab @code{#:markup-command} +@item @code{\variable} @tab @code{variable} +@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )} +@item @code{string} @tab @code{"string"} +@item @code{#scheme-arg} @tab @code{scheme-arg} +@end multitable +@end quotation + +The whole Scheme language is accessible inside the +@code{markup} macro. For example, You may use function calls inside +@code{markup} in order to manipulate character strings. This is +useful when defining new markup commands (see +@ref{New markup command definition}). + + +@knownissues + +The markup-list argument of commands such as @code{#:line}, +@code{#:center}, and @code{#:column} cannot be a variable or +the result of a function call. + +@lisp +(markup #:line (function-that-returns-markups)) +@end lisp + +@noindent +is invalid. One should use the @code{make-line-markup}, +@code{make-center-markup}, or @code{make-column-markup} functions +instead, + +@lisp +(markup (make-line-markup (function-that-returns-markups))) +@end lisp + + +@node How markups work internally +@subsection How markups work internally + +In a markup like + +@example +\raise #0.5 "text example" +@end example + +@noindent +@code{\raise} is actually represented by the @code{raise-markup} +function. The markup expression is stored as + +@example +(list raise-markup 0.5 (list simple-markup "text example")) +@end example + +When the markup is converted to printable objects (Stencils), the +@code{raise-markup} function is called as + +@example +(apply raise-markup + @var{\layout object} + @var{list of property alists} + 0.5 + @var{the "text example" markup}) +@end example + +The @code{raise-markup} function first creates the stencil for the +@code{text example} string, and then it raises that Stencil by 0.5 +staff space. This is a rather simple example; more complex examples +are in the rest +of this section, and in @file{scm/define-markup-commands.scm}. + + +@node New markup command definition +@subsection New markup command definition + +This section discusses the definition of new markup commands. + +@menu +* Markup command definition syntax:: +* On properties:: +* A complete example:: +* Adapting builtin commands:: +@end menu + +@node Markup command definition syntax +@unnumberedsubsubsec Markup command definition syntax + +New markup commands can be defined using the +@code{define-markup-command} Scheme macro, at top-level. + +@lisp +(define-markup-command (@var{command-name} @var{layout} @var{props} @var{arg1} @var{arg2} ...) + (@var{arg1-type?} @var{arg2-type?} ...) + [ #:properties ((@var{property1} @var{default-value1}) + ...) ] + ..command body..) +@end lisp + +The arguments are + +@table @code +@item @var{command-name} +the markup command name +@item layout +the @q{layout} definition. +@item props +a list of associative lists, containing all active properties. +@item @var{argi} +@var{i}th command argument +@item @var{argi-type?} +a type predicate for the i@var{th} argument +@end table + +If the command uses properties from the @code{props} arguments, +the @code{#:properties} keyword can be used to specify which +properties are used along with their default values. + +Arguments are distinguished according to their type: +@itemize +@item a markup, corresponding to type predicate @code{markup?}; +@item a list of markups, corresponding to type predicate +@code{markup-list?}; +@item any other scheme object, corresponding to type predicates such as +@code{list?}, @code{number?}, @code{boolean?}, etc. +@end itemize + +There is no limitation on the order of arguments (after the +standard @code{layout} and @code{props} arguments). However, +markup functions taking a markup as their last argument are +somewhat special as you can apply them to a markup list, and the +result is a markup list where the markup function (with the +specified leading arguments) has been applied to every element of +the original markup list. + +Since replicating the leading arguments for applying a markup +function to a markup list is cheap mostly for Scheme arguments, +you avoid performance pitfalls by just using Scheme arguments for +the leading arguments of markup functions that take a markup as +their last argument. + +@node On properties +@unnumberedsubsubsec On properties + +The @code{layout} and @code{props} arguments of markup commands bring a +context for the markup interpretation: font size, line width, etc. + +The @code{layout} argument allows access to properties defined in +@code{paper} blocks, using the @code{ly:output-def-lookup} function. +For instance, the line width (the same as the one used in scores) is +read using: + +@example +(ly:output-def-lookup layout 'line-width) +@end example + +The @code{props} argument makes some properties accessible to markup +commands. For instance, when a book title markup is interpreted, all +the variables defined in the @code{\header} block are automatically +added to @code{props}, so that the book title markup can access the book +title, composer, etc. It is also a way to configure the behaviour of a +markup command: for example, when a command uses font size during +processing, the font size is read from @code{props} rather than having a +@code{font-size} argument. The caller of a markup command may change +the value of the font size property in order to change the behaviour. +Use the @code{#:properties} keyword of @code{define-markup-command} to +specify which properties shall be read from the @code{props} arguments. + +The example in next section illustrates how to access and override +properties in a markup command. + +@node A complete example +@unnumberedsubsubsec A complete example + +The following example defines a markup command to draw a double box +around a piece of text. + +Firstly, we need to build an approximative result using markups. +Consulting the @ruser{Text markup commands} shows us the @code{\box} +command is useful: + +@lilypond[quote,verbatim,ragged-right] +\markup \box \box HELLO +@end lilypond + +Now, we consider that more padding between the text and the boxes is +preferable. According to the @code{\box} documentation, this command +uses a @code{box-padding} property, which defaults to 0.2. The +documentation also mentions how to override it: + +@lilypond[quote,verbatim,ragged-right] +\markup \box \override #'(box-padding . 0.6) \box A +@end lilypond + +Then, the padding between the two boxes is considered too small, so we +override it too: + +@lilypond[quote,verbatim,ragged-right] +\markup \override #'(box-padding . 0.4) \box \override #'(box-padding . 0.6) \box A +@end lilypond + +Repeating this lengthy markup would be painful. This is where a markup +command is needed. Thus, we write a @code{double-box} markup command, +taking one argument (the text). This draws the two boxes, with some +padding. + +@lisp +#(define-markup-command (double-box layout props text) (markup?) + "Draw a double box around text." + (interpret-markup layout props + (markup #:override '(box-padding . 0.4) #:box + #:override '(box-padding . 0.6) #:box text))) +@end lisp + +@code{text} is the name of the command argument, and @code{markup?} its +type: it identifies it as a markup. The @code{interpret-markup} +function is used in most of markup commands: it builds a stencil, using +@code{layout}, @code{props}, and a markup. Here, this markup is built +using the @code{markup} scheme macro, see @ref{Markup construction in Scheme}. +The transformation from @code{\markup} expression to scheme +markup expression is straight-forward. + +The new command can be used as follow: + +@example +\markup \double-box A +@end example + +It would be nice to make the @code{double-box} command customizable: +here, the @code{box-padding} values are hard coded, and cannot be +changed by the user. Also, it would be better to distinguish the +padding between the two boxes, from the padding between the inner box +and the text. So we will introduce a new property, +@code{inter-box-padding}, for the padding between the two boxes. The +@code{box-padding} will be used for the inner padding. The new code is +now as follows: + +@lisp +#(define-markup-command (double-box layout props text) (markup?) + #:properties ((inter-box-padding 0.4) + (box-padding 0.6)) + "Draw a double box around text." + (interpret-markup layout props + (markup #:override `(box-padding . ,inter-box-padding) #:box + #:override `(box-padding . ,box-padding) #:box text))) +@end lisp + +Here, the @code{#:properties} keyword is used so that the +@code{inter-box-padding} and @code{box-padding} properties are read from +the @code{props} argument, and default values are given to them if the +properties are not defined. + +Then, these values are used to override the @code{box-padding} +properties used by the two @code{\box} commands. Note the backquote and +the comma in the @code{\override} argument: they allow you to introduce +a variable value into a literal expression. + +Now, the command can be used in a markup, and the boxes padding be +customized: + +@lilypond[quote,verbatim,ragged-right] +#(define-markup-command (double-box layout props text) (markup?) + #:properties ((inter-box-padding 0.4) + (box-padding 0.6)) + "Draw a double box around text." + (interpret-markup layout props + (markup #:override `(box-padding . ,inter-box-padding) #:box + #:override `(box-padding . ,box-padding) #:box text))) + +\markup \double-box A +\markup \override #'(inter-box-padding . 0.8) \double-box A +\markup \override #'(box-padding . 1.0) \double-box A +@end lilypond + +@node Adapting builtin commands +@unnumberedsubsubsec Adapting builtin commands + +A good way to start writing a new markup command, is to take example on +a builtin one. Most of the markup commands provided with LilyPond can be +found in file @file{scm/define-markup-commands.scm}. + +For instance, we would like to adapt the @code{\draw-line} command, to +draw a double line instead. The @code{\draw-line} command is defined as +follow (documentation stripped): + +@lisp +(define-markup-command (draw-line layout props dest) + (number-pair?) + #:category graphic + #:properties ((thickness 1)) + "..documentation.." + (let ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (x (car dest)) + (y (cdr dest))) + (make-line-stencil th 0 0 x y))) +@end lisp + +To define a new command based on an existing one, copy the definition, +and change the command name. The @code{#:category} keyword can be +safely removed, as it is only used for generating LilyPond +documentation, and is of no use for user-defined markup commands. + +@lisp +(define-markup-command (draw-double-line layout props dest) + (number-pair?) + #:properties ((thickness 1)) + "..documentation.." + (let ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (x (car dest)) + (y (cdr dest))) + (make-line-stencil th 0 0 x y))) +@end lisp + +Then, a property for setting the gap between two lines is added, called +@code{line-gap}, defaulting e.g. to 0.6: + +@lisp +(define-markup-command (draw-double-line layout props dest) + (number-pair?) + #:properties ((thickness 1) + (line-gap 0.6)) + "..documentation.." + ... +@end lisp + +Finally, the code for drawing two lines is added. Two calls to +@code{make-line-stencil} are used to draw the lines, and the resulting +stencils are combined using @code{ly:stencil-add}: + +@lilypond[quote,verbatim,ragged-right] +#(define-markup-command (my-draw-line layout props dest) + (number-pair?) + #:properties ((thickness 1) + (line-gap 0.6)) + "..documentation.." + (let* ((th (* (ly:output-def-lookup layout 'line-thickness) + thickness)) + (dx (car dest)) + (dy (cdr dest)) + (w (/ line-gap 2.0)) + (x (cond ((= dx 0) w) + ((= dy 0) 0) + (else (/ w (sqrt (+ 1 (* (/ dx dy) (/ dx dy)))))))) + (y (* (if (< (* dx dy) 0) 1 -1) + (cond ((= dy 0) w) + ((= dx 0) 0) + (else (/ w (sqrt (+ 1 (* (/ dy dx) (/ dy dx)))))))))) + (ly:stencil-add (make-line-stencil th x y (+ dx x) (+ dy y)) + (make-line-stencil th (- x) (- y) (- dx x) (- dy y))))) + +\markup \my-draw-line #'(4 . 3) +\markup \override #'(line-gap . 1.2) \my-draw-line #'(4 . 3) +@end lilypond + + +@node New markup list command definition +@subsection New markup list command definition +Markup list commands are defined with the +@code{define-markup-list-command} Scheme macro, which is similar to the +@code{define-markup-command} macro described in +@ref{New markup command definition}, except that where the latter returns +a single stencil, the former returns a list of stencils. + +In the following example, a @code{\paragraph} markup list command is +defined, which returns a list of justified lines, the first one being +indented. The indent width is taken from the @code{props} argument. +@example +#(define-markup-list-command (paragraph layout props args) (markup-list?) + #:properties ((par-indent 2)) + (interpret-markup-list layout props + (make-justified-lines-markup-list (cons (make-hspace-markup par-indent) + args)))) +@end example + +Besides the usual @code{layout} and @code{props} arguments, the +@code{paragraph} markup list command takes a markup list argument, named +@code{args}. The predicate for markup lists is @code{markup-list?}. + +First, the function gets the indent width, a property here named +@code{par-indent}, from the property list @code{props}. If the +property is not found, the default value is @code{2}. Then, a +list of justified lines is made using the +@code{make-justified-lines-markup-list} function, which is related +to the @code{\justified-lines} built-in markup list command. A +horizontal space is added at the beginning using the +@code{make-hspace-markup} function. Finally, the markup list is +interpreted using the @code{interpret-markup-list} function. + +This new markup list command can be used as follows: +@example +\markuplines @{ + \paragraph @{ + The art of music typography is called \italic @{(plate) engraving.@} + The term derives from the traditional process of music printing. + Just a few decades ago, sheet music was made by cutting and stamping + the music into a zinc or pewter plate in mirror image. + @} + \override-lines #'(par-indent . 4) \paragraph @{ + The plate would be inked, the depressions caused by the cutting + and stamping would hold ink. An image was formed by pressing paper + to the plate. The stamping and cutting was completely done by + hand. + @} +@} +@end example + +@node Contexts for programmers +@section Contexts for programmers + +@menu +* Context evaluation:: +* Running a function on all layout objects:: +@end menu + +@node Context evaluation +@subsection Context evaluation + +@cindex calling code during interpreting +@funindex \applyContext + +Contexts can be modified during interpretation with Scheme code. The +syntax for this is +@example +\applyContext @var{function} +@end example + +@code{@var{function}} should be a Scheme function that takes a +single argument: the context in which the @code{\applyContext} +command is being called. The following code will print the +current bar number on the standard output during the compile: + +@example +\applyContext + #(lambda (x) + (format #t "\nWe were called in barnumber ~a.\n" + (ly:context-property x 'currentBarNumber))) +@end example + + + +@node Running a function on all layout objects +@subsection Running a function on all layout objects + + +@cindex calling code on layout objects +@funindex \applyOutput + + +The most versatile way of tuning an object is @code{\applyOutput} which +works by inserting an event into the specified context +(@rinternals{ApplyOutputEvent}). Its syntax is +@example +\applyOutput @var{context} @var{proc} +@end example + +@noindent +where @code{@var{proc}} is a Scheme function, taking three arguments. + +When interpreted, the function @code{@var{proc}} is called for +every layout object found in the context @code{@var{context}} at +the current time step, with the following arguments: +@itemize +@item the layout object itself, +@item the context where the layout object was created, and +@item the context where @code{\applyOutput} is processed. +@end itemize + + +In addition, the cause of the layout object, i.e., the music +expression or object that was responsible for creating it, is in the +object property @code{cause}. For example, for a note head, this is a +@rinternals{NoteHead} event, and for a stem object, +this is a @rinternals{Stem} object. + +Here is a function to use for @code{\applyOutput}; it blanks +note-heads on the center-line and next to it: + +@lilypond[quote,verbatim,ragged-right] +#(define (blanker grob grob-origin context) + (if (and (memq 'note-head-interface (ly:grob-interfaces grob)) + (< (abs (ly:grob-property grob 'staff-position)) 2)) + (set! (ly:grob-property grob 'transparent) #t))) + +\relative c' { + a'4 e8 <<\applyOutput #'Voice #blanker a c d>> b2 +} +@end lilypond + + +@node Callback functions +@section Callback functions + +Properties (like @code{thickness}, @code{direction}, etc.) can be +set at fixed values with @code{\override}, e.g. + +@example +\override Stem #'thickness = #2.0 +@end example + +Properties can also be set to a Scheme procedure, + +@lilypond[fragment,verbatim,quote,relative=2] +\override Stem #'thickness = #(lambda (grob) + (if (= UP (ly:grob-property grob 'direction)) + 2.0 + 7.0)) +c b a g b a g b +@end lilypond + +@noindent +In this case, the procedure is executed as soon as the value of the +property is requested during the formatting process. + +Most of the typesetting engine is driven by such callbacks. +Properties that typically use callbacks include + +@table @code +@item stencil + The printing routine, that constructs a drawing for the symbol +@item X-offset + The routine that sets the horizontal position +@item X-extent + The routine that computes the width of an object +@end table + +The procedure always takes a single argument, being the grob. + +If routines with multiple arguments must be called, the current grob +can be inserted with a grob closure. Here is a setting from +@code{AccidentalSuggestion}, + +@example +`(X-offset . + ,(ly:make-simple-closure + `(,+ + ,(ly:make-simple-closure + (list ly:self-alignment-interface::centered-on-x-parent)) + ,(ly:make-simple-closure + (list ly:self-alignment-interface::x-aligned-on-self))))) +@end example + +@noindent +In this example, both @code{ly:self-alignment-interface::x-aligned-on-self} and +@code{ly:self-alignment-interface::centered-on-x-parent} are called +with the grob as argument. The results are added with the @code{+} +function. To ensure that this addition is properly executed, the whole +thing is enclosed in @code{ly:make-simple-closure}. + +In fact, using a single procedure as property value is equivalent to + +@example +(ly:make-simple-closure (ly:make-simple-closure (list @var{proc}))) +@end example + +@noindent +The inner @code{ly:make-simple-closure} supplies the grob as argument +to @var{proc}, the outer ensures that result of the function is +returned, rather than the @code{simple-closure} object. + +From within a callback, the easiest method for evaluating a markup is +to use grob-interpret-markup. For example: + +@example +my-callback = #(lambda (grob) + (grob-interpret-markup grob (markup "foo"))) +@end example + +@node Inline Scheme code +@section Inline Scheme code + +The main disadvantage of @code{\tweak} is its syntactical +inflexibility. For example, the following produces a syntax error. + +@example +F = \tweak #'font-size #-3 -\flageolet + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +In other words, @code{\tweak} doesn't behave like an articulation +regarding the syntax; in particular, it can't be attached with +@code{^} and @code{_}. + +Using Scheme, this problem can be avoided. The route to the +result is given in @ref{Adding articulation to notes (example)}, +especially how to use @code{\displayMusic} as a helping guide. + +@example +F = #(let ((m (make-music 'ArticulationEvent + 'articulation-type "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -3 + (ly:music-property m 'tweaks))) + m) + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +Here, the @code{tweaks} properties of the flageolet object +@code{m} (created with @code{make-music}) are extracted with +@code{ly:music-property}, a new key-value pair to change the +font size is prepended to the property list with the +@code{acons} Scheme function, and the result is finally +written back with @code{set!}. The last element of the +@code{let} block is the return value, @code{m} itself. + + + +@node Difficult tweaks +@section Difficult tweaks + +There are a few classes of difficult adjustments. + +@itemize + + +@item +One type of difficult adjustment involves the appearance of +spanner objects, such as slurs and ties. Usually, only one +spanner object is created at a time, and it can be adjusted with +the normal mechanism. However, occasionally a spanner crosses a +line break. When this happens, the object is cloned. A separate +object is created for every system in which the spanner appears. +The new objects are clones of the original object and inherit all +properties, including @code{\override}s. + + +In other words, an @code{\override} always affects all pieces of a +broken spanner. To change only one part of a spanner at a line break, +it is necessary to hook into the formatting process. The +@code{after-line-breaking} callback contains the Scheme procedure that +is called after the line breaks have been determined and layout +objects have been split over different systems. + +In the following example, we define a procedure +@code{my-callback}. This procedure + +@itemize +@item +determines if the spanner has been split across line breaks +@item +if yes, retrieves all the split objects +@item +checks if this grob is the last of the split objects +@item +if yes, it sets @code{extra-offset}. +@end itemize + +This procedure is installed into @rinternals{Tie}, so the last part +of the broken tie is repositioned. + +@lilypond[quote,verbatim,ragged-right] +#(define (my-callback grob) + (let* ( + ;; have we been split? + (orig (ly:grob-original grob)) + + ;; if yes, get the split pieces (our siblings) + (siblings (if (ly:grob? orig) + (ly:spanner-broken-into orig) + '()))) + + (if (and (>= (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) + +\relative c'' { + \override Tie #'after-line-breaking = + #my-callback + c1 ~ \break + c2 ~ c +} +@end lilypond + +@noindent +When applying this trick, the new @code{after-line-breaking} callback +should also call the old one, if such a default exists. For example, +if using this with @code{Hairpin}, @code{ly:spanner::kill-zero-spanned-time} +should also be called. + + +@item +Some objects cannot be changed with @code{\override} for +technical reasons. Examples of those are @code{NonMusicalPaperColumn} +and @code{PaperColumn}. They can be changed with the +@code{\overrideProperty} function, which works similar to @code{\once +\override}, but uses a different syntax. + +@example +\overrideProperty +#"Score.NonMusicalPaperColumn" % Grob name +#'line-break-system-details % Property name +#'((next-padding . 20)) % Value +@end example + +Note, however, that @code{\override}, applied to +@code{NonMusicalPaperColumn} and @code{PaperColumn}, still works as +expected within @code{\context} blocks. + +@end itemize + +@node LilyPond Scheme interfaces +@chapter LilyPond Scheme interfaces + +This chapter covers the various tools provided by LilyPond to help +Scheme programmers get information into and out of the music streams. + +TODO -- figure out what goes in here and how to organize it + diff --git a/Documentation/extending/scheme-tutorial.itely b/Documentation/extending/scheme-tutorial.itely new file mode 100644 index 0000000000..7b38a76ef9 --- /dev/null +++ b/Documentation/extending/scheme-tutorial.itely @@ -0,0 +1,1406 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Scheme tutorial +@chapter Scheme tutorial + +@funindex # +@cindex Scheme +@cindex GUILE +@cindex Scheme, in-line code +@cindex accessing Scheme +@cindex evaluating Scheme +@cindex LISP + +LilyPond uses the Scheme programming language, both as part of the +input syntax, and as internal mechanism to glue modules of the program +together. This section is a very brief overview of entering data in +Scheme. If you want to know more about Scheme, see +@uref{http://@/www@/.schemers@/.org}. + +LilyPond uses the GNU Guile implementation of Scheme, which is +based on the Scheme @qq{R5RS} standard. If you are learning Scheme +to use with LilyPond, working with a different implementation (or +referring to a different standard) is not recommended. Information +on guile can be found at @uref{http://www.gnu.org/software/guile/}. +The @qq{R5RS} Scheme standard is located at +@uref{http://www.schemers.org/Documents/Standards/R5RS/}. + +@menu +* Introduction to Scheme:: +* Scheme in LilyPond:: +* Building complicated functions:: +@end menu + +@node Introduction to Scheme +@section Introduction to Scheme + +We begin with an introduction to Scheme. For this brief introduction, +we will use the GUILE interpreter to explore how the language works. +Once we are familiar with Scheme, we will show how the language can +be integrated in LilyPond files. + + +@menu +* Scheme sandbox:: +* Scheme variables:: +* Scheme simple data types:: +* Scheme compound data types:: +* Calculations in Scheme:: +* Scheme procedures:: +* Scheme conditionals:: +@end menu + +@node Scheme sandbox +@subsection Scheme sandbox + +The LilyPond installation includes the Guile implementation of +Scheme. On most systems you can experiment in a Scheme sandbox by +opening a terminal window and typing @q{guile}. On some systems, +notably Windows, you may need to set the environment variable +@code{GUILE_LOAD_PATH} to the directory @code{../usr/shr/guile/1.8} +in the LilyPond installation. For the full path to this directory +see @rlearning{Other sources of information}. Alternatively, Windows +users may simply choose @q{Run} from the Start menu and enter +@q{guile}. + +Once the guile sandbox is running, you will receive a guile prompt: + +@lisp +guile> +@end lisp + +You can enter Scheme expressions at this prompt to experiment with Scheme. + +@node Scheme variables +@subsection Scheme variables + +Scheme variables can have any valid scheme value, including a Scheme +procedure. + +Scheme variables are created with @code{define}: + +@lisp +guile> (define a 2) +guile> +@end lisp + +Scheme variables can be evaluated at the guile prompt simply by +typing the variable name: + +@lisp +guile> a +2 +guile> +@end lisp + +Scheme variables can be printed on the display by using the display function: + +@lisp +guile> (display a) +2guile> +@end lisp + +@noindent +Note that both the value @code{2} and the guile prompt @code{guile} +showed up on the same line. This can be avoided by calling the +newline procedure or displaying a newline character. + +@lisp +guile> (display a)(newline) +2 +guile> (display a)(display "\n") +2 +guile> +@end lisp + +Once a variable has been created, its value can be changed with @code{set!}: + +@lisp +guile> (set! a 12345) +guile> a +12345 +guile> +@end lisp + +@node Scheme simple data types +@subsection Scheme simple data types + +The most basic concept in a language is data typing: numbers, character +strings, lists, etc. Here is a list of simple Scheme data types that are +often used with LilyPond. + +@table @asis +@item Booleans +Boolean values are True or False. The Scheme for True is @code{#t} +and False is @code{#f}. +@funindex ##t +@funindex ##f + +@item Numbers +Numbers are entered in the standard fashion, +@code{1} is the (integer) number one, while @code{-1.5} is a +floating point number (a non-integer number). + +@item Strings +Strings are enclosed in double quotes: + +@example +"this is a string" +@end example + +Strings may span several lines: + +@example +"this +is +a string" +@end example + +@noindent +and the newline characters at the end of each line will be included +in the string. + +Newline characters can also be added by including @code{\n} in the +string. + +@example +"this\nis a\nmultiline string" +@end example + + +Quotation marks and backslashes are added to strings +by preceding them with a backslash. +The string @code{\a said "b"} is entered as + +@example +"\\a said \"b\"" +@end example + +@end table + +There are additional Scheme data types that are not discussed here. +For a complete listing see the Guile reference guide, +@uref{http://www.gnu.org/software/guile/manual/html_node/Simple-Data-Types.html}. + +@node Scheme compound data types +@subsection Scheme compound data types + +There are also compound data types in Scheme. The types commonly used in +LilyPond programming include pairs, lists, alists, and hash tables. + +@subheading Pairs + +The foundational compound data type of Scheme is the @code{pair}. As +might be expected from its name, a pair is two values glued together. +The operator used to form a pair is called @code{cons}. + +@lisp +guile> (cons 4 5) +(4 . 5) +guile> +@end lisp + +Note that the pair is displayed as two items surrounded by +parentheses and separated by whitespace, a period (@code{.}), and +more whitespace. The period is @emph{not} a decimal point, but +rather an indicator of the pair. + +Pairs can also be entered as literal values by preceding them with +a single quote character. + +@lisp +guile> '(4 . 5) +(4 . 5) +guile> +@end lisp + +The two elements of a pair may be any valid Scheme value: + +@lisp +guile> (cons #t #f) +(#t . #f) +guile> '("blah-blah" . 3.1415926535) +("blah-blah" . 3.1415926535) +guile> +@end lisp + +The first and second elements of the pair can be accessed by the +Scheme procedures @code{car} and @code{cdr}, respectively. + +@lisp +guile> (define mypair (cons 123 "hello there") +... ) +guile> (car mypair) +123 +guile> (cdr mypair) +"hello there" +guile> +@end lisp + +@noindent + +Note: @code{cdr} is pronounced "could-er", according Sussman and +Abelson, see +@uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133} + +@subheading Lists + +A very common Scheme data structure is the @emph{list}. Formally, a +list is defined as either the empty list (represented as @code{'()}, +or a pair whose @code{cdr} is a list. + +There are many ways of creating lists. Perhaps the most common is +with the @code{list} procedure: + +@lisp +guile> (list 1 2 3 "abc" 17.5) +(1 2 3 "abc" 17.5) +@end lisp + +As can be seen, a list is displayed in the form of individual elements +separated by whitespace and enclosed in parentheses. Unlike a pair, +there is no period between the elements. + +A list can also be entered as a literal list by enclosing its +elements in parentheses, and adding a quote: + +@lisp +guile> '(17 23 "foo" "bar" "bazzle") +(17 23 "foo" "bar" "bazzle") +@end lisp + +Lists are a central part of Scheme. In, fact, Scheme is considered +a dialect of lisp, where @q{lisp} is an abbreviation for +@q{List Processing}. Scheme expressions are all lists. + +@subheading Association lists (alists) + +A special type of list is an @emph{association list} or @emph{alist}. +An alist is used to store data for easy retrieval. + +Alists are lists whose elements are pairs. The @code{car} of each +element is called the @emph{key}, and the @code{cdr} of each element +is called the @emph{value}. The Scheme procedure @code{assoc} is +used to retrieve an entry from the alist, and @code{cdr} is used to +retrieve the value: + +@lisp +guile> (define my-alist '((1 . "A") (2 . "B") (3 . "C"))) +guile> my-alist +((1 . "A") (2 . "B") (3 . "C")) +guile> (assoc 2 my-alist) +(2 . "B") +guile> (cdr (assoc 2 my-alist)) +"B" +guile> +@end lisp + +Alists are widely used in LilyPond to store properties and other data. + +@subheading Hash tables + +A data structure that is used occasionally in LilyPond. A hash table +is similar to an array, but the indexes to the array can be any type +of Scheme value, not just integers. + +Hash tables are more efficient than alists if there is a lot of data +to store and the data changes very infrequently. + +The syntax to create hash tables is a bit complex, but you +can see examples of it in the LilyPond source. + +@lisp +guile> (define h (make-hash-table 10)) +guile> h +# +guile> (hashq-set! h 'key1 "val1") +"val1" +guile> (hashq-set! h 'key2 "val2") +"val2" +guile> (hashq-set! h 3 "val3") +"val3" +@end lisp + +Values are retrieved from hash tables with @code{hashq-ref}. + +@lisp +guile> (hashq-ref h 3) +"val3" +guile> (hashq-ref h 'key2) +"val2" +guile> +@end lisp + +Keys and values are retrieved as a pair with @code{hashq-get-handle}. +This is a preferred way, because it will return @code{#f} if a key is +not found. + +@lisp +guile> (hashq-get-handle h 'key1) +(key1 . "val1") +guile> (hashq-get-handle h 'frob) +#f +guile> +@end lisp + +@node Calculations in Scheme +@subsection Calculations in Scheme + +@ignore +We have been using lists all along. A calculation, like @code{(+ 1 2)} +is also a list (containing the symbol @code{+} and the numbers 1 +and@tie{}2). Normally lists are interpreted as calculations, and the +Scheme interpreter substitutes the outcome of the calculation. To enter a +list, we stop the evaluation. This is done by quoting the list with a +quote @code{'} symbol. So, for calculations do not use a quote. + +Inside a quoted list or pair, there is no need to quote anymore. The +following is a pair of symbols, a list of symbols and a list of lists +respectively, + +@example +#'(stem . head) +#'(staff clef key-signature) +#'((1) (2)) +@end example +@end ignore + +Scheme can be used to do calculations. It uses @emph{prefix} +syntax. Adding 1 and@tie{}2 is written as @code{(+ 1 2)} rather than the +traditional @math{1+2}. + +@lisp +guile> (+ 1 2) +3 +@end lisp + +Calculations may be nested; the result of a function may +be used for another calculation. + +@lisp +guile> (+ 1 (* 3 4)) +13 +@end lisp + +These calculations are examples of evaluations; an expression like +@code{(* 3 4)} is replaced by its value @code{12}. + +Scheme calculations are sensitive to the differences between integers +and non-integers. Integer calculations are exact, while non-integers +are calculated to the appropriate limits of precision: + +@lisp +guile> (/ 7 3) +7/3 +guile> (/ 7.0 3.0) +2.33333333333333 +@end lisp + +When the scheme interpreter encounters an expression that is a list, +the first element of the list is treated as a procedure to be +evaluated with the arguments of the remainder of the list. Therefore, +all operators in Scheme are prefix operators. + +If the first element of a Scheme expression that is a list passed to +the interpreter is @emph{not} an operator or procedure, an error will +occur: + +@lisp +guile> (1 2 3) + +Backtrace: +In current input: + 52: 0* [1 2 3] + +:52:1: In expression (1 2 3): +:52:1: Wrong type to apply: 1 +ABORT: (misc-error) +guile> +@end lisp + +Here you can see that the interpreter was trying to treat 1 as an +operator or procedure, and it couldn't. Hence the error is "Wrong +type to apply: 1". + +Therefore, to create a list we need to use the list operator, or to +quote the list so that the interpreter will not try to evaluate it. + +@lisp +guile> (list 1 2 3) +(1 2 3) +guile> '(1 2 3) +(1 2 3) +guile> +@end lisp + +This is an error that can appear as you are working with Scheme in LilyPond. + +@ignore +The same assignment can be done in completely in Scheme as well, + +@example +#(define twentyFour (* 2 twelve)) +@end example + +@c this next section is confusing -- need to rewrite + +The @emph{name} of a variable is also an expression, similar to a +number or a string. It is entered as + +@example +#'twentyFour +@end example + +@funindex #'symbol +@cindex quoting in Scheme + +The quote mark @code{'} prevents the Scheme interpreter from substituting +@code{24} for the @code{twentyFour}. Instead, we get the name +@code{twentyFour}. +@end ignore + + +@node Scheme procedures +@subsection Scheme procedures + +Scheme procedures are executable scheme expressions that return a +value resulting from their execution. They can also manipulate +variables defined outside of the procedure. + +@subheading Defining procedures + +Procedures are defined in Scheme with define + +@example +(define (function-name arg1 arg2 ... argn) + scheme-expression-that-gives-a-return-value) +@end example + +For example, we could define a procedure to calculate the average: + +@lisp +guile> (define (average x y) (/ (+ x y) 2)) +guile> average +# +@end lisp + +Once a procedure is defined, it is called by putting the procedure +name and the arguments in a list. For example, we can calculate +the average of 3 and 12: + +@lisp +guile> (average 3 12) +15/2 +@end lisp + +@subheading Predicates + +Scheme procedures that return boolean values are often called +@emph{predicates}. By convention (but not necessity), predicate names +typically end in a question mark: + +@lisp +guile> (define (less-than-ten? x) (< x 10)) +guile> (less-than-ten? 9) +#t +guile> (less-than-ten? 15) +#f +@end lisp + +@subheading Return values + +Scheme procedures always return a return value, which is the value +of the last expression executed in the procedure. The return +value can be any valid Scheme value, including a complex data +structure or a procedure. + +Sometimes the user would like to have multiple Scheme expressions in +a procedure. There are two ways that multiple expressions can be +combined. The first is the @code{begin} procedure, which allows +multiple expressions to be evaluated, and returns the value of +the last expression. + +@lisp +guile> (begin (+ 1 2) (- 5 8) (* 2 2)) +4 +@end lisp + +The second way to combine multiple expressions is in a @code{let} block. +In a let block, a series of bindings are created, and then a sequence +of expressions that can include those bindings is evaluated. The +return value of the let block is the return value of the last +statement in the let block: + +@lisp +guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4)) +... (+ (* x y) (/ z x))) +508 +@end lisp + +@node Scheme conditionals +@subsection Scheme conditionals + +@subheading if + +Scheme has an @code{if} procedure: + +@example +(if test-expression true-expression false-expression) +@end example + +@var{test-expression} is an expression that returns a boolean +value. If @var{test-expression} returns @code{#t}, the if +procedure returns the value of @var{true-expression}, otherwise +it returns the value of @var{false-expression}. + +@lisp +guile> (define a 3) +guile> (define b 5) +guile> (if (> a b) "a is greater than b" "a is not greater than b") +"a is not greater than b" +@end lisp + +@subheading cond + +Another conditional procedure in scheme is @code{cond}: + +@example +(cond (test-expression-1 result-expression-sequence-1) + (test-expression-2 result-expression-sequence-2) + ... + (test-expression-n result-expression-sequence-n)) +@end example + +For example: + +@lisp +guile> (define a 6) +guile> (define b 8) +guile> (cond ((< a b) "a is less than b") +... ((= a b) "a equals b") +... ((> a b) "a is greater than b")) +"a is less than b" +@end lisp + +@node Scheme in LilyPond +@section Scheme in LilyPond + + +@menu +* LilyPond Scheme syntax:: +* LilyPond variables:: +* Input variables and Scheme:: +* Object properties:: +* LilyPond compound variables:: +* Internal music representation:: +@end menu + +@node LilyPond Scheme syntax +@subsection LilyPond Scheme syntax + +The Guile interpreter is part of LilyPond, which means that +Scheme can be included in LilyPond input files. The hash mark @code{#} +is used to tell the LilyPond parser that the next value is a Scheme +value. + +Once the parser sees a hash mark, input is passed to the Guile +interpreter to evaluate the Scheme expression. The interpreter continues +to process input until the end of a Scheme expression is seen. + +Scheme procedures can be defined in LilyPond input files: + +@example +#(define (average a b c) (/ (+ a b c) 3)) +@end example + +Note that LilyPond comments (@code{%} and @code{%@{ %@}}) cannot +be used within Scheme code, even in a LilyPond input file, because +the Guile interpreter, not the LilyPond parser, is interpreting +the Scheme expression. Comments in Guile Scheme are entered +as follows: + +@example +; this is a single-line comment + +#! + This a (non-nestable) Guile-style block comment + But these are rarely used by Schemers and never in + LilyPond source code +!# +@end example + +For the rest of this section, we will assume that the data is entered +in a music file, so we add @code{#}s at the beginning of each Scheme +expression. + +All of the top-level Scheme expressions in a LilyPond input file can +be combined into a single Scheme expression by the use of the +@code{begin} statement: + +@example +#(begin + (define foo 0) + (define bar 1)) +@end example + + +@node LilyPond variables +@subsection LilyPond variables + +LilyPond variables are stored internally in the form of Scheme +variables. Thus, + +@example +twelve = 12 +@end example + +@noindent +is equivalent to + +@example +#(define twelve 12) +@end example + +This means that LilyPond variables are available +for use in Scheme expressions. For example, we could use + +@example +twentyFour = #(* 2 twelve) +@end example + +@noindent +which would result in the number 24 being stored in the +LilyPond (and Scheme) variable @code{twentyFour}. + +@node Input variables and Scheme +@subsection Input variables and Scheme + +The input format supports the notion of variables: in the following +example, a music expression is assigned to a variable with the name +@code{traLaLa}. + +@example +traLaLa = @{ c'4 d'4 @} +@end example + +@noindent + +There is also a form of scoping: in the following example, the +@code{\layout} block also contains a @code{traLaLa} variable, which is +independent of the outer @code{\traLaLa}. + +@example +traLaLa = @{ c'4 d'4 @} +\layout @{ traLaLa = 1.0 @} +@end example + +@c +In effect, each input file is a scope, and all @code{\header}, +@code{\midi}, and @code{\layout} blocks are scopes nested inside that +toplevel scope. + +Both variables and scoping are implemented in the GUILE module system. +An anonymous Scheme module is attached to each scope. An assignment of +the form: + +@example +traLaLa = @{ c'4 d'4 @} +@end example + +@noindent +is internally converted to a Scheme definition: + +@example +(define traLaLa @var{Scheme value of `@code{... }'}) +@end example + +This means that LilyPond variables and Scheme variables may be freely +mixed. In the following example, a music fragment is stored in the +variable @code{traLaLa}, and duplicated using Scheme. The result is +imported in a @code{\score} block by means of a second variable +@code{twice}: + +@lilypond[verbatim] +traLaLa = { c'4 d'4 } + +%% dummy action to deal with parser lookahead +#(display "this needs to be here, sorry!") + +#(define newLa (map ly:music-deep-copy + (list traLaLa traLaLa))) +#(define twice + (make-sequential-music newLa)) + +{ \twice } +@end lilypond + +@c Due to parser lookahead + +In this example, the assignment happens after the parser has +verified that nothing interesting happens after +@code{traLaLa = @{ ... @}}. Without the dummy statement in the +above example, the @code{newLa} definition is executed before +@code{traLaLa} is defined, leading to a syntax error. + +The above example shows how to @q{export} music expressions from the +input to the Scheme interpreter. The opposite is also possible. By +wrapping a Scheme value in the function @code{ly:export}, a Scheme +value is interpreted as if it were entered in LilyPond syntax. +Instead of defining @code{\twice}, the example above could also have +been written as + +@example +... +@{ #(ly:export (make-sequential-music (list newLa))) @} +@end example + +Scheme code is evaluated as soon as the parser encounters it. To +define some Scheme code in a macro (to be called later), use +@ref{Void functions}, or + +@example +#(define (nopc) + (ly:set-option 'point-and-click #f)) + +... +#(nopc) +@{ c'4 @} +@end example + +@knownissues + +Mixing Scheme and LilyPond variables is not possible with the +@code{--safe} option. + + +@node Object properties +@subsection Object properties + +Object properties are stored in LilyPond in the form of alist-chains, +which are lists of alists. Properties are set by adding values at +the beginning of the property list. Properties are read by retrieving +values from the alists. + +Setting a new value for a property requires assigning a value to +the alist with both a key and a value. The LilyPond syntax for doing +this is: + +@example +\override Stem #'thickness = #2.6 +@end example + +This instruction adjusts the appearance of stems. An alist entry +@code{'(thickness . 2.6)} is added to the property list of the +@code{Stem} +object. @code{thickness} is measured relative to the thickness of +staff lines, so these stem lines will be @code{2.6} times the +width of staff lines. This makes stems almost twice as thick as their +normal size. To distinguish between variables defined in input files (like +@code{twentyFour} in the example above) and variables of internal +objects, we will call the latter @q{properties} and the former +@q{variables.} So, the stem object has a @code{thickness} property, +while @code{twentyFour} is a variable. + +@cindex properties vs. variables +@cindex variables vs. properties + +@c todo -- here we're getting interesting. We're now introducing +@c LilyPond variable types. I think this deserves a section all +@c its own + +@node LilyPond compound variables +@subsection LilyPond compound variables + +@subheading Offsets + +Two-dimensional offsets (X and Y coordinates) are stored as @code{pairs}. +The @code{car} of the offset is the X coordinate, and the @code{cdr} is +the Y coordinate. + +@example +\override TextScript #'extra-offset = #'(1 . 2) +@end example + +This assigns the pair @code{(1 . 2)} to the @code{extra-offset} +property of the +TextScript object. These numbers are measured in staff-spaces, so +this command moves the object 1 staff space to the right, and 2 spaces up. + +Procedures for working with offsets are found in @file{scm/lily-library.scm}. + +@subheading Extents + +Pairs are also used to store intervals, which represent a range of numbers +from the minimum (the @code{car}) to the maximum (the @code{cdr}). +Intervals are used to store the X- and Y- extents of printable objects. +For X extents, the @code{car} is the left hand X coordinate, and the +@code{cdr} is the right hand X coordinate. For Y extents, the @code{car} +is the bottom coordinate, and the @code{cdr} is the top coordinate. + +Procedures for working with intervals are found in +@file{scm/lily-library.scm}. These procedures should be used when possible +to ensure consistency of code. + +@subheading Property alists + +A property alist is a LilyPond data structure that is an alist whose +keys are properties and whose values are Scheme expressions that give +the desired value for the property. + +LilyPond properties are Scheme symbols, such as @code{'thickness}. + +@subheading Alist chains + +An alist chain is a list containing property alists. + +The set of all properties that will apply to a grob is typically +stored as an alist chain. In order to find the value for a particular +property that a grob should have, each alist in the chain is searched in +order, looking for an entry containing the property key. The first alist +entry found is returned, and the value is the property value. + +The Scheme procedure @code{chain-assoc-get} is normally used to get +grob property values. + +@node Internal music representation +@subsection Internal music representation + +Internally, music is represented as a Scheme list. The list contains +various elements that affect the printed output. Parsing is the process +of converting music from the LilyPond input representation to the +internal Scheme representation. + +When a music expression is parsed, it is converted into a set of +Scheme music objects. The defining property of a music object is that +it takes up time. The time it takes up is called its @emph{duration}. +Durations are expressed as a rational number that measures the length +of the music object in whole notes. + +A music object has three kinds of types: +@itemize +@item +music name: Each music expression has a name. For example, a note +leads to a @rinternals{NoteEvent}, and @code{\simultaneous} leads to +a @rinternals{SimultaneousMusic}. A list of all expressions +available is in the Internals Reference manual, under +@rinternals{Music expressions}. + +@item +@q{type} or interface: Each music name has several @q{types} or +interfaces, for example, a note is an @code{event}, but it is also a +@code{note-event}, a @code{rhythmic-event}, and a +@code{melodic-event}. All classes of music are listed in the +Internals Reference, under +@rinternals{Music classes}. + +@item +C++ object: Each music object is represented by an object of the C++ +class @code{Music}. +@end itemize + +The actual information of a music expression is stored in properties. +For example, a @rinternals{NoteEvent} has @code{pitch} and +@code{duration} properties that store the pitch and duration of that +note. A list of all properties available can be found in the +Internals Reference, under @rinternals{Music properties}. + +A compound music expression is a music object that contains other +music objects in its properties. A list of objects can be stored in +the @code{elements} property of a music object, or a single @q{child} +music object in the @code{element} property. For example, +@rinternals{SequentialMusic} has its children in @code{elements}, +and @rinternals{GraceMusic} has its single argument in +@code{element}. The body of a repeat is stored in the @code{element} +property of @rinternals{RepeatedMusic}, and the alternatives in +@code{elements}. + +@node Building complicated functions +@section Building complicated functions + +This section explains how to gather the information necessary +to create complicated music functions. + +@menu +* Displaying music expressions:: +* Music properties:: +* Doubling a note with slurs (example):: +* Adding articulation to notes (example):: +@end menu + +@node Displaying music expressions +@subsection Displaying music expressions + +@cindex internal storage +@cindex displaying music expressions +@cindex internal representation, displaying +@cindex displayMusic +@funindex \displayMusic + +When writing a music function it is often instructive to inspect how +a music expression is stored internally. This can be done with the +music function @code{\displayMusic} + +@example +@{ + \displayMusic @{ c'4\f @} +@} +@end example + +@noindent +will display + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) + (make-music + 'AbsoluteDynamicEvent + 'text + "f"))))) +@end example + +By default, LilyPond will print these messages to the console along +with all the other messages. To split up these messages and save +the results of @code{\display@{STUFF@}}, redirect the output to +a file. + +@example +lilypond file.ly >display.txt +@end example + +With a bit of reformatting, the above information is easier to read, + +@example +(make-music 'SequentialMusic + 'elements (list (make-music 'EventChord + 'elements (list (make-music 'NoteEvent + 'duration (ly:make-duration 2 0 1 1) + 'pitch (ly:make-pitch 0 0 0)) + (make-music 'AbsoluteDynamicEvent + 'text "f"))))) +@end example + +A @code{@{ ... @}} music sequence has the name @code{SequentialMusic}, +and its inner expressions are stored as a list in its @code{'elements} +property. A note is represented as an @code{EventChord} expression, +containing a @code{NoteEvent} object (storing the duration and +pitch properties) and any extra information (in this case, an +@code{AbsoluteDynamicEvent} with a @code{"f"} text property. + + +@node Music properties +@subsection Music properties + +TODO -- make sure we delineate between @emph{music} properties, +@emph{context} properties, and @emph{layout} properties. These +are potentially confusing. + +The @code{NoteEvent} object is the first object of the +@code{'elements} property of @code{someNote}. + +@example +someNote = c' +\displayMusic \someNote +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)))) +@end example + +The @code{display-scheme-music} function is the function used by +@code{\displayMusic} to display the Scheme representation of a music +expression. + +@example +#(display-scheme-music (first (ly:music-property someNote 'elements))) +===> +(make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) +@end example + +Then the note pitch is accessed through the @code{'pitch} property +of the @code{NoteEvent} object, + +@example +#(display-scheme-music + (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch)) +===> +(ly:make-pitch 0 0 0) +@end example + +The note pitch can be changed by setting this @code{'pitch} property, + +@funindex \displayLilyMusic + +@example +#(set! (ly:music-property (first (ly:music-property someNote 'elements)) + 'pitch) + (ly:make-pitch 0 1 0)) ;; set the pitch to d'. +\displayLilyMusic \someNote +===> +d' +@end example + + +@node Doubling a note with slurs (example) +@subsection Doubling a note with slurs (example) + +Suppose we want to create a function that translates input like +@code{a} into @code{a( a)}. We begin by examining the internal +representation of the desired result. + +@example +\displayMusic@{ a'( a') @} +===> +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + -1))) + (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)) + (make-music + 'SlurEvent + 'span-direction + 1))))) +@end example + +The bad news is that the @code{SlurEvent} expressions +must be added @q{inside} the note (or more precisely, +inside the @code{EventChord} expression). + +Now we examine the input, + +@example +(make-music + 'SequentialMusic + 'elements + (list (make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 5 0)))))) +@end example + +So in our function, we need to clone this expression (so that we +have two notes to build the sequence), add a @code{SlurEvent} to the +@code{'elements} property of each one, and finally make a +@code{SequentialMusic} with the two @code{EventChords}. + +@example +doubleSlur = #(define-music-function (parser location note) (ly:music?) + "Return: @{ note ( note ) @}. + `note' is supposed to be an EventChord." + (let ((note2 (ly:music-deep-copy note))) + (set! (ly:music-property note 'elements) + (cons (make-music 'SlurEvent 'span-direction -1) + (ly:music-property note 'elements))) + (set! (ly:music-property note2 'elements) + (cons (make-music 'SlurEvent 'span-direction 1) + (ly:music-property note2 'elements))) + (make-music 'SequentialMusic 'elements (list note note2)))) +@end example + + +@node Adding articulation to notes (example) +@subsection Adding articulation to notes (example) + +The easy way to add articulation to notes is to merge two music +expressions into one context, as explained in +@ruser{Creating contexts}. However, suppose that we want to write +a music function that does this. + +A @code{$variable} inside the @code{#@{...#@}} notation is like +a regular @code{\variable} in classical LilyPond notation. We +know that + +@example +@{ \music -. -> @} +@end example + +@noindent +will not work in LilyPond. We could avoid this problem by attaching +the articulation to a fake note, + +@example +@{ << \music s1*0-.-> @} +@end example + +@noindent +but for the sake of this example, we will learn how to do this in +Scheme. We begin by examining our input and desired output, + +@example +% input +\displayMusic c4 +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)))) +===== +% desired output +\displayMusic c4-> +===> +(make-music + 'EventChord + 'elements + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch -1 0 0)) + (make-music + 'ArticulationEvent + 'articulation-type + "marcato"))) +@end example + +We see that a note (@code{c4}) is represented as an @code{EventChord} +expression, with a @code{NoteEvent} expression in its elements list. To +add a marcato articulation, an @code{ArticulationEvent} expression must +be added to the elements property of the @code{EventChord} +expression. + +To build this function, we begin with + +@example +(define (add-marcato event-chord) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +The first line is the way to define a function in Scheme: the function +name is @code{add-marcato}, and has one variable called +@code{event-chord}. In Scheme, the type of variable is often clear +from its name. (this is good practice in other programming languages, +too!) + +@example +"Add a marcato..." +@end example + +@noindent +is a description of what the function does. This is not strictly +necessary, but just like clear variable names, it is good practice. + +@example +(let ((result-event-chord (ly:music-deep-copy event-chord))) +@end example + +@code{let} is used to declare local variables. Here we use one local +variable, named @code{result-event-chord}, to which we give the value +@code{(ly:music-deep-copy event-chord)}. @code{ly:music-deep-copy} is +a function specific to LilyPond, like all functions prefixed by +@code{ly:}. It is use to make a copy of a music +expression. Here we copy @code{event-chord} (the parameter of the +function). Recall that our purpose is to add a marcato to an +@code{EventChord} expression. It is better to not modify the +@code{EventChord} which was given as an argument, because it may be +used elsewhere. + +Now we have a @code{result-event-chord}, which is a +@code{NoteEventChord} expression and is a copy of +@code{event-chord}. We add the marcato to its @code{'elements} +list property. + +@example +(set! place new-value) +@end example + +Here, what we want to set (the @q{place}) is the @code{'elements} +property of @code{result-event-chord} expression. + +@example +(ly:music-property result-event-chord 'elements) +@end example + +@code{ly:music-property} is the function used to access music properties +(the @code{'elements}, @code{'duration}, @code{'pitch}, etc, that we +see in the @code{\displayMusic} output above). The new value is the +former @code{'elements} property, with an extra item: the +@code{ArticulationEvent} expression, which we copy from the +@code{\displayMusic} output, + +@example +(cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements)) +@end example + +@code{cons} is used to add an element to a list without modifying +the original list. This is what we want: the same list as before, +plus the new @code{ArticulationEvent} expression. The order +inside the @code{'elements} property is not important here. + +Finally, once we have added the marcato articulation to its @code{elements} +property, we can return @code{result-event-chord}, hence the last line of +the function. + +Now we transform the @code{add-marcato} function into a music +function, + +@example +addMarcato = #(define-music-function (parser location event-chord) + (ly:music?) + "Add a marcato ArticulationEvent to the elements of `event-chord', + which is supposed to be an EventChord expression." + (let ((result-event-chord (ly:music-deep-copy event-chord))) + (set! (ly:music-property result-event-chord 'elements) + (cons (make-music 'ArticulationEvent + 'articulation-type "marcato") + (ly:music-property result-event-chord 'elements))) + result-event-chord)) +@end example + +We may verify that this music function works correctly, + +@example +\displayMusic \addMarcato c4 +@end example + + + + + +@ignore +@menu +* Tweaking with Scheme:: +@end menu + +@c @nod e Tweaking with Scheme +@c @sectio n Tweaking with Scheme + +We have seen how LilyPond output can be heavily modified using +commands like +@code{\override TextScript #'extra-offset = ( 1 . -1)}. But +we have even more power if we use Scheme. For a full explanation +of this, see the @ref{Scheme tutorial}, and +@ref{Interfaces for programmers}. + +We can use Scheme to simply @code{\override} commands, + +TODO Find a simple example +@c This isn't a valid example with skylining +@c It works fine without padText -td +@end ignore + +@ignore +@lilypond[quote,verbatim,ragged-right] +padText = #(define-music-function (parser location padding) (number?) +#{ + \once \override TextScript #'padding = #$padding +#}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond +@end ignore + +@ignore +We can use it to create new commands: + +@c Check this is a valid example with skylining +@c It is - 'padding still works + + +@lilypond[quote,verbatim,ragged-right] +tempoPadded = #(define-music-function (parser location padding tempotext) + (number? string?) +#{ + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } +#}) + +\relative c'' { + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 +} +@end lilypond + + +Even music expressions can be passed in: + +@lilypond[quote,verbatim,ragged-right] +pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) +#{ + $x e8 a b $y b a e +#}) + +\relative c''{ + \pattern c8 c8\f + \pattern {d16 dis} { ais16-> b\p } +} +@end lilypond +@end ignore diff --git a/Documentation/fdl.itexi b/Documentation/fdl.itexi new file mode 100644 index 0000000000..45adbfe7f4 --- /dev/null +++ b/Documentation/fdl.itexi @@ -0,0 +1,511 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ifclear web +@node GNU Free Documentation License +@appendix GNU Free Documentation License +@end ifclear +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/Documentation/fr/GNUmakefile b/Documentation/fr/GNUmakefile index ad17d7e4cc..33caa87f75 100644 --- a/Documentation/fr/GNUmakefile +++ b/Documentation/fr/GNUmakefile @@ -1,7 +1,9 @@ ISOLANG = fr depth = ../.. -SUBDIRS = user +SUBDIRS = web learning notation texidocs usage included essay extending STEPMAKE_TEMPLATES = documentation -LOCALSTEPMAKE_TEMPLATES = doc-i18n-root +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root + +EXTRA_DIST_FILES = web.texi include $(depth)/make/stepmake.make diff --git a/Documentation/fr/essay.tely b/Documentation/fr/essay.tely new file mode 100644 index 0000000000..f06b103b25 --- /dev/null +++ b/Documentation/fr/essay.tely @@ -0,0 +1,72 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 Translators: Jean-Charles Malahieude +@c Translation checkers: + +@setfilename lilypond-essay.info +@settitle Essai sur la gravure musicale automatisée +@documentencoding UTF-8 +@documentlanguage fr +@afourpaper + +@macro manualIntro +Cet essai traite de la gravure de la musique et de la notation assistée +par ordinateur à l'aide de LilyPond version @version{}. +@end macro + +@c `Essay' was born 2002-06-03 with git commit e38f5fc... +@macro copyrightDeclare +Copyright @copyright{} 2002--2011 par les auteurs. +@end macro + +@set FDL +@include macros.itexi + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen +@omfdescription Essay on automated music engraving +@omftype essay +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Essai sur la gravure musicale automatisée} + + +@ifnottex + +@menu +* La gravure musicale:: +* Références bibliographiques:: +* GNU Free Documentation License:: Licence de ce document. +* Index de LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include essay/engraving.itely +@include essay/literature.itely + +@include fdl.itexi + +@node Index de LilyPond +@appendix Index de LilyPond + +@printindex cp + +@bye diff --git a/Documentation/fr/essay/GNUmakefile b/Documentation/fr/essay/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/fr/essay/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/essay/engraving.itely b/Documentation/fr/essay/engraving.itely new file mode 100644 index 0000000000..7768d64365 --- /dev/null +++ b/Documentation/fr/essay/engraving.itely @@ -0,0 +1,1840 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: ec35c10a93b45b1f0dd721c54197a79d4207a92c + + 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" + +@c Translators: Jean-Charles Malahieude, John Mandereau, Gauvain Pocentek + +@node La gravure musicale +@chapter La gravure musicale +@translationof Music engraving + +Ce chapitre traite des objectifs et de l'architecture de LilyPond. + +@c TODO: +@c remove 3mm eps bounding box left padding for Sarabande (This will +@c require adding a new snippet option to lilypond-book.py +@c check formatting of HTML output +@c + +@menu +* L'histoire de LilyPond:: ce qui ne va pas avec les logiciels +* La gravure en détails:: de l'homme à la machine +* La gravure automatisée:: de la machine à l'homme +* De la théorie à la pratique:: qui fait quoi +* Démonstration par l'exemple:: LilyPond à l'œuvre +* Comparatif (BWV 861):: +@end menu + +@node L'histoire de LilyPond +@section L'histoire de LilyPond +@translationof The LilyPond story + +Bien avant que LilyPond soit à l'origine de tout un matériel d'orchestre +d'excellente facture ou qu'il participe à la création d'ouvrages +universitaires, avant même qu'il serve à imprimer la plus simple des +mélodies, avant que la communauté des utilisateurs de LilyPond +s'étende sur toute la planète, LilyPond est parti du constat +suivant@tie{}: + +@quotation +Pourquoi la plupart des partitions qui sortent d'un ordinateur ne +parvient-elle pas à égaler la beauté et l'élégance des partitions +gravées à la main@tie{}? +@end quotation + +@noindent +Certaines réponses sont évidentes si l'on considère les deux partitions +@ifnottex +ci-dessous. +@end ifnottex +@iftex +des pages qui suivent. +@end iftex +La première, qui date des années 1950, a été gravée à la main@tie{}; la +seconde est une édition informatisée contemporaine. + +@ifnottex +@quotation +@noindent +Bärenreiter BA 320, @copyright{}1950@tie{}: + +@sourceimage{baer-suite1-fullpage,,,png} +@end quotation + +@quotation +@noindent +Henle n° 666, @copyright{}2000@tie{}: + +@sourceimage{henle-suite1-fullpage,,,png} +@end quotation +@end ifnottex + +Il s'agit de la même musique, tirée de la première suite pour +violoncelle solo de Bach, mais ce n'est pas si évident, surtout +lorsqu'on imprime ces deux pages et les considère à distance. +@ifnottex +(Les images contenues dans la version PDF de ce manuel sont en haute +résolution, en vue de leur impression.) +@end ifnottex +Si vous posez ces pages sur un pupitre et les lisez ou prenez votre +archet, vous constaterez que la gravure manuelle est nettement plus +agréable à la vue. Ses lignes sont fluides et il y a du mouvement, +c'est de la musique et c'est vivant. Quant à l'édition moderne, elle a +l'air terne et mécanique. + +Ce qui rend cette nouvelle édition différente n'est pas évident au +premier coup d'œil@tie{}: c'est propre et condensé, presque @qq{mieux} +que l'autre dans la mesure où tout y est @qq{calculé} pour atteindre +l'uniformité. À vrai dire, il nous a fallu un moment pour nous en +rendre compte. Notre but étant d'améliorer la notation informatisée, il +nous fallait mettre le doigt sur ce qui ne va pas. + +Le problème se situe au niveau même de la précision toute mathématique +qui amène à l'uniformité de cette nouvelle édition. Considérons les +barres de mesure en milieu de ligne@tie{}: dans la partition +traditionnelle, leur emplacement varie quelque peu, à l'inverse de la +nouvelle, où toutes les barres sont rigoureusement alignées. Pour que +ce soit bien clair, le schéma ci-dessous montre en parallèle ce +positionnement, tant pour la version traditionnelle -- à gauche -- que +pour la version moderne -- à droite. + +@quotation +@iftex +@sourceimage{pdf/page-layout-comparison,,,} +@end iftex +@ifnottex +@sourceimage{page-layout-comparison,,,png} +@end ifnottex +@end quotation +@noindent + +Sur la partition générée par l'ordinateur, même les notes sont alignées +et la mélodie finit par disparaître derrière un quadrillage à base de +signes musicaux. + +Il y a bien sûr d'autres divergences. En ce qui concerne l'édition +traditionnelle, les traits verticaux sont plus épais, les liaisons plus +rapprochées des têtes de note, et la pente des ligatures -- liens +groupant les croches -- pas toujours la même. D'aucuns diront que tout +ceci n'est que pinaillerie, il n'en demeure pas moins que cette +partition a plus de lisibilité. Dans la partition informatisée, il n'y +a pratiquement aucune différence d'une ligne à l'autre, et si +l'interprète la quitte des yeux un instant, il risque de ne plus savoir +où il en était sur la page. + +LilyPond a été conçu dans le but de résoudre les problèmes que nous +avons décelés dans divers logiciels existant et aussi dans l'optique +d'atteindre une qualité comparable aux meilleures partitions gravées à +la main. + +@iftex +@page +@noindent +Bärenreiter BA 320, @copyright{}1950@tie{}: + +@sourceimage{baer-suite1-fullpage,16cm,,} +@page +@noindent +Henle no 666, @copyright{}2000@tie{}: +@sp 3 +@sourceimage{henle-suite1-fullpage,16cm,,} +@page +@end iftex + +@node La gravure en détails +@section La gravure en détails +@translationof Engraving details + +@cindex gravure +@cindex typographie musicale +@cindex musique et typographie +@cindex plate engraving +@cindex music engraving + +L'art de la typographie musicale est celui de la @emph{gravure +musicale}. Ce terme vient du procédé traditionnel de l'impression +musicale@footnote{Dès le début, les imprimeurs européens ont essayé +plusieurs techniques, allant de la matrice en bois sculpté à la fine +plaque de métal ciselée, en passant par des typons mobiles. L'avantage +de ces derniers résidait dans la possibilité d'effectuer aisément des +corrections et de facilement ajouter à la musique texte et paroles. +Néanmoins seule la gravure offrait l'avantage d'appréhender le rendu +global. C'est la raison pour laquelle la gravure est devenue le +standard en matière de musique imprimée, à l'exception près de certains +livres de cantiques, y compris au XXe siècle, essentiellement pour des +raisons de simplicité et de coût.}. Il y a encore quelques décennies, +les partitions étaient réalisées en taillant et ciselant la musique dans +des plaques de zinc ou d'étain, en inverse, comme dans un miroir. Ces +plaques étaient encrées et les reliefs créés par les poinçons et les +découpes retenaient l'encre. La partition était alors réalisée en +pressant le papier contre la plaque. Découpes et poinçons étaient +entièrement faits à la main. Dans la mesure où les corrections étaient +presque irréalisables, la gravure devait être correcte dès le premier +essai. Cela demande évidemment une très grande habileté. La gravure +musicale est un métier d'artisan, appris sur le tas. Un graveur ne +devenait un maître accompli qu'après une dizaine d'années de pratique. + +@quotation +@iftex +@sourceimage{hader-slaan,,7cm,} +@end iftex +@ifnottex +@sourceimage{hader-slaan,,,jpg} +@end ifnottex +@end quotation + +LilyPond s'inspire du travail réalisé par les maîtres graveurs qui +officiaient chez les éditeurs européens jusque dans les années 1950. +Ceux-ci sont bien souvent considérés comme ayant atteint le sommet de +leur art, et comptent dans leurs rangs des maisons telles que +Bärenreiter, Duhem, Durand, Hofmeister, Peters ou Schott. Au fil de +notre analyse de ces éditions, nous en avons appris encore plus sur ce +qu'il faut pour obtenir une partition d'excellente facture, et ce sur +quoi LilyPond devait porter ses efforts. + +@c Now all newly printed music is produced with computers. This has +@c obvious advantages: prints are cheaper to make, editorial work can be +@c delivered by email, and the original data can be easily stored. +@c Unfortunately, computer-generated scores rarely match the quality of +@c hand-engraved scores. Instead, computer printouts have a bland, +@c mechanical look, which makes them unpleasant to play from. + +@menu +* Fontes et polices:: De la création des polices musicales +* Espacement:: Considérations sur les espacements +* Lignes supplémentaires:: Cas particulier en matière de notation +* Tailles:: Considérations sur la taille des portées +* La raison de tous ces efforts:: Pourquoi s'attacher aux détails +@end menu + +@node Fontes et polices +@unnumberedsubsec Fontes et polices +@translationof Music fonts + +Les images ci-dessous mettent en évidence certaines différences entre +l'art du graveur traditionnel et le résultat habituel sorti d'un +ordinateur. L'image de gauche est un fac-similé d'un bémol tiré +d'une édition Bärenreiter traditionnelle@tie{}; celle de droite est +issue de la même partition, éditée en 2000. Bien que toutes deux soient +imprimées avec le même encrage, la version @qq{ancienne} paraît plus +noire@tie{}: les lignes de la portée y sont plus épaisses et le galbe du +bémol de Bärenreiter est à la limite de la volupté. Sur l'autre image, +les lignes sont plus fines et le bémol semble raide, coincé. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab +@ifnotinfo +@iftex +@sourceimage{baer-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{baer-flat-gray,,,png} +@end ifnottex + +@tab +@iftex +@sourceimage{henle-flat-gray,,4cm,} +@end iftex +@ifnottex +@sourceimage{henle-flat-gray,,,png} +@end ifnottex + +@end ifnotinfo +@ifinfo +@sourceimage{henle-flat-bw,,,png} +@sourceimage{baer-flat-bw,,,png} +@sourceimage{lily-flat-bw,,,png} +@end ifinfo + + +@item @tab +Bärenreiter (1950) +@tab +Henle (2000) + +@end multitable + +@cindex symboles musicaux +@cindex police +@cindex densité +@cindex contraste + +Lorsque nous nous sommes décidés à écrire un programme permettant de +typographier la musique, aucune police librement accessible ne +correspondait à l'esthétique de nos partitions préférées. Sans +toutefois nous décourager, nous avons créé notre propre jeu de symboles +musicaux à partir des éditions traditionnelles dont nous disposions. +L'expérience aidant, notre goût typographique s'est développé et nous +avons pu appréhender certaines subtilités stylistiques qui nous font +trouver maintenant de piètre qualité des polices que nous avions tout +d'abord appréciées. + +À titre d'exemple, voici deux fontes musicales@tie{}: la première ligne +comporte des caractères de la police par défaut du logiciel Sibelius -- +la police @emph{Opus} -- et la deuxième, ces mêmes caractères dans notre +propre police pour LilyPond. + +@quotation +@iftex +@sourceimage{pdf/OpusAndFeta,,,} +@end iftex +@ifnottex +@sourceimage{OpusAndFeta,,,png} +@end ifnottex +@end quotation + +Les symboles de LilyPond sont plus forts et leur épaisseur plus +équilibrée, ce qui d'ailleurs les rend plus lisibles. Les extrémités en +pointe, comme pour le soupir, devraient avoir une terminaison légèrement +arrondie plutôt qu'un angle tranchant. Ceci s'explique par la fragilité +des poinçons qui s'émoussent rapidement lors du martellement et de la +ciselure. Par ailleurs, la densité de la police doit tenir compte de +l'épaisseur des lignes, ligatures et liaisons afin d'obtenir un rendu +plein d'intensité et d'équilibre. + +Vous noterez aussi que notre ronde n'est pas ovoïde, mais plutôt en +forme de losange. La barre de notre bémol est comme brossée, le haut +étant de fait un peu plus large. Notre dièse et notre bécarre sont plus +évidents à reconnaître à distance du fait que leurs barres transversales +n'ont pas la même pente et que les verticales sont plus épaisses. + +@node Espacement +@unnumberedsubsec Espacement +@translationof Optical spacing + +Si l'on considère l'espacement, sa répartition devrait refléter la durée +des notes. Néanmoins, et comme nous l'avons vu plus haut avec la suite +de Bach, la plupart des éditions modernes se basent sur des durées à la +précision mathématique, ce qui entraine un effet des plus monotones. +Dans l'exemple qui suit, le même motif est imprimé deux fois@tie{}: la +première en appliquant un espacement chronométrique, la seconde avec +quelques corrections. Quelle version remporte vos suffrages@tie{}? + +@cindex optique et espacement +@cindex espacement et effet d'optique + + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 | + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.0 + \override NoteSpacing #'same-direction-correction = #0.0 + \override StaffSpacing #'stem-spacing-correction = #0.0 + } + } +} +@end lilypond + +@lilypond +\paper { + ragged-right = ##t + indent = #0.0 +} + +music = { + c'4 e''4 e'4 b'4 | + \stemDown + b'8[ e'' a' e''] + \stemNeutral + e'8[ e'8 e'8 e'8] +} + +\score +{ + \music + \layout { + \context { + \Staff + \override NoteSpacing #'stem-spacing-correction = #0.6 + } + } +} +@end lilypond + +@cindex rythmes réguliers +@cindex espacement régulier +@cindex régulier, espacement + +Chaque mesure de ce fragment comporte des notes d'égale valeur, ce qui +devrait se constater au niveau de l'espacement. Malheureusement, notre +œil nous trompe@tie{}: non seulement il considère la distance séparant +deux têtes de notes mais, de surcroît, il prend en compte l'espace +entre deux hampes. Par voie de conséquence, une succession de notes +hampe en haut puis hampe en bas devrait comporter un espace accru et, +dans une situation inverse, être plus resserrée, sans oublier de +considérer la hauteur de chacune de ces notes. La deuxième ligne +comporte de tels aménagements alors que, dans la première ligne, la +succession hampe descendante puis montante laisse apparaître des notes +resserrées. Un maître graveur ajusterait les espaces pour obtenir un +rendu qui flatte l'œil. + +Autre effet d'optique -- que d'ailleurs LilyPond prend en considération +-- l'espace entre la hampe et la barre de mesure. Lorsqu'une barre est +précédée d'une hampe montante, il est judicieux d'accroître l'espace +qui les sépare pour éviter cette sensation de tassement. Une note dont +la hampe va vers le bas ne nécessite pas un tel ajustement. + + +@node Lignes supplémentaires +@unnumberedsubsec Lignes supplémentaires +@translationof Ledger lines + +@cindex lignes supplémentaires +@cindex collisions + +Les lignes supplémentaires sont une gageure pour le typographe@tie{}: +les différents symboles musicaux doivent être suffisamment rapprochés +pour que le lecteur identifie la hauteur au premier coup d'œil. Vous +noterez, dans l'exemple qui suit, que les lignes supplémentaires sont un +peu plus épaisses que celles de la portée. Par ailleurs, un maître +graveur écourtera la ligne supplémentaire en présence d'une altération. +LilyPond, dans sa recherche d'efficacité, adopte ces pratiques. + +@multitable @columnfractions .25 .25 .25 .25 +@item @tab + +@iftex +@sourceimage{baer-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{baer-ledger,,,png} +@end ifnottex + +@tab + +@iftex +@sourceimage{lily-ledger,3cm,,} +@end iftex +@ifnottex +@sourceimage{lily-ledger,,,png} +@end ifnottex + +@end multitable + + +@node Tailles +@unnumberedsubsec Tailles +@translationof Optical sizing + +Une même œuvre peut être imprimée dans différents formats -- d'une +partie instrumentale au conducteur format de poche. Les graveurs +traditionnels utilisaient alors des poinçons différents pour obtenir le +meilleur rendu selon la taille de la partition. L'avènement des fontes +digitalisées permet d'obtenir n'importe quelle taille à partir d'un +simple tracé. Bien que ceci constitue un progrès en soi, il nous faut +cependant nuancer@tie{}: les glyphes sont moins forts lorsqu'ils sont de +taille réduite. + +Pour les besoins de LilyPond, nous avons créé des polices de graisse +différente selon la taille. Voici ce que produit LilyPond dans une +taille de portée de 26@tie{}points@tie{}: + +@quotation +@iftex +@sourceimage{pdf/size26,,23mm,} +@end iftex +@ifnottex +@sourceimage{size26,,,png} +@end ifnottex +@end quotation + +@noindent +et la même musique en 11@tie{}points, grossie de 236@tie{}% pour obtenir +une taille identique à l'image précédente@tie{}: + +@quotation +@iftex +@sourceimage{pdf/size11,,23mm,} +@end iftex +@ifnottex +@sourceimage{size11,,,png} +@end ifnottex +@end quotation + +@noindent +Comme vous le constatez, LilyPond imprime des lignes un peu plus +épaisses pour garantir une meilleure lecture à taille réduite. + +@ignore +This also allows staves of different sizes to coexist peacefully when +used together on the same page: + +@c TODO: are the stems in this example the right thickness? How should +@c line weights be scaled for small staves? + +@c Grieg's Violin Sonata Op. 45 +@lilypond[indent=1.5cm] +global = { + \time 6/8 + \key c \minor +} + +\score { + << + \new Staff \with { + fontSize = #-4 + \override StaffSymbol #'staff-space = #(magstep -4) + \override StaffSymbol #'thickness = #(magstep -3) + } + \relative c' { + \global + \set Staff.instrumentName = #"Violin" + c8.(\f^> b16 c d) ees8.(^> d16 c b) + g8.(^> b16 c ees) g8-.^> r r + R2. + } + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff \relative c' { + \global + s2. + s4. s8 r8 r16 + 4.^> 8 r r + } + \new Staff \relative c { + \global + \clef "bass" + << + { + \once \override DynamicText #'X-offset = #-3 + 2.~->^\f + 4.~ 8 + } \\ { + 2.~ + 4.~ 8 + } + >> + r8 r16 16 + 4.-> 8 r r + } + >> + >> +} +@end lilypond +@end ignore + +@node La raison de tous ces efforts +@unnumberedsubsec La raison de tous ces efforts +@translationof Why work so hard? + +Les musiciens sont normalement plus concentrés sur la manière dont ils +jouent la musique que sur son apparence, aussi ces pinailleries sur des +détails de typographie peuvent paraître académiques. Il n'en est rien. +La partition contribue, au même titre que bien d'autres éléments, à +l'existence même d'une représentation@tie{}: tout doit être fait pour +que l'interprète donne le meilleur de lui-même, et ce qui est peu clair +ou pas agréable à lire constitue un frein. + +La musique gravée de manière traditionnelle présente des symboles denses +et des lignes épaisses. Ceci produit un résultat équilibré, à plus +forte raison si la partition est éloignée du lecteur, comme lorsqu'elle +est posée sur un pupitre. Une répartition attentive des blancs permet +de resserrer la musique sans pour autant tasser les symboles et, au +final, diminue le nombre de tournes -- avantage indéniable. + +C'est une caractéristique commune de la typographie. La présentation +devrait être soignée, non seulement pour l'amour de l'art, mais plus +spécialement parce qu'elle vient en aide au lecteur dans sa tâche. +Pour du matériel d'interprétation tel que les partitions de musique, +ceci est doublement important@tie{}: les musiciens sont limités dans +leur attention. Au moins leur attention se porte sur la lecture, au +plus ils peuvent se concentrer sur l'exécution. En d'autres termes, une +meilleure typographie se traduit par une meilleure interprétation. + +Ces considérations montrent bien que la typographie musicale est un art +à la fois complexe et plein de subtilités, et qu'elle requiert des +compétences particulières que la majorité des musiciens ne possède pas. +LilyPond s'efforce de transposer le degré d'excellence de la gravure +traditionnelle à l'ère de l'ordinateur et donc de le mettre à +disposition de tous les musiciens. Nous avons affiné nos algorithmes, +le @emph{design} de nos fontes et les réglages du programme de manière à +produire des partitions d'une qualité comparable aux bonnes vieilles +éditions que nous avons toujours autant de plaisir à voir et à +interpréter. + + +@node La gravure automatisée +@section La gravure automatisée +@translationof Automated engraving + +@cindex gravure automatisée +@cindex automatisée, gravure + +Nous allons maintenant examiner les éléments nécessaires à la création +d'un logiciel capable d'imiter le rendu des partitions gravées à +l'ancienne. Nous commencerons par voir comment inculquer à l'ordinateur +les @qq{bonnes manières} de la présentation. Nous nous attarderons +ensuite sur l'analyse comparative par rapport aux éditions +traditionnelles, avant de considérer le degré de flexibilité à y inclure +pour être en mesure de gérer les différents cas de figure particuliers à +la notation. + +@menu +* Concours de beauté:: l'option du moindre mal +* Modélisation et banc d'essai:: l'évaluation des performances +* Règles de formatage:: l'architecture flexible +@end menu + + +@node Concours de beauté +@unnumberedsubsec Concours de beauté +@translationof Beauty contests + +Quels sont en réalité nos critères de formatage@tie{}? Considérant +l'image suivante, laquelle de ces trois configurations devrions-nous +choisir pour formater la liaison@tie{}? + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[( f] g[ a b d,)] r4 + \once \override Slur #'positions = #'(2 . 3) + e8[( f] g[ a b d,)] r4 + e8[( f] g[ a b d,)] r4 +} +@end lilypond + +Seuls quelques ouvrages traitent de l'art de graver la musique. Ils ne +contiennent malheureusement que des généralités et quelques exemples. +La lecture de telles règles est certes instructive, mais est très loin +de nous conduire à un algorithme prêt à être implémenté dans un +programme. Dans la pratique, suivre les instructions de ces traités +aboutirait à des algorithmes qui figent bon nombre d'exceptions. +Répertorier tous ces cas de figure demanderait un travail considérable, +qui finalement ne les couvrirait pas tous. + +@quotation +@iftex +@sourceimage{ross-beam-scan,7cm,,} +@end iftex +@ifnottex +@sourceimage{ross-beam-scan,,,.jpg} +@end ifnottex +@end quotation + +@emph{Règles de formatages définies par l'exemple. Image tirée de +l'ouvrage de Ted Ross @qq{The Art of Music Engraving}} + +Plutôt que d'écrire une foultitude de règles qui embrasserait tous les +cas de figure possibles et imaginables en matière de mise en forme, nous +avons préféré inculquer à LilyPond un certain nombre d'objectifs qui lui +permette de choisir entre différentes alternatives selon leur +esthétique. Pour ce faire, chacune des configurations est analysée en +terme de moins bonne qualité, et nous opterons pour celle étant la moins +mauvaise. + +Voici, à titre d'exemple, trois configurations possibles pour le tracé +d'une liaison@tie{}; Lilypond leur attribue individuellement une @qq{note +de laideur}. Le premier essai se voit attribuer 15,39@tie{}points +notamment pour l'effleurement de la tête de note. + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(1.5 . 1) + e8[(_"15.39" f] g[ a b d,)] r4 +} +@end lilypond + +La liaison ci-dessous reste à une distance uniforme des notes, mais il +faut tenir compte du fait qu'elle n'est pas rattachée aux première et +dernière notes. Ceci nous fait 1,71@tie{}points pour le début de la +liaison et 9,37 pour la terminaison -- qui est beaucoup plus éloignée de +la dernière note. Par ailleurs, la liaison monte alors que la mélodie +redescend, ce qui entraîne une pénalité de 2@tie{}points. Ceci nous +fait un total de 13,08@tie{}points de laideur. + +@lilypond +\relative c { + \clef bass + \once \override Slur #'positions = #'(2 . 3) + e8[(_"13.08" f] g[ a b d,)] r4 +} +@end lilypond + +Quant à la liaison qui suit, seule la terminaison reste éloignée de la +dernière note, ce qui donne 10,04@tie{}points de laideur auxquels nous +ajoutons 2 autres points pour la pente ascendante. Cette configuration +étant la moins laide, ou plutôt la version la plus satisfaisante, nous +la sélectionnons. + +@lilypond +\relative c { + \clef bass + e8[(_"12.04" f] g[ a b d,)] r4 +} +@end lilypond + +Cette manière de procéder est générique, et nous y avons recours dans +bon nombre de situations, comme pour déterminer la pente d'un lien de +croches, formater des accords liés, formater des accords avec des +valeurs pointées, positionner les sauts de ligne ou de page. Cette +technique est consommatrice de temps de calcul, dans la mesure où elle +examine de nombreuses possibilités@tie{}; néanmoins, le jeu en vaut la +chandelle, puisque le résultat final est bien meilleur et nous rapproche +des éditions traditionnelles. + + +@node Modélisation et banc d'essai +@unnumberedsubsec Modélisation et banc d'essai +@translationof Improvement by benchmarking + +Au fil du temps, le rendu de LilyPond a évolué, et continue de +s'améliorer lorsqu'on le compare aux partitions gravées à la main. + +Voici un extrait de l'une de nos éditions de référence (Bärenreiter +BA@tie{}320)@tie{}: + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@noindent +et ce que génère l'une des anciennes versions de LilyPond -- la 1.4, +publiée en mai@tie{}2001@tie{}: + +@iftex +@sourceimage{pdf/lily14-sarabande,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande,,,png} +@end ifnottex + +@noindent La sortie LilyPond est certes lisible, et acceptable pour +beaucoup de gens. Cependant, une comparaison minutieuse avec une +édition gravée à la main révèle de nombreuses erreurs de +formatage@tie{}: + +@iftex +@sourceimage{lily14-sarabande-annotated-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{lily14-sarabande-annotated,,,png} +@end ifnottex + +@itemize @bullet +@item trop d'espace avant la métrique +@item la hampe des notes ligaturées est trop longue +@item les deuxième et quatrième mesures sont trop tassées +@item la liaison est affreuse +@item les indications de trille sont trop grosses +@item les hampes sont trop fines +@end itemize + +@noindent +Passons sous silence les notes et indications absentes, tout comme +la faute de hauteur@tie{}! + +En ajustant les algorithmes, paramètres et polices concernés, nous avons +pu améliorer le résultat. La deuxième ligne ci-dessous a été générée +par la version la plus récente de LilyPond (@version{}). + +@iftex +@sourceimage{baer-sarabande-hires,16cm,,} +@end iftex +@ifnottex +@sourceimage{baer-sarabande,,,png} +@end ifnottex + +@lilypond[staffsize=17.5,line-width=15.9\cm] +\relative c { + \clef "bass" + \key d \minor + \time 3/4 + \mergeDifferentlyDottedOn + << + {\slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e)} + \\ + {d4_2 a2} + >> + \slurDashed + 4. e8( d c) + \slurSolid + bes g' f e16( f g_1 a_2 bes_3 d,_2) + \slurDashed + cis4.-\trill b8_3( a g) + << + {\slurDashed d'8.( e16) e4.-\trill( d16 e)} + \\ + {4 a2} + >> +} +@end lilypond + +@noindent +Sans être un clone de l'édition de référence, cette sortie est plus +proche d'une qualité de publication que les précédentes. + +@node Règles de formatage +@unnumberedsubsec Règles de formatage +@translationof Getting things right + +Nous pouvons aussi évaluer les capacités de LilyPond dans ses choix, en +comparant ses résultats avec ce que génèrent d'autres d'autres logiciels +du marché. Notre choix s'est porté sur Finale@tie{}2008, l'un des +logiciels les plus populaires notamment en Amérique du Nord. Son plus +proche concurrent est Sibelius, très répandu sur le marché européen. + +Pour cette analyse comparative, nous avons choisi la fugue en sol mineur +du premier livre du Clavier bien tempéré de Bach (BWV@tie{}861). En +voici le thème@tie{}: + +@lilypond +\relative c' { + \key g \minor + \clef "treble_8" + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a bes8 +} +@end lilypond + +@noindent + +Nous nous sommes intéressés aux sept dernières mesures (27 à 34) de +l'œuvre, que nous avons saisies à la fois avec Finale et avec LilyPond. +C'est à cet endroit que le sujet est rappelé, dans une strette à trois +voix, avant de mener à la conclusion. Pour ce qui est de Finale, nous +nous sommes abstenus d'effectuer quelque ajustement que ce soit dans le +but d'obtenir un résultat par défaut. Ceci permet de vraiment apprécier +conjointement ce que génère chacun des deux logiciels sans retouche +aucune. Nous avons toutefois redimensionné la page pour les besoins de +cet essai et forcé la musique à tenir sur deux systèmes pour que la +comparaison soit plus évidente. En effet, Finale crée par défaut deux +systèmes de trois mesure, et un troisième -- s'étalant sur toute la +ligne -- pour la dernière mesure. + +La plupart des différences entre ces deux éditions -- Finale pour la +première image -- se situent dans les mesures 28 et 29@tie{}: + +@iftex +@sourceimage{pdf/bwv861mm28-29,14cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm28-29,,,png} +@end ifnottex + +@lilypond[staffsize=19.5,line-width=14\cm] +global = { \key g \minor } + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 +} + +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a +} + +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + \new Staff = "LH" + << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond + +Entre autres défauts du résultat brut de Finale, nous notons@tie{}: + +@itemize @bullet +@item La majorité des ligatures est trop éloignée de la portée. +Lorsqu'une ligature se retrouve vers le milieu de la portée, la hauteur +des hampes qui la portent est d'environ une octave. Néanmoins, un +maître graveur les raccourcira dès lors que cette ligature est en dehors +de la portée d'une section à plusieurs voix. Les règles de ligatures de +Finale peuvent être améliorées à l'aide du greffon @emph{Patterson +Beams}, que nous avons décidé de laisser de côté pour cet exemple. + +@item Finale n'ajuste pas la position des notes qui s'entrecroisent. Il +en résulte une lecture peu évidente lorsque les voix supérieure et +inférieure de croisent temporairement@tie{}: + +@c KEEPLY +@lilypond +collide = \once \override NoteColumn #'force-hshift = #0 + +\score { + << + \new Voice = "sample" \relative c''{ + \key g \minor + << + { \voiceOne g4 \collide g4 } + \new Voice { \voiceTwo bes \collide bes } + >> + } + \new Lyrics \lyricsto "sample" \lyricmode { "bien " " mauvais" } + >> +} +@end lilypond + +@item Finale positionne tous les silences d'une même voix à une hauteur +fixe de la portée. Si l'utilisateur peut les déplacer à loisir, le +logiciel ne se soucie en rien de ce qui se passe dans les autres voix. +Par chance, il n'y a aucune collision entre un silence et une note dans +cet exemple@tie{}; cela tient plutôt à la position des notes qu'à celle +des silences. Tout compte fait, le mérite en revient à Bach plutôt qu'à +Finale d'éviter les collisions. + +@end itemize + +Cet exemple ne vise en aucun cas à démontrer que Finale est incapable de +fournir un résultat admirable. Au contraire, un utilisateur chevronné +pourra obtenir quelque chose d'excellent, mais au prix d'une bonne dose +tant de dextérité que de temps. La différence fondamentale entre +LilyPond et les générateurs de partition commerciaux réside dans le fait +suivant@tie{}: LilyPond tend à réduire l'intervention de l'utilisateur à +sa plus simple expression, alors que les autres programmes font tout +pour avoir une interface attractive pour effectuer toutes les retouches. + +Par ailleurs, Finale commet une erreur particulièrement flagrante@tie{}: +il manque un bémol à la mesure 33 + +@quotation +@iftex +@sourceimage{pdf/bwv861mm33-34-annotate,7.93cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861mm33-34-annotate,,,png} +@end ifnottex +@end quotation + +@noindent +Il faut un bémol pour annuler le bécarre qui se trouve dans la même +mesure, mais Finale ne s'en rend pas compte parce qu'il se trouve dans +une autre voix. Ainsi, l'utilisateur doit non seulement recourir à un +greffon pour gérer les ligatures, repositionner têtes de note et +silences, il lui faut de surcroît vérifier qu'à chaque mesure les +altérations sont en conformité indépendamment des voix s'il veut être à +l'abri de toute interruption d'une répétition pour une erreur dans la +partition. + +S'il vous plaît d'examiner ces sept mesures de plus près, elles sont +reproduites en intégralité à la fin de cet essai, ainsi que quatre +autres versions. Vous noterez certaines variations entre les éditions +traditionnelles, et LilyPond tient un rang acceptable. Il reste tout de +même quelques petits défauts à régler, comme le raccourcissement peut +être exagéré des hampes@tie{}; il y a donc encore de quoi faire pour les +développeurs. + +La typographie relevant d'un jugement humain, les personnes ne peuvent +être remplacées. Beaucoup de tâches rébarbatives peuvent cependant être +automatisées@tie{}: si LilyPond parvenait à gérer la plupart des +situations usuelles correctement, ce serait un grand pas en avant pour +l'édition informatisée. Au fil du temps, le logiciel pourra être révisé +afin d'automatiser de plus en plus d'actions, de sorte que les +ajustements manuels seront de moins en moins nécessaires. Les cas +particuliers peuvent être traités manuellement, notamment grâce à +l'architecture flexible de LilyPond. + + +@node De la théorie à la pratique +@section De la théorie à la pratique +@translationof Building software + +Nous allons nous intéresser, dans les paragraphes qui suivent, aux +arbitrages en terme de programmation qui ont participé à l'élaboration +de LilyPond. + +@menu +* Représentation de la musique:: le format de saisie +* Les constituants de la gravure:: quels symboles graver +* Flexibilité architecturale:: +@end menu + + +@node Représentation de la musique +@unnumberedsubsec Représentation de la musique +@translationof Music representation + +@cindex syntaxe +@cindex structures récursives +@cindex récursivité des structures + +Le format de saisie idéal pour un système évolué de formatage consiste +en la description abstraite du contenu. Dans le cas qui nous occupe, il +s'agit tout bonnement de la musique. Cela n'est pas sans poser un +énorme problème@tie{}: comment définir @emph{ce qu'est} la +musique@tie{}? Pour résoudre ce problème, nous l'avons inversé. Au +lieu de définir ce qu'est la musique, notre programme sert de +définition@tie{}: nous avons écrit un programme capable de produire des +partitions, et avons ajusté son format de saisie pour être aussi léger +que possible. Lorsque le format ne peut plus être simplifié, nous +avons par définition atteint le contenu même. Autrement dit, notre +programme utilise la définition formelle d'un document musical. + +La syntaxe est également celle de l'interface utilisateur de LilyPond, +puisqu'elle peut être facilement tapée au clavier@tie{}: + +@example +@{ + c'4 d'8 +@} +@end example + +@noindent +sont un do médium noire et un ré croche juste au-dessus. + +@lilypond[quote] +{ + c'4 d'8 +} +@end lilypond + +À petite échelle, une telle syntaxe est pratique. À plus grande +échelle, une structuration est nécessaire. Sans cela, comment saisir +des pièces aussi complexes qu'un opéra ou une symphonie@tie{}? La +structure est construite selon le même concept que les expressions +musicales@tie{}: c'est en combinant de petits fragments qu'une musique +plus complexe peut être représentée. Par exemple@tie{}: + +@lilypond[quote,verbatim,fragment,relative=1] +f4 +@end lilypond + +@noindent +Quand des notes sont combinées simultanément, il suffit de les insérer +entre @code{<<} et @code{>>}@tie{}: + +@example +<> +@end example + +@lilypond[quote,fragment,relative=1] +\new Voice { <> } +@end lilypond + +@noindent +Insérées dans une paire d'accolades @code{@{@tie{}@dots{}@tie{}@}}, ces +expressions sont intégrées dans une séquence@tie{}: + +@example +@{ f4 <> @} +@end example + +@lilypond[quote,relative=1,fragment] +{ f4 <> } +@end lilypond + +@noindent +Ceci constitue une nouvelle expression, qui peut être à son tour +combinée avec une autre expression simultanée (en l'occurence une +blanche) à l'aide de @code{<<}, @code{\\} et @code{>>}@tie{}: + +@example +<< g2 \\ @{ f4 <> @} >> +@end example + +@lilypond[quote,fragment,relative=2] +\new Voice { << g2 \\ { f4 <> } >> } +@end lilypond + +De telles structures récursives peuvent être définies formellement et +de manière ordonnée avec une @emph{grammaire libre de tout contexte}. +Le code d'analyse de la saisie est également généré depuis cette +grammaire. Autrement dit, la définition de la syntaxe de LilyPond est +claire et sans ambiguïté. + +Ce sont la syntaxe et l'interface qui concernent les utilisateurs. +Elles sont sujettes à discussion, puisque relatives aux goûts de chacun. +Bien que ces discussions soient intéressantes, elles ne sont pas +productives. À l'échelle de LilyPond, l'importance du format de saisie +est minime@tie{}: inventer une syntaxe claire est bien plus aisé +qu'écrire un code de mise en page décent. Ceci est d'ailleurs +illustré par le nombre de lignes de code de ces composants +respectifs@tie{}: l'analyse du texte de saisie et sa représentation +pèsent moins de 10@tie{}% du code. + +Dans la conception des structures utilisées par LilyPond, nous avons +pris certaines options divergentes des autres logiciels. Considérons la +nature par essence hiérarchique de la notation musicale@tie{}: + +@lilypond[quote,fragment] +<< +\new Staff \relative c'' { + \key g \major + \time 3/4 + d4 g,8 a b c d4 g, g +} +\new Staff \relative c' { + \clef "bass" + \key g \major + 2 a4 b2. +} +>> +@end lilypond + +Nous y voyons des hauteurs regroupées en accords appartenant à des +mesures elles-mêmes rattachées à des portées. On pourrait représenter +cela par un système de boîtes imbriquées@tie{}: + +@quotation +@iftex +@sourceimage{pdf/nestedboxes,,4cm,} +@end iftex +@ifnottex +@sourceimage{nestedboxes,,,png} +@end ifnottex +@end quotation + +Cette structure est cependant réductrice car reposant sur des postulats +extrêmement restrictifs. Cela devient plus évident dès lors que la +musique se complique@tie{}: + +@lilypond[quote] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +\new PianoStaff << + \new Staff = "RH" << + \new Voice = "I" \relative c''' { + \time 3/4 + \voiceOne + \times 6/7 {g8 g g g g g g} + \oneVoice + r4 r4\fermata + } + \new Voice = "II" \relative c' { + \voiceTwo + c4 + \times 4/5 { + 8 f g + \change Staff = "LH" \oneVoice + \stemUp g,( c} + r4 + \override Stem #'cross-staff = ##t + \override Stem #'length = #12 + ) r\fermata + } + >> + \new Staff = "LH" << + \new Voice = "III" \relative c' { + \time 2/4 + \clef "bass" + g4 \stopStaff s + \startStaff s2*2 + } + >> +>> +@end lilypond + +Ici, les portées débutent et s'arrêtent n'importe où, les voix passent +d'une portée à l'autre, et parfois même occupent deux portées. Nombre +de logiciels auront d'énormes difficultés à reproduire cet exemple, pour +la bonne et simple raison qu'ils se basent sur le modèle hiérarchique de +boîtes imbriquées. LilyPond, quant à lui, tend à préserver la +dichotomie entre le format de saisie et une structure aussi flexible que +possible. + + +@node Les constituants de la gravure +@unnumberedsubsec Les constituants de la gravure +@translationof What symbols to engrave? + +@cindex gravure +@cindex typographie +@cindex graveur +@cindex greffon +@cindex module + +Si le processus de formatage se charge de décider où positionner les +symboles, encore faudrait-il savoir @emph{quels} symboles doivent +apparaître -- ou bien, quelle notation utiliser. + +La notation musicale constitue une forme d'enregistrement de la musique +qui a d'ailleurs évolué sur un millier d'années. La forme que nous +utilisons de nos jours remonte au début de la Renaissance. Bien que ses +fondements n'aient pas changé -- des têtes de note réparties sur une +portée à cinq lignes --, certains détails sont apparus qui permettent de +rendre compte des apports de la notation contemporaine. La notation +musicale couvre cinq siècles de musique, allant de la simple monodie à +de gigantesques contrepoints orchestraux. + +Comment intégrer un tel monstre aux si nombreux visages ? Notre solution +est de clairement distinguer la notation -- @emph{quels} symboles +utiliser -- de la gravure -- @emph{où} les placer. Pour appréhender la +notation, nous l'avons disséquée en éléments simples (et +programmables)@tie{}: chaque type de symbole est géré par un module -- +ou greffon -- différent. Tous ces modules sont entièrement +configurables et indépendants, chacun pouvant être développé et amélioré +séparément. Nous appelons ces modules des graveurs (@emph{engravers} en +anglais), par analogie avec ces professionnels qui mettent en forme +graphiquement les idées musicales. + + +Le module le plus basique, qu'on appelle @code{Note_heads_engraver}, +crée les têtes de notes@tie{}: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + \remove "Staff_symbol_engraver" + \consists "Pitch_squash_engraver" + } + } +} +@end lilypond + +@noindent +Puis le module @code{Staff_symbol_engraver} génère les objets +représentant les lignes de portée@tie{}: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + \consists "Pitch_squash_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +le module @code{Clef_engraver} fournit au @code{Note_heads_engraver} +la hauteur à laquelle doit être placée chaque tête de note@tie{}: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Stem_engraver" + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +et, enfin, les hampes et leurs crochets sont gérés par le +@code{Stem_engraver}@tie{}: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" + +\score { + \topVoice + \layout { + \context { + \Voice + \remove "Phrasing_slur_engraver" + \remove "Slur_engraver" + \remove "Script_engraver" + \remove "Beam_engraver" + \remove "Auto_beam_engraver" + } + \context { + \Staff + \remove "Accidental_engraver" + \remove "Key_engraver" + \remove "Bar_engraver" + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +@noindent +Le module @code{Stem_engraver} est appelé dès qu'une tête de note +apparaît. Pour chaque note rencontrée -- ou groupe de notes s'il s'agit +d'un accord --, un objet hampe est créé et attaché à la tête de note. +Si l'on ajoute les modules en charge des ligatures, des liaisons, des +accents, des barres de mesure, de la métrique et de l'armure, nous avons +tout ce qui est nécessaire à une partition. + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { \topVoice } +@end lilypond + +@cindex polyphony +@cindex engraving multiple voices +@cindex contexts + +Le principe décrit plus haut fonctionne très bien pour de la musique +monophonique, mais qu'en est-il de la polyphonie@tie{}? Dans ce cas, +plusieurs voix peuvent partager la même portée@tie{}: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\new Staff << \topVoice \\ \botVoice >> +@end lilypond + +Ici, la portée et les altérations sont partagées mais les hampes, +liaisons, liens, etc. dépendent de chaque voix. De plus, les graveurs +doivent être regroupés. Les graveurs de têtes de note, hampes, +liaisons, etc. sont donc inclus dans un groupe appelé @emph{Voice +context} (contexte de voix), alors que l'armure, les altérations, les +barres de mesures, etc. sont placées dans un groupe @emph{Staff context} +(contexte de portée). Dans le cas d'une polyphonie, un contexte de +portée contient plusieurs contextes de voix. De même, plusieurs +contextes de portée peuvent être assemblés dans un contexte de partition +(@emph{Score context})@tie{}: + +@lilypond[quote,ragged-right] +\include "engraver-example.ily" +\score { + << + \new Staff << \topVoice \\ \botVoice >> + \new Staff << \pah \\ \hoom >> + >> +} +@end lilypond + +@seealso +Référence des propriétés internes : +@rinternals{Contexts}. + + +@node Flexibilité architecturale +@unnumberedsubsec Flexibilité architecturale +@translationof Flexible architecture + +Pour ses premiers pas, LilyPond était totalement écrit en langage +C++@tie{}; les programmeurs gravaient les fonctionnalités du programme +dans le marbre. Cela s'est avéré peu satisfaisant pour plusieurs +raisons@tie{}: + +@itemize + +@item Il peut arriver que LilyPond commette une erreur, auquel cas +l'utilisateur doit pouvoir déroger aux décisions arbitraires, et donc +se servir du moteur de formatage. Par conséquent, les règles et +paramètres ne peuvent être fixés lors de la compilation, mais doivent +être accessibles lors de l'exécution. + +@item Graver est une affaire de jugement visuel, donc une affaire de goût. +Nous savons que les utilisateurs peuvent ne pas être d'accord avec nous. +Il faut donc qu'il aient accès aux définitions des styles +typographiques. + +@item Enfin, nous redéfinissons continuellement les règles de formatage, +et avons donc besoin d'une approche souple des règles. Le C++ implique +une méthode de groupement des règles qui ne correspond pas au +fonctionnement de la notation musicale. + +@end itemize + +@cindex Scheme, langage de programmation +@cindex langage de programmation Scheme + +Nous avons résolu ces problème par l'adjonction d'un interpréteur pour +le Scheme et la réécriture de parties entières de LilyPond dans ce +langage. L'architecture du programme repose sur la notion d'objets +graphiques que l'on peut décrire par des variables ou des fonctions +Scheme. Elle doit prendre en compte les règles de formatage, le style +typographique et les décisions de formatage individuelles. +L'utilisateur de LilyPond peut accéder directement à la majorité de ces +contrôles. + +La mise en page dépend des variables Scheme. Par exemple, la variable +@var{direction} définie pour de nombreux objets, encode le choix entre +haut et bas (ou gauche et droite). L'image qui suit présente deux +accords, accentués et arpégés. Pour le premier accord, la direction de +chaque objet est vers le bas (ou la gauche). Les objets sont dirigés +vers le haut (ou la droite) pour le second. + +@lilypond[quote,ragged-right] +\score { + \relative c' { + \stemDown 4_>-\arpeggio + \override Arpeggio #'direction = #RIGHT + \stemUp 4^>-\arpeggio + } + \layout { + \context { + \Score + \override SpacingSpanner #'spacing-increment = #3 + \override TimeSignature #'transparent = ##t + } + } +} +@end lilypond + +@cindex score formatting +@cindex formatting a score +@cindex formatting rules + +@noindent +Le processus de mise en forme d'une partition consiste à lire et +écrire des variables d'objets. Certaines variables ont une valeur +prédéfinie. Par exemple, l'épaisseur de nombreuses lignes -- +caractéristiques d'un style typographique -- est préétablie. La changer +entraîne un changement du style typographique. + +@lilypond[quote,ragged-right] +fragment = { + \clef bass f8 as8 + c'4-~ c'16 as g f e16 g bes c' des'4 +} +<< + \new Staff \fragment + \new Staff \with { + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #0.5 + \override Bar #'thickness = #3.6 + \override Tie #'thickness = #2.2 + \override StaffSymbol #'thickness = #3.0 + \override Tie #'extra-offset = #'(0 . 0.3) + } + \fragment +>> +@end lilypond + +Les valeurs prédéfinies de certaines variables font aussi partie des +règles de formatage. Chaque objet possède des variables contenant des +procédures. Ces procédures réalisent le formatage prédéfini, dont +l'apparence peut être changée en remplaçant ces procédures par d'autres. +Dans l'exemple suivant, la règle permettant à l'objet @qq{tête de note} +de dessiner son symbole est modifiée au cours de l'extrait +musical@tie{}: + +@lilypond[quote,ragged-right] +#(set-global-staff-size 30) + +#(define (mc-squared grob orig current) + (let* ((interfaces (ly:grob-interfaces grob)) + (pos (ly:grob-property grob 'staff-position))) + (if (memq 'note-head-interface interfaces) + (begin + (ly:grob-set-property! grob 'stencil + (grob-interpret-markup grob + (make-lower-markup 0.5 + (case pos + ((-5) "m") + ((-3) "c ") + ((-2) (make-smaller-markup (make-bold-markup "2"))) + (else "bla"))))))))) + +\new Voice \relative c' { + \stemUp + \set autoBeaming = ##f + \time 2/4 + 4 + \once \override NoteHead #'stencil = #note-head::brew-ez-stencil + \once \override NoteHead #'font-size = #-7 + \once \override NoteHead #'font-family = #'sans + \once \override NoteHead #'font-series = #'bold + 4 + \once \override NoteHead #'style = #'cross + 4 + \applyOutput #'Voice #mc-squared + 4 + << + { d8[ es-( fis^^ g] fis2-) } + \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } + >> +} +@end lilypond + + +@node Démonstration par l'exemple +@section Démonstration par l'exemple +@translationof Putting LilyPond to work + +@cindex simples exemples +@cindex exemples simples + +Nous vous avons montré ce que devrait être la gravure musicale, et +comment nous avons construit notre logiciel pour imiter cette apparence. +Nous nous sommes énormément investis dans cette construction. En guise +de récompense pour ce long travail, vous pouvez à votre tour +utiliser le programme pour imprimer votre musique. +Commençons par quelques notes@dots{} + +@lilypond[quote,relative=1] +{ + \time 2/4 + c4 c g'4 g a4 a g2 +} +@end lilypond + +@noindent +Lorsqu'on leur ajoute des accords et des paroles, on obtient une chanson +populaire@dots{} + +@lilypond[quote,ragged-right] +<< + \chords { c2 c f2 c } + \new Staff + \relative c' { + \time 2/4 + c4 c g' g a a g2 + } + \addlyrics { twin -- kle twin -- kle lit -- tle star } +>> +@end lilypond + +On peut aussi éditer de la polyphonie ou une partition pour piano. +Quant à ce qui suit, admirez l'exotisme de certaines +constructions@dots{} + +@lilypond[quote] +\header { + title = "Screech and boink" + subtitle = "Random complex notation" + composer = "Han-Wen Nienhuys" +} + +\score { + \context PianoStaff << + \new Staff = "up" { + \time 4/8 + \key c \minor + << { + \revert Stem #'direction + \change Staff = down + \set subdivideBeams = ##t + g16.[ + \change Staff = up + c'''32 + \change Staff = down + g32 + \change Staff = up + c'''32 + \change Staff = down + g16] + \change Staff = up + \stemUp + \set followVoice = ##t + c'''32([ b''16 a''16 gis''16 g''32)] + } \\ { + s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] + } \\ { + s4 \autoBeamOff d''8.. f''32 + } \\ { + s4 es''4 + } >> + } + + \new Staff = "down" { + \clef bass + \key c \minor + \set subdivideBeams = ##f + \override Stem #'french-beaming = ##t + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #4.0 + g'16[ b16 fis16 g16] + << \makeClusters { + as16 + + + } \\ { + \override Staff.Arpeggio #'arpeggio-direction =#down + 4\arpeggio + } + >> } + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 60 8) + } + } + \layout { + \context { + \Staff + \consists Horizontal_bracket_engraver + } + } +} +@end lilypond + +Ces fragments ont tous été écrits à la main, mais ce n'est pas une +obligation. Dans la mesure où le moteur de formatage est presque +complètement automatisé, il peut servir à générer du matériel imprimable +pour d'autres programmes en charge de manipuler de la musique. LilyPond +est parfaitement en mesure de convertir des bases de données musicales +aux fins de les utiliser dans des sites internet ou des présentations +multimédia. + +Vous avez constaté, au fil de notre propos, que le format source est +purement textuel et peut donc être réutilisé dans d'autres formats +basés sur une description textuelle comme @LaTeX{}, HTML ou -- ce qui +est le cas pour la documentation de LilyPond -- Texinfo. À l'aide du +script @command{lilypond-book} fournit avec LilyPond, les fragments +de code insérés feront place à une image dans le fichier résultant, +qu'il soit au format PDF ou HTML. Il existe aussi une extension pour +OpenOffice.org -- OOoLilyPond -- qui permet d'insérer des extraits dans +un document. + +Pour mieux voir LilyPond en action, consulter la documentation ou +accéder directement au logiciel, rendez-vous sur www.lilypond.org. + +@page +@node Comparatif (BWV 861) +@section Comparatif (BWV 861) +@translationof Engraved examples (BWV 861) + +Cette annexe présente quatre éditions de référence et deux éditions +informatisées des sept dernières mesures de la fugue en sol mineur +extraite du Premier livre du clavier bien tempéré de Bach +(BWV@tie{}861). + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989)@tie{}: + +@iftex +@sourceimage{bwv861-baer,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-small,,,png} +@end ifnottex + +@noindent +Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1, +1989), à partir d'une autre source. En plus de différences au niveau +des éléments textuels, ce travail montre que, au sein d'une même maison +d'édition, les appréciations peuvent être différentes selon le +graveur@tie{}: + +@iftex +@sourceimage{bwv861-baer-alt,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-baer-alt-small,,,png} +@end ifnottex + +@noindent +Breitkopf & Härtel, édité par Ferruccio Busoni (Wiesbaden, 1894), +disponible à la Petrucci Music Library (IMSLP@tie{}#22081). Les +éléments éditoriaux tels que doigtés et articulations en ont été gommés +aux fins de comparaison avec les autres éditions@tie{}: + +@iftex +@sourceimage{bwv861-breitkopf,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-breitkopf-small,,,png} +@end ifnottex + +@noindent +Bach-Gesellschaft edition (Leipzig, 1866), disponible à la Petrucci +Music Library (IMSPL@tie{}#02221)@tie{}: + +@iftex +@sourceimage{bwv861-gessellschaft,16cm,,} +@end iftex +@ifnottex +@sourceimage{bwv861-gessellschaft-small,,,png} +@end ifnottex + +@noindent +Finale 2008@tie{}: + +@iftex +@sourceimage{pdf/bwv861-finale2008a,,,} +@end iftex +@ifnottex +@sourceimage{bwv861-finale2008a,,,png} +@end ifnottex + +@sp 4 +@noindent +LilyPond, version @version{}@tie{}: + +@lilypond[staffsize=14.3,line-width=15.9\cm] +global = {\key g \minor} + +partI = \relative c' { + \voiceOne + fis8 d' ees g, fis4 g + r8 a16 bes c8 bes16 a d8 r r4 + r2 r8 d16 ees f8 ees16 d + ees4 ~ ees16 d c bes a4 r8 ees'16 d + c8 d16 ees d8 e16 fis g8 fis16 g a4 ~ + a8 d, g f ees d c bes + a2 g\fermata \bar "|." +} + +partII = \relative c' { + \voiceTwo + d4 r4 r8 d'16 c bes8 c16 d + ees8 d c ees a, r r4 + r8 fis16 g a8 g16 fis g2 ~ + g2 r8 d' ees g, + fis4 g r8 a16 bes c8 bes16 a + bes4. 8 r r + 4 d2 +} +partIII = \relative c' { + \voiceOne + r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a + bes2 ~ bes8 b16 a g8 a16 b + c4 r r2 + R1 + r8 d ees g, fis4 g + r8 a16 bes c8 bes16 a b2 +} +partIV = \relative c { + \voiceTwo + d4 r r2 + r8 d ees g, fis4 a + d,8 d'16 c bes8 c16 d ees2 ~ + ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a + d,8 d'16 c bes8 c16 d ees8 c a fis' + g f ees d c bes a g + c a d d, g2\fermata +} + +\score { + << + % \set Score.barNumberVisibility = #all-bar-numbers-visible + % required in 2.13 + \set Score.currentBarNumber = #28 + \bar "" + \new PianoStaff << + \new Staff = "RH" << + \global + \new Voice = "voiceI" { \partI } + \new Voice = "voiceII" { \partII } + >> + + \new Staff = "LH" << + \clef "bass" + \global + \new Voice = "voiceIII" { \partIII } + \new Voice = "voiceIV" { \partIV } + >> + >> + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'padding = #1 + } + } +} +@end lilypond diff --git a/Documentation/fr/essay/literature.itely b/Documentation/fr/essay/literature.itely new file mode 100644 index 0000000000..6473fba5ef --- /dev/null +++ b/Documentation/fr/essay/literature.itely @@ -0,0 +1,115 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Jean-Jacques Gerbaud, Valentin Villenave +@c Translation checkers: Jean-Charles Malahieude + + +@node Références bibliographiques +@chapter Références bibliographiques +@translationof Literature list + +Voici des listes de références utilisées dans Lilypond. + +@menu +* Bibliographie succincte:: +* Bibliographie développée:: +@end menu + +@node Bibliographie succincte +@section Bibliographie succincte +@translationof Short literature list + + +Voici quelques titres intéressants pour en savoir plus +sur la notation de la musique. + + +@table @cite +@item Ignatzek 1995 +Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne +1995. Mainz, Germany ISBN 3-7957-5140-3. + +Une méthode d'introduction pour le jazz au piano. Un des premiers +chapitres contient une présentation des accords couramment utilisés +dans la musique de jazz. + + +@item Gerou 1996 + +Tom Gerou and Linda Lusk, Essential Dictionary of Music +Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. + +Une liste concise et classée par ordre alphabétique des éléments de +notation musicale couramment utilisés, qui couvre la plupart +des cas usuels. + + +@item Read 1968 +Gardner Read, Music Notation: A Manual of Modern Practice. +Taplinger Publishing, New York (2nd edition). + +Un ouvrage canonique sur la notation de la musique. + +@item Ross 1987 +Ted Ross, Teach yourself the art of music engraving and processing. +Hansen House, Miami, Florida 1987. + +Ce livre traite de la gravure musicale, c'est-à-dire de l'édition +musicale à un niveau professionnel. Il contient des indications sur +l'estampage, l'utilisation des plumes et les conventions de notation, +ainsi que d'intéressants chapitres traitant de détails techniques et +historiques. + +@item Schirmer 2001 +The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. +(Ce livre peut être commandé depuis le service de location.) + +Ce manuel se concentre spécifiquement sur la préparation d'épreuves +pour les publications de Schirmer. Il traite de plusieurs +détails qu'on ne trouve pas dans les livres plus conventionnels. Il +donne également une bonne idée de la qualité requise pour des tirages +destinés à la publication. + +@item Stone 1980 + +Kurt Stone, Music Notation in the Twentieth Century. +Norton, New York 1980. + +Ce livre décrit la notation de la musique savante moderne, mais +débute par une présentation exhaustive des pratiques traditionnelles +de notation. + +@end table + + +@node Bibliographie développée +@section Bibliographie développée +@translationof Long literature list + +@c Better left untranslated -vv + +@ignore +@subheading Colorado + +@include colorado.itexi + +@subheading Notation informatique + +@include computer-notation.itexi + +@subheading Gravure + +@include engravingbib.itexi +@end ignore + +@untranslated diff --git a/Documentation/fr/extending/GNUmakefile b/Documentation/fr/extending/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/fr/extending/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/extending/programming-interface.itely b/Documentation/fr/extending/programming-interface.itely new file mode 100644 index 0000000000..a66da00d6c --- /dev/null +++ b/Documentation/fr/extending/programming-interface.itely @@ -0,0 +1,393 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 3f4496001441e0b1b27d7bc5395c4520f4f2088c + + 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" + +@c Translators: Valentin Villenave +@c Translation checkers: Gilles Thibault, Jean-Charles Malahieude + + +@node Interfaces pour les programmeurs +@chapter Interfaces pour les programmeurs +@translationof Interfaces for programmers + +@untranslated + + +@menu +* Fonctions musicales:: +* Interfaces de programmation:: +* Construction de fonctions complexes:: +* Interface de programmation des marqueurs de texte:: +* Contextes pour programmeurs:: +* Utilisation de procédures Scheme en tant que propriétés:: +* Utilisation de code Scheme au lieu de \"tweak\":: +* Retouches complexes:: +@end menu + +@node Fonctions musicales +@section Fonctions musicales +@translationof Music functions + +@untranslated + + +@menu +* Aperçu des fonctions musicales:: +* Fonctions de substitution simple:: +* Fonctions de substitution par paire:: +* De l'usage des mathématiques dans les fonctions:: +* Fonctions fantômes:: +* Fonctions dépourvues d'argument:: +* Liste des fonctions musicales prédéfinies:: +@end menu + +@node Aperçu des fonctions musicales +@subsection Aperçu des fonctions musicales +@translationof Overview of music functions + +@untranslated + + +@node Fonctions de substitution simple +@subsection Fonctions de substitution simple +@translationof Simple substitution functions + +@untranslated + + +@node Fonctions de substitution par paire +@subsection Fonctions de substitution par paire +@translationof Paired substitution functions + +@untranslated + + +@node De l'usage des mathématiques dans les fonctions +@subsection De l'usage des mathématiques dans les fonctions +@translationof Mathematics in functions + +@untranslated + + +@node Fonctions fantômes +@subsection Fonctions fantômes +@translationof Void functions + +@untranslated + + +@node Fonctions dépourvues d'argument +@subsection Fonctions dépourvues d'argument +@translationof Functions without arguments + +@untranslated + + +@node Liste des fonctions musicales prédéfinies +@subsection Liste des fonctions musicales prédéfinies +@translationof Overview of available music functions + +@untranslated + + +@include identifiers.tely +@node Interfaces de programmation +@section Interfaces de programmation +@translationof Programmer interfaces + +@untranslated + + +@menu +* Variables d'entrée et Scheme:: +* Représentation interne de la musique:: +@end menu + +@node Variables d'entrée et Scheme +@subsection Variables d'entrée et Scheme +@translationof Input variables and Scheme + +@untranslated + + +@node Représentation interne de la musique +@subsection Représentation interne de la musique +@translationof Internal music representation + +@untranslated + + +@node Construction de fonctions complexes +@section Construction de fonctions complexes +@translationof Building complicated functions + +@untranslated + + +@menu +* Affichage d'expressions musicales:: +* Propriétés de la musique:: +* Exemple : redoubler une note avec liaison:: +* Exemple : ajouter une articulation à plusieurs notes:: +@end menu + +@node Affichage d'expressions musicales +@subsection Affichage d'expressions musicales +@translationof Displaying music expressions + +@untranslated + + +@node Propriétés de la musique +@subsection Propriétés de la musique +@translationof Music properties + +@untranslated + + +@node Exemple : redoubler une note avec liaison +@subsection Exemple : redoubler une note avec liaison +@translationof Doubling a note with slurs (example) + +@untranslated + + +@node Exemple : ajouter une articulation à plusieurs notes +@subsection Exemple : ajouter une articulation à plusieurs notes +@translationof Adding articulation to notes (example) + +@untranslated + + +@node Interface de programmation des marqueurs de texte +@section Interface de programmation des marqueurs de texte +@translationof Markup programmer interface + +@untranslated + + +@menu +* Construction Scheme d'un marqueur:: +* Fonctionnement interne des marqueurs:: +* Définition d'une nouvelle commande de marqueur:: +* Définition d'une nouvelle commande de liste de marqueurs:: +@end menu + +@node Construction Scheme d'un marqueur +@subsection Construction Scheme d'un marqueur +@translationof Markup construction in Scheme + +@untranslated + + +@node Fonctionnement interne des marqueurs +@subsection Fonctionnement interne des marqueurs +@translationof How markups work internally + +@untranslated + + +@node Définition d'une nouvelle commande de marqueur +@subsection Définition d'une nouvelle commande de marqueur +@translationof New markup command definition + +@untranslated + + +@node Définition d'une nouvelle commande de liste de marqueurs +@subsection Définition d'une nouvelle commande de liste de marqueurs +@translationof New markup list command definition + +@untranslated + + +@node Contextes pour programmeurs +@section Contextes pour programmeurs +@translationof Contexts for programmers + +@untranslated + + +@menu +* Évaluation d'un contexte:: +* Application d'une fonction à tous les objets de mise en forme:: +@end menu + +@node Évaluation d'un contexte +@subsection Évaluation d'un contexte +@translationof Context evaluation + +@untranslated + + +@node Application d'une fonction à tous les objets de mise en forme +@subsection Application d'une fonction à tous les objets de mise en forme +@translationof Running a function on all layout objects + +@untranslated + + +@node Utilisation de procédures Scheme en tant que propriétés +@section Utilisation de procédures Scheme en tant que propriétés +@translationof Scheme procedures as properties + +@untranslated + + +@menu +* Utilisation de code Scheme au lieu de \"tweak\":: +* Retouches complexes:: +@end menu + +@node Utilisation de code Scheme au lieu de \"tweak\" +@section Utilisation de code Scheme au lieu de @code{\tweak} +@translationof Using Scheme code instead of tweak + +L'inconvénient principal de la commande @code{\tweak} est la rigidité de +sa syntaxe. Par exemple, le code suivant produit une erreur. + +@example +F = \tweak #'font-size #-3 -\flageolet + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +En d'autres termes, @code{\tweak} ne se comporte pas comme une +articulation@tie{}: il ne peut notamment pas être accolé avec les +symboles @samp{^} ou @samp{_}. + +C'est en se servant du langage Scheme que l'on peut résoudre ce +problème. Dans cet exemple, on a recours aux méthodes décrites dans +@ref{Exemple : ajouter une articulation à plusieurs notes}, en +particulier quant à l'emploi de @code{\displayMusic}. + +@example +F = #(let ((m (make-music 'ArticulationEvent + 'articulation-type "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -3 + (ly:music-property m 'tweaks))) + m) + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +Ici les propriétés @code{tweak} de l'objet flageolet nommé +@samp{m} (créé au moyen de @code{make-music}) sont extraites par +@code{ly:music-property}, une nouvelle valeur de la taille de fonte +est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme +@code{acons}), et le résultat de cette opération est renvoyé par +@code{set!}. Le dernier élément, dans ce bloc @code{let}, est la valeur +finale de @samp{m} lui-même. + + +@node Retouches complexes +@section Retouches complexes +@translationof Difficult tweaks + +Certains réglages sont plus délicats que d'autres. + +@itemize @bullet + + +@item +L'un d'entre eux est l'apparence des objets dits @qq{spanner}, qui +s'étendent horizontalement, tels que les liaisons. Si, en principe, un +seul de ces objets est créé à la fois et peut donc être modifié de façon +habituelle, lorsque ces objets doivent enjamber un changement de ligne, +ils sont dupliqués au début du ou des systèmes suivants. Comme ces +objets sont des clones de l'objet d'origine, ils en héritent toutes les +propriétés, y compris les éventuelles commandes @code{\override}. + + +En d'autres termes, une commande @code{\override} affecte toujours les +deux extrémités d'un objet @q{spanner}. Pour ne modifier que la partie +précédant ou suivant le changement de ligne, il faut intervenir +directement dans le processus de mise en page. +La fonction de rappel @code{after-line-breaking} contient toute +l'opération Scheme effectuée lorsque les sauts de lignes ont été +déterminés, et que des objets graphiques ont été divisés sur des +systèmes différents. + +Dans l'exemple suivant, on définit une nouvelle opération nommée +@code{my-callback}. Cette opération + +@itemize @bullet +@item +détermine si l'objet a été divisé à l'occasion d'un changement de ligne +@item +si oui, recherche les différents morceaux de l'objet +@item +vérifie si l'objet considéré est bien la deuxième moitié d'un objet +divisé +@item +si oui, applique un espacement supplémentaire (@code{extra-offset}). +@end itemize + +On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue), +de façon à ce que le deuxième morceau d'une liaison divisée soit +rehaussé. + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right] +#(define (my-callback grob) + (let* ( + ; l'objet a-t-il été divisé ? + (orig (ly:grob-original grob)) + + ; si oui, rechercher les morceaux frères (siblings) + (siblings (if (ly:grob? orig) + (ly:spanner-broken-into orig) '() ))) + + (if (and (>= (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) + +\relative c'' { + \override Tie #'after-line-breaking = + #my-callback + c1 ~ \break c2 ~ c +} +@end lilypond + +@noindent +Lorsque cette astuce va être appliquée, notre nouvelle fonction de +rappel @code{after-line-breaking} devra également appeler celle +d'origine (@code{after-line-breaking}), si elle existe. +Ainsi, pour l'utiliser dans le cas d'un crescendo (objet +@code{Hairpin}), il faudra appeler également +@code{ly:spanner::kill-zero-spanned-time}. + + +@item Pour des raisons d'ordre technique, certains objets ne peuvent +être modifiés par @code{\override}. Parmi ceux-là, les objets +@code{NonMusicalPaperColumn} et @code{PaperColumn}. La commande +@code{\overrideProperty} sert à les modifier, de façon similaire à +@code{\once \override}, mais avec une syntaxe différente@tie{}: + +@example +\overrideProperty +#"Score.NonMusicalPaperColumn" % Nom de l'objet +#'line-break-system-details % Nom de la propriété +#'((next-padding . 20)) % valeur +@end example + +Notez cependant que la commande @code{\override} peut tout de même être +appliquée à @code{NonMusicalPaperColumn} et @code{PaperColumn} dans un +bloc @code{\context}. + +@end itemize diff --git a/Documentation/fr/included/GNUmakefile b/Documentation/fr/included/GNUmakefile new file mode 100644 index 0000000000..afe7a4d738 --- /dev/null +++ b/Documentation/fr/included/GNUmakefile @@ -0,0 +1,10 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation + +EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) +EXTRA_DIST_FILES+=$(call src-wildcard,*.ily) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itely) + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/included/generating-output.itexi b/Documentation/fr/included/generating-output.itexi new file mode 100644 index 0000000000..04a34169db --- /dev/null +++ b/Documentation/fr/included/generating-output.itexi @@ -0,0 +1,236 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@c This file is part of web/download.itexi and +@c learning/tutorial.itely +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 This is about "compiling" a lilypond file +@c (Learning 1 Tutorial), **not** compiling the +@c source code. + +@macro lilypadOSX +@warning{Les instructions qui suivent concernent ceux qui utilisent +le lanceur LilyPond. Si vous utilisez l'un des programmes mentionnés +au chapitre @rweb{Facilités d'édition}, référez-vous à leur +documentation respective en cas de problème.} + + +@subsubheading Étape 1. Création d'un fichier @file{.ly} + +Lorsque vous faites un double clic sur @command{LilyPond.app}, un +fichier exemple s'ouvre. + +@sourceimage{Learning_Macos_welcome,,,} + +Dans le menu, en haut et à gauche de la fenêtre, sélectionnez +@w{@code{Fichier > Enregistrer}}. + +@sourceimage{Learning_Macos_Save_menu,,,} + +Attribuez un nom à votre fichier, par exemple @file{test.ly}. + +@sourceimage{Learning_Macos_Save_file_with_name,,,} + + +@subsubheading Étape 2. Compilation (avec LilyPad) + +Dans le menu, sélectionnez +@w{@code{Compiler > Typeset}}. + +@sourceimage{Learning_Macos_Typeset_menu,,,} + +Une nouvelle fenêtre s'ouvre dans laquelle s'affiche le journal de +compilation du fichier que vous venez de sauvegarder. + +@sourceimage{Learning_Macos_Compiling_log,,,} + + +@subsubheading Étape 3. Visualisation du résultat + +La compilation s'achève par la création d'un fichier PDF portant le même +nom que le fichier source@tie{}; ce nouveau fichier sera automatiquement +ouvert par votre lecteur PDF par défaut et affiché à l'écran. + +@sourceimage{Learning_Macos_pdf_output,,,} + + +@subsubheading Autres commandes + +Pour créer de nouveaux fichiers pour LilyPond, sélectionnez +@w{@code{Fichier > Nouveau}} + +@sourceimage{Learning_Macos_New_menu,,,} + +ou @w{@code{Fichier > Ouvrir}} pour reprendre un fichier précédemment +enregistré. + +@sourceimage{Learning_Macos_Open_menu,,,} + +Pensez à toujours enregistrer votre travail avant de lancer l'option +@w{@code{Compile > Tyepset}} du menu. Si le PDF n'apparaît pas, +vérifiez que la fenêtre @qq{log} ne comporte pas d'erreur. + +Si vous n'utilisez pas le lecteur de PDF par défaut de Mac@tie{}OS et +qu'un fichier résultant d'une précédente compilation est encore ouvert +dans votre lecteur, la régénération de ce PDF peut bloquer tant que vous +ne fermez pas le fichier ouvert. + + +@end macro + + +@macro lilypadWindows +@warning{Les instructions qui suivent partent du principe que vous +utilisez l'éditeur LilyPad fourni. Si vous utilisez l'un des programmes +répertoriés dans @rweb{Facilités d'édition}, consultez sa documentation +en cas de compilation infructueuse.} + + +@subsubheading Étape 1. Création d'un fichier @file{.ly} + +Double-cliquez sur l'icone LilyPond qui se trouve sur le bureau. +S'ouvre alors un fichier d'exemple. + +@sourceimage{Learning_Win7_Welcome_File_Whole,,,} + +Dans le menu, sélectionnez @w{@code{Fichier > Enregistrer sous}}. Ne +prenez pas l'option @w{@code{Fichier > Enregistrer}} pour ce fichier +exemple@tie{}: LilyPond attend un nom de fichier valide. + + +@sourceimage{Learning_Win7_Save_Menu,,,} + +Affectez un nom à votre fichier, comme par exemple @file{test.ly}. + +@sourceimage{Learning_Win7_Save_File_With_Name,,,} + + +@subsubheading Étape 2a. Compilation par glisser-déposer + +Selon votre préférence, vous pouvez compiler votre fichier +en le faisant glisser puis en le déposant sur l'icone LilyPond + +@sourceimage{Learning_Win7_Open_Dragndrop,,,} + +ou en ouvrant le menu contextuel par un clic-droit, puis en prenant +l'option @w{@code{Ouvrir avec > LilyPond}}. + +@sourceimage{Learning_Win7_Open_Context_Menu,,,} + + +@subsubheading Étape 2b. Compilation par double-clic + +Vous pouvez aussi faire un double-clic sur le fichier @file{test.ly}. + + +@subsubheading Étape 3. Visualisation du résultat + +Au cours de la compilation du fichier @file{test.ly}, une fenêtre +d'interpréteur de commande s'ouvre et se referme. Trois fichiers +complémentaires seront générés pendant ce temps là. + +@sourceimage{Learning_Win7_All_Files_Created,,,} + +Le fichier PDF contient la gravure de votre fichier @file{test.ly}. + +@sourceimage{Learning_Win7_Pdf_Output,,,} + + +@subsubheading Autres commandes + +Pour créer un nouveau fichier, sélectionnez @w{@code{Fichier > Nouveau}} +à parti de n'importe quel fichier déjà existant + +@sourceimage{Learning_Win7_New_Menu,,,} + +@noindent +ou bien @w{@code{Fichier > Ouvrir}} pour reprendre un fichier sauvegardé. + +@sourceimage{Learning_Win7_Open_Menu,,,} + +Pensez à toujours enregistrer votre travail avant de compiler votre +fichier. Si LilyPond ne crée pas de PDF, consultez le fichier de +journalisation -- généré au fil du processus de compilation -- et +vérifiez qu'il ne comporte pas d'erreur. + +@sourceimage{Learning_Win7_Log_File,,,} + +Ce fichier journal est remplacé à chaque compilation de votre fichier +LilyPond. + +Le fichier PS est utilisé en interne par LilyPond pour créer le PDF. Il +sera écrasé à chaque fois que vous relancerez la compilation de votre +fichier. + +Pensez à fermer le fichier dans votre lecteur de PDF à chaque fois que +vous relancez la compilation, afin d'être sûr que celle-ci arrive à son +terme. + + +@end macro + + +@c not lilypad at all, but I ran out of names. :( +@macro lilypadCommandLine +@warning{Les instructions qui suivent supposent que vous êtes familier +de la ligne de commande. Si vous utilisez l'un des programmes +répertoriés dans @rweb{Facilités d'édition}, consultez sa documentation +en cas de compilation infructueuse.} + + +@subsubheading Étape 1. Création d'un fichier @file{.ly} + +Créez un fichier texte du nom de @file{test.ly} et saisissez@tie{}: + +@c double \\ required because this is inside a macro! +@example +\\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + + +@subsubheading Étape 2. Compilation en ligne de commande + +Pour traiter le fichier @file{test.ly}, tapez ce qui suit à l'invite de +commande@tie{}: + +@example +lilypond test.ly +@end example + +@noindent +Vous verrez alors quelque chose qui ressemblera à@tie{}: + +@example +GNU LilyPond @w{@version{}} +Traitement de « test.ly » +Analyse... +Interprétation en cours de la musique... +Pré-traitement des éléments graphiques... +Détermination du nombre optimal de pages... +Répartition de la musique sur une page... +Dessin des systèmes... +Sortie mise en page vers « test.ps »... +Conversion à « ./test.pdf »... +@end example + +@c DIV specific +@noindent +Suivant votre installation, ces messages peuvent être traduits ou +non. +@c END DIV + +@subsubheading Étape 3. Visualisation du résultat + +Vous pouvez à présent visualiser ou imprimer @file{test.pdf}. + +@end macro + + diff --git a/Documentation/fr/included/helpus.itexi b/Documentation/fr/included/helpus.itexi new file mode 100644 index 0000000000..b9cc0d5b95 --- /dev/null +++ b/Documentation/fr/included/helpus.itexi @@ -0,0 +1,172 @@ +@c -*- coding: utf-8; mode: texinfo; documentlangage: fr -*- +@c This file is part of web/community.itexi and +@c contributor/introduction.itely + +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 + +@macro helpusNeed +@subheading Nous avons besoin de vous ! + +L'équipe de développement de LilyPond est fort réduite@tie{}; nous +souhaitons vraiment y accueillir davantage de contributeurs. +Pourquoi pas vous@tie{}? Apportez votre contribution au développement +de LilyPond@tie{}! + +Prendre en charge même des tâches simples peut avoir un impact +conséquent@tie{}: cela permet aux développeurs plus expérimentés de +consacrer leur temps à des travaux plus ardus. + +@end macro + + +@macro helpusTasks +@subheading Tâches simples + +@itemize +@item +La liste de diffusion@tie{}: répondre aux questions des autres +utilisateurs. + +@item +Les rapports de bogue@tie{}: aider les utilisateurs à rédiger +correctement et traduire leurs @rwebnamed{Signalement de bogue, +signalements de bogue}, puis aider l'équipe des correcteurs à traiter +ces @rcontribnamed{Issues,problèmes}. + +@item +Documentation@tie{}: il est possible de proposer des modifications, +en suivant les recommandations s'appliquant aux +@rcontribnamed{Documentation suggestions,suggestions en matière de +documentation}. + +@item +LilyPond Snippet Repository (LSR): ajouter ou corriger des extraits. Voir +@rcontribnamed{Adding and editing snippets,Ajout et édition d'extraits}. + +@item +Discussions, relectures et tests@tie{}: les développeurs demandent +régulièrement des retours sur des ajouts à la documentation, d'éventuels +changements de syntaxe ou de nouvelles fonctionnalités à tester. +Vous aussi, prenez part à ces discussions@tie{}! + +@end itemize + + +@subheading Tâches intermédiaires + +@warning{Ces travaux demandent en général de disposer des +fichiers source du logiciel et de la documentation, mais +n'exigent pas un environnement de développement complet. Voir +@rcontribnamed{Starting with Git,Débuter avec Git}.} + +@itemize +@item +Documentation@tie{}: voir +@rcontribnamed{Documentation work,Travailler sur la documentation} et +@rcontribnamed{Building documentation without compiling,Générer la documentation sans compiler}. + +@item +Site web@tie{}: le site web est compilé par le même code source +que le reste de la documentation. Reportez-vous aux +informations sur la documentation, ainsi qu'au chapitre +@rcontribnamed{Website work,Travailler sur le site internet}. + +@item +Traductions@tie{}: voir +@rcontribnamed{Translating the documentation,Traduire la documentation} et +@rcontribnamed{Translating the website,Traduire le site internet}. + +@end itemize + + +@subheading Tâches ardues + +@warning{Ces travaux demandent en général de disposer du code +source et d'être en mesure de compiler LilyPond. Voir +@rcontribnamed{Starting with Git,Débuter avec Git} et +@rcontribnamed{Compiling LilyPond,Compiler LilyPond}. +@*@* +Nous engageons les nouveaux contributeurs utilisant Windows à utiliser +une machine virtuelle pour faire tourner @emph{lilydev}. Voir +@rcontrib{Lilydev}. +} + +@itemize +@item +Corriger des bogues et ajouter de nouvelles fonctionnalités@tie{}: +la voie recommandée est de se joindre aux @qq{Frogs}, et de lire +@rcontrib{Programming work}. + +@end itemize + +@end macro + + +@macro helpusProjects +@subheading Projets + +@subsubheading Frogs + +Site et liste de diffusion@tie{}: + +@example +@uref{http://frogs.lilynet.net} +@end example + +Les @qq{Frogs} sont de simples utilisateurs de LilyPond qui ont +décidé de s'impliquer dans le développement de leur logiciel préféré. +Ils corrigent des bogues, implémentent de nouvelles fonctionnalités ou +documentent le code source. Il y a beaucoup à faire, mais le plus +important est que chacun peut ainsi en apprendre beaucoup +sur LilyPond, les logiciels libres, la programmation@dots{} et +s'amuser@tie{}! L'aventure vous tente@tie{}? Alors une seule chose à +faire@tie{}: @emph{Rejoignez les Frogs@tie{}!} + + + +@subsubheading Projet GLISS de stabilisation de la syntaxe + +Page web@tie{}: +@rcontrib{Grand LilyPond Input Syntax Standardization (GLISS)} + +Le @qq{GLISS} (@emph{Grand LilyPond Input Syntax Standardization}) +est destiné à stabiliser la syntaxe (en-dehors des ajustements) +en vue de la version 3.0 de LilyPond. Les utilisateurs adoptant +cette version bénéficieront, pour les partitions dépourvues +d'ajustements, d'une syntaxe stable à long terme. + +Nous prendrons le temps de discuter la spécification de ce +format de saisie définitif. + + +@warning{Le GLISS commencera peu après la sortie de la version 2.14.} + + +@subsubheading Projet GOP d'organisation de LilyPond + +Page web@tie{}: @rcontrib{Grand Organization Project (GOP)} + +Le @qq{GOP} (@emph{Grand Organization Project}) est destiné à +recruter de nouveaux contributeurs. Nous avons désespérément +besoin de mieux répartir les tâches de développement, y compris +les plus simples, qui ne demandent ni de programmer ni de se +plonger dans le code source@tie{}! Nous devons aussi documenter +le savoir des développeurs actuels afin qu'il ne se perde pas. + +Comme son nom ne l'indique pas, le GOP n'a pas pour propos +d'ajouter de nouvelles fonctionnalités considérables ni de +repenser complètement quoi que ce soit. L'objectif est plutôt de +nous donner une base bien plus stable pour pouvoir entreprendre +de grands travaux à l'avenir. + +@warning{Le GOP commencera peu après la sortie de la version 2.14.} + +@end macro + + diff --git a/Documentation/fr/index.html.in b/Documentation/fr/index.html.in deleted file mode 100644 index da2d55073c..0000000000 --- a/Documentation/fr/index.html.in +++ /dev/null @@ -1,142 +0,0 @@ - - - - Documentation de LilyPond @TOPLEVEL_VERSION@ - - - - - - - -
-

Documentation de LilyPond

-
- -
-

- Version @TOPLEVEL_VERSION@ -
- @DATE@ -

-
- - - - - - - - - - - - - - - - - - - - - - - -

- Toute la documentation répertoriée sur cette page peut être - téléchargée : - téléchargement - de l'archive compressée. -

-

- Vous pouvez trouver, au bas de chaque page de cette - documentation, des liens vers les traductions disponibles. -

- - diff --git a/Documentation/fr/learning.tely b/Documentation/fr/learning.tely new file mode 100644 index 0000000000..0caa86178b --- /dev/null +++ b/Documentation/fr/learning.tely @@ -0,0 +1,88 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 +@documentencoding UTF-8 +@setfilename lilypond-learning.info +@settitle GNU LilyPond -- Manuel d'initiation +@documentlanguage fr + +@afourpaper + +@macro manualIntro +Ce document constitue le manuel d'initiation à GNU LilyPond +@version{}. +@end macro + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 par les auteurs. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Learning Manual of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage French +@end ignore + +@c Translators: John Mandereau, Jean-Charles Malahieude +@c Translation status: post-GDP + +@c urg, makeinfo 4.9.91 French translation is funky +@iftex +@frenchspacing on +@end iftex + +@lilyTitlePage{Manuel d'initiation} + +@c TOC -- non-tex +@ifnottex + +@menu +* Tutoriel:: introduction pratique à la gravure avec LilyPond. +* Bases de notation musicale:: débuter avec la notation musicale courante. +* Concepts fondamentaux:: concepts de base de LilyPond. +* Retouche de partition:: introduction aux retouches de mise en forme. + +Annexes + +* Modèles:: modèles prêts à l'emploi. +* GNU Free Documentation License:: licence de ce document. +* Index de LilyPond:: +@end menu + +@docMain +@end ifnottex + +@contents + +@allowcodebreaks false + +@c INCLUDES + +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely + +@include learning/templates.itely +@include fdl.itexi + +@node Index de LilyPond +@appendix Index de LilyPond +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/fr/learning/GNUmakefile b/Documentation/fr/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/fr/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/learning/common-notation.itely b/Documentation/fr/learning/common-notation.itely new file mode 100644 index 0000000000..6b589f3ebc --- /dev/null +++ b/Documentation/fr/learning/common-notation.itely @@ -0,0 +1,1523 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 + +@ignore +Tutorial guidelines: (different from policy.txt!) +- unless you have a really good reason, use either + @lilypond[verbatim,quote] + or + @lilypond[verbatim,quote,relative=2] + + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "es". I know it's not + correct Dutch naming, but let's not confuse people with this + until we get to the Basic notation chapter. + +- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant + portions of the tutorial. + +@end ignore + +@c \version "2.14.0" + +@c Translators: Nicolas Grandclaude, Ludovic Sardain, Gauvain Pocentek +@c Translation checkers: Jean-Charles Malahieude, Valentin Villenave, John Mandereau +@c Translation status: post-GDP + +@node Bases de notation musicale +@chapter Bases de notation musicale +@translationof Common notation + +Suite au premier contact avec le @ref{Tutoriel}, voyons comment +créer de belles partitions utilisant une notation musicale courante + +@menu +* Notation sur une seule portée:: +* Notes simultanées:: +* Chansons:: +* Dernières précisions:: +@end menu + +@node Notation sur une seule portée +@section Notation sur une seule portée +@translationof Single staff notation + +Cette section présente la notation courante dont on a besoin pour +écrire une voix sur une portée. + +@menu +* Contrôle de mesure:: +* Altérations et armure:: +* Liaisons:: +* Articulations et nuances:: +* Ajout de texte:: +* Barres de ligature automatiques et manuelles:: +* Commandes rythmiques avancées:: +@end menu + + +@node Contrôle de mesure +@subsection Contrôle de mesure +@translationof Bar checks + + +Les contrôles de barre de mesure -- @emph{bar checks} en anglais -- ne +sont à priori pas strictement nécessaires. Ils permettent cependant +d'indiquer directement dans le code saisi -- à l'aide d'une barre +verticale @code{|} -- l'emplacement des barres de mesure. Grâce à ces +contrôleurs, LilyPond sera capable de déterminer si la durée que vous +avez attribuée aux notes correspondent bien à longueur de la mesure qui +les contient. Les contrôles de mesure apportent aussi clarté et +organisation à votre code. + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +Manuel de notation : +@ruser{Vérification des limites et numéros de mesure}. + + +@node Altérations et armure +@subsection Altérations et armure +@translationof Accidentals and key signatures + +@warning{Si, comme nombre de nouveaux utilisateurs, ce qui suit vous +paraît déroutant, lisez cette partie jusqu'au bout, à plus forte raison +si vous n'avez jamais fait de solfège@tie{}!} + +@subheading Altérations + +@cindex altérations +@cindex dièse +@cindex double dièse +@cindex dièse, double +@cindex bémol +@cindex double bémol +@cindex bémol, double + +@funindex es +@funindex is +@funindex eses +@funindex isis + +Glossaire musicologique : +@rglosnamed{sharp,dièse}, @rglosnamed{flat,bémol}, +@rglosnamed{double sharp,double dièse}, +@rglosnamed{double flat,double bémol}, @rglosnamed{accidental,altération}. + +Dans la notation par défaut, on obtient un @notation{dièse} en +ajoutant @code{is} au nom de la note, et un @notation{bémol} en +ajoutant @code{es}. Comme vous pouvez vous y attendre, un double +dièse ou double bémol s'obtiennent en ajoutant @code{isis} ou +@code{eses}. Cette syntaxe est dérivée de la convention de +dénomination des notes dans les langues nordiques et germaniques, +comme l'allemand ou le hollandais. + +@c DIV specific +Cependant, si vous utilisez la commande +@w{@code{@w{\language@tie{}"italiano"}}} pour entrer les noms de note +français au lieu des noms hollandais, il faudra ajouter un @code{d} pour +obtenir un dièse, et un @code{b} pour un bémol. Le double dièse et le +double bémol s'obtiennent en ajoutant respectivement @code{dd} et +@code{bb}. Pour en savoir plus sur les autres langues disponibles, +consultez @ruser{Nom des notes dans d'autres langues}. +@c END DIV + +@lilypond[verbatim,quote,relative=2] +cis1 ees fisis, aeses +@end lilypond + +@subheading Armures + +@cindex armure, définition de l' +@cindex armure, altérations à l' +@cindex altérations à l'armure +@cindex majeur +@cindex mineur + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +Glossaire musicologique : +@rglosnamed{key signature,armure}, @rglosnamed{major,majeur}, +@rglosnamed{minor,mineur}. + +L'armure est déterminée par la commande @code{\key}, suivie d'une +hauteur puis de @code{\major} (majeur) ou @code{\minor} (mineur). + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 +\key c \minor +a +@end lilypond + +@smallspace + +@subheading Attention aux armures et aux hauteurs + +Glossaire musicologique : +@rglosnamed{accidental,altération}, @rglosnamed{key signature,armure}, +@rglosnamed{pitch,hauteur}, @rglosnamed{flat,bémol}, +@rglosnamed{natural,bécarre}, @rglosnamed{sharp,dièse}, +@rglos{transposition}, @rglosnamed{Pitch names,Noms de note}. + +La combinaison de l'@notation{armure} et des hauteurs de note -- y +compris les altérations -- permet à LilyPond de déterminer dans quel +cas imprimer des @notation{altérations accidentelles}. L'armure +n'affecte que les altérations @emph{imprimées}, et non les hauteurs +réelles@tie{}! Cette fonctionnalité est souvent source de confusion pour +les nouveaux utilisateurs, aussi expliquons-la en détail. + +LilyPond fait une distinction nette entre le contenu musical et la +mise en forme. L'altération d'une note -- @notation{bémol}, +@notation{bécarre} ou @notation{dièse} -- fait partie de sa hauteur, +et relève donc du contenu musical. La gravure ou non d'une altération +accidentelle -- un @emph{signe} bémol, bécarre ou dièse -- devant la +note correspondante est une question qui relève de la mise en forme. +La gravure d'une partition suit des règles, en particulier des règles +d'indication des altérations accidentelles. Les hauteurs de note, en +revanche, relèvent de ce que vous voulez entendre@tie{}; et, dans la +mesure où la musique que vous entrez est censée être celle que vous +voulez entendre, LilyPond, qui n'est chargé que de la gravure, ne les +choisira pas à votre place. + +Dans cet exemple, + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +aucune note n'a d'altération accidentelle, et pourtant vous devrez +entrer le @code{is} pour les notes @code{cis} et @code{fis}. + +Le code @code{b} ne veut pas dire @qq{Imprimez-moi un point noir sur +la troisième ligne de la portée.} Cela signifie plutôt@tie{}: @qq{Ici se +trouve une note dont la hauteur est un si naturel.} Avec une armure +de la bémol majeur, ce @code{si} est flanqué d'un bécarre +accidentel@tie{}: + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +Prenons un autre exemple@tie{}: imaginez-vous devant un piano@tie{}; dès +lors que vous voulez enfoncer l'une des touches noires, il vous faudra +@strong{ajouter} un @code{-is} ou un @code{-es} au nom de la note. + +Ajouter explicitement toutes les altérations demande un peu plus +d'effort dans la phase de saisie, mais cela facilite grandement la +@notation{transposition}. De plus, les altérations accidentelles +peuvent ainsi être imprimées suivant plusieurs conventions. Pour +connaître les différentes manières dont les altérations accidentelles +peuvent être imprimées, consultez +@ruser{Altérations accidentelles automatiques}. + + +@seealso +Manuel de notation : +@ruser{Nom des notes dans d'autres langues}, +@ruser{Altérations}, +@ruser{Altérations accidentelles automatiques}, +@ruser{Armure}. + + +@node Liaisons +@subsection Liaisons +@translationof Ties and slurs + +@cindex liaisons de prolongation +@cindex liaisons de tenue +@cindex prolongation, liaisons de +@cindex durée, liaisons de +@cindex tenue, liaisons de + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + +@subheading Liaisons de prolongation + +Glossaire musicologique : +@rglosnamed{tie,liaison de tenue}. + +Pour créer une liaison de prolongation -- parfois aussi appelée +liaison de tenue --, on ajoute un tilde @code{~} à la première note +liée. + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4 ~ c8 a8 ~ a2 | +@end lilypond + +@cindex liaisons d'articulation +@cindex articulation, liaisons d' + +@subheading Liaisons d'articulation + +@c Le terme de "slur" a deux sens en français : articulation et phrasé. +@c Je garde ici le terme "legato", tel qu'il apparaît dans le texte original, +@c car c'est celui qui me semble le plus couramment employé. +@c slur = "il zon" (articulation). jcm +@c phrasing slur = "ils ont des chapeaux ronds" (phrase). jcm + +Glossaire musicologique : +@rglosnamed{slur,liaison}, @rglosnamed{phrasing,phrasé}. + +Une liaison d'articulation ou @emph{legato} peut englober +plusieurs notes. Les notes de départ et d'arrivée sont suivies +respectivement d'un signe @code{(} et @code{)}. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@cindex liaisons de phrasé +@cindex phrasé, liaisons de +@cindex legato +@subheading Liaisons de phrasé + +De plus longues liaisons, dites de phrasé, sont délimitées par @code{\(} +et @code{\)}. Il est possible d'avoir en même temps des legatos et des +phrasés, mais pas plusieurs liaisons de phrasé ou de @emph{legato} à la +fois. + +@lilypond[verbatim,quote,relative=2] +g4\( g8( a) b( c) b4\) +@end lilypond + +@smallspace + +@cindex liaisons d'articulation et de prolongation, différences +@subheading Attention aux types de liaison + +Glossaire musicologique : +@rglos{articulation}, @rglosnamed{slur,liaison}, +@rglosnamed{tie,liaison de tenue}. + +Une liaison d'articulation ou de phrasé ressemble à une liaison de +prolongation, mais n'a pas la même signification. Alors qu'une +liaison de prolongation ne peut relier que deux notes de même hauteur, +le @emph{legato} indique une articulation de plusieurs notes, +éventuellement en grand nombre. Les liaisons de tenue peuvent être +enchâssées dans un @emph{legato} ou un phrasé. + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + + +@seealso +Manuel de notation : +@ruser{Liaisons de prolongation}, +@ruser{Liaisons d'articulation}, +@ruser{Liaisons de phrasé}. + + +@node Articulations et nuances +@subsection Articulations et nuances +@translationof Articulation and dynamics + +@subheading Articulations + +@cindex articulation +@cindex accents +@cindex staccato + +Glossaire musicologique : +@rglos{articulation}. + +Des @notation{articulations} peuvent être ajoutées à une note, au moyen +d'un tiret @code{-} suivi d'un caractère@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +@subheading Doigtés + +@cindex doigtés + +@funindex ^ +@funindex _ + +Glossaire musicologique : +@rglosnamed{fingering,doigté}. + +De même, des indications de doigté peuvent être ajoutées à une note en +utilisant un tiret (@samp{-}) et le chiffre à écrire@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4-3 e-5 b-2 a-1 +@end lilypond + +Articulations et doigtés sont habituellement placés automatiquement, +mais vous pouvez spécifier leur positionnement en utilisant @code{^} (en +haut) ou @code{_} (en bas). Vous pouvez aussi utiliser plusieurs +articulations sur la même note. Dans la plupart des cas, cependant, +il est bon de laisser LilyPond déterminer l'emplacement de +l'articulation. + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Nuances + +@cindex nuances +@cindex decrescendo +@cindex crescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Glossaire musicologique : +@rglosnamed{dynamics,nuances}, +@rglos{crescendo}, +@rglos{decrescendo}. + +On obtient un signe de @notation{nuance} en ajoutant à la note les +lettres du signe, précédées d'un anti-slash @code{\}@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + +@cindex nuances +@cindex decrescendo +@cindex crescendo + +@c Pluriel des termes musicaux italiens : +@c selon Littré, plutôt à la française (en "-os" qu'en "-i") + +@notation{Crescendos} et @notation{decrescendos} débutent avec les +commandes @code{\<} et @code{\>}. Ils se terminent soit par une +nuance d'arrivée, par exemple @code{\f}, soit par la commande +@code{\!}@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +Manuel de notation : +@ruser{Articulations et ornements}, +@ruser{Doigtés}, +@ruser{Nuances}. + + +@node Ajout de texte +@subsection Ajout de texte +@translationof Adding text + +@cindex texte, ajout de +@cindex ajout de texte +@cindex étiquette + +@funindex \markup +@funindex markup + +On peut ajouter du texte à une partition : + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +Pour mettre en forme du texte, on utilise la commande +@code{\markup}@tie{}: + +@lilypond[verbatim,quote,relative=2] +c2^\markup{ \bold espr} +a2_\markup{ + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Manuel de notation : +@ruser{Ajout de texte}. + + +@node Barres de ligature automatiques et manuelles +@subsection Barres de ligature automatiques et manuelles +@translationof Automatic and manual beams + +@cindex ligature +@cindex barre de ligature +@cindex ligatures automatiques +@cindex ligatures manuelles +@cindex ligatures explicites + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Glossaire musicologique : +@rglosnamed{beam,ligature}. + +Toutes les barres de ligature sont dessinées automatiquement@tie{}: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@end lilypond + +@noindent +Lorsqu'on n'aime pas la manière dont les notes sont automatiquement +groupées, il est possible de les ligaturer manuellement, en marquant la +première note à attacher d'un crochet ouvrant @code{[} et la dernière +d'un crochet fermant @code{]}. + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +Pour désactiver les barres de ligature automatiques pour des passages +entiers, utilisez la commande @code{\autoBeamOff}, et utilisez +@code{\autoBeamOn} pour les réactiver. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +Manuel de notation : +@ruser{Barres de ligature automatiques}, +@ruser{Barres de ligature manuelles}. + + +@node Commandes rythmiques avancées +@subsection Commandes rythmiques avancées +@translationof Advanced rhythmic commands + +@subheading Mesure incomplète + +@cindex levée +@cindex anacrouse +@cindex mesure incomplète + +@funindex \partial +@funindex partial + +Glossaire musicologique : @rglosnamed{anacrusis,anacrouse}. + +On crée une levée (ou anacrouse) avec la commande @code{\partial}, +suivie d'une durée@tie{}: @code{\partial@tie{}4} produit une levée d'une +noire et @code{\partial@tie{}8} d'une croche. + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + +@subheading Nolets + +@cindex nolets +@cindex triolets + +@funindex \times +@funindex times + +Glossaire musicologique : @rglosnamed{note value,valeur d'une note}, +@rglosnamed{triplet,triolet}. + +Les @notation{nolets} sont créés avec la commande @code{\times}, qui +prend deux arguments@tie{}: une fraction et une expression musicale. La +durée des notes de l'expression musicale est multipliée par la +fraction. Par exemple les notes d'un @notation{triolet} durent les +deux tiers de la durée de leur notation réelle, cette fraction est +donc de 2/3 pour les triolets@tie{}: + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Notes d'ornement + +@cindex notes d'ornement +@cindex ornementation +@cindex appoggiature +@cindex acciaccature + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Glossaire musicologique : +@rglosnamed{grace notes,ornements}, @rglosnamed{acciaccatura,acciacature}, +@rglosnamed{appoggiatura,appogiature}. + +Des @notation{notes d'ornement} s'obtiennent en appliquant la commande +@code{\grace}, @code{\appoggiatura} ou @code{\acciaccatura} à une +expression musicale@tie{}: + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +Manuel de notation : +@ruser{Notes d'ornement}, +@ruser{Nolets}, +@ruser{Levées}. + + +@node Notes simultanées +@section Notes simultanées +@translationof Multiple notes at once + +Cette section traite de situations où l'on a plus d'une note à la +fois@tie{}: plusieurs instruments, plusieurs voix ou portées pour un +même instrument (le piano, par exemple), et les accords. + +En théorie musicale, la polyphonie désigne une musique constituée de +plusieurs voix@tie{}; dans LilyPond, ce terme désigne les situations où +il y a plus d'une voix sur une même portée. + +@menu +* Les expressions musicales en clair:: +* Plusieurs portées:: +* Regroupements de portées:: +* Combinaison de notes en accords:: +* Polyphonie sur une portée:: +@end menu + + +@node Les expressions musicales en clair +@subsection Les expressions musicales en clair +@translationof Music expressions explained + +@cindex expression musicale + +Dans les fichiers source LilyPond, la musique est représentée par ce +qu'on appelle des @emph{expressions musicales}. En soi, une seule note +peut constituer une expression musicale@tie{}: + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +Mettre un groupe de notes entre accolades crée une nouvelle expression +musicale, appelée @emph{expression musicale composée}. En voici un +exemple avec deux notes@tie{}: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +La mise entre accolades d'une séquence d'expressions musicales -- des +notes par exemple -- signifie qu'elles doivent être jouées +successivement, les unes après les autres. Le résultat est une +expression, qui peut elle-même être regroupée séquentiellement avec +d'autres expressions. Ici, l'expression de l'exemple précédent est +combinée à deux notes@tie{}: + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f g } +@end lilypond + +@subheading Analogie avec les expressions mathématiques + +@cindex expression + +Ce mécanisme est similaire aux formules mathématiques@tie{}: une grosse +formule est créée en assemblant plusieurs petites formules. De telles +formules sont appelées expressions, elles ont une définition +récursive, de telle sorte que vous pouvez fabriquer des expressions +arbitrairement longues et complexes. Par exemple@tie{}: + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +Ceci est une suite d'expressions, où chacune est contenue dans la +suivante. Les expressions les plus simples sont les nombres, et de +plus grandes expressions sont produites en combinant des expressions +avec des opérateurs -- comme @code{+}, @code{*} et @code{/} -- et +des parenthèses. Tout comme les expressions mathématiques, les +expressions musicales peuvent être imbriquées avec une profondeur +arbitraire, ce qui est nécessaire pour des partitions complexes comme +de la musique polyphonique. + + +@subheading Expressions musicales simultanées -- plusieurs portées + +@cindex portées multiples +@cindex polyphonie +@cindex combinaison d'expressions en parallèle +@cindex parallèles, expressions +@cindex expressions parallèles +@cindex hauteur relative et musique simultanée +@cindex musique simultanée et hauteur relative +@cindex hauteur relative et expressions parallèles +@cindex expressions parallèles et hauteur relative + +@funindex << +@funindex >> +@funindex << ... >> + +Glossaire musicologique : @rglosnamed{polyphony,polyphonie}. + +Cette technique est utile pour de la musique @notation{polyphonique}. +Pour entrer une musique avec plusieurs voix ou plusieurs portées, nous +pouvons aussi combiner @emph{en parallèle} les expressions@tie{}: deux +voix qui doivent être jouées en même temps, sont entrées comme une +combinaison simultanée de deux expressions. Une expression musicale +@qq{simultanée} est formée en entourant les expressions entre @code{<<} +et @code{>>}. Dans l'exemple suivant, trois expressions (contenant +chacune deux notes distinctes) sont combinées simultanément. + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +Notez que nous avons ici indenté chaque niveau du fichier d'entrée +avec un nombre d'espaces différent. LilyPond se moque -- ou presque +-- de l'espace qu'il peut y avoir ou non au début d'une ligne, mais +un code bien indenté est bien plus lisible par des humains. + +@warning{La hauteur de chaque note saisie est relative à la précédente, +mais pas au @code{c''} de la commande @code{@bs{}relative} de départ.} + + +@subheading Expressions musicales simultanées -- une seule portée + +Pour déterminer le nombre de portées, LilyPond regarde le début +de la première expression. Si c'est une seule note, une seule portée +est produite@tie{}; si c'est une expression simultanée, plusieurs +portées sont produites. Nous avons dans l'exemple ci-dessous une +expression complexe@tie{}; dans la mesure où elle débute par une note +seule, elle sera produite sur une unique portée. + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e2 f } { c <> } >> | +} +@end lilypond + + +@node Plusieurs portées +@subsection Plusieurs portées +@translationof Multiple staves + +@cindex multiples portées +@cindex portées multiples +@cindex contexte +@cindex contexte de notation +@cindex notation, contexte + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +Comme nous l'avons vu dans @ref{Les expressions musicales en clair}, un +fichier d'entrée LilyPond est fait d'expressions musicales. Si la +partition commence par plusieurs expressions simultanées, LilyPond +créera plusieurs portées. Cependant, il est plus facile de prévoir le +nombre de portées si on les crée explicitement, ce que nous allons +voir. + +Pour créer plus d'une portée, on ajoute @code{\new Staff} au début de +chaque partie de la musique constituant une portée. Ces éléments +@code{Staff} sont ensuite combinés en parallèle avec @code{<<} et +@code{>>}, comme ci-dessous. + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + +La commande @code{\new} introduit un @qq{contexte de notation}. Un +contexte de notation est un environnement dans lequel les événements +musicaux -- comme les notes ou les commandes @code{\clef} -- sont +interprétés. Pour des pièces simples, ces contextes sont créés +automatiquement. Pour des pièces plus complexes, il est préférable de +spécifier explicitement les contextes, afin de s'assurer que chaque +fragment aura sa propre portée. + +Il existe différents types de contextes. Les contextes @code{Score} +(partition), @code{Staff} (portée) et @code{Voice} (voix) gèrent la +notation de la mélodie, alors que @code{Lyrics} gère les paroles et +@code{ChordNames} imprime des noms d'accord. + +En terme de syntaxe, ajouter @code{\new} devant une expression +musicale crée une plus grande expression musicale. En reprenant la +comparaison précédente, cela ressemble au signe @emph{moins} en +mathématiques. La formule @math{(4+5)} est une expression, donc +@math{-(4+5)} constitue une plus grande expression. + +Les chiffres de métrique indiqués sur une portée affectent toutes les +autres portées. En revanche l'armure d'une portée n'affecte @emph{pas} +les autres portées. Ces caractéristiques par défaut se justifient par +le fait que l'utilisation d'instruments transpositeurs est bien plus +fréquente que la musique polyrythmique. + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + +@node Regroupements de portées +@subsection Regroupements de portées +@translationof Staff groups + +@cindex portée double +@cindex portée pour piano +@cindex piano, portée pour +@cindex clavier, portée pour +@cindex chœur, système pour +@cindex système pour chœur +@cindex système +@cindex portées, regroupement de +@cindex regroupement de portées + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Glossaire musicologique : +@rglosnamed{brace,accolade}, +@rglosnamed{staff,portée}, +@rglosnamed{system,système}. + +La musique pour piano s'écrit sur deux portées reliées par une +@notation{accolade}. La gravure de ce type de portée est semblable à +l'exemple de musique polyphonique de @ref{Plusieurs portées}, mais +maintenant cette expression entière est interprétée dans un contexte +@code{PianoStaff}@tie{}: + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> +@end example + +Voici un bref exemple : + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef "bass" c,,4 c' | e c | } + >> +} +@end lilypond + +Vous pouvez générer d'autres formes de regroupement, avec +@w{@code{\new GrandStaff}} pour une partition d'orchestre, ou +@w{@code{\new ChoirStaff}} qui sied particulièrement aux partitions +chorales. Chacun de ces regroupements constitue un contexte à part +entière, avec ses particularités, tant au niveau du signe qui regroupe +les portées au sein d'un @notation{système} qu'au niveau de l'étendue +des barres de mesure. + + +@seealso +Manuel de notation : +@ruser{Instruments utilisant des portées multiples}, +@ruser{Gravure des portées}. + + +@node Combinaison de notes en accords +@subsection Combinaison de notes en accords +@translationof Combining notes into chords + +@cindex accords, notes simultanées +@cindex accords et durée + +@funindex < +@funindex > +@funindex < ... > + +Glossaire musicologique : @rglosnamed{chord,accord}. + +Nous avons vu précédemment comment combiner des notes simultanément, +en les encadrant par des chevrons doubles @code{<<} et @code{>>}. Pour +produire des accords simples, c'est-à-dire une superposition de notes +de même durée, on encadre les hauteurs de notes par des chevrons simples +@code{<} et @code{>}, et on écrit la durée juste après. + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +Beaucoup d'éléments de notation que l'on peut attacher à une note +simple, comme une liaison, un crochet indiquant un début ou une fin de +lien, un signe d'articulation, peuvent être également attachés à un +accord@tie{}: il faut ajouter ces indications après les hauteurs et la +durée, donc @emph{à l'extérieur} des chevrons. + +@lilypond[verbatim,quote,relative=2] +r4 ~ 2 | +8[ ] \>[ ]\! | +r4 8.\p 16( 4-. ) | +@end lilypond + +@seealso +Manuel de notation : +@ruser{Notes en accords}. + + +@node Polyphonie sur une portée +@subsection Polyphonie sur une portée +@translationof Single staff polyphony + +@cindex polyphonie +@cindex voix multiples sur une portée +@cindex multiples voix sur une portée +@cindex silence invisible +@cindex invisible, silence + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +Bien que LilyPond gère la musique polyphonique sans difficulté, cela +fait appel à des concepts que nous n'avons pas encore abordés. C'est la +raison pour laquelle nous ne nous étendrons pas tout de suite sur ce +sujet et préférons vous inciter à consulter les chapitres dédiés à +l'étude de ces concepts. + +@seealso +Manuel d'initiation : +@ref{Les voix contiennent la musique}. + +Manuel de notation : +@ruser{Notes simultanées}. + + +@node Chansons +@section Chansons +@translationof Songs + +Cette section présente l'écriture vocale et les partitions de variété. + +@menu +* Écriture de chants simples:: +* Alignement des paroles sur une mélodie:: +* Paroles pour plusieurs portées:: +@end menu + + +@node Écriture de chants simples +@subsection Écriture de chants simples +@translationof Setting simple songs + +@cindex paroles +@cindex chansons + +@funindex \addlyrics +@funindex addlyrics + +Glossaire musicologique : @rglos{lyrics}. + +Prenons une mélodie toute simple, la comptine @emph{Girls and boys +come out to play}. + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +Des @notation{paroles} peuvent être associées à ces notes, en les +combinant avec la commande @code{\addlyrics}. On entre les paroles en +séparant chaque syllable par une espace@tie{}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } +>> +@end lilypond + +@warning{Il est primordial de séparer l'accolade fermant les +paroles de la dernière syllabe -- par une espace ou un saut de ligne -- +au risque de voir apparaître une +@rprogram{Erreur renvoyant à ../ly/init.ly}.} + + +Notez les doubles chevrons @w{@code{<< ... >>}} encadrant +toute la pièce@tie{}; ils indiquent simplement que la musique et les +paroles se produisent en même temps. + +@node Alignement des paroles sur une mélodie +@subsection Alignement des paroles sur une mélodie +@translationof Aligning lyrics to a melody + +@cindex mélisme +@cindex ligne d'extension +@cindex trait d'union (paroles) +@cindex caractère souligné (paroles) +@cindex paroles, alignement des +@cindex alignement des paroles +@cindex paroles, mot de plusieurs syllabes + +Glossaire musicologique : @rglosnamed{melisma,mélisme}, +@rglosnamed{extender line,ligne d'extension}. + +La deuxième ligne de la comptine précédente est @emph{The moon doth +shine as bright as day}. Ajoutons-la au code. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Si vous compilez ce code en l'état, vous verrez apparaître@tie{}: + +@example +song.ly:12:29: Avertissement : échec du contrôle de mesure (barcheck) à : 5/8 + The | moon doth shine as + | bright as day; | +song.ly:12:46: Avertissement : échec du contrôle de mesure (barcheck) à : 3/8 + The | moon doth shine as | bright as day; + | +@end example + +Voici qui illustre bien l'utilité des contrôles de barre de +mesure@tie{}! Remarquez que les paroles ajoutées ne s'alignent pas bien +avec les notes. Le mot @emph{shine} devrait être chanté sur deux notes +au lieu d'une. On appelle ceci un @notation{mélisme}@tie{}: il s'agit +d'une seule syllabe chantée sur plus d'une note. Il existe plusieurs +façons d'étaler une sylabe sur plusieurs notes, la plus simple étant de +lier les notes du mélisme. Pour les détails, consultez @ref{Liaisons}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Les paroles sont maintenant correctement alignées, mais les liens de +croche automatiques ne conviennent pas pour les notes au-dessus de +@emph{shine as}. On peut les corriger en ajoutant des liens de croche +manuels@tie{}; pour ceci consultez +@ref{Barres de ligature automatiques et manuelles}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Au lieu d'utiliser une liaison, on peut indiquer le mélisme dans les +paroles en insérant un caractère souligné @code{_} pour chaque note du +mélisme sauf la première. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +Si une syllabe s'étend sur un grand nombre de notes ou une note très +longue, on représente souvent le mélisme par un @notation{trait de +prolongation}, qu'on entre avec double caractère souligné @code{__}. +L'exemple suivant montre les trois premières mesures de la plainte de +Didon, extraite de @notation{Didon et Énée} de Purcell. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +Aucun exemple jusqu'à présent n'a utilisé de mots de plus d'une +syllabe. Dans des paroles, de tels mots sont écrits en syllabes +séparées par des traits d'union. Avec LilyPond, on utilise deux +tirets pour produire un trait d'union centré entre deux syllabes. +L'exemple suivant montre tout ce que nous avons vu jusqu'à maintenant +sur l'alignement de paroles à une mélodie. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +Avec certaines paroles, en particulier en italien, il se produit la +situation inverse@tie{}: il peut y avoir plusieurs syllabes sur une +seule note. On réalise ceci avec LilyPond grâce à un caractère souligné +@code{_} sans espace entre les syllabes, ou alors en groupant les +syllabes avec des guillemets. L'exemple suivant est extrait de l'air +de Figaro @emph{Largo al factotum}, dans @notation{Figaro} de Rossini, où +la syllabe @emph{al} est chantée sur la même note que @emph{go}. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef bass + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + + +@seealso +Manuel de notation : +@ruser{Musique vocale}. + + +@node Paroles pour plusieurs portées +@subsection Paroles pour plusieurs portées +@translationof Lyrics to multiple staves + +@cindex paroles et portées mutiples +@cindex portées multiples et paroles + +La méthode simple d'ajout de paroles avec @code{\addlyrics} peut être +également utilisée pour placer des paroles sous plusieurs portées. +L'exemple suivant est extrait de @emph{Judas Macchabée} de Händel. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + +Pour produire des partitions plus complexes ou plus longues que cet +exemple simple, il est vivement conseillé de séparer la structure de +la partition des notes et paroles, grâce à des variables. Ceci sera +détaillé plus loin dans @ref{Organisation du code source avec des variables}. + + +@seealso +Manuel de notation : +@ruser{Musique vocale}. + + +@node Dernières précisions +@section Dernières précisions +@translationof Final touches + +L'ultime section de ce tutoriel montre comment ajouter une touche +finale à des morceaux simples, et constitue une introduction au reste +du manuel. + +@menu +* Organisation du code source avec des variables:: +* Ajout de titres:: +* Noms de note absolus:: +* Après le tutoriel:: +@end menu + + +@node Organisation du code source avec des variables +@subsection Organisation du code source avec des variables +@translationof Organizing pieces with variables + +@cindex variables +@cindex variables, définition +@cindex identificateurs +@cindex macros +@cindex assignation de variables +@cindex utilisation de variables +@cindex variables, utilisation de +@cindex variables, caractères autorisés dans les +@cindex caractères autorisés dans les variables + +Lorsque l'on combine tous les éléments étudiés précédemment pour +écrire des partitions plus longues, les expressions musicales prennent +de l'ampleur et, dans le cas des pièces polyphoniques, deviennent +profondément imbriquées, jusqu'au point où il devient difficile de se +repérer dans le fichier source. Cet inconvénient peut être résolu par +l'utilisation de @emph{variables}. + +En utilisant des variables, parfois appelées identificateurs ou +macros, on peut scinder des expressions musicales complexes en des +expressions plus simples. Une variable se définit comme suit@tie{}: + +@example +musiqueToto = @{ @dots{} @} +@end example + +Le contenu de l'expression musicale @code{musiqueToto} pourra être +utilisé plus loin en faisant précéder son nom d'un anti-slash, +c'est-à-dire @code{\musiqueToto}, tout comme n'importe quelle commande +LilyPond. Toute variable doit être définie @emph{avant} son +utilisation dans une autre expression musicale. + +@lilypond[verbatim,quote] +violin = \new Staff { + \relative c'' { + a4 b c b + } +} + +cello = \new Staff { + \relative c { + \clef bass + e2 d + } +} + +{ + << + \violin + \cello + >> +} +@end lilypond + +@noindent +Le nom d'une variable ne doit comporter que des caractères +alphabétiques non accentués, aucun nombre ni tiret ne sont autorisés. + +On peut utiliser une variable déjà définie autant de fois que l'on +veut, y compris dans la définition d'une nouvelle variable@tie{}; par +exemple, cela peut servir à saisir un motif qu'une seule fois, même +s'il se répète un grand nombre de fois dans la pièce. + +@lilypond[verbatim,quote] +tripletA = \times 2/3 { c,8 e g } +barA = { \tripletA \tripletA \tripletA \tripletA } + +\relative c'' { + \barA \barA +} +@end lilypond + +Il est possible d'utiliser des variables de types variés. Par exemple, + +@example +largeur = 4.5\cm +nom = "Wendy" +aFivePaper = \paper @{ paperheight = 21.0 \cm @} +@end example + +En fonction de son contenu, un identificateur peut être utilisé à +différents endroits. L'exemple suivant utilise les variables définies +ci-dessus. + +@example +\paper @{ + \aFivePaper + line-width = \largeur +@} + +@{ + c4^\nom +@} +@end example + + +@node Ajout de titres +@subsection Ajout de titres +@translationof Adding titles + +@cindex titre +@cindex en-têtes +@cindex bloc d'en-tête + +@funindex \header +@funindex header + +On indique les informations bibliographiques -- nom du morceau, du +compositeur, numéro d'opus@dots{} -- dans un bloc à part, le bloc +d'en-tête @code{\header}, qui existe indépendamment de l'expression +musicale principale. Le bloc @code{\header} est habituellement placé +en début de fichier, après le numéro de version. + +@example +\version @w{"@version{}"} + +\header @{ + title = "Symphonie" + composer = "Moi" + opus = "Op. 9" +@} + +@{ + @dots{} la musique @dots{} +@} +@end example + +Quand LilyPond traite le fichier, le titre et le compositeur sont +imprimés au début de la partition. Vous trouverez plus d'informations +sur les titres à la section @ruser{Création de titres}. + + +@node Noms de note absolus +@subsection Noms de note absolus +@translationof Absolute note names + +@cindex notes, nom des +@cindex absolu, mode +@cindex mode absolu +@cindex hauteurs, valeurs absolues +@cindex noms de note absolus + +Jusqu'ici nous n'avons utilisé que le mode @code{\relative} pour +définir les hauteurs de notes. Si c'est souvent le moyen le plus +simple de saisir la musique au clavier, il existe une autre façon de +procéder@tie{}: le mode de hauteurs absolues. + +Si vous omettez la commande @code{\relative}, LilyPond considérera +toutes les hauteurs comme des hauteurs absolues. Un @code{c'} désigne +toujours le do central, un @code{b} se situe une seconde en dessous +du do central, et un @code{g,} est situé sur la première ligne de +la portée en clé de fa. + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +Voici une gamme sur 4 octaves : + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +Comme vous pouvez le voir, il faut beaucoup d'apostrophes pour écrire +de la musique dans un registre aigu, comme le montre cet extrait de +Mozart. + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +Toutes ces apostrophes rendent le fichier moins lisible, et surtout il +est très probable d'oublier au moins une apostrophe au cours de la +frappe. En mode @code{\relative}, le même exemple devient bien plus +facile à lire et à saisir. + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 | + b8. cis16 b8 d4 d8 | +} +@end lilypond + +Si d'aventure vous faites une erreur d'octaviation, le mode +@code{\relative} la mettra en évidence@tie{}: toutes les notes suivantes +seront placées à la mauvaise octave. En mode de hauteurs absolues, +une erreur isolée ne serait pas autant visible, et serait donc plus +difficile à dénicher. + +Cependant, le mode de hauteurs absolues reste utile pour les musiques +où les intervalles sont étendus, et plus encore pour les fichiers +LilyPond créés par des programmes. + + +@node Après le tutoriel +@subsection Après le tutoriel +@translationof After the tutorial + +Après avoir parcouru ce tutoriel, vous devriez essayer d'écrire un +morceau ou deux. Commencez par copier l'un des modèles types et +ajoutez-y des notes -- consultez les @ref{Modèles}. Si vous voulez +employer une notation que vous n'avez pas trouvé dans le tutoriel, +consultez le manuel de notation, en commençant par la +@ruser{Notation musicale générale}. Si vous désirez écrire pour un +ensemble instrumental non couvert par les modèles, lisez la section +@ref{Extension des modèles}. + +Après avoir écrit quelques pièces courtes, lisez les chapitres 3 à 5 +du manuel d'initiation. Rien ne s'oppose à ce que vous consultiez dès +à présent ces chapitres, bien sûr@tie{}! Néanmoins, le reste du manuel +d'initiation part du principe que vous avez déjà bien assimilé la +syntaxe de base de LilyPond. Vous pouvez toujours survoler ces +chapitres 3 à 5, et y revenir plus tard après avoir acquis de +l'expérience. + +Dans ce tutoriel comme dans le reste de ce manuel, se trouve à chaque +section un paragraphe @strong{Voir aussi} contenant des références +vers d'autres sections@tie{}: il est conseillé de ne pas les suivre en +première lecture@tie{}; lorsque vous aurez lu l'ensemble du manuel +d'initiation, vous pourrez en relisant certaines sections suivre ces +références pour approfondir certains aspects. + +Si vous ne l'avez pas encore fait, lisez +@ref{Vue d'ensemble des manuels}. Les sources de documentation et +d'information sur LilyPond sont vastes, il est normal pour un débutant +de ne pas savoir où chercher@tie{}; si vous passez quelques minutes à +lire attentivement cette section, vous vous épargnerez certainement la +frustration causée par des heures de recherches infructueuses. diff --git a/Documentation/fr/learning/fundamental.itely b/Documentation/fr/learning/fundamental.itely new file mode 100644 index 0000000000..62903c106e --- /dev/null +++ b/Documentation/fr/learning/fundamental.itely @@ -0,0 +1,3299 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: John Mandereau +@c Translation status: post-GDP + +@node Concepts fondamentaux +@chapter Concepts fondamentaux +@translationof Fundamental concepts + +Le tutoriel nous a montré comment obtenir une édition de toute beauté à +partir d'un simple fichier texte. Nous nous intéresserons dans cette +partie aux concepts et techniques qui permettent d'obtenir des +partitions complexes de même qualité. + +@menu +* Organisation des fichiers LilyPond:: +* Les voix contiennent la musique:: +* Contextes et graveurs:: +* Extension des modèles:: +@end menu + +@node Organisation des fichiers LilyPond +@section Organisation des fichiers LilyPond +@translationof How LilyPond input files work + +La mise en forme des fichiers d'entrée de LilyPond est vraiment +peu astreignante, afin d'offrir assez de souplesse aux utilisateurs +expérimentés pour qu'ils puissent organiser leurs fichiers comme +ils l'entendent. Cependant, les nouveaux utilisateurs peuvent parfois +se perdre en raison de cette souplesse. Cette section présente +sommairement l'organisation du code LilyPond, en privilégiant +la simplicité au détriment de certains détails. Vous trouverez une +description plus complète dans @ruser{Structure de fichier}. + +@menu +* Introduction à la structure de fichier LilyPond:: +* La partition est une (unique) expression musicale composée:: +* Expressions musicales imbriquées:: +* Non-imbrication des crochets et liaisons:: +@end menu + +@node Introduction à la structure de fichier LilyPond +@subsection Introduction à la structure de fichier LilyPond +@translationof Introduction to the LilyPond file structure + +@cindex format d'entrée +@cindex structure de ficher + +Un fichier d'entrée LilyPond ressemble à@tie{}: + +@example +\version @w{"@version{}"} +\header @{ @} +\score @{ + @var{...expression musicale composite...} % c'est là qu'est la musique ! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Il existe de nombreuses variantes à ce schéma simpliste, mais cet +exemple est un préambule à notre propos. + +@funindex \book +@funindex book +@funindex \score +@funindex score + +@cindex book, livre, ouvrage +@cindex livre +@cindex score, partition +@cindex partition + +Jusqu'à présent, les exemples que nous avons pu voir ne faisaient pas +appel à la commande @code{\score@{@}}. En fait, LilyPond ajoute +automatiquement les commandes nécessaires au traitement d'un code +simpliste. LilyPond considère + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +comme un raccourci de + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +En d'autres termes, si le code n'est constitué que d'une expression +musicale simple, LilyPond interprètera le fichier tout comme si cette +expression était incluse dans les commandes de notre premier exemple. + +@cindex contextes implicites +@cindex implicites, contextes + +@strong{Attention :} de nombreux exemples, dans la documentation de +LilyPond, ne font pas apparaître les commandes @code{\new Staff} ou +@code{\new Voice}, qui sont créées implicitement. Ce qui +n'est pas primordial pour des exemples simples le devient dès que la +situation se complexifie un tant soit peu. Le fait de ne pas déclarer +explicitement un contexte peut alors amener à des résultats quelque peu +surprenants, comme la création d'une portée supplémentaire et +indésirable. La manière de créer explicitement des contextes est +traitée plus en détails au chapitre @ref{Contextes et graveurs}. + +@warning{Dès lors que votre musique dépasse quelques lignes, nous vous +engageons fortement à créer explicitement les voix et portées.} + +Mais revenons à notre premier exemple, et penchons-nous tout d'abord sur +la commande @code{\score}. + +Un bloc @code{\score} doit contenir une et une seule expression +musicale, exprimée immédiatement à la suite de la commande +@code{\score}. Rappelez-vous que cette expression peut être n'importe +quoi, d'une note isolée à un gigantesque + +@example +@{ + \new StaffGroup << + @var{...collez ici la partition complète d'un opéra de Wagner...} + >> +@} +@end example + +@noindent +Dès lors que tout cela est entre accolades@tie{}: @code{@{ @dots{} @}}, +LilyPond le considère comme une et une seule expression musicale. + +Comme nous l'avons vu précédemment, un bloc @code{\score} peut contenir +d'autres informations@tie{}: + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex header +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi + +@cindex header +@cindex en-tête +@cindex layout +@cindex mise en forme +@cindex midi + +@noindent +Gardez à l'esprit que ces trois commandes -- @code{\header}, +@code{\layout} et @code{\midi} -- sont spécifiques@tie{}: à l'inverse de +toutes les commandes débutant par une oblique inversée @code{\} +(@emph{backslash} en anglais), @strong{elles ne constituent pas} des +expressions musicales et ne peuvent pas faire partie d'expressions +musicales. Elles peuvent de ce fait être placées à l'intérieur du +bloc @code{\score}, ou bien à l'extérieur. En réalité, ces commandes +sont la plupart du temps indépendantes du bloc @code{\score} -- par +exemple, la commande @code{\header} intervient souvent avant le bloc +@code{\score}, comme le montre l'exemple ci-dessus. + +Les deux autres commandes -- @code{\layout @{@}} et @code{\midi @{@}} +-- que nous n'avons pas détaillées pour l'instant, auront respectivement +pour effet, lorsqu'elles interviennent, de produire une sortie +imprimable et un fichier MIDI. Nous nous y intéressons plus +particulièrement dans le manuel de notation, aux chapitres +@ruser{Mise en forme de la partition} et +@ruser{Création de fichiers MIDI}. + +@cindex partitions multiples +@cindex book, bloc implicite +@cindex implicite, bloc book + +@funindex \book +@funindex book + +Vous pouvez tout à fait mentionner plusieurs blocs @code{\score}. Ils +seront traités comme autant de partitions indépendantes qui seront +regroupées dans un seul fichier résultant. La commande @code{\book} +(@emph{recueil} ou @emph{ouvrage}) n'est pas obligatoire -- elle sera +créée implicitement. Néanmoins, le recours à la commande @code{\book} +vous permettra d'obtenir des fichiers résultants distincts à partir +d'un même fichier source @file{.ly} -- par exemple un fichier par pupitre. + +En résumé : + +Dès que LilyPond rencontre un bloc @code{\book}, il crée un +fichier distinct (@file{.pdf} par exemple). Dans le cas où il n'est pas +mentionné explicitement, LilyPond regroupera l'intégralité du code dans +un bloc @code{\book}. + +Tout bloc @code{\score} inclus dans un bloc @code{\book} constitue un +fragment de musique, par exemple un mouvement d'une symphonie. + +@cindex layout, effets selon l'emplacement + +Tout bloc @code{\layout} affecte le bloc @code{\score} ou @code{\book} +au sein duquel il intervient@tie{}: si c'est à l'intérieur d'un bloc +@code{\score}, seul celui-ci en sera affecté. Dans le cas où le bloc +@code{\layout} se trouve à l'extérieur du bloc @code{\score}, que le +bloc @code{\book} soit explicite ou non, il affectera chacun des +@code{\score} compris dans ce @code{\book}. + +Pour plus de détail à ce sujet, consultez +@ruser{Plusieurs partitions dans un même ouvrage}. + +@cindex variables +@cindex identificateurs + +Un autre raccourci pratique est la possibilité de définir +des variables, également appelées @qq{identificateurs} -- voir +@ref{Organisation du code source avec des variables} à ce sujet. Dans +tous les modèles, vous trouverez@tie{}: + +@example +melodie = \relative c' @{ + c4 a b c +@} + +\score @{ + @{ \melodie @} +@} +@end example + +Lorsque LilyPond examinera ce fichier, il va prendre la valeur de la +variable @code{melodie}, c'est-à-dire tout ce qui suit le signe @code{=}, +et l'insérer partout où il rencontrera @code{\melodie}. Vous êtes +libre de choisir comment dénommer vos variables@footnote{Les noms de +variables sont sensibles à la casse, et ne peuvent contenir ni +chiffre, ni ponctuation, ni caractère accentué, ni espace.}@tie{}; ce +peut être @code{melodie}, @code{global}, @code{maindroitepiano}, ou +@code{laTeteAToto}, tant qu'il ne s'agit pas de @qq{mot réservé}. Pour +plus de détails, voir +@ref{Économie de saisie grâce aux identificateurs et fonctions}. + + +@seealso +Pour une description complète du format des fichiers d'entrée, voir +@ruser{Structure de fichier}. + + +@node La partition est une (unique) expression musicale composée +@subsection La partition est une (unique) expression musicale composée +@translationof Score is a (single) compound musical expression + +@funindex \score +@funindex score + +@cindex partition +@cindex bloc score, contenu +@cindex expression musicale composite + +Dans la section précédente, +@ref{Introduction à la structure de fichier LilyPond}, nous +avons vu l'organisation générale des fichiers d'entrée de LilyPond. +Mais c'est comme si nous avions éludé la question essentielle@tie{}: +comment diable peut-on savoir quoi mettre après @code{\score}@tie{}? + +En fait, nous ne l'avons pas éludée du tout@tie{}: le grand mystère est +tout simplement qu'@strong{il n'y a pas} de mystère. Allez, +expliquons-le en une ligne@tie{}: + +@quotation +@emph{Un bloc @code{\score} doit commencer par une et une seule +expression musicale.} +@end quotation + +@noindent +Peut-être serait-il judicieux de relire la section +@ref{Les expressions musicales en clair}, dans laquelle vous avez +appris à construire de grandes expressions musicales petit bout +par petit bout -- nous avons vu les notes, puis les accords, etc. +Maintenant, nous allons partir d'une grande expression musicale, +et remonter la pente. Pour rester simple, nous nous contenterons d'un +chanteur accompagné au piano. On n'a pas besoin d'une partition +d'orchestre -- c.-à-d. des portées regroupées en @code{StaffGroup} -- +donc laissons cela de côté. Par contre, nous voulons bien une voix et +une double portée de piano. + +@example +\score @{ + @{ + << + \new Staff = "chanteur" << + >> + \new PianoStaff = "piano" << + >> + >> + @} + \layout @{ @} +@} +@end example + +Nous avons ici attribué des noms aux portées -- @qq{chanteur} et +@qq{piano}. Bien que cela ne soit pas primordial, c'est une +habitude qu'il est bon d'adopter dès le départ@tie{}: vous saurez au +premier coup d'œil à quoi correspond chaque portée. + +Vous vous souvenez que nous avons recours à @code{<<} et @code{>>} +en lieu et place de @code{@{ @dots{} @}} pour gérer des musiques +simultanées. Et, pour le coup, on aimerait @emph{vraiment} que la +partie vocale et l'accompagnement soient imprimés ensemble@dots{} Bien +que faire appel à @code{<< ... >>} ne soit pas réellement nécessaire +pour la portée du chanteur, dans la mesure où elle ne contient qu'une +seule expression musicale, nous vous recommandons de prendre l'habitude +de l'encadrer ainsi plutôt que par de simples accolades -- une portée +peut en effet contenir plusieurs voix, ou bien des notes @strong{et} des +paroles. Dans la mesure où nous y ajouterons des paroles, les chevrons +sont donc obligatoires. Si vous avez oublié comment ajouter des +paroles à l'aide de la commande @code{\addlyrics}, relisez le chapitre +@ref{Écriture de chants simples}. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +On y voit nettement plus clair maintenant. Nous voici donc avec la +partie du chanteur, qui contient un ensemble @code{Voice}, ce qui dans +LilyPond correspond à une voix, au sens de voix d'une polyphonie plutôt +que de voix chantée -- ce pourrait être une partie de violon par +exemple --, et des paroles. +Nous avons également une partie de piano, qui contient deux +portées@tie{}: une pour la main droite, une autre pour la main gauche. +Il nous faudra d'ailleurs ajouter une clef de fa à cette dernière. + +À ce point, on pourrait commencer à ajouter les notes. Dans les +accolades qui suivent @code{\new Voice = "chant"}, on pourrait +commencer à écrire + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +Mais si l'on procédait ainsi, la section @code{\score} deviendrait +vite assez touffue, et très rapidement on ne s'y retrouverait plus. +C'est pourquoi on utilisera plutôt des variables, ou identificateurs, +comme nous l'avons vu plus haut. Pour s'assurer que le contenu de la +variable @code{texte} soit bien interprété comme des paroles, nous le +préfixons d'un @code{\lyricmode}. Sans cette précaution, LilyPond +tenterait d'interpréter le contenu de cette variable comme des notes, ce +qui déclencherait immanquablement des erreurs. LilyPond dispose de +différents types de données -- voir @ruser{Modes de saisie} pour plus de +détails. + +Avec quelques notes de plus et une clef de fa, nous pourrions +avoir@tie{}: + +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e2 } + +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond + +Quand on écrit ou que l'on lit une section @code{\score}, mieux vaut +y aller lentement et soigneusement. Commencez par le niveau le plus +large, puis travaillez sur chaque niveau plus détaillé. À ce propos, +une indentation stricte et propre est vraiment d'une aide +précieuse@tie{}: assurez-vous que chaque élément d'un même niveau a le +même décalage horizontal dans votre éditeur de texte@tie{}! + + +@seealso +Manuel de notation : +@ruser{Structure d'une partition}. + + +@node Expressions musicales imbriquées +@subsection Expressions musicales imbriquées +@translationof Nesting music expressions + +@cindex portées, temporaires +@cindex ossias + +Déclarer toutes les portées dès le départ n'est pas une +obligation@tie{}; elles peuvent intervenir temporairement n'importe où +dans la partition. Ceci est tout à fait indiqué pour créer des sections +@rglos{ossia}. L'exemple suivant illustre la manière de créer +temporairement une nouvelle portée, l'espace de trois notes@tie{}: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Vous noterez la taille de la clef, identique à celle que l'on trouve +lors d'un changement en cours de ligne -- légèrement plus petite que +celle imprimée en tête de ligne. + +@cindex portée, positionnement + +Une section ossia se placera au dessus de la portée en procédant +ainsi@tie{}: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Cet exemple recourt à @code{\with}, que nous verrons en détail plus +avant. C'est un moyen de modifier le comportement par défaut d'une +portée individuelle. Nous indiquons ici que la nouvelle portée doit se +placer au-dessus de la portée @qq{principal} plutôt qu'en dessous, ce +qui est le comportement par défaut. + + +@seealso +Les ossia apparaissent souvent sans clef ni métrique, et dans une taille +plus petite. Ceci requiert des commandes dont nous n'avons pas encore +parlé. Voir @ref{Taille des objets} et @ruser{Portées d'ossia}. + + +@node Non-imbrication des crochets et liaisons +@subsection Non-imbrication des crochets et liaisons +@translationof On the un-nestedness of brackets and ties + +@cindex crochets, imbrication +@cindex crochets, types de + +Nous avons déjà rencontré plusieurs types de crochets au fil de nos +fichiers LilyPond. Ils obéissent à des règles différentes qui peuvent +paraître déroutantes de prime abord. Avant d'examiner ces règles, voici +une liste des différents types de crochet@tie{}: + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Type de crochet + @tab Fonction +@item @code{@{ .. @}} + @tab Délimite un segment de musique séquentielle +@item @code{< .. >} + @tab Délimite les notes d'un accord +@item @code{<< .. >>} + @tab Délimite des sections simultanées +@item @code{( .. )} + @tab Marque le début et la fin d'une liaison +@item @code{\( .. \)} + @tab Marque le début et la fin d'une liaison de phrasé +@item @code{[ .. ]} + @tab Marque le début et la fin d'une ligature manuelle +@end multitable + +D'autres constructions permettent d'obtenir des lignes regroupant ou en +travers des notes@tie{}: les liaisons de prolongation indiquées par un +tilde (@code{~}), les marques de nolet avec +@w{@code{\times x/y @{..@}}}, ou +encore les notes d'ornement avec @code{\grace@{..@}}. + +En dehors de LilyPond, l'imbrication correcte de différents types de +crochets exige un strict respect des conventions, telles que +@code{<<@tie{}[@tie{}@{@tie{}(@tie{}..@tie{})@tie{}@}@tie{}]@tie{}>>}, +où les marques de fermeture interviennent +obligatoirement dans l'ordre exactement inverse à celles d'ouverture. +Ceci @strong{doit} être rigoureusement respecté pour les trois +types de crochets utilisés pour @strong{délimiter} comme l'indique le +tableau ci-dessus. +Une telle rigueur dans l'imbrication n'est @strong{pas} requise pour les +types de crochets dont la fonction est de @strong{marquer}, selon le +tableau ci-dessus, lorsqu'il sont utilisés en combinaison avec des +liaisons de prolongation ou des nolets. En effet, il ne s'agit pas +de crochets ayant pour fonction de borner quelque chose@tie{}; ils +agissent plutôt comme marquant le début de quelque chose et sa fin. + +Ainsi, et bien que ce ne soit pas très musical, une liaison de phrasé +peut débuter avant l'insertion d'une ligature manuelle et s'arrêter +avant la fin de la ligature@tie{}: + +@lilypond[quote,verbatim,ragged-right,relative=2] +g8\( a b[ c b\) a] g4 +@end lilypond + +De manière générale, différents types de crochets, notamment s'ils +indiquent des nolets, liaisons de prolongation ou notes d'ornement, +peuvent se mélanger entre eux. L'exemple suivant montre une ligature +qui se prolonge sur un triolet (ligne 1), puis une liaison qui se +prolonge sur un triolet (ligne 2) et enfin une ligature et une liaison +qui s'étendent sur un triolet, lui-même lié à un quintolet agrémenté +d'une liaison de phrasé se poursuivant (lignes 3 et 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 + + +@node Les voix contiennent la musique +@section Les voix contiennent la musique +@translationof Voices contain music + +Les chanteurs utilisent leur voix pour chanter@tie{}; il en va de même +pour LilyPond. En fait, la musique de chacun des instruments d'une +partition est contenue dans des voix (@emph{Voices} en anglais), qui +se trouvent être le concept fondamental de LilyPond. + +@menu +* J'entends des Voix:: +* Instanciation explicite des voix:: +* Voix et paroles:: +@end menu + +@node J'entends des Voix +@subsection J'entends des Voix +@translationof I'm hearing Voices + +@cindex polyphonie +@cindex calques (layers) +@cindex voix multiples +@cindex Voice, contexte +@cindex contexte de voix +@cindex musique simultanée +@cindex musique concurrente +@cindex voix ou accords +@cindex accords ou voix + +Dans une partition gérée par LilyPond, le niveau le plus bas, ou bien +élémentaire ou fondamental, est le @qq{contexte de voix} -- @emph{Voice +context} en anglais --. Pour d'autres logiciels, on fait tantôt +référence à la notion de @qq{couche} ou de @qq{calque}. + +En réalité, le contexte de voix est le seul à pouvoir contenir de la +musique. S'il n'est pas déclaré explicitement, il sera créé +automatiquement comme nous l'avons vu au début de ce chapitre. Certains +instruments, le hautbois par exemple, ne peuvent jouer qu'une seule note +à la fois. On dit en pareil cas qu'il s'agit de musique monophonique, +et nous n'aurons alors besoin que d'une seule voix. Les intruments qui, +comme le piano, peuvent émettre plusieurs sons en même temps, nécessitent +de recourir à plusieurs voix pour gérer efficacement l'alignement des +notes et rythmes différents. + +Si une voix unique peut tout à fait contenir plusieurs notes dans un +accord, à partir de quand aurons-nous vraiment besoin de plusieurs +voix@tie{}? Considérons déjà ces quatre accords@tie{}: + +@lilypond[quote,verbatim,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +Nous exprimons ici chacun des accords par l'utilisation de +chevrons gauche et droite simples, @w{@code{< ... >}}, puisque nous +n'avons besoin que d'une seule voix. Supposons maintenant que le fa +dièse soit une croche, suivie d'un sol croche -- une note de passage +vers le la@tie{}? Nous avons alors deux notes qui débutent au même +moment, mais dont la durée est différente@tie{}: un ré noire et un fa +dièse croche. Comment coder cela@tie{}? Dans la mesure où toutes les +notes d'un accord doivent avoir la même durée, nous ne pouvons pas +écrire un accord. Nous ne pouvons pas non plus écrire deux notes +séparées, puisqu'elles débutent en même temps. Nous avons alors besoin +de deux voix. + +Voyons comment cela se pratique selon la grammaire de LilyPond. + +@funindex << \\ >> +@funindex \\ + +Le plus sûr moyen de saisir un fragment où plusieurs voix cohabitent +sur la même portée, consiste à saisir chacune des voix séquentiellement +(avec @code{@{...@}}), puis à les combiner en simultané à l'aide de +doubles chevrons gauche/droite, @code{<<...>>}. Les fragments +devront être séparés par une double oblique inversée, @code{\\}, pour +les affecter à des voix séparées. Dans le cas contraire, les notes +seraient toutes affectées à une même voix, ce qui pourait générer des +erreurs. Cette manière de procéder est tout à fait indiquée dans le cas +d'une pièce ne comportant que quelques courts passages de polyphonie. + +Voici comment éclater les accords en deux voix, avec la note de passage +et la liaison@tie{}: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Notez que les hampes de la seconde voix sont dirigées vers le bas. + +Autre exemple : + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | +<< { a2. r4 } \\ { fis2. s4 } >> | +@end lilypond + +Le recours à une construction @code{<< \\ >>} particulière à chaque +mesure n'est pas nécessaire. Bien qu'on y gagne en lisibilité si chaque +mesure ne contient que quelques notes, il est plus judicieux de +carrément séparer chaque voix@tie{}: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +@cindex voix, nommage +@cindex voix et constructions simultanées +@cindex liaisons et constructions simultanées + +Cet exemple ne comporte que deux voix, mais il peut être étendu pour +traiter trois voix ou plus en ajoutant autant de séparateurs @code{\\} +que de besoin. + +Les contextes @code{Voice} portent les noms @code{"1"}, @code{"2"}, etc. +Pour chacun de ces contextes, le positionnement et l'orientation des +liaisons, hampes, nuances, etc. est définie automatiquement. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> | + << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | +} +@end lilypond + +Ces voix sont séparées de la voix principale, laquelle contient les +notes en dehors de la construction @code{<<...>>} -- que nous +appellerons @emph{construction simultanée}. Les liaisons, de +prolongation ou non, ne peuvent relier des notes que si elles +appartiennent à la même voix@tie{}; elles ne peuvent ni pénétrer une +contruction simultanée, ni en sortir. Inversement, les voix parallèles +issues de constructions simultanées apparaissant sur une même portée +appartiennent à la même voix. Les autres propriétés liées au contexte +de voix s'appliquent tout au long des constructions simultanées. +Reprenons notre exemple, en affectant une couleur et une allure +différentes aux notes de chacune des voix. Vous noterez qu'un +changement apporté à une voix ne se propage pas aux autres, et qu'il se +reporte jusqu'au bout, et que la voix aux triangles bleus comporte une +liaison de prolongation entre deux constructions. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Les commandes @code{\voiceXXXStyle} sont principalement dédiées à une +utilisation pédagogique, comme l'est ce document. Elles modifient la +couleur des hampes et ligatures et le style de tête des note, pour +permettre une meilleure distinction entre les différentes voix. La +première voix comporte des têtes en losange rouge, la deuxième en +triangle bleu, la troisième en cercle barré vert, la quatrième (non +utilisée ici) en croix magenta@tie{}; @code{\voiceNeutralStyle} (non +utilisé ici) revient au style par défaut. Nous verrons plus tard +comment créer de telles commandes. +Voir @ref{Visibilité et couleur des objets} et +@ref{Utilisation de variables dans les retouches}. + +@cindex polyphonie et mode relatif +@cindex mode relatif et polyphonie + +La polyphonie ne modifie en rien la relation entre les notes au sein +d'un bloc @code{\relative}. Chaque note est calculée par rapport à +celle qui la précède, ou bien par rapport à la première note de l'accord +qui précède. Ainsi, dans + +@example +\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} +@end example + +@noindent +@code{noteB} est relative à @code{noteA} @* +@code{noteC} est relative à @code{noteB}, pas à @code{noteA} @* +@code{noteD} est relative à @code{noteB}, pas à @code{noteA} ni +@code{noteC} @* +@code{noteE} est relative à @code{noteD}, pas à @code{noteA} + +Une méthode alternative, et qui peut simplifier les choses si les notes +des différentes voix sont espacées, consiste à placer une commande +@code{\relative} au début de chacune des voix@tie{}: + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +\\ + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +Pour finir, analysons le principe d'utilisation des voix dans une pièce +complexe. Nous allons nous concentrer sur les deux premières mesures du +second des Deux nocturnes, opus 32 de Chopin. Cet exemple nous servira +à plusieurs reprises, y compris dans le chapitre suivant, pour illustrer +certaines techniques de notation. Aussi, ne prétez pas trop d'attention +à ce qui pour l'instant pourrait vous paraître vraiment mystérieux dans +le code, et intéressons-nous uniquement à ce qui concerne la musique et +les voix -- ce qui est plus compliqué sera décortiqué plus tard. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +La direction des hampes sert souvent à indiquer dans la continuité deux +lignes mélodiques simultanées. Ici, les hampes des notes les plus +hautes vont vers le haut, et celles des notes plus basses vers le +bas. C'est une première indication de ce que nous avons eu recours à +plus d'une voix. + +Mais le réel besoin de multiples voix se fait sentir dès lors que +plusieurs notes qui débutent en même temps ont des durées différentes. +C'est évident au troisième temps de la première mesure@tie{}: le la +bémol est une noire pointée, le fa une noire, et le ré bémol une +blanche. On ne peut les grouper dans un accord, puisque toutes les +notes composant un accord doivent être de même durée. On ne peut non +plus les écrire séquentiellement, puisqu'elles débutent toutes au même +instant. Ce fragment de mesure nécessite trois voix, et une bonne +pratique voudrait que l'intégralité de la mesure soit sur trois voix, +comme ci-dessous où nous avons une allure et une couleur différentes aux +notes de chacune d'entre elles. Une fois de plus, nous reviendrons plus +tard sur le code que vous ne comprendriez pas. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +Essayons à présent de coder cette musique en partant de zéro. Comme +nous le verrons, certaines difficultés vont se présenter. Partons de ce +que nous avons appris@tie{}: utilisons la construction +@code{<<@tie{}\\@tie{}>>} pour saisir la première mesure dans trois +voix@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } + >> + 1 +} +@end lilypond + +@cindex stem down +@cindex hampes en bas +@cindex stem up +@cindex hampes en haut +@cindex voix et direction des hampes +@cindex direction des hampes et voix + +La direction des hampes est attribuée automatiquement@tie{}: les voix +impaires portent des hampes vers le haut, les voix paires des hampes +vers le bas. Les hampes des voix 1 et 2 sont orientées comme il faut +mais celles de la voix 3 devraient, dans le cas qui nous occupe, aller +vers le bas. Nous pouvons corriger cela en sautant la voix 3 et en +plaçant la musique dans la voix 4 grâce à un @code{\\} +supplémentaire@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des2 } + >> | + 1 | +} +@end lilypond + +@noindent +Cette manipulation nous permet de régler la direction des hampes, mais +elle engendre un problème que l'on rencontre parfois avec de multiples +voix, à savoir que les hampes d'une voix peuvent chevaucher les têtes de +note des autres voix. En matière de mise en forme des notes, LilyPond +tolère que des notes ou accords appartenant à deux voix se retrouvent +dans le même empilement de notes (@emph{note column} en anglais) si tant +est que ces hampes vont dans des directions opposées@tie{}; néanmoins les +notes des troisième et quatrième voix seront décalées si nécessaire pour +éviter que les têtes ne se chevauchent. Cela marche plutôt bien mais, +dans notre exemple, les notes de la voix la plus basse ne sont vraiment +pas correctement placées. LilyPond met à notre disposition plusieurs +moyens d'ajuster le positionnement horizontal des notes. Nous ne sommes +pas encore tout à fait prêts pour voir comment corriger cela, aussi nous +examinerons ce problème dans un autre chapitre (voir la propriété +@code{force-hshift} dans @ref{Correction des collisions d'objets}). + + +@seealso +Manuel de notation : +@ruser{Plusieurs voix}. + + +@node Instanciation explicite des voix +@subsection Instanciation explicite des voix +@translationof Explicitly instantiating voices + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex Voice, création de contextes + +Les contextes @rinternals{Voice} peuvent être déclarés manuellement +dans un bloc @code{<< >>} pour créer de la musique polyphonique, en +utilisant @code{\voiceOne}, @dots{} jusqu'à @code{\voiceFour} pour +assigner des directions de hampes et un déplacement horizontal pour +chaque partie. Cette méthode apporte de la clarté pour des partitions +plus importantes puisqu'elle permet de bien séparer les voix et de leur +affecter un nom plus parlant. + +En particulier, la construction @code{<< \\ >>} que nous avons vue +précédemment@tie{}: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +équivaut à + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Toutes deux produiront + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex Voice, retour à un seul contexte +@cindex retour à un contexte Voice unique + +Les commandes @code{\voiceXXX} fixent la direction des hampes, des +liaisons de prolongation et de phrasé, des articulations, des +annotations, des points d'augmentation des notes pointées et des +doigtés. @code{\voiceOne} et @code{\voiceThree} font pointer ces objets +vers le haut, alors que @code{\voiceTwo} et @code{\voiceFour} les font +pointer vers le bas. Ces commandes génèrent par ailleurs un décalage +horizontal de chacune des voix pour éviter tout risque de chevauchement +entre plusieurs notes. La commande @code{\oneVoice} les ramène aux +critères normaux. + +Voyons, à l'aide de ces exemples simples, les effets respectifs de +@code{\oneVoice}, @code{\voiceOne} et @code{\voiceTwo} sur les +annotations, liaisons de prolongation ou de phrasé, et sur les nuances. + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +Voyons à présent trois différentes façons d'exprimer un passage +polyhonique, à partir d'un exemple de la section précédente. Chacune +d'elles aura ses avantages selon les circonstances. + +Une expression séquentielle qui apparaît en premier dans un @code{<< >>} +-- attention, @strong{pas} dans une construction @code{<< \\ >>} -- +appartient à la voix principale. Ceci est utile lorsque des voix +supplémentaires apparaissent pendant que la voix principale est jouée. +Voici une meilleure réalisation de notre exemple. +Les notes colorées et en croix mettent en évidence le fait que la +mélodie principale est maintenant dans un seul contexte de voix, ce qui +permet d'ajouter une liaison de phrasé à l'ensemble. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b c2 | + } + >> +} +@end lilypond + +@cindex imbrication d'expressions musicales +@cindex imbrication de constructions simultanées +@cindex voix temporaires +@cindex voix, imbrication + + +Dans certaines circonstances de polyphonie complexe, vous pourrez être +amené à recourir à une voix temporaire, ce qui peut être une manière +plus naturelle de saisir la musique@tie{}: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ | + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b c2 | + } + >> + } + >> +} +@end lilypond + +@cindex espacement des notes + +Cette manière de brièvement imbriquer des voix est bien utile pour de +courts fragments de musique polyphonique. Mais lorsqu'une portée est +très souvent polyphonique, on peut y gagner en clarté si l'on utilise +plusieurs voix sur l'ensemble de cette portée et que l'on positionne des +silences invisibles pour sauter les moments où il n'y a rien dans cette +voix. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e2) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b4 c2 | + } +>> +@end lilypond + +@subsubheading Empilement des notes +@translationof Note columns + +@cindex note column +@cindex empilement de notes +@cindex collisions de notes +@cindex shift, commandes +@cindex décalage, commandes + +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +Les notes rapprochées d'un accord, ou des notes de différentes voix qui +tombent ensemble, seront rangées sur deux colonnes, voire plus, pour +palier d'éventuels chevauchements des têtes. On appelle cela des +empilements de notes. Chaque voix dispose de plusieurs empilements, et +l'attribution d'un décalage à une voix en particulier s'appliquera à +l'empilement en question s'il y avait risque de collision. +Nous en avons une illustration à la deuxième mesure de l'exemple +ci-dessus@tie{}: le do de la deuxième voix est décalé à droite du ré de +la première voix et, dans l'accord final, le do de la troisième voix est +lui aussi décalé à droite des autres notes. + +Les commandes @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, et +@code{\shiftOff} spécifient le degré nécessaire de décalage qui sera +appliqué aux notes ou accords de la voix en question afin d'éviter une +collision. Par défaut, les voix extérieures -- normalement les +première et deuxième -- se verront attribuer @code{\shiftOff}, alors que +les voix intérieures -- trois et quatre -- se verront attribuer +@code{\shiftOn}. Lorsqu'un décalage s'applique, les voix un et trois +iront vers la droite, et les voix deux et quatre vers la gauche. + +@code{\shiftOnn} et @code{\shiftOnnn} définissent des degrés augmentés +de décalage auquel on peut devoir temporairement recourir dans des +situations complexes -- voir @ref{Exemple concret}. + +Un empilement peut ne contenir qu'une note ou un accord dans une voix +aux hampes vers le haut, et une note ou un accord dans une voix +aux hampes vers le bas. Dans le cas où des notes, issues de deux voix +ayant toutes deux des hampes dans la même direction, se retrouvent au +même moment et qu'aucun décalage n'a été spécifié ou qu'ils sont +identiques, LilyPond vous le signalera par le message @qq{Trop +d'empilements en conflit}. + + +@seealso +Manuel de notation : +@ruser{Plusieurs voix}. + + +@node Voix et paroles +@subsection Voix et paroles +@translationof Voices and vocals + +La musique vocale est une gageure en soi@tie{}: il nous faut combiner +deux expressions différentes -- des notes et des paroles. + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics + +@cindex Lyrics, création d'un contexte +@cindex paroles, affectation à une voix + +Nous avons déjà abordé la commande @code{\addlyrics@{@}}, qui permet de +gérer des partitions simples. Cette technique est cependant +relativement limitée. Pour de la musique un peu plus compliquée, il +vous faudra contenir les paroles dans un contexte @code{Lyrics}, créé +par la commande @code{\new Lyrics}@tie{}; vous relierez ensuite ces +paroles aux notes grâce à la commande @code{\lyricsto@{@}} et au nom +assigné à la voix en question. + +@lilypond[quote,verbatim] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +Notez bien que les paroles sont liées à un contexte de voix +(@code{Voice}), @strong{non} à un contexte de portée (@code{Staff}). Il +est donc nécessaire de créer explicitement les contextes @code{Staff} +et @code{Voice}. + +@cindex paroles et ligatures +@cindex ligatures et paroles + +@funindex \autoBeamOff +@funindex autoBeamOff + +Si la ligature automatique que LilyPond applique par défaut +est pleinement adaptée en matière de musique instrumentale, il +n'en va pas de même dans le cas d'une musique associée à des paroles, +et pour laquelle soit les ligatures sont carrément absentes, soit elles +servent à indiquer un mélisme -- plusieurs notes pour une même syllabe. +Dans l'exemple qui suit, nous utilisons la commande @code{\autoBeamOff} +afin de désactiver les ligatures automatiques. + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode + +@cindex structure d'une partition vocale +@cindex chœur, partie de + +Nous allons reprendre un extrait de Judas Maccabæus pour illustrer ce +que cette technique apporte en flexibilité. Nous commençons par +utiliser des variables -- ou identificateurs -- afin de séparer de la +structure de la portée aussi bien la musique que les paroles. Nous +ajoutons par la même occasion un crochet spécifique aux portées pour +chœur (@code{ChoirStaff}). Quant aux blocs de paroles, nous les faisons +précéder de la commande @code{\lyricmode} pour nous assurer qu'elles +seront interprétées comme telles, et non comme de la musique. + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +Voici donc la structure de base valable pour toute partition vocale. On +peut y ajouter d'autres portées si besoin est, d'autres voix à chaque +portée, plusieurs couplets aux paroles, et les variables contenant la +musique peuvent même être stockées dans des fichiers indépendants dès +lors que leur longueur devient conséquente. + +@cindex structure d'hymne +@cindex SATB, structure +@cindex partition vocale avec plusieurs couplets +@cindex couplets multiples et musique vocale + +Voici maintenant la première ligne d'une hymne pour chœur à quatre voix +mixtes, comportant quatre couplets. Les paroles sont ici identiques +pour les quatre voix. Vous remarquerez le recours aux variables afin de +séparer de la structure de portée aussi bien les notes que les paroles. +Vous noterez aussi une variable particulière, que nous avons appelée +@qq{ArmureMetrique}, et qui contient plusieurs commandes que nous +utiliserons dans les deux portées. Dans de nombreux autres exemples, +elle s'appelle @qq{global}. + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@seealso +Manuel de notation : +@ruser{Musique vocale}. + + +@node Contextes et graveurs +@section Contextes et graveurs +@translationof Contexts and engravers + +Nous avons évoqué rapidement les contextes et graveurs dans les +chapitres précédents@tie{}; examinons en détail ces concepts essentiels +à la maîtrise de LilyPond. + +@menu +* Tout savoir sur les contextes:: +* Création d'un contexte:: +* Tout savoir sur les graveurs:: +* Modification des propriétés d'un contexte:: +* Ajout et suppression de graveurs:: +@end menu + +@node Tout savoir sur les contextes +@subsection Tout savoir sur les contextes +@translationof Contexts explained + +@cindex contextes, les différents + +Imprimer de la musique impose d'ajouter un certain nombre d'éléments de +notation. Par exemple, voici un fragment de partition, précédé du code +qui l'engendre@tie{}: + +@lilypond[quote,verbatim,relative=2] +cis4 cis2. | a4 a2. | +@end lilypond + +Si le code est assez austère, dans la partition ont été ajoutés un +chiffre de mesure, des barres de mesure, des altérations et une clé. +Pour une bonne raison@tie{}: LilyPond @emph{interprète} le code. Il le +compulse dans l'ordre chronologique, de même qu'on lit une partition de +gauche à droite@tie{}; et pendant ce traitement, le logiciel garde en +mémoire les limites des mesures, ou encore quelles hauteurs de note +demandent des altérations accidentelles. Ces informations se présentent +à plusieurs niveaux@tie{}: ainsi, une altération n'a d'effet que sur une +seule portée, tandis qu'une barre de mesure doit être synchronisée sur +toute l'étendue verticale de la partition. + +LilyPond regroupe ces règles et ces fragments d'information dans des +@emph{Contextes}. Certains contextes sont les voix (contexte +@code{Voice}), les portées (contexte @code{Staff}), ou la partition dans +son ensemble (contexte @code{Score}). Ils sont ordonnés +hiérarchiquement@tie{}: ainsi un contexte @code{Staff} peut contenir +plusieurs contextes @code{Voice}, et un contexte @code{Score} peut +contenir plusieurs contextes @code{Staff}. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Chaque contexte est chargé de faire appliquer certaines règles de +gravure, de créer certains objets, et de prendre en compte les +propriétés qui leur sont associées. Ainsi, le contexte @code{Voice} +peut faire intervenir une altération accidentelle, puis le contexte +@code{Staff} devra déterminer s'il faudra imprimer ou non cette dernière +dans la suite de la mesure. + +Les barres de mesure, quant à elles, sont alignées verticalement grâce +au contexte @code{Score} par défaut. +En revanche, dans une musique polymétrique, par exemple mêlant une +portée à 3/4 et une autre à 4/4, les barres de mesures n'ont plus à être +alignées@tie{}: il faut alors modifier les comportement par défaut des +contextes @code{Score} et @code{Staff}. + +Dans une partition très simple, les contextes sont créés implicitement +et peuvent être ignorés. Mais lorsqu'il s'agit de morceaux plus amples +-- entendons par là tout ce qui s'écrit sur plus d'une portée -- il faut +les créer explicitement pour être sûr d'obtenir toutes les portées +nécessaires, et dans le bon ordre. Enfin, pour des morceaux impliquant +une notation spéciale, modifier les contextes ou en créer de nouveaux +devient extrêment utile. + +En plus des contextes @code{Score}, @code{Staff} et @code{Voice} sont +disponibles d'autres contextes intermédiaires entre les niveaux +partition et portée, chargés de gérer certains regroupement, tels que +@code{PianoStaff} ou @code{ChoirStaff}. Vous disposez aussi d'autres +contextes de portée ou de voix alternatifs, ainsi que des contextes +spécifiques pour les paroles, les percussions, les diagrammes pour +instruments frettés, la basse chiffrée, etc. + +Le nom de chacun des contextes est formé d'un ou plusieurs mots aux +initiales en capitale et directement accolés les uns aux autres sans +ponctuation, comme par exemple @code{GregorianTranscriptionStaff}. + + +@seealso +Manuel de notation : +@ruser{Tout savoir sur les contextes}. + + +@node Création d'un contexte +@subsection Création d'un contexte +@translationof Creating contexts + +@funindex \new +@funindex new + +@cindex nouveaux contextes +@cindex contextes, création de + +Il en va des contextes comme de toute hiérarchie@tie{}: il faut un +sommet -- le contexte @code{Score} en l'occurence. La commande +@code{\score} est chargée de le créer, mais pour des partitions simples, +il le sera automatiquement. Le bloc @code{\score} contient donc une +expression musicale unique ainsi que la définition des supports à +produire -- @code{\layout} pour du visuel ou @code{\midi} pour de +l'acoustique. + +Lorsqu'une partition ne comporte qu'une voix et une seule portée, vous +pouvez laisser LilyPond créer automatiquement les contextes @code{Voice} +et @code{Staff}@tie{}; mais leur présence explicite devient +indispensable dès que la situation se complique. +Le moyen le plus simple est d'utiliser la commande @code{\new}. Elle +doit intervenir avant une expression musicale, ainsi@tie{}: + +@example +\new @var{type} @var{expression-musicale} +@end example + +@noindent +où @var{type} correspond au nom du contexte (tels @code{Staff} ou +@code{Voice}). Cette commande crée un nouveau contexte, puis +interprète l'@var{expression-musicale} contenue dans ledit +contexte. + +@warning{La commande @bs{}@code{new Score} ne devrait jamais servir en +début de partition, puisque le contexte premier que constitue +@code{Score} est créé automatiquement par l'interprétation de +l'@var{expression-musicale} contenue dans le bloc @code{\score}. Les +adaptations affectant les propriétés des différents contextes et qui +s'appliqueront à l'ensemble de la partition trouvent leur place au sein +d'un bloc @bs{}@code{layout}, en suivant les préceptes énoncés au +chapitre @ref{Modification des propriétés d'un contexte}.} + +Nous avons déjà vu au cours des chapitres précédents de nombreux +exemples où des contextes @code{Staff} ou @code{Voice} étaient créés au +besoin. Dans un but didactique, voici maintenant une application +complète et abondamment commentée@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \key g \minor + \clef "treble" + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. | + d4 ees16 c8. | + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \key g \minor + \clef "bass" + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, | + g8 ees, | + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees | + g4 ees | + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +Notez que toute déclaration qui ouvre un bloc par une +accolade, @code{@{}, ou un double chevron gauche, @code{<<}, est +indentée de deux espaces supplémentaires, et de deux autres pour sa +marque de fermeture. Bien que ceci ne soit pas obligatoire, nous vous +invitons à adopter cette pratique qui vous évitera nombre d'erreurs +@qq{accolades non appariées}. La structure de la musique apparaît ainsi +au premier coup d'œil, et les défauts de parité sont plus facilement +repérables. Vous remarquerez que la portée MG est créée à l'aide d'un +double chevron gauche -- nécessaire pour gérer ses deux voix -- alors +que la portée MD ne contient qu'une seule expression musicale -- il n'y +a qu'une voix -- bornée par des accolades simples. + +@cindex contexte, nommage +@cindex nommage des contextes + +La commande @code{\new} peut aussi permettre de nommer le contexte créé, +et ainsi le distinguer des autres contextes déjà existants@tie{}: + +@example +\new @var{type} = @var{"UnNom"} @var{expression-musicale} +@end example + +Vous noterez la distinction entre le nom du type de contexte, +@code{Staff}, @code{Voice}, etc. et le nom -- une simple suite de +lettres au bon gré de l'utilisateur -- permettant d'identifier une +instance particulière du type en question. Vous pouvez utiliser des +chiffres et espaces, à la stricte condition d'englober le tout dans des +guillemets@tie{}; l'identificateur suivant est tout à fait valide@tie{}: +@w{@code{\new Staff = "MaPortee 1" @var{expression-musicale}}}. +Comme nous l'avons déjà vu dans le chapitre consacré aux paroles +(@ref{Voix et paroles}), cet identifiant permettra ensuite de se +référer à ce contexte particulier. + + +@seealso +Manuel de notation : +@ruser{Création d'un contexte}. + + +@node Tout savoir sur les graveurs +@subsection Tout savoir sur les graveurs +@translationof Engravers explained + +@cindex engravers +@cindex graveurs + +Tout point qui compose une partition générée par LilyPond est +produit par un graveur (@emph{engraver} en anglais). Ainsi, il y en a +un qui imprime les portées, un autre les têtes de note, un autre les +hampes, un autre encore pour les ligatures, etc. LilyPond dispose de +plus de 120 graveurs@tie{}! La plupart des partitions ne requièrent de +s'intéresser qu'à quelques-uns seulement, et pour des partitions +simples, vous n'aurez même pas à vous en préoccuper. + +Les graveurs résident et opèrent au sein des contextes. +Les graveurs tels que le @code{Metronome_mark_engraver}, dont les effets +s'appliquent à la partition dans son intégralité, opèrent au sein du +contexte de plus haut niveau -- le contexte @code{Score}. + +Les graveurs @code{Clef_engraver} et @code{Key_engraver} seront logés +dans chacun des contextes @code{Staff}@tie{}; deux portées peuvent +requérir des clefs et des armures différentes. + +Les graveurs @code{Note_heads_engraver} et @code{Stem_engraver} résident +dans chacun des contextes @code{Voice}, contexte du plus bas niveau. + +Chaque graveur confectionne les objets spécifiquement associés à sa +fonction et traite les propriétés attachées à cette fonction. Ces +propriétés, tout comme celles relatives aux contextes, peuvent être +modifiées afin d'influencer le comportement du graveur et par voie de +conséquence le rendu des éléments dont il a la charge. + +Les graveurs ont tous un nom composé, formé des différents mots +décrivant leur fonction. Seule l'initiale du premier mot est en +majuscule, et les mots qui le composent sont joints par un caractère +souligné. Ainsi, le @code{Staff_symbol_engraver} est chargé de créer +les lignes de la portée, et le @code{Clef_engraver} détermine la hauteur +de référence de la portée en dessinant le symbole de la clef. + +Voici quelques-uns des graveurs les plus courants, ainsi que leur +fonction. Vous noterez qu'il est facile d'en connaître la fonction à +partir du nom, et vice versa. + +@multitable @columnfractions .3 .7 +@headitem Graveur + @tab Fonction +@item Accidental_engraver + @tab Crée les altérations, y compris de précaution, accidentelles ou suggérées +@item Beam_engraver + @tab Grave les ligatures (@emph{beams}) +@item Clef_engraver + @tab Grave les clefs +@item Completion_heads_engraver + @tab Divise les notes qui dépassent de la mesure +@item New_dynamic_engraver + @tab Crée les soufflets et textes de nuance +@item Forbid_line_break_engraver + @tab Empêche un saut de ligne si un élément musical est toujours actif +@item Key_engraver + @tab Crée l'armure +@item Metronome_mark_engraver + @tab Grave les indications métronomiques +@item Note_heads_engraver + @tab Grave les têtes de note +@item Rest_engraver + @tab Grave les silences +@item Staff_symbol_engraver + @tab Grave les cinq lignes (par défaut) de la portée +@item Stem_engraver + @tab Crée les hampes et les trémolos sur une hampe unique +@item Time_signature_engraver + @tab Crée les métriques +@end multitable + +@smallspace + +Nous verrons plus avant comment le résultat de LilyPond peut changer +lorsqu'on modifie l'action des graveurs. + + +@seealso +Référence des propriétés internes : +@rinternals{Engravers and Performers}. + + +@node Modification des propriétés d'un contexte +@subsection Modification des propriétés d'un contexte +@translationof Modifying context properties + +@cindex contexte, propriétés +@cindex propriétés d'un contexte, modification +@cindex modification des propriétés d'un contexte + +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +Les contextes gèrent les différentes valeurs des nombreuses +@emph{propriétés} qui leur sont attachées. Beaucoup d'entre elles +sont susceptibles d'être modifiées afin d'influer sur l'interprétation +de l'input et ainsi changer l'apparence du résultat. On les modifie +grâce à la commande @code{\set}, qui s'utilise ainsi@tie{}: + +@example +\set @emph{ContexteNommé}.@emph{propriétéNommée} = #@emph{valeur} +@end example + +où @emph{ContexteNommé} est habituellement @code{Score}, +@code{Staff} ou @code{Voice}. S'il n'est pas mentionné, il sera +considéré comme étant @code{Voice}. + +Les noms des propriétés de contexte sont composés de mots accolés sans +trait d'union ni caractère souligné, et dont seul le premier n'aura pas +d'initiale en majuscule. Voici quelques exemples de celles les plus +communément utilisées. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem propriétéNommée + @tab Type + @tab Fonction + @tab Exemple de valeur +@item extraNatural + @tab Booléen + @tab Si vrai, ajoute un bécarre avant une altération accidentelle + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Entier + @tab Détermine le numéro de la mesure en cours + @tab @code{50} +@item doubleSlurs + @tab Booléen + @tab Si vrai, imprime les liaisons au-dessous @strong{et} au-dessus des notes + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Texte + @tab Détermine le nom à afficher en début de portée + @tab @code{"Cello I"} +@item fontSize + @tab Réel + @tab Augmente ou diminue la taille de la fonte + @tab @code{2.4} +@item stanza + @tab Texte + @tab Détermine le texte à imprimer avant le début d'un couplet + @tab @code{"2"} +@end multitable + +@noindent +où un boléen correspond soit à vrai (@code{#t} pour @emph{True} en +anglais) ou faux (@code{#f} pour @emph{False} en anglais), un entier est +un nombre entier positif, un réel est un nombre décimal positif ou +négatif, et texte correspond à une suite de caractères encadrée par des +apostrophes doubles. Attention à la présence des signes dièse +(@code{#}) dans deux cas particuliers@tie{}: ils sont partie intégrante +des valeurs boléennes et précèdent les @code{t} ou @code{f}, mais +doivent aussi précéder @emph{valeur} dans le libellé de la commande +@code{\set}. Il faudra donc, dans le cas d'une valeur boléenne, ne pas +oublier de saisir deux signes dièse -- par exemple @code{##t}. + +@cindex propriétés et contextes +@cindex réglage de propriétés au sein des contextes + +Avant de déterminer l'une de ces propriétés, nous devons savoir dans +quel contexte elle intervient. Si cela est bien souvent évident, il +peut arriver que cela tourne au cauchemar. Lorsque vous ne spécifiez +pas le bon contexte, aucun message d'erreur ne s'affiche et l'effet +attendu n'est pas au rendez-vous. Par exemple, le @code{instrumentName} +est de manière incontestable membre du contexte @code{Staff}, puisque +c'est bien la portée que l'on va nommer. +Dans l'exemple suivant, la première portée affiche effectivement un nom, +alors que ce n'est pas le cas pour la deuxième dans la mesure où le +contexte n'a pas été spécifié. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c4 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d4 d + } +>> +@end lilypond + +Dans la mesure où le nom de contexte par défaut est @code{Voice}, la +deuxième commande @code{\set} a défini @qq{Alto} comme propriété +@code{instrumentName} du contexte de voix. Puisque LilyPond n'ira pas +chercher une telle propriété dans le contexte @code{Voice}, celle-ci ne +sera pas interprétée. Il ne s'agit pas d'une erreur, aucun message +d'erreur ne sera ni émis ni enregistré. + +De la même manière, une faute d'orthographe dans le nom de la propriété +ne génèrera aucun message d'erreur et l'action escomptée ne se produira +pas. Vous pourriez déterminer par la commande @code{\set} n'importe +quelle @qq{propriété}, même fictive, à partir de n'importe quel nom et +dans n'importe lequel des contextes disponibles. Mais tant que ce nom +est inconnu de LilyPond, rien ne se passera. Certains éditeurs de texte +disposent d'une prise en charge spécifique aux fichiers source LilyPond, +à l'instar de LilyPondTool couplé à JEdit et qui documente les noms des +propriétés dans une infobulle lorsque vous les survolez à la souris, ou +les souligne différemment s'ils sont inconnus, comme ConTEXT. Dans le +cas où votre éditeur ne dispose pas de ces fonctionnalités, nous vous +recommandons de vérifier le nom des propriétés que vous manipulez dans +la Référence des propriétés internes -- voir +@rinternals{Tunable context properties}, ou @rinternals{Contexts}. + +La propriété @code{instrumentName} ne sera prise en compte que si elle +est définie dans un contexte @code{Staff}@tie{}; d'autres propriétés +peuvent par contre être définies dans plusieurs contextes différents. +C'est le cas de la propriété @code{extraNatural} qui est définie par +défaut à @code{##t} (vrai) pour toutes les portées. Si vous lui +attribuez la valeur @code{##f} (faux) dans un contexte @code{Staff} +particulier, elle ne s'appliquera qu'aux altérations de la portée en +question@tie{}; si vous lui attribuez la valeur @qq{faux} au niveau du +contexte @code{Score}, cela s'appliquera alors à toutes les portées. + +Voici comment supprimer les bécarres supplémentaires pour une +portée@tie{}: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +et pour toutes les portées : + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +Autre exemple, si la propriété @code{clefOctavation} est déterminée au +niveau du contexte @code{Score}, elle modifiera la valeur de l'octave en +cours pour toutes les portées actives@tie{}; cette valeur sera considérée +comme étant la nouvelle valeur par défaut pour toutes les portées à +venir. + +La commande opposée, @code{\unset}, efface la propriété du +contexte@tie{}; la plupart des propriétés reviennent de ce fait à leur +valeur par défaut. En règle générale, la commande @code{\unset} n'est +pas nécessaire dès lors que vous faites appel à une nouvelle commande +@code{\set} pour modifier le réglage. + +Les commandes @code{\set} et @code{\unset} peuvent intervenir n'importe +où dans votre fichier source. Elles seront effectives dès leur +apparition et jusqu'à la fin de la partition, à moins d'être affectées +par un @code{\unset} ou un nouveau @code{\set}. À titre d'exemple, nous +allons jouer avec la taille des fontes, ce qui affecte entre +autres la grosseur des têtes de note. Les modifications s'appliquent +toujours par rapport à la valeur par défaut, non par rapport à la +dernière valeur définie. + +@lilypond[quote,verbatim,ragged-right,relative=1] +c4 d +% make note heads smaller +\set fontSize = #-4 +e4 f | +% make note heads larger +\set fontSize = #2.5 +g4 a +% return to default size +\unset fontSize +b4 c | +@end lilypond + +Nous venons de voir comment déterminer la valeur de différents types de +propriété. N'oubliez pas que les nombres, entiers ou réels, doivent +être précédés d'un signe dièse (@code{#}) et les valeurs vrai ou faux de +deux signes dièse -- respectivement @code{##t} et @code{##f} --. Une +valeur textuelle doit être encadrée de guillemets anglais, +@code{"@dots{ }"}, bien que, comme nous le constaterons plus tard, la +commande @code{\markup} permet aussi de spécifier du texte. + +@subsubheading Définition des propriétés de contexte avec @code{\with} +@translationof Setting context properties with @code{\with} + +@funindex \with +@funindex with + +@cindex propriétés d'un contexte, définition avec \with + +Les propriétés d'un contexte peuvent aussi être réglées lors de la +création de ce contexte. Ceci constitue parfois une façon plus claire +de spécifier les valeurs d'une propriété pour la durée de vie du +contexte. Lorsque vous créez un contexte à l'aide de la commande +@code{\new}, vous pouvez la faire suivre immédiatement d'un bloc +@w{@code{\with @{ .. @}}} qui contiendra les réglages des différentes +propriétés. Ainsi, si nous voulions par exemple annuler l'impression +des bécarres supplémentaires sur la durée d'une portée, nous +écririons@tie{}: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +ce qui donnerait : + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff + \relative c'' { + gis4 ges aes ais + } + \new Staff \with { extraNatural = ##f } { + \relative c'' { + gis4 ges aes ais + } + } +>> +@end lilypond + +Les propriétés réglées de cette manière peuvent néanmoins être modifiées +de façon dynamique grâce à @code{\set}@tie{}; un @code{\unset} les +ramènera à leur valeur initialisée par @code{\with}. + +@cindex fontSize, valeur par défaut et réglage + +La propriété @code{fontSize} constitue une exception@tie{}: lorsqu'elle +est déterminée au sein d'un bloc @code{\with}, cela redéfinit la valeur +par défaut de la taille de fonte. Une modification est possible par la +commande @code{\set}, mais la commande @code{\unset fontSize} fera +revenir à la nouvelle valeur par défaut. + +@subsubheading Définition des propriétés de contexte avec @code{\context} +@translationof Setting context properties with @code{\context} + +@cindex propriétés d'un contexte, définition avec \context + +@funindex \context +@funindex context + +Vous pouvez régler les valeurs des propriétés de contexte en une seule +fois pour tous les contextes d'un même type, par exemple tous les +contextes @code{Staff}. Le type du contexte doit être donné +explicitement d'après son nom, par exemple @code{Staff}, précédé d'une +oblique inverse, donc nous saisirons @code{\Staff}. La manière de +régler la valeur des propriétés est la même que ce que nous avons vu +avec la commande @code{\with}, puisqu'on se place dans un bloc +@code{\context} inclus dans un bloc @code{\layout}. Chaque bloc +@code{\context} affectera tous les contextes concernés par le bloc +@code{\score} ou @code{\book} au sein duquel apparaît ce bloc +@code{\layout}. Voici comment le mettre en place@tie{}: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond + +Dans le cas où ces ajustements de propriété doivent affecter +toutes les portées de la partition, nous utiliserons alors@tie{}: + +@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 +Les propriétés de contexte ainsi définies peuvent être adaptées pour +chacun des contextes en particulier grâce à un bloc @code{\with} ou bien +une commande @code{\set} au fil des notes. + + +@seealso +Manuel de notation : +@ruser{Modification des réglages par défaut d'un contexte}, +@ruser{La commande de fixation (set)}. + +Référence des propriétés internes : +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Ajout et suppression de graveurs +@subsection Ajout et suppression de graveurs +@translationof Adding and removing engravers + +@cindex graveurs, ajout +@cindex graveurs, suppression + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +Nous avons vu que chaque contexte met en œuvre plusieurs graveurs, et +que chacun de ces graveurs est chargé de générer une composante +particulière du fichier de sortie, qui les barres de mesure, qui la +portée, qui les têtes de note, les hampes, etc. Le fait de supprimer un +graveur d'un contexte éliminera sa contribution au fichier de sortie. +Bien que ce soit là un moyen radical de modifier le résultat, cette +pratique est dans quelques cas fort utile. + +@subsubheading Modification d'un seul contexte +@translationof Changing a single context + +Nous utilisons, pour supprimer un graveur d'un contexte, la commande +@code{\with} dès la création dudit contexte, comme nous l'avons vu dans +la section précédente. + +Illustrons notre propos en reprenant un exemple du chapitre précédent, +duquel nous supprimerons les lignes de la portée. Pour mémoire, les +lignes d'une portée sont générées par le @code{Staff_symbol_engraver}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % make note heads smaller + e4 f | + \set fontSize = #2.5 % make note heads larger + g4 a + \unset fontSize % return to default size + b4 c | +} +@end lilypond + +@cindex ambitus, graveur + +Vous pouvez aussi ajouter individuellement un graveur à un contexte. La +commande se formule ainsi@tie{}: + +@code{\consists @var{Nom_du_graveur}} + +@noindent +et se place dans un bloc @code{\with}. Certaines partitions vocales +font apparaître un @rglos{ambitus} au début de la portée, afin +d'indiquer ses notes extrêmes. L'ambitus est généré par +l'@code{Ambitus_engraver}, que l'on peut adjoindre à n'importe quel +contexte. Si nous l'ajoutons au contexte @code{Voice}, seule la +tessiture de cette voix sera calculée@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +alors que si nous l'ajoutons au contexte @code{Staff}, +l'@code{Ambitus_engraver} calculera l'écart maximal à partir de toutes +les notes de toutes les voix de la portée@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@subsubheading Modification de tous les contextes d'un même type +@translationof Changing all contexts of the same type + +@funindex \layout +@funindex layout + +Les exemples ci-dessus nous ont montré comment ajouter ou retirer des +graveurs à des contextes individuels. Nous pourrions aussi ajouter ou +supprimer des graveurs à tous les contextes d'un même type en insérant +les commandes pour le contexte approprié au sein d'un bloc +@code{\layout}. Si nous voulions afficher un ambitus pour chacune des +portées d'un système à quatre portées, il nous suffirait d'écrire@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +Vous réglerez de la même manière les propriétés de tous les contextes +d'un type particulier si vous insérez les commandes @code{\set} dans un +bloc @code{\context}. + +@seealso +Manuel de notation : +@ruser{Modification des greffons de contexte}, +@ruser{Modification des réglages par défaut d'un contexte}. + +@knownissues +Dans la mesure où les @code{Stem_engraver} et @code{Beam_engraver} +rattachent à des têtes de note les objets qu'ils créent, désactiver le +@code{Note_heads_engraver} entraîne l'absence de hampe et de ligature. + + +@node Extension des modèles +@section Extension des modèles +@translationof Extending the templates + +Bon, vous avez lu le tutoriel, vous savez écrire de la musique. Mais +comment obtenir les portées que vous voulez@tie{}? Les @ref{Modèles}, +c'est bien beau, mais que faire quand ils ne traitent pas ce que l'on +veut précisément@tie{}? + +Les exemples qui suivent vous donneront des méthodes générales pour +adapter des modèles. + +@menu +* Soprano et violoncelle:: +* Partition pour chœur à quatre voix mixtes:: +* Écriture d'une partition à partir de zéro:: +* Économie de saisie grâce aux identificateurs et fonctions:: +* Conducteurs et parties:: +@end menu + +@node Soprano et violoncelle +@subsection Soprano et violoncelle +@translationof Soprano and cello + +@cindex modèles, modification des + +Commencez par le modèle qui vous semblera le plus proche de ce à quoi +vous voulez aboutir. Disons par exemple que vous voulez écrire une pièce +pour soprano et violoncelle@tie{}: dans ce cas, on pourrait commencer +par les @qq{notes et paroles}, pour la partie de soprano. + +@example +\version @w{"@version{}"} + +melodie = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +texte = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score@{ + << + \new Voice = "un" @{ + \autoBeamOff + \melodie + @} + \new Lyrics \lyricsto "un" \texte + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Maintenant, on veut ajouter une partie de violoncelle. +Jetons un coup d'œil sur l'exemple avec les notes seules@tie{}: + +@example +\version @w{"@version{}"} + +melodie = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melodie + \layout @{ @} + \midi @{ @} +@} +@end example + +On n'a pas besoin de deux commandes @code{\version}. Ce dont on a +besoin, c'est de la section @code{melodie}. De même, on n'a pas besoin +de deux sections @code{\score} -- si nous les gardions toutes les deux, +on obtiendrait deux parties séparées@tie{}; mais nous voulons un vrai +duo, avec les deux parties ensemble. Dans la section @code{\score}, on +n'a pas besoin non plus de deux @code{\layout} ni de deux @code{\midi}. + +Si on se contente de couper et coller les sections @code{melodie}, on se +retrouvera avec deux sections de ce nom@tie{}; il nous faut donc les +renommer. Appelons la section pour la soprano @code{sopranoMusique} et +celle pour le violoncelle @code{violoncelleMusique}. Tant qu'on y est, +renommons @code{texte} en @code{sopranoParoles}. Attention à bien +renommer les deux occurrences de chacune de ces dénominations@tie{}: +c'est-à-dire la définition de départ, où l'on trouve @w{@code{melodie = +\relative c' @{ }}, et l'endroit où cette dénomination est utilisée, +dans la section @code{\score}. + +Et puis, toujours tant qu'on y est, mettons le violoncelle en clé de fa, +comme le veut l'usage, et donnons-lui d'autres notes. + +@example +\version @w{"@version{}"} + +sopranoMusique = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +sopranoParoles = \lyricmode @{ + Laaa Siii Dooo Rééé +@} + +violoncelleMusique = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score@{ + << + \new Voice = "un" @{ + \autoBeamOff + \sopranoMusique + @} + \new Lyrics \lyricsto "un" \sopranoParoles + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Voilà qui est mieux, mais la partie de violoncelle n'apparaît pas sur +la partition -- en effet, nous n'y avons pas fait appel dans la section +@code{\score}. Si l'on veut que la partie de violoncelle s'imprime sous +la partie de soprano, on va devoir ajouter@tie{}: + +@example +\new Staff \musiqueVioloncelle +@end example + +@noindent +en dessous de tout ce qui concerne la soprano. Il nous faut également +encadrer la musique par des @code{<<} et @code{>>}, qui feront comprendre +à LilyPond que plusieurs événements -- ici, des objets @code{Staff} -- +se déroulent en même temps. Le bloc @code{\score} ressemble maintenant à + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "un" @{ + \autoBeamOff + \sopranoMusique + @} + \new Lyrics \lyricsto "un" \sopranoParoles + >> + \new Staff \violoncelleMusique + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +C'est un peu le bazar dans tout ça@tie{}; mais il vous sera facile de +mettre un peu d'ordre dans l'indentation. Voici le modèle pour +soprano et violoncelle au complet@tie{}: + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +Les patrons originaux sont disponibles à l'annexe @qq{Modèles}, voir +@ref{Portée unique}. + + +@node Partition pour chœur à quatre voix mixtes +@subsection Partition pour chœur à quatre voix mixtes +@translationof Four-part SATB vocal score + +@cindex exemple, SATB +@cindex SATB, squelette + +La plupart des œuvres écrites pour chœur à quatre voix mixtes et +orchestre, comme Elias de Mendelssohn ou le Messie de Haendel, disposent +la musique et les paroles du chœur sur quatre portées -- soprano, alto, +ténor et basse -- surmontant une réduction pour piano de +l'accompagnement orchestral. En voici un exemple, tiré du Messie de +Haendel@tie{}: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} + +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords + +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords + +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords + +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} + +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +Aucun des modèles ne permet d'arriver exactement à cette mise en forme. +Celui qui s'en rapprocherait le plus est @qq{SATB vocal score and +automatic piano reduction} -- voir @ref{Ensemble vocal} -- mais encore +faudrait-il en modifier la mise en forme et refaire la partie de +piano qui n'est plus une simple reprise des parties vocales. Les +variables qui gèrent la musique et les paroles du chœur ne nécessitent +pas de modification, mais il nous faut d'autres variables pour la +réduction de piano. + +L'ordre dans lequel apparaissent les contextes dans le @code{ChoirStaff} +du modèle ne correspond pas à ce que nous voyons ci-dessus. Il nous +faudra y revenir pour obtenir quatre portées avec des paroles en dessous +de chacune d'elles. Toutes les voix devraient être @code{\voiceOne}, +ce qui est la position par défaut@tie{}; il nous faudra donc éliminer +toutes les commandes @code{\voiceXXX}. Les ténors auront besoin d'une +clé spécifique. Enfin, nous n'avons pas encore abordé la façon dont les +paroles sont présentées dans le modèle@tie{}; nous procèderons donc +comme nous en avons l'habitude. Il faudra aussi ajouter un nom à chaque +portée. + +Une fois tout ceci accompli, voici notre @code{ChoirStaff}@tie{}: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \sopranoMusique + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoParoles + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \altoMusique + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoParoles + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusique + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorParoles + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusique + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassParoles + @} +>> % fin du ChoirStaff +@end example + +Il nous faut maintenant nous occuper de la partie de piano. Nous allons +nous contenter de récupérer la partie de piano du modèle +@qq{Solo piano}@tie{}: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \superieur + \new Staff = "lower" \inferieur +>> +@end example + +puis d'ajouter les définitions de variable pour @code{superieur} et +@code{inferieur}. + +Les systèmes pour chœur et pour piano doivent être combinés à l'aide de +doubles chevrons gauche/droite puisqu'ils doivent s'empiler@tie{}: + +@example +<< % combine ChoirStaff et PianoStaff l'un au-dessus de l'autre + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusique + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoParoles + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusique + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoParoles + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusique + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorParoles + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusique + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassParoles + @} + >> % fin du ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \superieur + \new Staff = "lower" \inferieur + >> +>> +@end example + +Une fois tout cela mis en place, et après avoir ajouté les notes et les +paroles de ces trois mesures du Messie, nous obtenons@tie{}: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Écriture d'une partition à partir de zéro +@subsection Écriture d'une partition à partir de zéro +@translationof Building a score from scratch + +@cindex modèles, création +@cindex squelettes, création + +Après avoir acquis une certaine dextérité dans l'écriture de code +LilyPond, vous devez vous sentir suffisament prêt à vous lancer dans +la création d'une partition à partir de zéro, autrement dit en ne +partant pas d'un exemple. Vous pourrez ainsi vous construire vos +propres patrons selon le type de musique que vous affectionnez plus +particulièrement. Pour voir comment procéder, nous allons monter la +partition d'un prélude pour orgue. + +Nous débutons par une section d'en-tête@tie{}; nous y mettrons entre +autres le titre et le nom du compositeur. Puis viennent toutes les +définitions de toutes les variables. Nous terminons par le bloc +@code{\score}. Attelons-nous pour cette aventure, en gardant bien à +l'esprit ce que nous venons de dire@tie{}; nous nous occuperons des +détails en temps voulu. + +Nous nous appuyons sur les deux premières mesures du prélude sur +@emph{Jesu, meine Freude}, écrit pour orgue avec pédalier. Vous pouvez +voir ces deux mesures au bas de cette page. La main droite comporte +deux voix, la main gauche et le pédalier une seule. Il nous faut donc +quatre définitions de musique, plus une qui contiendra la métrique et +l'armure@tie{}: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +ArmureMetrique = @{ \key c \minor \time 4/4 @} +ManuelUnVoixUnMusique = @{ s1 @} +ManuelUnVoixDeuxMusique = @{ s1 @} +ManuelDeuxMusique = @{ s1 @} +PedalierOrgueMusique = @{ s1 @} + +\score @{ +@} +@end example + +Pour l'instant, nous utilisons des silences invisibles, @code{s1}, en +lieu et place des notes réelles. On verra plus tard. + +Passons maintenant au bloc @code{\score} et à ce qu'il devrait contenir. +Nous y recopions simplement la structure des portées que nous voulons. +La musique pour orgue se présente généralement sous la forme de trois +portées, une pour chaque main et une pour le pédalier. Les portées du +manuel sont regroupées, nous utiliserons donc un @code{PianoStaff}. La +première partie du manuel requiert deux voix et la seconde une seule. + +@example +\new PianoStaff << + \new Staff = "ManuelUn" << + \new Voice @{ + \ManuelUnVoixUnMusique + @} + \new Voice @{ + \ManuelUnVoixDeuxMusique + @} + >> % fin du contexte de portée ManuelUn + \new Staff = "ManuelDeux" << + \new Voice @{ + \ManuelDeuxMusique + @} + >> % fin du contexte de portée ManuelDeux +>> % fin du contexte PianoStaff +@end example + +Il nous faut ajouter à cela une portée pour le pédalier. Elle se place +sous le système de piano, mais puisqu'elle doit rester synchrone avec +lui, nous utilisons des doubles chevrons pour les regrouper. +Négliger ceci nous renverrait une erreur, et personne n'est à l'abri de +cette faute@tie{}! Pour preuve, il vous suffit de copier l'exemple +complet en fin de chapitre, de supprimer ces @code{<<} et @code{>>}, et +de le compiler, pour voir de quoi il retourne. + +@example +<< % Système pianistique et portée de pédalier sont synchrones + \new PianoStaff << + \new Staff = "ManuelUn" << + \new Voice @{ + \ManuelUnVoixUnMusique + @} + \new Voice @{ + \ManuelUnVoixDeuxMusique + @} + >> % fin du contexte de portée ManuelUn + \new Staff = "ManualDeux" << + \new Voice @{ + \ManuelDeuxMusique + @} + >> % fin du contexte de portée ManuelDeux + >> % fin du contexte PianoStaff + \new Staff = "PedalierOrgue" << + \new Voice @{ + \PedalierOrgueMusique + @} + >> +>> +@end example + +La construction en simultané -- @code{<<...>>} -- n'est pas strictement +obligatoire pour les portées manuel deux et pédalier, qui ne contiennent +chacune qu'une seule expression musicale@tie{}; mais cela ne mange pas +de pain, et c'est une bonne habitude que de toujours encadrer par des +doubles chevrons gauche/droite ce qui suit une commande @code{\new +Staff} au cas où il y aurait plusieurs voix. Il en va autrement pour +les contextes @code{Voice}@tie{}: ils doivent être toujours suivis +d'accolades -- @code{@{...@}} -- au cas où vous auriez employé +plusieurs variables qui doivent intervenir consécutivement. + +Ajoutons donc cette structure au bloc @code{\score}, tout en fignolant +l'indentation. Nous en profitons pour ajouter les clés appropriées, +effectuer les réglages concernant les hampes et liaisons de la portée +supérieure grâce à @code{\voiceOne} et @code{\voiceTwo}, et mettre en +place la métrique et l'armure de chaque portée grâce à notre variable +@code{\MetriqueArmure}. + +@example +\score @{ + << % Système pianistique et portée de pédalier sont synchrones + \new PianoStaff << + \new Staff = "ManuelUn" << + \ArmureMetrique % définition de l'armure et de la métrique + \clef "treble" + \new Voice @{ + \voiceOne + \ManuelUnVoixUnMusique + @} + \new Voice @{ + \voiceTwo + \ManuelUnVoixDeuxMusique + @} + >> % fin du contexte de la portée ManuelUn + \new Staff = "ManuelDeux" << + \ArmureMetrique + \clef "bass" + \new Voice @{ + \ManuelDeuxMusique + @} + >> % fin du contexte de la portée ManuelDeux + >> % fin du contexte PianoStaff + \new Staff = "PedalierOrgue" << + \ArmureMetrique + \clef "bass" + \new Voice @{ + \PedalierOrgueMusique + @} + >> % fin du contexte de la portée PedalOrgan + >> +@} % fin du contexte Score +@end example + +@cindex espacement des portées +@cindex portées, espacement + +Cette partition pour orgue est préesque parfaite. Rest juste ce petit +défaut qui ne se remarque pas lorsque l'on considère un seul +système@tie{}: la distance qui sépare la portée de pédalier de celle de +la main gauche devrait être plus ou moins égale à celle qui sépare les +deux mains. En fait, la distance entre les deux portées d'un +@code{PianoStaff} ne saurait trop se dilater@tie{}; le pédalier devrait +adopter le même comportement. + +@cindex sous-propriétés +@cindex propriétéset sous-propriétés +@cindex graphical objects +@cindex objets graphiques +@cindex grobs + +La propension des portées à se dilater se contrôle à l'aide de la +propriété @code{staff-staff-spacing}, attachée à @qq{l'objet graphique} +@code{VerticalAxisGroup} -- la documentation de LilyPond utilise souvent +l'abréviation @emph{grob} pour @emph{graphical object}. Pas de +panique@tie{}! Tout ceci sera expliqué plus tard -- pour les curieux, +jetez un œil au chapitre +@ruser{Vue d'ensemble de la modification des propriétés}. +Revenons à notre propos@tie{}: nous voulons modifier uniquement la +sous-propriété @code{stretchability}. Les impatients trouveront les +valeurs par défaut de la propriété @code{staff-staff-spacing} dans le +fichier @file{scm/define-grobs.scm}, en examinant la définition du +@emph{grob} @code{VerticalAxisGroup}. La valeur que nous affecterons à +@code{stretchability} est celle que contient la définition du contexte +@code{PianoStaff} telle qu'elle apparaît dans le fichier +@file{ly/engraver-init.ly}). + +@example +\score @{ + << % Système pianistique et portée de pédalier sont synchrones + \new PianoStaff << + \new Staff = "ManuelUn" << + \ArmureMetrique % définition de l'armure et de la métrique + \clef "treble" + \new Voice @{ + \voiceOne + \ManuelUnVoixUnMusique + @} + \new Voice @{ + \voiceTwo + \ManuelUnVoixDeuxMusique + @} + >> % fin du contexte de la portée ManuelUn + \new Staff = "ManuelDeux" \with @{ + \override VerticalAxisGroup + #'staff-staff-spacing #'stretchability = 5 + @} << + \ArmureMetrique + \clef "bass" + \new Voice @{ + \ManuelDeuxMusique + @} + >> % fin du contexte de la portée ManuelDeux + >> % fin du contexte PianoStaff + \new Staff = "PedalierOrgue" << + \ArmureMetrique + \clef "bass" + \new Voice @{ + \PedalierOrgueMusique + @} + >> % fin du contexte de la portée PedalOrgan + >> +@} % fin du contexte Score +@end example + +Nous en avons fini avec la structure. Toutes les partitions pour orgue +auront cette structure, même si le nombre de voix peut changer. Tout ce +qui nous reste à faire maintenant consiste à saisir la musique et à +regrouper toutes les parties. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\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 context + >> +} % end Score context +@end lilypond + +@seealso +Glossaire musicologique : +@rglosnamed{system,système}. + + +@node Économie de saisie grâce aux identificateurs et fonctions +@subsection Économie de saisie grâce aux identificateurs et fonctions +@translationof Saving typing with variables and functions + +@cindex variables +@cindex identificateurs + +Jusqu'à maintenant, vous avez vu ce type de code@tie{}: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } +\score { + { + \hornNotes + } +} +@end lilypond + +Vous comprendrez combien cela peut être utile pour écrire de la +musique minimaliste@tie{}: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } + +violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } + +\score { + { + \violin + } +} +@end lilypond + +Néanmoins vous pouvez aussi utiliser ces identificateurs +-- aussi connus sous le nom de variables, macros, ou commandes +(définies par l'utilisateur) -- pour des retouches@tie{}: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } + +padText = { \once \override TextScript #'padding = #5.0 } +fthenp =_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b | + \padText + c4.^"hi there!" d8 e' f g d | + c,4.\fthenp b8 c4 c-. | + } +} + +\score { + { + \violin + } + \layout { ragged-right = ##t } +} +@end lilypond + +Ces identificateurs sont évidemment utiles pour économiser de la +frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une +seule fois@tie{}: ils réduisent la complexité. Regardons l'exemple +précédent sans aucun identificateur. C'est beaucoup plus laborieux à +lire, et particulièrement la dernière ligne. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d | + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +Jusqu'ici nous avons vu des substitutions statiques@tie{}: quand +LilyPond rencontre @code{\padText}, il le remplace par le contenu que +nous lui avons défini -- c'est-à-dire le contenu à droite de +@code{padText=}. + +LilyPond gère également des substitutions non-statiques -- vous +pouvez les voir comme des fonctions. + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +Utiliser des identificateurs est aussi un bon moyen pour vous épargner +du travail si la syntaxe de LilyPond change un jour -- voir +@rprogram{Mise à jour avec convert-ly}. Si vous avez une seule +définition, par exemple @code{\dolce}, pour tous vos fichiers (voir +@ref{Feuilles de style}) et que la syntaxe change, alors vous n'aurez +qu'à mettre à jour votre seule définition @code{\dolce}, au lieu de +devoir modifier chaque fichier @file{.ly}. + + +@node Conducteurs et parties +@subsection Conducteurs et parties +@translationof Scores and parts + +Dans la musique d'orchestre, toutes les notes sont imprimées deux fois. +D'abord dans les parties séparées destinées aux musiciens, et ensuite +dans le conducteur destiné au chef. Les variables sont là pour vous +éviter un double travail. La musique n'est entrée qu'une seule fois, et +stockée dans une variable, dont le contenu servira à imprimer à la fois +la partie séparée et la partition d'orchestre. + +Il est judicieux de définir les notes dans un fichier séparé. Par +exemple, supposons que le fichier @file{musique-Cor.ly} contienne la +partie suivante pour un duo cor/@/basson. + +@example +notesCor = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e d | +@} +@end example + +@noindent +On établira alors une partie séparée en constituant un nouveau +fichier@tie{}: + +@example +\include "musique-Cor.ly" + +\header @{ + instrument = "Cor en Fa" +@} + +@{ + \transpose f c' \notesCor +@} +@end example + +À la ligne + +@example +\include "musique-Cor.ly" +@end example + +@noindent +sera substitué le contenu du fichier @file{musique-Cor.ly}, et de ce +fait la variable @code{notesCor} se trouvera définie. La commande +@code{\transpose@tie{}f@tie{}c'} indique que son argument +@code{\notesCor} sera transposé à la quinte supérieure@tie{}: le son +réel @code{f} s'écrit @code{c'}, ce qui est la caractéristique d'un Cor +en fa. La transposition est visible comme suit@tie{}: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e d | +} +@end lilypond + +Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas +pendant plusieurs mesures. Un silence spécial, appelé silence +multimesures, l'indique alors. On l'obtient par un @code{R} majuscule, +suivi d'une durée@tie{}: @code{1}@tie{}pour une pause, +@code{2}@tie{}pour une demi-pause, etc. Cette durée peut être +multipliée pour établir de plus longs silences. Par exemple, le silence +suivant dure 3@tie{}mesures à 2/4. + +@example +R2*3 +@end example + +Dans une partie séparée, les silences multimesure sont compressés. +Il faut pour cela définir la propriété @code{skipBars} à +@qq{vrai}@tie{}: + +@example +\set Score.skipBars = ##t +@end example + +@noindent +Cette commande assigne la valeur @qq{vrai} -- @emph{true} en anglais, et +@code{#t} dans le langage Scheme -- à cette propriété dans le +contexte @code{Score}. Si l'on ajoute dans la musique ci-dessus le +silence multimesure et cette option, on obtient le résultat suivant@tie{}: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e d | +} +@end lilypond + +Le conducteur rassemble toute la musique. Si l'on suppose que l'autre +voix de notre duo se trouve dans le fichier @file{musique-Basson.ly} en +tant que variable @code{notesBasson}, on établira un conducteur avec + +@example +\include "musique-Basson.ly" +\include "musique-Cor.ly" + +<< + \new Staff \notesCor + \new Staff \notesBasson +>> +@end example + +@noindent +ce qui équivaut à + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond + diff --git a/Documentation/fr/learning/preface.itely b/Documentation/fr/learning/preface.itely new file mode 100644 index 0000000000..59f4fcd8b7 --- /dev/null +++ b/Documentation/fr/learning/preface.itely @@ -0,0 +1,69 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@c This file is part of lilypond.tely +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave +@c Translation checkers: Ludovic Sardain, Damien Heurtebise + +@node Préface +@unnumbered Préface +@translationof Preface + +Ce doit être pendant une répétition de l'Orchestre des Jeunes +d'Eindhoven, un jour de 1995, que Jan, du pupitre des altistes tordus, +aborda Han-Wen, un corniste déjanté, pour lui parler d'un mirifique +projet dans lequel il venait de se lancer. Il s'agissait d'un système +automatisé de gravure musicale -- le préprocesseur MPP pour MusiXTeX +pour être précis. Han-Wen, qui voulait justement imprimer certaines +parties d'une œuvre, jeta un premier coup d'œil à ce programme, et +devint très vite accro. Le MPP s'avéra bientôt une voie sans issue. +Après avoir ratiociné et échangé un grand nombre de courriels +enflammés, Han-Wen lança le projet LilyPond en 1996, dans lequel, +cette fois, ce fut au tour de Jan de se sentir entraîné. + +De bien des points de vue, coder un programme informatique, c'est +comme apprendre à jouer d'un instrument. Au début c'est sympa, on +découvre comment ça fonctionne, et on aborde tout ce qu'on n'arrive +pas encore à faire comme autant de défis. L'exaltation de la +nouveauté s'estompant, on doit s'entraîner encore et encore. Les +gammes, les études deviennent vite ennuyeuses, et peuvent, si l'on +n'est pas encouragé par d'autres -- professeurs, chefs ou public -- +en décourager plus d'un. Pourtant, pour peu que l'on persévère, +l'instrument devient progressivement une partie de notre vie. Si +certains jours il semble naturel d'en jouer, c'est un vrai bonheur. +Et si d'autres jours on ne peut tout simplement rien en tirer, on +continue quand même à travailler, coûte que coûte. + +De même, développer LilyPond peut être une tâche harassante. Certains +jours, c'est un monceau de bugs duquel il faut se dépêtrer. Pourtant, +il fait maintenant partie de notre vie, et nous nous accrochons. +Notre principale motivation vient sans doute de l'utilité réelle de +notre logiciel. En flânant sur Internet, nous trouvons beaucoup de +gens qui utilisent LilyPond pour réaliser d'impressionnantes +partitions@tie{}: c'est incroyable, mais en même temps très flatteur. + +Les utilisateurs ne se contentent pas de nous encourager en utilisant +notre logiciel@tie{}; nombre d'entre eux nous aident aussi en faisant des +suggestions et en signalant des bogues. Aussi, nous voudrions +remercier ici tous les utilisateurs qui nous ont signalé des bugs, ont +fait des suggestions ou ont contribué d'une façon ou d'une autre au +développement de LilyPond. + +Jouer de la musique ou en graver, il y a là plus qu'une comparaison +séduisante. Même si l'on s'amuse beaucoup en programmant tous +ensemble, et qu'on éprouve une satisfaction profonde à aider les gens, +au bout du compte, notre travail sur LilyPond est avant tout une +manière d'exprimer notre amour sincère de la musique. Puisse-t-il +vous aider à créer de nombreuses et belles œuvres@tie{}! + +Han-Wen et Jan + +Utrecht/Eindhoven, Pays-Bas, juillet 2002. diff --git a/Documentation/fr/learning/templates.itely b/Documentation/fr/learning/templates.itely new file mode 100644 index 0000000000..a84d680283 --- /dev/null +++ b/Documentation/fr/learning/templates.itely @@ -0,0 +1,174 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Jean-Charles Malahieude + +@node Modèles +@appendix Modèles +@translationof Templates + +Cette annexe du manuel d'initiation propose des patrons de partition +Lilypond, prets à l'emploi. Il vous suffira d'y ajouter quelques notes, +de lancer LilyPond, et d'aprécier le résultat. + + +@menu +* Portée unique:: +* Modèles pour piano:: +* Quatuor à cordes:: +* Ensemble vocal:: +* Orchestre:: +* Exemples de notation ancienne:: +* Autres modèles:: +@end menu + +@node Portée unique +@appendixsec Portée unique +@translationof Single staff + +@appendixsubsec Notes seules + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-only-notes.ly} + +@appendixsubsec Notes et paroles + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-notes-and-lyrics.ly} + +@appendixsubsec Notes et accords + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes-and-chords.ly} + +@appendixsubsec Notes, paroles et accords + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes,-lyrics,-and-chords.ly} + + +@node Modèles pour piano +@appendixsec Modèles pour piano +@translationof Piano templates + +@appendixsubsec Piano seul + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-simple.ly} + +@appendixsubsec Chant et accompagnement + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-melody-and-lyrics.ly} + +@appendixsubsec Piano et paroles entre les portées + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-lyrics.ly} + +@appendixsubsec Piano et nuances entre les portées + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-dynamics.ly} + + +@node Quatuor à cordes +@appendixsec Quatuor à cordes +@translationof String quartet + +@appendixsubsec Quatuor à cordes + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-simple.ly} + +@appendixsubsec Parties pour quatuor à cordes + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-with-separate-parts.ly} + + +@node Ensemble vocal +@appendixsec Ensemble vocal +@translationof Vocal ensembles + +@appendixsubsec Partition pour chœur à quatre voix mixtes + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template.ly} + +@appendixsubsec Partition pour chœur SATB avec réduction pour piano + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-automatic-piano-reduction.ly} + +@appendixsubsec Partition pour chœur SATB avec alignement des contextes + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} + +@appendixsubsec Partition pour chœur SATB, sur quatre portées + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{satb-choir-template---four-staves.ly} + +@appendixsubsec Couplet pour solo et refrain à deux voix + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-verse-and-refrain.ly} + +@appendixsubsec Hymnes et cantiques + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{hymn-template.ly} + +@appendixsubsec Psalmodie + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{anglican-psalm-template.ly} + + +@node Orchestre +@appendixsec Orchestre +@translationof Orchestral templates + +@appendixsubsec Orchestre, chœur et piano + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{orchestra,-choir-and-piano-template.ly} + + +@c bad node name to avoid node name conflict +@node Exemples de notation ancienne +@appendixsec Exemples de notation ancienne +@translationof Ancient notation templates + +@appendixsubsec Transcription de musique mensurale + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-mensural-music.ly} + +@appendixsubsec Transcription du grégorien + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + + +@node Autres modèles +@appendixsec Autres modèles +@translationof Other templates + +@appendixsubsec Symboles de jazz +@translationof Jazz combo + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{jazz-combo-template.ly} + diff --git a/Documentation/fr/learning/tutorial.itely b/Documentation/fr/learning/tutorial.itely new file mode 100644 index 0000000000..84064ef3c6 --- /dev/null +++ b/Documentation/fr/learning/tutorial.itely @@ -0,0 +1,817 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 + +@include included/generating-output.itexi + +@c \version "2.14.0" + +@c Translators: Nicolas Grandclaude, Ludovic Sardain, Gauvain Pocentek +@c Translation checkers: Jean-Charles Malahieude, Valentin Villenave, John Mandereau +@c Translation status: post-GDP + +@node Tutoriel +@chapter Tutoriel +@translationof Tutorial + +Ce tutoriel est une introduction au langage musical utilisé +par LilyPond, qui vous permettra de faire fonctionner le logiciel pour +produire une partition. + +@menu +* Compilation d'un fichier:: +* Composition d'un fichier source:: +* Gestion des erreurs:: +* Bien lire le manuel:: +@end menu + + +@node Compilation d'un fichier +@section Compilation d'un fichier +@translationof Compiling a file + +Nous allons ici parler de la @qq{compilation}, ou comment LilyPond +traite le fichier source que vous avez écrit, pour en faire quelque +chose d'imprimable. + +@menu +* Saisie de la musique:: +* MacOS X:: +* Windows:: +* Ligne de commande:: +@end menu + +@node Saisie de la musique +@subsection Saisie de la musique +@translationof Entering input + +@cindex compilation +@cindex exemple, premier +@cindex premier exemple + +Pour créer une partition avec LilyPond, on écrit un fichier texte, +appelé fichier source, qui décrit la notation musicale. La +@emph{compilation} de ce fichier source par LilyPond produit un +fichier graphique imprimable, et si on le désire un fichier MIDI qui +peut être joué par un séquenceur. + +Voici un premier exemple simple de fichier source LilyPond. + +@example +\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + +@noindent +La compilation de ce fichier donnera quelque chose de sembable à +l'image ci-dessous. + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@c DIV specific +Il est aussi possible d'utiliser les noms de notes français @qq{@w{do +re mi fa sol la si}}, en insérant au début du fichier la ligne +@w{@code{\include@tie{}"italiano.ly"}}. +@c END DIV + +@warning{Tout extrait de code LilyPond doit être entouré d'une +@w{@strong{@{ paire d'accolades @}}}. De plus, pour éviter toute +ambiguïté, il est préférable d'entourer les accolades par des espaces +ou retours à la ligne. Bien que certains exemples de ce manuel ne +comportent pas d'accolades, ne les oubliez pas dans vos partitions@tie{}! +Pour plus d'informations sur l'affichage des exemples de cette +documentation, consultez @ref{Bien lire le manuel}.} + + +@cindex casse, prise en compte de la +@cindex prise en compte de la casse +@cindex sensibilité à la casse + +De plus, LilyPond est @strong{sensible à la casse}@tie{}: le code +@w{@samp{@{ c d e @}}} est valide, alors que @w{@samp{@{ C D E @}}} +produira un message d'erreur. + +@smallspace + +@subheading Production de la partition + +@cindex fichier PDF +@cindex PDF +@cindex partition, lire +@cindex lire la partition +@cindex éditeurs de texte + +Dans cette section nous expliquerons quelles commandes exécuter et +comment voir ou imprimer le résultat produit par LilyPond. + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (graphique) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (graphique) + +@item +@ref{Ligne de commande, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Ligne de commande, Tous systèmes} (ligne de commande) + +@end itemize + +Notez qu'il existe plusieurs éditeurs de texte disponibles avec un bon +support de LilyPond@tie{}; consultez @rweb{Facilités d'édition}. + +@warning{Le premier démarrage de LilyPond peut prendre une minute ou +deux, afin de générer la liste des polices du système. LilyPond démarre +en principe plus rapidement lors des exécutions suivantes.} + + +@node MacOS X +@subsection MacOS X + +@cindex lancer LilyPond sous MacOS X +@cindex MacOS X, lancer LilyPond + +@lilypadOSX + + +@node Windows +@subsection Windows + +@cindex lancer LilyPond sous Windows +@cindex Windows, lancer LilyPond + +@lilypadWindows + + +@node Ligne de commande +@subsection Ligne de commande +@translationof Command-line + +@cindex lancer LilyPond sous Unix +@cindex Unix, lancer LilyPond + +@lilypadCommandLine + + +@node Composition d'un fichier source +@section Composition d'un fichier source +@translationof How to write input files + +This section introduces some basic LilyPond syntax to help get you +started writing input files. + +@menu +* Notation simple:: +* Travail sur les fichiers d'entrée:: +@end menu + + +@node Notation simple +@subsection Notation simple +@translationof Simple notation + +@cindex simple, notation +@cindex notation simple + +Il y a certains éléments graphiques de notation que LilyPond ajoute +automatiquement. Dans l'exemple suivant, nous n'avons fourni que +quatre hauteurs, mais LilyPond a ajouté une clef, un chiffre de mesure +et du rythme. + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +Ces valeurs automatiques simplifient la saisie du code source dans +bien des cas ; nous verrons plus loin comment les indiquer +explicitement. + + +@subheading Hauteurs + +@cindex hauteurs +@cindex mode relatif +@cindex apostrophe +@cindex virgule +@cindex altérations et mode relatif +@cindex mode relatif et altérations + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +Glossaire musicologique : +@rglosnamed{pitch,hauteur}, +@rglosnamed{interval,intervalle}, +@rglosnamed{scale,gamme}, +@rglosnamed{middle C,do central}, +@rglos{octave}, +@rglosnamed{accidental,altération}. + +Le moyen le plus simple d'entrer des notes est d'utiliser le mode +d'octaves relatives, ou mode @code{\relative}. Dans ce mode, l'octave +de chaque note est déterminée automatiquement de façon à ce qu'elle +soit le plus proche possible de la note précédente, c'est-à-dire de +façon à ce que l'intervalle avec la note précédente soit au plus d'une +quarte. Commençons par saisir une partition très simple, à savoir une +gamme. + +@lilypond[verbatim,quote] +% set the starting point to middle C +\relative c' { + c d e f + g a b c +} +@end lilypond + +La note de départ est le @notation{do central}. Chacune des notes qui +suivent est placée à l'octave la plus proche de la note précédente -- +en d'autres termes, le premier @code{c} est le do central, entre la +clef de sol et la clef de fa, puis est suivi par le @notation{ré} le +plus proche, et ainsi de suite. On peut bien sûr créer des mélodies +avec de plus grands intervalles, toujours avec le mode +@code{\relative}@tie{}: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +Remarquez que cet exemple ne commence plus sur le @notation{do +central}@tie{}: la première note -- le @code{d} -- est le ré qui en est +le plus proche. + +Dans l'exemple suivant, on remplace @code{c'} dans la commande +@w{@code{@bs{}relative c'}} par @code{c''}, afin de calculer l'octave de +la première note par rapport au do situé une octave au-dessus du do +central@tie{}: + +@lilypond[verbatim,quote] +% one octave above middle C +\relative c'' { + e c a c +} +@end lilypond + +Le mode d'octaves relatives peut être déroutant au début, mais c'est +souvent la façon la plus économique de saisir les hauteurs en +utilisant le clavier de l'ordinateur de façon classique. Détaillons +dans un exemple le calcul des octaves relatives. En partant d'un si +sur la troisième ligne de la clé de sol, un do, un ré ou un mi sans +indication d'octave particulière seront placés juste au-dessus du si, +c'est-à-dire au plus à une quarte ascendante du si, alors qu'un la, un +sol ou un fa seront placés juste en-dessous du si, c'est-à-dire au +plus à une quarte descendante du si. + +@lilypond[verbatim,quote] +\relative c'' { + b c % c is 1 staff space up, so is the c above + b d % d is 2 up or 5 down, so is the d above + b e % e is 3 up or 4 down, so is the e above + b a % a is 6 up or 1 down, so is the a below + b g % g is 5 up or 2 down, so is the g below + b f % f is 4 up or 3 down, so is the f below +} +@end lilypond + +Notez que le calcul des octaves relatives @strong{ne tient pas compte +des altérations} des notes, dièse bémol ou bécarre. + +Pour obtenir des intervalles supérieurs à une quarte, on peut ajouter +des apostrophes @code{'} -- qui font chacune monter la hauteur d'une +octave -- ou des virgules @code{,} -- qui font chacune descendre la +hauteur d'une octave -- au nom de la note. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +Pour déplacer une note deux octaves (ou davantage@tie{}!) plus haut ou plus +bas, il suffit de mettre deux (ou davantage) @code{'} ou @code{,} -- +attention cependant à bien mettre deux apostrophes @code{''}, et non +un guillemet @code{"}@tie{}! C'est de cette même manière que l'on +peut modifier la valeur de départ de @w{@code{\relative c'}}. +@c " - keeps quotes in order for context-sensitive editor -td + + +@subheading Durées et rythme + +@cindex note, durée +@cindex durées +@cindex rhythmes +@cindex ronde +@cindex blanche +@cindex noire +@cindex note pointée +@cindex spécification des durées + +Glossaire musicologique : +@rglosnamed{beam,ligature}, +@rglosnamed{duration,durée}, +@rglosnamed{whole note,ronde}, +@rglosnamed{half note,blanche}, +@rglosnamed{quarter note,noire}, +@rglosnamed{dotted note,note pointée}. + +La @notation{durée} d'une note est indiquée par un nombre qui suit sa +hauteur@tie{}: @code{1} pour une @notation{ronde}, @code{2} pour une +@notation{blanche}, @code{4} pour une @notation{noire} et ainsi de +suite. Les @notation{crochets} et @notation{liens} sont ajoutés +automatiquement. + +Si aucune durée n'est indiquée pour une note, la dernière durée entrée +est utilisée. En l'absence d'indication de durée, la première note +est une noire. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +Une @notation{note pointée} s'obtient en ajoutant un point @code{.} à +la valeur rythmique. Le point doit être précédé d'un nombre spécifiant +la durée de base. + +@lilypond[verbatim,quote] +\relative c'' { + a a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Silences + +@cindex silences +@cindex notation des silences + +Glossaire musicologique : +@rglosnamed{rest,silence}. + +On saisit un @notation{silence} tout comme une note, mais avec la +lettre @code{r} (pour @emph{rest}). + +@lilypond[verbatim,quote] +\relative c'' { + a r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Métrique + +@cindex métrique +@cindex chiffre de mesure + +@funindex \time +@funindex time + +Glossaire musicologique : @rglosnamed{time signature,métrique}. + +La @notation{métrique}, aussi appelée @notation{chiffre de mesure}, +peut être définie à l'aide de la commande @code{\time}@tie{}: + +@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 Indication de tempo + +@cindex tempo, indication +@cindex indication du tempo +@cindex métronome, indication +@cindex indication métronomique + +@funindex \tempo +@funindex tempo + +Glossaire musicologique : +@rglosnamed{tempo indication,indication de tempo}, +@rglosnamed{metronome,métronome}. + +La commande @code{\tempo} permet de stipuler aussi bien le @emph{tempo} +que le métronome@tie{}: + +@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 + + +@subheading Clefs + +@cindex clef +@cindex clé +@cindex sol, clef de +@cindex ut, clef d' +@cindex fa, clef de + +@funindex \clef +@funindex clef + +Glossaire musicologique : @rglos{clef}. + +La @notation{clef} peut être définie à l'aide de la commande +@code{\clef}@tie{}: + +@lilypond[verbatim,quote] +\relative c' { + \clef "treble" + c1 + \clef "alto" + c1 + \clef "tenor" + c1 + \clef "bass" + c1 +} +@end lilypond + + +@subheading Tout ensemble + +Voici un bref exemple qui rassemble tous les éléments que nous déjà +vus@tie{}: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + c2 e8 c' + g'2. + f4 e d + c4 c, r +} +@end lilypond + + +@seealso +Manuel de notation : @ruser{Écriture des hauteurs de note}, +@ruser{Écriture du rythme}, @ruser{Écriture des silences}, +@ruser{Gravure du rythme}, @ruser{Gravure des hauteurs}. + + +@node Travail sur les fichiers d'entrée +@subsection Travail sur les fichiers d'entrée +@translationof Working on input files + +@cindex accolades +@cindex commentaires +@cindex ligne de commentaire +@cindex bloc de commentaire +@cindex casse, prise en compte de +@cindex prise en compte de la casse +@cindex sensibilité à la casse +@cindex espaces multiples, insensibilité +@cindex insensibilité aux espaces multiples +@cindex expressions +@cindex versionage +@cindex version +@cindex numéro de version + +@funindex \version +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + +Le traitement des fichiers source de LilyPond est semblable à celui du +code de nombreux langages de programmation. La casse est prise +en compte, et les caractères considérés comme espaces ont généralement +peu d'importance. Les expressions sont délimitées par des accolades +@w{@code{@{ @}}}, et les commentaires par @code{%} ou +@w{@code{%@{ @dots{} @}}}@tie{}. + +Si cette phrase vous paraît incompréhensible, ne vous en faites pas@tie{}! +Expliquons tous ces termes@tie{}: + + +@itemize + +@item +@strong{La version} : +Tout fichier LilyPond devrait porter mention de la version. Cette +mention prend la forme d'une ligne décrivant le numéro de la version +utilisée lors de la confection du fichier en question, comme ici@tie{}: + +@example +\version "@w{@version{}}" +@end example + +Il est d'usage de porter cette mention au tout début du fichier +LilyPond. + +Mentionner la version est important pour, au moins, les deux raisons +suivantes@tie{}: cela permet dans un premier temps de faciliter les +opérations de mise à jour automatisée au fil de l'évolution de la +syntaxe de LilyPond. Ensuite, cela met en évidence le minimum requis +pour pouvoir compiler votre fichier. + +Si vous ne le mentionnez pas, Lilypond vous rappellera à l'ordre durant +la compilation. + +@item +@strong{La casse} : +LilyPond est sensible à la casse, c'est à dire qu'une lettre capitale +n'a pas la même valeur qu'une lettre minuscule. Les notes, par +exemple, doivent être entrées en minuscule : @w{@code{@{ c d e @}}} est +un code valide, alors que @w{@code{@{ C D E @}}} produira un message +d'erreur. + +@item +@strong{Les espaces multiples} : +LilyPond ne tient pas compte du nombre d'espaces, de tabulations ou de +retours à la ligne. @w{@code{@{ c d e @}}} a le même sens que +@w{@code{@{ c @tie{} @tie{} d @tie{} e @}}} ou que + +@example +@{ c4 d + e @} +@end example + +@noindent +Bien sûr, ce dernier exemple est illisible. Une bonne habitude +à prendre est d'indenter les blocs de code avec des doubles espaces@tie{}: + +@example +@{ + c4 d e +@} +@end example + +L'espace est néanmoins @strong{nécessaire} pour séparer nombre +d'éléments syntaxiques les uns des autres. En d'autres termes, s'il est +toujours possible d'@emph{ajouter} des espaces, il faut prendre garde à +ne pas trop en @emph{supprimer}. En effet, l'absence d'une espace peut +avoir des conséquences et entraîner une erreur@tie{}; aussi nous vous +invitons à toujours insérer une espace avant et après chaque élément +syntaxique, comme avant et après une accolade. + +@item +@strong{Expressions musicales} : +Tout morceau saisi dans LilyPond doit être placé entre +@strong{@{@tie{}accolades@tie{}@}}. Ces caractères indiquent à LilyPond +que ce bloc de texte représente une et une seule expression musicale, +tout comme les parenthèses @code{()} en mathématiques. Pour éviter +toute ambiguïté, il est préférable d'entourer ces accolades d'espaces ou +de retours à la ligne. + +Un appel de fonction -- @w{@code{@bs{}relative c' @{ @dots{} @}}} par +exemple -- compte également comme une seule expression musicale. + +@item +@strong{Les commentaires} : +Un commentaire est une indication pour tout lecteur humain d'un +fichier source de musique@tie{}; il est ignoré lors de la compilation et +n'a donc aucun effet sur la partition imprimée. On distingue deux types +de commentaires. Le commentaire de fin de ligne, introduit par le +symbole @code{%}@tie{}: tout ce qui suit ce symbole sur la même ligne sera +ignoré. Par convention, un commentaire qui occupe une ligne entière +se place juste @emph{au-dessus} de la ligne à laquelle il fait +référence. + +@example +a4 a a a +% ce commentaire fait référence aux si +b2 b +@end example + +Le bloc de commentaire, qui peut occuper plusieurs lignes, voire toute +une section@tie{}: tout ce qui se trouve entre @code{%@{} et @code{%@}} est +ignoré. Les blocs de commentaires ne peuvent s'imbriquer, ce qui +signifie que vous ne pouvez pas placer un commentaire-bloc à +l'intérieur d'un autre commentaire-bloc. Si jamais vous essayez, vous +verrez que la première occurence de @code{%@}} terminera @qq{les +@emph{deux} commentaires-blocs}. Le fragment suivant met en évidence +quelques usages possibles des commentaires@tie{}: + +@example +% voici les notes de "ah vous dirai-je maman" + c4 c g' g a a g2 + +%@{ + Ces lignes et les notes qui suivent + seront ignorées, car elles se trouvent + dans un bloc de commentaire. + + f f e e d d c2 +%@} +@end example + +@end itemize + + +@node Gestion des erreurs +@section Gestion des erreurs +@translationof Dealing with errors + +@cindex dépannage + +Parfois, LilyPond ne produit pas le résultat escompté. Voici quelques +pistes à suivre pour vous aider à éviter de telles déconvenues. + + +@menu +* Quand ça ne fonctionne pas:: +* Erreurs courantes:: +@end menu + +@node Quand ça ne fonctionne pas +@subsection Quand ça ne fonctionne pas +@translationof General troubleshooting tips + +Résoudre les problèmes rencontrés avec LilyPond est une gageure pour +ceux qui ne connaissent que des interfaces graphiques puisque rien +n'empèche de créer du code erroné. En pareil cas, il suffit souvent d'un +peu de logique pour être en mesure d'identifier les causes du problème +et le résoudre simplement. Le chapitre +@rprogram{Résolution de problèmes} liste quelques directives à ce propos. + + +@node Erreurs courantes +@subsection Erreurs courantes +@translationof Some common errors + +@cindex erreurs courantes +@cindex courantes, erreurs + +Il peut arriver qu'un message d'erreur ne soit pas suffisamment +explicite pour solutionner le problème. Quelques cas des plus courants +sont répertoriés au chapitre +@rprogram{Quelques erreurs des plus courantes}. + + +@node Bien lire le manuel +@section Bien lire le manuel +@translationof How to read the manual + +Nous allons voir ici comment consulter la documentation le plus +efficacement possible. Nous en profiterons pour vous présenter quelques +particularités de la domcumentation en ligne. + +@menu +* Matériel incomplet:: +* Exemples cliquables:: +* Vue d'ensemble des manuels:: +@end menu + + +@node Matériel incomplet +@subsection Matériel incomplet +@translationof Omitted material + + +@cindex bien lire le manuel +@cindex manuel, lecture +@cindex compulser le manuel +@cindex exemples cliquables +@cindex cliquables, exemples +@cindex conseils de construction des fichiers +@cindex squelettes +@cindex construction des fichiers, conseils +@cindex fichiers, conseils de construction + +Comme nous l'avons vu dans @ref{Travail sur les fichiers d'entrée}, un +code LilyPond doit être encadré par des accolades @{@tie{}@} ou bien par +@w{@code{\relative c'' @{ @dots{} @}}}. Cependant, dans la suite de ce +manuel, la plupart des exemples ne feront pas apparaître ces signes. + +Pour reproduire les exemples, vous pouvez copier et coller le code +affiché, mais @strong{à condition} d'ajouter +@code{@w{\relative c'' @{ @}}} de la façon suivante@tie{}: + +@example +\relative c'' @{ + ...collez ici votre exemple... +@} +@end example + +Pourquoi avoir omis les accolades@tie{}? La plupart des exemples de ce +manuel peuvent être insérés au milieu d'un morceau de musique plus +long. Il n'y a donc aucune raison d'ajouter @code{@w{\relative c'' @{ +@}}} à ces exemples -- en effet, il n'est pas possible d'insérer une +expression @code{\relative} à l'intérieur d'une autre expression +@code{\relative}. Si nous mettions tous nos exemples dans une +expression @code{\relative}, vous ne pourriez plus copier un bref +exemple de la documentation pour le coller dans vos pièces. + + +@node Exemples cliquables +@subsection Exemples cliquables +@translationof Clickable examples + +Beaucoup de gens apprennent à utiliser les programmes en les essayant +et en bidouillant avec. C'est également possible avec LilyPond. Si +vous cliquez sur une image dans la version HTML de ce manuel, vous +verrez exactement le code LilyPond utilisé pour générer cette image. +Essayez sur cette image@tie{}: + +@c no verbatim here +@c KEEP LY +@lilypond[quote,ragged-right] +\relative c'' { + c-\markup { \bold \huge { Cliquez ici. } } +} +@end lilypond + +En copiant-collant le code à partir du commentaire @qq{ly snippet} +vers un fichier test, vous aurez un modèle de base pour faire vos +expériences. Pour obtenir une gravure à l'identique, copiez tout le +code à partir de @qq{Start cut-&-pastable section}. + +@c No longer in the text in English, but should we really +@c remove this? --jm +@ignore +Si vous apprenez de cette façon, vous aurez probablement envie +d'imprimer ou de garder un lien vers @ruser{Aide-mémoire}, tableau +qui répertorie les commandes usuelles pour une consultation rapide. +@end ignore + +@node Vue d'ensemble des manuels +@subsection Vue d'ensemble des manuels +@translationof Overview of manuals + +La documentation de LilyPond est relativement abondante. Ceci peut +dérouter les nouveaux utilisateurs qui ne savent pas par quoi commencer +ou bien sont tentés de faire l'impasse sur des passages importants. + +@warning{Nous vous invitons à ne pas faire l'impasse sur les chapitres +importants de notre documentation, au risque de vous retrouver +complètement perdu lorsque vous aborderez d'autres parties.} + +@itemize + +@item +@strong{Avant de vous lancer dans @emph{quoi que ce soit}}, lisez le +@ref{Tutoriel} contenu dans le manuel d'initiation ainsi que les +@ref{Bases de notation musicale}. Si vous y trouvez des termes que vous +ne connaissez pas, n'hésitez pas à consulter le +@rglosnamed{Top, Glossaire}. + +@item +@strong{Avant de vous lancer dans la réalisation d'une partition +complète}, lisez le chapitre @ref{Concepts fondamentaux} du manuel +d'initiation. Vous pourrez alors vous reporter aux parties qui vous +intéresseront dans le @rusernamed{Top, Manuel de notation}. + +@item +@strong{Avant de modifier les réglages par défaut}, consultez le +chapitre @ref{Retouche de partition} du manuel d'initiation. + +@item +@strong{Avant de vous lancer dans un projet d'envergure}, lisez le +chapitre @rprogram{Suggestions pour la saisie de fichiers LilyPond} du +manuel d'utilisation. + +@end itemize diff --git a/Documentation/fr/learning/tweaks.itely b/Documentation/fr/learning/tweaks.itely new file mode 100644 index 0000000000..888758007e --- /dev/null +++ b/Documentation/fr/learning/tweaks.itely @@ -0,0 +1,4336 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise +@c Translation checkers: Jean-Charles Malahieude, John Mandereau +@c Translation status: post-GDP + +@node Retouche de partition +@chapter Retouche de partition +@translationof Tweaking output + +Ce chapitre indique comment modifier le résultat obtenu. +LilyPond offre de nombreuses possibilités de réglages, permettant +théoriquement de modifier chaque élément de votre partition. + +@menu +* Retouches élémentaires:: +* Le manuel des références internes:: +* Apparence des objets:: +* Positionnement des objets:: +* Collisions d'objets:: +* Autres retouches:: +@end menu + +@node Retouches élémentaires +@section Retouches élémentaires +@translationof Tweaking basics + +@menu +* Introduction aux retouches:: +* Objets et interfaces:: +* Conventions de nommage des objets et propriétés:: +* Méthodes de retouche:: +@end menu + +@node Introduction aux retouches +@subsection Introduction aux retouches +@translationof Introduction to tweaks + +LilyPond regroupe sous le terme de @qq{retouches} (@emph{tweaks} en +anglais) les différents moyens dont dispose l'utilisateur pour +intervenir sur l'interprétation du fichier d'entrée et pour modifier +l'apparence du fichier de sortie. Certaines retouches sont très +simples à mettre en œuvre@tie{}; d'autres sont plus complexes. Mais +à elles toutes, elles permettent d'obtenir tout ce qu'on veut en matière +de musique imprimée. + +Dans ce chapitre, nous traitons des concepts de base nécessaires +pour comprendre l'art de la retouche. Puis nous présentons de +nombreuses commandes déjà prêtes, qu'il suffit de recopier pour +obtenir un résultat identique dans vos partitions@tie{}; nous en +profitons pour expliquer comment ces commandes ont été construites, si +bien que vous pouvez apprendre par la même occasion à développer +vos propres retouches. + +Avant de vous lancer dans ce chapitre, il peut être utile de revoir la +section @ref{Contextes et graveurs}, dans la mesure où les contextes, +graveurs et autres propriétés qui y sont décrits, sont indispensables +pour comprendre et construire les retouches. + +@node Objets et interfaces +@subsection Objets et interfaces +@translationof Objects and interfaces + +@cindex objet +@cindex grob +@cindex spanner +@cindex extenseur +@cindex interface +@cindex propriétés des objets +@cindex objet, propriétés +@cindex objet de rendu +@cindex rendu, objets de + +Toute retouche implique que l'on modifie les opérations internes +et les structures du programme LilyPond. Nous allons donc, pour +commencer, présenter certains termes qui servent à décrire ces +opérations internes et ces structures. + +Le terme @qq{Objet} est un terme générique qui fait référence à +une multitude de structures internes mises en place par LilyPond +durant la compilation d'un fichier d'entrée. Ainsi, quand une +commande du type @code{\new Staff} apparaît, un nouvel objet +du type @code{Staff} est créé. Cet objet @code{Staff} contient +alors toutes les propriétés associées à cette portée, par exemple son +nom et son armure, ainsi que le détail des graveurs qui ont été +désignés pour fonctionner dans ce contexte de portée. +Certains objets peuvent contenir les propriétés de tous les autres +contextes, comme les objets @code{Voice}, les objets @code{Score}, +les objets @code{Lyrics}@tie{}; d'autres se rapportent à tous les +éléments de notation, comme les barres de mesure, les liaisons, les +nuances, etc. Chaque objet dispose de son propre échantillon de valeurs +pour le réglage des propriétés. + +Certains types d'objet portent des noms spécifiques. Les objets qui se +rapportent à des éléments de notation sur le fichier de sortie, comme +les notes, les hampes, les liaisons de phrasé ou de prolongation, les +doigtés, les clefs, etc. sont appelés @qq{Objets de rendu}@tie{}; ils +sont aussi connus sous le nom d'@qq{Objets graphiques} (en +anglais@tie{}: @emph{Graphical objects} ou @emph{Grobs} pour faire +court). Ce sont bien des objets au sens générique ci-dessus, et, en +tant que tels, ils reçoivent des propriétés qui leur sont associées, +comme leur position, leur taille, leur couleur, etc. + +Certains objets de rendu, comme les liaisons de phrasé, les soufflets +de crescendo, les marques d'octaviation et beaucoup d'autres +@emph{grobs}, ont pour particularité de ne pas se situer à un seul et +unique endroit -- ils ont un point de départ, un point d'arrivée, et +éventuellement d'autres propriétés relatives à leur forme. Ces objets +avec une forme étendue sont appelés des bandeaux (@emph{Spanners} en +anglais). + +Il reste à expliquer ce que sont les @qq{interfaces}. De nombreux +objets, qui peuvent être très différents les uns des autres, ont pour +point commun de devoir être compilés simultanément. Par exemple, tous +les @emph{grobs} ont une couleur, une taille, une position, etc., et +toutes ces propriétés sont compilées simultanément durant +l'interprétation du fichier d'entrée par LilyPond. Pour alléger ces +opérations internes, ces actions et propriétés communes sont regroupées +en un objet appelé @code{grob-interface}. Il existe beaucoup d'autres +regroupements de propriétés communes dans le genre de celui-ci, chacun +portant un nom qui se termine par @code{interface}. En tout, on en +compte plus d'une centaine. Nous verrons plus loin en quoi c'est +intéressant et utile pour l'utilisateur. + +Ainsi s'achève le tour des principaux termes relatifs aux objets et +que nous serons amenés à utiliser dans ce chapitre. + +@node Conventions de nommage des objets et propriétés +@subsection Conventions de nommage des objets et propriétés +@translationof Naming conventions of objects and properties + +@cindex conventions de nommage des objets +@cindex conventions de nommage des propriétés +@cindex objets, conventions de nommage des +@cindex propriétés, conventions de nommage des + +Nous avons eu un aperçu, dans @ref{Contextes et graveurs}, de +la façon de nommer les objets. Voici maintenant une liste de +référence des types d'objets et de propriétés les plus courants, +avec leurs conventions de nommage et quelques exemples +de cas concrets. La lettre @var{A} représente n'importe quel +caractère alphabétique majuscule, et les lettres @var{aaa} +un nombre indéterminé de caractères alphabétiques minuscules. +Les autres caractères sont à prendre tels qu'ils se présentent. + +@multitable @columnfractions .33 .33 .33 +@headitem Type d'objet/propriété + @tab Convention de nommage + @tab Exemples +@item Contextes + @tab Aaaa ou AaaaAaaaAaaa + @tab Staff, GrandStaff +@item Objets de rendu + @tab Aaaa ou AaaaAaaaAaaa + @tab Slur, NoteHead +@item Graveurs + @tab Aaaa_aaa_engraver + @tab Clef_engraver, Note_heads_engraver +@item Interfaces + @tab aaa-aaa-interface + @tab grob-interface, break-aligned-interface +@item Propriétés de contexte + @tab aaa ou aaaAaaaAaaa + @tab alignAboveContext, skipBars +@item Propriétés d'objet de rendu + @tab aaa ou aaa-aaa-aaa + @tab direction, beam-thickness +@end multitable + +Comme nous le verrons bientôt, les propriétés des différents +types d'objet sont modifiées par des commandes différentes, si bien +qu'il est bon de savoir reconnaître le type d'un objet en fonction du +nom de ses propriétés. + +@node Méthodes de retouche +@subsection Méthodes de retouche +@translationof Tweaking methods + +@cindex retouches, méthodologie +@cindex méthodes de retouche + +@strong{La commande \override} + +@cindex override, commande +@cindex override, syntaxe + +@funindex \override +@funindex override + +Dans @ref{Modification des propriétés d'un contexte} et dans +@ref{Ajout et suppression de graveurs}, nous avons déjà rencontré les +commandes @code{\set} et @code{\with}, qui servent à changer les +propriétés des @strong{contextes} et à supprimer ou ajouter des +@strong{graveurs}. Voici maintenant d'autres commandes plus +importantes. + +La commande pour changer les propriétés des @strong{objets de rendu} +est @code{\override}. Du fait que cette commande modifie en profondeur +les propriétés internes de LilyPond, sa syntaxe n'est pas aussi simple +que pour les commandes vues précédemment. Elle a besoin de savoir avec +précision quelle est la propriété à modifier, pour quel objet et dans +quel contexte, et quelle doit être sa nouvelle valeur. Voyons de quoi +il retourne. + +La syntaxe générale de cette commande est@tie{}: + +@example +\override @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-rendu} = #@var{valeur} +@end example + +@noindent +Elle attribue à la propriété appelée @var{propriété-rendu}, associée à +l'objet @var{ObjetDeRendu}, appartenant lui-même au contexte +@var{Contexte}, une valeur @var{valeur}. + +Le contexte @var{Contexte} peut être omis (c'est généralement +le cas) quand il n'y a pas d'ambiguïté et qu'il s'agit d'un contexte +de très bas niveau, comme @code{Voice}, @code{ChordNames} +ou @code{Lyrics}. Dans les exemples qui suivent, le contexte sera +très souvent omis. Nous verrons plus tard dans quelles +circonstances il doit impérativement être indiqué. + +Les sections ci-dessous traitent largement des propriétés et de leurs +valeurs mais, pour illustrer la mise en forme et l'utilisation de ces +commandes, nous nous limiterons à n'employer que quelques propriétés et +valeurs simples, facilement compréhensibles. + +Nous ne parlerons dans l'immédiat ni du @code{#'}, qui précède +toujours la propriété, ni du @code{#}, qui précède toujours la +valeur. Ces deux éléments doivent obligatoirement être +présents sous cette forme. Voici la commande la plus fréquente +pour faire des retouches, et pratiquement tout le reste de ce +chapitre aura pour but montrer, à travers des exemples, comment +l'utiliser. L'exemple ci-dessous change la couleur des têtes de +notes@tie{}: + +@cindex couleur,exemple d'utilisation de la propriété +@cindex NoteHead, exemple de dérogation + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{La commande \revert} + +@cindex revert, commande + +@funindex \revert +@funindex revert + +Une fois qu'elle a été modifiée, la propriété conserve sa nouvelle +valeur jusqu'à ce qu'elle soit à nouveau modifiée ou qu'elle rencontre +la commande @code{\revert}. La commande @code{\revert} obéit à +la syntaxe ci-dessous et ramène la valeur de la propriété à sa valeur +d'origine. Attention@tie{}: dans le cas où plusieurs @code{\override} +ont été employés, il ne s'agit pas de la valeur précédente mais bien de +la valeur par défaut. + +@example +\revert @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-de-rendu} +@end example + +Tout comme pour la commande @code{\override}, la mention du +@var{Contexte} est souvent facultative. Elle sera omise dans de +nombreux exemples ci-dessous. Voici un exemple qui ramène la +couleur des deux dernières notes à leur valeur par défaut@tie{}: + +@cindex couleur,exemple d'utilisation de la propriété +@cindex NoteHead, exemple de dérogation + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a +\revert NoteHead #'color +b4 c | +@end lilypond + +@strong{Le préfixe \once} + +@funindex \once +@funindex once + +Les commandes @code{\override} et @code{\set} peuvent supporter +toutes les deux le préfixe @code{\once}. Celui-ci a pour fonction de +n'appliquer la commande @code{\override} ou @code{\set} qu'à +l'instant musical en cours, avant que la propriété ne reprenne +sa valeur par défaut. Toujours à partir du même exemple, il est +possible de ne changer la couleur que d'une seule note@tie{}: + +@cindex couleur,exemple d'utilisation de la propriété +@cindex NoteHead, exemple de dérogation + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\once \override NoteHead #'color = #red +e4 f | +\once \override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{La commande \overrideProperty} + +@cindex overrideProperty, commande + +@funindex \overrideProperty +@funindex overrideProperty + +Il existe une autre forme de commande @code{\override}, +@code{\overrideProperty}, qui est parfois utile. Nous la mentionnons +ici par souci d'exhaustivité@tie{}; pour le détail, voir +@rextendnamed{Difficult tweaks,Retouches complexes}. + +@c Maybe explain in a later iteration -td + +@strong{La commande \tweak} + +@cindex tweak, commande + +@funindex \tweak +@funindex tweak + +La dernière commande disponible pour les retouches est +@code{\tweak}. Elle sert à changer les propriétés d'objets qui +surviennent simultanément dans la musique, comme par exemple les +notes d'un accord. La commande @code{\override} modifierait toutes +les notes de l'accord, tandis que @code{\tweak} permet de ne modifier +que l'élément suivant dans la chaîne de saisie. + +Voici un exemple. Supposons que nous voulions changer la taille de +la tête de note du milieu (le mi) dans un accord de do majeur. Voyons +d'abord ce que donnerait @code{\once \override}@tie{}: + +@cindex font-size, exemple d'utilisation de la propriété +@cindex NoteHead, exemple de dérogation + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +\once \override NoteHead #'font-size = #-3 +4 +4 +@end lilypond + +Nous voyons que @code{\override} modifie @emph{toutes} les têtes +de notes de l'accord, car toutes les notes de l'accord surviennent au +même @emph{instant musical} et que la fonction de @code{\once} +est de faire porter la modification sur tous les objets du type spécifié +qui surviennent au même instant musical, comme le fait la commande +@code{\override} elle-même. + +La commande @code{\tweak} opère différemment. Elle agit +sur l'élément immédiatement suivant dans la chaîne de saisie. Elle ne +fonctionne toutefois que sur des objets créés directement à partir de +la chaîne de saisie, c'est-à-dire essentiellement des têtes de notes et +des articulations@tie{}; des objets comme les hampes ou les +altérations accidentelles sont créés ultérieurement et ne peuvent +être retouchés de cette manière. En outre, quand la retouche porte +sur une tête de note, celle-ci @emph{doit} appartenir à un accord, +c'est-à-dire être comprise à l'intérieur de chevrons gauche/droite. +Pour retoucher une note isolée, il faut donc placer la commande +@code{\tweak} avec la note à l'intérieur des chevrons gauche/droite. + +Pour reprendre notre exemple, la taille de la note du milieu d'un +accord peut être modifiée de cette manière@tie{}: + +@cindex font-size, exemple d'utilisation de la propriété +@cindex @code{\tweak}, exemple + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +4 +@end lilypond + +Vous noterez que la syntaxe de @code{\tweak} est différente de +celle de la commande @code{\override}. Ni le contexte, +ni l'objet n'ont besoin d'être spécifiés@tie{}; au contraire, cela +produirait une erreur si on le faisait. Tous deux sont sous-entendus +par l'élément suivant dans la chaîne de saisie. La syntaxe générale +de la commande @code{\tweak} est donc, tout simplement@tie{}: + +@example +\tweak #'@var{propriété-de-rendu} = #@var{valeur} +@end example + +La commande @code{\tweak} est aussi utilisée quand on veut, dans +une série d'articulations, n'en modifier qu'une seule. Ainsi@tie{}: + +@cindex couleur, exemple d'utilisation de la propriété +@cindex @code{\tweak}, exemple + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4^"Black" + -\tweak #'color #red ^"Red" + -\tweak #'color #green _"Green" +@end lilypond + +@noindent +Attention@tie{}: la commande @code{\tweak} doit être précédée d'une +marque d'articulation, comme si elle-même était une articulation. + +@cindex nolets imbriqués +@cindex triolets imbriqués +@cindex crochet de nolet +@cindex nolet, crochet +@cindex triolet, crochet + +@funindex TupletBracket + +Quand plusieurs nolets sont imbriqués et commencent au même instant +musical, c'est encore la commande @code{\tweak} qui est utilisée pour +changer l'apparence de l'un d'entre eux. Dans l'exemple suivant, le +long crochet de nolet et le premier des trois crochets courts commencent +au même instant musical@tie{}; une commande @code{\override} +s'appliquerait donc à la fois aux deux. En revanche, @code{\tweak} +permet de les dissocier. La première commande @code{\tweak} indique que +le long crochet doit être placé au-dessus des notes, et la seconde +indique que le coefficient de nolet doit être imprimé en rouge sur le +premier crochet de triolet court. + +@cindex @code{\tweak}, exemple +@cindex direction, exemple d'utilisation de la propriété +@cindex couleur, exemple d'utilisation de la propriété + +@lilypond[quote,ragged-right,verbatim,fragment,relative=2] +\tweak #'direction #up +\times 4/3 { + \tweak #'color #red + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + +Si les nolets imbriqués ne commencent pas au même moment, +leur apparence peut alors être modifiée de la façon habituelle, +avec la commande @code{\override}@tie{}: + +@cindex texte, exemple d'utilisation de la propriété +@cindex tuplet-number, exemple de fonction +@cindex transparence, exemple d'utilisation de la propriété +@cindex TupletNumber, exemple de dérogation + +@c NOTE Tuplet brackets collide if notes are high on staff +@c See issue 509 +@lilypond[quote,ragged-right,verbatim,fragment,relative=1] +\times 2/3 { c8[ c c] } +\once \override TupletNumber + #'text = #tuplet-number::calc-fraction-text +\times 2/3 { + c8[ c] + c8[ c] + \once \override TupletNumber #'transparent = ##t + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + +@seealso +Manuel de notation : +@ruser{La commande d'affinage (@emph{tweak})}. + + +@node Le manuel des références internes +@section Le manuel des références internes +@translationof The Internals Reference manual + +@cindex Références internes + +@menu +* Propriétés des objets de rendu:: +* Propriétés listées par interface:: +* Types de propriétés:: +@end menu + +@node Propriétés des objets de rendu +@subsection Propriétés des objets de rendu +@translationof Properties of layout objects + +@cindex propriétés des objets de rendu +@cindex propriétés des objets graphiques (grobs) +@cindex grobs, propriétés +@cindex objets de rendu, propriétés +@cindex Manuel des références internes + +Imaginons que votre partition contienne une liaison trop fine à votre +goût et que vous vouliez la rendre plus épaisse. Comment vous y +prendre@tie{}? Vous êtes convaincu, avec tout ce qui a été dit sur la +souplesse de LilyPond, qu'une telle retouche est réalisable et +vous vous dites qu'elle fera sans doute intervenir la commande +@code{\override}. Mais existe-t-il une propriété lourde qui s'applique +à une liaison et, dans l'affirmative, comment faire pour la +modifier@tie{}? C'est là qu'intervient la Référence des propriétés +internes. Elle contient toutes les informations dont vous avez besoin +pour construire n'importe quelle commande @code{\override}. + +Avant de nous plonger dans la Référence des propriétés +internes, un mot d'avertissement. Il s'agit d'un document de +@strong{références}, de sorte qu'il ne contient pas ou peu +d'explications@tie{}: son but est de présenter les informations de +façon précise et concise. Cela peut paraître décourageant +à première vue. Pas d'inquiétude@tie{}! Les conseils et les +explications fournis ici vous permettent de retrouver par vous-même les +informations dans la Référence des propriétés internes. Il +suffit d'un peu de pratique. + +@cindex override, exemple +@cindex dérogation, exemple +@cindex Références internes, exemple d'utilisation +@cindex @code{\addlyrics} -- exemple + +Prenons un exemple concret tiré d'un morceau de musique connu@tie{}: + +@c Mozart, Die Zauberflöte Nr.7 Duett + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +Admettons que nous voulions rendre les traits de liaison plus épais. +Est-ce possible@tie{}? Une liaison est assurément un objet de rendu, si +bien que la question est @qq{Existe-t-il une propriété attachée aux +liaisons et qui en contrôle l'épaisseur@tie{}?} Pour y répondre, nous +consultons la Référence des propriétés internes (ou RPI pour faire +court). + +Vous trouverez sur le site de LilyPond @uref{http://lilypond.org} la +RPI correspondant à votre version du programme. Allez sur la page +Documentation et cliquez sur Référence des propriétés internes. +Pour l'apprentissage, mieux vaut utiliser la version HTML standard, +et non la @qq{page unique en anglais} ou le PDF. Durant la lecture +des prochains paragraphes, il vous est conseillé de vous y reporter +réellement afin que les explications prennent tout leur sens. + +En dessous du bandeau d'en-tête figurent cinq liens. Cliquez sur le +lien vers le @emph{Backend}, où se trouvent les informations sur les +objets de rendu. En dessous du titre @strong{Backend}, choisissez +alors le lien vers @emph{Tous les objets de rendu}. La page qui s'ouvre +énumère, dans l'ordre alphabétique, tous les objets utilisés dans votre +version de LilyPond. Cliquez sur Liaisons (@emph{Slurs} en anglais), +et les propriétés des liaisons apparaîtront. + +Il existe un autre moyen de trouver cette page, à partir du Manuel de +notation. Une des pages qui traitent des liaisons contient un lien vers +la Référence des propriétés internes, qui mène directement à cette +page. Mais lorsque vous connaissez le nom de l'objet à retoucher, le +plus simple est de consulter la RPI. + +La page de la RPI sur les liaisons commence par préciser que les objets +Liaison sont créés par le graveur Slur_engraver. Vient ensuite la liste +des réglages standard. Attention@tie{}: ceux-ci @strong{ne suivent pas} +l'ordre alphabétique. Il faut donc les parcourir en entier pour trouver +la propriété susceptible de contrôler l'épaisseur des traits de liaison. + +@example +@code{thickness} (nombre) + @code{1.2} + Épaisseur de ligne, généralement mesurée en @code{line-thickness} +@end example + +Voilà qui semble approprié pour changer l'épaisseur (@emph{thickness} en +anglais). On apprend que la valeur de @code{thickness} +est un simple nombre (@emph{number}), qu'elle est par défaut définie +à 1,2 et que l'unité de mesure est fixée par une autre propriété +appelée @code{line-thickness}. + +Comme il a été indiqué, on ne trouve que peu, voire pas du tout +d'explication dans la RPI, mais nous en savons assez pour essayer +de changer l'épaisseur de la liaison. Comme nous l'avons vu, le +nom de l'objet est @code{Slur}, le nom de la propriété à changer +est @code{thickness} et la nouvelle valeur sera un nombre supérieur +à @code{1.2} si l'on veut augmenter l'épaisseur du trait. + +Pour construire la commande @code{\override}, il suffit donc de +remplacer les valeurs que nous avons trouvées en guise de noms, en +laissant de côté le contexte. Commençons par une valeur très élevée +dans un premier temps, pour nous assurer que la commande fonctionne. +Nous obtenons@tie{}: + +@example +\override Slur #'thickness = #5.0 +@end example + +N'oublions pas le @code{#'} qui doit précéder le nom de la propriété et +le @code{#} qui doit précéder la nouvelle valeur. + +La dernière question est@tie{}: @qq{Où placer cette commande@tie{}?} +Tant qu'on n'est pas sûr de soi, la meilleure réponse est @qq{À +l'intérieur de l'expression musicale, avant la première liaison et +proche d'elle.} Essayons@tie{}: + +@cindex Slur, exemple de dérogation +@cindex thickness, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +et nous constatons que le trait de liaison est beaucoup plus épais. + +Telle est la façon normale de construire les commandes +@code{\override}. Comme nous aurons l'occasion de le voir +par la suite, le problème est parfois plus complexe. Dans +l'immédiat, nous en savons assez pour construire nos propres +commandes -- mais il faut encore s'exercer. Les exemples +suivants sont là dans cette intention. + +@subheading Détermination du contexte adéquat + +@cindex contexte, détermination du +@cindex contexte, identification correcte du + +Tout d'abord, de quoi avions-nous besoin pour préciser le +contexte@tie{}? À quoi devait-il ressembler@tie{}? Gageons que les +liaisons appartiennent au contexte Voix, dans la mesure où +elles sont étroitement liées à une ligne mélodique, mais +comment en être sûr@tie{}? Pour répondre à cette question, +revenons en haut de la page de la RPI consacrée aux liaisons@tie{}; +il est écrit@tie{}: @qq{Les objets Liaison sont créés par le graveur +Slur_engraver}. Ainsi les liaisons seront créées dans n'importe +quel contexte où se trouve le @code{Slur_engraver}. Suivons +le lien vers la page @code{Slur_engraver}. Tout en bas, on +lit que le @code{Slur_engraver} est un élément appartenant +à cinq contextes Voix, dont le contexte de voix +standard, @code{Voice}. Notre hypothèse était donc juste. +Et parce que @code{Voice} est un contexte de très bas +niveau, qu'il est activé sans ambiguïté par le fait que l'on est +en train de saisir des notes, on peut ici ne pas le mentionner. + +@subheading Redéfinition pour une seule occurence + +@cindex dérogation pour une seule fois +@cindex usage unique, dérogation à + +@funindex \once +@funindex once + +Dans le dernier exemple ci-dessus, @emph{toutes} les liaisons étaient +plus épaisses. Et si on veut épaissir uniquement la première +liaison@tie{}? On recourt alors à la commande @code{\once}. Placée +juste avant la commande @code{\override}, elle lui indique de ne changer +que la liaison commençant avec la note @strong{juste après}. Si la note +juste après n'ouvre pas une liaison, la commande sera sans aucun effet +-- elle ne reste pas en mémoire jusqu'à la prochaine liaison, elle est +purement et simplement ignorée. Il faut donc que la commande introduite +par @code{\once} soit insérée comme suit@tie{}: + + +@cindex Slur, exemple de dérogation +@cindex thickness, exemple d'utilisation de la propriété +@cindex Liaison, exemple de dérogation +@cindex Épaisseur, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes8[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Alors seule la première liaison est rendue plus épaisse. + +La commande @code{\once} peut aussi être utilisée devant la commande +@code{\set}. + + +@subheading Rétablissement + +@cindex revert +@cindex rétablissement +@cindex retour +@cindex défaut, retour aux propriétés par + +@funindex \revert +@funindex revert + +Et si l'on voulait que les deux premières liaisons soient plus +épaisses@tie{}? On pourrait bien sûr utiliser deux commandes, chacune +précédée de @code{\once}, et placées juste avant la note par laquelle +débute la liaison@tie{}: + + +@cindex Slur, exemple de dérogation +@cindex thickness, exemple d'utilisation de la propriété +@cindex Liaison, exemple de dérogation +@cindex Épaisseur, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes[( g]) g | + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +mais on peut aussi, au lieu de la commande @code{\once}, utiliser après +la seconde liaison la commande @code{\revert}, qui ramène la propriété +@code{thickness} à sa valeur par défaut@tie{}: + +@cindex Slur, exemple de dérogation +@cindex thickness, exemple d'utilisation de la propriété +@cindex Liaison, exemple de dérogation +@cindex Épaisseur, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + bes[( g]) g | + g8[( es]) es + % Revert thickness of all following slurs to default of 1.2 + \revert Slur #'thickness + d8[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +N'importe quelle propriété modifiée par @code{\override} peut ainsi +être ramenée, grâce à la commande @code{\revert}, à sa valeur par +défaut. + +Ici s'achève notre introduction à la RPI et aux retouches +simples. Vous trouverez d'autres exemples dans les prochaines +sections de ce chapitre@tie{}; ils vous permettront, d'une part, +d'apprendre à connaître un peu mieux la RPI et, d'autre part, de +vous entraîner un peu plus à y chercher les informations. Ces +exemples seront progressivement accompagnés d'explications et +introduiront des termes nouveaux. + +@node Propriétés listées par interface +@subsection Propriétés listées par interface +@translationof Properties found in interfaces + +@cindex interface +@cindex interfaces, propriétés des +@cindex propriétés des interfaces + +Supposons maintenant que nous voulions imprimer des paroles en italique. +Quelle formulation de la commande @code{\override} allons-nous +utiliser@tie{}? Nous consultons en premier lieu, comme précédemment, la +page de la RPI qui contient la liste @qq{Tous les objets de rendu}, et +recherchons un objet qui contrôle les paroles. Nous trouvons +@code{LyricText}, qui semble approprié. Nous cliquons dessus et nous +voyons apparaître les différentes propriétés des paroles, parmi +lesquelles @code{font-series} et @code{font-size}. Mais aucune ne +propose l'italique. Car la mise en forme des caractères est une +propriété commune à tous les objets d'écriture, si bien que, au lieu de +figurer dans tous les objets de rendu, elle est regroupée avec d'autres +propriétés semblables et placée dans une @strong{Interface}, la +@code{font-interface}. + +Il nous faut donc apprendre à trouver les propriétés des interfaces +et découvrir les objets qui utilisent les propriétés de ces interfaces. + +Retournons à la page de la RPI qui traite des paroles +(@emph{LyricText}). En bas de la page est dressée sous forme de liens +la liste des interfaces qui concernent LyricText. Cette liste comporte +plusieurs entrées, dont @code{font-interface}. En cliquant dessus, nous +voyons apparaître les différentes propriétés associées à cette +interface, qui sont en même temps les propriétés de tous les objets qui +s'y rapportent, parmi lesquels LyricText. + +Nous avons alors sous les yeux tous les réglages des propriétés qui +contrôlent les polices de caractères, et notamment +@code{font-shape(symbole)}, où @code{symbole} peut prendre la valeur +@code{upright}, @code{italics} ou @code{caps}. + +Vous remarquerez que @code{font-series} et @code{font-size} figurent +aussi dans la liste. La question qui ne manque pas de se poser +est@tie{}: @qq{Comment se fait-il que les propriétés @code{font-series} +et @code{font-size} se retrouvent à la fois dans @code{LyricText} et +dans l'interface @code{font-interface} alors que ce n'est pas le cas +pour @code{font-shape} ?} La réponse est que lorsqu'un objet +@code{LyricText} est créé, les valeurs globales par défaut de +@code{font-series} et @code{font-size} sont modifiées, mais pas celles +de @code{font-shape}. Les possibilités de modification dans +@code{LyricText} ne concernent donc que les valeurs à appliquer à +@code{LyricText}. Les autres objets qui dépendent de +@code{font-interface} fixeront leurs propriétés différemment lorsqu'ils +seront créés. + +Voyons maintenant si nous sommes en mesure de formuler la commande +@code{\override} pour mettre les paroles en italique. L'objet est +@code{LyricText}, la propriété est @code{font-shape} et la valeur est +@code{italic}. Comme auparavant, nous laissons de côté le contexte. + +Signalons rapidement -- même si cette remarque est importante -- que, +puisque les valeurs de @code{font-shape} se présentent sous forme de +symboles, elles doivent être précédées d'une simple apostrophe, +@code{'}. C'est pour cette raison qu'il fallait une apostrophe devant +@code{thickness} dans l'exemple précédent, et qu'il en faut une devant +@code{font-shape}. Ce sont à chaque fois des symboles, qui sont +interprétés comme tels par LilyPond. Certains symboles peuvent être des +noms de propriété, comme @code{thickness} ou @code{font-shape}, +d'autres sont des valeurs à attribuer aux propriétés, comme +@code{italic}. À ne pas confondre avec les chaînes de caractères +libres, qui se présentent comme @code{"un texte libre"}@tie{}; pour plus +de détails sur les symboles et les chaînes de caractères, voir le +@rextendnamed{Scheme tutorial,Tutoriel Scheme}. + +Ainsi, la commande @code{\override} pour mettre les paroles en italique +est@tie{}: + +@example +\override LyricText #'font-shape = #'italic +@end example + +@noindent +et doit être placée juste devant et tout près des paroles à modifier, +comme ceci@tie{}: + +@cindex font-shape, exemple d'utilisation de la propriété +@cindex italic, exemple +@cindex LyricText, exemple de dérogation +@cindex @code{\addlyrics}, exemple + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + \override LyricText #'font-shape = #'italic + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +et voilà les paroles en italiques. + +@subheading Spécification du contexte en mode lyrique + +@cindex contexte, spécification en mode lyrique +@cindex mode lyrique, spécification de contexte en + +Lorsqu'il s'agit de paroles et qu'on cherche à préciser le contexte +sur le modèle de ce qui a été fait précédemment, la commande échoue. +Car une syllabe saisie en mode Paroles (lyricmode) se termine +obligatoirement par une espace, un saut de ligne ou un nombre. Tout +autre caractère compte comme un élément de la syllabe. C'est pourquoi +il faut une espace ou un saut de ligne avant le @code{@}} final, pour +éviter qu'il ne soit assimilé à la dernière syllabe. De même, il faut +insérer des espaces avant et après le point, @qq{.}, qui sépare le nom +de contexte du nom de l'objet, faute de quoi les deux noms seront joints +et l'interpréteur ne pourra pas les reconnaître. La formulation +correcte est donc@tie{}: + +@example +\override Lyrics . LyricText #'font-shape = #'italic +@end example + +@warning{Dans la saisie des paroles, pensez à toujours laisser une +espace entre la dernière syllabe et l'accolade fermante.} + +@warning{Lorsqu'on retouche des paroles, toujours placer des espaces +autour du point qui sépare le nom de contexte du nom d'objet.} + +@seealso +Manuel d'extension : +@rextendnamed{Scheme tutorial,Tutoriel Scheme}. + + +@node Types de propriétés +@subsection Types de propriétés +@translationof Types of properties + + +@cindex propriété, types de + +Nous avons vu jusqu'à maintenant deux types de propriétés@tie{}: +@code{nombre} et @code{symbole}. Pour pouvoir fonctionner, la valeur +associée à une propriété doit correspondre au type attendu et suivre les +règles liées à ce type. Le type de propriété est toujours donné entre +parenthèses après le nom de propriété dans la RPI. Voici une liste des +différents types de propriétés, avec les règles qui les régissent et +quelques exemples d'utilisation. Il faut, bien sûr, toujours ajouter un +symbole @emph{hash}, @code{#}, devant ces valeurs lors de la saisie de +la commande @code{\override}. + +@multitable @columnfractions .2 .45 .35 +@headitem Type de propriété + @tab Règles + @tab Exemples +@item Booléenne (@emph{Boolean} en anglais) + @tab Vrai (@emph{true} en anglais) ou Faux (@emph{false} en anglais), + sous la forme @code{#t} ou @code{#f} + @tab @code{#t}, @code{#f} +@item Dimension (en lignes de portée) + @tab Un nombre positif décimal (en unités de lignes de portée) + @tab @code{2.5}, @code{0.34} +@item Direction + @tab Une direction valide ou son équivalent numérique (valeur décimale + comprise entre -1 et 1 seulement) + @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @code{-1} +@item Entier (@emph{Integer} en anglais) + @tab Un nombre entier positif + @tab @code{3}, @code{1} +@item Liste + @tab Plusieurs valeurs séparées par une espace, encadrées par des +parenthèses et prédédées par une apostrophe + @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'(1.0 0.25 0.5)} +@item Markup (ou étiquette) + @tab Toute commande @code{\markup} valide + @tab @code{\markup @{ \italic "cresc." @}} +@item Durée (@emph{Moment} en anglais) + @tab Une durée de note construite avec la fonction make-moment + @tab @code{(ly:make-moment 1 4)}, @code{(ly:make-moment 3 8)} +@item Nombre + @tab Une valeur décimale positive ou négative + @tab @code{3.5}, @code{-2.45} +@item Paire (de nombres) + @tab Deux nombres séparées par @qq{espace point espace}, encadrés +par des parenthèses et précédés par une apostrophe + @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} +@item Symbole + @tab L'un des symboles autorisés pour cette propriété, précédé par une +apostrophe + @tab @code{'italic}, @code{'inside} +@item Inconnu (@emph{Unknown} en anglais) + @tab Un processus, ou @code{#f} pour empêcher toute action + @tab @code{bend::print}, @code{ly:text-interface::print}, @code{#f} +@item Vecteur + @tab Une liste de trois éléments encadrés par des parenthèses et +précédés par apostrophe-hash, @code{'#} + @tab @code{'#(#t #t #f)} +@end multitable + + +@seealso +Manuel d'extension : +@rextendnamed{Scheme tutorial,Tutoriel Scheme}. + + +@node Apparence des objets +@section Apparence des objets +@translationof Appearance of objects + +Il est temps de mettre en pratique les notions apprises précédemment +pour modifier l'allure de la partition@tie{}; les exemples qui suivent +montrent l'utilisation des différentes méthodes de retouche. + +@menu +* Visibilité et couleur des objets:: +* Taille des objets:: +* Longueur et épaisseur des objets:: +@end menu + + +@node Visibilité et couleur des objets +@subsection Visibilité et couleur des objets +@translationof Visibility and color of objects + +Dans un but pédagogique, on peut être amené à masquer certains éléments +d'une partition, que les élèves doivent ensuite compléter. Imaginons, +par exemple, un exercice dans lequel il faudrait rétablir les barres de +mesure dans un morceau de musique. En temps normal, les barres de +mesure s'insèrent automatiquement. Comment faire pour les effacer de la +partition@tie{}? + +Avant de nous y attaquer, souvenons-nous que les propriétés d'objets +sont parfois groupées dans ce qu'on appelle des @emph{interfaces} -- +voir @ref{Propriétés listées par interface}. Cela permet de rapprocher +toutes les propriétés susceptibles d'être utilisées ensemble pour +modifier un objet graphique -- si l'une d'elles est choisie pour un +objet, elle s'appliquera à tous les autres. Certains objets tirent +alors leurs propriétés de telle ou telle interface, d'autres objets de +telle ou telle autre interface. La liste des interfaces qui contiennent +les propriétés liées à un objet graphique (@emph{grob}) figure dans la +RPI, en bas de la page de description du @emph{grob}@tie{}; pour voir +ces propriétés, il faut aller voir ces interfaces. + +Nous avons vu, dans @ref{Propriétés des objets de rendu}, comment +trouver les informations sur les @emph{grobs}. Nous procédons de la +même manière et consultons la RPI pour connaître l'objet chargé +d'imprimer les barres de mesure. En cliquant sur @emph{Backend} puis +sur @emph{Tous les objets de rendu}, nous trouvons un objet appelé +@code{BarLine}. Parmi ses propriétés, deux d'entre elles déterminent +son aspect visuel@tie{}: @code{break-visibility} et @code{stencil}. +L'objet @code{BarLine} est également lié à plusieurs interfaces, dont la +@code{grob-interface} où figurent les propriétés @code{transparent} et +@code{color}. Toutes peuvent modifier l'aspect visuel des barres de +mesure -- et de beaucoup d'autres objets, bien sûr. Examinons chacune +d'elles tour à tour. + +@subheading stencil + +@cindex stencil, propriété + +Cette propriété contrôle l'apparence des barres de mesure en précisant +le type de symbole (glyphe) à imprimer. Comme pour de nombreuses +autres propriétés, on peut lui indiquer de ne rien imprimer en lui +attribuant la valeur @code{#f}. Essayons en laissant de côté, une fois +encore, le contexte concerné (@code{Voice} en l'occurrence)@tie{}: + +@cindex BarLine, exemple de dérogation +@cindex stencil, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Les barres de mesure sont encore là@tie{}! Pourquoi@tie{}? Retournons +à la RPI et regardons de nouveau la page qui traite des propriétés de +BarLine. En haut de la page, il est précisé que @qq{Les objets BarLine +sont créés par le graveur Bar_engraver}. Allons à la page de +@code{Bar_engraver}. Tout en bas se trouve la liste des contextes dans +lesquels fonctionne ce graveur. Tous sont du type @code{Staff}, de +sorte que, si la commande @code{\override} n'a pas fonctionné comme +prévu, c'est parce que @code{Barline} n'appartient pas au contexte par +défaut, @code{Voice}. Si le contexte spécifié est erroné, la commande +ne fonctionne pas. Cela n'entraîne pas de message d'erreur, et rien +n'apparaît dans le fichier log. Essayons de corriger en mentionnant le +bon contexte@tie{}: + +@cindex BarLine, exemple de dérogation +@cindex stencil, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Cette fois, les barres de mesure ont disparu. + +Vous remarquerez que l'affectation de la valeur @code{#f} à la propriété +@code{stencil} déclechera une erreur dès lors que l'objet en question se +doit d'avoir des dimensions pour les nécessités du traitement. Ce sera +le cas, par exemple, si vous effacez le @code{stencil} d'un objet +@code{NoteHead}. Il vaut mieux, en pareil caas, utiliser la fonction +@code{point-stencil} qui, quant à elle, attribue à l'objet une taille à +zero@tie{}: + +@lilypond[quote,verbatim,relative=2] +{ + c4 c + \once \override NoteHead #'stencil = #point-stencil + c4 c +} +@end lilypond + +@subheading visibilité des barres (break-visibility) + +@cindex break-visibility, propriété + +La RPI mentionne, à la page sur @code{BarLine}, que la propriété +@code{break-visibility} attend comme argument un vecteur de trois +boléens. Ceux-ci indiquent respectivement si les barres de mesure +doivent être imprimées ou non à la fin de la ligne, à l'intérieur de la +ligne et au début de la ligne. Dans notre cas, nous voulons que toutes +les barres soient supprimées, si bien que la valeur dont nous avons +besoin est @code{'#(#f@tie{}#f@tie{}#f)}. Essayons, sans oublier +d'ajouter le contexte @code{Staff}. Vous remarquerez que, en plus de +cette valeur, nous ajoutons @code{#'#} devant la parenthèse ouvrante. +Le @code{'#} est nécessaire car il fait partie intégrante de la valeur +contenant un vecteur, et le premier @code{#} est là, comme toujours avec +la commande @code{\override}, pour introduire la valeur elle-même. + +@cindex BarLine, exemple de dérogation +@cindex break-visibility exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'break-visibility = #'#(#f #f #f) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Comme on peut le constater, cette solution-là aussi supprime les barres +de mesure. + +@subheading transparence + +@cindex transparent, propriété +@cindex transparence + +La RPI mentionne, à la page sur @code{grob-interface}, que la propriété +@code{transparent} attend comme argument un boléen. Il faudrait donc +mettre @code{#t} pour rendre l'objet transparent. Dans cet exemple, +essayons de rendre transparente la métrique (@emph{time signature} en +anglais) plutôt que les barres de mesure. Pour cela, il nous faut +trouver le nom du @emph{grob} chargé de l'indication de mesure. De +retour sur la page @qq{Tous les objets de rendu} de la RPI, nous +cherchons les propriétés de l'objet @code{TimeSignature}. Celui-ci est +géré par le graveur @code{Time_signature_engraver} qui, comme vous +pouvez le constater, appartient au contexte @code{Staff} et peut se +rattacher à la @code{grob-interface}. Dans ces conditions, la commande +pour rendre la métrique transparente est@tie{}: + +@cindex TimeSignature, exemple de dérogation +@cindex transparent, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'transparent = ##t + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +La métrique a bien disparu mais la commande a laissé un blanc en lieu et +place du chiffrage. Ce peut être souhaitable dans le cadre d'un +exercice, afin que les élèves aient la place pour compléter, mais dans +d'autres circonstances, ce peut être gênant. Pour y remédier, +attribuons plutôt au stencil des métriques la valeur @code{#f}@tie{}: + +@cindex TimeSignature, exemple de dérogation +@cindex stencil, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +La différence est flagrante@tie{}: le fait d'attribuer au stencil la +valeur @code{#f} supprime totalement l'objet, tandis que le fait de le +rendre @code{transparent} le laisse en place, mais de façon invisible. + +@subheading couleur + +@cindex color, propriété + +Essayons enfin de rendre les barres de mesure invisibles en les colorant +en blanc. La difficulté est de savoir si les barres blanches vont +couper ou non les lignes de la portée aux endroits où elles se +croisent. Vous verrez dans les exemples ci-dessous que cela peut se +produire, sans qu'on le sache à l'avance. Les explications de ce +phénomène et les solutions pour y remédier sont exposées dans +@ruser{Blanchiment des objets}. Pour le moment, acceptons cet +inconvénient et concentrons-nous sur l'apprentissage de la gestion des +couleurs. + +La @code{grob-interface} indique que la valeur de la propriété +@code{color} est une liste, sans plus d'explication. En fait, cette +liste est une liste de valeurs en unités internes@tie{}; pour éviter +d'avoir à chercher ce qu'il faut y mettre, il existe différents moyens +d'indiquer la couleur. Le premier moyen consiste à utiliser l'une des +couleurs @emph{normales} de la première @ruser{Liste des couleurs}. +Pour mettre les barres de mesure en blanc, on écrit@tie{}: + +@cindex BarLine, exemple de dérogation +@cindex color, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #white + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +et nous constatons que les barres de mesure sont une fois de plus +invisibles. Attention@tie{}: aucune apostrophe ne précède @code{white} +-- il ne s'agit pas d'un symbole mais d'une @strong{fonction}. Quand on +l'invoque, elle fournit une liste de valeurs internes requises pour +changer la couleur en blanc. Les autres couleurs aussi, dans la +@qq{liste normale}, sont des fonctions. Pour en être certain, vous +pouvez faire l'essai en choisissant une autre fonction de la liste en +guise de couleur. + +@cindex couleur X11 +@cindex X11, couleurs + +@funindex x11-color + +Le deuxième moyen de changer la couleur consiste à utiliser la deuxième +@ruser{Liste des couleurs}, dite noms de couleurs X11. Ceux-ci doivent +obligatoirement être précédés d'une autre fonction, qui convertit les +noms de couleurs X11 en une liste de valeurs internes, @code{x11-color}, +comme ceci@tie{}: + +@cindex BarLine, exemple de dérogation +@cindex color, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(x11-color 'white) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Vous noterez que, dans ce cas, la fonction @code{x11-color} admet un +symbole comme argument@tie{}; il faut donc placer une apostrophe devant +le symbole et insérer les deux à l'intérieur de parenthèses. + +@cindex rgb, couleur +@cindex couleurs rgb + +@funindex rgb-color + +Il existe une troisième fonction, écrite pour convertir les valeurs RVB +en couleurs internes -- la fonction @code{rgb-color}. Elle comporte +trois arguments, donnant respectivement l'intensité du rouge, du vert et +du bleu. Ces arguments prennent des valeurs comprises entre 0 et 1. +Ainsi, pour choisir la couleur rouge, la valeur serait +@code{(rgb-color 1 0 0)}@tie{}; pour le blanc, ce serait +@code{(rgb-color 1 1 1)}@tie{}: + +@cindex BarLine, exemple de dérogation +@cindex color, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(rgb-color 1 1 1) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Enfin, il existe une échelle de gris parmi les possibilités de couleurs +X11. Elle va du noir (@code{'grey0}) au blanc (@code{'grey100}), avec +un pas de 1. Essayons de l'utiliser en attribuant à tous les objets de +notre exemple différentes nuances de gris@tie{}: + +@cindex StaffSymbol, exemple de dérogation +@cindex TimeSignature, exemple de dérogation +@cindex Clef, exemple de dérogation +@cindex NoteHead, exemple de dérogation +@cindex Stem, exemple de dérogation +@cindex BarLine, exemple de dérogation +@cindex color, exemple d'utilisation de la propriété +@cindex x11-color, exemple d'utilisation + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.StaffSymbol #'color = #(x11-color 'grey30) + \override Staff.TimeSignature #'color = #(x11-color 'grey60) + \override Staff.Clef #'color = #(x11-color 'grey60) + \override Voice.NoteHead #'color = #(x11-color 'grey85) + \override Voice.Stem #'color = #(x11-color 'grey85) + \override Staff.BarLine #'color = #(x11-color 'grey10) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Vous remarquerez le contexte associé à chacun des objets. Une erreur +sur ce point empêcherait la commande de fonctionner. Souvenez-vous que +le contexte est celui dans lequel est placé le graveur approprié. Pour +chaque graveur, on peut trouver son contexte par défaut en partant de +l'objet lui-même, puis en cherchant le graveur qui le produit@tie{}; la +page du graveur dans la RPI nous indique alors le contexte dans lequel +le graveur se trouve normalement. + + +@node Taille des objets +@subsection Taille des objets +@translationof Size of objects + +@cindex modification de la taille des objets +@cindex taille d'objets +@cindex objets, taille +@cindex objets, modification de taille + +Pour commencer, reprenons l'exemple qui se trouvait dans +@ref{Expressions musicales imbriquées}, qui montrait comment créer une +nouvelle portée temporaire, du type @rglos{ossia}. + +@cindex alignAboveContext, exemple d'utilisation de la propriété +@cindex @code{\with}, exemple + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Normalement, les ossias ne comportent ni clef ni indication de mesure, +et elles sont imprimées légèrement plus petit que la portée principale. +Nous avons déjà appris à enlever la clef et la métrique -- il suffit de +régler le stencil de chacun sur @code{#f}, comme ceci@tie{}: + +@cindex alignAboveContext, exemple d'utilisation de la propriété +@cindex @code{\with}, exemple +@cindex stencil, exemple d'utilisation de la propriété +@cindex Clef, exemple de dérogation +@cindex TimeSignature, exemple de dérogation + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } + { + \override Staff.Clef #'stencil = ##f + \override Staff.TimeSignature #'stencil = ##f + { f8 f c } + } + >> + r4 | + } +} +@end lilypond + +@noindent +La paire d'accolades ajoutée après la clause @code{\with} est nécessaire +pour être sûr que les retouches (@code{\override}) ainsi que la musique +qui se trouvent à l'intérieur soient bien appliquées à la portée +d'ossia. + +Mais alors, quelle différence y a-t-il à modifier le contexte de portée +au moyen de @code{\with} ou à modifier les stencils de la clef et de la +métrique avec @code{\override}@tie{}? La principale différence est que +les changements opérés dans une clause @code{\with} sont réalisés au +moment où le contexte est créé et restent par la suite les valeurs +@strong{par défaut} aussi longtemps que ce contexte existe, tandis que +les commandes @code{\set} ou @code{\override} insérées dans la musique +sont dynamiques -- elles provoquent des changements synchronisés avec un +point particulier de la musique. Si les changements sont annulés ou +désactivés par @code{\unset} ou @code{\revert}, les réglages reprennent +leurs valeurs par défaut, c'est-à-dire celles qui ont été fixées dans la +clause @code{\with}, ou, en l'absence de celle-ci, les valeurs par +défaut normales. + +Certaines propriétés de contexte ne peuvent être modifiées que dans une +clause @code{\with}. Il s'agit des propriétés qu'on ne peut évidemment +plus changer après que le contexte a été créé. C'est le cas de +@code{alignAboveContext} et de son pendant, @code{alignBelowContext} +-- une fois que la portée a été créée, son alignement est décidé et cela +n'aurait aucun sens de vouloir le modifier par la suite. + +Dans une clause @code{\with}, on peut aussi régler les valeurs par +défaut des propriétés d'un objet. Il suffit d'utiliser la commande +@code{\override} normale, sans s'occuper du nom de contexte +puisqu'il ne fait pas de doute qu'il s'agit du contexte en cours de +modification par la clause @code{\with}. Il se produirait même une +erreur si le contexte était précisé. + +Remplaçons donc l'exemple ci-dessus par celui-ci@tie{}: + +@cindex alignAboveContext, exemple d'utilisation de la propriété +@cindex @code{\with}, exemple +@cindex Clef, exemple de dérogation +@cindex TimeSignature, exemple de dérogation + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + % Don't print clefs in this staff + \override Clef #'stencil = ##f + % Don't print time signatures in this staff + \override TimeSignature #'stencil = ##f + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Venons-en finalement au changement de taille des objets. + +Certains objets sont créés comme des glyphes choisis dans une police de +caractères. C'est le cas des têtes de notes, des altérations, des +@emph{markup}, des clefs, des métriques, des nuances et des paroles. +Pour changer leur taille, on modifie la propriété @code{font-size}, +comme nous le verrons rapidement. D'autres objets, comme les liaisons +de phrasé ou de prolongation -- en général les objets étendus -- sont +dessinés à la demande, si bien qu'aucune @code{font-size} ne leur est +associée. Ces objets tirent généralement leur dimension des objets +auxquels ils sont rattachés, de sorte qu'on ne doit pas avoir à les +redimensionner à la main. D'autres propriétés, comme la hauteur des +hampes et des barres de mesure, l'épaisseur des ligatures et d'autres +lignes, et l'écartement des lignes de portée, doivent encore être +modifiées de façon particulière. + +Si l'on revient à l'exemple d'ossia, commençons par changer la taille de +police. Nous pouvons employer deux méthodes. Soit nous changeons la +taille de police de chaque type d'objet avec des commandes comme +celle-ci pour les têtes de notes (@code{NoteHead})@tie{}: + +@example +\override NoteHead #'font-size = #-2 +@end example + +soit nous changeons la taille de toutes les polices à la fois grâce à la +propriété @code{fontSize}, en utilisant @code{\set} ou en l'insérant +dans une clause @code{\with} (mais alors sans le @code{\set}). + +@example +\set fontSize = #-2 +@end example + +Chacune de ces méthodes réduira la taille de police de deux points par +rapport à sa valeur précédente, sachant que chaque point réduit ou +augmente la taille d'environ 12@tie{}%. + +Essayons sur l'exemple d'ossia : + +@cindex alignAboveContext, exemple d'utilisation de la propriété +@cindex @code{\with}, exemple +@cindex Clef, exemple de dérogation +@cindex TimeSignature, exemple de dérogation +@cindex fontSize, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + % Reduce all font sizes by ~24% + fontSize = #-2 + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Ce n'est pas encore parfait. Les têtes de notes et les crochets sont +plus petits mais, proportionnellement, les hampes sont trop longues et +les lignes de la portée trop espacées. Il faut donc les réduire dans +les mêmes proportions que les polices de caractères. La prochaine +sous-section montrera comment faire. + +@node Longueur et épaisseur des objets +@subsection Longueur et épaisseur des objets +@translationof Length and thickness of objects + +@cindex distance +@cindex épaisseur +@cindex longueur +@cindex magstep +@cindex taille, modification +@cindex hampe, modification de longueur +@cindex écartement des lignes, modification + +Dans LilyPond, les écartements et longueurs sont généralement mesurés en +@qq{intervalles de lignes} (@emph{staff-spaces} en anglais), +c'est-à-dire l'écartement qui sépare deux lignes adjacentes dans la +portée -- plus rarement, il est question de demi-intervalles de lignes. +Les propriétés d'épaisseur (@code{thickness}), quant à elles, sont +généralement mesurées en unités d'une propriété interne appelée +@qq{épaisseur de ligne} (@code{line-thickness}). Par exemple, les +lignes de crescendo/decrescendo présentent par défaut une épaisseur de +1@tie{}unité de @code{line-thickness}, alors que l'épaisseur d'une hampe +est de 1,3. Toutefois, certaines propriétés d'épaisseur sont +différentes@tie{}: par exemple, l'épaisseur des ligature -- +@code{beam-thickness} -- se mesure en espaces de portée. + +Dans ces conditions, comment ajuster les longueurs à la taille des +polices de caractères@tie{}? La solution consiste à utiliser une +fonction spéciale appelée @code{magstep} -- pseudo facteur de zoom --, +créée précisément dans ce but. Elle comporte un argument, le changement +de taille de police (#-2 dans l'exemple précédent), à partir duquel elle +applique un facteur de mise à l'échelle qui réduit, ou augmente, les +objets en question. Voici comment elle s'utilise@tie{}: + +@cindex alignAboveContext, exemple d'utilisation de la propriété +@cindex @code{\with}, exemple +@cindex Clef, exemple de dérogation +@cindex TimeSignature, exemple de dérogation +@cindex fontSize , exemple d'utilisation de la propriété +@cindex StaffSymbol, exemple de dérogation +@cindex magstep, exemple d'utilisation de la fonction +@cindex staff-space, exemple d'utilisation de la propriété +@cindex stencil, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + fontSize = #-2 + % Reduce stem length and line spacing to match + \override StaffSymbol #'staff-space = #(magstep -2) + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +@noindent +Puisque la longueur des hampes et plusieurs autres propriétés de +longueur sont calculées par rapport à la valeur de la propriété +@code{staff-space}, elles sont automatiquement mises à l'échelle. Vous +remarquerez que cela n'affecte que la dimension verticale de l'ossia -- +la dimension horizontale étant déterminée par les objets de la portée +principale de façon à rester synchronisée vis-à-vis d'elle, elle n'est +pas affectée par tous ces changements de taille. Bien sûr, si l'échelle +de toute la portée principale était modifiée, tout le placement +horizontal s'en trouverait affecté. Il en sera question plus bas dans +cette section. + +Voilà qui complète la création d'une ossia. Les taille et longueur de +tous les objets peuvent être modifiées de manière analogue. + +Pour de petits changements d'échelle, comme dans l'exemple ci-dessus, il +n'est généralement pas utile d'ajuster l'épaisseur des différentes +lignes telles que les barres de mesure, les ligatures, les soufflets de +crescendo/decrescendo, les liaisons, etc. Si l'épaisseur d'un objet en +particulier doit être ajustée, le mieux est de modifier sa propriété +@code{thickness}. Nous avons vu plus haut, dans +@ref{Propriétés des objets de rendu}, un exemple de modification de +l'épaisseur des liaisons. L'épaisseur de tous les objets tracés +(c'est-à-dire ceux qui ne proviennent pas d'une police de caractère) +peut être changée de la même manière. + +@node Positionnement des objets +@section Positionnement des objets +@translationof Placement of objects + + @menu +* Comportement automatique:: +* Objets inclus dans la portée:: +* Objets hors de la portée:: +@end menu + +@node Comportement automatique +@subsection Comportement automatique +@translationof Automatic behavior + +@cindex objets de la portée +@cindex objets extérieurs à la portée +@cindex portée, objets de la +@cindex portée, objets extérieurs à la + +Dans la notation musicale, il y a des objets qui appartiennent à la +portée et d'autres qui sont placés à l'extérieur de la portée. On les +appelle respectivement les @qq{objets de la portée} (@emph{within-staff +objects} en anglais) et les @qq{objets extérieurs à la portée} +(@emph{outside-staff objects} en anglais). + +Les objets de la portée sont ceux qui sont placés sur la portée +-- les têtes de notes et les hampes, les altérations, etc. Leur +position est généralement déterminée par la musique elle-même -- ils +sont placés verticalement sur des lignes spécifiques ou sont liés à +d'autres objets placés de cette manière. Normalement, les collisions +entre les têtes et queues de notes et les altérations dans des accords +proches sont évitées automatiquement. Comme nous le verrons rapidement, +il existe des commandes et des possibilités de retouche qui permettent +de modifier ce comportement automatique. + +Parmi les objets extérieurs à la portée, on compte des éléments comme +les marques de reprise, les indications de texte ou de nuances. Dans +LilyPond, la règle est de placer verticalement ces objets extérieurs à +la portée le plus près possible de la portée, tout en évitant la +collision avec d'autres objets. LilyPond utilise la propriété +@code{outside-staff-priority} pour déterminer l'ordre selon lequel +placer ces objets, de la manière suivante@tie{}: + +D'abord, LilyPond dresse la liste de tous les objets extérieurs à la +portée. Puis ceux-ci sont classés suivant leur +@code{outside-staff-priority}. Enfin, ils sont pris un par un, en +commençant par les objets avec la @code{outside-staff-priority} la plus +basse, et placés de façon à ne pas entrer en collision avec d'autres +objets déjà placés. Cela signifie que, si deux @emph{grobs} extérieurs +à la portée doivent occuper la même place, c'est celui qui a la +@code{outside-staff-priority} la plus basse qui est placé le plus près +de la portée. Et si deux objets ont la même +@code{outside-staff-priority}, le premier rencontré sera placé le plus +près de la portée. + +Dans l'exemple suivant, tous les @emph{markup} ont la même priorité, +dans la mesure où rien n'est indiqué explicitement. Vous remarquerez +que @code{Text3} est également positionné près de la portée, juste +en-dessous de @code{Text2}. + +@cindex markup, exemple + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +Les portées aussi sont positionnées, par défaut, le plus près possible +les unes des autres, en ménageant tout de même une certaine séparation. +Si des notes se rapprochent nettement d'une portée adjacente, elles ne +forceront les portées à s'écarter que s'il y a un risque de +chevauchement. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \relative c' { c4 a, } + } + \new Staff { + \relative c'''' { c4 a, } + } +>> +@end lilypond + + +@node Objets inclus dans la portée +@subsection Objets inclus dans la portée +@translationof Within-staff objects + +Nous avons vu que les commandes @code{\voiceXXX} jouent sur la +direction des liaisons, des doigtés et sur toute autre chose liée à +l'orientation des hampes. Ces commandes sont essentielles dans +la musique polyphonique pour distinguer des lignes mélodiques +entremêlées. Mais il arrive qu'on ait besoin de modifier ce +comportement automatique. On peut le faire pour toutes les parties de +la musique ou juste pour une note. La propriété qui contrôle ce +comportement est la propriété @code{direction} de chaque objet. +Expliquons d'abord ce qu'elle fait, puis nous présenterons un certain +nombre de commandes déjà prêtes qui évitent, pour les modifications les +plus courantes, d'avoir à encoder les retouches. + +Certains objets comme les traits des liaisons se recourbent tantôt +vers le haut, tantôt vers le bas@tie{}; d'autres encore, comme les +hampes et les crochets, peuvent se décaler vers la gauche ou vers la +droite selon qu'ils pointent vers le haut ou vers le bas. Ce +comportement est géré automatiquement dès lors que @code{direction} est +activé. + +@cindex down +@cindex up +@cindex center +@cindex neutral + +L'exemple ci-dessous montre dans la première mesure le comportement par +défaut des hampes -- celles des notes les plus hautes pointant vers le +bas et celles des notes les plus basses pointant vers le haut@tie{}; +viennent ensuite quatre notes avec les hampes forcées vers le bas, puis +quatre autres avec les hampes forcées vers le haut, et pour finir quatre +notes de nouveau avec le comportement par défaut. + +@cindex Stem, exemple de dérogation +@cindex direction, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4 g c a | +\override Stem #'direction = #DOWN +a4 g c a | +\override Stem #'direction = #UP +a4 g c a | +\revert Stem #'direction +a4 g c a | +@end lilypond + +Nous utilisons ici les directions @code{DOWN} et @code{UP}. Elles +correspondent respectivement aux valeurs @code{-1} et @code{+1}, +que l'on peut utiliser à la place. La valeur @code{0} peut aussi être +utilisée dans certains cas. Elle est interprétée comme un @code{UP} +pour les hampes, et comme un @qq{centré} pour d'autres objets. Il +existe une direction, @code{CENTER}, qui correspond à la valeur +@code{0}. + +Quoi qu'il en soit, ces retouches manuelles sont rarement utilisées car +il existe des équivalents sous forme de commandes prédéfinies. Voici un +tableau des plus courantes. Lorsque ce n'est pas évident, leur +signification est précisée. + +@multitable @columnfractions .2 .2 .25 .35 +@headitem Bas/Gauche + @tab Haut/Droite + @tab Annulation + @tab Effet +@item @code{\arpeggioArrowDown} + @tab @code{\arpeggioArrowUp} + @tab @code{\arpeggioNormal} + @tab Flèche en bas, en haut, ou pas de flèche +@item @code{\dotsDown} + @tab @code{\dotsUp} + @tab @code{\dotsNeutral} + @tab Déplacement des points pour éviter les lignes de portée +@item @code{\dynamicDown} + @tab @code{\dynamicUp} + @tab @code{\dynamicNeutral} + @tab +@item @code{\phrasingSlurDown} + @tab @code{\phrasingSlurUp} + @tab @code{\phrasingSlurNeutral} + @tab Attention@tie{}: à distinguer des commandes de liaison ci-dessous +@item @code{\slurDown} + @tab @code{\slurUp} + @tab @code{\slurNeutral} + @tab +@item @code{\stemDown} + @tab @code{\stemUp} + @tab @code{\stemNeutral} + @tab +@item @code{\textSpannerDown} + @tab @code{\textSpannerUp} + @tab @code{\textSpannerNeutral} + @tab Le texte saisi en tant qu'extension est au-dessous/au-dessus de la portée +@item @code{\tieDown} + @tab @code{\tieUp} + @tab @code{\tieNeutral} + @tab +@item @code{\tupletDown} + @tab @code{\tupletUp} + @tab @code{\tupletNeutral} + @tab Les nolets sont au-dessous/au-dessus des notes +@end multitable + +Attention : ces commandes prédéfinies @strong{ne doivent pas} être +précédées de @code{\once}. Pour limiter l'effet à une seule note, il +faut soit utiliser la commande équivalente @code{\once \override}, soit +utiliser la commande prédéfinie, suivie, après la note à modifier, de la +commande @code{\xxxNeutral} correspondante. + +@subheading Doigtés + +@cindex doigtés, positionnement +@cindex doigtés, accords + +Le placement des doigtés sur des notes simples peut aussi être contrôlé +par la propriété @code{direction}, mais le changement de +@code{direction} n'a pas d'effet sur les accords. Comme nous le +verrons, il existe des commandes qui permettent de contrôler le doigté +sur chaque note d'un accord, en plaçant l'indication de doigté +au-dessus, en dessous, à gauche ou à droite de chaque note. + +Tout d'abord, voici l'effet de @code{direction} sur le doigté lié à une +note simple. La première mesure montre le comportement par défaut, et +les deux suivantes montrent l'effet lorsqu'on indique @code{DOWN} et +@code{UP}@tie{}: + +@cindex doigtés, exemple de dérogation +@cindex direction, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #DOWN +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #UP +c4-5 a-3 f-1 c'-5 | +@end lilypond + +Le fait d'intervenir sur la propriété @code{direction} n'est sûrement +pas la façon la plus simple de placer manuellement les doigtés au-dessus +ou en dessous des notes@tie{}; mieux vaut utiliser @code{_} ou @code{^} +devant le chiffre de doigté plutôt que @code{-}. Voici ce que donne +l'exemple précédent avec cette méthode@tie{}: + +@cindex doigtés, exemple + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +c4_5 a_3 f_1 c'_5 | +c4^5 a^3 f^1 c'^5 | +@end lilypond + +La propriété @code{direction} ne fonctionne pas pour les accords alors +que les préfixes de direction, @code{_} et @code{^}, fonctionnent. Par +défaut, le doigté est placé automatiquement à la fois au-dessus et +au-dessous des notes d'un accord, comme ceci@tie{}: + +@cindex doigtés, exemple + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +@noindent +mais il est possible de forcer manuellement vers le haut ou vers le bas +le placement de tous ou certains chiffres de doigté, comme ceci@tie{}: + +@cindex doigtés, exemple + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +On peut aller encore plus loin dans le positionnement des doigtés pour +chacune des notes d'un accord grâce à la commande +@code{\set@tie{}fingeringOrientations}. La syntaxe de cette commande +est@tie{}: + +@example +@code{\set fingeringOrientations = #'([up] [left/right] [down])} +@end example + +@noindent +On utilise @code{\set} car @code{fingeringOrientations} est une +propriété du contexte @code{Voice}, créée et utilisée par le graveur +@code{New_fingering_engraver}. + +On peut attribuer à cette propriété une liste composée de une à trois +valeurs. Celles-ci déterminent si l'indication de doigté doit être +placée au-dessus (lorsque @code{up} apparaît dans la liste), au-dessous +(lorsque @code{down} apparaît), à gauche (lorsque @code{left} apparaît) +ou à droite (lorsque @code{right} apparaît). En revanche, si une valeur +n'est pas dans la liste, aucun doigté n'ira à cet emplacement. LilyPond +garde ces contraintes en mémoire et recherche le meilleur emplacement +pour le doigté des notes des accords suivants. Vous remarquerez que +@code{left} et @code{right} s'excluent l'un l'autre -- l'indication de +doigté ne peut être placée que d'un côté ou de l'autre, pas des deux. + +@warning{Pour contrôler à l'aide de cette commande le placement du +doigté sur une note simple, il faut la saisir comme un accord composé +d'une note unique, en l'encadrant de chevrons.} + +Voici quelques exemples : + +@cindex doigtés, exemple +@cindex @code{\set}, exemple d'utilisation +@cindex fingeringOrientations, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + +@noindent +Si les indications de doigtés paraissent un peu serrées, on peut +toujours réduire la taille de police (@code{font-size}). La valeur +par défaut donnée dans la RPI à la page de l'objet +@code{Fingering} étant @code{-5}, essayons @code{-7}@tie{}: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\override Fingering #'font-size = #-7 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + + +@node Objets hors de la portée +@subsection Objets hors de la portée +@translationof Outside staff objects + +Les objets extérieurs à la portée sont placés automatiquement de façon à +éviter les collisions. Les objets avec la plus petite valeur de la +propriété @code{outside-staff-priority} sont placés au plus près de la +portée, tandis que les autres sont écartés autant qu'il faut pour éviter +les collisions. La @code{outside-staff-priority} est définie dans la +@code{grob-interface}@tie{}; elle est donc une propriété commune à tous +les objets de rendu. Par défaut, elle est réglée sur @code{#f} pour +tous les objets de la portée, et porte une valeur numérique appropriée à +chacun des objets extérieurs à la portée, à mesure qu'ils sont créés. +Le tableau suivant montre la valeur numérique par défaut pour +quelques-uns des objets extérieurs à la portée les plus courants qui +sont placés, par défaut, dans les contextes @code{Staff} ou +@code{Voice}. + +@cindex spanners +@cindex bandeaux + +Vous noterez au passage certaines particularités quant au nom des +objets. En effet, des objets à extension sont automatiquement créés +dans le but de pouvoir contrôler le positionnement vertical des +extrémités d'un @emph{grob} qui commencerait et se terminerait à des +instants musicaux différents. C'est la raison pour laquelle modifier le +@code{outside-staff-priority} du @emph{grob} sous-jacent n'aura aucun +effet. C'est par exemple le cas lorsque vous modifiez l'alignement d'un +objet @code{Hairpin} à l'aide de @code{outside-staff-priority}@tie{}; +puique le soufflet est associé à un objet @code{DynamicLineSpanner}, +c'est sur celui-ci que doit porter l'effet de +@code{outside-staff-priority}. L'instruction dérogatoire se place au +début du bandeau qui constitue une ligne de base susceptible de contenir +plusieurs soufflets ou indications de nuance. + +@multitable @columnfractions .3 .3 .3 +@headitem Objet de rendu + @tab Priorité + @tab Contrôle la position de : +@item @code{MultiMeasureRestText} + @tab @code{450} + @tab Texte sur les silences qui couvrent des mesures entières +@item @code{TextScript} + @tab @code{450} + @tab Texte des @emph{markup} (ou étiquettes) +@item @code{OttavaBracket} + @tab @code{400} + @tab Indication d'octaviation +@item @code{TextSpanner} + @tab @code{350} + @tab Bandeau ou extension de texte +@item @code{DynamicLineSpanner} + @tab @code{250} + @tab Toutes les marques de nuances +@item @code{VoltaBracketSpanner} + @tab @code{100} + @tab Bandeau de répétition +@item @code{TrillSpanner} + @tab @code{50} + @tab Bandeau de trille +@end multitable + +Voici un exemple qui montre le placement par défaut de certains +d'entre eux. + +@cindex extension de texte +@cindex indication d'octaviation + +@funindex \startTextSpan +@funindex startTextSpan +@funindex \stopTextSpan +@funindex stopTextSpan + +@cindex TextSpanner, exemple de dérogation +@cindex bound-details, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text and hairpin +c4\pp\< +c4 +% Add Text Script +c4^Text | +c4 c +% Add Dynamic Text and terminate hairpin +c4\ff c \stopTextSpan | +% Stop Ottava Bracket +\ottava #0 +c,4 c c c | +@end lilypond + +Cet exemple montre comment créer des extensions de texte (@emph{Text +Spanners} en anglais) -- texte avec des longues lignes au-dessus d'un +passage musical. L'extension s'étend depuis la commande +@code{\startTextSpan} jusqu'à la commande @code{\stopTextSpan} et le +format de texte est défini par la commande @code{\override TextSpanner}. +Pour de plus amples détails, voir +@ruser{Indication textuelle avec ligne d’extension}. + +Il montre aussi comment créer des marques d'octaviation. + +@cindex modification du positionnement des numéros de mesure +@cindex numéros de mesure, modification du positionnement +@cindex modification du positionnement des indications métronomiques +@cindex indications métronomiques, modification du positionnement +@cindex modification du positionnement des marques de repère +@cindex marques de repère, modification du positionnement + +Vous aurez remarqué que les numéros de mesure, l'indication métronomique +et les marques de répétition n'apparaissent pas. Par défaut, ils sont +créés dans le contexte @code{Score} et leur +@code{outside-staff-priority} est ignorée face aux objets qui sont créés +dans le contexte @code{Staff}. Si vous voulez faire apparaître les +numéros de mesure, l'indication métronomique ou les marques de +répétition conformément à la valeur de leur +@code{outside-staff-priority}, il vous faudra retirer respectivement le +@code{Bar_number_engraver}, le @code{Metronome_mark_engraver} ou le +@code{Mark_engraver} du contexte @code{Score} et les placer en tête du +contexte @code{Staff}. Après quoi ces marques porteront les valeurs de +@code{outside-staff-priority} par défaut suivantes@tie{}: + +@multitable @columnfractions .3 .3 +@headitem Objet de rendu @tab Priorité +@item @code{RehearsalMark} @tab @code{1500} +@item @code{MetronomeMark} @tab @code{1000} +@item @code{BarNumber} @tab @code{ 100} +@end multitable + +Si les valeurs de @code{outside-staff-priority} par défaut ne donnent +pas les résultats escomptés, il suffit de modifier la priorité +de l'un de ces objets. Supposons que vous vouliez placer l'indication +d'octaviation sous le bandeau de texte, dans l'exemple précédent. Tout +ce que nous devons faire, c'est regarder la priorité de +@code{OttavaBracket} dans la RPI ou dans le tableau plus haut, et la +ramener à une valeur plus basse que celle de @code{TextSpanner}, en +gardant à l'esprit que @code{OttavaBracket} est créé dans le contexte +@code{Staff}@tie{}: + +@cindex TextSpanner, exemple de dérogation +@cindex bound-details, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Place following Ottava Bracket below Text Spanners +\once \override Staff.OttavaBracket #'outside-staff-priority = #340 +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text +c4\pp +% Add Dynamic Line Spanner +c4\< +% Add Text Script +c4^Text | +c4 c +% Add Dynamic Text +c4\ff c \stopTextSpan | +% Stop Ottava Bracket +\ottava #0 +c,4 c c c | +@end lilypond + +@cindex liaisons et outside-staff-priority +@cindex liaisons et articulations +@cindex articulations et liaisons + +Les liaisons sont intrinsèquement des objets membres de la portée +(@emph{within-staff objects}) bien qu'elles la surplombent lorsque les +notes auxquelles elles se rattachent sont relativement hautes. Ceci +peut avoir pour conséquence de remonter d'autant les objets externes +(@emph{outside-staff objects}) tels les articulations. La propriété +@code{avoid-slur} de l'articulation en question peut se voir déterminée +à @code{'inside} dans le but de @qq{ramener} cette articulation à +l'intérieur de la liaison. Cette propriété @code{avoid-slur} ne sera +toutefois effective que dans la mesure où la +@code{outside-staff-priority} est désactivée (valeur @code{#f}). Dans +le même esprit, il est possible d'affecter une valeur numérique +particulière à la propriété @code{outside-staff-priority} d'une +liaison dans le but de regrouper la liaison avec les objets externes. +L'exemple suivant illustre ces deux différentes méthodes. + +@lilypond[quote,verbatim,relative=2] +c4( c^\markup { \tiny \sharp } d4.) c8 | +c4( +\once \override TextScript #'avoid-slur = #'inside +\once \override TextScript #'outside-staff-priority = ##f +c4^\markup { \tiny \sharp } d4.) c8 | +\once \override Slur #'outside-staff-priority = #500 +c4( c^\markup { \tiny \sharp } d4.) c8 | +@end lilypond + +Le fait de changer la @code{outside-staff-priority} peut aussi servir à +contrôler le positionnement vertical des objets individuels, quoique le +résultat ne soit pas toujours formidable. Imaginons que nous voulions +placer @qq{Text3} au-dessus de @qq{Text4} dans l'exemple de la section +@ref{Comportement automatique}, plus haut. Il nous suffit pour cela de +regarder dans la RPI ou dans le tableau plus haut la priorité de +@code{TextScript}, et d'augmenter la priorité de @qq{Text3} jusqu'à une +valeur très haute@tie{}: + +@cindex TextScript, exemple de dérogation +@cindex outside-staff-priority, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +\once \override TextScript #'outside-staff-priority = #500 +c2^"Text3" +c2^"Text4" | +@end lilypond + +S'il est vrai que cela place @qq{Text3} au-dessus de @qq{Text4}, ça le +place aussi plus haut que @qq{Text2} tandis que @qq{Text4} dégringole. +Ce n'est peut-être pas si bien que ça. En fait, ce que nous aimerions +faire, c'est placer toutes les annotations à égale distance de la +portée. Pour cela, nous avons besoin d'espacer horizontalement les +notes pour laisser plus de place au texte. C'est possible grâce à la +commande @code{textLengthOn}. + +@subheading \textLengthOn + +@cindex notes, répartition selon le texte + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +Par défaut, l'espacement horizontal d'un texte produit sous forme de +@emph{markup} (ou d'étiquette) n'est pas pris en compte, dans la mesure +où ce qui est concerné n'entre pas dans la musique. La commande +@code{\textLengthOn} inverse ce comportement, faisant en sorte que les +notes soient espacées autant qu'il le faut pour s'adapter au +texte@tie{}: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\textLengthOn % Cause notes to space out to accommodate text +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +La commande qui permet de revenir au comportement par défaut est +@code{\textLengthOff}. Rappelez-vous que @code{\once} ne +fonctionne qu'avec @code{\override}, @code{\set}, @code{\revert} ou +@code{\unset}, et donc ne peut pas être utilisé avec +@code{\textLengthOn}. + +@cindex étiquette de texte et collision + +Les textes des @emph{markup} éviteront également les notes qui +s'échappent au-dessus de la portée. Si ce n'est pas notre souhait, il +est possible de supprimer ce déplacement automatique vers le haut en +attribuant à la priorité la valeur @code{#f}. Voici un exemple qui +montre comment les textes des @emph{markup} interagissent avec ces types +de note. + +@cindex TextScript, exemple de dérogation +@cindex outside-staff-priority, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +% This markup is short enough to fit without collision +c2^"Tex" c'' | +R1 | + +% This is too long to fit, so it is displaced upwards +c,,2^"Text" c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +c,,2^"Long Text " c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\textLengthOn % and turn on textLengthOn +c,,2^"Long Text " % Spaces at end are honored +c''2 | +@end lilypond + + +@subheading Nuances + +@cindex modifier le positionnement des nuances +@cindex nuances, modifier le positionnement + +Les indications de nuance se placent normalement sous la portée mais on +peut les placer au-dessus avec la commande @code{dynamicUp}. Elles se +positionnent verticalement par rapport à la note à laquelle elles sont +liées et se décalent vers le bas (ou le haut) en fonction des objets de +la portée comme les liaisons de phrasé ou les numéros de mesure. Cela +peut donner d'assez bons résultats, comme le montre cet exemple@tie{}: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\clef "bass" +\key aes \major +\time 9/8 +\dynamicUp +bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | +ees,2.~\)\mf ees4 r8 | +@end lilypond + +De toute façon, si les notes et les nuances qui leur sont liées sont +trop proches, le positionnement automatique évitera les collisions en +déplaçant davantage les nuances suivantes, mais le résultat peut ne +pas être très satisfaisant, comme le montre cet exemple +artificiel@tie{}: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Si une telle situation devait survenir dans de la musique @qq{réelle}, +il serait préférable d'espacer un peu plus les notes, de façon que les +indications de nuance puissent toutes se situer à la même distance de la +portée. Il était possible de faire cela pour les textes de +@emph{markup} grâce à la commande @code{\textLengthOn} mais il n'existe +pas d'équivalent pour les indications de nuance. Il nous faut donc +chercher à faire cela avec la commande @code{\override}. + +@subheading Dimensionnement des objets graphiques + +@cindex grob, dimensionnement +@cindex dimensionnement des grobs + +Tout d'abord, nous devons apprendre ce qui détermine la dimension des +@emph{grobs}. Tous les @emph{grobs} portent en eux un point de référence +qui est utilisé pour les positionner par rapport à leur objet parent. Ce +point du @emph{grob} est placé à une distance horizontale, +@code{X-offset}, et à une distance verticale, @code{Y-offset}, de son +parent. L'étendue horizontale de l'objet est fixée par une paire de +nombres, @code{X-extent}, qui donnent la position du coin +gauche et du coin droit par rapport au point de référence. De +même, l'amplitude verticale est fixée par une paire de nombres, +@code{Y-extent}. Ce sont des propriétés communes à tous les +@emph{grobs} et que gère la @code{grob-interface}. + +@cindex @code{extra-spacing-width} + +Par défaut, la largeur des objets extérieurs à la portée est donnée +comme étant nulle, si bien qu'ils peuvent se chevaucher +horizontalement. Pour remédier à cela, on a ajouté l'infini à +l'extension gauche et moins l'infini à l'extension droite, en +attribuant à @code{extra-spacing-width} la valeur +@code{'(+inf.0@tie{}.@tie{}-inf.0)}. Pour être sûr que les objets ne se +chevaucheront pas horizontalement, nous devons donc corriger cette +valeur de @code{extra-spacing-width} en @w{@code{'(0 . 0)}}, afin que +leur vraie largeur se manifeste. La commande pour y parvenir avec des +indications de nuances est@tie{}: + +@example +\override DynamicText #'extra-spacing-width = #'(0 . 0) +@end example + +@noindent +Voyons si ça marche sur notre exemple précédent@tie{}: + +@cindex DynamicText, exemple de dérogation +@cindex extra-spacing-width, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +\override DynamicText #'extra-spacing-width = #'(0 . 0) +a4\f b\mf c\mp b\p | +@end lilypond + +@noindent +Bon, cela a mis un terme aux déplacements verticaux des +nuances mais il reste deux problèmes. Il faudrait que les +nuances soient un peu plus écartées et ce serait mieux si +elles étaient toutes à la même distance de la portée. Le +premier problème est simple à résoudre. Au lieu d'attribuer +à @code{extra-spacing-width} la valeur zéro, nous pourrions +mettre un peu plus. L'unité est la distance entre deux lignes +de portée, donc en écartant le bord gauche d'une demi-unité +et le bord droit d'une demi-unité, on obtient@tie{}: + +@cindex DynamicText, exemple de dérogation +@cindex extra-spacing-width, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 staff space +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +C'est mieux mais nous voulons peut-être aligner les indications de +nuance sur une même ligne plutôt que de les voir monter et +descendre avec les notes. La propriété qui gère cela est +@code{staff-padding}@tie{}; la section suivante lui est consacrée. + + +@node Collisions d'objets +@section Collisions d'objets +@translationof Collisions of objects + +@menu +* Déplacement d'objets:: +* Correction des collisions d'objets:: +* Exemple concret:: +@end menu + +@node Déplacement d'objets +@subsection Déplacement d'objets +@translationof Moving objects + +@cindex déplacement d'objets se chevauchant +@cindex déplacement d'objets en collision +@cindex déplacement de grobs en collision +@cindex objets, évitement des collisions +@cindex grobs, évitement des collisions + +Aussi surprenant que cela puisse paraître, LilyPond n'est pas parfait. +Certains éléments sur la partition peuvent se chevaucher, ce qui est +regrettable mais, le plus souvent, facile à corriger. En général, quand +on déplace des objets, c'est pour des raisons de lisibilité ou +d'esthétique -- ils rendraient mieux avec un peu plus ou un peu moins +d'espace autour d'eux. + +Il y a trois façons de résoudre les problèmes de chevauchement. Il est +préférable de les aborder dans l'ordre suivant@tie{}: + +@enumerate +@item +L'@strong{orientation} d'un objet qui en chevauche un autre peut être +changée grâce aux commandes prédéfinies dont la liste a été donnée +plus haut à propos des objets de portée (voir +@ref{Objets inclus dans la portée}). +Les queues de note, les liaisons de phrasé et de prolongation, les +crochets, les nuances et les nolets peuvent facilement être +repositionnés de cette manière. En contrepartie, vous n'avez le choix +qu'entre deux positions, sans personnalisation possible. + +@item +Les @strong{propriétés d'objet}, auxquelles LilyPond a recours pour +positionner les objets, sont modifiables avec @code{\override}. Il y a +deux avantages à changer ces propriétés@tie{}: (a) d'autres objets +pourront être déplacés automatiquement si nécessaire pour faire de la +place, et (b) la même retouche peut s'appliquer à toutes les occurrences +du même type d'objet. Ces propriétés sont@tie{}: + +@itemize + +@item +@code{direction} + +Ce point a déjà été traité en détails -- voir +@ref{Objets inclus dans la portée}. + +@item +@code{padding}, @code{right-padding}, @code{staff-padding} + +@cindex décalage (padding) +@cindex padding, propriété +@cindex right-padding, propriété +@cindex staff-padding, propriété + +Au moment de positionner un objet, la valeur de sa propriété +@code{padding} détermine l'espace à laisser libre entre celui-ci et le +coin le plus proche de l'objet à côté duquel il est placé. Vous +remarquerez que c'est la valeur @code{padding} de l'objet @strong{à +placer} qui compte@tie{}; la valeur @code{padding} de l'objet déjà placé +est ignorée. Les espaces libres déterminés par @code{padding} +s'appliquent à tous les objets associés à la +@code{side-position-interface}. + +Le positionnement de groupes d'altérations est contrôlé par +@code{right-padding}, et non plus @code{padding}. Cette propriété +appartient à l'objet @code{AccidentalPlacement} qui, vous le +remarquerez, prend place dans le contexte @strong{Staff}. Dans le +processus de composition, les têtes de notes sont disposées en premier, +puis les altérations, s'il y en a, sont ajoutées à gauche des têtes de +note suivant la propriété @code{right-padding} qui détermine +l'espacement par rapport aux têtes de note. C'est pourquoi seule la +propriété @code{right-padding} de l'objet @code{AccidentalPlacement} +joue sur le positionnement des altérations. + +La propriété @code{staff-padding} est très proche de la propriété +@code{padding}@tie{}: @code{padding} contrôle l'espace minimum entre un +objet qui accepte la @code{side-position-interface} et l'objet le plus +proche (généralement une note ou une ligne de portée)@tie{}; +@code{staff-padding} ne s'applique qu'aux objets qui sont toujours +placés en-dehors de la portée -- il contrôle l'espace minimum à insérer +entre l'objet et la portée. Attention@tie{}: par défaut, +@code{staff-padding} concerne les objets positionnés par rapport +à la portée et n'a aucun effet sur les objets qui sont positionnés par +rapport à une note@tie{}; il est toutefois possible de le régler pour +fonctionner avec ces derniers. + +Pour trouver quelle propriété @code{padding} employer pour l'objet que +vous cherchez à repositionner, il vous faut consulter les propriétés de +l'objet dans la RPI. Prenez garde que les propriétés @code{padding} ne +sont pas forcément traitées dans l'objet en question@tie{}; il faut +alors regarder les objets qui semblent s'en rapprocher. + +Toutes les valeurs @code{padding} sont exprimées en espaces de portée. +Pour la plupart des objets, la valeur par défaut est aux alentours de +1,0 et parfois moins (cela dépend de chaque objet). Il est possible de +la modifier lorsqu'on a besoin d'un espace vide plus grand (ou plus +petit). + + +@item +@code{self-alignment-X} + +@cindex self-alignment-X, propriété + +Cette propriété sert à aligner les objets sur la gauche, sur la droite +ou à les centrer par rapport au point de référence des objets parents. +Elle peut être utilisée avec tous les objets qui acceptent la +@code{self-alignment-interface}. Il s'agit, en général, des objets qui +contiennent du texte. Les valeurs admises sont @code{LEFT}, +@code{RIGHT} et @code{CENTER}. On peut aussi attribuer à +la place une valeur numérique entre @code{-1} et @code{+1}, +où @code{-1} signifie alignement sur la gauche, @code{+1} +alignement sur la droite, et les nombres intermédiaires déplacent +progressivement le texte de la gauche vers la droite. Des valeurs +numériques supérieures à @code{1} sont également admises +pour déplacer le texte encore plus loin vers la gauche, ou des +valeurs inférieures à @code{-1} pour déplacer le texte encore +plus loin vers la droite. Un écart de @code{1} en valeur +correspond à un déplacement de la moitié de la longueur du +texte. + +@item +@code{extra-spacing-width} + +@cindex extra-spacing-width, propriété + +Cette propriété est utilisée pour tous les objets qui acceptent la +@code{item-interface}. Elle reçoit deux nombres, le premier étant +ajouté au bord gauche et le second au bord droit. Des nombres +négatifs déplacent le coin vers la gauche, des nombres positifs +vers la droite, si bien que pour élargir un objet, le premier nombre +doit être négatif et le second positif. Attention@tie{}: tous les +objets n'acceptent pas forcément les deux nombres. Par exemple, l'objet +@code{Accidental} ne retient que le premier nombre (coin gauche). + + +@item +@code{staff-position} + +@cindex staff-position, propriété + +@code{staff-position} est une propriété de la +@code{staff-symbol-referencer-interface}, qui s'applique aux objets +positionnés par rapport à la portée. Elle indique, en demi-espaces de +portée, la position verticale des objets par rapport à la ligne médiane +de la portée. C'est bien pratique pour résoudre des problèmes de +collision entre des objets comme les silences valant mesure entière, +les liaisons et les notes de différentes voix. + +@item +@code{force-hshift} + +@cindex force-hshift, propriété + +Des notes très proches dans un accord, ou des notes simultanées dans +différentes voix, peuvent être disposées sur deux colonnes, rarement +plus, pour éviter que les têtes de notes ne se chevauchent. On parle +alors de colonnes (ou empilement) de notes et un objet appelé +@code{NoteColumn} est créé pour placer les notes sur la colonne. + +La propriété @code{force-hshift} appartient à @code{NoteColumn} (en +réalité à la @code{note-column-interface}). Le fait de la modifier +permet de déplacer un empilement selon l'unité appropriée aux colonnes +de notes, à savoir la largeur des têtes de note de la première voix. +Son utilisation est réservée à des situations complexes dans lesquelles +les commandes habituelles @code{\shiftOn} +(voir @ref{Instanciation explicite des voix}) ne suffisent plus à +résoudre les conflits. Elle est alors préférable à l'utilisation de la +propriété @code{extra-offset}, dans la mesure où on n'a pas besoin +d'exprimer la distance en espaces de portée et où le fait de déplacer +les notes à l'intérieur ou à l'extérieur d'une @code{NoteColumn} affecte +d'autres actions comme les fusions de notes. + +@end itemize + +@item +Pour terminer, quand toutes les autres méthodes ont échoué, il est +possible de repositionner verticalement les objets à la main par rapport +à la ligne médiane de la portée, ou en les déplaçant à une distance +donnée vers une nouvelle position. Les inconvénients sont qu'il faut +individuellement, pour chaque objet, trouver les valeurs correctes de +repositionnement souvent par tâtonnement, et que, puisque le +mouvement est opéré après que LilyPond a placé tous les autres +objets, c'est à l'utilisateur de résoudre tous les problèmes de +collision qui pourraient survenir. Et le pire avec cette méthode est +que, le jour où la musique est modifiée, il faut de nouveau rechercher +les valeurs de repositionnement. Les propriétés à utiliser pour ce type +de repositionnement manuel sont@tie{}: + + +@table @code +@item extra-offset + +@cindex extra-offset, propriété + +Cette propriété s'applique à tout objet acceptant la +@code{grob-interface}. Elle reçoit une paire de nombre qui indiquent le +déplacement supplémentaire dans le sens horizontal et vertical. Des +nombres négatifs déplacent l'objet vers la gauche ou vers la droite. +L'unité utilisée est l'espace de portée. Le déplacement supplémentaire +intervient une fois que la composition des objets est achevée, si bien +qu'un objet peut être repositionné à n'importe quel endroit sans +perturber quoi que ce soit. + +@item positions + +@cindex positions, propriété + +Cette propriété est très utile pour ajuster manuellement l'inclinaison +et la hauteur des barres de ligature, des liaisons et des nolets. Elle +est suivie de deux nombres qui donnent la position des bords gauche et +droit des barres, liaisons, etc. par rapport à la ligne médiane de la +portée. L'unité de référence est l'intervalle de lignes de portée. +Attention toutefois au fait que les liaisons et phrasés ne peuvent pas +être repositionnés n'importe où. LilyPond commence par dresser la liste +des emplacements possibles pour les liaisons et choisit par défaut la +liaison qui @qq{semble la meilleure}. Si la propriété @code{positions} +a été retouchée, la liaison la plus proche de la position demandée sera +retenue dans la liste. +@end table + +@end enumerate + +Il est possible qu'un objet ne dispose pas de toutes ces propriétés. Il +est donc nécessaire de consulter la RPI pour vérifier quelles sont les +propriétés disponibles pour l'objet en question. + +Voici une liste d'objets les plus couramment impliqués dans les +collisions, avec le nom de l'objet à consulter dans la RPI afin de +trouver les propriétés à retoucher pour obtenir un déplacement. + + +@multitable @columnfractions .5 .5 +@headitem Type d'objet @tab Nom d'objet +@item Articulations @tab @code{Script} +@item Barres de ligature @tab @code{Beam} +@item Doigté @tab @code{Fingering} +@item Liaisons de phrasé @tab @code{Slur} +@item Liaisons de prolongation @tab @code{Tie} +@item Nolets @tab @code{TupletBracket} +@item Nuances (verticalement) @tab @code{DynamicLineSpanner} +@item Nuances (horizontalement) @tab @code{DynamicText} +@item Reprises / marques de texte @tab @code{RehearsalMark} +@item Texte, p.ex. @code{^"texte"} @tab @code{TextScript} +@end multitable + + +@node Correction des collisions d'objets +@subsection Correction des collisions d'objets +@translationof Fixing overlapping notation + +Voyons maintenant comment les propriétés décrites dans la section +précédente peuvent nous aider à résoudre les collisions. + +@subheading la propriété padding + +@cindex décalage (padding) +@cindex résolution des chevauchements de notation +@cindex chevauchement de notation + +En jouant sur la propriété @code{padding} (littéralement +@qq{rembourrage}), on augmente (ou on diminue) la distance entre +des symboles qui sont imprimés au-dessus ou en dessous des notes. + +@cindex Script, exemple de dérogation +@cindex padding, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,relative=1,verbatim] +c2\fermata +\override Script #'padding = #3 +b2\fermata +@end lilypond + +@cindex MetronomeMark, exemple de dérogation +@cindex padding, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,relative=1,verbatim] +% This will not work, see below: +\override MetronomeMark #'padding = #3 +\tempo 4=120 +c1 | +% This works: +\override Score.MetronomeMark #'padding = #3 +\tempo 4=80 +d1 | +@end lilypond + +Vous remarquerez dans le second exemple à quel point il est important de +préciser le nom du contexte qui contient l'objet. Puisque l'objet +@code{MetronomeMark} appartient au contexte @code{Score}, le fait de +modifier la propriété dans le contexte @code{Voice} passera inaperçu. +Pour plus de détails, voir @ruser{Modification de propriétés}. + +Si on augmente la propriété @code{padding} d'un objet alors que celui-ci +fait partie d'un ensemble d'objets positionnés en fonction de leur +@code{outside-staff-priority}, cet objet sera déplacé, ainsi que tous +les autres objets du groupe. + +@subheading right-padding + +@cindex right-padding, propriété + +La propriété @code{right-padding} joue sur l'espacement entre une +altération et la note sur laquelle elle porte. On ne l'utilise pas +souvent, mais l'espacement par défaut peut se révéler inadéquat avec +certaines altérations ou certains glyphes utilisés en musique +microtonale. Le stencil de l'altération devra alors être construit sous +la forme d'un @code{markup} qui contiendra le ou les symboles requis, +comme ceci@tie{}: + +@cindex Accidental, exemple de dérogation +@cindex text, exemple d'utilisation de la propriété +@cindex stencil, exemple d'utilisation de la propriété +@cindex AccidentalPlacement, exemple de dérogation +@cindex right-padding, exemple d'utilisation de la propriété + +@lilypond[quote,ragged-right,verbatim] +sesquisharp = \markup { \sesquisharp } +\relative c'' { + c4 + % This prints a sesquisharp but the spacing is too small + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 c + % This improves the spacing + \once \override Score.AccidentalPlacement #'right-padding = #0.6 + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 | +} +@end lilypond + +@noindent +Cette méthode utilise, pour le stencil des altérations, une retouche +qui ne sera pas reprise par la suite. Le type de stencil est +obligatoirement une procédure, qui consiste ici à imprimer le contenu de +la propriété @code{text} de @code{Accidental}, déclaré comme étant un +signe sesqui-dièse. Celui-ci est ensuite repoussé devant la tête de +note par la retouche de @code{right-padding}. + +@noindent + +@subheading la propriété staff-padding + +@cindex alignement d'objets sur une ligne de base +@cindex objets, alignement sur une ligne de base + +@code{staff-padding} sert à aligner des objets tels que des nuances +sur une ligne fictive à une hauteur donnée par rapport à la portée +plutôt qu'à une hauteur qui varie en fonction de la position de la note +sur laquelle porte l'objet. Ce n'est pas une propriété de +@code{DynamicText} mais de @code{DynamicLineSpanner}, car la ligne +fictive est destinée à s'appliquer autant à @strong{toutes} les nuances, +notamment celles qui sont créées comme des bandeaux en longueur (en +anglais @emph{Spanners}). Tel est donc le moyen d'aligner les +indications de nuance, comme dans cet exemple repris de la section +précédente@tie{}: + +@cindex DynamicText, exemple de dérogation +@cindex extra-spacing-width, exemple d'utilisation de la propriété +@cindex DynamicLineSpanner, exemple de dérogation +@cindex staff-padding, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 unit +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +% Align dynamics to a base line 2 units above staff +\override DynamicLineSpanner #'staff-padding = #2 +a4\f b\mf c\mp b\p +@end lilypond + + +@subheading la propriété self-alignment-X + +L'exemple suivant montre comment résoudre une collision entre une +indication de corde et une hampe, en alignant le coin droit sur le point +de référence de la note parente@tie{}: + +@cindex StringNumber, exemple de dérogation +@cindex self-alignment-X, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,ragged-right,verbatim,relative=3] +\voiceOne + +\once \override StringNumber #'self-alignment-X = #RIGHT + +@end lilypond + +@subheading la propriété staff-position + +@cindex collision d'objets à l'intérieur d'une portée + +Dans une voix, un silence valant une mesure entière peut chevaucher les +notes d'une autre voix. Vu que ces silences sont centrés entre les deux +barres de mesure, il serait très compliqué de programmer LilyPond pour +repérer ces risques de collision dans la mesure où, normalement, toutes +les collisions entre notes ou entre notes et silences se produisent sur +des notes et silences simultanés. Voici un exemple de collision de ce +type@tie{}: + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< { c4 c c c } \\ { R1 } >> +@end lilypond + +Ici, la meilleure solution consiste à déplacer le symbole de pause vers +le bas -- puisque cette pause appartient à la voix deux. Par défaut, +dans la @code{\voiceTwo} (c'est-à-dire dans la seconde voix d'une +construction @code{<<@{@dots{}@}@tie{}\\@tie{}@{@dots{}@}>>}), la +propriété @code{staff-position} est réglée sur @code{-4} pour les +@code{MultiMeasureRest}@tie{}; nous avons donc besoin de la déplacer, +disons, de quatre demi-intervalles vers le bas, ce qui donne @code{-8}. + + +@cindex MultiMeasureRest, exemple de dérogation +@cindex staff-position, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< + { c4 c c c } + \\ + \override MultiMeasureRest #'staff-position = #-8 + { R1 } +>> +@end lilypond + +C'est mieux que d'utiliser, par exemple, @code{extra-offset}, +car la ligne supplémentaire au-dessus du silence est insérée +automatiquement. + +@subheading la propriété extra-offset + +@cindex positionnement des objets +@cindex positionnement des grobs +@cindex objets, positionnement +@cindex grobs, positionnement + +La propriété @code{extra-offset} offre la possibilité de contrôler +entièrement le placement d'un objet, aussi bien horizontalement que +verticalement. + +Dans l'exemple suivant, la seconde indication de doigté est déplacée +légèrement vers la gauche et de 1,8 intervalle de lignes vers le +bas@tie{}: + +@cindex Fingering, exemple de dérogation +@cindex extra-offset, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,relative=1,verbatim] +\stemUp +f4-5 +\once \override Fingering #'extra-offset = #'(-0.3 . -1.8) +f4-5 +@end lilypond + + +@subheading la propriété positions + +@cindex contrôle des nolets, liaisons, phrasés et ligatures +@cindex gestion manuelle des nolets, liaisons, phrasés et ligatures +@cindex ligatures de nolet, gestion manuelle +@cindex liaisons, gestion manuelle +@cindex phrasés, gestion manuelle +@cindex ligatures, gestion manuelle + +La propriété @code{positions} permet de contrôler manuellement la +position et l'inclinaison des nolets, coulés, liaisons de phrasé et +barres de ligature. Voici un exemple avec une horrible liaison de +phrasé -- horrible pour avoir tenté de contourner la liaison de +l'acciaccature. + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 \acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +Nous pourrions tout simplement déplacer la liaison de phrasé au-dessus +des notes, et ce serait la meilleure solution@tie{}: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\phrasingSlurUp +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +Mais si, pour une quelconque raison, cette solution n'était pas +envisageable, l'autre solution consiste à déplacer légèrement vers le +bas l'extrémité gauche de la liaison de phrasé, grâce à la propriété +@code{positions}. Cela corrige en même temps la forme plutôt +disgracieuse de la liaison. + +@cindex PhrasingSlur, exemple de dérogation +@cindex positions, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\once \override PhrasingSlur #'positions = #'(-4 . -3) +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +Voici un autre exemple, tiré du début de la partie de main gauche +du Prélude de Chopin, Op. 28, No 2. Comme nous pouvons le +constater, les barres de ligature chevauchent les notes les plus +hautes@tie{}: + +@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 } >> +} +@end lilypond + +@noindent +On peut y remédier en déplaçant manuellement vers le haut les deux +extrémités des ligatures de croches, non plus à 2 intervalles au-dessus +de la ligne médiane mais, disons, à 3@tie{}: + +@cindex Beam, exemple de dérogation +@cindex positions, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \clef "bass" + << + \override Beam #'positions = #'(3 . 3) + { b,8 ais, b, g, } + \\ + { e,8 g e, g } + >> + << { b,8 ais, b, g, } \\ { e,8 g e, g } >> +} +@end lilypond + +@noindent +Vous remarquerez que la retouche continue de s'appliquer au +second bloc de croches de la première voix mais qu'il ne s'applique +à aucune barre de la deuxième voix. + +@subheading la propriété force-hshift + +Maintenant, nous sommes prêts à appliquer les dernières corrections à +l'exemple de Chopin présenté à la fin de @ref{J'entends des Voix}, que +nous avions laissé dans cet état@tie{}: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + 2 des + } + >> | + 1 | +} +@end lilypond + +@noindent +Les deux plus basses notes du premier accord (c'est-à-dire celles de la +troisième voix) ne devraient pas être décalées de l'empilement des deux +plus hautes notes. Pour y remédier, nous réglons le @code{force-hshift} +-- qui est une propriété de @code{NoteColumn} -- de ces notes sur zéro. +Ensuite, la note la plus basse du second accord serait mieux à droite +des notes plus hautes. Pour cela, nous réglons le @code{force-hshift} +de cette note sur 0,5 -- c'est-à-dire la moitié de la largeur d'une tête +de note vers la droite de la colonne des notes plus hautes. + +Et voici le résultat final : + +@cindex NoteColumn, exemple de dérogation +@cindex force-hshift, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +@node Exemple concret +@subsection Exemple concret +@translationof Real music example + +Pour terminer ce chapitre consacré aux retouches, voici, étape par +étape, la mise en forme d'un exemple concret nécessitant un certain +nombre de retouches jusqu'à l'obtention du résultat attendu. Cet +exemple a été choisi en raison des problèmes inhabituels de notation +qu'il soulevait et pour vous apprendre à les résoudre grâce au Manuel de +notation. Il n'est pas représentatif d'une opération normale de +gravure@tie{}; que ces difficultés ne vous découragent donc pas@tie{}! +Des difficultés comme celles-ci ne sont, heureusement, pas +courantes@tie{}! + +Cet exemple est tiré de la Première Ballade de Chopin, Op. 23, mesures +6 à 9@tie{}; cela correspond à la transition entre le Lento d'ouverture +et le Moderato. Voici, pour commencer, ce à quoi nous voulons que la +partition ressemble@tie{}; pour limiter les complications, nous n'avons +pas fait apparaître les indications de nuance, de doigté ni de pédale. + + +@c The following should appear as music without code +@c This example should not be indexed +@c line-width ensures no break +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + bes2.^\markup { \bold "Moderato" } r8 + << + { c,8 d fis bes a } + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Nous constatons tout d'abord que, dans la troisième mesure, la main +droite compte quatre voix. Ce sont les cinq croches avec une barre, +le do avec liaison, le ré blanche qui se fond avec le ré croche, et le +fa dièse noire pointée qui se fond lui aussi avec la croche de même +hauteur. Tout le reste se réduit à une seule voix. Le plus simple est +donc de créer temporairement ces quatre voix au moment opportun. +Si vous avez oublié comment faire, reportez-vous à +@ref{J'entends des Voix}. Commençons par saisir les notes comme +appartenant à deux variables, mettons en place l'ossature des +portées dans un bloc @code{\Score} et voyons ce que LilyPond propose par +défaut@tie{}: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4. g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2. % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2 | + 1 | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Toutes les notes sont correctes mais l'allure générale est loin d'être +satisfaisante. La liaison se heurte à l'indication de mesure lors du +changement de métrique, la ligature des croches n'est pas bonne dans la +troisième mesure, les notes ne sont pas fusionnées et il manque +plusieurs éléments de notation. Commençons par le plus simple. Nous +pouvons corriger la ligature des croches en la créant manuellement et +nous pouvons facilement ajouter les limites droite et gauche de la +liaison de phrasé, puisque tout cela a déjà été traité dans le tutoriel. +Voici le résultat@tie{}: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1) | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +La première mesure est maintenant correcte. La seconde contient un +arpège et doit se terminer par une double barre. Comment faire, puisque +cela n'a pas été traité dans le Manuel d'initiation@tie{}? C'est alors +qu'il faut nous reporter au Manuel de notation. Quand on cherche +@qq{arpège} et @qq{barre de mesure} dans l'index, on voit aisément qu'il +faut ajouter @code{\arpeggio} à un accord pour produire un arpège et +qu'une double barre est le résultat de la commande +@code{\bar@tie{}"||"}. Rien de plus facile@tie{}! Nous devons ensuite +corriger la collision entre la liaison et l'indication de mesure. Le +mieux est de déplacer la liaison vers le haut. La méthode pour déplacer +les objets a déjà été présentée dans @ref{Déplacement d'objets}, et l'on +sait que, pour des objets positionnés par rapport à la portée, il nous +faut modifier leur propriété @code{staff-position}, exprimée en +demi-intervalles de lignes par rapport à la ligne médiane de la portée. +Voici donc la retouche à insérer juste devant la première note +liée@tie{}; elle est censée déplacer la liaison vers le haut de 3,5 +demi-intervalles de lignes au-dessus de la ligne médiane@tie{}: + +@code{\once \override Tie #'staff-position = #3.5} + +Cela s'adjoint à la deuxième mesure, pour donner@tie{}: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Venons-en à la troisième mesure et au début de la section Moderato. +Dans le Tutoriel, il est indiqué comment insérer du texte en gras à +l'aide de la commande @code{\markup}@tie{}; pas de problème, du coup, +pour ajouter @qq{Moderato} en gras. Mais comment faire pour fusionner +les notes de différentes voix@tie{}? C'est là que le Manuel de notation +peut nous venir en aide. Une recherche sur @qq{fusionnement de notes} +dans l'index nous renvoie au chapitre @ruser{Résolution des collisions}, +et plus précisément aux commandes permettant de fusionner des notes en +fonction de leur type et selon qu'elles sont pointées ou non. Dans +notre exemple, pour la durée de la polyphonie de la troisième mesure, +nous avons besoin de fusionner deux types de notes@tie{}; grâce aux +informations trouvées dans le Manuel de notation, nous ajoutons + +@example +\mergeDifferentlyHeadedOn +\mergeDifferentlyDottedOn +@end example + +@noindent +au début de cette section et + +@example +\mergeDifferentlyHeadedOff +\mergeDifferentlyDottedOff +@end example + +@noindent +à la fin, ce qui donne : + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Ces retouches ont permis de fusionner les deux fa dièse mais pas les +deux ré. Pourquoi@tie{}? La réponse se trouve dans la même section du +Manuel de notation@tie{}: les notes à fusionner doivent avoir des hampes +dans des directions opposées et deux notes ne peuvent pas être +fusionnées s'il y a une troisième note dans la même colonne. Ici, les +deux ré ont leur hampe orientée vers le haut et il y a une troisième +note, do. Nous savons changer l'orientation de la hampe avec +@code{\stemDown} et le Manuel de notation nous indique également comment +déplacer le do -- en produisant un décalage grâce à l'une des commandes +@code{\shift}. Mais laquelle@tie{}? Le do appartient à la deuxième +voix et n'est pas décalé@tie{}; les deux ré appartiennent respectivement +à la première et à la troisième voix, et l'un n'est pas décalé tandis +que l'autre l'est. Il nous faut donc décaler largement le do avec la +commande @code{\shiftOnn} pour éviter une interférence avec les deux ré. +Voici ce que donnent ces modifications@tie{}: + +@cindex Tie, exemple de dérogation +@cindex staff-position, exemple d'utilisation de la propriété + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + % Move the c2 out of the main note column so the merge will work + c,8~ \shiftOnn c2 + } + \new Voice { + \voiceThree + % Stem on the d2 must be down to permit merging + s8 \stemDown d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Pas loin@tie{}! Il ne reste plus que deux problèmes@tie{}: les ré une +fois fusionnés ne devraient plus avoir de hampe vers le bas, et le do +serait mieux à la droite des ré. Nous savons remédier à ces deux +problèmes grâce aux retouches précédentes@tie{}: nous allons rendre la +hampe transparente et déplacer le do avec la propriété +@code{force-hshift}. Et voici le résultat final@tie{}: + +@cindex NoteColumn, exemple de dérogation +@cindex force-hshift, exemple d'utilisation de la propriété +@cindex Stem, exemple de dérogation +@cindex transparent, exemple d'utilisation de la propriété + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + + +@node Autres retouches +@section Autres retouches +@translationof Further tweaking + +@menu +* Autres utilisations des retouches:: +* Utilisation de variables dans les retouches:: +* Feuilles de style:: +* Autres sources de documentation:: +* Options ralentissant le traitement:: +* Retouches avancées avec Scheme:: +@end menu + +@node Autres utilisations des retouches +@subsection Autres utilisations des retouches +@translationof Other uses for tweaks + +@cindex transparent, utilisation de la propriété +@cindex création d'objet invisible +@cindex suppression d'objets +@cindex objets, suppression d' +@cindex masquage d'objets +@cindex objets, masquage d' +@cindex invisibles, objets +@cindex objets, invisibles +@cindex liaison de tenue avec changement de voix + +@subheading Liaison entre plusieurs voix + +Voici un exemple qui montre comment créer une liaison de +prolongation entre des notes appartenant à des voix différentes. En +temps normal, seules deux notes appartenant à une même voix +peuvent être ainsi liées. La solution consiste à utiliser deux voix, +dont l'une avec les notes liées + +@lilypond[quote,fragment,relative=2] +<< { b8~ b8\noBeam } \\ { b[ g8] } >> +@end lilypond + +@noindent +et à rendre transparente la première hampe de cette voix@tie{}; +on a alors l'impression que la liaison couvre les deux voix. + +@cindex Stem, exemple de dérogation +@cindex transparent, exemple d'utilisation de la propriété + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +Pour être sûr que la hampe que nous avons rendue transparente +n'empiète pas trop sur le trait de liaison, nous pouvons l'allonger en +réglant la longueur (@code{length}) sur @code{8}, + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8~ b8\noBeam + } +\\ + { b[ g8] } +>> +@end lilypond + +@subheading Rendu MIDI d'un point d'orgue + +@cindex stencil, utilisation de la propriété +@cindex point d'orgue, rendu en MIDI + +En ce qui concerne les objets extérieurs à la portée, quand on veut les +faire disparaître de la partition imprimée, il est généralement +préférable de modifier leur propriété @code{stencil} plutôt que leur +propriété @code{transparent}. Le fait d'attribuer à la propriété +@code{stencil} d'un objet la valeur @code{#f} supprimera entièrement +celui-ci de la partition. Il ne risquera donc pas de gêner le placement +d'autres objets. + +Par exemple, si nous voulons changer le réglage de métronome pour +simuler un point d'orgue dans le fichier MIDI, nous ne voulons surtout +pas que cette indication métronomique apparaisse sur la partition ni +qu'elle influence l'espacement entre les deux systèmes ou la position +des annotations voisines sur la portée. Le fait d'attribuer à la +propriété @code{stencil} la valeur @code{#f} est donc la bonne solution. +Nous montrons ci-dessous le résultat des deux méthodes@tie{}: + +@cindex MetronomeMark, exemple de dérogation +@cindex transparent, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'transparent = ##t + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@cindex MetronomeMark, exemple de dérogation +@cindex stencil, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'stencil = ##f + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@noindent +Les deux méthodes permettent d'enlever l'indication métronomique qui +allonge le point d'orgue de la partition, et toutes deux modifient le +rythme MIDI comme souhaité mais, dans la première, l'indication +métronomique transparente repousse vers le haut l'indication de tempo, +contrairement à la seconde (avec le stencil désactivé) qui la laisse à +sa place. + + +@seealso +Glossaire musicologique : +@rglosnamed{system,système}. + + +@node Utilisation de variables dans les retouches +@subsection Utilisation de variables dans les retouches +@translationof Using variables for tweaks + +@cindex variables, utilisation dans les retouches +@cindex utilisation de variables dans les retouches +@cindex retouches et utilisation de variables + +Les commandes de retouche sont souvent longues et pénibles à +taper, et ne tolèrent pas la moindre erreur. Lorsqu'on a besoin de +faire plusieurs fois les mêmes retouches, il est préférable de +définir des variables qui les contiennent. + +Imaginons que nous voulions accentuer certains mots dans des paroles en +les mettant en italique. Au lieu des commandes @code{\italic} et +@code{\bold}, qui ne fonctionnent dans les paroles que si elles sont +enchâssées dans un @code{\markup} -- ce qui les rend pénibles à saisir +-- pouvons-nous employer les commandes @code{\override} et +@code{\revert}@tie{}? + +@example +@code{\override Lyrics . LyricText #'font-shape = #'italic} +@code{\override Lyrics . LyricText #'font-series = #'bold} + +@code{\revert Lyrics . LyricText #'font-shape} +@code{\revert Lyrics . LyricText #'font-series} +@end example + +Là encore, ce serait extrêmement pénible à saisir, surtout s'il y avait +beaucoup de mots à retoucher de cette façon. Plutôt que cette +solution, nous déclarons ces commandes comme étant deux variables, +et les utilisons comme ci-après -- quoique on choisirait sans doute pour +les variables des noms plus courts pour simplifier la frappe. Par +ailleurs, le fait de recourir à une variable ne nous expose plus à +l'oubli des espaces entourant les points lorsqu'explicités au beau +milieu d'un bloc @code{\lyriqcmode}@tie{}! + +@cindex LyricText, exemple de dérogation +@cindex font-shape, exemple d'utilisation de la propriété +@cindex font-series, exemple d'utilisation de la propriété + +@lilypond[quote,verbatim] +emphasize = { + \override Lyrics.LyricText #'font-shape = #'italic + \override Lyrics.LyricText #'font-series = #'bold +} + +normal = { + \revert Lyrics.LyricText #'font-shape + \revert Lyrics.LyricText #'font-series +} + +global = { \key c \major \time 4/4 \partial 4 } + +SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = \lyrics { + E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, +} + +VerseTwo = \lyricmode { + O | \emphasize Christ, \normal whose voice the | wa -- ters heard, +} + +VerseThree = \lyricmode { + O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood +} + +VerseFour = \lyricmode { + O | \emphasize Tri -- ni -- ty \normal of | love and pow'r +} + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Soprano" { \VerseOne } + \new Lyrics \lyricsto "Soprano" { \VerseTwo } + \new Lyrics \lyricsto "Soprano" { \VerseThree } + \new Lyrics \lyricsto "Soprano" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@node Feuilles de style +@subsection Feuilles de style +@translationof Style sheets + +La sortie que produit LilyPond peut être largement modifiée -- voir +@ref{Retouche de partition} pour plus de détails. Mais que faire si +vous avez beaucoup de fichiers auxquels vous souhaitez appliquer vos +retouches@tie{}? Ou si vous souhaitez simplement séparer les retouches +de la musique elle-même@tie{}? Rien de plus facile. + +Prenons un exemple. Ne vous inquiétez pas si vous ne comprenez pas +les parties avec tous les @code{#()}. Celles-ci sont expliquées dans +@ref{Retouches avancées avec Scheme}. + +@lilypond[quote,verbatim,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Il y a quelques problèmes de chevauchement@tie{}; nous allons arranger +cela en utilisant les techniques de @ref{Déplacement d'objets}. On peut +aussi faire quelque chose pour les définitions de @code{mpdolce} +et @code{inst}. Elles produisent le résultat que nous désirons, +mais nous pourrions aussi vouloir les utiliser dans une autre pièce. +Il suffirait de les copier et coller au début de chaque +fichier, mais c'est fastidieux. De plus, cela laisse les définitions +dans nos fichiers de musique, et je trouve personnellement tous ces +@code{#()} assez laids. Stockons-les dans un autre fichier@tie{}: + +@example +%%% enregistrez ceci dans un fichier nommé "definitions.ily" +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) +@end example + +Nous rappellerons ce fichier par une simple commande @code{\include} au +début de notre fichier de musique. Lui attribuer l'extension +@code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier +voué à être inclus dans un fichier maître@tie{}; il n'est pas destiné à +être compilé isolément.@* +Maintenant, modifions notre musique (enregistrez ce fichier +sous @file{musique.ly}). + +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. + +@example +\include "definitions.ily" + +\relative c'' @{ + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +C'est mieux, mais effectuons encore quelques retouches. Le glissando +est peu visible, c'est pourquoi nous allons l'épaissir et le +rapprocher des têtes de note. Déplaçons l'indication métronomique +au-dessus de la clef, au lieu de la laisser au-dessus de la première +note. Et pour finir, mon professeur de composition déteste les +chiffrages de mesure en @qq{C}, nous allons donc le transformer en +@qq{4/4}. + +Cependant, ne changez pas le fichier @file{musique.ly}. Remplacez le +fichier @file{definitions.ily} par ceci@tie{}: + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + \override TimeSignature #'style = #'numbered + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout{ + \context { + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { + \Staff + \override TimeSignature #'style = #'numbered + } + \context { + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +C'est encore mieux@tie{}! Mais supposons maintenant que je veuille +publier cette pièce. Mon professeur de composition n'aime pas les +chiffrages de mesure en @qq{C}, mais moi je les aime bien. Copions +l'actuel @file{definitions.ily} dans le fichier +@file{publication-web.ily}, et modifions ce dernier. Puisque la musique +est destinée à produire un fichier PDF affiché sur écran, nous allons +aussi augmenter la taille globale de police. + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Il ne nous reste plus qu'à remplacer +@code{\include@tie{}"definitions.ily"} par +@code{\include@tie{}"publication-web.ily"} dans notre fichier de +musique. + +Il est possible, bien sûr, de rendre cela encore plus pratique. Nous +pourrions créer un fichier @file{definitions.ily} qui ne contiendrait +que les définitions de @code{mpdolce} et de @code{inst}, un +fichier @file{publication-web.ily} qui ne contiendrait que la section +@code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui +ne contiendrait que les retouches pour produire le résultat que mon +professeur préfère. Le début du fichier @file{musique.ly} ressemblerait +alors à + +@example +\include "definitions.ily" + +%%% Décommentez seulement une de ces deux lignes ! +\include "publication-web.ily" +%\include "universite.ily" +@end example + +Cette approche peut être utile même si vous ne produisez qu'un seul +jeu de partitions. J'utilise personnellement une demi-douzaine de +fichiers de @qq{feuille de style} pour mes projets. Je commence +chaque fichier de musique par @code{\include@tie{}"../global.ily"} qui +contient@tie{}: + +@example +%%% global.ily +\version @w{"@version{}"} + +#(ly:set-option 'point-and-click #f) + +\include "../init/init-defs.ly" +\include "../init/init-mise-en-page.ly" +\include "../init/init-en-tetes.ly" +\include "../init/init-papier.ly" +@end example + + +@node Autres sources de documentation +@subsection Autres sources de documentation +@translationof Other sources of information + +La référence des propriétés internes contient beaucoup d'informations +sur LilyPond. Cependant vous pouvez en découvrir encore plus en +consultant les fichiers internes de LilyPond. Pour cela, il vous faut +d'abord connaître le répertoire @emph{ad hoc} sur votre système. +L'emplacement du répertoire dépend (a) du fait que, pour vous procurer +LilyPond, vous avez téléchargé un paquet précompilé sur lilypond.org, ou +vous l'avez installé grâce à votre gestionnaire de paquetages +(c'est-à-dire distribué avec Linux ou installé avec fink ou cygwin), ou +encore vous l'avez compilé directement à partir des sources@tie{}; et +(b) du système d'exploitation sur lequel il tourne. + +@strong{Téléchargé depuis lilypond.org} + +@itemize @bullet +@item Linux + +@file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/} + +@item MacOS X + +@file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/} +Pour accéder à ce dossier, deux possibilités@tie{}: soit, dans un +Terminal, taper @code{cd} suivi du chemin complet ci-dessus@tie{}; soit +Control-cliquer (ou clic droit) sur l'application LilyPond +et sélectionner @qq{Afficher le contenu du paquet}. + +@item Windows + +Dans l'Explorateur Windows, voir +@file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/} + +@end itemize + +@strong{Installé par un gestionnaire de paquetages ou compilé d'après +les sources} + +@code{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, où +@var{PREFIX} est déterminé par votre gestionnaire de paquetages ou par +le script @code{configure}, et @var{X.Y.Z} est le numéro de version de +LilyPond. + +@smallspace + +Dans ce répertoire, deux sous-répertoires sont particulièrement +intéressants@tie{}: + +@itemize +@item @code{ly/} -- contient les fichiers en format LilyPond +@item @code{scm/} -- contient les fichiers en format Scheme +@end itemize + +Commençons par examiner quelques fichiers contenus dans @file{ly/}. +Nous ouvrons @file{ly/property-init.ly} dans un éditeur de texte -- +celui que vous avez l'habitude d'utiliser pour les fichiers @file{.ly} +fera très bien l'affaire. Ce fichier contient les définitions de toutes +les commandes standard prédéfinies de LilyPond, comme @code{\stemUp} et +@code{\slurDotted}. Vous pouvez constater que ce n'est rien d'autre +que des définitions de variables composées d'un ou plusieurs groupes +de commandes @code{\override}. Par exemple, @code{\tieDotted} +est défini comme@tie{}: + +@example +tieDotted = @{ + \override Tie #'dash-period = #0.75 + \override Tie #'dash-fraction = #0.1 +@} +@end example + +Si vous n'aimez pas les valeurs par défaut, les commandes prédéfinies +peuvent être facilement redéfinies, comme n'importe quelle autre +variable, en tête de votre fichier d'entrée. + +Voici les fichiers les plus utiles dans le répertoire @file{ly/}@tie{}: + +@multitable @columnfractions .4 .6 +@headitem Nom de fichier + @tab Contenu +@item @file{ly/engraver-init.ly} + @tab Définitions des Contextes de graveurs +@item @file{ly/paper-defaults-init.ly} + @tab Réglages papier par défaut +@item @file{ly/performer-init.ly} + @tab Définitions des Contextes d'interprétation +@item @file{ly/property-init.ly} + @tab Définitions de toutes les commandes prédéfinies courantes +@item @file{ly/spanner-init.ly} + @tab Définitions des commandes prédéfinies pour les bandeaux +@end multitable + +Les autres réglages (comme les définitions de commandes @emph{markup}) +sont conservés comme fichiers @file{.scm} (Scheme). Le langage de +programmation Scheme offre une interface programmable dans le +processus interne de LilyPond. De plus amples explications sur ces +fichiers dépasseraient le cadre de ce manuel dans la mesure où elles +requièrent la connaissance du langage Scheme. Les utilisateurs qui +souhaiteraient comprendre le fonctionnement de ces fichiers de +configuration doivent être avertis que des connaissances techniques +substantielles et beaucoup de temps sont nécessaires (voir le +@rextendnamed{Scheme tutorial,Tutoriel Scheme}). + +Si c'est votre cas, les fichiers Scheme les plus utiles à connaître +sont@tie{}: + +@multitable @columnfractions .4 .6 +@headitem Nom de fichier + @tab Contenu +@item @file{scm/auto-beam.scm} + @tab Régles par défaut des ligatures subalternes +@item @file{scm/define-grobs.scm} + @tab Réglages par défaut des propriétés de @emph{grobs} +@item @file{scm/define-markup-commands.scm} + @tab Spécification de toutes les commandes de @emph{markup} +@item @file{scm/midi.scm} + @tab Réglages par défaut pour les sorties MIDI +@item @file{scm/output-lib.scm} + @tab Réglages affectant l'apparence des frets, couleurs, altérations, + barres de mesure, etc. +@item @file{scm/parser-clef.scm} + @tab Définition des clefs prises en charge +@item @file{scm/script.scm} + @tab Réglages par défaut des articulations +@end multitable + + + +@node Options ralentissant le traitement +@subsection Options ralentissant le traitement +@translationof Avoiding tweaks with slower processing + +LilyPond peut effectuer des vérifications supplémentaires lors du +traitement des fichiers@tie{}; cependant, le rendu nécessitera alors +plus de temps. En contrepartie, il y aura moins d'ajustements manuels à +réaliser. Si une indication textuelle ou des paroles débordent dans la +marge, ces vérifications auront pour effet de resserrer la ligne +suffisamment pour faire tenir le texte entre les marges. + +Pour pouvoir fonctionner en toutes circonstances, ces vérifications +doivent être activées@tie{}; il faut pour cela placer les retouches dans +un @code{\context} à l'intérieur d'un bloc @code{\layout}, plutôt que +directement dans le fragment musical, comme ceci@tie{}: + +@example +\score @{ + @{ @dots{}notes@dots{} @} + \layout @{ + \context @{ + \Score + % Pour s'assurer que les indications textuelles et paroles + % seront à l'intérieur des marges de la page. + \override PaperColumn #'keep-inside-line = ##t + \override NonMusicalPaperColumn #'keep-inside-line = ##t + @} + @} +@} +@end example + + +@node Retouches avancées avec Scheme +@subsection Retouches avancées avec Scheme +@translationof Advanced tweaks with Scheme + +Nous avons vu à quel point le résultat obtenu avec LilyPond peut +être largement personnalisé à l'aide de commandes comme +@code{\override} et @code{\tweak}. Et pourtant l'utilisation de +Scheme ouvre des possibilités encore plus grandes. +Le code écrit dans le langage de programmation Scheme peut être +intégré directement dans le processus interne de LilyPond. Bien sûr, +il faut pour cela connaître un minimum de programmation en langage +Scheme. Pour des explications complètes là-dessus, consultez le +@rextendnamed{Scheme tutorial,Tutoriel Scheme}. + +En guise d'illustration -- et ce n'est qu'une possibilité parmi tant +d'autres -- nous allons attribuer à une propriété non pas une valeur +préétablie mais une procédure Scheme qui sera lancée à chaque +utilisation de la propriété par LilyPond. De cette façon, nous obtenons +un réglage dynamique de la propriété par le simple fait d'invoquer la +procédure. Dans cet exemple, nous colorons les têtes de notes en +fonction de leur position sur la portée. + + +@cindex x11-color, exemple d'utilisaation de la fonction +@cindex NoteHead, exemple de dérogation +@cindex color, détermination de la propriété par une procédure Scheme + +@lilypond[quote,verbatim,ragged-right] +#(define (color-notehead grob) + "Color the notehead according to its position on the staff." + (let ((mod-position (modulo (ly:grob-property grob 'staff-position) + 7))) + (case mod-position + ;; Return rainbow colors + ((1) (x11-color 'red )) ; for C + ((2) (x11-color 'orange )) ; for D + ((3) (x11-color 'yellow )) ; for E + ((4) (x11-color 'green )) ; for F + ((5) (x11-color 'blue )) ; for G + ((6) (x11-color 'purple )) ; for A + ((0) (x11-color 'violet )) ; for B + ))) + +\relative c' { + % Arrange to obtain color from color-notehead procedure + \override NoteHead #'color = #color-notehead + a2 b | c2 d | e2 f | g2 a | +} +@end lilypond + +Vous trouverez dans @rextendnamed{Callback functions,les fonctions +callback} d'autres exemples d'utilisation de ces interfaces +programmables. + diff --git a/Documentation/fr/macros.itexi b/Documentation/fr/macros.itexi new file mode 100644 index 0000000000..cf72b0e0fd --- /dev/null +++ b/Documentation/fr/macros.itexi @@ -0,0 +1,846 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 1edbbc7f5a6ad81f24421470f81786fc614d1c96 + + 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 + + +@include version.itexi +@include common-macros.itexi + +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. +@c FIXME: Use thin spaces for @qq. + +@ifnotinfo + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@guillemetleft{}@tie{}\TEXT\@tie{}@guillemetright{} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro q{TEXT} +`\TEXT\' +@end macro + +@macro qq{TEXT} +« \TEXT\ » +@end macro + +@end ifinfo + + +@ifhtml + +@macro warning{TEXT} +@html +
+@end html +@strong{Note :} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Note :} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + + +@c do not translate the following macro -- it is used in +@c an untranslated manual. + +@ifhtml + +@macro advanced{TEXT} +@html +
+@end html +@strong{Advanced note:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro advanced{TEXT} +@quotation +@b{Advanced note:} \TEXT\ +@end quotation +@end macro + +@end ifnothtml + +@macro docMain +@cartouche +Pour connaître la place qu'occupe ce manuel dans la +documentation, consultez la page @rweb{Manuels}. + +Si vous ne disposez pas de certains manuels, la documentation complète +se trouve sur @w{@uref{http://@/www@/.lilypond@/.org/}}. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@emph{La traduction de la notice de droits d'auteur ci-dessous vise à +faciliter sa compréhension par le lecteur non anglophone, mais seule la +notice en anglais a valeur légale.} + +@quotation +Vous avez le droit de copier, distribuer et/ou modifier ce document +selon les termes de la Licence GNU de documentation libre, version 1.1 +ou tout autre version ultérieure publiée par la Free Software +Foundation, ``sans aucune section invariante''. +Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +Ce document a été placé dans le domaine public ; en France, les auteurs +renoncent à tous leurs droits patrimoniaux. +@end copying +@end ifclear + + +@c ***** Title page ***** +@ifnottex +@node Top +@top LilyPond --- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle Le système de gravure musicale +@titlefont{\TITLE\} +@author L'équipe de développement de LilyPond + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +Pour LilyPond version @version{} +@end titlepage + +@end macro + + +@c ***** Headings in a doc subsection ***** + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Commandes prédéfinies +@end macro + +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Morceaux choisis +@end macro + + +@c obsolete, remove when translation is fully updated +@macro commonprop +@noindent +@subsubheading Propriétés couramment modifiées +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading Voir aussi +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Problèmes connus et avertissements +@end macro + + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Glossaire} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Glossaire} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Manuel d'initiation} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Manuel d'initiation} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Manuel de notation} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Manuel de notation} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Extension de LilyPond} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extension de LilyPond} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Nouveautés} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Nouveautés} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Guide du contributeur} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Guide du contributeur} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,Informations générales} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,Informations générales} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Essai} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Essai} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Utilisation des programmes} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Utilisation des programmes} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Morceaux choisis} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Morceaux choisis} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Référence des propriétés internes} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Référence des propriétés internes} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glossaire} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossaire} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Manuel d'initiation} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning,Manuel d'initiation} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Manuel de notation} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Manuel de notation} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Nouveautés} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Nouveautés} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extension de LilyPond} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Extension de LilyPond} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Guide du contributeur} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Guide du contributeur} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Informations générales} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Informations générales} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Essai} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Essai} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Utilisation des programmes} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Utilisation des programmes} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Morceaux choisis} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Morceaux choisis} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Référence des propriétés internes} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Référence des propriétés internes} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glossaire} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossaire} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Manuel d'initiation} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Manuel d'initiation} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Manuel de notation} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Manuel de notation} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Nouveautés} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Nouveautés} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Extension de LilyPond} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Extension de LilyPond} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Guide du contributeur} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Guide du contributeur} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-web,Informations générales} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-web,Informations générales} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Essai} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Essai} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Utilisation des programmes} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Utilisation des programmes} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Morceaux choisis} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Morceaux choisis} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Référence des propriétés internes} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Référence des propriétés internes} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Glossaire} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossaire} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning.fr,Manuel d'initiation} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning.fr,Manuel d'initiation} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation.fr,Manuel de notation} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation.fr,Manuel de notation} +@end macro + +@macro rchanges{TEXT} +@vindex{\TEXT\} +@ref{\TEXT\,,,changes,Nouveautés} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Nouveautés} +@end macro + +@macro rextend{TEXT} +@vindex{\TEXT\} +@ref{\TEXT\,,,extending,Extension de LilyPond} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Extension de LilyPond} +@end macro + +@macro rcontrib{TEXT} +@vindex{\TEXT\} +@ref{\TEXT\,,,contributor,Guide du contributeur} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Guide du contributeur} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web,Informations générales} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web,Informations générales} +@end macro + +@macro ressay{TEXT} +@vindex{\TEXT\} +@ref{\TEXT\,,,essay,Essai} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Essai} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage.fr,Utilisation des programmes} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage.fr,Utilisation des programmes} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Morceaux choisis} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Morceaux choisis} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Référence des propriétés internes} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Référence des propriétés internes} +@end macro + +@end iftex + + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
+@end html +@iftex +@image{examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + +@macro help{TEXT} +@html +
+ + À l'aide : + \TEXT\ +
+@end html +@end macro + +@c LEGALESE + +@macro logoLegalLinux +Tux le pingouin Linux a été créé par +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} avec +@uref{http://www.isc.tamu.edu/~lewing/gimp/,GIMP}. + +@end macro + +@macro logoLegalFreeBSD +Le logo FreeBSD logo est une marque déposée par la +@uref{http://www.freebsd.org/,Fondation FreeBSD}. + +@end macro + +@macro logoLegalMacOSX +L'image @q{X} n'est pas déposée. Elle a été créée par +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} et +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, et +distribuée sous la licence GNU Free Documentation License version 1.2 ou +ultérieure. +Nous avons trouvé cette image sur +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +cette page de Wikimedia Commons}. + +@end macro + +@macro logoLegalWindows +Le @qq{rectangle aux quatre couleurs} n'est pas une marque déposée. +Il a été créé par @uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} et +distribué sous la licence GNU Free Documentation License version 1.2. Nous +avons trouvé cette image sur +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +cette page de Wikimedia Commons}. + +@end macro + +@end ifset + + +@c ***** Macros specific to translated docs ***** + +@macro englishref +Cette section n'est pas encore encore traduite, veuillez +vous reporter à la documentation correspondante en anglais. +@end macro + diff --git a/Documentation/fr/notation.tely b/Documentation/fr/notation.tely new file mode 100644 index 0000000000..0018eac716 --- /dev/null +++ b/Documentation/fr/notation.tely @@ -0,0 +1,129 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 + +@setfilename lilypond-notation.info +@settitle GNU LilyPond -- Manuel de notation +@documentencoding UTF-8 +@documentlanguage fr +@afourpaper + +@macro manualIntro +Ce document constitue le manuel de notation de GNU LilyPond +@version{}. Sa lecture requiert une familiarité avec le contenu +présenté dans le @rlearningnamed{Top, Manuel d'initiation}. +@end macro + +@c `Notation Reference' was born 1999-10-11 with git commit 940dda0... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 par les auteurs. +@end macro + +@set FDL +@include macros.itexi + +@c @direntry has not been added yet, as Emacs and standalone Info have +@c no i18n support -JM + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription User manual of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage French +@end ignore + +@c Translators: John Mandereau, Jean-Charles Malahieude + +@c urg, makeinfo 4.9.91 French translation is funky +@iftex +@documentlanguage fr +@frenchspacing on +@end iftex + +@lilyTitlePage{Manuel de notation} + + +@ifnottex + +@menu +* Notation musicale générale:: notation générale. +* Notation spécialisée:: notation à usage spécifique. +* Généralités en matière d'entrée et sortie:: généralités sur les + fichiers sources et les sorties. +* Gestion de l'espace:: mise en page de la musique + sur le papier. +* Modification des réglages prédéfinis:: ajustement de la gravure. + +Annexes + +* Tables du manuel de notation:: tables et diagrammes. +* Aide-mémoire:: résumé de la syntaxe de LilyPond. +* Grammaire de LilyPond:: diagramme syntaxique pour + l'analyseur de LilyPond. +* GNU Free Documentation License:: licence de ce document. +* Index des commandes LilyPond:: +* Index de LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@contents + + +@include notation/notation.itely +@include notation/specialist.itely + +@include notation/input.itely +@include notation/spacing.itely + +@include notation/changing-defaults.itely + + +@include notation/notation-appendices.itely +@include notation/cheatsheet.itely + +@node Grammaire de LilyPond +@appendix Grammaire de LilyPond +@translationof LilyPond grammar + +Cette annexe présente la grammaire du langage de LilyPond, telle qu'elle +ressort de l'analyseur syntaxique. + +@verbatiminclude ly-grammar.txt + +@include fdl.itexi + +@node Index des commandes LilyPond +@appendix Index des commandes LilyPond +@translationof LilyPond command index + +Cet index recense toutes les commandes et mots réservés de LilyPond, +sous forme de lien vers les endroits du manuel où ils sont abordés. +Chaque lien est constitué de deux parties@tie{}: la première pointe +directement là où la commande ou le terme apparaît, la seconde au début +de la section où la commande ou le terme est abordé. + +@printindex ky + +@node Index de LilyPond +@appendix Index de LilyPond +@translationof LilyPond index + +En plus des commandes et mots réservés de LilyPond, cet index recense +les termes musicaux qui s'y rapportent. Tout comme dans l'index des +commandes, chaque lien est constitué de deux parties@tie{}: la première +pointe directement là où la commande ou le terme apparaît, la seconde au +début de la section où la commande ou le terme est abordé. + +@printindex cp + +@bye diff --git a/Documentation/fr/notation/GNUmakefile b/Documentation/fr/notation/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/fr/notation/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/notation/ancient.itely b/Documentation/fr/notation/ancient.itely new file mode 100644 index 0000000000..f62408459b --- /dev/null +++ b/Documentation/fr/notation/ancient.itely @@ -0,0 +1,2213 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 1b832d794f1444033f10465971e97d33f76fe310 + + 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" + +@c Translators: Jean-Charles Malahieude + +@node Notations anciennes +@section Notations anciennes +@translationof Ancient notation + +@menu +* Introduction aux notations anciennes:: +* Signes de note alternatifs:: +* Signes de note supplémentaires:: +* Contextes prédéfinis:: +* Transcription de musique mensurale:: +* Notation éditoriale:: +@end menu + +@node Introduction aux notations anciennes +@subsection Introduction aux notations anciennes +@translationof Introduction to ancient notation + + +@cindex Vaticana, Editio +@cindex Medicaea, Editio +@cindex hufnagel +@cindex Petrucci +@cindex mensural + +La gestion par LilyPond des formes de notation ancienne inclut des +fonctionnalités spécifiques à la notation mensurale et au chant +grégorien. La basse chiffrée est également partiellement prise en +charge. + +De nombreux objets graphiques --- @qq{grobs} dans le jargon de LilyPond +--- disposent d'une propriété @code{style}, comme nous le verrons dans +@itemize @bullet +@item +@ref{Têtes de note anciennes}, +@item +@ref{Altérations anciennes}, +@item +@ref{Silences anciens}, +@item +@ref{Clefs anciennes}, +@item +@ref{Crochets anciens}, +@item +@ref{Métriques anciennes}. +@end itemize + +Manipuler cette propriété permet d'adapter l'aspect typographique des +grobs à une forme de notation particulière, ce qui évite la création de +nouveaux concepts de notation. + +En plus des signes d'articulation standards décrits à la section +@ref{Articulations et ornements}, la notation ancienne dispose de signes +particuliers. + +@itemize @bullet +@item +@ref{Articulations anciennes} +@end itemize + +D'autres aspects de la notation ancienne ne peuvent pas être gérés +aussi simplement qu'en jouant sur les propriétés d'un style appliqué à +un objet graphique ou en lui ajoutant des articulations. Certains +concepts sont spécifiques à la notation ancienne. + +@itemize @bullet +@item +@ref{Guidons}, +@item +@ref{Divisions}, +@item +@ref{Ligatures}. +@end itemize + +Si tout cela vous dépasse et que vous désirez plonger dans le vif du +sujet sans trop vous préoccuper d'ajuster des contextes, consultez les +pages dédiées aux contextes prédéfinis. Ils vous permettront d'adapter +vos contextes de voix et de portée, et vous n'aurez plus qu'à saisir les +notes. + +@itemize @bullet +@item +@ref{Contextes du chant grégorien}, +@item +@ref{Les contextes de la musique mensurale}. +@end itemize + +LilyPond gère partiellement la représentation de basses chiffrées, +typiques de l'époque baroque, mais également employées de nos jours en +harmonie et en analyse. + +@itemize @bullet +@item +@ref{Basse chiffrée} +@end itemize + +Voici les points que nous allons aborder@tie{}: + + +@menu +* Formes de notation ancienne prises en charge:: +@end menu + +@node Formes de notation ancienne prises en charge +@unnumberedsubsubsec Formes de notation ancienne prises en charge +@translationof Ancient notation supported + +@untranslated + + + +@node Signes de note alternatifs +@subsection Signes de note alternatifs +@translationof Alternative note signs + +@untranslated + + +@menu +* Têtes de note anciennes:: +* Altérations anciennes:: +* Silences anciens:: +* Clefs anciennes:: +* Crochets anciens:: +* Métriques anciennes:: +@end menu + +@node Têtes de note anciennes +@unnumberedsubsubsec Têtes de note anciennes +@translationof Ancient note heads + +@cindex têtes de note, musique ancienne + +Pour de la musique ancienne, vous disposez de plusieurs styles de tête +de note, en plus du style par défaut @code{default}. Vous pouvez +affecter à la propriété @code{style} de l'objet @rinternals{NoteHead} +les valeurs @code{baroque}, @code{neomensural}, @code{mensural} ou +@code{petrucci}. En style @code{baroque}, la seule différence par +rapport au style @code{default} concerne la @code{\breve} qui sera +carrée et non pas ovoïde. Le style @code{neomensural} ajoute au +@code{baroque} le fait que les notes de durée inférieure ou égale à une +ronde sont en forme de losange, et les hampes centrées sur la tête. Ce +style est particulièrement adapté à la transcription de la musique +mesurée dans les incipits. Le style @code{mensural} permet de +reproduire les têtes de note telles qu'imprimées au XVIe siècle. Enfin, +le style @code{petrucci} imite des partitions historiques, bien qu'il +utilise de plus grosses têtes de note. + +L'exemple suivant illustre le style @code{neomensural}. + + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\override NoteHead #'style = #'neomensural +a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 +@end lilypond + +Si vous écrivez en notation grégorienne, le +@rinternals{Vaticana_ligature_engraver} se chargera de sélectionner +les têtes de note appropriées@tie{}; il est donc inutile de spécifier le +style à utiliser. Vous pouvez cependant spécifier par exemple le style +@code{vaticana_punctum} pour obtenir des neumes punctums. De même, +c'est le @rinternals{Mensural_ligature_engraver} qui se chargera des +ligatures mensurales. Consultez la section @ref{Ligatures} pour savoir +comment fonctionnent les graveurs de ligature. + + +@seealso +Manuel de notation : +@ref{Têtes de note}. + + + +@node Altérations anciennes +@unnumberedsubsubsec Altérations anciennes +@translationof Ancient accidentals + +@cindex altérations + + +Pour utiliser les formes anciennes d'altération, utilisez la propriété +@code{glyph-name-alist} des objets graphiques @rinternals{Accidental} +et @rinternals{KeySignature}. + +@lilypond[quote,ragged-right,staffsize=26] +\score { +{ + \textLengthOn + s^\markup { + \column { + "vaticana" + \line { " " \musicglyph #"accidentals.vaticana-1" + " " \musicglyph #"accidentals.vaticana0" } + } + \column { + "medicaea" + \line { " " \musicglyph #"accidentals.medicaea-1" } + } + \column { + "hufnagel" + \line { " " \musicglyph #"accidentals.hufnagel-1" } + } + \column { + "mensural" + \line { " " \musicglyph #"accidentals.mensural-1" + " " \musicglyph #"accidentals.mensural1" } + } + } +} +\layout { + interscoreline = 1 + \context { \Score \remove "Bar_number_engraver" } + \context { \Staff + \remove "Clef_engraver" + \remove "Key_engraver" + \remove "Time_signature_engraver" + \remove "Staff_symbol_engraver" + \override VerticalAxisGroup #'minimum-Y-extent = ##f + } + } +} +@end lilypond + +Vous noterez que chacun de ces styles ne comporte pas toutes les +altérations. LilyPond changera de style s'il y a besoin d'une +altération indisponible dans le style utilisé. + +À l'instar des altérations accidentelles, le style d'armure est géré +par la propriété @code{glyph-name-alist} de l'objet +@rinternals{KeySignature}. + + +@seealso +Manuel de notation: +@ref{Hauteurs}, +@ref{Altérations}, +@ref{Altérations accidentelles automatiques}, +@c r ef{Armure}. + +Référence des propriétés internes : +@rinternals{KeySignature}. + +Morceaux choisis : +@rlsrnamed{Ancient notation,Notations anciennes}. + + +@node Silences anciens +@unnumberedsubsubsec Silences anciens +@translationof Ancient rests + +@cindex silences, musique ancienne + +La propriété @code{style} de l'objet @rinternals{Rest} permet +d'obtenir des silences de type ancien. Vous disposez des styles +@code{classical}, @code{neomensural} et @code{mensural}. Le style +@code{classical} ne se distingue du style @code{default} que par le +soupir (demi-soupir en miroir). Le style @code{neomensural} convient +tout à fait à l'incipit lors de la transcription de musique mensurale. +Le style @code{mensural}, enfin, imite la gravure des silences dans +certaines éditions du XVIe siècle. + +L'exemple suivant illustre le style @code{neomensural}. + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\override Rest #'style = #'neomensural +r\longa r\breve r1 r2 r4 r8 r16 +@end lilypond + +Les styles @code{mensural} et @code{neomensural} ne disposent pas des 8e +et 16e de soupir@tie{}; LilyPond utilise dans de tels cas le style par +défaut. Voici une liste des styles de silences disponibles. + +@lilypondfile[quote,verbatim,ragged-right]{rest-styles.ly} + +Les silences sont absents de la notation grégorienne@tie{}; par contre, +cette notation utilise des @ref{Divisions}. + + +@seealso +Manuel de notation : les principes généraux sur l'utilisation des silences +sont exposés dans @ref{Silences}. + + +@node Clefs anciennes +@unnumberedsubsubsec Clefs anciennes +@translationof Ancient clefs + +@cindex clefs +@cindex clés + +Avec LilyPond, de nombreuses clés sont disponibles, dont certaines sont +dédiées à la musique ancienne. + +Le tableau suivant présente les différentes clés anciennes que vous +pouvez sélectionner avec la commande @code{\clef}. Certaines de ces +clés utilisent le même glyphe, attaché à l'une ou l'autre des lignes +de la portée. Le chiffre porté en suffixe permet alors de les +différencier. Vous pouvez néanmoins forcer le positionnement du +glyphe sur une ligne, comme expliqué à la section @ref{Clefs}. Dans la +colonne exemple, la note suivant la clé montre le do médium. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Description} +@tab +@b{Clé disponible} +@tab +@b{Exemple} + +@item +Clé d'ut, style mensural moderne +@tab +@code{neomensural-c1}, @code{neomensural-c2},@* +@code{neomensural-c3}, @code{neomensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "neomensural-c2" c +@end lilypond + +@item +Clé d'ut, style mensural Petrucci, positionnable sur différentes +lignes (clé d'ut seconde pour l'exemple) +@tab +@code{petrucci-c1}, @code{petrucci-c2},@* +@code{petrucci-c3}, @code{petrucci-c4},@* +@code{petrucci-c5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Clé de fa, style mensural Petrucci +@tab +@code{petrucci-f} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-f" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Clé de sol, style mensural Petrucci +@tab +@code{petrucci-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-g" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Clé d'ut, style mensural historique +@tab +@code{mensural-c1}, @code{mensural-c2},@* +@code{mensural-c3}, @code{mensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Clé de fa, style mensural historique +@tab +@code{mensural-f} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-f" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Clé de sol, style mensural historique +@tab +@code{mensural-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-g" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +Clé d'ut, style Editio Vaticana +@tab +@code{vaticana-do1}, @code{vaticana-do2},@* +@code{vaticana-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-do2" + c +@end lilypond + +@item +Clé de fa, style Editio Vaticana +@tab +@code{vaticana-fa1}, @code{vaticana-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-fa2" + c +@end lilypond + +@item +Clé d'ut, style Editio Medicaea +@tab +@code{medicaea-do1}, @code{medicaea-do2},@* +@code{medicaea-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-do2" + c +@end lilypond + +@item +Clé de fa, style Editio Medicaea +@tab +@code{medicaea-fa1}, @code{medicaea-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-fa2" + c +@end lilypond + +@item +Clé d'ut, style historique Hufnagel +@tab +@code{hufnagel-do1}, @code{hufnagel-do2},@* +@code{hufnagel-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do2" + c +@end lilypond + +@item +Clé de fa, style historique Hufnagel +@tab +@code{hufnagel-fa1}, @code{hufnagel-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-fa2" + c +@end lilypond + +@item +Clé combinée ut/fa, style historique Hufnagel +@tab +@code{hufnagel-do-fa} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do-fa" + c +@end lilypond +@end multitable + + + +@emph{Moderne} signifie @qq{gravé comme dans les transcriptions +contemporaines de musique mesurée.} + +@emph{Petrucci} signifie @qq{inspiré des éditions réalisées par le +maître graveur vénitien Petrucci (1466-1539).} + +@emph{Historique} signifie @qq{gravé comme dans les éditions +historiques, manuscrites ou non, autres que celles de Petrucci.} + +@emph{Editio XXX} signifie @qq{gravé comme dans les ouvrages estampillés +Editio XXX.} + +Les clés d'ut de Petrucci avaient une hampe gauche différente selon +leur ligne de rattachement. + + +@seealso +Manuel de notation : +@ref{Clefs}. + + +@knownissues + +La clé de sol mensurale est calquée sur celle de Petrucci. + + + +@node Crochets anciens +@unnumberedsubsubsec Crochets anciens +@translationof Ancient flags + +@cindex crochets + +Le réglage de la propriété @code{flag-style} de l'objet hampe +(@rinternals{Stem}) donne accès aux crochets de style ancien. Les +seuls styles actuellement pris en charge sont @code{default} et +@code{mensural}. + +@lilypond[quote,fragment,ragged-right,verbatim] +\override Stem #'flag-style = #'mensural +\override Stem #'thickness = #1.0 +\override NoteHead #'style = #'mensural +\autoBeamOff +c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 +c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 +@end lilypond + +Notez que pour chaque crochet mensural, l'extrémité la plus proche de +la tête de note sera toujours attachée à une ligne de la portée. + +Il n'existe pas de crochet spécifique au style néo-mensural. Nous vous +conseillons donc, lorsque vous réalisez l'incipit d'une transcription, +d'utiliser le style par défaut. Les crochets n'existent pas en notation +grégorienne. + +@knownissues + +Les crochets anciens s'attachent aux hampes avec un léger décalage, +suite à des modifications intervenues au début de la série 2.3. + +L'alignement vertical des crochets par rapport aux lignes de la portée +sous-entend que les hampes se terminent toujours soit sur une ligne, +soit à l'exact milieu d'un interligne. Ceci n'est pas toujours +réalisable, surtout si vous faites appel à des fonctionnalités avancées +de présentation de la notation classique, qui, par définition, ne sont +pas prévues pour être appliquées à la notation mensurale. + + + +@node Métriques anciennes +@unnumberedsubsubsec Métriques anciennes +@translationof Ancient time signatures + +@cindex métrique + +Les chiffrages de métrique mensurale sont partiellement pris en charge. +Les glyphes ne font que représenter des métriques particulières. En +d'autres termes, pour obtenir le glyphe correspondant à une métrique +mensurale particulière à l'aide de la commande @code{\time n/m}, vous +devez choisir la paire @code{(n,m)} parmi les valeurs suivantes@tie{}: + +@lilypond[quote,ragged-right] +\layout { + indent = 0.0 + \context { + \Staff + \remove Staff_symbol_engraver + \remove Clef_engraver + \remove Time_signature_engraver + } +} +{ + \set Score.timing = ##f + \set Score.barAlways = ##t + s_\markup { "\\time 4/4" }^\markup { " " \musicglyph +#"timesig.neomensural44" } + s + s_\markup { "\\time 2/2" }^\markup { " " \musicglyph +#"timesig.neomensural22" } + s + s_\markup { "\\time 6/4" }^\markup { " " \musicglyph +#"timesig.neomensural64" } + s + s_\markup { "\\time 6/8" }^\markup { " " \musicglyph +#"timesig.neomensural68" } + \break + s_\markup { "\\time 3/2" }^\markup { " " \musicglyph +#"timesig.neomensural32" } + s + s_\markup { "\\time 3/4" }^\markup { " " \musicglyph +#"timesig.neomensural34" } + s + s_\markup { "\\time 9/4" }^\markup { " " \musicglyph +#"timesig.neomensural94" } + s + s_\markup { "\\time 9/8" }^\markup { " " \musicglyph +#"timesig.neomensural98" } + \break + s_\markup { "\\time 4/8" }^\markup { " " \musicglyph +#"timesig.neomensural48" } + s + s_\markup { "\\time 2/4" }^\markup { " " \musicglyph +#"timesig.neomensural24" } +} +@end lilypond + +La propriété @code{style} de l'objet @rinternals{TimeSignature} permet +d'accéder aux indicateurs de métrique anciens. Les styles +@code{neomensural} et @code{mensural} sont disponibles. Vous avez vu +ci-dessus le style @code{neomensural}, particulièrement utilisé pour +l'incipit des transcriptions. Le style @code{mensural} imite l'aspect +de certaines éditions du XVIe siècle. + +Voici les différences entre les styles@tie{}: + +@lilypond[ragged-right,fragment,relative=1,quote] +{ + \textLengthOn + + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter default } + + \override Staff.TimeSignature #'style = #'numbered + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter numbered } + + \override Staff.TimeSignature #'style = #'mensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter mensural } + + \override Staff.TimeSignature #'style = #'neomensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter neomensural } + \override Staff.TimeSignature #'style = #'single-digit + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter single-digit } +} +@end lilypond + + +@seealso +Dans ce manuel : @ref{Métrique} expose les principes généraux sur +l'utilisation des indications de métrique. + + +@knownissues + +Les équivalences de durées de note ne sont pas modifiées par un +changement de métrique. Par exemple, l'équivalence 1 brève pour 3 +semi-brèves (@emph{tempus perfectum}) doit s'effectuer à la main en +entrant@tie{}: + +@example +breveTP = #(ly:make-duration -1 0 3 2) +@dots{} +@{ c\breveTP f1 @} +@end example + +@noindent +Ce qui définira @code{breveTP} à 3/2 fois 2 = 3 fois une ronde. + +Le symbole @code{old6/8alt} --- symbole alternatif pour la métrique 6/8 +-- ne peut être utilisé grâce à une commande @code{\time}. Utilisez +plutôt un @code{\markup}. + + + +@node Signes de note supplémentaires +@subsection Signes de note supplémentaires +@translationof Additional note signs + +@untranslated + + +@menu +* Articulations anciennes:: +* Guidons:: +* Divisions:: +* Ligatures:: +* Ligatures mensurales:: +* Neumes ligaturés grégoriens:: +@end menu + +@node Articulations anciennes +@unnumberedsubsubsec Articulations anciennes +@translationof Ancient articulations + +@cindex articulations + +En plus des signes d'articulation standards décrits à la section +@ref{Articulations et ornements}, LilyPond fournit des articulations +pour la musique ancienne. Elles sont spécifiquement destinées au style +Editio Vaticana. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \override TextScript #'font-family = #'typewriter + \override TextScript #'font-shape = #'upright + \override Script #'padding = #-0.1 + a\ictus_"ictus" \break + a\circulus_"circulus" \break + a\semicirculus_"semicirculus" \break + a\accentus_"accentus" \break + \[ a_"episem" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] + } +} +@end lilypond + +@knownissues + +Certaines articulations sont verticalement trop proches de leurs têtes +de note. + +Le trait d'un episem n'est bien souvent pas apparent et, lorsqu'il +l'est, son extension à droite est trop longue. + + +@node Guidons +@unnumberedsubsubsec Guidons +@translationof Custodes + +@cindex custos +@cindex custodes +@cindex guidon + +Un guidon --- @emph{custos}, pluriel @emph{custodes} en latin --- est un +symbole qui apparaît à la fin d'une portée. Il montre la hauteur de la +ou des premières notes de la portée suivante, donnant une indication +judicieuse à l'exécutant. + +Les guidons étaient couramment utilisés jusqu'au XVIIe siècle. De nos +jours, on les retrouve uniquement dans quelques formes particulières de +notation telles que les éditions contemporaines de chant grégorien comme +les @emph{editio vaticana}. Différents glyphes existent selon le style +de notation. + +L'impression de guidons s'obtient en affectant, dans un bloc +@code{\layout}, le @rinternals{Custos_engraver} au contexte +@code{Staff}, comme le montre l'exemple suivant. + +@example +\layout @{ + \context @{ + \Staff + \consists Custos_engraver + Custos \override #'style = #'mensural + @} +@} +@end example + +Le résultat ressemblera à + +@lilypond[quote,ragged-right] +\score { +{ + a'1 + \override Staff.Custos #'style = #'mensural + \break + g' +} +\layout { + \context { \Staff \consists Custos_engraver } + } +} +@end lilypond + +Le glyphe du guidon est déterminé par la propriété @code{style}. Les +styles disponibles sont @code{vaticana}, @code{medicaea}, +@code{hufnagel} et @code{mensural}. En voici un aperçu@tie{}: + +@lilypond[quote,ragged-right,fragment] +\new Lyrics \lyricmode { + \markup { \column { + \typewriter "vaticana" + \line { " " \musicglyph #"custodes.vaticana.u0" } + } } + \markup { \column { + \typewriter "medicaea" + \line { " " \musicglyph #"custodes.medicaea.u0" } + }} + \markup { \column { + \typewriter "hufnagel" + \line { " " \musicglyph #"custodes.hufnagel.u0" } + }} + \markup { \column { + \typewriter "mensural" + \line { " " \musicglyph #"custodes.mensural.u0" } + }} +} +@end lilypond + + +@seealso +Référence des propriétés internes : +@rinternals{Custos}. + +Morceaux choisis : +@rlsrnamed{Ancient notation,Notations anciennes}. + + +@node Divisions +@unnumberedsubsubsec Divisions +@translationof Divisiones + +@cindex divisio +@cindex divisiones +@cindex finalis + +Une division -- @emph{divisio}, pluriel @emph{divisiones} en latin -- +est un symbole ajouté à la portée et utilisé en chant grégorien pour +séparer les phrases ou parties. @emph{Divisio minima}, @emph{divisio +maior} et @emph{divisio maxima} peuvent respectivement s'interpréter +comme une pauses courte, moyenne ou longue, à l'image des marques de +respiration -- cf. @ref{Signes de respiration}. Le signe @emph{finalis} +n'est pas uniquement une marque de fin de chant@tie{}; il sert aussi à +indiquer la fin de chaque partie dans une structure verset/répons. + +Les divisions sont disponibles après inclusion du fichier +@file{gregorian-init.ly}. Ce fichier définit les commandes +@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima} et +@code{\finalis}. Certaines éditions utilisent @emph{virgula} ou +@emph{caesura} en lieu et place de @emph{divisio minima}@tie{}; c'est +pourquoi @file{gregorian-init.ly} définit aussi @code{\virgula} et +@code{\caesura}. + +@lilypond[quote,ragged-right] +\include "gregorian.ly" +\score { + << + \context VaticanaVoice { + \override TextScript #'padding = #3 + g a g + s^\markup { "divisio minima" } + \divisioMinima + g a g + s^\markup { "divisio maior" } + \divisioMaior + g a g + s^\markup { "divisio maxima" } + \divisioMaxima + \break + g a g + s^\markup { "finalis" } + \finalis + g a g + s^\markup { "virgula" } + \virgula + g a g + s^\markup { "caesura" } + \caesura + g a g + } + >> +} +@end lilypond + + + +@predefined +@funindex \virgula +@code{\virgula}, +@funindex \caesura +@code{\caesura}, +@funindex \divisioMinima +@code{\divisioMinima}, +@funindex \divisioMaior +@code{\divisioMaior}, +@funindex \divisioMaxima +@code{\divisioMaxima}, +@funindex \finalis +@code{\finalis}. +@endpredefined + + +@seealso +Manuel de notation : +@ref{Signes de respiration}. + +Référence des propriétés internes : +@rinternals{BreathingSign}. + +@c FIXME: add breathing-signs.ly directly +Morceaux choisis : +@rlsrnamed{Winds,Instruments à vent}. + + +@node Ligatures +@unnumberedsubsubsec Ligatures +@translationof Ligatures + +@cindex Ligatures + +@c TODO: Should double check if I recalled things correctly when I wrote +@c down the following paragraph by heart. + +Une ligature est un symbole graphique qui représente un groupe d'au +moins deux notes. Les ligatures ont commencé à apparaître dans les +manuscrits de chant grégorien, pour indiquer des suites ascendantes ou +descendantes de notes. + +Les ligatures s'indiquent par une inclusion entre @code{\[} et +@code{\]}. Certains styles de ligature peuvent demander un complément +de syntaxe spécifique. Par défaut, le graveur +@rinternals{LigatureBracket} place un simple crochet au dessus de +la ligature@tie{}: + +@lilypond[quote,ragged-right,verbatim] +\transpose c c' { + \[ g c a f d' \] + a g f + \[ e f a g \] +} +@end lilypond + +Selon le style de ligature désiré, il faut ajouter au contexte +@rinternals{Voice} le graveur de ligature approprié, comme nous le +verrons plus loin. Seules sont disponibles les ligatures mensurales +blanches, avec quelques limitations. + + +@knownissues + +La gestion de l'espacement spécifique aux ligatures n'est à ce jour +pas implémentée. En conséquence, les ligatures sont trop espacées les +unes des autres et les sauts de ligne mal ajustés. De plus, les +paroles ne s'alignent pas de manière satisfaisante en présence de +ligatures. + +Les altérations ne pouvant être imprimées à l'intérieur d'une +ligature, il faut les rassembler et les imprimer juste avant. + +La syntaxe utilisée correspond à l'ancienne convention de préfixage +@code{\[@tie{}expr_musicale\]}. Pour des raisons d'uniformité, nous +opterons probablement pour le style en suffixe (postfix) +@code{note\[@tie{}@dots{}@tie{}note\]}. +En attendant, vous pouvez inclure le fichier +@file{gregorian-init.ly}, qui fournit une fonction Scheme +@example +\ligature @var{expr_musicale} +@end example +qui produit le même résultat, et dont la pérennité est assurée. + + +* Ligatures mensurales:: +* Neumes ligaturés grégoriens:: +@node Ligatures mensurales +@unnumberedsubsubsec Ligatures mensurales +@translationof White mensural ligatures + + +@cindex Ligatures mensurales +@cindex Ligatures mensurales blanches + +Les ligatures mensurales blanches sont prises en charge, avec des +limitations. + +La gravure des ligatures mensurales blanches s'obtient après avoir +ajouté le @rinternals{Mensural_ligature_engraver} et enlevé le +@rinternals{Ligature_bracket_engraver} dans le contexte +@rinternals{Voice}, comme ici@tie{}: + +@example +\layout @{ + \context @{ + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + @} +@} +@end example + +Lorsque le code ci-dessus est employé, l'aspect d'une ligature mensurale +blanche est déterminé à partir des hauteurs et durées des notes qui la +composent. Bien que cela demande un temps d'adaptation au nouvel +utilisateur, cette méthode offre l'avantage que toute l'information +musicale incluse dans la ligature est connue en interne. Ceci est non +seulement important pour le rendu MIDI, mais aussi pour des questions de +transcription automatisée d'une ligature. + +Par exemple, + +@example +\set Score.timing = ##f +\set Score.defaultBarType = "empty" +\override NoteHead #'style = #'neomensural +\override Staff.TimeSignature #'style = #'neomensural +\clef "petrucci-g" +\[ c'\maxima g \] +\[ d\longa c\breve f e d \] +\[ c'\maxima d'\longa \] +\[ e'1 a g\breve \] +@end example +@lilypond[quote,ragged-right] +\score { + \transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] + } + \layout { + \context { + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + } +} +@end lilypond + +Si on ne remplace pas le @rinternals{Ligature_bracket_engraver} +par le @rinternals{Mensural_ligature_engraver}, on obtient + +@lilypond[quote,ragged-right] +\transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] +} +@end lilypond + +@knownissues + +L'espacement horizontal n'est pas des meilleurs. + + + + +@node Neumes ligaturés grégoriens +@unnumberedsubsubsec Neumes ligaturés grégoriens +@translationof Gregorian square neumes ligatures + +@cindex neumes carrés et ligatures +@cindex grégorien, ligatures de neumes carrés + +Les neumes grégoriens conformément au style des Editio Vaticana sont +pris en charge de façon assez limitée. Les ligatures élémentaires sont +déjà disponibles, mais beaucoup de règles typographiques ne sont pas +encore implémentées, notamment l'espacement horizontal des enchaînements +de ligatures, l'alignement des paroles ou une gestion convenable des +altérations. + +Le tableau ci-dessous inventorie les différents neumes contenus dans +le second tome de l'Antiphonale Romanum (@emph{Liber Hymnarius}) publié +par l'abbaye de Solesmes en 1983. + +@multitable @columnfractions .4 .2 .2 .2 + +@item +@b{Neuma aut@* +Neumarum Elementa} +@tab +@b{Figurae@* +Rectae} +@tab +@b{Figurae@* +Liquescentes@* +Auctae} +@tab +@b{Figurae@* +Liquescentes@* +Deminutae} + +@c TODO: \layout block is identical in all of the below examples. +@c Therefore, it should somehow be included rather than duplicated all +@c the time. --jr + +@c why not make identifiers in ly/engraver-init.ly? --hwn + +@c Because it's just used to typeset plain notes without +@c a staff for demonstration purposes rather than something +@c special of Gregorian chant notation. --jr + +@item +@code{1. Punctum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ b \] + \noBreak s^\markup {"a"} \noBreak + + % Punctum Inclinatum + \[ \inclinatum b \] + \noBreak s^\markup {"b"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Ascendens + \[ \auctum \ascendens b \] + \noBreak s^\markup {"c"} \noBreak + + % Punctum Auctum Descendens + \[ \auctum \descendens b \] + \noBreak s^\markup {"d"} \noBreak + + % Punctum Inclinatum Auctum + \[ \inclinatum \auctum b \] + \noBreak s^\markup {"e"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Parvum + \[ \inclinatum \deminutum b \] + \noBreak s^\markup {"f"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{2. Virga} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Virga + \[ \virga b \] + \noBreak s^\markup {"g"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@tab + +@item +@code{3. Apostropha vel Stropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha + \[ \stropha b \] + \noBreak s^\markup {"h"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha Aucta + \[ \stropha \auctum b \] + \noBreak s^\markup {"i"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@item +@code{4. Oriscus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Oriscus + \[ \oriscus b \] + \noBreak s^\markup {"j"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@tab + +@item +@code{5. Clivis vel Flexa} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis vel Flexa + \[ b \flexa g \] + s^\markup {"k"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Descendens + \[ b \flexa \auctum \descendens g \] + \noBreak s^\markup {"l"} \noBreak + + % Clivis Aucta Ascendens + \[ b \flexa \auctum \ascendens g \] + \noBreak s^\markup {"m"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Cephalicus + \[ b \flexa \deminutum g \] + s^\markup {"n"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{6. Podatus vel Pes} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Podatus vel Pes + \[ g \pes b \] + s^\markup {"o"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens + \[ g \pes \auctum \descendens b \] + \noBreak s^\markup {"p"} \noBreak + + % Pes Auctus Ascendens + \[ g \pes \auctum \ascendens b \] + \noBreak s^\markup {"q"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Epiphonus + \[ g \pes \deminutum b \] + s^\markup {"r"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{7. Pes Quassus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus + \[ \oriscus g \pes \virga b \] + s^\markup {"s"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus Auctus Descendens + \[ \oriscus g \pes \auctum \descendens b \] + s^\markup {"t"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@item +@code{8. Quilisma Pes} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma Pes + \[ \quilisma g \pes b \] + s^\markup {"u"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma Pes Auctus Descendens + \[ \quilisma g \pes \auctum \descendens b \] + s^\markup {"v"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@item +@code{9. Podatus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Initio Debilis + \[ \deminutum g \pes b \] + s^\markup {"w"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens Initio Debilis + \[ \deminutum g \pes \auctum \descendens b \] + s^\markup {"x"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@item +@code{10. Torculus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus + \[ a \pes b \flexa g \] + s^\markup {"y"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens + \[ a \pes b \flexa \auctum \descendens g \] + s^\markup {"z"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus + \[ a \pes b \flexa \deminutum g \] + s^\markup {"A"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{11. Torculus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Initio Debilis + \[ \deminutum a \pes b \flexa g \] + s^\markup {"B"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens Initio Debilis + \[ \deminutum a \pes b \flexa \auctum \descendens g \] + s^\markup {"C"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus Initio Debilis + \[ \deminutum a \pes b \flexa \deminutum g \] + s^\markup {"D"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{12. Porrectus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus + \[ a \flexa g \pes b \] + s^\markup {"E"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Auctus Descendens + \[ a \flexa g \pes \auctum \descendens b \] + s^\markup {"F"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Deminutus + \[ a \flexa g \pes \deminutum b \] + s^\markup {"G"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{13. Climacus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus + \[ \virga b \inclinatum a \inclinatum g \] + s^\markup {"H"} + } + \layout { \neumeDemoLayout } +} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Auctus + \[ \virga b \inclinatum a \inclinatum \auctum g \] + s^\markup {"I"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Deminutus + \[ \virga b \inclinatum a \inclinatum \deminutum g \] + s^\markup {"J"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{14. Scandicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus + \[ g \pes a \virga b \] + s^\markup {"K"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Auctus Descendens + \[ g \pes a \pes \auctum \descendens b \] + s^\markup {"L"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Deminutus + \[ g \pes a \pes \deminutum b \] + s^\markup {"M"} + } +\layout { \neumeDemoLayout }} +@end lilypond + +@item +@code{15. Salicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus + \[ g \oriscus a \pes \virga b \] + s^\markup {"N"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus Auctus Descendens + \[ g \oriscus a \pes \auctum \descendens b \] + s^\markup {"O"} + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@item +@code{16. Trigonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Trigonus + \[ \stropha b \stropha b \stropha a \] + s^\markup {"P"} + } + \layout { \neumeDemoLayout } +} +@end lilypond +@tab +@tab + +@end multitable + + +Contrairement à la majorité des autres systèmes de notation neumatique, +la manière de saisir les neumes n'a rien à voir avec leur apparence +typographique@tie{}; elle se concentre plutôt sur le sens musical. +Ainsi, @w{@code{\[ a \pes b \flexa g \]}} produit un @emph{torculus} +constitué de trois @emph{punctums}, alors que @w{@code{\[ a \flexa g +\pes b \]}} produit un @emph{porrectus} avec une flexe incurvée et un +seul @emph{punctum}. +Il n'existe pas de commande à proprement parler qui permette de +spécifier la courbe d'une flexe@tie{}; c'est la source musicale qui va +le déterminer. Le fondement d'une telle approche réside dans la +distinction que nous faisons entre les aspects musicaux de la source et +le style de notation que nous voulons obtenir. De ce fait, la même +source pourra être utilisée pour imprimer dans un autre style de +notation grégorienne. + +Le tableau suivant présente les fragments de code qui ont permis de +générer les neumes ligaturés du tableau précédent. Les lettres de la +première colonne renvoient aux ligatures ci-dessus. La seconde +colonne énumère le nom des ligatures, et la troisième le code ayant +permis de les générer, se basant ici sur sol, la, si. + +@multitable @columnfractions .02 .31 .67 +@item +@b{#} +@tab +@b{Nom} +@tab +@b{Code source} + +@item +a +@tab +Punctum +@tab +@code{\[ b \]} + +@item +b +@tab +Punctum Inclinatum +@tab +@code{\[ \inclinatum b \]} + +@item +c +@tab +Punctum Auctum@* +Ascendens +@tab +@code{\[ \auctum \ascendens b \]} + +@item +d +@tab +Punctum Auctum@* +Descendens +@tab +@code{\[ \auctum \descendens b \]} + +@item +e +@tab +Punctum Inclinatum@* +Auctum +@tab +@code{\[ \inclinatum \auctum b \]} + +@item +f +@tab +Punctum Inclinatum@* +Parvum @tab +@code{\[ \inclinatum \deminutum b \]} + +@item +g +@tab +Virga +@tab +@code{\[ \virga b \]} + +@item +h +@tab +Stropha +@tab +@code{\[ \stropha b \]} + +@item +i +@tab +Stropha Aucta +@tab +@code{\[ \stropha \auctum b \]} + +@item +j +@tab +Oriscus +@tab +@code{\[ \oriscus b \]} + +@item +k +@tab +Clivis vel Flexa +@tab +@code{\[ b \flexa g \]} + +@item +l +@tab +Clivis Aucta@* +Descendens +@tab +@code{\[ b \flexa \auctum \descendens g \]} + +@item +m +@tab +Clivis Aucta@* +Ascendens +@tab +@code{\[ b \flexa \auctum \ascendens g \]} + +@item +n +@tab +Cephalicus +@tab +@code{\[ b \flexa \deminutum g \]} + +@item +o +@tab +Podatus vel Pes +@tab +@code{\[ g \pes b \]} + +@item +p +@tab +Pes Auctus@* +Descendens +@tab +@code{\[ g \pes \auctum \descendens b \]} + +@item +q +@tab +Pes Auctus@* +Ascendens +@tab +@code{\[ g \pes \auctum \ascendens b \]} + +@item +r +@tab +Epiphonus +@tab +@code{\[ g \pes \deminutum b \]} + +@item +s +@tab +Pes Quassus +@tab +@code{\[ \oriscus g \pes \virga b \]} + +@item +t +@tab +Pes Quassus@* +Auctus Descendens @tab +@code{\[ \oriscus g \pes \auctum \descendens b \]} + +@item +u +@tab +Quilisma Pes +@tab +@code{\[ \quilisma g \pes b \]} + +@item +v +@tab +Quilisma Pes@* +Auctus Descendens +@tab +@code{\[ \quilisma g \pes \auctum \descendens b \]} + +@item +w +@tab +Pes Initio Debilis +@tab +@code{\[ \deminutum g \pes b \]} + +@item +x +@tab +Pes Auctus Descendens@* +Initio Debilis +@tab +@code{\[ \deminutum g \pes \auctum \descendens b \]} + +@item +y +@tab +Torculus +@tab +@code{\[ a \pes b \flexa g \]} + +@item +z +@tab +Torculus Auctus@* +Descendens +@tab +@code{\[ a \pes b \flexa \auctum \descendens g \]} + +@item +A +@tab +Torculus Deminutus +@tab +@code{\[ a \pes b \flexa \deminutum g \]} + +@item +B +@tab +Torculus Initio Debilis +@tab +@code{\[ \deminutum a \pes b \flexa g \]} + +@item +C +@tab +Torculus Auctus@* +Descendens Initio Debilis +@tab +@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} + +@item +D +@tab +Torculus Deminutus@* +Initio Debilis +@tab +@code{\[ \deminutum a \pes b \flexa \deminutum g \]} + +@item +E +@tab +Porrectus +@tab +@code{\[ a \flexa g \pes b \]} + +@item +F +@tab +Porrectus Auctus@* +Descendens +@tab +@code{\[ a \flexa g \pes \auctum \descendens b \]} + +@item +G +@tab +Porrectus Deminutus +@tab +@code{\[ a \flexa g \pes \deminutum b \]} + +@item +H +@tab +Climacus +@tab +@code{\[ \virga b \inclinatum a \inclinatum g \]} + +@item +I +@tab +Climacus Auctus +@tab +@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} + +@item +J +@tab +Climacus Deminutus +@tab +@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} + +@item +K +@tab +Scandicus +@tab +@code{\[ g \pes a \virga b \]} + +@item +L +@tab +Scandicus Auctus@* +Descendens +@tab +@code{\[ g \pes a \pes \auctum \descendens b \]} + +@item +M +@tab +Scandicus Deminutus +@tab +@code{\[ g \pes a \pes \deminutum b \]} + +@item +N +@tab +Salicus +@tab +@code{\[ g \oriscus a \pes \virga b \]} + +@item +O +@tab +Salicus Auctus Descendens +@tab +@code{\[ g \oriscus a \pes \auctum \descendens b \]} + +@item +P +@tab +Trigonus +@tab +@code{\[ \stropha b \stropha b \stropha a \]} +@end multitable + +Les ligatures que nous venons de voir, bien que rudimentaires, donnent +un aperçu des possibilités de former des ligatures grégoriennes. En +théorie, vous pouvez inclure entre les délimiteurs @code{\[} et +@code{\]}, autant de sons que nécessaires à la ligature, ainsi que de +préfixes tels que @code{\pes}, @code{\flexa}, @code{\virga}, +@code{\inclinatum}, @dots{} Bien sûr, les règles de construction +présentées ci-dessus peuvent se combiner, ce qui permet la création +d'une infinité de ligatures. + +Les points d'@emph{augmentum}, ou @emph{morae}, s'obtiennent avec la +fonction @code{\augmentum}. Notez que cette fonction @code{\augmentum} +est implémentée en tant que fonction unaire plutôt que comme un préfixe +de note. Par conséquent, @code{\augmentum \virga c} ne donnera rien de +particulier. Il faut l'utiliser avec la syntaxe @code{\virga \augmentum +c} ou @code{\augmentum @{\virga c@}}. Par ailleurs, l'expression +@code{\augmentum @{a g@}} constitue une forme abrégée de +@code{\augmentum a \augmentum g}. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \[ \augmentum a \flexa \augmentum g \] + \augmentum g + } +} +@end lilypond + + +@predefined +LilyPond dispose des préfixes suivants@tie{}: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. +@endpredefined + + +Les préfixes de note peuvent s'agglutiner, modulo quelques restrictions. +Par exemple, on peut appliquer un @code{\descendens} ou un +@code{\ascendens} à une note, mais pas les deux simultanément à une même +note. + +@funindex \pes +@funindex \flexa +Deux notes adjacentes peuvent être reliées grâce aux commandes +@code{\pes} ou @code{\flexa} pour marquer une ligne mélodique +respectivement ascendante ou descendante. + +@funindex \augmentum +Utilisez la fonction musicale unaire @code{\augmentum} pour ajouter +des points d'augmentum. + +@knownissues + +Lorsqu'un @code{\augmentum} apparaît dans une ligature en fin de +portée, son placement vertical peut être erroné. Pour y remédier, +ajoutez un silence invisible, @code{s8} par exemple, comme dernière note +de cette portée. + +L'@code{\augmentum} devrait être implémenté en tant que préfixe plutôt +qu'en tant que fonction unaire, afin qu'@code{\augmentum} puisse +s'intégrer avec d'autres préfixes dans n'importe quel ordre. + + + + +@node Contextes prédéfinis +@subsection Contextes prédéfinis +@translationof Pre-defined contexts + +@untranslated + + +@menu +* Contextes du chant grégorien:: +* Les contextes de la musique mensurale:: +@end menu + +@node Contextes du chant grégorien +@unnumberedsubsubsec Contextes du chant grégorien +@translationof Gregorian chant contexts + +@cindex VaticanaVoiceContext +@cindex VaticanaStaffContext + +Les contextes @code{VaticanaVoiceContext} et +@code{VaticanaStaffContext} permettent de graver le chant grégorien +dans le style des éditions vaticanes. Ces contextes initialisent +les propriétés de tous les autres contextes et objets graphiques à des +valeurs adéquates, de telle sorte que vous pouvez tout de suite vous +lancer dans la saisie de votre chant, comme ci-dessous@tie{}: + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + << + \new VaticanaVoice = "cantus" { + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] + f \divisioMinima + \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] + c' \divisioMinima \break + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima + } + \new Lyrics \lyricsto "cantus" { + San- ctus, San- ctus, San- ctus + } + >> +} +@end lilypond + + + + +@node Les contextes de la musique mensurale +@unnumberedsubsubsec Les contextes de la musique mensurale +@translationof Mensural contexts + + +@cindex MensuralVoiceContext +@cindex MensuralStaffContext + +Les contextes @code{MensuralVoiceContext} et +@code{MensuralStaffContext} permettent de graver des chants dans le +style mesuré. Ces contextes initialisent les propriétés de tous les +autres contextes et objets graphiques à des valeurs adéquates, de telle +sorte que vous pouvez tout de suite vous lancer dans la saisie de votre +chant comme ci-après@tie{}: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new MensuralVoice = "discantus" \transpose c c' { + \override Score.BarNumber #'transparent = ##t { + c'1\melisma bes a g\melismaEnd + f\breve + \[ f1\melisma a c'\breve d'\melismaEnd \] + c'\longa + c'\breve\melisma a1 g1\melismaEnd + fis\longa^\signumcongruentiae + } + } + \new Lyrics \lyricsto "discantus" { + San -- ctus, San -- ctus, San -- ctus + } + >> +} +@end lilypond + + + +@node Transcription de musique mensurale +@subsection Transcription de musique mensurale +@translationof Transcribing ancient music + +@untranslated + +@menu +* Éditions ancienne et moderne à partir d'une même source:: +* Des incipits:: +* Mise en forme de la musique mensurale:: +* Transcription de chant grégorien:: +@end menu + +@node Éditions ancienne et moderne à partir d'une même source +@unnumberedsubsubsec Éditions ancienne et moderne à partir d'une même source +@translationof Ancient and modern from one source + +@untranslated + +@node Des incipits +@unnumberedsubsubsec Des incipits +@translationof Incipits + +@untranslated + + +@node Mise en forme de la musique mensurale +@unnumberedsubsubsec Mise en forme de la musique mensurale +@translationof Mensurstriche layout + +@untranslated + +@node Transcription de chant grégorien +@unnumberedsubsubsec Transcription de chant grégorien +@translationof Transcribing Gregorian chant + +@untranslated + + +@node Notation éditoriale +@subsection Notation éditoriale +@translationof Editorial markings + +@untranslated + +@menu +* Altérations accidentelles suggérées:: +* Notation du rythme dans la musique baroque:: +@end menu + +@node Altérations accidentelles suggérées +@unnumberedsubsubsec Altérations accidentelles suggérées +@translationof Annotational accidentals + + +@cindex MensuralVoiceContext +@cindex MensuralStaffContext + +Les contextes @code{MensuralVoiceContext} et +@code{MensuralStaffContext} permettent de graver des chants +dans le style mesuré. Ces contextes initialisent +les propriétés de tous les autres contextes et objets graphiques à des +valeurs adéquates, de telle sorte que vous pouvez tout de suite vous +lancer dans la saisie de votre chant comme ci-après@tie{}: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new MensuralVoice = "discantus" \transpose c c' { + \override Score.BarNumber #'transparent = ##t { + c'1\melisma bes a g\melismaEnd + f\breve + \[ f1\melisma a c'\breve d'\melismaEnd \] + c'\longa + c'\breve\melisma a1 g1\melismaEnd + fis\longa^\signumcongruentiae + } + } + \new Lyrics \lyricsto "discantus" { + San -- ctus, San -- ctus, San -- ctus + } + >> +} +@end lilypond + + + +@node Notation du rythme dans la musique baroque +@unnumberedsubsubsec Notation du rythme dans la musique baroque +@translationof Baroque rhythmic notation + +@untranslated + diff --git a/Documentation/fr/notation/changing-defaults.itely b/Documentation/fr/notation/changing-defaults.itely new file mode 100644 index 0000000000..05bb50dad7 --- /dev/null +++ b/Documentation/fr/notation/changing-defaults.itely @@ -0,0 +1,1703 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: Gilles Thibault + + +@node Modification des réglages prédéfinis +@chapter Modification des réglages prédéfinis +@translationof Changing defaults + +LilyPond est conçu pour engendrer, par défaut, des partitions de la +plus haute qualité. Cependant, on peut parfois avoir à modifier cette +mise en forme par défaut. Celle-ci est réglée par tout un ensemble de +@qq{leviers et manettes} plus connus sous le terme de @qq{propriétés}, +dont ce chapitre ne cherche pas à faire l'inventaire exhaustif -- vous +en trouverez un @rlearningnamed{Retouche de partition,apperçu} dans le +manuel d'initiation. Le propos est plutôt ici de mettre en évidence les +différents groupes auxquels s'apparentent ces contrôles, et d'expliquer +comment trouver le bon levier pour obtenir tel ou tel effet en +particulier. + +@cindex Référence des propriétés internes + +Les moyens de contrôle des différents réglages sont décrits dans un +document séparé, @rinternalsnamed{Top,la référence des propriétés +internes}. Ce guide répertorie toutes les variables, fonctions et +autres options que LilyPond met à votre disposition. Il est consultable +@c leave the @uref as one long line. +@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,en@tie{}ligne}, +au format HTML, mais est également inclus dans la documentation +fournie avec le logiciel. + +En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP) +comme infrastructure. Modifier les choix de mise en page revient à +pénétrer dans les entrailles du programme, et de ce fait requiert +l'emploi du Scheme. Les fragments de Scheme, dans un fichier +@file{.ly}, sont introduits par le caractère @emph{hash}, (@code{#}, +improprement surnommé @qq{dièse}). +@footnote{Le @rextend{Tutoriel Scheme} fournit quelques notions de +base pour saisir des nombres, des listes, des chaînes de caractères ou +des symboles, en Scheme.} + +Il est quatre domaines dans lesquels on peut modifier les réglages par +défaut@tie{}: + +@itemize @bullet +@item +La notation automatique, ce qui revient à modifier la manière dont les +éléments de notation sont automatiquement créés -- par exemple, les +règles de ligature. + +@item +L'apparence, qui se rapporte aux objets pris individuellement -- ainsi +de la direction des hampes, du placement des indications textuelles. + +@item +Les contextes, qui recouvrent la manière dont les évènements musicaux +sont représentés sous forme de notation -- par exemple, le fait +d'attribuer un chiffre de mesure distinct à chaque portée. + +@item +La mise en page, autrement dit les marges, l'espacement, la taille du +papier@tie{}; tous ces facteurs font l'objet des chapitres +@ref{Généralités en matière d'entrée et sortie} et +@ref{Gestion de l'espace}. +@end itemize + + +@menu +* Contextes d'interprétation:: +* En quoi consiste la référence des propriétés internes:: +* Modification de propriétés:: +* Propriétés et contextes utiles:: +* Retouches avancées:: +* Utilisation de fonctions musicales:: +@end menu + +@node Contextes d'interprétation +@section Contextes d'interprétation +@translationof Interpretation contexts + +Cette section traite des contextes. + +@menu +* Tout savoir sur les contextes:: +* Création d'un contexte:: +* Conservation d'un contexte:: +* Modification des greffons de contexte:: +* Modification des réglages par défaut d'un contexte:: +* Définition de nouveaux contextes:: +* Alignement des contextes:: +@end menu + + +@seealso +Manuel d'initiation : +@rlearning{Contextes et graveurs}. + +Fichiers d'initialisation : +@file{ly/engraver-init.ly}, +@file{ly/performer-init.ly}. + +Morceaux choisis : +@rlsr{Contexts and engravers}. + +Référence des propriétés internes : +@rinternals{Contexts}, +@rinternals{Engravers and Performers}. + + +@node Tout savoir sur les contextes +@subsection Tout savoir sur les contextes +@translationof Contexts explained + +@ignore +@c TODO Rethink and rewrite + +>> > > - list of contexts: my *danger unmaintainable* +>> > > alarm just went off. I'm + +I knew it would... And leaving out some of them is perfectly fine +with me. +I do think that a list like this, with the main contexts and a +brief +description of what they do (perhaps also with a note about what +default +behavior is associated with each of them, but this may be +unmanageable), +should be there, and then we could simply list the remaining ones +without +further explanation and with links to the IR. +@end ignore + +@c TODO Improve layout, order and consistency of wording -td + +@c TODO Add introduction which explains contexts in generality -td + +@c TODO Describe propagation of property values -td + + +@menu +* Score -- le père de tous les contextes:: +* Contextes de haut niveau -- les systèmes:: +* Contextes de niveau intermédiaire -- les portées:: +* Contextes de bas niveau -- les voix:: +@end menu + +@node Score -- le père de tous les contextes +@unnumberedsubsubsec Score -- le père de tous les contextes +@translationof Score - the master of all contexts + +@untranslated + + +@node Contextes de haut niveau -- les systèmes +@unnumberedsubsubsec Contextes de haut niveau -- les systèmes +@translationof Top-level contexts - staff containers + +@untranslated + + +@node Contextes de niveau intermédiaire -- les portées +@unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées +@translationof Intermediate-level contexts - staves + +@untranslated + + +@node Contextes de bas niveau -- les voix +@unnumberedsubsubsec Contextes de bas niveau -- les voix +@translationof Bottom-level contexts - voices + +@untranslated + + +@node Création d'un contexte +@subsection Création d'un contexte +@translationof Creating contexts + +@untranslated + + +@node Conservation d'un contexte +@subsection Conservation d'un contexte +@translationof Keeping contexts alive + +@untranslated + + +@node Modification des greffons de contexte +@subsection Modification des greffons de contexte +@translationof Modifying context plug-ins + +Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent +pas que des propriétés@tie{}; ils mettent également en œuvre certains +sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés +@qq{graveurs} (@emph{engravers} pour reprendre le terme anglais). +Ces sous-programmes sont chargés de créer les différents éléments de +notation@tie{}: on trouve ainsi dans le contexte @code{Voice} un graveur +@code{Note_heads_engraver}, chargé des têtes de notes et, dans le +contexte @code{Staff}, un graveur @code{Key_signature_engraver}, chargé +de l'armure. + +Vous trouverez une description exhaustive de chaque graveur dans +@ifhtml +@rinternals{Engravers and Performers}. +@end ifhtml +@ifnothtml +Référence des propriétés internes @expansion{} Translation @expansion{} Engravers. +@end ifnothtml +Chaque contexte mentionné dans +@ifhtml +@rinternals{Contexts} +@end ifhtml +@ifnothtml +Référence des propriétés internes @expansion{} Translation @expansion{} Context. +@end ifnothtml +répertorie les graveurs mis en œuvre. + + +On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en +modifiant les contextes à volonté. + +Lorsque un contexte est créé, par la commande @code{\new} ou +@code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais +@q{avec}), dans lequel il est possible d'ajouter (commande +@code{\consists}) ou d'enlever (commande @code{\remove}) des +graveurs@tie{}: + +@funindex \with + +@example +\new @var{contexte} \with @{ + \consists @dots{} + \consists @dots{} + \remove @dots{} + \remove @dots{} + @emph{etc.} +@} +@{ + @emph{..musique..} +@} +@end example + +@noindent +Ici les points de suspension @dots{} devront être remplacés par les noms +des graveurs désirés. Dans l'exemple suivant, on enlève du contexte +@code{Staff}, la métrique (graveur @code{Time_signature_engraver}) +et la clé (graveur @code{Clef_engraver}). + +@lilypond[quote,relative=1,verbatim] +<< + \new Staff { + f2 g + } + \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + } { + f2 g2 + } +>> +@end lilypond + +La clé et le chiffre de mesure ont disparu de la deuxième portée. C'est +une méthode quelque peu radicale, puisqu'elle affectera toute la portée +jusqu'à la fin de la partition. L'espacement s'en trouve également +affecté, ce qui peut être ou non l'effet recherché. Une méthode plus +sophistiquée aurait été de rendre ces objets transparents (voir +@rlearning{Visibilité et couleur des objets}). + +Dans l'exemple suivant, voici une mise en pratique plus utile. En temps +normal, les barres de mesure et la métrique sont synchronisées +verticalement dans toute la partition. Les graveurs qui en sont +responsables se nomment @code{Timing_translator} et +@code{Default_bar_line_engraver}. En les enlevant du contexte +@code{Score} pour les attribuer au contexte @code{Staff}, chaque portée +peut désormais avoir sa propre métrique. + +@cindex polymétrique, partition +@cindex chiffres de mesure multiples + +@lilypond[quote,verbatim] +\score { + << + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 3/4 + c4 c c c c c + } + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 2/4 + c4 c c c c c + } +>> +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + } +} +@end lilypond + +En règle générale, l'ordre dans lequel les graveurs sont mentionnés +importe peu. Il se peut toutefois qu'un graveur écrive une propriété +qui sera interprétée par un autre, ou qu'un graveur crée un objet +graphique qui sera traité par un autre@tie{}; l'ordre d'apparition de +ces graveurs prendra lors tout son importance. + +Pour information, les ordonnancements suivants sont importants@tie{}: +le @code{Bar_engraver} devrait toujours être le premier@tie{}; le +@code{New_fingering_engraver} doit toujours précéder le +@code{Script_column_engraver}. Nous vous conseillons, pour les autres, +de vérifier les évenntuelles dépendances. + +@c deprecated node: delete. --fv +@ignore +@n ode Retouches de mise en forme au sein des contextes +@s ubsection Retouches de mise en forme au sein des contextes +@t ranslationof Layout tunings within contexts + +Chaque contexte est chargé de créer plusieurs types d'objets graphiques. +Il contient également les réglages nécessaires pour chacun de ces +objets. Si l'on modifie ces réglages, les objets n'auront plus la même +apparence. + +La syntaxe employée pour ce faire est + +@example +\override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur} +@end example + +Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes) +ou @code{NoteHead} (les têtes de note)@tie{}; @var{propriété} est une +variable (désignée par un symbole, ce qui explique l'apostrophe) +employée par le système de mise en page. La sous-section +@ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la +place de @var{objet}, @var{propriété} et @var{valeur}@tie{}; notre +propos n'est ici que d'examiner l'emploi de cette commande. + +La commande suivante@tie{}: + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui +signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la +portée). Dans la mesure où nous avons indiqué @code{Staff} comme +contexte, ce réglage ne s'appliquera qu'à la portée courante@tie{}; les +autres portées demeureront intactes. + + +@lilypond[quote,verbatim,relative=2,fragment] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond + +La commande @code{\override} modifie donc la définition de l'objet +@code{Stem} dans le contexte @code{Staff}@tie{}; toutes les hampes qui +suivent seront affectées. Tout comme avec la commande @code{\set}, +l'argument @var{contexte} peut être omis, auquel cas le contexte par +défaut (ici, @code{Voice}) sera employé. La commande @code{\once} +permet de n'appliquer la modification qu'une seule fois. + +@lilypond[quote,fragment,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond + +La commande @code{\override} doit être entrée @emph{avant} l'objet +concerné. Ainsi, lorsque l'on veut altérer un objet qui se prolonge, +tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner}, +la commande @code{\override} doit être saisie avant que l'objet soit +créé. + +@lilypond[quote,fragment,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'beam-thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la +ligature (@emph{Beam}). En effet, le code qui lui est relatif n'a pas +été inséré avant le début de la ligature, et demeure donc sans effet. + +De même que la commande @code{\unset}, la commande @code{\revert} défait +ce qui a été fait par une commande @code{\override}. Tout comme avec +@code{\unset}, elle ne peut annuler que les réglages effectués dans le +même contexte. Ainsi dans l'exemple suivant, la commande @code{\revert} +est sans effet. + +@example +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Il existe, à l'intérieur même de certaines propriétés, des options que +l'on nomme @q{sous-propriétés}. La syntaxe est alors + +@c leave this as a long long +@example +\override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur} +@end example + +@noindent +Ainsi, par exemple@tie{}: + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + + +@seealso +Référence des propriétés internes : +@rinternals{OverrideProperty}, +@rinternals{RevertProperty}, +@rinternals{PropertySet}, +@rinternals{Backend}, +@rinternals{All layout objects}. + + +@knownissues + +La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon +très stricte. Des références cycliques dans des valeurs Scheme peuvent +de ce fait interrompre, ou faire planter le programme -- ou bien les +deux. +@end ignore + +@node Modification des réglages par défaut d'un contexte +@subsection Modification des réglages par défaut d'un contexte +@translationof Changing context default settings + +Les réglages montrés dans les sous-sections +@ref{La commande de fixation (set)}, +@ref{Modification des greffons de contexte} +@c et @c r ef{Retouches de mise en forme au sein des contextes} +peuvent également être saisis indépendamment de la musique dans le bloc +@code{\layout}, au moyen de la commande @code{\context}@tie{}: + +@example +\layout @{ + @dots{} + \context @{ + \Staff + + \set fontSize = #-2 + \override Stem #'thickness = #4.0 + \remove "Time_signature_engraver" + @} +@} +@end example + +Le raccourci @code{\Staff} invoque les définitions inhérentes au +contexte @code{Staff}, de façon à ce qu'elles puissent être modifiées. + +Les lignes suivantes affecteront toutes les portées (tous les contextes +@code{Staff}) dans la partition. +@example +\set fontSize = #-2 +\override Stem #'thickness = #4.0 +\remove "Time_signature_engraver" +@end example + +@noindent +Les autres contextes peuvent être modifiés de même manière. + +La commande @code{\set}, dans le bloc @code{\layout}, est +facultative@tie{}; aussi les lignes suivantes produiront-elles le même +effet. + +@example +\context @{ + @dots{} + fontSize = #-2 +@} +@end example + + +@knownissues + +Il est impossible de stocker des modifications de contexte dans un +identificateur. + +Le raccourci @code{\Staff \RemoveEmptyStaves} détruit tous les réglages +du contexte @code{\Staff}. Pour modifier des propriétés de portées +gouvernées par @code{\Staff \RemoveEmptyStaves}, il faut le faire +impérativement @strong{après} avoir invoqué @code{\Staff +\RemoveEmptyStaves}@tie{}: + +@example +\layout @{ + \context @{ + \Staff \RemoveEmptyStaves + + \override Stem #'thickness = #4.0 + @} +@} +@end example + + +@node Définition de nouveaux contextes +@subsection Définition de nouveaux contextes +@translationof Defining new contexts + +Les contextes tels que @code{Staff} ou @code{Voice} sont faits +de briques de constructions empilées. En combinant divers graveurs, +il est possible de créer de nouveaux types de contextes. + +Dans l'exemple suivant, on construit, de zéro, un nouveau contexte très +semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en +forme de barres obliques au centre de la portée. Un tel contexte, par +exemple, peut servir à indiquer un passage improvisé dans un morceau de +jazz. + +@c KEEP LY +@lilypond[quote,ragged-right] +\layout { \context { + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Rhythmic_column_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +} +\context { \Staff + \accepts "ImproVoice" +}} + +\relative c'' { + a4 d8 bes8 \new ImproVoice { c4^"ad lib" c + c4 c^"dévêtez-vous" c_"tout en jouant :)" c } + a1 +} +@end lilypond + + +On a rassemblé les réglages dans un bloc @code{\context}, lui-même dans +le bloc @code{\layout}@tie{}: + +@example +\layout @{ + \context @{ + @dots{} + @} +@} +@end example + +En lieu et place des points (@dots{}), voici les éléments à +saisir@tie{}: + +@itemize @bullet +@item Tout d'abord, il convient de donner un nom @code{\name} à notre +nouveau contexte@tie{}: + +@example +\name ImproVoice +@end example + +@item Comme il est très semblable à @code{Voice}, nous souhaitons que +toutes les commandes associées au @code{Voice} déjà existant, restent +valables. D'où nécessité de la commande @code{\alias}, qui va +l'associer au contexte @code{Voice}@tie{}: + +@example +\alias Voice +@end example + +@item Ce contexte doit pouvoir imprimer des notes, et des indications +textuelles@tie{}; on ajoute donc les graveurs appropriés. + +@example +\consists Note_heads_engraver +\consists Text_engraver +@end example + +@item Cependant, on veut que les notes s'affichent toutes au centre de +la portée@tie{}: + +@example +\consists Pitch_squash_engraver +squashedPosition = #0 +@end example + +@noindent +Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes +créées par @rinternals{Note_heads_engraver}, et les @qq{écrase} pour +qu'elles aient toutes la même position verticale, définie par +@code{squashedPosition}@tie{}: ici il s'agit de la valeur@tie{}@code{0}, +c'est-à-dire la ligne du milieu. + +@item On veut que les notes aient la forme d'une barre oblique, sans +aucune hampe@tie{}: + +@example +\override NoteHead #'style = #'slash +\override Stem #'transparent = ##t +@end example + +@item Afin que tous ces graveurs puissent travailler de concert, on leur +adjoint un sous-programme spécial, introduit par la commande +@code{\type}@tie{}: il s'agit de @code{Engraver_group}, + +@example +\type "Engraver_group" +@end example + +@end itemize + +Récapitulons -- on se retrouve avec le bloc suivant@tie{}: + +@example +\context @{ + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +@} +@end example + +@funindex \accepts + +Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte +@code{ImproVoice} dans la hiérarchie des contextes. Tout comme le +contexte @code{Voice}, sa place est au sein du contexte @code{Staff}. +Nous allons donc modifier le contexte @code{Staff}, +au moyen de la commande @code{\accepts}@tie{}: + +@example +\context @{ + \Staff + \accepts ImproVoice +@} +@end example + +@funindex \denies + +Le contraire de @code{\accepts} est @code{\denies}, +qui est parfois utile lorsque l'on recycle des définitions de +contextes déjà existantes. + +Enfin, tout cela doit prendre place dans le bloc @code{\layout}, +comme suit@tie{}: + +@example +\layout @{ + \context @{ + \name ImproVoice + @dots{} + @} + \context @{ + \Staff + \accepts "ImproVoice" + @} +@} +@end example + +On peut alors saisir la musique, comme dans l'exemple plus haut@tie{}: + +@example +\relative c'' @{ + a4 d8 bes8 + \new ImproVoice @{ + c4^"ad lib" c + c4 c^"dévêtez-vous" + c c_"tout en jouant :)" + @} + a1 +@} +@end example + + +@node Alignement des contextes +@subsection Alignement des contextes +@translationof Aligning contexts + + +Il est possible d'aligner verticalement chaque nouveau contexte, +en-dessous ou au-dessus, par exemple dans le cas de musique vocale +(@rlearning{Ensemble vocal}) ou d'@emph{ossias}. + +@cindex ossia + +@findex alignAboveContext +@findex alignBelowContext + +@lilypond[quote,ragged-right] +ossia = { f4 f f f } +\score{ + \relative c' \new Staff = "main" { + c4 c c c + << + \new Staff \with { alignAboveContext = #"main" } \ossia + { d8 f d f d f d f } + >> + } +} +@end lilypond + + +@node En quoi consiste la référence des propriétés internes +@section En quoi consiste la référence des propriétés internes +@translationof Explaining the Internals Reference + + +@menu +* Navigation dans les références du programme:: +* Interfaces de rendu:: +* Détermination de la propriété d'un objet graphique (grob):: +* Conventions de nommage:: +@end menu + +@node Navigation dans les références du programme +@subsection Navigation dans les références du programme +@translationof Navigating the program reference + +Comment, par exemple, déplacer le doigté dans le fragment suivant@tie{}? + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Sur la page de la documentation relative aux doigtés, c'est-à-dire +@ref{Doigtés}, se trouve l'indication suivante@tie{}: + + +@seealso +Référence des propriétés internes : +@rinternals{Fingering}. + + +@c outdated info; probably will delete. +@ignore +This fragment points to two parts of the program reference: a page +on @code{FingerEvent} and one on @code{Fingering}. + +The page on @code{FingerEvent} describes the properties of the music +expression for the input @code{-2}. The page contains many links +forward. For example, it says + +@quotation +Accepted by: @rinternals{Fingering_engraver}, +@end quotation + +@noindent +That link brings us to the documentation for the Engraver, the +plug-in, which says + +@quotation +This engraver creates the following layout objects: @rinternals{Fingering}. +@end quotation + +In other words, once the @code{FingerEvent}s are interpreted, the +@code{Fingering_engraver} plug-in will process them. +@end ignore + +@ignore +@c I can't figure out what this is supposed to mean. -gp + +The @code{Fingering_engraver} is also listed to create +@rinternals{Fingering} objects, + +@c old info? it doesn't make any sense to me with our current docs. +This is also the +second bit of information listed under @b{See also} in the Notation +manual. +@end ignore + +@ifnothtml +Ladite référence est disponible au format HTML, ce qui rend la +navigation bien plus aisée. Il est possible soit de la lire en ligne, +soit de la télécharger dans ce format. La démarche présentée ici sera +plus difficile à comprendre dans un document au format PDF. +@end ifnothtml + +Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page, +on peut lire + +@quotation +Fingering objects are created by: @rinternals{Fingering_engraver} and +@rinternals{New_fingering_engraver}. +@end quotation + +En d'autres termes, @emph{Les indications de doigtés} +(@code{Fingering} en anglais) @emph{sont créées par les graveurs +@rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.} + +En suivant derechef les liens propres à la référence du programme, on +suit en fait le cheminement qui aboutit à la création de la +partition@tie{}: + +@itemize @bullet + +@item @rinternals{Fingering}: +@rinternals{Fingering} objects are created by: +@rinternals{Fingering_engraver} + +@item @rinternals{Fingering_engraver}: +Music types accepted: @rinternals{fingering-event} + +@item @rinternals{fingering-event}: +Music event type @code{fingering-event} is in Music expressions named +@rinternals{FingeringEvent} +@end itemize + +Ce cheminement se produit, bien sûr, en sens inverse@tie{}: nous sommes +ici partis du résultat, et avons abouti aux évènements (en anglais +@emph{Events}) engendrés par le fichier d'entrée. L'inverse est +également possible@tie{}: on peut partir d'un évènement, et suivre le +cheminement de LilyPond qui aboutit à la création d'un ou plusieurs +objets graphiques. + +La référence des propriétés internes peut également se parcourir comme +un document normal. On y trouve des chapitres tels que +@ifhtml +@rinternals{Music definitions}, +@end ifhtml +@ifnothtml +@code{Music definitions} +@end ifnothtml +@rinternals{Translation}, ou encore @rinternals{Backend}. Chaque +chapitre recense toutes les définitions employées, et les propriétés +sujettes à ajustements. + +@c -- what about adding a link to the glossary here ? -vv +@ignore +La Référence du programme n'est pas traduite en français -- notamment du +fait qu'elle est en évolution constante, tout comme LilyPond. En +revanche, les termes musicaux font l'objet d'un +@commentfairelelien{glossaire} fort utile pour les utilisateurs francophones. +@end ignore + + +@node Interfaces de rendu +@subsection Interfaces de rendu +@translationof Layout interfaces + +@cindex interfaces de rendu +@cindex rendu, interfaces de +@cindex objets graphiques + +Tous les éléments de notation sont considérés comme des objets +graphiques (en anglais @emph{Graphical Object}, d'où le diminutif +@emph{Grob}). Chaque objet est doté d'un certain nombre de propriétés +(l'épaisseur du trait, l'orientation, etc.), et lié à d'autres objets. +Le fonctionnement de ces objets est décrit en détail dans +@rinternals{grob-interface}. + +Prenons l'exemple des doigtés (en anglais @emph{Fingering}). La page +@code{Fingering} de la Référence des propriétés internes établit une +liste de définitions propres à ce type d'objet@tie{}: + +@quotation +@code{padding} (dimension, in staff space): + +@code{0.5} +@end quotation + +@noindent +Ce qui signifie que les doigtés doivent être maintenus à une certaine +distance (@emph{padding}) des notes@tie{}: 0,5 unités @emph{staff-space} +(espace de portée). + +Chaque objet peut avoir plusieurs attributs, en tant qu'élément +typographique ou musical. Ainsi, un doigté (objet @emph{Fingering}) +possède les attributs suivants@tie{}: + + +@itemize @bullet +@item +Sa taille ne dépend pas de l'espacement horizontal, contrairement aux +liaisons ou ligatures. + +@item +C'est du texte -- un texte vraiment court, certes. + +@item +Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou +ligatures. + +@item +Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le +centre de la note. + +@item +Sur l'axe vertical, le symbole doit être proche de la note et de la +portée. + +@item +Sur l'axe vertical encore, il doit également s'ordonner avec les +éventuels autres symboles, ponctuations, ou éléments textuels. +@end itemize + +Faire appliquer ces différents attributs est le rôle des +@emph{interfaces}, que l'on trouve en bas de la page +@rinternals{Fingering}. + +@quotation +This object supports the following interfaces: +@rinternals{item-interface}, +@rinternals{self-alignment-interface}, +@rinternals{side-position-interface}, @rinternals{text-interface}, +@rinternals{text-script-interface}, @rinternals{font-interface}, +@rinternals{finger-interface}, and @rinternals{grob-interface}. +@end quotation + +@noindent +En français, + +@quotation +Cet objet admet les interfaces suivantes@tie{}: +@end quotation + +Suit la liste des interfaces en question, présentées comme autant de +liens, qui conduisent sur les pages dédiées à chacune d'entre elles. +Chaque interface est dotée d'un certain nombre de propriétés, dont +certaines peuvent être modifiées, et d'autres non (les @emph{Internal +properties}, ou propriétés internes). + +Pour aller encore plus loin, plutôt que de simplement parler de l'objet +@code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller +explorer son âme même, dans les fichiers source de LilyPond (voir +@rlearning{Autres sources de documentation}), en l'occurence le fichier +@file{scm/define-grobs.scm}@tie{}: + +@example +(Fingering + . ((padding . 0.5) + (avoid-slur . around) + (slur-padding . 0.2) + (staff-padding . 0.5) + (self-alignment-X . 0) + (self-alignment-Y . 0) + (script-priority . 100) + (stencil . ,ly:text-interface::print) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaText) + (font-size . -5) ; don't overlap when next to heads. + (meta . ((class . Item) + (interfaces . (finger-interface + font-interface + text-script-interface + text-interface + side-position-interface + self-alignment-interface + item-interface)))))) +@end example + +@noindent +@dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus +qu'un amas de variables et de réglages. La page de la Référence du +programme est en fait directement engendrée par cette définition. + + +@node Détermination de la propriété d'un objet graphique (grob) +@subsection Détermination de la propriété d'un objet graphique (grob) +@translationof Determining the grob property + + +Nous voulions changer la position du chiffre @b{2} dans le fragment +suivant@tie{}: + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Dans la mesure où le @b{2} est placé, verticalement, à proximité de la +note qui lui correspond, nous allons devoir trouver l'interface en +charge de ce placement, qui se trouve être +@code{side-position-interface}. Sur la page de cette interface, on peut +lire@tie{}: + +@quotation +@code{side-position-interface} + +Position a victim object (this one) next to other objects (the +support). The property @code{direction} signifies where to put the +victim object relative to the support (left or right, up or down?) +@end quotation + +@noindent +Ce qui signifie +@quotation +@code{side-position-interface} + +Placer l'objet affecté à proximité d'autres objets. La propriété +@code{direction} indique où placer l'objet (à droite ou à gauche, +en haut ou en bas). +@end quotation + +@cindex padding +@noindent +En-dessous de cette description se trouve décrite la variable +@code{padding}@tie{}: + +@quotation +@table @code +@item padding +(dimension, in staff space) + +Add this much extra space between objects that are next to each other. +@end table +@end quotation + +@noindent +Ce qui signifie +@quotation +Ajouter tel espace supplémentaire entre des objets proches les uns des +autres. +@end quotation + +@noindent +En augmentant la valeur de @code{padding}, on peut donc éloigner le +doigté de la note. La commande suivante insère trois unités d'espace +vide entre la note et le doigté@tie{}: + +@example +\once \override Voice.Fingering #'padding = #3 +@end example + +En ajoutant cette commande avant la création du doigté (de l'objet +@code{Fingering}), donc avant @code{c2}, on obtient le résultat +suivant@tie{}: + +@lilypond[quote,relative=2,verbatim] +\once \override Voice.Fingering #'padding = #3 +c-2 +\stemUp +f +@end lilypond + + +Dans le cas présent, le réglage intervient dans le contexte @code{Voice}, +ce qui pouvait également se déduire de la Référence du programme, où la +page du graveur @rinternals{Fingering_engraver} indique@tie{}: + +@quotation +Fingering_engraver is part of contexts: @dots{} @rinternals{Voice} +@end quotation + +@noindent +Ce qui signifie +@quotation +Le graveur Fingering_engraver fait partie des contextes@tie{}: @dots{} +@rinternals{Voice} +@end quotation + + +@node Conventions de nommage +@subsection Conventions de nommage +@translationof Naming conventions + +@untranslated + + +@node Modification de propriétés +@section Modification de propriétés +@translationof Modifying properties + +@c TODO change the menu and subsection node names to use +@c backslash once the new macro to handle the refs +@c is available. Need to find and change all refs at +@c the same time. -td + +@menu +* Vue d'ensemble de la modification des propriétés:: +* La commande de fixation (set):: +* La commande de dérogation (override):: +* La commande d'affinage (tweak):: +* set ou override:: +* Modification de listes associatives:: +@end menu + +@node Vue d'ensemble de la modification des propriétés +@subsection Vue d'ensemble de la modification des propriétés +@translationof Overview of modifying properties + +@untranslated + + +@node La commande de fixation (set) +@subsection La commande @code{@bs{}set} +@translationof The set command + +@cindex propriétés +@funindex \set +@cindex modifier des propriétés + +Chaque contexte peut avoir plusieurs @emph{propriétés}, c'est-à-dire +des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à +la volée}, c'est-à-dire pendant que la compilation s'accomplit. C'est +là le rôle de la commande @code{\set}. + +@example +\set @var{contexte}.@var{propriété} = #@var{valeur} +@end example + +Ainsi@tie{}: +@lilypond[quote,verbatim,relative=2] +R1*2 +\set Score.skipBars = ##t +R1*2 +@end lilypond + +Cette commande permet de condenser les mesures vides de notes, en des +silences multimesures. Il s'agit d'un objet Scheme, auquel on attribue +la valeur booléenne @qq{vrai}, c'est-à-dire la lettre @code{#t} pour +@qq{True} en anglais. + +Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second +groupe de notes. + +Si l'argument @var{contexte} n'est pas spécifié, alors la propriété +cherchera à s'appliquer dans le contexte le plus restreint où elle est +employée@tie{}: le plus souvent @code{ChordNames}, @code{Voice}, ou +@code{Lyrics}. Dans l'exemple suivant, + +@lilypond[quote,verbatim,relative=2] +c8 c c c +\set autoBeaming = ##f +c8 c c c +@end lilypond + +@noindent +aucun argument @var{contexte} n'a été donné à la commande @code{\set}. +De ce fait, les ligatures automatiques sont désactivées dans le contexte +actuel, c'est-à-dire @rinternals{Voice}. Notez que le contexte le plus +restreint n'est pas toujours le bon, et peut ne pas contenir la +propriété qui vous intéresse@tie{}: ainsi, la propriété @code{skipBars}, +évoquée plus haut, ne relève pas du contexte @code{Voice}, et le code +suivant ne fonctionnera pas. + +@lilypond[quote,verbatim,relative=2] +R1*2 +\set skipBars = ##t +R1*2 +@end lilypond + +Les contextes s'organisent de façon hiérarchique@tie{}: aussi, lorsqu'un +contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la +propriété sera modifée dans tous les contextes inférieurs (tous les +contextes @code{Voice}, par exemple) qu'il contient. + +@funindex \unset + +La commande @code{\unset} permet d'annuler la définition d'une +propriété@tie{}: + +@example +\unset @var{contexte}.@var{propriété} +@end example + +@noindent +si et seulement si cette propriété à été définie dans ce @var{contexte} +précis@tie{}; ainsi, + +@example +\set Staff.autoBeaming = ##f +@end example + +@noindent +même s'il s'applique à tous les contextes @code{Voice} contenus dans le +contexte @code{Staff}, ne peut être annulé au niveau @code{Voice}. Le +code suivant sera sans effet. + +@example +\unset Voice.autoBeaming +@end example + +@noindent +En d'autres termes, la commande @code{\unset} doit impérativement être +accompagnée du même contexte que la commande @code{\set} d'origine. +Pour annuler l'effet, dans notre exemple, de +@w{@code{Staff.autoBeaming@tie{}=@tie{}##f}}, il faut donc entrer@tie{}: + +@example +\unset Staff.autoBeaming +@end example + +Si l'on se trouve dans le contexte le plus restreint, il n'est pas +obligatoire, là encore, de spécifier le @var{contexte}. Ainsi, les deux +lignes suivantes sont équivalentes. + +@example +\set Voice.autoBeaming = ##t +\set autoBeaming = ##t +@end example + +@cindex \once + +Pour modifier une propriété de façon à ce qu'elle ne s'applique qu'une +seule fois, il convient d'employer la commande @code{\once}@tie{}: + +@lilypond[quote,verbatim,relative=2] +c4 +\once \set fontSize = #4.7 +c4 +c4 +@end lilypond + +Ici le changement de taille est annulé aussitôt après la note concernée. + +La référence du programme contient une description exhaustive de toutes +les propriétés contexte par contexte@tie{}: voir +@ifhtml +@rinternals{Tunable context properties}. +@end ifhtml +@ifnothtml +Translation @expansion{} Tunable context properties. +@end ifnothtml + + +@node La commande de dérogation (override) +@subsection La commande @code{@bs{}override} +@translationof The override command + + +La commande @code{\override} permet de modifier la mise en page +en détail. Examinons son utilisation concrètementet dans les détails. +La syntaxe de cette commande ressemble généralement à@tie{}: + +@example +\override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur} +@end example + +La propriété @var{propriété} de l'objet @var{objet}, appartenant au +contexte @var{contexte}, se voit ainsi attribuer la valeur @var{valeur}. + + +@c deprecated node. Delete. --fv +@c @n ode Élaboration d'une retouche +@c @s ubsection Élaboration d'une retouche +@c @t ranslationof Constructing a tweak +@ignore +Les commandes permettant de modifier l'apparence de la partition +ressemblent en général à + +@example +\override Voice.Stem #'thickness = #3.0 +@end example + +@noindent +Pour élaborer un réglage de ce type, on a besoin de connaître +précisément@tie{}: + +@itemize +@item le contexte@tie{}: ici @code{Voice} (la voix). +@item l'objet à affecter@tie{}: ici @code{Stem} (les hampes). +@item la propriété à modifier@tie{}: ici @code{thickness} (l'épaisseur +du trait). +@item la valeur désirée@tie{}: ici @code{3.0} (par défaut, elle est de +1.3). +@end itemize + +Certaines @q{sous-propriétés} sont parfois contenues dans une propriété. +La commande devient alors@tie{}: + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + +@cindex documentation exhaustive +@cindex trouver des objets graphiques +@cindex objets graphiques, description +@cindex régler +@funindex \override + +Pour bien des propriétés, quel que soit le type de valeur requise, +attribuer la valeur @q{faux} (@code{##f} en Scheme) reviendra à +désactiver complètement l'action de la propriété qui se trouve ainsi +purement ignorée par LilyPond. Cela peut s'avérer fort utile pour des +propriétés causant des désagréments. + +@end ignore + + +@node La commande d'affinage (tweak) +@subsection La commande @code{@bs{}tweak} +@translationof The tweak command + + +@funindex \tweak + +Dans certains cas, on peut passer par un raccourci pour arranger les +objets graphiques. Lorsqu'un objet est directement engendré par un +élément distinct du fichier source, on peut utiliser la commande +@code{\tweak}. + +Dans l'accord suivant, les notes sont modifiées une par une@tie{}: + +@lilypond[relative=2,verbatim,ragged-right] +< + c + \tweak #'color #red d + g + \tweak #'duration-log #1 a +>4-\tweak #'padding #10 -. +@end lilypond + +Comme on peut le voir, les propriétés sont ici modifiées directement +en même temps que les objets sont saisis. Il n'est plus besoin de +spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel +cela doit s'appliquer. Ce procédé ne marche que pour des objets +directement liés aux évènements (@rinternals{Event}) du fichier source. +Par exemple@tie{}: + +@itemize @bullet +@item Les têtes de notes au sein d'un accord, qui sont directement +engendrées par les hauteurs indiquées + +@item Les signes d'articulation, engendrés par les indications de +ponctuation. +@end itemize + +En revanche, les hampes ou les altérations sont engendrées par les têtes +de notes, et non par des évènements dans le fichier source. De même +pour les clés, qui ne sont pas directement engendrées par le fichier +source, mais plutôt par le changement d'une propriété interne. + +En fait, très peu d'objets passent @emph{directement} du code source à +la partition. Une note toute simple, par exemple @code{c4}, fait l'objet +d'un traitement et n'est donc pas directement rendue@tie{}; c'est +pourquoi le code suivant ne sera d'aucun effet@tie{}: + +@example +\tweak #'color #red c4 +@end example + +@noindent +Voir pour plus de détails +@rextendnamed{Displaying music expressions,Affichage d'expressions musicales}. + + +@node set ou override +@subsection @code{\set} ou @code{\override} +@translationof set versus override + + +Si les propriétés peuvent être modifiées de deux façons, par les +commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de +propriétés. + +Les contextes peuvent avoir des propriétés, dont les noms commencent par +une minuscule puis comprennent une ou plusieurs majuscules (de style +@code{totoTutu}). Elles ont surtout trait à la notation des éléments +musicaux@tie{}: par exemple, @code{localKeySignature} permet de choisir +s'il faut ou non imprimer une altération, ou @code{measurePosition} +permet de choisir quand il faut imprimer une barre de mesure. Ces +propriétés de contextes sont appelées à changer au long de +l'interprétation de la partition@tie{}: @code{measurePosition} en est un +exemple évident. Ces propriétés doivent être modifiées avec la commande +@code{\set}. + +Il existe un type particulier de propriété@tie{}@tie{}: les descriptions +d'éléments. Ces propriétés, dont les noms commencent par une majuscule, +puis comprennent une ou plusieurs majuscules (de style @code{TotoTata}), +contiennent les réglages @qq{par défaut} pour les objets graphiques. +Ces réglages sont sous forme de liste Scheme@tie{}; on peut les +consulter dans le fichier @file{scm/define-grobs.scm}. + +Les descriptions d'éléments doivent être modifiées avec la commande +@code{\override}. + +@code{\override} est en fait un raccourci@tie{}: + +@example +\override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur} +@end example + +@noindent +est plus ou moins l'équivalent de + +@c leave this long line -gp +@example +\set @var{contexte}.@var{objet} #'@var{propriété} = #(cons (cons '@var{propriété} @var{valeur}) >} +@tab ajouter des portées +@tab +@lilypond[relative=1] +<< \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } + \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } >> +@end lilypond + + +@item @code{c-> c-.} +@tab indications d'articulation +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c-> c-. +@end lilypond + + +@item @code{c2\mf c\sfz} +@tab nuances +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c2\mf c\sfz +@end lilypond + + +@item @code{a\< a a\!} +@tab crescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\< a a\! +@end lilypond + +@item @code{a\> a a\!} +@tab decrescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\> a a\! +@end lilypond + + +@item @code{< >} +@tab accords +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible + +@end lilypond + + +@item @code{\partial 8} +@tab levées, anacrouses +@tab +@lilypond[relative=2] +\partial 8 +f8 c2 d e +@end lilypond + + +@item @code{\times 2/3 @{f g a@}} +@tab triolets +@tab +@lilypond[relative=1] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\times 2/3 { f8 g a } +@end lilypond + + +@item @code{\grace} +@tab appogiatures +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Voice { \grace b16 c4 } +@end lilypond + +@item @code{\lyricmode @{ twinkle @}} +@tab ajouter des paroles +@tab +twinkle + + +@item @code{\new Lyrics} +@tab imprimer les paroles +@tab +@lilypond[relative=1] +\new Lyrics \lyricmode { twinkle } +@end lilypond + +@item @code{twin -- kle} +@tab diviser un mot en plusieurs syllabes +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +<< + { g'1 g } + \new Lyrics \lyricsto "" { twin -- kle } +>> +@end lilypond + +@item @code{\chordmode @{ c:dim f:maj7 @}} +@tab accords chiffrés +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\chordmode { c:dim f:maj7 } +@end lilypond + +@item @code{\context ChordNames} +@tab imprimer les chiffrages d'accords +@tab +@lilypond[relative=2] +\chords { c:dim f:maj7 } +@end lilypond + +@item @code{<<@{e f@} \\ @{c d@}>>} +@tab polyphonie +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Staff <<{e f} \\ {c d}>> +@end lilypond + + +@item @code{s4 s8 s16} +@tab silences invisibles +@tab + +@end multitable diff --git a/Documentation/fr/notation/chords.itely b/Documentation/fr/notation/chords.itely new file mode 100644 index 0000000000..1a13551611 --- /dev/null +++ b/Documentation/fr/notation/chords.itely @@ -0,0 +1,665 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 3f4496001441e0b1b27d7bc5395c4520f4f2088c + + 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" + +@c Translators: Valentin Villenave +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + +@node Notation des accords +@section Notation des accords +@translationof Chord notation + +@untranslated + +@menu +* Mode accords:: +* Gravure des accords:: +* Basse chiffrée:: +@end menu + +@node Mode accords +@subsection Mode accords +@translationof Chord mode + +@untranslated + +@menu +* Généralités sur le mode accords:: +* Accords courants:: +* Extensions et altération d'accords:: +@end menu + +@c This material comes from 'Entering chord names' -FV +@node Généralités sur le mode accords +@unnumberedsubsubsec Généralités sur le mode accords +@translationof Chord mode overview + +@cindex accords, chiffrage jazz + +LilyPond permet de désigner les accords par leur chiffrage jazz. +S'il est possible d'entrer un accord sous sa forme musicale, avec +@code{<@dots{}>}, on peut aussi le saisir par son nom. Le logiciel +traite les accords comme des ensembles de hauteurs, donc les accords +peuvent être transposés. + +@lilypond[quote,ragged-right,verbatim] +twoWays = \transpose c c' { + \chordmode { + c1 f:sus4 bes/f + } + + + +} + +<< \new ChordNames \twoWays + \new Voice \twoWays >> +@end lilypond + +Cet exemple montre également que les jeux d'instructions qui permettent +à LilyPond d'imprimer des accords ne cherchent pas à se montrer +intelligents. Ici, le dernier accord n'est pas interprété comme étant +renversé. + +Notez bien que la valeur rythmique des accords doit être indiquée +@emph{à l'extérieur} des symboles @code{<>}. + +@example +2 +@end example + +@c This material comes from 'Chords mode' -FV +@node Accords courants +@unnumberedsubsubsec Accords courants +@translationof Common chords + +Dans le mode accords, introduit par la commande @code{\chordmode}, les +accords ne sont indiqués que par leur note fondamentale. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { es4. d8 c2 } +@end lilypond + +@cindex saisir des accords +@cindex mode accords + +On peut cependant obtenir des accords différents, en utilisant le +caractère deux points (@code{:}). + +@lilypond[quote,verbatim] +\chordmode { e1:m e1:7 e1:m7 } +@end lilypond + +Le nombre accolé à la note fondamentale est considéré comme chiffrage +jazz de l'accord, qui est de ce fait construit par un empilement de +tierces. Notez l'exception que constitue @code{c:13} dans lequel la +onzième est délibérément omise. + +@lilypond[quote,verbatim] +\chordmode { c:3 c:5 c:6 c:7 c:8 c:9 c:10 c:11 c:13 } +@end lilypond + +@cindex note fondamentale +@cindex notes ajoutées +@cindex accords incomplets + +Des accords encore plus complexes peuvent être élaborés en plusieurs +étapes séparées. Ainsi, on peut enrichir l'accord par des notes +ajoutées, que l'on indique après le chiffrage principal et que l'on +sépare par des points@tie{}: + +@lilypond[quote,verbatim] +\chordmode { c:5.6 c:3.7.8 c:3.6.13 } +@end lilypond + +On peut augmenter ou diminuer certains intervalles au moyen des +signes @code{-} ou @code{+}@tie{}: + +@lilypond[quote,verbatim] +\chordmode { c:7+ c:5+.3- c:3-.5-.7- } +@end lilypond + +On peut aussi enlever certaines notes de l'accord, en les spécifiant +après un signe @code{^} -- les notes ajoutées doivent être indiquées +@emph{avant} les notes à enlever. + +@lilypond[quote,verbatim] +\chordmode { c^3 c:7^5 c:9^3.5 } +@end lilypond + +Voici les différents chiffrages disponibles, en plus des nombres que +nous venons de voir@tie{}: + +@table @code +@item m +Accord mineur. Ce chiffrage minorise la tierce, et la septième s'il y +en a une. + +@item dim +Accord diminué. Ce chiffrage minorise la tierce, diminue la quinte et +la septième s'il y en a. + +@item aug +Accord augmenté. Ce chiffrage augmente la quinte. + +@item maj +Accord de septième majeure. Ce chiffrage majorise la septième s'il y +en a une (dans le cas d'un accord parfait, ce chiffrage est facultatif). + +@item sus +Accord de suspension. Ce chiffrage supprime la tierce, et y ajoute, +suivant que vous spécifiez @code{2} ou @code{4}, la seconde ou la +quarte. +@end table + +Il est bien sûr possible de mélanger ces chiffrages avec des notes +ajoutées. +@lilypond[quote,verbatim] + \chordmode { c:sus4 c:7sus4 c:dim7 c:m6 } +@end lilypond + +@cindex chiffrages des accords +@funindex aug +@funindex dim +@funindex maj +@funindex sus +@funindex m + +Dans la mesure où un accord de treizième majeure ne sonne pas très bien +avec la onzième, la onzième est enlevée automatiquement, à moins que +vous ne le spécifiez explicitement. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { c:13 c:13.11 c:m13 } +@end lilypond + +@funindex / + +Les accords peuvent être renversés ou combinés avec une note étrangère à +la basse, au moyen de @code{@var{accord}/}@var{note} +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1 c/g c/f } +@end lilypond +@funindex /+ + +Si la note de basse précisée appartient à l'accord, la doublure +supérieure sera supprimée. Pour l'éviter, utilisez la syntaxe +@code{/+}@var{note}. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1 c/+g c/+f } +@end lilypond + +Le mode accords est semblable à @code{\lyricmode} ou autre, c'est-à-dire +que la plupart des commandes sont encore disponibles@tie{}; ainsi, +@code{r} ou @code{\skip} peuvent servir à insérer des silences ou des +silences invisibles. De plus, les propriétés des objets peuvent être +ajustées ou modifiées. + +@knownissues + +Aucun nom de note ne peut être indiqué deux fois dans un accord. Ainsi, +dans l'accord suivant, seule la quinte augmentée est prise en compte, +car elle est indiquée en dernier@tie{}: + +@cindex agrégats +@lilypond[quote,ragged-right,verbatim] +\chordmode { c:5.5-.5+ } +@end lilypond + +@node Extensions et altération d'accords +@unnumberedsubsubsec Extensions et altération d'accords +@translationof Extended and altered chords + +@untranslated + +@node Gravure des accords +@subsection Gravure des accords +@translationof Displaying chords + +@untranslated + +@menu +* Impression des noms d'accord:: +* Personnalisation des noms d'accord:: +@end menu + +@node Impression des noms d'accord +@unnumberedsubsubsec Impression des noms d'accord +@translationof Printing chord names + +@cindex chiffrages d'accords +@cindex accords + +Les chiffrages d'accords sont liés au contexte +@rinternals{ChordNames}. Les accords peuvent être saisis soit au +moyen de la notation indiquée ci-dessus, soit directement avec les +symboles @code{<} et @code{>}. + +@lilypond[quote,verbatim,ragged-right] +harmonies = { + \chordmode {a1 b c} +} +<< + \new ChordNames \harmonies + \new Staff \harmonies +>> +@end lilypond + +Vous pouvez faire ressortir les chiffrages d'accords en assignant la +valeur vrai à la propriété @code{chordChanges} dans le contexte +@rinternals{ChordNames}. De cette façon, les chiffrages ne sont +imprimés qu'aux changements d'accord ou en début de ligne. + +@lilypond[quote,verbatim,ragged-right] +harmonies = \chordmode { + c1:m c:m \break c:m c:m d +} +<< + \new ChordNames { + \set chordChanges = ##t + \harmonies } + \new Staff \transpose c c' \harmonies +>> +@end lilypond + +Les exemples précédents montrent des chiffrages placés au-dessus de la +portée, mais ce n'est pas obligatoire@tie{}: les accords peuvent également +être imprimés séparément -- auquel cas vous aurez peut-être besoin +d'ajouter le @rinternals{Volta_engraver} et le +@rinternals{Bar_engraver} afin que les éventuelles barres de reprises +s'affichent correctement. + +@lilypond[ragged-right,verbatim] +\new ChordNames \with { + \override BarLine #'bar-extent = #'(-2 . 2) + \consists Bar_engraver + \consists "Volta_engraver" +} +\chordmode { \repeat volta 2 { + f1:maj7 f:7 bes:7 + c:maj7 +} \alternative { + es e +} +} +@end lilypond + +Le modèle par défaut des chiffrages d'accord est celui de Klaus Ignatzek +pour le jazz (cf. @ressay{Références bibliographiques}). Il s'agit +d'une notation anglo-saxonne@tie{}; cependant vous pouvez indiquer vos +chiffrages en notation française au moyen de la commande +@code{\frenchChords} (voir plus bas). + +Il est possible de créer votre propre modèle de chiffrages en +réglant les propriétés suivantes@tie{}: + +@table @code +@funindex chordNameExceptions +@item chordNameExceptions +C'est la liste des accords mis en forme de manière particulière. + +Cette liste d'exceptions s'indique de la façon suivante. +On commence par créer une expression musicale telle que +@example +@code{chExceptionMusic} = @{ 1 \markup @{ \super "7" "wahh" @} @} +@end example +puis on la transforme en liste d'exceptions au moyen du code +@example +(sequential-music-to-chord-exceptions chExceptionMusic #t) +@end example +Pour qu'elles soient effectives, on ajoute ces exceptions aux exceptions +par défaut définies dans @file{ly/chord-modifier-init.ly}@tie{}: +@example +(append + (sequential-music-to-chord-exceptions chExceptionMusic #t) + ignatzekExceptions) +@end example + +@cindex exceptions, chiffrage d'accords +@cindex chiffrage d'accords, exceptions +@cindex accords chiffrés, exceptions +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{chord-name-exceptions.ly} + +@funindex majorSevenSymbol +@item majorSevenSymbol +Cette propriété définit l'objet employé pour indiquer une septième +majeure. Les options prédéfinies sont @code{whiteTriangleMarkup} +(triangle blanc) et @code{blackTriangleMarkup} (triangle noir). + +@funindex chordNameSeparator +@item chordNameSeparator +Les différents termes d'un chiffrage jazz (par exemple les notes de +l'accord et la basse) sont habituellement séparés par une barre oblique. +La propriété @code{chordNameSeparator} permet d'indiquer un autre +séparateur, par exemple +@lilypond[quote,ragged-right,verbatim] +\new ChordNames \chordmode { + c:7sus4 + \set chordNameSeparator + = \markup { \typewriter "|" } + c:7sus4 +} +@end lilypond + +@funindex chordRootNamer +@item chordRootNamer +Dans les chiffrages d'accord jazz, la note fondamentale de chaque accord +est exprimée par une lettre capitale, parfois suivie d'une altération, +correspondant à la notation anglo-saxonne de la musique. Cette +propriété a pour valeur la fonction qui transforme la hauteur de la note +foncdamentale en nom de note@tie{}; c'est donc en assignant une nouvelle +fonction à cette propriété que l'on peut produire des noms de note +spéciaux, adaptés par exemple aux systèmes de notation d'autres pays. + +@funindex chordNoteNamer +@item chordNoteNamer +Lorsqu'un chiffrage mentionne une note ajoutée (par exemple la basse), +les règles utilisées sont par défaut celles définies par la propriété +@code{chordRootNamer} ci-dessus. Cependant, la propriété @code{chordNoteNamer} +permet de régler cet élément indépendamment, par exemple pour imprimer la basse +en caractères minuscules. + +@funindex chordPrefixSpacer +@item chordPrefixSpacer +Le petit @code{m} qui indique un accord mineur est, dans la notation +anglo-saxonne, attaché à la lettre de l'accord. Cependant il est +possible d'ajouter un espace en assignant la valeur vrai à la propriété +@code{chordPrefixSpacer}. Cet espace sera omis si une altération est +présente. + +@end table + +Les propriétés ci-dessus font l'objet de commandes prédéfinies +adaptées aux notations de différents pays@tie{}: @code{\germanChords} et +@code{\semiGermanChords} pour la notation allemande, +@code{\italianChords} pour la notation italienne et enfin +@code{\frenchChords} pour la notation française. + +@lilypondfile[ragged-right]{chord-names-languages.ly} + +@cindex Banter +@cindex jazz, chiffrages d'accords +@cindex accords jazz, chiffrage +LilyPond intègre également deux autres modèles de chiffrages@tie{}: une +notation Jazz alternative, et un modèle systématique appelé système +Banter. Pour la mise en œuvre de ces modèles, voir +@ref{Table des noms d'accord}. + + +@predefined +@funindex \germanChords +@code{\germanChords}, +@funindex \semiGermanChords +@code{\semiGermanChords}, +@funindex \italianChords +@code{\italianChords}, +@funindex \frenchChords +@code{\frenchChords}. +@endpredefined + + +@seealso +Morceaux choisis : +@rlsrnamed{Chords,Accords}. + +Fichiers internes : +@file{scm/chords-ignatzek.scm}, +@file{scm/chord-entry.scm}. + + +@knownissues + +Les chiffrages d'accords ne sont déterminés que par la succession des +hauteurs de notes. En d'autres termes, les accords inversés ne sont pas +reconnus, ni les notes ajoutées à la basse. C'est pourquoi les accords +saisis au moyen de la syntaxe @code{<@dots{}>} peuvent produire des +chiffrages étranges. + +@node Personnalisation des noms d'accord +@unnumberedsubsubsec Personnalisation des noms d'accord +@translationof Customizing chord names + +@untranslated + +@node Basse chiffrée +@subsection Basse chiffrée +@translationof Figured bass + +@untranslated + +@menu +* Introduction à la basse chiffrée:: +* Saisie de la basse chiffrée:: +* Gravure de la basse chiffrée:: +@end menu + +@c This material comes from 'Figured bass', needs redistribution by translator --FV +@node Introduction à la basse chiffrée +@unnumberedsubsubsec Introduction à la basse chiffrée +@translationof Introduction to figured bass + +@cindex basse continue +@cindex basse chiffrée + +@c TODO: musicological blurb about FB +@c librement adapté de +@c http://en.wikipedia.org/wiki/Basso_continuo#Basso_continuo +Les parties de basse continue étaient très répandues dans la musique +baroque et jusqu'à la fin du XVIIIe siècle. Comme son nom l'indique, le +@emph{continuo} constitue une partie à lui seul, qui se déroule tout au +long de l'œuvre pour en donner la structure harmonique. + +Les musiciens du @emph{continuo} jouent des claviers (clavecin, +orgue) ou de tout autre instrument pouvant réaliser des accords. Leur +partie est constituée d'une portée de basse aux notes agrémentées de +combinaisons de chiffres et signes indiquant le développement des +accords à jouer, ainsi que leur éventuel renversement. Cette notation +était avant tout un guide, invitant le musicien à improviser de +lui-même l'accompagnement. + +LilyPond gère la basse chiffrée. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice { \clef bass dis4 c d ais g fis} + \new FiguredBass \figuremode { + < 6 >4 < 7\+ >8 < 6+ [_!] > + < 6 >4 <6 5 [3+] > + < _ >4 < 6 5/>4 + } +>> +@end lilypond + +La gestion de la basse chiffrée se décompose en deux parties. Dans un +premier temps, le mode @code{\figuremode} permet de saisir les accords +sous forme chiffrée. Le contexte @rinternals{FiguredBass} s'occupera +ensuite de gérer les objets @rinternals{BassFigure}. + +En mode de saisie, un chiffrage est délimité par @code{<} et +@code{>}. La durée est indiquée après le @code{>}@tie{}: + +@example +<4 6> +@end example +@lilypond[quote,ragged-right] +\new FiguredBass +\figuremode { <4 6> } +@end lilypond + +Les altérations s'obtiennent en ajoutant aux chiffres les caractères +@code{-}, @code{!} ou @code{+}. Un signe plus s'obtient grâce à +@code{\+}, et une quinte ou septième diminuée par @code{5/} ou +@code{7/} respectivement. + +@example +<4- 6+ 7!> <5++> <3--> <7/> r <6\+ 5/> +@end example +@lilypond[quote,ragged-right] +\figures { <4- 6+ 7!> <5++> <3--> <7/> r <6\+ 5/> } +@end lilypond + +Le caractère @code{_} insère un espace, et l'on peut imprimer des +crochets avec @code{[} et @code{]}. Vous pouvez aussi ajouter des +chaînes de caractères ou des étiquettes --- cf. @ref{Text markup commands}. + +@example +<[4 6] 8 [_! 12] > <5 \markup @{ \number 6 \super (1) @} > +@end example +@lilypond[quote,ragged-right] +\new FiguredBass +\figuremode { < [4 6] 8 [_! 12] > < 5 \markup{ \tiny \number 6 \super (1)} > } +@end lilypond + +Lorsque des chiffrages se répètent, vous pouvez utiliser des lignes de +prolongation. + +@lilypond[verbatim,relative=1] +<< + \new Staff { + \clef bass + c4 c c + } + \figures { + \set useBassFigureExtenders = ##t + <4 6> <3 6> <3 7> + } +>> +@end lilypond + +@noindent +En pareil cas, la ligne de prolongation masquera toujours le chiffre +qu'elle rappelle dans le chiffrage suivant. + +Le contexte @code{FiguredBass} ne tient aucun compte de la ligne de +basse. Par conséquent, il vous faudra peut être insérer des chiffrages +supplémentaires pour imprimer les prolongations, ou utiliser des +@code{\!} pour les éviter, comme dans l'exemple suivant@tie{}: + +@lilypond[relative=1] +<< + \new Voice + \figures { + \set useBassFigureExtenders = ##t + <6 4->4. <6 4->16. <6 4->32 <5>8. r16 <6>8 <6\! 5-> + } + { + \clef bass + f16. g32 f16. g32 f16. g32 f16. g32 f8. es16 d8 es + } +>> +@end lilypond + +Lorsque vous utilisez des lignes de prolongation, les chiffres communs +seront verticalement alignés. Pour l'éviter, insérez un silence avec +@code{r} afin de réinitialiser l'alignement. Par exemple, saisissez + +@example + <4 6>8 r8 +@end example + +@noindent +au lieu de +@example + <4 6>4 +@end example + +On peut choisir d'impriemr les altérations et signes plus aussi bien +avant qu'après les chiffres, en réglant les propriétés +@code{figuredBassAlterationDirection} et +@code{figuredBassPlusDirection}. + +@lilypond + \figures { + <6\+> <5+> <6 4-> r + \set figuredBassAlterationDirection = #1 + <6\+> <5+> <6 4-> r + \set figuredBassPlusDirection = #1 + <6\+> <5+> <6 4-> r + \set figuredBassAlterationDirection = #-1 + <6\+> <5+> <6 4-> r + } +@end lilypond + +Bien que la gestion de la basse chiffrée ressemble beaucoup à celle +des accords, elle est beaucoup plus simpliste. Le mode +@code{\figuremode} ne fait que stocker des chiffres que le contexte +@rinternals{FiguredBass} se chargera d'imprimer tels quels. En +aucune manière ils ne sont transformés en son, et ils ne sont pas +rendus dans un fichier MIDI. + +En interne, ce code produit des étiquettes de texte que vous +pouvez formater à votre convenance grâce aux propriétés des +étiquettes. Par exemple, l'espacement vertical des chiffrages est +déterminé par la propriété @code{baseline-skip}. + +On peut également ajouter une basse chiffrée directement à un contexte +@code{Staff}. L'alignement vertical est alors automatiquement ajusté. + +@lilypond[ragged-right,quote] +<< + \new Staff = someUniqueName + \relative c'' { + c4 c'8 r8 c,4 c' + } + + %% send to existing Staff. + \context Staff = someUniqueName + \figuremode { + <4>4 <6 10>8 s8 + + \set Staff.useBassFigureExtenders = ##t + <4 6>4 <4 6> + } +>> +@end lilypond + +@commonprop + +Par défaut, les chiffres sont imprimés au-dessus de la portée. Pour les +imprimer dessous, ajoutez + +@example +\override Staff.BassFigureAlignmentPositioning #'direction = #DOWN +@end example + +@knownissues + +Si vous positionnez la basse chiffrée au dessus de la portée en ayant +recours aux lignes d'extension et @code{implicitBassFigures}, les lignes +peuvent se mélanger. Préserver l'ordre des prolongateurs peut s'avérer +impossible lorsque plusieurs chiffrages qui se chevauchent en possèdent. +Ce problème peut être contourné en jouant sur l'empilement, avec la +propriété @code{stacking-dir} de l'objet @code{BassFigureAlignment}. + + +@seealso +Référence des pripriétés internes : les objets +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket} et +@rinternals{BassFigureContinuation}, ainsi que le contexte +@rinternals{FiguredBass}. + + +@node Saisie de la basse chiffrée +@unnumberedsubsubsec Saisie de la basse chiffrée +@translationof Entering figured bass + +@untranslated + +@node Gravure de la basse chiffrée +@unnumberedsubsubsec Gravure de la basse chiffrée +@translationof Displaying figured bass + +@untranslated diff --git a/Documentation/fr/notation/editorial.itely b/Documentation/fr/notation/editorial.itely new file mode 100644 index 0000000000..58ed26b71e --- /dev/null +++ b/Documentation/fr/notation/editorial.itely @@ -0,0 +1,738 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Jean-Charles Malahieude + +@node Annotations éditoriales +@section Annotations éditoriales +@translationof Editorial annotations + +@lilypondfile[quote]{editorial-headword.ly} + +Ce chapitre traite de la manière de modifier l'apparence des notes dans +un but pédagogique ou d'analyse. + +@menu +* Dans la portée:: +* Hors de la portée:: +@end menu + + +@node Dans la portée +@subsection Dans la portée +@translationof Inside the staff + +Nous allons voir ici comment mettre en exergue certains éléments à +l'intérieur même de la portée. + +@menu +* Indication de la taille de fonte musicale:: +* Doigtés:: +* Dictée à trous:: +* Coloration d'objets:: +* Parenthèses:: +* Hampes:: +@end menu + +@node Indication de la taille de fonte musicale +@unnumberedsubsubsec Indication de la taille de fonte musicale +@translationof Selecting notation font size + +@cindex selection de la taille (notation) +@cindex notes, taille +@cindex taille des notes +@cindex têtes de note + +@funindex fontSize +@funindex font-size +@funindex magstep +@funindex \huge +@funindex \large +@funindex \normalsize +@funindex \small +@funindex \tiny +@funindex \teeny +@funindex huge +@funindex large +@funindex normalsize +@funindex small +@funindex tiny +@funindex teeny + + +Le plus sûr moyen de régler la taille de la police, quel que soit le +contexte, consiste à définir la propriété @code{fontSize}. +Ceci ne modifiera en rien la taille des différents symboles tels que +ligatures ou liaisons. + +@warning{En matière de taille des éléments textuels, référez-vous au +chapitre @ref{Sélection de la fonte et de la taille}.} + +@lilypond[verbatim,quote,relative=2] +\huge +c4.-> d8---3 +\large +c4.-> d8---3 +\normalsize +c4.-> d8---3 +\small +c4.-> d8---3 +\tiny +c4.-> d8---3 +\teeny +c4.-> d8---3 +@end lilypond + +En interne, la propriété @code{fontSize} d'un contexte aura pour effet +de définir la propriété @code{font-size} pour tous les objets de +rendu. La valeur de @code{font-size} est un entier représentant la +taille proportionnellement à la hauteur standard de la portée en +cours. Chaque incrément correspond à une augmentation d'environ +12@tie{}% de la taille de la police. Un pas de six aboutit exactement +au doublement de la taille. La fonction Scheme @code{magstep} +convertit le nombre affecté à @code{font-size} en facteur d'échelle. +Vous pouvez aussi définir directement la propriété @code{font-size} de +manière à n'affecter seulement que certains objets de rendu. + +@lilypond[verbatim,quote,relative=2] +\set fontSize = #3 +c4.-> d8---3 +\override NoteHead #'font-size = #-4 +c4.-> d8---3 +\override Script #'font-size = #2 +c4.-> d8---3 +\override Stem #'font-size = #-5 +c4.-> d8---3 +@end lilypond + +@cindex standard, taille des notes +@cindex notes, taille standard + +@funindex font-interface +@funindex font-size + +Pour changer la taille des caractères, LilyPond met à l'échelle la fonte +dont la taille est la plus proche de la taille voulue. La taille +standard (pour laquelle @w{@code{font-size = #0}}) dépend de la hauteur +de la portée. À une portée de 20@tie{}points correspond une police de +10@tie{}points. + +La propriété @code{font-size} ne peut intervenir que pour les objets +qui utilisent des polices, autrement dit ceux qui disposent de +l'interface de rendu @code{font-interface}. + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}. +@endpredefined + + +@seealso +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{font-interface}. + + +@node Doigtés +@unnumberedsubsubsec Doigtés +@translationof Fingering instructions + +@cindex doigté +@cindex substitution de doigt + +@funindex \finger +@funindex finger + +Les doigtés peuvent être indiqués comme suit@tie{}: +@var{note}-@var{chiffre_du_doigt} + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 e-3 +@end lilypond + +Pour les substitutions de doigts, on a recours à une indication +textuelle (commande @code{\markup}) de doigté +(commande @code{\finger}). + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } +@end lilypond + +@cindex pouce, doigté + +@funindex \thumb +@funindex thumb + +La commande @code{\thumb} peut être utilisée pour indiquer, par exemple +dans une partition de violoncelle, si une note doit être jouée avec le +pouce (@emph{thumb} en anglais). + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +@cindex doigtés des accords +@cindex accords, doigtés + +Les doigtés des accords peuvent être saisis note par note, +en les indiquant après chaque hauteur de note. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +Les indications de doigtés peuvent se placer au-dessus ou en dessous de +la portée -- voir @ref{Direction et positionnement} à ce sujet. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{avoiding-collisions-with-chord-fingerings.ly} + + +@seealso +Manuel de notation : +@ref{Direction et positionnement} + +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{FingeringEvent}, +@rinternals{fingering-event}, +@rinternals{Fingering_engraver}, +@rinternals{New_fingering_engraver}, +@rinternals{Fingering}. + + +@node Dictée à trous +@unnumberedsubsubsec Dictée à trous +@translationof Hidden notes + +@cindex masquées, notes +@cindex invisibles, notes +@cindex transparentes, notes +@cindex note invisible +@cindex note masquée + +@funindex \hideNotes +@funindex hideNotes +@funindex \unHideNotes +@funindex unHideNotes + +Les notes masquées -- ou invisibles ou encore transparentes -- sont +utiles dans le cadre d'exercices de théorie ou de composition. + +@lilypond[verbatim,quote,relative=2] +c4 d +\hideNotes +e4 f +\unHideNotes +g a +\hideNotes +b +\unHideNotes +c +@end lilypond + +Les objets de notation attachés à une note invisible ne seront pas +masqués pour autant. + +@lilypond[verbatim,quote,relative=2] +c4( d) +\hideNotes +e4(\p f)-- +@end lilypond + + +@predefined +@code{\hideNotes}, +@code{\unHideNotes}. +@endpredefined + + +@seealso +Manuel d'initiation : +@rlearning{Visibilité et couleur des objets}. + +Manuel de notation : +@ref{Silences invisibles}, +@ref{Visibilité des objets}, +@ref{Masquage de portées}. + +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{Note_spacing_engraver}, +@rinternals{NoteSpacing}. + + +@node Coloration d'objets +@unnumberedsubsubsec Coloration d'objets +@translationof Coloring objects + +@cindex objets en couleur +@cindex couleurs +@cindex colorisation d'objets +@cindex coloration d'objets +@cindex coloration de notes +@cindex colorisation de notes +@cindex notes en couleur +@cindex x11, couleurs +@cindex couleurs x11 + +@funindex color +@funindex \with-color +@funindex with-color +@funindex x11-color + +Des objets peuvent être colorisés individuellement. Une listes des +noms des couleurs disponibles se trouvent à l'annexe +@ref{Liste des couleurs}. + +@lilypond[verbatim,quote,relative=2] +\override NoteHead #'color = #red +c4 c +\override NoteHead #'color = #(x11-color 'LimeGreen) +d +\override Stem #'color = #blue +e +@end lilypond + +L'intégralité de la palette des couleurs définies pour X11 est +accessible par la fonction Scheme @code{x11-color}. Cette fonction +prend en argument une expression symbolique de la forme +@code{@var{'TaraTata}} ou bien une chaîne de caractères comme +@code{@var{"TaraTata"}}. La première formulation est à la fois plus +rapide à écrire et aussi plus efficace. Néanmoins, la deuxième forme +permet d'accéder aux noms composés des couleurs de X11. + +Lorsque la fonction @code{x11-color} ne trouve pas le paramètre fourni, +elle revient à la couleur par défaut, le noir. Le problème ressort de +façon évidente au vu de la partition finale. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +gis8 a +\override Beam #'color = #(x11-color "medium turquoise") +gis a +\override Accidental #'color = #(x11-color 'DarkRed) +gis a +\override NoteHead #'color = #(x11-color "LimeGreen") +gis a +% this is deliberate nonsense; note that the stems remain black +\override Stem #'color = #(x11-color 'Boggle) +b2 cis +@end lilypond + +@cindex rgb-color +@cindex couleur rgb +@cindex couleur rvb +@cindex rgb, couleur +@cindex rvb, couleur + +@funindex rgb-color + +Un autre moyen consiste à fournir à la fonction Scheme @code{rgb-color} +les composantes de la couleur exacte au format rouge-vert-bleu +(@emph{RGB}) -- chacune étant exprimée en en fraction de 256 (le 0.5 de +l'exemple suivant correspond à 128). + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +\override Stem #'color = #(rgb-color 0 0 0) +gis8 a +\override Stem #'color = #(rgb-color 1 1 1) +gis8 a +\override Stem #'color = #(rgb-color 0 0 0.5) +gis4 a +@end lilypond + + +@seealso +Manuel de notation : +@ref{Liste des couleurs}, +@ref{La commande d'affinage (tweak)}. + +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + + +@cindex x11, couleur +@cindex couleur, notes d'un accord +@cindex notes colorisées dans un accord +@cindex accords et couleur + +@funindex x11-color + +@knownissues +Une couleur x11 n'aura pas forcément le même rendu qu'une couleur +normale ayant un nom similaire. + +Les couleurs de X11 ne sont pas toutes perceptibles dans un navigateur +internet. Aussi nous vous recommandons, dans le cadre d'une +présentation multimedia, d'utiliser des couleurs de base @code{#blue}, +@code{#green}, @code{#red} -- bleu, vert, rouge. + + +Vous ne pouvez pas coloriser des notes à l'intérieur d'un accord avec +@code{\override}. Si besoin est, utilisez @code{\tweak}. +Pour plus de détails, consultez +@ref{La commande d'affinage (tweak)}. + + +@node Parenthèses +@unnumberedsubsubsec Parenthèses +@translationof Parentheses + +@cindex fantômes, notes +@cindex notes fantômes +@cindex parenthèses, notes entre + +@funindex \parenthesize +@funindex parenthesize + +Des objets peuvent être mis entre parenthèses en saisissant +@code{\parenthesize} juste avant l'événement musical. Si l'instruction +préfixe un accord, chaque note le composant se présentera entre +parenthèses. Vous pouvez aussi mettre individuellement entre +parenthèses les notes d'un accord. + +@lilypond[verbatim,quote,relative=2] +c2 \parenthesize d +c2 \parenthesize +c2 +@end lilypond + +Les objets autres que des notes peuvent aussi être entre parenthèses. +En ce qui concerne les articulations, l'instruction @code{\parenthesize} +doit cependant être précédée d'un tiret. + +@lilypond[verbatim,quote,relative=2] +c2-\parenthesize -. d +c2 \parenthesize r +@end lilypond + + +@seealso +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{Parenthesis_engraver}, +@rinternals{ParenthesesItem}, +@rinternals{parentheses-interface}. + + +@knownissues + +Lorsqu'un accord est mis entre parenthèses, celles-ci s'appliquent +individuellement à chacune des notes le composant, alors qu'on +attendrait une seule paire de parenthèses encadrant tout l'accord. + + +@node Hampes +@unnumberedsubsubsec Hampes +@translationof Stems + +@cindex hampes +@cindex hampes invisibles +@cindex visibilité des hampes +@cindex masquage des hampes + +@funindex \stemUp +@funindex stemUp +@funindex \stemDown +@funindex stemDown +@funindex \stemNeutral +@funindex stemNeutral +@cindex stem, direction +@cindex stem, up +@cindex stem, down +@cindex stem, neutral + +Dès qu'une note est rencontrée, un objet @code{Stem} se crée +automatiquement. Pour les rondes et les silences, ils sont aussi +créés, mais en mode invisible. + +L'orientation des hampes peut être définie manuellement -- voir +@ref{Direction et positionnement} à ce sujet. + + +@predefined +@code{\stemUp}, +@code{\stemDown}, +@code{\stemNeutral}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{default-direction-of-stems-on-the-center-line-of-the-staff.ly} + + +@seealso +Manuel de notation : +@ref{Direction et positionnement}. + +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{Stem_engraver}, +@rinternals{Stem}, +@rinternals{stem-interface}. + + +@node Hors de la portée +@subsection Hors de la portée +@translationof Outside the staff + +Nous allons nous intéresser ici à souligner des éléments inscrits dans +la portée par des éléments qui lui seront externes. + +@menu +* Info-bulle:: +* Quadrillage temporel:: +* Crochets d'analyse:: +@end menu + +@node Info-bulle +@unnumberedsubsubsec Info-bulle +@translationof Balloon help + +@cindex bulle +@cindex notation, explication +@cindex info-bulle + +@funindex \balloonGrobText +@funindex \balloonText +@funindex Balloon_engraver +@funindex balloonGrobText +@funindex balloonText +@funindex \balloonLengthOn +@funindex balloonLengthOn +@funindex \balloonLengthOff +@funindex balloonLengthOff + +Vous pouvez marquer et nommer des éléments de notation à l'aide de +bulles. L'objectif premier de cette fonctionnalité est d'expliquer la +notation. + +En voici un exemple : +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonGrobText #'Stem #'(3 . 4) \markup { "Je suis une hampe" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "Je suis un silence" } + r + 2. +} +@end lilypond + +Vous disposez de deux fonctions musicales, @code{balloonGrobText} et +@code{balloonText}. @code{balloonGrobText} prend en argument +l'objet graphique à agrémenter et s'utilise comme +@code{\once@tie{}\override}. @code{balloonText}, quant à lui, s'utilise +comme une simple articulation et fonctionne comme @code{\tweak} pour +attacher du texte à l'une des notes d'un accord. Les autres arguments +sont le décalage et le texte de la bulle. + +Les info-bulles ont une influence sur les espacements, que l'on peut +gérer ainsi@tie{}: + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonLengthOff + \balloonGrobText #'Stem #'(3 . 4) \markup { "Je suis une hampe" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "Je suis un silence" } + r + \balloonLengthOn + 2. +} +@end lilypond + + +@predefined +@code{\balloonLengthOn}, +@code{\balloonLengthOff}. +@endpredefined + + +@seealso +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{Balloon_engraver}, +@rinternals{BalloonTextItem}, +@rinternals{balloon-interface}. + + +@node Quadrillage temporel +@unnumberedsubsubsec Quadrillage temporel +@translationof Grid lines + +@cindex quadrillage temporel +@cindex temporel, quadrillage + +@funindex Grid_point_engraver +@funindex Grid_line_span_engraver +@funindex gridInterval + +Vous pouvez tracer des lignes entre les portées, synchronisées avec +les notes. + +LilyPond a recours à deux graveurs distincts afin d'afficher le +quadrillage@tie{}: le @code{Grid_point_engraver} se charge de +déterminer l'envergure du crochet, alors que le +@code{Grid_line_span_engraver} se consacrera au tracé des lignes. +Les lignes sont par défaut centrées horizontalement sous les notes et +alignées sur la gauche des têtes. La propriété @code{gridInterval} +spécifie quant à elle l'espace de temps entre chaque ligne. + +@c KEEP LY +@lilypond[verbatim,quote] +\layout { + \context { + \Staff + \consists "Grid_point_engraver" %% active les guides + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + %% centre les lignes guides horizontalement sous les notes + } +} + +\score { + \new ChoirStaff << + \new Staff \relative c'' { + \stemUp + c'4. d8 e8 f g4 + } + \new Staff \relative c { + %% centre les lignes guides verticalement + \clef bass + \stemDown + c4 g' f e + } + >> +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{grid-lines--changing-their-appearance.ly} + + +@seealso +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{Grid_line_span_engraver}, +@rinternals{Grid_point_engraver}, +@rinternals{GridLine}, +@rinternals{GridPoint}, +@rinternals{grid-line-interface}, +@rinternals{grid-point-interface}. + + +@node Crochets d'analyse +@unnumberedsubsubsec Crochets d'analyse +@translationof Analysis brackets + +@cindex crochets +@cindex crochets de phrasé +@cindex analyse musicologique +@cindex crochet de regroupement de notes + +@funindex Horizontal_bracket_engraver +@funindex \startGroup +@funindex startGroup +@funindex \stopGroup +@funindex stopGroup + +On utilise des crochets en analyse musicale, pour indiquer la +structure d'une pièce. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c2\startGroup + d\stopGroup +} +@end lilypond + +Les crochets d'analyses sont susceptibles d'être imbriqués@tie{}: + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c4\startGroup\startGroup + d4\stopGroup + e4\startGroup + d4\stopGroup\stopGroup +} +@end lilypond + + +@seealso +Morceaux choisis : +@rlsrnamed{Editorial annotations,Annotations éditoriales}. + +Référence des propriétés internes : +@rinternals{Horizontal_bracket_engraver}, +@rinternals{HorizontalBracket}, +@rinternals{horizontal-bracket-interface}, +@rinternals{Staff}. + diff --git a/Documentation/fr/notation/expressive.itely b/Documentation/fr/notation/expressive.itely new file mode 100644 index 0000000000..25db5c3efd --- /dev/null +++ b/Documentation/fr/notation/expressive.itely @@ -0,0 +1,1365 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + + +@node Signes d'interprétation +@section Signes d'interprétation +@translationof Expressive marks + +@lilypondfile[quote]{expressive-headword.ly} + +Ce chapitre traite des différentes indications d'interprétation que l'on +peut trouver sur les partitions. + +@menu +* Signes d'interprétation attachés à des notes:: +* Signes d'interprétation sous forme de courbe:: +* Signes d'interprétation sous forme de ligne:: +@end menu + + +@node Signes d'interprétation attachés à des notes +@subsection Signes d'interprétation attachés à des notes +@translationof Expressive marks attached to notes + +Nous allons voir au cours de ces lignes comment ajouter aux notes des +indications d'interprétation -- articulation, ornementation, nuance -- +et aborderons la manière de générer vos propres signes. + +@menu +* Articulations et ornements:: +* Nuances:: +* Personnalisation des indications de nuance:: +@end menu + +@node Articulations et ornements +@unnumberedsubsubsec Articulations et ornements +@translationof Articulations and ornamentations + +@cindex articulations +@cindex symboles d'ornementation +@cindex ornementation, symboles +@cindex accent +@cindex marcato +@cindex staccatissimo +@cindex espressivo +@cindex point d'orgue +@cindex point d'arrêt +@cindex staccato +@cindex portato +@cindex tenuto +@cindex coup d'archet +@cindex bouché +@cindex sourdine +@cindex orgue, marque de pédale +@cindex grupetto +@cindex ouvert +@cindex flageolet +@cindex trille +@cindex mordant +@cindex ornementation baroque +@cindex baroque, ornementation +@cindex pouce +@cindex segno +@cindex coda +@cindex varcoda + +@funindex \accent +@funindex \marcato +@funindex \staccatissimo +@funindex \espressivo +@funindex \staccato +@funindex \tenuto +@funindex \portato +@funindex \upbow +@funindex \downbow +@funindex \flageolet +@funindex \thumb +@funindex \lheel +@funindex \rheel +@funindex \ltoe +@funindex \rtoe +@funindex \open +@funindex \halfopen +@funindex \stopped +@funindex \snappizzicato +@funindex \turn +@funindex \reverseturn +@funindex \trill +@funindex \prall +@funindex \mordent +@funindex \prallprall +@funindex \prallmordent +@funindex \upprall +@funindex \downprall +@funindex \upmordent +@funindex \downmordent +@funindex \pralldown +@funindex \prallup +@funindex \lineprall +@funindex \signumcongruentiae +@funindex \shortfermata +@funindex \fermata +@funindex \longfermata +@funindex \verylongfermata +@funindex \fermataMarkup +@funindex \segno +@funindex \coda +@funindex \varcoda +@funindex - + +Les différents symboles qui indiquent des ponctuations ou des modes de +jeu différents s'ajoutent aux notes de la manière suivante@tie{}: + +@example +@var{note}\@var{nom} +@end example + +Les valeurs de @var{nom} sont répertoriées dans l'annexe +@ref{Liste des signes d'articulation}. En voici un exemple@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4\staccato c\mordent b2\turn +c1\fermata +@end lilypond + +@cindex marcato +@cindex tenuto +@cindex staccatissimo +@cindex accent +@cindex staccato +@cindex portato + +Certains signes d'articulation disposent d'un raccourci. On les ajoute +à chaque note au moyen d'un tiret suivi du caractère correspondant à +l'articulation désirée. C'est entre autres le cas pour +@notation{marcato}, @notation{stopped}, @notation{tenuto}, +@notation{staccatissimo}, @notation{accent}, @notation{staccato}, et +@notation{portato}, comme l'illustre l'exemple ci-dessous. + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +Même si LilyPond place automatiquement ces symboles, selon les règles +contenues dans le fichier @file{scm/script.scm}, il est possible de +l'obliger à les positionner au-dessus ou en-dessous de la note, comme +indiqué au chapitre @ref{Direction et positionnement}. + +Les articulations sont des objets de type @code{script}@tie{}; les +propriétés de ces objets sont abordées plus en détail au chapitre +@rinternals{Script}. + +Une articulation peut se rattacher aussi bien à un silence qu'à une +note, mais @strong{pas à un silence multi-mesures}. Il existe cependant +un cas particulier@tie{}: le point d'orgue -- ou point d'arrêt -- +attaché à un silence valant l'intégralité de la mesure. LilyPond +dispose à cet effet de la commande @code{\fermataMarkup}, qui créera un +objet @code{MultiMeasureRestText} rattaché à ce @qq{silence +multi-mesures}. + +@lilypond[verbatim,quote,relative=2] +\override Script #'color = #red +\override MultiMeasureRestText #'color = #blue +a2\fermata r\fermata +R1\fermataMarkup +@end lilypond + +En dehors des articulations habituelles, vous pouvez adjoindre du texte +-- avec ou sans mise en forme -- à n'importe quelle note. Voir à ce +propos @ref{Commentaires textuels}. + +Pour plus d'information sur la manière d'ordonner @code{Scripts} et +@code{TextScripts}, consultez le chapitre +@rlearning{Positionnement des objets}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{modifying-default-values-for-articulation-shorthand-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-vertical-ordering-of-scripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-a-delayed-turn.ly} + +@seealso +Glossaire musicologique : +@rglos{tenuto}, +@rglos{accent}, +@rglos{staccato}, +@rglos{portato}. + +Manuel d'initiation : +@rlearning{Positionnement des objets}. + +Manuel de notation : +@ref{Commentaires textuels}, +@ref{Direction et positionnement}, +@ref{Liste des signes d'articulation}, +@ref{Trilles}. + +Fichiers installés : +@file{scm/script.scm}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{Script}, +@rinternals{TextScript}. + + +@node Nuances +@unnumberedsubsubsec Nuances +@translationof Dynamics + +@cindex nuances + +@funindex \ppppp +@funindex ppppp +@funindex \pppp +@funindex pppp +@funindex \ppp +@funindex ppp +@funindex \pp +@funindex pp +@funindex \p +@funindex p +@funindex \mp +@funindex mp +@funindex \mf +@funindex mf +@funindex \f +@funindex f +@funindex \ff +@funindex ff +@funindex \fff +@funindex fff +@funindex \ffff +@funindex ffff +@funindex \fffff +@funindex fffff +@funindex \fp +@funindex fp +@funindex \sf +@funindex sf +@funindex \sff +@funindex sff +@funindex \sp +@funindex sp +@funindex \spp +@funindex spp +@funindex \sfz +@funindex sfz +@funindex \rfz +@funindex rfz + +À chaque nuance absolue correspond une commande qui peut être indiquée +après une note@tie{}: @code{c4\ff} par exemple. Les commandes de nuance +disponibles sont @code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, +@code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, +@code{\ffff}, @code{\fffff}, @code{\fp}, @code{\sf}, @code{\sff}, +@code{\sp}, @code{\spp}, @code{\sfz}, et @code{\rfz}. Les nuances se +placent aussi bien en dessous qu'au-dessus de la portée@tie{}; pour plus +d'information, consultez @ref{Direction et positionnement}. + +@lilypond[verbatim,quote,relative=2] +c2\ppp c\mp +c2\rfz c^\mf +c2_\spp c^\ff +@end lilypond + +@cindex soufflet +@cindex crescendo +@cindex decrescendo +@cindex diminuendo + +@funindex \< +@funindex \> +@funindex \! +@funindex \cr +@funindex cr +@funindex \decr +@funindex decr + +Un crescendo est délimité par @code{\<} et @code{\!}, ou peut se +terminer par une commande de nuance explicite, ou bien un decrescendo ou +un nouveau crescendo. Il en va de même pour un diminuendo. Au lieu de +@code{\<} et @code{\>}, vous pouvez utiliser @code{\cr} et @code{\decr}, +auquel cas LilyPond n'imprimera pas de soufflet (@emph{hairpin} en +anglais). + +@lilypond[verbatim,quote,relative=2] +c2\< c\! +d2\< d\f +e2\< e\> +f2\> f\! +e2\> e\mp +d2\> d\> +c1\! +@end lilypond + +Un soufflet terminé par un simple @code{\!} prendra fin sur la droite de +la tête de note à laquelle il est attaché. Dans le cas où il se termine +par l'intervention d'un autre soufflet (contraire ou non), il prendra +fin au milieu de la tête de note affublée d'un @code{\<} ou d'un +@code{\>}, et le nouveau soufflet débutera à l'extrémité droite de cette +même tête de note. + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\< a | c4 a c\! a\< | c4 a c a\! +@end lilypond + +Il en va de même lorsqu'un soufflet est interrompu par une nuance +explicite. Notez bien que la largeur occupée par cette nuance explicite +influe sur la terminaison du soufflet@tie{}: + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\mf a | c1\< | c4 a c\ffff a +@end lilypond + +@cindex nuances successives sur une note tenue +@cindex tenue et nuances successives + +Les indications de nuance sont attachées aux notes@tie{}; aussi, lorsque +l'on veut faire se succéder plusieurs nuances pendant une note tenue, il +faudra avoir recours à des silences invisibles@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4\< c\! d\> e\! +<< f1 { s4 s4\< s4\> s4\! } >> +@end lilypond + +@cindex espressivo + +@funindex \espressivo +@funindex espressivo + +On peut avoir recours à l'indication @code{\espressivo} pour indiquer un +crescendo suivi d'un decrescendo sur une même note. Gardez à l'esprit +qu'il s'agit d'une articulation, et en aucun cas d'une nuance. + +@lilypond[verbatim,quote,relative=2] +c2 b4 a +g1\espressivo +@end lilypond + +@funindex \cresc +@funindex cresc +@funindex \decresc +@funindex decresc +@funindex \dim +@funindex dim + +La commande @code{\cresc} permet d'indiquer textuellement le début d'un +crescendo. @code{\decresc} ou @code{\dim} marquent le début d'un +decrescendo. Les lignes d'extension sont gérées automatiquement. + +@lilypond[verbatim,quote,relative=2] +g8\cresc a b c b c d e\mf | +f8\decresc e d c e\> d c b | +a1\dim ~ | +a2. r4\! | +@end lilypond + +@funindex \crescTextCresc +@funindex crescTextCresc +@funindex \dimTextDecresc +@funindex dimTextDecresc +@funindex \dimTextDecr +@funindex dimTextDecr +@funindex \dimTextDim +@funindex dimTextDim +@funindex \crescHairpin +@funindex crescHairpin +@funindex \dimHairpin +@funindex dimHairpin + +Une indication textuelle peut indiquer, au lieu d'un soufflet, un +changement de nuance@tie{}: + +@lilypond[verbatim,quote,relative=2] +\crescTextCresc +c4\< d e f\! | +\dimTextDecresc +g4\> e d c\! | +\dimTextDecr +e4\> d c b\! | +\dimTextDim +d4\> c b a\! | +\crescHairpin +\dimHairpin +c4\< d\! e\> d\! | +@end lilypond + +Pour créer des indications de nuance qui restent alignées +avec les nuances habituelles, reportez-vous au chapitre +@ref{Personnalisation des indications de nuance}. + +@cindex dynamics, vertical positioning +@cindex vertical positioning of dynamics + +@funindex DynamicLineSpanner + + +Le positionnement vertical des nuances est géré par le +@rinternals{DynamicLineSpanner}. +@funindex \dynamicUp +@funindex dynamicUp +@funindex \dynamicDown +@funindex dynamicDown +@funindex \dynamicNeutral +@funindex dynamicNeutral + +L'utilisation d'un contexte @code{Dynamics} permet de graver les nuances +sur leur propre ligne -- Il suffit de placer des silences invisibles +pour gérer le temps. Bien que le contexte @code{Dynamics} accepte des +notes pour indiquer les durées, celles-ci ne seront pas imprimées. Le +contexte @code{Dynamics} peut aussi contenir des indications textuelles +avec ou sans extenseur, ainsi que les indications de pédale. + +@lilypond[verbatim,quote] +<< + \new Staff \relative c' { + c2 d4 e | + c4 e e,2 | + g'4 a g a | + c1 | + } + \new Dynamics { + s1\< | + s1\f | + s2\dim s2-"rit." | + s1\p | + } +>> +@end lilypond + +@predefined +@code{\dynamicUp}, +@code{\dynamicDown}, +@code{\dynamicNeutral}, +@code{\crescTextCresc}, +@code{\dimTextDim}, +@code{\dimTextDecr}, +@code{\dimTextDecresc}, +@code{\crescHairpin}, +@code{\dimHairpin}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-hairpin-behavior-at-bar-lines.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-minimum-length-of-hairpins.ly} + +@cindex al niente +@cindex niente, al + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-hairpins-using-al-niente-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligned-dynamics-and-textscripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{hiding-the-extender-line-for-text-dynamics.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-text-and-spanner-styles-for-text-dynamics.ly} + + +@seealso +Glossaire musicologique : +@rglos{al niente}, +@rglos{crescendo}, +@rglos{decrescendo}, +@rglosnamed{hairpin,soufflet}. + +Manuel d'initiation : +@rlearning{Articulations et nuances}. + +Manuel de notation : +@ref{Direction et positionnement}, +@ref{Personnalisation des indications de nuance}, +@ref{Contenu de la sortie MIDI}, +@ref{Gestion des nuances en MIDI}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{DynamicText}, +@rinternals{Hairpin}, +@rinternals{DynamicLineSpanner}, +@rinternals{Dynamics}. + + +@node Personnalisation des indications de nuance +@unnumberedsubsubsec Personnalisation des indications de nuance +@translationof New dynamic marks + +@cindex indication de nuance, personnalisation +@cindex nuances personnalisées + +La manière la plus simple de personnaliser une indication de nuance +consiste à utiliser un objet @code{\markup}. + +@lilypond[verbatim,quote] +moltoF = \markup { molto \dynamic f } + +\relative c' { + 16_\moltoF + 2.. +} +@end lilypond + +@cindex nuances éditoriales +@cindex nuances entre parenthèses +@cindex nuances suggérées + +@funindex \bracket +@funindex bracket +@funindex \dynamic +@funindex dynamic + +Vous pouvez créer des indications de nuance éditoriales (entre +parenthèses ou crochets) grâce aux étiquettes (@emph{mode +markup})@tie{}; la syntaxe en est abordée au chapitre +@ref{Mise en forme du texte}. + +@lilypond[verbatim,quote] +roundF = \markup { + \center-align \concat { \bold { \italic ( } + \dynamic f \bold { \italic ) } } } +boxF = \markup { \bracket { \dynamic f } } +\relative c' { + c1_\roundF + c1_\boxF +} +@end lilypond + +@cindex make-dynamic-script + +@funindex make-dynamic-script + +Grâce à la fonction @code{make-dynamic-script}, vous pouvez créer de +nouvelles marques textuelles que vous combinerez avec les signes de +nuance. + +@lilypond[verbatim,quote] +sfzp = #(make-dynamic-script "sfzp") +\relative c' { + c4 c c\sfzp c +} +@end lilypond + +@code{make-dynamic-script} accepte en argument tout objet de type +@emph{markup}. Notez bien que la police des nuances ne contient que les +caractères @code{f,m,p,r,s} et @code{z}, et que les marques de nuance +possèdent des propriétés particulières et prédéfinies quant à leur +police. Aussi, lorsque vous créez du texte en pareille situation, nous +vous recommandons d'utiliser @code{\normal-text} pour annuler ces +propriétés. L'intérêt majeur de recourrir à la fonction +@code{make-dynamic-script} plutôt qu'à un simple @emph{markup} réside +dans l'assurance que ces objets personnalisés et les soufflets seront +alignés lorsqu'attachés à une même note. + +@lilypond[verbatim,quote] +roundF = \markup { \center-align \concat { + \normal-text { \bold { \italic ( } } + \dynamic f + \normal-text { \bold { \italic ) } } } } +boxF = \markup { \bracket { \dynamic f } } +mfEspress = \markup { \center-align \line { + \hspace #3.7 mf \normal-text \italic espress. } } +roundFdynamic = #(make-dynamic-script roundF) +boxFdynamic = #(make-dynamic-script boxF) +mfEspressDynamic = #(make-dynamic-script mfEspress) +\relative c' { + c4_\roundFdynamic\< d e f + g,1~_\boxFdynamic\> + g + g'~\mfEspressDynamic + g +} +@end lilypond + +La constrution d'une indication de nuance personnalisée peut aussi se +faire en langage Scheme@tie{}; voir +@rextendnamed{Markup construction in Scheme,Construction Scheme d'un marqueur} +pour en connaître les modalités. + +@lilypond[verbatim,quote] +moltoF = #(make-dynamic-script + (markup #:normal-text "molto" + #:dynamic "f")) +\relative c' { + 16 + 2..\moltoF +} +@end lilypond + +L'utilisation des fontes en mode @emph{markup} est abordée au chapitre +@ref{Sélection de la fonte et de la taille}. + + +@seealso +Manuel de notation : +@ref{Mise en forme du texte}, +@ref{Sélection de la fonte et de la taille}, +@ref{Contenu de la sortie MIDI}, +@ref{Gestion des nuances en MIDI}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Manuel d'extension : +@rextendnamed{Markup construction in Scheme,Construction Scheme d'un marqueur}. + + +@node Signes d'interprétation sous forme de courbe +@subsection Signes d'interprétation sous forme de courbe +@translationof Expressive marks as curves + +@cindex courbes + +Ce chapitre traite des signes d'interprétation imprimés sous forme de +courbe@tie{}: liaisons d'articulation ou de phrasé, respirations, chutes +et sauts. + +@menu +* Liaisons d'articulation:: +* Liaisons de phrasé:: +* Signes de respiration:: +* Chutes et sauts:: +@end menu + +@node Liaisons d'articulation +@unnumberedsubsubsec Liaisons d'articulation +@translationof Slurs + +@cindex legato +@cindex liaison d'articulation + +Une liaison d'articulation indique que les notes doivent être jouées +liées, ou @emph{legato}. Ces liaisons s'indiquent au moyen de +parenthèses. + +@warning{Lorsque la musique est polyphonique, la liaison doît se +terminer dans la voix où elle a été entamée.} + +@lilypond[verbatim,quote,relative=2] +f4( g a) a8 b( +a4 g2 f4) +2( 2) +@end lilypond + +@cindex liaison, orientation manuelle +@cindex liaison, au-dessous des notes +@cindex liaison, au-dessus des notes + +@funindex \slurDown +@funindex slurDown +@funindex \slurNeutral +@funindex slurNeutral + +Vous pouvez décider de l'orientation des liaisons par rapport à la +portée, comme indiqué au chapitre @ref{Direction et positionnement}. + +@cindex articulation, liaison +@cindex liaisons d'articulation multiples +@cindex liaisons d'articulation simultanées +@cindex multiples, liaisons d'articulation +@cindex simultanées, liaisons d'articulation + +Une seule liaison d'articulation peut être imprimée à la fois. S'il est +nécessaire d'imprimer une liaison plus longue, englobant des liaisons +plus courtes, utilisez des @ref{Liaisons de phrasé}. + +@cindex liaison, style de trait +@cindex liaison, trait plein +@cindex liaison, trait pointillé +@cindex liaison, tirets +@cindex plein, trait de liaison +@cindex pointillé, trait de liaison +@cindex tiret, trait de liaison +@cindex style de trait, liaison + +@funindex \slurDashed +@funindex slurDashed +@funindex \slurDotted +@funindex slurDotted +@funindex \slurSolid +@funindex slurSolid + +Une liaison est par défaut dessinée d'un trait plein. Il est aussi +possible de l'imprimer sous la forme de tirets ou en pointillé@tie{}: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashed +g4( e c2) +\slurDotted +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurHalfDashed +@funindex slurHalfDashed +@funindex \slurHalfSolid +@funindex slurHalfSolid + +@cindex liaison, tirets et trait continu + +En utilisant @code{\slurHalfDashed}, la première moitié de la liaison +aura un trait discontinu et continu pour la seconde. L'inverse +s'obtient avec @code{\slurHalfSolid}. + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurHalfDashed +g4( e c2) +\slurHalfSolid +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurDashPattern +@funindex slurDashPattern + +@cindex liaison, densité des tirets + +Vous pouvez même personnaliser la densité des tirets d'une +liaison@tie{}: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashPattern #0.7 #0.75 +g4( e c2) +\slurDashPattern #0.5 #2.0 +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + + + +@funindex \slurUp +@funindex slurUp + + +@predefined +@code{\slurUp}, +@code{\slurDown}, +@code{\slurNeutral}, +@code{\slurDashed}, +@code{\slurDotted}, +@code{\slurHalfDashed}, +@code{\slurHalfSolid}, +@code{\slurDashPattern}, +@code{\slurSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-double-slurs-for-legato-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-text-markups-inside-slurs.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-slurs-with-complex-dash-structure.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{slur,liaison}. + +Manuel d'initiation : +@rlearning{Non-imbrication des crochets et liaisons}. + +Manuel de notation : +@ref{Direction et positionnement}, +@ref{Liaisons de phrasé}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{Slur}. + + +@node Liaisons de phrasé +@unnumberedsubsubsec Liaisons de phrasé +@translationof Phrasing slurs + +@cindex liaisons de phrasé +@cindex phrasé, liaisons de + +@funindex \( +@funindex \) + +Une liaison de phrasé relie plusieurs notes en délimitant une phrase +musicale. On indique les points de départ et d'arrivée avec @code{\(} +et @code{\)} respectivement. + +@lilypond[verbatim,quote,relative=2] +c4\( d( e) f( +e2) d\) +@end lilypond + +@funindex \phrasingSlurUp +@funindex phrasingSlurUp +@funindex \phrasingSlurDown +@funindex phrasingSlurDown +@funindex \phrasingSlurNeutral +@funindex phrasingSlurNeutral + +D'un point de vue typographique, rien ne distingue une liaison de phrasé +d'une liaison d'articulation. Cependant, LilyPond les considère comme +des objets différents. Une commande @code{\slurUp} n'affectera donc pas +une liaison de phrasé. Vous pouvez décider de l'orientation des +liaisons de phrasé par rapport à la portée, comme indiqué au chapitre +@ref{Direction et positionnement}. + +@cindex liaisons de phrasé multiples +@cindex liaisons de phrasé simultanées +@cindex multiples, liaisons de phrasé +@cindex simultanées, liaisons de phrasé + +Il n'est pas possible d'avoir plusieurs liaisons de phrasé en même temps. + +@cindex liaison, style de trait +@cindex liaison, trait plein +@cindex liaison, trait pointillé +@cindex liaison, tirets +@cindex plein, trait de liaison +@cindex pointillé, trait de liaison +@cindex tiret, trait de liaison +@cindex style de trait, liaison + +@funindex phrasingSlurDashed +@funindex \phrasingSlurDashed +@funindex \phrasingSlurDotted +@funindex phrasingSlurDotted +@funindex \phrasingSlurSolid +@funindex phrasingSlurSolid + +Une liaison est par défaut dessinée d'un trait plein. Il est aussi +possible de l'imprimer sous la forme de tirets ou en pointillé@tie{}: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashed +g4\( e c2\) +\phrasingSlurDotted +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@cindex liaison, tirets et trait continu + +@funindex phrasingSlurHalfDashed +@funindex \phrasingSlurHalfDashed +@funindex \phrasingSlurHalfSolid +@funindex phrasingSlurHalfSolid + +En utilisant @code{\phrasingslurHalfDashed}, la première moitié de la +liaison aura un trait discontinu et continu pour la seconde. L'inverse +s'obtient avec @code{\phrasingslurHalfSolid}. + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurHalfDashed +g4\( e c2\) +\phrasingSlurHalfSolid +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex \phrasingSlurDashPattern +@funindex phrasingSlurDashPattern + +@cindex liaison, densité des tirets + +Vous pouvez même personnaliser la densité des tirets d'une liaison@tie{}: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashPattern #0.7 #0.75 +g4\( e c2\) +\phrasingSlurDashPattern #0.5 #2.0 +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +La personnalisation des lignes discontinues est identique pour les +liaisons de phrasé et les liaisons d'articulation. Pour plus de +détails, référez-vous aux morceaux choisis de la section +@ref{Liaisons d'articulation}. + +@predefined +@code{\phrasingSlurUp}, +@code{\phrasingSlurDown}, +@code{\phrasingSlurNeutral}, +@code{\phrasingSlurDashed}, +@code{\phrasingSlurDotted}, +@code{\phrasingSlurHalfDashed}, +@code{\phrasingSlurHalfSolid}, +@code{\phrasingSlurDashPattern}, +@code{\phrasingSlurSolid}. +@endpredefined + + +@seealso +Manuel d'initiation : +@rlearning{Non-imbrication des crochets et liaisons}. + +Manuel de notation : +@ref{Direction et positionnement}, +@ref{Liaisons d'articulation}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{PhrasingSlur}. + + + +@node Signes de respiration +@unnumberedsubsubsec Signes de respiration +@translationof Breath marks + +@cindex respiration, indication +@cindex point d'arrêt + +@funindex \breathe +@funindex breathe + +Les indications de respiration sont indiquées par la commande +@code{\breathe}. + +@lilypond[verbatim,quote,relative=2] +c2. \breathe d4 +@end lilypond + +Un signe de respiration interrompt obligatoirement les ligatures, même +automatiques. Pour passer outre ce fonctionnement, voir +@ref{Barres de ligature manuelles}. + +@lilypond[verbatim,quote,relative=2] +c8 \breathe d e f g2 +@end lilypond + +LilyPond gère les @emph{divisiones}, signes utilisés en notation +ancienne pour indiquer les respirations. Pour de plus amples détails, +voir @ref{Divisions}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-breath-mark-symbol.ly} + +@cindex césure + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{inserting-a-caesura.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{caesura,césure}. + +Manuel de notation : +@ref{Divisions}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{BreathingEvent}, +@rinternals{BreathingSign}, +@rinternals{Breathing_sign_engraver}. + + +@node Chutes et sauts +@unnumberedsubsubsec Chutes et sauts +@translationof Falls and doits + +@cindex chutes +@cindex sauts + +@funindex \bendAfter +@funindex bendAfter + +Des indications de désinence peuvent être obtenues au moyen de la +commande @code{\bendAfter}. Leur direction s'indique au moyen des +signes plus (vers le haut) ou moins (vers le bas). Le chiffre indique +l'intervalle avec la note de départ. + +@lilypond[verbatim,quote,relative=2] +c2-\bendAfter #+4 +c2-\bendAfter #-4 +c2-\bendAfter #+6.5 +c2-\bendAfter #-6.5 +c2-\bendAfter #+8 +c2-\bendAfter #-8 +@end lilypond + +Lorsque vous saisissez des chutes ou des sauts, @strong{n'oubliez pas} +le tiret (@code{-}) qui précède la commande @code{\bendAfter}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adjusting-the-shape-of-falls-and-doits.ly} + + +@seealso +Glossaire musical : +@rglosnamed{fall,chute}, +@rglosnamed{doit,saut}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + + +@node Signes d'interprétation sous forme de ligne +@subsection Signes d'interprétation sous forme de ligne +@translationof Expressive marks as lines + +@cindex lignes + +Cette partie traite de la manière de générer des signes d'interprétation +d'aspect linéaire, tels les glissandos, arpèges et trilles. + +@menu +* Glissando:: +* Arpèges:: +* Trilles:: +@end menu + +@node Glissando +@unnumberedsubsubsec Glissando +@translationof Glissando + +@cindex glissando + +@funindex \glissando +@funindex glissando + +Un glissando relie une hauteur à une autre en passant par chaque hauteur +intermédiaire. On l'obtient en accolant la commande @code{\glissando} à +la première note. + +@lilypond[verbatim,quote,relative=2] +g2\glissando g' +c2\glissando c, +@end lilypond + +Un glissando est indiqué graphiquement, par une ligne ou des +vaguelettes -- voir @ref{Styles de ligne}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{contemporary-glissando.ly} + + +@seealso +Glossaire musicologique : +@rglos{glissando}. + +Manuel de notation : +@ref{Styles de ligne}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{Glissando}. + + +@knownissues + +Il n'est pas possible d'imprimer un texte (tel que @notation{gliss.}) +le long de la ligne de glissando. + + +@node Arpèges +@unnumberedsubsubsec Arpèges +@translationof Arpeggio + +@cindex arpège +@cindex accord arpégé + +@funindex \arpeggio +@funindex arpeggio +@funindex \arpeggioArrowUp +@funindex arpeggioArrowUp +@funindex \arpeggioArrowDown +@funindex arpeggioArrowDown +@funindex \arpeggioNormal +@funindex arpeggioNormal + +On peut indiquer qu'un accord doit être arpégé en lui accolant la +commande @code{\arpeggio}@tie{}: + +@lilypond[verbatim,quote,relative=1] +1\arpeggio +@end lilypond + +LilyPond dispose de différents graphismes pour indiquer un arpège@tie{}; +@code{\arpeggioNormal} reviendra au style par défaut. + +@lilypond[verbatim,quote,relative=1] +2\arpeggio + +\arpeggioArrowUp +2\arpeggio + +\arpeggioArrowDown +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +@cindex arpège, symboles spéciaux + +@funindex \arpeggioBracket +@funindex arpeggioBracket +@funindex \arpeggioParenthesis +@funindex arpeggioParenthesis +@funindex \arpeggioParenthesisDashed +@funindex arpeggioParenthesisDashed + +Des crochets indiquent que l'accord devra être plaqué et non +arpégé@tie{}: + +@lilypond[verbatim,quote,relative=1] +2 + +\arpeggioBracket +2\arpeggio + +\arpeggioParenthesis +2\arpeggio + +\arpeggioParenthesisDashed +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +Les indications d'arpeggio peuvent se présenter sous la forme de ligne +discontinue à l'aide de la propriété @code{'dash-details}. Pour plus +de détails à ce propos, consultez @ref{Liaisons d'articulation}. + +Un arpège peut parfois s'écrire de manière explicite, à l'aide de +liaisons de tenue. Pour plus d'information, voir +@ref{Liaisons de prolongation}. + + +@predefined +@code{\arpeggio}, +@code{\arpeggioArrowUp}, +@code{\arpeggioArrowDown}, +@code{\arpeggioNormal}, +@code{\arpeggioBracket}, +@code{\arpeggioParenthesis} +@code{\arpeggioParenthesisDashed}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-a-piano-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-other-contexts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-arpeggios-across-notes-in-different-voices.ly} + + +@seealso +Glossaire musicologique : +@rglos{arpeggio}. + +Manuel de notation : +@ref{Liaisons d'articulation}, +@ref{Liaisons de prolongation}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{Arpeggio}, +@rinternals{Slur}, +@rinternals{PianoStaff}. + + +@knownissues + +@cindex arpège, style parenthèse + +Il est impossible de mêler au même instant, dans un contexte +@code{PianoStaff}, des lignes d'arpèges connectées et d'autres +non connectées. + +Il n'est pas possible d'imprimer des lignes d'arpège connectées sous +forme de parenthèse. + + +@node Trilles +@unnumberedsubsubsec Trilles +@translationof Trills + +@cindex trilles + +@funindex \trill +@funindex trill +@funindex \startTrillSpan +@funindex startTrillSpan +@funindex \stopTrillSpan +@funindex stopTrillSpan + +Les trilles brefs s'indiquent comme n'importe quelle ponctuation, avec +un simple @code{\trill}@tie{}; voir @ref{Articulations et ornements}. + + +Les trilles plus longs sont délimités par @code{\startTrillSpan} et +@code{\stopTrillSpan}@tie{}: + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +c2\stopTrillSpan r2 +@end lilypond + +Lorsqu'un saut de ligne intervient alors qu'une prolongation de trille +est présente, l'indication de trille et sa prolongation sont rappellées +sur la première note de la nouvelle ligne@tie{}: + +@lilypond[ragged-right,verbatim,quote,relative=2] +d1\startTrillSpan +\break +d1 +c2\stopTrillSpan r2 +@end lilypond + +Lorsque des trilles interviennent sur une succession de hauteurs +différentes, point n'est besoin d'expliciter la commande +@code{\stopTrillSpan} puisque l'apparition d'un nouveau trille +interrompt de fait celui qui le précédait@tie{}: + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +b1\startTrillSpan +d2\stopTrillSpan r2 +@end lilypond + +Dans l'exemple suivant, un trille se combine avec des notes d'ornement. +La syntaxe d'une telle construction ainsi que le moyen de positionner +les notes d'ornement avec précision est expliquée au chapitre +@ref{Notes d'ornement}. + +@lilypond[verbatim,quote,relative=2] +d1~\afterGrace +d1\startTrillSpan { c32[ d]\stopTrillSpan } +e2 r2 +@end lilypond + +@cindex trilles avec hauteur explicite + +@funindex \pitchedTrill +@funindex pitchedTrill + +Les trilles qui font intervenir une hauteur précise peuvent être +indiqués par la commande @code{pitchedTrill}. Le premier argument est +la note réelle@tie{}; le second est une hauteur qui sera imprimée comme +une tête de note noire entre parenthèses. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +e2\startTrillSpan fis +d2 c2\stopTrillSpan +@end lilypond + +@cindex trilles avec hauteur explicite et altération +@cindex altération, trilles avec hauteur explicite + +Dans l'exemple suivant, le second trille de la deuxième mesure est +ambigu -- le fa qui est forcé n'est pas diésé. Pour lever toute +ambiguïté, il suffit de forcer l'impression de l'altération en +ajoutant un @code{!} à la note considérée. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan cis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis! +eis4\stopTrillSpan +@end lilypond + + +@predefined +@code{\startTrillSpan}, +@code{\stopTrillSpan}. +@endpredefined + + +@seealso +Glossaire musicologique : +@rglosnamed{trill,trille}. + +Manuel de notation : +@ref{Articulations et ornements}, +@ref{Notes d'ornement}. + +Morceaux choisis : +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{TrillSpanner}. + diff --git a/Documentation/fr/notation/fretted-strings.itely b/Documentation/fr/notation/fretted-strings.itely new file mode 100644 index 0000000000..cf663fcee4 --- /dev/null +++ b/Documentation/fr/notation/fretted-strings.itely @@ -0,0 +1,1535 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 3f4496001441e0b1b27d7bc5395c4520f4f2088c + + 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" + +@c Translators: Matthieu Jacquot +@c Translation checkers: Jean-Charles Malahieude + +@node Instruments à cordes frettées +@section Instruments à cordes frettées +@translationof Fretted string instruments + +@lilypondfile[quote]{fretted-headword.ly} + +Cette section traite de différents aspects de la notation propre aux +instruments à cordes frettées. + +@cindex tablature +@cindex guitare, tablature pour +@cindex banjo, tablature pour +@cindex tablature pour guitare +@cindex tablature pour banjo + +@menu +* Vue d'ensemble des cordes frettées:: +* Guitare:: +* Banjo:: +@end menu + +@node Vue d'ensemble des cordes frettées +@subsection Vue d'ensemble des cordes frettées +@translationof Common notation for fretted strings + +Vue d'ensemble de la notation pour les instruments à cordes frettées. + +@menu +* Références en matière de cordes frettées:: +* Indications du numéro de corde:: +* Tablatures par défaut:: +* Tablatures personnalisées:: +* Tablatures sous forme d'étiquette:: +* Tablatures prédéfinies:: +* Tablatures automatiques:: +* Doigtés pour la main droite:: +@end menu + +@node Références en matière de cordes frettées +@unnumberedsubsubsec Références en matière de cordes frettées +@translationof References for fretted strings + +La musique pour instruments à cordes frettées est généralement notée sur +une seule portée, en notation traditionnelle ou en tablature, les deux +étant parfois combinées. Il est aussi courant en musique populaire +d'utiliser des diagrammes d'accord au-dessus de la portée +traditionnelle. La guitare et le banjo sont des instruments +transpositeurs, sonnant une octave au-dessous de ce qui est écrit. Les +partitions pour ces instruments utilisent donc la clé de sol ottava +bassa @code{"treble_8"}. Vous pourrez trouver ailleurs dans la +documentation d'autres éléments aussi utilisés par les instruments à +cordes frettées@tie{}: + +@itemize +@item Les doigtés s'obtiennent comme indiqué au chapitre +@ref{Doigtés}. + +@item En plus des @notation{Laissez vibrer}, les liaisons peuvent +intervenir sur des accords arpégés ou des trémolos. Reportez-vous au +chapitre @ref{Liaisons de prolongation}. + +@item Des indications quant au support polyphonique se trouvent au +chapitre @ref{Résolution des collisions}. + +@item La notation des sons harmoniques se trouve à la section +@ref{Harmoniques}. + +@end itemize + + +@seealso +Manuel de notation : +@ref{Doigtés}, +@ref{Liaisons de prolongation}, +@ref{Résolution des collisions}, +@ref{Noms d'instrument}, +@ref{Saisie de musique en parallèle}, +@ref{Arpèges}, +@ref{Liste des signes d'articulation}, +@ref{Clefs}. + + +@node Indications du numéro de corde +@unnumberedsubsubsec Indications du numéro de corde +@translationof String number indications + +@cindex cordes numérotées +@cindex numéro de corde +@cindex numéros de corde et doigtés +@cindex doigtés et numéros de corde + +Une corde sur laquelle une note doit être jouée peut être indiquée +en attachant @code{\@var{numéro}} à cette note prise dans une +construction de type accord @code{<>}. + +@warning{Les numéros de cordes @strong{doivent} être définis dans une +construction de type accord même s'il n'y a qu'une seule note.} + +@lilypond[verbatim,quote,relative=0] +\clef "treble_8" +4 2 +1 +@end lilypond + +Quand les indications de doigté et de numéro de corde sont attachées à +une même note, leur positionnement se fera en fonction de l'ordre dans +lequel ils apparaissent dans le code@tie{}: + + +@lilypond[verbatim,quote,relative=1] +\clef "treble_8" +2 + +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + + +@seealso +Manuel de notation : +@ref{Doigtés}. + +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Référence des propriétés internes : +@rinternals{StringNumber}, +@rinternals{Fingering}. + + +@node Tablatures par défaut +@unnumberedsubsubsec Tablatures par défaut +@translationof Default tablatures + +@cindex tablatures, bases +@cindex tablatures par défaut + +@funindex TabStaff +@funindex TabVoice + +La notation en tablature est utilisée pour certains instruments à cordes +pincées. Les hauteurs n'y sont pas indiquées par des têtes de note, +mais par des chiffres ou autres symboles, qui indiquent sur quelle +corde, et à quelle case chaque note doit être jouée. Dans certaines +limites, LilyPond vous permet d'écrire des tablatures. + +Chaque numéro de corde associé à une note doit être précédé d'une barre +oblique inverse (ou @qq{antislash}) suivi d'un nombre. Par défaut, la +première corde est la plus aiguë, et les cordes suivent l'accordage +traditionnel d'une guitare (à six cordes). Les notes sont imprimées +sous forme de tablature, dans les contextes @code{TabStaff} et +@code{TabVoice}. + +@lilypond[quote,ragged-right,fragment,verbatim] +\new TabStaff \relative c' { + a,8 a' a + d, a' a +} +@end lilypond + +Par défaut, les tablatures ne comportent aucune marque de durée ni de +symbole musical tel que des nuances. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c ~ c2\! + c'2.\prall\) +} + +\score { + << + \new Staff { \clef "G_8" \symbols } + \new TabStaff { \symbols } + >> +} +@end lilypond + +@funindex \tabFullNotation + +Pour obtenir les symboles de notation habituelle dans une tablature, il +faut appliquer la commande @code{\tabFullNotation} au contexte +@code{TabStaff}. Vous noterez par ailleurs que les blanches sont +affublées d'une double hampe afin de ne pas les confondre avec des +noires. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c ~ c2\! + c'2.\prall\) +} + +\score { + \new TabStaff { + \tabFullNotation + \symbols + } +} +@end lilypond + +@funindex minimumFret + +@cindex cases +@cindex frets + +Quand aucune corde n'est précisée, LilyPond choisit automatiquement la +corde pour laquelle la position est la moins élevée et qui donne un +numéro de case supérieur ou égal à la valeur de la propriété +@code{minimumFret}. La valeur par défaut de cette propriété est fixée à +0, ce qui correspond aux cordes à vide. + + +@lilypond[quote,ragged-right,verbatim] +\new StaffGroup << + \new Staff \relative c { + \clef "treble_8" + \time 2/4 + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + c,16 d e f g4 + } + \new TabStaff \relative c { + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + \set TabStaff.minimumFret = #5 + c,16 d e f g4 + } +>> +@end lilypond + +Lorsqu'un liaison de prolongation intervient lors d'un saut de ligne, la +note est répétée, entre parenthèses. Il en va de même pour la seconde +alternative d'une répétition. + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~\break + b1 \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@funindex \hideSplitTiedTabNotes + +La commande @code{\hideSplitTiedTabNotes} permet d'éviter d'imprimer +ces cases entre parenthèses. + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~\break + b1 \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \hideSplitTiedTabNotes + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@cindex harmoniques, indication en tablature +@cindex tablature et indication d'harmoniques +@cindex glissando, indication en tablature +@cindex tablature et glissando + +Les indications de sons harmoniques ainsi que les glissandi +peuvent être ajoutés aux tablatures. + + +@lilypond[fragment, verbatim, quote, relative=1] +\new TabStaff { + \new TabVoice { + d\2\glissando e\2 + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{stem-and-beam-behavior-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{polyphony-in-tablature.ly} + + +@seealso +Manuel de notation : +@ref{Hampes}. + +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Référence des propriétés internes : +@rinternals{TabNoteHead}, +@rinternals{TabStaff}, +@rinternals{TabVoice}, +@rinternals{Beam}. + + +@knownissues + +Les accords ne subissent aucun traitement particulier@tie{}; de ce fait, +la sélection automatique des cordes peut attribuer une même corde pour +deux notes différentes de l'accord. + +Afin que @code{\partcombine} fonctionne avec des tablatures, on doit +ajouter au contexte @code{TabStaff} des voix fantômes@tie{}: + +@lilypond[quote,ragged-right,verbatim] +melodia = \partcombine { e4 g g g }{ e4 e e e } +<< + \new TabStaff << + \new TabVoice = "one" s1 + \new TabVoice = "two" s1 + \new TabVoice = "shared" s1 + \new TabVoice = "solo" s1 + { \melodia } + >> +>> +@end lilypond + +Le support des modes de jeu propres à la guitare se limite aux sons +harmoniques et aux glissandi. + +@node Tablatures personnalisées +@unnumberedsubsubsec Tablatures personnalisées +@translationof Custom tablatures + +@cindex tablatures personnalisées +@cindex banjo, tablature +@cindex mandoline, tablature +@cindex guitare basse, tablature +@cindex tablature, accordages prédéfinis +@cindex cordes frettés et accordages prédéfinis +@cindex accordages prédéfinis et cordes frettées + +@funindex StringTunings + +Sous LilyPond, la case correspondant à une note jouée sur une corde +donnée est calculée automatiquement. Pour ce faire, l'accordage doit +être spécifié. L'accordage des cordes est donné par la propriété +@code{StringTunings}. + +LilyPond possède des accordages prédéfinis pour banjo, mandoline, guitare +et guitare basse. Lilypond calcule automatiquement la transposition +correspondant à ces accordages. L'exemple ci-dessous est pour guitare +basse, il sonnera donc une octave en dessous de ce qui est écrit. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \clef "bass_8" + \relative c, { + c4 d e f + } + } + \new TabStaff { + \set TabStaff.stringTunings = #bass-tuning + \relative c, { + c4 d e f + } + } +>> +@end lilypond + +L'accordage par défaut est @code{guitar-tuning}@tie{}; il correspond à +l'accordage standard d'une guitare@tie{}: mi la ré sol si mi (EADGBE). +D'autres accordages prédéfinis sont disponibles@tie{}: +@code{guitar-open-g-tuning}, @code{mandolin-tuning} et +@code{banjo-open-g-tuning}. Les accordages prédéfinis sont répertoriés +dans le fichier @file{scm/output-lib.scm}. + +L'accordage est constitué par une liste Scheme des hauteurs de notes +correspondant aux cordes à vide, une note pour chaque corde, classée par +numéro de corde de 1 à n, où la corde 1 est la plus haute dans la +tablature et n la plus basse. Cela revient généralement à classer les +cordes de la plus aiguë à la plus grave, mais certains instruments +(comme le ukulele) n'ont pas les cordes classées par hauteur. + +Dans cette liste, la hauteur des notes est représentée par l'intervalle, +exprimé en demi-tons, du do central jusqu'à la note de la corde à vide. +Elle doit donc être représentée par un nombre entier. LilyPond calcule +la note correspondant à chaque corde en ajoutant cet intervalle au do +central. + +Lilypond calcule automatiquement le nombre de cordes à représenter dans +la tablature (@code{TabStaff}) en comptant le nombre d'éléments définis +dans le @code{stringTunings}. + +N'importe quel accordage peut donc être créé. Par exemple, nous pouvons +définir l'accordage d'un instrument à quatre cordes accordées do sol ré +la, donc de la plus aiguë à la plus grave et en anglais@tie{}: +@code{a''}, @code{d''}, @code{g'}, et @code{c'}@tie{}: + + +@lilypond[quote,verbatim] +mynotes = { + c'4 e' g' c'' | + e'' g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #`(,(ly:make-pitch 1 5 0) + ,(ly:make-pitch 1 1 0) + ,(ly:make-pitch 0 4 0) + ,(ly:make-pitch 0 0 0)) + \mynotes + } +>> +@end lilypond + + +@seealso +Fichiers d'initialisation : +@file{scm/output-lib.scm}. + +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Référence des propriétés internes : +@rinternals{Tab_note_heads_engraver}. + +@knownissues +Le calcul automatique des tablatures se révèle inapproprié pour les +instruments dont l'ordre des cordes ne correspond pas à l'ordre des +hauteurs, comme le ukulele. + + +@node Tablatures sous forme d'étiquette +@unnumberedsubsubsec Tablatures sous forme d'étiquette +@translationof Fret diagram markups + +@cindex fret, diagrammes +@cindex accord, diagrammes +@cindex diagrammes de fret +@cindex diagrammes d'accord pour instrument fretté +@cindex fret, diagrammes personnalisés +@cindex diagrammes personnalisés de fret + +On peut ajouter des diagrammes d'accords au-dessus de n'importe quelle +note, en tant qu'objets @code{\markup}. Ces objets contiennent toutes +les informations du diagramme d'accord. Il y a pour les définir trois +interfaces "diagramme d'accord" (@emph{fret-diagram} en anglais)@tie{}: +@var{standard}, @var{terse} et @var{verbose}. +Ces trois interfaces produiront des diagrammes similaires mais +permettent des niveaux de personnalisation différents. Des détails à +propos des interfaces de type @code{\markup} +peuvent être trouvés dans @ref{Text markup commands}. + +Dans l'interface standard des diagrammes d'accords, on indiquera le +numéro de corde et le numéro de case pour chaque point placé sur une corde. +Les cordes à vide et étouffées peuvent aussi être indiquées. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" + < d a d' f'> ^\markup + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" + } +>> +@end lilypond + +@cindex barré, indication de +@cindex indication du barré + +Les indications de barré peuvent aussi être ajoutées au diagramme +d'accord dans l'interface standard@tie{}: + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 ^\markup + \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + < g, d g b d' g'> ^\markup + \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" + } +>> +@end lilypond + +@cindex fret-diagram et markup +@cindex markup et fret-diagram + +@funindex fret-diagram +@funindex \fret-diagram + +La taille du diagramme d'accord ainsi que le nombre de cases +représentées peuvent aussi être modifiés dans l'interface standard. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 ^\markup + \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + < g, b, d g b g'> ^\markup + \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" + } +>> +@end lilypond + +Le nombre de cordes dans les diagrammes d'accord peut être modifié dans +l'interface standard pour s'adapter à différents instruments tels que le +banjo et le ukulele. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + a1 + } + } + \context Staff { + %% A chord for ukulele + a'1 ^\markup \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" + } +>> +@end lilypond + +Des indications de doigtés peuvent être ajoutées, et le positionnement +de ces doigtés peut être modifié dans l'interface standard. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" + < d a d' f'> ^\markup + \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" + } +>> +@end lilypond + +La taille ainsi que la position des points peuvent être contrôlées dans +l'interface standard. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" + < d a d' f'> ^\markup + \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" + } +>> +@end lilypond + +@cindex fret-diagram-terse markup + +@funindex fret-diagram-terse +@funindex \fret-diagram-terse + +Dans l'interface @code{fret-diagram-terse}, les numéros de cordes sont +omis@tie{}; les numéros de cordes sont induits par la présence de +points-virgules. Il y a un point-virgule pour chaque corde du +diagramme. Le premier point-virgule correspondant au plus haut numéro +de corde, le dernier à la première corde. Les cordes étouffées, les +cordes à vide ainsi que les numéros de case peuvent y être indiqués. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram-terse #"x;3;2;o;1;o;" + < d a d' f'> ^\markup + \fret-diagram-terse #"x;x;o;2;3;1;" + } +>> +@end lilypond + +Les indications de barré peuvent être incluses dans l'interface +@code{fret-diagram-terse}. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 ^\markup + \fret-diagram-terse #"1-(;3;3;2;1;1-);" + < g, d g b d' g'> ^\markup + \fret-diagram-terse #"3-(;5;5;4;3;3-);" + } +>> +@end lilypond + +Les indications de doigtés peuvent être inclus dans l'interface +@code{fret-diagram-terse}. + +@c Need to use override to enable fingerings to show this -- can we do so? +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" + < d a d' f'> ^\markup + \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" + } +>> +@end lilypond + +Les autres propriétés des diagrammes d'accord doivent être ajustées en +utilisant la commande @code{\override} dans l'interface +@code{fret-diagram-terse}. + +@cindex fret-diagram-verbose markup + +@funindex fret-diagram-verbose +@funindex \fret-diagram-verbose + +L'interface @code{fret-diagram-verbose} est au format d'une liste +Scheme. Chaque élément de la liste décrit un objet devant être placé +dans le diagramme d'accord. + +@lilypond[quote, verbatim] +<< \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 ^\markup + \fret-diagram-verbose #'( + (mute 6) + (place-fret 5 3) + (place-fret 4 2) + (open 3) + (place-fret 2 1) + (open 1) + ) + < d a d' f'> ^\markup + \fret-diagram-verbose #'( + (mute 6) + (mute 5) + (open 4) + (place-fret 3 2) + (place-fret 2 3) + (place-fret 1 1) + ) + } +>> +@end lilypond + +Les indications de doigté et de barré peuvent être décrits dans +l'interface @code{fret-diagram-verbose}. Particularité propre à +l'interface @code{fret-diagram-verbose}@tie{}: l'indication +de capodastre dans le diagramme d'accord. L'indication de capodastre +est une petite ligne transversale aux cordes. La case avec le +capodastre est la case la plus basse du diagramme d'accord. + +@c \override is necessary to make fingering visible +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g c + } + } + \context Staff { + \clef "treble_8" + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + + < f, c f a c' f'>1 ^\markup + \fret-diagram-verbose #'( + (place-fret 6 1) + (place-fret 5 3) + (place-fret 4 3) + (place-fret 3 2) + (place-fret 2 1) + (place-fret 1 1) + (barre 6 1 1) + ) + < g, b, d g b g'> ^\markup + \fret-diagram-verbose #'( + (place-fret 6 3 2) + (place-fret 5 2 1) + (open 4) + (open 3) + (open 2) + (place-fret 1 3 3) + ) + < c e g c' e'> ^\markup + \fret-diagram-verbose #'( + (capo 3) + (mute 6) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + ) + } +>> +@end lilypond + +Toutes les autres propriétés du diagramme d'accord doivent être +indiquées en utilisant la commande @code{\override} lorsque l'on utilise +l'interface @code{fret-diagram-verbose}. + +@ignore +The following example shows the three fret-diagram markup +interfaces, along with examples of common tweaks. For example, +the size of the verbose fret diagram is reduced to 0.75, and the +finger indications are specified to appear below the diagram. The +terse diagram includes tweaks to specify placement of finger code +and color of dots. + +@lilypond[verbatim,ragged-right,quote] +\new Voice { + \clef "treble_8" + d^\markup \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" + d d d + fis^\markup \override #'(size . 0.75) { + \override #'(finger-code . below-string) { + \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) + (place-fret 5 4 3) + (place-fret 4 4 4) + (place-fret 3 3 2) + (place-fret 2 2 1) + (place-fret 1 2 1)) + } + } + fis fis fis + c^\markup \override #'(dot-radius . 0.35) { + \override #'(finger-code . in-dot) { + \override #'(dot-color . white) { + \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" + } + } + } + c c c +} +@end lilypond +@end ignore + +@cindex diagrammes de fret personnalisés +@cindex fret, diagrammes personnalisés +@cindex diagrammes personnalisés de fret + +@funindex fret-diagram-interface + +La disposition graphique d'un diagramme d'accord peut être modifiée +suivant les préférences de l'utilisateur grâce aux propriétés de +l'interface @code{fret-diagram-interface}. +Des détails se trouvent dans @rinternals{fret-diagram-interface}. Pour +un diagramme d'accord, les propriétés de l'interface dépendent de +@code{Voice.TextScript}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-markup-fret-diagrams.ly} + + +@seealso +Manuel de notation : +@ref{Text markup commands}. + +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Référence des propriétés internes : +@rinternals{fret-diagram-interface}. + + +@node Tablatures prédéfinies +@unnumberedsubsubsec Tablatures prédéfinies +@translationof Predefined fret diagrams + + +@cindex fret, diagrammes +@cindex accord, diagrammes + +@funindex FretBoards +@funindex stringTunings + +Les diagrammes d'accords peuvent être affichés en utilisant le contexte +@code{FretBoards}. Par défaut le contexte @code{FretBoards} affichera +des diagrammes d'accords stockés dans une table de correspondance@tie{}: + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { + c1 d + } +} +@end lilypond + +Les diagrammes d'accord définis par défaut sont dans le fichier +@file{predefined-guitar-fretboards.ly}. Les diagrammes d'accord sont +stockés en fonction des notes de l'accord ainsi que de l'accordage +(@code{stringTunings}) utilisé. +@file{predefined-guitar-fretboards.ly} contient les diagrammes d'accord +prédéfinis uniquement pour l'accordage standard (@code{guitar-tuning}). +Des diagrammes d'accords peuvent être définis pour d'autres instruments +ou d'autres accordages en suivant les exemples du fichier +@file{predefined-guitar-fretboards.ly}. + +Les diagrammes de fret propres au ukulele se trouvent dans le fichier +@file{predefined-ukulele-fretboards.ly}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-ukulele-fretboards.ly" + +myChords = \chordmode { a1 a:m a:aug } + +\new ChordNames { + \myChords +} + +\new FretBoards { + \set stringTunings = #ukulele-tuning + \myChords +} +@end lilypond + +Les notes des accords peuvent être entrées aussi bien comme musique +simultanée qu'en utilisant le mode accord (voir +@ref{Généralités sur le mode accords}). + +@lilypond[verbatim, ragged-right,quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode {c1} + 1 +} +@end lilypond + +@cindex accord nommés et diagrammes de fret +@cindex fret, diagrammes avec noms d'accord + +@funindex ChordNames +@funindex chordmode +@funindex \chordmode + +Il est courant d'afficher simultanément le nom des accords et les +diagrammes d'accords correspondants. +Ceci s'obtient en mettant en parallèle un contexte @code{ChordNames} avec +un contexte @code{FretBoards} et en affectant aux deux la même musique. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex transposition et diagramme de fret +@cindex fret et transposition +@cindex diagrammes de fret et transposition + +Les diagrammes d'accords prédéfinis sont transposables tant qu'il y a +un diagramme correspondant à l'accord transposé dans la base des +diagrammes d'accords. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +mychordlist = { + \mychords + \transpose c e { \mychords} +} +<< + \context ChordNames { + \mychordlist + } + \context FretBoards { + \mychordlist + } +>> +@end lilypond + +La table des diagrammes d'accord contient sept types d'accord (majeur, +mineur, augmenté, diminué, septième de dominante, majeur sept, mineur +sept) pour chacune des 17 fondamentales possibles. Une liste complète +des diagrammes d'accords prédéfinis se trouve dans +@ref{Tablatures prédéfinies}. S'il n'y a pas d'entrée dans la table +pour un accord donné, le graveur @code{Fretboard_engraver} calculera le +diagramme d'accord en utilisant la fonctionnalité automatique décrite +dans @ref{Tablatures automatiques}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 c:9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex fret, ajout de diagrammes personnalisés +@cindex diagrammes de fret personnalisés, ajout + +Des diagrammes d'accord peuvent être ajoutés à la table des diagrammes +d'accord. Pour ajouter un diagramme d'accord, il faut spécifier +l'accord correspondant au diagramme, l'accord utilisé et la définition +du diagramme. Cette définition de diagramme peut être +aussi bien de type @var{terse} que @var{verbose}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table \chordmode {c:9} + #guitar-tuning + #"x;3-2;2-1;3-3;3-4;x;" + +mychords = \chordmode{ + c1 c:9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +On peut enregistrer différents diagrammes pour un même accord +en les définissant à des octaves différentes. Notez qu'il faut un +intervalle de deux octaves, le premier servant à la transposition. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table \chordmode { c'' } + #guitar-tuning + #(offset-fret 2 (chord-shape 'bes guitar-tuning)) + +mychords = \chordmode{ + c1 c'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex cordes frettées, carrures d'accord +@cindex accord, carrures pour cordes frettées + +@funindex \addChordShape +@funindex add ChordShape +@funindex storePredefinedDiagram +@funindex \storePredefinedDiagram + +En plus des diagrammes d'accord, LilyPond possède une liste interne de +carrures d'accord. +Les carrures d'accords sont des diagrammes d'accord qui peuvent être +transposés le long du manche. Les carrures d'accords peuvent être +ajoutées à la liste interne et être ensuite utilisées pour définir des +accords prédéfinis. Puisqu'elles sont transposables le long du +manche, les carrures d'accord ne contiennent généralement pas de corde +à vide. Tout comme les diagrammes d'accord, les carrures d'accord sont +définies grâce aux interfaces @code{fret-diagram-terse} ou +@code{fret-diagram-verbose}. + + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +% add a new chord shape + +\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" + +% add some new chords based on the power chord shape + +\storePredefinedDiagram #default-fret-table \chordmode {f'} + #guitar-tuning + #(chord-shape 'powerf guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {g'} + #guitar-tuning + #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) + +mychords = \chordmode{ + f1 f' g g' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +La disposition graphique d'un diagramme d'accord peut être modifiée +suivant les préférences de l'utilisateur grâce aux propriétés de +l'interface @code{fret-diagram-interface}. Pour plus d'information, +consultez @rinternals{fret-diagram-interface}. Pour un diagramme +d'accord donné, les propriétés de l'interface dépendent de +@code{FretBoards.FretBoard}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-fretboard-fret-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{defining-predefined-fretboards-for-other-instruments.ly} + + +@seealso +Manuel de notation : +@ref{Tablatures personnalisées}, +@ref{Tablatures automatiques}, +@ref{Généralités sur le mode accords}, +@ref{Tablatures prédéfinies}. + +Fichiers d'initialisation : +@file{ly/predefined-guitar-fretboards.ly}, +@file{ly/predefined-guitar-ninth-fretboards.ly}. + +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Référence des propriétés internes : +@rinternals {fret-diagram-interface}. + + +@node Tablatures automatiques +@unnumberedsubsubsec Tablatures automatiques +@translationof Automatic fret diagrams + +@cindex fret, diagrammes automatiques +@cindex accord, diagrammes automatiques +@cindex automatique, diagramme de fret +@cindex automatique, diagramme d'accord + +Les diagrammes d'accord peuvent être créés automatiquement@tie{}; il +suffit d'affecter les notes à un contexte @code{FretBoards}. Si aucun +diagramme prédéfini n'est disponible pour les notes entrées avec +l'accordage actuel (@code{stringTunings}), les cordes et cases +correspondant aux notes seront automatiquement calculées. + +@lilypond[quote,ragged-right,verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context FretBoards { + < f, c f a c' f'>1 + < g,\6 b, d g b g'> + } + \context Staff { + \clef "treble_8" + < f, c f a c' f'>1 + < g, b, d g b' g'> + } +>> +@end lilypond + +@funindex predefinedFretboardsOff +@funindex \predefinedFretboardsOff +@funindex predefinedFretboardsOn +@funindex \predefinedFretboardsOn + +Dans la mesure où aucun diagramme prédéfini n'est chargé par défaut, le +calcul automatique des diagrammes d'accord est le comportement par +défaut. Dès que les diagrammes par défaut sont chargés, le calcul +automatique peut être activé ou désactivé par des commandes +prédéfinies@tie{}: + +@lilypond[quote,ragged-right,verbatim] + +\storePredefinedDiagram #default-fret-table + #guitar-tuning + #"x;3-1-(;5-2;5-3;5-4;3-1-1);" +<< + \context ChordNames { + \chordmode { + c1 c c + } + } + \context FretBoards { + 1 + \predefinedFretboardsOff + + \predefinedFretboardsOn + + } + \context Staff { + \clef "treble_8" + 1 + + + } +>> +@end lilypond + +Parfois le calculateur se trouvera incapable de trouver un diagramme +d'accord convenable. On peut souvent y remédier en assignant les notes +aux cordes. Dans bien des cas, il suffit de placer manuellement une +seule note pour que les autres soient alors placées de maniére +appropriée par le contexte @code{FretBoards}. + +@cindex fret, ajout de doigtés aux diagrammes +@cindex doigtés, ajout à des diagrammes de fret + +Il est possible d'ajouter des indications de doigté aux diagrammes de +fret. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context FretBoards { + < c-3 e-2 g c'-1 e' > 1 + < d a-2 d'-3 f'-1> + } + \context Staff { + \clef "treble_8" + < c e g c' e' > 1 + < d a d' f'> + } +>> +@end lilypond + +La propriété @code{minimumFret} permet de définir la case minimale qui +servira à calculer les cordes et les cases du contexte @code{FretBoard}. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + d1:m d:m + } + } + \context FretBoards { + < d a d' f'> + \set FretBoards.minimumFret = #5 + < d a d' f'> + } + \context Staff { + \clef "treble_8" + < d a d' f'> + < d a d' f'> + } +>> +@end lilypond + +Les cordes et les cases du contexte @code{FretBoards} sont liées à la +propriété @code{stringTunings}, qui a là même signification que dans le +contexte @code{TabStaff}. +Voir @ref{Tablatures personnalisées} pour plus d'information sur la +propriété @code{stringTunings}. + +La disposition graphique d'un diagramme d'accord peut être modifiée +suivant les préférences de l'utilisateur au travers des propriétés de +l'interface @code{fret-diagram-interface}. Pour un diagramme +d'accord, les propriétés de l'interface dépendent de +@code{FretBoards.FretBoard}. + + +@predefined +@code{\predefinedFretboardsOff}, +@code{\predefinedFretboardsOn}. +@endpredefined + + +@seealso +Manuel de notation : +@ref{Tablatures personnalisées}. + +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Référence des propriétés internes : +@rinternals {fret-diagram-interface}. + +@knownissues +Le calcul automatique des diagrammes de fret se révèle inapproprié pour +les instruments dont l'ordre des cordes ne correspond pas à l'ordre des +hauteurs. + + +@node Doigtés pour la main droite +@unnumberedsubsubsec Doigtés pour la main droite +@translationof Right-hand fingerings + +@cindex cordes frettées, doigtés main droite +@cindex doigtés main droite et cordes frettées +@cindex main droite, doigtés pour cordes frettées + +@funindex rightHandFinger +@funindex \rightHandFinger + +Les doigtés de main droite @var{p-i-m-a} doivent être entrés dans une +construction de type accord @code{<>} même s'il n'y a qu'une seule note. + +@warning{Un trait d'union @strong{doit} suivre la note et une espace +@strong{doit} précéder la fermeture de la construction par un @code{>}.} + + +@lilypond[quote,verbatim,relative=0] +\clef "treble_8" +4 + + + +1 +@end lilypond + +Pour plus de clarté, vous pouvez traduire ou abréger la commande +@code{\rightHandFinger}, par exemple en @code{\doigtMainDroite} ou +même @code{\MD}@tie{}: + +@example +#(define MD rightHandFinger) +@end example + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{placement-of-right-hand-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingerings,-string-indications,-and-right-hand-fingerings.ly} + + +@seealso +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Référence des propriétés internes : +@rinternals{StrokeFinger}. + + +@node Guitare +@subsection Guitare +@translationof Guitar + +La plupart des aspects en matière de notation pour guitare sont traités +dans la partie commune aux instruments frettés. Il subsiste cependant +quelques particularités que nous allons maintenant examiner. Parfois +l'utilisateur aimerait créer des documents de type recueil de chansons, +où l'on ne trouve que des accords au-dessus des paroles. Dans la mesure +où LilyPond est un éditeur de partitions, il n'est pas l'outil optimal +pour des documents sans partition. Une meilleure alternative serait de +recourrir à un traitement de texte, un éditeur de texte ou, pour les +utilisateurs experimentés, un logiciel typographique tel que GuitarTex. + +@menu +* Indication de la position et du barré:: +* Indication des harmoniques et notes étouffées:: +@end menu + +@node Indication de la position et du barré +@unnumberedsubsubsec Indication de la position et du barré +@translationof Indicating position and barring + +@cindex indication de la position et du barré pour cordes frettées +@cindex cordes frettées, indication de la position et du barré + +Cet exemple montre comment indiquer les positions et les barrés@tie{}: + +@lilypond[quote,ragged-right,fragment,verbatim,relative=0] +\clef "treble_8" +b16 d g b e +\textSpannerDown +\override TextSpanner #'(bound-details left text) = #"XII " + g16\startTextSpan + b16 e g e b g\stopTextSpan +e16 b g d +@end lilypond + + +@seealso +Manuel de notation : +@ref{Indication textuelle avec extension}. + +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}, +@rlsrnamed{Expressive marks,Signes d'interprétation}. + + +@node Indication des harmoniques et notes étouffées +@unnumberedsubsubsec Indication des harmoniques et notes étouffées +@translationof Indicating harmonics and dampened notes + +@cindex cordes frettées, notes étouffées +@cindex cordes frettées, harmoniques +@cindex notes étouffées et cordes frettées +@cindex harmoniques et cordes frettées + +Des têtes de note spéciales peuvent servir à indiquer les +notes étouffées et les sons harmoniques. Les sons harmoniques sont +souvent détaillés grâce à des indications textuelles. + +@lilypond[quote,ragged-right,fragment,verbatim] +\relative c' { + \clef "treble_8" + \override Staff.NoteHead #'style = #'cross + g8 a b c b4 + \override Staff.NoteHead #'style = #'harmonic-mixed + d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 +} +@end lilypond + + +@seealso +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Manuel de notation : +@ref{Têtes de note spécifiques}, +@ref{Têtes de note}. + + +@node Banjo +@subsection Banjo +@translationof Banjo + +@menu +* Tablatures pour banjo:: +@end menu + +@node Tablatures pour banjo +@unnumberedsubsubsec Tablatures pour banjo +@translationof Banjo tablatures + +@cindex banjo, tablatures +@cindex tablatures pour banjo + +LilyPond permet d'écrire des tablatures de base pour le banjo à cinq +cordes. Pour ce faire, pensez à utiliser le format de tablature pour +banjo, afin d'avoir le bon nombre de cordes et le bon accordage@tie{}: + +@c due to crazy intervals of banjo music, absolute pitch is recommended + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff << + \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo + \set TabStaff.stringTunings = #banjo-open-g-tuning + { + \stemDown + g8 d' g'\5 a b g e d' | + g4 d''8\5 b' a'\2 g'\5 e'\2 d' | + g4 + } +>> +@end lilypond + +@cindex banjo, accordages +@cindex accordages de banjo + +@funindex banjo-c-tuning +@funindex banjo-modal-tuning +@funindex banjo-open-d-tuning +@funindex banjo-open-dm-tuning +@funindex four-string-banjo + +LilyPond prend en charge un certain nombre d'accordages courants pour +banjo@tie{}: @code{banjo-c-tuning} sol,do,sol,si,ré (gCGBD), +@code{banjo-modal-tuning} sol,ré,sol,do,ré (gDGCD), +@code{banjo-open-d-tuning} la,ré,fa#,la,ré (aDF#AD) et +@code{banjo-open-dm-tuning} la,ré,fa,la,ré (aDFAD). + +Ces accordages peuvent être convertis pour banjo à quatre cordes au +moyen de la fonction @code{four-string-banjo}@tie{}: + +@example +\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) +@end example + + +@seealso +Morceaux choisis : +@rlsrnamed{Fretted strings,Cordes frettées}. + +Les accordages prédéfinis du banjo sont contenus dans le fichier +@file{scm/output-lib.scm}. diff --git a/Documentation/fr/notation/input.itely b/Documentation/fr/notation/input.itely new file mode 100644 index 0000000000..c51ce226d7 --- /dev/null +++ b/Documentation/fr/notation/input.itely @@ -0,0 +1,2447 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@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.14.0" + +@c Translators: Jean-Charles Malahieude, Valentin Villenave + +@node Généralités en matière d'entrée et sortie +@chapter Généralités en matière d'entrée et sortie +@translationof General input and output + +Nous n'allons pas, dans ce chapitre, parler directement de notation, +mais plutôt du contenu des fichiers source et du résultat produit par +LilyPond. + + +@menu +* Agencement du code:: +* Titres et entêtes:: +* Travail sur des fichiers texte:: +* Contrôle des sorties:: +* Sortie MIDI:: +@end menu + +@node Agencement du code +@section Agencement du code +@translationof Input structure + +LilyPond traite des fichiers textuels. Ces fichiers portent par +convention une extension @code{.ly}. + + +@menu +* Structure d'une partition:: +* Plusieurs partitions dans un même ouvrage:: +* Plusieurs éditions pour une même source:: +* Nom des fichiers de sortie:: +* Structure de fichier:: +@end menu + +@node Structure d'une partition +@subsection Structure d'une partition +@translationof Structure of a score + +@funindex \score + +Un bloc @code{\score} contient obligatoirement une seule expression +musicale délimitée par des accolades@tie{}: + +@example +\score @{ +... +@} +@end example + +@warning{Il ne doit y avoir qu'@strong{une seule} expression musicale +globale dans un bloc @code{@bs{}score}, et elle @strong{doit} être +bornée par une paire d'accolades.} + +Cette unique expression musicale peut être de n'importe quelle taille et +contenir d'autres expressions musicales aussi complexes soient elles. +Voici quelques exemples d'expression musicale@tie{}: + +@example +@{ c'4 c' c' c' @} +@end example + +@lilypond[verbatim,quote] +{ + { c'4 c' c' c' } + { d'4 d' d' d' } +} +@end lilypond + +@lilypond[verbatim,quote] +<< + \new Staff { c'4 c' c' c' } + \new Staff { d'4 d' d' d' } +>> +@end lilypond + +@example +@{ + \new GrandStaff << + \new StaffGroup << + \new Staff @{ \flute @} + \new Staff @{ \hautbois @} + >> + \new StaffGroup << + \new Staff @{ \violonI @} + \new Staff @{ \violonII @} + >> + >> +@} +@end example + +Les commentaires constituent l'une des rares exceptions à cette règle +immuable -- voir @ref{Structure de fichier} pour les autres. Qu'il +s'agisse d'une seule ligne ou de tout un bloc -- délimité par @code{%@{ +.. %@}} -- un commentaire peut se placer n'importe où dans le fichier +source, aussi bien à l'intérieur qu'à l'extérieur du bloc @code{\score}, +ou encore à l'intérieur ou à l'extérieur de l'expression musicale +contenue dans un bloc @code{\score}. + +Lorsqu'un fichier ne comprend qu'un bloc @code{\score}, celui-ci est +implicitement inclus dans un bloc @code{\book}. Le bloc @code{\book} +d'un fichier source permet la production d'au moins un fichier dont le +nom sera, par défaut, déduit du fichier source@tie{}: le traitement de +@file{fandangopourelephants.ly} produira donc +@file{fandangopourelephants.pdf}. Pour de plus amples informations à +propos du bloc @code{\book}, lisez +@ref{Plusieurs partitions dans un même ouvrage}, +@ref{Plusieurs éditions pour une même source} et +@ref{Structure de fichier}. + +@seealso +Manuel d'initiation : +@rlearning{Travail sur les fichiers d'entrée}, +@rlearning{Les expressions musicales en clair}, +@rlearning{La partition est une (unique) expression musicale composée}. + + +@node Plusieurs partitions dans un même ouvrage +@subsection Plusieurs partitions dans un même ouvrage +@translationof Multiple scores in a book + +@cindex mouvements, plusieurs +@cindex plusieurs mouvements + +@funindex \book + +Un ouvrage peut se composer de plusieurs morceaux et de texte. C'est le +cas des cahiers d'exercices ou d'une partie d'orchestre avec ses +différents mouvements. Chaque mouvement fait l'objet d'un bloc +@code{\score}, + +@example +\score @{ + @var{..musique..} +@} +@end example + +et le texte est contenu dans un bloc @code{\markup}, + +@example +\markup @{ + @var{..texte..} +@} +@end example + +@funindex \book + +Les différents mouvements et textes qui apparaissent dans un même +fichier @file{.ly} ne composeront en principe qu'un seul fichier +résultant. + +@example +\score @{ + @var{..} +@} +\markup @{ + @var{..} +@} +\score @{ + @var{..} +@} +@end example + +Attention cependant si vous travaillez avec lilypond-book@tie{}: il vous +faudra explicitement mentionner le bloc @code{\book}, en l'absence de +quoi seul le premier @code{\score} ou @code{\markup} apparaîtra après +traitement. + +L'entête de chaque pièce peut se placer au sein du bloc +@code{\score}@tie{}; le contenu du champ @code{piece} viendra s'imprimer +avant chaque mouvement. De même, le titre de l'ouvrage peut se placer +au sein du bloc @code{\book}. Dans le cas contraire, le contenu du bloc +@code{\header} placé en début de fichier sera utilisé. + +@example +\header @{ + title = "Huit miniatures" + composer = "Igor Stravinsky" +@} +\score @{ + @dots{} + \header @{ piece = "Romance" @} +@} +\markup @{ + ..texte du second couplet.. +@} +\markup @{ + ..texte du troisième couplet.. +@} +\score @{ + @dots{} + \header @{ piece = "Menuet" @} +@} +@end example + +@funindex \bookpart + +Plusieurs pièces seront regroupées dans un même @qq{chapitre} à l'aide +d'un bloc @code{\bookpart}. Les différentes parties sont séparées par +un saut de page et peuvent comporter un titre à l'instar de l'ouvrage +dès lors que vous y insérez un bloc @code{\header}. + +@example +\bookpart @{ + \header @{ + title = "Titre de l'ouvrage" + subtitle = "Première partie" + @} + \score @{ @dots{} @} + @dots{} +@} +\bookpart @{ + \header @{ + subtitle = "Deuxième partie" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + +@node Plusieurs éditions pour une même source +@subsection Plusieurs éditions pour une même source +@translationof Multiple output files from one input file + +Dès lors que vous inscrivez plusieurs blocs @code{\book} dans un même +fichier @file{.ly}, chacun d'eux donnera lieu à un résultat indépendant. +Lorsqu'aucun bloc @code{\book} n'est spécifié dans le fichier source, +LilyPond considère que l'intégralité du fichier constitue un bloc +@code{\book} unique, comme indiqué à la rubrique +@ref{Structure de fichier}. + +LilyPond fait en sorte, lorsque plusieurs fichiers sont produits à +partir d'une même source, qu'aucun résultat d'un bloc @code{\book} +n'écrase celui qui a été généré pour un bloc @code{\book} précédent. + +Dans les faits, et si le nom du fichier produit est repris de sa source +-- comportement par défaut --, un suffixe lui sera ajouté pour chaque +@code{\book}. Il s'agit en principe d'un pseudo numéro de version. +Ainsi, le fichier @file{huitminiatures.ly} qui contiendrait + +@example +\book @{ + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +@end example + +génèrera + +@itemize +@item +@file{huitminiatures.pdf}, +@item +@file{huitminiatures-1.pdf} et +@item +@file{huitminiatures-2.pdf}. +@end itemize + + +@node Nom des fichiers de sortie +@subsection Nom des fichiers de sortie +@translationof Output file names + +LilyPond vous permet de prendre le contrôle dans la dénomination des +fichiers que vous voulez générer, quel que soit le moteur de rendu +utilisé. + +Nous avons vu dans la rubrique précédente que LilyPond évite les +conflits de nom des fichiers qu'il génère à partir d'une même source. +Vous pouvez même définir vous-même le suffixe qui sera appliqué à chacun +des blocs @code{\book}. Ainsi, en reprenant l'exemple ci-avant, vous +obtiendrez les fichiers @file{huitminiatures-Romance.pdf}, +@file{huitminiatures-Menuet.pdf} et @file{huitminiatures-Nocturne.pdf} +en ajoutant simplement une déclaration @code{\bookOutputSuffix} au sein +de chaque bloc @code{\book}. + +@example +\book @{ + \bookOutputSuffix "Romance" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Menuet" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Nocturne" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +@end example + +La déclaration @code{\bookOutputName} vous permet de définir vous-même +le nom du fichier généré pour un bloc @code{\book}@tie{}: + +@example +\book @{ + \bookOutputName "Romance" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Menuet" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Nocturne" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +@end example + +Le traitement de ce fichier produira@tie{}: + +@itemize +@item +@file{Romance.pdf}, +@item +@file{Menuet.pdf} et +@item +@file{Nocturne.pdf}. +@end itemize + + +@node Structure de fichier +@subsection Structure de fichier +@translationof File structure + +@funindex \paper +@funindex \midi +@funindex \layout +@funindex \header +@funindex \score +@funindex \book +@funindex \bookpart + +Un fichier @code{.ly} peut contenir un certain nombre d'expression de +haut niveau. Les expressions de haut niveau sont les suivantes@tie{}: + +@itemize +@item +Une définition de sortie, comme @code{\paper}, @code{\midi} et +@code{\layout}. Ces définitions, lorsqu'elles se trouvent à un niveau +supérieur, s'appliqueront à l'intégralité de l'ouvrage. Si l'une de ces +expression apparaît à plusieurs reprises, la dernière aura préséance. + +@item +Une expression scheme pure, telle que +@w{@code{#(set-default-paper-size@tie{}"a7"@tie{}'landscape)}} ou +@w{@code{#(ly:set-option@tie{}'point-and-click@tie{}#f)}}. + +@item +Un bloc @code{\header}, dont le contenu sera de portée globale -- ce qui +est le cas en général pour le titre ou l'auteur entre autres. + +@item +Un bloc @code{\score} pour la partition. Cette partition sera assemblée +avec les autres partitions se trouvant au même niveau pour composer le +@code{\book}. Vous pouvez modifier ce comportement à l'aide de la +variable @code{toplevel-score-handler} placée en tête. +@ignore +@c FIXME - I cannot read "toplevel-score-handler" in scm/lily.scm -jcm +The default handler is defined in the init file @file{../scm/lily.scm}. +@end ignore + +@item +Un bloc @code{\book} permet de regrouper naturellement plusieurs +mouvements -- autrement dit plusieurs blocs @code{\score} -- dans un +même document. Lorsqu'il y a plusieurs @code{\score}s, LilyPond génère +un seul fichier dans lequel les mouvements sont mis les uns à la suite +des autres, ce pour chacun des blocs @code{\book} rencontrés. La seule +raison qui peut vous demander d'expliciter plusieurs blocs @code{\book} +dans un fichier @file{.ly} est lorsque vous avez besoin de générer +différents documents à partir d'une même source. La présence explicite +d'un bloc @code{\book} est aussi nécessaire lorsque vous travaillez sur +un document lilypond-book qui reprendrait plusieurs @code{\score}s ou +@code{\markup}s dans un même extrait. Vous pouvez modifier ce +comportement à l'aide de la variable @code{toplevel-score-handler} +placée en tête. +@ignore +@c FIXME - I cannot read "toplevel-book-handler" in scm/lily.scm -jcm +The default handler is defined in the init file @file{../scm/lily.scm}. +@end ignore + +@item +Un bloc @code{\bookpart}. Un ouvrage peut se découper en plusieurs +parties à l'aide de blocs @code{\bookpart}, aussi bien pour alléger le +travail de l'algorithme de calcul des sauts de page, que si les réglages +du bloc @code{\paper} diffèrent d'une partie à l'autre. + +@item +Une expression musicale telle que +@example +@{ c'4 d' e'2 @} +@end example + +Ce bout de code sera placé dans un @code{\score} et intégré à l'ouvrage +en même temps que tous les autres @code{\score}s ou expressions +musicales. En d'autres termes, un fichier qui ne contiendrait que cette +simple expression musicale sera traduit en + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + @{ c'4 d' e'2 @} + @} + @} + @} + \layout @{ @} + \header @{ @} +@} +@end example + +Vous pouvez modifier ce comportement à l'aide de la variable +@code{toplevel-music-handler} placée en tête. +@ignore +@c FIXME - I cannot read "toplevel-music-handler" in scm/lily.scm -jcm +The default handler is defined in the init file @file{../scm/lily.scm}. +@end ignore + +@item +Du texte sous forme de @emph{markup} comme les paroles d'un couplet +@example +\markup @{ + 2. Le première ligne du deuxième couplet. +@} +@end example + +De tels @emph{markups} seront imprimés là où ils apparaissent, +avant, après ou entre les expressions musicales. + +@cindex variables +@cindex identificateurs + +@item +Une variable, ou identificateur, telle que +@example +toto = @{ c4 d e d @} +@end example + +Vous pourrez la réutiliser plus loin dans votre fichier en saisissant +simplement @code{\toto}. Le nom des indentificateurs ne doit être +formés que de caractères alphabétiques -- sans chiffre ni caractère +souligné ou tiret. + +@end itemize + +Voici trois éléments que vous pouvez placer à un niveau supérieur@tie{}: + +@example +\layout @{ + % pas en pleine largeur + ragged-right = ##t +@} + +\header @{ + title = "Do-re-mi" +@} + +@{ c'4 d' e2 @} +@end example + +Vous pouvez placer, n'importe où dans votre fichier, les instruction +suivantes@tie{}: + +@itemize +@item @code{\version} +@item @code{\include} +@item @code{\sourcefilename} +@item @code{\sourcefileline} +@item +Une ligne de commentaire, introduite par le signe @code{%}. + +@item +Un bloc de commentaire, délimité par @code{%@{ .. %@}}. + +@end itemize + +@cindex espace +@cindex blanc + +Vous pouvez insérer des espaces dans votre fichier source afin de lui +apporter une meilleure lisibilité. Les espaces superflus sont +normalement ignorés. Notez cependant qu'il est des cas où l'espace est +requis pour éviter tout risque d'erreur@tie{}: + +@itemize +@item +Autour d'une accolade, qu'elle soit ouvrant ou fermante ; + +@item +Après chaque commande ou variable, autrement dit tout élément qui +commence par un @code{\}@tie{}; + +@item +Après tout élément qui sera interprété comme une expression Scheme, +autrement dit tout élément qui commence par un @code{#}@tie{}; + +@item +Pour séparer les éléments d'une expression Scheme ; + +@item +En mode parole -- @code{lyricmode} -- pour séparer les termes des +commandes @code{\override} et @code{\set}. Précisons à ce sujet qu'en +plus d'ajouter une espace avant et après l'intégralité de la commande, +vous devrez encadrer d'espace le point et le signe égal qu'elle peut +contenir, comme dans +@w{@code{\override Score . LyricText #'font-size = #5}}. + +@end itemize + + +@seealso +Manuel d'initiation : +@rlearning{Organisation des fichiers LilyPond}. + + +@node Titres et entêtes +@section Titres et entêtes +@translationof Titles and headers + +La plupart de la musique qui est éditée comporte un titre et le nom de +son compositeur@tie{}; certains ouvrages divulguent beaucoup plus +d'information. + + +@menu +* Création de titres:: +* Titrages personnalisés:: +* Référencement des numéros de page:: +* Table des matières:: +@end menu + +@node Création de titres +@subsection Création de titres +@translationof Creating titles + +Des éléments de titrage peuvent s'attacher à un bloc @code{\score}, une +partie -- créée par un bloc @code{\bookpart} -- ou bien un ouvrage +entier créé par un bloc @code{\book}. + +Les différents éléments du titrage sont contenus dans un bloc +@code{\header}. Un ouvrage complet peut comporter@tie{}: + + +@table @code +@funindex dedication +@item dedication +Le dédicataire de l'œuvre, centré en haut de la première page. + +@funindex title +@item title +Le titre de l'œuvre, centré en dessous de la dédicace. + +@funindex subtitle +@item subtitle +Le sous-titre, centré sous le titre. + +@funindex subsubtitle +@item subsubtitle +Un niveau supplémentaire de sous-titre, centré en dessous du sous-titre. + +@funindex poet +@item poet +Le poète, parolier ou librétiste, aligné à gauche en dessous du +deuxième sous-titre. + +@funindex instrument +@item instrument +L'instrument, centré en dessous du deuxième sous-titre. Il sera rappelé +sur les pages suivant la première, centré sur la ligne d'entête. + +@funindex composer +@item composer +Le compositeur, aligné à droite en dessous du deuxième sous-titre. + +@funindex meter +@item meter +Le libellé du tempo, aligné à gauche sous le poète. + +@funindex arranger +@item arranger +L'arrangeur, aligné à droite sous le compositeur. + +@funindex piece +@item piece +La pièce ou le mouvement, aligné à gauche sous le tempo. + +@funindex opus +@item opus +L'opus ou le numéro au catalogue, aligné à droite sous l'arrangeur. + +@cindex page breaks, forcing +@funindex breakbefore +@item breakbefore +Ce commutateur (activé par ##t@tie{}; ##f pour le désactiver) permet de +forcer le saut de page avant d'afficher les titres. + +@funindex copyright +@item copyright +La notice de droits d'auteur, centrée en pied de la première page. Pour +imprimer le symbole @emph{copyright}, consultez la rubrique +@ref{Codage du texte}. + +@funindex tagline +@item tagline +Mention spéciale imprimée en pied de la dernière page. + +@end table + +Voici ce que cela peut donner lorsque tout ces champs sont utilisés. +Les différentes commandes mentionnées à la rubrique +@ref{Mise en forme du texte} sont opérationnelles pour tous ces +éléments. + +@c KEEP LY +@lilypond[quote,verbatim,line-width=11.0\cm] +\paper { + line-width = 9.0\cm + paper-height = 10.0\cm +} + +\book { + \header { + dedication = "dédié à moi-même" + title = \markup \center-column { "Première ligne de titre" "Deuxième + ligne de titre, plus longue" } + subtitle = "un sous-titre," + subsubtitle = #(string-append "sous-sous-titre LilyPond version " +(lilypond-version)) + poet = "Auteur" + composer = \markup \center-column { "compositeur" \small "(1847-1973)" } + texttranslator = "Traduit par" + 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 "ngeur" } + instrument = \markup \bold \italic "instrument" + piece = "Pièce" + } + + \score { + { c'1 } + \header { + piece = "pièce1" + opus = "opus1" + } + } + \markup { + et puis... + } + \score { + { c'1 } + \header { + piece = "pièce2" + opus = "opus2" + } + } +} +@end lilypond + +Comme nous venons de la voir, vous pouvez multiplier les blocs +@code{\header}. Lorsqu'un même champ apparaît dans plusieurs blocs, +LilyPond utilisera le dernier mentionné@tie{}: + +@example +\header @{ + composer = "Compositeur" +@} +\header @{ + piece = "Morceau" +@} +\score @{ + \new Staff @{ c'4 @} + \header @{ + piece = "Nouveau morceau" % remplace le précédent + @} +@} +@end example + +Lorsque le bloc @code{\header} est défini à l'intérieur du bloc +@code{\score}, seul les champs @code{piece} et @code{opus} seront +imprimés. Attention cependant à toujours placer le bloc @code{\header} +après l'expression musicale. + +@lilypond[quote,verbatim,line-width=11.0\cm] +\score { + { c'4 } + \header { + title = "title" % not printed + piece = "piece" + opus = "opus" + } +} +@end lilypond + +@funindex print-all-headers +@noindent +Vous pouvez modifer ce comportement et imprimer tous les champs d'un +bloc @code{\header} défini dans un bloc @code{\score} en ajoutant + +@example +\paper@{ + print-all-headers = ##t +@} +@end example + +@cindex copyright +@cindex tagline + +Les pieds de page sont vides, hormis pour la première page qui portera +la champ @code{copyright} du @code{\header}, et pour la dernière page où +apparaîtra le @code{tagline}. Celui-ci est par défaut @qq{Music +engraving by LilyPond (@var{version})}.@footnote{Afin que l'on sache qui +est capable d'une telle qualité, nous vous saurons gré de ne pas +suprimer cette mention spéciale, autant que faire se peut.} + +Un champ de titrage peut être désactivé@tie{}: + +@example +\header @{ + tagline = ##f + composer = ##f +@} +@end example + + +@node Titrages personnalisés +@subsection Titrages personnalisés +@translationof Custom headers footers and titles + +Vous pouvez personnaliser, dans le bloc @code{\paper}, la définition des +variables listées ci-dessous. Leur mise en forme par défaut est +inscrite dans le fichier d'initialisation @file{../ly/titling-init.ly}. + +@table @code +@funindex bookTitleMarkup +@item bookTitleMarkup +Ce titre est apposé au début du document final. Il comprend normalement +le compositeur et le titre de l'œuvre. + +@funindex scoreTitleMarkup +@item scoreTitleMarkup +Ce titre est attaché à un bloc @code{\score}. Il comprend normalement +le nom du mouvement -- le champ @code{piece}. + +@funindex oddHeaderMarkup +@item oddHeaderMarkup +L'entête des pages impaires. + +@funindex evenHeaderMarkup +@item evenHeaderMarkup +L'entête des pages paires. Lorsqu'il n'est pas défini, LilyPond utilise +celui des pages impaires. + +Les entêtes comportent par défaut le nom de l'instrument, au centre, et +le numéro de page, sur le bord extérieur de la page. + +@funindex oddFooterMarkup +@item oddFooterMarkup +Le pied de page impaire. + +@funindex evenFooterMarkup +@item evenFooterMarkup +Le pied de page paire. Lorsqu'il n'est pas défini, LilyPond utilise +celui des pages impaires. + +Par défaut, le pied de la première page comporte la notice de droits +d'auteur, et celui de la dernière page la @qq{mention spéciale} -- le +@code{tagline}. +@end table + + +@cindex \paper +@cindex header +@cindex entête +@cindex footer +@cindex pied de page +@cindex mise en page +@cindex titres + +La définition suivante permt d'obtenir, sur la même ligne, le titre +aligné à gauche et le compositeur aligné à droite. + +@example +\paper @{ + bookTitleMarkup = \markup @{ + \fill-line @{ + \fromproperty #'header:title + \fromproperty #'header:composer + @} + @} +@} +@end example + +Les entêtes et pieds de page sont créés respectivement par les fonctions +@code{make-header} and @code{make-footer}, que vous pouvez définir au +sein du bloc @code{\paper}. Leur implémentation est contenue dans les +fichiers d'initialisation @file{ly/paper-defaults-init.ly} et +@file{ly/titling-init.ly}. + +Voici comment centrer le numéro en pied de chaque page@tie{}: + +@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 + + +@node Référencement des numéros de page +@subsection Référencement des numéros de page +@translationof Reference to page numbers + +LilyPond vous permet, à l'aide de la commande @code{\label}, d'insérer +des points de référence dans un ouvrage, aussi bien en dehors qu'au fil +de la musique. Ce point de référence pourra être ensuite repris à +l'intérieur d'un @emph{markup}@tie{}; vous pourrez même y ajouter le +numéro de page grâce à la commande de @emph{markup} @code{\page-ref}. + +@c KEEP LY +@lilypond[verbatim,line-width=11.0\cm] +\header { tagline = ##f } +\book { + \label #'firstScore + \score { + { + c'1 + \pageBreak \mark A \label #'markA + c'1 + } + } + + \markup { Le premier mouvement débute à la page \page-ref #'firstScore "0" "?" } + \markup { Le repère A est à la page \page-ref #'markA "0" "?" } +} +@end lilypond + +L'instruction @code{\page-ref} prend trois arguments@tie{}: +@enumerate +@item +le point de référence, sous la forme d'un symbole scheme, comme par +exemple @code{#'firstScore}, + +@item +un @qq{emporte-pièce} afin d'estimer la longueur totale du +@emph{markup}, + +@item +un texte de remplacement au cas où la référence ne serait pas retrouvée. +@end enumerate + +La présence de l'emporte-pièce est rendue nécessaire par le fait que les +@emph{markups} sont générés avant que les sauts de page ne soient +positionnés. Bien que le numéro de page en question ne soit pas encore +déterminé, LilyPond doit connaître les dimensions de ce @emph{markup}. +Vous pouvez, lorsque l'ouvrage contiendra plus de dix pages, stipuler un +emporte-pièce sur deux caractères -- soit @code{"00"}. + + +@predefined +@funindex \label +@code{\label}, +@funindex \page-ref +@code{\page-ref}. +@endpredefined + + +@node Table des matières +@subsection Table des matières +@translationof Table of contents + +La commande @code{\markuplines \table-of-contents} vous permettra de +générer une table des matières. Les éléments qui la composeront sont +créés par la commande @code{\tocItem}, insérée indépendamment ou au sein +d'une expression musicale. + +@verbatim +\markuplines \table-of-contents +\pageBreak + +\tocItem \markup "Premier mouvement" +\score { + { + c'4 % ... + \tocItem \markup "Passage spécifique du premier mouvement" + d'4 % ... + } +} + +\tocItem \markup "Second mouvement" +\score { + { + e'4 % ... + } +} +@end verbatim + +Les @emph{markups} dévolus à la mise en forme de la table des matières +se définissent dans le bloc @code{\paper}. Il s'agit par défaut de +@code{tocTitleMarkup} pour le titre de la table, et de +@code{tocItemMarkup} pour ses éléments -- composés de leur libellé et +numéro de page. Vous pouvez bien entendu personnaliser ces +variables@tie{}: + +@verbatim +\paper { + %% Translate the toc title into French: + tocTitleMarkup = \markup \huge \column { + \fill-line { \null "Table des matières" \null } + \hspace #1 + } + %% use larger font size + tocItemMarkup = \markup \large \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page + } +} +@end verbatim + +Notez bien la manière de référencer le libellé et le numéro de page dans +la définition de @code{tocItemMarkup}. + +N'hésitez pas à définir vous-même d'autres commandes et @emph{markups} +afin de construire une table plus élaborée@tie{}: +@itemize +@item +commencez par définir une nouvelle variable de type @code{markup} au +sein du bloc @code{\paper}, + +@item +puis définissez une fonction musicale chargée d'insérer un élément de la +table à partir de cette variable. +@end itemize + +Dans l'exemple qui suit, nous avons créé un nouveau style d'élément dans +le but de mentionner les actes dans la table des matières d'un +opéra@tie{}: + +@verbatim +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) +@end verbatim + +@lilypond[line-width=11.0\cm] +\header { tagline = ##f } +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) + +\book { + \markuplines \table-of-contents + \tocAct \markup { Atto Primo } + \tocItem \markup { Coro. Viva il nostro Alcide } + \tocItem \markup { Cesare. Presti omai l'Egizzia terra } + \tocAct \markup { Atto Secondo } + \tocItem \markup { Sinfonia } + \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } + \markup \null +} +@end lilypond + +L'élément et son numéro de page peuvent se rejoindre par une ligne +pointillée@tie{}: + +@lilypond[verbatim,quote] +\header { tagline = ##f } +\paper { + tocItemMarkup = \tocItemWithDotsMarkup +} + +\book { + \markuplines \table-of-contents + \tocItem \markup { Allegro } + \tocItem \markup { Largo } + \markup \null +} +@end lilypond + + +@seealso +Fichiers d'initialisation : +@file{../ly/toc-init.ly}. + + +@predefined +@funindex \table-of-contents +@code{\table-of-contents}, +@funindex \tocItem +@code{\tocItem}. +@endpredefined + + +@node Travail sur des fichiers texte +@section Travail sur des fichiers texte +@translationof Working with input files + +@menu +* Insertion de fichiers LilyPond:: +* Différentes éditions à partir d'une même source:: +* Codage du texte:: +* Affichage de notation au format LilyPond:: +@end menu + +@node Insertion de fichiers LilyPond +@subsection Insertion de fichiers LilyPond +@translationof Including LilyPond files + +@funindex \include +@cindex inclusion de fichiers + +Lorsqu'un projet prend de l'importance en volume, il est judicieux de le +scinder en plusieurs fichiers, auxquels vous fereez référence avec un +simple + +@example +\include "autrefichier.ly" +@end example + +Une ligne @code{\include "autrefichier.ly"} dans un fichier revient à +recopier intégralement le contenu de @file{autrefichier.ly} à l'endroit +même ou est placée l'instruction @code{\include}. Vous pouvez par +exemple écrire un fichier individuel par instrument, puis les regrouper +pour former le fichier @qq{conducteur}. Les différentes variables +définies dans les fichiers séparés seront normalement reprises et +utilisables dans le fichier formant le conducteur. Les sections +balisées dans les fichiers individuels peuvent être réutilisées en +différents endroit de la partition , comme expliqué à la rubrique +@ref{Différentes éditions à partir d'une même source}. + +Lorsque le fichier auquel il est fait référence se trouve dans le même +répertoire, donner seulement son nom en argument à la commande +@code{\include} suffit. S'il se trouve ailleurs, vous devrez indiquer +le chemin d'accès, absolu ou relatif, en respectant toutefois la syntaxe +UNIX -- autrement dit, le séparateur de répertoire est une oblique +normale @code{/} et non l'oblique inverse @code{\} de DOS/Windows. Par +exemple, si le fichier @file{truc.ly} se trouve dans le répertoire +supérieur au répertoire de travail, la ligne devra être + +@example +\include "../stuff.ly" +@end example + +@noindent +ou bien, si les fichiers correspondant aux parties d'orchestre se +trouvent dans le sous-répertoire @file{parties} relativement au +répertoire courant, vous devrez mentionner + +@example +\include "parties/VI.ly" +\include "parties/VII.ly" +... etc. +@end example + +Les fichiers à inclure peuvent eux-même contenir des instructions +@code{\include}. Ces instructions @code{\include} de second niveau ne +pourront, par défaut, être interprétées qu'une fois intégrées dans le +fichier principal@tie{}; leur argument doit donc comporter le chemin +relativement au fichier principal et non par rapport au fichier dan +lesquel cette inclusion est mentionnée. Vous pouvez toutefois influer +sur ce comportement à l'aide de l'option @code{-drelative-includes} en +ligne de commande ou en ajoutant une clause +@code{@w{#(ly:set-option 'relative-includes #t)}} en tête du fichier +principal. Une fois @code{relative-include} activé, le chemin à suivre +pour chacune des commandes @code{\include} sera pris relativement au +fichier qui la contient. + +Vous pouvez inclure des fichiers dont vous spécifierez le chemin d'accès +sur la ligne de commande au moment de lancer la compilation. L'appel à +ces fichiers ne mentionnerra alors que leur nom. Par exemple, si vous +voulez compiler avec cette méthode le fichier @file{principal.ly} qui +inclut des fichiers situés dans le sous-répertoire @file{parties}, +placez vous dans le répertoire contenant @file{principal.ly}, puis tapez + +@example +lilypond --include=parties principal.ly +@end example + +tout en ayant bien dans @file{principal.ly} + +@example +\include "VI.ly" +\include "VII.ly" +... etc +@end example + +Lorsqu'un fichier est voué à être inclus dans nombre de partitions, vous +pouvez le placer dans le répertoire de LilyPond @file{../ly}. +Attention@tie{}: ce répertoire varie selon votre installation, comme +indiqué au chapitre @rlearning{Autres sources de documentation}. Ce +fichier sera inclus dès lors que vous fournirez uniquement son nom en +argument à la fonction @code{\include}. C'est par exemple le cas du +fichier de définition particulier @file{gregorian.ly}. + +Au moment où vous lancez LilyPond, un certain nombre de fichiers se +retrouvent inclus par défaut@tie{}; il suffit d'activer le mode verbeux +en faisant @code{lilypond --verbose} pour s'en rendre compte. Vous +verrez ainsi défiler, en plus de nombreuses informations, le nom d'un +certain nombre de fichier et de chemins d'accès. Les fichiers les plus +important sont mentionnés au chapitre +@rlearning{Autres sources de documentation}. Si vous venez à les +modifier, rappelez-vous qu'ils seront écrasés à l'installation d'une +nouvelle version de LilyPond. + +Vous trouverez quelques exemples simples d'utilisation de la commande +@code{\include} au chapitre @rlearning{Conducteurs et parties}. + + +@seealso +Manuel d'initiation : +@rlearning{Autres sources de documentation}, +@rlearning{Conducteurs et parties}. + + +@knownissues + +Lorsque vous incluez un fichier qui porte le même nom que l'un des +fichiers d'initialisation de LilyPond, le fichier de la distribution de +LilyPond aura préséance. + + +@node Différentes éditions à partir d'une même source +@subsection Différentes éditions à partir d'une même source +@translationof Different editions from one source + +Différents mécanismes permettent de générer plusieurs versions d'une +partition à partir d'une même source. Les variables -- ou +idendificateurs -- sont sûrement le moyen le plus simple de combiner de +différente manière des passages relativement longs, alors que les +balises permettront de sélectionner de courts fragments selon leur +utilisation. Quelle que soit la méthode utilisée, séparer la notation +de la structure de la partition vous donnera plus de liberté dans +l'agencement de l'ouvrage final, puisque vous ne reviendrez pas sur la +musique qui le compose. + +@menu +* Utilisation de variables:: +* Utilisation de balises:: +* Globalisation des réglages:: +@end menu + +@node Utilisation de variables +@unnumberedsubsubsec Utilisation de variables +@translationof Using variables + +@cindex variables, utilisation de + +Un fragment musical identifié par une variable est réutilisable à divers +endroits de la partition, comme nous l'avons vu à la rubrique +@rlearning{Organisation du code source avec des variables}. Par +exemple, une partition pour chœur @notation{a cappella} comporte souvent +une réduction pour piano reprenant toutes les voix@tie{}; il s'agit de +la même musique, et vous ne devrez donc la saisir qu'une seule fois. +D'autre part, la musique issue de deux variables peut se combiner sur +une seule portée, comme nous l'avons vu à la rubrique +@ref{Regroupement automatique de parties}. Prenons l'exemple +suivant@tie{}: + +@lilypond[verbatim,quote] +sopranoMusic = \relative c'' { a4 b c b8( a) } +altoMusic = \relative g' { e4 e e f } +tenorMusic = \relative c' { c4 b e d8( c) } +bassMusic = \relative c' { a4 gis a d, } +allLyrics = \lyricmode {King of glo -- ry } +<< + \new Staff = "Soprano" \sopranoMusic + \new Lyrics \allLyrics + \new Staff = "Alto" \altoMusic + \new Lyrics \allLyrics + \new Staff = "Tenor" { + \clef "treble_8" + \tenorMusic + } + \new Lyrics \allLyrics + \new Staff = "Bass" { + \clef "bass" + \bassMusic + } + \new Lyrics \allLyrics + \new PianoStaff << + \new Staff = "RH" { + \set Staff.printPartCombineTexts = ##f + \partcombine + \sopranoMusic + \altoMusic + } + \new Staff = "LH" { + \set Staff.printPartCombineTexts = ##f + \clef "bass" + \partcombine + \tenorMusic + \bassMusic + } + >> +>> +@end lilypond + +Générer une partition chorale ou la réduction pour piano ne requiert que +de modifier la structure des éléments, sans aucunement toucher à la +musique. + +Dans le cas d'une partition relativement longue, vous pouvez isoler la +définition des différentes variables dans des fichiers séparés que vous +rappellerez ensuite, comme indiqué à la rubrique +@ref{Insertion de fichiers LilyPond}. + + +@node Utilisation de balises +@unnumberedsubsubsec Utilisation de balises +@translationof Using tags + +@funindex \tag +@funindex \keepWithTag +@funindex \removeWithTag +@cindex tag +@cindex balise + +La commande @code{\tag #'@var{partieA}} affecte à une expression +musicale le nom @var{partieA}. Les expressions ainsi balisées pourront +être filtrées par la suite, à l'aide de +@code{\keepWithTag@tie{}#'@var{nom}} ou +@code{\removeWithTag@tie{}#'@var{nom}}. Ces filtres fonctionnent de la +manière suivante@tie{}: + +@multitable @columnfractions .5 .5 +@headitem Filtre + @tab Résultat + +@item +Musique balisée précédée de @code{\keepWithTag #'@var{nom}} + @tab Musique non balisée et musique balisée par @var{nom} seront + incluses@tie{}; la musique balisée autrement est exclue. + +@item +Musique balisée précédée de @code{\removeWithTag #'@var{nom}} + @tab Musique non balisée et fragments appelés autrement que @var{nom} + seront inclus@tie{}; la musique balisée par @var{nom} est exclue. + +@item +Musiqeu balisée non précédée de @code{\keepWithTag} ou +@code{\removeWithTag} + @tab Musique balisée et non balisée seront incluses. + +@end multitable + +Les arguments des commandes @code{\tag}, @code{\keepWithTag} et +@code{\removeWithTag} doivent être un symbole (tel que +@code{#'conducteur} ou @code{#'partie}), suivi d'une expression +musicale. + +Dans l'exemple qui suit, nous obtenons deux versions du même extrait, +l'une pour le conducteur, l'autre pour l'instrumentiste, et qui +comportera les ornements développés. + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand { \repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \keepWithTag #'trills \music +} +\score { + \keepWithTag #'expand \music +} +@end lilypond + +@noindent +Il est parfois plus aisé d'exclure des fragments@tie{}: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand {\repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \removeWithTag #'expand + \music +} +\score { + \removeWithTag #'trills + \music +} +@end lilypond + +Ce principe de filtrage peut s'appliquer aux articulations, textes, etc. +Il suffit de positionner + +@example +-\tag #@var{ma-balise} +@end example + +@noindent +avant l'articulation ou le texte, comme ici@tie{}: + +@example +c1-\tag #'doigt ^4 +c1-\tag #'gaffe ^"Attention !" +@end example + +@noindent +Ceci définira une note avec une indication conditionnelle de doigté ou +un texte. + +Vous pouvez baliser différemment la même expression musicale en +saisissant plusieurs @code{\tag}@tie{}: + +@lilypond[quote,verbatim] +music = \relative c'' { + \tag #'a \tag #'both { a4 a a a } + \tag #'b \tag #'both { b4 b b b } +} +<< +\keepWithTag #'a \music +\keepWithTag #'b \music +\keepWithTag #'both \music +>> +@end lilypond + +L'application concomitante de plusieurs filtres @code{\removeWithTag} à +la même expression musicale permet d'exclure plusieurs balisages@tie{}: + +@lilypond[verbatim,quote] +music = \relative c'' { +\tag #'A { a4 a a a } +\tag #'B { b4 b b b } +\tag #'C { c4 c c c } +\tag #'D { d4 d d d } +} +{ +\removeWithTag #'B +\removeWithTag #'C +\music +} +@end lilypond + +L'application de plus d'un filtre @code{\keepWithTag} à la même +expression musicale aboutit à l'exclusion de @b{tous} les balisages. +En effet, si le premier filtre exclut tous les autres balisages, +l'application du second exclura les effets du premier. + + +@seealso +Manuel d'initiation : +@rlearning{Organisation du code source avec des variables}. + +Manuel de notation : +@ref{Regroupement automatique de parties}, +@ref{Insertion de fichiers LilyPond}. + + +@ignore +@c This warning is more general than this placement implies. +@c Rests are not merged whether or not they come from tagged sections. +@c Should be deleted? -td + +@knownissues + +Lorsqu'elles comportent des silences, ceux-ci ne seront pas fusionnés +si vous imprimez une partition avec les deux sections balisées. + +@end ignore + + +@node Globalisation des réglages +@unnumberedsubsubsec Globalisation des réglages +@translationof Using global settings + +@cindex include-settings + +Vous pouvez regrouper dans un fichier indépendant vos réglages +personnels que vous incluerez au besoin@tie{}: + +@example +lilypond -dinclude-settings=MES_REGLAGES.ly MA_PARTITION.ly +@end example + +Vous pouvez ainsi stocker dans un fichier séparé vos réglages en matière +de format de papier, de fontes utilisées ou vos définitions +particulières. Selon le fichier de réglages que vous mentionnerez, vous +obtiendrez facilement différentes éditions à partir d'une même source +quelle qu'elle soit. + +Ceete technique peut s'utiliser en combinaison avec des feuilles de +styles, comme indiqué au chapitre @rlearning{Feuilles de style}. + +@seealso +Manuel d'initiation : +@rlearning{Organisation du code source avec des variables}, +@rlearning{Feuilles de style}. + +Manuel de notation : +@ref{Insertion de fichiers LilyPond}. + + +@node Codage du texte +@subsection Codage du texte +@translationof Text encoding + +@cindex Unicode +@cindex UTF-8 +@cindex non-ASCII characters + +LilyPond utilise le jeu de caractères défini par le consortium Unicode +et la norme ISO/CEI@tie{}10646. Chaque caractère est identifié par un +nom unique et associé à un point de code, ce qui permet dans l'absolu de +couvrir tous les langages. Unicode permet de coder tous les caractères +utilisés par toutes les langues écrites du monde. LilyPond utilise le +codage UTF-8 (UTF pour @emph{Unicode Transformation Format}) qui permet +de représenter les caractères latins sur un octet et les autres sur une +longueur allant jusqu'à quatre octets. + +L'apparence réelle des caractères est déterminée par les glyphes ou +graphèmes tels que définis dans les différentes polices disponibles. +Une police, ou une fonte, définit la mise en correspondance d'un +sous-ensemble de points de code unicode en glyphes. LilyPond recourt à +la bibliothèque Pango pour assurer le rendu des textes multilingues. + +LilyPond n'effectue aucune conversion d'encodage que ce soit. Ceci +implique donc que tout texte, qu'il s'agisse d'un titre, de paroles ou +même d'instruction musicale, comportant des caractères non ASCII soit +codé en UTF-8. Le plus sûr moyen de saisir du texte de la sorte +consiste à utiliser un éditeur supportant l'unicode et à enregistrer vos +fichier en UTF-8. C'est le cas pour la plupart des éditeurs actuels, +que ce soit vim, Emacs, jEdit et GEdit. Tous les systèmes Windows +postérieurs à NT utilisent Unicode en natif@tie{}; même Notepad est +capable d'éditer et sauvegarder un fichie en UTF-8 -- sans parler de +l'excellente alternative qu'est BabelPad. + +La compilation d'un fichier LilyPond comportant des caractères non ASCII +qui n'aurait pas été enregistré dans l'encodage UTF-8 vous renverra +l'erreur + +@example +FT_Get_Glyph_Name () erreur : invalid argument +@end example + +Voici un exemple utilisant du texte en cyrilique, en hébreux et en +portugais. + +@lilypond[quote] +%c No verbatim here as the code does not display correctly in PDF +% Cyrillic +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} + +% Hebrew +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} + +% Portuguese +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} + +\relative c' { + c2 d e f g f e +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \portuguese } +@end lilypond + +Lorsque vous avez besoin d'un caractère dont vous connaissez le point de +code mais que votre éditeur ne permet pas de saisir directement, vous +pouvez utitliser les instructions @code{\char@tie{}##xhhhh} ou +@code{\char@tie{}#dddd} au sein d'un bloc @code{\markup} -- @code{hhhh} +et @code{dddd} correspondant respectivement à la valeur hexadécimale ou +décimale. Même s'il est inutile de saisir les zéros superflus, il est +de bon ton de stipuler les quatre caractères formant la représentation +hexadécimale. Évitez cependant l'encodage UTF-8 d'un point de code +après un @code{\char}@tie{}; les encodages UTF-8 comprennent un bit +supplémentaire indiquant le nombre d'octets. Une table de +correspondance entre les codes Unicode et le nom des caractères ainsi +que leur code hexadécimal est disponible sur le site du consortium +Unicode, @uref{http://www.unicode.org/}. + +Par exemple, @code{\char ##x03BE} et @code{\char #958} correspondent +tous deux au caractère unicode U+03BE, dénommé @qq{Greek Small Letter +Xi}. + +Quel que soit le point de code spécifié de cette manière, il ne vous +sera alors pas nécessaire d'enregistrer votre fichier en UTF-8. Vous +devrez toutefois disposer d'une fonte contenant ce caractère qui soit +accessible à LilyPond. + +L'exemple suivant illustre la manière d'insérer un caractère sous sa +forme hexadécimale, à la fois dans un repère, dans une articulation, +dans des paroles et dans du texte indépendant. + +@lilypond[quote,verbatim] +\score { + \relative c'' { + c1 \mark \markup { \char ##x03EE } + c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } + } + \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } +} +\markup { "Copyright 2008--2011" \char ##x00A9 } +@end lilypond + +@cindex copyright + +Le signe @emph{copyright} dans le champ de titrage consacré s'inscrit de +la manière suivante@tie{}: + +@example +\header @{ + copyright = \markup @{ \char ##x00A9 "2008" @} +@} +@end example + + +@node Affichage de notation au format LilyPond +@subsection Affichage de notation au format LilyPond +@translationof Displaying LilyPond notation + +@funindex \displayLilyMusic + +La fonction musicale @code{\displayLilyMusic}, disponible uniquement +pour un traitement en ligne de commande, permet d'afficher en +notation LilyPond une expression musicale. Par exemple, + +@example +@{ + \displayLilyMusic \transpose c a, @{ c4 e g a bes @} +@} +@end example + +affichera + +@example +@{ a,4 cis e fis g @} +@end example + +LilyPond affichera le résultat sous forme de message en console, au +milieu de toutes les informations de compilation. Afin d'isoler ces +messages et enregistrer le résultat de la fonction +@code{\display@{STUFF@}}, pensez à rediriger la sortie vers un fichier. + +@example +lilypond fichier.ly >display.txt +@end example + + +@node Contrôle des sorties +@section Contrôle des sorties +@translationof Controlling output + +@menu +* Extraction de fragments musicaux:: +* Ignorer des passages de la partition:: +* Formats de sortie alternatifs:: +* Changement des fontes musicales:: +@end menu + +@node Extraction de fragments musicaux +@subsection Extraction de fragments musicaux +@translationof Extracting fragments of music + +LilyPond vous permet d'extraire des fragments d'une partition à l'instar +du choriste amateur qui alimente son album avec des coupures de +journaux. + +Vous devrez pour cela définir les mesures à découper. La définition +suivante, incluse dans votre fichier source, + +@verbatim +\layout { + clip-regions + = #(list + (cons + (make-rhythmic-location 5 1 2) + (make-rhythmic-location 7 3 4))) +} +@end verbatim + +@noindent +vous permettra d'extraire un fragment compris entre le milieu de la +cinquième mesure et quelque part dans la septième. Le triplet +@code{5@tie{}1@tie{}2} signifie@tie{}: après la durée d'une blanche dans +la mesure 5@tie{}; le @code{7@tie{}3@tie{}4} signifie quant à lui que +l'on s'arrête à la mesure 7, après la durée de trois noires. + +Rien ne vous empêche d'extraire plusieurs fragments, dès lors que vous +définissez dans la liste d'autres paires d'emplacements ryhtmiques. + +Cette fonctionnalité n'est toutefois effective que lorsque vous lancez +LilyPond avec l'option @code{-dclip-systems}. Les @qq{coupures} seront +générées sous la forme de fichiers EPS, convertis en PDF ou PNG selon le +format que vous aurez stipulé. + +Pour de plus amples informations quant au format des résultats, +consultez le chapitre @rprogram{Lancement de lilypond}. + + +@node Ignorer des passages de la partition +@subsection Ignorer des passages de la partition +@translationof Skipping corrected music + +@funindex skipTypesetting +@funindex showFirstLength +@funindex showLastLength + +Dans un travail de transcription ou de recopie de la musique, ce qui +vous intéresse plus particulièrement se situe à la fin, là même où vous +en êtes dans la notation. Dans le but de gagner du temps dans le +processus de correction, vous pouvez @qq{escamoter} le reste et ne +générer que les dernières mesures en insérant + +@verbatim +showLastLength = R1*5 +\score { ... } +@end verbatim + +@noindent +dans votre fichier source. Ceci aura pour effet de ne générer que les +cinq dernières mesures -- si tant est que le morceau soit à 4/4 -- de +tous les @code{\score} de votre fichier. Dans le cas d'un œuvre +conséquente, cette pratique s'avère fort utile puisqu'elle évite de tout +générer. Vous pourriez aussi être amené à retravailler le début d'une +œuvre, pour y ajouter une partie par exemple, auquel cas c'est la +propriété @code{showFirstLength} que vous utiliserez. + +Vous pouvez contrôler très finement les parties à escamoter, grâce u +commutateur @code{Score.skipTypesetting}@tie{}: lorsqu'il est activé, +aucune gravure n'est réalisée. + +Ce commutateur agit aussi sur la sortie MIDI. Notez bien que tous les +événements seront escamotés, y compris les changements de tempo ou +d'instrument -- vous voilà prévenu@tie{}! + +@lilypond[quote,relative=2,ragged-right,verbatim] +c8 d +\set Score.skipTypesetting = ##t +e8 e e e e e e e +\set Score.skipTypesetting = ##f +c8 d b bes a g c2 +@end lilypond + +Dans le cadre de musique polyphonique, @code{Score.skipTypesetting} +s'applique à toutes les voix et portées. Vous gagnerez donc encore plus +de temps. + + +@node Formats de sortie alternatifs +@subsection Formats de sortie alternatifs +@translationof Alternative output formats + +@cindex scalable vector graphics +@cindex SVG, format de sortie +@cindex encapsulated postscript +@cindex EPS, format de sortie + +En matière de partition imprimable, LilyPond génère par défaut des +documents au format PstScript (PS) et Portable Document Format (PDF). +Vous pouvez aussi obtenir des documents au format Scalable Vector +Graphics (SVG), Encapsulated PostScript (EPS) ou Portable Network +Graphics (PNG) dès lors que vous aurez lancé LilyPond en ligne de +commande avec l'option @i{ad hoc} -- voir +@rprogram{Options en ligne de commande pour lilypond} à ce sujet. + + +@node Changement des fontes musicales +@subsection Changement des fontes musicales +@translationof Replacing the notation font + +Gonville est ube alternative à la fonte Feta que LilyPond utilise par +défaut. Vous pouvez la télécharger à partir de +@example +@uref{http://www.chiark.greenend.org.uk/~sgtatham/gonville/ ,http://www.chiark.greenend.org.uk/~sgtatham/gonville/} +@end example + +Voici quelques mesures utilisant la police Gonville@tie{}: + +@c NOTE: these images are a bit big, but that's important +@c for the font comparison. -gp +@sourceimage{Gonville_after,,,} + +Et ces même mesures avec la police de LilyPond, Feta@tie{}: + +@sourceimage{Gonville_before,,,} + + +@subsubheading Instructions d'installation pour MacOS +@translationof Installation Instructions for MacOS + +Téléchargez puis décompressez l'archive zip. Recopiez le répertoire +@code{lilyfonts} dans @file{@var{SHARE_DIR}/lilypond/current} -- voir +@rlearning{Autres sources de documentation} à ce sujet. Renommez le +répertoire @code{fonts} qui s'y trouve en @code{fonts_orig}, puis les +répertoire @code{lilyfonts} en @code{fonts}. Il vous suffira, pour +retrouver la fonte Feta, de renommer @code{fonts_orig} en @code{fonts}. + + +@seealso +Manuel d'initiation : +@rlearning{Autres sources de documentation}. + +@knownissues + +Gonville ne permet pas de générer de la notation ancienne. Consultez le +site de l'auteur pour de plus amples informations ainsi qu'à propos des +conditions d'utilisation. + + +@node Sortie MIDI +@section Sortie MIDI +@translationof MIDI output + +MIDI (Musical Instrument Digital Interface) constitue un standard en +matière de connexion et de contrôle des instruments électroniques. Un +fichier MIDI contient une série de notes réparties dans différentes +pistes. Il ne s'agit en rien d'un fichier sonore@tie{}; il vous faudra +un logiciel capable de traduire ces séries de notes en sons. + +Vous pouvez convertir vos partition en fichier MIDI de manière à +entendre ce que vous avez saisi. Ceci vous permet de contrôler aisément +ce que vous avez saisi@tie{}: octaves et altérations erronées heuteront +votre oreille avertie grâce au MIDI. + +@c TODO Check this +Dans une sortie MIDI, LilyPond alloue un canal à chaque portée, plus un +pour les réglages globaux. Par voie de conséquence, un fichier MIDI ne +peut comporter au maximmum que quinze portées (quatorze en l'absence de +percussions)@tie{}; les portées supplémentaires seront tout simplement +silencieuses. + +@menu +* Création de fichiers MIDI:: +* Le bloc MIDI:: +* Contenu de la sortie MIDI:: +* Répétitions et MIDI:: +* Gestion des nuances en MIDI:: +* MIDI et percussions:: +@end menu + + +@node Création de fichiers MIDI +@subsection Création de fichiers MIDI +@translationof Creating MIDI files + +LilyPond génèrera un fichier MIDI dès que vous ajouterez un bloc +@code{\midi} à la structure de votre partition, comme ici@tie{}: + +@example +\score @{ + @var{...musique...} + \midi @{ @} +@} +@end example + +Lorsque le bloc @code{\score} contient un bloc @code{\midi} mais pas de +bloc @code{\layout}, LilyPond ne produira qu'une sortie MIDI. Si donc +vous avez besoin aussi d'un support visuel, vous devrez aussi mentionner +un bloc @code{\layout}. + +@example +\score @{ + @var{...musique...} + \midi @{ @} + \layout @{ @} +@} +@end example + +Hauteurs, durées, liaisons de prolongation, nuances et changements de +tempo seront interprétés et traduits en événements MIDI. Les +indications de nuances, crescendos et decrescendos sont traduits en +niveau de volume@tie{}; les indications sous la forme d'une fraction +déterminée du volume disponible, et crescendos et decrescendos sous la +forme d'une progression linéaire entre les deux extrêmes. Le rendu des +indications de nuance peut être désactivé pour le MIDI -- voir +@ref{Le bloc MIDI}. + +Le tempo initial ainsi que ses changements sont normalement indiqués au +fil de la notation à l'aide de la commande @code{\tempo}@tie{}; ils +seront retranscrits dans le fichier MIDI. La commande @code{\tempo} +donne lieu à l'impression d'une indication métronomique que vous pouvez +toutefois rendre invisible, comme indiqué à la rubrique +@ref{Indication métronomique}. Une autre manière de spécifier le tempo +initial pour un fichier MIDI est indiquée plus avant -- voir +@ref{Le bloc MIDI}. + +En raison de certaines limitations de Windows, les fichiers MIDI doivent +y porter l'extension @code{.mid}. D'autres systèmes utilisent +l'extension @code{.midi}. Si besoin est, placez la ligne suivante au +début de votre fichier source, avant l'ouverture de tout bloc +@code{\book}, @code{\bookpart} ou @code{\score}@tie{}: + +@example +#(ly:set-option 'midi-extension "midi") +@end example + +Cette ligne déterminera @code{.midi} comme extension par défaut pour les +fichiers MIDI. + +Vous pouvez aussi le faire en ligne de commande@tie{}: + +@example +lilypond … -dmidi-extension=midi fichierLily.ly +@end example + + +@unnumberedsubsubsec Noms d'instrument +@translationof Instrument names + +@cindex instrument, nom d' +@funindex Staff.midiInstrument + +L'instrument MIDI affecté à un canal particulier est déterminé par la +propiété @code{Staff.midiInstrument}. Vous pouvez choisr l'un des +instruments répertoriés à l'annexe @ref{Instruments MIDI}. + +@example +\new Staff @{ + \set Staff.midiInstrument = #"glockenspiel" + @var{...notes...} +@} +@end example + +@example +\new Staff \with @{midiInstrument = #"cello"@} @{ + @var{...notes...} +@} +@end example + +Lorsque l'instrument choisi ne correspond pas exactement à l'une des +dénominations consacrées, LilyPond le replacera par un piano de concert +(@code{"acoustic grand"}). + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-midi-output-to-one-channel-per-voice.ly} + +@knownissues + +@c In 2.11 the following no longer seems to be a problem -td +@ignore +Un (de)crescendo non terminé ne sera pas correctement rendu en MIDI -- +il y a nécessairement du silence. Il vous faut donc lui donner une fin +explicite. Par exemple, + +@example +@{ a4\< b c d\f @} +@end example + +@noindent +ne fonctionnera pas correctement, contrairement à + +@example +@{ a4\< b c d\!\f @} +@end example +@end ignore + +Un changement de volume ne peut intervenir que sur le démarrage d'une +note. C'est la raison pour laquelle la succession d'un crescendo et +d'un diminuendo ne peut se produire sur une même note. + +Certains lecteurs MIDI ne rendent pas correctement les changements de +tempo. MS Windows Media Player et +@uref{http://@/timidity@/.sourceforge@/.net/,timidity} le font sans +problème. + + +@node Le bloc MIDI +@subsection Le bloc MIDI +@translationof MIDI block + +Dès lors que vous désirez obtenir une sortie MIDI, vous devrez inscrire +un bloc @code{\midi} au sein du bloc @code{\score}. Son fonctionnement +est comparable à ce lui du bloc @code{\layout}, voire plus simple. Si +le bloc @code{\midi} est la plupart du temps laissé vide, il peut +contenir des aménagements pour certains contextes, la définition de +contextes particuliers ou du code permettant de déterminer la valeur de +certianes propriétés. L'exemple suivant détermine le tempo initial du +fichier MIDI tout en se passant de son indication sur la partition +imprimée. + +@example +\score @{ + @var{...musique...} + \midi @{ + \context @{ + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + @} + @} +@} +@end example + +Ici, le tempo est fixé à 72 noires à la minute. Spécifier un tempo de +la sorte ne permet pas de doner une valeur pour une note pointée. Vous +devrez, en pareil cas, subdiviser la note pointée en durée plus courte. +Par exemple, indiquer 90 à la noire pointée est équivalent à spécifier +270 croches à la minute@tie{}: + +@example +tempoWholesPerMinute = #(ly:make-moment 270 8) +@end example + +@cindex MIDI et définition de contexte +@cindex contexte, définition en MIDI + +La syntaxe permettant de définir un contexte pour le @code{\midi} est en +tout point identique à celle que vous utilisez dans le bloc +@code{\layout}, à ceci près que le @qq{graveur} est remplacé par un +@qq{interprète}. Les différents contextes disponibles en matière de +MIDI sont répertoriés dans le fichier d'initialisation +@file{../ly/performer-init.ly} -- pour plus de détail, voir +@rlearning{Autres sources de documentation}. +Si vous voulez vous passer des nuances dans votre fichier MIDI, il vous +suffit d'insérer les lignes suivantes dans votre bloc +@code{\midi@{ @}}. + +@example +\midi @{ + ... + \context @{ + \Voice + \remove "Dynamic_performer" + @} +@} +@end example + +LilyPond ne génèrera de sortie MIDI que si vous incluez un bloc +@code{\midi} dans la structure de la partition, initialisée par la +commande @code{\score}. + +@example +\score @{ + @{ @dots{}notes@dots{} @} + \midi @{ @} +@} +@end example + + +@node Contenu de la sortie MIDI +@subsection Contenu de la sortie MIDI +@translationof What goes into the MIDI output? + +@c TODO Check grace notes - timing is suspect? + + +@unnumberedsubsubsec Éléments pris en compte dans le MIDI +@translationof Supported in MIDI + +@cindex hauteurs en MIDI +@cindex MIDI, hauteurs +@cindex quart de ton en MIDI +@cindex MIDI, quart de ton +@cindex microtonalité en MIDI +@cindex MIDI, microtonalité +@cindex accords nommés en MIDI +@cindex MIDI, accords nommés +@cindex Rythme en MIDI +@cindex MIDI, Rythme +@c TODO etc + +Un fichier MIDI généré par LilyPond comprendra les éléments de notation +suivants@tie{}: + +@itemize +@item +les hauteurs ; + +@item +les microtonalités -- voir @ref{Altérations}. Leur rendu nécessite +cependant un lecteur qui prenne en charge la modulation@tie{}; + +@item +les accords nommés ; + +@item +le rythme en tant que durée de note, y compris les nolets ; + +@item +les tremolos, exceptés ceux utilisant la syntaxe +@qq{@code{:}[@var{nombre}]}@tie{}; + +@item +les liaisons de prolongation ; + +@item +les indications de nuance + +@item +les crescendos et decrescendos s'étalant sur plusieurs notes@tie{}; + +@item +les changements de tempo indiqués par un @code{\tempo}@tie{}; + +@item +les paroles. +@end itemize + + +@unnumberedsubsubsec Éléments non pris en compte dans le MIDI +@translationof Unsupported in MIDI + +@c TODO index as above + +LilyPond ne peut générer d'événement MIDI pour les éléments +suivant@tie{}: + +@itemize +@item +le rythme indiqué sous forme d'annotation (p.ex. @emph{swing})@tie{}; + +@item +les changements de tempo indiqués sous forme d'annotation (sans +@code{\tempo})@tie{}; + +@item +les staccatos et autres articulations ou ornementations@tie{}; + +@item +les liaisons d'articulation et de prhasé@tie{}; + +@item +les crescendos ou decrescendos sur une sele note@tie{}; + +@item +les tremolos indiqués par la syntaxe @qq{@code{:}[@var{nombre}]}@tie{}; + +@item +la basse chiffrée + +@item +les accords en microtonalité. +@end itemize + + +@node Répétitions et MIDI +@subsection Répétitions et MIDI +@translationof Repeats in MIDI + +@cindex reprises développées +@funindex \unfoldRepeats + +Au prix de quelques réglages, les reprises de toutes sortes peuvent être +rendues dans le fichier MIDI. Il suffit pour cela de recourir à la +fonction @code{\unfoldRepeats}, qui développe toutes les reprises. En +d'autre termes, @code{\unfoldRepeats} transforme toutes les reprises +en reprises de type @code{unfold}. + + +@lilypond[quote,verbatim] +\unfoldRepeats { + \repeat tremolo 8 {c'32 e' } + \repeat percent 2 { c''8 d'' } + \repeat volta 2 {c'4 d' e' f'} + \alternative { + { g' a' a' g' } + {f' e' d' c' } + } +} +\bar "|." +@end lilypond + +Lorsque l'on veut utiliser @code{\unfoldRepeats} seulement pour le rendu +MIDI, il faut établir deux blocs @code{\score}@tie{}: un pour le MIDI, +avec des reprises explicites, et l'autre pour la partition, avec des +reprises notées sous forme de barres de reprise, de trémolo ou de +symboles de pourcentage. Par exemple + +@example +\score @{ + @var{..musique..} + \layout @{ .. @} +@} +\score @{ + \unfoldRepeats @var{..musique..} + \midi @{ .. @} +@} +@end example + + +@node Gestion des nuances en MIDI +@subsection Gestion des nuances en MIDI +@translationof Controlling MIDI dynamics + +Les nuances MIDI sont générées par le @code{Dynamic_performer}, affecté +par défaut au contexte @code{Voice}. Vous pouvez contrôler à la fois le +volume général, celui des indications de nuance ainsi que celui des +différents instruments. + + +@unnumberedsubsubsec Indications de nuance +@translationof Dynamic marks + +Les indications de nuances sont transcrites en fraction du volume MIDI. +Nous allons, par défaut, de 0,25 pour un @notation{ppppp} à 0,95 pour un +@notation{fffff}. Les correspondances entre nuance et fraction de +volume sont répertoriées dans le fichier @file{../scm/midi.scm} -- +consultez la rubrique @rlearning{Autres sources de documentation} si +vous ne savez comment le localiser. Vous pouvez modifier ou étendre ce +jeu grâce à une fonction qui prendra en argument une indication de +nuance et renverra la fraction désirée, puis en affectant cette fonction +à @code{Score.dynamicAbsoluteVolumeFunction}. + +Prenons un exemple. Votre partition comporte un @notation{rinforzando} +que vous avez indiqué par @code{\rfz}. Cette indication de nuance +n'étant pas répertoriée dans le jeu par défaut, elle ne produira aucun +effet en MIDI. Il en sera d'ailleurs de même pour toute indication +créée de toute pièce à l'aide de l'instruction +@code{make-dynamic-script}. Voici comment procéder pour ajuster le +volume MIDI de ce @notation{rinforzando} que le compositeur a indiqué. +La fonction Scheme définit une fraction de 0,9 en cas de @notation{rfz}, +et demande d'utiliser la fonction par défaut dans les autre cas. + +@lilypond[verbatim,quote] +#(define (myDynamics dynamic) + (if (equal? dynamic "rfz") + 0.9 + (default-dynamic-absolute-volume dynamic))) + +\score { + \new Staff { + \set Staff.midiInstrument = #"cello" + \set Score.dynamicAbsoluteVolumeFunction = #myDynamics + \new Voice { + \relative c'' { + a4\pp b c-\rfz + } + } + } + \layout {} + \midi {} +} +@end lilypond + +Si vous étiez amené à devoir modifier l'intégralité du jeu des +correspondances, nous vous conseillons d'utiliser la procédure +@command{default-dynamic-absolute-volume} contenue dans le fichier +@file{../scm/midi.scm} ansi que la table d'association comme base. Le +dernier exemple de cette partie illustre la manière de procéder. + + +@unnumberedsubsubsec Amplitude du volume en MIDI +@translationof Overall MIDI volume + +Les valeurs extrêmes du volume MIDI des nuances se contrôlent à l'aide +des propriétés @code{midiMinimumVolume} et @code{midiMaximumVolume} qui +agissent au niveau @code{Score}. Ces propriétés sont effectives dès +lors qu'une nuance est indiquée@tie{}; une nuance de départ est donc +requise pour que le volume soit ajusté dès le début de la partition. +Vous pouvez alors modifier la fraction correspondant à chaque nuance à +l'aide de la formule + +@example +midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction +@end example + +Voici comment ajuster les nuances tout en limitant l'amplitude du volume +entre 0,2 et 0,5@tie{}: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + midiMinimumVolume = #0.2 + midiMaximumVolume = #0.5 + } + } +} +@end lilypond + + +@unnumberedsubsubsec Égalisation de plusieurs instruments (i) +@translationof Equalizing different instruments (i) + +La définition de l'amplitude du volume MIDI au niveau d'un contexte +@code{Staff} permet de gérer les volumes relatifs entre les différents +instruments. Ceci constitue en quelque sorte un égaliseur, ce qui +permet d'améliorer notablement la qualité de la sortie MIDI. + +La clarinette de l'exemple suivant jouera relativement moins fort que la +flûte. Rappelez-vous que pour que cela fonctionne correctement, la +première note de chacun des instruments doit être affublée d'une +indication de nuance. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \set Staff.midiMinimumVolume = #0.7 + \set Staff.midiMaximumVolume = #0.9 + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \set Staff.midiMinimumVolume = #0.3 + \set Staff.midiMaximumVolume = #0.6 + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + + +@unnumberedsubsubsec Égalisation de plusieurs instruments (ii) +@translationof Equalizing different instruments (ii) + +Lorsque les propriétés volume minimum et maximum n'ont pas été définies, +LilyPond appliquera par défaut une légère égalisation pour quelques +instruments. Les instrument concernés ainsi que le niveau d'égalisation +sont répertoriés dans une table @notation{instrument-equalizer-alist} +du fichier @file{../scm/midi.scm}. + +Vous pouvez remplacer l'égaliseur basique en définissant une nouvelle +procédure Scheme @code{instrumentEqualizer} au sein du contexte +@code{Score}. Cette procédure prend en unique argument le nom d'un +instrument MIDI et renverra une paire de fractions correspondant au +minimum et maximum de volume alloué à cet instrument. Cette +substitution fonctionne selon le même principe que celui que nous avons +vu en dédut de chapitre avec @code{dynamicAbsoluteVolumeFunction}. +L'égaliseur par défaut, @notation{default-instrument-equalizer}, est +défini dans le fichier @file{../scm/midi.scm}@tie{}; son analyse vous +aidera à construire votre propre procédure. + +Nous allons, dans l'exemple suivant, régler le volume relatif de la +flûte et de la clarinette -- au même niveau que dans le précédent. + +@lilypond[verbatim,quote] +#(define my-instrument-equalizer-alist '()) + +#(set! my-instrument-equalizer-alist + (append + '( + ("flute" . (0.7 . 0.9)) + ("clarinet" . (0.3 . 0.6))) + my-instrument-equalizer-alist)) + +#(define (my-instrument-equalizer s) + (let ((entry (assoc s my-instrument-equalizer-alist))) + (if entry + (cdr entry)))) + +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Score.instrumentEqualizer = #my-instrument-equalizer + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@ignore +@c Delete when satisfied this is adequately covered elsewhere -td + +@n ode Microtones in MIDI +@s ubsection Microtones in MIDI + +@cindex microtones in MIDI + +Microtones consisting of half sharps and half flats are exported +to the MIDI file and render correctly in MIDI players which support +pitch bending. See @ref{Note names in other languages}. Here is +an example showing all the half sharps and half flats. It can be +copied out and compiled to test microtones in your MIDI player. + +@lilypond[verbatim,quote] +\score { + \relative c' { + c4 cih cis cisih + d4 dih ees eeh + e4 eih f fih + fis4 fisih g gih + gis4 gisih a aih + bes4 beh b bih + } + \layout {} + \midi {} +} +@end lilypond +@end ignore + + +@node MIDI et percussions +@subsection MIDI et percussions +@translationof Percussion in MIDI + +La notation pour percussions recourt généralement à un contexte +particulier -- le @code{DrumStaff} -- qui permet d'affecter directement +les instruments concernés au canal@tie{}10 qui leur est réservé. + +Certains instruments, tels le xylophone, le marimba, le vibraphone ou +les timbales, se traitent cependant comme des instruments +@qq{classiques} puisqu'ils sont capables d'émettre des hauteurs +différentes@tie{}; leurs notation relève donc d'un contexte @code{Staff} +standard, et non d'un @code{DrumStaff} pour pouvoir être rendus +correctement en MIDI. + +D'autres percussions, bien que n'émettant qu'un seul son et inclus dans +le standard @emph{general MIDI}, comme le tom mélodique ou le tambour +taiko, ne sont pas attachés au canal@tie{}10. Ces instruments doivent +donc être saisi dans un contexte @code{Staff}, en utilisant la hauteur +appropiée. + +De nombreux instruments de la famille des percussions, les castagnettes +par exemple, n'existent pas dans le standard @emph{general MIDI}. +L'alternative, bien que peu satisfaisante, consiste à leur attribuer le +son le plus proche dans la banque standard. + +@c TODO Expand with examples, and any other issues + +@knownissues + +Le standard @emph{general MIDI} ne dispose pas du @emph{rim shot}@tie{}; +LilyPond lui subtitue un @emph{sidestick}. + diff --git a/Documentation/fr/notation/keyboards.itely b/Documentation/fr/notation/keyboards.itely new file mode 100644 index 0000000000..9a0ed9e987 --- /dev/null +++ b/Documentation/fr/notation/keyboards.itely @@ -0,0 +1,726 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + +@node Instruments utilisant des portées multiples +@section Instruments utilisant des portées multiples +@translationof Keyboard and other multi-staff instruments + +@lilypondfile[quote]{keyboard-headword.ly} + +Ce chapitre traite des différents aspects de la notation que l'on +rencontre particulièrement avec les instruments qui ont recours à +plusieurs portées, tels que ceux disposant de claviers, la harpe ou +le vibraphone. Pour les besoins du discours, et pour simplifier, nous +parlerons ici de @qq{clavier} bien que le recours à des portées +multiples concerne aussi des instruments qui en sont dépourvus. + +@menu +* Vue d'ensemble des claviers:: +* Piano:: +* Accordéon:: +* Harpe:: +@end menu + +@node Vue d'ensemble des claviers +@subsection Vue d'ensemble des claviers +@translationof Common notation for keyboards + +Nous allons examiner ici les problèmes qui peuvent survenir en matière +de notation pour la plupart des instrument à cordes multiples. + +@menu +* Généralités sur les instruments à clavier:: +* Changement de portée manuel:: +* Changement de portée automatique:: +* Lignes de changement de portée:: +* Hampes et changements de portée:: +@end menu + +@node Généralités sur les instruments à clavier +@unnumberedsubsubsec Généralités sur les instruments à clavier +@translationof References for keyboards + +@c untranslated +@c ifnothtml +@c englishref +@c end ifnothtml +@cindex piano, système pour +@cindex portées pour piano +@cindex portées pour instrument à clavier +@cindex portées pour instrument à clés +@cindex clavier, portées pour instrument à +@cindex clés, portées pour instrument à +@cindex claviers, centrage des nuances +@cindex nuances entre les portées d'un système pianistique +@cindex piano, nuances entre les portées +@cindex centrage des nuances entre deux portées de piano + +@funindex PianoStaff + +La notation pour instrument à clavier est en règle générale présentée +sous la forme d'un système pour piano, autrement dit deux portées +normales ou plus réunies par une accolade. Cette notation sert également +à la harpe ou à d'autres instruments à clés. L'organiste, quant à lui, +lira une partition composée de deux portées au sein d'un système +pianistique auquel vient s'adjoindre une portée normale pour le pédalier. + +Les portées sont largement autonomes, mais il arrive que des voix +passent de l'une à l'autre. Le contexte @code{PianoStaff} est +précisément conçu pour gérer la notation spécifique au piano et autres +instruments à clavier, notamment ces croisements. + +Certaines particularités de la notation pour claviers sont abordées dans +d'autres chapitres@tie{}: + +@itemize + +@item +Les claviers ont régulièrement recours à plusieurs voix dont le +nombre peut varier. Voir à ce sujet @ref{Résolution des collisions}. + +@item +On peut écrire la musique pour claviers de façon parallèle, comme +l'explique @ref{Saisie de musique en parallèle}. + +@item +Les nuances peuvent se gérer dans un contexte @code{Dynamics} qu'il +suffira d'insérer entre les deux contextes @code{Staff} pour qu'elles +apparaissent sur leur propre ligne centrée entre les deux portées. Voir +à ce sujet @ref{Nuances}. + +@item +Les indications de doigté sont abrodées dans @ref{Doigtés}. + +@item +Les indications en matière de pédalier d'orgue sont traitées comme +des articulations. Voir à ce sujet +@ref{Liste des signes d'articulation}. + +@item +Pour générer des repères verticaux, voir @ref{Quadrillage temporel}. + +@item +En plus des @notation{Laissez vibrer}, les liaisons en matière de +clavier peuvent intervenir sur des accords arpégés ou des trémolos. +Reportez-vous au chapitre @ref{Liaisons de prolongation}. + +@item +Le traitement des arpèges couvrant plusieurs voix ou portées est +abordé au chapitre @ref{Arpèges}. + +@item +Une description des indications de tremolo est disponible au +chapitre @ref{Répétitions en trémolo}. + +@item +Certaines retouches particulières au monde des claviers sont +abordées au chapitre @rlearning{Exemple concret}. + +@item +Des notes fantômes permettent d'introduire des liaisons de tenue +qui passent d'une voix à l'autre, comme le montre +@rlearning{Autres utilisations des retouches}. + +@end itemize + + +@seealso +Manuel d'initiation : +@rlearning{Exemple concret}, +@rlearning{Autres utilisations des retouches}. + +Manuel de notation : +@ref{Regroupement de portées}, +@ref{Noms d'instrument}, +@ref{Résolution des collisions}, +@ref{Saisie de musique en parallèle}, +@ref{Doigtés}, +@ref{List of articulations}, +@ref{Quadrillage temporel}, +@ref{Liaisons de prolongation}, +@ref{Arpèges}, +@ref{Répétitions en trémolo}. + +Référence des propriétés internes : +@rinternals{PianoStaff}. + +Morceaux choisis : +@rlsrnamed{Keyboards, Claviers}. + + +@node Changement de portée manuel +@unnumberedsubsubsec Changement de portée manuel +@translationof Changing staff manually + +@cindex changements de portée manuels +@cindex changement de portée forcé +@cindex inter-portée, notes +@cindex notes inter-portée +@cindex inter-portée, ligatures +@cindex ligature inter-portée + +@funindex \change +@funindex change + +Il est possible de passer d'une portée à l'autre de façon manuelle, au +moyen de la commande + +@example +\change Staff = @var{nomDeLaPortee} +@end example + +@noindent +La valeur @var{nomDeLaPortee} est le nom de la portée sur laquelle va se +déplacer la voix courante. Pour des raisons pratiques, on nomme la +portée supérieure @code{"haut"} et la portée inférieure @code{"bas"}, +donc @var{nomDeLaPortee} désigne habituellement @code{"haut"}, +@code{"bas"}, @code{"MD"} ou @code{"MG"}. + +Dans tous les cas, le contexte de portée ainsi utilisé doit exister au +préalable. Le cas échéant, vous devrez @qq{garder actives} certaines +portées -- voir @ref{Conservation d'un contexte} à ce propos. + +Pour ligaturer automatiquement des notes entre deux portées, procédez +ainsi@tie{}: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + 8 + \change Staff = "down" + g8 fis g + \change Staff = "up" + 8 + \change Staff = "down" + e8 dis e + \change Staff = "up" + } + \new Staff = "down" { + \clef bass + % keep staff alive + s1 + } +>> +@end lilypond + +Si les ligatures demandaient à être retouchées, commencez par +modifier la direction des hampes. L'emplacement des ligatures sera +alors calculé à partir du centre de la portée la plus proche -- voir +@rlearning{Correction des collisions d'objets} pour un exemple de +retouche sur des ligatures. + +@cindex changement de portée et collision +@cindex collision et changement de portée + +Une voix qui change de portée peut entraîner des collisions@tie{}: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + \voiceOne + % Make space for fingering in the cross-staff voice + \once\override DynamicLineSpanner #'staff-padding = #3.4 + e''2\p\< d''\> s1*0\! + } + \new Staff = "down" << + { + \clef bass + s4. e,8\rest g,2\rest + } \\ { + c8\( g c' + \change Staff = "up" + e' g' b'-3 a' g'\) + } + >> +>> +@end lilypond + +Hampes et liaisons viennent en surimpression sur la ligne des nuances +parce que la résolution automatique des collisions est inactivée pour +ce qui relie les notes de différentes portées ainsi que pour les hampes +ou extenseurs affectés à des notes incluses dans un changement de +portée. Lorsque des collisions surviennent en pareil cas, il vous +faudra les résoudre, en suivant les directives du chapitre +@rlearning{Correction des collisions d'objets}. + + +@seealso +Manuel d'initiation : +@rlearning{Correction des collisions d'objets}. + +Manuel de notation : +@ref{Hampes}, +@ref{Barres de ligature automatiques}, +@ref{Conservation d'un contexte}. + +Morceaux choisis : +@rlsr{Keyboards}. + +Référence des propriétés internes : +@rinternals{Beam}, +@rinternals{ContextChange}. + + +@node Changement de portée automatique +@unnumberedsubsubsec Changement de portée automatique +@translationof Changing staff automatically + +@cindex Changement de portée automatique +@cindex Automatique, changement de portée + +@funindex \autochange +@funindex autochange +@funindex PianoStaff + +Les voix peuvent passer automatiquement d'une portée à l'autre, au moyen +de la syntaxe suivante@tie{}: + +@example +\autochange @dots{}@var{musique}@dots{} +@end example + +@noindent +Deux portées seront alors créées au sein du contexte @code{PianoStaff}, +nommées respectivement @code{"up"} et @code{"down"}. La portée du bas +sera par défaut en clé de fa. La commande @code{\autochange} bascule +les notes d'une portée à l'autre en fonction de leur hauteur (le do du +milieu servant de pivot), et place les silences en fonction des notes +qui les suivront. Ainsi@tie{}: + +@lilypond[quote,verbatim] +\new PianoStaff { + \autochange { + g4 a b c' + d'4 r a g + } +} +@end lilypond + +@cindex mode relatif et autochange +@cindex autochange et mode relatif + +@funindex \relative +@funindex relative + +Une section en mode @code{\relative} se situant en dehors de la commande +@code{\autochange} n'aura pas d'effet sur les hauteurs de l'expression +@var{musique}. Il est donc préférable d'introduire la directive +@code{\relative} @strong{après} @code{\autochange}. + +Lorsque des contrôles particuliers doivent s'appliquer aux portées, +mieux vaut les nommer explicitement -- attention@tie{}: sous peine +d'effet indésirable quant au résultat, la portée supérieure doit +s'appeler @code{"up"} et l'inférieure @code{"down"}@tie{}; @emph{ceci +est à notre connaissance le seul cas où ces noms de variable sont +figés}. Cette procédure sert, entre autres, à indiquer l'armure sur la +portée inférieure@tie{}: + +@c Keep Ly needed, otherwise 'up' and 'down' get +@c incorrectly translated in verbatim output +@c KEEP LY +@lilypond[quote,verbatim,nogettext] +\new PianoStaff << + \new Staff = "up" { + \new Voice = "melodieUn" { + \key g \major + \autochange \relative c' { + g8 b a c b d c e + d8 r fis, g a2 + } + } + } + \new Staff = "down" { + \key g \major + \clef bass + } +>> +@end lilypond + + +@seealso +Manuel de notation : +@ref{Changement de portée manuel}. + +Morceaux choisis : +@rlsrnamed{Keyboards, Claviers}. + +Référence des propriétés internes : +@rinternals{AutoChangeMusic}. + + +@knownissues + +@cindex accords, répartition sur plusieurs portées avec \autochange + +Les changements de portée automatiques n'interviennent pas toujours à +l'endroit le plus opportun. Pour un résultat de meilleure qualité, il +vaut mieux indiquer soi-même ces changements. + +Un accord ne peut se répartir sur plusieurs portées@tie{}; sa portée +d'affectation sera déterminée par la première hauteur mentionnée dans la +construction de cet accord. + +@code{\autochange} ne peut intervenir à l'intérieur d'une commande +@code{\times}. + + +@node Lignes de changement de portée +@unnumberedsubsubsec Lignes de changement de portée +@translationof Staff-change lines + +@cindex voix entre deux portées +@cindex changements de portée +@cindex mélodie d'une portée à une autre + +@funindex followVoice +@funindex \showStaffSwitch +@funindex showStaffSwitch +@funindex \hideStaffSwitch +@funindex hideStaffSwitch + +Lorsqu'une voix change de portée, il est possible d'imprimer +automatiquement une ligne reliant les notes, en faisant appel à la +commande @code{\showStaffSwitch}@tie{}: + +@lilypond[quote,verbatim,relative=1] +\new PianoStaff << + \new Staff = "one" { + \showStaffSwitch + c1 + \change Staff = "two" + b2 a + } + \new Staff = "two" { + \clef bass + s1*2 + } +>> +@end lilypond + + +@predefined +@code{\showStaffSwitch}, +@code{\hideStaffSwitch}. +@endpredefined + + +@seealso +Morceaux choisis : +@rlsrnamed{Keyboards, Claviers}. + +Référence des propriétés internes : +@rinternals{Note_head_line_engraver}, +@rinternals{VoiceFollower}. + + +@node Hampes et changements de portée +@unnumberedsubsubsec Hampes et changements de portée +@translationof Cross-staff stems + +@cindex hampe, enjambement portées +@cindex distance entre deux portées de piano + +@funindex Stem +@funindex cross-staff +@funindex length +@funindex flag-style + +Pour écrire des accords qui enjambent deux portées, on allonge la hampe +de l'accord de l'une des deux portées de façon à ce qu'elle rejoigne +celle de l'autre portée. + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff { + \relative c' { + f8 e4 d8 d f e4 + } + } + \new Staff { + \relative c' { + << { + \clef bass + % stems may overlap the other staff + \override Stem #'cross-staff = ##t + % extend the stems to reach the other staff + \override Stem #'length = #12 + % do not print extra flags + \override Stem #'flag-style = #'no-flag + % prevent beaming as needed + a8 g4 f8 f bes\noBeam g4 + } + \\ + { + f,2 bes4 c + } >> + } + } +>> +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{indicating-cross-staff-chords-with-arpeggio-bracket.ly} + + +@seealso +Morceaux choisis : +@rlsrnamed{Keyboards, Claviers}. + +Référence des propriétés internes : +@rinternals{Stem}. + + +@node Piano +@subsection Piano +@translationof Piano + +Ce chapitre traîte des aspects de la notation directement liés au piano. + +@menu +* Pédales de piano:: +@end menu + +@node Pédales de piano +@unnumberedsubsubsec Pédales de piano +@translationof Piano pedals + +@cindex piano et pédales +@cindex pédales de piano +@cindex sustain, pédale +@cindex pédale sustain +@cindex sostenuto, pédale +@cindex pédale sostenuto +@cindex una corda +@cindex tre corde +@cindex sos. +@cindex U.C. + +@funindex \sustainOn +@funindex sustainOn +@funindex \sustainOff +@funindex sustainOff +@funindex \sostenutoOn +@funindex sostenutoOn +@funindex \sostenutoOff +@funindex sostenutoOff +@funindex \unaCorda +@funindex unaCorda +@funindex \treCorde +@funindex treCorde + + +Le piano possède deux pédales, parfois trois, permettant de modifier +l'émission du son@tie{}: une pédale de @notation{tenue} +(@emph{sustain}), une pédale de @notation{sourdine} (@emph{una corda} ou +@emph{U.C.}) et une pédale @notation{tonale} (@emph{sostenuto} ou +@emph{sos.}). La pédale @emph{sustain} se rencontre aussi sur les +vibraphones et celestas. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn d e g +1\sustainOff +c4\sostenutoOn e g c, +1\sostenutoOff +c4\unaCorda d e g +1\treCorde +@end lilypond + +@cindex pédale, styles d'indications de +@cindex pédale, indication textuelle de +@cindex pédale, indication graphique de +@cindex pédale, indication combinée de +@cindex pédale sustain, style +@cindex sustain, style de pédale + +@funindex pedalSustainStyle +@funindex mixed +@funindex bracket +@funindex text + +Trois styles sont à votre disposition pour imprimer les indications de +pédale@tie{}: sous forme de texte, de crochet, ou une combinaison des +deux. @code{text} est le style de notation par défaut pour les pédales +de tenue ou de sourdine --- le traditionnel @q{*Ped.}. La pédale +tonale, en revanche, utilise @code{mixed} par défaut. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn g c2\sustainOff +\set Staff.pedalSustainStyle = #'mixed +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2\sustainOff +\set Staff.pedalSustainStyle = #'bracket +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2 +\bar "|." +@end lilypond + +Le placement des commandes de pédale correspond au mouvement de la +pédale de tenue pendant le jeu. Garder une pédale enclanchée jusqu'à la +barre finale s'obtient tout simplement en omettant la commande de +relâcher. + +Les indication de pédale peuvent s'inscrire dans un contexte +@code{Dynamics}, ce qui aura pour effet de leur attribuer une ligne en +propre. + +@seealso +Manuel de notation : +@ref{Liaisons de prolongation}. + +Morceaux choisis : +@rlsrnamed{Keyboards, Claviers}. + +Référence des propriétés internes : +@rinternals{SustainPedal}, +@rinternals{SustainPedalLineSpanner}, +@rinternals{SustainEvent}, +@rinternals{SostenutoPedal}, +@rinternals{SostenutoPedalLineSpanner}, +@rinternals{SostenutoEvent}, +@rinternals{UnaCordaPedal}, +@rinternals{UnaCordaPedalLineSpanner}, +@rinternals{UnaCordaEvent}, +@rinternals{PianoPedalBracket}, +@rinternals{Piano_pedal_engraver}. + + +@node Accordéon +@subsection Accordéon +@translationof Accordion + +@menu +* Symboles de jeux:: +@end menu + +@node Symboles de jeux +@unnumberedsubsubsec Symboles de jeux +@translationof Discant symbols + +@cindex accordéon, symboles de registre +@cindex registres, symboles pour accordéon +@cindex accordéon, tirettes +@cindex tirettes d'accordéon, symboles + +De nombreux accordéons possèdent plusieurs jeux d'anches capables de +jouer à l'unisson ou bien à l'octave inférieure ou supérieure par +rapport aux notes écrites. Chaque facteur d'accordéon donne des noms +différents aux @notation{tirettes} (@emph{shifts}) qui permettent de +sélectionner les différents jeux d'anches tels que @notation{hautbois}, +@notation{musette} ou @notation{bandonéon}, de telle sorte qu'un système +de symbole a fini par voir le jour afin de faciliter les instructions +pour exécuter un morceau. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{accordion-discant-symbols.ly} + + +@seealso +Morceaux choisis : +@rlsr{Keyboards}. + + +@node Harpe +@subsection Harpe +@translationof Harp + +This section discusses notation issues that are unique to the harp. + +@menu +* Généralités sur la harpe:: +* Pédales de harpe:: +@end menu + + +@node Généralités sur la harpe +@unnumberedsubsubsec Généralités sur la harpe +@translationof References for harps +@cindex harpes +@cindex bisbigliando + +Certaines caractéritiques de la musique pour harpes sont abordées dans +d'autres chapitres, telles que@tie{}: + +@itemize + +@item Les glissandos, l'une des techniques spécifique à la harpe, +@ref{Glissando}. + +@item Le @notation{bisbigliando}, qui s'écrit comme un trémolo, +@ref{Répétitions en trémolo}. + +@item Les harmoniques naturelles sont présentées dans @ref{Harmoniques}. + +@item For directional arpeggios and non-arpeggios, see @ref{Arpèges}. + +@end itemize + +@seealso +Manuel de notation : +@ref{Répétitions en trémolo}, +@ref{Glissando}, +@ref{Arpèges}, +@ref{Harmoniques}. + + +@node Pédales de harpe +@unnumberedsubsubsec Pédales de harpe +@translationof Harp pedals + +@cindex harpe, pédales +@cindex harpe, diagrammes de pédales +@cindex pédales de harpe +@cindex pédales, diagrammes pour harpe + +Les harpes comportent sept cordes par octave qui peuvent sonner +naturel, dièse ou bémol. Si chacune des cordes de la harpe celtique +(@emph{lever harp}) est accordée individuellement, celles d'une harpe à +pédalier ayant la même note de base sont contrôlées par une seule +pédale. De gauche à droite, elles correspondent aux notes ré, do, si, +et mi, fa, sol, la pour la grande harpe. Les trois premières pédales +sont réservées au pied gauche, les quatre dernières au pied droit. Leur +position peut être indiquée par une marque textuelle@tie{}: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup \concat \vcenter { + [D \flat C \sharp B|E \sharp F \sharp G A \flat] } +c!1_\markup \concat \vcenter { + [ C \natural ]} +@end lilypond + +ou bien sous forme de diagrammes@tie{}: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup { \harp-pedal #"^v-|vv-^" } +c!1_\markup { \harp-pedal #"^o--|vv-^" } +@end lilypond +bémol si la pédale est relâchée (ou en haut), bécarre si elle est +bloquée sur le cran du milieu, et dièse si elle est tout à fait +enfoncée. La commande @code{\harp-pedal} prend en argument une chaîne +de caractères, où @code{^} indique que la pédale est relâchée ou en haut +(bémol), @code{-} qu'elle est bloquée sur le cran du milieu (bécarre), +@code{v} qu'elle est tout à fait enfoncée (dièse) et @code{|} représente +le séparateur (entre gauche et droite de l'instrumentiste). Faire +précéder un symbole par un @code{o} permet de l'inscrire dans un cercle. + +@seealso +Manuel de notation : +@ref{Commentaires textuels}, +@ref{Instrument Specific Markup}. + diff --git a/Documentation/fr/notation/notation-appendices.itely b/Documentation/fr/notation/notation-appendices.itely new file mode 100644 index 0000000000..e6e8a4c7db --- /dev/null +++ b/Documentation/fr/notation/notation-appendices.itely @@ -0,0 +1,1071 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Frédéric Chiasson, Jean-Charles Malahieude + +@node Tables du manuel de notation +@appendix Tables du manuel de notation +@translationof Notation manual tables + +@menu +* Table des noms d'accord:: +* Modificateurs d'accord usuels:: +* Diagrammes d'accord prédéfinis:: +* Instruments MIDI:: +* Liste des couleurs:: +* La fonte Feta:: +* Styles de tête de note:: +* Text markup commands:: +* Text markup list commands:: +* Liste des signes d'articulation:: +* Notes utilisées en percussion:: +* Glossaire technique:: +* Liste des propriétés de contexte:: +* Propriétés de mise en forme:: +* Fonctions musicales:: +* Types de prédicats prédéfinis:: +* Fonctions Scheme:: +@end menu + + +@node Table des noms d'accord +@appendixsec Table des noms d'accord +@translationof Chord name chart + +La liste suivante répertorie les noms des accords selon les deux types +les plus répandus, ainsi que ce qu'ils représentent. + +@lilypondfile{chord-names-jazz.ly} + + +@node Modificateurs d'accord usuels +@appendixsec Modificateurs d'accord usuels +@translationof Common chord modifiers + +Le tableau suivant indique les différents modificateurs utilisables en +mode accords (@code{\chordmode}) qui permettent d'obtenir les structures +habituelles d'un certain nombre d'accords. + +@multitable @columnfractions .2 .3 .2 .2 + +@item +@b{Type d'accord} +@tab +@b{Intervalles} +@tab +@b{Modificateur(s)} +@tab +@b{Exemple} + + +@item +Majeur +@tab +Tierce mejeure et quinte juste +@tab +@code{5} ou rien +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:5 +} +@end lilypond + +@item +Mineur +@tab +Tierce minaure et quinte juste +@tab +@code{m} ou @code{m5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m +} +@end lilypond + +@item +Augmenté +@tab +Tierce majeure et quinte augmentée +@tab +@code{aug} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug +} +@end lilypond + +@item +Diminué +@tab +Tierce mineure et quinte diminuée +@tab +@code{dim} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim +} +@end lilypond + +@item +Septième de dominante +@tab +Triton majeur et septième mineure +@tab +@code{7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:7 +} +@end lilypond + +@item +Septième majeure +@tab +Triton majeur et septième majeure +@tab +@code{maj7} or @code{maj} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj7 +} +@end lilypond + +@item +Septième mineure +@tab +Triton mineur et septième mineure +@tab +@code{m7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7 +} +@end lilypond + +@item +Septième diminuée +@tab +Triton diminué et septième diminuée +@tab +@code{dim7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim7 +} +@end lilypond + +@item +Septième augmentée +@tab +Triton augmenté et septième mineure +@tab +@code{aug7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug7 +} +@end lilypond + +@item +Septième semi-diminuée +@tab +Triton diminué et septième mineure +@tab +@code{m7.5-} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7.5- +} +@end lilypond + +@item +Accord mineur avec septième majeure +@tab +Triton mineur et septième majeure +@tab +@code{maj7.3-} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj7.3- +} +@end lilypond + +@item +Sixte majeure +@tab +Triton majeur et sixte +@tab +@code{6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:6 +} +@end lilypond + +@item +Sixte mineure +@tab +Triton mineur et sixte +@tab +@code{m6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m6 +} +@end lilypond + +@item +Neuvième de dominante +@tab +Septième de dominante et neuvième majeure +@tab +@code{9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:9 +} +@end lilypond + +@item +Neuvième majeure +@tab +Septième majeure et neuvième majeure +@tab +@code{maj9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj9 +} +@end lilypond + +@item +Neuvième mineure +@tab +Septième mineure et neuvième majeure +@tab +@code{m9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m9 +} +@end lilypond + +@item +Onzième de dominante +@tab +Neuvième de dominante et onzième juste +@tab +@code{11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:11 +} +@end lilypond + +@item +Onzième majeure +@tab +Neuvième majeure et onzième juste +@tab +@code{maj11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj11 +} +@end lilypond + +@item +Onzième mineure +@tab +Neuvième mineure et onzième juste +@tab +@code{m11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m11 +} +@end lilypond + +@item +Trézième de dominante +@tab +Neuvième de dominante et trézième majeure +@tab +@code{13} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13 +} +@end lilypond + +@item +Trézième de dominante +@tab +Onzième de dominante et trézième majeure +@tab +@code{13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13.11 +} +@end lilypond + +@item +Trézième majeure +@tab +Onzième majeure et trézième majeure +@tab +@code{maj13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj13.11 +} +@end lilypond + +@item +Trézième mineure +@tab +Onzièmem mineure et trézième majeure +@tab +@code{m13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m13.11 +} +@end lilypond + +@item +Seconde suspendue +@tab +Seconde majeure et quinte juste +@tab +@code{sus2} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus2 +} +@end lilypond + +@item +Quarte suspendue +@tab +Quarte juste et quqinte juste +@tab +@code{sus4} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus4 +} +@end lilypond + + +@end multitable + + +@node Diagrammes d'accord prédéfinis +@appendixsec Diagrammes d'accord prédéfinis +@translationof Predefined fretboard diagrams + +La liste suivante répertorie les tablatures prédéfinies pour la guitare. + +@lilypondfile{display-predefined-fretboards.ly} + +La liste suivante répertorie les tablatures prédéfinies pour le ukulele. + +@lilypondfile{display-predefined-ukulele-fretboards.ly} + + +@node Instruments MIDI +@appendixsec Instruments MIDI +@translationof MIDI instruments + +La liste suivante répertorie les différentes dénominations que vous +pouvez affecter à la propriété @code{midiInstrument}. L'ordre dans +lequel ils sont rangés, par colonne, correspond aux 128 programmes du +standard @emph{General MIDI}. + +@example +acoustic grand contrabass lead 7 (fifths) +bright acoustic tremolo strings lead 8 (bass+lead) +electric grand pizzicato strings pad 1 (new age) +honky-tonk orchestral harp pad 2 (warm) +electric piano 1 timpani pad 3 (polysynth) +electric piano 2 string ensemble 1 pad 4 (choir) +harpsichord string ensemble 2 pad 5 (bowed) +clav synthstrings 1 pad 6 (metallic) +celesta synthstrings 2 pad 7 (halo) +glockenspiel choir aahs pad 8 (sweep) +music box voice oohs fx 1 (rain) +vibraphone synth voice fx 2 (soundtrack) +marimba orchestra hit fx 3 (crystal) +xylophone trumpet fx 4 (atmosphere) +tubular bells trombone fx 5 (brightness) +dulcimer tuba fx 6 (goblins) +drawbar organ muted trumpet fx 7 (echoes) +percussive organ french horn fx 8 (sci-fi) +rock organ brass section sitar +church organ synthbrass 1 banjo +reed organ synthbrass 2 shamisen +accordion soprano sax koto +harmonica alto sax kalimba +concertina tenor sax bagpipe +acoustic guitar (nylon) baritone sax fiddle +acoustic guitar (steel) oboe shanai +electric guitar (jazz) english horn tinkle bell +electric guitar (clean) bassoon agogo +electric guitar (muted) clarinet steel drums +overdriven guitar piccolo woodblock +distorted guitar flute taiko drum +guitar harmonics recorder melodic tom +acoustic bass pan flute synth drum +electric bass (finger) blown bottle reverse cymbal +electric bass (pick) shakuhachi guitar fret noise +fretless bass whistle breath noise +slap bass 1 ocarina seashore +slap bass 2 lead 1 (square) bird tweet +synth bass 1 lead 2 (sawtooth) telephone ring +synth bass 2 lead 3 (calliope) helicopter +violin lead 4 (chiff) applause +viola lead 5 (charang) gunshot +cello lead 6 (voice) +@end example + + +@node Liste des couleurs +@appendixsec Liste des couleurs +@translationof List of colors + +@subsubheading Couleurs de base + +La syntaxe appropriée à la gestion des couleurs est traitée au chapitre +@ref{Coloration d'objets}. + +@cindex Liste des couleurs +@cindex Couleurs, liste + +@verbatim +black white red green +blue cyan magenta yellow +grey darkred darkgreen darkblue +darkcyan darkmagenta darkyellow +@end verbatim + + +@subsubheading Noms de couleur X + +Les noms de couleur X peuvent s'employer de différentes manières. + +Un nom de couleur peut s'écrire sous la forme d'un mot composé et sans +espace auquel chaque élément prend un initiale capitalisée (p.ex. +@code{LightSlateBlue}). Il peut aussi s'exprimer sous la forme d'une +suite de mots, auquel cas les initiales ne sont pas capitalisées +(p.ex. @code{light@tie{}slate@tie{}blue}). + +Le @emph{gris} accepte aussi bien l'orthographe @qq{grey} que +@qq{gray} (p.ex. @code{DarkSlateGray}). + +Certains noms peuvent prendre un suffixe numérique, comme +@code{LightSalmon4}. + + +@subsubheading Noms de couleur sans suffixe numérique + +@verbatim +snow GhostWhite WhiteSmoke gainsboro FloralWhite +OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond +bisque PeachPuff NavajoWhite moccasin cornsilk +ivory LemonChiffon seashell honeydew MintCream +azure AliceBlue lavender LavenderBlush MistyRose +white black DarkSlateGrey DimGrey SlateGrey +LightSlateGrey grey LightGrey MidnightBlue navy +NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue +LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue +DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue +LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise +turquoise cyan LightCyan CadetBlue MediumAquamarine +aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen +MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen +green chartreuse MediumSpringGreen GreenYellow LimeGreen +YellowGreen ForestGreen OliveDrab DarkKhaki khaki +PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold +LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed +SaddleBrown sienna peru burlywood beige +wheat SandyBrown tan chocolate firebrick +brown DarkSalmon salmon LightSalmon orange +DarkOrange coral LightCoral tomato OrangeRed +red HotPink DeepPink pink LightPink +PaleVioletRed maroon MediumVioletRed VioletRed magenta +violet plum orchid MediumOrchid DarkOrchid +DarkViolet BlueViolet purple MediumPurple thistle +DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed +LightGreen +@end verbatim + + +@subsubheading Noms de couleur avec suffixe numérique + +Les couleurs suivantes acceptent un suffixe numérique @var{N} compris +entre 1 et 4. + +@verbatim +snowN seashellN AntiqueWhiteN bisqueN PeachPuffN +NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN +LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN +blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN +LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN +CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN +SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN +OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN +yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN +IndianRedN siennaN burlywoodN wheatN tanN +chocolateN firebrickN brownN salmonN LightSalmonN +orangeN DarkOrangeN coralN tomatoN OrangeRedN +redN DeepPinkN HotPinkN pinkN LightPinkN +PaleVioletRedN maroonN VioletRedN magentaN orchidN +plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN +thistleN +@end verbatim + + +@subsubheading Échelle de gris + +Une échelle de gris s'obtient en utilisant + +@example +greyN +@end example + +@noindent +où @var{N} est compris entre 0 et 100. + + +@node La fonte Feta +@appendixsec La fonte Feta +@translationof The Feta font + +@cindex Feta font +@cindex Font, Feta + +Voici, regroupés par type, les différents symboles de la fonte +Emmentaler qui peuvent s'inclure directement dans un objet +@emph{markup}. Pour ce faire, il suffit d'employer le nom du glyphe, +comme dans @w{@code{g^\markup @{\musicglyph #"scripts.segno" @}}} ou +@w{@code{\markup @{\musicglyph #"five"@}}}. Pour de plus amples +informations, reportez-vous au chapitre @ref{Mise en forme du texte}. + + +@menu +* Glyphes de clef:: +* Glyphes de métrique:: +* Glyphes de chiffre:: +* Glyphes d'altération:: +* Glyphes de tête de note par défaut:: +* Glyphes de tête de note spéciale:: +* Glyphes de tête de note à forme variable:: +* Glyphes de silence:: +* Glyphes de crochet de croche:: +* Glyphes de point:: +* Glyphes de nuance:: +* Glyphes de script:: +* Glyphes de flèche:: +* Glyphes d'extrémité d'accolade:: +* Glyphes de pédale:: +* Glyphes d'accordéon:: +* Glyphes de style vaticana:: +* Glyphes de style medicaea:: +* Glyphes de style Hufnagel:: +* Glyphes de style mensural:: +* Glyphes de style néomensural:: +* Glyphes de style Petrucci:: +* Glyphes de style Solesmes:: +@end menu + + +@node Glyphes de clef +@unnumberedsubsec Glyphes de clef +@translationof Clef glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #clefs +@end lilypond + + +@node Glyphes de métrique +@unnumberedsubsec Glyphes de métrique +@translationof Time Signature glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #timesig +@end lilypond + + +@node Glyphes de chiffre +@unnumberedsubsec Glyphes de chiffre +@translationof Number glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #numbers +@end lilypond + + +@node Glyphes d'altération +@unnumberedsubsec Glyphes d'altération +@translationof Accidental glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accidentals +@end lilypond + + +@node Glyphes de tête de note par défaut +@unnumberedsubsec Glyphes de tête de note par défaut +@translationof Default Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #default-noteheads +@end lilypond + + +@node Glyphes de tête de note spéciale +@unnumberedsubsec Glyphes de tête de note spéciale +@translationof Special Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #special-noteheads +@end lilypond + + +@node Glyphes de tête de note à forme variable +@unnumberedsubsec Glyphes de tête de note à forme variable +@translationof Shape-note Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #shape-note-noteheads +@end lilypond + + +@node Glyphes de silence +@unnumberedsubsec Glyphes de silence +@translationof Rest glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #rests +@end lilypond + + +@node Glyphes de crochet de croche +@unnumberedsubsec Glyphes de crochet de croche +@translationof Flag glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #flags +@end lilypond + + +@node Glyphes de point +@unnumberedsubsec Glyphes de point +@translationof Dot glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dots +@end lilypond + + +@node Glyphes de nuance +@unnumberedsubsec Glyphes de nuance +@translationof Dynamic glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dynamics +@end lilypond + + +@node Glyphes de script +@unnumberedsubsec Glyphes de script +@translationof Script glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #scripts +@end lilypond + + +@node Glyphes de flèche +@unnumberedsubsec Glyphes de flèche +@translationof Arrowhead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #arrowheads +@end lilypond + + +@node Glyphes d'extrémité d'accolade +@unnumberedsubsec Glyphes d'extrémité d'accolade +@translationof Bracket-tip glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #brackettips +@end lilypond + + +@node Glyphes de pédale +@unnumberedsubsec Glyphes de pédale +@translationof Pedal glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #pedal +@end lilypond + + +@node Glyphes d'accordéon +@unnumberedsubsec Glyphes d'accordéon +@translationof Accordion glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accordion +@end lilypond + + +@node Glyphes de style vaticana +@unnumberedsubsec Glyphes de style vaticana +@translationof Vaticana glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #vaticana +@end lilypond + + +@node Glyphes de style medicaea +@unnumberedsubsec Glyphes de style medicaea +@translationof Medicaea glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #medicaea +@end lilypond + + +@node Glyphes de style Hufnagel +@unnumberedsubsec Glyphes de style Hufnagel +@translationof Hufnagel glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #hufnagel +@end lilypond + + +@node Glyphes de style mensural +@unnumberedsubsec Glyphes de style mensural +@translationof Mensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #mensural +@end lilypond + + +@node Glyphes de style néomensural +@unnumberedsubsec Glyphes de style néomensural +@translationof Neomensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #neomensural +@end lilypond + + +@node Glyphes de style Petrucci +@unnumberedsubsec Glyphes de style Petrucci +@translationof Petrucci glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #petrucci +@end lilypond + + +@node Glyphes de style Solesmes +@unnumberedsubsec Glyphes de style Solesmes +@translationof Solesmes glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #solesmes +@end lilypond + + +@node Styles de tête de note +@appendixsec Styles de tête de note +@translationof Note head styles + +Voici les différents styles de tête de note disponibles. + +@lilypondfile[noindent]{note-head-style.ly} + + +@node Text markup commands +@appendixsec Text markup commands +@translationof Text markup commands + +Les commandes suivantes peuvent être utilisées dans un bloc +@code{\markup @{ @}}. + +@include markup-commands.tely + + +@node Text markup list commands +@appendixsec Text markup list commands +@translationof Text markup list commands + +Les commandes suivantes peuvent être utilisées dans un +bloc @code{\markuplines @{ @}}. + +@include markup-list-commands.tely + + +@node Liste des signes d'articulation +@appendixsec Liste des signes d'articulation +@translationof List of articulations + +@cindex accent +@cindex marcato +@cindex staccatissimo +@cindex espressivo +@cindex point d'orgue +@cindex point d'arrêt +@cindex staccato +@cindex portato +@cindex tenuto +@cindex tirer l'archet +@cindex pousser l'archet +@cindex bouché +@cindex sourdine +@cindex orgue, marque de pédale d' +@cindex grupetto +@cindex ouvert +@cindex flageolet +@cindex trille +@cindex mordant +@cindex ornementation baroque +@cindex baroque, ornementation +@cindex pouce +@cindex segno +@cindex coda +@cindex varcoda +@cindex pointe +@cindex talon + +Voici la liste exhaustive des symboles prédéfinis et que vous pouvez +attacher à une note (p.ex. @code{c\accent})@tie{}: + +@c Articulations and ornamentations +@c Fingering instructions (for "thumb") +@c Common notation for unfretted strings +@c Bowing indications +@c Harmonics +@c Snap (Bartók) pizzicato +@c Custom percussion staves (for "halfopen" -- not yet funindexed) +@c References for wind instruments (for "open"/"stopped" -- not yet funindexed) + + +@menu +* Scripts d'articulation:: +* Scripts d'ornement:: +* Scripts de point d'orgue et point d'arrêt:: +* Scripts spécifiques à certains instruments:: +* Scripts de reprise et de répétition:: +* Scripts pour musique ancienne:: +@end menu + + +@node Scripts d'articulation +@unnumberedsubsec Scripts d'articulation +@translationof Articulation scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #articulations } +@end lilypond + +@node Scripts d'ornement +@unnumberedsubsec Scripts d'ornement +@translationof Ornament scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #ornaments } +@end lilypond + +@node Scripts de point d'orgue et point d'arrêt +@unnumberedsubsec Scripts de point d'orgue et point d'arrêt +@translationof Fermata scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #fermatas } +@end lilypond + +@node Scripts spécifiques à certains instruments +@unnumberedsubsec Scripts spécifiques à certains instruments +@translationof Instrument-specific scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #instrument-specific } +@end lilypond + +@node Scripts de reprise et de répétition +@unnumberedsubsec Scripts de reprise et de répétition +@translationof Repeat sign scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #repeats } +@end lilypond + +@node Scripts pour musique ancienne +@unnumberedsubsec Scripts pour musique ancienne +@translationof Ancient scripts + +@lilypond[quote] +\include "script-chart.ly" +\include "gregorian.ly" +\new VaticanaStaff { \scriptStaffAncient #ancient } +@end lilypond + + +@node Notes utilisées en percussion +@appendixsec Notes utilisées en percussion +@translationof Percussion notes + +@lilypondfile[quote]{percussion-chart.ly} + + + +@node Glossaire technique +@appendixsec Glossaire technique +@translationof Technical glossary + +@untranslated + +@unnumberedsubsec callback +@unnumberedsubsec glyph +@unnumberedsubsec grob +@unnumberedsubsec interface +@unnumberedsubsec lexer +@unnumberedsubsec output-def +@unnumberedsubsec parser +@unnumberedsubsec parser variable +@unnumberedsubsec prob +@unnumberedsubsec simple-closure +@unnumberedsubsec smob +@unnumberedsubsec stencil + + +@node Liste des propriétés de contexte +@appendixsec Liste des propriétés de contexte +@translationof All context properties + +@include context-properties.tely + + +@node Propriétés de mise en forme +@appendixsec Propriétés de mise en forme +@translationof Layout properties + +@include layout-properties.tely + + +@node Fonctions mucicales +@appendixsec Fonctions mucicales +@translationof Available music functions + +@include identifiers.tely + + +@node Types de prédicats prédéfinis +@appendixsec Types de prédicats prédéfinis +@translationof Predefined type predicates + +@include type-predicates.tely + + +@node Fonctions Scheme +@appendixsec Fonctions Scheme +@translationof Scheme functions + +@include scheme-functions.tely diff --git a/Documentation/fr/notation/notation.itely b/Documentation/fr/notation/notation.itely new file mode 100644 index 0000000000..eefb9d653d --- /dev/null +++ b/Documentation/fr/notation/notation.itely @@ -0,0 +1,37 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 531484474ef15eb237ae185373bc95c37d0c0127 + + 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 Notation musicale générale +@chapter Notation musicale générale +@translationof Musical notation + +Ce chapitre explique comment créer la notation musicale standard. + +@menu +* Hauteurs:: écriture et gravure des hauteurs de note. +* Rythme:: écriture et gravure des durées. +* Signes d'interprétation:: ajout de signes d'exécution et d'interprétation. +* Répétitions et reprises:: différents types de répétitions de musique. +* Notes simultanées:: polyphonie et accords. +* Notation sur la portée:: gravure de la portée. +* Annotations éditoriales:: annotations d'édition ou à usage pédagogique. +* Texte:: ajout de texte à la partition. +@end menu + +@include notation/pitches.itely +@include notation/rhythms.itely +@include notation/expressive.itely +@include notation/repeats.itely +@include notation/simultaneous.itely +@include notation/staff.itely +@include notation/editorial.itely +@include notation/text.itely + diff --git a/Documentation/fr/notation/percussion.itely b/Documentation/fr/notation/percussion.itely new file mode 100644 index 0000000000..3724d56c74 --- /dev/null +++ b/Documentation/fr/notation/percussion.itely @@ -0,0 +1,339 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: ddf2c9d0e18c6ada1d14d5554f3adb8d972d84d5 + + 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" + +@c Translators: Valentin Villenave +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + +@node Percussions +@section Percussions +@translationof Percussion + +@menu +* Vue d'ensemble des percussions:: +@end menu + +@node Vue d'ensemble des percussions +@subsection Vue d'ensemble des percussions +@translationof Common notation for percussion + +La notation rythmique sert avant tout aux parties de percussions ou de +batterie, mais on peut aussi s'en servir à des fins pédagogiques, pour +montrer le rythme d'une mélodie. + + +@menu +* Références en matière de notation pour percussions:: +* Notation de base pour percussions:: +* Portées de percussion:: +* Notes fantômes:: +@end menu + +@node Références en matière de notation pour percussions +@unnumberedsubsubsec Références en matière de notation pour percussions +@translationof References for percussion + +@untranslated + + +@node Notation de base pour percussions +@unnumberedsubsubsec Notation de base pour percussions +@translationof Basic percussion notation + + +@cindex percussions +@cindex batterie + +Les parties de percussions peuvent être saisies avec le mode @code{\drummode}, +qui est l'équivalent du mode standard utilisé pour les notes à hauteur +déterminée. Chaque instrument de percussion peut avoir, dans le +fichier LilyPond, un nom complet et un nom raccourci. + + +@lilypond[quote,ragged-right,verbatim] +\drums { + hihat hh bassdrum bd +} +@end lilypond + + +Ces noms sont inventoriés dans le fichier d'initialisation +@file{ly/drumpitch-init.ly}. +@c TODO: properly document this. + + +@seealso +Référence du Programme : @rinternals{note-event}. + + +@node Portées de percussion +@unnumberedsubsubsec Portées de percussion +@translationof Percussion staves + + +@cindex percussions +@cindex batterie + +Une partie de percussions utilisant plusieurs instruments requiert en +général une portée de plusieurs lignes, où chaque hauteur sur la +portée représente un instrument à percussion. + +Pour saisir cette musique, il faut que les notes soient situées dans +des contextes @rinternals{DrumStaff} et @rinternals{DrumVoice}. + +@lilypond[quote,ragged-right,verbatim] +up = \drummode { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat } +down = \drummode { bassdrum4 snare8 bd r bd sn4 } + \new DrumStaff << + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } + >> +@end lilypond + +L'exemple ci-dessus montre une notation polyphonique détaillée. La +notation polyphonique abrégée peut être employée lorsque le contexte +@rinternals{DrumVoice} est spécifié explicitement : + +@lilypond[quote,ragged-right,verbatim] +\new DrumStaff << + \new DrumVoice = "1" { s1 *2 } + \new DrumVoice = "2" { s1 *2 } + \drummode { + bd4 sn4 bd4 sn4 + << + { \repeat unfold 16 hh16 } + \\ + { bd4 sn4 bd4 sn4 } + >> + } +>> +@end lilypond + +On peut choisir d'autres mises en forme si l'on définit la propriété +@code{drumStyleTable} dans le contexte @rinternals{DrumVoice}. +Quelques variables prédéfinies sont disponibles : + +@table @code +@item drums-style +La notation par défaut : une batterie standard, sur une portée de cinq lignes. + + +@lilypond[quote,line-width=10.0\cm] +nam = \lyricmode { + cymc cyms cymr hh hhc hho hhho hhp + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } +mus = \drummode { + cymc cyms cymr hh hhc hho hhho hhp \break + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } +\score { + << \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + \override VerticalAxisGroup #'minimum-Y-extent = #'(-4.0 . 5.0) + } \mus + \new Lyrics \nam + >> + \layout { + \context { + \Score + \override LyricText #'font-family = #'typewriter + \override BarNumber #'transparent =##T + } + } +} +@end lilypond + +Le plan de la batterie peut inclure jusqu'à six toms différents. Bien +sûr, vous n'êtes pas obligé de tous les utiliser si la musique en +prévoit moins ; par exemple, les trois toms des lignes du milieu sont +@code{tommh}, @code{tomml}, et @code{tomfh}. + +@item timbales-style +Ce style permet de saisir une partie de timbales, sur une portée à deux +lignes. + +@lilypond[quote,ragged-right] +nam = \lyricmode { timh ssh timl ssl cb } +mus = \drummode { timh ssh timl ssl cb s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + \override StaffSymbol #'line-count = #2 + \override StaffSymbol #'staff-space = #2 + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) + drumStyleTable = #timbales-style + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item congas-style +Ce style produit une portée à deux lignes pour une partie de congas. + +@lilypond[quote,ragged-right] +nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } +mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + drumStyleTable = #congas-style + \override StaffSymbol #'line-count = #2 + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item bongos-style +Ce style produit une portée à deux lignes pour une partie de bongos. + + +@lilypond[quote,ragged-right] +nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } +mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override StaffSymbol #'line-count = #2 + drumStyleTable = #bongos-style + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item percussion-style +Ce style permet de saisir toute sorte de percussions sur des portées +d'une ligne. + +@lilypond[quote,ragged-right] +nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } +mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } + +<< + \new DrumStaff \with{ + \remove Bar_engraver + drumStyleTable = #percussion-style + \override StaffSymbol #'line-count = #1 + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond +@end table + +Cependant, si aucun des styles prédéfinis ne vous convient, il est aisé +de définir le vôtre en début de fichier. + +@lilypond[quote,ragged-right,verbatim] +#(define mydrums '( + (bassdrum default #f -1) + (snare default #f 0) + (hihat cross #f 1) + (halfopenhihat cross "halfopen" 1) + (pedalhihat xcircle "stopped" 2) + (lowtom diamond #f 3))) +up = \drummode { hh8 hh hhho hhho hhp4 hhp } +down = \drummode { bd4 sn bd toml8 toml } + +\new DrumStaff << + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + + +@seealso +Fichier d'initialisation : @file{ly/drumpitch-init.ly}. + +Référence du programme : @rinternals{DrumStaff}, @rinternals{DrumVoice}. + + +@knownissues + +La bibliothèque MIDI générale ne contient pas les @emph{rimshots} --- coups +sur le bord de la caisse claire --- donc ils sont remplacés par des +@emph{sidesticks,} largement équivalents. + + + +@node Notes fantômes +@unnumberedsubsubsec Notes fantômes +@translationof Ghost notes + + +Des notes fantômes peuvent être créées pour les parties de percussion, +grâce à la commande @code{\parenthesize} décrite dans +@ref{Parenthèses}. Cependant, le mode @code{\drummode} n'inclut pas par +défaut le graveur @code{Parenthesis_engraver} qui permet d'imprimer ces +signes. Il faut donc l'ajouter explicitement dans la définition du +contexte, suivant la manœuvre indiquée dans @ref{La commande set}. + +@lilypond[quote,ragged-right,verbatim] +\new DrumStaff \with { + \consists "Parenthesis_engraver" +} << + \context DrumVoice = "1" { s1 *2 } + \context DrumVoice = "2" { s1 *2 } + \drummode { + << + { + hh8[ hh] hh16 + < \parenthesize sn > hh < \parenthesize + sn > hh8 hh + } \\ { + bd4 r4 bd8 bd r8 bd + } + >> + } +>> +@end lilypond + +@noindent +Notez que les commandes @code{\parenthesize} obligent à ajouter des +accords --- sous la forme @code{< >} --- autour de chaque élément. + + + + diff --git a/Documentation/fr/notation/pitches.itely b/Documentation/fr/notation/pitches.itely new file mode 100644 index 0000000000..1f76c53db4 --- /dev/null +++ b/Documentation/fr/notation/pitches.itely @@ -0,0 +1,2758 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 20a4e530e15d5e9d3a679067aa6124a2740031de + + 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" + +@c Translators: Frédéric Chiasson +@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude + +@node Hauteurs +@section Hauteurs +@translationof Pitches + +@lilypondfile[quote]{pitches-headword.ly} + +Cette section détaille la façon d'indiquer la hauteur des notes, sous +trois aspects@tie{}: la saisie des hauteurs, la modification des +hauteurs et les options de gravure. + +@menu +* Écriture des hauteurs de note:: +* Modification de plusieurs hauteurs:: +* Gravure des hauteurs:: +* Têtes de note:: +@end menu + + +@node Écriture des hauteurs de note +@subsection Écriture des hauteurs de note +@translationof Writing pitches + +Cette section explique la manière d'indiquer les hauteurs de note. Deux +modes permettent d'indiquer l'octave des notes@tie{}: le mode absolu, et le +mode relatif. Ce dernier est le plus pratique lors de la saisie d'un +fichier source au clavier de l'ordinateur. + +@menu +* Hauteurs avec octave absolue:: +* Octaves relatives:: +* Altérations:: +* Nom des notes dans d'autres langues:: +@end menu + +@node Hauteurs avec octave absolue +@unnumberedsubsubsec Hauteurs avec octave absolue +@translationof Absolute octave entry + +@cindex noms de note +@cindex hauteurs +@cindex absolues, hauteurs +@cindex absolues, octaves +@cindex octaves absolues + +La hauteur s'écrit -- à moins de préciser une autre langue -- avec la +notation batave, en utilisant les lettres de @code{a} à @code{g}. +Les notes @code{c} (do) et @code{b} (si) sont écrites une octave sous le +do central. + +@c don't use c' here. +@lilypond[verbatim,quote] +{ + \clef bass + c4 d e f + g4 a b c + d4 e f g +} +@end lilypond + +@cindex octave, spécification + +@funindex ' +@funindex , + +L'octave peut être précisée sous forme d'une série +d'apostrophes@tie{}@code{'} ou d'une série de virgules@tie{}@code{,}. +Chaque@tie{}@code{'} hausse la note d'une octave@tie{}; +chaque@tie{}@code{,} baisse la note d'une octave. + +@lilypond[verbatim,quote] +{ + \clef treble + c'4 c'' e' g + d''4 d' d c + \clef bass + c,4 c,, e, g + d,,4 d, d c +} +@end lilypond + + +@seealso +Glossaire musicologique : +@rglosnamed{Pitch names,Noms des notes}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + + +@node Octaves relatives +@unnumberedsubsubsec Octaves relatives +@translationof Relative octave entry + +@cindex relatif +@cindex indication d'octave relative +@cindex octave relative, indication + +@funindex \relative +@funindex relative +@funindex \transpose +@funindex transpose + +On spécifie les octaves en ajoutant@tie{}@code{'} ou@tie{}@code{,} aux +noms de hauteur. En recopiant de la musique, on a vite fait de mettre +une note à la mauvaise octave@tie{}; ce genre d'erreur est difficile à +retrouver. Le mode d'écriture en octave relative prévient ces erreurs +dans la mesure où elles deviennent beaucoup plus évidentes@tie{}: une +seule erreur décale le reste de la pièce à une mauvaise octave. + + +@example +\relative @var{hauteur_de_référence} @var{expression_musicale} +@end example + +En mode relatif, chaque note est considérée comme étant le plus proche +possible de celle qui la précède. L'octave des notes mentionnées dans +@var{expression_musicale} va être calculée de la manière suivante@tie{}: + +@itemize +@item +Si aucun signe de changement d'octave n'est utilisé, l'intervalle de +base entre la note actuelle et la précédente sera toujours au plus d'une +quarte. Cet intervalle est déterminé sans tenir compte des altérations. + +@item +Un signe de changement d'octave@tie{}@code{'} ou@tie{}@code{,} peut être +ajouté pour hausser ou baisser la note d'une octave par rapport à la +hauteur calculée sans spécification. + +@item +Ces signes de changement d'octave peuvent être multipliés. Par exemple, +@code{''}@tie{}ou@tie{}@code{,,} ajouteront une octave supplémentaire. + +@item +Lorsque l'on entre en mode @code{\relative}, une hauteur absolue de +départ peut être spécifiée, et agira dès lors comme si elle précédait la +première note de @var{expression_musicale}. Nous vous recommandons de +faire référence à un do (@code{c}). + +@end itemize + +Voici le mode @code{\relative} en action. + +@lilypond[verbatim,quote] +\relative c { + \clef bass + c d e f + g a b c + d e f g +} +@end lilypond + +On utilise les signes de changement d'octave pour les intervalles +dépassant la quarte. + +@lilypond[verbatim,quote] +\relative c'' { + c g c f, + c' a, e'' c +} +@end lilypond + +Bien que ne comportant aucun signe de changement d'octave, une séquence +de notes peut tout à fait couvrir un intervalle important. + +@lilypond[verbatim,quote] +\relative c { + c f b e + a d g c +} +@end lilypond + +Lorsque plusieurs blocs @code{\relative} sont imbriqués, c'est la +dernière clause @code{\relative} qui est prise en compte. + +@lilypond[verbatim,quote] +\relative c' { + c d e f + \relative c'' { + c d e f + } +} +@end lilypond + +@funindex \chordmode +@funindex chordmode + +@code{\relative} est sans effet sur un bloc @code{\chordmode}. + +@lilypond[verbatim,quote] +\new Staff { + \relative c''' { + \chordmode { c1 } + } + \chordmode { c1 } +} +@end lilypond + +@code{\relative} n'est pas permis au sein d'un bloc @code{\chordmode}. + +@cindex octave relative et transposition +@cindex transposition et mode octave relative + +@funindex \transpose +@funindex transpose + +Pour utiliser le mode d'octave relative dans de la musique transposée, +une clause @code{\relative} additionnelle doit être placée au sein du +bloc @code{\transpose}. + +@lilypond[verbatim,quote] +\relative c' { + d e + \transpose f g { + d e + \relative c' { + d e + } + } +} +@end lilypond + + +@cindex accords et octave relative +@cindex octave relative et accords + + +Si l'expression précédente est un accord, c'est la première note de +l'accord qui détermine l'emplacement de la première note du prochain +accord. À l'intérieur de l'accord, les notes sont placées relativement +à celle qui précède. Examinez avec attention l'exemple suivant, et tout +particulièrement le positionnement des do. + +@lilypond[verbatim,quote] +\relative c' { + c + + + +} +@end lilypond + +Comme nous l'avons vu, l'octaviation est déterminée sans tenir compte +des altérations. Ainsi un mi double-dièse qui suit un si naturel sera +placé au-dessus de celui-ci, alors qu'un fa double-bémol se retrouvera +en dessous. En d'autres termes, une quarte doublement augmentée +demeure considérée comme un intervalle plus petit qu'une quinte +diminuée, bien que la quarte doublement augmentée soit de sept demi-tons +et la quinte diminuée de seulement six demi-tons. + +@lilypond[verbatim,quote] +\relative c'' { + c2 fis + c2 ges + b2 eisis + b2 feses +} +@end lilypond + + +@seealso +Glossaire musicologique : +@rglosnamed{fifth,quinte}, +@rglosnamed{interval,intervalle}, +@rglosnamed{Pitch names,nom des notes}. + +Manuel de notation : +@ref{Vérifications d'octave}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{RelativeOctaveMusic}. + + +@node Altérations +@unnumberedsubsubsec Altérations +@translationof Accidentals + +@cindex altération +@cindex armure +@cindex clef + +@c duplicated in Key signature and in Accidentals +@warning{Les nouveaux utilisateurs sont parfois déroutés par la gestion +des altérations et de l'armure. Pour LilyPond, une hauteur n'est que du +matériau brut@tie{}; l'armure et la clef ne feront que déterminer +comment ce matériau sera retranscrit. Un simple@tie{}@code{c} signifie +tout bonnement @w{@qq{do naturel}} quelles que soient l'armure et la clef +en question. Pour plus d'information, reportez-vous au chapitre +@rlearning{Altérations et armure}.} + +@cindex noms de note, hollandais +@cindex noms de note, par défaut +@cindex dièse +@cindex bémol +@cindex double dièse +@cindex double bémol +@cindex flat, double +@cindex naturel +@cindex bécarre + +Dans la notation par défaut, un @notation{dièse} est formé en ajoutant +@code{is} après le nom de note, un @notation{bémol} en ajoutant +@code{es}. Les @notation{double-dièses} et @notation{double-bémols} +sont obtenus en ajoutant respectivement @code{isis} ou @code{eses} au +nom de note. Ce sont les noms de note hollandais. Pour les autres +langues, consultez @ref{Nom des notes dans d'autres langues}. + +@lilypond[verbatim,quote,relative=2] +ais1 aes aisis aeses +@end lilypond + +Un bécarre annule l'effet d'une altération, qu'elle soit accidentelle +ou à l'armure. Cependant, dans la syntaxe des noms de note, les +bécarres ne s'écrivent pas avec un suffixe@tie{}; un simple nom de note +donnera une note bécarre. + +@lilypond[verbatim,quote,relative=2] +a4 aes a2 +@end lilypond + +@cindex quarts de ton +@cindex demi-bémols +@cindex demi-dièses + +Les demi-bémols et demi-dièses s'écrivent en ajoutant respectivement +@code{eh} et @code{ih}. Voici une série de dos altérés en hauteurs +croissantes@tie{}: + +@lilypond[verbatim,quote,relative=2] +ceseh1 ces ceh c cih cis cisih +@end lilypond + +Les micro-intervalles sont aussi exportés dans le fichier MIDI. + + +@cindex altération de précaution +@cindex altération entre parenthèses +@cindex précaution, altération de +@cindex parenthèses, altération entre + +@funindex ? +@funindex ! + +Normalement, les altérations sont imprimées automatiquement, mais il se +peut que vous vouliez les imprimer manuellement. On peut forcer +l'impression d'une altération, dite @qq{de précaution}, en ajoutant un +point d'exclamation@tie{}@code{!} après la hauteur de note. Une +altération entre parenthèses peut être obtenue en ajoutant un point +d'interrogation@tie{}@code{?} après la hauteur de note. Ces signes +peuvent aussi être utilisés pour imprimer des bécarres. + +@lilypond[verbatim,quote,relative=2] +cis cis cis! cis? c c c! c? +@end lilypond + +@cindex altération et liaison de tenue +@cindex liaison de tenue et altération + +Lorsqu'une note est prolongée par une liaison de tenue, l'altération ne +sera réimprimée que s'il y a un saut de ligne. + +@lilypond[verbatim,quote,relative=2] +cis1 ~ cis ~ +\break +cis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle,ragged-right] +{hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly} + +@lilypondfile[verbatim,lilyquote,texidoc, doctitle] +{preventing-extra-naturals-from-being-automatically-added.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{sharp,dièse}, +@rglosnamed{flat,bémol}, +@rglosnamed{double sharp,double dièse}, +@rglosnamed{double flat,double bémol}, +@rglosnamed{Pitch names,Nom des notes}, +@rglosnamed{quarter tone,quart de ton}. + +Manuel d'initiation : +@rlearning{Altérations et armure}. + +Manuel de notation : +@ref{Altérations accidentelles automatiques}, +@ref{Altérations accidentelles suggérées}, +@ref{Nom des notes dans d'autres langues}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Références des propriétés internes : +@rinternals{Accidental_engraver}, +@rinternals{Accidental}, +@rinternals{AccidentalCautionary}, +@rinternals{accidental-interface}. + + +@cindex accidentel, quart de ton +@cindex quart de ton + +@knownissues + +Il n'y a pas de standard universellement accepté pour noter le bémol et +demi (qui abaisse la hauteur trois quarts de ton), le symbole de +LilyPond n'est donc conforme à aucun standard. + + + +@node Nom des notes dans d'autres langues +@unnumberedsubsubsec Nom des notes dans d'autres langues +@translationof Note names in other languages + +@cindex notes, noms selon la langue +@cindex noms de note, langues +@cindex langues, noms de note + +Vous disposez de jeux prédéfinis de noms de note et altérations pour +plusieurs autres langues. Pour les utiliser, il suffit de déclarer, en +début de fichier, la langue que vous utilisez. Voici comment, par +exemple, utiliser l'italien pour votre saisie@tie{}: + +@lilypond[quote,verbatim] +\language "italiano" + +\relative do' { + do re mi sib +} +@end lilypond + +Les langues disponibles ainsi que les noms de note utilisés +sont les suivants@tie{}: + +@quotation +@multitable {@code{nederlands}} {do re mi fa sol la sib si} +@headitem Langue + @tab Nom des notes +@item @code{nederlands} + @tab c d e f g a bes b +@item @code{catalan} + @tab do re mi fa sol la sib si +@item @code{deutsch} + @tab c d e f g a b h +@item @code{english} + @tab c d e f g a bf b +@item @code{espanol} + @tab do re mi fa sol la sib si +@item @code{italiano} + @tab do re mi fa sol la sib si +@item @code{norsk} + @tab c d e f g a b h +@item @code{portugues} + @tab do re mi fa sol la sib si +@item @code{suomi} + @tab c d e f g a b h +@item @code{svenska} + @tab c d e f g a b h +@item @code{vlaams} + @tab do re mi fa sol la sib si +@end multitable +@end quotation + +@noindent +et les suffixes d'altération correspondants@tie{}: + +@quotation +@multitable {@code{nederlands}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} +@headitem Langue + @tab dièse @tab bémol @tab double dièse @tab double bémol +@item @code{nederlands} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{catalan} + @tab -d/-s @tab -b @tab -dd/-ss @tab -bb +@item @code{deutsch} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{english} + @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp + @tab -ff/-flatflat +@item @code{espanol} + @tab -s @tab -b @tab -ss/-x @tab -bb +@item @code{italiano} + @tab -d @tab -b @tab -dd @tab -bb +@item @code{norsk} + @tab -iss/-is @tab -ess/-es @tab -ississ/-isis + @tab -essess/-eses +@item @code{portugues} + @tab -s @tab -b @tab -ss @tab -bb +@item @code{suomi} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{svenska} + @tab -iss @tab -ess @tab -ississ @tab -essess +@item @code{vlaams} + @tab -k @tab -b @tab -kk @tab -bb +@end multitable +@end quotation + +@noindent +Notez qu'en hollandais, en allemand, en norvégien et en suédois, un +@notation{la} altéré de @notation{bémol} se note @code{aes} et +@code{aeses}. Ces formes sont contractées en @code{as} et @code{ases} +(ou plus communément @code{asas}). Dans certains fichiers +linguistiques, seules ces formes abrégées ont été définies. + +@lilypond[verbatim,quote,relative=2] +a2 as e es a ases e eses +@end lilypond + + +@cindex microtonalités +@cindex demi-dièse +@cindex demi-bémol +@cindex sesqui-dièse +@cindex sesqui-bémol + +@noindent +Certaines musiques utilisent des microtonalités, pour lesquelles les +altérations sont des fractions de dièse ou bémol @qq{normaux}. Le +tableau suivant répertorie les noms de note en quart de ton, tels que +définis dans plusieurs fichiers linguistiques. Les préfixes @emph{semi-} +et @emph{sesqui-} correspondent au @emph{demi-} et @emph{trois demis}. +À noter qu'aucune définition n'existe à ce jour pour le norvégien, le +suédois, le catalan et l'espagnol. + +@quotation +@multitable {@code{nederlands}} {@b{semi-sharp}} {@b{semi-flat}} {@b{sesqui-sharp}} {@b{sesqui-flat}} +@headitem Langue + @tab semi-dièse @tab semi-bémol @tab sesqui-dièse @tab sesqui-bémol +@item @code{nederlands} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{deutsch} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{english} + @tab -qs @tab -qf @tab -tqs @tab -tqf +@item @code{espanol} + @tab -cs @tab -cb @tab -tcs @tab -tcb +@item @code{italiano} + @tab -sd @tab -sb @tab -dsd @tab -bsb +@item @code{portugues} + @tab -sqt @tab -bqt @tab -stqt @tab -btqt +@end multitable +@end quotation + +La plupart des langues dont nous venons de parler correspondent à la +musique classique occidentale au tempérament égal -- le concept de +@emph{Common Practice Period} en anglais. LilyPond prend néanmoins en +charge d'autres systèmes de notation, comme indiqué au chapitre +@ref{Noms de note et altérations non-occidentaux}. + + +@seealso +Glossaire musicologique : +@rglosnamed{Pitch names,Nom des notes}, +@rglos{Common Practice Period}. + +Manuel de notation : +@ref{Noms de note et altérations non-occidentaux}. + +Fichiers d'initialisation : +@file{scm/define-note-names.scm}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + + +@node Modification de plusieurs hauteurs +@subsection Modification de plusieurs hauteurs +@translationof Changing multiple pitches + +Cette partie traite de la manière de modifier les hauteurs de note. + +@menu +* Vérifications d'octave:: +* Transposition:: +@end menu + +@node Vérifications d'octave +@unnumberedsubsubsec Vérifications d'octave +@translationof Octave checks + +@cindex vérification d'octave +@cindex octave, vérification +@cindex contrôle des hauteurs + +@funindex = +@funindex \octaveCheck +@funindex octaveCheck +@funindex controlpitch + + +Les tests d'octave rendent la correction d'erreurs d'octave plus facile +dans le mode d'octave @code{relative} -- un@tie{}@code{,} ou +un@tie{}@code{'} oublié, ça n'arrive pas qu'aux autres@tie{}! + +Une note peut être suivie de @w{@code{=}@var{apostrophes/virgules}} +pour indiquer à quelle @strong{octave absolue} elle devrait être. Dans +l'exemple suivant, le premier @code{d} générera un avertissement, +puisqu'on attend un @code{d''} -- intervalle inférieur à la quarte -- +mais qu'on obtient un @code{d'}. Sur la partition, l'octave sera +corrigée pour donner un @code{d'} et la prochaine note sera calculée en +fonction de ce @code{d'} et non de @code{d''}. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d='4 d + e2 f +} +@end lilypond + +Il existe aussi une vérification d'octave qui ne produit pas de musique +imprimée, ayant pour syntaxe +@code{\octaveCheck}@tie{}@var{hauteur_référence} -- +@code{@var{hauteur_référence}} étant spécifiée en mode absolu. Cette +commande vérifie que l'intervalle entre la note qui précède et +@code{@var{hauteur_référence}} est inférieur à la quinte comme il se +doît en mode relatif. Dans le cas contraire, un message sera émis et la +note précédente ne sera pas modifiée. Les notes suivantes seront, par +contre, positionnées relativement à @code{@var{hauteur_référence}}. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d + \octaveCheck c' + e2 f +} +@end lilypond + +Dans les deux mesures qui suivent, les premier et troisième +@code{\octaveCheck} échouent, mais le deuxième est concluant. + +@lilypond[verbatim,quote] +\relative c'' { + c4 f g f + + c4 + \octaveCheck c' + f + \octaveCheck c' + g + \octaveCheck c' + f +} +@end lilypond + + +@seealso +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{RelativeOctaveCheck}. + + +@node Transposition +@unnumberedsubsubsec Transposition +@translationof Transpose + +@cindex transposition +@cindex transposition des hauteurs + +@funindex \transpose +@funindex transpose + +Une expression musicale peut être transposée avec @code{\transpose}. +En voici la syntaxe@tie{}: + +@example +\transpose @var{note_de_départ} @var{note_d_arrivée} @var{expression_musicale} +@end example + +@noindent +Cela signifie que @code{@var{expression_musicale}} est transposé de +l'intervalle séparant @code{@var{note_de_départ}} et +@code{@var{note_d_arrivée}}@tie{}: toute note dont la hauteur était +@code{note_de_départ} est changée en @code{note_d_arrivée}@tie{}; les +autres notes seront changées selon le même intervalle. Les deux +hauteurs s'expriment en octave absolue. + +@warning{La musique contenue dans un bloc @code{@bs{}transpose} est en +octaves absolus, sauf à inclure dans ce même bloc une clause +@code{@bs{}relative}.} + +Prenons comme exemple une pièce écrite en ré majeur. Si cette pièce est +un peu trop basse pour l'interprète, elle peut être transposée en mi +majeur. Vous noterez que l'armure est automatiquement modifiée. + +@lilypond[verbatim,quote] +\transpose d e { + \relative c' { + \key d \major + d4 fis a d + } +} +@end lilypond + +@cindex transpositeur, instrument +@cindex instruments transpositeurs + +Regardons maintenant une partie écrite pour violon -- un instrument en +ut. Si cette partie doit être jouée par une clarinette en la (écrite à +la tierce mineure supérieure, un do écrit donnant un la réel), la +transposition suivante créera la partie appropriée. + +@lilypond[verbatim,quote] +\transpose a c' { + \relative c' { + \key c \major + c4 d e g + } +} +@end lilypond + +@noindent +La présence de @w{@code{\key c \major}} s'explique par le fait que, bien +que les notes soient effectivement transposées, l'armure ne sera +imprimée que dans la mesure où elle est explicitement mentionnée. + +@code{\transpose} fait la distinction entre les notes enharmoniques@tie{}: +@w{@code{\transpose c cis}} et @w{@code{\transpose c des}} transposeront +la pièce un demi-ton plus haut, au détail près que la première version +écrira des dièses et la deuxième des bémols. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \transpose c cis { \music } + \transpose c des { \music } +} +@end lilypond + +On peut aussi utiliser @code{\transpose} pour entrer des notes écrites +pour un instrument transpositeur. Normalement, les hauteurs dans +LilyPond sont écrites en ut, c'est à dire en sons réels, mais elles +peuvent être écrites dans un autre ton. Prenons l'exemple d'un morceau +pour trompette en si bémol commençant sur un ré à l'oreille@tie{}; on +pourrait écrire + +@example +musiqueEnSiBemol = @{ e4 @dots{} @} +\transpose c bes, \musiqueEnSiBemol +@end example + +@noindent +Pour imprimer cette musique en fa -- et de ce fait produire une partie +de cor au lieu d'un conducteur en notes réelles -- on utilisera un +deuxième @code{\transpose}@tie{}: + +@example +musiqueEnSiBemol = @{ e4 @dots{} @} +\transpose f c' @{ \transpose c bes, \musiqueEnSiBemol @} +@end example + +@noindent +Pour plus d'information à ce sujet, consultez +@ref{Instruments transpositeurs}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} + + +@seealso +Manuel de notation : +@ref{Octaves relatives}, +@ref{Instruments transpositeurs}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriété internes : +@rinternals{TransposedMusic}. + + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + +@knownissues + +Si vous voulez utiliser en même temps @code{@bs{}transpose} et +@code{@bs{}relative}, vous devez mettre @code{@bs{}transpose} en dehors de +@code{@bs{}relative}, puisque @code{@bs{}relative} n'aura aucun effet sur la +musique apparaissant dans un @code{@bs{}transpose}. + +@node Gravure des hauteurs +@subsection Gravure des hauteurs +@translationof Displaying pitches + +Nous allons voir dans cette partie comment influer sur la gravure des +hauteurs. + +@menu +* Clefs:: +* Armure:: +* Marques d'octaviation:: +* Instruments transpositeurs:: +* Altérations accidentelles automatiques:: +* Ambitus:: +@end menu + +@node Clefs +@unnumberedsubsubsec Clefs +@translationof Clef + +@cindex clé de sol +@cindex clé de fa +@cindex clé d'ut + +@funindex \clef +@funindex clef + +La clef indique quelles lignes de la portée correspondent à quelles +hauteurs. Elle peut changer au fil du morceau, comme dans l'exemple +suivant qui indique le do médium dans différentes clefs@tie{}: + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef alto +c2 c +\clef tenor +c2 c +\clef bass +c2 c +@end lilypond + +LilyPond met à votre disposition d'autres clefs@tie{}: + +@lilypond[verbatim,quote,relative=1] +\clef french +c2 c +\clef soprano +c2 c +\clef mezzosoprano +c2 c +\clef baritone +c2 c + +\break + +\clef varbaritone +c2 c +\clef subbass +c2 c +\clef percussion +c2 c + +\break + +\clef G % synonym for treble +c2 c +\clef F % synonym for bass +c2 c +\clef C % synonym for alto +c2 c +@end lilypond + +@cindex transposition et clef +@cindex clef et transposition +@cindex octave et clef +@cindex chorale, clef de tenor +@cindex tenor, clef + +En ajoutant @code{_8} ou @code{^8} au nom de la clé, celle-ci est +transposée à l'octave respectivement inférieure ou supérieure, et +@code{_15} ou @code{^15} la transpose de deux octaves. D'autres nombres +entiers peuvent être utilisés selon les besoins. L'argument +@var{clefname} doit être mis entre guillemets lorsqu'il contient des +caractères supplémentaires. Par exemple, + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef "treble_8" +c2 c +\clef "bass^15" +c2 c +\clef "alto_2" +c2 c +\clef "G_8" +c2 c +\clef "F^5" +c2 c +@end lilypond + +Il existe d'autres clefs, destinées à un usage particulier. Voir à ce +sujet @ref{Notations anciennes} +@c r ef{Mensural clefs}, @c r ef{Gregorian clefs}, +@ref{Tablatures par défaut} et @ref{Tablatures personnalisées}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-clef-properties.ly} + + +@seealso +Manuel de notation : +@ref{Notations anciennes}, +@c r ef{Mensural clefs}, +@c r ef{Gregorian clefs}, +@ref{Tablatures par défaut}, +@ref{Tablatures personnalisées}. + +Morceaux choisis: +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{Clef_engraver}, +@rinternals{Clef}, +@rinternals{OctavateEight}, +@rinternals{clef-interface}. + + +@node Armure +@unnumberedsubsubsec Armure +@translationof Key signature + +@cindex armure + +@funindex \key +@funindex key + +@c duplicated in Key signature and in Accidentals +@warning{Les nouveaux utilisateurs sont parfois déroutés par la gestion +des altérations et de l'armure. Pour LilyPond, une hauteur n'est que du +matériau brut@tie{}; l'armure et la clef ne feront que déterminer +comment ce matériau sera retranscrit. Un simple@tie{}@code{c} signifie +tout bonnement @w{@qq{do naturel}} quelles que soient l'armure et la +clef en question. Pour plus d'information, reportez-vous au chapitre +@rlearning{Altérations et armure}.} + +L'armure indique la tonalité dans laquelle la pièce doit être jouée. +Elle comprend un ensemble d'altérations (dièses ou bémols) à la clef, +c'est-à-dire au début de la portée. Elle peut varier en cours de +morceau. + +On définit ou modifie l'armure avec la commande @code{\key} + +@example +@code{\key} @var{hauteur} @var{mode} +@end example + +@funindex \major +@funindex major +@funindex \minor +@funindex minor +@funindex \ionian +@funindex ionian +@funindex \locrian +@funindex locrian +@funindex \aeolian +@funindex aeolian +@funindex \mixolydian +@funindex mixolydian +@funindex \lydian +@funindex lydian +@funindex \phrygian +@funindex phrygian +@funindex \dorian +@funindex dorian + +@cindex modes anciens +@cindex modes +@cindex majeur +@cindex mineur +@cindex ionien +@cindex locrien +@cindex éolien +@cindex mixolydien +@cindex lydien +@cindex phrygien +@cindex dorien + +@noindent +Ici, @code{@var{mode}} doit être @code{\major} ou @code{\minor} afin +d'avoir respectivement @var{hauteur}-majeur ou @var{hauteur}-mineur. +Vous pouvez aussi avoir recours aux modes anciens que sont +@code{\ionian}, @code{\locrian}, @code{\aeolian}, @code{\mixolydian}, +@code{\lydian}, @code{\phrygian} et @code{\dorian}. + +@lilypond[verbatim,quote,relative=2] +\key g \major +fis1 +f +fis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{church mode,mode d'église}, +@rglos{scordatura}. + +Manuel d'initiation : +@rlearning{Altérations et armure}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{KeyChangeEvent}, +@rinternals{Key_engraver}, +@rinternals{Key_performer}, +@rinternals{KeyCancellation}, +@rinternals{KeySignature}, +@rinternals{key-cancellation-interface}, +@rinternals{key-signature-interface}. + + +@node Marques d'octaviation +@unnumberedsubsubsec Marques d'octaviation +@translationof Ottava brackets + +@cindex ottava +@cindex 15ma +@cindex 8va +@cindex 8ve +@cindex octaviation + +@funindex set-octavation +@funindex \ottava +@funindex ottava + +Les marques d'octaviation, @emph{Ottava}, permettent d'introduire une +transposition spécifique d'une octave pour la portée en cours. C'est +la fonction @code{ottava} qui s'en charge. + +@lilypond[verbatim,quote,relative=2] +a2 b +\ottava #-2 +a2 b +\ottava #-1 +a2 b +\ottava #0 +a2 b +\ottava #1 +a2 b +\ottava #2 +a2 b +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ottava-text.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{octavation,octaviation}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{Ottava_spanner_engraver}, +@rinternals{OttavaBracket}, +@rinternals{ottava-bracket-interface}. + + +@node Instruments transpositeurs +@unnumberedsubsubsec Instruments transpositeurs +@translationof Instrument transpositions + +@cindex transposition et MIDI +@cindex MIDI et transposition +@cindex transposition, instrument + +@funindex \transposition +@funindex transposition + +Lorsque l'on saisit une partition d'ensemble incluant des instruments +transpositeurs, certaines parties peuvent être dans une autre tonalité +que la @notation{tonalité de concert}. Il faudra en pareil cas indiquer +la tonalité spécifique de ces @notation{instruments transpositeurs}, +sous peine de fichier MIDI erroné et de citations incorrectes. Pour +plus de détails sur les citations, consultez le chapitre +@ref{Citation d'autres voix}. + +@example +\transposition @var{hauteur} +@end example + +La hauteur donnée en argument à @code{\transposition} doit +correspondre à la note entendue lorsqu'un @code{do} écrit sur la +portée est joué par l'instrument transpositeur. Cette hauteur doit être +mentionnée en @notation{mode absolu}. Par exemple, lorsque +vous saisissez une partition en notes réelles, toutes les voix +devraient être en ut@tie{}; si un instrument joue un ton au dessus, il +faudra lui ajouter un @w{@code{\transposition d'}}. La commande +@code{\transposition} s'utilise @strong{si et seulement si} les notes à +saisir @strong{ne sont pas} dans la tonalité de concert. + +Voici un fragment pour violon et clarinette en si bémol (@emph{B-flat}) +pour lequel les parties respectives ont été recopiées à partir du +conducteur. Les deux instruments sont à l'unisson. + +@lilypond[verbatim,quote] +\new GrandStaff << + \new Staff = "violin" { + \relative c'' { + \set Staff.instrumentName = #"Vln" + \set Staff.midiInstrument = #"violin" + % not strictly necessary, but a good reminder + \transposition c' + + \key c \major + g4( c8) r c r c4 + } + } + \new Staff = "clarinet" { + \relative c'' { + \set Staff.instrumentName = \markup { Cl (B\flat) } + \set Staff.midiInstrument = #"clarinet" + \transposition bes + + \key d \major + a4( d8) r d r d4 + } + } +>> +@end lilypond + +La @code{\transposition} peut évoluer au cours d'un morceau. Un +clarinettiste peut être amené à jongler entre une clarinette en la et +une autre en si bémol. + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = #"Cl (A)" +\key a \major +\transposition a +c d e f +\textLengthOn +s1*0^\markup { Switch to B\flat clarinet } +R1 + +\key bes \major +\transposition bes +c2 g +@end lilypond + + +@seealso +Glossaire musicologique : +@rglosnamed{concert pitch,tonalité de concert}, +@rglosnamed{transposing instrument,instrument transpositeur}. + +Manuel de notation : +@ref{Citation d'autres voix}, +@ref{Transposition}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + + +@node Altérations accidentelles automatiques +@unnumberedsubsubsec Altérations accidentelles automatiques +@translationof Automatic accidentals + +@cindex altération, style +@cindex altération, style par défaut +@cindex accidentelles, altérations +@cindex accidentelles automatiques +@cindex automatiques, altérations accidentelles +@cindex style d'accidentelle + +@funindex set-accidental-style +@funindex voice +@funindex default + + +LilyPond dispose d'une fonction chargée de regrouper les règles suivant +lesquelles s'impriment les altérations. Elle s'invoque de la manière +suivante@tie{}: + +@example +\new Staff << + #(set-accidental-style 'voice) + @{ @dots{} @} +>> +@end example + +La règle de gestion des altérations s'applique par défaut au contexte +@code{Staff} en cours, exception faite des styles @code{piano} et +@code{piano-cautionary} comme nous allons le voir. Cette fonction +accepte un éventuel argument supplémentaire chargé de spécifier +le champ d'action de la règle à suivre. À titre d'exemple, il faudra +utiliser, pour que toutes les portées d'un même système -- contexte +@code{StaffGroup} -- soient soumises à la même règle@tie{}: + +@example +#(set-accidental-style 'voice 'StaffGroup) +@end example + +Nous vous présentons ci-après les différentes régles d'altération prises +en charge. Pour les besoins de la démonstration, nous partirons de +l'exemple suivant@tie{}: + +@lilypond[verbatim,quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +Notez bien que pour appliquer le même style aux deux portées, seules les +dernières lignes de cet exemple nous intéressent. + +@example +\new PianoStaff @{ + << + \context Staff = "haut" @{ + %%% voici la ligne à modifier en conséquence : + #(set-accidental-style 'default 'Score) + \musicA + @} + \context Staff = "bas" @{ + \musicB + @} + >> +@} +@end example + + +@c don't use verbatim in this table. +@table @code +@item default + +@cindex @emph{default}, style d'altérations +@cindex altérations, style @emph{default} + +@funindex default + +C'est la règle d'impression par défaut, qui se rapporte à l'usage +en vigueur au XVIIIe siècle@tie{}: les altérations accidentelles sont +valables tout une mesure, et uniquement à leur propre octave. C'est la +raison pour laquelle il n'y a pas de bécarre avant le @notation{si} de +la deuxième mesure, ni avant le dernier @notation{do}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +@item voice + +@cindex @emph{voice}, style d'altérations +@cindex altérations, style @emph{voice} +@cindex altérations, style @emph{modern} +@cindex @emph{modern}, style d'altération +@cindex altérations, style @emph{modern-cautionary} +@cindex @emph{modern-cautionary}, style d'altération + +@funindex voice + +En principe, LilyPond se souvient de toutes les altérations présentes +sur la portée (contexte @code{Staff}). Avec cette règle, cependant, les +altérations sont indépendantes pour chacune des voix tout en obéissant +à la règle @code{default}. + +Les altérations d'une voix sont de fait ignorées dans les autres +voix, ce qui peut donner lieu à un résultat malencontreux. Dans +l'exemple suivant, il est difficile de dire si le deuxième @notation{la} +est dièse ou naturel. La règle @code{voice} n'est donc à envisager que +dans le cas de voix devant être lues par des musiciens différents. S'il +s'agit d'un @qq{conducteur}, ou d'une portée destinée à un seul +musicien, il vaut mieux utiliser @code{modern} ou +@code{modern-cautionary}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'voice) + \musicB + } + >> +} +@end lilypond + +@item modern + +@cindex altération, style @emph{modern} +@cindex @emph{modern}, style d'altération + +@funindex modern + +Cette règle est la plus courante au XXe siècle. Les altérations +accidentelles sont imprimées comme avec le style @code{default}, mais +lorsqu'une note non-altérée apparaît à une octave différente, ou bien +dans la mesure suivante, des bécarres de précaution sont ajoutés. Dans +l'exemple suivant, notez ainsi les deux bécarres dans la deuxième mesure +de la main droite. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern) + \musicB + } + >> +} +@end lilypond + +@item modern-cautionary + +@cindex altération, style @emph{modern cautionary} +@cindex @emph{modern cautionary}, style d'altération +@cindex altération de précaution, style @emph{modern} +@cindex @emph{modern}, style d'altération de précaution + +@funindex modern-cautionary + +Cette règle est équivalente à @code{modern}, mais les bécarres de +précaution (absents dans la règle @code{default}) sont imprimés de façon +particulière@tie{}: soit plus petit, soit (par défaut) entre parenthèses +-- il est possible de le définir au moyen de la propriété +@code{cautionary-style} de l'objet @code{AccidentalSuggestion}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-cautionary) + \musicB + } + >> +} +@end lilypond + +@item modern-voice + +@cindex @emph{modern}, style d'altération +@cindex style d'altération @emph{modern} +@cindex altérations multivoix +@cindex modern accidental style +@cindex voix multiples et altérations +@cindex multivoix, altérations + +@funindex modern-voice + +Cette règle sert aux altérations dans de la musique polyphonique destinée +autant à des musiciens différents qu'à quelqu'un qui lirait l'ensemble +des voix. Les altérations sont imprimées voix par voix, mais les autres +voix d'un même contexte @code{Staff} en @emph{tiennent compte} +cette fois. C'est pourquoi le @notation{la} de la dernière mesure est +affublé d'un bécarre bien qu'il y en ait déjà eu un dans la mesure +précédente, et que le @notation{ré} de la main gauche en ait un alors +qu'il avait auparavant concerné la main droite. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice) + \musicB + } + >> +} +@end lilypond + +@item modern-voice-cautionary + +@cindex altération de précaution style @emph{modern voice} +@cindex @emph{modern voice}, styme d'altération de précaution + +@funindex modern-voice-cautionary + +Cette régle est similaire à la précédente, mais les altérations de +précaution (celles que n'aurait pas ajoutées @code{voice}), sont +imprimées de façon particulière. On retrouve donc toutes les +altérations qu'imprimerait @code{default}, mais certaines sont +considérées comme étant @qq{de précaution}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item piano + +@cindex @emph{piano}, style d'altérations +@cindex altérations style @emph{piano} +@cindex piano et altérations + +@funindex piano accidentals + +Cette règle est communément employée pour les partitions de piano au +XXe siècle. Très similaire à @code{modern} de par son comportement, +elle s'en distingue en ce que les altérations tiennent compte des autre +portées du contexte @code{GrandStaff} ou @code{PianoStaff}. + +Cette règle s'applique par défaut dans un @code{GrandStaff} et dans un +@code{PianoStaff}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + +@item piano-cautionary + +@cindex @emph{piano cautionary}, style d'altérations +@cindex altérations style @emph{piano cautionary} +@cindex piano et altérations + +@funindex piano-cautionary + +Identique au style @code{piano}, mais les altérations de précaution sont +imprimées différemment. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano-cautionary) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + +@item neo-modern + +@cindex @emph{neo-modern}, style d'altérations +@cindex altérations, style @emph{neo-modern} + +@funindex neo-modern + +Cette règle suit les pratiques de la musique contemporaine@tie{}: les +altérations accidentelles apparaîssent comme dans le style +@code{modern}, à ceci près qu'elles sont répétées dans la même mesure -- +sauf si elles concernent deux notes consécutives. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-cautionary + +@cindex @emph{neo-modern-cautionary}, style d'altérations +@cindex style d'altération @emph{neo-modern-cautionary} + +@funindex neo-modern-cautionary + +Identique au style @code{neo-modern}, mais les altérations de précaution +sont imprimées différemment. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-cautionary) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-voice + +@cindex @emph{neo-modern-voice}, style d'altération +@cindex style d'altération @emph{neo-modern-voice} +@cindex altérations multivoix +@cindex neo-modern-voice accidental style +@cindex voix multiples et altérations +@cindex multivoix, altérations + +@funindex neo-modern-voice + +Cette règle sert aux altérations dans de la musique polyphonique destinée +autant à des musiciens différents qu'à quelqu'un qui lirait l'ensemble +des voix. Les altérations sont imprimées voix par voix comme avec le style +@code{neo-modern} mais les autres voix dans le même contexte @code{Staff} +en tiennent aussi compte. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-voice-cautionary + +@funindex neo-modern-voice-cautionary + +Cette règle est indentique à @code{neo-modern-voice}, +mais les altérations de précaution sont imprimées +soit entre parenthèses (par défaut), soit en plus petit. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item dodecaphonic + +@cindex @emph{dodecaphonic}, style d'altérations +@cindex altération, style @emph{dodecaphonic} + +@funindex dodecaphonic + +Cette règle reproduit ce que certains compositeurs du début du XXe +siècle ont introduit dans leur désir d'abolir la distinction entre les +notes naturelles ou non. Ainsi, @strong{chaque} note est affublée d'une +altération, même si elle est naturelle. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'dodecaphonic) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'dodecaphonic) + \musicB + } + >> +} +@end lilypond + + +@item teaching + +@cindex @emph{teaching}, style d'altérations +@cindex altérations, style @emph{teaching} + +@funindex teaching + +Cette règle est à usage pédagogique@tie{}: l'impression d'une simple +gamme fera apparaître une altération de précaution pour toute note +altérée. Les altérations accidentelles sont imprimées selon le style +@code{modern}, et une altération de précaution est ajoutée pour chaque +dièse ou bémol à la clef -- sauf dans le cas de notes consécutives. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicA + } + \context Staff = "down" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicB + } + >> +} +@end lilypond + +@item no-reset + +@cindex altération, style @emph{no reset} +@cindex @emph{no reset}, style d'altérations + +@funindex no-reset + +C'est la même règle que @code{default}, mais l'effet des altérations +accidentelles ne cesse jamais, même dans les mesures suivantes. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'no-reset) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'no-reset) + \musicB + } + >> +} +@end lilypond + +@item forget + +@cindex @emph{forget}, style d'altérations +@cindex altérations, style @emph{forget} + +@funindex forget + +Tout le contraire de @code{no-reset}@tie{}: l'effet des altérations +cesse aussitôt@tie{}; toutes les altérations, quelque soit leur place +dans la mesure, sont de ce fait imprimées en fonction de l'éventuelle +armure. À l'inverse du style @code{dodecaphonic}, aucun bécarre ne sera +ici imprimé. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'forget) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'forget) + \musicB + } + >> +} +@end lilypond +@end table + +@seealso +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{Accidental}, +@rinternals{Accidental_engraver}, +@rinternals{GrandStaff} et +@rinternals{PianoStaff}, +@rinternals{Staff}, +@rinternals{AccidentalSuggestion}, +@rinternals{AccidentalPlacement}. +@rinternals{accidental-suggestion-interface}. + + +@cindex altérations et notes simultanées +@cindex notes simultanées et altérations +@cindex altérations et accords +@cindex accords et altérations + + +@knownissues + +Les notes simultanées sont considérées comme des évènements séquentiels. +Ceci implique que, dans un accord, les altérations accidentelles +seront imprimées comme si les notes de l'accord apparaissaient l'une +après l'autre, en fonction de l'ordre dans lequel elles ont été saisies +-- ce qui peut poser problème lorsqu'au sein d'un accord certaines +altérations dépendent les unes des autres. +Ce problème est à résoudre manuellement, en insérant des@tie{}@code{!} +et des@tie{}@code{?} après les notes concernées. + +L'absence d'altération de précaution est déterminée par l'examen de la +mesure précédente. Néanmoins, lorsqu'un bloc @code{\alternative} suit +une section @code{\repeat@tie{}volta@tie{}N}, la logique voudrait que +l'on regarde la dernière mesure @emph{jouée} plutôt que la dernière +@emph{imprimée}. Dans l'exemple qui suit, vous conviendrez que le do de +la seconde alternative ne nécessite pas son bécarre. + +@lilypond[quote] +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + c' + } +} +@end lilypond + +L'astuce suivante, qui définit temporairement le recours au style +@code{forget}, permet d'obtenir quelque chose de présentable. + +@lilypond[verbatim,quote] +forget = #(define-music-function (parser location music) (ly:music?) #{ + #(set-accidental-style 'forget) + $music + #(set-accidental-style 'modern) +#}) +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + \forget c' + } +} +@end lilypond + + +@node Ambitus +@unnumberedsubsubsec Ambitus +@translationof Ambitus + +@cindex ambitus +@cindex tessiture +@cindex amplitude + +L'@emph{ambitus} est l'amplitude des hauteurs d'une voix donnée dans une +partition. Ce terme peut aussi désigner la tessiture qu'un instrument +est capable d'atteindre. Souvent, cet @emph{ambitus} est imprimé au +début des partitions vocales, afin que les exécutants puissent voir au +premier coup d'œil s'ils sont en mesure de tenir la partie en question. + +Pour exprimer l'@emph{ambitus} d'une pièce, on indique avant la clef +deux notes représentant la hauteur la plus basse et la plus haute. Les +éventuelles altérations accidentelles seront automatiquement ajoutées. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\relative c'' { + aes c e2 + cis,1 +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-ambitus-per-voice.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ambitus-with-multiple-voices.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-ambitus-gap.ly} + + +@seealso +Glossaire musicologique : +@rglos{ambitus}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{Ambitus_engraver}, +@rinternals{Voice}, +@rinternals{Staff}, +@rinternals{Ambitus}, +@rinternals{AmbitusAccidental}, +@rinternals{AmbitusLine}, +@rinternals{AmbitusNoteHead}, +@rinternals{ambitus-interface}. + + +@knownissues + +LilyPond ne gère pas les collisions entre plusieurs @emph{ambitus} +présents sur une même portée. + + +@node Têtes de note +@subsection Têtes de note +@translationof Note heads + +Nous allons voir dans ce chapitre comment modifier l'aspect des têtes de +note. + +@menu +* Têtes de note spécifiques:: +* Têtes de note avec nom de note:: +* Têtes de note à forme variable:: +* Improvisation:: +@end menu + +@node Têtes de note spécifiques +@unnumberedsubsubsec Têtes de note spécifiques +@translationof Special note heads + +@cindex têtes de note, spéciales +@cindex croix, tête de note +@cindex losange, tête de note +@cindex parlato, tête de note +@cindex harmonique, tête de note +@cindex guitare, tête de note +@cindex styles, tête de note + +@funindex cross + +L'apparence des têtes de note peut évoluer au cours de la partition@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4 b +\override NoteHead #'style = #'cross +c4 b +\revert NoteHead #'style +a b +\override NoteHead #'style = #'harmonic +a b +\revert NoteHead #'style +c4 d e f +@end lilypond + +Pour une liste exhaustive des styles de tête de note, consultez +@ref{Styles de tête de note}. + +Certains instruments utilisent des têtes de note différentes à des +fins spécifiques -- des croix (style @code{cross}) pour le +@emph{parlato} des chanteurs ou les notes étouffées des guitares@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNotesOn + a b c4 b +\xNotesOff +c4 d +@end lilypond + +Cette commande opère aussi bien sur des notes isolées qu'au sein d'un +accord, dans une portée traditionnelle ou dans un contexte de +tablature@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNote { e f } +c b < g \xNote c f > b +@end lilypond + +Vous pouvez utiliser, en lieu et place de @code{\xNote}, +@code{\xNotesOn} et @code{\xNotesOff}, les commandes +@code{\deadNote}, @code{\deadNotesOn} et @code{\deadNotesOff}. + + +Il existe un raccourci pour les notes en losange qui indiquent les +harmoniques des cordes@tie{}: + +@lilypond[verbatim,quote,relative=2] +2 4 +@end lilypond + + +@predefined +@code{\harmonic}, +@code{\xNotesOn}, +@code{\xNotesOff}, +@code{\xNote}. +@endpredefined + + +@seealso +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Manuel de notation : +@ref{Styles de tête de note}, +@ref{Notes en accords}, +@ref{Indication des harmoniques et notes étouffées}. + +Référence des propriétés internes : +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{Ledger_line_engraver}, +@rinternals{NoteHead}. +@rinternals{LedgerLineSpanner}, +@rinternals{note-head-interface}, +@rinternals{ledger-line-spanner-interface}. + + +@node Têtes de note avec nom de note +@unnumberedsubsubsec Têtes de note avec nom de note +@translationof Easy notation note heads + +@cindex tête de note, apprentissage +@cindex notation facile +@cindex Hal Leonard +@cindex @emph{easy play}, têtes de note + +@funindex \easyHeadsOn +@funindex easyHeadsOn +@funindex \easyHeadsOff +@funindex easyHeadsOff + +Les notes @qq{easy play} comportent le nom de la note à l'intérieur de +la tête. On l'utilise dans des partitions pour débutants. L'impression +doit être de plus grande taille, afin que les lettres soient lisibles. +Voir à ce propos @ref{Définition de la taille de portée}. + +@lilypond[verbatim,quote] +#(set-global-staff-size 26) +\relative c' { + \easyHeadsOn + c2 e4 f + g1 + \easyHeadsOff + c,1 +} +@end lilypond + + +@predefined +@code{\easyHeadsOn}, +@code{\easyHeadsOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{numbers-as-easy-note-heads.ly} + + +@seealso +Manuel de notation : +@ref{Définition de la taille de portée}. + +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Têtes de note à forme variable +@unnumberedsubsubsec Têtes de note à forme variable +@translationof Shape note heads + +@cindex tête de note, allure +@cindex tête de note, Aiken +@cindex tête de note, harpe sacrée +@cindex notes profilées +@cindex Aiken, tête de note +@cindex harpe sacrée, tête de note +@cindex Funk, tête de note +@cindex tête de note, Funk +@cindex tête de note, Harmonica Sacra +@cindex Harmonica Sacra, tête de note +@cindex Christian Harmony, tête de note +@cindex tête de note, Christian Harmony +@cindex Walker shape, tête de note +@cindex tête de note, Walker + +@funindex \key +@funindex key +@funindex \aikenHeads +@funindex aikenHeads +@funindex \aikenHeadsMinor +@funindex aikenHeadsMinor +@funindex \sacredHarpHeads +@funindex sacredHarpHeads +@funindex \sacredHarpHeadsMinor +@funindex sacredHarpHeadsMinor +@funindex \southernHarmonyHeads +@funindex southernHarmonyHeads +@funindex \southernHarmonyHeadsMinor +@funindex southernHarmonyHeadsMinor +@funindex \funkHeads +@funindex funkHeads +@funindex \walkerHeads +@funindex walkerHeads +@funindex \funkHeadsMinor +@funindex funkHeadsMinor +@funindex \walkerHeadsMinor +@funindex walkerHeadsMinor + +En notation profilée, le profil d'une tête de note correspond à la +fonction harmonique de cette note dans la gamme. Ce style de notation +était très en vogue dans les recueils de chansons américains du XIXe +siècle. Voici comment procéder@tie{}: + +@lilypond[verbatim,quote,relative=2] +\aikenHeads +c, d e f g2 a b1 c \break +\sacredHarpHeads +c,4 d e f g2 a b1 c \break +\southernHarmonyHeads +c,4 d e f g2 a b1 c \break +\funkHeads +c,4 d e f g2 a b1 c \break +\walkerHeads +c,4 d e f g2 a b1 c \break +@end lilypond + +Les profils sont déterminés par la hauteur dans la gamme, le premier +degré étant défini par la commande @code{\key}. Pour une tonalité +mineure, les degrés sont déterminés par rapport au relatif majeur@tie{}: + +@lilypond[verbatim,quote,relative=2] +\key a \minor +\aikenHeads +a b c d e2 f g1 a \break +\aikenHeadsMinor +a,4 b c d e2 f g1 a \break +\sacredHarpHeadsMinor +a,2 b c d \break +\southernHarmonyHeadsMinor +a2 b c d \break +\funkHeadsMinor +a2 b c d \break +\walkerHeadsMinor +a2 b c d \break +@end lilypond + + + +@predefined +@code{\aikenHeads}, +@code{\aikenHeadsMinor}, +@code{\funkHeads}, +@code{\funkHeadsMinor}, +@code{\sacredHarpHeads}. +@code{\sacredHarpHeadsMinor}, +@code{\southernHarmonyHeads}, +@code{\southernHarmonyHeadsMinor}, +@code{\walkerHeads}, +@code{\walkerHeadsMinor}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} + +Pour une liste exhaustive des styles de tête de note, consultez +@ref{Styles de tête de note}. + + +@seealso +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Manuel de notation : +@ref{Styles de tête de note}. + +Référence des propriétés internes : +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Improvisation +@unnumberedsubsubsec Improvisation +@translationof Improvisation + +@cindex improvisation +@cindex notes penchées +@cindex tête de note et improvisation +@cindex tête de note allongée + +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +L'improvisation peut quelquefois s'indiquer à l'aide de notes de forme +allongée (@emph{slash}). L'interprète jouera alors les notes qu'il +veut, en respectant toutefois le rythme affiché. Ces têtes de notes sont +créées ainsi@tie{}: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { + \consists "Pitch_squash_engraver" +} { + e8 e g a a16( bes) a8 g + \improvisationOn + e8 ~ + e2 ~ e8 f4 f8 ~ + f2 + \improvisationOff + a16( bes) a8 g e +} +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@seealso +Morceaux choisis : +@rlsrnamed{Pitches,Hauteurs}. + +Référence des propriétés internes : +@rinternals{Pitch_squash_engraver}, +@rinternals{Voice}, +@rinternals{RhythmicStaff}. + + diff --git a/Documentation/fr/notation/repeats.itely b/Documentation/fr/notation/repeats.itely new file mode 100644 index 0000000000..236f6d70fd --- /dev/null +++ b/Documentation/fr/notation/repeats.itely @@ -0,0 +1,708 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + +@node Répétitions et reprises +@section Répétitions et reprises +@translationof Repeats + +@lilypondfile[quote]{repeats-headword.ly} + +@cindex reprises +@cindex répétitions + +La répétition est une notion essentielle en musique, et il existe de +nombreuses façons de mettre en œuvre et noter ce concept. LilyPond +prend en charge les types de répétition suivants@tie{}: + +@table @code +@item volta +Le passage répété n'est pas développé, mais il est encadré par des +barres de reprise et peut se terminer par plusieurs fins +alternatives -- ou @emph{volte} -- imprimées de gauche à droite sous +des crochets. Lorsque la répétition commence au début de la pièce, +aucune barre de reprise n'est gravée au début de la partition. Il +s'agit de la notation courante des reprises avec fins alternatives. + +@item unfold +La musique répétée est développée dans la partition autant de fois +qu'indiqué. Ceci est particulièrement utile pour de la musique +répétitive. + +@item percent +Des barres obliques ou signes de pourcentage indiquent la répétition +de temps ou de mesures. + +@item tremolo +Ce type permet de réaliser des trémolos sous forme de liens de croches. + +@end table + +@menu +* Répétition d'un long passage:: +* Autres types de répétition:: +@end menu + +@node Répétition d'un long passage +@subsection Répétition d'un long passage +@translationof Long repeats + +Cette section présente la syntaxe des répétitions longues -- +c'est-à-dire plusieurs mesures. Ces répétitions peuvent prendre deux +formes@tie{}: encadrées par des barres de reprises, ou bien développées +dans la partition. Les barres et autres signes de reprise peuvent être +contrôlés manuellement. + +@menu +* Répétitions courantes:: +* Indications de reprise manuelles:: +* Répétitions explicites:: +@end menu + +@cindex volta +@cindex fois, première +@cindex première fois +@cindex seconde fois +@cindex reprise courante +@cindex reprise avec alternative +@cindex fin alternative +@cindex alternative, reprise + +@funindex \repeat +@funindex \alternative +@funindex \partial + + +@node Répétitions courantes +@unnumberedsubsubsec Répétitions courantes +@translationof Normal repeats + +On peut indiquer une répétition de la façon suivante@tie{}: + +@example +\repeat volta @var{nombre_de_fois} @var{expression_musicale} +@end example + +@noindent +où @code{@var{expression_musicale}} représente ce qui doît être répété. + +Les reprises courantes, sans alternative, s'indiquent comme ceci@tie{}: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f } +c2 d +\repeat volta 2 { d4 e f g } +@end lilypond + +On peut ajouter une fin alternative à l'aide de la commande +@code{\alternative}. Chaque @code{@var{alternative}} est une expression +musicale en elle-même@tie{}; il faudra donc les regrouper par des +accolades. + +@example +\repeat volta @var{nombre_de_fois} @var{expression_musicale} +\alternative @{ + @{ @var{expression_musicale} @} +@} +@end example + +Si l'on donne trop peu d'alternatives en regard du nombre de fois où le +passage doit être rejoué, la première alternative sera jouée plusieurs +fois. + +Voici une simple reprise avec une fin alternative : + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +Et une répétition avec plusieurs alternatives : + +@lilypond[verbatim,quote,relative=2] +\repeat volta 3 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } + { a2 g | } +} +c1 +@end lilypond + +@warning{Lorsqu'il y a plus d'une alternative, prenez garde à ce +qu'aucun caractère n'apparaisse entre l'accolade fermant une alternative +et l'accolade ouvrant la suivante, au risque de ne pas obtenir le nombre +voulu d'alternatives.} + +@warning{Une clause @code{@bs{}relative} ne doît jamais se trouver à +l'intérieur d'une section @code{@bs{}repeat}@tie{}: vous aurez +immanquablement des portées parasites. Voir +@rprogram{Apparition d'une portée supplémentaire}.} + +@cindex reprise avec levée +@cindex levée dans une reprise +@cindex anacrouse et reprise +@cindex reprise et anacrouse + +@funindex \partial + +Lorsqu'une reprise sans fins alternatives débute au milieu d'une mesure, +elle devrait se terminer aussi au milieu d'une mesure, de telle sorte +que les mesures soient complètes. En pareil cas, les indications de +reprise ne constituent pas des barres de mesure à proprement +parler@tie{}; il n'est donc pas nécessaire de faire appel à la commande +@code{\partial} ou à des contrôles d'intégrité de mesure. + +@lilypond[verbatim,quote,relative=1] +% no \partial here +c4 e g % no bar check here +% no \partial here +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +Il est possible de créer des reprises en début de morceau avec une +levée. Le cas est similaire à ce que nous venons de voir. Toutefois, +l'utilisation d'un @code{\partial} est ici nécessaire pour respecter +cette entâme. + +@lilypond[verbatim,quote,relative=1] +\partial 4 % required +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +Lorsqu'une reprise débute par une mesure incomplète et a des fins +alternatives, il est indispensable d'ajuster manuellement la propriété +@code{Timing.measureLength} selon les préceptes suivants@tie{}: + +@itemize +@item +au début de chacune des mesures incomplètes du bloc @code{\alternative}, +ce qui est le cas en principe pour chaque fin d'alternative sauf -- +la plupart du temps -- pour la dernière. + +@item +au début de chaque alternative à l'exception de la première. +@end itemize + +@lilypond[verbatim,quote,relative=1] +\partial 4 +\repeat volta 2 { e4 | c2 e | } +\alternative { + { + f2 d | + \set Timing.measureLength = #(ly:make-moment 3 4) + g4 g g % optional bar check is allowed here + } + { + \set Timing.measureLength = #(ly:make-moment 4 4) + a2 a | + } +} +g1 | +@end lilypond + +La propriété @code{measureLength} est abordée plus en détail au chapitre +@ref{Gestion du temps}. + +@cindex reprise et liaison de prolongation +@cindex alternative et liaison de prolongation +@cindex liaison de prolongationt et reprise +@cindex liaison de prolongation et alternative + +@funindex \repeatTie + +Des liaisons de tenue peuvent être ajoutées à toute alternative@tie{}: + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat volta 2 { c4 d e f ~ } +\alternative { + { f2 d } + { f2\repeatTie f, } +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{shortening-volta-brackets.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-volta-brackets-to-additional-staves.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-double-repeat-default-for-volte.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{repeat,répétition}, +@rglos{volta}. + +Manuel de notation : +@ref{Barres de mesure}, +@ref{Modification des greffons de contexte}, +@ref{Gestion du temps}. + +Morceaux choisis : +@rlsrnamed{Repeats,Répétitions}. + +Référence des propriétés internes : +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@knownissues + +@cindex reprises ambigües +@cindex reprises imbriquées +@cindex imbrication de reprises +@cindex numéro de mesure et reprises +@cindex reprise et liaison +@cindex liaison et reprise + +L'extension d'une liaison à partir d'un bloc @code{\repeat} sur un bloc +@code{\alternative} n'est possible que pour la première alternative. +Selon le même principe, une liaison ne saurait partir de la fin d'une +alternative pour se terminer au début de la reprise. + +Le développement, à l'aide de la commande @code{\unfoldRepeats}, d'une +répétition qui commence sur une mesure incomplète et contient un bloc +@code{alternative} avec modification de la propriété +@code{measureLength} entraînera des messages d'erreur concernant le +placement des barres de mesure. + +Des reprises imbriquées telles que + +@example +\repeat @dots{} +\repeat @dots{} +\alternative +@end example + +@noindent +présentent une ambiguïté, dans la mesure où l'on ne sait à quelle +section @code{\repeat} attribuer la section @code{\alternative}. Pour +résoudre cette ambiguïté, il convient de toujours insérer la commande +@code{\alternative} à l'intérieur de la section @code{\repeat}. Il est +préférable, dans une telle situation, d'utiliser des accolades pour plus +de clarté. + + +@node Indications de reprise manuelles +@unnumberedsubsubsec Indications de reprise manuelles +@translationof Manual repeat marks + +@cindex reprise manuelle + +@funindex repeatCommands +@funindex start-repeat + +@warning{Les méthodes présentées dans les lignes qui suivent ne +devraient servir à indiquer que des constructions de répétition +inhabituelles. En règle générale, il vaut mieux recourrir à la fonction +@code{@bs{}repeat} pour créer une reprise ou bien insérer la barre de +mesure adéquate. Pour plus d'information, voir le chapitre +@ref{Barres de mesure}.} + +La propriété @code{repeatCommands} sert à contrôler la mise en forme des +reprises. On la définit par une suite de commandes de reprise Scheme. + +@table @code +@item start-repeat +Pour imprimer une barre de reprise @code{|:} + +@lilypond[verbatim,quote,relative=2] +c1 +\set Score.repeatCommands = #'(start-repeat) +d4 e f g +c1 +@end lilypond + +Traditionnellement, on n'imprime pas de signe de reprise en début de +morceau. + +@item end-repeat +Pour imprimer une barre de reprise @code{:|} + +@lilypond[verbatim,quote,relative=2] +c1 +d4 e f g +\set Score.repeatCommands = #'(end-repeat) +c1 +@end lilypond + +@item (volta @var{nombre}) @dots{} (volta #f) +Pour obtenir un crochet indiquant le numéro de l'alternative. Pour que +le crochet s'imprime effectivement, il faut spécifier explicitement +l'endroit où il doît se terminer. + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2")) +g4 a g a +\set Score.repeatCommands = #'((volta #f)) +c1 +@end lilypond + +@end table + +Plusieurs commande de reprise peuvent intervenir au même moment@tie{}: + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2, 5") end-repeat) +g4 a g a +c1 +\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) +b1 +\set Score.repeatCommands = #'((volta #f)) +@end lilypond + +@cindex alternative et texte +@cindex texte et alternative + +Le crochet indiquant une alternative peut contenir aussi du texte. Il +peut s'agir d'un ou plusieurs nombres ou bien d'une indication textuelle +(@emph{markup}) -- voir @ref{Mise en forme du texte}. Le plus simple, +dans le cas d'une indication textuelle, est de tout d'abord définir ce +@code{markup}, puis de l'inclure dans une liste Scheme. + +@lilypond[verbatim,quote] +voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } +\relative c'' { + c1 + \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) + c4 b d e + \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) + f1 + \set Score.repeatCommands = #'((volta #f)) +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} + + +@seealso +Manuel de notation : +@ref{Barres de mesure}, +@ref{Mise en forme du texte}. + +Morceaux choisis : +@rlsrnamed{Repeats,Répétitions}. + +Référence des propriétés internes : +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}. + + +@node Répétitions explicites +@unnumberedsubsubsec Répétitions explicites +@translationof Written-out repeats + +@cindex musique répétitive +@cindex reprise, expansion +@cindex expansion de reprise + +@funindex \repeat unfold +@funindex unfold + +Adjoindre à la commande @code{\repeat} l'opion @code{unfold} permet de +s'affranchir de ressaisir de la musique répétitive. En voici la +syntaxe@tie{}: + +@example +\repeat unfold @var{nombre_de_fois} @var{expression_musicale} +@end example + +@noindent +Le contenu de @var{expression_musicale} sera donc expansé autant de fois +que stipulé par @var{nombre_de_fois}. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +c1 +@end lilypond + +Une répétition expansée peut aussi avoir une fin alternative@tie{}: + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { g4 f e d } +\alternative { + { c2 g' } + { cis,2 b } +} +c1 +@end lilypond + +Si l'on donne trop peu d'alternatives en regard du nombre de fois où le +passage doit être rejoué, la première alternative sera jouée plusieurs +fois. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 4 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } + } +c1 +@end lilypond + +S'il y a par contre plus d'alternatives que de répétitions, les +alternatives superflues seront tout simplement ignorées et ne seront pas +imprimées. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } +} +c1 +@end lilypond + +Vous pouvez imbriquer plusieurs fonctions @code{unfold}, qu'elles +comportent ou non des fins alternatives@tie{}: + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { + \repeat unfold 2 { c4 d e f } + \alternative { + { c2 g' } + { c,2 b } + } +} +c1 +@end lilypond + + +@warning{L'insertion d'un @code{@bs{}relative} dans une section +@code{@bs{}repeat} sans déclaration explicite du contexte @code{Voice} +génèrera une portée supplémentaire -- voir +@rprogram{Apparition d'une portée supplémentaire}.} + + +@seealso +Morceaux choisis : +@rlsrnamed{Repeats,Répétitions}. + +Référence des propriétés internes : +@rinternals{RepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@node Autres types de répétition +@subsection Autres types de répétition +@translationof Short repeats + +Nous abordons ici les reprises de courte durée. Il en existe deux +formes, à savoir la répétition d'une même note sur quelques mesures -- +représentée par une barre oblique ou le signe pourcent -- et les +trémolos. + +@menu +* Répétitions de mesure:: +* Répétitions en trémolo:: +@end menu + +@node Répétitions de mesure +@unnumberedsubsubsec Répétitions de mesure +@translationof Percent repeats + +@cindex pourcent, répétition +@cindex mesure, répétition de +@cindex répétition, pourcent +@cindex répétition de mesure +@cindex répétition courte + +@funindex \repeat percent +@funindex percent + +Le style de @qq{reprise en pourcent} sert à répéter une séquence de +notes. Elle sera imprimée une fois, puis remplacée par un symbole +spécial. + +En voici la syntaxe@tie{}: + +@example +\repeat percent @var{nombre} @var{expression_musicale} +@end example + + +Les séquences inférieures à une mesure sont remplacées par une barre +oblique. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c8 d } +\repeat percent 4 { c4 } +\repeat percent 2 { c2 } +@end lilypond + +Les séquences d'une ou deux mesures sont remplacées par un +symbole qui ressemble au symbole de pourcentage. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 3 { c4 d e f } +\repeat percent 4 { c2 d } +@end lilypond + +@lilypond[verbatim,quote,relative=2] +\repeat percent 3 { c4 d e f | c2 g' } +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-counter.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-count-visibility.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{isolated-percent-repeats.ly} + + +@seealso +Glossaire musicologique : +@rglos{percent repeat}, +@rglos{simile}. + +Morceaux choisis : +@rlsrnamed{Repeats,Répétitions}. + +Référence des propriétés internes : +@rinternals{RepeatSlash}, +@rinternals{PercentRepeat}, +@rinternals{DoublePercentRepeat}, +@rinternals{DoublePercentRepeatCounter}, +@rinternals{PercentRepeatCounter}, +@rinternals{PercentRepeatedMusic}. + + +@knownissues + +LilyPond ne dispose que de trois signes différents pour indiquer une +répétition @qq{en pourcent}@tie{}: une simple barre oblique qui +représente un seul temps quelle que soit la durée des notes +répétées@tie{}; une barre oblique simple entourée de points qui +représente une mesure entière@tie{}; une double barre oblique entourée +de points et placée sur la barre de mesure pour indiquer une répétition +de deux mesures. + +@node Répétitions en trémolo +@unnumberedsubsubsec Répétitions en trémolo +@translationof Tremolo repeats + +@cindex trémolo +@cindex trémolo, ligatures de + +@funindex \repeat tremolo +@funindex tremolo + +Il y a deux formes de trémolo@tie{}: la répétition alernative de deux +notes ou accords, et la répétition rapide d'une seule note ou d'un +accord. Lorsqu'il est constitué d'une alternance répétitive, le trémolo +s'indique en ajoutant des barres de ligature entre les deux notes ou +accords concernés. Lorsqu'il s'agit d'une répétition rapide, des barres +de ligature penchées sont ajoutées à la note en question. + +On peut placer une notation de trémolo entre deux notes, avec la +commande @code{\repeat} suivie du style trémolo@tie{}: + +@lilypond[quote,verbatim,relative=2] +\repeat tremolo 8 { c16 d } +\repeat tremolo 6 { c16 d } +\repeat tremolo 2 { c16 d } +@end lilypond + +La syntaxe de @code{\repeat tremolo} requiert espressément deux notes +encadrées par des accolades, et le nombre de répétitions exprimé en +durée d'une note (pointée ou non). Ainsi, dans l'exemple ci-dessus, +@code{\repeat@tie{}tremolo@tie{}7} est valide car correspond à une note +doublement pointée, à l'inverse de @code{\repeat@tie{}tremolo@tie{}9}. + +La durée d'un trémolo est égale à la durée de l'expression entre +accolades multipliée par le nombre de fois à répéter@tie{}: +@code{\repeat@tie{}tremolo@tie{}8@tie{}@{@tie{}c16@tie{}d16@tie{}@}} +correspond donc à la valeur d'une ronde, et sera représenté par deux +rondes séparées par des barres de trémolo. + +On peut indiquer de la même manière un trémolo sur une seule note, qu'il +faudra alors laisser sans accolades@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\repeat tremolo 4 c'16 +@end lilypond + + +@cindex trémolo, indication de + +@funindex tremoloFlags +@funindex : + +Le même résultat s'obtient en faisant suivre la note considérée +de deux points et d'un nombre (@w{@code{note:@var{nombre}}}). +Le nombre en question correspond à la valeur de la subdivision@tie{}; +il doit être au moins de 8, auquel cas la hampe sera barrée par un +seul trait de ligature. Si ce nombre est omis, la dernière valeur -- +telle que mémorisée dans @code{tremoloFlags} -- sera utilisée. + +@lilypond[quote,verbatim,relative=2] +c2:8 c:32 +c: c: +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{cross-staff-tremolos.ly} + + +@seealso +Morceaux choisis : +@rlsrnamed{Repeats,Répétitions}. + +@cindex tremolo, cross-staff +@cindex cross-staff tremolo + diff --git a/Documentation/fr/notation/rhythms.itely b/Documentation/fr/notation/rhythms.itely new file mode 100644 index 0000000000..1d2cdda386 --- /dev/null +++ b/Documentation/fr/notation/rhythms.itely @@ -0,0 +1,3429 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 1f655fba7d94feb67f846785f47ab6fb20dc2e59 + + 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" + +@c Translators: Frédéric Chiasson, Jean-Charles Malahieude +@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude, +@c François Martin, Xavier Scheuer + +@node Rythme +@section Rythme +@translationof Rhythms + +@lilypondfile[quote]{rhythms-headword.ly} + +Cette section traite du rythme@tie{}: durées, silences, barres de +ligature et de mesure. + +@menu +* Écriture du rythme:: +* Écriture des silences:: +* Gravure du rythme:: +* Barres de ligature:: +* Mesures:: +* Fonctionnalités rythmiques particulières:: +@end menu + + +@node Écriture du rythme +@subsection Écriture du rythme +@translationof Writing rhythms + +@menu +* Durées:: +* Nolets:: +* Changement d'échelle des durées:: +* Liaisons de prolongation:: +@end menu + +@node Durées +@unnumberedsubsubsec Durées +@translationof Durations + +@cindex durées +@cindex notes, longueur +@cindex longueur de note + +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve +@funindex \maxima +@funindex maxima + +Dans les modes de notes, d'accords et de paroles, les durées sont +écrites avec des chiffres et des points@tie{}: les durées sont indiquées +par leur valeur fractionnaire par rapport à la durée d'une ronde. Une +noire, par exemple, qui équivaut à un 1/4 de ronde -- @emph{quarter +note} en anglais -- s'écrit @code{4}, alors qu'une blanche -- +@emph{half-note}, 1/2 ronde -- s'écrit @code{2}. Pour des notes plus +longues qu'une ronde, vous devrez utiliser les commandes @code{\longa} +pour une longue, et @code{\breve} pour une brève, aussi appelée carrée. +Des durées plus courtes que la quintuple croche -- 1/128 de ronde -- +sont possibles, à condition de les ligaturer. + +@c Two 64th notes are needed to obtain beams +@lilypond[quote,verbatim,relative=2] +\time 8/1 +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +@noindent +Voici ces mêmes durées sans la fonction de ligature automatique. + +@c not strictly "writing rhythms"; more of a "displaying" thing, +@c but it's ok here. -gp +@lilypond[quote,verbatim,relative=2] +\time 8/1 +\autoBeamOff +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +Une note dont la durée est de quatre brèves s'obtient par la commande +@code{\maxima}. Celle-ci n'est toutefois disponible que dans le cadre +de la notation ancienne. Pour plus de détails, voir +@ref{Notations anciennes}. + +@cindex durée par défaut +@cindex défaut, durée + +Si la durée d'une note n'est pas précisée, elle est alors assimilée à la +durée de la note précédente. La valeur par défaut pour la première note +est la noire (@code{4}). + +@lilypond[quote,verbatim,relative=2] +a a a2 a a4 a a1 a +@end lilypond + +@cindex notes pointées +@cindex pointée, note +@cindex doublement pointée, note +@cindex point +@cindex double point + +@funindex . + +Pour obtenir des notes pointées, ajoutez simplement un point +(@code{.}) au chiffre. Les notes doublement pointées sont créées de +la même façon. + +@lilypond[quote,verbatim,relative=2] +a4 b c4. b8 a4. b4.. c8. +@end lilypond + +Certaines durées ne peuvent s'obtenir à partir de chiffres et de points, +mais uniquement en @qq{liant} deux ou plusieurs notes entre elles. Voir +@ref{Liaisons de prolongation} à ce sujet. + +Quant à la manière de spécifier la durée des syllabes ou bien d'aligner +des paroles par rapport aux notes, reportez vous au chapitre +@ref{Musique vocale}. + +Espacer les notes selon leur durée relative est tout à fait possible. +Pour plus de détails à ce sujet et sur les autres réglages propres à +cette forme de notation, reportez vous à @ref{Notation proportionnelle}. + +@funindex \dotsUp +@funindex dotsUp +@funindex \dotsDown +@funindex dotsDown +@funindex \dotsNeutral +@funindex dotsNeutral + +Les points sont normalement haussés pour éviter les lignes de portée, +sauf dans certaines polyphonies. Des commandes prédéfinies permettent +de manuellement forcer une orientation particulière, comme indiqué au +chapitre @ref{Direction et positionnement}. + + +@predefined +@code{\autoBeamOn}, +@code{\autoBeamOff}, +@code{\dotsUp}, +@code{\dotsDown}, +@code{\dotsNeutral}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-number-of-augmentation-dots-per-note.ly} + + +@seealso +Glossaire musicologique : +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}, +@rglosnamed{note value,valeur des notes}, +@rglosnamed{Duration names notes and rests,Noms de durée (notes et silences)}. + +Manuel de notation : +@ref{Barres de ligature automatiques}, +@ref{Liaisons de prolongation}, +@ref{Hampes}, +@ref{Écriture du rythme}, +@ref{Écriture des silences}, +@ref{Musique vocale}, +@ref{Notations anciennes}, +@ref{Notation proportionnelle}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{Dots}, +@rinternals{DotColumn}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +Il n'existe pas à proprement parler de limite (inférieure ou supérieure) +en terme de durée d'un silence. Cependant, le nombre de glyphes +disponibles ne couvre que les silences allant du trente-deuxième de +soupir à la maxime (valant huit pauses). + + +@node Nolets +@unnumberedsubsubsec Nolets +@translationof Tuplets + +@cindex nolets +@cindex triolets + +@funindex \times +@funindex times + +Les nolets -- triolets, quintolets, etc. -- sont obtenus en +multipliant toutes les durées d'une expression musicale par une +fraction. + +@example +\times @var{fraction} @{ @var{expression_musicale} @} +@end example + +@noindent +La durée de l'@code{@var{expression_musicale}} sera multipliée par la +fraction. Le dénominateur de cette fraction sera imprimé au-dessus ou +au-dessous des notes, parfois avec un crochet. Le nolet le plus courant +est le triolet, dans lequel 3 notes ont la durée de 2, et où les notes +durent donc 2/3 de leur valeur écrite. + +@lilypond[quote,verbatim,relative=2] +a2 \times 2/3 { b4 b b } +c4 c \times 2/3 { b4 a g } +@end lilypond + +@cindex crochet de nolet, positionnement + +@funindex \tupletUp +@funindex tupletUp +@funindex \tupletDown +@funindex tupletDown +@funindex \tupletNeutral +@funindex tupletNeutral + +Des commandes prédéfinies permettent de déroger au positionnement +automatique du crochet en surplomb ou au-dessous des notes -- voir le +chapitre @ref{Direction et positionnement}. + +Les nolets peuvent être imbriqués@tie{}; par exemple, + +@lilypond[quote,verbatim,relative=2] +\autoBeamOff +c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 | +@end lilypond + +Lorsque, dans une imbrication, les nolets débutent au même instant, il +vous faut recourir à la commande @code{\tweak}. + +Vous pouvez interférer sur la durée des notes sans imprimer de crochet, +comme indiqué au chapitre @ref{Changement d'échelle des durées}. + + +@predefined +@code{\tupletUp}, +@code{\tupletDown}, +@code{\tupletNeutral}. +@endpredefined + +@snippets + +@cindex nolets, formatage +@cindex triolets, formatage + +@funindex tupletNumberFormatFunction +@funindex tupletSpannerDuration + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{entering-several-tuplets-using-only-one--times-command.ly} + +@cindex nolet, modification du chiffre + +@funindex TupletNumber + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-tuplet-number.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{non-default-tuplet-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-tuplet-bracket-visibility.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{permitting-line-breaks-within-beamed-tuplets.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{triplet,triolet}, +@rglosnamed{tuplet,nolet}, +@rglosnamed{polymetric,polymétrie}. + +Manuel d'initiation : +@rlearning{Méthodes de retouche}. + +Manuel de notation : +@ref{Gestion du temps}, +@ref{Changement d'échelle des durées}, +@ref{La commande d'affinage (tweak)}, +@ref{Notation polymétrique}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Références des propriétés internes : +@rinternals{TupletBracket}, +@rinternals{TupletNumber}, +@rinternals{TimeScaledMusic}. + + +@cindex notes d'ornement et crochet de nolet + +@knownissues +Lorsqu'un nolet en début de portée est précédé d'une note d'ornement, +celle-ci doit se placer avant la commande @code{\times} pour éviter +toute erreur. Ailleurs dans la partition, les notes d'ornement peuvent +se placer au sein de l'expression constituant le nolet. + +@cindex indication de tempo et nolet + +Lorsqu'un nolet en début de mouvement est combiné avec une indication de +tempo -- grâce à la commande @code{\tempo} --, l'expression contenant le +nolet doit impérativement faire partie d'un bloc @code{\new Voice} +comme indiqué au chapitre @rlearning{Les voix contiennent la musique}. + + +@node Changement d'échelle des durées +@unnumberedsubsubsec Changement d'échelle des durées +@translationof Scaling durations + +@cindex échelonnement des durées +@cindex durées, échelonnement + +Vous pouvez altérer la durée des notes, silences ou accords en leur +joignant une fraction @var{N/D}, donnant @qq{@code{*}@var{N/D}} -- ou +@qq{@code{*}@var{N}} si @var{D=1}. Ceci ne modifiera en rien +l'apparence des notes ou silences produits, mais affectera le +positionnement de l'objet dans la mesure, ainsi que le rendu MIDI. Cette +fraction peut elle-même être multipliée du style @code{*M*N/D}. + +Dans l'exemple suivant, les trois premières notes prennent exactement +deux temps, mais aucun triolet n'est imprimé. + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Alter durations to triplets +a4*2/3 gis4*2/3 a4*2/3 +% Normal durations +a4 a4 +% Double the duration of chord +4*2 +% Duration of quarter, appears like sixteenth +b16*4 c4 +@end lilypond + +La durée d'un silence invisible ou saut de notes (@emph{skip}) peut +elle aussi être affectée d'un multiplicateur. Cette technique permet +tout simplement de sauter plusieurs mesures, comme par exemple un +@code{s1*23}. + +@cindex échelonnement de musique +@cindex musique échelonnée + +@funindex \scaleDurations +@funindex scaleDurations + +Il est tout à fait possible d'échelonner des fragments musicaux plus ou +moins longs à l'aide d'une simple fraction, comme si chaque note, accord +ou silence était affecté de ce même quotient. L'apparence de cette +musique ne sera en rien modifiée@tie{}; seule la durée des notes est +multipliée en interne par la fraction +@emph{numérateur}/@emph{dénominateur}. N'oubliez pas de préserver les +espaces de part et d'autre du point. Voici un exemple illustrant la +manière de comprimer ou étirer de la musique@tie{}: + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Normal durations +4 c8 a +% Scale music by *2/3 +\scaleDurations #'(2 . 3) { + 4. c8 a f +} +% Scale music by *2 +\scaleDurations #'(2 . 1) { + 4 c8 b +} +@end lilypond + +@noindent +Cette technique est tout à fait appropriée à la notation polymétrique -- +voir @ref{Notation polymétrique}. + + +@seealso +Manuel de notation : +@ref{Nolets}, +@ref{Silences invisibles}, +@ref{Notation polymétrique}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + + +@node Liaisons de prolongation +@unnumberedsubsubsec Liaisons de prolongation +@translationof Ties + +@cindex liaison de prolongation + +@funindex ~ + +Une liaison de tenue (ou de prolongation) relie deux notes adjacentes de +même hauteur. Dans les faits, elle prolonge la durée d'une note. + +@warning{Une liaison de tenue ne doit pas être confondue avec une +liaison d'@strong{articulation} ou de @strong{phrasé}. Une liaison de +tenue est un moyen parmi d'autres pour prolonger la durée d'une note, +tout comme les points.} + +Une liaison de tenue s'indique au moyen d'un tilde @code{~}. + +@lilypond[quote,verbatim,relative=2] +a2 ~ a +@end lilypond + +Les liaisons de tenue sont utilisées soit lorsque la note dépasse de la +mesure, soit quand les points ne suffisent pas à donner la bonne durée. +Lorsque l'on utilise ces liaisons, les valeurs rythmiques les plus +longues doivent s'aligner sur les subdivisions de la mesure, comme +ici@tie{}: + +@c KEEP LY +@lilypond[verbatim,quote] +\relative { + r8^"oui" c8 ~ c2 r4 | + r8^"non" c2 ~ c8 r4 +} +@end lilypond + +Lorsque l'on doit lier de nombreuses notes sur plusieurs mesures, il +devient plus facile d'avoir recours à la division automatique des notes +-- voir @ref{Découpage automatique des notes}. Ce procédé divise +automatiquement les notes trop longues, et les lie par-delà les barres +de mesure. + +@cindex liaison de tenue et accords +@cindex accords et liaisons de tenue + +Quand une liaison de tenue se trouve entre deux accords, toutes les +notes de même hauteur entre ces deux accords sont reliées. S'il n'y en +a aucune, aucune liaison n'est créée. Il est également possible de lier +partiellement deux accords, en mettant les liaisons à l'intérieur des +accords. + +@lilypond[quote,verbatim,relative=1] + ~ + +@end lilypond + +@cindex liaison de tenue et répétition +@cindex répétition et liaison de tenue +@cindex reprises avec alternatives et liaisons de prolongation +@cindex liaison de prolongation et reprise avec alternative + +@funindex \repeatTie +@funindex repeatTie + +Lorsqu'une mesure @qq{de seconde fois} après une reprise commence sur +une note liée, la liaison doit être répétée, comme ici@tie{}: + +@lilypond[quote,relative=2,verbatim] +\repeat volta 2 { c g 2 ~ } +\alternative { + % First alternative: following note is tied normally + { 2. r4 } + % Second alternative: following note has a repeated tie + { 2\repeatTie d4 c } } +@end lilypond + +@cindex laissez vibrer +@cindex liaison, laissez vibrer + +@funindex \laissezVibrer +@funindex laissezVibrer + +Les liaisons @qq{Laissez vibrer} (@notation{L.v.}) sont utilisées pour +le piano, la harpe, et certains instruments de percussion. Elles +indiquent à l'instrumentiste de laisser sonner la note ou l'accord au +lieu de l'étouffer. Elles s'indiquent de la manière suivante@tie{}: + +@lilypond[quote,verbatim,relative=1] + 1\laissezVibrer +@end lilypond + +@cindex liaisons de prolongation, positionnement + +@funindex \tieUp +@funindex tieUp +@funindex \tieDown +@funindex tieDown +@funindex \tieNeutral +@funindex tieNeutral + +Le positionnement vertical des liaisons de prolongation peut être affiné +-- voir à ce sujet les @qq{commandes prédéfinies} et, pour de plus +amples détails, @ref{Direction et positionnement}. + +@cindex liaison de prolongation, apparence +@cindex liaison de prolongation, pointillés +@cindex liaison de prolongation, tirets + +@funindex \tieDotted +@funindex tieDotted +@funindex \tieDashed +@funindex tieDashed +@funindex \tieSolid +@funindex tieSolid + +Les liaisons de prolongation peuvent s'imprimer sous la forme de ligne +continue, discontinue ou pointillée. + +@lilypond[quote, verbatim, relative=1] +\tieDotted +c2 ~ c +\tieDashed +c2 ~ c +\tieHalfDashed +c2 ~ c +\tieHalfSolid +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Il est même possible d'en personnaliser l'allure@tie{}: + +@lilypond[quote, verbatim, relative=1] +\tieDashPattern #0.3 #0.75 +c2 ~ c +\tieDashPattern #0.7 #1.5 +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Que ce soit pour une tenue ou un phrasé, le motif d'une ligne +discontinue formant une liaison se définit de la même manière. Pour de +plus amples détails à ce sujet, reportez vous au chapitre +@ref{Liaisons d'articulation}. + +@predefined +@code{\tieUp}, +@code{\tieDown}, +@code{\tieNeutral}, +@code{\tieDotted}, +@code{\tieDashed}, +@code{\tieDashPattern}, +@code{\tieHalfDashed}, +@code{\tieHalfSolid}, +@code{\tieSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-ties-with-arpeggios.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{engraving-ties-manually.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{tie,liaison de tenue}, +@rglos{laissez vibrer}. + +Manuel de notation : +@ref{Liaisons d'articulation}, +@ref{Découpage automatique des notes}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{LaissezVibrerTie}, +@rinternals{LaissezVibrerTieColumn}, +@rinternals{TieColumn}, +@rinternals{Tie}. + + + +@knownissues +Un changement de portée, lorsqu'une liaison de tenue est active, ne +peut produire une liaison oblique. + +Un changement de clé ou d'octave pendant une liaison de tenue produit un +résultat indéfini. Dans ces cas là, il est préférable d'utiliser un +@emph{legato}. + + +@node Écriture des silences +@subsection Écriture des silences +@translationof Writing rests + +On saisit les silences dans une expression musicale tout comme les +notes. + +@menu +* Silences:: +* Silences invisibles:: +* Silences valant une mesure:: +@end menu + +@node Silences +@unnumberedsubsubsec Silences +@translationof Rests + +@cindex silences +@cindex durée d'un silence +@cindex double pause + +@funindex \rest +@funindex rest +@funindex r +@funindex \maxima +@funindex maxima +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve + +Les silences sont écrits comme des notes avec le nom de note @code{r} -- +premier caractère du mot @emph{rest}. Les durées supérieures à la pause +s'indiquent à l'aide de commandes prédéfinies@tie{}: + +@c \time 16/1 is used to avoid spurious bar lines +@c and long tracts of empty measures +@lilypond[quote,verbatim,relative=2] +\new Staff { + % These two lines are just to prettify this example + \time 16/1 + \override Staff.TimeSignature #'stencil = ##f + % Print a maxima rest, equal to four breves + r\maxima + % Print a longa rest, equal to two breves + r\longa + % Print a breve rest + r\breve + r1 r2 r4 r8 r16 r32 r64 r128 +} +@end lilypond + +@cindex silence multimesure +@cindex mesure de silence + +Les pauses d'une mesure complète, qui sont placées au centre de la +mesure, doivent être entrées comme des mesures de silence. Elles +peuvent être utilisées pour une seule mesure comme pour plusieurs, et +leur utilisation est expliquée dans la section +@ref{Silences valant une mesure}. + +@cindex silence, spécification du positionnement vertical + +Pour spécifier explicitement la position verticale d'un silence, écrivez +une note suivie de @code{\rest}. Un silence de même durée sera placé +à la position où serait imprimée la note. Cela rend plus facile la mise +en place de musique polyphonique, puisque le formateur automatique de +collision des silences laissera ces silences tranquilles. + +@lilypond[quote,verbatim,relative=2] +a4\rest d4\rest +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{rest-styles.ly} + + +@seealso +Glossaire musicologique : +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}. + +Manuel de notation : +@ref{Silences valant une mesure}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{Rest}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +Il n'existe pas à proprement parler de limite (inférieure ou supérieure) +en terme de durée d'un silence. Cependant, le nombre de glyphes +disponibles ne couvre que les silences allant du trente-deuxième de +soupir à la maxime (équivalant à huit pauses). + + +@node Silences invisibles +@unnumberedsubsubsec Silences invisibles +@translationof Invisible rests + +@cindex sauts de durée +@cindex silences invisibles +@cindex silences d'espacement + +@funindex s +@funindex \skip +@funindex skip + +Un silence invisible -- que l'on pourrait appeler un @qq{saut} -- +peut être entré comme une note avec le nom de note @code{s} ou avec +@code{\skip@tie{}@var{durée}}@tie{}: + +@lilypond[verbatim,quote,relative=2] +c4 c s c +s2 c +@end lilypond + +@cindex paroles, blanc +@cindex paroles, saut de notes + +La syntaxe @code{s} est seulement disponible pour les modes d'entrée +de notes et d'accords. Dans les autres situations, pour l'entrée de +paroles par exemple, vous devrez utiliser la commande @code{\skip}, qui +requiert une durée explicite@tie{}; cette durée ne sera pas prise en +considération dès lors que les paroles suivent le rythme des notes de la +mélodie à laquelle vous les aurez associées à l'aide des commandes +@code{\addlyrics} ou @code{\lyricsto}. + +@lilypond[quote,verbatim,relative=2] +<< + { + a2 \skip2 a2 a2 + } + \new Lyrics { + \lyricmode { + foo2 \skip 1 bla2 + } + } +>> +@end lilypond + +Gardez à l'esprit que @code{\skip} est une commande, et de ce fait +n'affectera en rien la durée des notes qui suivent, contrairement à +un@tie{}@code{s}. + +@lilypond[quote,verbatim,relative=2] +<< + { + \repeat unfold 8 {a4} + } + { + a4 \skip 2 a | + s2 a + } +>> +@end lilypond + +La commande de saut génère simplement une case musicale vide. Le code +de saut @code{s} crée tout de même les contextes @code{Staff} et +@code{Voice} lorsque nécessaire, à l'instar des notes ou des +silences@tie{}: + +@lilypond[quote,verbatim,relative=2] +s1 s s +@end lilypond + +Un @code{\skip} ne fait que sauter du temps musical@tie{}; il ne produit +rien du tout, pas même un symbole transparent. + +@lilypond[quote,verbatim,relative=2] +% This is valid input, but does nothing +\skip 1 \skip1 \skip 1 +@end lilypond + + +@seealso +Manuel d'initiation : +@rlearning{Visibilité et couleur des objets}. + +Manuel de notation : +@ref{Dictée à trous}, +@ref{Visibilité des objets}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{SkipMusic}. + + +@node Silences valant une mesure +@unnumberedsubsubsec Silences valant une mesure +@translationof Full measure rests + +@cindex mesures à compter +@cindex mesure entière de silence +@cindex silences multimesures +@cindex silences, mesure entière +@cindex une pause par mesure + +@funindex R + +Un silence valant une ou plusieurs mesures entières s'entre avec un +@code{R} majuscule. + +@lilypond[quote,verbatim,relative=2] +% Rest measures contracted to single measure +\compressFullBarRests +R1*4 +R1*24 +R1*4 +b2^"Tutti" b4 a4 +@end lilypond + +Ceci ne peut être utile que pour une mesure complètement vide. Sa durée +doit donc correspondre à la longueur de la mesure telle que définie par +la métrique. C'est la raison pour laquelle on utilisera aussi des +points d'augmentation ou des fractions@tie{}: + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 2/4 +R1 | R2 | +\time 3/4 +R2. | R2.*2 | +\time 13/8 +R1*13/8 | R1*13/8*12 | +\time 10/8 +R4*5*4 | +@end lilypond + +Un @code{R} qui s'étend sur une seule mesure s'imprime tantôt comme +une pause, tantôt comme une brève -- ou @qq{bâton de pause} -- et +sera centré sur la mesure quelle qu'en soit la métrique@tie{}: + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +R1 | +\time 6/4 +R1*3/2 | +\time 8/4 +R1*2 | +@end lilypond + +@cindex silence multimesure, expansion +@cindex silence multimesure, contraction + +@funindex \expandFullBarRests +@funindex expandFullBarRests +@funindex \compressFullBarRests +@funindex compressFullBarRests + +Par défaut, un silence multimesures sera répété sur autant de mesures +que nécessaire. Il peut aussi n'être imprimé qu'une seule fois, +surplombé du nombre de mesures vides -- ou @qq{à compter}@tie{}: + +@lilypond[quote,verbatim,relative=2] +% Default behavior +\time 3/4 r2. | R2.*2 | +\time 2/4 R2 | +\time 4/4 +% Rest measures contracted to single measure +\compressFullBarRests +r1 | R1*17 | R1*4 | +% Rest measures expanded +\expandFullBarRests +\time 3/4 +R2.*2 | +@end lilypond + + +@cindex texte indiquant le nombre de mesures vides +@cindex silence multimesure, ajout de texte +@cindex script et silence multimesure +@cindex silence multimesure, script +@cindex étiquette et silence multimesure +@cindex silence multimesure, étiquette +@cindex point d'orgue et silence multimesure +@cindex silence multimesure et point d'orgue + +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex MultiMeasureRestText + +Vous pouvez aussi ajouter du texte à un silence multimesures en +utilisant la syntaxe @w{@var{note}-@code{markup}} (cf. +@ref{Mise en forme du texte}). La variable @code{\fermataMarkup} quant +à elle permet d'ajouter un point d'orgue@tie{}: + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 3/4 +R2.*10^\markup { \italic "ad lib." } +R2.^\fermataMarkup +@end lilypond + +@warning{C'est @code{MultiMeasureRestText} qui créera le texte, et +non @code{TextScript}. Les commandes de dérogation ou de redéfinition +doivent s'adresser à l'objet concerné, comme vous pouvez le constater +dans l'exemple suivant.} + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +% Ceci échouera : il y a erreur quant à l'objet spécifié +\override TextScript #'padding = #5 +R1^"pas bon !" +% Formulation correcte, qui fonctionnera +\override MultiMeasureRestText #'padding = #5 +R1^"ça marche !" +@end lilypond + +Un silence multimesures placé directement après une commande +@code{\partial} risque fort de perturber le vérificateur de limites et +numéros de mesure. + + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLenthOff +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex \compressFullBarRests +@funindex compressFullBarRests +@funindex \expandFullBarRests +@funindex expandFullBarRests + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}, +@code{\fermataMarkup}, +@code{\compressFullBarRests}, +@code{\expandFullBarRests}. +@endpredefined + + +@snippets + +@cindex silence d'église +@cindex kirchenpausen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-form-of-multi-measure-rests.ly} + +@cindex silence multimesure, positionnement +@cindex positionnement des silences multimesure + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{positioning-multi-measure-rests.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{multi-measure-rest-markup.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{multi-measure rest,silence multimesures}. + +Manuel de notation : +@ref{Durées}, +@ref{Texte}, +@ref{Mise en forme du texte}, +@ref{Commentaires textuels}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{MultiMeasureRest}. +@rinternals{MultiMeasureRestNumber}, +@rinternals{MultiMeasureRestText}. + + +@cindex doigtés et silences multimesure +@cindex silences multimesure et doigtés + +@knownissues + +Vous ne pouvez pas utiliser de doigtés (p. ex. @code{R1*10-4}) pour +positionner des nombres au dessus d'un silence multimesure, le numéro +de doigt (4) risquant de chevaucher le nombre de mesures à compter (10). + +@cindex condenser les silences +@cindex silences, condenser les + +Condenser plusieurs silences en un unique silence multimesures ne peut +être automatisé. + +@cindex silences, collisions entre + +Les silences multimesures peuvent générer des collisions avec d'autres +silences. + + +@node Gravure du rythme +@subsection Gravure du rythme +@translationof Displaying rhythms + +@menu +* Métrique:: +* Indication métronomique:: +* Levées:: +* Musique sans métrique:: +* Notation polymétrique:: +* Découpage automatique des notes:: +* Gravure de lignes rythmiques:: +@end menu + +@node Métrique +@unnumberedsubsubsec Métrique +@translationof Time signature + +@cindex chiffrage de mesure +@cindex chiffre indicateur de mesure +@cindex métrique + +@funindex \time +@funindex time + +Le chiffre de mesure indique le mètre d'une pièce@tie{}: une alternance +régulière de temps forts et de temps faibles. Il est indiqué par une +fraction au début de la portée@tie{}: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c2 +\time 3/4 c2. +@end lilypond + +@cindex métrique, visibilité + +La métrique est imprimée en début de morceau, et à chaque fois qu'elle +est modifiée. Si cette modification intervient au niveau d'un saut de +ligne, une métrique @qq{de précaution} sera imprimée avant de passer à +la ligne suivante. Ce comportement par défaut peut être modifié, comme +indiqué au chapitre @ref{Visibilité des objets}. + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c2 c +\break +c c +\break +\time 4/4 +c c c c +@end lilypond + +@cindex métrique, styles +@cindex styles de métrique + +@funindex \numericTimeSignature +@funindex numericTimeSignature +@funindex \defaultTimeSignature +@funindex defaultTimeSignature + +Le symbole de métrique utilisé pour les mesures à 2/2 et 4/4 peut être +changé pour un style numérique@tie{}: + +@lilypond[quote,verbatim,relative=2] +% Default style +\time 4/4 c1 +\time 2/2 c1 +% Change to numeric style +\numericTimeSignature +\time 4/4 c1 +\time 2/2 c1 +% Revert to default style +\defaultTimeSignature +\time 4/4 c1 +\time 2/2 c1 +@end lilypond + + +Les métriques anciennes font l'objet d'un +@rusernamed{Métriques anciennes, chapitre particulier}. + +@cindex métrique par défaut +@cindex ligature et métrique +@cindex métrique et ligature + +@funindex \overrideTimeSignatureSettings + +En plus de déterminer la métrique qui sera imprimée, la commande +@code{\time} réglera aussi les valeurs par défaut des propriétés +@code{baseMoment}, @code{beatStructure} et @code{beamExceptions}. +Les valeurs prédéterminées par défaut de ces différentes propriétés sont +inscrites dans le fichier @file{scm/time-signature-settings.scm}. Vous +pouvez les modifier de la manière suivante@tie{}: + +@lilypond[quote,verbatim] +\score { + \relative c' { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + } +} +@end lilypond + +@code{\overrideTimeSignatureSettings} prend quatre arguments@tie{}: + +@enumerate + +@item +@code{@var{timeSignatureFraction}}, un doublet Scheme indiquant la +métrique, + +@item +@code{@var{baseMomentFraction}}, un doublet Scheme comprenant les +numérateur et dénominateur de la fraction indiquant la base de la +pulsation, + +@item +@code{@var{beatStructure}}, une liste Scheme indiquant la structure de +cette pulsation, en unité de base, + +@item +@code{@var{beamExceptions}}, une liste associative des règles de +ligature pour cette métrique, en dehors de celles basées sur le temps +comme indiqué à la rubrique +@ref{Définition des règles de ligature automatique}. +@end enumerate + +Le contexte auquel doivent s'appliquer les dérogations introduites par +un @code{\overrideTimeSignatureSettings} doit exister avant l'appel de +ces réglages. Autrement dit, vous devrez explicitement mentionner le +contexte avant que ne survienne l'appel à +@code{\overrideTimeSignatureSettings} s'il n'y a pas déjà d'élément +musical. + +@lilypond[quote,verbatim] +\score { + \relative c' { + % This call will fail because the context isn't yet instantiated + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (2 2)"} + \repeat unfold 7 { c8 } | + % This call will succeed + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (3 1)"} + \repeat unfold 7 { c8 } | + } +} +@end lilypond + +@cindex métrique, retour au propriétés par défaut +@cindex retour au propriétés par défaut de la métrique +@funindex \revertTimeSignatureSettings + +Vous pouvez revenir à tout moment aux réglages prédéterminés d'une +métrique@tie{}: + +@lilypond[quote,verbatim] +\score{ + \relative c' { + \repeat unfold 8 { c8 } | + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + \revertTimeSignatureSettings #'(4 . 4) + \time 4/4 + \repeat unfold 8 { c8 } | + } +} +@end lilypond + +Le fait de déplacer du contexte @code{Score} au contexte @code{Staff} à +la fois le @code{Timing_translator} et le +@code{Default_bar_line_engraver} permet d'obtenir des réglages +particuliers pour les différentes portées d'un regroupement@tie{}: + + +@lilypond[quote, verbatim] +\score { + \new StaffGroup << + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(1 3) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + >> + \layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } + } +} +@end lilypond + +@predefined +@code{\numericTimeSignature}, +@code{\defaultTimeSignature}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-time-signature-without-affecting-the-beaming.ly} + +@cindex métriques composites +@cindex métriques décomposées + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{time signature,métrique}. + +Manuel de notation : +@ref{Métriques anciennes}, +@ref{Gestion du temps}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Références des propriétés internes : +@rinternals{TimeSignature}, +@rinternals{Timing_translator}. + + +@node Indication métronomique +@unnumberedsubsubsec Indication métronomique +@translationof Metronome marks + +@cindex tempo +@cindex battements par minute +@cindex métronome, indication + +@funindex \tempo +@funindex tempo + +Une indication métronomique s'insère tout simplement comme ceci@tie{}: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 120 +c2 d +e4. d8 c2 +@end lilypond + +Lorsque le réglage précis du métronome est laissé à l'appréciation de +l'exécutant, vous pouvez cependant lui fournir une plage@tie{}: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 40 ~ 46 +c4. e8 a4 g +b,2 d4 r +@end lilypond + +Vous pouvez préférer une indication textuelle@tie{}: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +c4 e d c +b4. a16 b c4 r4 +@end lilypond + +Lorsque vous combinez des indications métronomiques sous forme textuelle +et numérique, l'indication numérique sera placée entre parenthèses@tie{}: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegro" 4 = 160 +g4 c d e +d4 b g2 +@end lilypond + +En matière d'indication textuelle, vous pouvez utiliser n'importe quel +objet de type @emph{markup}, comme ici@tie{}: + +@lilypond[verbatim,quote,relative=2] +\tempo \markup { \italic Faster } 4 = 132 +a8-. r8 b-. r gis-. r a-. r +@end lilypond + +Mentionner une indication textuelle vide vous permet de mettre entre +parenthèses l'indication numérique@tie{}: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-tempo-without-a-metronome-mark.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-metronome-marks-in-markup-mode.ly} + +Pour de plus amples détails, veuillez consulter +@ref{Mise en forme du texte}. + + +@seealso +Glossaire musicologique : +@rglosnamed{metronome,métronome}, +@rglosnamed{metronomic indication,indication métronomique}, +@rglosnamed{tempo indication,indication du tempo}, +@rglosnamed{metronome mark,marque de métronome}. + +Manuel de notation : +@ref{Mise en forme du texte}, +@ref{Sortie MIDI}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{MetronomeMark}. + + +@node Levées +@unnumberedsubsubsec Levées +@translationof Upbeats + +@cindex anacrouse +@cindex levée +@cindex mesure incomplète +@cindex mesure, changement de longueur + +@funindex measurePosition +@funindex \partial +@funindex partial + +Les mesures incomplètes, telles que les anacrouses ou levées, doivent +être entrées avec la commande @code{\partial}. La syntaxe de cette +commande est + +@example +\partial @var{durée} +@end example + +@noindent +où @code{@var{durée}} correspond à la valeur rythmique devant être +ajoutée avant la première mesure complète@tie{}: + +@lilypond[quote,verbatim,relative=2] +\partial 4 e4 | +a2. c,4 | +@end lilypond + +Une mesure incomplète peut être de n'importe quelle longueur inférieure +à la mesure complète@tie{}: + +@lilypond[quote,verbatim,relative=2] +\partial 8*3 c8 d e | +a2. c,4 | +@end lilypond + +Le programme traduit cette commande @code{\partial @var{durée}} en + +@example +\set Timing.measurePosition = -@var{durée} +@end example + +Par exemple, @code{\partial 8*3} est traduit en@tie{}: + +@example +\set Timing.measurePosition = #(ly:make-moment -3 8) +@end example + +La propriété @code{measurePosition} contient un nombre rationnel qui +indique, à ce point précis, où l'on en est de la mesure. Notez qu'il +s'agit du résultat d'une soustraction@tie{}; @code{\partial 4} +signifie, pour le programme@tie{}: @qq{Dans cette mesure, il reste juste +une noire}. + +@seealso +Glossaire musicologique : +@rglosnamed{anacrusis,anacrouse}. + +Manuel de notation : +@ref{Notes d'ornement}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Références des propriétés internes : +@rinternals{Timing_translator}. + + +@knownissues + +@code{\partial} n'est destiné à être utilisé qu'en début de pièce. +Si on l'utilise ailleurs qu'au début, des messages d'erreurs peuvent +s'afficher. Utilisez plutôt @code{\set@tie{}Timing.measurePosition} en +pareil cas. + + +@node Musique sans métrique +@unnumberedsubsubsec Musique sans métrique +@translationof Unmetered music + +@cindex barres de mesure, suppression +@cindex numérotation des mesures, suppression +@cindex cadence +@cindex musique non mesurée + +@funindex \cadenzaOn +@funindex cadenzaOn +@funindex \cadenzaOff +@funindex cadenzaOff + +Les barres de mesure et les numéros de mesure sont calculés +automatiquement, ce qui n'est pas souhaitable dans le cas d'une musique +non mesurée -- les cadences par exemple. Les commandes +@code{\cadenzaOn} et @code{\cadenzaOff} permettent de désactiver et de +rétablir ce comportement automatique. + +@lilypond[verbatim,relative=2,quote] +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +La numérotation reprend dès la fin d'une cadence, comme si celle-ci +n'avait pas existé@tie{}: + +@lilypond[verbatim,relative=2,quote] +% Show all bar numbers +\override Score.BarNumber #'break-visibility = #all-visible +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +@cindex ligature et cadence +@cindex ligature et musique non mesurée +@cindex cadence et ligature +@cindex musique non mesurée et ligature + +L'instruction @code{\cadenzaOn} désative les ligatures +automatiques@tie{}; elles seront réactivées après un @code{\cadenzaOff}. +Toutes les ligatures devront donc être indiquées de manière explicite +tout au long de la cadence -- voir @ref{Barres de ligature manuelles}). + +@lilypond[verbatim,relative=2,quote] +\repeat unfold 8 { c8 } +\cadenzaOn +\repeat unfold 5 { c8 } +\bar"|" +\cadenzaOff +\repeat unfold 8 { c8 } +@end lilypond + +Notez bien que ces commandes prédéfinies affecteront toutes les portées +de la partition, même si vous ne les placez que dans un simple contexte +@code{Voice}. Pour éviter ce désagrément, transférez le +@code{Timing_translator} du contexte @code{Score} au contexte +@code{Staff}, comme indiqué au chapitre @ref{Notation polymétrique}. + + +@predefined +@code{\cadenzaOn}, +@code{\cadenzaOff}. +@endpredefined + + +@seealso +Glossaire musicologique : +@rglosnamed{cadenza,cadence}. + +Manuel de notation : +@ref{Visibilité des objets}, +@ref{Notation polymétrique}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + + +@cindex cadence et saut de ligne +@cindex cadence et saut de page +@cindex musique non mesurée et saut de ligne +@cindex musique non mesurée et saut de page +@cindex sauts de ligne et cadences +@cindex sauts de page et cadences +@cindex sauts de ligne et musique non mesurée +@cindex sauts de page et musique non mesurée + + +@knownissues + +LilyPond ne change de ligne ou de page qu'au niveau des barres de +mesure. Si votre musique non mesurée s'étend sur plus d'une ligne, il +vous faudra insérer des barres de mesure invisibles, + +@example +\bar "" +@end example + +@noindent +pour indiquer où des sauts de ligne peuvent prendre place. + +Au risque d'obtenir des messages d'erreur inhabituels, il est fortement +recommandé de créer explicitement un contexte @code{Voice} lorsqu'un +morceau débute par un @code{\cadenzaOn}. + +@example +\new Voice @{ + \relative c' @{ + \cadenzaOn + c16[^"Solo Free Time" d e f] g2. + \bar "||" + \cadenzaOff + @} +@} +@end example + + +@node Notation polymétrique +@unnumberedsubsubsec Notation polymétrique +@translationof Polymetric notation + +@c This section necessarily uses \set +@c This is acceptable -td + +@cindex métrique double +@cindex métrique composite +@cindex composite, métrique +@cindex métrique polymétrique +@cindex polymétrie + +@funindex timeSignatureFraction +@funindex \scaleDurations +@funindex scaleDurations +@funindex \times +@funindex times + +LilyPond gère les métriques composites, aussi bien de manière explicite +que de manière détournée -- modification de l'indicateur de métrique +et échelonnement de la durée des notes. + +@strong{@i{Portées aux métriques différentes, mesures d'égale longueur}} + +Il suffit, pour obtenir cette forme de notation, de tout d'abord +affecter une même métrique aux différentes portées. L'indicateur de +métrique sera ensuite remplacé dans chacune des portées par un quotient +donné en argument à la propriété @code{timeSignatureFraction}. La durée +des notes sera enfin proratisée selon la métrique commune (voir +@ref{Métrique}) grâce à la fonction @code{\scaleDurations}, qui +s'utilise tout comme la commande @code{\times} -- sans toutefois créer +de crochet de nolet (voir @ref{Changement d'échelle des durées}). + +@cindex ligature et musique polymétrique +@cindex polymétrie et ligature + +L'exemple suivant utilise parallèlement des mesures à 3/4, 9/8 et +10/8. Pour la deuxième portée les durées sont multipliées par 2/3 +de telle sorte que 2/3@tie{}*@tie{}9/8@tie{}=@tie{}3/4@tie{}; pour la +troisième elles sont multipliées par 3/5, de telle sorte que +3/5@tie{}*@tie{}10/8@tie{}=@tie{}3/4. Les ligatures devront être +explicites, la fonction d'échelonnement venant perturber les règles de +ligature automatique. + +@lilypond[quote,verbatim] +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \repeat unfold 6 { c8[ c c] } + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(10 . 8) + \scaleDurations #'(3 . 5) { + \repeat unfold 2 { c8[ c c] } + \repeat unfold 2 { c8[ c] } | + c4. c4. \times 2/3 { c8[ c c] } c4 + } + } +>> +@end lilypond + +@strong{@i{Portées aux métriques différentes, mesures de longueur inégale}} + +Il arrive aussi que chaque portée ait sa propre métrique. Vous y +parviendrez en déplaçant le @code{Timing_translator} et le +@code{Default_bar_line_engraver} dans le contexte @code{Staff}. + +@lilypond[quote,verbatim] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +% Now each staff has its own time signature. + +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 2/4 + c4 c | + c c | + c c | + } + \new Staff { + \time 3/8 + c4. | + c8 c c | + c4. | + c8 c c | + } +>> +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{polymetric,polymétrie}, +@rglosnamed{polymetric time signature,métrique composite}, +@rglosnamed{meter,métrique}. + +Manuel de notation : +@ref{Métrique}, +@ref{Changement d'échelle des durées}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Références des propriétés internes : +@rinternals{TimeSignature}, +@rinternals{Timing_translator}, +@rinternals{Default_bar_line_engraver}, +@rinternals{Staff}. + + +@knownissues + +L'utilisation de métriques différentes en parallèle entraine un +alignement vertical. De ce fait, les barres de mesure ont tendance à +fausser l'espacement régulier entre les différentes portées. + + +@node Découpage automatique des notes +@unnumberedsubsubsec Découpage automatique des notes +@translationof Automatic note splitting + +@cindex notes, division +@cindex division de notes + +@funindex Note_heads_engraver +@funindex Completion_heads_engraver + +On peut convertir automatiquement les notes longues en notes liées. Il +suffit pour cela de remplacer le graveur @code{Note_heads_engraver} +par le graveur @code{Completion_heads_engraver}. Dans l'exemple +suivant, les notes qui dépassent de la mesure sont divisées et liées. + +@lilypond[quote,verbatim,relative=1] +\new Voice \with { + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" +} + +{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } +@end lilypond + +Ce graveur divise toutes les notes qui sortent de la mesure, et insère +des liaisons de prolongation. Dans la pratique, cette fonctionnalité +permet de déboguer des partitions complexes@tie{}: si les mesures ne +sont pas entièrement remplies, alors les liaisons de prolongation +montrent exactement la durée des décalages de mesure. + + +@seealso +Glossaire musicologique : +@rglosnamed{tie,liaison de tenue}. + +Manuel d'initiation : +@rlearning{Tout savoir sur les graveurs}, +@rlearning{Ajout et suppression de graveurs}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Références des propriétés internes : +@rinternals{Note_heads_engraver}, +@rinternals{Completion_heads_engraver}, +@rinternals{Forbid_line_break_engraver}. + + +@knownissues + +Bien que toutes les durées -- particulièrement celles contenant des +nolets -- ne puissent être exactement représentées avec des notes +normales et des points, le graveur @code{Completion_heads_engraver} +n'insérera pas de nolet. + +Le @code{Completion_heads_engraver} affecte seulement les notes, il ne +divise pas les silences. + + +@node Gravure de lignes rythmiques +@unnumberedsubsubsec Gravure de lignes rythmiques +@translationof Showing melody rhythms + +@cindex mélodie, affichage du rythme seul +@cindex rythmique d'une mélodie + +Au moyen d'une portée rythmique -- @emph{rhythmic staff} en anglais -- +on peut montrer seulement le rythme d'une mélodie@tie{}: toutes les +notes sont ramenées à la même hauteur, sur une portée d'une seule ligne. + +@lilypond[quote,relative=1,verbatim] +<< + \new RhythmicStaff { + \new Voice = "myRhythm" { + \time 4/4 + c4 e8 f g2 + r4 g g f + g1 + } + } + \new Lyrics { + \lyricsto "myRhythm" { + This is my song + I like to sing + } + } +>> +@end lilypond + +@cindex guitare, grille d'accords +@cindex coups de gratte, indication +@cindex guitare, coups de gratte + +@funindex Pitch_squash_engraver +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +L'utilisation combinée du @code{Pitch_squash_engraver} et de +@code{\improvisationOn} permet d'afficher la structure rythmique d'une +grille d'accords@tie{}: + +@lilypond[quote,verbatim] +<< + \new ChordNames { + \chordmode { + c1 f g c + } + } + \new Voice \with { + \consists Pitch_squash_engraver + } \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } +>> +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{guitar-strum-rhythms.ly} + + +@seealso +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{RhythmicStaff}. +@rinternals{Pitch_squash_engraver}. + + +@node Barres de ligature +@subsection Barres de ligature +@translationof Beams + +@menu +* Barres de ligature automatiques:: +* Définition des règles de ligature automatique:: +* Barres de ligature manuelles:: +* Liens de croches en soufflet:: +@end menu + +@node Barres de ligature automatiques +@unnumberedsubsubsec Barres de ligature automatiques +@translationof Automatic beams + +LilyPond décide automatiquement de la manière de grouper les notes et +d'imprimer les ligatures. + +@cindex ligatures manuelles +@cindex ligatures, définition de règles +@cindex ligatures, personnalisation + +@funindex \autoBeamOn +@funindex autoBeamOn +@funindex \autoBeamOff +@funindex autoBeamOff + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c8 c c c +\time 6/8 c8 c c c8. c16 c8 +@end lilypond + +Lorsque ce comportement automatisé n'est pas satisfaisant, on peut +définir des groupements manuellement -- voir +@ref{Barres de ligature manuelles}. Dans le cas où le groupe de notes +en question contient un silence, il est @strong{impératif} d'indiquer +explicitement les début et fin de la ligature. + +Lorsque les ligatures automatiques ne sont pas nécessaires, il suffit de +désactiver la fonctionnalité par un @code{\autoBeamOff} -- réactivation +par @code{\autoBeamOn}@tie{}: + +@lilypond[quote,relative=1,verbatim] +c4 c8 c8. c16 c8. c16 c8 +\autoBeamOff +c4 c8 c8. c16 c8. +\autoBeamOn +c16 c8 +@end lilypond + +@cindex mélisme et ligature +@cindex ligature et mélisme + +@warning{Si des ligatures sont utilisées dans les paroles d'une chanson +(pour indiquer des mélismes), les ligatures automatiques doivent être +désactivées, avec @code{\autoBeamOff}, et indiquées manuellement.} + +@warning{L'utilisation conjointe de @code{@bs{}partcombine} et de +@code{@bs{}autoBeamOff} peut produire des résultats quelque peu +surprenants@tie{}; ceci fait l'objet d'un exemple particulier à la +rubrique morceaux choisis.} + +Des règles de dérogation au comportement automatique par défaut sont +possibles@tie{}; voir +@ref{Définition des règles de ligature automatique}. + + +@predefined +@code{\autoBeamOff}, +@code{\autoBeamOn}. +@endpredefined + + +@snippets + +@cindex saut de ligne et ligature +@cindex ligature et saut de ligne + +@funindex breakable + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beams-across-line-breaks.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-beam-knee-gap.ly} + +@cindex \partcombine et \autoBeamOff +@cindex \autoBeamOff et \partcombine + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{partcombine-and-autobeamoff.ly} + + +@seealso +Manuel de notation : +@ref{Barres de ligature manuelles}, +@ref{Définition des règles de ligature automatique}. + +Fichiers d'initialisation : +@file{scm/auto-beam.scm}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Références des propriétés internes : +@rinternals{Auto_beam_engraver}, +@rinternals{Beam_engraver}, +@rinternals{Beam}. +@rinternals{BeamEvent}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}, +@rinternals{unbreakable-spanner-interface}. + + +@knownissues + +Les ligatures peuvent générer des collisions avec des têtes de note ou +altérations appartenant à d'autres voix. + + +@node Définition des règles de ligature automatique +@unnumberedsubsubsec Définition des règles de ligature automatique +@translationof Setting automatic beam behavior + +@cindex ligatures automatiques, personnalisation +@cindex réglage des ligatures automatiques +@cindex ligatures automatiques, génération de +@cindex autobeam +@cindex paroles et ligatures + +@funindex autoBeaming +@funindex baseMoment +@funindex beamExceptions +@funindex beatStructure +@funindex measureLength +@funindex \time +@funindex time +@funindex \set +@funindex set + +Dans la plupart des cas, une ligature automatique se termine à la fin +d'une pulsation. Ce sont les propriétés de contexte @code{baseMoment} +et @code{beatStructure} qui détermineront là où prend fin la pulsation. +La propriété @code{beatStructure} est constituée d'une liste d'éléments +Scheme qui définit la longueur de chaque pulsation, prenant +@code{baseMoment} comme unité. L'unité de base (le @code{baseMoment}) +correspond par défaut au dénominateur de la métrique. D'autre part, +chaque unité de @code{baseMoment} constitue une seule pulsation. + +@lilypond[quote,relative=2,verbatim] +\time 5/16 +c16^"default" c c c c | +\set Timing.beatStructure = #'(2 3) +c16^"(2+3)" c c c c | +\set Timing.beatStructure = #'(3 2) +c16^"(3+2)" c c c c | +@end lilypond + +Les effets de règles de ligature peuvent être restreints à un contexte +particulier. En l'absence de règle particulière déterminée dans un +contexte de niveau inférieur, les règles définies au niveau directement +supérieur s'appliqueront. + +@lilypond[quote, verbatim,relative=1] +\new Staff { + \time 7/8 + \set Staff.beatStructure = #'(2 3 2) + << + \new Voice = one { + \relative c'' { + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \set Voice.beatStructure = #'(1 3 3) + f8 f f f f f f + } + } + >> +} +@end lilypond + +Lorsque plusieurs voix cohabitent sur une même portée et que les règles +de ligature doivent s'appliquer sans distinction, il faut spécifier que +ces règles affectent le contexte @code{Staff}@tie{}: + +@lilypond[quote,verbatim,relative=2] +\time 7/8 +% rhythm 3-1-1-2 +% Context Voice specified -- does not work correctly +% Because of autogenerated voices, all beating will +% be at baseMoment (1 . 8) +\set beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> + +% Works correctly with context Staff specified +\set Staff.beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> +@end lilypond + +Vous pouvez ajuster la valeur de @code{baseMoment} afin d'obtenir des +ligatures selon vos besoin. Notez cependant que la valeur de +@code{beatStructure} devra être en corrélation avec cette nouvelle +valeur de @code{baseMoment}. + +@lilypond[quote,verbatim,relative=2] +\time 5/8 +\set Timing.baseMoment = #(ly:make-moment 1 16) +\set Timing.beatStructure = #'(7 3) +\repeat unfold 10 { a16 } +@end lilypond + +@code{baseMoment} constitue un @strong{moment}, autrement dit une unité +de durée musicale. La fonction Scheme @code{ly:make-moment} est tout +particulièrement chargée de créer cette quantité de type @i{moment} -- +voir @ref{Gestion du temps} pour plus de précisions. + +La pulsation -- @emph{baseMoment} en anglais -- découle directement de +la métrique telle que définie par la commande @code{\time}. Elle est +par défaut égale à un sur le dénominateur de la métrique. Les +exceptions à cette règle par défaut sont répertoriées dans le fichier +@file{scm/time-signature-settings.scm}. Pour savoir comment +jouer avec la valeur de @code{baseMoment} selon la métrique, reportez +vous au chapitre @ref{Métrique}. + +Les règles de ligature et de subdivision spécifiques sont enregistrées +dans la propriété @code{beamExceptions}. Ses valeurs par défaut, +rangées par métrique et type de règle, sont répertoriées dans le +fichier @file{scm/time-signature-settings.scm}. + +Les règles spécifiques autres que celles concernant la terminaison des +ligatures sont gérées par la propriété @code{beamExceptions}. + +@c KEEP LY +@lilypond[quote,relative=2,verbatim] +\time 3/16 +\set Timing.beatStructure = #'(2 1) +\set Timing.beamExceptions = + #'( ;ouvre de la liste associative + (end . ;ceci concerne la terminaison des ligatures + ( ;ouvre la liste des points de terminaison + ((1 . 32) . (2 2 2)) ;règle pour les triples -- groupées à la double + ))) %referme la liste +c16 c c | +\repeat unfold 6 { c32 } | +@end lilypond + +@code{beamExceptions} contient la liste des règles de ligature selon +leur type. + +Le seul type de règle pris en charge à ce jour est @code{#'end}, qui +concerne les terminaisons. + +Chaque règle est constituée d'une liste de doublets associatifs en +langage Scheme (un @emph{alist} pour les puristes), qui indique la durée +de base et sa règle de regroupement. + +@example +#'((durée-type1 . groupement-1) + (durée-type2 . groupement-2) + (durée-type3 . groupement-3)) +@end example + +@var{durée-type} est constitué d'une paire indiquant la durée de base -- +par exemple @code{(1@tie{}.@tie{}16)} pour une double croche. + +@var{groupement} est constitué d'une liste Scheme qui indique le +regroupement à effectuer, en unité de type de ligature. + +@warning{La propriété @code{beamExceptions} doit contenir absolument +@strong{toutes} les exceptions. Il n'est en effet pas possible d'en +ajouter, modifier ou suprimer @emph{a posteriori}. Cela peut paraître +fastidieux, mais toutes les règles de ligature devraient être appréciées +avant de les spécifier.} + +Lorsqu'intervient un changement de métrique, les valeurs par défaut de +@code{Timing.baseMoment}, @code{Timing.beatStructure} et +@code{Timing.beamExceptions} sont réinitialisées. Il suffit donc, pour +revenir aux règles de ligature par défaut d'un contexte @code{Timing}, +de spécifier à nouveau la métrique. + +@lilypond[quote,verbatim,relative=2] +\time 6/8 +\repeat unfold 6 { a8 } +% group (4 + 2) +\set Timing.beatStructure = #'(4 2) +\repeat unfold 6 { a8 } +% go back to default behavior +\time 6/8 +\repeat unfold 6 { a8 } +@end lilypond + +Les règles de ligature automatique par défaut sont répertoriées, par +métrique, dans le fichier @file{scm/time-signature-settings.scm}. Les +manières de déroger à ce comportement sont abordées au chapitre +@ref{Métrique}. + +@cindex ligature, mesure à 4/4 +@cindex mesure à 3/4 et ligature + +De nombreuses règles de ligature automatique comportent une clé +@code{beamExceptions}. Par exemple, s'il n'y a que des croches dans une +mesure à 4/4, celles-ci seront réparties en deux groupes. Le fait de ne +pas réinitialiser @code{beamExceptions} lors d'un aménagement de la +pulsation -- l'élément @code{beatStructure} -- empèchera l'application +de cette dérogation. + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +\set Timing.baseMoment = #(ly:make-moment 1 8) +\set Timing.beatStructure = #'(3 3 2) +% This won't beam (3 3 2) because of beamExceptions +\repeat unfold 8 {c8} | +% This will beam (3 3 2) because we clear beamExceptions +\set Timing.beamExceptions = #'() +\repeat unfold 8 {c8} +@end lilypond + +De la même manière, les croches d'une mesure à 3/4 sont par défaut +ligaturées sur la mesure entière. Réinitialiser @code{beamExceptions} +vous permettra alors de ligaturer les croches sur la base du temps. + +@lilypond[quote,verbatim,relative=2] +\time 3/4 +% by default we beam in (3) due to beamExceptions +\repeat unfold 6 {a8} | +% This will beam (1 1 1) due to beatLength +\set Timing.beamExceptions = #'() +\repeat unfold 6 {a8} +@end lilypond + +@i{@strong{Principes de la ligature automatique}} + +Lorsqu'elle est activée, la gestion automatisée des ligatures est +directement liée aux propriétés @code{baseMoment}, @code{beatStructure} +et @code{beamExceptions}. + +Les règles déterminant le positionnement des ligatures automatiques +s'appliquent dans l'ordre suivant de priorité@tie{}: + +@itemize +@item +Une ligature explicite -- indiquée par @code{[@dots{}]} -- sera toujours +respectée@tie{}; sinon + +@item +si une règle explicite de terminaison a été définie grâce à la propriété +@code{beamExceptions} pour un type de ligature spécifique dans la +métrique en cours, c'est elle qui s'appliquera@tie{}; sinon + +@item +si une règle explicite de terminaison a été définie grâce à la propriété +@code{beamExceptions} pour un type de ligature plus large, c'est elle +qui s'appliquera@tie{}; sinon + +@item +utilisation des valeurs de @code{baseMoment} et @code{beatStructure} +pour regrouper les notes par des ligatures. + +@end itemize + +Le type de ligature correspond à la durée la plus courte dans le groupe. + +Pour information, les règles de ligature par défaut sont répertoriées +dans le fichier @file{scm/time-signature-settings.scm}. + + +@snippets + +@cindex ligatures, subdivision +@cindex subdivision de ligature + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{subdividing-beams.ly} + +@cindex groupement de mesures +@cindex groupement de pulsations +@cindex pulsation, regroupement +@cindex mesure, subdivision + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{conducting-signs,-measure-grouping-signs.ly} + +@cindex ligature en fin de partition +@cindex ligature en fin de voix polyphonique + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beam-endings-in-score-context.ly} + + +@seealso +Fichiers d'initialisation : +@file{scm/beam-settings.scm}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{Auto_beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}. + + +@knownissues +Si une partition se termine alors qu'une ligature automatique est restée +inachevée, cette dernière ligature ne sera pas imprimée du tout. C'est +également valable dans le cas d'une musique polyphonique saisie avec la +syntaxe @w{@code{<< @dots{} \\ @dots{} >>}}, où une voix se terminerait +sans que la dernière ligature ne soit achevée. Le plus simple, en +pareil cas, est de spécifier manuellement les dernières ligatures. + +Le traducteur @code{Timing} est par défaut affecté au contexte +@code{Score}. Définir la métrique dans une portée aura donc des effets +sur les ligatures de toutes les autres. Par voie de conséquence, +la définition de la métrique apparaissant dans une autre portée annulera +les aménagements précédemment apportés aux règles de ligature. Il est +donc préférable, pour éviter tout désagrément, de ne spécifier la +métrique que dans une seule portée. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \time 3/4 + \set Timing.baseMoment = #(ly:make-moment 1 8) + \set Timing.beatStructure = #'(1 5) + \set Timing.beamExceptions = #'() + \repeat unfold 6 { a8 } + } + \new Staff { + \repeat unfold 6 { a8 } + } +>> +@end lilypond + +Vous pouvez adapter les règles de ligature par défaut pour une métrique +particulière de telle sorte que ces règles que vous aurez définies +soient toujours prises en compte. La modification des règles de +ligature automatiques sont abordées au chapitre @ref{Métrique}. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \overrideTimeSignatureSettings + #'(3 . 4) % timeSignatureFraction + #'(1 . 8) % baseMomentFraction + #'(1 5) % beatStructure + #'() % beamExceptions + \time 3/4 + \repeat unfold 6 { a8 } + } + \new Staff { + \time 3/4 + \repeat unfold 6 { a8 } + } +>> +@end lilypond + + +@node Barres de ligature manuelles +@unnumberedsubsubsec Barres de ligature manuelles +@translationof Manual beams + +@cindex groupements de note manuels +@cindex ligatures manuelles + +@funindex ] +@funindex [ + +Dans certaines situations, il peut s'avérer nécessaire de +supplanter l'algorithme de groupement automatique des notes, par +exemple pour prolonger une ligature par-dessus un silence ou une barre +de mesure, ou bien pour suivre le rythme des paroles plutôt que celui +des notes. Le début et la fin de la ligature sont alors indiqués +respectivement par @code{[} et @code{]}. + +@lilypond[quote,relative=1,verbatim] +r4 r8[ g' a r] r8 g[ | a] r +@end lilypond + +@cindex ligature manuelle, orientation +@cindex ligature manuelle et notes d'ornement + +Le positionnement des ligature manuelles se détermine comme pour toute +indication attachée à une note@tie{}: + +@lilypond[quote,relative=2,verbatim] +c8^[ d e] c,_[ d e f g] +@end lilypond + +@funindex \noBeam +@funindex noBeam + +Le fait d'affubler une note particulière d'un @code{\noBeam} aura pour +effet de l'empêcher d'être ligaturée@tie{}: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c8 c\noBeam c c +@end lilypond + +Notes d'ornement et normales font l'objet d'un traitement distinct. Il +est dont possible de ligaturer ou non des notes d'ornement sans géner ce +qui est en place au niveau de la notation normale. + +@lilypond[quote,verbatim,relative=2] +c4 d8[ +\grace { e32[ d c d] } +e8] e[ e +\grace { f16 } +e8 e] +@end lilypond + +@funindex stemLeftBeamCount +@funindex stemRightBeamCount + +LilyPond peut déterminer automatiquement les sous-groupes à +l'intérieur d'un groupement de notes, bien que le résultat ne soit pas +toujours optimal. Les propriétés @code{stemLeftBeamCount} et +@code{stemRightBeamCount} permettent alors d'ajuster ce comportement. +Lorsque l'une ou l'autre de ces propriétés est définie, elle ne +s'applique qu'une seule fois, après quoi sa définition est effacée. +Dans l'exemple qui suit, le dernier @code{fa} n'a de ligature +supplémentaire que sur sa gauche@tie{}; autrement dit, c'est la ligature +à la croche qui est importante. + +@lilypond[quote,relative=2,verbatim] +a8[ r16 f g a] +a8[ r16 +\set stemLeftBeamCount = #2 +\set stemRightBeamCount = #1 +f16 +\set stemLeftBeamCount = #1 +g16 a] +@end lilypond + + +@predefined +@code{\noBeam}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{flat-flags-and-beam-nibs.ly} + + +@seealso +Manuel de notation : +@ref{Direction et positionnement}, +@ref{Notes d'ornement}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{Beam_engraver}, +@rinternals{beam-interface}, +@rinternals{Stem_engraver}. + + +@node Liens de croches en soufflet +@unnumberedsubsubsec Liens de croches en soufflet +@translationof Feathered beams + +@cindex soufflet, ligature +@cindex ligature en soufflet + +@funindex \featherDurations +@funindex featherDurations +@funindex grow-direction + +Les ligatures en soufflet permettent d'indiquer qu'un petit groupe de +notes se joue en accélérant ou en ralentissant sans pour autant +modifier le tempo du morceau. L'étendue du soufflet s'indique par +@code{[} et @code{]}, et son orientation est déterminée par la propriété +@code{grow-direction} de l'objet @code{Beam}. + +Lorsque la sortie MIDI doit refléter les @emph{ritardando} ou +@emph{accelerando} indiqués par une ligature en soufflet, les notes +qui la composent doivent être regroupées dans une expression musicale +délimitée par des accolades, précédée de la commande +@code{featherDurations}. Cette commande détermine le ratio entre les +durées des premières et dernières notes du groupe en question. + +Les crochets indiquent l'étendue de la ligature et les accolades les +notes concernées par une modification de leur durée. Il s'agit en +général du même groupe de notes, mais les deux commandes sont +indépendantes l'une de l'autre. + +Dans l'exemple ci-après, les huit doubles croches occupent exactement le +même espace qu'une blanche, mais la première est moitié moins longue que +la dernière et celles qui les séparent s'allongent peu à peu. Les +quatre triples croches qui suivent vont s'accélérant, alors que les +quatre dernières gardent un tempo régulier. + +@lilypond[relative=1,verbatim,quote] +\override Beam #'grow-direction = #LEFT +\featherDurations #(ly:make-moment 2 1) +{ c16[ c c c c c c c] } +\override Beam #'grow-direction = #RIGHT +\featherDurations #(ly:make-moment 2 3) +{ c32[ d e f] } +% revert to non-feathered beams +\override Beam #'grow-direction = #'() +{ g32[ a b c] } +@end lilypond + +@noindent +Si le résultat imprimable ne reflète les durées que de manière +approximative, la sortie MIDI sera quant à elle parfaitement +@qq{ponctuelle}. + + +@predefined +@code{\featherDurations}. +@endpredefined + +@seealso +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + + + +@knownissues + +La commande @code{\featherDurations} ne permet de traiter que de très +courts extraits, avec une faible amplitude. + + +@node Mesures +@subsection Mesures +@translationof Bars + + +@menu +* Barres de mesure:: +* Numéros de mesure:: +* Vérification des limites et numéros de mesure:: +* Indications de repère:: +@end menu + +@node Barres de mesure +@unnumberedsubsubsec Barres de mesure +@translationof Bar lines + +@cindex barres de mesure +@cindex barre finale +@cindex double barre +@cindex barres de reprise + +@funindex \bar +@funindex bar + +Les barres de mesures délimitent les mesures, mais peuvent aussi +indiquer une reprise. En principe, elles sont insérées automatiquement +en respectant la métrique en vigueur. + +Il est possible de forcer l'impression d'une barre de mesure spéciale, +avec la commande @code{\bar} -- c'est d'ailleurs l'habitude en fin de +morceau, où l'on voit une double barre@tie{}: + +@lilypond[quote,relative=1,verbatim] +e4 d c2 \bar "|." +@end lilypond + +Rien ne s'oppose à ce que la dernière note d'une mesure ne s'arrête +avant la barre de mesure@tie{}; on considère simplement qu'elle se +prolonge sur la mesure suivante. Des débordements à répétition +finissent par générer une musique comprimée ou qui sort de la page, pour +la simple et bonne raison que les sauts de ligne automatiques ne peuvent +intervenir qu'à la fin d'une mesure complète, autrement dit lorsque +toutes les notes sont terminées avant la fin de la mesure. + +@warning{Une durée erronée peut empêcher les sauts de ligne, ce qui +conduit à une musique compressée, voire à un débordement de la page.} + +@cindex sauts de ligne +@cindex barre de mesure invisible +@cindex invisible, barre de mesure + +Il est possible d'autoriser un saut de ligne même s'il n'y a pas +de barre de mesure visible, en utilisant@tie{}: + +@example +\bar "" +@end example + +@noindent +Ceci insérera une barre de mesure invisible, et permettra -- sans pour +autant le forcer -- de sauter de ligne à cet endroit, sans incrémenter +le numéro de mesure. Pour forcer le saut de ligne, référez vous à +@ref{Sauts de ligne}. + +@cindex manuelle, barre de mesure +@cindex barre de mesure manuelle + +Cette barre invisible, ainsi que d'autres barres spéciales, peuvent être +insérées manuellement n'importe où. Lorsqu'elles coïncident avec la fin +d'une mesure, elles remplacent la simple barre que LilyPond aurait +insérée automatiquement. Dans le cas contraire, la barre spécifiée +s'insérera là où vous l'aurez positionnée. + +Ces insertions n'affectent en rien le calcul du positionnement +automatique des barres de mesure à suivre ni les propriétés y afférentes +-- numérotation, altérations accidentelles, sauts de ligne@dots{}@* +Lorsqu'une barre manuelle est insérée à l'endroit où viendrait se placer +une barre normale, seul l'effet visuel en sera modifié. + +Vous disposez de deux types de barres simples et de cinq différentes +doubles barres@tie{}: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|" +f1 \bar "." +g1 \bar "||" +a1 \bar ".|" +b1 \bar ".|." +c1 \bar "|.|" +d1 \bar "|." +e1 +@end lilypond + +@noindent +ainsi que d'une barre en pointillé et d'une discontinue@tie{}: + +@lilypond[quote,relative=1,verbatim] +f1 \bar ":" +g1 \bar "dashed" +a1 +@end lilypond + +@noindent +et de cinq types de barre de reprise@tie{}: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|:" +g1 \bar ":|:" +a1 \bar ":|.|:" +b1 \bar ":|.:" +c1 \bar ":|" +e1 +@end lilypond + +De plus, une barre de mesure peut s'imprimer sous la forme d'une +coche@tie{}: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "'" +@end lilypond + +On rencontre habituellement ces signes dans le chant grégorien@tie{}; +nous vous invitons dans ce cadre particulier à plutôt utiliser +@code{\divisioMinima}, comme indiqué au paragraphe @ref{Divisions} du +chapitre consacré au grégorien. + +@cindex segno + +L'insertion d'un @emph{segno} directement sur la portée s'obtient à +l'aide de trois types de barre de mesure, comme indiqué +ci-dessous@tie{}: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "S" +c4 c c c \break +\bar "S" +c4 c c c +\bar "|S" +c4 c c c \break +\bar "|S" +c4 c c c +\bar "S|" +c4 c c c \break +\bar "S|" +c1 +@end lilypond + +@cindex répétitions +@cindex reprises + +Bien que l'on puisse insérer des barres de reprise manuellement, +LilyPond n'en déduira pas pour autant qu'il s'agit d'un passage à +répéter. Il est préférable d'indiquer les passages répétés à l'aide des +différentes commandes de reprise (voir @ref{Répétitions et reprises}) +qui se chargeront d'imprimer le type de barre approprié. + +Dans les faits, un @code{"||:"} équivaut à un @code{"|:"} sauf s'il +intervient à un saut de ligne@tie{}: une double barre sera alors +imprimée en fin de portée, et la barre de reprise au début de la +nouvelle. + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "||:" +c4 c c c \break +\bar "||:" +c4 c c c +@end lilypond + +LilyPond dispose de six différents moyens de combiner une barre de +reprise avec un signe @emph{segno}@tie{}: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar ":|S" +c4 c c c \break +\bar ":|S" +c4 c c c +\bar ":|S." +c4 c c c \break +\bar ":|S." +c4 c c c +\bar "S|:" +c4 c c c \break +\bar "S|:" +c4 c c c +\bar ".S|:" +c4 c c c \break +\bar ".S|:" +c4 c c c +\bar ":|S|:" +c4 c c c \break +\bar ":|S|:" +c4 c c c +\bar ":|S.|:" +c4 c c c \break +\bar ":|S.|:" +c1 +@end lilypond + +Dans une partition comprenant plusieurs portées, la commande @code{\bar} +placée sur une portée s'applique automatiquement à toutes les portées. +Les barres de mesure que l'on obtient alors sont d'un seul tenant sur +les portées d'un @code{StaffGroup}, d'un @code{PianoStaff} ou d'un +@code{GrandStaff}. + +@lilypond[quote,relative=1,verbatim] +<< + \new StaffGroup << + \new Staff { + e4 d + \bar "||" + f4 e + } + \new Staff { \clef bass c4 g e g } + >> + \new Staff { \clef bass c2 c2 } +>> +@end lilypond + + +@cindex barre de mesure par défaut, modification du style +@cindex modification du style par défaut des barres de mesure + +@snippets + +@funindex whichBar +@funindex defaultBarType +@funindex \bar +@funindex bar +@funindex bartype + + +La commande @samp{\bar @var{type_de_barre}} sert de raccourci pour +@samp{\set Timing.whichBar = @var{type_de_barre}}. Dès +que l'on définit @code{whichBar}, une barre de mesure est créée selon le +style défini. + +Le type de barre de mesure par défaut utilisé pour l'insertion +automatique est @code{"|"}. Vous pouvez en changer à tout moment grâce +à @samp{\set Timing.defaultBarType = @var{type_de_barre}}. + + +@seealso +Manuel de notation : +@ref{Sauts de ligne}, +@ref{Répétitions et reprises}, +@ref{Regroupement de portées}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{BarLine} (faisant partie du contexte @code{Staff}), +@rinternals{SpanBar} (sur plusieurs portées), +@rinternals{Timing_translator} (pour les propriétés liées au temps). + + +@node Numéros de mesure +@unnumberedsubsubsec Numéros de mesure +@translationof Bar numbers + +@cindex mesure, numéro de +@cindex numéros de mesure + +@funindex currentBarNumber + +Les numéros de mesure sont imprimés par défaut à chaque début de +ligne, sauf la première. Ce nombre est stocké par la propriété +@code{currentBarNumber} qui sera mise à jour à chaque mesure. Vous +pouvez aussi le définir de manière arbitraire@tie{}: + +@lilypond[verbatim,quote,fragment,relative=1] +c1 c c c +\break +\set Score.currentBarNumber = #50 +c1 c c c +@end lilypond + +@cindex numéro de mesure à intervalle régulier + +@funindex barNumberVisibility +@funindex BarNumber + +Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt +qu'en tête de chaque ligne. Pour y arriver, il faudra dans un premier +temps annuler le comportement par défaut afin que les numéros puissent +être imprimés ailleurs qu'en début de ligne. Tout ceci est contrôlé par +la propriété @code{break-visibility} du @code{BarNumber}. Elle se +compose de trois commutateurs -- définis à @qq{vrai} (@code{#t}) ou +@qq{faux} (@code{#f}) -- pour spécifier si le numéro de mesure est +visible ou non. Les valeurs sont rangées dans l'ordre suivant@tie{}: +@code{visible en fin de ligne}, @code{visible en cours de ligne}, +@code{visible en début de ligne}. Voici comment imprimer partout les +numéros de mesure@tie{}: + +@lilypond[verbatim,quote,relative=1] +\override Score.BarNumber #'break-visibility = #'#(#t #t #t) +\set Score.currentBarNumber = #11 +% Permit first bar number to be printed +\bar "" +c1 | c | c | c +\break +c1 | c | c | c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-the-bar-number-for-the-first-measure.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-at-regular-intervals.ly} + +@cindex numéro de mesure, formatage +@cindex formatage du numéro de mesure + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-inside-boxes-or-circles.ly} + +@cindex alignement du numéro de mesure +@cindex numéro de mesure, alignement + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{aligning-bar-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{removing-bar-numbers-from-a-score.ly} + + +@seealso +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{BarNumber}, +@rinternals{Bar_number_engraver}. + + +@cindex numéro de mesure et collision +@cindex collision et numéro de mesure + +@knownissues +Les numéros de mesure peuvent entrer en collision avec les crochets d'un +@rinternals{StaffGroup}. La propriété @code{padding} -- décalage +-- de l'objet @rinternals{BarNumber} permet alors d'ajuster leur +positionnement. + + +@node Vérification des limites et numéros de mesure +@unnumberedsubsubsec Vérification des limites et numéros de mesure +@translationof Bar and bar number checks + +@cindex vérification des limites de mesure +@cindex mesures, vérification des limites + +@funindex barCheckSynchronize +@funindex | + +Les tests de limite de mesure (ou tests de mesure) aident à détecter +les erreurs dans les durées. Un test de mesure s'écrit avec une barre +verticale, @code{|}. Lors du traitement, elle doit correspondre à une +barre de mesure. Sinon, un avertissement est émis qui indique le numéro +de ligne où est détectée l'erreur. Dans l'exemple suivant, le deuxième +test de mesure signale une erreur. + +@example +\time 3/4 c2 e4 | g2 | +@end example + +Le test de mesure peut être aussi utilisé dans les paroles, par +exemple@tie{}: + +@example +\lyricmode @{ + \time 2/4 + Twin -- kle | Twin -- kle +@} +@end example + +Des durées incorrectes font échouer les tests de mesure et peuvent +souvent mettre la partition sens dessus dessous, particulièrement s'il +s'agit de musique polyphonique. Vérifier les tests de mesure qui ont +échoué et les durées incorrectes est un bon moyen de commencer à +corriger sa partition. + +Lorsque plusieurs tests successifs présentent un même décalage, seul le +message d'avertissement concernant la première occurrence est affiché. +L'origine du problème est de fait plus évidente. + +@funindex | +@funindex pipeSymbol + +Il est aussi possible d'attribuer une autre valeur au symbole +@code{|}, en assignant une expression musicale à @code{pipeSymbol}. +Dans l'exemple suivant, le @code{|} servira à insérer une double barre +là où il apparaît, au lieu de simplement vérifier que la fin de la +mesure est atteinte. + +@lilypond[quote,verbatim] +pipeSymbol = \bar "||" +{ + c'2 c' | + c'2 c' + c'2 | c' + c'2 c' +} +@end lilypond + +@funindex \barNumberCheck +@funindex barNumberCheck + +Lorsque l'on recopie de longues pièces, il peut être utile de vérifier +que les numéros de mesure de LilyPond correspondent à l'original que +l'on recopie. Cela se fait avec @code{\barNumberCheck}. Par exemple, + +@verbatim +\barNumberCheck #123 +@end verbatim + +@noindent +affiche un avertissement lors du traitement si le numéro de mesure à ce +point (variable @code{currentBarNumber}) n'est pas@tie{}123. + + +@seealso +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + + +@node Indications de repère +@unnumberedsubsubsec Indications de repère +@translationof Rehearsal marks + +@cindex repère, indication de + +@funindex \mark +@funindex mark + +Indiquer un repère s'obtient grâce à la commande @code{\mark}. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +Lorsque vous utilisez @code{\mark \default}, le repère s'incrémente +automatiquement@tie{}; toutefois donner un nombre en argument permet de +spécifier manuellement le repère en question. La valeur à utiliser +est enregistrée dans la propriété @code{rehearsalMark}. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +La lettre@tie{}@strong{I} n'est pas utilisée, conformément aux usages de +la gravure. Cependant, vous pourrez intégrer la lettre @strong{I} en +utilisant l'une des commandes suivantes selon que ce repère doive être +simple, inclus dans un rectangle ou dans un cercle@tie{}: + +@example +\set Score.markFormatter = #format-mark-alphabet +\set Score.markFormatter = #format-mark-box-alphabet +\set Score.markFormatter = #format-mark-circle-alphabet +@end example + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-box-alphabet +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@cindex repère, format +@cindex repère, style +@cindex style de repère +@cindex format de repère +@cindex repère manuel +@cindex spécification d'un repère +@cindex repère, personnalisation + +Le style de repère est déterminé par la propriété @code{markFormatter}. +Il s'agit d'une fonction qui prend en arguments le repère en cours (un +entier) ainsi que le contexte en cours, et retournera un objet de type +@emph{markup}. Dans l'exemple qui suit, @code{markFormatter} est réglé +pour une procédure type. Quelques mesures plus loin, son comportement +est modifié pour imprimer un repère encadré. + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-numbers +c1 \mark \default +c1 \mark \default +\set Score.markFormatter = #format-mark-box-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-letters +c1 +@end lilypond + +Le fichier @file{scm/translation-functions.scm} comporte les +définitions de @code{format-mark-numbers} (comportement par défaut), +@code{format-mark-box-numbers}, @code{format-mark-letters} et +@code{format-mark-box-letters}. Vous pouvez vous en inspirer pour +d'autres fonctions de formatage. + +@code{format-mark-barnumbers}, @code{format-mark-box-barnumbers} et +@code{format-mark-circle-barnumbers} permettent d'imprimer le numéro +de mesure au lieu des compteurs alphabétique ou numérique. + +On peut aussi spécifier manuellement une marque de repère@tie{}: + +@example +\mark "A1" +@end example + +@noindent +@code{Score.markFormatter} sera sans effet sur des repères ainsi +définis. Un @code{\markup} peut néanmoins s'utiliser en argument. + +@example +\mark \markup@{ \box A1 @} +@end example + +@cindex segno +@cindex coda +@cindex D.S al Fine +@cindex point d'orgue +@cindex glyphes musicales + +@funindex \musicglyph +@funindex musicglyph + +Un @code{\mark} peut contenir un glype musical tel que le signe +@emph{segno}. + +@lilypond[quote,verbatim,relative=1] +c1 \mark \markup { \musicglyph #"scripts.segno" } +c1 \mark \markup { \musicglyph #"scripts.coda" } +c1 \mark \markup { \musicglyph #"scripts.ufermata" } +c1 +@end lilypond + +@noindent +Pour connaître les différents symboles accessibles par +@code{\musicglyph}, consultez @ref{La fonte Feta}. + +Pour affiner le positionnement des repères, veuillez vous référer à +@ref{Mise en forme du texte}, et tout particulièrement ce qui concerne +la @code{break-alignable-interface} au chapitre +@ref{Alignement des objets}. + + +@seealso +Manuel de notation : +@ref{La fonte Feta}, +@ref{Mise en forme du texte}, +@ref{Alignement des objets}. + +Fichiers d'initialisation : +@file{scm/translation-functions.scm} contient les définitions de +@code{format-mark-numbers} et @code{format-mark-letters}. Elles seront +source d'inspiration pour d'autres fonctions de formatage. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + + +@node Fonctionnalités rythmiques particulières +@subsection Fonctionnalités rythmiques particulières +@translationof Special rhythmic concerns + + +@menu +* Notes d'ornement:: +* Alignement et cadences:: +* Gestion du temps:: +@end menu + +@node Notes d'ornement +@unnumberedsubsubsec Notes d'ornement +@translationof Grace notes + +@cindex ornements +@cindex broderies +@cindex notes d'ornement +@cindex appoggiature +@cindex acciaccature +@cindex petite note + +@funindex \grace +@funindex grace + +Les petites notes sont des ornements entièrement écrits. Leur taille +est un peu plus petite que celle des notes normales et elles n'occupent +pas de temps dans la mesure. + +@lilypond[quote,relative=2,verbatim] +c4 \grace c16 c4 +\grace { c16[ d16] } c2 +@end lilypond + +Les plus courantes sont les acciaccatures, qui doivent se jouer très +vite, et qui s'écrivent sous forme d'une petite note barrée (sur la +hampe) et liée. L'appoggiature est une petite note non barrée, qui vole +une fraction à la durée de la note réelle qui la suit. + +@lilypond[quote,relative=2,verbatim] +\grace c8 b4 +\acciaccatura d8 c4 +\appoggiatura e8 d4 +\acciaccatura { g16[ f] } e4 +@end lilypond + +Les petites notes se placent de façon synchrone entre les différentes +portées. Dans l'exemple suivant, il y a deux petites double-croches +pour chaque petite croche. + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e2 \grace { c16[ d e f] } e2 } + \new Staff { c2 \grace { g8[ b] } c2 } +>> +@end lilypond + +@cindex notes d'ornement en fin de note + +@funindex \afterGrace +@funindex afterGrace + +La commande @code{\afterGrace} sert à placer une petite note après une +note réelle -- et non @i{avant} comme d'ordinaire. Cette commande +requiert deux arguments@tie{}: la note réelle, et la ou les petites +notes qui suivent. + +@lilypond[quote,verbatim,relative=2] +c1 \afterGrace d1 { c16[ d] } c1 +@end lilypond + +Les petites notes se placent alors aux 3/4 de la durée de la note +réelle. Cette fraction peut être changée en définissant +@code{afterGraceFraction}. Dans l'exemple suivant, vous pouvez observer +la différence entre le comportement par défaut, à 15/16 et enfin à la +moitié de la durée de base. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 15 16)) + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 1 2)) + c1 \afterGrace d1 { c16[ d] } c1 + } +>> +@end lilypond + +Des silences invisibles permettent d'ajuster l'espace entre les petites +notes et la note réelle. Nous pourrions positionner ces petites notes à +sept huitièmes de la durée de la note de base@tie{}: + +@lilypond[quote,verbatim,relative=2] +\new Voice { + << + { d1^\trill_( } + { s2 s4. \grace { c16[ d] } } + >> + c1) +} +@end lilypond + +@cindex retouche des notes d'ornement +@cindex notes d'ornement et retouches +@cindex notes d'ornement, mise en forme + +Les expressions @code{\grace} obéissent à des règles typographiques +particulières, notamment pour régler l'orientation et la taille des +objets. De ce fait, toute subtilité de mise en forme devra être +indiquée @strong{à l'intérieur} de l'expression introduite par +@code{\grace}@tie{}; ces réglages additionnels doivent également être +désactivés dans cette même expression. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + \acciaccatura { + \stemDown + f16-> + \stemNeutral + } + g4 e c2 +} +@end lilypond + + +@cindex hampe barrée + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-grace-note-slashes-with-normal-heads.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-grace-layout-within-music.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{redefining-grace-note-global-defaults.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-grace-notes-with-floating-space.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{grace notes,ornements}, +@rglosnamed{acciaccatura,acciacature}, +@rglosnamed{appoggiatura,appogiature}. + +Fichiers d'initialisation : +@file{ly/grace-init.ly}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Référence des propriétés internes : +@rinternals{GraceMusic}, +@rinternals{Grace_beam_engraver}, +@rinternals{Grace_engraver}, +@rinternals{Grace_spacing_engraver}. + + +@knownissues + +@cindex acciaccature, multi-note +@cindex note d'ornement, synchronisation +@cindex synchronisation des notes d'ornement + +Un groupe de notes ligaturées consituant une @emph{acciaccatura} +apparaîtra comme une @emph{appoggiatura}, c'est-à-dire sans trait. + +@c TODO Add link to LSR snippet to add slash when available + +La synchronisation des petites notes se fait de façon parfois +surprenante, car les autres objets de la portée -- barre de mesure, +armure, etc. -- sont eux aussi synchrones. Pensez-y lorsque vous +mêlez des portées comprenant des petites notes et d'autres sans@tie{}: + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" d2. } +>> +@end lilypond + +@noindent +Il est possible de remédier à cela en insérant, sur les autres portées, +des silences invisibles dans une expression précédée de @code{\grace} et +correspondant à la durée des petites notes@tie{}: + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" \grace s16 d2. } +>> +@end lilypond + +Seules des expressions musicales séquentielles peuvent être utilisées +pour des petites notes@tie{}; il n'est pas possible d'imbriquer ni de +juxtaposer des sections de petites notes, faute de quoi le traitement du +code peut échouer ou produire des erreurs. + + +@node Alignement et cadences +@unnumberedsubsubsec Alignement et cadences +@translationof Aligning to cadenzas + +@cindex cadenza +@cindex cadence +@cindex cadence et alignement +@cindex alignement et cadence + +Dans un contexte orchestral, une cadence constitue un problème +spécifique. Lors du montage d'une partition contenant une cadence, +tous les autres instruments doivent sauter autant de notes que ce +qu'en comporte la cadence, faute de quoi ils démarreraient trop tôt ou +trop tard. + +Les fonctions @code{mmrest-of-length} ou @code{skip-of-length} +permettent de résoudre ce problème. Ces fonctions Scheme prennent en +argument un fragment de musique, et génèrent un @code{\skip} ou un +silence multimesures d'une durée correspondant à ce fragment. + +@lilypond[verbatim,quote] +MyCadenza = \relative c' { + c4 d8 e f g g4 + f2 g4 g +} + +\new GrandStaff << + \new Staff { + \MyCadenza c'1 + \MyCadenza c'1 + } + \new Staff { + #(ly:export (mmrest-of-length MyCadenza)) + c'1 + #(ly:export (skip-of-length MyCadenza)) + c'1 + } +>> +@end lilypond + + +@seealso +Glossaire musicologique : +@rglos{cadenza}. + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + + +@node Gestion du temps +@unnumberedsubsubsec Gestion du temps +@translationof Time administration + +@cindex temps, gestion du +@cindex musique non mesurée +@cindex non mesurée, musique + +@funindex currentBarNumber +@funindex measurePosition +@funindex measureLength + +Le temps est administré par le @code{Timing_translator}, qui réside en +principe dans le contexte @code{Score}. Un alias, @code{Timing}, sera +ajouté au contexte auquel le @code{Timing_translator} est rattaché. +Déclarer explicitement un contexte @code{Voice} ou @code{Staff} assure +l'existence de cet alias. + +@code{Timing} dispose des propriétés suivantes afin de garder trace du +minutage de la partition. + +@cindex numéro de mesure +@cindex mesure, numéro de + +@table @code +@item currentBarNumber +Le numéro de la mesure en cours. Un exemple d'utilisation se trouve au +chapitre @ref{Numéros de mesure}. + +@item measureLength +La longueur de la mesure, dans la métrique en cours. Pour une mesure +à 4/4, elle est de@tie{}1, et de 3/4 pour une mesure à 6/8. Sa valeur +détermine où peut s'insérer une barre et comment seront générées les +ligatures automatiques. + +@item measurePosition +Le moment où l'on en est dans la mesure en cours. Cette quantité est +remise à@tie{}0 dès lors qu'on dépasse @code{measureLength}@tie{}; la +variable @code{currentBarNumber} est alors incrémentée. + +@item timing +Lorsqu'on lui assigne la valeur @emph{vrai}, les valeurs ci-dessus +mentionnées sont mises à jour à chaque pas. Fixée à @emph{faux}, le +graveur restera indéfiniment dans la mesure en cours. + +@end table + +Le calage peut être modifié en réglant explicitement l'une de ces +variables. Dans l'exemple qui suit, nous réglons la métrique à 4/4, +tout en fixant @code{measureLength} à 5/4. Arrivé à 4/8 dans la +troisième mesure, nous avançons de 1/8, en assignant 5/8 à +@code{measurePosition}, raccourcissant donc cette mesure d'une croche. +La barre de mesure suivante tombera donc à 9/8 et non à 5/8. + +@lilypond[quote,verbatim] +\new Voice \relative c' { + \set Timing.measureLength = #(ly:make-moment 5 4) + c1 c4 | + c1 c4 | + c4 c + \set Timing.measurePosition = #(ly:make-moment 5 8) + b4 b b8 | + c4 c1 | +} +@end lilypond + +@noindent +Comme le montre cet exemple, @code{ly:make-moment n d} construit une +durée de n/d fois une ronde. +Par conséquent, @code{ly:make-moment@tie{}1@tie{}8} correspond à une +croche, et @code{ly:make-moment@tie{}7@tie{}16} à la durée de sept +doubles croches. + + +@seealso +Manuel de notation : +@ref{Numéros de mesure}, +@ref{Musique sans métrique} + +Morceaux choisis : +@rlsrnamed{Rhythms,Rythme}. + +Références des propriétés internes : +@rinternals{Timing_translator}, +@rinternals{Score} + diff --git a/Documentation/fr/notation/simultaneous.itely b/Documentation/fr/notation/simultaneous.itely new file mode 100644 index 0000000000..f52a2480f8 --- /dev/null +++ b/Documentation/fr/notation/simultaneous.itely @@ -0,0 +1,968 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: ec35c10a93b45b1f0dd721c54197a79d4207a92c + + 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" + +@c Translators: Frédéric Chiasson, Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + +@node Notes simultanées +@section Notes simultanées +@translationof Simultaneous notes + +@lilypondfile[quote]{simultaneous-headword.ly} + +La notion musicale de polyphonie fait référence au fait d'avoir plus +d'une voix simultanément dans une pièce. Dans LilyPond, la notion de +polyphonie fait référence au fait d'avoir plus d'une voix sur la même +portée. + +@menu +* Monophonie:: +* Plusieurs voix:: +@end menu + + +@node Monophonie +@subsection Monophonie +@translationof Single voice + +Nous allons voir ici comment gérer plusieurs notes simultanées dans une +même voix. + +@menu +* Notes en accords:: +* Répétition d'accords:: +* Expressions simultanées:: +* Clusters:: +@end menu + +@node Notes en accords +@unnumberedsubsubsec Notes en accords +@translationof Chorded notes + +@cindex accords +@cindex chevrons + +@funindex < +@funindex > +@funindex <...> + +Un accord est formé en mettant une série de hauteurs entre @code{<} +et @code{>}. Un accord peut être suivi d'une durée comme une simple +note. + +@lilypond[verbatim,quote,relative=2] +1 2 4 8. 16 +@end lilypond + +Un accord peut être suivi d'une indication d'articulation comme une +simple note. + +@lilypond[verbatim,quote,relative=2] +1\fermata 2-> 4\prall 8.^| 16-. +@end lilypond + +Certaines notes, au sein même d'un accord, peuvent être affectées d'une +articulation ou d'un ornement@tie{}: + +@lilypond[verbatim,quote,relative=2] +1 c-^ e>2 4 8. 16 +@end lilypond + +Certains éléments de notation, tels que nuances, soufflets et liaisons, +ne peuvent se rattacher qu'à l'accord et non aux notes qui le composent, +sous peine de ne les voir s'imprimer. + +@lilypond[verbatim,quote,relative=2] +1 \f ( ) \< \! +@end lilypond + +@cindex accord et mode relatif +@cindex mode relatif et accord + +Les accords peuvent être saisis en mode relatif. Dans un accord, +l'octave de chaque hauteur saisie est fonction de la précédente, à +l'exception de la première qui, elle, sera positionnée en fonction de la +première hauteur mentionnée dans l'accord précédent ou de la note +individuelle précédente. Les autres notes au sein de l'accord se +positionnent relativement à la précédente. + +@lilypond[verbatim,quote,relative=2] +1 +@end lilypond + +Pour plus d'information à propos des accords, voir +@ref{Notation des accords}. + + +@seealso +Glossaire musical : +@rglosnamed{chord,accord}. + +Manuel d'initiation : +@rlearning{Combinaison de notes en accords}. + +Manuel de notation : +@ref{Notation des accords}. +@ref{Articulations et ornements}, +@ref{Octaves relatives}, +@ref{Plusieurs voix}. + +Morceaux choisis : +@rlsrnamed{Simultaneous notes,Notes simultanées}. + +@knownissues +Un accord comportant plus de deux notes dans le même @qq{espace de +portée} -- tel que @samp{} -- conduit immanquablement à des +chevauchements. En fonction de la situation, un meilleur rendu peut +nécessiter de recourir à + +@itemize + +@item +l'utilisation temporaire de @ref{Plusieurs voix}, +@samp{<< f! \\ >>}, + +@item +une transcription enharmonique d'une ou plusieurs hauteurs, +@samp{}, ou + +@item +des @ref{Clusters}. + +@end itemize + + +@node Répétition d'accords +@unnumberedsubsubsec Répétition d'accords +@translationof Chord repetition + +Dans le but de vous épargner de la saisie, LilyPond dispose d'un +raccourci -- symbolisé par la lettre @code{q} -- qui a pour effet de +répéter le dernier accord saisi@tie{}: + +@lilypond[verbatim,quote,relative=2] +1 q 2 q +@end lilypond + +À l'instar de n'importe quel accord, le symbole de répétition peut être +affublé d'une durée, de signes d'articulation, @emph{markups}, liaisons, +ligatures@dots{} En fait, c'est la structure du dernier accord qui est +dupliquée. + +@lilypond[verbatim,quote,relative=2] +1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +@end lilypond + +Dans la mesure où le symbole de répétition d'accord enregistre la +structure du dernier accord construit, il est tout à fait possible de +l'utiliser même après une succession de notes individuelles et de +silences@tie{}: + +@lilypond[verbatim,quote,relative=2] +1 c4 q2 r8 q8 +@end lilypond + +Le symbole de répétition d'accord ne prend en charge que les hauteurs, +en aucun cas les nuances, articulations ou ornementations, qu'elles +aient été attachées aux notes le composant ou à l'ensemble. + +@lilypond[verbatim,quote,relative=2] +1\sfz c4 q2 r8 q8 +@end lilypond + +@seealso +Manuel de notation : +@ref{Notation des accords}, +@ref{Articulations et ornements}. + +Fichiers d'initialisation : +@file{ly/chord-repetition-init.ly}. + + +@node Expressions simultanées +@unnumberedsubsubsec Expressions simultanées +@translationof Simultaneous expressions + +Lorsqu'une ou plusieurs expressions musicales sont encadrées par des +doubles chevrons, elles sont considérées comme étant simultanées. Si la +première expression débute par une note unique ou si l'intégralité de +l'expression simultanée est explicitement rattachée à une voix en +particulier, elle sera placée sur une seule portée. Dans le cas +contraire, les éléments d'une expression simultanée seront placés sur +des portées distinctes. + +Voici deux exemples d'expression simultanée sur une même portée@tie{}: + +@lilypond[quote,verbatim,relative=2] +\new Voice { % explicit single voice + << { a4 b g2 } { d4 g c,2 } >> +} +@end lilypond + +@lilypond[quote,verbatim,relative=2] +% single first note +a << { a4 b g } { d4 g c, } >> +@end lilypond + +Cette manière de procéder est utile lorsque les éléments de l'expression +ont des rythmes identiques. Dès que vous tenterez d'attacher sur une +même hampe des notes de durée différente, vous générerez des erreurs. + +Dans l'exemple suivant, l'expression simultanée génère implicitement +plusieurs portées@tie{}: + +@lilypond[quote,verbatim,relative=2] +% no single first note +<< { a4 b g2 } { d4 g2 c,4 } >> +@end lilypond + +En pareil cas, des rythmes différents ne sont source d'aucun problème. + + +@node Clusters +@unnumberedsubsubsec Clusters +@translationof Clusters + +@cindex cluster + +@funindex \makeClusters +@funindex makeClusters + +Un cluster indique un agrégat de sons. On peut le représenter par une +plage limitée par un @emph{ambitus} (notes extrêmes). On obtient une +telle notation en appliquant la fonction @code{makeClusters} à une +séquence d'accords, comme + +@lilypond[quote,relative=2,verbatim] +\makeClusters { 2 } +@end lilypond + +Des notes ordinaires et des clusters peuvent cohabiter sur une même +portée, y compris simultanément -- en pareil cas, rien ne sera fait +pour tenter d'empécher les chevauchements entre notes et clusters. + + +@seealso +Glossaire musicologique : +@rglos{cluster}. + +Morceaux choisis : +@rlsrnamed{Simultaneous notes,Notation simultanée}. + +Référence des propriétés internes : +@rinternals{ClusterSpanner}, +@rinternals{ClusterSpannerBeacon}, +@rinternals{Cluster_spanner_engraver}. + +@knownissues + +L'apparence d'un cluster sera extrèmement resserrée s'il ne comporte au +moins deux accords. + +Dans la mesure où un cluster ne possède pas de hampe, il n'y a aucun +moyen d'en connaître la durée@tie{}; cependant la longueur du signe +imprimé dépend directement de la durée affectée aux accords qui le +définissent. + +Seul un silence peut séparer deux clusters. + +Les clusters ne sont pas reproduits en MIDI. + + +@node Plusieurs voix +@subsection Plusieurs voix +@translationof Multiple voices + +Nous allons nous intéresser, dans les paragraphes qui suivent, à la +gestion de notes simultanées réparties sur plusieurs voix ou plusieurs +portées. + +@menu +* Polyphonie sur une portée:: +* Styles de voix:: +* Résolution des collisions:: +* Regroupement automatique de parties:: +* Saisie de musique en parallèle:: +@end menu + + +@node Polyphonie sur une portée +@unnumberedsubsubsec Polyphonie sur une portée +@translationof Single-staff polyphony + +@cindex polyphonie, portée simple +@cindex voix +@cindex paroles assignées à une voix + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceOne ... \voiceFour +@funindex Voice +@funindex \oneVoice +@funindex oneVoice + +@strong{@i{Instanciation explicite des voix}} + +La manière la plus facile d'entrer des fragments avec plus d'une voix +sur une portée est est la suivante@tie{}: + +@lilypond[quote,relative=3,verbatim] +\new Staff << + \new Voice = "first" + { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } + \new Voice= "second" + { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +@noindent +Vous constaterez que les voix sont créées explicitement et qu'elles +sont nommées. Les commandes @code{\voiceOne} @dots{} @code{\voiceFour} +déterminent les voix de telle sorte que les première et troisième +auront des hampes vers le haut, et les deuxième et quatrième vers le +bas. D'autre part, les notes des troisième et quatrième voix seront +quelque peu décalées, tout comme leurs silences, afin d'éviter les +collisions. La commande @code{\oneVoice} permet de retrouver les +réglages par défaut. + +@strong{@i{Polyphonie temporaire}} + +Un fragment temporairement polyphonique se construit de la manière +suivante@tie{}: + +@example +<< @{ \voiceOne ... @} + \new Voice @{ \voiceTwo ... @} +>> \oneVoice +@end example + +@noindent +En fait, la première expression d'une polyphonie temporaire reste dans +le même contexte @code{Voice} que celui existant auparavant et qui +perdurera après ce fragment. Les autres expressions entre doubles +chevrons seront assignées à des voix temporaires distinctes. C'est la +raison pour laquelle les paroles qui suivaient la voix avant la +polyphonie continueront à le faire durant ce passage polyphonique et +après lui. + +@lilypond[quote, verbatim, relative=2] +<< + \new Voice = "melody" { + a4 + << + { + \voiceOne + g f + } + \new Voice { + \voiceTwo + d2 + } + >> + \oneVoice + e4 + } + \new Lyrics \lyricsto "melody" { + This is my song. + } +>> +@end lilypond + +@noindent +Vous remarquerez que les commandes @code{\voiceOne} et @code{\voiceTwo} +permettent d'obtenir des réglages différents pour chacune des voix. + +@strong{@i{La construction avec un double antislash}} + +@cindex couches +@cindex calques + +@funindex \\ + +Une construction de la forme @code{<< @{...@} \\ @{...@} >>}, dans +laquelle plusieurs expressions sont séparées par des doubles obliques +inversées, se comporte différemment de celle sans séparateurs@tie{}: +@strong{tous} les membres de cette contruction seront assignés à de +nouveaux contextes de voix. Ces contextes de voix, créés implicitement, +portent les noms @code{"1"}, @code{"2"}, etc. Dans chacun de ces +contextes, le positionnement des liaisons, la direction des hampes, etc. +sont réglés de manière appropriée. En voici un exemple@tie{}: + +@lilypond[quote,relative=3,verbatim] +<< + { r8 r16 g e8. f16 g8[ c,] f e16 d } + \\ + { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +Cette syntaxe peut être utilisée dans la mesure où la création puis la +disparition de voix temporaires sont sans conséquence. Les réglages de +ces voix créées implicitement sont les mêmes que si elles avaient été +créées à l'aide des commandes @code{\voiceOne} à @code{\voiceFour}, dans +leur ordre d'apparition. + +Dans l'exemple qui suit, la voix intermédiaire à des hampes vers le +haut. Nous la plaçons donc en troisième position, de telle sorte +qu'elle adopte les réglages de @code{\voiceThree} qui correspondent à ce +que nous voulons. Grâce à des espaces invisibles, nous évitons de +surcharger la portée avec des demis soupirs. + +@lilypond[quote,relative=3,verbatim] +<< + { r8 g g g g f16 ees f8 d } + \\ + { ees,8 r ees r d r d r } + \\ + { d'8 s c s bes s a s } +>> +@end lilypond + +En dehors des cas les plus simples, nous vous invitons à toujours créer +les contextes de voix de manière explicite. Voir à ce sujet +@rlearning{Contextes et graveurs} et +@rlearning{Instanciation explicite des voix}. + +@strong{@i{Identité rythmique}} + +Lorsque l'on doît saisir des fragments de musique parallèle qui ont le +même rythme, on peut les combiner dans un contexte de voix unique et par +voie de conséquence former des accords. Il suffit pour cela de les +regrouper dans une construction de musique simultanée simple au sein +d'une voix explicite@tie{}: + +@lilypond[quote,relative=2,verbatim] +\new Voice << + { e4 f8 d e16 f g8 d4 } + { c4 d8 b c16 d e8 b4 } +>> +@end lilypond + +Prenez garde que les différents éléments doivent impérativement avoir la +même structure rythmique, sous peine de ligature aléatoire et de +messages d'avertissement. + + +@predefined +@code{\voiceOne}, +@code{\voiceTwo}, +@code{\voiceThree}, +@code{\voiceFour}, +@code{\oneVoice}. +@endpredefined + + +@seealso +Manuel d'initiation : +@rlearning{Les voix contiennent la musique}, +@rlearning{Instanciation explicite des voix}. + +Manuel de notation : +@ref{Portées de percussion}, +@ref{Silences invisibles}, +@ref{Hampes}. + +Morceaux choisis : +@rlsrnamed{Simultaneous notes,Notation simultanée}. + + +@node Styles de voix +@unnumberedsubsubsec Styles de voix +@translationof Voice styles + +@cindex voix, styles +@cindex styles de voix +@cindex colorier des voix +@cindex têtes de note, styles + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Opter pour des couleurs et des têtes de notes spécifiques selon la voix +permet de les identifier plus facilement@tie{}: + +@lilypond[quote,relative=2,verbatim] +<< + { \voiceOneStyle d4 c2 b4 } + \\ + { \voiceTwoStyle e,2 e } + \\ + { \voiceThreeStyle b2. c4 } + \\ + { \voiceFourStyle g'2 g } +>> +@end lilypond + +La commande @code{\voiceNeutralStyle} permet de revenir à la +présentation normale. + + +@predefined +@code{\voiceOneStyle}, +@code{\voiceTwoStyle}, +@code{\voiceThreeStyle}, +@code{\voiceFourStyle}, +@code{\voiceNeutralStyle}. +@endpredefined + + +@seealso +Manuel d'initiation : +@rlearning{J'entends des Voix}, +@rlearning{Autres sources de documentation}. + +Morceaux choisis : +@rlsrnamed{Simultaneous notes,Notation simultanée}. + + +@node Résolution des collisions +@unnumberedsubsubsec Résolution des collisions +@translationof Collision resolution + +@cindex fusion de notes +@cindex collision de notes +@cindex collisions +@cindex shift note +@cindex multiples voix +@cindex voix multiples +@cindex polyphonie +@cindex décélage de voix +@cindex voix, décalage +@cindex silences, décalage automatique + +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn +@funindex \shiftOff +@funindex shiftOff +@funindex \mergeDifferentlyDottedOn +@funindex mergeDifferentlyDottedOn +@funindex \mergeDifferentlyDottedOff +@funindex mergeDifferentlyDottedOff +@funindex \mergeDifferentlyHeadedOn +@funindex mergeDifferentlyHeadedOn +@funindex \mergeDifferentlyHeadedOff +@funindex mergeDifferentlyHeadedOff + + +Les notes de hauteur identique appartenant à des voix différentes, même +si leur hampe sont opposées, verront leur tête automatiquement +fusionnér. Les notes dont la tête diffère ou bien qui ont la hampe +dans la même direction ne seront pas automatiquement fusionnées. Les +silences, lorsqu'ils sont dans une autre voix et à l'opposé des +hampes seront décalés verticalement. Vous constaterez, dans l'exemple +suivant, que la fusion échoue aux premier et troisième temps de la +première mesure, ainsi qu'au premier temps de la deuxième mesure. + +@lilypond[quote,verbatim,relative=2] +<< + { + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Cependant, vous pouvez fusionner une tête de blanche avec une tête de +croche -- jamais avec une noire. Les têtes du premier temps de la +première mesure ont bien fusionné@tie{}: + +@lilypond[quote,verbatim,relative=2] +<< + { + \mergeDifferentlyHeadedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +De même, vous pouvez fusionner les têtes de notes pointées et +non-pointées comme au troisième temps de la première mesure@tie{}: + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Lorsque trois notes ou plus s'agglutinent dans un même empilement, +@code{\mergeDifferentlyHeadedOn} ne peut mener à bien la fusion des deux +notes qui devraient l'être. Pour obtenir une fusion optimale, appliquez +un décalage (@code{\shift}) à la note qui ne devrait pas fusionner. +Ici, on applique un @code{\shiftOn} pour décaler le @notation{sol} de +l'empilement@tie{}; le rendement de @code{\mergeDifferentlyHeadedOn} est +alors comme il faut. + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + \shiftOn + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Les commandes @code{\shiftOn}, @code{\shiftOnn}, et @code{\shiftOnnn} +déterminent le niveau de décalage des accords de la voix en cours. +Les voix externes -- habituellement, les voix une et deux -- sont +affectées de @code{\shiftOff}, alors que les voix internes -- trois et +quatre -- sont affectées de @code{\shiftOn}. @code{\shiftOnn} et +@code{\shiftOnnn} sont des niveaux supplémentaires de décalage. + + +Les têtes de notes ne fusionneront que dans la mesure où leur hampe sont +opposées -- implicitement parce qu'appartenant aux voix une ou deux, ou +bien explicitement. + + +@predefined +@code{\mergeDifferentlyDottedOn}, +@code{\mergeDifferentlyDottedOff}, +@code{\mergeDifferentlyHeadedOn}, +@code{\mergeDifferentlyHeadedOff}. + +@code{\shiftOn}, +@code{\shiftOnn}, +@code{\shiftOnnn}, +@code{\shiftOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{additional-voices-to-avoid-collisions.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{forcing-horizontal-shift-of-notes.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{polyphony,polyphonie}. + +Manuel d'initiation : +@rlearning{Notes simultanées}, +@rlearning{Les voix contiennent la musique}, +@rlearning{Exemple concret}. + +Morceaux choisis : +@rlsrnamed{Simultaneous notes,Notation simultanée}. + +Référence des propriétés internes : +@rinternals{NoteColumn}, +@rinternals{NoteCollision}, +@rinternals{RestCollision}. + + + +@ignore +@c TODO investigate! Sometimes it works, sometimes not. --FV +The requirements for successfully merging different note heads that +are at the same time differently dotted are not clear. +@end ignore + + +@node Regroupement automatique de parties +@unnumberedsubsubsec Regroupement automatique de parties +@translationof Automatic part combining + +@cindex regroupement automatique de parties +@cindex parties, combiner des +@cindex a due +@cindex solo + +@funindex \partcombine +@funindex partcombine + +Le regroupement automatique de parties vous permet de fusionner deux +pupitres sur une seule portée, ceci dans le but de créer des +partitions d'orchestre. Lorsque les deux parties sont identiques sur +une certaine durée, une seule s'affiche. Lorsqu'elles diffèrent, +deux voix séparées apparaissent, avec des hampes dont la direction est +gérée automatiquement. Vous pouvez aussi identifier et faire +ressortir les solos et parties @emph{a due}. + +Voici la syntaxe qui permet de combiner des parties@tie{}: + +@example +\partcombine @var{expression_musicale_1} @var{expression_musicale_2} +@end example + +L'exemple suivant illustre les fonctionnalités élémentaires du +combinateur de parties@tie{}: positionner les parties sur une portée, +gérer la direction des hampes et de la polyphonie. Les identificateurs +sont les mêmes pour la combinaison et les parties séparées. + +@lilypond[quote,verbatim] +instrumentOne = \relative c' { + 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 +} + +<< + \new Staff \instrumentOne + \new Staff \instrumentTwo + \new Staff \partcombine \instrumentOne \instrumentTwo +>> +@end lilypond + +Les notes de la troisième mesure n'apparaissent qu'une seule fois, +alors qu'elles ont été spécifiés deux fois (une fois dans chacune des +parties). La direction des hampes et des liaisons de tenue ou de phrasé +est gérée automatiquement, selon qu'il s'agisse d'un solo ou d'un +unisson. La première partie, dont le contexte s'appellera @code{one}, +aura toujours ses hampes dirigées vers le haut et sera notée @qq{Solo}, +alors que la deuxième, appelée @code{two}, aura des hampes vers le bas +et sera notée @qq{Solo@tie{}II}. Les parties à l'unisson seront +estampillées d'un @qq{a2} par défaut. + +LilyPond interprète dans un contexte @code{Voice} chacun des arguments +fournis à @code{\partcombine}. Si vous travaillez avec des octaves +relatives, spécifiez @code{\relative} dans chacune des expressions +musicales, comme ceci@tie{}: + +@example +\partcombine + \relative @dots{} @var{expression_musicale_1} + \relative @dots{} @var{expression_musicale_2} +@end example + +@noindent +Une section @code{\relative} à l'extérieur du @code{\partcombine} +restera sans effet sur les hauteurs de +@code{@var{expression_musicale_1}} ou de +@code{@var{expression_musicale_2}}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{combining-two-parts-on-the-same-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-partcombine-texts.ly} + + +@seealso +Glossaire musicologique : +@rglos{a due}, +@rglosnamed{part,partie}. + +Manuel de notation : +@ref{Écriture de parties séparées}. + +Morceaux choisis : +@rlsrnamed{Simultaneous notes,Notation simultanée}. + +Référence des propriétés internes : +@rinternals{PartCombineMusic}, +@rinternals{Voice}. + + +@knownissues + +@code{\partcombine} ne prend en charge que deux voix. + +Lorsque @code{printPartCombineTexts} est actif et que les deux voix +jouent souvent les mêmes notes, le combinateur peut afficher @code{a2} +plus d'une fois par mesure. + +@code{\partcombine} ne peut s'inscrire dans un bloc @code{\times}. + +@code{\partcombine} ne peut s'inscrire dans un bloc @code{\relative}. + +En interne, @code{\partcombine} interprète les deux arguments en tant +que @code{Voice}s, dénommées @code{one} et @code{two}, puis décide de +quand les parties seront fusionnées. Par conséquent, si les arguments +changent pour d'autres noms de contexte @rinternals{Voice}, les +événements qu'ils contiendraient seront ignorés. De la même manière, le +combinateur n'est pas conçu pour travailler avec des paroles@tie{}; il +s'arrête dès qu'il est explicitement fait appel à l'une des voix pour y +attacher des paroles. + +@code{\partcombine} n'examine que l'attaque des notes. Il n'est donc +pas en mesure de déterminer si une note attaquée précédemment est encore +jouée ou non, ce qui peut engendrer quelques problèmes. + + +@node Saisie de musique en parallèle +@unnumberedsubsubsec Saisie de musique en parallèle +@translationof Writing music in parallel + +@cindex écrire la musique en parallèle +@cindex musique en parallèle +@cindex musique entremêlée + +@funindex \parallelMusic +@funindex parallelMusic + +On peut écrire plusieurs voix de façon entremêlée. La fonction +@code{\parallelMusic} prend en charge une liste des variables à créer, +ainsi qu'une expression musicale. Le contenu des différentes mesures de +l'expression musicale deviennent les valeurs des variables respectives +que vous pourrez ensuite utiliser pour imprimer la partition. + +@warning{Les contrôles de barre de mesure @code{|} sont obligatoires et +le mesures doivent être de longueur identique.} + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | + r16 e'8.~ e'4 r16 e'8.~ e'4 | + c'2 c'2 | + + % Bar 2 + r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | + r16 d'8.~ d'4 r16 d'8.~ d'4 | + c'2 c'2 | + +} +\new StaffGroup << + \new Staff << \voiceA \\ \voiceB >> + \new Staff { \clef bass \voiceC } +>> +@end lilypond + +Vous pouvez travailler en mode relatif. Notez cependant que la commande +@code{\relative} n'apparaît pas au sein du bloc @code{\parallelMusic}. +Le calcul des hauteurs relatives s'effectue voix par voix, et non au fil +des lignes saisies@tie{}; en d'autres termes, les notes de la +@code{voiceA} ignorent tout de celles de la @code{voiceB}. + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g16 c e g, c e r8 g,16 c e g, c e | + r16 e8.~ e4 r16 e8.~ e4 | + c2 c | + + % Bar 2 + r8 a,16 d f a, d f r8 a,16 d f a, d f | + r16 d8.~ d4 r16 d8.~ d4 | + c2 c | + + } +\new StaffGroup << + \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> + \new Staff \relative c' { \clef bass \voiceC } +>> +@end lilypond + +Ceci fonctionne bien avec la musique pour piano. L'exemple suivant +affecte quatre mesures à quatre variables@tie{}: + +@lilypond[quote,verbatim] +global = { + \key g \major + \time 2/4 +} + +\parallelMusic #'(voiceA voiceB voiceC voiceD) { + % Bar 1 + a8 b c d | + d4 e | + c16 d e fis d e fis g | + a4 a | + + % Bar 2 + e8 fis g a | + fis4 g | + e16 fis g a fis g a b | + a4 a | + + % Bar 3 ... +} + +\score { + \new PianoStaff << + \new Staff { + \global + << + \relative c'' \voiceA + \\ + \relative c' \voiceB + >> + } + \new Staff { + \global \clef bass + << + \relative c \voiceC + \\ + \relative c \voiceD + >> + } + >> +} +@end lilypond + + +@seealso +Manuel d'initiation : +@rlearning{Organisation du code source avec des variables}. + +Morceaux choisis : +@rlsrnamed{Simultaneous notes,Notation simultanée}. diff --git a/Documentation/fr/notation/spacing.itely b/Documentation/fr/notation/spacing.itely new file mode 100644 index 0000000000..91a1e36fae --- /dev/null +++ b/Documentation/fr/notation/spacing.itely @@ -0,0 +1,3662 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 657b89ab28b463ccda7991070242353cf38dc25d + + 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" + +@c Translators: Frédéric Chiasson, Jean-Charles Malahieude + +@ignore +GDP TODO list + +Negative numbers are allowed: +> Are you sure? The following works well +> \paper{ +> first-page-number = -2 +> } +> and prints page number -1 on the second page, for example. + + +In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it +states: + +"@code{layout-set-staff-size} does not change the distance between +the +staff lines." + +Could we add a sentence: +"Use instead the pair fontSize = #@var{N} + \override StaffSymbol #'staff-space = #(magstep +@var{N}) +inside the Staff context to change the size of the font and the +distance between +staff lines accordingly." + +Actually I found, that the @internalsref{StaffSymbol} at line 481 +sends to an incomplete +documentation. The property staff-space is not explained here. I +thought Y-extent might be of +help, but it is in turn explained by x-space which again is +missing from the list. Who has the +knowledge to fix this? + + +Clarify +http://code.google.com/p/lilypond/issues/detail?id=68 + +@end ignore + + +@node Gestion de l'espace +@chapter Gestion de l'espace +@translationof Spacing issues + +L'agencement général d'une partition dépend de trois facteurs +interdépendants@tie{}: la mise en page, les sauts de ligne et +l'espacement. Les choix faits en matière d'espacement détermineront la +densité de chacun des systèmes, ce qui influera sur le positionnement +des sauts de lignes et, par voie de conséquence, sur le nombre de pages +de la partition. + +En pratique, cette procédure comporte quatre étapes. Dans un premier +temps, des distances élastiques @emph{(springs)} sont déterminées sur la +base des durées. Sont alors calculées différentes possibilités de saut +de ligne, chacune se voyant attribuer un @qq{coefficient de laideur}, +puis est estimée la hauteur de chaque système. LilyPond opte enfin pour +la combinaison entre sauts de page et de ligne qui offre la meilleure +occupation de l'espace, tant horizontalement que verticalement. + +Les réglages qui influencent la mise en forme se placent dans deux blocs +différents. Le bloc @w{@code{\paper @{@dots{}@}}} étudié à la rubrique +@ref{Mise en forme de la page} contient les réglages applicables à +l'intégralité du document -- à toutes les partitions d'un ouvrage -- +tels que format du papier, impression ou non des numéros de page, etc. +Quant au bloc @w{@code{\layout @{@dots{}@}}}, qui fait l'objet de la +rubrique @ref{Mise en forme de la partition}, il détermine la mise en +forme de la musique@tie{}: le nombre de systèmes utilisés, l'espacement +des regroupements de portées, etc. + +@menu +* Mise en forme de la page:: +* Mise en forme de la partition:: +* Sauts:: +* Espacement vertical:: +* Espacement horizontal:: +* Réduction du nombre de pages de la partition:: +@end menu + +@cindex ragged, aligné +@cindex aligné, ragged + +@warning{Vous verrez au fil de ce chapitre apparaître certains termes +dont la traduction vous semblera assurément erronée. Il n'en est +cependant rien@tie{}: certains termes techniques ont une histoire +particulière selon leur langue d'origine. Ainsi, le vocable anglais +@emph{Ragged} signifie en lambeau, en loques@tie{}; dans l'univers +typographique, un maître français voit un alignement à gauche -- il dira +@qq{au fer à gauche} -- alors que son homologue anglophone constate un +@emph{ragged-right} -- donc du vide à droite.} + + +@node Mise en forme de la page +@section Mise en forme de la page +@translationof Page layout + +Nous allons examiner ici les options qui contrôlent la mise en forme des +pages attachées au bloc @code{\paper}. + +@menu +* Le bloc \paper:: +* Format du papier et adaptation automatique:: +* Variables d'espacement vertical fixe:: +* Variables d'espacement vertical fluctuant:: +* Variables d'espacement horizontal:: +* Autres variables du bloc \paper:: +@end menu + + +@node Le bloc \paper +@subsection Le bloc @code{\paper} +@translationof The @code{\paper} block + +Un bloc @code{\paper} peut apparaître au sein d'un bloc +@code{\book}. Les réglages effectués à l'aide du bloc @code{\paper} +s'appliqueront à l'intégralité d'un ouvrage, qui peut comporter +plusieurs partitions (des blocs @emph{score})@tie{}; il ne doit donc en +aucun cas se trouver dans un bloc @code{\score}. Peuvent apparaître +dans un bloc @code{\paper}@tie{}: + +@itemize + +@item +la fonction scheme @code{set-paper-size}, + +@item +des variables propres au bloc @code{\paper} qui viendront adapter la +mise en page, et + +@item +la définition des différents @emph{markups} qui personnaliseront la mise +en forme des entêtes, pied de page et titrages. + +@end itemize + +La fonction @code{set-paper-size} fait l'objet de la rubrique qui suit +-- @ref{Format du papier et adaptation automatique}. Les variables du +bloc @code{\paper} chargées de la mise en page sont abordées plus loin +dans ce chapitre. Quant aux définitions relatives aux @emph{markups} +des entête, pied de page et titrages, elles sont étudiées à la rubrique +@ref{Titrages personnalisés}. + +La plupart des variables gérant le papier ne sont fonctionnelles que +lorsque mentionnées dans un bloc @code{\paper}. Certaines, qui peuvent +toutefois apparaître dans un bloc @code{\layout}, sont référencées à la +rubrique @ref{Le bloc \layout}. + +Sauf mention contraire, toutes les variables du bloc @code{\paper} qui +correspondent à des dimensions sont exprimées en millimètre -- vous +pouvez bien entendu spécifier un autre système de mesure. Voici +comment, par exemple, définir la marge haute (@code{top-margin}) à dix +millimètres@tie{}: + +@example +\paper @{ + top-margin = 10 +@} +@end example + +Si vous préférez lui affecter une valeur de 0,5@tie{}pouce, vous devrez +mentionner le suffixe d'unité @code{\in}@tie{}: + +@example +\paper @{ + top-margin = 0.5\in +@} +@end example + +LilyPond accepte les suffixes d'unité @code{\mm}, @code{\cm}, +@code{\in} et @code{\pt}. Ces unités sont des conversions de +millimètres, répertoriées dans le fichier +@file{ly/paper-defaults-init.ly}. Pour plus de lisibilité, et bien que +ce ne soit pas techniquement requis, nous vous conseillons d'ajouter +@code{\mm} à votre code lorsque vous travaillez en millimètres. + +Vous pouvez aussi définir les valeurs du bloc @code{\paper} à l'aide de +fonctions Scheme. Voici l'équivalent de l'exemple précédent@tie{}: + +@example +\paper @{ + #(define top-margin (* 0.5 in)) +@} +@end example + +@seealso +Manuel de notation : +@ref{Format du papier et adaptation automatique}, +@ref{Titrages personnalisés}. +@ref{Le bloc \layout}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + + +@node Format du papier et adaptation automatique +@subsection Format du papier et adaptation automatique +@translationof Paper size and automatic scaling + +@cindex papier, taille +@cindex page, format + +@funindex \paper + +@menu +* Format du papier:: +* Adaptation automatique au format:: +@end menu + + +@node Format du papier +@unnumberedsubsubsec Format du papier +@translationof Setting paper size + +Le format du papier est déterminé par deux fonctions différentes@tie{}: +@code{set-default-paper-size} et @code{set-paper-size}. +@code{set-default-paper-size} se place en tête de fichier, alors que +@code{set-paper-size} se place à l'intérieur d'un bloc +@code{\paper}@tie{}: + +@example +#(set-default-paper-size "a4") +@end example + +@example +\paper @{ + #(set-paper-size "a4") +@} +@end example + +@noindent +La seule restriction à l'utilisation isolée de la fonction +@code{set-default-paper-size} est qu'elle doit intervenir avant le +premier bloc @code{\paper}. À l'intérieur d'un bloc @code{\paper}, il +vaut mieux utiliser la fonction @code{set-paper-size}, avant toute autre +variables. Les raisons à ceci sont abordées dans la rubrique +@ref{Adaptation automatique au format}. + +@code{set-default-paper-size} fixe le format pour toutes les pages, +alors que @code{set-paper-size} détermine le format des feuilles +rattachées à un bloc @code{\paper} particulier. Ainsi, lorsque le bloc +@code{\paper} se trouve en tête de fichier, le format du papier +s'appliquera à toutes les pages@tie{}; si @code{\paper} apparaît dans un +bloc @code{\book}, la taille ne s'appliquera qu'au @emph{book} en +question. + +Les formats @code{a4}, @code{letter}, @code{legal} et @code{11x17} (ou +tabloïd) sont couramment utilisés pour les éditions musicales. Bien +d'autres formats sont disponibles et sont répertoriés à la rubrique +@code{paper-alist} du fichier d'initialisation @file{scm/paper.scm}. + +@c TODO add a new appendix for paper sizes (auto-generated) -pm + +@warning{Par défaut, le papier est au format A4 (codé @code{a4}).} + +Rien ne vous empêche d'ajouter un format de papier inhabituel à la +rubrique @code{paper-alist} du fichier @file{scm/paper.scm}. Sachez +cependant que celui-ci est écrasé à chaque mise à jour de LilyPond. + +@cindex orientation +@cindex landscape +@cindex paysage, papier +@cindex à l'italienne, papier + +Le fait d'ajouter l'argument @code{'landscape} à l'instruction +@code{set-default-paper-size} permet d'obtenir une présentation à +l'italienne -- ou paysage si vous préférez -- et donc des lignes plus +longues. + +@example +#(set-default-paper-size "a6" 'landscape) +@end example + + +@seealso +Notation Reference: +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{scm/paper.scm}. + + +@node Adaptation automatique au format +@unnumberedsubsubsec Adaptation automatique au format +@translationof Automatic scaling to paper size + +Toute modification du format de papier à l'aide des fonctions scheme +@code{set-default-paper-size} ou @code{set-paper-size}, que nous avons +vues à la rubrique @ref{Format du papier}, se traduira automatiquement +par l'ajustement d'un certain nombre de variables attachées au bloc +@code{\paper} afin qu'elles soient en concordance avec le format +spécifié. Vous pouvez annuler l'ajustement automatique d'une variable +particulière en redéfinissant sa valeur après avoir spécifié le format +de papier utilisé. Notez bien que le simple fait d'affecter une valeur +à @code{paper-height} ou @code{paper-width} ne déclenchera pas +l'étalonnage automatique, bien que spécifier une largeur de papier +@emph{(@code{paper-width})} peut influencer d'autres valeurs -- mais +c'est une autre histoire dont nous parlerons plus tard et qui n'a rien à +voir avec la mise à l'echelle. + +L'adaptation automatique affecte les dimensionnements verticaux +@code{top-margin} et @code{bottom-margin} -- voir +@ref{Variables d'espacement vertical fixe} --, ainsi que les +dimmensionnements horizontaux @code{left-margin}, @code{right-margin}, +@code{inner-margin}, @code{outer-margin}, @code{binding-offset}, +@code{indent} et @code{short-indent} -- voir +@ref{Variables d'espacement horizontal}. + +Les valeurs par défaut de ces dimensionnements sont contenues dans le +fichier @file{ly/paper-defaults-init.ly} et utilisent les variables +internes @code{top-margin-default}, @code{bottom-margin-default} etc. +correspondant au format par défaut -- papier A4 -- pour lequel +@code{paper-height} est à @code{297\mm} et @code{paper-width} à +@code{210\mm}. + +@seealso +Manuel de notation : +@ref{Variables d'espacement vertical fixe}, +@ref{Variables d'espacement horizontal}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}, +@file{scm/paper.scm}. + + +@node Variables d'espacement vertical fixe +@subsection Variables d'espacement vertical fixe +@translationof Fixed vertical spacing @code{\paper} variables + +@warning{Certains dimmensionnements attachés au bloc @code{@bs{}paper} +sont automatiquement ajustés selon le format du papier, ce qui peut +conduire à un résultat inattendu -- +voir @ref{Adaptation automatique au format}.} + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code +@item paper-height +@funindex paper-height + +La hauteur de la feuille. Il s'agit par défaut de la dimension du +papier utilisé. Notez bien que cette variable n'affectera pas +l'ajustement automatique d'un certain nombre de dimmensionnement +vertical. + +@item top-margin +@funindex top-margin + +La marge entre le bord supérieur de la feuille et la surface imprimable. +Elle est fixée par défaut à@tie{}@code{5\mm} et s'ajustera selon le +format de papier. + +@item bottom-margin +@funindex bottom-margin + +La marge entre la surface imprimable et le bord inférieur de la feuille. +Elle est fixée par défaut à@tie{}@code{6\mm} et s'ajustera selon le +format de papier. + +@item ragged-bottom +@funindex ragged-bottom + +L'activation de cette variable permet de ne pas répartir verticalement +les systèmes sur les pages hormis la dernière. La valeur par défaut +est@tie{}@code{##f}. Lorsque la partition ne comporte que deux ou trois +systèmes par page, comme pour un conducteur d'orchestre, nous vous +conseillons d'activer cette variable. + +@item ragged-last-bottom +@funindex ragged-last-bottom + +La désactivation de cette variable permet de répartir verticalement les +systèmes de la dernière page d'une partition. La valeur par défaut +est@tie{}@code{##t}. Nous vous conseillons, lorsque des pièces couvrent +deux pages ou plus, d'activer cette variable.@* +Notez bien que la variable @code{ragged-last-bottom} affecte aussi la +dernière page de chacune des parties -- créées à l'aide d'un bloc +@code{\bookpart} -- d'un même ouvrage. + +@end table + + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +Morceaux choisis : +@rlsrnamed{Spacing, Espacements}. + +@knownissues + +Les titrages (contenus dans le bloc @code{\header@{@}}) sont considérés +comme des systèmes à part entière@tie{}; ils seront donc affectés par +@code{ragged-bottom} et @code{ragged-last-bottom}, qui éventuellement +ajouteront de l'espace avant le premier système de la partition. + + +@node Variables d'espacement vertical fluctuant +@subsection Variables d'espacement vertical fluctuant +@translationof Flexible vertical spacing @code{\paper} variables + +Il est souvent judicieux d'apporter un peu de flexibilité à l'espacement +entre différents éléments (marges, titres, systèmes ou mouvements), en +dilatation ou compression selon le cas. Un certain nombre de variables +de type @code{\paper} répertoriées ci-dessous vous permettront d'affiner +ces dimensionnements. + +Gardez à l'esprit que les variables du bloc @code{\paper} dont nous +parlons ici n'influencent en rien l'espacement des portées d'un même +système. L'espacement au sein des systèmes est géré par des propriétés +attachées à des objets graphiques (@emph{grobs}) qui, elles, se +définissent au niveau du bloc @code{\score} -- voir à ce sujet +@ref{Espacement vertical au sein d'un système}. + + +@menu +* Structure des variables d'espacement vertical fluctuant:: +* Liste des variables d'espacement vertical fluctuant:: +@end menu + +@node Structure des variables d'espacement vertical fluctuant +@unnumberedsubsubsec Structure des variables d'espacement vertical fluctuant +@translationof Structure of flexible vertical spacing alists + +Chacune de ces variables attachées au bloc @code{\paper} est constituée +d'une liste associative @emph{(alist)} à quatre @i{clés}@tie{}: + +@itemize + + +@item +@code{basic-distance} @emph{(distance de base)} -- la grandeur d'espace +par défaut, exprimée en hauteur de portée, séparant les @i{points de +référence} de deux éléments, qui évite tout risque de collision en +l'absence de dilatation ou compression. Le point de référence d'un +titre ou d'un @emph{markup} est son sommet, celui d'un système est le +centre vertical du @code{StaffSymbol} le plus proche -- même lorsqu'une +ligne de @qq{non-portée} viendrait à s'intercaler. Une +@code{basic-distance} inférieure à @code{padding} ou +@code{minimum-distance} sera sans effet, dans la mesure où l'espacement +résultant ne saurait être inférieur à @code{padding} ou +@code{minimum-distance}. + +@item +@code{minimum-distance} @emph{(distance-minimale)} -- l'espacement +minimal, exprimé en hauteur de portée, entre les points de référence des +deux éléments alors qu'il y a déjà un effet de compression. Une +@code{minimum-distance} inférieure à la valeur du @code{padding} sera +sans effet, dans la mesure où l'espacement résultant ne saurait être +inférieur au @code{padding}. + +@c TODO: explain skylines somewhere and xref to it from here. + +@item +@code{padding} @emph{(décalage)} -- la grandeur minimale de @qq{blanc} +qui sépare deux éléments, exprimée en hauteur de portée. On peut le +voir comme la hauteur minimale d'un rectangle vide qui devrait s'étendre +sur toute la largeur des deux éléments. + +@item +@code{stretchability} @emph{(dilatation)} -- le coefficient +d'étirement de cet espace. Un coefficient nul permet de figer +l'espacement, à moins qu'il n'en résulte des collisions. Un coefficient +positif déterminera la propension d'un espacement à s'étirer, tout +en tenant compte du coefficient affecté aux autres espacements. +Par exemple, lorsque le coefficient de dilatation d'une dimension est +double de celui d'une autre, elle pourra s'étirer deux fois plus que +cette dernière. Il ne saurait être négatif. La valeur @code{+inf.0} +provoque une @code{programming_error} (erreur de programmation) et est +ignorée@tie{}; vous pouvez toutefois utiliser @code{1.0e7} pour obtenir +une valeur proche de l'infini. Lorsque cette @i{clé} n'est pas définie, +sa valeur est par défaut égale à @code{space}. Notez bien que +l'utilisateur ne peut définir une propension à la compression@tie{}; +elle est en fait égale à +(@code{basic-distance}@tie{}@minus{}@tie{}@code{minimum-distance}). + +@end itemize + +Lorsque l'impression n'est pas en pleine page -- elle est donc +@emph{ragged bottom} pour les anglophones -- l'élément @code{space} +n'est pas étiré. Les hauteurs sur une telle page correspondront donc au +maximum de + +@itemize + +@item +@code{basic-distance}, plus +@item +@code{minimum-distance} et +@item +@code{padding}, augmenté de ce qu'il faut pour éviter les +chevauchements. + +@end itemize + +Les manières de modifier des listes associatives font l'objet d'un +@rusernamed{Modification de listes associatives, chapitre spécifique}. +L'exemple suivant indique deux façons de modifier une liste associative. +La première déclaration intervient sur une seule clé, alors que la +deuxième redéfinit complètement la variable. + +@example +\paper @{ + system-system-spacing #'basic-distance = #8 + + score-system-spacing = + #'((padding . 1) + (basic-distance . 12) + (minimum-distance . 6) + (stretchability . 12)) +@} +@end example + + +@node Liste des variables d'espacement vertical fluctuant +@unnumberedsubsubsec Liste des variables d'espacement fluctuant +@translationof List of flexible vertical spacing @code{\paper} variables + +Le nom des dimensionnements à hauteur variable sont de la forme +@code{@var{avant}-@var{après}-spacing}, où @code{@var{avant}} et +@code{@var{après}} représentent les éléments qui doivent être espacés. +La distance s'établit entre les points de référence des deux éléments +concernés (voir la rubrique précédente pou plus de précision). Notez +bien que, dans les règles de nommage des variables qui suivent, le terme +@code{markup} fait référence aussi bien à un @i{markup de titrage} +(@code{bookTitleMarkup} ou @code{scoreTitleMarkup}) qu'à un +@i{markup de haut niveau} (voir @ref{Structure de fichier}). Toutes les +distances sont exprimées en espace de portée. + +Leurs valeurs par défaut sont inscrites dans le fichier +@file{ly/paper-defaults-init.ly}. + +@c TODO: Where do headers/footers fit in? -mp + +@table @code +@item markup-system-spacing +@funindex markup-system-spacing + +détermine l'espacement entre un titre ou un @emph{markup} de premier +niveau, et le système qui le suit. + +@item score-markup-spacing +@funindex score-markup-spacing + +détermine l'espacement entre le dernier système et le titre ou +@emph{markup} de haut niveau qui le suit. + +@item score-system-spacing +@funindex score-system-spacing + +détermine l'espacement entre le dernier système d'une partition et le +premier système de la partition suivante, en l'absence de titrage ou +@emph{markup} qui les sépare. + +@item system-system-spacing +@funindex system-system-spacing + +détermine l'espacement entre deux systèmes d'un même mouvement. + +@item markup-markup-spacing +@funindex markup-markup-spacing + +détermine l'espacement entre deux titres ou @emph{markups} de premier +niveau. + +@item last-bottom-spacing +@funindex last-bottom-spacing + +détermine la distance entre le dernier système ou le dernier +@emph{markup} de haut niveau, et le bas de la surface imprimable -- +autrement dit le haut de la marge basse. + +@item top-system-spacing +@funindex top-system-spacing + +détermine l'espace entre le haut de la surface imprimable (le bas de la +marge haute) et le milieu du premier système. Cette variable n'est +effective qu'en l'absence de titre ou @emph{markup} de premier niveau +en haut de page. + +@item top-markup-spacing +@funindex top-markup-spacing + +détermine l'espace entre le haut de la surface imprimable (le bas de la +marge haute) et le premier titre ou @emph{markup} de premier niveau. +Cette variable n'est effective qu'en l'absence de système en haut de +page. + +@end table + + +@seealso +Manuel de notation : +@ref{Espacement vertical au sein d'un système}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Snippets: +@rlsrnamed{Spacing,Espacements}. + + +@node Variables d'espacement horizontal +@subsection Variables d'espacement horizontal +@translationof Horizontal spacing \paper variables + +@warning{Certains dimmensionnements attachés au bloc @code{@bs{}paper} +sont automatiquement ajustés selon le format du papier, ce qui peut +conduire à un résultat inattendu -- +voir @ref{Adaptation automatique au format}.} + +@menu +* Variables de marge et de largeur:: +* Variables spécifiques pour l'impression recto-verso:: +* Variables d'indentation et de décalage:: +@end menu + + +@node Variables de marge et de largeur +@unnumberedsubsubsec Variables de marge et de largeur +@translationof @code{\paper} variables for widths and margins + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item paper-width +@funindex paper-width + +La largeur de la page. Elle correspond par défaut à la largeur du +format de papier utilisé. Si @code{paper-width} n'a aucun effet en +matière d'ajustement automatique, cette variable influe sur la variable +@code{line-width}. Lorsque vous définissez à la fois les valeurs de +@code{paper-width} et @code{line-width}, les valeurs de +@code{left-margin} et @code{right-margin} seront recalculées. Voir +aussi @code{check-consistency}. + +@item line-width +@funindex line-width + +la longueur d'un système musical sans indentation et justifiée sur toute +la largeur de la page. La valeur par défaut est égale à +@code{paper-width}, auquel sont retranchés @code{left-margin} et +@code{right-margin}. Lorsque vous définissez @code{line-width} sans +modifier les valeurs de @code{left-margin} et @code{right-margin}, les +marges seront alors recalculées de telle sorte que les systèmes soient +centrés. Voir aussi @code{check-consistency}. La variable +@code{line-width} peut se définir aussi dans un bloc @code{\layout}. + +@item left-margin +@funindex left-margin + +la marge entre le bord gauche de la feuille et le début de chaque +système. La valeur par défaut est de@tie{}@code{10\mm}@tie{}; elle sera +ajustée selon le format du papier. Lorsque vous définissez +@code{line-width} et @code{right-margin}, sans modifier la valeur de +@code{left-margin}, cette dernière sera alors égale à +@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)}. +Lorsque seule @code{line-width} est définie, les deux marges +correspondent à +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}, ce +qui a pour effet de centrer les systèmes sur la page. Voir aussi +@code{check-consistency}. + +@item right-margin +@funindex right-margin + +La marge entre le bord droit de la page et la fin des systèmes en pleine +largeur (non @emph{ragged}). La valeur par défaut est +de@tie{}@code{10\mm} et s'ajustera selon le format du papier. Lorsque +vous définissez @code{line-width} et @code{left-margin}, sans modifier +la valeur de @code{right-margin}, cette dernière sera alors égale à +@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)}. +Lorsque seule @code{line-width} est définie, les deux marges +correspondent à +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}, ce +qui a pour effet de centrer les systèmes sur la page. Voir aussi +@code{check-consistency}. + +@item check-consistency +@funindex check-consistency + +Lorsqu'elle est activée, cette variable vérifie que @code{left-margin}, +@code{line-width} et @code{right-margin} sont en cohérence, et que +l'addition de ces trois éléments ne dépassera pas la largeur du papier +(@code{paper-width}). La valeur par défaut est@tie{}@code{##t}. Dans +le cas d'une incohérence, un message d'avertissement est émis et les +trois variables -- marges et longueur de ligne -- rétablies à leur +valeur par défaut (ajustées selon le fromat du papier). + +@item ragged-right +@funindex ragged-right + +Lorsque cette variable est activée, les systèmes ne s'étendront pas sur +la longueur de la ligne, mais s'arrêteront à leur longueur normale. +La valeur par défaut est @code{##f} mais, si la partition ne comporte +qu'un seul système, elle passe à @code{##t}. Cette variable peut aussi +se gérer au sein d'un bloc @code{\layout}. + +@item ragged-last +@funindex ragged-last + +Lorsqu'elle est activée, cette variable permet de ne pas étendre le +dernier système de façon à occuper toute la longueur de la ligne. La +valeur par défaut est@tie{}@code{##f}. Cette variable peut aussi +se gérer au sein d'un bloc @code{\layout}. + +@end table + +@seealso +Notation Reference: +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + + +@node Variables spécifiques pour l'impression recto-verso +@unnumberedsubsubsec Variables spécifiques pour l'impression recto-verso +@translationof @code{\paper} variables for two-sided mode + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item two-sided +@funindex two-sided + +@cindex gouttière +@cindex reliure + +Cette variable permet de gérer efficacement les impressions recto-verso. +Lorsqu'elle est activée, les réglages affectés à @code{inner-margin}, +@code{outer-margin} ainsi que @code{binding-offset} détermineront les +différentes marges selon qu'il s'agit d'une page paire ou impaire. +Cette variable s'applique en lieu et place de @code{left-margin} et +@code{right-margin}. La valeur par défaut est@tie{}@code{##f}. + +@item inner-margin +@funindex inner-margin + +La marge que toutes les pages d'une partie ou de tout un ouvrage devront +avoir du côté intérieur. Bien entendu, cette variable n'est +effective que lorsque vous comptez générer un fichier imprimable en +recto-verso -- propriété @code{two-sided} définie à vrai. La valeur par +défaut est de@tie{}@code{10\mm} et s'ajustera selon le format du papier. + +@item outer-margin +@funindex outer-margin + +la marge que toutes les pages d'une partie ou de tout un ouvrage devront +avoir du côté extérieur -- opposé à la reliure. Bien entendu, cette +variable n'est effective que lorsque vous comptez générer un fichier +imprimable en recto-verso -- propriété @code{two-sided} définie à vrai. +La valeur par défaut est de@tie{}@code{20\mm} et s'ajustera selon le +format du papier. + +@item binding-offset +@funindex binding-offset + +La gouttière, ou marge de reliure, permet d'augmenter en conséquence la +valeur de la marge intérieure @code{inner-margin} de telle sorte que +rien ne soit masqué par la reliure. Bien entendu, cette variable n'est +effective que lorsque vous comptez générer un fichier imprimable en +recto-verso -- propriété @code{two-sided} définie à vrai. La valeur par +défaut est de@tie{}@code{0} et s'ajustera selon le format du papier. + +@end table + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + + +@node Variables d'indentation et de décalage +@unnumberedsubsubsec Variables d'indentation et de décalage +@translationof @code{\paper} variables for shifts and indents + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item horizontal-shift +@funindex horizontal-shift + +@c This default value is buried in the middle of page.scm. -mp + +Tous les systèmes, ainsi que les titres et séparateurs de systèmes, +seront poussés d'autant vers la droite. la valeur par défaut est +de@tie{}@code{0.0}. + +@item indent +@funindex indent + +Le niveau d'indentation du premier système d'une partition. La valeur +par défaut est de@tie{}@code{15\mm} et s'ajustera selon le format du +papier. Cette variable peut aussi se gérer au sein d'un bloc +@code{\layout}. + +@item short-indent +@funindex short-indent + +Le niveau d'indentation de tous les systèmes hormis le premier. La +valeur par défaut est de@tie{}@code{0}, et s'ajustera selon le format du +papier dès lors que vous lui affecterez une valeur. Cette variable peut +aussi se gérer au sein d'un bloc @code{\layout}. + +@end table + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +Snippets: +@rlsr{Spacing}. + + +@node Autres variables du bloc \paper +@subsection Autres variables du bloc @code{\paper} +@translationof Other @code{\paper} variables + +@menu +* Variables de gestion des sauts de ligne:: +* Variables de gestion des sauts de page:: +* Variables de gestion des numéros de page:: +* Variables supplémentaires:: +@end menu + + +@node Variables de gestion des sauts de ligne +@unnumberedsubsubsec Variables de gestion des sauts de ligne +@translationof @code{\paper} variables for line breaking + +@c TODO: Mention that ly:optimal-breaking is on by default? -mp + +@table @code + +@item max-systems-per-page +@funindex max-systems-per-page + +Le nombre maximal de systèmes qu'une page pourra comporter. Cette +variable n'est prise en compte, à ce jour, que par l'option +@code{ly:optimal-breaking}, et n'est pas définie. + +@item min-systems-per-page +@funindex min-systems-per-page + +Le nombre minimal de systèmes qu'une page pourra comporter. Attention +cependant aux risques de débordement s'il est trop important. Cette +variable n'est prise en compte, à ce jour, que par l'option +@code{ly:optimal-breaking}, et n'est pas définie. + +@item systems-per-page +@funindex systems-per-page + +Le nombre de systèmes que devrait comporter chaque page. Cette variable +n'est à ce jour prise en charge que par l'algorithme +@code{ly:optimal-breaking} et n'est pas définie par défaut. + +@item system-count +@funindex system-count + +Le nombre de systèmes requis par la partition. Cette variable n'est pas +définie par défaut. Cette variable peut se gérer au sein d'un bloc +@code{\layout}. + +@end table + +@seealso +Manuel de notation : +@ref{Sauts de ligne}. + + +@node Variables de gestion des sauts de page +@unnumberedsubsubsec Variables de gestion des sauts de page +@translationof @code{\paper} variables for page breaking + +Les valeurs par défaut sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item blank-after-score-page-force +@funindex blank-after-score-page-force + +Pénalité pour apparition d'une page blanche entre deux partitions. Sa +valeur est par défaut inférieure à celle de +@code{blank-page-force}@tie{}; nous préférons q'une page blanche +s'insère après la fin de la partition plutôt qu'au milieu. + +@item blank-last-page-force +@funindex blank-last-page-force + +Pénalité pour fin de partition intervenant sur une page impaire. La +valeur par défaut est de@tie{}@code{0}. + +@item blank-page-force +@funindex blank-page-force + +Pénalité pour apparition d'une page blanche en cours de partition. +L'algorithme @code{ly:optimal-breaking} n'en tiendra pas compte +puisqu'il ne conçoit pas la présence d'une page blanche au milieu d'une +partition. La valeur par défaut est de@tie{}@code{5}. + +@item page-breaking +@funindex page-breaking + +L'algorithme de calcul des sauts de page à utiliser. Vous avez le choix +entre @code{ly:minimal-breaking}, @code{ly:page-turn-breaking} et +@code{ly:optimal-breaking}. + +@item page-breaking-system-system-spacing +@funindex page-breaking-system-system-spacing + +Cette variable permet de @qq{tromper} l'algorithme de gestion des sauts +de page quant à la valeur de @code{system-system-spacing}. Ainsi, +lorsque @code{page-breaking-system-system-spacing #'padding} a une +valeur nettement supérieure à @code{system-system-spacing #'padding}, +l'algorithme en question aura tendance à disposer moins de systèmes sur +une même page. Cette variable est par défaut non définie. + +@item page-count +@funindex page-count + +Le nombre de pages que devra comporter la partition. Cette variable est +par défaut non définie. + +@end table + +@seealso +Manuel de notation : +@ref{Sauts de page}, +@ref{Optimisation des sauts de page}, +@ref{Optimisation des tournes}, +@ref{Minimisation des sauts de page}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +@node Variables de gestion des numéros de page +@unnumberedsubsubsec Variables de gestion des numéros de page +@translationof @code{\paper} variables for page numbering + +Les valeurs par défaut sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item auto-first-page-number +@funindex auto-first-page-number + +L'algorithme qui gère les sauts de page prend en compte le fait que le +premier numéro de page soit pair ou impair. Lorsque cette +fonctionnalité est activée, l'algorithme des sauts de page décidera de +lui-même si le premier numéro sera pair ou impair, ce qui se traduira +par un éventuel incrément de un. La valeur par défaut +est@tie{}@code{##f}. + +@item first-page-number +@funindex first-page-number + +Le numéro de la première page. La valeur par défaut est +de@tie{}@code{#1}. + +@item print-first-page-number +@funindex print-first-page-number + +Cette variable permet d'imprimer le numéro de page y compris sur la +première. La valeur par défaut est@tie{}@code{##f}. + +@item print-page-number +@funindex print-page-number + +La désactivation de cette variable permet d'obtenir des pages non +numérotées. La valeur par défaut est@tie{}@code{##t}. + +@end table + +@seealso +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +@knownissues +Les pages au numéro impair sont toujours à droite. Pour que la musique +commence en page 1, le dos de la page de garde doit être vide de telle +sorte que la page une se retrouve à droite. + + +@node Variables supplémentaires +@unnumberedsubsubsec Variables supplémentaires +@translationof Miscellaneous @code{\paper} variables + +@table @code + +@item page-spacing-weight +@funindex page-spacing-weight + +Cette variable définit l'importance relative des espacements entre la +page (verticalité) et la ligne (horizontalité). Une valeur élevée +privilégiera l'espacement au niveau de la page. La valeur par défaut +est de@tie{}@code{#10}. + +@item print-all-headers +@funindex print-all-headers + +Lorsque cette variable est activée, l'intégralité des champs d'entête +sera imprimée pour chaque bloc @code{\score}, plutôt que les seuls +champs @code{piece} et @code{opus}. La valeur par défaut +est@tie{}@code{##f}. + +@item system-separator-markup +@funindex system-separator-markup + +Il s'agit en l'occurrence d'insérer un objet de type @emph{markup} entre +chaque système, comme on le voit dans nombre de partitions orchestrales. +Cette variable n'est pas définie par défaut. La commande +@code{\slashSeparator} -- définie dans le fichier +@file{ly/titling-init.ly} -- fournit un @emph{markup} relativement +courant@tie{}: + +@lilypond[quote,verbatim,noragged-right,line-width=30\mm] +#(set-default-paper-size "a8") + +\book { + \paper { + system-separator-markup = \slashSeparator + } + \header { + tagline = ##f + } + \score { + \relative c'' { c1 \break c1 \break c1 } + } +} +@end lilypond + +@end table + + +@seealso +Fichiers d'initialisation : +@file{ly/titling-init.ly}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@knownissues + +L'entête par défaut, formé d'une seule ligne, est constitué du numéro de +page et du champ @code{instrument} contenu dans le bloc @code{\header}. + + +@node Mise en forme de la partition +@section Mise en forme de la partition +@translationof Score layout + +Nous allons voir ici les options du bloc @code{\layout}. Elles sont +plus particulièrement destinées à gérer la mise en forme de la +partition. + +@menu +* Le bloc \layout:: +* Définition de la taille de portée:: +@end menu + + +@node Le bloc \layout +@subsection Le bloc @code{\layout} +@translationof The @code{\layout} block + +@funindex \layout + +Alors que le bloc @code{\paper} définit le formatage des pages pour +l'intégralité du document, le bloc @code{\layout} s'occupe de la mise en +forme spécifique à la partition. La mise en forme de la musique peut +concerner toutes les partitions d'un même ouvrage, auquel cas un bloc +@code{\layout} indépendant se placera en tête de fichier. Dans le cas +où la mise en forme concerne une partition en particulier, un bloc +@code{\layout} se placera au sein du bloc @code{\score} en question. +Sont susceptibles d'apparître dans un bloc @code{\layout}@tie{}: + +@itemize +@item +la fonction scheme @code{layout-set-staff-size}, + +@item +dans des blocs @code{\contexte}, les modifications apportées aux +différents contextes, et + +@item +les variables normalement attachées au bloc @code{\paper} qui +affacteront la mise en forme de la partition. + +@end itemize + +La fonction @code{layout-set-staff-size} fait l'objet de la rubrique +suivante, @ref{Définition de la taille de portée}. La modification des +contextes est abordée dans d'autres chapitres -- voir +@ref{Modification des propriétés d'un contexte} et +@ref{Modification des réglages par défaut d'un contexte}. Les variables +du bloc @code{\paper} que l'on peut retrouver dans un bloc +@code{\layout} sont@tie{}: + +@itemize + +@item +@code{line-width}, @code{ragged-right} et @code{ragged-last} +(voir @ref{Variables de marge et de largeur}) + +@item +@code{indent} et @code{short-indent} +(see @ref{Variables d'indentation et de décalage}) + +@item +@code{system-count} +(see @ref{Variables de gestion des sauts de ligne}) + +@end itemize + +Voici un exemple de bloc @code{\layout} : + +@example +\layout @{ + indent = 2\cm + \context @{ + \StaffGroup + \override StaffGrouper #'staff-staff-spacing #space = #8 + @} + \context @{ + \Voice + \override TextScript #'padding = #1 + \override Glissando #'thickness = #3 + @} +@} +@end example + + +@seealso +Manuel de notation : +@ref{Modification des réglages par défaut d'un contexte}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Définition de la taille de portée +@subsection Définition de la taille de portée +@translationof Setting the staff size + +@cindex fonte, définition de la taille +@cindex portée, définition de la taille +@funindex layout file + +La @strong{taille de portée} @emph{(staff size)} est fixée par défaut à +20@tie{}points. Il existe deux manières de la modifier@tie{}: + +La taille des portées peut se définir globalement pour toutes les +partitions d'un même fichier, ou plus précisément d'un bloc +@code{\book}, à l'aide de @code{set-global-staff-size}. + +@example +#(set-global-staff-size 14) +@end example + +@noindent +Ceci définit donc la hauteur des portées à 14@tie{}points par +défaut@tie{}; toutes les fontes seront ajustées en conséquence. + + +Vous pouvez aussi spécifier une taille à une partition en particulier en +procédant comme ci-dessous@tie{}: + +@example +\score@{ + @dots{} + \layout@{ + #(layout-set-staff-size 15) + @} +@} +@end example + +La fonte Feta fournit les symboles musicaux dans huit tailles +différentes. Chaque fonte correspond à une hauteur particulière de +portée@tie{}; les petites tailles comportent des symboles plus épais +pour être cohérent avec l'épaisseur relativement plus importante des +lignes de la portée. Le tableau suivant répertorie les différentes +tailles de police. + +@quotation +@multitable @columnfractions .15 .2 .22 .2 + +@item @b{nom de la fonte} +@tab @b{hauteur de portée (pt)} +@tab @b{hauteur de portée (mm)} +@tab @b{utilisation} + +@item feta11 +@tab 11,22 +@tab 3,9 +@tab format de poche + +@item feta13 +@tab 12,60 +@tab 4,4 +@tab + +@item feta14 +@tab 14,14 +@tab 5,0 +@tab + +@item feta16 +@tab 15,87 +@tab 5,6 +@tab + +@item feta18 +@tab 17,82 +@tab 6,3 +@tab carnet de chant + +@item feta20 +@tab 20 +@tab 7,0 +@tab partition standard + +@item feta23 +@tab 22,45 +@tab 7,9 +@tab + +@item feta26 +@tab 25,2 +@tab 8,9 +@tab +@c matériel de location moderne ? + +@end multitable +@end quotation + +Ces fontes sont disponibles dans toutes les tailles. La propriété de +contexte @code{fontSize} ainsi que la propriété de mise en forme +@code{staff-space} (voir @rinternals{StaffSymbol}) permettent d'ajuster +individuellement la taille de chaque portée. La taille de chacune des +portées est relative à la taille globale. + + +@seealso +Manuel de notation : +@ref{Indication de la taille de fonte musicale}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@knownissues + +@code{layout-set-staff-size} ne modifie en rien l'espacement entre les +lignes d'une portée. + + +@node Sauts +@section Sauts +@translationof Breaks + +@menu +* Sauts de ligne:: +* Sauts de page:: +* Optimisation des sauts de page:: +* Optimisation des tournes:: +* Minimisation des sauts de page:: +* Sauts explicites:: +* Recours à une voix supplémentaire pour gérer les sauts:: +@end menu + + +@node Sauts de ligne +@subsection Sauts de ligne +@translationof Line breaking + +@cindex saut de ligne +@cindex ligne, passer à la suivante + +Les sauts de ligne sont normalement gérés de façon automatique. Ils +interviennent de telle sorte qu'une ligne ne soit ni trop resserrée, ni +trop aérée, et que des lignes consécutives aient à peu près la même +densité. + +Vous pouvez cependant insérer l'instruction @code{\break} à l'endroit où +vous le jugez utile pour @qq{forcer} le passage à la ligne +suivante@tie{}: + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c c | \break +c4 c c c | +@end lilypond + +Par défaut, un saut de ligne ne saurait intervenir au beau milieu d'une +mesure@tie{}; LilyPond vous le signalera par un message si tel était le +cas. Si d'aventure vous voulez forcer un saut de ligne en l'absence de +barre de mesure, vous devrez auparavant insérer une barre invisible -- à +l'aide de @code{\bar@tie{}""}. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c +\bar "" \break +c | +c4 c c c | +@end lilypond + +LilyPond ignorera un @code{\break} placé sur une barre à la fin d'une +mesure dès lors que la précédente avait une note en suspend -- c'est +typiquement le cas lorsqu'un nolet est à cheval sur deux mesures. +L'instruction @code{\break} sera alors opérationnelle si vous avez +auparavant désactivé le @code{Forbid_line_break_engraver} du contexte +@code{Voice} concerné. Notez bien que les sauts de ligne forcés doivent +être saisis au sein d'une expression polyphonique@tie{}: + +@lilypond[quote,ragged-right,verbatim] +\new Voice \with { + \remove Forbid_line_break_engraver +} \relative c'' { + << + { c2. \times 2/3 { c4 c c } c2. | } + { s1 | \break s1 | } + >> +} +@end lilypond + +Selon le même principe, un saut de ligne ne peut intervenir alors qu'une +ligature s'étend sur deux mesures consécutives. Il faut en ce cas là +introduire la dérogation @w{@code{\override Beam #'breakable = ##t}}. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Beam #'breakable = ##t +c2. c8[ c | \break +c8 c] c2. | +@end lilypond + +L'instruction opposée, @code{\noBreak}, interdira toute tentative de +saut de ligne à la fin de la mesure où elle est explicitée. + +LilyPond dispose de deux variables de base pour influencer l'espacement +au niveau des lignes. Toutes deux se définissent dans un bloc +@code{\layout}, @code{indent} réglant l'indentation de la première +ligne, et @code{line-width} la longueur des lignes. + +L'activation du commutateur @code{ragged-right} au sein du bloc +@code{\layout} aura pour effet de terminer les systèmes là où il le +feraient normalement plutôt que de les étirer sur toute la longueur de +la ligne. Ceci est particulièrement utile pour de petits fragments ou +pour vérifier la densité induite par l'espacement naturel. + +@c TODO Check and add para on default for ragged-right + +Le commutateur @code{ragged-last} est équivalent à @code{ragged-right}, +à ceci près qu'il n'affecte que la dernière ligne de la pièce. + +@example +\layout @{ + indent = 0\mm + line-width = 150\mm + ragged-last = ##t +@} +@end example + + + +@cindex sauts de ligne réguliers +@cindex portée à quatre mesures + +L'utilisation conjointe de @code{\break} et de blancs dans une section +@code{\repeat} vous permettra de positionner des sauts de ligne à +intervalle régulier. Par exemple, les 28 mesures de ce qui suit, si +'lon est à 4/4, seront coupées toutes les quatre mesures, pas +ailleurs@tie{}: + +@example +<< + \repeat unfold 7 @{ + s1 \noBreak s1 \noBreak + s1 \noBreak s1 \break + @} + @{ @var{the actual music@dots{}} @} +>> +@end example + +@ignore +Apparemment, je ne vois pas de "snippet" qui corresponde, +à moins que ce ne soit pour allécher vers la section +"4.6 Fitting music onto fewer pages" -JCM +@c TODO Check this +A linebreaking configuration can be saved as a @code{.ly} file +automatically. This allows vertical alignments to be stretched to +fit pages in a second formatting run. This is fairly new and +complicated. More details are available in +@rlsr{Spacing}. +@end ignore + +@predefined +@funindex \break +@code{\break}, +@funindex \noBreak +@code{\noBreak}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Variables de gestion des sauts de ligne}. + +Référence des propriétés internes : +@rinternals{LineBreakEvent}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Sauts de page +@subsection Sauts de page +@translationof Page breaking + +La gestion automatique des sauts de page se contrôle à l'aide des +commandes @code{\pageBreak} et @code{\noPageBreak}. Ces commandes +fonctionnent de manière analogue à @code{\break} et @code{\noBreak} pour +les sauts de ligne et se placent donc au moment d'une barre de mesure. +Elles permettent de forcer, ou d'interdire, un saut de page à l'endroit +indiqué. Comme on peut s'y attendre, @code{\pageBreak} force le saut de +ligne. + +Les commandes @code{\pageBreak} et @code{\noPageBreak} peuvent se +trouver à des niveaux supérieurs, entre deux partitions ou +@emph{markups} de premier rang. + +Tout comme @code{ragged-right} et @code{ragged-last} qui permettent de +gérer la répartition horizontale, LilyPond dispose de commutateurs +équivalents au niveau de la verticalité@tie{}: @code{ragged-bottom} et +@code{ragged-last-bottom}. Lorsqu'ils sont tous deux activés -- +affectés de @code{##t} -- les systèmes ne seront pas répartis sur les +pages y compris la dernière. Pour de plus amples détails, reportez-vous +à @ref{Variables d'espacement vertical fixe}. + +Les sauts de page sont générés par la fonction @code{page-breaking}. +LilyPond dispose de trois différents algorithmes en la matière@tie{}: +@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} et +@code{ly:minimal-breaking}. C'est @code{ly:optimal-breaking} qui est +activé par défaut, mais rien ne vous empêche d'en changer, par +l'intermédiaire du bloc @code{\paper}@tie{}: + +@example +\paper @{ + page-breaking = #ly:page-turn-breaking +@} +@end example + +@funindex \bookpart + +Lorsqu'un ouvrage contient plusieurs partitions et un certain nombre de +pages, la gestion des sauts de page finit par devenir très gourmande, +tant au niveau du processeur que de la mémoire. Vous pouvez cependant +alléger la charge en recourant à des blocs @code{\bookpart} afin de +sectionner l'ouvrage que vous traitez@tie{}; les sauts de pages seront +alors gérés individuellement au niveau de chacune des parties. Par +ailleurs, cela vous autorisera une gestion différente selon les +sections. + +@example +\bookpart @{ + \header @{ + subtitle = "Préface" + @} + \paper @{ + %% Pour une partie constituée principalement de texte + %% ly:minimal-breaking est plus judicieux. + page-breaking = #ly:minimal-breaking + @} + \markup @{ @dots{} @} + @dots{} +@} +\bookpart @{ + %% Cette partie étant purement musicale, + %% retour au style par défaut (optimal-breaking). + \header @{ + subtitle = "Premier mouvement" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + +@predefined +@funindex \pageBreak +@code{\pageBreak}, +@funindex \noPageBreak +@code{\noPageBreak}. +@endpredefined + + +@seealso +Manuel de notation : +@ref{Variables de gestion des sauts de page}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Optimisation des sauts de page +@subsection Optimisation des sauts de page +@translationof Optimal page breaking + +@funindex ly:optimal-breaking + +LilyPond, pour déterminer où placer un saut de page, utilise par défaut +la fonction @code{ly:optimal-breaking}. Celle-ci tend à trouver une +rupture qui évite d'obtenir à la fois une page trop dense ou exagérément +aérée. Contrairement à la fonction @code{ly:page-turn-breaking}, elle +n'a aucune notion de ce qu'est une @qq{tourne}. + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Optimisation des tournes +@subsection Optimisation des tournes +@translationof Optimal page turning + +@funindex ly:page-turn-breaking + +Aboutir à une configuration des sauts de page de telle sorte que les +pages de droite se terminent toujours par un silence devient souvent une +nécessité. En effet, l'exécutant pourra alors tourner la page sans +risquer de manquer des notes. La fonction @code{ly:page-turn-breaking} +tend à trouver une rupture qui évite d'obtenir à la fois une page trop +dense ou exagérément aérée, tout en tenant compte du fait qu'une tourne +ne saurait intervenir qu'à certains endroits. + +L'utilisation de cette fonction se fait en deux étapes. Il vous faut +tout d'abord l'activer au sein du bloc @code{\paper} comme indiqué à la +rubrique @ref{Sauts de page}. Vous devrez, dans un deuxième temps, +informer la fonction des endroits où les sauts de page sont permis. + +Cette deuxième étape se réalise de deux manières différentes. Vous +pouvez spécifier manuellement chaque tourne potentielle en insérant un +@code{\allowPageTurn} à l'endroit approprié de votre fichier source. + +Toutefois, cette option peut vite se révéler fastidieuse selon l'ampleur +de l'œuvre. Vous pouvez alors recourir au @code{Page_turn_engraver} que +vous mentionnerez dans un contexte de voix ou de portée. Ce graveur de +tournes recherchera dans le contexte en question les passages sans note. +Notez bien qu'il ne recherche pas des silences, mais l'absence de +notes@tie{}; autrement dit, il ne restera pas inactif dans la cadre +d'une portée polyphonique dont l'une des parties contiendrait des +silences. Lorsqu'il rencontre un fragment suffisamment long ne +contenant aucune note, il insère un @code{\allowPageTurn} à la barre +terminant ce fragment, à moins qu'il ne rencontre en chemin une +@qq{barre spéciale} -- telle une double barre -- auquel cas il y +déposera le @code{\allowPageTurn}. + +@funindex minimumPageTurnLength + +Le @code{Page_turn_engraver} examine la propriété de contexte +@code{minimumPageTurnLength} pour déterminer quelle doit être la +longueur d'un fragment sans note avant une tourne. La valeur par +défaut de @code{minimumPageTurnLength} est +@code{#(ly:make-moment@tie{}1@tie{}1)}, soit une ronde, et s'ajuste de +la manière suivante@tie{}: + +@example +\new Staff \with @{ \consists "Page_turn_engraver" @} +@{ + a4 b c d | + R1 | % une tourne peut se placer ici + a4 b c d | + \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) + R1 | % il ne peut pas y avoir de tourne ici + a4 b r2 | + R1*2 | % une tourne peut se placer ici + a1 +@} +@end example + +@funindex minimumRepeatLengthForPageTurn + +Le @code{Page_turn_engraver} tient compte des reprises. C'est pourquoi +il ne permettra une tourne que dans le cas où il y aura suffisamment de +temps au début et à la fin de la reprise pour que l'exécutant ait le +temps de revenir à la page précédente. Le @code{Page_turn_engraver} est +même capable d'interdire un tourne dans le cas d'une reprise de courte +durée, ajustable au travers de la propriété de contexte +@code{minimumRepeatLengthForPageTurn}. + +Les commandes de tourne -- @code{\pageTurn}, @code{\noPageTurn} et +@code{\allowPageTurn} -- peuvent s'utiliser à des niveaux supérieurs, +entre des blocs @code{\score} ou des @emph{markups} de haut niveau. + + +@predefined +@funindex \pageTurn +@code{\pageTurn}, +@funindex \noPageTurn +@code{\noPageTurn}, +@funindex \allowPageTurn +@code{\allowPageTurn}. +@endpredefined + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@knownissues + +Une partition ne devrait contenir qu'une seule instance du +@code{Page_turn_engraver}, au risque de se contredire les uns les autres. + + +@node Minimisation des sauts de page +@subsection Minimisation des sauts de page +@translationof Minimal page breaking + +@funindex ly:minimal-breaking + +La fonction @code{ly:minimal-breaking} est celle qui réalise le moins de +calculs pour positionner les sauts de page. Elle mettra le plus de +systèmes possible sur une page avant de passer à la suivante. On peut +donc la préférer lorsque la partition s'étend sur beaucoup de pages ou +lorsque les autres fonctions de gestion des sauts de page ralentissent +nettement le traitement, sont trop gourmandes en mémoire ou qu'il y a +beaucoup de texte. Il suffit de la mentionner au sein du bloc +@code{\paper}@tie{}: + +@example +\paper @{ + page-breaking = #ly:minimal-breaking +@} +@end example + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Sauts explicites +@subsection Sauts explicites +@translationof Explicit breaks + +Il arrive parfois que LilyPond rejette des @code{\break} ou des +@code{\pageBreak} explicites. Vous pouvez alors prendre le contrôle +avec ces deux instructions dérogatoires@tie{}: + +@example +\override NonMusicalPaperColumn #'line-break-permission = ##f +\override NonMusicalPaperColumn #'page-break-permission = ##f +@end example + +Lorsque vous désactivez @code{line-break-permission}, LilyPond +ne passera à la ligne suivante qu'en présence d'un @code{\break} +explicite, et nulle part ailleurs. De la même façon, la désactivation +de @code{page-break-permission} aura pour conséquence que LilyPond ne +changera de page que lorsqu'il rencontrera un @code{\pageBreak}, et +nulle part ailleurs. + +@lilypond[quote,verbatim] +\paper { + indent = #0 + ragged-right = ##t + ragged-bottom = ##t +} + +musique = \relative c'' { c8 c c c } + +\score { + \new Staff { + \repeat unfold 2 { \musique } \break + \repeat unfold 4 { \musique } \break + \repeat unfold 6 { \musique } \break + \repeat unfold 8 { \musique } \pageBreak + \repeat unfold 8 { \musique } \break + \repeat unfold 6 { \musique } \break + \repeat unfold 4 { \musique } \break + \repeat unfold 2 { \musique } + } + \layout { + \context { + \Score + \override NonMusicalPaperColumn #'line-break-permission = ##f + \override NonMusicalPaperColumn #'page-break-permission = ##f + } + } +} +@end lilypond + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Recours à une voix supplémentaire pour gérer les sauts +@subsection Recours à une voix supplémentaire pour gérer les sauts +@translationof Using an extra voice for breaks + +La plupart du temps, les informations concernant les sauts de ligne ou +de page se retrouvent directement au milieu des notes. + +@example +musique = \relative c'' @{ c4 c c c @} + +\score @{ + \new Staff @{ + \repeat unfold 2 @{ \musique @} \break + \repeat unfold 3 @{ \musique @} + @} +@} +@end example + +Bien que cela constitue un moyen aisé de saisir les commandes +@code{\break} et @code{\pageBreak}, les données musicales se retrouvent +mélangées à des informations qui concernent plutôt l'agencement de la +musique sur le papier. Vous pouvez tout à fait séparer ce qui est +purement musical et les informations concernant les sauts de ligne ou de +page en créant une voix supplémentaire dédiée. Cette voix spécifique +ne contiendra que des blancs -- des silences invisibles @code{\skip} --, +des @code{\break}, des @code{\pageBreak} et autres informations +concernant les ruptures. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + s1 * 2 \break + s1 * 3 \break + s1 * 6 \break + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + +Cette manière de procéder est tout à fait indiquée lorsque vous ajustez +les @code{line-break-system-details} et autres propriétés fort +intéressantes de @code{NonMusicalPaperColumnGrob}, comme vous pouvez +le voir au chapitre @ref{Espacement vertical}. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1 * 2 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 35)) + s1 * 3 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 70)) + s1 * 6 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 105)) + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + + +@seealso +Manuel de notation : +@ref{Espacement vertical}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Espacement vertical +@section Espacement vertical +@translationof Vertical spacing + +@cindex vertical, espacement +@cindex espacement vertical + +L'espacement vertical dépend de trois éléments@tie{}: la surface +disponible -- par exemple format de papier et marges --, l'espace qui +doit séparer les systèmes, et l'espace qui sépare les portées d'un même +système. + +@menu +* Espacement vertical au sein d'un système:: +* Positionnement explicite des portées et systèmes:: +* Résolution des collisions verticales:: +@end menu + +@node Espacement vertical au sein d'un système +@subsection Espacement vertical au sein d'un système +@translationof Flexible vertical spacing within systems + +@cindex distance entre les portées +@cindex portées, espacement +@cindex espacement entre les portées +@cindex espacement au sein d'un système + +LilyPond dispose de trois différents mécanismes permettant de contrôler +l'espacement au sein d'un système selon trois catégories@tie{}: + +@itemize + +@item +@emph{portées isolées}, + +@item +@emph{portées regroupées} (portées d'un même groupe, telles celles +d'un @code{ChoirStaff}, etc.), et + +@item +@emph{lignes de non-portée} (@code{Lyrics}, @code{ChordNames}, etc.). + +@end itemize + +@c TODO: Clarify this. This almost implies that non-staff lines +@c have NO effect on the spacing between staves. -mp + +La hauteur de chaque système se détermine en deux phases. Les portées +sont tout d'abord espacées selon la surface disponible. Puis les lignes +autres que des portées, comme les paroles ou les accords, sont réparties +entre les portées. + +Les paragraphes qui suivent traitent exclusivement de la manière de +gérer l'espacement entre les lignes d'un système -- portée musicale ou +non. Pour ce qui a trait aux espacements entre les systèmes, +mouvements, annotations et marge, ils sont contrôlés par des variables +attachées au bloc @code{\paper} et font l'objet du chapitre +@ref{Variables d'espacement vertical fluctuant}. + +@menu +* Propriétés d'espacement au sein d'un système:: +* Espacement de portées isolées:: +* Espacement de portées regroupées:: +* Espacement des lignes rattachées à des portées:: +@end menu + + +@node Propriétés d'espacement au sein d'un système +@unnumberedsubsubsec Propriétés d'espacement au sein d'un système +@translationof Within-system spacing properties + +L'espacement entre les portées est géré par deux jeux de propriétés +d'objet graphique (@emph{grob}). Le premier, associé à l'objet +graphique @code{VerticalAxisGroup}, est créé pour toute ligne de portée +ou de non-portée. Le second, associé à l'objet graphique +@code{StaffGrouper}, doit être explicitement créé pour un regroupement +de portées particulier. Les propriétés qui leur sont attachées sont +abordées en fin de section. + +Le nom de ces propriétés, sauf @code{staff-affinity}, suit le schéma +@code{@var{item1}-@var{item2}-spacing} -- @code{@var{item1}} et +@code{@var{item2}} étant les éléments à espacer. Notez bien que +@code{@var{item2}} n'est pas forcément placé au-dessous@tie{}: c'est le +cas pour la propriété @code{nonstaff-relatedstaff-spacing} qui spécifie +la distance entre une ligne de non-portée alors que sa +@code{staff-affinity} a été déterminée à @code{#UP}. + +Toutes ces distances sont mesurées entre les points de référence +respectifs de éléments considérés. +Le @i{point de référence} d'une portée est le centre vertical du +@code{StaffSymbol} -- la ligne médiane si @code{line-count} est impair, +l'interligne médian si @code{line-count} est pair. +Quant aux lignes rattachées à des portées -- lignes de non-portée -- le +tableau suivant présente le @i{point de référence} pour chacun d'entre +eux@tie{}: + +@multitable {Non-staff line} {Reference point} +@headitem Ligne de non-portée @tab Point de référence +@item @code{ChordNames} @tab ligne de base +@item @code{NoteNames} @tab ligne de base +@item @code{Lyrics} @tab ligne de base +@item @code{Dynamics} @tab centre vertical +@item @code{FiguredBass} @tab point le plus haut +@item @code{FretBoards} @tab ligne supérieure +@end multitable + +En voici une représentation graphique@tie{}: + +@c KEEP LY +@lilypond[quote,noragged-right,line-width=110\mm] +#(define zero-space '((padding . -inf.0) (basic-distance . 0))) + +alignToZero = \with { + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space +} +lowerCaseChords = \with { + chordNameLowercaseMinor = ##t +} +staffAffinityDown = \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN +} +labelContext = +#(define-music-function + (parser location context) + (string?) + #{ s1*0^\markup { \typewriter $context } #}) + +\layout { + \context { \Dynamics \alignToZero } + \context { \FiguredBass \alignToZero } + \context { \Lyrics \alignToZero } + \context { \NoteNames \alignToZero } + \context { \ChordNames \alignToZero \lowerCaseChords } + \context { \FretBoards \alignToZero \staffAffinityDown } + \context { \Score + \override BarLine #'stencil = ##f + \override DynamicText #'self-alignment-X = #-1 + \override FretBoard #'X-offset = #1.75 + \override InstrumentName #'minimum-Y-extent = #'(-2 . 2) + \override InstrumentName #'extra-offset = #'(0 . -0.5) + \override TextScript #'minimum-Y-extent = #'(-2 . 3) + \override TimeSignature #'stencil = ##f + } +} + +%% Contextes dont le point de référence est la ligne de base : +%% ChordNames, NoteNames, et Lyrics +<< + \new ChordNames { \chords { g1:m } } + \new NoteNames { s1 | g1 | } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"ligne de base (baseline) " + \textLengthOn + \labelContext "ChordNames" s1 | + \labelContext "NoteNames" s1 | + \labelContext "Lyrics" s1 | + } + \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } } +>> + +%% Le point de référence de Dynamics est le milieu de la ligne +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"centre vertical " + \labelContext "Dynamics" s1*3 + } + \new Dynamics { s2\mp s\fp } +>> + +%% Le point de référence de FiguredBass est son point le plus haut +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"point le plus haut " + \labelContext "FiguredBass" s1 + } + \new FiguredBass { \figuremode { <6 5>1 } } +>> + +%% Le point de référence de FretBoards est la ligne du haut +\include "predefined-guitar-fretboards.ly" +<< + \new FretBoards { \chordmode { e1 } } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"ligne du haut " + \labelContext "FretBoards " s1 + } +>> +@end lilypond + +Hormis @code{staff-affinity} -- propriété attachée au @emph{grob} +@code{VerticalAxisGroup} --, chacune de ces propriétés est enregistrée +sous la forme d'une liste associative dont la structure est +identique à celle des variables du bloc @code{\paper} que nous avons +examinées au chapitre +@ref{Variables d'espacement vertical fluctuant}. Les particularités en +matière de modification d'une liste associative font l'objet d'un +@rusernamed{Modification de listes associatives,chapitre particulier}. +Les propriétés des objets graphiques se règlent avec un @code{\override} +mentionné dans un bloc @code{\score} ou @code{\layout}, pas dans le bloc +@code{\paper}. + +L'exemple suivant illustre deux façons de modifier une liste +associative. La première déclaration n'agit que sur une seule clé, +alors que la seconde redéfinit la propriété dans son intégralité. + +@example +\new Staff \with @{ + \override VerticalAxisGroup #'staff-staff-spacing #'basic-distance = #10 +@} @{ @dots{} @} + +\new Staff \with @{ + \override VerticalAxisGroup #'staff-staff-spacing = + #'(('basic-distance . 10) + (minimum-distance . 9) + (padding . 1) + (stretchability . 10)) +@} @{ @dots{} @} +@end example + +La modification d'un espacement au niveau global se mentionne au sein du +bloc @code{\layout}@tie{}: + +@example +\layout @{ + \context @{ + \Staff + \override VerticalAxisGroup #'staff-staff-spacing #'basic-distance = #10 + @} +@} +@end example + +Les réglages concernant les propriétés d'espacement vertical des objets +graphiques sont répertoriées aux chapitres +@rinternals{VerticalAxisGroup} et @rinternals{StaffGrouper}. +Les propriétés relatives aux lignes de non-portée sont répertoriées +selon la définition de leur contexte dans la +@rinternalsnamed{Contexts,Référence des propriétés internes}. + + +@subsubheading Propriétés de l'objet @code{VerticalAxisGroup} +@translationof Properties of the @code{VerticalAxisGroup} grob + +Les propriétés de l'objet @code{VerticalAxisGroup} s'ajustent à l'aide +d'un @code{\override} au niveau d'un contexte @code{Staff} (ou son +équivalent). + +@table @code +@item staff-staff-spacing +Il s'agit de la distance entre la portée en cours et la portée qui suit +au sein du même regroupement, qu'il y ait ou non une ligne de non-portée +(@code{Lyrics} ou autre) entre les deux. Cette propriété ne s'applique +pas à la dernière portée d'un système. + +En tout état de cause, la fonction Scheme @code{staff-staff-spacing} +d'un @code{VerticalAxisGroup} affectera les propriétés du +@code{StaffGrouper} si la portée est incluse dans un regroupement@tie{}; +elle s'appliquera au @code{default-staff-staff-spacing} en l'absence de +regroupement. Les portées peuvent donc s'aligner différemment selon +qu'elles sont ou non regroupées. Pour obtenir le même espacement sans +tenir compte dees éventuels regroupements, cette fonction peut faire +place à une complète redéfinition des espacements fluctuants à l'aide de +règles dérogatoires comme vu précédemment. + +@item default-staff-staff-spacing +Il s'agit de la distance qui s'appliquera par défaut aux portées +isolées, à loins que @code{staff-staff-spacing} n'ait été redéfini +explicitement par un @code{\override}. + +@item staff-affinity +Il s'agit de la direction -- @code{UP}, @code{DOWN} ou @code{CENTER} -- +que prendra une ligne de non-portée pour aller s'accoler aux portées +adjacentes . Si vous lui attribuez @code{CENTER}, cette ligne de +non-portée ira se placer à équidistance entre les portées qui +l'encadrent, tout en tenant compte des éventuels risques de collision et +des autres contraintes d'espacement. Des lignes de non-portée +adjacentes devraient avoir une @code{staff-affinity} allant de haut en +bas -- autrement dit, pas de @code{UP} après un @code{DOWN}. +Une ligne de non-portée en dessous d'un système devrait avoir sa +@code{staff-affinity} définie à @code{UP}. De la même manière, lorsque +cette ligne surplombe un système, sa @code{staff-affinity} devrait être +définie à @code{DOWN}. Prenez garde à la valeur que vous affectez à +@code{staff-affinity}@tie{}: si vous lui affectez la valeur @code{#f} à +une ligne de non-portée, cette ligne sera considérée comme étant une +portée@tie{}; à l'inverse, utiliser la propriété @code{staff-affinity} +pour une portée lui fera perdre cette qualité. + +@c TODO: verify last clause below ("even if other...") + +@item nonstaff-relatedstaff-spacing +Il s'agit de la distance entre la ligne de non-portée en cours et la +portée la plus proche selon la @code{staff-affinity}, à la double +condition qu'il n'y a pas déjà une autre ligne de non-portée et que la +valeur de @code{staff-affinity} soit @code{UP} ou @code{DOWN}. Lorsque +la valeur de @code{staff-affinity} est égale à @code{CENTER}, la valeur +de @code{nonstaff-relatedstaff-spacing} servira à centrer la ligne de +non-portée entre les deux portées adjacentes même si une autre +non-portée est présente (quelque soit le côté). + +@item nonstaff-nonstaff-spacing +Il s'agit de la distance entre deux lignes de non-portée selon +l'orientation définie par @code{staff-affinity} et qu'elles ont la même +orientation. Bien entendu, ceci ne peut concerner que les valeurs +@code{UP} et @code{DOWN} de @code{staff-affinity}. + +@item nonstaff-unrelatedstaff-spacing +Il s'agit de la distance entre une ligne de non-portée et la portée à +l'opposé de l'orientation adoptée, à la double condition qu'il n'y a pas +déjà une autre ligne de non-portée et que la valeur de +@code{staff-affinity} soit @code{UP} ou @code{DOWN}. Cette propriété +trouve toute sa légitimité pour décaler une ligne de @code{Lyrics} de la +portée à laquelle elle ne correspond pas. +@end table + + +@subsubheading Propriétés de l'objet @code{StaffGrouper} +@translationof Properties of the @code{StaffGrouper} grob + +Les propriétés de l'objet @code{StaffGrouper} s'ajustent à l'aide +d'un @code{\override} au niveau d'un contexte @code{StaffGroup} (ou son +équivalent). + +@table @code +@item staff-staff-spacing +Il s'agit de la distance entre deux portées consécutives d'un même +système. La propriété @code{staff-staff-spacing} de l'objet +@code{VerticalAxisGroup} d'un portée en particulier peut se redéfinir à +l'aide de règles dérogatoires. + +@item staffgroup-staff-spacing +Il s'agit de la distance entre la dernière portée d'un regroupement et +la portée suivante, au sein d'un même système, y compris lorsqu'une ou +plusieurs lignes de non-portée (tel @code{Lyrics}) s'insèrent entre les +deux. Cette propriété ne concerne pas la dernière portée d'un système. +Dans le cas où la propriété @code{staff-staff-spacing} d'une portée du +regroupement a été ajustée au niveau de son propre +@code{VerticalAxisGroup}, cette dernière aura préséance. +@end table + + +@seealso +Fichiers d'initialisation : +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + +Référence des propriétés internes : +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Espacement de portées isolées +@unnumberedsubsubsec Espacement de portées isolées +@translationof Spacing of ungrouped staves + +Les @code{Staff}, @code{DrumStaff}, @code{TabStaff} entre autres sont +des contextes de @qq{portée} pouvant contenir plusieurs voix, mais pas +une portée. + +L'espacement de ces @i{portées isolées} est géré par les propriétés +suivantes@tie{}: + +@itemize +@item Propriétés du @code{VerticalAxisGroup} : +@itemize +@item @code{default-staff-staff-spacing} +@item @code{staff-staff-spacing} +@end itemize +@end itemize + +Ces propriétés d'objet graphique sont expliquées une à une au chapitre +@ref{Propriétés d'espacement au sein d'un système}. + +Certaines propriétés supplémentaires s'appliqueront dès lors que +ces portées sont regroupées -- voir +@ref{Espacement de portées regroupées}. + +L'exemple suivant illustre la manière de gérer l'espacement de portées +isolées à l'aide de la propriété @code{default-staff-staff-spacing}. +Les mêmes règles appliquées de manière dérogatoire au +@code{staff-staff-spacing} produiront les mêmes effets, y comris au sein +de regroupements. + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Staff + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 8) + (minimum-distance . 7) + (padding . 1)) + } +} + +<< + % The very low note here needs more room than 'basic-distance + % can provide, so the distance between this staff and the next + % is determined by 'padding. + \new Staff { b,2 r | } + + % Here, 'basic-distance provides enough room, and there is no + % need to compress the space (towards 'minimum-distance) to make + % room for anything else on the page, so the distance between + % this staff and the next is determined by 'basic-distance. + \new Staff { \clef bass g2 r | } + + % By setting 'padding to a negative value, staves can be made to + % collide. The lowest acceptable value for 'basic-distance is 0. + \new Staff \with { + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 3.5) + (padding . -10)) + } { \clef bass g2 r | } + \new Staff { \clef bass g2 r | } +>> +@end lilypond + + +@seealso +Fichiers d'initialisation : +@file{scm/define-grobs.scm}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Référence des propriétés internes : +@rinternals{VerticalAxisGroup}. + + +@node Espacement de portées regroupées +@unnumberedsubsubsec Espacement de portées regroupées +@translationof Spacing of grouped staves + +Dans les partitions orchestrales ou de grande ampleur, il arrive +souvent que des portées soient regroupées. L'espacement est alors plus +important entre deux regroupements qu'entre les portées d'un même +groupe. + +Les @i{regroupement de portées} tels le @code{StaffGroup} ou le +@code{ChoirStaff} sont des contextes qui peuvent contenir simultanément +une ou plusieurs portées. + +L'espacement entre les portées d'un même regroupement est géré par les +propriétés suivantes@tie{}: + +@itemize +@item Propriétés du @code{VerticalAxisGroup} : +@itemize +@item @code{staff-staff-spacing} +@end itemize +@item Propriétés du @code{StaffGrouper} : +@itemize +@item @code{staff-staff-spacing} +@item @code{staffgroup-staff-spacing} +@end itemize +@end itemize + +Ces propriétés d'objet graphique sont expliquées une à une au chapitre +@ref{Propriétés d'espacement au sein d'un système}. + +L'exemple suivant illustre la manière de gérer l'espacement de portées +regroupes, à l'aide des propriétés de l'objet graphique +@code{StaffGrouper}@tie{}: + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Score + \override StaffGrouper #'staff-staff-spacing #'padding = #0 + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1 + } +} + +<< + \new PianoStaff \with { + \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20 + } << + \new Staff { c'1 } + \new Staff { c'1 } + >> + + \new StaffGroup << + \new Staff { c'1 } + \new Staff { c'1 } + >> +>> +@end lilypond + + +@seealso +Fichiers d'initialisation : +@file{scm/define-grobs.scm}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Référence des propriétés internes: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Espacement des lignes rattachées à des portées +@unnumberedsubsubsec Espacement des lignes rattachées à des portées +@translationof Spacing of non-staff lines + +Les @i{lignes de non-portée}, comme les @code{Lyrics} ou les +@code{ChordNames} sont des contextes dont les objets de rendu sont +gravés à l'instar des portées -- une ligne horizontale dans un système. +En fait, les lignes de non-portée sont des contextes qui vont créer un +objet de rendu @code{VerticalAxisGroup}. + +L'espacement des lignes de non-portée est géré par les propriétés +suivantes@tie{}: + +@itemize +@item Propriétés du @code{VerticalAxisGroup} : +@itemize +@item @code{staff-affinity} +@item @code{nonstaff-relatedstaff-spacing} +@item @code{nonstaff-nonstaff-spacing} +@item @code{nonstaff-unrelatedstaff-spacing} +@end itemize +@end itemize + +Ces propriétés d'objet graphique sont expliquées une à une au chapitre +@ref{Propriétés d'espacement au sein d'un système}. + +L'exemple suivant utilise la propriété @code{nonstaff-nonstaff-spacing} +pour gérer l'espacement entre des lignes consécutives de non-portée. +Vous noterez que la valeur élevée attribuée à la clé +@code{stretchability} permet aux paroles de s'étirer plus que de raison. + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Lyrics + \override VerticalAxisGroup + #'nonstaff-nonstaff-spacing #'stretchability = #1000 + } +} + +\new StaffGroup +<< + \new Staff \with { + \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30)) + } { c'1 } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #UP + } \lyricmode { up } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #CENTER + } \lyricmode { center } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN + } \lyricmode { down } + \new Staff { c'1 } +>> +@end lilypond + + +@seealso +Fichiers d'initialisation : +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +@c @lsr{spacing,page-spacing.ly}, +@c @lsr{spacing,alignment-vertical-spacing.ly}. + +Référence des propriétés internes : +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}. + + +@node Positionnement explicite des portées et systèmes +@subsection Positionnement explicite des portées et systèmes +@translationof Explicit staff and system positioning + +Pour bien comprendre comment fonctionnent les réglages de +@code{VerticalAxisGroup} et de @code{\paper} abordés dans les deux +rubriques précédentes, rien ne vaut une collection d'exemples illustrant +les différentes mises au point du décalage vertical appliqué aux portées +et systèmes distribués sur une page. + +Une autre approche de l'espacement vertical est le recours à +@code{NonMusicalPaperColumn #'line-break-system-details}. Alors que +@code{VerticalAxisGroup} et @code{\paper} gèrent un décalage vertical, +@code{NonMusicalPaperColumn #'line-break-system-details} spécifiera le +positionnement vertical absolu sur la page. + +@code{NonMusicalPaperColumn #'line-break-system-details} prend en charge +une liste associative de trois mises au point@tie{}: + +@itemize +@item @code{X-offset} +@item @code{Y-offset} +@item @code{alignment-distances} +@end itemize + +Les dérogations en matière d'objet graphique, y compris celles +concernant les @code{NonMusicalPaperColumn} ci-dessus, peuvent se placer +à trois différents endroits de votre fichier source@tie{}: + +@itemize +@item directement au beau milieu des notes +@item au sein d'un bloc @code{\context} +@item dans un bloc @code{\with} +@end itemize + +Le réglage de @code{NonMusicalPaperColumn} s'effectue à l'aide d'une +simple commande @code{\override} au sein d'un bloc @code{\context} ou +@code{\with}. Dans le cas ou il est stipulé au fil des notes, c'est la +commande spécifique @code{\overrideProperty} qui doit intervenir. Voici +quelques exemples de réglages de @code{NonMusicalPaperColumn} à l'aide +de la commande @code{\overrideProperty}@tie{}: + +@example +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((alignment-distances . (15))) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40) + (alignment-distances . (15))) +@end example + +Nous allons maintenant voir ces différents réglages en action. +Commençons par examiner un exemple dépourvu de toute mise au point. + +@c \book { } is required in these examples to ensure the spacing +@c overrides can be seen between systems. -np + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + s1*5 \break + s1*5 \break + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Cette partition isole les informations de saut de ligne ou de page dans +une voix spécifique. La mise en forme est ainsi séparée des événements +musicaux@tie{}; ceci nous permettra d'y voir plus clair au fur et à +mesure que nous avancerons. Pour plus de précisions, relisez +@ref{Recours à une voix supplémentaire pour gérer les sauts}. + +Les @code{\breaks} explicites répartissent la musique en lignes de cinq +mesures chacune. L'espacement vertical est celui que LilyPond attribue +par défaut. Nous pouvons, afin de fixer explicitement le point +d'attache vertical de chacun des systèmes, définir un doublet +@code{Y-offset} en tant qu'attribut du @code{line-break-system-details} +de l'objet @code{NonMusicalPaperColumn}@tie{}: + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 40)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 80)) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Vous aurez remarqué que nous n'avons déterminé qu'une seule valeur, même +si la liste associative de @code{line-break-system-details} peut en +comporter un certain nombre. Vous aurez aussi noté que la propriété +@code{Y-offset} détermine ici le point de départ de chacun des systèmes +de la page. + +Maintenant que chaque système est explicitement positionné, nous pouvons +jouer sur la distance séparant les portées de chacun des systèmes, grâce +à la sous-propriété @code{alignment-distances} de +@code{line-break-system-details}. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 20) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (15))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Nous avons maintenant assigné deux valeurs différentes à l'attribut +@code{line-break-system-details} de l'objet +@code{NonMusicalPaperColumn}. @code{line-break-system-details} pourrait +prendre bien d'autres paramètres d'espacement, y compris un doublet +@code{X-offset}, mais nous n'avons utilisé que @code{Y-offset} et +@code{alignment-distances} pour contrôler le positionnement de chaque +système et de chaque portée. Vous noterez enfin que +@code{alignment-distances} traite le positionnement des portées, non +d'un regroupement de portées. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0) + (alignment-distances . (30 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (10 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (10 30))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new StaffGroup << + \new Staff { \repeat unfold 15 { d'4 d' d' d' } } + \new Staff { \repeat unfold 15 { e'4 e' e' e' } } + >> + >> + } +} +@end lilypond + +Quelques points à prendre en considération@tie{}: + +@itemize +@item +Lorsque vous utilisez @code{alignment-distances}, les paroles et +autres lignes de non-portée ne comptent pas pour une portée. + +@item +Les nombres fournis à @code{X-offset}, @code{Y-offset} et +@code{alignment-distances} sont considérés comme des multiples de la +distance entre des portées adjacentes. Des valeurs positives remontent +les portées et paroles, des valeurs négatives les descendent. + +@item +Dans la mesure où @code{NonMusicalPaperColumn +#'line-break-system-details} permet de positionner systèmes et portées +n'importe où sur une page, vous pourriez être en contradiction avec les +dimensionnements de la feuille ou bien aboutir à des surimpressions. +Soyez donc raisonnables quant aux différentes valeurs que vous affectez +à ces réglages. + +@end itemize + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Résolution des collisions verticales +@subsection Résolution des collisions verticales +@translationof Vertical collision avoidance + +@funindex outside-staff-priority +@funindex outside-staff-padding +@funindex outside-staff-horizontal-padding + +Vous savez de manière intuitive qu'un certain nombre d'objets en +matière de notation musicale appartiennent à la portée, et que +d'autres se placent en dehors de la portée. Entre autres objets +externes, nous avons les marques repères, les textes et les +nuances@tie{}; nous les appellerons @qq{objets extérieurs à la portée}. +La règle qu'applique LilyPond pour positionner verticalement ces +objets extérieurs consiste à les placer au plus près de la portée +tout en prenant garde d'éviter qu'il y ait chevauchement. + +LilyPond utilise la propriété @code{outside-staff-priority} afin de +déterminer si un objet est ou non un objet extérieur à la portée@tie{}: +lorsque la valeur de @code{outside-staff-priority} est numérique, il +s'agit d'un objet extérieur à la portée. De plus, la propriété +@code{outside-staff-priority} indique à LilyPond l'ordre dans lequel ces +objets doivent être disposés. + +Tout d'abord, LilyPond dispose tous les objets qui ne sont pas externes. +Les objets extérieurs à la portée sont alors triés selon l'ordre +croissant de leur @code{outside-staff-priority}. Enfin, LilyPond prend +chacun des ces objets et les positionne de telle sorte qu'il n'entrent +pas en collision avec ceux qui on déjà été placés. Autrement dit, +lorsque deux objets devraient se placer au même endroit, celui dont la +@code{outside-staff-priority} est la plus faible sera disposé au plus +près de la portée. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4_"Text"\pp +r2. +\once \override TextScript #'outside-staff-priority = #1 +c4_"Text"\pp % this time the text will be closer to the staff +r2. +% by setting outside-staff-priority to a non-number, +% we disable the automatic collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\once \override DynamicLineSpanner #'outside-staff-priority = ##f +c4_"Text"\pp % now they will collide +@end lilypond + +Le décalage vertical entre un objet extérieur à la portée et celui qui +le précède se contrôle par la propriété @code{outside-staff-padding}. + +@c KEEP LY +@lilypond[quote,ragged-right,relative=2,verbatim] +\once \override TextScript #'outside-staff-padding = #0 +a'^"Ce texte est placé au plus près de la note" +\once \override TextScript #'outside-staff-padding = #3 +c^"Ce texte est décalé par rapport au texte précédent" +c^"Ce texte est accolé au texte précédent" +@end lilypond + +Par défaut, les objets extérieurs à la portée sont positionnés en +évitant les collisions horizontales avec des objets précédemment +positionnés. Ceci peut cependant générer des situations où des objets +se trouvent horizontalement trop proches. L'espacement vertical entre +les portées peut dans une certaine mesure permettre de mieux intercaler +les objets extérieurs à la portée. La propriété +@code{outside-staff-horizontal-padding} repoussera verticalement un +objet pour éviter ce genre de situation. + +@lilypond[quote,ragged-right,relative=2,verbatim] +% the markup is too close to the following note +c4^"Text" +c4 +c''2 +% setting outside-staff-horizontal-padding fixes this +R1 +\once \override TextScript #'outside-staff-horizontal-padding = #1 +c,,4^"Text" +c4 +c''2 +@end lilypond + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Espacement horizontal +@section Espacement horizontal +@translationof Horizontal spacing + +@cindex horizontal, espacement +@cindex espacement horizontal + +@menu +* Généralités sur l'espacement horizontal:: +* Changement d'espacement en cours de partition:: +* Modification de l'espacement horizontal:: +* Longueur de ligne:: +* Notation proportionnelle:: +@end menu + +@node Généralités sur l'espacement horizontal +@subsection Généralités sur l'espacement horizontal +@translationof Horizontal spacing overview + +Le moteur d'espacement traduit les différences de durée en distances +étirables (@emph{springs} pour ressorts) de différente longueur. Des +durées importantes prennent ainsi plus de place que des durées moins +longues. Les durées les plus courtes se verront attribuer un espace +fixe, contrôlé par la propriété @code{shortest-duration-space} de +l'objet @rinternals{SpacingSpanner}. Au plus la durée s'allonge, au +plus elle prendra d'espace@tie{}: le doublement d'une durée attribuera à +la note un espace fixé d'après la propriété @code{spacing-increment}. + +L'exemple suivant comporte des blanches, des noires et un certain nombre +de croches. La croche est suivie d'un espace de la largeur d'une tête +de note@tie{}; pour la noire , cette espace est de deux têtes@tie{}; il +est de trois pour la blanche. + +@lilypond[quote,verbatim,relative=1] +c2 c4. c8 c4. c8 c4. c8 c8 +c8 c4 c4 c4 +@end lilypond + +@code{spacing-increment} est normalement défini à 1,2@tie{}espace de +portée -- ce qui correspond à peu près à la largeur d'une tête de note +-- et @code{shortest-duration-space} à 2,0. La note la plus courte +s'étendra donc sur l'équivalent de 2,4@tie{}espaces de portée (2 fois le +@code{spacing-increment}). Le point de départ de cet espace se situe à +l'extrémité gauche du symbole@tie{}; la note la plus courte est donc +suivie en général d'un espace égal à la largeur d'une tête de note. + +Si l'on suit à la lettre ce qui précède, ajouter une simple triple +croche à une partition qui comporte déjà des croches et des doubles +augmentera considérablement son volume@tie{}: la durée la plus +courte n'est plus la double mais la triple croche, ce qui aura +pour conséquence d'ajouter une largeur de tête à chacune des notes. +Pour s'affranchir de cet effet quelque peu pervers, la durée la plus +courte prise en considération au niveau de l'espacement n'est pas la +note la plus brève de la partition, mais celle qui apparaît le plus +souvent. + +La courte durée la plus fréquente est déterminée à partir de la note la +plus courte de chaque mesure. C'est elle qui servira de base pour +l'espacement, à cette nuance près que la plus courte durée ne saurait +être strictement supérieure à la croche. Cette @qq{durée de référence} +est d'ailleurs affichée lorsque vous lancez @code{lilypond} avec l'option +@code{--verbose}. + +Ces durées peuvent être adaptées. Vous pouvez définir la durée de base +pour les espacements grâce à la propriété +@code{common-shortest-duration} de l'objet @rinternals{SpacingSpanner}. +La durée maximale de cet étalon, normalement la croche, est gérée par la +propriété @code{base-shortest-duration}. + +@funindex common-shortest-duration +@funindex base-shortest-duration +@funindex stem-spacing-correction +@funindex spacing + +Les notes plus courtes que la note témoin sont suivies d'un espace +proportionnel à la durée témoin. Si donc nous ajoutions quelques +doubles croches à l'exemple précédent, elles seraient suivies d'une +demie largeur de tête@tie{}: + +@lilypond[quote,verbatim,relative=2] +c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 +@end lilypond + + +Dans notre @emph{Essai sur la gravure musicale automatisée}, nous avons +vu comment la direction des hampes peut influencer l'espacement -- voir +@ressay{Espacement}. Ceci est contrôlé par la propriété +@code{stem-spacing-correction} de l'objet @rinternals{NoteSpacing}, créé +pour chaque contexte @rinternals{Voice}. L'objet +@rinternals{StaffSpacing}, généré au niveau d'un contexte @code{Staff}, +possède une même propriété qui contrôlera l'espacement hampe-barre de +mesure. L'exemple suivant montre ces adaptations, tout d'abord selon +les réglages par défaut, puis avec des corrections forcées. + +@lilypond[quote,ragged-right] +{ + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | + \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 + \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | +} +@end lilypond + +L'espacement spécifique à la notation proportionnelle fait l'objet d'une +@rusernamed{Notation proportionnelle,rubrique dédiée}. + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Référence des propriétés internes : +@rinternals{SpacingSpanner}, +@rinternals{NoteSpacing}, +@rinternals{StaffSpacing}, +@rinternals{NonMusicalPaperColumn}. + +Essai sur la gravure musicale automatisée : +@ressay{Espacement}. + + +@knownissues + +Il n'existe pas de mécanisme simple et efficace qui permette de +forcer manuellement l'espacement. La solution ci-dessous permet +cependant @qq{d'aérer} artificiellement une partition@tie{}; il vous +suffit d'ajuster la valeur du décalage @emph{(padding)} autant que de +besoin. +@example + \override Score.NonMusicalPaperColumn #'padding = #10 +@end example + +Il n'y a aucun moyen de diminuer l'espacement. + + +@node Changement d'espacement en cours de partition +@subsection Changement d'espacement en cours de partition +@translationof New spacing area + +Il arrive, au cours d'un même mouvement, qu'une nouvelle partie modifie +substantiellement la notion de valeur brève et valeur longue. La +commande @code{newSpacingSection} permet alors de réinitialiser les +paramètres d'espacement. + +Dans l'exemple qui suit, le changement de métrique marque le début +d'une nouvelle partie@tie{}; remarquez comme les doubles-croches sont +alors plus espacées@tie{}: + +@lilypond[relative,verbatim,quote] +\time 2/4 +c4 c8 c +c8 c c4 c16[ c c8] c4 +\newSpacingSection +\time 4/16 +c16[ c c8] +@end lilypond + +La commande @code{\newSpacingSection} crée un nouvel objet +@code{SpacingSpanner}, ce qui permet d'appliquer de nouveaux +@code{\override}s à partir de ce point. + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Référence des propriétés internes : +@rinternals{SpacingSpanner}. + + +@node Modification de l'espacement horizontal +@subsection Modification de l'espacement horizontal +@translationof Changing horizontal spacing + +Vous pouvez influencer l'espacement horizontal à l'aide de la propriété +@code{base-shortest-duration}. Comparons les deux partitions qui +suivent, toutes deux montrant la même musique. La première partition +applique les réglages par défaut, alors que la seconde bénéficie +d'ajustement de la propriété @code{base-shortest-duration}. Au plus la +valeur de @code{ly:make-moment} est grande, au plus la musique sera +resserrée. En effet, @code{ly:make-moment} construit une durée@tie{}: +@w{@code{1 4}} est plus long que @w{@code{1 16}}. + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } +} +@end lilypond + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } +} +@end lilypond + + +@snippets + +L'espacement au sein d'un nolet dépend par défaut d'un certain nombre de +facteurs qui ne sont pas liés à la durée (altération, changement de +clef, etc.). @w{@code{Score.SpacingSpanner #'uniform-stretching}} +permet d'ignorer ces symboles et, par voie de conséquence, forcer +l'espacement sur la simple durée. Notez bien que cette propriété +s'appliquera à toute la partition, puisque mentionnée au sein d'un bloc +@code{\layout}. + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new Staff { + \times 4/5 { + c8 c8 c8 c8 c8 + } + c8 c8 c8 c8 + } + \new Staff { + c8 c8 c8 c8 + \times 4/5 { + c8 c8 c8 c8 c8 + } + } + >> + \layout { + \context { + \Score + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +L'activation du commutateur @code{strict-note-spacing} permet d'espacer +les notes sans tenir compte des clefs, barres de mesure ou notes +d'ornement qui pourraient apparaître@tie{}: + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Score.SpacingSpanner #'strict-note-spacing = ##t +\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } +@end lilypond + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Longueur de ligne +@subsection Longueur de ligne +@translationof Line length + +@cindex saut de page +@cindex pages, saut + +@funindex indent +@funindex line-width +@funindex ragged-right +@funindex ragged-last + +@c Although line-width can be set in \layout, it should be set in paper +@c block, to get page layout right. +@c Setting indent in \paper block makes not much sense, but it works. + +@c Bit verbose and vague, use examples? +Deux réglages de bases ont une influence considérable sur +l'espacement@tie{}: @code{line-width} et @code{indent}. Tous deux se +placent dans le bloc @code{\layout}. Ils contrôleront la longueur des +lignes et l'indentation de la première. + +L'activation du commutateur @code{ragged-right} au sein du bloc +@code{\layout} permet de terminer les systèmes naturellement plutôt que +de les voir s'étirer sur toute la largeur de la page. Cette option est +particulièrement utile lorsque vous traitez de courts fragment, ou bien +pour vérifier ce que donnerait l'espacement naturel. Bien qu'il soit +désactivé par défaut, il sera activé si la partition ne comporte qu'un +seul système. + +@cindex page layout +@cindex vertical spacing + +Le fonctionnement de l'option @code{ragged-last} est en tout point +identique à celui de @code{ragged-right}, à ceci près qu'il ne concerne +que la dernière ligne de la partition. Il n'y a pas de restriction +quant à cette ligne. Il en va de même que pour le formatage d'un +paragraphe de texte, la dernière ligne s'arrête au dernier caractère. + +@c Note that for text there are several options for the last line. +@c While Knuth TeX uses natural length, lead typesetters use the same +@c stretch as the previous line. eTeX uses \lastlinefit to +@c interpolate between both these solutions. + +@example +\layout @{ + indent = #0 + line-width = #150 + ragged-last = ##t +@} +@end example + + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Notation proportionnelle +@subsection Notation proportionnelle +@translationof Proportional notation + +LilyPond prend en charge la notation proportionnelle. Il s'agit dans +ce cas de représenter la notation selon un espacement strictement +relatif aux durées. Ce type d'espacement pourrait se comparer à +l'utilisation de papier millimétré pour positionner les notes au fil de +la portée. Certaines œuvres de la fin du XXe siècle et à l'aube du XXIe +utilisent cette proportionnalité dans le but de clarifier des structures +rythmiques complexes, d'aider au positionnement d'indications +temporelles ou autres éléments graphiques directement dans la partition. + +LilyPond met à votre disposition cinq réglages différents, qui peuvent +s'utiliser conjointement ou individuellement, aux fins de mettre au +point cette notation proportionnelle. + +@itemize +@item @code{proportionalNotationDuration} + +@item @code{uniform-stretching} + +@item @code{strict-note-spacing} + +@item @code{\remove Separating_line_group_engraver} + +@item @code{\override PaperColumn #'used = ##t} + +@end itemize + +Nous allons examiner, dans les différents exemples qui suivent, les +effets de ces réglages et comment ils interagissent. + +Commençons par cette mesure toute simple qui utilise l'espacement +classique et justifiée à gauche. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> +} +@end lilypond + +Vous constatez que la blanche qui entame la mesure prend moins de la +moitié de l'espace. De même, les doubles croches et le quintolet de +doubles (donc des vingtièmes de ronde) qui terminent cette mesure +n'en occupent pas la moitié de l'espace horizontal. + +En matière de gravure traditionnelle, cet espacement correspond tout à +fait à nos attentes, puisque nous pouvons rogner l'espace sur la +blanche et ainsi en gagner en largeur sur toute la mesure qui fait une +ronde. + +Par contre, si nous avons besoin d'insérer une indication temporelle ou +un autre graphisme en surplomb ou en dessous de notre partition, nous +aurons besoin de la notation proportionnelle. Celle-ci s'active an +définissant la propriété @code{proportionalNotationDuration}. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + +La blanche du début et les notes plus rapides de la deuxième moitié de +la mesure occupent maintenant exactement le même espace horizontal. +Nous pourrions donc y insérer, au-dessus ou au-dessous, une indication +temporelle ou autre graphisme. + + +@code{proportionalNotationDuration} est une propriété attachée au +contexte @code{Score}. Rappelez-vous que vous pouvez régler les +propriétés d'un contexte à trois différents endroits de votre +fichier@tie{}: dans un bloc @code{\with}, dans un bloc @code{\context} +ou au beau milieu de la musique à l'aide de la commande @code{\set}. +Vous pouvez donc définir @code{proportionalNotationDuration} selon l'une +de ces trois façons, à l'instar de n'importe quel définition de +contexte. + +La propriété @code{proportionalNotationDuration} prend en unique +argument la durée de référence qui servira de base pour espacer toute la +musique. La fonction scheme @code{make-moment} intégrée à LilyPond +prend deux arguments@tie{}: un numérateur et un dénominateur qui +représentent une fraction de ronde. L'appel de +@w{@code{#(ly:make-moment 1 20)}} produit donc une durée de référence +égale à un vingtième de ronde. Vous pourriez tout aussi bien utiliser +@code{#(ly:make-moment 1 16)}, @code{#(ly:make-moment 1 8)} ou +@code{#(ly:make-moment 3 97)}. + +Se pose alors le problème de fournir la juste durée de référence à +@code{proportionalNotationDuration}. Il faut en l'occurrence procéder par +tâtonnement, en commençant par une valeur proche de la note la plus +rapide (la durée la plus courte) du morceau. Au plus la durée de +référence est petite, au plus la musique sera étalée@tie{}; à l'inverse, +une durée de référence élevée produira une musique resserrée. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 8) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 16) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 32) + } + } +} +@end lilypond + +Vous ne manquerez pas de noter qu'une durée de référence trop grande, +comme la croche pour la première ligne, a pour conséquence de resserrer +la musique, ce qui peut aboutir à des chevauchements de têtes. Vous +remarquez aussi que , par principe, la notation proportionnelle occupe +beaucoup plus d'espace horizontal que l'espacement traditionnel. La +notation proportionnelle met en évidence le rythme au détriment de +l'espacement horizontal. + +Examinons à présent le moyen d'optimiser l'espacement de nolets en +tuilage. + +Reprenons notre exemple de départ, avec son espacement traditionnel, et +ajoutons lui une portée incluant un autre type de nolet. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> +} +@end lilypond + +L'espacement est loin d'être idéal, pour la simple raison que +l'espacement régulier des notes de la portée inférieure ne s'étire pas +uniformément. Il est vrai que de telles constructions complexes en +nolets sont assez rares en gravure traditionnelle, ce qui explique que +les règles qu'elle applique peuvent amener à ce résultat. Le recours à +@code{proportionalNotationDuration} permet d'arranger les choses. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + +Cependant, si l'on observe de près, il est évident que les notes de la +deuxième moitié du ennaolet ont tendance à s'espacer légèrement plus que +celles de la première moitié. Afin d'uniformiser cet étalement, nous +allons activer le @code{uniform-stretching}, propriété attachée au +@code{SpacingSpanner}. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +L'espacement sur les deux portées est maintenant correct, les relations +rythmiques sont clairement perceptibles, et nous pourrions y insérer +une indication temporelle ou autre graphisme selon notre envie. + +Notez bien que la prise en charge de la notation proportionnelle par +LilyPond demande que, dans chaque partition, soit activée la propriété +@code{uniform-stretching} du @code{SpacingSpanner}. Dans le cas +contraire, utiliser @code{proportionalNotationDuration} aura pour +conséquence, entre autres, un espacement erroné lorsque vous y aurez +inséré des silences invisibles @emph{skip}. + +Le @code{SpacingSpanner} est en fait un objet graphique abstrait attaché +au contexte @code{Score}. Tout comme pour la propriété +@code{proportionalNotationDuration}, les réglages du +@code{SpacingSpanner} peuvent se faire à trois différents endroits de +votre fichier@tie{}: dans un bloc @code{\with}, dans un bloc +@code{\context} ou au beau milieu de la musique à l'aide de la +commande @code{\set}. + +Gardez bien à l'esprit qu'il n'y a qu'un seul @code{SpacingSpanner} par +@code{Score}. Il s'ensuit que @code{uniform-stretching} est soit +activé, soit désactivé, et dans tous les cas pour l'intégralité de la +partition. Vous pourriez toutefois avoir besoin de modifier ce +comportement en cours de partition, et recourir alors à l'instruction +@code{\newSpacingSection} -- pour de plus amples détails, voir la +rubrique @ref{Changement d'espacement en cours de partition}. + + +Intéressons-nous maintenant au @code{Separating_line_group_engraver}, +qui est désactivé pour la plupart des partitions en notation +proportionnelle. Voici ce qui apparaît dans une partition +traditionnelle@tie{}: il y a toujours un @qq{espace préservé} juste +avant la première note de chaque portée. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff { + c'1 + \break + c'1 +} +@end lilypond + +Cet espace, géré par le @code{Separating_line_group_engraver}, est aussi +présent lorsqu'intervient un changement de métrique, d'armure ou de +clef. Désactiver le @code{Separating_line_group_engraver} revient à +réduire cet espace à zéro. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff \with { + \remove Separating_line_group_engraver +} { + c'1 + \break + c'1 +} +@end lilypond + +Les éléments non musicaux tels que métrique, armure et clef, posent +problème lorsqu'on travaille en notation proportionnelle. Bien +qu'aucune notion de durée ne leur soit attachée, ces éléments +@qq{consomment} de l'espace. Différentes approches permettent +cependant de gérer ce problème. + +Éviter les problèmes d'espacement avec l'armure est chose aisée@tie{}: +il suffit qu'il n'y en ait pas@tie{}! C'est bien souvent le cas en +musique contemporaine, où l'on trouve le plus d'ouvrages en notation +proportionnelle. Il en va de même pour la métrique, et tout +particulièrement lorsque la partition comporte un quadrillage temporel +ou autres graphismes. L'absence de métrique reste cependant +exceptionnelle et la plupart des partitions en notation proportionnelle +laissent apparaître quelques métriques. Il est par contre pratiquement +impossible de se passer de clef et d'altération. + +L'une des options permettant de s'affranchir de l'espacement dû aux +éléments non musicaux consiste en l'activation de la propriété +@code{strict-note-spacing} attachée au @code{SpacingSpanner}. Observons +les deux portées suivantes@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} + +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \override Score.SpacingSpanner #'strict-note-spacing = ##t + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} +@end lilypond + +Toutes deux affichent un espacement proportionnel. Cependant, la +première ligne laisse apparaître un espacement plus lâche en raison de +la présence d'un changement de clef. En ce qui concerne la deuxième +ligne, l'espacement est strictement observé dès lors que la propriété +@code{strict-note-spacing} a préalablement été activée. Comme vous +pouvez le constater, l'activation de @code{strict-note-spacing} a pour +conséquence que l'algorithme d'espacement ignore tout bonnement la +largeur des métriques, armures, clefs et altérations. + +En plus ceux que nous venons de voir, vous trouverez d'autres réglages +en usage dans la notation proportionnelle comme, entre autres, + +@itemize +@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} +@item @code{tupletFullLength = ##t} +@item @code{\override Beam #'breakable = ##t} +@item @code{\override Glissando #'breakable = ##t} +@item @code{\override TextSpanner #'breakable = ##t} +@item @code{\remove Forbid_line_break_engraver (dans un contexte de voix} +@end itemize + +Ces différents réglages permettent un espacement strict des notes +d'ornement, d'étendre les indications de nolet afin d'indiquer de façon +évidente leurs bornes et d'autoriser le tronçonnement des extenseurs à +l'occasion d'un saut de ligne ou de page. Nous vous renvoyons aux +différentes rubriques associées du manuel pour chacun de ces réglages. + + +@seealso +Manuel de notation : +@ref{Changement d'espacement en cours de partition}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Réduction du nombre de pages de la partition +@section Réduction du nombre de pages de la partition +@translationof Fitting music onto fewer pages + +Vous pourriez un jour être confronté au problème suiven@tie{}: l'une +des pages de votre partition ne comporte que deux portées alors que -- +ce qui est d'autant plus frustrant -- l'espace libre sur les autres +pages aurait permis une distribution différente. + +L'instruction @code{annotate-spacing} se révèle être un outil +indispensable pour pour l'analyse des problèmes de mise en forme. Cette +commande met en surimpression la valeur des différentes variables +d'espacement et de mise en forme, comme nous allons le voir dans la +rubrique @ref{Mise en évidence de l'espacement}. + +@menu +* Mise en évidence de l'espacement:: +* Modification de l'espacement:: +@end menu + +@node Mise en évidence de l'espacement +@subsection Mise en évidence de l'espacement +@translationof Displaying spacing + +@funindex annotate-spacing +@cindex espacement, affichage des valeurs + +Le meilleur moyen d'appréhender les différentes variables de +dimensionnement vertical sur lesquelles vous pouvez jouer au niveau de +la mise en page, consiste à activer, au sein du bloc @code{\paper}, la +fonction @code{annotate-spacing}@tie{}: + +@c need to have \book{} otherwise we get the separate systems. -hwn +@lilypond[verbatim,quote] +#(set-default-paper-size "a6" 'landscape) +\book { + \score { { c4 } } + \paper { annotate-spacing = ##t } +} +@end lilypond + +@noindent +Toutes les dimensions sont exprimées en espace de portée +@emph{(staff-space)} quelle que soit l'unité mentionnée dans les blocs +@code{\paper} ou @code{\layout}. Dans cet exemple, la hauteur de la +feuille (@code{paper-height}) est de 59,75@tie{}espaces de portée +(@code{staff-spaces}) et la taille de portée (@code{staff-size}) de +20@tie{}points -- sa valeur par défaut. Notez que@tie{}: + +@multitable {1 staff-space} {staff-size)/4 * (25,4/72,27) mm} + +@item 1 point +@tab = (25,4/72,27) mm + +@item 1 staff-space +@tab = (@code{staff-size})/4 pts +@item +@tab = (@code{staff-size})/4 * (25,4/72,27) mm + +@end multitable + +@noindent +Dans le cas qui nous occupe, un @code{staff-space} égale environ +1,757@tie{}millimètres. Les 59,75@tie{}@code{staff-spaces} de +@code{paper-height} correspondent donc à 105@tie{}millimètres, soit la +hauteur d'une feuille au format A6 à l'italienne. Les paires +@code{(@var{a},@var{b})} sont des intervalles, @var{a} en étant +l'extrémité inférieure et @var{b} l'extrémité supérieure. + + +@seealso +Manuel de notation : +@ref{Définition de la taille de portée}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Modification de l'espacement +@subsection Modification de l'espacement +@translationof Changing spacing + +Les informations fournies par @code{annotate-spacing} en matière de +dimensionnement vertical sont incomparables. Pour plus de détails sur +les manières de modifier marges et autres variables connexes, consultez +la rubrique @ref{Mise en forme de la page}. + +En dehors des marges, vous disposez de quelques moyens supplémentaires +pour gagner de l'espace@tie{}: + +@itemize +@item +Rapprocher les systèmes le plus possible les uns des autres, de telle +sorte qu'il en tienne un maximum sur une même page, tout en les espaçant +suffisamment pour éviter le blanc en bas de page. + +@example +\paper @{ + system-system-spacing = #'((basic-distance . 0.1) (padding . 0)) + ragged-last-bottom = ##f + ragged-bottom = ##f +@} +@end example + +@item +Forcer le nombre de systèmes par page. Ceci peut se révéler judicieux à +deux titres. D'une part, le fait de définir un nombre de systèmes -- +même s'il est égal à la valeur par défaut -- peut aboutir à plus de +systèmes par page dans la mesure où l'une des étapes d'estimation des +hauteurs est tout simplement sautée. D'autre part, réduire le nombre de +systèmes par page permet d'en disposer plus sur les suivantes. Par +exemple, avec un nombre par défaut de 11@tie{}systèmes par pages, +l'instruction suivante le force à 10. + +@example +\paper @{ + system-count = #10 +@} +@end example + +@item +Éviter ou réduire les objets qui augmentent la hauteur des systèmes. +Par exemple, un crochet de reprise ou d'alternative consomme de +l'espace. Le fait de les reporter sur plusieurs systèmes regroupés +diminue d'autant l'espace disponible que si seul le premier ne +comportait l'indication. Autre exemple, les indications de nuance qui +se @qq{détachent} d'un système peuvent être rapprochés de la portée@tie{}: + +@lilypond[verbatim,quote,relative=1] +e4 c g\f c +e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c +@end lilypond + +@item +Modifier l'espacement horizontal à l'aide du @code{SpacingSpanner}, +comme indiqué à la rubrique +@ref{Modification de l'espacement horizontal}. Voici ce que donne +l'espacement par défaut@tie{}: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } +} +@end lilypond + +@noindent +Par contre, le fait de modifier la valeur de la propriété +@code{common-shortest-duration} en passant de @code{1/4} à @code{1/2} +-- bien que la noire soit la durée la plus courante, nous prenons une +valeur plus longue -- donnera un effet @qq{resserré} à la musique@tie{}: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'common-shortest-duration = #(ly:make-moment 1 2) + } + } +} +@end lilypond + +@noindent +La propriété @code{common-shortest-duration} ne peut être modifiée +dynamiquement. Elle se place toujours dans un bloc @code{\context} et +s'applique à l'intégralité de la partition. + +@end itemize + + +@seealso +Manuel de notation : +@ref{Mise en forme de la page}, +@ref{Modification de l'espacement horizontal}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + diff --git a/Documentation/fr/notation/specialist.itely b/Documentation/fr/notation/specialist.itely new file mode 100644 index 0000000000..864be49f6c --- /dev/null +++ b/Documentation/fr/notation/specialist.itely @@ -0,0 +1,41 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 Notation spécialisée +@chapter Notation spécialisée +@translationof Specialist notation + +Ce chapitre explique comment créer la notation musicale +spécifique à certains intruments ou certaines époques. + +@menu +* Musique vocale:: +* Instruments utilisant des portées multiples:: +* Cordes non frettées:: +* Instruments à cordes frettées:: +* Percussions:: +* Instruments à vent:: +* Notation des accords:: +* Notation contemporaine:: +* Notations anciennes:: +* Musiques du monde:: +@end menu + +@include notation/vocal.itely +@include notation/keyboards.itely +@include notation/unfretted-strings.itely +@include notation/fretted-strings.itely +@include notation/percussion.itely +@include notation/wind.itely +@include notation/chords.itely +@include notation/contemporary.itely +@include notation/ancient.itely +@include notation/world.itely diff --git a/Documentation/fr/notation/staff.itely b/Documentation/fr/notation/staff.itely new file mode 100644 index 0000000000..56f381440d --- /dev/null +++ b/Documentation/fr/notation/staff.itely @@ -0,0 +1,1431 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 1dac524e3d3c5a6ee2aef6d11d4b18e014a53e4f + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: John Mandereau + +@node Notation sur la portée +@section Notation sur la portée +@translationof Staff notation + +@lilypondfile[quote]{staff-headword.ly} + +Cette section aborde les détails de gravure de la portée, la +réalisation de partitions comprenant plusieurs portées et l'ajout +d'indications globales d'exécution, présentes sur certaines portées +seulement. + +@menu +* Gravure des portées:: +* Modification de portées individuelles:: +* Écriture de parties séparées:: +@end menu + + +@node Gravure des portées +@subsection Gravure des portées +@translationof Displaying staves + +Nous allons voir ici comment créer des portées et comment les regrouper. + +@menu +* Initialisation de nouvelles portées:: +* Regroupement de portées:: +* Imbrication de regroupements de portées:: +* Séparation des systèmes:: +@end menu + + +@node Initialisation de nouvelles portées +@unnumberedsubsubsec Initialisation de nouvelles portées +@translationof Instantiating new staves + +@cindex nouvelle portée +@cindex portée, initialisation +@cindex portée, instanciation +@cindex portée, nouvelle +@cindex portée simple +@cindex portée de batterie +@cindex portée de percussion +@cindex batterie, portée +@cindex percussion, portée +@cindex portée, transcription de grégorien +@cindex portée rhytmique +@cindex portée de tablature +@cindex tablature + +@funindex \drummode +@funindex drummode +@funindex DrumStaff +@funindex RhythmicStaff +@funindex TabStaff +@funindex MensuralStaff +@funindex VaticanaStaff +@funindex GregorianTranscriptionStaff + +Les @notation{portées} -- en anglais @emph{staff} (@emph{staves} +au pluriel) -- sont créées à l'aide des commandes @code{\new} ou +@code{\context}. Pour de plus amples détails, consultez +@ref{Création d'un contexte}. + +Le contexte de portée standard s'appelle @code{Staff}@tie{}: + +@lilypond[verbatim,quote,relative=2] +\new Staff { c4 d e f } +@end lilypond + +Le contexte @code{DrumStaff} crée une portée à cinq lignes correspondant +à une batterie traditionnelle et chacun des instruments est représenté +par un symbole spécifique. Les éléments sont saisis en mode batterie, +initialisé par la commande @code{\drummode}, chaque composante étant +spécifiée par son nom. Pour de plus amples détails, consultez +@ref{Portées de percussion}. + +@lilypond[verbatim,quote] +\new DrumStaff { + \drummode { cymc hh ss tomh } +} +@end lilypond + +Un @code{RhythmicStaff} est composé d'une portée à ligne unique chargée +de présenter les valeurs rythmiques saisies. Seules sont imprimées les +durées. Pour de plus amples détails, consultez +@ref{Gravure de lignes rythmiques}. + +@lilypond[verbatim,quote,relative=2] +\new RhythmicStaff { c4 d e f } +@end lilypond + +Un @code{TabStaff} crée une portée de tablature correpondant aux six +cordes d'une guitare standard. Pour de plus amples détails, consultez +@ref{Tablatures par défaut}. + +@lilypond[verbatim,quote,relative=2] +\new TabStaff { c4 d e f } +@end lilypond + +Lilypond dispose aussi de deux contextes dédiés à la musique +ancienne@tie{}: @code{MensuralStaff} et @code{VaticanaStaff}. Ils sont +abordés plus en détails au chapitre @ref{Contextes prédéfinis}. + +Le contexte @code{GregorianTranscriptionStaff} permet d'obtenir des +éditions modernes du grégorien. Bien entendu, il est dépourvu de barres +de mesure. + +@lilypond[verbatim,quote,relative=2] +\new GregorianTranscriptionStaff { c4 d e f e d } +@end lilypond + +Vous pourrez toujours définir d'autres contextes de portée selon vos +besoins, en suivant les indications fournies au chapitre +@ref{Définition de nouveaux contextes}. + + +@seealso +Glossaire musicologique : +@rglos{staff}, +@rglosnamed{staves,portées}. + +Manuel de notation : +@ref{Création d'un contexte}, +@ref{Portées de percussion}, +@ref{Gravure de lignes rythmiques}, +@ref{Tablatures par défaut}, +@ref{Contextes prédéfinis}, +@ref{Symbole de la portée}, +@ref{Contextes du chant grégorien}, +@ref{Les contextes de la musique mensurale}, +@ref{Définition de nouveaux contextes}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{Staff}, +@rinternals{DrumStaff}, +@rinternals{GregorianTranscriptionStaff}, +@rinternals{RhythmicStaff}, +@rinternals{TabStaff}, +@rinternals{MensuralStaff}, +@rinternals{VaticanaStaff}, +@rinternals{StaffSymbol}. + + +@node Regroupement de portées +@unnumberedsubsubsec Regroupement de portées +@translationof Grouping staves + +@cindex système, début de +@cindex crochet vertical +@cindex accolade verticale +@cindex portée multiple +@cindex portées, groupe de +@cindex portées, regroupement +@cindex chœur, système +@cindex piano, système +@cindex système choral +@cindex système pianistique +@cindex système, grand +@cindex système + +LilyPond dispose de différents contextes permettant de regrouper des +portées individuelles et d'obtenir ainsi des @qq{systèmes}. Chacun de +ces contextes définira le style de regoupement, avec son signe +particulier en début de portée et ses règles de gestion des barres de +mesure. + +Lorsqu'aucun contexte particulier n'est spécifié, les propriétés +suivantes s'appliqueront par défaut@tie{}: les portées du groupe ne sont +pas reliées, hormis par une simple ligne verticale en début de ligne, et +les barres de mesure sont indépendantes. + +@lilypond[verbatim,quote,relative=2] +<< + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Dans un @code{StaffGroup}, le groupe de portées est signifié par un +crochet, et les barres de mesure sont d'un seul tenant. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Dans un @code{ChoirStaff}, le groupe de portées est signifié par un +crochet sur la gauche, et les barres de mesure sont individuelles. + +@lilypond[verbatim,quote,relative=2] +\new ChoirStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Dans un @code{GrandStaff}, le groupe de portées est signifié par une +accolade sur la gauche, et les barres de mesure sont d'un seul tenant. + +@lilypond[verbatim,quote,relative=2] +\new GrandStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Le contexte @code{PianoStaff} est indentique au @code{GrandStaff}, sauf +qu'il gère automatiquement l'affichage du nom d'instrument -- voir +@ref{Noms d'instrument} pour plus de détails. + +@lilypond[verbatim,quote,relative=2] +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Les barres de mesure au début de chaque système adoptent l'un des styles +@code{SystemStartBar}, @code{SystemStartBrace} ou +@code{SystemStartBracket}. Dans chaque contexte, seul l'un de ces +styles est utilisé, et c'est la propriété @code{systemStartDelimiter} +qui détermine lequel. Un quatrième style, @code{SystemStartSquare}, +doit quant à lui être spécifié de manière explicite. + +Vous pouvez aussi créer vos propres contextes de regroupement, comme +l'explique @ref{Définition de nouveaux contextes}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{use-square-bracket-at-the-start-of-a-staff-group.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{display-bracket-with-only-one-staff-in-a-system.ly} + +@cindex présentation mensurale +@cindex renaissance, musique +@cindex transcription de musique ancienne +@cindex musique ancienne, transcription + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{brace,accolade}, +@rglosnamed{bracket,crochet}, +@rglosnamed{grand staff,système}. + +Manuel de notation : +@ref{Noms d'instrument}, +@ref{Définition de nouveaux contextes}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{Staff}, +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + +@knownissues +Un @code{PianoStaff} ne peut contenir, par défaut, de @code{ChordNames}. + + +@node Imbrication de regroupements de portées +@unnumberedsubsubsec Imbrication de regroupements de portées +@translationof Nested staff groups + +@cindex portées, regroupement et imbrication +@cindex systèmes imbriqués +@cindex imbrication de systèmes +@cindex délimitation, systèmes imbriqués + +Les accolades et crochets qui délimitent les systèmes peuvent être +imbriqués en profondeur. Chaque niveau inférieur aura son propre +délimiteur, en plus de celui du niveau supérieur. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c2 c | c2 c } + \new StaffGroup << + \new Staff { g2 g | g2 g } + \new StaffGroup \with { + systemStartDelimiter = #'SystemStartSquare + } + << + \new Staff { e2 e | e2 e } + \new Staff { c2 c | c2 c } + >> + >> +>> +@end lilypond + +Vous pouvez aussi créer vos propres contextes d'imbrication, comme +l'explique @ref{Définition de nouveaux contextes}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{nesting-staves.ly} + + +@seealso +Manuel de notation : +@ref{Regroupement de portées}, +@ref{Noms d'instrument}, +@ref{Définition de nouveaux contextes}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + + +@node Séparation des systèmes +@unnumberedsubsubsec Séparation des systèmes +@translationof Separating systems + +@cindex système, indicateur de séparation + +Le nombre de systèmes peut varier d'une page à l'autre@tie{}; vous +povez, en pareil cas, rendre plus évidente la séparation entre les +systèmes en l'indiquant visuellement. Ce @qq{séparateur} est absent par +défaut, mais vous pouvez l'activer par une option au sein du bloc +@code{\paper}. + +@c \book is required here to display the system separator +@c ragged-right is required as there are two systems +@lilypond[verbatim,quote,ragged-right] +\book { + \score { + \new StaffGroup << + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + >> + } + \paper { + system-separator-markup = \slashSeparator + % following commands are needed only to format this documentation + paper-width = 100\mm + paper-height = 100\mm + tagline = ##f + } +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Mise en forme de la page}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + + +@node Modification de portées individuelles +@subsection Modification de portées individuelles +@translationof Modifying single staves + +Cette section explique le réglage de la gravure de chaque portée, +comme la taille de portée ou le nombre de lignes@tie{}; sont aussi +décrits la suspension et la reprise de portées, ainsi que les portées +d'@emph{ossia}. + + +@menu +* Symbole de la portée:: +* Portées d'ossia:: +* Masquage de portées:: +@end menu + + +@node Symbole de la portée +@unnumberedsubsubsec Symbole de la portée +@translationof Staff symbol + +@cindex symbole de portée +@cindex portée, lignes de +@cindex lignes de portée, nombre de +@cindex suspension de portée +@cindex portée, suspension +@cindex reprise de portée +@cindex portée, reprise +@cindex lignes de portée, épaisseur +@cindex ligne supplémentaire + + +Les notes, nuances, etc. sont regroupées dans un assemblage de lignes +horizontales, que l'on nomme la portée (en anglais @emph{staff}, et +@emph{staves} au pluriel). Dans LilyPond, ces lignes sont dessinées au +moyen d'un objet graphique (@emph{grob}) à part entière, nommé +@code{StaffSymbol} -- symbole de portée. Modifier les propriétés d'un +@code{StaffSymbol} changera l'apparence de la portée, dès lors qu'elles +auront été définies avant de créer la portée en question. + +Vous pouvez modifier le nombre de lignes d'une portée. Néanmoins, la +position de la clef et celle du do médium demanderont parfois un +ajustement afin d'être en phase avec cette nouvelle portée. Pour plus +d'explications, reportez-vous aux exemples du chapitre @ref{Clefs}. + +@lilypond[verbatim,quote,relative=2] +\new Staff \with { + \override StaffSymbol #'line-count = #3 +} +{ d4 d d d } +@end lilypond + +Lorsque vous modifierez l'épaisseur des lignes, gardez à l'esprit que +les lignes supplémentaires et les hampes seront aussi modifiées. En +effet, elles dépendent directement de l'épaisseur des lignes de la +portée. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'thickness = #3 +} +{ e4 d c b } +@end lilypond + +L'épaisseur des lignes supplémentaires (@emph{ledger lines}) peut être +déterminée indépendamment des lignes de la portée. Dans l'exemple +suivant, les deux nombres constituent des coefficients multiplicateurs +de l'épaisseur de la ligne. Ils sont fournis en argument pour +déterminer l'épaisseur des lignes supplémentaires. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) +} +{ e4 d c b } +@end lilypond + +Modifier l'équidistance des lignes de la portée affectera aussi les +lignes supplémentaires. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'staff-space = #1.5 +} +{ a4 b c d } +@end lilypond + +Vous trouverez de plus amples détails sur les propriétés du +@code{StaffSymbol} au chapitre @rinternals{staff-symbol-interface}. + +@cindex fin de portée +@cindex début de portée +@cindex portée, début +@cindex portée, fin + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +Les propriétés d'une portée peuvent être modifiées en cours de partition +à l'aide des commandes @code{\stopStaff} et @code{\startStaff}@tie{}: + +@lilypond[verbatim,quote,relative=2] +c2 c +\stopStaff +\override Staff.StaffSymbol #'line-count = #2 +\startStaff +b2 b +\stopStaff +\revert Staff.StaffSymbol #'line-count +\startStaff +a2 a +@end lilypond + +@noindent +En règle générale, @code{\startStaff} et @code{\stopStaff} permettent +d'entamer puis clôturer une portée n'importe où dans une partition. + +@lilypond[verbatim,quote,relative=2] +c4 b a2 +\stopStaff +b4 c d2 +\startStaff +e4 d c2 +@end lilypond + + +@predefined +@code{\startStaff}, +@code{\stopStaff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-some-staff-lines-thicker-than-the-others.ly} + + +@seealso +Glossaire musicologique : +@rglosnamed{line,ligne}, +@rglosnamed{ledger line,ligne suplémentaire}, +@rglosnamed{staff,portée}. + +Manuel de notation : +@ref{Clefs}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{StaffSymbol}, +@rinternals{staff-symbol-interface}. + + +@node Portées d'ossia +@unnumberedsubsubsec Portées d'ossia +@translationof Ossia staves + +@cindex portée à la française +@cindex ossia +@cindex variante +@cindex portées, nombre variable de +@cindex nombre de portées + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +Une portée d'@notation{ossia} -- ou de variante -- s'obtient en créant, +à l'endroit approprié, une nouvelle portée simultanée@tie{}: + +@lilypond[verbatim,quote] +\new Staff \relative c'' { + c4 b d c + << + { c4 b d c } + \new Staff { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +@noindent +L'exemple ci-dessus n'est probablement pas ce qui vous conviendra le +plus. Afin que cette ossia se place au-dessus de la portée à laquelle +elle se réfère, étant par ailleurs dépourvue de métrique et de clef, et +d'une taille légèrement inférieure, vous devrez avoir recours à quelques +retouches. Le manuel d'initiation aborde une technique particulière +pour obternir ce résultat au chapitre +@rlearning{Expressions musicales imbriquées}. + +L'exemple qui suit utilise, pour aligner la portée d'ossia, la propriété +@code{alignAboveContext}. Cette méthode est tout à fait appropriée +lorsqu'il y a un nombre restreint d'ossias. + +@lilypond[verbatim,quote] +\new Staff = main \relative c'' { + c4 b d c + << + { c4 b d c } + + \new Staff \with { + \remove "Time_signature_engraver" + alignAboveContext = #"main" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + firstClef = ##f + } + { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +Dans le cas où de nombreux et courts fragments d'ossia affecteraient +une même portée, il est judicieux de créer un contexte @code{Staff} vide +auquel sera attribué un @emph{identificateur}. Il suffira alors, pour +entamer un fragment d'ossia, de @emph{faire appel} à ce contexte grâce +aux commandes @code{\startStaff} et @code{\stopStaff}. Vous vous +rendrez compte à l'utilisation des avantages que procure cette façon de +procéder, bien plus que dans l'exemple suivant. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + { \stopStaff s1*6 } + + \new Staff \relative c' { + c4 b c2 + << + { e4 f e2 } + \context Staff = ossia { + \startStaff e4 g8 f e2 \stopStaff + } + >> + g4 a g2 \break + c4 b c2 + << + { g4 a g2 } + \context Staff = ossia { + \startStaff g4 e8 f g2 \stopStaff + } + >> + e4 d c2 + } +>> +@end lilypond + + +Vous pourriez aussi recourir à la commande +@code{\Staff \RemoveEmptyStaves} pour créer votre portée d'ossia. +Cependant, cette méthode reste limitée à l'apparition de ces ossias en +début de ligne. Pour plus d'information au sujet de la commande +@code{\Staff \RemoveEmptyStaves}, reportez-vous au chapitre +@ref{Masquage de portées}. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } \relative c'' { + R1*3 + c4 e8 d c2 + } + \new Staff \relative c' { + c4 b c2 + e4 f e2 + g4 a g2 \break + c4 b c2 + g4 a g2 + e4 d c2 + } +>> + +\layout { + \context { + \Staff \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligning-ossias-and-lyrics.ly} + + +@seealso +Glossaire musicologique : +@rglos{ossia}, +@rglosnamed{staff,portée}, +@rglos{Frenched staff}. + +Manuel d'initiation : +@rlearning{Expressions musicales imbriquées}, +@rlearning{Taille des objets}, +@rlearning{Longueur et épaisseur des objets}. + +Manuel de notation : +@ref{Masquage de portées}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{StaffSymbol}. + + +@node Masquage de portées +@unnumberedsubsubsec Masquage de portées +@translationof Hiding staves + +@cindex Frenched scores +@cindex Masquage de portée +@cindex portée vide + +@funindex \RemoveEmptyStaves +@funindex Staff_symbol_engraver +@funindex \stopStaff +@funindex stopStaff + + +Désactiver le graveur @code{Staff_symbol_engraver} dans un contexte +@code{Staff} permet de masquer des lignes. La commande +@code{\stopStaff} aura le même effet. + +@lilypond[verbatim,quote] +\new Staff \with { + \remove "Staff_symbol_engraver" +} +\relative c''' { a8 f e16 d c b a2 } +@end lilypond + +L'instruction @code{\Staff \RemoveEmptyStaves} placée dans un bloc +@code{\layout} aura pour effet de masquer toute portée qui ne contient +rien. Dans les partitions d'orchestre, les portées qui n'ont que des +silences sont habituellement masquées afin de gagner de la place. Ce +style d'édition s'appelle en anglais @qq{French Score}. +Cette fonctionnalité masque et supprime toutes les portées vides d'une +partition, hormis celles du premier système. + +@warning{Une portée est considérée comme vide dès lors qu'elle ne +contient que des silences multimesures, des silences visibles ou +invisibles (ou d'espacement -- les @emph{\skip}) ou bien une combinaison +de ces éléments.} + +@lilypond[verbatim,quote,ragged-right] +\layout { + \context { + \Staff \RemoveEmptyStaves + } +} + +\relative c' << + \new Staff { + e4 f g a \break + b1 \break + a4 b c2 + } + \new Staff { + c,4 d e f \break + R1 \break + f4 g c,2 + } +>> +@end lilypond + +@cindex ossia + +@noindent +@code{\Staff \RemoveEmptyStaves} permet aussi de gérer des fragments +d'ossia attachés à une portée. Pour plus de détails, voir +@ref{Portées d'ossia}. + +@cindex musique ancienne, masquage de portée +@cindex portées rythmiques, masquage + +@funindex \RemoveEmptyStaves + +La commande @code{\VaticanaStaff \RemoveEmptyStaves} permet de masquer des +portées vides dans les contextes de musique ancienne. Pour des +contextes @code{RhythmicStaff}, il faudra utiliser +@code{\RhythmicStaff \RemoveEmptyStaves}. + + +@predefined +@code{\Staff \RemoveEmptyStaves}, +@code{\VaticanaStaff \RemoveEmptyStaves}, +@code{\RhythmicStaff \RemoveEmptyStaves}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{removing-the-first-empty-line.ly} + + +@seealso +Glossaire musicologique : +@rglos{Frenched staff}. + +Manuel d'initiation: +@rlearning{Visibilité et couleur des objets}. + +Manuel de notation : +@ref{Symbole de la portée}, +@ref{Portées d'ossia}, +@ref{Dictée à trous}, +@ref{Silences invisibles}, +@ref{Visibilité des objets}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{ChordNames}, +@rinternals{FiguredBass}, +@rinternals{Lyrics}, +@rinternals{Staff}, +@rinternals{VerticalAxisGroup}, +@rinternals{Staff_symbol_engraver}. + + +@knownissues + +Supprimer le @code{Staff_symbol_engraver} aura pour effet de masquer les +barres de mesure. Forcer leur visibilité peut entraîner des problèmes +de formattage. En pareil cas il vaut mieux, au lieu de supprimer le +graveur, recourrir aux dérogations suivantes@tie{}: + +@example +\override StaffSymbol #'stencil = ##f +\override NoteHead #'no-ledgers = ##t +@end example + +En ce qui concerne les désagréments et messages liés à l'utilisation de +l'instruction @code{\Staff \RemoveEmptyStaves}, consultez +@ref{Modification des réglages par défaut d'un contexte}. + + +@node Écriture de parties séparées +@subsection Écriture de parties séparées +@translationof Writing parts + +Nous allons voir au fil des lignes qui suivent, comment insérer des +indications de tempo ou des noms d'instrument dans une partition. Nous +aborderons aussi la citation d'autres voix, et comment la mettre en +forme. + +@menu +* Noms d'instrument:: +* Citation d'autres voix:: +* Mise en forme d'une citation:: +@end menu + + +@node Noms d'instrument +@unnumberedsubsubsec Noms d'instrument +@translationof Instrument names + +@cindex instrument, noms +@cindex nom d'instrument +@cindex instrument, noms abrégés + +Dans un conducteur, les noms d'instrument sont portés en regard de +chacune des portées, qu'il s'agisse d'un contexte @code{Staff}, +@code{PianoStaff}, @code{StaffGroup}, @code{GrandStaff} ou +@code{ChoirStaff} . La première ligne affichera la valeur de +@code{instrumentName}, et les suivantes celle de +@code{shortInstrumentName}. + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"Violin " +\set Staff.shortInstrumentName = #"Vln " +c4.. g'16 c4.. g'16 +\break +c1 +@end lilypond + +Le recours à la commande @code{\markup} permet de construire des noms +d'instruments particuliers, tels que + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = \markup { + \column { "Clarinetti" + \line { "in B" \smaller \flat } } } +c4 c,16 d e f g2 +@end lilypond + +@cindex noms d'instrument, centrés + +Lorsque plusieurs contextes de portée sont regroupés, les noms +d'instrument, que ce soit sous leur forme développée ou abrégée, sont +par défaut centrés. Si l'un d'entre eux est libellé sur plusieurs +lignes, il faudra recourrir à l'instruction @code{\center-column}@tie{}: + +@lilypond[verbatim,quote,indent=1.5\cm,relative=2] +<< + \new Staff { + \set Staff.instrumentName = #"Flute" + f2 g4 f + } + \new Staff { + \set Staff.instrumentName = \markup \center-column { + Clarinet + \line { "in B" \smaller \flat } + } + c4 b c2 + } +>> +@end lilypond + +@funindex indent +@funindex short-indent + +Lorsque le nom d'un instrument est relativement long, il est judicieux +d'augmenter les retraits -- @emph{indent} -- au sein du bloc +@code{\layout} à l'aide des commandes @code{indent} et +@code{short-indent}. Pour plus de plus amples détails sur ces réglages, +reportez-vous au chapitre @ref{Variables d'indentation et de décalage}. + +@lilypond[verbatim,quote,ragged-right] +\layout { + indent = 3.0\cm + short-indent = 1.5\cm +} + +\relative c'' << + \new Staff { + \set Staff.instrumentName = #"Alto Flute in G" + \set Staff.shortInstrumentName = #"Fl." + f2 g4 f \break + g4 f g2 + } + \new Staff { + \set Staff.instrumentName = #"Clarinet" + \set Staff.shortInstrumentName = #"Clar." + c,4 b c2 \break + c2 b4 c + } +>> +@end lilypond + +@cindex noms d'instrument, autres contextes + +Des noms d'instruments peuvent s'utiliser dans d'autres contextes, tels +que @code{ChordNames} ou @code{FiguredBass}, dès lors qu'on leur adjoint +le graveur @code{Instrument_name_engraver}. Pour de plus amples +informations sur la manière d'activer ou désactiver un graveur, voir +@ref{Modification des greffons de contexte}. + +@cindex instrument, changement de nom +@cindex changement de nom d'instrument + +Vous pouvez changer le nom d'un instrument en cours de morceau. Notez +cependant que la valeur de @code{instrumentName} ne s'affichera que sur +la première portée@tie{}: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"First" +\set Staff.shortInstrumentName = #"one" +c1 c c c \break +c1 c c c \break +\set Staff.instrumentName = #"Second" +\set Staff.shortInstrumentName = #"two" +c1 c c c \break +c1 c c c \break +@end lilypond + +@cindex instrument, changement +@cindex changement d'instrument + +@funindex \addInstrumentDefinition +@funindex addInstrumentDefinition +@funindex \instrumentSwitch +@funindex instrumentSwitch + +Lorsqu'un musicien doît changer d'instrument -- piccolo et flûte, basson +et contrebasson --, la commande @code{\addInstrumentDefinition}, +couplée à l'instruction @code{\instrumentSwitch} permet de spécifier en +détail les modifications intervenant lors du changement. La commande +@code{\addInstrumentDefinition} prend deux arguments@tie{}: une chaîne +de caractères qui servira d'identificateur, et une liste d'associations +de valeurs aux propriétés de ce nouvel instrument. Ces définitions +devront être déclarées avant tout autre élément musical. L'instruction +@code{\instrumentSwitch} se placera dans la musique au moment de la +subtitution@tie{}: + +@lilypond[verbatim,quote,ragged-right] +\addInstrumentDefinition #"contrabassoon" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Cbsn.") + (clefGlyph . "clefs.F") + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(make-bold-markup "cbsn.")) + (midiInstrument . "bassoon")) + +\new Staff \with { + instrumentName = #"Bassoon" +} +\relative c' { + \clef tenor + \compressFullBarRests + c2 g' + R1*16 + \instrumentSwitch "contrabassoon" + c,,2 g \break + c,1 ~ | c1 +} +@end lilypond + + +@seealso +Manuel de notation : +@ref{Variables d'indentation et de décalage}, +@ref{Modification des greffons de contexte}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{InstrumentName}, +@rinternals{PianoStaff}, +@rinternals{Staff}. + + +@node Citation d'autres voix +@unnumberedsubsubsec Citation d'autres voix +@translationof Quoting other voices + +@cindex répliques +@cindex citation +@cindex petites notes + +@funindex \addQuote +@funindex addQuote +@funindex \quoteDuring +@funindex quoteDuring +@funindex \transposition +@funindex transposition + +Il est assez courant qu'une voix soit doublée par une autre. Par +exemple, les premiers et seconds violons peuvent jouer les mêmes notes +durant un moment. LilyPond gère parfaitement ces situations où une +voix est la réplique d'une autre, et vous évite de ressaisir la musique +en question. + +Avant qu'une partie ne puisse être mentionnée ailleurs, elle doit être +considérée comme reproductible. C'est le but de l'instruction +@code{\addQuote} qui prend en argument une chaîne d'identification et +une expression musicale. Elle se place au niveau le plus haut, c'est à +dire en dehors de tout bloc de musique@tie{}: + +@example +flute = \relative c'' @{ + a4 gis g gis +@} +\addQuote "flute" @{ \flute @} +@end example + +Au cours d'une partie, des extraits de répliques peuvent être cités en +utilisant la commande @code{\quoteDuring}. Cette commande prend deux +arguments@tie{}: le nom de la voix reproduite, tel que défini par +@code{\addQuote}, et une expression musicale qui indique la durée de +cette citation -- silences invisibles ou multimesures. Viendra alors +s'insérer dans l'expression musicale le fragment correspondant de la +voix originelle, avec tous ses attributs (articulations, nuances, +annotations, etc.). + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g->\f gis^\markup{quoted} +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { s2 } +} +@end lilypond + +Si l'expression musicale utilisée pour @code{\quoteDuring} contenait +autre chose que du silence, il en résulterait une situation +polyphonique, ce qui n'est pas le but recherché@tie{}: + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g gis +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { c4 b } +} +@end lilypond + +Les citations tiennent compte des transpositions, aussi bien celle de +l'instrument d'origine que celle de la partie où elle intervient, dans +la mesure où elles sont spécifiées par la commande +@code{\transposition}. Voir @ref{Instruments transpositeurs} pour plus +de détails. + +@lilypond[verbatim,quote] +clarinet = \relative c'' { + \transposition bes + a4 gis g gis +} +\addQuote "clarinet" { \clarinet } + +\relative c' { + c4 cis \quoteDuring #"clarinet" { s2 } +} +@end lilypond + +Les citations peuvent être @qq{balisées} par un nom particulier afin de +les utiliser de différentes manières. Pour de plus amples détails à ce +propos, consultez le chapitre @ref{Utilisation de balises}. + +La propriété @code{quotedEventTypes} permet de définir précisément quels +éléments de la voix originelle seront reproduits. Sa valeur par défaut +est @code{#'(StreamEvent)}@tie{}; autrement dit, tout sera recopié. Lui +affecter la valeur @code{#'(note-event@tie{}rest-event@tie{}tie-event)} +fera que LilyPond reproduira les notes, silences et liaisons de +prolongation, mais pas les articulations, annotations ni nuances. + +@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 } +} +@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 + +@funindex quotedEventTypes +@funindex quotedCueEventTypes + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{quoting-another-voice.ly} + + +@seealso +Manuel de notation : +@ref{Instruments transpositeurs}, +@ref{Utilisation de balises}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{QuoteMusic}, +@rinternals{Voice}. + + +@knownissues + +Seul le contenu de la première @code{Voice} rencontrée dans la +partie marquée d'une commande @code{\addQuote} pourra être retenu. Par +voie de conséquence, @code{@var{musique}} ne saurait comprendre de +@code{\new} ou une instance @code{\context@tie{}Voice} qui la ferait +passer à une autre voix. + +Citer des notes d'ornement ne fonctionne pas, et peut même entraîner +un blocage de LilyPond. + +Citer des triolets imbriqués peut entraîner un résultat de piètre +qualité. + +Dans les versions précédentes de LilyPond (avant 2.11), @code{addQuote} +était écrit entièrement en minuscules@tie{}: @code{\addquote}. + + +@node Mise en forme d'une citation +@unnumberedsubsubsec Mise en forme d'une citation +@translationof Formatting cue notes + +@cindex petites notes, formater des +@cindex répliques, formatage + +@funindex \cueDuring +@funindex cueDuring +@funindex \quoteDuring +@funindex quoteDuring + +La section précédente indiquait comment insérer des notes d'une autre +voix. Nous allons maintenant voir une fonction musicale avancée, +@code{\cueDuring}, qui facilite le formatage des petites notes. + +Sa syntaxe est@tie{}: + +@example +\cueDuring #@var{origine} #@var{voix} @var{musique} +@end example + +Des mesures issues de la partie d'@code{@var{origine}} seront recopiées +dans un contexte de @code{CueVoice}, créé implicitement, et +synchronisées avec @code{@var{musique}} -- habituellement un silence. +L'apparition des petites notes initialise une polyphonie temporaire pour +la portée concernée. L'argument @code{@var{voix}} détermine si ces +petites notes seront attachées à la première ou à la seconde voix -- +@code{UP} pour la première ou @code{DOWN} pour la seconde. + + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16 f e g f a + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +@noindent +Dans cet exemple, il était nécessaire de déclarer explicitement le +contexte @code{Voice}, sinon l'intégralité de l'expression musicale se +serait retrouvée dans le contexte @code{CueVoice}. + +La propriété @code{quotedCueEventTypes} permet de définir précisément +quels éléments de la voix originelle seront reproduits. Sa valeur par +défaut est @w{@code{#'(note-event rest-event tie-event beam-event +tuplet-span-event)}}. LilyPond reproduira donc les notes, silences, +liaisons de prolongation, ligatures et nolets, mais pas les +articulations, annotations ni nuances. + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event + beam-event tuplet-span-event + dynamic-event slur-event) + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +Le nom de l'instrument qui est répliqué sera imprimé à l'aide d'une +annotation (un @emph{markup}). Par ailleurs, si la citation nécessite +l'apparition d'une clef différente, l'originale devrait être rappelée en +fin de citation. + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \relative c { + \clef bass + R1 + \clef treble + s1*0^\markup { \tiny "flute" } + \cueDuring #"flute" #UP { R1 } + \clef bass + g4. b8 d2 +} +\addQuote "flute" { \flute } +\new Staff { + \bassoon +} +@end lilypond + +@cindex citation, fin +@cindex fin de citation +@cindex réplique, fin +@cindex fin de réplique + +@funindex \killCues +@funindex killCues + +La commande @code{killCues} permet de supprimer les notes d'une +citation. Ceci est utile lorsque cette citation n'est pas imprimée dans +le conducteur entre autres. @code{killCues} supprimera les notes et +autres événements pris en charge par @code{\cueDuring}. Pour les +autres annotations telles que changement de clef ou instrument concerné, +faites appel à des balises -- voir @ref{Utilisation de balises} à ce +sujet. + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \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" { \flute } + +\new Staff { + \bassoon +} +\new StaffGroup << + \new Staff { + \flute + } + \new Staff { + \removeWithTag #'part { \killCues { \bassoon } } + } +>> +@end lilypond + +Lorsque la citation comporte une étiquette indiquant l'instrument qui +joue et un changement de clef, ces éléments peuvent se regrouper à +l'aide de la commande @code{\addInstrumentDefinition}. Pour plus +d'information, reportez-vous au chapitre @ref{Noms d'instrument}. + + +@funindex \transposedCueDuring +@funindex transposedCueDuring + +L'instruction @code{\transposedCueDuring} est particulièrement adaptée +pour des instrument ayant une tessiture éloignée, comme dans le cas d'un +piccolo cité dans une partie de clarinette basse. Sa syntaxe est +identique à celle de @code{\cueDuring}, à ceci près qu'elle nécessite un +argument supplémentaire afin de spécifier la transposition à effectuer. +Pour de plus amples informations sur la transposition, reportez-vous au +chapitre @ref{Instruments transpositeurs}. + +@lilypond[verbatim,quote] +piccolo = \relative c''' { + \clef "treble^8" + R1 + c8 c c e g2 + c4 g g2 +} +bassClarinet = \relative c' { + \key d \major + \transposition bes, + d4 r a r + \transposedCueDuring #"piccolo" #UP d { R1 } + d4 r a r +} + +\addQuote "piccolo" { \piccolo } + +<< + \new Staff \piccolo + \new Staff \bassClarinet +>> +@end lilypond + +@cindex notes, petites +@cindex petites notes + +Un contexte @code{CueVoice} créé explicitement permet d'afficher des +notes dans une taille plus petite dans le but, par exemple, d'indiquer +des notes alternatives pour une voix un peu plus haute ou basse. + +@lilypond[verbatim,quote,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 + + +@seealso +Manuel de notation : +@ref{Instruments transpositeurs}, +@ref{Noms d'instrument}, +@ref{Musical cues}, +@ref{Utilisation de balises}. + +Morceaux choisis : +@rlsrnamed{Staff notation,Notation sur la portée}. + +Référence des propriétés internes : +@rinternals{CueVoice}, +@rinternals{Voice}. + + +@knownissues + +La commande @code{\cueDuring} ne sait pas gérer les collisions de +silence entre les contextes @code{Voice} et @code{CueVoice}. + diff --git a/Documentation/fr/notation/text.itely b/Documentation/fr/notation/text.itely new file mode 100644 index 0000000000..7d487ab2ab --- /dev/null +++ b/Documentation/fr/notation/text.itely @@ -0,0 +1,1626 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Jean-Charles Malahieude +@c Translation checkers: Valentin Villenave, John Mandereau + +@node Texte +@section Texte +@translationof Text + +@lilypondfile[quote]{text-headword.ly} + +Nous allons voir ici comment insérer du texte dans une partition, ainsi +que différentes manières de le mettre en forme. + +@noindent +Certains éléments de texte ne sont pas abordés ici mais dans des +chapitres qui leur sont dédiés. C'est le cas de la +@ref{Musique vocale} et des @ref{Titres et entêtes}. + +@menu +* Ajout de texte:: +* Mise en forme du texte:: +* Fontes:: +@end menu + +@node Ajout de texte +@subsection Ajout de texte +@translationof Writing text + +Cette partie constitue une introduction aux différentes manières +d'ajouter du texte à une partition. + +@cindex Texte, autres langues +@warning{Pour écrire des accents et autres caractères spéciaux, il +suffit de les insérer directement dans votre fichier LilyPond. Ce +fichier devra être sauvegardé avec l'encodage UTF-8. Pour plus +d'informations, voir @ref{Codage du texte}.} + +@menu +* Commentaires textuels:: +* Indication textuelle avec extension:: +* Indications textuelles:: +* Texte indépendant:: +@end menu + +@node Commentaires textuels +@unnumberedsubsubsec Commentaires textuels +@translationof Text scripts + +@cindex Étiquette de texte +@cindex blocs de texte +@cindex ajout de texte + +Vous pouvez ajouter à une partition des indications sous forme texuelle, +comme dans l'exemple suivant. Ces indications se placeront manuellement +au-dessus ou au-dessous de la portée selon la syntaxe utilisée -- cf. +@ref{Direction et positionnement}. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e a4-"scherz." f +@end lilypond + +Cette syntaxe est en fait un raccourci. Des constructions plus +élaborées d'annotation peuvent être obtenues en ayant recours à un bloc +@code{\markup} et selon les préceptes énoncés dans +@ref{Mise en forme du texte}. + +@lilypond[quote,verbatim,relative=2] +a8^\markup { \italic pizz. } g f e +a4_\markup { \tiny scherz. \bold molto } f +@end lilypond + +Par défaut, ces indications n'affectent en rien l'espacement des +notes. Leur longueur peut néanmoins être prise en considération@tie{}: +dans l'exemple qui suit, le premier commentaire n'influe pas sur +l'espacement, à l'inverse du second. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e +\textLengthOn +a4_"scherzando" f +@end lilypond + +En plus d'indications textuelles, les notes peuvent se voir attacher des +articulations, comme indiqué au chapitre +@ref{Articulations et ornements}. + +Pour de plus amples détails sur la manière de combiner indications +textuelles et articulations, reportez-vous au chapitre +@rlearning{Positionnement des objets}. + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}. +@endpredefined + + +@seealso +Manuel d'initiation : +@rlearning{Positionnement des objets}. + +Manuel de notation : +@ref{Mise en forme du texte}, +@ref{Direction et positionnement}, +@ref{Articulations et ornements}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +Référence des propriétés internes : +@rinternals{TextScript}. + + +@cindex texte hors marges +@cindex marges, texte qui dépasse +@cindex texte, maintien dans les marges +@cindex texte, maintien dans les marges + + +@knownissues + +S'assurer que tous les éléments textuels et les paroles respectent +les marges du document requiert des calculs relativement lourds@tie{}; +c'est la raison pour laquelle LilyPond, par défaut, ne s'en préoccupe +pas. Vous pouvez cependant l'y forcer en définissant + +@example +\override Score.PaperColumn #'keep-inside-line = ##t +@end example + + +@node Indication textuelle avec extension +@unnumberedsubsubsec Indication textuelle avec extension +@translationof Text spanners + +@cindex texte et extenseur +@cindex prolongation de texte +@cindex extenseur + +Certaines indications d'interprétation comme @emph{rallentando}, +@emph{accelerando} ou @emph{trilles}, s'inscrivent textuellement et se +prolongent sur plusieurs notes à l'aide d'une ligne pleine, pointillée +ou ondulée. Ces objets, que l'on appelle @qq{extenseurs}, se dessinent +entre deux notes à l'aide de la syntaxe suivante@tie{}: + +@lilypond[verbatim,quote,relative=2] +\override TextSpanner #'(bound-details left text) = "rit." +b1\startTextSpan +e,\stopTextSpan +@end lilypond + +@cindex texte, mise en forme des prolongations +@cindex texte, mise en forme des extenseurs +@cindex extenseur, mise en forme + +@noindent +Le texte à imprimer est spécifié en tant que propriété de l'objet +@code{TextSpanner}. Il apparaîtra par défaut en italique@tie{}; +cependant, rien ne s'oppose à un autre graphisme dès lors que vous +faites appel à un bloc @code{\markup} -- +voir @ref{Mise en forme du texte}. + +@lilypond[quote,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) = + \markup { \upright "rit." } +b1\startTextSpan c +e,\stopTextSpan +@end lilypond + +Le style de ligne se définit lui aussi comme une propriété de l'objet. +Les détails concernant la syntaxe à utiliser sont expliqués au chapitre +@ref{Styles de ligne}. + +@funindex \textSpannerUp +@funindex textSpannerUp +@funindex \textSpannerDown +@funindex textSpannerDown +@funindex \textSpannerNeutral +@funindex textSpannerNeutral + + +@predefined +@code{\textSpannerUp}, +@code{\textSpannerDown}, +@code{\textSpannerNeutral}. +@endpredefined + +@knownissues +LilyPond ne peut traiter qu'un seul extenseur à la fois par voix. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-text-spanner-postfix.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-custom-text-spanner-postfix.ly} + +@seealso +Manuel de notation : +@ref{Styles de ligne}, +@ref{Nuances}, +@ref{Mise en forme du texte}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}, +@rlsrnamed{Expressive marks,Signes d'interprétation}. + +Référence des propriétés internes : +@rinternals{TextSpanner}. + + +@node Indications textuelles +@unnumberedsubsubsec Indications textuelles +@translationof Text marks + +@cindex indication textuelle +@cindex coda sur une barre de mesure +@cindex segno sur une barre de mesure +@cindex point d'orgue sur une barre de mesure +@cindex barres de mesure, symboles au dessus de + +@funindex \mark +@funindex mark +@funindex \markup +@funindex markup + +La commande @code{\mark} est tout d'abord conçue pour les +@ref{Indications de repère}. + +@c \mark needs to be placed on a separate line (it's not +@c attached to an object like \markup is). -vv + +@lilypond[verbatim,quote,relative=2] +c4 +\mark "Allegro" +c c c +@end lilypond + +Cette syntaxe rend possible l'adjonction de n'importe quel texte à une +barre de mesure. Ce texte peut être mis en forme de différentes +manières dès lors qu'est utilisé un bloc @code{\markup}, comme indiqué +au chapitre @ref{Mise en forme du texte}. + +@lilypond[quote,verbatim,relative=1] +1 +\mark \markup { \italic { colla parte } } +2 +1 +@end lilypond + +@noindent +Elle peut aussi servir à insérer des signes de @emph{coda} ou de +@emph{segno}, ou bien un point d'orgue, au dessus d'une +barre de mesure. Couplez-la alors à la commande @code{\markup} pour +avoir accès au symbole approprié, selon les indications contenues au +chapitre @ref{Notation musicale dans du texte formaté}. + +@lilypond[quote,verbatim,relative=2] +2 +\mark \markup { \musicglyph #"scripts.ufermata" } +1 +@end lilypond + +@noindent +Le résultat de @code{\mark} n'apparaîtra que sur la portée supérieure +d'un système. Si vous introduisez la commande @code{\mark} au moment +d'une barre de mesure, la marque se placera au dessus de la barre. Si +vous y faites appel au milieu d'une mesure, cette marque sera +positionnée entre les notes. Si elle intervient en début de ligne, +elle sera placée juste avant la première note de cette portée. Enfin, +une marque qui tomberait sur un saut de ligne sera imprimée au début +de la ligne suivante. + +@lilypond[quote,verbatim,relative=2] +\mark "Allegro" +c1 c +\mark "assai" \break +c c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-at-the-end-of-a-line.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{aligning-marks-with-various-notation-objects.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-on-every-staff.ly} + + +@seealso +Manuel de notation : +@ref{Indications de repère}, +@ref{Mise en forme du texte}, +@ref{Notation musicale dans du texte formaté}, +@ref{La fonte Feta}. + +Morceaux choisis: +@rlsrnamed{Text,Texte}. + +Référence des propriétés internes : +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + + +@node Texte indépendant +@unnumberedsubsubsec Texte indépendant +@translationof Separate text + +@cindex texte indépendant +@cindex texte isolé +@cindex texte en préambule +@cindex top-level text +@cindex text, top-level +@cindex indépendant, texte + +@funindex \markup +@funindex markup + +Un bloc @code{\markup} peut exister en lui-même, indépendamment de tout +bloc @code{\score}, et venir en préambule par exemple -- voir le +chapitre @ref{Structure de fichier} à ce propos. + +@lilypond[verbatim,quote] +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +@end lilypond + +@noindent +De cette manière, vous pouvez insérer du texte en dehors de la musique. +Ceci devient particulièrement utile lorsque le fichier source contient +plusieurs morceaux. Pour plus d'informations à ce propos, reportez-vous +au chapitre @ref{Plusieurs partitions dans un même ouvrage}. + +@lilypond[quote,verbatim] +\score { + c'1 +} +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +\score { + c'1 +} +@end lilypond + +Les blocs de textes peuvent s'étendre sur plusieurs pages, ce qui permet +de générer des ouvrages complets uniquement grâce à LilyPond. Cette +fonctionnalité, ainsi que la syntaxe appropriée, est abordée plus en +détail au chapitre @ref{Texte avec sauts de page}. + + +@funindex \markup +@funindex markup +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markup}, +@code{\markuplines}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{stand-alone-two-column-markup.ly} + + +@seealso +Manuel de notation : +@ref{Mise en forme du texte}, +@ref{Structure de fichier}, +@ref{Plusieurs partitions dans un même ouvrage}, +@ref{Texte avec sauts de page}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +Référence des propriétés internes : +@rinternals{TextScript}. + + +@node Mise en forme du texte +@subsection Mise en forme du texte +@translationof Formatting text + +Nous allons voir dans les lignes qui suivent la manière de mettre en +forme du texte à l'aide de la syntaxe propre au mode @code{\markup}. + +@menu +* Introduction au formatage de texte:: +* Sélection de la fonte et de la taille:: +* Alignement du texte:: +* Éléments graphiques dans du texte formaté:: +* Notation musicale dans du texte formaté:: +* Texte avec sauts de page:: +@end menu + +@node Introduction au formatage de texte +@unnumberedsubsubsec Introduction au formatage de texte +@translationof Text markup introduction + +@cindex étiquette +@cindex commentaire textuel +@cindex étiquette textuelle +@cindex texte ajouté + +@funindex \markup +@funindex markup + +La commande @code{\markup} permet d'ajouter du texte et dispose de sa +propre syntaxe que nous appellerons le @qq{mode @emph{markup}}. + +@cindex markup, expressions +@cindex expressions markup +@cindex markup, syntaxe +@cindex syntaxe du mode markup + +La syntaxe du mode @emph{markup} n'est pas différente de celle des +autres modes de LilyPond@tie{}: une expression @code{\markup} est bornée +par des accolades @code{@{@tie{}@dots{}@tie{}@}}. Un mot unique sera +considéré comme une expression minimale, et n'aura donc pas besoin +d'être mis entre accolades. + +Contrairement aux indications simples, du type "entre guillemets", les +blocs @code{\markup} peuvent contenir des expressions imbriquées ou +d'autres commandes @emph{markup}, dès lors qu'elles sont précédées du +caractère @code{\}. Ces commandes n'affecteront que la première +expression qui les suit. + +@lilypond[quote,verbatim,relative=2] +a1-\markup intenso +a2^\markup { poco \italic più forte } +c e1 +d2_\markup { \italic "string. assai" } +e +b1^\markup { \bold { molto \italic agitato } } +c +@end lilypond + +@cindex caractères spéciaux en mode markup +@cindex mode markup et caractères spéciaux +@cindex caractères réservés, impression +@cindex impression de caractères réservés +@cindex impression de caractères spéciaux +@cindex guillemets en mode markup +@cindex mode markup et guillemets + +Un bloc @code{\markup} peut contenir du texte entre guillemets. De +telles chaines seront considérées comme des expressions textuelles +minimales@tie{}; à ce titre, toute commande de type @emph{markup} ou +tout caractère spécial -- tel un @code{\} ou un @code{#} -- sera imprimé +littéralement et sans influer sur le formatage du texte. Il est de ce +fait possible d'imprimer des guillemets informatiques @code{"} dès lors +qu'ils sont précédés d'une oblique inverse. +@c repeat double quote for pairing " + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +a1^"\italic markup..." +a_\markup { \italic "... imprime des lettres en \"italique\" !" } +a a +@end lilypond + +Une liste de mots, pour pouvoir être traitée en tant qu'expression +distincte, doit être bornée par des @code{"} ou précédée d'une commande. +La manière de définir les expressions @emph{markup} aura une influence +sur la manière dont elles seront empilées, centrées ou alignées. Dans +l'exemple qui suit, la deuxième expression @code{\markup} est traitée +tout comme la première@tie{}: +@c repeat double quote for pairing " + +@lilypond[quote,verbatim,relative=2] +c1^\markup { \center-column { a bbb c } } +c1^\markup { \center-column { a { bbb c } } } +c1^\markup { \center-column { a \line { bbb c } } } +c1^\markup { \center-column { a "bbb c" } } +@end lilypond + +Vous pouvez stocker les étiquettes textuelles en tant que variables, +et attacher ces identificateurs à des notes, comme ici@tie{}: + +@lilypond[quote,verbatim] +allegro = \markup { \bold \large Allegro } + +{ + d''8.^\allegro + d'16 d'4 r2 +} +@end lilypond + +@noindent +Pour une liste des différentes commandes spécifiques au mode +@code{\markup}, consultez l'annexe @ref{Text markup commands} (en +anglais). + + +@seealso +Manuel de notation : +@ref{Text markup commands}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +Fichiers d'initialisation : +@file{scm/markup.scm}. + + +@knownissues + +Les erreurs de syntaxe en mode @emph{markup} sont peu explicites. + + +@node Sélection de la fonte et de la taille +@unnumberedsubsubsec Sélection de la fonte et de la taille +@translationof Selecting font and font size + +@cindex fonte, changement +@cindex changement de fonte +@cindex italique +@cindex gras +@cindex souligné + +@funindex \italic +@funindex italic +@funindex \bold +@funindex bold +@funindex \underline +@funindex underline + +Le mode @emph{markup} autorise des changements élémentaires de la +fonte@tie{}: + +@lilypond[quote,verbatim,relative=2] +d1^\markup { + \bold { Più mosso } + \italic { non troppo \underline Vivo } +} +r2 r4 r8 +d,_\markup { \italic quasi \smallCaps Tromba } +f1 d2 r +@end lilypond + +@cindex caratères, taille +@cindex texte, taille + +@funindex \fontsize +@funindex fontsize +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger +@funindex \magnify +@funindex magnify + +La taille des caractères se modifie de différentes manières@tie{}: +@itemize +@item +à partir de l'une des tailles standard prédéfinies, + +@item +en étant définie en valeur absolue, + +@item +en adoptant une valeur relative à celle précédemment définie. +@end itemize + +@noindent +Voici une illustration de ces trois différentes méthodes@tie{}: + +@lilypond[quote,verbatim,relative=1] +f1_\markup { + \tiny espressivo + \large e + \normalsize intenso +} +a^\markup { + \fontsize #5 Sinfonia + \fontsize #2 da + \fontsize #3 camera +} +bes^\markup { (con + \larger grande + \smaller emozione + \magnify #0.6 { e sentimento } ) +} +d c2 r8 c bes a g1 +@end lilypond + +@cindex indice +@cindex exposant + +@funindex \super +@funindex super +@funindex \sub +@funindex sub + +Vous pouvez imprimer du texte en indice ou en exposant. Celui-ci sera +dans un taille plus petite, mais rien ne s'oppose à ce que vous lui +affectiez un taille normale@tie{}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { 1 \super st movement } + \line { 1 \normal-size-super st movement + \sub { (part two) } } + } +} +@end lilypond + +@cindex fontes, familles + +Le mode @emph{markup} vous permet de sélectionner d'autres familles de +fontes. Par défaut, LilyPond utilise une police avec empattement, du +type roman, et tout changement doit être explicite. Dans la dernière +ligne de l'exemple qui suit, vous noterez qu'il n'y a aucune différence +entre les premier et deuxième mots. + +@lilypond[quote,verbatim] +\markup { + \column { + \line { Act \number 1 } + \line { \sans { Scene I. } } + \line { \typewriter { Verona. An open place. } } + \line { Enter \roman Valentine and Proteus. } + } +} +@end lilypond + +@noindent +Certaines familles de police spécifiques aux nombres ou aux nuances par +exemple, ne disposent pas de tous les caractères, comme nous l'avons vu +dans les chapitres @ref{Personnalisation des indications de nuance} et +@ref{Indications de reprise manuelles}. + +@c \concat is actually documented in Align (it is not +@c a font-switching command). But we need it here. -vv + +Lorsqu'un changement survient au milieu d'un mot, il se peut qu'un +espacement supplémentaire apparaisse. Il suffit en pareil cas de +concaténer les différents éléments@tie{}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \concat { 1 \super st } + movement + } + \line { + \concat { \dynamic p , } + \italic { con dolce espressione } + } + } +} +@end lilypond + +Une liste des différentes commandes permettant de changer de fonte ou +d'utiliser des fontes personnalisées est disponible à l'annexe +@ref{Font}. + +Pour savoir comment personnaliser des fontes, reportez-vous au chapitre +@ref{Fontes}. + +@funindex \teeny +@funindex teeny +@funindex \tiny +@funindex tiny +@funindex \small +@funindex small +@funindex \normalsize +@funindex normalsize +@funindex \large +@funindex large +@funindex \huge +@funindex huge +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}, +@code{\smaller}, +@code{\larger}. +@endpredefined + + +@seealso +Manuel de notation : +@ref{Font}, +@ref{Personnalisation des indications de nuance}, +@ref{Indications de reprise manuelles}, +@ref{Fontes}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +Référence des propriétés internes : +@rinternals{TextScript}. + +Fichiers d'initialisation : +@file{scm/define-markup-commands.scm}. + +@knownissues +Le recours aux commandes @code{\teeny}, @code{\tiny},@code{\small}, +@code{\normalsize}, @code{\large} et @code{\huge} produiront des +espacements nettement moins réguliers que si vous utilisez +@code{\fontsize}. + + +@node Alignement du texte +@unnumberedsubsubsec Alignement du texte +@translationof Text alignment + +@cindex texte, alignement +@cindex alignement du texte +@cindex alignement des markups +@cindex markups, alignement + +Cette partie traite de la manière de positionner du texte en mode +@emph{markup}. On déplace l'intégralité d'un objet @emph{markup} en +utilisant la syntaxe décrite au chapitre +@rlearning{Déplacement d'objets}. + +@c Padding commands should be mentioned on this page, but +@c most of these require \box to be more clearly illustrated. -vv + +@cindex texte, alignement horizontal +@cindex alignement horizontal du texte + +@funindex \left-align +@funindex left-align +@funindex \center-align +@funindex center-align +@funindex \right-align +@funindex right-align + +Les objets de type @emph{markup} peuvent s'aligner de différentes +manières. Une indication textuelle est par défaut alignée sur son +extrémité gauche. Dans l'exemple qui suit, il n'y a aucune différence +entre les deux premiers @emph{markups}. + +@lilypond[quote,verbatim,relative=2] +d1-\markup { poco } +f +d-\markup { \left-align poco } +f +d-\markup { \center-align { poco } } +f +d-\markup { \right-align poco } +@end lilypond + +@funindex \halign +@funindex halign + +L'alignement horizontal peut être ajusté à l'aide d'une valeur +numérique@tie{}: + +@lilypond[quote,verbatim,relative=2] +a1-\markup { \halign #-1 poco } +e' +a,-\markup { \halign #0 poco } +e' +a,-\markup { \halign #0.5 poco } +e' +a,-\markup { \halign #2 poco } +@end lilypond + +@noindent +Certains objets possèdent leurs propres procédures d'alignement, qui +annuleront toute spécification d'alignement que vous pourriez affecter +à un argument de type @emph{markup} que vous leur auriez fourni. La +solution consiste alors à déplacer l'intégralité de ces objets +@emph{markup}, comme indiqué par exemple au chapitre +@ref{Indications textuelles}. + +@cindex texte, alignement vertical +@cindex alignement vertical du texte + +@funindex \raise +@funindex raise +@funindex \lower +@funindex lower +@funindex \null +@funindex null + +@c QUERY Should the function of ``\null'' be clarified? rp + +L'alignement vertical est quant à lui un peu plus compliqué. Comme nous +l'avons vu ci-avant, les objets @emph{markup} peuvent être déplacés dans +leur intégralité. Il est néanmois possible de déplacer certains +éléments spécifiques au sein d'un bloc @emph{markup}. En pareil cas, +l'élément à déplacer doit être précédé d'un @qq{point d'ancrage} -- un +autre élément du @emph{markup} ou un objet invisible. L'exemple qui +suit illustre ces deux possibilités. Vous noterez par ailleurs que le +dernier @emph{markup}, dépourvu de point d'ancrage, n'est de ce fait pas +déplacé. + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \raise #2 { Scène 1 } +} +a' +g_\markup { + \null + \lower #4 \bold { Très modéré } +} +a +d,^\markup { + \raise #4 \italic { Une forêt. } +} +a'4 a g2 a +@end lilypond + +@funindex \general-align +@funindex general-align +@funindex \translate +@funindex translate +@funindex \translate-scaled +@funindex translate-scaled + +Certaines commandes permettent de régler l'alignement des objets +textuels en mode @emph{markup}, tant au niveau horizontal que vertical. +Tout objet soumis à ces commandes doit être précédé d'un point +d'ancrage. + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \translate #'(-1 . 2) "Scène 1" +} +a' +g_\markup { + \null + \general-align #Y #3.2 \bold "Très modéré" +} +a +d,^\markup { + \null + \translate-scaled #'(-1 . 2) \teeny "Une forêt." +} +a'4 a g2 a +@end lilypond + +@cindex multi-ligne, markup +@cindex markup multi-ligne +@cindex multi-ligne, texte +@cindex texte multi-ligne +@cindex texte en colonnes +@cindex colonnes de texte + +@funindex \column +@funindex column +@funindex \center-column +@funindex center-column + +Un objet de type @emph{markup} peut contenir plusieurs lignes de texte. +Dans l'exemple suivant, chaque élément ou expression ira se placer sur +sa propre ligne, tantôt alignée à gauche, tantôt centrée. + +@lilypond[quote,verbatim] +\markup { + \column { + a + "b c" + \line { d e f } + } + \hspace #10 + \center-column { + a + "b c" + \line { d e f } + } +} +@end lilypond + +@cindex centrage du texte sur la page +@cindex texte, centrage sur la page +@cindex markup, centrage sur la page + +@funindex \fill-line +@funindex fill-line + +Pareillement, une liste d'éléments ou d'expressions sera répartie sur +une ligne entière, voire même centrée sur toute la page s'il n'y a qu'un +seul élément. De telles expressions peuvent à leur tour contenir du +texte multi-ligne ou une autre expression @emph{markup}. + +@lilypond[quote,verbatim] +\markup { + \fill-line { + \line { William S. Gilbert } + \center-column { + \huge \smallCaps "The Mikado" + or + \smallCaps "The Town of Titipu" + } + \line { Sir Arthur Sullivan } + } +} +\markup { + \fill-line { 1885 } +} +@end lilypond + +@cindex plusieurs lignes de texte +@cindex justifié, texte +@cindex texte justifié +@cindex texte sur plusieurs lignes +@cindex markup, texte au kilomètre +@cindex markup, texte justifié + +@funindex \wordwrap +@funindex wordwrap +@funindex \justify +@funindex justify + +Les indications textuelles, lorsqu'elles sont relativement longues, +peuvent se répartir sur plusieurs lignes en fonction de la largeur de +ligne. Le texte sera alors soit aligné à gauche, soit justifié, comme +le montre l'exemple suivant@tie{}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line \smallCaps { La vida breve } + \line \bold { Acto I } + \wordwrap \italic { + (La escena representa el corral de una casa de + gitanos en el Albaicín de Granada. Al fondo una + puerta por la que se ve el negro interior de + una Fragua, iluminado por los rojos resplandores + del fuego.) + } + \hspace #0 + + \line \bold { Acto II } + \override #'(line-width . 50) + \justify \italic { + (Calle de Granada. Fachada de la casa de Carmela + y su hermano Manuel con grandes ventanas abiertas + a través de las que se ve el patio + donde se celebra una alegre fiesta) + } + } +} +@end lilypond + +@cindex commandes d'alignement du texte +@cindex markup, commandes d'alignement du texte +@cindex alignement du texte, commandes + +Une liste des différentes commandes permettant d'aligner du texte en +mode @emph{markup} est disponible à l'annexe @ref{Align}. + + +@seealso +Manuel d'initiation : +@rlearning{Déplacement d'objets}. + +Manuel de notation : +@ref{Align}, +@ref{Indications textuelles}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +Référence des propriétés internes : +@rinternals{TextScript}. + +Fichiers d'initialisation : +@file{scm/define-markup-commands.scm}. + + +@node Éléments graphiques dans du texte formaté +@unnumberedsubsubsec Éléments graphiques dans du texte formaté +@translationof Graphic notation inside markup + +@cindex graphisme, tracé +@cindex tracé d'objets graphiques +@cindex graphiques, tracé d'objets +@cindex embedding graphic objects +@cindex objets graphiques, tracé + +Vous pouvez, grâce aux mode @emph{markup}, ajouter divers objets +graphiques à votre partition. + +@cindex décoration du texte +@cindex encadrement du texte +@cindex texte, encadrement +@cindex texte, décoration +@cindex markup, ornementation du texte +@cindex markup, encadrement du texte + +@funindex \box +@funindex box +@funindex \circle +@funindex circle +@funindex \rounded-box +@funindex rounded-box +@funindex \bracket +@funindex bracket +@funindex \hbracket +@funindex hbracket + +Certaines commandes de @emph{markup} permettent d'ornementer des +éléments textuels avec des graphismes, à l'instar de l'exemple +suivant@tie{}: + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \circle Jack + \box "in the box" + \null + \line { + Erik Satie + \hspace #3 + \bracket "1866 - 1925" + } + \null + \rounded-box \bold Prelude + } +} +@end lilypond + +@cindex espacement autour du texte +@cindex texte et rembourrage +@cindex markup, rembourrage du texte + +@funindex \pad-markup +@funindex pad-markup +@funindex \pad-x +@funindex pad-x +@funindex \pad-to-box +@funindex pad-to-box +@funindex \pad-around +@funindex pad-around + +Certaines directives peuvent nécessiter d'accroître l'espacement autour +du texte -- voir l'annexe @ref{Align} pour une liste des différentes +commandes particulières au mode @emph{markup} ainsi que leur description. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \box "Charles Ives (1874 - 1954)" + \null + \box \pad-markup #2 "THE UNANSWERED QUESTION" + \box \pad-x #8 "A Cosmic Landscape" + \null + } +} +\markup \column { + \line { + \hspace #10 + \box \pad-to-box #'(-5 . 20) #'(0 . 5) + \bold "Largo to Presto" + } + \pad-around #3 + "String quartet keeps very even time, +Flute quartet keeps very uneven time." +} +@end lilypond + +@cindex graphisme dans la notation +@cindex symboles non musicaux +@cindex non musicaux, symboles +@cindex notation et graphisme + +@funindex \combine +@funindex combine +@funindex \draw-circle +@funindex draw-circle +@funindex \filled-box +@funindex filled-box +@funindex \triangle +@funindex triangle +@funindex \draw-line +@funindex draw-line +@funindex \arrow-head +@funindex arrow-head + +Vous pouvez imprimer certains graphismes ou symboles sans qu'il n'y +ait de texte. Ces objets peuvent même se combiner, à l'instar de +n'importe quelle expression @emph{markup}. + +@lilypond[quote,verbatim] +\markup { + \combine + \draw-circle #4 #0.4 ##f + \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 + \hspace #5 + + \center-column { + \triangle ##t + \combine + \draw-line #'(0 . 4) + \arrow-head #Y #DOWN ##f + } +} +@end lilypond + +@cindex intégration de graphiques +@cindex images, intégration +@cindex graphiques, intégration +@cindex postscript + +@funindex \epsfile +@funindex epsfile +@funindex \postscript +@funindex postscript + +Des fonctionnalités graphiques avancées vous permettent même d'inclure +dans une partition un fichier image converti au format PostScript +encapsulé (extension @code{eps}), ou bien de tracer un graphique +directement dans le fichier source à partir d'instructions PostScript +pures. Nous vous conseillons, en pareil cas, de toujours spécifier les +dimensions du dessin, comme dans ce qui suit@tie{}: + +@lilypond[quote,verbatim,relative=1] +c1^\markup { + \combine + \epsfile #X #10 #"./context-example.eps" + \with-dimensions #'(0 . 6) #'(0 . 10) + \postscript #" + -2 3 translate + 2.7 2 scale + newpath + 2 -1 moveto + 4 -2 4 1 1 arct + 4 2 3 3 1 arct + 0 4 0 3 1 arct + 0 0 1 -1 1 arct + closepath + stroke" + } +c +@end lilypond + +L'annexe @ref{Graphic} répertorie les différentes commandes en matière +de graphisme. + + +@seealso +Manuel de notation : +@ref{Graphic}, +@ref{Annotations éditoriales}, +@ref{Align}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +Référence des propriétés internes : +@rinternals{TextScript}. + +Fichiers d'initialisation : +@file{scm/define-markup-commands.scm}, +@file{scm/stencil.scm}. + + +@node Notation musicale dans du texte formaté +@unnumberedsubsubsec Notation musicale dans du texte formaté +@translationof Music notation inside markup + +@cindex notation dans un markup +@cindex musique dans un markup +@cindex markup, inclusion de musique + +Divers éléments de notation peuvent orner une partition, au moyen d'un +objet @emph{markup}. + +Notes et altérations sont données à l'aide d'instructions +@emph{markup}@tie{}: + +@lilypond[quote,verbatim,relative=2] +a2 a^\markup { + \note #"4" #1 + = + \note-by-number #1 #1 #1.5 +} +b1_\markup { + \natural \semiflat \flat + \sesquiflat \doubleflat +} +\glissando +a1_\markup { + \natural \semisharp \sharp + \sesquisharp \doublesharp +} +\glissando b +@end lilypond + +Le mode @emph{markup} permet d'accéder à d'autres objets de +notation@tie{}: + +@lilypond[quote,verbatim,relative=1] +g1 bes +ees-\markup { + \finger 4 + \tied-lyric #"~" + \finger 1 +} +fis_\markup { \dynamic rf } +bes^\markup { + \beam #8 #0.1 #0.5 +} +cis +d-\markup { + \markalphabet #8 + \markletter #8 +} +@end lilypond + +En règle générale, tout symbole musical peut être inclus dans un +@emph{markup}, comme le montre l'exemple qui suit. Ces différents +symboles sont répertoriés dans l'annexe @ref{La fonte Feta}. + +@lilypond[quote,verbatim,relative=2] +c2 +c'^\markup { \musicglyph #"eight" } +c,4 +c,8._\markup { \musicglyph #"clefs.G_change" } +c16 +c2^\markup { \musicglyph #"timesig.neomensural94" } +@end lilypond + +Le sous-chapitre @ref{Tout savoir sur les fontes} contient d'autres +informations sur l'impression de glyphes non alphabétiques, tels que des +crochets ou accolades. + +Le mode @emph{markup} supporte aussi les diagrammes spécifiques à +certains instruments@tie{}: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { + \fret-diagram-terse #"x;x;o;2;3;2;" +} +c^\markup { + \harp-pedal #"^-v|--ov^" +} +c +c^\markup { + \combine + \musicglyph #"accordion.discant" + \combine + \raise #0.5 \musicglyph #"accordion.dot" + \raise #1.5 \musicglyph #"accordion.dot" +} +@end lilypond + +@c The accordion diagram is actually taken from a snippet. + +@noindent +La documentation sur ces diagrammes se trouvent à l'annexe +@ref{Instrument Specific Markup}. + +@cindex partition incluse dans un markup +@cindex markup, inclusion de partition + +Rien ne s'oppose à ce qu'une étiquette ne comporte une partition. Il +suffit que l'expression en question contienne un bloc @code{\score} +incluant un bloc @code{\layout}. + +@lilypond[quote,verbatim,relative=1] +c4 d^\markup { + \score { + \relative c' { c4 d e f } + \layout { } + } +} +e f | +c d e f +@end lilypond + +Les différentes commandes @emph{markup} relatives à la notation musicale +sont répertoriées à l'annexe @ref{Music}. + + +@seealso +Manuel de notation : +@ref{Music}, +@ref{La fonte Feta}, +@ref{Tout savoir sur les fontes}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +Référence des propriétés internes : +@rinternals{TextScript}. + +Fichiers d'initialisation : +@file{scm/define-markup-commands.scm}, +@file{scm/fret-diagrams.scm}, +@file{scm/harp-pedals.scm}. + + +@node Texte avec sauts de page +@unnumberedsubsubsec Texte avec sauts de page +@translationof Page wrapping text + +@cindex multi-page, markup +@cindex markup multi-page +@cindex markup, texte multi-page +@cindex plusieurs pages de texte + +@funindex \markuplines +@funindex markuplines +@funindex \justified-lines +@funindex justified-lines +@funindex \wordwrap-lines +@funindex wordwrap-lines + +Alors que @code{\markup} s'utilise pour traiter un bloc de texte +insécable, @code{\markuplines} permet, employé en tête de partition, +d'obtenir un bloc de lignes réparties différemment et, le cas échéant, +sur plusieurs pages. + +@c KEEP LY +@lilypond[quote,verbatim] +\markuplines { + \justified-lines { + Un long texte constitué de lignes justifiées. + ... + } + \wordwrap-lines { + Un autre grand paragraphe. + ... + } + ... +} +@end lilypond + +Cette syntaxe prend en charge une liste de @emph{markups}@tie{}; il peut +s'agir +@itemize +@item +d'une suite de commandes générant à leur tour des lignes de texte, +@item +d'une liste de lignes de texte, +@item +d'une liste d'étiquettes. +@end itemize + +Les différentes commandes permettant de générer des listes de lignes +se trouve dans l'annexe @ref{Text markup list commands}. + + +@seealso +Manuel de notation : +@ref{Text markup list commands}, + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +@c TODO en attendant redécoupage et création de "extending" -jcm +@c Extension : +@c @rextend{New markup list command definition}. + +Référence des propriétés internes : +@rinternals{TextScript}. + +Fichiers d'initialisation : +@file{scm/define-markup-commands.scm}. + + +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markuplines}. +@endpredefined + + +@node Fontes +@subsection Fontes +@translationof Fonts + +Ce chapitre est consacré aux fontes et polices de caractère, à leur +gestion. Vous y apprendrez aussi comment changer de fonte en cours de +partition. + +@menu +* Tout savoir sur les fontes:: +* Attribution d'une fonte en particulier:: +* Choix des fontes par défaut:: +@end menu + +@node Tout savoir sur les fontes +@unnumberedsubsubsec Tout savoir sur les fontes +@translationof Fonts explained + +@cindex Pango +@cindex fontes, généralités +@cindex accolades, taille +@cindex fontes et markup +@cindex markup et fontes + +@funindex font-interface + +La gestion des fontes est assurée par plusieurs bibliothèques@tie{}: +FontConfig se charge de répertorier les différentes fontes installées +sur votre système@tie{}; quant à Pango, elle se charge plus +particulièrement de leur rendu. + +Les fontes musicales peuvent se décrire comme un jeu de glyphes +spécifiques regroupés dans plusieurs familles. L'exemple qui suit +montre la syntaxe à utiliser pour accéder, en mode @emph{markup}, aux +différentes fontes @code{feta} non textuelles de LilyPond. + +@lilypond[quote,verbatim,relative=2] +a1^\markup { + \vcenter { + \override #'(font-encoding . fetaBraces) + \lookup #"brace120" + \override #'(font-encoding . fetaText) + \column { 1 3 sf } + \override #'(font-encoding . fetaMusic) + \lookup #"noteheads.s0petrucci" + } +} +@end lilypond + +@noindent +Tous ces glyphes, à l'exception des accolades qui sont regroupées dans +@code{fetaBraces}, sont accessibles avec la syntaxe indiquée dans +@ref{Notation musicale dans du texte formaté}. + +Une remarque s'impose au sujet des glyphes contenus dans +@code{fetaBraces}@tie{}: chacun d'eux est formé du mot @emph{brace} +auquel est accolé un numéro d'ordre. Lorsque vous désirez imprimer une +accolade, vous devez la @qq{chercher} par son numéro d'ordre -- d'où la +fonction @code{\lookup} de l'exemple ci-dessus --, tout en sachant qu'il +est compris entre @code{0} (la plus petite) et @code{575} (la plus +grande). Vous serez souvent amené à procéder par tatonnement pour +arriver au résultat optimal. Par ailleurs, @code{fetaBraces} ne +comporte que des accolades ouvrantes. Pour obtenir une accolade +fermante, il suffit d'appliquer une rotation au glyphe sélectionné, +comme indiqué au chapitre @ref{Rotation des objets}. + +Vous disposez de trois familles de fontes textuelles@tie{}: @emph{roman} +pour la police sérif ou avec empattement -- fixée par défaut à New +Century Schoolbook --, une police sans empattement (@emph{sans} sérif) +et une à chasse fixe (ou monospace) -- les deux dernières étant +déterminées par l'installation de Pango. + +Chaque famille dispose en principe de différents styles et niveaux de +gras. L'exemple qui suit illustre la manière de changer la famille, le +style, la graisse ou la taille. Notez bien que l'argument fourni à +@code{font-size} correspond à la correction à apporter à la taille par +défaut. + +@lilypond[quote,verbatim,relative=2] +\override Score.RehearsalMark #'font-family = #'typewriter +\mark \markup "Ouverture" +\override Voice.TextScript #'font-shape = #'italic +\override Voice.TextScript #'font-series = #'bold +d2.^\markup "Allegro" +\override Voice.TextScript #'font-size = #-3 +c4^smaller +@end lilypond + +@noindent +Cette syntaxe s'applique aussi en mode @emph{markup}, bien que celui-ci +dispose d'une syntaxe allégée comme nous l'avons vu dans +@ref{Sélection de la fonte et de la taille}@tie{}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \override #'(font-shape . italic) + \override #'(font-size . 4) + Idomeneo, + } + \line { + \override #'(font-family . typewriter) + { + \override #'(font-series . bold) + re + di + } + \override #'(font-family . sans) + Creta + } + } +} +@end lilypond + +En plus de pouvoir jongler entre les différentes fontes prédéfinies, +LilyPond vous permet d'en utiliser d'autres, ce qui fait l'objet des +deux prochaines parties@tie{}: +@ref{Attribution d'une fonte en particulier} +et @ref{Choix des fontes par défaut}. + + +@seealso +Manuel de notation : +@ref{La fonte Feta}, +@ref{Notation musicale dans du texte formaté}, +@ref{Rotation des objets}, +@ref{Sélection de la fonte et de la taille}, +@ref{Font}. + + +@node Attribution d'une fonte en particulier +@unnumberedsubsubsec Attribution d'une fonte en particulier +@translationof Single entry fonts + +Vous pouvez utiliser n'importe quelle police installée sur votre +système, dès lors qu'elle est accessible par Fontconfig et que vous +respectez la syntaxe suivante@tie{}: + +@lilypond[quote,verbatim,relative=2] +\override Staff.TimeSignature #'font-name = #"Bitstream Charter" +\override Staff.TimeSignature #'font-size = #2 +\time 3/4 + +a1_\markup { + \override #'(font-name . "Vera Bold") + { Vera Bold } +} +@end lilypond + +@cindex fontes disponibles +@cindex disponibilité des fontes + +@funindex show-available-fonts + +Pour obtenir la liste de toutes les polices disponibles sur votre +machine, lancez + +@example +lilypond -dshow-available-fonts toto +@end example +@noindent +(quel qu'il soit, le dernier argument est obligatoire). + + +@seealso +Manuel de notation : +@ref{Tout savoir sur les fontes}, +@ref{Choix des fontes par défaut}. + +Morceaux choisis : +@rlsrnamed{Text,Texte}. + +@c A source file gets never installed... +@c Fichiers d'initialisation : +@c @file{lily/font-config-scheme.cc}. + + +@node Choix des fontes par défaut +@unnumberedsubsubsec Choix des fontes par défaut +@translationof Entire document fonts + +Vous pouvez tout à fait préférer un autre jeu de polices par défaut que +celui de LilyPond. Il vous faudra alors spécifier les différentes +familles, en respectant l'ordre @emph{roman}, @emph{sans empattement} et +@emph{monospace}, comme dans l'exemple suivant. Pour plus +d'explications sur les fontes, relisez @ref{Tout savoir sur les fontes}. + +@cindex polices, choix par défaut +@cindex fontes, choix par défaut + +@funindex make-pango-font-tree + +@lilypond[verbatim,quote] +\paper { + myStaffSize = #20 + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" + (/ myStaffSize 20))) +} + +\relative c'{ + c1-\markup { + roman, + \sans sans, + \typewriter typewriter. } +} +@end lilypond + +@c we don't do Helvetica / Courier, since GS incorrectly loads +@c Apple TTF fonts + + +@seealso +Manuel de notation : +@ref{Tout savoir sur les fontes}, +@ref{Attribution d'une fonte en particulier}, +@ref{Sélection de la fonte et de la taille}, +@ref{Font}. + diff --git a/Documentation/fr/notation/unfretted-strings.itely b/Documentation/fr/notation/unfretted-strings.itely new file mode 100644 index 0000000000..0988fd9ea1 --- /dev/null +++ b/Documentation/fr/notation/unfretted-strings.itely @@ -0,0 +1,233 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Matthieu Jacquot +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + +@node Cordes non frettées +@section Cordes non frettées +@translationof Unfretted string instruments + +@lilypondfile[quote] +{unfretted-headword.ly} + +@cindex cordes d'orchestre +@cindex orchestre, cordes +@cindex cordes, écriture pour + +Cette section dispense des informations supplémentaires et utiles à +l'écriture pour les cordes non frettées, et tout spécialement pour les +cordes d'orchestre. + +@menu +* Vue d'ensemble de la notation pour cordes non frettées:: +@end menu + +@node Vue d'ensemble de la notation pour cordes non frettées +@subsection Vue d'ensemble de la notation pour cordes non frettées +@translationof Common notation for unfretted strings + +Il existe peu d'éléments spécifiques à l'écriture pour instruments à +cordes non frettées. La musique est notée sur une portée et ne +nécessite généralement qu'une seule voix. Le recours à deux voix +distinctes peut cependant permettre de traiter efficacement des doubles +notes ou des divisions. + +@menu +* Références en matière de cordes non frettées:: +* Indications d'archet:: +* Harmoniques:: +* Snap (Bartók) pizzicato:: +@end menu + +@node Références en matière de cordes non frettées +@unnumberedsubsubsec Références en matière de cordes non frettées +@translationof References for unfretted strings + +La majorité des éléments de notation nécessaires en matière de +cordes d'orchestre et autres instruments à archet est abordée dans +d'autres chapitres de la documentation : + +@itemize + +@item Les indications textuelles telles que @qq{pizz.} ou @qq{arco} sont +ajoutées comme du texte simple -- voir à ce sujet +@ref{Commentaires textuels}. + +@item Les indications de doigtés, incluant les indications du pouce, +sont décrites dans @ref{Doigtés}. + +@item Les doubles notes sont généralement indiquées en écrivant un +accord, voir @ref{Notes en accords}. Les précisions pour jouer des accords +peuvent être ajoutées, comme l'indique @ref{Arpèges}. + +@item Un modèle pour quatuor à cordes est disponible au chapitre +@rlearning{Quatuor à cordes}. D'autres informations se trouvent dans les +exemples de code. + +@end itemize + + +@seealso +Manuel d'initiation : +@rlearning{Quatuor à cordes}. + +Manuel de notation : +@ref{Commentaires textuels}, +@ref{Doigtés}, +@ref{Notes en accords}, +@ref{Arpèges}. + +Morceaux choisis : +@rlsr{Unfretted strings}. + +@node Indications d'archet +@unnumberedsubsubsec Indications d'archet +@translationof Bowing indications + +@funindex \upbow +@funindex \downbow +@funindex \open + +@cindex indications d'archet +@cindex poussé, indication d'archet +@cindex tiré, indication d'archet +@cindex indication de corde à vide +@cindex corde à vide, indication + +Les indications d'archet se créent comme des articulations, elles sont +décrites dans @ref{Articulations et ornements}. + +Les indications d'archet, poussé (@code{\upbow}) et tiré +(@code{\downbow}), peuvent se combiner à des liaisons comme ici : + +@lilypond[verbatim,quote,relative=2] +c4(\downbow d) e(\upbow f) +@end lilypond + +@noindent +ou dans l'exemple suivant qui montre trois manières d'indiquer la corde +de La, à vide, sur un violon : + +@lilypond[verbatim,quote,relative=2] +a4 \open +a^\markup { \teeny "II" } +a2^\markup { \small "sul A" } +@end lilypond + +@predefined +@code{\downbow}, +@code{\upbow}, +@code{\open}. +@endpredefined + + +@seealso +Manuel de notation : +@ref{Articulations et ornements}, +@ref{Liaisons d'articulation}. + +@node Harmoniques +@unnumberedsubsubsec Harmoniques +@translationof Harmonics + +@funindex \harmonic + +@strong{@i{Harmoniques naturels}} + +@cindex harmoniques naturels +@cindex naturels, harmoniques +@cindex tête de note en losange +@cindex losange, tête de note + +@funindex \harmonicsOn +@funindex \harmonicsOff + +Les harmoniques naturels sont indiqués de différentes manières : une +tête de note en forme de losange signifie généralement que vous devez +effleurer la corde à l'endroit où vous l'auriez pincée si la note avait +été normale. + +@lilypond[verbatim,quote,relative=2] +d4 e4. +\harmonicsOn +d8 e e +d4 e4. +\harmonicsOff +d8 e e +@end lilypond + +Une autre façon de procéder consiste à faire surmonter la note normale +d'un petit cercle. Ceci indique que la note écrite doît être jouée en +harmonique : + +@lilypond[verbatim,quote,relative=2] +d2^\flageolet d_\flageolet +@end lilypond + +Un plus petit cercle peut être créé, comme indiqué dans les exemples de +code contenus dans @ref{Références en matière de cordes non frettées}. + +@strong{@i{Harmoniques artificiels}} + +@cindex harmoniques artificiels +@cindex artificiels, harmoniques + +Les harmoniques artificiels sont indiqués par une double tête de note : +l'une, normale, indique la note à pincer, et l'autre, en forme de +losange, indique l'endroit où la corde doit être effleurée. + + +@c TODO If the default for harmonicDots is changed, change this +La propriété @code{harmonicDots}, lorsqu'elle est activée, permet +d'ajouter un point aux notes pointées affublées d'un @code{\harmonic}. + +@lilypond[verbatim,quote,relative=2] +2. 4 +\set harmonicDots = ##t +2. 4 +@end lilypond + +@warning{La commande @code{@bs{}harmonic} @strong{doit} être placée +dans une construction de type accord même s'il n'y a qu'une seule note. +On utiliserait plutôt la commande @code{@bs{}harmonicsOn} en pareil +cas.} + +@seealso +Glossaire musicologique : +@rglos{harmonics}. + +Manuel de notation : +@ref{Têtes de note spécifiques}, +@ref{Références en matière de cordes non frettées}. + + +@node Snap (Bartók) pizzicato +@unnumberedsubsubsec Snap (Bartók) pizzicato +@translationof Snap (Bartók) pizzicato + +@cindex pizzicato, Bartók +@cindex pizzicato, snap +@cindex Bartók pizzicato +@cindex snap pizzicato + +Un @notation{snap pizzicato}, aussi appelé @qq{Bartok pizz} est un type +de pizzicato pour lequel la corde est tirée vers le haut (plutôt que sur +le côté) de telle sorte qu'elle vienne frapper le manche. + +@lilypond[verbatim,quote,relative=1] +c4\snappizzicato +4\snappizzicato +4^\snappizzicato +4_\snappizzicato +@end lilypond + diff --git a/Documentation/fr/notation/vocal.itely b/Documentation/fr/notation/vocal.itely new file mode 100644 index 0000000000..bd3f5afc64 --- /dev/null +++ b/Documentation/fr/notation/vocal.itely @@ -0,0 +1,3363 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: Jean-Charles Malahieude, Jean-Jacques Gerbaud + +@node Musique vocale +@section Musique vocale +@translationof Vocal music + +@lilypondfile[quote]{vocal-headword.ly} + +Ce chapitre traite de la musique vocale@tie{}: comment la saisir et comment +s'assurer que les paroles s'alignent avec les notes de la mélodie +correspondante. + +@menu +* Vue d'ensemble de la musique vocale:: +* Situations particulières en matière de paroles:: +* Couplets:: +* Chansons:: +* Chorale:: +* Opéras et musiques de scène:: +* Chants liturgiques:: +* Musique vocale ancienne:: +@end menu + + +@node Vue d'ensemble de la musique vocale +@subsection Vue d'ensemble de la musique vocale +@translationof Common notation for vocal music + +En complément de généralités, ce sous-chapitre aborde quelques styles +particuliers en terme de musique vocale. + +@menu +* Références en matière de musique vocale:: +* Saisie des paroles:: +* Alignement des paroles sur la mélodie:: +* Durée automatique des syllabes:: +* Durée explicite des syllabes:: +* Plusieurs syllabes sur une note:: +* Plusieurs notes pour une même syllabe:: +* Traits d'union et de prolongation:: +@end menu + +@node Références en matière de musique vocale +@unnumberedsubsubsec Références en matière de musique vocale +@translationof References for vocal music and lyrics + +Graver de la musique vocale soulève plusieurs problèmes@tie{}; ils +sont abordés soit dans ce chapitre, soit dans d'autres parties de la +documentation de LilyPond. + +@itemize +@item +La plupart du temps, les paroles ne sont constituées que de texte +simple. Cette forme de notation est abordée dans +@rlearning{Écriture de chants simples}. + +@item +La musique vocale nécessite souvent de recourir au mode @code{markup}, +aussi bien pour des paroles que pour d'autres éléments textuels comme le +nom des personnages. Cette syntaxe est expliquée dans +@ref{Introduction au formatage de texte}. + +@item +L'impression d'un @emph{ambitus} -- ou tessiture -- que l'on trouve en +tête de certaines partitions, est abordée dans @ref{Ambitus}. + +@item +Les indications de nuance viennent, par défaut, se placer sous la +portée. Il en va différemment pour la musique vocale, de telle sorte +qu'elles ne soient pas mélangées avec les paroles. Ceci fait l'objet de +la rubrique @ref{Mise en forme d'une partition chorale}. + +@end itemize + +@seealso +Glossaire musicologique : +@rglos{ambitus}. + +Manuel d'initiation : +@rlearning{Écriture de chants simples}. + +Manuel de notation : +@ref{Introduction au formatage de texte}, +@ref{Ambitus}, +@ref{Mise en forme d'une partition chorale}. + +Morceaux choisis : +@rlsrnamed{Vocal music,Musique vocale}. + + +@node Saisie des paroles +@unnumberedsubsubsec Saisie des paroles +@translationof Entering lyrics + +@cindex paroles +@cindex ponctuation +@cindex espaces, dans les paroles +@cindex guillemets, dans les paroles +@cindex ponctuation et paroles + +@funindex \lyricmode + +@c TODO should we explain hyphens here + +Il existe un mode de saisie spécialement adapté aux paroles. On +l'introduit avec le mot-clé @code{\lyricmode}, ou en utilisant +@code{\addlyrics} ou @code{\lyricsto}. Ce mode vous permet de saisir +des paroles ainsi que leur ponctuation, de telle sorte que le +caractère@tie{}@code{a} ne sera plus interprété comme une note, un +@notation{la} pour les non latinistes, mais comme une syllabe. Les +syllabes sont saisies comme des notes, mais les hauteurs sont alors +remplacées par du texte. Exemple avec une comptine anglaise@tie{}: + +@example +\lyricmode @{ Three4 blind mice,2 three4 blind mice2 @} +@end example + +Il y a deux manières principales de préciser la place exacte des +syllabes@tie{}: soit en spécifiant explicitement la durée de chaque +syllabe -- comme dans l'exemple ci-dessus -- soit en alignant +automatiquement les paroles sur les notes d'une mélodie ou d'une voix en +utilisant @code{\addlyrics} ou @code{\lyricsto}. La première méthode +est abordée plus en détail à la rubrique +@ref{Durée explicite des syllabes}, et la deuxième à la rubrique +@ref{Durée automatique des syllabes}. + +Dans les paroles, un mot ou une syllabe commence par une lettre de +l'alphabet, et se termine par une espace. Toute syllabe doit donc être +séparée d'une autre par une espace, tout autre caractère -- chiffre ou +ponctuation -- étant considéré comme partie intégrante de cette même +syllabe. L'exemple suivant comporte une faute de frappe évidente@tie{}: + +@example +\lyricmode @{ lah lah lah@} +@end example + +@noindent +la dernière syllabe contient une @code{@}}@tie{}; il y a de fait un +défaut de parité avec l'accolade ouvrante, et la compilation échouera +fort probablement. Prenez dès à présent l'habitude de toujours encadrer +d'espaces une accolade@tie{}: + +@example +\lyricmode @{ lah lah lah @} +@end example + +@cindex dérogations en mode paroles +@funindex \override en mode \lyricmode + +De la même manière, un point concluant une suite de lettres sera +partie intégrante de la chaîne résultante. Par conséquent, il est +impératif d'insérer des espaces lorsque vous modifiez les propriétés +d'une commande. En d'autres termes, @strong{ne saisissez pas} + +@example +\override Score.LyricText #'font-shape = #'italic +@end example + +@noindent +mais plutôt + +@example +\override Score . LyricText #'font-shape = #'italic +@end example + +Pour utiliser des lettres accentuées ou des caractères spéciaux +-- cœurs ou guillemets inversés par exemple -- il suffit de les insérer +dans le fichier et de veiller à le sauvegarder avec le codage UTF-8. +Voir à ce sujet @ref{Codage du texte} pour plus de détails. + +@lilypond[quote,verbatim] +\relative c'' { d8 c16 a bes8 f e' d c4 } +\addlyrics { „Schad’ um das schö -- ne grü -- ne Band, } +@end lilypond + +Pour utiliser des guillemets informatiques standard, faites-les +précéder d'une barre oblique inverse et encadrez d'une paire de +guillemets la syllabe ainsi composée@tie{}: + +@lilypond[quote,verbatim] +\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } +\addlyrics { "\"I" am so lone- "ly\"" said she } +@end lilypond + +Expliquer exactement comment LilyPond repère le début d'un mot en mode +paroles (@emph{Lyrics}) est quelque peu compliqué. En mode +@emph{Lyrics}, un mot peut commencer par@tie{}: tout caractère +alphabétique, @code{_}, @code{?}, @code{!}, @code{:}, @code{'}, un des +codes de contrôle @code{^A} à @code{^F} et @code{^Q} à @code{^W}, +@code{^Y}, @code{^^}, tout caractère ASCII de code strictement supérieur +à@tie{}127, ou enfin l'un des symboles @code{`}, @code{'}, @code{"}, ou +@code{^}, s'il est précédé d'une barre oblique inverse. + +@c " to balance double quotes for not-so-bright context-sensitive editors + +@seealso +Manuel d'initiation : +@rlearning{Chansons} + +Manuel de notation : +@ref{Durée automatique des syllabes}, +@ref{Durée explicite des syllabes}, +@ref{Fontes}, +@rusernamed{Input modes,Modes de saisie}. + +Référence des propriétés internes : +@rinternals{LyricText}. + + +@node Alignement des paroles sur la mélodie +@unnumberedsubsubsec Alignement des paroles sur la mélodie +@translationof Aligning lyrics to a melody + +@cindex paroles, alignement sur la mélodie +@cindex @code{associatedVoice} +@funindex \lyricmode +@funindex \addlyrics +@funindex \lyricsto + +L'impression des paroles est réalisée à partir de l'interprétation d'un +contexte @code{Lyrics} -- voir @ref{Tout savoir sur les contextes}. + +@example +\new Lyrics \lyricmode @{ @dots{} @} +@end example + +Vous disposez de deux méthodes pour aligner des paroles sur une +mélodie@tie{}: + +@itemize + +@item +Les paroles peuvent s'aligner automatiquement, la durée des syllabes +étant déterminée à partir d'un contexte de voix ou, dans certaines +circonstance, une mélodie associée, grâce aux commandes +@code{\addlyrics} et @code{\lyricsto} ou en définissant la propriété +@code{associatedVoice}. Ceci est détaillé à la rubrique +@ref{Durée automatique des syllabes}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e4 d c2 + } + >> + +% takes durations and alignment from notes in "one" + \new Lyrics \lyricsto "one" { + Life is __ _ love, live __ life. + } + +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +La première ligne de paroles est saisie selon la méthode la plus simple. + +Vous pouvez constater, dans la deuxième ligne, que les paroles +s'alignent selon les durées d'une voix différente. Ceci est +particulièrement utile lorsque le texte s'agence différemment selon les +couplets et que les durées sont accessibles grâce à des contextes +@code{Voice} particuliers. Pour de plus amples détails, rendez-vous à +la rubrique @ref{Couplets}. + +@item +Les paroles s'aligneront indépendamment de la valeur des notes dès lors +que vous utiliserez le mode @code{\lyricmode} et affecterez +explicitement leur durée à chaque syllabe. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice = "one" \relative c'' { + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + +% uses previous explicit duration of 2; + \new Lyrics \lyricmode { + Joy to the earth! + } + +% explicit durations, set to a different rhythm + \new Lyrics \lyricmode { + Life4 is love,2. live4 life.2 + } +>> +@end lilypond + +La première ligne de paroles ne s'aligne pas vraiment sur les notes +parce qu'aucune durée n'a été spécifiée. En fait, Lilypond adopte la +dernière durée mentionnée, un@tie{}2, et l'applique à chaque mot. + +La deuxième ligne illustre la manière d'aligner des paroles sans tenir +compte de la durée des notes. Cette façon de procéder permet de traiter +un alignement différent selon les couplets lorsqu'il n'y a pas moyen de +déduire les durées à partir d'un contexte musical@tie{}; la rubrique +@ref{Durée explicite des syllabes} aborde ceci plus en détails. Cette +technique permet aussi d'ajouter des dialogues, comme indiqué à la rubrique +@ref{Dialogue et musique}. + +Des paroles saisies de cette manière s'aligneront par défaut sur la +gauche des notes@tie{}; elles seront centrées sur les notes de la +mélodie dès lors que vous pourrez les associer à une voix. Tout ceci +est abordé plus en détails à la rubrique +@ref{Durée explicite des syllabes}. + +@end itemize + +@seealso +Manuel d'initiation : +@rlearning{Alignement des paroles sur une mélodie}. + +Référence des propriétés internes : +@rinternals{Lyrics}. + + +@node Durée automatique des syllabes +@unnumberedsubsubsec Durée automatique des syllabes +@translationof Automatic syllable durations + +@cindex syllabes, durée automatique +@cindex paroles et mélodies +@cindex associatedVoice + +@funindex \addlyrics +@funindex \lyricsto + +Les paroles peuvent être automatiquement alignées sous +une mélodie, de trois manières différentes@tie{}: + +@itemize + +@item +en utilisant la commande @code{\lyricsto} pour spécifier le contexte de +voix qui contient la mélodie, + +@item +en introduisant les paroles par la commande @code{\addlyrics}, placée +juste après le contexte @code{Voice} qui contient la mélodie, + +@item +en définissant la propriété @code{associatedVoice} pour synchroniser les +paroles avec un autre contexte de voix, ce à n'importe quel moment. + +@end itemize + +Ces trois méthodes permettent d'ajouter les traits d'union séparant les +syllabes d'un même mot ainsi que d'indiquer la tenue de la dernière +syllabe. Ceci fait l'objet de la rubrique +@ref{Traits d'union et de prolongation}. + +Le contexte @code{Voice} contenant la mélodie sur laquelle les paroles +vont s'aligner doit rester actif, au risque de voir la suite du texte +disparaître. Ceci peut se produire lorsqu'il y a des moments où l'on ne +chante pas. La rubrique @rusernamed{Keeping contexts alive, +Conservation d’un contexte} vous indiquera +comment maintenir un contexte actif. + + +@subheading Utilisation de @code{\lyricsto} +@c VO: Using @code{\lyricsto} + +@cindex \lyricsto +@funindex \lyricsto + +Vous pouvez aligner automatiquement des paroles sous une mélodie en +spécifiant à l'aide de la commande @code{\lyricsto} le contexte de voix +qui contient cette mélodie@tie{}: + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +<< + \new Voice = "melodie" { + a4 a a a + } + \new Lyrics \lyricsto "melodie" { + Ce sont les mots + } +>> +@end lilypond + +@noindent +Cette commande adapte les paroles aux notes de la voix (contexte +@code{Voice} dans le jargon LilyPond) @var{melodie}. Ce contexte +@code{Voice} doit exister avant l'affectation des paroles par +@code{\lyricsto}. La commande @code{\lyricsto} introduit +automatiquement le mode @code{\lyricmode}@tie{}; il n'est alors pas +nécessaire de rajouter @code{\lyricmode}. Les paroles viendront par +défaut se placer en dessous des notes@tie{}; la rubrique +@ref{Positionnement vertical des paroles} vous donnera des indications +pour d'autres options. + + +@subheading Utilisation de @code{\addlyrics} +@c VO: Using @code{\addlyrics} + +@cindex \addlyrics +@funindex \addlyrics + +La commande @code{\addlyrics} n'est en fait qu'une manière plus aisée +d'écrire de la musique vocale dans une structure Lilypond plus complexe. + +@example +@{ MUSIQUE @} +\addlyrics @{ PAROLES @} +@end example + +@noindent +revient au même que + +@example +\new Voice = "blah" @{ MUSIQUE @} +\new Lyrics \lyricsto "blah" @{ PAROLES @} +@end example + +En voici un exemple@tie{}: + +@lilypond[verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } +} +@end lilypond + +On peut ajouter davantage de couplets en multipliant le nombre de +sections @code{\addlyrics}. + +@lilypond[ragged-right,verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } + \addlyrics { speel het spel } + \addlyrics { joue le jeu } +} +@end lilypond + +Cependant, la commande @code{\addlyrics} ne peut pas gérer les +constructions polyphoniques. Dans ce cas, mieux vaut employer +@code{\lyricsto}. + + +@subheading Utilisation de associatedVoice +@c VO: Using associatedVoice + +La propriété @code{associatedVoice} permet de basculer de mélodie pour +la synchronisation des paroles. Elle s'emploie de la manière +suivante@tie{}: + +@example +\set associatedVoice = #"lala" +@end example + +@noindent +La valeur que vous attribuez à cette propriété (ici @code{"lala"}) +doit désigner un contexte @code{Voice} nommé, sans quoi les mélismes +ne seront pas imprimés correctement. + +Voici un exemple de cette manière de procéder@tie{}: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e8 d4. c2 + } + >> +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +@seealso +Manuel de notation : +@ref{Traits d'union et de prolongation}, +@ref{Conservation d'un contexte}. + + +@node Durée explicite des syllabes +@unnumberedsubsubsec Durée explicite des syllabes +@translationof Manual syllable durations + +On peut aussi se passer de @code{\addlyrics}, @code{\lyricsto} et +@code{associatedVoice} pour saisir des paroles. Dans ce cas, les +syllabes sont entrées comme des notes -- du texte remplaçant les +hauteurs -- ce qui veut dire que vous devez définir leur durée +explicitement. + +Par défaut, les syllabes seront alignées par la gauche sur l'instant +musical. Les traits d'union seront imprimés entre les syllabes, à +l'inverse des mélismes puisqu'il n'y a pas de voix associée. + +Voici deux illustrations de cette technique@tie{}: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g2 f + } + \new Lyrics \lyricmode { + play1 the4 game4 + } +>> +@end lilypond + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + c2 c2 + d1 + } + } + \new Lyrics { + \lyricmode { + I2 like4. my8 cat!1 + } + } + \new Staff { + \relative c' { + c8 c c c c c c c + c8 c c c c c c c + } + } +>> +@end lilypond + +Cette manière de procéder est tout à fait adaptée lorsqu'un fond musical +accompagne des dialogues -- voir @ref{Dialogue et musique}. + +Les syllabes seront centrées par rapport à l'instant musical dès lors +que vous aurez attribué à la propriété @code{associatedVoice} le nom du +contexte @code{Voice} contenant les notes. Grâce à l'utilisation de +@code{associatedVoice}, les doubles tirets @code{--} ou soulignés +@code{__} seront rendus correctement en trait d'union ou indication de +mélisme. + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g f g + } + \new Lyrics \lyricmode { + \set associatedVoice = #"melody" + play2 the4 game2. __ + } +>> +@end lilypond + +@c TODO see also feature request 707 - show how to do this with manual durations + +@seealso +Manuel de notation : +@ref{Dialogue et musique}. + +Référence des propriétés internes : +@rinternals{Lyrics}, +@rinternals{Voice}. + + +@node Plusieurs syllabes sur une note +@unnumberedsubsubsec Plusieurs syllabes sur une note +@translationof Multiple syllables to one note + +@cindex liaisons, dans les paroles +@cindex espaces dans les paroles +@cindex guillemets dans les paroles + +@funindex _ + +Pour attribuer plus d'une syllabe à une même note, vous pouvez soit les +mettre entre guillemets, soit utiliser le caractère souligné +(@code{_}) pour obtenir une espace, ou bien encore utiliser un tilde +(@code{~}) pour obtenir une liaison entre les syllabes. Cette +liaison adaptée aux paroles correspond au caractère Unicode +@code{U+203F}, et n'apparaîtra dans la partition que si le système +dispose d'une police installée qui contient ce symbole. Un certain +nombre de fontes librement disponibles en disposent, comme FreeSerif +(un clone de Times), `DejaVuSans' (mais pas DejaVuSerif) ou +TeXGyreSchola (un clone de Century Schoolbook). + +@lilypond[quote,ragged-right,verbatim] +{ + \time 3/4 + \relative c' { c2 e4 g2 e4 } + \addlyrics { gran- de_a- mi- go } + \addlyrics { pu- "ro y ho-" nes- to } + \addlyrics { pu- ro~y~ho- nes- to } +} +@end lilypond + + +@seealso +Référence des propriétés internes : +@rinternals{LyricCombineMusic}. + + +@node Plusieurs notes pour une même syllabe +@unnumberedsubsubsec Plusieurs notes pour une même syllabe +@translationof Multiple notes to one syllable + +@cindex mélisme +@cindex vocalise +@cindex phrasé, pour des paroles + +@funindex \melisma +@funindex \melismaEnd + +Parfois, tout particulièrement dans la musique médiévale, plusieurs +notes correspondent à une même syllabe. Ces vocalises sont appelées +@rglosnamed{melisma,mélismes}. La syllabe à vocaliser est +traditionnellement alignée sur la gauche de la première note du mélisme. + +Lorsqu'un mélisme tombe sur une syllabe autre que la dernière d'un mot, +un trait d'union étiré, indiqué par un double tiret @code{--} dans le +fichier source, reliera cette syllabe à la suivante. + +Lorsqu'un mélisme tombe sur la dernière syllabe d'un mot ou que ce mot +n'en comporte qu'une, l'usage est d'indiquer la @qq{tenue} jusqu'à la +dernière note de la vocalise. Ceci s'obtient en ajoutant un double +caractère souligné @code{__} après cette syllabe. + +Vous disposez de cinq méthodes pour indiquer la présence d'un +mélisme@tie{}: + +@itemize + +@item +Une liaison de prolongation constitue de fait un mélisme@tie{}: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g2 ~ | + g4 e2 ~ | + e8 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +LilyPond considère une liaison d'articulation comme un mélisme -- il +s'étendra de la première à la dernière note couvertes par cette +liaison. Il s'agit là de la façon traditionnelle de saisir des +paroles@tie{}: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 ( f e f ) + e8 ( d e2 ) + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +LilyPond considère des notes regroupées par une ligature manuelle comme +un mélisme, si tant est que la procédure de ligature automatique a été +désactivée -- voir @ref{Définition des règles de ligature automatique}. + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + \autoBeamOff + f4 g8[ f e f] + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond + +Ceci ne peut, vous en conviendrez, prendre en compte des durées +plus longues que la croche. + +@item +LilyPond considère un groupe de notes non liées, mais encadrées par +@code{\melisma} et @code{\melismaEnd}, comme constituant un +mélisme@tie{}: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 + \melisma + f e f + \melismaEnd + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond +@ignore I don't see why -jcm +Note that this method cannot be used to indicate two melismata if +the first one is immediately followed by another. +@end ignore +@item +Vous pouvez indiquer un mélisme directement dans les paroles, à l'aide +d'un caractère souligné simple @code{_}, pour chaque note faisant partie +de la vocalise@tie{}: + +@lilypond[verbatim, quote, relative=2] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 f e f + e8 d e2 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ _ _ e __ _ _ + } +>> +@end lilypond + +@end itemize + +Vous pouvez totalement désactiver l'interprétation des liaisons de +prolongation ou d'articulation et des ligatures apparaissant dans une +mélodie comme fait générateur d'un mélisme. Il suffit en ce cas de +définir @code{melismaBusyProperties}@tie{}: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e e -- le -- i -- son + } +>> +@end lilypond + +Certains réglages de @code{melismaBusyProperties} permettent de prendre +en compte ou non les liaisons de tenue, les liaisons d'articulation et +les ligatures dans la détection automatique des mélismes -- voir +@code{melismaBusyProperties} à la rubrique +@rinternalsnamed{Tunable context properties, +propriétés de contexte ajustables (en anglais)}. + +Dans le cas où les indications de mélisme doivent être totalement +ignorées, il vous faudra alors activer @code{ignoreMelismata} -- voir +@ref{Rythme différent selon le couplet}. + +Lorsque, dans un passage où la propriété @code{melismaBusyProperties} +est active, survient un mélisme, vous pouvez l'indiquer dans les paroles +par un simple caractère souligné pour chaque note à inclure@tie{}: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] ~ f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ e __ _ _ _ + } +>> +@end lilypond + + +@predefined + +@code{\autoBeamOff}, +@code{\autoBeamOn}, +@code{\melisma}, +@code{\melismaEnd}. +@endpredefined + + +@seealso +Glossaire musicologique : +@rglos{melisma}. + +Manuel d'initiation : +@rlearning{Alignement des paroles sur une mélodie}. + +Manuel de notation : +@ref{Alignement des paroles sur la mélodie}, +@ref{Durée automatique des syllabes}, +@ref{Définition des règles de ligature automatique}, +@ref{Rythme différent selon le couplet}. + +Référence des propriétés internes : +@rinternals{Tunable context properties}. + +@knownissues + +Certains mélismes ne sont pas détectés automatiquement@tie{}; vous devrez +alors prolonger vous-même les syllabes concernées à l'aide d'un double +caractère souligné. + + +@node Traits d'union et de prolongation +@unnumberedsubsubsec Traits d'union et de prolongation +@translationof Extenders and hyphens + +@cindex mélisme +@cindex extenseur +@cindex prolongateur + +@c leave this as samp. -gp +Un mélisme sur la dernière syllabe d'un mot est indiqué par une longue +ligne horizontale basse s'étirant jusqu'à syllabe suivante. Une telle +ligne, que nous appellerons prolongateur ou extenseur, s'obtient en +saisissant @samp{ __ } (notez les espaces entourant le double caractère +souligné). + +@warning{Dans une partition, les mélismes, ou vocalises, sont +matérialisés par une ligne de prolongation. On l'indique par un double +caractère souligné. Lorsqu'ils sont assez courts, ces mélismes peuvent +s'indiquer par un souligné unique, ce qui aura pour effet de sauter une +note à chaque fois et de ne pas imprimer de ligne.} + +@cindex trait d'union + +@c leave this as samp. -gp +Un trait d'union séparant deux syllabes d'un même mot s'obtient en +saisissant @samp{ -- } (notez les espaces entourant le tiret double). +Ce trait d'union sera centré entre les deux syllabes et sa longueur +sera proportionnelle à l'espace les séparant. + +Dans les partitions très serrées, les traits d'union peuvent ne pas être +imprimés. Cet inconvénient peut être contrôlé par les propriétés +@code{minimum-distance} pour gérer l'espace minimum entre deux syllabes, +et @code{minimum-length}, seuil en deçà duquel il n'y a pas de trait +d'union, toutes deux attachées à l'objet @code{LyricHyphen}. + + +@seealso +Référence des propriétés internes : +@rinternals{LyricExtender}, +@rinternals{LyricHyphen} + + +@node Situations particulières en matière de paroles +@subsection Situations particulières en matière de paroles +@translationof Specific uses of lyrics + +@c FIXME This whole section is to be reorganized + +@menu +* Travail avec des paroles et variables:: +* Positionnement vertical des paroles:: +* Positionnement horizontal des syllabes:: +* Paroles et reprises:: +* Paroles alternatives:: +@end menu + +@node Travail avec des paroles et variables +@unnumberedsubsubsec Travail avec des paroles et variables +@translationof Working with lyrics and variables + +@cindex paroles, variables +@cindex paroles, identificateurs + +Vous pouvez créer des variables pour contenir les paroles, dès lors que +vous faites appel au mode approprié@tie{}: + +@lilypond[quote,verbatim] +musicOne = \relative c'' { + c4 b8. a16 g4. f8 e4 d c2 +} +verseOne = \lyricmode { + Joy to the world, the Lord is come. +} +\score { + << + \new Voice = "one" { + \time 2/4 + \musicOne + } + \new Lyrics \lyricsto "one" { + \verseOne + } + >> +} +@end lilypond + +La fonction @code{\lyricmode} permet de définir une variable pour +les paroles. Point n'est besoin de spécifier les durées si vous +utilisez @code{\addlyrics} ou @code{\lyricsto} lorsque vous y faites +référence. + +Pour une organisation différente ou plus complexe, mieux vaut +commencer par créer et alimenter les variables contenant mélodies et +paroles, puis définir la hiérarchie des portées et des lignes de +paroles, et enfin combiner correctement mélodies et paroles à l'aide de +la commande @code{\context}. Vous serez ainsi assuré que la voix à +laquelle il est fait référence par @code{\lyricsto} aura bien été +préalablement définie, comme dans l'exemple suivant@tie{}: + +@lilypond[quote,verbatim] +sopranoMusic = \relative c'' { c4 c c c } +contraltoMusic = \relative c'' { a4 a a a } +sopranoWords = \lyricmode { Sop -- ra -- no words } +contraltoWords = \lyricmode { Con -- tral -- to words } + +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \sopranoMusic + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" + \new Staff { + \new Voice = "contraltos" { + \contraltoMusic + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + \sopranoWords + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + \contraltoWords + } + } + >> +} +@end lilypond + + +@seealso +Manuel de notation : +@ref{Positionnement vertical des paroles}. + +Référence des propriétés internes : +@rinternals{LyricCombineMusic}, +@rinternals{Lyrics}. + + +@node Positionnement vertical des paroles +@unnumberedsubsubsec Positionnement vertical des paroles +@translationof Placing lyrics vertically + +@cindex positionnement des paroles +@cindex paroles, positionnement + +Selon le type de musique, les paroles apparaîtront au-dessus ou +au-dessous d'une portée ou bien entre deux portées. Positionner des +paroles en dessous de la portée à laquelle elles se rattachent est de +loin la chose la plus simple@tie{}: il suffit de mentionner le contexte +de paroles après le contexte de portée@tie{}: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Positionner les paroles au-dessus de la portée se fait de deux manières +différentes, le plus simple étant d'utiliser la même syntaxe que +ci-dessus, à ceci près que la ligne de paroles sera positionnée de +manière explicite@tie{}: + +@lilypond[quote,verbatim] +\score { + << + \new Staff = "staff" { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics \with { alignAboveContext = "staff" } { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Autre façon de procéder, cette fois-ci en deux étapes. Nous commençons +par déclarer un contexte @code{Lyrics} que nous laissons vide, puis +les contextes @code{Staff} et @code{Voice}. Dans un deuxième temps, +nous ajoutons l'instruction @code{\context} et la commande +@code{\lyricsto} pour affecter les paroles au contexte de voix en +question. Voici comment cela se présente@tie{}: + +@lilypond[quote,verbatim] +\score { + << + \new Lyrics = "lyrics" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \context Lyrics = "lyrics" { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Lorsque deux voix sont isolées chacune sur une portée, vous pouvez +placer les paroles entre les deux portées en utilisant l'une des +méthodes que nous venons de voir. En voici un exemple, basé sur la +deuxième méthode@tie{}: + +@lilypond[quote,verbatim] +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \relative c'' { c4 c c c } + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "contraltos" { + \relative c'' { a4 a a a } + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + Sop -- ra -- no words + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + Con -- tral -- to words + } + } + >> +} +@end lilypond + +Vous pouvez générer d'autres combinaisons de paroles et portées à partir +de ces exemples, ou en examinant les +@rlearningnamed{Ensemble vocal,modèles} inclus dans le manuel +d'initiation. + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{lyrics-old-spacing-settings.ly} + + +@seealso +Manuel d'initiation : +@rlearning{Ensemble vocal}. + +Manuel de notation : +@ref{Alignement des contextes}, +@ref{Création d'un contexte}. + + +@node Positionnement horizontal des syllabes +@unnumberedsubsubsec Positionnement horizontal des syllabes +@translationof Placing syllables horizontally + +@cindex espacement des paroles +@cindex paroles, gestion de l'espacement + +La propriété @code{#'minimum-distance} de l'objet @code{LyricSpace} +permet d'accroître l'espacement des paroles. + +@lilypond[relative=1,verbatim,quote,ragged-right] +{ + c c c c + \override Lyrics.LyricSpace #'minimum-distance = #1.0 + c c c c +} +\addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext +} +@end lilypond + +@noindent +Pour que ce réglage s'applique à toute la partition, définissez-le +dans le bloc @code{\layout}. + +@lilypond[verbatim,quote,ragged-right] +\score { + \relative c' { + c c c c + c c c c + } + \addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext + } + \layout { + \context { + \Lyrics + \override LyricSpace #'minimum-distance = #1.0 + } + } +} +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{lyrics-alignment.ly} + +@c TODO: move to LSR -vv + +L'assurance que tous les scripts textuels et les paroles resteront bien +à l'intérieur des marges requiert des ressources non négligeables. +Afin de réduire le temps de traitement, LilyPond n'effectue pas ces +calculs par défaut@tie{}; pour l'y obliger, vous devrez ajouter + +@example +\override Score.PaperColumn #'keep-inside-line = ##t +@end example + +Pour s'assurer que les paroles ne seront pas traversées par des barres +de mesure, il faut ajouter + +@example +\layout @{ + \context @{ + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + \override BarLine #'transparent = ##t + @} +@} +@end example + +@c TODO Create and add lsr example of lyricMelismaAlignment +@c It's used like this to center-align all lyric syllables, +@c even when notes are tied. -td + +@ignore +\layout +{ + \context { \Score lyricMelismaAlignment = #0 } +} +@end ignore + + +@node Paroles et reprises +@unnumberedsubsubsec Paroles et reprises +@translationof Lyrics and repeats + +@cindex reprise et paroles +@cindex paroles et répétition + +La répétition de @i{fragments musicaux} est abordée de manière détaillée +dans un @rusernamed{Répétitions et reprises,chapitre spécifique}. Nous +nous intéresserons ici aux moyens d'ajouter des paroles à des reprises. + +@subheading Reprises simples +@c VO: Simple repeats + +Les paroles attachées à un fragment musical répété devraient adopter +rigoureusement la même construction que la musique, si tant est qu'elles +ne diffèrent pas d'une fois sur l'autre. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> +} +@end lilypond + +Les mots seront alors correctement répétés si la reprise est développée. + +@lilypond[verbatim,quote] +\score { + \unfoldRepeats { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> + } +} +@end lilypond + +Lorsque la reprise est développée et que les paroles diffèrent, +saisissez le texte normalement@tie{}: + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat unfold 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + The first time words. + Sec -- ond time words. + } + } + >> +} +@end lilypond + +Lorsque les paroles diffèrent pour une reprise non développée -- +utiliation de @code{volta} au lieu de @code{unfold} -- les paroles en +question doivent être saisies dans des contextes @code{Lyrics} +séparés@tie{}; ils seront combinés dans une section parallèle@tie{}: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics \lyricsto "melody" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "melody" + Sec -- ond time words. + } + >> + } + >> +} +@end lilypond + +Et ce quel que soit le nombre de @qq{couplets}@tie{}: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "singleVoice" { + \relative c'' { + a4 a a a + \repeat volta 3 { b4 b b b } + c4 c c c + } + } + } + \new Lyrics \lyricsto "singleVoice" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "singleVoice" + Sec -- ond time words. + } + \new Lyrics { + \set associatedVoice = "singleVoice" + The third time words. + } + >> + The end sec -- tion. + } + >> +} +@end lilypond + + +@c TODO positioning a common line of lyrics + + +@subheading Reprises avec alternative +@c VO: Repeats with alternative endings + +@cindex paroles, reprise avec alternative +@cindex reprise avec alternative et paroles +@cindex alternative et paroles + +Les paroles d'un fragment répété, lorsqu'elles sont identiques, peuvent +adopter la même construction que la musique@tie{}: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- } + \alternative { { ed twice. } { ed twice. } } + } + } + >> +} +@end lilypond + +Cette identité de structure n'est toutefois pas possible lorsque les +paroles sont différentes. Des instructions @code{\skip} devront venir +s'insérer dans les paroles pour @qq{sauter} les notes des alternatives +qui ne les concernent pas. + +N'utilisez pas de simple caratère souligné pour sauter une note. +N'oubliez pas qu'un caractère souligné indique un mélisme@tie{}; la +syllabe précédente sera donc alignée à gauche. + +@warning{La commande @code{@bs{}skip} doit comporter une durée quelle +qu'elle soit -- elle sera toujours ignorée lorsque les paroles sont +associées à une mélodie à l'aide de @code{@bs{}addlyrics} ou +@code{@bs{}lyricsto}. Chaque @code{@bs{}skip} correspond à une seule +note quelle qu'en soit la durée.} + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + The first time words. + \repeat unfold 2 { \skip 1 } + End here. + } + } + \new Lyrics { + \lyricsto "melody" { + Sec -- ond + \repeat unfold 2 { \skip 1 } + time words. + } + } + >> +} +@end lilypond + +@cindex paroles et liaison de prolongation +@funindex \repeatTie + +Lorsqu'une note se prolonge sur les alternatives, la tenue est +indiquée normalement pour la première alternative, et à l'aide de +l'instruction @code{\repeatTie} pour les suivantes. Cette liaison +@qq{de répétition} pose problème en matière d'alignement des paroles +puisque la longueur de l'alternative est accrue en raison de la liaison. + +D'autre part, une liaison de prolongation crée un mélisme qui sera +effectif pour la première alternative, mais pas pour les autres. La +solution pour recaler les paroles, consiste à désactiver temporairement +la détection automatique de mélismes et insérer des @qq{blancs}. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \set melismaBusyProperties = #'() + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + \unset melismaBusyProperties + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + \repeat volta 2 { Here's a __ } + \alternative { + { \skip 1 verse } + { \skip 1 sec } + } + ond one. + } + } + >> +} +@end lilypond + +Notez bien que l'utilisation conjointe de @code{\unfoldRepeats} et de +@code{\repeatTie} entraîne l'impression d'une double liaison, sauf à +supprimer les @code{\repeatTie}. + +Lorsque les paroles sont différentes sur le fragment répété, la +construction avec @code{\repeat} est inefficace@tie{}; vous devrez alors +insérer des blancs@tie{}: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's one + \repeat unfold 2 { \skip 1 } + more to sing. + } + } + >> +} +@end lilypond + +Les indications de mélisme et traits d'union en début d'alternative +doivent être insérés manuellement@tie{}: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's "a_" + \skip 1 + "_" sec -- ond one. + } + } + >> +} +@end lilypond + + +@seealso +Manuel de notation : +@ref{Conservation d'un contexte}, +@ref{Répétitions et reprises}. + + +@node Paroles alternatives +@unnumberedsubsubsec Paroles alternatives +@translationof Divisi lyrics + +@cindex division et paroles +@cindex paroles divisées (reprises) +@cindex variante rythmique + +Il arrive parfois, dans un fragment répété, qu'une note soit divisée +pour répondre au texte. Vous pouvez indiquer cette adaptation rythmique +en désactivant temporairement la détection automatique des mélismes tout +en spécifiant ces mélismes au niveau des paroles@tie{}: + +@lilypond[quote,verbatim] +\score { + << + \new Voice = "melody" { + \relative c' { + \set melismaBusyProperties = #'() + \slurDown + \slurDashed + e4 e8 ( e ) c4 c | + \unset melismaBusyProperties + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "melody" { + We will _ + } + >> +} +@end lilypond + +En donnant un nom à chaque voix et en leur attribuant spécifiquement +des paroles, vous pourez traiter le cas où notes et rythme diffèrent +d'une fois sur l'autre@tie{}: + +@lilypond[verbatim,ragged-right,quote] +\score { + << + \new Voice = "melody" { + \relative c' { + << + { + \voiceOne + e4 e8 e + } + \new Voice = "splitpart" { + \voiceTwo + c4 c + } + >> + \oneVoice + c4 c | + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "splitpart" { + We will + } + >> +} +@end lilypond + + +@node Couplets +@subsection Couplets +@translationof Stanzas + +@menu +* Numérotation des couplets:: +* Indication de nuance dans les couplets:: +* Indication du personnage et couplets:: +* Rythme différent selon le couplet:: +* Paroles en fin de partition:: +* Paroles sur plusieurs colonnes en fin de partition:: +@end menu + + +@node Numérotation des couplets +@unnumberedsubsubsec Numérotation des couplets +@translationof Adding stanza numbers + +@cindex numéro de couplet + +On peut ajouter un numéro aux couplets en définissant la variable +@code{stanza}@tie{}: + +@lilypond[quote,ragged-right,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set stanza = #"1. " + Hi, my name is Bert. +} \addlyrics { + \set stanza = #"2. " + Oh, ché -- ri, je t'aime +} +@end lilypond + +@noindent +Ces numéros se placeront juste avant le début de la première syllabe. + +@c TODO Create and add snippet to show how two lines of a +@c stanza can be grouped together, along these lines: +@c (might need improving a bit) -td + +@ignore +leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup +#"brace105" } + +stanzaOneOne = { + \set stanza = \markup { "1. " \leftbrace } + \lyricmode { Child, you're mine and I love you. + Lend thine ear to what I say. + + } +} + +stanzaOneThree = { +% \set stanza = \markup { " "} + \lyricmode { Child, I have no great -- er joy + Than to have you walk in truth. + + } +} + +\new Voice { + \repeat volta 2 { c'8 c' c' c' c' c' c'4 + c'8 c' c' c' c' c' c'4 } +} \addlyrics { \stanzaOneOne } + \addlyrics { \stanzaOneThree } + +@end ignore + + +@node Indication de nuance dans les couplets +@unnumberedsubsubsec Indication de nuance dans les couplets +@translationof Adding dynamics marks to stanzas + +Lorsque des couplets ont des nuances différentes, vous pouvez ajouter +une nuance en regard de chacun d'eux. L'objet @code{StanzaNumber} +contient tout ce qui se place avant les paroles du couplet. Pour des +raisons techniques, vous devrez définir la variable @code{stanza} en +dehors du mode @code{\lyricmode}. + +@lilypond[quote,ragged-right,verbatim] +text = { + \set stanza = \markup { \dynamic "ff" "1. " } + \lyricmode { + Big bang + } +} + +<< + \new Voice = "tune" { + \time 3/4 + g'4 c'2 + } +\new Lyrics \lyricsto "tune" \text +>> +@end lilypond + + +@node Indication du personnage et couplets +@unnumberedsubsubsec Indication du personnage et couplets +@translationof Adding singers' names to stanzas + +@cindex nom de personnage +@cindex nom du chanteur +@cindex rôle + +On peut également ajouter le nom de chaque rôle@tie{}; ils s'imprimeront +au début de chaque ligne comme les noms d'instrument. Il faut pour cela +définir @code{vocalName}, et @code{shortVocalName} pour une version +abrégée. + +@lilypond[ragged-right,quote,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set vocalName = #"Bert " + Hi, my name is Bert. +} \addlyrics { + \set vocalName = #"Ernie " + Oh, ché -- ri, je t'aime +} +@end lilypond + + +@node Rythme différent selon le couplet +@unnumberedsubsubsec Rythme différent selon le couplet +@translationof Stanzas with different rhythms + +Il arrive assez souvent que le paroles de différents couplets, bien +qu'attachées à une même mélodie, ne s'articulent pas de la même manière. +La commande @code{\lyricsto} est cependant capable de gérer de telles +situations. + + +@subsubheading Mélismes dans certaines strophes seulement +@c VO: Ignoring melismata + +Il peut survenir que les paroles comportent un mélisme pour l'un des +couplets, mais plusieurs syllabes pour d'autres. Une solution consiste +à ignorer temporairement les mélismes dans le couplet ayant le plus de +syllabes. Il suffit pour cela de définir la propriété +@code{ignoreMelismata} à l'intérieur du contexte @code{Lyrics}. + +Petit détail qui a son importance@tie{}: l'activation de +@code{ignoreMelismata} doit @strong{précéder} la syllabe à partir de +laquelle elle s'appliquera@tie{}: + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + \slurDotted + f8.[( g16]) + a4 + } + \new Lyrics \lyricsto "lahlah" { + more slow -- ly + } + \new Lyrics \lyricsto "lahlah" { + go + \set ignoreMelismata = ##t + fas -- ter + \unset ignoreMelismata + still + } +>> +@end lilypond + +@knownissues +Contrairement aux autres utilisations de l'instruction @code{\set}, il +n'est pas possible de la faire précéder d'un @code{\once} dans le cas de +@code{\set@tie{}ignoreMelismata}. Les paroles affectées par la +propriété @code{ignoreMelismata} @strong{doivent} être encadrées +respectivement d'un @code{\set} et d'un @code{\unset}. + + +@subsubheading Syllabe sur note de passage +@c VO: Adding syllables to grace notes + +@cindex ornements et paroles +@cindex paroles et ornements + +L'utilisation de la commande @code{\lyricsto} ne permet pas, par +défaut, d'assigner une syllabe à des notes d'ornement -- introduites par +la commande @code{\grace}. Vous pouvez cependant y parvenir grâce à la +propriété @code{includeGraceNotes}@tie{}: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + f4 \appoggiatura a32 b4 + \grace { f16[ a16] } b2 + \afterGrace b2 { f16[ a16] } + \appoggiatura a32 b4 + \acciaccatura a8 b4 + } + \new Lyrics + \lyricsto melody { + normal + \set includeGraceNotes = ##t + case, + gra -- ce case, + after -- grace case, + \set ignoreMelismata = ##t + app. case, + acc. case. + } +>> +@end lilypond + +@knownissues +Tout comme pour la propriété @code{associatedVoice}, la propriété +@code{includeGraceNotes} doit être activée au moins une syllabe avant +celle qui viendra s'attacher à la note d'ornement. Dans le cas où cette +note se trouve être la première de la pièce, vous devrez recourir à une +clause @code{\with} ou @code{\context}@tie{}: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + \grace { c16[( d e f] } + g1) f + } + \new Lyrics \with { includeGraceNotes = ##t } + \lyricsto melody { + Ah __ fa + } +>> +@end lilypond + + +@subsubheading Basculer vers une mélodie alternative +@c VO: Switching to an alternative melody + +@cindex associatedVoice +@cindex alternative, bascule sur une mélodie +@cindex mélodie alternative + +On peut créer des variations plus complexes à partir d'une mélodie à +plusieurs voix. Les paroles peuvent suivre l'une ou l'autre des +lignes mélodiques, et même basculer de l'une à l'autre si l'on +modifie la propriété @code{associatedVoice}. Dans cet exemple, + +@lilypond[ragged-right,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + << + \new Voice = "alternative" { + \voiceOne + \times 2/3 { + % show associations clearly. + \override NoteColumn #'force-hshift = #-3 + f8 f g + } + } + { + \voiceTwo + f8.[ g16] + \oneVoice + } >> + a8( b) c + } + \new Lyrics \lyricsto "lahlah" { + Ju -- ras -- sic Park + } + \new Lyrics \lyricsto "lahlah" { + % Tricky: need to set associatedVoice + % one syllable too soon! + \set associatedVoice = alternative % applies to "ran" + Ty -- + ran -- + no -- + \set associatedVoice = lahlah % applies to "rus" + sau -- rus Rex + } >> +@end lilypond + +@noindent +le texte du premier couplet s'aligne de manière habituelle sur la +mélodie nommée @qq{lahlah}. Mais le second couplet, tout d'abord +rattaché au contexte @code{lahlah}, bascule sur la mélodie +@code{alternative} pour les syllabes @qq{ran} à @qq{sau} grâce aux lignes + +@example +\new Lyrics \lyricsto "lahlah" @{ + \set associatedVoice = alternative % s'applique à "ran" + Ty -- + ran -- + no -- + \set associatedVoice = lahlah % s'applique à "rus" + sau -- rus Rex +@} +@end example + +@noindent +où @code{alternative} désigne le nom du contexte @code{Voice} qui contient +le triolet. + +notez bien où apparaît la commande @code{\set associatedVoice} -- +une syllabe en avance, ce qui est tout à fait correct. + +@warning{La commande @code{@bs{}set associatedVoice} @strong{doit} +intervenir une syllabe @i{avant} celle qui sera suivie par la bascule. +Autrement dit, une modification de la voix associée sera effective une +syllabe plus tard que prévu. Il ne s'agit en aucun cas d'un bogue, la +raison en est purement technique.} + + +@node Paroles en fin de partition +@unnumberedsubsubsec Paroles en fin de partition +@translationof Printing stanzas at the end + +Il peut parfois s'avérer opportun d'aligner un seul couplet sur la +mélodie, et de présenter tous les autres en bloc à la fin du morceau. +Ces couplets additionnels peuvent être inclus dans une section +@code{\markup} en dehors du bloc @code{\score} principal. +Vous en trouverez un exemple ci-dessous@tie{}; notez également les deux +méthodes différentes employées pour indiquer les sauts de ligne, +entre les couplets (@emph{verses} en anglais) 2 et 3. + +@c KEEPLY +@lilypond[ragged-right,verbatim,quote] +melody = \relative c'' { + \time 2/4 + g4 g8 b | b a b a | + g4 g8 b | b a b4 | +} + +text = \lyricmode { +\set stanza = #"1." À la clai- re fon- tai- ne, +M'en al- lant pro- me- ner... +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text +>> + \layout { } +} +\markup { \column{ + \line{ Verse 2. } + \line{ Sous les feuilles d'un chêne } + \line{ Je me suis fait sécher... } + } +} +\markup{ + \wordwrap-string #" + Verse 3. + + Chante, rossignol, chante, + + Toi qui as le cœur gai..." +} +@end lilypond + + +@node Paroles sur plusieurs colonnes en fin de partition +@unnumberedsubsubsec Paroles sur plusieurs colonnes en fin de partition +@translationof Printing stanzas at the end in multiple columns + +Si les couplets sont vraiment nombreux, il est possible de les imprimer +sur plusieurs colonnes. L'exemple suivant vous montre comment procéder +pour que le numéro du couplet soit en retrait à gauche, comme c'est +traditionnellement le cas. + +@c KEEPLY +@lilypond[ragged-right,quote,verbatim] +melody = \relative c'' { + \time 2/4 + g4 g8 b | b a b a | + g4 g8 b | b a b4 | +} + +text = \lyricmode { + \set stanza = #"1." À la clai- re fon- tai- ne, + M'en al- lant pro- me- ner... +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text + >> + \layout { } +} + +\markup { + \fill-line { + \hspace #0.1 % décalage par rapport à la marge de gauche + % peut être supprimé si l'espace sur la page est réduit + \column { + \line { \bold "2." + \column { + "Sous les feuilles d'un chêne" + "Je me suis fait sécher..." + } + } + \hspace #0.1 % ajout d'espace vertical entre les couplets + \line { \bold "3." + \column { + "Chante, rossignol, chante," + "Toi qui as le cœur gai..." + } + } + } + \hspace #0.1 % ajout d'espace horizontal entre les colonnes + % si elles sont toujours trop proches, ajouter d'autres paires de " " + % jusqu'à ce que le résultat soit acceptable. + \column { + \line { \bold "4." + \column { + "J'ai perdu mon ami" + "Sans l'avoir mérité..." + } + } + \hspace #0.1 % ajout d'espace vertical entre les couplets + \line { \bold "5." + \column { + "Je voudrais que la rose" + "Fût encore au rosier..." + } + } + } + \hspace #0.1 % décalage par rapport à la marge de droite + % peut être supprimé si l'espace sur la page est réduit + } +} +@end lilypond + + +@seealso +Référence des propriétés internes : +@rinternals{LyricText}, +@rinternals{StanzaNumber}. + + +@node Chansons +@subsection Chansons +@translationof Songs + +@menu +* Références en matière de chanson:: +* Feuille de chant:: +@end menu + +@node Références en matière de chanson +@unnumberedsubsubsec Références en matière de chanson +@translationof References for songs + +Une chanson se présente la plupart du temps sous la forme de trois +portées@tie{}: une pour la mélodie surmontant un système pianistique +pour l'accompagnement@tie{}; les paroles du premier couplet s'accolent +sous la mélodie. S'il n'y a que deux ou trois couplets, et que cela +n'est pas génant au niveau de l'aspect général, tous peuvent prendre +place entre la mélodie et l'accompagnement. Dans le cas contraire, le +premier couplet sera imprimé sous la mélodie et les suivants après la +partition, sous forme de blocs de texte indépendants. + +Tous les éléments qui permettent d'imprimer des chansons sont examinés à +différents endroits de la documentation de LilyPond@tie{}: + +@itemize + +@item +L'agencement des portées est abordé au chapitre +@ref{Gravure des portées}. + +@item +Les spécificités du piano sont abordées au chapitre +@ref{Instruments utilisant des portées multiples}. + +@item +L'affectation de paroles à une ligne mélodique est abordée au chapitre +@ref{Vue d'ensemble de la musique vocale}. + +@item +Le positionnement des paroles fait l'objet d'une +@rusernamed{Positionnement vertical des paroles, rubrique dédiée}. + +@item +La gestion des couplets est abordée dans un +@rusernamed{Couplets,chapitre spécifique}. + +@item +L'harmonisation d'une chanson est souvent indiquée par des noms d'accord +en surplomb de la mélodie. Ceci est abordé au chapitre +@ref{Gravure des accords}. + +@item +L'impression de diagrammes d'accord lorsque l'accompagnement est fait à +la guitare est expliqué à la rubrique @qq{Tablatures sous forme +d’étiquette}, au chapitre @ref{Vue d'ensemble des cordes frettées}. + +@end itemize + +@seealso +Manuel d'initiation : +@rlearning{Chansons}. + +Manuel de notation : +@ref{Vue d'ensemble de la musique vocale}, +@ref{Gravure des accords}, +@ref{Gravure des portées}, +@ref{Instruments utilisant des portées multiples}, +@ref{Positionnement vertical des paroles}, +@ref{Couplets}. + +Morceaux choisis : +@rlsrnamed{Vocal music,Musique vocale}. + + +@node Feuille de chant +@unnumberedsubsubsec Feuille de chant +@translationof Lead sheets + +Une simple feuille de chant s'obtient en combinant une partie vocale et +son harmonisation. La syntaxe appropriée est expliquée en détails au +chapitre @ref{Notation des accords}. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + + +@seealso +Manuel de notation : +@ref{Notation des accords}. + + +@node Chorale +@subsection Chorale +@translationof Choral + +@cindex motet +@cindex partie vocale +@cindex chœur, partition de +@cindex oratorio +@cindex SATB + +Nous allons voir, dans les paragraphes qui suivent, les particularités de +la musique chorale, qu'il s'agisse de motet, d'oratorio ou de simple +partie de chœur. + +@menu +* Références en matière de chorale:: +* Mise en forme d'une partition chorale:: +* Division de voix:: +@end menu + +@node Références en matière de chorale +@unnumberedsubsubsec Références en matière de chorale +@translationof References for choral + +Une partition pour chœur comporte habituellement de deux à quatre +portées regroupées dans un @code{ChoirStaff}. L'accompagnement, s'il y +en a un, se présente sous la forme d'un système pianistique -- un +@code{PianoStaff} -- en dessous du chœur@tie{}; il s'agira d'une simple +réduction dans le cas d'une œuvre @emph{a capella}. Les notes de chaque +pupitre font l'objet d'un contexte @code{Voice} distinct. Ces contextes +@code{Voice} peuvent se voir groupés ou non sur une même portée. + +Les paroles sont traitées dans des contextes @code{Lyrics} qui viendront +se placer tantôt sous la portée, tantôt au-dessus et au-dessous de la +portée si elle contient deux voix. + +Un certain nombre de composantes d'une partition pour chœur sont +examinés à différents endroits de la documentation de LilyPond@tie{}: + +@itemize + +@item +La création pas à pas d'une partition pour chœur se trouve dans la +manuel d'initiation, au chapitre +@rlearning{Partition pour chœur à quatre voix mixtes}. + +@item +Plusieurs exemples et canevas sont regroupés dans le manuel +d'initiation, à la rubrique @rlearning{Ensemble vocal}. + +@item +Des informations détaillées sur les contextes @code{ChoirStaff} et +@code{PianoStaff} sont disponibles au chapitre +@ref{Regroupement de portées}. + +@item +Les formes de notation particulière, telles que celle utilisée en +@emph{Sacred Harp} et assimilées, sont abrodées au chapitre +@ref{Têtes de note à forme variable}. + +@item +Lorsque plusieurs pupitres sont regroupés sur la même portée, les +hampes, liaisons etc. de la voix supérieure sont orientées vers le haut, +et inversement pour la voix inférieure. L'utilisation de +@code{\voiceOne} et @code{\voiceTwo} est expliquée au chapitre +@ref{Polyphonie sur une portée}. + +@end itemize + +@predefined +@code{\oneVoice}, +@code{\voiceOne}, +@code{\voiceTwo}. + +@seealso +Manuel d'initiation : +@rlearning{Partition pour chœur à quatre voix mixtes}, +@rlearning{Ensemble vocal}. + +Manuel de notation : +@ref{Ordre des contextes de mise en forme}, +@ref{Regroupement de portées}, +@ref{Têtes de note à forme variable}, +@ref{Polyphonie sur une portée}. + +Morceaux choisis : +@rlsrnamed{Vocal music,Musique vocale}. + +Référence des propriétés internes : +@rinternals{ChoirStaff}, +@rinternals{Lyrics}, +@rinternals{PianoStaff}. + + +@node Mise en forme d'une partition chorale +@unnumberedsubsubsec Mise en forme d'une partition chorale +@translationof Score layouts for choral + +Une partition pour chœur sur quatre portées, avec ou sans +accompagnement, présente traditionnellement deux systèmes par page. +Selon la taille du papier, vous pourrez être amené à effectuer quelques +ajustements aux réglages par défaut, notamment en raison des points +suivants@tie{}: + +@itemize + +@item +La taille des portées a des répercussions sur l'ensemble des éléments de +la partition. Voir @ref{Définition de la taille de portée}. + +@item +La distance séparant les systèmes, les portées et les paroles peut +s'ajuster de manière séparée, comme expliqué au chapitre +@ref{Espacement vertical}. + +@item +La mise en évidence des différentes dimensions permet d'appréhender avec +finesse le réglage des variables d'espacement vertical et, pourquoi pas, +de faire tenir la partition sur moins de pages, comme l'explique la +rubrique @ref{Réduction du nombre de pages de la partition}. + +@item +Lorsque le nombre de systèmes varie d'une page à l'autre, il est +judicieux de l'indiquer visuellement, en suivant les instructions de la +rubrique @ref{Séparation des systèmes}. + +@item +Pour de plus amples détails quant aux propriétés liées au formatage, +consultez le chapitre @ref{Mise en forme de la page}. + +@end itemize + +Les indications de nuance se placent traditionnellement sous la portée, +ce qui n'est pas le cas en matière de musique vocale dans le but +d'éviter toute collision avec les paroles. La commande prédéfinie +@code{\dynamicUp} attachée à un contexte @code{Voice} permet de +positionner les nuances au-dessus de la portée. Dans le cas où il y en +aurait plusieurs, cette commande devra apparaître dans chacun des +contextes @code{Voice} qui le requiert. Vous pouvez aussi opter pour la +forme développée, comme dans l'exemple ci-dessous, pour que cela +s'applique à toutes les portées de la partition -- changez +@code{\Score} en @code{\ChoirStaff} s'il y a d'autres parties que celles +du chœur. + +@lilypond[verbatim,quote] +\score { + \new ChoirStaff << + \new Staff { + \new Voice { + \relative c'' { g4\f g g g } + } + } + \new Staff { + \new Voice { + \relative c' { d4 d d\p d } + } + } + >> + \layout { + \context { + \Score + \override DynamicText #'direction = #UP + \override DynamicLineSpanner #'direction = #UP + } + } +} +@end lilypond + +@predefined +@code{\dynamicUp}, @code{\dynamicDown}, @code{\dynamicNeutral}. + +@seealso +Manuel de notation : +@ref{Modification de l'espacement}, +@ref{Mise en évidence de l'espacement}, +@ref{Réduction du nombre de pages de la partition}, +@ref{Mise en forme de la page}, +@ref{Mise en forme de la partition}, +@ref{Séparation des systèmes}, +@ref{Définition de la taille de portée}, +@ref{Recours à une voix supplémentaire pour gérer les sauts}, +@ref{Espacement vertical}. + +Référence des propriétés internes : +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Division de voix +@unnumberedsubsubsec Division de voix +@translationof Divided voices + +@cindex voix, division + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-arpeggiobracket-to-make-divisi-more-visible.ly} + +@seealso +Manuel de notation : +@ref{Signes d'interprétation sous forme de ligne}. + + +@node Opéras et musiques de scène +@subsection Opéras et musiques de scène +@translationof Opera and stage musicals + +Tout ce qui permet d'exécuter un opéra ou une œuvre scénique accompagnée +de musique se présente généralement sous l'une ou plusieurs des formes +suivantes@tie{}: + +@itemize + +@item +Un @emph{Conducteur} destiné au chef d'orchestre. Il comprend +l'intégralité des parties d'orchestre et des chanteurs, ainsi que des +citations du livret pour les passages déclamés. + +@item +Un @emph{matériel d'orchestre}, autrement dit une partition pour chacun +des pupitres de l'orchestre ou de l'ensemble instrumental. + +@item +Une @emph{partition de chœur} regroupant toutes les parties vocales avec +accompagnement au piano. Cet accompagnement est souvent une réduction +d'orchestre où les différents instruments sont indiqués. Les partitions +de chœur comprennent parfois des indications de mise en scène ainsi que +des extraits du livret. + +@item +Une @emph{partition de choriste} qui ne comprend que les parties vocales +-- donc sans accompagnement. Elle peut être augmentée du livret. + +@item +Un @emph{livret} contenant l'intégralité des dialogues et le texte des +passsages chantés. On y trouve aussi très souvent les indications de +mise en scène. Bien que LilyPond soit capable de @qq{typographier} un +livret, n'oubliez pas qu'il n'y a dans ce cas pas de musique, et que +d'autres outils pourraient être mieux appropriés. + +@end itemize + +La plupart de ce qui est nécessaire à la mise en forme d'un opéra ou +d'une musique de scène est disséminé dans la somme documentaire de +LilyPond. Nous commencerons par rappeler ces différents éléments, avant +que d'en examiner certaines particularités adaptées aux styles +opératique et scénique. + +@menu +* Références en matière d'opéra et musique de scène:: +* Indication du rôle:: +* Citation-repère:: +* Musique parlée:: +* Dialogue et musique:: +@end menu + +@node Références en matière d'opéra et musique de scène +@unnumberedsubsubsec Références en matière d'opéra et musique de scène +@translationof References for opera and stage musicals + +@itemize + +@item +Un conducteur contient un certain nombre de portées et de nombreuses +paroles. Les manières d'agencer les portées sont indiquées à la +rubrique @ref{Regroupement de portées}, et les façons de les combiner à +la rubrique @ref{Imbrication de regroupements de portées}. + +@item +Les portées vides sont la plupart du temps éliminées d'un conducteur ou +d'une partition de chœur. La réalisation d'une telle partition -- les +anglophones la disent @qq{à la française} -- est expliquée à la rubrique +@ref{Masquage de portées}. + +@item +La génération d'un matériel d'orchestre fait l'objet de la rubrique +@ref{Écriture de parties séparées}. D'autres parties du chapitre +consacré à la notation spécialisée vous seront utiles selon +l'orchestration de la pièce. Tous les instruments ne sont pas accordés +pareil@tie{}; vous trouverez des informations à ce sujet à la rubrique +@ref{Instruments transpositeurs}. + +@item +Lorsque le nombre de systèmes varie d'une page à l'autre, il peut être +judicieux de les mettre en évidence, en suivant les indications de la +rubrique @ref{Séparation des systèmes}. + +@item +Les différentes propriétés impliquées dans la mise en page sont +répertoriées au chapitre @ref{Mise en forme de la page}. + +@item +L'insertion de dialogues et d'indications de mise en scène peuvent se +réaliser à l'aide de @emph{markups}, en suivant les directives fournies +au chapitre @ref{Texte}. Les indications de mise en scène peuvent +s'intercaler entre deux blocs @code{\score} selon les préceptes de la +rubrique @ref{Texte indépendant}. + +@end itemize + +@seealso +Glossaire musicologique : +@rglosnamed{Frenched score,Partition à la française}, +@rglos{Frenched staves}, +@rglosnamed{transposing instrument,instrument transpositeur}. + +Manuel de notation : +@ref{Regroupement de portées}, +@ref{Masquage de portées}, +@ref{Instruments transpositeurs}, +@ref{Imbrication de regroupements de portées}, +@ref{Mise en forme de la page}, +@ref{Séparation des systèmes}, +@ref{Transposition}, +@ref{Écriture de parties séparées}, +@ref{Ajout de texte}. + +Morceaux choisis : +@rlsrnamed{Vocal music,Musique vocale}. + + +@node Indication du rôle +@unnumberedsubsubsec Indication du rôle +@translationof Character names + +@cindex rôle, indication +@cindex personnage, indication + +Lorsqu'un rôle est distribué sur une portée spécifique, vous pouvez +l'indiquer en regard de cette portée@tie{}: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \set Staff.vocalName = \markup \smallCaps Kaspar + \set Staff.shortVocalName = \markup \smallCaps Kas. + \relative c' { + \clef "G_8" + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \set Staff.vocalName = \markup \smallCaps Melchior + \set Staff.shortVocalName = \markup \smallCaps Mel + \clef "bass" + \relative c' { + a4 a a a + a4 a a a + } + } + >> +} +@end lilypond + +Lorsque la même portée sert à plusieurs personnages, leur nom est +généralement imprimé en surplomb de la portée, à chaque changement de +rôle. L'utilisation d'un @emph{markup} -- dans une fonte réservée à cet +effet -- vous permettra de générer ces indications@tie{}: + +@lilypond[quote,verbatim,relative=1] +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +\clef "bass" +a4^\markup \fontsize #1 \smallCaps Melchior +a a a +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +@end lilypond + +Dans le cas où les changements de personnage se multiplient, il peut +s'avérer pratique de détourner l'utilisation de la fonction +@code{\instrumentSwitch} pour gérer les différentes interventions de +l'un ou de l'autre@tie{}; vous devrez auparavant avoir établi la +définition d'un @qq{instrument} pour chacun des rôles en question@tie{}: + +@lilypond[quote,verbatim] +\addInstrumentDefinition #"kaspar" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Kas.") + (clefGlyph . "clefs.G") + (clefOctavation . -7) + (middleCPosition . 1) + (clefPosition . -2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar")) + (midiInstrument . "voice oohs")) + +\addInstrumentDefinition #"melchior" + #`((instrumentTransposition . ,(ly:make-pitch 0 0 0)) + (shortInstrumentName . "Mel.") + (clefGlyph . "clefs.F") + (clefOctavation . 0) + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior")) + (midiInstrument . "voice aahs")) + +\relative c' { + \instrumentSwitch "kaspar" + c4 c c c + \instrumentSwitch "melchior" + a4 a a a + \instrumentSwitch "kaspar" + c4 c c c +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Noms d'instrument}, +@ref{Fonctions Scheme}, +@ref{Texte}, +@ref{Text markup commands}. + +Manuel d'extension des fonctionnalités : +@rextendnamed{Markup construction in Scheme,Construction d'un markup en Scheme}. + + +@node Citation-repère +@unnumberedsubsubsec Citation-repère +@translationof Musical cues + +@cindex musicale, citation +@cindex instrument, citation +@cindex chœur, citation d'instrument + +Les citations d'instruments insérées dans les parties vocales, les +partitions de chœur ou les partitions d'un pupitre permettent d'indiquer +ce qui se passe ailleurs juste avant une entrée. On les retrouve +souvent dans la réduction pour piano, ce qui fournit au chef de choœur +de précieuses indications sur qui joue quoi, lorsqu'il ne dispose pas +d'un conducteur en bonne et due forme. + +Les mécanismes de base permettant d'insérer des citations sont expliqués +en détail aux rubriques @ref{Citation d'autres voix} et +@ref{Mise en forme d'une citation}. Dans le cas où les citations +concernent différents instruments, faire mention de celui qui intervient +devient une nécessité@tie{}; voici une illustration de la manière de +procéder en pareil cas@tie{}: + +@lilypond[quote,verbatim] +flute = \relative c'' { + s4 s4 e g +} +\addQuote "flute" { \flute } + +pianoRH = \relative c'' { + c4. g8 + % position name of cue-ing instrument just before the cue notes, + % and above the staff + s1*0^\markup { \right-align { \tiny "Flute" } } + \cueDuring "flute" #UP { g4 bes4 } +} +pianoLH = \relative c { c4 e, } + +\score { + \new PianoStaff << + \new Staff { + \pianoRH + } + \new Staff { + \clef "bass" + \pianoLH + } + >> +} +@end lilypond + +La citation peut concerner un instrument transpositeur, auquel cas il +faudra mentionner sa tonalité dans sa définition, afin que ses hauteurs +soient automatiquement converties dans la réplique. Ceci est illustré +par l'exemple ci-dessous, dans lequel il est fait appel à une clarinette +en si bémol. Dans la mesure où les notes citées se trouvent vers le bas +de la portée, nous ajoutons un @code{#DOWN} à la commande +@code{\cueDuring}, de telle sorte que les hampes aillent vers le bas et +que le nom de l'instrument cité soit en dessous de la portée. Vous +noterez que la voix contenant la main droite du piano est explicitement +déclarée@tie{}; ceci tient au fait que la citation se produit dès le +début de la première mesure -- si nous ne le faisions pas, l'intégralité +de la main droite se verrait placée dans un contexte @code{CueVoice}. + +@lilypond[quote,verbatim] +clarinet = \relative c' { + \transposition bes + fis4 d d c +} +\addQuote "clarinet" { \clarinet } + +pianoRH = \relative c'' { + \transposition c' + % position name of cue-ing instrument below the staff + s1*0_\markup { \right-align { \tiny "Clar." } } + \cueDuring "clarinet" #DOWN { c4. g8 } + g4 bes4 +} +pianoLH = \relative c { c4 e, } + +\score { + << + \new PianoStaff << + \new Staff { + \new Voice { + \pianoRH + } + } + \new Staff { + \clef "bass" + \pianoLH + } + >> + >> +} +@end lilypond + +Il est clair, au vu de ces deux exemples, que multiplier le nombre de +citations dans une partition vocale demande un travail fastidieux et que +relire la partie de piano deviendrait vite un cauchemar. Vous pouvez +néanmoins, comme l'illustre l'exemple suivant, définir une fonction +musicale dans le but de vous épargner de la saisie tout en améliorant +la lisibilité des notes du piano. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{adding-orchestral-cues-to-a-vocal-score.ly} + +@seealso +Glossaire musicologique : +@rglos{cue-notes}. + +Manuel de notation : +@ref{Alignement des objets}, +@ref{Direction et positionnement}, +@ref{Mise en forme d'une citation}, +@ref{Citation d'autres voix}, +@ref{Utilisation de fonctions musicales}. + +Morceaux choisis : +@rlsrnamed{Vocal music,Musique vocale}. + +Référence des propriétés internes : +@rinternals{InstrumentSwitch}, +@rinternals{CueVoice}. + +@knownissues +@code{\cueDuring} crée automatiquement un contexte @code{CueVoice} qui +accueillera toutes les notes répliquées. Il est par conséquenet +impossible de faire se superposer des citations à l'aide de la technique +simplifiée telle que nous venons de le voir. La superposition de +fragments cités requiert que les contextes @code{CueVoice} soient +explicitement déclarés, ainsi que l'utilisation de la commande +@code{\quoteDuring} pour extraire et insérer les notes répliquées. + + +@node Musique parlée +@unnumberedsubsubsec Musique parlée +@translationof Spoken music + +@cindex parlato +@cindex Sprechgesang + +Le @emph{parlato} -- ou @emph{Sprechgesang} pour les germanistes -- est +du texte scandé en rythme, mais sans hauteurs définies@tie{}; il est +indiqué par des notes en croix, à l'instar des percussions -- voir +@ref{Têtes de note spécifiques}. + +@c TODO add "marking-notes-on-spoken-parts" snippet -vv +@c add "showing the rhythm of a melody" snip +@c add "one staff-line notation" +@c add "improvisation" ref +@c add "lyrics independents of notes" ref + + +@node Dialogue et musique +@unnumberedsubsubsec Dialogue et musique +@translationof Dialogue over music + +Les dialogues que l'on ajoute à la musiqua sont traditionnellement +imprimés en italique au-dessus des portées, au moment même où ils +surviennent. + +Une courte intervention peut se formuler à l'aide d'un simple +@emph{markup}@tie{}: + +@lilypond[quote,verbatim,relative=2] +a4^\markup { \smallCaps { Alex - } \italic { He's gone } } a a a +a4 a a^\markup { \smallCaps { Bethan - } \italic Where? } a +a4 a a a +@end lilypond + +Une intervention un peu plus longue peut nécessiter d'étirer la musique +de telle sorte que le texte ait suffisamment de place. LilyPond ne +disposant d'aucun mécanisme permettant d'automatiser l'étirement, vous +devrez probablement ajuster vous même la mise en forme. + +Dans le cas d'une phrase entière ou de passages relativement denses, le +recours à un contexte @code{Lyrics} peut donner de meilleurs résultats. +Le contexte @code{Lyrics} en question ne doit être rattaché à aucune +voix musicale@tie{}; chaque fragment de dialogue devra donc comporter +des durées explicites. Lorsque les dialogues comportent des pauses, le +dernier mot devra être séparé du reste et les durées individualisées +pour obtenir un espacement harmonieux de la musique. + +Des dialogues qui s'étendent sur plus d'une ligne vous obligeront à +insérer des @code{\break} et ajuster leur placement pour éviter qu'ils +ne débordent dans la marge droite. Le dernier mot de la dernière mesure +d'une ligne doit être saisi sur une ligne à part. + +Voici une illustration de tout ce que nous venons de voir@tie{}: + +@c This should be a snippet, but it can't be as it needs to be +@c manually adjusted to suit the imposed line length. -td + +@lilypond[quote,verbatim,ragged-right] +music = \relative c'' { + \repeat unfold 3 { a4 a a a } +} + +dialogue = \lyricmode { + \markup { + \fontsize #1 \upright \smallCaps Abe: + "Say this over measures one and" + }4*7 + "two"4 | + \break + "and this over measure"4*3 + "three"4 | +} + +\score { + << + \new Lyrics \with { + \override LyricText #'font-shape = #'italic + \override LyricText #'self-alignment-X = #LEFT + } + { \dialogue } + \new Staff { + \new Voice { \music } + } + >> +} +@end lilypond + +@c TODO show use of \column to produce dialogue on two lines + +@seealso +Manuel de notation : +@ref{Durée explicite des syllabes}, +@ref{Texte}. + +Référence des propriétés internes : +@rinternals{LyricText}. + + +@node Chants liturgiques +@subsection Chants liturgiques +@translationof Chants psalms and hymns + +@cindex cantique +@cindex psalmodie +@cindex hymne +@cindex religieuse, musique +@cindex liturgie et musique + +Selon les chapelles, la mise en forme des cantiques, psaumes et hymnes +répond à des canons bien établis. Bien que différents de par leur +présentation, nous verrons dans ce qui suit que les problèmes qui +surviennent en matière de typographie se ressemblent, quelle que soit +l'obédience. + +@menu +* Références en matière de chant liturgique:: +* Cantiques et hymnes:: +* Psalmodie:: +* Mesure incomplète et musique liturgique:: +@end menu + +@node Références en matière de chant liturgique +@unnumberedsubsubsec Références en matière de chant liturgique +@translationof References for chants and psalms + +La présentation du plain chant et du grégorien selon différents styles +est abordée au chapitre @ref{Notations anciennes}. + +@seealso +Manuel de notation : +@ref{Notations anciennes}. + +Morceaux choisis : +@rlsrnamed{Vocal music,Musique vocale}. + + +@node Cantiques et hymnes +@unnumberedsubsubsec Cantiques et hymnes +@translationof Setting a chant + +La mise en forme contemporaine de cantiques utilise à la fois la +notation moderne et un certain nombre d'éléments propres aux notations +anciennes. Nous allons examiner quelques uns de ces éléments et la +méthode consacrée pour les mettre en œuvre. + +Les cantiques utilisent souvent des noires dépourvues de hampe pour +indiquer les hauteurs@tie{}; le rythme de la mélodie est donné par le +rythme et l'accentuation des paroles elles-même. + +@lilypond[verbatim,quote] +stemOff = { \override Staff.Stem #'transparent = ##t } + +\relative c' { + \stemOff + a'4 b c2 | +} + +@end lilypond + +Les barres de mesure sont absentes dans la plupart des cas@tie{}; celles +que vous rencontrerez seront raccourcies ou en pointillé, dans le but +d'indiquer une @qq{respiration}. Le fait de supprimer le graveur de +barres de mesure produira des portées sans barre@tie{}: + +@lilypond[verbatim,quote] +\score { + \new StaffGroup << + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +L'absence de barre de mesure peut ne concerner que certaines +portées@tie{}: + +@lilypond[verbatim, quote] +\score { + \new ChoirStaff << + \new Staff + \with { \remove Bar_engraver } { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> +} +@end lilypond + +L'absence de barre de mesure sur un fragment seulement s'obtient en +traitant ce fragment comme une cadence. S'il est relativement long, +pensez à y insérer des barres fantômes -- un simple @code{\bar@tie{}""} +-- pour indiquer à LilyPond où serait susceptible de se produire un saut +de ligne. + +@lilypond[verbatim,quote,relative=2] +a4 b c2 | +\cadenzaOn +a4 b c2 +a4 b c2 +\bar "" +a4 b c2 +a4 b c2 +\cadenzaOff +a4 b c2 | +a4 b c2 | +@end lilypond + +Dans la mélodie d'un cantique, les silences ou pauses s'indiquent à +l'aide de barres de mesure spécifiques@tie{}: + +@lilypond[verbatim, quote,relative=2] +a4 +\cadenzaOn +b c2 +a4 b c2 +\bar "'" +a4 b c2 +a4 b c2 +\bar ":" +a4 b c2 +\bar "dashed" +a4 b c2 +\bar "||" +@end lilypond + +Vous pouvez accessoirement, bien qu'il s'agisse de notation moderne, +emprunter au grégorien des indications de pause et silence. Il vous +suffit pour cela d'adapter la commande @code{\breathe} selon vos +besoins@tie{}: + +@lilypond[verbatim,quote] +divisioMinima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaior = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaxima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +finalis = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis + \once \override BreathingSign #'Y-offset = #0 + \breathe +} + +\score { + \relative c'' { + g2 a4 g + \divisioMinima + g2 a4 g + \divisioMaior + g2 a4 g + \divisioMaxima + g2 a4 g + \finalis + } + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +De nombreux cantiques sont dépourvus de métrique, voire même de clef. + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \layout { + \context { + \Staff + \remove Bar_engraver + \remove Time_signature_engraver + \remove Clef_engraver + } + } +} +@end lilypond + +L'une des traditions anglicanes est de chanter les psaumes sur la base +d'un fragment de sept mesures -- forme @emph{single} ou simple -- ou de +deux fragments toujours de sept mesures -- forme @emph{double}. Chaque +fragment est divisé en deux parties correspondant aux deux moitiés de +chaque verset et généralement séparées par une double barre. Il n'est +fait usage que de rondes et de blanches, et la première mesure de chaque +moitié contient un simple accord de rondes. Il s'agit donc des notes +correspondant au @qq{récitatif}. Ces cantiques sont traditionnellement +centrés sur la page. + +@lilypond[verbatim,quote] +SopranoMusic = \relative g' { + g1 | c2 b | a1 | \bar "||" + a1 | d2 c | c b | c1 | \bar "||" +} + +AltoMusic = \relative c' { + e1 | g2 g | f1 | + f1 | f2 e | d d | e1 | +} + +TenorMusic = \relative a { + c1 | c2 c | c1 | + d1 | g,2 g | g g | g1 | +} + +BassMusic = \relative c { + c1 | e2 e | f1 | + d1 | b2 c | g' g | c,1 | +} + +global = { + \time 2/2 +} + +% Use markup to center the chant on the page +\markup { + \fill-line { + \score { % centered + << + \new ChoirStaff << + \new Staff << + \global + \clef "treble" + \new Voice = "Soprano" << + \voiceOne + \SopranoMusic + >> + \new Voice = "Alto" << + \voiceTwo + \AltoMusic + >> + >> + \new Staff << + \clef "bass" + \global + \new Voice = "Tenor" << + \voiceOne + \TenorMusic + >> + \new Voice = "Bass" << + \voiceTwo + \BassMusic + >> + >> + >> + >> + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 2) + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } + } % End score + } +} % End markup +@end lilypond + +D'autres approches d'une telle mise en forme font l'objet du premier des +exemples qui suivent. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{chant-or-psalms-notation.ly} + +Cantiques et autres textes liturgiques peuvent être mis en forme avec +une grande liberté et parfois emprunter des éléments de notation +ancienne. Le texte apparaît souvent sous la mélodie, les mots alors +alignés sur les notes. En pareil cas, les notes sont espacées selon les +syllabes et non leur durée. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + +@seealso +Manuel d'initiation : +@rlearning{Visibilité et couleur des objets}, +@rlearning{Ensemble vocal}. + +Manuel de notation : +@ref{Notations anciennes}, +@ref{Barres de mesure}, +@ref{Modification des greffons de contexte}, +@ref{Typesetting Gregorian chant}, +@ref{Musique sans métrique}, +@ref{Visibilité des objets}. + + +@node Psalmodie +@unnumberedsubsubsec Psalmodie +@translationof Pointing a psalm + +Les versets d'un psaume anglican sont habituellement centrées sous la +mélodie. + +Dans le cas d'un chant simple, les sept mesures sui le composent sont +répétées pour chaque verset. Dans le cas d'un chant double, les +quatorze mesures se répètent par couple de versets. Des marques +insérées dans le texte indiquent comment il s'articule par rapport à la +mélodie. Chaque verset est séparé en deux, et la rupture est indiquée +par un caractère deux points (@code{:}) correspondant à la double barre +de la mélodie. Le texte précédant les deux points se chante sur les +trois premières mesures, celui qui suit sur les quatre dernières +mesures. + +De simples barres verticales -- remplacées par des virgules inversées +dans certains psautiers -- représentent les barres de mesures portées +sur la mélodie. En mode @emph{markup}, ces barres s'obtiennent en +saisissant le même caractère @code{|} qui sert pour les contrôles de +mesure. + +@lilypond[verbatim,quote] +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing | unto the | Lord : let } + \line { us heartily rejoice in the | strength of | our } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +Vous pourriez tout à fait utiliser d'autres symboles disponibles au +travers des glyphes de la fonte @code{fetaMusic} -- voir le chapitre +@ref{Fontes} pour plus de détatils. + +@lilypond[verbatim,quote] +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing \tick unto the \tick Lord : let } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +Lorsqu'une mesure ne comporte qu'une ronde, le texte correspondant à +cette mesure est chanté sur cette même note, selon le rythme naturel de +la phrase. Lorsque la mesure comporte deux notes, celles-ci +correspondent en général à une ou deux syllabes@tie{}; dans le cas +contraire, le changement de note est indiqué par un point. + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us sing \tick unto \dot the \tick Lord : let + } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +Certains psautiers font apparaître, pour indiquer une césure, une +astérisque au lieu d'une virgule, ainsi que des caractères gras pour les +syllabes accentuées ou allongées. + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { Today if ye will hear his voice * } + \line { + \concat { \bold hard en } + | not your | hearts : as in the pro- + } + \line { vocation * and as in the \bold day of tempt- | } + \line { -ation | in the | wilderness. } + } + } + } +} +@end lilypond + +D'autres psautiers indiquent une syllabe accentuées en la surchargeant +d'un accent. + +@lilypond[verbatim,quote] +tick = \markup { + \raise #2 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us \concat { + si \combine \tick ng + } + | unto the | Lord : let + } + \line { + us heartily \concat { + rejo \combine \tick ice + } + in the | strength of | our + } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +L'utilisation du mode @emph{markup} pour centrer le texte et agencer les +lignes est abordée en détails au chapitre @ref{Mise en forme du texte}. + +La plupart de ces éléments sont regroupés dans l'un des versets du modèle +@qq{Psalmodie}, à la rubrique @rlearning{Ensemble vocal}. + +@seealso +Manuel d'initiation : +@rlearning{Ensemble vocal}. + +Manuel de notation : +@ref{Fontes}, +@ref{Mise en forme du texte}. + + +@node Mesure incomplète et musique liturgique +@unnumberedsubsubsec Mesure incomplète et musique liturgique +@translationof Partial measures in hymn tunes + +Il arrive fréquemment que les chants liturgiques coportent des mesures +incomplètes aussi bien en début qu'en fin de ligne, de telle sorte qu'à +une portée corresponde une ligne de texte. Ceci requiert donc +l'utilisation de la commande @code{\partial} en début de partition et +d'une commande @code{\bar@tie{}"|"} ou @code{\baràtie{}"||"} à la fin de +chaque ligne. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{hymn-template.ly} + + +@node Musique vocale ancienne +@subsection Musique vocale ancienne +@translationof Ancient vocal music + +LilyPond prend en charge la musique vocale ancienne. Elle est abordée +en détails au chapite @ref{Notations anciennes}. + +@c TODO + +@c Add "Printing both the ancient and the modern clef in vocal music" snippet, +@c and "Transcription of Ancient music with incipit" snippet. -vv + + +@seealso +Manuel de notation : +@ref{Notations anciennes}. diff --git a/Documentation/fr/notation/wind.itely b/Documentation/fr/notation/wind.itely new file mode 100644 index 0000000000..0dcc91e68e --- /dev/null +++ b/Documentation/fr/notation/wind.itely @@ -0,0 +1,478 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Valentin Villenave, Jean-Charles Malahieuse +@c Translation checkers: Jean-Charles Malahieude, John Mandereau + +@node Instruments à vent +@section Instruments à vent +@translationof Wind instruments + +@lilypondfile[quote]{wind-headword.ly} + +Ce chapitre traite de certains aspects particuliers en matière de +notation pour instruments à vent. + +@menu +* Vue d'ensemble des instruments à vent:: +* Cornemuse:: +* Bois:: +@end menu + +@node Vue d'ensemble des instruments à vent +@subsection Vue d'ensemble des instruments à vent +@translationof Common notation for wind instruments + +Nous allons aborder ici quelques aspects communs à la plupart des +instruments à vent. + +@menu +* Références en matière d'instruments à vent:: +* Doigtés pour vents:: +@end menu + +@node Références en matière d'instruments à vent +@unnumberedsubsubsec Références en matière d'instruments à vent +@translationof References for wind instruments + +@cindex instruments à vent +@cindex vents + +Ce qui caractérise les partitions pour instruments à vent a trait +principalement à la respiration et à l'attaque@tie{}: + +@itemize +@item Les respirations s'indiquent par des silences ou des +@ref{Signes de respiration}. + +@item Un jeu @emph{legato} s'indique par des +@ref{Liaisons d'articulation}. + +@item Les différents types d'attaque -- @emph{legato}, détaché ou piqué +-- s'indiquent en principe par des signes d'articulation, parfois +agrémentés de liaisons. Voir à ce sujet +@ref{Articulations et ornements} et +@ref{Liste des signes d'articulation}. + +@item Un @emph{Flatterzunge} (trémolo dental ou trémolo en roulant les +r) s'indique par une marque de trémolo et une étiquette textuelle +attachée à la note concernée. Voir à ce sujet +@ref{Répétitions en trémolo}. +@end itemize + +D'autres aspects de la notation s'appliquent aussi aux instruments à +vent@tie{}: + +@itemize +@item De nombreux instruments à vent sont transpositeurs@tie{}; voir +@ref{Instruments transpositeurs}. + +@item Les glissandos sont l'une des caractéristiques du trombone à +coulisse, bien que d'autres instruments puisssent y parvenir en jouant +sur les pistons ou des clés@tie{}; consulter @ref{Glissando}. + +@item Des glissandos harmoniques sont réalisables par les cuivres. Ils +sont traditionnellement indiqués par des @ref{Notes d'ornement}. + +@item Les inflections en fin de note sont abordées au chapitre +@ref{Chutes et sauts}. + +@item Les @qq{bruitages} de clé ou de piston s'indiquent souvent par le +style @code{cross} ou des @ref{Têtes de note spécifiques}. + +@item Les bois peuvent émettre des harmoniques dans le bas de leur +registre. On les indique avec un @code{flageolet} -- voir +@ref{Liste des signes d'articulation}. + +@item En ce qui concerne les cuivres, la sourdine s'indique en pricipe +par une étiquette textuelle. Cependant, lorsque les changements sont +nombreux et rapides, il est d'usage de recourrir aux articulations +@code{stopped} et @code{open}. Pour de plus amples détails, voir +@ref{Articulations et ornements} et +@ref{Liste des signes d'articulation}. + +@item La sourdine du cor d'harmonie s'indique par un @code{stopped}. +Voir le chapitre @ref{Articulations et ornements}. +@end itemize + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing--flageolet-mark-size.ly} + + +@seealso +Manuel de notation : +@ref{Signes de respiration}, +@ref{Liaisons d'articulation}, +@ref{Articulations et ornements}, +@ref{Liste des signes d'articulation}, +@ref{Répétitions en trémolo}, +@ref{Instruments transpositeurs}, +@ref{Glissando}, +@ref{Notes d'ornement}, +@ref{Chutes et sauts}, +@ref{Têtes de note spécifiques}, + +Morceaux choisis : +@rlsrnamed{Winds,Vents}. + + +@node Doigtés pour vents +@unnumberedsubsubsec Doigtés pour vents +@translationof Fingerings + +Tout instrument à vent, hormis le trombone à coulisse, fait appel à +plusieurs doigts pour produire un son. Les exemples ci-dessous vous +donnent un apperçu de différentes manières d'indiquer des doigtés. + +La gestion des diagrammes de doigté spécifiques aux bois est abordée +plus en profondeur au chapitre @ref{Diagrammes pour bois}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingering-symbols-for-wind-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{recorder-fingering-chart.ly} + +@seealso + +Manuel de notation : +@ref{Diagrammes pour bois}. + +Snippets: +@rlsrnamed{Winds,Vents}. + + +@node Cornemuse +@subsection Cornemuse +@translationof Bagpipes + +Voici quelques informations spécifiques à la cornemuse. + +@menu +* Définitions pour la cornemuse:: +* Exemple pour la cornemuse:: +@end menu + +@node Définitions pour la cornemuse +@unnumberedsubsubsec Définitions pour la cornemuse +@translationof Bagpipe definitions + +@cindex bagpipe +@cindex cornemuse +@cindex Scottish highland bagpipe +@cindex petites notes +@funindex \taor +@funindex taor +@funindex \hideKeySignature +@funindex hideKeySignature +@funindex \showKeySignature +@funindex showKeySignature + +LilyPond inclut des définitions spécifiques destinées à la notation pour +cornemuse écossaise@tie{}; pour les utiliser, il suffit d'ajouter + +@example +\include "bagpipe.ly" +@end example + +@noindent +en début de fichier. Ainsi, vous bénéficierez de commandes courtes pour +les appogiatures spéciales et idiomatiques de la cornemuse. Par +exemple, @code{\taor} est un raccourci pour + +@example +\grace @{ \small G32[ d G e] @} +@end example + +@file{bagpipe.ly} prend également en charge les définitions de hauteurs +pour la cornemuse@tie{}; vous n'avez donc pas à vous soucier d'employer +@code{\relative} ou @code{\transpose}. + +@lilypond[ragged-right,verbatim,quote,notime] +\include "bagpipe.ly" +{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } +@end lilypond + +La musique pour cornemuse est traditionnellement écrite en ré majeur. +Dans la mesure où c'est la seule tonalité possible, l'usage est de ne +pas indiquer l'armure explicitement. À cet effet, pensez à commencer +votre partition par @code{\hideKeySignature} -- ou bien +@code{\showKeySignature} si, pour une raison ou pour une autre, vous +tenez à afficher l'armure. + +Des compositions actuelles peuvent ne pas respecter cette tonalité +traditionnelle, auquel cas les do et fa devraient être abaissés en +utilisant @code{cflat} ou @code{fflat}@tie{}; ils seront représentés par +une note en forme de croix. + +Lorsqu'on joue des œuvres moins cérémonieuses que pour une parade +ou un défilé, peut survenir un sol aigu, au doux nom de +@qq{piobaireachd}, et que l'on indiquera par @code{gflat}. + + +@seealso +@rlsrnamed{Winds,Vents}. + + +@node Exemple pour la cornemuse +@unnumberedsubsubsec Exemple pour la cornemuse +@translationof Bagpipe example + +@cindex cornemuse : exemple +@cindex Amazing Grace : exemple pour cornemuse + +Et voici en guise d'exemple, à quoi ressemble le chant populaire +@emph{Amazing Grace}, noté dans l'idiome de la cornemuse. + +@lilypond[verbatim,quote] +\include "bagpipe.ly" +\layout { + indent = 0.0\cm + \context { \Score \remove "Bar_number_engraver" } +} + +\header { + title = "Amazing Grace" + meter = "Hymn" + arranger = "Trad. arr." +} + +{ + \hideKeySignature + \time 3/4 + \grg \partial 4 a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg e8. f16 + \dblA A2 \grg A4 + \grg A2 f8. A16 + \grg A2 \hdblf f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 e4 + \thrwd d2. + \slurd d2 + \bar "|." +} +@end lilypond + + +@seealso +@rlsrnamed{Winds,Vents} + + +@node Bois +@subsection Bois +@translationof Woodwinds + +Nous allons ici nous intéresser aux spécificités de la section des bois. + +@menu +* Diagrammes pour bois:: +@end menu + +@node Diagrammes pour bois +@subsubsection Diagrammes pour bois +@translationof Woodwind diagrams + +Les doigtés pour obtenir une note particulière peuvent s'afficher sous +forme graphique. LilyPond dispose de diagrammes pour la plupart des +bois, et tout particulièrement les instruments suivants@tie{}: + +@itemize +@item piccolo +@item flûte +@item hautbois +@item clarinette +@item clarinette basse +@item saxophone +@item basson +@item contrebasson +@end itemize + +@noindent +Les diagrammes sont générés en tant qu'objet de type +@emph{markup}@tie{}: + +@lilypond[verbatim,quote,relative=2] +c1^\markup + \woodwind-diagram #'piccolo #'((lh . (gis)) + (cc . (one three)) + (rh . (ees))) +@end lilypond + +Les clés ou trous peuvent être partiellement enfoncés ou bouchés@tie{}: + +@c KEEP LY +@lilypond[verbatim, quote, relative=2] +\textLengthOn +c1^\markup { + \center-column { + "quart de trou" + \woodwind-diagram #'flute #'((cc . (one1q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "demi-trou" + \woodwind-diagram #'flute #'((cc . (one1h)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "trois quarts de trou" + \woodwind-diagram #'flute #'((cc . (one3q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "anneau" + \woodwind-diagram #'flute #'((cc . (oneR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "bouché" + \woodwind-diagram #'flute #'((cc . (oneF two)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +L'indication du doigté permettant de triller s'obtient en grisant une +position@tie{}: + +@lilypond[verbatim,quote,relative=2] +c1^\markup { + \woodwind-diagram #'bass-clarinet + #'((cc . (threeT four)) + (lh . ()) + (rh . (b fis))) +} +@end lilypond + +Certaines combinaisons particulières en matière de trille sont +possibles@tie{}: + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\textLengthOn +c1^\markup { + \center-column { + "quart de trou et anneau" + \woodwind-diagram #'flute #'((cc . (one1qTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "anneau et fermé" + \woodwind-diagram #'flute #'((cc . (oneTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "anneau et ouvert" + \woodwind-diagram #'flute #'((cc . (oneRT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ouvert et fermé" + \woodwind-diagram #'flute #'((cc . (oneT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "quart de trou et trois quarts" + \woodwind-diagram #'flute #'((cc . (one1qT3q)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +Bien que cela ne produise pas de notation, vous pouvez obtenir à l'écran +ou dans un fichier de journalisation la liste de toutes les possibilités +pour un instrument donné, en utilisant dans un fichier + +@lilypond[verbatim,quote] + +#(print-keys-verbose 'flute) + +@end lilypond + +De nouveaux diagrammes sont réalisables, en suivant les directives +contenues dans les fichiers @file{scm/define-woodwind-diagrams.scm} et +@file{scm/display-woodwind-diagrams.scm}. Ceci requiert toutefois la +maîtrise du langage Scheme. + + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-listing.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{graphical-and-text-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-size-of-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-key-lists.ly} + +@seealso + +Fichiers d'initialisation : +@file{scm/define-woodwind-diagrams.scm}, +@file{scm/display-woodwind-diagrams.scm}. + +Morceaux choisis : +@rlsrnamed{Winds,Vents}. + +Référence des propriétés internes : +@rinternals{TextScript}, +@rinternals{instrument-specific-markup-interface}. + diff --git a/Documentation/fr/notation/world.itely b/Documentation/fr/notation/world.itely new file mode 100644 index 0000000000..bba365b308 --- /dev/null +++ b/Documentation/fr/notation/world.itely @@ -0,0 +1,536 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 3f4496001441e0b1b27d7bc5395c4520f4f2088c + + 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" + +@c Translators: Jean-Jacques Gerbaud, Valentin Villenave +@c Translation checkers: Jean-Charles Malahieude + +@node Musiques du monde +@section Musiques du monde +@translationof World music + +Ce chapitre a pour objet la notation des +musiques traditionnelles autres qu'occidentales. + +@menu +* Noms de note et altérations non-occidentaux:: +* Musique arabe:: +* Musique classique turque:: +@end menu + + +@node Noms de note et altérations non-occidentaux +@subsection Noms de note et altérations non-occidentaux +@translationof Common notation for non-Western music + +De nombreuses musiques autres qu'occidentales -- et même certaines +formes de musique traditionnelle occidentales -- ont recours à des +systèmes de notation alternatifs ou étendus, qui ne s'intègrent pas +forcément dans notre système standard. + +Sans certains cas où la notation standard est utilisée, ces différences +de hauteurs seront implicites. Par exemple, la musique arabe est +reproduite en notation standard, et utilise des quarts de ton, +l'altération réelle dépendant du contexte. D'autres, par contre, font +appel à une notation étendue, voire toute particulière. + +La @notation{musique classique turque}, ou musique ottomane, utilise des +formes mélodiques appelées @notation{makamlar}, dans laquelle les +tons sont divisés en 9 intervalles. Du point de vue actuel des +pratiques de notation, il est possible d'utiliser les notes occidentales +(do, ré, mi@dots{}) auxquelles on ajoutera l'atlération spécifique à la +musique turque. Ces différentes altérations sont définies dans le +fichier @file{makam.ly} -- reportez vous au chapitre +@rlearning{Autres sources de documentation} pour le localiser sur votre +système. Vous trouverez, dans le tableau suivant, le nom de ces +altérations, le suffixe à utiliser, ainsi que la fraction de ton entier +à laquelle elles conrrespondent. + +@c TODO: can we include the actual accidentals in this table? +@quotation +@multitable {@b{büyük mücenneb (dièse)}} {@b{suffixe}} {@b{altération}} +@headitem Nom d'altération + @tab suffixe @tab altération + +@item büyük mücenneb (dièse) + @tab -bm @tab +8/9 +@item kücük mücenneb (dièse) + @tab -k @tab +5/9 +@item bakiye (dièse) + @tab -b @tab +4/9 +@item koma (dièse) + @tab -c @tab +1/9 + +@item koma (bémol) + @tab -fc @tab -1/9 +@item bakiye (bémol) + @tab -fb @tab -4/9 +@item kücük mücenneb (bémol) + @tab -fk @tab -5/9 +@item büyük mücenneb (bémol) + @tab -fbm @tab -8/9 +@end multitable +@end quotation + +Pour plus d'information sur la musique classique turque et les +makamlar, reportez-vous au chapitre @ref{Musique classique turque}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{makam-example.ly} + + +@node Musique arabe +@subsection Musique arabe +@translationof Arabic music + +Ce chapitre souligne les questions propres à la notation de la musique +arabe. + +@menu +* Références pour la musique arabe:: +* Noms des notes en arabe:: +* Armures arabes:: +* Métriques arabes:: +* Exemple de musique arabe:: +* Lectures complémentaires pour la musique arabe:: +@end menu + + +@node Références pour la musique arabe +@unnumberedsubsubsec Références pour la musique arabe +@translationof References for Arabic music + +@cindex Musique arabe +@cindex intervalles medium +@cindex maqam +@cindex maqams + +Jusqu'à nos jours, la musique arabe a principalement été transmise +comme une tradition orale. Lorsqu'elle était transcrite, c'était en +général sous forme de canevas sur lequel le rôle des interprètes était +d'improviser substantiellement. La notation occidentale, cependant, +est de plus en plus utilisée, avec quelques variations, pour transmettre +et préserver la musique arabe. + +Certains éléments de notation musicale occidentale, tels que les +transcriptions d'accords ou de parties indépendantes, ne sont pas +nécessaires pour retranscrire les pièces arabes les plus +traditionnelles. Il y a cependant quelques besoins spécifiques, tels +que des intervalles se trouvant entre le demi-ton et le ton qui +s'ajoutent aux intervalles mineurs ou majeurs utilisés dans la musique +occidentale. Il est également nécessaire de regrouper et de noter un +grand nombre de maqams (modes) différents qui font partie de la musique +arabe. + +En général, la notation de la musique arabe n'essaie pas d'indiquer +précisément les micro-intervalles intervenant dans la pratique musicale. + +Plusieurs particularités propres à la musique arabe sont traitées +ailleurs@tie{}: + +@itemize +@item Les noms des notes et altérations (y compris les quarts de tons) +peuvent être adaptés comme l'explique +@ref{Nom des notes dans d'autres langues}. + +@item Les armures peuvent également être adaptées comme expliqué dans +@ref{Armure}. + +@item Des métriques complexes peuvent nécessiter de grouper les notes +manuellement, comme décrit dans @ref{Barres de ligature manuelles}. + +@item Les @notation{Takasim}, qui sont des improvisations rythmiquement +libres, peuvent être écrites en omettant les barres de mesures, de la +façon indiquée dans @ref{Musique sans métrique}. +@end itemize + +@seealso +Manuel de notation : +@ref{Nom des notes dans d'autres langues}, +@ref{Armure}, +@ref{Barres de ligature manuelles}. + +Morceaux choisis : +@rlsrnamed{World music,Musiques du monde}. + +@node Noms des notes en arabe +@unnumberedsubsubsec Noms des notes en arabe +@translationof Arabic note names + +@cindex noms des notes en arabe +@cindex arabe, noms des notes en + +Les noms de note les plus traditionnels en arabe peuvent être très +longs et ne conviennent pas à l'écriture de la musique, aussi ne +sont ils pas utilisés. Les noms de note anglais ne sont pas très +courants dans l'éducation musicale en arabe, c'est pourquoi on utilise +plus volontiers les noms italiens (@code{do, re, mi, fa, sol, la, si}). +On peut également utiliser des altérations, comme cela est expliqué +dans @ref{Nom des notes dans d'autres langues}. + +Par exemple, voici comment on peut écrire la gamme arabe +@notation{rast}@tie{}: + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + do re misb fa sol la sisb do sisb la sol fa misb re do +} +@end lilypond + +@cindex symbole arabe d'un demi-bémol +@cindex aspect d'un symbole de demi-bémol +@cindex demi-bémol + +Le symbole indiquant un demi-bémol ne correspond pas au symbole +utilisé dans la notation arabe. Si le symbole particulier du +demi-bémol arabe doit absolument être utilisé, il est possible +de s'en approcher en faisant précéder la note par la commande +@code{\dwn} définie dans le fichier @file{arabic.ly}. +Cette méthode ne peut toutefois pas être utilisée pour modifier +l'aspect du demi-bémol dans l'armure. + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + \set Staff.extraNatural = ##f + dod dob dosd \dwn dob dobsb dodsd do do +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Nom des notes dans d'autres langues} + +Morceaux choisis : +@rlsrnamed{World music,Musiques du monde}. + + +@node Armures arabes +@unnumberedsubsubsec Armures arabes +@translationof Arabic key signatures + +@cindex armures arabes + +@c Les balises @notation sont des commandes LilyPond prédéfinies, +@c elles ne doivent donc pas être traduites. -vv + +Outre les armures mineures et majeures, les armures suivantes +sont définies dans la fichier @file{arabic.ly}@tie{}: @notation{bayati}, +@notation{rast}, @notation{sikah}, @notation{iraq} et @notation{kurd}. +Ces armatures définissent un petit nombre de groupes de maqams plutôt +que le grand nombre de maqams habituellement utilisés. + +En général, un maqam utilise l'armure de son groupe ou d'un groupe +voisin et diverses altérations accidentelles sont indiquées tout au long +de la musique. + +Par exemple, pour indiquer l'armure d'une pièce en maqam muhayer@tie{}: + +@example +\key re \bayati +@end example + +@noindent +Ici, @var{re} est le nom de la tonalité par défaut de la base +maqam dans le groupe. + +Alors que l'armure correspond à un groupe, il est courant que le titre +mentionne un maqam en particulier. Ainsi, dans cet exemple, le titre +devrait faire apparaître le nom du maqam muhayer. + +D'autres maqams du même groupe bayati, comme l'explique le tableau +ci-dessous (bayati, hussaini, saba, et ushaq), peuvent être indiqués de +la même manière. Ils sont autant de variations du maqam de base, le +plus courant, du groupe (en l'occurrence, bayati). En général, c'est +dans les tétracordes supérieurs que ces modes apparentés diffèrent, +@c pas la moindre idée de ce dont il est question -vv +ou dans certains détails de disposition qui ne changent pas +fondamentalement leur nature. + +Certains maqams ne sont qu'une modulation de leur maqam de base. +Ainsi, dans ce même groupe de bayati, du maqam Nawa, dont la modulation +est indiquée entre parenthèses dans le tableau. +Les maqams arabes n'admettent que des modulations limitées, en raison de +la nature des instruments de musique arabes. Le Nawa peut être indiqué +comme suit@tie{}: + +@example +\key sol \bayati +@end example + +En musique arabe, le terme utilisé pour désigner un groupe maqam, +tel que bayati, est également lui-même un maqam, généralement le plus +important dans le groupe@tie{}; on peut le considérer comme un maqam +de base. + +Voici une suggestion de groupement qui relie les maqams les plus +courants à leur armure@tie{}: + +@multitable @columnfractions 0.1 0.1 0.1 0.6 +@headitem groupe maqam + @tab Armure + @tab Tonique + @tab Autres maqams dans le groupe (tonique) +@item ajam + @tab major + @tab sib + @tab jaharka (fa) +@item bayati + @tab bayati + @tab re + @tab hussaini, muhayer, saba, ushaq, nawa (sol) +@item hijaz + @tab kurd + @tab re + @tab shahnaz, shad arban (sol), hijazkar (do) +@item irakien + @tab iraq + @tab sisb + @tab - +@item kurde + @tab kurd + @tab re + @tab kurde hijazkar (do) +@item nahawand + @tab minor + @tab do + @tab busalik (re), farah faza (sol) +@item nakriz + @tab mineur + @tab do + @tab nawa athar, hisar (re) +@item rast + @tab rast + @tab do + @tab mahur, yakah (sol) +@item sikah + @tab sikah + @tab misb + @tab huzam +@end multitable + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Manuel de notation : +@ref{Armure}. + +Manuel d’initiation : +@rlearning{Altérations et armure}. + +Référence des propriétés internes : +@rinternals{KeySignature}. + +Morceaux choisis : +@rlsrnamed{World music,Musiques du monde}, +@rlsrnamed{Pitches,Hauteurs}. + + +@node Métriques arabes +@unnumberedsubsubsec Métriques arabes +@translationof Arabic time signatures + +@cindex métriques arabes +@cindex Forme Semai +@cindex taqasim + +Quelques formes de musique classique arabes et turques telles que +@notation{Semai} utilisent des métriques inhabituelles comme le 10/8. +Ceci peut impliquer une manière de grouper les notes fort différente de +la musique écrite existante, où les notes ne sont pas groupées par temps +mais d'une façon difficile à reproduire automatiquement. +Il est possible d'y remédier en désactivant la ligature automatique et +en groupant les notes manuellement. Lorsque l'enjeu n'est pas de +reproduire exactement un texte existant, il est toujours possible +d'ajuster le comportement de ligature automatique ou d'utiliser des +chiffres de mesure composés. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{arabic-improvisation.ly} + + +@seealso +Manuel de notation : +@ref{Barres de ligature manuelles}, +@ref{Barres de ligature automatiques}, +@ref{Musique sans métrique}, +@ref{Altérations accidentelles automatiques}, +@ref{Définition des règles de ligature automatique}, +@ref{Métrique}. + +Morceaux choisis : +@rlsrnamed{World music,Musiques du monde}. + +@node Exemple de musique arabe +@unnumberedsubsubsec Exemple de musique arabe +@translationof Arabic music example + +@cindex exemple de musique arabe +@cindex modèle de musique arabe +@cindex musique arabe, exemple + +Voici un modèle qui utilise également le début d'un Semai turc courant +dans l'éducation musicale arabe, pour illustrer quelques unes des +particularités de la notation musicale arabe, comme des intervalles +intermédiaires et des modes inhabituels traités dans ce chapitre. + +@lilypond[quote,verbatim] +\include "arabic.ly" +\score { + \relative re' { + \set Staff.extraNatural = ##f + \set Staff.autoBeaming = ##f + \key re \bayati + \time 10/8 + + re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 + re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb + fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb + do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 + } + \header { + title = "Semai Muhayer" + composer = "Jamil Bek" + } +} +@end lilypond + +@seealso +Morceaux choisis : +@rlsrnamed{World music,Musiques du mondes}. + +@node Lectures complémentaires pour la musique arabe +@unnumberedsubsubsec Lectures complémentaires pour la musique arabe +@translationof Further reading for Arabic music + +@enumerate + +@item +@emph{La musique des Arabes} par Habib Hassan Touma [Amadeus Press, +1996], contient une étude des maqams et leur méthode de classification. + +Il existe également de nombreux sites web qui expliquent les maqams, +dont quelques uns s'accompagnent d'exemples audio@tie{}: + +@itemize @bullet +@item +@uref{http://www.maqamworld.com/} +@item +@uref{http://www.turath.org/} +@end itemize + +Si tout le monde s'accorde à apparenter les maqams d'après leur +tétracorde inférieur, parfois transposé, les méthodes de +classification varient dans certains détails. + +@item +Les sources ne sont pas entièrement cohérentes (parfois dans un même +texte) quant à la manière d'indiquer l'armure de certains maqams. +Il est courant, cependant, d'utiliser une armure par groupe plutôt +qu'une armure différente pour chaque maqam. + +Des méthodes de luth arabe, l'@dfn{Oud}, par les auteurs suivants, +contiennent des exemples de compositions principalement turques et +arabes, + +@itemize @bullet +@item +Charbel Rouhana +@item +George Farah +@item +Ibrahim Ali Darwish Al-masri +@end itemize +@end enumerate + +@node Musique classique turque +@subsection Musique classique turque +@translationof Turkish classical music + + +Ce chapitre met en évidence des questions propres à la notation de la +musique classique turque. + +@menu +* Références pour la musique classique turque:: +* Noms des notes en turc:: +@end menu + + +@node Références pour la musique classique turque +@unnumberedsubsubsec Références pour la musique classique turque +@translationof References for Turkish classical music + +@cindex musique turque +@cindex turque, musique +@cindex musique ottomane +@cindex intervalles de comma +@cindex comma +@cindex maqam +@cindex makamlar + +La musique classique turque s'est développée dans l'Empire Ottoman à peu +près à la même période que la musique classique en Europe, et a continué +jusqu'au XXe et XXIe siècle comme une tradition vibrante et distincte +avec sa propre théorie, ses propres formes, et styles d'interprétation. +Parmi ses caractéristiques remarquables, se trouve l'usage de +micro-intervalles fondés sur des @qq{commas} d'un neuvième de ton, dont +sont dérivées les formes mélodiques @notation{makam} (pluriel +@notation{makamlar}). + + +Quelques questions relatives à la musique classique turque sont +traitées dans d'autres chapitres@tie{}: + +@itemize +@item Les noms de notes et altérations sont mentionnés dans +@ref{Noms de note et altérations non-occidentaux}. + +@end itemize + +@node Noms des notes en turc +@unnumberedsubsubsec Noms des notes en turc +@translationof Turkish note names + +@cindex turc, noms des notes +@cindex makam +@cindex makamlar + +La musique classique turque attribue traditionnellement un nom unique à +chaque hauteur, et du fait de la division du ton en neuf parts, les +makamlar emploient une échelle de hauteurs complètement différente des +gammes et modes d'occident@tie{}: +@notation{koma} de 1/9 de ton entier, @notation{eksik bakiye} (3/9), +@notation{bakiye} (4/9), @notation{kücük mücenneb} (5/9), +@notation{büyük mücenneb} (8/9), @notation{tanîni} (un ton entier) +et @notation{artık ikili} (12/9 ou 13/9 de ton). + +D'un point de vue de notation moderne, il est pratique d'utiliser +positions occidentales des notes sur la portée (do, ré, mi@dots{}) avec +des altérations spéciales qui haussent ou baissent les notes par +intervalles de 1/9, 4/9, 5/9 et 8/9 de ton. Ces altérations sont +définies dans le dossier @file{makam.ly} (pour trouver l'emplacement de +ce dossier dans votre système, voir +@rlearning{Autres sources de documentation}). Une description plus +détaillée se trouve dans +@ref{Noms de note et altérations non-occidentaux}. diff --git a/Documentation/fr/search-box.ihtml b/Documentation/fr/search-box.ihtml new file mode 100644 index 0000000000..889c3432ab --- /dev/null +++ b/Documentation/fr/search-box.ihtml @@ -0,0 +1,20 @@ + + +
+ + + +
diff --git a/Documentation/fr/texidocs/GNUmakefile b/Documentation/fr/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/fr/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc b/Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc new file mode 100644 index 0000000000..2f42adea2f --- /dev/null +++ b/Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc @@ -0,0 +1,2 @@ +%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5 + doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes" diff --git a/Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc b/Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc new file mode 100644 index 0000000000..cdf3c73a02 --- /dev/null +++ b/Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +L'@code{ambitus} peut être individualisé par voix. Il faut en pareil +cas éviter qu'ils se chevauchent. + +" + doctitlefr = "Un ambitus par voix" + diff --git a/Documentation/fr/texidocs/adding-drum-parts.texidoc b/Documentation/fr/texidocs/adding-drum-parts.texidoc new file mode 100644 index 0000000000..2131b61b07 --- /dev/null +++ b/Documentation/fr/texidocs/adding-drum-parts.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea + texidocfr = " +Grâce à la puissance des outils préconfigurés tels que la fonction +@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de +parties pour percussions est extrêmement simplifiée : chaque composant +d'une batterie trouve sa place sur une portée dédiée (avec une clef +spécifique) et les têtes de note sont spécifiques à chaque élément. +Il est également possible d'affecter un symbole particulier à chaque +élément, tout comme de restreindre le nombre de lignes de la portée. + +" + + doctitlefr = "Ajout de parties de batterie" + diff --git a/Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc b/Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc new file mode 100644 index 0000000000..0e4b4bfb70 --- /dev/null +++ b/Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 96ee692447057131395fe4c1f9fe55805b710aa6 + texidocfr = "Ajout de doigtés à des tablatures" + + doctitlefr = " +L'ajout de doigtés à des tablatures s'obtient en conjuguant des +@code{\\markup} et des @code{\\finger}. +" diff --git a/Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc b/Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc new file mode 100644 index 0000000000..0e60f7e1ea --- /dev/null +++ b/Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + + texidocfr = " +Lorsque le nombre d'instruments cités dans la réduction pour piano se +multiplie, vous pourriez avoir intérêt à créer votre propre fonction +pour gérer ces repères. La fonction musicale @code{\\cueWhile} prend +quatre arguments@tie{}: la musique d'où provient la citation, telle que +définie par @code{\\addQuote}, le nom qui sera mentionné en regard de +cette citation, son positionnement -- @code{#UP} ou @code{#DOWN} selon +qu'il sera attribué à @code{\\voiceOne} et placé au-dessus ou +@code{\\voiceTwo} et placé en dessous -- et enfin la musique du piano +qui interviendra en parallèle. Le nom de l'instrument en question +viendra s'aligner sur la gauche de la citation. Bien que vous puissiez +effectuer plusieurs citations, elle ne peuvent être simultanées. + +" + doctitlefr = "Indication de l'instrument cité dans l'accompagnement d'une +partition pour chœur" + diff --git a/Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc b/Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc new file mode 100644 index 0000000000..fdfaeca7c8 --- /dev/null +++ b/Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5 + texidocfr = " +Avec un peu de code Scheme, voici comment ajouter facilement +la date du jour à votre partition. +" + + doctitlefr = "Ajout de la date du jour à une partition" diff --git a/Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc new file mode 100644 index 0000000000..a5b3412662 --- /dev/null +++ b/Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +D'ordinaire, le graveur @code{Volta_engraver} réside dans le contexte +@code{Score} ; les crochets précédant une reprise s'impriment donc +seulement au-dessus de la portée du haut. On peut ajuster cela en +déplaçant ce graveur vers les contextes de portée (@code{Staff}) qui +doivent comporter ces crochets. + +" + doctitlefr = "Ajout du crochet de reprise à d'autres portées" + diff --git a/Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc b/Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc new file mode 100644 index 0000000000..7a7ae54b38 --- /dev/null +++ b/Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +Dans certains cas de musique polyphonie complexe, une voix +supplémentaire peut permettre d'éviter les risques de collision. +Lorsque quatre voix parallèles ne suffisent pas, la fonction Scheme +@code{context-spec-music} permet d'ajouter des d'autres voix. + +" + doctitlefr = "Ajout de voix pour éviter les collisions" + diff --git a/Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc b/Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc new file mode 100644 index 0000000000..357fe34ce1 --- /dev/null +++ b/Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea + texidocfr = " +Cet extrait illustre la manière de rapprocher la ligne de paroles +de la portée. + +" + doctitlefr = "Ajustement de l'espacement vertical des paroles" + diff --git a/Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc new file mode 100644 index 0000000000..b59a009648 --- /dev/null +++ b/Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +La propriété @code{shortest-duration-space} peut devoir être retouchée +pour ajuster l'apparence des chutes ou sauts. + +" + doctitlefr = "Ajustement du galbe des chutes ou sauts" + diff --git a/Documentation/fr/texidocs/aligning-bar-numbers.texidoc b/Documentation/fr/texidocs/aligning-bar-numbers.texidoc new file mode 100644 index 0000000000..e10b0fcac1 --- /dev/null +++ b/Documentation/fr/texidocs/aligning-bar-numbers.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Les numéros de mesure s'alignent en principe sur la droite de l'objet +dont ils dépendent. C'est normalement le coin gauche de la portée ou, +en cours de ligne, à gauche de la barre. Vous pouvez toutefois les +centrer par rapport à la barre ou les afficher à droite de la barre. + +" + doctitlefr = "Alignement des numéros de mesure" diff --git a/Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc b/Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc new file mode 100644 index 0000000000..a69a72f022 --- /dev/null +++ b/Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc @@ -0,0 +1,23 @@ +%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334 + texidocfr = " +Les indications textuelles peuvent s'aligner par rapport à d'autres +objets que des barres de mesure, tels que @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature}, ou +@code{time-signature}. + + + +Par défaut, les indications textuelles sont alignées avec le milieu +des objets de notation. Bien entendu, vous pouvez modifier les +propriétés des objets en question pour obtenir un autre +résultat comme l'illustre la deuxième ligne de l'exemple. Dans le cas +de portées multiples, ces réglages doivent être faits pour chacune +d'entre elles. + + + +" + doctitlefr = "Alignement des indications par rapport à divers objets +de notation" + diff --git a/Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc new file mode 100644 index 0000000000..1316257d82 --- /dev/null +++ b/Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +L'empilement des indications de doigté se fait par défaut à l'extérieur +de la portée. Néanmoins, il est possible d'annuler ce comportement. + +" + doctitlefr = "Impression des doigtés à l'intérieur de la portée" + diff --git a/Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc b/Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc new file mode 100644 index 0000000000..16003263a2 --- /dev/null +++ b/Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Si plusieurs voix se trouvent sur une même portée, on peut attribuer le +graveur @code{Ambitus_engraver} au contexte @code{Staff} afin d'obtenir +l'ambitus de toutes les voix cumulées, non d'une seule des voix actives. + +" + doctitlefr = "Ambitus sur plusieurs voix" + diff --git a/Documentation/fr/texidocs/ancient-fonts.texidoc b/Documentation/fr/texidocs/ancient-fonts.texidoc new file mode 100644 index 0000000000..7451c0a387 --- /dev/null +++ b/Documentation/fr/texidocs/ancient-fonts.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea + texidocfr =" +Voici comment graver la plupart, sinon tous les symboles que +LilyPond prend en charge en matière de musique ancienne. + +" + doctitlefr = "Gravure de musique ancienne" diff --git a/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc new file mode 100644 index 0000000000..73084296cb --- /dev/null +++ b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Voici comment vous pourriez transcrire du grégorien. Pour mémoire, il +n'y a en grégorien ni de découpage en mesure, ni de hampe ; seules +sont utilisées des têtes de note blanches ou noires, ainsi que des +signes spécifiques permettant d'indiquer des silences de différentes durées. + +" + doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique grégorienne" diff --git a/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc new file mode 100644 index 0000000000..12ca456601 --- /dev/null +++ b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Lorsque l'on transcrit de la musique mensurale, un @emph{incipit} permet +d'indiquer la tonalité et le tempo d'origine. Si les musiciens sont de +nos jours habitués aux barres de mesures qui présentent la structure +rythmique d'une œuvre, elles n'étaient pas en vigueur à l'époque où ces +pièces ont été composées, d'autant plus que la @qq{métrique} pouvait +changer au fil des notes. Un compromis consiste à imprimer des barres +entre les portées plutôt que sur chacune d'elles. + +" + doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique mensurale" diff --git a/Documentation/fr/texidocs/anglican-psalm-template.texidoc b/Documentation/fr/texidocs/anglican-psalm-template.texidoc new file mode 100644 index 0000000000..89b1ec477e --- /dev/null +++ b/Documentation/fr/texidocs/anglican-psalm-template.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 092f85605dcea69efff5ef31de4ff100346d6ef8 + + texidocfr = " +Cet exemple illustre la manière de présenter un cantique tel qu'on le +trouve dans l'église anglicane. Vous noterez comment sont ajoutés les +couplets indépendamment de la musique. Dans le but de vous montrer +plusieurs styles, comparez le code des deux couplets. + +" + doctitlefr = "Psalmodie anglicane" + diff --git a/Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc new file mode 100644 index 0000000000..0b7df88212 --- /dev/null +++ b/Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc @@ -0,0 +1,20 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La propriété @code{shapeNoteStyles} permet d'affecter un profil +particulier à chaque degré de la gamme -- à partir de l'armure ou +de la propriété @code{tonic}. Ses valeurs sont constituées d'une liste +de symboles, qu'il s'agisse de formes géométriques (@code{triangle}, +@code{cross}, ou @code{xcircle}) ou basés sur la tradition des graveurs +américains (avec quelques noms de note latins). + +LilyPond dispose de deux raccourcis, @code{\aikenHeads} et +@code{\sacredHarpHeads}, permettant de reproduire déanciens recueils de +chansons américaines. + +L'exemple suivant montre plusieurs manières de profiler les têtes de +note, ainsi que la capacité de trnsposer tout en respectant la fonction +harmonique de chaque note dans la gamme. + +" + doctitlefr = "Profilage des notes selon leur degré dans la gamme" + diff --git a/Documentation/fr/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc b/Documentation/fr/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc new file mode 100644 index 0000000000..04556f52a0 --- /dev/null +++ b/Documentation/fr/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 27047b46391c50161f4937699af6200cc156c753 + texidocfr = " +Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées +par défaut en deux groupes de quatre. + +En utilisant une macro qui modifie le comportement des ligatures +automatiques, voici comment obtenir des ligatures basées sur la valeur +d'une noire. + +" + doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" diff --git a/Documentation/fr/texidocs/beam-endings-in-score-context.texidoc b/Documentation/fr/texidocs/beam-endings-in-score-context.texidoc new file mode 100644 index 0000000000..fbb0e9db38 --- /dev/null +++ b/Documentation/fr/texidocs/beam-endings-in-score-context.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +Les règles de ligatures définies au niveau du contexte @code{Score} +s'appliqueront à toutes les portées. Il est toutefois possible de +moduler au niveau @code{Staff} ou @code{Voice}@tie{}: + +" + doctitlefr = "Définition de règles de ligature pour la partition" diff --git a/Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc b/Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc new file mode 100644 index 0000000000..98a75239a6 --- /dev/null +++ b/Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 548076f550a2b7fb09f1260f0e5e2bb028ad396c +texidocfr = " +Aucune règle de ligature automatique n'est disponible pour une mesure à +7/8. Il faudra donc, en pareil cas, définir vous-même les règles de +regroupement. Pour, par exemple, ligaturer sur la base de 2/8-3/8-2/8, +il faudra donc définir les terminaisons de 2/8 et 5/8 : + +" + doctitlefr = "Règle de ligature dans une mesure à 7/8" diff --git a/Documentation/fr/texidocs/beams-across-line-breaks.texidoc b/Documentation/fr/texidocs/beams-across-line-breaks.texidoc new file mode 100644 index 0000000000..af47ea4039 --- /dev/null +++ b/Documentation/fr/texidocs/beams-across-line-breaks.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + + texidocfr = " +Il est normalement impensable qu'un saut de ligne tombe au milieu d'une +ligature. LilyPond permet néanmoins de l'obtenir. + +" + doctitlefr = "Ligature au moment d'un saut de ligne" diff --git a/Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc b/Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc new file mode 100644 index 0000000000..aaaa147eea --- /dev/null +++ b/Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 5b980ee07bba23d3633de1d371fb2926f164e295 + + texidocfr = " +Il est possible de rapetisser le cercle d'un @code{\\flageolet} grâce +à une fonction Scheme. + +" + doctitlefr = "Modifier la taille d'un \\flageolet" + diff --git a/Documentation/fr/texidocs/changing-beam-knee-gap.texidoc b/Documentation/fr/texidocs/changing-beam-knee-gap.texidoc new file mode 100644 index 0000000000..71a4ebb633 --- /dev/null +++ b/Documentation/fr/texidocs/changing-beam-knee-gap.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + texidocfr = " +LilyPond insère automatiquement des ligatures coudées --- certaines +hampes vers le haut, d'autres vers le bas --- lorsqu'il détecte un +intervalle important entre des têtes de notes. Ce comportement peut être +changé par l'intermédiaire de l'objet @code{auto-knee-gap} --- défini +par défaut à @samp{5,5} espace, plus la largeur et la pente de la +ligature en question. + +" + doctitlefr = "Ligature et directions de hampe inversées" diff --git a/Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc b/Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc new file mode 100644 index 0000000000..d084a5cf6e --- /dev/null +++ b/Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 +texidocfr = " +Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur +la portée des @qq{ silences d'église } -- @emph{Kirchenpause} en +allemand -- et qui sont une simple suite de rectangles. La propriété +@code{expand-limit} permet d'obtenir un silence unique : + +" + doctitlefr = "Modifier l'apparence d'un silence multi-mesures" diff --git a/Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc b/Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc new file mode 100644 index 0000000000..da9f872cf6 --- /dev/null +++ b/Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: d7cf09411ee80eaf0092af0aa532de64c0c6248e + texidocfr = " +Lorsque LilyPond génère un fichier MIDI, chaque portée sera par défaut +affectée à un canal, quel que soit le nombre de voix qu'elle contient. +Ceci permet d'éviter de se retrouver à court de canaux, sachant qu'il +n'y en a que seize de disponibles. + +Le fait de déplacer le @code{Staff_performer} dans le contexte +@code{Voice} permet d'affecter à chaque voix d'une même portée un canal +MIDI spécifique. Dans l'exemple suivant, la même portée donnera lieu à +deux canaux MIDI différents, chacun étant affecté de son propre +@code{midiInstrument}. + +" + doctitlefr = "Affectation d'un canal MIDI par voix" diff --git a/Documentation/fr/texidocs/changing-partcombine-texts.texidoc b/Documentation/fr/texidocs/changing-partcombine-texts.texidoc new file mode 100644 index 0000000000..c9eba93ffd --- /dev/null +++ b/Documentation/fr/texidocs/changing-partcombine-texts.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +Lorsque vous regroupez automatiquement des parties, vous pouvez +modifier le texte qui sera affiché pour les solos et pour les parties à +l'unisson : + +" + doctitlefr = "Modification des indications de parties combinées" + diff --git a/Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc new file mode 100644 index 0000000000..a45b6657a9 --- /dev/null +++ b/Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Le texte par défaut des crescendos et decrescendos se change en +modifiant les propriétés de contexte @code{crescendoText} et +@code{decrescendoText}. L'aspect de la ligne d'extension est fonction +de la propriété @code{'style} du @code{DynamicTextSpanner}. Sa valeur +par défaut est @code{'hairpin}, mais d'autres valeurs sont disponibles, +comme @code{'line}, @code{'dashed-line} et @code{'dotted-line}. + +" + doctitlefr = "Modifidation du texte et de l'extension de nuances textuelles" + diff --git a/Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc b/Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc new file mode 100644 index 0000000000..3d40d129a2 --- /dev/null +++ b/Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 31097723b2b816696ad61696630a80ff17a39557 + texidocfr = "L'affichage d'un @emph{ambitus} peut s'affiner pour + répondre à vos préférences en matière d'esthétique. +" + + doctitlefr = "Réglage de l'affichage d'un ambitus" + diff --git a/Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc b/Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc new file mode 100644 index 0000000000..959ce40ee1 --- /dev/null +++ b/Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +On peut choisir le glyphe imprimé par cette commande, en modifiant la +propriété @code{text} de l'objet @code{BreathingSign}, pour lui affecter +n'importe quelle indication textuelle. + +" + doctitlefr = "Modification de l'indicateur de respiration" + diff --git a/Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc b/Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc new file mode 100644 index 0000000000..a9c81e132f --- /dev/null +++ b/Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + + texidocfr = "Voici comment modifier le nombre de points d'augmentation +affectés à une note en particulier. + +" + doctitlefr = "Spécification du nombre de points d'augmentation d'une note" + diff --git a/Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc b/Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc new file mode 100644 index 0000000000..0c0b9763f0 --- /dev/null +++ b/Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +La taille et l'épaisseur des diagrammes de doigté pour bois est modifiable +à souhait. + +" + + doctitlefr = "Modification de la taille d'un diagramme pour bois" + diff --git a/Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc new file mode 100644 index 0000000000..a0216a49e5 --- /dev/null +++ b/Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans +pour autant l'imprimer. Il suffit alors de le rendre invisible aux +interprètes. + +" + doctitlefr = "Changement de tempo sans indication sur la partition" + diff --git a/Documentation/fr/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc b/Documentation/fr/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc new file mode 100644 index 0000000000..9f015aea2e --- /dev/null +++ b/Documentation/fr/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La commande @code{\\time} gère les propriétés +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +et @code{measureLength} dans le contexte @code{Timing}, normalement +rattaché à @code{Score}. Le fait de modifier la valeur de +@code{timeSignatureFraction} aura pour effet de changer l'apparence du +symbole affiché sans pour autant affecter les autres propriétés de la +métrique : + +" + doctitlefr = "Changement de métrique sans affecter les règles de ligature" diff --git a/Documentation/fr/texidocs/changing-the-tuplet-number.texidoc b/Documentation/fr/texidocs/changing-the-tuplet-number.texidoc new file mode 100644 index 0000000000..3c00ba6d77 --- /dev/null +++ b/Documentation/fr/texidocs/changing-the-tuplet-number.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +L'apparence du chiffre est déterminée par la propriété @code{text} dans +@code{TupletNumber}. La valeur par défaut imprime seulement le +dénominateur, mais si elle est définie par la fonction +@code{tuplet-number::calc-fraction-text}, la fraction entière +@var{num}:@var{den} sera imprimée à la place. + +" + doctitlefr = "Modifier l'apparence du chiffre de nolet" diff --git a/Documentation/fr/texidocs/chant-or-psalms-notation.texidoc b/Documentation/fr/texidocs/chant-or-psalms-notation.texidoc new file mode 100644 index 0000000000..f7ac3ac810 --- /dev/null +++ b/Documentation/fr/texidocs/chant-or-psalms-notation.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +Ce style de notation permet d'indiquer la mélodie d'une psalmodie +lorsque les strophes sont de longueur inégale. + +" + doctitlefr = "Notation pour psalmodie" + diff --git a/Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc b/Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc new file mode 100644 index 0000000000..4dae4ab67e --- /dev/null +++ b/Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc @@ -0,0 +1,20 @@ +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +L'outil de combinaison de parties (la commande @code{\\partcombine}) +permet d'avoir deux parties différentes sur une même portée. LilyPond +ajoute automatiquement des indications textuelles, telles que @qq{solo} +ou @qq{a2}. Si votre intention n'est que de fusionner les parties, sans +ajouter de texte, assignez faux à la propriété +@code{printPartCombineTexts}. Dans le cas de partitions vocales, et +plus particulièrement d'hymnes, ces @qq{solo/a2} ne sont d'aucune +utilité, aussi vaut-il mieux les désactiver. Dans le cas où il y aurait +alternance entre @emph{solo} et @emph{tutti}, il vaut mieux faire appel +à de la musique polyphonique standard. + +Voici trois moyens d'imprimer deux parties sur un même portée : en +polyphonie normale, avec @code{\\partcombine} sans indication +supplémentaire, et avec @code{\\partcombine} commentée. + +" + doctitlefr = "Combinaison de deux parties sur une même portée" + diff --git a/Documentation/fr/texidocs/compound-time-signatures.texidoc b/Documentation/fr/texidocs/compound-time-signatures.texidoc new file mode 100644 index 0000000000..331600da00 --- /dev/null +++ b/Documentation/fr/texidocs/compound-time-signatures.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Des métriques telles que @qq{5/8} peuvent s'interpréter sous une forme +décomposée --- @qq{3/8 + 2/8} par exemple --- qui combine plusieurs +métriques. LilyPond est capable de rendre ce type de notation, plus + facile à lire et à interpréter, en imprimant cette métrique composite + et en adaptant les règles de ligature automatique en conséquence. + +" + doctitlefr = "Métrique décomposée" diff --git a/Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc new file mode 100644 index 0000000000..57db1cb500 --- /dev/null +++ b/Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc @@ -0,0 +1,24 @@ +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +Les règles de ligature par mesure sont gérées par la propriété +@code{beatStructure}. Ses valeurs par défaut sont répertoriées, par +métrique, dans le fichier @code{scm/@/time-@/signature@/-settings@/.scm}. Elles +sont modifiables grâce à la commande @code{\\set}. +La fonction Scheme @code{set-time-signature} permet quant à elle de +définir à la fois la métrique et la pulsation. Celle-ci prend trois +arguments@tie{}: le nombre de pulsations, la durée de la pulsation et le +regroupement des pulsations dans la mesure. @code{\\time} et +@code{set-time-signature} s'appliquent tous deux au contexte +@code{Timing}@tie{}; ils ne redéfiniront donc pas les valeurs de +@code{beatStructure} ou @code{baseMoment} lorsque qu'elles sont +modifiées dans un contexte de niveau inférieur comme @code{Voice} par +exemple. +Si l'on fait appel au @code{Measure_grouping_engraver}, la fonction +@code{set-time-signature} créera aussi des symboles +@code{MeasureGrouping}. Ces symboles aident à la lecture des œuvres +modernes à la rythmique complexe. Dans l'exemple qui suit, la mesure à +9/8 est divisée en 2, 2, 2 et 3, alors que la mesure à 5/8 répond aux +règles par défaut contenues dans le fichier @w{@code{scm/@/beam@/-settings@/.scm}}. + +" + doctitlefr = "Signes de direction, signes de sous-groupe" diff --git a/Documentation/fr/texidocs/contemporary-glissando.texidoc b/Documentation/fr/texidocs/contemporary-glissando.texidoc new file mode 100644 index 0000000000..f6e028b50a --- /dev/null +++ b/Documentation/fr/texidocs/contemporary-glissando.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +De nos jours, il peut arriver que la note d'arrivée d'un glissando soit +absente de la partition. Pour ce faire, il vous faudra utiliser une +cadence et « masquer » la note d'arrivée. + +" + doctitlefr = "Glissando contemporain" + diff --git a/Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc new file mode 100644 index 0000000000..03b0ee54cc --- /dev/null +++ b/Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +Le positionnement des doigtés peut être contrôlé de manière très précise. +Afin que l'orientation soit prise en compte, il est nécessaire d'utiliser +une syntaxe d'accord @code{< >}, même s'il ne s'agit que d'une seule note. +" + doctitlefr = "Contrôler la position des doigtés dans un accord" + diff --git a/Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc new file mode 100644 index 0000000000..fa3db4484d --- /dev/null +++ b/Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Les symboles s'ordonnent verticalement suivant la propriété +@code{script-priority}. Plus sa valeur numérique est faible, plus le +symbole sera proche de la note. Dans l'exemple suivant, l'objet +@code{TextScript} -- le dièse -- a d'abord la propriété la +plus basse, et il est donc placé plus près de la note ; ensuite c'est +l'objet @code{Script} -- le mordant -- qui a la propriété la plus basse, +et il se place alors sous le dièse. Lorsque deux objets ont la même +priorité, c'est l'ordre dans lequel ils sont indiqués qui détermine +lequel sera placé en premier. + +" + doctitlefr = "Contrôle de l'ordre vertical des articulations et ornements" + diff --git a/Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc b/Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc new file mode 100644 index 0000000000..ab3d0b901a --- /dev/null +++ b/Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + + texidocfr = " +Selon la tradition, les crochets indicateurs de nolet sont toujours +imprimés sauf dans le cas où ils seraient de la même longuer qu'une +ligature. LilyPond permet, au travers de la propriété +@code{'bracket-visibility}, de contôler précisément leur +affichage@tie{}: déterminée à @code{#t}, ils seront toujours +imprimés@tie{}; @code{#f} permet de ne jamais les imprimer, et +@code{#'if-no-beam} les imprimera en l'absence de ligature. + +" + doctitlefr = "Contrôle de l'impression des crochets de nolet" + diff --git a/Documentation/fr/texidocs/creating-a-delayed-turn.texidoc b/Documentation/fr/texidocs/creating-a-delayed-turn.texidoc new file mode 100644 index 0000000000..159f4eb6b1 --- /dev/null +++ b/Documentation/fr/texidocs/creating-a-delayed-turn.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Obtenir un @emph{grupetto} retardé et dans lequel la note la plus basse +est altérée requiert quelques surcharges. La propriété +@w{@code{outside-staff-priority}} doît être désactivée (@code{#f}) pour +éviter qu'elle prenne le pas sur la propriété @w{@code{avoid-slur}}. La +valeur assignée à @code{halign} permet de gérer horizonalement le +@w{« retard »}. + +" + + doctitlefr = "Création d'un grupetto retardé" diff --git a/Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc new file mode 100644 index 0000000000..2749017f29 --- /dev/null +++ b/Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Affecter le graveur @code{Span_arpeggio_engraver} au contexte de la +portée (@code{Staff}) permet de distribuer un arpège sur plusieurs voix : + +" + doctitlefr = "Arpège distribué sur plusieurs voix" + diff --git a/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc new file mode 100644 index 0000000000..d6a284d55d --- /dev/null +++ b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Dans une double portée pour piano (@code{PianoStaff}), un arpège peut +s'étendre sur les deux portées grâce à la propriété +@code{PianoStaff.connectArpeggios}. + +" + doctitlefr = "Arpège distribué sur une partition pour piano" + diff --git a/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc new file mode 100644 index 0000000000..723060c62c --- /dev/null +++ b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Il est possible de distribuer un arpège sur plusieurs portées d'un +système autre que le @code{PianoStaff} dès lors que vous incluez le +@code{Span_arpeggio_engraver} au contexte @code{Score}. + +" + doctitlefr = "Arpège distribué pour un autre contexte que le piano" + diff --git a/Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc new file mode 100644 index 0000000000..f63bcae606 --- /dev/null +++ b/Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Vous pouvez créer des indications de tempo sous la forme d'étiquettes +textuelles -- des objets @code{markup} -- notamment des équivalences. +Cependant, elles n'apparaîtront pas dans le fichier MIDI. + +" + doctitlefr = "Création d'une indication métronomique sous forme d'étiquette" + diff --git a/Documentation/fr/texidocs/cross-staff-tremolos.texidoc b/Documentation/fr/texidocs/cross-staff-tremolos.texidoc new file mode 100644 index 0000000000..e63d23e708 --- /dev/null +++ b/Documentation/fr/texidocs/cross-staff-tremolos.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Dans la mesure où @code{\\repeat tremolo} requiert deux arguments +musicaux pour un trémolo d'accords, la note ou l'accord de la +portée opposée doît être encadré par des accolades et se voir adjoindre +la commande @code{\\change Staff}. + +" + doctitlefr = "Trémolo et changement de portée" + diff --git a/Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc b/Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc new file mode 100644 index 0000000000..3516e4ebf1 --- /dev/null +++ b/Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +Les propriétés d'un diagramme de fret sont modifiables grâce au +@code{'fret-diagram-details}. Lorsqu'ils sont générés sous forme +de @code{\markup}, rien n'empêche de les modifier en jouant sur les +réglages de l'objet @code{Voice.TextScript} ou bien directement sur +le @qq{markup}. + +" + doctitlefr = "Personnalisation des diagrammes de fret" + diff --git a/Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc b/Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc new file mode 100644 index 0000000000..5f2ad7c755 --- /dev/null +++ b/Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + + texidocfr = " +La liste des diagrammes standards prédéfinis pour la guitare peut être +augmentée d'autres définitions spécifiques à d'autres instruments. +Voici comment définir un nouvel accordage ainsi que quelques diagrammes +prédéfinis pour le @qq{cuatro vénézuélien}. + +Cet exemple illustre aussi la manière d'ajouter des doigtés aux +accords ; ils serviront de référence pour la boucle d'accord et seront +indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. + +Ces diagrammes ne peuvent pas être transposés, dans la mesure où ils +contiennent des informations sur les cordes. Ceci est amené à évoluer. + +" + doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments" + diff --git a/Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc new file mode 100644 index 0000000000..687c336f29 --- /dev/null +++ b/Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Lorsque, dans des regoupements de type @code{ChoirStaff} ou +@code{StaffGroup}, une seule portée est active, aucune indication n'est +donnée en début de ligne. Surcharger la propriété adéquate permet de +modifier ce comportement par défaut. + +Notez bien que dans le cas des @code{PianoStaff} et @code{GrandStaff}, +pour lesquels le délimiteur de système est une accolade et non un +crochet, il ne s'agit pas de la même propriété -- voir le deuxième +@emph{système} de l'exemple. + +" + doctitlefr = "Indicateur de regroupement et portée unique" + diff --git a/Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc b/Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc new file mode 100644 index 0000000000..e6574b5653 --- /dev/null +++ b/Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +Au début du XXème siècle, Schoenberg, Berg et Webern -- la « Seconde » +école de Vienne -- imaginèrent de donner une importance comparable aux +douze notes de la gamme chromatique, et éviter ainsi toute tonalité. +Pour ce faire, ces compositions font apparaître une altération à chaque +note, y compris un bécarre, pour mettre en exergue cette nouvelle +approche de la théorie et du langage musicaux. + +Voici comment obtenir une telle notation. + +" + doctitlefr = "Le dodécaphonisme : toute note est altérée" + diff --git a/Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc b/Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc new file mode 100644 index 0000000000..41eb594125 --- /dev/null +++ b/Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: a06cb0b0d9593ba110e001f2b0f44b8bef084693 + + texidocfr = " +Il s'agit de fonctions postfix pour personnaliser l'extension des +crescendos textuels. L'extension devrait débuter sur la première notte +de la mesure. Il faut utiliser @code{-\mycresc} -- comme une +articulation -- sous peine que le départ de l'extension n'apparaisse +qu'à la note suivante. +" + + doctitlefr = "Personnalisation des extenseurs de nuance postfix" + diff --git a/Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc b/Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc new file mode 100644 index 0000000000..5638b8b359 --- /dev/null +++ b/Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: a06cb0b0d9593ba110e001f2b0f44b8bef084693 + + texidocfr = " +Les lignes d'extension des commandes \cresc, \dim et \decresc peuvent +désormais être personnalisées facilement sous forme d'opérateurs +postfix. Soufflets et (de)crescendos peuvent cohabiter. \< et \> +produiront par défaut des soufflets, alors que \cresc etc. produiront +une indication textuelle avec extension. + +" + + doctitlefr = "Extensions de nuance postfix" + diff --git a/Documentation/fr/texidocs/engraving-ties-manually.texidoc b/Documentation/fr/texidocs/engraving-ties-manually.texidoc new file mode 100644 index 0000000000..952f1ec19a --- /dev/null +++ b/Documentation/fr/texidocs/engraving-ties-manually.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Il est possible de graver manuellement les liaisons de tenue, en +modifiant la propriété @code{tie-configuration}. Pour chaque paire, le +premier nombre indique la distance à la portée, en espaces de portée, et +le second la direction (1 pour haut, @minus{}1 pour bas). + +" + doctitlefr = "Dessin à main levée de liaisons de tenue" diff --git a/Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc new file mode 100644 index 0000000000..20e8a97f1e --- /dev/null +++ b/Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de +chaque crochet. Avec elle, vous pouvez faire plusieurs nolets en ne +tapant @code{\\times} qu'une fois, ce qui évite une longue saisie. + +Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction +@code{\\times}. + +Pour plus d'information sur @code{make-moment}, voir la section +appropriée du manuel de notation. + +" + doctitlefr = "Plusieurs triolets avec une seule commande \\times" diff --git a/Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc b/Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc new file mode 100644 index 0000000000..884e709ece --- /dev/null +++ b/Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Des sumboles spécifiques peuvent être obtenus en combinant les glyphes +disponibles, ce qui est tout à fait indiqué en matière d'instrument à vent. + +" + doctitlefr = "Symboles de doigtés pour instruments à vent" + diff --git a/Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc b/Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc new file mode 100644 index 0000000000..80b093819e --- /dev/null +++ b/Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +L'exemple suivant illustre comment combiner des doigtés pour la main +gauche, des indications de corrde et des doigtés pour la main droite. + +" + doctitlefr = "Doigtés, indications de cordeet doigtés main droite" + diff --git a/Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc b/Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc new file mode 100644 index 0000000000..3de1fcd754 --- /dev/null +++ b/Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc @@ -0,0 +1,30 @@ +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +En combinant @code{stemLeftBeamCount}, @code{stemRightBeamCount} et des +paires de @code{[]}, vous pourrez obtenir des crochets rectilignes et +des ligatures qui débordent à leurs extrémités. + +Pour des crochets rectilignes à droite sur des notes isolées, il suffit +d'ajouter une paire d'indicateurs de ligature @code{[]} et de déterminer +@code{stemLeftBeamCount} à zéro, comme dans l'exemple@tie{}1. + +Pour des crochets rectiligne à gauche, c'est @code{stemRightBeamCount} +qu'il faudra déterminer (exemple@tie{}2). + +Pour que les barres de ligature débordent sur la droite, +@code{stemRightBeamCount} doit avoir une valeur positive@tie{}; pour un +débrodement à gauche, c'est sur @code{stemLeftBeamCount} qu'il faut +jouer. Tout ceci est illustré par l'exemple@tie{}3. + +Il est parfois judicieux, lorsqu'une note est encadrée de silences, de +l'affubler de crochets rectilignes de part et d'autre. L'exemple@tie{}4 +montre qu'il suffit d'adjoindre à cette note un @code{[]}. + +(Notez bien que @code{\\set@tie{}stemLeftBeamCount} sera toujours +synonyme de @code{\\once@tie{}\\set}. Autrement dit, la détermination +des ligatures n'est pas @qq{permanente}@tie{}; c'est la raison pour +laquelle les crochets du @code{c'16[]} isolé du dernier exemple n'ont +rien à voir avec le @code{\\set} indiqué deux notes auparavant.) + +" + doctitlefr = "Crochet rectiligne et débordement de ligature" diff --git a/Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc b/Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc new file mode 100644 index 0000000000..ed352bc7d6 --- /dev/null +++ b/Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +Quand LilyPond est dépassé, la propriété @code{force-hshift} de l'objet +@code{NoteColumn}, et des silences à hauteur déterminée, peuvent +s'avérer utiles pour dicter au programme les choix de placement. On +travaille ici en espace de portée. + +" + doctitlefr = "Décalage horizontal forcé" + diff --git a/Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc b/Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc new file mode 100644 index 0000000000..f3ed70927f --- /dev/null +++ b/Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Dans certains cas, vous pouvez opter pour l'affichage textuel d'une clé +située à côté d'un trou plutôt que sa représentation graphique. +" + + doctitlefr = "Ajout de texte à un diagramme de doigté" + diff --git a/Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc b/Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc new file mode 100644 index 0000000000..15f95b62e3 --- /dev/null +++ b/Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 9ccf7f0f5e52e074f3b7852416ad5b78718395c8 + texidocfr = " +Modifier certaines des propriétés du quadrillage temporel aura pour effet +d'en changer l'apparence. + +" + doctitlefr = "Apparence du quadrillage temporel" + diff --git a/Documentation/fr/texidocs/grouping-beats.texidoc b/Documentation/fr/texidocs/grouping-beats.texidoc new file mode 100644 index 0000000000..545765ba0f --- /dev/null +++ b/Documentation/fr/texidocs/grouping-beats.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + texidocfr = " +La manière de gérer les ligatures est influencée par la propriété +@code{beatGrouping} : + +" + doctitlefr = "Regroupement selon la pulsation" diff --git a/Documentation/fr/texidocs/guitar-strum-rhythms.texidoc b/Documentation/fr/texidocs/guitar-strum-rhythms.texidoc new file mode 100644 index 0000000000..6db16d6515 --- /dev/null +++ b/Documentation/fr/texidocs/guitar-strum-rhythms.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 015b8e65e5e9a74cea1618b597402b5b74f89b89 + texidocfr = " +En matière de notation pour guitare, il arrive que soient indiqués les +@qq{coups de gratte} en plus de la mélodie, grilles d'accords et +diagrammes de tablature. + +" + doctitlefr = "Rythmique et guitare" diff --git a/Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc b/Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc new file mode 100644 index 0000000000..d94f3e04dc --- /dev/null +++ b/Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 31097723b2b816696ad61696630a80ff17a39557 + texidocfr = "Cet exemple illustre comment, lorsqu'une note affublée + d'une altération accidentelle est prolongée, ne pas répéter cette + altération après un saut de ligne. +" + doctitlefr = "Non répétition de l'altération après saut de ligne + sur liaison de prolongation" + diff --git a/Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc new file mode 100644 index 0000000000..0c492d0e12 --- /dev/null +++ b/Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Les crescendos et decrescendos indiqués textuellement -- tels que +@emph{cresc.} ou @emph{dim.} -- sont suivis de pointillés qui montrent +leur étendue. On peut empêcher l'impression de ces pointillés avec : + +" + doctitlefr = "Masquage de l'extension des nuances textuelles" + diff --git a/Documentation/fr/texidocs/hymn-template.texidoc b/Documentation/fr/texidocs/hymn-template.texidoc new file mode 100644 index 0000000000..602fa6ee03 --- /dev/null +++ b/Documentation/fr/texidocs/hymn-template.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37 + + texidocfr = " +Le code ci-dessous illustre la manière d'agencer un cantique liturgique +dans lequel chaque ligne débute et se termine par une mesure incomplète. +Vous noterez par ailleurs l'affichage des paroles indépendamment de la +musique. + +" + doctitlefr = "Modèle pour cantique" diff --git a/Documentation/fr/texidocs/inserting-a-caesura.texidoc b/Documentation/fr/texidocs/inserting-a-caesura.texidoc new file mode 100644 index 0000000000..72dd74ef0c --- /dev/null +++ b/Documentation/fr/texidocs/inserting-a-caesura.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Une surcharge de la propriété @code{'text} de l'objet +@code{BreathingSign} permet de créer une marque de césure. LilyPond +dispose également d'une variante courbée. + +" + doctitlefr = "Insertion d'une césure" + diff --git a/Documentation/fr/texidocs/isolated-percent-repeats.texidoc b/Documentation/fr/texidocs/isolated-percent-repeats.texidoc new file mode 100644 index 0000000000..9aeed610d1 --- /dev/null +++ b/Documentation/fr/texidocs/isolated-percent-repeats.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Des symboles de pourcentage isolés peuvent aussi être obtenus, au +moyen d'un silence multi-mesures dont on modifie l'aspect : + +" + doctitlefr = "Répétition en pourcent isolée" + diff --git a/Documentation/fr/texidocs/jazz-combo-template.texidoc b/Documentation/fr/texidocs/jazz-combo-template.texidoc new file mode 100644 index 0000000000..c9c2c698fe --- /dev/null +++ b/Documentation/fr/texidocs/jazz-combo-template.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Bien que compliqué de prime abord, voici un canevas tout à fait indiqué +pour les ensembles de jazz. Vous noterez que tous les instruments sont +notés en ut (@code{\key c \major}), la tonalité de concert. Les notes +seront automatiquement transposée dès lors qu'elles seront inscrites +dans une section @code{\\transpose}. + +" + doctitlefr = "Symboles de jazz" diff --git a/Documentation/fr/texidocs/lyrics-alignment.texidoc b/Documentation/fr/texidocs/lyrics-alignment.texidoc new file mode 100644 index 0000000000..29b104fe1d --- /dev/null +++ b/Documentation/fr/texidocs/lyrics-alignment.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +L'alignement horizontal des paroles peut se gérer à l'aide de la +propriété @code{self-alignment-X} de l'objet @code{LyricText}. +Les valeurs @code{#-1} ou @code{#LEFT} produiront un alignement par la +gauche, les valeurs @code{#0} ou @code{#CENTER} un alignement centré, et +les valeurs @code{#1} ou @code{#RIGHT} un alignement par la droite. + +" + doctitlefr = "Alignement des syllabes" + diff --git a/Documentation/fr/texidocs/lyrics-old-spacing-settings.texidoc b/Documentation/fr/texidocs/lyrics-old-spacing-settings.texidoc new file mode 100644 index 0000000000..9f70acf566 --- /dev/null +++ b/Documentation/fr/texidocs/lyrics-old-spacing-settings.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +La version 2.14 a donné naissance à un nouveau moteur pour l'espacement +vertical des paroles. Celles-ci peuvent donc se retrouver positionnées +différemment. Le moteur adoptera les usages de la version 2.12 une fois +que vous aurez réglé certaines propriétés des contextes @code{Lyric} et +@code{Staff}. + +" + + doctitlefr = "Espacement des paroles selon les pratiques de la version 2.12" + diff --git a/Documentation/fr/texidocs/makam-example.texidoc b/Documentation/fr/texidocs/makam-example.texidoc new file mode 100644 index 0000000000..b732d97259 --- /dev/null +++ b/Documentation/fr/texidocs/makam-example.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Le « makam » est une forme de mélodie turque qui utilise des altérations +d'un neuvième de ton. Consultez le fichier d'initialisation +@file{makam.ly} pour plus de détails sur les hauteurs et altérations +utilisées (voir le chapitre 4.6.3 - Autres sources d'information du +manuel d'initiation pour le localiser). + +" + doctitlefr = "Exemple de musique « Makam »" diff --git a/Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc b/Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc new file mode 100644 index 0000000000..ae252b1980 --- /dev/null +++ b/Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc @@ -0,0 +1,21 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Grâce à la propriété @code{dash-definition}, une liaison d'articulation +peut être formée de traits discontinus variables. +@code{dash-definition} se compose d'une liste de +@code{segments-discontinus} (@emph{dash-elements}). Chaque +@code{segment-discontinu} contient une liste de paramètres qui +déterminent le comportement du trait pour une section de la liaison. + +Cette liaison se définit selon le paramètre de Bézier @code{t} qui est +compris entre 0 (l'extrémité gauche de la liaison) et 1 (l'extrémité +droite de la liaison). Chaque @code{segment-discontinu} se composera +selon la liste @code{(t-début t-fin segment-style segment-taille)}. +La portion de liaison allant de @code{t-début} à @code{t-fin} aura un +trait @code{segment-style} de longueur @code{segment-taille}. +@code{segment-taille} est exprimé en espace de portée ; un +@code{segment-style} à 1 donnera un trait plein. + +" + doctitlefr = "Dessin d'une liaison d'articulation au trait discontinu" + diff --git a/Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc new file mode 100644 index 0000000000..73e157225e --- /dev/null +++ b/Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Vous pourriez avoir envie, dans un but pédagogique, de rendre certaines +lignes d'une portée plus épaisses que les autres, comme la ligne médiane +ou bien pour mettre en exergue la ligne portant la clé de sol. Il +suffit pour cela d'ajouter une ligne qui sera accolée à celle qui doît +être mise en évidence, grâce à la propriété @code{line-positions} de +l'objet @code{StaffSymbol}. + +" + doctitlefr = "Empâtement de certaines lignes d'une portée" + diff --git a/Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc new file mode 100644 index 0000000000..32efd6fcac --- /dev/null +++ b/Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +En musique mensurale, les barres de mesure ne traversent pas les +portées. Pour obtenir ce résultat avec un @code{StaffGroup} plutôt +qu'en utilisant un @code{ChoirStaff}, il faudra rendre « transparentes » +les portions de barre qui recouvrent les portées. + +" + doctitlefr = "Présentation à l'ancienne (barres de mesure entre les portées)" + diff --git a/Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc new file mode 100644 index 0000000000..ef5a60788f --- /dev/null +++ b/Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Les raccourcis sont répertoriés dans le fichier +@file{ly/script-init.ly}, dans lequel on retrouve les variables +@code{dashHat}, @code{dashPlus}, @code{dashDash}, @code{dashBar}, +@code{dashLarger}, @code{dashDot}, et @code{dashUnderscore} ainsi que +leur valeur par défaut. Ces valeurs peuvent être modifiées selon vos +besoins. Il suffit par exemple, pour affecter au raccourci @code{-+} +(@code{dashPlus}) le symbole du trille en lieu et place du @code{+} +(caractère plus), d'assigner la valeur @code{trill} à la variable +@code{dashPlus} : + +" + doctitlefr = "Modification de la signification des raccourcis pour les signes d'articulation" + diff --git a/Documentation/fr/texidocs/multi-measure-rest-markup.texidoc b/Documentation/fr/texidocs/multi-measure-rest-markup.texidoc new file mode 100644 index 0000000000..8ebda5a3d3 --- /dev/null +++ b/Documentation/fr/texidocs/multi-measure-rest-markup.texidoc @@ -0,0 +1,15 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Lorsque du texte est attaché à un silence multi-mesures, il sera centré +dans la mesure, au-dessus ou en dessous de la portée. Afin d'étirer la +mesure dans le cas ou ce texte est relativement long, il suffit +d'insérer un silence invisible auquel on attache le texte en question, +avant le silence multi-mesures. + +Rappelez-vous qu'un silence invisible génère une barre de mesure. Le +texte attaché à ce silence invisible sera alors aligné sur la gauche de +là où serait positionnée la note. Cependant, si la taille de la mesure +est déterminée par la longueur du texte, il apparaîtra comme centré. + +" + doctitlefr = "Ajout de texte à un silence multi-mesures" diff --git a/Documentation/fr/texidocs/nesting-staves.texidoc b/Documentation/fr/texidocs/nesting-staves.texidoc new file mode 100644 index 0000000000..b1cf8a868b --- /dev/null +++ b/Documentation/fr/texidocs/nesting-staves.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +La propriété @code{systemStartDelimiterHierarchy} permet de créer des +regroupements imbriqués complexes. La commande +@code{\\set@tie{}StaffGroup.systemStartDelimiterHierarchy} prend en +argument la liste alphabétique des sous-groupes à hiérarchiser. Chaque +sous-groupe peut être affublé d'un délimiteur particulier. Chacun des +regroupements intermédiaires doit être borné par des parenthèses. Bien +que des éléments de la liste puissent être omis, le premier délimiteur +embrassera toujours l'intégralité des portées. Vous disposez des quatre +délimiteurs @code{SystemStartBar}, @code{SystemStartBracket}, +@code{SystemStartBrace} et @code{SystemStartSquare}. + +" + doctitlefr = "Imbrications de regroupements de portées" + diff --git a/Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc b/Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc new file mode 100644 index 0000000000..213ee7f55e --- /dev/null +++ b/Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 015b8e65e5e9a74cea1618b597402b5b74f89b89 + texidocfr = " +LilyPond sait aussi gérer des nolets dont le chiffrage imprimé ne +correspond pas exactement à la fraction de mesure à laquelle ils se +réfèrent, tout comme ceux auxquels une valeur de note vient en complément +au chiffre. +" + doctitlefr = "Nolets au chiffrage inhabituel" diff --git a/Documentation/fr/texidocs/non-traditional-key-signatures.texidoc b/Documentation/fr/texidocs/non-traditional-key-signatures.texidoc new file mode 100644 index 0000000000..c762d0cc25 --- /dev/null +++ b/Documentation/fr/texidocs/non-traditional-key-signatures.texidoc @@ -0,0 +1,28 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La commande @code{\\key} détermine la propriété @code{keySignature} d'un +contexte @code{Staff}. + +Des armures inhabituelles peuvent être spécifiées en modifiant +directement cette propriété. Il s'agit en l'occurence de définir une +liste : + +@code{\\set Staff.keySignature = #`(((octave . pas) . altération) ((octave +. pas) . altération) @dots{})} + +dans laquelle, et pour chaque élément, +@code{octave} spécifie l'octave (0@tie{}pour celle allant du +do@tie{}médium au si supérieur), @code{pas} la note dans cette octave +(0@tie{}pour@tie{}do et 6@tie{}pour@tie{}si), et @code{altération} sera +@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (attention à la virgule en +préfixe). + +Une formulation abrégée -- @code{(pas . altération)} -- signifie que +l'altération de l'élément en question sera valide quel que soit l'octave. + + +Voici, par exemple, comment générer une gamme par ton : + +" + doctitlefr = "Armures inhabituelles" + diff --git a/Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc b/Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc new file mode 100644 index 0000000000..01069c24f0 --- /dev/null +++ b/Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Ce canevas illustre l'utilisation de contextes @code{StaffGroup} pour +regrouper les instruments selon leur famille, imbriqués dans un +@code{GrandStaff}, ainsi que le recours à la fonction @code{\\transpose} +pour les instruments transpositeurs. Dans tous les identificateurs, la +musique est stockée en ut. Les notes peuvent tout aussi bien être +saisies en ut ou dans la tonalité particulière de l'instrument avant +d'être transposées puis affectées à une variable. + +" + doctitlefr = "Orchestre, chœur et piano" diff --git a/Documentation/fr/texidocs/ottava-text.texidoc b/Documentation/fr/texidocs/ottava-text.texidoc new file mode 100644 index 0000000000..5e9eae8372 --- /dev/null +++ b/Documentation/fr/texidocs/ottava-text.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +En interne, la fonction @code{\\ottava} détermine les +propriétés @code{ottavation} (p.ex. en @code{\"8va\"} ou @code{\"8vb\"}) +et @code{centralCPosition}. Vous pouvez modifier le texte d'une marque +d'octaviation en définissant @code{ottavation} après avoir fait appel +à @code{ottava} : + +" + + doctitlefr = "Texte des marques d'octaviation" + diff --git a/Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc b/Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc new file mode 100644 index 0000000000..7b5399c1f8 --- /dev/null +++ b/Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc @@ -0,0 +1,31 @@ +%% Translation of GIT committish: e1a149d0cc60b02e86209387958f4028567dd366 + texidocfr = " +Le fonction @code{@bs{}autoBeamOff} dans le cadre d'un +@code{@bs{}partcombine} agit de façon bien particulière@tie{}; c'est +pourquoi il vaut mieux tout d'abord recourir à + +@example +\set Staff.autobeaming = ##f +@end example + +@noindent +pour désactiver les ligatures automatiques pour l'ensemble de la portée +concernée. + +L'instruction @code{\partcombine} fonctionne apparament sur la base de +trois voix@tie{}: solo hampes montantes, solo hampes descendantes et +ensemble hampes montantes. + +Lorsque @code{\autoBeamOff} apparaît dans le premier argument de la +combinaison, il s'applique à la voix active à ce moment précis, qu'il +s'agisse du solo hampes montantes ou du combiné hampes montantes. +Lorsqu'elle est introduite dans le second argument, la commande +@code{\autoBeamOff} s'appliquera au solo hampes descendantes. + +Vous devrez donc, afin que @code{\autoBeamOff} soit pleinement +opérationnel dans le cadre d'un @code{\partcombine}, l'introduire aux +@strong{trois} niveaux. + +" +doctitlefr = "Partcombine et autoBeamOff" + diff --git a/Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc b/Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc new file mode 100644 index 0000000000..cad0716894 --- /dev/null +++ b/Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Le numéro de mesure répétée sera imprimé à intervalle régulier si vous +déterminez la propriété de contexte @code{repeatCountVisibility}. + +" + doctitlefr = "Affichage du numéro de répétition en pourcent" + diff --git a/Documentation/fr/texidocs/percent-repeat-counter.texidoc b/Documentation/fr/texidocs/percent-repeat-counter.texidoc new file mode 100644 index 0000000000..4f2bf4ab9c --- /dev/null +++ b/Documentation/fr/texidocs/percent-repeat-counter.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Les répétitions de plus de 2 mesures sont surmontées d'un compteur, +si l'on active la propriété @code{countPercentRepeats} comme le montre +l'exemple suivant : + +" + doctitlefr = "Compteur de répétition en pourcent" + diff --git a/Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc new file mode 100644 index 0000000000..d8d306a39f --- /dev/null +++ b/Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Cet exemple peu académique démontre comment il est possible d'insérer un saut +de ligne dans un nolet portant une ligature. Ces ligatures doivent toutefois +être explicites. + +" + doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature" diff --git a/Documentation/fr/texidocs/piano-template-simple.texidoc b/Documentation/fr/texidocs/piano-template-simple.texidoc new file mode 100644 index 0000000000..66dea7a7c7 --- /dev/null +++ b/Documentation/fr/texidocs/piano-template-simple.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Voici une simple partition pour piano avec quelques notes. + +" + doctitlefr = "Piano -- cannevas simple" diff --git a/Documentation/fr/texidocs/piano-template-with-centered-dynamics.texidoc b/Documentation/fr/texidocs/piano-template-with-centered-dynamics.texidoc new file mode 100644 index 0000000000..ff82f1815e --- /dev/null +++ b/Documentation/fr/texidocs/piano-template-with-centered-dynamics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Nombre d'ouvrages pour piano font apparaître les nuances entre les deux +portées. Bien que cela nécessite quelques subtilités, voici de quoi +obtenir un tel résultat. + +" + doctitlefr = "Piano et nuances entre les portées" diff --git a/Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc new file mode 100644 index 0000000000..a0d2db1ba1 --- /dev/null +++ b/Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Lorsque la mélodie est doublée au piano, cela ne nécessite pas forcément +une portée spécifique. Les paroles peuvent s'insérer entre les deux +portées de la partition pour piano. + +" + doctitlefr = "Piano et paroles entre les portées" diff --git a/Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc new file mode 100644 index 0000000000..8094e95490 --- /dev/null +++ b/Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Il s'agit du format classique pour le chant : une portée pour la mélodie +et les paroles au-dessus de l'accompagnement au piano. + +" + doctitlefr = "Piano, mélodie et paroles" diff --git a/Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc b/Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc new file mode 100644 index 0000000000..08c0423f2c --- /dev/null +++ b/Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +Vous disposez d'une propriété spécifique qui permet de contrôler plus +finement le positionnement des doigtés main droite, comme l'indique +l'exemple suivant. + +" + doctitlefr = "Positionnement des doigtés main droite" + diff --git a/Documentation/fr/texidocs/polyphony-in-tablature.texidoc b/Documentation/fr/texidocs/polyphony-in-tablature.texidoc new file mode 100644 index 0000000000..dd11816a00 --- /dev/null +++ b/Documentation/fr/texidocs/polyphony-in-tablature.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +Une section polyphonique s'obtient dans un @code{TabStaff} de la +même manière que dans une portée normale. + +" + doctitlefr = "Polyphonie en mode tablature" + diff --git a/Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc b/Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc new file mode 100644 index 0000000000..c42fc97d1a --- /dev/null +++ b/Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Lorsque vous activez la propriété @code{'strict-grace-spacing}, +l'espacement des notes d'ornement se fera de manière @qq{élastique}. +Autrement dit, elles seront décollées de leur note de rattachement : +LilyPond commence par espacer les notes normales, puis les ornements +sont placés à la gauche de leur note de rattachement. + +" + doctitlefr = "Positionnement des notes d'ornement avec espace flottant" diff --git a/Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc b/Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc new file mode 100644 index 0000000000..33ad7d8048 --- /dev/null +++ b/Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Si l'on peut positionner verticalement un silence simple en le +rattachant à une note, il n'en va pas de même pour un silence +multi-mesures. Néanmoins, et uniquement dans le cadre de musique +polyphonique, les silences multi-mesures sont positionnés différemment +selon qu'ils appartiennent à une voix au numéro pair ou impair. Le +positionnement des silences multi-mesures peut se contrôler ainsi : +" + doctitlefr = "Positionnement des silences multi-mesures" diff --git a/Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc b/Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc new file mode 100644 index 0000000000..7478c4cf0d --- /dev/null +++ b/Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Lorsqu'il vous faut inscrire une annotation à l'intérieur d'une liaison, +la propriété @code{outside-staff-priority} doît être désactivée. + +" + doctitlefr = "Positionnement d'une annotation à l'intérieur d'une liaison" + diff --git a/Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc new file mode 100644 index 0000000000..d1d8595812 --- /dev/null +++ b/Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +En accord avec les règles standards de l'écriture musicale, on grave +un bécarre avant un dièse ou un bémol si on a besoin d'annuler une +altération précédente. Pour modifier ce comportement, assignez la propriété +@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux). +" + + doctitlefr = "Suppression des bécarres superflus" diff --git a/Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc new file mode 100644 index 0000000000..79f99c6ff9 --- /dev/null +++ b/Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Après un changement de tonalité, un bécarre est imprimé pour annuler +toute altération précédente. Ceci peut être supprimé en réglant à +@code{\"false\"} la propriété @code{printKeyCancellation} du contexte +@code{Staff}. + +" + + doctitlefr = "Suppression des bécarres superflus après un changement de +tonalité" diff --git a/Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc new file mode 100644 index 0000000000..2a033af22b --- /dev/null +++ b/Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Bien qu'allant à l'encontre des usages en matière de gravure, vous +imprimerez une barre de reprise (@code{|:}) en début de partition si +vous surchargez la propriété adéquate : + +" + doctitlefr = "Impression d'une barre de reprise en début de morceau" + diff --git a/Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc b/Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc new file mode 100644 index 0000000000..bdefed2e36 --- /dev/null +++ b/Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt +qu'en tête de chaque ligne seulement, en recourrant à la propriété +@code{barNumberVisibility}. Voici comment afficher le numéro toutes les +deux mesures sauf en fin de ligne. + +" + doctitlefr = "Imprimer les numéros de mesure à intervalle régulier" diff --git a/Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc b/Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc new file mode 100644 index 0000000000..772faee95c --- /dev/null +++ b/Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Les numéros de mesures peuvent être encadrés ou entourés d'un cercle. + +" + doctitlefr = "Inscrire le numéro de mesure dans un cadre ou un cercle" diff --git a/Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc new file mode 100644 index 0000000000..1316661186 --- /dev/null +++ b/Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Des crescendos ou decrescendos @emph{al niente} peuvent être indiqués de +manière graphique, en assignant @emph{vrai} (@code{#t}) à la +propriété @code{circled-tip}, ce qui affiche un cercle à leur extrémité. + +" + doctitlefr = "Impression de soufflets « al niente »" + diff --git a/Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc b/Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc new file mode 100644 index 0000000000..090acadced --- /dev/null +++ b/Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Les indications textuelles peuvent être imprimées à la fin d'une ligne +plutôt qu'en tête de la suivante. Pensez alors à aligner l'extrémité +droite de l'indication sur la barre de mesure. + +" + doctitlefr = "Indication texuelle en fin de ligne" + diff --git a/Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc b/Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc new file mode 100644 index 0000000000..7604cb2cb5 --- /dev/null +++ b/Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334 + texidocfr = " +Bien que ces indications textuelles ne soient habituellement imprimées +qu'au niveau de la portée supérieure, vous pouvez forcer leur +affectation à chacune des portées. + +" + doctitlefr = "Impression des indications sur toutes les portées d'un système" + diff --git a/Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc new file mode 100644 index 0000000000..1a236235f7 --- /dev/null +++ b/Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Les indications de tempo et les marques de repère s'impriment par défaut +au-dessus de la portée. Le fait de régler en conséquence la propriété +@code{direction} des objets @code{MetronomeMark} ou @code{RehearsalMark} +les placera au-dessous de la portée. + +" + doctitlefr = "Impression du métronome et des repères sous la portée" + diff --git a/Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc b/Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc new file mode 100644 index 0000000000..89ebb663ba --- /dev/null +++ b/Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Par défaut, LilyPond n'affiche pas le premier numéro de mesure s'il est +inférieur à 2. Le fait de définir @code{barNumberVisibility} à +@code{all-bar-numbers-visible} vous permettra d'imprimer n'importe quel +numéro pour la première mesure. À noter que l'impression d'un numéro +de mesure ne peut intervenir que s'il y a une barre. Aussi, pour +pouvoir le faire au début d'un morceau, devrez-vous ajouter une barre +vide avant la première note. + +" + doctitlefr = "Afficher le numéro de la première mesure" diff --git a/Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc b/Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc new file mode 100644 index 0000000000..1c4a1cc74d --- /dev/null +++ b/Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc @@ -0,0 +1,13 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Les citations tiennent compte de la transposition, aussi bien celle de +l'instrument d'origine que celle de la partie où elle intervient. Dans +l'exemple suivant, tous les instruments sont en tonalité de concert et +seront repris par un instrument en fa. Le destinataire de la citation +peut à son tour transposer à l'aide de la commande @code{\\transpose}. +En pareil cas, toutes les hauteurs, y compris celle de la citation, +seront transposées. + +" + doctitlefr = "Citation d'une autre voix et transposition" + diff --git a/Documentation/fr/texidocs/quoting-another-voice.texidoc b/Documentation/fr/texidocs/quoting-another-voice.texidoc new file mode 100644 index 0000000000..90be0e5394 --- /dev/null +++ b/Documentation/fr/texidocs/quoting-another-voice.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Les types d'événement pris en charge pour la citation peuvent se régler +avec la propriété @code{quotedEventTypes}. Par défaut, sa valeur est +fixée à @code{(note-event rest-event tie-event beam-event +tuplet-span-event)}, ce qui signifie que seuls les notes, silences, +liaisons, ligatures et nolets seront mentionnés par @code{\quoteDuring}. +Dans l'exemple suivant, le quart de soupir n'est pas reproduit puisqu'il +n'est pas mentionné parmi les @code{quotedEventTypes}. + +Pour connaître la liste des types d'événements, reportez-vous au +chapitre @emph{Music classes} de la référence des propriétés internes. + +" + doctitlefr = "Citation d'une autre voix" + diff --git a/Documentation/fr/texidocs/recorder-fingering-chart.texidoc b/Documentation/fr/texidocs/recorder-fingering-chart.texidoc new file mode 100644 index 0000000000..60e1f31375 --- /dev/null +++ b/Documentation/fr/texidocs/recorder-fingering-chart.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Cet exemple illustre la manière de créer et afficher des indications de +doigté pour instrument à vent. + +" + doctitlefr = "Doigtés pour flûte à bec" + diff --git a/Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc b/Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc new file mode 100644 index 0000000000..085d202687 --- /dev/null +++ b/Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Vous pouvez modifier les valeurs des variables @code{startGraceMusic}, +@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, +@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic}, et +@code{stopAppoggiaturaMusic} afin d'en personnaliser les effets. Pour +plus de détails, voir le fichier @file{ly/grace-init.ly}. + +" + doctitlefr = "Redéfinition des réglages de mise en forme par défaut des notes d'ornement" diff --git a/Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc b/Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc new file mode 100644 index 0000000000..932317c182 --- /dev/null +++ b/Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Désactiver le graveur concerné --- @code{Bar_number_engraver} --- +donnera une partition --- contexte @code{Score} --- sans numéros de +mesure. + +" + doctitlefr = "Supprimer les numéros de mesure d'une partition" + diff --git a/Documentation/fr/texidocs/removing-the-first-empty-line.texidoc b/Documentation/fr/texidocs/removing-the-first-empty-line.texidoc new file mode 100644 index 0000000000..3b66dbee55 --- /dev/null +++ b/Documentation/fr/texidocs/removing-the-first-empty-line.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Par défaut, le premier système comportera absolument toutes les portées. +Si vous voulez masquer les portées vides y compris pour le premier +système, vous devrez activer la propriété @code{remove-first} du +@code{VerticalAxisGroup}. Mentionnée dans un bloc @code{\\layout}, +cette commande agira de manière globale. Pour qu'elle ne soit effective +que pour une portée individuelle, vous devrez également spécifier le +contexte (@code{Staff} pour qu'il ne concerne que la portée en cours) en +préfixe de la propriété. + +La première ligne inférieure du deuxième @code{StaffGroup} est bien +présente, pour la simple raison que le réglage en question ne s'applique +qu'à la portée dans laquelle il a été inscrit. + +" + doctitlefr = "Masquage de la première ligne si elle est vide" + diff --git a/Documentation/fr/texidocs/rest-styles.texidoc b/Documentation/fr/texidocs/rest-styles.texidoc new file mode 100644 index 0000000000..d9dd6fcf4a --- /dev/null +++ b/Documentation/fr/texidocs/rest-styles.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Les silences peuvent être gravés selon différents styles. + +" + doctitlefr = "Styles de silences" diff --git a/Documentation/fr/texidocs/reverting-default-beam-endings.texidoc b/Documentation/fr/texidocs/reverting-default-beam-endings.texidoc new file mode 100644 index 0000000000..c8932945da --- /dev/null +++ b/Documentation/fr/texidocs/reverting-default-beam-endings.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 548076f550a2b7fb09f1260f0e5e2bb028ad396c + texidocfr = " +Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans +une mesure à 12/8, il faudra préalablement annuler les réglages par +défaut relatifs à 12/8, puis ajouter nos propres règles : + +" + doctitlefr = "Annulation des règles de ligature par défaut" diff --git a/Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc b/Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc new file mode 100644 index 0000000000..6bc7eeec2e --- /dev/null +++ b/Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 092f85605dcea69efff5ef31de4ff100346d6ef8 + + texidocfr = " +Modèle pour chœur à quatre voix mixtes, chaque pupitre ayant sa propre +portée. + +" + doctitlefr = "Modèle pour chœur SATB, sur quatre portées" + diff --git a/Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc new file mode 100644 index 0000000000..d7b515890e --- /dev/null +++ b/Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +En principe, un soufflet -- (de)crescendo imprimé sous forme graphique -- +commence au bord gauche de la note de départ, et se termine au +bord droit de la note d'arrivée. Cependant, si la note d'arrivée +est sur un premier temps, le soufflet s'arrêtera au niveau de la +barre de mesure qui la précède. Ce comportement peut être annulé +en assignant @emph{faux} (@code{#f}) à la propriété @code{'to-barline} : + +" + doctitlefr = "Soufflets et barres de mesure" + diff --git a/Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc b/Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc new file mode 100644 index 0000000000..fbed734891 --- /dev/null +++ b/Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 158658dc75b6f6553e77ff53119ac802eb91f50c + texidocfr = "LilyPond dispose de trois styles de barre différents +pour indiquer une succession de reprises. Vous devez opter pour un + style par défaut, à l'aide de la propriété @code{doubleRepeatType}. + +" + + doctitlefr = "Succession de reprise et style de barre par défaut" + diff --git a/Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc new file mode 100644 index 0000000000..69a0483226 --- /dev/null +++ b/Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Si un soufflet est trop court, il suffit d'ajuster la propriété +@code{minimum-length} de l'objet @code{Hairpin} pour l'allonger. + +" + doctitlefr = "Ajustement de la longueur d'un soufflet" + diff --git a/Documentation/fr/texidocs/shortening-volta-brackets.texidoc b/Documentation/fr/texidocs/shortening-volta-brackets.texidoc new file mode 100644 index 0000000000..491459670f --- /dev/null +++ b/Documentation/fr/texidocs/shortening-volta-brackets.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Les crochets indiquant les fins alternatives s'étalent tout au long ce +celle-ci. On peut les raccourcir en définissant la propriété +@code{voltaSpannerDuration}. Dans l'exemple suivant, le crochet ne se +prolonge que sur une mesure à 3/4. + +" + doctitlefr = "Diminution de la taille du crochet d'alternative" + diff --git a/Documentation/fr/texidocs/simple-lead-sheet.texidoc b/Documentation/fr/texidocs/simple-lead-sheet.texidoc new file mode 100644 index 0000000000..5cfa9e1a8d --- /dev/null +++ b/Documentation/fr/texidocs/simple-lead-sheet.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 9594a4569164407a146bbc4aad8be3a60a4725cf + texidocfr = " +Assembler des noms d'accords, une mélodie et des paroles permet +d'obtenir la partition d'un chanson : + +" + doctitlefr = "Chanson simple" diff --git a/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc new file mode 100644 index 0000000000..a87d3b4862 --- /dev/null +++ b/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Ce cannevas comporte tous les éléments d'une chanson : la mélodie, +les paroles, les accords. + +" + doctitlefr = "Paroles, musique et accords" diff --git a/Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc new file mode 100644 index 0000000000..185505ffa8 --- /dev/null +++ b/Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Vous avez besoin de la partition d'une mélodie avec les accords ? +N'allez pas plus loin ! + +" + +doctitlefr = "Mélodie simple et accords" diff --git a/Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc new file mode 100644 index 0000000000..a81c6866b7 --- /dev/null +++ b/Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + + texidocfr = " +Ce canevas comporte une simple ligne mélodique agrémentée de paroles. +Recopiez-le, ajoutez-y d'autres notes et paroles. Les ligatures +automatiques sont ici désactivées, comme il est d'usage en matière de +musique vocale. Pour activer la fonction de ligature automatique, +modifiez ou commentez la ligne en question. + +" + doctitlefr = "Portée unique et paroles" diff --git a/Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc new file mode 100644 index 0000000000..3a1d14a0da --- /dev/null +++ b/Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Cet exemple simpliste se compose d'une portée agrémentée de quelques +notes. Il convient tout à fait pour un instrument seul ou un +fragment mélodique. Recopiez-le dans un nouveau fichier, ajoutez-y +d'autres notes et c'est pret ! + +" + doctitlefr = "Portée unique avec quelques notes" diff --git a/Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc b/Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc new file mode 100644 index 0000000000..eab901a541 --- /dev/null +++ b/Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + texidocfr = " +Le fait de spécifier un contexte à @code{beatGrouping} permet d'en +limiter les effets. Par voie de conséquence, il sera possible +d'outrepasser les règles définies à un niveau supérieur. La commande +@code{\\set} destinée à en modifier les valeurs doit se placer après la +commande @code{\\time} : + +" + doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping" diff --git a/Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc b/Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc new file mode 100644 index 0000000000..952d8a32be --- /dev/null +++ b/Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334 + texidocfr = " +L'utilisation de la commande @code{\\markup} permet de distribuer un bloc +de texte indépendant sur plusieurs colonnes. + +" + doctitlefr = "Bloc de texte indépendant sur deux colonnes" + diff --git a/Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc b/Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc new file mode 100644 index 0000000000..a97a5cc9ec --- /dev/null +++ b/Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 718fa63a806b2ae307f320e250bc83236e9cd136 + + texidocfr = " +La direction des hampes se gère dans les tablatures tout comme en +notation traditionnelle. Les ligatures peuvent être mises à l'horizontale +comme le montre cet exemple. + +" + doctitlefr = "Hampes et ligatures en mode tablature" + diff --git a/Documentation/fr/texidocs/string-quartet-template-simple.texidoc b/Documentation/fr/texidocs/string-quartet-template-simple.texidoc new file mode 100644 index 0000000000..fd383e22d7 --- /dev/null +++ b/Documentation/fr/texidocs/string-quartet-template-simple.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Voici un canevas pour quatuor à cordes. Notez l'utilisation de la +variable @code{\\global} pour traiter la métrique et la tonalité. + +" + doctitlefr = "Quatuor à cordes (conducteur)" diff --git a/Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc new file mode 100644 index 0000000000..854f30f4e2 --- /dev/null +++ b/Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -0,0 +1,20 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Grâce à ce canevas, vous pouvez obtenir une partition d'excellente +facture pour quatuor à cordes mais aussi, si le besoin s'en faisait +sentir, une partie séparée par instrument. Par ailleurs, cet exemple +illustre l'utilisation de la fonction @code{\\tag} dans le but +d'extraire des parties séparées. + +Il vous faudra découper ce canevas en plusieurs fichiers séparés ; leur +nom respectif est indiqué en commentaire : @file{piece.ly} comporte tout +ce qui a trait à la musique, les autres fichiers -- @file{score.ly}, +@file{vn1.ly}, @file{vn2.ly}, @file{vla.ly}, et @file{vlc.ly} -- vous +permettront d'obtenir les parties selon le pupitre. + + +N'oubliez pas de supprimer les commentaires superflus des fichiers +individualisés ! + +" + doctitlefr = "Quatuor à cordes, avec parties séparées" diff --git a/Documentation/fr/texidocs/subdividing-beams.texidoc b/Documentation/fr/texidocs/subdividing-beams.texidoc new file mode 100644 index 0000000000..70426d22d4 --- /dev/null +++ b/Documentation/fr/texidocs/subdividing-beams.texidoc @@ -0,0 +1,19 @@ +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +Les ligatures d'une succession de notes de durée inférieure à la croche +ne sont pas subdivisées par défaut. Autrement dit, tous les traits de +ligature ( deux ou plus) seront continus. Ce comportement peut être +modifié afin de diviser la ligature en sous-groupes grâce à la propriété +@code{subdivideBeams}. Lorsqu'elle est activée, les ligatures seront +subdivisées selon un intervalle défini par @code{baseMoment}@tie{}; il n'y +aura alors plus qu'un seul trait de ligature entre chaque sous-groupe. +Par défaut, @code{baseMoment} fixe la valeur de référence par rapport à +la métrique en vigueur. Il faudra donc lui fournir, à l'aide de la +fonction @code{ly:make-moment}, une fraction correspondant à la durée du +sous-groupe désiré comme dans l'exemple ci-dessous. Gardez à l'esprit +que, si vous venez à modifier @code{baseMoment}, vous devrez +probablement adapter @code{beatStrusture} afin qu'il reste en adéquation +avec les nouvelles valeurs de @code{baseMoment}. + +" + doctitlefr = "Subdivision des ligatures" diff --git a/Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc b/Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc new file mode 100644 index 0000000000..2d18aff1dc --- /dev/null +++ b/Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc @@ -0,0 +1,16 @@ +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + + texidocfr = " +La métrique est parfois indiquée non pas par une fraction (p.ex. 7/4) +mais simplement par son numérateur (7 dans ce cas). L'instruction +@code{\\override Staff.TimeSignature #'style = #'single-digit} permet de +déroger au style par défaut de manière permanente -- un @code{\\revert +Staff.TimeSignature #'style} d'annuler ces modifications. Lorsque cette +métrique sous le forme d'une seul chiffre ne se présente qu'une seule +fois, il suffit de faire précéder l'instruction @code{\\override} d'un +simple @code{\\once}. + +" + doctitlefr = "Affichage seulement du numérateur d'une métrique (au +lieu d'une fraction)" + diff --git a/Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc new file mode 100644 index 0000000000..4a998d1ad3 --- /dev/null +++ b/Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc @@ -0,0 +1,29 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Cet exemple, grâce à un peu de code Scheme, donne la priorité aux +enharmoniques afin de limiter le nombre d'altérations supplémentaires. +La règle appliquable est : + +@itemize +@item +Les altérations doubles sont supprimées + +@item +Si dièse -> Do + +@item +Mi dièse -> Fa + +@item +Do bémol -> Si + +@item +Fa bémol -> Mi + +@end itemize + +Cette façon de procéder aboutit à plus d'enharmoniques naturelles. + +" + + doctitlefr = "Transposition et réduction du nombrer d'altérations accidentelles" diff --git a/Documentation/fr/texidocs/tweaking-clef-properties.texidoc b/Documentation/fr/texidocs/tweaking-clef-properties.texidoc new file mode 100644 index 0000000000..8dd27f105c --- /dev/null +++ b/Documentation/fr/texidocs/tweaking-clef-properties.texidoc @@ -0,0 +1,35 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La commande @code{\\clef \"treble_8\"} équivaut à définir @code{clefGlyph}, +@code{clefPosition} -- qui contrôle la position verticale de la clé -- +@code{middleCPosition} et @code{clefOctavation}. Une clé est imprimée +lorsque l'une de ces propriétés, hormis @code{middleCPosition}, est +modifiée. Les exemples suivant font apparaître des possibilités de +réglage manuel de ces propriétés. + + +Modifier le glyphe, la position de la clef ou son octaviation ne +changera pas la position des notes ; il faut pour y parvenir modifier +aussi la position du do médium. Le positionnement est relatif à la +ligne médiane, un nombre positif faisant monter, chaque ligne ou +interligne comptant pour 1. La valeur de @code{clefOctavation} devrait +être de 7, -7, 15 ou -15, bien que rien ne vous empêche de lui affecter +une autre valeur. + + +Lorsqu'un changement de clef intervient en même temps qu'un saut de +ligne, la nouvelle clef est imprimer à la fois en fin de ligne et au +début de la suivante. Vous pouvez toujours supprimer cette « clef de +précaution » en affectant la valeur @code{end-of-line-invisible} à la +propriété @code{explicitClefVisibility} du contexte @code{Staff}. Le +comportement par défaut sera réactivé par +@w{@code{\\unset@tie{}Staff.explicitClefVisibility}}. + + +Les exemples qui suivent illustrent les différentes possibilités de +définir ces propriétés manuellement. Sur la première ligne, la +position relative des notes par rapport aux clefs sont préservées, ce +qui n'est pas le cas pour la deuxième ligne. + +" + doctitlefr = "Affinage des propriétés d'une clef" diff --git a/Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc b/Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc new file mode 100644 index 0000000000..2e7327f0ff --- /dev/null +++ b/Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Il est possible de changer globalement la mise en forme des petites +notes dans un morceau, au moyen de la fonction +@code{add-grace-property}. Ici, par exemple, on ôte la définition de +l'orientation des objets @code{Stem} pour toutes les petites notes, +afin que les hampes ne soient pas toujours orientées vers le haut, et on +leur préfère des têtes en forme de croix. + +" + doctitlefr = "Mise en forme des notes d'ornement" diff --git a/Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc new file mode 100644 index 0000000000..187e3f4aab --- /dev/null +++ b/Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Un regroupement de portées sera indiqué par un simple rectangle +-- @code{SystemStartSquare} -- en début de ligne dès lors que vous le +mentionnerez explicitement au sein d'un contexte @code{StaffGroup} ou +@code{ChoirStaffGroup}. + +" + doctitlefr = "Indication de regroupement de portées par un rectangle" + diff --git a/Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc b/Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc new file mode 100644 index 0000000000..ab23c72a24 --- /dev/null +++ b/Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc @@ -0,0 +1,11 @@ +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +Les crochets d'arpegio (@code{arpeggioBracket}) permettent de mettre en +évidence les divisions d'un pupitre en l'absence de hampe, comme on le +voit régulièrement dans les partitions pour chœur. + +" + + doctitlefr = "Utilisation d'un arpeggioBracket pour rendre les +divisions plus évidentes" + diff --git a/Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc b/Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc new file mode 100644 index 0000000000..39f82d9f76 --- /dev/null +++ b/Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + texidocfr = " +La propriété @code{measureLength} détermine la pulsation et, combinée à +@code{beatLength} et @code{beatGrouping}, comment générer les ligatures +automatiques selon les durées et la métrique lorsqu'aucune règle n'a été +définie. L'exemple commenté qui suit indique différentes façons de +contrôler les ligatures à l'aide de ces propriétés. + +" + doctitlefr = "Utilisation conjointe de beatLength et beatGrouping" diff --git a/Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc b/Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc new file mode 100644 index 0000000000..126ea09e38 --- /dev/null +++ b/Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Certains auteurs utilisent deux liaisons lorsqu'ils veulent +lier des accords. Dans LilyPond, il faut pour cela activer +la propriété @code{doubleSlurs} : + +" + doctitlefr = "Accords et double liaison d'articulation" + diff --git a/Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc b/Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc new file mode 100644 index 0000000000..cb550186da --- /dev/null +++ b/Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Le trait que l'on trouve sur les hampes des acciaccatures peut +être appliqué dans d'autres situations. + +" + + doctitlefr = "Utilisation de hampe barrée pour une note normale" diff --git a/input/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc b/Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc similarity index 83% rename from input/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc rename to Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc index 8007f8e44c..30825ae56a 100644 --- a/input/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc +++ b/Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc @@ -1,3 +1,4 @@ +%% Translation of GIT committish: 5a898cf43a2a78be6c3a58e4359dccd82196fbe7 texidocfr = " Lorsqu'il est impossible d'obtenir facilement une allure particulière pour les têtes de note en recourant à la technique du @code{\\markup}, un diff --git a/Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc b/Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc new file mode 100644 index 0000000000..ba8f28c5c8 --- /dev/null +++ b/Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans +ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors +assigner à la propriété @code{tieWaitForNote} la valeur @code{#t} +(@emph{true} pour @qq{vrai}). Cette même méthode peut servir, par +exemple, à lier un trémolo à un accord. +" + doctitlefr = "Liaison de tenue et arpège" diff --git a/Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc new file mode 100644 index 0000000000..6d9112d5ce --- /dev/null +++ b/Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Vous pourrez, en jouant sur la propriété @code{'Y-extent}, aligner les +différents objets @code{DynamicLineSpanner} (souflets ou textuels) +quelle que soit leur étendue, par rapport à un même point de référence. +Tous les éléments seront alors centrés sur une même ligne, ce qui sera +visuellement plus agréable. + +C'est le même principe qui sert à aligner les indications textuelles sur +une ligne de référence. + +" + doctitlefr = "Alignement vertical des nuances indications textuelles" + diff --git a/Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc new file mode 100644 index 0000000000..0d3c0387f7 --- /dev/null +++ b/Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Cet exemple illustre la manière de positionner une portée d'ossia et +des paroles à l'aide des propriétés de contexte @code{alignBelowContext} +et @code{alignAboveContext}. + +" + doctitlefr = "Positionnement d'une ossia et des paroles" + diff --git a/Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc new file mode 100644 index 0000000000..edb62dbf93 --- /dev/null +++ b/Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Ce canevas ajoute une réduction pour piano à une partition standard pour +chœur à quatre voix mixtes. Ceci illustre l'un des avantages de +LilyPond : une expression musicale peut être réutilisée sans effort. +Toute modification apportée à l'une des voix, mettons @code{tenorMusique}, +sera automatiquement reportée dans la réduction pour piano. + +" + doctitlefr = "Ensemble vocal avec réduction pour piano" diff --git a/Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc new file mode 100644 index 0000000000..809fde2c7c --- /dev/null +++ b/Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Ce canevas ressemble beaucoup à celui pour chœur à quatre voix mixtes. +La différence réside dans le fait que les paroles sont positionnées en +ayant recours à @code{alignAboveContext} et @code{alignBelowContext}. + +" + doctitlefr = "Ensemble vocal avec alignement des paroles selon le contexte" diff --git a/Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc new file mode 100644 index 0000000000..3bd9398c1b --- /dev/null +++ b/Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc @@ -0,0 +1,10 @@ +%% Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37 + + texidocfr = " +Ce canevas illustre la manière d'agencer une œuvre vocale où le couplet +est chanté en solo et le refrain à deux voix. Vous noterez le recours +aux silences invisibles dans la variable @code{\global}@tie{}; ils +permettent de positionner les changements de métrique et autres éléments +communs à toutes les parties et pour l'intégralité du morceau. +" + doctitlefr = "Ensemble vocal avec couplet et refrain" diff --git a/Documentation/fr/texidocs/vocal-ensemble-template.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template.texidoc new file mode 100644 index 0000000000..f3393b8381 --- /dev/null +++ b/Documentation/fr/texidocs/vocal-ensemble-template.texidoc @@ -0,0 +1,12 @@ +%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441 + texidocfr = " +Ce fichier constitue un canevas standard de partition pour chœur à +quatre voix mixtes. Lorsque les ensembles s'étoffent, il est judicieux +de recourrir à une section spécifique incluse dans chacune des parties, +tout particulièrement pour gérer la métrique et la tonalité qui, +la plupart du temps, sont communes à tous les pupitres. Comme il est +d'usage pour les hymnes, les quatre voix sont réparties sur deux +portées. + +" + doctitlefr = "Ensemble vocal (simple)" diff --git a/Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc b/Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc new file mode 100644 index 0000000000..22ee648eea --- /dev/null +++ b/Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Le code suivant vous permettra d'obtenir une liste de toutes les +possibilités en matière de doigtés pour bois, tels qu'ils sont définis +dans le fichier @file{scm/define-woodwind-diagrams.scm}. Cette liste +sera produite en console et dans le fichier de journalisation, mais pas +sous forme de musique. +" + doctitlefr = "Liste des différents diagrammes de doigtés pour bois" diff --git a/Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc b/Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc new file mode 100644 index 0000000000..a9c8d89cd6 --- /dev/null +++ b/Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Voici la liste des différents instruments à vent de la section des bois +dont les doigtés sont disponibles à ce jour. +" + doctitlefr = "Liste des diagrammes de doigtés pour bois" + diff --git a/Documentation/fr/translations.html.in b/Documentation/fr/translations.html.in deleted file mode 100644 index db189e39c5..0000000000 --- a/Documentation/fr/translations.html.in +++ /dev/null @@ -1,456 +0,0 @@ -

Dernière mise à jour Sat Jan 24 01:17:40 UTC 2009 -

- - - - - État de la traduction de la documentation de LilyPond - - - - -

Retour à l'accueil de la documentation

- -

Avancement de la traduction de la documentation

- -

Cette page présente pour chaque partie de la documentation de - LilyPond @TOPLEVEL_VERSION@ l'avancement de la traduction - francophone. Pour chaque partie sont indiqués le nombre de mots de - l'original en anglais, les noms des traducteurs et relecteurs, - le proportion de matériel traduit, l'état de mise à jour, et - l'indicateur de révision par rapport au Grand Documentation Project - (GDP). -

- -

Au cours du GDP, la documentation en anglais a été complètement - remaniée, et sa révision se poursuit encore actuellement ; le rythme - de cette révision ne permet pas de maintenir toutes les traductions - à jour. Cependant, le fait que certaines traductions ne soient pas - du tout à jour (avec une indication sur fond rouge) ne signifient - pas qu'elles sont périmées, cela signifie juste que les traductions - n'atteignent pas la qualité de la documentation en anglais récemment - remaniée : les traducteurs font de leur mieux pour au moins mettre à - jour dans la documentation la syntaxe et les noms de commande - LilyPond. La mise à jour des traductions après le GDP est en - cours ; vous pouvez accélérer et améliorer ce processus en - participant aux traductions et relectures, qui sont organisées sur - la liste de diffusion - lilypond-user-fr@gnu.org. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond --- Manuel d'initiation TraducteursRelecteursTraduitÀ jourAutres informations
Titre des chapitres
(429)
John Mandereau
- Jean-Charles Malahieude
ouipartiellementpost-GDP
Préface
(411)
Valentin VillenaveLudovic Sardain
- Damien Heurtebise
ouiouipré-GDP
1 Introduction
(3855)
Ludovic Sardain
- John Mandereau
Jean-Charles Malahieude
- Jean-Yves Baudais
- Damien Heurtebise
ouiouipost-GDP
2 Tutoriel
(6365)
Nicolas Grandclaude
- Ludovic Sardain
- Gauvain Pocentek
Jean-Charles Malahieude
- Valentin Villenave
- John Mandereau
ouipartiellementpost-GDP
3 Concepts fondamentaux
(10318)
Valentin Villenave
- Jean-Charles Malahieude
John Mandereauouiouipost-GDP
4 Retouche de partition
(14775)
Valentin Villenave
- Nicolas Klutchnikoff
- Damien Heurtebise
Jean-Charles Malahieude
- John Mandereau
ouipartiellementpost-GDP
5 Travail sur des projets LilyPond
(3144)
Ludovic SardainJean-Yves Baudais
- Valentin Villenave
- John Mandereau
- Jean-Charles Malahieude
ouipartiellementpré-GDP
A Modèles
(483)
partiellement (11 %)pré-GDP
B Tutoriel Scheme
(960)
nonpré-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond --- Utilisation du programme TraducteursRelecteursTraduitÀ jourAutres informations
Titre des chapitres
(407)
John Mandereau
- Jean-Charles Malahieude
ouipartiellementpré-GDP
1 Installation
(1921)
John MandereauJean-Charles Malahieudepartiellement (11 %)partiellementpré-GDP
2 Environnement de travail
(1149)
Jean-Charles Malahieudeouiouipré-GDP
3 Exécution de LilyPond
(2827)
nonpré-GDP
4 @command{lilypond-book} : association musique-texte
(3248)
nonpré-GDP
5 Conversion à partir d'autres formats
(1171)
Jean-Charles Malahieudeouiouipré-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond --- Manuel d'initiation TraducteursRelecteursTraduitÀ jourAutres informations
Titre des chapitres
(695)
John Mandereau
- Jean-Charles Malahieude
ouipartiellementpré-GDP
1 Notation musicale générale
(91)
John Mandereau
- Jean-Charles Malahieude
ouipartiellementpré-GDP
1.1 Hauteurs
(3123)
Frédéric ChiassonValentin Villenave
- Jean-Charles Malahieude
ouipartiellementpré-GDP
1.2 Rythme
(5197)
Frédéric ChiassonValentin Villenave
- Jean-Charles Malahieude
ouipartiellementpré-GDP
1.3 Signes d'interprétation
(1146)
Valentin VillenaveJean-Charles Malahieude
- John Mandereau
ouipartiellementpré-GDP
1.4 Répétitions et reprises
(555)
Valentin VillenaveJean-Charles Malahieude
- John Mandereau
ouipartiellementpré-GDP
1.5 Notes simultanées
(1455)
Frédéric Chiasson
- Valentin Villenave
Jean-Charles Malahieude
- John Mandereau
ouipartiellementpré-GDP
1.6 Notation sur la portée
(1701)
Valentin Villenave
- Jean-Charles Malahieude
John Mandereaupartiellement (69 %)partiellementpré-GDP
1.7 Notation éditoriale
(895)
Jean-Charles Malahieudeouipartiellementpré-GDP
1.8 Texte
(2286)
Jean-Charles MalahieudeValentin Villenave
- John Mandereau
partiellement (97 %)partiellementpré-GDP
2 Notation spécialisée
(76)
John Mandereau
- Jean-Charles Malahieude
ouipartiellementpré-GDP
2.1 Musique vocale
(2670)
Valentin VillenaveJean-Charles Malahieudepartiellement (56 %)partiellementpré-GDP
2.2 Instruments utilisant des portées multiples
(744)
Valentin Villenave
- Jean-Charles Malahieude
Jean-Charles Malahieude
- John Mandereau
ouiouipré-GDP
2.3 Cordes non frettées
(235)
Valentin Villenave
- Matthieu Jacquot
Jean-Charles Malahieude
- John Mandereau
ouiN/Apré-GDP
2.4 Instruments à cordes frettées
(1850)
Matthieu JacquotJean-Charles Malahieudeouiouipré-GDP
2.5 Percussions
(810)
Valentin VillenaveJean-Charles Malahieude
- John Mandereau
partiellement (44 %)partiellementpré-GDP
2.6 Instruments à vent
(136)
Valentin VillenaveJean-Charles Malahieude
- John Mandereau
partiellement (1 %)partiellementpré-GDP
2.7 Notation des accords
(1464)
Valentin VillenaveJean-Charles Malahieude
- John Mandereau
partiellement (61 %)partiellementpré-GDP
2.8 Notations anciennes
(4487)
John Mandereau
- Jean-Charles Malahieude
partiellement (82 %)partiellementpré-GDP
2.9 Musiques du monde
(1115)
nonpré-GDP
3 Généralités en matière d'entrée et sortie
(5873)
Jean-Charles Malahieude
- Valentin Villenave
partiellement (5 %)partiellementpré-GDP
4 Gestion de l'espace
(8505)
Frédéric Chiasson
- Jean-Charles Malahieude
partiellement (18 %)partiellementpré-GDP
5 Modification des réglages prédéfinis
(11391)
Valentin VillenaveGilles Thibaultpartiellement (42 %)partiellementpré-GDP
6 Interfaces pour les programmeurs
(5202)
Valentin VillenaveGilles Thibaultpartiellement (9 %)partiellementpré-GDP
A Bibliographie
(310)
nonpré-GDP
B Tables du manuel de notation
(1190)
Frédéric Chiasson
- Jean-Charles Malahieude
partiellement (6 %)ouipré-GDP
C Aide-mémoire
(250)
Valentin Villenaveouipartiellementpré-GDP
-

- - - diff --git a/Documentation/fr/translations.itexi b/Documentation/fr/translations.itexi new file mode 100644 index 0000000000..cd7cd48e69 --- /dev/null +++ b/Documentation/fr/translations.itexi @@ -0,0 +1,1547 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Dernière mise à jour Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Essai sur la gravure musicale automatisée +@tab Traducteurs +@tab Relecteurs +@tab Traduit +@tab À jour +@tab Autres informations +@item +Titre des chapitres +@* +92 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +1 La gravure musicale +@* +5297 +@tab Jean-Charles Malahieude +@* +John Mandereau +@* +Gauvain Pocentek +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2 Références bibliographiques +@* +326 +@tab Jean-Jacques Gerbaud +@* +Valentin Villenave +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +partiellement (92 %) +@end html +@end ifhtml +@ifnothtml +partiellement (92 %) +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +GNU LilyPond -- Manuel d'initiation +@tab Traducteurs +@tab Relecteurs +@tab Traduit +@tab À jour +@tab Autres informations +@item +Titre des chapitres +@* +124 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab post-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +1 Tutoriel +@* +2535 +@tab Nicolas Grandclaude +@* +Ludovic Sardain +@* +Gauvain Pocentek +@tab Jean-Charles Malahieude +@* +Valentin Villenave +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab post-GDP +@item +2 Bases de notation musicale +@* +4184 +@tab Nicolas Grandclaude +@* +Ludovic Sardain +@* +Gauvain Pocentek +@tab Jean-Charles Malahieude +@* +Valentin Villenave +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab post-GDP +@item +3 Concepts fondamentaux +@* +11139 +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab post-GDP +@item +4 Retouche de partition +@* +15408 +@tab Valentin Villenave +@* +Nicolas Klutchnikoff +@* +Damien Heurtebise +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab post-GDP +@item +A Modèles +@* +225 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +GNU LilyPond -- Manuel de notation +@tab Traducteurs +@tab Relecteurs +@tab Traduit +@tab À jour +@tab Autres informations +@item +Titre des chapitres +@* +355 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +1 Notation musicale générale +@* +91 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +1.1 Hauteurs +@* +4479 +@tab Frédéric Chiasson +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +1.2 Rythme +@* +6048 +@tab Frédéric Chiasson +@* +Jean-Charles Malahieude +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +1.3 Signes d'interprétation +@* +1726 +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +1.4 Répétitions et reprises +@* +930 +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +1.5 Notes simultanées +@* +2163 +@tab Frédéric Chiasson +@* +Valentin Villenave +@* +Jean-Charles Malahieude +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +1.6 Notation sur la portée +@* +2056 +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +1.7 Annotations éditoriales +@* +931 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +1.8 Texte +@* +2716 +@tab Jean-Charles Malahieude +@tab Valentin Villenave +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2 Notation spécialisée +@* +81 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2.1 Musique vocale +@* +4807 +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab Jean-Charles Malahieude +@* +Jean-Jacques Gerbaud +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2.2 Instruments utilisant des portées multiples +@* +838 +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2.3 Cordes non frettées +@* +281 +@tab Valentin Villenave +@* +Matthieu Jacquot +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2.4 Instruments à cordes frettées +@* +2640 +@tab Matthieu Jacquot +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +2.5 Percussions +@* +806 +@tab Valentin Villenave +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +partiellement (46 %) +@end html +@end ifhtml +@ifnothtml +partiellement (46 %) +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +2.6 Instruments à vent +@* +312 +@tab Valentin Villenave +@* +Jean-Charles Malahieuse +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2.7 Notation des accords +@* +1855 +@tab Valentin Villenave +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab +@ifhtml + +@html +partiellement (48 %) +@end html +@end ifhtml +@ifnothtml +partiellement (48 %) +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +2.8 Notations anciennes +@* +4752 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +partiellement (47 %) +@end html +@end ifhtml +@ifnothtml +partiellement (47 %) +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +2.9 Musiques du monde +@* +1446 +@tab Jean-Jacques Gerbaud +@* +Valentin Villenave +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +partiellement +@end html +@end ifhtml +@ifnothtml +partiellement +@end ifnothtml +@tab pré-GDP +@item +3 Généralités en matière d'entrée et sortie +@* +7069 +@tab Jean-Charles Malahieude +@* +Valentin Villenave +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +4 Gestion de l'espace +@* +11017 +@tab Frédéric Chiasson +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +5 Modification des réglages prédéfinis +@* +12248 +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@tab Gilles Thibault +@tab +@ifhtml + +@html +partiellement (31 %) +@end html +@end ifhtml +@ifnothtml +partiellement (31 %) +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +A Tables du manuel de notation +@* +1989 +@tab Frédéric Chiasson +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +partiellement (85 %) +@end html +@end ifhtml +@ifnothtml +partiellement (85 %) +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +B Aide-mémoire +@* +252 +@tab Valentin Villenave +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +GNU LilyPond -- Utilisation des programmes +@tab Traducteurs +@tab Relecteurs +@tab Traduit +@tab À jour +@tab Autres informations +@item +Titre des chapitres +@* +135 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab John Mandereau +@* +Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +1 Exécution de @command{lilypond} +@* +3622 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +2 Mise à jour avec @command{convert-ly} +@* +1189 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +3 Association musique-texte avec @command{lilypond-book} +@* +3764 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +N/A +@end html +@end ifhtml +@ifnothtml +N/A +@end ifnothtml +@tab pré-GDP +@item +4 Programmes externes +@* +2170 +@tab Jean-Charles Malahieude +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +5 Suggestions pour la saisie de fichiers +@* +2694 +@tab Ludovic Sardain +@* +Jean-Charles Malahieude +@tab Jean-Yves Baudais +@* +Valentin Villenave +@* +John Mandereau +@* +Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond -- la notation musicale pour tous +@tab Traducteurs +@tab Relecteurs +@tab Traduit +@tab À jour +@tab Autres informations +@item +Titre des chapitres +@* +585 +@tab John Mandereau +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab John Mandereau +@tab +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +Introduction +@* +4506 +@tab Gauvain Pocentek +@* +Jean-Charles Malahieude +@* +John Mandereau +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +Téléchargement +@* +1183 +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +Manuels +@* +1200 +@tab John Mandereau +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@item +Communauté +@* +1755 +@tab Jean-Charles Malahieude +@* +John Mandereau +@tab Jean-Charles Malahieude +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab +@ifhtml + +@html +oui +@end html +@end ifhtml +@ifnothtml +oui +@end ifnothtml +@tab pré-GDP +@end multitable + diff --git a/Documentation/fr/translations.template.html.in b/Documentation/fr/translations.template.html.in deleted file mode 100644 index 950c6bec2e..0000000000 --- a/Documentation/fr/translations.template.html.in +++ /dev/null @@ -1,44 +0,0 @@ - - - - État de la traduction de la documentation de LilyPond - - - - -

Retour à l'accueil de la documentation

- -

Avancement de la traduction de la documentation

- -

Cette page présente pour chaque partie de la documentation de - LilyPond @TOPLEVEL_VERSION@ l'avancement de la traduction - francophone. Pour chaque partie sont indiqués le nombre de mots de - l'original en anglais, les noms des traducteurs et relecteurs, - le proportion de matériel traduit, l'état de mise à jour, et - l'indicateur de révision par rapport au Grand Documentation Project - (GDP). -

- -

Au cours du GDP, la documentation en anglais a été complètement - remaniée, et sa révision se poursuit encore actuellement ; le rythme - de cette révision ne permet pas de maintenir toutes les traductions - à jour. Cependant, le fait que certaines traductions ne soient pas - du tout à jour (avec une indication sur fond rouge) ne signifient - pas qu'elles sont périmées, cela signifie juste que les traductions - n'atteignent pas la qualité de la documentation en anglais récemment - remaniée : les traducteurs font de leur mieux pour au moins mettre à - jour dans la documentation la syntaxe et les noms de commande - LilyPond. La mise à jour des traductions après le GDP est en - cours ; vous pouvez accélérer et améliorer ce processus en - participant aux traductions et relectures, qui sont organisées sur - la liste de diffusion - lilypond-user-fr@gnu.org. -

- - - diff --git a/Documentation/fr/usage.tely b/Documentation/fr/usage.tely new file mode 100644 index 0000000000..d4e14102fa --- /dev/null +++ b/Documentation/fr/usage.tely @@ -0,0 +1,90 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 + +@setfilename lilypond-usage.info +@settitle GNU LilyPond -- Utilisation des programmes +@documentencoding UTF-8 +@documentlanguage fr +@afourpaper + +@c Translators: John Mandereau, Jean-Charles Malahieude + +@macro manualIntro +Ce document constitue le manuel d'utilisation des programmes de GNU +LilyPond@tie{}@version{}. De plus, ce manuel suggère des @qq{bonnes +pratiques} pour une utilisation plus efficace. +@end macro + +@c `Usage' was born 1999-10-10 with git commit c82c30c... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 par les auteurs. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Program Usage of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage French +@end ignore + + +@c urg, makeinfo 4.9.91 French translation is funky +@c iftex +@frenchspacing on +@c end iftex + +@lilyTitlePage{Utilisation des programmes} + +@c TOC -- non-tex +@ifnottex + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* Exécution de LilyPond:: mode d'emploi. +* Mise à jour avec convert-ly:: mise à jour d'anciens fichiers. +* lilypond-book:: intégration de texte et musique. +* Programmes externes:: associer LilyPond à d'autres programmes. +* Suggestions pour la saisie de fichiers LilyPond:: comment agencer un fichier. + +Annexes + +* GNU Free Documentation License:: licence de ce document. +* Index de LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include usage/running.itely +@include usage/updating.itely +@include usage/lilypond-book.itely +@include usage/external.itely +@include usage/suggestions.itely + +@include fdl.itexi + +@node Index de LilyPond +@appendix Index de LilyPond +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/fr/usage/GNUmakefile b/Documentation/fr/usage/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/fr/usage/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/usage/external.itely b/Documentation/fr/usage/external.itely new file mode 100644 index 0000000000..597bba4413 --- /dev/null +++ b/Documentation/fr/usage/external.itely @@ -0,0 +1,665 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Jean-Charles Malahieude + +@node Programmes externes +@chapter Programmes externes +@translationof External programs + +LilyPond peut interagir avec d'autres programmes, selon différentes +manières. + +@menu +* Pointer-cliquer:: +* LilyPond et les éditeurs de texte:: +* Conversion à partir d'autres formats:: +* Inclusion de partition LilyPond dans d'autres programmes:: +* Inclusion du travail des autres:: +@end menu + + +@node Pointer-cliquer +@section Pointer-cliquer +@translationof Point and click + +@cindex pointer-cliquer + +Le pointer-cliquer (@emph{point and click}) permet de se retrouver +directement dans le fichier source, à la note que l'on pointe dans le +visionneur de PDF. Ceci facilite grandement le repérage des erreurs à +partir du fichier imprimable. + +Lorsque cette fonctionnalité est active, LilyPond ajoute des hyperliens +au fichier PDF. Ces liens sont transmis au navigateur internet qui se +charge d'ouvrir un éditeur de texte à l'endroit même où le curseur +pointe. + +Afin que cette chaîne de traitement soit pleinement opérationnelle, il +faut configurer votre visionneur de PDF de façon à ce qu'il suive les +liens grâce au script @file{lilypond-invoke-editor} fourni avec +LilyPond. + +Pour Xpdf, sous UNIX, vous devrez insérer la ligne suivante dans +le fichier @file{xpdfrc} -- soit @file{/etc/xpdfrc}, soit dans votre +répertoire personnel @file{.xpdfrc}. + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +@file{lilypond-invoke-editor} est un petit programme assistant. Il +se charge d'appeler un éditeur pour les identifants de ressource +(@emph{URI}) de type @code{textedit}, et un navigateur pour les autres. +Il teste en outre la variable d'environnement @code{EDITOR} pour les cas +suivant@tie{}: + +@table @code +@item emacs + sera alors lancée la commande +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example + +@item gvim + sera alors lancée la commande +@example +gvim --remote +:@var{line}:norm@var{column} @var{file} +@end example + +@item nedit + sera alors lancée la commande +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +La variable d'environnement @code{LYEDITOR} permet d'anticiper cette +affectation, puisqu'elle contient la commande qui permet de lancer +l'éditeur en tenant compte des valeurs respectives de @code{%(file)s}, +@code{%(column)s} et@code{%(line)s}. Par exemple, + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +en variable d'environnement @code{LYEDITOR} revient au lancement d'un +client emacs standard. + + +@cindex ficher de sortie, taille + +@cindex taille du ficher de sortie + +L'option pointer-cliquer accroît la taille des fichiers de manière +significative. Afin de réduire la taille des fichiers PDF et PS, il est +toujours possible de désactiver le pointer-cliquer en ajoutant + +@example +\pointAndClickOff +@end example + +@noindent +dans le fichier @file{.ly}. Il peut alors être activé de manière +explicite grâce à + +@example +\pointAndClickOn +@end example + +Le pointer-cliquer peut aussi être désactivé au moment de la compilation +en ligne de commande@tie{}: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{Lorsqu'un fichier LilyPond est destiné à être redistribué, +pensez à désactiver le pointer-cliquer, de telle sorte que les chemins +d'accès et autres informations propres à votre système ne se retrouvent +pas inclus dans le fichier @file{.pdf}.} + + +@node LilyPond et les éditeurs de texte +@section LilyPond et les éditeurs de texte +@translationof Text editor support + +@cindex éditeurs +@cindex vim +@cindex emacs +@cindex modes, éditeur +@cindex syntaxe, coloration +@cindex coloration syntaxique + +Certains éditeurs de texte prennent en charge LilyPond. + +@menu +* Mode Emacs:: +* Mode Vim:: +* Autres éditeurs:: +@end menu + + +@node Mode Emacs +@unnumberedsubsec Mode Emacs +@translationof Emacs mode + +Emacs dispose d'un @file{lilypond-mode} qui fournit l'autocomplétion +des mots-clés, l'indentation, les appariements spécifiques à LilyPond, +la coloration syntaxique, ainsi que des raccourcis pour compiler et +consulter les manuels de LilyPond en mode info. Si le +@file{lilypond-mode} n'était pas installé sur votre système, procédez +comme ci-dessous. + +Le répertoire @file{elisp} inclus dans les sources contient aussi un +mode pour saisir la musique et lancer LilyPond. Faites @command{make +install} pour l'installer dans votre @var{elispdir}. Le fichier +@file{lilypond-init.el} devrait trouver sa place dans +@var{load-path}@file{/site-start.d/} ou bien ajouté à votre +@file{~/.emacs} ou @file{~/.emacs.el}. + +En tant que simple utilisateur, vous pouvez toujours ajouter votre +propre répertoire (par exemple @file{~/site-lisp/}) à votre +@var{load-path} en ajoutant la ligne suivante -- modifiée en conséquence +-- à votre @file{~/.emacs}@tie{}: + +@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 Mode Vim +@unnumberedsubsec Mode Vim +@translationof Vim mode + +En ce qui concerne @uref{http://@/www@/.vim@/.org,Vim}, LilyPond fournit +tout le nécessaire pour gérer la coloration syntaxique et l'indentation. +Le mode spécifique à Vim doît être indiqué dans le fichier +@file{$HOME/.vimrc}. Localisez ce fichier, ou créez-le, et +ajoutez-y les trois lignes suivantes@tie{}: + +@example +filetype off +set runtimepath+=/usr/local/share/lilypond/current/vim/ +filetype on +@end example + +@noindent +Si LilyPond est installé dans un autre répertoire que +@file{/usr/local/}, modifiez ce chemin en conséquence. Pour de plus +amples détails, consultez @rlearning{Autres sources de documentation}. + + +@node Autres éditeurs +@unnumberedsubsec Autres éditeurs +@translationof Other editors + +LilyPond est pris en charge par d'autres éditeurs, aussi bien en mode +texte qu'avec une interface graphique. Dans la mesure où leurs fichiers +de configuration ne sont pas fournis avec LilyPond, nous vous invitons à +consulter leur documentation pour plus d'information. Certains de ces +éditeurs sont mentionnés à la page @rweb{Facilités d'édition}. + + +@node Conversion à partir d'autres formats +@section Conversion à partir d'autres formats +@translationof Converting from other formats + +La musique peut aussi être récupérée par importation d'un autre +format. Ce chapitre passe en revue les différents outils prévus à cet +effet et inclus dans la distribution. Il existe d'autres outils qui +permettent de générer du code LilyPond, comme par exemple des +séquenceurs en mode graphique ou des convertisseurs XML. Pour plus +de détails, rendez-vous sur le @uref{http://@/lilypond@/.org,site}. + +Il s'agit de programmes distincts de @command{lilypond} qui se lancent +en ligne de commande. Pour plus de précisions, reportez-vous au +chapitre @ref{Utilisation en ligne de commande}. Si vous utilisez MacOS +10.3 ou 10.4 et recontrez quelque problème avec l'un de ces scripts, +comme @code{convert-ly}, reportez-vous à la page @rweb{MacOS X}. + + +@knownissues +Les développeurs ne sont malheureusement pas suffisament nombreux et +disponibles pour maintenir à jour ces programmes, considérez-les donc +@emph{en l'état}. Nous acceptons les patches avec plaisir, mais il y a +peu de chance pour que nous soyons en mesure de résoudre les bogues de +ces programmes. + +@menu +* Utilisation de midi2ly:: importation de musique au format MIDI. +* Utilisation de musicxml2ly:: importation de partitions au format MusicXML. +* Utilisation d'abc2ly:: importation de partitions au format ABC. +* Utilisation d'etf2ly:: importation de partitions Finale. +* Autres formats:: +@end menu + + + +@node Utilisation de midi2ly +@subsection Utilisation de @command{midi2ly} +@translationof Invoking midi2ly + +@cindex MIDI + +@command{midi2ly} traduit un fichier MIDI de Type@tie{}1 en un fichier +source LilyPond. + +MIDI (Music Instrument Digital Interface) constitue un standard pour +les instruments. Il spécifie le cablage, un protocole série et un +format de fichier. Le format de fichier MIDI est de ce fait un format +standard pour exporter de la musique à partir d'autres programmes, et +cette faculté prend tout son intérêt lorsqu'un programme dispose d'un +convertisseur capable d'importer directement un fichier. + +@command{midi2ly} convertit les pistes en contextes de portée +(@rinternals{Staff}) et les canaux en contextes de voix +(@rinternals{Voice}). Les hauteurs sont rendues en mode relatif, et +les durées spécifiées lorsque nécessaire. + +Vous pouvez enregistrer un fichier MIDI grâce à un clavier +électronique et ensuite le convertir en fichier @file{.ly}. Néanmoins +le rythme humain n'a pas une précision suffisante pour qu'une +conversion MIDI à ly ne se fasse sans surprise. En le couplant à une +quantisation (options @code{-s} et @code{-d}), @command{midi2ly} tente +de compenser dans la mesure du possible ces problèmes de +temporisation. C'est la raison pour laquelle le recours à +@command{midi2ly} n'est pas recommandé pour des fichiers midi générés +manuellement. + +Pour le lancer en ligne de commande, procédez ainsi@tie{}: + +@example +midi2ly [@var{option}]@dots{} @var{fichier-midi} +@end example + +Notez bien que, par @qq{ligne de commande}, nous parlons de la ligne de +commande du système. Pour plus de précisions, reportez-vous à +@ref{Conversion à partir d'autres formats}. + +@command{midi2ly} accepte les options suivantes@tie{}: + +@table @code +@item -a, --absolute-pitches +Rendu en hauteurs absolues. + +@item -d, --duration-quant=@var{DUR} +Quantiser les durées à partir de @var{DUR}. + +@item -e, --explicit-durations +Rendu explicite des durées. + +@item -h,--help +Afficher un résumé des utilisations. + +@item -k, --key=@var{acc}[:@var{minor}] +Déterminer la tonalité par défaut. @math{@var{acc} > 0} fixe le +nombre de dièses, @math{@var{acc} < 0} le nombre de bémols. Une +tonalité mineure est spécifiée par l'emploi de @code{:1}. + +@item -o, --output=@var{file} +Générer le résultat dans le fichier @var{file}. + +@item -s, --start-quant=@var{DUR} +Quantiser le début des notes sur @var{DUR}. + +@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} +Accepter des n-olets de valeur @var{DUR}*@var{NUM}/@var{DEN}. + +@item -v, --verbose +Mode verbeux. + +@item -V, --version +Afficher le numéro de version. + +@item -w, --warranty +Afficher les mentions de garantie et de copyright. + +@item -x, --text-lyrics +Interpréter le texte comme des paroles. +@end table + + +@knownissues + +Le tuilage en arpège ne sera pas rendu correctement. La première note +sera lue et les suivantes ignorées. Affectez-leur une durée unique et +ajoutez une indication de phrasé ou de pédale. + + +@node Utilisation de musicxml2ly +@subsection Utilisation de @command{musicxml2ly} +@translationof Invoking musicxml2ly + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} est un +dialecte XML pour représenter la notation musicale. + +@command{musicxml2ly} extrait, à partir d'un fichier MusicXML, les +notes, articulations, structure de la partition, paroles, etc. +et les écrit dans un fichier @file{.ly}. Il se lance en ligne de +commande. + +Pour le lancer en ligne de commande, procédez ainsi : +@example +musicxml2ly [@var{option}]@dots{} @var{fichier-xml} +@end example + +Notez bien que, par @qq{ligne de commande}, nous parlons de la ligne de +commande du système. Pour plus de précisions, reportez-vous à +@ref{Conversion à partir d'autres formats}. + +Si le nom du fichier est @file{-}, @command{musicxml2ly} lira +directement à partir de la ligne de commande. + +@command{musicxml2ly} accepte les options suivantes@tie{}: + +@table @code +@item -a, --absolute +Rendu en hauteurs absolues. + +@item -h,--help +Afficher un résumé des utilisations. + +@item -l, --language=LANG +Utiliser une autre définition liguistique (LANG), comme par exemple +@var{deutsch} pour des noms de notes en allemand. + +@item --lxml +Utiliser le paquetage Python @code{lxml.etree}, moins gourmand en +mémoire et temps de calcul, pour effectuer l'annalyse XML. + +@item --nd --no-articulation-directions +Ne pas convertir la direction (@code{^}, @code{_} ou @code{-}) des +articulations, nuances, etc. + +@item --no-beaming +Ne pas convertir les informations de ligature@tie{}; laisser LilyPond +gérer les ligatures automatiquement. + +@item -o,--output=@var{file} +Générer le résultat dans le fichier @var{fichier}. S'il n'est pas +déterminé, ce sera @var{fichier-xml}@file{.ly}@tie{}; @file{-} +produira le résultat sur la sortie standard (@var{stdout}). + +@item -r,--relative +Rendu en hauteurs relatives (mode par défaut). + +@item -v,--verbose +Mode verbeux. + +@item --version +Afficher le numéro de version. + +@item -z,--compressed +Le fichier d'entrée est un fichier MusicXML zippé. +@end table + + +@node Utilisation d'abc2ly +@subsection Utilisation de @command{abc2ly} +@translationof Invoking abc2ly + +@warning{Ce programme ne bénéficie d'aucune maintenance. Il est +susceptible d'être suprimé des versions futures de LilyPond.} + +@cindex ABC + +ABC est un format relativement simple basé sur l'ASCII. Sa +description est disponible sur le +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html,site +d'ABC}. + +@command{abc2ly} traduit du format ABC au format LilyPond. + +Pour le lancer en ligne de commande, procédez ainsi@tie{}: + +@example +abc2ly [@var{option}]@dots{} @var{fichier-abc} +@end example + +@command{abc2ly} accepte les options suivantes@tie{}: + +@table @code +@item -b,--beams=None +Préserver la notion de lien de croches propre à ABC. + +@item -h,--help +Afficher un résumé des utilisations. + +@item -o,--output=@var{file} +Générer le résultat dans le fichier @var{file}. + +@item -s,--strict +Être strict sur la réussite. + +@item --version +Afficher le numéro de version. +@end table + +Il est possible d'ajouter des bribes de code LilyPond dans un fichier +source ABC. Ainsi, l'assertion + +@example +%%LY voices \set autoBeaming = ##f +@end example + +aura pour conséquence d'insérer le texte qui suit le mot-clé @qq{voices} +dans la voix correspondante du fichier LilyPond. + +De la même manière, + +@example +%%LY slyrics more words +@end example + +placera le texte suivant le mot-clé @qq{slyrics} dans une ligne de +paroles. + + +@knownissues + +Le standard ABC n'est pas si @qq{standard} que cela. Pour des +fonctionnalités étendues, comme la polyphonie, existent différentes +conventions. + +Un fichier comportant plusieurs morceaux ne peut être converti. + +ABC synchronise paroles et musique en début de ligne@tie{}; +@command{abc2ly} ne le fait pas. + +@command{abc2ly} ignore les ligatures ABC. + + +@node Utilisation d'etf2ly +@subsection Utilisation de @command{etf2ly} +@translationof Invoking etf2ly + +@warning{Ce programme ne bénéficie d'aucune maintenance. Il est +susceptible d'être suprimé des versions futures de LilyPond.} + +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) est l'un des formats utilisés par le +logiciel Finale, édité par Coda Music Technology. @command{etf2ly} +convertit partiellement les fichiers ETF en fichiers source LilyPond. + + +Pour le lancer en ligne de commande, procédez ainsi@tie{}: + +@example +etf2ly [@var{option}]@dots{} @var{fichier-etf} +@end example + +Notez bien que, par @qq{ligne de commande}, nous parlons de la ligne de +commande du système. Pour plus de précisions, reportez-vous à +@ref{Conversion à partir d'autres formats}. + +@command{etf2ly} accepte les options suivantes@tie{}: + +@table @code +@item -h,--help +Afficher cette aide. + +@item -o, --output=@var{file} +Générer le résultat dans le fichier @var{file}. + +@item --version +Afficher le numéro de version. +@end table + + +@knownissues + +La liste des scripts d'articulation est incomplète. Les mesures vides +perturbent @command{etf2ly}. Les séquences de notes d'ornement ne se +terminent pas de manière satisfaisante. + + +@node Autres formats +@subsection Autres formats +@translationof Other formats + +@cindex programmes externes générant des fichiers LilyPond + +LilyPond ne prend pas en charge d'autre format. Cependant, certains +outils indépendants permettent de générer des fichiers LilyPond, comme +indiqué à la page @rweb{Facilités d'édition}. + + +@node Inclusion de partition LilyPond dans d'autres programmes +@section Inclusion de partition LilyPond dans d'autres programmes +@translationof LilyPond output in other programs + +Nous allons nous intéresser ici à différents moyens d'associer texte +et musique, en laissant de côté l'automatisation grâce à +@command{lilypond-book}. + +@menu +* Extraction de plusieurs fragments d'une grande partition:: +* Insertion du résultat de LilyPond dans OpenOffice.org:: +* Insertion du résultat de LilyPond dans d'autres programmes:: +@end menu + + +@node Extraction de plusieurs fragments d'une grande partition +@unnumberedsubsec Extraction de plusieurs fragments d'une grande partition +@translationof Many quotes from a large score + +Si d'aventure vous deviez recopier un certain nombre d'extraits d'une +même partition, vous pouvez recourir à @qq{l'emporte pièce} -- la +fonction @emph{clip systems} -- comme indiqué au chapitre +@ruser{Extraction de fragments musicaux}. + + +@node Insertion du résultat de LilyPond dans OpenOffice.org +@unnumberedsubsec Insertion du résultat de LilyPond dans OpenOffice.org +@translationof Inserting LilyPond output into OpenOffice.org + +@cindex OpenOffice.org + +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond} permet +d'insérer directement des partitions LilyPond dans OpenOffice.org. + + +@node Insertion du résultat de LilyPond dans d'autres programmes +@unnumberedsubsec Insertion du résultat de LilyPond dans d'autres programmes +@translationof Inserting LilyPond output into other programs + +Dans le cas où vous cherchez à insérer le résultat de LilyPond dans +d'autres programmes, utilisez @code{lilypond} plutôt que +@code{lilypond-book}. Chaque extrait devra être généré séparément avant +d'être inséré dans votre document. De très nombreux programmes sont +capables de contenir le résultat de LilyPond, que ce soit au format +@file{PNG}, @file{EPS} ou @file{PDF}. + +Les options suivantes vous permettront de réduire notablement les +contours de l'image LilyPond@tie{}: + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +En procédant comme ci-après, vous obtiendrez un fichier @file{EPS}@tie{}: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts monfichier.ly +@end example + +ou @file{PNG} : + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png monfichier.ly +@end example + + +@node Inclusion du travail des autres +@section Inclusion du travail des autres +@translationof Independent includes + +Certains ont écrit des lignes et des lignes de code -- souvent bien +utiles -- qui peuvent servir à différents projets. En attendant le jour +où elles pourraient faire partie intégrante de LilyPond, vous pouvez +toujours les télécharger et les utiliser avec la commande +@code{\include}. + + +@menu +* MIDI et articulations:: +@end menu + + +@node MIDI et articulations +@subsection MIDI et articulations +@translationof MIDI articulation + +LilyPond sait produire des fichiers MIDI, principalement dans le but de +@qq{contrôle-qualité} -- heureux détenteurs d'une oreille absolue -- de +ce qui a été saisi. Ne seront toutefois reproduits, en plus des notes +et durées, que les nuances et tempi explicites. + +Le projet @emph{articulate} (site en anglais) s'est donné pour objectif +de reproduire plus d'informations dans le MIDI. Les notes qui ne sont +pas liées sont ainsi raccourcies dans le but @qq{d'articuler}. Ce +raccourcissement dépend de l'articulation appliquée à la note@tie{}: un +@emph{staccato} raccourcira la note de moitié, un @emph{tenuto} lui +gardera sa durée entière@dots{} Ce script réalise aussi les trilles et +@emph{grupettos} et compte bien traiter d'autres ornements tels que les +mordants. + +@example +@uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate} +@end example +@noindent + +@knownissues + +Ce projet ne peut traiter que ce qu'il connaît@tie{}: tout ce qui peut +ressembler à un @emph{markup} -- et donc pas à la propriété d'une note +-- sera ignoré. + + diff --git a/Documentation/fr/usage/lilypond-book.itely b/Documentation/fr/usage/lilypond-book.itely new file mode 100644 index 0000000000..16e625b84d --- /dev/null +++ b/Documentation/fr/usage/lilypond-book.itely @@ -0,0 +1,1363 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 8e1f0e01b3665bfd8e53ef646ad8fd627d09a41b + + 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" + +@c Translators: Jean-Charles Malahieude +@c Translation checkers: + +@c Note: keep this node named so that `info lilypond-book' brings you here. +@node lilypond-book +@chapter Association musique-texte avec @command{lilypond-book} +@translationof lilypond-book + +Vous pouvez inclure des partitions dans un document tout comme vous +feriez pour n'importe quelle image. Ces images sont générées séparément +-- que ce soit sous forme de description PostScript ou au format PNG -- +puis incluses dans votre document @LaTeX{} ou HTML. + +@command{lilypond-book} permet d'automatiser ces opérations@tie{}: le +programme extrait de votre document les fragments de musique, les +traite grâce à @command{lilypond} puis en restitue la partition dans +votre document. Largeur de ligne et taille de la fonte sont adaptées +pour correspondre à la mise en forme de votre document. + +@command{lilypond-book} est un script indépendant de @command{lilypond} +et se lance en ligne de commande -- pour plus de précisions, consultez +@ref{Utilisation en ligne de commande}. Si vous utilisez MacOS 10.3 ou +10.4 et rencontrez quelque difficulté avec @code{lilypond-book}, +référez-vous à @rwebnamed{MacOS X,cette page}. + +@command{lilypond-book} s'applique aux documents @LaTeX{}, HTML, Texinfo +et DocBook. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex documents, ajout de musique +@cindex HTML, musique et +@cindex Texinfo, musique et +@cindex DocBook, musique et +@cindex @LaTeX{}, musique et + + +@menu +* Exemple de document musicologique:: +* Association musique-texte:: +* Options applicables aux fragments de musique:: +* Utilisation de lilypond-book:: +* Extensions de nom de fichier:: +* Modèles pour lilypond-book:: +* Gestion de la table des matières:: +* Autres méthodes d'association texte-musique:: +@end menu + + +@node Exemple de document musicologique +@section Exemple de document musicologique +@translationof An example of a musicological document + +@cindex musicologie + +Un certain nombre d'ouvrages peuvent être illustrés par des extraits +musicaux, qu'il s'agisse d'un taité de musicologie, d'un carnet de chant +ou d'un manuel à l'exemple de celui que vous consultez actuellement. +Cet agencement peut se faire @qq{à la main} par importation d'un +graphique PostScript dans le traitement de texte. Les développeurs de +LilyPond ont cependant créé un outil permettant d'automatiser ces +opérations pour ce qui concerne les documents HTML, @LaTeX{}, Texinfo et +DocBook. + +Un script -- @code{lilypond-book} -- se charge d'extraire les fragments +de musique, puis de les mettre en forme avant de renvoyer la +@qq{partition} correspondante. Voici un court exemple utilisable avec +@LaTeX{}. Dans la mesure où il est suffisamment parlant, nous nous +abstiendrons de le commenter. + + +@subheading Fichier d'entrée +@translationof Input + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Un document destiné à être traité par \verb+lilypond-book+ peut tout à +fait mélanger de la musique et du texte. +Par exemple, + +\begin{lilypond} +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +\end{lilypond} + +Les options sont indiquées entre crochets. + +\begin{lilypond}[fragment,quote,staffsize=26,verbatim] + c'4 f16 +\end{lilypond} + +Des extraits plus conséquents peuvent faire l'objet d'un fichier +indépendant, alors inclus avec \verb+\lilypondfile+. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(Si besoin, remplacez @file{screech-boink.ly} par +n'importe quel fichier @file{.ly} qui se trouve dans +le même répertoire que le présent fichier.) + +\end{document} +@end verbatim +@end quotation + + +@subheading Traitement +@translationof Processing + +Enregistrez ces lignes dans un fichier nommé @file{lilybook.lytex} puis, +dans un terminal, lancez + +@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{Lecture de lilybook.lytex...} +@emph{..nous vous épargnons le verbiage de la console..} +@emph{Compilation de lilybook.tex...} +cd out +pdflatex lilybook +@emph{..nous vous épargnons le verbiage de la console..} +xpdf lilybook +@emph{(remplacez @command{xpdf} par votre lecteur de PDF habituel)} +@end example + +Le traitement par @command{lilypond-book} puis @command{latex} va +générer un certain nombre de fichiers temporaires susceptibles +d'encombrer inutilement votre répertoire de travail, aussi nous vous +recommandons d'utiliser l'option @code{--output=@var{répertoire}} afin +que les fichiers créés soient isolés dans le sous-répertoire +@file{répertoire}. + +Pour terminer, voici le résultat de cet exemple pour +@LaTeX{}.@footnote{Ce manuel étant réalisé avec Texinfo, il se peut que +la mise en forme diverge quelque peu.} + + +@page + +@subheading Résultat +@translationof Output + +Un document destiné à être traité par @command{lilypond-book} peut tout à +fait mélanger de la musique et du texte. +Par exemple, + +@lilypond +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +@end lilypond + +Les options sont indiquées entre crochets. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Des extraits plus conséquents peuvent faire l'objet d'un fichier +indépendant, alors inclus avec @code{\lilypondfile}. + +@lilypondfile[quote,noindent]{screech-boink.ly} + + +@page + +@node Association musique-texte +@section Association musique-texte +@translationof Integrating music and text + +Nous allons nous intéresser, dans les lignes qui suivent, à la manière +d'intégrer LilyPond selon différents types de format. + +@menu +* LaTeX:: +* Texinfo:: +* HTML:: +* DocBook:: +@end menu + + +@node LaTeX +@subsection @LaTeX{} +@translationof LaTeX + +@LaTeX{} peut être considéré comme le standard de publication dans le +domaine des sciences exactes. Il repose sur le moteur typographique +@TeX{}, le @emph{nec plus ultra} en la matière. + +Consultez +@uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/french/, +@emph{The Not So Short Introduction to @LaTeX{}} en français} pour un +aperçu des possibilités de @LaTeX{}. + +Il suffit, pour inclure de la musique, d'utiliser + +@example +\begin@{lilypond@}[liste,des,options] + VOTRE CODE LILYPOND +\end@{lilypond@} +@end example + +@noindent +ou + +@example +\lilypondfile[liste,des,options]@{@var{fichier}@} +@end example + +@noindent +ou encore + +@example +\lilypond[liste,des,options]@{ VOTRE CODE LILYPOND @} +@end example + +Par ailleurs, la commande @code{\lilypondversion} vous permet d'afficher +le numéro de version de LilyPond. +Lancer @command{lilypond-book} produira un fichier qui sera ensuite +traité par @LaTeX{}. + +Voici quelques exemples. L'environnement @code{lilypond} + +@example +\begin@{lilypond@}[quote,fragment,staffsize=26] + c' d' e' f' g'2 g'2 +\end@{lilypond@} +@end example + +@noindent +produit + +@lilypond[quote,fragment,staffsize=26] +c' d' e' f' g'2 g'2 +@end lilypond + +La version abrégée + +@example +\lilypond[quote,fragment,staffsize=11]@{@} +@end example + +@noindent +produit + +@lilypond[quote,fragment,staffsize=11]{} + +@noindent +Dans l'état actuel des choses, il n'est pas possible d'inclure des +accolades -- @code{@{} ou @code{@}} -- dans un +@code{\lilypond@{@}}@tie{}; cette commande n'est donc pertinente que +lorsque conjuguée à l'option @code{fragment}. + +La longueur par défaut des portées sera ajustée en fonction des +commandes contenues dans le préambule du document -- ce qui précède la +ligne @code{\begin@{document@}}. La commande @code{lilypond-book} les +transmet à @LaTeX{} afin de connaître la largeur du texte, et par voie +de conséquence déterminer la longueur des portées. Notez bien que cet +algorithme heuristique n'est pas infaillible@tie{}; vous devrez alors +recourir à l'option @code{line-width}. + +@cindex titrage et lilypond-book +@cindex \header et documents @LaTeX{} + +Dès lors qu'elles auront été définies dans votre document, les macros +suivantes seront appelées avant chaque extrait musical@tie{}: + +@itemize @bullet +@item @code{\preLilyPondExample} avant la musique, + +@item @code{\postLilyPondExample} après la musique, + +@item @code{\betweenLilyPondSystem[1]} entre les systèmes, si tant est +que @code{lilypond-book} a découpé la partition en plusieurs fichiers +PostScript. Elle requiert un paramètre et reçoit le nombre de fichiers +inclus dans l'extrait. Par défaut, elle insert simplement 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 + +Lorsque, pour les besoins de la démonstration, certains éléments +musicaux tels que des liaisons -- de phrasé ou de prolongation -- +continuent après le fragment qui vous intéresse, il suffit d'insérer un +saut de ligne et de limiter le nombre de systèmes à inclure. + +En ce qui concerne @LaTeX{}, vous devrez définir +@code{\betweenLilyPondSystem} de telle sorte que l'inclusion cesse dès +que le nombre de systèmes requis est atteint. Dans la mesure où +@code{\betweenLilyPondSystem} n'est appelé qu'@strong{après} le premier +système, inclure un seul système est un jeu d'enfant@tie{}: + +@example +\def\betweenLilyPondSystem#1@{\endinput@} + +\begin@{lilypond@}[fragment] + c'1\( e'( c'~ \break c' d) e f\) +\end@{lilypond@} +@end example + +Pour un plus grand nombre de systèmes, il suffit d'insérer un test +conditionnel @TeX{} avant le @code{\endinput}. À partir de l'exemple +qui suit, remplacez le @qq{2} par le nombre de systèmes dont vous aurez +besoin@tie{}: + +@example +\def\betweenLilyPondSystem#1@{ + \ifnum##1<2\else\expandafter\endinput\fi +@} +@end example + +@noindent +Étant donné que @code{\endinput} arrête immédiatement le traitement du +fichier source en cours, l'insertion du @code{\expandafter} permet de +repousser ce @code{\endinput} après le @code{\fi}@tie{}; la clause +@w{@code{\if-\fi}} sera alors respectée. + +Gardez à l'esprit que @code{\betweenLilyPondSystem} est effectif tant +que @TeX{} n'est pas sorti du groupe en cours -- tel que +l'environnement @LaTeX{} -- ou écrasé par une nouvelle définition pour +la suite du document la plupart du temps. Pour réinitialiser cette +définition, insérez + +@example +\let\betweenLilyPondSystem\undefined +@end example + +@noindent +dans votre document @LaTeX{}. + +La création d'une macro @TeX{} permet de se simplifier la vie@tie{}: + +@example +\def\onlyFirstNSystems#1@{ + \def\betweenLilyPondSystem##1@{% + \ifnum##1<#1\else\expandafter\endinput\fi@} +@} +@end example + +@noindent +Il suffit alors, avant chacun des fragments à inclure, de spécifier le +nombre de systèmes requis@tie{}: + +@example +\onlyFirstNSystems@{3@} +\begin@{lilypond@}...\end@{lilypond@} +\onlyFirstNSystems@{1@} +\begin@{lilypond@}...\end@{lilypond@} +@end example + + +@seealso +@command{lilypond-book} dispose d'options en ligne de commande +particulières. Elles sont consultables, ainsi que d'autres détails +spécifiques au traitement de documents @LaTeX{}, au chapitre +@ref{Utilisation de lilypond-book}. + + +@node Texinfo +@subsection Texinfo +@translationof Texinfo + +Texinfo est le format standard pour toute la documentation du projet +GNU. À titre d'exemple, toute la documentation de LilyPond -- qu'il +s'agisse des versions HTML, PDF ou info -- est générée à partir de +documents Texinfo. + +Dans le fichier source, on spécifie qu'il s'agit de musique avec + +@example +@@lilypond[liste,des,options] + VOTRE CODE LILYPOND +@@end lilypond +@end example + +@noindent +ou + +@example +@@lilypond[liste,des,options]@{ VOTRE CODE LILYPOND @} +@end example + +@noindent +ou bien encore + +@example +@@lilypondfile[liste,des,options]@{@var{fichier}@} +@end example + +Par ailleurs, l'utilisation d'un @code{@@lilypondversion} permet +d'afficher la version de LilyPond utilisée. + +Le traitement du fichier source par @command{lilypond-book} génère un +fichier Texinfo (extension @file{.itexi}) qui contiendra les balises +@code{@@image} pour les formats HTML, Info ou imprimable. Les images +générées par @command{lilypond-book} sont au format EPS et PDF en vue +d'une impression, et au format PNG pour leur utilisation en HTML ou +Info. + +En voici deux exemples. Un environnement @code{lilypond} + +@example +@@lilypond[fragment] +c' d' e' f' g'2 g' +@@end lilypond +@end example + +@noindent +produit + +@lilypond[fragment] +c' d' e' f' g'2 g' +@end lilypond + +La version abrégée + +@example +@@lilypond[fragment,staffsize=11]@{@} +@end example + +@noindent +produit + +@lilypond[fragment,staffsize=11]{} + +Contrairement à @LaTeX{}, @code{@@lilypond@{@dots{}@}} ne va pas +intégrer d'image dans le document, mais générer un paragraphe. + + +@node HTML +@subsection HTML +@translationof HTML + +Il suffit, pour inclure de la musique, d'utiliser + +@example + +\key c \minor c4 es g2 + +@end example + +@noindent +@command{lilypond-book} produira alors un fichier HTML contenant les +balises d'image pour les fragments de musique@tie{}: + +@lilypond[fragment,relative=2] +\key c \minor c4 es g2 +@end lilypond + +Pour insérer l'image au fil du texte, il suffit d'utiliser +@code{}, tout en séparant options et musique par un +caractère deux points, comme ici@tie{}: + +@example +De la musique au milieu d'une ligne de texte. +@end example + +Lorsque l'inclusion concerne des fichiers indépendants, utilisez + +@example +@var{fichier} +@end example + +Une liste des différentes options utilisables avec les balises +@code{lilypond} et @code{lilypondfile} est disponible, à la rubrique +@ref{Options applicables aux fragments de musique}. + +Par ailleurs, la commande @code{\lilypondversion} vous permet d'afficher +le numéro de version de LilyPond. + +@cindex titrage et HTML +@cindex prévisualisation d'image +@cindex thumbnail + + +@node DocBook +@subsection DocBook +@translationof DocBook + +L'inclusion de documents LilyPond ne doit nuire en rien à la conformité +du document DocBooK@tie{}; l'utilisation d'éditeurs spécialisés ainsi +que d'outils de validation en sera ainsi préservée. C'est la raison +pour laquelle nous ne définirons pas de balise spécifique@tie{}; nous +respecterons plutôt les conventions des éléments standards de DocBook. + + +@subheading Conventions communes +@translationof Common conventions + +Quel que soit le type d'extrait à inclure, nous utiliserons les +éléments @code{mediaobject} et @code{inlinemediaobject}, de telle sorte +que ces inclusions soient incorporées directement ou non dans le +document final. Les options de formatage des extraits en question sont +fournies par la propriété @code{role} de l'élément central -- voir les +paragraphes suivants. Les balises sont déterminées de manière à ce que +les éditeurs DocBook prennent en charge du mieux possible leur contenu. +Les fichiers DocBook destinés à un traitement par +@command{lilypond-book} doivent avoir une extension @file{.lyxml}. + + +@subheading Inclusion d'un fichier LilyPond +@translationof Including a LilyPond file + +Il s'agit en fait du cas le plus simple. Le fichier à inclure doit +avoir une extension @file{.ly} et sera inséré comme n'importe quel +@code{imageobject}, en respectant la structure suivante@tie{}: + +@example + + + + + +@end example + +Vous pouvez utiliser, en tant que balise externe, aussi bien +@code{mediaobject} que @code{inlinemediaobject}. + + +@subheading Inclusion de code LilyPond +@translationof Including LilyPond code + +L'inclusion de code LilyPond se réalise à l'aide d'un +@code{programlisting} auquel on associe le langage @code{lilypond}. En +voici la syntaxe@tie{}: + +@example + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@end example + +Comme vous le remarquez, la balise externe -- qu'il s'agisse d'un +@code{mediaobject} ou d'un @code{inlinemediaobject} -- comporte un bloc +@code{textobject} qui contiendra le @code{programlisting}. + + +@subheading Génération du document DocBook +@translationof Processing the DocBook document + +@command{lilypond-book} génère, à partir d'un fichier @file{.lyxml}, un +document DocBook tout à fait valide -- extension @file{.xml} -- que vous +pourrez ensuite traiter avec votre application habituelle. Dans le cas +de @uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex}, vous +obtiendrez alors automatiquement un fichier PDF. Les feuilles de style +XSL@tie{}DocBook officielles permettent de générer du HTML (HTML Help, +JavaHelp etc.)@tie{}; vous pourriez néanmoins devoir y apporter quelques +adaptations. + + +@node Options applicables aux fragments de musique +@section Options applicables aux fragments de musique +@translationof Music fragment options + +Dans les lignes qui suivent, l'appellation @qq{commande LilyPond} fait +référence à toutes celles vues plus haut et qui font appel à +@command{lilypond-book} pour produire un extrait musical. Pour plus de +simplicité, nous ne parlerons que de la syntaxe applicable à @LaTeX{}. + +Nous attirons votre attention sur le fait que les différentes options +sont lues de la gauche vers la droite. Si une option est transmise +plusieurs fois, seule la dernière sera prise en compte. + +Les commandes LilyPond acceptent les options suivantes@tie{}: + +@table @code +@item staffsize=@var{hauteur} +Définit la taille de portée à @var{hauteur} exprimée en points. + +@item ragged-right +Produit des lignes en pleine largeur avec un espacement naturel. En +d'autres termes, sera ajoutée la commande de mise en forme +@w{@code{ragged-right = ##t}}. Il s'agit de l'option par défaut de la +commande @code{\lilypond@{@}} en l'absence d'option @code{line-width}. +C'est aussi l'option par défaut pour l'environnement @code{lilypond} +lorsque l'option @code{fragment} est activée sans avoir défini +explicitement de longueur de ligne. + +@item noragged-right +Dans le cas où l'extrait tient sur une seule ligne, la portée sera +étirée pour correspondre à la longueur de ligne du texte. Autrement +dit, la commande de mise en forme @code{ragged-right = ##f} s'ajoute à +l'extrait LilyPond. + +@item line-width +@itemx line-width=@var{taille}\@var{unité} +Détermine la longueur de ligne à @var{taille}, exprimée en @var{unité}. +@var{unité} peut prendre les valeurs @code{cm}, @code{mm}, @code{in} ou +@code{pt}. Cette option n'affectera que le résultat de LilyPond -- la +longueur de la portée -- et en aucun cas la mise en forme du texte. + +En l'absence d'argument, la longueur de ligne sera définie à une valeur +par défaut telle que calculée par un algoritme heuristique. + +Lorsque l'option @code{line-width} n'est pas utilisée, +@command{lilypond-book} tentera de déterminer des valeurs par défaut +pour les cas où les environnements @code{lilypond} ne font pas appel à +@code{ragged-right}. + +@item notime +Désactive l'impression des métriques et barres de mesure pour +l'intégralité de la partition. + +@item fragment +Laisse à @command{lilypond-book} le soin d'ajouter ce qui est +indispensable, de telle sorte que vous pouvez vous contenter d'un + +@example +c'4 +@end example + +@noindent +sans @code{\layout}, @code{\score}, etc. + +@item nofragment +N'ajoute rien à ce qui se trouve dans l'environnement LilyPond. À noter +qu'il s'agit de l'option par défaut. + +@item indent=@var{taille}\@var{unité} +Définit l'indentation du premier système à @var{taille}, exprimée en +@var{unité} -- @code{cm}, @code{mm}, @code{in} ou @code{pt}. Cette +option n'affecte que LilyPond, et en aucun cas la mise en forme du +texte. + +@item noindent +Ramène l'indentation du premier système à zéro. Cette option n'affecte +que LilyPond, et en aucun cas la mise en forme du texte. Dans la mesure +où il s'agit du comportement par défaut, point n'est besoin de spécifier +@code{noindent}. + +@item quote +Réduit la longueur des lignes musicales de @math{2*0.4}@dmn{in} (soit +@math{2 * 10,16}@tie{}@dmn{mm}) pour renvoyer l'extrait dans un bloc de +citation. La valeur @qq{0,4@tie{}pouce} est contrôlée par l'option +@code{exampleindent}. + +@item exampleindent +Détermine la valeur de l'indentation qui sera utilisée par l'option +@code{quote}. + +@item relative +@itemx relative=@var{n} +Utilise le mode d'octave relative. Les notes sont donc par défaut +positionnées relativement au do central. L'argument -- un nombre entier +-- fourni à l'option @code{relative} spécifie l'octave de départ de +l'extrait@tie{}; @code{1} correspond au do central. Cette option +@code{relative} n'a d'effet que si elle est utilisée en combinaison avec +l'option @code{fragment}@tie{}; autrement dit, l'option @code{fragment} +est implicite dès lors que @code{relative} est explicité. +@end table + + +La documentation de LilyPond, comme nous l'avons déjà vu, use +abondamment de @command{lilypond-book}. Elle utilise à cet effet +quelques options particulières. + +@table @code +@item verbatim +L'argument de la commande LilyPond est recopié textuellement dans le +fichier généré, avant l'image de la partition. Cependant, cette option +n'est pas pleinement opérationnelle lorsqu'un @code{\lilypond@{@}} se +trouve au milieu d'un paragraphe. + +L'utilisation conjointe d'un @code{verbatim} et de la commande +@code{lilypondfile} permet de n'inclure textuellement qu'une seule +partie du fichier source. @code{lilypond-book} reproduira alors +textuellement la partie du fichier source comprise entre les +commentaires @code{begin@tie{}verbatim} et éventuellement +@code{end@tie{}verbatim}. Si l'on considère le fichier source suivant, +la musique sera interprétée en mode relatif, mais la recopie du code ne +comportera pas l'assertion du bloc @code{relative}@tie{}: + +@example +\relative c' @{ % begin verbatim + c4 e2 g4 + f2 e % end verbatim +@} +@end example + +@noindent +donnera dans un bloc @emph{verbatim} précédant la partition@tie{}: + +@example + c4 e2 g4 + f2 e +@end example + +@noindent +Si d'aventure vous désirez traduire les commentaires et noms de +variable dans le rendu textuel plutôt que dans le fichier source, vous +devrez définir la variable d'environnement @code{LYDOC_LOCALEDIR} qui +pointera vers un répertoire contenant l'arborescence des catalogues de +messages -- fichiers d'extension @code{.mo} -- du domaine +@code{lilypond-doc}. + +@item addversion +Cette option, effective uniquement pour Texinfo, permet d'ajouter une +ligne @code{\version @@w@{"@@version@{@}"@}} au @code{verbatim}. + +@item texidoc +Option disponible uniquement pour Texinfo.@* +Dès lors qu'un fichier @file{toto.ly} contient dans sa section +@code{\header} la variable @code{texidoc}, l'appel de @command{lilypond} +avec l'option @option{--header=@/texidoc} créera le fichier +@file{toto.texidoc}. Par ailleurs, c'est le contenu de ce +@file{toto.texidoc} qui sera ensuite recopié par +@command{lilypond-book} en préambule de l'extrait de partition. + +Prenons par exemple le fichier @file{toto.ly} dont le contenu est + +@example +\header @{ + texidoc = "This file demonstrates a single note." +@} +@{ c'4 @} +@end example + +@noindent +et quelque part dans notre document Texinfo @file{test.texinfo} + +@example +@@lilypondfile[texidoc]@{toto.ly@} +@end example + +@noindent +La ligne de commande suivante produira le résultat escompté. + +@example +lilypond-book --pdf --process="lilypond \ + -dbackend=eps --header=texidoc" test.texinfo +@end example + +La plupart des fichiers de test contenus dans le répertoire @file{input} +de la distribution est constituée de la sorte. + +Cette option est fort utile dans le cadre de l'adaptation en langue +étrangère. En effet, s'il est spécifié dans le document Texinfo une +clause @code{@@documentlanguage@tie{}@var{LANGUE}}, la présence d'une +variable @code{texidoc@var{LANGUE}} dans l'entête du fichier +@file{foo.ly} entraînera la reproduction -- par l'appel +@code{lilypond}@tie{}@option{--header=@/texidoc@var{LANGUE}} -- du +contenu de @file{toto.texidoc@var{LANGUE}} en lieu et place de celui de +@file{toto.texidoc}. + +@item lilyquote +Option disponible uniquement pour Texinfo.@* +Cette option est équivalente à l'option @code{quote} à ceci près que +seule l'image de la partition -- ainsi que les éventuels blocs +@emph{verbatim} si vous la couplez à l'option @code{verbatim} -- fera +l'objet d'une citation. Cette option permet l'inclusion de la partition +en omettant les commentaires contenus dans le bloc @code{texidoc} du +fichier source. + +@item doctitle +Option disponible uniquement pour Texinfo.@* +Cette option fonctionne selon le même principe que l'option +@code{texidoc}@tie{}: lorsqu'un fichier @file{toto.ly} contient dans +son @code{\header} une variable @code{doctitle} et que @code{lilypond} +est appelé avec l'option @code{doctitle}, le contenu de cette variable +-- une simple ligne de @var{texte} -- sera recopié dans un fichier +@file{toto.doctitle} puis inséré dans le document Texinfo sous la +forme @code{@@lydoctitle@tie{}@var{texte}}. @code{@@lydoctitle} doit +faire l'objet d'une macro, définie dans le document Texinfo. + +Il en va de l'option @code{doctitle} comme de l'option @code{texidoc} en +matière d'adaptation en langue étrangère. + +@item nogettext +Option disponible uniquement pour Texinfo.@* +Commentaires et noms de variable ne seront pas traduits dans la recopie +textuelle du code. + +@item printfilename +Lorsqu'un fichier source LilyPond est inclus à l'aide de +@code{\lilypondfile}, le nom du fichier sera reproduit juste au dessus +de l'extrait. Si le résultat est un fichier HTML, il s'agira alors d'un +lien. Seul le nom du fichier est imprimé@tie{}; autrement dit, le +chemin d'accès au fichier est tronqué. + +@end table + + +@node Utilisation de lilypond-book +@section Utilisation de @command{lilypond-book} +@translationof Invoking lilypond-book + +@command{lilypond-book} produit un fichier qui aura, selon le format de +sortie spécifié, l'extension @file{.tex}, @file{.texi}, @file{.html} ou +@file{.xml}. Les fichiers @file{.tex}, @file{.texi} et @file{.xml} +nécessitent un traitement complémentaire. + + +@subheading Instructions spécifiques à certains formats +@translationof Format-specific instructions + + +@subsubheading @LaTeX{} +@translationof @LaTeX{} + +Un document @LaTeX{} destiné à l'impression ou à la publication peut se +traiter de deux manières différentes@tie{}: générer directement un PDF +à l'aide de PDF@LaTeX{}, ou bien générer un fichier avec @LaTeX{} +qui sera ensuite passé à un traducteur DVI-PostScript comme +@command{dvips}. La première façon est de loin la plus simple et c'est +celle que nous vous recommandons@footnote{Sachant que vous ne disposez +pas forcément de PDF@LaTeX{} et @LaTeX{} pour compiler un document +@LaTeX{}, nous vous présentons les deux méthodes.}@tie{}; quelque soit +votre préférence, sachez que vous pouvez aller du PostScript au PDF avec +des outils tels que @command{ps2pdf} et @command{pdf2ps} -- tous deux +inclus dans la distribution de Ghostscript. + +La production d'un PDF avec PDF@LaTeX{} se fait en lançant les commandes + +@example +lilypond-book --pdf monfichier.lytex +pdflatex monfichier.tex +@end example + +@cindex type1, polices +@cindex dvips +@cindex utilisation de dvips + +La séquence @LaTeX{}/@command{dvips}/@command{ps2pdf} suivante permet de +produire un PDF@tie{}: + +@example +lilypond-book monfichier.lytex +latex monfichier.tex +dvips -Ppdf monfichier.dvi +ps2pdf monfichier.ps +@end example + +@noindent +Le fichier @file{.dvi} généré lors de ce traitement ne contient aucune +tête de note, ce qui est tout à fait normal@tie{}; elles seront incluses +lors de la génération du @file{.ps} puis dans le @file{.pdf}. + +La commande @command{dvips} peut déclencher certains messages concernant +des fontes, que vous pouvez ignorer sans scrupule.@* +Si vous utilisez @command{latex} en mode colonnage, n'oubliez pas +d'ajouter @option{-t landscape} aux options de @command{dvips}. + + +@subsubheading Texinfo +@translationof Texinfo + +La génération d'un document Texinfo -- quel que soit le format final -- +s'obtient grâce aux commandes Texinfo habituelles, c'est à dire +@command{texi2pdf}, @command{texi2dvi} ou @command{makeinfo} selon le +résultat que vous désirez obtenir. +@ifinfo +@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, et @ref{Creating +an Info File, , , texinfo, GNU Texinfo}. +@end ifinfo +@ifnotinfo +Pour plus de détails, consultez la documentation de Texinfo. +@end ifnotinfo + + +@subheading Options en ligne de commande +@translationof Command line options + +@command{lilypond-book} accepte les options suivantes@tie{}: + +@table @code +@item -f @var{format} +@itemx --format=@var{format} +Spécifie le type de document à traiter@tie{}: @code{html}, @code{latex}, +@code{texi} (valeur par défaut) ou @code{docbook}. Lorsque cette +option n'est pas mentionnée, @command{lilypond-book} tente de déterminer +automatiquement le format -- voir @ref{Extensions de nom de fichier}. À +l'heure actuelle, @code{texi} est équivalant à @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{filtre} +@itemx --filter=@var{filtre} +Passe les extrait au travers de @var{filtre} avant de traiter le +fichier. Cette option permet de, par exemple, appliquer les mises à +jour de LilyPond aux extraits avant de traiter le fichier@tie{}: + +@example +lilypond-book --filter='convert-ly --from=2.0.0 -' mon-book.tely +@end example + +@item -h +@itemx --help +Affiche un bref résumé des options. + +@item -I @var{dir} +@itemx --include=@var{répertoire} +Ajoute @var{répertoire} au chemin des inclusions. Si des extraits ont +déjà été compilés dans l'un des répertoires inclus, +@command{lilypond-book} ne les rééecria pas dans le répertoire de +sortie@tie{}; il sera donc nécessaire, dans la suite du traitement par +@command{makeinfo} ou @command{latex}, de penser à utiliser cette même +option @code{-I @var{répertoire}}. + +@item -o @var{dir} +@itemx --output=@var{répertoire} +Regroupe les fichiers générés dans @var{répetoire}. +@command{lilypond-book} crée un certain nombre de fichiers à l'usage de +LilyPond. Afin d'éviter de polluer votre répertoire source, nous vous +conseillons d'utiliser l'option @option{--output}, puis de vous rendre +dans ce répertoire pour y lancer les commandes @command{latex} ou +@command{makeinfo}. + +@example +lilypond-book --output=out monfichier.lytex +cd out +@dots{} +@end example + +@itemx --skip-lily-check +Désactive la mise en échec en l'absence de sortie de lilypond.@* +Option utilisée pour la documentation au format Info sans images. + +@itemx --skip-png-check +Désactive la mise en échec en l'absence d'images PNG correspondant aux +fichiers EPS.@* +Option utilisée pour la documentation au format Info sans images. + +@itemx --lily-output-dir=@var{rép} +Écrit les fichiers lily-XXX dans @var{rép} et crée un lien vers le +répertoire spécifié par @code{--output}. Cette option permet +d'économiser du temps lors de la génération de documents qui se trouvent +dans différents répertoires et partagent un certain nombre d'extraits +identiques. + +@itemx --info-images-dir=@var{répertoire} +Formate la sortie Texinfo de telle sorte que Info cherche les images +de musique dans @var{répertoire}. + +@itemx --latex-program=@var{programme} +Utilise l'exécutable @command{programme} en lieu et place de +@command{latex}. C'est l'option que vous utiliserez si vous préférez +@command{xelatex} par exemple. + +@itemx --left-padding=@var{distance} +Décale les figures EPS de @var{distance} -- exprimée en milimètres (3 +par défaut). Cette option est utile lorsque les lignes de musique +débordent sur la marge droite. + +Rappelez-vous que la largeur d'un système dépend des élément contenus +dans sa marge gauche, tels que numéro de mesure et nom d'instrument. +Cette option permet de @qq{raccourcir} les lignes et de les décaler vers +la droite, de la distance donnée en argument. + +@item -P @var{commande} +@itemx --process=@var{commande} +Traite les extraits LilyPond avec @var{commande}. Par défaut, il s'agit +de @code{lilypond}.@* +Rappelez-vous que @code{lilypond-book} ne peut en même temps traiter +l'option @code{--filter} et l'option @code{--process}. + +@item --pdf +Crée des fichiers PDF pour les retraiter avec PDF@LaTeX{}. + +@itemx --use-source-file-names +Cette option permet d'affecter aux fichiers correspondant aux extraits +de musique le même nom que leur source. Elle n'est fonctionnelle que +dans le cas où la partition est incluse à l'aide de @code{lilypondfile}, +et que les répertoires mentionnés par les options @code{--output-dir} et +@code{--lily-output-dir} diffèrent. + +@item -V +@itemx --verbose +@command{lilypond-book} sait être volubile@tie{}! + +@item -v +@itemx --version +Affiche le numéro de version. +@end table + + +@knownissues + +@code{lilypond-book} ne sait pas interpréter la commande Texinfo +@code{@@pagesize}. Dans le même ordre d'idée, des commandes @LaTeX{} +modifiant les marges et longueur de ligne mentionnées après le préambule +seront ignorées. + +Lorsqu'une section LilyPond contient plusieurs @code{\score}, seul le +premier sera traité. + + +@node Extensions de nom de fichier +@section Extensions de nom de fichier +@translationof Filename extensions + +Vous pouvez affecter à votre fichier source n'importe quelle extension. +Nous vous recommandons cependant un certain nombre d'extensions selon le +format de sortie désiré. Une extension hors du commun vous obligera à +spécifier le format de sortie, alors que @code{lilpond-book} est en +mesure de déterminer le format de sortie en fonction de l'extension du +fichier source. + +@quotation +@multitable @columnfractions .2 .5 +@item @strong{extension} @tab @strong{format résultant} +@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 + +Lorsque le fichier source a la même extension que celle que +@code{lilypond-book} affectera au fichier résultant et que vous +lancez @code{lilypond-book} à partir du répertoire le contenant, vous +verrez assurément un message du type @qq{La sortie va écraser le fichier +d'entrée}. Aussi ne saurions-nous trop vous conseiller d'utiliser +l'option @code{--output}. + + +@node Modèles pour lilypond-book +@section Modèles pour lilypond-book +@translationof lilypond-book templates + +Voici quelques canevas dédiés à @code{lilypond-book}. Si vous ne savez +pas de quoi il retourne, lisez le chapitre @ref{lilypond-book}. + + +@subsection LaTeX +@translationof LaTeX + +Vous pouvez inclure des partitions LilyPond dans un document LaTeX. + +@example +\documentclass[]@{article@} + +\begin@{document@} + +Des bananes alitées sur du LaTeX. + +\begin@{lilypond@} +\relative c'' @{ + a4 b c d +@} +\end@{lilypond@} + +Encore des banalités LaTeX, puis quelques options entre crochets. + +\begin@{lilypond@}[fragment,relative=2,quote,staffsize=26,verbatim] +d4 c b a +\end@{lilypond@} +\end@{document@} +@end example + + +@subsection Texinfo +@translationof Texinfo + +Un document Texinfo est tout à fait capable de comporter des fragments +de partition LilyPond. Si vous ne le savez pas encore, sachez que +l'intégralité de ce manuel est rédigée en Texinfo. + +@example +\input texinfo @c -*-texinfo-*- +@@node Top +@@top + +Du verbiage en mode Texinfo + +@@lilypond +\relative c' @{ + a4 b c d +@} +@@end lilypond + +Toujours plus de texte Texinfo, puis des options entre crochets. + +@@lilypond[verbatim,fragment,ragged-right] +d4 c b a +@@end lilypond + +@@bye +@end example + + +@subsection html +@translationof html + +@example + + + + + +

+Un document pour lilypond-book peut absolument mélanger musique et +texte. Par exemple, + +\relative c'' @{ + a4 b c d +@} + +

+ +

+Pourquoi pas un peu plus de lilypond, avec des options pour changer : + + +a4 b c d + +

+ + + + + +@end example + + +@subsection xelatex +@translationof xelatex + +@verbatim +\documentclass{article} +\usepackage{ifxetex} +\ifxetex +%pour ce qui est de xetex +\usepackage{xunicode,fontspec,xltxtra} +\setmainfont[Numbers=OldStyle]{Times New Roman} +\setsansfont{Arial} +\else +%inutile en l'absence de pdftex +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{mathptmx}%Times +\usepackage{helvet}%Helvetica +\fi +%ici les paquetages que pdftex sait interpréter +\usepackage[ngerman,finnish,english]{babel} +\usepackage{graphicx} + +\begin{document} +\title{Un petit document avec LilyPond et xelatex} +\maketitle + +Les commandes habituelles de \textbf{fontes} sont fonctionnelles y +compris au fil du texte, étant donné qu'\textsf{elles sont prises en +charge par \LaTeX{} and XeteX.} Lorsque vous avez besoin de commandes +particulières du style \verb+\XeTeX+, pensez à les inclure dans un +environnement \verb+\ifxetex+. Vous pourrez ainsi utiliser la \ifxetex +commande \XeTeX{} \else commande XeTeX \fi qui, elle, n'est pas reconnue +par le \LaTeX traditionnel. + +Vous pouvez inclure des commandes LilyPond directement dans votre texte, +comme ici~: + +\begin{lilypond} +{a2 b c'8 c' c' c'} +\end{lilypond} + +\noindent +puis reprendre le fil de votre discours. + +Les fontes utilisées dans les extraits LilyPond devront être définies +au sein de l'extrait. Lisez le manuel d'ustilisation si vous ne +maîtrisez pas 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 Gestion de la table des matières +@section Gestion de la table des matières +@translationof Sharing the table of contents + +Les fonctions qui sint ici mentionnées sont incluses dans le paquetage +OrchestralLily, disponible sur + +@example +@url{http://repo.or.cz/w/orchestrallily.git} +@end example + +Certains utilisateurs privilégient la flexibilité dans la gestion du +texte@tie{}; ils génèrent la table des matières à partir de LilyPond et +la récupèrent dans @LaTeX{}. + + +@subsubheading Export de la table à partir de LilyPond +@translationof Exporting the ToC from LilyPond + +Nous partons du principe que LilyPond a généré un seul fichier +comportant tous les mouvement de la partition. + +@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 (_ "Impossible d'ouvrir le fichier ~a contenant les informations de TdM") outfilename)) + (close-output-port outfile))))) + +\paper @{ + #(define (page-post-process layout pages) (oly:create-toc-file layout pages)) +@} +@end smallexample + + +@subsubheading Import de la table dans LaTeX +@translationof Importing the ToC into LaTeX + +L'entête de votre fichier @LaTeX{} doit comporter les lignes + +@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@{nomdelapartition@} +@end smallexample + +@noindent +où @code{\includescore} est défini ainsi@tie{}: + +@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 Autres méthodes d'association texte-musique +@section Autres méthodes d'association texte-musique +@translationof Alternative methods of mixing text and music + +D'autres moyens de mélanger musique et texte sans recourir à +@command{lilypond-book} sont abordés au chapitre +@ref{Inclusion de partition LilyPond dans d'autres programmes}. + diff --git a/Documentation/fr/usage/running.itely b/Documentation/fr/usage/running.itely new file mode 100644 index 0000000000..17b7f4d5af --- /dev/null +++ b/Documentation/fr/usage/running.itely @@ -0,0 +1,890 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 79165c00e7aadfefb0748ff55b29a1927cb87acd + + 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" + +@c Translators: Jean-Charles Malahieude +@c Translation checkers: + +@node Exécution de LilyPond +@chapter Exécution de @command{lilypond} +@translationof Running lilyPond + +Ce chapitre passe en revue ce qui se passe lorsque vous lancez LilyPond. + +@menu +* Utilisation habituelle:: +* Utilisation en ligne de commande:: +* Messages d'erreur:: +* Quelques erreurs des plus courantes:: +@end menu + +@node Utilisation habituelle +@section Utilisation habituelle +@translationof Normal usage + +La plupart des utilisateurs de LilyPond le font au travers d'une +interface graphique (@emph{GUI} pour @emph{graphical user interface}). +Si vous ne l'avez pas encore parcouru, lisez le @rlearning{Tutoriel}. +Si vous utilisez un éditeur alternatif pour rédiger vos fichiers +LilyPond, référez-vous à la documentation de celui-ci. + + +@node Utilisation en ligne de commande +@section Utilisation en ligne de commande +@translationof Command-line usage + +Nous nous intéresserons ici aux spécificités de LilyPond employé en +ligne de commande. La ligne de commande permet de faire appel à +certaines options particulières. D'autre part, certains utilitaires +associés, tel que @code{midi2ly}, ne sont disponibles qu'en ligne de +commande. + +Par @qq{ligne de commande}, nous entendons l'interface de commande du +système. Les utilisateurs de Windows seront certainement plus familiers +des termes @qq{fenêtre DOS} ou @qq{invite de commande}. Quant aux +utilisateurs de MacOS@tie{}X, ils connaissent assurément les termes +@qq{console} et @qq{terminal}. Les paramétrages spécifiques au système +MacOS font l'objet d'un @rwebnamed{MacOS X,chapitre particulier}. + +Notre propos n'est pas ici d'expliquer ce qu'est l'interface de +commande pour un système informatique ni comment elle fonctionne. +Aussi, si vous ne savez de quoi il retourne, nous vous renvoyons aux +nombreuses documentations que vous pourrez trouver sur ce sujet. + + +@menu +* Lancement de lilypond:: +* Options en ligne de commande pour lilypond:: +* Variables d'environnement:: +* Exécution de LilyPond en mode protégé:: +@end menu + +@node Lancement de lilypond +@unnumberedsubsec Lancement de @command{lilypond} +@translationof Invoking lilypond + +L'exécutable @command{lilypond} en ligne de commande se lance +ainsi@tie{}: + +@example +lilypond [@var{option}]@dots{} @var{fichier}@dots{} +@end example + +Lorsque le fichier est fourni sans extension, LilyPond présume qu'il +s'agit de @file{.ly}. Pour interpréter directement l'entrée standard +(@emph{stdin}), fournissez un tiret (@code{-}) en lieu et place de +@var{fichier}. + +Le traitement de @file{monfichier.ly} produira @file{monfichier.ps} et +@file{monfichier.pdf}. Vous pouvez spécifier plusieurs fichiers à la +fois@tie{}; ils seront traités indépendamment les uns des +autres.@footnote{Le statut de GUILE n'étant pas réinitialisé après +traitement d'un fichier @file{.ly}, veillez à ne pas modifier les +réglages par défaut du système à partir d'assertions en Scheme.} + +Lorsque @file{monfichier.ly} contient plus d'une section @code{\book}, +les fichiers produits -- à partir du deuxième -- seront numérotés. Par +ailleurs, la valeur affectée à @code{output-suffix} sera insérée entre la +racine et le numéro. Par exemple, un fichier @var{racine} qui +contiendrait + +@example +#(define output-suffix "violon") +\score @{ @dots{} @} +#(define output-suffix "cello") +\score @{ @dots{} @} +@end example + +@noindent +fournira grâce à LilyPond @file{@var{racine}-violon.pdf} et +@file{@var{racine}-cello-1.pdf}. + + +@unnumberedsubsubsec Commandes standard de l'interpréteur +@translationof Standard shell commands + +Si votre interpréteur -- terminal, console, etc. -- prend en charge les +redirections, les commandes qui suivent vous permettront de +judicieusement rediriger les affichages de la console dans un +fichier@tie{}: + +@itemize + +@item +@code{lilypond fichier.ly 1>stdout.log} pour le verbiage normal + +@item +@code{lilypond fichier.ly 2>stderr.log} pour les messages d'erreur + +@item +@code{lilypond fichier.ly &>tous.log} pour garder une trace de tout ce +qui s'est passé + +@end itemize + +Consultez avant tout la documentation de votre interpréteur habituel +pour vérifier qu'il prend en charge ces options dans cette syntaxe. +Notez bien qu'il s'agit ici de commandes internes à l'interpréteur et +qui n'ont rien à voir avec LilyPond. + + +@node Options en ligne de commande pour lilypond +@unnumberedsubsec Options en ligne de commande pour @command{lilypond} +@translationof Command line options for lilypond + +@cindex lancement de @command{lilypond} +@cindex ligne de commande, options pour @command{lilypond} +@cindex options, ligne de commande +@cindex switches +@cindex commutateurs + +Voici les différentes options disponibles à la ligne de commande@tie{}: + +@table @code + +@item -e,--evaluate=@var{expr} +Évalue l'expression Scheme @var{expr} avant d'analyser tout fichier +@file{.ly}. Lorsque vous spécifiez l'option @code{-e} à plusieurs +reprises, l'évaluation sera faite en séquence. + +Dans la mesure où l'expression est évaluée par le module +@code{guile-user}, vous devrez, dès lors que @var{expr} utilise des +définitions, spécifier + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +en ligne de commande, et ajouter la ligne + +@example +#(use-modules (guile-user)) +@end example + +@noindent +en tête de votre fichier @file{.ly}. + + +@item -f,--format=@var{format} +Détermine le format à produire. Il peut s'agir de @code{ps}, @code{pdf} +ou @code{png}. + +Exemple : @code{lilypond -fpng @var{monfichier}.ly} + + +@item -d,--define-default=@var{var}=@var{val} +Affecte la valeur Scheme @var{val} à l'option interne @var{var} du +programme. En l'absence de @var{val}, le programme utilisera @var{#t}. +Préfixer @var{var} d'un @code{no-} vous permet de désactiver une option. +Ainsi, + +@cindex point and click, ligne de commande + +@example +-dno-point-and-click +@end example + +@noindent +revient au même que +@example +-dpoint-and-click='#f' +@end example + + +Voici quelques options des plus intéressantes. + +@cindex help, ligne de commande + +@table @samp +@item help +Lancer @code{lilypond -dhelp} affichera la liste de toutes les options +@code{-d} disponibles. + + +@cindex paper-size, ligne de commande + +@item paper-size +Détermine la taille par défaut du papier, par exemple +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Veillez à ne pas oublier d'encadrer la valeur par des guillemets +échappés ( @code{\"} ). +@c Match " in previous line to help context-sensitive editors + + +@cindex safe, ligne de commande + +@item safe +Ne pas avoir une confiance aveugle dans le code @file{.ly}. + +Lorsque LilyPond est accessible au travers d'un serveur web, il est +@strong{impératif} d'utiliser les options @code{--safe} ou +@code{--jail}. L'option @code{--safe} aura pour effet d'empêcher tout +code Scheme inclus de mettre en péril votre installation grâce à quelque +chose du style + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +L'option @code{-dsafe} forcera l'évaluation, au fil de l'eau et par un +module sécurisé, des expressions Scheme contenues dans le fichier +source. Ce module sécuritaire, dérivé du module GUILE @file{safe-r5rs}, +ajoute un certain nombre de fonctions -- listées dans +@file{scm/safe-lily.scm} -- à l'API de LilyPond. + +De plus, le mode @emph{safe} ne permet ni l'utilisation de directives +@code{\include} ni le recours aux obliques inversées (@emph{backslash}) +dans les chaînes @TeX{}. + +L'import de variables LilyPond dans du code Scheme n'est pas possible +en mode sécuritaire. + +L'option @code{-dsafe} @strong{ne détecte pas} l'utilisation abusive des +ressources. Il est donc possible que le programme finisse par rester +sans réponse si on lui envoie une boucle sans fin. C'est la raison pour +laquelle nous recommandons, lorsque LilyPond tourne sur un serveur +accessible au public, d'en limiter aussi bien les ressources processeur +que mémoire. + +Notez bien que l'utilisation du mode sécuritaire empêchera aussi la +compilation d'un certain nombre de fragments LilyPond. L'option +@code{--jail} est dans ce cas une excellente alternative en terme de +sécurité, même si elle requiert plus de temps à mettre en place. + + +@cindex format de sortie, définition + +@item backend +Détermine le format de sortie à utiliser par le moteur de traitement. +Les types de @code{format} reconnus sont +@table @code +@item ps +@cindex PostScript output + pour du PostScript. + +Les fichiers PostScript incluent les polices TTF, Type1 et OTF, et +aucune substitution ne sera opérée pour ces fontes. Si vous utilisez +des caractères orientaux, le fichier aura vite fait d'atteindre une +taille conséquente. + + +@item eps +@cindex Postscript encapsulé +@cindex EPS (Encapsulated PostScript) + pour du PostScript encapsulé. + +Chaque page (système) fera l'objet d'un fichier @file{EPS} particulier, +sans fontes, auquel sera associé un fichier @file{EPS} qui, lui, +contiendra toutes les pages (systèmes) et les fontes. + +Notez qu'il s'agit du mode que @command{lilypond-book} utilise par défaut. + +@item svg +@cindex SVG (Scalable Vector Graphics) + pour du SVG (@emph{Scalable Vector Graphics}). + +Cette option permet de créer un fichier SVG par page, sans incorporation +des fontes. Nous vous recommandons d'installer les fontes Century +Schoolbook comprises dans le paquetage LilyPond afin d'obtenir le +meilleur rendu possible. Sous UNIX, il suffit de les recopier, à partir +du répertoire @file{/usr/share/lilypond/VERSION/fonts/otf/}, dans +@file{~/.fonts/}. Les fichiers SVG alors générés devraient être +lisibles par votre éditeur SVG habituel. + +@item scm +@cindex Scheme dump + pour une recopie brute des commandes Scheme internes de formatage. + +@item null + permet de ne pas générer de partition imprimable. Cette option est + équivalente à @code{-dno-print-pages}. + +@end table + +Exemple : @code{lilypond -dbackend=svg @var{monfichier}.ly} + + +@item preview +@cindex preview, ligne de commande +Génère un fichier comprenant le titrage et le premier système. S'il +existe plusieurs sections @code{\bookpart}, ce fichier contiendra les +titrage et premier système de chacun des @code{\bookpart}. Cette +option fonctionne pour les moteurs de traitement @code{ps}, @code{eps} +et @code{svg}. + + +@item print-pages +Génère l'intégralité des pages de la partition. L'option +@code{-dno-print-pages} est particulièrement utile lorsqu'utilisée +conjointement avec l'option @code{-dpreview}. + +@end table + + + +@item -h,--help +Affiche un résumé des commandes. + + +@item -H,--header=@var{CHAMP} +Recopie le champ d'entête dans le fichier @file{RACINE.@var{CHAMP}}. + + +@item --include, -I=@var{répertoire} +@cindex recherche de fichier +@cindex search path + +Ajoute @var{répertoire} au chemin de recherche pour les inclusions. + +Vous pouvez mentionner plusieurs fois l'option @code{-I}, auquel cas le +la recherche commencera dans le premier répertoire inclus et, si le +fichier en question ne s'y trouve pas, les répertoires suivants seront +examinés l'un après l'autre. + + +@item -i,--init=@var{fichier} +Définit @var{fichier} (par défaut @file{init.ly}) en tant que fichier +d'initialisation. + + +@item -o,--output=@var{FICHIER} ou @var{RÉP} +@cindex répertoire de destination +@cindex fichier de destination + +Détermine le nom par défaut du fichier résultant à @var{FICHIER}@tie{}; +lorsque l'argument @var{RÉP} correspond à un répertoire déjà existant, +c'est là que les fichiers résultants seront déposés. Le suffixe adéquat +sera ajouté (p.ex. @file{.pdf} pour du pdf) dans tous les cas. + + +@cindex PostScript output + +@item --ps +Génère du PostScript. + + +@cindex Portable Network Graphics (PNG) output + +@item --png +Génère une image par page, au format PNG@tie{}; ceci sous-entend +l'utilisation de @code{--ps}. La résolution de l'image, en DPI, peut se +régler en ajoutant par exemple +@example +-dresolution=110 +@end example + + +@cindex Portable Document Format (PDF) output + +@item --pdf +Génère du PDF. Ceci sous-entend l'utilisation de @code{--ps}. + + +@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir} +Lance @command{lilypond} dans un environnement protégé. + +L'option @code{--jail} est une alternative qui offre plus de flexibilité +que l'option @code{--safe} lorsque LilyPond est installé sur un serveur +web ou traite des fichiers externes. + +L'option @code{--jail} va détourner la racine de @command{lilypond} sur +@code{jail} juste avant d'effectuer la compilation à proprement parler. +L'utilisateur et le groupe sont modifiés en conséquence, et le +répertoire en cours devient @code{dir}. Ces réglages assurent -- du +moins en théorie -- l'impossibilité de s'échapper de la cellule. Notez +cependant que, pour que l'option @code{--jail} soit fonctionnelle, +@code{lilypond} doit être lancé en tant qu'administrateur -- ce qui se +réalise aisément à l'aide de la commande @command{sudo}. + +La création d'un environnement sécurisé requiert quelques précautions +dans la mesure où LilyPond doit disposer de tout ce dont il a besoin +pour compiler le fichier source @strong{à l'intérieur de la cellule}. +L'ermitage, avant d'être viable, requiert donc les étapes +suivantes@tie{}: + +@table @asis +@item Création d'un système de fichiers indépendant +L'intérêt d'un système de fichiers dédié à LilyPond réside dans le fait +qu'on peut le brider à l'aide des options @code{noexec}, @code{nodev} et +@code{nosuid}. Il sera de fait impossible de lancer des exécutables ou +d'écrire sur un périphérique à partir de LilyPond. Si vous n'avez pas +l'intention de créer un tel système sur une partition séparée, vous +pouvez avoir recours à un pseudo-périphérique (@emph{loop device}) monté +à partir d'un simple fichier de taille raisonnable. D'autre part, le +recours à un système de fichiers indépendant permet de limiter l'espace +dévolu à LilyPond. + +@item Création d'un utilisateur spécifique +L'utilisation de LilyPond au sein de la cellule devrait être réservé à +un utilisateur aux droits restreints. Il faudra donc créer un +utilisateur et un groupe spécifiques -- disons @code{lily}/@code{lily} +-- qui n'aura accès en écriture qu'à un unique répertoire déterminé par +la valeur de @var{dir}. + +@item Agencement des lieux +LilyPond a besoin d'un certain nombre de fichiers pour pouvoir tourner +correctement. Ces fichiers devront donc tous se retrouver dans +l'environnement protégé, distribués selon la même arborescence que dans +le système d'origine. Ainsi l'intégralité de l'installation de LilyPond +(en principe @file{/usr/share/lilypond}) doit y être dupliquée. + +En cas de problème, lancer LilyPond en utilisant @code{strace} devrait +vous permettre de déterminer quels fichiers manquent à l'appel. + +@item Lancement de LilyPond +Dans un environnement protégé monté avec l'option @code{noexec}, il est +impossible de lancer un quelconque programme extérieur. LilyPond ne +saurait donc avoir recours à un moteur de traitement qui le mettrait +dans cette situation. Comme nous l'avons vu plus haut, LilyPond sera +lancé avec les privilèges de l'administrateur -- privilèges qu'il perdra +aussitôt --, ce qui peut nécessiter le recours à la commande +@code{sudo}. Il est par ailleurs judicieux de limiter le temps +processeur aloué à LilyPond -- grâce à @command{ulimit@tie{}-t} par +exemple -- ainsi que, si votre système le permet, la taille de la +mémoire. +@end table + + +@item -v,--version +Affiche le numéro de version. + + +@item -V,--verbose +Active le mode verbeux@tie{}: affichage de l'intégralité du chemin +d'accès de chaque fichier, et information des temps de traitement. + + +@item -w,--warranty +Affiche les informations de garantie appliquables à GNU LilyPond -- il +est livré @strong{SANS GARANTIE}@tie{}! +@end table + + +@node Variables d'environnement +@unnumberedsubsec Variables d'environnement +@translationof Environment variables + +@cindex LANG +@cindex LILYPOND_DATADIR + +@command{lilypond} reconnaît les variables d'environnement +suivantes@tie{}: +@table @code +@item LILYPOND_DATADIR +Cette variable spécifie le répertoire où seront recherchés par défaut +les différentes versions des messages ainsi qu'un certain nombre de +fichiers nécessaires au traitement. Il devrait contenir les +sous-répertoires @file{ly/}, @file{ps/}, @file{tex/}, etc. + +@item LANG +Cette variable détermine la langue dans laquelle seront émis les +messages. + +@item LILYPOND_GC_YIELD +Cette variable permet d'ajuster l'empreinte mémoire et le rendement de +la machine. Il s'agit en fait d'un pourcentage d'allocation de +mémoire@tie{}: lorsqu'il est élevé, le programme favorisera +l'utilisation de la mémoire@tie{}; une faible valeur consommera plus de +temps processeur. Par défaut, cette valeur est fixée à@tie{}@code{70}. + +@end table + + +@node Exécution de LilyPond en mode protégé +@unnumberedsubsec Exécution de LilyPond en mode protégé +@translationof LilyPond in chroot jail + +Paramétrer un serveur afin qu'il puisse faire fonctionner LilyPond en +mode protégé sur un pseudo-périphérique est une tâche sensible. Les +différentes étapes à suivre sont répertoriées ci-dessous. Les exemples +qu'elle comportent proviennent d'une distribution Linux Ubuntu et +nécessiteront l'utilisation de @code{sudo} autant que de besoin. + +@itemize + +@item Installation des paquetages nécessaires@tie{}: LilyPond, GhostScript et +ImageMagick. + +@item Création de l'utilisateur @code{lily}: + +@example +adduser lily +@end example + +@noindent +Ceci, par la même occasion, créera un groupe spécifique pour +l'utilisateur @code{lily} ainsi que son répertoire personnel +@code{/home/lily}. + +@item Création, dans le répertoire personnel de l'utilisateur +@code{lily}, d'un espace agissant en tant que système de fichiers@tie{}: + +@example +dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000 +@end example + +@noindent +Cette commande a créé un fichier de 200@tie{}MB utilisable par le +@qq{système protégé}. + +@item Création d'un pseudo-périphérique, génération d'un système de +fichiers et chargement de celui-ci, puis création d'un répertoire +accessible en écriture pour l'utilisateur @code{lily}@tie{}: + +@example +mkdir /mnt/lilyloop +losetup /dev/loop0 /home/lily/loopfile +mkfs -t ext3 /dev/loop0 200000 +mount -t ext3 /dev/loop0 /mnt/lilyloop +mkdir /mnt/lilyloop/lilyhome +chown lily /mnt/lilyloop/lilyhome +@end example + +@item Affectation, au niveau configuration du serveur, de +@code{/mnt/lilyloop} en tant que JAIL et @code{/lilyhome} en tant que +DIR. + +@item Création d'une arborescence, dans l'espace protégé, et recopie de +tous les fichiers nécessaires -- voir le script plus loin. + +Le recours à l'utilitaire @code{sed} permet de créer les commandes de +copie de tout ce qui est nécessaire à un exécutable@tie{}: + +@example +for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ + do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ + cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ + \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done +@end example + +@end itemize + +@subheading Exemple de script fonctionnel en 32-bit sur Ubuntu 8.04 + +@example +#!/bin/sh +## les réglages par défaut + +username=lily +home=/home +loopdevice=/dev/loop0 +jaildir=/mnt/lilyloop +# le préfixe (sans slash au début !) +lilyprefix=usr/local +# le répertoire du système où lilypond est installé +lilydir=/$lilyprefix/lilypond/ + +userhome=$home/$username +loopfile=$userhome/loopfile +adduser $username +dd if=/dev/zero of=$loopfile bs=1k count=200000 +mkdir $jaildir +losetup $loopdevice $loopfile +mkfs -t ext3 $loopdevice 200000 +mount -t ext3 $loopdevice $jaildir +mkdir $jaildir/lilyhome +chown $username $jaildir/lilyhome +cd $jaildir + +mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp +chmod a+w tmp + +cp -r -L $lilydir $lilyprefix +cp -L /bin/sh /bin/rm bin +cp -L /usr/bin/convert /usr/bin/gs usr/bin +cp -L /usr/share/fonts/truetype usr/share/fonts + +# la formule magique de recopie des biblothèques +for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ + "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ + \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ + 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ + | sed '/.*=>.*/d'; done | sh -s + +# les fichiers partagés pour ghostscript... + cp -L -r /usr/share/ghostscript usr/share +# les fichiers partagés pour ImageMagick + cp -L -r /usr/lib/ImageMagick* usr/lib + +### Partant du principe que test.ly est dans /mnt/lilyloop/lilyhome, +### on devrait pouvoir lancer : +### Attention : /$lilyprefix/bin/lilypond est un script qui +### définit LD_LIBRARY_PATH - c'est primordial + /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly +@end example + + +@node Messages d'erreur +@section Messages d'erreur +@translationof Error messages + +@cindex erreur, messages + +Différents messages d'erreur sont susceptibles d'apparaître au cours de +la compilation d'un fichier@tie{}: + +@table @emph + +@item Warning -- Avertissement +@cindex warning +@cindex avertissement +Ce type de message est émis lorsque LilyPond détecte quelque chose de +suspect. Si vous avez demandé quelque chose qui sort de l'ordinaire, +vous saurez probablement ce à quoi il est fait référence et ignorerez de +tels messages sans remord. Néanmoins, les messages d'avertissement +indiquent la plupart du temps une incohérence dans le fichier source. + +@item Error -- Erreur +@cindex error +LilyPond a détecté une erreur. L'étape en cours, qu'il s'agisse de +l'analyse, de l'interprétation des données ou bien du formatage, sera +menée à son terme, puis LilyPond s'arrêtera. + +@item Fatal error -- Erreur fatale +@cindex fatal error +LilyPond est confronté à une anomalie bloquante. Ceci ne se produit que +très rarement, et la plupart du temps en raison d'une installation +défectueuse des fontes. + +@item Scheme error -- Erreur Scheme +@cindex trace, Scheme +@cindex call trace +@cindex Scheme error +Les erreurs qui interviennent lors de l'exécution de code Scheme sont +gérées par l'interpréteur Scheme. L'utilisation du mode verbeux +(options @code{-V} ou @code{--verbose}) vous permettra de localiser +l'appel de fonction délictueux. + +@item Programming error -- Erreur de programmation +@cindex Programming error +@cindex Erreur de programmation +LilyPond est confronté à une incohérence interne. Ce type de message +est destiné à venir en aide aux développeurs et débogueurs. En règle +générale, vous pouvez tout simplement les ignorer. Parfois, il y en a +tant qu'ils masquent ce qui pourrait vous intéresser@dots{} + +@item Aborted (core dumped) -- Abandon +@cindex Aborted (core dumped) +Ce type de message indique que LilyPond a planté en raison d'une grave +erreur de programmation. La survenance d'un tel message est considérée +comme de la plus haute importance. Si vous y étiez confronté, +transmettez un rapport de bogue. +@end table + +@cindex errors, message format +Lorsque l'avertissement ou l'erreur est directement lié au fichier +source, le message est libellé sous la forme + +@example +@var{fichier}:@var{ligne}:@var{colonne}: @var{message} +@var{contenu de la ligne litigieuse} +@end example + +Un saut de ligne est placé dans la ligne de code, indiquant l'endroit +précis du problème, comme ici@tie{}: + +@example +test.ly:2:19: erreur: n'est pas une durée: 5 + @{ c'4 e' + 5 g' @} +@end example + +Notez que ces coordonnées constituent l'approximation au mieux par +LilyPond dans le code ayant déclenché l'avertissement ou l'erreur. En +règle générale, erreurs et avertissement surviennent lorsque LilyPond +rencontre quelque chose d'inattendu. Lorsque la ligne indiquée ne vous +semble pas comporter d'élément litigieux, remontez de quelques lignes +dans votre code. + +Vous trouverez d'autres informations sur les erreurs au chapitre +@ref{Quelques erreurs des plus courantes}. + + +@node Quelques erreurs des plus courantes +@section Quelques erreurs des plus courantes +@translationof Common errors + +Les conditions amenant aux erreurs qui suivent sont fréquentes, bien +qu'elles ne soient pas évidentes ni facilement localisables. Nous +espérons que ces explications vous aideront à les résoudre plus +facilement. + + +@menu +* La musique déborde de la page:: +* Apparition d'une portée supplémentaire:: +* Erreur renvoyant à ../ly/init.ly:: +* Message d'erreur Unbound variable %:: +* Message d'erreur FT_Get_Glyph_Name:: +* staff-affinities devraient aller en ordre décroissant:: +@end menu + +@node La musique déborde de la page +@unnumberedsubsec La musique déborde de la page +@translationof Music runs off the page + +Lorsque la musique s'épanche au delà de la marge droite ou bien semble +anormalement comprimée, la raison en est le plus souvent une note à la +durée erronée@tie{}; cela finit par provoquer le débordement de la +dernière note d'une mesure. Rien ne s'oppose à ce que la dernière note +d'une mesure ne s'arrête avant la barre de mesure@tie{}; on considère +simplement qu'elle se prolonge sur la mesure suivante. Des débordements +à répétition finissent par générer une musique comprimée ou qui sort de +la page, pour la simple et bonne raison que les sauts de ligne +automatiques ne peuvent intervenir qu'à la fin d'une mesure complète, +autrement dit lorsque toutes les notes sont terminées avant la fin de la +mesure. + +@warning{Une durée erronée peut empêcher les sauts de ligne, ce qui +conduit à une musique compressée, voire à un débordement de la page.} + +Une erreur de durée sera bien plus facilement localisable si vous +positionnez régulièrement des contrôles de barre de mesure -- voir +@ruser{Vérification des limites et numéros de mesure}. + +Si vous tenez absolument à enchainer de tels débordements, vous devrez +insérer des barres de mesure invisibles là où vous souhaitez positionner +un saut de ligne. Consultez le chapitre @ruser{Barres de mesure} pour +plus de détails. + + +@node Apparition d'une portée supplémentaire +@unnumberedsubsec Apparition d'une portée supplémentaire +@translationof An extra staff appears + +Lorsque les contextes ne sont pas créés explicitement par la commande +@code{\new}, ils le seront si la commande à exécuter n'est pas censée +s'appliquer au contexte en cours. Pour des partitions simples, le fait +que les contextes soient automatiquement créés rend bien des services, +et c'est d'ailleurs le cas pour la majorité des exemples contenus dans +les manuels de LilyPond. Cependant, la création implicite d'un contexte +peut aboutir à l'apparition d'une portée @qq{parasite}. On s'attend par +exemple, en lisant le code qui suit, à ce que toutes les têtes de notes +soient en rouge, alors que le résultat nous présente deux portées et que +les notes, placées sur la portée inférieure, restent en noir. + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +Étant donné qu'aucun contexte @code{Staff} n'existe lorsque la +dérogation est introduite, LilyPond le crée implicitement pour lui +appliquer la directive considérée. Survient alors la commande +@w{@code{\new Staff}} qui, à son tour, crée une nouvelle portée pour +contenir les notes qui suivent. Voici la syntaxe correcte pour obtenir +ces notes en rouge@tie{}: + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +Autre exemple : la présence d'une commande @code{\relative} à +l'intérieur d'une section @code{\repeat} génèrera obligatoirement une +portée intempestive. Cela tient au fait que la commande @code{\repeat} +va créer deux blocs @code{\relative} qui, chacun à leur tour, créeront +implicitement un bloc @code{Staff} assorti d'un bloc @code{Voice}. + +@lilypond[quote,verbatim] +\repeat unfold 2 \relative { c d e f } +@end lilypond + +La manière adéquate de procéder consiste à inverser les commandes +@code{\repeat} et @code{\relative}, comme ceci@tie{}: + +@lilypond[quote,verbatim] +\relative { + \repeat unfold 2 { c d e f } +} +@end lilypond + + +@node Erreur renvoyant à ../ly/init.ly +@unnumberedsubsec Erreur renvoyant à @code{../ly/init.ly} +@translationof Apparent error in ../ly/init.ly + +Certains messages d'erreur relatifs à une erreur de syntaxe dans le +fichier @file{../ly/init.ly} peuvent survenir lorsque le fichier est mal +formaté. Cela se produit notamment lors d'un défaut de parité de +bornages ou de guillemets. + +L'erreur la plus courante est la simple omission d'une accolade +fermante (@code{@}} à la fin du bloc @code{Score}. La solution est +évidente en pareil cas@tie{}: il suffit de vérifier que le bloc +@code{Score} est bien clôturé. La structure des fichiers LilyPond est +abordée plus en détails au chapitre +@rlearning{Organisation des fichiers LilyPond}. C'est la raison pour +laquelle nous vous invitons à utiliser un éditeur de texte qui prenne en +charge le contrôle de parité des parenthèses, crochets et accolades afin +de vous éviter de telles erreurs. + +Lorsqu'il s'agit d'un guillemet fermant (@code{"}) omis, le message +d'erreur devrait vous indiquer un numéro de ligne avoisinant. L'erreur +se situe la plupart du temps une ou deux lignes au-dessus de celle +indiquée. + + +@node Message d'erreur Unbound variable % +@unnumberedsubsec Message d'erreur « Unbound variable % » +@translationof Error message Unbound variable % + +Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de +fichier journal, est associé à un message du type @qq{GUILE a signalé +une erreur @dots{}}. Il survient à chaque fois qu'un commentaire +@emph{LilyPond} est indûment placé dans une routine @emph{Scheme}. + +Un commentaire LilyPond est introduit par le signe pourcent (@code{%}) +et ne doit en aucun cas se trouver dans une routine Scheme. En Scheme, +les commentaires s'introduisent par un point-virgule (@code{;}). + + +@node Message d'erreur FT_Get_Glyph_Name +@unnumberedsubsec Message d'erreur « FT_Get_Glyph_Name » +@translationof Error message FT_Get_Glyph_Name + +Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de +fichier journal, survient lorsqu'un fichier source contient des +caractères non ASCII et qu'il n'a pas été enregistré avec un encodage +UTF-8. Pour plus de détails, reportez-vous au chapitre +@ruser{Codage du texte}. + + +@node staff-affinities devraient aller en ordre décroissant +@unnumberedsubsec staff-affinities devraient aller en ordre décroissant +@translationof Warning staff affinities should only decrease + +Cet avertissement est émis lorsque la partition ne comporte pas de +portée, comme par exemple une feuille de chant avec un contexte +@code{ChordName} et un contexte @code{Lyrics}. Ce message disparaîtra +dès lors que autoriserez l'un de ces contextes à se comporter comme une +portée, à l'aide de l'instruction + +@example +\override VerticalAxisGroup #'staff-affinity = ##f +@end example + +@noindent +que vous insérerez dès sa création. Pouur plus d'information, +reportez-vous à la rubrique +@ruser{Espacement des lignes rattachées à des portées}. diff --git a/Documentation/fr/usage/suggestions.itely b/Documentation/fr/usage/suggestions.itely new file mode 100644 index 0000000000..11f6441b94 --- /dev/null +++ b/Documentation/fr/usage/suggestions.itely @@ -0,0 +1,641 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Ludovic Sardain, Jean-Charles Malahieude +@c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude + +@node Suggestions pour la saisie de fichiers LilyPond +@chapter Suggestions pour la saisie de fichiers +@translationof Suggestions for writing files + +Maintenant vous êtes prêt à travailler sur de plus gros fichiers +LilyPond -- des pièces entières, et plus seulement les petits +exemples du tutoriel. Mais comment devriez-vous vous y prendre@tie{}? + +Tant que LilyPond parvient à comprendre vos fichiers et produit le +résultat que vous souhaitez, peu importe la manière dont le code est +organisé. Néanmoins, quelques critères doivent être pris en compte +lorsque l'on écrit un fichier LilyPond. + +@itemize +@item +Si vous faites une erreur, la structure même du fichier LilyPond +peut permettre de la localiser plus ou moins facilement. + +@item +Et si vous souhaitez partager vos fichiers avec quelqu'un d'autre, ou si +vous souhaitez modifier vos propres fichiers dans quelques années@tie{}? +Si certains fichiers LilyPond sont compréhensibles au premier coup +d'œil, d'autres vous feront vous arracher les cheveux pendant une heure. + +@item +Et si vous souhaitez mettre à jour votre fichier pour l'utiliser avec +une version plus récente de LilyPond@tie{}? La syntaxe du +langage d'entrée change parfois lorsque LilyPond s'améliore. La +plupart des changements peuvent être appliqués automatiquement avec +@code{convert-ly}, mais quelques-uns peuvent requérir une intervention +manuelle. Vos fichiers LilyPond peuvent être structurés de manière à +faciliter leur mise à jour. +@end itemize + +@menu +* Suggestions générales:: +* Gravure de musique existante:: +* Projets d'envergure:: +* Résolution de problèmes:: +* De la commande make et des fichiers Makefile:: +@end menu + + +@node Suggestions générales +@section Suggestions générales +@translationof General suggestions + +Voici quelques conseils qui peuvent vous éviter certains problèmes ou +en résoudre d'autres. + +@itemize +@item @strong{Ajoutez le numéro de version dans chaque fichier}. +Notez que chaque fichier modèle contient une ligne +@code{\version@tie{}"@version{}"}. Nous vous conseillons fortement +d'inclure cette ligne, même pour de petits fichiers. Par expérience, il +est très difficile de se rappeler quelle version de LilyPond on +utilisait quelques années auparavant. L'utilitaire @command{convert-ly} +demande que vous spécifiiez la version de LilyPond vous utilisiez alors. + +@item @strong{Ajoutez des contrôles} +@rusernamed{Vérifications d'octave,d'octaviation} et +@rusernamed{Vérification des limites et numéros de mesure,de limite ou +numéro de mesure}. Si vous avez ajouté des contrôles de loin en loin, +et que vous faites une erreur, vous pourrez la retrouver plus +rapidement. @qq{De loin en loin}, qu'est-ce à dire@tie{}? Cela dépend +de la complexité de la musique. Pour de la musique très simple, +peut-être une ou deux fois. Pour de la musique très complexe, peut-être +à chaque mesure. + +@item @strong{Une mesure par ligne de texte}. +Si la musique en elle-même ou le résultat que vous désirez contient +quelque chose de compliqué, il est souvent bon de n'écrire qu'une seule +mesure par ligne. Économiser de la place en tassant huit mesures par +ligne, ça ne vaut pas vraiment le coup si l'on doit corriger vos +fichiers. + +@item @strong{Ajoutez des commentaires}. +Utilisez soit des numéros de mesure (assez souvent), soit des références +au contenu musical -- @qq{second thème des violons}, @qq{quatrième +variation}, etc. Vous pouvez ne pas avoir besoin des commentaires +lorsque vous écrivez une pièce pour la première fois, mais si vous +souhaitez y revenir deux ou trois ans plus tard pour changer quelque +chose, ou si vous donnez le fichier source à un ami, ce sera beaucoup +plus difficile de déterminer vos intentions ou la manière dont votre +fichier est structuré si vous n'y avez pas adjoint de commentaires. + +@item @strong{Indentez les accolades}. +Beaucoup de problèmes viennent d'un défaut de parité entre @code{@{} et +@code{@}}. + +@item @strong{Mentionnez les durées} +au début de chaque section ou variable. Si vous saisissez @code{c4 d e} +au début d'une phrase, vous vous épargnerez des problèmes si, plus tard, +vous modifiez votre musique. + +@item @strong{Séparez les affinages de mise en forme} +de la musique elle-même. Voyez +@rlearning{Économie de saisie grâce aux identificateurs et fonctions} et +@rlearning{Feuilles de style}. + +@end itemize + + +@node Gravure de musique existante +@section Gravure de musique existante +@translationof Typesetting existing music + +Si vous saisissez de la musique à partir d'une partition existante, +c'est-à-dire de la musique déjà écrite, + +@itemize + +@item +n'entrez qu'un seul système de la partition originale +à la fois -- avec toujours une seule mesure par ligne de texte --, +et vérifiez chaque système lorsqu'il est terminé. Vous pouvez +utiliser les commandes @code{showLastLength} et @code{showFirstLength} +pour accélérer la compilation -- voir +@ruser{Ignorer des passages de la partition}@tie{}; + +@item +définissez @code{mBreak = @{\break @}} et insérez @code{\mBreak} dans le +fichier d'entrée pour obtenir des sauts de ligne identiques à la +partition originale. Cela facilite la comparaison entre la partition +originale et la partition de LilyPond. Lorsque vous avez fini de relire +votre musique, vous pouvez définir @code{mBreak@tie{}=@tie{}@{@tie{}@}} +pour enlever tous ces sauts de ligne, et laisser LilyPond placer les +sauts de ligne selon son propre algorithme@tie{}; + +@item +encadrez les notes d'une partie pour instrument transpositeur dans un + +@example +\transpose c @var{tonalité-naturelle} @{...@} +@end example +(où @var{tonalité-naturelle} correspond à celle de l'instrument en +question) de telle sorte que la musique comprise dans cette variable se +retrouve en ut. Vous pourrez toujours transposer à l'inverse si besoin +lorsque vous ferez appel à cette variable. Des erreurs de transposition +seront moins susceptibles de se produire si la musique de toutes les +variables est dans la même et unique tonalité. + +De la même manière, prenez toujours le do comme note de départ ou +d'arrivée. Ceci aura pour simple conséquence que les autres tonalités +que vous utiliserez seront celles propres à chacun des instruments -- +sib pour une trompette en si bémol, ou lab pour une clarinette en la bémol. + +@end itemize + + +@node Projets d'envergure +@section Projets d'envergure +@translationof Large projects + +Lorsque l'on travaille sur un gros projet, il devient vital +de structurer clairement ses fichiers LilyPond. + +@itemize @bullet + +@item @strong{Utilisez un identificateur pour chaque voix}, +avec un minimum de structure dans la définition. La structure de la +section @code{\score} est la plus susceptible de changer, notamment +dans une nouvelle version de LilyPond, alors que la définition du +@code{violon} l'est beaucoup moins. + +@example +violin = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violin + @} + @} +@} +@end example + +@item @strong{Séparez les retouches} des définitions de musique. +Nous vous avons déjà invité à adopter une telle pratique, qui +par ailleurs devient vitale pour des projets d'importance. Nous +pouvons avoir besoin de changer la définition de +@code{fpuisp}, mais dans ce cas nous n'aurons besoin de le faire +qu'une seule fois, et nous pourrons encore éviter de +modifier quoi que ce soit à l'intérieur de la définition +du @code{violon}. + +@example +fpuisp = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fpuisp c'8. e16 +@} +@end example + +@end itemize + + +@node Résolution de problèmes +@section Résolution de problèmes +@translationof Troubleshooting + +Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas +compiler. Les messages que LilyPond affiche peuvent vous aider à +trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire +quelques recherches pour déterminer la source du problème. + +Pour ce faire, les outils les plus puissants sont le commentaire de +fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou +bloc de commentaire), indiqué par @code{%@{ ... %@}}. Si vous ne +pouvez localiser le problème, commencez par mettre en commentaire de +grandes parties de votre fichier source. Après avoir mis en +commentaire une section, essayez de compiler à nouveau. Si cela +fonctionne, c'est que le problème se situe dans cette partie du +fichier. Si cela ne fonctionne pas, continuez à mettre en commentaire +d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile. + +Dans un cas extrême, vous pourriez en arriver à + +@example +\score @{ + << + % \melodie + % \harmonie + % \basse + >> + \layout@{@} +@} +@end example + +@noindent +c'est-à-dire un fichier sans aucune musique. + +Si cela se produit, ne vous découragez pas. Décommentez un peu, la +partie de basse par exemple, et voyez si ça fonctionne. Si ce n'est pas +le cas, placez en commentaire toute la partie de basse, mais laissez +@code{\basse} décommenté dans le bloc @code{\score}. + +@example +basse = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +Maintenant commencez à décommenter petit à petit le partie de +@code{basse} jusqu'à ce que vous localisiez la ligne qui pose +problème. + +Une autre technique de débogage très utile est la construction +d'un @rwebnamed{Exemples minimaux,exemple minimaliste}. + + + + +@node De la commande make et des fichiers Makefile +@section De la commande @command{make} et des fichiers @code{Makefile} +@translationof Make and Makefiles + +@cindex makefiles +@cindex make + +La plupart des plates-formes sur lesquelles tourne LilyPond disposent +d'un logiciel appelé @code{make}. Ce logiciel va lire un fichier +spécial, nommé @code{Makefile}, qui contient tout ce qu'il +faut -- les dépendances entre certains fichiers, les instructions +successives à traiter par le système -- pour aboutir au fichier que +vous désirez obtenir. Il pourrait par exemple contenir tout ce qu'il +faut pour produire @file{ballade.pdf} et @file{ballade.midi} à partir de +@file{ballade.ly} en lançant LilyPond. + +La création d'un @code{Makefile} peut se révéler pertinente pour +certains projets, que ce soit par simple goût personnel ou bien par +respect de ceux qui pourront accéder à vos sources. Cette manière de +procéder est particulièrement indiquée lorsque vous travaillez sur un +projet de grande envergure impliquant de nombreuses inclusions de +fichiers et différentes éditions -- par exemple un conducteur et un +matériel d'orchestre complet avec la partition pour le chef et une +partition séparée pour chacun des pupitres -- ou bien si votre projet +requiert certaines commandes particulières comme @code{lilypond-book}. +Les @emph{Makefiles} varient tant en complexité qu'en flexibilité selon +les besoin et les aptitudes de celui qui les crée. Le programme GNU Make +est installé par défaut sur les distributions Linux et sur MacOS@tie{}X, +et il en existe une version pour les environnements Windows. + +Consultez le @strong{GNU Make Manual} pour plus de détails sur ce dont +@code{make} est capable -- vous pourrez même en trouver des versions +françaises à l'aide des moteurs de recherche --, dans la mesure où ce +qui suit ne donne qu'un bref apperçu de ses possibilités. + +Les commandes permettant de définir les règles diffèrent selon la +plate-forme@tie{}: si les différents Linux et MacOS@tie{}X utilisent +@code{bash}, Windows utilise @code{cmd}. Dans le cas de MacOS@tie{}X, +vous devrez toutefois configurer votre système de telle sorte qu'il +utilise l'interpréteur en ligne de commande. Voici quelques exemples de +fichier @emph{Makefile}, avec une version pour Linux ou MacOS et une +pour Windows. + +Pour commencer, une pièce à quatre mouvements pour orchestre et dont les +fichiers sont répartis selon l'arborescence suivante@tie{}: + +@example +Symphonie/ +|-- MIDI/ +|-- Makefile +|-- Notes/ +| |-- alto.ily +| |-- cor.ily +| |-- cello.ily +| |-- figures.ily +| |-- hautbois.ily +| |-- trioCordes.ily +| |-- violonOne.ily +| `-- violonTwo.ily +|-- Partitions/ +| |-- symphonie.ly +| |-- symphonieI.ly +| |-- symphonieII.ly +| |-- symphonieIII.ly +| `-- symphonieIV.ly +|-- PDF/ +|-- Pupitres/ +| |-- symphon-alto.ly +| |-- symphonie-cello.ly +| |-- symphonie-cor.ly +| |-- symphonie-hautbois.ly +| |-- symphonie-violonUn.ly +| `-- symphonie-violonDeux.ly +`-- symphonieDefs.ily +@end example + +Les fichiers @file{.ly} des répertoires @code{Partitions} et +@code{Pupitres} récupèreront la notation des fichiers @file{.ily} +contenus dans le répertoire @code{Notes}@tie{}: + +@example +%%% début du fichier "symphone-cello.ly" +\include ../symphonieDefs.ily +\include ../Notes/cello.ily +@end example + +Le @emph{Makefile} répertorie des cibles correspondant à @code{score} +(l'intégrale au format conducteur), @code{mouvements} (chacun des +mouvements au format conducteur) et @code{pupitres} (une partition par +pupitre). Il contient aussi une cible @code{archive} chargée de générer +une archive des fichiers source qui pourra être diffusée sur la toile ou +transmise par courriel. Voici ce que contiendrait ce @emph{Makefile} +pour Linux ou MacOS@tie{}X. Ce fichier doit être enregistré sous le nom +de @code{Makefile} à la racine du projet -- ici @code{Symphonie}. + +@warning{Lorsque vous définissez une cible ou une règle sur plusieurs +lignes, les lignes à partir de la deuxième @strong{doivent} débuter par +une tabulation, non pas par des espaces.} + +@example +# Le préfixe au nom des fichiers résultants +piece = symphonie +# Détermination du nombre de processeurs +CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` +# La commande d'appel à lilypond +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click -djob-count=$(CPU_CORES) + +# Les suffixes utilisés dans ce Makefile +.SUFFIXES: .ly .ily .pdf .midi + +# Les fichiers sources et résultants sont recherchés dans les répertoires +# listés dans la variable VPATH. Ceux-ci sont tous des sous-répertoires +# du répertoire courant (fourni par la variable de GNU make `CURDIR'). +VPATH = \ + $(CURDIR)/Partitions \ + $(CURDIR)/PDF \ + $(CURDIR)/Pupitres \ + $(CURDIR)/Notes + +# La règle type pour créer un PDF et un MIDI à partir d'un fichier +# source LY. +# Les .pdf résultants iront dans le sous-répertoire "PDF" et les fichiers +# .midi dans le sous-répertoire "MIDI". +%.pdf %.midi: %.ly + $(LILY_CMD) $<; \ # cette ligne commence par une tabulation + if test -f "$*.pdf"; then \ + mv "$*.pdf" PDF/; \ + fi; \ + if test -f "$*.midi"; then \ + mv "$*.midi" MIDI/; \ + fi + +notes = \ + alto.ily \ + cello.ily \ + cor.ily \ + hautbois.ily \ + violonUn.ily \ + violonDeux.ily + +# Les dépendances selon le mouvement. +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +# Les dépendances pour la partition intégrale. +$(piece).pdf: $(piece).ly $(notes) + +# Les dépendances pour les pupitres. +$(piece)-alto.pdf: $(piece)-alto.ly alto.ily +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-cor.pdf: $(piece)-cor.ly cor.ily +$(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily +$(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily +$(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily + +# Lancer `make score' pour générer l'intégrale des quatre mouvements en +# un seul fichier. +.PHONY: score +score: $(piece).pdf + +# Lancer `make parties' pour obtenir tous les pupitres. +# Lancer `make toto.pdf' pour obtenir la partie instrumentale de toto. +# Par exemple : `make symphonie-cello.pdf'. +.PHONY: parties +parties: $(piece)-cello.pdf \ + $(piece)-violonUn.pdf \ + $(piece)-violonDeux.pdf \ + $(piece)-alto.pdf \ + $(piece)-hautbois.pdf \ + $(piece)-cor.pdf + +# Lancer `make mouvements' pour générer un fichier séparé pour chacun +# des mouvements. +.PHONY: mouvements +mouvements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parties mouvements + +archive: + tar -cvvf symphonie.tar \ # cette ligne commence par une tabulation + --exclude=*pdf --exclude=*~ \ + --exclude=*midi --exclude=*.tar \ + ../Symphonie/* +@end example + + +Les choses se compliquent sous Windows. Une fois GNU Make pour Windows +téléchargé et installé, il vous faudra correctement définir le chemin +d'accès au programme @emph{Make} -- dans les variables d'environnement +du système -- afin que l'interpréteur de commandes DOS puisse le +localiser. Pour cela, faites un clic droite sur @qq{Poste de travail}, +choisissez @code{Propriétés} puis @code{Avancées}. Cliquez sur +@code{Variables d'environnement} puis, dans l'onglet +@code{Variables@tie{}système}, mettez @code{path} en surbrillance et +cliquez sur @code{Modifier}. Ajoutez alors le chemin d'accès complet à +l'exécutable de GNU Make, qui devrait ressembler à@tie{}: + +@example +C:\Program Files\GnuWin32\bin +@end example + +Il va également falloir adapter le @emph{makefile} aux particularités de +l'interpréteur de commandes et à la présence d'espaces dans le nom de +certains répertoire de ce système. +La cible @code{archive} est tout bonnement supprimée, puisque Windows ne +dispose pas de la commande @code{tar}. Enfin, les fichiers MIDI ont une +extension par défaut propre à Windows. + + +@example +## VERSION POUR WINDOWS +## +piece = symphonie +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click \ + -djob-count=$(NUMBER_OF_PROCESSORS) + +#get the 8.3 name of CURDIR (workaround for spaces in PATH) +workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ + do @@echo %%~sb) + +.SUFFIXES: .ly .ily .pdf .mid + +VPATH = \ + $(workdir)/Partitions \ + $(workdir)/PDF \ + $(workdir)/Pupitress \ + $(workdir)/Notes + +%.pdf %.mid: %.ly + $(LILY_CMD) $< # cette ligne commence par une tabulation + if exist "$*.pdf" move /Y "$*.pdf" PDF/ # tabulation au début + if exist "$*.mid" move /Y "$*.mid" MIDI/ # tabulation au début + +notes = \ + cello.ily \ + figures.ily \ + cor.ily \ + hautbois.ily \ + trioCordes.ily \ + alto.ily \ + violonUn.ily \ + violonDeux.ily + +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +$(piece).pdf: $(piece).ly $(notes) + +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-cor.pdf: $(piece)-cor.ly cor.ily +$(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily +$(piece)-alto.pdf: $(piece)-alto.ly alto.ily +$(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily +$(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily + +.PHONY: score +score: $(piece).pdf + +.PHONY: parties +parties: $(piece)-cello.pdf \ + $(piece)-violonUn.pdf \ + $(piece)-violonDeux.pdf \ + $(piece)-alto.pdf \ + $(piece)-hautbois.pdf \ + $(piece)-cor.pdf + +.PHONY: mouvements +mouvements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parties mouvements +@end example + + +Le @emph{Makefile} suivant convient pour un document +@command{lilypond-book} réalisé avec @LaTeX{}. Ce projet contiendra un +index, ce qui nécessitera de lancer une deuxième fois @command{latex} +pour mettre à jour les liens. Les fichiers résultants iront dans le +répertoire @code{out} pour ce qui est des .pdf et dans le répertoire +@code{htmlout} pour ce qui est du html. + +@example +SHELL=/bin/sh +FILE=monprojet +OUTDIR=out +WEBDIR=htmlout +VIEWER=acroread +BROWSER=firefox +LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex +LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex +PDF=cd $(OUTDIR) && pdflatex $(FILE) +HTML=cd $(WEBDIR) && latex2html $(FILE) +INDEX=cd $(OUTDIR) && makeindex $(FILE) +PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf & + +all: pdf web keep + +pdf: + $(LILYBOOK_PDF) # tabulation en début de ligne + $(PDF) # tabulation en début de ligne + $(INDEX) # tabulation en début de ligne + $(PDF) # tabulation en début de ligne + $(PREVIEW) # tabulation en début de ligne + +web: + $(LILYBOOK_HTML) # tabulation en début de ligne + $(HTML) # tabulation en début de ligne + cp -R $(WEBDIR)/$(FILE)/ ./ # tabulation en début de ligne + $(BROWSER) $(FILE)/$(FILE).html & # tabulation en début de ligne + +keep: pdf + cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # tabulation en début de ligne + +clean: + rm -rf $(OUTDIR) # tabulation en début de ligne + +web-clean: + rm -rf $(WEBDIR) # tabulation en début de ligne + +archive: + tar -cvvf monprojet.tar \ # tabulation en début de ligne + --exclude=out/* \ + --exclude=htmlout/* \ + --exclude=monprojet/* \ + --exclude=*midi \ + --exclude=*pdf \ + --exclude=*~ \ + ../MonProjet/* +@end example + +AVENIR: faire que ça marche sous Windows + +Ce @emph{makefile} n'est malheureusement pas opérationnel sous Windows. +La seule alternative qui s'offre aux utilisateurs de Windows consiste à +créer un fichier de traitement par lot (@code{.bat}) qui contienne les +différentes commandes successives. Bien que cette manière de procéder +ne tienne aucun compte des dépendances entre fichiers, elle permet de +réduire le nombre de processus à lancer dans une seule commande. Vous +devrez enregistrer les lignes suivantes dans un fichier +@code{construire.bat} ou @code{construire.cmd}. Ce fichier pourra être +exécuté soit en ligne de commande, soit par un double clic sur son +icone. + +@example +lilypond-book --output=out --pdf monprojet.lytex +cd out +pdflatex monprojet +makeindex monprojet +pdflatex monprojet +cd .. +copy out\monprojet.pdf MonProjet.pdf +@end example + + +@seealso +Manuel d'utilisation : +@ref{Utilisation en ligne de commande}, +@ref{lilypond-book} diff --git a/Documentation/fr/usage/updating.itely b/Documentation/fr/usage/updating.itely new file mode 100644 index 0000000000..0a34fa8f0d --- /dev/null +++ b/Documentation/fr/usage/updating.itely @@ -0,0 +1,280 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- + +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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" + +@c Translators: Jean-Charles Malahieude +@c Translation checkers: + +@node Mise à jour avec convert-ly +@chapter Mise à jour avec @command{convert-ly} +@translationof Updating files with convert-ly + +@cindex mise à jour de fichiers LilyPond +@cindex convert-ly + +La syntaxe des fichiers LilyPond évolue avec le temps, que ce soit dans +le but de la simplifier ou pour l'améliorer. Il en résulte que +l'interpréteur de LilyPond se retrouve incapable de traîter d'anciens +fichiers. L'utilitaire @command{convert-ly} permet cependant de +mettre ces fichiers en conformité au fur et à mesure que de nouvelles +versions de LilyPond sont disponibles. + +@menu +* LilyPond une langue vivante:: +* Exécution de convert-ly:: +* Options en ligne de commande pour convert-ly:: +* Problèmes d'exécution de convert-ly:: +* Conversions manuelles:: +@end menu + + +@node LilyPond une langue vivante +@section LilyPond, une langue vivante +@translationof Why does the syntax change? + +@cindex convert-ly +@cindex mise à jour d'anciens fichiers + +La syntaxe de LilyPond change de temps en temps. Ces changements de +syntaxe -- le langage d'entrée -- accompagnent les améliorations du +logiciel. Ces changements sont parfois destinés à rendre les fichiers +plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles +fonctionnalités. + +Par exemple, tous les noms des propriétés de @code{\paper} et +@code{\layout} devaient étre étaient libellées sous la forme +@code{@w{premier-deuxième-troisième}}. Nous avons constaté, une fois la +version 2.11.60 mise à disposition, que la propriété +@code{printallheaders} ne respectait pas cette convention. Aurions-nous +du la laisser telle que, au risque de dérouter les nouveaux utilisateurs +par cette exception de formatage, ou bien la modifier -- ce qui allait +obliger ceux qui l'avaient déjà utilisée à se mettre en chasse@tie{}? +Pour ce cas d'espèce, nous avons décidé de changer pour +@code{print-all-headers}. Cette modification peut heureusement être +automatisée par notre utilitaire @command{convert-ly}. + +Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les +modifications. Par exemple, dans les versions 2.4 et antérieures de +LilyPond, les accents et les lettres non anglaises étaient entrées en +utilisant LaTeX -- par exemple, @code{No\"el}. À partir de la +version@tie{}2.6, le caratère @code{ë} doit être entré directement dans +le fichier LilyPond comme caractère UTF-8. @code{convert-ly} ne peut +pas changer tous les caractères LaTeX en caractères UTF-8@tie{}; vous +devez mettre à jour vos vieux fichiers LilyPond manuellement. + + +@node Exécution de convert-ly +@section Exécution de @command{convert-ly} +@translationof Invoking convert-ly + +@command{convert-ly} utilise les mentions de @code{\version} -- que vous +n'avez sûrement pas oublié de porter dans vos fichiers -- pour +déterminer le numéro de l'ancienne version. Mettre à jour votre fichier +ne vous demande que de lancer + +@example +convert-ly -e monfichier.ly +@end example + +@noindent +dans le dossier où il se trouve. @file{monfichier.ly} sera mis à jour, +et vous aurez une copie de l'original@tie{}: @file{monfichier.ly~}. + +@warning{@command{convert-ly} effectuera les conversions jusqu'aux +modifications de syntaxe les plus récentes qu'il contient. C'est la +raison pour laquelle le numéro de @code{@bs{}version} modifié est la +plupart du temps inférieur au propre numéro de version de +@command{convert-ly}.} + +Vous pouvez convertir tous les fichiers d'un dossier en lançant + +@example +convert-ly -e *.ly +@end example + +Vous pouvez aussi affecter un autre nom au fichier mis à jour et +conserver votre fichier original en l'état@tie{}: + +@example +convert-ly monfichier.ly > monnouveaufichier.ly +@end example + +Le programme affichera les numéros de version correspondant aux +différentes conversions effectuées. Si aucun numéro de version +n'apparaît, considérez que le fichier ne comporte pas de syntaxe +obsolète. + +Les utilisateurs de MacOS@tie{}X disposent d'une entrée spécifique dans +le menu@tie{}: @code{Compile > Update syntax}. + +Si vous utilisez windows, ouvrez un interpréteur de commande en faisant +@code{Démarrer > Accessoires > Interpréteur de commmandes}. + + +@node Options en ligne de commande pour convert-ly +@section Options en ligne de commande pour @command{convert-ly} +@translationof Command line options for convert-ly + +L'utilitaire @command{convert-ly} se lance de la manière suivante@tie{}: + +@example +convert-ly [@var{option}]@dots{} @var{fichier}@dots{} +@end example + +Vous pouvez utiliser les options@tie{}: + +@table @code +@item -e,--edit +pour éditer directement le fichier d'origine. + +@item -f,--from=@var{from-patchlevel} +pour définir le numéro de version à partir duquel vous voulez effectuer +les conversions. Lorsque cette option n'est pas activée, +@command{convert-ly} tentera de le déterminer sur la foi de la mention +de @code{\version} contenue dans le fichier. Cette option s'utilise +sous la forme@tie{}: @code{--from=2.10.25} + +@item -n,--no-version +Normalement, @command{convert-ly} ajoutera une indication de +@code{\version} à votre fichier s'il n'en comporte pas. Cette option +permet de passer outre. + +@item -s, --show-rules +pour afficher les conversions applicables. + +@item --to=@var{to-patchlevel} +pour n'appliquer les conversions que jusqu'à une version déterminée. Il +s'agit par défaut de la dernière version disponible. Cette option +s'utilise sous la forme@tie{}: @code{--to=2.12.2} + + +@item -h, --help +visualiser l'aide et quitter. +@end table + +Lorsqu'il s'agit de fragments inclus dans un fichier texinfo, il +vous faudra lancer + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +Lorsque vous désirez savoir quels changements de syntaxe sont intervenus +entre deux versions de LilyPond, lancez + +@example +convert-ly --from=@var{ancienne} --to=@var{récente} -s +@end example + + +@node Problèmes d'exécution de convert-ly +@section Problèmes d'exécution de @code{convert-ly} +@translationof Problems running convert-ly + +Sous Windows, lorsque le nom du fichier original ou le chemin qui y mène +comporte des espaces, l'interpréteur de commande requiert qu'il soit +entouré de triples guillemets comme ci-dessous@tie{}: + +@example +convert-ly """D:/Mes Partitions/Ode.ly""" > "D:/Mes Partitions/nouveau Ode.ly" +@end example + +Lorsque la commande @command{convert-ly -e *.ly} échoue parce que +son expansion dépasse la taille maximale d'une ligne, vous pouvez lancer +@command{convert-ly} dans une boucle. L'exemple suivant permet, sous +Unix, de convertir tous les fichiers @file{.ly} d'un même +répertoire@tie{}: + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +Avec l'interpréteur de commandes de Windows, la syntaxe consacrée +est@tie{}: + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +Toutes les évolutions du langage ne sont pas forcément prises en charge. +@command{convert-ly} ne tolère qu'une seule option de sortie à la fois. +La mise à jour automatique du code Scheme inclus dans les fichiers +LilyPond est plus qu'hasardeuse@tie{}; atendez-vous à devoir mettre les +mains dans le cambouis. + + +@node Conversions manuelles +@section Conversions manuelles +@translationof Manual conversions + +En théorie, un programme tel que @command{convert-ly} devrait pouvoir +traîter n'importe quel changement de syntaxe. En effet, si un programme +informatique sait interpréter aussi bien une version que l'autre, un +autre programme informatique doit alors être capable de traduire un +fichier donné +@footnote{At least, this is possible in any LilyPond file which does not +contain scheme. If there is scheme in the file, then the LilyPond file +contains a Turing-complete language, and we run into problems with the +famous @qq{Halting Problem} in computer science.}. + +Le projet LilyPond ne dispose cependant que de ressources +limitées@tie{}: les conversions ne sont pas toutes automatisées. Voici +une liste de problèmes clairement identifiés@tie{}: + + +@verbatim +1.6->2.0: + Doesn't always convert figured bass correctly, specifically things like {< +>}. Mats' comment on working around this: + To be able to run convert-ly + on it, I first replaced all occurrences of '{<' to some dummy like '{#' + and similarly I replaced '>}' with '&}'. After the conversion, I could + then change back from '{ #' to '{ <' and from '& }' to '> }'. + Doesn't convert all text markup correctly. In the old markup syntax, + it was possible to group a number of markup commands together within +parentheses, e.g. + -#'((bold italic) "string") + This will incorrectly be converted into + -\markup{{\bold italic} "string"} + instead of the correct + -\markup{\bold \italic "string"} +2.0->2.2: + Doesn't handle \partcombine + Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple +stanzas. +2.0->2.4: + \magnify isn't changed to \fontsize. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag isn't changed. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number isn't changed. + - first-page-number no => print-first-page-number = ##f + Line breaks in header strings aren't converted. + - \\\\ as line break in \header strings => \markup \center-align < + "First Line" "Second Line" > + Crescendo and decrescendo terminators aren't converted. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly +converted. +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } should be converted to: + \markup{ \center-align {\line { ... }} } + but now, \line is missing. +2.4->2.6 + Special LaTeX characters such as $~$ in text are not converted to UTF8. +2.8 + \score{} must now begin with a music expression. Anything else + (particularly \header{}) must come after the music. +@end verbatim + + diff --git a/Documentation/fr/user/GNUmakefile b/Documentation/fr/user/GNUmakefile deleted file mode 100644 index a7defa6c44..0000000000 --- a/Documentation/fr/user/GNUmakefile +++ /dev/null @@ -1,4 +0,0 @@ -ISOLANG = fr -depth = ../../.. -LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-user -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/user/ancient.itely b/Documentation/fr/user/ancient.itely deleted file mode 100644 index bb89e3dfdb..0000000000 --- a/Documentation/fr/user/ancient.itely +++ /dev/null @@ -1,2138 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: bdf8540b74167817eab96ed3d13b35477217f9fe - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@c \version "2.12.0" - -@node Ancient notation -@section Ancient notation - -@menu -* Introduction to ancient notation:: -* Alternative note signs:: -* Additional note signs:: -* Pre-defined contexts:: -* Transcribing ancient music:: -* Editorial markings:: -@end menu - -@node Introduction to ancient notation -@subsection Introduction to ancient notation - - -@cindex Vaticana, Editio -@cindex Medicaea, Editio -@cindex hufnagel -@cindex Petrucci -@cindex mensural - -La gestion par LilyPond des formes de notation ancienne inclut des -fonctionnalités spécifiques à la notation mensurale et au chant -grégorien. La basse chiffrée est également partiellement prise en -charge. - -De nombreux objets graphiques --- @qq{grobs} dans le jargon de LilyPond ---- disposent d'une propriété @code{style}, comme nous le verrons dans -@itemize @bullet -@item -@ref{Ancient note heads}, -@item -@ref{Ancient accidentals}, -@item -@ref{Ancient rests}, -@item -@ref{Ancient clefs}, -@item -@ref{Ancient flags}, -@item -@ref{Ancient time signatures}. -@end itemize - -Manipuler cette propriété permet d'adapter l'aspect typographique des -grobs à une forme de notation particulière, ce qui évite la création de -nouveaux concepts de notation. - -En plus des signes d'articulation standards décrits à la section -@ref{Articulations and ornamentations}, la notation ancienne dispose de signes particuliers. - -@itemize @bullet -@item -@ref{Ancient articulations} -@end itemize - -D'autres aspects de la notation ancienne ne peuvent pas être gérés -aussi simplement qu'en jouant sur les propriétés d'un style appliqué à -un objet graphique ou en lui ajoutant des articulations. Certains -concepts sont spécifiques à la notation ancienne. - -@itemize @bullet -@item -@ref{Custodes}, -@item -@ref{Divisiones}, -@item -@ref{Ligatures}. -@end itemize - -Si tout cela vous dépasse et que vous désirez plonger dans le vif du -sujet sans trop vous préoccuper d'ajuster des contextes, consultez les -pages dédiées aux contextes prédéfinis. Ils vous permettront d'adapter -vos contextes de voix et de portée, et vous n'aurez plus qu'à saisir les -notes. - -@itemize @bullet -@item -@ref{Gregorian chant contexts}, -@item -@ref{Mensural contexts}. -@end itemize - -LilyPond gère partiellement la représentation de basses chiffrées, -typiques de l'époque baroque, mais également employées de nos jours en -harmonie et en analyse. - -@itemize @bullet -@item -@ref{Figured bass} -@end itemize - -Voici les points que nous allons aborder : - - -@menu -* Ancient notation supported:: -@end menu - -@node Ancient notation supported -@unnumberedsubsubsec Ancient notation supported - -@untranslated - - - -@node Alternative note signs -@subsection Alternative note signs - -@untranslated - - -@menu -* Ancient note heads:: -* Ancient accidentals:: -* Ancient rests:: -* Ancient clefs:: -* Ancient flags:: -* Ancient time signatures:: -@end menu - -@node Ancient note heads -@unnumberedsubsubsec Ancient note heads - -@cindex têtes de note, musique ancienne - -Pour de la musique ancienne, vous disposez de plusieurs styles de tête -de note, en plus du style par défaut @code{default}. Vous pouvez -affecter à la propriété @code{style} de l'objet @rinternals{NoteHead} -les valeurs @code{baroque}, @code{neomensural}, @code{mensural} ou -@code{petrucci}. En style @code{baroque}, la seule différence par -rapport au style @code{default} concerne la @code{\breve} qui sera -carrée et non pas ovoïde. Le style @code{neomensural} ajoute au -@code{baroque} le fait que les notes de durée inférieure ou égale à une -ronde sont en forme de losange, et les hampes centrées sur la tête. Ce -style est particulièrement adapté à la transcription de la musique -mesurée dans les incipits. Le style @code{mensural} permet de -reproduire les têtes de note telles qu'imprimées au XVIe siècle. Enfin, -le style @code{petrucci} imite des partitions historiques, bien -qu'il utilise de plus grosses têtes de note. - -L'exemple suivant illustre le style @code{neomensural}. - - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\override NoteHead #'style = #'neomensural -a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 -@end lilypond - -Si vous écrivez en notation grégorienne, le -@rinternals{Vaticana_ligature_engraver} se chargera de sélectionner -les têtes de note appropriées ; il est donc inutile de spécifier le -style à utiliser. Vous pouvez cependant spécifier par exemple le style -@code{vaticana_punctum} pour obtenir des neumes punctums. De même, -c'est le @rinternals{Mensural_ligature_engraver} qui se chargera des -ligatures mensurales. Consultez la section @ref{Ligatures} pour savoir -comment fonctionnent les graveurs de ligature. - - -@seealso -Pour un aperçu de toutes les possibilités, -consultez @ref{Note head styles}. - - - -@node Ancient accidentals -@unnumberedsubsubsec Ancient accidentals - -@cindex altérations - - -Pour utiliser les formes anciennes d'altération, utilisez la propriété -@code{glyph-name-alist} des objets graphiques @rinternals{Accidental} -et @rinternals{KeySignature}. - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "vaticana" - \line { " " \musicglyph #"accidentals.vaticana-1" - " " \musicglyph #"accidentals.vaticana0" } - } - \column { - "medicaea" - \line { " " \musicglyph #"accidentals.medicaea-1" } - } - \column { - "hufnagel" - \line { " " \musicglyph #"accidentals.hufnagel-1" } - } - \column { - "mensural" - \line { " " \musicglyph #"accidentals.mensural-1" - " " \musicglyph #"accidentals.mensural1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -Vous noterez que chacun de ces styles ne comporte pas toutes les -altérations. LilyPond changera de style s'il y a besoin d'une -altération indisponible dans le style utilisé. - -À l'instar des altérations accidentelles, le style d'armure est géré -par la propriété @code{glyph-name-alist} de l'objet -@rinternals{KeySignature}. - - -@seealso -Dans ce manuel : @ref{Pitches}, @ref{Accidentals}, et -@ref{Automatic accidentals}, pour les principes généraux d'utilisation -des altérations ; @ref{Key signature} pour les armures. - -Référence du programme : @rinternals{KeySignature}. - -Exemples : @rlsr{Ancient notation}. - - -@node Ancient rests -@unnumberedsubsubsec Ancient rests - -@cindex silences, musique ancienne - -La propriété @code{style} de l'objet @rinternals{Rest} permet -d'obtenir des silences de type ancien. Vous disposez des styles -@code{classical}, @code{neomensural} et @code{mensural}. Le style -@code{classical} ne se distingue du style @code{default} que par le -soupir (demi-soupir en miroir). Le style @code{neomensural} convient -tout à fait à l'incipit lors de la transcription de musique mensurale. -Le style @code{mensural}, enfin, imite la gravure des silences dans -certaines éditions du XVIe siècle. - -L'exemple suivant illustre le style @code{neomensural}. - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\override Rest #'style = #'neomensural -r\longa r\breve r1 r2 r4 r8 r16 -@end lilypond - -Les styles @code{mensural} et @code{neomensural} ne disposent pas des 8e -et 16e de soupir ; LilyPond utilise dans de tels cas le style par -défaut. Voici une liste des styles de silences disponibles. - -@lilypondfile[quote,verbatim,ragged-right]{rest-styles.ly} - -Les silences sont absents de la notation grégorienne ; par contre, cette -notation utilise des @ref{Divisiones}. - - -@seealso -Dans ce manuel : les principes généraux sur l'utilisation des silences -sont exposés dans @ref{Rests}. - - -@node Ancient clefs -@unnumberedsubsubsec Ancient clefs - -@cindex clefs -@cindex clés - -Avec LilyPond, de nombreuses clés sont disponibles, dont certaines sont -dédiées à la musique ancienne. - -Le tableau suivant présente les différentes clés anciennes que vous -pouvez sélectionner avec la commande @code{\clef}. Certaines de ces -clés utilisent le même glyphe, attaché à l'une ou l'autre des lignes -de la portée. Le chiffre porté en suffixe permet alors de les -différencier. Vous pouvez néanmoins forcer le positionnement du -glyphe sur une ligne, comme expliqué à la section @ref{Clef}. Dans la -colonne exemple, la note suivant la clé montre le do médium. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Description} -@tab -@b{Clé disponible} -@tab -@b{Exemple} - -@item -Clé d'ut, style mensural moderne -@tab -@code{neomensural-c1}, @code{neomensural-c2},@* -@code{neomensural-c3}, @code{neomensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "neomensural-c2" c -@end lilypond - -@item -Clé d'ut, style mensural Petrucci, positionnable sur différentes -lignes (clé d'ut seconde pour l'exemple) -@tab -@code{petrucci-c1}, @code{petrucci-c2},@* -@code{petrucci-c3}, @code{petrucci-c4},@* -@code{petrucci-c5} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Clé de fa, style mensural Petrucci -@tab -@code{petrucci-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Clé de sol, style mensural Petrucci -@tab -@code{petrucci-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-g" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Clé d'ut, style mensural historique -@tab -@code{mensural-c1}, @code{mensural-c2},@* -@code{mensural-c3}, @code{mensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Clé de fa, style mensural historique -@tab -@code{mensural-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Clé de sol, style mensural historique -@tab -@code{mensural-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-g" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -Clé d'ut, style Editio Vaticana -@tab -@code{vaticana-do1}, @code{vaticana-do2},@* -@code{vaticana-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-do2" - c -@end lilypond - -@item -Clé de fa, style Editio Vaticana -@tab -@code{vaticana-fa1}, @code{vaticana-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-fa2" - c -@end lilypond - -@item -Clé d'ut, style Editio Medicaea -@tab -@code{medicaea-do1}, @code{medicaea-do2},@* -@code{medicaea-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-do2" - c -@end lilypond - -@item -Clé de fa, style Editio Medicaea -@tab -@code{medicaea-fa1}, @code{medicaea-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-fa2" - c -@end lilypond - -@item -Clé d'ut, style historique Hufnagel -@tab -@code{hufnagel-do1}, @code{hufnagel-do2},@* -@code{hufnagel-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do2" - c -@end lilypond - -@item -Clé de fa, style historique Hufnagel -@tab -@code{hufnagel-fa1}, @code{hufnagel-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-fa2" - c -@end lilypond - -@item -Clé combinée ut/fa, style historique Hufnagel -@tab -@code{hufnagel-do-fa} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do-fa" - c -@end lilypond -@end multitable - - - -@emph{Moderne} signifie @qq{gravé comme dans les transcriptions -contemporaines de musique mesurée.} - -@emph{Petrucci} signifie @qq{inspiré des éditions réalisées par le -maître graveur Petrucci (1466-1539).} - -@emph{Historique} signifie @qq{gravé comme dans les éditions -historiques, manuscrites ou non, autres que celles de Petrucci.} - -@emph{Editio XXX} signifie @qq{gravé comme dans les ouvrages estampillés -Editio XXX.} - -Les clés d'ut de Petrucci avaient une hampe gauche différente selon -leur ligne de rattachement. - - -@seealso -Dans ce manuel : voir @ref{Clef}. - - -@knownissues - -La clé de sol mensurale est calquée sur celle de Petrucci. - - - -@node Ancient flags -@unnumberedsubsubsec Ancient flags - -@cindex crochets - -Le réglage de la propriété @code{flag-style} de l'objet hampe -(@rinternals{Stem}) donne accès aux crochets de style ancien. Les -seuls styles actuellement pris en charge sont @code{default} et -@code{mensural}. - -@lilypond[quote,fragment,ragged-right,verbatim] -\override Stem #'flag-style = #'mensural -\override Stem #'thickness = #1.0 -\override NoteHead #'style = #'mensural -\autoBeamOff -c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 -c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 -@end lilypond - -Notez que pour chaque crochet mensural, l'extrémité la plus proche de -la tête de note sera toujours attachée à une ligne de la portée. - -Il n'existe pas de crochet spécifique au style néo-mensural. Nous vous -conseillons donc, lorsque vous réalisez l'incipit d'une transcription, -d'utiliser le style par défaut. Les crochets n'existent pas en notation -grégorienne. - -@knownissues - -Les crochets anciens s'attachent aux hampes avec un léger décalage, -suite à des modifications intervenues au début de la série 2.3. - -L'alignement vertical des crochets par rapport aux lignes de la portée -sous-entend que les hampes se terminent toujours soit sur une ligne, -soit à l'exact milieu d'un interligne. Ceci n'est pas toujours -réalisable, surtout si vous faites appel à des fonctionnalités avancées -de présentation de la notation classique, qui, par définition, ne sont -pas prévues pour être appliquées à la notation mensurale. - - - -@node Ancient time signatures -@unnumberedsubsubsec Ancient time signatures - -@cindex métrique - -Les chiffrages de métrique mensurale sont partiellement pris en charge. -Les glyphes ne font que représenter des métriques particulières. En -d'autres termes, pour obtenir le glyphe correspondant à une métrique -mensurale particulière à l'aide de la commande @code{\time n/m}, vous -devez choisir la paire @code{(n,m)} parmi les valeurs suivantes : - -@lilypond[quote,ragged-right] -\layout { - indent = 0.0 - \context { - \Staff - \remove Staff_symbol_engraver - \remove Clef_engraver - \remove Time_signature_engraver - } -} -{ - \set Score.timing = ##f - \set Score.barAlways = ##t - s_\markup { "\\time 4/4" }^\markup { " " \musicglyph -#"timesig.neomensural44" } - s - s_\markup { "\\time 2/2" }^\markup { " " \musicglyph -#"timesig.neomensural22" } - s - s_\markup { "\\time 6/4" }^\markup { " " \musicglyph -#"timesig.neomensural64" } - s - s_\markup { "\\time 6/8" }^\markup { " " \musicglyph -#"timesig.neomensural68" } - \break - s_\markup { "\\time 3/2" }^\markup { " " \musicglyph -#"timesig.neomensural32" } - s - s_\markup { "\\time 3/4" }^\markup { " " \musicglyph -#"timesig.neomensural34" } - s - s_\markup { "\\time 9/4" }^\markup { " " \musicglyph -#"timesig.neomensural94" } - s - s_\markup { "\\time 9/8" }^\markup { " " \musicglyph -#"timesig.neomensural98" } - \break - s_\markup { "\\time 4/8" }^\markup { " " \musicglyph -#"timesig.neomensural48" } - s - s_\markup { "\\time 2/4" }^\markup { " " \musicglyph -#"timesig.neomensural24" } -} -@end lilypond - -La propriété @code{style} de l'objet @rinternals{TimeSignature} permet -d'accéder aux indicateurs de métrique anciens. Les styles -@code{neomensural} et @code{mensural} sont disponibles. Vous avez vu -ci-dessus le style @code{neomensural}, particulièrement utilisé pour -l'incipit des transcriptions. Le style @code{mensural} imite l'aspect -de certaines éditions du XVIe siècle. - -Voici les différences entre les styles : - -@lilypond[ragged-right,fragment,relative=1,quote] -{ - \textLengthOn - - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter default } - - \override Staff.TimeSignature #'style = #'numbered - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter numbered } - - \override Staff.TimeSignature #'style = #'mensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter mensural } - - \override Staff.TimeSignature #'style = #'neomensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter neomensural } - \override Staff.TimeSignature #'style = #'single-digit - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter single-digit } -} -@end lilypond - - -@seealso -Dans ce manuel : @ref{Time signature} expose les principes généraux sur -l'utilisation des indications de métrique. - - -@knownissues - -Les équivalences de durées de note ne sont pas modifiées par un -changement de métrique. Par exemple, l'équivalence 1 brève pour 3 -semi-brèves (tempus perfectum) doit s'effectuer à la main en entrant : - -@example -breveTP = #(ly:make-duration -1 0 3 2) -@dots{} -@{ c\breveTP f1 @} -@end example - -@noindent -Ce qui définira @code{breveTP} à 3/2 fois 2 = 3 fois une ronde. - -Le symbole @code{old6/8alt} --- symbole alternatif pour la métrique 6/8 ---- ne peut être utilisé grâce à une commande @code{\time}. Utilisez -plutôt un @code{\markup}. - - - -@node Additional note signs -@subsection Additional note signs - -@untranslated - - -@menu -* Ancient articulations:: -* Custodes:: -* Divisiones:: -* Ligatures:: -* White mensural ligatures:: -* Gregorian square neumes ligatures:: -@end menu - -@node Ancient articulations -@unnumberedsubsubsec Ancient articulations - -@cindex articulations - -En plus des signes d'articulation standards décrits à la section -@ref{Articulations and ornamentations}, LilyPond fournit des articulations pour la musique -ancienne. Elles sont spécifiquement destinées au style Editio Vaticana. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \override TextScript #'font-family = #'typewriter - \override TextScript #'font-shape = #'upright - \override Script #'padding = #-0.1 - a\ictus_"ictus" \break - a\circulus_"circulus" \break - a\semicirculus_"semicirculus" \break - a\accentus_"accentus" \break - \[ a_"episem" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] - } -} -@end lilypond - -@knownissues - -Certaines articulations sont verticalement trop proches de leurs têtes -de note. - -Le trait d'un episem n'est bien souvent pas apparent et, lorsqu'il -l'est, son extension à droite est trop longue. - - -@node Custodes -@unnumberedsubsubsec Custodes - -@cindex custos -@cindex custodes -@cindex guidon - -Un guidon --- @emph{custos}, pluriel @emph{custodes} en latin --- est un -symbole qui apparaît à la fin d'une portée. Il montre la hauteur de la -ou des premières notes de la portée suivante, donnant une indication -judicieuse à l'exécutant. - -Les guidons étaient couramment utilisés jusqu'au XVIIe siècle. De nos -jours, on les retrouve uniquement dans quelques formes particulières de -notation telles que les éditions contemporaines de chant grégorien comme -les @emph{editio vaticana}. Différents glyphes existent selon le style -de notation. - -L'impression de guidons s'obtient en affectant, dans un bloc -@code{\layout}, le @rinternals{Custos_engraver} au contexte -@code{Staff}, comme le montre l'exemple suivant. - -@example -\layout @{ - \context @{ - \Staff - \consists Custos_engraver - Custos \override #'style = #'mensural - @} -@} -@end example - -Le résultat ressemblera à - -@lilypond[quote,ragged-right] -\score { -{ - a'1 - \override Staff.Custos #'style = #'mensural - \break - g' -} -\layout { - \context { \Staff \consists Custos_engraver } - } -} -@end lilypond - -Le glyphe du guidon est déterminé par la propriété @code{style}. Les -styles disponibles sont @code{vaticana}, @code{medicaea}, -@code{hufnagel} et @code{mensural}. En voici un aperçu : - -@lilypond[quote,ragged-right,fragment] -\new Lyrics \lyricmode { - \markup { \column { - \typewriter "vaticana" - \line { " " \musicglyph #"custodes.vaticana.u0" } - } } - \markup { \column { - \typewriter "medicaea" - \line { " " \musicglyph #"custodes.medicaea.u0" } - }} - \markup { \column { - \typewriter "hufnagel" - \line { " " \musicglyph #"custodes.hufnagel.u0" } - }} - \markup { \column { - \typewriter "mensural" - \line { " " \musicglyph #"custodes.mensural.u0" } - }} -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{Custos}. - -Exemples : @rlsr{Ancient notation}. - - -@node Divisiones -@unnumberedsubsubsec Divisiones - -@cindex divisio -@cindex divisiones -@cindex finalis - -Une division --- @emph{divisio}, pluriel @emph{divisiones} en latin --- -est un symbole ajouté à la portée et utilisé en chant grégorien pour -séparer les phrases ou parties. @emph{Divisio minima}, @emph{divisio -maior} et @emph{divisio maxima} peuvent respectivement s'interpréter -comme une pauses courte, moyenne ou longue, à l'image des marques de -respiration --- cf. @ref{Breath marks}. Le signe @emph{finalis} n'est -pas uniquement une marque de fin de chant ; il sert aussi à indiquer la -fin de chaque partie dans une structure verset/répons. - -Les divisions sont disponibles après inclusion du fichier -@file{gregorian@/-init@/.ly}. Ce fichier définit les commandes -@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima} et -@code{\finalis}. Certaines éditions utilisent @emph{virgula} ou -@emph{caesura} en lieu et place de @emph{divisio minima} ; c'est -pourquoi @file{gregorian@/-init@/.ly} définit aussi @code{\virgula} et -@code{\caesura}. - -@lilypondfile[quote,ragged-right]{divisiones.ly} - - -@predefined -@funindex \virgula -@code{\virgula}, -@funindex \caesura -@code{\caesura}, -@funindex \divisioMinima -@code{\divisioMinima}, -@funindex \divisioMaior -@code{\divisioMaior}, -@funindex \divisioMaxima -@code{\divisioMaxima}, -@funindex \finalis -@code{\finalis}. -@endpredefined - - -@seealso -Dans ce manuel : @ref{Breath marks}. - -Référence du programme : @rinternals{BreathingSign}. - -@c FIXME: add breathing-signs.ly directly -Exemples : @rlsr{Winds}. - - -@node Ligatures -@unnumberedsubsubsec Ligatures - -@cindex Ligatures - -@c TODO: Should double check if I recalled things correctly when I wrote -@c down the following paragraph by heart. - -Une ligature est un symbole graphique qui représente un groupe d'au -moins deux notes. Les ligatures ont commencé à apparaître dans les -manuscrits de chant grégorien, pour indiquer des suites ascendantes ou -descendantes de notes. - -Les ligatures s'indiquent par une inclusion entre @code{\[} et -@code{\]}. Certains styles de ligature peuvent demander un complément -de syntaxe spécifique. Par défaut, le graveur -@rinternals{LigatureBracket} place un simple crochet au dessus de -la ligature : - -@lilypond[quote,ragged-right,verbatim] -\transpose c c' { - \[ g c a f d' \] - a g f - \[ e f a g \] -} -@end lilypond - -Selon le style de ligature désiré, il faut ajouter au contexte -@rinternals{Voice} le graveur de ligature approprié, comme nous le -verrons plus loin. Seules sont disponibles les ligatures mensurales -blanches, avec quelques limitations. - - -@knownissues - -La gestion de l'espacement spécifique aux ligatures n'est à ce jour -pas implémentée. En conséquence, les ligatures sont trop espacées les -unes des autres et les sauts de ligne mal ajustés. De plus, les -paroles ne s'alignent pas de manière satisfaisante en présence de ligatures. - -Les altérations ne pouvant être imprimées à l'intérieur d'une -ligature, il faut les rassembler et les imprimer juste avant. - -La syntaxe utilisée correspond à l'ancienne convention de préfixage -@code{\[ expr. musicale\]}. Pour des raisons d'uniformité, nous -opterons probablement pour le style en suffixe (postfix) @code{note\[ -... note\]}. -En attendant, vous pouvez inclure le fichier -@file{gregorian@/-init@/.ly}, qui fournit une fonction Scheme -@example -\ligature @var{expr. musicale} -@end example -qui produit le même résultat, et dont la pérennité est assurée. - - -* White mensural ligatures:: -* Gregorian square neumes ligatures:: -@node White mensural ligatures -@unnumberedsubsubsec White mensural ligatures - - -@cindex Ligatures mensurales -@cindex Ligatures mensurales blanches - -Les ligatures mensurales blanches sont prises en charge, avec des -limitations. - -La gravure des ligatures mensurales blanches s'obtient après avoir -ajouté le @rinternals{Mensural_ligature_engraver} et enlevé le -@rinternals{Ligature_bracket_engraver} dans le contexte -@rinternals{Voice}, comme ici : - -@example -\layout @{ - \context @{ - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - @} -@} -@end example - -Lorsque le code ci-dessus est employé, l'aspect d'une ligature mensurale -blanche est déterminé à partir des hauteurs et durées des notes qui la -composent. Bien que cela demande un temps d'adaptation au nouvel -utilisateur, cette méthode offre l'avantage que toute l'information -musicale incluse dans la ligature est connue en interne. Ceci est non -seulement important pour le rendu MIDI, mais aussi pour des questions de -transcription automatisée d'une ligature. - -Par exemple, - -@example -\set Score.timing = ##f -\set Score.defaultBarType = "empty" -\override NoteHead #'style = #'neomensural -\override Staff.TimeSignature #'style = #'neomensural -\clef "petrucci-g" -\[ c'\maxima g \] -\[ d\longa c\breve f e d \] -\[ c'\maxima d'\longa \] -\[ e'1 a g\breve \] -@end example -@lilypond[quote,ragged-right] -\score { - \transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] - } - \layout { - \context { - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - } -} -@end lilypond - -Si on ne remplace pas le @rinternals{Ligature_bracket_engraver} -par le @rinternals{Mensural_ligature_engraver}, on obtient - -@lilypond[quote,ragged-right] -\transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] -} -@end lilypond - -@knownissues - -L'espacement horizontal n'est pas des meilleurs. - - - - -@node Gregorian square neumes ligatures -@unnumberedsubsubsec Gregorian square neumes ligatures - -@cindex neumes carrés et ligatures -@cindex grégorien, ligatures de neumes carrés - -Les neumes grégoriens conformément au style des Editio Vaticana sont -pris en charge de façon assez limitée. Les ligatures élémentaires sont -déjà disponibles, mais beaucoup de règles typographiques ne sont pas -encore implémentées, notamment l'espacement horizontal des enchaînements -de ligatures, l'alignement des paroles ou une gestion convenable des -altérations. - -Le tableau ci-dessous inventorie les différents neumes contenus dans -le second tome de l'Antiphonale Romanum (@emph{Liber Hymnarius}) publié -par l'abbaye de Solesmes en 1983. - -@multitable @columnfractions .4 .2 .2 .2 - -@item -@b{Neuma aut@* -Neumarum Elementa} -@tab -@b{Figurae@* -Rectae} -@tab -@b{Figurae@* -Liquescentes@* -Auctae} -@tab -@b{Figurae@* -Liquescentes@* -Deminutae} - -@c TODO: \layout block is identical in all of the below examples. -@c Therefore, it should somehow be included rather than duplicated all -@c the time. --jr - -@c why not make identifiers in ly/engraver-init.ly? --hwn - -@c Because it's just used to typeset plain notes without -@c a staff for demonstration purposes rather than something -@c special of Gregorian chant notation. --jr - -@item -@code{1. Punctum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ b \] - \noBreak s^\markup {"a"} \noBreak - - % Punctum Inclinatum - \[ \inclinatum b \] - \noBreak s^\markup {"b"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Ascendens - \[ \auctum \ascendens b \] - \noBreak s^\markup {"c"} \noBreak - - % Punctum Auctum Descendens - \[ \auctum \descendens b \] - \noBreak s^\markup {"d"} \noBreak - - % Punctum Inclinatum Auctum - \[ \inclinatum \auctum b \] - \noBreak s^\markup {"e"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Parvum - \[ \inclinatum \deminutum b \] - \noBreak s^\markup {"f"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{2. Virga} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Virga - \[ \virga b \] - \noBreak s^\markup {"g"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@tab - -@item -@code{3. Apostropha vel Stropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha - \[ \stropha b \] - \noBreak s^\markup {"h"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha Aucta - \[ \stropha \auctum b \] - \noBreak s^\markup {"i"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{4. Oriscus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Oriscus - \[ \oriscus b \] - \noBreak s^\markup {"j"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@tab - -@item -@code{5. Clivis vel Flexa} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis vel Flexa - \[ b \flexa g \] - s^\markup {"k"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Descendens - \[ b \flexa \auctum \descendens g \] - \noBreak s^\markup {"l"} \noBreak - - % Clivis Aucta Ascendens - \[ b \flexa \auctum \ascendens g \] - \noBreak s^\markup {"m"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Cephalicus - \[ b \flexa \deminutum g \] - s^\markup {"n"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{6. Podatus vel Pes} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Podatus vel Pes - \[ g \pes b \] - s^\markup {"o"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens - \[ g \pes \auctum \descendens b \] - \noBreak s^\markup {"p"} \noBreak - - % Pes Auctus Ascendens - \[ g \pes \auctum \ascendens b \] - \noBreak s^\markup {"q"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Epiphonus - \[ g \pes \deminutum b \] - s^\markup {"r"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{7. Pes Quassus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus - \[ \oriscus g \pes \virga b \] - s^\markup {"s"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus Auctus Descendens - \[ \oriscus g \pes \auctum \descendens b \] - s^\markup {"t"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{8. Quilisma Pes} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma Pes - \[ \quilisma g \pes b \] - s^\markup {"u"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma Pes Auctus Descendens - \[ \quilisma g \pes \auctum \descendens b \] - s^\markup {"v"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{9. Podatus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Initio Debilis - \[ \deminutum g \pes b \] - s^\markup {"w"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens Initio Debilis - \[ \deminutum g \pes \auctum \descendens b \] - s^\markup {"x"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{10. Torculus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus - \[ a \pes b \flexa g \] - s^\markup {"y"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens - \[ a \pes b \flexa \auctum \descendens g \] - s^\markup {"z"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus - \[ a \pes b \flexa \deminutum g \] - s^\markup {"A"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{11. Torculus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Initio Debilis - \[ \deminutum a \pes b \flexa g \] - s^\markup {"B"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens Initio Debilis - \[ \deminutum a \pes b \flexa \auctum \descendens g \] - s^\markup {"C"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus Initio Debilis - \[ \deminutum a \pes b \flexa \deminutum g \] - s^\markup {"D"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{12. Porrectus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus - \[ a \flexa g \pes b \] - s^\markup {"E"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Auctus Descendens - \[ a \flexa g \pes \auctum \descendens b \] - s^\markup {"F"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Deminutus - \[ a \flexa g \pes \deminutum b \] - s^\markup {"G"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{13. Climacus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus - \[ \virga b \inclinatum a \inclinatum g \] - s^\markup {"H"} - } - \layout { \neumeDemoLayout } -} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Auctus - \[ \virga b \inclinatum a \inclinatum \auctum g \] - s^\markup {"I"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Deminutus - \[ \virga b \inclinatum a \inclinatum \deminutum g \] - s^\markup {"J"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{14. Scandicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus - \[ g \pes a \virga b \] - s^\markup {"K"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Auctus Descendens - \[ g \pes a \pes \auctum \descendens b \] - s^\markup {"L"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Deminutus - \[ g \pes a \pes \deminutum b \] - s^\markup {"M"} - } -\layout { \neumeDemoLayout }} -@end lilypond - -@item -@code{15. Salicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus - \[ g \oriscus a \pes \virga b \] - s^\markup {"N"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus Auctus Descendens - \[ g \oriscus a \pes \auctum \descendens b \] - s^\markup {"O"} - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@item -@code{16. Trigonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Trigonus - \[ \stropha b \stropha b \stropha a \] - s^\markup {"P"} - } - \layout { \neumeDemoLayout } -} -@end lilypond -@tab -@tab - -@end multitable - - -Contrairement à la majorité des autres systèmes de notation neumatique, -la manière de saisir les neumes n'a rien à voir avec leur apparence -typographique ; elle se concentre plutôt sur le sens musical. Ainsi, -@code{\[ a \pes b \flexa g \]} produit un @emph{torculus} constitué de -trois @emph{punctums}, alors que @code{\[ a \flexa g \pes b \]} produit -un @emph{porrectus} avec une flexe incurvée et un seul @emph{punctum}. -Il n'existe pas de commande à proprement parler qui permette de -spécifier la courbe d'une flexe ; c'est la source musicale qui va le -déterminer. Le fondement d'une telle approche réside dans la -distinction que nous faisons entre les aspects musicaux de la source et -le style de notation que nous voulons obtenir. De ce fait, la même -source pourra être utilisée pour imprimer dans un autre style de -notation grégorienne. - -Le tableau suivant présente les fragments de code qui ont permis de -générer les neumes ligaturés du tableau précédent. Les lettres de la -première colonne renvoient aux ligatures ci-dessus. La seconde -colonne énumère le nom des ligatures, et la troisième le code ayant -permis de les générer, se basant ici sur sol, la, si. - -@multitable @columnfractions .02 .31 .67 -@item -@b{#} -@tab -@b{Nom} -@tab -@b{Code source} - -@item -a -@tab -Punctum -@tab -@code{\[ b \]} - -@item -b -@tab -Punctum Inclinatum -@tab -@code{\[ \inclinatum b \]} - -@item -c -@tab -Punctum Auctum@* -Ascendens -@tab -@code{\[ \auctum \ascendens b \]} - -@item -d -@tab -Punctum Auctum@* -Descendens -@tab -@code{\[ \auctum \descendens b \]} - -@item -e -@tab -Punctum Inclinatum@* -Auctum -@tab -@code{\[ \inclinatum \auctum b \]} - -@item -f -@tab -Punctum Inclinatum@* -Parvum @tab -@code{\[ \inclinatum \deminutum b \]} - -@item -g -@tab -Virga -@tab -@code{\[ \virga b \]} - -@item -h -@tab -Stropha -@tab -@code{\[ \stropha b \]} - -@item -i -@tab -Stropha Aucta -@tab -@code{\[ \stropha \auctum b \]} - -@item -j -@tab -Oriscus -@tab -@code{\[ \oriscus b \]} - -@item -k -@tab -Clivis vel Flexa -@tab -@code{\[ b \flexa g \]} - -@item -l -@tab -Clivis Aucta@* -Descendens -@tab -@code{\[ b \flexa \auctum \descendens g \]} - -@item -m -@tab -Clivis Aucta@* -Ascendens -@tab -@code{\[ b \flexa \auctum \ascendens g \]} - -@item -n -@tab -Cephalicus -@tab -@code{\[ b \flexa \deminutum g \]} - -@item -o -@tab -Podatus vel Pes -@tab -@code{\[ g \pes b \]} - -@item -p -@tab -Pes Auctus@* -Descendens -@tab -@code{\[ g \pes \auctum \descendens b \]} - -@item -q -@tab -Pes Auctus@* -Ascendens -@tab -@code{\[ g \pes \auctum \ascendens b \]} - -@item -r -@tab -Epiphonus -@tab -@code{\[ g \pes \deminutum b \]} - -@item -s -@tab -Pes Quassus -@tab -@code{\[ \oriscus g \pes \virga b \]} - -@item -t -@tab -Pes Quassus@* -Auctus Descendens @tab -@code{\[ \oriscus g \pes \auctum \descendens b \]} - -@item -u -@tab -Quilisma Pes -@tab -@code{\[ \quilisma g \pes b \]} - -@item -v -@tab -Quilisma Pes@* -Auctus Descendens -@tab -@code{\[ \quilisma g \pes \auctum \descendens b \]} - -@item -w -@tab -Pes Initio Debilis -@tab -@code{\[ \deminutum g \pes b \]} - -@item -x -@tab -Pes Auctus Descendens@* -Initio Debilis -@tab -@code{\[ \deminutum g \pes \auctum \descendens b \]} - -@item -y -@tab -Torculus -@tab -@code{\[ a \pes b \flexa g \]} - -@item -z -@tab -Torculus Auctus@* -Descendens -@tab -@code{\[ a \pes b \flexa \auctum \descendens g \]} - -@item -A -@tab -Torculus Deminutus -@tab -@code{\[ a \pes b \flexa \deminutum g \]} - -@item -B -@tab -Torculus Initio Debilis -@tab -@code{\[ \deminutum a \pes b \flexa g \]} - -@item -C -@tab -Torculus Auctus@* -Descendens Initio Debilis -@tab -@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} - -@item -D -@tab -Torculus Deminutus@* -Initio Debilis -@tab -@code{\[ \deminutum a \pes b \flexa \deminutum g \]} - -@item -E -@tab -Porrectus -@tab -@code{\[ a \flexa g \pes b \]} - -@item -F -@tab -Porrectus Auctus@* -Descendens -@tab -@code{\[ a \flexa g \pes \auctum \descendens b \]} - -@item -G -@tab -Porrectus Deminutus -@tab -@code{\[ a \flexa g \pes \deminutum b \]} - -@item -H -@tab -Climacus -@tab -@code{\[ \virga b \inclinatum a \inclinatum g \]} - -@item -I -@tab -Climacus Auctus -@tab -@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} - -@item -J -@tab -Climacus Deminutus -@tab -@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} - -@item -K -@tab -Scandicus -@tab -@code{\[ g \pes a \virga b \]} - -@item -L -@tab -Scandicus Auctus@* -Descendens -@tab -@code{\[ g \pes a \pes \auctum \descendens b \]} - -@item -M -@tab -Scandicus Deminutus -@tab -@code{\[ g \pes a \pes \deminutum b \]} - -@item -N -@tab -Salicus -@tab -@code{\[ g \oriscus a \pes \virga b \]} - -@item -O -@tab -Salicus Auctus Descendens -@tab -@code{\[ g \oriscus a \pes \auctum \descendens b \]} - -@item -P -@tab -Trigonus -@tab -@code{\[ \stropha b \stropha b \stropha a \]} -@end multitable - -Les ligatures que nous venons de voir, bien que rudimentaires, donnent -un aperçu des possibilités de former des ligatures grégoriennes. En -théorie, vous pouvez inclure entre les délimiteurs @code{\[} et -@code{\]}, autant de sons que nécessaires à la ligature, ainsi que de -préfixes tels que @code{\pes}, @code{\flexa}, @code{\virga}, -@code{\inclinatum}, @dots{} Bien sûr, les règles de construction -présentées ci-dessus peuvent se combiner, ce qui permet la création -d'une infinité de ligatures. - -Les points d'@emph{augmentum}, ou @emph{morae}, s'obtiennent avec la -fonction @code{\augmentum}. Notez que cette fonction @code{\augmentum} -est implémentée en tant que fonction unaire plutôt que comme un préfixe -de note. Par conséquent, @code{\augmentum \virga c} ne donnera rien de -particulier. Il faut l'utiliser avec la syntaxe @code{\virga \augmentum -c} ou @code{\augmentum @{\virga c@}}. Par ailleurs, l'expression -@code{\augmentum @{a g@}} constitue une forme abrégée de -@code{\augmentum a \augmentum g}. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \[ \augmentum a \flexa \augmentum g \] - \augmentum g - } -} -@end lilypond - - -@predefined -LilyPond dispose des préfixes suivants : -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. -@endpredefined - - -Les préfixes de note peuvent s'agglutiner, modulo quelques restrictions. -Par exemple, on peut appliquer un @code{\descendens} ou un -@code{\ascendens} à une note, mais pas les deux simultanément à une même -note. - -@funindex \pes -@funindex \flexa -Deux notes adjacentes peuvent être reliées grâce aux commandes -@code{\pes} ou @code{\flexa} pour marquer une ligne mélodique -respectivement ascendante ou descendante. - -@funindex \augmentum -Utilisez la fonction musicale unaire @code{\augmentum} pour ajouter -des points d'augmentum. - -@knownissues - -Lorsqu'un @code{\augmentum} apparaît dans une ligature en fin de -portée, son placement vertical peut être erroné. Pour y remédier, -ajoutez un silence invisible, @code{s8} par exemple, comme dernière note de -cette portée. - -L'@code{\augmentum} devrait être implémenté en tant que préfixe plutôt -qu'en tant que fonction unaire, afin qu'@code{\augmentum} puisse -s'intégrer avec d'autres préfixes dans n'importe quel ordre. - - - - -@node Pre-defined contexts -@subsection Pre-defined contexts - -@untranslated - - -@menu -* Gregorian chant contexts:: -* Mensural contexts:: -@end menu - -@node Gregorian chant contexts -@unnumberedsubsubsec Gregorian chant contexts - -@cindex VaticanaVoiceContext -@cindex VaticanaStaffContext - -Les contextes @code{VaticanaVoiceContext} et -@code{VaticanaStaffContext} permettent de graver le chant grégorien -dans le style des éditions vaticanes. Ces contextes initialisent -les propriétés de tous les autres contextes et objets graphiques à des -valeurs adéquates, de telle sorte que vous pouvez tout de suite vous -lancer dans la saisie de votre chant, comme ci-dessous : - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - << - \new VaticanaVoice = "cantus" { - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] - f \divisioMinima - \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] - c' \divisioMinima \break - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima - } - \new Lyrics \lyricsto "cantus" { - San- ctus, San- ctus, San- ctus - } - >> -} -@end lilypond - - - - -@node Mensural contexts -@unnumberedsubsubsec Mensural contexts - - -@cindex MensuralVoiceContext -@cindex MensuralStaffContext - -Les contextes @code{MensuralVoiceContext} et -@code{MensuralStaffContext} permettent de graver des chants -dans le style mesuré. Ces contextes initialisent -les propriétés de tous les autres contextes et objets graphiques à des -valeurs adéquates, de telle sorte que vous pouvez tout de suite vous -lancer dans la saisie de votre chant comme ci-après : - -@lilypond[quote,ragged-right,verbatim] -\score { - << - \new MensuralVoice = "discantus" \transpose c c' { - \override Score.BarNumber #'transparent = ##t { - c'1\melisma bes a g\melismaEnd - f\breve - \[ f1\melisma a c'\breve d'\melismaEnd \] - c'\longa - c'\breve\melisma a1 g1\melismaEnd - fis\longa^\signumcongruentiae - } - } - \new Lyrics \lyricsto "discantus" { - San -- ctus, San -- ctus, San -- ctus - } - >> -} -@end lilypond - - - -@node Transcribing ancient music -@subsection Transcribing ancient music - -@untranslated - -@menu -* Ancient and modern from one source:: -* Incipits:: -* Mensurstriche layout:: -* Transcribing Gregorian chant:: -@end menu - -@node Ancient and modern from one source -@unnumberedsubsubsec Ancient and modern from one source - -@untranslated - -@node Incipits -@unnumberedsubsubsec Incipits - -@untranslated - - -@node Mensurstriche layout -@unnumberedsubsubsec Mensurstriche layout - -@untranslated - -@node Transcribing Gregorian chant -@unnumberedsubsubsec Transcribing Gregorian chant - -@untranslated - - -@node Editorial markings -@subsection Editorial markings - - -@untranslated - -@menu -* Annotational accidentals:: -* Baroque rhythmic notation:: -@end menu - -@node Annotational accidentals -@unnumberedsubsubsec Annotational accidentals - - -@cindex MensuralVoiceContext -@cindex MensuralStaffContext - -Les contextes @code{MensuralVoiceContext} et -@code{MensuralStaffContext} permettent de graver des chants -dans le style mesuré. Ces contextes initialisent -les propriétés de tous les autres contextes et objets graphiques à des -valeurs adéquates, de telle sorte que vous pouvez tout de suite vous -lancer dans la saisie de votre chant comme ci-après : - -@lilypond[quote,ragged-right,verbatim] -\score { - << - \new MensuralVoice = "discantus" \transpose c c' { - \override Score.BarNumber #'transparent = ##t { - c'1\melisma bes a g\melismaEnd - f\breve - \[ f1\melisma a c'\breve d'\melismaEnd \] - c'\longa - c'\breve\melisma a1 g1\melismaEnd - fis\longa^\signumcongruentiae - } - } - \new Lyrics \lyricsto "discantus" { - San -- ctus, San -- ctus, San -- ctus - } - >> -} -@end lilypond - - - -@node Baroque rhythmic notation -@unnumberedsubsubsec Baroque rhythmic notation - -@untranslated - diff --git a/Documentation/fr/user/changing-defaults.itely b/Documentation/fr/user/changing-defaults.itely deleted file mode 100644 index 3134ce3c61..0000000000 --- a/Documentation/fr/user/changing-defaults.itely +++ /dev/null @@ -1,1504 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 76de7e168dbc9ffc7671d99663c5ce50dae42abb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Gilles Thibault - - -@node Changing defaults -@chapter Changing defaults - -LilyPond est conçu pour engendrer, par défaut, des partitions de la -plus haute qualité. Cependant, on peut parfois avoir à modifier cette -mise en page par défaut. Celle-ci est réglée par tout un ensemble de -@qq{leviers et manettes}, dont ce chapitre ne cherche pas à faire -l'inventaire exhaustif. Le propos est plutôt ici de mettre en évidence -les différents groupes auxquels s'apparentent ces contrôles, et d'expliquer -comment trouver le bon levier pour obtenir tel ou tel effet en particulier. - -@cindex Référence du programme - -Les moyens de contrôle des différents réglages sont décrits dans un document -séparé, la -@iftex -référence du programme -@end iftex -@ifnottex -@ref{Top,Référence du programme,,lilypond-internals}. -@end ifnottex -Ce guide répertorie toutes les variables, fonctions et autres options que -LilyPond met à votre disposition. Il est consultable -@c leave the @uref as one long line. -@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,en@tie{}ligne}, -au format HTML, mais est également inclus dans la documentation -fournie avec le logiciel. - -Il est quatre domaines dans lesquels on peut modifier les réglages par défaut : - -@itemize @bullet -@item -La notation automatique, ce qui revient à modifier la manière dont les éléments -de notation sont automatiquement créés -- par exemple, les règles de ligatures. - -@item -L'apparence, qui se rapporte aux objets pris individuellement -- ainsi de la direction -des hampes, du placement des indications textuelles. - -@item -Les contextes, qui recouvrent la manière dont les évènements musicaux sont représentés sous forme de -notation -- par exemple, le fait d'attribuer un chiffre de mesure distinct à chaque portée. - -@item -La mise en page, autrement dit les marges, l'espacement, la taille du papier ; tous ces facteurs -font l'objet des chapitres @ref{General input and output} et @ref{Spacing issues}. -@end itemize - -En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP) comme -infrastructure. Modifier les choix de mise en page revient à pénétrer dans -les entrailles du programme, et de ce fait requiert l'emploi du Scheme. -Les fragments de Scheme, dans un fichier @code{.ly}, sont introduits par le -caractère @q{hash}, (@code{#}, improprement surnommé @q{dièse}).@footnote{Le -@rlearning{Scheme tutorial} fournit quelques notions de base pour saisir des nombres, -des listes, des chaînes de caractères ou des symboles, en Scheme.} - - -@menu -* Interpretation contexts:: -* Explaining the Internals Reference:: -* Modifying properties:: -* Useful concepts and properties:: -* Advanced tweaks:: -@end menu - -@node Interpretation contexts -@section Interpretation contexts - -Cette section traite des contextes. - -@menu -* Contexts explained:: -* Creating contexts:: -* Modifying context plug-ins:: -* Layout tunings within contexts:: -* Changing context default settings:: -* Defining new contexts:: -* Aligning contexts:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@ignore -@c TODO Rethink and rewrite - ->> > > - list of contexts: my *danger unmaintainable* ->> > > alarm just went off. I'm - -I knew it would... And leaving out some of them is perfectly fine -with me. -I do think that a list like this, with the main contexts and a -brief -description of what they do (perhaps also with a note about what -default -behavior is associated with each of them, but this may be -unmanageable), -should be there, and then we could simply list the remaining ones -without -further explanation and with links to the IR. -@end ignore - -@c TODO Improve layout, order and consistency of wording -td - -@c TODO Add introduction which explains contexts in generality -td - -@c TODO Describe propagation of property values -td - - -@menu -* Score - the master of all contexts:: -* Top-level contexts - staff containers:: -* Intermediate-level contexts - staves:: -* Bottom-level contexts - voices:: -@end menu - -@node Score - the master of all contexts -@unnumberedsubsubsec Score - the master of all contexts - -@untranslated - - -@node Top-level contexts - staff containers -@unnumberedsubsubsec Top-level contexts - staff containers - -@untranslated - - -@node Intermediate-level contexts - staves -@unnumberedsubsubsec Intermediate-level contexts - staves - -@untranslated - - -@node Bottom-level contexts - voices -@unnumberedsubsubsec Bottom-level contexts - voices - -@untranslated - - -@node Creating contexts -@subsection Creating contexts - -@untranslated - - -@node Modifying context plug-ins -@subsection Modifying context plug-ins - -Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent -pas que des propriétés ; ils mettent également en œuvre certains -sous-programmes (@q{plug-ins}, pour employer le terme consacré) nommés -@q{graveurs} (@q{engravers}, pour reprendre le terme anglais). -Ces sous-programmes sont chargés de créer les différents éléments de notation : -On trouve ainsi dans le contexte @code{Voice}, un graveur @code{Note_head_engraver}, -chargé des têtes de notes, et dans le contexte @code{Staff}, un graveur -@code{Key_signature_engraver}, chargé de l'armure. - -Vous trouverez une description exhaustive de chaque graveur dans -@ifhtml -@rinternals{Engravers and Performers}. -@end ifhtml -@ifnothtml -Program reference @expansion{} Translation @expansion{} Engravers. -@end ifnothtml -Chaque contexte mentionné dans -@ifhtml -@rinternals{Contexts} -@end ifhtml -@ifnothtml -Program reference @expansion{} Translation @expansion{} Context. -@end ifnothtml -répertorie les graveurs mis en œuvre. - - -On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en -modifiant les contextes à volonté. - - -Lorsque un contexte est créé, par la commande @code{\new} ou @code{\context}, on peut -y adjoindre un bloc @code{\with} (en anglais @q{avec}), dans lequel il est possible -d'ajouter (commande @code{\consists}) ou d'enlever (commande @code{\remove}) -des graveurs : - -@funindex \with - -@example -\new @var{contexte} \with @{ - \consists @dots{} - \consists @dots{} - \remove @dots{} - \remove @dots{} - @emph{etc.} -@} -@{ - @emph{..musique..} -@} -@end example - -@noindent -Ici les points de suspension @dots{} devront être remplacés par les noms -des graveurs désirés. Dans l'exemple suivant, on enlève du contexte -@code{Staff}, le chiffre de mesure (graveur @code{Time_signature_engraver}) -et la clé (graveur @code{Clef_engraver}). - -@lilypond[quote,relative=1,verbatim,fragment] -<< - \new Staff { - f2 g - } - \new Staff \with { - \remove "Time_signature_engraver" - \remove "Clef_engraver" - } { - f2 g2 - } ->> -@end lilypond - -La clé et le chiffre de mesure ont disparu de la deuxième portée. C'est une méthode -quelque peu radicale, puisqu'elle affectera toute la portée jusqu'à la fin de la -partition. L'espacement s'en trouve également affecté, ce qui peut être ou non -l'effet recherché. Une méthode plus sophistiquée aurait été de rendre ces objets -transparents (voir @rlearning{Visibility and color of objects}). - -Dans l'exemple suivant, voici une mise en pratique plus utile. En temps -normal, les barres de mesure et la métrique sont synchronisées verticalement -dans toute la partition. Les graveurs qui en sont responsables se nomment -@code{Timing_translator} et @code{Default_bar_line_engraver}. -En les enlevant du contexte @code{Score} pour les attribuer au contexte -@code{Staff}, chaque portée peut désormais avoir sa propre métrique. - -@cindex polymétrique, partition -@cindex Chiffres de mesure multiples - -@lilypond[quote,relative=1,ragged-right,verbatim,fragment] -\new Score \with { - \remove "Timing_translator" - \remove "Default_bar_line_engraver" -} << - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 3/4 - c4 c c c c c - } - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 2/4 - c4 c c c c c - } ->> -@end lilypond - - -@c deprecated node: delete. --fv -@node Layout tunings within contexts -@subsection Layout tunings within contexts - -Chaque contexte est chargé de créer plusieurs types d'objets graphiques. -Il contient également les réglages nécessaires pour chacun de ces objets. -Si l'on modifie ces réglages, les objets n'auront plus la même apparence. - -La syntaxe employée pour ce faire est - -@example -\override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur} -@end example - -Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes) -ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une variable -(désignée par un symbole, ce qui explique l'apostrophe) employée par le système -de mise en page. La sous-section @ref{Constructing a tweak} vous -aidera à savoir quoi mettre à la place de @var{objet}, @var{propriété} et -@var{valeur} ; notre propos n'est ici que d'examiner l'emploi de cette commande. - -La commande suivante : - -@verbatim -\override Staff.Stem #'thickness = #4.0 -@end verbatim - -@noindent -rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui signifie qu'elles -sont 1,3 fois plus épaisses que les lignes de la portée). Dans la mesure où nous avons -indiqué @code{Staff} comme contexte, ce réglage ne s'appliquera qu'à la portée courante ; -les autres portées demeureront intactes. - - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\override Staff.Stem #'thickness = #4.0 -c4 -c4 -c4 -@end lilypond - -La commande @code{\override} modifie donc la définition de l'objet @code{Stem} -dans le contexte @code{Staff} ; toutes les hampes qui suivent seront affectées. - -Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut être omis, auquel -cas le contexte par défaut (ici, @code{Voice}) sera employé. La commande @code{\once} -permet de n'appliquer la modification qu'une seule fois. - -@lilypond[quote,fragment,verbatim,relative=2] -c4 -\once \override Stem #'thickness = #4.0 -c4 -c4 -@end lilypond - -La commande @code{\override} doit être entrée @emph{avant} l'objet concerné. -Ainsi, lorsque l'on veut altérer un objet qui se prolonge, tel qu'une liaison, -une ligature ou tout autre objet dit @emph{Spanner}, la commande @code{\override} -doit être saisie avant que l'objet soit créé. - -@lilypond[quote,fragment,verbatim,relative=2] -\override Slur #'thickness = #3.0 -c8[( c -\override Beam #'thickness = #0.6 -c8 c]) -@end lilypond - -@noindent -Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la ligature -(@emph{Beam}). En effet, le code qui lui est relatif n'a pas été inséré avant le début de -la ligature, et demeure donc sans effet. - -De même que la commande @code{\unset}, la commande @code{\revert} défait -ce qui a été fait par une commande @code{\override}. Tout comme avec @code{\unset}, -elle ne peut annuler que les réglages effectués dans le même contexte. -Ainsi dans l'exemple suivant, la commande @code{\revert} est sans effet. - -@example -\override Voice.Stem #'thickness = #4.0 -\revert Staff.Stem #'thickness -@end example - -Il existe, à l'intérieur même de certaines propriétés, des options que l'on -nomme @q{sous-propriétés}. La syntaxe est alors - -@c leave this as a long long -@example -\override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur} -@end example - -@noindent -Ainsi, par exemple : - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - - -@seealso -Référence du programme : @rinternals{OverrideProperty}, @rinternals{RevertProperty}, -@rinternals{PropertySet}, @rinternals{Backend}, et -@rinternals{All layout objects}. - - -@knownissues - -La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon -très stricte. Des références cycliques dans des valeurs Scheme peuvent -de ce fait interrompre, ou faire planter le programme -- ou bien les deux. - - -@node Changing context default settings -@subsection Changing context default settings - -Les réglages montrés dans les sous-sections @ref{The -set command}, @ref{Modifying context plug-ins} et -@ref{Layout tunings within contexts} peuvent également être saisis indépendamment -de la musique dans le bloc @code{\layout}, au moyen de la commande @code{\context} : - -@example -\layout @{ - @dots{} - \context @{ - \Staff - - \set fontSize = #-2 - \override Stem #'thickness = #4.0 - \remove "Time_signature_engraver" - @} -@} -@end example - -Le raccourci @code{\Staff} invoque les définitions inhérentes au contexte -@code{Staff}, de façon à ce qu'elles puissent être modifiées. - -Les lignes suivantes affecteront toutes les portées (tous les contextes @code{Staff}) -dans la partition. -@example -\set fontSize = #-2 -\override Stem #'thickness = #4.0 -\remove "Time_signature_engraver" -@end example - -@noindent -Les autres contextes peuvent être modifiés de même manière. - -La commande @code{\set}, dans le bloc @code{\layout}, est facultative ; aussi -les lignes suivantes produiront-elles le même effet. - -@example -\context @{ - @dots{} - fontSize = #-2 -@} -@end example - - -@knownissues - -Il est impossible de stocker des modifications de contexte dans un identificateur. - -Le raccourci @code{\RemoveEmptyStaffContext} détruit tous les réglages -du contexte @code{\Staff}. Pour modifier des propriétés de portées gouvernées -par @code{\RemoveEmptyStaffContext}, il faut le faire impérativement @emph{après} -avoir invoqué @code{\RemoveEmptyStaffContext} : - -@example -\layout @{ - \context @{ - \RemoveEmptyStaffContext - - \override Stem #'thickness = #4.0 - @} -@} -@end example - - -@node Defining new contexts -@subsection Defining new contexts - -Les contextes tels que @code{Staff} ou @code{Voice} sont faits -de briques de constructions empilées. En combinant divers graveurs, -il est possible de créer de nouveaux types de contextes. - -Dans l'exemple suivant, on construit, de zéro, un nouveau contexte très -semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en forme -de barres obliques au centre de la portée. Un tel contexte, par exemple, peut -servir à indiquer un passage improvisé dans un morceau de jazz. - -@c KEEP LY -@lilypond[quote,ragged-right] -\layout { \context { - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Rhythmic_column_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -} -\context { \Staff - \accepts "ImproVoice" -}} - -\relative c'' { - a4 d8 bes8 \new ImproVoice { c4^"ad lib" c - c4 c^"dévêtez-vous" c_"tout en jouant :)" c } - a1 -} -@end lilypond - - -On a rassemblé les réglages dans un bloc @code{\context}, lui-même dans -le bloc @code{\layout} : - -@example -\layout @{ - \context @{ - @dots{} - @} -@} -@end example - -En lieu et place des points (@dots{}), voici les éléments à saisir : - -@itemize @bullet -@item Tout d'abord, il convient de donner un nom @code{\name} à notre nouveau contexte : - -@example -\name ImproVoice -@end example - -@item Comme il est très semblable à @code{Voice}, nous souhaitons que toutes les -commandes associées au @code{Voice} déjà existant, restent valables. D'où nécessité -de la commande @code{\alias}, qui va l'associer au contexte @code{Voice} : - -@example -\alias Voice -@end example - -@item Ce contexte doit pouvoir imprimer des notes, et des indications textuelles ; -on ajoute donc les graveurs appropriés. - -@example -\consists Note_heads_engraver -\consists Text_engraver -@end example - -@item Cependant, on veut que les notes s'affichent toutes au centre de la portée : - -@example -\consists Pitch_squash_engraver -squashedPosition = #0 -@end example - -@noindent -Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes créées par -@rinternals{Note_heads_engraver}, et les @q{écrase} pour qu'elles aient toutes la -même position verticale, définie par @code{squashedPosition} : ici il s'agit de la -valeur@tie{}@code{0}, c'est-à-dire la ligne du milieu. - -@item On veut que les notes aient la forme d'une barre oblique, sans aucune hampe : - -@example -\override NoteHead #'style = #'slash -\override Stem #'transparent = ##t -@end example - -@item Afin que tous ces graveurs puissent travailler de concert, on leur adjoint un -sous-programme spécial, introduit par la commande @code{\type} : il s'agit de -@code{Engraver_group}, - -@example -\type "Engraver_group" -@end example - -@end itemize - -Récapitulons -- on se retrouve avec le bloc suivant : - -@example -\context @{ - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -@} -@end example - -@funindex \accepts -Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte -@code{ImproVoice} dans la hiérarchie des contextes. Tout comme le -contexte @code{Voice}, sa place est au sein du contexte @code{Staff}. -Nous allons donc modifier le contexte @code{Staff}, -au moyen de la commande @code{\accepts} : - -@example -\context @{ - \Staff - \accepts ImproVoice -@} -@end example - -@funindex \denies -Le contraire de @code{\accepts} est @code{\denies}, -qui est parfois utile lorsque l'on recycle des définitions de -contextes déjà existantes. - -Enfin, tout cela doit prendre place dans le bloc @code{\layout}, -comme suit : - -@example -\layout @{ - \context @{ - \name ImproVoice - @dots{} - @} - \context @{ - \Staff - \accepts "ImproVoice" - @} -@} -@end example - -On peut alors saisir la musique, comme dans l'exemple plus haut : - -@example -\relative c'' @{ - a4 d8 bes8 - \new ImproVoice @{ - c4^"ad lib" c - c4 c^"dévêtez-vous" - c c_"tout en jouant :)" - @} - a1 -@} -@end example - - -@node Aligning contexts -@subsection Aligning contexts - - -Il est possible d'aligner verticalement chaque nouveau contexte, -en-dessous ou au-dessus, par exemple dans le cas de musique vocale -(@rlearning{Vocal ensembles}) ou d'@qq{ossias}. - -@cindex ossia -@findex alignAboveContext -@findex alignBelowContext - -@lilypond[quote,ragged-right] -ossia = { f4 f f f } -\score{ - \relative c' \new Staff = "main" { - c4 c c c - << - \new Staff \with { alignAboveContext = #"main" } \ossia - { d8 f d f d f d f } - >> - } -} -@end lilypond - - -@node Explaining the Internals Reference -@section Explaining the Internals Reference - - -@menu -* Navigating the program reference:: -* Layout interfaces:: -* Determining the grob property:: -* Naming conventions:: -@end menu - -@node Navigating the program reference -@subsection Navigating the program reference - -Comment, par exemple, déplacer le doigté dans le fragment suivant ? - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -Sur la page de la documentation relative aux doigtés, c'est-à-dire -@ref{Fingering instructions}, se trouve l'indication suivante : - - -@seealso -Référence du programme : @rinternals{Fingering}. - - -@c outdated info; probably will delete. -@ignore -This fragment points to two parts of the program reference: a page -on @code{FingerEvent} and one on @code{Fingering}. - -The page on @code{FingerEvent} describes the properties of the music -expression for the input @code{-2}. The page contains many links -forward. For example, it says - -@quotation -Accepted by: @rinternals{Fingering_engraver}, -@end quotation - -@noindent -That link brings us to the documentation for the Engraver, the -plug-in, which says - -@quotation -This engraver creates the following layout objects: @rinternals{Fingering}. -@end quotation - -In other words, once the @code{FingerEvent}s are interpreted, the -@code{Fingering_engraver} plug-in will process them. -@end ignore - -@ignore -@c I can't figure out what this is supposed to mean. -gp - -The @code{Fingering_engraver} is also listed to create -@rinternals{Fingering} objects, - -@c old info? it doesn't make any sense to me with our current docs. -This is also the -second bit of information listed under @b{See also} in the Notation -manual. -@end ignore - -@ifnothtml -Ladite référence est disponible au format HTML, ce qui rend la navigation bien -plus aisée. Il est possible soit de la lire en ligne, soit de la télécharger -dans ce format. La démarche présentée ici sera plus difficle à comprendre -dans un document au format PDF. -@end ifnothtml - -Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page, -on peut lire - -@quotation -Fingering objects are created by: @rinternals{Fingering_engraver} and -@rinternals{New_fingering_engraver}. -@end quotation - -En d'autres termes, @emph{Les indications de doigtés} -(@code{Fingering} en anglais) @emph{sont créées par les graveurs -@rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.} - -En suivant derechef les liens propres à la référence du programme, on suit en fait -le cheminement qui aboutit à la création de la partition : - -@itemize @bullet - -@item @rinternals{Fingering}: -@rinternals{Fingering} objects are created by: -@rinternals{Fingering_engraver} - -@item @rinternals{Fingering_engraver}: -Music types accepted: @rinternals{fingering-event} - -@item @rinternals{fingering-event}: -Music event type @code{fingering-event} is in Music expressions named -@rinternals{FingeringEvent} -@end itemize - -Ce cheminement se produit, bien sûr, en sens inverse : nous sommes ici partis -du résultat, et avons abouti aux évènements (en anglais @q{Events}) engendrés -par le fichier d'entrée. L'inverse est également possible : on peut partir d'un -évènement, et suivre le cheminement de LilyPond qui aboutit à la création d'un -ou plusieurs objets graphiques. - -La référence du programme peut également se parcourir comme un document normal. -On y trouve des chapitres tels que -@ifhtml -@rinternals{Music definitions}, -@end ifhtml -@ifnothtml -@code{Music definitions} -@end ifnothtml -@rinternals{Translation}, ou encore @rinternals{Backend}. Chaque chapitre -recense toutes les définitions employées, et les propriétés sujettes à -ajustements. - -@c -- what about adding a link to the glossary here ? -vv -@ignore -La Référence du programme n'est pas traduite en français -- notamment du fait -qu'elle est en évolution constante, tout comme LilyPond. En revanche, les termes -musicaux font l'objet d'un @commentfairelelien{glossaire} fort utile pour les utilisateurs -francophones. -@end ignore - - -@node Layout interfaces -@subsection Layout interfaces - -@cindex interfaces de rendu -@cindex rendu, interfaces de -@cindex objets graphiques - -Tous les éléments de notation sont considérés comme des objets graphiques -(en anglais @q{Graphical Object}, d'où le diminutif @emph{Grob}). -Chaque objet est doté d'un certain nombre de propriétés (l'épaisseur du trait, -l'orientation, etc.), et lié à d'autres objets. -Le fonctionnement de ces objets est décrit en détail dans @rinternals{grob-interface}. - -Prenons l'exemple des doigtés (en anglais @q{Fingering}). -La page @code{Fingering} de la Référence du programme établit une liste de définitions -propres à ce type d'objets : - -@quotation -@code{padding} (dimension, in staff space): - -@code{0.5} -@end quotation - -@noindent -Ce qui signifie que les doigtés doivent être maintenus à une certaine distance (@emph{padding}) -des notes : 0,5 unités @emph{staff-space} (espace de portée). - - -Chaque objet peut avoir plusieurs attributs, en tant qu'élément typographique -ou musical. Ainsi, un doigté (objet @q{Fingering}) possède les attributs suivants : - - -@itemize @bullet -@item -Sa taille ne dépend pas de l'espacement horizontal, contrairement aux liaisons ou ligatures. - -@item -C'est du texte -- un texte vraiment court, certes. - -@item -Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou ligatures. - -@item -Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le centre de la note. - -@item -Sur l'axe vertical, le symbole doit être proche de la note et de la portée. - -@item -Sur l'axe vertical encore, il doit également s'ordonner avec les éventuels -autres symboles, ponctuations, ou éléments textuels. -@end itemize - -Faire appliquer ces différents attributs est le rôle des @emph{interfaces}, -que l'on trouve en bas de la page @rinternals{Fingering}. - -@quotation -This object supports the following interfaces: -@rinternals{item-interface}, -@rinternals{self-alignment-interface}, -@rinternals{side-position-interface}, @rinternals{text-interface}, -@rinternals{text-script-interface}, @rinternals{font-interface}, -@rinternals{finger-interface}, and @rinternals{grob-interface}. -@end quotation - -@noindent -En français, - -@quotation -Cet objet admet les interfaces suivantes : -@end quotation - -Suit la liste des interfaces en question, présentées comme autant de liens, -qui conduisent sur les pages dédiées à chacune d'entre elles. -Chaque interface est dotée d'un certain nombre de propriétés, dont certaines -peuvent être modifiées, et d'autres non (les @q{Internal properties}, ou -propriétés internes). - -Pour aller encore plus loin, plutôt que de simplement parler de l'objet -@code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller explorer -son âme même, dans les fichiers source de LilyPond (voir -@rlearning{Other sources of information}), en l'occurence le fichier -@file{scm/@/define@/-grobs@/.scm} : - -@example -(Fingering - . ((padding . 0.5) - (avoid-slur . around) - (slur-padding . 0.2) - (staff-padding . 0.5) - (self-alignment-X . 0) - (self-alignment-Y . 0) - (script-priority . 100) - (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) - (font-encoding . fetaNumber) - (font-size . -5) ; don't overlap when next to heads. - (meta . ((class . Item) - (interfaces . (finger-interface - font-interface - text-script-interface - text-interface - side-position-interface - self-alignment-interface - item-interface)))))) -@end example - -@noindent -@dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus qu'un -amas de variables et de réglages. La page de la Référence du programme est -en fait directement engendrée par cette définition. - - -@node Determining the grob property -@subsection Determining the grob property - - -Nous voulions changer la position du chiffre @b{2} dans le fragment suivant : - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -Dans la mesure où le @b{2} est placé, verticalement, à proximité de la note qui lui -correspond, nous allons devoir trouver l'interface en charge de ce placement, qui se -trouve être @code{side-position-interface}. Sur la page de cette interface, on -peut lire : - -@quotation -@code{side-position-interface} - -Position a victim object (this one) next to other objects (the -support). The property @code{direction} signifies where to put the -victim object relative to the support (left or right, up or down?) -@end quotation - -@noindent -Ce qui signifie -@quotation -@code{side-position-interface} - -Placer l'objet affecté à proximité d'autres objets. La propriété -@code{direction} indique où placer l'objet (à droite ou à gauche, -en haut ou en bas). -@end quotation - -@cindex padding -@noindent -En-dessous de cette description se trouve décrite la variable @code{padding} : - -@quotation -@table @code -@item padding -(dimension, in staff space) - -Add this much extra space between objects that are next to each other. -@end table -@end quotation - -@noindent -Ce qui signifie -@quotation -Ajouter tel espace supplémentaire entre des objets proches les uns des -autres. -@end quotation - -@noindent -En augmentant la valeur de @code{padding}, on peut donc éloigner le doigté de la -note. La commande suivante insère trois unités d'espace vide entre la note et le doigté : - -@example -\once \override Voice.Fingering #'padding = #3 -@end example - -En ajoutant cette commande avant la création du doigté (de l'objet @q{Fingering}), -donc avant @code{c2}, on obtient le résultat suivant : - -@lilypond[quote,relative=2,fragment,verbatim] -\once \override Voice.Fingering #'padding = #3 -c-2 -\stemUp -f -@end lilypond - - -Dans le cas présent, le réglage intervient dans le contexte @code{Voice}, -ce qui pouvait également se déduire de la Référence du programme, où la page -du graveur @rinternals{Fingering_engraver} indique : - -@quotation -Fingering_engraver is part of contexts: @dots{} @rinternals{Voice} -@end quotation - -@noindent -Ce qui signifie -@quotation -Le graveur Fingering_engraver fait partie des contextes : @dots{} @rinternals{Voice} -@end quotation - - -@node Naming conventions -@subsection Naming conventions - -@untranslated - - -@node Modifying properties -@section Modifying properties - -@c TODO change the menu and subsection node names to use -@c backslash once the new macro to handle the refs -@c is available. Need to find and change all refs at -@c the same time. -td - -@menu -* Overview of modifying properties:: -* The set command:: -* The override command:: -* Constructing a tweak:: -* The tweak command:: -* set versus override:: -@end menu - -@node Overview of modifying properties -@subsection Overview of modifying properties - -@untranslated - - -@node The set command -@subsection The @code{\set} command - -@cindex propriétés -@funindex \set -@cindex modifier des propriétés - -Chaque contexte peut avoir plusieurs @emph{propriétés}, c'est-à-dire -des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à la volée}, -c'est-à-dire pendant que la compilation s'accomplit. C'est là le rôle de la -commande @code{\set}. - -@example -\set @var{contexte}.@var{propriété} = #@var{valeur} -@end example - -Ainsi : -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set Score.skipBars = ##t -R1*2 -@end lilypond - -Cette commande permet de condenser les mesures vides de notes, en des silences -multi-mesures. Il s'agit d'un objet Scheme, auquel on attribue la valeur booléenne -@q{vrai}, c'est-à-dire la lettre @code{#t} pour @q{True} en anglais. - -Ce changement étant appliqué @q{à la volée}, il n'affecte que le second groupe de notes. - -Si l'argument @var{contexte} n'est pas spécifié, alors la propriété cherchera à s'appliquer -dans le contexte le plus restreint où elle est employée : le plus souvent - @code{ChordNames}, @code{Voice}, ou @code{Lyrics}. Dans l'exemple suivant, - -@lilypond[quote,verbatim,relative=2,fragment] -c8 c c c -\set autoBeaming = ##f -c8 c c c -@end lilypond - -@noindent -aucun argument @var{contexte} n'a été donné à la commande @code{\set}. -De ce fait, les ligatures automatiques sont désactivées dans le -contexte actuel, c'est-à-dire @rinternals{Voice}. Notez que le -contexte le plus restreint n'est pas toujours le bon, -et peut ne pas contenir la propriété qui vous intéresse : ainsi, la propriété -@code{skipBars}, évoquée plus haut, ne relève pas du contexte @code{Voice}, -et le code suivant ne fonctionnera pas. - -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set skipBars = ##t -R1*2 -@end lilypond - -Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un contexte de niveau -supérieur est spécifié (par exemple @code{Staff}), la propriété sera modifée dans -tous les contextes inférieurs (tous les contextes @code{Voice}, par exemple) -qu'il contient. - -@funindex \unset - -La commande @code{\unset} permet d'annuler la définition d'une propriété : - -@example -\unset @var{contexte}.@var{propriété} -@end example - -@noindent -si et seulement si cette propriété à été définie dans ce @var{contexte} -précis ; ainsi, - -@example -\set Staff.autoBeaming = ##f -@end example - -@noindent -même s'il s'applique à tous les contextes @code{Voice} contenus dans le -contexte @code{Staff}, ne peut être annulé au niveau @code{Voice}. Le code -suivant sera sans effet. - -@example -\unset Voice.autoBeaming -@end example - -@noindent -En d'autres termes, la commande @code{\unset} doit impérativement être -accompagnée du même contexte que la commande @code{\set} d'origine. -Pour annuler l'effet, dans notre exemple, de @code{Staff.autoBeaming = ##f}, -il faut donc entrer : -@example -\unset Staff.autoBeaming -@end example - -Si l'on se trouve dans le contexte le plus restreint, il n'est pas obligatoire, -là encore, de spécifier le @var{contexte}. Ainsi, les deux lignes suivantes sont équivalentes. - - -@example -\set Voice.autoBeaming = ##t -\set autoBeaming = ##t -@end example - - -@cindex \once -Pour modifier une propriété de façon à ce qu'elle ne s'applique qu'une seule fois, -il convient d'employer la commande @code{\once} : - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\once \set fontSize = #4.7 -c4 -c4 -@end lilypond - -Ici le changement de taille est annulé aussitôt après la note concernée. - -La référence du programme contient une description exhaustive de toutes les -propriétés contexte par contexte : voir -@ifhtml -@rinternals{Tunable context properties}. -@end ifhtml -@ifnothtml -Translation @expansion{} Tunable context properties. -@end ifnothtml - - -@node The override command -@subsection The @code{\override} command - - -La commande @code{\override} permet de modifier la mise en page -en détail. Examinons son utilisation concrètementet dans les détails. -La syntaxe de cette commande ressemble généralement à : - -@example -\override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur} -@end example - -La propriété @var{propriété} de l'objet @var{objet}, appartenant au contexte -@var{contexte}, se voit ainsi attribuer la valeur @var{valeur}. - - -@c deprecated node. Delete. --fv -@node Constructing a tweak -@subsection Constructing a tweak - -Les commandes permettant de modifier l'apparence de la partition -ressemblent en général à - -@example -\override Voice.Stem #'thickness = #3.0 -@end example - -@noindent -Pour élaborer un réglage de ce type, on a besoin de connaître précisément : - -@itemize -@item le contexte : ici @code{Voice} (la voix). -@item l'objet à affecter : ici @code{Stem} (les hampes). -@item la propriété à modifier : ici @code{thickness} (l'épaisseur du trait). -@item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3). -@end itemize - -Certaines @q{sous-propriétés} sont parfois contenues dans une propriété. -La commande devient alors : - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - -@cindex documentation exhaustive -@cindex trouver des objets graphiques -@cindex objets graphiques, description -@cindex régler -@funindex \override - -Pour bien des propriétés, quel que soit le type de valeur requise, -attribuer la valeur @q{faux} (@code{##f} en Scheme) reviendra à désactiver -complètement l'action de la propriété qui se trouve ainsi purement -ignorée par LilyPond. Cela peut s'avérer fort utile pour des propriétés -causant des désagréments. - -@c such announcements are to be avoided -vv -@ignore -We demonstrate how to glean this information from the notation manual -and the program reference. -@end ignore - - -@node The tweak command -@subsection The @code{\tweak} command - - -@funindex \tweak - -Dans certains cas, on peut passer par un raccourci pour arranger les -objets graphiques. Lorsqu'un objet est directement engendré par un élément distinct -du fichier source, on peut utiliser la commande @code{\tweak}. - -Dans l'accord suivant, les notes sont modifiées une par une : - -@lilypond[relative=2,fragment,verbatim,ragged-right] -< - c - \tweak #'color #red d - g - \tweak #'duration-log #1 a ->4-\tweak #'padding #10 -. -@end lilypond - -Comme on peut le voir, les propriétés sont ici modifiées directement -en même temps que les objets sont saisis. Il n'est plus besoin de spécifier ni -le nom de l'objet (@emph{grob}), ni le contexte dans lequel cela doit s'appliquer. - -Ce procédé ne marche que pour des objets directement liés aux évènements -(@rinternals{Event}) du fichier source. Par exemple : - -@itemize @bullet -@item Les têtes de notes au sein d'un accord, qui sont directement engendrées par -les hauteurs indiquées -@item Les signes d'articulation, engendrés par les indications de ponctuation. -@end itemize - -En revanche, les hampes ou les altérations sont engendrées par les têtes de notes, -et non par des évènements dans le fichier source. De même pour les clés, qui ne -sont pas directement engendrées par le fichier source, mais plutôt par le -changement d'une propriété interne. - -En fait, très peu d'objets passent @emph{directement} du code source à la partition. -Une note toute simple, par exemple @code{c4}, fait l'objet d'un traitement et n'est donc -pas directement rendue ; c'est pourquoi le code suivant ne sera d'aucun effet : - -@example -\tweak #'color #red c4 -@end example - -@noindent -Voir pour plus de détails @ref{Displaying music expressions}. - - -@node set versus override -@subsection @code{\set} vs. @code{\override} - - -Si les propriétés peuvent être modifiées de deux façons, par les commandes -@code{\set} et @code{\override}, c'est qu'il y a deux types de propriétés. - -Les contextes peuvent avoir des propriétés, dont les noms commencent par une -minuscule puis comprennent une ou plusieurs majuscules (de style -@code{totoTutu}). Elles ont surtout trait -à la notation des éléments musicaux : par exemple, @code{localKeySignature} permet -de choisir s'il faut ou non imprimer une altération, ou @code{measurePosition} permet -de choisir quand il faut imprimer une barre de mesure. Ces propriétés de contextes -sont appelées à changer au long de l'interprétation de la partition : -@code{measurePosition} en est un exemple évident. Ces propriétés doivent -être modifiées avec la commande @code{\set}. - -Il existe un type particulier de propriétés : les descriptions -d'éléments. Ces propriétés, dont les noms commencent par une majuscule, puis comprennent -une ou plusieurs majuscules (de style @code{TotoTata}), contiennent les réglages -@q{par défaut} pour les objets graphiques. Ces réglages sont sous forme de liste Scheme ; on -peut les consulter dans le fichier @file{scm/@/define@/-grobs@/.scm}. -Les descriptions d'éléments doivent être modifiées avec la commande @code{\override}. - -@code{\override} est en fait un raccourci : - -@example -\override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur} -@end example - -@noindent -est plus ou moins l'équivalent de - -@c leave this long line -gp -@example -\set @var{contexte}.@var{objet} #'@var{propriété} = #(cons (cons '@var{propriété} @var{valeur}) >} -@tab ajouter des portées -@tab -@lilypond[fragment] -<< \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } - \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } >> -@end lilypond - - -@item @code{c-> c-.} -@tab indications d'articulation -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c-> c-. -@end lilypond - - -@item @code{c\mf c\sfz} -@tab nuances -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c2\mf c\sfz -@end lilypond - - -@item @code{a\< a a\!} -@tab crescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\< a a\! -@end lilypond - -@item @code{a\> a a\!} -@tab decrescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\> a a\! -@end lilypond - - -@item @code{< >} -@tab accords -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible - -@end lilypond - - -@item @code{\partial 8} -@tab levées -@tab -@lilypond[fragment,relative=2] -\partial 8 -f8 c2 d e -@end lilypond - - -@item @code{\times 2/3 @{f g a@}} -@tab triolets -@tab -@lilypond[relative=1,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\times 2/3 { f8 g a } -@end lilypond - - -@item @code{\grace} -@tab appogiatures -@tab -@lilypond[relative=2,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Voice { \grace b16 c4 } -@end lilypond - -@item @code{\lyricmode @{ twinkle @}} -@tab ajouter des paroles -@tab -twinkle - - -@item @code{\new Lyrics} -@tab imprimer les paroles -@tab -@lilypond[fragment] -\new Lyrics \lyricmode { twinkle } -@end lilypond - -@item @code{twin -- kle} -@tab diviser un mot en plusieurs syllabes -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -<< - { g'1 g } - \new Lyrics \lyricsto "" { twin -- kle } ->> -@end lilypond - -@item @code{\chordmode @{ c:dim f:maj7 @}} -@tab accords chiffrés -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\chordmode { c:dim f:maj7 } -@end lilypond - -@item @code{\context ChordNames} -@tab imprimer les chiffrages d'accords -@tab -@lilypond[fragment,relative=2] -\chords { c:dim f:maj7 } -@end lilypond - -@item @code{<<@{e f@} \\ @{c d@}>>} -@tab polyphonie -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Staff <<{e f} \\ {c d}>> -@end lilypond - - -@item @code{s4 s8 s16} -@tab silences invisibles -@tab - -@end multitable diff --git a/Documentation/fr/user/chords.itely b/Documentation/fr/user/chords.itely deleted file mode 100644 index 9033a3a785..0000000000 --- a/Documentation/fr/user/chords.itely +++ /dev/null @@ -1,646 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: bdf8540b74167817eab96ed3d13b35477217f9fe - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - -@node Chord notation -@section Chord notation - -@untranslated - -@menu -* Chord mode:: -* Displaying chords:: -* Figured bass:: -@end menu - -@node Chord mode -@subsection Chord mode - -@untranslated - -@menu -* Chord mode overview:: -* Common chords:: -* Extended and altered chords:: -@end menu - -@c This material comes from 'Entering chord names' -FV -@node Chord mode overview -@unnumberedsubsubsec Chord mode overview - -@cindex accords, chiffrage jazz - -LilyPond permet de désigner les accords par leur chiffrage jazz. -S'il est possible d'entrer un accord sous sa forme musicale, avec -@code{<.. >}, on peut aussi le saisir par son nom. Le logiciel traite -les accords comme des ensembles de hauteurs, donc les accords peuvent -être transposés. - -@lilypond[quote,ragged-right,verbatim,ragged-right] -twoWays = \transpose c c' { - \chordmode { - c1 f:sus4 bes/f - } - - - -} - -<< \new ChordNames \twoWays - \new Voice \twoWays >> -@end lilypond - -Cet exemple montre également que les jeux d'instructions qui permettent -à LilyPond d'imprimer des accords ne cherchent pas à se montrer -intelligents. Ici, le dernier accord n'est pas interprété comme étant -renversé. - -Notez bien que la valeur rythmique des accords doit être indiquée -@emph{à l'extérieur} des symboles @code{<>}. - -@example -2 -@end example - -@c This material comes from 'Chords mode' -FV -@node Common chords -@unnumberedsubsubsec Common chords - -Dans le mode accords, introduit par la commande @code{\chordmode}, les -accords ne sont indiqués que par leur note fondamentale. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { es4. d8 c2 } -@end lilypond - -@cindex saisir des accords -@cindex mode accords - -On peut cependant obtenir des accords différents, en utilisant le -caractère deux points (@code{:}). - -@lilypond[quote,fragment,verbatim] -\chordmode { e1:m e1:7 e1:m7 } -@end lilypond - -Le nombre accolé à la note fondamentale est considéré comme chiffrage -jazz de l'accord, qui est de ce fait construit par un empilement de -tierces. Notez l'exception que constitue @code{c:13} dans lequel la -onzième est délibérément omise. - -@lilypond[quote,fragment,verbatim] -\chordmode { c:3 c:5 c:6 c:7 c:8 c:9 c:10 c:11 c:13 } -@end lilypond - -@cindex note fondamentale -@cindex notes ajoutées -@cindex accords incomplets - -Des accords encore plus complexes peuvent être élaborés en plusieurs -étapes séparées. Ainsi, on peut enrichir l'accord par des notes -ajoutées, que l'on indique après le chiffrage principal et que l'on -sépare par des points : - -@lilypond[quote,verbatim,fragment] -\chordmode { c:5.6 c:3.7.8 c:3.6.13 } -@end lilypond - -On peut augmenter ou diminuer certains intervalles au moyen des -signes @code{-} ou @code{+} : - -@lilypond[quote,verbatim,fragment] -\chordmode { c:7+ c:5+.3- c:3-.5-.7- } -@end lilypond - -On peut aussi enlever certaines notes de l'accord, en les spécifiant -après un signe @code{^} --- les notes ajoutées doivent être indiquées -@emph{avant} les notes à enlever. - -@lilypond[quote,verbatim,fragment] -\chordmode { c^3 c:7^5 c:9^3.5 } -@end lilypond - -Voici les différents chiffrages disponibles, en plus des nombres que -nous venons de voir : - -@table @code -@item m -Accord mineur. Ce chiffrage minorise la tierce, et la septième s'il y -en a une. - -@item dim -Accord diminué. Ce chiffrage minorise la tierce, diminue la quinte et -la septième s'il y en a. - -@item aug -Accord augmenté. Ce chiffrage augmente la quinte. - -@item maj -Accord de septième majeure. Ce chiffrage majorise la septième s'il y -en a une (dans le cas d'un accord parfait, ce chiffrage est facultatif). - -@item sus -Accord de suspension. Ce chiffrage supprime la tierce, et y ajoute, -suivant que vous spécifiez @code{2} ou @code{4}, la seconde ou la -quarte. -@end table - -Il est bien sûr possible de mélanger ces chiffrages avec des notes ajoutées. -@lilypond[quote,verbatim,fragment] - \chordmode { c:sus4 c:7sus4 c:dim7 c:m6 } -@end lilypond - -@cindex chiffrages des accords -@funindex aug -@funindex dim -@funindex maj -@funindex sus -@funindex m - -Dans la mesure où un accord de treizième majeure ne sonne pas très bien -avec la onzième, la onzième est enlevée automatiquement, à moins que -vous ne le spécifiez explicitement. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { c:13 c:13.11 c:m13 } -@end lilypond - -@funindex / - -Les accords peuvent être renversés ou combinés avec une note étrangère à -la basse, au moyen de @code{@var{accord}/}@var{note} -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { c1 c/g c/f } -@end lilypond -@funindex /+ - -Si la note de basse précisée appartient à l'accord, la doublure -supérieure sera supprimée. Pour l'éviter, utilisez la syntaxe -@code{/+}@var{note}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { c1 c/+g c/+f } -@end lilypond - -Le mode accords est semblable à @code{\lyricmode} ou autre, c'est-à-dire que -la plupart des commandes sont encore disponibles ; ainsi, @code{r} ou -@code{\skip} peuvent servir à insérer des silences ou des silences -invisibles. De plus, les propriétés des objets peuvent être ajustées -ou modifiées. - -@knownissues - -Aucun nom de note ne peut être indiqué deux fois dans un accord. Ainsi, -dans l'accord suivant, seule la quinte augmentée est prise en compte, -car elle est indiquée en dernier : - -@cindex agrégats -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { c:5.5-.5+ } -@end lilypond - -@node Extended and altered chords -@unnumberedsubsubsec Extended and altered chords - -@untranslated - -@node Displaying chords -@subsection Displaying chords - -@untranslated - -@menu -* Printing chord names:: -* Customizing chord names:: -@end menu - -@node Printing chord names -@unnumberedsubsubsec Printing chord names - -@cindex chiffrages d'accords -@cindex accords - -Les chiffrages d'accords sont liés au contexte -@rinternals{ChordNames}. Les accords peuvent être saisis soit au -moyen de la notation indiquée ci-dessus, soit directement avec les -symboles @code{<} et @code{>}. - -@lilypond[quote,verbatim,ragged-right] -harmonies = { - \chordmode {a1 b c} -} -<< - \new ChordNames \harmonies - \new Staff \harmonies ->> -@end lilypond - -Vous pouvez faire ressortir les chiffrages d'accords en assignant la -valeur vrai à la propriété @code{chordChanges} dans le contexte -@rinternals{ChordNames}. De cette façon, les chiffrages ne sont -imprimés qu'aux changements d'accord ou en début de ligne. - -@lilypond[quote,verbatim,ragged-right] -harmonies = \chordmode { - c1:m c:m \break c:m c:m d -} -<< - \new ChordNames { - \set chordChanges = ##t - \harmonies } - \new Staff \transpose c c' \harmonies ->> -@end lilypond - -Les exemples précédents montrent des chiffrages placés au-dessus de la -portée, mais ce n'est pas obligatoire : les accords peuvent également -être imprimés séparément -- auquel cas vous aurez peut-être besoin -d'ajouter le @rinternals{Volta_engraver} et le -@rinternals{Bar_engraver} afin que les éventuelles barres de reprises -s'affichent correctement. - -@lilypond[ragged-right,verbatim] -\new ChordNames \with { - \override BarLine #'bar-size = #4 - \consists Bar_engraver - \consists "Volta_engraver" -} -\chordmode { \repeat volta 2 { - f1:maj7 f:7 bes:7 - c:maj7 -} \alternative { - es e -} -} -@end lilypond - -Le modèle par défaut des chiffrages d'accord est celui de -Klaus Ignatzek pour le jazz (cf. @ref{Literature list}). Il s'agit -d'une notation anglo-saxonne ; cependant vous pouvez -indiquer vos chiffrages en notation française au moyen de -la commande \frenchChords (voir plus bas). - -Il est possible de créer votre propre modèle de chiffrages en -réglant les propriétés suivantes : - -@table @code -@funindex chordNameExceptions -@item chordNameExceptions -C'est la liste des accords mis en forme de manière particulière. - -Cette liste d'exceptions s'indique de la façon suivante. -On commence par créer une expression musicale telle que -@example -@code{chExceptionMusic} = @{ 1 \markup @{ \super "7" "wahh" @} @} -@end example -puis on la transforme en liste d'exceptions au moyen du code -@example -(sequential-music-to-chord-exceptions chExceptionMusic #t) -@end example -Pour qu'elles soient effectives, on ajoute ces exceptions aux exceptions -par défaut définies dans @file{ly/@/chord@/-modifier@/-init@/.ly} : -@example -(append - (sequential-music-to-chord-exceptions chExceptionMusic #t) - ignatzekExceptions) -@end example - -@cindex exceptions, chiffrage d'accords -@cindex chiffrage d'accords, exceptions -@cindex accords chiffrés, exceptions -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{chord-name-exceptions.ly} - -@funindex majorSevenSymbol -@item majorSevenSymbol -Cette propriété définit l'objet employé pour indiquer une septième -majeure. Les options prédéfinies sont @code{whiteTriangleMarkup} -(triangle blanc) et @code{blackTriangleMarkup} (triangle noir). - -@funindex chordNameSeparator -@item chordNameSeparator -Les différents termes d'un chiffrage jazz (par exemple les notes de -l'accord et la basse) sont habituellement séparés par une barre oblique. -La propriété @code{chordNameSeparator} permet d'indiquer un autre -séparateur, par exemple -@lilypond[quote,ragged-right,fragment,verbatim] -\new ChordNames \chordmode { - c:7sus4 - \set chordNameSeparator - = \markup { \typewriter "|" } - c:7sus4 -} -@end lilypond - -@funindex chordRootNamer -@item chordRootNamer -Dans les chiffrages d'accord jazz, la note fondamentale de chaque accord -est exprimée par une lettre capitale, parfois suivie d'une altération, -correspondant à la notation anglo-saxonne de la musique. Cette -propriété a pour valeur la fonction qui transforme la hauteur de la note -foncdamentale en nom de note ; c'est donc en assignant une nouvelle -fonction à cette propriété que l'on peut produire des noms de note -spéciaux, adaptés par exemple aux systèmes de notation d'autres pays. - -@funindex chordNoteNamer -@item chordNoteNamer -Lorsqu'un chiffrage mentionne une note ajoutée (par exemple la basse), -les règles utilisées sont par défaut celles définies par la propriété -@code{chordRootNamer} ci-dessus. Cependant, la propriété @code{chordNoteNamer} -permet de régler cet élément indépendamment, par exemple pour imprimer la basse -en caractères minuscules. - -@funindex chordPrefixSpacer -@item chordPrefixSpacer -Le petit @q{m} qui indique un accord mineur est, dans la notation anglo-saxonne, -attaché à la lettre de l'accord. Cependant il est possible d'ajouter un espace -en assignant la valeur vrai à la propriété @code{chordPrefixSpacer}. Cet -espace sera omis si une altération est présente. - -@end table - -Les propriétés ci-dessus font l'objet de commandes prédéfinies -adaptées aux notations de différents pays : @code{\germanChords} et -@code{\semiGermanChords} pour la notation allemande, -@code{\italianChords} pour la notation italienne et enfin -@code{\frenchChords} pour la notation française. - -@lilypondfile[ragged-right]{chord-names-languages.ly} - -@cindex Banter -@cindex jazz, chiffrages d'accords -@cindex accords jazz, chiffrage -LilyPond intègre également deux autres modèles de chiffrages : une -notation Jazz alternative, et un modèle systématique appelé système -Banter. Pour la mise en œuvre de ces modèles, voir @ref{Chord name chart}. - - -@predefined -@funindex \germanChords -@code{\germanChords}, -@funindex \semiGermanChords -@code{\semiGermanChords}, -@funindex \italianChords -@code{\italianChords}, -@funindex \frenchChords -@code{\frenchChords}. -@endpredefined - - -@seealso -Exemples : @rlsr{Chords}. - -Fichiers internes : @file{scm/@/chords@/-ignatzek@/.scm}, et -@file{scm/@/chord@/-entry@/.scm}. - - -@knownissues - -Les chiffrages d'accords ne sont déterminés que par la succession des -hauteurs de notes. En d'autres termes, les accords inversés ne sont pas -reconnus, ni les notes ajoutées à la basse. C'est pourquoi les accords -saisis au moyen de la syntaxe @code{<.. >} peuvent produire des -chiffrages étranges. - -@node Customizing chord names -@unnumberedsubsubsec Customizing chord names - -@untranslated - -@node Figured bass -@subsection Figured bass - -@untranslated - -@menu -* Introduction to figured bass:: -* Entering figured bass:: -* Displaying figured bass:: -@end menu - -@c This material comes from 'Figured bass', needs redistribution by translator --FV -@node Introduction to figured bass -@unnumberedsubsubsec Introduction to figured bass - -@cindex basse continue -@cindex basse chiffrée - -@c TODO: musicological blurb about FB -@c librement adapté de -@c http://en.wikipedia.org/wiki/Basso_continuo#Basso_continuo -Les parties de basse continue étaient très répandues dans la musique -baroque et jusqu'à la fin du XVIIIe siècle. Comme son nom -l'indique, le @emph{continuo} constitue une partie à lui seul, qui -se déroule tout au long de l'œuvre pour en donner la structure harmonique. - -Les musiciens du @emph{continuo} jouent des claviers (clavecin, -orgue) ou de tout autre instrument pouvant réaliser des accords. Leur -partie est constituée d'une portée de basse aux notes agrémentées de -combinaisons de chiffres et signes indiquant le développement des -accords à jouer, ainsi que leur éventuel renversement. Cette notation -était avant tout un guide, invitant le musicien à improviser de -lui-même l'accompagnement. - -LilyPond gère la basse chiffrée. - -@lilypond[quote,ragged-right,verbatim,fragment] -<< - \new Voice { \clef bass dis4 c d ais g fis} - \new FiguredBass \figuremode { - < 6 >4 < 7\+ >8 < 6+ [_!] > - < 6 >4 <6 5 [3+] > - < _ >4 < 6 5/>4 - } ->> -@end lilypond - -La gestion de la basse chiffrée se décompose en deux parties. Dans un -premier temps, le mode @code{\figuremode} permet de saisir les accords -sous forme chiffrée. Le contexte @rinternals{FiguredBass} s'occupera -ensuite de gérer les objets @rinternals{BassFigure}. - -En mode de saisie, un chiffrage est délimité par @code{<} et -@code{>}. La durée est indiquée après le @code{>} : - -@example -<4 6> -@end example -@lilypond[quote,ragged-right,fragment] -\new FiguredBass -\figuremode { <4 6> } -@end lilypond - -Les altérations s'obtiennent en ajoutant aux chiffres les caractères -@code{-}, @code{!} ou @code{+}. Un signe plus s'obtient grâce à -@code{\+}, et une quinte ou septième diminuée par @code{5/} ou -@code{7/} respectivement. - -@example -<4- 6+ 7!> <5++> <3--> <7/> r <6\+ 5/> -@end example -@lilypond[quote,ragged-right,fragment] -\figures { <4- 6+ 7!> <5++> <3--> <7/> r <6\+ 5/> } -@end lilypond - -Le caractère @code{_} insère un espace, et l'on peut imprimer des -crochets avec @code{[} et @code{]}. Vous pouvez aussi ajouter des -chaînes de caractères ou des étiquettes --- cf. @ref{Text -markup commands}. - -@example -<[4 6] 8 [_! 12] > <5 \markup @{ \number 6 \super (1) @} > -@end example -@lilypond[quote,ragged-right,fragment] -\new FiguredBass -\figuremode { < [4 6] 8 [_! 12] > < 5 \markup{ \tiny \number 6 \super (1)} > } -@end lilypond - -Lorsque des chiffrages se répètent, vous pouvez utiliser des lignes de -prolongation. - -@lilypond[verbatim,relative=1] -<< - \new Staff { - \clef bass - c4 c c - } - \figures { - \set useBassFigureExtenders = ##t - <4 6> <3 6> <3 7> - } ->> -@end lilypond - -@noindent -En pareil cas, la ligne de prolongation masquera toujours le chiffre -qu'elle rappelle dans le chiffrage suivant. - -Le contexte @code{FiguredBass} ne tient aucun compte de la ligne de -basse. Par conséquent, il vous faudra peut être insérer des chiffrages -supplémentaires pour imprimer les prolongations, ou utiliser des -@code{\!} pour les éviter, comme dans l'exemple suivant : - -@lilypond[relative=1] -<< - \new Voice - \figures { - \set useBassFigureExtenders = ##t - <6 4->4. <6 4->16. <6 4->32 <5>8. r16 <6>8 <6\! 5-> - } - { - \clef bass - f16. g32 f16. g32 f16. g32 f16. g32 f8. es16 d8 es - } ->> -@end lilypond - -Lorsque vous utilisez des lignes de prolongation, les chiffres communs -seront verticalement alignés. Pour l'éviter, insérez un silence avec -@code{r} afin de réinitialiser l'alignement. Par exemple, saisissez - -@example - <4 6>8 r8 -@end example - -@noindent -au lieu de -@example - <4 6>4 -@end example - -On peut choisir d'impriemr les altérations et signes plus aussi bien -avant qu'après les chiffres, en réglant les propriétés -@code{figuredBassAlterationDirection} et -@code{figuredBassPlusDirection}. - -@lilypond - \figures { - <6\+> <5+> <6 4-> r - \set figuredBassAlterationDirection = #1 - <6\+> <5+> <6 4-> r - \set figuredBassPlusDirection = #1 - <6\+> <5+> <6 4-> r - \set figuredBassAlterationDirection = #-1 - <6\+> <5+> <6 4-> r - } -@end lilypond - -Bien que la gestion de la basse chiffrée ressemble beaucoup à celle -des accords, elle est beaucoup plus simpliste. Le mode -@code{\figuremode} ne fait que stocker des chiffres que le contexte -@rinternals{FiguredBass} se chargera d'imprimer tels quels. En -aucune manière ils ne sont transformés en son, et ils ne sont pas -rendus dans un fichier MIDI. - -En interne, ce code produit des étiquettes de texte que vous -pouvez formater à votre convenance grâce aux propriétés des -étiquettes. Par exemple, l'espacement vertical des chiffrages est -déterminé par la propriété @code{baseline-skip}. - -On peut également ajouter une basse chiffrée directement à un contexte -@code{Staff}. L'alignement vertical est alors automatiquement ajusté. - -@lilypond[ragged-right,fragment,quote] -<< - \new Staff = someUniqueName - \relative c'' { - c4 c'8 r8 c,4 c' - } - - %% send to existing Staff. - \context Staff = someUniqueName - \figuremode { - <4>4 <6 10>8 s8 - - \set Staff.useBassFigureExtenders = ##t - <4 6>4 <4 6> - } ->> -@end lilypond - -@commonprop - -Par défaut, les chiffres sont imprimés au-dessus de la portée. Pour les -imprimer dessous, ajoutez - -@example -\override Staff.BassFigureAlignmentPositioning #'direction = #DOWN -@end example - -@knownissues - -Si vous positionnez la basse chiffrée au dessus de la portée en ayant -recours aux lignes d'extension et @code{implicitBassFigures}, les lignes -peuvent se mélanger. Préserver l'ordre des prolongateurs peut s'avérer -impossible lorsque plusieurs chiffrages qui se chevauchent en possèdent. -Ce problème peut être contourné en jouant sur l'empilement, avec la -propriété @code{stacking-dir} de l'objet @code{BassFigureAlignment}. - - -@seealso -Référence du programme : les objets @rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, @rinternals{BassFigureLine}, -@rinternals{BassFigureBracket} et -@rinternals{BassFigureContinuation}, ainsi que le contexte -@rinternals{FiguredBass}. - - -@node Entering figured bass -@unnumberedsubsubsec Entering figured bass - -@untranslated - -@node Displaying figured bass -@unnumberedsubsubsec Displaying figured bass - -@untranslated diff --git a/Documentation/fr/user/converters.itely b/Documentation/fr/user/converters.itely deleted file mode 100644 index 58fa6f00fd..0000000000 --- a/Documentation/fr/user/converters.itely +++ /dev/null @@ -1,357 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: e2070eadd7d3d7a87450aab195a48945ee0b144a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Jean-Charles Malahieude - -@node Converting from other formats -@chapter Converting from other formats - -La musique peut aussi être récupérée par importation d'un autre -format. Ce chapitre passe en revue les différents outils prévus à cet -effet et inclus dans la distribution. Il existe d'autres outils qui -permettent de générer du code LilyPond, comme par exemple des -séquenceurs en mode graphique ou des convertisseurs XML. Pour plus -de détails, rendez-vous sur le @uref{http://@/lilypond@/.org,site}. - -Il s'agit de programmes distincts de @command{lilypond} qui se lancent -en ligne de commande. Pour plus de précisions, reportez-vous au -chapitre @ref{Command-line usage}. Si vous utilisez MacOS 10.3 ou 10.4 -et recontrez quelque problème avec l'un de ces scripts, comme -@code{convert-ly}, reportez-vous au chapitre @ref{Setup for MacOS X}. - -@knownissues - -Les développeurs ne sont malheureusement pas suffisament nombreux et -disponibles pour maintenir à jour ces programmes, considérez-les donc -@emph{en l'état}. Nous acceptons les patches avec plaisir, mais il y a -peu de chance pour que nous soyons en mesure de résoudre les bogues de -ces programmes. - -@menu -* Invoking midi2ly:: importation de musique au format MIDI. -* Invoking musicxml2ly:: importation de partitions au format MusicXML. -* Invoking abc2ly:: importation de partitions au format ABC. -* Invoking etf2ly:: importation de partitions Finale. -* Generating LilyPond files:: interfaces graphiques, outils de - transcription et de composition algorithmique. -@end menu - - - -@node Invoking midi2ly -@section Invoking @command{midi2ly} - -@cindex MIDI - -@command{midi2ly} traduit un fichier MIDI de Type@tie{}1 en un fichier -source LilyPond. - -MIDI (Music Instrument Digital Interface) constitue un standard pour -les instruments. Il spécifie le cablage, un protocole série et un -format de fichier. Le format de fichier MIDI est de ce fait un format -standard pour exporter de la musique à partir d'autres programmes, et -cette faculté prend tout son intérêt lorsqu'un programme dispose d'un -convertisseur capable d'importer directement un fichier. - -@command{midi2ly} convertit les pistes en contextes de portée -(@rinternals{Staff}) et les canaux en contextes de voix -(@rinternals{Voice}). Les hauteurs sont rendues en mode relatif, et -les durées spécifiées lorsque nécessaire. - -Vous pouvez enregistrer un fichier MIDI grâce à un clavier -électronique et ensuite le convertir en fichier @file{.ly}. Néanmoins -le rythme humain n'a pas une précision suffisante pour qu'une -conversion MIDI à ly ne se fasse sans surprise. En le couplant à une -quantisation (options @code{-s} et @code{-d}), @command{midi2ly} tente -de compenser dans la mesure du possible ces problèmes de -temporisation. C'est la raison pour laquelle le recours à -@command{midi2ly} n'est pas recommandé pour des fichiers midi générés -manuellement. - - -Pour le lancer en ligne de commande, procédez ainsi : -@example -midi2ly [@var{option}]@dots{} @var{fichier-midi} -@end example - -Notez bien que, par @qq{ligne de commande}, nous parlons de la ligne de -commande du système. Pour plus de précisions, reportez-vous à -@ref{Command-line usage}. - -@command{midi2ly} accepte les options suivantes : - -@table @code -@item -a, --absolute-pitches -Rendu en hauteurs absolues. - -@item -d, --duration-quant=@var{DUR} -Quantiser les durées à partir de @var{DUR}. - -@item -e, --explicit-durations -Rendu explicite des durées. - -@item -h,--help -Afficher un résumé des utilisations. - -@item -k, --key=@var{acc}[:@var{minor}] -Déterminer la tonalité par défaut. @math{@var{acc} > 0} fixe le -nombre de dièses ; @math{@var{acc} < 0} le nombre de bémols. Une -tonalité mineure est spécifiée par l'emploi de @code{:1}. - -@item -o, --output=@var{file} -Générer le résultat dans le fichier @var{file}. - -@item -s, --start-quant=@var{DUR} -Quantiser le début des notes sur @var{DUR}. - -@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} -Accepter des n-olets de valeur @var{DUR}*@var{NUM}/@var{DEN}. - -@item -V, --verbose -Mode verbeux. - -@item -v, --version -Afficher le numéro de version. - -@item -w, --warranty -Afficher les mentions de garantie et de copyright. - -@item -x, --text-lyrics -Interpréter le texte comme des paroles. -@end table - - -@knownissues - -Le tuilage en arpège ne sera pas rendu correctement. La première note -sera lue et les suivantes ignorées. Affectez-leur une durée unique et -ajoutez une indication de phrasé ou de pédale. - - -@node Invoking musicxml2ly -@section Invoking @code{musicxml2ly} - -@cindex MusicXML - -@uref{http://@/www.@/musicxml@/.org/,MusicXML} est un -dialecte XML pour représenter la notation musicale. - -@command{musicxml2ly} extrait, à partir d'un fichier MusicXML, les -notes, articulations, structure de la partition, paroles, etc. -et les écrit dans un fichier @var{.ly}. Il se lance en ligne de -commande. - -Pour le lancer en ligne de commande, procédez ainsi : -@example -musicxml2ly [@var{option}]@dots{} @var{fichier-xml} -@end example - -Notez bien que, par @qq{ligne de commande}, nous parlons de la ligne de -commande du système. Pour plus de précisions, reportez-vous à -@ref{Command-line usage}. - -Si le nom du fichier est @file{-}, @command{musicxml2ly} lira -directement à partir de la ligne de commande. - -@command{musicxml2ly} accepte les options suivantes : - -@table @code -@item -a, --absolute -Rendu en hauteurs absolues. - -@item -h,--help -Afficher un résumé des utilisations. - -@item -l, --language=LANG -Utiliser un autre fichier de définition liguistique @file{LANG.ly} -et les noms de notes correspondants, comme par exemple -@var{deutsch} pour @file{deutsch.ly} et noms de notes en allemand. - -@item --lxml -Utiliser le paquetage Python lxml.etree, moins gourmand en mémoire et -temps de calcul, pour effectuer l'annalyse XML. - -@item --nd --no-articulation-directions -Ne pas convertir la direction (@code{^}, @code{_} ou @code{-}) des -articulations, nuances, etc. - -@item --no-beaming -Ne pas convertir les informations de ligature ; laisser LilyPond gérer -les ligatures automatiquement. - -@item -o,--output=@var{fichier} -Générer le résultat dans le fichier @var{fichier}. S'il n'est pas -déterminé, ce sera @var{fichier-xml}@file{.ly} ; @file{-} produira le -résultat sur la sortie standard (@var{stdout}). - -@item -r,--relative -Rendu en hauteurs relatives (mode par défaut). - -@item -v,--verbose -Mode verbeux. - -@item --version -Afficher le numéro de version. - -@item -z,--compressed -Le fichier d'entrée est un fichier MusicXML zippé. -@end table - - -@node Invoking abc2ly -@section Invoking @code{abc2ly} - -@cindex ABC - -ABC est un format relativement simple basé sur l'ASCII. Sa -description est disponible sur le -@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html,site -d'ABC}. - -@command{abc2ly} traduit du format ABC au format LilyPond. - -Pour le lancer en ligne de commande, procédez ainsi : -@example -abc2ly [@var{option}]@dots{} @var{fichier-abc} -@end example - -@command{abc2ly} accepte les options suivantes : - -@table @code -@item -b,--beams=None -Préserver la notion de lien de croches propre à ABC. -@item -h,--help -Afficher un résumé des utilisations. -@item -o,--output=@var{file} -Générer le résultat dans le fichier @var{file}. -@item -s,--strict -Être strict sur la réussite. -@item --version -Afficher le numéro de version. -@end table - -Il est possible d'ajouter des bribes de code LilyPond dans un fichier -source ABC. Ainsi, l'assertion - -@example -%%LY voices \set autoBeaming = ##f -@end example - -aura pour conséquence d'insérer le texte qui suit le mot-clé @qq{voices} -dans la voix correspondante du fichier LilyPond. - -De la même manière, - -@example -%%LY slyrics more words -@end example - -placera le texte suivant le mot-clé @qq{slyrics} dans une ligne de paroles. - - -@knownissues - -Le standard ABC n'est pas si @qq{standard} que cela. Pour des -fonctionnalités étendues, comme la polyphonie, existent différentes -conventions. - -Un fichier comportant plusieurs morceaux ne peut être converti. - -ABC synchronise paroles et musique en début de ligne ; -@command{abc2ly} ne le fait pas. - -@command{abc2ly} ignore les ligatures ABC. - - -@node Invoking etf2ly -@section Invoking @command{etf2ly} - -@cindex ETF -@cindex Enigma -@cindex Finale -@cindex Coda Technology - -ETF (Enigma Transport Format) est l'un des formats utilisés par le -logiciel Finale, édité par Coda Music Technology. @command{etf2ly} -convertit partiellement les fichiers ETF en fichiers source LilyPond. - - -Pour le lancer en ligne de commande, procédez ainsi : -@example -etf2ly [@var{option}]@dots{} @var{fichier-etf} -@end example - -Notez bien que, par @qq{ligne de commande}, nous parlons de la ligne de -commande du système. Pour plus de précisions, reportez-vous à -@ref{Command-line usage}. - -@command{etf2ly} accepte les options suivantes : - -@table @code -@item -h,--help -Afficher cette aide. -@item -o, --output=@var{file} -Générer le résultat dans le fichier @var{file}. -@item --version -Afficher le numéro de version. -@end table - - -@knownissues - -La liste des scripts d'articulation est incomplète. Les mesures vides -perturbent @command{etf2ly}. Les séquences de notes d'ornement ne se -terminent pas de manière satisfaisante. - - - -@node Generating LilyPond files -@section Generating LilyPond files - -@cindex programmes externes générant des fichiers LilyPond - -LilyPond ne prend pas en charge d'autre format. Cependant, certains -outils indépendants permettent de générer des fichiers LilyPond. - -Nous citerons entre autres - -@itemize -@item -@uref{http://@/denemo@/.org,Denemo}, une interface -graphique pour l'édition de partition. -@item -@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, un -convertisseur temps-réel de MIDI monophonique à LilyPond. -@item -@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, un -mode majeur pour Emacs. -@item -@uref{http://@/www@/.nongnu@/.org/@/xml2ly/, xml2ly}, qui importe du -@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML}. -@item -@uref{http://@/noteedit@/.berlios@/.de,NoteEdit} -qui importe du @uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML}. -@item -@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden}, -qui importe du MIDI. -@item -@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, -une bibliothèque LISP pour générer de la notation musicale. -@item -@uref{http://@/vsr@/.informatik@/.tu-chemnitz@/.de/staff/jan/nted/nted.xhtml,NtEd} -assure, de manière expérimentale, un export vers LilyPond. -@item -@uref{http://@/www@/.tuxguitar@/.com@/.ar/,TuxGuitar} peut exporter au -format LilyPond. -@item -@uref{http://@/musescore@/.org,MuseScore} peut exporter au format LilyPond. -@end itemize - diff --git a/Documentation/fr/user/dedication.itely b/Documentation/fr/user/dedication.itely deleted file mode 100644 index d1bda51268..0000000000 --- a/Documentation/fr/user/dedication.itely +++ /dev/null @@ -1,18 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: d56aa8181857c5feabf303ae88e716eba069f0a9 - - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@quotation -Nous souhaitons dédier ce programme à tous les amis que nous avons -rencontrés par la musique. - -Han-Wen et Jan -@end quotation diff --git a/Documentation/fr/user/editorial.itely b/Documentation/fr/user/editorial.itely deleted file mode 100644 index a473c00e3d..0000000000 --- a/Documentation/fr/user/editorial.itely +++ /dev/null @@ -1,476 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 33ba8d40c3493011a4b39ab8b1369701f8013bd6 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Jean-Charles Malahieude - -@node Editorial annotations -@section Editorial annotations - -@lilypondfile[quote]{editorial-headword.ly} - -@menu -* Inside the staff:: -* Outside the staff:: -@end menu - - -@node Inside the staff -@subsection Inside the staff - - -@menu -* Selecting notation font size:: -* Fingering instructions:: -* Hidden notes:: -* Coloring objects:: -* Parentheses:: -* Stems:: -@end menu - -@node Selecting notation font size -@unnumberedsubsubsec Selecting notation font size - -Le plus sûr moyen de régler la taille de la police, quelque soit le -contexte, consiste à définir la propriété @code{fontSize}. - -@lilypond[quote,fragment,relative=1,verbatim] -c8 -\set fontSize = #-4 -c f -\set fontSize = #3 -g -@end lilypond - -@noindent -Ceci ne modifiera en rien la taille des différents symboles tels que -ligatures ou liaisons. - -En interne, la propriété @code{fontSize} d'un contexte aura pour effet -de définir la propriété @code{font-size} pour tous les objets de -rendu. La valeur de @code{font-size} est un entier représentant la -taille proportionnellement à la hauteur standard de la portée en -cours. Chaque incrément correspond à une augmentation d'environ -12@tie{}% de la taille de la police. Un pas de six aboutit exactement -au doublement de la taille. La fonction Scheme @code{magstep} -convertit le nombre affecté à @code{font-size} en facteur d'échelle. -Vous pouvez aussi définir directement la propriété @code{font-size} de -manière à n'affecter seulement que certains objets de rendu. - -@lilypond[quote,fragment,relative=1,verbatim] -c8 -\override NoteHead #'font-size = #-4 -c f -\override NoteHead #'font-size = #3 -g -@end lilypond - -Pour changer la taille des symboles musicaux (police Feta), LilyPond met -à l'échelle la fonte dont la taille est la plus proche de la taille voulue --- -cf. @ref{Setting the staff size}. La taille standard, pour laquelle -@code{font-size} vaut 0, dépend de la hauteur de la portée. À une -portée de 20 points correspond une police de 10 points. - -La propriété @code{font-size} ne peut intervenir que pour les objets -qui utilisent des polices, autrement dit ceux qui disposent de -l'interface de rendu @rinternals{font-interface}. - - -@predefined -Les commandes suivantes définissent @code{fontSize} pour la voix en -cours : -@funindex \tiny -@code{\tiny}, -@funindex \small -@code{\small}, -@funindex \normalsize -@code{\normalsize}. -@endpredefined - - -@node Fingering instructions -@unnumberedsubsubsec Fingering instructions - -@cindex doigté -@cindex substitution de doigt - - -Les doigtés peuvent être indiqués comme suit : -@example -@var{note}-@var{chiffre_du_doigt} -@end example -Pour les substitutions de doigts, on a recours à une indication -textuelle (commande @code{\markup}) de doigté -(commande @code{\finger}). - -@lilypond[quote,verbatim,ragged-right,fragment,relative=1] -c4-1 c-2 c-3 c-4 -c^\markup { \finger "2 - 3" } -@end lilypond - - -La commande @code{\thumb} peut être utilisée pour indiquer, par exemple -dans une partition de violoncelle, si une note doit être jouée avec le -pouce (@q{thumb} en anglais). - -@lilypond[quote,verbatim,ragged-right,fragment,relative=2] -8 -@end lilypond - - -Les doigtés des accords peuvent être saisis note par note, -en les indiquant après chaque hauteur de note. - -@lilypond[quote,verbatim,ragged-right,fragment,relative=2] -< c-1 e-2 g-3 b-5 >4 -@end lilypond - - -@commonprop - -On peut contrôler précisément les doigtés des accords en réglant -la propriété @code{fingeringOrientations}. - -@lilypond[quote,verbatim,ragged-right,fragment,relative=1] -\set fingeringOrientations = #'(left down) - 4 -\set fingeringOrientations = #'(up right down) - 4 -@end lilypond - - -Cette propriété permet également, dans de la musique monophonique, -d'indiquer des doigtés très proches des têtes de notes. - -@lilypond[verbatim,ragged-right,quote,fragment] -\set fingeringOrientations = #'(right) -4 -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{avoiding-collisions-with-chord-fingerings.ly} - - -@seealso -Référence du programme : @rinternals{Fingering}. - -Exemples : @rlsr{Editorial annotations}. - - -@node Hidden notes -@unnumberedsubsubsec Hidden notes - -@cindex Masquées, notes -@cindex Invisibles, notes -@cindex Transparentes, notes - -@funindex \hideNotes -@funindex \unHideNotes -Les notes masquées --- ou invisibles ou encore transparentes --- sont -utiles dans le cadre d'exercices de théorie ou de composition. - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -c4 d4 -\hideNotes -e4 f4 -\unHideNotes -g4 a -@end lilypond - - -@node Coloring objects -@unnumberedsubsubsec Coloring objects - -Des objets peuvent être colorisés individuellement. Une listes des -noms des couleurs disponibles se trouvent à l'annexe @ref{List of colors}. - -@lilypond[quote,ragged-right,verbatim,fragment,relative=1] -\override NoteHead #'color = #red -c4 c -\override NoteHead #'color = #(x11-color 'LimeGreen) -d -\override Stem #'color = #blue -e -@end lilypond - -L'intégralité de la palette des couleurs définies pour X11 est -accessible par la fonction Scheme x11-color. Cette fonction prend -en argument une expression symbolique - -@example -\override Beam #'color = #(x11-color 'MediumTurquoise) -@end example - -ou une chaîne de caractères - -@example -\override Beam #'color = #(x11-color "MediumTurquoise") -@end example - -La première formulation est à la fois plus rapide à écrire et aussi -plus efficace. Néanmoins, la deuxième forme permet d'accéder aux noms -composés des couleurs de X11. - -@example -\override Beam #'color = #(x11-color "medium turquoise") -@end example - -Lorsque la fonction x11-color ne trouve pas le paramètre fourni, elle -revient à la couleur par défaut, le noir. Le problème ressort de -façon évidente au vu de la partition finale. - -L'exemple suivant illustre l'utilisation de la fonction -@code{x11-color}. Notez que, après avoir été définie à (x11-color -'Boggle), la couleur des hampes repasse au noir. - -@lilypond[quote,ragged-right,verbatim] -{ - \override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) - \set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" - } - \time 2/4 - gis''8 a'' - \override Beam #'color = #(x11-color "medium turquoise") - gis'' a'' - \override NoteHead #'color = #(x11-color "LimeGreen") - gis'' a'' - \override Stem #'color = #(x11-color 'Boggle) - gis'' a'' -} -@end lilypond - - -@seealso -Annexes : @ref{List of colors}. - - -@knownissues -Les couleurs de X11 ne sont pas toutes perceptibles dans un navigateur -internet. Aussi nous vous recommandons, dans le cadre d'une -présentation multimedia, d'utiliser des couleurs de base. - -Une couleur x11 n'aura pas forcément le même rendu qu'une couleur -normale ayant un nom similaire. - -Vous ne pouvez pas coloriser des notes à l'intérieur d'un accord avec -@code{\override}. si besoin est, utilisez @code{\tweak}. -Pour plus de détails, consultez @ref{The tweak command}. - - -@node Parentheses -@unnumberedsubsubsec Parentheses - -@cindex fantômes, notes -@cindex notes fantômes -@cindex parenthèses, notes entre - -Des objets peuvent être mis entre parenthèses en saisissant -@code{\parenthesize} juste avant l'événement musical. - -@lilypond[relative=2,fragment,verbatim,ragged-right] -< - c - \parenthesize d - g ->4-\parenthesize -. -@end lilypond - -Ceci n'est opérationnel que dans le cadre d'un accord, qui peut ne -comprendre qu'une seule note. - -@example -< \parenthesize NOTE> -@end example - - -@node Stems -@unnumberedsubsubsec Stems - -Dès qu'une note est rencontrée, un objet @rinternals{Stem} se crée -automatiquement. Pour les rondes et les silences, ils sont aussi -créés, mais en mode invisible. - - -@predefined -@funindex \stemUp -@code{\stemUp}, -@funindex \stemDown -@code{\stemDown}, -@funindex \stemNeutral -@code{\stemNeutral}. -@endpredefined - - -@commonprop - -Pour changer la direction des hampes au milieu de la portée, utilisez - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -a4 b c b -\override Stem #'neutral-direction = #up -a4 b c b -\override Stem #'neutral-direction = #down -a4 b c b -@end lilypond - - -@node Outside the staff -@subsection Outside the staff - - -@menu -* Balloon help:: -* Grid lines:: -* Analysis brackets:: -* Blank music sheet:: -@end menu - -@node Balloon help -@unnumberedsubsubsec Balloon help - -Vous pouvez marquer et nommer des éléments de notation à l'aide de -bulles. L'objectif premier de cette fonctionnalité est d'expliquer la -notation. - -En voici un exemple : -@c KEEP LY -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonGrobText #'Stem #'(3 . 4) \markup { "Je suis une hampe" } - 8 -} -@end lilypond - -@noindent -Vous disposez de deux fonctions musicales, @code{balloonText} et -@code{balloonGrobText}. @code{balloonGrobText} prend en argument -l'objet graphique à agrémenter, alors que @code{balloonText} s'utilise -comme une simple articulation. Les autres arguments sont le décalage -et le texte de la bulle. - -@cindex bulles -@cindex notation, expliquer - - -@seealso -Référence du programme : @rinternals{balloon-interface}. - - -@node Grid lines -@unnumberedsubsubsec Grid lines - -Vous pouvez tracer des lignes entre les portées, synchronisées avec -les notes. -@c KEEP LY -@lilypond[ragged-right,quote,verbatim] -\layout { - \context { - \Staff - \consists "Grid_point_engraver" %% active les guides - gridInterval = #(ly:make-moment 1 4) - } -} - -\new Score \with { - \consists "Grid_line_span_engraver" - %% centre les lignes guides horizontalement sous les notes - \override NoteColumn #'X-offset = #-0.5 -} - -\new ChoirStaff << - \new Staff { - \stemUp - \relative { - c'4. d8 e8 f g4 - } - } - \new Staff { - %% centre les lignes guides verticalement - \override Score.GridLine #'extra-offset = #'( 0.0 . 1.0 ) - \stemDown - \clef bass - \relative c { - c4 g' f e - } - } ->> -@end lilypond - -Exemples : @rlsr{Editorial annotations}. - - -@node Analysis brackets -@unnumberedsubsubsec Analysis brackets -@cindex crochets -@cindex crochets de phrasé -@cindex analyse musicologique -@cindex crochet de regroupement de notes - -On utilise des crochets en analyse musicale, pour indiquer la -structure d'une pièce. LilyPond permet d'utiliser une forme -simplifiée de crochets horizontaux imbriqués, dans la mesure où le -contexte @rinternals{Staff} comporte le graveur -@rinternals{Horizontal_bracket_engraver}. Un crochet s'ouvre avec -@code{\startGroup}, et se ferme avec @code{\stopGroup}. - -@lilypond[quote,ragged-right,verbatim] -\score { - \relative c'' { - c4\startGroup\startGroup - c4\stopGroup - c4\startGroup - c4\stopGroup\stopGroup - } - \layout { - \context { - \Staff \consists "Horizontal_bracket_engraver" -}}} -@end lilypond - - -@seealso -Référence du programme : @rinternals{HorizontalBracket}. - - -@node Blank music sheet -@unnumberedsubsubsec Blank music sheet - -@cindex Papier musique -@cindex Portées, feuille blanche - -Une feuille de papier musique s'obtient en utilisant des notes -invisibles, et en invalidant le @code{Bar_number_engraver}. - -@c KEEP LY -@lilypond[quote,verbatim] -\layout{ indent = #0 } -emptymusic = { - \repeat unfold 2 % À modifier pour plus de lignes. - { s1\break } - \bar "|." -} -\new Score \with { - \override TimeSignature #'transparent = ##t -% décommenter la ligne suivante selon besoin -% \override Clef #'transparent = ##t - defaultBarType = #"" - \remove Bar_number_engraver -} << - -% à adapter selon les portées désirées - \new Staff \emptymusic - \new TabStaff \emptymusic ->> -@end lilypond - - diff --git a/Documentation/fr/user/expressive.itely b/Documentation/fr/user/expressive.itely deleted file mode 100644 index 385b61aca5..0000000000 --- a/Documentation/fr/user/expressive.itely +++ /dev/null @@ -1,681 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 33ba8d40c3493011a4b39ab8b1369701f8013bd6 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - - -@node Expressive marks -@section Expressive marks - -@lilypondfile[quote]{expressive-headword.ly} - -@menu -* Attached to notes:: -* Curves:: -* Lines:: -@end menu - - -@node Attached to notes -@subsection Attached to notes - - -@menu -* Articulations and ornamentations:: -* Dynamics:: -* New dynamic marks:: -@end menu - -@node Articulations and ornamentations -@unnumberedsubsubsec Articulations and ornamentations - -@cindex articulations -@cindex symboles d'ornementation -@cindex ornementation, symboles - - -Différents symboles peuvent être ajoutés au-dessus ou au-dessous des -notes pour indiquer des ponctuations ou des modes de jeu différents. -On les ajoute à chaque note au moyen d'un tiret suivi du caractère -correspondant à l'articulation désirée. En voici une démonstration : - -@c @l ilypondfile[quote,ragged-right]{script-abbreviations.ly} - -Il est possible de changer la signification de ces raccourcis : voir des -exemples dans @file{ly/@/script@/-init@/.ly}. - -Même si LilyPond place automatiquement ces symboles, il est possible de -l'obliger à les placer au-dessus ou en-dessous de la note, tout comme -d'autres objets, en utilisant respectivement @code{^} et @code{_}. - -@lilypond[quote,ragged-right,fragment,verbatim] -c''4^^ c''4_^ -@end lilypond - -On peut ajouter d'autres symboles, avec la syntaxe -@var{note}@code{\}@var{symbole}. Ici encore, on peut forcer leur -orientation avec @code{^} and @code{_}. - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -c\fermata c^\fermata c_\fermata -@end lilypond - -@cindex accent -@cindex marcato -@cindex staccatissimo -@cindex espressivo -@cindex point d'orgue -@cindex point d'arrêt -@cindex staccato -@cindex portato -@cindex tenuto -@cindex tirer l'archet -@cindex pousser l'archet -@cindex bouché -@cindex sourdine -@cindex orgue, marque de pédale d' -@cindex grupetto -@cindex ouvert -@cindex flageolet -@cindex trille -@cindex mordant -@cindex ornementation baroque -@cindex baroque, ornementation -@cindex pouce -@cindex segno -@cindex coda -@cindex varcoda - - -Voici la liste exhaustive des symboles : - -@lilypondfile[ragged-right,quote]{script-chart.ly} - -@commonprop - -Les symboles s'ordonnent verticalement suivant la propriété -@code{script-priority}. Plus sa valeur numérique est faible, plus le -symbole sera proche de la note. Dans l'exemple suivant, l'objet -@rinternals{TextScript} --- le dièse --- a d'abord la propriété la -plus basse, et il est donc placé plus près de la note ; ensuite c'est -l'objet @rinternals{Script} qui a la propriété la plus basse, et il se -place alors sous le dièse. Lorsque deux objets ont la même priorité, -c'est l'ordre dans lequel ils sont indiqués qui détermine lequel sera -placé en premier. - -@lilypond[verbatim,relative=3,ragged-right,fragment,quote] -\once \override TextScript #'script-priority = #-100 -a4^\prall^\markup { \sharp } - -\once \override Script #'script-priority = #-100 -a4^\prall^\markup { \sharp } -@end lilypond - - -@seealso -Référence du programme : @rinternals{Script}. - - -@knownissues - -Ces symboles sont présents sur la partition imprimée, mais -n'ont pas d'effet sur le rendu de la musique en MIDI. - - -@node Dynamics -@unnumberedsubsubsec Dynamics - -@cindex nuances -@funindex \pppp -@funindex \ppp -@funindex \pp -@funindex \p -@funindex \mp -@funindex \mf -@funindex \f -@funindex \ff -@funindex \fff -@funindex \ffff -@funindex \fp -@funindex \sf -@funindex \sff -@funindex \sp -@funindex \spp -@funindex \sfz -@funindex \rfz - -À chaque nuance absolue correspond une commande, qui peut être indiquée -après une note : @code{c4\ff} par exemple. Les commandes de nuances -disponibles sont @code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, -@code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, -@code{\ffff}, @code{\fp}, @code{\sf}, @code{\sff}, @code{\sp}, -@code{\spp}, @code{\sfz}, et @code{\rfz}. - -@lilypond[quote,verbatim,ragged-right,fragment,relative=2] -c\ppp c\pp c \p c\mp c\mf c\f c\ff c\fff -c2\fp c\sf c\sff c\sp c\spp c\sfz c\rfz -@end lilypond - -@funindex \< -@funindex \> -@funindex \! - -Un crescendo est délimité par @code{\<} et @code{\!}, ou peut se -terminer par une commande de nuance. Au lieu de @code{\<} -ou @code{\>}, on peut aussi utiliser @code{\cr} et @code{\decr}. -Ces indications sont attachées aux notes ; aussi si l'on veut -faire se succéder plusieurs nuances pendant une note tenue, il faudra -avoir recours à des silences invisibles : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c\< c\! d\> e\! -<< f1 { s4 s4\< s4\! \> s4\! } >> -@end lilypond - -@noindent -En principe, un soufflet --- (de)crescendo imprimé sous forme graphique -- -commence au bord gauche de la note de départ, et se termine au -bord droit de la note d'arrivée. Cependant, si la note d'arrivée -est sur un premier temps, le soufflet s'arrêtera au niveau de la -barre de mesure qui la précède. Ce comportement peut être annulé -en assignant @emph{faux} (lettre @q{f}) à la propriété -@code{hairpinToBarline} : - -@c TODO: Add link to new snippet for #'to-barline - -On peut avoir recours à l'indication @code{\espressivo} pour indiquer un -crescendo puis un decrescendo sur une seule note. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c2 b4 a g1\espressivo -@end lilypond - -Cependant, ces deux indications graphiques peuvent se trouver très -comprimées horizontalement. Pour les rallonger, on peut modifier la -propriété @code{minimum-length} de -@code{Voice.Hairpin} --- @rinternals{Voice} -étant le contexte, et @rinternals{Hairpin} l'objet affecté. Par -exemple : - -@example -\override Voice.Hairpin #'minimum-length = #5 -@end example - -@cindex al niente -@cindex niente, al - -Des crescendos ou decrescendos @emph{al niente} peuvent être indiqués de -manière graphique, en assignant @emph{vrai} (lettre @q{t}) à la -propriété @code{circled-tip}, ce qui affiche un cercle à leur extrémité. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\override Hairpin #'circled-tip = ##t -c2\< c\! -c4\> c\< c2\! -@end lilypond - - -@cindex crescendo -@cindex decrescendo -@cindex diminuendo - -Au lieu d'une notation graphique des crescendos, on peut utiliser -une notation textuelle. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\crescTextCresc -c\< d e f\! -\crescHairpin -e\> d c b\! -\dimTextDecresc -c\> d e f\! -\dimTextDim -e\> d c b\! -@end lilypond - -On peut même définir ses propres indications textuelles : - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -\set crescendoText = \markup { \italic "cresc. poco" } -\set crescendoSpanner = #'text -a'2\< a a a\!\mf -@end lilypond - -Pour créer des indications de nuances qui restent alignées -avec les nuances habituelles, voir @ref{New dynamic marks}. - -Le positionnement vertical des nuances est géré par le -@rinternals{DynamicLineSpanner}. - - -@commonprop - -Des nuances différentes situées --- ou commençant --- sur une même -note seront alignées verticalement. Pour aligner des nuances qui ne -se situeraient pas sur une même note, il est possible d'augmenter -la propriété @code{staff-padding}. - -@example -\override DynamicLineSpanner #'staff-padding = #4 -@end example - -Cette propriété peut aussi servir à régler des problèmes de -collision entre des nuances et d'autres objets. - -Les crescendos ou decrescendos qui aboutissent sur la première note -d'une nouvelle ligne ne sont imprimés que jusqu'à la fin de la ligne -précédente. Ce comportement peut être outrepassé en définissant : - -@example -\override Score.Hairpin #'after-line-breaking = ##t -@end example - - -Les crescendos et decrescendos indiqués textuellement --- tels que -@emph{cresc.} ou @emph{dim.} --- sont suivis de pointillés qui montrent -leur étendue. On peut empêcher l'impression de ces pointillés avec : - -@example -\override DynamicTextSpanner #'dash-period = #-1.0 -@end example - - -@predefined -@funindex \dynamicUp -@code{\dynamicUp}, -@funindex \dynamicDown -@code{\dynamicDown}, -@funindex \dynamicNeutral -@code{\dynamicNeutral}. -@endpredefined - - -@seealso -Référence du programme : @rinternals{DynamicText}, @rinternals{Hairpin}. - -Le placement vertical de ces éléments graphiques est géré par le -@rinternals{DynamicLineSpanner}. - - -@node New dynamic marks -@unnumberedsubsubsec New dynamic marks - -Grâce à la commande @code{make-dynamic-script}, vous pouvez créer de -nouvelles marques textuelles de nuances que vous combinerez -éventuellement avec les signes de nuances. -Notez bien que la police des nuances en contient que les caractères -@code{f,m,p,r,s} and @code{z}. - -Certains composants, tels que les marques de nuances, possèdent des -propriétés particulières et prédéfinies quant à leur police. Lorsque -vous créez du texte en pareille situation, nous vous recommandons -d'utiliser @code{normal-text} pour annuler ces propriétés. Voir -@ref{Text markup commands} pour plus de détails. - -@cindex make-dynamic-script - -@lilypond[quote,verbatim,ragged-right] -sfzp = #(make-dynamic-script "sfzp") -\relative c' { - c4 c c\sfzp c -} -@end lilypond - -@cindex Nuances éditoriales -@cindex Nuances, entre parenthèses - -Vous pouvez aussi encadrer les nuances entre parenthèses ou entre -crochets. Ceci est souvent utilisé pour ajouter des nuances propres à -une édition donnée. - -@lilypond[quote,verbatim,ragged-right] -rndf = \markup{ \center-align {\line { \bold{\italic (} - \dynamic f \bold{\italic )} }} } -boxf = \markup{ \bracket { \dynamic f } } -{ c'1_\rndf c'1_\boxf } -@end lilypond - - - -@node Curves -@subsection Curves - -@menu -* Slurs:: -* Phrasing slurs:: -* Breath marks:: -* Falls and doits:: -@end menu - -@node Slurs -@unnumberedsubsubsec Slurs - -@cindex legato -@cindex liaison d'articulation - -Une liaison d'articulation indique que les notes doivent être jouées -liées, ou @emph{legato}. Ces liaisons s'indiquent au moyen de -parenthèses. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -f( g a) a8 b( a4 g2 f4) -2( 2) -@end lilypond - - -On peut indiquer l'orientation des liaisons suivantes avec -@code{\slur@emph{DIR}}, @code{@emph{DIR}} pouvant être @code{Up} pour -une liaison vers le haut, @code{Down} pour une liaison vers le bas, ou -@code{Neutral} pour laisser LilyPond décider. - -Il existe également un raccourci pratique pour forcer l'orientation -d'une seule liaison. Il suffit pour cela d'ajouter @code{_} ou @code{^} -avant d'ouvrir une parenthèse. - -@lilypond[relative=2,ragged-right,quote,verbatim,fragment] -c4_( c) c^( c) -@end lilypond - - -Une seule liaison d'articulation peut être imprimée à la fois. S'il est -nécessaire d'imprimer une liaison plus longue, englobant des liaisons -plus courtes, utilisez des @ref{Phrasing slurs}. - - -@commonprop - -Certains auteurs utilisent deux liaisons lorsqu'ils veulent -lier des accords. Dans LilyPond, il faut pour cela assigner -@emph{vrai} (@q{true}) la propriété @code{doubleSlurs} : - -@lilypond[verbatim,ragged-right,relative,fragment,quote] -\set doubleSlurs = ##t -4 ( ) -@end lilypond - - -@predefined -@funindex \slurUp -@code{\slurUp}, -@funindex \slurDown -@code{\slurDown}, -@funindex \slurNeutral -@code{\slurNeutral}, -@funindex \slurDashed -@code{\slurDashed}, -@funindex \slurDotted -@code{\slurDotted}, -@funindex \slurSolid -@code{\slurSolid}. -@endpredefined - - -@seealso -Référence du programme : @rinternals{Slur}. - - -@node Phrasing slurs -@unnumberedsubsubsec Phrasing slurs - -@cindex liaisons de phrasé -@cindex phrasé, liaisons de - -Une liaison de phrasé relie plusieurs notes en délimitant une phrase -musicale. On indique les points de départ et d'arrivée avec @code{\(} -et @code{\)} respectivement. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\time 6/4 c'\( d( e) f( e) d\) -@end lilypond - - -D'un point de vue typographique, rien ne distingue une liaison de phrasé -d'une liaison d'articulation. Cependant, LilyPond les considère comme -des objets différents. Une commande @code{\slurUp} n'affectera donc pas -une liaison de phrasé : il faut plutôt utiliser @code{\phrasingSlurUp}, -@code{\phrasingSlurDown} ou @code{\phrasingSlurNeutral}. - -Il n'est pas possible d'avoir plusieurs liaisons de phrasé en même temps. - - -@predefined -@funindex \phrasingSlurUp -@code{\phrasingSlurUp}, -@funindex \phrasingSlurDown -@code{\phrasingSlurDown}, -@funindex \phrasingSlurNeutral -@code{\phrasingSlurNeutral}. -@endpredefined - - -@seealso -Référence du programme : @rinternals{PhrasingSlur}. - - -@node Breath marks -@unnumberedsubsubsec Breath marks - -Les indications de respiration sont indiquées par la commande @code{\breathe}. - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -c'4 \breathe d4 -@end lilypond - - -@commonprop - -On peut choisir le glyphe imprimé par cette commande, en modifiant la -propriété @code{text} de l'objet @code{BreathingSign}, pour lui affecter -n'importe quelle indication textuelle. Par exemple : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -c'4 -\override BreathingSign #'text - = #(make-musicglyph-markup "scripts.rvarcomma") -\breathe -d4 -@end lilypond - - -@seealso -Référence du programme : @rinternals{BreathingSign}. - -Exemples : @rlsr{Winds}. - - -@node Falls and doits -@unnumberedsubsubsec Falls and doits - -Des indications de désinence peuvent être obtenues au moyen de la -commande @code{\bendAfter} : - -@lilypond[fragment,ragged-right,relative=2] -\override Score.SpacingSpanner #'shortest-duration-space = #3.0 -c4-\bendAfter #+5 -c4-\bendAfter #-3 -@end lilypond - - -@node Lines -@subsection Lines - -@menu -* Glissando:: -* Arpeggio:: -* Trills:: -@end menu - -@node Glissando -@unnumberedsubsubsec Glissando - -@cindex glissando -@funindex \glissando - -Un glissando relie une hauteur à une autre en passant par chaque hauteur -intermédiaire. Il est indiqué graphiquement, par une ligne ou des -vaguelettes entre ces deux notes. On l'obtient en accolant la commande -@code{\glissando} à la première note. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -c2\glissando c' -\override Glissando #'style = #'zigzag -c2\glissando c, -@end lilypond - - -@commonprop - -@lilypond[quote,ragged-right,verbatim] -I = \once \override NoteColumn #'ignore-collision = ##t - -\relative << - { \oneVoice \stemDown f2 \glissando \stemNeutral a } \\ - { \oneVoice \I c2 \glissando \I d, } ->> -@end lilypond - - -@seealso -Référence du programme : @rinternals{Glissando}. - -Exemples : @rlsr{Expressive marks}. - - -@knownissues - -Il n'est pas possible d'imprimer un texte (tel que @emph{gliss.}) -le long de la ligne de glissando. - - -@node Arpeggio -@unnumberedsubsubsec Arpeggio - -@cindex arpège -@cindex accord arpégé -@funindex \arpeggio - - -On peut indiquer qu'un accord doit être arpégé en lui accolant la -commande @code{\arpeggio} : - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -\arpeggio -@end lilypond - - -Pour spécifier qu'un autre accord doit être plaqué et non arpégé, on -peut remplacer ce signe par un crochet : - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -\arpeggioBracket -\arpeggio -@end lilypond - - -Le sens de l'arpège est parfois indiqué par une pointe de flèche au bout -de la vaguelette : - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -\new Voice { - \arpeggioArrowUp - \arpeggio - \arpeggioArrowDown - \arpeggio -} -@end lilypond - - -@commonprop - -Quand un arpège couvre plusieurs portées, il est possible d'indiquer -l'arpège sur chacune des portées, puis de relier la ligne de vaguelettes -en assignant @emph{vrai} à la propriété @code{connectArpeggios}, par -exemple dans le contexte @rinternals{PianoStaff} : - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -\new PianoStaff << - \set PianoStaff.connectArpeggios = ##t - \new Staff { \arpeggio } - \new Staff { \clef bass \arpeggio } ->> -@end lilypond - - -@predefined -@code{\arpeggio}, -@funindex \arpeggioArrowUp -@code{\arpeggioArrowUp}, -@funindex \arpeggioArrowDown -@code{\arpeggioArrowDown}, -@funindex \arpeggioNormal -@code{\arpeggioNormal}, -@funindex \arpeggioBracket -@code{\arpeggioBracket}. -@endpredefined - - -@seealso -Dans ce même manuel : @ref{Ties}, pour noter explicitement des arpèges. - -Référence du programme : @rinternals{Arpeggio}. - - -@knownissues - -Il est impossible de mêler au même instant, dans un contexte -@rinternals{PianoStaff}, des lignes d'arpèges connectées et d'autres -non connectées. - - -@node Trills -@unnumberedsubsubsec Trills - -Les trilles brefs s'indiquent comme n'importe quelle ponctuation : -voir @ref{Articulations and ornamentations}. - - -Les trilles plus longs sont délimités par @code{\startTrillSpan} et -@code{\stopTrillSpan} : - -@lilypond[verbatim,ragged-right,relative=2,quote,fragment] -\new Voice { - << { c1 \startTrillSpan } - { s2. \grace { d16[\stopTrillSpan e] } } >> - c4 } -@end lilypond - -@cindex trilles avec hauteur explicite - -Les trilles qui font intervenir une hauteur précise peuvent être -indiqués par la commande @code{pitchedTrill}. - -@lilypond[ragged-right,verbatim,fragment,relative=1,quote] -\pitchedTrill c4\startTrillSpan fis -f\stopTrillSpan -@end lilypond - -@noindent -Le premier argument est la note réelle ; le second est une hauteur qui -sera imprimée comme une tête de note noire entre parenthèses. - - -@predefined -@funindex \startTrillSpan -@code{\startTrillSpan}, -@funindex \stopTrillSpan -@code{\stopTrillSpan}. -@endpredefined - - -@seealso -Référence du programme : @rinternals{TrillSpanner}. - - diff --git a/Documentation/fr/user/fretted-strings.itely b/Documentation/fr/user/fretted-strings.itely deleted file mode 100644 index efd072c0a6..0000000000 --- a/Documentation/fr/user/fretted-strings.itely +++ /dev/null @@ -1,1361 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Matthieu Jacquot -@c Translation checkers: Jean-Charles Malahieude - -@node Fretted string instruments -@section Fretted string instruments - -@lilypondfile[quote]{fretted-headword.ly} - -Cette section traite de différents aspects de la notation propre aux -instruments à cordes frettées. - -@cindex tablature -@cindex guitare, tablature pour -@cindex banjo, tablature pour -@cindex tablature pour guitare -@cindex tablature pour banjo - -@menu -* Common notation for fretted strings:: -* Guitar:: -* Banjo:: -@end menu - -@node Common notation for fretted strings -@subsection Common notation for fretted strings - -Vue d'ensemble de la notation pour les instruments à cordes frettées. - -@menu -* References for fretted strings:: -* String number indications:: -* Default tablatures:: -* Custom tablatures:: -* Fret diagram markups:: -* Predefined fret diagrams:: -* Automatic fret diagrams:: -* Right-hand fingerings:: -@end menu - -@node References for fretted strings -@unnumberedsubsubsec References for fretted strings - -La musique pour instruments à cordes frettées est généralement notée sur -une seule portée, en notation traditionnelle ou en tablature, les deux -étant parfois combinées. Il est aussi courant en musique populaire -d'utiliser des diagrammes d'accord au-dessus de la portée -traditionnelle. La guitare et le banjo sont des instruments -transpositeurs, sonnant une octave au-dessous de ce qui est écrit. Les -partitions pour ces instruments utilisent donc la clé de sol ottava -bassa @code{"treble_8"}. Vous pourrez trouver ailleurs dans la -documentation d'autres éléments aussi utilisés par les instruments à -cordes frettées : - -@itemize -@item Les doigtés s'obtiennent comme indiqué au chapitre -@ref{Fingering instructions}. - -@item En plus des @notation{Laissez vibrer}, les liaisons peuvent -intervenir sur des accords arpégés ou des trémolos. Reportez-vous au -chapitre @ref{Ties}. - -@item Des indications quant au support polyphonique se trouvent au -chapitre @ref{Collision resolution}. - -@item La notation des sons harmoniques se trouve à la section @ref{Harmonics}. - -@end itemize - - -@seealso -Manuel de notation : -@ref{Fingering instructions}, -@ref{Ties}, -@ref{Collision resolution}, -@ref{Instrument names}, -@ref{Writing music in parallel}, -@ref{Arpeggio}, -@ref{List of articulations}, -@ref{Clef}. - - -@node String number indications -@unnumberedsubsubsec String number indications - -@cindex cordes numérotées -@cindex numéro de corde -@cindex numéros de corde et doigtés -@cindex doigtés et numéros de corde - -Une corde sur laquelle une note doit être jouée peut être indiquée -en attachant @code{\@var{numéro}} à cette note prise dans une -construction de type accord @code{<>}. - -@warning{Les numéros de cordes @strong{doivent} être définis dans une -construction de type accord même s'il n'y a qu'une seule note.} - -@lilypond[verbatim,quote,relative=0] -\clef "treble_8" -4 2 -1 -@end lilypond - -Quand les indications de doigté et de numéro de corde sont -attachées à une même note, leur positionnement se fera en fonction -de l'ordre dans lequel ils apparaissent dans le code : - - -@lilypond[verbatim,quote,relative=1] -\clef "treble_8" -2 - -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - - -@seealso -Manuel de notation : -@ref{Fingering instructions}. - -Morceaux choisis : -@rlsr{Fretted strings}. - -Référence des propriétés internes : -@rinternals{StringNumber}, -@rinternals{Fingering}. - - -@node Default tablatures -@unnumberedsubsubsec Default tablatures - -@cindex tablatures, bases -@cindex tablatures par défaut - -@funindex TabStaff -@funindex TabVoice - -La notation en tablature est utilisée pour certains instruments à cordes -pincées. Les hauteurs n'y sont pas indiquées par des têtes de note, -mais par des chiffres qui indiquent sur quelle corde, et à quelle case -chaque note doit être jouée. Dans certaines limites, LilyPond vous -permet d'écrire des tablatures. - -Chaque numéro de corde associé à une note doit être précédé d'une barre -oblique inverse (ou @qq{antislash}) suivi d'un nombre. Par défaut, la -première corde est -la plus aiguë, et les cordes suivent l'accordage traditionnel d'une -guitare (à six cordes). Les notes sont imprimées sous forme de -tablature, dans les contextes @rinternals{TabStaff} et -@rinternals{TabVoice}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff { - a,4\5 c'\2 a\3 e'\1 - e\4 c'\2 a\3 e'\1 -} -@end lilypond - -@funindex minimumFret - -@cindex cases - -Quand aucune corde n'est précisée, LilyPond choisit automatiquement la -corde pour laquelle la position est la moins élevée et qui donne un -numéro de case supérieur ou égal à la valeur de la propriété -@code{minimumFret}. La valeur par défaut de cette propriété est fixée à -0, ce qui correspond aux cordes à vide. - - -@lilypond[quote,ragged-right,verbatim] -\new StaffGroup << - \new Staff \relative c { - \clef "treble_8" - c16 d e f g4 - c,16 d e f g4 - } - \new TabStaff \relative c { - c16 d e f g4 - \set TabStaff.minimumFret = #5 - c,16 d e f g4 - } ->> -@end lilypond - -@cindex harmoniques, indication en tablature -@cindex tablature et indication d'harmoniques -@cindex glissando, indication en tablature -@cindex tablature et glissando - -Les indications de sons harmoniques ainsi que les glissandi -peuvent être ajoutés aux tablatures. - - -@lilypond[fragment, verbatim, quote, relative=1] -\new TabStaff { - \new TabVoice { - d\2\glissando e\2 - } -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{stem-and-beam-behavior-in-tablature.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{polyphony-in-tablature.ly} - - -@seealso -Manuel de notation : -@ref{Stems}. - -Morceaux choisis : -@rlsr{Fretted strings}. - -Référence des propriétés internes : -@rinternals{TabNoteHead}, -@rinternals{TabStaff}, -@rinternals{TabVoice}, -@rinternals{Beam}. - - -@knownissues - -Les accords ne subissent aucun traitement particulier ; de ce fait, la -sélection automatique des cordes peut attribuer une même corde pour deux -notes différentes de l'accord. - -Afin que @code{\partcombine} fonctionne avec des tablatures, on doit -ajouter au contexte @code{TabStaff} des voix fantômes : - -@lilypond[quote,ragged-right,verbatim] -melodia = \partcombine { e4 g g g }{ e4 e e e } -<< - \new TabStaff << - \new TabVoice = "one" s1 - \new TabVoice = "two" s1 - \new TabVoice = "shared" s1 - \new TabVoice = "solo" s1 - { \melodia } - >> ->> -@end lilypond - -Le support des modes de jeu propres à la guitare se limite aux sons -harmoniques et aux glissandi. - -@node Custom tablatures -@unnumberedsubsubsec Custom tablatures - -@cindex tablatures personnalisées -@cindex banjo, tablature -@cindex mandoline, tablature -@cindex guitare basse, tablature -@cindex tablature, accordages prédéfinis -@cindex cordes frettés et accordages prédéfinis -@cindex accordages prédéfinis et cordes frettées - -@funindex StringTunings - -Sous LilyPond, la case correspondant à une note jouée sur une corde donnée -est calculée automatiquement. Pour ce faire, l'accordage doit -être spécifié. L'accordage des cordes est donné par la propriété -@code{StringTunings}. - -LilyPond possède des accordages prédéfinis pour banjo, mandoline, guitare -et guitare basse. Lilypond calcule automatiquement la transposition -correspondant à ces accordages. L'exemple ci-dessous est pour guitare -basse, il sonnera donc une octave en dessous de ce qui est écrit. - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \clef "bass_8" - \relative c, { - c4 d e f - } - } - \new TabStaff { - \set TabStaff.stringTunings = #bass-tuning - \relative c, { - c4 d e f - } - } ->> -@end lilypond - -L'accordage par défaut est @code{guitar-tuning} ; il correspond à -l'accordage standard d'une guitare : mi la ré sol si mi (EADGBE). -D'autres accordages prédéfinis sont disponibles : -@code{guitar-open-g-tuning}, @code{mandolin-tuning} et -@code{banjo-open-g-tuning}. Les accordages prédéfinis sont répertoriés -dans le fichier @code{scm/output-lib.scm}. - -L'accordage est constitué par une liste Scheme des hauteurs de notes -correspondant aux cordes à vide, une note pour chaque corde, classée par -numéro de corde de 1 à n, où la corde 1 est la plus haute dans la -tablature et n la plus basse. Cela revient généralement à classer les -cordes de la plus aiguë à la plus grave, mais certains instruments -(comme le ukulele) n'ont pas les cordes classées par hauteur. - -Dans cette liste, la hauteur des notes est représentée par l'intervalle, -exprimé en demi-tons, du do central jusqu'à la note de la corde à vide. -Elle doit donc être représentée par un nombre entier. LilyPond calcule -la note correspondant à chaque corde en ajoutant cet intervalle au do -central. - -Lilypond calcule automatiquement le nombre de cordes à représenter dans -la tablature (@code{TabStaff}) en comptant le nombre d'éléments définis -dans le @code{stringTunings}. - -N'importe quel accordage peut donc être créé. Par exemple, nous pouvons -définir l'accordage d'un instrument à quatre cordes accordées do sol ré -la, donc de la plus aiguë à la plus grave et en anglais : -@code{a''}, @code{d''}, @code{g'}, et @code{c'} : - - -@lilypond[quote,verbatim] -mynotes = { - c'4 e' g' c'' | - e'' g'' b'' c''' -} - -<< - \new Staff { - \clef treble - \mynotes - } - \new TabStaff { - \set TabStaff.stringTunings = #'(21 14 7 0) - \mynotes - } ->> -@end lilypond - - -@seealso -Fichiers sources installés : -@file{scm/output-lib.scm}. - -Morceaux choisis : -@rlsr{Fretted strings}. - -Référence des propriétés internes : -@rinternals{Tab_note_heads_engraver}. - -@node Fret diagram markups -@unnumberedsubsubsec Fret diagram markups - -@cindex fret, diagrammes -@cindex accord, diagrammes -@cindex diagrammes de fret -@cindex diagrammes d'accord pour instrument fretté -@cindex fret, diagrammes personnalisés -@cindex diagrammes personnalisés de fret - -On peut ajouter des diagrammes d'accords au-dessus de n'importe quelle -note, en tant qu'objets @code{\markup}. Ces objets contiennent toutes -les informations du diagramme d'accord. Il y a pour les définir trois -interfaces "diagramme d'accord" (@emph{fret-diagram} en anglais) : -@var{standard}, @var{terse} et @var{verbose}. -Ces trois interfaces produiront des diagrammes similaires mais -permettent des niveaux de personnalisation différents. Des détails à -propos des interfaces de type @code{\markup} -peuvent être trouvés dans @ref{Text markup commands}. - -Dans l'interface standard des diagrammes d'accords, on indiquera le -numéro de corde et le numéro de case pour chaque point placé sur une corde. -Les cordes à vide et étouffées peuvent aussi être indiquées. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex barré, indication de -@cindex indication du barré - -Les indications de barrés peuvent aussi être ajoutées au diagramme -d'accord dans l'interface standard : - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, d g b d' g'> ^\markup - \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" - } ->> -@end lilypond - -@cindex fret-diagram et markup -@cindex markup et fret-diagram - -@funindex fret-diagram -@funindex \fret-diagram - -La taille du diagramme d'accord ainsi que le nombre de cases -représentées peuvent aussi être modifiés dans l'interface standard. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, b, d g b g'> ^\markup - \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" - } ->> -@end lilypond - -Le nombre de cordes dans les diagrammes d'accord peut être modifié dans -l'interface standard pour s'adapter à différents instruments tels que le -banjo et le ukulele. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - a1 - } - } - \context Staff { - %% A chord for ukelele - a'1 ^\markup \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" - } ->> -@end lilypond - -Des indications de doigtés peuvent être ajoutées, et le positionnement -de ces doigtés peut être modifié dans l'interface standard. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" - } ->> -@end lilypond - -La taille ainsi que la position des points peuvent être contrôlées dans -l'interface standard. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex fret-diagram-terse markup - -@funindex fret-diagram-terse -@funindex \fret-diagram-terse - -Dans l'interface @code{fret-diagram-terse}, les numéros de cordes sont -omis ; les numéros de cordes sont induits par la présence de -points-virgules. Il y a un point-virgule pour chaque corde du -diagramme. Le premier point-virgule correspondant au plus haut numéro -de corde, le dernier à la première corde. Les cordes étouffées, les -cordes à vide ainsi que les numéros de case peuvent y être indiqués. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3;2;o;1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2;3;1;" - } ->> -@end lilypond - -Les indications de barré peuvent être inclus dans l'interface -@code{fret-diagram-terse}. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram-terse #"1-(;3;3;2;1;1-);" - < g, d g b d' g'> ^\markup - \fret-diagram-terse #"3-(;5;5;4;3;3-);" - } ->> -@end lilypond - -Les indications de doigtés peuvent être inclus dans l'interface -@code{fret-diagram-terse}. - -@c Need to use override to enable fingerings to show this -- can we do so? -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" - } ->> -@end lilypond - -Les autres propriétés des diagrammes d'accord doivent être ajustées en -utilisant la commande @code{\override} dans l'interface -@code{fret-diagram-terse}. - -@cindex fret-diagram-verbose markup - -@funindex fret-diagram-verbose -@funindex \fret-diagram-verbose - -L'interface @code{fret-diagram-verbose} est au format d'une liste -Scheme. Chaque élément de la liste décrit un objet devant être placé -dans le diagramme d'accord. - -@lilypond[quote, verbatim] -<< \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-verbose #'( - (mute 6) - (place-fret 5 3) - (place-fret 4 2) - (open 3) - (place-fret 2 1) - (open 1) - ) - < d a d' f'> ^\markup - \fret-diagram-verbose #'( - (mute 6) - (mute 5) - (open 4) - (place-fret 3 2) - (place-fret 2 3) - (place-fret 1 1) - ) - } ->> -@end lilypond - -Les indications de doigté et de barré peuvent être décrits dans -l'interface @code{fret-diagram-verbose}. Particularité propre à -l'interface @code{fret-diagram-verbose} : l'indication -de capodastre dans le diagramme d'accord. L'indication de capodastre -est une petite ligne transversale aux cordes. La case avec le -capodastre est la case la plus basse du diagramme d'accord. - -@c \override is necessary to make fingering visible -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g c - } - } - \context Staff { - \clef "treble_8" - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - - < f, c f a c' f'>1 ^\markup - \fret-diagram-verbose #'( - (place-fret 6 1) - (place-fret 5 3) - (place-fret 4 3) - (place-fret 3 2) - (place-fret 2 1) - (place-fret 1 1) - (barre 6 1 1) - ) - < g, b, d g b g'> ^\markup - \fret-diagram-verbose #'( - (place-fret 6 3 2) - (place-fret 5 2 1) - (open 4) - (open 3) - (open 2) - (place-fret 1 3 3) - ) - < c e g c' e'> ^\markup - \fret-diagram-verbose #'( - (capo 3) - (mute 6) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - ) - } ->> -@end lilypond - -Toutes les autres propriétés du diagramme d'accord doivent être -indiquées en utilisant la commande @code{\override} lorsque l'on utilise -l'interface @code{fret-diagram-verbose}. - -@ignore -The following example shows the three fret-diagram markup -interfaces, along with examples of common tweaks. For example, -the size of the verbose fret diagram is reduced to 0.75, and the -finger indications are specified to appear below the diagram. The -terse diagram includes tweaks to specify placement of finger code -and color of dots. - -@lilypond[verbatim,ragged-right,quote] -\new Voice { - \clef "treble_8" - d^\markup \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" - d d d - fis^\markup \override #'(size . 0.75) { - \override #'(finger-code . below-string) { - \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) - (place-fret 5 4 3) - (place-fret 4 4 4) - (place-fret 3 3 2) - (place-fret 2 2 1) - (place-fret 1 2 1)) - } - } - fis fis fis - c^\markup \override #'(dot-radius . 0.35) { - \override #'(finger-code . in-dot) { - \override #'(dot-color . white) { - \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" - } - } - } - c c c -} -@end lilypond -@end ignore - -@cindex diagrammes de fret personnalisés -@cindex fret, diagrammes personnalisés -@cindex diagrammes personnalisés de fret - -@funindex fret-diagram-interface - -La disposition graphique d'un diagramme d'accord peut être modifiée -suivant les préférences de l'utilisateur grâce aux propriétés de -l'interface @code{fret-diagram-interface}. -Des détails se trouvent dans @rinternals{fret-diagram-interface}. Pour -un diagramme d'accord, les propriétés de l'interface dépendent de -@code{Voice.TextScript}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-markup-fret-diagrams.ly} - - -@seealso -Manuel de notation : -@ref{Text markup commands}. - -Morceaux choisis : -@rlsr{Fretted strings}. - -Référence des propriétés internes : -@rinternals{fret-diagram-interface}. - - -@node Predefined fret diagrams -@unnumberedsubsubsec Predefined fret diagrams - - -@cindex fret, diagrammes -@cindex accord, diagrammes - -@funindex FretBoards -@funindex stringTunings - -Les diagrammes d'accords peuvent être affichés en utilisant le contexte -@code{FretBoards}. Par défaut le contexte @code{FretBoards} affichera -des diagrammes d'accords stockés dans une table de correspondance : - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode { - c1 d - } -} -@end lilypond - -Les diagrammes d'accord définis par défaut sont dans le fichier -@code{predefined-guitar-fretboards.ly}. Les diagrammes d'accords sont -stockés en fonction des notes de l'accord ainsi que de l'accordage -(@code{stringTunings}) utilisé. -@code{predefined-guitar-fretboards.ly} contient les diagrammes d'accords -prédéfinis uniquement pour l'accordage standard (@code{guitar-tuning}). -Des diagrammes d'accords peuvent être définis pour d'autres instruments -ou d'autres accordages en suivant les exemples du fichier -@code{predefined-guitar-fretboards.ly}. - -Les notes des accords peuvent être entrées aussi bien comme musique -simultanée qu'en utilisant le mode accord (voir -@ref{Chord mode overview}). - -@lilypond[verbatim, ragged-right,quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode {c1} - 1 -} -@end lilypond - -@cindex accord nommés et diagrammes de fret -@cindex fret, diagrammes avec noms d'accord - -@funindex ChordNames -@funindex chordmode -@funindex \chordmode - -Il est courant d'afficher simultanément le nom des accords et les -diagrammes d'accords correspondants. -Ceci s'obtient en mettant en parallèle un contexte @code{ChordNames} avec -un contexte @code{FretBoards} et en affectant aux deux la même musique. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex transposition et diagramme de fret -@cindex fret et transposition -@cindex diagrammes de fret et transposition - -Les diagrammes d'accords prédéfinis sont transposables tant qu'il y a -un diagramme correspondant à l'accord transposé dans la base des -diagrammes d'accords. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -mychordlist = { - \mychords - \transpose c e { \mychords} -} -<< - \context ChordNames { - \mychordlist - } - \context FretBoards { - \mychordlist - } ->> -@end lilypond - -La table des diagrammes d'accord contient sept types d'accord (majeur, -mineur, augmenté, diminué, septième de dominante, majeur sept, mineur -sept) pour chacune des 17 fondamentales possibles. Une liste complète -des diagrammes d'accords prédéfinis se trouve dans @ref{Predefined -fretboard diagrams}. S'il n'y a pas d'entrée dans la table pour un -accord donné, le graveur @code{Fretboard_engraver} calculera le -diagramme d'accord en utilisant la fonctionnalité automatique décrite -dans @ref{Automatic fret diagrams}. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex fret, ajout de diagrammes personnalisés -@cindex diagrammes de fret personnalisés, ajout - -Des diagrammes d'accord peuvent être ajoutés à la table des diagrammes -d'accord. Pour ajouter un diagramme d'accord, il faut spécifier -l'accord correspondant au diagramme, l'accord utilisé et la définition -du diagramme. Cette définition de diagramme peut être -aussi bien de type @var{terse} que @var{verbose}. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c:9} - #guitar-tuning - #"x;3-2;2-1;3-3;3-4;x;" - -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -On peut enregistrer différents diagrammes pour un même accord -en les définissant à des octaves différentes. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c'} - #guitar-tuning - #(offset-fret 2 (chord-shape 'bes guitar-tuning)) - -mychords = \chordmode{ - c1 c' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex cordes frettées, carrures d'accord -@cindex accord, carrures pour cordes frettées - -@funindex \addChordShape -@funindex add ChordShape -@funindex storePredefinedDiagram -@funindex \storePredefinedDiagram - -En plus des diagrammes d'accord, LilyPond possède une liste interne de -carrures d'accord. -Les carrures d'accords sont des diagrammes d'accord qui peuvent être -transposés le long du manche. Les carrures d'accords peuvent être -ajoutées à la liste interne et être ensuite utilisées pour définir des -accords prédéfinis. Puisqu'elles sont transposables le long du -manche, les carrures d'accord ne contiennent généralement pas de corde -à vide. Tout comme les diagrammes d'accord, les carrures d'accord sont -définies grâce aux interfaces @code{fret-diagram-terse} ou -@code{fret-diagram-verbose}. - - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -% add a new chord shape - -\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" - -% add some new chords based on the power chord shape - -\storePredefinedDiagram \chordmode {f'} - #guitar-tuning - #(chord-shape 'powerf guitar-tuning) -\storePredefinedDiagram \chordmode {g'} - #guitar-tuning - #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) - -mychords = \chordmode{ - f1 f' g g' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -La disposition graphique d'un diagramme d'accord peut être modifiée -suivant les préférences de l'utilisateur grâce aux propriétés de -l'interface @code{fret-diagram-interface}. Pour plus d'information, -consultez @rinternals{fret-diagram-interface}. Pour un diagramme -d'accord donné, les propriétés de l'interface dépendent de -@code{FretBoards.FretBoard}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-fretboard-fret-diagrams.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{defining-predefined-fretboards-for-other-instruments.ly} - - -@seealso -Manuel de notation : -@ref{Custom tablatures}, -@ref{Automatic fret diagrams}, -@ref{Chord mode overview}, -@ref{Predefined fretboard diagrams}. - -Fichiers sources installés : -@file{ly/predefined-guitar-fretboards.ly}, -@file{ly/predefined-guitar-ninth-fretboards.ly}. - -Morceaux choisis : -@rlsr{Fretted strings}. - -Référence des propriétés internes : -@rinternals {fret-diagram-interface}. - - -@node Automatic fret diagrams -@unnumberedsubsubsec Automatic fret diagrams - -@cindex fret, diagrammes automatiques -@cindex accord, diagrammes automatiques -@cindex automatique, diagramme de fret -@cindex automatique, diagramme d'accord - -Les diagrammes d'accord peuvent être créés automatiquement ; il suffit -d'affecter les notes à un contexte @code{FretBoards}. Si aucun -diagramme prédéfini n'est disponible pour les notes entrées avec -l'accordage actuel (@code{stringTunings}), les cordes et cases -correspondant aux notes seront automatiquement calculées. - -@lilypond[quote,ragged-right,verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context FretBoards { - < f, c f a c' f'>1 - < g,\6 b, d g b g'> - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 - < g, b, d g b' g'> - } ->> -@end lilypond - -@funindex predefinedFretboardsOff -@funindex \predefinedFretboardsOff -@funindex predefinedFretboardsOn -@funindex \predefinedFretboardsOn - -Dans la mesure où aucun diagramme prédéfini n'est chargé par défaut, le -calcul automatique des diagrammes d'accord est le comportement par -défaut. Dès que les diagrammes par défaut sont chargés, le calcul -automatique peut être activé ou désactivé par des commandes -prédéfinies : - -@lilypond[quote,ragged-right,verbatim] - -\storePredefinedDiagram - #guitar-tuning - #"x;3-1-(;5-2;5-3;5-4;3-1-1);" -<< - \context ChordNames { - \chordmode { - c1 c c - } - } - \context FretBoards { - 1 - \predefinedFretboardsOff - - \predefinedFretboardsOn - - } - \context Staff { - \clef "treble_8" - 1 - - - } ->> -@end lilypond - -Parfois le calculateur se trouvera incapable de trouver un diagramme -d'accord convenable. On peut souvent y remédier en assignant les notes -aux cordes. Dans bien des cas, il suffit de placer manuellement une -seule note pour que les autres soient alors placées de maniére -appropriée par le contexte @code{FretBoards}. - -@cindex fret, ajout de doigtés aux diagrammes -@cindex doigtés, ajout à des diagrammes de fret - -Il est possible d'ajouter des indications de doigté aux diagrammes de -fret. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context FretBoards { - < c-3 e-2 g c'-1 e' > 1 - < d a-2 d'-3 f'-1> - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 - < d a d' f'> - } ->> -@end lilypond - -La propriété @code{minimumFret} permet de définir la case minimale qui -servira à calculer les cordes et les cases du contexte @code{FretBoard}. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - d1:m d:m - } - } - \context FretBoards { - < d a d' f'> - \set FretBoards.minimumFret = #5 - < d a d' f'> - } - \context Staff { - \clef "treble_8" - < d a d' f'> - < d a d' f'> - } ->> -@end lilypond - -Les cordes et les cases du contexte @code{FretBoards} sont liées à la -propriété @code{stringTunings}, qui a là même signification que dans le -contexte @code{TabStaff}. -Voir @ref{Custom tablatures} pour plus d'information sur la propriété -@code{stringTunings}. - -La disposition graphique d'un diagramme d'accord peut être modifiée -suivant les préférences de l'utilisateur au travers des propriétés de -l'interface @rinternals{fret-diagram-interface}. Pour un diagramme -d'accord, les propriétés de l'interface dépendent de -@code{FretBoards.FretBoard}. - - -@predefined -@code{\predefinedFretboardsOff}, -@code{\predefinedFretboardsOn}. -@endpredefined - - -@seealso -Manuel de notation : -@ref{Custom tablatures}. - -Morceaux choisis : -@rlsr{Fretted strings}. - -Référence des propriétés internes : -@rinternals {fret-diagram-interface}. - - -@node Right-hand fingerings -@unnumberedsubsubsec Right-hand fingerings - -@cindex cordes frettées, doigtés main droite -@cindex doigtés main droite et cordes frettées -@cindex main droite, doigtés pour cordes frettées - -@funindex rightHandFinger -@funindex \rightHandFinger - -Les doigtés de main droite @var{p-i-m-a} doivent être entrés dans une -construction de type accord @code{<>} même s'il n'y a qu'une seule note. - -@warning{Un trait d'union @strong{doit} suivre la note et une espace -@strong{doit} précéder la fermeture de la construction par un @code{>}.} - - -@lilypond[quote,verbatim,relative=0] -\clef "treble_8" -4 - - - -1 -@end lilypond - -Pour plus de clarté, vous pouvez traduire ou abréger la commande -@code{\rightHandFinger}, par exemple en @code{\doigtMainDroite} ou -même @code{\MD} : - -@example -#(define MD rightHandFinger) -@end example - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{placement-of-right-hand-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{fingerings,-string-indications,-and-right-hand-fingerings.ly} - - -@seealso -Morceaux choisis : -@rlsr{Fretted strings}. - -Référence des propriétés internes : -@rinternals{StrokeFinger}. - - -@node Guitar -@subsection Guitar - -La plupart des aspects en matière de notation pour guitare sont traités -dans la partie commune aux instruments frettés. Il subsiste cependant -quelques particularités que nous allons maintenant examiner. Parfois -l'utilisateur aimerait créer des documents de type recueil de chansons, -où l'on ne trouve que des accords au-dessus des paroles. Dans la mesure -où LilyPond est un éditeur de partitions, il n'est pas l'outil optimal -pour des documents sans partition. Une meilleure alternative serait de -recourrir à un traitement de texte, un éditeur de texte ou, pour les -utilisateurs experimentés, un logiciel typographique tel que GuitarTex. - -@menu -* Indicating position and barring:: -* Indicating harmonics and dampened notes:: -@end menu - -@node Indicating position and barring -@unnumberedsubsubsec Indicating position and barring - -@cindex indication de la position et du barré pour cordes frettées -@cindex cordes frettées, indication de la position et du barré - -Cet exemple montre comment indiquer les positions et les barrés : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=0] -\clef "treble_8" -b16 d g b e -\textSpannerDown -\override TextSpanner #'(bound-details left text) = #"XII " - g16\startTextSpan - b16 e g e b g\stopTextSpan -e16 b g d -@end lilypond - - -@seealso -Manuel de notation : -@ref{Text spanners}. - -Morceaux choisis : -@rlsr{Fretted strings}, -@rlsr{Expressive marks}. - - -@node Indicating harmonics and dampened notes -@unnumberedsubsubsec Indicating harmonics and dampened notes - -@cindex cordes frettées, notes étouffées -@cindex cordes frettées, harmoniques -@cindex notes étouffées et cordes frettées -@cindex harmoniques et cordes frettées - -Des têtes de note spéciales peuvent servir à indiquer les -notes étouffées et les sons harmoniques. Les sons harmoniques sont -souvent détaillés grâce à des indications textuelles. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { - \clef "treble_8" - \override Staff.NoteHead #'style = #'cross - g8 a b c b4 - \override Staff.NoteHead #'style = #'harmonic-mixed - d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 -} -@end lilypond - - -@seealso -Morceaux choisis : -@rlsr{Fretted strings}. - -Manuel de notation : -@ref{Special note heads}, -@ref{Note head styles}. - - -@node Banjo -@subsection Banjo - -@menu -* Banjo tablatures:: -@end menu - -@node Banjo tablatures -@unnumberedsubsubsec Banjo tablatures - -@cindex banjo, tablatures -@cindex tablatures pour banjo - -LilyPond permet d'écrire des tablatures de base pour le banjo à cinq -cordes. Pour ce faire, pensez à utiliser le format de tablature pour -banjo, afin d'avoir le bon nombre de cordes et le bon accordage : - -@c due to crazy intervals of banjo music, absolute pitch is recommended - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff << - \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo - \set TabStaff.stringTunings = #banjo-open-g-tuning - { - \stemDown - g8 d' g'\5 a b g e d' | - g4 d''8\5 b' a'\2 g'\5 e'\2 d' | - g4 - } ->> -@end lilypond - -@cindex banjo, accordages -@cindex accordages de banjo - -@funindex banjo-c-tuning -@funindex banjo-modal-tuning -@funindex banjo-open-d-tuning -@funindex banjo-open-dm-tuning -@funindex four-string-banjo - -LilyPond prend en charge un certain nombre d'accordages courants pour -banjo : @code{banjo-c-tuning} sol,do,sol,si,ré (gCGBD), -@code{banjo-modal-tuning} sol,ré,sol,do,ré (gDGCD), -@code{banjo-open-d-tuning} la,ré,fa#,la,ré (aDF#AD) et -@code{banjo-open-dm-tuning} la,ré,fa,la,ré (aDFAD). - -Ces accordages peuvent être convertis pour banjo à quatre cordes au -moyen de la fonction @code{four-string-banjo} : - -@example -\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) -@end example - - -@seealso -Morceaux choisis : -@rlsr{Fretted strings}. - -Les accordages prédéfinis du banjo sont contenus dans le fichier -@file{scm/@/output@/-lib@/.scm}. diff --git a/Documentation/fr/user/fundamental.itely b/Documentation/fr/user/fundamental.itely deleted file mode 100644 index 47eca98f52..0000000000 --- a/Documentation/fr/user/fundamental.itely +++ /dev/null @@ -1,2919 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: db53c05f11bea8831733b1fdf7ebe32cb1f491f4 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave, Jean-Charles Malahieude -@c Translation checkers: John Mandereau -@c Translation status: post-GDP - -@node Fundamental concepts -@chapter Fundamental concepts - -Le tutoriel nous a montré comment obtenir une édition de toute beauté à -partir d'un simple fichier texte. Nous nous intéresserons dans cette -partie aux concepts et techniques qui permettent d'obtenir des -partitions complexes de même qualité. - -@menu -* How LilyPond input files work:: -* Voices contain music:: -* Contexts and engravers:: -* Extending the templates:: -@end menu - -@node How LilyPond input files work -@section How LilyPond input files work - -La mise en forme des fichiers d'entrée de LilyPond est vraiment -peu astreignante, afin d'offrir assez de souplesse aux utilisateurs -expérimentés pour qu'ils puissent organiser leurs fichiers comme -ils l'entendent. Cependant, les nouveaux utilisateurs peuvent parfois -se perdre en raison de cette souplesse. Cette section présente -sommairement l'organisation du code LilyPond, en privilégiant -la simplicité au détriment de certains détails. Vous trouverez une -description plus complète dans @ruser{File structure}. - -@menu -* Introduction to the LilyPond file structure:: -* Score is a (single) compound musical expression:: -* Nesting music expressions:: -* On the un-nestedness of brackets and ties:: -@end menu - -@node Introduction to the LilyPond file structure -@subsection Introduction to the LilyPond file structure - -@cindex format d'entrée -@cindex structure de ficher - -Un fichier d'entrée LilyPond ressemble à : - -@example -\version @w{"@version{}"} -\header @{ @} -\score @{ - @var{...expression musicale composite...} % c'est là qu'est la musique ! - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -Il existe de nombreuses variantes à ce schéma simpliste, mais cet -exemple est un préambule à notre propos. - -@funindex \book -@funindex \score -@cindex book, livre, ouvrage -@cindex livre -@cindex score, partition -@cindex partition - -Jusqu'à présent, les exemples que nous avons pu voir ne faisaient pas -appel à la commande @code{\score@{@}}. En fait, LilyPond ajoute -automatiquement les commandes nécessaires au traitement d'un code -simpliste. LilyPond considère - -@example -\relative c'' @{ - c4 a d c -@} -@end example - -@noindent -comme un raccourci de - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - \relative c'' @{ - c4 a b c - @} - @} - @} - \layout @{ @} - @} -@} -@end example - -En d'autres termes, si le code n'est constitué que d'une expression -musicale simple, LilyPond interprètera le fichier tout comme si cette -expression était incluse dans les commandes de notre premier exemple. - -@cindex contextes implicites -@cindex implicites, contextes - -@strong{Attention :} de nombreux exemples, dans la documentation de -LilyPond, ne font pas apparaître les commandes @code{\new Staff} ou -@code{\new Voice}, qui sont créées implicitement. Ce qui -n'est pas primordial pour des exemples simples le devient dès que la -situation devient un peu plus complexe. Le fait de ne pas déclarer -explicitement un contexte peut alors amener à des résultats quelque peu -surprenants, comme la création d'une portée supplémentaire et -indésirable. La manière de créer explicitement des contextes est -traitée plus en détails au chapitre @ref{Contexts and engravers}. - -@warning{Dès lors que votre musique dépasse quelques lignes, nous vous -engageons fortement à créer explicitement les voix et portées.} - -Mais revenons à notre premier exemple, et penchons-nous tout d'abord sur -la commande @code{\score}. - -Un bloc @code{\score} doit contenir une et une seule expression -musicale, exprimée immédiatement à la suite de la commande -@code{\score}. Rappelez-vous que cette expression peut être n'importe -quoi, d'une note isolée à un gigantesque - -@example -@{ - \new StaffGroup << - @var{...collez ici la partition complète d'un opéra de Wagner...} - >> -@} -@end example - -@noindent -Dès lors que tout cela est entre accolades : @code{@{ ... @}}, LilyPond -le considère comme une et une seule expression musicale. - -Comme nous l'avons vu précédemment, un bloc @code{\score} peut contenir -d'autres informations : - -@example -\score @{ - @{ c'4 a b c' @} - \header @{ @} - \layout @{ @} - \midi @{ @} -@} -@end example - -@funindex \header -@funindex \layout -@funindex \midi -@funindex midi -@cindex header -@cindex en-tête -@cindex layout -@cindex mise en forme -@cindex midi - -@noindent -Gardez à l'esprit que ces trois commandes -- @code{\header}, -@code{\layout} et @code{\midi} -- sont spécifiques : à l'inverse de -toutes les commandes débutant par une oblique inversée @code{\} -(@emph{backslash} en anglais), @strong{elles ne constituent pas} des -expressions musicales et ne peuvent pas faire partie d'expressions -musicales. Elles peuvent de ce fait être placées à l'intérieur du -bloc @code{\score}, ou bien à l'extérieur. En réalité, ces commandes -sont la plupart du temps indépendantes du bloc @code{\score} -- par -exemple, la commande @code{\header} intervient souvent avant le bloc -@code{\score}, comme le montre l'exemple ci-dessus. - -Les deux autres commandes -- @code{\layout @{ @}} et @code{\midi @{@}} --- que nous n'avons pas détaillées pour l'instant, auront respectivement -pour effet, lorsqu'elles interviennent, de produire une sortie -imprimable et un fichier MIDI. Nous nous y intéressons plus -particulièrement dans le manuel de notation, aux chapitres -@ruser{Score layout} et @ruser{Creating MIDI files}. - -@cindex partitions multiples -@cindex book, bloc implicite -@cindex implicite, bloc book -@funindex \book -@funindex book - -Vous pouvez tout à fait mentionner plusieurs blocs @code{\score}. Ils -seront traités comme autant de partitions indépendantes qui seront -regroupées dans un seul fichier résultant. La commande @code{\book} -(@emph{recueil} ou @emph{ouvrage}) n'est pas obligatoire -- elle sera -créée implicitement. Néanmoins, le recours à la commande @code{\book} -vous permettra d'obtenir des fichiers résultants distincts à partir -d'un même fichier source @code{.ly} -- par exemple un fichier par pupitre. - -En résumé : - -Dès que LilyPond rencontre un bloc @code{\book}, il crée un -fichier distinct (.pdf par exemple). Dans le cas où il n'est pas -mentionné explicitement, LilyPond regroupera l'intégralité du code dans -un bloc @code{\book}. - -Tout bloc @code{\score} inclus dans un bloc @code{\book} constitue un -fragment de musique. - -Tout bloc @code{\layout} affecte le bloc @code{\score} ou @code{\book} -au sein duquel il intervient : si c'est à l'intérieur d'un bloc -@code{\score}, seul celui-ci en sera affecté. Dans le cas où le bloc -@code{\layout} se trouve à l'extérieur du bloc @code{\score}, que le -bloc @code{\book} soit explicite ou non, il affectera chacun des -@code{\score} compris dans ce @code{\book}. - -Pour plus de détail à ce sujet, consultez -@ruser{Multiple scores in a book}. - -@cindex variables -@cindex identificateurs - -Un autre raccourci pratique est la possibilité de définir -des variables --- également appelées @qq{identificateurs}. Dans tous -les modèles, vous trouverez : - -@example -melodie = \relative c' @{ - c4 a b c -@} - -\score @{ - @{ \melodie @} -@} -@end example - -Lorsque LilyPond examinera ce fichier, il va prendre la valeur de la -variable @code{melodie}, c'est-à-dire tout ce qui suit le signe @code{=}, -et l'insérer partout où il rencontrera @code{\melodie}. Vous êtes -libre de choisir comment dénommer vos variables@footnote{Les noms de -variables sont sensibles à la casse, et ne peuvent contenir ni -chiffre, ni ponctuation, ni caractère accentué, ni espace.} ; ce peut être -@code{melodie}, @code{global}, @code{maindroitepiano}, ou -@code{laTeteAToto}, tant qu'il ne s'agit pas de @qq{mot réservé}. Pour -plus de détails, voir @ref{Saving typing with variables and functions}. - - -@seealso -Pour une description complète du format des fichiers d'entrée, voir -@ruser{File structure}. - - -@node Score is a (single) compound musical expression -@subsection Score is a (single) compound musical expression - -@funindex \score -@funindex score -@cindex partition -@cindex bloc score, contenu -@cindex Expression musicale composite - -Dans la section précédente, -@ref{Introduction to the LilyPond file structure}, nous -avons vu l'organisation générale des fichiers d'entrée de LilyPond. -Mais c'est comme si nous avions éludé la question essentielle : comment -diable peut-on savoir quoi mettre après @code{\score} ? - -En fait, nous ne l'avons pas éludée du tout : le grand mystère est -tout simplement qu'@strong{il n'y a pas} de mystère. Allez, -expliquons-le en une ligne : - -@quotation -@emph{Un bloc @code{\score} doit commencer par une et une seule -expression musicale.} -@end quotation - -@noindent -Peut-être serait-il judicieux de relire la section -@ref{Music expressions explained}, dans laquelle vous avez -appris à construire de grandes expressions musicales petit bout -par petit bout --- nous avons vu les notes, puis les accords, etc. -Maintenant, nous allons partir d'une grande expression musicale, -et remonter la pente. - -@example -\score @{ - @{ % cette accolade marque le début de l'expression musicale - \new StaffGroup << - @var{...insérez ici l'intégralité d'un opéra de Wagner...} - >> - @} % cette accolade marque la fin de l'expression musicale - \layout @{ @} -@} -@end example - -Un opéra de Wagner multiplierait facilement la longueur de ce manuel -par deux ou trois, alors contentons-nous d'une voix et d'un piano. On -n'a plus besoin d'une partition d'orchestre --- @emph{i.e.} des -portées regroupées en @code{StaffGroup} --- donc laissons cela de -côté. Par contre, nous voulons bien une voix et un piano. - -@example -\score @{ - @{ - << - \new Staff = "chanteur" << - >> - \new PianoStaff = piano << - >> - >> - @} - \layout @{ @} -@} -@end example - -Vous vous souvenez que nous avons recours à @code{<<} et @code{>>} -en lieu et place de @code{@{ ... @}} pour gérer des musiques -simultanées. Et, pour le coup, on aimerait @emph{vraiment} que la -partie vocale et l'accompagnement soient imprimés ensemble... Bien que -faire appel à @code{<< ... >>} ne soit pas réellement nécessaire pour la -portée du chanteur, dans la mesure où elle ne contient qu'une seule -expression musicale, nous vous recommandons de prendre l'habitude de -l'encadrer ainsi plutôt que par de simples accolades --- une portée peut -en effet contenir plusieurs voix. - -@lilypond[verbatim,quote,ragged-right] -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { c'1 } - \addlyrics { And } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { c'1 } - \new Staff = "lower" { c'1 } - >> - >> - \layout { } -} -@end lilypond - -On y voit nettement plus clair maintenant. Nous voici donc avec la -partie du chanteur, qui contient un ensemble @code{Voice}, ce qui dans -LilyPond correspond à une voix, au sens de voix d'une polyphonie plutôt que -de voix chantée --- ce pourrait être une partie de violon par -exemple ---, et des paroles. - -Nous avons également une partie de piano, qui contient deux portées : -une pour la main droite, une autre pour la main gauche. - - -À ce point, on pourrait commencer à ajouter les notes. Dans les -accolades qui suivent @code{\new Voice = chant}, on pourrait commencer -à écrire - -@example -\relative c'' @{ - r4 d8\noBeam g, c4 r -@} -@end example - -Mais si l'on procédait ainsi, la section @code{\score} deviendrait -vite assez touffue, et très rapidement on ne s'y retrouverait plus. -C'est pourquoi on utilisera plutôt des variables, ou identificateurs. -Avec quelques notes de plus, nous pourrions avoir : - -@lilypond[verbatim,quote,ragged-right] -melody = \relative c'' { r4 d8\noBeam g, c4 r } -text = \lyricmode { And God said, } -upper = \relative c'' { 2~ } -lower = \relative c { b2 e2 } - -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { \melody } - \addlyrics { \text } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { \upper } - \new Staff = "lower" { - \clef "bass" - \lower - } - >> - >> - \layout { } -} -@end lilypond - -Respectez bien la différence entre les notes -- introduites par -@code{\relative} --, et les paroles -- introduites par -@code{\lyricmode}. Cette distinction est primordiale afin que LilyPond -puisse interpréter ce qui les suit comme étant respectivement de la -musique ou du texte. - -Quand on écrit, ou que l'on lit, une section @code{\score}, mieux vaut -y aller lentement et soigneusement. Commencez par le niveau le plus -large, puis travaillez sur chaque niveau plus détaillé. À ce propos, -une indentation stricte et propre est vraiment d'une aide précieuse : -assurez-vous que chaque élément d'un même niveau a le même décalage -horizontal dans votre éditeur de texte ! - - -@seealso -Manuel de notation : @ruser{Structure of a score}. - - -@node Nesting music expressions -@subsection Nesting music expressions - -@cindex portées, temporaires -@cindex ossias - -Déclarer toutes les portées dès le départ n'est pas une obligation ; -elles peuvent intervenir temporairement n'importe où dans la partition. -Ceci est tout à fait indiqué pour créer des sections @rglos{ossia}. -L'exemple suivant illustre la manière de créer temporairement une -nouvelle portée, l'espace de trois notes : - -@lilypond[verbatim,quote,ragged-right] -\new Staff { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff { - f8 f c - } - >> - r4 | - } -} -@end lilypond - -@noindent -Vous noterez la taille de la clef, identique à celle que l'on trouve -lors d'un changement en cours de ligne --- légèrement plus petite que -celle imprimée en tête de ligne. - -@cindex portée, positionnement - -Une section ossia se placera au dessus de la portée en procédant ainsi : - -@lilypond[verbatim,quote,ragged-right] -\new Staff = "main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Cet exemple recourt à @code{\with}, que nous verrons en détail plus -avant. C'est un moyen de modifier le comportement par défaut d'une -portée individuelle. Nous indiquons ici que la nouvelle portée doit se -placer au dessus de la portée @qq{principal} plutôt qu'en dessous, ce -qui est le comportement par défaut. - -Les ossia apparaissent souvent sans clef ni métrique, et dans une police -plus petite. Ceci requiert des commandes dont nous n'avons pas encore -parlé. Voir @ref{Size of objects} et @ruser{Ossia staves}. - - -@node On the un-nestedness of brackets and ties -@subsection On the un-nestedness of brackets and ties - -@cindex crochets, imbrication -@cindex crochets, types de - -Nous avons déjà rencontré plusieurs types de crochets au fil de nos -fichiers LilyPond. Ils obéissent à des règles différentes qui peuvent -paraître déroutantes. Avant d'examiner ces règles, voici une liste des -différents types de crochet : - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .3 .7 -@headitem Type de crochet - @tab Fonction -@item @code{@{ .. @}} - @tab Délimite un segment de musique séquentielle -@item @code{< .. >} - @tab Délimite les notes d'un accord -@item @code{<< .. >>} - @tab Délimitent des sections simultanées -@item @code{( .. )} - @tab Marque le début et la fin d'une liaison -@item @code{\( .. \)} - @tab Marque le début et la fin d'une liaison de phrasé -@item @code{[ .. ]} - @tab Marque le début et la fin d'une ligature manuelle -@end multitable - -D'autres constructions permettent d'obtenir des lignes regroupant ou en -travers des notes : les liaisons de prolongation indiquées par un -tilde (@code{~}), les marques de nolet avec -@code{\times@tie{}x/y@tie{}@{..@}}, ou -encore les notes d'ornement avec @code{\grace@{..@}}. - -En dehors de LilyPond, l'imbrication correcte de différents types de -crochets exige un strict respect des conventions, telles que -@code{<<@tie{}[@tie{}@{@tie{}(@tie{}..@tie{})@tie{}@}@tie{}]@tie{}>>}, -où les marques de fermeture interviennent -obligatoirement dans l'ordre exactement inverse à celles d'ouverture. -Ceci @strong{doit} être rigoureusement respecté pour les trois -types de crochets utilisés pour @strong{délimiter} comme l'indique le -tableau ci-dessus. -Une telle rigueur dans l'imbrication n'est @strong{pas} requise pour les -types de crochets dont la fonction est de @strong{marquer}, selon le -tableau ci-dessus, lorsqu'il sont utilisés en combinaison avec des -liaisons de prolongation ou des nolets. En effet, il ne s'agit pas -de crochets ayant pour fonction de borner quelque chose ; ils agissent -plutôt comme marquant le début de quelque chose et sa fin. - -Ainsi, et bien que ce ne soit pas très musical, une liaison de phrasé -peut débuter avant l'insertion d'une ligature manuelle et s'arrêter -avant la fin de la ligature : - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] - { g8\( a b[ c b\) a] } -@end lilypond - -De manière générale, différents types de crochets, notamment s'ils -indiquent des nolets, liaisons de prolongation ou notes d'ornements, -peuvent se mélanger entre eux. L'exemple suivant montre une ligature -qui se prolonge sur un triolet (ligne 1), puis une liaison qui se -prolonge sur un triolet (ligne 2) et enfin une ligature et une liaison -qui s'étendent sur un triolet, lui-même lié à un quintolet agrémenté -d'une liaison de phrasé se poursuivant (lignes 3 et 4). - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - r16[ g16 \times 2/3 {r16 e'8] } - g16( a \times 2/3 {b d) e' } - g8[( a \times 2/3 {b d') e'~]} - \times 4/5 {e'32\( a b d' e'} a'4.\) -} -@end lilypond - - -@node Voices contain music -@section Voices contain music - -Les chanteurs utilisent leur voix pour chanter ; il en va de même pour -LilyPond. En fait, la musique de chacun des instruments d'une partition -est contenue dans des voix (@emph{Voices} en anglais) et qui se trouve -être le concept fondamental de LilyPond. - -@menu -* I'm hearing Voices:: -* Explicitly instantiating voices:: -* Voices and vocals:: -@end menu - -@node I'm hearing Voices -@subsection I'm hearing Voices - -@cindex polyphonie -@cindex calques (layers) -@cindex voix multiples -@cindex Voice, contexte -@cindex contexte de voix -@cindex musique simultanée -@cindex musique concurrente -@cindex voix ou accords -@cindex accords ou voix - -Dans une partition gérée par LilyPond, le niveau le plus bas, ou bien -élémentaire ou fondamental, est le @qq{contexte de voix} -- @emph{Voice -context} en anglais --. Pour d'autres logiciels, on fait tantôt -référence à la notion de @qq{couche} ou de @qq{calque}. - -En réalité, le contexte de voix est le seul à pouvoir contenir de la -musique. S'il n'est pas déclaré explicitement, il sera créé -automatiquement comme nous l'avons vu au début de ce chapitre. Certains -instruments, le hautbois par exemple, ne peuvent jouer qu'une seule note -à la fois. On dit en pareil cas qu'il s'agit de musique monophonique, -et nous n'aurons alors besoin que d'une seule voix. Les intruments qui, -comme le piano, peuvent émettre plusieurs sons en même temps, nécessitent -de recourir à plusieurs voix pour gérer efficacement l'alignement des -notes et rythmes différents. - -Si une voix unique peut tout à fait contenir plusieurs notes dans un -accord, à partir de quand aurons-nous vraiment besoin de plusieurs -voix ? Considérons déjà ces quatre accords : - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -\key g \major -4 -@end lilypond - -Nous exprimons ici chacun des accords par l'utilisation de -chevrons gauche et droite simples, @code{< ... >}, puisque nous -n'avons besoin que d'une seule voix. Supposons maintenant que le fa -dièse soit une croche, suivie d'un sol croche -- une note de passage -vers le la ? Nous avons alors deux notes qui débutent au même moment, -mais dont la durée est différente : un ré noire et un fa dièse croche. -Comment coder cela ? Dans la mesure où toutes les notes d'un accord -doivent avoir la même durée, nous ne pouvons pas écrire un accord. Nous -ne pouvons pas non plus écrire deux notes séparées, puisqu'elles -débutent en même temps. Nous avons alors besoin de deux voix. - -Voyons comment cela se pratique selon la grammaire de LilyPond. - -@funindex << \\ >> -@funindex \\ - -Le plus sûr moyen de saisir un fragment où plusieurs voix cohabitent -sur la même portée, consiste à saisir chacune des voix séquentiellement -(avec @code{@{...@}}), puis à les combiner en simultané à l'aide de -doubles chevrons gauche/droite, @code{<<...>>}. Les fragments -devront être séparés par une double oblique inversée, @code{\\}, pour -les affecter à des voix séparées. Dans le cas contraire, les notes -seraient toutes affectées à une même voix, ce qui pourait générer des -erreurs. Cette manière de procéder est tout à fait indiquée dans le cas -d'une pièce ne comportant que quelques courts passages de polyphonie. - -Voici comment éclater les accords en deux voix, avec la note de passage -et la liaison : - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key g \major -% Voice "1" Voice "2" -<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> | -@end lilypond - -Notez que les hampes de la seconde voix sont dirigées vers le bas. - -Autre exemple : - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -% Voice "1" Voice "2" -<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | -<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | -<< { a2. r4 } \\ { fis2. s4 } >> | -@end lilypond - -Le recours à une construction @code{<< \\ >>} particulière à chaque -mesure n'est pas nécessaire. Bien qu'on y gagne en lisibilité si chaque -mesure ne contient que quelques notes, il est plus judicieux de -carrément séparer chaque voix : - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -<< { - % Voice "1" - r4 g g4. a8 | - bes4 bes c bes | - a2. r4 | -} \\ { - % Voice "2" - d,2 d4 g | - g4 g g8( a) g4 | - fis2. s4 | -} >> -@end lilypond - - -@cindex voix, nomage -@cindex voix et constructions simultanées -@cindex liaisons et constructions simultanées - -Cet exemple ne comporte que deux voix, mais il peut être étendu pour -traiter trois voix ou plus en ajoutant autant de séparateurs @code{\\} -que de besoin. - -Les contextes @code{Voice} portent les noms @code{"1"}, @code{"2"}, etc. -Pour chacun de ces contextes, la direction et l'orientation des -liaisons, hampes, nuances, etc. est définie automatiquement. - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - % Main voice - c16 d e f - % Voice "1" Voice "2" Voice "3" - << { g4 f e } \\ { r8 e4 d c8 ~ } >> | - << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | -} -@end lilypond - -Ces voix sont séparées de la voix principale, laquelle contient les notes en -dehors de la construction @code{<< .. >>} -- que nous appellerons -@emph{construction simultanée}. Les liaisons, de prolongation ou non, -ne peuvent relier des notes que si elles appartiennent à la même voix ; -elles ne peuvent ni pénétrer une contruction simultanée, ni en sortir. -Inversement, les voix parallèles issues de constructions -simultanées apparaissant sur une même portée appartiennent à la même -voix. Les autres propriétés liées au contexte de voix s'appliquent -tout au long des constructions simultanées. Reprenons notre exemple, en -affectant une couleur et une allure différentes aux notes de chacune des -voix. Vous noterez qu'un changement apporté à une voix ne se propage -pas aux autres, et qu'il se reporte jusqu'au bout, et que la voix aux -triangles bleus comporte une liaison de prolongation entre deux -constructions. - -@lilypond[quote,verbatim] -\new Staff \relative c' { - % Main voice - c16 d e f - << % Bar 1 - { - \voiceOneStyle - g4 f e - } - \\ - { - \voiceTwoStyle - r8 e4 d c8 ~ - } - >> - << % Bar 2 - % Voice 1 continues - { d2 e2 } - \\ - % Voice 2 continues - { c8 b16 a b8 g ~ g2 } - \\ - { - \voiceThreeStyle - s4 b4 c2 - } - >> -} -@end lilypond - -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -Les commandes @code{\voiceXXXStyle} sont principalement dédiées à une -utilisation pédagogique, comme l'est ce document. Elles modifient la -couleur des hampes et ligatures et le style de tête des notes, pour -permettre une meilleure distinction entre les différentes voix. La -première voix comporte des têtes en losange rouge, la deuxième en -triangle bleu, la troisième en cercle barré vert, la quatrième (non -utilisée ici) en croix magenta ; @code{\voiceNeutralStyle} (non utilisé -ici) revient au style par défaut. Nous verrons plus tard comment créer -de telles commandes. -Voir @ref{Visibility and color of objects} et -@ref{Using variables for tweaks}. - -La polyphonie ne modifie en rien la relation entre les notes au sein -d'un bloc @code{\relative @{ @}}. Chaque note est calculée par rapport -à celle qui la précède, ou bien par rapport à la première note de -l'accord qui précède. Ainsi, dans - -@example -\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} -@end example - -@noindent -@code{noteB} est relative à @code{noteA} @* -@code{noteC} est relative à @code{noteB}, pas à @code{noteA} @* -@code{noteD} est relative à @code{noteB}, pas à @code{noteA} ni -@code{noteC} @* -@code{noteE} est relative à @code{noteD}, pas à @code{noteA} - -Une méthode alternative, et qui peut simplifier les choses si les notes -des différentes voix sont espacées, consiste à placer une commande -@code{\relative} au début de chacune des voix : - -@example -\relative c' @{ noteA ... @} -<< - \relative c'' @{ < noteB noteC > ... @} -\\ - \relative g' @{ noteD ... @} ->> -\relative c' @{ noteE ... @} -@end example - -Pour finir, analysons le principe d'utilisation des voix dans une pièce -complexe. Nous allons nous concentrer sur les deux premières mesures du -second des Deux nocturnes, opus 32 de Chopin. Cet exemple nous servira -à plusieurs reprises, y compris dans le chapitre suivant, pour illustrer -certaines techniques de notation. Aussi, ne prétez pas trop d'attention -à ce qui pour l'instant pourrait vous paraître vraiment mystérieux dans -le code, et intéressons-nous uniquement à ce qui concerne la musique et -les voix -- ce qui est plus compliqué sera décortiqué plus tard. - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % No voice three - \\ % Voice four - { - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - -La direction des hampes sert souvent à indiquer dans la continuité deux -lignes mélodiques simultanées. Ici, les hampes des notes les plus -hautes vont vers le haut, et celles des notes plus basses vers le -bas. C'est une première indication que nous avons eu recours à plus -d'une voix. - -Mais le réel besoin de multiples voix se fait sentir dès lors que -plusieurs notes qui débutent en même temps ont des durées différentes. -C'est évident au troisième temps de la première mesure : le la bémol est -une noire pointée, le fa une noire, et le ré bémol une blanche. On ne -peut les grouper dans un accord, puisque toutes les notes composant un -accord doivent être de même durée. On ne peut non plus les écrire -séquentiellement, puisqu'elles débutent toutes au même instant. Ce -fragment de mesure nécessite trois voix, et une bonne pratique voudrait -que l'intégralité de la mesure soit sur trois voix, comme ci-dessous où -nous avons une allure et une couleur différentes aux notes de chacune -d'entre elles. Une fois de plus, nous reviendrons plus tard sur le code -que vous ne comprendriez pas. - -@c The following should appear as music without code -@c The three voice styles should be defined in -init -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { % Voice one - \voiceOneStyle - c2 aes4. bes8 - } - \\ % Voice two - { \voiceTwoStyle - aes2 f4 fes - } - \\ % No Voice three (we want stems down) - \\ % Voice four - { \voiceThreeStyle - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - -Essayons à présent de coder cette musique en partant de zéro. Comme -nous le verrons, certaines difficultés vont se présenter. Partons de ce -que nous avons appris : utilisons la construction @code{<< \\ >>} pour -saisir la première mesure dans trois voix : - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } - >> - 1 -} -@end lilypond - -@cindex stem down -@cindex hampes en bas -@cindex stem up -@cindex hampes en haut - -La direction des hampes est attribuée automatiquement : les voix -impaires portent des hampes vers le haut, les voix paires des hampes -vers le bas. Les hampes des voix 1 et 2 sont orientées comme il faut -mais celles de la voix 3 devraient, dans le cas qui nous occupe, aller -vers le bas. Nous pouvons corriger cela en sautant la voix 3 et en -plaçant la musique dans la voix 4 : - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % Omit Voice three - \\ % Voice four - { 2 des2 } - >> | - 1 | -} -@end lilypond - -@noindent -Cette manipulation nous permet de régler la direction des hampes, mais -elle engendre un problème que l'on rencontre parfois avec de multiples -voix, à savoir que les hampes d'une voix peuvent chevaucher les têtes de -note des autres voix. En matière de mise en forme des notes, LilyPond -tolère que des notes ou accords appartenant à deux voix se retrouvent -dans le même empilement de notes (@emph{note column} en anglais) si tant -est que ces hampes vont dans des directions opposées ; néanmoins les -notes des troisième et quatrième voix seront décalées si nécessaire pour -éviter que les têtes ne se chevauchent. Cela marche plutôt bien, mais -dans notre exemple, les notes de la voix la plus basse ne sont vraiment -pas correctement placées. LilyPond met à notre disposition plusieurs -moyens d'ajuster le positionnement horizontal des notes. Nous ne sommes -pas encore tout à fait prêts pour voir comment corriger cela, aussi nous -examinerons ce problème dans un autre chapitre (voir la propriété -@code{force-hshift} dans @ref{Fixing overlapping notation}). - - -@seealso -Manuel de notation : @ruser{Multiple voices}. - - -@node Explicitly instantiating voices -@subsection Explicitly instantiating voices - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceTwo -@funindex voiceTwo -@funindex \voiceThree -@funindex voiceThree -@funindex \voiceFour -@funindex voiceFour -@funindex \oneVoice -@funindex oneVoice -@funindex \new Voice -@cindex Voice, création de contextes - -Les contextes @rinternals{Voice} peuvent être déclarés manuellement -dans un bloc @code{<< >>} pour créer de la musique polyphonique, en -utilisant @code{\voiceOne}, @dots{} jusqu'à @code{\voiceFour} pour -assigner des directions de hampes et un déplacement horizontal pour -chaque partie. Cette méthode apporte de la clarté pour des partitions -plus importantes puisqu'elle permet de bien séparer les voix et de leur -affecter un nom plus parlant. - -En particulier, la construction @code{<< \\ >>} que nous avons vue -précédemment : - -@example -\new Staff @{ - \relative c' @{ - << @{ e4 f g a @} \\ @{ c,4 d e f @} >> - @} -@} -@end example - -@noindent -équivaut à - -@example -\new Staff << - \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} - \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} ->> -@end example - -Toutes deux produiront - -@c The following example should not display the code -@lilypond[ragged-right,quote] -\new Staff << - \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } - \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } ->> -@end lilypond - -@cindex Voice, retour à un seul contexte -@cindex retour à un contexte Voice unique - -Les commandes @code{\voiceXXX} fixent la direction des hampes, des -liaisons de prolongation et de phrasé, des articulations, des -annotations, des points d'augmentation des notes pointées et des -doigtés. @code{\voiceOne} et @code{\voiceThree} font pointer ces objets -vers le haut, alors que @code{\voiceTwo} et @code{\voiceFour} les font -pointer vers le bas. Ces commandes génèrent par ailleurs un décalage -horizontal de chacune des voix pour éviter tout risque de chevauchement -entre plusieurs notes. La commande @code{\oneVoice} les ramène aux -critères normaux. - -Voyons, à l'aide de ces exemples simples, les effets respectifs de -@code{\oneVoice}, @code{\voiceOne} et @code{\voiceTwo} sur les -annotations, liaisons de prolongation ou de phrasé, et sur les nuances. - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - % Default behavior or behavior after \oneVoice - c d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceOne - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceTwo - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -Voyons à présent trois différentes façons d'exprimer un passage -polyhonique, à partir d'un exemple de la section précédente. Chacune -d'elles aura ses avantages selon les circonstances. - -Une expression séquentielle qui apparaît en premier dans un @code{<< >>} --- attention, @strong{pas} dans une construction @code{<< \\ >>} -- -appartient à la voix principale. Ceci est utile lorsque des voix -supplémentaires apparaissent pendant que la voix principale est jouée. -Voici une meilleure réalisation de notre exemple. -Les notes colorées et en croix mettent en évidence le fait que la -mélodie principale est maintenant dans un seul contexte de voix, ce qui -permet d'ajouter une liaison de phrasé à l'ensemble. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - \voiceOneStyle - % The following notes are monophonic - c16^( d e f - % Start simultaneous section of three voices - << - % Continue the main voice in parallel - { g4 f e | d2 e2) } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s2. | s4 b4 c2 - } - >> -} -@end lilypond - -@cindex imbrication d'expressions musicales -@cindex imbrication de constructions simultanées - -@cindex voix temporaires -@cindex voix, imbrication - - -Dans certaines circonstances de polyphonie complexe, vous pourrez être -amené à recourir à une voix temporaire, ce qui peut être une manière -plus naturelle de saisir la musique : - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - c16^( d e f - << - { g4 f e | d2 e2) } - \new Voice { - \voiceTwo - r8 e4 d c8 ~ | - << - {c8 b16 a b8 g ~ g2} - \new Voice { - \voiceThree - s4 b4 c2 - } - >> - } - >> -} -@end lilypond - -@cindex espacement des notes - -Cette manière de brièvement imbriquer des voix est bien utile pour de -courts fragments de musique polyphonique. Mais lorsqu'une portée est -très souvent polyphonique, on peut y gagner en clarté si l'on utilise -plusieurs voix sur l'ensemble de cette portée et que l'on positionne des -silences invisibles pour sauter les moments où il n'y a rien dans cette -voix. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' << - % Initiate first voice - \new Voice { - \voiceOne - c16^( d e f g4 f e | d2 e2) | - } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s1 | s4 b4 c2 | - } ->> -@end lilypond - -@subsubheading Note columns - -@cindex note column -@cindex empilement de notes -@cindex collisions de notes -@cindex shift, commandes -@cindex décalage, commandes -@funindex \shiftOff -@funindex shiftOff -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn - -Les notes rapprochées d'un accord, ou des notes de différentes voix qui -tombent ensemble, seront rangées sur deux colonnes, voire plus, pour -palier d'éventuels chevauchements des têtes. On appelle cela des -empilements de notes. Chaque voix dispose de plusieurs empilements, et -l'attribution d'un décalage à une voix en particulier s'appliquera à -l'empilement en question s'il y avait risque de collision. -Nous en avons une illustration à la deuxième mesure de l'exemple -ci-dessus : le do de la deuxième voix est décalé à droite du ré de la -première voix et, dans l'accord final, le do de la troisième voix est -lui aussi décalé à droite des autres notes. - -Les commandes @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, et -@code{\shiftOff} spécifient le degré nécessaire de décalage qui sera -appliqué aux notes ou accords de la voix en question afin d'éviter une -collision. Par défaut, les voix extérieures -- normalement les -première et deuxième -- se verront attribuer @code{\shiftOff}, alors que -les voix intérieures -- trois et quatre -- se verront attribuer -@code{\shiftOn}. Lorsqu'un décalage s'applique, les voix un et trois -iront vers la droite, et les voix deux et quatre vers la gauche. - -@code{\shiftOnn} et @code{\shiftOnnn} définissent des degrés augmentés -de décalage auquel on peut devoir temporairement recourir dans des -situations complexes -- voir @ref{Real music example}. - -Un empilement peut ne contenir qu'une note ou un accord dans une voix -aux hampes vers le haut, et une note ou un accord dans une voix -aux hampes vers le bas. Dans le cas où des notes, issues de deux voix -ayant toutes deux des hampes dans la même direction, se retrouvent au -même moment et qu'aucun décalage n'a été spécifié ou qu'ils sont -identiques, LilyPond vous le signalera par le message @qq{Trop -d'empilements en conflit}. - - -@seealso -Manuel de notation : @ruser{Multiple voices}. - - -@node Voices and vocals -@subsection Voices and vocals - -La musique vocale est une gageure en soi : il nous faut combiner deux -expressions différentes -- des notes et des paroles. - -@funindex \new Lyrics -@funindex \lyricsto -@funindex lyricsto -@funindex Lyrics -@cindex Lyrics, création d'un contexte -@cindex paroles, affectation à une voix - -Nous avons déjà abordé la commande @code{\addlyrics}, qui permet de -gérer des partitions simples. Cette technique est cependant -relativement limitée. Pour de la musique un peu plus compliquée, il -vous faudra contenir les paroles dans un contexte @code{Lyrics}, créé -par la commande @code{\new Lyrics} ; vous relierez ensuite ces paroles -aux notes grâce à la commande @code{\lyricsto@{@}} et au nom assigné à -la voix en question. - -@lilypond[quote,verbatim,fragment] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - \new Lyrics \lyricsto "one" { - No more let sins and sor -- rows grow. - } ->> -@end lilypond - -Notez bien que les paroles sont liées à un contexte de voix -(@code{Voice}), @strong{non} à un contexte de portée (@code{Staff}). Il -est donc nécessaire de créer explicitement les contextes @code{Staff} -et @code{Voice}. - -@cindex paroles et ligatures -@cindex ligatures et paroles -@funindex \autoBeamOff -@funindex autoBeamOff - -Si la ligature automatique que LilyPond applique par défaut -est pleinement adaptée en matière de musique instrumentale, il -n'en va pas de même dans le cas d'une musique associée à des paroles, -et pour laquelle soit les ligatures sont carrément absentes, soit elles -servent à indiquer un mélisme -- plusieurs notes pour une même syllabe. -Dans l'exemple qui suit, nous utilisons la commande @code{\autoBeamOff} -afin de désactiver les ligatures automatiques. - -@funindex \new ChoirStaff -@funindex ChoirStaff -@funindex \lyricmode -@funindex lyricmode -@cindex structure d'une partition vocale -@cindex chœur, partie de - -Nous allons reprendre un extrait de Judas Maccabæus pour illustrer ce -que cette technique apporte en flexibilité. Nous commençons par -utiliser des variables afin de séparer de la structure de la portée -aussi bien la musique que les paroles. Nous ajoutons par la même -occasion un crochet spécifique aux portées pour chœur -(@code{ChoirStaff}). Quant aux blocs de paroles, nous les faisons -précéder de la commande @code{\lyricmode} pour nous assurer qu'elles -seront interprétées comme telles, et non comme de la musique. - -@lilypond[quote,verbatim] -global = { \time 6/8 \partial 8 \key f \major} -SopOneMusic = \relative c'' { - c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } -SopTwoMusic = \relative c' { - r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' } -SopOneLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, __ } -SopTwoLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, } - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "SopOne" { - \global - \SopOneMusic - } - \new Lyrics \lyricsto "SopOne" { - \SopOneLyrics - } - >> - \new Staff << - \new Voice = "SopTwo" { - \global - \SopTwoMusic - } - \new Lyrics \lyricsto "SopTwo" { - \SopTwoLyrics - } - >> - >> -} -@end lilypond - -Voici donc la structure de base valable pour toute partition vocale. On -peut y ajouter d'autres portées si besoin est, d'autres voix à -chaque portée, plusieurs couplets aux paroles, et les variables -contenant la musique peuvent même être stockées dans des fichiers -indépendants dès lors que leur longueur devient conséquente. - -@cindex structure d'hymne -@cindex SATB, structure -@cindex partition vocale avec plusieurs couplets -@cindex couplets multiples et musique vocale - -Voici maintenant la première ligne d'une hymne pour chœur à quatre voix -mixtes, comportant quatre couplets. Les paroles sont ici identiques -pour les quatre voix. Vous remarquerez le recours aux variables afin de -séparer de la structure de portée les notes et les paroles. Vous -noterez aussi une variable particulière, que nous avons appelée -@qq{MetriqueArmure}, et qui contient plusieurs commandes que nous -utiliserons dans les deux portées. Dans de nombreux autres exemples, -elle s'appelle @qq{global}. - -@lilypond[quote,verbatim] -TimeKey = { \time 4/4 \partial 4 \key c \major} -SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyricmode { - E -- | ter -- nal fa -- ther, | strong to save, } -VerseTwo = \lyricmode { - O | Christ, whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { - O | Ho -- ly Spi -- rit, | who didst brood } -VerseFour = \lyricmode { - O | Tri -- ni -- ty of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Sop" { \VerseOne } - \new Lyrics \lyricsto "Sop" { \VerseTwo } - \new Lyrics \lyricsto "Sop" { \VerseThree } - \new Lyrics \lyricsto "Sop" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - -@cindex couplet et refrain - -Nous allons terminer en voyant comment coder un couplet pour soliste -suivi d'un refrain à deux voix sur deux portées. Les explications sont -importantes, dans la mesure où les moyens mis en œuvre pour arriver à -enchaîner le solo et la polyphonie dans une seule et même partition sont -quelque peu tirés par les cheveux. - -Commençons par ouvrir un bloc @code{score} qui contiendra un -@code{ChoirStaff}, puisque nous aimerions voir un crochet au début du -système choral. Nous devrions avoir, après @code{\new ChoirStaff}, un -double chevron gauche pour synchroniser les portées ; mais comme nous -reportons le parallélisme après le solo, nous utilisons des accolades -- -un double chevron ne serait cependant pas génant. À l'intérieur du -@code{ChoirStaff}, nous voulons en premier la portée avec le couplet. -Puisqu'elle englobe parallèlement des notes et des paroles, nous devons -encadrer les @code{\new Voice} et @code{\new Lyrics} de doubles -chevrons gauche/droite pour les faire démarrer de concert : - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -versewords = \lyricmode { - One two three four five six -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - } - \new Lyrics \lyricsto verse { - \versewords - } - >> - } -} -@end lilypond - -Voici la ligne du couplet réalisée. - -Nous poursuivons avec refrainA, sur la même portée, alors même qu'une -deuxième portée s'amorce en parallèle pour contenir refrainB. Cette -section parallèle doit s'enchaîner directement à la suite du -@code{\break} de la voix contenant le couplet -- il s'agit bien de la -@emph{même} voix. Voici cette section parallèle. On pourrait tout à -fait ajouter encore d'autres portées ici, toujours de la même manière. - -@example -<< - \refrainnotesA - \new Lyrics \lyricsto verse @{ - \refrainparolesA - @} - \new Staff << - \new Voice = "refrainB" @{ - \refrainnotesB - @} - \new Lyrics \lyricsto "refrainB" @{ - \refrainparolesB - @} - >> ->> -@end example - -Et voici le résultat final, avec ses deux portées pour la partie -chorale, et qui montre comment la section en parallèle s'enchaîne avec -la voix du couplet : - -@lilypond[quote,verbatim, ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - << - \refrainnotesA - \new Lyrics \lyricsto "verse" { - \refrainwordsA - } - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> - } -} -@end lilypond - -@cindex book, exemple d'utilisation -@cindex recueil, exemple d'utilisation -@funindex \book -@funindex book - -Bien que ce que nous venons de voir constitue un exercice intéressant et -fort utile pour comprendre comment s'articulent des blocs séquentiels et -simultanés, nous aurions aussi pu coder notre exemple sous la forme de -deux blocs @code{\score} au sein d'un bloc @code{\book} implicite : - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new Staff << - \new Voice = "verse" { - \versenotes - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> -} - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "refrainA" { - \refrainnotesA - } - \new Lyrics \lyricsto "refrainA" { - \refrainwordsA - } - >> - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> -} -@end lilypond - - -@seealso -Manuel de notation : @ruser{Vocal music}. - - -@node Contexts and engravers -@section Contexts and engravers - -Nous avons évoqué rapidement les contextes et graveurs dans les chapitres -précédents ; examinons en détail ces concepts essentiels à la -maîtrise de LilyPond. - -@menu -* Contexts explained:: -* Creating contexts:: -* Engravers explained:: -* Modifying context properties:: -* Adding and removing engravers:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@cindex contextes, les différents - -Imprimer de la musique impose d'ajouter un certain nombre d'éléments de -notation. Par exemple, voici un fragment de partition, précédé du code -qui l'engendre : - -@lilypond[quote,verbatim,relative=2,fragment] -cis4 cis2. g4 -@end lilypond - -Si le code est assez austère, dans la partition ont été ajoutés un -chiffre de mesure, des barres de mesure, des altérations et une clé. -Pour une bonne raison : LilyPond @emph{interprète} le code. Il le -compulse dans l'ordre chronologique, de même qu'on lit une partition de -gauche à droite ; et pendant ce traitement, le logiciel garde en -mémoire les limites des mesures, ou encore quelles hauteurs de note -demandent des altérations accidentelles. Ces informations se présentent -à plusieurs niveaux : ainsi, une altération n'a d'effet que sur une -seule portée, tandis qu'une barre de mesure doit être synchronisée sur -toute l'étendue verticale de la partition. - -LilyPond regroupe ces règles et ces fragments d'information dans des -@emph{Contextes}. Certains contextes sont les voix (contexte @code{Voice}), -les portées (contexte @code{Staff}), ou la partition dans son ensemble -(contexte @code{Score}). Ils sont ordonnés hiérarchiquement : ainsi un -contexte @code{Staff} peut contenir plusieurs contextes -@code{Voice}, et un contexte @code{Score} peut contenir plusieurs -contextes @code{Staff}. - -@quotation -@image{context-example,5cm,,} -@end quotation - -Chaque contexte est chargé de faire appliquer certaines règles de gravure, -de créer certains objets, et de prendre en compte les propriétés qui leur -sont associées. Ainsi, le contexte @code{Voice} peut faire intervenir une -altération accidentelle, puis le contexte @code{Staff} devra déterminer s'il -faudra imprimer ou non cette dernière dans la suite de la mesure. - -Les barres de mesure, quant à elles, sont alignées verticalement grâce au -contexte @code{Score} par défaut. -En revanche, dans une musique polymétrique, par exemple mêlant une -portée à 3/4 et une autre à 4/4, les barres de mesures n'ont plus à être -alignées : il faut alors modifier les comportement par défaut des -contextes @code{Score} et @code{Staff}. - -Dans une partition très simple, les contextes sont créés implicitement -et peuvent être ignorés. Mais lorsqu'il s'agit de morceaux plus amples --- entendons par là tout ce qui s'écrit sur plus d'une portée -- il faut -les créer explicitement pour être sûr d'obtenir toutes les portées -nécessaires, et dans le bon ordre. Enfin, pour des morceaux impliquant -une notation spéciale, modifier les contextes ou en créer de nouveaux -devient extrêment utile. - -En plus des contextes @code{Score,} @code{Staff} et @code{Voice} sont -disponibles d'autres contextes intermédiaires entre les niveaux -partition et portée, chargés de gérer certains regroupement, tels que -@code{PianoStaff} ou @code{ChoirStaff}. Vous disposez aussi d'autres -contextes de portée ou de voix alternatifs, ainsi que des contextes -spécifiques pour les paroles, les percussions, les tablatures -d'instruments frettés, la basse chiffrée, etc. - -Le nom de chacun des contextes est formé d'un ou plusieurs mots aux -initiales en majuscule et directement accolés les uns aux autres sans -ponctuation, comme par exemple @code{GregorianTranscriptionStaff}. - - -@seealso -Manuel de notation : @ruser{Contexts explained}. - - -@node Creating contexts -@subsection Creating contexts - -@funindex \new -@funindex new -@cindex nouveaux contextes -@cindex Contextes, création de - -Il en va des contextes comme de toute hiérarchie : il faut un sommet -- -le contexte @code{Score} en l'occurence. La commande @code{\score} est -chargée de le créer, mais pour des partitions simples, il le sera -automatiquement. - -Lorsqu'une partition ne comporte qu'une voix et une seule portée, vous -pouvez laisser LilyPond créer automatiquement les contextes @code{Voice} -et @code{Staff} ; mais leur présence explicite devient indispenssable dès -que la situation se complique. -Le moyen le plus simple est d'utiliser la commande @code{\new}. Elle -doit intervenir avant une expression musicale, ainsi : - -@example -\new @var{type} @var{expression-musicale} -@end example - -@noindent -où @var{type} correspond au nom du contexte (tels @code{Staff} ou -@code{Voice}). Cette commande crée un nouveau contexte, puis -interprète l'@var{expression-musicale} contenue dans ledit -contexte. - -Notez bien qu'il n'existe pas de commande @code{\new Score}, puisque le -contexte premier que constitue @code{Score} est créé par @code{\score}. - -Nous avons déjà vu au cours des chapitres précédents de nombreux -exemples où des contextes @code{Staff} ou @code{Voice} étaient créés au -besoin. Dans un but didactique, voici maintenant une application -complète et largement commentée : - -@lilypond[quote,verbatim,ragged-right] -\score { % start of single compound music expression - << % start of simultaneous staves section - \time 2/4 - \new Staff { % create RH staff - \key g \minor - \clef "treble" - \new Voice { % create voice for RH notes - \relative c'' { % start of RH notes - d4 ees16 c8. | - d4 ees16 c8. | - } % end of RH notes - } % end of RH voice - } % end of RH staff - \new Staff << % create LH staff; needs two simultaneous voices - \key g \minor - \clef "bass" - \new Voice { % create LH voice one - \voiceOne - \relative g { % start of LH voice one notes - g8 ees, | - g8 ees, | - } % end of LH voice one notes - } % end of LH voice one - \new Voice { % create LH voice two - \voiceTwo - \relative g { % start of LH voice two notes - g4 ees | - g4 ees | - } % end of LH voice two notes - } % end of LH voice two - >> % end of LH staff - >> % end of simultaneous staves section -} % end of single compound music expression -@end lilypond - -Notez que toute déclaration qui ouvre un bloc par une -accolade, @code{@{}, ou un double chevron gauche, @code{<<}, est -indentée de deux espaces supplémentaires, et de deux autres pour sa -marque de fermeture. Bien que ceci ne soit pas obligatoire, nous vous -invitons à adopter cette pratique qui vous évitera nombre d'erreurs -@qq{accolades non appariées}. La structure de la musique apparaît ainsi -au premier coup d'œil, et les défauts de parité plus facilement -repérables. Vous remarquerez que la portée MG est créée à l'aide d'un -double chevron gauche -- nécessaire pour gérer ses deux voix -- alors que la -portée MD ne contient qu'une seule expression musicale -- il n'y a -qu'une voix -- bornée par des accolades simples. - -@cindex contexte, noms de -@cindex nommage des contextes - -La commande @code{\new} peut aussi permettre de nommer le contexte créé, -et ainsi le distinguer des autres contextes déjà existants : - -@example -\new @var{type} = @var{"UnNom"} @var{expression-musicale} -@end example - -Vous noterez la distinction entre le nom du type de contexte, -@code{Staff}, @code{Voice}, etc, et le nom -- une simple suite de -lettres au bon gré de l'utilisateur -- permettant d'identifier une -instance particulière du type en question. Vous pouvez utiliser des -chiffres et espaces, à la stricte condition d'englober le tout dans des -guillemets ; l'identificateur suivant est tout à fait valide : -@code{\new Staff = "MaPortee 1" @var{expression-musicale}}. -Comme nous l'avons déjà vu dans le chapitre consacré aux paroles -(@ref{Voices and vocals}), cet identifiant permettra ensuite de se -référer à ce contexte particulier. - - -@seealso -Manuel de notation : @ruser{Creating contexts}. - - -@node Engravers explained -@subsection Engravers explained - -@cindex engravers -@cindex graveurs - -Tout point qui compose une partition générée par LilyPond est -produit par un graveur (@emph{Engraver} en anglais). Ainsi, il y en a -un qui imprime les portées, un autre les têtes de note, un autre les -hampes, un autre encore pour les ligatures, etc. LilyPond dispose de -plus de 120 graveurs ! La plupart des partitions ne requièrent de -s'intéresser qu'à quelques-uns seulement, et pour des partitions -simples, vous n'aurez même pas à vous en préoccuper. - -Les graveurs résident et opèrent au sein des contextes. -Les graveurs tels que le @code{Metronome_mark_engraver}, dont les effets -s'appliquent à la partition dans son intégralité, opèrent au sein du -contexte de plus haut niveau -- le contexte @code{Score}. - -Les graveurs @code{Clef_engraver} et @code{Key_engraver} seront logés -dans chacun des contextes @code{Staff} ; deux portées peuvent requérir -des clefs et des armures différentes. - -Les graveurs @code{Note_heads_engraver} et @code{Stem_engraver} résident -dans chacun des contextes @code{Voice}, contexte du plus bas niveau. - -Chaque graveur confectionne les objets spécifiquement associés à sa -fonction et traite les propriétés attachées à cette fonction. Ces -propriétés, tout comme celles relatives aux contextes, peuvent être -modifiées afin d'influencer le comportement du graveur et par voie de -conséquence le rendu des éléments dont il a la charge. - -Les graveurs ont tous un nom composé, formé des différents mots -décrivant leur fonction. Seule l'initiale du premier mot est en -majuscule, et les mots qui le composent sont joints par un caractère -souligné. Ainsi, le @code{Staff_symbol_engraver} est chargé de créer -les lignes de la portée, et le @code{Clef_engraver} détermine la hauteur -de référence de la portée en dessinant le symbole de la clef. - -Voici quelques-uns des graveurs les plus courants, ainsi que leur -fonction. Vous noterez qu'il est facile d'en connaître la fonction à -partir du nom, et vice versa. - -@multitable @columnfractions .3 .7 -@headitem Graveur - @tab Fonction -@item Accidental_engraver - @tab Crée les altérations, y compris de précaution, accidentelles ou suggérées -@item Beam_engraver - @tab Grave les ligatures -@item Clef_engraver - @tab Grave les clefs -@item Completion_heads_engraver - @tab Divise les notes qui dépassent de la mesure -@item Dynamic_engraver - @tab Crée les soufflets et textes de nuance -@item Forbid_line_break_engraver - @tab Empêche un saut de ligne si un élément musical est toujours actif -@item Key_engraver - @tab Crée l'armure -@item Metronome_mark_engraver - @tab Grave les indications métronomiques -@item Note_heads_engraver - @tab Grave les têtes de note -@item Rest_engraver - @tab Grave les silences -@item Staff_symbol_engraver - @tab Grave les cinq lignes (par défaut) de la portée -@item Stem_engraver - @tab Crée les hampes et les trémolos sur une hampe unique -@item Time_signature_engraver - @tab Crée les métriques -@end multitable - -@smallspace - -Nous verrons plus avant comment le résultat de LilyPond peut changer -lorsqu'on modifie l'action des graveurs. - - -@seealso -Références internes : @rinternals{Engravers and Performers}. - - -@node Modifying context properties -@subsection Modifying context properties - -@cindex contexte, propriétés -@cindex propriétés d'un contexte, modification -@cindex modification des propriétés d'un contexte -@funindex \set -@funindex set -@funindex \unset -@funindex unset - -Les contextes gèrent les différentes valeurs des nombreuses -@emph{propriétés} qui leur sont attachées. Beaucoup d'entre elles -sont susceptibles d'être modifiées afin d'influer sur l'interprétation -de l'input et ainsi changer l'apparence du résultat. On les modifie -grâce à la commande @code{\set}, qui s'utilise ainsi : - -@example -\set @emph{ContexteNommé}.@emph{propriétéNommée} = #@emph{valeur} -@end example - -où @emph{ContexteNommé} est habituellement @code{Score}, -@code{Staff} ou @code{Voice}. S'il n'est pas mentionné, il sera -considéré comme étant @code{Voice}. - -Les noms des propriétés de contexte sont composés de mots accolés sans -trait d'union ni caractère souligné, et dont seul le premier n'aura pas -d'initiale en majuscule. Voici quelques exemples de celles les plus -communément utilisées. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .25 .15 .45 .15 -@headitem propriétéNommée - @tab Type - @tab Fonction - @tab Exemple de valeur -@item extraNatural - @tab Booléen - @tab Si vrai, ajoute un bécarre avant une altération accidentelle - @tab @code{#t}, @code{#f} -@item currentBarNumber - @tab Entier - @tab Détermine le numéro de la mesure en cours - @tab @code{50} -@item doubleSlurs - @tab Booléen - @tab Si vrai, imprime les liaisons au-dessous @strong{et} au-dessus des notes - @tab @code{#t}, @code{#f} -@item instrumentName - @tab Texte - @tab Détermine le nom à afficher en début de portée - @tab @code{"Cello I"} -@item fontSize - @tab Réel - @tab Augmente ou diminue la taille de la fonte - @tab @code{2.4} -@item stanza - @tab Texte - @tab Détermine le texte à imprimer avant le début d'un couplet - @tab @code{"2"} -@end multitable - -@noindent -où un boléen correspond soit à vrai (@code{#t} pour @emph{True} en -anglais) ou faux (@code{#f} pour @emph{False} en anglais), un entier est -un nombre entier positif, un réel est en nombre décimal positif ou -négatif, et texte correspond à une suite de caractères encadrée par des -apostrophes doubles. Attention à la présence des signes dièse -(@code{#}) dans deux cas particuliers : ils sont partie intégrante des -valeurs boléennes et précèdent les @code{t} ou @code{f}, mais doivent -aussi précéder @emph{valeur} dans le libellé de la commande @code{\set}. -Il faudra donc, dans le cas d'une valeur boléenne, ne pas oublier de -saisir deux signes dièse -- par exemple @code{##t}. - -@cindex propriétés et contextes -@cindex réglage de propriétés au sein des contextes - -Avant de déterminer l'une de ces propriétés, nous devons savoir dans -quel contexte elle intervient. Si cela est bien souvent évident, il -peut arriver que cela tourne au cauchemar. Lorsque vous ne spécifiez -pas le bon contexte, aucun message d'erreur ne s'affiche et l'effet -attendu n'est pas au rendez-vous. Par exemple, le @code{instrumentName} -est de manière incontestable membre du contexte @code{Staff}, puisque -c'est bien la portée que l'on va nommer. -Dans l'exemple suivant, la première portée affiche effectivement un nom, -alors que ce n'est pas le cas pour la deuxième dans la mesure où le -contexte n'a pas été spécifié. - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - \set Staff.instrumentName = #"Soprano" - c4 c - } - \new Staff \relative c' { - \set instrumentName = #"Alto" % Wrong! - d4 d - } ->> -@end lilypond - -Dans la mesure où le nom de contexte par défaut est @code{Voice}, la -deuxième commande @code{\set} a défini @qq{Alto} comme propriété -@code{instrumentName} du contexte de voix. Puisque LilyPond n'ira pas -chercher une telle propriété dans la contexte @code{Voice}, celle-ci ne -sera pas interprétée. Il ne s'agit pas d'une erreur, aucun message -d'erreur ne sera ni émis ni enregistré. - -De la même manière, une faute d'orthographe dans le nom de la propriété -ne génèrera aucun message d'erreur et l'action escomptée ne se produira -pas. Vous pourriez déterminer par la commande @code{\set} n'importe -quelle @q{propriété}, même fictive, à partir de n'importe quel nom et -dans n'importe lequel des contextes disponibles. Mais tant que ce nom -est inconnu de LilyPond, rien ne se passera. Certains éditeurs de texte -disposent d'une prise en charge spécifique aux fichiers source LilyPond, -à l'instar de LilyPondTool couplé à JEdit et qui documente les noms des -propriétés dans une infobulle lorsque vous les survolez à la souris, ou -les souligne différemment s'ils sont inconnus, comme ConTEXT. Dans le -cas où votre éditeur ne dispose pas de ces fonctionnalités, nous vous -recommandons de vérifier le nom des propriétés que vous manipulez dans -le Manuel de références internes -- voir -@rinternals{Tunable context properties}, ou @rinternals{Contexts}. - -La propriété @code{instrumentName} ne sera prise en compte que si elle -est définie dans un contexte @code{Staff} ; d'autres propriétés peuvent -par contre être définies dans plusieurs contextes différents. C'est le -cas de la propriété @code{extraNatural} qui est définie par défaut à ##t -(vrai) pour toutes les portées. Si vous lui attribuez la valeur ##f -(faux) dans un contexte @code{Staff} particulier, elle ne s'appliquera -qu'aux altérations de la portée en question ; si vous lui attribuez la -valeur @q{faux} au niveau du contexte @code{Score}, cela s'appliquera -alors à toutes les portées. - -Voici comment supprimer les bécarres supplémentaires pour une portée : - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Staff.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -@noindent -et pour toutes les portées : - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Score.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -Autre exemple, si la propriété @code{clefOctavation} est déterminée au -niveau du contexte @code{Score}, elle modifiera la valeur de l'octave en -cours pour toutes les portées actives ; cette valeur sera considérée -comme étant la nouvelle valeur par défaut pour toutes les portées à -venir. - -La commande opposée, @code{\unset}, efface la propriété du contexte ; la -plupart des propriétés reviennent de ce fait à leur valeur par défaut. -En règle générale, la commande @code{\unset} n'est pas nécessaire dès -lors que vous faites appel à une nouvelle commande @code{\set} pour -modifier le réglage. - -Les commandes @code{\set} et @code{\unset} peuvent intervenir n'importe -où dans votre fichier source. Elles seront effectives dès leur -apparition et jusqu'à la fin de la partition, à moins d'être affectées -par un @code{\unset} ou un nouveau @code{\set}. À titre d'exemple, nous -allons jouer avec la taille des fontes, ce qui affecte entre -autres la grosseur des têtes de note. Les modifications s'appliquent -toujours par rapport à la valeur par défaut, non par rapport à la -dernière valeur. - -@lilypond[quote,verbatim,ragged-right,relative=1,fragment] -c4 -% make note heads smaller -\set fontSize = #-4 -d e -% make note heads larger -\set fontSize = #2.5 -f g -% return to default size -\unset fontSize -a b -@end lilypond - -Nous venons de voir comment déterminer la valeur de différents types de -propriété. N'oubliez pas que les nombres, entiers ou réels, doivent -être précédés d'un signe dièse (@code{#}) et les valeurs vrai ou faux de -deux signes dièse -- respectivement ##t et ##f --. Une valeur textuelle -doit être encadrée de guillemets anglais, @code{``@dots{ }''}, bien que, -comme nous le constaterons plus tard, la commande @code{\markup} permet -aussi de spécifier du texte. - -@unnumberedsubsubsec Setting context properties with @code{\with} - -@funindex \with -@funindex with -@cindex propriétés d'un contexte, définition avec \with - -Les propriétés d'un contexte peuvent aussi être réglées lors de la -création de ce contexte. Ceci constitue parfois une façon plus claire -de spécifier les valeurs d'une propriété pour la durée de vie du -contexte. Lorsque vous créez un contexte à l'aide de la commande -@code{\new}, vous pouvez la faire suivre immédiatement d'un bloc -@code{\with @{ .. @}} qui contiendra les réglages des différentes -propriétés. Ainsi, si nous voulions par exemple annuler l'impression des -bécarres supplémentaires sur la durée d'une portée, nous écririons : - -@example -\new Staff \with @{ extraNatural = ##f @} -@end example - -@noindent -ce qui donnerait : - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff - \relative c'' { - gis ges aes ais - } - \new Staff \with { extraNatural = ##f } - \relative c'' { - gis ges aes ais - } ->> -@end lilypond - -Les propriétés réglées de cette manière peuvent néanmoins être modifiées -de façon dynamique grâce à @code{\set} ; un @code{\unset} les ramènera à -leur valeur par défaut. - -@cindex fontSize, valeur par défaut et réglage - -La propriété @code{fontSize} constitue une exception : lorsqu'elle est -déterminée au sein d'un bloc @code{\with}, cela redéfinit la valeur par -défaut de la taille de fonte. Une modification est possible par la -commande @code{\set}, mais la commande @code{\unset fontSize} fera -revenir à la nouvelle valeur par défaut. - -@unnumberedsubsubsec Setting context properties with @code{\context} - -@cindex propriétés d'un contexte, définition avec \context -@funindex \context -@funindex context - -Vous pouvez régler les valeurs des propriétés de contexte en une seule -fois pour tous les contextes d'un même type, par exemple tous les -contextes @code{Staff}. Le type du contexte doit être donné -explicitement d'après son nom, par exemple @code{Staff}, précédé d'une -oblique inverse, donc nous saisirons @code{\Staff}. La manière de -régler la valeur des propriétés est la même que ce que nous avons vu -avec la commande @code{\with}, puisqu'on se place dans un bloc -@code{\context} inclus dans un bloc @code{\layout}. Chaque bloc -@code{\context} affectera tous les contextes concernés par le bloc -@code{\score} ou @code{\book} au sein duquel apparaît ce bloc -@code{\layout}. Voici comment le mettre en place : - -@lilypond[verbatim,quote] -\score { - \new Staff { - \relative c'' { - cis4 e d ces - } - } - \layout { - \context { - \Staff - extraNatural = ##t - } - } -} -@end lilypond - -@noindent -Les propriétés de contexte ainsi définies peuvent être adaptées pour -chacun des contextes en particulier grâce à un bloc @code{\with} ou bien -une commande @code{\set} au fil des notes. - - -@seealso -Manuel de notation : -@ruser{Changing context default settings}, -@c uncomment when backslash-node-name issue is resolved -pm -@c @ruser{The set command}. - -Références internes : -@rinternals{Contexts}, -@rinternals{Tunable context properties}. - - -@node Adding and removing engravers -@subsection Adding and removing engravers - -@cindex graveurs, ajout -@cindex graveurs, suppression - -@funindex \consists -@funindex consists -@funindex \remove -@funindex remove - -Nous avons vu que chaque contexte met en œuvre plusieurs graveurs, et -que chacun de ces graveurs est chargé de générer une composante -particulière du fichier de sortie, qui les barres de mesure, qui la -portée, qui les têtes de note, les hampes, etc. Le fait de supprimer un -graveur d'un contexte éliminera sa contribution au fichier de sortie. -Bien que ce soit là un moyen radical de modifier le résultat, cette -pratique est dans quelques cas fort utile. - -@subsubheading Changing a single context - -Nous utilisons, pour supprimer un graveur d'un contexte, la commande -@code{\with} dès la création dudit contexte, comme nous l'avons vu dans -la section précédente. - -Illustrons notre propos en reprenant un exemple du chapitre précédent, -duquel nous supprimerons les lignes de la portée. Pour mémoire, les -lignes d'une portée sont générées par le @code{Staff_symbol_engraver}. - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \remove Staff_symbol_engraver -} -\relative c' { - c4 - \set fontSize = #-4 % make note heads smaller - d e - \set fontSize = #2.5 % make note heads larger - f g - \unset fontSize % return to default size - a b -} -@end lilypond - -@cindex ambitus, graveur - -Vous pouvez aussi ajouter individuellement un graveur à un contexte. La -commande se formule ainsi : - -@code{\consists @var{Nom_du_graveur}} - -et se place dans un bloc @code{\with}. Certaines partitions vocales -font apparaître un @rglos{ambitus} au début de la portée, afin -d'indiquer ses notes extrêmes. L'ambitus est généré par -l'@code{Ambitus_engraver}, que l'on peut adjoindre à n'importe quel -contexte. Si nous l'ajoutons au contexte @code{Voice}, seule la -tessiture de cette voix sera calculée : - -@lilypond[quote,verbatim,ragged-right] -\new Staff << - \new Voice \with { - \consists Ambitus_engraver - } - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@noindent -alors que si nous l'ajoutons au contexte @code{Staff}, -l'@code{Ambitus_engraver} calculera l'écart maximal à partir de toutes -les notes de toutes les voix de la portée : - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \consists Ambitus_engraver - } - << - \new Voice - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@subsubheading Changing all contexts of the same type - -@funindex \layout -@funindex layout - -Les exemples ci-dessus nous ont montré comment ajouter ou retirer des -graveurs à des contextes individuels. Nous pourrions aussi ajouter ou -supprimer des graveurs à tous les contextes d'un même type en insérant -les commandes pour le contexte approprié au sein d'un bloc -@code{\layout}. Si nous voulions afficher un ambitus pour chacune des -portées d'un système à quatre portées, il nous suffirait d'écrire : - -@lilypond[quote,verbatim,ragged-right] -\score { - << - \new Staff << - \relative c'' { c a b g } - >> - \new Staff << - \relative c' { c a b g } - >> - \new Staff << - \clef "G_8" - \relative c' { c a b g } - >> - \new Staff << - \clef "bass" - \relative c { c a b g } - >> - >> - \layout { - \context { - \Staff - \consists Ambitus_engraver - } - } -} -@end lilypond - -@noindent -Vous réglerez de la même manière les propriétés de tous les contextes -d'un type particulier si vous insérez les commandes @code{\set} dans un -bloc @code{\context}. - - -@seealso -Manuel de notation : @ruser{Modifying context plug-ins}, -@ruser{Changing context default settings}. - - -@node Extending the templates -@section Extending the templates - -Bon, vous avez lu le tutoriel, vous savez écrire de la musique. Mais -comment obtenir les portées que vous voulez ? Les @ref{Templates}, -c'est bien beau, mais que faire quand ils ne traitent pas ce que l'on -veut précisément ? - -Les exemples qui suivent vous donneront des méthodes générales pour -adapter des modèles. - -@menu -* Soprano and cello:: -* Four-part SATB vocal score:: -* Building a score from scratch:: -@end menu - -@node Soprano and cello -@subsection Soprano and cello - -@cindex modèles, modification des - -Commencez par le modèle qui vous semblera le plus proche de ce à quoi -vous voulez aboutir. Disons par exemple que vous voulez écrire une pièce -pour soprano et violoncelle : dans ce cas, on pourrait commencer par les -@qq{notes et paroles}, pour la partie de soprano. - -@example -\version @w{"@version{}"} -melodie = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - - a4 b c d -@} - -texte = \lyricmode @{ - Aaa Bee Cee Dee -@} - -\score@{ - << - \new Voice = "un" @{ - \autoBeamOff - \melodie - @} - \new Lyrics \lyricsto "un" \texte - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Maintenant, on veut ajouter une partie de violoncelle. -Jetons un coup d'œil sur l'exemple avec les notes seules : - -@example -\version @w{"@version{}"} -melodie = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - - a4 b c d -@} - -\score @{ -\new Staff \melodie -\layout @{ @} -\midi @{ @} -@} -@end example - -On n'a pas besoin de deux commandes @code{\version}. Ce dont on a besoin, -c'est de la section @code{melodie}. De même, on n'a pas besoin de deux sections -@code{\score} --- si nous les gardions toutes les deux, on obtiendrait deux -parties séparées ; mais nous voulons un vrai duo, avec les deux -parties ensemble. Dans la section @code{\score}, on n'a pas besoin -non plus de deux @code{\layout} ni de deux @code{\midi}. - -Si on se contente de couper et coller les sections @code{melodie}, on se -retrouvera avec deux sections de ce nom ; il nous faut donc les renommer. -Appelons la section pour la soprano @code{sopranoMusique} et celle pour le -violoncelle @code{violoncelleMusique}. Tant qu'on y est, renommons -@code{texte} en @code{sopranoParoles}. Attention à bien renommer les -deux occurrences de chacune de ces dénominations : c'est-à-dire la -définition de départ, où l'on trouve @code{melodie = relative c' @{ }, -et l'endroit où cette dénomination est utilisée, dans la section -@code{\score}. - -Et puis, toujours tant qu'on y est, mettons le violoncelle en clé de Fa, comme -le veut l'usage, et donnons-lui d'autres notes. - -@example -\version @w{"@version{}"} -sopranoMusique = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - - a4 b c d -@} - -sopranoParoles = \lyricmode @{ - Laaa Siii Dooo Rééé -@} - -violoncelleMusique = \relative c @{ - \clef bass - \key c \major - \time 4/4 - - d4 g fis8 e d4 -@} - -\score@{ - << - \new Voice = "un" @{ - \autoBeamOff - \sopranoMusique - @} - \new Lyrics \lyricsto "un" \sopranoParoles - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Voilà qui est mieux, mais la partie de violoncelle n'apparaît pas sur -la partition --- en effet, nous n'y avons pas fait appel dans la section -@code{\score}. Si l'on veut que la partie de violoncelle s'imprime sous -la partie de soprano, on va devoir ajouter : - -@example -\new Staff \musiqueVioloncelle -@end example - -@noindent -en dessous de tout ce qui concerne la soprano. Il nous faut également -encadrer la musique par des @code{<<} et @code{>>}, qui feront comprendre -à LilyPond que plusieurs événements --- ici, des objets @code{Staff} --- -se déroulent en même temps. Le bloc @code{\score} ressemble maintenant à - -@c Indentation in this example is deliberately poor -@example -\score @{ - << - << - \new Voice = "un" @{ - \autoBeamOff - \sopranoMusique - @} - \new Lyrics \lyricsto "un" \sopranoParoles - >> - \new Staff \violoncelleMusique - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -C'est un peu le bazar dans tout ça ; mais il vous sera facile de -mettre un peu d'ordre dans l'indentation. Voici le modèle pour -soprano et violoncelle au complet : - -@lilypond[quote,verbatim,ragged-right,addversion] -sopranoMusic = \relative c' { - \clef treble - \key c \major - \time 4/4 - a4 b c d -} - -sopranoLyrics = \lyricmode { - Aaa Bee Cee Dee -} - -celloMusic = \relative c { - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -} - -\score { - << - << - \new Voice = "one" { - \autoBeamOff - \sopranoMusic - } - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \new Staff \celloMusic - >> - \layout { } - \midi { } -} -@end lilypond - - -@seealso -Les patrons originaux sont disponibles à l'annexe @qq{Modèles}, voir -@ref{Single staff}. - - -@node Four-part SATB vocal score -@subsection Four-part SATB vocal score - -@cindex exemple, SATB -@cindex SATB, squelette - -La plupart des œuvres écrites pour chœur à quatre voix mixtes et -orchestre, comme Elias de Mendelssohn ou le Messie de Haendel, disposent -la musique et les paroles du chœur sur quatre portées -- soprano, alto, -ténor et basse -- surmontant une réduction pour piano de -l'accompagnement orchestral. En voici un exemple, tiré du Messie de -Haendel : - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - -Aucun des modèles ne permet d'arriver exactement à cette mise en forme. -Celui qui s'en rapprocherait le plus est @qq{SATB vocal score and -automatic piano reduction} -- voir @ref{Vocal ensembles} -- mais encore -faudrait-il en modifier la mise en forme et refaire la partie de -piano qui n'est plus une simple reprise des parties vocales. Les -variables qui gèrent la musique et les paroles du chœur ne nécessitent -pas de modification, mais il nous faut d'autres variables pour la -réduction de piano. - -L'ordre dans lequel apparaissent les contextes dans le @code{ChoirStaff} -du modèle ne correspond pas à ce que nous voyons ci-dessus. Il nous -faudra y revenir pour obtenir quatre portées avec des paroles en dessous -de chacune d'elles. Toutes les voix devraient être @code{\voiceOne}, -ce qui est la position par défaut ; il nous faudra donc éliminer toutes -les commandes @code{\voiceXXX}. Les ténors auront besoin d'une clé -spécifique. Enfin, nous n'avons pas encore abordé la façon dont les -paroles sont présentées dans le modèle ; nous procèderons donc comme -nous en avons l'habitude. Il faudra aussi ajouter un nom à chaque portée. - -Une fois tout ceci accompli, voici notre @code{ChoirStaff} : - -@example - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" @{ \global \sopranoMusique @} - >> - \new Lyrics \lyricsto "sopranos" @{ \sopranoParoles @} - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" @{ \global \altoMusique @} - >> - \new Lyrics \lyricsto "altos" @{ \altoParoles @} - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" @{ \global \tenorMusique @} - >> - \new Lyrics \lyricsto "tenors" @{ \tenorParoless @} - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" @{ \global \basseMusique @} - >> - \new Lyrics \lyricsto "basses" @{ \basseParoles @} - >> % fin du ChoirStaff -@end example - -Il nous faut maintenant nous occuper de la partie de piano. Nous allons -nous contenter de récupérer la partie de piano du modèle -@q{Solo piano} : - -@example -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \superieur - \new Staff = "lower" \inferieur ->> -@end example - -puis d'ajouter les définitions de variable pour @code{superieur} et -@code{inferieur}. - -Les systèmes pour chœur et pour piano doivent être combinés à l'aide de -doubles chevrons gauche/droite puisqu'ils doivent s'empiler : - -@example -<< % combine ChoirStaff and PianoStaff one above the other - \new ChoirStaff << - \new Staff = "sopranos" << - \new Voice = "sopranos" @{ \global \sopranoMusique @} - >> - \new Lyrics \lyricsto "sopranos" @{ \sopranoParoless @} - \new Staff = "altos" << - \new Voice = "altos" @{ \global \altoMusique @} - >> - \new Lyrics \lyricsto "altos" @{ \altoParoles @} - \new Staff = "tenors" << - \clef "G_8" % tenor clef - \new Voice = "tenors" @{ \global \tenorMusique @} - >> - \new Lyrics \lyricsto "tenors" @{ \tenorParoles @} - \new Staff = "basses" << - \clef "bass" - \new Voice = "basses" @{ \global \bassesMusique @} - >> - \new Lyrics \lyricsto "basses" @{ \bassesParoles @} - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \superieur - \new Staff = "lower" \inferieur - >> ->> -@end example - -Une fois tout cela mis en place, et après avoir ajouté les notes et les -paroles de ces trois mesures du Messie, nous obtenons : - -@lilypond[quote,verbatim,ragged-right,addversion] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - - -@node Building a score from scratch -@subsection Building a score from scratch - -@cindex modèles, création -@cindex squelettes, création - -Après avoir acquis une certaine dextérité dans l'écriture de code -LilyPond, vous devez vous sentir suffisament prêt à vous lancer dans -la création d'une partition à partir de zéro, autrement dit en ne -partant pas d'un exemple. Vous pourrez ainsi vous construire vos -propres patrons selon le type de musique que vous affectionnez plus -particulièrement. Pour voir comment procéder, nous allons monter la -partition d'un prélude pour orgue. - -Nous débutons par une section d'en-tête ; nous y mettrons entre autres -le titre et le nom du compositeur. Puis viennent toutes les définitions -de toutes les variables. Nous terminons par le bloc @code{\score}. -Attelons-nous pour cette aventure, en gardant bien à l'esprit ce que -nous venons de dire ; nous nous occuperons des détails en temps voulu. - -Nous nous appuyons sur les deux premières mesures du prélude sur -@emph{Jesu, meine Freude}, écrit pour orgue avec pédalier. Vous pouvez -voir ces deux mesures au bas de cette page. La main droite comporte -deux voix, la main gauche et le pédalier une seule. Il nous faut donc -quatre définitions de musique, plus une qui contiendra la métrique et -l'armure : - -@example -\version @w{"@version{}"} -\header @{ - title = "Jesu, meine Freude" - composer = "J S Bach" -@} -MetriqueArmure = @{ \time 4/4 \key c \minor @} -ManuelUnVoixUnMusique = @{s1@} -ManuelUnVoixDeuxMusique = @{s1@} -ManuelDeuxMusique = @{s1@} -PedalierOrgueMusique = @{s1@} - -\score @{ -@} -@end example - -Pour l'instant, nous utilisons des silences invisibles, @code{s1}, en -lieu et place des notes réelles. On verra plus tard. - -Passons maintenant au bloc @code{\score} et à ce qu'il devrait contenir. -Nous y recopions simplement la structure des portées que nous voulons. -La musique pour orgue se présente généralement sous la forme de trois -portées, une pour chaque main et une pour le pédalier. Les portées du -manuel sont regroupées, nous utiliserons donc un @code{PianoStaff}. La -première partie du manuel requiert deux voix et la seconde une seule. - -@example - \new PianoStaff << - \new Staff = "ManuelUn" << - \new Voice @{ \ManuelUnVoixUnMusique @} - \new Voice @{ \ManuelUnVoixDeuxMusique @} - >> % fin du contexte de portée ManuelUn - \new Staff = "ManuelDeux" << - \new Voice @{ \ManuelDeuxMusique @} - >> % fin du contexte de portée ManuelDeux - >> % fin du contexte PianoStaff -@end example - -Il nous faut ajouter à cela une portée pour le pédalier. Elle se place -sous le système de piano, mais puisqu'elle doit rester synchrone avec -lui, nous utilisons des doubles chevrons pour les regrouper. -Négliger ceci nous renverrait une erreur, et personne n'est à l'abri de -cette faute ! Pour preuve, il vous suffit de copier l'exemple complet en -fin de chapitre, de supprimer ces @code{<<} et @code{>>}, et de le -compiler, pour voir de quoi il retourne. - -@example -<< % Système pianistique et portée de pédalier sont synchrones - \new PianoStaff << - \new Staff = "ManuelUn" << - \new Voice @{ \ManuelUnVoixUnMusique @} - \new Voice @{ \ManuelUnVoixDeuxMusique @} - >> % fin du contexte de portée ManuelUn - \new Staff = "ManualDeux" << - \new Voice @{ \ManuelDeuxMusique @} - >> % fin du contexte de portée ManuelDeux - >> % fin du contexte PianoStaff - \new Staff = "PedalierOrgue" << - \new Voice @{ \PedalierOrgueMusique @} - >> ->> -@end example - -La construction en simultané -- @code{<< .. >>} -- n'est pas strictement -obligatoire pour les portées manuel deux et pédalier, qui ne contiennent -chacune qu'une seule expression musicale ; mais cela ne mange pas de -pain, et c'est une bonne habitude que de toujours encadrer par des -doubles chevrons gauche/droite ce qui suit une commande @code{\new -Staff} au cas où il y aurait plusieurs voix. Il en va autrement pour -les contextes @code{Voice} : ils doivent être toujours suivis -d'accolades -- @code{@{ .. @}} -- au cas où vous auriez employé -plusieurs variables qui doivent intervenir consécutivement. - -Ajoutons donc cette structure au bloc @code{\score}, tout en fignolant -l'indentation. Nous en profitons pour ajouter les clés appropriées, -effectuer les réglages concernant les hampes et liaisons de la portée -supérieure grâce à @code{\voiceOne} et @code{\voiceTwo}, et mettre en -place la métrique et l'armure de chaque portée grâce à notre variable -@code{\MetriqueArmure}. - -@example -\score @{ - << % Système pianistique et portée de pédalier sont synchrones - \new PianoStaff << - \new Staff = "ManuelUn" << - \TimeKey % définition de la métrique et de l'armure - \clef "treble" - \new Voice @{ \voiceOne \ManuelUnVoixUnMusique @} - \new Voice @{ \voiceTwo \ManuelUnVoixDeuxMusique @} - >> % fin du contexte de la portée ManuelUn - \new Staff = "ManuelDeux" << - \TimeKey - \clef "bass" - \new Voice @{ \ManuelDeuxMusique @} - >> % fin du contexte de la portée ManuelDeux - >> % fin du contexte PianoStaff - \new Staff = "PedalierOrgue" << - \TimeKey - \clef "bass" - \new Voice @{ \PedalierOrgueMusique @} - >> % fin du contexte de la portée PedalOrgan - >> -@} % fin du contexte Score -@end example - -Nous en avons fini avec la structure. Toutes les partitions pour orgue -auront cette structure, même si le nombre de voix peut changer. Tout ce -qui nous reste à faire maintenant consiste à saisir la musique et à -regrouper toutes les parties. - -@lilypond[quote,verbatim,ragged-right,addversion] -\header { - title = "Jesu, meine Freude" - composer = "J S Bach" -} -TimeKey = { \time 4/4 \key c \minor } -ManualOneVoiceOneMusic = \relative g' { - g4 g f ees | d2 c2 | -} -ManualOneVoiceTwoMusic = \relative c' { - ees16 d ees8~ ees16 f ees d c8 d~ d c~ | - c c4 b8 c8. g16 c b c d | -} -ManualTwoMusic = \relative c' { - c16 b c8~ c16 b c g a8 g~ g16 g aes ees | - f ees f d g aes g f ees d e8~ ees16 f ees d | -} -PedalOrganMusic = \relative c { - r8 c16 d ees d ees8~ ees16 a, b g c b c8 | - r16 g ees f g f g8 c,2 | - } - -\score { - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice { \voiceOne \ManualOneVoiceOneMusic } - \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice { \ManualTwoMusic } - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \clef "bass" - \new Voice { \PedalOrganMusic } - >> % end PedalOrgan Staff context - >> -} % end Score context -@end lilypond - - diff --git a/Documentation/fr/user/input.itely b/Documentation/fr/user/input.itely deleted file mode 100644 index cd57700c3d..0000000000 --- a/Documentation/fr/user/input.itely +++ /dev/null @@ -1,342 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: d9b4bfc69674eb4ed7b8c6eaa0b646f00eae6c8d - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Jean-Charles Malahieude, Valentin Villenave - -@node General input and output -@chapter General input and output - -@untranslated - - -@menu -* Input structure:: -* Titles and headers:: -* Working with input files:: -* Controlling output:: -* MIDI output:: -@end menu - -@node Input structure -@section Input structure - -@untranslated - - -@menu -* Structure of a score:: -* Multiple scores in a book:: -* File structure:: -@end menu - -@node Structure of a score -@subsection Structure of a score - -@untranslated - - -@node Multiple scores in a book -@subsection Multiple scores in a book - -@untranslated - - -@node File structure -@subsection File structure - -@untranslated - - -@node Titles and headers -@section Titles and headers - -@untranslated - - -@menu -* Creating titles:: -* Custom titles:: -* Reference to page numbers:: -* Table of contents:: -@end menu - -@node Creating titles -@subsection Creating titles - -@untranslated - - -@node Custom titles -@subsection Custom titles - -@untranslated - - -@node Reference to page numbers -@subsection Reference to page numbers - -@untranslated - - -@node Table of contents -@subsection Table of contents - -@untranslated - - -@node Working with input files -@section Working with input files - -@untranslated - - -@menu -* Including LilyPond files:: -* Different editions from one source:: -* Text encoding:: -* Displaying LilyPond notation:: -@end menu - -@node Including LilyPond files -@subsection Including LilyPond files - -@untranslated - - -@node Different editions from one source -@subsection Different editions from one source - -@untranslated - - -@menu -* Using variables:: -* Using tags:: -@end menu - -@node Using variables -@unnumberedsubsubsec Using variables - -@untranslated - - -@node Using tags -@unnumberedsubsubsec Using tags -@funindex \tag -@cindex tag - -La commande @code{\tag} affecte un nom à des expressions musicales. -Les expressions ainsi balisées pourront être filtrées par la suite. -Ce mécanisme permet d'obtenir différentes versions à partir d'une même -source musicale. - -Dans l'exemple qui suit, nous obtenons deux versions du même extrait, -l'une pour le conducteur, l'autre pour l'instrumentiste, et qui -comportera les ornements. - -@example -c1 -<< - \tag #'partie << - R1 \\ - @{ - \set fontSize = #-1 - c4_"cue" f2 g4 @} - >> - \tag #'conducteur R1 ->> -c1 -@end example - -@noindent -Ce principe peut s'appliquer aux articulations, textes, etc. Il -suffit de positionner - -@example --\tag #@var{votre-balise} -@end example - -@noindent -avant l'articulation, comme ici : - -@example -c1-\tag #'part ^4 -@end example - -@noindent -Ceci définira une note avec une indication de doigté conditionnelle. - -@cindex keepWithTag -@cindex removeWithTag -C'est grâce aux commandes @code{\keepWithTag} et @code{\removeWithTag} -que vous filtrerez les expressions balisées. Par exemple : - -@example -<< - @var{de la musique} - \keepWithTag #'score @var{de la musique} - \keepWithTag #'part @var{de la musique} ->> -@end example - -@noindent -donnerait : - -@lilypondfile[ragged-right,quote]{tag-filter.ly} - -Les arguments de la commande @code{\tag} doivent être un symbole (tel -que @code{#'score} ou @code{#'part}), suivi d'une expression musicale. -Vous pouvez utiliser de multiples balises dans un morceau en -saisissant plusieurs @code{\tag}. - -@example -\tag #'original-part \tag #'transposed-part @dots{} -@end example - -@ignore -FIXME -@seealso -Exemples : @lsr{parts,tag@/-filter@/.ly} -@end ignore - - -@knownissues - -Lorsqu'elles comportent des silences, ceux-ci ne seront pas fusionnés -si vous imprimez une partition avec les deux sections balisées. - - -@node Text encoding -@subsection Text encoding - -@untranslated - - -@node Displaying LilyPond notation -@subsection Displaying LilyPond notation - -@untranslated - - -@node Controlling output -@section Controlling output - -@untranslated - - -@menu -* Extracting fragments of music:: -* Skipping corrected music:: -@end menu - -@node Extracting fragments of music -@subsection Extracting fragments of music - -@untranslated - - -@node Skipping corrected music -@subsection Skipping corrected music - -@untranslated - - -@node MIDI output -@section MIDI output - -@untranslated - - -@menu -* Creating MIDI files:: -* MIDI block:: -* What goes into the MIDI output?:: -* Repeats in MIDI:: -* Controlling MIDI dynamics:: -@end menu - -@node Creating MIDI files -@subsection Creating MIDI files - -@untranslated - - -@unnumberedsubsubsec Instrument names -@node MIDI block -@subsection MIDI block - -@untranslated - - -@node What goes into the MIDI output? -@subsection What goes into the MIDI output? - -@untranslated - - -@unnumberedsubsubsec Supported in MIDI -@unnumberedsubsubsec Unsupported in MIDI - -@node Repeats in MIDI -@subsection Repeats in MIDI - -@cindex reprises développées -@funindex \unfoldRepeats - -Au prix de quelques réglages, les reprises de toutes sortes peuvent être -rendues dans le fichier MIDI. Il suffit pour cela de recourir à la -fonction @code{\unfoldRepeats}, qui développe toutes les reprises. En -d'autre termes, @code{\unfoldRepeats} transforme toutes les reprises -en reprises de type @code{unfold}. - - -@lilypond[quote,verbatim,fragment,line-width=8.0\cm] -\unfoldRepeats { - \repeat tremolo 8 {c'32 e' } - \repeat percent 2 { c''8 d'' } - \repeat volta 2 {c'4 d' e' f'} - \alternative { - { g' a' a' g' } - {f' e' d' c' } - } -} -\bar "|." -@end lilypond - - -Lorsque l'on veut utiliser @code{\unfoldRepeats} seulement pour le rendu -MIDI, il faut établir deux blocs @code{\score} : un pour le MIDI, avec -des reprises explicites, et l'autre pour la partition, avec des reprises -notées sous forme de barres de reprise, de trémolo ou de symboles de -pourcentage. Par exemple - -@example -\score @{ - @var{..musique..} - \layout @{ .. @} -@} -\score @{ - \unfoldRepeats @var{..musique..} - \midi @{ .. @} -@} -@end example - - -@node Controlling MIDI dynamics -@subsection Controlling MIDI dynamics - -@untranslated - - -@unnumberedsubsubsec Dynamic marks -@unnumberedsubsubsec Overall MIDI volume -@unnumberedsubsubsec Equalizing different instruments (i) -@unnumberedsubsubsec Equalizing different instruments (ii) diff --git a/Documentation/fr/user/install.itely b/Documentation/fr/user/install.itely deleted file mode 100644 index 9c194308bf..0000000000 --- a/Documentation/fr/user/install.itely +++ /dev/null @@ -1,85 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: db53c05f11bea8831733b1fdf7ebe32cb1f491f4 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: John Mandereau -@c Translation checkers: Jean-Charles Malahieude - -@node Install -@chapter Install - -LilyPond est distribué dans deux types de moutures : les versions -stables, qui portent un numéro mineur de version pair, par exemple 1.6, -2.8, 2.12, et les versions de développement, qui portent un numéro -mineur de version impair, par exemple 1.3, 2.9, 2.11. - -La compilation de LilyPond est une tâche exigeante et parfois -laborieuse, c'est pourquoi nous recommandons @strong{fortement} -l'utilisation des binaires précompilés. - -@menu -* Precompiled binaries:: -* Compiling from source:: -@end menu - -@node Precompiled binaries -@section Precompiled binaries - -@unnumberedsubsec Downloading - -Consultez @uref{http://lilypond.org/web/install/} pour connaître les -derniers paquets binaires disponibles pour votre plateforme. Si votre -système d'exploitation n'est pas présent sur cette page, consultez la -liste complète sur @uref{http://download.linuxaudio.org/lilypond/binaries/}. - -Actuellement, nous compilons des paquets pour les architectures - -@example -darwin-ppc - MacOS X PowerPC -darwin-x86 - MacOS X Intel -freebsd-64 - FreeBSD 6.x, x86_64 -freebsd-x86 - FreeBSD 4.x, x86 -linux-64 - Toutes distributions GNU/Linux, x86_64 -linux-ppc - Toutes distributions GNU/Linux, powerpc -linux-x86 - Toutes distributions GNU/Linux, x86 -mingw - Windows x86 -@end example - -@knownissues - -Si vous utilisez MacOS 10.3 ou 10.4 et voulez exécuter des scripts -Python tels que @command{convert-ly} et @code{lilypond-book}, -reportez-vous à -@ref{Setup for MacOS X,,,lilypond-program,Utilisation des programmes}. - - -@node Compiling from source -@section Compiling from source - -Il est possible de compiler LilyPond à partir du code source. Comme -cela requiert une maîtrise de l'anglais, cette section ne sera pas -traduite. Si vous voulez vraiment compiler LilyPond, reportez-vous à -@iftex -@c DO NOT translate the following line at all. -@ref{Compiling from source,,,lilypond-program,Application Usage}. -@end iftex -@ifhtml -@c Please translate the following line (but not the .html file name) -la @uref{Compiling-from-source.html,documentation en anglais}. -@end ifhtml - -@c TRANSLATORS: -@c Please **do not** translate anything below this line. Users -@c should not be compiling LilyPond themselves; if they really -@c want to do so, they should be able to read the English docs, -@c because they'll probably need to ask questions in English -@c on the -devel list. -gp -@c Instead, please uncomment and translate the paragraph above, -@c and remove all stuff (menu, nodes, contents) below this line. diff --git a/Documentation/fr/user/introduction.itely b/Documentation/fr/user/introduction.itely deleted file mode 100644 index e6be0be6fc..0000000000 --- a/Documentation/fr/user/introduction.itely +++ /dev/null @@ -1,1184 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-kearning.tely -@ignore - Translation of GIT committish: db53c05f11bea8831733b1fdf7ebe32cb1f491f4 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Ludovic Sardain, John Mandereau -@c Translation checkers: Jean-Charles Malahieude, Jean-Yves Baudais, Damien Heurtebise -@c Translation status: post-GDP - - -@node Introduction -@chapter Introduction - -Ce chapitre constitue une première présentation de LilyPond et de sa -documentation. - -@menu -* Background:: -* About the documentation:: -@end menu - - -@node Background -@section Background - -Cette partie présente les objectifs de LilyPond ainsi que son -architecture. - -@menu -* Engraving:: -* Automated engraving:: -* What symbols to engrave?:: -* Music representation:: -* Example applications:: -@end menu - - -@node Engraving -@unnumberedsubsec Engraving - - -@cindex gravure -@cindex typographie musicale -@cindex musique et typographie - -L'art de la typographie musicale se nomme la @emph{gravure}. Ce terme -est issu du processus traditionnel d'impression musicale. Il y a -seulement quelques dizaines d'années, on faisait les partitions en -coupant et en embossant une plaque de zinc ou d'étain en image miroir. -Cette plaque était ensuite encrée, les dépressions créées par les -creux et les bosses retenant l'encre. Une image était formée en -pressant du papier sur la plaque. La découpe et l'embossage étaient -entièrement faits à la main. Il était pénible d'appliquer une -correction, quand celle-ci n'était pas impossible ; la gravure devait -donc être parfaite du premier coup. La gravure demandait une -qualification hautement spécialisée : un artisan devait accomplir -environ cinq ans de formation avant de mériter le titre de maître -graveur, et il lui fallait cinq années d'expérience supplémentaires -pour devenir vraiment habile. - -De nos jours, toutes les partitions récentes sont produites avec des -ordinateurs. Ceci a des avantages évidents : le coût des impressions -a diminué, et le travail d'édition peut être envoyé par courriel. -Malheureusement, l'utilisation dominante des ordinateurs a également -diminué la qualité graphique des partitions. L'impression -informatisée leur donne un aspect fade et mécanique qui les rend -désagréables à jouer. - -@c introduce illustrating aspects of engraving, font... -Les images ci-dessous illustrent la différence entre la gravure -traditionelle et l'impression typique par ordinateur, et la troisième -image montre comment LilyPond mime l'aspect traditionnel. L'image de -gauche est une numérisation d'un symbole bémol d'une édition publiée -en 2000. Celle du centre montre un bémol d'une gravure à la main de -l'édition Bärenreiter de la même musique. L'image de gauche illustre -des défauts typiques de l'impression informatique : les lignes de -portée sont minces, l'épaisseur de trait du bémol est la même que les -lignes fines, et il y a un aspect rigide avec des angles pointus. Par -contraste, le bémol Bärenreiter possède un aspect gras et arrondi, -presque voluptueux. Notre symbole bémol est créé, entre autres, à -partir de celui-là. Il est arrondi, et son épaisseur de trait -s'harmonise avec nos lignes de portée, lesquelles sont également plus -épaisses que celles de l'édition informatique. - -@multitable @columnfractions .125 .25 .25 .25 .125 -@item @tab -@ifnotinfo -@iftex -@image{henle-flat-gray,,4cm} -@end iftex -@ifnottex -@image{henle-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{baer-flat-gray,,4cm} -@end iftex -@ifnottex -@image{baer-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{lily-flat-bw,,4cm} -@end iftex -@ifnottex -@image{lily-flat-bw,,,png} -@end ifnottex -@end ifnotinfo -@ifinfo -@image{lilypond/henle-flat-bw,,,png} @image{lilypond/baer-flat-bw,,,png} -@image{lilypond/lily-flat-bw,,,png} -@end ifinfo - -@item @tab -Henle (2000) -@tab -Bärenreiter (1950) -@tab -Fonte Feta de LilyPond (2003) - -@end multitable - - -@cindex symboles musicaux -@cindex fonte -@cindex police -@cindex épaisseur des caractères -@cindex équilibre - -@c introduce illustrating aspects of engraving, spacing... -En matière d'espacement, la répartition de l'espace devrait refléter -les durées entre les notes. Cependant, beaucoup de partitions -modernes se contentent des durées avec une précision mathématique, ce -qui mène à de mauvais résultats. Dans l'exemple suivant, un motif est -imprimé deux fois : une fois en utilisant un espacement mathématique -exact, et une autre fois avec des corrections. Pouvez-vous les -repérer ? - -@cindex espacement optique -@c file spacing-optical. -@c need to include it here, because we want two images. -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} - -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.6 - } - } -} -@end lilypond - -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.0 - \override NoteSpacing #'same-direction-correction = #0.0 - \override StaffSpacing #'stem-spacing-correction = #0.0 - } - } -} -@end lilypond - -@cindex régulier, rythme -@cindex régulier, espacement -@cindex espacement régulier - -L'extrait n'utilise que des notes de même durée ; l'espacement devrait -le refléter. Malheureusement, notre oeil nous trompe quelque peu ; il -ne se contente pas de remarquer la distance entre les têtes de notes, -il prend en compte également la distance entre les hampes -consécutives. Ainsi, par compensation, les notes avec une combinaison -@qq{hampe vers le haut}/@/@qq{hampe vers le bas} doivent être éloignées -l'une de l'autre, et les notes avec une combinaison @qq{hampe vers le -bas}/@/@qq{hampe vers le haut} rapprochées, le tout dépendant de la -position verticale des notes. Les deux premières mesures sont -imprimées avec cette correction, les deux suivantes sans. Les notes -dans les deux dernières mesures forment des blocs de notes @qq{hampe -vers le bas}/@/@qq{hampe vers le haut}. - -@cindex typographie - -Les musiciens sont généralement plus absorbés par l'exécution que par -l'étude de l'aspect graphique d'une partition, donc discutailler sur -les détails typographiques peut paraître peu important. Il n'en est -rien. Dans de longues pièces avec des rythmes monotones, les -corrections d'espacement engendrent de subtiles variations dans la -mise en forme de chaque ligne, donnant à chacune une signature -visuelle distincte. Sans cette signature, toutes les lignes auraient -le même aspect, et ressembleraient à un labyrinthe. Si un musicien -regarde ailleurs un instant ou se déconcentre momentanement, il peut -avoir du mal à se retrouver sur la page. - -De même, l'aspect robuste des symboles sur d'épaisses lignes de -portée ressort mieux quand la partition est éloignée du lecteur, -comme sur un pupitre par exemple. Une organisation minutieuse des -espaces vides permet de minimiser l'espace qu'occupe la musique, tout -en évitant que les symboles s'amassent les uns contre les autres. Le -résultat permet de réduire le nombre de pages à tourner, ce qui est un -grand avantage. - -Ceci est une caractéristique commune à toute typographie. La -disposition doit être belle, non seulement pour des raisons -esthétiques, mais également pour l'aide apportée au lecteur dans la -tâche qu'il doit accomplir. Pour du matériel d'exécution comme les -partitions de musique, cela prend une double importance : les -musiciens ont une quantité limitée d'attention. Moins ils en ont -besoin pour lire, plus ils peuvent se concentrer sur la musique -elle-même. Autrement dit, une meilleure typographie permet une -meilleure interprétation. - -Ces exemples démontrent que la typographie musicale est un art subtil -et complexe, et que la produire demande une expertise considérable, -que les musiciens ne possèdent généralement pas. LilyPond est le -fruit de nos efforts pour restaurer l'excellence graphique de la -gravure à la main à l'ère de l'ordinateur, et la rendre accessible à -tous les musiciens. Nous avons conçu nos algorithmes, fontes et -paramètres de programme pour retrouver la qualité d'édition des -anciennes partitions que nous aimons tant lire et jouer. - - -@node Automated engraving -@unnumberedsubsec Automated engraving - -@cindex gravure automatisée -@cindex automatisée, gravure - -Comment pouvons-nous implémenter la typographie ? Si les artisans ont -besoin de plus de dix ans pour devenir de vrais maîtres, comment nous, -simples programmeurs, pourrions-nous jamais écrire un programme pour -faire leur travail ? - -La réponse est : nous ne le pouvons pas. La typographie se base sur -le jugement visuel humain, donc les humains ne peuvent pas être -complètement remplacés. Si LilyPond arrive à traiter la plupart des -situations correctement, ce sera déjà une grande avancée sur les -logiciels existants. Les problèmes restants peuvent être résolus à la -main. Au fil des ans, le logiciel peut être affiné pour faire de plus -en plus de choses automatiquement, pour que les ajustements manuels -soient de moins en moins nécessaires. - -Quand nous avons commencé, nous avons écrit le programme Lilypond -entièrement dans le language de programmation C++ ; les fonctions du -programme étaient figées par les développeurs. Ceci s'est avéré -insatisfaisant pour plusieurs raisons : - -@itemize - -@item Quand Lilypond fait des erreurs, -les utilisateurs ont besoin de contredire les décisions de formatage. -Les utilisateurs doivent donc avoir accès au moteur de formatage. Par -conséquent, les règles et les propriétés ne peuvent pas être fixées -par nous au moment de la compilation, mais doivent être accessibles -aux utilisateurs au moment de l'exécution. - -@item La gravure est une question de jugement visuel, et donc de goût. -Aussi bien informés que nous le sommes, les utilisateurs peuvent être -en désaccord avec nos décisions personnelles. Par conséquent, les -définitions du modèle typographique doivent également être accessibles -à l'utilisateur. - -@item Enfin, nous affinons continuellement les algorithmes de formatage, -donc nous avons besoin d'une approche souple des règles. Le langage -C++ oblige à une certaine méthode de groupage des règles qui ne -convient pas bien au fonctionnement de la notation musicale. - -@end itemize - -@cindex langage de programmation Scheme - -Ces problèmes ont été résolus en intégrant un interpréteur pour le -langage de programmation Scheme, et en réécrivant des parties de -LilyPond en Scheme. L'architecture actuelle de formatage est -construite autour de la notion d'objets graphiques, décrits par des -fonctions et des variables Scheme. Cette architecture comprend les -règles de formatage, le style typographique, et des décisions -individuelles de formatage. L'utilisateur a un accès direct à la -plupart de ces contrôles. - -Les variables Scheme contrôlent les décisions de mise en page. Par -exemple, beaucoup d'objets graphiques ont une variable de direction -qui encode le choix entre haut et bas (ou gauche et droite). Vous -pouvez voir ici deux accords, avec des accents, et des arpèges. Dans -le premier accord, les objets graphiques sont tous dirigés vers le bas -(ou la gauche). Dans le second accord ils sont tous dirigés vers le -haut (droite). - -@lilypond[quote,ragged-right] -\new Score \with { - \override SpacingSpanner #'spacing-increment = #3 - \override TimeSignature #'transparent = ##t -} \relative c' { - \stemDown 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT - \stemUp 4^>-\arpeggio -} -@end lilypond - -@cindex partition, formatage -@cindex formatage d'une partition -@cindex formatage, règles de - -@noindent -Le processus de formatage d'une partition consiste à lire et écrire -les variables d'objets graphiques. Certaines variables ont une valeur -prédéfinie. Par exemple, l'épaisseur d'un grand nombre de lignes -- -une caractéristique du style typographique -- est une variable avec -une valeur prédéfinie. Vous êtes libres d'altérer cette valeur, ce -qui vous donne une partition avec une impression typographique -différente. - -@lilypond[quote,ragged-right] -fragment = { - \clef bass f8 as8 - c'4-~ c'16 as g f e16 g bes c' des'4 -} -<< - \new Staff \fragment - \new Staff \with { - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #0.5 - \override Bar #'thickness = #3.6 - \override Tie #'thickness = #2.2 - \override StaffSymbol #'thickness = #3.0 - \override Tie #'extra-offset = #'(0 . 0.3) - } - \fragment ->> -@end lilypond - -Les règles de formatage ont aussi des variables prédéfinies : chaque -objet possède des variables contenant des procédures. Ces procédures -exécutent le formatage, et en les substituant par d'autres, nous -pouvons changer l'apparence des objets. Dans l'exemple suivant, la -règle du choix de têtes de notes est changée au cours de l'extrait de -musique. - -@lilypond[quote,ragged-right] -#(set-global-staff-size 30) - -#(define (mc-squared grob orig current) - (let* ((interfaces (ly:grob-interfaces grob)) - (pos (ly:grob-property grob 'staff-position))) - (if (memq 'note-head-interface interfaces) - (begin - (ly:grob-set-property! grob 'stencil - (grob-interpret-markup grob - (make-lower-markup 0.5 - (case pos - ((-5) "m") - ((-3) "c ") - ((-2) (make-smaller-markup (make-bold-markup "2"))) - (else "bla"))))))))) - -\new Voice \relative c' { - \stemUp - \set autoBeaming = ##f - \time 2/4 - 4 - \once \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil - \once \override NoteHead #'font-size = #-7 - \once \override NoteHead #'font-family = #'sans - \once \override NoteHead #'font-series = #'bold - 4 - \once \override NoteHead #'style = #'cross - 4 - \applyOutput #'Voice #mc-squared - 4 - << - { d8[ es-( fis^^ g] fis2-) } - \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } - >> -} -@end lilypond - - - -@node What symbols to engrave? -@unnumberedsubsec What symbols to engrave? - -@cindex gravure -@cindex typographie -@cindex graveur -@cindex greffon - -Le processus de formatage décide où placer les symboles. Cependant, -cela ne peut être fait qu'à partir du moment où il a été décidé -@emph{quels} symboles doivent être imprimés, c'est-à-dire quelle -notation utiliser. - -La notation musicale usuelle est un système d'écriture qui a évolué à -travers les dix derniers siècles. La forme qui est aujourd'hui -communément utilisée date du début de la Renaissance. Bien que la forme -basique --- les têtes de notes sur une portée de cinq lignes --- n'ait pas -changé, les détails continuent d'évoluer pour exprimer les innovations -de la notation contemporaine. Par conséquent, elle comprend quelque 500 -ans de musique, avec des applications allant des mélodies monodiques à -de monstrueux contrepoints pour grand orchestre. - -Comment pouvons nous appréhender un tel monstre à plusieurs têtes, et le -confiner dans l'espace réduit d'un programme informatique ? Notre -solution consiste à diviser le problème de la notation --- par -opposition à la gravure, ou typographie --- en morceaux digestes et -programmables : chaque type de symbole est géré par un module séparé, -couramment appelé greffon@footnote{traduction de l'anglais -@emph{plug-in}.}. Chaque greffon est entièrement modulaire et -indépendant, et donc peut être développé et amélioré séparément. De -tels greffons sont nommés @code{graveur}s@footnote{@code{engraver}s en -anglais.}, par analogie avec les artisans qui traduisent les idées -musicales en symboles graphiques. - -Dans l'exemple suivant, voyons comment nous commençons avec un greffon -pour les têtes de notes, le graveur de têtes de note -(@code{Note_heads_engraver}) : - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \consists "Pitch_squash_engraver" - } - } -} -@end lilypond - -@noindent -Ensuite, le graveur du symbole de portée -(@code{Staff_symbol_engraver}) ajoute la portée - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \consists "Pitch_squash_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -le graveur de clef (@code{Clef_engraver}) définit un point de -référence pour la portée - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -et le graveur de hampes (@code{Stem_engraver}) ajoute les hampes : - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -Le graveur de hampe est informé de chaque tête de note qui survient. -Chaque fois qu'une tête de note --- plusieurs pour un accord --- est -rencontrée, un objet hampe est créé et connecté à la tête de note. En -ajoutant des graveurs pour les barres de ligature, les liaisons, les -accents, les altérations accidentelles, les barres de mesure, la -métrique, et les armures, nous obtenons un jeu de notation complet. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { \topVoice } -@end lilypond - -@cindex polyphonie -@cindex graver plusieurs voix -@cindex contextes - -Ce système fonctionne bien pour de la musique monodique, mais qu'en -est-il de la polyphonie ? En notation polyphonique, plusieurs voix -peuvent partager une portée. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\new Staff << \topVoice \\ \botVoice >> -@end lilypond - -Dans cette situation, la portée et les altérations accidentelles sont -partagées, mais les hampes, liaisons etc., sont spécifiques à chaque -voix. Par conséquent, les graveurs doivent être groupés. Les -graveurs des têtes de notes, hampes, liaisons etc., vont dans un -groupe appelé @qq{contexte de Voix} @footnote{@q{Voice context} en -anglais, @q{Voice} commence par une majuscule comme tous les noms de -contexte dans le programme LilyPond.}, alors que les graveurs des clés, -altérations accidentelles, barres de mesure etc., vont dans un groupe -appelé @qq{contexte de Portée}. Dans le cas de la polyphonie, un seul -contexte de Portée contient plusieurs contextes de Voix. De même, -plusieurs contextes de Portée peuvent être inclus dans un seul -contexte de Partition. Le contexte de Partition est le contexte de -notation de plus haut niveau. - - -@seealso -Référence du programme: @rinternals{Contexts}. - - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { - << - \new Staff << \topVoice \\ \botVoice >> - \new Staff << \pah \\ \hoom >> - >> -} -@end lilypond - -@node Music representation -@unnumberedsubsec Music representation - -@cindex syntaxe -@cindex structures recursives - -Idéalement, le format d'entrée pour n'importe quel système de -formatage est une description abstraite du contenu. Dans ce cas-ci, -ce serait la musique elle-même. Cela pose un formidable problème : -comment pouvons-nous définir ce qu'est réellement la musique ? Plutôt -que d'essayer de trouver une réponse, nous avons renversé la question. -Nous écrivons un logiciel capable de produire de la musique écrite, et -adaptons le format pour atteindre la plus grande concision possible. -Quand le format ne peut plus être simplifé, il nous reste par -définition le contenu lui-même. Notre logiciel sert de définition -formelle d'un document de musique. - -Pour LilyPond, la syntaxe est également l'interface utilisateur ; par -conséquent il est facile de saisir - -@example -@{ -c'4 d'8 -@} -@end example - -@noindent -c'est-à-dire un do central noire et, juste au-dessus, un ré croche - -@lilypond[quote] -{ - c'4 d'8 -} -@end lilypond - -Sur une échelle microscopique, une telle syntaxe est facile à -utiliser. À plus grande échelle, la syntaxe a besoin aussi de -structure. Comment serait-il possible autrement de rentrer des -pièces complexes comme des symphonies ou des opéras ? La structure -est formée par le concept d'expression musicale : en combinant -de petits fragments de musique pour en former de plus grands, on peut -exprimer de la musique plus complexe. Par exemple - -@lilypond[quote,verbatim,fragment,relative=1] -f4 -@end lilypond - -@noindent -Des accord peuvent être construits avec @code{<<} et @code{>>} autour -des notes. - -@example -<> -@end example - -@lilypond[quote,fragment,relative=1] -\new Voice { <> } -@end lilypond - -@noindent -On met cette expression dans une séquence en l'encadrant par -des accolades @code{@{@tie{}@dots{}@tie{}@}} - -@example -@{ f4 <> @} -@end example - -@lilypond[quote,relative=1,fragment] -{ f4 <> } -@end lilypond - -@noindent -Ceci est également une expression, et peut donc encore une fois -être combiné avec d'autres expressions simultanées (une blanche) -en utilisant <<, @code{\\}, et >> - -@example -<< g2 \\ @{ f4 <> @} >> -@end example - -@lilypond[quote,fragment,relative=2] -\new Voice { << g2 \\ { f4 <> } >> } -@end lilypond - -De telles structures récursives peuvent être spécifiées formellement -et de manière ordonnée dans une grammaire indépendante de tout -contexte. Le code d'analyse est aussi généré à partir de cette -grammaire. Autrement dit, la syntaxe de LilyPond est définie -clairement et sans ambiguité. - -L'interface utilisateur et la syntaxe sont ce que les gens voient et -manipulent le plus. Elles sont en partie une affaire de goût, et -aussi sujettes à beaucoup de discussions. Même si ces discussions sur -les goûts ont leur mérite, elles ne sont pas très productives. D'un -point de vue plus large sur LilyPond, l'importance de la syntaxe est -minime : il est facile d'inventer une syntaxe concise, alors qu'écrire -un code de formatage décent est beaucoup plus difficile. Ceci est -également illustré par le nombre de lignes de codes pour les -composants respectifs : l'analyse et la représentation constituent -moins de 10% du code source. - -@node Example applications -@unnumberedsubsec Example applications - -@cindex exemples simples - -Nous avons conçu LilyPond comme une expérimentation visant à -concentrer l'art de la gravure musicale dans un logiciel. Grâce à -tout ce dur labeur, le programme peut maintenant être utilisé pour -accomplir des travaux utiles. L'application la plus simple est -d'imprimer des notes : - -@lilypond[quote,relative=1] -{ - \time 2/4 - c4 c g'4 g a4 a g2 -} -@end lilypond - -@noindent -En ajoutant des noms d'accords et des paroles, nous obtenons -une partition de chanson : - -@lilypond[quote,ragged-right] -<< - \chords { c2 c f2 c } - \new Staff - \relative c' { - \time 2/4 - c4 c g' g a a g2 - } - \addlyrics { twin -- kle twin -- kle lit -- tle star } ->> -@end lilypond - -La notation polyphonique et la musique pour piano peuvent également -être générées. L'exemple suivant associe quelques constructions -plus exotiques : - -@lilypond[quote] -\header { - title = "Screech and boink" - subtitle = "Random complex notation" - composer = "Han-Wen Nienhuys" -} - -\score { - \context PianoStaff << - \new Staff = "up" { - \time 4/8 - \key c \minor - << { - \revert Stem #'direction - \change Staff = down - \set subdivideBeams = ##t - g16.[ - \change Staff = up - c'''32 - \change Staff = down - g32 - \change Staff = up - c'''32 - \change Staff = down - g16] - \change Staff = up - \stemUp - \set followVoice = ##t - c'''32([ b''16 a''16 gis''16 g''32)] - } \\ { - s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] - } \\ { - s4 \autoBeamOff d''8.. f''32 - } \\ { - s4 es''4 - } >> - } - - \new Staff = "down" { - \clef bass - \key c \minor - \set subdivideBeams = ##f - \override Stem #'french-beaming = ##t - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #4.0 - g'16[ b16 fis16 g16] - << \makeClusters { - as16 - - - } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down - 4\arpeggio - } - >> } - >> - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 8) - } - } - \layout { - \context { - \Staff - \consists Horizontal_bracket_engraver - } - } -} -@end lilypond - -Les extraits exposés ici ont tous été écrits à la main, mais ce n'est -pas une obligation. Puisque le moteur de formatage est en grande -partie automatique, il peut servir de sortie pour d'autres programmes -qui manipulent la musique. Par exemple, il peut être utilisé pour -convertir des bases de données d'extraits musicaux en images pour des -sites Internet et des présentations multimédias. - -Ce manuel montre également une application : le format d'entrée est du -texte, et peut donc facilement être intégré dans d'autres formats -basés sur le texte comme @LaTeX{}, HTML, ou dans le cas de ce manuel, -Texinfo. À l'aide d'un programme spécial, les extraits de code -peuvent être remplacés par des images de musiques dans les fichiers de -sortie PDF ou HTML. Cela donne la possibilité de mélanger de la -musique et du texte dans les documents. - - - -@node About the documentation -@section About the documentation - -Cette partie présente les différents volumes de la documentation. - -@cindex Manuel d'initiation -@cindex Glossaire musical -@cindex Manuel de notation -@cindex Utilisation des programmes -@cindex Exemples de code -@cindex Référence des propriétés internes - -@c leave these lines wrapping around. It's some texinfo 4.12 thing. -gp -@c This is actually a limitation of texi2html. -jm -@menu -* About the Learning Manual:: introduction à LilyPond, ce manuel explique aux débutants la création de partitions. -* About the Music Glossary:: ce document explique de nombreux termes musicaux et en donne la traduction dans d'autres langues. -* About the Notation Reference:: ce manuel représente la partie la plus volumineuse de la documentation. Il fournit tous les détails sur la création de notation musicale. La lecture de cet ouvrage requiert une bonne compréhension des concepts exposés dans le manuel d'initiation. -* About the Application Usage:: ce manuel aborde l'exécution des programmes LilyPond et les particularités dépendant du système d'exploitation. -* About the Snippet List:: ce document rassemble une collection d'extraits de code LilyPond. -* About the Internals Reference:: ce manuel constitue une source d'information sur le fonctionnement interne de LilyPond. C'est une référence complète pour l'élaboration de retouches. -* Other documentation:: d'autres sources de documentation sont disponibles, telles que les notes de nouveautés et les archives des listes de diffusion. -@end menu - - -@node About the Learning Manual -@unnumberedsubsec About the Learning Manual - -Ce manuel explique comment débuter avec LilyPond, et expose de manière -simple quelques concepts clés. Il est conseillé de lire ces chapitres -de manière linéaire. - -Dans ce manuel se trouve à chaque section un paragraphe @strong{Voir -aussi} contenant des références vers d'autres sections : il est -conseillé de ne pas les suivre en première lecture ; lorsque vous -aurez lu l'ensemble du manuel d'initiation, vous pourrez en relisant -certaines sections suivre ces références pour approfondir certains -aspects. - -@itemize - -@item -@ref{Introduction} : le pourquoi du comment de LilyPond. - -@item -@ref{Tutorial} : introduction en douceur à la typographie musicale. -Les utilisateurs débutants sont invités à commencer par ce chapitre. - -@item -@ref{Fundamental concepts} : concepts généraux du format de fichier -@code{ly} spécifique à LilyPond. Si vous n'êtes pas certain de -l'endroit où placer une commande, lisez ce chapitre ! - -@item -@ref{Tweaking output} : introduction aux retouches de gravure avec -LilyPond. - -@item -@ref{Working on LilyPond projects} : utilisation pratique de LilyPond, -conseils généraux, prévention et résolution des problèmes les plus -courants. À lire avant de se lancer dans des travaux d'envergure ! - -@end itemize - -Ce volume contient aussi des annexes que vous pouvez consulter au gré de -vos besoins : - -@itemize - -@item -@ref{Templates} de pièces LilyPond. Copiez et collez un modèle dans -un fichier, ajoutez les notes, et c'est prêt ! - -@item -@ref{Scheme tutorial} : courte introduction à Scheme, le langage de -programmation utilisé dans les fonctions de musique. Ces quelques -lignes vous aideront à construire des retouches avancées ; nombre -d'utilisateurs ne touchent jamais à Scheme. - -@end itemize - - -@node About the Music Glossary -@unnumberedsubsec About the Music Glossary - -@cindex Glossaire musical -@cindex jargon -@cindex terminologie -@cindex langues étrangères -@cindex langue -@cindex langage - -@rglosnamed{Top,Glossaire musical} : ce document explique en anglais -des termes musicaux, et donne leur traduction dans diverses langues. -Si vous n'êtes pas familier avec la notation et la terminologie -musicales, il est conseillé de consulter le glossaire, notamment pour -les parties non encore traduites de la documentation. - - -@node About the Notation Reference -@unnumberedsubsec About the Notation Reference - -@cindex Manuel de notation -@cindex annexes -@cindex références, tables de -@cindex tables de références - -Ce manuel détaille toutes les commandes LilyPond produisant une notation -musicale. La lecture de cet ouvrage requiert une bonne compréhension des -concepts exposés dans le manuel d'initiation. - -@itemize - -@c Normalement, il est impossible d'utiliser deux points en français, -@c car une référence externe doit se terminer par un signe de -@c ponctuation dans le format Info. Cependant, Info -@c n'internationalise pas encore des documents Info, donc nous n'en -@c avons rien à faire pour l'instant. -jm -@item -@ruser{Musical notation} : cette partie décrit la notation de base, -qui sera utile dans la plupart des projets de partition. Les sujets -sont groupés par type de notation. - -@item -@ruser{Specialist notation} : cette partie détaille des éléments de -notation spécifiques à certains instruments ou styles. Les sujets -sont groupés par type de notation. - -@item -@ruser{General input and output} : informations générales sur les -fichiers source LilyPond et le contrôle des sorties. - -@item -@ruser{Spacing issues} : différents aspects de l'espacement selon les -axes et échelles, par exemple la sélection de la taille de papier, ou -la gestion des sauts de page. - -@item -@ruser{Changing defaults} : ce chapitre est une référence des -différentes formes de retouches, qui permettent d'obtenir de Lilypond -(presque) tout ce que vous désirez. - -@item -@ruser{Interfaces for programmers} : création de fonctions de musique -à l'aide de Scheme. - -@end itemize - -Les annexes de ce manuel contiennent entre autres des tableaux de -référence pratiques. - -@itemize - -@item -@ruser{Literature list} : choix de livres de référence, pour en savoir -plus sur la notation et la gravure. - -@item -@ruser{Notation manual tables} : tableaux montrant les noms d'accord, -les instruments MIDI, les noms de couleur, et la police Feta. - -@item -@ruser{Cheat sheet} : référence pratique des commandes LilyPond les -plus courantes. - -@item -@ruser{LilyPond command index} : index de toutes les @code{\commandes} -LilyPond. - -@item -@ruser{LilyPond index} : un index complet. - -@end itemize - - -@node About the Application Usage -@unnumberedsubsec About the Application Usage - -@cindex Utilisation des programmes -@cindex intégration de LilyPond avec d'autres programmes - -Ce manuel explique l'exécution des programmes et l'intégration de -partitions LilyPond dans d'autres programmes. - -@itemize - -@item -@rprogram{Install} : installation --- et éventuellement compilation --- -de LilyPond. - -@item -@rprogram{Setup} : configuration de votre système pour une utilisation -optimale de LilyPond, comprenant l'utilisation d'environnements -adaptés pour certains éditeurs de tecte. - -@item -@rprogram{Running LilyPond} : exécution de LilyPond et de ses -programmes auxiliaires. De plus, cette partie explique comment -effectuer la mise à jour de fichiers source écrits avec d'anciennes -versions de LilyPond. - -@item -@rprogram{LilyPond-book} : création de documents intégrant des -extraits musicaux, comme ce manuel. - -@item -@rprogram{Converting from other formats} : utilisation des programmes -de conversion. Ces programmes sont livrés avec le paquetage LilyPond, -et convertissent divers formats de musique vers le format @code{.ly}. - -@end itemize - - -@node About the Snippet List -@unnumberedsubsec About the Snippet List - -@cindex snippets -@cindex extraits de code -@cindex LSR -@cindex LilyPond Snippet Repository - -@rlsrnamed{Top,Exemples de code} : -il s'agit d'une sélection de petits exemples montrant des trucs, -astuces et fonctionnalités particulières de LilyPond, issus de -@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} -(LSR). Tous ces exemples sont dans le domaine public. - -Notez bien que cette annexe n'est en aucune manière un miroir ou même -une partie du LSR. Dans la mesure où le LSR repose sur une version -stable de LilyPond, les exemples illustrant des fonctionnalités -introduites dans la dernière version de développement ne peuvent y -figurer ; c'est pourquoi vous les trouverez dans le répertoire -@file{input/new/} des sources de LilyPond. - -La liste des exemples correspondant à chacun des sous-chapitres du -manuel de notation est accessible par des liens dans le paragraphe -@strong{Voir aussi}. - - -@node About the Internals Reference -@unnumberedsubsec About the Internals Reference - -@cindex retoucher -@cindex variables -@cindex propriétés -@cindex lilypond-internals -@cindex documentation du fonctionnement interne -@cindex Scheme -@cindex étendre lilypond -@cindex index - -@rinternalsnamed{Top,Référence des propriétés internes} : c'est un -ensemble de pages HTML étroitement liées entre elles, qui documente -les moindres petits détails de chaque classe, objet et fonction de -LilyPond. Cette documentation est produite directement à partir des -définitions de formatage utilisées. - -Presque toutes les fonctions de formatage utilisées en interne sont -directement disponibles pour l'utilisateur. Par exemple, toutes les -variables qui contrôlent les épaisseurs, les distances etc., peuvent -être modifiées dans les fichiers d'entrée. Il y a un grand nombre -d'options de formatage, et elles sont toutes décrites dans ce -document. Chaque section du manuel de notation a un paragraphe @b{Voir -aussi}, qui renvoie à la documentation générée automatiquement. Dans la -documentation au format HTML, ces paragraphes disposent de liens -cliquables. - - -@node Other documentation -@unnumberedsubsec Other documentation - -Pour finir, présentons d'autres précieuses sources de documentation. - -@itemize - -@item -@ifhtml -@ifset bigpage -@uref{../topdocs/NEWS.html,Nouveautés} : -@end ifset -@ifclear bigpage -@uref{../../topdocs/NEWS.html,Nouveautés} : -@end ifclear -@end ifhtml -@ifnothtml -Nouveautés : -@end ifnothtml -ce document résume les changements importants et les nouvelles -fonctionalités de LilyPond depuis la dernière version stable. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-user/, Les -archives de la liste lilypond-user} : c'est un dépôt archivant les -courriels qui ont été envoyés à la liste anglophone des utilisateurs. -Beaucoup de questions sont apparues plusieurs fois sur la liste, il y -a donc des chances que si vous avez une question, la réponse puisse -être dans ces archives. -@c DIV specific -@uref{http://lists.gnu.org/archive/html/lilypond-user-fr/,Les archives -de la liste francophone} ne sont pas aussi bien fournies, mais vous -pouvez toujours y chercher des conversations passées sur les -traductions, et si vous avez de la chance une réponse à une question. -@c END DIV - -@item @uref{http://lists.gnu.org/archive/html/lilypond-devel/, Les -archives de la liste lilypond-devel} : les courriels envoyés à la -liste des développeurs y sont archivés. Les sujets de discussion sont -plus techniques ; si vous voulez vous renseigner sur l'histoire du -développement ou si vous avez une question très technique, tentez -votre chance en cherchant dans ces archives. - -@item Fragments de musique au cours du texte : dans tous les documents -HTML qui incluent des fragments musicaux, le code LilyPond utilisé -pour produire l'image est accessible par un clic sur l'image. - -@item L'emplacement des fichiers de documentation mentionnés ici peut varier -d'un système à l'autre. De temps en temps, ce manuel fait référence -aux fichiers d'exemple et d'initialisation. Tout au long de ce -manuel, nous donnons les emplacements des fichiers d'entrée -relativement au répértoire racine de l'archive source. Par exemple, -@file{input/@/test/@/bla@/.ly} peut référer au fichier -@file{lilypond@/2.x.y/@/input/@/test/@/bla@/.ly}. Dans les paquets -binaires pour les plateformes Unix, la documentation et les exemples -se trouvent généralement sous @file{/usr/@/share/@/doc/@/lilypond/}. -Les fichiers d'initialisation, par exemple @file{scm/@/lily@/.scm}, ou -@file{ly/@/engraver@/-init@/.ly}, se trouvent généralement dans le -répertoire @file{/usr/@/share/@/lilypond/}. @c pas encore en français -jm. -@c Pour plus de détails, consultez @ref{Other sources of information}. - -@end itemize diff --git a/Documentation/fr/user/keyboards.itely b/Documentation/fr/user/keyboards.itely deleted file mode 100644 index 8077340744..0000000000 --- a/Documentation/fr/user/keyboards.itely +++ /dev/null @@ -1,662 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave, Jean-Charles Malahieude -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - -@node Keyboard and other multi-staff instruments -@section Keyboard and other multi-staff instruments - -@lilypondfile[quote]{keyboard-headword.ly} - -Ce chapitre traite des différents aspects de la notation que l'on -rencontre particulièrement avec les instruments qui ont recours à -plusieurs portées, tels que ceux disposant de claviers, la harpe ou -le vibraphone. Pour les besoins du discours, et pour simplifier, nous -parlerons ici de @qq{clavier} bien que le recours à des portées multiples -concerne aussi des instruments qui en sont dépourvus. - -@menu -* Common notation for keyboards:: -* Piano:: -* Accordion:: -* Harp:: -@end menu - -@node Common notation for keyboards -@subsection Common notation for keyboards - -Nous allons examiner ici les problèmes qui peuvent survenir en matière -de notation pour la plupart des instrument à cordes multiples. - -@menu -* References for keyboards:: -* Changing staff manually:: -* Changing staff automatically:: -* Staff-change lines:: -* Cross-staff stems:: -@end menu - -@node References for keyboards -@unnumberedsubsubsec References for keyboards - -@c untranslated -@c ifnothtml -@c englishref -@c end ifnothtml -@cindex piano, système pour -@cindex portées pour piano -@cindex portées pour instrument à clavier -@cindex portées pour instrument à clés -@cindex clavier, portées pour instrument à -@cindex clés, portées pour instrument à - -@funindex PianoStaff - -La notation pour instrument à clavier est en règle générale présentée -sous la forme d'un système pour piano, autrement dit deux portées -normales ou plus réunies par une accolade. Cette notation sert également -à la harpe ou à d'autres instruments à clés. L'organiste, quant à lui, -lira une partition composée de deux portées au sein d'un système -pianistique auquel vient s'adjoindre une portée normale pour le pédalier. - -Les portées sont largement autonomes, mais il arrive que des voix -passent de l'une à l'autre. Le contexte @code{PianoStaff} est -précisément conçu pour gérer la notation spécifique au piano et autres -instruments à clavier, notamment ces croisements. - -Certaines particularités de la notation pour claviers sont abordées dans -d'autres chapitres : - -@itemize - -@item Les claviers ont régulièrement recours à plusieurs voix dont le -nombre peut varier. voir à ce sujet @ref{Collision resolution}. - -@item On peut écrire la musique pour claviers de façon parallèle, comme -l'explique @ref{Writing music in parallel}. - -@item Les indications de doigté sont abrodées dans -@ref{Fingering instructions}. - -@item Les indications en matière de pédalier d'orgue sont traitées comme -des articulations. Voir à ce sujet @ref{List of articulations}. - -@item Pour générer des repères verticaux, voir @ref{Grid lines}. - -@item En plus des @notation{Laissez vibrer}, les liaisons en matière de -clavier peuvent intervenir sur des accords arpégés ou des trémolos. -Reportez-vous au chapitre @ref{Ties}. - -@item Le traitement des arpèges couvrant plusieurs voix ou portées est -abordé au chapitre @ref{Arpeggio}. - -@item Une description des indications de tremolo est disponible au -chapitre @ref{Tremolo repeats}. - -@item Certaines retouches particulières au monde des claviers sont -abordées au chapitre @rlearning{Real music example}. - -@item Des notes fantômes permettent d'introduire des liaisons de tenue -qui passent d'une voix à l'autre, comme le montre -@rlearning{Other uses for tweaks}. - -@end itemize - - -@seealso -Manuel d'initiation : -@rlearning{Real music example}, -@rlearning{Other uses for tweaks}. - -Manuel de notation : -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Collision resolution}, -@ref{Writing music in parallel}, -@ref{Fingering instructions}, -@ref{List of articulations}, -@ref{Grid lines}, -@ref{Ties}, -@ref{Arpeggio}, -@ref{Tremolo repeats}. - -Référence des propriétés internes : -@rinternals{PianoStaff}. - -Exemples de code : -@rlsr{Keyboards}. - - - -@knownissues - -@cindex claviers, centrage des nuances -@cindex nuances entre les portées d'un système pianistique -@cindex piano, nuances entre les portées -@cindex centrage des nuances entre deux portées de piano -@funindex staff-padding - -Les nuances ne sont pas automatiquement centrées verticalement, mais il -existe des astuces. Voir à ce sujet le modèle @qq{alignement des -nuances au piano} au chapitre @rlearning{Piano templates} ; une autre -solution consiste à augmenter le décalage des nuances par rapport à la -portée (@code{staff-pagging}) comme l'indique -@rlearning{Moving objects}. - - -@node Changing staff manually -@unnumberedsubsubsec Changing staff manually - -@cindex changements de portée manuels -@cindex changement de portée forcé -@cindex inter-portée, notes -@cindex notes inter-portée -@cindex inter-portée, ligatures -@cindex ligature inter-portée - -@funindex \change -@funindex change - -Il est possible de passer d'une portée à l'autre de façon manuelle, au -moyen de la commande - -@example -\change Staff = @var{nomDeLaPortee} -@end example - -@noindent -La valeur @var{nomDeLaPortee} est le nom de la portée sur laquelle va se -déplacer la voix courante. Pour des raisons pratiques, on nomme la portée -supérieure @code{"haut"} et la portée inférieure @code{"bas"}, donc -@var{nomDeLaPortee} désigne habituellement @code{"haut"}, @code{"bas"}, -@code{"MD"} ou @code{"MG"}. Dans tous les cas, le contexte de -portée ainsi utilisé doit exister au préalable. - -Pour ligaturer automatiquement des notes entre deux portées, procédez -ainsi : - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff = "up" { - 8 - \change Staff = "down" - g8 fis g - \change Staff = "up" - 8 - \change Staff = "down" - e8 dis e - \change Staff = "up" - } - \new Staff = "down" { - \clef bass - % keep staff alive - s1 - } ->> -@end lilypond - -Si les ligatures demandaient à être retouchées, commencez par -modifier la direction des hampes. L'emplacement des ligatures sera -alors calculé à partir du centre de la portée la plus proche -- voir -@rlearning{Fixing overlapping notation} pour un exemple de retouche sur -des ligatures. - - -@seealso -Manuel d'initiation : -@rlearning{Fixing overlapping notation}. - -Manuel de notation : -@ref{Stems}, -@ref{Automatic beams}. - -Exemples de code : -@rlsr{Keyboards}. - -Référence des propriétés internes : -@rinternals{Beam}, -@rinternals{ContextChange}. - - -@node Changing staff automatically -@unnumberedsubsubsec Changing staff automatically - -@cindex Changement de portée automatique -@cindex Automatique, changement de portée - -@funindex \autochange -@funindex autochange -@funindex PianoStaff - -Les voix peuvent passer automatiquement d'une portée à l'autre, au moyen -de la syntaxe suivante : - -@example -\autochange @dots{}@var{musique}@dots{} -@end example - -@noindent -Deux portées seront alors créées au sein du contexte @code{PianoStaff}, -nommées respectivement @code{"up"} et @code{"down"}. La portée du bas -sera par défaut en clé de fa. La commande @code{\autochange} bascule -les notes d'une portée à l'autre en fonction de leur hauteur (le do du -milieu servant de pivot), et place les silences en fonction des notes -qui les suivront. Ainsi : - -@lilypond[quote,verbatim] -\new PianoStaff { - \autochange { - g4 a b c' - d'4 r a g - } -} -@end lilypond - -@cindex mode relatif et autochange -@cindex autochange et mode relatif - -@funindex \relative -@funindex relative - -Une section en mode @code{\relative} se situant en dehors de la commande -@code{\autochange} n'aura pas d'effet sur les hauteurs de l'expression -@var{musique}. Il est donc préférable d'introduire la directive -@code{\relative} @strong{après} @code{\autochange}. - -Lorsque des contrôles particuliers doivent s'appliquer aux portées, -mieux vaut les nommer explicitement -- attention : sous peine -d'effet indésirable quant au résultat, la portée supérieure doit -s'appeler @code{"up"} et l'inférieure @code{"down"} ; @emph{ceci est à -notre connaissance le seul cas où ces noms de variable sont figés}. -Cette procédure sert, entre autres, à indiquer l'armure sur la portée -inférieure : - -@c Keep Ly needed, otherwise 'up' and 'down' get -@c incorrectly translated in verbatim output -@c KEEP LY -@lilypond[quote,verbatim,nogettext] -\new PianoStaff << - \new Staff = "up" { - \new Voice = "melodieUn" { - \key g \major - \autochange \relative c' { - g8 b a c b d c e - d8 r fis, g a2 - } - } - } - \new Staff = "down" { - \key g \major - \clef bass - } ->> -@end lilypond - - -@seealso -Dans ce même manuel : -@ref{Changing staff manually}. - -Exemples de code : -@rlsr{Keyboards}. - -Référence des propriétés internes : -@rinternals{AutoChangeMusic}. - - -@knownissues - -@cindex accords, répartition sur plusieurs portées avec \autochange - -Les changements de portée automatiques n'interviennent pas toujours à -l'endroit le plus opportun. Pour un résultat de meilleure qualité, il -vaut mieux indiquer soi-même ces changements. - -Un accord ne peut se répartir sur plusieurs portées ; sa portée -d'affectation sera déterminée par la première hauteur mentionnée dans la -construction de cet accord. - -@code{\autochange} ne peut intervenir à l'intérieur d'une commande -@code{\times}. - - -@node Staff-change lines -@unnumberedsubsubsec Staff-change lines - -@cindex voix entre deux portées -@cindex changements de portée -@cindex mélodie d'une portée à une autre - -@funindex followVoice -@funindex \showStaffSwitch -@funindex showStaffSwitch -@funindex \hideStaffSwitch -@funindex hideStaffSwitch - -Lorsqu'une voix change de portée, il est possible d'imprimer -automatiquement une ligne reliant les notes, en faisant appel à la -commande @code{\showStaffSwitch} : - -@lilypond[quote,verbatim,relative=1] -\new PianoStaff << - \new Staff = "one" { - \showStaffSwitch - c1 - \change Staff = "two" - b2 a - } - \new Staff = "two" { - \clef bass - s1*2 - } ->> -@end lilypond - - -@predefined -@code{\showStaffSwitch}, -@code{\hideStaffSwitch}. -@endpredefined - - -@seealso -Extraits de code : -@rlsr{Keyboards}. - -Référence des propriétés internes : -@rinternals{Note_head_line_engraver}, -@rinternals{VoiceFollower}. - - -@node Cross-staff stems -@unnumberedsubsubsec Cross-staff stems - -@cindex hampe, enjambement portées -@cindex distance entre deux portées de piano - -@funindex Stem -@funindex cross-staff -@funindex length -@funindex flag-style - -Pour écrire des accords qui enjambent deux portées, on allonge la hampe -de l'accord de l'une des deux portées de façon à ce qu'elle rejoigne celle de -l'autre portée. - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff { - \relative c' { - f8 e4 d8 d f e4 - } - } - \new Staff { - \relative c' { - << { - \clef bass - % stems may overlap the other staff - \override Stem #'cross-staff = ##t - % extend the stems to reach other other staff - \override Stem #'length = #12 - % do not print extra flags - \override Stem #'flag-style = #'no-flag - % prevent beaming as needed - a8 g4 f8 f bes\noBeam g4 - } - \\ - { - f,2 bes4 c - } >> - } - } ->> -@end lilypond - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{indicating-cross-staff-chords-with-arpeggio-bracket.ly} - - -@seealso -Extraits de code : -@rlsr{Keyboards}. - -Référence des propriétés internes : -@rinternals{Stem}. - - -@node Piano -@subsection Piano - -Ce chapitre traîte des aspects de la notation directement liés au piano. - -@menu -* Piano pedals:: -@end menu - -@node Piano pedals -@unnumberedsubsubsec Piano pedals - -@cindex piano et pédales -@cindex pédales de piano -@cindex sustain, pédale -@cindex pédale sustain -@cindex sostenuto, pédale -@cindex pédale sostenuto -@cindex una corda -@cindex tre corde -@cindex sos. -@cindex U.C. - -@funindex \sustainOn -@funindex sustainOn -@funindex \sustainOff -@funindex sustainOff -@funindex \sostenutoOn -@funindex sostenutoOn -@funindex \sostenutoOff -@funindex sostenutoOff -@funindex \unaCorda -@funindex unaCorda -@funindex \treCorde -@funindex treCorde - - -Le piano possède deux pédales, parfois trois, permettant de modifier -l'émission du son : une pédale de @notation{tenue} (@emph{sustain}), -une pédale de @notation{sourdine} (@emph{una corda} ou @emph{U.C.}) et -une pédale @notation{tonale} (@emph{sostenuto} ou @emph{sos.}). La -pédale @emph{sustain} se rencontre aussi sur les vibraphones et -celestas. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn d e g -1\sustainOff -c4\sostenutoOn e g c, -1\sostenutoOff -c4\unaCorda d e g -1\treCorde -@end lilypond - -@cindex pédale, styles d'indications de -@cindex pédale, indication textuelle de -@cindex pédale, indication graphique de -@cindex pédale, indication combinée de -@cindex pédale sustain, style -@cindex sustain, style de pédale - -@funindex pedalSustainStyle -@funindex mixed -@funindex bracket -@funindex text - -Trois styles sont à votre disposition pour imprimer les indications de -pédale : sous forme de texte, de crochet, ou une combinaison des deux. -@code{text} est le style de notation par défaut pour les pédales de -tenue ou de sourdine --- le traditionnel @q{*Ped.}. La pédale tonale, -en revanche, utilise @code{mixed} par défaut. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn g c2\sustainOff -\set Staff.pedalSustainStyle = #'mixed -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2\sustainOff -\set Staff.pedalSustainStyle = #'bracket -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2 -\bar "|." -@end lilypond - -Le placement des commandes de pédale correspond au mouvement de la -pédale de tenue pendant le jeu. Garder une pédale enclanchée jusqu'à la -barre finale s'obtient tout simplement en omettant la commande de -relacher. - - -@seealso -Manuel de notation : -@ref{Ties}. - -Extraits de code : -@rlsr{Keyboards}. - -Référence des propriétés internes : -@rinternals{SustainPedal}, -@rinternals{SustainPedalLineSpanner}, -@rinternals{SustainEvent}, -@rinternals{SostenutoPedal}, -@rinternals{SostenutoPedalLineSpanner}, -@rinternals{SostenutoEvent}, -@rinternals{UnaCordaPedal}, -@rinternals{UnaCordaPedalLineSpanner}, -@rinternals{UnaCordaEvent}, -@rinternals{PianoPedalBracket}, -@rinternals{Piano_pedal_engraver}. - - -@node Accordion -@subsection Accordion - -@menu -* Discant symbols:: -@end menu - -@node Discant symbols -@unnumberedsubsubsec Discant symbols - -@cindex accordéon, symboles de registre -@cindex registres, symboles pour accordéon -@cindex accordéon, tirettes -@cindex tirettes d'accordéon, symboles - -De nombreux accordéons possèdent plusieurs jeux d'anches capables de -jouer à l'unisson ou bien à l'octave inférieure ou supérieure par -rapport aux notes écrites. Chaque facteur d'accordéon donne des noms -différents aux @notation{tirettes} (@emph{shifts}) qui permettent de -sélectionner les différents jeux d'anches tels que @notation{hautbois}, -@notation{musette} ou @notation{bandonéon}, de telle sorte qu'un système -de symbole a fini par voir le jour afin de faciliter les instructions -pour exécuter un morceau. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{accordion-discant-symbols.ly} - - -@seealso -Morceaux choisis : -@rlsr{Keyboards}. - - -@node Harp -@subsection Harp - -This section discusses notation issues that are unique to the harp. - -@menu -* References for harps:: -* Harp pedals:: -@end menu - -@node References for harps -@unnumberedsubsubsec References for harps -@cindex harpes -@cindex bisbigliando - -Certaines caractéritiques de la musique pour harpes sont abordées dans -d'autres chapitres, telles que : - -@itemize - -@item Les glissandos, l'une des techniques spécifique à la harpe, -@ref{Glissando}. - -@item Le @notation{bisbigliando}, qui s'écrit comme un trémolo, -@ref{Tremolo repeats} - -@item Les harmoniques naturelles sont présentées dans @ref{Harmonics}. - -@item For directional arpeggios and non-arpeggios, see @ref{Arpeggio}. - -@end itemize - -@seealso -Manuel de notation : -@ref{Tremolo repeats} -@ref{Glissando} -@ref{Arpeggio} -@ref{Harmonics} - -@node Harp pedals -@unnumberedsubsubsec Harp pedals - -@cindex harpe, pédales -@cindex harpe, diagrammes de pédales -@cindex pédales de harpe -@cindex pédales, diagrammes pour harpe - -Les harpes comportent sept cordes par octave qui peuvent sonner -naturel, dièse ou bémol. Si chacune des cordes de la harpe celtique -(@emph{lever harp}) est accordée individuellement, celles d'une harpe à -pédalier ayant la même note de base sont contrôlées par une seule -pédale. De gauche à droite, elles correspondent aux notes ré, do, si, -mi, fa, sol, la pour la grande harpe. Les trois premières pédales sont -réservées au pied gauche, les 4 dernières au pied droit. Leur position -peut être indiquée par une marque textuelle : - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup \concat \vcenter { [D \flat C \sharp B|E \sharp F \sharp G A \flat] } -c!1_\markup \concat \vcenter {[ C \natural ]} -@end lilypond - -ou bien sous forme de diagrammes : - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup { \harp-pedal #"^v-|vv-^" } -c!1_\markup { \harp-pedal #"^o--|vv-^" } -@end lilypond -bémol si la pédale est relâchée (= en haut), bécarre si elle est bloquée sur le cran du milieu, et dièse si elle est tout à fait enfoncée. -La commande @code{\harp-pedal} prend en argument une chaîne de -caractères, où @code{^} si la pédale est relâchée ou en haut (bémol), -@code{-} si elle est bloquée sur le cran du milieu (bécarre), @code{v} -si elle est tout à fait enfoncée (dièse) et @code{|} le séparateur (entre -gauche et droite de l'instrumentiste). Faire précéder un symbole par un -@code{o} permet de l'inscrire dans un cercle. - -@seealso -Manuel de notation : -@ref{Text scripts} -@ref{Instrument Specific Markup} - diff --git a/Documentation/fr/user/lilypond-book.itely b/Documentation/fr/user/lilypond-book.itely deleted file mode 100644 index e25a3c965f..0000000000 --- a/Documentation/fr/user/lilypond-book.itely +++ /dev/null @@ -1,129 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 4a527608c5ff2ce31e596495d00dce181dc1b9ea - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node LilyPond-book -@chapter @command{lilypond-book}: Integrating text and music - -@untranslated - - -@menu -* An example of a musicological document:: -* Integrating music and text:: -* Music fragment options:: -* Invoking lilypond-book:: -* Filename extensions:: -* Alternate methods of mixing text and music:: -@end menu - -@node An example of a musicological document -@section An example of a musicological document - -@untranslated - - -@subheading Input -@subheading Processing -@subheading Output -@node Integrating music and text -@section Integrating music and text - -@untranslated - - -@menu -* LaTeX:: -* Texinfo:: -* HTML:: -* DocBook:: -@end menu - -@node LaTeX -@subsection @LaTeX{} - -@untranslated - - -@node Texinfo -@subsection Texinfo - -@untranslated - - -@node HTML -@subsection HTML - -@untranslated - - -@node DocBook -@subsection DocBook - -@untranslated - - -@subheading Common conventions -@subheading Including a LilyPond file -@subheading Including LilyPond code -@subheading Processing the DocBook document -@node Music fragment options -@section Music fragment options - -@untranslated - - -@node Invoking lilypond-book -@section Invoking @command{lilypond-book} - -@untranslated - - -@subheading Format-specific instructions -@subsubheading @LaTeX{} -@subsubheading Texinfo -@subheading Command line options -@node Filename extensions -@section Filename extensions - -@untranslated - - -@node Alternate methods of mixing text and music -@section Alternative methods of mixing text and music - -@untranslated - - -@menu -* Many quotes from a large score:: -* Inserting LilyPond output into OpenOffice.org:: -* Inserting LilyPond output into other programs:: -@end menu - -@node Many quotes from a large score -@subsection Many quotes from a large score - -@untranslated - - -@node Inserting LilyPond output into OpenOffice.org -@subsection Inserting LilyPond output into OpenOffice.org - -@untranslated - - -@node Inserting LilyPond output into other programs -@subsection Inserting LilyPond output into other programs - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/fr/user/lilypond-learning.tely b/Documentation/fr/user/lilypond-learning.tely deleted file mode 100644 index 0acb5e735e..0000000000 --- a/Documentation/fr/user/lilypond-learning.tely +++ /dev/null @@ -1,212 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 6f84d7b264bf1faa8d9c586bbf06c762ae53183a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@setfilename lilypond-learning.info -@settitle GNU LilyPond -- Manuel d'initiation - - -@include macros.itexi - -@afourpaper - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Learning Manual of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage French -@end ignore - -@c Translators: John Mandereau, Jean-Charles Malahieude -@c Translation status: post-GDP - -@ifnottex -@node Top -@top GNU LilyPond --- Manuel d'initiation -@end ifnottex - - -@ifhtml -@ifclear bigpage -Ce document est également disponible au -@uref{source/Documentation/user/lilypond-learning.fr.pdf,format PDF}, -et en une seule -@uref{source/Documentation/user/lilypond-learning-big-page.fr.html,grande page}. -@end ifclear -@ifset bigpage -Ce document est également disponible au -@uref{source/Documentation/user/lilypond-learning.fr.pdf,format PDF}, -et en @uref{source/Documentation/user/lilypond-learning/index.fr.html,pages HTML -séparées}. -@end ifset -@end ifhtml - -@c urg, makeinfo 4.9.91 French translation is funky -@iftex -@documentlanguage fr -@frenchspacing on -@end iftex - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle Le système de gravure musicale -@titlefont{Manuel d'initiation} -@author L'équipe de développement de LilyPond - - -Copyright @copyright{} 1999--2009 par les auteurs - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{La traduction de la notice de droits d'auteur ci-dessous vise à -faciliter sa compréhension par le lecteur non anglophone, mais seule la -notice en anglais a valeur légale.} - -@quotation -Vous avez le droit de copier, distribuer et/ou modifier ce document -selon les termes de la Licence GNU de documentation libre, version 1.1 -ou tout autre version ultérieure publiée par la Free Software -Foundation, ``sans aucune section invariante''. -Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Pour LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 par les auteurs - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{La traduction de la notice de droits d'auteur ci-dessous vise à -faciliter sa compréhension par le lecteur non anglophone, mais seule la -notice en anglais a valeur légale.} - -@quotation -Vous avez le droit de copier, distribuer et/ou modifier ce document -selon les termes de la Licence GNU de documentation libre, version 1.1 -ou tout autre version ultérieure publiée par la Free Software -Foundation, ``sans aucune section invariante''. -Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -Ce fichier documente GNU LilyPond. - -Copyright @copyright{} 1999--2009 par les auteurs - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{La traduction de la notice de droits d'auteur ci-dessous vise à -faciliter sa compréhension par le lecteur non anglophone, mais seule la -notice en anglais a valeur légale.} - -@quotation -Vous avez le droit de copier, distribuer et/ou modifier ce document -selon les termes de la Licence GNU de documentation libre, version 1.1 -ou tout autre version ultérieure publiée par la Free Software -Foundation, ``sans aucune section invariante''. -Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex - -Ce document constitue le manuel d'initiation à GNU LilyPond -@version{}. Pour connaître la place qu'occupe ce manuel dans la -documentation, consultez @ref{About the documentation}. - -@cindex web site -@cindex URL - -Vous pouvez trouvez plus d'informations sur -@uref{http://@/www@/.lilypond@/.org/}. Le site web contient des -copies en ligne de cette documentation, ainsi qu'une documentation -supplémentaire. - -@menu -* Preface:: -* Introduction:: quoi, pourquoi comment. -* Tutorial:: un tutoriel d'introduction. -* Fundamental concepts:: concepts de base de LilyPond. -* Tweaking output:: introduction aux retouches de mise en forme. -* Working on LilyPond projects:: traite de l'utilisation quotidienne. - -Annexes - -* Templates:: modèles prêts à l'emploi. -* Scheme tutorial:: programmer au sein de LilyPond. -* GNU Free Documentation License:: licence de ce document. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include preface.itely -@include introduction.itely -@include tutorial.itely -@include fundamental.itely -@include tweaks.itely -@include working.itely - -@include templates.itely -@include scheme-tutorial.itely -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/fr/user/lilypond-program.tely b/Documentation/fr/user/lilypond-program.tely deleted file mode 100644 index edd4081cc8..0000000000 --- a/Documentation/fr/user/lilypond-program.tely +++ /dev/null @@ -1,180 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@ignore - Translation of GIT committish: 6f84d7b264bf1faa8d9c586bbf06c762ae53183a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@documentencoding UTF-8 -@setfilename lilypond-program.info -@settitle GNU LilyPond -- Utilisation des programmes - -@include macros.itexi - -@afourpaper - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Program Usage of the LilyPond music engraving system -@omftype user manual -@omfcategory Applications|Publishing -@omflanguage French -@end ignore - -@c Translators: John Mandereau, Jean-Charles Malahieude - -@ifnottex -@node Top -@top GNU LilyPond --- Utilisation des programmes -@end ifnottex - -@ifhtml -@ifclear bigpage -Ce document est également disponible au -@uref{source/Documentation/user/lilypond-program.fr.pdf,format PDF}, -et en une seule -@uref{source/Documentation/user/lilypond-program-big-page.fr.html,grande page}. -@end ifclear -@ifset bigpage -Ce document est également disponible au -@uref{source/Documentation/user/lilypond-program.fr.pdf,format PDF}, -et en @uref{source/Documentation/user/lilypond-program/index.fr.html,pages HTML -séparées}. -@end ifset -@end ifhtml - -@c urg, makeinfo 4.9.91 French translation is funky -@iftex -@documentlanguage fr -@frenchspacing on -@end iftex - -@syncodeindex fn cp -@c @syncodeindex ky cp -@c @syncodeindex pg cp -@c @syncodeindex tp cp -@c @syncodeindex vr cp - -@finalout - -@titlepage -@title GNU LilyPond -@subtitle Le système de gravure musicale -@titlefont{Utilisation des programmes} -@author L'équipe de développement de LilyPond - - -Copyright @copyright{} 1999--2009 par les auteurs - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{La traduction de la notice de droits d'auteur ci-dessous vise à -faciliter sa compréhension par le lecteur non anglophone, mais seule la -notice en anglais a valeur légale.} - -@quotation -Vous avez le droit de copier, distribuer et/ou modifier ce document -selon les termes de la Licence GNU de documentation libre, version 1.1 -ou tout autre version ultérieure publiée par la Free Software -Foundation, ``sans aucune section invariante''. -Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Pour LilyPond version @version{} -@end titlepage - - -@ifnottex -Ce fichier documente GNU LilyPond. - -Copyright @copyright{} 1999--2009 par les auteurs - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{La traduction de la notice de droits d'auteur ci-dessous vise à -faciliter sa compréhension par le lecteur non anglophone, mais seule la -notice en anglais a valeur légale.} - -@quotation -Vous avez le droit de copier, distribuer et/ou modifier ce document -selon les termes de la Licence GNU de documentation libre, version 1.1 -ou tout autre version ultérieure publiée par la Free Software -Foundation, ``sans aucune section invariante''. -Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - - -@ifnottex - -Ce document constitue le manuel d'utilisation des programmes de GNU -LilyPond @version{}. Pour connaître le rôle de ce manuel dans la -documentation de LilyPond, consultez @rlearning{About the -documentation}. - -@cindex web site -@cindex URL - -Vous pouvez obtenir plus d'informations sur -@uref{http://@/www@/.lilypond@/.org/}. Ce site contient des copies en -ligne de ce manuel, ainsi qu'une documentation supplémentaire. - -@include dedication.itely - -@menu -* Install:: installation, compilation. -* Setup:: environnement de travail pour LilyPond. -* Running LilyPond:: mode d'emploi. -* LilyPond-book:: intégration de texte et musique. -* Converting from other formats:: conversion vers le format source lilypond. - -Annexes - -* GNU Free Documentation License:: licence de ce document. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include install.itely -@include setup.itely -@include running.itely -@include lilypond-book.itely -@include converters.itely - -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/fr/user/lilypond.tely b/Documentation/fr/user/lilypond.tely deleted file mode 100644 index 6d20b1f6a7..0000000000 --- a/Documentation/fr/user/lilypond.tely +++ /dev/null @@ -1,200 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@ignore - Translation of GIT committish: 6f84d7b264bf1faa8d9c586bbf06c762ae53183a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@documentencoding UTF-8 -@setfilename lilypond.info -@settitle GNU LilyPond -- Manuel de notation - -@include macros.itexi - -@afourpaper - -@c @direntry has not been added yet, as Emacs and standalone Info have -@c no i18n support -JM - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription User manual of the LilyPond music engraving system -@omftype user manual -@omfcategory Applications|Publishing -@omflanguage French -@end ignore - -@c Translators: John Mandereau, Jean-Charles Malahieude - -@ifnottex -@node Top -@top GNU LilyPond --- Manuel de notation -@end ifnottex - -@ifhtml -@ifclear bigpage -Ce document est également disponible au -@uref{source/Documentation/user/lilypond.fr.pdf,format PDF}, -et en une seule -@uref{source/Documentation/user/lilypond-big-page.fr.html,grande page}. -@end ifclear -@ifset bigpage -Ce document est également disponible au -@uref{source/Documentation/user/lilypond.fr.pdf,format PDF}, -et en @uref{source/Documentation/user/lilypond/index.fr.html,pages HTML -séparées}. -@end ifset -@end ifhtml - -@c urg, makeinfo 4.9.91 French translation is funky -@iftex -@documentlanguage fr -@frenchspacing on -@end iftex - -@syncodeindex fn cp -@c @syncodeindex ky cp -@c @syncodeindex pg cp -@c @syncodeindex tp cp -@c @syncodeindex vr cp - -@finalout - -@titlepage -@title GNU LilyPond -@subtitle Le système de gravure musicale -@titlefont{Manuel de notation} -@author L'équipe de développement de LilyPond - - -Copyright @copyright{} 1999--2009 par les auteurs - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{La traduction de la notice de droits d'auteur ci-dessous vise à -faciliter sa compréhension par le lecteur non anglophone, mais seule la -notice en anglais a valeur légale.} - -@quotation -Vous avez le droit de copier, distribuer et/ou modifier ce document -selon les termes de la Licence GNU de documentation libre, version 1.1 -ou tout autre version ultérieure publiée par la Free Software -Foundation, ``sans aucune section invariante''. -Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Pour LilyPond version @version{} -@end titlepage - - -@ifnottex -Ce fichier documente GNU LilyPond. - -Copyright @copyright{} 1999--2009 par les auteurs - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{La traduction de la notice de droits d'auteur ci-dessous vise à -faciliter sa compréhension par le lecteur non anglophone, mais seule la -notice en anglais a valeur légale.} - -@quotation -Vous avez le droit de copier, distribuer et/ou modifier ce document -selon les termes de la Licence GNU de documentation libre, version 1.1 -ou tout autre version ultérieure publiée par la Free Software -Foundation, ``sans aucune section invariante''. -Une copie de la licence est fournie à la section ``Licence GNU de documentation libre''. -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - - -@ifnottex - -Ce document constitue le manuel de notation de GNU LilyPond -@version{}. Pour connaître la place qu'occupe ce manuel dans la -documentation, consultez @rlearning{About the documentation}. - -@cindex web site -@cindex URL - -Vous pouvez obtenir plus d'informations sur -@uref{http://@/www@/.lilypond@/.org/}. Ce site contient des copies en -ligne de ce manuel, ainsi qu'une documentation supplémentaire. - -@include dedication.itely - -@menu -* Musical notation:: notation générale. -* Specialist notation:: notation à usage spécifique. -* General input and output:: généralités sur les fichiers sources et les sorties. -* Spacing issues:: mise en page de la musique sur le papier. -* Changing defaults:: ajustement de la gravure. -* Interfaces for programmers:: utilisation avancée. - -Annexes - -* Literature list:: ouvrages de référence sur la notation musicale. -* Notation manual tables:: tables et diagrammes. -* Cheat sheet:: résumé de la syntaxe de LilyPond. -* GNU Free Documentation License:: licence de ce document. -* LilyPond command index:: -* LilyPond index:: - -@end menu -@end ifnottex - -@contents - - -@include notation.itely -@include specialist.itely - -@include input.itely -@include spacing.itely - -@include changing-defaults.itely -@include programming-interface.itely - - -@include literature.itely -@include notation-appendices.itely -@include cheatsheet.itely -@include fdl.itexi - -@node LilyPond command index -@appendix LilyPond command index - -@printindex ky - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/fr/user/literature.itely b/Documentation/fr/user/literature.itely deleted file mode 100644 index 835d73faf4..0000000000 --- a/Documentation/fr/user/literature.itely +++ /dev/null @@ -1,18 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 4a527608c5ff2ce31e596495d00dce181dc1b9ea - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Literature list -@appendix Literature list - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/fr/user/macros.itexi b/Documentation/fr/user/macros.itexi deleted file mode 100644 index 1e4e7c7408..0000000000 --- a/Documentation/fr/user/macros.itexi +++ /dev/null @@ -1,361 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 8135382760aa0adfac5aed987a272c394e59dbdb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@include version.itexi -@include common-macros.itexi - - -@c ***** Displaying text ***** - -@c To get decent quotes in `foo' and ``foo''. -@c FIXME: Use thin spaces for @qq. - -@ifnotinfo - -@macro q{TEXT} -@quoteleft{}\TEXT\@quoteright{} -@end macro - -@macro qq{TEXT} -@guillemetleft{}@tie{}\TEXT\@tie{}@guillemetright{} -@end macro - -@end ifnotinfo - -@ifinfo - -@macro q{TEXT} -`\TEXT\' -@end macro - -@macro qq{TEXT} -« \TEXT\ » -@end macro - -@end ifinfo - - -@ifhtml - -@macro warning{TEXT} -@cartouche -@b{Note :} \TEXT\ -@end cartouche -@end macro - -@end ifhtml - -@ifnothtml - -@macro warning{TEXT} -@quotation -@quotation -@cartouche -@b{Note :} \TEXT\ -@end cartouche -@end quotation -@end quotation -@end macro - -@end ifnothtml - - - -@c ***** Headings in a doc subsection ***** - -@c Don't insert an empty line after @predefined! Right now -@c it doesn't matter, but a future implementation will probably -@c add some code which needs this restriction. - -@macro predefined -@noindent -@subsubheading Predefined commands -@end macro - -@c The next macro is a dummy currently since texinfo doesn't -@c provide a real ragged-right environment yet. -@c -@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) -@c the macro must not be empty. - -@macro endpredefined -@c -@end macro - - -@macro snippets -@noindent -@subsubheading Selected Snippets -@end macro - - -@c obsolete, remove when translation is fully updated -@macro commonprop -@noindent -@subsubheading Commonly tweaked properties -@end macro - - -@c Don't insert an empty line after @seealso! Otherwise we get -@c unwanted extra vertical space in the PDF output. - -@macro seealso -@noindent -@subsubheading See also -@indent -@end macro - - -@macro knownissues -@noindent -@subsubheading Known issues and warnings -@end macro - - - - -@c ***** Links and references ***** - -@c Definitions for references: -@c -@c @rglos -@c @rlearning -@c @ruser -@c @rprogram -@c @rlsr -@c @rinternals -@c -@c All these also have a @...named version which allows to specify the -@c displayed text for the reference as second argument. -@c -@c ***** HTML + bigpage is a special case (other manual names); all other -@c formats are treated similarly. - - -@c *** not TeX *** - -@ifnottex - -@c ** bigpage ** - -@ifset bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary-big-page,Glossaire} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Glossaire} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning-big-page,Manuel d'initiation} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning-big-page,Manuel d'initiation} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-big-page,Manuel de notation} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-big-page,Manuel de notation} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program-big-page,Manuel d'utilisation du programme} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program-big-page,Manuel d'utilisation du programme} -@end macro - -@macro rlsr{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-snippets-big-page,Exemples de code} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets-big-page,Exemples de code} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals-big-page,Référence des propriétés internes} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals-big-page,Référence des propriétés internes} -@end macro - -@end ifset - - -@c ** not bigpage ** - -@ifclear bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary,Glossaire} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossaire} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning,Manuel d'initiation} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Manuel d'initiation} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond,Manuel de notation} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond,Manuel de notation} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program,Manuel d'utilisation du programme} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Manuel d'utilisation du programme} -@end macro - -@macro rlsr{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-snippets,Exemples de code} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Exemples de code} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals,Référence des propriétés internes} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals,Référence des propriétés internes} -@end macro - -@end ifclear - -@end ifnottex - - -@c *** TeX *** - -@iftex - -@c All commands below should work in the middle of the line; -@c we thus must not use @vindex directly since it works only if placed -@c on a line of its own. To overcome this problem, we define a -@c replacement macro using the internal definition of @vindex which -@c delimits arguments in the standard way (i.e., with braces). - -@tex -\gdef\lilyvindex#1{\doind{vr}{\code #1}\ignorespaces} -@end tex - -@macro rglos{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,music-glossary,Glossaire} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossaire} -@end macro - -@macro rlearning{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-learning.fr,Manuel d'initiation} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-learning.fr,Manuel d'initiation} -@end macro - -@macro ruser{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond.fr,Manuel de notation} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond.fr,Manuel de notation} -@end macro - -@macro rprogram{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-program.fr,Manuel d'utilisation du programme} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-program.fr,Manuel d'utilisation du programme} -@end macro - -@macro rlsr{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-snippets,Exemples de code} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Exemples de code} -@end macro - -@macro rinternals{TEXT} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-internals,Référence des propriétés internes} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-internals,Référence des propriétés internes} -@end macro - -@end iftex - - -@c ***** Macros specific to translated docs ***** - -@macro englishref -Cette section n'est pas encore encore traduite, veuillez -vous reporter à la documentation correspondante en anglais. -@end macro diff --git a/Documentation/fr/user/notation-appendices.itely b/Documentation/fr/user/notation-appendices.itely deleted file mode 100644 index be3d9adb1e..0000000000 --- a/Documentation/fr/user/notation-appendices.itely +++ /dev/null @@ -1,171 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Frédéric Chiasson, Jean-Charles Malahieude - -@node Notation manual tables -@appendix Notation manual tables - -@c Please do not delete the following @ignore block. -@ignore -Note for editors and translators: In the following menu, two entries -are needed to link to a pair of automatically generated sections. -Please keep them and, if using emacs, do not run -texinfo-all-menus-update without manually restoring them back. These -menu entries are: - -* Text markup commands:: -* Text markup list commands:: - -and they should go just after -* Note head styles:: - -and just before -* List of articulations:: -@end ignore - -@menu -* Chord name chart:: -* Common chord modifiers:: -* Predefined fretboard diagrams:: -* MIDI instruments:: -* List of colors:: -* The Feta font:: -* Note head styles:: -* Text markup commands:: -* Text markup list commands:: -* List of articulations:: -* Percussion notes:: -* All context properties:: -* Layout properties:: -* Identifiers:: -* Scheme functions:: -@end menu - -@node Chord name chart -@appendixsec Chord name chart - -@untranslated - -@node Common chord modifiers -@appendixsec Common chord modifiers - -@untranslated - -@node Predefined fretboard diagrams -@appendixsec Predefined fretboard diagrams - -@untranslated - -@node MIDI instruments -@appendixsec MIDI instruments - -@untranslated - -@node List of colors -@appendixsec List of colors - -@untranslated - -@subsubheading Normal colors -@subsubheading X color names -@subsubheading Color Names without a numerical suffix: -@subsubheading Color names with a numerical suffix -@subsubheading Grey Scale - -@node The Feta font -@appendixsec The Feta font - -@untranslated - -@node Note head styles -@appendixsec Note head styles - -@untranslated - -@ignore -Les commandes suivantes peuvent être utilisées dans un bloc -@code{\markup @{ @}}. -@end ignore - -@include markup-commands.tely - - -@ignore -Les commandes suivantes peuvent être utilisées dans un -bloc @code{\markuplines @{ @}}. -@end ignore - -@include markup-list-commands.tely - - -@node List of articulations -@appendixsec List of articulations - -@cindex accent -@cindex marcato -@cindex staccatissimo -@cindex espressivo -@cindex point d'orgue -@cindex point d'arrêt -@cindex staccato -@cindex portato -@cindex tenuto -@cindex tirer l'archet -@cindex pousser l'archet -@cindex bouché -@cindex sourdine -@cindex orgue, marque de pédale d' -@cindex grupetto -@cindex ouvert -@cindex flageolet -@cindex trille -@cindex mordant -@cindex ornementation baroque -@cindex baroque, ornementation -@cindex pouce -@cindex segno -@cindex coda -@cindex varcoda - - -Voici la liste exhaustive des symboles : - -@lilypondfile[ragged-right,quote]{script-chart.ly} - - -@node Percussion notes -@appendixsec Percussion notes - -@lilypondfile[quote]{percussion-chart.ly} - -@node All context properties -@appendixsec All context properties - -@untranslated - - -@node Layout properties -@appendixsec Layout properties - -@untranslated - - -@node Identifiers -@appendixsec Identifiers - -@untranslated - - -@node Scheme functions -@appendixsec Scheme functions - -@untranslated diff --git a/Documentation/fr/user/notation.itely b/Documentation/fr/user/notation.itely deleted file mode 100644 index 6cb983e447..0000000000 --- a/Documentation/fr/user/notation.itely +++ /dev/null @@ -1,35 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 6f84d7b264bf1faa8d9c586bbf06c762ae53183a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Musical notation -@chapter Musical notation - -Ce chapitre explique comment créer la notation musicale standard. - -@menu -* Pitches:: écriture et gravure des hauteurs de note. -* Rhythms:: écriture et gravure des durées. -* Expressive marks:: ajout de signes d'exécution et d'interprétation. -* Repeats:: différents types de répétitions de musique. -* Simultaneous notes:: polyphonie et accords. -* Staff notation:: gravure de la portée. -* Editorial annotations:: annotations d'édition ou à usage pédagogique. -* Text:: ajout de texte à la partition. -@end menu - -@include pitches.itely -@include rhythms.itely -@include expressive.itely -@include repeats.itely -@include simultaneous.itely -@include staff.itely -@include editorial.itely -@include text.itely - diff --git a/Documentation/fr/user/percussion.itely b/Documentation/fr/user/percussion.itely deleted file mode 100644 index 4e3d1220ae..0000000000 --- a/Documentation/fr/user/percussion.itely +++ /dev/null @@ -1,333 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: bdf8540b74167817eab96ed3d13b35477217f9fe - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - -@node Percussion -@section Percussion - -@menu -* Common notation for percussion:: -@end menu - -@node Common notation for percussion -@subsection Common notation for percussion - -La notation rythmique sert avant tout aux parties de percussions ou de -batterie, mais on peut aussi s'en servir à des fins pédagogiques, pour -montrer le rythme d'une mélodie. - - -@menu -* References for percussion:: -* Basic percussion notation:: -* Percussion staves:: -* Ghost notes:: -@end menu - -@node References for percussion -@unnumberedsubsubsec References for percussion - - -@untranslated - - -@node Basic percussion notation -@unnumberedsubsubsec Basic percussion notation - - -@cindex percussions -@cindex batterie - -Les parties de percussions peuvent être saisies avec le mode @code{\drummode}, -qui est l'équivalent du mode standard utilisé pour les notes à hauteur -déterminée. Chaque instrument de percussion peut avoir, dans le -fichier LilyPond, un nom complet et un nom raccourci. - - -@lilypond[quote,ragged-right,verbatim] -\drums { - hihat hh bassdrum bd -} -@end lilypond - - -Ces noms sont inventoriés dans le fichier d'initialisation -@file{ly/@/drumpitch@/-init@/.ly}. -@c TODO: properly document this. - - -@seealso -Référence du Programme : @rinternals{note-event}. - - -@node Percussion staves -@unnumberedsubsubsec Percussion staves - - -@cindex percussions -@cindex batterie - -Une partie de percussions utilisant plusieurs instruments requiert en -général une portée de plusieurs lignes, où chaque hauteur sur la -portée représente un instrument à percussion. - -Pour saisir cette musique, il faut que les notes soient situées dans -des contextes @rinternals{DrumStaff} et @rinternals{DrumVoice}. - -@lilypond[quote,ragged-right,verbatim] -up = \drummode { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat } -down = \drummode { bassdrum4 snare8 bd r bd sn4 } - \new DrumStaff << - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } - >> -@end lilypond - -L'exemple ci-dessus montre une notation polyphonique détaillée. La -notation polyphonique abrégée peut être employée lorsque le contexte -@rinternals{DrumVoice} est spécifié explicitement : - -@lilypond[quote,ragged-right,fragment,verbatim] -\new DrumStaff << - \new DrumVoice = "1" { s1 *2 } - \new DrumVoice = "2" { s1 *2 } - \drummode { - bd4 sn4 bd4 sn4 - << - { \repeat unfold 16 hh16 } - \\ - { bd4 sn4 bd4 sn4 } - >> - } ->> -@end lilypond - -On peut choisir d'autres mises en forme si l'on définit la propriété -@code{drumStyleTable} dans le contexte @rinternals{DrumVoice}. -Quelques variables prédéfinies sont disponibles : - -@table @code -@item drums-style -La notation par défaut : une batterie standard, sur une portée de cinq lignes. - - -@lilypond[quote,line-width=10.0\cm] -nam = \lyricmode { - cymc cyms cymr hh hhc hho hhho hhp - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } -mus = \drummode { - cymc cyms cymr hh hhc hho hhho hhp \break - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } -\score { - << \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4.0 . 5.0) - } \mus - \new Lyrics \nam - >> - \layout { - \context { - \Score - \override LyricText #'font-family = #'typewriter - \override BarNumber #'transparent =##T - } - } -} -@end lilypond - -Le plan de la batterie peut inclure jusqu'à six toms différents. Bien -sûr, vous n'êtes pas obligé de tous les utiliser si la musique en -prévoit moins ; par exemple, les trois toms des lignes du milieu sont -@code{tommh}, @code{tomml}, et @code{tomfh}. - -@item timbales-style -Ce style permet de saisir une partie de timbales, sur une portée à deux -lignes. - -@lilypond[quote,ragged-right] -nam = \lyricmode { timh ssh timl ssl cb } -mus = \drummode { timh ssh timl ssl cb s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override StaffSymbol #'line-count = #2 - \override StaffSymbol #'staff-space = #2 - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) - drumStyleTable = #timbales-style - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item congas-style -Ce style produit une portée à deux lignes pour une partie de congas. - -@lilypond[quote,ragged-right] -nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } -mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - drumStyleTable = #congas-style - \override StaffSymbol #'line-count = #2 - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item bongos-style -Ce style produit une portée à deux lignes pour une partie de bongos. - - -@lilypond[quote,ragged-right] -nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } -mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override StaffSymbol #'line-count = #2 - drumStyleTable = #bongos-style - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item percussion-style -Ce style permet de saisir toute sorte de percussions sur des portées -d'une ligne. - -@lilypond[quote,ragged-right] -nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } -mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } - -<< - \new DrumStaff \with{ - \remove Bar_engraver - drumStyleTable = #percussion-style - \override StaffSymbol #'line-count = #1 - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond -@end table - -Cependant, si aucun des styles prédéfinis ne vous convient, il est aisé -de définir le vôtre en début de fichier. - -@lilypond[quote,ragged-right,verbatim] -#(define mydrums '( - (bassdrum default #f -1) - (snare default #f 0) - (hihat cross #f 1) - (pedalhihat xcircle "stopped" 2) - (lowtom diamond #f 3))) -up = \drummode { hh8 hh hh hh hhp4 hhp } -down = \drummode { bd4 sn bd toml8 toml } - -\new DrumStaff << - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - - -@seealso -Fichier d'initialisation : @file{ly/@/drumpitch@/-init@/.ly}. - -Référence du programme : @rinternals{DrumStaff}, @rinternals{DrumVoice}. - - -@knownissues - -La bibliothèque MIDI générale ne contient pas les @emph{rimshots} --- coups -sur le bord de la caisse claire --- donc ils sont remplacés par des -@emph{sidesticks,} largement équivalents. - - - -@node Ghost notes -@unnumberedsubsubsec Ghost notes - - -Des notes fantômes peuvent être créées pour les parties de percussion, -grâce à la commande @code{\parenthesize} décrite dans -@ref{Parentheses}. Cependant, le mode @code{\drummode} n'inclut pas par -défaut le graveur @code{Parenthesis_engraver} qui permet d'imprimer ces -signes. Il faut donc l'ajouter explicitement dans la définition du -contexte, suivant la manœuvre indiquée dans @ref{The -set command}. - -@lilypond[quote,ragged-right,verbatim,fragment] -\new DrumStaff \with { - \consists "Parenthesis_engraver" -} << - \context DrumVoice = "1" { s1 *2 } - \context DrumVoice = "2" { s1 *2 } - \drummode { - << - { - hh8[ hh] hh16 - < \parenthesize sn > hh < \parenthesize - sn > hh8 hh - } \\ { - bd4 r4 bd8 bd r8 bd - } - >> - } ->> -@end lilypond - -@noindent -Notez que les commandes @code{\parenthesize} obligent à ajouter des -accords --- sous la forme @code{< >} --- autour de chaque élément. - - - - diff --git a/Documentation/fr/user/pitches.itely b/Documentation/fr/user/pitches.itely deleted file mode 100644 index 9c59994574..0000000000 --- a/Documentation/fr/user/pitches.itely +++ /dev/null @@ -1,1349 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 33ba8d40c3493011a4b39ab8b1369701f8013bd6 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Frédéric Chiasson -@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude - -@node Pitches -@section Pitches - -@lilypondfile[quote]{pitches-headword.ly} - -Cette section détaille la façon d'indiquer les hauteurs de notes, sous -trois aspects : la saisie des hauteurs, la modification des hauteurs -et les options de gravure. - -@menu -* Writing pitches:: -* Changing multiple pitches:: -* Displaying pitches:: -* Note heads:: -@end menu - - -@node Writing pitches -@subsection Writing pitches - -Cette section explique la manière d'indiquer les hauteurs de note. Il -y a deux modes d'indiquer l'octave des notes : le mode absolu, et le -mode relatif. Le dernier est le plus pratique lors de la saisie d'un -fichier source au clavier de l'ordinateur. - -@menu -* Absolute octave entry:: -* Relative octave entry:: -* Accidentals:: -* Note names in other languages:: -@end menu - -@node Absolute octave entry -@unnumberedsubsubsec Absolute octave entry - -@cindex noms de note -@cindex hauteurs -@cindex absolues, hauteurs -@cindex absolues, octaves -@cindex octaves absolues - -La hauteur s'écrit --- à moins de préciser une autre langue --- avec la -notation anglaise, en utilisant les lettres @code{a} à @code{g}. -Une gamme ascendante de do majeur s'écrit - -@lilypond[quote,fragment,verbatim,ragged-right] -\clef bass -c d e f g a b c' -@end lilypond - -La note @code{c} est écrite une octave sous le do central. - -@lilypond[quote,fragment,verbatim,ragged-right] -\clef treble -c1 -\clef bass -c1 -@end lilypond - -@funindex ' -@funindex , - -L'octave peut être précisée sous forme d'une série d'apostrophes -@samp{'} ou d'une série de virgules @samp{,}. Chaque @samp{'} hausse la -note d'une octave, chaque @samp{,} baisse la note d'une octave. - -@lilypond[quote,ragged-right,fragment,verbatim] -\clef treble -c' c'' e' g d'' d' d c -\clef bass -c, c,, e, g d,, d, d c -@end lilypond - -Il existe une autre méthode pour préciser à quelle octave se situe la -note à graver ; cette méthode demande moins d'indications d'octave -(@code{'} ou @code{,}) --- voir @ref{Relative octave entry}. - - -@node Relative octave entry -@unnumberedsubsubsec Relative octave entry - -@cindex relatif -@cindex indication d'octave relative -@funindex \relative - -On spécifie les octaves en ajoutant @code{'} et @code{,} aux noms de -hauteurs. En recopiant de la musique, on a vite fait de mettre une note -à la mauvaise octave, et ce genre d'erreur est difficile à retrouver. -Le mode d'écriture \relative prévient ces erreurs dans la mesure où -elles deviennent beaucoup plus évidentes : une seule erreur décale le -reste de la pièce à une mauvaise octave. - - -@example -\relative @var{startpitch} @var{musicexpr} -@end example - -@noindent -ou - -@example -\relative @var{musicexpr} -@end example - -@noindent -@code{c'} est utilisé par défaut si aucune hauteur de départ n'est -définie. - -L'octave des notes mentionnées dans @var{musicexpr} va être calculée de -la manière suivante : si aucun signe de changement d'octave n'est -utilisé, l'intervalle de base entre la note actuelle et la précédente -sera toujours au plus d'une quarte. Cet intervalle est déterminé sans -tenir compte des altérations ; ainsi un @code{fisis} après un -@code{ceses} sera placé au-dessus du @code{ceses}. En d'autres termes, -une quarte doublement augmentée demeure considérée comme un intervavlle -plus petit qu'une quinte diminuée, bien que la quarte doublement -augmentée soit de sept demi-tons et la quinte diminuée de seulement six -demi-tons. - -Les signes de changement d'octave @code{'} et @code{,} peuvent être -ajoutés pour hausser ou baisser la note d'une octave supplémentaire. -Lorsque l'on entre en mode @code{\relative}, une hauteur absolue de -départ peut être spécifiée, et agira dès lors comme si elle précédait la -première note de @var{musicexpr}. Si aucune hauteur de départ n'est -spécifiée, le do central sert de point de départ. - -Voici le mode \relative en action. -@lilypond[quote,fragment,ragged-right,verbatim] -\relative c'' { - b c d c b c bes a -} -@end lilypond - -On utilise les signes de changement d'octave pour les intervalles -dépassant la quarte. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c'' { - c g c f, c' a, e'' -} -@end lilypond - -Si l'expression précédente est un accord, c'est la première note de -l'accord qui détermine l'emplacement de la première note du prochain -accord. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { - c - - -} -@end lilypond - -La hauteur après @code{\relative} contient un nom de note. - -La conversion en mode \relative n'affectera pas les sections @code{\transpose}, -@code{\chordmode} ou @code{\relative} situées dans son argument. Pour -utiliser \relative dans de la musique transposée, un code -@code{\relative} additionnel doit être placé dans @code{\transpose}. - - -@node Accidentals -@unnumberedsubsubsec Accidentals - -@cindex noms de note, hollandais -@cindex noms de note, par défaut - -Dans la notation par défaut, un dièse est formé en ajoutant @code{-is} -après le nom de note, un bémol en ajoutant @code{-es}. Les -double-dièses et double-bémols sont obtenus en ajoutant @code{-isis} -ou @code{-eses} au nom de note. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -a2 ais a aes -a2 aisis a aeses -@end lilypond - -@noindent -Ce sont les noms de note hollandais. En hollandais, on élide @code{aes} -pour écrire @code{as}, mais les deux formes sont acceptées. De manière -similaire, on accepte aussi bien @code{es} que @code{ees}. - -@lilypond[fragment,quote,ragged-right,verbatim,relative=2] -a2 as e es -@end lilypond - -Un bécarre annule l'effet d'une altération, qu'elle soit accidentelle -ou à l'armure. Cependant, dans la syntaxe des noms de note, les -bécarres ne s'écrivent pas avec un suffixe ; un simple nom de note -donnera une note bécarre. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -a4 aes a2 -@end lilypond - -LilyPond interprète l'entrée @code{d e f} comme @qq{imprimer un ré -naturel, un mi naturel et un fa naturel}, sans tenir compte de l'armure. -Pour plus d'information à propos de la distinction entre le contenu -musical et sa représentation, voir @rlearning{Accidentals and key signatures}. - -@lilypond[fragment,quote,ragged-right,verbatim,relative] -\key d \major -d e f g -d e fis g -@end lilypond - - -@cindex quarts de ton -@cindex demi-bémols, demi-dièses - -Les demi-bémols et demi-dièses s'écrivent en ajoutant respectivement -@code{-eh} et @code{-ih}. Voici une série de dos altérés en hauteurs -croissantes : - -@lilypond[verbatim,quote,relative=2] -ceseh1 ces ceh c cih cis cisih -@end lilypond - -Les micro-intervalles sont aussi exportés dans le fichier MIDI. - - -@cindex altération, de précaution -@cindex altération, entre parenthèses -@cindex altération de précaution -@funindex ? -@cindex altération entre parenthèses -@funindex ! - -Normalement, les altérations sont imprimées automatiquement, mais il se -peut que vous vouliez les imprimer manuellement. On peut forcer -l'impression d'une altération , dite @qq{de précaution}, en ajoutant un -point d'exclamation @samp{!} après la hauteur de note. Une altération -entre parenthèses peut être obtenue en ajoutant un point d'interrogation -@samp{?} après la hauteur de note. Ces signes peuvent aussi être -utilisés pour imprimer des bécarres. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -cis cis cis! cis? c c? c! c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{preventing-extra-naturals-from-being-automatically-added.ly} - - -@seealso -Référence du programme : @rinternals{LedgerLineSpanner}, -@rinternals{NoteHead}. - -L'impression automatique des altérations peut être affinée de plusieurs -manières. Pour plus d'information, voir @ref{Automatic accidentals}. - - -@knownissues - -Il n'y a pas de standard universellement accepté pour noter le bémol et -demi (qui abaisse la hauteur trois quarts de ton), le symbole de -LilyPond n'est donc conforme à aucun standard. - - - -@node Note names in other languages -@unnumberedsubsubsec Note names in other languages - -Vous disposez de jeux prédéfinis de noms de notes pour plusieurs autres -langues. Pour les utiliser, incluez le fichier d'initialisation -spécifique à la langue voulue. Par exemple, pour les langues romanes, -ajoutez @code{\include "italiano.ly"} au début du fichier source. Les -fichiers de langues disponibles ainsi que les noms de notes utilisés -sont les suivants : - -@cindex noms de note, autres langues -@example - Noms de note dièse bémol double double - dièse bémol -nederlands.ly c d e f g a bes b -is -es -isis -eses -english.ly c d e f g a bf b -s/-sharp -f/-flat -ss/-x/ -ff/ - -sharpshsarp -flatflat -deutsch.ly c d e f g a b h -is -es -isis -eses -norsk.ly c d e f g a b h -iss/-is -ess/-es -ississ/-isis -essess/-eses -svenska.ly c d e f g a b h -iss -ess -ississ -essess -italiano.ly do re mi fa sol la sib si -d -b -dd -bb -catalan.ly do re mi fa sol la sib si -d/-s -b -dd/-ss -bb -espanol.ly do re mi fa sol la sib si -s -b -ss -bb -@end example - -@noindent -Notez qu'en hollandais, en allemand, en norvégien et en suédois, un -@samp{la} altéré de bemol se note @code{aes} et @code{aeses}. Ces -formes sont contractées en @code{as} et @code{ases} (ou plus communément -@code{asas}). Dans certains fichiers linguistiques, seules ces formes -abrégées ont été définies ; ceci s'applique aussi aux suffixes pour les -quarts de ton. - -@noindent -Certaines musiques utilisent des microtonalités, pour lesquelles les -altérations sont des fractions de dièse ou bémol @qq{normaux}. Le -tableau suivant répertorie les noms de note en quart de ton, tels que -définis dans plusieurs fichiers linguistiques. Les préfixes @q{semi-} et -@q{sesqui-} correspondent au @q{demi-} et @q{trois demis}. À noter -qu'aucune définition n'existe à ce jour pour le norvégien, le suédois, -le catalan et l'espagnol. - -@c What about Turkish Maquam music and similar microtonal systems? -@c -@c Note that the term "three-quarter-sharp/-flat" used in lilypond's source code -@c is actually misleading since the alteration is in fact one and a half -@c of a regular sharp/flat. Whence the naming "sesqui-sharp/-flat" used below. - -@example - Noms de note semi- semi- sesqui- sesqui- - dièse bémol dièse bémol - -nederlands.ly c d e f g a bes b -ih -eh -isih -eseh -english.ly c d e f g a bf b -qs -qf -tqs -tqf -deutsch.ly c d e f g a b h -ih -eh -isih -eseh -norsk.ly c d e f g a b h -svenska.ly c d e f g a b h -italiano.ly do re mi fa sol la sib si -sd -sb -dsd -bsb -catalan.ly do re mi fa sol la sib si -espanol.ly do re mi fa sol la sib si -@end example - - -@node Changing multiple pitches -@subsection Changing multiple pitches - -@menu -* Octave checks:: -* Transpose:: -@end menu - -@node Octave checks -@unnumberedsubsubsec Octave checks - -@cindex vérification d'octave - -Les tests d'octave rendent la correction d'erreurs d'octave plus facile -dans le mode d'octave @code{relative} : une note peut être suivie de -@code{=}@var{apostrophes/virgules} pour indiquer à quelle octave absolue -elle devrait être. Dans l'exemple suivant, - -@example -\relative c'' @{ c='' b=' d,='' @} -@end example - -@noindent -le @code{d} générera un avertissement, puisqu'on attend un @code{d''} -mais qu'on obtient un @code{d'} --- il n'y a qu'une tierce entre -@code{b'} et @code{d''}. Sur la partition, l'octave sera corrigée pour -donner un @code{d''} et la prochaine note sera calculée en fonction de -@code{d''} et non de @code{d'}. - -Il existe aussi une vérification d'octave qui ne produit pas de musique -imprimée, ayant pour syntaxe - -@example -\octaveCheck @var{hauteur} -@end example - -Cette commande vérifie que la @var{hauteur} considérée sans apostrophe -ni virgule et comme hauteur relative, est la même que la @var{hauteur} -absolue considérée avec ses éventuelles apostrophes ou virgules. Sinon, -un avertissement est émis et l'octave est corrigée. La @var{hauteur} -n'est pas considérée comme une note, et donc n'est pas imprimée. - -Dans l'exemple ci-dessous, le premier test réussit, puisque le @code{e} ---- dans le mode @code{relative} --- est au plus à une quarte de -@code{a'}. Cependant, le deuxième test produit un avertissement, -puisque le @code{e} est à quinte de @code{b'}. Le message -d'avertissement est émis, et l'octave est corrigée afin que les notes -suivantes soient à nouveau à la bonne octave. - -@example -\relative c' @{ - e - \octaveCheck a' - \octaveCheck b' -@} -@end example - -L'octave d'une note qui suit un test d'octave est déterminée selon la -note précédente. Dans l'exemple suivant, la dernière note est un -@code{a'}, au-dessus du do central. Cela veut dire que le test -@code{\octaveCheck} réussit, et peut donc être enlevé sans changer le -résultat sur la partition. - -@lilypond[quote,ragged-right,verbatim,fragment] -\relative c' { - e - \octaveCheck b - a -} -@end lilypond - - -@node Transpose -@unnumberedsubsubsec Transpose - -@cindex transposition -@cindex transposition des hauteurs -@funindex \transpose - -Une expression musicale peut être transposée avec @code{\transpose}. -Voici la syntaxe : -@example -\transpose @var{note_de départ} @var{note_d_arrivée} @var{musicexpr} -@end example - -Cela signifie que @var{musicexpr} est transposé d'un intervalle entre -les notes @var{note_de_départ} et @var{note_d_arrivée} : toute note -dont la hauteur était @code{note_de_départ} -est changée en @code{note_d_arrivée}. - -Prenons comme exemple une pièce écrite en ré majeur. Si cette pièce est -un peu trop basse pour l'interprète, elle peut être transposée en mi -majeur avec -@example -\transpose d e @dots{} -@end example - -Regardons maintenant une partie écrite pour violon --- un instrument en -ut). Si cette partie doit être jouée par une clarinette en la (écrite à -la tierce mineure supérieure, un do écrit donnant un la réel), la -transposition suivante créera la partie appropriée. - -@example -\transpose a c @dots{} -@end example - -@code{\transpose} fait la distinction entre les notes enharmoniques : -@code{\transpose c cis} et @code{\transpose c des} transposeront la -pièce un demi-ton plus haut. Mais la première version écrira des -dièses et la deuxième des bémols. - -@lilypond[quote,ragged-right,verbatim] -mus = { \key d \major cis d fis g } -\new Staff { - \clef "F" \mus - \clef "G" - \transpose c g' \mus - \transpose c f' \mus -} -@end lilypond - -On peut aussi utiliser @code{\transpose} pour entrer des notes écrites -pour un instrument transpositeur. Normalement, les hauteurs dans -LilyPond sont écrites en ut, i.e. en sons réels, mais elles peuvent être -écrites dans un autre ton. Quand, par exemple, on écrit pour une -trompette en si bémol, commençant sur ré note réelle, on pourrait écrire -@example -\transpose c bes @{ e4 @dots{} @} -@end example - -Pour imprimer cette musique en si bémol à nouveau --- et de ce fait -produire une partie de trompette, au lieu d'un conducteur en notes -réelles, on utilisera un deuxième @code{transpose} - -@example -\transpose bes c @{ \transpose c bes @{ e4 @dots{} @} @} -@end example - - -@seealso -Référence du programme : @rinternals{TransposedMusic}. - -Exemples : @rlsr{Pitches}. - - -@knownissues - -Si vous voulez utiliser en même temps @code{\transpose} et -@code{\relative}, vous devez mettre @code{\transpose} en dehors de -@code{\relative}, puisque @code{\relative} n'aura aucun effet sur la -musique apparaissant dans un @code{\transpose}. - -@node Displaying pitches -@subsection Displaying pitches - -@menu -* Clef:: -* Key signature:: -* Ottava brackets:: -* Instrument transpositions:: -* Automatic accidentals:: -* Ambitus:: -@end menu - -@node Clef -@unnumberedsubsubsec Clef - -@funindex \clef - -La clé indique quelles lignes de la portée correspondent à telles -hauteurs. Elle est réglée par la commande @code{\clef}. - -@lilypond[quote,ragged-right,fragment,verbatim] -{ c''2 \clef alto g'2 } -@end lilypond - -@cindex clé de sol -@cindex clé de fa -@cindex clé d'ut - -Les clés prises en charge sont - -@multitable @columnfractions .33 .66 -@headitem Clef @tab Position -@item @code{treble}, violin, G, G2 @tab Clé de sol 2e ligne -@item @code{alto, C} @tab Clé d'ut 3e ligne -@item @code{tenor} @tab Clé d'ut 4e ligne -@item @code{bass, F} @tab Clé de fa 4e ligne -@item @code{french} @tab Clé de sol 1e ligne -@item @code{soprano} @tab Clé d'ut 1e ligne -@item @code{mezzosoprano} @tab Clé d'ut 2e ligne -@item @code{baritone} @tab Clé d'ut 5e ligne -@item @code{varbaritone} @tab Clé de fa 3e ligne -@item @code{subbass} @tab Clé de fa 5e ligne -@item @code{percussion} @tab Clé de percussion -@item @code{tab} @tab Clé de tablature -@end multitable - -En ajoutant @code{_8} ou @code{^8} au nom de la clé, celle-ci est -transposée à l'octave respectivement inférieure ou supérieure, et -@code{_15} ou @code{^15} la transpose de deux octaves. L'argument -@var{clefname} doit être mis entre guillemets lorsqu'il contient un -caractère @qq{souligné} ou des chiffres. Par exemple, - - -@cindex choral tenor clef -@lilypond[quote,ragged-right,verbatim,fragment,relative=1] -\clef "G_8" c4 -@end lilypond - - -@commonprop - -La commande @code{\clef "treble_8"} équivaut à définir @code{clefGlyph}, -@code{clefPosition} --- qui contrôle la position verticale de la clé --- -@code{middleCPosition} et @code{clefOctavation}. Une clé est imprimée -lorsque l'une de ces propriétés est changée. Les exemples suivant font -apparaître des possibilités de réglage manuel de ces propriétés. - -@lilypond[quote,ragged-right,verbatim] -{ - \set Staff.clefGlyph = #"clefs.F" - \set Staff.clefPosition = #2 - c'4 - \set Staff.clefGlyph = #"clefs.G" - c'4 - \set Staff.clefGlyph = #"clefs.C" - c'4 - \set Staff.clefOctavation = #7 - c'4 - \set Staff.clefOctavation = #0 - \set Staff.clefPosition = #0 - c'4 - \clef "bass" - c'4 - \set Staff.middleCPosition = #4 - c'4 -} -@end lilypond - - -@seealso -Dans ce manuel : @ref{Grace notes}. - -Référence du programme : @rinternals{Clef}. - - -@node Key signature -@unnumberedsubsubsec Key signature - -@cindex armure -@funindex \key - -L'armure indique la tonalité dans laquelle la pièce doit être jouée. -Elle comprend un ensemble d'altérations (dièses ou bémols) à la clé, -c'est-à-dire au début de la portée. - -On définit ou modifie l'armure avec la commande @code{\key} - -@example -@code{\key} @var{hauteur} @var{type} -@end example - -@funindex \minor -@funindex \major -@funindex \minor -@funindex \ionian -@funindex \locrian -@funindex \aeolian -@funindex \mixolydian -@funindex \lydian -@funindex \phrygian -@funindex \dorian -@cindex modes anciens - -Ici, @var{type} doit être @code{\major} ou @code{\minor} afin d'avoir -respectivement @var{hauteur}-major ou @var{hauteur}-minor. Vous pouvez -aussi avoir recours aux modes anciens que sont @code{\ionian}, -@code{\locrian}, @code{\aeolian}, @code{\mixolydian}, @code{\lydian}, -@code{\phrygian}, et @code{\dorian}. - -Cette commande fixe la propriété de contexte @code{Staff.keySignature}. -Des armures inhabituelles peuvent être spécifiées en modifiant -directement cette propriété. - -Les nouveaux utilisateurs s'embrouillent souvent dans les altérations et -les armures, car des notes naturelles prennent ou non un bécarre selon -l'armure. Pour plus d'informations, voir @ref{Accidentals} ou -@rlearning{Accidentals and key signatures}. - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -\key g \major -f1 -fis -@end lilypond - - -@commonprop - -Un bécarre est imprimé pour annuler toute altération précédente. Ceci -peut être supprimé en réglant la propriété -@code{Staff.printKeyCancellation}. - -@lilypond[quote,fragment,ragged-right,fragment,verbatim,relative=2] -\key d \major -a b cis d -\key g \minor -a bes c d -\set Staff.printKeyCancellation = ##f -\key d \major -a b cis d -\key g \minor -a bes c d -@end lilypond - - -@seealso -Référence du programme : @rinternals{KeyCancellation}, -@rinternals{KeySignature}. - - -@node Ottava brackets -@unnumberedsubsubsec Ottava brackets - -Les marques d'octaviation, @emph{Ottava}, permettent d'introduire une -transposition spécifique d'une octave pour la portée en cours. C'est -la fonction @code{ottava} qui s'en charge. - -@cindex ottava -@cindex 15ma -@cindex octaviation - -@lilypond[quote,ragged-right,verbatim,fragment] -\relative c''' { - a2 b - \ottava #1 - a b - \ottava #0 - a b -} -@end lilypond - -La fonction @code{ottava} peut aussi prendre en argument les -valeurs -1@tie{}(pour 8va bassa), 2@tie{}(pour 15ma --- 2 octaves) ou --2@tie{}(pour 15ma bassa). En interne, cette fonction détermine les -propriétés @code{ottavation} (p.ex. en @code{"8va"} ou @code{"8vb"}) -et @code{centralCPosition}. Vous pouvez modifier le texte d'une marque -d'octaviation en définissant @code{ottavation} après avoir fait appel -à @code{ottava} : - -@lilypond[quote,ragged-right,verbatim] -{ - \ottava #1 - \set Staff.ottavation = #"8" - c''' -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{OttavaBracket}. - - -@knownissues - -@code{ottava} gère difficilement les changements de clé qui -pourraient intervenir alors qu'elle est effective. - - -@node Instrument transpositions -@unnumberedsubsubsec Instrument transpositions - -@cindex transposition, MIDI -@cindex transposition, instrument - -Vous pouvez spécifier la tonalité d'un instrument transpositeur, ce -qui est le cas pour de nombreux instruments à vent comme la clarinette -(si bémol, la ou mi bémol), le cor (fa), ou la trompette (si bémol, -ut, ré ou mi bémol). - -Cette transposition s'indique après le mot-clé @code{\transposition}. - -@example -\transposition bes %% clarinette en si bémol -@end example - -@noindent -Cette commande détermine la propriété @code{instrumentTransposition}, -dont la valeur sera utilisée pour le fichier MIDI et en cas de -citation. Elle n'affecte en rien la manière dont les notes seront -imprimées sur la portée. Référez-vous à la section @ref{Transpose} -pour obtenir un autre résultat. - -La hauteur donnée en argument à @code{\transposition} doit -correspondre à la note entendue lorsqu'un @code{do} écrit sur la -portée est joué par l'instrument transpositeur. Par exemple, lorsque -vous saisissez une partition en notes réelles, toutes les voix -devraient être en ut ; pour les instruments transpositeurs, il faudra -procéder de cette manière : - -@example -clarinet = @{ - \transposition c' - ... -@} -saxophone = @{ - \transposition c' - ... -@} -@end example - -Lorsque vous entrez de la musique à partir d'une partie transposée, -utilisez la commande @code{\transposition}. Si l'on prend l'exemple -des parties de cor, leur tonalité change souvent au cours d'un morceau ; -en recopiant cette partie, utilisez @code{\transposition} ainsi : - -@example -\transposition d' -c'4^"en ré" -... -\transposition g' -c'4^"en sol" -... -@end example - -@node Automatic accidentals -@unnumberedsubsubsec Automatic accidentals -@cindex Altérations accidentelles automatiques - -Une fonction a été créée pour regrouper les règles suivant lesquelles -s'impriment les altérations. Elle s'invoque de la manière suivante : - -@funindex set-accidental-style -@example -#(set-accidental-style 'REGLE) -@end example - -@c TODO: check the context stuff below -@c -does it *really* work? -@c -the default contexts as specified in -@c scm/music-function.scm seem to be different -vv - -Cette fonction prend pour argument le nom de la règle d'altérations, -auquel peut s'ajouter, comme argument facultatif, le contexte -devant être affecté : - -@example -#(set-accidental-style 'REGLE #('CONTEXTE#)) -@end example - -Si aucun contexte n'est spécifié, le contexte @code{Staff} sera affecté ; -cependant on peut souhaiter l'appliquer au contexte @code{Voice} en lieu -et place. - -Les régles d'altérations suivantes sont possibles : - -@table @code -@item default -C'est la règle d'impression par défaut, qui se rapporte à l'usage -en vigueur au XVIIIème siècle : les altérations accidentelles sont valables toute -une mesure, et uniquement à leur propre octave. - - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - %#(set-accidental-style 'default) - \musicA } - \context Staff = "down"{ - %#(set-accidental-style 'default) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'default" }}} -} -@end lilypond - -@item voice -En principe, LilyPond se souvient de toutes les altérations présentes sur la -portée (contexte Staff). Avec cette règle, cependant, les altérations sont indépendantes -pour chacune des voix. - - -@example - \new Staff << - #(set-accidental-style 'voice) - @{ @dots{} @} - >> -@end example - -De ce fait, les altérations d'une voix sont ignorées dans les autres voix, -ce qui peut donner lieu à un résultat malencontreux. Dans l'exemple suivant, -il est difficile de dire si le deuxième @samp{la} est dièse ou naturel. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'voice) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'voice) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'voice" }}} -} -@end lilypond - -La règle @code{voice} n'est à envisager que dans le cas de voix devant être lues par -des musiciens différents. S'il s'agit d'un @q{conducteur}, ou d'une portée destinée -à un seul musicien, il vaut mieux utiliser @code{modern} ou @code{modern-cautionary}. - - -@item modern -@funindex modern style accidentals -Cette règle est la plus courante au XXème siècle. Les altérations accidentelles -sont imprimées comme avec le style @code{default}, mais lorsqu'une note non-altérée -apparaît à une octave différente, ou bien dans la mesure suivante, des bécarres de précaution -sont ajoutés. Dans l'exemple suivant, notez ainsi les deux bécarres dans la -deuxième mesure de la main droite. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern" }}} -} -@end lilypond - -@item @code{modern-cautionary} -@funindex modern-cautionary -Cette règle est équivalente à @code{modern}, mais les bécarres de précaution sont -imprimés de façon particulière : soit plus petits, soit (par défaut) entre parenthèses. -Il est possible de le définir au moyen de la propriété @code{cautionary-style} -pour l'objet @rinternals{AccidentalSuggestion}. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern-cautionary) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern-cautionary) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern-cautionary" }}} -} -@end lilypond - -@funindex modern-voice -@item modern-voice -Cette règle sert aux altérations dans de la musique polyphonique destinée -autant à des musiciens différents qu'à quelqu'un qui lirait l'ensemble des voix. -Les altérations sont imprimées voix par voix, mais les autres voix, dans le même -contexte @rinternals{Staff}, en @emph{tiennent compte} cette fois. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern-voice) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern-voice) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern-voice" }}} -} -@end lilypond - -@funindex modern-voice-cautionary -@item modern-voice-cautionary -Cette régle est similaire à la précédente, mais les altérations de précautions -(celles que n'aurait pas ajoutées @code{voice}), sont imprimées de façon -particulière. On retrouve donc toutes les altérations qu'imprimerait -@code{default}, mais certaines sont considérées comme étant @qq{de précaution}. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern-voice-cautionary) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern-voice-cautionary) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern-voice-cautionary" }}} -} -@end lilypond - -@item piano -@funindex piano accidentals -Cette règle est adaptée aux contextes GrandStaff -- ce qui n'empêche pas de devoir la spécifier -pour chaque portée individuelle au sein du contexte GrandStaff. - -@example -\new GrandStaff @{ << - \new Staff = "up" @{ << - #(set-accidental-style 'piano) - @{ @dots{} @} - >> @} - \new Staff = "down"@{ << - #(set-accidental-style 'piano) - @{ @dots{} @} - >> @} ->> @} -@end example - -Cette règle est communément employée pour les partitions de piano au XXème siècle. -Très similaire à @code{modern} de par son comportement, elle s'en distingue en ce que -les altérations tiennent compte des autre portées du contexte @rinternals{GrandStaff} ou -@rinternals{PianoStaff}. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'piano) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'piano) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'piano" }}} -} -@end lilypond - -@item piano-cautionary -@funindex #(set-accidental-style 'piano-cautionary) -Identique à @code{#(set-accidental-style 'piano)}, mais les altérations de précaution -sont imprimées différemment. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'piano-cautionary) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'piano-cautionary) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'piano-cautionary" }}} -} -@end lilypond - -@item no-reset -@funindex no-reset accidental style -C'est la même règle que @code{default}, mais l'effet des altérations accidentelles -ne cesse jamais, même dans les mesures suivantes. -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'no-reset) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'no-reset) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'no-reset" }}} -} -@end lilypond - -@item forget -Tout le contraire de @code{no-reset}: l'effet des altérations cesse aussitôt, -et de ce fait, toutes les altérations, quelque soit leur place dans la mesure, sont -imprimées, en fonction de l'éventuelle armure. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'forget) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'forget) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'forget" }}} -} -@end lilypond -@end table - - -@seealso -Référence du programme : @rinternals{Accidental_engraver}, -@rinternals{Accidental}, @rinternals{AccidentalSuggestion} et @rinternals{AccidentalPlacement}. - - -@knownissues - -Les notes simultanées sont considérées comme des évènements séquentiels. -Ce qui implique que, dans un accord, les altérations accidentelles seront -imprimées comme si les notes de l'accords apparaissaient une par une, en fonction -de l'ordre dans lequels elles ont été saisies -- ce qui peut poser problème lorsqu'au -sein d'un accord certaines altérations dépendent les unes des autres. -Ce problème est à résoudre manuellement, en insérant des @code{!} et des @code{?} après les notes -concernées. - - -@node Ambitus -@unnumberedsubsubsec Ambitus -@cindex ambitus - -L'@emph{ambitus} est l'amplitude des hauteurs d'une voix donnée dans une -partition. Ce terme peut aussi désigner la tessiture qu'un instrument -est capable d'atteindre. Souvent, cet ambitus est imprimé au début des -partitions vocales, afin que les exécutants puissent voir au premier -coup d'oeil s'ils sont en mesure de tenir la partie en question. - -Pour exprimer l'ambitus d'une pièce, on indique avant la clé deux notes -représentant la hauteur la plus basse et la plus haute. Pour imprimer -cet ambitus, il faut ajouter le graveur @rinternals{Ambitus_engraver} -au contexte @rinternals{Voice}. Ainsi, - -@example -\layout @{ - \context @{ - \Voice - \consists Ambitus_engraver - @} -@} -@end example - -@noindent -donne pour résultat - -@lilypond[quote,ragged-right] -\layout { - \context { - \Staff - \consists Ambitus_engraver - } -} - -\relative \new Staff { - as'' c e2 cis,2 -} -@end lilypond - -Si plusieurs voix se trouvent sur une même portée, on peut attribuer le -graveur @rinternals{Ambitus_engraver} au contexte @rinternals{Staff} -plutôt qu'au contexte @rinternals{Voice} ; l'ambitus affiché sera -alors celui de toutes les voix cumulées, non d'une seule des voix -actives. - -@lilypond[verbatim,ragged-right,quote] -\new Staff \with { - \consists "Ambitus_engraver" -} -<< - \new Voice \with { - \remove "Ambitus_engraver" - } \relative c'' { - \override Ambitus #'X-offset = #-1.0 - \voiceOne - c4 a d e f2 - } - \new Voice \with { - \remove "Ambitus_engraver" - } \relative c' { - \voiceTwo - es4 f g as b2 - } ->> -@end lilypond - -@noindent -Cet exemple met en œuvre une fonctionnalité avancée : - -@example -\override Ambitus #'X-offset = #-1.0 -@end example - -@noindent -Ce réglage déplace l'ambitus vers la gauche. Le même résultat aurait pu -être obtenu avec @code{extra-offset}, mais alors le système de mise en -forme n'aurait pas attribué d'espace supplémentaire pour l'objet -déplacé. - - -@seealso -Référence du programme : @rinternals{Ambitus}, -@rinternals{AmbitusLine}, @rinternals{AmbitusNoteHead}, -@rinternals{AmbitusAccidental}. - -Exemples : @rlsr{Pitches}, @rlsr{Vocal music}. - - -@knownissues - -LilyPond ne gère pas les collisions entre plusieurs ambitus présents sur -une même portée. - - -@node Note heads -@subsection Note heads - -@menu -* Special note heads:: -* Easy notation note heads:: -* Shape note heads:: -* Improvisation:: -@end menu - -@node Special note heads -@unnumberedsubsubsec Special note heads - -@cindex têtes de note, spéciales - -Certains instruments utilisent des têtes de note différentes à des -fins spécifiques --- des croix pour le @q{parlato} des chanteurs ou les -notes étouffées des guitares ; des losanges pour les harmoniques des -cordes. Il existe un raccourci (@code{\harmonic}) pour les notes en -losange ; pour les autres styles de tête, il vous faudra jouer avec la -propriété @code{NoteHead}. - -@lilypond[ragged-right,relative=1,fragment,verbatim,quote] -c4 d -\override NoteHead #'style = #'cross -e f -\revert NoteHead #'style -e d -@end lilypond - -@noindent -Pour une liste exhaustive des styles de tête de note, consultez -@ref{Note head styles}. - - -@seealso -Référence du programme : @rinternals{NoteHead}. - - -@node Easy notation note heads -@unnumberedsubsubsec Easy notation note heads - -@cindex tête de note, apprentissage -@cindex notation facile -@cindex Hal Leonard - -Les notes @q{easy play} comportent le nom de la note à l'intérieur de -la tête. On l'utilise dans des partitions pour débutants. - -@lilypond[quote,ragged-right,verbatim,fragment,staffsize=26] - \easyHeadsOn - c'2 e'4 f' | g'1 -@end lilypond - -La commande @code{\easyHeadsOn} remplace tous les réglages de l'objet -@rinternals{NoteHead}. L'impression doit être de plus grande -taille, afin que les lettres soient lisibles. Voir à ce propos -@ref{Setting the staff size}. - - -@predefined -@funindex \easyHeadsOn -@code{\easyHeadsOn}. -@endpredefined - - -@node Shape note heads -@unnumberedsubsubsec Shape note heads - -@cindex tête de note, allure - -En notation profilée, le profil d'une tête de note correspond à la -fonction harmonique de cette note dans la gamme. Ce style de notation -était très en vogue dans les recueils de chansons américains du XIXe -siècle. - -Des notes profilées sont produites après activation de -@code{\aikenHeads} ou @code{\sacredHarpHeads}, selon le style. - -@lilypond[verbatim,relative=1,fragment] - \aikenHeads - c8 d4 e8 a2 g1 - \sacredHarpHeads - c8 d4. e8 a2 g1 -@end lilypond - -Les profils sont déterminés par la hauteur dans la gamme, le premier -degré étant défini par la commande @code{\key}. - -@funindex \key -@funindex shapeNoteStyles -@funindex \aikenHeads -@funindex \sacredHarpHeads - -Les notes profilées sont mises en œuvre par la propriété -@code{shapeNoteStyles}, dont les valeurs sont constituées d'une liste -de symboles. Le n-ième élément indique le style à utiliser pour le -n-ième degré de la gamme. Toutes les combinaisons sont possibles : - -@lilypond[verbatim,relative=1,fragment] - \set shapeNoteStyles = #'#(cross triangle fa #f mensural xcircle diamond) - c8 d4. e8 a2 g1 -@end lilypond - - -@node Improvisation -@unnumberedsubsubsec Improvisation - -L'improvisation peut quelquefois s'indiquer à l'aide de notes de forme -allongée (@emph{slash}). Ces têtes de notes sont créées par -l'adjonction du graveur @rinternals{Pitch_squash_engraver} au -contexte @rinternals{Voice}, de telle sorte que la commande - -@example -\set squashedPosition = #0 -\override NoteHead #'style = #'slash -@end example - -@noindent -active les notes penchées. - -Vous disposez des raccourcis @code{\improvisationOn} et son corollaire -@code{\improvisationOff} pour cette séquence, comme l'illustre -l'exemple ci dessous. - -@lilypond[verbatim,ragged-right,quote] -\new Voice \with { - \consists Pitch_squash_engraver -} \transpose c c' { - e8 e g a a16(bes)(a8) g \improvisationOn - e8 - ~e2~e8 f4 fis8 - ~fis2 \improvisationOff a16(bes) a8 g e -} -@end lilypond diff --git a/Documentation/fr/user/preface.itely b/Documentation/fr/user/preface.itely deleted file mode 100644 index fa3c3e5d73..0000000000 --- a/Documentation/fr/user/preface.itely +++ /dev/null @@ -1,67 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 65dd8bb120476562eb0104c6969d72d8b105ac8f - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Ludovic Sardain, Damien Heurtebise - -@node Preface -@unnumbered Preface - -Ce doit être pendant une répétition de l'Orchestre des Jeunes -d'Eindhoven, un jour de 1995, que Jan, du pupitre des altistes tordus, -aborda Han-Wen, un corniste déjanté, pour lui parler d'un mirifique -projet dans lequel il venait de se lancer. Il s'agissait d'un système -automatisé de gravure musicale --- le préprocesseur MPP pour MusiXTeX -pour être précis. Han-Wen, qui voulait justement imprimer certaines -parties d'une oeuvre, jeta un premier coup d'oeil à ce programme, et -devint très vite accro. Le MPP s'avéra bientôt une voie sans issue. -Après avoir ratiociné et échangé un grand nombre de courriels -enflammés, Han-Wen lança le projet LilyPond en 1996, dans lequel, -cette fois, ce fut au tour de Jan de se sentir entraîné. - -De bien des points de vue, coder un programme informatique, c'est -comme apprendre à jouer d'un instrument. Au début c'est sympa, on -découvre comment ça fonctionne, et on aborde tout ce qu'on n'arrive -pas encore à faire comme autant de défis. L'exaltation de la -nouveauté s'estompant, on doit s'entraîner encore et encore. Les -gammes, les études deviennent vite ennuyeuses, et peuvent, si l'on -n'est pas encouragé par d'autres --- professeurs, chefs ou public --- -en décourager plus d'un. Pourtant, pour peu que l'on persévère, -l'instrument devient progressivement une partie de notre vie. Si -certains jours il semble naturel d'en jouer, c'est un vrai bonheur. -Et si d'autres jours on ne peut tout simplement rien en tirer, on -continue quand même à travailler, coûte que coûte. - -De même, développer LilyPond peut être une tâche harassante. Certains -jours, c'est un monceau de bugs duquel il faut se dépêtrer. Pourtant, -il fait maintenant partie de notre vie, et nous nous accrochons. -Notre principale motivation vient sans doute de l'utilité réelle de -notre logiciel. En flânant sur Internet, nous trouvons beaucoup de -gens qui utilisent LilyPond pour réaliser d'impressionnantes -partitions : c'est incroyable, mais en même temps très flatteur. - -Les utilisateurs ne se contentent pas de nous encourager en utilisant -notre logiciel ; nombre d'entre eux nous aident aussi en faisant des -suggestions et en signalant des bogues. Aussi, nous voudrions -remercier ici tous les utilisateurs qui nous ont signalé des bugs, ont -fait des suggestions ou ont contribué d'une façon ou d'une autre au -développement de LilyPond. - -Jouer de la musique ou en graver, il y a là plus qu'une comparaison -séduisante. Même si l'on s'amuse beaucoup en programmant tous -ensemble, et qu'on éprouve une satisfaction profonde à aider les gens, -au bout du compte, notre travail sur LilyPond est avant tout une -manière d'exprimer notre amour sincère de la musique. Puisse-t-il -vous aider à créer de nombreuses et belles oeuvres ! - -Han-Wen et Jan - -Utrecht/Eindhoven, Pays-Bas, juillet 2002. diff --git a/Documentation/fr/user/programming-interface.itely b/Documentation/fr/user/programming-interface.itely deleted file mode 100644 index c11bfb4244..0000000000 --- a/Documentation/fr/user/programming-interface.itely +++ /dev/null @@ -1,355 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 76de7e168dbc9ffc7671d99663c5ce50dae42abb - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Gilles Thibault - - -@node Interfaces for programmers -@chapter Interfaces for programmers - -@untranslated - - -@menu -* Music functions:: -* Programmer interfaces:: -* Building complicated functions:: -* Markup programmer interface:: -* Contexts for programmers:: -* Scheme procedures as properties:: -* Using Scheme code instead of tweak:: -* Difficult tweaks:: -@end menu - -@node Music functions -@section Music functions - -@untranslated - - -@menu -* Overview of music functions:: -* Simple substitution functions:: -* Paired substitution functions:: -* Mathematics in functions:: -* Void functions:: -* Functions without arguments:: -* Overview of available music functions:: -@end menu - -@node Overview of music functions -@subsection Overview of music functions - -@untranslated - - -@node Simple substitution functions -@subsection Simple substitution functions - -@untranslated - - -@node Paired substitution functions -@subsection Paired substitution functions - -@untranslated - - -@node Mathematics in functions -@subsection Mathematics in functions - -@untranslated - - -@node Void functions -@subsection Void functions - -@untranslated - - -@node Functions without arguments -@subsection Functions without arguments - -@untranslated - - -@node Overview of available music functions -@subsection Overview of available music functions - -@untranslated - - -@include identifiers.tely -@node Programmer interfaces -@section Programmer interfaces - -@untranslated - - -@menu -* Input variables and Scheme:: -* Internal music representation:: -@end menu - -@node Input variables and Scheme -@subsection Input variables and Scheme - -@untranslated - - -@node Internal music representation -@subsection Internal music representation - -@untranslated - - -@node Building complicated functions -@section Building complicated functions - -@untranslated - - -@menu -* Displaying music expressions:: -* Music properties:: -* Doubling a note with slurs (example):: -* Adding articulation to notes (example):: -@end menu - -@node Displaying music expressions -@subsection Displaying music expressions - -@untranslated - - -@node Music properties -@subsection Music properties - -@untranslated - - -@node Doubling a note with slurs (example) -@subsection Doubling a note with slurs (example) - -@untranslated - - -@node Adding articulation to notes (example) -@subsection Adding articulation to notes (example) - -@untranslated - - -@node Markup programmer interface -@section Markup programmer interface - -@untranslated - - -@menu -* Markup construction in Scheme:: -* How markups work internally:: -* New markup command definition:: -* New markup list command definition:: -@end menu - -@node Markup construction in Scheme -@subsection Markup construction in Scheme - -@untranslated - - -@node How markups work internally -@subsection How markups work internally - -@untranslated - - -@node New markup command definition -@subsection New markup command definition - -@untranslated - - -@node New markup list command definition -@subsection New markup list command definition - -@untranslated - - -@node Contexts for programmers -@section Contexts for programmers - -@untranslated - - -@menu -* Context evaluation:: -* Running a function on all layout objects:: -@end menu - -@node Context evaluation -@subsection Context evaluation - -@untranslated - - -@node Running a function on all layout objects -@subsection Running a function on all layout objects - -@untranslated - - -@node Scheme procedures as properties -@section Scheme procedures as properties - -@untranslated - - -@menu -* Using Scheme code instead of tweak:: -* Difficult tweaks:: -@end menu - -@node Using Scheme code instead of tweak -@section Using Scheme code instead of @code{\tweak} - -L'inconvénient principal de la commande @code{\tweak} est la rigidité de sa -syntaxe. Par exemple, le code suivant produit une erreur. - -@example -F = \tweak #'font-size #-3 -\flageolet - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -En d'autres termes, @code{\tweak} ne se comporte pas comme une articulation : -il ne peut notamment pas être accolé avec les symboles @samp{^} ou @samp{_}. - -C'est en se servant du langage Scheme que l'on peut résoudre ce problème. -Dans cet exemple, on a recours aux méthodes décrites dans @ref{Adding -articulation to notes (example)}, en particulier quant à l'emploi de -@code{\displayMusic}. - -@example -F = #(let ((m (make-music 'ArticulationEvent - 'articulation-type "flageolet"))) - (set! (ly:music-property m 'tweaks) - (acons 'font-size -3 - (ly:music-property m 'tweaks))) - m) - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -Ici les propriétés @code{tweak} de l'objet flageolet nommé -@samp{m} (créé au moyen de @code{make-music}) sont extraites par -@code{ly:music-property}, une nouvelle valeur de la taille de fonte -est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme -@code{acons}), et le résultat de cette opération est renvoyé par @code{set!}. -Le dernier élément, dans ce bloc @code{let}, est la valeur finale de -@samp{m} lui-même. - - -@node Difficult tweaks -@section Difficult tweaks - -Certains réglages sont plus délicats que d'autres. - -@itemize @bullet - - -@item -L'un d'entre eux est l'apparence des objets dits @q{spanner}, qui s'étendent -horizontalement, tels que les liaisons. Si, en principe, un seul de ces objets -est créé à la fois et peut donc être modifié de façon habituelle, lorsque ces -objets doivent enjamber un changement de ligne, ils sont dupliqués au début -du ou des systèmes suivants. Comme ces objets sont des clones de l'objet d'origine, -ils en héritent toutes les propriétés, y compris les éventuelles commandes @code{\override}. - - -En d'autres termes, une commande @code{\override} affecte toujours les deux extrémités -d'un objet @q{spanner}. Pour ne modifier que la partie précédant ou suivant le changement -de ligne, il faut intervenir directement dans le processus de mise en page. -La fonction de rappel @code{after-line-breaking} contient toute l'opération Scheme -effectuée lorsque les sauts de lignes ont été déterminés, et que des objets graphiques -ont été divisés sur des systèmes différents. - -Dans l'exemple suivant, on définit une nouvelle opération nommée -@code{my-callback}. Cette opération - -@itemize @bullet -@item -détermine si l'objet a été divisé à l'occasion d'un changement de ligne -@item -si oui, recherche les différents morceaux de l'objet -@item -vérifie si l'objet considéré est bien la deuxième moitié d'un objet divisé -@item -si oui, applique un espacement supplémentaire (@code{extra-offset}). -@end itemize - -On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue), -de façon à ce que le deuxième morceau d'une liaison divisée soit rehaussé. - -@c KEEP LY -@lilypond[quote,verbatim,ragged-right] -#(define (my-callback grob) - (let* ( - ; l'objet a-t-il été divisé ? - (orig (ly:grob-original grob)) - - ; si oui, rechercher les morceaux frères (siblings) - (siblings (if (ly:grob? orig) - (ly:spanner-broken-into orig) '() ))) - - (if (and (>= (length siblings) 2) - (eq? (car (last-pair siblings)) grob)) - (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) - -\relative c'' { - \override Tie #'after-line-breaking = - #my-callback - c1 ~ \break c2 ~ c -} -@end lilypond - -@noindent -Lorsque cette astuce va être appliquée, notre nouvelle fonction de rappel -@code{after-line-breaking} devra également appeler celle d'origine -(@code{after-line-breaking}), si elle existe. -Ainsi, pour l'utiliser dans le cas d'un crescendo (objet @code{Hairpin}), -il faudra appeler également @code{ly:hairpin::after-line-breaking}. - - -@item Pour des raisons d'ordre technique, certains objets ne peuvent être modifiés par -@code{\override}. Parmi ceux-là, les objets @code{NonMusicalPaperColumn} -et @code{PaperColumn}. La commande @code{\overrideProperty} sert à les modifier, de -façon similaire à @code{\once \override}, mais avec une syntaxe différente : - -@example -\overrideProperty -#"Score.NonMusicalPaperColumn" % Nom de l'objet -#'line-break-system-details % Nom de la propriété -#'((next-padding . 20)) % valeur -@end example - -Notez cependant que la commande @code{\override} peut tout de même être appliquée -à @code{NoteMusicalPaperColumn} et @code{PaperColumn} dans un bloc @code{\context}. - -@end itemize diff --git a/Documentation/fr/user/repeats.itely b/Documentation/fr/user/repeats.itely deleted file mode 100644 index db5b8853a2..0000000000 --- a/Documentation/fr/user/repeats.itely +++ /dev/null @@ -1,406 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 33ba8d40c3493011a4b39ab8b1369701f8013bd6 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - -@node Repeats -@section Repeats - -@lilypondfile[quote]{repeats-headword.ly} - -@cindex reprises -@cindex répétitions -La répétition est une notion essentielle en musique, et il existe de -nombreuses façons de mettre en œuvre et noter ce concept. LilyPond -prend en charge les types de répétition suivants : - -@table @code -@item volta -Le passage répété n'est pas développé , mais il est encadré par des -barres de reprises, et peut se terminer par plusieurs fins -alternatives --- ou @emph{volte} --- imprimées de gauche à droite sous -des crochets. Lorsque la répétition commence au début de la pièce, -aucune barre de reprise n'est gravée au début de la partition. Il -s'agit de la notation courante des reprises avec fins alternatives. - -@item unfold -La musique répétée est développée dans la partition autant de fois -qu'indiqué. Ceci est particulièrement utile pour de la musique -répétitive. - -@item percent -Des barres obliques ou signes de pourcentage indiquent la répétition -de temps ou de mesures, imprimés sous la forme de signes de -pourcentage. - -@item tremolo -Ce type permet de réaliser des trémolos sous forme de liens de croches. -@end table - -@menu -* Long repeats:: -* Other repeats:: -@end menu - -@node Long repeats -@subsection Long repeats - -Cette section présente la syntaxe des répétitions longues --- -c'est-à-dire plusieurs mesures. Ces répétitions peuvent prendre deux -formes : encadrées par des barres de reprises, ou bien développées -dans la partition. Les barres et autres signe de reprise peuvent être -contrôlés manuellement. - -@menu -* Repeat types:: -* Repeat syntax:: -* Manual repeat commands:: -@end menu - -@cindex barres de reprise -@cindex reprise -@cindex répétition avec barres de reprise -@cindex volta -@cindex fois, pre -@cindex première fois -@cindex seconde fois -@funindex \repeat - - -@node Repeat types -@unnumberedsubsubsec Repeat types - -On peut indiquer des répétitions des façons suivantes : - -@table @code -@item bar -baz -@end table - -@node Repeat syntax -@unnumberedsubsubsec Repeat syntax - -@cindex volta - -Tous les différents types de reprise se spécifient dans -LilyPond avec une même construction syntaxique, qui est : - - -@example -\repeat @var{type_de_la_reprise} @var{nombre_de_répétitions} @var{expression_à_répéter} -@end example - -On peut ajouter, pour indiquer une fin alternative : -@funindex \alternative -@example -\alternative @{ - @var{alternative1} - @var{alternative2} - @var{alternative3} - @dots{} -@} -@end example - -@noindent -chaque @var{alternative} étant une expression musicale. Si l'on donne -trop peu d'alternatives en regard du nombre de fois où le passage doit -être rejoué, la première alternative sera jouée plusieurs fois. - - -Les reprises courantes s'indiquent comme ceci : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c1 -\repeat volta 2 { c4 d e f } -\repeat volta 2 { f e d c } -@end lilypond - -Et avec des fins alternatives : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c1 -\repeat volta 2 {c4 d e f} -\alternative { {d2 d} {f f,} } -@end lilypond - -Il est possible de créer des répétitions avec une levée. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\new Staff { - \partial 4 e | - \repeat volta 4 { c2 d2 | e2 f2 | } - \alternative { { g4 g g e } { a a a a | b2. } } -} -@end lilypond - -@noindent -ou - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\new Staff { - \partial 4 - \repeat volta 4 { e | c2 d2 | e2 f2 | } - \alternative { { \partial 4*3 g4 g g } { a a a a | b2. } } -} -@end lilypond - - - -@funindex \repeatTie -Des liaisons de tenue peuvent être ajoutées à toute alternative : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c1 -\repeat volta 2 {c4 d e f ~ } -\alternative { {f2 d} {f\repeatTie f,} } -@end lilypond - - -On peut raccourcir les crochets indiquant les fins alternatives, -en définissant la propriété @code{voltaSpannerDuration}. Dans -l'exemple suivant, le crochet ne se prolonge que sur une mesure -à 3/4. - -@lilypond[verbatim,ragged-right,quote] -\relative c''{ - \time 3/4 - c c c - \set Staff.voltaSpannerDuration = #(ly:make-moment 3 4) - \repeat volta 5 { d d d } - \alternative { { e e e f f f } - { g g g } } -} -@end lilypond - -Si l'on souhaite à la fois terminer une ligne par une double barre et -débuter la ligne suivante avec une section reprise, on peut utiliser -@example -@dots{} \bar "||:" \break -\repeat volta 2 @{ @dots{} -@end example - -Consultez @ref{Bar lines} pour plus d'informations. - - -@seealso -Program reference: @rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, -@rinternals{VoltaRepeatedMusic}, et -@rinternals{UnfoldedRepeatedMusic}. - - -Exemples - -Les crochets précédant une reprise s'impriment d'ordinaire seulement -au-dessus de la portée du haut. On peut ajuster cela en déplaçant le -graveur @code{Volta_engraver} vers les contextes de portée -(@code{Staff}) qui doivent comporter ces crochets ; -voir @ref{Modifying context plug-ins}, et @rlsr{Repeats}. - - -@knownissues - -@cindex reprises ambigües - -Des reprises imbriquées telles que - -@example -\repeat @dots{} -\repeat @dots{} -\alternative -@end example - -@noindent -présentent une ambiguïté, dans la mesure où l'on ne sait à quelle -section @code{\repeat} attribuer la section @code{\alternative}. Pour -résoudre cette ambiguïté, il convient de toujours insérer la commande -@code{\alternative} à l'intérieur de la section @code{\repeat}. Il est -préférable, dans une telle situation, d'utiliser des accolades pour plus -de clarté. - -Lorsqu'une alternative commence, les informations de métrique sont -perdues, il faut donc les rappeler après une reprise, par exemple -en définissant @code{Score.measurePosition} ou en invoquant la commande -@code{\partial}. De même, aucune liaison (de tenue ou autre) -n'est répétée. - -Les crochets qui indiquent les alternatives ne sont pas alignés -verticalement. - - -@node Manual repeat commands -@unnumberedsubsubsec Manual repeat commands - -@funindex repeatCommands - -La propriété @code{repeatCommands} sert à contrôler la mise en forme des -reprises. On la définit par une suite de commandes de reprise Scheme. - -@table @asis -@item @code{start-repeat} -Pour imprimer une barre de reprise @code{|:} - -@item @code{end-repeat} -Pour imprimer une barre de reprise @code{:|} - -@item @code{(volta @var{texte})} -Pour imprimer un crochet indiquant une alternative. L'argument -@var{texte} mentionné dans le crochet peut être n'importe quelle chaîne -de caractères ou indication textuelle --- voir @ref{Formatting text}. -Attention cependant à changer la police, car la police employée par -défaut pour les chiffres ne contient aucun caractère alphabétique. - -@item @code{(volta #f)} -Pour terminer un crochet indiquant une alternative. -@end table - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -c4 - \set Score.repeatCommands = #'((volta "93") end-repeat) -c4 c4 - \set Score.repeatCommands = #'((volta #f)) -c4 c4 -@end lilypond - - -@seealso -Référence du programme : @rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, -@rinternals{VoltaRepeatedMusic}, et -@rinternals{UnfoldedRepeatedMusic}. - - -@node Other repeats -@subsection Other repeats - -@menu -* Tremolo repeats:: -* Tremolo subdivisions:: -* Measure repeats:: -@end menu - -@node Tremolo repeats -@unnumberedsubsubsec Tremolo repeats - -@cindex ligatures de trémolo -@cindex trémolo, ligatures de - -On peut placer une notation de trémolo entre deux notes, avec la -commande @code{\repeat} suivie du style trémolo : -@lilypond[quote,verbatim,ragged-right] -\new Voice \relative c' { - \repeat tremolo 8 { c16 d16 } - \repeat tremolo 4 { c16 d16 } - \repeat tremolo 2 { c16 d16 } -} -@end lilypond - - -On peut aussi indiquer un trémolo sur une seule note, qu'il faudra -alors laisser sans accolades. - -@lilypond[quote,verbatim,ragged-right] -\repeat tremolo 4 c'16 -@end lilypond - - -La subdivision des trémolos aboutit à un résultat semblable : voir -@ref{Tremolo subdivisions}. - - -@seealso -Dans ce manuel : @ref{Tremolo subdivisions}, @ref{Repeats}. - -Référence du programme : @rinternals{Beam}, @rinternals{StemTremolo}. - - -@node Tremolo subdivisions -@unnumberedsubsubsec Tremolo subdivisions - -@cindex trémolo, indication de -@funindex tremoloFlags - -Un trémolo peut être indiqué sur une seule note, en la faisant suivre -de deux points et d'un nombre : - -@code{note:}[@var{nombre}]. - -Le nombre en question correspond à la valeur de la subdivision ; -il doit être au moins de 8, auquel cas la hampe sera barrée par un -seul trait de ligature. Si ce nombre est omis, la dernière valeur --- -telle que mémorisée dans @code{tremoloFlags} --- sera utilisée. - -@lilypond[quote,ragged-right,verbatim,fragment] -c'2:8 c':32 | c': c': | -@end lilypond - - -@knownissues - -Les trémolos entrés de cette manière ne sont pas rendus dans -le fichier MIDI. - - -@seealso -Dans ce manuel : @ref{Tremolo repeats}. - -Référence du programme : @rinternals{StemTremolo}. - - -@node Measure repeats -@unnumberedsubsubsec Measure repeats - -@cindex percent repeats -@cindex measure repeats - -Le style de @qq{reprise en pourcent} sert à répéter une séquence de -notes. Elle sera imprimée une fois, puis remplacée par un symbole -spécial. Les séquences d'une ou deux mesures sont remplacées par un -symbole qui ressemble au symbole de pourcentage, tandis que les -séquences inférieures à une mesure sont remplacées par une barre -oblique. Toutes ces répétitions doivent être déclarées dans un contexte -@code{Voice}. - -@lilypond[quote,verbatim,ragged-right] -\new Voice \relative c' { - \repeat percent 4 { c4 } - \repeat percent 2 { c2 es2 f4 fis4 g4 c4 } -} -@end lilypond - -Les répétitions de plus de 2 mesures sont surmontées d'un compteur, -si l'on assigne @emph{vrai} (lettre @q{t}) à la propriété -@code{countPercentRepeats}. - -@lilypond[relative=2,fragment,quote,verbatim,ragged-right] -\new Voice { -\set countPercentRepeats = ##t - \repeat percent 4 { c1 } -} -@end lilypond - -Des symboles de pourcentage isolés peuvent aussi être obtenus, au -moyen d'un silence multi-mesures dont on modifie l'aspect : - -@lilypond[fragment,verbatim,quote] -\override MultiMeasureRest #'stencil - = #ly:multi-measure-rest::percent -R1 -@end lilypond - - -@seealso -Référence du programme : @rinternals{RepeatSlash}, -@rinternals{PercentRepeat}, @rinternals{DoublePercentRepeat}, -@rinternals{DoublePercentRepeatCounter}, -@rinternals{PercentRepeatCounter}, -@rinternals{PercentRepeatedMusic}. - diff --git a/Documentation/fr/user/rhythms.itely b/Documentation/fr/user/rhythms.itely deleted file mode 100644 index b38507feb4..0000000000 --- a/Documentation/fr/user/rhythms.itely +++ /dev/null @@ -1,2074 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 33ba8d40c3493011a4b39ab8b1369701f8013bd6 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Frédéric Chiasson -@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude - -@node Rhythms -@section Rhythms - -@lilypondfile[quote]{rhythms-headword.ly} - -Cette section traite du rythme : durées, silences, barres de ligature -et de mesure. - -@menu -* Writing rhythms:: -* Writing rests:: -* Displaying rhythms:: -* Beams:: -* Bars:: -* Special rhythmic concerns:: -@end menu - - -@node Writing rhythms -@subsection Writing rhythms - -@menu -* Durations:: -* Tuplets:: -* Scaling durations:: -* Ties:: -@end menu - -@node Durations -@unnumberedsubsubsec Durations - -@cindex durées -@funindex \longa -@funindex \breve -@funindex \maxima - -Dans les modes de notes, d'accords et de paroles, les durées sont -écrites avec des chiffres et des points : les durées sont indiquées par -leur valeur fractionnaire par rapport à la durée d'une ronde. Une -noire, par exemple, qui équivaut à un 1/4 de ronde --- @qq{quarter note} -en anglais --- s'écrit @code{4}, alors qu'une blanche --- -@qq{half-note}, 1/2 ronde --- s'écrit @code{2}. Pour des notes plus -longues qu'une ronde, vous devrez utiliser les commandes @code{\longa} -pour une longue, et @code{\breve} pour une brève, aussi appelée carrée. - -@example -c'\breve -c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 -r\longa r\breve -r1 r2 r4 r8 r16 r32 r64 r64 -@end example - -@lilypond[quote] -\score { -\relative c'' { - a\breve*1/2 \autoBeamOff - a1 a2 a4 a8 a16 a32 a64 a64 - \bar "empty" - \break - r\longa*1/4 r\breve *1/2 - r1 r2 r4 r8 r16 r32 r64 r64 - } - \layout { - ragged-right = ##t - indent=0\mm - \context { - \Score - \remove "Bar_number_engraver" - } - \context { - \Staff - \remove "Clef_engraver" - \override StaffSymbol #'transparent = ##t - \override TimeSignature #'transparent = ##t - \override BarLine #'transparent = ##t - \consists "Pitch_squash_engraver" - } - } -} -@end lilypond - -Si la durée n'est pas précisée, elle est alors assimilée à la durée -précédente. La valeur par défaut pour la première note est une noire -(4). - -@lilypond[quote,ragged-right,verbatim,fragment] -{ a a a2 a a4 a a1 a } -@end lilypond - - -@funindex . - -Pour obtenir des notes pointées, ajoutez simplement un point -(@samp{.}) au chiffre. Les notes doublement pointées sont créées de -la même façon. - -@lilypond[quote,ragged-right,fragment,verbatim] -a'4 b' c''4. b'8 a'4. b'4.. c''8. -@end lilypond - - -@predefined -Les points sont normalement haussés pour éviter les lignes de portées, -sauf dans certaines polyphonies. Les commandes suivantes peuvent être -utilisées pour demander manuellement une orientation particulière des -points. - -@funindex \dotsUp -@code{\dotsUp}, -@funindex \dotsDown -@code{\dotsDown}, -@funindex \dotsNeutral -@code{\dotsNeutral}. -@endpredefined - - -@seealso -Référence du programme : @rinternals{Dots}, @rinternals{DotColumn}. - - -@node Tuplets -@unnumberedsubsubsec Tuplets - -@cindex nolets -@cindex triolets -@funindex \times - -Les nolets --- triolets, quintolets, etc. --- sont obtenus en -multipliant toutes les durées d'une expression musicale par une -fraction. - -@example -\times @var{fraction} @var{expr_musique} -@end example - -@noindent -La durée de @var{expr_musique} sera multipliée par la fraction. Le -dénominateur de la fraction sera imprimé au-dessus des notes, parfois -avec un crochet. Le nolet le plus courant est le triolet, dans lequel 3 -notes ont la durée de 2, et où les notes durent donc 2/3 de leur valeur -écrite. - -@lilypond[quote,ragged-right,fragment,verbatim] -g'4 \times 2/3 {c'4 c' c'} d'4 d'4 -@end lilypond - -Les nolets peuvent être imbriqués ; par exemple, - -@lilypond[fragment,ragged-right,verbatim,relative=2] -\override TupletNumber #'text = #tuplet-number::calc-fraction-text -\times 4/6 { - a4 a - \times 3/5 { a a a a a } -} -@end lilypond - - -@predefined -@funindex \tupletUp -@code{\tupletUp}, -@funindex \tupletDown -@code{\tupletDown}, -@funindex \tupletNeutral -@code{\tupletNeutral}. -@endpredefined - - -@commonprop - -@funindex tupletNumberFormatFunction -@cindex nolets, formatage - -La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de -chaque crochet. Avec elle, vous pouvez faire plusieurs nolets en ne -tapant @code{\times} qu'une fois, ce qui évite une longue saisie. Dans -le prochain exemple, deux triolets sont imprimés avec une seule fonction -@code{\times}. - -@lilypond[quote,fragment,relative=2,ragged-right,verbatim] -\set tupletSpannerDuration = #(ly:make-moment 1 4) -\times 2/3 { c8 c c c c c } -@end lilypond - -@noindent -Pour plus d'information sur @code{make-moment}, voir -@ref{Time administration}. - -L'apparence du chiffre est déterminée par la propriété @code{text} dans -@code{TupletNumber}. La valeur par défaut imprime seulement le -dénominateur, mais si elle est définie par la fonction -@code{tuplet-number::calc-fraction-text}, la fraction entière -@var{num}:@var{den} sera imprimée à la place. - -Pour éviter d'imprimer les chiffres des nolets, utilisez - -@lilypond[quote,fragment,relative=2,ragged-right,verbatim] -\times 2/3 { c8 c c } \times 2/3 { c8 c c } -\override TupletNumber #'transparent = ##t -\times 2/3 { c8 c c } \times 2/3 { c8 c c } -@end lilypond - -Utilisez la fonction @code{\tweak} pour définir une priorité dans le cas -de nolets imbriqués débutant au même moment. Dans cet exemple, -@code{\tweak} spécifie un texte sous forme de fraction pour le -@code{TupletNumber} externe et de dénominateur pour les trois triolets -internes. - -@lilypond[quote,ragged-right,verbatim] -\new Staff { - \tweak #'text #tuplet-number::calc-fraction-text - \times 4/3 { - \tweak #'text #tuplet-number::calc-denominator-text - \times 2/3 { c'8[ c'8 c'8] } - \times 2/3 { c'8[ c'8 c'8] } - \times 2/3 { c'8[ c'8 c'8] } - } -} -@end lilypond - -Ici, @code{\tweak} et @code{\override} agissent de concert pour -spécifier le positionnement du @code{TupletBracket}. Le premier -@code{\tweak} positionne le @code{TupletBracket} du nolet externe au -dessus de la portée. Le second @code{\tweak} positionne le -@code{TupletBracket} du premier triolet interne au dessous de la -portée. Notez que cette paire de fonctions @code{\tweak} n'affecte -que le triolet extérieur et le premier des trois triolets imbriqués -parce qu'ils commencent au même instant musical. Nous utilisons -@code{\override} de manière tout à fait normale, pour forcer le -positionnement du @code{TupletBracket} des deuxième et troisième -triolets en dessous de la portée. - -@lilypond[quote,ragged-right,verbatim] -\new Staff { - \tweak #'text #tuplet-number::calc-fraction-text - \tweak #'direction #up - \times 4/3 { - \tweak #'direction #down - \times 2/3 { c'8[ c'8 c'8] } - \override TupletBracket #'direction = #down - \times 2/3 { c'8[ c'8 c'8] } - \times 2/3 { c'8[ c'8 c'8] } - } -} -@end lilypond - -Les crochets de nolets peuvent aller jusqu'aux prémisses de la mesure -suivante, ou à la prochaine note. - -@lilypond[ragged-right] -\new RhythmicStaff { - \set tupletFullLength = ##t - \time 4/4 - \times 4/5 { - c4 c1 - } - \set tupletFullLengthNote = ##t - \time 2/4 - \times 2/3 { - c4 c c - } - \time 3/4 - c4 -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{TupletBracket}, -@rinternals{TupletNumber}, @rinternals{TimeScaledMusic}. - - -@node Scaling durations -@unnumberedsubsubsec Scaling durations - -Vous pouvez altérer la durée des notes en leur joignant une fraction -@var{N/M}, donnant @q{@code{*}@var{N/M}} --- ou @q{@code{*}@var{N}} si -@var{M=1}. Ceci n'affectera pas l'apparence des notes ou silences -produits. - -Dans l'exemple suivant, les trois premières notes prennent exactement -deux temps, mais aucun triolet n'est imprimé. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\time 2/4 -a4*2/3 gis4*2/3 a4*2/3 -a4 a4 a4*2 -b16*4 c4 -@end lilypond - - -@seealso -Dans ce manuel : @ref{Tuplets}. - - -@node Ties -@unnumberedsubsubsec Ties - -@cindex liaison de prolongation -@funindex ~ - -Une liaison de tenue (ou de prolongation) relie deux notes adjacentes de -même hauteur. Dans les faits, elle prolonge la durée d'une note, et ne -doit donc pas être confondue avec les liaisons d'articulation ou de -phrasé. Une liaison de tenue est indiquée au moyen d'un tilde @samp{~}. - -@lilypond[quote,ragged-right,fragment,verbatim] -e' ~ e' ~ -@end lilypond - - -Quand une liaison de tenue se trouve entre deux accords, toutes les -notes de même hauteur entre ces deux accords sont reliées. S'il n'y en -a aucune, aucune liaison n'est créée. Il est également possible de lier -partiellement deux accords, en mettant les liaisons à l'intérieur des -accords. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] - -@end lilypond - - -Une liaison de tenue est un moyen parmi d'autres pour prolonger la durée -d'une note, tout comme les points. L'exemple suivant montre deux -manières de matérialiser exactement la même idée : - - -@lilypond[quote,fragment,ragged-right] -\time 3/4 c'2. c'2 ~ c'4 -@end lilypond - -@noindent -Les liaisons de tenues sont utilisées soit lorsque la note dépasse de la -mesure, soit quand les points ne suffisent pas à donner la bonne durée. -Lorsque l'on utilise ces liaisons, les valeurs rythmiques les plus -longues doivent s'aligner sur les subidivisions de la mesure, comme ici : - -@c KEEP LY -@lilypond[fragment,quote,ragged-right] -\relative { - r8^"oui" c8 ~ c2 r4 | r8^"non" c2 ~ c8 r4 -} -@end lilypond - - -Lorsque l'on doit lier de nombreuses notes sur plusieurs mesures, il -devient plus facile d'avoir recours à la division automatique des notes ---- voir @ref{Automatic note splitting}. Ce procédé divise -automatiquement les notes trop longues, et les lie par-delà les barres -de mesure. - -@funindex \repeatTie -@cindex liaison de prolongation, répétition -@cindex reprises avec alternatives et liaisons de prolongation - -Lorsqu'une mesure de seconde fois après une reprise commence sur une -note liée, la liaison doit être répétée. C'est à cela que sert la -commande @code{\repeatTie} : - -@lilypond[fragment,quote,ragged-right,relative=2] -r \repeatTie -@end lilypond - -@cindex laissez vibrer -@cindex liaison, laissez vibrer -@funindex \laissezVibrer - -Les liaisons @qq{Laissez vibrer} (L.V.) sont utilisées pour le piano, la -harpe, et certains instruments de percussion. Elles indiquent à -l'instrumentiste de laisser sonner la note ou l'accord au lieu de -l'étouffer. Cet effet s'obtient avec la commande @code{\laissezVibrer}. - -@lilypond[fragment,ragged-right,verbatim,relative=1] -\laissezVibrer -@end lilypond - -@commonprop - -Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans ce -cas, les notes liées ne sont pas toutes consécutives. Il faut alors -assigner à la propriété @code{tieWaitForNote} la valeur @emph{vrai} -(@q{t} pour @q{true}). Cette même méthode peut servir, par exemple, à -lier un trémolo à un accord. - -@lilypond[fragment,verbatim,relative=1,ragged-right,quote] -\set tieWaitForNote = ##t -\grace { c16[~ e~ g]~ } 2 -\repeat tremolo 8 { c32~ c'~ } 1 -e8~ c~ a~ f~ 2 -@end lilypond - -Il est possible de graver manuellement les liaisons de tenue, en -modifiant la propriété @code{tie-configuration}. Pour chaque paire, le -premier nombre indique la distance à la portée, en espaces de portée, et -le second la direction (1 pour haut, @minus{}1 pour bas). - -@lilypond[fragment,verbatim,relative=1,ragged-right,quote] -2~ | -\override TieColumn #'tie-configuration = - #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1)) -~ | -@end lilypond - - -@predefined -@funindex \tieUp -@code{\tieUp}, -@funindex \tieDown -@code{\tieDown}, -@funindex \tieNeutral -@code{\tieNeutral}, -@funindex \tieDotted -@code{\tieDotted}, -@funindex \tieDashed -@code{\tieDashed}, -@funindex \tieSolid -@code{\tieSolid}. -@endpredefined - - -@seealso -Glossaire musical : -@rglos{tie}, -@rglos{laissez vibrer}. - -Dans ce manuel : @ref{Automatic note splitting}. - -Référence du programme : -@rinternals{Tie}, -@rinternals{TieColumn}, -@rinternals{LaissezVibrerTie}, -@rinternals{LaissezVibrerTieColumn}. - - -@knownissues - -Un changement de portée, lorsqu'une liaison de tenue est active, ne -peut produire une liaison oblique. - -Le changement de clé ou d'octave pendant une liaison de tenue produit un -résultat indéfini. Dans ces cas-là, il est préférable d'utiliser un -legato. - - -@node Writing rests -@subsection Writing rests - -@menu -* Rests:: -* Invisible rests:: -* Full measure rests:: -@end menu - -@node Rests -@unnumberedsubsubsec Rests -@cindex silences - -@funindex \rest -@funindex r - -Les silences sont écrits comme des notes avec le nom de note @code{r}. - -@lilypond[fragment,quote,ragged-right,verbatim] -r1 r2 r4 r8 -@end lilypond - -Les pauses d'une mesure complète, qui sont placées au centre de la -mesure, doivent être entrées comme des mesures de silence. Elles -peuvent être utilisées pour une seule mesure comme pour plusieurs, et -leur utilisation est expliquée dans la section -@ref{Full measure rests}. - -Pour spécifier explicitement la position verticale d'un silence, écrivez -une note suivie de @code{\rest}. Un silence sera placé à la position où -serait imprimée la note. - -@lilypond[fragment,quote,ragged-right,verbatim] -a'4\rest d'4\rest -@end lilypond - -@noindent -Cela rend plus facile la mise en place de la musique polyphonique, -puisque le formateur automatique de collision des silences laissera ces -silences tranquilles. - - -@seealso -Référence du programme : @rinternals{Rest}. - - -@node Invisible rests -@unnumberedsubsubsec Invisible rests - -@cindex sauts de durée -@cindex silences invisibles -@cindex silences d'espacement -@funindex \skip -@funindex s - -Un silence invisible --- que l'on pourrait appeler un @qq{saut} --- -peut être entré comme une note avec le nom de note `@samp{s}' ou avec -@code{\skip @var{durée}} - -@lilypond[fragment,quote,ragged-right,verbatim,relative=2] -a4 a4 s4 a4 \skip 1 a4 -@end lilypond - -La syntaxe @code{s} est seulement disponible pour les modes d'entrée -de notes et d'accords. Dans d'autres situations, pour l'entrée de -paroles par exemple, vous devrez utiliser la commande @code{\skip}. - -@lilypond[quote,ragged-right,verbatim] -<< - \relative { a'2 a2 } - \new Lyrics \lyricmode { \skip 2 bla2 } ->> -@end lilypond - -La commande de saut génère simplement une case musicale vide. Elle ne -produit rien sur la partition, pas même un symbole transparent. Le code -de saut @code{s} crée tout de même une @rinternals{Staff} et une -@rinternals{Voice} lorsque nécessaire, tout comme les commandes de -note et de silence. Ainsi, le code suivant aboutit à une portée vide. - -@lilypond[quote,ragged-right,verbatim] -{ s4 } -@end lilypond - -Le fragment @code{@{ \skip 4 @} } produirait une page vide. - - -@seealso -Référence du programme : @rinternals{SkipMusic}. - - -@node Full measure rests -@unnumberedsubsubsec Full measure rests - -@cindex mesures à compter -@cindex mesure entière de silence -@cindex Silences, multi-mesures -@cindex Silences, mesure entière -@cindex une pause par mesure -@funindex R - -Un silence valant une ou plusieurs mesures entières s'entre avec un -@samp{R} majuscule. Ceci ne peut être utile que pour une mesure complètement -vide, et pour générer des parties séparées : ce silence sera alors -répété sur autant de mesures que nécessaire, ou bien imprimé une seule -fois. La répétition est contrôlée par la propriété -@code{Score.skipBars}. Au cas où ce commutateur est défini comme -vrai (lettre @code{##t} pour @q{true}), les mesures vides ne seront pas répétées, et le nombre exact de -mesures sera ajouté. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 4/4 r1 | R1 | R1*2 \time 3/4 R2. \time 2/4 R2 \time 4/4 -\set Score.skipBars = ##t R1*17 R1*4 -@end lilypond - -Le @code{1} de @code{R1} est le même que celui utilisé pour la durée -des notes. Vous devrez donc, si le morceau n'est pas à 4/4, stipuler -un autre durée, qui pourra contenir des points d'augmentation ou être -libellé sous forme de fraction : - -@lilypond[quote,ragged-right,fragment,verbatim] -\set Score.skipBars = ##t -\time 3/4 -R2. | R2.*2 -\time 13/8 -R1*13/8 -R1*13/8*12 | -\time 10/8 R4*5*4 | -@end lilypond - -Un @code{R} qui s'étend sur une seule mesure s'imprime tantôt comme -une pause, tantôt comme une brève, et sera centré sur la mesure -quelle que soit la métrique. - -Dans le cas où ce silence ne dure que quelques mesures, LilyPond -imprime sur la portée des @qq{ silences d'église }, simple suite de -rectangles. La propriété @code{MultiMeasureRest.expand-limit} permet -d'obtenir un silence unique. - -@lilypond[quote,ragged-right,fragment,verbatim] -\set Score.skipBars = ##t -R1*2 | R1*5 | R1*9 -\override MultiMeasureRest #'expand-limit = 1 -R1*2 | R1*5 | R1*9 -@end lilypond - -@cindex texte et silence multi-mesures -@cindex script et silence multi-mesures -@cindex point d'orgue et silence multi-measures - -Vous pouvez aussi ajouter du texte à un silence multi-mesures en utilisant -la syntaxe @var{note}-@code{markup} (cf. @ref{Formatting text}). La -variable @code{\fermataMarkup} permet d'ajouter un point d'orgue. - -@lilypond[quote,ragged-right,verbatim,fragment] -\set Score.skipBars = ##t -\time 3/4 -R2.*10^\markup { \italic "ad lib." } -R2.^\fermataMarkup -@end lilypond - -Attention ! c'est @code{MultiMeasureRestText} qui créera le texte, et -non @code{TextScript}. - -@lilypond[quote,ragged-right,verbatim,fragment] -\override TextScript #'padding = #5 -R1^"low" -\override MultiMeasureRestText #'padding = #5 -R1^"high" -@end lilypond - -Pour aligner votre texte sur le début de la mesure, rattachez-le à un -silence invisible de longueur zéro comme ceci : - -@example -s1*0^"Allegro" -R1*4 -@end example - - -@seealso -Référence du programme : @rinternals{MultiMeasureRestMusic}, -@rinternals{MultiMeasureRest}. - -L'objet de rendu @rinternals{MultiMeasureRestNumber} traite les -nombres, et @rinternals{MultiMeasureRestText} le texte ajouté par -l'utilisateur. - - -@knownissues - -Vous ne pouvez pas utiliser de doigtés (p.ex. @code{R1-4}) pour -positionner des nombres au dessus d'un silence multi-mesures, ni -modifier la hauteur. - -@cindex condenser les silences - -Condenser plusieurs silences en un unique silence multi-mesures ne peut -être automatisé. Les silences multi-mesures peuvent générer des -collisions avec d'autres silences. - -Pensez à indiquer explicitement la durée de la note qui suit un -silence multi-mesures, car elle sera par défaut égale à la durée totale -des mesures à compter. Ainsi, dans l'exemple ci-après, les deux do -dièses vaudront chacun quatre mesures à 4/4. -@example -R1*4 cis cis -@end example -Lorsque @code{skipBars} est activé, le résultat semblera correct, mais -la numérotation des mesures sera suspendue. - - -@node Displaying rhythms -@subsection Displaying rhythms - -@menu -* Time signature:: -* Upbeats:: -* Unmetered music:: -* Polymetric notation:: -* Automatic note splitting:: -* Showing melody rhythms:: -@end menu - -@node Time signature -@unnumberedsubsubsec Time signature - -@cindex chiffrage de mesure -@cindex chiffre indicateur de mesure -@cindex métrique -@funindex \time - -Le chiffre de mesure indique le mètre d'une pièce : une alternance -régulière de temps forts et de temps faibles. Il est indiqué par une -fraction au début de la portée. - -Le chiffre de mesure est réglé par la commande @code{\time}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 2/4 c'2 \time 3/4 c'2. -@end lilypond - -@commonprop - -Le symbole imprimé peut être modifié avec la propriété @code{style}. -En la réglant sur @code{#'()}, une fraction sera utilisée pour les -chiffres de mesure 4/4 et 2/2. - -@lilypond[fragment,quote,ragged-right,verbatim] -\time 4/4 c'1 -\time 2/2 c'1 -\override Staff.TimeSignature #'style = #'() -\time 4/4 c'1 -\time 2/2 c'1 -@end lilypond - -Il y a bien d'autres options pour sa mise en place. Voir @ref{Ancient time -signatures} pour plus d'exemples. - -@code{\time} définit les propriétés @code{timeSignatureFraction}, -@code{beatLength} et @code{measureLength} dans le contexte -@code{Timing}, qui en principe est assimilé à @rinternals{Score}. La -propriété @code{measureLength} détermine où des barres de mesure doivent -être insérées, et comment les groupements de notes doivent être gérés. -La modification de la valeur de @code{timeSignatureFraction} donne -également lieu à l'impression d'un symbole. - -Plus d'options sont accessibles au moyen de la fonction Scheme -@code{set-time-signature}. De concert avec le -@rinternals{Measure_grouping_engraver}, elle crée les signes de -@rinternals{MeasureGrouping}, qui facilitent la lecture de musiques -modernes, complexes rythmiquement. Dans l'exemple suivant, les mesures -à 9/8 sont subdivisées en @code{(2 2 2 3)}, ce qui est donné comme -argument à la commande @code{set-time-signature}, en troisième position. - -@lilypond[quote,ragged-right,verbatim] -\score { - \relative c'' { - #(set-time-signature 9 8 '(2 2 2 3)) - g8[ g] d[ d] g[ g] a8[( bes g]) | - #(set-time-signature 5 8 '(3 2)) - a4. g4 - } - \layout { - \context { - \Staff - \consists "Measure_grouping_engraver" - } - } -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{TimeSignature} et -@rinternals{Timing_translator}. - -Exemples : @rlsr{Rhythms}. - - -@knownissues - -Le groupement automatique des ligatures n'utilise pas les groupements -spécifiés par @code{set-time-signature}. - - -@node Upbeats -@unnumberedsubsubsec Upbeats - -@cindex anacrouse -@cindex levée -@cindex mesure incomplète -@funindex \partial - - -Les mesures incomplètes, telles que les anacrouses ou levées, doivent -être entrées avec la commande - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\partial 16*5 c16 cis d dis e | a2. c,4 | b2 -@end lilypond - - -La syntaxe de cette commande est - -@example -\partial @var{durée} -@end example - -@code{durée} étant la valeur rythmique devant être ajoutée avant la -mesure suivante. - -Le programme traduit cette commande en - -@example -\set Timing.measurePosition = -@var{durée} -@end example - - -La propriété @code{measurePosition} contient un nombre rationnel qui -indique, à ce point précis, où l'on en est de la mesure. Notez qu'il -peut s'agir d'un nombre négatif ; @code{\partial 4} signifie, pour le -programme : @qq{Dans cette mesure, il reste juste une noire}. - - -@knownissues - -Cette commande ne prend pas en compte les notes d'ornement ou -appoggiatures au début de la musique. Lorsqu'un morceau commence par une -levée et avec des petites notes, la commande @code{\partial} devrait être -placée après celles-ci. - -@lilypond[verbatim,quote,ragged-right,relative,fragment] -\grace f16 -\partial 4 -g4 -a2 g2 -@end lilypond - -@code{\partial} n'est destiné à être utilisé qu'en début de pièce. -Si on l'utilise ailleurs qu'au début, des messages d'erreurs peuvent -s'afficher. - - -@node Unmetered music -@unnumberedsubsubsec Unmetered music - -@cindex cadence -@funindex \cadenzaOn -@funindex \cadenzaOff - - -Les barres de mesure et les numéros de mesure sont calculés -automatiquement, ce qui n'est pas souhaitable dans le cas d'une musique -non mesurée --- les cadences, par exemple. Les commandes -@code{\cadenzaOn} et @code{\cadenzaOff} permettent de désactiver et de -rétablir la métrique automatique. - -@lilypond[verbatim,quote,ragged-right,relative=2,fragment] -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - - -@knownissues - -LilyPond ne change de ligne ou de page qu'au niveau des barres de -mesure. Si votre musique non mesurée dure plus d'une ligne, il vous -faudra insérer des barres de mesure invisibles, pour indiquer à quels -endroit un saut de ligne peut intervenir. - -@example -\bar "" -@end example - - -@node Polymetric notation -@unnumberedsubsubsec Polymetric notation - -@cindex métrique composite -@cindex composite, métrique -@cindex métrique polymétrique -@cindex polymétrie - -LilyPond ne gère pas les métriques composites de manière explicite, -mais on peut contourner ce problème. Dans l'exemple suivant, -l'indicateur de métrique est obtenu grâce à une étiquette textuelle. -Cette étiquette vient s'insérer dans l'objet graphique (@emph{grob}) -@rinternals{TimeSignature}. - -@lilypond[verbatim,ragged-right] -% Create 9/8 split into 2/4 + 5/8 -tsMarkup = \markup { - \override #'(baseline-skip . 2) \number { - \column { "2" "4" } - \vcenter "+" - \bracket \column { "5" "8" } - } -} - -{ - \override Staff.TimeSignature #'stencil = - #ly:text-interface::print - \override Staff.TimeSignature #'text = #tsMarkup - \time 9/8 - c'2 \bar ":" c'4 c'4. - c'2 \bar ":" c'4 c'4. -} -@end lilypond - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - -Il arrive aussi que chaque portée ait sa propre métrique. Vous y -parviendrez en déplaçant le @rinternals{Timing_translator} dans le -contexte @rinternals{Staff}. - -@example -\layout @{ - \context @{ \Score - \remove "Timing_translator" - \remove "Default_bar_line_engraver" - @} - \context @{ - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - @} - -@} -@end example - - -Maintenant, chacune des portées dispose de sa propre métrique. -@example -<< - \new Staff @{ - \time 3/4 - c4 c c | c c c | - @} - \new Staff @{ - \time 2/4 - c4 c | c c | c c - @} - \new Staff @{ - \time 3/8 - c4. c8 c c c4. c8 c c - @} ->> -@end example - -@lilypond[quote,ragged-right] -\layout{ - \context{ - \Score - \remove "Timing_translator" - \remove "Default_bar_line_engraver" - } - \context{ \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } -} - -\relative c' << - \new Staff { - \time 3/4 - c4 c c | c c c | - } - \new Staff { - \time 2/4 - c4 c | c c | c c - } - \new Staff { - \time 3/8 - c4. c8 c c c4. c8 c c - } ->> -@end lilypond - - -Une autre forme de notation polymétrique consiste dans le fait que des -notes aient une durée relative différente selon la portée. - -Vous pouvez créer une telle notation en définissant une métrique -commune à toutes les portées, que vous proratiserez manuellement -selon le cas en utilisant @code{timeSignatureFraction} pour obtenir la -division adéquate pour chaque portée. Les durées, dans chacune des -portées, seront alors échelonnées par rapport à la métrique commune. -L'échelle de représentation se règle avec @code{\scaleDurations} --- -qui fonctionne comme @code{\times}, sans toutefois créer de crochet. -La syntaxe appropriée est : -@example -\scaleDurations #'(@var{numérateur} . @var{dénominateur}) @var{exprmusicale} -@end example - - -L'exemple suivant utilise parallèlement des mesures à 3/4, 9/8 et -10/8. Pour la deuxième portée, les durées sont multipliées par 2/3, -de telle sorte que @w{2/3 * 9/8 = 3/4} ; pour la troisième, elles sont -multipliées par 3/5, de telle sorte que @w{3/5 * 10/8 = 3/4}. - -@lilypond[quote,ragged-right,verbatim,fragment] -\relative c' { << - \new Staff { - \time 3/4 - c4 c c | c c c | - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(9 . 8) - \scaleDurations #'(2 . 3) - \repeat unfold 6 { c8[ c c] } - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(10 . 8) - \scaleDurations #'(3 . 5) { - \repeat unfold 2 { c8[ c c] } - \repeat unfold 2 { c8[ c] } - | c4. c4. \times 2/3 { c8 c c } c4 - } - } ->> } -@end lilypond - - -@seealso -Exemples : @rlsr{Rhythms}. - - -@knownissues - -L'utilisation de métriques différentes en parallèle entraine un -alignement vertical. De ce fait, les barres de mesure ont tendance à -fausser l'espacement régulier. - - -@node Automatic note splitting -@unnumberedsubsubsec Automatic note splitting - -On peut convertir automatiquement les notes longues en notes liées. Il -faut pour cela remplacer le graveur @rinternals{Note_heads_engraver} -par le graveur @rinternals{Completion_heads_engraver}. Dans les -exemples suivants, les notes dépassant de la mesure sont divisées et -liées. - -@lilypond[quote,fragment,verbatim,relative=1,line-width=12\cm] -\new Voice \with { - \remove "Note_heads_engraver" - \consists "Completion_heads_engraver" -} { - c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 -} -@end lilypond - -Ce graveur divise toutes les notes qui sortent de la mesure, et insère -des liaisons de prolongation. Une utilisation posible consiste à -déboguer des partitions complexes : si les mesures ne sont pas -entièrement remplies, alors les liaisons de prolongation montrent -exactement la durée des décalages de mesure. - -Si vous voulez permettre un saut de ligne aux barres de mesure où -@rinternals{Completion_heads_engraver} divise les notes, vous devez -aussi enlever @rinternals{Forbid_line_break_engraver}. - - -@knownissues - -Bien que toutes les durées --- particulièrement celles contenant des -nolets --- ne puissent pas être représentées exactement avec des notes -normales et des points, le graveur n'insèrera pas de nolets. - -@code{Completion_heads_engraver} affecte seulement les notes, il ne -divise pas les silences. - -@seealso -Référence du programme : @rinternals{Completion_heads_engraver}. - - -@node Showing melody rhythms -@unnumberedsubsubsec Showing melody rhythms - -Au moyen d'une portée rythmique -- @q{rhythmic staff} en anglais -- on -peut montrer seulement le rythme d'une mélodie : toutes les notes sont -ramenées à la même hauteur, sur une portée d'une seule ligne. - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -\new RhythmicStaff { - \time 4/4 - c4 e8 f g2 | r4 g r2 | g1:32 | r1 | -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{RhythmicStaff}. - - -@node Beams -@subsection Beams - -@menu -* Automatic beams:: -* Setting automatic beam behavior:: -* Manual beams:: -* Feathered beams:: -@end menu - -@node Automatic beams -@unnumberedsubsubsec Automatic beams - -LilyPond décide automatiquement de la manière de grouper les notes et -d'imprimer les ligatures. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\time 2/4 c8 c c c \time 6/8 c c c c8. c16 c8 -@end lilypond - -Lorsque ce comportement automatisé n'est pas satisfaisant, on peut -définir des groupements manuellement --- voir section suivante --- ou -personnaliser les groupements automatiques --- voir @ref{Setting -automatic beam behavior}. - -La commande @code{\noBeam} peut servir à empêcher des notes -individuelles d'être rattachées aux autres. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\time 2/4 c8 c\noBeam c c -@end lilypond - - -@seealso -Référence du programme : @rinternals{Beam}. - - -@node Setting automatic beam behavior -@unnumberedsubsubsec Setting automatic beam behavior - -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) -@cindex ligatures automatiques, réglage -@cindex réglage des ligatures automatiques - -@c [TODO: use \applyContext] - -Dans les métriques courantes, les ligatures automatiques peuvent commencer -sur n'importe quelle note, mais ne peuvent se terminer qu'à certains points précis -dans la mesure : sur une pulsation, ou après toute durée spécifiée par les propriétés -nommées @code{autoBeamSettings}. Ces propriétés consistent en une liste de règles -relatives au début ou à la fin des ligatures. Par défaut, elles sont définies dans -le fichier -@file{scm/@/auto@/-beam@/.scm}. - -On peut ajouter à cette liste une nouvelle règle, au moyen de la commande -@example -#(override-auto-beam-setting '(extrémité p q n m) a b [contexte]) -@end example - -@itemize @bullet - -@item @code{extrémité} désigne le début (@code{begin}) ou la fin (@code{end}) de la ligature. - -@item @code{p/q} désigne la valeur rythmique de la note que l'on veut affecter, ou de la -plus brève des notes concernées. Si cette règle doit s'appliquer à toutes les ligatures, -remplacez @code{p} et @code{q} par des étoiles @qq{@code{*}}. - - -@item @code{n/m} est le chiffre de mesure dans lequel la règle doit -s'appliquer. Si celle-ci doit s'appliquer dans toutes les métriques, -remplacez @code{n} et @code{m} par des étoiles @qq{@code{*}}. - -@item @code{a/b} est l'emplacement, dans la mesure, auquel les ligatures doivent -débuter ou s'achever (suivant la valeur @q{extrémité} que nous venons de voir). - - -@item @code{contexte} est un argument facultatif, qui détermine le contexte dans lequel -la règle doit s'appliquer. Par défaut, il s'agit de @code{'Voice}. -@code{#(score-override-auto-beam-setting '(A B C D) E F)} équivaut à -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. - -@end itemize - -Par exemple, si l'on veut que les ligatures s'achèvent toujours après la première noire : - - -@example -#(override-auto-beam-setting '(end * * * *) 1 4) -@end example - -On peut obliger une règle de ligatures à ne s'appliquer qu'à des groupes dont la note -la plus brève est d'une valeur précise : - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 2/4 -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -On peut obliger une règle de ligatures à ne s'appliquer que pour un chiffre de mesure -précis : - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 5/8 -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d -@end lilypond - -Enfin, on peut désactiver une règle de ligatures au moyen du réglage suivant : - -@example -#(revert-auto-beam-setting '(extrémité p q n m) a b [contexte]) -@end example - -@noindent -@code{extrémité}, @code{p}, @code{q}, @code{n}, @code{m}, @code{a}, @code{b} et @code{contexte} -étant les mêmes que plus haut. Il est même possible de désactiver des règles que l'on n'a pas -explicitement créées : les règles par défaut, qui se trouvent dans le fichier @file{scm/@/auto@/-beam@/.scm}. - - - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 4/4 -a16 a a a a a a a a a a a a a a a -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -La commande @code{revert-auto-beam-setting} requiert exactement les mêmes arguments -que la règle d'origine. En d'autres termes, les étoiles ne seront pas prises en compte ici. - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % ceci ne désactive pas la règle ! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % ceci marche -a a a a -@end lilypond - - - -@c TODO: old material -- not covered by above stuff, I think. -Si, dans une mesure à 5/4, l'on veut que les ligatures soient regroupées temps par temps, -il est nécessaire d'indiquer toutes les terminaisons de ligatures. -@example -#(override-auto-beam-setting '(end * * * *) 1 4 'Staff) -#(override-auto-beam-setting '(end * * * *) 1 2 'Staff) -#(override-auto-beam-setting '(end * * * *) 3 4 'Staff) -#(override-auto-beam-setting '(end * * * *) 5 4 'Staff) -@dots{} -@end example - -La même syntaxe peut servir à définir les points de départ des ligatures. -Dans l'exemple suivant, les ligatures automatiques ne peuvent se terminer -que sur une noire pointée. -@example -#(override-auto-beam-setting '(end * * * *) 3 8) -#(override-auto-beam-setting '(end * * * *) 1 2) -#(override-auto-beam-setting '(end * * * *) 7 8) -@end example -@c ???? Je n'y comprends rien --vv -Dans une mesure à 4/4, cela implique que les ligatures ne peuvent se terminer que sur -la troisième croche, ou sur le quatrième temps (après la valeur de deux fois trois croches). - -Si une ligature se fait de manière inattendue, pensez à vérifer les règles automatiques -dans le fichier @file{scm/@/auto@/-beam@/.scm} pour rechercher d'éventuels conflits, dans -la mesure ou les règles par défaut s'ajoutent à vos propres règles. Il est alors nécessaire -de désactiver toute règle par défaut conduisant à des ligatures indésirables. - -Ainsi, pour obtenir des ligatures en groupes de @code{(3 4 3 2)} croches, dans une mesure à 12/8, -il faudra préalablement utiliser : - -@example -%%% annulons les réglages par défaut relatifs à 12/8, dans scm/auto-beam.scm -#(revert-auto-beam-setting '(end * * 12 8) 3 8) -#(revert-auto-beam-setting '(end * * 12 8) 3 4) -#(revert-auto-beam-setting '(end * * 12 8) 9 8) - -%%% puis ajoutons nos propres règles -#(override-auto-beam-setting '(end 1 8 12 8) 3 8) -#(override-auto-beam-setting '(end 1 8 12 8) 7 8) -#(override-auto-beam-setting '(end 1 8 12 8) 10 8) -@end example - -@cindex ligatures automatiques -@cindex groupes de notes -@funindex autoBeaming -@cindex paroles - -Si des ligatures sont utilisées dans les paroles d'une chanson (pour indiquer des mélismes), -les ligatures automatiques doivent être désactivées, avec @code{\autoBeamOff}. - - -@predefined -@funindex \autoBeamOff -@code{\autoBeamOff}, -@funindex \autoBeamOn -@code{\autoBeamOn}. -@endpredefined - - -@commonprop - -Les groupes de notes reliées par les ligatures peuvent être spécifiés au moyen -de la propriété @code{beatGrouping}. - -@lilypond[quote,verbatim,relative=2,fragment,ragged-right] -\time 5/16 -\set beatGrouping = #'(2 3) -c8[^"(2+3)" c16 c8] -\set beatGrouping = #'(3 2) -c8[^"(3+2)" c16 c8] -@end lilypond - - -@knownissues - -Si une partition se termine alors qu'une ligature automatique est restée inachevée, -cette dernière ligature ne sera pas imprimée du tout. C'est également valable dans -le cas d'une musique polyphonique, saisie avec la syntaxe @code{<< @dots{} \\ @dots{} ->>}, où une voix se terminerait sans que la dernière ligature -soit achevée. - - -@node Manual beams -@unnumberedsubsubsec Manual beams - -@cindex groupements de note manuels -@cindex ligatures manuelles -@funindex ] -@funindex [ - -Dans certaines situations, il peut s'avérer nécessaire de -supplanter l'algorithme de groupement automatique des notes, par -exemple pour prolonger une ligature par-dessus un silence ou une barre -de mesure. Le début et la fin de la ligature sont alors indiqués par -@code{[} et @code{]}. - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -{ - r4 r8[ g' a r8] r8 g[ | a] r8 -} -@end lilypond - - -@commonprop - -@funindex stemLeftBeamCount -@funindex stemRightBeamCount - -LilyPond peut déterminer automatiquement les sous-groupes à -l'intérieur d'un groupement de notes, bien que le résultat ne soit pas -toujours optimal. Les propriétés @code{stemLeftBeamCount} et -@code{stemRightBeamCount} permettent alors -d'ajuster ce comportement. Lorsque l'une ou l'autre de ces propriétés -est définie, elle ne s'applique qu'une seule fois, après quoi sa -définition est effacée. - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -{ - f8[ r16 - f g a] - f8[ r16 - \set stemLeftBeamCount = #1 - f g a] -} -@end lilypond - -La propriété @code{subdivideBeams} sert à grouper les double-croches -ou les valeurs plus brèves pulsation par pulsation, la pulsation -étant définie par la propriété @code{beatLength}. - -@lilypond[fragment,quote,relative=2,verbatim] -c16[ c c c c c c c] -\set subdivideBeams = ##t -c16[ c c c c c c c] -\set Score.beatLength = #(ly:make-moment 1 8) -c16[ c c c c c c c] -@end lilypond -@funindex subdivideBeams - -@noindent -Pour plus d'information sur @code{make-moment}, voir -@ref{Time administration}. - -Lorsqu'une ligature franchit une barre de mesure, le saut -de ligne est en principe interdit à cet endroit. Ce comportement peut -être outrepassé en définissant @code{breakable}. - -@funindex breakable - -@cindex ligatures et sauts de ligne -@cindex ligatures coudées -@cindex auto-knee-gap - -LilyPond insère automatiquement des ligatures coudées --- certaines -notes vers le haut, d'autres vers le bas --- lorsqu'il détecte un espace -important entre des têtes de notes. Ce comportement peut être changé par -l'intermédiaire de l'objet @code{auto-knee-gap} - - -@knownissues - -Les ligatures coudées à cheval sur deux portées ne peuvent être -employées en même temps que des portées invisibles. Voir -@ref{Hiding staves}. - -@c Is this still true with skyline spacing stuff? -J.Mandereau -Les ligatures peuvent entrer en collision avec des symboles entourant -les notes, contrairement aux textes ou aux altérations. - - -@node Feathered beams -@unnumberedsubsubsec Feathered beams - -Les ligatures en soufflet s'obtiennent en définissant la propriété -@code{grow-direction} d'une barre de ligature. La fonction -@code{\featherDurations} sert à ajuster la durée des notes. - -@lilypond[ragged-right,relative=1,fragment,verbatim,quote] -\override Beam #'grow-direction = #LEFT -\featherDurations #(ly:make-moment 5 4) -{ - c16[ c c c c c c] -} -@end lilypond - -@knownissues - -La commande @code{\featherDurations} ne permet de traiter que de très -courts extraits. - - -@node Bars -@subsection Bars - - -@menu -* Bar lines:: -* Bar numbers:: -* Bar and bar number checks:: -* Rehearsal marks:: -@end menu - -@node Bar lines -@unnumberedsubsubsec Bar lines - -@cindex barres de mesure -@funindex \bar -@cindex barres de reprise - - -Les barres de mesures délimitent les mesures, mais peuvent aussi -indiquer une reprise. En principe, elles sont insérées automatiquement, -et les sauts de ligne ne peuvent avoir lieu qu'au niveau de ces barres. - -Il est possible de forcer l'impression d'une barre de mesure spéciale, -avec la commande @code{\bar} : - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -c4 \bar "|:" c4 -@end lilypond - - -Les styles de barres de mesure disponibles sont - -@c @lilypondfile[ragged-right,quote]{bar-lines.ly} - - -En plus de cela, on peut demander @code{"||:"}, qui équivaut à -@code{"|:"}, mais qui donnera, en cas de saut de ligne, une double barre -en fin de ligne, et une barre de reprise au début de la ligne suivante. - -Il est possible d'autoriser un saut de ligne même s'il n'y a pas -de barre de mesure visible, en utilisant : - -@example -\bar "" -@end example - -@noindent - - -Ceci insérera une barre de mesure invisible, et permettra de sauter de -ligne à cet endroit, sans incrémenter le numéro de mesure. - - -Dans une partition comprenant plusieurs portées, la commande @code{\bar} -placée sur une portée s'applique automatiquement à toutes les -portées. Les barres de mesure que l'on obtient alors sont d'un seul -tenant sur les portées d'un @code{StaffGroup}, d'un @code{PianoStaff} ou -d'un @code{GrandStaff}. - -@lilypond[quote,ragged-right,fragment,verbatim] -<< - \new StaffGroup << - \new Staff { - e'4 d' - \bar "||" - f' e' - } - \new Staff { \clef bass c4 g e g } - >> - \new Staff { \clef bass c2 c2 } ->> -@end lilypond - - -@commonprop - -@funindex whichBar -@funindex repeatCommands -@funindex defaultBarType - - -La commande @code{\bar }@var{bartype} sert de raccourci pour @code{\set -Timing.whichBar = }@var{bartype}. Dès que l'on définit @code{whichBar}, -une barre de mesure est créée selon le style défini. - - -Dès que la propriété @code{whichBar} est définie, une barre de mesure -est créée. À chaque début de mesure, elle prend la valeur de -@code{Timing.defaultBarType}. La valeur de @code{repeatCommands} sert à -remplacer les barres de mesure par défaut. - -Nous vous invitons à utiliser @code{\repeat} pour indiquer les -reprises. Voyez à ce sujet @ref{Repeats}. - - -@seealso -Dans ce manuel : @ref{Repeats}, @ref{Grouping staves}. - -Référence du programme : @rinternals{BarLine} (faisant partie du -contexte @rinternals{Staff}), @rinternals{SpanBar} (sur plusieurs -portées). - - -@node Bar numbers -@unnumberedsubsubsec Bar numbers - -@cindex Mesure, numéro de -@cindex numéros de mesure -@funindex currentBarNumber - -Les numéros de mesure sont imprimés par défaut à chaque début de -ligne. Ce nombre est stocké par la propriété @code{currentBarNumber} -qui sera mis à jour à chaque mesure. - -@lilypond[verbatim,ragged-right,quote,fragment,relative] -\repeat unfold 4 {c4 c c c} \break -\set Score.currentBarNumber = #50 -\repeat unfold 4 {c4 c c c} -@end lilypond - -L'impression d'un numéro de mesure ne peut intervenir que s'il y a une -barre. Aussi, pour pouvoir le faire au début d'un morceau, -devrez-vous ajouter une barre vide : - -@lilypond[verbatim,ragged-right,quote,fragment,relative] -\set Score.currentBarNumber = #50 -\bar "" -\repeat unfold 4 {c4 c c c} \break -\repeat unfold 4 {c4 c c c} -@end lilypond - -Vous pouvez imprimer un numéro de mesure à intervalles réguliers plutôt -qu'en tête de chaque ligne. C'est ce qu'illustre l'exemple suivant. - -@lilypond[verbatim,ragged-right,quote,fragment,relative] -\override Score.BarNumber #'break-visibility = #'#(#f #t #t) -\set Score.currentBarNumber = #11 -\bar "" % Permit first bar number to be printed -% Print a bar number every second measure -\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) -c1 c c c c -\break -c c c c c -@end lilypond - - -Désactiver le graveur concerné --- @code{Bar_number_engraver} --- -donnera une partition sans numéros de mesure. - -@lilypond[verbatim,ragged-right,quote] -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} -\relative c''{ -c4 c c c \break -c4 c c c -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{BarNumber}. - -Exemples : @rlsr{Staff notation}. - - -@knownissues - -Les numéros de mesure peuvent entrer en collision avec les crochets de -@rinternals{StaffGroup}. La propriété @code{padding} --- décalage ---- de l'objet @rinternals{BarNumber} permet alors d'ajuster leur -positionnement. - - -@node Bar and bar number checks -@unnumberedsubsubsec Bar and bar number checks - -@cindex vérification des limites de mesure -@cindex mesures, vérification des limites -@funindex barCheckSynchronize -@funindex | - -Les tests de limites de mesure (ou tests de mesure) aident à détecter -les erreurs dans les durées. Un test de mesure s'écrit avec une barre -verticale, @samp{|}. Lors du traitement, elle doit correspondre à une -barre de mesure. Sinon, un avertissement est émis. Dans l'exemple -suivant, le deuxième test de mesure signale une erreur. -@example -\time 3/4 c2 e4 | g2 | -@end example - -Le test de mesure peut être aussi utilisé dans les paroles, par exemple : -@example -\lyricmode @{ - \time 2/4 - Twin -- kle | Twin -- kle -@} -@end example - -Des durées incorrectes font échouer les tests de mesure, et peuvent -souvent mettre la partition sens dessus dessous, particulièrement s'il -s'agit de musique polyphonique. Vérifier les tests de mesure qui ont -échoué et les durées incorrectes est un bon moyen de commencer à -corriger sa partition. - -@funindex | -@funindex pipeSymbol - -Il est aussi possible d'attribuer une autre valeur au symbole -@code{|}, en assignant une expression musicale à @code{pipeSymbol}, - -@lilypond[quote,ragged-right,verbatim] -pipeSymbol = \bar "||" - -{ c'2 c' | c'2 c' } -@end lilypond - - -Lorsque l'on recopie de longues pièces, il peut être utile de vérifier -que les numéros de mesures de LilyPond correspondent à l'original que -l'on recopie. Cela se fait avec @code{\barNumberCheck}. Par exemple, - -@verbatim -\barNumberCheck #123 -@end verbatim - -@noindent -affiche un avertissement lors du traitement si le numéro de mesure à ce -point (variable @code{currentBarNumber}) n'est pas 123. - - -@node Rehearsal marks -@unnumberedsubsubsec Rehearsal marks - -@cindex Repères, indication de -@funindex \mark - -Indiquer un repère s'obtient grâce à la commande @code{\mark}. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c1 \mark \default -c1 \mark \default -c1 \mark #8 -c1 \mark \default -c1 \mark \default -@end lilypond - -@noindent -La lettre@tie{}@q{I} n'est pas utilisée, conformément aux usages de la -gravure. Cependant, vous pourrez intégrer la lettre @q{I} en utilisant - -@example -\set Score.markFormatter = #format-mark-alphabet -@end example - -Lorsque vous utilisez @code{\mark \default}, le repère s'incrémente -automatiquement ; toutefois donner un nombre en argument permet de -spécifier manuellement le repère en question. La valeur à utiliser -est enregistrée dans la propriété @code{rehearsalMark}. - -Le style du repère est déterminé par la propriété -@code{markFormatter}. Il s'agit d'une fonction qui prend en arguments -le repère en cours (un entier) ainsi que le contexte en cours, et -retournera un objet de type étiquette. Dans l'exemple qui suit, -@code{markFormatter} est réglé pour une procédure type. Quelques -mesure plus loin, son comportement est modifié pour imprimer un -repère encadré. - -@lilypond[fragment,quote,ragged-right,verbatim,relative=2] -\set Score.markFormatter = #format-mark-numbers -c1 \mark \default -c1 \mark \default -\set Score.markFormatter = #format-mark-box-numbers -c1 \mark \default -c1 \mark \default -c1 -@end lilypond - -Le fichier @file{scm/@/translation@/-functions@/.scm} comporte les -définitions de @code{format-mark-numbers} (comportement par défaut), -@code{format-mark-box-numbers}, -@code{format-mark-letters} et @code{format-mark-box-letters}. Vous -pouvez vous en inspirer pour d'autres fonctions de formatage. - -@code{format-mark-barnumbers}, @code{format-mark-box-barnumbers} et -@code{format-mark-circle-barnumbers} permettent d'imprimer le numéro -de mesure au lieu des compteurs alphabétique ou numérique. - -On peut aussi spécifier manuellement une marque de repère : - -@example -\mark "A1" -@end example - -@noindent -@code{Score.markFormatter} sera sans effet sur des repères ainsi -définis. Un @code{\markup} peut néanmoins s'utiliser en argument. - -@example -\mark \markup@{ \box A1 @} -@end example - -@cindex segno -@cindex coda -@cindex D.S al Fine - -Un @code{\mark} peut contenir un glype musical tel que le signe -@emph{segno}. - -@lilypond[fragment,quote,ragged-right,verbatim,relative] -c1 \mark \markup { \musicglyph #"scripts.segno" } -c1 \mark \markup { \musicglyph #"scripts.coda" } -c1 \mark \markup { \musicglyph #"scripts.ufermata" } -c1 -@end lilypond - -@noindent -Pour connaître les différents symboles accessibles par -@code{\musicglyph}, consultez @ref{The Feta font}. - -Pour affiner le positionnement des repères, veuillez vous référer à -@ref{Text marks}. - - -@seealso -Dans ce manuel : @ref{Text marks}. - -Référence du programme : @rinternals{RehearsalMark}. - -Fichiers d'initialisation : @file{scm/@/translation@/-functions@/.scm} -contient les définitions de @code{format-mark-numbers} et -@code{format-mark-letters}. Elles seront source d'inspiration pour -d'autres fonctions de formatage. - -Exemples : @rlsr{Rhythms}, @rlsr{Expressive marks}. - - -@node Special rhythmic concerns -@subsection Special rhythmic concerns - - -@menu -* Grace notes:: -* Aligning to cadenzas:: -* Time administration:: -@end menu - -@node Grace notes -@unnumberedsubsubsec Grace notes - -@funindex \grace -@cindex ornements -@cindex notes d'ornement -@cindex appoggiature -@cindex accacciature -@cindex petite note - - -Les petites notes sont des ornements entièrement écrits. Les plus -courantes sont les accacciatures, qui doivent se jouer très vite, -et qui s'écrivent sous forme d'une petite note barrée (sur la hampe) -et liée. L'appoggiature est une petite note non barrée, qui vole -une fraction à la durée de la note réelle qui la suit. - -Ces petites notes sont entrées avec les commandes @code{\acciaccatura} -et @code{\appoggiatura}, comme le montre l'exemple suivant : - -@lilypond[quote,ragged-right,relative=2,verbatim,fragment] -b4 \acciaccatura d8 c4 \appoggiatura e8 d4 -\acciaccatura { g16[ f] } e4 -@end lilypond - - -Ce sont là deux formes spéciales de la commande @code{\grace}, qui prend -en charge toutes les petites notes. Si on la fait suivre d'une -expression musicale, un groupe de petites notes sera créé, sans impact -sur la métrique. - -@lilypond[quote,ragged-right,relative=2,verbatim,fragment] -c4 \grace c16 c4 -\grace { c16[ d16] } c2 c4 -@end lilypond - -@noindent -Contrairement à @code{\acciaccatura} ou @code{\appoggiatura}, la -commande @code{\grace} ne provoque pas de liaison. - -La durée des petites notes est interprétée par le programme en fonction -d'un deuxième compteur de temps, le chronomètre @code{grace}. Chaque -instant est défini par deux nombres rationnels : le premier compte les -durées réelles, le second compte la durée des petites notes. Reprenons -l'exemple ci-dessus en y ajoutant ces couples de nombres : - -@lilypond[quote,ragged-right] -<< - \relative c''{ - c4 \grace c16 c4 \grace { - c16[ d16] } c2 c4 - } - \new Lyrics \lyricmode { - \override LyricText #'font-family = #'typewriter - - \markup { (0,0) } 4 - \grace { \markup { - ( \fraction 1 4 , \fraction -1 16 ) } 16 } - \markup { (\fraction 1 4 , 0 ) } 4 - \grace { - \markup { (\fraction 2 4 , \fraction "-1" 8 ) } 16 - \markup { (\fraction 2 4 , \fraction "-1" 16 ) } 16 - } - \markup { ( \fraction 2 4 , 0 ) } - } ->> -@end lilypond - -Les petites notes se placent de façon synchrone entre les différentes -portées. Dans l'exemple suivant, il y a deux petites double-croches -pour chaque petite croche. - -@lilypond[quote,ragged-right,relative=2,verbatim,fragment] -<< \new Staff { e4 \grace { c16[ d e f] } e4 } - \new Staff { c4 \grace { g8[ b] } c4 } >> -@end lilypond - -@funindex \afterGrace - -La commande @code{\afterGrace} sert à placer une petite note après une -note réelle --- et non @emph{avant} comme d'ordinaire. Cette commande -requiert deux arguments : la note réelle, et la ou les petites notes qui -suivent. - -@lilypond[ragged-right, verbatim,relative=2,fragment] -c1 \afterGrace d1 { c16[ d] } c4 -@end lilypond - -Les petites notes se placent alors aux 3/4 de la durée de la note -réelle. Cette fraction peut être changée en définissant -@code{afterGraceFraction} ; ainsi, - -@example -#(define afterGraceFraction (cons 7 8)) -@end example - -@noindent -placera la petite note à 7/8 de la note réelle. - -On peut obtenir le même effet manuellement, de la façon suivante : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\new Voice { - << { d1^\trill_( } - { s2 \grace { c16[ d] } } >> - c4) -} -@end lilypond - -@noindent -Le silence invisible peut être plus ou moins long --- ici c'est une -demi-pause --- afin d'ajuster l'espace entre la note réelle et les -petites notes. - -Les expressions @code{\grace} obéissent à des règles typographiques -particulières, notamment pour régler l'orientation et la taille des -objets. De ce fait, toute subtilité de mise en forme devra être -indiquée @emph{à l'intérieur} de l'expression introduite par -@code{\grace} : - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\new Voice { - \acciaccatura { - \stemDown - f16-> - \stemNeutral - } - g4 -} -@end lilypond - -@noindent -Tous les réglages ajoutés doivent également être désactivés dans cette -même expression. - -Il est possible de changer globalement la mise en forme des petites -notes dans un morceau, au moyen de la fonction -@code{add-grace-property}. Ici, par exemple, on ôte la définition de -l'orientation des objets @code{Stem} pour toutes les petites notes, afin -que les hampes ne soient pas toujours orientées vers le haut. - -@example -\new Staff @{ - #(add-grace-property 'Voice 'Stem 'direction '()) - @dots{} -@} -@end example - -@noindent -Il est par ailleurs possible de modifier les variables -@code{startGraceMusic}, @code{stopGraceMusic}, -@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, -@code{startAppoggiaturaMusic}, et @code{stopAppoggiaturaMusic}. -Pour plus de détails, voir le fichier @file{ly/@/grace@/-init@/.ly}. - -@noindent -Le trait que l'on trouve sur les hampes des accacciatures peut -être appliqué dans d'autres situations en définissant @* -@code{\override Stem #'stroke-style = #"grace"}. - - -@commonprop - -Il est possible de forcer l'élasticité de l'espacement des notes d'agrément. - -@lilypond[verbatim,quote,relative=2] -<< - \override Score.SpacingSpanner #'strict-grace-spacing = ##t - \new Staff { - c4 - \afterGrace c4 { c16[ c8 c16] } - c4 r - } - \new Staff { - c16 c c c c c c c c4 r - } ->> -@end lilypond - - -@seealso -Référence du programme : @rinternals{GraceMusic}. - - -@knownissues - -Une partition commençant par une expression @code{\grace} doit faire -intervenir la commande @code{\new Voice}, sans quoi la note réelle et -la petite note se retrouveront sur des portées différentes. - -La synchronisation des petites notes se fait de façon parfois -surprenante, car les autres objets de la portée --- barres de mesure, -armures, etc. --- sont eux aussi synchrones. Pensez-y lorsque vous -mélez des portées comprenant des petites notes et d'autres sans : - -@lilypond[quote,ragged-right,relative=2,verbatim,fragment] -<< \new Staff { e4 \bar "|:" \grace c16 d4 } - \new Staff { c4 \bar "|:" d4 } >> -@end lilypond - -@noindent -Il est possible de remédier à cela en insérant sur les autres portées -des silences invisibles dans une expression précédée de @code{\grace}, -correspondant à la durée des petites notes. - -@lilypond[quote,ragged-right,relative=2,verbatim,fragment] -<< \new Staff { e4 \bar "|:" \grace c16 d4 } - \new Staff { c4 \bar "|:" \grace s16 d4 } >> -@end lilypond - -Seules des expressions musicales séquentielles peuvent être utilisées -pour des petites notes ; il n'est pas possible d'imbriquer ni de -juxtaposer des sections de petites notes, faute de quoi le traitement du -code peut échouer ou produire des erreurs. - - -@node Aligning to cadenzas -@unnumberedsubsubsec Aligning to cadenzas - -Dans un contexte orchestral, une cadence constitue un problème -spécifique. Lors du montage d'une partition contenant une cadence, -tous les autres instruments doivent sauter autant de notes que ce -qu'en comporte la cadence, faute de quoi il démarreraient trop tôt ou -trop tard. - -Les fonctions @code{mmrest-of-length} ou @code{skip-of-length} -permettent de résoudre ce problème. Ces fonctions Scheme prennent en -argument un fragment de musique, et génèrent un @code{\skip} ou un -silence multi-mesures d'une durée correspondant à ce fragment. -L'exemple qui suit illustre l'utilisation de @code{mmrest-of-length}. - -@lilypond[verbatim,ragged-right,quote] -cadenza = \relative c' { - c4 d8 << { e f g } \\ { d4. } >> - g4 f2 g4 g -} - -\new GrandStaff << - \new Staff { \cadenza c'4 } - \new Staff { - #(ly:export (mmrest-of-length cadenza)) - c'4 - } ->> -@end lilypond - - -@node Time administration -@unnumberedsubsubsec Time administration - -@cindex temps, gestion du - -Le temps est administré par le @rinternals{Time_signature_engraver}, -qui réside en principe dans le contexte @rinternals{Score}. Sa -gestion traite les variables suivantes : - -@table @code -@item currentBarNumber -Le numéro de mesure. - -@item measureLength -La longueur de la mesure, dans la métrique en cours. Pour une mesure -à 4/4, elle est de@tie{}1, et de 3/4 pour une mesure à 6/8. - -@item measurePosition -Le moment où l'on en est dans la mesure en cours. Cette quantité est -remise à@tie{}0 dès lors qu'on dépasse @code{measureLength} ; la variable -@code{currentBarNumber} est alors incrémentée. - -@item timing -Lorsqu'on lui assigne la valeur @emph{vrai}, les valeurs ci-dessus -mentionnées sont mises à jour à chaque pas. Fixée à @emph{faux}, le -graveur restera indéfiniment dans la mesure en cours. -@end table - -Le calage peut être modifié en réglant explicitement l'une de ces -variables. Dans l'exemple qui suit, nous réglons la métrique à 4/4, -tout en fixant @code{measureLength} à 5/4. Un peu plus loin, nous -raccourcissons la mesure de 1/8, en assignant 7/8 à -@code{measurePosition}, alors que nous en sommes à 2/4 dans la -mesure ; la barre de mesure tombera donc à @w{2/4 + 3/8}. Les 3/8 -résultent du fait que 5/4 équivaut à 10/8, mais nous nous sommes recalés -à 7/8 de la mesure ; donc @w{10/8 @minus{} 7/8 = 3/8}. - -@lilypond[quote,ragged-right,verbatim,relative,fragment] -\set Score.measureLength = #(ly:make-moment 5 4) -c1 c4 -c1 c4 -c4 c4 -\set Score.measurePosition = #(ly:make-moment 7 8) -b8 b b -c4 c1 -@end lilypond - -@noindent -Comme le montre cet exemple, @code{ly:make-moment n m} construit une -durée de n/m fois une ronde. -Par conséquent, @code{ly:make-moment 1 8} correspond à une croche, et -@code{ly:make-moment 7 16} à la durée de sept doubles croches. - diff --git a/Documentation/fr/user/running.itely b/Documentation/fr/user/running.itely deleted file mode 100644 index 7547dc4188..0000000000 --- a/Documentation/fr/user/running.itely +++ /dev/null @@ -1,91 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: 4a527608c5ff2ce31e596495d00dce181dc1b9ea - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Running LilyPond -@chapter Running LilyPond - -@untranslated - - -@menu -* Normal usage:: -* Command-line usage:: -* Error messages:: -* Updating files with convert-ly:: -* Reporting bugs:: -@end menu - -@node Normal usage -@section Normal usage - -@untranslated - - -@node Command-line usage -@section Command-line usage - -@untranslated - - -@menu -* Invoking lilypond:: -* Command line options:: -* Environment variables:: -@end menu - -@node Invoking lilypond -@subsection Invoking lilypond - -@untranslated - - -@node Command line options -@subsection Command line options - -@untranslated - - -@node Environment variables -@subsection Environment variables - -@untranslated - - -@node Error messages -@section Error messages - -@untranslated - - -@node Updating files with convert-ly -@section Updating with @command{convert-ly} - -@untranslated - - -@subsection Command line options -@menu -* Problems with convert-ly:: -@end menu - -@node Problems with convert-ly -@subsection Problems with @code{convert-ly} - -@untranslated - - -@node Reporting bugs -@section Reporting bugs - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/fr/user/scheme-tutorial.itely b/Documentation/fr/user/scheme-tutorial.itely deleted file mode 100644 index aae9ec71c3..0000000000 --- a/Documentation/fr/user/scheme-tutorial.itely +++ /dev/null @@ -1,28 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 4a527608c5ff2ce31e596495d00dce181dc1b9ea - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Scheme tutorial -@appendix Scheme tutorial - -@untranslated - - -@menu -* Tweaking with Scheme:: -@end menu - -@node Tweaking with Scheme -@appendixsec Tweaking with Scheme - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/fr/user/setup.itely b/Documentation/fr/user/setup.itely deleted file mode 100644 index ae0e93be75..0000000000 --- a/Documentation/fr/user/setup.itely +++ /dev/null @@ -1,350 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: e2070eadd7d3d7a87450aab195a48945ee0b144a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Jean-Charles Malahieude - -@node Setup -@chapter Setup - -Ce chapitre traite des options de configuration à effectuer après -l'installation de LilyPond et de ses dépendances. Il tient lieu de -référence en la matière : ne vous intéressez qu'à la rubrique qui vous -concerne directement. - -@menu -* Setup for specific Operating Systems:: -* Text editor support:: -* Point and click:: -@end menu - -@node Setup for specific Operating Systems -@section Setup for specific Operating Systems - -Cette partie explique comment optimiser l'installation propres à -certains systèmes. - -@menu -* Setup for MacOS X:: -@end menu - -@node Setup for MacOS X -@subsection Setup for MacOS X - -@subsubheading Using Python scripts on MacOS 10.3 or 10.4 - -Les exécutables de LilyPond pour MacOS X ne fournissent pas Python, bien -qu'une version au moins de niveau 2.4 soit requise par -@command{convert-ly}. Ainsi, et si vous utilisez MacOS 10.3 ou 10.4, -devrez-vous installer une version plus récente de Python à partir de -@uref{http://python.org/download/}, puis éditer la première ligne de -@command{convert-ly} et @command{lilypond-book}. Si les exécutables du -Python que vous venez d'installer sont dans votre @var{PATH}, cette ligne -doit être : - -@example -#!/usr/bin/env python -@end example - -@noindent -et dans le cas contraire - -@example -#!@var{/chemin/vers/nouvelle_installation/python} -@end example - - -@subsubheading MacOS X on the command line - -Les scripts tels que @command{lilypond-book}, @command{convert-ly}, -@command{abc2ly}, et même @command{lilypond}, sont insclus dans un -fichier @code{.app} pour MacOS@tie{}X. Vous pourrez les lancer -directement en ligne de commande de la manière suivante : - -@example -@var{chemin/vers}/LilyPond.app/Contents/Resources/bin/lilypond -@end example - -@noindent -Il en va de même pour les autres scripts de ce répertoire, y compris -@command{lilypond-book}, @command{convert-ly}, @command{abc2ly}, etc. - -Une autre façon de procéder consiste à créer des scripts qui ajoutent -automatiquement le chemin. À cette intention, créez un répertoire qui -contiendra ces scripts : - -@example -mkdir -p ~/bin -cd ~/bin -@end example - -Créez un fichier appelé @code{lilypond} et qui contiendra : - -@example -exec @var{chemin/vers}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" -@end example - -Créez autant de fichiers -- @code{lilypond-book}, @code{convert-ly}, et -autres programmes annexes que vous utilisez (@code{abc2ly}, -@code{midi2ly}, etc) -- que de besoin. Remplacez simplement -@code{bin/lilypond} par @code{bin/convert-ly} ou tout autre nom de -programme dans le fichier que vous créez. - -Rendez ces fichiers exécutables : - -@example -chmod u+x lilypond -@end example - -Ajoutez alors ce répertoire à votre @var{PATH}. Modifiez le fichier -@code{.profile} -- créez-le si besoin -- de votre répertoire personnel, -de telle sorte qu'il contienne - -@example -export PATH=$PATH:~/bin -@end example - -@noindent -Ce fichier doit se terminer par une ligne vide. - -Notez que @var{chemin/vers} devrait correspondre à @code{/Applications/}. - - -@node Text editor support -@section Text editor support - -@cindex editors -@cindex vim -@cindex emacs -@cindex modes, editor -@cindex syntax coloring -@cindex coloring, syntax - -Certains éditeurs de texte prennent en charge LilyPond. - -@menu -* Emacs mode:: -* Vim mode:: -* jEdit:: -* TexShop:: -* TextMate:: -* LilyKDE:: -@end menu - -@node Emacs mode -@subsection Emacs mode - -Emacs dispose d'un @file{lilypond-mode} qui fournit l'autocomplétion des -mots-clés, l'indentation, les appariements spécifiques à LilyPond, la -coloration synthaxique, ainsi que des raccourcis pour compiler et -consulter les manuels de LilyPond en mode info. Si le -@file{lilypond-mode} n'était pas installé sur votre système, procédez -comme ci-dessous. - -Le répertoire @file{elisp} inclus dans les sources contient aussi un -mode pour saisir la musique et lancer LilyPond. Faites @command{make -install} pour l'installer dans votre @var{elispdir}. Le fichier -@file{lilypond-init.el} devrait trouver sa place dans -@var{load-path}@file{/site-start.d/} ou bien ajouté à votre -@file{~/.emacs} ou @file{~/.emacs.el}. - -En tant que simple utilisateur, vous pouvez toujours ajouter votre -propre répertoire (par exemple @file{~/site-lisp/}) à votre -@var{load-path} en ajoutant la ligne suivante -- modifiée en conséquence --- à votre @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 Vim mode -@subsection Vim mode - -En ce qui concerne @uref{http://@/www@/.vim@/.org,VIM}, LilyPond fournit -un fichier @file{vimrc} qui gère la coloration synthaxique. Le -répertoire @code{$VIM} inclus dans les sources contient aussi un -mode pour saisir la musique et lancer LilyPond. - -Le type de fichier LilyPond sera reconnu si votre -@file{~/.vim/filetype.vim} contient - -@example -if exists("did_load_filetypes") - finish -endif -augroup filetypedetect - au! BufNewFile,BufRead *.ly,*.ily setf lilypond -augroup END -@end example - -N'oubliez pas d'inclure ce chemin en ajoutant à votre @file{~/.vimrc} la -ligne suivante : - -@example -set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ -@end example - -@noindent -où $@{LILYPOND_VERSION@} correspond à votre version de LilyPond. Si -LilyPond n'est pas installé dans @file{/usr/local/}, modifiez ce chemin -en conséquence. - - -@node jEdit -@subsection jEdit - -Créé en tant que greffon pour l'éditeur de texte -@uref{http://@/www@/.jedit@/.org@/,jEdit}, LilyPondTool est l'outil le -plus riche en fonctionnalités pour éditer des partitions écrites avec -LilyPond. Cela inclue un assistant à la création de document qui prend -en charge les paroles, un visionneur de PDF avec gestion du -pointer-cliquer. Captures d'écran, démonstrations et instructions -d'installation sont disponibles sur le site de -@uref{http://lilypondtool@/.organum@/.hu,LilyPondTool}. - - -@node TexShop -@subsection TexShop - -L'éditeur -@uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop} -pour MacOS@tie{}X peut prendre en charge LilyPond, lilypond-book et -convert-ly, en lui adjoignant les extensions disponibles -@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html,ici}. - - -@node TextMate -@subsection TextMate - -TextMate dispose d'un greffon pour LilyPond. Vous pouvez l'installer en -lançant : - -@example -mkdir -p /Library/Application\ Support/TextMate/Bundles -cd /Library/Application\ Support/TextMate/Bundles -svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ -@end example - - -@node LilyKDE -@subsection LilyKDE - -@uref{http://lilykde.googlecode.com/,LilyKDE} est un greffon pour -@uref{http://kate-editor.org/,Kate}, l'éditeur de texte de -l'environnement de bureau KDE. Il dispose d'un assistant à la création -de document LilyPond et un visionneur de PDF. - -LilyKDE peut s'interfacer avec -@uref{http://www.volny.cz/smilauer/rumor/,Rumor}, afin de pouvoir entrer -la musique à l'aide d'un clavier MIDI. - -LilyKDE gère l'hyphénation des paroles, et le gestionnaire de fichiers -de KDE permet de lancer LilyPond sur plusierus fichiers simultanément. - - -@node Point and click -@section Point and click - -Le pointer-cliquer (@emph{point and click}) permet de se retrouver -directement dans le fichier source, à la note que l'on pointe dans le -visionneur de PDF. Ceci facilite grandement le repérage des erreurs à -partir du fichier imprimable. - -Lorsque cette fonctionnalité est active, LilyPond ajoute des hyperliens -au fichier PDF. Ces liens sont transmis au navigateur internet qui se -charge d'ouvrir un éditeur de texte à l'enfroit même où le curseur -pointe. - -Afin que cette chaîne de traitement soit pleinement opérationnelle, il -faut configurer votre visionneur de PDF de façon à ce qu'il suive les -liens grâce au script @file{lilypond-invoke-editor} fourni avec -LilyPond. - - -Pour Xpdf, sous UNIX, vous devrez insérer la ligne suivante dans -le fichier @file{xpdfrc} -- soit @file{/etc/xpdfrc}, soit dans votre -répertoire personnel @file{.xpdfrc}. - -@example -urlCommand "lilypond-invoke-editor %s" -@end example - -@file{lilypond-invoke-editor} est un petit programme assistant. Il se -charge d'appeler un éditeur pour les identifants de ressource -(@emph{URI}) de type @code{textedit}, et un navigateur pour les autres. -Il teste en outre la variable d'environnement @code{EDITOR} pour les cas -suivant : - -@table @code -@item emacs - sera alors lancée la commande -@example -emacsclient --no-wait +@var{line}:@var{column} @var{file} -@end example -@item vim - sera alors lancée la commande -@example -gvim --remote +:@var{line}:norm@var{char} @var{file} -@end example - -@item nedit - sera alors lancée la commande -@example -nc -noask +@var{line} @var{file}' -@end example -@end table - -La variable d'environnement @code{LYEDITOR} permet d'anticiper cette -affectation, puisqu'elle contient la commande qui permet de lancer -l'éditeur en tenant compte des valeurs respectives de @code{%(file)}, -@code{%(column)} , et@code{%(line)}. Par exemple, - -@example -emacsclient --no-wait +%(line)s:%(column)s %(file)s -@end example - -@noindent -en variable d'environnement @code{LYEDITOR} revient au lancement d'un -client emacs standard. - - -@cindex ficher de sortie, taille -@cindex taille du ficher de sortie - -L'option pointer-cliquer accroît la taille des fichiers de manière -significative. Afin de réduire la taille des fichiers PDF et PS, il est -toujours possible de désactiver le pointer-cliquer en ajoutant - -@example -\pointAndClickOff -@end example - -@noindent -dans le fichier @file{.ly}. Il peut alors être activé de manière -explicite grâce à - -@example -\pointAndClickOn -@end example - -Le pointer-cliquer peut aussi être désactivé au moment de la compilation -en ligne de commande : - -@example -lilypond -dno-point-and-click fichier.ly -@end example - -@warning{Lorsqu'un fichier LilyPond est destiné à être redistribué, -pensez à désactiver le pointer-cliquer, de telle sorte que les chemins -d'accès et autres informations propres à votre système ne se retrouvent -pas inclus dans le fichier @file{.pdf}.} - diff --git a/Documentation/fr/user/simultaneous.itely b/Documentation/fr/user/simultaneous.itely deleted file mode 100644 index f3664a9719..0000000000 --- a/Documentation/fr/user/simultaneous.itely +++ /dev/null @@ -1,468 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 33ba8d40c3493011a4b39ab8b1369701f8013bd6 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Frédéric Chiasson, Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - -@node Simultaneous notes -@section Simultaneous notes - -@lilypondfile[quote]{simultaneous-headword.ly} - -La notion musicale de polyphonie fait référence au fait d'avoir plus -d'une voix simultanément dans une pièce. Dans LilyPond, la notion de -polyphonie fait référence au fait d'avoir plus d'une voix sur la même -portée. - -@menu -* Single voice:: -* Multiple voices:: -@end menu - - -@node Single voice -@subsection Single voice - -@menu -* Chorded notes:: -* Clusters:: -@end menu - -@node Chorded notes -@unnumberedsubsubsec Chorded notes - -@cindex accords - -Un accord est formé en mettant une série de hauteurs entre @code{<} -et @code{>}. Un accord peut être suivi d'une durée et d'indications -d'articulation, comme une simple note. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -4 8 -@end lilypond - -Pour plus d'information à propos des accords, voir @ref{Chord notation}. - - -@node Clusters -@unnumberedsubsubsec Clusters - -@cindex cluster - -Un cluster indique un agrégat de sons. On peut le représenter par une -plage limitée par un ambitus (notes extrêmes). On obtient une telle notation en -appliquant la fonction @code{makeClusters} à une séquence d'accords, -comme -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\makeClusters { } -@end lilypond - -Des notes ordinaires et des clusters peuvent cohabiter sur une même -portée, y compris simultanément --- en pareil cas, rien ne sera fait -pour tenter d'empécher les chevauchements entre notes et clusters. - - -@seealso -Référence du programme : @rinternals{ClusterSpanner}, -@rinternals{ClusterSpannerBeacon}, -@rinternals{Cluster_spanner_engraver}. - -Exemples : @rlsr{Simultaneous notes}. - - -@knownissues - -Les expressions musicales du type @code{<< @{ g8 e8 @} a4 >>} ne -seront pas imprimées de façon acceptable. utilisez plutôt -@code{8 8} . - - -@node Multiple voices -@subsection Multiple voices - -@menu -* Basic polyphony:: -* Collision resolution:: -* Automatic part combining:: -* Writing music in parallel:: -@end menu - -@node Basic polyphony -@unnumberedsubsubsec Basic polyphony - -@cindex polyphonie - -La manière la plus facile d'entrer des fragments avec plus d'une voix -sur une portée est d'entrer chaque voix comme une suite de notes ---- entre accolades : @code{@{...@}} --- puis de les combiner simultanément, -en séparant les voix avec @code{\\} - -@funindex \\ - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - c16 d e f - << - { g4 f e | d2 e2 } \\ - { r8 e4 d c8 ~ | c b16 a b8 g ~ g2 } \\ - { s2. | s4 b4 c2 } - >> -} -@end lilypond - -Le séparateur permet aux contextes @rinternals{Voice}@footnote{Ces -voix polyphoniques sont parfois appelées @qq{couches} ou @qq{calques} dans -d'autres logiciels de notation.} -@cindex couches -@cindex calques -d'être identifiés. Les contextes de voix portent les noms @code{"1"}, -@code{"2"}, etc. Dans chacun de ces contextes, la direction verticale -des liaisons, hampes, etc. est réglée de manière appropriée. - -Ces voix sont toutes distinctes de la voix qui contient les notes en -dehors de la construction @code{<< \\ >>}. On doit le prendre en compte -lorsqu'on fait des changements au niveau des voix. Cela veut aussi dire -que les liaisons de prolongation et d'articulation ne peuvent ni entrer -ni sortir de la construction @code{<< \\ >>}. À l'inverse, des voix -parallèles venant de constructions @code{<< \\ >>} séparées sur la même -portée sont dans les mêmes voix. Voici le même exemple, avec des -couleurs et têtes de note différentes pour chaque voix. Notez que le -changement de style de tête de note n'affecte pas l'intérieur des -constructions @code{<< \\ >>}. Aussi, le changement à la deuxième voix -dans la première construction @code{<< \\ >>} l'affecte aussi dans la -deuxième construction @code{<< \\ >>}, et la voix est liée entre les -deux constructions. - -@cindex têtes de note, styles - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - \override NoteHead #'style = #'cross - \override NoteHead #'color = #red - c16 d e f - << - { g4 f e } \\ - { \override NoteHead #'style = #'triangle - \override NoteHead #'color = #blue - r8 e4 d c8 ~ } - >> | - << - { d2 e2 } \\ - { c8 b16 a b8 g ~ g2 } \\ - { \override NoteHead #'style = #'slash - \override NoteHead #'color = #green - s4 b4 c2 } - >> -} -@end lilypond - -La polyphonie ne change pas la relation des notes dans un bloc -@code{\relative @{ @}}. Chaque note est calculée en fonction de la note -qui la précède immédiatement, sans tenir compte des différentes voix. - -@example -\relative @{ noteA << noteB \\ noteC >> noteD @} -@end example - -@code{noteC} est calculé relativement à @code{noteB}, non pas à -@code{noteA} ; @code{noteD} est calculé relativement à @code{noteC}, non -pas à @code{noteB} ou @code{noteA}. - - -@node Collision resolution -@unnumberedsubsubsec Collision resolution - -D'ordinaire, les têtes de notes pointées et non-pointées ne sont pas -fusionnées, mais lorsque la propriété @code{merge-differently-dotted} de -l'objet @rinternals{NoteCollision} est définie, elles se trouvent -fusionnées : - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\new Voice << { - g8 g8 - \override Staff.NoteCollision - #'merge-differently-dotted = ##t - g8 g8 -} \\ { g8.[ f16] g8.[ f16] } >> -@end lilypond - -De même, vous pouvez fusionner une tête de blanche avec une tête de -croche, en définissant @code{merge-differently-headed} - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\new Voice << { - c8 c4. - \override Staff.NoteCollision - #'merge-differently-headed = ##t -c8 c4. } \\ { c2 c2 } >> -@end lilypond - -LilyPond décale aussi verticalement les silences à l'opposé des hampes, -par exemple - -@lilypond[quote,ragged-right,fragment,verbatim] -\new Voice << c''4 \\ r4 >> -@end lilypond - -Lorsque trois notes ou plus s'agglutinent dans un même empilement, -@code{merge-differently-headed} ne peut mener à bien la fusion des deux -notes qui devraient l'être. Pour obtenir une fusion optimale, appliquez -un décalage (@code{\shift}) à la note qui ne devrait pas s'empiler. -Dans la première mesure de l'exemple suivant, -@code{merge-differently-headed} ne fonctionne pas --- la tête de la -blanche est noire. Dans la seconde mesure, @code{\shiftOn} s'applique -pour sortir le sol (@code{g}) de l'alignement, et -@code{merge-differently-headed} fonctionne correctement. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\override Staff.NoteCollision #'merge-differently-headed = ##t -<< - { d=''2 g2 } \\ - { \oneVoice d=''8 c8 r4 e,8 c'8 r4 } \\ - { \voiceFour e,,2 e'2} ->> -<< - { d'=''2 \shiftOn g2 } \\ - { \oneVoice d=''8 c8 r4 e,8 c'8 r4 } \\ - { \voiceFour e,,2 e'2} ->> -@end lilypond - - -@predefined -@funindex \oneVoice -@code{\oneVoice}, -@funindex \voiceOne -@code{\voiceOne}, -@funindex \voiceTwo -@code{\voiceTwo}, -@funindex \voiceThree -@code{\voiceThree}, -@funindex \voiceFour -@code{\voiceFour}. - -@funindex \shiftOn -@code{\shiftOn}, -@funindex \shiftOnn -@code{\shiftOnn}, -@funindex \shiftOnnn -@code{\shiftOnnn}, -@funindex \shiftOff -@code{\shiftOff} : toutes ces commandes précisent le degré de décalage -des notes de la voix courante. Les voix externes --- habituellement, -les voix une et deux --- ont @code{\shiftOff}, alors que les voix -internes --- trois et quatre --- ont @code{\shiftOn}. @code{\shiftOnn} -et @code{\shiftOnnn} sont des niveaux supplémentaires de décalage. -@endpredefined - - -Quand LilyPond est dépassé, la propriété @code{force-hshift} de l'objet -@rinternals{NoteColumn}, et des silences à hauteur déterminée, peuvent -s'avérer utiles pour dicter au programme les choix de placement. - -@lilypond[quote,verbatim,ragged-right] -\relative << -{ - - -} \\ { - - \once \override NoteColumn #'force-hshift = #1.7 - -} >> -@end lilypond - - -@seealso -Référence du programme : les objets appropriés pour résoudre les -collisions sont @rinternals{NoteCollision} et -@rinternals{RestCollision}. - - -@knownissues - -Quand @code{merge-differently-headed} est utilisé avec une croche ou -une valeur plus courte à hampe vers le haut, et une blanche hampe vers -le bas, la croche se retrouve à la mauvaise place. - -Il n'y a aucune prise en charge des agrégats dans lesquels une même note -apparaît avec différentes altérations. Il est conseillé d'avoir recours -aux enharmoniques, ou d'utiliser la notation spécifique de cluster --- -voir @ref{Clusters}. - - - -@node Automatic part combining -@unnumberedsubsubsec Automatic part combining -@cindex regroupement automatique de parties -@cindex parties, combiner des - -Le regroupement automatique de parties vous permet de fusionner deux -pupitres sur une seule portée, ceci dans le but de créer des -partitions d'orchestre. Lorsque les deux parties sont identiques sur -une certaine durée, une seule s'affiche. Lorsqu'elles diffèrent, -deux voix séparées apparaissent, avec des hampes dont la direction est -gérée automatiquement. Vous pouvez aussi identifier et faire -ressortir les solos et parties @emph{a due}. - -Voici la syntaxe qui permet de combiner des parties : - -@example -\partcombine @var{musicexpr1} @var{musicexpr2} -@end example - - -L'exemple suivant illustre les fonctionnalités élémentaires du -combinateur de parties : positionner les parties sur une portée, gérer -la direction des hampes et de la polyphonie. - -@lilypond[quote,verbatim,ragged-right,fragment] -\new Staff \partcombine - \relative g' { g g a( b) c c r r } - \relative g' { g g r4 r e e g g } -@end lilypond - -Le premier @code{sol} n'apparaît qu'une seule fois, alors qu'il a été -spécifié deux fois (une fois dans chacune des parties). La direction -des hampes et des liaisons de tenue ou de phrasé est gérée -automatiquement, selon qu'il s'agisse d'un solo ou d'un unisson. La -première partie, dont le contexte s'appellera @code{one}, aura toujours -ses hampes dirigées vers le haut et sera notée @q{Solo}, alors que la -deuxième, appelée @code{two}, aura des hampes vers le bas et sera -notée @q{Solo@tie{}II}. - -Si votre intention n'est que de fusionner les parties, sans ajouter de -texte, assignez faux à la propriété @code{printPartCombineTexts}. - -@lilypond[quote,verbatim,ragged-right,fragment,relative=2] -\new Staff << - \set Staff.printPartCombineTexts = ##f - \partcombine - \relative g' { g a( b) r } - \relative g' { g r4 r f } ->> -@end lilypond - -Le texte imprimé pour les sections solo ou à l'unisson se règle par -les propriétés @code{soloText}, @code{soloIIText}, et @code{aDueText}. - -@lilypond[quote,verbatim,ragged-right,fragment,relative=2] -\new Staff << - \set Score.soloText = #"ichi" - \set Score.soloIIText = #"ni" - \set Score.aDueText = #"tachi" - \partcombine - \relative g' { g4 g a( b) r } - \relative g' { g4 g r r f } ->> -@end lilypond - -LilyPond interprète dans un contexte @rinternals{Voice} les -arguments fournis à @code{\partcombine}. Si vous travaillez avec des -octaves relatives, spécifiez @code{\relative} dans chacune des -expressions musicales, comme ceci : - -@example -\partcombine - \relative @dots{} @var{musicexpr1} - \relative @dots{} @var{musicexpr2} -@end example - -@noindent -Une section @code{\relative} en dehors de @code{\partcombine} sera -sans effet sur les hauteurs de @var{musicexpr1} et @var{musicexpr2}. - - -@seealso -Référence du programme : @rinternals{PartCombineMusic}. - - -@knownissues - -Lorsque @code{printPartCombineTexts} est actif et que les deux voix -jouent souvent les mêmes notes, le combinateur peut afficher @code{a2} -plus d'une fois par mesure. - -@code{\partcombine} ne peut s'inscrire dans un bloc @code{\times}. - -@code{\partcombine} ne peut s'inscrire dans un bloc @code{\relative}. - -En interne, @code{\partcombine} interprète les deux arguments en tant -que @code{Voice}s, dénommées @code{one} et @code{two}, puis décide de -quand les parties seront fusionnées. Par conséquent, si les arguments -changent pour d'autres noms de contexte @rinternals{Voice}, les -événements qu'ils contiendraient seront ignorés. - - -@node Writing music in parallel -@unnumberedsubsubsec Writing music in parallel - -@cindex écrire la musique en parallèle -@cindex musique en parallèle -@cindex musique entremêlée - -On peut écrire plusieurs voix de façon entremêlée : - -@lilypond[quote,fragment,verbatim] -\parallelMusic #'(voiceA voiceB) { - r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' e''] | - c'2 c'2 | - r8 a'16[ d''] f''[ a' d'' f''] r8 a'16[ d''] f''[ a' d'' f''] | - c'2 c'2 | -} -\new StaffGroup << - \new Staff \new Voice \voiceA - \new Staff \new Voice \voiceB ->> -@end lilypond - -Ceci fonctionne bien avec la musique pour piano : - -@lilypond[quote,verbatim] -music = { - \key c \major - \time 4/4 - \parallelMusic #'(voiceA voiceB voiceC voiceD) { - % Bar 1 - r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' -e''] | - c'2 c'2 | - r8 a16[ d'] f'[ a d' f'] r8 a16[ d'] f'[ a d' f'] | - c2 c2 | - - % Bar 2 - a'8 b' c'' d'' e'' f'' g'' a'' | - d'4 d' d' d' | - c16 d e f d e f g e f g a f g a b | - a,4 a,4 a,4 a,4 | - - % Bar 3 ... - } -} - -\score { - \new PianoStaff << - \music - \new Staff << - \voiceA \\ - \voiceB - >> - \new Staff { - \clef bass - << - \voiceC \\ - \voiceD - >> - } - >> -} -@end lilypond - - diff --git a/Documentation/fr/user/spacing.itely b/Documentation/fr/user/spacing.itely deleted file mode 100644 index 23a85a5e8a..0000000000 --- a/Documentation/fr/user/spacing.itely +++ /dev/null @@ -1,359 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 964d024dd4f022ba7cd66adc13c0169035d4c4e5 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Frédéric Chiasson, Jean-Charles Malahieude - -@node Spacing issues -@chapter Spacing issues - - -@menu -* Paper and pages:: -* Music layout:: -* Breaks:: -* Vertical spacing:: -* Horizontal spacing:: -* Fitting music onto fewer pages:: -@end menu - -@node Paper and pages -@section Paper and pages - -@untranslated - - -@menu -* Paper size:: -* Page formatting:: -@end menu - -@node Paper size -@subsection Paper size - -@untranslated - - -@node Page formatting -@subsection Page formatting - -@untranslated - - -@node Music layout -@section Music layout - -@untranslated - - -@menu -* Setting the staff size:: -* Score layout:: -@end menu - -@node Setting the staff size -@subsection Setting the staff size - -@untranslated - - -@node Score layout -@subsection Score layout - -@untranslated - - -@node Breaks -@section Breaks - -@untranslated - - -@menu -* Line breaking:: -* Page breaking:: -* Optimal page breaking:: -* Optimal page turning:: -* Minimal page breaking:: -* Explicit breaks:: -* Using an extra voice for breaks:: -@end menu - -@node Line breaking -@subsection Line breaking - -@untranslated - - -@node Page breaking -@subsection Page breaking - -@untranslated - - -@node Optimal page breaking -@subsection Optimal page breaking - -@untranslated - - -@node Optimal page turning -@subsection Optimal page turning - -@untranslated - - -@node Minimal page breaking -@subsection Minimal page breaking - -@untranslated - - -@node Explicit breaks -@subsection Explicit breaks - -@untranslated - - -@node Using an extra voice for breaks -@subsection Using an extra voice for breaks - -@untranslated - - -@node Vertical spacing -@section Vertical spacing - -@untranslated - - -@menu -* Vertical spacing inside a system:: -* Vertical spacing between systems:: -* Explicit staff and system positioning:: -* Two-pass vertical spacing:: -* Vertical collision avoidance:: -@end menu - -@node Vertical spacing inside a system -@subsection Vertical spacing inside a system - -@untranslated - - -@node Vertical spacing between systems -@subsection Vertical spacing between systems - -@untranslated - - -@node Explicit staff and system positioning -@subsection Explicit staff and system positioning - -@untranslated - - -@node Two-pass vertical spacing -@subsection Two-pass vertical spacing - -@untranslated - - -@node Vertical collision avoidance -@subsection Vertical collision avoidance - -@untranslated - - -@node Horizontal spacing -@section Horizontal Spacing - -@untranslated - - -@menu -* Horizontal spacing overview:: -* New spacing area:: -* Changing horizontal spacing:: -* Line length:: -* Proportional notation:: -@end menu - -@node Horizontal spacing overview -@subsection Horizontal spacing overview - -@untranslated - - -@node New spacing area -@subsection New spacing area - -@untranslated - - -@node Changing horizontal spacing -@subsection Changing horizontal spacing - -@untranslated - - -@node Line length -@subsection Line length - -@untranslated - - -@node Proportional notation -@subsection Proportional notation - -Les notes peuvent s'espacer proportionnellement en assignant une durée -à @code{proportionalNotationDuration} - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -<< - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - \new Staff { c8[ c c c c c] c4 c2 r2 } - \new Staff { c2 \times 2/3 { c8 c c } c4 c1 } ->> -@end lilypond - -Manipuler cette propriété affectera l'espacement idéal uniquement pour -des notes consécutives. Pour obtenir une véritable notation -proportionnelle, vous devrez tenir compte des réglages suivants : - -@itemize @bullet - -@item La véritable notation proportionnelle exige que des symboles -puissent en écraser d'autres. Pour y parvenir, il faut retirer le -@rinternals{Separating_line_group_engraver} du contexte -@rinternals{Staff}. - -@item L'influence en matière d'espacement induite par le formatage -(clés, barres de mesure, etc) s'annule en assignant -@emph{vrai}@tie{}(#t) à la propriété @code{strict-note-spacing} de -l'objet @rinternals{SpacingSpanner}. - -@item Les affinages optiques se règlent en assignant @emph{vrai} à la -propriété @code{uniform-stretching} du @rinternals{SpacingSpanner}. - -@end itemize - - -@seealso -Exemples : @rlsr{Spacing}. - -Le fichier @file{input/proportional.ly} illustre la notation -proportionnelle stricte. - - -@node Fitting music onto fewer pages -@section Fitting music onto fewer pages - -@menu -* Displaying spacing:: -* Changing spacing:: -@end menu - -@node Displaying spacing -@subsection Displaying spacing - -@untranslated - - -@node Changing spacing -@subsection Changing spacing - -Parfois, une partition peut se terminer avec seulement -un ou deux systèmes sur la dernière page. Ceci peut être ennuyeux -surtout si vous constatez, en regardant les pages précédentes, qu'il -reste encore beaucoup de place sur celles-ci. - -Si vous vous intéressez aux problèmes de mise en page, -@code{annotate-spacing} peut alors être un outil d'une valeur -inestimable. Cette commande imprime les valeurs -de nombreuses commandes d'espacement concernant la mise en page. -Consultez @ref{Displaying spacing} pour de plus amples informations. À l'aide -des informations données par @code{annotate-spacing}, on peut -voir quelles marges il est souhaitable de modifier afin de résoudre le -problème. - - -En plus d'agir sur les marges, il existe d'autres possibilités -qui permettent de gagner de la place. - -@itemize -@item -Demander à LilyPond de placer les systèmes aussi -près que possible les uns des autres (pour en disposer autant -que possible sur une page), tout en répartissant les systèmes afin -de ne pas laisser de blanc en bas de la dernière page. - -@example -\paper @{ - between-system-padding = #0.1 - between-system-space = #0.1 - ragged-last-bottom = ##f - ragged-bottom = ##f -@} -@end example - -@item -Obliger LilyPond à mettre un certain nombre de systèmes -par page. Par exemple, si LilyPond veut placer onze systèmes dans une page, -vous pouvez l'obliger à n'en mettre que dix. - -@example -\paper @{ - system-count = #10 -@} -@end example - -@item -Supprimer (ou réduire) les objets qui augmentent la hauteur du -système. C'est le cas en particulier de certaines reprises (avec des -alternatives) qui placent des crochets au dessus des portées. Si ces crochets -de reprise se poursuivent sur deux systèmes, ils prendront plus de -place que s'ils sont regroupés sur un même système. - -Un autre exemple : déplacer les nuances qui @qq{débordent} d'un système. - -@lilypond[verbatim,quote,fragment] -\relative c' { - e4 c g\f c - \override DynamicLineSpanner #'padding = #-1.8 - \override DynamicText #'extra-offset = #'( -2.1 . 0) - e4 c g\f c -} -@end lilypond - -@item -Modifier l'espacement vertical avec @code{SpacingSpanner}. Reportez-vous à -@ref{Changing horizontal spacing} pour plus de détails. - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 4) - } - } -} -@end lilypond - -@end itemize - diff --git a/Documentation/fr/user/specialist.itely b/Documentation/fr/user/specialist.itely deleted file mode 100644 index d4e7647283..0000000000 --- a/Documentation/fr/user/specialist.itely +++ /dev/null @@ -1,37 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 6f84d7b264bf1faa8d9c586bbf06c762ae53183a - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Specialist notation -@chapter Specialist notation - -Ce chapitre explique comment créer la notation musicale -spécifique à certains intruments ou certaines époques. - -@menu -* Vocal music:: -* Keyboard and other multi-staff instruments:: -* Unfretted string instruments:: -* Fretted string instruments:: -* Percussion:: -* Wind instruments:: -* Chord notation:: -* Ancient notation:: -* World music:: -@end menu - -@include vocal.itely -@include keyboards.itely -@include unfretted-strings.itely -@include fretted-strings.itely -@include percussion.itely -@include wind.itely -@include chords.itely -@include ancient.itely -@include world.itely diff --git a/Documentation/fr/user/staff.itely b/Documentation/fr/user/staff.itely deleted file mode 100644 index a27ab1a12f..0000000000 --- a/Documentation/fr/user/staff.itely +++ /dev/null @@ -1,656 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: bdf8540b74167817eab96ed3d13b35477217f9fe - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave, Jean-Charles Malahieude -@c Translation checkers: John Mandereau - -@node Staff notation -@section Staff notation - -@lilypondfile[quote]{staff-headword.ly} - -Cette section aborde les détails de gravure de la portée, la -réalisation de partitions avec plusieurs portées et l'ajout -d'indications globales d'exécution, présentes sur certaines portées -seulement. - -@menu -* Displaying staves:: -* Modifying single staves:: -* Writing parts:: -@end menu - - -@node Displaying staves -@subsection Displaying staves - -@menu -* Instantiating new staves:: -* Grouping staves:: -* Nested staff groups:: -@end menu - -@node Instantiating new staves -@unnumberedsubsubsec Instantiating new staves - -@untranslated - - -@node Grouping staves -@unnumberedsubsubsec Grouping staves - -@cindex système, début de -@cindex crochet vertical -@cindex accolade verticale -@cindex portée multiple -@cindex portées, groupe de - -De nombreuses partitions sont écrites sur plusieurs portées. Ces -portées peuvent être regroupées de quatre manières différentes. - -@itemize @bullet -@item Le groupe de portées est attaché par une accolade sur la gauche, -et les barres de mesure sont d'un seul tenant. Il s'agit du contexte -@rinternals{GrandStaff}. - -@lilypond[verbatim,ragged-right,quote] -\new GrandStaff -\relative << - \new Staff { c1 c } - \new Staff { c c } ->> -@end lilypond - -@item Le groupe de portées est attaché par un crochet, et les barres -de mesure sont d'un seul tenant. Il s'agit du contexte -@rinternals{StaffGroup}. - -@lilypond[verbatim,ragged-right,quote] -\new StaffGroup -\relative << - \new Staff { c1 c } - \new Staff { c c } ->> -@end lilypond - - - -@item Le groupe de portées est attaché par un crochet, mais les barres -de mesure sont séparées d'une portée à l'autre. Il s'agit du contexte -@rinternals{ChoirStaff}. - -@lilypond[verbatim,ragged-right,quote] -\new ChoirStaff -\relative << - \new Staff { c1 c } - \new Staff { c c } ->> -@end lilypond - -@item Les portées du groupe ne sont pas attachées (hormis par une -simple ligne verticale). Les barres de mesure sont détachées. Il -s'agit de l'assemblage par défaut. - -@lilypond[verbatim,ragged-right,quote] -\relative << - \new Staff { c1 c } - \new Staff { c c } ->> -@end lilypond -@end itemize - - -@seealso -Les barres de mesure au début de chaque système prennent l'un des styles -@rinternals{SystemStartBar}, @rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}. Dans chaque contexte, seul l'un de -ces styles est utilisé, et c'est la propriété -@code{systemStartDelimiter} qui détermine lequel. - - -@commonprop - -Les accolades et crochets délimitant les systèmes peuvent être imbriqués -en profondeur, - -@lilypond[quote,ragged-right,verbatim] -\new StaffGroup -\relative << - \set StaffGroup.systemStartDelimiterHierarchy - = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d) - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } ->> -@end lilypond - -@node Nested staff groups -@unnumberedsubsubsec Nested staff groups - -@untranslated - -@node Modifying single staves -@subsection Modifying single staves - -Cette section explique le réglage de la gravure de chaque portée, -comme la taille de portée ou le nombre de lignes ; sont aussi décrits -la suspension et la reprise de portées et les portées d'@emph{ossia}. - - -@menu -* Staff symbol:: -* Ossia staves:: -* Hiding staves:: -@end menu - -@node Staff symbol -@unnumberedsubsubsec Staff symbol - -@cindex symbole de portée -@cindex portée, lignes de - -Les notes, nuances, etc. sont regroupés dans un assemblage de lignes -horizontales, que l'on nomme la portée (en anglais @qq{staff}, et -@qq{staves} au pluriel). Dans LilyPond, ces lignes sont dessinées au -moyen d'un objet de mise en forme à part entière, nommé @code{staff -symbol} --- symbole de portée. - - -L'aspect du symbole de portée peut être modifié selon différentes -propriétés, telles que le nombre de lignes, leur épaisseur, ou leur -éloignement. -@ignore -Vous en trouverez des exemples dans -@lsr{staff,changing-the-number-of-lines-in-a-staff.ly} et -@lsr{staff,changing-the-staff-size.ly}. -@end ignore - -De plus, la portée peut commencer et s'arrêter où l'on veut, grâce aux -commandes @code{\startStaff} et @code{\stopStaff}. - -@lilypond[verbatim,relative=2,fragment] -b4 b -\override Staff.StaffSymbol #'line-count = 2 -\stopStaff \startStaff -b b -\revert Staff.StaffSymbol #'line-count -\stopStaff \startStaff -b b -@end lilypond - -Cette manière de procéder peut être utilisée pour introduire des -@qq{ossias}, ou dans des partitions à nombre de portées variable, -comme sur l'exemple suivant : - -@cindex ossia - -@c @lilypondfile{ossia.ly} - -@cindex lignes de portée, nombre de -@cindex lignes de portée, épaisseur des -@cindex épaisseur des lignes de portées -@cindex nombre de lignes de portée - - -@seealso -Référence du programme : @rinternals{StaffSymbol}. - -Exemples : @rlsr{Staff notation}. - - -@node Ossia staves -@unnumberedsubsubsec Ossia staves - -@untranslated - - -@node Hiding staves -@unnumberedsubsubsec Hiding staves - -@cindex Frenched scores -@cindex Masquer des portées - -Dans les partitions d'orchestre, les portées qui n'ont que des -silences sont habituellement masquées afin de gagner de la place. Ce -style d'édition s'appelle en anglais @qq{French Score}. -Cette fonctionnalité est activée par défaut dans les contextes -@rinternals{Lyrics}, @rinternals{ChordNames} et -@rinternals{FiguredBass}. Lorsque des lignes appartenant à ces -contextes se retrouvent vides après placement des sauts de ligne, -elles sont effacées. - -En ce qui concerne les portées normales, il existe un contexte -@rinternals{Staff} spécifique qui permet d'arriver à ce résultat : -les portées ne contenant rien ou uniquement des silences multi-mesures -seront retirées. La définition de ce contexte est enregistrée dans la -variable @code{\RemoveEmptyStaffContext}. Voyez comment la deuxième -portée disparaît du deuxième système : - -@lilypond[quote,ragged-right,verbatim] -\layout { - \context { \RemoveEmptyStaffContext } -} - -{ - \relative c' << - \new Staff { e4 f g a \break c1 } - \new Staff { c4 d e f \break R1 } - >> -} -@end lilypond - -Le premier système comportera absolument toutes les portées. Si vous -voulez masquer les portées vides y compris pour le premier système, -vous devrez assigner vrai à la propriété @code{remove-first} dans -@rinternals{VerticalAxisGroup}. - -@example -\override Score.VerticalAxisGroup #'remove-first = ##t -@end example - -Pour masquer d'autres types de contextes, vous pouvez utiliser -@code{\AncientRemoveEmptyStaffContext} ou -@code{\RemoveEmptyRhythmicStaffContext}. - -Une application particulière de cette fonctionnalité est la création -d'une @emph{ossia} --- variante d'une partie de la mélodie --- affichée à -l'aide d'une portée supplémentaire. - - -@node Writing parts -@subsection Writing parts - -@menu -* Metronome marks:: -* Instrument names:: -* Quoting other voices:: -* Formatting cue notes:: -@end menu - -@node Metronome marks -@unnumberedsubsubsec Metronome marks - -@cindex Tempo -@cindex battements par minute -@cindex indication métronomique - -Le métronome se règle de la manière suivante, -@example -\tempo @var{durée} = @var{par minute} -@end example - -Les indications métronomiques seront interprétées, dans le fichier -MIDI, comme des changements de tempo. Ils seront imprimés sur la -partition comme ici : -@funindex \tempo -@lilypond[quote,ragged-right,verbatim,fragment] -\tempo 8.=120 c''1 -@end lilypond - - -@commonprop - -Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans -pour autant l'imprimer. Il suffit alors de le rendre invisible pour -l'impression : -@example -\once \override Score.MetronomeMark #'transparent = ##t -@end example - -Vous pouvez imprimer d'autres indications métronomiques, telles que -des équivalences, en utilisant ce type d'étiquette textuelle : -@lilypond[quote,ragged-right,verbatim,relative,fragment] -c4^\markup { - ( - \smaller \general-align #Y #DOWN \note #"16." #1 - = - \smaller \general-align #Y #DOWN \note #"8" #1 - ) } -@end lilypond - -@noindent -Pour plus de détails, voir @ref{Formatting text}. - - -@seealso -Référence du programme : @rinternals{MetronomeMark}. - - -@knownissues - -Les risques de collision ne sont pas vérifiés. Dans le cas où il y -aurait des notes au dessus de la portée ou d'autres objets -(articulations, liaisons, texte, etc), l'indication métronomique peut -venir en surimpression. Augmentez alors le décalage de cette -indication par rapport à la portée : - -@example -\override Score.MetronomeMark #'padding = #2.5 -@end example - - -@node Instrument names -@unnumberedsubsubsec Instrument names - -Dans un conducteur, les noms d'instrument sont portés en regard de -chacune des portées. - -Ce résultat s'obtient en spécifiant -@rinternals{Staff}.@code{instrumentName} et -@rinternals{Staff}.@code{shortInstrumentName}, ou -@rinternals{PianoStaff}.@code{instrumentName} et -@rinternals{PianoStaff}.@code{shortInstrumentName}. L'argument -textuel apparaîtra avant le début de la portée. La première ligne -affichera @code{instrumentName}, et les suivantes -@code{shortInstrumentName}. - -@lilypond[quote,verbatim,ragged-right,relative=1,fragment] -\set Staff.instrumentName = #"Ploink " -\set Staff.shortInstrumentName = #"Plk " -c1 -\break -c'' -@end lilypond - -Le recours à la commande @code{\markup} permet de construire des noms -d'instruments particuliers, tels que - -@lilypond[quote,fragment,verbatim,ragged-right] -\set Staff.instrumentName = \markup { - \column { "Clarinetti" - \line { "in B" \smaller \flat } } } -c''1 -@end lilypond - -Si vous centrez le nom d'un instrument, il faudra le faire pour tous - -@lilypond[quote,verbatim,ragged-right] -{ << -\new Staff { - \set Staff.instrumentName = \markup { - \center-column { "Clarinetti" - \line { "in B" \smaller \flat } } } - c''1 -} -\new Staff { - \set Staff.instrumentName = \markup{ \center-align { Vibraphone }} - c''1 -} ->> -} -@end lilypond - -Losque le nom d'un instrument est relativement long, il est judicieux -d'augmenter le retrait --- @code{indent} --- au sein du bloc -@code{\layout}. - -Procédez comme suit pour centrer des noms d'instruments tout en -préservant un décalage par rapport à la portée : - -@lilypond[quote,verbatim,ragged-right] -\new StaffGroup \relative -<< - \new Staff { - \set Staff.instrumentName = \markup { \hcenter-in #10 "blabla" } - c1 c1 - } - \new Staff { - \set Staff.instrumentName = \markup { \hcenter-in #10 "blo" } - c1 c1 - } ->> -@end lilypond - -Des noms d'instruments peuvent s'utiliser dans d'autres contextes, tels -que @code{GrandStaff}, @code{ChoirStaff}, ou @code{StaffGroup}, à -condition de leur affecter le graveur approprié : - -@example -\layout@{ - \context @{\GrandStaff \consists "Instrument_name_engraver"@} -@} -@end example - -@noindent -Pour de plus amples informations sur la manière d'activer ou -désactiver un graveur, voir @ref{Modifying context plug-ins}. - -Vous pouvez changer d'instrument en cours de morceau : - -@lilypond[quote,fragment,verbatim,ragged-right] -\set Staff.instrumentName = #"First" -\set Staff.shortInstrumentName = #"one" -c1 c c c \break -c1 c c c \break -\set Staff.instrumentName = #"Second" -\set Staff.shortInstrumentName = #"two" -c1 c c c \break -c1 c c c \break -@end lilypond - - -@seealso -Référence du programme : @rinternals{InstrumentName}. - - -@node Quoting other voices -@unnumberedsubsubsec Quoting other voices - -@cindex cues -@cindex citation - -Grâce aux citations de répliques, vous pouvez insérer directement dans une partie -des fragments d'une autre partie. Avant qu'une partie ne puisse être -mentionnée ailleurs, elle doit être considérée comme reproductible. -C'est le but de la commande @code{\addQuote}. - -@example -\addQuote @var{nom} @var{musique} -@end example - - -@noindent -Ici, @var{nom} représente une chaîne d'identification, et -@var{musique} n'importe quelle musique. Voici un exemple de -@code{\addQuote} : - -@example -\addQuote clarinet \relative c' @{ - f4 fis g gis -@} -@end example - -Vous devez placer cette commande au niveau le plus haut, c'est à dire -en dehors de tout bloc de musique. - -Après avoir fait appel à @code{\addquote}, la citation interviendra -en utilisant @code{\quoteDuring} ou @code{\cueDuring} : - -@example -\quoteDuring #@var{nom} @var{musique} -@end example - -Au cours d'une partie, des extraits de répliques peuvent être cités en -utilisant la commande @code{\quoteDuring}. - -@example -\quoteDuring #"clarinet" @{ s2. @} -@end example - -Cela citera trois noires (la durée de @code{s2.}) appartenant à la -voix @code{clarinette} précédemment générée. - -Plus précisément, on s'arrête à cet instant de la partie en cours -d'impression, et l'on extrait les notes à ce même instant dans la voix -citée --- celle qui contient @code{\addQuote}. C'est la raison pour -laquelle l'argument de @code{\addQuote} doit englober toute la voix en -question, y compris les éventuels silences à son début. - -Les citations tiennent compte des transpositions, aussi bien celle de -l'instrument d'origine que celle de la partie où elle intervient, dans -la mesure où elles sont spécifiées par la commande @code{\transposition}. - -@lilypond[quote,ragged-right,verbatim] -\addQuote clarinet \relative c' { - \transposition bes - f4 fis g gis -} - -{ - e'8 f'8 \quoteDuring #"clarinet" { s2 } -} -@end lilypond - -Le type d'événements pris en charge pour la citation peut se régler -avec la propriété @code{quotedEventTypes}. Par défaut, sa valeur est -fixée à @code{(note-event rest-event)}, ce qui signifie que seuls les -notes et silences seront mentionnés par @code{\quoteDuring}. -Définir - -@example -\set Staff.quotedEventTypes = - #'(note-event articulation-event dynamic-event) -@end example - -@noindent -reproduira les notes (mais pas les silences), ainsi que les scripts -et nuances. - -@knownissues - -Seul le contenu de la première @rinternals{Voice} rencontrée dans la -partie marquée d'une commande @code{\addQuote} pourra être retenu. Par -voie de conséquence, @code{music} ne saurait comprendre de @code{\new} -ou une instance @code{context Voice} qui la ferait passer à une autre voix. - -Citer des notes d'ornement ne fonctionne pas, et peut même entraîner -un blocage de LilyPond. - -Citer des triolets imbriqués peut entraîner un résultat de médiocre qualité. - - -@seealso -Dans ce manuel : @ref{Instrument transpositions}. - -Exemples : @rlsr{Staff notation}. - -Référence du programme : @rinternals{QuoteMusic}. - - -@node Formatting cue notes -@unnumberedsubsubsec Formatting cue notes - -@cindex petites notes, formater des - -La section précédente indiquait comment insérer des notes d'une autre -voix. Nous allons maintenant voir une fonction musicale avancée, -@code{\cueDuring}, qui facilite le formatage des petites notes. - -Sa syntaxe est : - -@example - \cueDuring #@var{nom} #@var{updown} @var{musique} -@end example - -Des notes issues de la partie @var{nom} s'insèreront dans une -@rinternals{Voice} nommée @code{cue}, simultanément avec -@var{musique} --- habituellement un silence. L'apparition des petites -notes initialise une polyphonie temporaire pour la portée concernée. -L'argument @var{updown} détermine si ces petites notes seront -attachées à la première ou à la seconde voix. - - -@lilypond[verbatim,ragged-right] -smaller = { - \set fontSize = #-2 - \override Stem #'length-fraction = #0.8 - \override Beam #'thickness = #0.384 - \override Beam #'length-fraction = #0.8 -} - -\addQuote clarinet \relative { - R1*20 - r2 r8 c' f f -} - -\new Staff \relative << - - % setup a context for cue notes. - \new Voice = "cue" { \smaller \skip 1*21 } - - \set Score.skipBars = ##t - - \new Voice { - R1*20 - \cueDuring #"clarinet" #UP { - R1 - } - g4 g2. - } ->> -@end lilypond - - -Quelques indications pour une citation efficace : - -@itemize @bullet -@item - Les notes de la citation sont dans une police plus petite. -@item - La citation comporte une étiquette indiquant l'instrument qui joue. -@item - Lorsque la partie originale reprend sa place, rappeler l'instrument. - -@c really? Are you sure about that last point? I'll check after 3.0 -gp - -@c Yes, this is good practice. Otherwise, the start of the original -@c part can only be seen from the font size. This is not good enough -@c for sight-reading. It is possilbe to use other -@c markers (e.g. a big close-bracket over the staff) to indicate the cue -@c notes are -@c finished. -@c -hwn - - -Tout autre modification introduite par la citation devrait être -annulée. Par exemple, si l'instrument cité utilise une autre clé, il -faudra revenir à la clé habituelle. - -@end itemize - -La macro @code{\transposedCueDuring} est particulièrement adaptée pour -des instrument ayant une tessiture éloignée, comme dans le cas d'un -piccolo cité dans une partie de contrebasson. - -@lilypond[verbatim,ragged-right,quote] -picc = \relative c''' { - \clef "treble^8" - R1 | - c8 c c e g2 | - a4 g g2 | -} -\addQuote "picc" { \picc } - -cbsn = \relative c, { - \clef "bass_8" - c4 r g r - \transposedCueDuring #"picc" #UP c,, { R1 } | - c4 r g r | -} - -<< - \context Staff = "picc" \picc - \context Staff = "cbsn" \cbsn ->> -@end lilypond - - diff --git a/Documentation/fr/user/templates.itely b/Documentation/fr/user/templates.itely deleted file mode 100644 index 7fc8a1268a..0000000000 --- a/Documentation/fr/user/templates.itely +++ /dev/null @@ -1,90 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: dd7767dcac679762a47fb629fd8e516d9ac954b4 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Templates -@appendix Templates - -Cette annexe du manuel propose des patrons de partition Lilypond, prets à -l'emploi. Il vous suffira d'y ajouter quelques notes, de lancer -LilyPond, et d'aprécier le résultat. - - -@menu -* Single staff:: -* Piano templates:: -* String quartet:: -* Vocal ensembles:: -* Ancient notation templates:: -* Jazz combo:: -* lilypond-book templates:: -@end menu - -@node Single staff -@appendixsec Single staff - -@untranslated - - -@appendixsubsec Notes only -@appendixsubsec Notes and lyrics -@appendixsubsec Notes and chords -@appendixsubsec Notes, lyrics, and chords. -@node Piano templates -@appendixsec Piano templates - -@untranslated - - -@appendixsubsec Solo piano -@appendixsubsec Piano and melody with lyrics -@appendixsubsec Piano centered lyrics -@appendixsubsec Piano centered dynamics -@node String quartet -@appendixsec String quartet - -@untranslated - - -@appendixsubsec String quartet -@appendixsubsec String quartet parts -@node Vocal ensembles -@appendixsec Vocal ensembles - -@untranslated - - -@appendixsubsec SATB vocal score -@appendixsubsec SATB vocal score and automatic piano reduction -@appendixsubsec SATB with aligned contexts -@node Ancient notation templates -@appendixsec Ancient notation templates - -@untranslated - - -@appendixsubsec Transcription of mensural music -@appendixsubsec Gregorian transcription template -@node Jazz combo -@appendixsec Jazz combo - -@untranslated - - -@node lilypond-book templates -@appendixsec lilypond-book templates - -@untranslated - - -@appendixsubsec LaTeX -@appendixsubsec Texinfo -@appendixsubsec xelatex - -@c -- SKELETON FILE -- diff --git a/Documentation/fr/user/text.itely b/Documentation/fr/user/text.itely deleted file mode 100644 index be7b015717..0000000000 --- a/Documentation/fr/user/text.itely +++ /dev/null @@ -1,793 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: bdf8540b74167817eab96ed3d13b35477217f9fe - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Jean-Charles Malahieude -@c Translation checkers: Valentin Villenave, John Mandereau - -@node Text -@section Text - -@lilypondfile[quote]{text-headword.ly} - -Nous allons voir ici comment insérer dans une partition du texte, avec -différentes possibilité de formatage. - -@cindex Texte, autres langues -Pour écrire des accents et autres caractères spéciaux, il suffit de -les insérer directement dans votre fichier LilyPond. Ce fichier devra -être sauvegardé avec l'encodage UTF-8. Pour plus d'informations, voir -@ref{Text encoding}. - -@menu -* Writing text:: -* Formatting text:: -* Fonts:: -@end menu - - -@node Writing text -@subsection Writing text - -@menu -* Text scripts:: -* Text and line spanners:: -* Text spanners:: -* Text marks:: -@end menu - -@node Text scripts -@unnumberedsubsubsec Text scripts - -@c I'm not fond of this "étiquette" wording of yours Jean-Charles; -@c j'utiliserais simplement l'expression "bloc \markup" afin -@c d'éviter toute confusion avec les \tags (qui méritent davantage -@c le titre d'étiquette, stricto sensu) -vv - -@cindex Étiquette de texte -@cindex blocs de texte -@cindex ajout de texte - -Vous pouvez placer arbitrairement des chaînes de caractères, ou -@ref{Formatting text} en langage LilyPond, au dessus ou au dessous des -notes en employant la syntaxe @code{c^"text"}. Par défaut, ces -indications n'affecteront en rien l'espacement des notes, sauf à -utiliser la commande @code{\textLengthOn}. - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c4^"longtext" \textLengthOn c4_"longlongtext" c4 -@end lilypond - -@noindent -Pour revenir à l'espacement par défaut, utilisez @code{\textLengthOff}. - -Des constructions plus élaborées d'étiquette peuvent être obtenues en -ayant recours à la commande @emph{markup} : - -@lilypond[fragment,ragged-right,verbatim,quote] -c'4^\markup { bla \bold bla } -@end lilypond - -La commande @code{\markup} est décrite plus en détails dans la section -@ref{Formatting text}. - - -@predefined -@funindex \textLengthOn -@code{\textLengthOn}, -@funindex \textLengthOff -@code{\textLengthOff}. -@endpredefined - - -@commonprop - -S'assurer que tous les éléments textuels et les paroles respectent -les marges du document requiert des calculs relativement lourds ; c'est -la raison pour laquelle LilyPond, par défaut, ne s'en préoccupe pas. -Vous pouvez cependant l'y forcer en définissant - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - - -@seealso -Dans ce manuel : @ref{Formatting text}. - -Référence du programme : @rinternals{TextScript}. - - -@node Text and line spanners -@unnumberedsubsubsec Text and line spanners - -Certaines indications d'interprétation comme @i{rallentando}, -@i{accelerando} ou @i{trilles}, s'incrivent textuellement et se -prolongent sur plusieurs mesures à l'aide d'une ligne pleine, pointillée -ou ondulée. - -Les routines chargées de matérialiser un @emph{glissando} sont tout à -fait adaptées à une gestion précise, à la fois du placement du texte, et -du calcul de l'envergure de sa ligne d'extension. La routine -@code{ly:line-interface::print} est plus particulièrement en charge de -déterminer les points d'ancrage de la ligne et de la dessiner selon le -style requis. - -Voici un exemple qui illustre les différents styles de ligne -disponibles, ainsi que la manière de les personnaliser. - -@lilypond[relative=2,ragged-right,verbatim,fragment] -d2 \glissando d'2 -\once \override Glissando #'style = #'dashed-line -d,2 \glissando d'2 -\override Glissando #'style = #'dotted-line -d,2 \glissando d'2 -\override Glissando #'style = #'zigzag -d,2 \glissando d'2 -\override Glissando #'style = #'trill -d,2 \glissando d'2 -@end lilypond - -L'information qui va déterminer les extrémités est calculée à la -volée pour chaque objet graphique. Il est tout à fait possible de les -régler vous-même : - -@lilypond[relative=2,ragged-right,verbatim,fragment] -e2 \glissando f -\once \override Glissando #'(bound-details right Y) = #-2 -e2 \glissando f -@end lilypond - -L'objet @code{Glissando}, comme tous ceux qui utilisent la routine -@code{ly:line-interface::print}, comporte une liste -d'associations. Dans le code ci-dessus, la valeur de @code{Y} est -fixée, dans la liste d'associations, à @code{-2} pour l'ancrage à -droite. Vous pouvez naturellement ajuster l'extrémité gauche en -remplaçant @code{right} (pour @code{droite}) par @code{left}. - -Si @code{Y} n'est pas fixé, sa valeur sera calculée en fonction de la -hauteur du point de référence droite de la ligne. - -Lorsque survient un saut de ligne, la liste des ancrages est -augmentée d'une liste complémentaire contenant @code{left-broken} -(brisure à gauche) et @code{right-broken} (brisure à droite), comme -dans l'exemple suivant : - -@lilypond[relative=2,ragged-right,verbatim,fragment] -\override Glissando #'breakable = ##T -\override Glissando #'(bound-details right-broken Y) = #-3 -c1 \glissando \break -f1 -@end lilypond - -Vous disposez des propriétés suivantes : - -@table @code -@item Y -Fixe l'ordonnée (coordonnée-Y) de l'extrémité, mesurée en taille de -portée. Il s'agit par défaut du centre de l'objet de rattachement ; -pour un glissando, ce sera le milieu de la tête de note. - -Pour des marques horizontales, telles du texte ou le trait d'un -trille, cette valeur est figée à 0. - -@item attach-dir -Détermine l'endroit où la ligne commence et finit, relativement à -l'objet de rattachement. Autrement dit, une valeur de @code{-1} (ou -@code{LEFT} pour gauche) fera commencer ou finir la ligne du côté -gauche de la tête de note de référence. - -@item X -Coordonnée absolue du point final. Dans la mesure où elle est calculée -à la volée, il n'y a pas vraiment de raison de l'outrepasser. - -@item stencil -Sous-propriété contenant les éventuels symboles présents avant ou -après la ligne. Destinée à un usage interne, nous vous recommendons -d'utiliser plutôt @code{text}. - -@item text -Marqueur qui sera analysé pour alimenter @code{stencil}. On y trouve -habituellement les @i{cresc.} ou @i{tr} des extenseurs horizontaux. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -c2\startTextSpan b c a\stopTextSpan -@end lilypond - -@item stencil-align-dir-y -@item stencil-offset -Lorsqu'ils ne sont pas définis, le tracé est tout simplement -positionné conformément aux sous-propriétés @code{X} et @code{Y}. En -fixant soit @code{stencil-align-dir-y}, soit @code{stencil-offset}, -vous pouvez décaler le coin du marqueur par rapport à l'extrémité de -la ligne. - -@lilypond[relative=1,fragment,verbatim] -\override TextSpanner #'(bound-details left stencil-align-dir-y) = #DOWN -\override TextSpanner #'(bound-details right stencil-align-dir-y) = #UP - -\override TextSpanner #'(bound-details left text) = #"gggg" -\override TextSpanner #'(bound-details right text) = #"hhhh" -c4^\startTextSpan c c c \stopTextSpan -@end lilypond - -@item arrow -Assigner à cette sous-propriété la valeur @code{vrai} (@code{#t}) -produira une terminaison en pointe de flèche. - -@item padding -Cette sous-propriété contrôle l'espace entre les extrémités de la -ligne, telles que définies, et la réalité. Sans ce léger décalage, le -début et la fin d'un glissando seraient en plein milieu des têtes de note. - -@end table - - -@seealso -Référence du programme : @rinternals{TextSpanner}, -@rinternals{Glissando}, @rinternals{VoiceFollower}, -@rinternals{TrillSpanner}, @rinternals{line-spanner-interface}. - -Exemples : @rlsr{Expressive marks}. - - -@node Text spanners -@unnumberedsubsubsec Text spanners - -@cindex Prolongateurs de texte - -Certaines indications d'interprétation comme @i{rallentando} ou -@i{accelerando} s'incrivent en toutes lettres et se prolongent sur -plusieurs mesures grâce à une ligne pointillée. Les commandes -@code{\startTextSpan} et @code{\stopTextSpan}, respectivement -attachées à la première et à la dernière note qu'elles concernent, -déterminent l'envergure de ces prolongateurs, ou extenseurs. - -La chaîne à imprimer, ainsi que son style, sont définis par des -propriétés, comme ici : - -@lilypond[quote,ragged-right,fragment,relative=1,verbatim] -c1 -\textSpannerDown -\override TextSpanner #'(bound-details left text) = - \markup { \upright "rall" } -c2\startTextSpan b c\stopTextSpan a -\break -\textSpannerUp -\override TextSpanner #'(bound-details left text) = - \markup { \italic "rit" } -c2\startTextSpan b c\stopTextSpan a -@end lilypond - - -@predefined -@funindex textSpannerUp -@code{\textSpannerUp}, -@funindex textSpannerDown -@code{\textSpannerDown}, -@funindex textSpannerNeutral -@code{\textSpannerNeutral}. -@endpredefined - - -@commonprop - -Pour obtenir une ligne pleine, utilisez - -@example -\override TextSpanner #'style = #'line -@end example - - -@seealso -Référence du programme : @rinternals{TextSpanner}. - - -@node Text marks -@unnumberedsubsubsec Text marks - -@cindex coda sur une barre de mesure -@cindex segno sur une barre de mesure -@cindex point d'orgue sur une barre de mesure -@cindex barres de mesure, symboles au dessus de -@funindex \mark - -La commande @code{\mark} est tout d'abord conçue pour les -@ref{Rehearsal marks}. Elle peut néanmoins servir à insérer des -signes de coda ou de segno, ou bien un point d'orgue, au dessus d'une -barre de mesure. Couplez-la alors à la commande @code{\markup} pour -avoir accès au symbole approprié (ils sont répertoriés dans -@ref{The Feta font}). - - -@lilypond[fragment,quote,ragged-right,verbatim,relative=2] -c1 \mark \markup { \musicglyph #"scripts.ufermata" } -c1 -@end lilypond - -@noindent -Le résultat de @code{\mark} n'apparaîtra que sur la portée supérieure -d'un système. Si vous introduisez la commande @code{\mark} au moment -d'une barre de mesure, la marque se placera au dessus de la barre. Si -vous y faites appel au milieu d'une mesure, cette marque sera -positionnée entre les notes. Si elle intervient en début de ligne, -elle sera placée juste avant la première note de cette portée. Enfin, -une marque qui tomberait sur un saut de ligne sera imprimée au début -de la ligne suivante. -@c IMO this is a bug; hopefully it'll be fixed soon, so I can -@c delete this sentence. -gp -Au cas où il n'y aurait pas de ligne à suivre, la marque ne sera pas imprimée. - - -@commonprop - -Pour imprimer une marque à la fin de la portée en cours, procédez -ainsi : - -@example -\override Score.RehearsalMark - #'break-visibility = #begin-of-line-invisible -@end example - -@code{\mark} est souvent bien utile pour porter une indication à la -fin d'une mesure. Pensez alors à modifier la propriété -@code{#'self-alignment}. - -@lilypond[fragment,quote,ragged-right,verbatim,relative=2] -\override Score.RehearsalMark - #'break-visibility = #begin-of-line-invisible -c1 c c c4 c c c -\once \override Score.RehearsalMark #'self-alignment-X = #right -\mark "D.S. al Fine " -@end lilypond - -Les indications textuelles peuvent s'aligner par rapport à d'autres -objets que des barres de mesure, tels que l'armure, la clé ou le chiffre de -mesure : - -@lilypond[fragment,quote,ragged-right,verbatim,relative=2] -\relative { - c1 - \key cis \major - \clef alto - \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) - \mark "on key" - cis - \key ces \major - \override Score.RehearsalMark #'break-align-symbols = #'(clef) - \clef treble - \mark "on clef" - ces - \override Score.RehearsalMark #'break-align-symbols = #'(time-signature) - \key d \minor - \clef tenor - \time 3/4 - \mark "on time" - c -} -@end lilypond - -Les symboles pris en charge par @code{break-align-symbols} sont : -@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos}, -@code{staff-bar}, @code{left-edge}, @code{key-cancellation}, -@code{key-signature}, et @code{time-signature}. - -Par défaut, les indications textuelles sont alignées avec le milieu -des objets de notation. Bien entendu, vous pouvez modifier les -propriétés @code{break-align-anchor-alignment} ou -@code{break-align-anchor} des objets en question pour obtenir un autre -résultat. - -@c KEEP LY -@lilypond[fragment,quote,ragged-right,verbatim] -{ - \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) - c1 - \key cis \major - - % La marque sera alignée sur le côté gauche de l'armure - \once \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT - \mark \default - cis1 - \key ces \major - - % La marque sera alignée sur le côté droit de l'armure - \once \override Staff.KeySignature #'break-align-anchor-alignment = #RIGHT - \mark \default - ces1 - \key cis \major - - % La marque sera alignée sur le côté gauche de l'armure, - % puis décalée vers la droite de 2 unités. - \once \override Staff.KeySignature #'break-align-anchor = #2 - \mark \default - ces1 -} -@end lilypond - -Bien que ces indications textuelles ne soient habituellement imprimées -qu'au niveau de la portée supérieure, vous pouvez forcer leur -affectation à chacune des portées : - -@lilypond[quote,ragged-right,verbatim,relative=2] -{ - \new Score \with { - \remove "Mark_engraver" - } - << - \new Staff \with { - \consists "Mark_engraver" - } - { c''1 \mark "foo" c'' } - \new Staff \with { - \consists "Mark_engraver" - } - { c'1 \mark "foo" c' } - >> -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{RehearsalMark}. - - -@node Formatting text -@subsection Formatting text - -@menu -* Text markup introduction:: -* Nested scores:: -* Page wrapping text:: -@end menu - -@node Text markup introduction -@unnumberedsubsubsec Text markup introduction - -@cindex étiquette -@cindex commentaire textuel -@cindex étiquette textuelle -@cindex texte ajouté - -La commande @code{\markup} permet d'ajouter du texte. Vous pouvez y -inclure des commandes, précédées d'un antislash @code{\} ; les -caractères @code{\} et @code{#} doivent être encadrés de guillemets -informatiques @code{"}. - -@lilypond[quote,verbatim,fragment,relative=1] -c1^\markup { hello } -c1_\markup { hi there } -c1^\markup { hi \bold there, is \italic {anyone home?} } -c1_\markup { "\special {weird} #characters" } -@end lilypond - -@noindent -Pour une liste des différentes commandes disponibles, consultez -@ref{Text markup commands}. - - -@code{\markup} est avant tout conçu pour gérer les -@rinternals{TextScript}s, mais rien ne s'oppose à son utilisation -pour traiter du texte avec LilyPond. - -@lilypond[quote,verbatim] -\header{ title = \markup{ \bold { foo \italic { bar! } } } } -\score{ - \relative c'' { - \override Score.RehearsalMark - #'break-visibility = #begin-of-line-invisible - \override Score.RehearsalMark #'self-alignment-X = #right - - \set Staff.instrumentName = \markup{ \column{ Alto solo } } - c2^\markup{ don't be \flat } - \override TextSpanner #'(bound-details left text) = \markup{\italic rit } - b2\startTextSpan - a2\mark \markup{ \large \bold Fine } - r2\stopTextSpan - \bar "||" - } - \addlyrics { bar, foo \markup{ \italic bar! } } -} -@end lilypond - -La commande @code{\markup} peut intervenir à tout moment, y compris en -dehors d'un bloc @code{\score}. Voir à ce sujet -@ref{Multiple scores in a book}. - -@lilypond[quote,ragged-right,verbatim] -\markup{ Here is some text. } -@end lilypond - -@cindex changer de police - -Le @emph{markup} de l'exemple précédent montre comment utiliser les -commandes de changement de police. Les commandes @code{\bold} et -@code{\italic} n'affectent que le premier mot qui les suit ; encadrez -les par des accolades si vous désirez que ces commandent s'appliquent -à plusieurs mots. - -@example -\markup @{ \bold @{ c'est moi @} @} -@end example - -@noindent -Une bonne habitude à prendre consiste à utiliser des accolades même -pour un seul mot, comme ici : -@example -\markup @{ qui \italic @{ est @} là ? @} -@end example - -En mode @emph{markup}, vous pouvez composer des expressions comme -en mathématiques, des documents XML ou bien les expressions musicales. -Vous pouvez empiler ces expressions grâce à la commande -@code{\column}, ou les centrer par rapport à leur milieu avec -@code{\center-column}. - -@lilypond[quote,verbatim,fragment,relative=1] -c1^\markup { \column { a bbbb \line { c d } } } -c1^\markup { \center-column { a bbbb c } } -c1^\markup { \line { a b c } } -@end lilypond - -Des listes non précédées de commande ne sont pas isolées. Ainsi, -@example -\center-column @{ @{ a b @} @{ c d @} @} -@end example - -@noindent - -est la même expression que - -@example -\center-column @{ a b c d @} -@end example - -@noindent - -L'utilisation des @code{"} ou de la commande @code{\line} permet de -différencier les listes de mots. - -@lilypond[quote,verbatim,fragment,relative=1] -\textLengthOn -c4^\markup{ \center-column { on three lines } } -c4^\markup{ \center-column { "all one line" } } -c4^\markup{ \center-column { { on three lines } } } -c4^\markup{ \center-column { \line { on one line } } } -@end lilypond - -Vous pouvez stocker les étiquettes textuelles en tant que variables, -et attacher ces identificateurs à des notes, comme -@example -allegro = \markup @{ \bold \large @{ Allegro @} @} - @{ a^\allegro b c d @} -@end example - -Certains objets possèdent leurs propres procédures d'alignement, qui -annuleront toute spécification d'alignement que vous pourriez affecter -à un argument de type @emph{markup} que vous leur auriez fourni. Par -exemple, les @rinternals{RehearsalMark} sont centrées -horizontalement ; de fait, utiliser -@code{\mark \markup @{ \left-align .. @}} sera sans effet. - -Par ailleurs, le placement vertical n'est effectué qu'après la -création de l'objet @emph{étiquette textuelle}. Si donc vous souhaitez -déplacer une étiquette, il vous faudra utiliser la propriété -@code{#'padding} ou créer un @qq{point d'ancrage} à l'intérieur même -de l'étiquette (généralement avec @code{\hspace #0}). - -@lilypond[quote,verbatim,fragment,relative=1] -\textLengthOn -c'4^\markup{ \raise #5 "not raised" } -\once \override TextScript #'padding = #3 -c'4^\markup{ raised } -c'4^\markup{ \hspace #0 \raise #1.5 raised } -@end lilypond - -Certaines situations particulières, telles que les indications de -nuance, possèdent des propriétés prédéfinies quant à leur police. -Nous vous conseillons, en pareil cas, de réinitialiser ces propriétés -en utilisant @code{normal-text}. Pour plus d'informations, consultez -@ref{Text markup commands}. - - -@seealso -Dans ce manuel : @ref{Text markup commands}. - -Référence du programme : @rinternals{TextScript}. - -Fichiers d'initialisation : @file{scm/@/new@/-markup@/.scm}. - - -@knownissues - -Le crénage ou la génération de ligatures ne sont accessibles que lors -d'un retraitement par @TeX{}. Dans ce cas, LilyPond n'en tient pas -compte, et l'espacement de tels textes sera trop large. - -Les erreurs de syntaxe sont peu loquaces. - - -@node Nested scores -@unnumberedsubsubsec Nested scores - -Rien ne s'oppose à ce qu'une étiquette ne comporte de la musique. Il -suffit que l'expression en question contienne un bloc @code{\score} et -un bloc @code{\layout}. - -@lilypond[quote,verbatim,ragged-right] -\relative { - c4 d^\markup { - \score { - \relative { c4 d e f } - \layout { } - } - } - e f -} -@end lilypond - -@node Page wrapping text -@unnumberedsubsubsec Page wrapping text -Alors que @code{\markup} s'utilise pour traiter un bloc de texte -insécable, @code{\markuplines} permet, employé en tête de partition, -d'obtenir un bloc de lignes réparties différemment et au cas où sur -plusieurs pages. - -@verbatim -\markuplines { - \justified-lines { - Un long texte constitué de lignes justifiées. - ... - } - \justified-lines { - Un autre grand paragraphe justifié. - ... - } - ... -} -@end verbatim - -@code{\markuplines} prend en argument une liste de lignes de texte, -qui peut elle-même consister en une suite de commandes générant à leur -tour des lignes de texte, comme ici : - -@verbatim -\markuplines { - \line { ... } % une ligne alignée à gauche - \fill-line { \line { ... } } % une ligne centrée - \wordwrap-lines { ... } % une liste de lignes alignées à gauche - \justified-lines { ... } % une liste de lignes justifiées -} -@end verbatim - -Les différentes commandes permettant de générer des listes de lignes -se trouve dans @ref{Text markup list commands}. - - -@seealso -Dans ce manuel : @ref{Text markup list commands}, -@ref{New markup list command definition}. - - -@predefined -@funindex \markuplines -@code{\markuplines}. -@endpredefined - - -@node Fonts -@subsection Fonts - -@cindex sélection de polices -@cindex grossissement des polices -@funindex font-interface - -C'est en jouant sur les propriétés des objets décrites ci-après que -vous pourrez sélectionner une police parmi les familles de fontes -préconfigurées. LilyPond utilise par défaut la police musicale feta. -Pour le texte, les polices sont sélectionnées par Pango/Fontconfig. -C'est New Century Schoolbook qui sert de police sérif par défaut, et -celles définies lors de l'installation de Pango pour ce qui est du -sans-serif et du @q{typewriter}. - - -@itemize @bullet -@item @code{font-encoding} -symbolise le tracé des glyphes. N'utilisez cette propriété que pour -traiter des éléments non textuels, comme : - - -@code{fetaBraces} pour les accolades de partition pianistique, -@code{fetaMusic} pour de la musique (y compris musique ancienne), -@code{fetaDynamic} pour les nuances et @code{fetaNumber} pour les -chiffres. - -@item @code{font-family} -symbolise les différentes familles de police : @code{roman} (Computer -Modern), @code{sans}-serif et @code{typewriter} (espacement fixe). - -@item @code{font-shape} -symbolise le style des caractères. En pratique, chaque famille de -police dispose de @code{italic}, @code{caps} (petites capitales) ou -@code{upright} (droit). - -@item @code{font-series} -symbolise le niveau de gras des caractères. Chaque style dispose, pour -chaque famille, de @code{medium} et @code{bold} (gras). - -@end itemize - -Les variantes ci-dessus mentionnées font référence à une feuille de -style prédéfinie. Vous pouvez cependant faire appel à une autre -police, en utilisant la propriété @code{font-name} : - -@lilypond[fragment,verbatim] -{ - \override Staff.TimeSignature #'font-name = #"Charter" - \override Staff.TimeSignature #'font-size = #2 - \time 3/4 - c'1_\markup { - \override #'(font-name . "Vera Bold") - { This text is in Vera Bold } - } -} -@end lilypond - -@noindent -Vous pouvez utiliser n'importe quelle police, du moment qu'elle est -accessible par Pango/Fontconfig. Pour obtenir la liste de toutes -les polices disponibles sur votre machine, lancez -@example -lilypond -dshow-available-fonts blabla -@end example -(quel qu'il soit, le dernier argument est obligatoire). - - -La propriété @code{font-size} permet de régler la taille de la police. -La taille effective que vous obtiendrez dépend de -@code{text-font-size} tel que défini dans le bloc @code{\paper}. - -@cindex taille de police -@cindex police, augmenter la taille - - -Vous pouvez aussi changer la police par défaut au niveau du document. -Il suffit alors de faire appel à @code{make-pango-font-tree} au sein -du bloc @code{paper}. Vous définirez alors la police à utiliser pour -du texte respectivement en roman, sans serif et monospace, comme ici : - -@cindex polices, définir -@cindex Pango - - -@lilypond[verbatim] -\paper { - myStaffSize = #20 - - #(define fonts - (make-pango-font-tree "Times New Roman" - "Nimbus Sans" - "Luxi Mono" - (/ myStaffSize 20))) -} - -{ - c'^\markup { roman: foo \sans bla \typewriter bar } -} -@end lilypond - -@c we don't do Helvetica / Courier, since GS incorrectly loads -@c Apple TTF fonts - - -@seealso -Exemples : @rlsr{Text}. - diff --git a/Documentation/fr/user/tutorial.itely b/Documentation/fr/user/tutorial.itely deleted file mode 100644 index 52c6a0b606..0000000000 --- a/Documentation/fr/user/tutorial.itely +++ /dev/null @@ -1,2100 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: f413550b658b43fbea690fc060f872bce6bbc885 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ignore -Tutorial guidelines: (different from policy.txt!) -- unless you have a really good reason, use either - @lilypond[verbatim,quote] - or - @lilypond[verbatim,quote,relative=2] - - Don't use any other relative=X commands. - -- use "aes" and "ees" instead of "as" and "es". I know it's not - correct Dutch naming, but let's not confuse people with this - until we get to the Basic notation chapter. - -- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant - portions of the tutorial. - -@end ignore - - -@c Translators: Nicolas Grandclaude, Ludovic Sardain, Gauvain Pocentek -@c Translation checkers: Jean-Charles Malahieude, Valentin Villenave, John Mandereau -@c Translation status: post-GDP - -@node Tutorial -@chapter Tutorial - -Ce tutoriel commence par une introduction au langage musical utilisé -par LilyPond, qui vous permettra de faire fonctionner le logiciel pour -produire une partition. Après ce premier contact, nous verrons comment -créer des partitions utilisant une notation musicale courante. - -@menu -* First steps:: -* Single staff notation:: -* Multiple notes at once:: -* Songs:: -* Final touches:: -@end menu - - -@node First steps -@section First steps - -Cette section présente les aspects élémentaires de l'utilisation de -LilyPond. - -@menu -* Compiling a file:: -* Simple notation:: -* Working on input files:: -* How to read the manual:: -@end menu - - -@node Compiling a file -@subsection Compiling a file - -@cindex compilation -@cindex exemple, premier -@cindex premier exemple - -Pour créer une partition avec LilyPond, on écrit un fichier texte, -appelé fichier source, qui décrit la notation musicale. La -@emph{compilation} de ce fichier source par LilyPond produit un -fichier graphique imprimable, et si on le désire un fichier MIDI qui -peut être joué par un séquenceur. - -Voici un premier exemple simple de fichier source LilyPond. - -@example -@{ - c' e' g' e' -@} -@end example - -@noindent -La compilation de ce fichier donnera quelque chose de sembable à -l'image ci-dessous. - -@c in this case we don't want verbatim -@lilypond[quote] -{ - c' e' g' e' -} -@end lilypond - -@c DIV specific -Il est aussi possible d'utiliser les noms de notes français @samp{do -re mi fa sol la si}, en insérant au début du fichier la ligne -@samp{\include "italiano.ly"}. -@c END DIV - -@warning{Tout extrait de code LilyPond doit être entouré d'une -@strong{@{ paire d'accolades @}}. De plus, pour éviter toute -ambiguïté, il est préférable d'entourer les accolades par des espaces -ou retours à la ligne. Bien que certains exemples de ce manuel ne -comportent pas d'accolades, ne les oubliez pas dans vos partitions ! -Pour plus d'informations sur l'affichage des exemples de cette -documentation, consultez @ref{How to read the manual}.} - - -@cindex casse, prise en compte de la -@cindex prise en compte de la casse -@cindex sensibilité à la casse - -De plus, LilyPond est @strong{sensible à la casse} : le code -@w{@code{@{ c d e @}}} est valide, alors que @w{@code{@{ C D E @}}} -produira un message d'erreur. - -@smallspace - -@subheading Entering music and viewing output - -@cindex fichier PDF -@cindex PDF -@cindex partition, lire -@cindex lire la partition -@cindex éditeurs de texte -@cindex LilyPond et MacOS X -@cindex MacOS X et LilyPond -@cindex LilyPond et Windows -@cindex Windows et LilyPond -@cindex LilyPond et Unix -@cindex Unix et LilyPond - -Dans cette section nous expliquerons quelles commandes exécuter et -comment voir ou imprimer le résultat produit par LilyPond. - -Notez qu'il existe plusieurs éditeurs de texte disponibles avec un bon -support de LilyPond ; consultez @rprogram{Text editor support}. - -@warning{Le premier démarrage de LilyPond peut prendre une minute ou -deux, afin de générer la liste des polices du système. LilyPond démarre -en principe plus rapidement lors des exécutions suivantes.} - - -@subsubheading MacOS X - -Si vous double-cliquez sur @code{LilyPond.app}, un fichier d'exemple -s'ouvrira. Sauvegardez-le, par exemple, sous @file{test.ly} sur votre -bureau, puis traitez-le avec la commande de menu @samp{Compile > -Typeset File}. Le fichier PDF résultant sera alors affiché à l'écran. - -À l'avenir, vous aurez certainement recours aux commandes @qq{Nouveau} -ou @qq{Ouvrir}. Vous devez enregistrer votre fichier avant de lancer -la gravure de la partition par LilyPond. Si une erreur apparaît -pendant le traitement, vous la trouverez dans la fenêtre @qq{log}. - -@subsubheading Windows - -Sous Windows, double-cliquez sur l'icône LilyPond qui se trouve sur le -bureau, un fichier d'exemple s'ouvre dans un simple éditeur de texte. -Enregistrez-le, par exemple en tant que @file{test.ly} sur le bureau, -puis double-cliquez sur son icône (qui montre une note de musique) -pour le traiter. Après quelques secondes, vous obtiendrez un fichier -@file{test.pdf} sur le bureau, fichier que vous pourrez ouvrir pour -voir la partition gravée. Une autre méthode pour lancer le traitement -du fichier @file{test.ly} est de le glisser avec votre souris sur -l'icône de LilyPond. - -Pour modifier un fichier @file{.ly} existant, faites un clic droit -dessus et sélectionnez @qq{Éditer la source}. Pour partir d'un -fichier vide, lancez l'éditeur en ouvrant un fichier existant et -utilisez la commande @qq{New} du menu @qq{File}. - -En double-cliquant sur le fichier, vous obtiendrez, en plus du fichier -PDF, un fichier @file{.log} qui récapitule les opérations que LilyPond -a effectuées sur votre fichier. Si une erreur survient, vous en -trouverez les détails dans ce fichier. - -@subsubheading UNIX - -Créez un fichier texte @file{test.ly} qui contient - -@verbatim -{ - c' e' g' e' -} -@end verbatim - -@noindent -Pour traiter @file{test.ly}, entrez la commande suivante dans un -terminal : - -@example -lilypond test.ly -@end example - -@noindent -Vous verrez quelque chose ressemblant à - -@example -lilypond test.ly -GNU LilyPond @version{} -Traitement de « test.ly » -Analyse... -Interprétation en cours de la musique... -Pré-traitement des éléments graphiques... -Détermination du nombre optimal de pages... -Répartition de la musique sur une page... -Dessin des systèmes... -Sortie mise en page vers « test.ps »... -Conversion à « ./test.pdf »... -@end example - -@c DIV specific -@noindent -Suivant votre installation, ces messages peuvent être traduits ou -non. -@c END DIV - - -@node Simple notation -@subsection Simple notation - -@cindex simple, notation -@cindex notation simple - -Il y a certains éléments graphiques de notation que LilyPond ajoute -automatiquement. Dans l'exemple suivant, nous n'avons fourni que -quatre hauteurs, mais LilyPond a ajouté une clef, un chiffre de mesure -et du rythme. - -@lilypond[verbatim,quote] -{ - c' e' g' e' -} -@end lilypond - -@noindent -Ces valeurs automatiques simplifient la saisie du code source dans -bien des cas ; nous verrons plus loin comment les indiquer -explicitement. - - -@subheading Hauteurs - -@cindex hauteurs -@cindex mode relatif -@cindex apostrophe -@cindex virgule -@cindex altérations et mode relatif -@cindex mode relatif et altérations - -@funindex \relative -@funindex relative -@funindex ' -@funindex , - -Glossaire musical : @rglos{pitch}, @rglos{interval}, -@rglos{scale}, @rglos{middle C}, @rglos{octave}, -@rglos{accidental}. - -Le moyen le plus simple d'entrer des notes est d'utiliser le mode -d'octaves relatives, ou mode @code{\relative}. Dans ce mode, l'octave -de chaque note est sélectionnée automatiquement de façon à ce qu'elle -soit la plus proche possible de la note précédente, c'est-à-dire de -façon à ce que l'intervalle avec la note précédente soit au plus d'une -quarte. Commençons par saisir une partition très simple, à savoir une -gamme. - -@lilypond[verbatim,quote] -% set the starting point to middle C -\relative c' { - c d e f - g a b c -} -@end lilypond - -La note de départ est le @notation{do central}. Chacune des notes qui -suivent est placée à l'octave la plus proche de la note précédente --- -en d'autres termes, le premier @samp{c} est le do central, entre la -clef de sol et la clef de fa, puis est suivi par le ré le plus proche, -et ainsi de suite. On peut bien sûr créer des mélodies avec de plus -grands intervalles, toujours avec le mode @code{\relative} : - -@lilypond[verbatim,quote] -\relative c' { - d f a g - c b f d -} -@end lilypond - -@noindent -Remarquez que cet exemple ne commence plus sur le do central : la -première note --- le @samp{d} --- est le ré qui en est le plus proche. - -Dans l'exemple suivant, on remplace @code{c'} dans la commande -@w{@code{\relative c'}} par @code{c''}, afin de calculer l'octave de -la première note par rapport au do situé une octave au-dessus du do -central : - -@lilypond[verbatim,quote] -% one octave above middle C -\relative c'' { - e c a c -} -@end lilypond - -Le mode d'octaves relatives peut être déroutant au début, mais c'est -souvent la façon la plus économique de saisir les hauteurs en -utilisant le clavier de l'ordinateur de façon classique. Détaillons -dans un exemple le calcul des octaves relatives. En partant d'un si -sur la troisième ligne de la clé de sol, un do, un ré ou un mi sans -indication d'octave particulière seront placés juste au-dessus du si, -c'est-à-dire au plus à une quarte ascendante du si, alors qu'un la, un -sol ou un fa seront placés juste en-dessous du si, c'est-à-dire au -plus à une quarte descendante du si. - -@lilypond[verbatim,quote] -\relative c'' { - b c % c is 1 staff space up, so is the c above - b d % d is 2 up or 5 down, so is the d above - b e % e is 3 up or 4 down, so is the e above - b a % a is 6 up or 1 down, so is the a below - b g % g is 5 up or 2 down, so is the g below - b f % f is 4 up or 3 down, so is the f below -} -@end lilypond - -Notez que le calcul des octaves relatives @strong{ne dépend pas des -altérations} des notes, dièses bémols ou bécarre. - -Pour obtenir des intervalles supérieurs à une quarte, on peut ajouter -des apostrophes @code{'} --- qui font chacune monter la hauteur d'une -octave --- ou des virgules @code{,} --- qui font chacune descendre la -hauteur d'une octave --- au nom de la note. - -@lilypond[verbatim,quote] -\relative c'' { - a a, c' f, - g g'' a,, f' -} -@end lilypond - -@noindent -Pour déplacer une note deux octaves (ou davantage !) plus haut ou plus -bas, il suffit de mettre deux (ou davantage) @code{'} ou @code{,} --- -attention cependant à bien mettre deux apostrophes @code{''}, et non -un guillemet @code{"}@tie{}! C'est de cette même manière que l'on -peut modifier la valeur de départ de @code{\relative c'}. - - -@subheading Durées et rythme - -@cindex note, durée -@cindex durées -@cindex rhythmes -@cindex ronde -@cindex blanche -@cindex noire -@cindex note pointée -@cindex spécification des durées - -Glossaire musical : @rglos{beam}, @rglos{duration}, -@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, -@rglos{dotted note}. - -La @notation{durée} d'une note est indiquée par un nombre qui suit sa -hauteur : @samp{1} pour une @notation{ronde}, @samp{2} pour une -@notation{blanche}, @samp{4} pour une @notation{noire} et ainsi de -suite. Les @notation{crochets} et @notation{liens} sont ajoutés -automatiquement. - -Si aucune durée n'est indiquée pour une note, la dernière durée entrée -est utilisée. En l'absence d'indication de durée, la première note -est une noire. - -@lilypond[verbatim,quote] -\relative c'' { - a1 - a2 a4 a8 a - a16 a a a a32 a a a a64 a a a a a a a a2 -} -@end lilypond - -Une @notation{note pointée} s'obtient en ajoutant un point @code{.} à -la valeur rythmique. Le point doit être précédé d'un nombre spécifiant -la durée de base. - -@lilypond[verbatim,quote] -\relative c'' { - a a a4. a8 - a8. a16 a a8. a8 a4. -} -@end lilypond - - -@subheading Silences - -@cindex silences -@cindex notation des silences - -Glossaire musical : @rglos{rest}. - -On saisit un @notation{silence} tout comme une note, mais avec la -lettre @samp{r} (pour @emph{rest}). - -@lilypond[verbatim,quote] -\relative c'' { - a r r2 - r8 a r4 r4. r8 -} -@end lilypond - - -@subheading Métrique - -@cindex métrique - -@funindex \time -@funindex time - -Glossaire musical : @rglos{time signature}. - -La @notation{métrique}, aussi appelée @notation{chiffre de mesure}, -peut être définie à l'aide de la commande @code{\time} : - -@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 Clef - -@cindex clef -@cindex clé -@cindex sol, clef de -@cindex ut, clef d' -@cindex fa, clef de - -@funindex \clef -@funindex clef - -Glossaire musical : @rglos{clef}. - -La @notation{clef} peut être définie à l'aide de la commande -@code{\clef} : - -@lilypond[verbatim,quote] -\relative c' { - \clef treble - c1 - \clef alto - c1 - \clef tenor - c1 - \clef bass - c1 -} -@end lilypond - - -@subheading Tout ensemble - -Voici un bref exemple qui rassemble tous les éléments que nous déjà -vus : - -@lilypond[verbatim,quote] -\relative c, { - \time 3/4 - \clef bass - c2 e8 c' g'2. - f4 e d c4 c, r4 -} -@end lilypond - - -@seealso -Manuel de notation : @ruser{Writing pitches}, -@ruser{Writing rhythms}, @ruser{Writing rests}, -@ruser{Time signature}, @ruser{Clef}. - - -@node Working on input files -@subsection Working on input files - -@cindex accolades -@funindex { ... } - -Le traitement des fichiers source de LilyPond est semblable à celui du -code de nombreux langages de programmation. La casse est prise -en compte, et les caractères considérés comme espaces ont généralement -peu d'importance. Les expressions sont délimitées par des accolades @{ -@}, et les commentaires par @code{%} ou @code{%@{ ... %@}}. - -Si cette phrase vous paraît incompréhensible, ne vous en faites pas ! -Expliquons tous ces termes : - -@itemize - -@item @strong{La casse} : -@cindex casse, prise en compte de -@cindex prise en compte de la casse -@cindex sensibilité à la casse -LilyPond est sensible à la casse, c'est à dire qu'une lettre capitale -n'a pas la même valeur qu'une lettre minuscule. Les notes, par -exemple, doivent être entrées en minuscule : @code{@{ c d e @}} est -un code valide, alors que @code{@{ C D E @}} produira un message -d'erreur. - -@cindex espaces multiples, insensibilité -@cindex insensibilité aux espaces multiples - -@item @strong{Les espaces multiples} : -LilyPond ne tient pas compte du nombre d'espaces, ou de retours à la -ligne. @code{@{ c d e @}} a le -même sens que @code{@{ c @tie{} @tie{} d @tie{} e @}} ou que -@example - @{ -c d - e @} -@end example - -@noindent -Bien sûr, ce dernier exemple est illisible. Une bonne habitude -à prendre est d'indenter les blocs de code avec soit des tabulations -soit des doubles espaces : - -@example -@{ - c d e -@} -@end example - -@cindex expressions - -@item @strong{Expressions musicales} : -Tout morceau saisi dans LilyPond doit être placé entre @strong{@{ -accolades @}}. Ces caractères indiquent à LilyPond que ce bloc de -texte représente une et une seule expression musicale, tout comme les -parenthèses @samp{()} en mathématiques. Pour éviter toute ambiguïté, -il est préférable d'entourer ces accolades d'espaces ou de retours à -la ligne. - -Un appel de fonction --- @w{@code{\relative @{ @}}} par exemple --- -compte également comme une seule expression musicale. - -@cindex commentaire -@cindex commentaire de fin de ligne -@cindex commentaire-bloc -@cindex bloc de commentaire - -@funindex % -@funindex %@{ ... %@} - -@item @strong{Les commentaires} : -un commentaire est une indication pour tout lecteur humain d'un -fichier source de musique ; il est ignoré par l'ordinateur, et n'a -donc aucun effet sur la partition imprimée. On distingue deux types -de commentaires. Le commentaire de fin de ligne, introduit par le -symbole @samp{%} : tout ce qui suit ce symbole sur la même ligne sera -ignoré. Par convention, un commentaire qui occupe une ligne entière -se place juste @emph{au-dessus} de la ligne à laquelle il fait -référence. - -@example -a4 a a a -% ce commentaire fait référence aux si -b2 b -@end example - -Le bloc de commentaire, qui peut occuper plusieurs lignes, voire toute -une section : tout ce qui se trouve entre @code{%@{} et @code{%@}} est -ignoré. Les blocs de commentaires ne peuvent s'imbriquer, ce qui -signifie que vous ne pouvez pas placer un commentaire-bloc à -l'intérieur d'un autre commentaire-bloc. Si jamais vous essayez, vous -verrez que la première occurence de @code{%@}} terminera @qq{les -@emph{deux} commentaires-blocs}. Le fragment suivant met en évidence -quelques usages possibles des commentaires : - -@example -% voici les notes de "ah vous dirai-je maman" - c4 c g' g a a g2 - -%@{ - Ces lignes et les notes qui suivent - seront ignorées, car elles se trouvent - dans un bloc de commentaire. - - f f e e d d c2 -%@} -@end example - -@end itemize - - - -@node How to read the manual -@subsection How to read the manual - -@cindex bien lire le manuel -@cindex manuel, lecture -@cindex compulser le manuel -@cindex exemples cliquables -@cindex cliquables, exemples -@cindex conseils de construction des fichiers -@cindex squelettes -@cindex construction des fichiers, conseils -@cindex fichiers, conseils de construction - -Comme nous l'avons vu dans @ref{Working on input files}, un code -LilyPond doit être encadré par des accolades @{ @} ou bien par -@code{\relative c'' @{ ... @}}. Cependant, dans la suite de ce -manuel, la plupart des exemples ne feront pas apparaître ces signes. - -Pour reproduire les exemples, vous pouvez copier et coller le code -affiché, mais @strong{à condition} d'ajouter @code{\relative c'' @{ -@}} de la façon suivante : - -@example -\relative c'' @{ - ...collez ici votre exemple... -@} -@end example - -Pourquoi avoir omis les accolades ? La plupart des exemples de ce -manuel peuvent être insérés au milieu d'un morceau de musique plus -long. Il n'y a donc aucune raison d'ajouter @code{\relative c'' @{ -@}} à ces exemples --- en effet, il n'est pas possible d'insérer une -expression @code{\relative} à l'intérieur d'un autre expression -@code{\relative}. Si nous mettions tous nos exemples dans une -expression @code{\relative}, vous ne pourriez plus copier un bref -exemple de la documentation pour le coller dans vos pièces. - - -@subheading Exemples cliquables - -Beaucoup de gens apprennent à utiliser les programmes en les essayant -et en bidouillant avec. C'est également possible avec LilyPond. Si -vous cliquez sur une image dans la version HTML de ce manuel, vous -verrez exactement le code LilyPond utilisé pour générer cette image. -Essayez sur cette image : - -@c no verbatim here -@c KEEP LY -@lilypond[quote,ragged-right] -\relative c'' { - c-\markup { \bold \huge { Cliquez ici. } } -} -@end lilypond - -En copiant-collant le code à partir du commentaire @qq{ly snippet} -vers un fichier test, vous aurez un modèle de base pour faire vos -expériences. Pour obtenir une gravure à l'identique, copiez tout le -code à partir de @qq{Start cut-&-pastable section}. - -@c No longer in the text in English, but should we really -@c remove this? --jm -@ignore -Si vous apprenez de cette façon, vous aurez probablement envie -d'imprimer ou de garder un lien vers @ruser{Cheat sheet}, tableau -qui répertorie les commandes usuelles pour une consultation rapide. -@end ignore - - -@seealso -Vous trouverez plus de conseils pour construire des fichiers source -dans @ref{Suggestions for writing LilyPond input files}. Cependant, -lors d'une première lecture il est préférable de terminer d'abord la -lecture du tutoriel. - - -@node Single staff notation -@section Single staff notation - -Cette section présente la notation courante dont on a besoin pour -écrire une voix sur une portée. - -@menu -* Accidentals and key signatures:: -* Ties and slurs:: -* Articulation and dynamics:: -* Adding text:: -* Automatic and manual beams:: -* Advanced rhythmic commands:: -@end menu - - -@node Accidentals and key signatures -@subsection Accidentals and key signatures - -@subheading Accidentals - -@cindex dièse -@cindex double dièse -@cindex dièse, double -@cindex bémol -@cindex double bémol -@cindex bémol, double - -@funindex es -@funindex b -@funindex is -@funindex d -@funindex eses -@funindex bb -@funindex isis -@funindex dd - -Glossaire musical : @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, -@rglos{double flat}, @rglos{accidental}. - -Dans la notation par défaut, on obtient un @notation{dièse} en -ajoutant @code{is} au nom de la note, et un @notation{bémol} en -ajoutant @code{es}. Comme vous pouvez vous y attendre, un double -dièse ou double bémol s'obtiennent en ajoutant @code{isis} ou -@code{eses}. Cette syntaxe est dérivée de la convention de -dénomination des notes dans les langues nordiques et germaniques, -comme l'allemand ou le hollandais. - -@c DIV specific -Cependant, si vous utilisez la commande @code{\include "italiano.ly"} -pour entrer les noms de notes français au lieu des noms hollandais, il -faudra ajouter un @code{d} pour obtenir un dièse, et un @code{b} pour -un bémol. Le double dièse et le double bémol s'obtiennent en ajoutant -respectivement @code{dd} et @code{bb}. Pour en savoir plus sur les -autres langues disponibles, consultez @ruser{Note names in other -languages}. -@c END DIV - -@lilypond[verbatim,quote,relative=2] -cis1 ees fisis, aeses -@end lilypond - -@subheading Key signatures - -@cindex armure, définition de l' -@cindex armure, altérations à l' -@cindex altérations à l'armure -@cindex majeur -@cindex mineur - -@funindex \key -@funindex key -@funindex \major -@funindex major -@funindex \minor -@funindex minor - -Glossaire musical : @rglos{key signature}, @rglos{major}, -@rglos{minor}. - -L'armure est déterminée par la commande @code{\key}, suivie d'une -hauteur puis de @code{\major} (majeur) ou @code{\minor} (mineur). - -@lilypond[verbatim,quote,relative=2] -\key d \major -a1 -\key c \minor -a -@end lilypond - -@smallspace - -@subheading Warning: key signatures and pitches - -Glossaire musical : @rglos{accidental}, @rglos{key signature}, -@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, -@rglos{transposition}. - -La combinaison de l'@notation{armure} et des hauteurs de note --- y -compris les altérations --- permet à LilyPond de déterminer dans quel -cas imprimer des @notation{altérations accidentelles}. L'armure -n'affecte que les altérations @emph{imprimées}, et non les hauteurs -réelles ! Cette fonctionnalité est souvent source de confusion pour -les nouveaux utilisateurs, aussi expliquons-la en détail. - -LilyPond fait une distinction nette entre le contenu musical et la -mise en forme. L'altération d'une note --- @notation{bémol}, -@notation{bécarre} ou @notation{dièse} --- fait partie de sa hauteur, -et relève donc du contenu musical. La gravure ou non d'une altération -accidentelle --- un @emph{signe} bémol, bécarre ou dièse --- devant la -note correspondante est une question qui relève de la mise en forme. -La gravure d'une partition suit des règles, en particulier des règles -d'indication des altérations accidentelles. Les hauteurs de note, en -revanche, relèvent de ce que vous voulez entendre ; et, dans la mesure -où la musique que vous entrez est censée être celle que vous voulez -entendre, LilyPond, qui n'est chargé que de la gravure, ne les -choisira pas à votre place. - -Dans cet exemple, - -@lilypond[verbatim,quote,relative=2] -\key d \major -d cis fis -@end lilypond - -@noindent -aucune note n'a d'altération accidentelle, et pourtant vous devrez -entrer le @code{is} pour les notes @code{cis} et @code{fis}. - -Le code @code{b} ne veut pas dire @qq{Imprimez-moi un point noir sur -la troisième ligne de la portée.} Cela signifie plutôt : @qq{Ici se -trouve une note dont la hauteur est un si naturel.} Avec une armure -de la bémol majeur, ce si est flanqué d'un bécarre accidentel : - -@lilypond[verbatim,quote,relative=2] -\key aes \major -b -@end lilypond - -Ajouter explicitement toutes les altérations demande un peu plus -d'effort dans la phase de saisie, mais cela facilite grandement la -@notation{transposition}. De plus, les altérations accidentelles -peuvent ainsi être imprimées suivant plusieurs conventions. Pour -connaître les différentes manières dont les altérations accidentelles -peuvent être imprimées, consultez @ruser{Automatic accidentals}. - - -@seealso -Manuel de notation : @ruser{Note names in other languages}, -@ruser{Accidentals}, @ruser{Automatic accidentals}, -@ruser{Key signature}. - -Glossaire musical : @rglos{Pitch names}. - - -@node Ties and slurs -@subsection Ties and slurs - -@cindex liaisons de prolongation -@cindex liaisons de tenue -@cindex prolongation, liaisons de -@cindex durée, liaisons de -@cindex tenue, liaisons de - -@funindex ~ -@funindex ( ... ) -@funindex \( ... \) - -@subheading Ties - -Glossaire musical : @rglos{tie}. - -Pour créer une liaison de prolongation@footnote{parfois aussi appelée -liaison de tenue}, on ajoute un tilde @code{~} à la première note -liée. - -@lilypond[verbatim,quote,relative=2] -g4~ g c2~ -c4 ~ c8 a8 ~ a2 -@end lilypond - -@cindex liaisons d'articulation -@cindex articulation, liaisons d' - -@subheading Slurs - -@c Le terme de "slur" a deux sens en français : articulation et phrasé. -@c Je garde ici le terme "legato", tel qu'il apparaît dans le texte original, -@c car c'est celui qui me semble le plus couramment employé. -@c slur = "il zon" (articulation). jcm -@c phrasing slur = "ils ont des chapeaux ronds" (phrase). jcm - -Glossaire musical : @rglos{slur}, @rglos{phrasing}. - -Une liaison d'articulation ou @emph{legato} peut englober -plusieurs notes. Les notes de départ et d'arrivée sont suivies -respectivement d'un signe @samp{(} et @samp{)}. - -@lilypond[verbatim,quote,relative=2] -d4( c16) cis( d e c cis d) e( d4) -@end lilypond - -@cindex liaisons de phrasé -@cindex phrasé, liaisons de -@cindex legato -@subheading Phrasing slurs - -De plus longues liaisons, dites de phrasé, sont délimitées par @code{\(} et -@code{\)}. Il est possible d'avoir en même temps des legatos et des -phrasés, mais pas plusieurs liaisons de phrasé ou de @emph{legato} à la fois. - -@lilypond[verbatim,quote,relative=2] -a8(\( ais b c) cis2 b'2 a4 cis,\) -@end lilypond - -@smallspace - -@cindex liaisons d'articulation et de prolongation, différences -@subheading Warnings: slurs vs. ties - -Glossaire musical : @rglos{articulation}, @rglos{slur}, @rglos{tie}. - -Une liaison d'articulation ou de phrasé ressemble à une liaison de -prolongation, mais n'a pas la même signification. Alors qu'une -liaison de prolongation ne peut relier que deux notes de même hauteur, -le @emph{legato} indique une articulation de plusieurs notes, -éventuellement en grand nombre. Les liaisons de tenue peuvent être -enchâssées dans un @emph{legato} ou un phrasé. - -@lilypond[verbatim,quote,relative=2] -c2~( c8 fis fis4 ~ fis2 g2) -@end lilypond - - -@seealso -Manuel de notation : @ruser{Ties}, @ruser{Slurs}, -@ruser{Phrasing slurs}. - - -@node Articulation and dynamics -@subsection Articulation and dynamics - -@cindex articulation -@cindex accents -@cindex staccato -@subheading Articulations - -Glossaire musical : @rglos{articulation}. - -Des @notation{articulations} peuvent être ajoutées à une note, au moyen -d'un tiret @code{-} suivi d'un caractère : - -@lilypond[verbatim,quote,relative=2] -c-. c-- c-> c-^ c-+ c-_ -@end lilypond - -@cindex doigtés -@subheading Fingerings - -@funindex ^ -@funindex _ - -Glossaire musical : @rglos{fingering}. - -De même, des indications de doigté peuvent être ajoutées à une note en -utilisant un tiret (@samp{-}) et le chiffre à écrire : - -@lilypond[verbatim,quote,relative=2] -c-3 e-5 b-2 a-1 -@end lilypond - -Articulations et doigtés sont habituellement placés automatiquement, -mais vous pouvez spécifier leur positionnement en utilisant @samp{^} (en -haut) ou @samp{_} (en bas). Vous pouvez aussi utiliser plusieurs -articulations sur la même note. Dans la plupart des cas, cependant, -il est bon de laisser LilyPond déterminer l'emplacement de -l'articulation. - -@lilypond[verbatim,quote,relative=2] -c_-^1 d^. f^4_2-> e^-_+ -@end lilypond - -@subheading Dynamics - -@funindex \f -@funindex \ff -@funindex \mp -@funindex \p -@funindex \mf -@funindex \pp -@funindex \< -@funindex < -@funindex \> -@funindex > -@funindex \! -@funindex ! - -Glossaire musical : @rglos{dynamics}, @rglos{crescendo}, -@rglos{decrescendo}. - -On obtient un signe de @notation{nuance} en ajoutant à la note les -lettres du signe, précédées d'un anti-slash @samp{\} : - -@lilypond[verbatim,quote,relative=2] -c\ff c\mf c\p c\pp -@end lilypond - -@cindex nuances -@cindex decrescendo -@cindex crescendo - -@c Pluriel des termes musicaux italiens : -@c selon Littré, plutôt à la française (en "-os" qu'en "-i") - -@notation{Crescendos} et @notation{decrescendos} débutent avec les -commandes @code{\<} et @code{\>}. Ils se terminent soit par une -nuance d'arrivée, par exemple @code{\f}, soit par la commande -@code{\!} : - -@lilypond[verbatim,quote,relative=2] -c2\< c2\ff\> c2 c2\! -@end lilypond - - -@seealso -Manuel de notation : @ruser{Articulations and ornamentations}, -@ruser{Fingering instructions}, @ruser{Dynamics}. - - -@node Adding text -@subsection Adding text - -@cindex texte, ajout de -@cindex ajout de texte -@cindex étiquette - -@funindex \markup -@funindex markup - -On peut ajouter du texte à une partition : - -@lilypond[verbatim,quote,relative=2] -c1^"espr" a_"legato" -@end lilypond - -Pour mettre en forme du texte, on utilise la commande @code{markup} : - -@lilypond[verbatim,quote,relative=2] -c1^\markup{ \bold espr} -a1_\markup{ - \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p -} -@end lilypond - - -@seealso -Manuel de notation : @ruser{Writing text}. - - -@node Automatic and manual beams -@subsection Automatic and manual beams - -@cindex lihature -@cindex ligatures automatiques -@cindex ligatures manuelles -@cindex ligatures explicites - -@funindex [ ... ] -@funindex [ -@funindex ] -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -Glossaire musical : @rglos{beam}. - -Toutes les barres de ligature sont dessinées automatiquement : - -@lilypond[verbatim,quote,relative=2] -a8 ais d ees r d c16 b a8 -@end lilypond - -@noindent -Lorsqu'on n'aime pas la manière dont les notes sont automatiquement -groupées, il est possible de les ligaturer manuellement, en marquant la -première note à attacher d'un crochet ouvrant @code{[} et la dernière -d'un crochet fermant @code{]}. - -@lilypond[verbatim,quote,relative=2] -a8[ ais] d[ ees r d] a b -@end lilypond - -Pour désactiver les barres de ligature automatiques pour des passages -entiers, utilisez la commande @code{\autoBeamOff}, et utilisez -@code{\autoBeamOn} pour les réactiver. - -@lilypond[verbatim,quote,relative=2] -\autoBeamOff -a8 c b4 d8. c16 b4 -\autoBeamOn -a8 c b4 d8. c16 b4 -@end lilypond - - -@seealso -Manuel de notation : @ruser{Automatic beams}, @ruser{Manual beams}. - - -@node Advanced rhythmic commands -@subsection Advanced rhythmic commands - -@subheading Partial measure - -@cindex levée -@cindex anacrouse -@cindex mesure incomplète - -@funindex \partial -@funindex partial - -Glossaire musical : @rglos{anacrusis}. - -On crée une levée (ou anacrouse) avec la commande @code{\partial}, -suivie d'une durée : @code{\partial 4} produit une levée d'une noire -et @code{\partial 8} d'une croche. - -@lilypond[verbatim,quote,relative=2] -\partial 8 -f8 c2 d -@end lilypond - -@subheading Tuplets - -@cindex nolets -@cindex triolets - -@funindex \times -@funindex times - -Glossaire musical : @rglos{note value}, @rglos{triplet}. - -Les @notation{nolets} sont créés avec la commande @code{\times}, qui -prend deux arguments : une fraction et une expression musicale. La -durée des notes de l'expression musicale est multipliée par la -fraction. Par exemple les notes d'un @notation{triolet} durent les -deux tiers de la durée de leur notation réelle, cette fraction est -donc de 2/3 pour les triolets : - -@lilypond[verbatim,quote,relative=2] -\times 2/3 { f8 g a } -\times 2/3 { c r c } -\times 2/3 { f,8 g16[ a g a] } -\times 2/3 { d4 a8 } -@end lilypond - -@subheading Grace notes - -@cindex notes d'ornement -@cindex ornementation -@cindex appoggiature -@cindex acciaccature - -@funindex \grace -@funindex grace -@funindex \acciaccatura -@funindex acciaccatura -@funindex \appoggiatura -@funindex acciaccatura - -Glossaire musical : @rglos{grace notes}, @rglos{acciaccatura}, -@rglos{appoggiatura}. - -Des @notation{notes d'ornement} s'obtiennent en appliquant la commande -@code{\grace}, @code{\appoggiatura} ou @code{\acciaccatura} à une -expression musicale : - -@lilypond[verbatim,quote,relative=2] -c2 \grace { a32[ b] } c2 -c2 \appoggiatura b16 c2 -c2 \acciaccatura b16 c2 -@end lilypond - - -@seealso -Manuel de notation : @ruser{Grace notes}, @ruser{Tuplets}, -@ruser{Upbeats}. - - -@node Multiple notes at once -@section Multiple notes at once - -Cette section traite de situations où l'on a plus d'une note à la fois : -plusieurs instruments, plusieurs voix ou portées pour un même -instrument (le piano, par exemple), et les accords. - -En théorie musicale, la polyphonie désigne une musique constituée de -plusieurs voix ; dans LilyPond, ce terme désigne les situations où il -y a plus d'une voix sur une même portée. - -@menu -* Music expressions explained:: -* Multiple staves:: -* Staff groups:: -* Combining notes into chords:: -* Single staff polyphony:: -@end menu - - -@node Music expressions explained -@subsection Music expressions explained - -@cindex expression musicale - -Dans les fichiers source LilyPond, la musique est représentée par ce -qu'on appelle des @emph{expressions musicales}. En soi, une seule note -peut constituer une expression musicale : - -@lilypond[verbatim,quote,relative=2] -a4 -@end lilypond - -Mettre un groupe de notes entre accolades crée une nouvelle expression -musicale, appelée @emph{expression musicale composée}. En voici un -exemple avec deux notes : - -@lilypond[verbatim,quote,relative=2] -{ a4 g4 } -@end lilypond - -La mise entre accolades d'une séquence d'expressions musicales --- des -notes par exemple --- signifie qu'elles doivent être jouées -successivement, les unes après les autres. Le résultat est une -expression, qui peut elle-même être regroupée séquentiellement avec -d'autres expressions. Ici, l'expression de l'exemple précédent est -combinée à deux notes : - -@lilypond[verbatim,quote,relative=2] -{ { a4 g } f g } -@end lilypond - -@subheading Analogy: mathematical expressions - -@cindex expression - -Ce mécanisme est similaire aux formules mathématiques : une grosse -formule est créée en assemblant plusieurs petites formules. De telles -formules sont appelées expressions, elles ont une définition -récursive, de telle sorte que vous pouvez fabriquer des expressions -arbitrairement longues et complexes. Par exemple : - -@example -1 - -1 + 2 - -(1 + 2) * 3 - -((1 + 2) * 3) / (4 * 5) -@end example - -Ceci est une suite d'expressions, où chacune est contenue dans la -suivante. Les expressions les plus simples sont les nombres, et de -plus grandes expressions sont produites en combinant des expressions -avec des opérateurs --- comme @samp{+}, @samp{*} et @samp{/} --- et -des parenthèses. Tout comme les expressions mathématiques, les -expressions musicales peuvent être imbriquées avec une profondeur -arbitraire, ce qui est nécessaire pour des partitions complexes comme -de la musique polyphonique. - - -@subheading Simultaneous music expressions: multiple staves - -@cindex portées multiples -@cindex polyphonie -@cindex combinaison d'expressions en parallèle -@cindex parallèles, expressions -@cindex expressions parallèles -@cindex hauteur relative et musique simultanée -@cindex musique simultanée et hauteur relative -@cindex hauteur relative et expressions parallèles -@cindex expressions parallèles et hauteur relative - -@funindex << -@funindex >> -@funindex << ... >> - -Glossaire musical : @rglos{polyphony}. - -Cette technique est utile pour de la musique @notation{polyphonique}. -Pour entrer une musique avec plusieurs voix ou plusieurs portées, nous -pouvons aussi combiner @emph{en parallèle} les expressions : deux voix -qui doivent être jouées en même temps, sont entrées comme une -combinaison simultanée de deux expressions. Une expression musicale -@qq{simultanée} est formée en entourant les expressions entre @code{<<} -et @code{>>}. Dans l'exemple suivant, trois expressions (contenant -chacune deux notes distinctes) sont combinées simultanément. - -@lilypond[verbatim,quote] -\relative c'' { - << - { a4 g } - { f e } - { d b } - >> -} -@end lilypond - -Notez que nous avons ici indenté chaque niveau du fichier d'entrée -avec un nombre d'espaces différent. LilyPond se moque --- ou presque ---- de l'espace qu'il peut y avoir ou non au début d'une ligne, mais -un code bien indenté est bien plus lisible par des humains. - -@warning{la hauteur de chaque note saisie est relative à la précédente, -mais pas au @code{c''} de la commande @code{\relative} de départ.} - - -@subheading Simultaneous music expressions: single staff - -Pour déterminer le nombre de portées, LilyPond regarde le début -de la première expression. Si c'est une seule note, une seule portée -est produite ; si c'est une expression simultanée, plusieurs portées -sont produites. - -@lilypond[verbatim,quote] -\relative c'' { - c2 <> - << { e f } { c <> } >> -} -@end lilypond - - -@node Multiple staves -@subsection Multiple staves - -@cindex multiples portées -@cindex portées multiples -@cindex contexte -@cindex contexte de notation -@cindex notation, contexte - -@funindex \new Staff -@funindex new Staff -@funindex Staff -@funindex \new -@funindex new -@funindex Score -@funindex Voice -@funindex Lyrics -@funindex ChordNames - -Comme nous l'avons vu dans @ref{Music expressions explained}, un -fichier d'entrée LilyPond est fait d'expressions musicales. Si la -partition commence par plusieurs expressions simultanées, LilyPond -créera plusieurs portées. Cependant, il est plus facile de prévoir le -nombre de portées si on les crée explicitement, ce que nous allons -voir. - -Pour créer plus d'une portée, on ajoute @code{\new Staff} au début de -chaque partie de la musique constituant une portée. Ces éléments -@code{Staff} sont ensuite combinés en parallèle avec @code{<<} et -@code{>>}, comme ci-dessous. - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - - -La commande @code{\new} introduit un @qq{contexte de notation}. Un -contexte de notation est un environnement dans lequel les événements -musicaux --- comme les notes ou les commandes @code{\clef} --- sont -interprétés. Pour des pièces simples, ces contextes sont créés -automatiquement. Pour des pièces plus complexes, il est préférable de -spécifier explicitement les contextes, afin de s'assurer que chaque -fragment aura sa propre portée. - -Il existe différents types de contextes. Les contextes @code{Score} -(partition), @code{Staff} (portée) et @code{Voice} (voix) gèrent la -notation de la mélodie, alors que @code{Lyrics} gère les paroles et -@code{ChordNames} imprime des noms d'accords. - -En termes de syntaxe, ajouter @code{\new} devant une expression -musicale crée une plus grande expression musicale. En reprenant la -comparaison précédente, cela ressemble au signe @emph{moins} en -mathématiques. La formule @math{(4+5)} est une expression, donc -@math{-(4+5)} est une plus grande expression. - -Les chiffres de métrique indiqués sur une portée affectent toutes les -autres portées@footnote{Ce comportement peut être modifié si -nécessaire, voir @ruser{Polymetric notation}}. En revanche l'armure -d'une portée n'affecte @emph{pas} les autres portées. Ces -caractéristiques par défaut se justifient par le fait que -l'utilisation d'instruments transpositeurs est bien plus fréquente que -la musique polyrythmique. - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble \key d \major \time 3/4 c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - - -@node Staff groups -@subsection Staff groups - -@cindex portée double -@cindex portée pour piano -@cindex piano, portée pour -@cindex clavier, portée pour -@cindex chœur, système pour -@cindex système pour chœur -@cindex système -@cindex portées, regroupement de -@cindex regroupement de portées - -@funindex PianoStaff -@funindex GrandStaff -@funindex ChoirStaff - -Glossaire musical : @rglos{brace}. - -La musique pour piano s'écrit sur deux portées reliées par une -@notation{accolade}. La gravure de ce type de portée est semblable à -l'exemple de musique polyphonique de @ref{Multiple staves}, mais -maintenant cette expression entière est interprétée dans un contexte -@code{PianoStaff} : - -@example -\new PianoStaff << - \new Staff @dots{} - \new Staff @dots{} ->> -@end example - -Voici un bref exemple : - -@lilypond[verbatim,quote] -\relative c'' { - \new PianoStaff << - \new Staff { \time 2/4 c4 e g g, } - \new Staff { \clef bass c,, c' e c } - >> -} -@end lilypond - - -@seealso -Manuel de notation : @ruser{Keyboard and other multi-staff instruments}, -@ruser{Displaying staves}. - - -@node Combining notes into chords -@subsection Combining notes into chords - -@cindex accords, notes simultanées -@cindex accords et durée - -@funindex < -@funindex > -@funindex < ... > - -Glossaire musical : @rglos{chord}. - -Nous avons vu précédemment comment combiner des notes simultanément, -en les encadrant par des angles doubles @code{<<} et @code{>>}. Pour -produire des accords simples, c'est-à-dire une superposition de notes -de même durée, on encadre les hauteurs de notes par des angles simples -@code{<} et @code{>}, et on écrit la durée juste après. - -@lilypond[verbatim,quote,relative=2] -r4 4 2 -@end lilypond - -Beaucoup d'éléments de notation que l'on peut attacher à une note -simple, comme une liaison, un crochet indiquant un début ou une fin de -lien, un signe d'articulation, peuvent être également attachés à un -accord : il faut ajouter ces indications après les hauteurs et la -durée, donc @emph{à l'extérieur} des angles. - -@lilypond[verbatim,quote,relative=2] -r4 8[ ]~ 2 -r4 8( \> 4 \!) -@end lilypond - - -@node Single staff polyphony -@subsection Single staff polyphony - -@cindex polyphonie -@cindex voix multiples sur une portée -@cindex silence invisible -@cindex invisible, silence - -@funindex << ... \\ ... >> -@funindex << -@funindex \\ -@funindex >> - -Quand différentes lignes mélodiques sont combinées sur une seule et même -portée, elles sont imprimées comme des voix polyphoniques ; chaque voix -a ses propre hampes@footnote{familièrement appelées queues de note.}, -liaisons et ligatures, la voix supérieure ayant les hampes vers le haut, -la voix inférieure vers le bas. - -On réalise ce type de partition en entrant chaque voix comme une -séquence, autrement dit avec @code{@{...@}}, puis en combinant -simultanément les voix et en les séparant par @code{\\}. - -@lilypond[verbatim,quote,relative=2] -<< - { a4 g2 f4~ f4 } \\ - { r4 g4 f2 f4 } ->> -@end lilypond - -Pour l'écriture de musique polyphonique, les silences invisibles -s'avèrent bien pratiques : ce sont des silences qui ne s'impriment pas. -Ils sont utiles pour remplir des voix qui, temporairement, ne jouent -rien. Voici le même exemple que ci-dessus, avec un silence invisible -@code{s} (pour @emph{skip}) à la place d'un silence normal @code{r} : - -@lilypond[verbatim,quote,relative=2] -<< - { a4 g2 f4~ f4 } \\ - { s4 g4 f2 f4 } ->> -@end lilypond - -@noindent -Là encore, ces expressions peuvent s'imbriquer arbitrairement : - -@lilypond[verbatim,quote,relative=2] -<< - \new Staff << - { a4 g2 f4~ f4 } \\ - { s4 g4 f2 f4 } - >> - \new Staff << - \clef bass - { 1 ~ 4 } \\ - { e,,4 d e2 ~ e4} - >> ->> -@end lilypond - - -@seealso -Manuel de notation : @ruser{Simultaneous notes}. - - -@node Songs -@section Songs - -Cette section présente l'écriture vocale et les partitions de variété. - -@menu -* Setting simple songs:: -* Aligning lyrics to a melody:: -* Lyrics to multiple staves:: -@end menu - - -@node Setting simple songs -@subsection Setting simple songs - -@cindex paroles -@cindex chansons - -@funindex \addlyrics -@funindex addlyrics - -Glossaire musical : @rglos{lyrics}. - -Prenons une mélodie toute simple, la comptine @emph{Girls and boys -come out to play}. - -@lilypond[verbatim,quote] -\relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 -} -@end lilypond - -Des @notation{paroles} peuvent être associées à ces notes, en les -combinant avec la commande @code{\addlyrics}. On entre les paroles en -séparant chaque syllable par un espace : - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - } - \addlyrics { - Girls and boys come out to play, - } ->> -@end lilypond - -Remarquez les accolades embrassant la musique et celles embrassant les -paroles, ainsi que les angles doubles encadrant toute la pièce ; ces -derniers indiquent simplement que la musique et les paroles se -produisent en même temps. - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@cindex mélisme -@cindex ligne d'extension -@cindex trait d'union (paroles) -@cindex caractère souligné (paroles) -@cindex paroles, alignement des -@cindex alignement des paroles -@cindex paroles, mot de plusieurs syllabes - -Glossaire musical : @rglos{melisma}, @rglos{extender line}. - -La ligne suivante de la comptine précédente est @emph{The moon doth -shine as bright as day}. Ajoutons-la au code. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c b a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Remarquez que les paroles ajoutées ne s'alignent pas bien avec les -notes. Le mot @emph{shine} devrait être chanté sur deux notes au lieu -d'une. On appelle ceci un @notation{mélisme} : il s'agit d'une seule -syllabe chantée sur plus d'une note. Il existe plusieurs façons -d'étaler une sylabe sur plusieurs notes, la plus simple étant de lier -les notes du mélisme. Pour les détails, consultez @ref{Ties and -slurs}. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c( b) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Les paroles sont maintenant correctement alignées, mais les liens de -croche automatiques ne conviennent pas pour les notes au-dessus de -@emph{shine as}. On peut les corriger en ajoutant des liens de croche -manuels, pour ceci consultez @ref{Automatic and manual beams}. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c([ b]) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -Au lieu d'utiliser une liaison, on peut indiquer le mélisme dans les -paroles en insérant un caractère souligné @code{_} pour chaque note du -mélisme sauf la première. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c[ b] a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine _ as bright as day; - } ->> -@end lilypond - -Si une syllabe s'étend sur un grand nombre de notes ou une note très -longue, on représente souvent le mélisme par un @notation{trait de -prolongation}, qu'on entre avec @code{__}. L'exemple suivant montre -les trois premières mesures de la plainte de Didon, extraite de -@emph{Didon et Énée} de Purcell. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \minor - \time 3/2 - g2 a bes bes( a) - b c4.( bes8 a4. g8 fis4.) g8 fis1 - } - \addlyrics { - When I am laid, - am laid __ in earth, - } ->> -@end lilypond - -Aucun exemple jusqu'à présent n'a utilisé de mots de plus d'une -syllabe. Dans des paroles, de tels mots sont écrits en syllabes -séparées par des traits d'union. Avec LilyPond, on utilise deux -tirets pour produire un trait d'union centré entre deux syllabes. -L'exemple suivant montre tout ce que nous avons vu jusqu'à maintenant -sur l'alignement de paroles à une mélodie. - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \key g \major - \time 3/4 - \partial 4 - d4 g4 g a8( b) g4 g4 - b8( c) d4 d e4 c2 - } - \addlyrics { - A -- way in a __ man -- ger, - no __ crib for a bed, __ - } ->> -@end lilypond - -Avec certaines paroles, en particulier en italien, il se produit la -situation inverse : il peut y avoir plusieurs syllabes sur une seule -note. On réalise ceci avec LilyPond grâce à un caractère souligné -@code{_} sans espace entre les syllabes, ou alors en groupant les -syllabes avec des guillemets. L'exemple suivant est extrait de l'air -de Figaro @emph{Largo al factotum}, dans @emph{Figaro} de Rossini, où -la syllabe @emph{al} est chantée sur la même note que @emph{go}. - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \clef bass - \key c \major - \time 6/8 - c4.~ c8 d b c([ d]) b c d b c - } - \addlyrics { - Lar -- go_al fac -- to -- tum del -- la cit -- tà - } ->> -@end lilypond - - -@seealso -Manuel de notation : @ruser{Vocal music}. - - -@node Lyrics to multiple staves -@subsection Lyrics to multiple staves - -@cindex paroles et portées mutiples -@cindex portées multiples et paroles - -La méthode simple d'ajout de paroles avec @code{\addlyrics} peut être -également utilisée pour placer des paroles sous plusieurs portées. -L'exemple suivant est extrait de @emph{Judas Macchabée} de Händel. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key f \major - \time 6/8 - \partial 8 - c8 c([ bes]) a a([ g]) f f'4. b, c4.~ c4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, __ - } - \relative c' { - \key f \major - \time 6/8 - \partial 8 - r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, - } ->> -@end lilypond - -Pour produire des partitions plus complexes ou plus longues que cet -exemple simple, il est vivement conseillé de séparer la structure de -la partition des notes et paroles, grâce à des variables. Ceci sera -détaillé plus loin dans @ref{Organizing pieces with variables}. - - -@seealso -Manuel de notation : @ruser{Vocal music}. - - -@node Final touches -@section Final touches - -L'ultime section de ce tutoriel montre comment ajouter une touche -finale à des morceaux simples, et constitue une introduction au reste -du manuel. - -@menu -* Organizing pieces with variables:: -* Version number:: -* Adding titles:: -* Absolute note names:: -* After the tutorial:: -@end menu - - -@node Organizing pieces with variables -@subsection Organizing pieces with variables - -@cindex variables -@cindex variables, definition -@cindex identificateurs -@cindex macros -@cindex assignation de variables -@cindex utilisation de variables -@cindex variables, utilisation de -@cindex variables, caractères autorisés dans les -@cindex caractères autorisés dans les variables - -Lorsque l'on combine tous les éléments étudiés précédemment pour -écrire des partitions plus longues, les expressions musicales prennent -de l'ampleur et, dans le cas des pièces polyphoniques, deviennent -profondément imbriquées, jusqu'au point où il devient difficile de se -repérer dans le fichier source. Cet inconvénient peut être résolu par -l'utilisation de @emph{variables}. - -En utilisant des variables, parfois appelées identificateurs ou -macros, on peut scinder des expressions musicales complexes en des -expressions plus simples. Une variable se définit comme suit : - -@example -musiqueToto = @{ @dots{} @} -@end example - -Le contenu de l'expression musicale @code{musiqueToto} pourra être -utilisé plus loin en faisant précéder son nom d'un anti-slash, -c'est-à-dire @code{\musiqueToto}, tout comme n'importe quelle commande -LilyPond. Toute variable doit être définie @emph{avant} son -utilisation dans une autre expression musicale. - -@lilypond[verbatim,quote] -violin = \new Staff { - \relative c'' { - a4 b c b - } -} -cello = \new Staff { - \relative c { - \clef bass - e2 d - } -} -{ - << - \violin - \cello - >> -} -@end lilypond - -@noindent -Le nom d'une variable ne doit comporter que des caractères -alphabétiques non accentués, aucun nombre ni tiret ne sont autorisés. - -On peut utiliser une variable déjà définie autant de fois que l'on -veut, y compris dans la définition d'une nouvelle variable ; par -exemple, cela peut servir à saisir un motif qu'une seule fois, même -s'il se répète un grand nombre de fois dans la pièce. - -@lilypond[verbatim,quote] -tripletA = \times 2/3 { c,8 e g } -barA = { \tripletA \tripletA \tripletA \tripletA } - -\relative c'' { - \barA \barA -} -@end lilypond - -Il est possible d'utiliser des variables de types variés. Par exemple, - -@example -width = 4.5\cm -name = "Wendy" -aFivePaper = \paper @{ paperheight = 21.0 \cm @} -@end example - -En fonction de son contenu, un identificateur peut être utilisé à -différents endroits. L'exemple suivant utilise les variable définies -ci-dessus. - -@example -\paper @{ - \aFivePaper - line-width = \width -@} -@{ c4^\name @} -@end example - - -@node Version number -@subsection Version number - -@cindex version -@cindex versionage -@cindex numéro de version -@cindex version, numéro de -@cindex mise à jour -@cindex future mise à jour -@cindex mise à jour de fichiers -@cindex fichiers, mise à jour de - -@funindex \version -@funindex version -@funindex convert-ly - -La déclaration @code{\version} stipule le numéro de la version de -LilyPond pour laquelle le fichier a été écrit : - -@example -\version @w{"@version{}"} -@end example - -@noindent -Par convention, on place cette instruction en début de fichier. - -Cette instruction permet de faciliter les mises à jour futures de -LilyPond. Les changements de syntaxe au fil des versions sont gérés -avec un programme dédié, @command{convert-ly}, qui utilise la valeur -de @code{\version} pour déterminer les règles de conversion à -appliquer au fichier source. Pour plus d'informations, consultez -@rprogram{Updating files with convert-ly}. - - -@node Adding titles -@subsection Adding titles - -@cindex titre -@cindex en-têtes -@cindex bloc d'en-tête - -@funindex \header -@funindex header - -On indique les informations bibliographiques --- nom du morceau, du -compositeur, numéro d'opus@dots{} --- dans un bloc à part, le bloc -d'en-tête @code{\header}, qui existe indépendamment de l'expression -musicale principale. Le bloc @code{\header} est habituellement placé -en début de fichier, après le numéro de version. - -@example -\version @w{"@version{}"} -\header @{ - title = "Symphonie" - composer = "Moi" - opus = "Op. 9" -@} - -@{ - @dots{} la musique @dots{} -@} -@end example - -Quand LilyPond traite le fichier, le titre et le compositeur sont -imprimés au début de la partition. Vous trouverez plus d'informations -sur les titres à la section @ruser{Creating titles}. - - -@node Absolute note names -@subsection Absolute note names - -@cindex notes, nom des -@cindex absolu, mode -@cindex mode absolu -@cindex hauteurs, valeurs absolues -@cindex noms de note absolus - -Jusqu'ici nous n'avons utilisé que le mode @code{\relative} pour -définir les hauteurs de notes. Si c'est souvent le moyen le plus -simple de saisir la musique au clavier, il existe une autre façon de -procéder : le mode de hauteurs absolues. - -Si vous omettez la commande @code{\relative}, LilyPond considérera -toutes les hauteurs comme des hauteurs absolues. Un @code{c'} désigne -toujours le do central, un @code{b} se situe une seconde en dessous -du do central, et un @code{g,} est situé sur la première ligne de -la portée en clé de fa. - -@lilypond[verbatim,quote] -{ - \clef bass - c' b g, g, - g, f, f c' -} -@end lilypond - -Voici une gamme sur 4 octaves : - -@lilypond[verbatim,quote] -{ - \clef bass - c, d, e, f, - g, a, b, c - d e f g - a b c' d' - \clef treble - e' f' g' a' - b' c'' d'' e'' - f'' g'' a'' b'' - c'''1 -} -@end lilypond - -Comme vous pouvez le voir, il faut beaucoup d'apostrophes pour écrire -de la musique dans un registre aigu, comme le montre cet extrait de -Mozart. - -@lilypond[verbatim,quote] -{ - \key a \major - \time 6/8 - cis''8. d''16 cis''8 e''4 e''8 - b'8. cis''16 b'8 d''4 d''8 -} -@end lilypond - -Toutes ces apostrophes rendent le fichier moins lisible, et surtout il -est très probable d'oublier au moins une apostrophe au cours de la -frappe. En mode @code{\relative}, le même exemple devient bien plus -facile à lire et à saisir. - -@lilypond[verbatim,quote] -\relative c'' { - \key a \major - \time 6/8 - cis8. d16 cis8 e4 e8 - b8. cis16 b8 d4 d8 -} -@end lilypond - -Si d'aventure vous faites une erreur d'octaviation, le mode -@code{\relative} la mettra en évidence : toutes les notes suivantes -seront placées à la mauvaise octave. En mode de hauteurs absolues, -une erreur isolée ne serait pas autant visible, et serait donc plus -difficile à dénicher. - -Cependant, le mode de hauteurs absolues reste utile pour les musiques -où les intervalles sont étendus, et plus encore pour les fichiers -LilyPond créés par des programmes. - - -@node After the tutorial -@subsection After the tutorial - -Après avoir parcouru ce tutoriel, vous devriez essayer d'écrire un -morceau ou deux. Commencez par copier l'un des modèles types et -ajoutez-y des notes --- consultez les @ref{Templates}. Si vous voulez -employer une notation que vous n'avez pas trouvé dans le tutoriel, -consultez le manuel de notation, en commençant par la @ruser{Musical -notation}. Si vous désirez écrire pour un ensemble instrumental non -couvert par les modèles, lisez la section @ref{Extending the -templates}. - -Après avoir écrit quelques pièces courtes, lisez les chapitres 3 à 5 -du manuel d'initiation. Rien ne s'oppose à ce que vous consultiez dès -à présent ces chapitres, bien sûr ! Néanmoins, le reste du manuel -d'initiation part du principe que vous avez déjà bien assimilé la -syntaxe de base de LilyPond. Vous pouvez toujours survoler ces -chapitres 3 à 5, et y revenir plus tard après avoir acquis de -l'expérience. - -Dans ce tutoriel comme dans le reste de ce manuel, se trouve à chaque -section un paragraphe @strong{Voir aussi} contenant des références -vers d'autres sections : il est conseillé de ne pas les suivre en -première lecture ; lorsque vous aurez lu l'ensemble du manuel -d'initiation, vous pourrez en relisant certaines sections suivre ces -références pour approfondir certains aspects. - -Si vous ne l'avez pas encore fait, lisez @ref{About the -documentation}. Les sources de documentation et d'information sur -LilyPond sont vastes, il est normal pour un débutant de ne pas savoir -où chercher ; si vous passez quelques minutes à lire attentivement -cette section, vous vous épargnerez certainement la frustration causée -par des heures de recherches infructueuses. diff --git a/Documentation/fr/user/tweaks.itely b/Documentation/fr/user/tweaks.itely deleted file mode 100644 index 2f4df59bc6..0000000000 --- a/Documentation/fr/user/tweaks.itely +++ /dev/null @@ -1,3766 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 90a367b11c50bd1fe242656715f807d1445225d7 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise -@c Translation checkers: Jean-Charles Malahieude, John Mandereau -@c Translation status: post-GDP - -@node Tweaking output -@chapter Tweaking output - -Ce chapitre indique comment modifier le résultat obtenu. -LilyPond offre de nombreuses possibilités de réglages, permettant -théoriquement de modifier chaque élément de votre partition. - -@menu -* Tweaking basics:: -* The Internals Reference manual:: -* Appearance of objects:: -* Placement of objects:: -* Collisions of objects:: -* Further tweaking:: -@end menu - -@node Tweaking basics -@section Tweaking basics - -@menu -* Introduction to tweaks:: -* Objects and interfaces:: -* Naming conventions of objects and properties:: -* Tweaking methods:: -@end menu - -@node Introduction to tweaks -@subsection Introduction to tweaks - -LilyPond regroupe sous le terme de @qq{retouches} (@emph{tweaks} en -anglais) les différents moyens dont dispose l'utilisateur pour -intervenir sur l'interprétation du fichier d'entrée et pour modifier -l'apparence du fichier de sortie. Certaines retouches sont très -simples à mettre en œuvre ; d'autres sont plus complexes. Mais -à elles toutes, elles permettent d'obtenir tout ce qu'on veut en matière -de musique imprimée. - -Dans ce chapitre, nous traitons des concepts de base nécessaires -pour comprendre l'art de la retouche. Puis nous présentons de -nombreuses commandes déjà prêtes, qu'il suffit de recopier pour -obtenir un résultat identique dans vos partitions ; nous en profitons -pour expliquer comment ces commandes ont été construites, si bien -que vous pouvez apprendre par la même occasion à développer -vos propres retouches. - -Avant de vous lancer dans ce chapitre, il peut être utile de revoir la -section @ref{Contexts and engravers}, dans la mesure où les contextes, -graveurs et autres propriétés qui y sont décrits, sont indispensables -pour comprendre et construire les retouches. - -@node Objects and interfaces -@subsection Objects and interfaces - -@cindex objet -@cindex grob -@cindex spanner -@cindex extenseur -@cindex interface -@cindex propriétés des objets -@cindex objet, propriétés -@cindex objet de rendu -@cindex rendu, objets de - -Toute retouche implique que l'on modifie les opérations internes -et les structures du programme LilyPond. Nous allons donc, pour -commencer, présenter certains termes qui servent à décrire ces -opérations internes et ces structures. - -Le terme d'@qq{Objet} est un terme générique qui fait référence à -une multitude de structures internes mises en place par LilyPond -durant la compilation d'un fichier d'entrée. Ainsi, quand une -commande du type @code{\new Staff} apparaît, un nouvel objet -du type @code{Staff} est créé. Cet objet @code{Staff} contient -alors toutes les propriétés associées à cette portée, par exemple son -nom et son armure, ainsi que le détail des graveurs qui ont été -désignés pour fonctionner dans ce contexte de portée. -Certains objets peuvent contenir les propriétés de tous les autres -contextes, comme les objets @code{Voice}, les objets @code{Score}, -les objets @code{Lyrics} ; d'autres se rapportent à tous les éléments de -notation, comme les barres de mesure, les liaisons, les nuances, etc. -Chaque objet dispose de son propre échantillon de valeurs pour le -réglage des propriétés. - -Certains types d'objet portent des noms spécifiques. Les objets qui se -rapportent à des éléments de notation sur le fichier de sortie, comme les -notes, les hampes, les liaisons de phrasé ou de prolongation, les doigtés, -les clefs, etc. sont appelés @qq{Objets de rendu} ; ils sont aussi connus -sous le nom d'@qq{Objets graphiques} (en anglais : @emph{Graphical -objects} ou @emph{Grobs} pour faire court). Ce sont bien des objets au -sens générique ci-dessus, et, en tant que tels, ils reçoivent des -propriétés qui leur sont associées, comme leur position, leur taille, -leur couleur, etc. - -Certains objets de rendu, comme les liaisons de phrasé, les soufflets -de crescendo, les marques d'octaviation et beaucoup d'autres @emph{grobs}, -ont pour particularité de ne pas se situer à un seul et unique endroit --- ils ont un point de départ, un point d'arrivée, et éventuellement -d'autres propriétés relatives à leur forme. Ces objets avec une forme -étendue sont appelés des bandeaux (@emph{Spanners} en anglais). - -Il reste à expliquer ce que sont les @qq{interfaces}. De nombreux objets, -qui peuvent être très différents les uns des autres, ont pour point commun -de devoir être compilés simultanément. Par exemple, tous les -@emph{grobs} ont une couleur, une taille, une position, etc., et toutes -ces propriétés sont compilées simultanément durant l'interprétation du -fichier d'entrée par LilyPond. Pour alléger ces opérations internes, -ces actions et propriétés communes sont regroupées en un objet appelé -@code{grob-interface}. Il existe beaucoup d'autres regroupements de -propriétés communes dans le genre de celui-ci, chacun portant un nom qui -se termine par @code{interface}. En tout, on en compte plus d'une -centaine. Nous verrons plus loin en quoi c'est intéressant et utile -pour l'utilisateur. - -Ainsi s'achève le tour des principaux termes relatifs aux objets et -que nous serons amenés à utiliser dans ce chapitre. - -@node Naming conventions of objects and properties -@subsection Naming conventions of objects and properties - -@cindex conventions de nommage des objets -@cindex conventions de nommage des propriétés -@cindex objets, conventions de nommage des -@cindex propriétés, conventions de nommage des - -Nous avons eu un aperçu, dans @ref{Contexts and engravers}, de -la façon de nommer les objets. Voici maintenant une liste de -référence des types d'objets et de propriétés les plus courants, -avec leur convention de nommage et quelques exemples -de cas concrets. La lettre @code{A} représente n'importe quel -caractère alphabétique majuscule, et les lettres @code{aaa} -un nombre indéterminé de caractères alphabétiques minuscules. -Les autres caractères sont à prendre comme ils se présentent. - -@multitable @columnfractions .33 .33 .33 -@headitem Type d'objet/propriété - @tab Convention de désignation - @tab Exemples -@item Contextes - @tab Aaaa ou AaaaAaaaAaaa - @tab Staff, GrandStaff -@item Objets de rendu - @tab Aaaa ou AaaaAaaaAaaa - @tab Slur, NoteHead -@item Graveurs - @tab Aaaa_aaa_engraver - @tab Clef_engraver, Note_heads_engraver -@item Interfaces - @tab aaa-aaa-interface - @tab grob-interface, break-aligned-interface -@item Propriétés de contexte - @tab aaa ou aaaAaaaAaaa - @tab alignAboveContext, skipBars -@item Propriétés d'objet de rendu - @tab aaa ou aaa-aaa-aaa - @tab direction, beam-thickness -@end multitable - -Comme nous le verrons bientôt, les propriétés des différents -types d'objets sont modifiées par des commandes différentes, si bien -qu'il est bon de savoir reconnaître le type d'objet en fonction du nom -de ses propriétés. - -@node Tweaking methods -@subsection Tweaking methods - -@cindex retouches, méthodologie -@cindex méthodes de retouche - -@strong{La commande \override} - -@cindex override, commande -@cindex override, syntaxe - -@funindex \override -@funindex override - -Dans @ref{Modifying context properties} et dans -@ref{Adding and removing engravers}, nous avons déjà rencontré les -commandes @code{\set} et @code{\with}, qui servent à changer les -propriétés des @strong{contextes} et à supprimer ou ajouter des -@strong{graveurs}. Voici maintenant d'autres commandes plus -importantes. - -La commande pour changer les propriétés des @strong{objets de rendu} -est @code{\override}. Du fait que cette commande modifie en profondeur -les propriétés internes de LilyPond, sa syntaxe n'est pas aussi simple que -pour les commandes vues précédemment. Elle a besoin de savoir avec -précision quelle est la propriété à modifier, pour quel objet et dans -quel contexte, et quelle doit être sa nouvelle valeur. Voyons de quoi -il retourne. - -La syntaxe générale de cette commande est : - -@example -\override @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-rendu} = #@var{valeur} -@end example - -@noindent -Elle attribue à la propriété appelée @var{propriété-rendu}, associée à -l'objet @var{ObjetDeRendu}, appartenant lui-même au contexte -@var{Contexte}, une valeur @var{valeur}. - -Le contexte @var{Contexte} peut être omis (c'est généralement -le cas) quand il n'y a pas d'ambiguïté et qu'il s'agit d'un contexte -de très bas niveau, comme @code{Voice}, @code{ChordNames} -ou @code{Lyrics}. Dans les exemples qui suivent, le contexte sera -très souvent omis. Nous verrons plus tard dans quelles -circonstances il doit impérativement être indiqué. - -Les sections ci-dessous traitent largement des propriétés et de leurs -valeurs mais, pour illustrer la mise en forme et l'utilisation de ces -commandes, nous nous limiterons à n'employer que quelques propriétés et -valeurs simples, facilement compréhensibles. - -Nous ne parlerons dans l'immédiat ni du @code{#'}, qui précède -toujours la propriété, ni du @code{#}, qui précède toujours la -valeur. Ces deux éléments doivent obligatoirement être -présents sous cette forme. Voici la commande la plus fréquente -pour faire des retouches, et pratiquement tout le reste de ce -chapitre aura pour but montrer, à travers des exemples, comment -l'utiliser. L'exemple ci-dessous change la couleur des têtes de -notes : - -@cindex couleur,exemple de propriété -@cindex NoteHead, exemple de dérogation - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a b c -@end lilypond - -@strong{La commande \revert} - -@cindex revert, commande - -@funindex \revert -@funindex revert - -Une fois qu'elle a été modifiée, la propriété conserve sa nouvelle valeur -jusqu'à ce qu'elle soit à nouveau modifiée ou qu'elle rencontre la -commande @code{\revert}. La commande @code{\revert} obéit à -la syntaxe ci-dessous et ramène la valeur de la propriété à sa valeur -d'origine. Attention : dans le cas où plusieurs @code{\override} ont -été employés, il ne s'agit pas de la valeur précédente mais bien de la -valeur par défaut. - -@example -\revert @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-de-rendu} -@end example - -Tout comme pour la commande @code{\override}, la mention du -@var{Contexte} est souvent facultative. Elle sera omise dans de -nombreux exemples ci-dessous. Voici un exemple qui ramène la -couleur des deux dernières notes à leur valeur par défaut : - -@cindex couleur,exemple de propriété -@cindex NoteHead, exemple de dérogation - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a -\revert NoteHead #'color -b c -@end lilypond - -@strong{Le préfixe \once} - -@funindex \once -@funindex once - -Les commandes @code{\override} et @code{\set} peuvent supporter -toutes les deux le préfixe @code{\once}. Celui-ci a pour fonction de -n'appliquer la commande @code{\override} ou @code{\set} qu'à -l'instant musical en cours, avant que la propriété ne reprenne -sa valeur par défaut. Toujours à partir du même exemple, il est -possible de ne changer la couleur que d'une seule note : - -@cindex couleur,exemple de propriété -@cindex NoteHead, exemple de dérogation - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\once \override NoteHead #'color = #red -e f g -\once \override NoteHead #'color = #green -a b c -@end lilypond - -@strong{La commande \overrideProperty} - -@cindex overrideProperty, commande - -@funindex \overrideProperty -@funindex overrideProperty - -Il existe une autre forme de commande @code{\override}, -@code{\overrideProperty}, qui est parfois utile. Nous la mentionnons -ici par souci d'exhaustivité ; pour le détail, voir @ruser{Difficult tweaks}. - -@c Maybe explain in a later iteration -td - -@strong{La commande \tweak} - -@cindex tweak, commande - -@funindex \tweak -@funindex tweak - -La dernière commande disponible pour les retouches est -@code{\tweak}. Elle sert à changer les propriétés d'objets qui -surviennent simultanément dans la musique, comme par exemple les -notes d'un accord. La commande @code{\override} modifierait toutes -les notes de l'accord, tandis que @code{\tweak} ne modifie que -l'élément suivant dans la chaîne de saisie. - -Voici un exemple. Supposons que nous voulions changer la taille de -la tête de note du milieu (le mi) dans un accord de do majeur. Voyons -d'abord ce que donnerait @code{\once \override} : - -@cindex font-size, exemple de propriété -@cindex NoteHead, exemple de dérogation - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -4 -\once \override NoteHead #'font-size = #-3 - - -@end lilypond - -Nous voyons que @code{\override} modifie @emph{toutes} les têtes -de notes de l'accord, car toutes les notes de l'accord surviennent au -même @emph{instant musical} et que la fonction de @code{\once} -est de faire porter la modification sur tous les objets du type spécifié -qui surviennent au même instant musical, comme le fait la commande -@code{\override} elle-même. - -La commande @code{\tweak} opère différemment. Elle agit -sur l'élément immédiatement suivant dans la chaîne de saisie. Elle ne -fonctionne toutefois que sur des objets créés directement à partir de -la chaîne de saisie, c'est-à-dire essentiellement des têtes de notes et -des articulations ; des objets comme les hampes ou les -altérations accidentelles sont créés ultérieurement et ne peuvent -être retouchés de cette manière. En outre, quand la retouche porte -sur une tête de note, celle-ci @emph{doit} appartenir à un accord, -c'est-à-dire être comprise à l'intérieur de chevrons gauche/droite. Pour -retoucher une note isolée, il faut donc placer la commande -@code{\tweak} avec la note à l'intérieur des chevrons gauche/droite. - -Pour reprendre notre exemple, la taille de la note du milieu d'un -accord peut être modifiée de cette manière : - -@cindex font-size, exemple de propriété -@cindex @code{\tweak}, exemple - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -4 -4 -@end lilypond - -Vous noterez que la syntaxe de @code{\tweak} est différente de -celle de la commande @code{\override}. Ni le contexte, -ni l'objet n'ont besoin d'être spécifiés ; au contraire, cela -produirait une erreur si on le faisait. Tous deux sont sous-entendus -par l'élément suivant dans la chaîne de saisie. La syntaxe générale -de la commande @code{\tweak} est donc, tout simplement : - -@example -\tweak #'@var{propriété-de-rendu} = #@var{valeur} -@end example - -La commande @code{\tweak} est aussi utilisée quand on veut, dans -une série d'articulations, n'en modifier qu'une seule. Ainsi : - -@cindex couleur, exemple de propriété -@cindex @code{\tweak}, exemple - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a ^Black - -\tweak #'color #red ^Red - -\tweak #'color #green _Green -@end lilypond - -@noindent -Attention : la commande @code{\tweak} doit être précédée d'une -marque d'articulation, comme si elle-même était une articulation. - -@cindex nolets imbriqués -@cindex triolets imbriqués -@cindex crochet de nolet -@cindex nolet, crochet -@cindex triolet, crochet - -@funindex TupletBracket - -Quand plusieurs nolets sont imbriqués et commencent au même instant -musical, c'est encore la commande @code{\tweak} qui est utilisée pour -changer l'apparence de l'un d'entre eux. Dans l'exemple suivant, le -long crochet de nolet et le premier des trois crochets courts commencent -au même instant musical ; une commande @code{\override} s'appliquerait -donc à la fois aux deux. En revanche, @code{\tweak} permet -de les dissocier. La première commande @code{\tweak} indique que -le long crochet doit être placé au-dessus des notes, et la seconde -indique que le coefficient de nolet doit être imprimé en rouge sur le -premier crochet de triolet court. - -@cindex @code{\tweak}, exemple -@cindex direction, exemple de propriété -@cindex couleur, exemple de propriété - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -\tweak #'direction #up -\times 4/3 { - \tweak #'color #red - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } -} -@end lilypond - -Si les nolets imbriqués ne commencent pas au même moment, -leur apparence peut alors être modifiée de la façon habituelle, -avec la commande @code{\override} : - -@cindex texte, exemple de propriété -@cindex tuplet-number, example de fonction -@cindex transparence, example de propriété -@cindex TupletNumber, exemple de dérogation - -@c NOTE Tuplet brackets collide if notes are high on staff -@c See issue 509 -@lilypond[quote,ragged-right,verbatim,fragment,relative=1] -\times 2/3 { c8[ c c]} -\once \override TupletNumber - #'text = #tuplet-number::calc-fraction-text -\times 2/3 { - c[ c] - c[ c] - \once \override TupletNumber #'transparent = ##t - \times 2/3 { c8[ c c] } -\times 2/3 { c8[ c c]} -} -@end lilypond - -@seealso -Manuel de notation : -@ruser{The tweak command}. - - -@node The Internals Reference manual -@section The Internals Reference manual - -@cindex Références internes - -@menu -* Properties of layout objects:: -* Properties found in interfaces:: -* Types of properties:: -@end menu - -@node Properties of layout objects -@subsection Properties of layout objects - -@cindex propriétés des objets de rendu -@cindex propriétés des objets graphiques (grobs) -@cindex grobs, propriétés -@cindex objets de rendu, propriétés -@cindex Manuel des références internes - -Imaginons que votre partition contienne une liaison trop fine à votre -goût et que vous vouliez la rendre plus épaisse. Comment vous y -prendre ? Vous êtes convaincu, avec tout ce qui a été dit sur la -souplesse de LilyPond, qu'une telle retouche est réalisable et -vous vous dites qu'elle fera sans doute intervenir la commande -@code{\override}. Mais existe-t-il une propriété lourde qui s'applique -à une liaison et, dans l'affirmative, comment faire pour la modifier ? -C'est là qu'intervient la Référence des propriétés internes. -Elle contient toutes les informations dont vous avez besoin pour -construire n'importe quelle commande @code{\override}. - -Avant de nous plonger dans la Référence des propriétés -internes, un mot d'avertissement. Il s'agit d'un document de -@strong{références}, de sorte qu'il ne contient pas ou peu -d'explications : son but est de présenter les informations de -façon précise et concise. Cela peut paraître décourageant -à première vue. Pas d'inquiétude ! Les conseils et les explications -fournis ici vous permettent de retrouver par vous-même les -informations dans la Référence des propriétés internes. Il -suffit d'un peu de pratique. - -@cindex override, exemple -@cindex dérogation, exemple -@cindex Références internes, exemple d'utilisation -@cindex @code{\addlyrics} -- exemple - -Prenons un exemple concret tiré d'un morceau de musique connu : - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -Admettons que nous voulions rendre les traits de liaison plus épais. -Est-ce possible ? Une liaison est assurément un objet de rendu, si bien -que la question est @qq{Existe-t-il une propriété attachée aux liaisons -et qui en contrôle l'épaisseur ? } Pour y répondre, nous consultons la -Référence des propriétés internes (ou RPI pour faire court). - -Vous trouverez sur le site de LilyPond @uref{http://lilypond.org} la -RPI correspondant à votre version du programme. Allez sur la page -Documentation et cliquez sur Référence des propriétés internes. -Pour l'apprentissage, mieux vaut utiliser la version HTML standard, -et non la @q{page unique en anglais} ou le PDF. Durant la lecture -des prochains paragraphes, il vous est conseillé de vous y reporter -réellement afin que les explications prennent tout leur sens. - -En dessous du bandeau d'en-tête figurent cinq liens. Cliquez sur le lien -vers le @emph{Backend}, où se trouvent les informations sur les -objets de rendu. En dessous du titre @strong{Backend}, choisissez -alors le lien vers @emph{Tous les objets de rendu}. La page qui s'ouvre -énumère, dans l'ordre alphabétique, tous les objets utilisés dans votre -version de LilyPond. Cliquez sur Liaisons (@emph{Slurs} en anglais), -et les propriétés des liaisons apparaîtront. - -Il existe un autre moyen de trouver cette page, à partir du Manuel de -notation. Une des pages qui traitent des liaisons contient un lien vers -la Référence des propriétés internes, qui mène directement à cette -page. Mais lorsque vous connaissez le nom de l'objet à retoucher, le -plus simple est de consulter la RPI. - -La page de la RPI sur les liaisons commence par préciser que les objets -Liaison sont créés par le graveur Slur_engraver. Vient ensuite la liste -des réglages standard. Attention : ceux-ci @strong{ne suivent pas} l'ordre -alphabétique. Il faut donc les parcourir en entier pour trouver la propriété -susceptible de contrôler l'épaisseur des traits de liaison. - -@example -@code{thickness} (number) - @code{1.2} - Épaisseur de ligne, généralement mesurée en @code{line-thickness} -@end example - -Voilà qui semble approprié pour changer l'épaisseur (@emph{thickness} en -anglais). On apprend que la valeur de @code{thickness} -est un simple nombre (@emph{number}), qu'elle est par défaut -à 1,2 et que l'unité de mesure est fixée par une autre propriété -appelée @code{line-thickness}. - -Comme il a été indiqué, on ne trouve que peu, voire pas du tout -d'explications dans la RPI, mais nous en savons assez pour essayer -de changer l'épaisseur de la liaison. Comme nous l'avons vu, le -nom de l'objet est @code{Slur}, le nom de la propriété à changer -est @code{thickness} et la nouvelle valeur sera un nombre supérieur -à 1.2 si l'on veut augmenter l'épaisseur du trait. - -Pour construire la commande @code{\override}, il suffit donc de -remplacer les valeurs que nous avons trouvées en guise de noms, en -laissant de côté le contexte. Commençons par une valeur très élevée -dans un premier temps, pour nous assurer que la commande fonctionne. -Nous obtenons : - -@example -\override Slur #'thickness = #5.0 -@end example - -N'oublions pas le @code{#'} qui doit précéder le nom de la propriété et -le @code{#} qui doit précéder la nouvelle valeur. - -La dernière question est : @qq{Où placer cette commande ?} -Tant qu'on n'est pas sûr de soi, la meilleure réponse est @qq{À -l'intérieur de l'expression musicale, avant la première liaison et -proche d'elle.} Essayons : - -@cindex Slur, exemple de dérogation -@cindex thickness, exemple de propriété - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -et nous constatons que le trait de liaison est beaucoup plus épais. - -Telle est la façon normale de construire les commandes -@code{\override}. Comme nous aurons l'occasion de le voir -par la suite, le problème est parfois plus complexe. Dans -l'immédiat, nous en savons assez pour construire nos propres -commandes -- mais il faut encore s'exercer. Les exemples -suivants sont là dans cette intention. - -@subheading Finding the context - -@cindex contexte, détermination du -@cindex contexte, identification correcte du - -Tout d'abord, de quoi avions-nous besoin pour préciser le -contexte ? À quoi devait-il ressembler ? Gageons que les -liaisons appartiennent au contexte Voix, dans la mesure où -elles sont étroitement liées à une ligne mélodique, mais -comment en être sûr ? Pour répondre à cette question, -revenons en haut de la page de la RPI consacrée aux liaisons ; -il est écrit : @q{Les objets Liaison sont créés par le graveur -Slur_engraver}. Ainsi les liaisons seront créées dans n'importe -quel contexte où se trouve le @code{Slur_engraver}. Suivons -le lien vers la page @code{Slur_engraver}. Tout en bas, on -lit que le @code{Slur_engraver} est un élément appartenant -à cinq contextes Voix, dont le contexte de voix -standard, @code{Voice}. Notre hypothèse était donc juste. -Et parce que @code{Voice} est un contexte de très bas -niveau, qu'il est activé sans ambiguïté par le fait que l'on est -en train de saisir des notes, on peut ici ne pas le mentionner. - -@subheading Overriding once only - -@cindex dérogation pour une seule fois -@cindex usage unique, dérogation à - -@funindex \once -@funindex once - -Dans le dernier exemple ci-dessus, @emph{toutes} les liaisons étaient plus -épaisses. Et si on veut épaissir uniquement la première liaison ? On -recourt alors à la commande @code{\once}. Placée juste avant la commande -@code{\override}, elle lui indique de ne changer que la liaison commençant -avec la note @strong{juste après}. Si la note juste après n'ouvre pas une -liaison, la commande sera sans aucun effet -- elle ne reste pas en mémoire -jusqu'à la prochaine liaison, elle est purement et simplement ignorée. -Il faut donc que la commande introduite par @code{\once} soit insérée -comme suit : - - -@cindex Slur, exemple de dérogation -@cindex thickness, exemple de propriété -@cindex Liaison, exemple de dérogation -@cindex Épaisseur, exemple de propriété - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Alors seule la première liaison est rendue plus épaisse. - -La commande @code{\once} peut aussi être utilisée devant la commande -@code{\set}. - - -@subheading Reverting - -@cindex revert -@cindex retour -@cindex défaut, retour aux propriétés par - -@funindex \revert -@funindex revert - -Et si l'on voulait que les deux premières liaisons soient plus épaisses ? -On pourrait bien sûr utiliser deux commandes, chacune précédée de -@code{\once}, et placées juste avant la note par laquelle débute la -liaison : - - -@cindex Slur, exemple de dérogation -@cindex thickness, exemple de propriété -@cindex Liaison, exemple de dérogation -@cindex Épaisseur, exemple de propriété - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -mais on peut aussi, au lieu de la commande @code{\once}, utiliser après -la seconde liaison la commande @code{\revert}, qui ramène la propriété -@code{thickness} à sa valeur par défaut . - -@cindex Slur, exemple de dérogation -@cindex thickness, exemple de propriété -@cindex Liaison, exemple de dérogation -@cindex Épaisseur, exemple de propriété - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) - % Revert thickness of all following slurs to default of 1.2 - \revert Slur #'thickness - e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -N'importe quelle propriété modifiée par @code{\override} peut ainsi -être ramenée, grâce à la commande @code{\revert}, à sa valeur par -défaut. - -Ici s'achève notre introduction à la RPI et aux retouches -simples. Vous trouverez d'autres exemples dans les prochaines -sections de ce chapitre ; ils vous permettront, d'une part, -d'apprendre à connaître un peu mieux la RPI et, d'autre part, de -vous entraîner un peu plus à y chercher les informations. Ces -exemples seront progressivement accompagnés d'explications et -introduiront des termes nouveaux. - -@node Properties found in interfaces -@subsection Properties found in interfaces - -@cindex interface -@cindex interfaces, propriétés des -@cindex propriétés des interfaces - -Supposons maintenant que nous voulions imprimer des paroles en italique. -Quelle formulation de la commande @code{\override} allons-nous utiliser ? -Nous consultons en premier lieu, comme précédemment, la page de la RPI -qui contient la liste @q{Tous les objets de rendu}, et recherchons -un objet qui contrôle les paroles. Nous trouvons @code{LyricText}, qui -semble approprié. Nous cliquons dessus et nous voyons apparaître les -différentes propriétés des paroles, parmi lesquelles @code{font-series} -et @code{font-size}. Mais aucune ne propose l'italique. Car la mise -en forme des caractères est une propriété commune à tous les objets -d'écriture, si bien que, au lieu de figurer dans tous les objets de rendu, -elle est regroupée avec d'autres propriétés semblables et placée dans une -@strong{Interface}, la @code{font-interface}. - -Il nous faut donc apprendre à trouver les propriétés des interfaces -et découvrir les objets qui utilisent les propriétés de ces interfaces. - -Retournons à la page de la RPI qui traite des paroles -(@emph{LyricText}). En bas de la page est dressée sous forme de liens -la liste des interfaces qui concernent LyricText. Cette liste comporte -plusieurs entrées, dont @code{font-interface}. En cliquant dessus, nous -voyons apparaître les différentes propriétés associées à cette -interface, qui sont en même temps les propriétés de tous les objets qui -s'y rapportent, parmi lesquels LyricText. - -Nous avons alors sous les yeux tous les réglages de propriétés qui -contrôlent les polices de caractères, et notamment -@code{font-shape(symbole)}, où @code{symbole} peut prendre la valeur -@code{upright}, @code{italics} ou @code{caps}. - -Vous remarquerez que @code{font-series} et @code{font-size} figurent -aussi dans la liste. La question qui ne manque pas de se poser est : -@qq{Comment se fait-il que les propriétés @code{font-series} et -@code{font-size} se retrouvent à la fois dans @code{LyricText} et dans -l'interface @code{font-interface} alors que ce n'est pas le cas pour -@code{font-shape} ?} La réponse est que lorsqu'un objet @code{LyricText} -est créé, les valeurs globales par défaut de @code{font-series} et -@code{font-size} sont modifiées, mais pas celles de @code{font-shape}. -Les possibilités de modification dans @code{LyricText} ne concernent -donc que les valeurs à appliquer à @code{LyricText}. Les autres objets qui -dépendent de @code{font-interface} fixeront leurs propriétés différemment -lorsqu'ils seront créés. - -Voyons maintenant si nous sommes en mesure de formuler la commande -@code{\override} pour mettre les paroles en italique. L'objet est -@code{LyricText}, la propriété est @code{font-shape} et la valeur est -@code{italic}. Comme auparavant, nous laissons de côté le contexte. - -Signalons rapidement -- même si cette remarque est importante -- que, -puisque les valeurs de @code{font-shape} se présentent sous forme de -symboles, elles doivent être précédées d'une simple apostrophe, -@code{'}. C'est pour cette raison qu'il fallait une apostrophe devant -@code{thickness} dans l'exemple précédent, et qu'il en faut une devant -@code{font-shape}. Ce sont à chaque fois des symboles, qui sont -interprétés comme tels par LilyPond. Certains symboles peuvent être des -noms de propriété, comme @code{thickness} ou @code{font-shape}, -d'autres sont des valeurs à attribuer aux propriétés, comme -@code{italic}. À ne pas confondre avec les chaînes de caractères libres, -qui se présentent comme @code{"un texte libre"} ; pour plus de détails -sur les symboles et les chaînes de caractères, voir @ref{Scheme -tutorial}. - -Ainsi, la commande @code{\override} pour mettre les paroles en italique -est : - -@example -\override LyricText #'font-shape = #'italic -@end example - -@noindent -et elle doit être placée juste devant et tout près des paroles à modifier, -comme ceci : - -@cindex font-shape, exemple de propriété -@cindex italic, exemple -@cindex LyricText, exemple de dérogation -@cindex @code{\addlyrics}, exemple - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - \override LyricText #'font-shape = #'italic - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -et voilà les paroles en italiques. - -@subheading Specifying the context in lyric mode - -@cindex contexte, spécification en mode lyrique -@cindex mode lyrique, spécification de contexte en - -Lorsqu'il s'agit de paroles et qu'on cherche à préciser le contexte -sur le modèle de ce qui a été fait précédemment, la commande échoue. -Car une syllabe saisie en mode Paroles (lyricmode) se termine -obligatoirement par une espace, un saut de ligne ou un nombre. Tout -autre caractère compte comme un élément de la syllabe. C'est pourquoi -il faut une espace ou un saut de ligne avant le @code{@}} final, pour -éviter qu'il ne soit assimilé à la dernière syllabe. De même, il faut insérer -des espaces avant et après le point, @q{.}, qui sépare le nom de -contexte du nom de l'objet, faute de quoi les deux noms seront joints et -l'interpréteur ne pourra pas les reconnaître. La formulation correcte est -donc : - -@example -\override Lyrics . LyricText #'font-shape = #'italic -@end example - -@warning{Dans la saisie des paroles, pensez à toujours laisser une -espace entre la dernière syllabe et l'accolade fermante.} - -@warning{Lorsqu'on retouche des paroles, toujours placer des espaces -autour du point qui sépare le nom de contexte du nom d'objet.} - -@seealso -Manuel d'initiation : @ref{Scheme tutorial}. - - -@node Types of properties -@subsection Types of properties - - -@cindex propriété, types de - -Nous avons vu jusqu'à maintenant deux types de propriétés : -@code{nombre} et @code{symbol}. Pour pouvoir fonctionner, la valeur -associée à une propriété doit correspondre au type attendu et suivre les -règles liées à ce type. Le type de propriété est toujours donné entre -parenthèses après le nom de propriété dans la RPI. Voici une liste des -différents types de propriétés, avec les règles qui les régissent et -quelques exemples d'utilisation. Il faut, bien sûr, toujours ajouter un -symbole hash, @code{#}, devant ces valeurs lors de la saisie de la -commande @code{\override}. - -@multitable @columnfractions .2 .45 .35 -@headitem Type de propriété - @tab Règles - @tab Exemples -@item Booléenne (anglais @emph{Boolean}) - @tab Vrai (@emph{true} en anglais) ou Faux (@emph{false} en anglais), -sous la forme #t ou #f - @tab @code{#t}, @code{#f} -@item Dimension (en lignes de portée) - @tab Un nombre positif décimal (en unités de lignes de portée) - @tab @code{2.5}, @code{0.34} -@item Direction - @tab Une direction valide ou son équivalent numérique (valeur décimale -comprise entre -1 et 1 seulement) - @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @code{-1} -@item Durée (@emph{Moment} en anglais) - @tab Une durée de note construite avec la fonction make-moment - @tab @code{(ly:make-moment 1 4)}, @code{(ly:make-moment 3 8)} -@item Entier (@emph{Integer} en anglais) - @tab Un nombre entier positif - @tab @code{3}, @code{1} -@item Inconnu (@emph{Unknown} en anglais) - @tab Un processus, ou @code{#f} pour empêcher toute action - @tab @code{bend::print}, @code{ly:text-interface::print}, @code{#f} -@item Liste - @tab Plusieurs valeurs séparées par une espace, encadrées par des -parenthèses et prédédées par une apostrophe - @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'(1.0 0.25 0.5)} -@item Markup (ou étiquette) - @tab Toute commande @code{\markup} valide - @tab @code{\markup @{ \italic "cresc." @}} -@item Nombre - @tab Une valeur décimale positive ou négative - @tab @code{3.5}, @code{-2.45} -@item Paire (de nombres) - @tab Deux nombres séparées par @q{espace . espace}, encadrés -par des parenthèses et précédés par une apostrophe - @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} -@item Symbole - @tab L'un des symboles autorisés pour cette propriété, précédé par une -apostrophe - @tab @code{'italic}, @code{'inside} -@item Vecteur - @tab Une liste de trois éléments encadrés par des parenthèses et -précédés par apostrophe-hash, @code{'#} - @tab @code{'#(#t #t #f)} -@end multitable - -@seealso -Manuel d'initiation : @ref{Scheme tutorial}. - - -@node Appearance of objects -@section Appearance of objects - -Il est temps de mettre en pratique les notions apprises précédemment -pour modifier l'allure de la partition ; les exemples qui suivent -montrent l'utilisation des différentes méthodes de retouche. - -@menu -* Visibility and color of objects:: -* Size of objects:: -* Length and thickness of objects:: -@end menu - - -@node Visibility and color of objects -@subsection Visibility and color of objects - -Dans un but pédagogique, on peut être amené à masquer certains éléments -d'une partition, que les élèves doivent ensuite compléter. Imaginons, -par exemple, un exercice dans lequel il faudrait rétablir les barres de -mesure dans un morceau de musique. En temps normal, les barres de mesure -s'insèrent automatiquement. Comment faire pour les effacer de la -partition ? - -Avant de nous y attaquer, souvenons-nous que les propriétés d'objets -sont parfois groupées dans ce qu'on appelle des @emph{interfaces} -- -voir @ref{Properties found in interfaces}. Cela permet de rapprocher -toutes les propriétés susceptibles d'être utilisées ensemble pour -modifier un objet graphique -- si l'une d'elles est choisie pour un -objet, elle s'appliquera à tous les autres. Certains objets tirent -alors leurs propriétés de telle ou telle interface, d'autres objets de -telle ou telle autre interface. La liste des interfaces qui contiennent -les propriétés liées à un objet graphique (@emph{grob}) figure dans la -RPI, en bas de la page de description du @emph{grob} ; pour voir ces -propriétés, il faut aller voir ces interfaces. - -Nous avons vu, dans @ref{Properties of layout objects}, comment trouver -les informations sur les @emph{grobs}. Nous procédons de la même manière -et consultons la RPI pour connaître l'objet chargé d'imprimer les barres -de mesure. En cliquant sur @emph{Backend} puis sur @emph{Tous les -objets de rendu}, nous trouvons un objet appelé @code{BarLine}. Parmi -ses propriétés, deux d'entre elles déterminent son aspect visuel : -@code{break-visibility} et @code{stencil}. L'objet @code{BarLine} -est également lié à plusieurs interfaces, dont la @code{grob-interface} -où figurent les propriétés @code{transparent} et @code{color}. Toutes -peuvent modifier l'aspect visuel des barres de mesure -- et de beaucoup -d'autres objets, bien sûr. Examinons chacune d'elles tour à tour. - -@subheading stencil - -@cindex stencil, propriété - -Cette propriété contrôle l'apparence des barres de mesure en précisant -le type de symbole (glyphe) à imprimer. Comme pour de nombreuses -autres propriétés, on peut lui indiquer de ne rien imprimer en lui -attribuant la valeur @code{#f}. Essayons en laissant de côté, une fois -encore, le contexte concerné (@code{Voice} en l'occurrence) : - -@cindex BarLine, exemple de dérogation -@cindex stencil, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Les barres de mesure sont encore là ! Pourquoi ? Retournons à la RPI -et regardons de nouveau la page qui traite des propriétés de BarLine. -En haut de la page, il est précisé que @qq{Les objets BarLine sont créés -par le graveur Bar_engraver}. Allons à la page de @code{Bar_engraver}. -Tout en bas se trouve la liste des contextes dans lesquels fonctionne ce -graveur. Tous sont du type @code{Staff}, de sorte que, si la commande -@code{\override} n'a pas fonctionné comme prévu, c'est parce que -@code{Barline} n'appartient pas au contexte par défaut, @code{Voice}. -Si le contexte spécifié est erroné, la commande ne fonctionne pas. Cela -n'entraîne pas de message d'erreur, et rien n'apparaît sur le fichier log. -Essayons de corriger en mentionnant le bon contexte : - -@cindex BarLine, exemple de dérogation -@cindex stencil, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Cette fois, les barres de mesure ont disparu. - -@subheading break-visibility - -@cindex break-visibility, propriété - -La RPI mentionne, à la page sur @code{BarLine}, que la propriété -@code{break-visibility} attend comme argument un vecteur de trois -boléens. Ceux-ci indiquent respectivement si les barres de mesure -doivent être imprimées ou non à la fin de la ligne, à l'intérieur de la -ligne et au début de la ligne. Dans notre cas, nous voulons que toutes -les barres soient supprimées, si bien que la valeur dont nous avons -besoin est @code{'#(#f@tie{}#f@tie{}#f)}. Essayons, sans oublier -d'ajouter le contexte @code{Staff}. Vous remarquerez que, en plus de -cette valeur, nous ajoutons @code{#'#} devant la parenthèse ouvrante. -Le @code{'#} est nécessaire car il fait partie intégrante de la valeur -contenant un vecteur, et le premier @code{#} est là, comme toujours avec -la commande @code{\override}, pour introduire la valeur elle-même. - -@cindex BarLine, example of overriding -@cindex break-visibility property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'break-visibility = #'#(#f #f #f) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Comme on peut le constater, cette solution-là aussi supprime les barres -de mesure. - -@subheading transparent - -@cindex transparent, propriété -@cindex transparence - -La RPI mentionne, à la page sur @code{grob-interface}, que la propriété -@code{transparent} attend comme argument un boléen. Il faudrait donc -mettre @code{#t} pour rendre l'objet transparent. Dans cet exemple, -essayons de rendre transparente la métrique (@emph{time signature} en -anglais) plutôt que les barres de mesure. Pour cela, il nous faut -trouver le nom du @emph{grob} chargé de l'indication de mesure. De -retour sur la page @q{Tous les objets de rendu} de la RPI, nous -cherchons les propriétés de l'objet @code{TimeSignature}. Celui-ci est -géré par le graveur @code{Time_signature_engraver} qui, comme vous -pouvez le constater, appartient au contexte @code{Staff} et peut se -rattacher à la @code{grob-interface}. Dans ces conditions, la commande -pour rendre la métrique transparente est : - -@cindex TimeSignature, exemple de dérogation -@cindex transparent, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'transparent = ##t - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -La métrique a bien disparu mais la commande a laissé un blanc en lieu et -place du chiffrage. Ce peut être souhaitable dans le cadre d'un -exercice, afin que les élèves aient la place à compléter, mais dans -d'autres circonstances, ce peut être gênant. Pour y remédier, -attribuons plutôt au stencil des métriques la valeur @code{#f} : - -@cindex TimeSignature, exemple de dérogation -@cindex stencil, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -La différence est flagrante : le fait d'attribuer au stencil la valeur -@code{#f} supprime totalement l'objet, tandis que le fait de le rendre -@code{transparent} le laisse en place, mais de façon invisible. - -@subheading color - -@cindex color, propriété - -Essayons enfin de rendre les barres de mesure invisibles en les colorant -en blanc. La difficulté est de savoir si les barres blanches vont -couper ou non les lignes de la portée aux endroits où elles se -croisent. Vous verrez dans les exemples ci-dessous que cela peut se -produire, sans qu'on le sache à l'avance. Les explications de ce -phénomène et les solutions pour y remédier sont exposées dans -@ruser{Painting objects white}. Pour le moment, acceptons cet -inconvénient et concentrons-nous sur l'apprentissage de la gestion des -couleurs. - -La @code{grob-interface} indique que la valeur de la propriété -@code{color} est une liste, sans plus d'explication. En fait, cette -liste est une liste de valeurs en unités internes ; pour éviter d'avoir -à chercher ce qu'il faut y mettre, il existe différents moyens -d'indiquer la couleur. Le premier moyen consiste à utiliser l'une des -couleurs @emph{normales} de la première @ruser{List of colors}. Pour -mettre les barres de mesure en blanc, on écrit : - -@cindex BarLine, exemple de dérogation -@cindex color, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #white - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -et nous constatons que les barres de mesure sont une fois de plus -invisibles. Attention : aucune apostrophe ne précède @code{white} -- il -ne s'agit pas d'un symbole mais d'une @emph{fonction}. Quand on -l'invoque, elle fournit une liste de valeurs internes requises pour -changer la couleur en blanc. Les autres couleurs aussi, dans la -@qq{liste normale}, sont des fonctions. Pour en être certain, vous -pouvez faire l'essai en choisissant une autre fonction de la liste en -guise de couleur. - -@cindex couleur X11 -@cindex X11, couleurs - -@funindex x11-color - -Le deuxième moyen de changer la couleur consiste à utiliser la deuxième -@ruser{List of colors}, dite noms de couleurs X11. Ceux-ci doivent -obligatoirement être précédés d'une autre fonction, qui convertit les -noms de couleurs X11 en une liste de valeurs internes, @code{x11-color}, -comme ceci : - -@cindex BarLine, exemple de dérogation -@cindex color, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(x11-color 'white) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Vous noterez que, dans ce cas, la fonction @code{x11-color} admet un -symbole comme argument ; il faut donc placer une apostrophe devant le -symbole et insérer les deux à l'intérieur de parenthèses. - -@cindex rgb, couleur -@cindex couleurs rgb - -@funindex rgb-color - -Il existe une troisième fonction, écrite pour convertir les valeurs RGB -en couleurs internes -- la fonction @code{rgb-color}. Elle comporte -trois arguments, donnant respectivement l'intensité du rouge, du vert et -du bleu. Ces arguments prennent des valeurs comprises entre 0 et 1. -Ainsi, pour choisir la couleur rouge, la valeur serait -@code{(rgb-color1 0 0)} ; pour le blanc, ce serait -@code{(rgb-color 1 1 1)} : - -@cindex BarLine, exemple de dérogation -@cindex color, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(rgb-color 1 1 1) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Enfin, il existe une échelle de gris parmi les possibilités de couleurs -X11. Elle va du noir, @code{'grey0}, au blanc, @code{'grey100}, avec -un pas de 1. Essayons de l'utiliser en attribuant à tous les objets de -notre exemple différentes nuances de gris : - -@cindex StaffSymbol, exemple de dérogation -@cindex TimeSignature, exemple de dérogation -@cindex Clef, exemple de dérogation -@cindex NoteHead, exemple de dérogation -@cindex Stem, exemple de dérogation -@cindex BarLine, exemple de dérogation -@cindex color, exemple de propriété -@cindex x11-color, exemple d'utilisation - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.StaffSymbol #'color = #(x11-color 'grey30) - \override Staff.TimeSignature #'color = #(x11-color 'grey60) - \override Staff.Clef #'color = #(x11-color 'grey60) - \override Voice.NoteHead #'color = #(x11-color 'grey85) - \override Voice.Stem #'color = #(x11-color 'grey85) - \override Staff.BarLine #'color = #(x11-color 'grey10) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Vous remarquerez le contexte associé à chacun des objets. Une erreur -sur ce point empêcherait la commande de fonctionner. Souvenez-vous que -le contexte est celui dans lequel est placé le graveur approprié. Pour -chaque graveur, on peut trouver son contexte par défaut en partant de -l'objet lui-même, puis en cherchant le graveur qui le produit ; la page -du graveur dans la RPI nous indique alors le contexte dans lequel le -graveur se trouve normalement. - - -@node Size of objects -@subsection Size of objects - -@cindex modification de la taille des objets -@cindex taille d'objets -@cindex objets, taille -@cindex objets, modification de taille - -Pour commencer, reprenons l'exemple qui se trouvait dans -@ref{Nesting music expressions}, qui montrait comment créer une nouvelle -portée temporaire, du type @rglos{ossia}. - -@cindex alignAboveContext, exemple de propriété -@cindex @code{\with}, exemple - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Normalement, les ossia ne comportent ni clef ni indication de mesure, et -elles sont imprimées légèrement plus petit que la portée principale. -Nous avons déjà appris à enlever la clef et la métrique -- il suffit de -régler le stencil de chacun sur @code{#f}, comme ceci : - -@cindex alignAboveContext, exemple de propriété -@cindex @code{\with}, exemple -@cindex stencil, exemple de propriété -@cindex Clef, exemple de dérogation -@cindex TimeSignature, exemple de dérogation - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - } - { - \override Staff.Clef #'stencil = ##f - \override Staff.TimeSignature #'stencil = ##f - { f8 f c } - } - >> - r4 | - } -} -@end lilypond - -@noindent -La paire d'accolades ajoutée après la clause @code{\with} est nécessaire -pour être sûr que les retouches (@code{\override}) ainsi que la musique -qui se trouvent à l'intérieur soient bien appliquées à la portée -d'ossia. - -Mais alors, quelle différence y a-t-il à modifier le contexte de portée -au moyen de @code{\with} ou à modifier les stencils de la clef et de la -métrique avec @code{\override} ? La principale différence est que les -changements opérés dans une clause @code{\with} sont réalisés au moment -où le contexte est créé et restent par la suite les valeurs @strong{par -défaut} aussi longtemps que ce contexte existe, tandis que les commandes -@code{\set} ou @code{\override} insérées dans la musique sont dynamiques --- elles provoquent des changements synchronisés avec un point -particulier de la musique. Si les changements sont annulés ou -désactivés par @code{\unset} ou@code{\revert}, les réglages reprennent -les valeurs par défaut, c'est-à-dire celles qui ont été fixées dans la -clause @code{\with}, ou, en l'absence de celle-ci, les valeurs par -défaut normales. - -Certaines propriétés de contexte ne peuvent être modifiées que dans une -clause @code{\with}. Il s'agit des propriétés qu'on ne peut évidemment -plus changer après que le contexte a été créé. C'est le cas de -@code{alignAboveContext} et de son pendant, @code{alignBelowContext} --- une fois que la portée a été créée, son alignement est décidé et cela -n'aurait aucun sens de vouloir le modifier par la suite. - -Dans une clause @code{\with}, on peut aussi régler les valeurs par -défaut des propriétés d'un objet. Il suffit d'utiliser la commande -@code{\override} normale, sans s'occuper du nom de contexte -puisqu'il ne fait pas de doute qu'il s'agit du contexte en cours de -modification par la clause @code{\with}. Il se produirait même une -erreur si le contexte était précisé. - -Remplaçons donc l'exemple ci-dessus par celui-ci : - -@cindex alignAboveContext, exemple de propriété -@cindex @code{\with}, exemple -@cindex Clef, exemple de dérogation -@cindex TimeSignature, exemple dérogation - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - % Don't print clefs in this staff - \override Clef #'stencil = ##f - % Don't print time signatures in this staff - \override TimeSignature #'stencil = ##f - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Venons-en finalement au changement de taille des objets. - -Certains objets sont créés comme des glyphes choisis dans une police de -caractères. C'est le cas des têtes de notes, des altérations, des -@emph{markup}, des clefs, des métriques, des nuances et des paroles. -Pour changer leur taille, on modifie la propriété @code{font-size}, -comme nous le verrons rapidement. D'autres objets, comme les liaisons -de phrasé ou de prolongation -- en général les objets étendus -- sont -dessinés à la demande, si bien qu'aucune @code{font-size} ne leur est -associée. Ces objets tirent généralement leur dimension des objets -auxquels ils sont rattachés, de sorte qu'on ne doit pas avoir à les -redimensionner à la main. D'autres propriétés, comme la hauteur des -hampes et des barres de mesure, l'épaisseur des ligatures et d'autres -lignes, et l'écartement des lignes de portée, doivent encore être -modifiées de façon particulière. - -Si l'on revient à l'exemple d'ossia, commençons par changer la taille de -police. Nous pouvons employer deux méthodes. Soit nous changeons la -taille de police de chaque type d'objet avec des commandes comme -celle-ci pour les têtes de notes (@code{NoteHead}) : - -@example -\override NoteHead #'font-size = #-2 -@end example - -soit nous changeons la taille de toutes les polices à la fois grâce à la -propriété @code{fontSize}, en utilisant @code{\set} ou en l'insérant -dans une clause @code{\with} (mais alors sans le @code{\set}). - -@example -\set fontSize = #-2 -@end example - -Chacune de ces méthodes réduira la taille de police de deux points par -rapport à sa valeur précédente, sachant que chaque point réduit ou -augmente la taille d'environ 12 %. - -Essayons sur l'exemple d'ossia : - -@cindex alignAboveContext, exemple de propriété -@cindex @code{\with}, exemple -@cindex Clef, exemple de dérogation -@cindex TimeSignature, exemple de dérogation -@cindex fontSize, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - % Reduce all font sizes by ~24% - fontSize = #-2 - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Ce n'est pas encore parfait. Les têtes de notes et les crochets sont -plus petits mais, proportionnellement, les hampes sont trop longues et -les lignes de portée trop espacées. Il faut donc les réduire dans les -mêmes proportions que les polices de caractères. La prochaine -sous-section montrera comment faire. - -@node Length and thickness of objects -@subsection Length and thickness of objects - -@cindex distance -@cindex épaisseur -@cindex longueur -@cindex magstep -@cindex taille, modification -@cindex hampe, modification de longueur -@cindex écartement des lignes, modification - -Dans LilyPond, les écartements et longueurs sont généralement mesurés en -@qq{intervalles de lignes} (@emph{staff-spaces} en anglais), -c'est-à-dire l'écartement qui sépare deux lignes adjacentes dans la -portée -- plus rarement, il est question de demi-intervalles de lignes. -Les propriétés d'épaisseur (@code{thickness}), quant à elles, sont -généralement mesurées en unités d'une propriété interne appelée -@qq{épaisseur de ligne} (@code{line-thickness}). Par exemple, les -lignes de crescendo/decrescendo présentent par défaut une épaisseur de 1 -unité de @code{line-thickness}, alors que l'épaisseur d'une hampe est de -1,3. Toutefois, certaines propriétés d'épaisseur sont différentes : par -exemple, l'épaisseur des ligature se mesure en espaces de portée. - -Dans ces conditions, comment ajuster les longueurs à la taille des -polices de caractères ? La solution consiste à utiliser une fonction -spéciale appelée @code{magstep} -- pseudo facteur de zoom --, créée -précisément dans ce but. Elle comporte un argument, le changement de -taille de police (#-2 dans l'exemple précédent), à partir duquel elle -applique un facteur de mise à l'échelle qui réduit, ou augmente, les -objets en proportion. Voici comment elle s'utilise : - -@cindex alignAboveContext, exemple de propriété -@cindex @code{\with}, exemple -@cindex Clef, exemple de dérogation -@cindex TimeSignature, exemple de dérogation -@cindex fontSize , exemple de propriété -@cindex StaffSymbol, exemple de dérogation -@cindex magstep, exemple d'utilisation de la fonction -@cindex staff-space, exemple de propriété -@cindex stencil, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - fontSize = #-2 - % Reduce stem length and line spacing to match - \override StaffSymbol #'staff-space = #(magstep -2) - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -@noindent -Puisque la longueur des hampes et plusieurs autres propriétés de -longueur sont calculées par rapport à la valeur de la propriété -@code{staff-space}, elles sont automatiquement mises à l'échelle. Vous -remarquerez que cela n'affecte que la dimension verticale de l'ossia -- -la dimension horizontale étant déterminée par les objets de la portée -principale de façon à rester synchronisée vis-à-vis d'elle, elle n'est -pas affectée par tous ces changements de taille. Bien sûr, si l'échelle -de toute la portée principale était modifiée, tout le placement -horizontal s'en trouverait affecté. Il en sera question plus bas dans -cette section. - -Voilà qui complète la création d'une ossia. Les tailles et longueurs de tous -les objets peuvent être modifiées de manière analogue. - -Pour de petits changements d'échelle, comme dans l'exemple ci-dessus, il -n'est généralement pas utile d'ajuster l'épaisseur des différentes -lignes telles que les barres de mesure, les ligatures, les soufflets de -crescendo/decrescendo, les liaisons, etc. Si l'épaisseur d'un objet en -particulier doit être ajustée, le mieux est de modifier sa propriété -@code{thickness}. Nous avons vu plus haut, dans -@ref{Properties of layout objects}, un exemple de modification de -l'épaisseur des liaisons. L'épaisseur de tous les objets tracés -(c'est-à-dire ceux qui ne proviennent pas d'une police de caractère) -peut être changée de la même manière. - -@node Placement of objects -@section Placement of objects - - @menu -* Automatic behavior:: -* Within-staff objects:: -* Outside staff objects:: -@end menu - -@node Automatic behavior -@subsection Automatic behavior - -@cindex within-staff objects -@cindex outside-staff objects -@cindex objects, within-staff -@cindex objects, outside-staff - -Dans la notation musicale, il y a des objets qui appartiennent à la -portée et d'autres qui sont placés à l'extérieur de la portée. On les -appelle respectivement les @q{objets de la portée} (@emph{within-staff -objects} en anglais) et les @q{objets extérieurs à la portée} -(@emph{outside-staff objects}en anglais). - -Les objets de la portée sont ceux qui sont placés sur la portée --- les têtes de notes et les hampes, les altérations, etc. Leur -position est généralement déterminée par la musique elle-même -- ils -sont placés verticalement sur des lignes spécifiques ou sont liés à -d'autres objets placés de cette manière. Normalement, les collisions -entre les têtes et queues de notes et les altérations dans des accords -proches sont évitées automatiquement. Comme nous le verrons rapidement, -il existe des commandes et des possibilités de retouches qui permettent -de modifier ce comportement automatique. - -Parmi les objets extérieurs à la portée, on compte des éléments comme -les marques de reprise, les indications de texte ou de nuances. Dans -LilyPond, la règle est de placer verticalement ces objets extérieurs à -la portée le plus près possible de la portée, tout en évitant la -collision avec d'autres objets. LilyPond utilise la propriété -@code{outside-staff-priority} pour déterminer l'ordre selon lequel -placer ces objets, de la manière suivante : - -D'abord, LilyPond dresse la liste de tous les objets extérieurs à la -portée. Puis ceux-ci sont classés suivant leur -@code{outside-staff-priority}. Enfin, ils sont pris un par un, en -commençant par les objets avec la @code{outside-staff-priority} la plus -basse, et placés de façon à ne pas entrer en collision avec d'autres -objets déjà placés. Cela signifie que, si deux @emph{grobs} extérieurs -à la portée doivent occuper la même place, c'est celui qui a la -@code{outside-staff-priority} la plus basse qui est placé le plus près -de la portée. Et si deux objets ont la même -@code{outside-staff-priority}, le premier rencontré sera placé le plus -près de la portée. - -Dans l'exemple suivant, tous les @emph{markup} ont la même priorité, -dans la mesure où rien n'est indiqué explicitement. Vous remarquerez -que @code{Text3} est également positionné près de la portée, juste -en-dessous de @code{Text2}. - -@cindex markup, exemple - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -Les portées aussi sont positionnées, par défaut, le plus près possible -les unes des autres, en ménageant tout de même une certaine séparation. -Si des notes se rapprochent nettement d'une portée adjacente, elles ne -forceront les portées à s'écarter que s'il y a un risque de -chevauchement. - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \relative c' { c a, } - } - \new Staff { - \relative c'''' { c a, } - } ->> -@end lilypond - - -@node Within-staff objects -@subsection Within-staff objects - -Nous avons vu que les commandes @code{\voiceXXX} jouent sur la -direction des liaisons, des doigtés et sur toute autre chose liée à -l'orientation des queues de notes. Ces commandes sont essentielles dans -la musique polyphonique pour distinguer des lignes mélodiques -entremêlées. Mais il arrive qu'on ait besoin de modifier ce comportement -automatique. On peut le faire pour toutes les parties de la musique ou -juste pour une note. La propriété qui contrôle ce comportement est la -propriété @code{direction} de chaque objet. Expliquons d'abord ce -qu'elle fait, puis nous présenterons un certain nombre de commandes -déjà prêtes qui évitent, pour les modifications les plus courantes, -d'avoir à encoder les retouches. - -Certains objets comme les traits des liaisons se recourbent tantôt -vers le haut, tantôt vers le bas ; d'autres encore, comme les hampes -et les crochets, peuvent se décaler vers la gauche ou vers la droite -selon qu'ils pointent vers le haut ou vers le bas. Ce comportement est -géré automatiquement dès lors que @code{direction} est activé. - -@cindex down -@cindex up -@cindex center -@cindex neutral - -L'exemple ci-dessous montre dans la première mesure le comportement par -défaut des hampes -- celles des notes les plus hautes pointant vers le -bas et celles des notes les plus basses pointant vers le haut ; viennent -ensuite quatre notes avec les hampes forcées vers le bas, puis quatre -autres avec les hampes forcées vers le haut, et pour finir quatre notes -de nouveau avec le comportement par défaut. - -@cindex Stem, exemple de dérogation -@cindex direction, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a4 g c a -\override Stem #'direction = #DOWN -a g c a -\override Stem #'direction = #UP -a g c a -\revert Stem #'direction -a g c a -@end lilypond - -Nous utilisons ici les directions @code{DOWN} et @code{UP}. Elles -correspondent respectivement aux valeurs @code{-1} et @code{+1}, -que l'on peut utiliser à la place. La valeur @code{0} peut aussi être -utilisée dans certains cas. Elle est interprétée comme un @code{UP} -pour les hampes, et comme un @q{centré} pour d'autres objets. Il -existe une direction, @code{CENTER}, qui correspond à la valeur -@code{0}. - -Quoi qu'il en soit, ces retouches manuelles sont rarement utilisées car -il existe des équivalents sous forme de commandes prédéfinies. Voici un -tableau des plus courantes. Lorsque ce n'est pas évident, leur -signification est précisée. - -@multitable @columnfractions .2 .2 .25 .35 -@headitem Bas/Gauche - @tab Haut/Droite - @tab Annulation - @tab Effet -@item @code{\arpeggioArrowDown} - @tab @code{\arpeggioArrowUp} - @tab @code{\arpeggioNormal} - @tab Flèche en bas, en haut, ou pas de flèche -@item @code{\dotsDown} - @tab @code{\dotsUp} - @tab @code{\dotsNeutral} - @tab Déplacement des points pour éviter les lignes de portée -@item @code{\dynamicDown} - @tab @code{\dynamicUp} - @tab @code{\dynamicNeutral} - @tab -@item @code{\phrasingSlurDown} - @tab @code{\phrasingSlurUp} - @tab @code{\phrasingSlurNeutral} - @tab Attention : à distinguer des commandes de liaison ci-dessous -@item @code{\slurDown} - @tab @code{\slurUp} - @tab @code{\slurNeutral} - @tab -@item @code{\stemDown} - @tab @code{\stemUp} - @tab @code{\stemNeutral} - @tab -@item @code{\textSpannerDown} - @tab @code{\textSpannerUp} - @tab @code{\textSpannerNeutral} - @tab Le texte saisi en tant qu'extension est au-dessous/au-dessus de la portée -@item @code{\tieDown} - @tab @code{\tieUp} - @tab @code{\tieNeutral} - @tab -@item @code{\tupletDown} - @tab @code{\tupletUp} - @tab @code{\tupletNeutral} - @tab Les nolets sont au-dessous/au-dessus des notes -@end multitable - -Attention : ces commandes prédéfinies @strong{ne doivent pas} être -précédées de @code{\once}. Pour limiter l'effet à une seule note, il -faut soit utiliser la commande équivalente @code{\once \override}, soit -utiliser la commande prédéfinie, suivie, après la note à modifier, de la -commande @code{\xxxNeutral} correspondante. - -@subheading Fingering - -@cindex doigtés, positionnement -@cindex doigtés, accords - -Le placement des doigtés sur des notes simples peut aussi être contrôlé -par la propriété @code{direction}, mais le changement de -@code{direction} n'a pas d'effet sur les accords. Comme nous le -verrons, il existe des commandes qui permettent de contrôler le doigté -sur chaque note d'un accord, en plaçant l'indication de doigté -au-dessus, en dessous, à gauche ou à droite de chaque note. - -Tout d'abord, voici l'effet de @code{direction} sur le doigté lié à une -note simple. La première mesure montre le comportement par défaut, et -les deux suivantes montrent l'effet lorsqu'on indique @code{DOWN} et -@code{UP} : - -@cindex doigtés, exemple de dérogation -@cindex direction, exemple de propriété - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #DOWN -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #UP -c-5 a-3 f-1 c'-5 -@end lilypond - -Le fait d'intervenir sur la propriété @code{direction} n'est sûrement -pas la façon la plus simple de placer manuellement les doigtés au-dessus -ou en dessous des notes ; mieux vaut utiliser @code{_} ou @code{^} -devant le chiffre de doigté plutôt que @code{-}. Voici ce que donne -l'exemple précédent avec cette méthode : - -@cindex doigtés, exemple - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -c_5 a_3 f_1 c'_5 -c^5 a^3 f^1 c'^5 -@end lilypond - -La propriété @code{direction} ne fonctionne pas pour les accords alors -que les préfixes de direction, @code{_} et @code{^}, fonctionnent. Par -défaut, le doigté est placé automatiquement à la fois au-dessus et -au-dessous des notes d'un accord, comme ceci : - -@cindex doigtés, exemple - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -@noindent -mais il est possible de forcer manuellement vers le haut ou vers le bas le -placement de tous ou certains chiffres de doigté, comme ceci : - -@cindex doigtés, exemple - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -On peut aller encore plus loin dans le positionnement des doigtés pour -chacune des notes d'un accord grâce à la commande @code{\set -fingeringOrientations}. La syntaxe de cette commande est : - -@example -@code{\set fingeringOrientations = #'([up] [left/right] [down])} -@end example - -@noindent -On utilise @code{\set} car @code{fingeringOrientations} est une propriété -du contexte @code{Voice}, créée et utilisée par le graveur -@code{New_fingering_engraver}. - -On peut attribuer à cette propriété une liste composée de une à trois -valeurs. Celles-ci déterminent si l'indication de doigté doit être -placée au-dessus (lorsque @code{up} apparaît dans la liste), au-dessous -(lorsque @code{down} apparaît), à gauche (lorsque @code{left} apparaît) -ou à droite (lorsque @code{right} apparaît). En revanche, si une valeur -n'est pas sur la liste, aucun doigté n'ira à cet emplacement. LilyPond -garde ces contraintes en mémoire et recherche le meilleur emplacement -pour le doigté des notes des accords suivants. Vous remarquerez que -@code{left} et @code{right} s'excluent l'un l'autre -- l'indication de -doigté ne peut être placée que d'un côté ou de l'autre, pas des deux. - -@warning{Ppour contrôler à l'aide de cette commande le placement du -doigté sur une note simple, il faut la saisir comme un accord composé -d'une note unique, en l'encadrant de chevrons.} - -Voici quelques exemples : - -@cindex doigtés, exemple -@cindex @code{\set}, exemple d'utilisation -@cindex fingeringOrientations, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - -@noindent -Si les indications de doigtés paraissent un peu serrées, on peut -toujours réduire la taille de police (@code{font-size}). La valeur -par défaut donnée dans la RPI à la page de l'objet -@code{Fingering} étant @code{-5}, essayons @code{-7} : - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\override Fingering #'font-size = #-7 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - - -@node Outside staff objects -@subsection Outside staff objects - -Les objets extérieurs à la portée sont placés automatiquement de façon à -éviter les collisions. Les objets avec la plus petite valeur de la -propriété @code{outside-staff-priority} sont placés au plus près de la -portée, tandis que les autres sont écartés autant qu'il faut pour éviter -les collisions. La @code{outside-staff-priority} est définie dans la -@code{grob-interface} ; elle est donc une propriété commune à tous les -objets de rendu. Par défaut, elle est réglée sur @code{#f} pour tous -les objets de la portée, et porte une valeur numérique appropriée à -chacun des objets extérieurs à la portée, à mesure qu'ils sont créés. -Le tableau suivant montre la valeur numérique par défaut pour -quelques-uns des objets extérieurs à la portée les plus courants qui -sont placés, par défaut, dans les contextes @code{Staff} ou -@code{Voice}. - -@multitable @columnfractions .3 .3 .3 -@headitem Objet de rendu - @tab Priorité - @tab Contrôle la position de : -@item @code{MultiMeasureRestText} - @tab @code{450} - @tab Texte sur les silences qui couvrent des mesures entières -@item @code{TextScript} - @tab @code{450} - @tab Texte des @emph{markup} (ou étiquettes) -@item @code{OttavaBracket} - @tab @code{400} - @tab Indication d'octaviation -@item @code{TextSpanner} - @tab @code{350} - @tab Bandeau ou extension de texte -@item @code{DynamicLineSpanner} - @tab @code{250} - @tab Toutes les marques de nuances -@item @code{VoltaBracketSpanner} - @tab @code{100} - @tab Bandeau de répétition -@item @code{TrillSpanner} - @tab @code{50} - @tab Bandeau de trille -@end multitable - -Voici un exemple qui montre le placement par défaut de certains -d'entre eux. - -@cindex text spanner -@cindex ottava bracket - -@funindex \startTextSpan -@funindex startTextSpan -@funindex \stopTextSpan -@funindex stopTextSpan - -@cindex TextSpanner, exemple de dérogation -@cindex bound-details, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'bound-details #'left #'text - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -Cet exemple montre comment créer des extensions de texte (@emph{Text -Spanners} en anglais ) -- texte avec des longues lignes au-dessus d'un -passage musical. L'extension s'étend depuis la commande -@code{\startTextSpan} jusqu'à la commande @code{\stopTextSpan} et le -format de texte est défini par la commande @code{\override TextSpanner}. -Pour de plus amples détails, voir @ruser{Text spanners}. - -Il montre aussi comment créer des marques d'octaviation. - -@cindex modification du positionnement des numéros de mesure -@cindex numéros de mesure, modification du positionnement -@cindex modification du positionnement des indications métronomiques -@cindex indications métronomiques, modification du positionnement -@cindex modification du positionnement des marques de repère -@cindex marques de repère, modification du positionnement - -Vous aurez remarqué que les numéros de mesure, l'indication métronomique -et les marques de répétition n'apparaissent pas. Par défaut, ils sont -créés dans le contexte @code{Score} et leur -@code{outside-staff-priority} est ignorée face aux objets qui sont créés -dans le contexte @code{Staff}. Si vous voulez faire apparaître les -numéros de mesure, l'indication métronomique ou les marques de -répétition conformément à la valeur de leur -@code{outside-staff-priority}, il vous faudra retirer respectivement le -@code{Bar_number_engraver}, le @code{Metronome_mark_engraver} oule -@code{Mark_engraver} du contexte @code{Score} et les placer en haut du -contexte @code{Staff}. Après quoi ces marques porteront les valeurs de -@code{outside-staff-priority} par défaut suivantes : - -@multitable @columnfractions .3 .3 -@headitem Objet de rendu @tab Priorité -@item @code{RehearsalMark} @tab @code{1500} -@item @code{MetronomeMark} @tab @code{1000} -@item @code{BarNumber} @tab @code{ 100} -@end multitable - -Si les valeurs de @code{outside-staff-priority} par défaut ne donnent -pas les résultats que vous attendez, il suffit de modifier la priorité -de l'un de ces objets. Supposons que vous vouliez placer l'indication -d'octaviation sous le bandeau de texte, dans l'exemple précédent. Tout -ce que nous devons faire, c'est regarder la priorité de -@code{OttavaBracket} dans la RPI ou dans le tableau plus haut, et la -ramener à une valeur plus basse que celle de @code{TextSpanner}, en -gardant à l'esprit que @code{OttavaBracket} est créé dans le contexte -@code{Staff} : - -@cindex TextSpanner, exemple de dérogation -@cindex bound-details, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'bound-details #'left #'text - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -%Place following Ottava Bracket below Text Spanners -\once \override Staff.OttavaBracket #'outside-staff-priority = #340 -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -Le fait de changer la @code{outside-staff-priority} peut aussi servir à -contrôler le positionnement vertical des objets individuels, quoique le -résultat ne soit pas toujours formidable. Imaginons que nous voulions -placer @qq{Text3} au-dessus de @qq{Text4} dans l'exemple de la section -Comportement automatique, plus haut (voir @ref{Automatic behavior}). Il -nous suffit pour cela de regarder dans la RPI ou dans le tableau plus -haut la priorité de @code{TextScript}, et d'augmenter la priorité de -@qq{Text3} jusqu'à une valeur très haute : - -@cindex TextScript, exemple de dérogation -@cindex outside-staff-priority, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -\once \override TextScript #'outside-staff-priority = #500 -c^"Text3" -c^"Text4" -@end lilypond - -S'il est vrai que cela place @qq{Text3} au-dessus de @qq{Text4}, ça le -place aussi plus haut que @qq{Text2} tandis que @qq{Text4} dégringole. -Ce n'est peut-être pas si bien que ça. En fait, ce que nous aimerions -faire, c'est placer toutes les annotations à égale distance de la -portée. Pour cela, nous avons besoin d'espacer horizontalement les -notes pour laisser plus de place au texte. C'est possible grâce à la -commande @code{textLengthOn}. - -@subheading \textLengthOn - -@cindex notes, répartition selon le texte - -@funindex \textLengthOn -@funindex textLengthOn -@funindex \textLengthOff -@funindex textLengthOff - -Par défaut, l'espacement horizontal d'un texte produit sous forme de -@emph{markup} (ou d'étiquette) n'est pas pris en compte, dans la mesure -où ce qui est concerné n'entre pas dans la musique. La commande -@code{\textLengthOn} inverse ce comportement, faisant en sorte que les -notes soient espacées autant qu'il faut pour s'adapter au texte : - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\textLengthOn % Cause notes to space out to accommodate text -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -La commande qui permet de revenir au comportement par défaut est -@code{\textLengthOff}. Rappelez-vous que @code{\once} ne -fonctionne qu'avec @code{\override}, @code{\set}, @code{\revert} ou -@code{\unset}, et donc ne peut pas être utilisé avec -@code{\textLengthOn}. - -@cindex markup text, allowing collisions - -Les textes des @emph{markup} éviteront également les notes qui -s'échappent au-dessus de la portée. Si ce n'est pas notre souhait, il -est possible de supprimer ce déplacement automatique vers le haut en -attribuant à la priorité la valeur @code{#f}. Voici un exemple qui -montre comment les textes des @emph{markup} interagissent avec ces types -de notes. - -@cindex TextScript, exemple de dérogation -@cindex outside-staff-priority, exemple de propriété - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -% This markup is short enough to fit without collision -c2^"Tex" -c''2 -R1 -% This is too long to fit, so it is displaced upwards -c,,2^"Text" -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -c,,2^"Long Text " -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\textLengthOn % and turn on textLengthOn -c,,2^"Long Text " % Spaces at end are honored -c''2 -@end lilypond - - -@subheading Dynamics - -@cindex modifier le positionnement des nuances -@cindex nuances, modifier le positionnement - -Les indications de nuances se placent normalement sous la portée mais on -peut les placer au-dessus avec la commande @code{dynamicUp}. Elles se -positionnent verticalement par rapport à la note à laquelle elles sont -liées et se décalent vers le bas (ou le haut) en fonction des objets de -la portée comme les liaisons de phrasé ou les numéros de mesure. Cela -peut donner d'assez bons résultats, comme le montre cet exemple : - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\clef "bass" -\key aes \major -\time 9/8 -\dynamicUp -bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | -ees,2.~\)\mf ees4 r8 | -@end lilypond - -De toute façon, si les notes et les nuances qui leur sont liées sont -trop proches, le positionnement automatique évitera les collisions en -déplaçant davantage les nuances suivantes, mais le résultat peut ne -pas être très satisfaisant, comme le montre cet exemple artificiel : - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Si une telle situation devait survenir dans de la musique @qq{réelle}, -il serait préférable d'espacer un peu plus les notes, de façon que les -indications de nuance puissent toutes se situer à la même distance de la -portée. Il était possible de faire cela pour les textes de -@emph{markup} grâce à la commande @code{\textLengthOn} mais il n'existe -pas d'équivalent pour les indications de nuance. Il nous faut donc -chercher à faire cela avec la commande @code{\override}. - -@subheading Grob sizing - -@cindex grob, dimensionnement -@cindex dimensionnement des grobs - -Tout d'abord, nous devons apprendre ce qui détermine la dimension des -grobs. Tous les grobs portent en eux un point de référence qui est -utilisé pour les positionner par rapport à leur objet parent. Ce point du -grob est placé à une distance horizontale, @code{X-offset}, -et à une distance verticale, @code{Y-offset}, de son parent. -L'étendue horizontale de l'objet est fixée par une paire de -nombres, @code{X-extent}, qui donnent la position du coin -gauche et du coin droit par rapport au point de référence. De -même, l'étendue verticale est fixée par une paire de nombre, -@code{Y-extent}. Ce sont des propriétés communes à tous les -grobs et que gère la @code{grob-interface}. - -@cindex @code{extra-spacing-width} - -Par défaut, la largeur des objets extérieurs à la portée est donnée -comme étant nulle, si bien qu'ils peuvent se chevaucher -horizontalement. Pour arriver à cela, on a ajouté l'infini à -l'extension gauche et moins l'infini à l'extension droite, en -attribuant à @code{extra-spacing-width} la valeur - @code{'(+inf.0 . -inf.0)}. Pour être sûr que les objets ne se -chevaucheront pas horizontalement, nous devons donc corriger -cette valeur de @code{extra-spacing-width} en @code{'(0 . 0)}, -afin que leur vraie largeur se manifeste. La commande pour y -parvenir avec des indications de nuances est : - -@example -\override DynamicText #'extra-spacing-width = #'(0 . 0) -@end example - -@noindent -Voyons si ça marche sur notre exemple précédent : - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -\override DynamicText #'extra-spacing-width = #'(0 . 0) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Bon, cela a mis un terme aux déplacements verticaux des -nuances mais il reste deux problèmes. Il faudrait que les -nuances soient un peu plus écartées et ce serait mieux si -elles étaient toutes à la même distance de la portée. Le -premier problème est simple à résoudre. Au lieu d'attribuer -à @code{extra-spacing-width} la valeur zéro, nous pourrions -mettre un peu plus. L'unité est la distance entre deux lignes -de portée, donc en écartant le bord gauche d'une demi-unité -et le bord droit d'une demi-unité, on obtient : - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 staff space -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -C'est mieux mais nous voulons peut-être aligner les indications de -nuances sur une même ligne plutôt que de les voir monter et -descendre avec les notes. La propriété qui gère cela est -@code{staff-padding} ; la section suivante lui est consacrée. - - -@node Collisions of objects -@section Collisions of objects - - -@menu -* Moving objects:: -* Fixing overlapping notation:: -* Real music example:: -@end menu - -@node Moving objects -@subsection Moving objects - -Aussi surprenant que cela puisse paraître, LilyPond n'est pas parfait. -Certains éléments sur la partition peuvent se chevaucher, ce qui est -regrettable mais, le plus souvent, facile à corriger. En général, quand -on déplace des objets, c'est pour des raisons de lisibilité ou -d'esthétique -- ils rendraient mieux avec un peu plus ou un peu moins -d'espace autour d'eux. - -Il y a trois façons de résoudre les problèmes de chevauchement. Il est -préférable de les aborder dans l'ordre suivant : - -@enumerate -@item -L'@strong{orientation} d'un objet qui en chevauche un autre peut être -changée grâce aux commandes prédéfinies dont la liste a été donnée -plus haut à propos des objets de portée (voir @ref{Within-staff objects}). -Les queues de notes, les liaisons de phrasé et de prolongation, les -crochets, les nuances et les nolets peuvent facilement être repositionnés -de cette manière. En contrepartie, vous n'avez le choix qu'entre deux -positions, sans personnalisation possible. - -@item -Les @strong{propriétés d'objet}, auxquelles LilyPond a recours pour -positionner les objets, sont modifiables avec @code{\override}. Il y a deux -avantages à changer ces propriétés : (a) d'autres objets pourront être -déplacés automatiquement si nécessaire pour faire de la place, et (b) -la même retouche peut s'appliquer à toutes les occurrences du même -type d'objet. Ces propriétés sont : - -@itemize - -@item -@code{direction} - -Ce point a déjà été traité en détails -- voir @ref{Within-staff objects}. - -@item -@code{padding}, @code{left-padding}, -@code{right-padding}, @code{staff-padding} - -@cindex padding -@cindex left-padding property -@cindex padding property -@cindex right-padding property -@cindex staff-padding property - -Au moment de positionner un objet, la valeur de sa propriété -@code{padding} détermine l'espace à laisser libre entre celui-ci et le -coin le plus proche de l'objet à côté duquel il est placé. Vous remarquerez -que c'est la valeur @code{padding} de l'objet @strong{à placer} qui -compte ; la valeur @code{padding} de l'objet déjà placé est ignorée. -Les espaces libres déterminés par @code{padding} s'appliquent à tous -les objets associés à la @code{side-position-interface}. - -Le positionnement de groupes d'altérations est contrôlé par -@code{left-padding} et @code{right-padding}, et non plus @code{padding}. -Ces propriétés appartiennent à l'objet @code{AccidentalPlacement}, qui, -vous le remarquerez, prend place dans le contexte @strong{Staff}. Dans le -processus de composition, les têtes de notes sont composées en premier, -puis les altérations, s'il y en a, sont ajoutées à gauche des têtes de notes -suivant la propriété @code{right-padding} qui détermine l'espacement par -rapport aux têtes de notes. C'est pourquoi seule la propriété -@code{right-padding} de l'objet @code{AccidentalPlacement} joue sur le -positionnement des altérations. - -La propriété @code{staff-padding} est très proche de la propriété -@code{padding} : @code{padding} contrôle l'espace minimum entre un -objet qui accepte la @code{side-position-interface} et l'objet le plus -proche (généralement une note ou une ligne de portée) ; @code{staff-padding} -ne s'applique qu'aux objets qui sont toujours placés en-dehors de la portée -- -il contrôle l'espace minimum à insérer entre l'objet et la portée. Attention : -par défaut, @code{staff-padding} concerne les objets positionnés par rapport -à la portée et n'a aucun effet sur les objets qui sont positionnés par -rapport à une note ; il est toutefois possible de le régler pour -fonctionner avec ces derniers. - -Pour trouver quelle propriété @q{padding} employer pour l'objet que vous -cherchez à repositionner, il vous faut consulter les propriétés de l'objet dans -la RPI. Prenez garde que les propriétés @q{padding} ne sont pas forcément -traitées dans l'objet en question ; il faut alors regarder les objets -qui semblent s'en rapprocher. - -Toutes les valeurs @q{padding} sont exprimées en espaces de portée. -Pour la plupart des objets, la valeur par défaut est aux alentours de 1.0, -parfois moins (cela dépend de chaque objet). Il est possible de la modifier -lorsqu'on a besoin d'un espace vide plus grand (ou plus petit). - - -@item -@code{self-alignment-X} - -@cindex self-alignment-X property -Cette propriété sert à aligner les objets sur la gauche, sur la droite ou -à les centrer par rapport au point de référence des objets parents. -Elle peut être utilisée avec tous les objets qui acceptent la -@code{self-alignment-interface}. Il s'agit, en général, des objets qui -contiennent du texte. Les valeurs admises sont @code{LEFT}, -@code{RIGHT} et @code{CENTER}. On peut aussi attribuer à -la place une valeur numérique entre @code{-1} et @code{+1}, -où @code{-1} signifie alignement sur la gauche, @code{+1} -alignement sur la droite, et les nombres intermédiaires déplacent -progressivement le texte de la gauche vers la droite. Des valeurs -numériques supérieures à @code{1} sont également admises -pour déplacer le texte encore plus loin vers la gauche, ou des -valeurs inférieures à @code{-1} pour déplacer le texte encore -plus loin vers la droite. Un écart de @code{1} en valeur -correspond à un déplacement de la moitié de la longueur du -texte. - -@item -@code{extra-spacing-width} - -@cindex extra-spacing-width property -Cette propriété est utilisée pour tous les objets qui acceptent la -@code{item-interface}. Elle reçoit deux nombres, le premier étant -ajouté au bord gauche et le second au bord droit. Des nombres -négatifs déplacent le coin vers la gauche, des nombres positifs -vers la droite, si bien que pour élargir un objet, le premier nombre -doit être négatif et le second positif. Attention : tous les objets -n'acceptent pas forcément les deux nombres. Par exemple, l'objet -@code{Accidental} ne retient que le premier nombre (coin gauche). - - -@item -@code{staff-position} - -@cindex staff-position property -@code{staff-position} est une propriété de la -@code{staff-symbol-referencer-interface}, qui s'applique aux objets -positionnés par rapport à la portée. Elle indique, en demi-espaces de -portée, la position verticale des objets par rapport à la ligne médiane -de la portée. C'est bien pratique pour résoudre des problèmes de -collision entre des objets comme les silences valant mesure entière, -les liaisons et les notes de différentes voix. - -@item -@code{force-hshift} - -@cindex force-hshift property -Des notes très proches dans un accord, ou des notes simultanées dans -différentes voix, peuvent être disposées sur deux colonnes, rarement -plus, pour éviter que les têtes de notes ne se chevauchent. On parle -alors de colonnes de notes et un objet appelé @code{NoteColumn} -est créé pour placer les notes sur la colonne. - -La propriété @code{force-hshift} appartient à @code{NoteColumn} (en -réalité à la @code{note-column-interface}). Le fait de la modifier permet -de déplacer une colonne de notes selon l'unité appropriée aux colonnes -de notes, à savoir la largeur des têtes de notes de la première voix. Son -utilisation est réservée à des situations complexes dans lesquelles les -commandes habituelles @code{\shiftOn} -(voir @ref{Explicitly instantiating voices}) ne suffisent plus à résoudre les -conflits. Elle est alors préférable à l'utilisation de la propriété -@code{extra-offset}, dans la mesure où on n'a pas besoin d'exprimer -la distance en espaces de portée et où le fait de déplacer les notes à -l'intérieur ou à l'extérieur d'une @code{NoteColumn} affecte d'autres -actions comme les fusionnements de notes. - -@end itemize - -@item -Pour terminer, quand toutes les autres méthodes ont échoué, il est -possible de repositionner verticalement les objets à la main par rapport -à la ligne médiane de la portée, ou en les déplaçant à une distance -donnée vers une nouvelle position. Les inconvénients sont qu'il faut -individuellement pour chaque objet trouver les valeurs correctes de -repositionnement, souvent par tâtonnement, et que, puisque le -mouvement est opéré après que LilyPond a placé tous les autres -objets, c'est à l'utilisateur de résoudre tous les problèmes de collisions -qui pourraient survenir. Et le pire avec cette méthode est que, le jour -où la musique est modifiée, il faut de nouveau rechercher les -valeurs de repositionnement. Les propriétés à utiliser pour ce type de -repositionnement manuel sont : - - -@table @code -@item extra-offset - -@cindex extra-offset property -Cette propriété s'applique à tout objet acceptant la @code{grob-interface}. -Elle reçoit une paire de nombre qui indiquent le déplacement supplémentaire -dans le sens horizontal et vertical. Des nombres négatifs déplacent l'objet -vers la gauche ou vers la droite. L'unité utilisée est l'espace de portée. Le -déplacement supplémentaire intervient une fois que la composition des -objets est achevée, si bien qu'un objet peut être repositionné à n'importe -quel endroit sans que ça perturbe quoi que ce soit. - -@item positions - -@cindex positions property -Cette propriété est très utile pour ajuster manuellement l'inclinaison et -la hauteur des barres de croches, des liaisons et des nolets. Elle est -suivie de deux nombres qui donnent la position des bords gauche et -droit des barres, liaisons, etc., par rapport à la ligne médiane de la -portée. L'unité de référence est l'intervalle de lignes de portée. Attention -toutefois au fait que les liaisons et phrasés ne peuvent pas être repositionnés -n'importe où. LilyPond commence par dresser la liste des emplacements -possibles pour les liaisons et choisit par défaut la liaison qui @qq{semble -la meilleure}. Si la propriété @code{positions} a été retouchée, la -liaison la plus proche de la position demandée sera retenue dans la -liste. -@end table - -@end enumerate - -Il est possible qu'un objet ne dispose pas de toutes ces propriétés. Il -est donc nécessaire de consulter la RPI pour vérifier quelles sont les -propriétés disponibles pour l'objet en question. - -Voici une liste d'objets les plus couramment impliqués dans les -collisions, avec le nom de l'objet à consulter dans la RPI afin de trouver -les propriétés à retoucher pour obtenir un déplacement. - - -@multitable @columnfractions .5 .5 -@headitem Type d'objet @tab Nom d'objet -@item Articulations @tab @code{Script} -@item Barres de croches @tab @code{Beam} -@item Doigté @tab @code{Fingering} -@item Liaisons de phrasé @tab @code{Slur} -@item Liaisons de prolongation @tab @code{Tie} -@item Nolets @tab @code{TupletBracket} -@item Nuances (verticalement) @tab @code{DynamicLineSpanner} -@item Nuances (horizontalement) @tab @code{DynamicText} -@item Reprises / marques de texte @tab @code{RehearsalMark} -@item Texte, p.ex. @code{^"texte"} @tab @code{TextScript} -@end multitable - - -@node Fixing overlapping notation -@subsection Fixing overlapping notation - -Voyons maintenant comment les propriétés décrites dans la section -précédente peuvent nous aider à résoudre les collisions. - -@subheading padding property - -@cindex padding -@cindex fixing overlapping notation -@cindex overlapping notation - -En jouant sur la propriété @code{padding} (littéralement -@q{rembourrage}), on augmente (ou on diminue) la distance entre -des symboles qui sont imprimés au-dessus ou en dessous des notes. - -@cindex Script, example of overriding -@cindex padding property, example - -@lilypond[quote,fragment,relative=1,verbatim] -c2\fermata -\override Script #'padding = #3 -b2\fermata -@end lilypond - -@cindex MetronomeMark, example of overriding -@cindex padding property, example - -@lilypond[quote,fragment,relative=1,verbatim] -% This will not work, see below: -\override MetronomeMark #'padding = #3 -\tempo 4=120 -c1 -% This works: -\override Score.MetronomeMark #'padding = #3 -\tempo 4=80 -d1 -@end lilypond - -Vous remarquerez dans le second exemple à quel point il est important de -préciser le nom du contexte qui contient l'objet. Puisque l'objet -@code{MetronomeMark} appartient au contexte @code{Score}, le fait de -modifier la propriété dans le contexte @code{Voice} passera inaperçu. -Pour plus de détails, voir @ruser{Modifying properties}. - -Si on augmente la propriété @code{padding} d'un objet alors que celui-ci -fait partie d'un ensemble d'objets positionnés en fonction de leur -@code{outside-staff-priority}, cet objet sera déplacé, ainsi que tous les -autres objets du groupe. - -@subheading left-padding and right-padding - -@cindex left-padding property -@cindex right-padding property - -La propriété @code{right-padding} joue sur l'espacement entre une -altération et la note sur laquelle elle porte. On ne l'utilise pas souvent, -mais l'exemple ci-dessous montre une situation où elle est nécessaire. -Imaginons que nous voulions faire apparaître un accord qui contienne -à la fois un si bécarre et un si bémol. Pour qu'il n'y ait pas de doute, -nous chercherions à précéder la note d'un signe bécarre et d'un signe -bémol. Voici différentes tentatives pour y parvenir : - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] - - - -@end lilypond - -Pas une ne convient, et la seconde se solde même par une collision -entre les deux signes. - -Une solution pour arriver à nos fins consiste à retoucher le stencil des -altérations grâce à un markup qui contient les symboles bécarre et -bémol, dans l'ordre que nous souhaitons, comme ceci : - -@cindex Accidental, example of overriding -@cindex text property, example -@cindex stencil property, example -@cindex AccidentalPlacement, example of overriding -@cindex right-padding property, example - -@lilypond[quote,ragged-right,verbatim] -naturalplusflat = \markup { \natural \flat } -\relative c'' { - \once \override Accidental - #'stencil = #ly:text-interface::print - \once \override Accidental #'text = #naturalplusflat - \once \override Score.AccidentalPlacement #'right-padding = #1.5 - -} -@end lilypond - -@noindent -Cette méthode utilise, pour le stencil des altérations, une retouche -qui ne sera par reprise par la suite. Le type de stencil est obligatoirement -une procédure, qui consiste ici à imprimer le contenu de la propriété -@code{text} de @code{Accidental}, déclaré comme étant un signe -bécarre suivi d'un signe bémol. Celui-ci est ensuite repoussé devant la -tête de note par la retouche de @code{right-padding}. - -@noindent - -@subheading staff-padding property - -@cindex aligning objects on a baseline -@cindex objects, aligning on a baseline - -@code{staff-padding} sert à aligner des objets tels que des nuances -sur une ligne fictive à une hauteur donnée par rapport à la portée, plutôt -qu'à une hauteur qui varie en fonction de la position de la note sur laquelle -porte l'objet. Ce n'est pas une propriété de @code{DynamicText} mais de -@code{DynamicLineSpanner}. Car la ligne fictive est destinée à s'appliquer -autant à @strong{toutes} les nuances, notamment celles qui sont créées -comme des bandeaux en longueur (en anglais @q{Spanners}). Tel est donc -le moyen d'aligner les indications de nuances, comme dans cet exemple -repris de la section précédente : - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example -@cindex DynamicLineSpanner, example of overriding -@cindex staff-padding property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 unit -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -% Align dynamics to a base line 2 units above staff -\override DynamicLineSpanner #'staff-padding = #2 -a4\f b\mf c\mp b\p -@end lilypond - - -@subheading self-alignment-X property -L'exemple suivant montre comment résoudre une collision entre une indication -de corde et une queue de note, en alignant le coin droit sur le point de -référence de la note parente : - -@cindex StringNumber, example of overriding -@cindex self-alignment-X property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=3] -\voiceOne -< a \2 > -\once \override StringNumber #'self-alignment-X = #RIGHT -< a \2 > -@end lilypond - -@subheading staff-position property - -@cindex object collision within a staff -Dans une voix, un silence valant une mesure entière peut chevaucher les -notes d'une autre voix. Vu que ces silences sont centrés entre les deux -barres de mesure, il serait très compliqué de programmer LilyPond pour repérer -ces risques de collisions, dans la mesure où, normalement, toutes les collisions -entre notes ou entre notes et silences se produisent sur des notes et silences -simultanés. Voici un exemple de collision de ce type : - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< {c c c c} \\ {R1} >> -@end lilypond - -Ici, la meilleure solution consiste à déplacer le symbole de pause vers -le bas -- puisque cette pause appartient à la voix deux. Par défaut, dans la -@code{\voiceTwo} (c'est-à-dire dans la seconde voix d'une construction -@code{<<@{...@} \\ @{...@}>>}), la propriété @code{staff-position} est -réglée sur -4 pour les MultiMeasureRest ; nous avons donc besoin de la -déplacer, disons, de quatre demi-intervalles vers le bas, ce qui donne -@code{-8}. - - -@cindex MultiMeasureRest, example of overriding -@cindex staff-position property, example - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< - {c c c c} -\\ - \override MultiMeasureRest #'staff-position = #-8 - {R1} ->> -@end lilypond - -C'est mieux que d'utiliser, par exemple, @code{extra-offset}, -car la ligne supplémentaire au-dessus du silence est insérée -automatiquement. - -@subheading extra-offset property - -@cindex positioning objects -@cindex positioning grobs -@cindex objects, positioning -@cindex grobs, positioning - -La propriété @code{extra-offset} -La propriété @code{extra-offset} offre la possibilité de contrôler -entièrement le placement d'un objet, aussi bien horizontalement que -verticalement. - -Dans l'exemple suivant, la seconde indication de doigté est déplacée -légèrement vers la gauche et de 1.8 intervalle de lignes vers le bas : - -@cindex Fingering, example of overriding -@cindex extra-offset property, example - -@lilypond[quote,fragment,relative=1,verbatim] -\stemUp -f-5 -\once \override Fingering - #'extra-offset = #'(-0.3 . -1.8) -f-5 -@end lilypond - - -@subheading positions property - -@cindex controlling tuplets, slurs, phrasing slurs, and beams manually -@cindex manually controlling tuplets, slurs, phrasing slurs, and beams -@cindex tuplet beams, controlling manually -@cindex slurs, controlling manually -@cindex phrasing slurs, controlling manually -@cindex beams, controlling manually - -La propriété @code{positions} permet de contrôler manuellement la -position et l'inclinaison des nolets, coulés, liaisons de phrasé et barres -de croches. Voici un exemple avec une horrible liaison de phrasé -- -horrible pour avoir tenté de contourner la liaison de l'acciaccature. - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 \acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -Nous pourrions tout simplement déplacer la liaison de phrasé au-dessus des -notes, et ce serait la meilleure solution : - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\phrasingSlurUp -\acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -Mais si, pour une quelconque raison, cette solution n'était pas -envisageable, l'autre solution consiste à déplacer légèrement vers le -bas l'extrémité gauche de la liaison de phrasé, grâce à la propriété -@code{positions}. Cela corrige en même temps la forme plutôt -disgracieuse de la liaison. - -@cindex PhrasingSlur, example of overriding -@cindex positions property, example - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\once \override PhrasingSlur #'positions = #'(-4 . -3) -\acciaccatura -e8\( d8 c ~c d c d\) -@end lilypond - -Voici un autre exemple, tiré du début de la partie de main gauche -du Prélude de Chopin, Op. 28, No 2. Comme nous pouvons le -constater, les barres de croches chevauchent les notes les plus hautes : - -@lilypond[quote,verbatim,fragment,ragged-right] -{ -\clef "bass" -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -} -@end lilypond - -@noindent -On peut y remédier en déplaçant manuellement vers le haut les deux -extrémités des barres de croches, non plus à 2 intervalles au-dessus -de la ligne médiane mais, disons, à 3 : - -@cindex Beam, example of overriding -@cindex positions property, example - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - \clef "bass" - << - \override Beam #'positions = #'(3 . 3) - {b,8 ais, b, g,} - \\ - {e, g e, g} - >> - << {b,8 ais, b, g,} \\ {e, g e, g} >> -} -@end lilypond - -@noindent -Vous remarquerez que la retouche continue à s'appliquer au -second bloc de croches de la première voix mais qu'il ne s'applique -à aucune barre de la deuxième voix. - -@subheading force-hshift property - -@c FIXME: formatting stuff (ie not important right now IMO) -@c @a nchor Chopin finally corrected TODOgp - -Maintenant, nous sommes prêts à appliquer les dernières corrections à -l'exemple de Chopin présenté à la fin de @ref{I'm hearing Voices}, que -nous avions laissé dans cet état : - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - 2 - des2 - } - >> | - 1 | -} -@end lilypond - -@noindent -Les deux plus basses notes du premier accord (c'est-à-dire celles de la -troisième voix) ne devraient pas être décalées de la colonne des deux -plus hautes notes. Pour y remédier, nous réglons le @code{force-hshift} --- qui est une propriété de @code{NoteColumn} -- de ces notes sur zéro. -Ensuite, la note la plus basse du second accord serait mieux à droite des -notes plus hautes. Pour cela, nous réglons le @code{force-hshift} de cette -note sur 0.5 -- c'est-à-dire la moitié de la largeur d'une tête de note vers la -droite de la colonne des notes plus hautes. - -Et voici le résultat final : - -@cindex NoteColumn, example of overriding -@cindex force-hshift property, example - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - \once \override NoteColumn #'force-hshift = #0 2 - \once \override NoteColumn #'force-hshift = #0.5 des2 - } - >> | - 1 | -} -@end lilypond - - -@node Real music example -@subsection Real music example - -Pour terminer ce chapitre consacré aux retouches, voici, étape par -étape, la mise en forme d'un exemple concret nécessitant un certain -nombre de retouches jusqu'à l'obtention du résultat attendu. Cet exemple -a été choisi en raison des problèmes inhabituels de notation qu'il soulevait -et pour vous apprendre à les résoudre grâce au Manuel de notation. Il -n'est pas représentatif d'une opération normale de gravure ; que ces -difficultés ne vous découragent donc pas ! Des difficultés comme celles-ci -ne sont, heureusement, pas courantes ! - -Cet exemple est tiré de la Première Ballade de Chopin, Op. 23, mesures -6 à 9 ; cela correspond à la transition entre le Lento d'ouverture et le -Moderato. Voici, pour commencer, ce à quoi nous voulons que la -partition ressemble ; pour limiter les complications, nous n'avons pas -fait apparaître les indications de nuances, de doigté ni de pédale. - - -@c The following should appear as music without code -@c This example should not be indexed -@lilypond[quote,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - bes2.^\markup {\bold "Moderato"} r8 - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Nous constatons tout d'abord que, dans la troisième mesure, la main -droite compte quatre voix. Ce sont les cinq croches avec une barre, -le do avec liaison, le ré blanche qui se fond avec le ré croche, et le -fa dièse noire pointée qui se fond lui aussi avec la croche de même -hauteur. Tout le reste se réduit à une seule voix. Le plus simple est -donc de créer temporairement ces quatre voix au moment opportun. -Si vous avez oublié comment faire, reportez-vous à -@ref{I'm hearing Voices}. Commençons par saisir les notes comme -appartenant à deux variables, mettons en place l'ossature des -portées dans un bloc score et voyons ce que LilyPond propose par -défaut : - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4. g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8 d fis bes a | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2. -} - -lhMusic = \relative c' { - r2 2 | - 1 | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Toutes les notes sont correctes mais l'allure générale est loin d'être -satisfaisante. La liaison se heurte à l'indication de mesure lors du -changement de chiffrage, la barre des croches n'est pas bonne dans la -troisième mesure, les notes ne sont pas fusionnées et il manque plusieurs -éléments de notation. Commençons par le plus simple. Nous pouvons -corriger la barre des croches en la créant manuellement et nous pouvons -facilement ajouter les limites droite et gauche de la liaison de phrasé, -puisque tout cela a déjà été traité dans le tutoriel. Voici le résultat : - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1) | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -La première mesure est maintenant correcte. La seconde contient un arpège -et doit se terminer par une double barre. Comment faire, puisque cela n'a pas -été traité dans le Manuel d'initiation ? C'est alors qu'il faut nous -reporter au Manuel de notation. Quand on cherche @q{arpège} et @q{barre -de mesure} dans l'index, on voit aisément qu'il faut ajouter -@code{\arpeggio} à un accord pour produire un arpège et qu'une double -barre est le résultat de la commande @code{\bar "||"}. Rien de plus -facile ! Nous devons ensuite corriger la collision entre la liaison et -l'indication de mesure. Le mieux est de déplacer la liaison vers le -haut. La méthode pour déplacer les objets a déjà été présentée dans -@ref{Moving objects}, et l'on sait que, pour des objets positionnés par -rapport à la portée, il nous faut modifier leur propriété -@code{staff-position}, exprimée en demi-intervalles de lignes par -rapport à la ligne médiane de la portée. Voici donc la retouche à -insérer juste devant la première note liée ; elle est censée déplacer la -liaison vers le haut de 3,5 demi-intervalles de lignes au-dessus de la -ligne médiane : - -@code{\once \override Tie #'staff-position = #3.5} - -Cela s'adjoint à la deuxième mesure, pour donner : - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Venons-en à la troisième mesure et au début de la section Moderato. Dans -le Tutoriel, il est indiqué comment insérer du texte en gras à l'aide de la -commande @code{\markup} ; pas de problème, du coup, pour ajouter -@q{Moderato} en gras. Mais comment faire pour fusionner les notes de -différentes voix ? C'est là que le Manuel de notation peut nous venir en -aide. Une recherche sur @q{fusionnement de notes} dans l'index nous renvoie, -dans @ruser{Collision resolution}, aux commandes pour fusionner les notes, -différentes en fonction du type de note et selon que celles-ci sont -pointées ou non. Dans notre exemple, pour la durée de la polyphonie de -la troisième mesure, nous avons besoin de fusionner deux types de notes -; grâce aux informations trouvées dans le Manuel de notation, nous -ajoutons - -@example -\mergeDifferentlyHeadedOn -\mergeDifferentlyDottedOn -@end example - -@noindent -au début de cette section et - -@example -\mergeDifferentlyHeadedOff -\mergeDifferentlyDottedOff -@end example - -@noindent -à la fin, ce qui donne : - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Ces retouches ont permis de fusionner les deux fa dièse mais pas les -deux ré. Pourquoi ? La réponse se trouve dans la même section du -Manuel de notation : les notes à fusionner doivent avoir des queues dans -des directions opposées et deux notes ne peuvent pas être fusionnées s'il -y a une troisième note dans la même colonne. Ici, les deux ré ont leur -queue orientée vers le haut et il y a une troisième note, do. Nous -savons changer l'orientation de la queue avec @code{\stemDown} et -le Manuel de notation nous indique également comment déplacer le do --- en produisant un décalage grâce à l'une des commandes @code{\shift}. -Mais laquelle ? Le do appartient à la deuxième voix et n'est pas décalé ; -les deux ré appartiennent respectivement à la première et à la troisième -voix, et l'un n'est pas décalé tandis que l'autre l'est. Il nous faut donc -décaler largement le do avec la commande @code{\shiftOnn} pour -éviter une interférence avec les deux ré. Voici ce que donnent ces -modifications : - -@cindex Tie, example of overriding -@cindex staff-position property, example - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - % Move the c2 out of the main note column so the merge will work - {c,8~ \shiftOnn c2 | } - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Pas loin. Il ne reste plus que deux problèmes : les ré une fois fusionnés -ne devraient plus avoir de queue vers le bas, et le do serait mieux à la -droite des ré. Nous savons remédier à ces deux problèmes grâce aux -retouches précédentes : nous allons rendre la queue transparente et -déplacer le do avec la propriété @code{force-hshift}. Et voici le -résultat final : - -@cindex NoteColumn, example of overriding -@cindex force-hshift property, example -@cindex Stem, example of overriding -@cindex transparent property, example - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} - -@end lilypond - - -@node Further tweaking -@section Further tweaking - -@menu -* Other uses for tweaks:: -* Using variables for tweaks:: -* Other sources of information:: -* Avoiding tweaks with slower processing:: -* Advanced tweaks with Scheme:: -@end menu - -@node Other uses for tweaks -@subsection Other uses for tweaks - -@cindex transparent property, use of -@cindex objects, making invisible -@cindex removing objects -@cindex objects, removing -@cindex hiding objects -@cindex objects, hiding -@cindex invisible objects -@cindex objects, invisible -@cindex tying notes across voices - -@subheading Tying notes across voices - -Voici un exemple qui montre comment créer une liaison de -prolongation entre des notes appartenant à des voix différentes. En -temps normal, seules deux notes appartenant à une même voix -peuvent être ainsi liées. La solution consiste à utiliser deux voix, -dont l'une avec les notes liées - -@lilypond[quote,fragment,relative=2] -<< { b8~ b8\noBeam } -\\ { b[ g8] } ->> -@end lilypond - -@noindent -et à rendre transparente la première queue de note de cette voix ; -on a alors l'impression que la liaison couvre les deux voix. - -@cindex Stem, example of overriding -@cindex transparent propery, example - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -Pour être sûr que la queue que nous avons rendue transparente -n'empiète pas trop sur le trait de liaison, nous pouvons l'allonger en -réglant la longueur (@code{length}) sur @code{8}, - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -@subheading Simulating a fermata in MIDI - -@cindex stencil property, use of -@cindex fermata, implementing in MIDI - -En ce qui concerne les objets extérieurs à la portée, quand on veut les -faire disparaître de la partition imprimée , il est généralement préférable -de modifier leur propriété @code{stencil} plutôt que leur propriété -@code{transparent}. Le fait d'attribuer à la propriété @code{stencil} -d'un objet la valeur @code{#f} supprimera entièrement celui-ci de la -partition. Il ne risquera donc pas de gêner le placement d'autres objets. - -Par exemple, si nous voulons changer le réglage de métronome pour -simuler un point d'orgue dans le fichier MIDI, nous ne voulons surtout -pas que cette indication métronomique apparaisse sur la partition ni -qu'elle influence l'espacement entre les deux systèmes ou la position -des annotations voisines sur la portée. Le fait d'attribuer à la propriété -@code{stencil} la valeur @code{#f} est donc la bonne solution. Nous -montrons ci-dessous le résultat des deux méthodes : - -@cindex MetronomeMark, example of overriding -@cindex transparent property, example - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'transparent = ##t - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@cindex MetronomeMark, example of overriding -@cindex stencil property, example - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'stencil = ##f - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@noindent -Les deux méthodes permettent l'enlever l'indication métronomique qui allonge -le point d'orgue de la partition, et toutes deux modifient le rythme MIDI comme -souhaité, mais, dans la première, l'indication métronomique transparente -repousse vers le haut l'indication de tempo, contrairement à la seconde (avec -le stencil désactivé) qui la laisse à sa place. - - -@node Using variables for tweaks -@subsection Using variables for tweaks - -@cindex variables, using for tweaks -@cindex using variables for tweaks -@cindex tweaks, using variables for - -Les commandes de retouche sont souvent longues et pénibles à -taper, et ne tolèrent pas la moindre erreur. Lorsqu'on a besoin de -faire plusieurs fois les mêmes retouches, il est préférable de -définir des variables qui les contiennent. Imaginons que nous -voulions accentuer certains mots dans des paroles en les mettant -en italiques. Au lieu des commandes @code{\italic} et -@code{\bold}, qui ne fonctionnent dans les paroles que si elles -sont enchâssées dans un @code{\markup}, ce qui les rend -pénibles à saisir, pouvons-nous employer les commandes -@code{\override} et @code{\revert}? - -@example -@code{\override Lyrics . LyricText #'font-shape = #'italic} -@code{\override Lyrics . LyricText #'font-series = #'bold} - -@code{\revert Lyrics . LyricText #'font-shape} -@code{\revert Lyrics . LyricText #'font-series} -@end example - -Là encore, ce serait extrêmement pénible à saisir, surtout s'il y avait -beaucoup de mots à retoucher de cette façon. Plutôt que cette -solution, nous déclarons ces commandes comme étant deux variables -et les utilisons comme suit -- quoique on choisirait sans doute pour les -variables des noms plus courts pour simplifier la frappe : - -@cindex LyricText, example of overriding -@cindex font-shape property, example -@cindex font-series property, example - -@lilypond[quote,verbatim] -emphasize = { - \override Lyrics . LyricText #'font-shape = #'italic - \override Lyrics . LyricText #'font-series = #'bold -} -normal = { - \revert Lyrics . LyricText #'font-shape - \revert Lyrics . LyricText #'font-series -} - -global = { \time 4/4 \partial 4 \key c \major} -SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyrics { E -- | ter -- nal \emphasize Fa -- ther, \normal | strong to save, } -VerseTwo = \lyricmode { O | \emphasize Christ, \normal whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, \normal | who didst brood } -VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Soprano" { \VerseOne } - \new Lyrics \lyricsto "Soprano" { \VerseTwo } - \new Lyrics \lyricsto "Soprano" { \VerseThree } - \new Lyrics \lyricsto "Soprano" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - - -@node Other sources of information -@subsection Other sources of information - -La Référence du programme contient beaucoup d'informations sur -LilyPond. Cependant vous pouvez en découvrir -encore plus en consultant les fichiers internes de LilyPond. Pour cela, -il vous faut d'abord connaître le répertoire ad hoc sur votre système. -L'emplacement du répertoire dépend (a) du fait que, pour vous procurer -LilyPond, vous avez téléchargé un paquet précompilé sur lilypond.org, ou -vous l'avez installé grâce à votre gestionnaire de paquetages (c'est-à-dire -distribué avec Linux ou installé avec fink ou cygwin), ou encore vous l'avez -compilé directement à partir des sources ; et (b) du système d'exploitation -sous lequel il tourne. - -@strong{Téléchargé depuis lilypond.org} - -@itemize @bullet -@item Linux - -@file{@var{INSTALLDIR}/lilypond/usr/share/lilypond/current/} - -@item MacOS X - -@file{@var{INSTALLDIR}/LilyPond.app/Contents/Resources/share/lilypond/current/} -Pour accéder à ce dossier, deux possibilités : soit, dans un Terminal, -taper @code{cd} suivi du chemin complet ci-dessus ; soit -Control-cliquer (ou clic droit) sur l'application LilyPond -et sélectionner @q{Afficher le contenu du paquet}. - -@item Windows - -Dans l'Explorateur Windows, voir -@file{@var{INSTALLDIR}/LilyPond/usr/share/lilypond/current/} - -@end itemize - -@strong{Installé par un gestionnaire de paquetages ou compilé d'après -les sources} - -@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, où -@var{PREFIX} est déterminé par votre gestionnaire de paquetages ou par le script -@code{configure}, et @var{X.Y.Z} est le numéro de version de LilyPond. - -@smallspace - -Dans ce répertoire, deux sous-répertoires sont particulièrement intéressants : - -@itemize -@item @file{ly/} - contient les fichiers en format LilyPond -@item @file{scm/} - contient les fichiers en format Scheme -@end itemize - -Commençons par examiner quelques fichiers contenus dans @file{ly/}. -Nous ouvrons @file{ly/property-init.ly} dans un éditeur de texte -- celui -que vous avez l'habitude d'utiliser pour les fichiers @code{.ly} fera très -bien l'affaire. Ce fichier contient les définitions de toutes les commandes -standard prédéfinies de LilyPond, comme @code{\stemUp} et -@code{\slurDotted}. Vous pouvez constater que ce n'est rien d'autre -que des définitions de variables composées d'un ou plusieurs groupes -de commandes @code{\override}. Par exemple, @code{\tieDotted} -est défini comme : - -@example -tieDotted = @{ - \override Tie #'dash-period = #0.75 - \override Tie #'dash-fraction = #0.1 -@} -@end example - -Si vous n'aimez pas les valeurs par défaut, les commandes prédéfinies -peuvent être facilement redéfinies, comme n'importe quelle autre variable, -en tête de votre fichier d'entrée. - -Voici les fichiers les plus utiles dans le répertoire @file{ly/}: - -@multitable @columnfractions .4 .6 -@headitem Nom de fichier - @tab Contenu -@item @file{ly/engraver-init.ly} - @tab Définitions des Contextes de graveurs -@item @file{ly/paper-defaults-init.ly} - @tab Réglages papier par défaut -@item @file{ly/performer-init.ly} - @tab Définitions des Contextes d'interprétation -@item @file{ly/property-init.ly} - @tab Définitions de toutes les commandes prédéfinies courantes -@item @file{ly/spanner-init.ly} - @tab Définitions des commandes prédéfinies pour les bandeaux -@end multitable - -Les autres réglages (comme les définitions de commandes markup) sont -conservés comme fichiers @code{.scm} (Scheme). Le langage de -programmation Scheme offre une interface programmable dans le -processus interne de LilyPond. De plus amples explications sur ces -fichiers dépasseraient le cadre de ce manuel, dans la mesure où elles -requièrent la connaissance du langage Scheme. Les utilisateurs qui -souhaiteraient comprendre le fonctionnement de ces fichiers de -configuration doivent être avertis que des connaissances techniques -substantielles et beaucoup de temps sont nécessaires (voir -@ref{Scheme tutorial}). - -Si c'est votre cas, les fichiers Scheme les plus utiles à connaître sont : - -@multitable @columnfractions .4 .6 -@headitem Nom de fichier - @tab Contenu -@item @file{scm/auto-beam.scm} - @tab Régles par défaut des ligatures subalternes -@item @file{scm/define-grobs.scm} - @tab Réglages par défaut des propriétés de grobs -@item @file{scm/define-markup-commands.scm} - @tab Spécification de toutes les commandes de @emph{markup} -@item @file{scm/midi.scm} - @tab Réglages par défaut pour les sorties MIDI -@item @file{scm/output-lib.scm} - @tab Réglages affectant l'apparence des frets, couleurs, altérations, - barres de mesure, etc -@item @file{scm/parser-clef.scm} - @tab Définition des clefs prises en charge -@item @file{scm/script.scm} - @tab Réglages par défaut des articulations -@end multitable - - - -@node Avoiding tweaks with slower processing -@subsection Avoiding tweaks with slower processing - -LilyPond peut effectuer des vérifications supplémentaires lors du -traitement des fichiers ; cependant, le rendu nécessitera alors plus de -temps. En contrepartie, il y aura moins d'ajustements manuels à réaliser. -Si une indication textuelle ou des paroles débordent dans la marge, ces -vérifications auront pour effet de serrer la ligne suffisamment pour faire -tenir le texte entre les marges. - -Pour pouvoir fonctionner en toutes circonstances, ces vérifications doivent -être activées ; il faut pour cela placer les retouches dans un bloc Score -@code{\with}, plutôt qu'à l'intérieur du fragment musical, comme ceci : - -@example -\new Score \with @{ - % Pour s'assurer que les indications textuelles et paroles - % seront à l'intérieur des marges de la page. - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t -@} @{ - .. -@} -@end example - - -@node Advanced tweaks with Scheme -@subsection Advanced tweaks with Scheme - -Nous avons vu à quel point le résultat obtenu avec LilyPond peut -être largement personnalisé à l'aide de commandes comme -@code{\override} et @code{\tweak}. Et pourtant l'utilisation de -Scheme ouvre des possibilités encore plus grandes. -Le code écrit dans le langage de programmation Scheme peut être -intégré directement dans le processus interne de LilyPond. Bien sûr, -il faut pour cela connaître un minimum de programmation en langage -Scheme. Pour des explications complètes là-dessus, consultez le -@ref{Scheme tutorial}. - -En guise d'illustration - et ce n'est qu'une possibilité parmi tant -d'autres -- nous allons attribuer à une propriété non pas une valeur -préétablie mais une procédure Scheme qui sera lancée à chaque -utilisation de la propriété par LilyPond. De cette façon, nous obtenons -un réglage dynamique de la propriété par le simple fait d'invoquer la -procédure. Dans cet exemple, nous colorons les têtes de notes en fonction -de leur position sur la portée. - - -@cindex x11-color function, example of using -@cindex NoteHead, example of overriding -@cindex color property, setting to Scheme procedure - -@lilypond[quote,verbatim,ragged-right] -#(define (color-notehead grob) - "Color the notehead according to its position on the staff." - (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) - (case mod-position - ;; Return rainbow colors - ((1) (x11-color 'red )) ; for C - ((2) (x11-color 'orange )) ; for D - ((3) (x11-color 'yellow )) ; for E - ((4) (x11-color 'green )) ; for F - ((5) (x11-color 'blue )) ; for G - ((6) (x11-color 'purple )) ; for A - ((0) (x11-color 'violet )) ; for B - ) - ) -) - -\relative c' { - % Arrange to obtain color from color-notehead procedure - \override NoteHead #'color = #color-notehead - c2 c' | - b4 g8 a b4 c | - c,2 a' | - g1 | -} -\addlyrics { - Some -- where o -- ver the Rain -- bow, way up high, -} -@end lilypond - -Vous trouverez dans @ref{Tweaking with Scheme} d'autres exemples d'utilisation de ces interfaces programmables. - diff --git a/Documentation/fr/user/unfretted-strings.itely b/Documentation/fr/user/unfretted-strings.itely deleted file mode 100644 index a9d2db802f..0000000000 --- a/Documentation/fr/user/unfretted-strings.itely +++ /dev/null @@ -1,199 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: c59b8168319749a56e5cf78bb9be868df20a723c - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave, Matthieu Jacquot -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - -@node Unfretted string instruments -@section Unfretted string instruments - -@lilypondfile[quote] -{unfretted-headword.ly} - -@cindex cordes d'orchestre -@cindex orchestre, cordes -@cindex cordes, écriture pour - -Cette section dispense des informations supplémentaires et utiles à -l'écriture pour les cordes non frettées, et tout spécialement pour les -cordes d'orchestre. - -@menu -* Common notation for unfretted strings:: -@end menu - -@node Common notation for unfretted strings -@subsection Common notation for unfretted strings - -Il existe peu d'éléments spécifiques à l'écriture pour instruments à -cordes non frettées. La musique est notée sur une portée et ne -nécessite généralement qu'une seule voix. Le recours à deux voix -disticntes peut cependant permettre de traiter efficacement des doubles -notes ou des divisions. - -@menu -* References for unfretted strings:: -* Bowing indications:: -* Harmonics:: -* Snap (Bartók) pizzicato:: -@end menu - -@node References for unfretted strings -@unnumberedsubsubsec References for unfretted strings - -La majorité des éléments de notation nécessaires en matière de -cordes d'orchestre et autres instruments à archet est abordée dans -d'autres chapitres de la documentation : - -@itemize - -@item Les indications textuelles telles que @qq{pizz.} ou @qq{arco} sont -ajoutées comme du texte simple -- voir à ce sujet @ref{Text scripts}. - -@item Les indications de doigtés, incluant les indications du pouce, -sont décrites dans @ref{Fingering instructions}. - -@item Les doubles notes sont généralement indiquées en écrivant un -accord, voir @ref{Chorded notes}. Les précisions pour jouer des accords -peuvent être ajoutées, comme l'indique @ref{Arpeggio}. - -@item Un modèle pour quatuor à cordes est disponible au chapitre -@rlearning{String quartet}. D'autres informations se trouvent dans les -exemples de code. - -@end itemize - - -@seealso -Manuel d'initiation : -@rlearning{String quartet}. - -Manuel de notation : -@ref{Text scripts}, -@ref{Fingering instructions}, -@ref{Chorded notes}, -@ref{Arpeggio}. - -Exemples de code : -@rlsr{Unfretted strings}. - -@node Bowing indications -@unnumberedsubsubsec Bowing indications - -@funindex \upbow -@funindex \downbow -@funindex \open - -@cindex indications d'archet -@cindex poussé, indication d'archet -@cindex tiré, indication d'archet -@cindex indication de corde à vide -@cindex corde à vide, indication - -Les indications d'archet se créent comme des articulations, elles sont -décrites dans @ref{Articulations and ornamentations}. - -Les indications d'archet, poussé (@code{\upbow}) et tiré -(@code{\downbow}), peuvent se combiner à des liaisons comme ici : - -@lilypond[verbatim,quote,relative=2] -c4(\downbow d) e(\upbow f) -@end lilypond - -@noindent -ou dans l'exemple suivant qui montre trois manières d'indiquer la corde -de La, à vide, sur un violon : - -@lilypond[verbatim,quote,relative=2] -a4 \open -a^\markup { \teeny "II" } -a2^\markup { \small "sul A" } -@end lilypond - -@predefined -@code{\downbow}, -@code{\upbow}, -@code{\open}. -@endpredefined - - -@seealso -Manuel de notation : -@ref{Articulations and ornamentations}, -@ref{Slurs}. - -@node Harmonics -@unnumberedsubsubsec Harmonics - -@funindex \harmonic - -@strong{@i{Harmoniques naturels}} - -@cindex harmoniques naturels -@cindex naturels, harmoniques - -Les harmoniques naturels sont indiqués de différentes manières : une -tête de note en forme de losange signifie généralement que vous devez -effleurer la corde à l'endroit où vous l'auriez pincée si la note avait -été normale. - -@warning{Les harmoniques @strong{doivent} être indiqués dans une -construction de type accord même s'il n'y a qu'une seule note.} - -@c TODO If the default for harmonicDots is changed, change this - -La propriété @code{harmonicDots}, lorsqu'elle est activée, permet -d'ajouter un point point aux notes pointées affublées d'un -@code{\harmonic}. - -@lilypond[verbatim,quote,relative=2] -4 2. -\set harmonicDots = ##t -4 2. -@end lilypond - -Une autre façon de procéder consiste à faire surmonter la note normale -d'un petit cercle. Ceci indique que la note écrite doît être jouée en -harmonique : - -@lilypond[verbatim,quote,relative=2] -d2^\flageolet d_\flageolet -@end lilypond - -Un plus petit cercle peut être créé, comme indiqué dans les exemples de -code contenus dans @ref{References for unfretted strings}. - -@strong{@i{Harmoniques artificiels}} - -@cindex harmoniques artificiels -@cindex artificiels, harmoniques - -Les harmoniques artificiels sont indiqués par une double tête de note : -l'une, normale, indique la note à pincer, et l'autre, en forme de -losange, indique l'endroit où la corde doit être effleurée. - -@lilypond[verbatim,quote,relative=1] -2 -@end lilypond - -@node Snap (Bartók) pizzicato -@unnumberedsubsubsec Snap (Bartók) pizzicato - -@cindex pizzicato, Bartók -@cindex pizzicato, snap -@cindex Bartók pizzicato -@cindex snap pizzicato - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{snap-pizzicato-markup-bartok-pizzicato.ly} - diff --git a/Documentation/fr/user/vocal.itely b/Documentation/fr/user/vocal.itely deleted file mode 100644 index 1e843d60d3..0000000000 --- a/Documentation/fr/user/vocal.itely +++ /dev/null @@ -1,1144 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: bdf8540b74167817eab96ed3d13b35477217f9fe - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude - -@node Vocal music -@section Vocal music - -Dans la mesure où les fichiers LilyPond sont constitués de texte, -traiter de la musique vocale demande de prendre en compte deux spécificités : - -@itemize @bullet -@item -Les paroles sont saisies comme étant du texte, non des notes. -Ainsi, le code@tie{}@code{d} sera interprété comme une syllabe, et non -comme la note@tie{}ré (D pour les non latinistes). - -@item -Les paroles doivent s'aligner avec les notes de la mélodie correspondante. -@end itemize - -Plusieurs solutions existent pour ajouter des paroles ; nous les -examinerons par degré croissant de complexité. - -@menu -* Common notation for vocal music:: -* Entering lyrics:: -* Aligning lyrics to a melody:: -* Specific uses of lyrics:: -* Stanzas:: -@end menu - -@commonprop - -S'assurer que tous les éléments textuels et les paroles respectent -les marges du document requiert des calculs relativement lourds ; c'est -la raison pour laquelle LilyPond, par défaut, ne s'en préoccupe pas. -Vous pouvez cependant l'y forcer en ajoutant le code - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - -Pour que les paroles évitent également les barres de mesure, ajoutez -@example -\layout @{ - \context @{ - \Lyrics - \consists "Bar_engraver" - \consists "Separating_line_group_engraver" - \override BarLine #'transparent = ##t - @} -@} -@end example - - -@node Common notation for vocal music -@subsection Common notation for vocal music - -@untranslated - -@menu -* References for vocal music and lyrics:: -* Opera:: -* Song books:: -* Chants:: -* Spoken music:: -* Ancient vocal music:: -@end menu - -@node References for vocal music and lyrics -@unnumberedsubsubsec References for vocal music and lyrics - -@untranslated - -@node Opera -@unnumberedsubsubsec Opera - -@untranslated - -@node Song books -@unnumberedsubsubsec Song books - -@untranslated - -@node Spoken music -@unnumberedsubsubsec Spoken music - -Le @emph{parlato} est du texte scandé en rythme, mais sans hauteurs -définies ; il est indiqué par des notes en croix, à l'instar des -percussions --- voir @ref{Special note heads}. - -@node Chants -@unnumberedsubsubsec Chants - -@untranslated - -@node Ancient vocal music -@unnumberedsubsubsec Ancient vocal music - -@untranslated - - -@node Entering lyrics -@subsection Entering lyrics - -@menu -* Lyrics explained:: -* Setting simple songs:: -* Working with lyrics and variables:: -@end menu - - -@node Lyrics explained -@unnumberedsubsubsec Lyrics explained - -@cindex paroles -@funindex \lyricmode -@cindex ponctuation -@cindex espaces, dans les paroles -@cindex guillemets, dans les paroles - -Il existe un mode de saisie spécialement adapté aux paroles. On -l'introduit avec le mot-clé @code{\lyricmode}, ou en utilisant -@code{\addlyrics} ou @code{\lyricsto}. Ce mode vous permet de saisir -des paroles, ainsi que leur ponctuation, et le caractère @code{d} ne -sera plus interprété comme une note, mais comme une syllabe. Les -syllabes sont saisies comme des notes, mais les hauteurs sont alors -remplacées par du texte. Exemple avec une comptine anglaise : - -@example -\lyricmode @{ Twin-4 kle4 twin- kle litt- le star2 @} -@end example - -Ici on a choisi de saisir explicitement la durée de chaque syllabe. Cependant, -il est aussi possible d'attribuer automatiquement chaque syllabe à une -note d'une mélodie ou d'une voix existante, avec @code{\addlyrics} ou -@code{\lyricsto}. -@c TODO: broken but exists Aligning lyrics -@c For more details see @ref{Aligning contexts}. - -Dans les paroles, un mot ou une syllabe commence par une lettre de -l'alphabet, et se termine par un espace (éventuellement précédé d'un -chiffre). Toute syllabe doit donc être séparée d'une autre par un -espace, tout autre caractère étant considéré comme partie intégrante -de cette même syllabe. L'exemple suivant comporte une faute de frappe -évidente : - -@example -\lyricmode @{ lah- lah@} -@end example - -la dernière syllabe contient une @code{@}}, il y a de fait un défaut de -parité avec l'accolade ouvrante, et la compilation échouera fort -probablement. - - -@funindex \property dans \lyricmode - -@noindent -De la même manière, un point concluant une suite de lettres sera -partie intégrante de la chaîne résultante. Par conséquent, il est -impératif d'insérer des espaces lorsque vous modifiez les propriétés -d'une commande. En d'autres termes, ne saisissez pas - -@example -\override Score.LyricText #'font-shape = #'italic -@end example - -@noindent -mais plutôt - -@example -\override Score . LyricText #'font-shape = #'italic -@end example - -@funindex _ -@cindex espaces, dans les paroles -@cindex guillemets, dans les paroles -@cindex liaisons, dans les paroles - -Pour attribuer plus d'une syllabe à une même note, vous pouvez mettre -ces syllabes entre guillemets, ou bien remplacer l'espace par un -caractère souligné (@code{_}), ou encore utiliser un tilde (@code{~}) -pour obtenir une liaison entre les syllabes. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - -Cette liaison adaptée aux paroles correspond au caractère Unicode -U+203F, et n'apparaîtra dans la partition que s'il existe une police -incluant ce symbole (par exemple DejaVuLGC) installée sur le système. - - -Pour utiliser des lettres accentuées ou des caractères spéciaux ---- cœurs ou guillemets inversés par exemple --- il suffit de les insérer -dans le fichier et de veiller à sauvegarder ce dernier avec le codage -UTF-8. Voir à ce sujet @ref{Text encoding} pour plus de détails. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { e4 f e d e f e2 } -\addlyrics { He said: “Let my peo ple go”. } -@end lilypond - -Pour utiliser des guillemets informatiques standard, faites-les -précéder d'une barre oblique inverse : - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } -\addlyrics { "\"I" am so lone- "ly\"" said she } -@end lilypond - -Expliquer exactement comment LilyPond repère le début d'un mot en mode -paroles (Lyrics) est quelque peu compliqué. - -En mode Lyrics, un mot peut commencer par : tout caractère alphabétique, -@code{_}, @code{?}, @code{!}, @code{:}, @code{'}, un des codes de -contrôle @code{^A} à @code{^F} et @code{^Q} à @code{^W}, @code{^Y}, -@code{^^}, tout caractère ASCII de code strictement supérieur à 127, ou -enfin un des symboles @code{`}, @code{'}, @code{"}, ou @code{^}, s'il -est précédé d'une barre oblique inverse. - -Pour définir un identificateur contenant des paroles, il faut utiliser -la fonction @code{lyricmode}. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - - -@seealso -Référence du programme : @rinternals{LyricText}, @rinternals{LyricSpace}. - - -@node Setting simple songs -@unnumberedsubsubsec Setting simple songs - -@cindex \addlyrics - -Le plus simple pour ajouter des paroles à une mélodie est d'adjoindre - -@example -\addlyrics @{ @var{les paroles} @} -@end example - -@noindent -à la mélodie. En voici un exemple : - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative { c2 e4 g2. } -\addlyrics { play the game } -@end lilypond - -On peut ajouter davantage de couplets en multipliant le nombre de -sections @code{\addlyrics}. - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative { c2 e4 g2. } -\addlyrics { play the game } -\addlyrics { speel het spel } -\addlyrics { joue le jeu } -@end lilypond - -Cependant, la commande @code{\addlyrics} ne peut gérer les -constructions polyphoniques. Dans ce cas, mieux vaut employer -@code{\lyricsto} et @code{\lyricmode}, comme nous le verrons dans -@ref{Lyrics explained}. - - -@node Working with lyrics and variables -@unnumberedsubsubsec Working with lyrics and variables - -@cindex paroles, variables - -La fonction @code{\lyricmode} permet de définir une variable pour -les paroles. Point n'est besoin de spécifier les durées si vous -utilisez @code{\addlyrics} ou @code{\lyricsto} lorsque vous y faites -référence. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - -Pour une organisation différente ou plus complexe, mieux vaut -commencer par définir la hiérarchie des portées et des paroles, -@example -\new ChoirStaff << - \new Voice = "soprano" @{ @emph{musique} @} - \new Lyrics = "sopranoParoles" @{ s1 @} - \new Lyrics = "tenorParoles" @{ s1 @} - \new Voice = "tenor" @{ @emph{musique} @} ->> -@end example - -puis combiner correctement les mélodies et les paroles : - -@example -\context Lyrics = sopranoParoles \lyricsto "soprano" -@emph{les paroles} -@end example - -@noindent - -Le résultat donnera ainsi quelque chose comme - -@example -<<\new ChoirStaff << @emph{définition de la musique} >> - \lyricsto "soprano" @emph{etc} - \lyricsto "alto" @emph{etc} -@emph{etc} ->> -@end example - - -@seealso -@c TODO: document \new Staff << Voice \lyricsto >> bug -@c -Référence du programme : @rinternals{LyricCombineMusic}, -@rinternals{Lyrics}. - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@funindex \lyricmode -@funindex \addlyrics -@funindex \lyricsto - - -Avant d'être imprimées, les paroles sont interprétées par le programme -dans le contexte @rinternals{Lyrics}. - -@example -\new Lyrics \lyricmode @dots{} -@end example - -Il y a deux grandes méthodes pour gérer le placement horizontal des -syllabes : - -@itemize @bullet -@item -en alignant automatiquement les paroles sur une mélodie ou une autre -voix, en ayant recours à @code{\addlyrics} ou @code{\lyricsto} ; - -@item -en affectant explicitement à chaque syllabe une durée, au sein du -contexte @code{\lyricmode} -@end itemize - -@menu -* Automatic syllable durations:: -* Manual syllable durations:: -* Multiple syllables to one note:: -* Multiple notes to one syllable:: -* Skipping notes:: -* Extenders and hyphens:: -* Lyrics and repeats:: -@end menu - -@node Automatic syllable durations -@unnumberedsubsubsec Automatic syllable durations - -@cindex durée automatique des syllabes -@cindex paroles et mélodies - -Les paroles peuvent être automatiquement alignées sous -une mélodie. Il suffit pour cela de combiner la mélodie et les -paroles avec la commande @code{\lyricsto}. - -@example -\new Lyrics \lyricsto @var{nom} @dots{} -@end example - -Cette commande adapte les paroles aux notes de la voix (contexte -@rinternals{Voice} dans le jargon LilyPond) @var{nom}. Ce contexte -@code{Voice} doit exister avant l'indication des paroles avec -@code{\lyricsto}. La commande @code{\lyricsto} introduit -automatiquement le mode @code{\lyricmode}, donc dans ce cas vous n'avez -pas à ajouter vous-même @code{\lyricmode}. - -L'exemple suivant récapitule les différentes manières de saisir des paroles. - -@lilypond[quote,fragment,ragged-right,verbatim] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - \new Lyrics \lyricmode { Joy4 to8. the16 world!4. the8 Lord4 is come.2 } - \new Lyrics \lyricmode { Joy to the earth! the Sa -- viour reigns. } - \new Lyrics \lyricsto "one" { No more let sins and sor -- rows grow. } ->> -@end lilypond - -Le deuxième couplet n'est pas correctement disposé, aucune durée -n'ayant été spécifiée. Dans un tel cas, il aurait mieux valu utiliser -@code{\lyricsto}, comme dans le troisième couplet. - -La commande @code{\addlyrics} n'est en fait qu'une simplification de -la structure employée par LilyPond pour définir les paroles. - -@example -@{ MUSIQUE @} -\addlyrics @{ PAROLES @} -@end example - -@noindent -est exactement la même chose que - -@example -\new Voice = "blah" @{ musique @} -\new Lyrics \lyricsto "blah" @{ PAROLES @} -@end example - -@node Manual syllable durations -@unnumberedsubsubsec Manual syllable durations - -On peut aussi se passer de @code{\addlyrics} et de @code{\lyricsto} pour -saisir des paroles. Dans ce cas, les syllabes sont entrées comme des -notes --- du texte remplaçant les hauteurs --- ce qui veut dire que vous -devez définir leur durée explicitement : - -@example -play2 the4 game2. -sink2 or4 swim2. -@end example - -La mélodie associée à ces paroles peut être spécifiée par la propriété -@code{associatedVoice} : - -@example -\set associatedVoice = #"lala" -@end example - -@noindent -La valeur que vous attribuez à cette propriété (ici @code{"lala"}) -doit désigner un contexte @rinternals{Voice}, sans quoi les mélismes -ne seront pas imprimés correctement. - -Voici un exemple de cette manière de procéder : - -@lilypond[relative=1,ragged-right,verbatim,fragment,quote] -<< \new Voice = "melody" { - \time 3/4 - c2 e4 g2. - } - \new Lyrics \lyricmode { - \set associatedVoice = #"melody" - play2 the4 game2. - } >> -@end lilypond - - -@seealso -Référence du programme : @rinternals{Lyrics}. - - -@node Multiple syllables to one note -@unnumberedsubsubsec Multiple syllables to one note - -@funindex _ -@cindex liaisons, dans les paroles - -Pour attribuer plus d'une syllabe à une même note, vous pouvez les -mettre entre guillemets, remplacer une espace par un caractère souligné -(@code{_}) pour obtenir une espace, ou bien encore utiliser un tilde -(@code{~}) pour obtenir une liaison entre les syllabes@footnote{Une -liaison adaptée aux paroles correspond au caractère Unicode U+203F, et -n'apparaîtra dans la partition que si le système dispose d'une police -installée qui contient ce symbole(par exemple DejaVuLGC).}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - - -@seealso -Référence du programme : @rinternals{LyricCombineMusic}. - - -@c Here come the section which used to be "Melismata" -@c the new title might be more self-explanatory - - -@node Multiple notes to one syllable -@unnumberedsubsubsec Multiple notes to one syllable - -@cindex mélisme -@cindex vocalise -@cindex phrasé, pour des paroles - - -Parfois, tout particulièrement dans la musique médiévale, plusieurs -notes correspondent à une même syllabe. Ces vocalises sont appelées mélismes. - -@c this method seems to be the simplest; therefore -@c it might be better to present it first - vv - -Il est possible d'indiquer tous les mélismes lors de la saisie des -paroles. Il suffit pour cela d'utiliser le caractère @code{_} pour -chaque note du mélisme. - -@lilypond[relative=1,verbatim,fragment,quote] -{ \set melismaBusyProperties = #'() - c d( e) f f( e) e e } -\addlyrics - { Ky -- _ _ ri __ _ _ _ e } -@end lilypond - -En définissant, comme dans l'exemple ci-dessus, la propriété -@code{melismaBusyProperties}, vous obtiendrez automatiquement toutes -les liaisons de tenue et de phrasé requises. - -D'autre part, la commande @code{\lyricsto} arrive aussi à détecter -automatiquement les mélismes : une seule syllabe sera placée sous un -groupe de notes comprenant des liaisons de tenue ou de phrasé. Au cas -où un mélisme doit s'appliquer à des notes non liées, il suffit -d'adjoindre @code{\melisma} à la première note du groupe, et -@code{\melismaEnd} à la dernière : - -@lilypond[quote,relative=2,ragged-right,fragment,verbatim] -<< - \new Voice = "lala" { - \time 3/4 - f4 g8 - \melisma - f e f - \melismaEnd - e2 - } - \new Lyrics \lyricsto "lala" { - la di __ daah - } ->> -@end lilypond - -Enfin, lorsque la fonction de ligature automatique (cf. -@ref{Setting automatic beam behavior}) est désactivée, le fait de les -connecter manuellement créera un mélisme. - -@c TODO: there might be some more relevant place for -@c the following link (?) - -@cindex SATB -@cindex choral score - -Vous trouverez un exemple complet de partition pour chœur dans la -section @rlearning{Vocal ensembles}. - - -@predefined -@funindex \melisma -@code{\melisma}, -@funindex \melismaEnd -@code{\melismaEnd}. -@endpredefined - - -@seealso -@comment Référence du programme : @rinternals{Melisma_translator}. - -Exemples : @rlsr{Vocal music}. - - -@knownissues - -Certains mélismes ne sont pas détectés automatiquement ; vous devrez -alors prolonger vous-même les syllabes concernées. - -@node Skipping notes -@unnumberedsubsubsec Skipping notes - -@untranslated -@ifnothtml -@englishref -@end ifnothtml - -@node Extenders and hyphens -@unnumberedsubsubsec Extenders and hyphens - -@cindex mélisme -@cindex extenseur -@cindex prolongateur - -Un mélisme est indiqué par une ligne horizontale basse centrée -entre une syllabe et la suivante. Une telle ligne, que nous -appellerons prolongateur ou extenseur, s'obtient en saisissant -@samp{ __ } (notez les espaces entourant le souligné double). - -@cindex trait d'union - -Un trait d'union séparant deux syllabes d'un même mot s'obtient en -saisissant @samp{ -- } (notez les espaces entourant le tiret double). -Ce trait d'union sera centré entre les deux syllabes et sa longueur -sera proportionnelle à l'espace les séparant. - -Dans les partitions très serrées, les traits d'union peuvent ne pas être -imprimés. Cet inconvénient peut être contrôlé par -@code{minimum-distance} pour gérer l'espace minimum entre deux syllabes, -et @code{minimum-length}, seuil en deçà duquel il n'y a pas de trait -d'union. - - -@seealso -Référence du programme : @rinternals{LyricExtender}, -@rinternals{LyricHyphen} - - -@node Lyrics and repeats -@unnumberedsubsubsec Lyrics and repeats - -@untranslated -@ifnothtml -@englishref -@end ifnothtml - -@node Specific uses of lyrics -@subsection Specific uses of lyrics - -Une même mélodie peut se voir traitée différemment suivant les couplets. -La commande @code{\lyricsto} permet de prendre en compte ces variantes. - -@menu -* Divisi lyrics:: -* Lyrics independent of notes:: -* Spacing out syllables:: -* Centering lyrics between staves:: -@end menu - -@node Divisi lyrics -@unnumberedsubsubsec Divisi lyrics - -En donnant un nom à chaque voix et en leur attribuant spécifiquement -des paroles, on peut créer des paroles alternatives --- également -qualifiées de @q{divisi}. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" { - \relative c' { - c4 - << - { \voiceOne c8 e } - \new Voice = "splitpart" { \voiceTwo c4 } - >> - \oneVoice c4 c | c - } - } - \new Lyrics \lyricsto "melody" { we shall not o- ver- come } - \new Lyrics \lyricsto "splitpart" { will } ->> } -@end lilypond - - -Cette astuce permet de faire varier les paroles lorsqu'une section est reprise. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" \relative c' { - c2 e | g e | c1 | - \new Voice = "verse" \repeat volta 2 {c4 d e f | g1 | } - a2 b | c1} - \new Lyrics = "mainlyrics" \lyricsto melody \lyricmode { - do mi sol mi do - la si do } - \context Lyrics = "mainlyrics" \lyricsto verse \lyricmode { - do re mi fa sol } - \new Lyrics = "repeatlyrics" \lyricsto verse \lyricmode { - dodo rere mimi fafa solsol } ->> -} -@end lilypond - -@node Lyrics independent of notes -@unnumberedsubsubsec Lyrics independent of notes - -Dans certaines musiques vocales assez complexes, on peut avoir intérêt à -imprimer les paroles indépendamment des notes. La mélodie sur laquelle -s'aligne les paroles --- marquée par le tag @code{lyricrhythm} dans -l'exemple suivant --- peut être insérée dans un contexte @code{Devnull}, -ce qui indique à LilyPond de na pas imprimer cette mélodie dans la -partition. Seules subsistent alors de cette mélodie les valeurs -rythmiques, sur lesquelles s'alignent les paroles. - -@lilypond[quote,verbatim,ragged-right] -voice = { - c''2 - \tag #'music { c''2 } - \tag #'lyricrhythm { c''4. c''8 } - d''1 -} - -lyr = \lyricmode { I like my cat! } - -<< - \new Staff \keepWithTag #'music \voice - \new Devnull="nowhere" \keepWithTag #'lyricrhythm \voice - \new Lyrics \lyricsto "nowhere" \lyr - \new Staff { c'8 c' c' c' c' c' c' c' - c' c' c' c' c' c' c' c' } ->> -@end lilypond - -@ifnothtml -@englishref -@end ifnothtml - -@node Spacing out syllables -@unnumberedsubsubsec Spacing out syllables - -@cindex espacer des paroles -@cindex paroles, accroître l'espacement - -La propriété @code{#'minimum-distance} de l'objet LyricSpace permet -d'accroître l'espacement des paroles. - -@lilypond[relative,verbatim,fragment,quote,ragged-right] -{ - c c c c - \override Lyrics.LyricSpace #'minimum-distance = #1.0 - c c c c -} -\addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext -} -@end lilypond - -Pour que ce réglage s'applique à toute la partition, définissez-le -dans le bloc @code{\layout}. - -@lilypond[verbatim,quote,ragged-right] -\score { - \relative c' { - c c c c - c c c c - } - \addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext - } - \layout { - \context { - \Lyrics - \override LyricSpace #'minimum-distance = #1.0 - } - } -} -@end lilypond - -@node Centering lyrics between staves -@unnumberedsubsubsec Centering lyrics between staves - -@untranslated -@ifnothtml -@englishref -@end ifnothtml - - -@node Stanzas -@subsection Stanzas - -@menu -* Adding stanza numbers:: -* Adding dynamics marks to stanzas:: -* Adding singers' names to stanzas:: -* Stanzas with different rhythms:: -* Printing stanzas at the end:: -* Printing stanzas at the end in multiple columns :: -@end menu - - -@node Adding stanza numbers -@unnumberedsubsubsec Adding stanza numbers - -@cindex numéro de couplet - -On peut ajouter un numéro aux couplets en définissant la variable -@code{stanza} : - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set stanza = #"1. " - Hi, my name is Bert. -} \addlyrics { - \set stanza = #"2. " - Oh, ché -- ri, je t'aime -} -@end lilypond - -@noindent -Ces numéros se placeront juste avant le début de la première syllabe. - -@node Adding dynamics marks to stanzas -@unnumberedsubsubsec Adding dynamics marks to stanzas - -Lorsque des couplets ont des nuances différentes, vous pouvez ajouter -une nuance devant chaque numéro. L'objet @code{StanzaNumber} contient -tout ce qui se place au début du couplet. Pour des raisons techniques, -vous devrez définir la variable @code{stanza} en dehors du mode -@code{\lyricmode}. - -@lilypond[quote,ragged-right,verbatim] -text = { - \set stanza = \markup { \dynamic "ff" "1. " } - \lyricmode { - Big bang - } -} - -<< - \new Voice = "tune" { - \time 3/4 - g'4 c'2 - } -\new Lyrics \lyricsto "tune" \text ->> -@end lilypond - -@node Adding singers' names to stanzas -@unnumberedsubsubsec Adding singers' names to stanzas - -@cindex nom de personnage -@cindex nom du chanteur - -On peut également ajouter le nom de chaque rôle ; ils s'imprimeront au -début de chaque ligne comme les noms d'instruments. Il faut pour cela -définir @code{vocalName}, et @code{shortVocalName} pour une version -abrégée. - -@lilypond[fragment,ragged-right,quote,verbatim,relative=2] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set vocalName = #"Bert " - Hi, my name is Bert. -} \addlyrics { - \set vocalName = #"Ernie " - Oh, ché -- ri, je t'aime -} -@end lilypond - -@node Stanzas with different rhythms -@unnumberedsubsubsec Stanzas with different rhythms - -@subsubheading Mélismes dans certaines strophes seulement - -Il peut survenir que les paroles comportent un mélisme pour l'un des -couplets, mais plusieurs syllabes pour d'autres. Une solution consiste à -temporairement ignorer les mélismes dans le couplet ayant plus de -syllabes. Il suffit pour cela de définir la propriété -@code{ignoreMelismata} à l'intérieur du contexte Lyrics. - -Petit détail qui a son importance : la définition de -@code{ignoreMelismata} doit intervenir une syllabe @emph{avant} les -syllabes auxquelles elle s'appliquera : - -@c FIXME: breaks compile -@lilypond[verbatim,ragged-right,quote] -%{ -<< - \relative \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - \slurDotted - f8.[( g16]) - a4 - } - \new Lyrics \lyricsto "lahlah" { - more slow -- ly - } - \new Lyrics \lyricsto "lahlah" { - \set ignoreMelismata = ##t % applies to "fas" - go fas -- ter - \unset ignoreMelismata - still - } ->> -%} -@end lilypond - -Ici la fonction @code{ignoreMelismata} concerne la syllabe @q{fas}, -bien qu'elle ait été définie avant la syllabe @q{go}. - -L'inverse est aussi possible : prendre une mélodie syllabique pour en -faire un mélisme. Il faudra alors insérer des sauts invisibles -@code{\skip} dans vos paroles. Chaque @code{\skip} décale le texte -suivant d'une note : - -@lilypond[verbatim,ragged-right,quote] -\relative c' { c c g' } -\addlyrics { - twin -- \skip 4 - kle -} -@end lilypond - -@subsubheading Basculer vers une mélodie alternative - -On peut créer des variations plus complexes à partir d'une mélodie à -plusieurs voix. Les paroles peuvent suivre l'une ou l'autre des -lignes mélodiques, et même basculer de l'une à l'autre si l'on -modifie la propriété @code{associatedVoice}. Dans cet exemple, - -@lilypond[ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - << - \new Voice = "alternative" { - \voiceOne - \times 2/3 { - % show associations clearly. - \override NoteColumn #'force-hshift = #-3 - f8 f g - } - } - { - \voiceTwo - f8.[ g16] - \oneVoice - } >> - a8( b) c - } - \new Lyrics \lyricsto "lahlah" { - Ju -- ras -- sic Park - } - \new Lyrics \lyricsto "lahlah" { - % Tricky: need to set associatedVoice - % one syllable too soon! - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex - } >> -@end lilypond - -@noindent -le texte du premier couplet s'aligne sur la mélodie nommée -@q{lahlah}, - -@example -\new Lyrics \lyricsto "lahlah" @{ - Ju -- ras -- sic Park -@} -@end example - - -Le second couplet est tout d'abord rattaché au contexte @code{lahlah}, -mais bascule sur une autre mélodie sur la syllabe @q{ran}. Pour cela, -nous utilisons -@example -\set associatedVoice = alternative -@end example - -@noindent -où @code{alternative} désigne le nom du contexte @code{Voice} qui contient -le triolet. - -Encore une fois, cette commande doit être spécifiée une syllabe en -avance, c'est-à-dire ici avant la syllabe @q{Ty}. - -@example -\new Lyrics \lyricsto "lahlah" @{ - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex -@} -@end example - -@noindent -Comme vous pouvez le voir, nous revenons ensuite à l'alignement sur la -mélodie d'origine, en assignant à la propriété @code{associatedVoice} -la valeur @code{lahlah}. - - -@node Printing stanzas at the end -@unnumberedsubsubsec Printing stanzas at the end - -Il peut parfois s'avérer opportun d'aligner un seul couplet sur la -mélodie, et de présenter tous les autres en bloc à la fin du morceau. -Ces couplets additionnels peuvent être inclus dans une section -@code{\markup} en dehors du bloc @code{\score} principal. -Vous en trouverez un exemple ci-dessous ; notez également les deux -méthodes différentes employées pour indiquer les sauts de ligne, -entre les couplets (@q{verses} en anglais) 2 et 3. - -@c keeply? -@lilypond[ragged-right,verbatim,quote] -melody = \relative c' { -e d c d | e e e e | -d d e d | c1 | -} - -text = \lyricmode { -\set stanza = #"1." Ma- ry had a lit- tle lamb, -its fleece was white as snow. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text ->> - \layout { } -} -\markup { \column{ - \line{ Verse 2. } - \line{ All the children laughed and played } - \line{ To see a lamb at school. } - } -} -\markup{ - \wordwrap-string #" - Verse 3. - - Mary took it home again, - - It was against the rule." -} -@end lilypond - -@node Printing stanzas at the end in multiple columns -@unnumberedsubsubsec Printing stanzas at the end in multiple columns - -Si les couplets sont vraiment nombreux, il est possible de les imprimer -sur plusieurs colonnes. De plus, l'exemple suivant vous montrera -comment faire en sorte que le numéro du couplet soit en retrait à -gauche, comme c'est traditionnellement le cas. - -@c keeply? -@lilypond[ragged-right,quote,verbatim] -melody = \relative c' { - c c c c | d d d d -} - -text = \lyricmode { - \set stanza = #"1." This is verse one. - It has two lines. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text - >> - \layout { } -} - -\markup { - \fill-line { - \hspace #0.1 % moves the column off the left margin; can be removed if - % space on the page is tight - \column { - \line { \bold "2." - \column { - "This is verse two." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "3." - \column { - "This is verse three." - "It has two lines." - } - } - } - \hspace #0.1 % adds horizontal spacing between columns; if they are - % still too close, add more " " pairs until the result - % looks good - \column { - \line { \bold "4." - \column { - "This is verse four." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "5." - \column { - "This is verse five." - "It has two lines." - } - } - } - \hspace #0.1 % gives some extra space on the right margin; can - % be removed if page space is tight - } -} -@end lilypond - - -@seealso -Référence du programme : @rinternals{LyricText}, -@rinternals{StanzaNumber}. - diff --git a/Documentation/fr/user/wind.itely b/Documentation/fr/user/wind.itely deleted file mode 100644 index 4dfd5708b0..0000000000 --- a/Documentation/fr/user/wind.itely +++ /dev/null @@ -1,140 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: bdf8540b74167817eab96ed3d13b35477217f9fe - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude, John Mandereau - -@node Wind instruments -@section Wind instruments - -@untranslated - -@menu -* Common notation for wind instruments:: -* Bagpipes:: -@end menu - -@node Common notation for wind instruments -@subsection Common notation for wind instruments - -@untranslated - -@menu -* References for wind instruments:: -* Fingerings:: -@end menu - -@node References for wind instruments -@unnumberedsubsubsec References for wind instruments - -@untranslated - -@node Fingerings -@unnumberedsubsubsec Fingerings - -@untranslated - -@node Bagpipes -@subsection Bagpipes - -@untranslated - -@menu -* Bagpipe definitions:: -* Bagpipe example:: -@end menu - -@node Bagpipe definitions -@unnumberedsubsubsec Bagpipe definitions - -LilyPond inclut des définitions spécifiques destinées à la notation pour -cornemuse écossaise ; pour les utiliser, il suffit d'ajouter - -@example -\include "bagpipe.ly" -@end example - -@noindent -en début de fichier. Ainsi, vous bénéficierez de commandes courtes pour -les appogiatures spéciales et idiomatiques de la cornemuse. Par -exemple, @code{\taor} est un raccourci pour - -@example -\grace @{ \small G32[ d G e] @} -@end example - -@code{bagpipe.ly} prend également en charge les définitions de hauteurs -pour la cornemuse ; vous n'avez donc pas à vous soucier d'employer -@code{\relative} ou @code{\transpose}. - -@lilypond[ragged-right,verbatim,quote,notime] -\include "bagpipe.ly" -{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } -@end lilypond - -La musique pour cornemuse est traditionnellement écrite en ré majeur. -Dans la mesure où c'est la seule tonalité possible, l'usage est de ne -pas indiquer l'armure explicitement. À cet effet, pensez à commencer -votre partition par @code{\hideKeySignature} -- ou bien -@code{\showKeySignature} si, pour une raison ou pour une autre, vous -tenez à afficher l'armure. - -Des compositions actuelles peuvent ne pas respecter cette tonalité -traditionnelle, auquel cas les do et fa devraient être abaissés en -utilisant @code{cflat} ou @code{fflat} ; ils seront représenté par une -note en forme de croix. - -Lorsqu'on joue des œuvres moins cérémonieuses que pour une parade -ou un défilé, peut survenir un sol aigu, au doux nom de -@qq{piobaireachd}, et que l'on indiquera par @code{gflat}. - -@node Bagpipe example -@unnumberedsubsubsec Bagpipe example - -Et voici en guise d'exemple, à quoi ressemble le chant populaire -@emph{Amazing Grace}, noté dans l'idiome de la cornemuse. - -@lilypond[verbatim,quote] -\include "bagpipe.ly" -\layout { - indent = 0.0\cm - \context { \Score \remove "Bar_number_engraver" } -} - -\header { - title = "Amazing Grace" - meter = "Hymn" - arranger = "Trad. arr." -} - -{ - \hideKeySignature - \time 3/4 - \grg \partial 4 a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg e8. f16 - \dblA A2 \grg A4 - \grg A2 f8. A16 - \grg A2 \hdblf f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 e4 - \thrwd d2. - \slurd d2 - \bar "|." -} -@end lilypond diff --git a/Documentation/fr/user/working.itely b/Documentation/fr/user/working.itely deleted file mode 100644 index 5db8ddacdf..0000000000 --- a/Documentation/fr/user/working.itely +++ /dev/null @@ -1,817 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: bfbaf6488d99ab4cdfcb4efdc67eaca63a636106 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Ludovic Sardain -@c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude - -@node Working on LilyPond projects -@chapter Working on LilyPond projects - -Cette section explique comment résoudre ou éviter certains problèmes -courants. Si vous avez de l'expérience en programmation, beaucoup de -ces astuces peuvent vous paraître évidentes, mais vous ne perdrez tout -de même pas votre temps à lire ce chapitre. - -@menu -* Suggestions for writing LilyPond input files:: -* When things don't work:: -* Scores and parts:: -@end menu - -@node Suggestions for writing LilyPond input files -@section Suggestions for writing LilyPond input files - -Maintenant vous êtes prêt à travailler sur de plus gros fichiers -LilyPond --- des pièces entières, et plus seulement les petits -exemples du tutoriel. Mais comment devriez-vous vous y prendre ? - -Tant que LilyPond parvient à comprendre vos fichiers et produit le -résultat que vous souhaitez, peu importe la manière dont le code est -organisé. Néanmoins, quelques critères doivent être pris en compte -lorsque l'on écrit un fichier LilyPond. - -@itemize @bullet -@item Si vous faites une erreur, la structure même du fichier LilyPond -peut permettre de la localiser plus ou moins facilement. - -@item Et si vous souhaitez partager vos fichiers avec quelqu'un -d'autre, ou si vous souhaitez modifier vos propres fichiers dans -quelques années ? Si certains fichiers LilyPond sont compréhensibles -au premier coup d'oeil, d'autres vous feront vous arracher les cheveux -pendant une heure. - -@item Et si vous souhaitez mettre à jour votre fichier pour -l'utiliser avec une version plus récente de LilyPond ? La syntaxe du -langage d'entrée change parfois lorsque LilyPond s'améliore. La -plupart des changements peuvent être appliqués automatiquement avec -@code{convert-ly}, mais quelques-uns peuvent requérir une intervention -manuelle. Vos fichiers LilyPond peuvent être structurés de manière à -faciliter leur mise à jour. -@end itemize - -@menu -* General suggestions:: -* Typesetting existing music:: -* Large projects:: -* Saving typing with variables and functions:: -* Style sheets:: -@end menu - -@node General suggestions -@subsection General suggestions - -Voici quelques conseils qui peuvent vous éviter certains problèmes ou -en résoudre d'autres. - -@itemize -@item @strong{Ajoutez le numéro de version dans chaque fichier}. -Notez que chaque fichier modèle contient une ligne @code{\version -"2.11.32"}. Nous vous conseillons fortement d'inclure cette ligne, -même pour de petits fichiers. Par expérience, il est très difficile -de se rappeler quelle version de LilyPond on utilisait quelques -années auparavant. L'utilitaire @command{convert-ly} demande que vous -spécifiiez la version de LilyPond vous utilisiez alors. - -@item @strong{Ajoutez des contrôles}: @ruser{Octave checks}, et -@ruser{Bar and bar number checks}. Si vous avez ajouté des contrôles -de loin en loin, et que vous faites une erreur, vous pourrez la -retrouver plus rapidement. @qq{De loin en loin}, qu'est-ce à dire ? -Cela dépend de la complexité de la musique. Pour de la musique très -simple, peut-être une ou deux fois. Pour de la musique très complexe, -peut-être à chaque mesure. - -@item @strong{Une mesure par ligne de texte}. Si la musique en elle-même ou -le résultat que vous désirez contient quelque chose de compliqué, il -est souvent bon de n'écrire qu'une seule mesure par ligne. Économiser -de la place en tassant huit mesures par ligne, ça ne vaut pas vraiment -le coup si l'on doît corriger vos fichiers. - -@item @strong{Ajoutez des commentaires}. Utilisez soit des -numéros de mesure (assez souvent), soit des références au contenu -musical --- @qq{second thème des violons}, @qq{quatrième variation}, etc. -Vous pouvez ne pas avoir besoin des commentaires lorsque vous écrivez -une pièce pour la première fois, mais si vous souhaitez y revenir deux -ou trois ans plus tard pour changer quelque chose, ou si vous donnez -le fichier source à un ami, ce sera beaucoup plus difficile de -déterminer vos intentions ou la manière dont votre fichier est -structuré si vous n'y avez pas adjoint de commentaires. - -@item @strong{Indentez les accolades}. Beaucoup de problèmes -viennent d'un défaut de parité entre @code{@{} et @code{@}}. - -@item @strong{Séparez les affinages de mise en forme} de la musique -elle-même. Voyez @ref{Saving typing with variables and functions} et -@ref{Style sheets}. - -@end itemize - - -@node Typesetting existing music -@subsection Typesetting existing music - -Si vous saisissez de la musique à partir d'une partition existante, -c'est-à-dire de la musique déjà écrite, - -@itemize @bullet - -@item n'entrez qu'un seul système de la partition originale -à la fois --- mais toujours une seule mesure par ligne de texte ---, -et vérifiez chaque système lorsqu'il est terminé. Vous pouvez -utiliser la commande @code{showLastLength} pour accélérer la -compilation --- voir @ruser{Skipping corrected music} ; - -@item définissez @code{mBreak = @{\break @}} et insérez -@code{\mBreak} dans le fichier d'entrée pour obtenir des sauts de -ligne identiques à la partition originale. Cela facilite la -comparaison entre la partition originale et la partition de -LilyPond. Lorsque vous avez fini de relire votre musique, vous pouvez -définir @code{mBreak = @{ @}} pour enlever tous ces sauts de ligne, et -laisser LilyPond placer les sauts de ligne selon son propre algorithme. - -@end itemize - - -@node Large projects -@subsection Large projects - -Lorsque l'on travaille sur un gros projet, il devient vital -de structurer clairement ses fichiers LilyPond. - -@itemize @bullet - -@item @strong{Utilisez un identificateur pour chaque voix}, -avec un minimum de structure dans la définition. La structure de la -section @code{\score} est la plus susceptible de changer, notamment -dans une nouvelle version de LilyPond, alors que la définition du -@code{violon} l'est beaucoup moins. - -@example -violin = \relative c'' @{ -g4 c'8. e16 -@} -... -\score @{ - \new GrandStaff @{ - \new Staff @{ - \violin - @} - @} -@} -@end example - -@item @strong{Séparez les retouches} des définitions de -musique. Ce conseil a été vu dans @ref{General suggestions}, -mais pour les projets d'importance c'est absolument vital. Nous -pouvons avoir besoin de changer la définition de -@code{fthenp}, mais dans ce cas nous n'aurons besoin de le faire -qu'une seule fois, et nous pourrons encore éviter de -modifier quoi que ce soit à l'intérieur de la définition -du @code{violon}. - -@example -fthenp = _\markup@{ - \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} -violin = \relative c'' @{ -g4\fthenp c'8. e16 -@} -@end example - -@end itemize - - -@node Saving typing with variables and functions -@subsection Saving typing with variables and functions - -@cindex variables -@cindex identificateurs - -Jusqu'à maintenant, vous avez vu ce type de code : - -@lilypond[quote,verbatim,ragged-right] -hornNotes = \relative c'' { c4 b dis c } -\score { - { - \hornNotes - } -} -@end lilypond - -Vous comprendrez combien cela peut être utile pour écrire de la -musique minimaliste : - -@lilypond[quote,verbatim,ragged-right] -fragmentA = \relative c'' { a4 a8. b16 } -fragmentB = \relative c'' { a8. gis16 ees4 } -violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } -\score { - { - \violin - } -} -@end lilypond - -Cependant, vous pouvez aussi utiliser ces identificateurs ---- aussi connus sous le nom de variables, macros, ou commandes -(définies par l'utilisateur) --- pour des retouches : - -@lilypond[quote,verbatim,ragged-right] -dolce = \markup{ \italic \bold dolce } -padText = { \once \override TextScript #'padding = #5.0 } -fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } -violin = \relative c'' { - \repeat volta 2 { - c4._\dolce b8 a8 g a b | - \padText - c4.^"hi there!" d8 e' f g d | - c,4.\fthenp b8 c4 c-. | - } -} -\score { - { - \violin - } -\layout{ragged-right=##t} -} -@end lilypond - -Ces identificateurs sont évidemment utiles pour économiser de la -frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une -seule fois : ils réduisent la complexité. Regardons l'exemple -précédent sans aucun identificateur. C'est beaucoup plus laborieux à -lire, et particulièrement la dernière ligne. - -@example -violin = \relative c'' @{ - \repeat volta 2 @{ - c4._\markup@{ \italic \bold dolce @} b8 a8 g a b | - \once \override TextScript #'padding = #5.0 - c4.^"hi there!" d8 e' f g d | - c,4.\markup@{ \dynamic f \italic \small @{ 2nd @} - \hspace #0.1 \dynamic p @} b8 c4 c-. | - @} -@} -@end example - -Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond -rencontre @code{\padText}, il le remplace par le contenu que nous lui -avons défini --- c'est-à-dire le contenu à droite de @code{padText=}. - -LilyPond gère également des substitutions non-statiques --- vous -pouvez les voir comme des fonctions. - -@lilypond[quote,verbatim,ragged-right] -padText = -#(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -Utiliser les identificateurs est aussi un bon moyen pour vous épargner -du travail si la syntaxe de LilyPond change un jour --- voir -@ref{Updating old files}. Si vous avez une seule définition, par -exemple @code{\dolce}, pour tous vos fichiers (voir @ref{Style -sheets}), et que la syntaxe change, alors vous n'aurez qu'à mettre à -jour votre seule définition @code{\dolce}, au lieu de devoir modifier -chaque fichier @code{.ly}. - - -@node Style sheets -@subsection Style sheets - -La sortie que produit LilyPond peut être largement modifiée --- voir -@ref{Tweaking output} pour plus de détails. Mais que faire si vous -avez beaucoup de fichiers auxquels vous souhaitez appliquer vos -retouches ? Ou si vous souhaitez simplement séparer les retouches de -la musique elle-même ? Rien de plus facile. - -Prenons un exemple. Ne vous inquiétez pas si vous ne comprenez pas -les parties avec tous les @code{#()}. Celles-ci sont expliquées dans -@ref{Advanced tweaks with Scheme}. - -@lilypond[quote,verbatim,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Il y a quelques problèmes de chevauchement ; nous allons arranger -cela en utilisant les techniques de @ref{Moving objects}. On peut -aussi faire quelque chose pour les définitions de @code{mpdolce} -et @code{tempoMark}. Elles produisent le résultat que nous désirons, -mais nous pourrions aussi vouloir les utiliser dans une autre pièce. -Il suffirait de les copier et les coller au début de chaque -fichier, mais c'est fastidieux. De plus, cela laisse les définitions -dans nos fichiers de musique, et je trouve personnellement tous ces -@code{#()} assez laids. Stockons-les dans un autre fichier : - -@example -%%% enregistrez ceci dans un fichier nommé "definitions.ly" -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) -@end example - -Maintenant, modifions notre musique (enregistrez ce fichier -sous @file{"musique.ly"}). - -@c We have to do this awkward example/lilypond-non-verbatim -@c because we can't do the \include stuff in the manual. - -@example -\include "definitions.ly" - -\relative c'' @{ - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -C'est mieux, mais effectuons encore quelques retouches. Le glissando -est peu visible, c'est pourquoi nous allons l'épaissir et le -rapprocher des têtes de notes. Déplaçons l'indication métronomique -au-dessus de la clef, au lieu de la laisser au-dessus de la première -note. Et pour finir, mon professeur de composition déteste les -chiffrages de mesure en @qq{C}, nous allons donc le transformer en @qq{4/4}. - -Cependant, ne changez pas le fichier @file{musique.ly}. Remplacez le -fichier @file{definitions.ly} par ceci : - -@example -%%% definitions.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - \override TimeSignature #'style = #'numbered - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Staff - \override TimeSignature #'style = #'numbered - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -C'est encore mieux ! Mais supposons maintenant que je veuille publier -cette pièce. Mon professeur de composition n'aime pas les chiffrages -de mesure en @qq{C}, mais moi je les aime bien. Copions l'actuel -@file{definitions.ly} dans le fichier @file{publication-web.ly}, et -modifions ce dernier. Puisque la musique est destinée à produire un -fichier PDF affiché sur écran, nous allons aussi augmenter la taille -globale de police. - -@example -%%% definitions.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -#(set-global-staff-size 23) -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -#(set-global-staff-size 23) -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Il ne nous reste plus qu'à remplacer @code{\include "definitions.ly"} -par @code{\include "publication-web.ly"} dans notre fichier de musique. - -Il est possible, bien sûr, de rendre cela encore plus pratique. Nous -pourrions créer un fichier @file{definitions.ly} qui ne contiendrait -que les définitions de @code{mpdolce} et de @code{tempoMark}, un -fichier @file{publication-web.ly} qui ne contiendrait que la section -@code{layout} décrite ci-dessus et un fichier @file{universite.ly} qui -ne contiendrait que les retouches pour produire le résultat que mon -professeur préfère. Le début du fichier @file{musique.ly} ressemblerait -alors à - -@example -\include "definitions.ly" - -%%% Décommentez seulement une de ces deux lignes ! -\include "publication-web.ly" -%\include "universite.ly" -@end example - -Cette approche peut être utile même si vous ne produisez qu'un seul -jeu de partitions. J'utilise personnellement une demi-douzaine de -fichiers de @qq{feuille de style} pour mes projets. Je commence -chaque fichier de musique par @code{\include "../global.ly"} qui contient : - -@example -%%% global.ly -\version @w{"@version{}"} -#(ly:set-option 'point-and-click #f) -\include "../init/init-defs.ly" -\include "../init/init-mise-en-page.ly" -\include "../init/init-en-tetes.ly" -\include "../init/init-papier.ly" -@end example - -@node When things don't work -@section When things don't work - -@menu -* Updating old files:: -* Troubleshooting (taking it all apart):: -* Minimal examples:: -@end menu - -@node Updating old files -@subsection Updating old files - -La syntaxe de LilyPond change de temps en temps. Ces changements de -syntaxe du langage d'entrée accompagnent les améliorations du -logiciel. Ces changements sont parfois destinés à rendre les fichiers -plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles -fonctionnalités. - -LilyPond est fourni avec un utilitaire qui facilite cette mise à -jour : @command{convert-ly}. Pour savoir comment utiliser ce programme, -voir @rprogram{Updating files with convert-ly}. - -Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les -modifications. Il s'occupe des changements qui ne requièrent qu'une -simple substitution de texte --- comme @code{raggedright} devenant -@code{ragged-right} ---, les autres étant trop compliqués à effectuer. -Les changements de syntaxe qui ne sont pas gérés par @command{convert-ly} -sont énumérés dans @rprogram{Updating files with convert-ly}. - -Par exemple, dans les versions 2.4 et antérieures de LilyPond, -les accents et les lettres non anglaises étaient entrées en -utilisant LaTeX --- par exemple, @samp{No\"el}. À partir de la -version 2.6, le caratère @samp{ë} doit être entré directement -dans le fichier LilyPond comme caractère UTF-8. -@code{convert-ly} ne peut pas changer tous les caractères -LaTeX en caractères UTF-8 ; vous devez mettre à jour vos vieux -fichiers LilyPond manuellement. - - - -@node Troubleshooting (taking it all apart) -@subsection Troubleshooting (taking it all apart) - -Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas -compiler. Les messages que LilyPond affiche peuvent vous aider à -trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire -quelques recherches pour déterminer la source du problème. - -Pour ce faire, les outils les plus puissants sont le commentaire de -fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou -bloc de commentaire), indiqué par @code{%@{ ... %@}}. Si vous ne -pouvez localiser le problème, commencez par mettre en commentaire de -grandes parties de votre fichier d'entrée. Après avoir mis en -commentaire une section, essayez de compiler à nouveau. Si cela -fonctionne, c'est que le problème se situe dans cette partie du -fichier. Si cela ne fonctionne pas, continuez à mettre en commentaire -d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile. - -Dans un cas extrême, vous pourriez en arriver à - -@example -\score @{ - << - % \melodie - % \harmonie - % \basse - >> - \layout@{@} -@} -@end example - -@noindent -c'est-à-dire un fichier sans aucune musique. - -Si cela arrive, ne vous découragez pas. Décommentez un peu, la partie -de basse par exemple, et voyez si ça fonctionne. Si ce n'est pas le -cas, placez en commentaire toute la partie de basse, mais laissez -@code{\basse} décommenté dans le bloc @code{\score}. - -@example -basse = \relative c' @{ -%@{ - c4 c c c - d d d d -%@} -@} -@end example - -Maintenant commencez à décommenter petit à petit le partie de -@code{basse} jusqu'à ce que vous localisiez la ligne qui pose -problème. - -Une autre technique de déboguage très utile est la construction -@iftex -de @ref{Minimal examples}. -@end iftex -@ifnottex -d'@ref{Minimal examples}. -@end ifnottex - - -@node Minimal examples -@subsection Minimal examples - -Un exemple minimal est un exemple de code aussi court que possible. -De tels exemples sont bien plus compréhensibles que des exemples -longs. Les exemples minimaux sont utilisés pour - -@itemize -@item les rapports de bogue, -@item les demandes d'aide sur les listes de diffusion, -@item un ajout à -@uref{http://lsr@/.dsi@/.unimi@/.it/,LilyPond Snippet Repository}. -@end itemize - -Pour construire un exemple minimal, la règle est très simple : enlevez -tout ce qui n'est pas nécessaire. Il est préférable de commenter les -lignes non nécessaires plutôt que de les effacer : ainsi, si vous vous -apercevez que certaines étaient @emph{réellement} nécessaires, vous -pouvez les décommenter au lieu de les resaisir. - -Il y a deux exceptions à cette règle du strict nécessaire : - -@itemize -@item incluez le numéro de @code{\version} en début de fichier -@item si possible, utilisez @code{\paper@{ ragged-right=##t @}} au -début de votre exemple. -@end itemize - -Tout l'intérêt d'un exemple minimal réside dans sa facilité de lecture : -@itemize -@item évitez d'utiliser des notes, armures ou métriques compliquées, à -moins que vous ne vouliez montrer quelque chose en rapport avec -celles-ci, -@item n'utilisez pas de commandes @code{\override} sauf si elles font -l'intérêt de l'exemple. -@end itemize - -@node Scores and parts -@section Scores and parts - -Dans la musique d'orchestre, toutes les notes sont imprimées deux fois. -D'abord dans les parties séparées destinées aux musiciens, et ensuite -dans le conducteur destiné au chef. Les variables sont là pour vous éviter -un double travail. La musique n'est entrée qu'une seule fois, et stockée dans -une variable, dont le contenu servira à imprimer à la fois la partie -séparée et la partition d'orchestre. - -Il est judicieux de définir les notes dans un fichier séparé. Par -exemple, supposons que le fichier @file{musique-Cor.ly} contienne la -partie suivante pour un duo cor/@/basson. - -@example -notesCor = \relative c @{ - \time 2/4 - r4 f8 a cis4 f e d -@} -@end example - -@noindent -On établira alors une partie séparée en constituant un nouveau fichier : - -@example -\include "musique-Cor.ly" -\header @{ - instrument = "Cor en Fa" -@} - -@{ - \transpose f c' \notesCor -@} -@end example - -À la ligne - -@example -\include "musique-Cor.ly" -@end example - -@noindent -sera substitué le contenu du fichier @file{musique-Cor.ly}, et de ce -fait la variable @code{notesCor} se trouvera définie. La commande -@code{\transpose f@tie{}c'} indique que son argument @code{\notesCor} -sera transposé à la quinte supérieure : le son réel @samp{f} s'écrit -@code{c'}, ce qui est la caractéristique d'un Cor en Fa. La transposition -est visible comme suit : - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - r4 f8 a cis4 f e d -} -@end lilypond - -Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas -pendant plusieurs mesures. Un silence spécial, appelé silence multi-mesures, -l'indique alors. On l'obtient par un @samp{R} majuscule, suivi d'une -durée : @code{1}@tie{}pour une pause, @code{2}@tie{}pour une demi-pause, -etc. Cette durée peut être multipliée pour établir de plus longs silences. -Par exemple, le silence suivant dure 3@tie{}mesures à 2/4. - -@example -R2*3 -@end example - -Dans une partie séparée, les silences multi-mesures sont compressés. -Il faut pour cela définir la propriété @code{skipBars} à @q{vrai} : - -@example -\set Score.skipBars = ##t -@end example - -@noindent -Cette commande assigne la valeur @q{vrai} --- @q{true} en anglais, et -@samp{#t} dans le langage Scheme --- à cette propriété dans le -contexte @code{Score}. Si l'on ajoute dans la musique ci-dessus le -silence multi-mesures et cette option, on obtient le résultat suivant : - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - \set Score.skipBars = ##t - R2*3 - r4 f8 a cis4 f e d -} -@end lilypond - -Le conducteur rassemble toute la musique. Si l'on suppose que l'autre -voix de notre duo se trouve dans le fichier @file{musique-Basson.ly} en -tant que variable @code{notesBasson}, on établira un conducteur avec - -@example -\include "musique-Basson.ly" -\include "musique-Cor.ly" - -<< - \new Staff \notesCor - \new Staff \notesBasson ->> -@end example - -@noindent -ce qui équivaut à - -@lilypond[quote,ragged-right] -\relative c << - \new Staff { - \time 2/4 R2*3 - r4 f8 a cis4 f e d - } - \new Staff { - \clef bass - r4 d,8 f | gis4 c | b bes | - a8 e f4 | g d | gis f - } ->> -@end lilypond - -Des informations plus détaillées sur la mise en place de conducteurs -et de parties séparées se trouvent dans le manuel : voir -@ruser{Writing parts}. - -Les variables (@q{propriétés}) réglables sont abordées en détail dans -@ruser{The set command}. diff --git a/Documentation/fr/user/world.itely b/Documentation/fr/user/world.itely deleted file mode 100644 index c0f41d4d25..0000000000 --- a/Documentation/fr/user/world.itely +++ /dev/null @@ -1,73 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: 4a527608c5ff2ce31e596495d00dce181dc1b9ea - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node World music -@section World music - -@untranslated - - -@menu -* Arabic music:: -@end menu - -@node Arabic music -@subsection Arabic music - -@untranslated - - -@menu -* References for Arabic music:: -* Arabic note names :: -* Arabic key signatures:: -* Arabic time signatures:: -* Arabic music example:: -* Further reading:: -@end menu - -@node References for Arabic music -@unnumberedsubsubsec References for Arabic music - -@untranslated - - -@node Arabic note names -@unnumberedsubsubsec Arabic note names - -@untranslated - - -@node Arabic key signatures -@unnumberedsubsubsec Arabic key signatures - -@untranslated - - -@node Arabic time signatures -@unnumberedsubsubsec Arabic time signatures - -@untranslated - - -@node Arabic music example -@unnumberedsubsubsec Arabic music example - -@untranslated - - -@node Further reading -@unnumberedsubsubsec Further reading - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/fr/web.texi b/Documentation/fr/web.texi new file mode 100644 index 0000000000..92701f936a --- /dev/null +++ b/Documentation/fr/web.texi @@ -0,0 +1,316 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 + +@setfilename web.info +@settitle LilyPond -- la notation musicale pour tous +@documentencoding UTF-8 +@documentlanguage fr +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 par les auteurs. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage French +@end ignore + +@c Translators: John Mandereau +@c Translators checkers: Jean-Charles Malahieude + +@copying +Copyright @copyright{} 2009--2011 par les auteurs. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +This file documents the LilyPond website. + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@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 -- le typographe de musique +@direntry +* Manuel d'initiation à LilyPond: (lilypond-learning). Les premiers pas. +* Glossaire musicologique: (music-glossary). Pour l'utilisateur non anglophone. +* Manuel de notation: (lilypond-notation). Gravure de musique avec LilyPond. +* Morceaux choisis de LilyPond: (lilypond-snippets). Petits trucs, astuces et exemples. +* Référence des propriétés internes: (lilypond-internals). Définitions pour les retouches. +* Manuel d'utilisation: (lilypond-usage). Installation et exécution des programmes. +* LilyPond Website: (lilypond-web). Prévisualisation du site. +* abc2ly: (lilypond-usage) Lancement de abc2ly. Import de fichier ABC. +* convert-ly: (lilypond-usage) Mise à jour de fichiers. Pour d'anciens fichiers LilyPond. +* etf2ly: (lilypond-usage) Lancement de etf2ly. Import de fichier Finale. +* lilypond-book: (lilypond-usage) LilyPond-book. Association musique-texte. +* midi2ly: (lilypond-usage) Lancement de midi2ly. Import de fichier MIDI. +* musicxml2ly: (lilypond-usage) Lancement de musicxml2ly. Import de fichier MusicXML. +@end direntry + + +@c TITLE PAGE +@ifnottex +@node Top +@top LilyPond... la notation musicale pour tous +@translationof Top +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle Le système de notation musicale +@titlefont{Informations générales} +@author Équipe de développement de LilyPond + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +Pour LilyPond version @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... la notation musicale pour tous +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading Qu'est-ce que LilyPond ? + +LilyPond est un logiciel de gravure musicale, destiné à produire +des partitions de qualité optimale. Ce projet apporte à l'édition +musicale informatisée l'esthétique typographique de la gravure +traditionnelle. LilyPond est un logiciel libre rattaché au +@uref{http://gnu.org,projet GNU}. + +@divClass{align-right} +Plus sur LilyPond dans notre @ref{Introduction} ! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Archives}) @c (@ref{Old news,,,,Actualités passées}) +@divEnd + +@divEnd + + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} + +@subheading Raccourcis + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Branche stable + +@ref{Download, Téléchargemement de @versionStable} + +@ref{Manuals, Manuels de @versionStable} + +@subsubheading Branche de développement + +@ref{Development, Téléchargement de @versionDevel} + +@ref{Development, Manuels de @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* Introduction:: Comment créer des partitions +* Téléchargement:: Télécharger LilyPond +* Manuels:: Bibliothèque de LilyPond +* Communauté:: Comment contacter d'autres utilisateurs +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@end ignore + +@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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Lisez-le + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (HTML multipages)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (HTML page unique)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.fr.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} : + manuel sous forme de plusieurs pages HTML + @*@ @ @emph{-- chaque page est assez petite.} + +@item @docLinkBig{\name\,\base\,\big\} : + manuel sous forme d'une seule grande page + @*@ @ @emph{-- un seul gros téléchargement, \bigsize\.} + +@item @docLinkPdf{\name\,\base\,\pdf\} : + manuel au format PDF + @*@ @ @emph{-- un seul gros téléchargement, \pdfsize\.} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\ : +@end ifclear +@ifset web_version + \webLink\ : +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +Si vous avez connaissance d'autres \topic\ qui mériteraient de figurer +ici, faites le nous savoir, en suivant les instructions de la rubrique +@ref{Signalement de bogue}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +Si vous avez connaissance d'autres \topic\ qui mériteraient de figurer +ici, faites le nous savoir, en suivant les instructions de la rubrique +@ref{Signalement de bogue}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + +@bye diff --git a/Documentation/fr/web/GNUmakefile b/Documentation/fr/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/fr/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/fr/web/community.itexi b/Documentation/fr/web/community.itexi new file mode 100644 index 0000000000..04904918ce --- /dev/null +++ b/Documentation/fr/web/community.itexi @@ -0,0 +1,930 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage : fr -*- +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 Translators: Jean-Charles Malahieude, John Mandereau +@c Translation checkers: Jean-Charles Malahieude + + +@include included/authors.itexi +@include included/helpus.itexi + +@node Communauté +@unnumbered Communauté +@translationof Community + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Échanger avec la communauté +@translationof Interacting with the community + +@itemize + +@item +@ref{Contact} : obtenir de l'aide, discuter et rester en contact. + +@item +@ref{Exemples minimaux} : une nécessité lorsque l'on discute de LilyPond. + +@item +@ref{Signalement de bogue} : disfonctionnement du programme. + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading Rendre LilyPond encore meilleur +@translationof Making LilyPond better + +@itemize + +@item +@ref{Participation} : pour les bonnes volontés qui se sentent concernées. + +@item +@ref{Développement} : pour ceux qui veulent contribuer et tester. + +@item +@ref{Auteurs} : ceux qui ont permis à LilyPond d'être ce qu'il est +aujourd'hui. + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading Divers +@translationof Miscellaneous + +@itemize + +@item +@ref{Publications} : ce que nous avons écrit, et ce que l'on dit de nous. + +@item +@ref{Archives} : archives des dépèches. + +@end itemize +@divEnd + +@divEnd + +@divClass{hide} +@menu +* Contact:: +* Exemples minimaux:: +* Signalement de bogue:: +* Participation:: +* Développement:: +* Auteurs:: +* Publications:: +* Archives:: +@end menu +@divEnd + + +@node Contact +@unnumberedsec Contact +@translationof Contact + + +@divClass{column-left-bottom} +@subheading Discuter entre utilisateurs et demander de l'aide +@translationof Discussions and Help + +@subsubheading Liste de diffusion des utilisateurs : @code{lilypond-user@@gnu.org} + +Cette liste de diffusion @strong{anglophone} est le lieu privilégié des +utilisateurs pour discuter et s'entraider. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user, +page de souscription à lilypond-user} + +@uref{http://lists.gnu.org/archive/html/lilypond-user/, +archive1 de la liste}, +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +archive2}, +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +archive3}. + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +poster sur lilypond-user à l'aide de gmane} +@end quotation + +@warning{Lorsque vous posez une question, merci de fournir des +@ref{Exemples minimaux}@tie{}!} + + +@subsubheading LilyPond Snippet Repository + +Le LilyPond Snippet Repository regroupe des exemples de situations +particulières auxquelles ont été confontés les utilisateurs de LilyPond. +Ils sont librement réutilisables dans vos propres travaux. N'hésitez +pas à apporter votre concours à cette banque de trucs et astuces@tie{}! + +@example +@uref{http://lsr.dsi.unimi.it} +@end example + +Un certain nombre d'exemples issus du LSR et particulièrement pertinents +sont directement inclus dans la documentation, volume +@ref{Morceaux choisis}. + + +@subsubheading IRC + +Vous pouvez obtenir quelque support au travers de notre canal IRC@tie{}: + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +Ce canal ne disposant pas d'archive publique, nous vous invitons à +plutôt utiliser les listes de diffusion pour toute question qui pourrait +intéresser d'autres utilisateurs. + +@html +
alias irc : + + + + +
+ + +@end html + +@subsubheading Autres langues + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-es, +Liste de diffusion hispanophone} + +@uref{http://www.lilypondforum.de/, +Forum germanophone} + +@uref{http://groups.google.com/group/lilypond-brasil, +Groupe des utilisateurs brésiliens} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +Liste de diffusion francophone} + +@uref{http://www.lilypondforum.nl/, +Forum hollandais} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Se tenir informé + +@subsubheading LilyPond Report + +Le @uref{http://news.lilynet.net/, LilyPond Report} est le bulletin de +la communauté. À lire pour savoir ce qui se passe. + +@subsubheading Liste de diffusion des versions : @code{info-lilypond@@gnu.org} + +Cette liste de diffusion est en lecture seule. Son but est de notifier +la mise à disposition des versions. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +page de souscription à info-lilypond} + +@uref{http://lists.gnu.org/archive/html/info-lilypond/, +archive1 de la liste}, +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +archive2}, +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +archive3} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading Contacter les développeurs + +@subsubheading Liste de diffusion des développeurs : @code{lilypond-devel@@gnu.org} + +C'est sur cette liste que se tiennent la plupart des discussions ayant +trait au développement. C'est aussi à cette liste que doivent être +adressés les patches. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel, +Page de souscription à lilypond-devel} + +@uref{http://lists.gnu.org/archive/html/lilypond-devel/, +archive1 de la liste}, +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +archive2}, +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +archive3}. + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +poster sur lilypond-devel à l'aide de gmane} +@end quotation + + +@subsubheading Liste de diffusion des bogues : @code{bug-lilypond@@gnu.org} + +Cette liste @strong{anglophone} est tout spécialement consacrée aux +discussions à propos des bogues ou limitations. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond, +page de souscription à bug-lilypond} + +@uref{http://lists.gnu.org/archive/html/bug-lilypond/, +archive1 de la liste}, +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +archive2}, +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +archive3}. + +@c don't include gmane posting here. -gp +@end quotation + +@warning{Les directives à suivre pour poster un message sur cette +liste sont répertoriées dans @ref{Signalement de bogue}.} + +@divEnd + + + +@node Exemples minimaux +@unnumberedsec Exemples minimaux +@translationof Tiny examples + +@divClass{column-center-top} +@subheading Exemple minimal@dots{} mais qu'est-ce donc que cela ? + +Un exemple minimal est un bout de code duquel plus rien ne peut être retiré. +@divEnd + +@divClass{column-left-bottom} +@subheading Pourquoi être minimaliste ? + +@divClass{keep-bullets} +@itemize + +@item +Au plus l'exemple est simpliste, au plus vite ceux qui pourraient vous +aider comprendront votre propos et vous apporteront une réponse. + +@item +Réduire l'exemple à sa plus simple expression indique que vous avez déjà +tenté par vous-même de trouver une solution. Des tonnes de lignes +laissent à penser que celui qui les envoie se soucie peu de ce qui arrive. + +@item +La génération d'un exemple minimaliste permet de comprendre ce qui se +passe et évite la plupart du temps de signaler un problème qui, en +réalité, n'existe pas@tie{}: lorsqu'un @qq{bogue} ne peut être +reproduit dans le cadre d'un exemple minimal, il y a de fortes +présomptions qu'il s'agisse d'une inadéquation entre l'utilisateur et +LilyPond plutôt que réellement d'un @qq{bogue}. + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading Comment être minimaliste@tie{}? + +@divClass{keep-bullets} +@itemize + +@item +Inclure une mention \version pour indiquer le numéro de version utilisée. + +@item +Être aussi bref et concis que possible. Si des problèmes concernant les +espacements ou la mise en page peuvent nécessiter un certain nombre de +mesures, la plupart des litiges peuvent se cantonner à une seule mesure. + +@item +Lorsque vous créez un exemple minimal à partir de votre code, commencez +par commenter des portions de votre fichier -- à l'aide de @w{@code{%} +ou @code{%@{ @dots{} %@}}}. Tout ce que vous mettez en commentaire et +qui ne nuit pas à la démonstration est superflu@tie{}; +suprimez-le@tie{}! + +@item +Évitez autant que faire se peut toute notation, tonalité ou métrique +complexe, à moins que leur traitement ne soit précisément l'objet du +litige. + +@item +N'utilisez pas les commandes @code{\override} ou @code{\set} à moins que +le problème ne soit directement lié à leur utilisation. + +@end itemize +@divEnd + +@divEnd + + + + +@node Signalement de bogue +@unnumberedsec Signalement de bogue +@translationof Bug reports + +@divClass{column-center-top} +@subheading Étape 1 : Le bogue est-il déjà recensé ? + +Si votre saisie entraine un crash ou une sortie erronée, c'est un bogue. +Un recensement des bogues non encore résolus est disponible sur notre +@emph{google bug tracker}@tie{}; suivez le lien + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{Nous vous remercions de ne pas ajouter directement de +signalement sur le traceur de bogues. Vous pourrez toujours, une fois +qu'il aura été duement répertorié, y apporter vos commentaires et +compléments d'information.} + +@divEnd + + +@divClass{column-left-bottom} +@subheading Étape 2 : Génération d'un signalement de bogue + +Lorsque le disfonctionnement que vous avez repéré n'est pas répertorié, +faites-le nous savoir en créant un signalement de bogue. + +@warning{Nous n'acceptons les signalements de bogue que s'ils sont +rédigés sous la forme d'@ref{Exemples minimaux}. Nous ne disposons +pas de suffisamment de ressources pour traiter les rapports de bogue, +aussi tout exemple non minimaliste sera rejeté. Dans la plupart des +cas, seules quelques notes suffisent à démontrer le disfonctionnement.} + +Voici ce à quoi devrait ressembler tout signalement de bogue@tie{}: + +@example +% Dans une liaison de prolongation +% seule la première note devrait porter +% l'altération accidentelle. +% Cette version l'ajoute partout. +\version "2.10.1" + +\relative c'' @{ + bes1 ~ + bes1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading Étape 3 : Transmission d'un signalement de bogue + +Après avoir vérifié que votre problème n'est pas déjà répertorié et +rédigé votre rapport de bogue, n'hésitez pas à nous le transmettre. + +@divClass{keep-bullets} +@itemize + +@item +Si vous êtes déjà inscrit à la liste de diffusion +@uref{mailto:bug-lilypond@@gnu.org,bug-lilypond@@gnu.org}, envoyez un +courriel comme à l'accoutumée. + +@item +Si vous néavez pas souscrit à la liste de diffusion, vous pouvez +cependant transmettre votre rapport de bogue au travers de +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +l'interface gmane de lilypond.bugs}. + +Nous tenons à préciser que l'interface gmane applique une politique +stricte de @qq{no top-posting} bien souvent mise en défaut par les +fichiers LilyPond. Aussi nous vous prions de bien vouloir ajouter une +ligne + +@example +> I'm not top posting. +@end example + +@noindent +sans oublier le @code{>} au tout début de votre message@tie{}; c'est +@strong{impératif}. + +Si vous ne voulez ou ne pouvez pas envoyer un rapport de bogue selon les +instructions et en anglais, envoyez votre rapport ou posez votre +question sur la @uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +liste francophone}@tie{}; nous nous chargerons de transmettre un rapport +à la liste anglophone et assurerons le suivi. + +@end itemize + +@divEnd +@divEnd + +@divClass{column-center-bottom} +@subheading Étape 4: Notification de prise en compte + +Une fois le message reçu, nos @qq{exterminateurs de bogues} analyseront +votre rapport et vous demanderont peut-être des informations +supplémentaires avant de l'ajouter au traceur. Dans la mesure où +l'équipe est réduite, merci de leur laisser une bonne journée avant +qu'ils ne vous transmettent le numéro de référence de votre signalement +une fois qu'il aura été ajouté à la base. + +Vous serez automatiquement notifié du traitement apporté à ce bogue, dès +lors que vous avez une compte chez google. +@divEnd + +@divClass{column-center-bottom} +@subheading Information complémentaire : indication du comportement escompté + +Une fois votre requête enregistrée, n'hésitez pas à nous indiquer le +résultat que vous escomptiez. Qu'il s'agisse d'un bout de code ou d'une +image -- réalisée à partir de n'importe quel outil --, tant qu'il nous +aide à voir ce que vous désirez obtenir. +@divEnd + + +@node Participation +@unnumberedsec Participation +@translationof Help us + +@divClass{column-center-top} +@helpusNeed + +@divEnd + +@divClass{column-left-top} +@divClass{keep-bullets} +@helpusTasks + +@divEnd +@divEnd + +@divClass{column-right-top} +@helpusProjects + +@divEnd + + +@node Développement +@unnumberedsec Développement +@translationof Development + +@divClass{heading-center} +@ifclear web_version + @heading Développement pour LilyPond @version +@end ifclear +@ifset web_version + @heading Développement pour LilyPond @versionDevel +@end ifset + + +@warning{Il s'agit des versions @emph{instables et de développement}. +Si vous avez le moindre doute quant à l'utilisation ou l'installation de +LilyPond, nous vous enjoignons à utiliser le +@ref{Téléchargement,téléchargement de la version stable} et la +lecture des @ref{Manuels,manuels pour la version stable}.} + +@divEnd + +@divClass{column-center-top} +@subheading Numérotation des versions + +Il existe deux jeux de version pour LilyPond@tie{} des versions stables +et des versions instables de développement. Les versions stables +comportent, en versionnage @qq{mineur}, un numéro pair (p.ex. 2.8, 2.10, +ou 2.12). Les versions de développement, quant à elles, comportent un +versionnage @qq{mineur} impair (p.ex. 2.7, 2.9 ou 2.11). + +@divEnd + + +@divClass{column-left-top} +@subheading Téléchargement + +Des instructions concernant @code{git} et la compilation sont exposées +dans le Guide du contributeur. + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, dépôt git de LilyPond} +@end quotation + +Les rédacteurs de la documentation ainsi que les testeurs préfèreront +travailler à partir des binaires les plus à jour@tie{}: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource + +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Le guide du contributeur + +Le développement de LilyPond est relativement complexe. Dans l'espoir +d'aider les nouveaux contributeurs, et dans le but de préserver au mieux +la stabilité de ce système, nous avons rédigé un manuel dédié aux +activités de développement. + +@warning{Dans la mesure où le développement de LilyPond est disséminé +sur la planète, il n'est pas prévu que ce document soit un jour +traduit@dots{}} + +@docLinksBare{Guide du contributeur, contributor, + @rcontribnamed{Top,Guide du contributeur}, + @manualDevelContributorSplit, + @manualDevelContributorBig, 500 kB, + @manualDevelContributorPdf, 2.8 MB} + +@divEnd + + +@divClass{column-center-top} +@subheading Tests de régression + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@uref{../../input/regression/collated-files.html, Tests de régression} +relatifs à ce niveau de mise à jour +(@uref{../../input/regression/collated-files.pdf, version pdf}). + +@item +@uref{../../input/regression/musicxml/collated-files.html, Tests de MusicXML} +relatifs à ce niveau de mise à jour +(@uref{../../input/regression/musicxml/collated-files.pdf, version pdf}). + +@item +@uref{../../input/regression/abc2ly/collated-files.html, Test de abc2ly} +relatifs à ce niveau de mise à jour +(@uref{../../input/regression/abc2ly/collated-files.pdf, version pdf}). + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, +Test de lilypond-book} relatifs à ce niveau de mise à jour +(@uref{../../input/regression/lilypond-book/collated-files.pdf, versionpdf}). +@end itemize + +@end ifclear + +@ifset web_version +@subsubheading Version de développement + +@itemize +@item @regtestDevel (@regtestDevelPdf{}) + +@item @regtestDevelXml (@regtestDevelXmlPdf{}) + +@item @regtestDevelAbc (@regtestDevelAbcPdf{}) + +@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{}) +@end itemize + +@subsubheading Version stable + +@itemize +@item @regtestStable (@regtestStablePdf{}) + +@item @regtestStableXml (@regtestStableXmlPdf{}) + +@item @regtestStableAbc (@regtestStableAbcPdf{}) + +@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{}) +@end itemize +@end ifset + + +@subsubheading Toutes versions + +@itemize +@item @uref{http://lilypond.org/test, Archives des tests de régression} : +Comparaisons entre différentes versions. + +@end itemize + +@divEnd +@divEnd + + + +@divClass{column-center-bottom} +@subheading Manuels + +@ifclear web_version +@warning{Il s'agit des manuels pour LilyPond @version{}@tie{}; la +dernière mouture est consultable sur @url{http://lilypond.org}} +@end ifclear + +@divClass{normal-table} +@multitable @columnfractions .3 .3 .3 +@headitem Introduction +@item +@docLinkSplit{Initiation,learning,@manualDevelLearningSplit-fr} +@tab +@docLinkBig{Initiation,learning,@manualDevelLearningBig-fr} +@tab +@docLinkPdf{Initiation,learning,@manualDevelLearningPdf-fr} + +@item +@docLinkSplit{Glossaire,music-glossary,@manualDevelGlossarySplit-fr} +@tab +@docLinkBig{Glossaire,music-glossary,@manualDevelGlossaryBig-fr} +@tab +@docLinkPdf{Glossaire,music-glossary,@manualDevelGlossaryPdf-fr} + +@item +@docLinkSplit{Essai,essay,@manualDevelEssaySplit-fr} +@tab +@docLinkBig{Essai,essay,@manualDevelEssayBig-fr} +@tab +@docLinkPdf{Essai,essay,@manualDevelEssayPdf-fr} + +@headitem Utilisation courante + +@item +@docLinkSplit{Notation,notation,@manualDevelNotationSplit-fr} +@tab +@docLinkBig{Notation,notation,@manualDevelNotationBig-fr} +@tab +@docLinkPdf{Notation,notation,@manualDevelNotationPdf-fr} + +@item +@docLinkSplit{Utilisation,usage,@manualDevelUsageSplit-fr} +@tab +@docLinkBig{Utilisation,usage,@manualDevelUsageBig-fr} +@tab +@docLinkPdf{Utilisation,usage,@manualDevelUsagePdf-fr} + +@item +@docLinkSplit{Morceaux choisis,snippets,@manualDevelSnippetsSplit-fr} +@tab +@docLinkBig{Morceaux choisis,snippets,@manualDevelSnippetsBig-fr} +@tab +@docLinkPdf{Morceaux choisis,snippets,@manualDevelSnippetsPdf-fr} + +@headitem Utilisation ponctuelle + +@item +@docLinkSplit{Web,web,@manualDevelWebSplit-fr} +@tab +@docLinkBig{Web,web,@manualDevelWebBig-fr} +@tab +@docLinkPdf{Web,web,@manualDevelWebPdf-fr} + +@item +@docLinkSplit{Nouveautés,changes,@manualDevelChangesSplit-fr} +@tab +@docLinkBig{Nouveautés,changes,@manualDevelChangesBig-fr} +@tab +@docLinkPdf{Nouveautés,changes,@manualDevelChangesPdf-fr} + +@item +@docLinkSplit{Extension,extending,@manualDevelExtendingSplit-fr} +@tab +@docLinkBig{Extension,extending,@manualDevelExtendingBig-fr} +@tab +@docLinkPdf{Extension,extending,@manualDevelExtendingPdf-fr} + +@item +@docLinkSplit{Références internes,internals,@manualDevelInternalsSplit-fr} +@tab +@docLinkBig{Références internes,internals,@manualDevelInternalsBig-fr} +@tab +@docLinkPdf{Références internes,internals,@manualDevelInternalsPdf-fr} + +@ifset web_version +@headitem En téléchargement + +@item +@doctarballDevel +@end ifset + +@end multitable + +@divEnd +@divEnd + + + + +@node Auteurs +@unnumberedsec Auteurs +@translationof Authors + +@divClass{column-left-top} +@subheading Équipe actuelle de développement + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Ceux qui ont participé + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading Contributeurs actifs + +@divClass{keep-bullets} +@subsubheading Programmation + +@coreCurrent + +@subsubheading Fontes et polices + +@fontCurrent + +@subsubheading Documentation + +@docCurrent + +@subsubheading Résolution de bogue + +@bugsquadCurrent + +@subsubheading Support + +@supportCurrent + +@subsubheading Traduction + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Ceux qui ont contribué + +@divClass{keep-bullets} +@subsubheading Programmmation + +@corePrevious + +@subsubheading Fontes et polices + +@fontPrevious + +@subsubheading Documentation + +@docPrevious + +@c uncomment when we have any previous members -gp +@c @subsubheading Résolution de bogue + +@c @bugsquadCurrent + +@subsubheading Support + +@supportPrevious + +@subsubheading Traduction + +@translationsPrevious + +@divEnd +@divEnd + + + +@node Publications +@unnumberedsec Publications +@translationof Publications + +@divClass{column-center-top} +@subheading Ce que nous avons écrit + +@divClass{keep-bullets} +@itemize + +@item +Han-Wen Nienhuys, @emph{LilyPond, Automated music formatting and +the Art of Shipping}. Forum international du logiciel libre 2006 +(FISL7.0) (@uref{http://lilypond.org/web/images/FISL7-slides.pdf, +PDF 1095k}) + +@item +Erik Sandberg, @emph{Séparer le langage source et le système de +formatage dans GNU LilyPond (Separating input language and formatter in +GNU LilyPond)}. Thèse de master, université d'Uppsala, Département des +technologies de l'information, mars@tie{}2006. +(@uref{http://lilypond.org/web/images/thesis-erik-sandberg.pdf, +PDF 750k}) + +@item +Han-Wen Nienhuys et Jan Nieuwenhuizen, @emph{LilyPond, un système de +gravure musicale automatisée}. Actes du 14e Colloque d'informatique +musicale (XIV CIM 2003), Florence, Itale, mai@tie{}2003. +(@uref{ http://lilypond.org/web/images/xivcim.pdf, PDF 95k}) + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} + +@subheading Ce que certains ont fait avec LilyPond + + +@divClass{keep-bullets} +@itemize + +@item +Graham Percival, Tosten Anders et George Tzanetakis, +@emph{Generating Targeted Rhythmic Exercises for Music Students +with Constraint Satisfaction Programming}, International Computer +Music Conference 2008. + +@item +Alexandre Tachard Passos, Marcos Sampaio, Pedro Kröger, Givaldo de Cidra, +@emph{Functional Harmonic Analysis and Computational Musicology +in Rameau}, Proceedings of the 12th Brazilian Symposium on Computer +Music, 2009, p. 207-210. + +@item +Alberto Simões, Anália Lourenço et José João Almeida, +@emph{Using Text Mining Techniques for Classical Music Scores Analysis}, +New Trends in Artificial Intelligence, 2007 J. Neves et al ed. + +@item +Kevin C. Baird 2005, +@emph{Real-time generation of music notation via audience interaction using +python and GNU lilypond}. Proceedings of the 2005 Conference on New interfaces +For Musical Expression (Vancouver, Canada, May 26 - 28, 2005). +New Interfaces For Musical Expression. National University of Singapore, +Singapore, 240-241. + +@end itemize + +@divEnd +@divEnd + + +@node Archives +@unnumberedsec Archives +@translationof Old news + +@include web/news-front.itexi + +@include web/news.itexi + diff --git a/Documentation/fr/web/download.itexi b/Documentation/fr/web/download.itexi new file mode 100644 index 0000000000..5d10ed7148 --- /dev/null +++ b/Documentation/fr/web/download.itexi @@ -0,0 +1,629 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 Translators: Jean-Charles Malahieude, John Mandereau +@c Translation checkers: Jean-Charles Malahieude + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond travaille sur des @strong{fichiers textuels}. Il +s'apparente plus à un langage de programmation plutôt qu'à un éditeur de +partition en mode graphique. Avant de télécharger LilyPond, veuillez +lire @ref{Entrée sous forme de texte}.} +@end macro + +@node Téléchargement +@unnumbered Téléchargement +@translationof Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want verisonDevel here, since the online links + @c for @version won't be up yet! +@heading Téléchargement de LilyPond @versionDevel + +@warning{Les versions stables de LilyPond sont disponibles chez +@uref{http://lilypond.org, lilypond.org}} +@end ifclear +@ifset web_version + @heading Télécharger LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Pour l'utilisateur + +@itemize + +@item +@c TODO: duplicate to avoid underlined refs in HTML? icky. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux et FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Pour le développeur + +@itemize + +@item +@ref{Sources} : +pour les empaqueteurs + +@item +@ref{Anciennes versions} : +versions antérieures + +@item +@ref{Development} : +version instable la plus récente + +@end itemize +@divEnd + +@divEnd + +@divClass{column-center-bottom} + +@subheading Licence logicielle + +LilyPond est publié selon les termes de la +@ref{GPL, GNU General Public License}. +@divEnd + + +@divClass{color1} + +@subheading Sponsors + +Nous remercions @uref{http://www.vt.edu/, Virginia Tech} et +@uref{http://www.linuxaudio.org/, linuxaudio.org} qui sponsorisent notre +bande passante. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Mention légale + +@divClass{legal} +Tous les logos et images des produits sont des marques déposées ou sont +protégés par le droit d’auteur. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Sources:: +* Anciennes versions:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Paquetage générique ou paquetage spécifique à la distribution + +De nombreuses distributions incluent LilyPond dans leur choix de +paquetages. Ces versions sont plus faciles à installer ou désinstaller +qu'un paquetage générique, mais peuvent être plus anciennes. Si vous +avez l'intention d'utiliser notre paquetage générique, veuillez tout +d'abord désinstaller la version officielle de votre distribution à +l'aide de votre gestionnaire de paquets habituel. Référez-vous à la +documentation de votre distribution pour savoir comment l'utiliser. + +@divEnd + + +@divClass{column-left-top} +@subheading Paquetages génériques + +@subsubheading Téléchargement + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version +@downloadStableLinuxNormal +@end ifset + +(dans le doute, prenez celui-ci) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Installation + +Dans un terminal, tapez : + +@example +cd CHEMIN_DU_RÉPERTOIRE_DE_TÉLÉCHARGEMENT +sh lilypond-@versionStable{}-OS-TYPE.sh +@end example + +@subsubheading Désinstallation + +Dans un terminal, tapez : + +@example +uninstall-lilypond +@end example + +@divEnd + + +@divClass{column-right-top} +@subheading Compilation d'un fichier + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Paquetage des distributions + +Veuillez utiliser votre gestionnaire de paquet favori pour installer et +mettre à jour ces versions. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.3} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.3} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=lilypond, +openSUSE: LilyPond 2.12.3} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Mention légale + +@divClass{legal} +Tous les logos et images des produits sont des marques déposées ou sont +protégés par le droit d’auteur. + + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X +@translationof MacOS X + + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Paquetages + +@subsubheading Téléchargement + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Pour MacOS X 10.4 ou supérieur tournant sur un processeur Intel (dans le +doute, prenez celui-ci). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +Pour MacOS X 10.4 ou supérieur tournant sur un processeur G3 ou G4 +(anciens ordinateurs Apple). + +@end itemize + +@subsubheading Installation + +Double-cliquez sur le fichier téléchargé, puis déplacez-le où vous voulez. + +@subsubheading Désinstallation + +Supprimez le répertoire LilyPond.app. + +@divEnd + + +@divClass{column-right-top} +@subheading Compilation d'un fichier + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Utilisation en ligne de commande + +@warning{Si vous préférez l'interface graphique, ne tenez pas compte de +ce qui suit.} + +@subsubheading MacOS X et la ligne de commande + +Le moyen le plus pratique d'utiliser les scripts lilypond est de vous +créer des @qq{lanceurs}. + +@enumerate + +@item +Créez un répertoire pour stocker ces différents scripts : + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Créez un fichier @command{lilypond} qui contiendra + +@divClass{h-scroll-auto} +@example +exec @var{RÉP}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example +@divEnd + +@warning{@var{RÉP} sera en règle générale @code{/Applications/}} + + +@item +Créez de la même manière les fichiers @command{lilypond-book}, +@command{convert-ly}, et autres scripts que vous souhaitez utiliser, en +remplaçant @command{bin/lilypond} par @command{bin/convert-ly} ou autre +nom de programme. + + +@item +Rendez ce fichier exécutable : + +@example +chmod u+x lilypond +@end example + + +@item +Ajoutez ce répertoire à votre chemin de recherche (@i{path}). Modifiez, +ou bien créez un fichier @code{.profile} à la racine de votre répertoire +personnel de telle sorte qu'il contienne + +@example +export PATH=$PATH:~/bin +@end example + +Ce fichier doit se terminer par une ligne vide. + +@end enumerate + + +@subsubheading Lancement des scripts + +Les scripts -- aussi bien @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly}, que @command{lilypond} lui-même -- sont inclus dans un +fichier @code{.app} pour MacOS@tie{}X. + +Ces scripts peuvent se lancer directement en ligne de commande : + +@divClass{h-scroll-auto} +@example +@var{chemin/vers}/LilyPond.app/Contents/Resources/bin/lilypond +@end example +@divEnd + +Il en va de même pour les autres scripts de ce répertoire, tels que +@command{lilypond-book} et @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Mention légale + +@divClass{legal} +Tous les logos et images des produits sont des marques déposées ou sont +protégés par le droit d’auteur. + +@logoLegalMacOSX + +@divEnd +@divEnd + + +@node Windows +@unnumberedsec Windows +@translationof Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Paquetages + +@subsubheading Téléchargement + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Pour Windows ME, NT, 2000, XP, Vista, et Windows 7. + +@end itemize + +@subsubheading Installation + +@enumerate + +@item +Faites un double clic sur le fichier téléchargé, puis suivez les +instructions de l'installateur. Nous vous conseillons de conserver les +paramètres proposés par défaut -- options et répertoire d'installation. +À la fin de la procédure, cliquez sur @qq{Terminé}. LilyPond est installé. + +@end enumerate + +@subsubheading Désinstallation + +Pour désinstaller LilyPond, vous pouvez au choix : + +@enumerate + +@item +À partir du répertoire LilyPond présent dans le menu @qq{Démarrer}, +cliquer sur l'icone @qq{Supprimer}. Cliquez ensuite sur le bouton +@qq{Terminé} une fois la désinstallation effectuée. + +@item +À partir du gestionnaire de programmes accessible depuis le Panneau de +configuration, choisissez LilyPond, puis prenez l'option @qq{Supprimer}. +Cliquez ensuite sur le bouton @qq{Terminé} une fois la désinstallation +effectuée. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Compilation d'un fichier + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Lancement en ligne de commande + +@warning{Si vous préférez l'interface graphique, ne tenez pas compte de +ce qui suit.} + +@subsubheading Windows et la ligne de commande + +@ignore +CHECK: check the following descriptions. +I don't have English version of Windows. +@end ignore + +Le moyen le plus pratique d'utiliser les programmes de LilyPond est +d'ajouter à la variable d'environnement @qq{path} le chemin vers le +répertoire contenant les exécutebles de LilyPond. + + +@enumerate +@item +Ouvrez le panneau de configuration et accédez aux @qq{Propriétés +système}. Dans l'onglet @qq{Avancé}, actionnez le bouton +@qq{Variables@tie{}d'environnement}. + +@item +Dans la liste des variables système, sélectionnez @qq{Path} et cliquez +sur le bouton @qq{Modifier}. Dans la fenêtre qui s'est ouverte, ajoutez +aux @qq{Valeurs de la variable} le chemin au répertoire contenant les +fichiers exécutables de LilyPond, comme suit : + +@example +[@var{chemins déjà définis}];@var{RÉP}\LilyPond\usr\bin +@end example + +@warning{@var{RÉP} sera en règle générale @code{C:@bs{}Program Files}.} + +@noindent +puis cliquez le bouton @qq{OK} pour fermer la fenêtre. + +@end enumerate + +@subsubheading Lancement des exécutables + +Les exécutables de LilyPond -- tels que lilypond, lilypond-book et +convert-ly entre autres -- peuvent se lancer en ligne de commande : + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Mention légale + +@divClass{legal} +Tous les logos et images des produits sont des marques déposées ou sont +protégés par le droit d’auteur. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Sources +@unnumberedsec Sources +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{Nous vous @strong{déconseillons} de compiler LilyPond par +vous-même ; les versions pré-compilées contiennent tout ce dont un +utilisateur a besoin.} + +@divClass{column-left-bottom} +@subheading Archive des sources + +@downloadStableSource-fr{} + +L'intégralité des versions, récentes ou non, est accessible sur notre +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, site de +téléchargement}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Instructions de compilation + +Les instructions permettant de compiler LilyPond sont répertoriées dans +@rcontrib{Compiling LilyPond}. + +@divEnd + + +@node Anciennes versions +@unnumberedsec Anciennes versions +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Toutes les versions + +L'intégralité des versions, récentes ou non, est accessible sur notre +@uref{http://download.linuxaudio.org/lilypond/binaries/, site de +téléchargement}. + +@divEnd + + +@node GPL +@unnumberedsec GPL + +@divClass{column-center-top} +@subheading Licence logicielle +@translationof GPL + +GNU LilyPond est distribué selon la +@ref{GPL,Licence Publique Générale GNU GPL}. Pour une introduction à +cette licence, et les raisons qui nous ont fait l'adopter, lisez +@ref{Liberté}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd + + diff --git a/Documentation/fr/web/introduction.itexi b/Documentation/fr/web/introduction.itexi new file mode 100644 index 0000000000..e8a2ae4740 --- /dev/null +++ b/Documentation/fr/web/introduction.itexi @@ -0,0 +1,1308 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682 + + 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 Translators: Gauvain Pocentek, Jean-Charles Malahieude, John Mandereau +@c Translation checkers: Jean-Charles Malahieude + +@node Introduction +@unnumbered Introduction +@translationof Introduction + +@divClass{column-center-top} +@subheading Notre objectif + +@imageFloat{flat-design,png,right} + +L'inspiration pour LilyPond provient de deux musiciens qui s'étaient +lassés de l'aspect fade et ennuyeux des partitions musicales produites +avec un ordinateur. Tous les musiciens préfèrent lire de belles +partitions de musique, pourquoi donc les programmeurs ne +développeraient-ils pas un logiciel pouvant en produire@tie{}? + +C'est justement ce que fait LilyPond : ce logiciel grave de la musique +selon le meilleur de la tradition typographique avec un minimum de +bricolage. Ne perdez pas de temps à ajuster l'espacement, déplacer des +symboles un par un ou remodeler des liaisons. Vous impressionnerez vos +amis et collègues avec des partitions soignées@tie{}! + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Ce que LilyPond sait faire + +@itemize + +@item +@ref{Fonctionnalités} : de quoi LilyPond est capable. + +@item +@ref{Exemples} : je veux voir des partitions ! + +@item +@ref{Liberté} : LilyPond est un logiciel libre. + +@item +@ref{Contexte} : notre esthétique de la gravure informatisée. + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading Ceux qui utilisent LilyPond + +@itemize + +@item +@ref{Productions} : cas d'utilisation de LilyPond. + +@item +@ref{Témoignages} : que disent les gens sur LilyPond ? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading LilyPond en action + +@itemize + +@item +@ref{Entrée sous forme de texte} : vous écrivez de la musique comme du +@emph{texte} ? + +@item +@ref{Facilités d'édition} : autres façons de travailler avec LilyPond. + +@end itemize +@divEnd + +@divEnd + +@c Les traductions ne se compilent pas encore au format Info, il est +@c donc inutile de traduire la colonne de droite du menu suivant. -JM +@divClass{hide} +@menu +* Fonctionnalités:: What can LilyPond do? +* Exemples:: I want to see some music! +* Liberté:: Freedom and the GPL. +* Contexte:: Computational aesthetics. +* Productions:: Real-life use of LilyPond. +* Témoignages:: What do people say about it? +* Entrée sous forme de texte:: You write music as text?! +* Facilités d'édition:: Other ways of working with LilyPond. +@end menu +@divEnd + + + +@node Fonctionnalités +@unnumberedsec Fonctionnalités +@translationof Features + + +@subheading Élégance + +@subsubheading Excellente gravure de la musique classique + +@imageFloat{flat-design,png,right} + +L'intérêt d'utiliser LilyPond est de produire des partitions élégantes +et fonctionnelles, c'est-à-dire à la fois agréables et faciles à lire. +La communauté des développeurs a consacré des milliers d'heures à +construire ce puissant logiciel. Tous les détails de style, la +conception des polices et les algorithmes ont été inspirés des +meilleures gravures manuelles de partitions. Les partitions produites +par LilyPond ont le même aspect robuste, équilibré et élégant que les +partitions les mieux gravées avec des méthodes traditionnelles. Pour +plus de détails, consultez notre @ref{Essai}. + + +@subsubheading Moins de bricolage + +Perdez moins de temps à retoucher la mise en page. En effet, LilyPond +tend à déterminer la meilleure mise en page dès le départ, en +déterminant l'espacement, les sauts de système et de page, afin de +produire une mise en page compacte et homogène. Le logiciel résout les +collisions entre paroles, notes et accords, et calcule la +courbure des liaisons, tout cela automatiquement@tie{}! + + +@divEnd + +@divClass{color2} +@subheading Simplicité d'utilisation + +@imageFloat{lilypond-book,png,right} + +@subsubheading Entrée sous forme de texte + +LilyPond prend en entrée du texte brut, que vous pouvez écrire dans +votre éditeur de texte préféré, rapidement et confortablement. Vous +pouvez oublier les prises de tête avec la souris. Le fichier texte +d'entrée contient toute la description de la musique à graver@tie{}; +ainsi, il n'est pas nécessaire de se rappeler de complexes séquences de +commandes, il suffit de relire du texte d'entrée existant pour retrouver +ce que l'on a déjà réussi à faire. + + +@subsubheading Association de musique et texte + +Introduisez des fragments de partition musicale sans avoir besoin de +copier-coller manuellement des images. Intégrez de façon transparente +des partitions dans un document @LaTeX{} ou HTML, ou ajoutez des +partitions dans un document OpenOffice.org. + + +@subsubheading Accessibilité + +Le format de fichier de LilyPond, qui décrit la musique sous forme de +texte, permet également son utilisation par des utilisateurs ayant +certains handicaps physiques. Les personnes ne pouvant saisir au +clavier ou contrôler une souris peuvent utiliser la reconnaissance vocale +pour éditer des fichiers LilyPond. Même des personnes aveugles +peuvent utiliser des outils de lecture d'écran pour écrire des fichiers +LilyPond, ce qui est quasiment impossible avec les logiciels de gravure +musicale fonctionnant avec une interface graphique. + + +@subsubheading Conception extensible + +Tous les paramètres peuvent être changés pour adapter le résultat à vos +goûts typographiques. Si cela ne suffit pas, le langage de script +intégré Scheme, un dialecte du puissant langage LISP, offre beaucoup de +possibilités. Les paramètres, variables et fonctions sont tous +documentés dans les manuels de référence. + + +@divEnd + +@divClass{color3} + +@subheading Environnement + +@imageFloat{frescobaldi-lilypond-editor-small,png,right} + +@subsubheading Un logiciel libre + +LilyPond peut être téléchargé gratuitement ! Si si, c'est vrai. Vous +pouvez le récupérer depuis la page de téléchargement. + +Ce logiciel est également et avant tout libre : son code source est +également disponible, et il est possible sous certaines conditions de le +copier, de le modifier et de le redistribuer. Êtes-vous irrité par un +bogue, ou désirez-vous une fonctionnalité@tie{}? Ajoutez-la vous-même, +ou payez quelqu'un d'autre pour le faire. + + +@subsubheading Excellent support + +LilyPond fonctionne sur les plateformes les plus courantes : GNU/Linux, +MacOS@tie{}X et Windows. Le logiciel est accompagné d'une large +documentation et des centaines d'exemples. Une communauté active répond +aux questions via les listes d'utilisateurs, en particulier la liste +anglophone et la liste francophone, tandis que l'équipe de développement +assure une prompte résolution des problèmes. + + +@subsubheading Éditeurs avancés + +Plusieurs développeurs, eux-même utilisateurs de LilyPond, ont créé des +outils spécifiques dans le but de travailler plus rapidement et avec +plus d'efficacité leurs fichiers LilyPond. Quelques exemples sont +répertoriés à la rubrique @ref{Facilités d'édition}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Et ensuite? + +Si vous n'êtes toujours pas convaincu(e), jetez un coup d'œil à quelques +@ref{Exemples}. Si vous êtes déjà décidé(e) à essayer LilyPond, nous +vous invitons à lire d'abord @ref{Entrée sous forme de texte}. +@divEnd + + + +@node Exemples +@unnumberedsec Exemples +@translationof Examples + +LilyPond est un outil puissant et flexible, adapté à beaucoup de styles +et systèmes de notation. Parcourez notre galerie d'exemples et +inspirez-vous en@tie{}! + + +@newsItem +@subsubheading Musique classique + +Cette pièce pour orgue de J.S. Bach est représentative d'un travail +basique de gravure avec LilyPond. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Notation complexe + +Cet exemple extrait de @emph{Goyescas} de Enrique Granados montre +quelques-unes des fonctionnalités de gravure les plus avancées, +notamment les liens coudés, les hampes traversant la portée, et les +lignes de suivi de voix. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Musique ancienne + +LilyPond prend également en charge plusieurs types de notation ancienne, +en particulier grégorienne comme le montre cet exemple. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Musique moderne + +Certains compositeurs de musique contemporaine apprécient la capacité de +LilyPond à s'adapter à des notations personnalisées. L'exemple suivant +est extrait de @emph{Čáry}, pour flûte basse seule, de Trevor Bača. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Création efficace et flexible de matériels d'exécution + +Divers matériels d'exécution -- conducteur, parties séparées -- +peuvent être créés à partir du même code source LilyPond. Voici un +extrait de la gravure par +@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux} du @emph{Giulio +Cesare} de Händel, avec le conducteur, une réduction à deux portées +vocales, et une partie de violon. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Tablature + +LilyPond prend en charge la notation de tablature, qui peut être +personnalisée pour n'importe quel instrument utilisant ce type de +notation. La notation des tablatures est calculée automatiquement par +LilyPond en fonction des hauteurs de notes. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Diagrammes de Schenker + +La notation musicale standard peut être grandement personnalisée, au +point de créer un diagramme d'analyse schenkérienne comme celui-ci, créé +par Kris Schaffer pour un article du +@uref{http://www.linuxjournal.com/article/8364 , Linux Journal}. Les +couleurs ont été ajoutés pour plus de visibilité. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Musique vocale + +LilyPond excelle dans la gravure de toutes sortes de musique vocale, du +chant sacré à l'opéra. Voici un motet médiéval qui présente quelques +particularités. La voix de ténor est écrite dans une métrique +différente de celle des autres voix, mais doit tout de même se +synchroniser avec elles. LilyPond gère élégamment cette difficulté. +Remarquez également les @emph{incipits} avec des clés de style Vatican, +les hampes barrées indiquant des notes plicaturées, et les crochets de +ligature sur certains groupes de notes. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Applications pédagogiques + +LilyPond est également adapté à une utilisation à des fins +pédagogiques. Voici en exemple un exercice de contrepoint. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Musique pop + +Il est facile de créer des partitions de chansons pop avec la mélodie, +les paroles, les chiffrages d'accords et les diagrammes de frettes. +Vous pouvez voir des exemples de tels diagrammes qui sont prédéfinis, +mais il est possible de les personnaliser dans presque tous les cas. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Grands projets + +LilyPond excelle également dans les grands projets tels qu'un opéra ou +une œuvre pour grand orchestre symphonique. De plus, l'entrée sous +forme de texte offre une meilleure accessibilité -- cet exemple est +extrait de l'œuvre de Hu Haipeng, compositeur aveugle. + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading Et ensuite ? + +Vous n'êtes toujours pas convaincu(e) ? LilyPond est un logiciel libre, +vous garantissant de la @ref{Liberté}. Si vous êtes déjà décidé(e) à +utiliser LilyPond, nous vous recommandons de lire d'abord +@ref{Entrée sous forme de texte}. +@divEnd + + +@node Liberté +@unnumberedsec Liberté +@translationof Freedom + +@divClass{column-center-top} +@subheading Un logiciel libre + +@uref{http://www.gnu.org/, GNU} LilyPond est développé par une +communauté de passionnés. Ce logiciel est distribué selon la +@ref{GPL, Licence Publique Générale GNU GPL} et la +@ref{FDL, Licence Libre de Documentation GNU FDL}, accordant à tous la +liberté de le corriger, le modifier et étendre ses fonctionnalités. La +gravure musicale de qualité ne devrait pas vous coûter des centaines +d'euros dépensés pour acheter une licence de logiciel@tie{}! +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading Les bénéfices pour les utilisateurs + +@itemize + +@item +Aucun coût d'essai : téléchargez-le et essayez-le sans aucune +restriction@tie{}! Qu'avez-vous à perdre@tie{}? + +@item +Partage : si vous appréciez ce logiciel, donnez-en une copie à vos amis, +professeurs, étudiants et collègues@tie{}! + +@item +Code source disponible : si vous êtes curieux du fonctionnement interne +de LilyPond, vous avez le droit de le connaître exactement grâce à la +disponibilité du code source et de toute l'infrastructure de +compilation. + +@item +Extensible : vous pouvez ajouter des fonctionnalités, corriger des +bogues et modifier le fonctionnement. Si vous n'êtes pas un +programmeur, vous pouvez embaucher quelqu'un pour le faire à votre +place. + +Cette possibilité de modifier le logiciel peut ne pas sembler +primordiale pour un simple musicien utilisateur. Elle est cependant +potentiellement importante pour un compositeur exigeant sur la notation, +une entreprise ou un milieu de recherche. + +@item +Indépendance par rapport aux éditeurs de logiciel : si une entreprise +fait faillite, qu'advient-il des logiciels et fichiers dans le format de +ces logiciels que cette entreprise développait et éditait@tie{}? Ce +n'est pas un problème avec LilyPond@tie{}; même si toute l'équipe de +développement laissait ce logiciel à l'abandon, il serait encore +légalement et effectivement disponible afin d'être copié, modifié et +distribué. + + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading Pourquoi les développeurs de LilyPond @qq{donnent-ils} leur travail gratuitement ? + +La plupart d'entre nous conçoivent le développement de LilyPond comme un +passe-temps ou un travail bénévole, c'est pourquoi cette question serait +mieux formulée ainsi@tie{}: pourquoi des gens contribuent bénévolement à +LilyPond@tie{}? + +@itemize + +@item +Pour le plaisir : travailler pour un but particulier peut être motivant, +d'autant plus que le travail d'équipe apporte de l'entraide@tie{}! + +@item +Des objectifs communs : nous voulons tous produire des partitions de +musique de qualité, mais peu de gens ont l'expertise -- et personne n'a +le temps@tie{}! -- de créer un logiciel qui gère toutes les situations. +En travaillant tous ensemble -- l'un améliore le code des ligatures +automatiques, un autre corrige le galbe des liaisons, et un troisième +écrit de la documentation expliquant l'utilisation de ces +fonctionnalités -- nous pouvons tendre bien plus vite vers ce but. + + +@item +@qq{Culture du don} : le mouvement du logiciel libre a créé de nombreux +grands projets logiciels tels que @uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox} et +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Ayant bénéficié de +ces projets en tant qu'utilisateurs, certains souhaitent donner en +retour à la communauté en contribuant à un logiciel libre. + +@item +Expérience professionnelle : la contribution à des projets de logiciel +libre est une excellente manière de pratiquer la programmation, +l'édition de documentation et la conception. Cette expérience a aidé +quelques développeurs à décrocher un emploi ou une bourse d'études. + + +@end itemize + +@divEnd +@divEnd + +@divClass{column-center-bottom} +@subheading Et ensuite ? + +Vous n'êtes toujours pas convaincu(e) ? Lisez notre essai exposant nos +conceptions de la typographie musicale à la section @ref{Contexte}. Si +vous êtes déjà décidé(e) à utiliser LilyPond, nous vous recommandons de +lire d'abord @ref{Entrée sous forme de texte}. +@divEnd + + +@node Contexte +@unnumberedsec Contexte +@translationof Background + +@divClass{column-center-top} +@subheading Essai sur la gravure musicale informatisée + +Nous vous proposons un essai dans le but de vous présenter nos +conceptions de la typographie musicale informatisée. + +Si vous voulez une introduction rapide à LilyPond et préférez l'essayer +au plus vite, la lecture de l'essai serait trop longue. Si toutefois +vous préférez le lire maintenant, allez à la section @ref{Essai}. +@divEnd + +@divClass{column-center-bottom} +@subheading Et ensuite ? + +Vous n'êtes toujours pas convaincu(e) ? Découvrez quelques +@ref{Productions} de nos utilisateurs et sources de partitions de +musique. Si vous êtes déjà décidé(e) à utiliser LilyPond, nous vous +recommandons de lire d'abord @ref{Entrée sous forme de texte}. +@divEnd + + +@node Productions +@unnumberedsec Productions +@translationof Productions + +@divClass{column-left-top} +@subheading Concerts + +Des partitions réalisées avec LilyPond ont été utilisées pour des +concerts et représentations un peu partout dans le monde, nous n'en +mentionnons que quelques-uns. + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire Étrangère}, un opéra de +@uref{http://valentin.villenave.net/,Valentin Villenave}, livret +de @uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis Trondheim}, +dont la première a eu lieu le 1er@tie{}février@tie{}2009 en France à +@uref{http://www.orchestre-montpellier.com/, l'Opéra de Montpellier}. + +@item +L'exécution d'@emph{Armide} de Lully, les 15 et 16@tie{}mai@tie{}2009, à +Houston, Texas, par +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}, +avec un matériel gravé par +@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}. + +@item +Des passages instrumentaux @emph{d'Hippolyte et Aricie} de Rameau ont +été joués le 8@tie{}mai@tie{}2009 en l'église Saint-James de Manhattan, +par Frederick Renz et son ensemble +@uref{http://www.earlymusicny.org/, Early Music New York}, avec des +partitions gravées par Nicolas Sceaux. + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Partitions publiées + +@divClass{keep-bullets} +@itemize + +@item +Le @uref{http://www.mutopiaproject.org/index.html, projet Mutopia} +propose en téléchargement libre des partitions de plus de 1@tie{}500 +pièces de musique classique@tie{}; c'est la plus grande vitrine de +partitions LilyPond. + +@c don't make this "Mutopia" a link, since that looks silly. +@item +@uref{http://etudeapp.com, Etude}, @qq{sheet music on steroids} est une +application pour iPhone qui affiche des partitions pour piano générées +par LilyPond, dont certaines proviennent de Mutopia. Cette application +comporte un clavier virtuel qui indique aux pianiste lecteur débutant +quelle touche enfoncer. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing} propose des +partitions de musique sacrée de grande qualité, disponibles +immédiatement en téléchargement ou sous forme de partition imprimable. + +@item +@uref{http://http://www.shadylane.fr/, The Shady Lane Publishing}, +est un @qq{micro-éditeur de partitions musicales} qui a pour but de +promouvoir une nouvelle forme de pratique économique, plus proche des +musiciens et amoureux de la musique. + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading Et ensuite ? + +Vous n'êtes toujours pas convaincu(e) ? Lisez quelques +@ref{Témoignages} de nos utilisateurs. Si vous êtes déjà décidé(e) à +utiliser LilyPond, nous vous recommandons de lire d'abord +@ref{Entrée sous forme de texte}. +@divEnd + + +@node Témoignages +@unnumberedsec Témoignages +@translationof Reviews + +@divClass{column-left-top} +@subheading Revue de presse + +@divClass{keep-bullets} +@itemize + +@item +Mai 2010 + +Peter Kirn publie, sur le site Create Digital Music, une +@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,critique de LilyPond}. +Son approche reste objective et il invite à essayer LilyPond pour la +qualité de son rendu. + +@item +Septembre 2009 + +Le magazine allemand LinuxUser publie un +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, article au sujet de LilyPond}. + +@item +Août 2009 + +Sur le site +@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org}, +Ann Drinan présente les appréciations de deux bibliothécaires +d'orchestre qui évoquent les possibilités ouvertes par +l'informatique pour la maintenance de leurs fonds. + +@item +Juin 2009 + +Dans la revue annuelle de la Fédération Nationale des Associations +de Parents d'Éleves de Conservatoires, le compositeur français +Valentin Villenave, également contributeur LilyPond, consacre un +@uref{http://news.lilynet.net/Free-Music-Now, article} aux licences +libres, et au rôle primordial que peut jouer LilyPond afin d'ouvrir +à tous l'accès à la musique écrite. + +@item +Février 2008 + +Sur @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, +son site personnel}, Andrew Hawryluk propose une comparaison entre +Finale et LilyPond, tant au niveau de leurs caractéristiques générales +que de leurs capacités respectives en matière de gravure. Un second +article analyse la gravure du sixième prélude pour piano de +Rachmaninoff, se basant sur une édition de grande qualité gravée à la +main. + +@item +Juin 2006 + +@uref{http://distrowatch.com,DistroWatch} récompense LilyPond et +@uref{http://distrowatch.com/weekly.php?issue=20060605,écrit}@tie{}: +@qq{Mesdames et Messieurs, nous avons l'immense plaisir de vous annoncer +que, à la demande de nombreux lecteurs, les récompenses du DistroWatch +de mai@tie{}2006 sont attribuées à LilyPond (190@tie{}@euro{}) et Lua +(250@tie{}US$).} + +@item +Décembre 2005 + +@uref{http://linuxjournal.com,Linux Journal} publie un article sur de +stupéfiants graphiques [d'analyse Schenkerienne] avec GNU LilyPond ( +@uref{http://www.linuxjournal.com/article/8364,(Stunning [Schenker] +Graphics with GNU LilyPond)}, cité en couverture. Il s'agit d'un article +détaillé mais pratique, proposant des extraits musicaux édités avec +LilyPond. Son auteur, Kris Shaffer, note que @qq{GNU LilyPond génère +des beaux graphiques, reléguant au second plan ses alternatives +commerciales.} + +@item +20 août 2005 + +Le journal belge De Standaard enquête sur les motivations des auteurs de +logiciels libres dans un article intitulé +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} (Libre partage des connaissances) +dans son @qq{DS2 bijlage}. L'exemple de LilyPond illustre cet article, +qui cite également des extraits d'un entretien par courriel avec Jan +Nieuwenhuizen. Il s'agit de la première citation de LilyPond dans la +presse généraliste. + +@item +Juin 2005 + +Un article français sur LilyPond 2.6 est paru sur +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +Octobre 2004 + +Les éditeurs de @emph{Computer!Totaal}, magazine informatique +hollandais, @uref{http://lilypond.org/web/images/computer-totaal.jpeg, +décrivent LilyPond} dans leur numéro d'octobre 2004 comme@tie{}: @qq{un +merveilleux logiciel libre [@dots{}] Les partitions qu'il génère sont +extrêmement belles [@dots{}] Un système très puissant permettant +presque tout.} + +@item +Juillet--août 2004 + +Dave Phillips a écrit un article d'introduction à LilyPond pour le +@uref{http://linuxjournal.com,Linux Journal}@tie{}: @emph{At the +sounding edge: LilyPond}, +@uref{http://www.linuxjournal.com/article/7657, première} et +@uref{http://www.linuxjournal.com/article/7719, deuxième} partie. + +@item +Mars 2004 + +Chris Cannam +@uref{http://www.all-day-breakfast.com/cannam/linux-musician/lilypond.html, s'est entretenu avec Han-Wen Nienhuys et Jan Nieuwenhuizen} sur +linuxmusician.com (site aujourd'hui disparu). Cette interview a +également été citée sur +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, slashdot story}. + +@item +Février 2004 + +La chanteuse de Jazz Gail Selkirk a écrit sur son +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +plongeon dans la Mare-aux-Nénuphars}@tie{}: @qq{@dots{} vous pouvez +créer des conducteurs et du matériel pour orchestre, et le résultat peut +être étonnant.} @uref{http://www.computermusic.co.uk/, Computer Music Special}, +issue CMS06. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading Des utilisateurs + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, premier violoncelle, Philharmonique de New York + +@qq{@dots{} J'avais écrit avec Encore quelques pièces pour violoncelle + solo. Je les ai imprimées avec LilyPond avant de les soumettre à + Schirmer en vue de les publier. J'en mettrais ma main à couper que + leur édition ne sera jamais aussi pointue que la mienne@tie{}!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, professeur de composition, Musikhochschule Freiburg + +@qq{Bien que ma maîtrise [de LilyPond] soit pour l'instant imparfaite, + je suis néanmoins @emph{très} impressionné. J'ai utilisé ce programme + pour un motet de Josquin Desprez en notation mensurale et je dois dire + que lilypond dépasse de loin tous les autres programmes de notation + tant au niveau de la rapidité que de l'ergonomie et du résultat@tie{}!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, compositeur (Bruxelles) + +@qq{[Après la première répétition d'orchestre,] j'ai reçu de nombreux + compliments concernant la qualité des partitions. Plus important, + bien que l'apparence des partitions puisse être améliorée par le biais + de nombreuses commandes, c'est le résultat d'un code basique, sans + retouches, que les musiciens ont utilisé.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, compositeur (Toronto, Canada) + +@qq{Merci et encore merci à l'équipe des développeurs pour leur + admirable travail. Je n'ai jamais rien vu qui approche le résultat que + j'obtiens avec Lilypond — je suis absolument convaincu que mes besoins + en terme d'édition musicale seront largement satisfaits par cette + superbe application. [@dots{}] une partition de base générée par + Lilypond [@dots{}] a meilleure mine que la plupart des publications + @qq{professionnelles} auxquelles je l'ai comparée, aussi bien de chez + Warner Bros., que même les plus récentes productions des @qq{bonnes + vieilles maisons}. [@dots{}]} + +@qq{Faites donc mieux que Finale/Sibelius/Igor et consorts@tie{}!!!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, programmeur en chef du projet @uref{http://www.rosegardenmusic.com/,RoseGarden} + +@qq{Lilypond est clairement le ténor brillantissime [de la gravure musicale +de qualité].} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} + +@qq{La façon dont on saisit la musique pour LilyPond me fait penser +d'une façon plus musicale -- il m'est arrivé plusieurs fois de buter sur +la façon d'indiquer à Lily comment graver quelque chose, et de réaliser +ensuite que même si j'arrivais à obtenir la notation voulue par le +compositeur, celle-ci serait difficile à lire. LilyPond facilite ainsi +mon double travail de gravure et d'édition.} + +@qq{J'ai utilisé LilyPond exclusivement pour mes affaires débutantes +d'édition. Tous les compositeurs sans aucune exception ont été +stupéfaits par la qualité de la gravure en apercevant les épreuves de +prépublication de leur musique. Bien que cela me revienne en partie -- je +passe beaucoup de temps à retoucher la gravure, notamment les liaisons et +en particulier dans les accords -- LilyPond me fournit un excellent point +de départ, une interface très intuitive, et la possibilité de modifier +absolument n'importe quoi si je prend le temps. Je suis convaincu +qu'aucun produit commercial ne peut approcher cela.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, trombone basse, Orchestre symphonique d'Islande + +@qq{LilyPond est tout simplement génial [@dots{}] Plus j'en + apprends sur LilyPond, plus je l'apprécie@tie{}!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, joueur de guitare électrique (si, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, il y a un rapport}) + +@qq{Je suis super impressionné par LilyPond [@dots{}]} + +@qq{C'EST LE MEILLEUR PROGRAMME DE TOUS LES TEMPS !!!} + +@qq{Un GRAND merci à tous pour votre dur travail et votre +investissement@tie{}!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, contributeur au @uref{http://www.mutopiaproject.org/,projet Mutopia} + +@qq{J'avais une sorte de passion conflictuelle avec lui. Passion parce + que la première partition que j'en ai vu m'a vraiment émerveillé ! Le + descriptif de LilyPond ne dit pas tout de ses capacités, il est trop + modeste@tie{}! [@dots{}] au fur et à mesure que LilyPond s'améliore, et + que je regarde de plus près comment cela se passe avec Scheme, je suis + de moins en moins frustré. En fait, ce que je veux dire, c'est un + grand merci de nous fournir LilyPond, c'est vraiment un bon + programme.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, Chef au Théâtre de Coblence (Allemagne) et éminent hacker GNU + +@qq{À vrai dire, LilyPond fait un boulot des plus étonnants@tie{}!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, développeur de @uref{http://jackaudio.org/, JACK} et @uref{http://www.ardour.org/, Ardour} + +@qq{Je considère [que LilyPond est] un programme incroyable, et qu'il + produit des résultats vraiment merveilleux. Après avoir lu une + interview à son sujet l'an dernier, j'ai déliré avec plusieurs de mes + amis sur son potentiel.} +@divEnd + +@divClass{testimonial-item} +@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, Dr Mika Kuuskankare}, chercheur à la @uref{http://siba.fi, Sibelius Academy Finland}, compositeur et auteur de Expressive Notation Package (ENP) + +@qq{J'ai le plus grand respect pour LilyPond, ses concepteurs et tous +ceux qui en assurent la maintenance, d'autant plus que je sais, de par +ma propre expérience, comment cela peut être difficile pour ce type de +logiciel.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, musicien, graveur professionnel et utilisateur de SCORE pendant longtemps + +@qq{J'adresse mes remerciements les plus chaleureux à tous ceux qui +contribuent à ce projet. Bien qu'utilisateur chevronné de SCORE pour +différents éditeurs dans les années 1990, je considère à présent que +LilyPond me permet d'obtenir exactement ce que je veux sur une page, et +tout spécialement quand cela sort des standards.} +@divEnd + +@divEnd + +@divClass{column-center-bottom} +@subheading Et ensuite ? + +Lisez @ref{Entrée sous forme de texte}. +@divEnd + + + +@node Entrée sous forme de texte +@unnumberedsec Entrée sous forme de texte +@translationof Text input + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading @qq{Compilation} de la musique + +@imageClickable{nereid-shot-small,png, (cliquez pour agrandir), nereid-shot,png, right} + +LilyPond est un système de @emph{compilation} : il opère sur un fichier +texte contenant les notes. Le résultat produit en sortie peut être vu à +l'écran ou imprimé. De ce point de vue, LilyPond est plus proche d'un +langage de programmation qu'un logiciel d'édition de partition avec une +interface graphique. + +On n'écrit pas la musique en glissant des notes depuis une barre +d'outils et en les plaçant sur une partition se constituant petit à +petit, mais en écrivant du texte qui la décrit. Ce texte est interprété +-- ou @emph{compilé} -- par LilyPond, produisant une belle partition de +musique. + +Cette façon de faire peut demander aux habitués des interfaces +graphiques l'apprentissage d'une nouvelle façon de travailler, mais les +résultats en valent vraiment la peine@tie{}! + +@warning{nous ne présentons ici qu'un rapide aperçu du langage de +LilyPond -- ce n'est pas si compliqué que ça en a l'air@tie{}! Ce n'est pas +la peine de comprendre ces exemples en détail, notre manuel d'initiation +aborde d'une façon progressive tout ceci et bien d'autres choses encore.} + + +@subsubheading C'est simple comme bonjour + +Les notes sont codées sous forme de lettres et de nombres. Les +commandes spéciales commencent par un antislash. + +@imageFloat{text-input-1-annotate-fr,png,center} +@imageFloat{text-input-1-output,png,center} + +Les altérations sont obtenues avec différents suffixes : @code{-is} pour dièse, +@code{-es} pour bémol -- ce sont des noms de note hollandais, d'autres langues +sont disponibles. LilyPond détermine où placer les signes d'altération. + +@imageFloat{text-input-2-annotate-fr,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading Musique pop + +Ajoutez des accords et des paroles pour obtenir une chanson : + +@imageFloat{text-input-pop-annotate-fr,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading Matériel d'orcheste + +Le fichier source contient les notes de la pièce. Le conducteur et les +parties séparées peuvent être réalisés à partir de la même source@tie{}; +ainsi, la modification d'une note se répercute toujours à la fois sur +les parties et le conducteur. Pour pouvoir utiliser la même musique à +plusieurs endroits, celle-ci est stockée dans une variable, c'est-à-dire +qu'on lui attribue un nom. + +@imageFloat{text-input-parts-both-annotate-fr,png,center} + + +Cette variable est ensuite utilisée dans une partie séparée -- ici +transposée, avec les mesures de silence condensées. + +@imageFloat{text-input-parts-single-annotate-fr,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +La même variable est réutilisée dans le conducteur, ici en sons réels. + +@imageFloat{text-input-score-annotate-fr,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Documentation pour les débutants + +Nous admettons que beaucoup d'utilisateurs trouvent un peu étrange cette +façon de saisir la musique. Pour cette raison, nous avons écrit une +documentation complète d'initiation, à commencer par le manuel +d'@ref{Initiation}. + +S'il-vous-plaît, lisez le manuel d'initiation avant de vous plaindre +de l'existance d'un bogue@tie{}! Il arrive que de nouveaux utilisateurs +pensent que LilyPond fonctionne incorrectement, alors qu'il n'en est +rien et que quelque détail leur a simplement échappé. + +De plus amples informations sont disponibles à la page @ref{Manuels}. + + +@subsubheading Environnements d'édition confortables + +@imageClickable{lilykde-screenshot-small,png, + (cliquez pour agrandir),lilykde-screenshot,png,right} + +L'objectif principal de LilyPond est de graver des partitions de qualité +optimale, et le développement d'une interface utilisateur graphique nous +détournerait de cet objectif. Cependant, d'autres projets visent à +faciliter l'édition de fichiers LilyPond. + +Certains environnements d'édition incluent la coloration de la syntaxe, +le complètement automatique des commandes, et des modèles prédéfinis. +D'autres programmes proposent même une interface utilisateur graphique +(GUI) qui permet la manipulation directe des objets graphiques d'une +partition. Pour plus de détails, voir @ref{Facilités d'édition}. + + +@divClass{column-center-bottom} +@subheading Et ensuite ? + +Vous êtes désormais prêt(e) à @ref{Téléchargement,télécharger LilyPond}. +Si vous n'êtes toujours pas convaincu(e), examinez les +@ref{Facilités d'édition}. + +@divEnd + + +@node Facilités d'édition +@unnumberedsec Facilités d'édition +@translationof Easier editing + + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (cliquez pour agrandir),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +Greffon de l'éditeur de texte @uref{http://www.jedit.org,jEdit}, +LilyPondTool est l'un des outils d'édition en mode texte le plus riche +pour éditer des partitions LilyPond. Ses fonctionnalités comprennent un +assistant de création de partition avec prise en charge des paroles, +pour commencer plus facilement à saisir des partitions, et une +visonneuse de PDF intégrée avec un excellent pointer-cliquer. + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (cliquez pour agrandir),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi est un éditeur de texte dédié à LilyPond, avec visionneuse +PDF intégrée, un assistant de création de partition et beaucoup de +fonctionnalités d'édition. Il repose sur les bibliothèques KDE@tie{}4 +et fonctionne actuellement sur toutes les variantes d'Unix dont GNU/Linux. + +@divEnd + +@divClass{column-center-top} +@subheading Denemo + +@imageClickable{screenshot-denemo-small,png, + (cliquez pour agrandir),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo est un éditeur graphique qui génère du code source LilyPond et +peut jouer un rendu sonore. Il permet à l'utilisateur de voir le code +source LilyPond en même temps que la vue graphique. Certains éléments +ajoutés aux notes ou accords et qui sont propres à LilyPond seront +intégrés dans votre fichier Denemo, ce qui vous permettra de poursuivre +leur édition en mode graphique. + +Un déplacement du curseur dans le fichier LilyPond sera répercuté dans +la vue graphique et toute erreur de syntaxe dans votre code sera mise en +évidence. + + +@divEnd + +@divClass{column-center-top} +@subheading Emacs et Vim + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs est un éditeur de texte avec des fontionnalités spécifiques pour +un grand nombre de langages de programmation et de documents. C'est un +éditeur très extensible, qui peut être utilisé comme un environnement de +développement intégré (IDE). Il existe un @emph{mode LilyPond} qui offre +quelques fonctionnalités spécifiques pour travailler avec des fichiers +source LilyPond. L'un des développeurs a même écrit un mode majeur pour +Emacs, @uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}. + +@uref{http://www.vim.org} + +Vim, éditeur de texte minimal, est une extension de l'ancien éditeur +Unix @command{vi}. Il est également extensible et configurable. + +En règle générale, si vous n'êtes pas déjà familier avec Emacs ou Vim, +alors vous préfèrerez peut-être utiliser un autre éditeur pour +travailler sur des fichiers source LilyPond. + +Vous trouverez plus d'information quant au paramétrage d'Emacs et Vim au +chapitre @rprogram{LilyPond et les éditeurs de texte}. + +@divEnd + +@ignore these may not need to be here at all, as they are purely +MacOS scripts. + +@divClass{column-center-top} +@subheading Autres + +@subsubheading TexShop + +@sourceimage{logo-macosx,,,} + +@uref{http://www.uoregon.edu/~koch/texshop} + +L'éditeur TexShop pour MacOS@tie{}X peut être muni d'une extension pour +lancer LilyPond, @command{lilypond-book} et @command{convert-ly}, +disponible à +@example +@uref{http://www.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts} +@end example + +@subsubheading TextMate + +@sourceimage{logo-macosx,,,} + +TextMate dispose d'un paquetage complémentaire pour LilyPond. Pour +l'installer, lancez les commandes suivantes@tie{}: + +@example +mkdir -p /Library/Application\ Support/TextMate/Bundles +cd /Library/Application\ Support/TextMate/Bundles +svn co http://svn.textmate.org/trunk/Bundles/LilyPond.tmbundle/ +@end example + +@divEnd +@end ignore + + + +@divClass{column-center-top} +@subheading Programmes qui exportent du code LilyPond + + +@subsubheading Éditeurs de partition, tablature et MIDI + +@itemize +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}, séquenceur audio et +MIDI, comporte aussi un éditeur pour portée unique. + +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, +basé sur la bibliothèque @uref{http://cairographics.org, Cairo}, dispose +d'une fonction expérimentale d'export pour LilyPond. + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar} est un éditeur de +tablatures multi-pistes. Il permet d'afficher tablatures et partitions, +et il peut exporter du code LilyPond. + +@item +@uref{http://musescore.org,MuseScore} produit du code LilyPond. + +@item +@uref{http://canorus.org,Canorus} peut également exporter vers LilyPond, +mais est encore au stade de développement beta. Les testeurs sont les +bienvenus. + +@item +@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, un +convertisseur monophonique temps-réel MIDI vers LilyPond. + +@item +@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,NW2LY}, +programme en C#, permet de convertir une chanson écrite avec +@uref{http://www.noteworthysoftware.com/, NoteWorthy} au format LilyPond. + + +@end itemize + +@subsubheading Générateurs de code + +@itemize + +@item +@uref{http://www.projectabjad.org/,Abjad}, API de contrôle +formaliste de partition pour @uref{http://www.python.org/,Python}, +permet aux compositeurs de gérer du code LilyPond complexe. + +@item +@uref{http://strasheela.sourceforge.net,Strasheela} est un système de +composition musicale basé sur le projet +@uref{http://www.mozart-oz.org/,Mozart/Oz}. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, bibliothèque LISP +qui permet de générer de la notation à partir de logiciels de musique. + +@end itemize +@divEnd + +@divClass{column-center-top} + + +@subheading Autres programmes dont le développement est peu actif + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} a été remplacé par +@uref{http://www.frescobaldi.org/,Frescobaldi}. Il reste cependant +disponible en version LilyKDE3 pour KDE@tie{}3.5 et lilypond-KDE4 pour +KDE@tie{}4.1. + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, qui importait +@uref{http://www.musicxml.com/xml.html,MusicXML}, s'est scindé en +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +et @uref{http://canorus.org,Canorus}. + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} permet de saisir +graphiquement des notes. Il fonctionne comme un pavé numérique +permettant de produire de la notation LilyPond. + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Et ensuite ? + +Vous êtes prêt(e) à @ref{Téléchargement,télécharger LilyPond}. + +Vous êtes toujours incrédule ? Beaucoup de compositeurs, musiciens et +chefs ont appris à écrire de la musique dans notre format texte. Des +utilisateurs expérimentés nous font savoir qu'ils parviennent à entrer +une partition LilyPond complète plus rapidement qu'avec un clavier MIDI +ou la souris dans une interface graphique@tie{}! Peut-être souhaitez-vous +relire les @ref{Fonctionnalités}, les @ref{Exemples}, la @ref{Liberté} +donnée par LilyPond, ou revoir les @ref{Témoignages} ou +@ref{Productions} des utilisateurs. De plus, nous expliquons notre +approche de la technique informatique au service de la gravure musicale +dans la partie @ref{Contexte}. + + +@subheading Mentions légales + +@divClass{legal} +Tous les logos et images des produits sont des marques déposées ou +sont protégés par le droit d'auteur. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/fr/web/manuals.itexi b/Documentation/fr/web/manuals.itexi new file mode 100644 index 0000000000..def0a2e94b --- /dev/null +++ b/Documentation/fr/web/manuals.itexi @@ -0,0 +1,610 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 0ab366a101ef8c3439dd8d6ff6c634f70fa5f63b + + 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 Translators: John Mandereau +@c Translation checkers: Jean-Charles Malahieude + +@node Manuels +@unnumbered Manuels +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, détails de \reference\}) +@spanEnd +@end macro + + +@divClass{heading-center} +@ifclear web_version + @heading Documentation pour LilyPond @version +@end ifclear +@ifset web_version + @heading Documentation pour LilyPond @versionStable +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Introduction + +@itemize + +@item +@ref{Entrée sous forme de texte}@tie{}: +LilyPond est un système de gravure musicale @strong{en mode texte}. Si +vous ne savez pas du tout ce que ça veut dire, lisez tout d'abord +ceci@tie{}! + +@item +@ifWebLinks{@manualStableLearningSplitNoName-fr,@rlearningnamed{Top,Initiation}} +une introduction pas-à-pas à LilyPond. +@details{Initiation} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossaire}} +@emph{(lecture optionnelle)} répertoire de définition et de traduction +de termes musicaux, utile en particulier pour connaître les termes +musicaux en anglais. +@details{Glossaire} + +@item +@ifWebLinks{@manualStableEssaySplitNoName-fr,@ressaynamed{Top,Essai}} +@emph{(lecture optionnelle)} essai sur la conception des processus de +gravure d'après l'esthétique et la technique de la gravure +traditionnelle avec poinçons et plaques de plomb. +@details{Essai} + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Utilisation courante + +@itemize + +@item +@ifWebLinks{@manualStableNotationSplitNoName-fr,@rusernamed{Top,Notation}} +partie la plus importante de la documentation, ce manuel fournit toutes +les informations détaillées dont vous aurez besoin en matière de notation. +@details{Notation} + +@item +@ifWebLinks{@manualStableUsageSplitNoName-fr,@rprogramnamed{Top,Utilisation}} +présentation des différentes composantes de LilyPond, ainsi que les +particularités de certains systèmes d'exploitation. +@details{Utilisation} + +@item +@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Morceaux choisis}} +courts extraits, trucs, modèles et autres exemples. +@details{Morceaux choisis} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Utilisation ponctuelle + +@itemize + +@item +@ref{FAQ}@tie{}: +la Foire Aux Questions. + +@item +@ref{Web}@tie{}: +ce document. +@details{Web} + +@item +@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Nouveautés}} +changements depuis la dernière version stable. +@details{Nouveautés} + +@item +@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extension}} +programmation avancée d'ajustements et retouches dans LilyPond. +@details{Extension} + +@item +@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Propriétés internes}} +information sur les structures internes de LilyPond, nécessaire en +particulier pour élaborer des retouches. +@details{Propriétés internes} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Autre documentation + +@itemize + +@item +@ref{Traductions}@tie{}: +état des traductions pour les lecteurs non anglophones. + +@item +@ref{Tous}@tie{}: +liens rapides, manuels téléchargeables, et documentation des anciennes +versions. + +@item +@ref{Développement}@tie{}: +manuels pour la version de développement. + +@item +@ref{FDL}@tie{}: +ces manuels sont publiés sous la licence GNU de documentation libre FDL. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Initiation:: Premiers pas +* Glossaire:: Glossaire musicologique multilingue +* Essai:: Pourquoi LilyPond +* Notation:: Référence en matière de notation +* Utilisation:: Les différentes composantes de LilyPond +* Morceaux choisis:: Exemples de code, trucs et astuces +* FAQ:: Foire aux questions +* Web:: Le site de LilyPond +* Nouveautés:: Ce qui change au fil des versions +* Extension:: Programmation au sein de LilyPond +* Propriétés internes:: Références du programme +* Traductions:: État d'avancement des différentes traductions +* Tous:: Tous les manuels +* FDL:: Licence. +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Initiation +@unnumberedsec Initiation +@translationof Learning + +@divClass{column-left-top} +@subheading Manuel d'initiation + +Ce manuel explique comment débuter avec LilyPond, et expose de manière +simple quelques concepts clés. Il est conseillé de lire ces chapitres +de manière linéaire. + +Dans ce manuel se trouve à chaque section un paragraphe @strong{Voir +aussi} contenant des références vers d'autres sections@tie{}: il est +conseillé de ne pas les suivre en première lecture@tie{}; lorsque vous +aurez lu l'ensemble du manuel d'initiation, vous pourrez en relisant +certaines sections suivre ces références pour approfondir certains +aspects. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Initiation, learning, + @rlearningnamed{Top,Initiation}, + @manualStableLearningSplit-fr, + @manualStableLearningBig-fr, 1.5 MB, + @manualStableLearningPdf-fr, 3 MB} + +@divEnd + + +@node Glossaire +@unnumberedsec Glossaire +@translationof Glossary + +@divClass{column-left-top} +@subheading Glossaire + +Ce document explique en anglais des termes musicaux, et donne leur +traduction dans diverses langues. Si vous n'êtes pas familier avec la +notation et la terminologie musicales, il est conseillé de consulter le +glossaire, notamment pour les parties non encore traduites de la +documentation. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Glossaire musical, music-glossary, + @rglosnamed{Top,Glossaire musical}, + @manualStableGlossarySplit, + @manualStableGlossaryBig, 1 MB, + @manualStableGlossaryPdf, 1.5 MB} + +@divEnd + + +@node Essai +@unnumberedsec Essai +@translationof Essay + +@divClass{column-left-top} +@subheading Essai + +Ce document résume l'histoire de la typographie musicale, puis examine +les techniques de gravure à l'œuvre dans LilyPond. Il inclut également +des comparaisons entre LilyPond et d'autres logiciels de notation +musicale. + +@warning{il est plus facile d'examiner les détails typographiques dans +l'édition de ce manuel au format PDF, car elle peut être vue à une plus +haute résolution.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Essai, essay, + @ressaynamed{Top,Essai}, + @manualStableEssaySplit-fr, + @manualStableEssayBig-fr, 2 MB, + @manualStableEssayPdf-fr, 2.5 MB} + +@divEnd + + +@node Notation +@unnumberedsec Notation +@translationof Notation + +@divClass{column-left-top} +@subheading Manuel de notation + +Ce manuel détaille toutes les commandes LilyPond produisant une notation +musicale. La lecture de cet ouvrage requiert une bonne compréhension des +concepts exposés dans le manuel d'initiation. + +@warning{L'utilisation optimale du manuel de notation requiert une +familiarité avec les concepts et fonctions de base exposés dans le +manuel de notation, ainsi que les concepts musicaux exposés dans le +glossaire.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notation, notation, + @rusernamed{Top,Notation}, + @manualStableNotationSplit-fr, + @manualStableNotationBig-fr, 7 MB, + @manualStableNotationPdf-fr, 18 MB} + +@divEnd + + +@node Utilisation +@unnumberedsec Utilisation +@translationof Usage + +@divClass{column-left-top} +@subheading Manuel d'utilisation des programmes + +Ce manuel explique l'exécution des programmes et l'intégration de +partitions LilyPond dans d'autres programmes, et suggère des @qq{bonnes +pratiques} pour une utilisation plus efficace. Sa lecture est +recommandée avant d'aborder de grands projets. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Utilisation des programmes, usage, + @rprogramnamed{Top,Utilisation des programmes}, + @manualStableUsageSplit-fr, + @manualStableUsageBig-fr, 300 KB, + @manualStableUsagePdf-fr, 400 KB} + +@divEnd + + +@node Morceaux choisis +@unnumberedsec Morceaux choisis +@translationof Snippets + +@divClass{column-left-top} +@subheading Morceaux choisis + +Il s'agit d'une sélection de petits exemples montrant des trucs, +astuces et fonctionnalités particulières de LilyPond, issus de +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} +(LSR). Tous ces exemples sont dans le domaine public. + +Notez bien que cette annexe n'est en aucune manière un miroir ou même +une partie du LSR. Dans la mesure où le LSR repose sur une version +stable de LilyPond, les exemples illustrant des fonctionnalités +introduites dans la dernière version de développement ne peuvent y +figurer@tie{}; c'est pourquoi vous les trouverez dans le répertoire +@file{Documentation/snippets/new/} des sources de LilyPond. + +La liste des exemples correspondant à chacun des sous-chapitres du +manuel de notation est accessible par des liens dans le paragraphe +@strong{Voir aussi}. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Morceaux choisis, snippets, + @rlsrnamed{Top, Morceaux choisis}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node FAQ +@unnumberedsec FAQ +@translationof FAQ + +@divClass{column-center-top} +@subheading Foire aux questions + +@subsubheading Où sont la vue graphique, les menus et barres d'outils ? + +LilyPond demande que la musique soit écrite comme du texte. Lisez la +partie à propos de l'@ref{Entrée sous forme de texte}. + + +@subsubheading La documentation est si longue ! Dois-je vraiment la lire ? + +Vous devez lire le @ref{Initiation,manuel d'initiation}. Pour le reste +de la documentation, vous n'avez besoin de lire que ce qui est en +rapport avec la notation musicale que vous voulez produire. + + +@subsubheading Ça fait encore beaucoup à lire ! Ai-je besoin de lire tout cela ? + +C'est vous qui voyez@tie{}; les raisons pour lesquelles vous souhaitez +utiliser LilyPond se trouvent peut-être dans l'@ref{Introduction}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Questions d'utilisation + +@subsubheading Quelque chose ne fonctionne pas ! Comment je le répare ? + +C'est expliqué dans @rprogram{Résolution de problèmes}. + + +@subsubheading Pourquoi changez-vous la syntaxe ? + +C'est expliqué dans @rprogram{LilyPond une langue vivante}. + +@divEnd + + +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +Ce document fournit des informations générales sur LilyPond et sur les +outils de la communauté, c'est-à-dire les listes de discussion, les +rapports de bogues et le développement. + +@divEnd + +@divClass{column-right-bottom} +@subheading À lire + +@subsubheading La version que vous consultez actuellement + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading Web de la version @versionDevel + +@docLinks{Web, web, + @ref{Top,Web}, + @manualStableWebSplit-fr, + @manualStableWebBig-fr, 1 MB, + @manualStableWebPdf-fr, 2 MB} + +@divEnd + + +@node Nouveautés +@unnumberedsec Nouveautés +@translationof Changes + +@divClass{column-left-top} +@subheading Nouveautés + +C'est une liste des changements visibles pour l'utilisateur et des +nouvelles fonctionnalités de LilyPond depuis la dernière version stable. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Nouveautés, changes, + @rchcangesnamed{Top,Nouveautés}, + @manualStableChangesSplit, + @manualStableChangesBig, 6 KB, + @manualStableChangesPdf, 200 KB} + +@divEnd + + +@node Extension +@unnumberedsec Extension +@translationof Extending + +@divClass{column-left-top} +@subheading Extension des fonctionnalités de LilyPond + +Ce manuel (non traduit à ce jour) vous donnera des pistes en matière de +programmation avancée d’ajustements et retouches dans LilyPond. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Extension, extending, + @rextendnamed{Top,Extension}, + @manualStableExtendingSplit, + @manualStableExtendingBig, 200 KB, + @manualStableExtendingPdf, 400 KB} + +@divEnd + + +@node Propriétés internes +@unnumberedsec Propriétés internes +@translationof Internals + +@divClass{column-left-top} +@subheading Référence des propriétés internes + +C'est un ensemble de pages étroitement liées entre elles, qui documente +les moindres petits détails de chaque classe, objet et fonction de +LilyPond. Cette documentation est produite directement à partir des +définitions de formatage du code source. + +Presque toutes les fonctions de formatage utilisées en interne sont +directement disponibles pour l'utilisateur. Par exemple, toutes les +variables qui contrôlent les épaisseurs, les distances etc., peuvent +être modifiées dans les fichiers d'entrée. Il y a un grand nombre +d'options de formatage, et elles sont toutes décrites dans ce document. +Chaque section du manuel de notation a un paragraphe @b{Voir aussi}, qui +renvoie à la documentation générée automatiquement. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Référence des propriétés internes, internals, + @rinternalsnamed{Top,Référence des propriétés internes}, + @manualStableInternalsSplit, + @manualStableInternalsBig, 2.5 MB, + @manualStableInternalsPdf, 2.8 MB} + +@divEnd + + +@node Traductions +@unnumberedsec Traductions +@translationof Translated + +@divClass{column-center-bottom} +@subheading État des traductions + +@include translations.itexi + +@divEnd + + +@node Tous +@unnumberedsec Tous +@translationof All + +@divClass{column-left-top} +@subheading Versions disponibles au téléchargement + +@ifclear web_version +L'intégrale de la documentation est disponible sous forme d'archive à +l'adresse @uref{http://lilypond.org} +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable-fr + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Versions stables antérieures + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +LilyPond 2.12 Documentation} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +LilyPond 2.10 Documentation} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +LilyPond 2.8 Documentation} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +LilyPond 2.6 Documentation} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +LilyPond 2.4 Documentation} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +LilyPond 2.2 Documentation} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +LilyPond 2.0 Documentation} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +LilyPond 1.8 Documentation} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +LilyPond 1.6 Documentation} + +@end itemize + +@divEnd +@divEnd +@node FDL +@unnumberedsec FDL +@translationof FDL + +@divClass{column-center-top} +@subheading Licence de la documentation + +La documentation de GNU LilyPond est publiée selon les termes de la +@emph{GNU Free Documentation License}. Une brève introduction à cette +licence ainsi que les motifs qui nous ont fait l'adopter se trouvent à +la page @ref{Liberté}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd diff --git a/Documentation/gpl.itexi b/Documentation/gpl.itexi new file mode 100644 index 0000000000..97a17e1914 --- /dev/null +++ b/Documentation/gpl.itexi @@ -0,0 +1,717 @@ +@c The GNU General Public License. +@center Version 3, 29 June 2007 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. +@end display + +@heading Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom +to share and change all versions of a program---to make sure it remains +free software for all its users. We, the Free Software Foundation, +use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. You +can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the +software, or if you modify it: responsibilities to respect the freedom +of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, +receive or can get the source code. And you must show them these +terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those +domains in future versions of the GPL, as needed to protect the +freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish +to avoid the special danger that patents applied to a free program +could make it effectively proprietary. To prevent this, the GPL +assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + +@heading TERMS AND CONDITIONS + +@enumerate 0 +@item Definitions. + +``This License'' refers to version 3 of the GNU General Public License. + +``Copyright'' also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +``The Program'' refers to any copyrightable work licensed under this +License. Each licensee is addressed as ``you''. ``Licensees'' and +``recipients'' may be individuals or organizations. + +To ``modify'' a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a ``modified version'' of +the earlier work or a work ``based on'' the earlier work. + +A ``covered work'' means either the unmodified Program or a work based +on the Program. + +To ``propagate'' a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To ``convey'' a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays ``Appropriate Legal Notices'' to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +@item Source Code. + +The ``source code'' for a work means the preferred form of the work for +making modifications to it. ``Object code'' means any non-source form +of a work. + +A ``Standard Interface'' means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The ``System Libraries'' of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +``Major Component'', in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The ``Corresponding Source'' for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +@item Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +@item Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +@item Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +@item Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +@enumerate a +@item +The work must carry prominent notices stating that you modified it, +and giving a relevant date. + +@item +The work must carry prominent notices stating that it is released +under this License and any conditions added under section 7. This +requirement modifies the requirement in section 4 to ``keep intact all +notices''. + +@item +You must license the entire work, as a whole, under this License to +anyone who comes into possession of a copy. This License will +therefore apply, along with any applicable section 7 additional terms, +to the whole of the work, and all its parts, regardless of how they +are packaged. This License gives no permission to license the work in +any other way, but it does not invalidate such permission if you have +separately received it. + +@item +If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your work +need not make them do so. +@end enumerate + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +``aggregate'' if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +@item Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +@enumerate a +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium customarily +used for software interchange. + +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a written +offer, valid for at least three years and valid for as long as you +offer spare parts or customer support for that product model, to give +anyone who possesses the object code either (1) a copy of the +Corresponding Source for all the software in the product that is +covered by this License, on a durable physical medium customarily used +for software interchange, for a price no more than your reasonable +cost of physically performing this conveying of source, or (2) access +to copy the Corresponding Source from a network server at no charge. + +@item +Convey individual copies of the object code with a copy of the written +offer to provide the Corresponding Source. This alternative is +allowed only occasionally and noncommercially, and only if you +received the object code with such an offer, in accord with subsection +6b. + +@item +Convey the object code by offering access from a designated place +(gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to copy +the object code is a network server, the Corresponding Source may be +on a different server (operated by you or a third party) that supports +equivalent copying facilities, provided you maintain clear directions +next to the object code saying where to find the Corresponding Source. +Regardless of what server hosts the Corresponding Source, you remain +obligated to ensure that it is available for as long as needed to +satisfy these requirements. + +@item +Convey the object code using peer-to-peer transmission, provided you +inform other peers where the object code and Corresponding Source of +the work are being offered to the general public at no charge under +subsection 6d. + +@end enumerate + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A ``User Product'' is either (1) a ``consumer product'', which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +``normally used'' refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +``Installation Information'' for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +@item Additional Terms. + +``Additional permissions'' are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +@enumerate a +@item +Disclaiming warranty or limiting liability differently from the terms +of sections 15 and 16 of this License; or + +@item +Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices +displayed by works containing it; or + +@item +Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +@item +Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +@item +Declining to grant rights under trademark law for use of some trade +names, trademarks, or service marks; or + +@item +Requiring indemnification of licensors and authors of that material by +anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any +liability that these contractual assumptions directly impose on those +licensors and authors. +@end enumerate + +All other non-permissive additional terms are considered ``further +restrictions'' within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +@item Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +@item Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +@item Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An ``entity transaction'' is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +@item Patents. + +A ``contributor'' is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's ``contributor version''. + +A contributor's ``essential patent claims'' are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, ``control'' includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a ``patent license'' is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To ``grant'' such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. ``Knowingly relying'' means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is ``discriminatory'' if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +@item No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey +a covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree +to terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +@item Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +@item Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that numbered version or +of any later version published by the Free Software Foundation. If +the Program does not specify a version number of the GNU General +Public License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +@item Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +@item Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +@item Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +@end enumerate + +@heading END OF TERMS AND CONDITIONS + +@heading How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the ``copyright'' line and a pointer to where the full notice is found. + +@smallexample +@var{one line to give the program's name and a brief idea of what it does.} +Copyright (C) @var{year} @var{name of author} + +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 @url{http://www.gnu.org/licenses/}. +@end smallexample + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + +@smallexample +@var{program} Copyright (C) @var{year} @var{name of author} +This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. +This is free software, and you are welcome to redistribute it +under certain conditions; type @samp{show c} for details. +@end smallexample + +The hypothetical commands @samp{show w} and @samp{show c} should show +the appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an ``about box''. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a ``copyright disclaimer'' for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +@url{http://www.gnu.org/licenses/}. + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use +the GNU Lesser General Public License instead of this License. But +first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. diff --git a/Documentation/hu/GNUmakefile b/Documentation/hu/GNUmakefile new file mode 100644 index 0000000000..983c7b43b6 --- /dev/null +++ b/Documentation/hu/GNUmakefile @@ -0,0 +1,9 @@ +ISOLANG = hu +depth = ../.. +SUBDIRS = web learning texidocs usage +STEPMAKE_TEMPLATES = documentation +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root + +EXTRA_DIST_FILES = web.texi + +include $(depth)/make/stepmake.make diff --git a/Documentation/hu/learning.tely b/Documentation/hu/learning.tely new file mode 100644 index 0000000000..af7864ae2c --- /dev/null +++ b/Documentation/hu/learning.tely @@ -0,0 +1,82 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: 48c2b169dc8a9bc2ab2c767cbb83b57cc158742b + + 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 + +@setfilename lilypond-learning.info +@settitle LilyPond Tankönyv +@documentencoding UTF-8 +@documentlanguage hu +@afourpaper + +@c Translators: Harmath Dénes + +@macro manualIntro +Ez a tankönyv a LilyPond @version{} verziójába nyújt bevezetést. +@end macro + +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 a szerzők. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen és Graham Percival +@omfdescription A LilyPond kottaszedő rendszer tankönyve +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Hungarian +@end ignore + + +@lilyTitlePage{Tankönyv} + +@c TOC -- non-tex +@ifnottex + +@menu +* Első lecke:: A LilyPond használatának alapjai. +* Elemi kottaírás:: Kották lejegyzése a leggyakoribb kottaelemek felhasználásával. +* Alapfogalmak:: Alapvető fogalmak, melyek a továbbiak megértéséhez szükségesek. +* A kimenet finomhangolása:: Bevezetés a kottakép finomhangolásába. + +Függelék + +* Sablonok:: Előre elkészített sablonok. +* GNU Free Documentation License:: E dokumentum licence. +* LilyPond tárgymutató:: +@end menu + +@docMain +@end ifnottex + + +@c TOC - tex +@contents + + +@c INCLUDES + +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely + +@include learning/templates.itely +@include fdl.itexi + +@node LilyPond tárgymutató +@appendix LilyPond tárgymutató +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/hu/learning/GNUmakefile b/Documentation/hu/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/hu/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/hu/learning/common-notation.itely b/Documentation/hu/learning/common-notation.itely new file mode 100644 index 0000000000..cd311401ca --- /dev/null +++ b/Documentation/hu/learning/common-notation.itely @@ -0,0 +1,1351 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@c This file is part of learning.tely +@ignore + Translation of GIT committish: 48c2b169dc8a9bc2ab2c767cbb83b57cc158742b + + 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 Elemi kottaírás +@chapter Elemi kottaírás +@translationof Common notation + +Az @ref{Első lecke} után ez a fejezet ismerteti, hogyan lehet a gyakori +kottaelemek felhasználásával gyönyörű kottákat készíteni. + +@menu +* Egyszólamú lejegyzés:: +* Több hang egyszerre:: +* Dalok:: +* Utolsó simítások:: +@end menu + +@node Egyszólamú lejegyzés +@section Egyszólamú lejegyzés +@translationof Single staff notation + +Ebben a szakaszban bemutatjuk a kotta gyakori elemeit, egyelőre egy szólamnál +maradva. + +@menu +* Módosítás és előjegyzés:: +* Ívek:: +* Artikuláció és dinamika:: +* Szöveges utasítások:: +* Automatikus és kézi gerendázás:: +* Haladó ritmikai parancsok:: +@end menu + + +@node Módosítás és előjegyzés +@subsection Módosítás és előjegyzés +@translationof Accidentals and key signatures + +@subheading Módosítójelek + +@cindex módosítójelek +@cindex előjegyzés és módosítójelek +@cindex kereszt +@cindex kettős kereszt +@cindex kereszt, kettős +@cindex bé +@cindex kettős bé +@cindex bé, kettős +@cindex bebé + +@funindex es +@funindex is +@funindex eses +@funindex isis + +Fogalomtár: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, +@rglos{double flat}, @rglos{accidental}. + +@notation{Keresztes} hangot a hang neve után közvetlenül @code{is} utótagot +írva kapunk, @notation{bés} hangot pedig @code{es}-t (asz és esz +esetén akár egyszerűen @code{s}-t) írva. Értelemszerűen +@notation{kettős kereszt} és @notation{kettős bé} rendre @code{isis} és +@code{eses} hozzáadásával írható le. Ez a szabály az északi és a germán +nyelvek elnevezési hagyományaiból ered. Más megnevezésű +@notation{módosítójelek} használata a @ruser{Note names in other languages} +c. fejezetben van leírva. + +@lilypond[verbatim,quote,relative=2] +cis1 es fisis, ases +@end lilypond + +@subheading Előjegyzés + +@cindex előjegyzés +@cindex dúr +@cindex moll +@cindex előjegyzés és módosítójelek +@cindex hangzás és lejegyzés különbsége + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +Fogalomtár: @rglos{key signature}, @rglos{major}, +@rglos{minor}. + +Az @notation{előjegyzés} a @code{\key} parancs segítségével állítható be, +melyet a hangnem alaphangja és színezete (dúr: @code{\major} vagy +moll: @code{\minor}) követ. + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 +\key c \minor +a +@end lilypond + +@smallspace + +@subheading Figyelmeztetés az előjegyzés és a módosítójelek viszonyával kapcsolatban + +Fogalomtár: @rglos{accidental}, @rglos{key signature}, +@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, +@rglos{transposition}. + +A @notation{módosítások}, az @notation{előjegyzés} és az ütemvonalak +együttesen határozzák meg, hogy milyen @notation{módosítójelek} jelennek meg +a kottában. A LilyPond forrásfájlban az előjegyzés után is ki kell tenni +a megfelelő módosításokat! Ez a viselkedés elsőre zavart okozhat, úgyhogy +bővebb magyarázatra szorul. + +A LilyPond különbséget tesz a zenei tartalom és megjelenés, azaz a hangzó +és a lejegyzett zene között. A módosítás (hogy egy hang fel van-e emelve +vagy le van-e süllyesztve) a hangmagassághoz tartozik, így a zenei tartalom +része. Az, hogy a kottában a hang előtt szerepel-e egy kereszt, feloldójel +vagy bé, a lejegyzéshez tartozik. A kotta lejegyzésének szigorú szabályai +vannak, és a módosítójelek előállításánál a LilyPond intelligens módon +ezeket a szabályokat követi. A hangmagasságokat a felhasználó határozza meg: +mindig azt kell pontosan leírni, amit az ember hall. + +Ebben a példában: + +@lilypond[verbatim,quote,relative=2] +\key d \major +d cis fis +@end lilypond + +@noindent +egyik hang előtt sincs a kottában módosítójel, de ettől a LilyPond +forrásfájlban még ki kell rakni az @code{is} +utótagokat, hiszen cisz és fisz hang szól. + +Ha leírunk egy @code{b}-t, azaz egy h hangot, az nem azt jelenti, hogy +@qq{a megfelelő vonalra egy kottafejet kell írni}, hanem azt, hogy +@qq{itt egy h hang szól}. Pl. Asz-dúrban a h hang elé kerül módosítójel: + +@lilypond[verbatim,quote,relative=2] +\key as \major +b +@end lilypond + +Az, hogy minden módosítást külön meg kell adni, csak kevés többletmunkát +igényel a begépelésnél, de több előnye van: könnyebb a +@notation{transzponálás}, valamint a konkrét kiírt módosítójelek többfajta +rendszer szerint határozhatóak meg. Ezekre a rendszerekre látható néhány példa +az @ruser{Automatic accidentals} c. fejezetben. + + +@seealso +Referencia: @ruser{Note names in other languages}, +@ruser{Accidentals}, @ruser{Automatic accidentals}, +@ruser{Key signature}. + +Fogalomtár: @rglos{Pitch names}. + + +@node Ívek +@subsection Ívek +@translationof Ties and slurs + +@cindex átkötés +@cindex kötőív +@cindex frazeálóív + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + +@subheading Átkötés + + +Fogalomtár: @rglos{tie}. + +@notation{Átkötött} hangot úgy kaphatunk, hogy a hang után egy @code{~} +karaktert írunk. + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ +c4 ~ c8 a8 ~ a2 +@end lilypond + +@subheading Kötőív + + +Fogalomtár: @rglos{slur}. + +A @notation{kötőív} egy dallamot összefogó ív. Kezdőhangja után +@code{(}, záróhangja után @code{)} írandó. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@subheading Frazeálóív + +Fogalomtár: @rglos{slur}, @rglos{phrasing}. + +A @notation{frázisokat} jelölő ívek elejét és végét a @code{\(} és +@code{\)} jelek határozzák meg. Szerepelhet egyszerre kötőív és frazeálóív, +de egyszerre két kötőív vagy két frazeálóív nem. + +@lilypond[verbatim,quote,relative=2] +a8(\( ais b c) cis2 b'2 a4 cis,\) +@end lilypond + +@smallspace + +@cindex kötőív és átkötés különbsége +@subheading Figyelmeztetés az átkötés és kötőív viszonyával kapcsolatban + +Fogalomtár: @rglos{articulation}, @rglos{slur}, @rglos{tie}. + +A @notation{kötőív} kinézetre hasonlít az @notation{átkötéshez}, de más a +jelentése. Az átkötés egy hang hosszát toldja meg a következő, ugyanolyan +magasságú hangéval. A kötőív egy dallam @notation{artikulációját} határozza +meg, és több hangot átívelhet. Természetesen egy kötőíven belül lehetnek +átkötött hangok. + +@lilypond[verbatim,quote,relative=2] +c2~( c8 fis fis4 ~ fis2 g2) +@end lilypond + + +@seealso +Referencia: @ruser{Ties}, @ruser{Slurs}, +@ruser{Phrasing slurs}. + + +@node Artikuláció és dinamika +@subsection Artikuláció és dinamika +@translationof Articulation and dynamics + + +@subheading Artikuláció + +@cindex artikuláció +@cindex hangsúly +@cindex staccato + +Fogalomtár: @rglos{articulation}. + +Egy hang @notation{artikulációját} egy gondolatjel (@code{-}) után írt megfelelő +karakterrel lehet jelezni, pl. a staccatóhoz @code{-.} írandó a hang után: + +@lilypond[verbatim,quote,relative=2] +c-. c-- c-> c-^ c-+ c-_ +@end lilypond + +@subheading Ujjrend + +@cindex fingering + +@funindex ^ +@funindex _ + +Fogalomtár: @rglos{fingering}. + +Hasonlóan az artikulációhoz, az @notation{ujjrend} a hang után írt +gondolatjellel (@code{-}) és számmal jelezhető: + +@lilypond[verbatim,quote,relative=2] +c-3 e-5 b-2 a-1 +@end lilypond + +Az artikulációs jelzések és ujjrendek automatikusan a hang helyes oldalára +kerülnek, de ez felülírható, ha a gondolatjelet (@code{-}) kicseréljük +@code{^} vagy @code{_} karakterre, ami azt jelenti, hogy a jelzés az előbbi +esetben mindig a hang felett, ill. az utóbbi esetben mindig a hang alatt fog +elhelyezkedni. Egy hangon több artikulációs jel is lehet. Mindazonáltal a +legtöbb esetben legjobb, ha a LilyPond határozza meg, melyik oldalra +kerüljenek a jelzések. + +@lilypond[verbatim,quote,relative=2] +c_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Dinamika + +@cindex dinamika +@cindex decrescendo +@cindex crescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Fogalomtár: @rglos{dynamics}, @rglos{crescendo}, +@rglos{decrescendo}. + +@notation{Dinamikai jelzések} kottába írásához a megfelelő rövidítést kell +@code{\} karakterrel együtt azon hang után írni, amelytől kezdve érvényes: + +@lilypond[verbatim,quote,relative=2] +c\ff c\mf c\p c\pp +@end lilypond + +A @notation{crescendo} és @notation{decrescendo} a @code{\<}, ill. @code{\>} +paranccsal kezdődik, és a következő dinamikai jelzésnél vagy a @code{\!} +parancsnál fejeződik be: + +@lilypond[verbatim,quote,relative=2] +c2\< c2\ff\> c2 c2\! +@end lilypond + + +@seealso +Referencia: @ruser{Articulations and ornamentations}, +@ruser{Fingering instructions}, @ruser{Dynamics}. + + +@node Szöveges utasítások +@subsection Szöveges utasítások +@translationof Adding text + +@cindex szöveg +@cindex formázott szöveg + +@funindex \markup +@funindex markup + +A hangokhoz a következő módon lehet szöveges jelzéseket rendelni: + +@lilypond[verbatim,quote,relative=2] +c1^"espr" a_"legato" +@end lilypond + +Ez nem dalszöveg, hanem szöveges előadási utasítások bevitelére szolgál! +Formázott szöveget a @code{\markup} blokkon belülre kell elhelyezni: + +@lilypond[verbatim,quote,relative=2] +c1^\markup{ \bold espr} +a1_\markup{ + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Referencia: @ruser{Writing text}. + + +@node Automatikus és kézi gerendázás +@subsection Automatikus és kézi gerendázás +@translationof Automatic and manual beams + +@cindex gerendázás +@cindex automatikus gerendázás +@cindex kézi gerendázás +@cindex gerendázás, automatikus +@cindex gerendázás, kézi + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Fogalomtár: @rglos{beam}. + +A @notation{gerendák} automatikus elhelyezéséről a LilyPond gondoskodik: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@end lilypond + +Amennyiben az automatikus gerendázás nem megfelelő, kézzel felüldefiniálható. +Ha egyszeri alkalommal kell a gerendázást megváltoztatni, a gerenda első +hangja után @code{[}, az utolsó hangja után @code{]} írandó. + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] a b +@end lilypond + +Az automatikus gerendázás kikapcsolására az @code{\autoBeamOff} parancs +szolgál. Egészen addig tart a hatása, amíg vissza nem kapcsoljuk az +automatikus gerendázást az @code{\autoBeamOn} segítségével. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 +\autoBeamOn +a8 c b4 d8. c16 b4 +@end lilypond + + +@seealso +Referencia: @ruser{Automatic beams}, @ruser{Manual beams}. + + +@node Haladó ritmikai parancsok +@subsection Haladó ritmikai parancsok +@translationof Advanced rhythmic commands + +@subheading Felütés + +@cindex felütés +@cindex csonkaütem + +@funindex \partial +@funindex partial + +Fogalomtár: @rglos{anacrusis}. + +@notation{Felütés} a @code{\partial} kulcsszó segítségével kapható. +A parancs után egy ritmusértéket kell írni: például @code{\partial 4} egy +negyed értékű felütést, @code{\partial 8} egy nyolcad értékű felütést +eredményez. + +@lilypond[verbatim,quote,relative=2] +\partial 8 +f8 c2 d +@end lilypond + +@subheading n-olák + +@cindex triola +@cindex n-ola + +@funindex \times +@funindex times + +Fogalomtár: @rglos{note value}, @rglos{triplet}. + +Triolák, kvintolák stb. (általánosan @notation{n-olák}) a @code{\times} +kulcsszóval írhatóak le. A parancs után egy törtszámot és egy dallamot kell +írni: a dallamban a hangok hosszúságai a törtszámmal szorzódnak meg. Például +a @notation{triolák} lejegyzett hosszúságuk 2/3 részéig szólnak, így triolánál +2/3 kell, hogy legyen a tört értéke. + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Előkék + +@cindex előke +@cindex acciaccatura +@cindex appoggiatura + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Fogalomtár: @rglos{grace notes}, @rglos{acciaccatura}, +@rglos{appoggiatura}. + +Az @notation{előkéket} a @code{\grace} parancs jelöli. Súlyos előkék előtt +az @code{\appoggiatura}, súlytalanok előtt az @code{\acciaccatura} parancs +áll: + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 +c2 \appoggiatura b16 c2 +c2 \acciaccatura b16 c2 +@end lilypond + + +@seealso +Referencia: @ruser{Grace notes}, @ruser{Tuplets}, +@ruser{Upbeats}. + + +@node Több hang egyszerre +@section Több hang egyszerre +@translationof Multiple notes at once + +Ebben a szakaszban annak a lehetőségeit vizsgáljuk meg, hogyan lehet +többszólamú zenét írni a LilyPondban. Ebbe beletartozik a több hangszerre, +több kottasort elfoglaló hangszerre (pl. zongorára) írt művek, valamint +akkordok lejegyzése. + +A @notation{polifónia} szót ezentúl annak a speciális esetnek a megnevezésére +használjuk, amikor egy vonalrendszeren belül több szólam szerepel. + +@menu +* A zenei kifejezés fogalma:: +* Több kottasor:: +* Kottasor-csoport:: +* Hangok akkordba foglalása:: +* Több szólam egy kottasoron belül:: +@end menu + + +@node A zenei kifejezés fogalma +@subsection A zenei kifejezés fogalma +@translationof Music expressions explained + +@cindex zenei kifejezés +@cindex kifejezés, zenei +@cindex összetett zenei kifejezés +@cindex zenei kifejezés, összetett + +A LilyPond bemeneti fájljaiban a zene @emph{zenei kifejezésekből} épül fel. +Egy hang már egy kifejezés: + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +Ha több hangot kapcsos zárójelbe teszünk, egy @emph{összetett zenei +kifejezés} jön létre. Az alábbi példában az összetett zenei kifejezés +két hangból áll: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +A kapcsos zárójel azt jelenti, hogy a benne szereplő zenei kifejezések egymás +után következnek: mindegyik akkor kezdődik, amikor az előtte álló befejeződik. +A zenei kifejezések egymásba ágyazhatóak: + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f g } +@end lilypond + +@subheading Analógia: matematikai kifejezések + +Ez a mechanizmus a matematikai képletekhez hasonló: egy nagy képlet +sok kicsi képletből, vagyis kifejezésből épül fel, melyek további +kifejezéseket tartalmazhatnak, és így tetszőleges bonyolultságú kifejezések +létrehozhatóak. Például: + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +Ebben a sorozatban minden kifejezés a következő kifejezésben egy nagyobb +kifejezés részeként szerepel. A legegyszerűbb kifejezések a számok, összetett +kifejezéseket pedig úgy hozhatunk létre, hogy meglevő kifejezéseket +műveletekkel (mint pl. @code{+}, @code{*} vagy @code{/}) és zárójelekkel +kombinálunk össze. Akárcsak a matematikai kifejezések, a zenei kifejezések is +tetszőleges mélységig egymásba ágyazhatóak, és éppen erre van szükség +többszólamú zene esetén. + + +@subheading Egyidejű zenei kifejezések: több kottasor + +@cindex több kottasor +@cindex kottasor +@cindex vonalrendszer +@cindex polifónia +@cindex párhuzamos kifejezések +@cindex kifejezések, párhuzamos +@cindex relatív mód és párhuzamos kifejezések + +@funindex << +@funindex >> +@funindex << ... >> + +Fogalomtár: @rglos{polyphony}. + +A fent leírt technikát alkalmazzuk @notation{polifónia} lejegyzésénél. +Több kottasort vagy több kottasoron belüli szólamot tartalmazó zenénél +párhuzamosan (egyidejűen) kell összekombinálni a kifejezéseket. +Annak a jelzésére, hogy több szólam egyszerre kezd játszani, +@code{<<} és @code{>>} közé kell foglalni őket; ez jelenti azt, hogy +nem egymás után, hanem egy időben kezdődnek. A következő példában +három dallamot (ezek mindegyike két hangból áll) kombinálunk össze +három szólammá: + +@lilypond[verbatim,quote] +\relative c'' { + << + { a4 g } + { f e } + { d b } + >> +} +@end lilypond + +Amikor egy kifejezés egy másik kifejezésen belül szerepel, érdemes +eggyel nagyobb behúzással kezdeni. A LilyPondnak ez nem számít, +de a LilyPond forrásfájlt olvasó emberek számára áttekinthetőbb lesz +a bemenet. + +@warning{Relatív módban minden hang magasságát a forrásfájlban őt megelőző +hanghoz képest számítja ki a LilyPond, nem pedig az első @code{\relative} +parancs viszonyítási hangjához képest.} + + +@subheading Egyidejű zenei kifejezések: egy kottasor + +A LilyPond onnan állapítja meg, hogy egy vagy több kottasor szerepel-e a +darabban, hogy az első kifejezés többszólamú-e. Ha nem, egy kottasort +hoz létre, ha igen, többet. + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> + << { e f } { c <> } >> +} +@end lilypond + +@node Több kottasor +@subsection Több kottasor +@translationof Multiple staves + +@cindex több kottasor +@cindex kottasor, több +@cindex kontextus + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +Ahogy azt az előző, @ref{A zenei kifejezés fogalma} c. szakaszban láttuk, +a LilyPond bemeneti fájljai zenei kifejezésekből épülnek fel, és ha egy +párhuzamos kifejezés az első, akkor több kottasorból áll a mű. Jobban látható, +hogy mi történik, ha világosan megmondjuk, mi szerepeljen külön kottasorban, +és mi nem. + +Egy kottasor kézzel történő létrehozásához a zenei kifejezés elé +@code{\new Staff} parancsot kell írni. +Az így kapott kottasorokat, ahogy már megszoktuk, a @code{<<} és +@code{>>} jelekkel kell összekombinálni: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef treble c } + \new Staff { \clef bass c,, } + >> +} +@end lilypond + +A @code{\new} parancs egy új @emph{kontextus} létrehozására szolgál. +Egy kontextus egy zárt környezet, amely zenei eseményeket +(pl. hangokat vagy a @code{\clef} paranccsal jelölt kulcsokat) tartalmaz. +Egyszerűbb esetekben sok környezet automatikusan létrejön. Bonyolultabb +műveknél érdemes ezeket a környezeteket kézzel létrehozni. + +Sokfajta környezet létezik. Többek között a @code{Score} (kotta), +@code{Staff} (kottasor) és @code{Voice} (szólam) környezetek tartalmazhatnak +dallamokat, míg a @code{Lyrics} (dalszöveg) környezet dalszöveget +tartalmazhat, a @code{ChordNames} (akkordnevek) környezet pedig akkordok +neveit tartalmazhatja. + +A nyelvtanban a @code{\new} parancs egy zenei kifejezés elé fűzve +egy nagyobb zenei kifejezésnek számít. Bizonyos szempontból a negatív +előjelre hasonlít a matematikában. A @math{(4+5)} képlet egy kifejezés, +így a @math{-(4+5)} képlet egy nagyobb kifejezés. + +Egy kottasorban elhelyezett ütemmutató minden más kottasorra is hat +alapesetben. Ugyanakkor az egy kottasorban szereplő előjegyzés +@emph{nem} hat a többi kottasorra. Ez azért az alapértelmezett viselkedés, +mert a transzponáló hangszereket tartalmozó és a politonális zene gyakoribb, +mint a poliritmikus. + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef treble \key d \major \time 3/4 c } + \new Staff { \clef bass c,, } + >> +} +@end lilypond + + + + +@node Kottasor-csoport +@subsection Kottasor-csoport +@translationof Staff groups + +@cindex zongoraszólam +@cindex kórusszólam + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Fogalomtár: @rglos{brace}. + +A zongoramuzsikát két összekapcsolt kottasorban szokás lejegyezni. +Egy zongoraszólam így hasonló a @ref{Több kottasor} c. szakaszban +szereplő több kottasort tartalmazó példához, csak most az egész párhuzamos +kifejezés egy @code{PianoStaff} kontextuson belül szerepel: + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> +@end example + +Egy rövid zongoradarab-részlet: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e g g, } + \new Staff { \clef bass c,, c' e c } + >> +} +@end lilypond + +Másfajta kottasor-csoportok is léteznek: a zenekari szólamok összekapcsolására +használatos @code{\new GrandStaff} vagy a kórusszólamok csoportosítására +szolgáló @w{@code{\new ChoirStaff}}. Ezek hasonló kontextusok, mint a +@code{\new PianoStaff}, csak másfajta kapcsot használnak, és máshogy kötik +össze az ütemvonalakat. + + +@seealso +Referencia: @ruser{Keyboard and other multi-staff instruments}, +@ruser{Displaying staves}. + + +@node Hangok akkordba foglalása +@subsection Hangok akkordba foglalása +@translationof Combining notes into chords + +@cindex akkordok +@cindex ritmusérték, akkordok + +@funindex < +@funindex > +@funindex < ... > + +Fogalomtár: @rglos{chord}. + +Korábban láttuk, hogyan lehet több szólamot elérni dupla kacsacsőrök +használatával. Ehhez hasonló az akkordok leírása: az akkord hangjait +@emph{egyszeres} kacsacsőrök közé kell zárni. Mivel egy akkord minden +hangja ugyanannyi ideig tart, az akkord ritmusértékét nem az egyes +akkordhangok, hanem a záró kacsacsőr után kell megadni. + +@lilypond[verbatim,quote,relative=2] +r4 4 2 +@end lilypond + +Az akkordokra érdemes úgy gondolni, mint az egyes hangokra: +szinte minden, amit egy hanghoz lehet rendelni, az egy egész akkordhoz is +rendelhető, ha a kacsacsőrökön @emph{kívül} helyezzük el. +Például így lehet átkötött vagy másképpen gerendázott akkordokat elérni: +a megfelelő jelzések a kacsacsőrök után szerepelnek. + +@lilypond[verbatim,quote,relative=2] +r4 8[ ]~ 2 +r4 8( \> 4 \!) +@end lilypond + + +@node Több szólam egy kottasoron belül +@subsection Több szólam egy kottasoron belül +@translationof Single staff polyphony + +@cindex polifónia +@cindex több szólam egy kottasoron belül +@cindex kottasoron belüli szólamok +@cindex láthatatlan szünet +@cindex szünet, láthatatlan + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +A polifónia, azaz egy kottasoron belüli szólamok lejegyzése, bár nem +bonyolult jelenség, olyan fogalmak megértését feltételezi, amelyeket +még nem tárgyaltunk. Ezt most sem fogjuk megtenni. Ehelyett a +tankönyv megfelelő részére hivatkozunk, amely részletesen +elmagyarázza a témakört. + +@seealso +Tankönyv: @ref{A szólamok zenét tartalmaznak}. + +Referencia: @ruser{Simultaneous notes}. + +@node Dalok +@section Dalok +@translationof Songs + +Ez a szakasz a vokális zene és egyszerű dalok, valamint könnyűzenei számok +lejegyzésébe nyújt betekintést. + +@menu +* Egyszerű dalok kottázása:: +* Dalszöveg igazítása a dallamhoz:: +* Azonos dalszöveg több kottasorhoz:: +@end menu + + +@node Egyszerű dalok kottázása +@subsection Egyszerű dalok kottázása +@translationof Setting simple songs + +@cindex dalszöveg +@cindex dal + +@funindex \addlyrics +@funindex addlyrics + +Fogalomtár: @rglos{lyrics}. + +Egy angol gyermekdal, a @notation{Girls and boys come out to play} így +kezdődik: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 d4 b8 g4 +} +@end lilypond + +@notation{Dalszöveget} legegyszerűbben úgy lehet hozzáadni a dallamhoz, +hogy a dallam után írjuk az @code{\addlyrics} parancsot, majd a dalszöveget. +Minden szótagot szóközzel kell elválasztani. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 d4 b8 g4 + } + \addlyrics { + Girls and boys come out to play, + } +>> +@end lilypond + +Mind a dallamot, mind a dalszöveget kapcsos zárójelbe kell tenni, az egész +dalt pedig @w{@code{<< ... >>}} közé, mivel a zene és a szöveg egyszerre +kezdődik. + +@node Dalszöveg igazítása a dallamhoz +@subsection Dalszöveg igazítása a dallamhoz +@translationof Aligning lyrics to a melody + +@cindex melizma +@cindex aláhúzás +@cindex kötőjel +@cindex dalszöveg igazítása +@cindex dalszöveg, többszótagú szavak + +Fogalomtár: @rglos{melisma}, @rglos{extender line}. + +A gyerekdal következő sora: @notation{The moon doth shine as bright as day}. +Írjuk be ezt is: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 d4 b8 g4 + g8 a4 b8 c b a d4 b8 g4. + } + \addlyrics { + Girls and boys come out to play, + The moon doth shine as bright as day; + } +>> +@end lilypond + +A @notation{shine} szót két hangra kellene énekelni, így a dalszöveg nem +illeszkedik helyesen a hangokra. Egy @notation{melizmát} kell létrehozni. +Több lehetőség van arra, hogy egy szótagot több hangra elnyújtsunk; a +legegyszerűbb, ha a melizma hangjait kötőívvel összekötjük (ld. az +@ref{Ívek} szakaszt): + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 d4 b8 g4 + g8 a4 b8 c( b) a d4 b8 g4. + } + \addlyrics { + Girls and boys come out to play, + The moon doth shine as bright as day; + } +>> +@end lilypond + +Most már a dalszöveg jól illeszkedik a dallamra, de az automatikus gerendázás +nem felel meg az angolszász konvenciónak a @notation{shine as} +szavakon. Írjuk felül ezt kézzel (ld. az @ref{Automatikus és kézi gerendázás} +szakaszt): + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 d4 b8 g4 + g8 a4 b8 c([ b]) a d4 b8 g4. + } + \addlyrics { + Girls and boys come out to play, + The moon doth shine as bright as day; + } +>> +@end lilypond + +A melizmát úgy adhatjuk meg másképp a kötőív helyett, hogy a dalszövegben +annyi alulvonás karakterrel (@code{_}) látjuk el a szótagot, ahány hangra (az elsőt +leszámítva) kiterjed: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 d4 b8 g4 + g8 a4 b8 c[ b] a d4 b8 g4. + } + \addlyrics { + Girls and boys come out to play, + The moon doth shine _ as bright as day; + } +>> +@end lilypond + +Ha egy melizma nagyon hosszú, @notation{szótagjelző vonalat} szokás húzni, +amíg a melizma tart. Ezt két alulvonással (@code{__}) jelezzük. Íme Purcell +@notation{Dido és Aeneas} c. operájából @notation{Dido búcsúáriájának} első +három üteme: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes bes( a) + b c4.( bes8 a4. g8 fis4.) g8 fis1 + } + \addlyrics { + When I am laid, + am laid __ in earth, + } +>> +@end lilypond + +Eddig még egy példában sem szerepelt több szótagból álló szó. +Általában minden szótagot külön hangra kell énekelni, a szótagok +közé kötőjel kerül a kottában. Ezt a forrásfájlban két gondolatjel +@code{--} jelzi. Következő példánkban mindaz szerepel, amit eddig +megtanultunk a dallam és szöveg összekapcsolásáról: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 g4 g a8( b) g4 g4 + b8( c) d4 d e4 c2 + } + \addlyrics { + A -- way in a __ man -- ger, + no __ crib for a bed, __ + } +>> +@end lilypond + +Más dalszövegeknél, főleg olasz nyelvűeknél, épp ennek ellenkezőjére van +szükség: több szótagot kell egy hangra énekelni. Ezt úgy érhetjük el, +hogy összekötjük a két szótagot egy alulvonás karakterrel (@code{_}), +szóközök nélkül, vagy idézőjelbe rakjuk őket. +Rossini operájának alábbi részletében, Figaro @notation{Largo al factotum} +kezdetű áriájában a @notation{Largo} szó @notation{go} szótagját és az +@notation{al} szót ugyanarra a hangra kell énekelni: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef bass + \key c \major + \time 6/8 + c4.~ c8 d b c([ d]) b c d b c + } + \addlyrics { + Lar -- go_al fac -- to -- tum del -- la cit -- tà + } +>> +@end lilypond + + +@seealso +Referencia: @ruser{Vocal music}. + + +@node Azonos dalszöveg több kottasorhoz +@subsection Azonos dalszöveg több kottasorhoz +@translationof Lyrics to multiple staves + +@cindex dalszöveg több szólamhoz + +Ha ugyanazt a dalszöveget akarjuk több szólamhoz rendelni, +választhatjuk az egyszerű megközelítést, mint ebben a példában, +mely Händel @notation{Júdás Makkabeus} c. oratóriumából való: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 c([ bes]) a a([ g]) f f'4. b, c4.~ c4 + } + \addlyrics { + Let flee -- cy flocks the hills a -- dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4 + } + \addlyrics { + Let flee -- cy flocks the hills a -- dorn, + } +>> +@end lilypond + +Érdemes azonban a dalszöveget csak egyszer leírni, és később hivatkozni rá +változók segítségével. Ez a módszer a @ref{Művek szervezettebbé tétele változók segítségével} +c. szakaszban olvasható. + +@seealso +Referencia: @ruser{Vocal music}. + + +@node Utolsó simítások +@section Utolsó simítások +@translationof Final touches + +Ez gyakorlatunk befejező szakasza. Bemutatja, hogyan végezzük el az utolsó +simításokat egyszerű műveken, valamint bevezetést nyújt a tankönyv további +részébe. + +@menu +* Művek szervezettebbé tétele változók segítségével:: +* Verziószám:: +* Cím és más adatok megadása:: +* Abszolút hangmagasság-megadás:: +* Hogyan tovább?:: +@end menu + + +@node Művek szervezettebbé tétele változók segítségével +@subsection Művek szervezettebbé tétele változók segítségével +@translationof Organizing pieces with variables + +@cindex változók +@cindex azonosítók +@cindex makrók +@cindex értékadás +@cindex hozzárendelés +@cindex újrafelhasználás +@cindex hivatkozás +@cindex változók, megengedett karakterek + +Amikor a fentebb tárgyalt elemeket hosszabb művekké kombináljuk össze, +nagyon nagy és összetett zenei kifejezések állhatnak elő. +Sok szólam esetén a bemeneti fájlok áttekinthetetlenekké válnak. +Átláthatóságukat @emph{változók} használatával javíthatjuk. + +A változók (másnéven azonosítók vagy makrók) segítségével a komplex +zenei kifejezéseket kisebb részekre bonthatjuk. +Egy változóhoz a következőképpen rendelhetünk értéket: + +@example +dallam = @{ @dots{} @} +@end example + +A @code{dallam} nevű zenei kifejezés tartalma később bárhová beilleszthető. +Ehhez csak egy @code{\} karaktert kell a neve elé írni (@code{\dallam}, +akárcsak egy LilyPond parancs esetén). + +@c KEEP LY +@lilypond[verbatim,quote] +hegedű = \new Staff { + \relative c'' { + a4 b c b + } +} +cselló = \new Staff { + \relative c { + \clef bass + e2 d + } +} +{ + << + \hegedű + \cselló + >> +} +@end lilypond + +@noindent +A változók nevei csak betűket tartalmazhatnak. Nem +tartalmazhatnak számot, aláhúzást, kötőjelet stb. + +A változókat azelőtt kell definiálni, mielőtt még hivatkoznánk rájuk, +de később akármennyiszer felhasználhatjuk őket, így pl. könnyebben vihetünk +be sokszor ismétlődő szakaszokat. +Akár egy másik változó definíciójában is hivatkozhatunk egy korábbi +változóra. + +@c KEEP LY +@lilypond[verbatim,quote] +triolaA = \times 2/3 { c,8 e g } +ütemA = { \triolaA \triolaA \triolaA \triolaA } + +\relative c'' { + \ütemA \ütemA +} +@end lilypond + +Sok más típusú értéket is hozzárendelhetünk egy változóhoz. Például: + +@example +szélesség = 4.5\cm +név = "Wendy" +AÖtösLap = \paper @{ paperheight = 21.0 \cm @} +@end example + +Tartalmától függően egy változó különböző helyeken használható fel. +Az alábbi példa a fenti változókat hasznosítja újra: + +@example +\paper @{ + \AÖtösLap + line-width = \szélesség +@} +@{ + c4^\név +@} +@end example + + +@node Verziószám +@subsection Verziószám +@translationof Version number + +@cindex verzió +@cindex verziószám +@cindex frissítés + +@funindex \version +@funindex version +@funindex convert-ly + +A @code{\version} utasítással kell megadni, hogy a LilyPond melyik verziója +számára készült a fájl: + +@example +\version @w{"@version{}"} +@end example + +@noindent +Ezt megállapodás szerint a LilyPond fájl legelejére helyezzük. + +A verziómegjelölés célja, hogy a LilyPond későbbi verziójára való átállás +minél zökkenőmentesebb legyen. A nyelvtanban bekövetkezett változásokat egy +speciális program, a @command{convert-ly} képes kezelni, és a @code{\version} +utasítás alapján állapítja meg, hogy milyen szabályok szerint frissítse a +fájlt. Erről bővebb információ a @rprogram{Updating files with convert-ly} +szakaszban található. + +@node Cím és más adatok megadása +@subsection Cím és más adatok megadása +@translationof Adding titles + +@cindex cím +@cindex szerző +@cindex fejléc +@cindex metaadatok + +@funindex \header +@funindex header + +A címet, szerzőt, opus-számot és hasonló adatokat a @code{\header} +blokkban kell megadni. Ez a fő zenei kifejezésen kívül helyezendő el; a +@code{\header} blokk általában a verziószám alatt szerepel. + +@example +\version @w{"@version{}"} +\header @{ + title = "Szimfónia" + composer = "Én" + opus = "Op. 9" +@} + +@{ + @dots{} zene @dots{} +@} +@end example + +Amikor a fájl feldolgozásra kerül, a cím és a szerző neve a kotta tetején +jelenik meg nyomtatásban. A mű egyéb adatainak megadási módja és elhelyezése +a @ruser{Creating titles} c. fejezetben található. + + +@node Abszolút hangmagasság-megadás +@subsection Abszolút hangmagasság-megadás +@translationof Absolute note names + +@cindex hangmagasság +@cindex abszolút hangnevek +@cindex abszolút mód +@cindex abszolút hangmagasság-megadás + +Eddig mindig @code{\relative} módban adtuk meg a hangmagasságot. +Ez a legkönnyebb módja a legtöbb zenemű bevitelének, de létezik a +hangmagasság megadásának egy másik módja is: az abszolút mód. + +A LilyPond a @code{\relative} blokk elhagyása esetén minden hangmagasságot +abszolútként értelmez. A @code{c'} mindig az egyvonalas c hangot jelöli, a +@code{b} az alatta levő hangot, a kis h-t, a @code{g,} pedig a nagy g-t. + +@lilypond[verbatim,quote] +{ + \clef bass + c' b g, g, + g, f, f c' +} +@end lilypond + +Íme egy négy oktávos skála: + +@lilypond[verbatim,quote] +{ + \clef bass + c, d, e, f, + g, a, b, c + d e f g + a b c' d' + \clef treble + e' f' g' a' + b' c'' d'' e'' + f'' g'' a'' b'' + c'''1 +} +@end lilypond + +Amint az látható, a magas hangok beviteléhez sok @code{'} jel szükséges. +Itt van például egy Mozart-idézet: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 + b'8. cis''16 b'8 d''4 d''8 +} +@end lilypond + +A sok aposztróftól kevésbé lesz olvasható a bemenet, és így könnyebb hibázni. +A @code{\relative} módban az előző példát sokkal könnyebb elolvasni és +begépelni: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 + b8. cis16 b8 d4 d8 +} +@end lilypond + +Ha relatív módban hibát vét az ember (eggyel több vagy kevesebb @code{'} vagy +@code{,} jelet használ), a hiba azonnal szembetűnő -- a hibás hangtól kezdve +minden hang elcsúszik egy oktávval. Abszolút módban az egyszeri hiba nem +ilyen könnyen észrevehető, és nehezebb megtalálni. + +Az abszolút mód olyan dallamoknál lehet előnyös, amelyekben nagy +hangközugrások vannak, de leginkább a LilyPond-fájlok +számítógéppel történő generálásánál bizonyul különösen hasznosnak. + + +@node Hogyan tovább? +@subsection Hogyan tovább? +@translationof After the tutorial + +Gratulálunk az alapok elsajátításához! Eme tanulmányok után +javasolt egy-két darab begépelésével nagyobb gyakorlatra szert tenni. +Egy lehetőség például a @ref{Sablonok} használata. +Ha valamilyen kottaelem ismertetésére még nem került volna sor, a +Kottaírás kézikönyvéből kikereshető, a @ruser{Musical notation} fejezettől +kezdve. A sablonok között nem szereplő hangszeregyüttes esetén érdemes +@ref{A sablonok kibővítése} c. fejezetet elolvasni. + +Pár rövid darab megírása után következhetnek a tankönyv további fejezetei. +Természetesen már most is elolvashatóak, de mivel nagyobb jártasságot +feltételeznek a LilyPond nyelvében, tanácsos most ezeket átlapozni, és csak +azután visszatérni rájuk, amikor már több tapasztalatot szerzett az ember. + +A tankönyv minden szakaszának végén található egy @strong{Lásd még} bekezdés +is, mely más szakaszokra mutató kereszthivatkozásokat tartalmaz: ezeket első +olvasásra nem praktikus követni, csak az egész tankönyv elolvasása után, az +összefüggések meglátása végett. + +Minél előbb ajánlott elolvasni a dokumentációról szóló szakaszt. +Mivel nagy mennyiségű segédanyag áll rendelkezésre a LilyPondról, az +új felhasználók sokszor nem tudják, hova forduljanak segítségért. A +dokumentációról szóló rész figyelmes elolvasása csak öt percbe kerül, +de megelőzi azt, hogy az olvasó bosszantó órákat töltsön azzal, hogy rossz +helyen keresgél. diff --git a/Documentation/hu/learning/fundamental.itely b/Documentation/hu/learning/fundamental.itely new file mode 100644 index 0000000000..5c4718283e --- /dev/null +++ b/Documentation/hu/learning/fundamental.itely @@ -0,0 +1,3267 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@c This file is part of learning.tely +@ignore + Translation of GIT committish: 48c2b169dc8a9bc2ab2c767cbb83b57cc158742b + + 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 -*- coding: utf-8; mode: texinfo; -*- +@c \version "2.14.0" +@node Alapfogalmak +@chapter Alapfogalmak +@translationof Fundamental concepts +@translationof Fundamental concepts + +Miután megtanultuk, hogyan állíthatunk elő gyönyörű kottákat egyszerű szöveges +fájlokból, ebben a szakaszban megismerjük azokat a fogalmakat és technikákat, +amelyek segítségével hasonlóan gyönyörű, de bonyolultabb kottákat készíthetünk. + +@menu +* Hogyan működnek a LilyPond bemeneti fájlok?:: +* A szólamok zenét tartalmaznak:: +* Kontextusok és ábrázolók:: +* A sablonok kibővítése:: +@end menu + +@node Hogyan működnek a LilyPond bemeneti fájlok? +@section Hogyan működnek a LilyPond bemeneti fájlok? +@translationof How LilyPond input files work +@translationof How LilyPond input files work + +A LilyPond bemeneti formátuma meglehetősen rugalmas, így a tapasztalt +felhasználóknak nagy szabadságot ad abban, hogyan strukturálják a +forrásfájljaikat. Azonban ez a rugalmasság az újdonsült felhasználók számára +bonyolult lehet. Ez a szakasz elmagyarázza a struktúra nagy részét, az +egyszerűség kedvéért bizonyos részleteket elnagyolva. A bemeneti formátum +felépítésének teljes leírása a @ruser{File structure} c. szakaszban olvasható. + +@menu +* Bevezetés a LilyPond fájlok szerkezetébe:: +* A kotta egy összetett zenei kifejezés:: +* Zenei kifejezések egymásba ágyazása:: +* A gerendák és ívek átfedhetik egymást:: +@end menu + +@node Bevezetés a LilyPond fájlok szerkezetébe +@subsection Bevezetés a LilyPond fájlok szerkezetébe +@translationof Introduction to the LilyPond file structure +@translationof Introduction to the LilyPond file structure + +@c index bemeneti formátum +@c index fájlstruktúra + +A LilyPond bemeneti fájlok szerkezetére egy tipikus példa: + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...összetett zenei kifejezés...} % ide jön a zene! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Ennek az alapvető mintának sok változata lehetséges, de ez a példa jó +kiindulási alapot jelent. + +@funindex \book +@funindex book +@funindex \score +@funindex score +@cindex book +@cindex score + +Eddig egyik példa sem használta a @code{\score@{@}} parancsot. Ennek oka, hogy +a LilyPond automatikusan hozzáadja az egyszerű bemenethez a szükséges +parancsokat. A következő bemenet például: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +a következő rövidítése: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +Más szóval, ha a bemenet egyetlen zenei kifejezést tartalmaz, a LilyPond úgy +értelmezi a fájlt, mintha a zenei kifejezés körül már szerepelnének a fenti +parancsok. + +@cindex implicit kontextusok + +@strong{Figyelem!} A dokumentációban sok példa nem tartalmazza a +@code{\new Staff} és @code{\new Voice} parancsokat, így azok implicite kerülnek +létrehozásra. Ez egyszerű példáknál jól működik, de bonyolultabb esetekben, +főleg, ha más parancsokat is használunk, a kontextusok implicit létrehozása +meglepő kimenetet eredményezhet, például nemkívánatos kottasorok jelenlétét. +A kontextusok explicit megadásának módja a @ref{Kontextusok és ábrázolók} c. +részben olvasható. + +@warning{Többszólamú zeneművek esetén ajánlott explicit módon létrehozni a +kottasorokat és az azon belüli szólamokat.} + +Egyelőre térjünk vissza az első példánkhoz, és vizsgáljuk meg csak a +@code{\score} parancsot. + +A @code{\score} blokkon belül először pontosan egy zenei kifejezésnek kell +következnie. +Emlékezzünk arra, hogy egy zenei kifejezés lehet egy hang is, de akár +egy olyan nagy összetett kifejezés is, mint: + +@example +@{ + \new StaffGroup << + @var{...egy teljes Wagner-opera zenei anyaga...} + >> +@} +@end example + +@noindent +Mivel mindez egy @code{@{ ... @}} blokkban szerepel, egy zenei +kifejezésnek számít. + +Ahogy korábban láttuk, a @code{\score} blokk a zenén kívül más definíciókat is +tartalmazhat, mint például: + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex header +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi +@cindex header +@cindex layout +@cindex midi + +@noindent +Ez a három parancs -- @code{\header}, @code{\layout} és @code{\midi} -- +speciális: az eddigi parancsokkal ellentétben @emph{nem} zenei kifejezések, és +nem azok részei. A @code{\score} blokkon belül vagy kívül is elhelyezkedhetnek +-- például a @code{\header} (fejléc) blokk, melyben a kotta adatait (pl. cím, +szerző stb.) lehet megadni, legtöbbször a @code{\score} parancs előtt szerepel, +ahogy a szakasz elején található példában is látható. + +A két további, még ismeretlen parancs: @code{\layout @{@}} és +@code{\midi @{@}}. Ezek ebben a formában rendre azt jelentik, hogy a LilyPond +kottaképet, ill. hangzó anyagot állítson elő. Teljes leírásuk a Kottaírás +Kézikönyvében található, a @ruser{Score layout} és a +@ruser{Creating MIDI files} szakaszokban. + +@cindex több kotta +@cindex implicit book blokk +@funindex \book +@funindex book + +Egy fájlban több @code{\score} blokk lehet. Mindegyik egy-egy zeneművet +vagy tételt jelöl, de ezek egy kimeneti fájlban fognak megjelenni. Nem +szükséges @code{\book} blokkba foglalni őket -- ez implicite megtörténik. +Ha azonban több kimeneti fájlt szeretnénk kapni egy forrásfájlból, akkor több +@code{\book} blokkot kell megadnunk -- kimeneti fájlonként egyet-egyet. + +Összegezve: + +Minden @code{\book} blokk külön kimeneti fájlt eredményez (pl. egy-egy PDF +állományt). Ha nem szerepel explicit módon a forráskódban, akkor a LilyPond +körülveszi az egész forráskódot egy @code{\book} blokkal. + +Egy @code{\book} blokkon belül minden @code{\score} blokk különálló zenei +egységet jelöl. + +@cindex layout blokk helye + +Minden @code{\layout} blokk arra a @code{\score} vagy @code{\book} blokkra +érvényes, amelyben szerepel -- tehát egy @code{\score} blokkon belüli +@code{\layout} blokk csakis arra az egy @code{\score} blokkra vonatkozik, +de egy @code{\score} blokkon kívüli @code{\layout} blokk a @code{\score} +blokkot tartalmazó (akár explicit, akár implicit) @code{\book} blokkon belüli +minden @code{\score} blokkra érvényes. + +A részletek a @ruser{Multiple scores in a book} c. részben olvashatók. + +@cindex változók + +Fájljainkat áttekinthetőbbé tehetjük változók definiálásával (ld. +@ref{Művek szervezettebbé tétele változók segítségével}). Minden sablonban ezt +a módszert használjuk: + +@example +dallam = \relative c' @{ + c4 a b c +@} + +\score @{ + \dallam +@} +@end example + +Amikor a LilyPond feldolgozza ezt a fájlt, a @code{dallam} változó értékét +(azaz mindent az egyenlőségjel utáni zenei kifejezésből) beszúrja mindenhova, +ahol @code{\dallam} hivatkozást lát. A változók nevére nincs sok megkötés -- a +következők mind helyes példák: @code{dallam}, @code{jobbkéz}, @code{fuvola}, +@code{BII} stb. A @ref{Kevesebb gépelés változókkal és függvényekkel} c. +szakasz további információkat tartalmaz. Mindössze annyi a korlátozás, hogy a +változónevek csak betűket tartalmazhatnak, és nem ütközhetnek a +LilyPond parancsok neveivel. A pontos szabályok a @ruser{File structure} c. +részben vannak leírva. + +@seealso +A bemeneti formátum teljes definíciója a +@ruser{File structure} c. szakaszban található. + +@node A kotta egy összetett zenei kifejezés +@subsection A kotta egy összetett zenei kifejezés +@translationof Score is a (single) compound musical expression +@translationof Score is a (single) compound musical expression + +@funindex \score +@funindex score +@cindex score +@cindex összetett zenei kifejezés + +Az előző szakaszban (@ref{Bevezetés a LilyPond fájlok szerkezetébe}) már láttuk +a LilyPond fájlok általános felépítését. De a legfontosabb részt mintha +átugrottuk volna: mi kerüljön a @code{\score} blokk belsejébe? + +Valójában ez sokkal egyszerűbb, mint gondolnánk. Ez a mondat mindent +megmagyaráz: + +@quotation +@emph{A @code{\score} blokknak egy összetett zenei kifejezéssel kell +kezdődnie.} +@end quotation + +@noindent +Az összetett zenei kifejezés fogalmát már tisztáztuk +@ref{A zenei kifejezés fogalma} c. részben. Láttuk, hogy építhetünk fel nagy +zenei kifejezéseket kis részekből -- először hangokból, aztán akkordokból stb. +Most egy összetett zenei kifejezést vizsgálunk meg felülről lefelé. Az +egyszerűség kedvéért egy zongorakíséretes dal lesz a példánk. Először is +szükségünk van az énekes és a zongorista szólamára. + +@example +\score @{ + << + \new Staff = "ének" << + >> + \new PianoStaff = "zongora" << + >> + >> + \layout @{ @} +@} +@end example + +Elneveztük a két szólamot @qq{ének} és @qq{zongora} néven. Ez nem kötelező, +de jó szokás, hogy első pillantásra lássuk, melyik szólam mire szolgál. + +Emlékezzünk arra, hogy @code{<< ... >>} szolgál több szólam jelölésére. Ennek +hatására az ének- és a zongoraszólam egymás alatt fog megjelenni a kottában. +A zongoraszólam két kottasort fog tartalmazni, az énekszólam pedig egy +kottasort és egy dalszöveget, így mindkettőhöz @code{<< ... >>} blokk kell. +A dalszöveghez az @code{\addlyrics} parancsot fogjuk használni. Ha szükséges +feleleveníteni, az @ref{Egyszerű dalok kottázása} c. részben olvashatunk róla. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "ének" << + \new Voice = "dallam" { c'1 } + \addlyrics { Szólt } + >> + \new PianoStaff = "zongora" << + \new Staff = "jobbkéz" { c'1 } + \new Staff = "balkéz" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +Most megvan a teljes struktúra. Az énekszólam egy @code{Voice} kontextust +tartalmaz a hangoknak, és egy strófányi dalszöveget. A zongoraszólam pedig +a jobb- és balkéz kottasorait tartalmazza. + +Most elkezdhetjük kitölteni a hangokat. Elkezdhetnénk közvetlenül a Voice +kontextus belsejébe beleírni, hogy: + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +De ha ezt tennénk, a @code{\score} blokk nagyon bonyolult lenne, és nem lehetne +átlátni a szólamok szerkezetét. Így érdemes változókat használni. A dalszöveg +változóként való megadására a @code{\lyricmode} parancsot kell használni, hogy +a LilyPond dalszövegként és ne hangokként értelmezze a változó tartalmát. +(A dalszöveg egy külön beviteli mód, ezekből még több is van, ld. az +@ruser{Input modes} c. részt.) + +Tehát miután definiáltuk a megfelelő változókat, hivatkoztunk rájuk, és +basszuskulccsal láttuk el a balkezet, kész egy valódi mű kezdete: + +@lilypond[verbatim,quote,ragged-right] +dallam = \relative c'' { r4 d8\noBeam g, c4 r } +dalszöveg = \lyricmode { Szólt az Úr, } +jobbkéz = \relative c'' { 2~ } +balkéz = \relative c { b2 e2 } + +\score { + << + \new Staff = "ének" << + \new Voice = "dallam" { \dallam } + \addlyrics { \dalszöveg } + >> + \new PianoStaff = "zongora" << + \new Staff = "jobbkéz" { \jobbkéz } + \new Staff = "balkéz" { + \clef "bass" + \balkéz + } + >> + >> + \layout { } +} +@end lilypond + +Amikor a @code{\score} blokkot írjuk vagy olvassuk, mindig lassan, gondosan +járjunk el. Haladjunk kívülről befelé, a magas szintű felépítéstől a részletek +felé haladva. Nagyban segít, ha ügyelünk a behúzásokra -- minden blokk +kezdődjön egy tabulátorral beljebb, így az egy szinten levő blokkok ugyanolyan +mértékben lesznek behúzva. + +@seealso +Referencia: @ruser{Structure of a score}. + + +@node Zenei kifejezések egymásba ágyazása +@subsection Zenei kifejezések egymásba ágyazása +@translationof Nesting music expressions + +@cindex ideiglenes kottasorok +@cindex ossia + +Ossiák bevitelekor jön jól, hogy kottasorok bármikor, darab közben is +kezdődhetnek, és bármikor végződhetnek. Álljon itt erre egy példa: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Figyeljük meg, hogy a kulcs mérete némileg kisebb, mint a sor elején szereplő +kulcsé (mint ahogy kulcsváltásnál is). + +@cindex kottasorok pozíciója + +Az ossia a kottasor fölött is elhelyezkedhet: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Ebben a példában a még ismeretlen @code{\with} parancsot használtuk, amelyet +később ismertetünk. Most elég annyit tudni róla, hogy a kottasor bizonyos +tulajdonságainak módosítására szolgál. Itt egy olyan tulajdonságot adunk meg, +ami azt mondja, hogy az új kottasor a @qq{main} nevű kottasor felett +helyezkedjen el (ahelyett, hogy alatta helyezkedne el, ami az alapértelmezés). + + +@seealso +Az ossiákat általában kulcs és ütemmutató nélkül, valamint kisebb méretben +szedjük. Ehhez további új parancsok kellenek; ld. az @ref{Size of objects} és +@ruser{Ossia staves} szakaszokat. + + +@node A gerendák és ívek átfedhetik egymást +@subsection A gerendák és ívek átfedhetik egymást +@translationof On the un-nestedness of brackets and ties + +@cindex zárójeltípusok +@cindex zárójelek egymásba ágyazása + +Már sok zárójelfajtával találkoztunk a LilyPond fájlok írása közben. Ezekre +különböző szabályok vonatkoznak, amelyeket érdemes tisztázni. Ismételjük át +ezeket a típusokat. + +@need 50 +@multitable @columnfractions .3 .7 +@headitem Zárójelfajta + @tab Szerep +@item @code{@{ .. @}} + @tab Egymás után megszólaló hangokat tartalmaz +@item @code{< .. >} + @tab Egy akkord hangjait tartalmazza +@item @code{<< .. >>} + @tab Egyszerre megszólaló zenei kifejezéseket tartalmaz +@item @code{( .. )} + @tab Egy ív kezdetét és végét jelöli +@item @code{\( .. \)} + @tab Egy frazeálóív kezdetét és végét jelöli +@item @code{[ .. ]} + @tab Egy kézi gerenda kezdetét és végét jelöli +@end multitable + +A LilyPond világán kívül a különböző fajtájú zárójeleket megfelelően egymásba +kell ágyazni, pl. így: @code{<< [ @{ ( .. ) @} ] >>}. Tehát a záró +zárójeleknek pontosan fordított sorrendben kell állniuk, mint a nyitó +zárójeleknek. A fenti táblázatban szereplő első három típusnál (a blokkoknál) +ezt a LilyPond is megköveteli. A többi parancsnál ez nem követelmény. +Valójában ezekre nem is úgy érdemes gondolni, mint a zárójelekre, hanem olyan +jelzésekre, amelyek zenei elemek kezdetét és végét jelölik. + +Tehát például egy frazeálóív kezdődhet egy kézzel megadott gerenda előtt, és +befejeződhet a gerenda vége előtt -- lehet, hogy nem a legzeneibb megoldás, de +lehetséges: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] + { g8\( a b[ c b\) a] } +@end lilypond + +Általánosságban az ívek, frazeálóívek, kötőívek és gerendák átnyúlhatnak +a triolák és előkék határain. A következő példában az 1. sorban egy gerenda, +a 2. sorban egy kötőív nyúl bele egy triolába, a 3. és 4. sorban pedig +mindezek mellett még egy kötőív is található két triola között, valamint egy +frazeálóív, amely túlnyúlik a triolán. + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + r16[ g16 \times 2/3 {r16 e'8] } + g16( a \times 2/3 {b d) e' } + g8[( a \times 2/3 {b d') e'~]} + \times 4/5 {e'32\( a b d' e'} a'4.\) +} +@end lilypond + + +@node A szólamok zenét tartalmaznak +@section A szólamok zenét tartalmaznak +@translationof Voices contain music + + +Singers need voices to sing, and so does LilyPond. +The actual music for all instruments in a score +is contained in Voices -- the most fundamental +of all LilyPond's concepts. + +@menu +* Hangzatos szólamok:: +* Szólamok kézi létrehozása:: +* Szólamok és vokális zene:: +@end menu + +@node Hangzatos szólamok +@subsection Hangzatos szólamok +@translationof I'm hearing Voices + + +@cindex polyphony +@cindex layers +@cindex multiple voices +@cindex voices, multiple +@cindex Voice context +@cindex context, Voice +@cindex simultaneous music +@cindex music, simultaneous +@cindex concurrent music +@cindex music, concurrent +@cindex voices vs. chords +@cindex chords vs. voices + +The lowest, most fundamental or innermost layers in a LilyPond +score are called @q{Voice contexts} or just @q{Voices} for short. +Voices are sometimes called @q{layers} in other notation +packages. + +In fact, a Voice layer or context is the only one which can contain +music. If a Voice context is not explicitly declared one is created +automatically, as we saw at the beginning of this chapter. Some +instruments such as an Oboe can play only one note at a time. Music +written for such instruments is monophonic and requires just a single +voice. Instruments which can play more than one note at a time like +the piano will often require multiple voices to encode the different +concurrent notes and rhythms they are capable of playing. + +A single voice can contain many notes in a chord, of course, +so when exactly are multiple voices needed? Look first at +this example of four chords: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +This can be expressed using just the single angle bracket chord +symbols, @code{< ... >}, and for this just a single voice is +needed. But suppose the F-sharp were actually an eighth-note +followed by an eighth-note G, a passing note on the way to the A? +Now we have two notes which start at the same time but have +different durations: the quarter-note D and the eighth-note +F-sharp. How are these to be coded? They cannot be written as +a chord because all the notes in a chord must have the same +duration. And they cannot be written as two sequential notes +as they need to start at the same time. This is when two +voices are required. + +Let us see how this is done in LilyPond input syntax. + +@funindex << \\ >> +@funindex \\ + +The easiest way to enter fragments with more than one voice on a +staff is to enter each voice as a sequence (with @code{@{...@}}), +and combine them simultaneously with angle brackets, @code{<<...>>}. +The fragments must also be separated with double backward slashes, +@code{\\}, to place them in separate voices. Without these, the +notes would be entered into a single voice, which would usually +cause errors. This technique is particularly suited to pieces of +music which are largely monophonic with occasional short sections +of polyphony. + +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] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Notice how the stems of the second voice now point down. + +Here's another simple example: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> +<< { a2. r4 } \\ { fis2. s4 } >> +@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 +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] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +@cindex voices, naming +@cindex voices crossing brackets +@cindex slurs crossing brackets +@cindex ties crossing brackest + +This example has just two voices, but the same construct may be +used to encode three or more voices by adding more back-slash +separators. + +The Voice contexts bear the names @code{"1"}, @code{"2"}, etc. +In each of these contexts, the vertical direction of slurs, +stems, ties, dynamics etc., is set appropriately. + +@lilypond[quote,verbatim,fragment] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> + << { d2 e2 } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b4 c2 } >> +} +@end lilypond + +These voices are all separate from the main voice that contains +the notes just outside the @code{<< .. >>} construct. Let's call +this the @emph{simultaneous construct}. Slurs and ties may only +connect notes within the same voice, so slurs and ties cannot go +into or out of a simultaneous construct. Conversely, +parallel voices from separate simultaneous constructs on the same +staff are the same voice. Other voice-related properties also +carry across simultaneous constructs. Here is the same example, +with different colors and note heads for each voice. Note that +changes in one voice do not affect other voices, but they do +persist in the same voice later. Note also that tied notes may be +split across the same voices in two constructs, shown here in the +blue triangle voice. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> + << % Bar 2 + % Voice 1 continues + { d2 e2 } + \\ + % Voice 2 continues + { c8 b16 a b8 g ~ g2 } + \\ + { + \voiceThreeStyle + s4 b4 c2 + } + >> +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +The commands @code{\voiceXXXStyle} are mainly intended for use in +educational documents such as this one. They modify the color +of the note head, the stem and the beams, and the style of the +note head, so that the voices may be easily distinguished. +Voice one is set to red diamonds, voice two to blue triangles, +voice three to green crossed circles, and voice four (not used +here) to magenta crosses; @code{\voiceNeutralStyle} (also not +used here) reverts the style back to the default. +We shall see later how commands like these may be created by the +user. +See @ref{Visibility and color of objects} and +@ref{Using variables for tweaks}. + +@cindex polyphony and relative note entry +@cindex relative note entry and polyphony + +Polyphony does not change the relationship of notes within a +@code{\relative @{ @}} block. Each note is still calculated +relative to the note immediately preceding it, or to the first +note of the preceding chord. So in + +@example +\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} +@end example + +@noindent +@code{noteB} is relative to @code{noteA} @* +@code{noteC} is relative to @code{noteB}, not @code{noteA}; @* +@code{noteD} is relative to @code{noteB}, not @code{noteA} or +@code{noteC}; @* +@code{noteE} is relative to @code{noteD}, not @code{noteA}. + +An alternative way, which may be clearer if the notes in the +voices are widely separated, is to place a @code{\relative} +command at the start of each voice: + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +\\ + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +Let us finally analyze the voices in a more complex piece of music. +Here are the notes from the first two bars of the second of Chopin's +Deux Nocturnes, Op 32. This example will be used at later stages in +this and the next chapter to illustrate several techniques for +producing notation, so please ignore for now anything in the +underlying code which looks mysterious and concentrate just on the +music and the voices -- the complications will all be explained in +later sections. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +The direction of the stems is often used to indicate the continuity of +two simultaneous melodic lines. Here the stems of the highest notes +are all pointing up and the stems of the lower notes are all pointing +down. This is the first indication that more than one voice is +required. + +But the real need for multiple voices arises when notes +which start at the same time have different durations. +Look at the notes which start at beat three in the first +bar. The A-flat is a dotted quarter note, the F is a +quarter note and the D-flat is a half note. These +cannot be written as a chord as all the notes in a chord +must have the same duration. Neither can they be written +as sequential notes, as they must start at the same time. +This section of the bar requires three voices, and the +normal practice would be to write the whole bar as three +voices, as shown below, where we have used different note heads +and colors for the three voices. Again, the code behind this +example will be explained later, so ignore anything you do +not understand. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> + 1 +} +@end lilypond + + +Let us try to encode this music from scratch. As we +shall see, this encounters some difficulties. We begin as +we have learnt, using the @code{<< \\ >>} construct to +enter the music of the first bar in three voices: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } + >> + 1 +} +@end lilypond + +@cindex stem down +@cindex voices and stem directions +@cindex stem directions and voices +@cindex stem up + +The stem directions are automatically assigned with the +odd-numbered voices taking upward stems and the even-numbered +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 +adding another pair of @code{\\}. + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des2 } + >> + 1 +} +@end lilypond + +@noindent +We see that this fixes the stem direction, but exposes a problem +sometimes encountered with multiple voices -- the stems of the notes +in one voice can collide with the note heads in other voices. In +laying out the notes, LilyPond allows the notes or chords from two +voices to occupy the same vertical note column provided the stems are +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 +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}. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + +@node Szólamok kézi létrehozása +@subsection Szólamok kézi létrehozása +@translationof Explicitly instantiating voices + + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex voice contexts, creating + +Voice contexts can also be created manually +inside a @code{<< >>} block to create polyphonic music, using +@code{\voiceOne} ... @code{\voiceFour} to indicate the required +directions of stems, slurs, etc. In longer scores this method +is clearer, as it permits the voices to be separated and to be +given more descriptive names. + +Specifically, the construct @code{<< \\ >>} which we used in +the previous section: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +is equivalent to + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Both of the above would produce + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex voices, reverting to single +@cindex reverting to a single voice + +The @code{\voiceXXX} commands set the direction of stems, slurs, +ties, articulations, text annotations, augmentation dots of dotted +notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} +make these objects point upwards, while @code{\voiceTwo} and +@code{\voiceFour} make them point downwards. These commands also +generate a horizontal shift for each voice when this is required +to avoid clashes of note heads. The command @code{\oneVoice} +reverts the settings back to the normal values for a single voice. + +Let us see in some simple examples exactly what effect +@code{\oneVoice}, @code{\voiceOne} and @code{voiceTwo} have on +markup, ties, slurs, and dynamics: + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + % Default behavior or behavior after \oneVoice + c d8~ d e4( f g a) b-> c +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + \voiceOne + c d8~ d e4( f g a) b-> c + \oneVoice + c, d8~ d e4( f g a) b-> c +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + \voiceTwo + c d8~ d e4( f g a) b-> c + \oneVoice + c, d8~ d e4( f g a) b-> c +} +@end lilypond + +Now let's look at three different ways to notate the same passage +of polyphonic music, each of which is advantageous in different +circumstances, using the example from the previous section. + +An expression that appears directly inside a @code{<< >>} belongs +to the main voice (but, note, @strong{not} in a @code{<< \\ >>} +construct). This is useful when extra voices appear while the +main voice is playing. Here is a more correct rendition of our +example. The red diamond-shaped notes +demonstrate that the main melody is now in a single voice context, +permitting a phrasing slur to be drawn over them. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e2) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b4 c2 | + } + >> +} +@end lilypond + +@cindex nesting music expressions +@cindex nesting simultaneous constructs +@cindex nesting voices +@cindex voices, temporary +@cindex voices, nesting + +More deeply nested polyphony constructs are possible, and if a +voice appears only briefly this might be a more natural way to +typeset the music: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e2) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ + << + { c8 b16 a b8 g~ g2 } + \new Voice { + \voiceThree + s4 b4 c2 + } + >> + } + >> +} +@end lilypond + +@cindex spacing notes + +This method of nesting new voices briefly is useful +when only small sections of the music +are polyphonic, but when the whole staff is largely polyphonic +it can be clearer to use multiple voices throughout, using +spacing notes to step over sections where the voice is silent, +as here: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e2) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b4 c2 | + } +>> +@end lilypond + +@subsubheading Note columns + +@cindex note column +@cindex note collisions +@cindex collisions, notes +@cindex shift commands +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +Closely spaced notes in a chord, or notes occurring at the same +time in different voices, are arranged in two, occasionally more, +columns to prevent the note heads overlapping. These are called +note columns. There are separate columns for each voice, and +the currently specified voice-dependent shift is applied to the +note column if there would otherwise be a collision. This can +be seen in the example above. In bar 2 the C in voice two is +shifted to the right relative to the D in voice one, and in the +final chord the C in voice three is also shifted to the right +relative to the other notes. + +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 +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 right and voices two and four to the left. + +@code{\shiftOnn} and @code{\shiftOnnn} define further shift +levels which may be specified temporarily to resolve collisions +in complex situations -- see @ref{Real music example}. + +A note column can contain just one note (or chord) from a voice +with stems up and one note (or chord) from a voice with stems +down. If notes from two voices which have their stems in the +same direction are placed at the same position and both voices +have no shift or the same shift specified, the error message +@qq{Too many clashing note columns} will be produced. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + +@node Szólamok és vokális zene +@subsection Szólamok és vokális zene +@translationof Voices and vocals + +Vocal music presents a special difficulty: we need to combine two +expressions -- notes and lyrics. + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics context, creating +@cindex lyrics, linking to voice + +You have already seen the @code{\addlyrics@{@}} command, which +handles simple scores well. However, this technique is +quite limited. For more complex music, you must introduce the +lyrics in a @code{Lyrics} context using @code{\new Lyrics} and +explicitly link +the lyrics to the notes with @code{\lyricsto@{@}}, using the +name assigned to the Voice. + +@lilypond[quote,verbatim,fragment] +<< + \new Voice = "one" \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + \new Lyrics \lyricsto "one" { + No more let sins and sor -- rows grow. + } +>> +@end lilypond + +Note that the lyrics must be linked to a @code{Voice} context, +@emph{not} a @code{Staff} context. This is a case where it is +necessary to create @code{Staff} and @code{Voice} contexts +explicitly. + +@cindex lyrics and beaming +@cindex beaming and lyrics +@funindex \autoBeamOff +@funindex autoBeamOff + +The automatic beaming which LilyPond uses by default works well +for instrumental music, but not so well for music with lyrics, +where beaming is either not required at all or is used to indicate +melismata in the lyrics. In the example above we use the command +@code{\autoBeamOff} to turn off the automatic beaming. + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode +@cindex vocal score structure +@cindex choir staff + +Let us reuse the earlier example from Judas Maccabæus to +illustrate this more flexible technique. We first recast +it to use variables so the music and lyrics can be separated +from the staff structure. We also introduce a ChoirStaff +bracket. The lyrics themselves must be introduced with +@code{\lyricmode} to ensure they are interpreted as lyrics +rather than music. + +@lilypond[quote,verbatim] +global = { \time 6/8 \partial 8 \key f \major} +SopOneMusic = \relative c'' { + c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 | } +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' | } +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ | } +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, | } + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +This is the basic structure of all vocal scores. More staves may be +added as required, more voices may be added to the staves, more verses +may be added to the lyrics, and the variables containing the music can +easily be placed in separate files should they become too long. + +@cindex hymn structure +@cindex SATB structure +@cindex vocal scores with multiple verses +@cindex multiple vocal verses +@cindex verses, multiple vocal + +Here is an example of the first line of a hymn with four +verses, set for SATB. In this case the words for all four +parts are the same. Note how we use variables to separate the +music notation and words from the staff structure. See too +how a variable, which we have chosen to call @q{TimeKey}, is used +to hold several commands for use within the two staves. In other +examples this is often called @q{global}. + +@lilypond[quote,verbatim] +TimeKey = { \time 4/4 \partial 4 \key c \major} +SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g | } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e | } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 | } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 | } +VerseOne = \lyricmode { + E -- | ter -- nal fa -- ther, | strong to save, | } +VerseTwo = \lyricmode { + O | Christ, whose voice the | wa -- ters heard, | } +VerseThree = \lyricmode { + O | Ho -- ly Spi -- rit, | who didst brood | } +VerseFour = \lyricmode { + O | Tri -- ni -- ty of | love and pow'r | } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + +@cindex verse and refrain + +We end with an example to show how we might code a solo verse which +continues into a two-part refrain in two staves. The positioning +of the sequential and simultaneous sections to achieve this within +a single score is quite tricky, so follow the explanation carefully! + +Let's start with a score block containing a @code{ChoirStaff}, as +we would like the brace to appear at the start of the chorus. +Normally you would need angle brackets after @code{\new ChoirStaff} +to bring in all the staves in parallel, but here we want to +defer the parallelism during the solo so we use braces, although +angle brackets here wouldn't hurt. Inside the @code{ChoirStaff} we +want first the staff which will contain the verse. This must +contain notes and lyrics in parallel, so here we need angle +brackets around the @code{\new Voice} and @code{\new Lyrics} to +start them at the same time: + +@lilypond[quote,verbatim,ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 + g g g | b b b | +} +versewords = \lyricmode { + One two three four five six +} +\score { + \new ChoirStaff { + \new Staff << + \new Voice = "verse" { + \versenotes \break + } + \new Lyrics \lyricsto verse { + \versewords + } + >> + } +} +@end lilypond + +That gives the verse line. + +Now we want to continue with refrainA on the same staff while a +second staff is introduced in parallel with it for refrainB, so +this is a parallel section which must be positioned immediately +following the @code{\break} in the verse Voice. Yes, @emph{within} +the verse Voice! Here's that parallel section. More staves +could be introduced here in the same way. + +@example +<< + \refrainnotesA + \new Lyrics \lyricsto verse @{ + \refrainwordsA + @} + \new Staff << + \new Voice = "refrainB" @{ + \refrainnotesB + @} + \new Lyrics \lyricsto "refrainB" @{ + \refrainwordsB + @} + >> +>> +@end example + +Here's the final result with two staves in the chorus showing +how the parallel section is positioned within the verse Voice: + +@lilypond[quote,verbatim, ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 + g g g | b b b | +} +refrainnotesA = \relative c'' { + \time 2/4 + c c | g g \bar "|." +} +refrainnotesB = \relative c { + \clef "bass" + \key g \major + c e | d d | +} +versewords = \lyricmode { + One two three four five six +} +refrainwordsA = \lyricmode { + la la la la +} +refrainwordsB = \lyricmode { + dum dum dum dum +} +\score { + \new ChoirStaff { + \new Staff << + \new Voice = "verse" { + \versenotes \break + << + \refrainnotesA + \new Lyrics \lyricsto "verse" { + \refrainwordsA + } + \new Staff << + \new Voice = "refrainB" { + \refrainnotesB + } + \new Lyrics \lyricsto "refrainB" { + \refrainwordsB + } + >> + >> + } + \new Lyrics \lyricsto "verse" { + \versewords + } + >> + } +} +@end lilypond + +@cindex book, example of using +@funindex \book +@funindex book + +However, although this is an interesting and useful exercise to +help you to understand how sequential and simultaneous blocks work, +in practice one would perhaps choose to code this as two +@code{\score} blocks within an implicit @code{\book} block, as +follows: + +@lilypond[quote,verbatim,ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 + g g g | b b b | +} +refrainnotesA = \relative c'' { + \time 2/4 + c c | g g \bar "|." +} +refrainnotesB = \relative c { + \clef "bass" + \key g \major + c e | d d | +} +versewords = \lyricmode { + One two three four five six +} +refrainwordsA = \lyricmode { + la la la la +} +refrainwordsB = \lyricmode { + dum dum dum dum +} +\score { + \new Staff << + \new Voice = "verse" { + \versenotes + } + \new Lyrics \lyricsto "verse" { + \versewords + } + >> +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "refrainA" { + \refrainnotesA + } + \new Lyrics \lyricsto "refrainA" { + \refrainwordsA + } + >> + \new Staff << + \new Voice = "refrainB" { + \refrainnotesB + } + \new Lyrics \lyricsto "refrainB" { + \refrainwordsB + } + >> + >> +} +@end lilypond + + +@seealso +Notation Reference: @ruser{Vocal music}. + + +@node Kontextusok és ábrázolók +@section Kontextusok és ábrázolók +@translationof Contexts and engravers + + +Kontextusok és ábrázolók have been mentioned informally +in earlier sections; we now must look at +these concepts in more detail, as they are important +in the fine-tuning of LilyPond output. + + +@menu +* A kontextus fogalma:: +* Kontextusok létrehozása:: +* Az ábrázoló fogalma:: +* Kontextusok tulajdonságainak módosítása:: +* Ábrázolók hozzáadása és eltávolítása:: +@end menu + +@node A kontextus fogalma +@subsection A kontextus fogalma +@translationof Contexts explained + +@cindex contexts explained + +When music is printed, many notational elements which do not +appear explicitly in the input file must be added to the +output. For example, compare the input and output of the +following example: + +@lilypond[quote,verbatim,relative=2,fragment] +cis4 cis2. g4 +@end lilypond + +The input is rather sparse, but in the output, bar lines, +accidentals, clef, and time signature have been added. When +LilyPond @emph{interprets} the input the musical information +is parsed from left to right, similar to the way a performer +reads the score. While reading the input, the program remembers +where measure boundaries are, and which pitches require explicit +accidentals. This information must be held on several levels. +For example, an accidental affects only a single staff, while +a bar line must be synchronized across the entire score. + +Within LilyPond, these rules and bits of information are grouped in +@emph{Contexts}. We have already introduced the @code{Voice} context. +Others are the @code{Staff} and @code{Score} contexts. Contexts are +hierarchical to reflect the hierarchical nature of a musical score. +For example: a @code{Staff} context can contain many @code{Voice} +contexts, and a @code{Score} context can contain many @code{Staff} +contexts. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Each context has the responsibility for enforcing some notation rules, +creating some notation objects and maintaining the associated +properties. For example, the @code{Voice} context may introduce an +accidental and then the @code{Staff} context maintains the rule to +show or suppress the accidental for the remainder of the measure. + +As another example, the synchronization of bar lines is, by default, +handled in the @code{Score} context. +However, in some music we may not want the bar lines to be +synchronized -- consider a polymetric score in 4/4 and 3/4 time. +In such cases, we must modify the default settings of the +@code{Score} and @code{Staff} contexts. + +For very simple scores, contexts are created implicitly, and you need +not be aware of them. For larger pieces, such as anything with more +than one staff, they must be +created explicitly to make sure that you get as many staves as you +need, and that they are in the correct order. For typesetting pieces +with specialized notation, it is usual to modify existing, or +even to define totally new, contexts. + +In addition to the @code{Score,} @code{Staff} and +@code{Voice} contexts there are contexts which fit between +the score and staff levels to control staff groups, such as the +@code{PianoStaff} and @code{ChoirStaff} contexts. There +are also alternative staff and voice contexts, and contexts for +lyrics, percussion, fret boards, figured bass, etc. + +The names of all context types are formed from one or more +words, each word being capitalized and joined immediately to the +preceding word with no hyphen or underscore, e.g., +@code{GregorianTranscriptionStaff}. + + +@seealso +Notation Reference: @ruser{A kontextus fogalma}. + + +@node Kontextusok létrehozása +@subsection Kontextusok létrehozása +@translationof Creating contexts + + +@funindex \new +@funindex new +@cindex new contexts +@cindex creating contexts +@cindex contexts, creating + +In an input file a score block, introduced with a @code{\score} +command, contains a single music expression and an associated +output definition (either a @code{\layout} or a @code{\midi} block). +The @code{Score} context is usually left to be created automatically +when the interpretation of that music expression starts. + +For scores with only one voice and one staff, the @code{Voice} and +@code{Staff} contexts may also be left to be created automatically, +but for more complex scores it is necessary to create them by hand. +The simplest command that does this is @code{\new}. It is prepended +to a music expression, for example + +@example +\new @var{type} @var{music-expression} +@end example + +@noindent +where @var{type} is a context name (like @code{Staff} or +@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{Kontextusok tulajdonságainak módosítása}.) + +You have seen many practical examples which created new +@code{Staff} and @code{Voice} contexts in earlier sections, but +to remind you how these commands are used in practice, here's an +annotated real-music example: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \key g \minor + \clef "treble" + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. + d4 ees16 c8. + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \key g \minor + \clef "bass" + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, + g8 ees, + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees + g4 ees + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Note how all the statements which open a block with either a +curly bracket, @code{@{}, or double angle brackets, @code{<<}, +are indented by two further spaces, and the corresponding +closing bracket is indented by exactly the same amount. While +this is not required, following this practice will greatly +reduce the number of @q{unmatched bracket} errors, and is +strongly recommended. It enables the structure of the music to +be seen at a glance, and any unmatched brackets will be obvious. +Note too how the LH staff is created using double angle brackets +because it requires two voices for its music, whereas the RH staff +is created with a single music expression surrounded by curly +brackets because it requires only one voice.) + +@cindex contexts, naming +@cindex naming contexts + +The @code{\new} command may also give an identifying name to the +context to distinguish it from other contexts of the same type, + +@example +\new @var{type} = @var{id} @var{music-expression} +@end example + +Note the distinction between the name of the context type, +@code{Staff}, @code{Voice}, etc, and the identifying name of a +particular instance of that type, which can be any sequence of letters +invented by the user. Digits and spaces can also be used in the +identifying name, but then it has to be placed in quotes, +i.e. @code{\new Staff = "MyStaff 1" @var{music-expression}}. +The identifying name is used to +refer back to that particular instance of a context. We saw this in +use in the section on lyrics, see @ref{Szólamok és vokális zene}. + + +@seealso +Notation Reference: @ruser{Kontextusok létrehozása}. + + +@node Az ábrázoló fogalma +@subsection Az ábrázoló fogalma +@subsection Az ábrázoló fogalma + +@cindex engravers + +Every mark on the printed output of a score produced by LilyPond +is produced by an @code{Engraver}. Thus there is an engraver +to print staves, one to print note heads, one for stems, one for +beams, etc, etc. In total there are over 120 such engravers! +Fortunately, for most scores it is not necessary to know about +more than a few, and for simple scores you do not need to know +about any. + +Engravers live and operate in Contexts. Engravers such as the +@code{Metronome_mark_engraver}, whose action and output apply to the +score as a whole, operate in the highest level context -- the +@code{Score} context. + +The @code{Clef_engraver} and @code{Key_engraver} are to be +found in every @code{Staff} Context, as different staves may require +different clefs and keys. + +The @code{Note_heads_engraver} and @code{Stem_engraver} live +in every @code{Voice} context, the lowest level context of all. + +Each engraver processes the particular objects associated +with its function, and maintains the properties that relate +to that function. These properties, like the properties +associated with contexts, may be modified to change the +operation of the engraver or the appearance of those elements +in the printed score. + +Engravers all have compound names formed from words which +describe their function. Just the first word is capitalized, +and the remainder are joined to it with underscores. Thus +the @code{Staff_symbol_engraver} is responsible for creating the +lines of the staff, the @code{Clef_engraver} determines and sets +the pitch reference point on the staff by drawing a clef symbol. + +Here are some of the most common engravers together with their +function. You will see it is usually easy to guess the function +from the name, or vice versa. + +@multitable @columnfractions .3 .7 +@headitem Engraver + @tab Function +@item Accidental_engraver + @tab Makes accidentals, cautionary and suggested accidentals +@item Beam_engraver + @tab Engraves beams +@item Clef_engraver + @tab Engraves clefs +@item Completion_heads_engraver + @tab Splits notes which cross bar lines +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Creates hairpins and dynamic texts +@item Forbid_line_break_engraver + @tab Prevents line breaks if a musical element is still active +@item Key_engraver + @tab Creates the key signature +@item Metronome_mark_engraver + @tab Engraves metronome marking +@item Note_heads_engraver + @tab Engraves note heads +@item Rest_engraver + @tab Engraves rests +@item Staff_symbol_engraver + @tab Engraves the five (by default) lines of the staff +@item Stem_engraver + @tab Creates stems and single-stem tremolos +@item Time_signature_engraver + @tab Creates time signatures +@end multitable + +@smallspace + +We shall see later how the output of LilyPond can be changed +by modifying the action of Engravers. + + +@seealso +Internals reference: @rinternals{Engravers and Performers}. + + +@node Kontextusok tulajdonságainak módosítása +@subsection Kontextusok tulajdonságainak módosítása +@translationof Modifying context properties + +@cindex context properties +@cindex context properties, modifying +@cindex modifying context properties +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +Contexts are responsible for holding the values of a number of +context @emph{properties}. Many of them can be changed to +influence the interpretation of the input and so change the +appearance of the output. They are changed by the +@code{\set} command. This takes the form + +@example +\set @emph{ContextName}.@emph{propertyName} = #@emph{value} +@end example + +Where the @emph{ContextName} is usually @code{Score}, +@code{Staff} or @code{Voice}. It may be omitted, +in which case the current context (typically @code{Voice}) is assumed. + +The names of context properties consist of words joined +together with no hyphens or underscores, all except the +first having a capital letter. Here are a few examples +of some commonly used ones. There are many more. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem propertyName + @tab Type + @tab Function + @tab Example Value +@item extraNatural + @tab Boolean + @tab If true, set extra natural signs before accidentals + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Integer + @tab Set the current bar number + @tab @code{50} +@item doubleSlurs + @tab Boolean + @tab If true, print slurs both above and below notes + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Text + @tab Set the name to be placed at the start of the staff + @tab @code{"Cello I"} +@item fontSize + @tab Real + @tab Increase or decrease the font size + @tab @code{2.4} +@item stanza + @tab Text + @tab Set the text to print before the start of a verse + @tab @code{"2"} +@end multitable + +@noindent +where a Boolean is either True (@code{#t}) or False (@code{#f}), +an Integer is a positive whole number, a Real is a positive +or negative decimal number, and text is enclosed in double +apostrophes. Note the occurrence of hash signs, +(@code{#}), in two different places -- as part of the Boolean +value before the @code{t} or @code{f}, and before @emph{value} +in the @code{\set} statement. So when a Boolean is being +entered you need to code two hash signs, e.g., @code{##t}. + +@cindex properties operating in contexts +@cindex setting properties within contexts + +Before we can set any of these properties we need to know +in which context they operate. Sometimes this is obvious, +but occasionally it can be tricky. If the wrong context +is specified, no error message is produced, but the expected +action will not take place. For example, the +@code{instrumentName} clearly lives in the @code{Staff} context, since +it is the staff that is to be named. +In this example the first staff is labelled, but not the second, +because we omitted the context name. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c4 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d4 d + } +>> +@end lilypond + +Remember the default context name is @code{Voice}, so the second +@code{\set} command set the property @code{instrumentName} in the +@code{Voice} context to @qq{Alto}, but as LilyPond does not look +for any such property in the @code{Voice} context, no +further action took place. This is not an error, and no error +message is logged in the log file. + +Similarly, if the property name is mis-spelt no error message is +produced, and clearly the expected action cannot be performed. In +fact, you can set any (fictitious) @q{property} using any name you +like in any context that exists by using the @code{\set} command. But +if the name is not known to LilyPond it will not cause any action to +be taken. Some text editors with special support for LilyPond input +files document property names with bullets when you hover them with +the mouse, like JEdit with LilyPondTool, or highlight unknown property +names differently, like ConTEXT. If you do not use an editor with +such features, it is recommended to check the property name in the +Internals Reference: see @rinternals{Tunable context properties}, or +@rinternals{Contexts}. + +The @code{instrumentName} property will take effect only +if it is set in the @code{Staff} context, but +some properties can be set in more than one context. +For example, the property @code{extraNatural} is by +default set to ##t (true) for all staves. +If it is set to ##f (false) in one particular @code{Staff} +context it applies just to the accidentals on that staff. +If it is set to false in the @code{Score} context +it applies to all staves. + +So this turns off extra naturals in one staff: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais4 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais4 aes + } +>> +@end lilypond + +@noindent +and this turns them off in all staves: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais4 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais4 aes + } +>> +@end lilypond + +As another example, if @code{clefOctavation} is set in +the @code{Score} context this immediately changes the value +of the octavation in all current staves and sets a new default +value which will be applied to all staves. + +The opposite command, @code{\unset}, effectively removes the +property from the context, which causes most properties to +revert to their default value. Usually @code{\unset} is not +required as a new @code{\set} command will achieve what is +wanted. + +The @code{\set} and @code{\unset} commands can appear anywhere +in the input file and will take effect from the time they are +encountered until the end of the score or until the property is +@code{\set} or @code{\unset} again. Let's try changing the +font size, which affects the size of the note heads (among +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] +c4 +% make note heads smaller +\set fontSize = #-4 +d e +% make note heads larger +\set fontSize = #2.5 +f g +% return to default size +\unset fontSize +a b +@end lilypond + +We have now seen how to set the values of several different types of +property. Note that integers and numbers are always preceded by a +hash sign, @code{#}, while a true or false value is specified by +@code{##t} and @code{##f}, with two hash signs. A text property +should be enclosed in double quotation signs, as above, although we +shall see later that text can actually be specified in a much more +general way by using the very powerful @code{\markup} command. + +@subsubheading Setting context properties with @code{\with} + +@funindex \with +@funindex with +@cindex context properties, setting with \with + +The default value of context properties may be set at the time the +context is created. Sometimes this is a clearer way of setting a +property value if it is to remain fixed for the duration of +the context. When a context is created with a @code{\new} +command it may be followed immediately by a @code{\with @{ .. @}} +block in which the default property values are set. For example, +if we wish to suppress the printing of extra naturals for the +duration of a staff we would write: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +like this: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff + \relative c'' { + gis ges aes ais + } + \new Staff \with { extraNatural = ##f } + \relative c'' { + gis ges aes ais + } +>> +@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'' { + gis ges aes ais + } + } + \new Staff { + \relative c'' { + gis 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}. + +@cindex fontSize, default and setting + +So if the @code{fontSize} property is set in a @code{\with} clause +it sets the default value of the font size. If it is later changed +with @code{\set}, this new default value may be restored with the +@code{\unset fontSize} command. + +@subsubheading Setting context properties with @code{\context} + +@cindex context properties, setting with \context +@funindex \context +@funindex context + +The values of context properties may be set in @emph{all} contexts +of a particular type, such as all @code{Staff} contexts, with a single +command. The context type is identified by using its +type name, like @code{Staff}, prefixed by a back-slash: @code{\Staff}. +The statement which sets the property value is the same as that in a +@code{\with} block, introduced above. It is placed in a +@code{\context} block within a @code{\layout} block. Each +@code{\context} block will affect all contexts of the type specified +throughout the @code{\score} or @code{\book} block in which the +@code{\layout} block appears. Here is a example to show the format: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@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} commands embedded in music statements. + + +@seealso +Notation Reference: +@ruser{Changing context default settings}. +@ruser{The set command}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Ábrázolók hozzáadása és eltávolítása +@subsection Ábrázolók hozzáadása és eltávolítása +@translationof Adding and removing engravers + +@cindex engravers, adding +@cindex adding engravers +@cindex engravers, removing +@cindex removing engravers + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +We have seen that contexts each contain several engravers, each +of which is responsible for producing a particular part of the +output, like bar lines, staves, note heads, stems, etc. If an +engraver is removed from a context, it can no longer produce its +output. This is a crude way of modifying the output, but it +can sometimes be useful. + +@subsubheading Changing a single context + +To remove an engraver from a single context we use the +@code{\with} command placed immediately after the context creation +command, as in the previous section. + +As an illustration, let's repeat an example from the previous section +with the staff lines removed. Remember that the staff lines are +produced by the @code{Staff_symbol_engraver}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 + \set fontSize = #-4 % make note heads smaller + d e + \set fontSize = #2.5 % make note heads larger + f g + \unset fontSize % return to default size + a b +} +@end lilypond + +@cindex ambitus engraver + +Engravers can also be added to individual contexts. +The command to do this is + +@code{\consists @var{Engraver_name}}, + +@noindent +placed inside a @code{\with} block. Some vocal scores have an ambitus +placed at the beginning of a staff to indicate the range of notes in +that staff -- see @rglos{ambitus}. The ambitus is produced by the +@code{Ambitus_engraver}, which is not normally included in any +context. If we add it to the @code{Voice} context, it calculates the +range from that voice only: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } + \relative c'' { + \voiceOne + c a b g + } + \new Voice + \relative c' { + \voiceTwo + c e d f + } +>> +@end lilypond + +@noindent +but if we add the ambitus engraver to the +@code{Staff} context, it calculates the range from all +the notes in all the voices on that staff: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver + } + << + \new Voice + \relative c'' { + \voiceOne + c a b g + } + \new Voice + \relative c' { + \voiceTwo + c e d f + } +>> +@end lilypond + +@subsubheading Changing all contexts of the same type + +@funindex \layout +@funindex layout + +The examples above show how to remove or add engravers to +individual contexts. It is also possible to remove or add +engravers to every context of a specific type by placing the +commands in the appropriate context in a @code{\layout} +block. For example, if we wanted to show an ambitus for every +staff in a four-staff score, we could write + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff << + \relative c'' { + c a b g + } + >> + \new Staff << + \relative c' { + c a b g + } + >> + \new Staff << + \clef "G_8" + \relative c' { + c a b g + } + >> + \new Staff << + \clef "bass" + \relative c { + c a b g + } + >> + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +The values of context properties may also be set +for all contexts of a particular type by including the +@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}. + + +@node A sablonok kibővítése +@section A sablonok kibővítése +@translationof Extending the templates + +You've read the tutorial, you know how to write music, you +understand the fundamental concepts. But how can you +get the staves that you want? Well, you can find lots of +templates (see @ref{Templates}) which may give you a start. +But what if you want something that isn't covered there? Read on. + +@menu +* Szoprán és cselló:: +* Négyszólamú vegyeskar:: +* Kotta létrehozása az alapoktól:: +* Kevesebb gépelés változókkal és függvényekkel:: +* Partitúra és szólamkották:: +@end menu + +@node Szoprán és cselló +@subsection Szoprán és cselló +@translationof Soprano and cello + +@cindex template, modifying +@cindex modifying templates + +Start off with the template that seems closest to what you want to +end up with. Let's say that you want to write something for +soprano and cello. In this case, we would start with the +@q{Notes and lyrics} template (for the soprano part). + +@example +\version @w{"@version{}"} +melody = \relative c' @{ + \clef treble + \key c \major + \time 4/4 + a4 b c d +@} + +text = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melody + @} + \new Lyrics \lyricsto "one" \text + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Now we want to add a cello part. Let's look at the @q{Notes only} example: + +@example +\version @w{"@version{}"} +melody = \relative c' @{ + \clef treble + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melody + \layout @{ @} + \midi @{ @} +@} +@end example + +We don't need two @code{\version} commands. We'll need the +@code{melody} section. We don't want two @code{\score} sections +-- if we had two @code{\score}s, we'd get the two parts separately. +We want them together, as a duet. Within the @code{\score} +section, we don't need two @code{\layout} or @code{\midi}. + +If we simply cut and paste the @code{melody} section, we would +end up with two @code{melody} definitions. This would not generate +an error, but the second one would be used for both melodies. +So let's rename them to make them distinct. We'll call the +section for the soprano @code{sopranoMusic} and the section for +the cello @code{celloMusic}. While we're doing this, let's rename +@code{text} to be @code{sopranoLyrics}. Remember to rename both +instances of all these names -- both the initial definition (the +@code{melody = \relative c' @{ } part) and the name's use (in the +@code{\score} section). + +While we're doing this, let's change the cello part's staff -- +celli normally use bass clef. We'll also give the cello some +different notes. + +@example +\version @w{"@version{}"} +sopranoMusic = \relative c' @{ + \clef treble + \key c \major + \time 4/4 + a4 b c d +@} + +sopranoLyrics = \lyricmode @{ + Aaa Bee Cee Dee +@} + +celloMusic = \relative c @{ + \clef bass + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +This is looking promising, but the cello part won't appear in the +score -- we haven't used it in the @code{\score} section. If we +want the cello part to appear under the soprano part, we need to add + +@example +\new Staff \celloMusic +@end example + +@noindent +underneath the soprano stuff. We also need to add @code{<<} and +@code{>>} around the music -- that tells LilyPond that there's +more than one thing (in this case, two @code{Staves}) happening +at once. The @code{\score} looks like this now: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +This looks a bit messy; the indentation is messed up now. That is +easily fixed. Here's the complete soprano and cello template. + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef treble + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef bass + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +The starting templates can be found in the @q{Templates} appendix, +see @ref{Single staff}. + + +@node Négyszólamú vegyeskar +@subsection Négyszólamú vegyeskar +@translationof Four-part SATB vocal score + +@cindex template, SATB +@cindex SATB template + +Most vocal scores of music written for four-part mixed choir +with orchestral accompaniment such as Mendelssohn's Elijah or +Handel's Messiah have the choral music and words on four +staves, one for each of SATB, with a piano reduction of the +orchestral accompaniment underneath. Here's an example +from Handel's Messiah: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy is the lamb that was slain +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4
2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@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 +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. + +The order in which the contexts appear in the ChoirStaff of the +template do not correspond with the order in the vocal score shown +above. We need to rearrange them so there are four staves with the +words written directly underneath the notes for each part. All the +voices should be @code{\voiceOne}, which is the default, so the +@code{\voiceXXX} commands should be removed. We also need to specify +the tenor clef for the tenors. The way in which lyrics are specified +in the template has not yet been encountered so we need to use the +method with which we are familiar. We should also add the names of +each staff. + +Doing this gives for our ChoirStaff: + +@example + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff +@end example + +Next we must work out the piano part. This is +easy - we just pull out the piano part from the +@q{Solo piano} template: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower +>> +@end example + +and add the variable definitions for @code{upper} +and @code{lower}. + +The ChoirStaff and PianoStaff must be combined +using angle brackets as we want them to be +stacked one above the other: + +@example +<< % combine ChoirStaff and PianoStaff one above the other + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Combining all these together and adding the music +for the three bars of the example above gives: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { + \key d \major + \time 4/4 +} +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy is the lamb that was slain +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Kotta létrehozása az alapoktól +@subsection Kotta létrehozása az alapoktól +@translationof Building a score from scratch + +@cindex template, writing your own +@cindex example of writing a score +@cindex writing a score, example +@cindex score, example of writing + +After gaining some facility with writing LilyPond code, you +may find that it is easier to build a score from scratch +rather than modifying one of the templates. You can also +develop your own style this way to suit the sort of music you +like. Let's see how to put together the score for an organ +prelude as an example. + +We begin with a header section. Here go the title, name +of composer, etc, then come any variable definitions, and +finally the score block. Let's start with these in outline +and fill in the details later. + +We'll use the first two bars of Bach's prelude +based on @emph{Jesu, meine Freude} which is written for two +manuals and pedal organ. You can see these two bars of music +at the bottom of this section. The top manual part has two voices, +the lower and pedal organ one each. So we need four +music definitions and one to define the time signature +and key: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +TimeKey = @{ + \time 4/4 + \key c \minor +@} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +For now we've just used a spacer note, @code{s1}, +instead of the real music. We'll add that later. + +Next let's see what should go in the score block. +We simply mirror the staff structure we want. +Organ music is usually written on three staves, +one for each manual and one for the pedals. The +manual staves should be bracketed together, so we +need to use a PianoStaff for them. The first +manual part needs two voices and the second manual +part just one. + +@example + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context +@end example + +Next we need to add a staff for the pedal organ. +This goes underneath the PianoStaff, but it must +be simultaneous with it, so we need angle brackets +around the two. Missing these out would generate +an error in the log file. It's a common mistake +which you'll make sooner or later! Try copying +the final example at the end of this section, +remove these angle brackets, and compile it to +see what errors it generates. + +@example +<< % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +It is not necessary to use the simultaneous construct +@code{<< .. >>} for the manual two staff and the pedal organ staff, +since they contain only one music expression, but it does no harm, +and always using angle brackets after @code{\new Staff} is a good +habit to cultivate in case there are multiple voices. The opposite +is true for Voices: these should habitually be followed by braces +@code{@{ .. @}} in case your music is coded in several variables +which need to run consecutively. + +Let's add this structure to the score block, and adjust the indenting. +We also add the appropriate clefs, ensure stems, ties and slurs in +each voice on the upper staff point to the right direction with +@code{\voiceOne} and @code{\voiceTwo}, and enter the time signature +and key to each staff using our predefined variable, @code{\TimeKey}. + +@example +\score @{ + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \TimeKey % set time signature and key + \clef "treble" + \new Voice @{ + \voiceOne + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \voiceTwo + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \TimeKey + \clef "bass" + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \TimeKey + \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 +is to add the music, and combine all the parts together. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +TimeKey = { + \time 4/4 + \key c \minor +} +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees + d2 c2 +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ + c c4 b8 c8. g16 c b c d +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees + f ees f d g aes g f ees d e8~ ees16 f ees d +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 + r16 g ees f g f g8 c,2 +} + +\score { + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \TimeKey % set time signature and key + \clef "treble" + \new Voice { + \voiceOne + \ManualOneVoiceOneMusic + } + \new Voice { + \voiceTwo + \ManualOneVoiceTwoMusic + } + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \TimeKey + \clef "bass" + \new Voice { + \ManualTwoMusic + } + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \TimeKey + \clef "bass" + \new Voice { + \PedalOrganMusic + } + >> % end PedalOrgan Staff context + >> +} % end Score context +@end lilypond + + +@node Kevesebb gépelés változókkal és függvényekkel +@subsection Kevesebb gépelés változókkal és függvényekkel +@translationof Saving typing with variables and functions + +@cindex variables +@cindex variables + +By this point, you've seen this kind of thing: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } +\score { + { + \hornNotes + } +} +@end lilypond + +You may even realize that this could be useful in minimalist music: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } +violin = \new Staff { + \fragmentA + \fragmentA + \fragmentB + \fragmentA +} +\score { + { + \violin + } +} +@end lilypond + +However, you can also use these variables (also known as +macros, or user-defined commands) for tweaks: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } +padText = { \once \override TextScript #'padding = #5.0 } +fthenp=_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b + \padText + c4.^"hi there!" d8 e' f g d + c,4.\fthenp b8 c4 c-. + } +} +\score { + { + \violin + } +\layout { ragged-right=##t } +} +@end lilypond + +These variables are obviously useful for saving +typing. But they're worth considering even if you +only use them once -- they reduce complexity. Let's +look at the previous example without any +variables. It's a lot harder to read, especially +the last line. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d + c,4.\markup @{ \dynamic f \italic \small @{ 2nd @} + \hspace #0.1 \dynamic p @} + b8 c4 c-. + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +So far we've seen static substitution -- when LilyPond +sees @code{\padText}, it replaces it with the stuff that +we've defined it to be (ie the stuff to the right of +@code{padtext=}). + +LilyPond can handle non-static substitution, too (you +can think of these as functions). + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function (parser location padding) (number?) + #{ + \once \override TextScript #'padding = #$padding + #}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + +Using variables is also a good way to reduce work if the +LilyPond input syntax changes (see +@rprogram{Updating files with convert-ly}). If +you have a single definition (such as @code{\dolce}) for all your +input files (see @ref{Style sheets}), then if the syntax changes, you +only need to update your single @code{\dolce} definition, +instead of making changes throughout every @file{.ly} file. + + +@node Partitúra és szólamkották +@subsection Partitúra és szólamkották +@translationof Scores and parts + +In orchestral music, all notes are printed twice. Once in a part for +the musicians, and once in a full score for the conductor. Variables can +be used to avoid double work. The music is entered once, and stored in +a variable. The contents of that variable is then used to generate +both the part and the full score. + +It is convenient to define the notes in a special file. For example, +suppose that the file @file{horn-music.ly} contains the following part +of a horn/@/bassoon duo + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a cis4 f e d +@} +@end example + +@noindent +Then, an individual part is made by putting the following in a file + +@example +\include "horn-music.ly" +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +The line + +@example +\include "horn-music.ly" +@end example + +@noindent +substitutes the contents of @file{horn-music.ly} at this position in +the file, so @code{hornNotes} is defined afterwards. The command +@code{\transpose f@tie{}c'} indicates that the argument, being +@code{\hornNotes}, should be transposed by a fifth upwards. Sounding +@code{f} is denoted by notated @code{c'}, which corresponds with the +tuning of a normal French Horn in@tie{}F. The transposition can be seen +in the following output + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a cis4 f e d +} +@end lilypond + +In ensemble pieces, one of the voices often does not play for many +measures. This is denoted by a special rest, the multi-measure +rest. It is entered with a capital @code{R} followed by a duration +(@code{1}@tie{}for a whole note, @code{2}@tie{}for a half note, +etc.). By multiplying the +duration, longer rests can be constructed. For example, this rest +takes 3@tie{}measures in 2/4 time + +@example +R2*3 +@end example + +When printing the part, multi-rests +must be condensed. This is done by setting a run-time variable + +@example +\set Score.skipBars = ##t +@end example + +@noindent +This command sets the property @code{skipBars} in the +@code{Score} context to true (@code{##t}). Prepending the rest and +this option to the music above, leads to the following result + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 + r4 f8 a cis4 f e d +} +@end lilypond + + +The score is made by combining all of the music together. Assuming +that the other voice is in @code{bassoonNotes} in the file +@file{bassoon-music.ly}, a score is made with + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +leading to + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \time 2/4 + R2*3 + r4 f8 a cis4 f e d + } + \new Staff { + \clef bass + r4 d,8 f | gis4 c | b bes | + a8 e f4 | g d | gis f | + } +>> +@end lilypond diff --git a/Documentation/hu/learning/templates.itely b/Documentation/hu/learning/templates.itely new file mode 100644 index 0000000000..b10b96d359 --- /dev/null +++ b/Documentation/hu/learning/templates.itely @@ -0,0 +1,106 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@c This file is part of learning.tely +@ignore + Translation of GIT committish: 8ae92df5b752659c05ddb78806b7abb0ac60ee4d + + 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 -*- coding: utf-8; mode: texinfo; -*- +@c \version "2.14.0" +@node Sablonok +@appendix Sablonok +@translationof Templates +@translationof Templates + +@untranslated + + +@c bad node name for ancient notation to avoid conflict +@menu +* Egy kottasor:: +* Zongorasablonok:: +* Vonósnégyes:: +* Kórus:: +* Zenekari sablonok:: +* Sablonok régizenéhez:: +* Egyéb sablonok:: +@end menu + +@node Egy kottasor +@appendixsec Egy kottasor +@translationof Single staff +@translationof Single staff + +@untranslated + +@appendixsubsec Csak hangok +@appendixsubsec Hangok és dalszöveg +@appendixsubsec Hangok és akkordok +@appendixsubsec Hangok, dalszöveg és akkordok + +@node Zongorasablonok +@appendixsec Zongorasablonok +@translationof Piano templates +@translationof Piano templates + +@untranslated + +@appendixsubsec Szólózongora +@appendixsubsec Zongora és dallam dalszöveggel +@appendixsubsec Zongora középre igazított dalszöveggel +@appendixsubsec Zongora középre igazított dinamikai jelzésekkel + +@node Vonósnégyes +@appendixsec Vonósnégyes +@translationof String quartet +@translationof String quartet + +@untranslated + +@appendixsubsec Vonósnégyes +@appendixsubsec Vonósnégyes szólamkották + +@node Kórus +@appendixsec Kórus +@translationof Vocal ensembles +@translationof Vocal ensembles + +@untranslated + +@appendixsubsec Négyszólamú vegyeskar +@appendixsubsec Négyszólamú vegyeskar és automatikus zongorakivonat +@appendixsubsec Négyszólamú vegyeskar igazított kontextusokkal + +@node Zenekari sablonok +@appendixsec Zenekari sablonok +@translationof Orchestral templates +@translationof Orchestral templates + +@untranslated + +@appendixsubsec Zenekar, kórus és zongora + +@c bad node name to avoid node name conflict +@node Sablonok régizenéhez +@appendixsec Sablonok régizenéhez +@translationof Ancient notation templates +@translationof Ancient notation templates + +@untranslated + +@appendixsubsec Menzurális notációval lejegyzett művek átírása +@appendixsubsec Gregorián tételek átírása + +@node Egyéb sablonok +@appendixsec Egyéb sablonok +@translationof Other templates +@translationof Other templates + +@untranslated + +@appendixsubsec Dzsesszegyüttes + diff --git a/Documentation/hu/learning/tutorial.itely b/Documentation/hu/learning/tutorial.itely new file mode 100644 index 0000000000..de36576343 --- /dev/null +++ b/Documentation/hu/learning/tutorial.itely @@ -0,0 +1,660 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- + +@ignore + Translation of GIT committish: ef7ee24e2aee81dd97888b4533ab7eae038ce666 + + 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 Első lecke +@chapter Első lecke +@translationof Tutorial + +Tankönyvünk első leckéje bemutatja a LilyPond nyelvét, és elmagyarázza, +hogyan kell nyomtatható kottát előállítani. + +@menu +* Fájlok fordítása:: +* Bemeneti fájlok írása:: +* Hogyan olvassuk a dokumentációt?:: +@end menu + +@node Fájlok fordítása +@section Fájlok fordítása +@translationof Compiling a file + +@menu +* Zene bevitele:: +* Mac OS X:: +* Windows:: +* Parancssor:: +@end menu + +@node Zene bevitele +@subsection Zene bevitele +@translationof Entering input + +@cindex fordítás +@cindex első példa +@cindex kis- és nagybetűk különbsége + +A LilyPond bemeneti fájljai egyszerű szöveges állományok. +Egy kotta létrehozásához egy bemeneti fájlban (másnéven forrásfájlban) kell +azt szöveges formában leírni. +@qq{Fordítás} a neve annak a folyamatnak, melynek során egy LilyPond +formátumú forrásfájlból egy nyomtatható kotta és (szabadon választhatóan) +egy meghallgatható MIDI fájl áll elő. + +Első példánk megmutatja, hogy néz ki egy egyszerű bemenet. A LilyPond +forrásfájlba ezt írva: + +@example +@{ + c' e' g' e' +@} +@end example + +@noindent +az alábbi eredményt kapjuk: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@warning{A LilyPondban a hangok és a dalszöveg köré mindig +@strong{@{ kapcsos zárójeleket @}} kell írni. +A kapcsos zárójeleket legtöbbször szóközzel vesszük körül, hacsak +a sor elején vagy végén nem állnak, hogy környezetükkel ne folyjanak +egybe, így kétértelműséget okozván. A tankönyv példáiban olykor a +rövidség kedvéért elhagyjuk a kapcsos zárójeleket, de a forrásfájlokban +nem szabad elfelejteni kitenni őket! A @ref{Hogyan olvassuk a dokumentációt?} +c. fejezetben olvasható több információ a tankönyv példáiról és megjelenítésük +módjáról.} + +Továbbá a LilyPond bemenete @strong{érzékeny a kis- és nagybetűk különbségére}: +@w{@code{@{ c d e @}}} érvényes bemenet; @w{@code{@{ C D E @}}} hibát +eredményez. + +@smallspace + +@subheading A kimenet megtekintése + +@cindex PDF fájl +@cindex megtekintés +@cindex szövegszerkesztők +@cindex Mac OS X, a LilyPond futtatása +@cindex Windows, a LilyPond futtatása +@cindex Linux, a LilyPond futtatása +@cindex Unix, a LilyPond futtatása + +Ez a szakasz arról szól, hogy milyen parancsokat kell futtatni +a kotta előállításához és a kimenet megtekintéséhez a felhasználó operációs +rendszerétől függően. + +Bizonyos szövegszerkesztőkbe beépíthető LilyPond támogatás, ami hatékonyabb +szerkesztést tesz lehetővé; erről a @rprogram{Text editor support} c. +fejezet ír. + +@warning{Amikor a LilyPond első alkalommal fut, egy-két percig várni kell, +amíg megvizsgálja a rendszer betűtípusait. Ezután természetesen sokkal +gyorsabban fog futni!} + +@node Mac OS X +@subsection Mac OS X +@translationof MacOS X + +Ha elindítjuk a @command{LilyPond.app} alkalmazást, egy példaállományt látunk +megnyitva. Mentsük el (pl. @file{test.ly} néven az Asztalra), majd a +@w{@qq{Compile > Typeset File}} (@q{Fordítás > Kotta szedése}) menüpont segítségével fordítsuk le. +Ezután az eredményül kapott PDF fájl a képernyőn látható. + +A következő parancsok, melyekre szükség lehet, a @qq{New} (@q{Új}) és az @qq{Open} +(@q{Megnyitás}) a @qq{File} (@q{Fájl}) menüben. A szerkesztés alatt levő fájlt a szedés előtt +mindig el kell menteni. Ha a feldolgozás során bármilyen hiba történt, a +naplóablakban láthatjuk a hibák leírását. + +@node Windows +@subsection Windows +@translationof Windows + +Windows alatt az Asztalon levő LilyPond ikonra duplán kattintva indíthatjuk el +a LilyPondot, mely először egy példafájlt nyit meg egy egyszerű +szövegszerkesztőben. Mentsük el (pl. @file{test.ly} néven az Asztalra), +majd kattintsunk rá duplán a lefordításához (az ikonja egy hangjegyre +hasonlít). Pár másodperc múlva létrejön egy @file{test.pdf} nevű fájl az +Asztalon. Ha erre duplán kattintunk, megtekinthetjük a nyomtatható kottát. +A @file{test.ly} fordításának másik módja, hogy egérrel ráhúzzuk a LilyPond +parancsikonjára. + +Egy létező @file{.ly} fájl szerkesztéséhez kattintsunk rá jobb gombbal, és +válasszuk az @qq{Edit source} (@q{Forrás szerkesztése}) menüpontot. Új kotta +írásához vagy a szerkesztőt futtassuk a fent leírt módon, majd válasszuk ki a +@qq{File > New} (@q{Fájl > Új}) parancsot, vagy jobb gombbal +kattintsunk az Asztalra, válasszuk az @q{Új > Szöveges dokumentum} +menüpontot, nevezzük át a fájlt a kívánt névre, és változtassuk meg a +kiterjesztését @file{.ly}-re. Ezután ugyanúgy szerkeszthetjük és +feldolgozhatjuk, ahogy eddig is tettük. + +Ha duplán kattintunk egy @code{.ly} fájlra, nem csak egy PDF-et kapunk, hanem +egy @code{.log} kiterjesztésű naplófájlt is, amely a LilyPond futásáról +tartalmaz információkat. Hiba esetén ajánlatos megvizsgálni. + +@node Parancssor +@subsection Parancssor +@translationof Command-line + +Hozzunk létre egy fájlt @file{test.ly} néven, és írjuk bele a következőket: + +@example +@{ + c' e' g' e' +@} +@end example + +A @file{test.ly} fájl feldolgozásához adjuk ki az alábbi parancsot: + +@example +lilypond test.ly +@end example + +@noindent +Ekkor az alábbi kimenethez hasonlót láthatunk: + +@example +lilypond test.ly +GNU LilyPond @version{} +Processing `test.ly' +Parsing... +Interpreting music... +Preprocessing graphical objects... +Finding the ideal number of pages... +Fitting music on 1 page... +Drawing systems... +Layout output to `test.ps'... +Converting to `test.pdf'... +@end example + +@node Bemeneti fájlok írása +@section Bemeneti fájlok írása +@translationof How to write input files + +@menu +* Egyszerű kottázás:: +* A bemeneti fájlok jellemzői:: +@end menu + +@node Egyszerű kottázás +@subsection Egyszerű kottázás +@translationof Simple notation + +@cindex egyszerű lejegyzés +@cindex lejegyzés, egyszerű + +A LilyPond bizonyos elemeket automatikusan hozzáad a kottához. A következő +példában csak négy hangmagasságot adunk meg, de a LilyPond kirakja a kulcsot +és az ütemmutatót, valamint a hangok hosszúságát alapértelmezetten negyednek +veszi. + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +Természetesen minden megváltoztatható, de a legtöbb esetben az alapbeállítás +megfelelő. + +@subheading Hangmagasság + +@cindex hangmagasság +@cindex relatív mód +@cindex aposztróf +@cindex vessző +@cindex módosítójelek és relatív mód + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +Fogalomtár: @rglos{pitch}, @rglos{interval}, +@rglos{scale}, @rglos{middle C}, @rglos{octave}, +@rglos{accidental}. + +A hangok beírásának legegyszerűbb módja a @code{\relative} mód. +Ebben a módban minden hang automatikusan abba az oktávba kerül, +melyben az előző hanghoz a legközelebb áll, vagyis legfeljebb +kvárt távolságra. Ennek szemléltetésére gépeljünk be egy zenei alapformulát, +egy @notation{skálát}, melyben minden hang szekund távolságra van az +előzőtől. (Figyelem: mivel angolul a h hang neve b, ezért a LilyPond forrásban +is alapesetben b-t kell írni h helyett!) + +@c KEEP LY +@lilypond[verbatim,quote] +% megadjuk, hogy az első viszonyítási hang az egyvonalas c legyen +\relative c' { + c d e f + g a b c +} +@end lilypond + +Itt a relatív mód első viszonyítási hangja az @notation{egyvonalas c}. Minden +hang az előzőhöz a lehető legközelebb helyezkedik el: az első @code{c} az +egyvonalas c-hez legközelebb eső c hangot jelenti, vagyis az egyvonalas c-t. +A második, d hang ehhez a hanghoz esik legközelebb, vagyis ugyanúgy az +egyvonalas oktávba kerül. +Legfeljebb kvárt nagyságú hangközöket tartalmazó dallamok tápláhatók be így a +legegyszerűbben. + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +Természetesen nem szükséges, hogy a relatív mód első viszonyítási hangja +megegyezzen a tényleges első hanggal, ahogy az előző példában is láttuk, ahol +az első hang -- a @code{d} -- az egyvonalas c-hez legközelebb eső hang, +az egyvonalas d. + +A @code{@w{\relative c'}} parancsban megadott első viszonyítási hanghoz +@code{'} vagy @code{,} karaktereket hozzáadva vagy elvéve +változtatható a kezdőoktáv: + +@c KEEP LY +@lilypond[verbatim,quote] +% kétvonalas oktáv +\relative c'' { + e c a c +} +@end lilypond + +A relatív mód kezdetben bonyolultnak tűnhet, de valójában a legtöbb +dallamot így lehet legkönnyebben bevinni. Nézzük, hogyan néz ki a relatív +hangmagasság-számítás a gyakorlatban. A h hangról egy kvárton belül felfelé +a c, d és e hangok helyezkednek el, míg lefelé az a, g és f hangok. Tehát ha +egy h-t követő hang c, d vagy e, akkor a h fölé, míg ha a, g vagy f, akkor a +h alá kerül. + +@c KEEP LY +@lilypond[verbatim,quote] +\relative c'' { + b c % felfelé szekund, lefelé szeptim, így: felső c + b d % felfelé terc, lefelé szext, így: felső d + b e % felfelé kvárt, lefelé kvint, így: felső e + b a % felfelé szeptim, lefelé szekund, így: alsó a + b g % felfelé szext, lefelé terc, így: alsó g + b f % felfelé kvint, lefelé kvárt, így: alsó f +} +@end lilypond + +Pontosan ugyanez marad a működés, ha bármelyik hang előtt kereszt vagy bé áll. +A @notation{módosítójelek} a relatív magasságszámítás során @strong{egyáltalán +nem számítanak}. A számítás során csak a vonalrendszerben elfoglalt pozíciónak +(azaz a diatonikus magasságnak) van szerepe. + +Kvártnál nagyobb hangközugrást úgy érhetünk el, hogy @code{'} vagy @code{,} +karaktereket helyezünk a hang után. Az @code{'} egy @notation{oktáv}nyi +emelkedést, a @code{,} egy oktávnyi süllyedést jelent. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +Amennyi karaktert használunk, annyi oktáv különbséget érhetünk el, pl. +@code{''} vagy @code{,,} két oktávnyi emelést, ill. süllyesztést jelent -- +de vigyázzunk, soha ne használjunk idézőjelet (@code{"}) két aposztróf +(@code{''}) helyett! Ez ugyanaz a mechanizmus, amivel a relatív mód első +viszonyítási hangját módosíthatjuk. + + +@subheading Ritmusérték + +@cindex hanghosszúság +@cindex hosszúság +@cindex ritmus +@cindex egészkotta +@cindex félkotta +@cindex negyedkotta +@cindex pontozás + +Fogalomtár: @rglos{beam}, @rglos{duration}, +@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, +@rglos{dotted note}. + +A hangok @notation{ritmusértékét} a hangmagasság után írt számmal +határozhatjuk meg. @code{1} jelenti az egészkottát, @code{2} a +félkottát, @code{4} a negyedkottát és így tovább. A +@notation{gerendázást} automatikusan elvégzi a LilyPond. + +Ha nincs megadva a hosszúság, az előző hang hossza marad érvényben. +Az első hang alapértelmezetten negyed hosszúságú. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +A @notation{pontozott hangok} után annyi pontot (@code{.}) kell írni, +ahányszoros a pontozás. A pontozott hangok ritmusértékét mindig meg kell +adni számmal. + +@lilypond[verbatim,quote] +\relative c'' { + a a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Szünet + +@cindex szünet + +Fogalomtár: @rglos{rest}. + +A @notation{szünetek} megadása hasonlóképpen történik, mint a hangoké, +csak a hangmagasság megjelölése helyett @code{r}@tie{} betűt kell írni: + +@lilypond[verbatim,quote] +\relative c'' { + a r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Ütemmutató + +@cindex ütemmutató + +@funindex \time +@funindex time + +Fogalomtár: @rglos{time signature}. + +Az @notation{ütemmutató} beállítására a @code{\time} parancs szolgál: + +@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 Kulcs + +@cindex kulcs +@cindex violinkulcs +@cindex altkulcs +@cindex tenorkulcs +@cindex basszuskulcs + +@funindex \clef +@funindex clef + +Fogalomtár: @rglos{clef}. + +A @notation{kulcs} beállítása a @code{\clef} paranccsal lehetséges: + +@lilypond[verbatim,quote] +\relative c' { + \clef treble + c1 + \clef alto + c1 + \clef tenor + c1 + \clef bass + c1 +} +@end lilypond + + +@subheading Mindez együtt + +Alább látható egy rövid példa, mely az eddig tanult elemeket mutatja be: + +@lilypond[verbatim,quote] +\relative c, { + \time 3/4 + \clef bass + c2 e8 c' g'2. + f4 e d c4 c, r4 +} +@end lilypond + + +@seealso +Referencia: @ruser{Writing pitches}, +@ruser{Writing rhythms}, @ruser{Writing rests}, +@ruser{Time signature}, @ruser{Clef}. + + +@node A bemeneti fájlok jellemzői +@subsection A bemeneti fájlok jellemzői +@translationof Working on input files + +@cindex kapcsos zárójelek +@cindex megjegyzés +@cindex egysoros megjegyzés +@cindex többsoros megjegyzés +@cindex kis- és nagybetűk különbsége +@cindex kifejezések + +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + +A LilyPond nyelve sok tekintetben hasonlít bizonyos programnyelvekhez. +Érzékeny a kis- és nagybetűk különbségére, az üres helyek (szóközök, újsorok, +tabulátorok stb.) pedig nem számítanak. Ún. kifejezéseket lehet alkotni +kapcsos zárójelek @{ @} segítségével, megjegyzéseket pedig @code{%} után +vagy @w{@code{%@{ ... %@}}} közé lehet írni. + +Ha esetleg nem lennének világosak a fenti mondatok, sebaj! Magyarázatuk +részletesen a következő: + +@itemize + +@item +@strong{Érzékeny a kis- és nagybetűk különbségére}: +nem mindegy, hogy kisbetűket vagy nagybetűket használunk +(pl. @w{@code{a, b, s, t}} nem ugyanaz, mint @w{@code{A, B, S, T}}). +A hangneveket mindig kisbetűvel kell írni: @w{@code{@{ c d e @}}} +helyes, @w{@code{@{ C D E @}}} hibás bemenet. + +@item +@strong{Az üres helyek nem számítanak}: +mindegy, hogy hova hány szóköz, tabulátor vagy újsor kerül. +@w{@code{@{ c d e @}}} ugyanazt jelenti, mint +@w{@code{@{ c @tie{} @tie{} @tie{} d e @}}} vagy: + +@example +@{ c d + e @} +@end example + +@noindent +Természetesen ez így nehezen olvasható. Érdemes a blokkokat beljebb kezdeni +egy tabulátorral vagy két szóközzel: + +@example +@{ + c d e +@} +@end example + +@item +@strong{Kifejezések}: +a LilyPond bemenete @strong{@{ kapcsos zárójelek @}} között álló @emph{zenei +kifejezésekből} épül fel (ezekről később lesz szó), akárcsak a zárójelek +@code{()} közé zárt matematikai kifejezések. A kapcsos zárójelek köré javasolt +szóközt tenni, hacsak nem a sor elején vagy végén szerepelnek. + +Egy @code{\} karakterrel kezdődő LilyPond parancs az azt követő kapcsos +zárójelpár tartalmával együtt ugyancsak egy zenei kifejezésnek számít (mint +például a @w{@code{\relative @{ @}}}). + +@cindex megjegyzések +@cindex egysoros megjegyzés +@cindex többsoros megjegyzés +@item +@strong{Megjegyzések}: +a megjegyzések az emberi olvasó számára írt útmutatók; a LilyPond ezeket +figyelmen kívül hagyja, így nem jelennek meg a kimenetben. Kétfajta megjegyzés +van. A százalékjel @code{%} egy olyan megjegyzést kezd, mely a sor végéig tart. +Egy egysoros megjegyzés mindig az @emph{utána levő} sorral kapcsolatos. + +@example +a4 a a a +% most jön a két h hang +b2 b +@end example + +A többsoros megjegyzés (megjegyzésblokk) több sort is közrefoghat. +A @code{%@{} és @code{%@}} jelek között minden megjegyzésnek számít. +Figyelem, a megjegyzésblokkok nem ágyazhatóak egymásba! Ez azt +jelenti, hogy nem lehet egy megjegyzésblokkot egy másikon belülre tenni, +mert az első @code{%@}} jelnél véget ér @emph{mindkét} megjegyzésblokk. +A következő részlet a megjegyzések használatára mutat példát: + +@example +% Ez itt a "Hull a pelyhes fehér hó" dallama + c4 c g' g a a g2 + +%@{ + Ez a sor és az alatta levők nem számítanak bele a kimenetbe, + mert megjegyzésblokkban szerepelnek. + + f f e e d d c2 +%@} +@end example + +@end itemize + + +@node Hogyan olvassuk a dokumentációt? +@section Hogyan olvassuk a dokumentációt? +@translationof How to read the manual + +@menu +* Kapcsos zárójelek elhagyása:: +* Kattintható példák:: +* A dokumentáció áttekintése:: +@end menu + +@node Kapcsos zárójelek elhagyása +@subsection Kapcsos zárójelek elhagyása +@translationof Omitting braces + +@cindex hogyan olvassuk a kézikönyvet +@cindex kézikönyv +@cindex példák +@cindex sablonok +@cindex tippek + +A LilyPond bemenete vagy @{ @} jelek között, vagy pedig egy +@code{@w{\relative c'' @{ ... @}}} blokkban kell, hogy álljon, ahogy azt a +@ref{A bemeneti fájlok jellemzői} c. fejezetben láttuk. +A tankönyv további részében a legtöbb példában ezt elhagyjuk. A példák +kipróbálásához a kimenet kimásolható és beilleszthető, de mindig köré +@strong{kell} rakni a @code{@w{\relative c'' @{ @}}} blokkot, ha nem szerepel +benne: + +@example +\relative c'' @{ + ...a példa ide kerül... +@} +@end example + +Miért hagytuk el a kapcsos zárójeleket? A legtöbb példa a kézikönyvben +beszúrható más, hosszabb darabokba. Ezeknél a példáknál nem éri meg +külön megadni a @code{@w{\relative c'' @{ @}}} blokkot -- +esetleg belekerülnének egy nagyobb @code{\relative} blokkba, ami nem javasolt! +Ha minden példa körül @code{@w{\relative c'' @{ @}}} szerepelne, +nem lenne egyszerű az ilyen példákat kimásolni és beilleszteni egy hosszabb +műbe. Mivel a legtöbb felhasználó a neki kellő kódrészleteket egyszerűen +kimásolja a kézikönyvből, úgy döntöttünk, hogy leegyszerűsítjük a példákat. + + +@node Kattintható példák +@subsection Kattintható példák +@translationof Clickable examples + +A legtöbb ember úgy tanul bele egy program használatába, hogy a gyakorlatban +próbálgatja azt, és játszadozik vele. Ez a LilyPonddal is lehetséges. +A kézikönyv HTML változatában bármelyik képre kattintva megtekinthető a pontos +bemenet, amelyből a LilyPond a képet generálta. Ez az alábbi példán +kipróbálható: + +@c no verbatim here +@c KEEP LY +@lilypond[quote] +\relative c'' { + c-\markup { \bold \huge { Ide kell kattintani! } } +} +@end lilypond + +A @qq{ly snippet} kezdetű szakasz kimásolásával és beillesztésével már +rendelkezésre áll egy kiindulópont a kísérletezéshez. A kép egy az egyben +előáll (ugyanakkora méretben), ha a @qq{Start cut-&-pastable section} +résztől kezdve a fájl végéig kimásoljuk a szöveget. + +@node A dokumentáció áttekintése +@subsection A dokumentáció áttekintése +@translationof Overview of manuals + +A LilyPondhoz nagyon sok dokumentáció áll rendelkezésre. +Az új felhasználóknak emiatt gyakran nem világos, hogy mely részeket +kell elolvasniuk, és olykor alapvető fontosságú részeket hagynak ki. + +@warning{A dokumentáció fontos részeit erősen ajánlott elolvasni, különben +a későbbi részek megértése jóval nehezebb lesz.} + +@itemize + +@item +@strong{@emph{Legelőször is}}: a tankönyvből az @ref{Első lecke}, majd az +@ref{Elemi kottaírás} fejezeteket kell elolvasni. Amennyiben egy zenei +fogalom jelentése nem világos, a @rglosnamed{Top, Zenei fogalomtárban} lehet +megkeresni. + +@item +@strong{Egy teljes darab írása előtt}: a tankönyv @ref{Alapfogalmak} c. +fejezetét javasolt elolvasni. Ezután a +@rusernamed{Top, Kottaírás kézikönyvében} lehet az előforduló kottaelemek +beviteli módját megnézni. + +@item +@strong{Az alapértelmezett kimenet megváltoztatása előtt}: +@ref{A kimenet finomhangolása} olvasandó el. + +@item +@strong{Egy nagy mű bevitele előtt}: a program használatának kézikönyvéből a +@rprogramnamed{Suggestions for writing files, Tanácsok LilyPond bemeneti fájlok írásához} +c. fejezetet érdemes elolvasni. + +@end itemize diff --git a/Documentation/hu/learning/tweaks.itely b/Documentation/hu/learning/tweaks.itely new file mode 100644 index 0000000000..5e304eba94 --- /dev/null +++ b/Documentation/hu/learning/tweaks.itely @@ -0,0 +1,724 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@c This file is part of learning.tely +@ignore + Translation of GIT committish: 48c2b169dc8a9bc2ab2c767cbb83b57cc158742b + + 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 -*- coding: utf-8; mode: texinfo; -*- +@c \version "2.14.0" +@node A kimenet finomhangolása +@chapter A kimenet finomhangolása +@translationof Tweaking output +@translationof Tweaking output + +@untranslated + + +@menu +* A finomhangolás alapjai:: +* A belső működés referenciája:: +* Objektumok megjelenése:: +* Objektumok elhelyezése:: +* Objektumok ütközése:: +* További finomhangolás:: +@end menu + +@node A finomhangolás alapjai +@section A finomhangolás alapjai +@translationof Tweaking basics +@translationof Tweaking basics + +@untranslated + + +@menu +* Bevezetés a finomhangolásba:: +* Objektumok és interfészek:: +* Objektumok és tulajdonságok elnevezési konvenciói:: +* Finomhangolási módszerek:: +@end menu + +@node Bevezetés a finomhangolásba +@subsection Bevezetés a finomhangolásba +@translationof Introduction to tweaks +@translationof Introduction to tweaks + +@untranslated + + +@ref{Kontextusok és ábrázolók}, as Contexts, Engravers, and the +@node Objektumok és interfészek +@subsection Objektumok és interfészek +@translationof Objects and interfaces +@translationof Objects and interfaces + +@untranslated + + +@c index object +@c index grob +@c index spanner +@c index interface +@c index properties, object +@c index object properties +@c index layout object +@c index object, layout +@c index interface +@c ode{Lyrics} objects, as well as objects to represent all +@node Objektumok és tulajdonságok elnevezési konvenciói +@subsection Objektumok és tulajdonságok elnevezési konvenciói +@translationof Naming conventions of objects and properties +@translationof Naming conventions of objects and properties + +@untranslated + + +@c index naming conventions for objects +@c index naming conventions for properties +@c index objects, naming conventions +@c index properties, naming conventions +@ref{Kontextusok és ábrázolók}. Here for reference is a list +@node Finomhangolási módszerek +@subsection Finomhangolási módszerek +@translationof Tweaking methods +@translationof Tweaking methods + +@untranslated + + +@c index tweaking methods +@c index override command +@c index override syntax +@ref{Ábrázolók hozzáadása és eltávolítása}. We must now introduce some more +@c ode{\override}. Because this command has to modify +@c ode{Lyrics}, and we shall omit it in many of the following +@c index color property, example +@c index NoteHead, example of overriding +@c index revert command +@c index color property, example +@c index NoteHead, example of overriding +@c ode{\override} or @code{\set} command to be effective only +@c index color property, example +@c index NoteHead, example of overriding +@c index overrideProperty command +@c ode{\overrideProperty}, which is occasionally required. +@c Maybe explain in a later iteration -td +@c index tweak command +@c ode{\once \override} would do: +@c index font-size property, example +@c index NoteHead, example of overriding +@c index font-size property, example +@c index @code{\tweak}, example +@c ode{\tweak} command is simply +@c index color property, example +@c index @code{\tweak}, example +@c index tuplets, nested +@c index triplets, nested +@c index bracket, tuplet +@c index bracket, triplet +@c index tuplet bracket +@c index triplet bracket +@c index @code{\tweak}, example +@c index direction property, example +@c index color property, example +@c ode{\override} commands: +@c index text property, example +@c index tuplet-number function, example +@c index transparent property, example +@c index TupletNumber, example of overriding +@c NOTE Tuplet brackets collide if notes are high on staff +@c See issue 509 +@node A belső működés referenciája +@section A belső működés referenciája +@translationof The Internals Reference manual +@translationof The Internals Reference manual + +@untranslated + + +@c index Internals Reference +@menu +* Elrendezési objektumok tulajdonságai:: +* Interfészek tulajdonságai:: +* Tulajdonságok típusai:: +@end menu + +@node Elrendezési objektumok tulajdonságai +@subsection Elrendezési objektumok tulajdonságai +@translationof Properties of layout objects +@translationof Properties of layout objects + +@untranslated + + +@c index properties of layout objects +@c index properties of grobs +@c index grobs, properties of +@c index layout objects, properties of +@c index Internals Reference manual +@c ode{\override} command would be needed. But is there a +@c index override example +@c index Internals Reference, example of using +@c index @code{\addlyrics} example +@c ode{thickness} (number) +@c ode{thickness} and that the new value should be a number +@c index Slur example of overriding +@c index thickness property, example +@subheading A kívánt kontextus megkeresése +@c index context, finding +@c index context, identifying correct +@c ode{Slur_engraver} page. At the very bottom it tells +@subheading Felülírás csak egy alkalommal +@c index overriding once only +@c index once override +@c index Slur, example of overriding +@c index thickness property, example +@subheading Tulajdonság visszaállítása +@c index revert +@c index default properties, reverting to +@c ode{\once} placed immediately before each of the notes where +@c index Slur, example of overriding +@c index thickness property, example +@c index Slur, example of overriding +@c index thickness property, example +@node Interfészek tulajdonságai +@subsection Interfészek tulajdonságai +@translationof Properties found in interfaces +@translationof Properties found in interfaces + +@untranslated + + +@c index interface +@c index interface properties +@c index properties in interfaces +@c ode{\override} command do we need to do this? We first look in the +@c ode{font-interface}. +@c ode{font-interface} but @code{font-shape} is not? The answer is +@c ode{font-shape} is not. The entries in @code{LyricText} then tell +@c ode{LyricText}. Other objects which support @code{font-interface} +@c ode{italic}. As before, we'll omit the context. +@c ode{thickness} or @code{font-shape}, others are used as values that +@c index font-shape property, example +@c index italic, example +@c index LyricText, example of overriding +@c index @code{\addlyrics}, example +@subheading Kontextus megadása dalszöveg-beviteli módban +@c index context, specifying in lyric mode +@c index lyric mode, specifying context +@node Tulajdonságok típusai +@subsection Tulajdonságok típusai +@translationof Types of properties +@translationof Types of properties + +@untranslated + + +@c index property types +@c ode{symbol}. To be valid, the value given to a property +@c ode{\override} command. +@node Objektumok megjelenése +@section Objektumok megjelenése +@translationof Appearance of objects +@translationof Appearance of objects + +@untranslated + + +@menu +* Objektumok láthatósága és színe:: +* Objektumok mérete:: +* Objektumok hossza és vastagsága:: +@end menu + +@node Objektumok láthatósága és színe +@subsection Objektumok láthatósága és színe +@translationof Visibility and color of objects +@translationof Visibility and color of objects + +@untranslated + + +@c ode{BarLine}. Its properties include two that control its +@subheading stencil (láthatóság) +@c index stencil property +@c index BarLine, example of overriding +@c index stencil property, example +@c index BarLine, example of overriding +@c index stencil property, example +@c ode{stencil} property of the @code{NoteHead} object is set to +@c ode{#f}. If this is the case, you can instead use the +@c ode{point-stencil} function, which sets the stencil to a object +@subheading break-visibility (láthatóság sortörések körül) +@c index break-visibility property +@c ode{break-visibility} property requires a vector of three booleans. +@c ode{\override} command. +@c index BarLine, example of overriding +@c index break-visibility property, example +@subheading transparent (átlátszóság) +@c index transparent property +@c index transparency +@c ode{grob-interface}. So the command to make the time signature +@c index TimeSignature, example of overriding +@c index transparent property, example +@c index TimeSignature, example of overriding +@c index stencil property, example +@subheading color (szín) +@c index color property +@c index BarLine, example of overriding +@c index color property, example +@c index color, X11 +@c index X11 colors +@c ode{x11-color}, like this: +@c index BarLine, example of overriding +@c index color property, example +@c index rgb colors +@c index color, rgb +@c index BarLine, example of overriding +@c index color property, example +@c index StaffSymbol, example of overriding +@c index TimeSignature, example of overriding +@c index Clef, example of overriding +@c index NoteHead, example of overriding +@c index Stem, example of overriding +@c index BarLine, example of overriding +@c index color property, example +@c index x11-color, example of using +@node Objektumok mérete +@subsection Objektumok mérete +@translationof Size of objects +@translationof Size of objects + +@untranslated + + +@c index changing size of objects +@c index size of objects +@c index objects, size of +@c index objects, changing size of +@c index alignAboveContext property, example +@c index @code{\with}, example +@c index alignAboveContext property, example +@c index @code{\with}, example +@c index stencil property, example +@c index Clef, example of overriding +@c index TimeSignature, example of overriding +@c ode{\set} or @code{\override} commands embedded in the +@c ode{\with} clause, or if none have been set there, the normal +@c ode{alignBelowContext}, are two such properties -- once the staff +@c index alignAboveContext property, example +@c index @code{\with}, example +@c index Clef, example of overriding +@c index TimeSignature, example of overriding +@c index alignAboveContext property, example +@c index @code{\with}, example +@c index Clef, example of overriding +@c index TimeSignature, example of overriding +@c index fontSize property, example +@node Objektumok hossza és vastagsága +@subsection Objektumok hossza és vastagsága +@translationof Length and thickness of objects +@translationof Length and thickness of objects + +@untranslated + + +@c index distances +@c index thickness +@c index length +@c index magstep +@c index size, changing +@c index stem length, changing +@c index staff line spacing, changing +@c ode{line-thickness.} For example, by default, the lines of +@c ode{beam-thickness} property, which is measured in staff-spaces. +@c ode{magstep} provided for exactly this purpose. It takes +@c index alignAboveContext property, example +@c index @code{\with}, example +@c index Clef, example of overriding +@c index TimeSignature, example of overriding +@c index fontSize property, example +@c index StaffSymbol, example of overriding +@c index magstep function, example of using +@c index staff-space property, example +@c index stencil property, example +@c ode{thickness} property. An example of changing the thickness +@node Objektumok elhelyezése +@section Objektumok elhelyezése +@translationof Placement of objects +@translationof Placement of objects + +@untranslated + + +@menu +* Automatikus viselkedés:: +* Vonalrendszeren belüli objektumok:: +* Vonalrendszeren kívüli objektumok:: +@end menu + +@node Automatikus viselkedés +@subsection Automatikus viselkedés +@translationof Automatic behavior +@translationof Automatic behavior + +@untranslated + + +@c index within-staff objects +@c index outside-staff objects +@c index objects, within-staff +@c index objects, outside-staff +@c ode{outside-staff-priority} property to determine the order in +@c ode{outside-staff-priority}. The outside-staff objects are +@c ode{outside-staff-priority}, and placed so that they do not +@c ode{outside-staff-priority} the one encountered first will be +@c index markup example +@node Vonalrendszeren belüli objektumok +@subsection Vonalrendszeren belüli objektumok +@translationof Within-staff objects +@translationof Within-staff objects + +@untranslated + + +@c index down +@c index up +@c index center +@c index neutral +@c index Stem, example of overriding +@c index direction property, example +@c ode{UP} for stems, but for some objects it means @q{center}. +@c ode{\once \override} command or use the predefined command +@c ode{\xxxNeutral} command. +@unnumberedsubsubsec Ujjrend +@c index fingering, placement +@c index fingering, chords +@c index Fingering, example of overriding +@c index direction property, example +@c index fingering example +@c index fingering example +@c index fingering example +@c ode{\set fingeringOrientations} command. The format of this +@c ode{\set fingeringOrientations = #'([up] [left/right] [down])} +@c ode{\set} is used because @code{fingeringOrientations} is a +@c ode{New_fingering_engraver}. +@c ode{up} appears in the list), below (if @code{down} appears), +@c ode{right} are mutually exclusive -- fingering may be placed +@c index fingering example +@c index @code{\set}, example of using +@c index fingeringOrientations property, example +@c ode{Fingering} object in the IR to be @code{-5}, so let's +@node Vonalrendszeren kívüli objektumok +@subsection Vonalrendszeren kívüli objektumok +@translationof Outside-staff objects +@translationof Outside-staff objects + +@untranslated + + +@c ode{grob-interface} and so is a property of all layout objects. +@c index spanners +@c ode{outside-staff-priority} of the @code{Hairpin} object will +@c ode{DynamicLineSpanner} object instead. This override must be +@c index text spanner +@c index ottava bracket +@c index TextSpanner, example of overriding +@c index bound-details property, example +@c index tweaking bar number placement +@c index bar numbers, tweaking placement +@c index tweaking metronome mark placement +@c index metronome mark, tweaking placement +@c index tweaking rehearsal mark placement +@c index rehearsal marks, tweaking placement +@c ode{Bar_number_engraver}, @code{Metronome_mark_engraver} or +@c ode{Mark_engraver} respectively should be removed from the +@c ode{Score} context and placed in the top @code{Staff} context. If +@c ode{outside-staff-priority} values: +@c ode{TextSpanner}, remembering that @code{OttavaBracket} is created +@c index TextSpanner, example of overriding +@c index bound-details property, example +@c index slurs and outside-staff-priority +@c index slurs and articulations +@c index articulations and slurs +@c index TextScript, example of overriding +@c index outside-staff-priority property, example +@subheading A \textLengthOn parancs +@c index notes, spreading out with text +@c ode{\textLengthOff}. Remember @code{\once} only works with +@c ode{\override}, @code{\set}, @code{\revert} or @code{unset}, +@c index markup text, allowing collisions +@c index TextScript, example of overriding +@c index outside-staff-priority property, example +@subheading Dinamika +@c index tweaking dynamics placement +@c index dynamics, tweaking placement +@subheading Grobok méretezése +@c index grob sizing +@c index sizing grobs +@c ode{grob-interface}. +@c index @code{extra-spacing-width} +@c ode{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}. So +@c ode{'(0 . 0)} so the true width shines through. This is +@c index DynamicText, example of overriding +@c index extra-spacing-width property, example +@c index DynamicText, example of overriding +@c index extra-spacing-width property, example +@c ode{staff-padding} which is covered in the following section. +@node Objektumok ütközése +@section Objektumok ütközése +@translationof Collisions of objects +@translationof Collisions of objects + +@untranslated + + +@menu +* Objektumok mozgatása:: +* Egymást átfedő jelek javítása:: +* Valós zenei példa:: +@end menu + +@node Objektumok mozgatása +@subsection Objektumok mozgatása +@translationof Moving objects +@translationof Moving objects + +@untranslated + + +@c index moving overlapping objects +@c index moving colliding objects +@c index moving colliding grobs +@c index objects, moving colliding +@c index grobs, moving colliding +@c ode{direction} +@ref{Vonalrendszeren belüli objektumok}. +@c ode{padding}, @code{left-padding}, +@c ode{right-padding}, @code{staff-padding} +@c index padding +@c index left-padding property +@c index padding property +@c index right-padding property +@c index staff-padding property +@c ode{side-position-interface}. +@c ode{AccidentalPlacement} object has any effect on the placement +@c ode{padding} property: @code{padding} controls the minimum amount of +@c ode{side-position-interface} and the nearest other object (generally +@c ode{self-alignment-X} +@c index self-alignment-X property +@c ode{-1} and @code{+1} may be specified, where @code{-1} is +@c ode{extra-spacing-width} +@c index extra-spacing-width property +@c ode{item-interface}. It takes two numbers, the first is added +@c ode{staff-position} +@c index staff-position property +@c ode{staff-position} is a property of the +@c ode{staff-symbol-referencer-interface}, which is supported by +@c ode{force-hshift} +@c index force-hshift property +@ref{Szólamok kézi létrehozása}) do not resolve the note +@c index extra-offset property +@c ode{grob-interface}. It takes a pair of numbers which specify the +@c index positions property +@node Egymást átfedő jelek javítása +@subsection Egymást átfedő jelek javítása +@translationof Fixing overlapping notation +@translationof Fixing overlapping notation + +@untranslated + + +@subheading padding (térköz) tulajdonság +@c index padding +@c index fixing overlapping notation +@c index overlapping notation +@c index Script, example of overriding +@c index padding property, example +@c index MetronomeMark, example of overriding +@c index padding property, example +@c ode{Voice} context will not be noticed. For more details, see +@subheading left-padding (bal térköz) és right-padding (jobb térköz) tulajdonságok +@c index left-padding property +@c index right-padding property +@c index Accidental, example of overriding +@c index text property, example +@c index stencil property, example +@c index AccidentalPlacement, example of overriding +@c index right-padding property, example +@subheading staff-padding (kottasorok közötti térköz) tulajdonság +@c index aligning objects on a baseline +@c index objects, aligning on a baseline +@c ode{staff-padding} can be used to align objects such as dynamics +@c ode{DynamicLineSpanner}. This is because the baseline should apply +@c index DynamicText, example of overriding +@c index extra-spacing-width property, example +@c index DynamicLineSpanner, example of overriding +@c index staff-padding property, example +@subheading self-alignment-X (vízszintes igazítás) tulajdonság +@c index StringNumber, example of overriding +@c index self-alignment-X property, example +@subheading staff-position (kottasor-pozíció) tulajdonság +@c index object collision within a staff +@c ode{staff-position} is set to -4 for MultiMeasureRest, so we need to +@c index MultiMeasureRest, example of overriding +@c index staff-position property, example +@subheading extra-offset (extra eltolás) tulajdonság +@c index positioning objects +@c index positioning grobs +@c index objects, positioning +@c index grobs, positioning +@c index Fingering, example of overriding +@c index extra-offset property, example +@subheading positions (pozíciók) tulajdonság +@c index controlling tuplets, slurs, phrasing slurs, and beams manually +@c index manually controlling tuplets, slurs, phrasing slurs, and beams +@c index tuplet beams, controlling manually +@c index slurs, controlling manually +@c index phrasing slurs, controlling manually +@c index beams, controlling manually +@c index PhrasingSlur, example of overriding +@c index positions property, example +@c index Beam, example of overriding +@c index positions property, example +@subheading force-hshift (kényszerített vízszintes eltolás) tulajdonság +@c FIXME: formatting stuff (ie not important right now IMO) +@c @a nchor Chopin finally corrected TODOgp +@c index NoteColumn, example of overriding +@c index force-hshift property, example +@node Valós zenei példa +@subsection Valós zenei példa +@translationof Real music example +@translationof Real music example + +@untranslated + + +@c The following should appear as music without code +@c This example should not be indexed +@c line-width ensures no break +@c line-width ensures no break +@c line-width ensures no break +@c ode{staff-position} property, which is specified in half staff +@c ode{\once \override Tie #'staff-position = #3.5} +@c line-width ensures no break +@c line-width ensures no break +@c index Tie, example of overriding +@c index staff-position property, example +@c line-width ensures no break +@c index NoteColumn, example of overriding +@c index force-hshift property, example +@c index Stem, example of overriding +@c index transparent property, example +@c line-width ensures no break +@node További finomhangolás +@section További finomhangolás +@translationof Further tweaking +@translationof Further tweaking + +@untranslated + + +@menu +* A finomhangolás más felhasználási módjai:: +* Változók felhasználása a finomhangoláshoz:: +* Stíluslapok:: +* További információforrások:: +* A lassabban feldolgozható finomhangolások elkerülése:: +* Haladó finomhangolás Scheme-mel:: +@end menu + +@node A finomhangolás más felhasználási módjai +@subsection A finomhangolás más felhasználási módjai +@translationof Other uses for tweaks +@translationof Other uses for tweaks + +@untranslated + + +@c index transparent property, use of +@c index objects, making invisible +@c index removing objects +@c index objects, removing +@c index hiding objects +@c index objects, hiding +@c index invisible objects +@c index objects, invisible +@c index tying notes across voices +@subheading Átkötés különböző szólamok hangjai között +@c index Stem, example of overriding +@c index transparent property, example +@c ode{length} to @code{8}, +@subheading Korona szimulációja MIDI-ben +@c index stencil property, use of +@c index fermata, implementing in MIDI +@c index MetronomeMark, example of overriding +@c index transparent property, example +@c index MetronomeMark, example of overriding +@c index stencil property, example +@node Változók felhasználása a finomhangoláshoz +@subsection Változók felhasználása a finomhangoláshoz +@translationof Using variables for tweaks +@translationof Using variables for tweaks + +@untranslated + + +@c index variables, using for tweaks +@c index using variables for tweaks +@c index tweaks, using variables for +@c ode{\override Lyrics . LyricText #'font-shape = #'italic} +@c ode{\override Lyrics . LyricText #'font-series = #'bold} +@c ode{\revert Lyrics . LyricText #'font-shape} +@c ode{\revert Lyrics . LyricText #'font-series} +@c index LyricText, example of overriding +@c index font-shape property, example +@c index font-series property, example +@node Stíluslapok +@subsection Stíluslapok +@translationof Style sheets +@translationof Style sheets + +@untranslated + + +@ref{A kimenet finomhangolása}, for details. But what if you have many +@ref{Haladó finomhangolás Scheme-mel}. +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. +@c ode{\include "definitions.ily"} with +@c ode{\include "web-publish.ily"}. Of course, we could make this +@node További információforrások +@subsection További információforrások +@translationof Other sources of information +@translationof Other sources of information + +@untranslated + + +@node A lassabban feldolgozható finomhangolások elkerülése +@subsection A lassabban feldolgozható finomhangolások elkerülése +@translationof Avoiding tweaks with slower processing +@translationof Avoiding tweaks with slower processing + +@untranslated + + +@node Haladó finomhangolás Scheme-mel +@subsection Haladó finomhangolás Scheme-mel +@translationof Advanced tweaks with Scheme +@translationof Advanced tweaks with Scheme + +@untranslated + + +@c ode{\tweak} commands, an even more powerful way of modifying +@c index x11-color function, example of using +@c index NoteHead, example of overriding +@c index color property, setting to Scheme procedure + diff --git a/Documentation/hu/macros.itexi b/Documentation/hu/macros.itexi new file mode 100644 index 0000000000..7c747c4a31 --- /dev/null +++ b/Documentation/hu/macros.itexi @@ -0,0 +1,755 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: 4e069c190dfd3b208a35ae8e053c5678acde69fe + + 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 + + +@include version.itexi +@include common-macros.itexi + +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +This file should contain macro defintions 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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. +@c In Hungarian that is `foo' and ,,foo''. + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@quotedblbase{}\TEXT\@quotedblright{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@html +
+@end html +@strong{Figyelem:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Figyelem:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + + +@macro docMain +@cartouche +A teljes dokumentáció a @w{@uref{http://@/www@/.lilypond@/.org/}} honlapon +található. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@quotation +Ezt a dokumentumot a GNU Free Documentation License (GNU Szabad +Dokumentációs Licenc) 1.1-es vagy frissebb, a Free Software Foundation +(Szabad Szoftver Alapítvány) által kiadott verziójának megfelelően +lehet másolni, terjeszteni és/vagy módosítani, nem változtatható szakaszok nélkül. +A licenc másolata a ,,GNU Free Documentation License'' című függelékben +található. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +Ez a dokumentum közkincs. +@end copying +@end ifclear + + + +@c ***** Title page ***** +@ifnottex +@node Top +@top LilyPond --- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle A kottaszedő program +@titlefont{\TITLE\} +@author A LilyPond fejlesztőcsapata + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +A LilyPond @version{} verziójához +@end titlepage + +@end macro + + +@c ***** Headings in a doc subsection ***** + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Előre definiált parancsok +@end macro + +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the next macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Válogatott kódrészletek +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading Lásd még +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Ismert problémák és figyelmeztetések +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Zenei fogalomtár} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Zenei fogalomtár} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Tankönyv} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Tankönyv} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,A kottaírás kézikönyve} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,A kottaírás kézikönyve} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Bővítmények írása} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Bővítmények írása} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Változások} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Változások} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Útmutató közreműködőknek} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Útmutató közreműködőknek} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,general-big-page,Általános információk} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,general-big-page,Általános információk} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Esszé} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Esszé} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Az alkalmazás használata} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Az alkalmazás használata} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Kódrészletek} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Kódrészletek} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,A belső működés referenciája} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,A belső működés referenciája} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Zenei fogalomtár} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Zenei fogalomtár} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Tankönyv} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Tankönyv} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,A kottaírás kézikönyve} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,A kottaírás kézikönyve} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Változások} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Változások} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Bővítmények írása} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Bővítmények írása} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Útmutató közreműködőknek} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Útmutató közreműködőknek} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,general,Általános információk} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,general,Általános információk} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Esszé} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Esszé} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Az alkalmazás használata} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Az alkalmazás használata} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Kódrészletek} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Kódrészletek} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,A belső működés referenciája} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,A belső működés referenciája} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Zenei fogalomtár} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Zenei fogalomtár} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Tankönyv} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Tankönyv} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,A kottaírás kézikönyve} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,A kottaírás kézikönyve} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Változások} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Változások} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Bővítmények írása} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Bővítmények írása} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Útmutató közreműködőknek} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Útmutató közreműködőknek} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-general,Általános információk} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-general,Általános információk} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Esszé} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Esszé} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Az alkalmazás használata} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Az alkalmazás használata} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Kódrészletek} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Kódrészletek} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,A belső működés referenciája} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,A belső működés referenciája} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Zenei fogalomtár} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Zenei fogalomtár} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning,Tankönyv} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning,Tankönyv} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation,A kottaírás kézikönyve} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation,A kottaírás kézikönyve} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Változások} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Változások} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Bővítmények írása} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Bővítmények írása} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Útmutató közreműködőknek} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Útmutató közreműködőknek} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,general,Általános információk} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,general,Általános információk} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Esszé} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Esszé} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage,Az alkalmazás használata} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage,Az alkalmazás használata} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Kódrészletek} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Kódrészletek} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,A belső működés referenciája} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,A belső működés referenciája} +@end macro + +@end iftex + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
+@end html +@iftex +@image{examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + +@c LEGALESE + +@macro logoLegalLinux +Tux, a Linux pingvin @uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} +műve, és a @uref{http://www.isc.tamu.edu/~lewing/gimp/, GNU Image +Manipulation Program} segítségével készült. + +@end macro + +@macro logoLegalFreeBSD +A FreeBSD logó a @uref{http://www.freebsd.org/, FreeBSD Alapítvány} +bejegyzett védjegye. + +@end macro + +@macro logoLegalMacOSX +Az @qq{X-et ábrázoló kép} nem bejegyzett védjegy. +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} és +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull} műve, +a GNU Free Documentation License (GNU Szabad Dokumentációs Licenc) 1.2-es +verziója vonatkozik rá. +A kép forrása +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +ez a Wikipedia Commons oldal}. + +@end macro + +@macro logoLegalWindows +A @qq{négyszínű ablakot ábrázoló kép} nem bejegyzett védjegy. +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} műve és +a GNU Free Documentation License (GNU Szabad Dokumentációs Licenc) 1.2-es +verziója vonatkozik rá. +A kép forrása +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +ez a Wikipedia Commons oldal}. + +@end macro + +@end ifset diff --git a/Documentation/hu/search-box.ihtml b/Documentation/hu/search-box.ihtml new file mode 100644 index 0000000000..fb526ad72c --- /dev/null +++ b/Documentation/hu/search-box.ihtml @@ -0,0 +1,13 @@ +
+ + + +
diff --git a/Documentation/hu/texidocs/GNUmakefile b/Documentation/hu/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/hu/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/hu/translations.itexi b/Documentation/hu/translations.itexi new file mode 100644 index 0000000000..058cb51fd5 --- /dev/null +++ b/Documentation/hu/translations.itexi @@ -0,0 +1,514 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Last updated Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond Tankönyv +@tab Translators +@tab Translation checkers +@tab Translated +@tab Up to date +@tab Other info +@item +Section titles +@* +124 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +1 Első lecke +@* +2535 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +partially (80 %) +@end html +@end ifhtml +@ifnothtml +partially (80 %) +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +2 Elemi kottaírás +@* +4184 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +3 Alapfogalmak +@* +11139 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +4 A kimenet finomhangolása +@* +15408 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +no +@end html +@end ifhtml +@ifnothtml +no +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +A Sablonok +@* +225 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +no +@end html +@end ifhtml +@ifnothtml +no +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond Használati útmutató +@tab Translators +@tab Translation checkers +@tab Translated +@tab Up to date +@tab Other info +@item +Section titles +@* +135 +@tab Team-hu +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Team-hu +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +1 A @command{lilypond} használata +@* +3622 +@tab Team-hu +@tab +@tab +@ifhtml + +@html +partially (96 %) +@end html +@end ifhtml +@ifnothtml +partially (96 %) +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +2 A @command{convert-ly} használata +@* +1189 +@tab Team-hu +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond -- kottaszedés mindenkinek +@tab Translators +@tab Translation checkers +@tab Translated +@tab Up to date +@tab Other info +@item +Section titles +@* +585 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +Bevezetés +@* +4506 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +Letöltés +@* +1183 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +Dokumentáció +@* +1200 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +Közösség +@* +1755 +@tab Harmath Dénes +@tab +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@end multitable + diff --git a/Documentation/hu/usage.tely b/Documentation/hu/usage.tely new file mode 100644 index 0000000000..03c6277c7f --- /dev/null +++ b/Documentation/hu/usage.tely @@ -0,0 +1,84 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: b005971680bc6d01130420478dcd09bc6569de97 + + 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 + +@setfilename lilypond-usage.info +@settitle LilyPond Használati útmutató +@documentencoding UTF-8 +@documentlanguage hu +@afourpaper + +@c translator: Team-hu + +@macro manualIntro +Ez a dokumentáció ismerteti, hogyan kell a LilyPond @version{} verziójához +tartozó programokat futtatni, valamint tanácsokat ad azok hatékony +használatához. +@end macro + +@c `Usage' was born 1999-10-10 with git commit c82c30c... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 a szerzők. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription A LilyPond kottaszedő rendszer alkalmazásainak használata +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Hungarian +@end ignore + + +@lilyTitlePage{Használat} + + +@c TOC -- non-tex +@ifnottex + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* A lilypond használata:: A kottaszedő alkalmazás futtatása. +* A convert-ly használata:: Bemeneti fájlok frissítése. +* A lilypond-book használata:: Szöveg és zene integrációja. +* Külső programok:: A LilyPond és más programok együttműködése. +* Hasznos tanácsok:: Célravezető tippek. + +Függelék + +* GNU Free Documentation License:: E dokumentum licence. +* LilyPond tárgymutató:: +@end menu + +@docMain +@end ifnottex + + +@contents + + +@include usage/running.itely +@include usage/updating.itely +@include usage/lilypond-book.itely +@include usage/external.itely +@include usage/suggestions.itely + +@include fdl.itexi + +@node LilyPond index +@appendix LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/hu/usage/GNUmakefile b/Documentation/hu/usage/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/hu/usage/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/hu/usage/lilypond-book.itely b/Documentation/hu/usage/lilypond-book.itely new file mode 100644 index 0000000000..b331b8a85f --- /dev/null +++ b/Documentation/hu/usage/lilypond-book.itely @@ -0,0 +1,1256 @@ +@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]@{@} +@end example + +@noindent +produces + +@lilypond[quote,fragment,staffsize=11]{} + +@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]@{@} +@end example + +@noindent +produces + +@lilypond[fragment,staffsize=11]{} + +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 + +\key c \minor c4 es g2 + +@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{}, where the options +are separated by a colon from the music, for example + +@example +Some music in a line of text. +@end example + +To include separate files, say + +@example +@var{filename} +@end example + +For a list of options to use with the @code{lilypond} or +@code{lilypondfile} tags, see @ref{Music fragment options}. + +Additionally, @code{} 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 + + + + + +@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 + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@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 + + + + + +

+Documents for lilypond-book may freely mix music and text. For +example, + +\relative c'' @{ + a4 b c d +@} + +

+ +

+Another bit of lilypond, this time with options: + + +a4 b c d + +

+ + + + + +@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}. + + diff --git a/Documentation/hu/usage/running.itely b/Documentation/hu/usage/running.itely new file mode 100644 index 0000000000..1808f69c46 --- /dev/null +++ b/Documentation/hu/usage/running.itely @@ -0,0 +1,611 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- + +@ignore + Translation of GIT committish: b005971680bc6d01130420478dcd09bc6569de97 + + 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 A lilypond használata +@chapter A @command{lilypond} használata +@translationof Running lilypond + +Ez a fejezet a LilyPond használatának technikai vonzatait részletezi. + +@menu +* Egyszerű használat:: +* Parancssori használat:: +* Hibaüzenetek:: +* Gyakori hibák:: +@end menu + + +@node Egyszerű használat +@section Egyszerű használat +@translationof Normal usage + +A legtöbb felhasználó grafikus felületről indítja a LilyPondot; ennek módját +az @rlearning{Első lecke} írja le. Kényelmi szolgáltatásokat nyújtó +szövegszerkesztők használatának leírása a saját dokumentációjukban található. + + +@node Parancssori használat +@section Parancssori használat +@translationof Command-line usage + +Ez a szakasz a LilyPond parancssori futtatásáról tartalmaz plusz +információkat, arra az esetre, ha a programnak plusz paramétereket szeretnénk +átadni. Ráadásul bizonyos segédprogramok (mint pl. a @code{midi2ly}) csak +parancssorból érhetőek el. + +@emph{Parancssor} alatt az operációs rendszer megfelelő parancssorát értjük. +A Windows-felhasználók ezt @qq{DOS-parancssor} néven, a Mac@tie{}OS@tie{}X +felhasználok @qq{Terminal} néven ismerhetik. + +Az operációs rendszer parancssorának használatának leírása kívül esik a +LilyPond dokumentációjának hatáskörén; az ebben kevésbé járatos felhasználók +az operációs rendszerhez tartozó dokumentációban olvashatnak erről. + +@menu +* A lilypond futtatása:: +* A lilypond parancssori paraméterei:: +* Környezeti változók:: +@end menu + +@node A lilypond futtatása +@unnumberedsubsec A @command{lilypond} futtatása +@translationof Invoking lilypond + +A @command{lilypond} program a következő módon futtatható parancssorból: + +@example +lilypond [@var{opció}]@dots{} @var{fájlnév}@dots{} +@end example + +Ha nem adunk meg kiterjesztést, az alapértelmezett @file{.ly} kiterjesztéssel +próbálkozik a LilyPond. A szabványos bemenetről való beolvasáshoz a @code{-} +karakter használandó @var{fájlnév} gyanánt. + +Amikor a @file{fájlnév.ly} fájl feldolgozásra kerül, egy @file{fájlnév.ps} +és egy @file{fájlnév.pdf} fájlt kapunk kimenetként. Több fájlt is +feldolgoztathatunk egyszerre; ezek egymástól függetlenül kerülnek +feldolgozásra. @footnote{A GUILE megelőző állapota nem áll vissza feldolgozás +után, így elővigyázatosnak kell lenni, hogy ne változtassuk meg a rendszer +alapbeállításait Scheme kódból.} + +Ha a @file{fájlnév.ly} több @code{\book} blokkot tartalmaz, minden blokkból +egy-egy, számozott kimeneti fájl keletkezik, @file{fájlnév.pdf}, +@file{fájlnév-1.pdf}, @file{fájlnév-2.pdf} stb. formában. Az +@code{output-suffix} változó értéke fog szerepelni a fájlnév és a számozás +között. Például a következő bemeneti fájlból: + +@example +#(define output-suffix "violino") +\score @{ @dots{} @} +#(define output-suffix "cello") +\score @{ @dots{} @} +@end example + +@noindent +egy @file{@var{fájlnév}-violino.pdf} és egy @file{@var{fájlnév}-cello-1.pdf} +nevű fájl keletkezik. + +@node A lilypond parancssori paraméterei +@unnumberedsubsec A @command{lilypond} parancssori paraméterei +@translationof Command line options for lilypond + +@cindex parancssori paraméterek + +A következő parancssori opciók támogatottak: + +@table @code + +@item -e,--evaluate=@var{kifejezés} +A Scheme @var{kifejezés} kiértékelése az @file{.ly} fájlok beolvasása előtt. +Több @code{-e} opció is megadható, ezek a megadott sorrendben lesznek +végrehajtva. + +A kifejezés kiértékelése a @code{guile-user} modulban történik, így ha +definíciókat kell használni a @var{kifejezés}ben, a parancssorban a következőt +kell megadni: + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +a forrásfájl elejére pedig a következőt kell beszúrni: + +@example +#(use-modules (guile-user)) +@end example + +@item -f,--format=@var{formátum} +A kimenet formátuma. Lehetőségek: @code{ps}, @code{pdf} vagy @code{png}. + +Példa: @code{lilypond -fpng @var{fájlnév}.ly} + +@item -d,--define-default=@var{azonosító}=@var{érték} +Az @var{azonosító} nevű belső változó beállítása az @var{érték} Scheme +értékre. Ha az @var{érték} nincs megadva, az alapértelmezett @code{#t} +lesz a változó értéke. Egy opció kikapcsolásához a @code{no-} prefixumot +kell az azonosító elé írni, pl. + +@cindex point-and-click, parancssor + +@example +-dno-point-and-click +@end example + +@noindent +ugyanaz, mint +@example +-dpoint-and-click='#f' +@end example + +Íme pár hasznos opció: + +@cindex súgó, parancssor + +@table @samp +@item help +A @code{lilypond -dhelp} parancs futtatása kilistázza az összes elérhető +@code{-d} opciót. + +@cindex papírméret, parancssor + +@item paper-size +Az alapértelmezett papírméret beállítása. +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Ügyelni kell arra, hogy a méretet @code{\"} jelek közé írjuk. +@c Match " in previous line to help context-sensitive editors + +@cindex biztonsági mód, parancssor + +@item safe +A LilyPond futtatása biztonsági módban, megbízhatatlan bemenet esetén. + +Amikor a LilyPond egy webszerveren keresztül érhető el, vagy a @code{-dsafe}, +vagy a @code{--jail} opciót @b{MINDENKÉPPEN KÖTELEZŐ} megadni. A @code{-dsafe} +opcióval megelőzhető, hogy a forrásfájlban szereplő rosszindulatú Scheme kód +kárt okozzon. Például: + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +@code{-dsafe} módban a Scheme kifejezések kiértékelése egy speciális +biztonsági modulban történik. Ez a modul a GUILE @file{safe-r5rs} modulján +alapul, de a LilyPond API néhány függvényének meghívását lehetővé teszi. +Ezek a függvények a @file{scm/safe-lily.scm} fájlban találhatóak. + +Ezenkívül biztonsági módban tilos az @code{\include} parancsok alkalmazása +és a \ karakter használata @TeX{} karakterláncokban. + +Biztonsági módban ezenfelül nem lehetséges LilyPond változók importálása +Scheme-be. + +A @code{-dsafe} mód @emph{nem} figyeli az erőforrások túlzott használatát. +Továbbra is elérhető, hogy a program tetszőlegesen hosszú ideig fusson, +például ciklikus adatstruktúrák használatával. Így ha a LilyPond publikus +webszerveren fut, a folyamat processzor- és memóriafelhasználását korlátozni +kell! + +Biztonsági módban sok hasznos LilyPond kódrészlet nem fog lefordulni. +A @code{--jail} mód egy több lehetőséget biztosító alternatíva, de +előkészítése több munkát igényel. + +@cindex kimeneti formátum +@item backend +A szedés kimeneti formátuma. Lehetőségek: +@table @code +@item ps +@cindex PostScript kimenet + PostScript. + +A PostScript fájlok teljes egészükben tartalmazzák a megjelenítéshez szükséges +TTF, Type1 és OTF betűkészleteket. Keleti karakterkészletek használata esetén +ez nagy fájlokhoz vezethet. + +@item eps + +@cindex Encapsulated PostScript +@cindex EPS (Encapsulated PostScript) + + Encapsulated PostScript. + +Minden oldal külön @file{EPS} fájlba kerül, betűtípusok nélkül, valamint egy +összesített @file{EPS} fájl is létrejön, amely az összes oldalt tartalmazza +betűtípusokkal együtt. + +A @command{lilypond-book} alapértelmezetten ezt a formátumot használja. + +@item svg + +@cindex SVG (Scalable Vector Graphics) + + SVG (Scalable Vector Graphics). + +Oldalanként egy SVG fájl keletkezik, beágyazott betűtípusok nélkül. +Így megtekintésükhöz érdemes feltelepíteni a Century Schoolbook betűtípusokat. +Ezeket tartalmazza a LilyPond. Például UNIX alatt egyszerűen csak be kell +másolni ezeket a program könyvtárából (tipikusan +@file{/usr/share/lilypond/@/VERZIÓ/fonts/otf/}) a @file{~/.fonts/} könyvtárba. +Az SVG kimenet szabványos, így bármilyen, ezt a formátumot olvasni képes +programmal megnyitható. + +@item scm + +@cindex Scheme kiíratás + +A belső Scheme rajzolóparancsok szó szerinti kiírása. + +@item null + +Nincs kimenet; ugyanaz a hatása, mint a @code{-dno-print-pages} opciónak. +@end table + +Példa: @code{lilypond -dbackend=svg @var{fájlnév}.ly} + +@item preview +@cindex előnézet, parancssor + +A fejléc és az első szisztéma fog szerepelni a kimenetben. + +@item print-pages +Teljes oldalak generálása, ez az alapbeállítás. A @code{-dno-print-pages} +opció a @code{-dpreview} opcióval együtt hasznos. + +@end table + + +@item -h,--help +Összegzés az alkalmazás használatáról. + +@item -H,--header=@var{mező} +A megadott fejlécmező kiírása a @file{@var{fájlnév}.@var{mező}} nevű fájlba. + +@item --include, -I=@var{könyvtár} +A @var{könyvtár} hozzáadása a bemeneti fájlok keresési útvonalához. +@cindex keresési útvonal + +@item -i,--init=@var{fájl} +Az inicializáló fájl beállítása a megadott @var{fájl}ra. (Alapértelmezett: +@file{init.ly}.) + +@item -o,--output=@var{fájl} +Kimeneti fájl megadása. A megfelelő kiterjesztés automatikusan hozzáfűzésre +kerül (pl. @code{.pdf} PDF kimenet esetén). + +@cindex PostScript kimenet + +@item --ps +PostScript kimenet generálása. + +@cindex Portable Network Graphics (PNG) kimenet + +@item --png +Oldalanként egy-egy PNG kép létrehozása. Ez a @code{--ps} opció hatását vonja +maga után. A kép DPI-ben mért felbontása (alapértelmezett értéke 110) a +következőképpen állítható be: +@example +-dresolution=110 +@end example + +@cindex Portable Document Format (PDF) kimenet + +@item --pdf +PDF generálása. A @code{--ps} opció hatását vonja maga után. + + +@item -j,--jail=@var{felhasználó},@var{csoport},@var{börtön},@var{könyvtár} +A @command{lilypond} futtatása ún. börtönben. + +A @code{--jail} opció egy rugalmasabb alternatíva a @code{-dsafe} módnál abban +az esetben, amikor a LilyPond forrás megbízhatatlan forrásból származik, pl. +amikor webszerveren keresztül érhető el a LilyPond szolgáltatásként. + +A @code{--jail} módban a @command{lilypond} gyökere a @var{börtön} lesz, +mielőtt a fordítási folyamat elkezdődne. Ezután a LilyPond átvált a megadott +felhasználóra, csoportra és könyvtárba. Ezáltal garantálható, hogy (legalábbis +elméletben) lehetetlen kitörni a börtönből. A @code{--jail} mód csak akkor +működik, ha a @command{lilypond} alkalmazást root felhasználóként futtatjuk. +Ez általában biztonságosan történik, pl. a @command{sudo} parancs +használatával. + +A börtön előkészítése egy bonyolult folyamat, mivel biztosítani kell, hogy a +LilyPond @emph{a börtönben} mindent megtaláljon, ami a fordításhoz szükséges. +Egy tipikus előkészítés a következő lépésekből áll: + +@table @asis +@item Különálló fájlrendszer létrehozása +A LilyPond számára létre kell hozni egy fájlrendszert, amelyet a biztonságos +@code{noexec}, @code{nodev} és @code{nosuid} opciókkal tudunk felcsatolni. +Így lehetetlen a LilyPondból programokat futtatni vagy közvetlenül eszközökre +írni. Ha egy külön partíció létrehozása nem kívánatos, egy elegendően nagy +fájl létrehozása és loop eszközként való használata is megfelelő. +A külön fájlrendszer azt is megelőzi, hogy a LilyPond többet írjon a lemezre, +mint amennyi megengedett. + +@item Különálló felhasználó létrehozása +Egy, kevés jogosultsággal rendelkező (pl. @code{lily}/@code{lily} nevű) +felhasználó és csoport nevében kell, hogy fusson a LilyPond. Ennek a +felhasználónak csak egy könyvtárhoz lehet írási joga, amit a @var{könyvtár} +paraméterben kell megadni. + +@item A börtön előkészítése +A LilyPond futásához szükséges összes fájlt be kell másolni a börtönbe, +megtartva az eredeti elérési utakat. Az egész LilyPond telepítés +(pl. a @file{/usr/share/lilypond} könyvtár tartalmának) másolása szükséges. + +Ha mégis probléma lépne fel, a forrását legegyszerűbben az @command{strace} +paranccsal határolhatjuk be, amellyel meghatározható, hogy mely fájlok +hiányoznak. + +@item A LilyPond futtatása +A @code{noexec} kapcsolóval csatolt börtönben lehetetlen külső programot +futtatni. Így csak olyan kimeneti formátumok érhetőek el, amelyek ezt nem +igénylik. Mint már említettük, superuser privilégiumokkal kell futtatni a +LilyPondot (amelyeket természetesen egyből elveszít), lehetőleg +@command{sudo} használatával. Ajánlott a LilyPond által elfoglalt +processzoridő korlátozása (pl. az @command{ulimit -t} parancs segítségével), +illetve a memóriafoglalásáé is. +@end table + + +@item -v,--version +Verzióinformáció kijelzése. + +@item -V,--verbose +Bőbeszédűség bekapcsolása: az összes beolvasott fájl elérési útjának, +futásidőknek és egyéb információknak a kijelzése. + +@item -w,--warranty +A GNU LilyPond garanciavállalásának kijelzése. (A LilyPond fejlesztői +@strong{SEMMIFÉLE GARANCIÁT} nem vállalnak!) +@end table + +@node Környezeti változók +@unnumberedsubsec Környezeti változók +@translationof Environment variables + + +@cindex LANG +@cindex LILYPOND_DATADIR +@cindex LILYPOND_GC_YIELD + +A @command{lilypond} a következő környezeti változókat veszi figyelembe: +@table @code +@item LILYPOND_DATADIR +Annak a könyvtárnak a megadására szolgál, ahol a LilyPond üzeneteit és +adatfájljait keresni fogja. Tartalmaznia kell a szükséges alkönyvtárakat +(@file{ly/}, @file{ps/}, @file{tex/} stb.). + +@item LANG +A program kimeneti üzeneteinek nyelve. + +@item LILYPOND_GC_YIELD +A program memóriaigénye és futásideje közötti finomhangolást lehet elvégezni +ezzel a változóval. Százalékos érték; minél nagyobb, annál több memóriát +használ a program, minél alacsonyabb, annál több processzoridőt. Az +alapértelmezett érték @code{70}. + +@end table + + +@node Hibaüzenetek +@section Hibaüzenetek +@translationof Error messages + +@cindex hibaüzenetek +Egy fájl fordítása során különböző hibaüzenetek jelenhetnek meg: + +@table @emph + +@item Figyelmeztetés +@cindex figyelmeztetés +Valami gyanúsnak tűnik. A figyelmeztetések azt jelzik, hogy valamit +nagy valószínűséggel nem úgy írt le a felhasználó, ahogy azt gondolta. +De ha tudatosan valami rendkívülit kérünk, akkor általában figyelmen kívül +hagyhatóak. + +@item Hiba +@cindex hiba +Valami határozottan helytelen. A feldolgozás aktuális lépése (beolvasás, +értelmezés vagy formázás) befejeződik, de a következő lépés ki fog maradni. + +@item Végzetes hiba +@cindex végzetes hiba +Olyan hiba történt, amitől a LilyPond nem tud tovább futni. Ez ritkán fordul +elő. A leggyakoribb ok a rosszul telepített betűtípusok. + +@item Scheme hiba +@cindex Scheme hiba +A Scheme kód végrehajtása során előforduló hibák, amelyeket a Scheme +interpreter kap el. Ha bőbeszédű módban fut a LilyPond, akkor a hibás +függvényhez vezető hívások kiírásra kerülnek. + +@item Programozási hiba +@cindex programozási hiba +Belső inkonzisztencia lépett fel. Ezek a hibaüzenetek a fejlesztőknek és +hibakeresőknek segítenek. Általában figyelmen kívül hagyhatóak. Néha olyan +nagy mennyiségben fordulnak elő, hogy nehéz tőlük észrevenni a többi kimeneti +üzenetet. + +@item A futás megszakadt (core dumped) +@cindex core dumped +Kritikus hiba lépett fel, amely a program futását azonnal megszakította. +Az ilyen hibákat jelenteni kell a fejlesztőknek. +@end table + +@cindex hibák formátuma +Ha a figyelmeztetések vagy hibák a bemeneti fájl egy konkrét részére +vonatkoznak, akkor az üzenet a következő formátummal bír: + +@example +@var{fájlnév}:@var{sorszám}:@var{oszlopszám}: @var{üzenet} +@var{hibás sor} +@end example + +A hibás soron belül a hiba helyét sortörés jelzi. Például: + +@example +test.ly:2:19: error: not a duration: 5 + @{ c'4 e' + 5 g' @} +@end example + +A probléma helye csak egy becslés, mely olykor pontatlan lehet, hiszen +természetüknél fogva a problémák nem várt bemenetnél lépnek fel. Ha nem +található hiba a megadott helyen, érdemes a környékén keresni. + +A hibákról bővebben a @ref{Gyakori hibák} c. szakaszban olvashatunk. + + +@node Gyakori hibák +@section Gyakori hibák +@translationof Common errors + +Az alábbi hibajelenségek gyakran előfordulnak, ugyanakkor az okuk nem mindig +egyértelmű vagy könnyen megtalálható. Ha azonban egyszer megértjük a +természetüket, gyorsan meg lehet rájuk találni a megoldást. + + +@menu +* A kotta nem fér ki az oldalra:: +* Egy kottasorral több van a kelleténél:: +* Hiba a ../ly/init.ly fájlban:: +* Unbound variable % hibaüzenet:: +* FT_Get_Glyph_Name hibaüzenet:: +@end menu + +@node A kotta nem fér ki az oldalra +@unnumberedsubsec A kotta nem fér ki az oldalra +@translationof Music runs off the page + +Ha a kotta jobb oldalra @qq{lefolyik} az oldalról, vagy rendkívül össze +van sűrítve, szinte mindig hibás hanghosszúságról van szó, amely miatt egy +ütemben az utolsó hang túlnyúlik az ütemvonalom. Ez nem számít hibának, de +ha sok ilyen van egymás után, akkor a sor nem tud megtörni, mert sortörés csak +olyan ütemek végén helyezkedhet el, amelyek végén nem nyúlik túl hang. + +A hibás ritmus könnyen megtalálható ütemhatár-ellenőrzésekkel: ld. a +@ruser{Bar and bar number checks} c. szakaszt. + +Ha sok ilyen rendhagyó ütemre van szükség, akkor láthatatlan ütemvonalat kell +oda beszúrni, ahol a sortörés megengedett. Ennek módját a @ruser{Bar lines} +c. szakasz írja le. + + +@node Egy kottasorral több van a kelleténél +@unnumberedsubsec Egy kottasorral több van a kelleténél +@translationof An extra staff appears + +Ha a kontextusokat nem explicite hozzuk létre a @code{\new} paranccsal, +akkor minden figyelmeztetés nélkül létrejön egy új kontextus ott, ahol olyan +parancs fordul elő, amely a létező kontextusban nem alkalmazható. +Egyszerű kottákban a kontextusok automatikus létrehozása hasznos, és a +legtöbb példa hasznát veszi ennek az egyszerűsítésnek. De olykor ez nem várt +kottasorok vagy tételek megjelenését eredményezheti. Például a következő +kódtól azt várnánk, hogy a kottasorban minden kottafej piros lesz, miközben +valójában az eredmény két kottasor, mely közül az alsóban alapértelmezett +színű, fekete kottafejek lesznek. + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +Ez azért történik, mert a @code{Staff} kontextus nem létezik az +@code{\override} parancs helyén, így létrejön, a finomhangolás pedig az így +létrehozott kottasorra fog vonatkozni, nem a @code{\new Staff} paranccsal +létrehozott kottasorra. A példa helyesen: + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +Másik példánkban egy @code{\relative} blokk szerepel egy @code{\repeat} +blokkon belül, ami két kottasort eredményez, amely közül a második később +kezdődik, mint az első, mert a @code{\repeat} parancs hatására két +@code{\relative} blokk keletkezik, amik implicit módon létrehoznak egy-egy +@code{Staff} és @code{Voice} kontextust. + +@lilypond[quote,verbatim] +\repeat unfold 2 { + \relative c' { c d e f } +} +@end lilypond + +A megoldás a @code{\repeat} és a @code{\relative} parancsok felcserélése, a +következő módon: + +@lilypond[quote,verbatim] +\relative c' { + \repeat unfold 2 { c d e f } +} +@end lilypond + + +@node Hiba a ../ly/init.ly fájlban +@unnumberedsubsec Hiba a @code{../ly/init.ly} fájlban +@translationof Apparent error in ../ly/init.ly + +Különféle rejtélyes hibaüzenetek jelenhetnek meg, melyek a +@file{../ly/init.ly} fájlban található szintaktikai hibára utalnak, ha a +forrásfájl nem jól formált, például nem egyezik a nyitó és csukó kapcsos +zárójelek vagy idézőjelek száma. + +A leggyakoribb hiba a hiányzó @code{@}} karakter egy blokk, pl. @code{\score} blokk +végén. A megoldás kézenfekvő: ellenőrizni kell, hogy minden kapcsos zárójelnek +megvan-e a párja. A @rlearning{Hogyan működnek a LilyPond bemeneti fájlok?} +lecke írja le a forrásfájlok helyes szerkezetét. Egy olyan szövegszerkesztő +használatával, mely kiemeli a zárójelpárokat, elkerülhetőek az ilyen hibák. + +Egy másik gyakori ok az, hogy nincs szóköz a dalszöveg utolsó szótagja és a +dalszöveg blokk záró kapcsos zárójele között. Enélkül az elválasztás nélkül a +kapcsos zárójel a szótag részének számít. Emellett @emph{minden} kapcsos +zárójel körül érdemes szóközt vagy sortörést hagyni. A jelenség magyarázata a +@ruser{Lyrics explained} c. szakaszban olvasható. + +A hiba akkor is előfordulhat, amikor egy záró idézőjel (@code{"}) hiányzik. +@c keep "-matching straight in fancy editors +Ebben az esetben a hiba egy közeli sorban jelentkezik. A pár nélküli idézőjel +általában néhány sorral feljebb található. + +@node Unbound variable % hibaüzenet +@unnumberedsubsec @code{Unbound variable %} hibaüzenet +@translationof Error message Unbound variable % + +Ez a hiba akkor fordul elő (egy @qq{GUILE signaled an error ...} hibaüzenettel +együtt), amikor a LilyPondba ágyazott Scheme kód @emph{LilyPond} formátumú +megjegyzést tartalmaz @emph{Scheme} formátumú helyett. + +A LilyPondban a megjegyzések százalékjellel (@code{%}) kezdődnek, és nem +használhatóak Scheme kódon belül. A Scheme kódban a megjegyzések +pontosvesszővel (@code{;}) kezdődnek. + +@node FT_Get_Glyph_Name hibaüzenet +@unnumberedsubsec @code{FT_Get_Glyph_Name} hibaüzenet +@translationof Error message FT_Get_Glyph_Name + +Ez a hiba azt jelzi, hogy a bemeneti fájl egy nem ASCII karaktert tartalmaz, +ugyanakkor nem UTF-8 karakterkódolással lett elmentve. Részletekért ld. a +@ruser{Text encoding} c. szakaszt. diff --git a/Documentation/hu/usage/updating.itely b/Documentation/hu/usage/updating.itely new file mode 100644 index 0000000000..0c8e5af348 --- /dev/null +++ b/Documentation/hu/usage/updating.itely @@ -0,0 +1,256 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- + +@ignore + Translation of GIT committish: b005971680bc6d01130420478dcd09bc6569de97 + + 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 A convert-ly használata +@chapter A @command{convert-ly} használata +@translationof Updating files with convert-ly + +@cindex fájlok frissítése +@cindex convert-ly + +A LilyPond nyelvtana rendszeresen változik, hogy egyszerűsödjön és fejlődjön. +Ennek mellékhatásaként a LilyPond olykor nem tudja értelmezni a régebbi +forrásfájlokat. Ezt az inkompatibilitást hidalja át a @command{convert-ly} +segédprogram, mely a verziók közötti nyelvváltozások legtöbbjét lekezeli. + +@menu +* Miért változik a szintaxis?:: +* A convert-ly futtatása:: +* A convert-ly parancssori paraméterei:: +* Problémák a convert-ly futtatása közben:: +* Kézi frissítés:: +@end menu + + +@node Miért változik a szintaxis? +@section Miért változik a szintaxis? +@translationof Why does the syntax change? + +Ahogy a LilyPond maga fejlődik, a szintaxis (azaz a bemenet nyelve) is ennek +megfelelően változik. Ezek a változások azért mennek végbe, hogy a bemenetet +könnyebb legyen olvasni és írni, vagy a LilyPond új képességeihez igazodnak. + +Például minden @code{\paper} és @code{\layout} blokkbeli tulajdonság nevében a +szavak konvenció szerint kötőjelekkel kerülnek elválasztásra. A 2.11.60-as +verzióban azonban észrevettük, hogy a @code{printallheaders} tulajdonság nem +követi ezt a konvenciót. Felmerült a kérdés: úgy hagyjuk, ahogy eddig volt +(így inkonzisztenciával megzavarva az új felhasználókat), vagy +megváltoztassuk (így arra kényszerítve a régi felhasználókat, hogy meglévő +kottáikat frissítsék)? Ebben az esetben amellett döntöttünk, hogy +megváltoztatjuk @code{print-all-headers}-re. Szerencsére ezt a változás +automatikusan kezelhető a @command{convert-ly} parancssori eszközzel. + +Sajnos a @code{convert-ly} nem képes a nyelvtan minden változását lekezelni. +Például a LilyPond 2.4-es és korábbi verzióiban az ékezetes és egyéb, nem +angol ábécébe tartozó karaktereket a LaTeX-ben megszokott módszerrel kellett +megadni (pl. a francia Noël szót a következőképpen: @code{No\"el}). De a +@c keep "-matching straight in fancy editors +LilyPond 2.6-os verziója óta minden ilyen karakter, pl. az @code{ë} is +közvetlenül beleírható a bemeneti fájlba UTF-8 karakterkódolással. A +@code{convert-ly} nem képes minden LaTeX szintaxissal megadott speciális +karaktert átkonvertálni az UTF-8 megfelelőjébe; ezeket kézzel kell frissíteni. + + +@node A convert-ly futtatása +@section A @command{convert-ly} futtatása +@translationof Invoking convert-ly + +A @command{convert-ly} a forrásfájlban található @code{\version} parancs +alapján állapítja meg a fájl verziószámát. A legtöbb esetben a forrásfájl +frissítéséhez elegendő kiadni a + +@example +convert-ly -e @var{fájlnév}.ly +@end example + +@noindent +parancsot abban a könyvtárban, ahol a fájl található. Ez a parancs helyben +frissíti a @code{@var{fájlnév}.ly} fájlt, az eredetit pedig megőrzi +@code{@var{fájlnév}.ly~} néven. + +@warning{A @command{convert-ly} parancs alapesetben csak arra a verzióra +frissít, amelyikben a legutóbbi szintaxisváltozás történt. Így általában +a frissített fájl verziószáma kisebb lesz, mint az éppen használt programé.} + +Egy könyvtárban található összes bemeneti fájl frissítéséhez a következő +parancs használható: + +@example +convert-ly -e *.ly +@end example + +Amennyiben az újabb fájlnak más nevet szeretnénk adni, és az eredeti fájlt +változatlanul szeretnénk hagyni, a következő parancsot adjuk ki: + +@example +convert-ly @var{fájlnév}.ly > @var{újfájlnév}.ly +@end example + +Futása során a program kiírja a verziószámokat, amelyekre frissítés történt. +Ha egy verziószám sincs kiírva, akkor a fájl teljesen friss. + +A Mac OS@tie{}X-felhasználók ezt a parancsot a grafikus felületen is elérhetik +a @code{Compile > Update syntax} menüpontból. + +A Windows-felhasználóknak ezeket a parancsokat a DOS parancssorba kell beírni, +amit tipikusan a Start menüben a @code{Programok > Kellékek > Parancssor} +kiválasztásával lehet elindítani. + + +@node A convert-ly parancssori paraméterei +@section A @command{convert-ly} parancssori paraméterei +@translationof Command line options for convert-ly + +A program meghívása a következő módon történik: + +@example +convert-ly [@var{opció}]@dots{} @var{fájlnév}@dots{} +@end example + + +A következő opciók adhatóak meg: + +@table @code +@item -e,--edit +A fájl helyben frissítése. + +@item -f,--from=@var{forrásverzió} +A forrásfájl verziójának megadása. Ha nincs megadva, a @command{convert-ly} +a fájlban található @code{\version} parancs alapján kitalálja. +Példa: @code{--from=2.10.25} + +@item -n,--no-version +Alapesetben a @command{convert-ly} ellátja a kimenetét a megfelelő +@code{\version} paranccsal. Ez az opció ezt tiltja le. + +@item -s, --show-rules +Nem történik frissítés, csak a frissítési szabályok kiírása. + +@item --to=@var{célverzió} +Azt adja meg, hogy melyik verzióra frissüljön a fájl. Alapértéke a legfrissebb +elérhető verzió. Példa: @code{--to=2.12.2} + +@item -h, --help +Segítség kiírása az alkalmazás használatához. +@end table + +Texinfo fájlokban található LilyPond részletek frissítéséhez az alábbi parancs +használatos: + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +A LilyPond két verziója közötti, a nyelvtanban bekövetkezett változások +megtekintéséhez pedig a következő: + +@example +convert-ly --from=... --to=... -s +@end example + + +@node Problémák a convert-ly futtatása közben +@section Problémák a @command{convert-ly} futtatása közben +@translationof Problems running convert-ly + +Amikor olyan forrásfájlt frissítünk a @command{convert-ly} segédprogrammal +Windows alatt parancssorból, amelynek elérési útja szóközt tartalmaz, a +forrásfájl elérési útját három-három (!) idézőjel közé kell írni: + +@example +convert-ly """D:/Az én kottáim/Óda.ly""" > "D:/Az én kottáim/Óda - új.ly" +@end example + +Ha az egyszerű @command{convert-ly -e *.ly} parancs futása meghiúsul a fájlok +nagy mennyisége miatt, a másik lehetőség a @command{convert-ly} futtatása +ciklusban. A következő, UNIX alatt használható példa minden @code{.ly} fájlt +frissít az aktuális könyvtárban: + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +A Windows parancssorában a megfelelő parancs: + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +A program nem minden változást képes kezelni. +A Scheme kód és a LilyPond Scheme felületének frissítése nem történik meg, a +Scheme kódrészleteket kézzel kell átírni. + + +@node Kézi frissítés +@section Kézi frissítés +@translationof Manual conversions + +Ideális esetben a @command{convert-ly} minden változás kezelésére képes lenne. +Elvégre ha a régi verzió képes volt értelmezni a régi nyelvtant, az új verzió +pedig az újat, akkor elvileg létezhetne egy másik program, amelyik a kettő +közötti konverziót elvégzi@footnote{Legalábbis ez abban az esetben +lehetséges, ha a LilyPond fájl nem tartalmaz Scheme kódot. Ha viszont +tartalmaz, akkor egy Turing-teljes nyelvvel van dolgunk, és az +algoritmuselméletben jól ismert @qq{megállási problémába} ütközünk.}. + +A gyakorlatban azonban a LilyPond erőforrásai korlátosak: nem minden konverzió +történik meg automatikusan. Íme az ismert problémák listája. + + +@verbatim +1.6 -> 2.0: +- A számozott basszus frissítése nem tökéletes, főleg a {< >} esetében. +Ez úgy kerülhető meg, hogy a '{<' karakterlánc összes előfordulását egy +ideiglenes másik karakterláncra cseréljük, pl. '{#'-re. Hasonlóképpen a +'>}' előfordulásai '&}'-re cserélendőek. A frissítés után pedig a következő +cseréket kell végrehajtani: '{ #' -> '{ <' és '& }' -> '> }'. +- A formázott szövegek frissítése sem mindig jó. Eddig zárójelekkel +csoportosítani lehetett több formázó parancsot, pl.: + -#'((bold italic) "string") +Ez sajnos helytelenül a következővé alakul: + -\markup{{\bold italic} "string"} +A helyes ez lenne: + -\markup{\bold \italic "string"} + +2.0 -> 2.2: +- A \partcombine frissítése nem támogatott. +- Az \addlyrics => \lyricsto frissítés nem történik meg, ez több versszakkal +rendelkező kották esetében problémát okozhat. + +2.0 -> 2.4: +A következő konverziók nem támogatottak: +- \magnify #m => \fontsize #f, ahol f = 6ln(m)/ln(2)) +- \applyMusic #(remove-tag '...) => \keepWithTag #'... +- first-page-number no => print-first-page-number = ##f +- "Első sor" \\\\ "Második sor" => + \markup \center-align < "Első sor" "Második sor" > +- \rced => \! +- \rc => \! + +2.2 -> 2.4: +A \turnOff parancs (pl. a következő esetben: +\set Staff.VoltaBracket = \turnOff) frissítése helytelen. + +2.4.2 -> 2.5.9 +A \markup{ \center-align <{ ... }> } parancs a frissítés után +\markup{ \center-align {\line { ... }} } kellene, hogy legyen, de a \line +jelenleg hiányzik. + +2.4 -> 2.6 +A speciális LaTeX karakterek (pl. $~$) nem alakulnak át az UTF-8 +megfelelőjükre. + +2.8 +A \score{} blokknak innentől kezdve egy zenei kifejezéssel kell kezdődnie. +Minden más (pl. a \header{} blokk) a zene után jöhet csak. +@end verbatim diff --git a/Documentation/hu/web.texi b/Documentation/hu/web.texi new file mode 100644 index 0000000000..857678b4a7 --- /dev/null +++ b/Documentation/hu/web.texi @@ -0,0 +1,315 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 + +@setfilename web.info +@settitle LilyPond -- kottaszedés mindenkinek +@documentencoding UTF-8 +@documentlanguage hu +@afourpaper + +@c Translators: Harmath Dénes + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 by the authors. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + +@afourpaper + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Hungarian +@end ignore + +@copying +Copyright @copyright{} 2009--2011 by the authors. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +This file documents the LilyPond website. + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@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 +* Tankönyv: (lilypond-learning). Itt kezdd az olvasást. +* Fogalomtár: (music-glossary). Többnyelvű szószedet. +* Kottaírás: (lilypond-notation). A kottaírás kézikönyve. +* Kódrészletek: (lilypond-snippets). Tippek, trükkök, példák. +* Belső működés: (lilypond-internals). A belső működés referenciája. +* Használat: (lilypond-usage). Az alkalmazás használata. +* Web: (lilypond-web). A weboldal. +* lilypond: (lilypond-usage)A lilypond futtatása. Kották szedése. +* abc2ly: (lilypond-usage)Az abc2ly futtatása. ABC fájlok importálása. +* convert-ly: (lilypond-usage)A convert-ly futtatása. Konvertálás régebbi verziókról. +* etf2ly: (lilypond-usage)Az etf2ly futtatása. Finale fájlok importálása. +* lilypond-book: (lilypond-usage)A lilypond-book futtatása. Szöveg és zene integrálása. +* midi2ly: (lilypond-usage)A midi2ly futtatása. MIDI fájlok importálása. +* musicxml2ly: (lilypond-usage)A musicxml2ly futtatása. MusicXML fájlok importálása. +@end direntry + + +@c TITLE PAGE +@ifnottex +@node Top +@top LilyPond... kottaszedés mindenkinek +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle A kottaszedő program +@titlefont{Általános információk} +@author A LilyPond fejlesztőcsapat + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +Verzió: @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +...kottaszedés mindenkinek +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading Mi az a LilyPond? + +A LilyPond egy nyílt forrású kottaszedő program, +mely a lehető legjobb minőségű kotta előállítására képes. +Ez a szabad szoftver a hagyományos, kézzel szedett kották +szépségét adja vissza. + +@divClass{align-right} +Ha többet akarsz róla megtudni, olvasd el a @ref{Bevezetés}t! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Hírarchívum}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading Gyorslinkek + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Stabil + +@ref{Letöltés, Letöltés @versionStable} + +@ref{Dokumentáció, Dokumentáció @versionStable} + +@subsubheading Fejlesztői + +@ref{Fejlesztés, Letöltés @versionDevel} + +@ref{Fejlesztés, Dokumentáció @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* Bevezetés:: Itt kezdd az olvasást! +* Letöltés:: Szerezd meg a LilyPondot! +* Dokumentáció:: Olvasd el a kézikönyveket! +* Közösség:: Lépj kapcsolatba más felhasználókkal! +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@end ignore + +@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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Olvasd el + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (HTML oldalak)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (egy nagy HTML oldal)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + megtekintés sok HTML oldalra elosztva. + @*@ @ @emph{(oldalanként egy-egy kis letöltés)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + megtekintés egy nagy HTML oldalként. + @*@ @ @emph{(egyszeri, nagy letöltés, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + letöltés PDF formátumban. + @*@ @ @emph{(egyszeri, nagy letöltés, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/hu/web/GNUmakefile b/Documentation/hu/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/hu/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/hu/web/basic-authors.itexi b/Documentation/hu/web/basic-authors.itexi new file mode 100644 index 0000000000..99ba226104 --- /dev/null +++ b/Documentation/hu/web/basic-authors.itexi @@ -0,0 +1,390 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of community.itexi and ../topdocs/AUTHORS.itexi + +@ignore + + This file lists authors of LilyPond, and what they wrote. Each + list is sorted alphabetically by surname. This file lists people + that have contributed more than a few hours of work. + + Developers are people who are (or have been) listed under the + "Development Team" in the THANKS, and can choose their own + titles. Contributors are everybody else, and simply list their + contributions. All lists are sorted alphabetically. + + Anybody who has finished doing a "main devel team" task should + list it under developersPrevious, even if they're still doing + other "main devel team" stuff. See "Graham Percival" for an + example. + + Contributors are also split between Current and Previous, and + each category contains: + core... (programming) + font... (duh) + doc... (documentation and examples) + support... (building, distributions, editors, + lilypond-book, LSR, but *not* answering emails) + translations... (duh) + We might add a "general" or "other" if there's something else. + +@end ignore + + +@macro developersCurrent + +@itemize + +@item Mats Bengtsson: +@email{mats.bengtsson@@ee.kth.se}, +@uref{http://www.s3.kth.se/~mabe/}, +Támogatás + +@item Trevor Daniels: +Dokumentációszerkesztő asszisztens + +@item Reinhold Kainhofer: +@email{reinhold@@kainhofer.com}, +@uref{http://reinhold.kainhofer.com}, +MusicXML guru, hibajavítás + +@item Jonathan Kulp: +Dokumentációszerkesztő asszisztens + +@item Werner Lemberg, +@email{wl@@gnu.org}, +Betűtípus-tervező, hibajavítás + +@item John Mandereau: +@email{john.mandereau@@free.fr}, +Honosításfelelős + +@item Patrick McCarty: +SVG guru, hibajavítás, szövegkezelés + +@item Joe Neeman: +Fejlesztő + +@item Han-Wen Nienhuys: +@email{hanwen@@xs4all.nl}, +@uref{http://www.xs4all.nl/~hanwen/}, +Fő fejlesztő + +@item Jan Nieuwenhuizen: +@email{janneke@@gnu.org}, +@uref{http://www.xs4all.nl/~jantien/}, +Fő fejlesztő + +@item Graham Percival: +@uref{http://percival-music.ca}, +Projekt manager, dokumentációszerkesztő + +@item Mark Polesky: +Dokumentációszerkesztő assisztens, kódtisztítás + +@item Neil Puttock: +Fejlesztő + +@item Nicolas Sceaux: +Fejlesztő, Scheme guru + +@item Carl Sorensen: +@email{c_sorensen@@byu.edu}, +Fejlesztő, a Békák felelőse + +@item Francisco Vila: +Honosítás + +@item Valentin Villenave: +LilyPond Kódrészletek Tárházának szerkesztője, hibafelelős + +@end itemize +@end macro + + + +@macro developersPrevious + +@itemize + +@c use colons not commas for @item entries. + +@item Pedro Kroeger: +Fordításfelelős + +@item Graham Percival: +@uref{http://percival-music.ca}, +Hibafelelős, a Nagy Dokumentációs Projekt vezetője + +@item Jürgen Reuter: +@email{reuter_j@@web.de}, +@uref{http://www.juergen-reuter.de}, +Régizene lejegyzése + +@item Erik Sandberg: +Hibafelelős + +@end itemize +@end macro + + +@c ***************** current contributors + +@macro coreCurrent + +@c use commas not colons + +Frédéric Bron, +Hajo Dezelski, +Andrew Hawryluk, +Ian Hulin, +Michael Käppler, +Marek Klein, +Kieren MacMillan, +Andrew Wilson + +@c no comma for last entry + +@end macro + + + +@macro fontCurrent + +@c use commas not colons + +Simon Tatham + +@c no comma for last entry + +@end macro + + + +@macro docCurrent + +@c use commas not colons + +James Lowe, +Ralph Palmer, +Patrick Schmidt + +@c no comma for last entry + +@end macro + + +@macro supportCurrent + +@c use commas not colons + +James E. Bailey, +Christian Hitz + +@c no comma for last entry + +@end macro + + + +@macro translationsCurrent + +@c use commas not colons + +Benkő Pál, +Fodor Bertalan, +Harmath Dénes, +Rébeli-Szabó Tamás, +Selyem Zoltán Csaba, +Szervác Attila, +Udvari Gábor + +@c no comma for last entry + +@end macro + + +@c ***************** previous contributors + +@macro corePrevious + +@c use commas not colons + +Erlend Aasland, +Maximilian Albert, +Guido Amoruso, +Kristof Bastiaensen, +Pal Benko, +@c @email{benkop@@freestart.hu}, +Juliusz Chroboczek, +@c @email{jch@@pps.jussieu.fr}, +Angelo Contardi, +David Feuer, +@c @email{david.feuer@@gmail.com}, +Bertalan Fodor, +Mathieu Giraud, +Yuval Harel, +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 Krause, +@c @email{m.krause@@tu-harburg.de}, +Jean-Baptiste Lamy, +@c @email{jiba@@tuxfamily.org}, +Jonatan Liljedahl, +Peter Lutek, +Hendrik Maryns, +Joe Neeman, +@c @email{joeneeman@@gmail.com}, +Matthias Neeracher, +Tatsuya Ono, +Lisa Opus Goldstein, +Guy Gascoigne-Piggford, +Stan Sanderson, +Edward Sanford Sutton, +Andreas Scherer, +Johannes Schindelin, +Kim Shrier, +Vicente Solsona Della, +David Svoboda, +Sebastiano Vigna, +Arno Waschk, +Michael Welsh Duggan, +John Williams, +Milan Zamazal, +Rune Zedeler + +@c no comma for last entry + +@end macro + + + +@macro fontPrevious + +@c use commas not colons + +Tom Cato Amundsen, +@c @email{tca@@gnu.org}, +Chris Jackson, +@c @email{chris@@fluffhouse.org.uk}, +Arno Waschk, +@c @email{arno@@arnowaschk.de}, +Rune Zedeler + +@c no comma for last entry + +@end macro + + + +@macro docPrevious + +@c use commas not colons + +Erlend Aasland, +Trevor Bača, +Alard de Boer, +Jay Hamilton, +Andrew Hawryluk, +Joseph Harfouch, +Cameron Horsburgh, +Geoff Horton, +Ian Hulin, +Heikki Junes, +@c @email{heikki.junes@@hut.fi}, +Kurtis Kroon, +Dave Luttinen, +Kieren MacMillan, +Christian Mondrup, +@c @email{scancm@@biobase.dk}, +Eyolf Østrem, +Ralph Palmer, +François Pinard, +@c @email{pinard@@iro.umontreal.ca}, +@c @uref{http://pinard.progiciels-bpi.ca/}, +Eduardo Vieira, +Michael Rasmussen, +Till Rettig, +Carl D. Sorensen, +Anh Hai Trinh, +Rune Zedeler + +@c no comma for last entry + +@end macro + + + +@macro supportPrevious + +@c use commas not colons + +Anthony Fok, +@c @email{foka@@debian.org}, +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 + +@end macro + + + +@macro translationsPrevious + +@c use commas not colons + +Frédéric Chiasson, +Abel Cheung, +Alard de Boer, +Simon Dahlbacka, +Orm Finnendahl, +David González, +Nicolas Grandclaude, +@c @email{ngclaude@@123mail.org}, +Damien Heurtebise, +Matthieu Jacquot, +Bjoern Jacke, +@c @email{bjoern.jacke@@gmx.de}, +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}, +Adrian Mariano, +Christian Mondrup, +Tineke de Munnik, +@c @email{tdm@@dds.nl}, +Steven Michael Murphy, +François Pinard, +Gauvain Pocentek, +@c @email{gauvainpocentek@@yahoo.fr}, +Till Rettig, +Ludovic Sardain, +@c @email{ludovicsardain@@gmail.com}, +Yoshiki Sawada, +Thomas Scharkowski, +Clytie Siddall, +August S. Sigov, +@c @email{august@@infran.ru}, +Roland Stigge, +Risto Vääräniemi, +Andrea Valle, +Olcay Yıldırım + +@c no comma for last entry + +@end macro + + diff --git a/Documentation/hu/web/community.itexi b/Documentation/hu/web/community.itexi new file mode 100644 index 0000000000..f3c1cbbb17 --- /dev/null +++ b/Documentation/hu/web/community.itexi @@ -0,0 +1,986 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 + +@include included/authors.itexi + +@c Translators: Harmath Dénes + +@node Közösség +@unnumbered Közösség +@translationof Community + + +@divClass{column-center-top} +@subheading Kommunikáció a közösséggel + +@itemize + +@item +@ref{Kapcsolat}: Kérj segítséget, tegyél fel kérdéseket, és segíts másoknak! + +@item +@ref{Minimális példák}: Amikor egy zenei jelenségről van szó, ha csak lehet, +minimális példákat @emph{kell} bemutatni. + +@item +@ref{Hibajelentés}: Mi a teendő, ha valami nem működik? + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading A LilyPond jobbá tétele + +@itemize + +@item +@ref{Közreműködés}: A Te segítségedre van szükségünk! + +@item +@ref{Fejlesztés}: Anyagok fejlesztők és tesztelők számára. + +@item +@ref{Készítők}: Azoknak az embereknek a listája, akik segítettek abban, hogy a +LilyPond mára azzá legyen, ami. + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading Egyéb + +@itemize + +@item +@ref{Publikációk}: Írások, amiket mi írtunk, vagy rólunk írtak. + +@item +@ref{Hírarchívum}: A régebbi hírek archívuma. + +@end itemize +@divEnd + + +@divClass{hide} +@menu +* Kapcsolat:: +* Minimális példák:: +* Hibajelentés:: +* Közreműködés:: +* Fejlesztés:: +* Készítők:: +* Publikációk:: +* Hírarchívum:: +@end menu +@divEnd + + +@node Kapcsolat +@unnumberedsec Kapcsolat +@translationof Contact + +@divClass{column-left-bottom} +@subheading A felhasználók fórumai + +@subsubheading Felhasználói levelezőlista: @code{lilypond-user@@gnu.org} + +Ezen a levelezőlistán a felhasználók segítséget kérhetnek egymástól és +nyújthatnak egymásnak. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user, +feliratkozás és információ} + +@uref{http://lists.gnu.org/archive/html/lilypond-user/, +1. archívum} +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +2. archívum} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +3. archívum} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +webes hozzászólás} +@end quotation + +@warning{Amikor kérdéseket teszel föl, @ref{Minimális példák}at használj!} + + +@subsubheading IRC + +Bizonyos szintű támogatást nyújtunk az IRC csatornánkon keresztül: + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +Ennek a csatornának nincs publikus archívuma, így ha olyan kérdésed van, +amely hasznos lehet mások számára is, inkább a levelezőlistára írd. + +@html +
IRC név: + + + + +
+ + +@end html + +@subsubheading Más nyelveken + +@quotation +@uref{http://groups.google.com/group/lilypond-user-hu, +Magyar LilyPond-felhasználók közössége} + +@uref{http://es.groups.yahoo.com/group/lilypond-es, +Spanyol LilyPond-felhasználók közössége} + +@uref{http://www.lilypondforum.de/, +Német LilyPond-felhasználók közössége} + +@uref{http://groups.google.com/group/lilypond-brasil, +Portugál LilyPond-felhasználók közössége} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +Francia LilyPond-felhasználók közössége} + +@uref{http://www.lilypondforum.nl/, +Holland LilyPond-felhasználók közössége} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Kövesd a fejlesztést! + +@subsubheading LilyPond hírlevél + +Közösségi hírlevelünket olvasva nyomon követheted a program fejlődését: +@uref{http://news.lilynet.net/, LilyPond hírlevél}. + +@subsubheading Értesítés a kiadott verziókról: @code{info-lilypond@@gnu.org} + +Ez a levelezőlista egy alacsony forgalmú, csak olvasható lista, melyen +értesítünk az új verziókról. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +feliratkozás és információ} + +@uref{http://lists.gnu.org/archive/html/info-lilypond/, +1. archívum} +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +2. archívum} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +3. archívum} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading A fejlesztők fórumai + +@subsubheading Fejlesztői levelezőlista: @code{lilypond-devel@@gnu.org} + +A fejlesztők itt tárgyalják meg a vitás kérdéseket, és ide kell küldeni a +patcheket is. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel, +feliratkozás és információ} + +@uref{http://lists.gnu.org/archive/html/lilypond-devel/, +1. archívum} +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +2. archívum} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +3. archívum} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +webes hozzászólás} +@end quotation + + +@subsubheading Hibabejelentő levelezőlista: @code{bug-lilypond@@gnu.org} + +A hibákat ezen a listán kell bejelenteni. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond, +feliratkozás és információ} + +@uref{http://lists.gnu.org/archive/html/bug-lilypond/, +1. archívum} +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +2. archívum} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +3. archívum} + +@c don't include gmane posting here. -gp +@end quotation + +@warning{Mielőtt bejelentenél egy hibát, olvasd el a tudnivalókat a +@ref{Hibajelentés}ről.} + +@divEnd + + + +@node Minimális példák +@unnumberedsec Minimális példák +@translationof Tiny examples + +@divClass{column-center-top} +@subheading Mik azok a @qq{minimális példák}? + +A minimális példa egy olyan LilyPond példaforrás, amelyből semmit nem lehet +elvenni. +@divEnd + +@divClass{column-left-bottom} +@subheading Miért kellenek a minimális példák? + +@divClass{keep-bullets} +@itemize + +@item +Minél egyszerűbb a példa, annál gyorsabban tudják mások megérteni és +segíteni neked. + +@item +A minimális példán látszik, hogy már te magad is tettel lépéseket a probléma +megoldása felé. Ezt látván mások jobban motiváltak, hogy segítsenek. + +@item +Egy minimális példa létrehozása kényszerít arra, hogy megértsd, mi is történik +valójában. Számos téves hibajelentés elkerülhető, ha az ember megpróbál +létrehozni egy minimális példát; ha egy hibát nem sikerül reprodukálni egy +minimális példával, akkor a hiba valószínűleg nem a LilyPond helytelen +működéséből, hanem a megértés hiányából fakad. + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading Milyen egy jó minimális példa? + +@divClass{keep-bullets} +@itemize + +@item +Tartalmazza a verziószámot (\version). + +@item +Rövid. A legtöbb hiba egyetlenegy ütemmel reprodukálható. Az oldalak +elrendezésével kapcsolatos hibák esetleg sok ütemet igényelhetnek, de +ezek is elérhetőek rövid forráskóddal. + +@item +Ha nem vagy biztos abban, hogy egy rész szükséges-e, kommentezd ki +(a @w{@code{%} vagy @code{%@{ @dots{} %@}}} jelek használatával). +Ha a lényeg ezután sem változik, nyugodtan kitörölheted a kikommentezett +részt. + +@item +Kerüld a bonyolult konstrukciók (akkordok, előjegyzés, ütemmutató stb.) +használatát, hacsaknem ezekben van a hiba. + +@item +Ne használj finomhangolásokat (@code{\override}, @code{\set}), hacsaknem +ezek a hibásak. + +@end itemize +@divEnd + +@divEnd + + + + +@node Hibajelentés +@unnumberedsec Hibajelentés +@translationof Bug reports + +@divClass{column-center-top} +@subheading 1. lépés: Ismert hibák + +Ha egy adott bemenetre a LilyPond elszáll, vagy hibás kimenetet ad, +akkor hibával állunk szemben. Az ismert hibák listája a következő oldalon +található: + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{Ide @strong{TILOS} új hibákat bejelenteni, a hibajelentés a +@ref{Kapcsolat, levelezőlistán} történik. Miután a hiba bekerült a +nyilvántartásba, nyugodtan kiegészítheted a jelentést a szükséges +információkkal.} + +@divEnd + + +@divClass{column-left-bottom} +@subheading 2. lépés: Hibajelentés létrehozása + +Ha tényleg felfedeztél egy még nem ismert hibát, nagy segítséget jelent, +ha bejelented. + +@warning{Csakis @ref{Minimális példák}at fogadunk el hibabejelentésnél. +Nagyon szűkösek az erőforrásaink, amiket a hibajelentések feldolgozására +fordíthatunk, így minden nem minimális példát visszautasítunk. +Szinte minden hiba négy vagy kevesebb hanggal bemutatható!} + +Íme, egy jó példa hibajelentésre: + +@example +%% a set-octavation parancs +%% nincs hatással a kimenetre! + +\version "2.10.0" +\paper@{ ragged-right=##t @} +\relative c''' @{ + c1 + #(set-octavation 1) + c1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading 3. lépés: Hibajelentés elküldése + +Miután megbizonyosodtál arról, hogy tényleg egy új hibáról van szó, és +megírtad a hibajelentést, küldd el nekünk! + +A hibajelentés elejére mindenképpen írd oda: + +@example +> I'm not top posting. +@end example + +@noindent +(a @code{>} karakter is fontos). + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +Itt küldheted be webes felületen a hibát}, vagy írhatsz e-mailt a +@uref{mailto:bug-lilypond@@gnu.prg, bug-lilypond@@gnu.org} levelezőlistára. + +Amikor a jelentés megérkezett a levelezőlistára, a hibafelelős megvizsgálja azt. +Esetleg kérhet tőled további információt. Ha elfogadta, nyilvántartásba veszi a +hibát, és elküldi a linkjét. + +A hibajelentést megjelölheted kedvencként, hogy e-mailben értesülj bármilyen +tevékenységről a hibával kapcsolatban. Ehhez csak egy Google fiók szükséges. +@divEnd + + +@node Közreműködés +@unnumberedsec Közreműködés +@translationof Help us + +@divClass{column-center-top} +@subheading Rád van szükségünk! + +A LilyPond fejlesztőcsapata igen kicsi, szeretnénk, ha minél több ember +segítene. Kérlek, ha tetszik a LilyPond, segíts a többi felhasználónak azzal, +hogy közreműködsz a fejlesztésben! + +A legkisebb feladat elvégzésének is nagy hatása lehet: lehetővé teszi, hogy a +tapasztalt fejlesztők ezek helyett bonyolultabb feladatokon dolgozhassanak. + +@divEnd + + +@divClass{column-left-top} +@subheading Egyszerű feladatok + +@divClass{keep-bullets} + +@itemize +@item +Felhasználók támogatása a levelezőlistán: ha valamelyik felhasználónak kérdése +van a levelezőlistán, válaszolj neki. + +@item +Hibajelentés: készíts jó @ref{Hibajelentés}eket, vagy segíts a +hibafelelősöknek @rcontribnamed{Issues, a hibajelentések kezelésében}. + +@item +Dokumentáció: tegyél bármilyen javaslatot a dokumentációval kapcsolatban a +@rcontribnamed{Documentation suggestions} c. fejezetben leírt módon. + +@item +LilyPond Kódrészletek Tárháza: készíts hasznos kódrészleteket! +Ld. a @rcontrib{Adding and editing snippets} c. fejezetet. + +@item +Visszajelzés: a fejlesztők gyakran kérnek visszajelzést az új dokumentációról, +a nyelvtan jövőbeli változásairól, vagy megkérnek, hogy tesztelj új +képességeket. Ezekben is segíthetsz. + +@end itemize + +@subheading Bonyolultabb feladatok + +@warning{Ezek a feladatokhoz szükséges, hogy meglegyen a program és a +dokumentáció forrása, de nem kell hozzájuk teljes fejlesztői környezet. +Ld. a @rcontrib{Starting with Git} c. fejezetet.} + +@itemize +@item +Dokumentáció: ld. @rcontrib{Documentation work} és +@rcontrib{Building documentation without compiling} c. fejezeteket. + +@item +Weboldal: a weboldal a dokumentáció része, ld. a rá vonatkozó szabályokat, +ill. a @rcontrib{Website work} c. fejezetet. + +@item +Honosítás: ld. @rcontrib{Translating the documentation} és +@rcontrib{Translating the website} c. fejezeteket. + +@end itemize + + +@subheading Bonyolult feladatok + +@warning{Ezekhez a feladatokhoz szükséges, hogy meglegyen a forráskód, +és le tudd fordítani a LilyPondot. Ld. a @rcontrib{Starting with Git} és +@rcontrib{Compiling LilyPond} c. fejezeteket.} + +Windowst használó felhasználóknak javasoljuk a @emph{lilydev} virtuális gép +használatát. Ld. a @rcontrib{Lilydev} +c. fejezetet. + +@itemize +@item +Hibák kijavítása, új képességek megvalósítása: +csatlakozz a Békákhoz, és olvasd el a @rcontrib{Programming work} c. +fejezetet! + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading Projektek + +@subsubheading Békák + +Weboldal és levelezőlista: @uref{http://frogs.lilynet.net} + +A Békák mindennapi LilyPond-felhasználók, akik úgy döntöttek, hogy részt +vesznek kedvenc programjuk fejlesztésében. Hibajavítás, fejlesztés, a +forráskód dokumentációja: nagyon sok a tennivaló, és főleg: itt a nagy +lehetőség, hogy több mindent tudj meg a LilyPondról, a szabad szoftverekről, +a programozásról... az alkotás öröméért. Ha kedved támadt, ne habozz: +@emph{csatlakozz a Békákhoz!} + +@divEnd + + +@node Fejlesztés +@unnumberedsec Fejlesztés +@translationof Development + +@divClass{heading-center} +@heading A LilyPond @versionDevel fejlesztőknek szóló anyagai + +@warning{Ezek @emph{fejlesztői}, kísérleti verziók. Ha nem vagy teljesen +biztos abban, hogyan kell telepíteni vagy használni a LilyPondot, a stabil +verzió @ref{Letöltés, letöltését} és @ref{Dokumentáció, dokumentációját} ajánljuk.} + +@divEnd + +@divClass{column-center-top} +@subheading Verziószámok + +A LilyPond fejlesztése két ágon történik: stabil és fejlesztői ágon. +A stabil verziók alverziószáma páros (pl. 2.8, 2.10, 2.12), míg a +fejlesztői verzióké páratlan (pl. 2.7, 2.9, 2.11). + +@divEnd + + +@divClass{column-left-bottom} +@subheading Letöltés + +A git használatáról és a LilyPond fordításáról a közreműködőknek szóló +útmutatóban olvashatsz. + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, Git repository} +@end quotation + +Dokumentációt író és tesztelést végző felhasználók számára a legfrissebb +fejlesztői verziót ajánljuk: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource + +@end quotation + + +@subheading Dokumentáció + +@divClass{keep-bullets} +@itemize + +@item +Tankönyv: + +@manualDevelLearningSplit-hu +@* @manualDevelLearningBig-hu +@* @manualDevelLearningPdf-hu + +@item +Fogalomtár: + +@manualDevelGlossarySplit-hu + +@manualDevelGlossaryBig-hu + +@manualDevelGlossaryPdf-hu + +@item +Esszé: + +@manualDevelEssaySplit-hu + +@manualDevelEssayBig-hu + +@manualDevelEssayPdf-hu + + +@c separate introduction, regular, infrequent manuals +@smallspace + +@item +Kottaírás: + +@manualDevelNotationSplit-hu + +@manualDevelNotationBig-hu + +@manualDevelNotationPdf-hu + +@item +Használat: + +@manualDevelUsageSplit-hu + +@manualDevelUsageBig-hu + +@manualDevelUsagePdf-hu + +@item +Kódrészletek: + +@manualDevelSnippetsSplit-hu + +@manualDevelSnippetsBig-hu + +@manualDevelSnippetsPdf-hu + + +@c separate introduction, regular, infrequent manuals +@smallspace + +@item +Web: + +@manualDevelWebSplit-hu + +@manualDevelWebBig-hu + +@manualDevelWebPdf-hu + +@item +Változások: + +@manualDevelChangesSplit-hu + +@manualDevelChangesBig-hu + +@manualDevelChangesPdf-hu + +@item +Bővítés: + +@manualDevelExtendingSplit-hu + +@manualDevelExtendingBig-hu + +@manualDevelExtendingPdf-hu + +@item +Belső működés: + +@manualDevelInternalsSplit-hu + +@manualDevelInternalsBig-hu + +@manualDevelInternalsPdf-hu + +@end itemize +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Útmutató közreműködőknek + +A LilyPond fejlesztése igen bonyolult feladat. A LilyPond egy nagy, +(javarészt) stabil projekt. Az újdonsült közreműködők számára a rendszer +stabilitása érdekében írtunk egy útmutatót. + +@warning{Ezt a kézikönyvet nem folyamatosan kell olvasni; az új +közreműködőknek csak azokat a részeket kell elolvasni, amelyek számukra +fontosak. A különböző feladatokról a @ref{Közreműködés} c. szakaszban +olvashatsz.} + +@docLinksBare{Útmutató közreműködőknek, contributor, + @rcontribnamed{Top,Útmutató közreműködőknek}, + @manualDevelContributorSplit-hu, + @manualDevelContributorBig-hu, 500 kB, + @manualDevelContributorPdf-hu, 2.8 MB} +@divEnd + + +@divClass{column-center-top} +@subheading Regressziós tesztek + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@uref{../../input/regression/collated-files.html, Regressziós tesztek}: +A kottaszedés tesztjei. +(@uref{../../input/regression/collated-files.pdf, PDF formátumban}) + +@item +@uref{../../input/regression/musicxml/collated-files.html, MusicXML tesztek}: +A MusicXML konverzió tesztjei. +(@uref{../../input/regression/musicxml/collated-files.pdf, PDF formátumban}) + +@item +@uref{../../input/regression/abc2ly/collated-files.html, abc2ly tesztek}: +Az abc2ly konverzió tesztjei. +(@uref{../../input/regression/abc2ly/collated-files.pdf, PDF formátumban}) + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, lilypond-book tesztek}: +A lilypond-book tesztjei. +(@uref{../../input/regression/lilypond-book/collated-files.pdf, PDF formátumban}) +@end itemize + +@end ifclear + +@ifset web_version +@subsubheading Fejlesztői verzió + +@itemize +@item @regtestDevel-hu (@regtestDevelPdf-hu{}) + +@item @regtestDevelXml-hu (@regtestDevelXmlPdf-hu{}) + +@item @regtestDevelAbc-hu (@regtestDevelAbcPdf-hu{}) + +@item @regtestDevelLilypondBook-hu (@regtestDevelLilypondBookPdf-hu{}) +@end itemize + +@subsubheading Stabil verzió + +@itemize +@item @regtestStable-hu (@regtestStablePdf-hu{}) + +@item @regtestStableXml-hu (@regtestStableXmlPdf-hu{}) + +@item @regtestStableAbc-hu (@regtestStableAbcPdf-hu{}) + +@item @regtestStableLilypondBook-hu (@regtestStableLilypondBookPdf-hu{}) +@end itemize +@end ifset + + +@subsubheading Minden verzió + +@itemize +@item @uref{http://lilypond.org/test, Összehasonlítás} + +@item @uref{http://lilypond.org/download/binaries/test-output/, +Archívum} + +@end itemize + +@divEnd +@divEnd + +@node Készítők +@unnumberedsec Készítők +@translationof Authors + + +@divClass{column-left-top} +@subheading Jelenlegi fejlesztők + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Volt fejlesztők + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading Jelenlegi közreműködők + +@divClass{keep-bullets} +@subsubheading Programozás + +@coreCurrent + +@subsubheading Betűtípus + +@fontCurrent + +@subsubheading Dokumentáció + +@docCurrent + +@subsubheading Támogatás + +@supportCurrent + +@subsubheading Honosítás + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Volt közreműködők + +@divClass{keep-bullets} +@subsubheading Programozás + +@corePrevious + +@subsubheading Betűtípus + +@fontPrevious + +@subsubheading Dokumentáció + +@docPrevious + +@subsubheading Támogatás + +@supportPrevious + +@subsubheading Honosítás + +@translationsPrevious + +@divEnd +@divEnd + + + +@node Publikációk +@unnumberedsec Publikációk +@translationof Publications + +@divClass{column-center-top} +@subheading Amit mi írtunk + +@divClass{keep-bullets} +@itemize + +@item +Han-Wen Nienhuys: @emph{LilyPond, automatikus kottaformázás és a +szoftvertermék kiadásának művészete}. A szabad szoftver nemzetközi fóruma 2006 +(FISL7.0) (@uref{http://lilypond.org/web/images/FISL7-slides.pdf, +PDF 1095k}) + +@item +Erik Sandberg: @emph{A bemeneti nyelv és a formázó szétválasztása a +GNU Lilypondban}. Diplomaterv, Uppsalai Egyetem, Információtechnológiai +Tanszék, 2006. március +(@uref{http://lilypond.org/web/images/thesis-erik-sandberg.pdf, +PDF 750k}) + +@item +Han-Wen Nienhuys, Jan Nieuwenhuizen: @emph{LilyPond, egy automatizált +kottaszedő rendszer}. Jegyzőkönyv a XIV. zenei informatikai kollokviumról +(XIV CIM 2003), Firenze, Olaszország, 2003. május +(@uref{http://lilypond.org/web/images/xivcim.pdf, PDF 95k}) + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} + +@subheading Amit mások írtak + +@divClass{keep-bullets} +@itemize + +@item +2009. szeptember + +A német LinuxUser magazin írt egy +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +cikket a LilyPondról}. + + +@item +2008. február + +Andrew Hawryluk személyes oldalán egy +@uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, cikksorozatban} +összehasonlítja általánosságban a Finalét és a LilyPondot, és a két szoftver +kottaszedési képességeit értékeli részletesen. A +@uref{http://www.musicbyandrew.ca/finale-lilypond-2.html, második cikk} egy +tanulságos elemzés Rachmanyinov 6. prelűdjének kottaképéről, melyben egy kézzel +szedett kiadás szolgál összehasonlítási alapul. + +@item +2005. december + +A Linux Journal közzétesz egy cikket +@uref{http://www.linuxjournal.com/article/8364, +Schenker-diagramok készítése GNU LilyPonddal} +címen. Ez egy gyakorlatias cikk igen szép LilyPond grafikákkal. +A szerző, Kris Shaffer megjegyzi: @qq{A GNU Lilypond gyönyörű kottaképe után a +kereskedelmi alternatívák másodosztályúnak tűnnek.} +A cikk elérhető @uref{http://www.linuxjournal.com/article/8583, online}. + +@item +2005. augusztus 20. + +A belga hírlap, a De Standaard szerkesztői annak járnak utána, mi motiválja a +szabad szoftverek fejlesztőit. Erről +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +A tudás nonprofit megosztása} című cikkben írnak. A szemléltető példa a +LilyPond. A cikkben szerepelnek egy Jan Nieuwenhuizennel e-mailben készített +riport részletei is. Ez a LilyPond első megjelenése a nyomtatott szakmai +sajtóban. + +@item +2005. június + +A LilyPond 2.6-os verziójának kiadásáról megjelenik egy francia cikk a +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org} weboldalon. + +@item +2004. október + +A @emph{Computer!Totaal} holland informatikai magazin szerkesztői +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, azt írják a +LilyPondról} a 2004. októberi számban: @qq{A LilyPond egy csodálatos szabad +(nyílt forrású) szoftver! [...] A LilyPonddal szedett kotta kivételesen szép. +[...] Egy sokrétű rendszerrel állunk szemben, ami szinte mindenre képes!} + +@item +2004. július-augusztus + +Dave Phillips egy bevezető cikket ír a Linux Journalba +@emph{Csúcstechnológia a kottaírásban: LilyPond} címmel. +@uref{http://www.linuxjournal.com/article.php?sid=7657, 1. rész}, +@uref{http://www.linuxjournal.com/article.php?sid=7719, 2. rész}. + +@item +2004. március + +Chris Cannam riportot készít Han-Wen Nienhuysszal és Jan Nieuwenhuizennel a +linuxmusician.com (ma már nem létező) oldalon. A riport megjelenik a +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227, slashdot.org}-on +is. + +@item +2004. február + +Gail Selkirk jazzénekes ír arról, hogyan +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Merüljünk bele a LilyPond világába}. + +@qq{...Könnyedén lejegyezhetsz akár slágereket, akár nagyzenekari műveket, az +eredmény pompás!} (A @uref{http://www.computermusic.co.uk/, +Computer Music Special} CMS06 száma) + +@end itemize + +@divEnd +@divEnd + + +@node Hírarchívum +@unnumberedsec Hírarchívum +@translationof Old news + +@include web/news-front.itexi + +@include web/news.itexi + + diff --git a/Documentation/hu/web/download.itexi b/Documentation/hu/web/download.itexi new file mode 100644 index 0000000000..7fd0edaedc --- /dev/null +++ b/Documentation/hu/web/download.itexi @@ -0,0 +1,440 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 + +@include included/generating-output.itexi + +@c Translators: Harmath Dénes + +@node Letöltés +@unnumbered Letöltés +@translationof Download + +@divClass{heading-center} +@heading A LilyPond @versionStable letöltése + +@divEnd + +@warning{A LilyPond egy @strong{szöveges alapú} kottaszedő program, +nem egy grafikus kottaszerkesztő. Mielőtt letöltenéd a LilyPondot, +olvasd el a tudnivalókat a @ref{Szöveges bevitel}ről.} + +@divClass{column-left-top} +@subheading Felhasználóknak + +@itemize + +@item +@c TODO: duplicate to avoid underlined refs in HTML? icky. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux és FreeBSD)} + +@item +@ref{Mac OS X, @sourceimage{logo-macosx,,,}} +@ref{Mac OS X, Mac OS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Fejlesztőknek + +@itemize + +@item +@ref{Forrás}: +csomagkészítőknek + +@item +@ref{Régi verziók}: +az idejétmúlt változatok archívuma + +@item @ref{Fejlesztés}: +a legfrissebb fejlesztői verzió + +@end itemize +@divEnd + + +@divClass{column-center-bottom} + +@subheading Licenc + +A LilyPond licence a +@ref{GPL, GNU General Public License}. +@divEnd + + +@divClass{color1} + +@subheading Támogatók + +Köszönet a @uref{http://www.vt.edu/, Virgina Tech} és a +@uref{http://www.linuxaudio.org/, linuxaudio.org} részére a sávszélesség költségeinek fedezéséért. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Jogi tudnivalók + +@divClass{legal} +Minden logó és termékábrázolás szerzői joggal védett. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* Mac OS X:: +* Windows:: +* Forrás:: +* Régi verziók:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{column-center-top} +@subheading Generikus vagy disztribúció-specifikus csomagokat használjak? + +Sok disztribúció csomagkezelőjében megtalálható a LilyPond. Ezeket a verziókat +egyszerűbb telepíteni és eltávolítani, mint a generikus csomagokat, de +régebbiek lehetnek. Ha egy generikus csomagot akarsz használni, előbb +távolítsd el a csomag hivatalos verzióját a csomagkezelővel. +Ehhez a disztribúció csomagkezelőjének dokumentációja nyújt segítséget. + +@divEnd + + +@divClass{column-left-top} +@subheading Generikus csomagok + +@subsubheading Letöltés + +@itemize + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxNormal +(ha bizonytalan vagy afelől, hogy melyiket töltsd le, ezt válaszd) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Telepítés + +Add ki a következő parancsokat: + +@example +cd PATH-TO-DOWNLOAD-DIRECTORY +sh lilypond-@versionStable{}-OS-TYPE.sh +@end example + +@subsubheading Eltávolítás + +Add ki a következő parancsot: + +@example +uninstall-lilypond +@end example + +@divEnd + + +@divClass{column-right-top} +@subheading Disztribúció-specifikus csomagok + +Ezeket a csomagokat a disztribúciód csomagkezelőjével tudod telepíteni. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{https://admin.fedoraproject.org/pkgdb/packages/name/lilypond, +Fedora: LilyPond 2.12.0} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{https://launchpad.net/ubuntu/+source/lilypond, +Ubuntu: LilyPond 2.12.1} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.1} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.10.33} + +@item +@sourceimage{logo-suse,,,} +@uref{http://opensuse.org/?fixme=urg-no-lilypond-package-page, +openSUSE: LilyPond 2.10.33} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Jogi tudnivalók + +@divClass{legal} +Minden logó és termékábrázolás szerzői joggal védett. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node Mac OS X +@unnumberedsec Mac OS X +@translationof MacOS X + +@divClass{column-left-top} +@subheading Csomagok + +@subsubheading Letöltés + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Intel processzorokra (ha bizonytalan vagy afelől, hogy melyiket töltsd le, ezt válaszd) + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +G3 és G4 processzorokra (régi Apple gépekben találhatóak) + +@end itemize + +@subsubheading Telepítés + +Csak kattints duplán a letöltött fájlra a kitömörítéséhez, majd a +kicsomagolt LilyPond.app alkalmazást húzd be az Applications könyvtárba. + +@subsubheading Eltávolítás + +Töröld a LilyPond.app alkalmazást. + +@divEnd + + +@divClass{column-right-top} +@subheading Parancssori futtatás + +@warning{Ha a grafikus felület megfelel, ezeket az utasításokat nyugodtan +figyelmen kívül hagyhatod.} + +Írd be a könyvtáradban található @file{.profile} fájlba a következő sort: + +@example +export PATH=/Applications/LilyPond.app/Contents/Resources/bin:$PATH +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Jogi tudnivalók + +@divClass{legal} +Minden logó és termékábrázolás szerzői joggal védett. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows +@translationof Windows + +@divClass{column-left-top} +@subheading Csomagok + +@subsubheading Letöltés + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Támogatott verziók: Windows ME, NT, 2000, XP, Vista és Windows 7 + +@end itemize + +@subsubheading Telepítés + +@enumerate + +@item +Kattintsd duplán a letöltött fájlra a telepítő elindításához. +Amennyiben figyelmeztetést kapsz a fájl futtatásával kapcsolatban, +válaszd a futtatást. + +@item +Ezután olvasd el figyelmesen a licencszerződést, és ha elfogadod, kattints a +Tovább gombra. + +@item +A célkönyvtárat ajánlott az alapértelmezetten hagyni. Amennyiben mégis +máshová akarod telepíteni a LilyPondot, válassz egy könyvtárat, és kattints a +Tovább gombra. + +@item +A következő oldalon hagyd mindhárom opciót bekapcsolva, mert mindhárom +komponensre szükség lesz. Kattints a Tovább gombra. + +@item +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 Befejezés gombra. + +@item +Sikeresen telepítetted a LilyPondot! + +@end enumerate + +@subsubheading Eltávolítás + +Az eltávolításnak két módja van: + +@enumerate + +@item +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 +LilyPondot, és kattints az Eltávolítás gombra. + +@end enumerate + +@divEnd + + + +@divClass{column-center-bottom} +@subheading Jogi tudnivalók + +@divClass{legal} +Minden logó és termékábrázolás szerzői joggal védett. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Forrás +@unnumberedsec Forrás +@translationof Source + +@warning{Hacsak nem vagy fejlesztő, a LilyPond fordítása +@strong{nem ajánlott}; szinte minden végfelhasználó számára jobb, ha az előre +lefordított futtatható verziót használja.} + +@divClass{column-left-bottom} +@subheading Tarball + +@downloadStableSource-hu + +A LilyPond összes verziójának forrása +@uref{http://download.linuxaudio.org/lilypond/, ezen az oldalon} +található. + +@divEnd + +@divClass{column-right-bottom} +@subheading Fordítási útmutató + +A tudnivalók a @rcontrib{Compiling LilyPond} c. fejezetben vannak leírva. + +@divEnd + + +@node Régi verziók +@unnumberedsec Régi verziók +@translationof Old downloads + +@divClass{column-center-top} +@subheading A régi verziók archívuma + +A LilyPond összes verziója +@uref{http://download.linuxaudio.org/lilypond/binaries/, ezen az oldalon} +található. + +@divEnd + + +@node GPL +@unnumberedsec GPL +@translationof GPL + +@divClass{column-center-top} +@subheading Szoftverlicenc + +A GNU LilyPond licence a GNU General Public License. +A licenc választásának főbb előnyeit a @ref{Szabadság} c. szakasz ismerteti. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd diff --git a/Documentation/hu/web/introduction.itexi b/Documentation/hu/web/introduction.itexi new file mode 100644 index 0000000000..fdd3c438aa --- /dev/null +++ b/Documentation/hu/web/introduction.itexi @@ -0,0 +1,975 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 Translators: Harmath Dénes + +@node Bevezetés +@unnumbered Bevezetés +@translationof Introduction + +@divClass{column-center-top} +@subheading Célkitűzés + +@imageFloat{flat-design,png,right} + +Az ihlet akkor jött, amikor két zenész barát megelégelte a számítógéppel +szedett kották csúnya kinézetét. Minden zenésznek jobb, ha a kotta, amiből +játszik, szép; hát akkor mi, programozók, nem tudnánk erre megoldást találni? +– gondolták. + +A megoldás a LilyPond: az általa szedett kotta a legmagasabb tipográfiai +igényeknek felel meg, kézi beavatkozás nélkül. Ne azzal foglalkozz, hogy +helyükre igazítsd a kotta elemeit! Ejtsd ámulatba zenész társaidat +professzionális kinézetű kottákkal! +@divEnd + +@divClass{column-left-top} +@subheading Miért használd a LilyPondot? + +@itemize + +@item +@ref{Képességek}: Mire képes a LilyPond? + +@item +@ref{Példák}: Kottákat szeretnék látni! + +@item +@ref{Szabadság}: A LilyPond szabad szoftver. + +@item +@ref{Háttér}: Esztétikai elveink. + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading Ki használja? + +@itemize + +@item +@ref{Felhasználások}: A LilyPonddal szedett kották előfordulásai a valós életben. + +@item +@ref{Ajánlások}: Mit mondanak róla az emberek? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading Miért ne használnád a LilyPondot? + +@itemize + +@item +@ref{Szöveges bevitel}: A zenét @emph{szöveg}ként kell beírni?! + +@item +@ref{Könnyebb bevitel}: Egyszerűbb szerkesztési módok. + +@end itemize +@divEnd + +@divClass{hide} +@menu +* Képességek:: Mire képes a LilyPond? +* Példák:: Kottákat szeretnék látni! +* Szabadság:: Szabadság és a GPL. +* Háttér:: Esztétikai elvek. +* Felhasználások:: A LilyPonddal szedett kották előfordulásai. +* Ajánlások:: Mit mondanak mások? +* Szöveges bevitel:: Zenét szövegként beírni?! +* Könnyebb bevitel:: Egyszerűbb szerkesztés. +@end menu +@divEnd + +@node Képességek +@unnumberedsec Képességek +@translationof Features + +@subheading Miért érdemes a LilyPondra váltani? + +@subsubheading Kitűnő hagyományos szedés + +@imageFloat{flat-design,png,right} + +Minden elem, szimbólum és algoritmus megtervezéséhez a régi, aprólékosan +kézzel szedett kottákból merítettünk ihletet. A LilyPond kimenete ugyanolyan +jól olvasható, mint bármelyik klasszikus kotta. (Erről az @ref{Esszé}ben +olvashatsz bővebben.) + +@subsubheading Nincs szükség finomhangolásra + +Ne töltsd azzal az idődet, hogy a kimenetet kézzel tökéletesíted; a LilyPond +kezdettől fogva ügyel a tökéletes formázásra. Önmagától meghatározza az +optimális elhelyezést, a sor- és oldaltöréseket az egyenletes kottakép +érdekében. Nincsenek egymást átfedő elemek, az ívek és gerendák pedig szép +arányosak – mindez automatikusan! + +@subsubheading Szöveges formátum + +A LilyPond bemenete egyszerű szöveges fájl, melyet saját kedvenc +szövegszerkesztőddel írhatsz, gyorsan és kényelmesen. Nincs több babrálás az +egérrel! A bemenet minden információt tartalmaz, így nincs szükség összetett +menüstruktúrák megjegyzésére. Ha egy témára később szükséged van, csak +elmented, és később hivatkozhatsz rá. + +@subsubheading Zene és szöveg együtt + +@imageFloat{lilypond-book,png,right} + +Egyszerűen helyezhetsz el kottapéldákat dokumentumaidban; nincs szükség képek +konvertálására és beillesztésére. Akár LaTeX, akár HTML, sőt, az ooolilypond +révén még OpenOffice.org dokumentumokba is simán integrálható a LilyPond. + +@subsubheading Szólamkották a lehető legegyszerűbben + +A partitúra és a szólamkották egy forrásból származnak, így minden változás +automatikusan tükröződik a partitúrában és a szólamanyagokban is. A LilyPond +hasonló technikával a belépés előtti segédhangokat is képes beszúrni. + +@subsubheading Szabad szoftver + +A LilyPond ingyenesen letölthető! Bizony, teljesen ingyen. Szerezd be most a +letöltések közül! + +Ráadásul a LilyPond szabad szoftver. Forráskódja szabadon elérhető, és bárki +továbbfejlesztheti. Tehát, ha zavar egy hiba, vagy nagyon vágysz egy +megvalósítatlan képességre, te magad jobbá teheted a programot, vagy +finanszírozhatod, hogy más tegye meg ezt. + +@subsubheading Bővíthetőség + +Minden beállítás módosítható a saját tipográfiai ízlésed szerint. Ha ez még +mindig nem lenne elég, beépített scriptelési lehetőség áll rendelkezésedre +Scheme nyelven, amivel szinte mindent megtehetsz. A beállítások, változók és +függvények egytől egyig pontosan le vannak dokumentálva a mindenre kiterjedő +programreferenciában. + +@subsubheading Széles körű támogatás + +A LilyPond minden népszerű operációs rendszeren fut: Linuxon, Mac OS X-en és +Windowson. A LilyPondhoz egy 600 oldalas felhasználói kézikönyv és több, mint +400 példafájl tartozik. Segítőkész felhasználói közösség kész megválaszolni +kérdéseidet a LilyPond-felhasználók levelezőlistáján, a fejlesztőcsapat pedig +gondoskodik arról, hogy a problémák gyorsan megoldódjanak. + +@divClass{column-center-bottom} +@subheading Hogyan tovább? + +Még mindig nem vagy meggyőzve? Nézd meg a gyönyörű @ref{Példák, példákat}! Ha +úgy döntöttél, hogy használni szeretnéd a LilyPondot, először olvasd el a +tudnivalókat a @ref{Szöveges bevitel, szöveges bevitelről}. +@divEnd + + +@node Példák +@unnumberedsec Példák +@translationof Examples + +A LilyPond egy hatékony és rugalmas eszköz, mely mindenféle kottaszedési +feladatra alkalmas. Gyönyörködj az alábbi példákban, és meríts ihletet belőlük! + +@ignore +Here is a passage from Franz Liszt's solo piano transcription +of the Overture to Wagner's @emph{Tannhäuser}. The spacing +in this example was all performed by Lilypond's formatting +algorithms, without tweaks of any kind. It +handles cross-staff beaming gracefully and puts the system brace +perfectly around all three staves. + +@exampleImage{liszt-wagner} +@end ignore + +@newsItem +@subsubheading Klasszikus zene + +J. S. Bach eme orgonaműve egyszerű szedési feladatot jelent. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Komplex lejegyzés + +Enrique Granados @emph{Goyescas} c. művének részlete bemutat pár +bonyolultabb kottaelemet, mint például a kottasorok közötti szárak +vagy a szólamok más kottasorba ugrását jelző vonalak. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Régizene + +A LilyPond a menzurális és a kvadrátnotációt is támogatja, amint azt az alábbi +gregorián antifóna-részlet is mutatja. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Modern zene + +A kortárs szerzők szokatlan lejegyzési igényeit a LilyPond teljes mértékben +kielégíti. Íme egy részlet Trevor Bača @emph{Cáry} c. művéből +basszusfuvolára. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Szólamkották egyszerű és gyors létrehozása + +Egyazon forrásból automatikusan különböző célú próbaanyagok hozhatók létre. +Händel @emph{Giulio Cesare} c. operájának partitúráját, zongorakivonatát és +hegedűszólamát láthatjuk @uref{http://nicolas.sceaux.free.fr/, +Nicolas Sceaux} szedésében. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Tabulatúra + +A LilyPond tabulatúra szedésére is képes, és testreszabható bármilyen +hangszerre, amely tabulatúrából olvas. A hangok bevitele ugyanúgy történik, +mint a rendes ötvanalas vonalrendszerben, a LilyPond automatikusan +tabulatúraként jegyzi le őket. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Schenker-diagramok + +Az alapbeállítású kimenet erőteljesen módosítható. Példánkban egy +figyelemreméltó Schenker-féle analízis eredményét láthatjuk. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Vokális zene + +A LilyPond kiválóan alkalmas mindenféle vokális zene szedésére, az egyházi +énekektől az operákig. Itt egy középkori motetta látható némileg szokatlan +követelményekkel: a tenor szólam más metrumban van, mint a többi, de +lüktetésének alapegysége ugyanakkora. A LilyPond ezt teljesen elegánsan +kezeli. Az incipiteket is érdemes megfigyelni a régi stílusú kulcsokkal, +a plicát jelző áthúzott szárat, valamint a ligatúrákat. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Oktatási anyagok + +A LilyPond tökéletesen megfelel oktatási célokra is. +Bemutatunk egy egyszerű ellenpont-kidolgozási feladatot. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Popszámok + +Könnyűzenei számok is egyszerűen lekottázhatóak dallamal, dalszöveggel, +akkordnevekkel és -ábrákkal. Az alábbi példa az alapbeállítású akkordábrákat +mutatja, de ezek is tetszőlegesen testreszabhatóak. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Nagy projektek + +A LilyPond kitűnően használható nagy művek, például operák vagy nagyzenekari +művek szedésére. Ráadásul a szöveges beviteli mód akadálymentességet biztosít +-- a következő példa Hu Haipengtől, egy vak zeneszerzőtől származik. + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading Hogyan tovább? + +Még mindig nem vagy meggyőzve? A LilyPond szabad szoftver, mely +@ref{Szabadság, szabadságot} ad. Ha úgy döntöttél, hogy használni szeretnéd a +LilyPondot, először olvasd el a tudnivalókat a @ref{Szöveges bevitel, szöveges bevitelről}. +@divEnd + + +@node Szabadság +@unnumberedsec Szabadság +@translationof Freedom + +@divClass{column-center-top} +@subheading Szabad szoftver + +A @uref{http://www.gnu.org/, GNU} LilyPondot lelkes, zenét és informatikát +kedvelő emberek írták és tartják karban. A program licence a +@ref{GPL, GNU General Public License}, a dokumentációé pedig a +@ref{FDL, GNU Free Documentation License}, ezáltal mindenki szabadon +javíthatja, módosíthatja és bővítheti azt. Nem szabad, hogy több száz dollárba +kerülő szoftverre legyen szükség gyönyörű kották írásához! +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading Milyen előnyökkel jár ez a felhasználó számára? + +@itemize + +@item +Ingyenesség: csak töltsd le és próbáld ki! Mi vesztenivalód van? + +@item +Megosztás: ha tetszik, nyugodtan adhatsz belőle egy példányt +barátaidnak, tanáraidnak, tanítványaidnak és kollégáidnak! + +@item +Elérhető forráskód: ha kíváncsi vagy, hogyan működik a LilyPond, +bármikor megvizsgálhatod. + +@item +Bővíthetőség: bármikor megvalósíthatsz új funkcionalitást, kijavíthatsz +hibákat, vagy megváltoztathatod a működést. Ha nem tudsz programozni, +finanszírozhatod, hogy más tegye meg ezt. + +Ez a lehetőség lehet, hogy a mindennapi zenész számára nem vonzó, +de a szoftver bővítésének lehetősége nagyon fontos lehet komoly igényekkel +rendelkező zeneszerzők, cégek és akadémiák számára. + +@item +Garancia a jövőre nézve: ha egy kottaszerkesztő szoftvert fejlesztő cég csődbe +megy, mi lesz a kottákkal, amiket csak az ő termékük tud megnyitni? +Ez a veszély nem áll fenn a LilyPond esetén; még ha az egész fejlesztőcsapat +abba is hagyná a fejlesztést (ami persze elég valószínűtlen), a program +továbbra is legálisan másolható, terjeszthető és módosítható marad, így +bárki folytathatja a fejlesztését és a támogatását. + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading Miért ajánlják fel ingyen a fejlesztők a munkájukat? + +A legtöbben hobbiból, önkéntes módon fejlesztjük a LilyPondot. +Így valójában az a kérdés: miért vállalkozik valaki ilyen önkéntes +munkára? + +@itemize + +@item +Élvezet: egy cél eléréséért végzett munka motiváló erővel bír, főleg, ha az +ember csapatban dolgozik! + +@item +Közös célok: mindannyian szeretnénk gyönyörű kottából játszani, de kevés +embernek van szakértelme (és senkinek sincs ideje!), hogy létrehozzon egy +programot, amely minden szituációt kezelni tud. De együttes erővel -- +egyvalaki az automatikus gerendázást fejleszti, másvalaki az ívek alakját +javítja, megint másvalaki dokumentációt ír, hogy elmagyarázza, hogyan kell +a funkciókat használni -- el tudjuk érni a célunkat az egyébként egyénileg +belefektetendő erőfeszítés töredékével. + +@item +@qq{Ajándék-kultúra}: a szabad szoftver- (vagy @qq{nyílt forrás-}) +mozgalom már sok nagyszerű szoftver projekttel állt elő, pl. a +@uref{http://kernel.org/, GNU/Linux}, a +@uref{http://www.getfirefox.com/, Mozilla Firefox} vagy a +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Ezeket a projekteket +használván, bizonyos fejlesztők szeretnének @qq{visszaadni} valamit a +közösségnek. + +@item +Szakmai tapasztalat: a nyílt forrású projektekben való közreműködés egy remek +módja annak, hogy az ember gyakorolja a programozást, dokumentálást vagy +tervezést. Ez a tapasztalat sok fejlesztőt segített már álláshoz vagy +ösztöndíjhoz. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Hogyan tovább? + +Még mindig nem vagy meggyőzve? Olvasd el az esszénket a kottaszedési +filozófiánk @ref{Háttér, hátteréről}. Ha úgy döntöttél, hogy használni +szeretnéd a LilyPondot, először olvasd el a tudnivalókat a +@ref{Szöveges bevitel, szöveges bevitelről}. +@divEnd + + +@node Háttér +@unnumberedsec Háttér +@translationof Background + +@divClass{column-center-top} +@subheading Esszé + +Írtunk egy sok mindenre kiterjedő esszét a számítási esztétikánkról, +arról, hogyan kell számítógéppel szépet létrehozni. + +Ha csak egy gyors bevezetést szeretnél a LilyPondba, az esszé kicsit +terjedelmes lehet, de ha kíváncsi vagy rá, @ref{Esszé, olvasd el} nyugodtan. +@divEnd + +@divClass{column-center-bottom} +@subheading Hogyan tovább? + +Még mindig nem vagy meggyőzve? Tájékozódj a LilyPonddal szedett kották +@ref{Felhasználások, felhasználásairól}! Ha +úgy döntöttél, hogy használni szeretnéd a LilyPondot, először olvasd el a +tudnivalókat a @ref{Szöveges bevitel, szöveges bevitelről}. +@divEnd + + +@node Felhasználások +@unnumberedsec Felhasználások +@translationof Productions + +@divClass{column-left-top} +@subheading Koncertek + +A LilyPonddal szedett kottákat szerte a világon használják előadásokon. Íme +néhány ezek közül: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire Étrangère}, Valentin Villenave operája, Lewis Trondheim +szövegkönyvére. Bemutatója 2009. február 1-én volt, az +@uref{http://www.orchestre-montpellier.com/, Opéra Montpellier}-ben. + +@item +Lully @emph{Armide} c. operája a +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque} +előadásában, 2009. május 15-én és 16-án, a Texas állambeli Houstonban +(@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux} szedésével). + +@item +Zenekari tételek Rameau @emph{Hippolyte et Aricie} c. operájából +a manhattani St. James's Churchben, 2009. május 8-án Frederick Renz +és együttese, az @uref{http://www.earlymusicny.org/, Early Music +New York} előadásában (Nicolas Sceaux szedésével). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Kiadók + +@divClass{keep-bullets} +@itemize + +@item +@uref{http://www.mutopiaproject.org/index.html, Mutopia Project}: +több, mint 1500 klasszikus zenemű szabadon letölthető kottájával +a LilyPonddal szedett kották online tárháza. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing}: +egyházi zeneművek kiadója, közvetlenül letölthető vagy +papíron megrendelhető, rendkívül jó minőségű kottákkal. + +@item +@uref{http://theshadylanepublishing.com/, The Shady Lane +Publishing}: +egy kis kottakiadó, melynek célja, hogy a kottakiadás gazdasági rendszerének +egy új formáját hozza közelebb a zenészekhez és zenekedvelőkhöz. +@end itemize + +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading Hogyan tovább? + +Még mindig nem vagy meggyőzve? Olvasd el felhasználóink +@ref{Ajánlások, ajánlásait}! Ha úgy döntöttél, hogy használni szeretnéd a +LilyPondot, először olvasd el a tudnivalókat a +@ref{Szöveges bevitel, szöveges bevitelről}. +@divEnd + + +@node Ajánlások +@unnumberedsec Ajánlások +@translationof Testimonials + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, cselló szólamvezető, New York-i Filharmonikusok + +@qq{...Írtam pár virtuóz szólócsellóművet. Ezeket kinyomtattam LilyPonddal, és +el fogom küldeni őket a Schirmer kiadónak publikálásra. Fogadjunk, hogy az +általuk szedett verzió fele olyan szép sem lesz, mint az enyém!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, zeneszerzés professzor, Musikhochschule Freiburg + +@qq{Bár még nem ismerem [a LilyPondot] túlságosan, már most @strong{nagyon} le +vagyok nyűgözve. Nemrég Josquin Desprez egy motettáját nyomtattam ki vele +menzurális notációban, és kétségem sincs afelől, hogy a LilyPond messze +felülmúl minden más kottaszedő programot sebesség, könnyű használat és kinézet +terén!} @divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, zeneszerző (Brüsszel, Belgium) + +@qq{[Az első zenekari próba után] számos dícséretet kaptam a kotta minőségével +kapcsolatban. Ami a legfontosabb, hogy a LilyPond (bár számos módon +hangolhatjuk vele a kotta kinézetét) olyan kottát produkált, amit +gyakorlatilag módosítás, kézi szerkesztés nélkül adtam oda a zenekarnak.} + +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, zeneszerző (Toronto, Canada) + +@qq{Köszönet és hála a fejlesztőcsapatnak a hihetetlen munkáért. +Még nem láttam bármit is, ami akár csak megközelítené a LilyPonddal szedett +kotta kinézetét. Bizalommal mondhatom, hogy ez a nagyszerű alkalmazás messze +felülmúlja az igényeimet. [...] A LilyPond módosítatlan kimenete [...] már +önmagában jobban néz ki, mint az ún. "professzionális" kiadások. [...]} + +@qq{Ezt múld felül, Finale/Sibelius/Igor/akármi!!!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://percival-music.ca, Graham Percival}, zeneszerző-palánta és csellótanár + +@qq{Itt az ideje, hogy a LilyPond a rivaldafényben álljon; már két éve +használom az egyetemen a zeneszerzés órákon, így megspórolva többszáz +dollárt (vagy mennyibe is kerülnek a Finale vagy Sibelius "olcsó", iskolai +verziói). És többen kiáltottak már fel: "Aszta! Hogy vetted rá a Finalét, hogy +ilyen gyönyörű kottaképet kapj?"} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, a @uref{http://www.rosegardenmusic.com/, RoseGarden} projekt fő fejlesztője + +@qq{A LilyPond egyértelműen nehézsúlyú bajnok [a professzionális +kottaszedésben].} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, basszusharsona, Izlandi Szimfonikus Zenekar + +@qq{Nagyszerűnek tartom a LilyPondot. [...] Minél többet tanulok róla, annál +jobban szeretem!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, elektromos gitárművész (igen, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, ő az}) + +@qq{Nagy hatást tett rám a LilyPond. [...]} + +@qq{EZ A VILÁG LEGJOBB PROGRAMJA!!! } + +@qq{EZER köszönet a beléje fektetett sok kemény munkáért!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, @uref{http://www.mutopiaproject.org/, Mutopia} közreműködő + +@qq{Ambivalens érzéseim voltak vele szemben. A pozitív érzést az jelentette, amikor megláttam az első vele készült kottát, mert egyszerűen bámulatos volt! A LilyPondot gyönyörűnek mondani enyhe kifejezés! [...] Ahogy a LilyPond egyre jobb lesz, és ahogy én egyre többet tudok meg a Scheme-ről, egyre kevesebb frusztrációt érzek vele kapcsolatban. Mindent egybevetve: köszönöm a LilyPondot, szerintem nagyon jó.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, a koblenzi opera karmestere és kiváló GNU coder + +@qq{Egyébként a LilyPond kiválóan teszi a dolgát!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, a @uref{http://jackaudio.org/, JACK} és az @uref{http://www.ardour.org/, Ardour} fejlesztője + +@qq{Véleményem szerint [a LilyPond] egy hihetetlen program, a kimenet +egyszerűen csodálatos. Amikor tavaly olvastam róla egy interjúban, lelkendezve +meséltem a barátaimnak, mikre képes.} +@divEnd + + +@divClass{column-center-bottom} +@subheading Hogyan tovább? +Olvasd el a tudnivalókat a @ref{Szöveges bevitel, szöveges bevitelről}. +@divEnd + + + +@node Szöveges bevitel +@unnumberedsec Szöveges bevitel +@translationof Text input + +@c TRANSLATORS: so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading A LilyPond működése + +@imageClickable{nereid-shot-small,png, (Kattints a képre a nagyításhoz), nereid-shot,png, right} + +A LilyPond @emph{parancssori} program: meg kell adni neki egy szöveges fájlt, +ami a zene leírását tartalmazza. Az eredményül kapott kotta képernyőn +megtekinthető vagy kinyomtatható. + +A kotta beírása nem grafikus felhasználói felületen történik, hanem a zene +szöveges formájának begépelésével. Ezt a szöveget aztán @qq{lefordítja} a +LilyPond, azaz gyönyörűen szedett kottává alakítja. + +A grafikus felületekhez szokott felhasználók részéről ez másfajta +gondolkodásmódot igényel, de az eredmény mindenképpen megéri a beléje +fektetett munkát! + +@warning{Itt gyorsan áttekintjük a szöveges bevitel alapjait -- ez messze +nem olyan bonyolult, mint amilyennek hangzik! Nem baj, ha nem érted az alábbi +példák minden egyes részletét; a tankönyv mindent részletesen, fokozatosan +haladva elmagyaráz.} + + +@subsubheading Egyszerű, mint az ABC + +A hangok betűkkel és számokkal írhatók le. A speciális parancsok a \ +karakterrel kezdődnek. + +@imageFloat{text-input-1-annotate-hu,png,center} +@imageFloat{text-input-1-output,png,center} + +Módosított hangokat a hangnevek módosításával lehet elérni: a keresztes hang +neve után -is, a bés hang neve után -es írandó. (Más nyelveknek megfelelő +jelölések is alkalmazhatóak.) A LilyPond kitalálja, hova rakjon módosítójelet. + +@imageFloat{text-input-2-annotate-hu,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading Popzene + +Könnyen írhatsz dalszöveget és akkordokat a dallam mellé: + +@imageFloat{text-input-pop-annotate-hu,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading Zenekari művek + +A bemeneti fájl a mű összes hangját tartalmazza. A partitúra és a szólamkották +egyetlen forrásból származnak. Így a változások mind a partitúrában, mind az +egyes szólamokban tükröződnek. A szólamok hangjainak újrafelhasználásához el +kell nevezni őket: + +@imageFloat{text-input-parts-both-annotate-hu,png,center} + + +Az így létrejött változóra később lehet hivatkozni (akár transzponálva és +összevonva a többütemes szüneteket, mint itt): + +@imageFloat{text-input-parts-single-annotate-hu,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +Ugyanazt a változót használhatjuk a partitúrában (ez alkalommal hangzó +magasságban): + +@imageFloat{text-input-score-annotate-hu,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Tankönyv + +Tisztában vagyunk vele, hogy sok felhasználónak szokatlan lehet a szöveges +bevitel. Ezért a @ref{Tankönyv, tankönyvben} alapos segítséget nyújtunk +az újdonsült felhasználóknak. + +A kevésbé tapasztalt felhasználók néha azt hiszik, hogy a LilyPond hibás, +miközben valójában tökéletesen működik. Addig ne jelents be hibát, amíg végig +nem olvastad a tankönyvet, és meg nem bizonyosodtál arról, hogy valóban hibára +bukkantál! + +@subsubheading Könnyebb szerkesztés + +A LilyPond elsődleges profilja a csúcsminőségű kottaszedés. A grafikus +felhasználói felület fejlesztése másodlagos, nehogy szem elől tévesszük a fő +célt. Mindazonáltal léteznek olyan projektek, amelyek azt a célt szolgálják, +hogy a LilyPond forrásfájlok létrehozása és karbantartása egyszerűbb legyen. + +Ezekbe az eszközökbe tipikusan szintaxiskiemelés, automatikus +parancskiegészítés és sok előre gyártott sablon van beépítve. +Más programok valamilyen szinten pótolják a grafikus felhasználói felületet, +és lehetővé teszik a kotta vizuális szerkesztését. Ezekről a +@ref{Könnyebb bevitel} c. szakaszban olvashatsz. + + +@divClass{column-center-bottom} +@subheading Hogyan tovább? + +Most már készen állsz a LilyPond @ref{Letöltés, letöltésére}. + +Még mindig nem vagy meggyőzve? Tudd meg, hogyan lehet @ref{Könnyebb bevitel, +egyszerűbben szerkeszteni} a LilyPond fájlokat erre specializálódott +szerkesztőprogramokkal! +@divEnd + + +@node Könnyebb bevitel +@unnumberedsec Könnyebb bevitel +@translationof Easier editing + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (Kattints a képre a nagyításhoz),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool@/.organum@/.hu} + +A magyar fejlesztésű LilyPondTool a @uref{http://@/www@/.jedit@/.org@/,jEdit} +szövegszerkesztő bővítménye, és a legtöbbet tudó integrált LilyPond-környezet. +Sokrétű funkciói közül megemlítendő a beépített PDF-nézegető, mely támogatja +a kottáról forráskódra és visszafelé történő ugrást, ill. a kottaelemek +grafikus pozicionálását; az Új kotta varázsló, amely megkönnyíti +nagy művek létrehozását; valamint az automatikus elválasztás dalszövegek +gyors begépeléséhez. +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (Kattints a képre a nagyításhoz),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +A Frescobaldi egy dedikált LilyPond-szerkesztő beépített PDF-előnézettel, +jól konfigurálható Új kotta varázslóval és sok szerkesztési funkcióval. +A KDE4 könyvtárakat használja, így minden Linuxon és UNIX-szerű operációs +rendszeren fut. + +@divEnd + +@divClass{column-center-top} +@subheading Denemo + +@imageClickable{screenshot-denemo-small,png, + (Kattints a képre a nagyításhoz),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +A Denemo egy grafikus szerkesztő, amely LilyPond forrásfájlokat generál, +és le is játssza a beírt kottát. Jelenleg fejlesztés alatt áll, és a LilyPond +régebbi verziójának formátumát használja. Szerkesztés közben párhuzomosan +mutatja a kottát és a LilyPond forrást. + +@ignore +Import: LilyPond, MIDI + +Export: Lilypond, MIDI, ABC, CSound Score File, PDF +@end ignore + +@divEnd + +@divClass{column-center-top} +@subheading Emacs és Vim + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.geoffhorton.com/lilymacs.html} + +Az Emacs egy szövegszerkesztő, mely sok programnyelv-specifikus képességgel +bír. Az Emacs rugalmasan bővíthető, és így integrált fejlesztőkörnyezetként +is szolgálhat. Létezik hozzá egy @q{lilypond mód}, amely LilyPond forrásfájlok +szerkesztését megkönnyítő funkciókat tartalmaz. + +A Vim egy minimalista szövegszerkesztő, a régi Unixos @command{vi} szerkesztő +továbbfejlesztett változata. Szintén nagyon jól bővíthető és konfigurálható. + +Amennyiben még nem vagy járatos az Emacs vagy a Vim használatában, +inkább azt ajánljuk, más programot használj a LilyPond fájlok +szerkesztéséhez. + +@divEnd + +@divClass{column-center-top} +@subheading Egyéb + +@subsubheading LilyKDE + +@imageClickable{lilykde-screenshot-small,png, + (Kattints a képre a nagyításhoz),lilykde-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://lilykde.googlecode.com/} + +A LilyKDE a @uref{http://kate-editor.org/,Kate} KDE-s szövegszerkesztő egy +beépülő modulja. + +A @uref{http://www.volny.cz/smilauer/rumor/,Rumor}t használja, +így a kotta bevitele MIDI-billentyűzetről is lehetséges. + +Hasznos funkciója többek között, hogy a KDE fájlkezelőjéből több fájlt le +lehet fordítani egyszerre a segítségével. + +@subsubheading TexShop + +@sourceimage{logo-macosx,,,} + +@uref{http://@/www@/.uoregon@/.edu/~koch/texshop} + +A Mac OS@tie{}X alá írt TexShop szerkesztő a +@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html#desktoppub} +címen található kiterjesztésekkel képes futtatni a LilyPondot, valamint a +@command{lilypond-book} és a @command{convert-ly} segédprogramokat. + +@ignore +TODO: ask somebody to sponsor/check these. -gp + +@subsubheading TextMate + +@sourceimage{logo-macosx,,,} + +A TextMate szövegszerkesztőhöz is létezik LilyPond csomag. A következő +parancsok futtatásával telepíthető: + +@example +mkdir -p /Library/Application\ Support/TextMate/Bundles +cd /Library/Application\ Support/TextMate/Bundles +svn co http://svn.textmate.org/trunk/Bundles/LilyPond.tmbundle/ +@end example +@end ignore + +@divEnd + +@divClass{column-center-top} +@subheading A LilyPond formátumába exportáló programok + +@ignore +TODO: change url back to full adress, to make it readable in printouts -ch +@end ignore + +@subsubheading Grafikus kottaszerkesztők: + +@itemize +@item +@uref{http://@/noteedit@/.berlios@/.de,NoteEdit} +@item +@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden} +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar} +@item +@uref{http://musescore.org,MuseScore} +@item +@uref{http://canorus.org,Canorus} +@end itemize + +@subsubheading Parancssori eszközök: + +@itemize +@item +@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, +amely az egyszólamú MIDI bemenetet valós időben LilyPond bemenetté konvertálja +@item +@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, egy Emacs mód +@item +@uref{http://@/www@/.nongnu@/.org/@/xml2ly/,xml2ly}, amely +@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML}-LilyPond konverzióra képes +@item +@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, +egy LISP könyvtár, amellyel kottát lehet generálni +@end itemize +@divEnd + + +@divClass{column-center-bottom} +@subheading Hogyan tovább? + +Most már készen állsz a LilyPond @ref{Letöltés, letöltésére}. + +Még mindig nem vagy meggyőzve? Számos zeneszerző, előadó és karmester könnyen +elsajátította a LilyPond nyelvét. A tapasztalt felhasználók bizonyos esetekben +gyorsabban begépelnek LilyPonddal egy kottát, mint MIDI billentyűzettel +vagy egy grafikus kottaszerkesztővel! Esetleg nézd meg, @ref{Képességek, +mit tud} a LilyPond, @ref{Példák, milyen gyönyörű kottákat szed}, milyen +@ref{Szabadság, szabadságot} ad, vagy olvasd el felhasználóink +@ref{Ajánlások, ajánlásait}. Ezenkívül a számítógéppel történő kottaszedés +esztétikájának @ref{Háttér, hátteréről} is olvashatsz. + + +@subheading Jogi tudnivalók + +@divClass{legal} +Minden logó és termékábrázolás szerzői joggal védett. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/hu/web/manuals.itexi b/Documentation/hu/web/manuals.itexi new file mode 100644 index 0000000000..e63cf9f2c5 --- /dev/null +++ b/Documentation/hu/web/manuals.itexi @@ -0,0 +1,568 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: hu -*- +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 Translators: Harmath Dénes + +@node Dokumentáció +@unnumbered Dokumentáció +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, \reference\ részletei}) +@spanEnd +@end macro + +@divClass{heading-center} +@ifclear web_version + @heading A LilyPond @version dokumentációja +@end ifclear +@ifset web_version + @heading A LilyPond @versionStable dokumentációja +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Bevezetés + +@itemize + +@item +@ref{Szöveges bevitel}: +A LilyPond egy @strong{szöveges alapú} kottaszedő program. Ha nem vagy +tisztában ennek a fogalmával, akkor előbb ezt olvasd el! + +@item +@ifWebLinks{@manualStableLearningSplitNoName-hu,@rlearningnamed{Top,Tankönyv}} +Bevezetés a LilyPond használatába lépésről lépésre. +@details{Tankönyv} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName-hu,@rglosnamed{Top,Fogalomtár}} +@emph{(opcionális)} +Zenei fogalmak gyűjteménye több nyelven. +@details{Fogalomtár} + +@item +@ifWebLinks{@manualStableEssaySplitNoName-hu,@ressaynamed{Top,Esszé}} +@emph{(opcionális)} +Háttérinformáció a kottaszedés folyamatáról és a 19. századi kottaszedés +esztétikai elveiről. +@details{Esszé} + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Mindennapi használat + +@itemize + +@item +@ifWebLinks{@manualStableNotationSplitNoName-hu,@rusernamed{Top,Kottaírás}} +A dokumentáció törzsanyaga; részletesen bemutatja a különböző kottaelemek +beviteli módját. +@details{Kottaírás} + +@item +@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} + +@item +@ifWebLinks{@manualStableSnippetsSplitNoName-hu,@rlsrnamed{Top,Kódrészletek}} +Hasznos példák, tippek, trükkök. +@details{Kódrészletek} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Speciális használat + +@itemize + +@item +@ref{GYIK}: +Gyakran Ismételt Kérdések. + +@item +@ref{Top, Web}: +A weboldal. + +@item +@ifWebLinks{@manualStableChangesSplitNoName-hu,@rchangesnamed{Top,Változások}} +A legutóbbi verzióváltás óta történt változások. +@details{Változások} + +@item +@ifWebLinks{@manualStableExtendingSplitNoName-hu,@rextendnamed{Top,Bővítés}} +A LilyPond képességeinek kiterjesztése. +@details{Bővítés} + +@item +@ifWebLinks{@manualStableInternalsSplitNoName-hu,@rinternalsnamed{Top,Belső működés}} +A LilyPond belső szerkezetének referenciája. A kimenet finomhangolásához +szükséges. +@details{Belső működés} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Egyéb anyagok + +@itemize + +@item +@ref{Honosítás}: +A honosítás állapota. + +@item +@ref{Teljes dokumentáció}: +Gyorslinkek a dokumentáció különböző részeihez, letölthető változataihoz és +régi verzióihoz. + +@item +@ref{Fejlesztés}: +Dokumentáció fejlesztőknek. + +@item +@ref{FDL}: +A dokumentáció licence, a GNU Free Documentation License. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Tankönyv:: Az első leckék. +* Fogalomtár:: Zenei fogalmak gyűjteménye. +* Esszé:: Esszé. +* Kottaírás:: A kottaírás kézikönyve. +* Használat:: Az alkalmazás használata. +* Kódrészletek:: Hasznos kódrészletek. +* GYIK:: Gyakran Ismételt Kérdések. +* Web:: A weboldal. +* Változások:: A program fejlődése. +* Bővítés:: A funkcionalitás kiterjesztése. +* Belső működés:: A belső működés referenciája. +* Honosítás:: A honosítás állapota. +* Teljes dokumentáció:: Az összes kézikönyv egyben. +* FDL:: Licenc. +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Tankönyv +@unnumberedsec Tankönyv +@translationof Learning + +@divClass{column-left-top} +@subheading Tankönyv +A tankönyv fokozatosan bevezet a LilyPond használatába, és közérthetően +elmagyarázza az ehhez szükséges alapfogalmakat. +Fejezeteit lineárisan, az elejétől a végéig érdemes olvasni. + +A tankönyv minden szakaszának végén található egy @strong{Lásd még} bekezdés +is, mely más szakaszokra mutató kereszthivatkozásokat tartalmaz: ezeket első +olvasásra nem praktikus követni, csak az egész tankönyv elolvasása után, az +összefüggések meglátása végett. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Tankönyv, learning, + @rlearningnamed{Top,Tankönyv}, + @manualStableLearningSplit-hu, + @manualStableLearningBig-hu, 1.5 MB, + @manualStableLearningPdf-hu, 3 MB} + +@divEnd + + +@node Fogalomtár +@unnumberedsec Fogalomtár +@translationof Glossary + +@divClass{column-left-top} +@subheading Fogalomtár + +A fogalomtár zenei fogalmak definícióját és honosításait tartalmazza. +Ha egy fogalommal nem vagy tisztában, vagy egy kifejezés angol nyelvű +megfelelőjére vagy kíváncsi, érdemes megnézni a fogalomtárban. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Fogalomtár, music-glossary, + @rglosnamed{Top,Fogalomtár}, + @manualStableGlossarySplit-hu, + @manualStableGlossaryBig-hu, 1 MB, + @manualStableGlossaryPdf-hu, 1.5 MB} + +@divEnd + + +@node Esszé +@unnumberedsec Esszé +@translationof Essay + +@divClass{column-left-top} +@subheading Esszé + +Az esszé rövid áttekintést nyújt a kottaszedés történelméről, +majd felületesen bemutatja a LilyPond szedési technikáit, +összehasonlítva az eredményt más kottaszedő programok kimenetével. + +@warning{A kottapéldák nagy felbontásuk miatt a PDF változatban +élvezhetőek leginkább.} +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Esszé, essay, + @ressaynamed{Top,Esszé}, + @manualStableEssaySplit-hu, + @manualStableEssayBig-hu, 2 MB, + @manualStableEssayPdf-hu, 2.5 MB} + +@divEnd + + +@node Kottaírás +@unnumberedsec Kottaírás +@translationof Notation + +@divClass{column-left-top} +@subheading A kottaírás kézikönyve + +Ez a kézikönyv minden kottaelemhez tartozó LilyPond parancs megadási módját +ismerteti. + +@warning{A kottaírás kézikönyve feltételezi, hogy az olvasó birtokában van +a @ref{Tankönyv}ben leírt alapismereteknek, és ismeri a zenei kifejezések angol +megfelelőjét, melyek a @ref{Fogalomtár}ban vannak leírva.} +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Kottaírás, notation, + @rusernamed{Top,Kottaírás}, + @manualStableNotationSplit-hu, + @manualStableNotationBig-hu, 7 MB, + @manualStableNotationPdf-hu, 18 MB} + +@divEnd + + +@node Használat +@unnumberedsec Használat +@translationof Usage + +@divClass{column-left-top} +@subheading Az alkalmazás használata + +Ez a kézikönyv bemutatja, hogyan kell futtatni a LilyPondot és a hozzá +tartozó segédprogramokat, hogyan integrálható a LilyPonddal szedett kotta +más dokumentumszedő programokkal készített dokumentumokba, és a gyakorlatban +jól bevált módszereket ismertet a hatékony használathoz. +Ajánlott elolvasni, mielőtt nagy művek bevitelébe kezd az ember. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Használat, usage, + @rprogramnamed{Top,Használat}, + @manualStableUsageSplit-hu, + @manualStableUsageBig-hu, 300 KB, + @manualStableUsagePdf-hu, 400 KB} + +@divEnd + + +@node Kódrészletek +@unnumberedsec Kódrészletek +@translationof Snippets + +@divClass{column-left-top} +@subheading Kódrészletek + +Ez egy válogatás a +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Kódrészletek Tárházából}. +Minden kódrészlet közkincs. + +A kottaírás kézikönyvének megfelelő szakaszaiban is találhatóak ilyenek a +@strong{Válogatott kódrészletek} c. bekezdésekben. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Kódrészletek, snippets, + @rlsrnamed{Top,Kódrészletek}, + @manualStableSnippetsSplit-hu, + @manualStableSnippetsBig-hu, 2.5 MB, + @manualStableSnippetsPdf-hu, 8 MB} + +@divEnd + + +@node GYIK +@unnumberedsec GYIK +@translationof FAQ + +@divClass{column-center-top} +@subheading Általános kérdések + +@subsubheading Hol a grafikus felület? + +A LilyPond számára a zenét egy szöveges fájlban kell leírni, amit feldolgoz. +Olvasd el a @ref{Szöveges bevitel}ről szóló szakaszt. + +@subsubheading Nagyon sok dokumentáció van! Mindet el kell olvasni? + +Csak a @ref{Tankönyv} az, amit teljes egészében ajánlott elolvasni. Később a +dokumentációból csak azokat a részeket kell elolvasni, amelyek a begépelni +kívánt kottaelemhez szükségesek. + +@subsubheading Ez még mindig túl sok olvasnivaló! Megéri mindezt megtanulni? + +Ezt döntsd el a saját szempontjaid szerint; az előnyök, amik miatt megtérülhet +a befektetés, a @ref{Bevezetés}ben vannak leírva. + +@divEnd + +@divClass{column-center-bottom} +@subheading Kérdések a használattal kapcsolatban + +@subsubheading Valami nem működik! Hogyan javítsam ki? + +Lásd: @rprogram{Troubleshooting} + +@subsubheading Miért változik a nyelvtan? + +Lásd: @rprogram{Miért változik a szintaxis?} + +@divEnd + + +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +A LilyPond weboldala, mely általános információkat tartalmaz a LilyPondról +a felhasználók széles rétege számára, az újdonsült felhasználóktól a +fejlesztőkig. +@divEnd + +@divClass{column-right-bottom} +@subheading Olvasd el + +@subsubheading Legutóbbi verzió + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading @versionDevel + +@docLinksBare{Web, web, + @ref{Top,Web}, + @manualDevelWebSplit-hu, + @manualDevelWebBig-hu, 1 MB, + @manualDevelWebPdf-hu, 2 MB} + +@divEnd + + +@node Változások +@unnumberedsec Változások +@translationof Changes + +@divClass{column-left-top} +@subheading Változások + +Összefoglaló az új funkciókról és a LilyPond nyelvének változásairól +az előző stabil verzió óta. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Változások, changes, + @rchangesnamed{Top,Változások}, + @manualStableChangesSplit-hu, + @manualStableChangesBig-hu, 6 KB, + @manualStableChangesPdf-hu, 200 KB} + +@divEnd + + +@node Bővítés +@unnumberedsec Bővítés +@translationof Extend + +@divClass{column-left-top} +@subheading A LilyPond bővítése + +Ez a kézikönyv azt írja le, hogyan lehet a LilyPond képességeit kiterjeszteni +Scheme nyelven írt bővítményekkel. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Bővítés, extending, + @rextendnamed{Top,Bővítés}, + @manualStableExtendingSplit-hu, + @manualStableExtendingBig-hu, 200 KB, + @manualStableExtendingPdf-hu, 400 KB} + +@divEnd + + +@node Belső működés +@unnumberedsec Belső működés +@translationof Internals + +@divClass{column-left-top} +@subheading A belső működés referenciája + +Ez a referencia a LilyPond által használt osztályok, függvények és +tulajdonságok összes adatát tartalmazza. A felhasználó ezek mindegyikét +finomhangolhatja. Ha egy kottaelemet az alapbeállítástól eltérően szeretnél +formázni, ebben a listában érdemes megkeresni az adott tulajdonság nevét. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Belső működés, internals, + @rinternalsnamed{Top,Belső működés}, + @manualStableInternalsSplit-hu, + @manualStableInternalsBig-hu, 2.5 MB, + @manualStableInternalsPdf-hu, 2.8 MB} + +@divEnd + + +@node Honosítás +@unnumberedsec Honosítás +@translationof Translated + +@divClass{column-center-bottom} +@subheading A honosítások állapota + +@include translations.itexi + +@divEnd + + +@node Teljes dokumentáció +@unnumberedsec Teljes dokumentáció +@translationof All + +@divClass{column-left-top} +@subheading Letölthető változatok + +@ifclear web_version +A csomagok letölthetőek a @uref{http://lilypond.org} weboldalról. +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable-hu + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Előző stabil verziók + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +2.12} + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +2.11} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +2.10} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +2.8} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +2.6} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +2.4} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +2.2} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +2.0} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +1.8} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +1.6} + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL + +@divClass{column-center-top} +@subheading Dokumentációs licenc + +A GNU LilyPond dokumentációjának licence a GNU Free Documentation License. +A licenc választásának főbb előnyeit a @ref{Szabadság} c. szakasz ismerteti. +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd diff --git a/Documentation/included/GNUmakefile b/Documentation/included/GNUmakefile new file mode 100644 index 0000000000..79b506e798 --- /dev/null +++ b/Documentation/included/GNUmakefile @@ -0,0 +1,11 @@ +depth = ../.. + +STEPMAKE_TEMPLATES=documentation + +EXTRA_DIST_FILES= README +EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) +EXTRA_DIST_FILES+=$(call src-wildcard,*.ily) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itely) + +include $(depth)/make/stepmake.make diff --git a/Documentation/included/README b/Documentation/included/README new file mode 100644 index 0000000000..6252de2399 --- /dev/null +++ b/Documentation/included/README @@ -0,0 +1,13 @@ +This is for large examples that are included in the manual. Most of these +examples are distinct snippets; files that are also included in the +regression tests should be copied from input/regression/ into this +direction and listed here. +- anything from LSR should be in Documentation/snippets/, though + +- simple.ly isn't large, but it's included from + scm/define-markup-commands.scm and should not be removed. + +Do not use @ref{} in files in Documentation/included/; +cross-references should be made with specific macros such as +@rcontrib{}, @rextend{}, etc. See Documentation/macros.itexi for a +complete list. \ No newline at end of file diff --git a/Documentation/included/authors.itexi b/Documentation/included/authors.itexi new file mode 100644 index 0000000000..b77ff39fad --- /dev/null +++ b/Documentation/included/authors.itexi @@ -0,0 +1,449 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of community.itexi and ../topdocs/AUTHORS.itexi + +@ignore + + This file lists authors of LilyPond, and what they wrote. Each + list is sorted alphabetically by surname. This file lists people + that have contributed more than a few hours of work. + + Developers are people who are (or have been) listed under the + "Development Team" in the THANKS, and can choose their own + titles. Contributors are everybody else, and simply list their + contributions. All lists are sorted alphabetically. + + Anybody who has finished doing a "main devel team" task should + list it under developersPrevious, even if they're still doing + other "main devel team" stuff. See "Graham Percival" for an + example. + + Contributors are also split between Current and Previous, and + each category contains: + core... (programming) + font... (duh) + doc... (documentation and examples) + bug... (bug squad members) + support... (building, distributions, editors, + lilypond-book, LSR, but *not* answering emails) + translations... (duh) + We might add a "general" or "other" if there's something else. + +@end ignore + + +@macro developersCurrent + +@itemize + +@item Trevor Daniels: +@email{t.daniels@@treda.co.uk}, +Assistant documentation editor + +@item Reinhold Kainhofer: +@email{reinhold@@kainhofer.com}, +@uref{http://reinhold.kainhofer.com}, +Core developer, Music2xml wrangler + +@item David Kastrup: +@email{dak@@gnu.org} +Code worrier, support fighter, accordionist + +@item Jonathan Kulp: +Assistant documentation editor + +@item Werner Lemberg, +@email{wl@@gnu.org}, +Fonts, bug squasher + +@item John Mandereau: +@email{john.mandereau@@free.fr}, +Translations + +@item Patrick McCarty: +SVG guru, bug squad member, bug squasher, text handling + +@item Joe Neeman: +Core developer + +@item Han-Wen Nienhuys: +@email{hanwen@@xs4all.nl}, +@uref{http://www.xs4all.nl/~hanwen/}, +Main author + +@item Jan Nieuwenhuizen: +@email{janneke@@gnu.org}, +@uref{http://JoyofSource.com}, +@uref{http://AvatarAcademy.nl}, +Main author + +@item Graham Percival: +@uref{http://percival-music.ca}, +Project manager, Documentation Editor + +@item Mark Polesky: +Assistant documentation editor, Code cleanup + +@item Neil Puttock: +Core developer + +@item Mike Solomon: +@email{mike@@apollinemike.com}, +Contemporary music attaché + +@item Carl Sorensen: +@email{c_sorensen@@byu.edu}, +Core developer, Frog meister + +@item Francisco Vila: +Translation Meister + +@item Valentin Villenave: +LSR editor and Bug squad member + +@end itemize +@end macro + + + +@macro developersPrevious + +@itemize + +@c use colons not commas for @item entries. + +@item Mats Bengtsson: +@email{mats.bengtsson@@ee.kth.se}, +@uref{http://www.s3.kth.se/~mabe/}, +Support guru + +@item Pedro Kroeger: +Build meister + +@item John Mandereau: +@email{john.mandereau@@free.fr}, +Translation meister + +@item Graham Percival: +@uref{http://percival-music.ca}, +Bug meister, Grand Documentation Project leader + +@item Jürgen Reuter: +@email{reuter_j@@web.de}, +@uref{http://www.juergen-reuter.de}, +Ancient notation + +@item Erik Sandberg: +Bug meister + +@item Nicolas Sceaux: +Core developer, Schemer extraordinaire + +@end itemize +@end macro + + +@c ***************** current contributors + +@macro coreCurrent + +@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 + +@c no comma for last entry + +@end macro + + + +@macro fontCurrent + +@c use commas not colons + +Keith OHara, +Marc Hohl, +Alexander Kobel, +Carsten Steger + +@c no comma for last entry + +@end macro + + + +@macro docCurrent + +@c use commas not colons + +Colin Campbell, +Andrew Hawryluk, +James Lowe, +Mike Moral, +Ralph Palmer, +David Pounder, +Patrick Schmidt + +@c no comma for last entry + +@end macro + + +@macro bugsquadCurrent + +James E. Bailey, +Colin Campbell, +Phil Holmes, +Urs Liska, +Ralph Palmer, +Kieren MacMillan, +Dmytro O. Redchuk + +@c no comma for last entry + +@end macro + + +@macro supportCurrent + +@c use commas not colons + +Christian Hitz + +@c no comma for last entry + +@end macro + + + +@macro translationsCurrent + +@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 + +@end macro + + +@c ***************** previous contributors + +@macro corePrevious + +@c use commas not colons + +Erlend Aasland, +Maximilian Albert, +Guido Amoruso, +Kristof Bastiaensen, +Pál Benkő, +@c @email{benkop@@freestart.hu}, +Juliusz Chroboczek, +@c @email{jch@@pps.jussieu.fr}, +Angelo Contardi, +David Feuer, +@c @email{david.feuer@@gmail.com}, +Bertalan Fodor, +Mathieu Giraud, +Yuval Harel, +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 Krause, +@c @email{m.krause@@tu-harburg.de}, +Jean-Baptiste Lamy, +@c @email{jiba@@tuxfamily.org}, +Jonatan Liljedahl, +Peter Lutek, +Hendrik Maryns, +Joe Neeman, +@c @email{joeneeman@@gmail.com}, +Matthias Neeracher, +Tatsuya Ono, +Lisa Opus Goldstein, +Guy Gascoigne-Piggford, +Stan Sanderson, +Edward Sanford Sutton, +Andreas Scherer, +Johannes Schindelin, +Kim Shrier, +Vicente Solsona Della, +David Svoboda, +Sebastiano Vigna, +Arno Waschk, +Michael Welsh Duggan, +John Williams, +Milan Zamazal, +Rune Zedeler + +@c no comma for last entry + +@end macro + + + +@macro fontPrevious + +@c use commas not colons + +Tom Cato Amundsen, +@c @email{tca@@gnu.org}, +Chris Jackson, +@c @email{chris@@fluffhouse.org.uk}, +Arno Waschk, +@c @email{arno@@arnowaschk.de}, +Rune Zedeler + +@c no comma for last entry + +@end macro + + + +@macro docPrevious + +@c use commas not colons + +Erlend Aasland, +Trevor Bača, +Alard de Boer, +Jay Hamilton, +Andrew Hawryluk, +Joseph Harfouch, +Cameron Horsburgh, +Geoff Horton, +Ian Hulin, +Heikki Junes, +@c @email{heikki.junes@@hut.fi}, +Kurtis Kroon, +Dave Luttinen, +Kieren MacMillan, +Christian Mondrup, +@c @email{scancm@@biobase.dk}, +Eyolf Østrem, +Ralph Palmer, +François Pinard, +@c @email{pinard@@iro.umontreal.ca}, +@c @uref{http://pinard.progiciels-bpi.ca/}, +Eduardo Vieira, +Michael Rasmussen, +Till Rettig, +Carl D. Sorensen, +Anh Hai Trinh, +Rune Zedeler + +@c no comma for last entry + +@end macro + + +@macro bugsquadPrevious + +@c nobody here yet + +@c no comma for last entry +@end macro + +@macro supportPrevious + +@c use commas not colons + +Anthony Fok, +@c @email{foka@@debian.org}, +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 + +@end macro + + + +@macro translationsPrevious + +@c use commas not colons + +Frédéric Chiasson, +Abel Cheung, +Alard de Boer, +Simon Dahlbacka, +Orm Finnendahl, +David González, +Nicolas Grandclaude, +@c @email{ngclaude@@123mail.org}, +Damien Heurtebise, +Matthieu Jacquot, +Bjoern Jacke, +@c @email{bjoern.jacke@@gmx.de}, +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}, +Adrian Mariano, +Christian Mondrup, +Tineke de Munnik, +@c @email{tdm@@dds.nl}, +Steven Michael Murphy, +François Pinard, +Gauvain Pocentek, +@c @email{gauvainpocentek@@yahoo.fr}, +Till Rettig, +Ludovic Sardain, +@c @email{ludovicsardain@@gmail.com}, +Yoshiki Sawada, +Thomas Scharkowski, +Clytie Siddall, +August S. Sigov, +@c @email{august@@infran.ru}, +Roland Stigge, +Risto Vääräniemi, +Andrea Valle, +Olcay Yıldırım + +@c no comma for last entry + +@end macro diff --git a/input/manual/chord-names-jazz.ly b/Documentation/included/chord-names-jazz.ly similarity index 87% rename from input/manual/chord-names-jazz.ly rename to Documentation/included/chord-names-jazz.ly index ccd42c54b7..5be2e57a56 100644 --- a/input/manual/chord-names-jazz.ly +++ b/Documentation/included/chord-names-jazz.ly @@ -1,9 +1,9 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " Chord names are generated from a list pitches. The -functions which construct these names can be customised. Here are shown -Jazz chords, following Ignatzek (pp. 17-18, 1995) and +functions which construct these names can be customised. Here are shown +Jazz chords, following Ignatzek (pp. 17-18, 1995) and an alternative Jazz chord notation. Chords following Banter (1987) can also be printed from this file, but @@ -13,7 +13,7 @@ are turned off for brevity. } -chs = \transpose c' c' +chs = \transpose c' c' { 1 % m = minor triad @@ -22,19 +22,19 @@ chs = \transpose c' c' % triangle = maj - + \break - + \break % 6 = major triad with added sixth % m6 = minor triad with added sixth - + \break - + \break @@ -65,7 +65,7 @@ chs = \transpose c' c' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % alternate Jazz notation -efullmusicJazzAlt = +efullmusicJazzAlt = { 1-\markup { "+" } -\markup { \normal-size-super @@ -86,7 +86,7 @@ epartialmusicJazzAlt = { -\markup { "m" } -\markup { \normal-size-super "sus4" } -\markup { \normal-size-super "5" } - + %% TODO, partial exceptions -\markup { "m" }-\markup { \normal-size-super "sus4" } -\markup { "m" }-\markup { \normal-size-super "sus2" } @@ -94,7 +94,7 @@ epartialmusicJazzAlt = { epartialJazzAlt = #(sequential-music-to-chord-exceptions epartialmusicJazzAlt #f) -jazzAltProperties = \sequential { +jazzAltProperties = \sequential { \set majorSevenSymbol = #whiteTriangleMarkup \set chordNameSeparator = #(make-simple-markup "/") \set chordNameExceptionsFull = #efullJazzAlt @@ -102,7 +102,7 @@ jazzAltProperties = \sequential { \set chordNameFunction = #jazz-chord-names } -banterProperties = \sequential { +banterProperties = \sequential { \set chordNameFunction = #banter-chord-names } @@ -113,7 +113,7 @@ banterProperties = \sequential { \set shortInstrumentName = #"Def" \chs } - + \new ChordNames { \jazzAltProperties \set instrumentName = #"Alternative" @@ -125,12 +125,12 @@ banterProperties = \sequential { %% This is the Banter (1987) style. It gives exceedingly %% verbose (wide) names, making the output file take up to 4 pages. - %% (FIXME: how big is is now?) + %% (TODO: how big is is now?) %% Turned off by default. - %% FIXME: use smaller font for Banter (or remove some esoteric + %% TODO: use smaller font for Banter (or remove some esoteric %% chords). - + \new ChordNames { \banterProperties \set instrumentName = #"Banter" @@ -138,15 +138,15 @@ banterProperties = \sequential { \chs } %} - + \new Staff \transpose c c' { \chs } >> \layout { indent = 3.\cm - \context { + \context { \ChordNames \consists Instrument_name_engraver } } } - + diff --git a/Documentation/included/chord-names-languages.ly b/Documentation/included/chord-names-languages.ly new file mode 100644 index 0000000000..ade0409d0a --- /dev/null +++ b/Documentation/included/chord-names-languages.ly @@ -0,0 +1,47 @@ +\version "2.14.0" +\header { + texidoc = "@cindex Chord Names German +The English naming of chords (default) can be changed to German +(@code{\germanChords} replaces B and Bes to H and B), semi-German +(@code{\semiGermanChords} replaces B and Bes to H and Bb), Italian +(@code{\italianChords} uses Do Re Mi Fa Sol La Si), or French +(@code{\frenchChords} replaces Re to Ré). + +" } + +scm = \chordmode { + e1/d c:m + % c/c cis/cis + % yeah, we get the idea. -hwn + + % cisis/cisis ces/ces ceses/ceses + b/b bis/bis bes/bes + % beses/beses +} + + +\layout { + ragged-right = ##t + \context {\ChordNames \consists Instrument_name_engraver } +} + +<< + \new ChordNames { + \set instrumentName = #"default" + \scm + } + \new ChordNames { + \set instrumentName = #"german" + \germanChords \scm } + \new ChordNames { + \set instrumentName = #"semi-german" + \semiGermanChords \scm } + \new ChordNames { + \set instrumentName = #"italian" + \italianChords \scm } + \new ChordNames { + \set instrumentName = #"french" + \frenchChords \scm } + + \context Voice { \scm } +>> diff --git a/Documentation/included/compile.itexi b/Documentation/included/compile.itexi new file mode 100644 index 0000000000..8f9a237608 --- /dev/null +++ b/Documentation/included/compile.itexi @@ -0,0 +1,1116 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + + +@c DO NOT TRANSLATE THIS FILE + +@c include any node/sections from the higher-level *texi file. +@c @n ode Compiling from source +@c @s ection Compiling from source + +@menu +* Overview of compiling:: +* Requirements:: +* Getting the source code:: +* Configuring make:: +* Compiling LilyPond:: +* Post-compilation options:: +* Problems:: +* Concurrent stable and development versions:: +* Build system:: +@end menu + + +@node Overview of compiling +@section Overview of compiling + +Compiling LilyPond from source is an involved process, and is only +recommended for developers and packagers. Typical program users +are instead encouraged to obtain the program from a package +manager (on Unix) or by downloading a precompiled binary +configured for a specific operating system. Pre-compiled binaries +are available on the @rweb{Download} page. + +Compiling LilyPond from source is necessary if you want to build, +install, or test your own version of the program. + +A successful compile can also be used to generate and install the +documentation, incorporating any changes you may have made. +However, a successful compile is not a requirement for generating +the documentation. The documentation can be built using a Git +repository in conjunction with a locally installed copy of the +program. For more information, see @ref{Building documentation +without compiling}. + +Attempts to compile LilyPond natively on Windows have been +unsuccessful, though a workaround is available (see +@rcontrib{Lilydev}). + + +@node Requirements +@section Requirements + + +@menu +* Requirements for running LilyPond:: +* Requirements for compiling LilyPond:: +* Requirements for building documentation:: +@end menu + + +@node Requirements for running LilyPond +@subsection Requirements for running LilyPond + +Running LilyPond requires proper installation of the following +software: + +@itemize +@item @uref{http://www.dejavu-fonts.org/, DejaVu fonts} (normally +installed by default) + +@item @uref{http://www.fontconfig.org/, FontConfig} (2.4.0 or newer) + +@item @uref{http://www.freetype.org/, Freetype} (2.1.10 or newer) + +@item @uref{http://www.ghostscript.com, Ghostscript} (8.60 or +newer) + +@item @uref{http://www.gnu.org/software/guile/guile.html, Guile} +(1.8.2 or newer) + +@item @uref{http://www.pango.org/, Pango} (1.12 or newer) + +@item @uref{http://www.python.org, Python} (2.4 or newer) +@end itemize + +International fonts are required to create music with +international text or lyrics. + + +@node Requirements for compiling LilyPond +@subsection Requirements for compiling LilyPond + +Below is a full list of packages needed to build LilyPond. +However, for most common distributions there is an easy way of +installing most all build dependencies in one go: + +@multitable @columnfractions .5 .5 +@headitem Distribution @tab Command +@item Debian, Ubuntu +@tab @code{sudo apt-get build-dep lilypond} + +@item Fedora, RHEL +@tab @code{sudo yum-builddep lilypond} + +@item openSUSE, SLED +@c sorry for the idiosyncratic command, I really asked and argued +@c for "zypper build-dep" :-( +@tab @code{sudo zypper --build-deps-only source-install lilypond} +@end multitable + +@itemize +@item Everything listed in @ref{Requirements for running +LilyPond} + +@item Development packages for the above items (which should +include header files and libraries). + +Red Hat Fedora: + +@c ghostscript-devel-[version] isn't needed +@example +guile-devel-@var{version} +fontconfig-devel-@var{version} +freetype-devel-@var{version} +pango-devel-@var{version} +python-devel-@var{version} +@end example + +Debian GNU/Linux: + +@c libgs-dev isn't needed +@example +guile-@var{version}-dev +libfontconfig1-dev +libfreetype6-dev +libpango1.0-dev +python@var{version}-dev +@end example + +@item @uref{http://flex.sourceforge.net/, Flex} + +@item @uref{http://fontforge.sf.net/, FontForge} (20060125 or +newer; 20100501 or newer is recommended; must be compiled +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} + +@item @uref{http://gcc.gnu.org/, GNU Compiler Collection} (3.4 or +newer, 4.@var{x} recommended) + +@item @uref{http://www.gnu.org/software/gettext/gettext.html, GNU +gettext} (0.17 or newer) + +@item @uref{http://www.gnu.org/software/make/, GNU Make} (3.78 or +newer) + +@item @uref{http://metafont.tutorial.free.fr/, MetaFont} +(mf-nowin, mf, mfw or mfont binaries), usually packaged with +@uref{http://www.latex-project.org/ftp.html, @TeX{}}. + +@item @uref{http://cm.bell-labs.com/who/hobby/MetaPost.html, +MetaPost} (mpost binary), usually packaged with +@uref{http://www.latex-project.org/ftp.html, @TeX{}}. + +@item @uref{http://www.perl.org/, Perl} + +@item @uref{http://www.gnu.org/software/texinfo/, Texinfo} (4.11 +or newer) + +@item @uref{http://www.lcdf.org/~eddietwo/type/#t1utils, Type 1 +utilities} (1.33 or newer recommended) +@end itemize + + +@node Requirements for building documentation +@subsection Requirements for building documentation + +You can view the documentation online at +@uref{http://www.lilypond.org/doc/}, but you can also build it +locally. This process requires some additional tools and +packages: + +@itemize +@item Everything listed in @ref{Requirements for compiling +LilyPond} + +@item @uref{http://www.imagemagick.org/, ImageMagick} + +@item @uref{http://netpbm.sourceforge.net/, Netpbm} + +@item @uref{http://gzip.org/, gzip} + +@item @uref{http://rsync.samba.org/, rsync} + +@item @uref{http://www.nongnu.org/texi2html/, Texi2HTML} (1.82) + +@item International fonts + +Red Hat Fedora: + +@example +fonts-arabic +fonts-hebrew +fonts-ja +fonts-xorg-truetype +taipeifonts +ttfonts-ja +ttfonts-zh_CN +@end example + +Debian GNU/Linux: + +@example +emacs-intl-fonts +ttf-kochi-gothic +ttf-kochi-mincho +xfonts-bolkhov-75dpi +xfonts-cronyx-75dpi +xfonts-cronyx-100dpi +xfonts-intl-.* +@end example +@end itemize + + +@node Getting the source code +@section Getting the source code + + +@subheading Downloading the Git repository + +In general, developers compile LilyPond from within a local Git +repository. Setting up a local Git repository is explained in +@rcontrib{Starting with Git}. + + +@subheading Downloading a source tarball + +Packagers are encouraged to use source tarballs for compiling. + +The tarball for the latest stable release is available on the +@rweb{Source} page. + +@noindent +The latest +@uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=snapshot, source code snapshot} +is also available as a tarball from the GNU Savannah Git server. + +@noindent +All tagged releases (including legacy stable +versions and the most recent development release) are available +here: + +@example +@uref{http://download.linuxaudio.org/lilypond/source/} +@end example + +Download the tarball to your @file{~/src/} directory, or some +other appropriate place. + +@warning{Be careful where you unpack the tarball! Any +subdirectories of the current folder named @file{lilypond/} or +@file{lilypond-@var{x.y.z}/} (where @var{x.y.z} is the release +number) will be overwritten if there is a name clash with the +tarball.} + +Unpack the tarball with this command: + +@example +tar -xzf lilypond-@var{x.y.z}.tar.gz +@end example + +This creates a subdirectory within the current directory called +@file{lilypond-@var{x.y.z}/}. Once unpacked, the source files +occupy about 40 MB of disk space. + +Windows users wanting to look at the source code may have to +download and install the free-software +@uref{http://www.7-zip.org, 7zip archiver} to extract the tarball. + + +@node Configuring make +@section Configuring @command{make} + + +@menu +* Running ./autogen.sh:: +* Running ../configure:: +@end menu + + +@node Running ./autogen.sh +@subsection Running @command{./autogen.sh} + +After you unpack the tarball (or download the Git repository), the +contents of your top source directory should be similar to the +current source tree listed at +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=tree}. + +Next, you need to create the generated files; enter the following +command from your top source directory: + +@example +./autogen.sh --noconfigure +@end example + +This will generate a number of files and directories to aid +configuration, such as @file{configure}, @file{README.txt}, etc. + +Next, create the build directory with: + +@example +mkdir build/ +cd build/ +@end example + +We heavily recommend building lilypond inside a separate directory +with this method. + + +@node Running ../configure +@subsection Running @command{../configure} + + +@menu +* Configuration options:: +* Checking build dependencies:: +* Configuring target directories:: +@end menu + + +@node Configuration options +@unnumberedsubsubsec Configuration options + +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} + +The @command{../configure} command (generated by +@command{./autogen.sh}) provides many options for configuring +@command{make}. To see them all, run: + +@example +../configure --help +@end example + + +@node Checking build dependencies +@unnumberedsubsubsec Checking build dependencies + +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} + +When @command{../configure} is run without any arguments, it will +check to make sure your system has everything required for +compilation: + +@example +../configure +@end example + +If any build dependency is missing, @command{../configure} will +return with: + +@example +ERROR: Please install required programs: @var{foo} +@end example + +The following message is issued if you are missing programs that +are only needed for building the documentation: + +@example +WARNING: Please consider installing optional programs: @var{bar} +@end example + +If you intend to build the documentation locally, you will need to +install or update these programs accordingly. + +@warning{@command{../configure} may fail to issue warnings for +certain documentation build requirements that are not met. If you +experience problems when building the documentation, you may need +to do a manual check of @ref{Requirements for building +documentation}.} + + +@node Configuring target directories +@unnumberedsubsubsec Configuring target directories + +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} + +If you intend to use your local build to install a local copy of +the program, you will probably want to configure the installation +directory. Here are the relevant lines taken from the output of +@command{../configure@tie{}--help}: + +@quotation +By default, `@command{make@tie{}install}' will install all the +files in @file{/usr/local/bin}, @file{/usr/local/lib} etc. You +can specify an installation prefix other than @file{/usr/local} +using `@code{--prefix}', for instance `@code{--prefix=$HOME}'. +@end quotation + +A typical installation prefix is @file{$HOME/usr}: + +@example +../configure --prefix=$HOME/usr +@end example + +Note that if you plan to install a local build on a system where +you do not have root privileges, you will need to do something +like this anyway---@command{make@tie{}install} will only succeed +if the installation prefix points to a directory where you have +write permission (such as your home directory). The installation +directory will be automatically created if necessary. + +The location of the @command{lilypond} command installed by this +process will be @file{@var{prefix}/bin/lilypond}; you may want to +add @file{@var{prefix}/bin/} to your @code{$PATH} if it is not +already included. + +It is also possible to specify separate installation directories +for different types of program files. See the full output of +@command{../configure@tie{}--help} for more information. + +If you encounter any problems, please see @ref{Problems}. + + +@node Compiling LilyPond +@section Compiling LilyPond + + +@menu +* Using make:: +* Saving time with the -j option:: +* Compiling for multiple platforms:: +* Useful make variables:: +@end menu + + +@node Using make +@subsection Using @command{make} + +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} + +LilyPond is compiled with the @command{make} command. Assuming +@command{make} is configured properly, you can simply run: + +@example +make +@end example + +@samp{make} is short for @samp{make all}. To view a list of @command{make} +targets, run: + +@example +make help +@end example + +TODO: Describe what @command{make} actually does. + + +@node Saving time with the -j option +@subsection Saving time with the @option{-j} option + +If your system has multiple CPUs, you can speed up compilation by +adding @samp{-j@var{X}} to the @command{make} command, where +@samp{@var{X}} is one more than the number of cores you have. For +example, a typical Core2Duo machine would use: + +@example +make -j3 +@end example + +If you get errors using the @option{-j} option, and @samp{make} +succeeds without it, try lowering the @code{@var{X}} value. + +Because multiple jobs run in parallel when @option{-j} is used, it can +be difficult to determine the source of an error when one occurs. In +that case, running @samp{make} without the @option{-j} is advised. + +@node Compiling for multiple platforms +@subsection Compiling for multiple platforms + +If you want to build multiple versions of LilyPond with different +configuration settings, you can use the +@code{--enable-config=@var{CONF}} option of @command{configure}. +You should use @code{make@tie{}conf=@var{CONF}} to generate the +output in @file{out-@var{CONF}}. For example, suppose you want to +build with and without profiling, then use the following for the +normal build + +@example +./configure --prefix=$HOME/usr/ --enable-checking +make +@end example + +and for the profiling version, specify a different configuration + +@example +./configure --prefix=$HOME/usr/ --enable-profiling \ + --enable-config=prof --disable-checking +make conf=prof +@end example + +If you wish to install a copy of the build with profiling, don't +forget to use @code{conf=@var{CONF}} when issuing +@command{make@tie{}install}: + +@example +make conf=prof install +@end example + + +@seealso +@ref{Installing LilyPond from a local build} + + +@node Useful make variables +@subsection Useful @command{make} variables + +If a less verbose build output if desired, the variable +@code{QUIET_BUILD} may be set to @code{1} on @command{make} +command line, or in @file{local.make} at top of the build tree. + + +@node Post-compilation options +@section Post-compilation options + + +@menu +* Installing LilyPond from a local build:: +* Generating documentation:: +* Testing LilyPond binary:: +@end menu + + +@node Installing LilyPond from a local build +@subsection Installing LilyPond from a local build + +If you configured @command{make} to install your local build in a +directory where you normally have write permission (such as your +home directory), and you have compiled LilyPond by running +@command{make}, you can install the program in your target +directory by running: + +@example +make install +@end example + +If instead, your installation directory is not one that you can +normally write to (such as the default @file{/usr/local/}, which +typically is only writeable by the superuser), you will need to +temporarily become the superuser when running +@command{make@tie{}install}: + +@example +sudo make install +@end example + +@noindent +or... + +@example +su -c 'make install' +@end example + +If you don't have superuser privileges, then you need to configure +the installation directory to one that you can write to, and then +re-install. See @ref{Configuring target directories}. + + +@node Generating documentation +@subsection Generating documentation + + +@menu +* Documentation editor's edit/compile cycle:: +* Building documentation:: +* Saving time with CPU_COUNT:: +* AJAX search:: +* Installing documentation:: +* Building documentation without compiling:: +@end menu + + +@node Documentation editor's edit/compile cycle +@unnumberedsubsubsec Documentation editor's edit/compile cycle + +@itemize +@item +Initial documentation build: + +@example +make [-j@var{X}] +make [-j@var{X} CPU_COUNT=@var{X}] doc @emph{## can take an hour or more} +@end example + +@item +Edit/compile cycle: + +@example +@emph{## edit source files, then...} + +make [-j@var{X}] @emph{## needed if editing outside} + @emph{## Documentation/, but useful anyway} + @emph{## for finding Texinfo errors.} +touch Documentation/*te?? @emph{## bug workaround} +make [-j@var{X} CPU_COUNT=@var{X}] doc @emph{## usually faster than initial build.} +@end example + +@item +Reset: + +In some cases, it is possible to clean the compiled documentation +with @samp{make@tie{}doc-clean}, but this method is not guaranteed +to fix everything. Instead, we recommend that you delete your +@file{build/} directory, and begin compiling from scratch. Since +the documentation compile takes much longer than the +non-documentation compile, this does not increase the overall time +by a great deal. + +@end itemize + +@node Building documentation +@unnumberedsubsubsec Building documentation + +After a successful compile (using @command{make}), the +documentation can be built by issuing: + +@example +make doc +@end example + +The first time you run @command{make@tie{}doc}, the process can +easily take an hour or more. After that, @command{make@tie{}doc} +only makes changes to the pre-built documentation where needed, +so it may only take a minute or two to test changes if the +documentation is already built. + +If @command{make@tie{}doc} succeeds, the HTML documentation tree +is available in @file{out-www/offline-root/}, and can be browsed +locally. Various portions of the documentation can be found by +looking in @file{out/} and @file{out-www} subdirectories in other +places in the source tree, but these are only @emph{portions} of +the docs. Please do not complain about anything which is broken +in those places; the only complete set of documentation is in +@file{out-www/offline-root/} from the top of the source tree. + +Compilation of documentation in Info format with images can be +done separately by issuing: + +@example +make info +@end example + +@knownissues + +If source files have changed since the last documentation build, +output files that need to be rebuilt are normally rebuilt, even if +you do not run @code{make@tie{}doc-clean} first. However, build +dependencies in the documentation are so complex that some +newly-edited files may not be rebuilt as they should be; a +workaround is to @command{touch} the top source file for any +manual you've edited. For example, if you make changes to a file +in @file{notation/}, do: + +@example +touch Documentation/notation.tely +@end example + +@noindent +The top sources possibly affected by this are: + +@example +Documentation/extend.texi +Documentation/changes.tely +Documentation/contributor.texi +Documentation/essay.tely +Documentation/extending.tely +Documentation/learning.tely +Documentation/notation.tely +Documentation/snippets.tely +Documentation/usage.tely +Documentation/web.texi +@end example + +@noindent +You can @command{touch} all of them at once with: + +@example +touch Documentation/*te?? +@end example + +@noindent +However, this will rebuild all of the manuals +indiscriminately---it is more efficient to @command{touch} only +the affected files. + + +@node Saving time with CPU_COUNT +@unnumberedsubsubsec Saving time with @code{CPU_COUNT} + +The most time consuming task for building the documentation is +running LilyPond to build images of music, and there cannot be +several simultaneously running @command{lilypond-book} instances, +so the @option{-j} @command{make} option does not significantly +speed up the build process. To help speed it up, the makefile +variable @option{CPU_COUNT} may be set in @file{local.make} or on +the command line to the number of @code{.ly} files that LilyPond +should process simultaneously, e.g. on a bi-processor or dual core +machine: + +@example +make -j3 CPU_COUNT=3 doc +@end example + +@noindent +The recommended value of @option{CPU_COUNT} is one plus the number +of cores or processors, but it is advisable to set it to a smaller +value unless your system has enough RAM to run that many +simultaneous LilyPond instances. Also, values for the @option{-j} +option that pose problems with @samp{make} are less likely to pose +problems with @samp{make doc} (this applies to both @option{-j} +and @option{CPU_COUNT}). For example, with a quad-core processor, +it is possible for @samp{make -j5 CPU_COUNT=5 doc} to work +consistently even if @samp{make -j5} rarely succeeds. + + +@node AJAX search +@unnumberedsubsubsec AJAX search + +To build the documentation with interactive searching, use: + +@example +make doc AJAX_SEARCH=1 +@end example + +This requires PHP, and you must view the docs via a http +connection (you cannot view them on your local filesystem). + +@warning{Due to potential security or load issues, this option is +not enabled in the official documentation builds. Enable at your +own risk.} + + +@node Installing documentation +@unnumberedsubsubsec Installing documentation + +The HTML, PDF and if available Info files can be installed into +the standard documentation path by issuing + +@example +make install-doc +@end example + +@noindent +This also installs Info documentation with images if the +installation prefix is properly set; otherwise, instructions to +complete proper installation of Info documentation are printed on +standard output. + +To install the Info documentation separately, run: + +@example +make install-info +@end example + +@noindent +Note that to get the images in Info documentation, @code{install-doc} +target creates symbolic links to HTML and PDF installed documentation +tree in @file{@var{prefix}/share/info}, in order to save disk space, +whereas @code{install-info} copies images in +@file{@var{prefix}/share/info} subdirectories. + +It is possible to build a documentation tree in +@file{out-www/online-root/}, with special processing, so it can be +used on a website with content negotiation for automatic language +selection; this can be achieved by issuing + +@example +make WEB_TARGETS=online doc +@end example + +@noindent +and both @q{offline} and @q{online} targets can be generated by issuing + +@example +make WEB_TARGETS="offline online" doc +@end example + +Several targets are available to clean the documentation build and +help with maintaining documentation; an overview of these targets is +available with + +@example +make help +@end example + +@noindent +from every directory in the build tree. Most targets for +documentation maintenance are available from +@file{Documentation/}; for more information, see +@rcontrib{Documentation work}. + +The makefile variable @code{QUIET_BUILD} may be set to @code{1} +for a less verbose build output, just like for building the +programs. + + +@node Building documentation without compiling +@unnumberedsubsubsec Building documentation without compiling + + +The documentation can be built locally without compiling LilyPond +binary, if LilyPond is already installed on your system. + +From a fresh Git checkout, do + +@example +./autogen.sh # ignore any warning messages +cp GNUmakefile.in GNUmakefile +make -C scripts && make -C python +nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc +@end example + +Please note that this may break sometimes -- for example, if a new +feature is added with a test file in input/regression, even the latest +development release of LilyPond will fail to build the docs. + +You may build the manual without building all the @file{input/*} stuff +(i.e. mostly regression tests): change directory, for example to +@file{Documentation/}, issue @code{make doc}, which will build +documentation in a subdirectory @file{out-www} from the source files in +current directory. In this case, if you also want to browse the +documentation in its post-processed form, change back to top directory +and issue + +@example +make out=www WWW-post +@end example + +@knownissues + +You may also need to create a script for @command{pngtopnm} and +@code{pnmtopng}. On GNU/Linux, I use this: + +@verbatim +export LD_LIBRARY_PATH=/usr/lib +exec /usr/bin/pngtopnm "$@" +@end verbatim + +On MacOS X with fink, I use this: + +@verbatim +export DYLD_LIBRARY_PATH=/sw/lib +exec /sw/bin/pngtopnm "$@" +@end verbatim + +On MacOS X with macports, you should use this: + +@verbatim +export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib +exec /opt/local/bin/pngtopnm "$@" +@end verbatim + + +@node Testing LilyPond binary +@subsection Testing LilyPond binary + + +LilyPond comes with an extensive suite that exercises the entire +program. This suite can be used to test that the binary has +been built correctly. + +The test suite can be executed with: + +@verbatim +make test +@end verbatim + +If the test suite completes successfully, the LilyPond binary +has been verified. + +More information on the regression test suite is found at +@rcontrib{Regression tests}. + +@node Problems +@section Problems + +For help and questions use @email{lilypond-user@@gnu.org}. Send +bug reports to @email{bug-lilypond@@gnu.org}. + +Bugs that are not fault of LilyPond are documented here. + +@unnumberedsubsubsec Bison 1.875 + +There is a bug in bison-1.875: compilation fails with "parse error +before `goto'" in line 4922 due to a bug in bison. To fix, please +recompile bison 1.875 with the following fix + +@example +$ cd lily; make out/parser.cc +$ vi +4919 out/parser.cc +# append a semicolon to the line containing "__attribute__ ((__unused__)) +# save +$ make +@end example + + +@unnumberedsubsubsec Compiling on MacOS@tie{}X + +Here are special instructions for compiling under MacOS@tie{}X. +These instructions assume that dependencies are installed using +@uref{http://www.macports.org/, MacPorts.} The instructions have +been tested using OS X 10.5 (Leopard). + +First, install the relevant dependencies using MacPorts. + +Next, add the following to your relevant shell initialization +files. This is @code{~/.profile} by default. You should create +this file if it does not exist. + +@example +export PATH=/opt/local/bin:/opt/local/sbin:$PATH +export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:$DYLD_FALLBACK_LIBRARY_PATH +@end example + +Now you must edit the generated @file{config.make} file. Change + +@example +FLEXLEXER_FILE = /usr/include/FlexLexer.h +@end example + +@noindent +to: + +@example +FLEXLEXER_FILE = /opt/local/include/FlexLexer.h +@end example + +At this point, you should verify that you have the appropriate +fonts installed with your ghostscript installation. Check @code{ls +/opt/local/share/ghostscript/fonts} for: 'c0590*' files (.pfb, +.pfb and .afm). If you don't have them, run the following +commands to grab them from the ghostscript SVN server and install +them in the appropriate location: + +@example +svn export http://svn.ghostscript.com/ghostscript/tags/urw-fonts-1.0.7pre44/ +sudo mv urw-fonts-1.0.7pre44/* /opt/local/share/ghostscript/fonts/ +rm -rf urw-fonts-1.07pre44 +@end example + +Now run the @code{./configure} script. To avoid complications with +automatic font detection, add + +@example +--with-ncsb-dir=/opt/local/share/ghostscript/fonts +@end example + + +@unnumberedsubsubsec Solaris + +Solaris7, ./configure + +@file{./configure} needs a POSIX compliant shell. On Solaris7, +@file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash +is. Run configure like + +@example +CONFIG_SHELL=/bin/ksh ksh -c ./configure +@end example + +@noindent +or + +@example +CONFIG_SHELL=/bin/bash bash -c ./configure +@end example + +@unnumberedsubsubsec FreeBSD + +To use system fonts, dejaview must be installed. With the default +port, the fonts are installed in @file{usr/X11R6/lib/X11/fonts/dejavu}. + +Open the file @file{$LILYPONDBASE/usr/etc/fonts/local.conf} and add the +following line just after the @code{} line. (Adjust as necessary +for your hierarchy.) + +@example +/usr/X11R6/lib/X11/fonts +@end example + + +@unnumberedsubsubsec International fonts + +On Mac OS X, all fonts are installed by default. However, finding all +system fonts requires a bit of configuration; see +@uref{http://lists.gnu.org/archive/html/lilypond-user/2007-03/msg00472.html, +this post} on the @code{lilypond-user} mailing list. + +On Linux, international fonts are installed by different means on +every distribution. We cannot list the exact commands or packages +that are necessary, as each distribution is different, and the exact +package names within each distribution changes. Here are some +hints, though: + +@verbatim +Red Hat Fedora + + taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ + ttfonts-zh_CN fonts-ja fonts-hebrew + +Debian GNU/Linux + + apt-get install emacs-intl-fonts xfonts-intl-.* \ + ttf-kochi-gothic ttf-kochi-mincho \ + xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi +@end verbatim + + +@unnumberedsubsubsec Using lilypond python libraries + +If you want to use lilypond's python libraries (either running +certain build scripts manually, or using them in other programs), +set @code{PYTHONPATH} to @file{python/out} in your build +directory, or @file{.../usr/lib/lilypond/current/python} in the +installation directory structure. + + + + +@node Concurrent stable and development versions +@section Concurrent stable and development versions + + +It can be useful to have both the stable and the development versions +of Lilypond available at once. One way to do this on GNU/Linux is to +install the stable version using the precompiled binary, and run the +development version from the source tree. After running @command{make +all} from the top directory of the Lilypond source files, there will +be a binary called @code{lilypond} in the @code{out} directory: + +@example +<@var{path to}>/lilypond/out/bin/lilypond +@end example + +This binary can be run without actually doing the @code{make +install} command. The advantage to this is that you can have all +of the latest changes available after pulling from git and running +@code{make all}, without having to uninstall the old version and +reinstall the new. + +So, to use the stable version, install it as usual and use the +normal commands: + +@example +lilypond foobar.ly +@end example + +To use the development version, create a link to the binary in the +source tree by saving the following line in a file somewhere in your +@code{$PATH}: + +@example +exec <@var{path to}>/lilypond/out/bin/lilypond "$@@" +@end example + +Save it as @code{Lilypond} (with a capital L to distinguish it +from the stable @code{lilypond}), and make it executable: + +@example +chmod +x Lilypond +@end example + +Then you can invoke the development version this way: + +@example +Lilypond foobar.ly +@end example + + +TODO: ADD + +- other compilation tricks for developers + + +@node Build system +@section Build system + + +We currently use make and stepmake, which is complicated and only +used by us. Hopefully this will change in the future. + + +@subsubheading Version-specific texinfo macros + +@itemize + +@item +made with @command{scripts/build/create-version-itexi.py} and@* +@command{scripts/build/create-weblinks-itexi.py} + +@item +used extensively in the @code{WEBSITE_ONLY_BUILD} version of the +website (made with @file{website.make}, used on lilypond.org) + +@item +not (?) used in the main docs? + +@item +the numbers in VERSION file: MINOR_VERSION should be 1 more than +the last release, VERSION_DEVEL should be the last @strong{online} +release. Yes, VERSION_DEVEL is less than VERSION. + +@end itemize diff --git a/input/manual/display-predefined-fretboards.ly b/Documentation/included/display-predefined-fretboards.ly similarity index 85% rename from input/manual/display-predefined-fretboards.ly rename to Documentation/included/display-predefined-fretboards.ly index bf2283db3c..03d91d79d2 100644 --- a/input/manual/display-predefined-fretboards.ly +++ b/Documentation/included/display-predefined-fretboards.ly @@ -1,8 +1,8 @@ \include "predefined-guitar-fretboards.ly" -\version "2.12.0" +\version "2.14.0" -mychords = \chordmode {c1 c:m c:aug c:dim c:7 c:maj7 c:m7 \break } +mychords = \chordmode {c1 c:m c:aug c:dim c:dim7 c:7 c:maj7 c:m7 c:9 \break } chordsline = { \mychords @@ -56,6 +56,7 @@ chordsline = { } } +\score { << \context ChordNames { \chordsline @@ -67,3 +68,7 @@ chordsline = { \chordsline } >> + \layout { + indent = 0 + } +} diff --git a/Documentation/included/display-predefined-mandolin-fretboards.ly b/Documentation/included/display-predefined-mandolin-fretboards.ly new file mode 100644 index 0000000000..ab948f2215 --- /dev/null +++ b/Documentation/included/display-predefined-mandolin-fretboards.ly @@ -0,0 +1,74 @@ +\version "2.14.0" +\include "./predefined-mandolin-fretboards.ly" + + +mychords = \chordmode { + c1 c:m c:aug c:dim7 c:7 c:maj7 c:m7 c:m7.5- + c:6 c:sus2 c:sus4 c:9 + \break +} + +chordsline = { + \mychords + \transpose c cis { + \mychords + } + \transpose c des { + \mychords + } + \transpose c d { + \mychords + } + \transpose c dis { + \mychords + } + \transpose c ees { + \mychords + } + \transpose c e { + \mychords + } + \transpose c f { + \mychords + } + \transpose c fis { + \mychords + } + \transpose c ges { + \mychords + } + \transpose c g { + \mychords + } + \transpose c gis { + \mychords + } + \transpose c aes { + \mychords + } + \transpose c a { + \mychords + } + \transpose c ais { + \mychords + } + \transpose c bes { + \mychords + } + \transpose c b { + \mychords + } +} + +<< + \context ChordNames { + \chordsline + } + \context FretBoards { + \set stringTunings = #mandolin-tuning + \chordsline + } + \context Staff { + \chordsline + } +>> diff --git a/Documentation/included/display-predefined-string-tunings.ly b/Documentation/included/display-predefined-string-tunings.ly new file mode 100644 index 0000000000..6216fbe123 --- /dev/null +++ b/Documentation/included/display-predefined-string-tunings.ly @@ -0,0 +1,87 @@ +\version "2.14.0" + +#(define (filter-instrument instrument-name tuning-alist) + (filter (lambda (entry) + (string-prefix? instrument-name + (symbol->string (car entry)))) + tuning-alist)) + +#(define (chord-display tuning-alist-entry) + (let* ((ch-mus (cdr tuning-alist-entry)) + (tuning-symbol (car tuning-alist-entry)) + (ev-chord (car (extract-named-music + ch-mus + 'EventChord))) + (elts (ly:music-property ev-chord 'elements))) + (music-map (lambda (m) + (begin + (if (not (null? (ly:music-property m 'duration))) + (ly:music-set-property! + m + 'duration + (ly:make-duration 0 0 1 1))) + m)) + ev-chord) + (let ((elts (ly:music-property ev-chord 'elements)) + (script (make-music 'TextScriptEvent + 'direction 1 + 'text (symbol->string tuning-symbol)))) + (ly:music-set-property! + ev-chord + 'elements + (cons script elts))) + ev-chord)) + +displayInstrumentDefaultTunings = +#(define-music-function (parser location instrument) (string?) + (let* ((filtered-instruments (filter-instrument instrument defaultStringTunings)) + (display-elements (map chord-display filtered-instruments))) + (make-music 'SequentialMusic 'elements display-elements))) + + +\score { + { + \new Staff { + \textLengthOn + \override Score.RehearsalMark #'self-alignment-X = #LEFT + + \mark \markup {\left-align "Guitar tunings"} + \clef "treble_8" + \displayInstrumentDefaultTunings #"guitar" + \break + + \mark \markup {\left-align "Bass tunings"} + \clef "bass_8" + \displayInstrumentDefaultTunings #"bass" + \break + + \mark \markup {\left-align "Mandolin tunings"} + \clef "treble" + \displayInstrumentDefaultTunings #"mandolin" + \break + + \mark \markup {\left-align "Banjo tunings"} + \clef "treble_8" + \displayInstrumentDefaultTunings #"banjo" + \break + + \mark \markup {\left-align "Ukulele tunings"} + \clef "treble" + \displayInstrumentDefaultTunings #"ukulele" + \clef "alto" + \displayInstrumentDefaultTunings #"tenor-ukulele" + \displayInstrumentDefaultTunings #"baritone-ukulele" + \break + + \mark \markup {\left-align "Orchestral string tunings"} + \clef "treble" + \displayInstrumentDefaultTunings #"violin" + \clef "alto" + \displayInstrumentDefaultTunings #"viola" + \clef "bass" + \displayInstrumentDefaultTunings #"cello" + \clef "bass_8" + \displayInstrumentDefaultTunings #"double-bass" + } + } +} diff --git a/Documentation/included/display-predefined-ukulele-fretboards.ly b/Documentation/included/display-predefined-ukulele-fretboards.ly new file mode 100644 index 0000000000..f6acacdd6f --- /dev/null +++ b/Documentation/included/display-predefined-ukulele-fretboards.ly @@ -0,0 +1,74 @@ +\version "2.14.0" +\include "predefined-ukulele-fretboards.ly" + + +mychords = \chordmode { + c1 c:m c:aug c:dim c:7 c:maj7 c:m7 + c:6 c:sus2 c:sus4 c:9 + \break +} + +chordsline = { + \mychords + \transpose c cis { + \mychords + } + \transpose c des { + \mychords + } + \transpose c d { + \mychords + } + \transpose c dis { + \mychords + } + \transpose c ees { + \mychords + } + \transpose c e { + \mychords + } + \transpose c f { + \mychords + } + \transpose c fis { + \mychords + } + \transpose c ges { + \mychords + } + \transpose c g { + \mychords + } + \transpose c gis { + \mychords + } + \transpose c aes { + \mychords + } + \transpose c a { + \mychords + } + \transpose c ais { + \mychords + } + \transpose c bes { + \mychords + } + \transpose c b { + \mychords + } +} + +<< + \context ChordNames { + \chordsline + } + \context FretBoards { + \set stringTunings = #ukulele-tuning + \chordsline + } + \context Staff { + \chordsline + } +>> diff --git a/input/manual/engraver-example.ily b/Documentation/included/engraver-example.ily similarity index 100% rename from input/manual/engraver-example.ily rename to Documentation/included/engraver-example.ily diff --git a/Documentation/included/font-table.ly b/Documentation/included/font-table.ly new file mode 100644 index 0000000000..35b835cdd9 --- /dev/null +++ b/Documentation/included/font-table.ly @@ -0,0 +1,163 @@ +#(set-global-staff-size 16) + +#(begin + + ;; some helper functions + + (use-modules (ice-9 regex)) + + (define glyph-list + (delete ".notdef" + (ly:otf-glyph-list (ly:system-font-load "emmentaler-20")))) + + (define (get-group glyph-list regexp) + (let ((r (make-regexp regexp))) + (filter (lambda (token) (regexp-exec r token)) + glyph-list))) + + ;;;;;;;;; + + ;; extract ancient-music groups before extracting default + ;; accidentals, rests, etc. to prevent duplication + + ;; make sure "mensural" regexp doesn't match "neomensural" + (define neomensural (get-group glyph-list "^.*neomensural.*$")) + (define mensural + (filter (lambda (x) (not (member x neomensural))) + (get-group glyph-list "^.*mensural.*$"))) + + ;; get the rest of the ancient-music groups + (define vaticana (get-group glyph-list "^.*vaticana.*$")) + (define medicaea (get-group glyph-list "^.*medicaea.*$")) + (define hufnagel (get-group glyph-list "^.*hufnagel.*$")) + (define petrucci (get-group glyph-list "^.*petrucci.*$")) + (define solesmes (get-group glyph-list "^.*solesmes.*$")) + + ;; remove ancient-music groups from the glyph-list + (for-each + (lambda (x) (set! glyph-list (delete x glyph-list))) + (append vaticana + medicaea + hufnagel + mensural + neomensural + petrucci + solesmes)) + + ;; define all remaining groups + (define numbers + '("plus" "comma" "hyphen" "period" + "zero" "one" "two" "three" "four" + "five" "six" "seven" "eight" "nine")) + + (define dynamics + '("space" "f" "m" "p" "r" "s" "z")) + + (define default-noteheads + (get-group glyph-list + "^noteheads.[dsu]M?[012]$")) + + (define special-noteheads + (get-group glyph-list + "^noteheads.[dsu]M?[012](double|harmonic|diamond|cross|xcircle|triangle|slash)$")) + + (define shape-note-noteheads + (get-group glyph-list + "^noteheads.[dsu][012](do|re|mi|fa|sol|la|ti)(Thin|Mirror|Funk|Walker)*$")) + + (define clefs (get-group glyph-list "^clefs\\.")) + (define timesig (get-group glyph-list "^timesig\\.")) + (define accidentals (get-group glyph-list "^accidentals\\.")) + (define rests (get-group glyph-list "^rests\\.")) + (define flags (get-group glyph-list "^flags\\.")) + (define dots (get-group glyph-list "^dots\\.")) + (define scripts (get-group glyph-list "^scripts\\.")) + (define arrowheads (get-group glyph-list "^arrowheads\\.")) + (define brackettips (get-group glyph-list "^brackettips\\.")) + (define pedal (get-group glyph-list "^pedal\\.")) + (define accordion (get-group glyph-list "^accordion\\.")) + + ;; remove all remaining groups from the glyph-list + (for-each + (lambda (x) (set! glyph-list (delete x glyph-list))) + (append numbers + dynamics + default-noteheads + special-noteheads + shape-note-noteheads + clefs + timesig + accidentals + rests + flags + dots + scripts + arrowheads + brackettips + pedal + accordion)) + + ;;;;;;;;; + + ;; require all glyphs to appear here + (if (pair? glyph-list) ; glyph-list should be empty by now + (ly:error + (_ "Unlisted glyphs in Documentation/included/font-table.ly: ~A") + glyph-list)) + +) % end of (begin ...) + +\paper { + %% ugh. text on toplevel is a bit broken... + + oddHeaderMarkup = \markup {} + evenHeaderMarkup = \markup {} + oddFooterMarkup = \markup {} + evenFooterMarkup = \markup {} + } + +\version "2.14.0" + +#(define-markup-command (doc-char layout props name) (string?) + (interpret-markup layout props + (let* ((n (string-length name))) + (if (> n 24) + ;; split long glyph names near the middle at dots + (let* ((middle-pos (round (/ n 2))) + (left-dot-pos (string-rindex name #\. 0 middle-pos)) + (right-dot-pos (string-index name #\. middle-pos)) + (left-distance (if (number? left-dot-pos) + (- middle-pos left-dot-pos) + middle-pos)) + (right-distance (if (number? right-dot-pos) + (- right-dot-pos middle-pos) + middle-pos)) + (split-pos (if (> left-distance right-distance) + right-dot-pos + left-dot-pos)) + (left (substring name 0 split-pos)) + (right (substring name split-pos))) + (markup + #:pad-to-box '(0 . 36) '(-2 . 2) #:column (#:typewriter left + #:typewriter #:concat (" " right)) + #:pad-to-box '(-2 . 4) '(-3.5 . 3.5) #:huge #:musicglyph name)) + (markup + #:pad-to-box '(0 . 36) '(-2 . 2) #:typewriter name + #:pad-to-box '(-2 . 4) '(-3.5 . 3.5) #:huge #:musicglyph name))))) + +#(define-markup-list-command (doc-chars layout props names) (list?) + (define (min-length lst n) + "(min (length lst) n)" + (if (or (null? lst) (<= n 0)) + 0 + (1+ (min-length (cdr lst) (1- n))))) + (define (doc-chars-aux names acc) + (let* ((n (min-length names 2)) + (head (take names n)) + (tail (drop names n))) + (if (null? head) + (reverse! acc) + (doc-chars-aux tail + (cons (make-line-markup (map make-doc-char-markup head)) + acc))))) + (interpret-markup-list layout props (doc-chars-aux names (list)))) diff --git a/Documentation/included/generating-output.itexi b/Documentation/included/generating-output.itexi new file mode 100644 index 0000000000..86827e474a --- /dev/null +++ b/Documentation/included/generating-output.itexi @@ -0,0 +1,221 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of web/download.itexi and +@c learning/tutorial.itely + +@c This is about "compiling" a lilypond file +@c (Learning 1 Tutorial), **not** compiling the +@c source code. + +@macro lilypadOSX +@warning{These instructions assume that you are using the LilyPond +application. If you are using any of the programs described in +@rweb{Easier editing}, please consult the documentation for +those programs if you have any problems.} + + +@subsubheading Step 1. Create your @file{.ly} file + +Double click the @command{LilyPond.app}, an example file will open. + +@sourceimage{Learning_Macos_welcome,,,} + +From the menus along the top left of your screen, select +@w{@code{File > Save}}. + +@sourceimage{Learning_Macos_Save_menu,,,} + +Choose a name for your file, for example @file{test.ly}. + +@sourceimage{Learning_Macos_Save_file_with_name,,,} + + +@subsubheading Step 2. Compile (with LilyPad) + +From the same menus, select +@w{@code{Compile > Typeset}}. + +@sourceimage{Learning_Macos_Typeset_menu,,,} + +A new window will open showing a progress log of the compilation +of the file you have just saved. + +@sourceimage{Learning_Macos_Compiling_log,,,} + + +@subsubheading Step 3. View output + +Once the compilation has finished, a PDF file will be created with +the same name as the original file and will be automatically +opened in the default PDF viewer and displayed on your screen. + +@sourceimage{Learning_Macos_pdf_output,,,} + + +@subsubheading Other commands + +To create new files for LilyPond, begin by selecting +@w{@code{File > New}} + +@sourceimage{Learning_Macos_New_menu,,,} + +or @w{@code{File > Open}} to open and edit existing files you have +saved previously. + +@sourceimage{Learning_Macos_Open_menu,,,} + +You must save any new edits you make to your file before you +@w{@code{Compile > Typeset}} and if the PDF file is not displayed +check the window with the progress log for any errors. + +If you are not using the default Preview PDF viewer that comes +with the Mac Operating system and you have the PDF file generated +from a previous compilation open, then any further compilations +may fail to generate an update PDF until you close the original. + + + +@end macro + + +@macro lilypadWindows +@warning{These instructions assume that you are using the built-in +LilyPad editor. If you are using any of the programs described in +@rweb{Easier editing}, please consult the documentation for +those programs if you have any problems compiling a file.} + + +@subsubheading Step 1. Create your @file{.ly} file + +Double-click the LilyPond icon on your desktop, an example file will open. + +@sourceimage{Learning_Win7_Welcome_File_Whole,,,} + +From the menus that appear along the top of the example file, +select @w{@code{File > Save as}}. Do not use the @w{@code{File > Save}} +for the example file as this will not work until you have given it a +valid LilyPond file name. + +@sourceimage{Learning_Win7_Save_Menu,,,} + +Choose a name for your file, for example @file{test.ly}. + +@sourceimage{Learning_Win7_Save_File_With_Name,,,} + + +@subsubheading Step 2a. Compile (with drag-and-drop) + +Depending on what you prefer, to compile your file either: + +Drag-and-drop the file directly onto the LilyPond icon. + +@sourceimage{Learning_Win7_Open_Dragndrop,,,} + +Right-click on the file and from the pop-up context menu choose +@w{@code{Open with > LilyPond}}. + +@sourceimage{Learning_Win7_Open_Context_Menu,,,} + + +@subsubheading Step 2b. Compile (with double-clicking) + +Or simply double-click the @file{test.ly}. + + +@subsubheading Step 3. View output + +During the compilation of the @file{test.ly} file, a command window +will, very briefly open and then close. Three additional files will +have been created during this process. + +@sourceimage{Learning_Win7_All_Files_Created,,,} + +The PDF file contains the engraved @file{test.ly} file. + +@sourceimage{Learning_Win7_Pdf_Output,,,} + + +@subsubheading Other commands + +To create a new file, begin by selecting @w{@code{File > New}} from +within any previously created file. + +@sourceimage{Learning_Win7_New_Menu,,,} + +@noindent +or @w{@code{File > Open}} to open and edit any files you have saved +before. + +@sourceimage{Learning_Win7_Open_Menu,,,} + +You must save any new edits you make before you compile it and if the +PDF file is not created, check the log file that will have been created +during the compilation attempt, for any errors. + +@sourceimage{Learning_Win7_Log_File,,,} + +This log file is overwritten each time you compile your LilyPond file. + +The PS file is used internally by LilyPond to create the PDF file and +can be ignored. It also gets overwritten each time you compile your +file. + +If you are viewing your file in a PDF viewer, then you must close the +PDF if you wish to make a new compilation as it may fail to create +the new PDF while it is still being viewed. + + +@end macro + + +@c not lilypad at all, but I ran out of names. :( +@macro lilypadCommandLine +@warning{These instructions assume that you are familiar with +command-line programs. If you are using any of the programs +described in @rweb{Easier editing}, please consult the +documentation for those programs if you have any problems +compiling a file.} + + +@subsubheading Step 1. Create your @file{.ly} file + +Create a text file called @file{test.ly} and enter: + +@c double \\ required because this is inside a macro! +@example +\\version "@w{@versionStable{}}" +@{ + c' e' g' e' +@} +@end example + + +@subsubheading Step 2. Compile (with command-line) + +To process @file{test.ly}, type the following at the command prompt: + +@example +lilypond test.ly +@end example + +@noindent +You will see something resembling: + +@example +GNU LilyPond @w{@versionStable{}} +Processing `test.ly' +Parsing... +Interpreting music... +Preprocessing graphical objects... +Solving 1 page-breaking chunks...[1: 1 pages] +Drawing systems... +Layout output to `test.ps'... +Converting to `./test.pdf'... +@end example + +@subsubheading Step 3. View output + +You may view or print the resulting @file{test.pdf}. + +@end macro + + diff --git a/Documentation/included/gonville.ly b/Documentation/included/gonville.ly new file mode 100644 index 0000000000..8878819083 --- /dev/null +++ b/Documentation/included/gonville.ly @@ -0,0 +1,62 @@ +\header { + + texidoc = "Use an alternative music font (gonville). To use this, +put gonville-20.otf and gonville-brace.otf in a directory where +lilypond can find them (use the --include option to extend the search +path)." + +} + +\version "2.14.0" + +\paper { + myStaffSize = 20 + + %% bogus statement, because myStaffSize must be assigned before + %% the scheme statement starts parsing. + bogus = 42 + + #(add-music-fonts fonts "gonville" 'gonville '((20 . 20.0)) + (/ myStaffSize 20)) +} + +sampleMusic = \relative c'' { + a4-\trill_\sfz b8 c16 d32 +} + + +{ + \set Staff.instrumentName = #"Default" + \sampleMusic +} + +\score { + { + \set Staff.instrumentName = #"Feta" + \sampleMusic + } + \layout { + #(define font-defaults + '((font-family . feta) (font-encoding . fetaMusic))) + } +} + +\score { + \relative c'' { + \set Staff.instrumentName = #"Gonv" + \sampleMusic + } + \layout { + #(define font-defaults + '((font-family . gonville) (font-encoding . fetaMusic))) + } +} + +\relative c'' +{ + \set Staff.instrumentName = #"Gonv override" + c2^\trill c + \override NoteHead #'font-family = #'gonville + \override Script #'font-family = #'gonville + c^\trill c +} diff --git a/Documentation/included/helpus.itexi b/Documentation/included/helpus.itexi new file mode 100644 index 0000000000..22ab4ea4fe --- /dev/null +++ b/Documentation/included/helpus.itexi @@ -0,0 +1,138 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of web/community.itexi and +@c contributor/introduction.itely + +@macro helpusNeed +@subheading We need you! + +The LilyPond development team is quite small; we really want to +get more people involved. Please consider helping your fellow +LilyPond users by contributing! + +Even working on small tasks can have a big impact: taking care of +them allows experienced developers work on advanced tasks, instead +of spending time on those simple tasks. + +@end macro + + +@macro helpusTasks +@subheading Simple tasks + +No source code or compiling required! + +@itemize +@item +Mailing list support: answer questions from fellow users. + +@item +Bug reporting: help users create proper @rweb{Bug reports}, and/or +join the Bug Squad to organize @rcontrib{Issues}. + +@item +Documentation: small changes can be proposed by following the +guidelines for @rcontrib{Documentation suggestions}. + +@item +LilyPond Snippet Repository (LSR): create and fix snippets +following the guidelines in +@rcontrib{Adding and editing snippets}. + +@item +Discussions, reviews, and testing: the developers often ask for +feedback about new documentation, potential syntax changes, and +testing new features. Please contribute to these discussions! + +@end itemize + +@subheading Advanced tasks + +These jobs generally require that you have the source code and can +compile LilyPond. + +@warning{We suggest that contributors using Windows or MacOS X do +@strong{not} attempt to set up their own development environment; +instead, use Lilydev as discussed in @rcontrib{Quick start}.} + +Contributors using Linux or FreeBSD may also use Lilydev, but if +they prefer their own development environment, they should read +@rcontrib{Working with source code}, and @rcontrib{Compiling}. + +@itemize +@item +Documentation: for large changes, see +@rcontrib{Documentation work}. + +@item +Website: the website is built from the normal documentation +source. See the info about documentation, and also +@rcontrib{Website work}. + +@item +Translations: see @rcontrib{Translating the documentation}, and +@rcontrib{Translating the website}. + +@item +Bugfixes or new features: the best way to begin is to join the +Frogs, and read @rcontrib{Programming work}. + +@end itemize + +@end macro + + +@macro helpusProjects +@subheading Projects + +@subsubheading Frogs + +Website and mailing list: + +@example +@uref{http://frogs.lilynet.net} +@end example + +The Frogs are ordinary LilyPond users who have chosen to get +involved in their favorite software's development. Fixing bugs, +implementing new features, documenting the source code: there's a +lot to be done, but most importantly: this is a chance for +everyone to learn more about LilyPond, about Free Software, about +programming... and to have fun. If you're curious about any of +it, then the word is: @emph{Join the Frogs!} + + + +@subsubheading Grand LilyPond Input Syntax Standardization + +Website: +@rcontrib{Grand LilyPond Input Syntax Standardization (GLISS)}. + +GLISS will stabilize the (non-tweak) input syntax for the upcoming +LilyPond 3.0. After updating to 3.0, the input syntax for +untweaked music will remain stable for the foreseeable future. + +We will have an extensive discussion period to determine the final +input specification. + +@warning{GLISS will start shortly after 2.14 is released.} + +@subsubheading Grand Organizing Project + +Website: @rcontrib{Grand Organization Project (GOP)}. + +GOP will be our big recruiting drive for new contributors. We +desperately need to spread the development duties (including +@qq{simple tasks} which require no programming or interaction with +source code!) over more people. We also need to document +knowledge from existing developers so that it does not get lost. + +Unlike most @qq{Grand Projects}, GOP is not about adding huge new +features or completely redesigning things. Rather, it is aimed at +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 + + diff --git a/input/manual/note-head-style.ly b/Documentation/included/note-head-style.ly similarity index 94% rename from input/manual/note-head-style.ly rename to Documentation/included/note-head-style.ly index 98d33a27f5..471b79d9ee 100644 --- a/input/manual/note-head-style.ly +++ b/Documentation/included/note-head-style.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Note head shapes may be set from several choices. @@ -35,62 +35,66 @@ pattern = << s1*0^\markup { "default" } \pattern - \override Staff.NoteHead #'style = #'baroque - s1*0^\markup { "baroque" } + \override Staff.NoteHead #'style = #'altdefault + s1*0^\markup { "altdefault" } \pattern \break + \override Staff.NoteHead #'style = #'baroque + s1*0^\markup { "baroque" } + \pattern + \override Staff.NoteHead #'style = #'neomensural s1*0^\markup { "neomensural" } \pattern + \break + \override Staff.NoteHead #'style = #'mensural s1*0^\markup { "mensural" } \pattern - \break - \override Staff.NoteHead #'style = #'petrucci s1*0^\markup { "petrucci" } \pattern + \break + \override Staff.NoteHead #'style = #'harmonic s1*0^\markup { "harmonic" } \pattern - \break - \override Staff.NoteHead #'style = #'harmonic-black s1*0^\markup { "harmonic-black" } \pattern + \break + \override Staff.NoteHead #'style = #'harmonic-mixed s1*0^\markup { "harmonic-mixed" } \pattern - \break - \override Staff.NoteHead #'style = #'diamond s1*0^\markup { "diamond" } \pattern + \break + \override Staff.NoteHead #'style = #'cross s1*0^\markup { "cross" } \pattern - \break - \override Staff.NoteHead #'style = #'xcircle s1*0^\markup { "xcircle" } \pattern + \break + \override Staff.NoteHead #'style = #'triangle s1*0^\markup { "triangle" } \pattern - \break - \override Staff.NoteHead #'style = #'slash s1*0^\markup { "slash" } \pattern diff --git a/input/manual/percussion-chart.ly b/Documentation/included/percussion-chart.ly similarity index 95% rename from input/manual/percussion-chart.ly rename to Documentation/included/percussion-chart.ly index cdbc6d7883..666ccd1a26 100644 --- a/input/manual/percussion-chart.ly +++ b/Documentation/included/percussion-chart.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" % yes, I know this is a mess. But I'm not going to fuss with % it one day before I leave. -gp @@ -13,9 +13,8 @@ This chart shows all percussion and drum notes." myBreak = { \bar " " \break } -\new Score \with { - \remove "Bar_number_engraver" -} \new DrumStaff \with { +\score { + \new DrumStaff \with { \remove "Time_signature_engraver" } \context DrumVoice { @@ -64,5 +63,12 @@ trim ^"mutetriangle: trim" tri ^"triangle: tri" trio ^"opentriangle: trio" \ ua ^"oneup: ua" ub ^"twoup: ub" uc ^"threeup: uc" ud ^"fourup: ud" ue ^"fiveup: ue" \myBreak da ^"onedown: da" db ^"twodown: db" dc ^"threedown: dc" dd ^"fourdown: dd" de ^"fivedown: de" \myBreak } +} + \layout { + \context { + \Score + \remove "Bar_number_engraver" + } + } } diff --git a/Documentation/included/script-chart.ly b/Documentation/included/script-chart.ly new file mode 100644 index 0000000000..c30def0cb5 --- /dev/null +++ b/Documentation/included/script-chart.ly @@ -0,0 +1,194 @@ +\version "2.14.0" + +\header { + texidoc ="@cindex Feta scripts +This chart shows all articulations, or scripts, that the feta font contains. +" +} + +#(begin + + (define script-list (map car default-script-alist)) + + (define ignore + '("comma" + "varcomma")) + + (define ancient + '("ictus" + "accentus" + "circulus" + "semicirculus" + "signumcongruentiae")) + + (define articulations + '("accent" + "espressivo" + "marcato" + "portato" + "staccatissimo" + "staccato" + "tenuto")) + + (define ornaments + '("prall" + "mordent" + "prallmordent" + "turn" + "upprall" + "downprall" + "upmordent" + "downmordent" + "lineprall" + "prallprall" + "pralldown" + "prallup" + "reverseturn" + "trill")) + + (define instrument-specific + '("upbow" + "downbow" + "flageolet" + "thumb" + "snappizzicato" + "open" + "halfopen" + "stopped" + "lheel" + "rheel" + "ltoe" + "rtoe")) + + (define fermatas + '("shortfermata" + "fermata" + "longfermata" + "verylongfermata")) + + (define repeats + '("segno" + "coda" + "varcoda")) + + + ;; remove all remaining groups from the script-list + (for-each + (lambda (x) (set! script-list (delete x script-list))) + (append ignore + ancient + articulations + ornaments + instrument-specific + fermatas + repeats)) + + ;; require all scripts to appear here + (if (pair? script-list) ; script-list should be empty by now + (ly:error + (_ "Unlisted scripts in Documentation/included/script-chart.ly: ~A") + script-list)) + + + ;;;;;;; functions to generate the tables + + ;;; notes + + (define (make-script-note script) + (make-event-chord + (list (make-music + 'NoteEvent + 'duration + (ly:make-duration 2 0 1 1) + 'pitch + (ly:make-pitch 0 0 0)) + (make-music + 'ArticulationEvent + 'direction + ;; everything goes up except "ictus" + (if (string=? script "ictus") -1 1) + 'articulation-type + script)))) + + (define (make-script-notes scripts) + (make-sequential-music + (map make-script-note scripts))) + + (define (make-scripts-voice-context scripts) + (let ((music (make-script-notes scripts))) + (context-spec-music music 'Voice "voiceA"))) + + (define (make-scripts-vaticana-context scripts) + (let ((music (make-script-notes scripts))) + (context-spec-music music 'VaticanaVoice "voiceA"))) + + + ;;; lyrics + + (define (make-script-lyric script) + (make-event-chord + (list (make-music + 'LyricEvent + 'duration + (ly:make-duration 2 0 1 1) + 'text + script)))) + + (define (make-script-lyrics scripts) + (make-sequential-music + (map make-script-lyric scripts))) + + (define (make-scripts-lyrics-context scripts) + (let ((music (make-script-lyrics scripts))) + (context-spec-music music 'Lyrics "voiceA"))) + + + ;;; combining notes and lyrics + + (define (make-scripts-staff scripts) + (make-simultaneous-music + (list (make-scripts-voice-context scripts) + (make-scripts-lyrics-context scripts)))) + + (define (make-scripts-staff-ancient scripts) + (make-simultaneous-music + (list (make-scripts-vaticana-context scripts) + (make-scripts-lyrics-context scripts)))) + +) % end of (begin ...) + +\layout { + line-width = 5.1\in + indent = 0.0\mm + \context { + \Score + timing = ##f + barAlways = ##t + \override NonMusicalPaperColumn #'padding = #2.5 + \override PaperColumn #'keep-inside-line = ##t + } + \context { + \RhythmicStaff + \remove "Time_signature_engraver" + \override BarLine #'transparent = ##t + \override Stem #'direction = #down + } + \context { + \Lyrics + \override LyricText #'font-family = #'typewriter + \override LyricText #'font-shape = #'upright + } + \context { + \VaticanaVoice + \override Script #'padding = #0 + } +} + + +scriptStaff = +#(define-music-function (parser location scripts) (list?) + (make-scripts-staff scripts)) + +scriptStaffAncient = +#(define-music-function (parser location scripts) (list?) + (make-scripts-staff-ancient scripts)) diff --git a/input/simple.ly b/Documentation/included/simple.ly similarity index 89% rename from input/simple.ly rename to Documentation/included/simple.ly index 0ce4bf40af..a2390859cc 100644 --- a/input/simple.ly +++ b/Documentation/included/simple.ly @@ -4,4 +4,4 @@ } %% Optional helper for automatic updating by convert-ly. May be omitted. -\version "2.12.0" +\version "2.14.0" diff --git a/Documentation/index.html.in b/Documentation/index.html.in deleted file mode 100644 index 9836f53491..0000000000 --- a/Documentation/index.html.in +++ /dev/null @@ -1,146 +0,0 @@ - - - - LilyPond @TOPLEVEL_VERSION@ documentation - - - - - - -
-

LilyPond documentation

-
- -
-

- Version @TOPLEVEL_VERSION@ -
- @DATE@ -

-
- - - - - - - - - - - - - - - - - - -

- All the documentation you read from this page is available for download. - Download - the tarball. -

-

- Like every HTML page in this documentation, you can find at - bottom links to translations of this page in - other languages. -

- - diff --git a/Documentation/it/GNUmakefile b/Documentation/it/GNUmakefile new file mode 100644 index 0000000000..df35c4cf1b --- /dev/null +++ b/Documentation/it/GNUmakefile @@ -0,0 +1,9 @@ +ISOLANG = it +depth = ../.. +SUBDIRS = learning texidocs web usage +STEPMAKE_TEMPLATES = documentation +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root + +EXTRA_DIST_FILES = web.texi + +include $(depth)/make/stepmake.make diff --git a/Documentation/it/learning.tely b/Documentation/it/learning.tely new file mode 100644 index 0000000000..8506e46951 --- /dev/null +++ b/Documentation/it/learning.tely @@ -0,0 +1,86 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*- +@c This file is part of lilypond-learning.tely +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore +@setfilename lilypond-learning.info +@settitle Manuale di apprendimento di LilyPond +@documentencoding UTF-8 +@documentlanguage it +@afourpaper + +@macro manualIntro +Questo file fornisce un'introduzione alla versione di LilyPond +@version{}. +@end macro + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 by the authors. +@end macro + +@set FDL +@include macros.itexi + + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Learning Manual of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Italian +@end ignore + +@c Translators: Federico Bruni +@c Translation checkers: Luca Rossetto Casel + +@lilyTitlePage{Learning Manual} + +@c TOC -- non-tex +@ifnottex + +@menu +* Tutorial:: Le basi della composizione tipografica in LilyPond. +* Notazione comunemente utilizzata:: Come si scrive la notazione più comunemente utilizzata. +* Concetti fondamentali:: Concetti di base necessari per leggere gli altri manuali. +* Tweaking output:: Introduzione alla modifica dell'output. + +Appendici + +* Modelli:: Modelli già pronti. +* GNU Free Documentation License:: Licenza di questo documento. +* Indice di LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@c TOC - tex +@contents + +@allowcodebreaks false + +@c INCLUDES + +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely + +@include learning/templates.itely +@include fdl.itexi + +@node Indice di LilyPond +@appendix Indice di LilyPond +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/it/learning/GNUmakefile b/Documentation/it/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/it/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/it/learning/common-notation.itely b/Documentation/it/learning/common-notation.itely new file mode 100644 index 0000000000..6f73613190 --- /dev/null +++ b/Documentation/it/learning/common-notation.itely @@ -0,0 +1,1458 @@ +@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" + +@ignore +Tutorial guidelines: (different from policy.txt!) +- unless you have a really good reason, use either + @lilypond[verbatim,quote] + or + @lilypond[verbatim,quote,relative=2] + + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "es". I know it's not + correct Dutch naming, but let's not confuse people with this + until we get to the Basic notation chapter. + +- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant + portions of the tutorial. + +@end ignore + +@node Notazione comunemente utilizzata +@chapter Notazione comunemente utilizzata +@translationof Common notation + +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:: +* Note simultanee:: +* Canzoni:: +* Ritocchi finali:: +@end menu + + +@node Notazione su un solo pentagramma +@section Notazione su un solo pentagramma +@translationof Single staff notation + +Questa sezione presenta la notazione comunemente usata per una singola voce su +un solo pentagramma. + +@menu +* Controlli di battuta:: +* Alterazioni e armature di chiave:: +* Legature di valore e di portamento:: +* Articolazione e dinamica:: +* Aggiungere il testo:: +* Code automatiche e manuali:: +* Comandi di tempo avanzati:: +@end menu + +@node Controlli di battuta +@subsection Controlli di battuta +@translationof Bar checks + +I @emph{controlli di battuta}, pur se non strettamente necessari, dovrebbero +essere usati nel codice di input per mostrare dove si vuole che cadano le +stanghette. Vengono inseriti col simbolo della barra verticale, @code{|}. +Grazie ai controlli di battuta, il programma può verificare che tu abbia inserito +delle durate che facciano sì che ogni misura raggiunga la giusta +durata. I controlli di battuta rendono anche il codice di input più +facile da leggere, perché aiutano a tenere tutto in ordine. + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +Guida alla notazione: +@ruser{Bar and bar number checks}. + +@node Alterazioni e armature di chiave +@subsection Alterazioni e armature di chiave +@translationof Accidentals and key signatures + +@warning{I nuovi utenti sono spesso confusi riguardo a questi concetti -- leggi +il messaggio di avviso in fondo a questa pagina, soprattutto se non hai +una buona conoscenza della teoria musicale!} + +@subheading Alterazioni + +@cindex alterazioni, accidenti +@cindex alterazioni e armature di chiave +@cindex diesis +@cindex doppio diesis +@cindex diesis, doppio +@cindex bemolle +@cindex doppio bemolle +@cindex bemolle, doppio + +@funindex es +@funindex is +@funindex eses +@funindex isis + +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 +immaginare, un @notation{doppio diesis} o un @notation{doppio bemolle} +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{Note names in other languages}. + +@lilypond[verbatim,quote,relative=2] +cis4 ees fisis, aeses +@end lilypond + +@cindex armatura di chiave, impostare +@subheading Armature di chiave + +@cindex armatura di chiave +@cindex maggiore +@cindex minore +@cindex alterazioni e armature di chiave +@cindex contenuto vs. layout +@cindex layout vs. contenuto + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex 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} +seguito da un'altezza e da @code{\major} o @code{\minor}. + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 | +\key c \minor +a1 | +@end lilypond + +@smallspace + +@subheading Attenzione: armature di chiave e altezze + +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 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{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 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 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. + +In questo esempio: + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +Nessuna nota ha un'alterazione rispetto all'armatura di chiave, ma devi comunque aggiungere +@code{is} e scrivere @code{cis} e @code{fis} nel file di input. + +Il codice @code{b} non significa @qq{stampa un punto nero esattamente +nella linea centrale del pentagramma.} Piuttosto, significa @qq{c'è una +nota con altezza Si-bequadro.} Nella tonalità di La bemolle maggiore, +@emph{deve} avere un'alterazione: + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +Se l'esempio precedente sembra poco chiaro, considera questo: se tu stessi +suonando un pianoforte, quale tasto premeresti? Se premi un tasto nero, +allora @emph{devi} aggiungere @code{-is} o @code{-es} al nome della +nota! + +Aggiungere esplicitamente tutte le alterazioni richiederà un po' più +di lavoro in fase di scrittura, ma il vantaggio è che la +@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{Automatic accidentals}. + + +@seealso +Guida alla notazione: +@ruser{Note names in other languages}, +@ruser{Accidentals}, +@ruser{Automatic accidentals}, +@ruser{Key signature}. + + + +@node Legature di valore e di portamento +@subsection Legature di valore e di portamento +@translationof Ties and slurs + +@cindex legatura di valore +@cindex legatura di portamento +@cindex legatura di portamento, fraseggio +@cindex legatura di fraseggio + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + +@subheading Legature di valore + + +Glossario musicale: @rglosnamed{tie,legatura di valore}. + +Una @notation{legatura di valore} si ottiene apponendo una tilde @code{~} alla +prima nota della legatura. + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4~ c8 a~ a2 | +@end lilypond + +@subheading Legature di portamento + + +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 +@code{(} e @code{)}. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@subheading Legature di frase + +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 +stesso tempo sia le @notation{legature di portamento} sia le legature di +frase, ma non si possono avere simultaneamente diverse legature di portamento, +o diverse legature di frase. + +@lilypond[verbatim,quote,relative=2] +a8(\( ais b c) cis2 b'2 a4 cis,\) +@end lilypond + +@smallspace + +@cindex legature di portamento vs. legature di valore +@subheading Attenzione: legature di portamento vs. legature di valore + +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 +di valore rende semplicemente la nota più lunga, e può essere usata +solo con coppie di note della stessa altezza. Le legature di portamento +indicano l'@notation{articolazione} delle note, e possono essere usate +con ampi gruppi di note. Legature di valore e legature di portamento +possono essere annidate le une dentro le altre. + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + + +@seealso +Guida alla notazione: +@ruser{Ties}, +@ruser{Slurs}, +@ruser{Phrasing slurs}. + + +@node Articolazione e dinamica +@subsection Articolazione e dinamica +@translationof Articulation and dynamics + +@subheading Articolazioni + +@cindex articolazione +@cindex accento +@cindex staccato + +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: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +@subheading Diteggiature + +@cindex diteggiatura + +@funindex ^ +@funindex _ + +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 +vuole visualizzare: + +@lilypond[verbatim,quote,relative=2] +c4-3 e-5 b-2 a-1 +@end lilypond + +Articolazioni e diteggiature solitamente sono posizionate verticalmente in automatico, ma +si può specificarne la direzione sostituendo la lineetta (@code{-}) con +@code{^} (su) o @code{_} (giù). Si possono usare anche articolazioni +multiple sulla stessa nota. Tuttavia, nella maggior parte dei casi è +meglio lasciare che sia LilyPond a determinare le direzioni delle articolazioni. + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Dinamica + +@cindex dinamica +@cindex decrescendo +@cindex crescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Glossario musicale: @rglosnamed{dynamics,dinamica}, @rglos{crescendo}, +@rglos{decrescendo}. + +I segni di @notation{dinamica} si ottengono aggiungendo alla nota +i simboli (preceduti da un segno di barra invertita, o backslash): + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + + +@notation{Crescendi} e @notation{decrescendi} iniziano coi +comandi @code{\<} e @code{\>}. Il seguente segno di dinamica, ad +esempio @code{\ff}, terminerà il (de)crescendo, oppure può essere usato +il comando @code{\!}: + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +Guida alla notazione: +@ruser{Articulations and ornamentations}, +@ruser{Fingering instructions}, +@ruser{Dynamics}. + + +@node Aggiungere il testo +@subsection Aggiungere il testo +@translationof Adding text + +@cindex testo, aggiungere +@cindex aggiungere testo +@cindex markup + +@funindex \markup +@funindex markup + +Puoi aggiungere del testo nei tuoi spartiti: + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +Per aggiungere delle formattazioni puoi usare il comando @code{\markup}: + +@lilypond[verbatim,quote,relative=2] +c2^\markup{ \bold espr} +a2_\markup{ + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Guida alla notazione: +@ruser{Writing text}. + + +@node Code automatiche e manuali +@subsection Code automatiche e manuali +@translationof Automatic and manual beams + +@cindex raggruppamento +@cindex code automatiche +@cindex code manuali +@cindex code, automatiche +@cindex code, manuali +@cindex code, a mano + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Glossario musicale: @rglosnamed{beam,travatura}. + +Tutte le @notation{travature} vengono disegnate automaticamente: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@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{]}. + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +Se desideri disattivare il raggruppamento automatico, interamente o +per un'ampia sezione del brano, usa il comando @code{\autoBeamOff} +per disattivare il raggruppamento automatico e @code{\autoBeamOn} per +riattivarlo. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +Guida alla notazione: +@ruser{Automatic beams}, +@ruser{Manual beams}. + + +@node Comandi di tempo avanzati +@subsection Comandi di tempo avanzati +@translationof Advanced rhythmic commands + +@subheading Battuta parziale + +@cindex anacrusi +@cindex battuta parziale + +@funindex \partial +@funindex partial + +Glossario musicale: @rglos{anacrusis}. + +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. + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + +@subheading Gruppi irregolari + +@cindex gruppi irregolari +@cindex terzine + +@funindex \times +@funindex times + +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 +di musica. La durata del frammento viene moltiplicata per la frazione. +Le terzine fanno sì che le note occupino 2/3 della loro durata, quindi +una @notation{terzina} ha 2/3 come frazione: + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Abbellimenti + +@cindex abbellimenti +@cindex acciaccatura +@cindex appoggiatura + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Glossario musicale: @rglosnamed{grace notes,abbellimenti}, @rglos{acciaccatura}, +@rglos{appoggiatura}. + +Gli @notation{abbellimenti} sono creati col comando @code{\grace}, +ma possono essere creati anche ponendo davanti a un'espressione +musicale le parole chiave @code{\appoggiatura} o @code{\acciaccatura}: + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +Guida alla notazione: +@ruser{Grace notes}, +@ruser{Tuplets}, +@ruser{Upbeats}. + + +@node Note simultanee +@section Note simultanee +@translationof Multiple notes at once + +Questa sezione spiega come inserire più note simultanee: molteplici +strumenti, molteplici righi di pentagramma per un singolo strumento +(es: piano), e accordi. + +In musica per polifonia si intende la presenza di più di una voce +in un brano. In LilyPond per polifonia si intende la presenza di +più di una voce sullo stesso pentagramma. + +@menu +* Espressioni musicali:: +* Righi multipli:: +* Gruppi di pentagrammi:: +* Combinare le note negli accordi:: +* Polifonia su un singolo rigo:: +@end menu + + +@node Espressioni musicali +@subsection Espressioni musicali +@translationof Music expressions explained + +@cindex espressione musicale +@cindex espressione musicale composta + +Nei file di input di LilyPond, la musica è rappresentata dalle +@emph{espressioni musicali}. Anche una singola nota è un'espressione +musicale: + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +Se si racchiude una nota tra parentesi si crea un'@emph{espressione +musicale composta}. In questo esempio abbiamo creato un'espressione +musicale composta da due note: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +Se si mette un gruppo di espressioni musicali (es: note) tra parentesi, +significa che sono in sequenza (ovvero, ciascuna espressione segue la +precedente). Il risultato è un'altra espressione musicale: + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f4 g } +@end lilypond + +@subheading Analogia: le espressioni matematiche + +Questo meccanismo è analogo a quello delle formule matematiche: una grande formula +può essere creata creando piccole formule. Tali formule sono chiamate +espressioni, e possono contenere altre espressioni, così che sia possibile +costruire a piacere espressioni grandi e complesse. Ad esempio, + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +Questa è una sequenza di espressioni, dove ogni espressione è racchiusa +in quella successiva (più grande). Le espressioni più semplici sono +i numeri, e quelle più grandi si ottengono combinando le espressioni con +gli operatori (come @code{+}, @code{*} e @code{/}) e le parentesi. +Come le espressioni matematiche, le espressioni musicali possono essere +annidate a qualsivoglia grado di profondità, e questo è indispensabile per +musica complessa come le partiture polifoniche. + + +@subheading Espressioni musicali simultanee: righi multipli + +@cindex righi multipli +@cindex multipli, righi +@cindex polifonia +@cindex combinare le espressioni in parallelo +@cindex espressioni parallele +@cindex parallele, espressioni +@cindex note relative e musica simultanea +@cindex note relative e espressioni parallele +@cindex musica simultanea e note relative +@cindex espressioni parallele e note relative + +@funindex << +@funindex >> +@funindex << ... >> + +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 +le espressioni in parallelo. Per indicare che le due voci devono suonare +contemporaneamente, basta inserire una combinazione simultanea di espressioni +musicali. Un' espressione musicale @q{simultanea} si forma racchiudendo le +espressioni all'interno di @code{<<} e @code{>>}. Nel seguente +esempio, tre sequenze (tutte contenenti due note +separate) vengono combinate in simultanea: + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +Si noti che abbiamo indentato ogni livello dell'input con una diversa +quantità di spazi. LilyPond non si preoccupa di quanto spazio c'è +all'inizio di una linea, tuttavia indentare il codice di LilyPond in +questo modo lo rende molto più semplice da leggere per l'essere umano. + +@warning{ogni nota è relativa alla nota precedente +nell'input, e non è relativa al @code{c''} nel comando +@code{@bs{}relative} iniziale.} + + +@subheading Espressioni musicali simultanee: rigo singolo + +Per determinare il numero di pentagrammi in un brano, LilyPond guarda +l'inizio della prima espressione. Se c'è una nota singola, ci sarà +un pentagramma; se c'è un'espressione simultanea, ci saranno più +pentagrammi. L'esempio seguente mostra un'espressione +complessa, ma poiché inizia con una nota singola sarà impostata +su un singolo rigo. + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e2 f } { c2 <> } >> +} +@end lilypond + +@node Righi multipli +@subsection Righi multipli +@translationof Multiple staves + +@cindex righi multipli +@cindex multipli, righi +@cindex contesto +@cindex contesto, notazione +@cindex contesto della notazione + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +Come abbiamo visto in @ref{Espressioni musicali}, i file di input +di LilyPond si costruiscono in base alle espressioni musicali. Se la partitura +inizia con espressioni musicali simultanee, LilyPond crea più di un +rigo musicale. Tuttavia, è più facile vedere quel che accade se creiamo +ogni rigo musicale esplicitamente. + +Per ottenere più di un rigo musicale, ogni brano musicale che costituisce +un rigo è contrassegnato da @code{\new Staff}. Questi elementi +@code{Staff} vengono poi combinati in parallelo con @code{<<} +e @code{>>}: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +Il comando @code{\new} introduce un @q{contesto di notazione.} Un +contesto è un ambiente in cui vengono interpretati gli eventi musicali +(come le note o i comandi @code{\clef}). Nel caso di brani semplici, +tali contesti vengono creati automaticamente. Per brani più complessi, +è meglio contrassegnare esplicitamente i contesti. + +Ci sono vari tipi di contesto. @code{Score}, @code{Staff}, +e @code{Voice} gestiscono la notazione melodica, mentre @code{Lyrics} imposta +i testi e @code{ChordNames} visualizza i nomi degli accordi. + +In termini di sintassi, se si inserisce @code{\new} prima di un'espressione +musicale, si crea un'espressione musicale più grande. In questo modo +assomiglia al segno di minore in matematica. La formula @math{(4+5)} è +un'espressione, quindi @math{-(4+5)} è un'espressione più grande. + +Le indicazioni di tempo inserite in un rigo musicale si estendono di default +a tutti gli altri righi. L'armatura di chiave di un rigo, invece, +@emph{non} si estende agli altri. Questo diverso comportamento di default +è dovuto al fatto che le partiture con strumenti traspositori sono molto più +frequenti delle partiture poliritmiche. + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + + + +@node Gruppi di pentagrammi +@subsection Gruppi di pentagrammi +@translationof Staff groups + +@cindex pentagramma per piano +@cindex piano, pentagramma per +@cindex pentagramma per coro +@cindex coro, pentagramma per +@cindex accollatura +@cindex gruppo di pentagrammi + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Glossario musicale: +@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}. +Produrre un pentagramma di questo tipo è simile all'esempio polifonico in +@ref{Multiple staves}. In questo caso, però, l'intera espressione +è inserita all'interno di @code{PianoStaff}: + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> +@end example + +Ecco un piccolo esempio: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef "bass" c,,4 c' | e c | } + >> +} +@end lilypond + +Altri raggruppamenti di pentagrammi vengono preceduti da @code{\new GrandStaff}, +per le partiture orchestrali, e da @w{@code{\new ChoirStaff}}, +per le partiture corali. Ognuno di questi gruppi di pentagramma +costituiscono un altro tipo di contesto, un contesto che genera la graffa +all'estremità sinistra di ogni sistema e controlla inoltre l'estensione +delle linee della battuta. + + +@seealso +Guida alla notazione: +@ruser{Keyboard and other multi-staff instruments}, +@ruser{Displaying staves}. + + +@node Combinare le note negli accordi +@subsection Combinare le note negli accordi +@translationof Combining notes into chords + +Glossario musicale: @rglosnamed{chord,accordo}. + +@cindex accordi +@cindex durate delle note negli accordi + +@funindex < +@funindex > +@funindex < ... > + +Abbiamo visto in precedenza come le note possano essere combinate in +@notation{accordi} racchiudendole tra parentesi a doppi angoli per indicare +che sono simultanee. Tuttavia, il modo normale di indicare un accordo è quello +di circondare le note con delle parentesi ad angolo @emph{singolo}. Si noti +che tutte le note in un accordo devono avere la stessa durata, e che la +durata è posta dopo la parentesi chiusa. + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +Pensa agli accordi come a qualcosa di equivalente alle note singole: +quasi ogni cosa che puoi attaccare a una nota singola può essere attaccata +a un accordo, e tutto questo deve stare @emph{fuori} dalle parentesi +angolari. Ad esempio, con gli accordi si possono combinare simboli come +le travature e le legature di valore. Questi devono essere posti fuori dalle +parentesi angolari. + +@lilypond[verbatim,quote,relative=2] +r4 ~ 2 | +8[ ] \>[ ]\! | +r4 8.\p 16( 4-. ) | +@end lilypond + +@seealso +Guida alla notazione: +@ruser{Chorded notes}. + +@node Polifonia su un singolo rigo +@subsection Polifonia su un singolo rigo +@translationof Single staff polyphony + +@cindex polifonia +@cindex voci multiple +@cindex voci, più su un rigo +@cindex polifonia su un singolo rigo +@cindex pausa spaziatrice +@cindex spaziatrice, pausa + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +La musica polifonica in lilypond, per quanto non difficile, fa riferimento a +concetti non ancora affrontati, quindi non la presenteremo +subito. Saranno le sezioni successive a introdurre questi concetti e +a spiegarli via via. + +@seealso +Manuale di Apprendimento: +@ref{Le voci contengono la musica}. + +Guida alla notazione: +@ruser{Simultaneous notes}. + +@node Canzoni +@section Canzoni +@translationof Songs + +Questa sezione presenta la musica vocale e gli spartiti di semplici canzoni. + +@menu +* Impostare canzoni semplici:: +* Allineare il testo alla melodia:: +* Testo su più righi:: +@end menu + + +@node Impostare canzoni semplici +@subsection Impostare canzoni semplici +@translationof Setting simple songs + +@cindex testi +@cindex canzoni + +@funindex \addlyrics +@funindex addlyrics + +Glossario musicale: @rglosnamed{lyrics,testo}. + +Questo è l'inizio della melodia di una +filastrocca, @notation{Girls and boys come out to play}: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +I @notation{testi} possono essere collegati a queste note, combinandoli +a esse per mezzo della parola chiave @code{\addlyrics}. I testi si inseriscono +separando ogni sillaba con uno spazio. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } +>> +@end lilypond + +@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}.} + +Si notino le doppie parentesi ad angolo @w{@code{<< ... >>}} che circondano +l'intero brano per indicare che la musica e il testo devono trovarsi +in simultanea. + +@node Allineare il testo alla melodia +@subsection Allineare il testo alla melodia +@translationof Aligning lyrics to a melody + +@cindex melisma +@cindex linea di estensione +@cindex trattini +@cindex trattino basso +@cindex testo, allineare +@cindex allineare il testo +@cindex testo, parole polisillabiche +@cindex parole con sillabe multiple nel testo + +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: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Se compili il codice dell'esempio precedente, dovresti vedere alcuni +avvisi nell'output del terminale: + +@example +song.ly:12:29: warning: barcheck failed at: 5/8 + The | moon doth shine as + | bright as day; | +song.ly:12:46: warning: barcheck failed at: 3/8 + The | moon doth shine as | bright as day; + | +@end example + +Questo è un ottimo esempio dell'utilità dei controlli di battuta. Tornando +alla musica, si può vedere che il testo aggiunto non risulta ben allineato +alle note. La parola @notation{shine} dovrebbe essere cantata su due note, non +una. Questo si chiama @notation{melisma}, una singola sillaba che viene +cantata per più di una nota. Ci sono molti modi per estendere una sillaba +su molteplici note, e il più semplice è aggiungere una legatura di portamento +che le colleghi, per i dettagli si veda @ref{Legature di valore e di portamento}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Adesso le parole sono allineate correttamente con le note, ma il raggruppamento +automatico per le note che si trovano sopra @notation{shine as} non ha un +aspetto corretto. Possiamo correggerlo inserendo i comandi per il raggruppamento +manuale così da scavalcare, in questo caso, il raggruppamento automatico; per i +dettagli si veda @ref{Code automatiche e manuali}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Come alternativa all'uso delle legature di portamento, si possono indicare +i melismi nel testo stesso, usando il trattino basso @code{_} per ogni nota +che si voglia includere nel melisma: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +Se una sillaba si estende per molte note o per una singola nota molto +lunga, solitamente viene disegnata una @notation{linea di estensione} +che va dalla sillaba e si estende per tutte le note comprese in quella +sillaba. Si scrive con due trattini bassi @code{__}. Il seguente esempio +è tratto dalle prime tre battute del @notation{Lamento di Didone}, dal +@notation{Dido and Aeneas} di Purcell: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +Nessuno degli esempi visti finora ha comportato l'uso di parole aventi +più di una sillaba. Tali parole vengono solitamente suddivise una sillaba +per nota, con trattini posti tra le sillabe. Tali trattini vengono inseriti con +due lineette, e producono un trattino centrato tra le sillabe. +Ecco un esempio che, oltre a questo, mostra tutto quello che abbiamo imparato +finora sull'allineamento del testo con le note. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +Alcuni testi, specialmente quelli in italiano, richiedono l'opposto: +associare più di una sillaba a una singola nota. Questo può essere +ottenuto collegando le sillabe insieme con un singolo trattino +basso @code{_} (senza spazi), o includendole tra virgolette. +Ecco un esempio tratto dal @notation{Figaro} di Rossini, dove +@notation{al} deve essere cantato sulla stessa nota del @notation{go} di +@notation{Largo}, nell'aria di Figaro @notation{Largo al factotum}: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef "bass" + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + + +@seealso +Guida alla notazione: +@ruser{Vocal music}. + + +@node Testo su più righi +@subsection Testo su più righi +@translationof Lyrics to multiple staves + +@cindex testo e righi multipli +@cindex righi multipli e testo + +Per porre lo stesso testo sotto più righi musicali, si può usare un approccio +più semplice, ovvero @code{\addlyrics}. Ecco un esempio tratto dal +@notation{Judas Maccabæus} di Handel: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + +Per scrivere partiture un po' più complesse di questi semplici esempi, +è meglio separare la struttura dello spartito dalle note e dai testi +mediante l'uso di variabili. Di queste si parla più approfonditamente +in @ref{Organizzare i brani con le variabili}. + + +@seealso +Guida alla notazione: +@ruser{Vocal music}. + + +@node Ritocchi finali +@section Ritocchi finali +@translationof Final touches + +Questa è la sezione finale della guida; spiega come dare gli ultimi +ritocchi a semplici pezzi, e fornisce un'introduzione +al resto del manuale. + +@menu +* Organizzare i brani con le variabili:: +* Aggiungere i titoli:: +* Nomi assoluti delle note:: +* Dopo il tutorial:: +@end menu + + +@node Organizzare i brani con le variabili +@subsection Organizzare i brani con le variabili +@translationof Organizing pieces with variables + +@cindex variabili +@cindex variabili, definire +@cindex identificatori +@cindex macro +@cindex assegnare le variabili +@cindex usare le variabili +@cindex variabili, usare +@cindex variabili, caratteri permessi nelle +@cindex caratteri permessi nelle variabili + +Quando tutti gli elementi discussi precedentemente vengono combinati insieme +per produrre file di maggiori dimensioni, anche le espressioni musicali +diventano molto più grandi. Nella musica polifonica con molti righi musicali, +i file di input possono diventare molto confusi. Possiamo ridurre tale +confusione attraverso l'uso delle @emph{variabili}. + +Con le variabili (conosciute anche come identificatori o macro), possiamo +scomporre le espressioni musicali complesse. Una variabile viene assegnata +nel seguente modo: + +@example +namedMusic = @{ @dots{} @} +@end example + +I contenuti dell'espressione musicale @code{namedMusic} possono essere +usati in seguito ponendo una barra inversa (backslash) di fronte al nome +(@code{\namedMusic}, proprio come in un normale comando LilyPond). + +@lilypond[verbatim,quote] +violin = \new Staff { + \relative c'' { + a4 b c b + } +} +cello = \new Staff { + \relative c { + \clef "bass" + e2 d + } +} +{ + << + \violin + \cello + >> +} +@end lilypond + +@noindent +Il nome di una variabile deve contenere soltanto caratteri alfabetici, non +può avere numeri, trattini bassi (underscore) o trattini di altro tipo. + +Le variabili devono essere definite @emph{prima} della principale espressione +musicale, ma possono poi essere usate quante volte si vuole e ovunque, una +volta definite. Possono essere usate anche all'interno della definizione di +un'altra variabile successiva, dando la possibilità di accorciare l'input se +una sezione della musica viene ripetuta molte volte. + +@lilypond[verbatim,quote] +tripletA = \times 2/3 { c,8 e g } +barA = { \tripletA \tripletA \tripletA \tripletA } + +\relative c'' { + \barA \barA +} +@end lilypond + +Le variabili possono essere utilizzate per molti tipi di oggetto +nell'input. Ad esempio, + +@example +width = 4.5\cm +name = "Wendy" +aFivePaper = \paper @{ paperheight = 21.0 \cm @} +@end example + +A seconda dei suoi contesti, la variabile può essere usata in punti +differenti. L'esempio seguente usa le variabili mostrate sopra: + +@example +\paper @{ + \aFivePaper + line-width = \width +@} +@{ + c4^\name +@} +@end example + + +@node Aggiungere i titoli +@subsection Aggiungere i titoli +@translationof Adding titles + +@cindex titolo +@cindex intestazioni +@cindex blocco dell'intestazione + +@funindex \header +@funindex header + +Titolo, compositore, numero di opus e informazioni simili vengono +inserite nel blocco @code{\header}. Questo si trova fuori dalla +principale espressione musicale; il blocco @code{\header} viene solitamente +posto sotto il numero di versione. + +@example +\version @w{"@version{}"} +\header @{ + title = "Symphony" + composer = "Me" + opus = "Op. 9" +@} + +@{ + @dots{} music @dots{} +@} +@end example + +Quando il file viene elaborato, sopra la musica vengono visualizzati +il titolo e il compositore. Si possono trovare maggiori informazioni +sui titoli in @ruser{Creating titles}. + + +@node Nomi assoluti delle note +@subsection Nomi assoluti delle note +@translationof Absolute note names + +@cindex nomi delle note +@cindex nomi delle note, assoluti +@cindex modo assoluto +@cindex valori assoluti per le altezze +@cindex altezze, valori assoluti +@cindex nomi assoluti delle note + +Finora abbiamo sempre usato @code{\relative} per definire le altezze. +Questo è il modo più semplice per inserire gran parte della musica, ma esiste +anche un altro modo per definire le altezze: il modo assoluto. + +Se si omette @code{\relative}, LilyPond tratta tutte le altezze come +valori assoluti. Un @code{c'} si riferirà sempre al Do centrale, un +@code{b} si riferirà sempre alla nota che si trova un semitono sotto il +Do centrale, e un @code{g,} indicherà sempre la nota sull'ultima riga +della chiave di basso. + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +Ecco una scala con quattro ottave: + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +Come si può vedere, scrivere una melodia in chiave di violino richiede un ampio +uso di virgolette @code{'}. Si consideri questo frammento tratto da Mozart: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +Tutte queste virgolette rendono l'input meno leggibile e sono una fonte +di errori. Usando @code{\relative}, l'esempio precedente è molto più +semplice da leggere e scrivere: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 + b8. cis16 b8 d4 d8 +} +@end lilypond + +Se si fa un errore con un segno di ottava (@code{'} o @code{,}) +quando si lavora col modo @code{\relative}, è molto evidente -- tante +note saranno nell'ottava sbagliata. Quando si lavora in modo assoluto, +un singolo errore non sarà tanto visibile, e non sarà così facile da +trovare. + +Tuttavia, il modo assoluto è utile per la musica che fa uso di ampi +intervalli, e lo è ancora di più per i file LilyPond generati dal +computer. + + + +@node Dopo il tutorial +@subsection Dopo il tutorial +@translationof After the tutorial + +Dopo aver finito di leggere la guida, probabilmente dovresti cercare +di scrivere uno o due brani. Puoi iniziare aggiungendo delle note a uno +dei @ref{Templates}. Se necessiti di una qualche notazione che non è +stata coperta nel tutorial, dai un'occhiata alla Guida alla notazione, +a cominciare da @ruser{Musical notation}. Se vuoi scrivere per un gruppo +di strumenti che non è incluso nei template, dai un'occhiata a +@ref{Extending the templates}. + +Una volta che hai scritto alcuni brevi pezzi, puoi proseguire la lettura +del Manuale di Apprendimento (capitoli 3-5). Ovviamente non c'è niente +di male nel leggerli subito! Però tieni conto che la parte restante del +Manuale di Apprendimento parte dal presupposto che tu abbia già confidenza +con l'input di LilyPond. Puoi saltare questi capitoli adesso, e tornare +a leggerli quando ti sarai fatto un po' di esperienza. + +In questo tutorial e nel resto del Manuale di Apprendimento, alla fine di +ogni sezione c'è un paragrafo @strong{Vedi anche}, che contiene +riferimenti incrociati ad altre sezioni: non dovresti seguire questi +riferimenti quando leggi il manuale per la prima volta; quando avrai completato +la lettura di tutto il Manuale di Apprendimento, potrai rileggere alcune +sezioni e seguire i riferimenti incrociati per letture di approfondimento. + +Se non lo hai già fatto, @emph{ti consigliamo} di leggere +@ref{Panoramica dei manuali}. Contiene molte informazioni su LilyPond, +ed è quindi utile per i nuovi utenti, che spesso non sanno dove cercare +aiuto. Se dedichi cinque minuti all'attenta lettura di quella sezione, +potresti risparmiarti ore di frustrazione sprecate a guardare in posti sbagliati! + diff --git a/Documentation/it/learning/fundamental.itely b/Documentation/it/learning/fundamental.itely new file mode 100644 index 0000000000..9f1e17502c --- /dev/null +++ b/Documentation/it/learning/fundamental.itely @@ -0,0 +1,3197 @@ +@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 Concetti fondamentali +@chapter Concetti fondamentali +@translationof Fundamental concepts + +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. + +@menu +* Come funzionano i file di input di LilyPond:: +* Le voci contengono la musica:: +* Contesti e incisori:: +* Estendere i modelli:: +@end menu + + +@node Come funzionano i file di input di LilyPond +@section Come funzionano i file di input di LilyPond +@translationof How LilyPond input files work + +Il formato di input di LilyPond ha una struttura piuttosto libera, che dà +agli utenti esperti una grande flessibilità nell'organizzare i file come +preferiscono. Ma questa flessibilità può creare confusione nei nuovi +utenti. Questa sezione spiegherà in parte questa struttura, ma +sorvolerà su alcuni dettagli in favore della semplicità. Per una +descrizione completa del formato di input, si veda @ruser{File structure}. + +@menu +* Introduzione alla struttura di un file di LilyPond:: +* La partitura è una (singola) espressione musicale composta:: +* Annidare le espressioni musicali:: +* Sul non annidamento di parentesi e legature di valore:: +@end menu + +@node Introduzione alla struttura di un file di LilyPond +@subsection Introduzione alla struttura di un file di LilyPond +@translationof Introduction to the LilyPond file structure + +@cindex formato di input +@cindex struttura del file + +Un esempio basilare di un file di input di LilyPond è + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...espressione musicale composta...} % tutta la musica va qui! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Ci sono molte varianti a questo modello di base, ma questo esempio +serve da utile punto di partenza. + +@funindex \book +@funindex book +@funindex \score +@funindex score +@cindex book (libro) +@cindex score (partitura) +@cindex libro +@cindex partitura + +Finora nessuno degli esempi che abbiamo visto ha usato il comando +@code{\score@{@}}. Questo si spiega col fatto che LilyPond, quando +elabora un input semplice, aggiunge automaticamente gli altri comandi +necessari. LilyPond tratta un input come questo: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +come forma abbreviata per questo: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +In altre parole, se l'input contiene un'espressione musicale singola, +LilyPond interpreterà il file come se l'espressione musicale +fosse racchiusa dentro i comandi mostrati sopra. + +@cindex contesti impliciti +@cindex contesti, impliciti + +@strong{Attenzione!} Molti esempi nella documentazione di LilyPond +ometteranno i comandi @code{\new Staff} e @code{\new Voice}, +lasciando che questi siano creati implicitamente. Per gli esempi +semplici questo metodo funziona bene, ma per quelli più complessi, soprattutto +quando vengono usati ulteriori comandi, la creazione implicita dei contesti +può dare risultati inattesi, ad esempio creando dei righi non voluti. +Il modo per creare i contesti esplicitamente è spiegato in +@ref{Contexts and engravers}. + +@warning{Quando si inseriscono più di poche linee di musica, si consiglia +di creare sempre esplicitamente i righi e le voci.} + +Ora però torniamo al primo esempio ed esaminiamo il comando +@code{\score}, lasciando gli altri comandi secondo l'impostazione predefinita. + +Un blocco @code{\score} deve sempre contenere una sola espressione musicale, +e questa deve trovarsi subito dopo il comando @code{\score}. +Ricorda che un'espressione musicale può essere qualsiasi cosa, da una +singola nota a una grande espressione composta come + +@example +@{ + \new StaffGroup << + @var{...inserisci qui l'intera opera di Wagner...} + >> +@} +@end example + +@noindent +Tutto quanto è compreso in @code{@{ ... @}} costituisce un'unica +espressione musicale. + +Come abbiamo detto prima, il blocco @code{\score} può contenere altri +elementi, come ad esempio + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex header +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi +@cindex header +@cindex layout +@cindex midi + +@noindent +Si noti che questi tre comandi -- @code{\header}, @code{\layout} e +@code{\midi} -- sono speciali: diversamente da molti altri comandi che +iniziano con un backslash (@code{\}), @emph{non} sono espressioni +musicali né fanno parte di alcuna espressione musicale. Dunque, possono +essere collocati dentro o fuori da un blocco @code{\score}. Di solito +questi comandi vengono posti fuori dal blocco @code{\score} -- ad esempio, +@code{\header} spesso viene messo sopra il comando @code{\score}, come mostra +l'esempio all'inizio di questa sezione. + +Altri due comandi che non hai incontrato finora sono +@code{\layout @{ @}} e @code{\midi @{@}}. Se questi appaiono come +in figura, LilyPond creerà rispettivamente un output per la stampa +e uno per il MIDI. Sono descritti dettagliatamente nella +Guida alla notazione, in @ruser{Score layout}, e +@ruser{Creating MIDI files}. + +@cindex partiture, multiple +@cindex libro, blocco implicito +@cindex implicito, blocco del libro +@funindex \book +@funindex book + +Puoi scrivere molteplici blocchi @code{\score}. Ciascuno verrà +trattato come una partitura separata, ma saranno tutti combinati in +un unico file di output. Non è necessario il comando @code{\book} +-- ne verrà creato uno automaticamente. Tuttavia, se si desiderano +file di output separati da un file @file{.ly}, allora si deve usare +il comando @code{\book} per separare le diverse sezioni: ogni blocco +@code{\book} produrrà un file di output separato. + +In breve: + +Ogni blocco @code{\book} crea un file di output separato (ovvero, un +file PDF). Se non ne hai aggiunto uno esplicitamente, LilyPond racchiude +implicitamente tutto il tuo codice di input in un blocco @code{\book}. + +Ogni blocco @code{\score} è un pezzo di musica separato all'interno di +un blocco @code{\book}. + +@cindex layout, effetto della posizione del blocco + +Ogni blocco @code{\layout} influenza il blocco @code{\score} o +@code{\book} in cui compare -- ovvero, un blocco @code{\layout} +che si trova dentro un blocco @code{\score} riguarda solo quel blocco +@code{\score}, mentre un blocco @code{\layout} che si trova fuori da un +blocco @code{\score} (e quindi in un blocco @code{\book}, esplicitamente +o implicitamente) riguraderà ogni @code{\score} in quel @code{\book}. + +Per maggiori dettagli si veda @ruser{Multiple scores in a book}. + +@cindex variabili + +Un'altra grande scorciatoia è la possibilità di definire variabili, come è +spiegato in @ref{Organizzare i brani con le variabili}). Tutti +i modelli usano questa forma + +@example +melodia = \relative c' @{ + c4 a b c +@} + +\score @{ + \melodia +@} +@end example + +Quando LilyPond esamina questo file, prende il valore di @code{melodia} (tutto +ciò che si trova dopo il segno di uguale) e lo inserisce ovunque si trovi +@code{\melodia}. Non c'è una regola specifica per i nomi -- il nome può essere +@code{melodia}, @code{globale}, @code{tempo}, @code{manodestrapiano}, o qualsiasi +altro nome. Ricordati che puoi usare quasi ogni nome che vuoi, purché esso +contenga solo caratteri alfabetici e sia diverso dai nomi dei comandi di +LilyPond. Le esatte limitazioni relative ai nomi delle variabili sono spiegate +dettagliatamente in @ruser{File structure}. + + +@seealso +Per una definizione completa del formato di input, si veda +@ruser{File structure}. + + +@node La partitura è una (singola) espressione musicale composta +@subsection La partitura è una (singola) espressione musicale composta +@translationof Score is a (single) compound musical expression + +@funindex \score +@funindex score +@cindex partitura +@cindex score +@cindex contenuto di un blocco score +@cindex score, contenuto del blocco +@cindex espressione musicale composta +@cindex composta, espressione musicale + +Abbiamo visto l'organizzazione generale dei file di input di LilyPond nella +sezione precedente, @ref{Introduzione alla struttura di un file di LilyPond}. +Ma sembra che abbiamo saltato la parte più importante: cosa dobbiamo +scrivere dopo @code{\score}? + +In realtà non l'abbiamo affatto dimenticato. Il grande mistero è, +semplicemente, che @emph{non c'è} alcun mistero. La seguente frase spiega tutto: + +@quotation +@emph{Un blocco @code{\score} deve iniziare con un'espressione musicale composta.} +@end quotation + +@noindent +Per capire cosa si intende per espressione musicale e per espressione +musicale composta, potrebbe esserti utile ripassare il tutorial, +@ref{Espressioni musicali}. In quella sezione, abbiamo visto +come costruire grandi espressioni musicali a partire da piccoli brani -- abbiamo +iniziato con le note, poi gli accordi, etc. Adesso inzieremo da una grande +espressione musicale e proseguiremo poi a spiegarne i dettagli. Per semplicità, +nel nostro esempio useremo soltanto un canto e un pianoforte. Per questa formazione +non abbiamo bisogno di @code{StaffGroup}, che non fa altro che raggruppare un insieme +di righi con una parentesi graffa a sinistra, ma abbiamo comunque bisogno dei +righi per il canto e per il pianoforte. + +@example +\score @{ + << + \new Staff = "canto" << + >> + \new PianoStaff = "pianoforte" << + >> + >> + \layout @{ @} +@} +@end example + +In questo esempio abbiamo dato dei nomi ai righi -- @qq{canto} e +@qq{pianoforte}. Non è necessario in questo caso, ma è una buona abitudine +da coltivare, perché ti permette di vedere a colpo d'occhio a cosa serve +ciascun rigo. + +Ricorda che si usano @code{<< ... >>} invece di @code{@{ ... @}} per indicare +la musica simultanea. In questo modo la parte vocale e quella di pianoforte +appaiono una sopra l'altra nello spartito. Il costrutto @code{<< ... >>} non +sarebbe necessario per il rigo del cantante nell'esempio precedente se contenesse +soltanto un'espressione musicale sequenziale, ma @code{<< ... >>} al posto delle +parentesi è necessario se la musica sul rigo deve contenere due o più espressioni +simultanee, ad esempio due voci simultanee, o una voce con del testo. Vogliamo +avere una voce con del testo, dunque ci servono le parentesi ad angolo. Aggiungeremo +la musica vera e propria in seguito; per adesso mettiamo soltanto delle semplici +note e del testo. Se hai dimenticato come aggiungere del testo, potresti voler +ripassare @code{\addlyrics} in @ref{Impostare canzoni semplici}. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "canto" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +Ora abbiamo molti più dettagli. Abbiamo il rigo del cantante: esso contiene +una @code{Voice} o voce (in LilyPond, questo termine si riferisce a un insieme +di note, non necessariamente alle note della voce -- ad esempio, un violino di +solito costituisce una voce) e del testo. Abbiamo anche il rigo del pianoforte, +che a sua volta comprende un rigo superiore (per la mano destra) e uno inferiore +(per la mano sinistra), sebbene a quest'ultimo debba ancora essere assegnata +una chiave di basso. + +A questo punto possiamo iniziare ad inserire le note. All'interno delle parentesi +graffe vicine a @code{\new Voice = "vocal"}, possiamo iniziare a scrivere + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +Ma se facessimo così, la sezione @code{\score} diventerebbe molto lunga, e +sarebbe più difficile comprendere quel che accade. Usiamo quindi le variabili +piuttosto. Queste sono state introdotte alla fine della sezione precedente, +ricordi? Per far sì che i contenuti della variabile @code{text} siano +interpretati come testo, li facciamo precedere da @code{\lyricmode}. Come in +@code{\addlyrics}, questo comando trasforma la modalità di input in modalità +testo. Senza di esso, LilyPond cercherebbe di interpretare i contenuti come +se fossero note, e questo produrrebbe degli errori. (Sono disponibili molte +altre modalità di input, si veda @ruser{Input modes}.) + +Dunque se aggiungiamo un po' di note e una chiave di basso per la mano +sinistra, otteniamo un brano musicale vero e proprio: + +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e } + +\score { + << + \new Staff = "canto" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond + +Quando scrivi (o leggi) una sezione @code{\score}, prenditela comoda e stai +attento. Comincia dal livello più esterno, poi lavora su ogni livello più +piccolo. È anche molto utile essere rigorosi nell'indentare l'input -- ovvero +fare attenzione che ogni elemento di uno stesso livello presente nell'editor +di testo si trovi nella stessa posizione orizzontale. + + +@seealso +Guida alla notazione: @ruser{Structure of a score}. + + +@node Annidare le espressioni musicali +@subsection Annidare le espressioni musicali +@translationof Nesting music expressions + +@cindex righi temporanei +@cindex temporanei, righi +@cindex ossia + +Non è obbligatorio dichiarare tutti i righi fin dall'inizio; possono essere +invece introdotti temporaneamente in ogni momento. Questo è utile in +particolare per creare le sezioni ossia -- si veda @rglos{ossia}. Ecco un +semplice esempio che mostra come inserire un nuovo rigo temporaneamente, per +la durata di tre note: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Si noti che la dimensione della chiave è la stessa di una chiave che segue un +cambio di chiave --ovvero leggermente più piccola della chiave all'inizio del +rigo. Questo è utile per le chiavi che devono essere posizionate a metà di un +rigo. + +@cindex rigo, posizionamento del + +La sezione ossia può anche essere posta sopra il rigo +nel seguente modo: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } { f8 f c } + >> + r4 | + } +} +@end lilypond + +Questo esempio usa @code{\with}, che verrà spiegato in modo più +completo in seguito. È un modo per cambiare il comportamento predefinito +di un singolo rigo. In questo caso, indica che il nuovo rigo deve essere +posizionato sopra il rigo chiamato @qq{main} invece che nella posizione +predefinita, che è in basso. + + +@seealso +Gli ossia vengono spesso scritti senza armatura di chiave e senza +tempo, e solitamente hanno un font più piccolo. Richiedono ulteriori +comandi che non sono stati ancora presentati. Si veda @ref{Size of objects}, +e @ruser{Ossia staves}. + + +@node Sul non annidamento di parentesi e legature di valore +@subsection Sul non annidamento di parentesi e legature di valore +@translationof On the un-nestedness of brackets and ties + +@cindex parentesi, annidare +@cindex tipi di parentesi +@cindex parentesi, racchiudere vs. contrassegnare + +Abbiamo già incontrato vari tipi di parentesi e di costrutti che fanno +uso di parentesi mentre scrivevamo il file di input di LilyPond. Ognuna obbedisce a +diverse regole, e questo può generare confusione all'inizio. Rivediamo prima i +diversi tipi di parentesi e di costrutti in parentesi. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Tipo di parentesi + @tab Funzione +@item @code{@{ .. @}} + @tab Racchiude un frammento di musica sequenziale +@item @code{< .. >} + @tab Racchiude le note di un accordo +@item @code{<< .. >>} + @tab Racchiude le espressioni musicali simultanee +@item @code{( .. )} + @tab Contrassegna l'inizio e la fine di una legatura di portamento +@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 travatura impostata manualmente +@end multitable + +A questi dovremmo aggiungere altri costrutti che generano linee tra +e lungo le note: legature di valore (contrassegnate dal tilde, @code{~}), +i gruppi irregolari scritti in questa forma @code{\times x/y @{..@}}, e +gli abbellimenti, indicati con @code{\grace@{..@}}. + +Fuori da LilyPond, l'uso convenzionale delle parentesi esige che i diversi +tipi siano annidati adeguatamente, in questo modo, @code{<< [ @{ ( .. ) +@} ] >>}, dove le parentesi che chiudono si trovano esattamente +nell'ordine opposto alle parentesi che aprono. Questo @strong{è} un +requisito per i tre tipi di parentesi descritti dal termine @q{Racchiude} +nella tabella precedente -- devono annidarsi correttamente. Tuttavia, +i restanti costrutti in parentesi, descritti dal termine @q{Contrassegna} nella +tabella, così come le legature e i gruppi irregolari, @strong{non} devono annidarsi +correttamente con alcuna delle parentesi o dei costrutti in parentesi. Infatti +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 travatura +inserita manualmente e finire prima della fine della travatura -- non +molto musicale, forse, ma possibile: + +@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 travatura che si estende su un +gruppo irregolare (linea 1), una legatura di portamento che si estende su +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,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 + + +@node Le voci contengono la musica +@section Le voci contengono la musica +@translationof Voices contain music + +Un cantante ha bisogno della voce per cantare, e lo stesso vale per LilyPond. +La musica vera e propria per tutti gli strumenti di una partitura è +contenuta nelle Voci -- il più importante concetto di LilyPond. + +@menu +* Sento le Voci:: +* Definire esplicitamente le voci:: +* Voci e musica vocale:: +@end menu + +@node Sento le Voci +@subsection Sento le Voci +@translationof I'm hearing Voices + +@cindex polifonia +@cindex livelli +@cindex varie voci +@cindex voci, varie +@cindex Voice (voce), contesto di +@cindex contesto Voice (voce) +@cindex musica simultanea +@cindex simultanea, musica +@cindex musica sincrona +@cindex sincrona, musica +@cindex voci vs. accordi +@cindex accordi vs. voci + +I livelli più profondi, più interni e più importanti di uno spartito di LilyPond +sono chiamati @q{Voice contexts} («Contesti della voce») o semplicemente @q{Voices} +(«Voci»). In altri programmi di notazione le voci sono chiamate talvolta @q{layers} +(«livelli»). + +Il livello o contesto della voce è l'unico che può contenere la +musica. Se un contesto della voce non è dichiarato esplicitamente, ne +viene creato uno automaticamente, come abbiamo visto all'inizio di questo +capitolo. Alcuni strumenti, come ad esempio un oboe, possono produrre una +sola nota per volta. La musica scritta per tali strumenti è monofonica e +necessita di una sola voce. Invece gli strumenti che possono produrre più +di una nota contemporaneamente, come ad esempio il pianoforte, richiederanno +spesso voci multiple per codificare le diverse note e ritmi simultanei che +sono capaci di riprodurre. + +Ovviamente, una singola voce può contenere molte note in un accordo, +dunque quando l'uso delle voci multiple è davvero necessario? Si osservi +questo esempio di quattro accordi: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +Questa musica può essere espressa usando soltanto i simboli dell'accordo, +ovvero le parentesi angolari, @code{< ... >}, e una singola voce è +sufficiente. Ma cosa accadrebbe se il Fa# fosse in realtà una nota di un +ottavo seguita da un Sol di un ottavo, una nota di passaggio che porta al La? +In questo caso abbiamo due note che iniziano nello stesso momento ma hanno +durate diverse: il Re da un quarto e il Fa# da un ottavo. Come si possono scrivere +queste note? Non possono essere scritte come un accordo perché tutte le note di +un accordo devono avere la stessa durata. E non possono nemmeno essere scritte +come due note in sequenza perché devono iniziare in contemporanea. Si tratta +quindi di un caso in cui sono necessarie due voci. + +Vediamo come ottenerle nella sintassi di input di LilyPond. + +@funindex << \\ >> +@funindex \\ + +Il modo più semplice per inserire frammenti che utilizzino più di una voce +su un rigo è scrivere ogni voce come una sequenza (con @code{@{...@}}), +e poi combinarle in simultanea tramite le doppie parentesi angolari, @code{<<...>>}. +Per collocarli in voci distinte, i frammenti devono essere separati da un doppio +backslash, @code{\\}. Senza di esso, le note sarebbero inserite in un'unica +voce, e questo normalmente causerebbe degli errori. Questa tecnica è +particolarmente adatta ai brani che sono in gran parte monofonici ma +con brevi e occasionali sezioni polifoniche. + +Ecco come suddividere gli accordi precedenti in due voci e aggiungere sia +la nota di passaggio che la legatura di portamento: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Si noti come i gambi della seconda voce adesso siano rivolti in basso. + +Ecco un altro semplice esempio: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | +<< { a2. r4 } \\ { fis2. s4 } >> | +@end lilypond + +Non è necessario usare un costrutto con @code{<< \\ >>} in ogni +battuta. Per musiche che hanno poche note in ogni battuta questo layout +può aiutare la leggibilità del codice, ma se ci sono molte note in +ogni battuta è preferibile dividere ogni voce, così: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +@cindex voci, nome delle +@cindex voci che attraversano le parentesi +@cindex legature che attraversano le parentesi + +Questo esempio ha solo due voci, ma si potrebbe usare lo stesso +costrutto per scrivere tre o più voci aggiungendo più backslash. + +I contesti della voce hanno i nomi @code{"1"}, @code{"2"}, etc. +In ogni contesto, la direzione verticale di legature di portamento, +gambi, legature di valore, dinamica, etc., è impostata correttamente. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> | + << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | +} +@end lilypond + +Tutte queste voci sono separate dalla voce principale che contiene le +note e che si trova fuori dal costrutto @code{<< .. >>}, che chiameremo +il @emph{costrutto simultaneo}. Legature di portamento e di valore +possono connettere solo note che fanno parte della stessa voce, quindi +le legature non possono entrare in un costrutto simultaneo o uscirne. Viceversa, +voci parallele appartenenti a costrutti simultanei distinti sullo stesso +rigo sono la stessa voce. Anche altre caratteristiche della voce di riferimento +sono trasferite ai costrutti simultanei. Ecco lo stesso esempio, ma +con colori e teste delle note diversi per ogni voce. Si noti che i +cambiamenti in una voce non interessano le altre voci, ma persistono +sulla stessa voce in seguito. Si noti anche che le note legate possono +essere divise sulle stesse voci in due costrutti, come mostra qui la +voce con i triangoli blu. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +I comandi @code{\voiceXXXStyle} sono pensati soprattutto +per documenti didattici come questo. Modificano il colore +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 +nell'esempio) su croci magenta; @code{\voiceNeutralStyle} (anch'esso +non usato qui) riporta lo stile all'impostazione predefinita. +Vedremo in seguito come l'utente possa creare comandi simili. +Si veda @ref{Visibility and color of objects} e +@ref{Using variables for tweaks}. + +@cindex polifonia e modo relativo +@cindex modo relativo e polifonia + +La polifonia non cambia le relazioni tra le note all'interno di un +blocco @code{\relative}. L'altezza di ogni nota continua a essere calcolata +in rapporto a quella della nota che la precede, o della prima nota del +precedente accordo. Dunque, in + +@example +\relative c' @{ notaA << < notaB notaC > \\ notaD >> notaE @} +@end example + +@noindent +@code{notaB} è relativa a @code{notaA} @* +@code{notaC} è relativa a @code{notaB}, non a @code{notaA}; @* +@code{notaD} è relativa a @code{notaB}, non a @code{notaA} o a +@code{notaC}; @* +@code{notaE} è relativa a @code{notaD}, non a @code{notaA}. + +Un metodo alternativo, che potrebbe essere più chiaro se le note nelle +voci sono ampiamente separate, consiste nel porre un comando @code{\relative} +all'inizio di ogni voce: + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +\\ + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +Analizziamo infine le voci in un brano più complesso. Queste note sono +tratte dalle prime due battute del secondo dei due Notturni op. 32 di +Chopin. Questo esempio verrà usato successivamente, in questo e nel +prossimo capitolo, per illustrare varie tecniche di notazione, quindi +per il momento ignora qualsiasi cosa del codice sottostante che ti sembra +incomprensibile e concentrati solo sulla musica e sulle voci -- le parti +più complesse saranno spiegate tutte in sezioni successive. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +La direzione dei gambi viene spesso usata per indicare la continuità +di due linee melodiche simultanee. In questo esempio i gambi delle note +più acute sono tutti rivolti in su mentre i gambi delle note più gravi +sono tutti rivolti in giù. Questo è il primo indizio del fatto che è +coinvolta più di una voce. + +Ma è quando note che iniziano nello stesso momento hanno durate diverse +che il ricorso a voci multiple diventa realmente indispensabile. Osserva +le note che iniziano alla terza pulsazione della prima battuta. Il La +bemolle è una nota di tre ottavi, il Fa è una semiminima e il Re bemolle +è una minima. Non possono essere scritte come un accordo perché tutte +le note di un accordo devono avere la stessa durata. Né possono essere +scritte come note in sequenza, dato che devono iniziare contemporaneamente. +Questa sezione della battuta necessita di tre voci, e la normale pratica +consiste nello scrivere l'intera battuta su tre voci, come mostrato sotto, +dove abbiamo usato diverse teste e colori per le tre voci. Ancora una volta, +il codice che sta dietro questo esempio verrà spiegato dopo, quindi +ignora quel che non capisci. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +Proviamo a scrivere il codice di questa musica da zero. Come +vedremo, questo pone alcune difficoltà. Come abbiamo imparato, +iniziamo usando il costrutto @code{<< \\ >>} per inserire la musica +della prima battuta in tre voci: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } + >> + 1 +} +@end lilypond + +@cindex gambo in giù +@cindex voci e direzione dei gambi +@cindex gambi e direzione delle voci +@cindex gambo in su + +La direzione dei gambi è assegnata automaticamente: le voci dispari avranno i +gambi in su e le voci pari i gambi in giù. I gambi per le voci 1 e 2 sono +giusti, ma in questo brano i gambi della voce 3 dovrebbero essere in +giù. Possiamo correggere semplicemente omettendo la voce tre e ponendo la +musica nella voce quattro. Si può fare aggiungendo semplicemente un altro +paio di @code {\\}: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des2 } + >> | + 1 | +} +@end lilypond + +@noindent +Possiamo vedere che questo corregge la direzione del gambo, ma espone +a un problema talvolta presente con le voci multiple: i gambi delle note +in una voce possono collidere con le teste delle note di un'altra voce. Nel +disporre le note, LilyPond permette alle note o agli accordi di due diverse +voci di occupare la stessa colonna verticale della nota purché i gambi siano +in direzioni opposte, ma le note della terza e quarta voce vengono +spostate, se necessario, per evitare la collisione tra le teste. Questo +di solito funziona bene, ma in questo esempio le note della voce più bassa, +con le impostazioni predefinite, appaiono chiaramente disposte in una posizione +non ottimale. LilyPond fornisce molti modi per aggiustare la collocazione +orizzontale delle note. Per ora, non siamo ancora pronti a cercare di +correggere questo problema, dunque dovremo aspettare fino a una +prossima sezione -- si veda la proprietà @code{force-hshift} in @ref{Fixing +overlapping notation}. + + +@seealso +Guida alla notazione: @ruser{Multiple voices}. + + +@node Definire esplicitamente le voci +@subsection Definire esplicitamente le voci +@translationof Explicitly instantiating voices + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex contesti della voce, creazione dei + +I contesti della voce possono anche essere creati manualmente, +all'interno di un blocco @code{<< >>} che crea musica polifonica, usando +@code{\voiceOne} ... @code{\voiceFour} per indicare le direzioni desiderate +per gambi, legature, etc. Nelle partiture più grandi questo metodo +è più chiaro, perché fa sì che le voci possano essere separate e nominate +in modo più descrittivo. + +Nello specifico, il costrutto @code{<< \\ >>} usato nella sezione +precedente: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +è equivalente a + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Entrambi hanno come risultato + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex voci, tornare alla voce singola +@cindex tornare alla voce singola + +I comandi @code{\voiceXXX} impostano le direzioni di gambi, legature di +portamento, legature di valore, articolazioni, annotazioni, punti di +aumentazione di note puntate e diteggiature. @code{\voiceOne} e @code{\voiceThree} +fanno sì che questi oggetti siano rivolti verso l'alto, mentre @code{\voiceTwo} e +@code{\voiceFour} fanno sì che puntino verso il basso. Questi comandi producono +anche uno spostamento orizzontale per ogni voce quando si crei la necessità +di evitare collisioni tra le teste. Il comando @code{\oneVoice} +riporta i valori alle normali impostazioni di una singola voce. + +Vediamo tramite alcuni semplici esempi quali effetti esattamente +@code{\oneVoice}, @code{\voiceOne} e @code{voiceTwo} hanno su +markup, legature di valore, legature di portamento, e dinamica: + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +Vediamo adesso, usando l'esempio della sezione precedente, tre modi +diversi di scrivere uno stesso passo di musica polifonica, e i +rispettivi vantaggi, a seconda delle circostanze. + +Un'espressione che appare direttamente in un @code{<< >>} appartiene +alla voce principale (ma, attenzione: @strong{non} in un costrutto +@code{<< \\ >>}). Questo metodo è utile quando le altre voci entrano +mentre la voce principale sta già suonando. Ecco una versione più corretta +del nostro esempio. Le note a rombi rossi mostrano che la melodia +principale si trova ora nel contesto di una voce singola, e questo fa +sì che sia possibile disegnare una legatura di frase sopra di esse. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b c2 | + } + >> +} +@end lilypond + +@cindex annidare le espressioni musicali +@cindex annidare i costrutti simultanei +@cindex annidare le voci +@cindex voci temporanee +@cindex voci, annidare + +Sono possibili costrutti polifonici annidati più fittamente, e se una voce +appare solo brevemente questo potrebbe essere un modo più semplice +di scrivere lo spartito: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ | + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b c2 | + } + >> + } + >> +} +@end lilypond + +@cindex note spaziatrici + +Questo metodo di annidare nuove voci in breve è utile quando solo piccole +parti della musica sono polifoniche, ma quando la polifonia è impiegata +largamente in tutta la parte può essere più chiaro ricorrere a voci multiple, +usando le note spaziatrici per saltare le parti in cui una delle voci è muta, +come nel seguente esempio: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b c2 | + } +>> +@end lilypond + +@subsubheading Note columns + +@cindex colonna delle note +@cindex collisioni di note +@cindex note, collisioni di +@cindex comandi di spostamento +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +Le note maggiormente ravvicinate all'interno di un accordo o quelle che +compaiono nello stesso momento in voci diverse sono disposte in due, e +talvolta più, colonne, per impedire la sovrapposizione delle teste. Esse +vengono chiamate colonne delle note. Le singole colonne di ognuna delle +voci sono indipendenti, e lo scarto adottato nella voce in uso è determinato +dal distanziamento delle colonne nei casi in cui altrimenti si determinerebbe +una collisione. Si può vedere nell'esempio in basso. Nella seconda battuta +il Do della seconda voce è spostato a destra del Re nella prima voce, e +nell'ultimo accordo il Do nella terza voce è spostato anch'esso a destra +delle altre note. + +I comandi @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, e +@code{\shiftOff} specificano il grado con cui le note e gli accordi +della voce debbano essere spostati in caso di collisione. L'impostazione +predefinita prevede che le voci esterne (di norma le voci uno e due) +abbiano @code{\shiftOff} attivato, mentre le voci interne (terza e quarta) +abbiano @code{\shiftOn} attivato. Quando uno spostamento viene applicato, +le voci una e tre vengono spostate a destra e le voci due e quattro a sinistra. + +@code{\shiftOnn} e @code{\shiftOnnn} definiscono ulteriori livelli di +scarto che possono essere temporaneamente specificati per risolvere +le collisioni in situazioni complesse -- si veda @ref{Real music example}. + +Una colonna di note può contenere soltanto una nota (o accordo) di una +voce con gambi in su e una nota (o accordo) di una voce con gambi in +giù. Se note di due voci che hanno i gambi nella stessa direzione +sono poste nella stessa posizione ed entrambe le voci non hanno uno +spostamento specificato oppure ne hanno uno dello stesso tipo, si +produrrà il messaggio di errore @qq{Too many clashing note columns}. + + +@seealso +Guida alla notazione: @ruser{Multiple voices}. + + +@node Voci e musica vocale +@subsection Voci e musica vocale +@translationof Voices and vocals + +La musica vocale presenta una difficoltà in più: occorre combinare due +espressioni -- note e testo. + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics, creazione di un contesto +@cindex testo, creazione di un contesto +@cindex testo, collegare a una voce + +Abbiamo già visto il comando @code{\addlyrics@{@}}, che ben si comporta +con le partiture semplici. Tuttavia, questa tecnica è piuttosto +limitata. Per musica più complessa, occorre introdurre il testo in +un contesto @code{Lyrics} usando @code{\new Lyrics} e collegando +esplicitamente il testo alle note con @code{\lyricsto@{@}}, tramite +il nome assegnato alla voce. + +@lilypond[quote,verbatim] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +Si noti che il testo deve essere collegato a un contesto @code{Voice}, +@emph{non} a un contesto @code{Staff}. Questo è un caso in cui è +necessario creare esplicitamente contesti @code{Staff} e @code{Voice}. + +@cindex testo e travatura +@cindex travatura e testo +@funindex \autoBeamOff +@funindex autoBeamOff + +La disposizione automatica delle travature predefinita di LilyPond funziona +bene per la musica strumentale, ma non altrettanto per la musica con testi, +dove le travature o non sono usate affatto o servono a indicare la presenza +di melismi nel testo. Nell'esempio precedente usiamo il comando +@code{\autoBeamOff} per disattivare la travatura automatica. + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode +@cindex struttura di una partitura vocale +@cindex rigo per un coro + +Riprendiamo l'esempio precedente di Judas Maccabæus per presentare +questa tecnica più flessibile. Innanzitutto lo rimaneggiamo per +usare delle variabili per mezzo delle quali la musica e il testo +possano essere separate dalla struttura del rigo. Inseriamo anche +una parentesi ChoirStaff. Il testo deve essere introdotto da +@code{\lyricmode} per assicurare che siano interpretati come testo +invece che come musica. + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +Questa è la struttura di base di tutte le partiture vocali. Si possono +aggiungere più righi, più voci in ogni rigo, più versi nei testi, e +le variabili contenenti la musica possono essere poste in file +separati se dovessero diventare troppo lunghe. + +@cindex struttura di un inno +@cindex SATB, struttura di +@cindex vocale, partitura, varie strofe +@cindex varie strofe vocali +@cindex strofe, vocali, varie + +Ecco un esempio della prima linea di un inno con quattro +strofe, impostate su SATB. In questo caso le parole per tutte e quattro +le parti sono le stesse. Si noti l'uso delle variabili per separare +la notazione musicale e le parole dalla struttura del rigo. Si veda anche +come una variabile, che abbiamo deciso di chiamare @q{keyTime}, venga usata +per avere vari comandi a disposizione all'interno dei due righi. In altri +esempi questo viene spesso chiamato @q{global}. + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + +@seealso +Guida alla notazione: @ruser{Vocal music}. + + +@node Contesti e incisori +@section Contesti e incisori +@translationof Contexts and engravers + +I contesti e gli incisori sono stati menzionati in modo informale +nelle sezioni precedenti; ora dobbiamo approfondire +questi concetti, perché sono importanti nell'ottimizzazione +dell'output di LilyPond. + + +@menu +* I contesti:: +* Creare i contesti:: +* Gli incisori:: +* Modificare le proprietà di contesto:: +* Aggiungere e togliere gli incisori:: +@end menu + +@node I contesti +@subsection I contesti +@translationof Contexts explained + +@cindex contesti, spiegazione dei + +Quando la musica viene elaborata, molti elementi notazionali che non +compaiono esplicitamente nel file di input devono essere aggiunti +nell'output. Ad esempio, si confrontino l'input e l'output del +seguente esempio: + +@lilypond[quote,verbatim,relative=2] +cis4 cis2. | a4 a2. | +@end lilypond + +L'input è alquanto essenziale, ma nell'output sono stati aggiunti stanghette, +alterazioni, l'armatura di chiave e il tempo. Quando LilyPond @emph{interpreta} +l'input l'informazione musicale viene analizzata da sinistra a destra, proprio +come un musicista legge uno spartito. Mentre legge l'input, il programma +ricorda dove si trovano i confini della misura, e quali altezze richiedono +espliciti accidenti. Questa informazione deve essere conservata a diversi +livelli. Ad esempio, un accidente influisce solo su un singolo rigo, mentre +una stanghetta deve essere sincronizzata lungo l'intera partitura. + +All'interno di LilyPond, queste regole e pezzi di informazione sono raggruppati +nei @emph{Contesti}. Abbiamo già presentato il contesto @code{Voice}. +Altri contesti sono @code{Staff} e @code{Score}. I contesti sono strutturati +gerarchicicamente per riflettere la natura gerarchica di una partitura musicale. +Ad esempio: un contesto @code{Staff} può contenere molti contesti @code{Voice}, +e un contesto @code{Score} può contenere molti contesti @code{Staff}. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Ogni contesto è responsabile di far rispettare alcune regole di notazione, +creare alcuni oggetti della notazione e conservare le proprietà +associate. Ad esempio, il contesto @code{Voice} può introdurre +un'alterazione e poi il contesto @code{Staff} mantiene la regola per +mostrare o sopprimere l'alterazione per il resto della misura. + +Un altro esempio: la sincronizzazione delle stanghette è gestita, per +impostazione predefinita, nel contesto @code{Score}. Tuttavia, in +alcune forme musicali potremmo non volere che le stanghette siano +sincronizzate -- si consideri una partitura polimetrica in 4/4 e 3/4. In +questi casi, dobbiamo modificare le impostazioni predefinite dei +contesti @code{Score} e @code{Staff}. + +Per spartiti molto semplici, i contesti vengono creati implicitamente, e +non è necessario occuparsene. Ma per brani più ampi, come qualsiasi +cosa abbia più di un rigo, devono essere creati esplicitamente per +essere sicuri di avere tutti i righi necessari, e che questi siano +nel giusto ordine. Per scrivere brani che utilizzano una +notazione speciale, di solito si modificano i contesti esistenti, o +addirittura se ne creano di completamente nuovi. + +Oltre ai contesti @code{Score,} @code{Staff} e @code{Voice} ci sono +contesti che stanno tra i livelli della partitura (score) e del +rigo (staff) per controllare i gruppi di pentagrammi, come +i contesti @code{PianoStaff} e @code{ChoirStaff}. Ci sono anche +contesti alternativi per il rigo e la voce, e contesti per il +testo, le percussioni, la tastiera, il basso continuo, etc. + +I nomi di tutti i tipi di contesto sono formati da una o più +parole, e ogni parola viene unita immediatamente alla parola +precedente senza trattini o underscore bensì con la prima lettera +maiuscola: ad esempio, @code{GregorianTranscriptionStaff}. + + +@seealso +Guida alla notazione: @ruser{Contexts explained}. + + +@node Creare i contesti +@subsection Creare i contesti +@translationof Creating contexts + +@funindex \new +@funindex new +@cindex nuovi contesti +@cindex creazione di contesti +@cindex contesti, creazione di + +In un file di input un blocco della partitura, introdotto dal comando @code{\score}, +contiene un'espressione musicale singola e una definizione di output +associata (o un blocco @code{\layout} o un blocco @code{\midi}). +Di solito si lascia che il contesto @code{Score} sia creato automaticamente +quando inizia l'interpretazione di quell'espressione musicale. + +Per le partiture che hanno una sola voce e un solo rigo, si può lasciare che +i contesti @code{Voice} e @code{Staff} siano creati automaticamente, ma per +le partiture più complesse è necessario crearli manualmente. Il comando +più semplice per farlo è @code{\new}. Viene posto prima di +un'espressione musicale, ad esempio + +@example +\new @var{tipo} @var{espressione-musicale} +@end example + +@noindent +dove @var{tipo} è il nome di un contesto (come @code{Staff} o +@code{Voice}). Questo comando crea un nuovo contesto, e inizia a +interpretare @var{espressione-musicale} all'interno di quel contesto. + +(Si noti che normalmente non è necessario il comando @code{\new Score}, +perché il fondamentale contesto di livello superiore @code{Score} viene creato +automaticamente quando l'espressione musicale all'interno del blocco @code{\score} +viene interpretata. L'unica ragione per creare un contesto @code{Score} +esplicitamente con @code{\new Score} è di inserire un blocco +@code{\with} dove si possono specificare uno o più valori delle proprietà +di contesto, predefiniti per tutto lo spartito.. Le informazioni su come +usare i blocchi @code{\with} si trovano sotto il titolo +@qq{Setting context properties with @code{\\with} } in +@ref{Modifying context properties}.) + +@warning{@bs{}@code{new Score} non dovrebbe essere usato perché il fondamentale +contesto di livello superiore @code{Score} viene creato automaticamente quando +l'espressione musicale all'interno del blocco @bs{}@code{score} viene +interpretata. I valori predefiniti delle proprietà di contesto validi per tutta +la partitura possono essere modificati nel blocco @bs{}@code{layout}. Vedi +@ref{Modifying context properties}} + +Nelle sezioni precedenti hai già visto molti esempi pratici della creazione +di nuovi contesti @code{Staff} e @code{Voice}, ma per ricordarti +come questi comandi vengano usati in pratica, ecco un esempio +di musica vera e propria: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \clef "treble" + \key g \minor + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. | + d4 ees16 c8. | + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \clef "bass" + \key g \minor + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, | + g8 ees, | + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees | + g4 ees | + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Si noti che tutte le asserzioni che aprono un blocco o con delle +parentesi graffe, @code{@{}, o con delle parentesi angolari doppie, @code{<<}, +sono indentate di due spazi, e la parentesi di chiusura corrispondente +è indentata esattamente dello stesso spazio. Pur non essendo un +requisito indispensabile, seguire questa pratica ridurrà enormemente +il numero di errori da @q{parentesi spaiate}, ed è quindi fortemente +consigliato. Permette di vedere a colpo d'occhio la struttura della +musica, e qualsiasi parentesi spaiata sarà facilmente riconoscibile. +Si noti anche come il rigo LH faccia uso di parentesi angolari doppie +perché richiede due voci, mentre il rigo RH è costituito da +una singola espressione musicale compresa tra parentesi +graffe perché richiede una sola voce.) + +@cindex contesti, dare un nome +@cindex dare un nome ai contesti + +Il comando @code{\new} può anche dare un nome identificativo al +contesto per distinguerlo da altri contesti dello stesso tipo, + +@example +\new @var{tipo} = @var{id} @var{espressione-musicale} +@end example + +Si noti la distinzione tra il nome del tipo di contesto, +@code{Staff}, @code{Voice}, etc, e il nome identificativo di un +particolare esempio di quel tipo, che può essere qualsiasi sequenza di +lettere inventata dall'utente. Nel nome identificativo si possono usare +anche numeri e spazi, ma in questo caso deve essere compreso tra virgolette, +ovvero @code{\new Staff = "MioPentagramma 1" @var{espressione-musicale}}. +Il nome identificativo viene utilizzato per riportare a quel +particolare esempio di un contesto. Abbiamo visto questo utilizzo +nella sezione sul testo, si veda @ref{Voci e musica vocale}. + + +@seealso +Guida alla notazione: @ruser{Creating contexts}. + + +@node Gli incisori +@subsection Gli incisori +@translationof Engravers explained + +@cindex incisori + +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 +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. + +Gli incisori vivono ed operano all'interno dei Contesti. Incisori come +il @code{Metronome_mark_engraver}, la cui azione e il cui output si applicano +alla partitura nel suo complesso, operano nel contesto di livello più superiore -- il +contesto @code{Score}. + +Gli incisori @code{Clef_engraver} e @code{Key_engraver} devono invece +trovarsi in ogni contesto @code{Staff}, poiché righi diversi potrebbero +richiedere diverse chiavi e tonalità. + +Gli incisori @code{Note_heads_engraver} e @code{Stem_engraver} abitano +ogni contesto @code{Voice}, il contesto che si trova al livello più +basso di tutti. + +Ogni incisore elabora gli oggetti specifici associati alla sua funzione, e +gestisce le proprietà che a quella funzione si riferiscono. Queste proprietà, +come le proprietà associate ai contesti, possono essere modificate per +cambiare il funzionamento dell'incisore o l'aspetto di quegli elementi +nella partitura. + +Gli incisori hanno tutti dei nomi composti formati da parole che +descrivono la loro funzione. Solo la prima parola inizia con una maiuscola, +e il resto è collegato insieme con dei trattini bassi. Quindi +l'incisore @code{Staff_symbol_engraver} ha il compito di creare le linee del +pentagramma, il @code{Clef_engraver} determina e definisce il punto +di riferimento dell'altezza sul rigo disegnando il simbolo di una chiave. + +Ecco alcuni degli incisori più utilizzati insieme alla loro +funzione. Vedrai che di solito è facile indovinare la funzione a +partire dal nome, o viceversa. + +@multitable @columnfractions .3 .7 +@headitem Incisore + @tab Funzione +@item Accidental_engraver + @tab Crea le alterazioni, le alterazioni di precauzione e di cortesia +@item Beam_engraver + @tab Incide le travature +@item Clef_engraver + @tab Incide le chiavi +@item Completion_heads_engraver + @tab Separa le note che attraversano le stanghette +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Crea le forcelle e i testi relativi alla dinamica +@item Forbid_line_break_engraver + @tab Impedisce l'a capo se un elemento musicale è ancora attivo +@item Key_engraver + @tab Crea l'armatura di chiave +@item Metronome_mark_engraver + @tab Incide il tempo metronomico +@item Note_heads_engraver + @tab Incide le teste delle note +@item Rest_engraver + @tab Incide le pause +@item Staff_symbol_engraver + @tab Incide le cinque linee (predefinite) del pentagramma +@item Stem_engraver + @tab Crea i gambi e i tremoli su singoli gambi +@item Time_signature_engraver + @tab Crea l'indicazione di tempo +@end multitable + +@smallspace + +Vedremo in seguito come cambiare l'output di Lilypond +modificando il comportamento degli incisori. + + +@seealso +Guida al funzionamento interno: @rinternals{Engravers and Performers}. + + +@node Modificare le proprietà di contesto +@subsection Modificare le proprietà di contesto +@translationof Modifying context properties + +@cindex contesto, proprietà del +@cindex contesto, proprietà del, modificare +@cindex modificare le proprietà del contesto +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +I contesti si occupano di tenere i valori di un certo numero di +@emph{proprietà} del contesto. Molte di queste possono essere cambiate +per influenzare l'interpretazione dell'input e quindi modificare +l'aspetto dell'output. Per cambiarle si usa il comando +@code{\set}. Questo assume la seguente forma + +@example +\set @emph{NomeDelContesto}.@emph{nomeDellaProprietà} = #@emph{valore} +@end example + +Dove il @emph{NomeDelContesto} è di solito @code{Score}, +@code{Staff} o @code{Voice}. Può essere omesso, e in questo +caso viene considerato il contesto attuale (solitamente @code{Voice}). + +I nomi delle proprietà del contesto consistono in parole unite +insieme e senza lineette o trattini bassi, e solo la prima +parola inizia con una lettera maiuscola. Ecco alcuni esempi +di quelle più usate comunemente. Ma ne esistono molte altre. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem nomeDellaProprietà + @tab Tipo + @tab Funzione + @tab Valore di esempio +@item extraNatural + @tab Booleano + @tab Se è vero, mette i segni di bequadro prima degli accidenti + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Intero + @tab Imposta il numero della battuta corrente + @tab @code{50} +@item doubleSlurs + @tab Booleano + @tab Se è vero, stampa le legature di portamento sia sopra che sotto le note + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Testo + @tab Imposta il nome da inserire all'inizio del rigo + @tab @code{"Cello I"} +@item fontSize + @tab Reale + @tab Aumenta o riduce la dimensione del carattere + @tab @code{2.4} +@item stanza + @tab Testo + @tab Imposta il testo da stampare prima dell'inizio di una strofa + @tab @code{"2"} +@end multitable + +@noindent +mentre un Booleano è o Vero (@code{#t}) o Falso (@code{#f}), +un Intero è un numero intero positivo, un Reale è un numero +decimale positivo o negativo, e il testo è racchiuso tra +virgolette. Si noti la presenza del segno cancelletto, +(@code{#}), in due punti diversi -- come parte del valore Booleano +prima di @code{t} o @code{f}, e prima del @emph{valore} +nell'affermazione @code{\set}. Dunque quando si inserisce un valore +Booleano bisogna scrivere due cancelletti, ad esempio @code{##t}. + +@cindex proprietà che operano nei contesti +@cindex impostare le proprietà all'interno dei contesti + +Prima di poter impostare una qualsiasi di queste proprietà dobbiamo sapere +in quale contesto esse operino. Talvolta questo è ovvio, +ma talvolta può risultare complicato. Se viene specificato il +contesto sbagliato, non viene generato alcun messaggio di errore, ma l'azione +desiderata non avrà luogo. Ad esempio, la proprietà +@code{instrumentName} risiede ovviamente nel contesto @code{Staff}, poiché +è il pentagramma a dover essere nominato. +Nell'esempio seguente viene etichettato il primo pentagramma, ma non il secondo, +perché abbiamo omesso il nome del contesto. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c2 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d2 d + } +>> +@end lilypond + +Ricorda che il nome di contesto predefinito è @code{Voice}, dunque il +secondo comando @code{\set} imposta la proprietà @code{instrumentName} nel +contesto @code{Voice} col valore @qq{Alto}, ma dato che LilyPond non trova +tale proprietà nel contesto @code{Voice}, non ha avuto luogo +alcuna altra azione. Questo non è un errore, e nessun messaggio di +errore viene riportato nel file di log. + +Analogamente, se il nome della proprietà è stato scritto male, non viene +generato alcun messaggio di errore, e ovviamente l'azione desiderata non può essere +eseguita. Infatti, col comando @code{\set} puoi impostare qualsiasi @q{proprietà} +(anche inventata) usando qualsiasi nome che ti piaccia in qualsiasi contesto +esistente. Ma se LilyPond non conosce il nome, allora non verrà intrapresa +alcuna azione. Alcuni editor di testo che hanno uno speciale supporto per i file +di input di LilyPond presentano i nomi delle proprietà con una lista scorrevole +al passaggio del mouse, come JEdit col plugin LilyPondTool, oppure +evidenziano in modo diverso i nomi delle proprietà non conosciuti, come fa ConTEXT. +Se non usi un editor con queste funzionalità, è consigliabile controllare il nome +delle proprietà nella Guida al funzionamento interno: si veda +@rinternals{Tunable context properties}, o @rinternals{Contexts}. + +La proprietà @code{instrumentName} funzionerà soltanto se inserita nel contesto +@code{Staff}, ma alcune proprietà possono essere collocate in più di un contesto. +Ad esempio, la proprietà @code{extraNatural} è impostata di default sul +valore ##t (vero) su tutti i righi. Se viene impostata su ##f (falso) in uno +specifico contesto @code{Staff} si applica solo alle alterazioni presenti su +quel rigo. Se impostata su falso nel contesto @code{Score} si applica a tutti +i righi. + +Quindi in questo modo si disattiva il bequadro su un rigo: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +e in questo modo si disattiva in tutti i righi: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +Un altro esempio: se la proprietà @code{clefOctavation} viene posta +nel contesto @code{Score}, cambia immediatamente il valore +dell'ottavazione in tutti i righi presenti e imposta un nuovo +valore predefinito che sarà applicato a tutti i righi. + +Il comando opposto, @code{\unset}, di fatto rimuove la proprietà +dal contesto, e questo fa sì che molte proprietà +tornino al valore predefinito. Solitamente @code{\unset} non è +necessario dal momento che un nuovo comando @code{\set} permetterà +di ottenere quanto si desidera. + +I comandi @code{\set} e @code{\unset} possono trovarsi in qualsiasi +punto del file di input e avranno effetto dal momento in cui si +incontrano fino alla fine della partitura o finché la proprietà non +viene attivata (@code{\set}) o disattivata (@code{\unset}) di nuovo. +Proviamo a cambiare varie volte la dimensione del font, che influisce (tra +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] +c4 d +% make note heads smaller +\set fontSize = #-4 +e4 f | +% make note heads larger +\set fontSize = #2.5 +g4 a +% return to default size +\unset fontSize +b4 c | +@end lilypond + +Abbiamo visto come impostare i valori di diversi tipi di +proprietà. Si note che gli interi e i numeri sono sempre preceduti +da un segno di cancelletto, @code{#}, mentre un valore vero o falso è +specificato con @code{##t} e @code{##f}, con due cancelletti. Una proprietà testuale +dovrebbe essere racchiusa tra virgolette, come abbiamo visto prima, sebbene +vedremo in seguito che in realtà il testo può essere specificato in un +modo molto più generale usando il potente comando @code{\markup}. + +@subsubheading Impostare le proprietà di contesto con @code{\with} + +@funindex \with +@funindex with +@cindex contesto, proprietà del, impostare con \with + +Il valore predefinito delle proprietà di contesto possono essere impostate +anche nel momento in cui il contesto viene creato. Talvolta questo è un +modo più chiaro per specificare il valore della proprietà se questa deve +rimanere fissa per la durata del contesto. Un contesto creato col comando @code{\new} +può essere immediatamente seguito da un blocco @code{\with @{ .. @}} dove +vengono impostati i valori predefiniti della proprietà. Ad esempio, se vogliamo +eliminare la stampa del bequadro per l'estensione di un rigo possiamo scrivere: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +così: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + gis4 ges aes ais + } + } + \new Staff \with { extraNatural = ##f } { + \relative c'' { + gis4 ges aes ais + } + } +>> +@end lilypond + +Si possono ancora cambiare dinamicamente le proprietà impostate in questo modo +usando @code{\set}, mentre con @code{\unset} si possono riportare al valore +predefinito impostato nel blocco @code{\with}. + +@cindex fontSize, impostazione predefinita e impostazione manuale + +Quindi se la proprietà @code{fontSize} viene inserita in una +proposizione @code{\with}, imposta il valore predefinito +della dimensione del font. Se viene in seguito modificato con @code{\set}, +questo nuovo valore predefinito può essere recuperato col comando +@code{\unset fontSize}. + +@subsubheading Impostare le proprietà di contesto con @code{\context} + +@cindex contesto, proprietà del, impostare con \context +@funindex \context +@funindex context + +I valori delle proprietà di un contesto possono essere impostate in @emph{tutti} +i contesti di un particolare tipo, così come in tutti i contesti @code{Staff}, con un +solo comando. Il tipo di contesto viene identificato attraverso il +suo nome, come @code{Staff}, preceduto da una barra inversa (backslash): @code{\Staff}. +La dichiarazione che imposta il valore della proprietà è la stessa che +abbiamo visto nel blocco @code{\with}, introdotto prima. Viene posta in +un blocco @code{\context} all'interno di un blocco @code{\layout}. Ogni +blocco @code{\context} avrà effetto su tutti i contesti del tipo specificato +nel blocco @code{\score} o @code{\book} nel quale il blocco +@code{\layout} si trova. Ecco un esempio per mostrare la struttura: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond + +@noindent +Le proprietà di contesto impostate in questo modo possono essere sovrascritte per +alcuni particolari contesti attraverso asserzioni in un blocco @code{\with}, e tramite +comandi @code{\set} incorporati nelle asserzioni musicali. + + +@seealso +Guida alla notazione: +@ruser{Changing context default settings}, +@ruser{The set command}. + +Guida al funzionamento interno: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Aggiungere e togliere gli incisori +@subsection Aggiungere e togliere gli incisori +@translationof Adding and removing engravers + +@cindex incisori, aggiungere +@cindex aggiungere gli incisori +@cindex incisori, rimuovere +@cindex rimuovere gli incisori + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +Abbiamo visto che ciascuno dei contesti contiene vari incisori, ognuno +dei quali ha il compito di produrre una parte specifica dell'output, +come stanghette, righi, teste, gambi, etc.. Se un incisore +viene rimosso da un contesto, non può più produrre il suo +output. Si tratta di un metodo sbrigativo per modificare l'output, e talvolta +può essere utile. + +@subsubheading Cambiare un singolo contesto + +Per rimuovere un incisore da un singolo contesto usiamo il +comando @code{\with} posto subito dopo il comando di creazione del +contesto, come esposto nella sezione precedente. + +A titolo di esempio, ripetiamo un esempio della sezione precedente +rimuovendo le linee del rigo. Ricorda che le linee del rigo vengono +create dall'incisore @code{Staff_symbol_engraver}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % make note heads smaller + e4 f | + \set fontSize = #2.5 % make note heads larger + g4 a + \unset fontSize % return to default size + b4 c | +} +@end lilypond + +@cindex ambitus, incisore dell' + +Gli incisori possono essere aggiunti anche a contesti individuali. +Il comando per farlo è + +@code{\consists @var{Engraver_name}}, + +@noindent +posto all'interno di un blocco @code{\with}. Alcune partiture vocali hanno +un ambitus collocato all'inizio del pentagramma per indicare l'intervallo tra la nota +più grave e quella più acuta in quella parte -- si veda @rglos{ambitus}. L'ambitus +viene creato dall'incisore @code{Ambitus_engraver}, che di norma non è incluso in +alcun contesto. Se lo aggiungiamo al contesto @code{Voice}, calcola l'intervallo +di quella voce soltanto: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +ma se aggiungiamo l'incisore ambitus al contesto @code{Staff}, calcola +l'intervallo di tutte le note in tutte le voci di quel pentagramma: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@subsubheading Modificare tutti i contesti dello stesso tipo + +@funindex \layout +@funindex layout + +Gli esempi precedenti mostrano come rimuovere o aggiungere degli incisori +a contesti individuali. È anche possibile rimuovere o aggiungere gli +incisori per ogni contesto di un particolare tipo inserendo i comandi +nel contesto appropriato in un blocco @code{\layout}. Ad esempio, se +volessimo mostrare un ambitus per ogni pentagramma in una partitura +di quattro pentagrammi, potremmo scrivere + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +I valori delle proprietà di un contesto possono essere impostati anche +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 +@translationof Extending the templates + +Hai letto il tutorial, sai come scrivere la musica, comprendi +i concetti fondamentali. Ma come puoi ottenere i +pentagrammi che desideri? Puoi trovare molti +modelli (vedi @ref{Templates}) da cui partire. +Ma se ti serve qualcosa che non è presente lì? Continua a leggere. + +@menu +* Soprano e violoncello:: +* Partitura vocale a quattro parti SATB:: +* Scrivere una partitura da zero:: +* Ridurre l'input grazie a variabili e funzioni:: +* Partiture e parti:: +@end menu + +@node Soprano e violoncello +@subsection Soprano e violoncello +@translationof Soprano and cello + +@cindex modello, modificare +@cindex modificare i modelli + +Parti dal modello che sembra più simile a ciò che vuoi +ottenere. Diciamo che vuoi scrivere qualcosa per soprano e +violoncello. In questo caso, inizieremmo col modello @q{Note e testo} (per +la parte di soprano). + +@example +\version @w{"@version{}"} + +melodia = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +testo = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melodia + @} + \new Lyrics \lyricsto "one" \testo + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Ora vogliamo aggiungere una parte per violoncello. Vediamo l'esempio @q{Solo note}: + +@example +\version @w{"@version{}"} + +melodia = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melodia + \layout @{ @} + \midi @{ @} +@} +@end example + +Non ci servono due comandi @code{\version}. Ci servirà invece la +sezione @code{melodia}. Non vogliamo due sezioni @code{\score} +-- se avessimo due @code{\score}, le due parti sarebbero separate. +Ma le vogliamo insieme, come un duetto. All'interno della sezione +@code{\score}, non ci servono due @code{\layout} o due @code{\midi}. + +Se semplicemente tagliamo e incolliamo la sezione @code{melodia}, finiremo +con l'avere due definizioni @code{melodia}. Questo non produrrebbe un +errore, ma la seconda definizione sarebbe usata per entrambe le melodie. +Dunque rinominiamole per distinguerle. Chiameremo la sezione +per il soprano @code{musicaSoprano} e la sezione per il +violoncello @code{musicaVioloncello}. Se facciamo questo, rinominiamo anche +@code{testo} in @code{testoSoprano}. Ricorda di rinominare entrambe +le occorrenze di tutti questi nomi -- sia la definizione iniziale (la +parte @code{melody = \relative c' @{ }) sia l'uso del nome (nella +sezione @code{\score}). + +Cambiamo anche il pentagramma della parte per violoncello -- +che normalmente usa la chiave di basso. Daremo anche al violoncello +delle note diverse. + +@example +\version @w{"@version{}"} + +musicaSoprano = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +testoSoprano = \lyricmode @{ + Aaa Bee Cee Dee +@} + +musicaVioloncello = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \musicaSoprano + @} + \new Lyrics \lyricsto "one" \testoSoprano + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +L'aspetto è promettente, ma la parte del violoncello non apparirà nella +partitura -- perché non l'abbiamo inserita nella sezione @code{\score}. Se +vogliamo che la parte del violoncello compaia sotto quella del soprano, +dobbiamo aggiungere + +@example +\new Staff \musicaVioloncello +@end example + +@noindent +sotto la parte del soprano. Dobbiamo anche aggiungere @code{<<} e +@code{>>} intorno alla musica -- che dice a LilyPond che c'è più di +una cosa (in questo caso, due @code{Staff}) che sono +simultanei. Lo @code{\score} ora appare così: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "one" @{ + \autoBeamOff + \musicaSoprano + @} + \new Lyrics \lyricsto "one" \testoSoprano + >> + \new Staff \musicaVioloncello + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +L'aspetto è un po' confuso; l'indentazione non è pulita. Ma si +può correggere facilmente. Ecco il template completo per soprano +e violoncello. + +@lilypond[quote,verbatim,ragged-right,addversion] +musicaSoprano = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +testoSoprano = \lyricmode { + Aaa Bee Cee Dee +} + +musicaVioloncello = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \musicaSoprano + } + \new Lyrics \lyricsto "one" \testoSoprano + >> + \new Staff \musicaVioloncello + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +I modelli da cui partire si trovano nell'appendice @q{Modelli}, +si veda @ref{Single staff}. + + +@node Partitura vocale a quattro parti SATB +@subsection Partitura vocale a quattro parti SATB +@translationof Four-part SATB vocal score + +@cindex modelli, SATB +@cindex SATB, modelli + +Gran parte delle partiture vocali di musica scritta per coro misto a +quattro voci con accompagnamento di orchestra, come l'Eliah di Mendelssohn +o il Messiah di Handel, hanno la musica corale e le parole su quattro +righi, una per ognuna delle voci SATB, con in basso una riduzione per +pianoforte dell'accompagnamento orchestrale. Ecco un esempio tratto +dal Messiah di Handel: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} + +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords + +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords + +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords + +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} + +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +Nessun modello fornisce esattamente questo assetto. Quello più simile +è @q{Partitura vocale SATB e riduzione automatica per pianoforte} -- si veda @ref{Vocal +ensembles} -- ma abbiamo bisogno di modificare l'assetto e aggiungere +un accompagnamento per pianoforte che non sia derivato automaticamente dalle +parti vocali. Le variabili che si riferiscono alla musica e alle parole per +le parti vocali vanno bene, ma dovremo aggiungere le variabili per la +riduzione per pianoforte. + +L'ordine con cui i contesti appaiono nel ChoirStaff del modello non +corrisponde all'ordine della partitura vocale mostrata sopra. Dobbiamo +risistemarli in modo che ci siano quattro righi con le parole scritte +direttamente sotto le note di ogni parte. Tutte le voci devono +essere @code{\voiceOne}, che è l'impostazione predefinita, quindi +i comandi @code{\voiceXXX} devono essere tolti. Dobbiamo anche +specificare la chiave di tenore per i tenori. Il modo in cui il testo +viene specificato nel modello non è stato ancora esaminato quindi +dovremo usare un metodo con cui siamo già familiari. Aggiungeremo +anche i nomi per ogni rigo. + +In questo modo il nostro ChoirStaff avrà questo aspetto: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} +>> % end ChoirStaff +@end example + +Poi dobbiamo lavorare sulla parte per pianoforte. Questo +è facile - basta prendere la parte per pianoforte dal +modello @q{Pianoforte solista}: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower +>> +@end example + +e aggiungere le definizioni delle variabili @code{upper} +e @code{lower}. + +ChoirStaff e PianoStaff devono essere uniti attraverso parentesi angolari, +perché vogliamo che siano impilati uno sopra l'altro: + +@example +<< % combine ChoirStaff and PianoStaff one above the other + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Unendo tutto questo e aggiungendo la musica +per le tre battute dell'esempio precedente, otteniamo: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Scrivere una partitura da zero +@subsection Scrivere una partitura da zero +@translationof Building a score from scratch + +@cindex template, scrivere il tuo +@cindex esempio di scrittura di una partitura +@cindex scrivere una partitura, esempio +@cindex partitura, esempio di scrittura + +Dopo aver acquisito un po' di confidenza nella scrittura del codice LilyPond, +potresti scoprire che è più facile costruire una partitura da zero +piuttosto che modificare uno dei modelli. In questo modo puoi +anche sviluppare il tuo stile per adattarlo al tipo di musica che +vuoi. Come esempio, vediamo come mettere insieme la partitura di +un preludio per organo. + +Cominciamo con una sezione d'intestazione. Qui va il titolo, il nome del +compositore, etc, poi vengono le varie definizioni, e infine il +blocco della partitura. Spieghiamo questi prima a grandi linee +e in seguito aggiungeremo i dettagli. + +Useremo le prime due battute del preludio di Bach basato +su @emph{Jesu, meine Freude}, che è scritto per organo con due +manuali e pedaliera. Puoi vedere queste due battute +in fondo a questa sezione. La parte per il manuale superiore ha due +voci, quella inferiore e la pedaliera ne hanno una. Abbiamo quindi bisogno +di quattro definizioni musicali e di una definizione per stabilire il +tempo e la tonalità: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +keyTime = @{ \key c \minor \time 4/4 @} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +Per ora abbiamo usato soltanto una nota spaziatrice, @code{s1}, +invece di musica vera e propria. La aggiungeremo in seguito. + +Ora vediamo cosa dovrebbe andare nel blocco della partitura. Mostriamo soltanto +la struttura del pentagramma che vogliamo. La musica per organo di solito viene +scritta su tre righi, uno per ogni mano e uno per i pedali. I righi della +tastiera dovrebbero essere raggruppati insieme con una graffa, dunque dobbiamo +usare PianoStaff per loro. La parte del primo manuale ha bisogno di due voci +mentre la parte per il secondo manuale di una soltanto. + +@example +\new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context +>> % end PianoStaff context +@end example + +Poi dobbiamo aggiungere un rigo per i pedali. Questo va sotto il +PianoStaff, ma deve svolgersi simultaneamente a quest'ultimo, quindi +abbiamo bisogno delle parentesi angolari intorno ai due gruppi. Altrimenti, +verrà generato un errore nel file di log. È un errore comune che +farai prima o poi! Prova a copiare l'esempio finale alla fine di +questa sezione, togli le parentesi angolari, e compilalo per vedere +quali errori genera. + +@example +<< % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +Non è necessario usare il costrutto simultaneo @code{<< .. >>} per il rigo del +secondo manuale e per quello della pedaliera, poiché contengono solo una +espressione musicale, ma non è male usarlo comunque; usare sempre le parentesi +angolari dopo @code{\new Staff} è una buona abitudine da coltivare nel caso ci +sia più di una voce. Per le Voci, è vero l'opposto: queste devono essere +seguite regolarmente da parentesi graffe @code{@{ .. @}} nel caso in cui la +musica sia composta da diverse variabili che devono essere eseguite +consecutivamente. + +Aggiungiamo questa struttura al blocco della partitura, e aggiustiamo +l'indentazione. Aggiungiamo anche le chiavi appropriate, controlliamo che i +gambi, le legature di portamento e quelle di valore in ogni voce del rigo +superiore puntino nella direzione giusta usando @code{\voiceOne} e +@code{\voiceTwo}, e inseriamo l'armatura di chiave e il tempo per ogni rigo +attraverso la nostra variabile predefinita, @code{\keyTime}. + +@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" << + \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 + +@cindex allungabilità dei righi +@cindex righi, allungabilità + +L'aspetto dei righi dell'organo mostrati sopra è quasi perfetto; tuttavia +c'è un piccolo difetto che non è visibile se si guarda un sistema +singolo soltanto: La distanza tra il rigo della pedaliera e il rigo della mano +sinistra dovrebbe essere all'incirca la stessa distanza tra il rigo della mano +destra e quello della mano sinistra. In particolare, l'allungabilità dei righi +in un contesto @code{PianoStaff} è limitata (in modo che la distanza tra i righi +della mano destra e sinistra non possa diventare eccessiva), e il rigo della +pedaliera dovrebbe comportarsi allo stesso modo. + +@cindex sottoproprietà +@cindex proprietà, sottoproprietà +@cindex oggetti grafici +@cindex grafici, oggetti +@cindex grob + +L'allungabilità dei righi può essere controllata con la proprietà +@code{staff-staff-spacing} dell' @q{oggetto grafico} @code{VerticalAxisGroup} +(gli oggetti grafici vengono comunemente chiamati @q{grob} nella documentazione +di lilypond) -- non preoccuparti dei dettagli in questo momento; in seguito +verrà fornita una spiegazione approfondita. I curiosi possono dare +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} +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. + +@example +\score @{ + << % PianoStaff e Pedal Staff devono essere simultanei + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % imposta l'armatura di chiave e il tempo + \clef "treble" + \new Voice @{ + \voiceOne + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \voiceTwo + \ManualOneVoiceTwoMusic + @} + >> % fine del contesto ManualOne Staff + \new Staff = "ManualTwo" \with @{ + \override VerticalAxisGroup + #'staff-staff-spacing #'stretchability = 5 + @} << + \keyTime + \clef "bass" + \new Voice @{ + \ManualTwoMusic + @} + >> % fine del contesto ManualTwo Staff + >> % fine del contesto PianoStaff + \new Staff = "PedalOrgan" << + \keyTime + \clef "bass" + \new Voice @{ + \PedalOrganMusic + @} + >> % fine di PedalOrgan Staff + >> +@} % fine del contesto Score +@end example + +Questo completa la struttura. Qualsiasi musica per organo a tre righi +avrà una struttura simile, sebbene il numero delle voci +possa variare. Tutto ciò che resta da fare ora +è aggiungere la musica, e combinare tutte le parti insieme. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\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 context + >> +} % end Score context +@end lilypond + +@seealso +Glossario musicale: +@rglosnamed{system,sistema}. + +@node Ridurre l'input grazie a variabili e funzioni +@subsection Ridurre l'input grazie a variabili e funzioni +@translationof Saving typing with variables and functions + +@cindex variabili +@cindex variabili + +Finora hai visto questo tipo di cose: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } +\score { + { + \hornNotes + } +} +@end lilypond + +Potresti anche essere accorto che questo può essere utile nella musica minimalista: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } + +violin = \new Staff { + \fragmentA \fragmentA | + \fragmentB \fragmentA | +} + +\score { + { + \violin + } +} +@end lilypond + +Tuttavia, puoi usare queste variabili (note anche come +macro, o comandi definiti dall'utente) anche per le modifiche manuali: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } + +padText = { \once \override TextScript #'padding = #5.0 } +fthenp =_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b | + \padText + c4.^"hi there!" d8 e' f g d | + c,4.\fthenp b8 c4 c-. | + } +} + +\score { + { + \violin + } + \layout { ragged-right = ##t } +} +@end lilypond + +Chiaramente queste variabili sono utili per ridurre la quantità di +testo da scrivere. Ma vale la pena tenerle in considerazione anche se +le usi una volta sola -- perché riducono la complessità. Vediamo l'esempio +precedente senza alcuna variabile. È molto difficile da leggere, +soprattutto l'ultima linea. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d | + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +Finora abbiamo visto la sostituzione statica -- quando LilyPond +vede @code{\padText}, lo sostituisce con quel che noi abbiamo +definito che sia (ovvero tutto ciò che sta a destra di +@code{padtext=}). + +LilyPond può gestire anche la sostituzione non statica (la puoi +immaginare come una funzione). + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +L'uso di variabili è anche un buon modo per ridurre il lavoro quando +la sintassi di input di LilyPond cambia (vedi +@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 @file{.ly}. + + +@node Partiture e parti +@subsection Partiture e parti +@translationof Scores and parts + +Nella musica orchestrale, tutte le note vengono stampate due volte. Una +volta nella parte per i musicisti e una volta nella partitura completa +per il direttore. Le variabili sono utili se si vuole evitare il doppio +lavoro. La musica viene inserita una volta e salvata all'interno di una +variabile. I contenuti di quella variabile vengono poi usati per generare +sia la parte che l'intera partitura. + +Conviene definire le note in un file speciale. Ad esempio, +supponiamo che il file @file{horn-music.ly} contenga la seguente parte +di un duetto per corno e fagotto + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e4 d | +@} +@end example + +@noindent +Poi una parte individuale si ottiene inserendo il seguente codice in un file + +@example +\include "horn-music.ly" + +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +La linea + +@example +\include "horn-music.ly" +@end example + +@noindent +sostituisce i contenuti di @file{horn-music.ly} in quella posizione del +file, quindi @code{hornNotes} è definito dopo. Il comando +@code{\transpose f@tie{}c'} indica che l'argomento, ovvero +@code{\hornNotes}, deve essere trasposto di una quinta ascendente. La tonalità +@code{f} è indicata dalla nota @code{c'}, che corrisponde all'accordatura +di un normale corno francese in@tie{}Fa. La trasposizione può essere vista +nel seguente output + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +Nei brani di insieme, una delle voci non suona per molte +misure. Questo viene indicato da una pausa speciale, la pausa +multi-misura. Si inserisce con una @code{R} maiuscola seguita da una +durata (@code{1}@tie{}per una semibreve, @code{2}@tie{}per una minima, +etc.). Moltiplicando la durata, si possono costruire pause +più lunghe. Ad esempio, questa pausa prende 3@tie{}misure in un +tempo di 2/4 + +@example +R2*3 +@end example + +Quando la parte viene stampata, le pause multiple devono essere +condensate. Si può fare impostando una variabile run-time + +@example +\set Score.skipBars = ##t +@end example + +@noindent +Questo comando imposta la proprietà @code{skipBars} nel contesto +@code{Score} su vero (@code{##t}). Aggiungendo la pausa e questa +opzione alla musica precedente, si arriva al seguente risultato + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + + +Lo spartito si forma combinando tutta la musica insieme. Assumendo che +l'altra voce si trovi in @code{bassoonNotes} nel file +@file{bassoon-music.ly}, lo spartito sarà + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +ovvero + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond + + diff --git a/Documentation/it/learning/preface.itely b/Documentation/it/learning/preface.itely new file mode 100644 index 0000000000..7694b3597d --- /dev/null +++ b/Documentation/it/learning/preface.itely @@ -0,0 +1,63 @@ +@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 Prefazione +@unnumbered Prefazione +@translationof Preface + + +Deve essere stato durante una prova della EJE (Orchestra Giovanile di +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 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. + +Per certi versi, sviluppare un programma per computer è come +imparare a suonare uno strumento. All'inizio, scoprire come funziona è +divertente, e le cose che non si riescono a fare rappresentano uno +stimolo. Dopo l'entusiasmo iniziale, bisogna esercitarsi continuamente. Le scale e +gli studi possono essere noiosi, e se non si è motivati dagli altri – +insegnanti, direttori o il pubblico – si può essere tentati di +smettere. Ma se si continua, gradualmente suonare diventa parte della +propria vita. Alcuni giorni viene naturale, ed è meraviglioso, mentre altri +giorni semplicemente non va, ma si continua a suonare, giorno dopo giorno. + +Come imparare la musica, lavorare su LilyPond può essere un lavoro +noioso, e certi giorni sembra di annaspare in una palude di bug. +Tuttavia è diventato parte della nostra vita, e continuiamo a farlo. +Probabilmente la motivazione più importante è che il nostro programma +fa davvero qualcosa di utile per la gente. Quando navighiamo per la +Rete troviamo molte persone che usano LilyPond e realizzano notevoli +partiture. Ci sembra incredibile, ma è anche molto gratificante. + +I nostri utenti non solo ci danno buone vibrazioni perché usano il +nostro programma, molti di loro ci aiutano anche attraverso +suggerimenti e segnalazioni di bug, quindi vorremmo ringraziare tutti +gli utenti che ci hanno segnalato bug, dato consigli o contribuito +in qualunque altro modo a LilyPond. + +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 +a creare tanta bella musica! + +Han-Wen e Jan + +Utrecht/Eindhoven, Paesi Bassi, Luglio 2002. + diff --git a/Documentation/it/learning/templates.itely b/Documentation/it/learning/templates.itely new file mode 100644 index 0000000000..dc1bf82286 --- /dev/null +++ b/Documentation/it/learning/templates.itely @@ -0,0 +1,241 @@ +@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 diff --git a/Documentation/it/learning/tutorial.itely b/Documentation/it/learning/tutorial.itely new file mode 100644 index 0000000000..a2dc7712b6 --- /dev/null +++ b/Documentation/it/learning/tutorial.itely @@ -0,0 +1,769 @@ +@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 + +@include included/generating-output.itexi + +@c \version "2.14.0" + +@node Tutorial +@chapter Tutorial + +Questo capitolo fornisce un'introduzione di base all'uso di LilyPond. + +@menu +* Compilare un file:: +* Come scrivere i file di input:: +* Gestire gli errori:: +* Come leggere i manuali:: +@end menu + +@node Compilare un file +@section Compilare un file +@translationof Compiling a file + + + +@menu +* Inserire l'input:: +* MacOS X:: +* Windows:: +* Linea di comando:: +@end menu + +@node Inserire l'input +@subsection Inserire l'input +@translationof Entering input + +@cindex compilazione +@cindex esempio iniziale +@cindex esempio, iniziale +@cindex maiuscole, sensibile alle + +@qq{Compilazione} è il termine usato per indicare l'elaborazione di un +file di input in formato LilyPond per produrre uno o più file di output. I +file di output generalmente sono PDF (per la stampa e la visualizzazione), +MIDI (per la riproduzione audio) e PNG (per l'utilizzo online). I file di +input di LilyPond sono semplici file di testo. + +Questo esempio mostra un semplice file di input: + +@example +\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + +L'output grafico è: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@warning{Le note e i testi nel file LilyPond devono essere sempre +scritti tra @w{@strong{@{ parentesi graffe @}}}. Per evitare ambiguità, le +parentesi dovrebbero essere delimitate da degli spazi, a meno che non si +trovino all'inizio o alla fine di una linea. Può darsi che in alcuni esempi +di questo manuale le parentesi verranno omesse, ma non dimenticarle +nella tua musica! Per maggiori informazioni sull'aspetto degli esempi +nel manuale, si veda @ref{Come leggere i manuali}.} + +Inoltre, l'input di LilyPond è @strong{sensibile alle maiuscole}. +@w{@samp{@{ c d e @}}} è un input valido; @w{@samp{@{ C D E @}}} invece +produrrà un messaggio di errore. + +@smallspace + +@subheading Generare l'output + +@c TODO: move index entries +@cindex PDF file +@cindex vedere la musica +@cindex editor di testo + +Come generare l'output di LilyPond dipende dal tuo sistema operativo e dai +programmi che usi. + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (grafico) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (grafico) + +@item +@ref{Linea di comando, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Linea di comando, Tutti i sistemi operativi} (linea di comando) + +@end itemize + +Si noti che sono disponibili molti altri editor di testo con +un miglior supporto per LilyPond. Per maggiori informazioni, si veda +@rweb{Editing facilitato}. + +@warning{La prima volta che si esegue LilyPond la compilazione potrà richiedere +uno o due minuti perché tutti i font di sistema devono essere prima +analizzati. In seguito, LilyPond sarà molto più veloce!} + +@node MacOS X +@subsection MacOS X + +@cindex eseguire LilyPond in MacOS X +@cindex MacOS X, eseguire LilyPond + +@lilypadOSX + + +@node Windows +@subsection Windows + +@cindex eseguire LilyPond in Windows +@cindex Windows, eseguire LilyPond + +@lilypadWindows + + +@node Linea di comando +@subsection Linea di comando +@translationof Command-line + +@cindex eseguire LilyPond in Unix +@cindex Unix, eseguire LilyPond + +@lilypadCommandLine + + +@node Come scrivere i file di input +@section Come scrivere i file di input +@translationof How to write input files + +Questa sezione introduce le basi della sintassi di LilyPond e ha l'obiettivo +di aiutarti ad iniziare a scrivere i file di input. + +@menu +* Notazione semplice:: +* Lavorare sui file di input:: +@end menu + +@node Notazione semplice +@subsection Notazione semplice +@translationof Simple notation + +@cindex notazione semplice +@cindex notazione, semplice + +LilyPond aggiungerà automaticamente alcuni elementi della notazione. Nell'esempio +seguente, abbiamo specificato soltanto quattro note, ma LilyPond +ha aggiunto una chiave, il tempo e le durate. + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +Questo comportamento può essere modificato, ma nella maggior parte dei +casi questi valori sono utili. + + +@subheading Altezze + +@cindex altezze +@cindex modo relativo +@cindex apostrofo +@cindex virgola +@cindex alterazioni e modo relativo +@cindex modo relativo, e alterazioni + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +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 +base al principio per cui la nota che segue deve essere posizionata vicino +a quella precedente, ovvero deve essere posizionata nell'ottava che si trova +entro tre spazi di pentagramma dalla nota precedente. Per iniziare, scriveremo +il pezzo musicale più elementare, una @notation{scala}, in cui ogni nota +si trova entro una distanza di appena uno spazio di pentagramma dalla nota precedente. + +@lilypond[verbatim,quote] +% set the starting point to middle C +\relative c' { + c d e f + g a b c +} +@end lilypond + +La nota iniziale è un @notation{Do centrale}. Ogni nota successiva viene +posta il più vicino possibile alla nota precedente -- in altre parole, la prima +@code{c} è il Do più vicino al Do centrale. Questo è seguito dal Re +più vicino alla nota precedente. Possiamo creare melodie che hanno +intervalli più ampi, sempre usando soltanto il modo @code{\relative}: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +Non è necessario che la prima nota della melodia inizi con +la nota che specifica l'altezza iniziale. Nell'esempio +precedente, la prima nota -- il @code{Re} -- è il Re più vicino al +Do centrale. + +Se si aggiungono (o si rimuovono) apostrofi @code{'} o virgole @code{,} dal +comando @q{@w{@code{@bs{}relative c'}}}, possiamo cambiare l'ottava di +partenza: + +@lilypond[verbatim,quote] +% one octave above middle C +\relative c'' { + e c a c +} +@end lilypond + +Il modo relativo all'inizio può apparire disorientante, ma è il sistema più +semplice per inserire gran parte delle melodie. Vediamo come questo calcolo +relativo funziona in pratica. Se si parte da un Si, che si trova sulla linea +centrale in chiave di violino, si possono raggiungere un Do, un Re e un Mi +entro 3 spazi di pentagramma andando in su, e un La, un Sol e un Fa entro 3 +spazi di pentagramma andando in giù. Quindi se la nota che segue il Si è +un Do, un Re o un Mi, si troverà sopra il Si, mentre il La, il Sol +o il Fa si troveranno sotto. + +@lilypond[verbatim,quote] +\relative c'' { + b c % c is 1 staff space up, so is the c above + b d % d is 2 up or 5 down, so is the d above + b e % e is 3 up or 4 down, so is the e above + b a % a is 6 up or 1 down, so is the a below + b g % g is 5 up or 2 down, so is the g below + b f % f is 4 up or 3 down, so is the f below +} +@end lilypond + +Accade esattamente lo stesso quando qualcuna di queste note ha un +diesis o un bemolle. Le @notation{Alterazioni} sono +@strong{completamente ignorate} nel calcolo della posizione relativa. +Viene fatto lo stesso conteggio dello spazio del pentagramma da +una nota in una qualsiasi altra posizione sul pentagramma. + +Per inserire intervalli che sono più ampi di tre spazi di pentagramma, si può +alzare l'@notation{ottava} aggiungendo al nome della nota una virgoletta +ad apice singolo @code{'} (o apostrofo). Si può abbassare l'ottava +aggiungendo al nome della nota una virgola @code{,}. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +Per cambiare una nota di due (o più!) ottave, si usano multipli di +@code{''} o @code{,,} -- ma stai attento a usare due virgolette ad +apici semplici @code{''} e non quelle a doppi apici @code{"}@tie{}! +@c " - keeps quotes in order for context-sensitive editor -td + +@subheading Durate (ritmi) + +@cindex durate della nota +@cindex durate +@cindex ritmi +@cindex semibreve +@cindex minima +@cindex semiminima +@cindex nota puntata +@cindex notazione delle durate + +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 +una @notation{minima}, @code{4} per una @notation{semiminima} e +così via. Le @notation{Code} vengono aggiunte in automatico. + +Se non si specifica una durata, si usa la durata precedente anche +per la nota successiva. La durata predefinita della prima nota è di un +quarto. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +Per creare @notation{note puntate}, aggiungi un punto @code{.} al +numero di durata. La durata di una nota puntata deve essere dichiarata +esplicitamente (cioè con un numero). + +@lilypond[verbatim,quote] +\relative c'' { + a a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Pause + +@cindex pausa +@cindex notazione delle pause + +Glossario musicale: @rglosnamed{rest,pausa}. + +Una @notation{pausa} viene inserita proprio come una nota ma col nome +@code{r}@tie{}: + +@lilypond[verbatim,quote] +\relative c'' { + a4 r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Indicazione di tempo + +@cindex tempo, indicazione di + +@funindex \time +@funindex time + +Glossario musicale: @rglosnamed{time signature,indicazione di tempo}. + +Il @notation{tempo} si imposta con il comando @code{\time}: + +@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 Indicazioni di tempo + +@cindex indicazioni di tempo +@cindex indicazioni metronomiche + +@funindex \tempo +@funindex tempo + +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}: + +@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 + + +@subheading Chiave + +@cindex chiave +@cindex chiave di violino +@cindex contralto +@cindex tenore +@cindex basso + +@funindex \clef +@funindex clef + +Glossario musicale: @rglosnamed{clef,chiave}. + +La @notation{chiave} si imposta con il comando @code{\clef}: + +@lilypond[verbatim,quote] +\relative c' { + \clef treble + c1 + \clef alto + c1 + \clef tenor + c1 + \clef bass + c1 +} +@end lilypond + + +@subheading Tutto insieme + +Ecco un piccolo esempio che mostra tutti questi elementi insieme: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + \tempo "Andante" 4 = 120 + c2 e8 c' + g'2. + f4 e d + c4 c, r +} +@end lilypond + + +@seealso +Guida alla notazione: @ruser{Writing pitches}, +@ruser{Writing rhythms}, @ruser{Writing rests}, +@ruser{Time signature}, @ruser{Clef}. + + +@node Lavorare sui file di input +@subsection Lavorare sui file di input +@translationof Working on input files + +@cindex parentesi graffe +@cindex graffe, parentesi +@cindex commenti +@cindex commento di linea +@cindex linea, commento di +@cindex commento di blocco +@cindex blocco, commento di +@cindex sensibile alle maiuscole +@cindex insensibile agli spazi +@cindex espressioni +@cindex versionamento +@cindex versione +@cindex numero di versione + +@funindex \version +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + +I file di input di LilyPond sono simili ai file sorgenti di molti comuni +linguaggi di programmazione. Contengono una dichiarazione di versione, sono +sensibili alle maiuscole, e in generale gli spazi bianchi vengono ignorati. Le +espressioni musicali si formano con parentesi graffe @w{@code{@{ @}}}, e i commenti +sono indicati con @code{%} o @w{@code{%@{ @dots{} %@}}}@tie{}. + +Se le frasi precedenti ti sembrano assurde, non preoccuparti! Spiegheremo +cosa significano tutti questi termini: + +@itemize + +@item +@strong{Dichiarazione di versione}: +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: + +@example +\version "@w{@version{}}" +@end example + +Per convenzione, la dichiarazione di versione viene posta all'inizio del file +LilyPond. + +La dichiarazione di versione è importante per almeno due ragioni. Primo, +permette l'aggiornamento automatico del file di input file via via che la +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 mostra +un avvertimento durante la compilazione del file. + +@item +@strong{Sensibile alle maiuscole}: +distingue tra lettere in minuscolo (es: +@w{@code{a, b, s, t}}) o in maiuscolo (es: @w{@code{A, B, S, T}}). +Le note sono in minuscolo: @w{@code{@{ c d e @}}} è un input valido; +@w{@code{@{ C D E @}}} causerà un messaggio di errore. + +@item +@strong{Insensibile agli spazi}: +non importa quanti spazi (o tabulazioni o nuove linee) aggiungi. +@w{@samp{@{ c4 d e @}}} ha lo stesso significato di +@w{@samp{@{ c4 @tie{} @tie{} @tie{} d e @}}} e: + +@example +@{ c4 d + e @} +@end example + +@noindent +Certo, l'esempio precedente è scomodo da leggere. Una buona regola +pratica è indentare i blocchi di codice con una tabulazione o due spazi: + +@example +@{ + c4 d e +@} +@end example + +Tuttavia, uno spazio bianco @emph{è} necessario per separare molti elementi +sintattici gli uni dagli altri. In altre parole, lo spazio bianco può essere +@emph{aggiunto}, ma non può essere @emph{eliminato}. Dal momento che uno +spazio bianco mancante può dare adito a strani errori, si consiglia di +inserire sempre uno spazio bianco prima e dopo ogni elemento sintattico, +ad esempio, prima e dopo ogni parentesi graffa. + +@item +@strong{Espressioni}: +ogni parte dell'input di LilyPond deve avere @strong{@{@tie{}parentesi@tie{}graffe@tie{}@}} +intorno. Queste parentesi dicono a LilyPond che l'input costituisce +un'espressione musicale singola, proprio come le parentesi @code{()} in +matematica. Per evitare ambiguità, le parentesi dovrebbero essere +racchiuse tra spazi, a meno che non si trovino all'inizio o alla fine di una linea. + +Anche un comando di LilyPond seguito da un'espressione semplice in +parentesi (come @q{@w{@code{@bs{}relative c' @{ @dots{} @}}}}) conta come +un'espressione musicale singola. + +@cindex commenti +@cindex commento di linea +@cindex commento di blocco +@item +@strong{Commenti}: +un commento è un appunto per il lettore umano dell'input musicale; viene +ignorato quando l'input viene analizzato, dunque non ha alcun effetto +sull'output finale. Ci sono due tipi di commenti. Il simbolo di percentuale +@code{%} introduce un commento di linea; tutto quello che sta dopo @code{%} +su quella linea verrà ignorato. Per convenzione, un commento di linea viene +posto @emph{sopra} il codice a cui si riferisce. + +@example +a4 a a a +% questo commento si riferisce ai Si +b2 b +@end example + +Un commento di blocco segna come commento un'intera sezione di input musicale. +Tutto ciò che è compreso tra @code{%@{} e @code{%@}} viene ignorato. +Tuttavia, i commenti di blocco non si @q{annidano}. Ovvero non si può +inserire un commento di blocco dentro a un altro commento di blocco. Se +ci provi, il primo @code{%@}} interromperà @emph{entrambi} i commenti di +blocco. Il seguente frammento mostra gli usi possibili per i commenti: + +@example +% ecco le note di "Ah! Vous dirai-je, Maman" + c4 c g' g a a g2 + +%@{ + Questa linea e le note sotto vengono ignorate, + perché si trovano in un commento di blocco. + + f4 f e e d d c2 +%@} +@end example + +@end itemize + + +@node Gestire gli errori +@section Gestire gli errori +@translationof Dealing with errors + +@cindex risoluzione dei problemi + +Talvolta LilyPond non genera l'output che desideri. Questa +sezione fornisce alcuni link che possono aiutarti a risolvere i +problemi che potrai incontrare. + + +@menu +* Consigli generali per la risoluzione dei problemi:: +* Alcuni errori comuni:: +@end menu + +@node Consigli generali per la risoluzione dei problemi +@subsection Consigli generali per la risoluzione dei problemi +@translationof General troubleshooting tips + +La risoluzione dei problemi in LilyPond può essere un compito impegnativo +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{Risoluzione dei problemi}. + + +@node Alcuni errori comuni +@subsection Alcuni errori comuni +@translationof Some common errors + +@cindex 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{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 alcune utili funzionalità interattive che sono disponibili +nella versione online della documentazione. + +@menu +* Materiale omesso:: +* Esempi cliccabili:: +* Panoramica dei manuali:: +@end menu + + +@node Materiale omesso +@subsection Materiale omesso +@translationof Omitted material + +@cindex come leggere il manuale +@cindex manuale, leggere +@cindex leggere il manuale +@cindex cliccabili, esempi +@cindex esempi cliccabili +@cindex consigli su come costruire i file +@cindex modelli +@cindex costruire i file, consigli +@cindex file, consigli per costruirli + +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}. 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{}inserire qui l'esempio@dots{} +@} +@end example + +Perché omettere le parentesi? Gran parte degli esempi in questo manuale +possono essere inseriti nel mezzo di un pezzo più ampio. Per questi esempi, +non ha senso includere @q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} -- +non si deve mettere un @code{\relative} dentro un altro +@code{\relative}! Se includessimo @q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +in ogni esempio, non potresti copiare un piccolo esempio della +documentazione e incollarlo dentro a un tuo brano più +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 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. + +@node Esempi cliccabili +@subsection Esempi cliccabili +@translationof Clickable examples + +@warning{Queste funzionalità sono disponibili soltanto nei manuali in HTML.} + +Molte persone imparano ad usare un programma provando e smanettando. +Questo è possibile anche con LilyPond. Se clicchi su un'immagine +nella versione HTML di questo manuale, vedrai l'esatto input +LilyPond usato per generare quell'immagine. Provalo su +questa immagine: + +@c no verbatim here +@lilypond[quote] +\relative c'' { + c4-\markup { \bold \huge { Clicca qui. } } +} +@end lilypond + +Tagliando e copiando quel che si trova nella sezione @qq{ly snippet}, +puoi ricavare un modello di partenza per sperimentare. Per vedere esattamente +lo stesso output (larghezza della linea e tutto il resto), copia tutto da @qq{Start +cut-&-pastable section} alla fine del file. + +@ignore +This is item 825 + +@n ode Keyboard navigation +@s ubsection Keyboard navigation + +@warning{This features is only available in the HTML manuals.} + +@c TODO: once this is figured out, insert it here. + +We are currently working on this feature. +@end ignore + + +@node Panoramica dei manuali +@subsection Panoramica dei manuali +@translationof Overview of manuals + +La documentazione su LilyPond è vasta. I nuovi utenti talvolta +sono confusi su quali parti dovrebbero leggere, e ogni tanto +saltano la lettura di parti fondamentali. + +@warning{Non saltare le parti importanti della +documentazione. Altrimenti ti risulterà molto più difficile +comprendere le sezioni successive.} + +@itemize + +@item +@strong{Prima di fare @emph{qualsiasi} tentativo}: leggi il @ref{Tutorial} +e la @ref{Notazione comunemente utilizzata} del Manuale di apprendimento. Se +ti imbatti in termini musicali che non conosci, cercali nel @rglosnamed{Top, Glossario}. + +@item +@strong{Prima di tentare di scrivere un pezzo musicale completo}: leggi +i @ref{Concetti fondamentali} del Manuale di apprendimento. Dopo puoi dare +un'occhiata alle sezioni rilevanti della @rusernamed{Top, Notation reference}. + +@item +@strong{Prima di cercare di cambiare l'output predefinito}: leggi il +@ref{Tweaking output} del Manuale di apprendimento. + +@item +@strong{Prima di iniziare un grande progetto}: leggi il documento +@rprogram{Consigli su come scrivere i file} del manuale di Uso del programma. + +@end itemize + + diff --git a/Documentation/it/macros.itexi b/Documentation/it/macros.itexi new file mode 100644 index 0000000000..f37afbcafd --- /dev/null +++ b/Documentation/it/macros.itexi @@ -0,0 +1,815 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore + + +@include version.itexi +@include common-macros.itexi + +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@quotedblleft{}\TEXT\@quotedblright{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@html +
+@end html +@strong{Nota:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Nota:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + +@c do not translate the following macro -- it is used in +@c an untranslated manual. + +@ifhtml + +@macro advanced{TEXT} +@html +
+@end html +@strong{Advanced note:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@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{Manuali}. + +Se ti manca qualche manuale, puoi trovare la completa documentazione +all'indirizzo @w{@uref{http://@/www@/.lilypond@/.org/}}. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@emph{La traduzione della seguente nota di copyright è gentilmente +offerta per le persone che non parlano inglese, ma solo +la nota in inglese ha valore legale.} + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@quotation +E' garantito il permesso di copiare, distribuire e/o modificare questo +documento seguendo i termini della Licenza per Documentazione +Libera GNU, Versione 1.1 o ogni versione successiva pubblicata dalla +Free Software Foundation; senza alcuna sezione non modificabile. +Una copia della licenza è acclusa nella sezione intitolata ''Licenza +per Documentazione Libera GNU''. +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +Questo documento è stato posto nel pubblico dominio. +@end copying +@end ifclear + + + +@c ***** Title page ***** +@ifnottex +@node Su +@top LilyPond --- \TITLE\ +@translationof Top + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle Il compositore tipografico per la musica +@titlefont{\TITLE\} +@author Il team di sviluppo di LilyPond + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +Per la versione di LilyPond @version{} +@end titlepage + +@end macro + + +@c ***** Headings in a doc subsection ***** + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Comandi predefiniti +@end macro + +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the next macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Frammenti di codice selezionati +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading Vedi anche +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Problemi noti e avvertimenti +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Glossario Musicale} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Glossario Musicale} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Manuale di Apprendimento} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Manuale di Apprendimento} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Guida alla Notazione} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Guida alla Notazione} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Estendere} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Estendere} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Cambiamenti} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Cambiamenti} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Guida del Collaboratore} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Guida del Collaboratore} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,Informazioni Generali} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,Informazioni Generali} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Saggio} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Saggio} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Uso del Programma} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Uso del Programma} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Frammenti di codice} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Frammenti di codice} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Guida al Funzionamento Interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Guida al Funzionamento Interno} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glossario Musicale} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossario Musicale} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Manuale di Apprendimento} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Manuale di Apprendimento} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Guida alla Notazione} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Guida alla Notazione} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Cambiamenti} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Cambiamenti} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Estendere} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Estendere} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Guida del Collaboratore} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Guida del Collaboratore} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Informazioni Generali} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Informazioni Generali} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Saggio} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Saggio} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Uso del Programma} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Uso del Programma} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Frammenti di codice} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Frammenti di codice} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Guida al Funzionamento Interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Guida al Funzionamento Interno} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Glossario Musicale} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossario Musicale} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Manuale di Apprendimento} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Manuale di Apprendimento} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Guida alla Notazione} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Guida alla Notazione} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Cambiamenti} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Cambiamenti} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Estendere} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Estendere} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Guida del Collaboratore} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Guida del Collaboratore} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-web,Informazioni Generali} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-web, Informazioni Generali} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Saggio} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Saggio} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Uso del Programma} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Uso del Programma} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Frammenti di codice} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Frammenti di codice} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Guida al Funzionamento Interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Guida al Funzionamento Interno} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Glossario Musicale} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossario Musicale} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning,Manuale di Apprendimento} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning,Manuale di Apprendimento} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation,Guida alla Notazione} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation,Guida alla Notazione} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Cambiamenti} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Cambiamenti} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Estendere} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Estendere} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Guida del Collaboratore} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Guida del Collaboratore} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Informazioni generali} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Informazioni generali} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Saggio} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Saggio} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage,Uso del Programma} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage,Uso del Programma} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Frammenti di codice} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Frammenti di codice} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Guida al Funzionamento Interno} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,Guida al Funzionamento Interno} +@end macro + +@end iftex + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
+@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + +@macro help{TEXT} +@html +
+ + Richiesta di aiuto: + \TEXT\ +
+@end html +@end macro + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin è stato creato da +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} con +@uref{http://www.isc.tamu.edu/~lewing/gimp/, il Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +Il logo FreeBSD è un marchio registrato della +@uref{http://www.freebsd.org/, FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +L' @qq{immagine X} non è un marchio registrato. È stato creato da +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} e +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, e +posto sotto la GNU Free Documentation License versione 1.2 o successive. +Abbiamo trovato l'immagine su +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +questa pagina di Wikimedia Commons}. + +@end macro + +@macro logoLegalWindows +L' @qq{immagine con quattro rettangoli colorati} non è un marchio +registrato. È stato creato da +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} ed è +posto sotto la GNU Free Documentation License versione 1.2. Abbiamo +trovato l'immagine su +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +questa pagina di Wikimedia Commons}. + +@end macro + +@end ifset diff --git a/Documentation/it/search-box.ihtml b/Documentation/it/search-box.ihtml new file mode 100644 index 0000000000..86fba3328b --- /dev/null +++ b/Documentation/it/search-box.ihtml @@ -0,0 +1,20 @@ + + +
+ + + +
diff --git a/Documentation/it/texidocs/GNUmakefile b/Documentation/it/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/it/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc new file mode 100644 index 0000000000..56e558fcba --- /dev/null +++ b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc @@ -0,0 +1,9 @@ +%% 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" diff --git a/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc new file mode 100644 index 0000000000..95eeae4747 --- /dev/null +++ b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc @@ -0,0 +1,12 @@ +%% 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" diff --git a/Documentation/it/texidocs/anglican-psalm-template.texidoc b/Documentation/it/texidocs/anglican-psalm-template.texidoc new file mode 100644 index 0000000000..94b18e2ba1 --- /dev/null +++ b/Documentation/it/texidocs/anglican-psalm-template.texidoc @@ -0,0 +1,9 @@ +%% 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" diff --git a/Documentation/it/texidocs/hymn-template.texidoc b/Documentation/it/texidocs/hymn-template.texidoc new file mode 100644 index 0000000000..1cd756b251 --- /dev/null +++ b/Documentation/it/texidocs/hymn-template.texidoc @@ -0,0 +1,8 @@ +%% 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" diff --git a/Documentation/it/texidocs/jazz-combo-template.texidoc b/Documentation/it/texidocs/jazz-combo-template.texidoc new file mode 100644 index 0000000000..7205ca70e5 --- /dev/null +++ b/Documentation/it/texidocs/jazz-combo-template.texidoc @@ -0,0 +1,9 @@ +%% 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" diff --git a/Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc b/Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc new file mode 100644 index 0000000000..02880b3122 --- /dev/null +++ b/Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc @@ -0,0 +1,9 @@ +%% 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" diff --git a/Documentation/it/texidocs/piano-template-simple.texidoc b/Documentation/it/texidocs/piano-template-simple.texidoc new file mode 100644 index 0000000000..6194f97004 --- /dev/null +++ b/Documentation/it/texidocs/piano-template-simple.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56 + texidocit = " +Ecco un comune doppio pentagramma per pianoforte con un po' di note. + +" + doctitleit = "Modello per pianoforte (semplice)" diff --git a/Documentation/it/texidocs/piano-template-with-centered-dynamics.texidoc b/Documentation/it/texidocs/piano-template-with-centered-dynamics.texidoc new file mode 100644 index 0000000000..760408d9c0 --- /dev/null +++ b/Documentation/it/texidocs/piano-template-with-centered-dynamics.texidoc @@ -0,0 +1,8 @@ +%% 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" diff --git a/Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc new file mode 100644 index 0000000000..ccea656ed9 --- /dev/null +++ b/Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc @@ -0,0 +1,7 @@ +%% 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" diff --git a/Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc new file mode 100644 index 0000000000..54e200b030 --- /dev/null +++ b/Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -0,0 +1,7 @@ +%% 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" diff --git a/Documentation/it/texidocs/satb-choir-template---four-staves.texidoc b/Documentation/it/texidocs/satb-choir-template---four-staves.texidoc new file mode 100644 index 0000000000..fcb3308a31 --- /dev/null +++ b/Documentation/it/texidocs/satb-choir-template---four-staves.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56 + texidocit = " +Modello per coro SATB (quattro righi) + +" + doctitleit = "Modello per coro SATB - quattro righi" diff --git a/Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc new file mode 100644 index 0000000000..ac0eec5430 --- /dev/null +++ b/Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -0,0 +1,8 @@ +%% 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" diff --git a/Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc new file mode 100644 index 0000000000..90c534265e --- /dev/null +++ b/Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -0,0 +1,7 @@ +%% 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" diff --git a/Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc new file mode 100644 index 0000000000..a65a6aaba4 --- /dev/null +++ b/Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -0,0 +1,10 @@ +%% 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" diff --git a/Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc new file mode 100644 index 0000000000..92ff692ba8 --- /dev/null +++ b/Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc @@ -0,0 +1,8 @@ +%% 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" diff --git a/Documentation/it/texidocs/string-quartet-template-simple.texidoc b/Documentation/it/texidocs/string-quartet-template-simple.texidoc new file mode 100644 index 0000000000..e589624271 --- /dev/null +++ b/Documentation/it/texidocs/string-quartet-template-simple.texidoc @@ -0,0 +1,7 @@ +%% 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)" diff --git a/Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc new file mode 100644 index 0000000000..a3537808b7 --- /dev/null +++ b/Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -0,0 +1,18 @@ +%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56 + texidoc = " +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! + +" + doctitle = "Modello per quartetto d'archi con parti separate" diff --git a/Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc new file mode 100644 index 0000000000..f66e6f7794 --- /dev/null +++ b/Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -0,0 +1,10 @@ +%% 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" diff --git a/Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc new file mode 100644 index 0000000000..19bea7c328 --- /dev/null +++ b/Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -0,0 +1,8 @@ +%% 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" diff --git a/Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc b/Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc new file mode 100644 index 0000000000..a96795d386 --- /dev/null +++ b/Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc @@ -0,0 +1,9 @@ +%% 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" diff --git a/Documentation/it/texidocs/vocal-ensemble-template.texidoc b/Documentation/it/texidocs/vocal-ensemble-template.texidoc new file mode 100644 index 0000000000..c34a63f398 --- /dev/null +++ b/Documentation/it/texidocs/vocal-ensemble-template.texidoc @@ -0,0 +1,9 @@ +%% 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" diff --git a/Documentation/it/translations.itexi b/Documentation/it/translations.itexi new file mode 100644 index 0000000000..2d1a1eb5a3 --- /dev/null +++ b/Documentation/it/translations.itexi @@ -0,0 +1,340 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Last updated Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +Manuale di apprendimento di LilyPond +@tab Translators +@tab Translation checkers +@tab Translated +@tab Up to date +@tab Other info +@item +Section titles +@* +124 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +partially (93 %) +@end html +@end ifhtml +@ifnothtml +partially (93 %) +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +1 Tutorial +@* +2535 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +2 Notazione comunemente utilizzata +@* +4184 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +3 Concetti fondamentali +@* +11139 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@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 +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +Introduzione +@* +4506 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +Download +@* +1183 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +Manuali +@* +1200 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab pre-GDP +@item +Comunità +@* +1755 +@tab Federico Bruni +@tab Luca Rossetto Casel +@tab +@ifhtml + +@html +yes +@end html +@end ifhtml +@ifnothtml +yes +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@end multitable + diff --git a/Documentation/it/usage.tely b/Documentation/it/usage.tely new file mode 100644 index 0000000000..08e4169431 --- /dev/null +++ b/Documentation/it/usage.tely @@ -0,0 +1,87 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*- +@ignore + 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' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-usage.info +@settitle LilyPond: manuale d'uso del programma +@documentencoding UTF-8 +@documentlanguage it +@afourpaper + +@c Translators: Federico Bruni +@c Translation checkers: Luca Rossetto Casel + +@macro manualIntro +Questo manuale spiega come eseguire i programmi distribuiti con +LilyPond versione @version{}. Inoltre, suggerisce alcune delle +@qq{migliori pratiche} per un uso efficiente. +@end macro + +@c `Usage' was born 1999-10-10 with git commit c82c30c... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 degli autori. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Application Usage of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Utilizzo} + + +@c TOC -- non-tex +@ifnottex + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* Eseguire lilypond:: Utilizzo. +* Aggiornare i file con convert-ly:: Aggiornare i file di input. +* lilypond-book:: Integrare testo e musica. +* Programmi esterni:: Combinare LilyPond con altri programmi. +* Consigli su come scrivere i file:: Migliori pratiche ed efficace soluzione degli errori. + +Appendici + +* GNU Free Documentation License:: Licenza di questo documento. +* Indice di LilyPond:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include usage/running.itely +@include usage/updating.itely +@include usage/lilypond-book.itely +@include usage/external.itely +@include usage/suggestions.itely + +@include fdl.itexi + +@node Indice di LilyPond +@appendix Indice di LilyPond +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/it/usage/GNUmakefile b/Documentation/it/usage/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/it/usage/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/it/usage/external.itely b/Documentation/it/usage/external.itely new file mode 100644 index 0000000000..8bcd600884 --- /dev/null +++ b/Documentation/it/usage/external.itely @@ -0,0 +1,619 @@ +@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. + + diff --git a/Documentation/it/usage/lilypond-book.itely b/Documentation/it/usage/lilypond-book.itely new file mode 100644 index 0000000000..81f0d77717 --- /dev/null +++ b/Documentation/it/usage/lilypond-book.itely @@ -0,0 +1,1296 @@ +@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]@{@} +@end example + +@noindent +genera + +@lilypond[quote,fragment,staffsize=11]{} + +@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]@{@} +@end example + +@noindent +genera + +@lilypond[fragment,staffsize=11]{} + +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 + +\key c \minor c4 es g2 + +@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{}, dove le opzioni +sono distinte dalla musica attraverso i due punti, ad esempio + +@example +Un po' di musica in una linea di testo. +@end example + +Per includere file separati, si usa + +@example +@var{filename} +@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{} 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 + + + + + +@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 + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@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 + + + + + +

+I documenti per lilypond-book possono combinare liberamente musica e testo. Ad +esempio, + +\relative c'' @{ + a4 b c d +@} + +

+ +

+Ancora un po' di Lilypond, questa volta con delle opzioni: + + +a4 b c d + +

+ + + + + +@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}. + + diff --git a/Documentation/it/usage/running.itely b/Documentation/it/usage/running.itely new file mode 100644 index 0000000000..f8ab162584 --- /dev/null +++ b/Documentation/it/usage/running.itely @@ -0,0 +1,831 @@ +@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 Eseguire lilypond +@chapter Eseguire @command{lilypond} +@translationof Running LilyPond + +Questo capitolo descrive dettagliatamente gli aspetti tecnici dell'esecuzione +di LilyPond. + +@menu +* Uso normale:: +* Uso da linea di comando:: +* Messaggi di errore:: +* Errori comuni:: +@end menu + + +@node Uso normale +@section Uso normale +@translationof Normal usage + +La maggior parte degli utenti esegue LilyPond attraverso un'interfaccia grafica +(GUI); se non lo hai già fatto, leggi il @rlearning{Tutorial}. Se usi un editor +diverso per scrivere i file lilypond, leggi la documentazione di quel programma. + + +@node Uso da linea di comando +@section Uso da linea di comando +@translationof Command-line usage + +Questa sezione contiene informazioni aggiuntive sull'uso di LilyPond da linea +di comando. Questo può essere utile per assegnare opzioni aggiuntive al programma. +Inoltre, ci sono alcuni programmi complementari di @q{aiuto} (come +@code{midi2ly}) che funzionano solo da linea di comando. + +Con @q{linea di comando} si intende la linea di comando del sistema operativo. +Gli utenti Windows avranno più familiarità con i termini @q{shell DOS} o +@q{shell dei comandi}. Gli utenti MacOS@tie{}X avranno più familiarità con i termini +@q{terminale} o @q{console}. Una configurazione ulteriore è necessaria +per gli utenti MacOS@tie{}X; si veda @rweb{MacOS X}. + +Descrivere come usare questa parte di un sistema operativo non rientra negli +obiettivi di questo manuale; si prega di consultare altra documentazione su +questo argomento se non si conosce la linea di comando. + +@menu +* Utilizzo di lilypond:: +* Opzioni della linea di comando per lilypond:: +* Variabili d'ambiente:: +* LilyPond in una gabbia chroot:: +@end menu + +@node Utilizzo di lilypond +@unnumberedsubsec Utilizzo di @command{lilypond} +@translationof Invoking lilypond + +L'eseguibile @command{lilypond} può essere lanciato dalla linea di comando +nel seguente modo. + +@example +lilypond [@var{opzione}]@dots{} @var{file}@dots{} +@end example + + +Se invocato con un nome di file senza estensione, viene tentata per prima +l'estensione @file{.ly}. Per leggere l'input da stdin, usare un +trattino (@code{-}) al posto di @var{file}. + +Quando @file{file.ly} viene elaborato, lilypond creerà @file{file.ps} +e @file{file.pdf} come output. Possono essere specificati molti file; +ognuno di essi sarà elaborato in modo indipendente. @footnote{Lo status di +GUILE non viene resettato dopo l'elaborazione di un file @code{.ly}: +attenzione a non cambiare alcun valore predefinito dall'interno di Scheme.} + +Se @file{file.ly} contiene più di un blocco @code{\book}, allora tutte le altre +partiture verranno salvate in file numerati, a partire da @file{file-1.pdf}. Inoltre, +il valore di @code{output-suffix} (suffisso di output) sarà inserito tra la base +del nome del file e il numero. Un file di input che contiene + +@example +#(define output-suffix "violin") +\score @{ @dots{} @} +#(define output-suffix "cello") +\score @{ @dots{} @} +@end example + +@noindent +produrrà come output @var{base}@file{-violin.pdf} e +@var{base}@file{-cello-1.pdf}. + + +@unnumberedsubsubsec Comandi standard da shell + +Se la shell (ovvero la finestra dei comandi) utilizzata supporta le normali +redirezioni, potrebbe essere utile usare i seguenti comandi per dirigere +l'output di una console in un file: + +@itemize + +@item +@code{lilypond file.ly 1>stdout.log} per redirigere l'output normale + +@item +@code{lilypond file.ly 2>stderr.log} per redirigere i messaggi di errore + +@item +@code{lilypond file.ly &>all.log} per redirigere tutto l'output + +@end itemize + +Consulta la documentazione della tua shell per vedere se supporta queste +opzioni o se la sintassi è diversa. Nota che questi sono comandi shell +e non hanno niente a che fare con lilypond. + + +@node Opzioni della linea di comando per lilypond +@unnumberedsubsec Opzioni della linea di comando per @command{lilypond} +@translationof Command line options for lilypond + +@cindex Utilizzo di @command{lilypond} +@cindex opzioni della linea di comando per @command{lilypond} +@cindex linea di comando, opzioni di +@cindex switches + +Sono contemplate le seguenti opzioni: + +@table @code + +@item -e,--evaluate=@var{espressione} +Valuta l'@var{espressione} di Scheme prima di analizzare qualsiasi file @file{.ly}. +Si possono specificare varie opzioni @code{-e}; saranno analizzate in modo +sequenziale. + +L'espressione sarà analizzata nel modulo @code{guile-user}, dunque se vuoi +usare delle definizioni in @var{espressione}, usa + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +nella linea di comando, e includi + +@example +#(use-modules (guile-user)) +@end example + +@noindent +in cima al file @code{.ly}. + +@item -f,--format=@var{formato} +Formati di output. Come @code{formato} si può scegliere tra +@code{ps}, @code{pdf}, e @code{png}. + +Esempio: @code{lilypond -fpng @var{file}.ly} + + + +@item -d,--define-default=@var{variabile}=@var{valore} +Imposta l'opzione interna del programma, @var{variabile}, al valore di Scheme +@var{valore}. Se @var{valore} non viene specificato, allora viene usato +@var{#t}. Per disabilitare un'opzione, si può usare il prefisso @code{no-} +prima della @var{variabile}, ad esempio + +@cindex punta e clicca, linea di comando + +@example +-dno-point-and-click +@end example + +@noindent +è equivalente a +@example +-dpoint-and-click='#f' +@end example + +Di seguito alcune opzioni interessanti. + +@cindex aiuto, linea di comando + +@table @samp +@item help +L'esecuzione di @code{lilypond -dhelp} mostrerà tutte le opzioni disponibili +di @code{-d}. + +@cindex paper-size, linea di comando + +@item paper-size +Questa opzione imposta la dimensione predefinita del foglio, +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Nota che la stringa deve essere compresa tra virgolette precedute dal +segno di escape ( @code{\"} ). +@c Match " in previous line to help context-sensitive editors + +@cindex safe, linea di comando + +@item safe +Non si fida dell'input nel file @code{.ly}. + +Quando la formattazione di LilyPond viene messa a disposizione tramite un server +web, si @b{DEVE} passare l'opzione @code{--safe} o l'opzione @code{--jail}. L'opzione +@code{--safe} impedirà che il codice Scheme presente nell'input possa fare uno +scempio, ad esempio + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +L'opzione @code{-dsafe} serve a valutare le espressioni Scheme presenti nell'input +in uno speciale modulo di sicurezza. Questo modulo di sicurezza è derivato dal +modulo GUILE @file{safe-r5rs}, ma aggiunge alcune funzioni del +LilyPond API. Queste funzioni sono elencate in @file{scm/safe-lily.scm}. + +Inoltre, la modalità sicura non permette le direttive @code{\include} e +disabilita l'uso del backslash nelle stringhe @TeX{}. + +In modalità sicura, non è possibile importare le variabili di LilyPond +in Scheme. + +@code{-dsafe} @emph{non} rileva il sovrautilizzo di risorse. È ancora possibile +far sì che il programma rimanga in sospeso per un tempo indefinito, ad esempio +alimentando il backend con strutture di dati cicliche. Dunque se si vuole usare +LilyPond su un server web pubblicamente accessibile, si deve limitare il processo +nell'uso della CPU e della memoria. + +La modalità sicura bloccherà la compilazione di molti utili frammenti di codice +LilyPond. L'opzione @code{--jail} è un'alternativa più sicura, ma richiede +più lavoro per configurarla. + +@cindex formato di output, impostare il +@item backend +il formato di output da usare per il back-end. Per il @code{formato} si può +scegliere tra +@table @code +@item ps +@cindex PostScript, output + per PostScript. + + I file Postscript includono i tipi di carattere TTF, Type1 e OTF. Non vengono + inclusi i sottoinsiemi di questi tipi. Se si usa un set di caratteri orientali, + si possono ottenere file di grosse dimensioni. + +@item eps + +@cindex Postscript, incapsulato +@cindex EPS (Encapsulated PostScript) + + per PostScript incapsulato. Invia ogni pagina (sistema) in un file +@file{EPS} separato, senza font, e in un unico file @file{EPS} con +tutte le pagine (sistemi) inclusi i font. + +Questa è la modalità predefinita di @command{lilypond-book}. + +@item svg + +@cindex SVG (Scalable Vector Graphics) + + per ottenere SVG (Scalable Vector Graphics). + + Crea un singolo file SVG, senza font incorporati, per ogni pagina + dell'output. Si raccomanda di installare i font Century + Schoolbook, inclusi nell'installazione di LilyPond, per una resa + ottimale. In UNIX basta copiare questi font dalla directory di + LilyPond (solitamente + @file{/usr/share/lilypond/VERSION/fonts/otf/}) in + @file{~/.fonts/}. L'output SVG dovrebbe essere compatibile con qualsiasi + editor SVG o user agent. + +@item scm + +@cindex Scheme, estrazione di + + per estrarre i comandi di disegno grezzi e interni, basati su Scheme. + +@item null + non produce la stampa della partitura; ha lo stesso effetto di @code{-dno-print-pages}. +@end table + +Esempio: @code{lilypond -dbackend=svg @var{filename}.ly} + +@item preview +@cindex preview, linea di comando +Genera un file di output che contiene i titoli e il primo sistema +del brano musicale. Se si usano i blocchi @code{\bookpart}, i titoli e il +primo sistema di ogni @code{\bookpart} apparirà nell'output. +I backend @code{ps}, @code{eps}, e @code{svg} supportano questa +opzione. + +@item print-pages +Genera tutte le pagine, come da impostazione predefinita. @code{-dno-print-pages} è +utile in combinazione con @code{-dpreview}. + +@end table + + + +@item -h,--help +Mostra una sintesi dell'utilizzo. + +@item -H,--header=@var{CAMPO} +Estrae un campo dell'intestazione nel file @file{NOME.@var{CAMPO}}. + +@cindex ricerca dei file +@cindex percorso di ricerca +@item --include, -I=@var{directory} +Aggiunge @var{directory} al percorso di ricerca per i file di input. + +È possibile assegnare più opzioni -I. La ricerca inizierà nella prima +directory definita, e se il file da includere non viene trovato +la ricerca continuerà nelle directory seguenti. + +@item -i,--init=@var{file} +Imposta il file di inizializzazione su @var{file} (predefinito: @file{init.ly}). + +@cindex cartella, dirigere l'output in +@cindex nome del file di output, impostare + +@item -o,--output=@var{FILE} or @var{CARTELLA} +Imposta il file di output predefinito @var{FILE} oppure, se una cartella con +quel nome esiste già, dirige l'output in @var{CARTELLA}, prendendo il nome +del file dal file di input. In entrambi i casi verrà aggiunto il suffisso +appropriato (ad esempio @code{.pdf} per il pdf). + + +@cindex PostScript + +@item --ps +Genera PostScript. + +@cindex Portable Network Graphics (PNG) + +@item --png +Genera immmagini di ogni pagina in formato PNG. Questo implica +@code{--ps}. La risoluzione in DPI dell'immagine può essere impostata con +@example +-dresolution=110 +@end example + +@cindex Portable Document Format (PDF) + +@item --pdf +Genera PDF. Questo implica @code{--ps}. + + + +@item -j,--jail=@var{utente},@var{gruppo},@var{gabbia},@var{directory} +Esegue @command{lilypond} in una gabbia chroot. + +L'opzione @code{--jail} fornisce un'alternativa più flessibile a +@code{--safe} quando la formattazione di LilyPond è messa a disposizione attraverso +un server web o quando LilyPond esegue sorgenti provenienti dall'esterno. + +L'opzione @code{--jail} modifica la radice di @command{lilypond} in +@var{gabbia} appena prima di iniziare il vero processo di compilazione. L'utente +e il gruppo vengono poi modificati per corrispondere a quelli forniti, e la +directory corrente viene spostata in @var{directory}. Questa configurazione +garantisce che non sia possibile (almeno in teoria) uscire dalla gabbia. Si noti +che perché @code{--jail} funzioni @command{lilypond} deve essere eseguito come root; +di solito questo si fa in modo sicuro col comando @command{sudo}. + +Configurare una gabbia è una questione un po' delicata, perché bisogna essere +sicuri che LilyPond possa trovare tutto quello di cui ha bisogno per compilare il +sorgente @emph{dentro la gabbia}. Una configurazione tipica comprende i seguenti +elementi: + +@table @asis +@item Impostare un filesystem distinto +Si dovrebbe creare un filesystem separato LilyPond, così che possa essere +montato con opzioni di sicurezza come @code{noexec}, @code{nodev}, e +@code{nosuid}. In questo modo è impossibile lanciare degli eseguibili o +scrivere su un dispositivo direttamente da LilyPond. Se non si vuole creare +una partizione separata, si può creare un file di dimensioni ragionevoli e usarlo +per montare un dispositivo di loop. Un filesystem separato garantisce inoltre +che LilyPond non possa scrivere su uno spazio maggiore di quanto permesso. + +@item Impostare un altro utente +Per eseguire LilyPond in una gabbia si dovrebbe usare un altro utente e gruppo +(ad esempio, @code{lily}/@code{lily}) con pochi privilegi. Ci dovrebbe essere +una sola directory scrivibile da questo utente, che dovrebbe essere passata in +@var{dir}. + +@item Preparare la gabbia +LilyPond ha bisogno di leggere alcuni file quando viene lanciato. Tutti questi +file devono essere copiati nella gabbia, sotto lo stesso percorso in cui appaiono +nel vero filesystem principale. Si deve copiare l'intero contenuto dell'installazione +LilyPond installation (ad esempio, @file{/usr/share/lilypond}). + +Se c'è un problema, il modo più semplice per individuarlo è lanciare +LilyPond usando @command{strace}, che permetterà di scoprire quali +file mancano. + +@item Eseguire LilyPond +In una gabbia montata con @code{noexec} è impossibile eseguire qualsiasi +programma esterno. Dunque LilyPond deve essere eseguito con un backend che +non richieda tale programma. Come è già stato detto, deve essere eseguito +con privilegi di superutente (che ovviamente perderà immediatamente), +possibilmente con l'uso di @command{sudo}. È una buona idea limitare il +numero di secondi di tempo della CPU che LilyPond può usare (ad esempio con @command{ulimit +-t}), e, se il sistema operativo lo permette, la quantità di memoria che +può essere allocata. +@end table + + +@item -v,--version +Mostra informazioni sulla versione. + +@item -V,--verbose +Aumenta la prolissità: mostra i percorsi completi di tutti i file letti, e dà +informazioni sui tempi. + +@item -w,--warranty +Mostra la garanzia con cui viene distribuito GNU LilyPond. (Distribuito +con @strong{NESSUNA GARANZIA}!) +@end table + + +@node Variabili d'ambiente +@unnumberedsubsec Variabili d'ambiente +@translationof Environment variables + +@cindex LANG +@cindex LILYPOND_DATADIR + +@command{lilypond} riconosce le seguenti variabili d'ambiente: +@table @code +@item LILYPOND_DATADIR +Specifica la directory predefinita in cui saranno cercati i messaggi della +localizzazione e i file di dati. Questa directory deve contenere +sottodirectory chiamate @file{ly/}, @file{ps/}, @file{tex/}, etc. + +@item LANG +Determina la lingua per i messaggi di avviso. + +@item LILYPOND_GC_YIELD +Una variabile, in forma di percentuale, che regola il modo in cui viene gestita +la memoria. Con valori più alti il programma usa più memoria, con valori +più bassi usa più tempo della CPU. Il valore predefinito è @code{70}. + +@end table + + +@node LilyPond in una gabbia chroot +@unnumberedsubsec LilyPond in una gabbia chroot +@translationof LilyPond in chroot jail + +Configurare un server perché esegua LilyPond in una gabbia chroot è un lavoro +complesso. La procedura è spiegata sotto. Gli esempi si riferiscono a +Ubuntu Linux e potrebbero richiedere l'uso di @code{sudo} in alcune situazioni. + +@itemize + +@item Installa i pacchetti necessari: LilyPond, GhostScript e ImageMagick. + +@item Crea un nuovo utente dal nome @code{lily}: + +@example +adduser lily +@end example + +@noindent +Questo comando creerà anche un nuovo gruppo per l'utente @code{lily}, e una +cartella home, +@code{/home/lily} + +@item Nella cartella home dell'utente @code{lily} crea un file da usare come +filesystem separato: + +@example +dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000 +@end example + +@noindent +In questo esempio è stato creato un file di 200MB da usare come filesystem della +gabbia. + +@item Crea un dispositivo di loop, crea e monta un filesystem, quindi crea +una cartella scrivibile dall'utente @code{lily}: + +@example +mkdir /mnt/lilyloop +losetup /dev/loop0 /home/lily/loopfile +mkfs -t ext3 /dev/loop0 200000 +mount -t ext3 /dev/loop0 /mnt/lilyloop +mkdir /mnt/lilyloop/lilyhome +chown lily /mnt/lilyloop/lilyhome +@end example + +@item Nella configurazione dei server, JAIL sarà @code{/mnt/lilyloop} +e DIR sarà @code{/lilyhome}. + +@item Crea un grande albero delle directory nella gabbia copiando i file +necessari, come mostrato nello script di esempio più in basso. + +Puoi usare @code{sed} per creare i comandi di copia necessari per un certo +eseguibile: + +@example +for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ + do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ + cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ + \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done +@end example + +@end itemize + +@subheading Script di esempio per Ubuntu 8.04 a 32-bit + +@example +#!/bin/sh +## defaults set here + +username=lily +home=/home +loopdevice=/dev/loop0 +jaildir=/mnt/lilyloop +# the prefix (without the leading slash!) +lilyprefix=usr/local +# the directory where lilypond is installed on the system +lilydir=/$lilyprefix/lilypond/ + +userhome=$home/$username +loopfile=$userhome/loopfile +adduser $username +dd if=/dev/zero of=$loopfile bs=1k count=200000 +mkdir $jaildir +losetup $loopdevice $loopfile +mkfs -t ext3 $loopdevice 200000 +mount -t ext3 $loopdevice $jaildir +mkdir $jaildir/lilyhome +chown $username $jaildir/lilyhome +cd $jaildir + +mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp +chmod a+w tmp + +cp -r -L $lilydir $lilyprefix +cp -L /bin/sh /bin/rm bin +cp -L /usr/bin/convert /usr/bin/gs usr/bin +cp -L /usr/share/fonts/truetype usr/share/fonts + +# Now the library copying magic +for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ + "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ + \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ + 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ + | sed '/.*=>.*/d'; done | sh -s + +# The shared files for ghostscript... + cp -L -r /usr/share/ghostscript usr/share +# The shared files for ImageMagick + cp -L -r /usr/lib/ImageMagick* usr/lib + +### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, +### you should be able to run: +### Note that /$lilyprefix/bin/lilypond is a script, which sets the +### LD_LIBRARY_PATH - this is crucial + /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly +@end example + +@c " keep quote signs balanced for context-sensitive editors + +@node Messaggi di errore +@section Messaggi di errore +@translationof Error messages + +@cindex messaggi di errore +Quando si compila un file possono apparire vari messaggi di errore: + +@table @emph + +@item Avvertimento +@cindex avvertimento +Qualcosa appare sospetto. Se stai cercando di fare qualcosa di insolito +allora comprenderai il messaggio e potrai ignorarlo. +Tuttavia di solito i messaggi di avvertimento indicano che il file di input ha +qualcosa che non va. + +@item Errore +@cindex errore +C'è qualcosa di assolutamente sbagliato. Il passo attualmente in elaborazione +(analisi, interpretazione o formattazione) verrà completato, ma il passo +successivo verrà saltato. + +@item Errore fatale +@cindex errore fatale +C'è qualcosa di assolutamente sbagliato e LilyPond non può continuare. Questo +accade raramente. La causa più comune è un'errata installazione dei tipi di +carattere. + +@item Errore Scheme +@cindex traccia, Scheme +@cindex traccia di chiamata +@cindex errore Scheme +Gli errori che capitano mentre si esegue del codice Scheme sono individuati +dall'interprete Scheme. Se si esegue con l'opzione di prolissità (@code{-V} o +@code{--verbose}), viene stampata una traccia della chiamata di funzione +responsabile dell'errore. + +@item Errore di programmazione +@cindex Errore di programmazione +Si è verificata una qualche incongruenza interna. Questi messaggi di errore +servono ad aiutare programmatori e debugger. Di solito si possono +ignorare. Talvolta sono talmente numerosi da nascondere il resto +dell'output. + +@item Sospeso (core dumped) +@cindex Sospeso (core dumped) +Segnala un serio errore di programmazione che ha mandato in crash il +programma. Questi errori sono considerati critici. Se ti imbatti in un +errore simile, invia una segnalazione di errore. +@end table + +@cindex errori, formato del messaggio +Se gli avvertimenti e gli errori possono essere collegati +a una parte specifica del file di input, i messaggi di errore +hanno la seguente forma + +@example +@var{file}:@var{riga}:@var{colonna}: @var{messaggio} +@var{riga di input responsabile dell'errore} +@end example + +Nella riga responsabile si inserisce un a capo per indicare la colonna +in cui è stato trovato l'errore. Ad esempio, + +@example +test.ly:2:19: error: not a duration: 5 + @{ c'4 e' + 5 g' @} +@end example + +Queste posizioni indicano la migliore ipotesi di LilyPond a proposito del +punto in cui l'avvertimento o l'errore sono comparsi, ma (per loro +stessa natura) avvertimenti ed errori capitano quando succede qualcosa +di imprevisto. Se non riesci a vedere un errore nella riga indicata +del file di input, prova a controllare una o due righe sopra la posizione +indicata. + +Maggiori informazioni sugli errori si trovano in @ref{Errori comuni}. + + +@node Errori comuni +@section Errori comuni +@translationof Common errors + +Le condizioni di errore descritte di seguito capitano spesso, ma la causa +non è ovvia né facile da trovare. Una volta che sono state individuate e +comprese, è facile gestirle. + + +@menu +* La musica esce dalla pagina:: +* Appare un rigo in più:: +* Errore apparente in ../ly/init.ly:: +* Messaggio di errore Unbound variable %:: +* Messaggio di errore FT_Get_Glyph_Name:: +* Avvertimento sul fatto che le affinità del rigo devono solo diminuire:: +@end menu + +@node La musica esce dalla pagina +@unnumberedsubsec La musica esce dalla pagina +@translationof Music runs off the page + +Se la musica esce dalla pagina al di là del margine destro o appare +eccessivamente compressa, quasi sempre è dovuto all'inserimento di +una durata errata di una nota, che fa sì che l'ultima nota di una misura si +estenda oltre la barra di divisione. Non è sbagliato se la nota finale di +una misura non termina entro la barra di divisione inserita automaticamente, perché +semplicemente si assume che la nota continui nella misura successiva. Ma se +si presenta una lunga sequenza di misure simili, la musica può +apparire compressa o può uscire dalla pagina perché gli a capo +automatici possono essere inseriti soltanto alla fine di misure complete, +ovvero quando tutte le note finiscono prima o alla fine della misura. + +@warning{Una durata sbagliata può inibire l'interruzione di +linea, portando a una linea di musica estremamente compressa o +a musica che esce dalla pagina.} + +La durata errata può essere trovata facilmente se si usano i controlli di +battuta, si veda @ruser{Bar and bar number checks}. + +Se si vuole davvero ottenere una serie di tali misure sovrapposte +bisogna inserire una barra di divisione invisibile nel punto in cui +si desidera l'interruzione di linea. Per i dettagli si veda @ruser{Bar lines}. + + +@node Appare un rigo in più +@unnumberedsubsec Appare un rigo in più +@translationof An extra staff appears + +Se i contesti non sono creati esplicitamente con @code{\new} o +@code{\context}, saranno creati senza avviso appena si incontra +un comando che non può essere applicato a un contesto +esistente. Nelle partiture semplici la creazione automatica dei contesti +è utile: infatti la maggior parte degli esempi nei manuali LilyPond sfrutta +questa semplificazione. Talvolta, però, la creazione silenziosa di contesti +può causare la comparsa di nuovi righi o partiture non desiderate. Ad esempio, +si potrebbe pensare che il seguente codice colori di rosso tutte le teste +delle note nel rigo, ma in realtà produce due righi, di cui il più basso +conserva il colore nero predefinito per le teste delle note. + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +Questo accade perché non esiste un contesto @code{Staff} quando viene +elaborata l'istruzione di override, quindi ne viene implicitamente creato uno e +l'override viene applicato ad esso. Ma poi il comando @code{\new Staff} crea +un altro rigo separato nel quale vengono inserite le note. Il codice +corretto per colorare le teste di tutte le note è + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +Vediamo un secondo esempio. Se un comando @code{\relative} viene posto +dentro un comando @code{\repeat}, vengono generati due righi, il secondo +spostato orizzontalmente rispetto al primo, perché il comando @code{\repeat} +genera due blocchi @code{\relative}, ognuno dei quali crea implicitamente i +blocchi @code{Staff} e @code{Voice}. + +@lilypond[quote,verbatim] +\repeat unfold 2 { + \relative c' { c4 d e f } +} +@end lilypond + +Per correggere il problema basta istanziare esplicitamente il contesto +@code{Voice}: + +@lilypond[quote,verbatim] +\new Voice { + \repeat unfold 2 { + \relative c' { c4 d e f } + } +} +@end lilypond + + +@node Errore apparente in ../ly/init.ly +@unnumberedsubsec Errore apparente in @code{../ly/init.ly} +@translationof Apparent error in ../ly/init.ly + +Possono apparire diversi strani messaggi di errore relativi a errori di +sintassi in @file{../ly/init.ly} se il file di input non ha una forma corretta, +ad esempio se contiene delle parentesi o delle virgolette non chiuse +correttamente. + +L'errore più comune è la mancanza di una parentesi graffa, (@code{@}}), alla fine +di un blocco @code{score}. In questo caso la soluzione è ovvia: controlla +che il blocco @code{score} sia chiuso correttamente. La struttura corretta +di un file di input è descritta in @rlearning{Come funzionano i file di input di LilyPond}. +Per evitare questi errori conviene usare un editor che evidenzi automaticamente +le parentesi e le graffe corrispondenti. + +Un'altra causa frequente di errore è la mancanza di uno spazio tra l'ultima +sillaba di un blocco di testo (lyrics) e la parentesi graffa che chiude il +blocco, (@code{@}}). Senza questa separazione, la graffa viene considerata +come parte della sillaba. Si consiglia di assicurarsi sempre che ci sia +uno spazio prima e dopo @emph{ogni} parentesi graffa. Per comprendere l'importanza +di questo quando si usa il testo, si veda @ruser{Entering lyrics}. + +Questo messaggio di errore può apparire anche nel caso in cui sia omessa la +virgoletta di chiusura, (@code{"}). In questo caso il messaggio di errore +@c keep "-matching straight in fancy editors +dovrebbe dare un numero di riga vicino alla riga sbagliata. La virgoletta +non chiusa sarà solitamente una o due righe sopra. + +@node Messaggio di errore Unbound variable % +@unnumberedsubsec Messaggio di errore Unbound variable % +@translationof Error message Unbound variable % + +Questo messaggio di errore comparirà in fondo alla console di +output o nel file di log insieme al messaggio @qq{GUILE signalled an error ...} +ogni volta che viene chiamata una routine di Scheme che contenga (erroneamente) +un commento @emph{LilyPond} invece di un commento @emph{Scheme}. + +I commenti LilyPond iniziano con un segno di percentuale, (@code{%}), e non +devono essere usati all'interno delle routine di Scheme. I commenti Scheme +iniziano con un punto e virgola, (@code{;}). + +@node Messaggio di errore FT_Get_Glyph_Name +@unnumberedsubsec Messaggio di errore FT_Get_Glyph_Name +@translationof Error message FT_Get_Glyph_Name + +Questo messaggio di errore compare nella console di output o nel file di log file +se un file di input contiene un carattere non-ASCII e non è stato salvato nella +codifica UTF-8. Per dettagli si veda @ruser{Text encoding}. + + +@node Avvertimento sul fatto che le affinità del rigo devono solo diminuire +@unnumberedsubsec Avvertimento sul fatto che le affinità del rigo devono solo diminuire +@translationof Warning staff affinities should only decrease + +Questo avvertimento può apparire se non ci sono dei righi nell'output, +ad esempio se ci sono solo un contesto @code{ChordName} e un +contesto @code{Lyrics}, come in un lead sheet. Si possono evitare questi +messaggi di avvertimento facendo in modo che uno dei contesti si comporti +come un rigo inserendo + +@example +\override VerticalAxisGroup #'staff-affinity = ##f +@end example + +@noindent +all'inizio del contesto. Per dettagli si veda @qq{Spacing of non-staff lines} in +@ruser{Flexible vertical spacing within systems}. diff --git a/Documentation/it/usage/suggestions.itely b/Documentation/it/usage/suggestions.itely new file mode 100644 index 0000000000..5b1c967632 --- /dev/null +++ b/Documentation/it/usage/suggestions.itely @@ -0,0 +1,608 @@ +@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 Consigli su come scrivere i file +@chapter Consigli su come scrivere i file +@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 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 altri aspetti da tenere a mente quando si scrivono +file di input di LilyPond. + +@itemize +@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 +in moda da essere poi aggiornati in modo più semplice (o più difficile). + +@end itemize + +@menu +* Consigli generali:: +* Scrivere musica esistente:: +* Grandi progetti:: +* Risoluzione dei problemi:: +* Make e Makefile:: +@end menu + + +@node Consigli generali +@section Consigli generali +@translationof General suggestions + +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. 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}. 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 è 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 +di battuta (ogni tanto) o dei riferimenti ai temi musicali +(@q{secondo tema nei violini,} @q{quarta variazione,} etc.). Potresti non +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 mancano i commenti. + +@item @strong{Indenta le parentesi graffe}. Molti problemi sono causati +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 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 +@rlearning{Style sheets}. + +@end itemize + + +@node Scrivere musica esistente +@section Scrivere musica esistente +@translationof Typesetting existing music + +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 completato. Puoi usare le proprietà +@code{showLastLength} o @code{showFirstLength} per velocizzare +l'elaborazione -- vedi @ruser{Skipping corrected music}. + +@item Definisci @code{mBreak = @{ \break @}} e inserisci @code{\mBreak} +nel file di input ogni volta che nel manoscritto c'è un a capo. In questo +modo è più semplice confrontare la musica generata da LilyPond con quella +originale. Quando hai finito la revisione della partitura, puoi +definire @code{mBreak = @{ @}} per eliminare tutte queste interruzioni di +riga. Così LilyPond potrà inserire le interruzioni dove ritiene stiano +meglio. + +@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} 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 + + +@node Grandi progetti +@section Grandi progetti +@translationof Large projects + +Quando si lavora a un grande progetto, definire una struttura chiara nel +file di input diventa vitale. + +@itemize + +@item @strong{Usa una variabile per ogni voce}, con un minimo di +struttura nella definizione. La struttura della sezione +@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 +violin = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violin + @} + @} +@} +@end example + +@item @strong{Separa le modifiche manuali (tweak) dalle definizioni musicali}. Questo +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}. + +@example +fthenp = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fthenp c'8. e16 +@} +@end example + +@end itemize + + +@node Risoluzione dei problemi +@section Risoluzione dei problemi +@translationof Troubleshooting + +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 sarà necessario fare qualche ricerca +per individuare l'origine del problema. + +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 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 ottieni un codice +funzionante. + +Nel caso estremo, potresti finire con soltanto + +@example +\score @{ + << + % \melody + % \harmony + % \bass + >> + \layout@{@} +@} +@end example + +@noindent +(in altre parole, un file senza musica) + +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). + +@example +bass = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +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 Makefile +@section Make e Makefile +@translationof Make and 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 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. + +In alcune situazioni, è una buona idea creare un @code{Makefile} +per il proprio progetto, per proprio comodo o come cortesia +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 +richiedono comandi difficili per la compilazione (come i progetti che +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 delle sue potenzialità. + +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 è 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 una composizione per orchestra in quattro +movimenti e presenta una directory strutturata come segue: + +@example +Symphony/ +|-- MIDI/ +|-- Makefile +|-- Notes/ +| |-- cello.ily +| |-- figures.ily +| |-- horn.ily +| |-- oboe.ily +| |-- trioString.ily +| |-- viola.ily +| |-- violinOne.ily +| `-- violinTwo.ily +|-- PDF/ +|-- Parts/ +| |-- symphony-cello.ly +| |-- symphony-horn.ly +| |-- symphony-oboes.ly +| |-- symphony-viola.ly +| |-- symphony-violinOne.ly +| `-- symphony-violinTwo.ly +|-- Scores/ +| |-- symphony.ly +| |-- symphonyI.ly +| |-- symphonyII.ly +| |-- symphonyIII.ly +| `-- symphonyIV.ly +`-- symphonyDefs.ily +@end example + +I file @file{.ly} nelle directory @file{Scores} e +@file{Parts} prendono le note dai file @file{.ily} +nella directory @file{Notes}: + +@example +%%% inizio del file "symphony-cello.ly" +\include ../definitions.ily +\include ../Notes/cello.ily +@end example + +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 +nome @code{Makefile} nella directory principale del progetto: + +@warning{Quando si definisce un target o una regola di pattern, le +linee successive devono iniziare con i tabulatori, non con gli spazi.} + +@example +# Il prefisso al nome dei file di output +piece = symphony +# Determinazione del numero dei processori +CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` +# Il comando per eseguire lilypond +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click -djob-count=$(CPU_CORES) + +# I suffissi usati in questo Makefile. +.SUFFIXES: .ly .ily .pdf .midi + +# I file di input e di output vengono cercati nelle directory elencate +# nella variabile VPATH. Tutte queste sono sottodirectory della directory +# corrente (assegnata dalla variabile `CURDIR' di GNU make). +VPATH = \ + $(CURDIR)/Scores \ + $(CURDIR)/PDF \ + $(CURDIR)/Parts \ + $(CURDIR)/Notes + +# La regola di pattern per creare i file PDF e MIDI da un file di input LY. +# I file di output .pdf vengono messi nella sottodirectory `PDF', mentre i file +# .midi vanno nella sottodirectory `MIDI'. +%.pdf %.midi: %.ly + $(LILY_CMD) $<; \ # questa linea inizia con una tabulazione + if test -f "$*.pdf"; then \ + mv "$*.pdf" PDF/; \ + fi; \ + if test -f "$*.midi"; then \ + mv "$*.midi" MIDI/; \ + fi + +notes = \ + cello.ily \ + horn.ily \ + oboe.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +# Le dipendenze dei movimenti. +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +# Le dipendenze della partitura completa. +$(piece).pdf: $(piece).ly $(notes) + +# Le dipendenze delle parti. +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +# Lanciare `make score' per generare la partitura completa di tutti i quattro +# movimenti in un unico file. +.PHONY: score +score: $(piece).pdf + +# Lanciare `make parts' per generare tutte le parti. +# Lanciare `make foo.pdf' per generare la parte per lo strumento `foo'. +# Esempio: `make symphony-cello.pdf'. +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +# Lanciare `make movements' per generare i file per i +# quattro movimenti separatamente. +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements + +archive: + tar -cvvf stamitz.tar \ # questa linea inizia con una tabulazione + --exclude=*pdf --exclude=*~ \ + --exclude=*midi --exclude=*.tar \ + ../Stamitz/* +@end example + + +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 +del mouse su "My Computer," poi scegli @code{Proprietà} e +@code{Avanzate}. Clicca su @code{Variabili di ambiente}, e poi nel +pannello @code{Variabili di Sistema}, nella sezione @code{Percorso}, clicca su +@code{modifica} e aggiungi il percorso al file eseguibile GNU Make, che +avrà un aspetto simile: + +@example +C:\Program Files\GnuWin32\bin +@end example + +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 +predefinita per i file midi. + + +@example +## VERSIONE DI WINDOWS +## +piece = symphony +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click \ + -djob-count=$(NUMBER_OF_PROCESSORS) + +#get the 8.3 name of CURDIR (workaround for spaces in PATH) +workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ + do @@echo %%~sb) + +.SUFFIXES: .ly .ily .pdf .mid + +VPATH = \ + $(workdir)/Scores \ + $(workdir)/PDF \ + $(workdir)/Parts \ + $(workdir)/Notes + +%.pdf %.mid: %.ly + $(LILY_CMD) $< # questa linea inizia con una tabulazione + if exist "$*.pdf" move /Y "$*.pdf" PDF/ + if exist "$*.mid" move /Y "$*.mid" MIDI/ + +notes = \ + cello.ily \ + figures.ily \ + horn.ily \ + oboe.ily \ + trioString.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +$(piece).pdf: $(piece).ly $(notes) + +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +.PHONY: score +score: $(piece).pdf + +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements +@end example + + +Il Makefile seguente è per un documento @command{lilypond-book} fatto con +LaTeX. Questo progetto ha un indice, dunque il comando @command{latex} deve +essere eseguito due volte per aggiornare i collegamenti. I file di output +sono tutti salvati nella directory @code{out} per i file .pdf e nella directory +@code{htmlout} per i file html. + +@example +SHELL=/bin/sh +FILE=myproject +OUTDIR=out +WEBDIR=htmlout +VIEWER=acroread +BROWSER=firefox +LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex +LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex +PDF=cd $(OUTDIR) && pdflatex $(FILE) +HTML=cd $(WEBDIR) && latex2html $(FILE) +INDEX=cd $(OUTDIR) && makeindex $(FILE) +PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf & + +all: pdf web keep + +pdf: + $(LILYBOOK_PDF) # inizia con una tabulazione + $(PDF) # inizia con una tabulazione + $(INDEX) # inizia con una tabulazione + $(PDF) # inizia con una tabulazione + $(PREVIEW) # inizia con una tabulazione + +web: + $(LILYBOOK_HTML) # inizia con una tabulazione + $(HTML) # inizia con una tabulazione + cp -R $(WEBDIR)/$(FILE)/ ./ # inizia con una tabulazione + $(BROWSER) $(FILE)/$(FILE).html & # inizia con una tabulazione + +keep: pdf + cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # inizia con una tabulazione + +clean: + rm -rf $(OUTDIR) # inizia con una tabulazione + +web-clean: + rm -rf $(WEBDIR) # inizia con una tabulazione + +archive: + tar -cvvf myproject.tar \ # inizia questa linea con una tabulazione + --exclude=out/* \ + --exclude=htmlout/* \ + --exclude=myproject/* \ + --exclude=*midi \ + --exclude=*pdf \ + --exclude=*~ \ + ../MyProject/* +@end example + +@c TODO: make this thing work on Windows + +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 +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 +un doppio clic sulla sua icona. + +@example +lilypond-book --output=out --pdf myproject.lytex +cd out +pdflatex myproject +makeindex myproject +pdflatex myproject +cd .. +copy out\myproject.pdf MyProject.pdf +@end example + + +@seealso + +Questo manuale: +@ref{Uso da linea di comando}, +@ref{lilypond-book} + diff --git a/Documentation/it/usage/updating.itely b/Documentation/it/usage/updating.itely new file mode 100644 index 0000000000..f38736b1f7 --- /dev/null +++ b/Documentation/it/usage/updating.itely @@ -0,0 +1,267 @@ +@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 Aggiornare i file con convert-ly +@chapter Aggiornare i file con @command{convert-ly} +@translationof Updating files with convert-ly + +@cindex Aggiornare un file di LilyPond +@cindex convert-ly + +La sintassi di input di LilyPond viene regolarmente modificata per semplificarla +o per migliorarla in vari modi. L'effetto collaterale è che l'interprete di LilyPond +spesso non è più compatibile con i vecchi file di input. Per ovviare a questo +problema, si può usare il programma @command{convert-ly}, che permette di gestire +gran parte dei cambiamenti di sintassi tra le versioni di LilyPond. + +@menu +* Perché la sintassi cambia?:: +* Utilizzo di convert-ly:: +* Opzioni da linea di comando per convert-ly:: +* Problemi nell'eseguire convert-ly:: +* Conversioni manuali:: +@end menu + + +@node Perché la sintassi cambia? +@section Perché la sintassi cambia? +@translationof Why does the syntax change? + +@cindex convert-ly +@cindex aggiornare i vecchi file di input + +La sintassi di input di LilyPond talvolta cambia. Via via che LilyPond +migliora, la sintassi (il linguaggio dell'input) viene modificata di +conseguenza. Queste modifiche vengono fatte a volte per far sì che l'input +sia più facile da leggere e da scrivere e a volte per aggiungere a LilyPond +nuove funzionalità. + +Ad esempio, tutti i nomi delle proprietà di @code{\paper} e @code{\layout} +dovrebbero essere scritte nella forma @code{primo-secondo-terzo}. +Tuttavia, nella versione 2.11.60 ci siamo accorti che la proprietà +@code{printallheaders} non seguiva questa convenzione. +Dovevamo lasciarla così come era (confondendo i nuovi utenti che devono avere +a che fare con un formato di input incoerente), o cambiarla (disturbando i +vecchi utenti che avevano già delle partiture)? In questo caso decidemmo di +cambiare il nome in @code{print-all-headers}. Fortunatamente, questa modifica +può essere automatizzata con @command{convert-ly}. + +Purtroppo @code{convert-ly} non è in grado di gestire tutti i cambiamenti +dell'input. Ad esempio, in LilyPond 2.4 e precedenti, gli accenti e le lettere +non inglesi venivano inserite con LaTeX -- per mostrare la parola francese per +Natale si usava @code{No\"el}. Ma in LilyPond +@c keep "-matching straight in fancy editors +2.6 e superiori, il carattere speciale @code{ë} deve essere inserito direttamente +nel file LilyPond come carattere UTF-8. @code{convert-ly} non può sostituire +tutti i caratteri speciali di LaTeX con i rispettivi caratteri UTF-8; è necessario +aggiornare a mano i vecchi file di input di LilyPond. + + +@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 +per determinare il vecchio numero di versione. Nella maggior parte dei casi +per aggiornare il file di input è sufficiente eseguire + +@example +convert-ly -e miofile.ly +@end example + +@noindent +nella directory che contiene il file. Questo comando aggiornerà +@file{miofile.ly} e preserverà il file originale in +@file{miofile.ly~}. + +@warning{@command{convert-ly} converte sempre fino all'ultimo cambiamento di +sintassi gestito. Questo significa che il numero di @code{\version} +che appare nel file convertito è di solito inferiore al numero di versione di +@command{convert-ly}.} + +Per convertire in una volta sola tutti i file di input in una directory si usa + +@example +convert-ly -e *.ly +@end example + +Altrimenti, se si desidera specificare un nome diverso per il file +aggiornato, senza modificare il file originale e il suo nome, si usa + +@example +convert-ly miofile.ly > mionuovofile.ly +@end example + +Il programma elencherà i numeri di versione per i quali sono state eseguite +le conversioni. Se non vengono elencati dei numeri di versione il file è +già aggiornato. + +Gli utenti MacOS@tie{}X possono eseguire questi comandi dalla voce di menu +@code{Compila > Aggiorna la sintassi}. + +Gli utenti Windows devono inserire questi comandi nella finestra del Prompt +dei comandi, che di solito si trova in +@code{Start > Accessori > Prompt dei comandi}. + + +@node Opzioni da linea di comando per convert-ly +@section Opzioni da linea di comando per @command{convert-ly} +@translationof Command line options for convert-ly + +Il programma viene lanciato in questo modo: + +@example +convert-ly [@var{opzione}]@dots{} @var{nomefile}@dots{} +@end example + + +Esistono le seguenti opzioni: + +@table @code +@item -e,--edit +Applica le conversioni direttamente nel file di input, modificando +l'originale. + +@item -f,--from=@var{from-patchlevel} +Imposta la versione da cui convertire. Se non viene impostata, @command{convert-ly} +la ricaverà dalla stringa @code{\version} presente nel file. +Esempio: @code{--from=2.10.25} + +@item -n,--no-version +Normalmente @command{convert-ly} aggiunge un indicatore @code{\version} +nell'output. Questa opzione lo impedisce. + +@item -s, --show-rules +Mostra tutte le conversioni conosciute ed esce. + +@item --to=@var{to-patchlevel} +Imposta la versione obiettivo della conversione. L'impostazione predefinita +è l'ultima versione disponibile. Esempio: @code{--to=2.12.2} + +@item -h, --help +Mostra la schermata di aiuto. +@end table + +Per aggiornare i frammenti LilyPond presenti nei file texinfo, si usa + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +Per vedere i cambiamenti della sintassi di LilyPond tra due versioni, si usa + +@example +convert-ly --from=... --to=... -s +@end example + + +@node Problemi nell'eseguire convert-ly +@section Problemi nell'eseguire @code{convert-ly} +@translationof Problems running convert-ly + +Quando si esegue convert-ly in una finestra del Prompt dei comandi in Windows +su un file il cui nome o percorso contengano degli spazi, +è necessario includere tutto il nome del file di input con tre +(!) virgolette doppie: + +@example +convert-ly """D:/Mie Partiture/Ode.ly""" > "D:/Mie Partiture/new Ode.ly" +@end example + +Se il semplice comando @command{convert-ly -e *.ly} non funziona perché la +linea di comando espansa diventa troppo lunga, si può inserire il comando +@command{convert-ly} in un loop. Questo esempio per UNIX +aggiornerà tutti i file @file{.ly} nella directory corrente + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +Nella finestra del Prompt dei comandi di Windows il comando corrispondente è + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +Non vengono gestiti tutti i cambiamenti del linguaggio. Si può specificare solo +un'opzione di output. È piuttosto improbabile che si aggiornino automaticamente +il codice scheme e le interfacce di scheme di LilyPond; tieniti pronto a +correggere a mano il codice scheme. + + +@node Conversioni manuali +@section Conversioni manuali +@translationof Manual conversions + +In teoria, un programma come @command{convert-ly} potrebbe gestire qualsiasi +cambiamento di sintassi. Dopo tutto, un programma per computer interpreta +la vecchia versione e la nuova versione, quindi un altro programma +può tradurre un file in un altro@footnote{O almeno questo è possibile +in qualsiasi file LilyPond che non contenga codice scheme. Se c'è del +codice scheme nel file, allora il file LilyPond contiene un linguaggio +Turing-completo, ed è possibile imbattersi in problemi col famigerato +@qq{Problema dell'arresto} in informatica.}. + +Tuttavia il progetto LilyPond ha risorse limitate: non tutte le +conversioni sono compiute automaticamente. Di seguito è riportato l'elenco +dei problemi noti. + + +@verbatim +1.6->2.0: + Doesn't always convert figured bass correctly, specifically things like {< +>}. Mats' comment on working around this: + To be able to run convert-ly + on it, I first replaced all occurrences of '{<' to some dummy like '{#' + and similarly I replaced '>}' with '&}'. After the conversion, I could + then change back from '{ #' to '{ <' and from '& }' to '> }'. + Doesn't convert all text markup correctly. In the old markup syntax, + it was possible to group a number of markup commands together within +parentheses, e.g. + -#'((bold italic) "string") + This will incorrectly be converted into + -\markup{{\bold italic} "string"} + instead of the correct + -\markup{\bold \italic "string"} +2.0->2.2: + Doesn't handle \partcombine + Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple +stanzas. +2.0->2.4: + \magnify isn't changed to \fontsize. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag isn't changed. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number isn't changed. + - first-page-number no => print-first-page-number = ##f + Line breaks in header strings aren't converted. + - \\\\ as line break in \header strings => \markup \center-align < + "First Line" "Second Line" > + Crescendo and decrescendo terminators aren't converted. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly +converted. +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } should be converted to: + \markup{ \center-align {\line { ... }} } + but now, \line is missing. +2.4->2.6 + Special LaTeX characters such as $~$ in text are not converted to UTF8. +2.8 + \score{} must now begin with a music expression. Anything else + (particularly \header{}) must come after the music. +@end verbatim + + diff --git a/Documentation/it/web.texi b/Documentation/it/web.texi new file mode 100644 index 0000000000..2e9719de71 --- /dev/null +++ b/Documentation/it/web.texi @@ -0,0 +1,313 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 4d852ef65fc654e4ed02413926fc0cb78a1da1be + + 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 + +@setfilename web.info +@settitle LilyPond -- Notazione musicale per tutti +@documentencoding UTF-8 +@documentlanguage it +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 by the authors. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + +@afourpaper + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Italian +@end ignore + +@c Translators: Federico Bruni +@c Translation checkers: Luca Rossetto Casel + +@copying +Copyright @copyright{} 2009--2011 degli autori. + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@end quotation +@end copying + + +@c TITLE PAGE +@ifnottex +@node Su +@top LilyPond... notazione musicale per tutti +@translationof Top +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle Il compositore tipografico di musica +@titlefont{Informazioni generali} +@author Il team di sviluppo di LilyPond + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +Per la versione di LilyPond @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... notazione musicale per tutti +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading Cos'è LilyPond? + +LilyPond è un programma di incisione musicale e il suo scopo è produrre spartiti +musicali della migliore qualità possibile. Introduce nelle stampe prodotte dai +computer l'estetica della musica incisa secondo i metodi tradizionali. LilyPond è +software libero e parte del @uref{http://gnu.org,Progetto GNU}. + +@divClass{align-right} +Maggiori informazioni nella nostra @ref{Introduzione}! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Notizie vecchie}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading Link rapidi + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Stabile + +@ref{Download, Download @versionStable} + +@ref{Manuali, Manuali @versionStable} + +@subsubheading Instabile + +@ref{Sviluppo, Download @versionDevel} + +@ref{Sviluppo, Manuali @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* Introduzione:: Inizia da qui se vuoi creare spartiti musicali. +* Download:: Scarica LilyPond. +* Manuali:: Leggi i manuali (RTFM). +* Comunità:: Contatta altri utenti. +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@c * lilypond: (lilypond-application)Running LilyPond. Invoking the +@c LilyPond program. +@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 --- il compositore tipografico di musica +@direntry +* Manuale di Apprendimento di LilyPond: (lilypond-learning). Comincia da qui. +* Glossario Musicale: (music-glossary). Per gli utenti non di lingua inglese. +* LilyPond: (lilypond-notation). Guida alla Notazione di LilyPond. +* Frammenti di Codice di LilyPond: (lilypond-snippets). Piccoli trucchi, consigli, e esempi. +* Guida al Funzionamento Interno: (lilypond-internals). Definizioni per le modifiche manuali. +* Uso del Programma: (lilypond-application). Istallazione e esecuzione delle applicazioni. +* Sito web: (lilypond-web). Anteprima del nuovo sito. +* lilypond: (lilypond-usage)Eseguire lilypond. Invocare il programma LilyPond. +* abc2ly: (lilypond-usage)Invocare abc2ly. Importare ABC. +* convert-ly: (lilypond-usage)Aggiornare i file con convert-ly. Versioni precedenti di LilyPond. +* etf2ly: (lilypond-usage)Invocare etf2ly. Importare Finale. +* lilypond-book: (lilypond-usage)lilypond-book. Integrare testo e musica. +* midi2ly: (lilypond-usage)Invocare midi2ly. Importare MIDI. +* musicxml2ly: (lilypond-usage)Invocare musicxml2ly. Importare 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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Leggilo + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (split HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (big HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + il manuale è diviso in tante pagine HTML. + @*@ @ @emph{(small download for each page)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + leggi questo manuale in un'unica grande pagina HTML. + @*@ @ @emph{(large single download, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + scarica come file PDF. + @*@ @ @emph{(large single download, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +Se sei a conoscenza di un qualsiasi altro \topic\ che possa essere elencato qui, +sei pregato di farcelo sapere seguendo le istruzioni indicate in +@ref{Segnalazione bug}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +Se sei a conoscenza di un qualsiasi altro \topic\ che possa essere elencato qui, +sei pregato di farcelo sapere seguendo le istruzioni indicate in +@ref{Segnalazione bug}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/it/web/GNUmakefile b/Documentation/it/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/it/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/it/web/community.itexi b/Documentation/it/web/community.itexi new file mode 100644 index 0000000000..476c897f12 --- /dev/null +++ b/Documentation/it/web/community.itexi @@ -0,0 +1,834 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: ee3a89f9f7289bcd90c5f27fd8f86400159088b2 + + 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 + +@include included/authors.itexi +@include included/helpus.itexi + +@node Comunità +@unnumbered Comunità +@translationof Community + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Interagire con la comunità + +@itemize + +@item +@ref{Contatti}: chiedi aiuto, discuti e resta in contatto! + +@item +@ref{Esempi minimi}: questi esempi sono @emph{altamente} raccomandati +quando si discute di LilyPond. + +@item +@ref{Segnalazione bug}: qualcosa non ha funzionato. + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading Migliorare LilyPond + +@itemize + +@item +@ref{Aiutaci}: è richiesto il tuo aiuto. + +@item +@ref{Sviluppo}: per i collaboratori e i tester. + +@item +@ref{Autori}: le persone che hanno reso LilyPond quello che è oggi. + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading Varie + +@itemize + +@item +@ref{Pubblicazioni}: cosa abbiamo scritto, e cosa è stato scritto su di noi. + +@item +@ref{Notizie vecchie}: un archivio. + +@end itemize +@divEnd + +@divEnd + +@divClass{hide} +@menu +* Contatti:: +* Esempi minimi:: +* Segnalazione bug:: +* Aiutaci:: +* Sviluppo:: +* Autori:: +* Pubblicazioni:: +* Notizie vecchie:: +@end menu +@divEnd + + +@node Contatti +@unnumberedsec Contatti +@translationof Contact + + +@divClass{column-left-bottom} +@subheading Discussioni e aiuto per gli utenti + +@subsubheading Mailing list degli utenti: @code{lilypond-user@@gnu.org} + +Questa mailing list è il principale luogo dove gli utenti possono discutere +e aiutarsi. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user, +iscrizione e informazioni su lilypond-user} + +@uref{http://lists.gnu.org/archive/html/lilypond-user/, +archivio 1 della lista degli utenti} +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +archivio 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +archivio 3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +scrivi alla lista lilypond-user tramite gmane} +@end quotation + +@warning{Quando poni domande, usa gli @ref{Esempi minimi}!} + +@subsubheading LilyPond Snippet Repository + +Il LilyPond Snippet Repository è una grande raccolta di esempi +proposti dagli utenti, che possono essere liberamente copiati e +usati nei tuoi lavori. Guarda quello che hanno scritto altre persone, +e aggiungi i tuoi esempi! + +@example +@uref{http://lsr.dsi.unimi.it} +@end example + +Esempi particolarmente istruttivi provenienti dal LSR sono inclusi nella +nostra documentazione ufficiale, in @ref{Snippets}. + +@subsubheading IRC + +Un certo livello di supporto è fornito nel nostro canale IRC, + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +Questo canale non ha un archivio pubblico, dunque qualsiasi domanda che +potrebbe essere utile per altri dovrebbe essere inviata a una delle mailing list. + +@html +
irc name: + + + + +
+ + +@end html + +@subsubheading Altre lingue + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-es, +mailing list spagnola} + +@uref{http://www.lilypondforum.de/, +forum tedesco} + +@uref{http://groups.google.com/group/lilypond-brasil, +gruppo portoghese} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +mailing list francese} + +@uref{http://www.lilypondforum.nl/, +forum olandese} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Resta informato + +@subsubheading LilyPond Report + +Il modo più semplice per restare in contatto è leggere la newsletter della +nostra comunità, il @uref{http://news.lilynet.net/, LilyPond Report}. + +@subsubheading Mailing list dei rilasci: @code{info-lilypond@@gnu.org} + +Questa mailing list è una lista a basso volume e in sola lettura che riceve +notifiche dei nuovi rilasci. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +iscrizione e informazioni su info-lilypond} + +@uref{http://lists.gnu.org/archive/html/info-lilypond/, +archivio 1 della lista info} +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +archivio 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +archivio 3} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading Discussione per gli Sviluppatori + +@subsubheading Mailing list degli sviluppatori: @code{lilypond-devel@@gnu.org} + +Gran parte delle discussioni tra sviluppatori ha luogo in questa lista. Le +pezze (patch) devono essere inviate qui. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel, +iscrizione e informazioni su lilypond-devel} + +@uref{http://lists.gnu.org/archive/html/lilypond-devel/, +archivio 1 della lista devel} +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +archivio 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +archivio 3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +scrivi alla lista lilypond-devel tramite gmane} +@end quotation + + +@subsubheading Mailing list dei bug: @code{bug-lilypond@@gnu.org} + +Le discussioni relative ai bug hanno luogo qui. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond, +iscrizione e informazioni su bug-lilypond} + +@uref{http://lists.gnu.org/archive/html/bug-lilypond/, +archivio 1 della lista bug} +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +archivio 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +archivio 3} + +@c don't include gmane posting here. -gp +@end quotation + +@warning{Prima di inviare un messaggio alla lista bug, leggi le nostre +linee guida per la @ref{Segnalazione bug}.} + +@divEnd + + + +@node Esempi minimi +@unnumberedsec Esempi minimi +@translationof Tiny examples + +@divClass{column-center-top} +@subheading Cosa sono gli @qq{Esempi minimi}? + +Un esempio minimo è un esempio dal quale niente può essere tolto. +@divEnd + +@divClass{column-left-bottom} +@subheading Perché crearli? + +@divClass{keep-bullets} +@itemize + +@item +Più l'esempio è semplice, più rapidamente potenziali solutori +possono comprenderlo e aiutarti. + +@item +Un esempio semplice dimostra che hai tentato di risolvere il problema +da solo. Quando le persone inviano grandi porzioni di input, sembra +che non si preoccupino che noi li possiamo aiutare o no. + +@item +Creare un esempio minimo ti spinge a capire cosa sta +succedendo. Molte segnalazioni di un falso problema possono essere +evitate se si prova a creare un esempio minimo; se non riesci a ricreare +un @qq{bug} in un esempio minimo, allora probabilmente il problema è +una comprensione di LilyPond insufficiente, non un vero bug! + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading Come li creo? + +@divClass{keep-bullets} +@itemize + +@item +Includi il numero di versione nel comando \version. + +@item +Crea un esempio piccolo! Gli esempi che riguardano la spaziatura o la +formattazione di pagina potrebbero richiedere molte battute, ma la maggior +parte dei problemi può essere ricreata in una singola +battuta. + +@item +Durante la preparazione di un esempio, cerca di commentare @w{(@code{%} +o @code{%@{ @dots{} %@}})} le sezioni del tuo file. Se riesci a +commentare una porzione di codice riuscendo a mantenere chiara l'idea principale, +allora elimina il materiale commentato! + +@item +Evita di usare note, tonalità, o segni di tempo complicati a meno che +il malfunzionamento non riguardi proprio il comportamento di questi elementi. + +@item +Non usare i comandi @code{\override} o @code{\set} a meno che il malfunzionamento +non riguardi questi comandi in particolare. + +@end itemize +@divEnd + +@divEnd + + + + +@node Segnalazione bug +@unnumberedsec Segnalazione bug +@translationof Bug reports + +@divClass{column-center-top} +@subheading Passo 1: Bug noti + +Se hai un codice di input che produce un crash o un output sbagliato, +allora si tratta di un bug. Sul nostro bug tracker su google c'è una +lista dei bug aperti, + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{Per favore @strong{NON} aggiungere segnalazioni di bug direttamente +nel bug tracker. Una volta che il problema è stato aggiunto al tracker, aggiungi +pure maggiori informazioni nella segnalazione.} + +@divEnd + + +@divClass{column-left-bottom} +@subheading Passo 2: Creare una segnalazione bug + +Se hai scoperto un bug che non è elencato, puoi aiutarci creando +una segnalazione bug. + +@warning{Accettiamo segnalazioni bug esclusivamente nella forma di @ref{Esempi +minimi}. Abbiamo risorse molto limitate da dedicare alle segnalazioni +bug, quindi qualsiasi esempio non minimo sarà scartato. Quasi +ogni bug può essere dimostrato con quattro note o meno!} + +Ecco un esempio di una valida segnalazione bug: + +@example +%% il comando di ottavazione +%% non modifica l'output! + +\version "2.10.0" +\paper@{ ragged-right=##t @} +\relative c''' @{ + c1 + #(set-octavation 1) + c1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading Passo 3: Inviare una segnalazione bug + +Dopo aver verificato che il problema non sia già noto e aver +creato una segnalazione bug, inviacela! + +@divClass{keep-bullets} +@itemize + +@item +Sei iscritto alla mailing list @uref{mailto:bug-lilypond@@gnu.org, +bug-lilypond@@gnu.org}, puoi inviare una normale email. + +@item +Se non sei iscritto, puoi comunque inviare una segnalazione bug report attraverso +the +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +l'interfaccia web lilypond.bugs di gmane}. + +Purtroppo c'è un severo controllo @qq{no top-posting} nell'interfaccia di +gmane, che viene spesso innescato erroneamente dai file lilypond. +Per evitarlo, aggiungi + +@example +> I'm not top posting. +@end example + +@noindent +(@emph{devi} includere il @code{>} ) in cima alla tua segnalazione bug. + +@end itemize +@divEnd + +Una volta che il bug è stato inviato alla lista, la nostra Squadra Bug esaminerà +la segnalazione. Una risposta può richiedere fino a 24 ore, perché abbiamo +un numero limitato di volontari per questo compito. Potrebbero chiederti maggiori +informazioni, oppure aggiungere la segnalazione al tracker e comunicartene il +numero di riferimento. + +Puoi contrassegnare il bug in modo da ricevere automaticamente delle email +ogni volta capiti un'attività relativa al bug. Per fare questo occorre +avere un account google. +@divEnd + + +@node Aiutaci +@unnumberedsec Aiutaci +@translationof Help us + +@divClass{column-center-top} +@helpusNeed + +@divEnd + +@divClass{column-left-top} +@divClass{keep-bullets} +@helpusTasks + +@divEnd +@divEnd + +@divClass{column-right-top} +@helpusProjects + +@divEnd + + +@node Sviluppo +@unnumberedsec Sviluppo +@translationof Development + +@divClass{heading-center} +@ifclear web_version + @heading Development for LilyPond @version +@end ifclear +@ifset web_version + @heading Development for LilyPond @versionDevel +@end ifset + +@c we normally don't allow named references, but in this case +@c it's good to emphasize the "stable" part. -gp +@warning{Queste sono le versioni @emph{instabili e di sviluppo}. Se hai +un minimo dubbio su come usare o installare LilyPond, ti raccomandiamo +di usare il @ref{Download, download per la versione stabile}, e leggere i +@ref{Manuali, manuali stabili}.} + +@divEnd + +@divClass{column-center-top} +@subheading Numeri di versione + +LilyPond viene distribuito in due versioni: la versione stabile e quella +di sviluppo o instabile. Le versioni stabili hanno un numero pari +per numero di versione @q{minore} (e.g., 2.8, 2.10, 2.12). +Le versioni di sviluppo hanno un numero dispari per numero di versione +@q{minore} (e.g., 2.7, 2.9, 2.11). + +@divEnd + + +@divClass{column-left-top} +@subheading Download + +Le istruzioni su git e la compilazione sono nella Guida del Collaboratore. + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, repository git di lilypond} +@end quotation + +Gli editor della Documentazione e i tester generalmente vorranno scaricare +l'ultimo binario: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource + +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Guida del Collaboratore + +Lo sviluppo di LilyPond è piuttosto complesso. Per aiutare i +nuovi collaboratori e mantenere l'intero sistema (tendenzialmente) +stabile, abbiamo scritto un manuale per i compiti di sviluppo. + +@docLinksBare{Contributor's Guide, contributor, + @rcontribnamed{Top,Contributor's Guide}, + @manualDevelContributorSplit, + @manualDevelContributorBig, 500 kB, + @manualDevelContributorPdf, 2.8 MB} + +@divEnd + + +@divClass{column-center-top} +@subheading Collaudi di regressione + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@uref{../../input/regression/collated-files.html, Regression tests}: +I collaudi per questa versione. +(@uref{../../input/regression/collated-files.pdf, pdf version}) + +@item +@uref{../../input/regression/musicxml/collated-files.html, MusicXML tests}: +I collaudi musicXML per questa versione. +(@uref{../../input/regression/musicxml/collated-files.pdf, pdf version}) + +@item +@uref{../../input/regression/abc2ly/collated-files.html, abc2ly tests}: +I collaudi abc2ly per questa versione. +(@uref{../../input/regression/abc2ly/collated-files.pdf, pdf version}) + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, lilypond-book tests}: +I collaudi lilypond-book per questa versione. +(@uref{../../input/regression/lilypond-book/collated-files.pdf, pdf version}) +@end itemize +@end ifclear + +@ifset web_version +@subsubheading Versione di sviluppo + +@itemize +@item @regtestDevel (@regtestDevelPdf{}) + +@item @regtestDevelXml (@regtestDevelXmlPdf{}) + +@item @regtestDevelAbc (@regtestDevelAbcPdf{}) + +@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{}) +@end itemize + +@subsubheading Versione stabile + +@itemize +@item @regtestStable (@regtestStablePdf{}) + +@item @regtestStableXml (@regtestStableXmlPdf{}) + +@item @regtestStableAbc (@regtestStableAbcPdf{}) + +@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{}) +@end itemize +@end ifset + +@subsubheading Tutte le versioni + +@itemize +@item @uref{http://lilypond.org/test, Confronto tra i collaudi di regressione} + +@item @uref{http://lilypond.org/download/binaries/test-output/, +Archivio di tutti i collaudi di regressione} + +@end itemize + +@divEnd +@divEnd + + + +@divClass{column-center-bottom} +@subheading Manuali + +@ifclear web_version +@warning{Questi manuali sono per LilyPond @version{}; gli ultimi +manuali sono reperibili su @url{http://lilypond.org}} +@end ifclear + +@divClass{normal-table} +@multitable @columnfractions .3 .3 .3 +@headitem Introduzione +@item +@docLinkSplit{Learning,learning,@manualDevelLearningSplit} +@tab +@docLinkBig{Learning,learning,@manualDevelLearningBig} +@tab +@docLinkPdf{Learning,learning,@manualDevelLearningPdf} + +@item +@docLinkSplit{Glossary,music-glossary,@manualDevelGlossarySplit} +@tab +@docLinkBig{Glossary,music-glossary,@manualDevelGlossaryBig} +@tab +@docLinkPdf{Glossary,music-glossary,@manualDevelGlossaryPdf} + +@item +@docLinkSplit{Essay,essay,@manualDevelEssaySplit} +@tab +@docLinkBig{Essay,essay,@manualDevelEssayBig} +@tab +@docLinkPdf{Essay,essay,@manualDevelEssayPdf} + +@headitem Regolare + +@item +@docLinkSplit{Notation,notation,@manualDevelNotationSplit} +@tab +@docLinkBig{Notation,notation,@manualDevelNotationBig} +@tab +@docLinkPdf{Notation,notation,@manualDevelNotationPdf} + +@item +@docLinkSplit{Usage,usage,@manualDevelUsageSplit} +@tab +@docLinkBig{Usage,usage,@manualDevelUsageBig} +@tab +@docLinkPdf{Usage,usage,@manualDevelUsagePdf} + +@item +@docLinkSplit{Snippets,snippets,@manualDevelSnippetsSplit} +@tab +@docLinkBig{Snippets,snippets,@manualDevelSnippetsBig} +@tab +@docLinkPdf{Snippets,snippets,@manualDevelSnippetsPdf} + +@headitem Saltuario + +@item +@docLinkSplit{Web,web,@manualDevelWebSplit} +@tab +@docLinkBig{Web,web,@manualDevelWebBig} +@tab +@docLinkPdf{Web,web,@manualDevelWebPdf} + +@item +@docLinkSplit{Changes,changes,@manualDevelChangesSplit} +@tab +@docLinkBig{Changes,changes,@manualDevelChangesBig} +@tab +@docLinkPdf{Changes,changes,@manualDevelChangesPdf} + +@item +@docLinkSplit{Extending,extending,@manualDevelExtendingSplit} +@tab +@docLinkBig{Extending,extending,@manualDevelExtendingBig} +@tab +@docLinkPdf{Extending,extending,@manualDevelExtendingPdf} + +@item +@docLinkSplit{Internals,internals,@manualDevelInternalsSplit} +@tab +@docLinkBig{Internals,internals,@manualDevelInternalsBig} +@tab +@docLinkPdf{Internals,internals,@manualDevelInternalsPdf} + +@ifset web_version +@headitem Per scaricare + +@item +@doctarballDevel +@end ifset + +@end multitable + +@divEnd +@divEnd + + + + +@node Autori +@unnumberedsec Autori +@translationof Authors + +@divClass{column-left-top} +@subheading Team di Sviluppo attuale + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Team di Sviluppo precedente + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading Collaboratori attuali + +@divClass{keep-bullets} +@subsubheading Programmazione + +@coreCurrent + +@subsubheading Font tipografico + +@fontCurrent + +@subsubheading Documentazione + +@docCurrent + +@subsubheading Bug squad + +@bugsquadCurrent + +@subsubheading Supporto + +@supportCurrent + +@subsubheading Traduzione + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Collaboratori precedenti + +@divClass{keep-bullets} +@subsubheading Programmazione + +@corePrevious + +@subsubheading Font tipografico + +@fontPrevious + +@subsubheading Documentazione + +@docPrevious + +@c uncomment when we have any previous members -gp +@c @subsubheading Bug squad + +@c @bugsquadCurrent + +@subsubheading Supporto + +@supportPrevious + +@subsubheading Traduzione + +@translationsPrevious + +@divEnd +@divEnd + + + +@node Pubblicazioni +@unnumberedsec Pubblicazioni +@translationof Publications + +@divClass{column-center-top} +@subheading Cosa abbiamo scritto su LilyPond + +@divClass{keep-bullets} + +@include we-wrote.itexi + +@divEnd +@divEnd + + +@divClass{column-center-bottom} + +@subheading Cosa altri hanno fatto con LilyPond + +@divClass{keep-bullets} + +@include others-did.itexi + +@divEnd +@divEnd + +@contactUsAbout{articoli accademici} + +@node Notizie vecchie +@unnumberedsec Notizie vecchie +@translationof Old news + +@include web/news-front.itexi + +@include web/news.itexi diff --git a/Documentation/it/web/download.itexi b/Documentation/it/web/download.itexi new file mode 100644 index 0000000000..98d056084f --- /dev/null +++ b/Documentation/it/web/download.itexi @@ -0,0 +1,611 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: ee3a89f9f7289bcd90c5f27fd8f86400159088b2 + + 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 + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond è un compositore tipografico musicale @strong{basato su testo}; è +più simile a un linguaggio di programmazione che a un editor grafico di +spartiti. Prima di scaricare LilyPond, dovresti informarti sul +nostro @ref{Input testuale}.} +@end macro + +@node Download +@unnumbered Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want versionDevel here, since the online links + @c for @version won't be up yet! + @heading Download per LilyPond @versionDevel + +@warning{I link alla versione stabile di LilyPond si possono trovare su +@uref{http://lilypond.org, lilypond.org}} +@end ifclear +@ifset web_version + @heading Download per LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Per gli utenti + +@itemize + +@item +@c ref is duplicated to avoid underlining ref as image. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux e FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Per gli sviluppatori + +@itemize + +@item +@ref{Sorgente}: +per i responsabili dei pacchetti + +@item +@ref{Vecchi download}: +versioni precedenti + +@item @ref{Sviluppo}: +ultima versione non stabile + +@end itemize +@divEnd + +@divEnd + +@divClass{column-center-bottom} + +@subheading Licenza software + +LilyPond è distribuito secondo la +@ref{GPL, GNU General Public License}. +@divEnd + + +@divClass{color1} + +@subheading Sponsor + +Un ringraziamento a @uref{http://www.vt.edu/, Virginia Tech} e +@uref{http://www.linuxaudio.org/, linuxaudio.org} per la sponsorizzazione della + banda. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Legalese + +@divClass{legal} +Si riconoscono il copyright e i marchi di tutti i loghi e le +immagini dei prodotti. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Sorgente:: +* Vecchi download:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Pacchetti generici o pacchetti specifici di una distribuzione? + +Molte distribuzioni includono LilyPond nel loro sistema di pacchetti. +Queste versioni sono più facili da installare e disinstallare rispetto +ai pacchetti generici, ma potrebbero non essere recenti. Se preferisci usare +i nostri pacchetti generici, disinstalla la versione ufficiale dal tuo +sistema usando il gestore di pacchetti della tua distribuzione. +Leggi la documentazione della tua distribuzione per sapere come usare +il gestore di pacchetti. + +@divEnd + + +@divClass{column-left-top} +@subheading Pacchetti generici + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(se non sei sicuro, usa questo) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Installazione + +Digita in un terminale: + +@example +cd PERCORSO-ALLA-DIRECTORY-DI-DOWNLOAD +sh lilypond-@versionStable{}-SISTEMA-OPERATIVO.sh +@end example + +@subsubheading Disinstallazione + +Digita in un terminale: + +@example +uninstall-lilypond +@end example + +@divEnd + + + +@divClass{column-right-top} +@subheading Compilare un file + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Pacchetti specifici di una distribuzione + +Usa il gestore pacchetti della tua distribuzione per istallare o +aggiornare a queste versioni. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.3} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.3} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=lilypond, +openSUSE: LilyPond 2.12.3} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +Si riconoscono il copyright e i marchi di tutti i loghi e le immagini dei prodotti. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Pacchetti + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Per MacOS X 10.4 o superiori, con processore Intel (se hai dei dubbi, +usa questo). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +Per MacOS X 10.4 o superiori, con processori G3 e G4 (vecchi computer Apple). + +@end itemize + +@subsubheading Installazione + +Clicca due volte sul file scaricato, poi trascinalo dove preferisci. + +@subsubheading Disinstallazione + +Elimina la cartella LilyPond.app. + +@divEnd + +@divClass{column-right-top} +@subheading Compilare un file + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Esecuzione da linea di comando + +@warning{Se ti trovi bene con l'interfaccia grafica, puoi ignorare +queste istruzioni.} + +@subsubheading MacOS X su linea di comando + +Il modo più comodo di eseguire script lilypond è impostare dei propri +script d' @qq{aiuto}. + +@enumerate + +@item +Crea una directory dove salvare questi script, + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Crea un file chiamato @command{lilypond} che contiene + +@divClass{h-scroll-auto} +@example +exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example +@divEnd + +@warning{@var{DIR} si trova generalmente in @code{/Applications/}} + + +@item +Crea file simili @command{lilypond-book}, +@command{convert-ly}, e un qualsiasi altro script tu voglia usare, +sostituendo @command{bin/lilypond} con @command{bin/convert-ly} +(o il nome di un altro programma). + + +@item +Rendi eseguibile il file, + +@example +chmod u+x lilypond +@end example + + +@item +Ora, aggiungi questa directory alla tua variabile path. Modifica (o crea) un file +chiamato @code{.profile} nella tua home in modo che contenga + +@example +export PATH=$PATH:~/bin +@end example + +Questo file deve finire con una linea bianca. + +@end enumerate + + +@subsubheading Lanciare i singoli script + +Gli script --- come @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly}, e anche @command{lilypond} stesso --- sono inclusi +nel file @code{.app} per MacOS@tie{}X. + +Gli script possono essere eseguiti dalla linea di comando anche lanciandoli +direttamente: + +@divClass{h-scroll-auto} +@example +@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond +@end example +@divEnd + +Lo stesso vale per tutti gli altri script in quella directory, come +@command{lilypond-book} e @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +Si riconoscono il copyright e i marchi di tutti i loghi e le immagini dei prodotti. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Pacchetti + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Per Windows 2000, XP, Vista, e Windows 7. + +@end itemize + +@subsubheading Installazione + +@enumerate + +@item +Trova il file scaricato e clicca due volte su di esso per avviare +l'installer. Segui le istruzioni fornite dall'installer; +Ti consigliamo di lasciare tutte le opzioni di installazione attivate e +e di usare il percorso di installazione predefinito. Clicca sul bottone @q{Finito} +quando l'installer è terminato. LilyPond è ora installato. + +@end enumerate + +@subsubheading Disinstallazione + +Per disinstallare LilyPond: + +@enumerate + +@item +Trova la cartella LilyPond dal menu @q{Start} e clicca sull'icona +@q{Disinstalla}. Clicca il bottone @q{Finito} quando la disinstallazione +è terminata. + +@item +Oppure dal Pannello di Controllo, trova e seleziona LilyPond e poi +scegli l'opzione per disinstallare/rimuovere il software. Clicca il +bottone @q{Finish} quando la disinstallazione è terminata. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Compilare un file + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Esecuzione da linea di comando + +@warning{Se ti trovi bene con l'interfaccia grafica, puoi ignorare +queste istruzioni.} + +@subsubheading Windows da linea di comando + +@ignore +CHECK: check the following descriptions. +I don't have English version of Windows. +@end ignore + +Il modo più comodo per eseguire LilyPond è aggiungere la cartella +che contiene i file eseguibili di LilyPond alla variabile d'ambiente +@qq{Path}. + + +@enumerate +@item +Apri il @qq{Sistema} nel Panello di Controllo, +seleziona la linguetta Avanzate e clicca il bottone Variabili d'Ambiente. + +@item +Seleziona la variabile @qq{Path} dalla lista delle variabili d'ambiente +e clicca il bottone Modifica. +Apparirà una finestra intitolata @qq{Modifica il Sistema delle Variabili}; +attacca al @qq{valore della variabile} il nome della cartella +che contiene i file eseguibili di LilyPond, in questo modo: + +@example +[@var{pre-set paths}];@var{DIR}\LilyPond\usr\bin +@end example + +@warning{@var{DIR} generalmente è @code{C:\Program Files}.} + +@noindent +e clicca il bottone @qq{OK} per chiudere la finestra. + +@end enumerate + +@subsubheading Lanciare singoli file eseguibili + +I file eseguibili di LilyPond +-- come lilypond, lilypond-book, convert-ly, etc. -- +possono essere eseguiti dalla linea di comando lanciandoli: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +Si riconoscono il copyright e i marchi di tutti i loghi e le immagini dei prodotti. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Sorgente +@unnumberedsec Sorgente +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{Noi @strong{non} ti consigliamo di cercare di compilare +LilyPond; le necessità di quasi tutti gli utenti sono meglio soddisfatte +dalla versione precompilata.} + +@divClass{column-left-bottom} +@subheading Codice sorgente + +@downloadStableSource{} + +Per un vasto elenco di tutte le versioni (vecchie e nuove), si veda il +nostro @uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, +sito di download}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Istruzioni per la compilazione + +Le istruzioni sono elencate in @rcontrib{Compiling LilyPond}. + +@divEnd + + +@node Vecchi download +@unnumberedsec Vecchi download +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Tutte le versioni + +Per un vasto elenco di tutte le versioni (vecchie e nuove), si veda +il nostro @uref{http://download.linuxaudio.org/lilypond/binaries/, sito +di download}. + +@divEnd + + +@node GPL +@unnumberedsec GPL + +@divClass{column-center-top} +@subheading Licenza Software + +GNU LilyPond è distribuito secondo la GNU General Public License. +Un'introduzione a questa licenza, e le ragioni per cui l'abbiamo scelta, +si trovano in @ref{Freedom}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd diff --git a/Documentation/it/web/introduction.itexi b/Documentation/it/web/introduction.itexi new file mode 100644 index 0000000000..d0fe234fa2 --- /dev/null +++ b/Documentation/it/web/introduction.itexi @@ -0,0 +1,1245 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: cd0fa693cd2297298aabfdc2d2d9d8b0d7746a5c + + 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 + +@node Introduzione +@unnumbered Introduzione +@translationof Introduction + +@divClass{column-center-top} +@subheading Il nostro obiettivo + +@imageFloat{flat-design,png,right} + +LilyPond è nato dal desiderio di due musicisti di andare oltre +l'aspetto meccanico degli spartiti realizzati col computer. I musicisti +preferiscono leggere musica ben scritta; allora, perché dei programmatori +non potrebbero scrivere un software in grado di produrre partiture eleganti? + +Il risultato è un sistema che fa sì che i musicisti possano non curarsi dei +dettagli d'impaginazione per concentrarsi invece sulla musica. LilyPond lavora +con loro per creare partiture con una qualità di livello editoriale, realizzate secondo +le migliori tradizioni della tipografia musicale. + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading Cosa fa LilyPond + +@itemize + +@item +@ref{Funzionalità}: Cosa può fare LilyPond? + +@item +@ref{Esempi}: Voglio vedere della musica! + +@item +@ref{Libertà}: LilyPond è Software Libero. + +@item +@ref{Storia}: La nostra estetica computazionale. + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading LilyPond in azione + +@itemize + +@item +@ref{Produzioni}: Utilizzi di LilyPond nel mondo reale. + +@item +@ref{Recensioni}: Cosa dicono le persone? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading Come funziona LilyPond + +@itemize + +@item +@ref{Input testuale}: Scrivere la musica in forma di @emph{testo}?! + +@item +@ref{Editing facilitato}: Altri modi di lavorare con LilyPond. + +@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 +* Funzionalità:: Cosa può fare LilyPond? +* Esempi:: Voglio vedere un po' di musica! +* Libertà:: Libertà e la GPL. +* Storia:: Estetica computazionale. +* Produzioni:: Uso di LilyPond nel mondo reale. +* Recensioni:: Cosa dicono di LilyPond? +* Input testuale:: Scrivere la musica in forma di testo?! +* Editing facilitato:: Altri modi di lavorare con LilyPond. +@end menu +@divEnd + + + +@node Funzionalità +@unnumberedsec Funzionalità +@translationof Features + + +@subheading Perché passare a LilyPond? + + +@subsubheading Eccellente incisione classica + +@imageFloat{flat-design,png,right} + +LilyPond offre ai musicisti la possibilità di realizzare spartiti eleganti +e comodi da leggere. La sua comunità di sviluppatori ha dedicato migliaia +di ore a sviluppare un potente software di incisione musicale che produce +spartiti di ottima qualità. Tutte le impostazioni di stile, i font e gli +algoritmi di LilyPond sono ispirati alla migliore musica incisa a mano. +L'output di LilyPond ha lo stesso aspetto netto, equilibrato ed elegante +delle migliori partiture classiche. Questo è stato approfondito nel nostro +@ref{Essay}. + + +@subsubheading Pochi ritocchi + +Impieghi minor tempo nel correggere l'output; LilyPond imposta la +formattazione corretta fin dall'inizio. Determina da solo lo +spazio, e le interruzioni di linea e di pagina per fornire un'impaginazione +proporzionata e uniforme. Le collisioni tra testo, note e accordi vengono risolte +e le legature di portamento e le codette sono posizionate automaticamente! + + +@subsubheading Input testuale + +LilyPond riceve l'input in ASCII, che puoi creare nel tuo editor di +testo preferito, velocemente e comodamente. L'input contiene tutte le +informazioni necessarie, dunque non c'è bisogno di ricordare complesse +sequenze di comandi: puoi semplicemente salvare il file per una +consultazione successiva. + + +@subsubheading Accessibilità + +L'input testuale rende inoltre la scrittura musicale possibile per gli utenti +con serie inabilità fisiche. Gli utenti con problemi di coordinazione che non +sono in grado di usare la tastiera o il mouse possono usare software di +riconoscimento vocale per modificare i file LilyPond. Anche gli utenti +totalmente privi di vista possono usare un software di lettura dello schermo +per scrivere file LilyPond -- un'operazione impossibile nei programmi +di scrittura musicale basati su interfaccia grafica. + + +@subsubheading Unisci musica e testo + +@imageFloat{lilypond-book,png,right} + +Inserisci frammenti di musica nel testo senza dover tagliare e incollare +immagini. Integra comodamente la musica in @LaTeX{} o in HTML, o +aggiungi la musica in OpenOffice.org con OOoLilyPond. + + + +@subsubheading Software libero + +LilyPond può essere scaricato gratuitamente! Sì: è gratuito. Scaricalo +dalla pagina di download. + +È anche software libero. Viene distribuito col codice sorgente e il +permesso di modificarlo e copiarlo. Sei infastidito da un +malfunzionamento, o desideri una nuova funzionalità? Puoi aggiungerla tu +stesso, o pagare qualcun altro per farlo. + + +@subsubheading Modello estendibile + +Tutte le impostazioni possono essere modificate per soddisfare il tuo +personale gusto tipografico. Se questo non è ancora abbastanza, c'è sempre +il linguaggio di scripting Scheme, un dialetto del potente linguaggio +LISP. Impostazioni, variabili e funzioni sono tutte documentate +nell'esauriente manuale di riferimento del programma. + + +@subsubheading Ottimo supporto + +LilyPond gira su tutte le piattaforme più note: GNU/Linux, MacOS X, e +Windows. LilyPond include un'ampia documentazione e centinaia di file +di esempio. C'è un'attiva comunità di utenti che risponde alle +domande nella mailing list dedicata agli utenti Lilypond, mentre il team +di sviluppo si assicura che i problemi vengano risolti rapidamente. + + + +@divClass{column-center-bottom} +@subheading E ora? + +Non sei ancora convinto? Guarda alcuni specifici @ref{Esempi}. Se hai +già deciso di provare LilyPond, per prima cosa informati sul nostro +@ref{Input testuale}. +@divEnd + + + +@node Esempi +@unnumberedsec Esempi +@translationof Examples + +Lilypond è uno strumento potente e flessibile per scrivere ogni tipo +di musica. Dai un'occhiata alla galleria di esempi e lasciati ispirare! + +@ignore +Here is a passage from Franz Liszt's solo piano transcription +of the Overture to Wagner's @emph{Tannhäuser}. The spacing +in this example was all performed by Lilypond's formatting +algorithms, without tweaks of any kind. It +handles cross-staff beaming gracefully and puts the system brace +perfectly around all three staves. + +@exampleImage{liszt-wagner} +@end ignore + +@newsItem +@subsubheading Musica Classica + +Questo brano per organo di J.S. Bach rappresenta un tipico esempio di progetto Lilypond. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Notazione Complessa + +Questo esempio tratto dalle @emph{Goyescas} di Enrique Granados mostra alcune +delle funzionalità tipografiche più avanzate, come la ripartizione di travature +e gambi tra più righi e l'evidenziazione dello svolgimento di una singola voce mediante tratti spezzati. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Musica Antica + +Lilypond supporta anche vari tipi di notazione antica, come +questo passaggio di canto gregoriano. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Musica Moderna + +I compositori contemporanei ritengono che Lilypond sia molto adatto a +visualizzare notazioni non convenzionali. Ecco un estratto dal @emph{Čáry} di +Trevor Bača, per flauto basso non accompagnato. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Creazione efficiente e flessibile di materiali da esecuzione + +A partire dallo stesso codice +sorgente possono essere creati diversi materiali d'esecuzione. Questo è +un estratto della partitura di @uref{http://nicolas.sceaux.free.fr/, +Nicolas Sceaux} del @emph{Giulio Cesare} di Handel, in partitura +completa, riduzione per canto e pianoforte, e parte per violino. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Intavolatura + +Lilypond supporta la notazione per intavolatura, che può essere personalizzata +per adattarsi a ogni strumento che ne fa uso. Il rigo +dell'intavolatura viene generato automaticamente dalle note inserite per +il pentagramma. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Grafici Schenker + +L'output di default può essere ampiamente modificato. Ecco un'analisi +Schenkeriana di grande effetto, creata da Kris Schaffer, per un articolo +su @uref{http://www.linuxjournal.com/article/8364 , Linux Journal}. +I colori sono stati aggiunti per migliorare la visibilità. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Musica Vocale + +Lilypond è eccellente per la musica vocale di tutti i generi, dagli inni +sacri all'opera. Ecco un mottetto medievale con requisiti leggermente +insoliti. Il tenor è scritto in un metro diverso dagli altri, +ma deve essere allineato come se fosse nello stesso tempo. +Lilypond gestisce questo aspetto in modo molto elegante. Si notino anche gli +incipit con chiave in stile Vaticana, i gambi barrati a indicare note plicate, +e le parentesi quadre sulle sezioni legate. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Applicazioni didattiche + +Lilypond è molto indicato anche per applicazioni didattiche. +Ecco un esempio di un semplice esercizio di contrappunto. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Musica Popolare + +È semplice creare spartiti semplificati pop con melodia, testo, +nomi degli accordi, e tastiere. In questo esempio puoi vedere alcuni +dei diagrammi di tastiera predefiniti, ma questi possono essere ampiamente +personalizzati per adattarsi a quasi ogni situazione. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Grandi Progetti + +Lilypond è ottimo anche per progetti ad ampio respiro come opere o lavori per +un'orchestra sinfonica al completo. Inoltre l'input testuale permette +una maggiore accessibilità -- questo esempio è stato realizzato +da Hu Haipeng, un compositore cieco. + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading E ora? + +Non sei ancora convinto? LilyPond è Software Libero, e ti dà +@ref{Libertà}. Se hai già deciso di provare LilyPond, per prima cosa +informati sul nostro @ref{Input testuale}. +@divEnd + + +@node Libertà +@unnumberedsec Libertà +@translationof Freedom + +@divClass{column-center-top} +@subheading Software Libero + +@uref{http://www.gnu.org/, GNU} LilyPond è scritto e mantenuto +da una comunità di appassionati. È distribuito secondo la +@ref{GPL, GNU General Public License} e la @ref{FDL, GNU Free +Documentation License}, che danno a tutti la libertà di correggere, +modificare, ed estendere il programma. Creare della bella musica non +dovrebbe richiedere centinaia di dollari di software! +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading Quali sono i vantaggi per gli utenti? + +@itemize + +@item +Nessuna spesa: scaricalo e provalo! Cosa hai da perdere? + +@item +Condivisione: se ti piace il programma, dai una copia a amici, +insegnanti, studenti, e colleghi! + +@item +Codice sorgente disponibile: se sei curioso di sapere come LilyPond crea +la notazione, puoi vedere esattamente come viene fatto. + +@item +Estendibile: puoi aggiungere funzionalità, correggere i malfunzionamenti, e cambiare +il funzionamento. Se non sei un programmatore, puoi assumere qualcuno +per questi compiti. + +Questo potrebbe non sembrare interessante agli occhi dei musicisti non +professionisti, ma l'abilità di estendere il software può avere un grande +valore per i compositori di professione, le aziende e gli studiosi. + +@item +Sicurezza per il futuro: se un'azienda commerciale fallisce, cosa succede +alla musica in formato elettronico che dipende dai loro prodotti? Questa +preoccupazione non riguarda LilyPond; anche se tutto il team di sviluppo +abbandonasse il progetto (molto improbabile), il programma continuerebbe ad +essere legalmente disponibile per la copia, la modifica e la distribuzione. + + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading Perché gli sviluppatori di LilyPond @qq{regalano} la loro opera? + +La maggior parte di noi vede lo sviluppo di LilyPond come un hobby o un +lavoro volontario. Quindi la vera domanda è: @qq{perché si lavora come volontari}? + +@itemize + +@item +Divertimento: lavorare per raggiungere un obiettivo può essere divertente, +soprattutto quando si lavora in gruppo! + +@item +Obiettivi condivisi: vogliamo tutti delle belle partiture, ma poche persone +hanno la competenza (e nessuno ha il tempo!), per creare un programma +che può gestire tutte le situazioni. Ma lavorando insieme -- una +persona migliora il codice per le travature automatiche, un'altra migliora +la forma delle legature, e una terza persona scrive la documentazione +spiegando come usare queste funzionalità -- possiamo raggiungere +il nostro obiettivo usando solo una frazione dello sforzo individuale. + +@item +@qq{Cultura del dono}: il movimento del Software Libero (o @qq{Open Source}) +ha creato vari grandi progetti software, come +@uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox}, e +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Avendo +tratto vantaggio da questi progetti, alcuni sviluppatori vogliono @qq{dare +in cambio} qualcosa alla comunità. + +@item +Esperienza di lavoro: contribuire a progetti open source è un ottimo modo +per esercitarsi nel programmare, scrivere la documentazione, o progettare. +Questa esperienza ha aiutato alcuni sviluppatori ad ottenere offerte di +lavoro o borse di studio. + + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading E ora? + +Non sei ancora convinto? Leggi il saggio sulla nostra filosofia +tipografica in @ref{Storia}. Se hai già deciso di provare +LilyPond, per prima cosa informati sul nostro @ref{Input testuale}. +@divEnd + + +@node Storia +@unnumberedsec Storia +@translationof Background + +@divClass{column-center-top} +@subheading Saggio + +Abbiamo un lungo saggio che descrive l'estetica computazionale: +l'arte di creare la bellezza con un computer. + +Se cerchi soltanto una rapida introduzione a LilyPond, il saggio potrebbe +contenere troppe informazioni da leggere. Se vuoi leggerlo ora, +procedi in @ref{Essay}. +@divEnd + +@divClass{column-center-bottom} +@subheading E ora? + +Non sei ancora convinto? Guarda alcune delle @ref{Produzioni} e +degli spartiti dei nostri utenti. Se hai già deciso di provare +LilyPond, per prima cosa informati sul nostro @ref{Input testuale}. +@divEnd + + +@node Produzioni +@unnumberedsec Produzioni +@translationof Productions + +@divClass{column-left-top} +@subheading Concerti + +Lilypond è stato usato per esecuzioni in tutto il mondo. +In evidenza: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire étrangère}, un opera di +@uref{http://valentin.villenave.net/,Valentin Villenave} +basata su un libretto francese di +@uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis +Trondheim}. La prima rappresentazione ha avuto luogo il 1 Febbraio 2009 presso +@uref{http://www.orchestre-montpellier.com/, L'Opéra National di +Montpellier}, Francia. + +@item +Esecuzione dell' @emph{Armide} di Lully da parte della +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}, +15-16 Maggio 2009, a Houston, Texas (spartiti realizzati da +@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}). + +@item +Brani strumentali dall' @emph{Hippolyte et Aricie} di Rameau presso +la St. James's Church a Manhattan, 8 Maggio 2009, di Frederick Renz +e il suo complesso @uref{http://www.earlymusicny.org/, Early Music +New York} (spartiti realizzati da Nicolas Sceaux). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Spartiti pubblicati + +@divClass{keep-bullets} +@itemize + +@item +@uref{http://www.mutopiaproject.org/index.html, Mutopia Project}, +oltre 1500 spartiti di brani di musica classica liberamente scaricabili, e +principale vetrina delle partiture fatte con LilyPond. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing}, +spartiti di alta qualità di musica sacra, disponibili per il +download immediato o nel tradizionale supporto cartaceo. + +@item +@uref{http://www.shadylane.fr/, The Shady Lane +Publishing}, +una @qq{piccola casa editrice musicale} il cui obiettivo è promuovere una +nuova forma di economia della musica più vicina ai musicisti e agli +amanti della musica. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading E ora? + +Non sei ancora convinto? Leggi le @ref{Recensioni} di alcuni nostri utenti. +Se hai già deciso di provare LilyPond, per prima cosa informati sul +nostro @ref{Input testuale}. +@divEnd + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/testimonials + +@node Recensioni +@unnumberedsec Recensioni +@translationof Reviews + +@divClass{column-left-top} +@subheading Articoli pubblicati + +@divClass{keep-bullets} +@itemize + +@item +May 2010 + +Peter Kirn, sul sito Create Digital Music, pubblica una +@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,recensione +di LilyPond}. Offre un parere equilibrato sull'utilizzo, elogia l'alta qualità della +notazione in LilyPond e consiglia di provarlo. + +@item +Settembre 2009 + +La rivista tedesca LinuxUser ha scritto un +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +articolo su LilyPond}. + +@item +August 2009 + +Ann Drinan, sul sito +@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org}, presenta +i commenti di due bibliotecari di un'orchestra che parlano dell'uso del +software per gestire le loro biblioteche. + +@item +June 2009 + +In un @uref{http://news.lilynet.net/Free-Music-Now, articolo} +pubblicato nella rivista annuale francese @emph{National Conservatory Parent +Association}, Valentin Villenave, compositore francese e collaboratore di +LilyPond, spiega come le licenze libere, e in particolare le partiture +realizzate con LilyPond, siano uno strumento per rendere la musica scritta +accessibile a tutti. + +@item +Febbraio 2008 + +In alcuni @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, +articoli sul suo sito personale}, Andrew Hawryluk confronta Finale +e LilyPond in termini generali, e valuta in dettaglio le capacità di +incisione di entrambi i software. Il secondo articolo è un'analisi +istruttiva dei problemi di incisione nel Preludio n. 6 per pianoforte +di Rachmaninoff, e include dei confronti con un'edizione di riferimento +incisa a mano. + +@item +Giugno 2006 + +@uref{http://distrowatch.com,DistroWatch} premia LilyPond e +@uref{http://distrowatch.com/weekly.php?issue=20060605,scrive} +@qq{Signore e signori, siamo lieti di annunciare che, in base alle +richieste dei lettori, la donazione di Maggio 2006 di DistroWatch +è stata assegnata a LilyPond (@euro{}190.00) e Lua (US$250.00).} + +@item +Dicembre 2005 + +@uref{http://linuxjournal.com,Linux Journal} pubblica un articolo +intitolato @uref{http://www.linuxjournal.com/article/8364, Crea +dei fantastici grafici Schenker con GNU LilyPond}. È un articolo +approfondito e pratico con attraenti grafici di LilyPond. L'autore +Kris Shaffer commenta @qq{GNU Lilypond genera una grafica splendida +che fa sembrare le alternative commerciali di second'ordine.} + +@item +August 20, 2005 + +La rivista belga De Standaard fa un'indagine sulle motivazioni degli +autori di Software Libero in un articolo intitolato +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} (Condividere la conoscenza senza +scopo di lucro) nel suo @q{DS2 bijlage}. LilyPond viene citato come esempio +e l'articolo è disseminato di estratti di un'intervista email +con Jan Nieuwenhuizen. Questo articolo segna la prima comparsa di +LilyPond su un periodico tradizionale, su carta stampata. + +@item +Giugno 2005 + +Un articolo in francese sul rilascio di LilyPond 2.6 è apparso su +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +Ottobre 2004 + +Gli editor di Computer!Totaal, una rivista olandese di computer, +nel numero di Ottobre 2004 +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, +descrivono LilyPond} come: @qq{Meraviglioso software +libero (open source) [..] Gli spartiti prodotti da +LilyPond sono incredibilmente belli [..] un sistema molto potente che +può fare praticamente qualsiasi cosa.} + +@item +Luglio, Agosto 2004 + +Dave Phillips ha scritto un articolo introduttivo per +@uref{http://linuxjournal.com,Linux Journal}: At +the sounding edge: LilyPond, parte +@uref{http://www.linuxjournal.com/article/7657, uno} e +@uref{http://www.linuxjournal.com/article/7719, due}. + +@item +Marzo 2004 + +Chris Cannam +@uref{http://www.all-day-breakfast.com/cannam/linux-musician/lilypond.html,ha intervistato} +Han-Wen Nienhuys e Jan Nieuwenhuizen su linuxmusician.com +(sito originale defunto). Questa intervista è stata anche recensita in una +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, +storia di slashdot}. + +@item +Febbraio 2004 + +Il cantante jazz Gail Selkirk scrive su +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Tuffarsi in LilyPond}. @qq{... puoi scrivere lead sheet o parti per +un'intera orchestra, e i risultati possono essere sorprendenti.} +@uref{http://www.computermusic.co.uk/, Computer Music Special}, +numero CMS06. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading Utenti testimonial + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, primo violoncellista, New York Philharmonic + +@qq{@dots{} Ho composto un paio di bis per violoncello solista +che ho scritto con LilyPond e che sto per consegnare a Schirmer per +la pubblicazione. Scommetto che la loro versione non sarà elegante +nemmeno la metà della mia!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, professore di Composizione, Musikhochschule Freiburg + +@qq{Anche se non conosco [LilyPond] molto bene ancora, sono +@strong{*molto} colpito. Ho usato il programma per scrivere un mottetto di +Josquin Desprez in notazione mensurale e non c'è dubbio che +lilypond batte facilmente tutti gli altri programmi di notazione per +quanto riguarda la velocità, la facilità d'uso e la resa grafica!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, compositore (Bruxelles, Belgio) + +@qq{[..dopo la prima prova d'orchestra] ho ricevuto molti +complimenti per la qualità degli spartiti. Ancora più +importante: sebbene Lilypond fornisca molti trucchi per migliorare +l'aspetto degli spartiti, quello che l'orchestra ha ricevuto da me è +l'output grezzo e privo di ritocchi.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, compositore (Toronto, Canada) + +@qq{grazie e complimenti al team di sviluppo per il suo incredibile +lavoro. Non ho mai visto niente che possa avvicinarsi all'output di +Lilypond -- sono assolutamente sicuro che le mie necessità nel campo +dell'editoria musicale saranno soddisfatte oltre ogni aspettativa usando +questo fantastico programma. [..] l'output predefinito di Lilypond [..] ha +un aspetto migliore delle recenti pubblicazioni @q{professionali} con cui +l'ho confrontato (ovvero quasi qualsiasi spartito della Warner Bros, e anche molti +dei più recenti delle @q{vecchie case editrici}). [..]} + +@qq{Li batte tutti, Finale/Sibelius/Igor/, qualsiasi cosa!!!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, principale programmatore di @uref{http://www.rosegardenmusic.com/, RoseGarden} + +@qq{Lilypond è ovviamente il super gorilla [della +grande tipografia musicale].} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} + +@qq{Il modo in cui la musica viene inserita in LilyPond mi fa pensare in +modo più musicale -- a volte non sapevo come dire a +Lily di incidere qualcosa, per poi capire che anche se +avessi ottenuto ciò che il compositore voleva, la musica sarebbe +stata più difficile da leggere. LilyPond mi rende molto più facile +lavorare nel mio doppio ruolo di editor e incisore.} + +@qq{Uso esclusivamente LilyPond per la mia giovane casa editrice +musicale. Praticamente senza eccezione, ogni compositore +è rimasto colpito dalla qualità tipografica quando gli sono state +presentate le bozze della sua musica pronte per la pubblicazione. Il merito +va in parte a me -- ho dedicato molto tempo a modificare +l'output, soprattutto le legature di valore (specialmente negli accordi) -- ma LilyPond mi +dà un eccellente punto di partenza, un'interfaccia molto intuitiva, e la +possibilità di modificare totalmente qualsiasi cosa, se ho tempo per +farlo. Sono sicuro che nessun prodotto commerciale può avvicinarsi a questo.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, trombone basso, Iceland Symphony Orchestra + +@qq{Credo che Lilypond sia un grande programma [..] Più imparo LilyPond +e più mi piace!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, chitarrista elettrico +(@uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12,connesso con i} Yes) + +@qq{Sono impressionato da LilyPond [..]} + +@qq{QUESTO È IL MIGLIOR PROGRAMMA MAI ESISTITO!!!} + +@qq{Mille grazie a tutti per il vostro duro lavoro e la vostra dedizione!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, contributore per @uref{http://www.mutopiaproject.org/, Mutopia} + +@qq{Con LilyPond avevo una specie di relazione di amore-odio. Amore +perché il primo spartito che ho visto era così meraviglioso! Il modo in cui +LilyPond viene presentato mente sulla sua bellezza, è troppo modesto! [..] Via +via che LilyPond migliora, costantemente, e io vedo come le cose vengono +fatte in Scheme, ho sempre meno frustrazioni. Comunque, +quello che voglio dire è: grazie per metterci a disposizione LilyPond, è davvero +un ottimo programma.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, Direttore d'orchestra presso il Theatre a Koblenz, Germania e brillante hacker GNU + +@qq{Comunque, LilyPond fa un lavoro incredibilmente buono!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, sviluppatore di @uref{http://jackaudio.org/, JACK} e @uref{http://www.ardour.org/, Ardour} + +@qq{Credo che [LilyPond è] un programma incredibile, e produce output +davvero meraviglioso. Quando ho letto un'intervista a suo proposito l'anno +scorso, ne ho parlato entusiasticamente a molti miei amici e ho mostrato +loro le sue potenzialità.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, Dr. Mika Kuuskankare}, ricercatore presso la @uref{http://siba.fi, Sibelius Academy Finland}, compositore e autore di Expressive Notation Package (ENP) + +@qq{Ho il più profondo rispetto verso LilyPond e i suoi creatori +e collaboratori perché so per esperienza personale quanto difficile +possa essere questo tipo di software.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, Musicista, tipografo professionista e utente di lunga data di SCORE + +@qq{Il mio sincero ringraziamento per tutti coloro che contribuiscono a questo progetto. Negli +anni '90 sono stato un esperto utente di SCORE per le grandi case tipografiche, +ma credo che LilyPond mi permetta finalmente di ottenere sulla pagina esattamente +ciò che voglio, specialmente quando non si tratta di una pratica "standard".} +@divEnd + +@divEnd + +@contactUsAbout{articoli di giornale o testimonal} + +@divClass{column-center-bottom} +@subheading E ora? + +Leggi cos'è l' @ref{Input testuale}. +@divEnd + + + +@node Input testuale +@unnumberedsec Input testuale +@translationof Text input + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading @qq{Compilare} Musica + +@imageClickable{nereid-shot-small,png, (clicca per ingrandire), nereid-shot,png, right} + +LilyPond è un sistema @emph{compilato}: viene eseguito su un file di testo +che descrive la musica. L'output risultante può essere visualizzato sullo +schermo o stampato. In un certo senso, LilyPond è più simile a un linguaggio +di programmazione che a un software grafico per la creazione di spartiti. + +Non si scrive la musica trascinando le note da una barra degli strumenti grafica +e mettendole su una partitura che si aggiorna in modo dinamico; si scrive +musica digitando del testo. Questo testo viene interpretato (o @qq{compilato}) +da LilyPond, che produce degli spartiti di elevata qualità. + +Chi è abituato alle interfacce grafiche dovrà imparare un nuovo modo di +lavorare, ma ne vale assolutamente la pena se si considerano i risultati! + +@warning{Presentiamo una rapida panoramica del nostro input testuale -- non è +complicato come sembra! Non c'è bisogno di comprendere ogni dettaglio +di questi esempi; la nostra documentazione per i principianti si occupa +di tutto questo a un ritmo molto più graduale.} + + +@subsubheading È semplice come l'A B C + +Le note vengoo codificate con lettere e numeri. I comandi speciali sono +inseriti con barre inverse (backslash). + +@imageFloat{text-input-1-annotate-it,png,center} +@imageFloat{text-input-1-output,png,center} + +Le alterazioni si ottengono con nomi diversi: si aggiunge @code{-is} per +il diesis, e @code{-es} per il bemolle (questi sono i nomi delle note in +olandese, ma sono disponibili altre lingue). LilyPond calcola dove mettere +le alterazioni. + +@imageFloat{text-input-2-annotate-it,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading Musica Pop + +Testo e accordi possono essere combinati per ottenere uno spartito semplificato: + +@imageFloat{text-input-pop-annotate-it,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading Parti per orchestra + +Il file di input contiene le note del brano musicale. La partitura e +le parti possono essere ottenute da un solo file di input, cosicché la +modifica di una nota interesserà sempre la partitura e le parti. Per +poter includere la stessa musica in più punti, occorre assegnare alla +musica una @qq{variabile} (un nome). + +@imageFloat{text-input-parts-both-annotate-it,png,center} + + +Questa variabile viene poi usata in una parte singola (qui trasposta, con +pause abbreviate che si estendono per diverse misure): + +@imageFloat{text-input-parts-single-annotate-it,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +La stessa variabile viene utilizzata nella partitura completa (qui in +altezza reale): + +@imageFloat{text-input-score-annotate-it,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Documentazione per il principiante + +Comprendiamo il fatto che molti utenti trovino questo modo di scrivere +musica un po' strano. Per questo motivo, abbiamo scritto un'ampia documentazione +per aiutare i nuovi utenti, a cominciare dal manuale di @ref{Apprendimento}. Il Manuale +di Apprendimento è il luogo migliore da cui iniziare, perchè molte domande trovano +risposta prima ancora di manifestarsi! + +Sei pregato di leggere il Manuale di Apprendimento prima di lamentarti per ipotetici malfunzionamenti! +I nuovi utenti talvolta credono che LilyPond non stia funzionando +bene, quando in realtà sta funzionando proprio come è stato progettato. + +Informazioni più approfondite sono disponibili nei @ref{Manuali}. + + +@subsubheading Editing facilitato + +@imageClickable{lilykde-screenshot-small,png, + (clicca per ingrandire),lilykde-screenshot,png,right} + +L'obiettivo primario di LilyPond è produrre spartiti di +elevata qualità; creare un interfaccia grafica (GUI) +ci distrarrebbe da questo scopo. Tuttavia esistono altri +progetti che hanno lo scopo di rendere più facile la creazione di file +di input per LilyPond. + +Alcuni ambienti di editing includono l'evidenziatura della sintassi, il +completamento automatico dei comandi, e modelli preimpostati. Altri +programmi forniscono una vera e propria interfaccia grafica che consente +la manipolazione diretta di una partitura grafica. Per maggiori informazioni, +si veda @ref{Editing facilitato}. + + +@divClass{column-center-bottom} +@subheading E ora? + +Adesso sei pronto a @ref{Download, scaricare LilyPond}. Non sei +ancora convinto? Leggi a proposito dell' @ref{Editing facilitato}. + +@divEnd + + +@node Editing facilitato +@unnumberedsec Editing facilitato +@translationof Easier editing + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (clicca per ingrandire),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +Nato come plugin per l'editor di testo +@uref{http://www.jedit.org,jEdit}, +LilyPondTool è uno degli strumenti con le maggiori funzioni per scrivere +partiture con LilyPond. Le sue funzionalità includono una procedura guidata alla +creazione del documento, con supporto al testo, per impostare i documenti più +facilmente, e un lettore di PDF incorporato con supporto avanzato al punta-e-clicca. + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (clicca per ingrandire),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi è un editor di testo e musica progettato per LilyPond. Ha un +lettore PDF incorporato, una potente procedura guidata per la creazione di +partiture e molte funzionalità di scrittura. È basato sulle librerie KDE4 +e attualmente gira su tutte le distro Linux e altri sistemi operativi UNIX. + +@divEnd + +@divClass{column-center-top} +@subheading Denemo + +@imageClickable{screenshot-denemo-small,png, + (clicca per ingrandire),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo è un editor grafico che genera codice sorgente LilyPond, +nella versione 2.8.7, e permette anche la riproduzione audio. Consente +agli utenti di vedere il codice sorgente LilyPond in parallelo alla +visualizzazione grafica. Modifiche manuali del codice possono essere attaccate a note, +accordi etc. e vengono salvate nel file di Denemo, così che gli utenti possano +continuare a modificare il documento tramite l'interfaccia grafica. + +Se si muove il cursore nel codice LilyPond si muove anche il cursore +nella visualizzazione grafica, e qualsiasi errore di sintassi nelle tue modifiche +manuali al codice LilyPond viene evidenziato nella visualizzazione testuale +quando stampi da lì. + + +@divEnd + +@divClass{column-center-top} +@subheading Editor testuali + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs è un editor di testo che ha la capacità di comprendere molti +diversi linguaggi informatici. Emacs è un editor molto estendibile +e può essere usato come ambiente di sviluppo integrato (IDE). +C'è una @q{modalità lilypond} che fornisce le definizioni del +linguaggio per poter lavorare con i file sorgente di Lilypond. Uno dei nostri +sviluppatori ha scritto +@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}, una +modalità primaria di Emacs. + +@uref{http://www.vim.org} + +Vim è un editor di testo minimale che deriva dal vecchio editor Unix +@command{vi}. Anch'esso è estendibile e configurabile. + +Come regola generale, se non hai già confidenza con Emacs o +Vim, allora probabilmente vorrai usare un editor diverso per scrivere +i file di input di LilyPond. + +Puoi trovare maggiori informazioni sulla configurazione di Emacs e Vim in +@rprogram{Text editor support}. + +@sourceimage{logo-macosx,,,} + +@uref{http://www.uoregon.edu/~koch/texshop} + +L'editor TexShop per MacOS@tie{}X può essere potenziato per eseguire LilyPond, +@command{lilypond-book} e @command{convert-ly} all'interno dell'editor, +usando le estensioni disponibili presso: + +@example +@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts} +@end example + +@sourceimage{logo-macosx,,,} +Esiste un bundle LilyPond per TextMate, un editor commerciale per MacOS. +Può essere installato eseguendo questi comandi: + +@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 + +@divClass{column-center-top} +@subheading Programmi che possono esportare in codice LilyPond + + +@subsubheading Editor di partiture, intavolature e MIDI: + +@itemize + +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}, un sequencer audio +e MIDI, che ha anche un editor per le partiture con un solo rigo. + +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, +un editor di partiture basato sulla libreria +@uref{http://www.cairographics.org,Cairo}, supporta in via sperimentale +l'esportazione in formato LilyPond. + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, un editor e riproduttore multitraccia +per tablatura, include un visualizzatore della partitura e può esportare +in formato LilyPond. + +@item +@uref{http://www.musescore.org,MuseScore}, un editor di partiture, ha un'esportazione +in formato LilyPond incompleta ma è in attivo sviluppo. + +@item +@uref{http://www.canorus.org,Canorus}, un editor di partiture, può anche +esportare in formato LilyPond, ma è un software ancora in beta. Gli utenti +che vogliono provarlo sono benvenuti. + +@item +@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, un convertitore +realtime monofonico da MIDI a LilyPond. + +@item +@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm, +NW2LY} è un programma scritto in C# che converte una canzone di +@uref{http://www.noteworthysoftware.com/, NoteWorthy} in formato +LilyPond. + +@end itemize + +@subsubheading Generatori di codice algoritmici: + +@itemize + +@item +@uref{http://www.projectabjad.org/,Abjad}, una API +@uref{http://www.python.org/,Python} per il Formalized Score +Control progettata per aiutare i compositori a costruire pezzi complessi +di notazione LilyPond in modo iterativo e incrementale. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, una libreria LISP per +generare notazione musicale da ambienti software per la musica prodotta +da computer. + +@item +@uref{http://strasheela.sourceforge.net,Strasheela}, un +ambiente costruito sul linguaggio di programmazione a vincoli +@uref{http://www.mozart-oz.org/, Mozart/Oz}. +@end itemize + +@divEnd + +@divClass{column-center-top} + +@subheading Altri programmi che non sono sviluppati attivamente + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} è stato sosituito da +@uref{http://www.frescobaldi.org/,Frescobaldi}, e esiste soltanto come +LilyKDE3 per KDE 3.5 e lilypond-KDE4 per KDE 4.1. + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, che importava +@uref{http://www.musicxml.com/xml.html,MusicXML}, è stato "forkato" +in +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +e @uref{http://canorus.org,Canorus}. + + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} è un programma grafico ad +inserimento note, che si comporta in modo molto simile a un tastierino numerico +che produce note di lilypond. + +@end itemize + +@divEnd + +@divClass{column-center-bottom} +@subheading E ora? + +Sei ora pronto per @ref{Download, Scaricare LilyPond}. + +Non sei ancora convinto? Molti compositori, musicisti e direttori +hanno imparato a scrivere musica nel nostro formato di input. Utenti +esperti raccontano addirittura di poter scrivere una partitura completa +in LilyPond più velocemente che con una tastiera di pianoforte o col mouse in +un programma a interfaccia grafica! Forse vuoi riesaminare +le @ref{Funzionalità}, gli @ref{Esempi}, o la +@ref{Libertà} che LilyPond fornisce, o informarti sulle +@ref{Produzioni} degli utenti e le @ref{Recensioni}. Inoltre, il nostro +approccio all'estetica computazionale della tipografia musicale classica +viene spiegato nella nostra @ref{Storia}. + + +@subheading Legalese + +@divClass{legal} +Si riconoscono il copyright e i marchi di tutti i loghi e le immagini dei prodotti. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/it/web/manuals.itexi b/Documentation/it/web/manuals.itexi new file mode 100644 index 0000000000..cae713fd7f --- /dev/null +++ b/Documentation/it/web/manuals.itexi @@ -0,0 +1,584 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: ee3a89f9f7289bcd90c5f27fd8f86400159088b2 + + 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 + +@node Manuali +@unnumbered Manuali +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, dettagli di \reference\}) +@spanEnd +@end macro + + +@divClass{heading-center} +@ifclear web_version + @heading Manuali di LilyPond @version +@end ifclear +@ifset web_version + @heading Manuali di LilyPond @versionStable +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Introduzione + +@itemize + +@item +@ref{Input testuale}: +LilyPond è un compositore tipografico musicale @strong{basato su testo}. Leggi +prima questo! + +@item +@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Learning}} +un'introduzione a LilyPond leggera e @qq{imprescindibile}. +@details{Learning} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossary}} +@emph{(lettura opzionale)} +termini musicali e traduzioni. +@details{Glossary} + +@item +@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}} +@emph{(lettura opzionale)} +informazioni sull'incisione realizzata dal computer. +@details{Essay} + + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Uso regolare + +@itemize + +@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notation}} +guida alla sintassi. +@details{Notation} + +@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Usage}} +eseguire i programmi. +@details{Usage} + +@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}} +brevi trucchi e consigli. +@details{Snippets} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Uso saltuario + +@itemize + +@item @ref{FAQ}: +Domande frequenti (Frequently Asked Questions). + +@item @ref{Top, Web}: +questo documento. +@details{Web} + +@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}} +cosa c'è di nuovo? +@details{Changes} + +@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}} +tweak interessanti. +@details{Extending} + +@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}} +guida ai tweak. +@details{Internals} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Altro materiale + +@itemize + +@item @ref{Tradotti}: +stato delle traduzioni per i lettori di lingua non inglese. + +@item @ref{Tutti}: +manuali vecchi e scaricabili. + +@item @ref{Sviluppo}: +manuali per la versione non stabile. + +@item @ref{FDL}: +questi manuali sono pubblicati e distribuiti secondo la GNU Free Documentation +License. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Apprendimento:: Apprendimento. +* Glossario:: Glossario. +* Saggio:: Saggio. +* Notazione:: Riferimento. +* Uso:: Utilizzo. +* Frammenti di codice:: Frammenti di codice. +* FAQ:: FAQ. +* Web:: Web. +* Cambiamenti:: Novità. +* Estensioni:: Programmazione. +* Funzionamento interno:: Funzionamento interno. +* Tradotti:: Traduzione. +* Tutti:: Tutti i manuali. +* FDL:: Licenza. +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Apprendimento +@unnumberedsec Apprendimento +@translationof Learning + +@divClass{column-left-top} +@subheading Manuale di apprendimento + +Questo libro spiega come iniziare a imparare LilyPond, e illustra +in modo semplice alcuni concetti fondamentali. Dovresti leggere +questi capitoli uno dopo l'altro. + +Alla fine di ogni sezione c'è un paragrafo @strong{Vedi anche}, +che contiene riferimenti incrociati alle altre sezioni: a una prima +lettura non dovresti seguire questi riferimenti. Quando hai letto +tutto il manuale, potresti voler leggere alcune sezioni di nuovo +e seguire questi riferimenti incrociati per maggiori informazioni. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Learning, learning, + @rlearningnamed{Top,Learning}, + @manualStableLearningSplit, + @manualStableLearningBig, 1.5 MB, + @manualStableLearningPdf, 3 MB} + +@divEnd + + +@node Glossario +@unnumberedsec Glossario +@translationof Glossary + +@divClass{column-left-top} +@subheading Glossario + +Questo manuale spiega i termini musicali, tradotti +in varie lingue. Se non hai una buona conoscenza della notazione o +della terminologia musicale (soprattutto se non sei di madrelingua inglese), +si raccomanda vivamente di consultare il glossario. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Music glossary, music-glossary, + @rglosnamed{Top,Music glossary}, + @manualStableGlossarySplit, + @manualStableGlossaryBig, 1 MB, + @manualStableGlossaryPdf, 1.5 MB} + +@divEnd + + +@node Saggio +@unnumberedsec Saggio +@translationof Essay + +@divClass{column-left-top} +@subheading Saggio + +Questo libro contiene una breve storia della tipografia musicale, seguita +da un'analisi delle tecniche di incisione di LilyPond. Comprende un +confronto tra LilyPond e altri sistemi di incisione musicale. + +@warning{i dettagliati esempi tipografici sono più facili da analizzare +nella versione PDF a causa della sua maggiore risoluzione.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Essay, essay, + @ressaynamed{Top,Essay}, + @manualStableEssaySplit, + @manualStableEssayBig, 2 MB, + @manualStableEssayPdf, 2.5 MB} + +@divEnd + + +@node Notazione +@unnumberedsec Notazione +@translationof Notation + +@divClass{column-left-top} +@subheading Guida alla Notazione + +Questo libro spiega tutti i comandi LilyPond che producono la +notazione. + +@warning{la Guida alla Notazione dà per scontato che il lettore conosca +il materiale di base esposto nel Manuale di Apprendimento e i termini +musicali inglesi presentati nel Glossario.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notation, notation, + @rusernamed{Top,Notation}, + @manualStableNotationSplit, + @manualStableNotationBig, 7 MB, + @manualStableNotationPdf, 18 MB} + +@divEnd + + +@node Uso +@unnumberedsec Uso +@translationof Usage + +@divClass{column-left-top} +@subheading Usage manual + +Questo libro spiega come eseguire i programmi, come integrare la +notazione di LilyPond in altri programmi, e suggerisce le @qq{migliori +tecniche} per un uso efficiente. È consigliabile leggerlo prima di +intraprendere un progetto impegnativo. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Usage, usage, + @rprogramnamed{Top,Usage}, + @manualStableUsageSplit, + @manualStableUsageBig, 300 KB, + @manualStableUsagePdf, 400 KB} + +@divEnd + + +@node Frammenti di codice +@unnumberedsec Frammenti di codice +@translationof Snippets + +@divClass{column-left-top} +@subheading Frammenti di codice + +Questo manuale presenta una selezione di frammenti di codice LilyPond tratti dal +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} +(LSR). Tutti i frammenti di codice sono nel pubblico dominio. + +Si prega di notare che questo documento non è un sottoinsieme esatto del LSR. LSR +utilizza una versione stabile di LilyPond, dunque i frammenti che +illustrano le nuove funzionalità di una versione di sviluppo devono essere +aggiunti separatamente. Vengono memorizzati in @file{Documentation/snippets/new/} +nell'albero dei sorgenti di LilyPond. + +Ogni sottosezione della Guida alla Notazione, nella parte @strong{Vedi anche}, +ha un collegamento alla lista dei relativi frammenti di codice. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Snippets, snippets, + @rlsrnamed{Top,Snippets}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node FAQ +@unnumberedsec FAQ +@translationof FAQ + +@divClass{column-center-top} +@subheading Domande iniziali + +@subsubheading Dove sono l'area di lavoro, i menu e la barra degli strumenti? + +Per usare LilyPond devi scrivere musica in formato testo. Leggi cosa +è il nostro @ref{Input testuale}. + + +@subsubheading C'è un sacco di documentazione! Devo leggerla? + +Devi leggere @ref{Learning, il Manuale di Apprendimento}. Per quanto +riguarda il resto della documentazione, puoi leggere solo le sezioni +sul tipo di notazione che vuoi creare. + + +@subsubheading C'è ancora molto da leggere! Ne vale la pena? + +Tocca a te decidere; le ragioni per cui potresti voler usare +LilyPond sono esposte nell' @ref{Introduzione}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Domande sull'uso + +@subsubheading Qualcosa non funziona! Come posso risolvere? + +Questo viene spiegato in @rprogram{Troubleshooting}. + + +@subsubheading Perché cambiate la sintassi? + +Questo viene spiegato in @rprogram{Why does the syntax change?}. + +@divEnd + + +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +Questo manuale fornisce informazioni generali su LilyPond. Contiene +anche delle informazioni riguardanti le varie comunità, la segnalazione +di bug e lo sviluppo. + +@divEnd + +@divClass{column-right-bottom} +@subheading Leggi + +@subsubheading Ultimo manuale + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading Manuale Web in @versionDevel + +@docLinksBare{Web, web, + @ref{Top,Web}, + @manualDevelWebSplit, + @manualDevelWebBig, 1 MB, + @manualDevelWebPdf, 2 MB} + +@divEnd + + +@node Cambiamenti +@unnumberedsec Cambiamenti +@translationof Changes + +@divClass{column-left-top} +@subheading Cambiamenti + +Questo è un sommario degli importanti cambiamenti e delle nuove +funzionalità di LilyPond rispetto alla versione stabile precedente. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Changes, changes, + @rchangesnamed{Top,Changes}, + @manualStableChangesSplit, + @manualStableChangesBig, 6 KB, + @manualStableChangesPdf, 200 KB} + +@divEnd + + +@node Estensioni +@unnumberedsec Estensioni +@translationof Extending + +@divClass{column-left-top} +@subheading Estendere LilyPond + +Questo manuale spiega come scrivere delle estensioni delle +funzionalità di LilyPond. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Extending, extending, + @rextendnamed{Top,Extending}, + @manualStableExtendingSplit, + @manualStableExtendingBig, 200 KB, + @manualStableExtendingPdf, 400 KB} + +@divEnd + + +@node Funzionamento interno +@unnumberedsec Funzionamento interno +@translationof Internals + +@divClass{column-left-top} +@subheading Guida al Funzionamento interno + +Si tratta di un insieme di pagine ricche di collegamenti che documentano +i dettagli essenziali di ogni classe, oggetto e funzione di LilyPond. +È prodotto direttamente dalle definizioni di formattazione +presenti nel codice sorgente. + +Quasi tutte le funzionalità di formattazione usate internamente sono +direttamente accessibili per l'utente. Ad esempio, gran parte delle +variabili che controllano i valori dello spessore, le distanze, ecc., +può essere modificata nei file di input. Esistono moltissime opzioni di +formattazione, e tutte queste sono descritte in questo documento. Ogni +sezione della Guida alla Notazione ha una sottosezione @b{Vedi anche}, +che si riferisce alla documentazione generata. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Internals, internals, + @rinternalsnamed{Top,Internals}, + @manualStableInternalsSplit, + @manualStableInternalsBig, 2.5 MB, + @manualStableInternalsPdf, 2.8 MB} + +@divEnd + + +@node Tradotti +@unnumberedsec Tradotti +@translationof Translated + +@divClass{column-center-bottom} +@subheading Stato delle traduzioni + +@include translations.itexi + +@divEnd + + +@node Tutti +@unnumberedsec Tutti +@translationof All + +@divClass{column-left-top} +@subheading Versioni scaricabili + +@ifclear web_version +I pacchetti scaricabili sono disponibili presso @uref{http://lilypond.org} +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Versioni stabili precedenti + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +Documentazione di LilyPond 2.12} + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +Documentazione di LilyPond 2.11} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +Documentazione di LilyPond 2.10} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +Documentazione di LilyPond 2.8} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +Documentazione di LilyPond 2.6} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +Documentazione di LilyPond 2.4} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +Documentazione di LilyPond 2.2} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +Documentazione di LilyPond 2.0} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +Documentazione di LilyPond 1.8} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +Documentazione di LilyPond 1.6} + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL +@translationof FDL + +@divClass{column-center-top} +@subheading Licenza della Documentazione + +La documentazione per GNU LilyPond è pubblicata secondo la GNU Free +Documentation License. Un'introduzione a questa licenza, e le ragioni +per cui l'abbiamo scelta, è disponibile in @ref{Libertà}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd + diff --git a/Documentation/it/web/news-front.itexi b/Documentation/it/web/news-front.itexi new file mode 100644 index 0000000000..4f31bd80db --- /dev/null +++ b/Documentation/it/web/news-front.itexi @@ -0,0 +1,70 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*- +@ignore + Translation of GIT committish: 61fed596442d47e96c10ac3c9c0c696e5dfd22cf + + 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 This file is part of lilypond-web.texi and community.itexi + +@c when you add a new item, consider moving the lowest item(s) +@c into news-old.itexi. + +@c keep two blank lines between news entries + +@c used for news about the upcoming release; see CG 10.2 + + +@newsItem +@subsubheading Rilasciato LilyPond 2.13.40! @emph{21 Novembre 2010} + +Siamo felici di annunciare il rilascio di LilyPond 2.13.40. Questo +rilascio contiene come sempre un certo numero di correzioni. Tuttavia rimangono +ancora alcuni problemi critici: questo rilascio è dunque destinato solo +agli sviluppatori. + +Si noti che questa @strong{non} è la seconda versione beta test. A causa di +varie modifiche non verificate al processo di compilazione, non possiamo essere +del tutto sicuri della qualità di questo rilascio. + +@newsEnd + + +@newsItem +@subsubheading Prima versione beta test della 2.14 -- Rilasciato LilyPond 2.13.39! @emph{15 Novembre 2010} + +LilyPond 2.13.39 è disponibile; questa è la prima beta test della prossima +versione stabile, la 2.14. Si invitano gli utenti a provare questa +versione. Le nuove funzionalità introdotte rispetto alla versione 2.12.3 sono +elencate nel manuale @qq{Changes} della sezione del sito sullo +@ref{Sviluppo}. + +Ci sono ancora alcuni problemi critici in questo rilascio: la +spaziatura verticale è sospetta in due casi, e lilypond può +bloccarsi se l'input è strano. Se decidi di provare la 2.13.39, non +stupirti se incontrerai dei problemi, ma inviaci una cortese +@ref{Segnalazione bug}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond Report #22. @emph{3 Novembre 2010} + +Il @emph{LilyPond Report} è tornato, con alcune sorprese ed esaltanti +notizie per tutta la comunità di LilyPond! In questo numero troverete +una lista completa e aggiornata di tutte le mailing list e i forum su +LilyPond in tutto il mondo. Inoltre, per la prima volta il nostro ospite +speciale è il co-fondatore e sviluppatore principale di LilyPond, +@strong{Jan Nieuwenhuizen}, che è stato impegnato negli ultimi tre mesi -- +continua a leggere per scoprire in cosa! + +@uref{http://news.lilynet.net/The-LilyPond-Report-22, Leggi il +LilyPond Report 22} ora; commenti e contributi sono ben accetti! + +@newsEnd + + + diff --git a/Documentation/ja/GNUmakefile b/Documentation/ja/GNUmakefile index 9f7f4377ac..e6e9466271 100644 --- a/Documentation/ja/GNUmakefile +++ b/Documentation/ja/GNUmakefile @@ -1,7 +1,10 @@ ISOLANG = ja depth = ../.. -SUBDIRS = user +SUBDIRS = web learning texidocs usage included notation STEPMAKE_TEMPLATES = documentation -LOCALSTEPMAKE_TEMPLATES = doc-i18n-root +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root +NO_PDF_FILES = 1 + +EXTRA_DIST_FILES = web.texi include $(depth)/make/stepmake.make diff --git a/Documentation/ja/dedication.itely b/Documentation/ja/dedication.itely new file mode 100644 index 0000000000..6881627cc0 --- /dev/null +++ b/Documentation/ja/dedication.itely @@ -0,0 +1,23 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + +@quotation +我々はこのプログラムを音楽を通じて出会ったすべての友人達に捧げたいと思います。 +@c We want to dedicate this program to all the friends that we +@c met through music. + +Han-Wen と Jan +@end quotation + diff --git a/Documentation/ja/included/GNUmakefile b/Documentation/ja/included/GNUmakefile new file mode 100644 index 0000000000..afe7a4d738 --- /dev/null +++ b/Documentation/ja/included/GNUmakefile @@ -0,0 +1,10 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation + +EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) +EXTRA_DIST_FILES+=$(call src-wildcard,*.ily) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itely) + +include $(depth)/make/stepmake.make diff --git a/Documentation/ja/included/generating-output.itexi b/Documentation/ja/included/generating-output.itexi new file mode 100644 index 0000000000..7f0bb53ff0 --- /dev/null +++ b/Documentation/ja/included/generating-output.itexi @@ -0,0 +1,219 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@c This file is part of web/download.itexi and +@c learning/tutorial.itely +@ignore + Translation of GIT committish: 063071aea23c225d488485c4b34722df18880638 + + 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 This is about "compiling" a lilypond file +@c (Learning 1 Tutorial), **not** compiling the +@c source code. + +@macro lilypadOSX +@warning{以下の説明は、あなたが LilyPond アプリケーションを使用していると@c +仮定しています。@c +@rweb{より簡単な編集手段} で記述されているプログラムを使用している場合、@c +ファイルのコンパイルで何か問題に遭遇した時は@c +そのプログラムのドキュメントを調べてください。} + + +@subsubheading ステップ 1. @file{.ly} ファイルを作成する + +@command{LilyPond.app} をダブルクリックして、見本のファイルを開きます。 + +@sourceimage{Learning_Macos_welcome,,,} + +画面の左上に表示されているメニューから @w{@code{File > Save}} を選択します。 + +@sourceimage{Learning_Macos_Save_menu,,,} + +ファイル名を決めます。例えば @file{test.ly} とします。 + +@sourceimage{Learning_Macos_Save_file_with_name,,,} + + +@subsubheading ステップ 2. コンパイルする (LilyPad を使用します) + +同じメニューから @w{@code{Compile > Typeset}} を選択します。 + +@sourceimage{Learning_Macos_Typeset_menu,,,} + +新たにウィンドウが開き、先ほど保存したファイルのコンパイル進捗ログを表示します。 + +@sourceimage{Learning_Macos_Compiling_log,,,} + + +@subsubheading ステップ 3. 出力を閲覧する + +コンパイルが終了すると、元のファイルと同じな前の PDF ファイルが作成され、@c +自動的にデフォルトの PDF ビューアで表示されます。 + +@sourceimage{Learning_Macos_pdf_output,,,} + + +@subsubheading その他のコマンド + +LilyPond 用に新しくファイルを作成するには、@w{@code{File > New}} +を選択します。 + +@sourceimage{Learning_Macos_New_menu,,,} + +あるいは、@w{@code{File > Open} を選択し、既存のファイルを開いて編集します。 + +@sourceimage{Learning_Macos_Open_menu,,,} + +@w{@code{Compile > Typeset}} を行う前にあなたが新たに行った編集を保存する@c +必要があります。@c +PDF ファイルが表示されない場合は、進捗ログのウィンドウでエラーをチェックしてください。 + +Mac OS に付属されているデフォルトの Preview PDF ビューアを使用していない場合、@c +以前のコンパイルで生成された PDF ファイルを開いていると、@c +その後に実行するコンパイルは更新された PDF を生成するのに失敗する可能性があります。@c +その時は、元の PDF ファイルを閉じてください。 + +@end macro + + +@macro lilypadWindows +@warning{以下の説明は、あなたがビルトイン LilyPad エディタを使用していると@c +仮定しています。@c +@rweb{より簡単な編集手段} で記述されているプログラムを使用している場合、@c +ファイルのコンパイルで何か問題に遭遇した時は@c +そのプログラムのドキュメントを調べてください。} + +@subsubheading ステップ 1. @file{.ly} ファイルを作成する + +デスクトップ上の LilyPond アイコンをクリックして、見本のファイルを開きます。 + +@sourceimage{Learning_Win7_Welcome_File_Whole,,,} + +見本ファイルの上端に表示されるメニューから +@w{@code{ファイル > 名前を付けて保存}} を選択します。@c +@w{@code{ファイル > 上書き保存}} を使用しないでください。@c +なぜならファイルに有効な LilyPond ファイル名を付けるまで、@c +上書き保存は機能しないからです。 + +@sourceimage{Learning_Win7_Save_Menu,,,} + +ファイル名を決めます。例えば @file{test.ly} とします。 + +@sourceimage{Learning_Win7_Save_File_With_Name,,,} + + +@subsubheading ステップ 2a. コンパイルする (ドラッグ&ドロップを使用します) + +ファイルをコンパイルするには、好みで以下のいずれかの方法をとります: + +ファイルを LilyPond アイコンに直接ドラッグ&ドロップします。 + +@sourceimage{Learning_Win7_Open_Dragndrop,,,} + +ファイルを右クリックして、ポップアップ メニューから +@w{@code{プログラムから開く > LilyPond}} を選択します。 +Right-click on the file and from the pop-up context menu choose + +@sourceimage{Learning_Win7_Open_Context_Menu,,,} + + +@subsubheading ステップ 2b. コンパイルする (ダブルクリックする) + +あるいは、ただ単に @file{test.ly} をダブルクリックします。 + + +@subsubheading ステップ 3. 出力を閲覧する + +@file{test.ly} をコンパイルしている間、コマンド ウィンドウが一瞬だけ開いて閉じます。@c +この処理の間に 3 つのファイルが作成されます。 + +@sourceimage{Learning_Win7_All_Files_Created,,,} + +PDF ファイルは @file{test.ly} ファイルの譜刻結果を保持しています。 + +@sourceimage{Learning_Win7_Pdf_Output,,,} + + +@subsubheading その他のコマンド + +新しくファイルを作成するには、以前に作成したファイルのウィンドウから +@w{@code{ファイル > 新規作成}} を選択します。 + +@sourceimage{Learning_Win7_New_Menu,,,} + +@noindent +あるいは @w{@code{ファイル > 開く}} を選択し、以前に保存したファイルを@c +開いて編集します。 + +@sourceimage{Learning_Win7_Open_Menu,,,} + +コンパイルを行う前にあなたが新たに行った編集を保存する必要があります。@c +PDF ファイルが作成されない場合は、コンパイルの過程で作成されるログ ファイルで@c +エラーをチェックしてください。 + +@sourceimage{Learning_Win7_Log_File,,,} + +このログ ファイルは、LilyPond ファイルをコンパイルする度に上書きされます。 + +PS ファイルは LilyPond が PDF ファイルを作成するために内部的に使用するもので、@c +無視できます。@c +PS ファイルもコンパイルの度に上書きされます。 + +PDF ファイルを PDF ビュー他で閲覧している場合、 +新たにコンパイルを行う前に閉じる必要があります。@c +なぜなら、閲覧されている間は新たに PDF ファイルを作成するのに失敗する可能性があるからです。 + +@end macro + + +@c not lilypad at all, but I ran out of names. :( +@macro lilypadCommandLine +@warning{以下の説明は、あなたがコマンドライン プログラムに慣れていると@c +仮定しています。@c +@rweb{より簡単な編集手段} で記述されているプログラムを使用している場合、@c +ファイルのコンパイルで何か問題に遭遇した時は@c +そのプログラムのドキュメントを調べてください。} + +@subsubheading ステップ 1. @file{.ly} ファイルを作成する + +@file{test.ly} というテキスト ファイルを作成し、以下を記述します: + +@c double \\ required because this is inside a macro! +@example +\\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + + +@subsubheading ステップ 2. コンパイルする (コマンドラインで) + +@file{test.ly} を処理するには、コマンド プロンプトに以下を打ち込みます: + +@example +lilypond test.ly +@end example + +@noindent +以下のようなものが表示されます: + +@example +GNU LilyPond @w{@version{}} +Processing `test.ly' +Parsing... +Interpreting music... +Preprocessing graphical objects... +Solving 1 page-breaking chunks...[1: 1 pages] +Drawing systems... +Layout output to `test.ps'... +Converting to `./test.pdf'... +@end example + +@subsubheading ステップ 3. 出力を閲覧する + +結果として得られる @file{test.pdf} を閲覧したり、印刷したりすることができます。 + +@end macro diff --git a/Documentation/ja/index.html.in b/Documentation/ja/index.html.in deleted file mode 100644 index 5ec032dd04..0000000000 --- a/Documentation/ja/index.html.in +++ /dev/null @@ -1,146 +0,0 @@ - - - - LilyPond @TOPLEVEL_VERSION@ documentation - - - - - - -
-

LilyPond ドキュメント

-
- -
-

- Version @TOPLEVEL_VERSION@ -
- @DATE@ -

-
- - - - - - - - - - - - - - - - - - -

- このページから読むことができるすべてのドキュメントはダウンロードすることができます。 - ドキュメント (.tar.bz2 形式) のダウンロード -

-

- このドキュメントの各 HTML ページには、ページの一番下に他の言語で書かれた翻訳へのリンクがあります。 -

- - diff --git a/Documentation/ja/learning.tely b/Documentation/ja/learning.tely new file mode 100644 index 0000000000..bdcff5494d --- /dev/null +++ b/Documentation/ja/learning.tely @@ -0,0 +1,90 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: c028761d49ac4820206806dbc58e9704a87b4a8e + + 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 + +@setfilename lilypond-learning.info +@settitle GNU LilyPond 学習マニュアル +@documentencoding UTF-8 +@documentlanguage ja +@afourpaper + +@macro manualIntro +このマニュアルは LilyPond バージョン @version{} の導入部です。 +@end macro + + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Copyright @copyright{} 1999--2010 by the authors. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Learning Manual of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Japanese +@end ignore + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@lilyTitlePage{学習マニュアル} + +@c TOC -- non-tex +@ifnottex + +@menu +* チュートリアル:: LilyPond で譜刻するための基本 +* 一般的な記譜法:: LilyPond 導入の手引き +* 基礎となるコンセプト:: このマニュアルの残りの部分を読むために@c +必要とされる基本的なコンセプト +* 出力を調整する:: 出力を変更するための導入部 + +付録 + +* テンプレート:: 作成 (コンパイル) 準備ができている@c +テンプレート +* GNU Free Documentation License:: このドキュメントの使用許諾書 +* LilyPond インデックス:: +@end menu + +@docMain +@end ifnottex + + +@c TOC - tex +@contents + +@allowcodebreaks false + +@c INCLUDES + +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely + +@include learning/templates.itely +@include fdl.itexi + + +@node LilyPond インデックス +@appendix LilyPond インデックス +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/ja/learning/GNUmakefile b/Documentation/ja/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/ja/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/ja/learning/common-notation.itely b/Documentation/ja/learning/common-notation.itely new file mode 100644 index 0000000000..085cf13722 --- /dev/null +++ b/Documentation/ja/learning/common-notation.itely @@ -0,0 +1,1539 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: c028761d49ac4820206806dbc58e9704a87b4a8 + + 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" + +@ignore +Tutorial guidelines: (different from policy.txt!) +- unless you have a really good reason, use either + @lilypond[verbatim,quote] + or + @lilypond[verbatim,quote,relative=2] + + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "es". I know it's not + correct Dutch naming, but let's not confuse people with this + until we get to the Basic notation chapter. + +- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant + portions of the tutorial. + +@end ignore + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 一般的な記譜法 +@chapter 一般的な記譜法 +@translationof Common notation + +このチュートリアルではまず LilyPond 音楽言語についての紹介を行い、@c +楽譜を作り出す方法について説明します。@c +LilyPond との最初の接触の後、我々は一般的な音楽記譜法を持つ楽譜を@c +作成する方法について説明します。 + +@menu +* 単一譜表表記:: +* 同時に演奏する複数の音符:: +* 歌曲:: +* 仕上げ:: +@end menu + + +@node 単一譜表表記 +@section 単一譜表表記 +@translationof Single staff notation + +このセクションはでは 1 つの譜表の上にある 1 つの声部のために使用される@c +一般的な記譜法を紹介します。 + +@menu +* 小節チェック:: +* 臨時記号と調号:: +* タイとスラー:: +* アーティキュレーションと強弱記号:: +* テキストを追加する:: +* 自動連桁と手動連桁:: +* 高度なリズム コマンド:: +@end menu + + +@node 小節チェック +@subsection 小節チェック +@translationof Bar checks + +必須ではありませんが、入力コードの中で @emph{小節チェック} を挿入して@c +どこに小節線を置こうとしているのかを示すべきです。@c +小節チェックは挿入するには @code{|} を入力します。@c +小節チェックがあると、プログラムはあなたが各小節に入力した演奏時間が@c +正しい長さになっているかを検証することができます。@c +さらに、小節チェックは要素を整理する助けとなるため、 +入力コードが読みやすくなります。 + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +記譜法リファレンス: +@ruser{小節と小節番号のチェック} + + +@node 臨時記号と調号 +@subsection 臨時記号と調号 +@translationof Accidentals and key signatures + +@warning{新しいユーザ、特に音楽理論に馴染みのないユーザは@c +しばしばこれらのことで混乱します +-- このページの最後にある警告を呼んでください!} + +@subheading 臨時記号 + +@cindex accidentals (臨時記号) +@cindex accidentals and key signatures (臨時記号と調号) +@cindex sharp (シャープ) +@cindex double sharp (ダブル シャープ) +@cindex sharp, double (ダブル シャープ) +@cindex flat (フラット) +@cindex double flat (ダブル フラット) +@cindex flat, double (ダブル フラット) + +@funindex es +@funindex is +@funindex eses +@funindex isis + +音楽用語集: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, +@rglos{double flat}, @rglos{accidental} +@c シャープ (sharp), フラット (flat), ダブル シャープ (double sharp), +@c ダブル フラット (double flat), 臨時記号 (accidental) + +@notation{シャープ} は音符名に @code{is} を付け加えることによって作られ、@c +@notation{フラット} は @code{es} を付け加えることによって作られます。@c +予想しているかもしれませんが、@notation{ダブル シャープ} や@c +@notation{ダブル フラット} は @code{isis} や @code{eses} を@c +付け加えることによって作られます。@c +この構文はドイツ語やオランダ語のような北欧とドイツの言語@c +での命名規則から生まれました。 +@notation{臨時記号} に対して他の名前を使うには、@c +@ruser{他の言語での音符名} を参照してください。 + +@lilypond[verbatim,quote,relative=2] +cis1 ees fisis, aeses +@end lilypond + + +@cindex key signature, setting +@subheading 調号 +@c 調号 + +@cindex key signature (調号) +@cindex major (メジャー) +@cindex minor (マイナー) +@cindex accidentals and key signature (臨時記号と調号) +@cindex content vs. layout (内容 vs. レイアウト) +@cindex layout vs. content (レイアウト vs. 内容) + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +音楽用語集: @rglos{key signature}, @rglos{major}, @rglos{minor} + +@notation{調号} はコマンド @code{\key} とそれに続くピッチと +@code{\major} または @code{\minor} によってセットされます。 + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 +\key c \minor +a +@end lilypond + +@smallspace + + +@subheading 警告: 調号とピッチ + +音楽用語集: @rglos{accidental}, @rglos{key signature}, +@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, +@rglos{transposition} + +@notation{臨時記号} を譜刻するかどうかを決定するために LilyPond はピッチと +@notation{調号} を検証します。@c +調号は @emph{譜刻される} 臨時記号にだけ影響を与え、@c +音符の @notation{ピッチ} には影響を与えません!@c +この特徴はしばしば新しく LilyPond を始める人を混乱させるため、@c +より詳細に説明します。 + +LilyPond は音楽の内容とレイアウトを峻別します。@c +音符の変更記号 (@notation{フラット}、@notation{ナチュラル}、@c +@notation{シャープ}) はピッチの一部であるため、音楽の内容です。@c +臨時記号 (@emph{譜刻される}フラット、ナチュラル、シャープ記号) が@c +対応する音符の前に譜刻されるかどうかはレイアウトの問題です。@c +レイアウトは規則に従う何らかのものであるため、@c +臨時記号はそれらの規則に対応して自動的に譜刻されます。@c +あなたの音楽の中でのピッチは人工的な仕掛けであるため、@c +それらは自動的には追加されず、あなたはあなたの聞きたいピッチを@c +入力しなければなりません。 + +以下の例では: + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +臨時記号を譜刻されている音符はありません。@c +しかしながら、あなたは入力ファイルで @code{is} を付け加えて @code{cis} や +@code{fis} などとタイプしなければなりません。 + +コード @code{b} は @qq{譜表の最初の線 (一番上の線) のすぐ下に黒い点を譜刻せよ} +という意味ではありません。@c +そうではなく、@qq{ピッチが B ナチュラルである音符がある} という意味です。@c +A フラット メジャーの調では、@code{b} には臨時記号が付きます: + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +混乱してしまいましたか?@c +以下のように考えてみてください: +あなたがピアノを弾いているとします。@c +黒鍵を押したいのであれば、音符名に @code{-is} や @code{-es} を付ける@c +必要があるのです! + +すべての変化を明示的に付け加えることは入力時にちょっとした努力を@c +要するかもしれません。@c +しかしながら、移調がより容易になる、異なる規約に対応して臨時記号を@c +譜刻できるという利点があります。@c +臨時記号がどのように異なる規則に対応して譜刻されるのかについての@c +いくつかの例は、@ruser{自動臨時記号} を参照してください。 +@c 臨時記号の自動譜刻 + +@seealso +記譜法リファレンス: @ruser{他の言語での音符名}, +@ruser{臨時記号}, +@ruser{自動臨時記号}, +@ruser{調号} + + +@node タイとスラー +@subsection タイとスラー +@translationof Ties and slurs + +@cindex tie (タイ) +@cindex slur (スラー) +@cindex slur, phrasing (フレージング スラー) +@cindex phrasing slur (フレージング スラー) + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + + +@subheading タイ + + +音楽用語集: @rglos{tie} + +@notation{タイ}はタイが始まる最初の音符にチルド @code{~} を@c +付加することによって作成されます。 + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4~ c8 a~ a2 | +@end lilypond + + +@subheading スラー + +音楽用語集: @rglos{slur} + +@notation{スラー}は多くの音符に亘って描かれる曲線です。@c +スラーの開始音符と終了音符にはそれぞれ @code{(} と @code{)} を付加します。 + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + + +@subheading フレージング スラー + +音楽用語集: @rglos{slur}, @rglos{phrasing} + +長い @notation{フレーズ} を示すためのスラーは @code{\(} と @code{\)} +によって挿入することができます。@c +あなたは@notation{スラー}とフレージング スラーを重ねることができます。@c +しかしながら、あなたは複数のスラーを重ねたり、複数のフレージング スラーを@c +重ねることはできません。 + +@lilypond[verbatim,quote,relative=2] +g4\( g8( a) b( c) b4\) +@end lilypond + +@smallspace + +@cindex slurs versus ties (スラー vs. タイ) +@subheading 警告: スラー vs. タイ + +音楽用語集: @rglos{articulation}, @rglos{slur}, @rglos{tie} + +@notation{スラー} は @notation{タイ} のように見えますが、意味が異なります。@c +タイは単純に最初の音符をより長くするものであり、@c +同じ音程の音符のペアに対してのみ使用することができます。@c +スラーは複数の音符による @notation{アーティキュレーション} (節、表現) を@c +表していて、より大きな音符のグループに対して使用することができます。@c +スラーとタイはネストさせることができます。 + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + +@seealso +記譜法リファレンス: +@ruser{タイ}, +@ruser{スラー}, +@ruser{フレージング スラー} + + +@node アーティキュレーションと強弱記号 +@subsection アーティキュレーションと強弱記号 +@translationof Articulation and dynamics + + +@subheading アーティキュレーション + +@cindex articulation (アーティキュレーション) +@cindex accent (アクセント) +@cindex staccato (スタッカート) + +音楽用語集: @rglos{articulation} + +一般的な @notation{アーティキュレーション} はダッシュ @code{-} と単一文字を@c +使うことで音符に付け加えることができます: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + + +@subheading 運指法記号 + +@cindex fingering (運指法記号) + +@funindex ^ +@funindex _ + +音楽用語集: @rglos{fingering} + +同様に、@notation{運指法} はダッシュ (@code{-}) と譜刻する数字を使うことで@c +音符に付け加えることができます: + +@lilypond[verbatim,quote,relative=2] +c-3 e-5 b-2 a-1 +@end lilypond + +通常、アーティキュレーションと運指法は自動的に譜刻されます。@c +しかしながら、あなたはダッシュ (@code{-}) を @code{^} (上へ) または +@code{_} (下へ) に置き換えることによって方向を指定することができます。@c +さらに、あなたは同じ音符に複数のアーティキュレーションを@c +使用することもできます。@c +しかしながらたいていの場合は、LilyPond にアーティキュレーションの方向を@c +決定させるのが一番です。 + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + + +@subheading 強弱記号 + +@cindex dynamics (強弱記号) +@cindex decrescendo (デクレッシェンド) +@cindex crescendo (クレッシェンド) + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +音楽用語集: @rglos{dynamics}, @rglos{crescendo} +@rglos{decrescendo} + +@notation{強弱記号} は音符にバック スラッシュ@c +@ignore +(訳者注: バック スラッシュは英語フォントではスラッシュ @code{/} を@c +左右反転させたもの、日本語フォントでは円マーク +@code{¥} になるのが一般的です。) +@end ignore +付きのマークを付け加えることによって作成されます: + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + +@notation{クレッシェンド} と @notation{デクレッシェンド} はコマンド @code{\<} と +@code{\>} によって開始されます。@c +次の強弱記号 -- 例えば、@code{\f} -- が (デ)クレッシェンドを終わらせます。@c +コマンド @code{\!} を使って終わらせることもできます: + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +記譜法リファレンス: +@ruser{アーティキュレーションと装飾}, +@ruser{運指の指示}, +@ruser{強弱記号} + + +@node テキストを追加する +@subsection テキストを追加する +@translationof Adding text + +@cindex text, adding (テキストを追加する) +@cindex adding text (テキストを追加する) +@cindex markup (マークアップ) + +@funindex \markup +@funindex markup + +テキストをあなたの楽譜に追加することができます: + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +追加のフォーマット指定を @code{\markup} コマンドで追加することができます: + +@lilypond[verbatim,quote,relative=2] +c2^\markup { \bold espr } +a2_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +記譜法リファレンス: +@ruser{テキストを記述する} + + +@node 自動連桁と手動連桁 +@subsection 自動連桁と手動連桁 +@translationof Automatic and manual beams + +@cindex beaming (連桁を付ける) +@cindex automatic beams (自動連桁) +@cindex manual beams (手動連桁) +@cindex beams, automatic (自動連桁) +@cindex beams, manual (手動連桁) +@cindex beams, by hand (手動による連桁) + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +音楽用語集: @rglos{beam} + +すべての @notation{連桁} は自動的に描かれます: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@end lilypond + +あなたが自動連桁を好まない場合、手動で上書きすることもできます。@c +ある箇所の連桁を修正するには、連桁を付ける最初の音符に @code{[} を、@c +最後の音符に @code{]} を付け加えます。 + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +もしあなたが楽譜全体あるいは一部で自動連桁を Off にしたいのなら、@c +自動連桁を Off にするにはコマンド @code{\autoBeamOff} を、@c +再度自動連桁を On にするには @code{\autoBeamOn} を使用します。 + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +記譜法リファレンス: +@ruser{自動連桁}, +@ruser{手動連桁} + + +@node 高度なリズム コマンド +@subsection 高度なリズム コマンド +@translationof Advanced rhythmic commands + +@subheading 部分小節 + +@cindex pickup (ピックアップ) +@cindex anacrusis (弱拍) +@cindex partial measure (部分小節) + +@funindex \partial +@funindex partial + +音楽用語集: @rglos{anacrusis} + +ピックアップ (訳者: 本来の拍子以外の拍子を持つ小節のこと) +(または@notation{弱拍}) はキーワード @code{\partial} によって挿入されます。@c +この後に演奏時間が続きます: +@code{\partial 4} は 4 分音符のピックアップであり、@c +@code{\partial 8} は 8 分音符のピックアップです。 + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + + +@subheading 連符 + +@cindex tuplets (連符) +@cindex triplets (3 連符) + +@funindex \times +@funindex times + +音楽用語集: @rglos{note value}, @rglos{triplet} + +@notation{連符} は @code{\times} キーワードによって作成されます。@c +これは 2 つの引数をとります: 分数と楽譜の断片です。@c +楽譜の断片の演奏時間と分数が乗算されます。@c +3 連符は表記された演奏時間の 2/3 の長さなので、@notation{3 連符} は@c +分数として 2/3 を持ちます。 + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + + +@subheading 装飾小音符 + +@cindex grace notes (装飾小音符) +@cindex acciaccatura (短前打音) +@cindex appoggiatura (前打音) + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +音楽用語集: @rglos{grace notes}, @rglos{acciaccatura}, +@rglos{appoggiatura} + +@notation{装飾小音符} は @code{\grace} コマンドによって作成されますが、@c +キーワード @code{\appoggiatura} や @code{\acciaccatura} による接頭音楽表記に@c +よっても作成されます: + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +記譜法リファレンス: +@ruser{装飾小音符}, +@ruser{連符}, +@ruser{上拍} + + +@node 同時に演奏する複数の音符 +@section 同時に演奏する複数の音符 +@translationof Multiple notes at once + +このセクションでは同時に複数の音符 + -- 複数の楽器、単一の楽器に対する複数の譜 (すなわちピアノ)、和音 -- +を持つ方法について紹介します。 + +楽譜の中での多声は楽曲の中にある複数の声部を参照します。@c +LilyPond の中での多声は同じ譜表上にある複数の声部を参照します。 + +@menu +* 音楽表記についての説明:: +* 複数の譜:: +* 譜表グループ:: +* 音符を組み合わせて和音にする:: +* 単一譜表での多声:: +@end menu + + +@node 音楽表記についての説明 +@subsection 音楽表記についての説明 +@translationof Music expressions explained + +@cindex music expression (音楽表記) +@cindex expression, music (音楽表記) +@cindex compound music expression (複合音楽表記) +@cindex music expression, compound (複合音楽表記) + +LilyPond 入力ファイルの中では、音楽は @notation{音楽表記} によって表されます。@c +単一の音符は 1 つの音楽表記になります: + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +表記を波括弧で括ることによって @emph{複合音楽表記} が作成されます。@c +2 つの音符を持つ複合音楽表記を作成しました: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +波括弧の中にある音楽表記 (例えば、いくつかの音符) のグループはそれらが@c +シークエンスであるということを意味しています +(つまり、それぞれの音符は前の音符に続くということです)。@c +もう 1 つ音楽表記の結果を示します: + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f4 g } +@end lilypond + + +@subheading 数学的表記との類似 +@c Analogy: mathematical expressions + +このメカニズムは数学式と似ています: +大きな式は小さな式を組み合わせることによって作成されます。@c +そのような式は表記と呼ばれ、それらの定義は再帰的なのであなたは@c +任意に複雑で大きな表記を作ることができます。@c +例えば、 + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +これは表記のシークエンスであり、@c +各表記は次の (より大きな) 表記に組み込まれています。@c +最も単純な表記は数であり、より大きな表記は演算子 (@code{+}, @code{*}, +@code{/} など) と括弧を組み合わせることによって作成されます。@c +数学式と同様に、音楽表記も任意の深さにネストさせることができ、@c +それは多声楽譜のような複雑な音楽のために必要なことです。 + + +@subheading 同時進行の音楽表記: 複数の譜 +@c Simultaneous music expressions: multiple staves + +@cindex multiple staves (複数の譜) +@cindex staves, multiple (複数の譜) +@cindex polyphony (多声) +@cindex combining expressions in parallel (表記を並列に組み合わせる) +@cindex parallel expressions (並列表記) +@cindex expressions, parallel (並列表記) +@cindex relative notes and simultaneous music (相対音符と同時進行する音楽) +@cindex relative notes and parallel expressions (相対音符と並列表記) +@cindex simultaneous music and relative notes (同時進行する音楽と相対音符) +@cindex parallel expressions and relative notes (並列表記と相対音符) + +@funindex << +@funindex >> +@funindex << ... >> + +音楽用語集: @rglos{polyphony} + +このテクニックは @notation{多声音楽} に対して有用です。@c +複数の声部や複数の譜を持つ音楽を入力するために、@c +音楽表記を並列に組み合わせます。@c +2 つの声部を同時に演奏すべきであるということを示すには、@c +単純に音楽表記を同時進行するよう組み合わせて入力します。@c +@q{同時進行} の音楽表記は @code{<<} と @code{>>} で音楽表記を@c +囲い込むことによって形成されます。@c +以下の例では、3 つのシークエンス (すべてのシークエンスはそれぞれ 2 つの音符を@c +保持しています) が同時進行するように組み合わされています: + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +入力の各レベルに対して異なる量のスペースをインデントとして与えていることに@c +注意してください。@c +LilyPond は行の先頭にどれくらい多く (あるいは少なく) のスペースがあるかを@c +気にしません。@c +しかしながら、上の例のように LilyPond コードにインデントを入れることによって@c +人間にとってはずっと読みやすくなります。 + +@warning{入力での各音符は前の音符との相対関係にあり、先頭の @code{@bs{}relative} +コマンドの中にある @code{c''} と相対関係にあるわけではありません。} + + +@subheading 同時進行する音楽表記: 単一の譜表 +@c Simultaneous music expressions: single staff + +楽曲の中にある譜の数を決定するために、@c +LilPond は最初の音楽表記の始まりを調べます。@c +始まりの音楽表記が単一の表記であった場合、楽譜の中の譜表は 1 つです。@c +以下の例は複雑な表記を持ちますが、単一の表記で始まっているため譜表も 1 つです。 + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e2 f } { c2 <> } >> | +} +@end lilypond + + +@node 複数の譜 +@subsection 複数の譜 +@translationof Multiple staves + +@cindex multiple staves (複数の譜) +@cindex staves, multiple (複数の譜) +@cindex context (コンテキスト) +@cindex context, notation (記譜コンテキスト) +@cindex notation context (記譜コンテキスト) + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +@ref{音楽表記についての説明} で見てきたように、@c +LilyPond 入力ファイルは音楽表記によって構築されています。@c +複数の同時進行の音楽表記で始まる楽譜の場合、LilyPond は複数の譜を作成します。@c +しかしながら、各譜表を明示的に作成すると何が起こるか@c +より容易に見て取ることができます。 + +複数の譜表を譜刻するには、1 つの譜表を形成する音楽の各部分の前に +@code{\new Staff} を付け加えます。@c +これらの @code{Staff} 要素は @code{<<} と @code{>>} で並列に組み合わされます: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +コマンド @code{\new} は 1 つの @q{記譜コンテキスト} を導入します。@c +記譜コンテキストは音楽的イベント (音符や @code{\clef} コマンドなど) が@c +解釈される環境です。@c +単純な楽曲では、そのような記譜コンテキストは自動的に作成されます。@c +より複雑な楽曲ではコンテキストを明示的に記述することが望ましいです。 + +コンテキストにはいくつかのタイプがあります。@c +@code{Score}, @code{Staff}, @code{Voice} は旋律記譜を扱います。@c +一方、@code{Lyrics} は歌詞テキストをセットし、@code{ChordNames} は@c +コード ネームを譜刻します。 + +構文という観点で見ると、@code{\new} を音楽表記の先頭に付け加えることによって@c +より大きな音楽表記が作成されます。@c +これは数学でのマイナス符号に似ています。@c +数式 @math{(4+5)} は数学表記であり、@math{-(4+5)} はより大きな数学表記です。 + +ある譜表に挿入された@notation{拍子記号}はデフォルトで他のすべての譜に@c +影響を与えます。@c +一方で、ある譜表に挿入された調号は他のすべての譜に影響を@emph{与えません}。@c +記号によってデフォルトの振る舞いが異なるのは、移調する楽器を扱う楽譜の方が@c +複合リズム (polyrhythmic) の楽譜よりも一般的だからです。 + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +@node 譜表グループ +@subsection 譜表グループ +@translationof Staff groups + +@cindex piano staff (ピアノ譜) +@cindex staff, piano (ピアノ譜) +@cindex choir staff (合唱譜) +@cindex staff, choir (合唱譜) +@cindex grand staff (グランド譜) +@cindex staff, grand (グランド譜) +@cindex staff group (譜表グループ) + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +音楽用語集: +@rglos{brace}, +@rglos{staff}, +@rglos{system}. + +ピアノ譜は @notation{ブレース} でつながれた 2 つの譜表として譜刻されます。@c +そのような譜表を譜刻することは @ref{複数の譜} での多声の例に@c +似ています。@c +しかしながら、今度は表記全体が @code{PianoStaff} の中に挿入されます: + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> +@end example + +小さな例を挙げます: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef "bass" c,,4 c' | e c | } + >> +} +@end lilypond + +ピアノ譜以外の譜表グループ化はオーケストラ譜向けには @code{\new GrandStaff} +で、ボーカル譜向けには @w{@code{\new ChoirStaff}} で導入されます。@c +これらの譜表グループはそれぞれタイプの異なるコンテキストを形成し、各システム +(訳者: 楽譜 1 行分のこと。ピアノ譜では右手と左手の 2 つの譜表ペアでの 1 行が +1 システムになります) の左端にブレースを付けて、@c +さらに、小節線の高さを制御します。 + + +@seealso +記譜法リファレンス: +@ruser{Keyboard and other multi-staff instruments}, +@ruser{譜を表示する} + + +@node 音符を組み合わせて和音にする +@subsection 音符を組み合わせて和音にする +@translationof Combining notes into chords + +@cindex chords (和音) +@cindex note durations in chords (和音の中での音符の演奏時間) + +@funindex < +@funindex > +@funindex < ... > + +音符を @code{<< ... >>} で囲んでそれらの音符が同時進行であることを@c +示すことによって、それらの音符を@notation{和音}として@c +組み合わせる方法について見てきました。@c +しかしながら、和音であることを示すための通常の方法は音符を < ... > (山括弧) +で囲みます。@c +和音の中にある音符はすべて同じ演奏時間でなければならず、@c +その演奏時間は山括弧を閉じた後に置かれなければならないということに@c +注意してください。 + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +和音は単一の音符とほとんど同じであると考えてください: +単一の音符に付け加えられるものはほとんどすべて和音にも付け加えられ、@c +付け加えるものはすべて山括弧の@emph{外}に付け加えられなければなりません。@c +例えば、あなたは連桁やタイなどのマークをコードに組み合わせることができます。@c +それらは山括弧の外側に置かれなければなりません。 + +@lilypond[verbatim,quote,relative=2] +r4 ~ 2 | +8[ ] \>[ ]\! | +r4 8.\p 16( 4-. ) | +@end lilypond + +@seealso +記譜法リファレンス: +@ruser{和音の音符} + + +@node 単一譜表での多声 +@subsection 単一譜表での多声 +@translationof Single staff polyphony + +@cindex polyphony (多声) +@cindex multiple voices (複数のボイス) +@cindex voices, more on one staff (1 つの譜表上に複数のボイス) +@cindex single staff polyphony (単一譜表の多声) +@cindex spacer rest (空白休符) +@cindex rest, spacer (空白休符) + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +LilyPond での多声音楽はまだ説明していないコンセプトを用いますので、@c +多声音楽についてここでは説明しません。@c +以下のセクションで多声音楽で用いるコンセプトを紹介し、@c +多声音楽について説明します。 + +@seealso +学習マニュアル: +@ref{音楽を保持するボイス} + +記譜法リファレンス: +@ruser{同時進行する音符} + +@ignore +異なる旋律が単一の譜に組み込まれる場合、それらは多声部として譜刻されます。@c +各声部はそれ自体の符幹 (符頭から上下に出る棒)、スラー、@c +連桁 (符幹と符幹を結ぶ横棒) を持ちます。@c +最上段の声部は符頭から上に伸びる符幹を持ち、@c +最下段の声部は下に伸びる符幹を持ちます。 + +そのような多声のパートを入力するには、各声部をシークエンスとして +(@w{@code{@{ ... @}}} を使って) 入力し、それらを @code{\\} で区切って@c +結合することで同時進行するように組み合わせます: + +@lilypond[verbatim,quote,relative=2] +<< + { a4 g2 f4~ f4 } \\ + { r4 g4 f2 f4 } +>> +@end lilypond + +多声部音楽を譜刻する場合、空白休符を使用すると都合が良いかもしれません: +それは譜刻されない休符です。@c +空白休符は一時的に演奏されない声部の空白期間を埋めるのに有用です。@c +今度は通常の休符 (@code{r}) の代わりに空白休符 (@code{s}) を使った@c +上と同じ例を示します: + +@lilypond[verbatim,quote,relative=2] +<< + { a4 g2 f4~ f4 } \\ + { s4 g4 f2 f4 } +>> +@end lilypond + +@noindent +さらに、これらの表記は任意にネストさせることができます。 + +@lilypond[verbatim,quote,relative=2] +<< + \new Staff << + { a4 g2 f4~ f4 } \\ + { s4 g4 f2 f4 } + >> + \new Staff << + \clef bass + { 1 ~ 4 } \\ + { e,,4 d e2 ~ e4} + >> +>> +@end lilypond + +@seealso +記譜法リファレンス: +@ruser{同時進行する音符} +@end ignore + + +@node 歌曲 +@section 歌曲 +@translationof Songs + +このセクションでは声楽とシンプルな歌曲譜についての紹介を行います。 + +@menu +* 簡単な歌曲を作成する:: +* 歌詞を旋律に揃える:: +* 複数の譜への歌詞:: +@end menu + + +@node 簡単な歌曲を作成する +@subsection 簡単な歌曲を作成する +@translationof Setting simple songs + +@cindex lyrics (歌詞) +@cindex songs (歌) + +@funindex \addlyrics +@funindex addlyrics + +音楽用語集: @rglos{lyrics} + +童謡の冒頭部分の旋律があります。@c +歌詞は @notation{Girls and boys come out to play} です: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +@code{\addlyrics} キーワードで組み合わせることによって、@c +@notation{歌詞} をこれらの音符にセットすることができます。@c +歌詞は音節ごとにスペースで区切って入力します。 + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } +>> +@end lilypond + +@warning{空白または改行によって最後の音節を閉じ波括弧と分けることが不可欠です。@c +そうしなければ、波括弧は音節の一部と見なされ、@c +原因の分かりづらいエラーを引き起こします。@c +@rprogram{見かけ上 ../ly/init.ly のエラーとなる} を参照してください。} + +二重の山括弧 @w{@code{<< ... >>}} が楽曲全体を囲っていて、@c +音楽と歌詞が同時進行することを示しています。 + + +@node 歌詞を旋律に揃える +@subsection 歌詞を旋律に揃える +@translationof Aligning lyrics to a melody + +@cindex melisma (メリスマ) +@cindex extender line (延長線) +@cindex hyphens (ハイフン) +@cindex underscore (アンダスコア) +@cindex lyrics, aligning (歌詞を揃える) +@cindex aligning lyrics (歌詞を揃える) +@cindex lyrics, multi-syllable words (歌詞の中で複数の音節を持つ単語) +@cindex words with multiple syllables in lyrics (歌詞の中で複数の音節を持つ単語) + +音楽用語集: @rglos{melisma}, @rglos{extender line} + +童謡の次の行は @notation{The moon doth shine as bright as day} です。@c +これを前の例に付け加えてみましょう: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +上の例のコードをコンパイルすると、コンソール出力にいくつかの警告が表示されます: + +@example +song.ly:12:29: warning: barcheck failed at: 5/8 + The | moon doth shine as + | bright as day; | +song.ly:12:46: warning: barcheck failed at: 3/8 + The | moon doth shine as | bright as day; + | +@end example + +これは小節チェックの有用性を示す良い例です。@c +今度は楽譜を見てください。@c +追加した歌詞は適切に音符に揃えられてはいません。@c +単語 @notation{shine} は 1 つの音符ではなく +2 つの音符に割り当てられるべきです。@c +これは @notation{メリスマ} と呼ばれ、@c +歌詞の音節 1 つを複数の音符に割り当てます。@c +音節を複数の音符に広げる方法はいくつかあります。@c +最も簡単な方法は割り当てられる音符にスラーを付けることです。@c +詳細は @ref{タイとスラー} を参照してください。 + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +今度は、単語は音符に対して正しく並んでいます。@c +しかしながら、@c +@notation{shine as} 上の音符に対する自動連桁は適当でないように見えます。@c +これを修正するために、手動連桁コマンドを挿入して自動連桁を@c +オーバライドします。@c +詳細は @ref{自動連桁と手動連桁} を参照してください。 + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +スラーを用いる方法のほかに、メリスマに含まれるべきである各音符に対応した@c +アンダスコア @code{_} を用いることによって@c +その歌詞がメリスマであるということを示すことができます: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +ある歌詞がいくつかの音符に亘って延長される場合や@c +単一の非常に長い音符に割り当てられる場合、@c +通常はその歌詞からその歌詞に対応しているすべての音符の下に@c +@notation{延長線} が描かれます。@c +延長線は 2 つのアンダスコア @code{__} で挿入します。@c +今度は、例として Purcell の @notation{Dido and Æeneas} から@c +最初の 3 小節目からを挙げます: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +今までの例には複数の音節を持つ単語はありませんでした。@c +通常、複数の音節を持つ単語は音節ごとに 1 つの音符に分割され、@c +音節間はハイフンで結ばれます。@c +ハイフンは 2 つのダッシュとして入力し、@c +その結果として音節の間にハイフンが描かれます。@c +今度の例では歌詞に複数の音節を持つ単語が含まれ、@c +我々が今まで歌詞を音符に揃える方法について学んだことがすべて含まれています。 + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +ある歌詞では -- 特にイタリア語では -- 反対のことが求められます: +複数の音節を 1 つの音符にセットします。@c +これは音節を単一のアンダスコア @code{_} (スペース無し) でリンクさせるか、@c +クォートで囲むことによって達成されます。@c +今度の例は Rossini の @notation{Figaro} からで、@c +@notation{Largo al factotum} の @notation{al} は +@notation{Largo} の @notation{go} と同じ音符で歌われなければなりません: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef "bass" + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + +@seealso +記譜法リファレンス: +@ruser{Vocal music} +@c 歌曲譜 + + +@node 複数の譜への歌詞 +@subsection 複数の譜への歌詞 +@translationof Lyrics to multiple staves + +@cindex lyrics and multiple staves (歌詞と複数の譜) +@cindex multiple staves and lyrics (複数の譜と歌詞) + +@code{\addlyrics} を用いた簡単なアプローチは歌詞を複数の譜表の下に置くために@c +使用することができます。@c +ここで、Handel の @notation{Judas Maccabæus} から例を挙げます: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + +この簡単な例よりも複雑な楽譜では、変数を使って楽譜構造を音符と歌詞から@c +分離したほうが良いです。@c +このことは @ref{変数を用いて楽曲を編成する} で議論されています。 + + +@seealso +記譜法リファレンス: +@ruser{Vocal music} +@c 歌曲譜 + + +@node 仕上げ +@section 仕上げ +@translationof Final touches + +このセクションはチュートリアルの最終セクションです。@c +単純な楽譜に仕上げを加える方法を示し、@c +このマニュアルの残りの部分についての紹介を行います。 + +@menu +* 変数を用いて楽曲を編成する:: +* タイトルを付け加える:: +* 絶対音符名:: +* このチュートリアルの後にすべきこと:: +@end menu + + +@node 変数を用いて楽曲を編成する +@subsection 変数を用いて楽曲を編成する +@translationof Organizing pieces with variables + +@cindex variables (変数) +@cindex variables, defining (変数を定義する) +@cindex identifiers (識別子) +@cindex macros (マクロ) +@cindex assigning variables (変数を割り当てる) +@cindex using variables (変数を使用する) +@cindex variables, using (変数を使用する) +@cindex variables, characters allowed in (変数で使用できる文字) +@cindex characters allowed in variables (変数で使用できる文字) + +これまで議論してきたすべての要素を組み合わせてより大きなファイルを作成すると、@c +音楽表記はずっと大きくなります。@c +多くの譜を持つ多声音楽では、入力ファイルはとても混乱しやすくなります。@c +@emph{変数} を使って混乱を避けることができます。 + +変数 (これは識別子やマクロとも言えます) を使うことによって、@c +音楽表記の複雑さを打破することができます。@c +変数は以下のように割り当てられます: + +@example +namedMusic = @{ @dots{} @} +@end example + +音楽表記 @code{namedMusic} の内容は名前の前にバックスラッシュを置くことによって +(@code{\namedMusic}、これはまさに LilyPond の標準コマンドと同様です) 後で@c +使用することができます。 + +@lilypond[verbatim,quote] +violin = \new Staff { + \relative c'' { + a4 b c b + } +} + +cello = \new Staff { + \relative c { + \clef "bass" + e2 d + } +} + +{ + << + \violin + \cello + >> +} +@end lilypond + +@noindent +変数の名前に使えるのはアルファベットだけであり、数字、アンダスコア、ダッシュを@c +使うことはできません。 + +変数はメインの音楽表記の @emph{前} に定義されていなければなりません。@c +しかしながら定義後は必要とされる場所で何度でも使用できます。@c +変数の定義後は、その変数を他の変数定義の中で使うことも可能であり、 +楽曲のある部分が何度もリピートしている場合に入力の手間を省くことができます。 + +@lilypond[verbatim,quote] +tripletA = \times 2/3 { c,8 e g } +barA = { \tripletA \tripletA \tripletA \tripletA } + +\relative c'' { + \barA \barA +} +@end lilypond + +変数を入力ファイルの中にある他の多くのオブジェクト タイプに対しても@c +使用できます。 +例えば以下のようにです: + +@example +width = 4.5\cm +name = "Wendy" +aFivePaper = \paper @{ paperheight = 21.0 \cm @} +@end example + +変数の内容次第では、変数は他の場所で使用することができます。@c +以下の例は上の例の変数を使用しています: + +@example +\paper @{ + \aFivePaper + line-width = \width +@} +@{ + c4^\name +@} +@end example + + +@node タイトルを付け加える +@subsection タイトルを付け加える +@translationof Adding titles + +@cindex title (タイトル) +@cindex headers (ヘッダ) +@cindex header block (ヘッダ ブロック) + +@funindex \header +@funindex header + +タイトル、作曲者、作品番号、それに類似の情報は +@code{\header} ブロックの中に挿入されます。@c +これはメインの音楽表記の外に存在します。@c +普通、@code{\header} ブロックはバージョン番号の下に置かれます。 + +@example +\version @w{"@version{}"} + +\header @{ + title = "Symphony" + composer = "Me" + opus = "Op. 9" +@} + +@{ + @dots{} music @dots{} +@} +@end example + +ファイルが処理されると、タイトルと作曲者は楽譜の上に譜刻されます。@c +タイトルについての更なる情報は、@ruser{Creating titles} を参照してください。 + + +@node 絶対音符名 +@subsection 絶対音符名 +@translationof Absolute note names + +@cindex note names (音符名) +@cindex note names, absolute (絶対音符名) +@cindex absolute mode (絶対モード) +@cindex absolute values for pitches (ピッチの絶対値) +@cindex pitches, absolute values (ピッチの絶対値) +@cindex absolute note names (絶対音符名) + +これまで我々は常にピッチを定義するのに @code{\relative} を使ってきました。@c +これはたいていの音楽を入力するのに最も容易な方法です。@c +しかしながら、ピッチを定義するための方法がもう一つ存在します: +絶対モードです。 + +あなたが @code{\relative} を省略した場合、LilyPond はすべてのピッチを@c +絶対値として扱います。@c +@code{c'} は常にミドル C を意味し、@code{b} は常にミドル C の 1 音下の音符を@c +意味し、@code{g,} は常にヘ音記号の譜表の最下段の譜線上にある音符を意味します。 + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +今度は 4 オクターブの音階があります: + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +ト音記号に旋律を書く場合は多くのクォート @code{'} 記号が使用されることが@c +見て取れます。@c +モーツァルトからの以下の楽譜の断片について考えてみます: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +これらすべてのクォート記号は入力ファイルを読みにくいものにして、@c +エラーの原因になります。@c +@code{\relative} を使うことで、上の例はずっと読みやすく、入力しやすくなります: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 | + b8. cis16 b8 d4 d8 | +} +@end lilypond + +@code{\relative} モードを使っているときにあなたがオクターブ記号 (@code{'} や +@code{,}) を付け間違えた場合、すぐにわかります +-- 多くの音符が間違ったオクターブに譜刻されます。@c +絶対モードを使っているときに付け間違いをした場合、@c +はっきりとせず、見つけにくいです。 + +しかしながら、絶対モードは大きな音程を持つ音楽に対しては有用であり、@c +LilyPond ファイルをコンピュータで生成する場合は非常に有用です。 + + +@node このチュートリアルの後にすべきこと +@subsection このチュートリアルの後にすべきこと +@translationof After the tutorial + +このチュートリアルを終えた後、あなたは楽譜を 1 つ、2 つ書いてみるべきです。@c +@ref{テンプレート} にある楽譜の 1 つに音符を付け加えることから始めてください。@c +あなたがこのチュートリアルではカバーされなかった記譜法を必要とする場合、@c +@ruser{音楽記譜法} で始まる記譜法リファレンスを参照してください。@c +あなたがテンプレートではカバーされていない楽器のアンサンブルのために@c +楽譜を書こうとする場合、@ref{テンプレートを拡張する} を参照してください。 + +あなたがいくつかの短い楽譜を書き終えた後は、@c +学習マニュアルの残りの部分 (3~5 章) を読んでください。@c +もちろん、今それらを読んでも何も問題はありません!@c +しかしながら、学習マニュアルの残りの部分はあなたが LilyPond 入力に@c +馴れていると仮定しています。@c +あなたはそれらの章を今すぐ一読し、もっと経験を積んだ後に読み直すことを@c +望むかもしれません。 + +このチュートリアルと学習マニュアルの残りの部分では、@c +各セクションの最後に @strong{参照} があり、他のセクションを参照してます: +初めて本書を読むときはこれらの参照を追うべきではありません。@c +あなたが学習マニュアルをすべて読み終えたとき、いくつかのセクションを読み返し、@c +さらに参照を追おうと思うかもしれません。 + +@ref{マニュアルの概要} をまだ読んでいないのなら、@c +それを @emph{読んでください}。@c +LilyPond についての情報は多いため、新しく LilyPond を始める人はしばしば、@c +必要な情報を得るためにどこを読むべきかわからないことがあります。@c +5 分間使ってマニュアルの概要を注意深く読めば、@c +あなたは何時間も見当違いの場所を読むフラストレーションを持たずに@c +済ますことができるでしょう! diff --git a/Documentation/ja/learning/fundamental.itely b/Documentation/ja/learning/fundamental.itely new file mode 100644 index 0000000000..7d9a6b84d9 --- /dev/null +++ b/Documentation/ja/learning/fundamental.itely @@ -0,0 +1,3325 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: c028761d49ac4820206806dbc58e9704a87b4a8 + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + +@node 基礎となるコンセプト +@chapter 基礎となるコンセプト +@translationof Fundamental concepts + +チュートリアルではシンプルなテキスト ファイルから美しい楽譜を譜刻する方法を@c +見てきました。@c +このセクションでは、同じように美しいがより複雑な楽譜を@c +作り出すのに必要とされるコンセプトとテクニックについて紹介します。 + +@menu +* LilyPond 入力ファイルの仕組み:: +* 音楽を保持するボイス:: +* コンテキストとエングラーバ:: +* テンプレートを拡張する:: +@end menu + + +@node LilyPond 入力ファイルの仕組み +@section LilyPond 入力ファイルの仕組み +@translationof How LilyPond input files work + +LilyPond の入力フォーマットは非常に自由な形式であり、@c +経験豊富なユーザにとってはファイルを構築する際の自由度が高いです。@c +しかしながら、この自由度が新しいユーザにとっては混乱の元になります。@c +このセクションではこの入力ファイルの構造についていくつか説明します。@c +しかしながら、簡潔さを保つためにいくつかの詳細については@c +目をつぶるかもしれません。@c +入力フォーマットについての完全な記述は、@ruser{File structure} を@c +参照してください。 + +@menu +* LilyPond ファイル構造の紹介:: +* Score は (単一の) 複合的な音楽表記:: +* 音楽表記をネストする:: +* ネストされない括弧とタイ:: +@end menu + + +@node LilyPond ファイル構造の紹介 +@subsection LilyPond ファイル構造の紹介 +@translationof Introduction to the LilyPond file structure + +@cindex input format (入力フォーマット) +@cindex file structure (ファイル構造) + +LilyPond 入力ファイルの基本例は以下のようなものです: + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...複合音楽表記...} % すべての音楽がここに入ります! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +基本パターンは本当にさまざまです。@c +しかしながら、この例はスタート地点として役に立ちます。 + +@funindex \book +@funindex book +@funindex \score +@funindex score +@cindex book +@cindex score + +これまで、あなたが見てきた例では @code{\score @{@}} コマンドを@c +使用していませんでした。@c +その理由は、あなたが LilyPond に与えたのが簡単な入力であった場合、@c +LilyPond が自動的に追加のコマンドを付け加えるからです。@c +LilyPond は以下のような入力: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +を以下を簡略表記したものとして扱います: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +言い換えると、入力が保持しているのが単一の音楽表記である場合、@c +LilyPond はまるでその音楽表記が上で示されたコマンドで包まれている@c +かのように解釈します。 + +@cindex implicit contexts (暗黙のコンテキスト) +@cindex contexts, implicit (暗黙のコンテキスト) + +@strong{一言警告!} LilyPond ドキュメントの中にある多くの例では、 +@code{\new Staff} と @code{\new Voice} コマンドは暗黙的に作成されるために@c +省略されています。@c +簡単な例ではそれでうまくいきますが、より複雑な例の場合 +-- 特に追加のコマンドが使用される場合 -- +コンテキストの暗黙的な作成は予想外の結果となる可能性があります。@c +多分、予期しない余分な譜が作成されるでしょう。@c +コンテキストを明示的に作成する方法は @ref{コンテキストとエングラーバ} で@c +説明されています。 + +@warning{数行以上の音楽を入力する場合、常に譜とボイスを明示的に@c +作成したほうが賢明です。} + +今度は最初の例に戻って、@code{\score} コマンドについて検証します。@c +他のことはデフォルトのままにしておきます。 + +@code{\score} ブロックは常にただ 1 つの音楽表記を@c +保持していなければなりません。@c +そして、その音楽表記は @code{\score} コマンドのすぐ後に@c +置かれなければなりません。@c +音楽表記は単一の音符である場合もありますし、以下のような@c +巨大な複合表記である場合もあるということを覚えておいてください: + +@example +@{ + \new StaffGroup << + @var{...ワーグナーのオペラの楽譜全体がここに入ります...} + >> +@} +@end example + +@noindent +すべては @code{@{ ... @}} の内部にあるため、@c +それは 1 つの音楽表記であるとカウントされます。 + +以前見てきたように、@code{\score} ブロックは他のものを含む可能性もあります。@c +例えば以下のように: + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex header +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi +@cindex header (ヘッダ) +@cindex layout (レイアウト) +@cindex midi + +@noindent +これら 3 つのコマンド -- @code{\header}, @code{\layout}, @code{\midi} -- は@c +特別なものであるということに注意してください: +バックスラッシュ (@code{@bs{}}) で始まる他の多くのコマンドとは異なり、@c +これらは音楽表記 @emph{ではなく}、何らかの音楽表記の一部でもありません。@c +そのため、これらは @code{\score} ブロックの中に置くこともできますし、@c +外部に置くこともできます。@c +実際、これらのコマンドは一般的に @code{\score} ブロックの外側に置かれます +-- 例えば、このセクションの最初の例のように @code{\header} は@c +しばしば @code{\score} コマンドの上に置かれます。 + +以前は見なかった他の 2 つのコマンドは @code{\layout @{ @}} と +@code{\midi @{ @}} です。@c +それらが上記のように記述された場合、LilyPond はそれぞれ譜刻された楽譜と +MIDI 出力を作り出します。@c +それらは記譜法リファレンスの @ruser{Score layout} と +@ruser{Creating MIDI files} で完全に記述されています。 + +@cindex scores, multiple (複数の Score) +@cindex book block, implicit (暗黙の book ブロック) +@cindex implicit book block (暗黙の book ブロック) +@funindex \book +@funindex book + +あなたは複数の @code{\score} ブロックを記述するかもしれません。@c +それらはそれぞれ別々の楽譜として扱われますが、それらは結合されて@c +単一の出力ファイルに収められます。@c +@code{\book} コマンドは必要ありません -- このコマンドは暗黙的に 1 つ@c +作成されます。@c +しかしながら、あなたが 1 つの @code{.ly} ファイルから別々に分かれた@c +出力ファイルを作成しようとするのなら、@c +それぞれのセクションを異なる出力ファイルに分けるために @code{\book} +コマンドが使用されます: +各 @code{\book} ブロックは別々の出力ファイルを作り出します。 + +要約: + +各 @code{\book} ブロックは別々の出力ファイル (つまり PDF ファイル) を@c +作成します。@c +あなたが明示的に @code{\book} コマンドを記述しなかった場合、@c +LilyPond は暗黙的に入力コードを @code{\book} ブロックで包み込みます。 + +各 @code{\score} ブロックは @code{\book} ブロック内部で@c +別々の音楽表記のチャンク (塊) となります。 + +@cindex layout block, effect of location (レイアウト ブロックの配置場所による影響) + +各 @code{\layout} ブロックはそのブロックを含んでいる @code{\score} ブロックや +@code{\book} ブロックに影響を与えます -- +つまり、ある @code{\score} ブロックの内部にある @code{\layout} ブロックは@c +その @code{\score} ブロックにだけ影響を与え、@code{\score} ブロックの@c +外部にある (それゆえ、明示的あるいは暗黙的に @code{\book} ブロックの中に@c +ある) @code{\layout} ブロックはその @code{\book} ブロックの@c +中にあるすべての @code{\score} に影響を与えます。 + +詳細は、@ruser{Multiple scores in a book} を参照してください。 + +@cindex variables (変数) + +もう一つの重要な簡略表記は変数を定義することです。@c +すべてのテンプレートがこれを使っています: + +@example +melody = \relative c' @{ + c4 a b c +@} + +\score @{ + \melody +@} +@end example + +LilyPond がこのファイルを見ると、@code{melody} の値 +(イコール記号の後にあるすべて) を記憶し、@c +@code{\melody} と記述された箇所すべてにその値を挿入します。@c +変数の名前について特別なことは何もありません +-- 変数名は @code{melody}, @code{global}, @code{keyTime}, @code{pianorighthand} +などとなります。@c +変数名はアルファベットだけで構成されていて、LilyPond コマンド名と@c +異なっている限りは、ほぼどんな名前でも使用できるということを@c +覚えておいてください。@c +詳細は、@ref{変数と関数を用いて入力の手間を省く} を参照してください。@c +変数名の厳密な制限については、@ruser{File structure} で詳述されています。 + + +@seealso +入力フォーマットの完全な定義は、@ruser{File structure} を参照してください。 + + +@node Score は (単一の) 複合的な音楽表記 +@subsection Score は (単一の) 複合的な音楽表記 +@translationof Score is a (single) compound musical expression + +@funindex \score +@funindex score +@cindex score +@cindex contents of a score block (score ブロックの内容) +@cindex score block, contents of (score ブロックの内容) +@cindex compound music expression (複合音楽表記) +@cindex music expression, compound (複合音楽表記) + +前のセクション -- @ref{LilyPond ファイル構造の紹介} -- で +LilyPond 入力ファイルの一般的な構造について見てきました。@c +しかしながら、我々は最も重要な部分を飛ばしてきたようです: +どうやって @code{\score} の後に記述するものを見つけ出すのでしょうか? + +我々はそのことを完全には飛ばしてきませんでした。@c +この大きな謎は簡単なことであり、謎でもなんでも@emph{ないのです}。@c +以下の行がこの謎についてすべてを説明しています: + +@quotation +@emph{@code{\score} ブロックは 1 つの複合音楽表記で始まらなくてはなりません。} +@end quotation + +@noindent +音楽表記と複合音楽表記が意味しているものを理解するには、チュートリアルの +@ref{音楽表記についての説明} を読み返すと役に立つかもしれません。@c +そこでは、小さな音楽表記 -- 音符から始めて、それから和音など -- から@c +大きな音楽表記を構築する方法を説明しています。@c +今度は、大きな音楽表記から始めます。@c +話を簡単にするために、例を歌手 1 人とピアノとします。@c +このアンサンブルでは @code{StaffGroup} は必要ありません。@c +@code{StaffGroup} はいくつかの譜をグループ化して左端に括弧を付けるだけですが、@c +我々は歌手 1 人とピアノ用の譜を必要としています。 + +@example +\score @{ + << + \new Staff = "singer" << + >> + \new PianoStaff = "piano" << + >> + >> + \layout @{ @} +@} +@end example + +ここで譜に名前を付けます -- @qq{singer} と @qq{piano} です。 +ここで名前を付ける必要は必ずしもありませんが、@c +一見して各譜が何なのか見て取れるので名前を付けておくべきです。 + +@ignore +@example +\score @{ + @{ % this brace begins the overall compound music expression + % この波括弧は複合音楽表記全体の開始点です + \new StaffGroup << + @var{...insert the whole score of a Wagner opera in here...} + @var{...ワーグナーのオペラの楽譜全体がここに入ります...} + >> + @} % this brace ends the overall compound music expression + % この波括弧は複合音楽表記全体の終了点です + \layout @{ @} +@} +@end example + +ワーグナーのオペラの長さはこのマニュアルの軽く 2 倍はあります。@c +そのため、歌手とピアノだけを加えることにします。@c +このアンサンブルでは複数の譜をまとめて左端に波括弧を付ける +@code{StaffGroup} は必要ありません。@c +そのため、それを削除します。@c +しかしながら、歌手とピアノが@emph{必要}です。 + +@example +\score @{ + << + \new Staff = "singer" << + >> + \new PianoStaff = "piano" << + >> + >> + \layout @{ @} +@} +@end example +@end ignore + +歌手とピアノが同時進行であることを示すために @code{@{ ... @}} の代わりに +@code{<< ... >>} を使用するということを思い出してください。@c +こうすることで、ボーカル パートはピアノ パートの上に表示されます。@c +上の例で歌手の譜が一続きの音楽表記を保持するだけであるのなら +@code{<< ... >>} を使う必要はありませんが、@c +譜が同時進行する複数の音楽表記 +-- 例えば、同時進行する 2 つの声部や、声部と歌詞です +-- を保持するのであれば必須となります。@c +我々は歌詞を持つ声部にしようとしているので、二重角括弧が必須です。@c +実際の音楽は後で付け加えるとして、@c +ここではいくつかのダミーの音符と歌詞を配置してみます。@c +歌詞の入力の仕方を忘れてしまったのなら、@c +@ref{簡単な歌曲を作成する} の @code{\addlyrics} を見直してください。 + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +更に詳細を加えていきます。@c +歌手の譜は @code{Voice} (LilyPond では、この用語は音符のセットを@c +参照するものであり、必ずしもボーカルの音符であるわけではありません +-- 例えば、一般にバイオリンは 1 つのボイスを演奏します) と歌詞を保持します。@c +さらに、ピアノの譜表は上部譜表(右手) と下部譜 (左手) を保持します。 + +この段階で、音符の入力を開始することができます。@c +@code{\new Voice = "vocal"} の後の波括弧の中に、以下を書き加えることができます: + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +しかしながら、そのようにすると、@code{\score} セクションは非常に長くなり、@c +何が起こるのか理解しにくくなります。@c +そのため、直接音符を付け加える代わりに変数を使用しましょう。@c +前のセクションで変数についての紹介を行いました。@c +覚えていますよね?@c +@code{text} 変数の内容が間違いなく歌詞と解釈されるよう、@c +内容の前に @code{\lyricmode} を記述します。@c +@code{\addlyrics} と同様に、これは入力モードを歌詞に切替間す。@c +@code{\lyricmode} を記述しなければ、LilyPond は内容を音符と解釈しようとして@c +エラーを引き起こします。 +(他にもいくつかの入力モードがあります。@ruser{Input modes} を参照してください。) + +では、いくつかの音符を加えて、左手にはヘ音記号を加えます。@c +これで、実際の楽譜の一部ができます: + +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e } + +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond + +@code{\score} セクションを書いている (あるいは読んでいる) とき、@c +ゆっくりと注意深く進めてください。@c +外側のレベルから始めて、それから内部の細かな部分に取り組んでください。@c +さらに、きちんとインデントを入れると非常に役に立ちます +-- これは、テキスト エディタの中で同じレベルにある各要素は@c +同じ水平位置から始まるということを保証します。 + + +@seealso +記譜法リファレンス: @ruser{Structure of a score} + + +@node 音楽表記をネストする +@subsection 音楽表記をネストする +@translationof Nesting music expressions + +@cindex staves, temporary (一時的な譜) +@cindex temporary staves (一時的な譜) +@cindex ossias (オッシア) + +すべての譜を開始時に宣言することは必須ではありません。@c +譜はどこででも臨時に導入される可能性があります。@c +これはオッシアを作成する際に特に有用です -- @rglos{ossia} を参照してください。@c +ここで、3 つの音符に対して臨時に新しい譜を導入する方法を示す@c +ちょっとした例を挙げます: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +音部記号のサイズは音部変更後に譜刻される音部記号のサイズ +-- 行の開始点での音部記号よりも少し小さい +-- と同じであるということに注意してください。@c +これは行の途中で譜刻される音部記号全般に言えることです。 + +@cindex staff, positioning (譜表の配置) + +オッシアは以下のように譜の上に置かれるかもしれません: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } { f8 f c } + >> + r4 | + } +} +@end lilypond + +この例は後で説明される @code{\with} を使用しています。@c +このコマンドは単一の譜のデフォルトの振る舞いを変更することを意味します。@c +ここでは、このコマンドは新しい譜をデフォルトの位置 (@qq{main} と@c +呼ばれている譜の下) ではなく、上に置くべきであると言っています。 + + +@seealso +オッシアはしばしば音部記号や拍子記号無しで描かれ、@c +通常は小さなフォントで描かれます。@c +これらはまだ紹介されていない追加のコマンドを必要とします。@c +@ref{オブジェクトのサイズ} と @ruser{オッシア譜} を参照してください。 + + +@node ネストされない括弧とタイ +@subsection ネストされない括弧とタイ +@translationof On the un-nestedness of brackets and ties + +@cindex brackets, nesting (括弧をネストする) +@cindex bracket types (括弧のタイプ) +@cindex brackets, enclosing vs. marking (囲みの括弧 vs. マークの括弧) + +これまでに LilyPond への入力ファイルを書く際に使用する括弧と@c +括弧のような構成物にはいくつかの種類があるということを見てきました。@c +これらは異なる規則 -- 最初は混乱を引き起こす可能性があります -- に従います。@c +規則についての説明を行う前に、@c +括弧と括弧のような構成物の種類を再確認してみましょう。 + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem 括弧のタイプ + @tab 機能 +@item @code{@{ .. @}} + @tab 一続きの音楽を囲みます +@item @code{< .. >} + @tab 和音となる音符を囲みます +@item @code{<< .. >>} + @tab 同時進行する音楽表記を囲みます +@item @code{( .. )} + @tab スラーの開始点と終了点を意味します +@item @code{\( .. \)} + @tab フレージング スラーの開始点と終了点を意味します +@item @code{[ .. ]} + @tab 手動連桁の開始点と終了点を意味します +@end multitable + +こららに対して、音符の間や音符をまたがって線を生成する他の構文を@c +付け加えるべきです: タイ (チルド @code{~} によって記述されます)、@c +連符 (@code{\times x/y @{..@}} として記述されます)、@c +グレイス ノート (@code{\grace@{..@}} として記述されます) です。 + +LilyPond 以外では、種類の異なる括弧が適切にネストされること +-- @code{[ @{ ( .. ) @} ]} のように -- +が一般的な使い方であり、@c +括弧の終わりの順序は正確に括弧の始まりの順序と逆になります。@c +このことは上記の表で @q{囲みます} という言葉で記述されている +3 種類の括弧に対しては@strong{必須}となります +-- それらは適切にネストされなければなりません。@c +しかしながら、残りの括弧のような構成物 +-- 上記の表で @q{意味します} という言葉で@c +記述されいるものと、タイ、連符で使用されるもの -- +はいかなる括弧ともネストされる必要は @strong{ありません}。@c +実際、これらは何かを囲むという意味では括弧ではありません +-- それらは単に何かが始まる場所、終わる場所を示すためのマークです。 + +そのため、例えばフレージング スラーは手動で挿入される連桁の前に開始して、@c +その手動連桁の前に終わる可能性もあります -- たぶん音楽的では@c +ないかもしれませんが、可能性はあります: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] + { g8\( a b[ c b\) a] } +@end lilypond + +一般に、種類の異なる括弧、括弧のような構成物、@c +それに連符、タイ、装飾小音符の囲みは自由に組み合わせることができます。@c +以下の例では、連桁は連符の中にまで伸びていて (行 1)、@c +スラーは連符の中にまで伸びていて (行 2)、@c +連桁とスラーが連符の中にまで伸びていて (行 3)、@c +タイが 2 つの連符にまたがっていて、@c +さらにフレージング スラーが連符の外にまで伸びています (行 3 と 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 + + +@node 音楽を保持するボイス +@section 音楽を保持するボイス +@translationof Voices contain music + +歌手は歌うボイスを必要とし、@c +LilyPond も歌う (演奏する) ボイスを必要とします。@c +楽譜の中にあるすべての楽器に対する実際の音楽はボイスの中に保持されます +-- このことは LilyPond すべてのコンセプトの中での最も基礎的なことです。 + +@menu +* 私はボイスを聴いている:: +* ボイスを明示的にインスタンス化する:: +* ボイスとボーカル:: +@end menu + + +@node 私はボイスを聴いている +@subsection 私はボイスを聴いている +@translationof I'm hearing Voices + +@cindex polyphony (多声) +@cindex layers (レイヤ) +@cindex multiple voices (複数のボイス) +@cindex voices, multiple (複数のボイス) +@cindex Voice context (Voice コンテキスト) +@cindex context, Voice (Voice コンテキスト) +@cindex simultaneous music (同時進行する音楽) +@cindex music, simultaneous (同時進行する音楽) +@cindex concurrent music (並列な音楽) +@cindex music, concurrent (並列な音楽) +@cindex voices vs. chords (ボイス vs. 和音) +@cindex chords vs. voices (和音 vs. ボイス) + +LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、最も内部にあるレイヤは +@q{ボイス コンテキスト} または縮めて単に @q{ボイス} と呼ばれます。@c +ボイスはときどき他の記譜法パッケージの中で @q{レイヤ} と呼ばれます。 + +実際、ボイス レイヤまたはコンテキストは音楽を保持することができる@c +唯一のものです。@c +ボイス コンテキストが明示的に宣言されていない場合、この章の始めで@c +見てきたようにボイス コンテキストが 1 つ自動的に生成されます。@c +オーボエなどといった楽器は同時に 1 つの音符だけを演奏できます。@c +そのような楽器のために書かれた音楽は単声であり、ボイスを 1 つだけを@c +必要とします。@c +ピアノのように同時に複数の音符を演奏することができる楽器はしばしば、@c +それらが演奏することのできる同時進行の異なる音符やリズムを@c +エンコードするために、複数のボイスを必要とします。 + +もちろん、単一のボイスは和音の中で多くの音符を保持することができます。@c +それでは、複数のボイスが実際に必要とされるのはどんな場合なのでしょうか?@c +まずは、4 つの和音を持つ以下の例を見てください: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +この例は単一の山括弧からなる和音記号 @code{< ... >} を使って@c +表記することができ、必要とされるボイスは 1 つだけです。@c +しかしながら、F シャープが A に移行する際に、F シャープは実際には +8 分音符であり、そのあとに 8 分音符の G が続くとしたらどうでしょうか?@c +そのような場合、同時に開始されるが演奏時間が異なる 2 つの音符を@c +持つことになります: 4 分音符の D と 8 分音符の F シャープです。@c +これらの音符をどのように記述すればよいのでしょうか?@c +これらの音符は和音として記述することはできません。@c +なぜなら、和音の中の音符はすべて同じ演奏時間でなければならないからです。@c +そして、それらの音符は同時に開始しなければならないので、2 つのシーケンシャルな +(連続した) 音符として記述することもできません。@c +この場合は 2 つのボイスが必要となります。 + +上記のことが LilyPond 入力構文でどのように達成されるのかを見てみましょう。 + +@funindex << \\ >> +@funindex \\ + +1 つの譜に複数のボイスがある楽譜を入力する最も簡単な方法は、@c +各ボイスをシーケンスに (続けて) 入力し +(各ボイスを @code{@{...@}} の中に入れます)、@c +それらのボイスを @code{<<...>>} を使って同時進行するよう組み合わせます。@c +さらに、各断片は、それぞれが別の断片であることを示すために、@c +ダブル バックスラッシュ @code{\\} で区切られなければなりません。@c +ダブル バックスラッシュが無ければ、すべての音符は単一のボイスの中に挿入され、@c +通常はエラーとなります。@c +このテクニックは、大部分が単声であり、@c +時々短い部分で多声になる楽曲に特に適しています。 + +以下では、上記の例の和音を 2 つのボイスに分け、経過音とスラーを付け加えています: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +この例では 2 番目のボイスの符幹が下向きになっていることに気付いてください。 + +今度はもう 1 つ簡単な例を挙げてみます: + + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | +<< { a2. r4 } \\ { fis2. s4 } >> | +@end lilypond + +各小節で別々に @code{<< \\ >>} 構造を使用する必要はありません。@c +各小節に音符が少ししかないような音楽の場合、@c +このレイアウトはコードの可読性を良くするのに役立ちます。@c +しかしながら、各小節に多くの音符がある場合、@c +以下のようにボイス毎に分離した方が良いかもしれません: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +@cindex voices, naming (ボイスに名前を付ける) +@cindex voices crossing brackets (括弧をまたがるボイス) +@cindex slurs crossing brackets (括弧をまたがるスラー) +@cindex ties crossing brackest (括弧をまたがるタイ) + +この例にあるボイスは 2 つだけです。@c +しかしながら、これと同じ構成にもっと多くのバック スラッシュを@c +付け加えることによって、3 つかそれ以上のボイスを持たせることが可能です。 + +ボイス コンテキストは @code{"1"}, @code{"2"} などの名前を持ちます。@c +各コンテキストの中では、スラー、符幹、タイ、強弱記号などの@c +垂直方向の向きは適切にセットされます。 + +@lilypond[quote,verbatim,fragment] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8 ~ } >> | + << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | +} +@end lilypond + +これらのボイスはすべてメインのボイスからは分かれています。@c +メインのボイスの音符は@code{<< .. >>} 構造の外にあるからです。@c +この @code{<< .. >>} 構造を @emph{同時進行構造} と呼ぶことにしましょう。@c +スラーとタイは同じボイス内にある音符だけをつなぎます。@c +そのため、スラーとタイは同時進行構造を出たり入ったりすることはありません。@c +反対に、同じ譜上にある個々の同時進行構造で、@c +平行の位置にあるボイスは同じボイスになります。@c +さらに、その他のボイス関連プロパティは同時進行構造をまたがって持ち越されます。@c +ここで、上記と同じ例で各ボイスに対して異なる色と符頭を割り当ててみます。@c +あるボイスでの変更は他のボイスに影響を与えませんが、@c +その後に続く同じボイス (訳者: 平行位置にあるボイス) で@c +その変更が維持されることに注意してください。@c +さらに、タイでつながれた音符は、同じボイスとなる 2 つの同時進行構造に@c +またがって分かれるかもしれないということに注意してください。 + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +コマンド @code{\voiceXXXStyle} は主にこのマニュアルのような教育目的の@c +ドキュメントで使用することを意図したものです。@c +このコマンドは、各ボイスが容易に見分けられるように、符頭、符幹、連桁の色、@c +それに符頭のスタイルを変更します。@c +ボイス 1 は赤でダイアモンドの符頭を持つようにセットされ、@c +ボイス 2 は青で三角形の符頭を、ボイス 3 は緑で×付きの円を、@c +ボイス 4 (ここでは使用されていません) はマゼンダの×の符頭を持つように@c +セットされます。@c +@code{\voiceNeutralStyle} (これもここでは使用されていません) は@c +符頭のスタイルをデフォルトに戻します。@c +後ほど、ユーザがこのようなコマンドを作成するための方法を見ていきます。@c +@ref{オブジェクトの可視性と色} と @ref{調整のために変数を使用する} +を参照してください。 + +@cindex polyphony and relative note entry (多声と相対音符入力) +@cindex relative note entry and polyphony (相対音符入力と多声) + +多声部は @code{\relative @{ @}} ブロック内の音符の相対関係を変えません。@c +各音符は直前の音符あるいは直前の和音の最初の音符との相対関係で計算されます。@c +そのため、以下の例では + +@example +\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} +@end example + +@noindent +@code{noteB} は @code{noteA} との相対関係で決まり @* +@code{noteC} は @code{noteA} ではなく @code{noteB} との相対関係で決まり @* +@code{noteD} は @code{noteA} や @code{noteC} ではなく +@code{noteC} との相対関係で決まり @* +@code{noteE} は @code{noteA} ではなく @code{noteD} との相対関係で決まります。 + +各ボイスの中にある音符の音程がボイスごとに大きく離れている場合、@c +各ボイスの始めに @code{\relative} コマンドを置くと明瞭になるかもしれません: + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +@bs{}@bs{} + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +最後に、もっと複雑な楽曲の中にあるボイスを分析してみましょう。@c +以下は、ショパンの Deux Nocturnes, Op 32 の 2 番の最初の 2 小節です。@c +この例は、記譜を行うためのテクニックをいくつか示すために、@c +本章の後の方と次の章で使用されます。@c +ですから、今はコードの中にある意味不明に見えるものは無視して、@c +音楽とボイスだけに注目してください -- 込み入った内容は後ほど説明します。 + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +符幹の向きはしばしば 2 つの同時進行する旋律ラインのつながりを示すために@c +使用されます。@c +ここでは、一番上の音符の符幹はすべて上向きであり、@c +下の方にある音符の符幹はすべて下向きです。@c +これは、複数のボイスが必要とされているということを示す最初の兆候です。 + +しかしながら、複数のボイスが実際に必要とされるのは、@c +同時に始まる音符が異なる演奏時間を持つ場合です。@c +最初の小節の 3 拍目を見てください。@c +A フラットは付点 4 分音符であり、F は 4 分音符、D フラットは半音符です。@c +これらの音符を和音として記述することはできません。@c +なぜなら、和音の中の音符はすべて同じ演奏時間でなければならないからです。@c +これらの音符をシーケンシャルな (連続する) 音符として記述することもできません。@c +なぜなら、これらの音符は同時に始まらなければならないからです。@c +この箇所では 3 つのボイスが必要となり、以下に示すように一般的には@c +この小節全体を 3 つのボイスで記述します。@c +そこでは、3 つのボイスに対して異なる符頭と色を割り当てています。@c +もう一度繰り返しますが、この例のコードのことは後ほど説明しますので、@c +理解できないことは無視してください。 + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +この音楽のコードをゼロから記述してみましょう。@c +これから見ていくように、いくつかの問題に遭遇します。@c +すでに学んだように、最初の小節の音楽を 3 つのボイスに分けて記述するために +@code{<< \\ >>} 構造を使用します: + +@c ignore +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } + >> + 1 +} +@end lilypond + +@cindex stem down (下向きの符幹) +@cindex voices and stem directions (ボイスと符幹の向き) +@cindex stem directions and voices (符幹の向きとボイス) +@cindex stem up (上向きの符幹) + +符幹の向きは自動的に割り当てられ、奇数番号のボイスが上向きの符幹、@c +偶数番号のボイスが下向きの符幹を持ちます。@c +ボイス 1 と 2 の符幹は正しいのですが、@c +ボイス 3 の符幹はここでは下向きになるべきです。@c +ボイス 3 を省略して音楽をボイス 4 に記述することによって修正できます。@c +ボイス 3 を省略するには、@code{\\} を 2 つ記述します: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des2 } + >> | + 1 | +} +@end lilypond + +@noindent +これにより符幹の向きが修正されました。@c +しかしながら、@c +複数のボイスを持つ場合にしばしば発生する問題に遭遇してしまいました +-- あるボイスの中にある音符の符幹が他のボイスの中にある符頭と衝突しています。@c +音符をレイアウトするときに、LilyPond は 2 つのボイスの符幹の向きを@c +反対にすることによって 2 つのボイスの音符や和音が@c +同じ垂直方向の音符列に位置することを可能にします。@c +しかしながら、3 番目や 4 番目のボイスは符頭の衝突を避けるために@c +必要があれば移動させられます。@c +これは普通はうまくいきますが、この例では一番下のボイスの音符は@c +デフォルトの状態では明らかにうまくいっていません。@c +LilyPond は音符の水平方向位置を調節するためにいくつかの手段を提供します。@c +我々はまだこの問題を修正するための方法を見ていく準備が整っていないので、@c +この問題は後に残しておくことにします +-- @ref{表記の重なりを修正する} の @code{force-hshift} プロパティを@c +参照してください。 + + +@seealso +記譜法リファレンス: +@ruser{複数のボイス} + + +@node ボイスを明示的にインスタンス化する +@subsection ボイスを明示的にインスタンス化する +@translationof Explicitly instantiating voices + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex voice contexts, creating (ボイス コンテキストを作成する) + +多声部音楽を作成するためにボイス コンテキストを手動で +@code{<< >>} ブロックの中に作成することもできます。@c +符幹、スラーなどの向きを示すために +@code{\voiceOne} ... @code{\voiceFour} を使用します。@c +この手法は各ボイスを別々にして、より記述的な名前を与えることを可能にするため、@c +長い楽譜ではわかりやすいものになります。 + +本質的には、前のセクションで使用した構造 @code{<< \\ >>}: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +は以下と等価です: + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +上記の両方ともが以下の楽譜を生成します: + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex voices, reverting to single (単一のボイスに戻す) +@cindex reverting to a single voice (単一のボイスに戻す) + +@code{\voiceXXX} コマンドは符幹、スラー、タイ、アーティキュレーション、@c +テキストの注釈、付点音符の付点、運指記号の向きをセットします。@c +@code{\voiceOne} と @code{\voiceThree} はこれらのオブジェクトを上向きにし、@c +一方の @code{\voiceTwo} と @code{\voiceFour} は下向きにします。@c +さらに、符頭の衝突を避ける必要がある場合、これらのコマンドは@c +各ボイスに対して水平方向のシフトを発生させます。@c +コマンド @code{\oneVoice} は設定を単一のボイスの場合の通常値に戻します。 + +いくつかの簡単な例で、@code{\oneVoice}, @code{\voiceOne}, @code{\voiceTwo} が@c +マークアップ、タイ、スラー、強弱記号に与える影響を見ていきましょう: + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +今度は、前のセクションの例を使って同じ多声部音楽のパッセージを +3 つの異なる方法で表記する例を見ていきます。@c +それぞれ異なる状況で利点があります。 + +1 つはメイン ボイスに属する @code{<< >>} の内部に直接表記を記述する方法です +(しかしながら、音符は @code{<< \\ >>} 構造の中に置かれては@strong{いません})。@c +これはメイン ボイスの途中で追加のボイスが現れる場合に有用です。@c +ここでは例にさらに調整を加えます。@c +赤のダイアモンド形の音符はメイン メロディが単一のボイス コンテキストに@c +なっていて、その上にフレージング スラーを描くことができるということを@c +示しています。 + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b c2 | + } + >> +} +@end lilypond + +@cindex nesting music expressions (音楽表記をネストさせる) +@cindex nesting simultaneous constructs (同時進行構造をネストさせる) +@cindex nesting voices (ボイスをネストさせる) +@cindex voices, temporary (一時的なボイス) +@cindex voices, nesting (ボイスをネストさせる) + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ | + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b c2 | + } + >> + } + >> +} +@end lilypond + +@cindex spacing notes (空白音符) + +新しいボイスを一時的にネストさせる手法は音楽のほんの一部だけが多声である場合に@c +有用です。@c +しかしながら、楽譜全体が多声である場合、@c +一貫して複数のボイスを使用した方がわかりやすくなります。@c +ボイスが無音の場所を飛ばすには以下のように空白音符を使用します: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b c2 | + } +>> +@end lilypond + + +@subsubheading 音符列 +@c Note columns + +@cindex note column (音符列) +@cindex note collisions (音符の衝突) +@cindex collisions, notes (音符の衝突) +@cindex shift commands (シフト コマンド) +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +和音の中で小さな間隔で置かれる音符、@c +あるいは異なるボイスで同時に発生する音符は、@c +符頭が重なるのを避けるために 2 列、時にはそれ以上の列に割り振られます。@c +これらの列は音符列と呼ばれます。@c +それぞれのボイスに対して別々の列が存在し、符頭の衝突が起こる場合は@c +ボイスごとのシフトが適用されます。@c +これは上の例でも見ることができます。@c +2 小節目でボイス 2 の C はボイス 1 の D との関係で右にシフトされていて、@c +最後の和音でボイス 3 の C も他の音符との関係で右にシフトされています。 + +@code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, それに @code{\shiftOff} +コマンドは、衝突が起こる場合に音符や和音をシフトさせる度合いを指定します。@c +デフォルトでは、外側のボイス (通常はボイス 1 と 2) には @code{\shiftOff} が@c +指定されていて、内側のボイス (ボイス 3 と 4) には @code{\shiftOn} が@c +指定されています。@c +シフトが適用される場合、ボイス 1 と 3 は右にシフトされ、ボイス 2 と 4は@c +左にシフトされます。 + +@code{\shiftOnn} と @code{\shiftOnnn} はさらなるシフト レベルを@c +定義するものであり、複雑な状況での衝突を解決するために@c +一時的に指定されるかもしれません -- +@ref{実際の音楽からの例} を参照してください。 + +ある音符列は上向きの符幹を持つボイスからの音符 (あるいは和音) を 1 つだけ、@c +下向きの符幹を持つボイスからの音符 (あるいは和音) を 1 つだけ@c +保持することができます。@c +同じ向きの符幹を持つ 2 つのボイスからの音符が同じ位置に置かれ、両方のボイスに@c +シフトが指定されていない、あるいは同じシフトが指定されている場合、@c +エラー メッセージ @qq{Too many clashing note columns} (音符が多すぎて音符列で@c +衝突が起こっています) が生成されます。 + + +@seealso +記譜法リファレンス: +@ruser{複数のボイス} + + +@node ボイスとボーカル +@subsection ボイスとボーカル +@translationof Voices and vocals + +声楽には特別な困難があります: +2 つの表記 -- 音符と歌詞 -- を組み合わせる必要があります。 + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics context, creating (歌詞コンテキストを作成する) +@cindex lyrics, linking to voice (歌詞をボイスにリンクさせる) + +すでに @code{\addlyrics@{@}} コマンドを見てきました。@c +これは簡単な楽譜であればうまく処理できます。@c +しかしながら、この方法では限界があります。@c +より複雑な音楽では、@code{\new Lyrics} を使って歌詞を +@code{Lyrics} コンテキストに取り込み、ボイスに割り当ている名前を使って +@code{\lyricsto@{@}} でその歌詞を明示的に音符にリンクさせます。 + +@lilypond[quote,verbatim] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +歌詞は @code{Staff} コンテキスト@emph{ではなく} @code{Voice} コンテキストに@c +リンクさせなければならないということに注意してください。@c +このため、@code{Staff} コンテキストと @code{Voice} コンテキストを@c +明示的に作成する必要があります。 + +@cindex lyrics and beaming (歌詞と連桁) +@cindex beaming and lyrics (連桁と歌詞) +@funindex \autoBeamOff +@funindex autoBeamOff + +LilyPond がデフォルトで使用する自動連桁は楽器だけの音楽では@c +うまく機能しますが、歌詞を持つ音楽ではそれほどうまく機能しません。@c +そこでは連桁はまったく必要ないか、歌詞のメリスマ (訳者注: 歌詞の 1 音節に@c +対して複数の音符を割り当てること) を示すために使用されるかのどちらかです。@c +上の例では、自動連桁を Off にするためにコマンド @code{\autoBeamOff} を@c +使用しています。 + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode +@cindex vocal score structure (ボーカル譜構造) +@cindex choir staff + +以前使用した Judas Maccabæus からの例を再度使用して、@c +より自由度の高い方法を示します。@c +まず、楽譜の内容を変数に振り直し、音楽と歌詞を譜表構造から分離させます。@c +さらに @code{ChoirStaff} ブラケットを導入します。@c +歌詞自体は、音楽ではなく歌詞として解釈されることを保証するために、@c +@code{\lyricsmode} で導入されなければなりません。 + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +これはすべての声楽譜の基本的な構造です。@c +必要に応じてさらに多くの譜が追加されるかもしれませんし、さらに多くのボイスが@c +譜に追加されるかもしれませんし、さらに多くの歌詞 (原文: verse、@c +各ボイスに対する歌詞、あるいは、歌詞の 1 番、2 番のことを指すと思われる) が@c +歌詞に追加されるかもしれません。@c +音楽部分が長くなりすぎた場合は、音楽を保持している変数を容易に別のファイルに@c +置くことができます。 + +@cindex hymn structure (賛美歌構造) +@cindex SATB structure (SATB 構造) +@cindex vocal scores with multiple verses (複数のボーカル譜) +@cindex multiple vocal verses +@cindex verses, multiple vocal + +ここで、例として 4 つの歌詞 -- それぞれが SATB (ソプラノ、アルト、テナー、バス) +に対してセットされている -- を持つ賛美歌の最初の 1 行目を取り上げます。@c +この歌の場合、4 つのパートに対する歌詞の言葉は同じです。@c +変数を使用して音楽記譜と歌詞の言葉を譜表構造から分離させている手法に@c +注意してください。@c +さらに、 @q{keyTime} と呼ぶことにした変数が、2 つの譜で使用される@c +いくつかのコマンドを保持するために、使用されていることにも注意してください。@c +他の例では、この変数はしばしば @q{global} と呼ばれます。 + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@seealso +記譜法リファレンス: @ruser{Vocal music} +@c 声楽 + + +@node コンテキストとエングラーバ +@section コンテキストとエングラーバ +@translationof Contexts and engravers + +これまでに、コンテキストとエングラーバについて簡単に言及してきました。@c +ここでは、これらのコンセプトをより詳細に見ていくことにします。@c +なぜなら、これらは LilyPond 出力をうまく調節するのに重要だからです。 + +@menu +* コンテキストの説明:: +* コンテキストを作成する:: +* エングラーバの説明:: +* コンテキスト プロパティを変更する:: +* エングラーバを追加 / 削除する:: +@end menu + + +@node コンテキストの説明 +@subsection コンテキストの説明 +@translationof Contexts explained + +@cindex contexts explained (コンテキストの説明) + +音楽が譜刻されるとき、入力ファイルでははっきりとは現れてこない多くの@c +記譜要素を出力に追加しなければなりません。@c +例えば、以下の例で入力と出力を比較してください: + +@lilypond[quote,verbatim,relative=2] +cis4 cis2. | a4 a2. | +@end lilypond + +この入力は内容がやや乏しいですが、出力では小節線、臨時記号、音部記号、@c +拍子記号が追加されています。@c +LilyPond が入力を@emph{解釈}するとき、音楽情報は時系列に調べられます。@c +これは楽譜を左から右へ読むのと似ています。@c +入力を読み込んでいる間、プログラムは小節の境目となる場所と明示的な臨時記号を@c +必要とするピッチを覚えています。@c +この情報はいくつかのレベルで持続されなければなりません。@c +例えば、臨時記号の効果は単一の譜表に制限されますが、@c +小節線は楽譜全体に亘って同調されなければなりません。 + +LilyPond 内部では、これらの規則と情報ビットは@emph{コンテキスト}に@c +グループ化されます。@c +すでに @code{Voice} コンテキストを見てきました。@c +他にも、@code{Staff} コンテキストと @code{Score} コンテキストがあります。@c +コンテキストは、楽譜の階層構造を反映するために、階層構造になっています。@c +例えば: @code{Staff} コンテキストは多くの @code{Voice} コンテキストを@c +保持することができ、@code{Score} コンテキストは@c +多くの @code{Staff} コンテキストを保持することができます。 + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +各コンテキストは、いくつかの記譜オブジェクトを作成し、関連プロパティを@c +維持しながら、いくつかの記譜規則を施行する責任があります。@c +例えば、@code{Voice} コンテキストは臨時記号を作り出すかもしれず、@c +そうした場合 @code{Staff} コンテキストはその小節の残りの部分で臨時記号を@c +表示したり隠したりするための規則を維持します。 + +他の例としては、小節線の同調はデフォルトでは @code{Score} コンテキストが@c +扱います。@c +しかしながら、いくつかの音楽では小節線を同調させたくない場合もあります -- +4/4 拍子と 3/4 拍子の多声の楽譜といった場合です。@c +そのようなケースでは、@code{Score} と @code{Staff} コンテキストの@c +デフォルト設定を変更しなければなりません。 + +非常にシンプルな楽譜では、コンテキストは暗黙的に作成され、@c +あなたはそれらに気づく必要もありません。@c +複数の譜表を持つようなより大きな楽曲では、あなたが必要としているだけの譜を@c +手に入れられるよう、さらに、それらの譜が正しい順序で並ぶことを保証するために、@c +コンテキストを明示的に作成する必要があります。@c +特殊な記譜法を持つ楽曲を譜刻するには、通常は既存のコンテキストを変更します。@c +あるいは完全に新しいコンテキストを定義することさえあります。 + +@code{Score}, @code{Staff}, @code{Voice} コンテキストに加えて、@c +@code{PianoStaff} や @code{ChoirStaff} コンテキストといった譜表グループを@c +制御するための、楽譜レベルと譜表レベルの間にあるコンテキストがあります。@c +さらに、代替の譜表コンテキストとボイスコンテキストがあり、歌詞、打楽器、@c +フレットボード (訳者: 弦楽器の一種。フレットでウィキぺディアを参照)、@c +通奏低音 (数字付き低音、原文: figured bass) などのためのコンテキストがあります。 + +すべてのコンテキスト タイプの名前は 1 つ、あるいは複数の単語からなります。@c +各単語の最初の文字は大文字であり、前の単語のすぐあとに次の単語が続きます。@c +ハイフンやアンダスコアは使いません。@c +つまり @code{GregorianTranscriptionStaff} といった具合です。 + + +@seealso +記譜法リファレンス: @ruser{Contexts explained} +@c コンテキストの説明 + + +@node コンテキストを作成する +@subsection コンテキストを作成する +@translationof Creating contexts + +@funindex \new +@funindex new +@cindex new contexts (新しいコンテキスト) +@cindex creating contexts (コンテキストを作成する) +@cindex contexts, creating (コンテキストを作成する) + +入力ファイルの中で、@code{\score} コマンドによって導入される +score ブロックは単一の音楽表記とそれに関連する出力定義 +(@code{\layout} ブロックあるいは @code{\midi} ブロック) +を保持します。@c +通常、@code{Score} コンテキストは省略され、@c +音楽表記の解釈が始まった時点で自動的に作成されます。 + +ボイスが 1 つだけで、譜も 1 つだけの楽譜では、@c +@code{Voice} と @code{Staff} も省略して、自動的に作成させることができます。@c +コンテキストは自動的に作成されるために放っておかれるかもしれません。@c +しかしながら、より複雑な楽譜ではこれらを手ずから作成する必要があります。@c +これらを作成する最も簡単なコマンドは @code{\new} です。@c +これは音楽表記の前に置きます。@c +例を挙げます: + +@example +\new @var{type} @var{music-expression} +@end example + +@noindent + +ここで、@var{type} はコンテキスト名です (@code{Staff} や @code{Voice} など)。@c +このコマンドは新しいコンテキストを作成し、そのコンテキストの中にある +@var{music-expression} の解釈を開始します。 + +@warning{必須の最上位 @code{Score} コンテキストとして @bs{}@code{new Score} +を使わないでください。@c +これは、@bs{}@code{score} ブロックの中にある音楽表記が解釈される時に@c +自動的に作成されます。@c +楽譜全体のコンテキスト プロパティのデフォルト値を変更するには、@c +@bs{}@code{layout} ブロックの中で行います。@c +@ref{コンテキスト プロパティを変更する} を参照してください。} + +これまでに、新たに @code{Staff} と @code{Voice} コンテキストを作成する多くの@c +実際的な例を見てきましたが、これらのコマンドが実際にどのように使用されるのかを@c +覚えてもらうために、実際の音楽に注釈を付けた例を挙げます: + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right] +\score { % 複合音楽表記の開始点 + << % 同時進行する譜の開始点 + \time 2/4 + \new Staff { % create RH staff + \clef "treble" + \key g \minor + \new Voice { % 右手の音符用のボイスを作成します + \relative c'' { % 右手の音符の開始点 + d4 ees16 c8. | + d4 ees16 c8. | + } % 右手の音符の終了点 + } % 右手のボイスの終了点 + } % 右手の譜の終了点 + \new Staff << % 左手の譜を作成します。2 つの同時進行するボイスを必要とします + \clef "bass" + \key g \minor + \new Voice { % 左手のボイス 1 を作成します + \voiceOne + \relative g { % 左手のボイス 1 の音符の開始点 + g8 ees, | + g8 ees, | + } % 左手のボイス 1 の音符の終了点 + } % 左手のボイス 1 の終了点 + \new Voice { % 左手のボイス 2 を作成します + \voiceTwo + \relative g { % 左手のボイス 2 の音符の開始点 + g4 ees | + g4 ees | + } % 左手のボイス 2 の音符の終了点 + } % 左手のボイス 2 の終了点 + >> % 左手の譜の終了点 + >> % 同時進行する譜セクションの終了点 +} % 複合音楽表記の終了点 +@end lilypond + +(波括弧 @code{@{} や 2 重山括弧 @code{<<} の中でブロックになっているすべての@c +記述には括弧よりもスペースが 2 つ多いインデントを付けられていて、@c +閉じ括弧には括弧の開始行と同じインデントを付けられているということに@c +注意してください。@c +これは必須ではありませんが、こうしておくと @q{unmatched backet} +(「括弧が一致しない」) エラーを大幅に減らすことができますので、@c +強く推奨します。@c +これにより、音楽の構造を簡単に見て取ることができ、@c +一致していない括弧が明瞭になります。@c +さらに、右手の譜はボイスを 1 つだけしか必要としないために波括弧によって@c +囲まれた単一の音楽表記として作成されているのに対して、@c +左手の譜は 2 つのボイスを必要とするために +2 重山括弧を使って作成されていることにも注意してください。) + +@cindex contexts, naming (コンテキストを名前を付ける) +@cindex naming contexts (コンテキストを名前を付ける) + +また、@code{\new} コマンドはコンテキストに識別名を与えて、そのコンテキストを@c +同じタイプの他のコンテキストと区別することを可能にするかもしれません: + +@example +\new @var{type} = @var{id} @var{music-expression} +@end example + +@code{Staff}, @code{Voice} などといったコンテキスト タイプの名前と@c +そのようなコンテキスト タイプのインスタンスの名前 +--これはユーザによって決定され、どのような文字の連なりにもなり得ます +-- の違いに注意してください。@c +数字とスペースも識別名に使用することができますが、@c +その場合クォートで囲まなければなりません +-- つまり、@code{\new Staff = "MyStaff 1" @var{music-expression}} +のようになります。@c +識別名はコンテキストのあるインスタンスを参照するために使用されます。@c +このことを歌詞についてのセクションで見てきました。@c +@ref{ボイスとボーカル} を参照してください。 + + +@seealso +記譜法リファレンス: @ruser{Creating contexts} + + +@node エングラーバの説明 +@subsection エングラーバの説明 +@translationof Engravers explained + +@cindex engravers (エングラーバ) + +LilyPond によって作成された楽譜上にあるすべての記号は +@code{Engraver} によって作り出されます。@c +つまり、譜を譜刻するエングラーバがあり、符頭を譜刻するエングラーバ、@c +符幹を譜刻するエングラーバ、連桁を譜刻するエングラーバなどなどです。@c +そのようなエングラーバは 120 以上あります!@c +幸いなことに、たいていの楽譜では数個のエングラーバについて知っていれば良く、@c +簡単な楽譜ではまったく知らなくても大丈夫です。 + +エングラーバはコンテキストの中に存在し、そこで活動します。@c +@code{Metronome_mark_engraver} などといった楽譜全体に影響を与える@c +エングラーバは最上位のコンテキスト -- @code{Score} コンテキスト -- で@c +活動します。 + +@code{Clef_engraver} と @code{Key_engraver} は各 @code{Staff} コンテキストの@c +中で見つかります -- 譜が異なれば音部記号や調号も異なるかもしれないからです。 + +@code{Note_heads_engraver} と @code{Stem_engraver} は@c +各 @code{Voice} コンテキスト -- 最下位のコンテキスト -- の中にあります。 + +各エングラーバはそれの機能に関連付けされているある特定のオブジェクトを処理し、@c +機能に関連するプロパティを維持します。@c +コンテキストに関連付けされているプロパティなどのようにこれらのプロパティは、@c +エングラーバの処理を変更するためや、譜刻される楽譜の中にある要素の見た目を@c +変更するために、変更されるかもしれません。 + +エングラーバはすべてそれらの機能を記述する単語から形成された複合名を持ちます。@c +最初の単語の最初の文字は大文字であり、その後に続く単語はアンダスコアで@c +連結されます。@c +ですから、@code{Staff_symbol_engraver} には譜表の線を作成する責任があり、@c +@code{Clef_engraver} は音部記号を描くことによってピッチの参照ポイントを@c +決定、セットします。 + + +ここに、最も一般的なエングラーバをいくつかそれらの機能とともに挙げます。@c +たいていの場合、名前から簡単に機能を推測でき、その逆も成り立つことが@c +わかるでしょう。 + +@multitable @columnfractions .3 .7 +@headitem エングラーバ + @tab 機能 +@item Accidental_engraver + @tab 臨時記号 (警告的臨時記号とアドバイス的な臨時記号を含む) を作成します。 +@item Beam_engraver + @tab 連桁を譜刻します。 +@item Clef_engraver + @tab 音部記号を譜刻します。 +@item Completion_heads_engraver + @tab 小節線をまたがる音符を分割します。 +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab 強弱記号 (クレッシェンド、デクレッシェンド) と強弱テキスト (p や f など) +を作成します。 +@item Forbid_line_break_engraver + @tab 音楽要素がアクティブなままである場合に改行されることを防ぎます。(訳者: +いわゆる禁則処理) +@item Key_engraver + @tab 調号を作成します。 +@item Metronome_mark_engraver + @tab メトロノーム記号を譜刻します。 +@item Note_heads_engraver + @tab 符頭を譜刻します。 +@item Rest_engraver + @tab 休符を譜刻します。 +@item Staff_symbol_engraver + @tab (デフォルトで) 五線の譜表を譜刻します。 +@item Stem_engraver + @tab 符幹と単一符幹のトレモロを作成します。 +@item Time_signature_engraver + @tab 拍子記号を作成します。 +@end multitable + +@smallspace + +後ほど、エングラーバのアクションを変更することによって LilyPond の出力が@c +どのように変わるのかを見ていきます。 + + +@seealso +内部リファレンス: @rinternals{Engravers and Performers} + + +@node コンテキスト プロパティを変更する +@subsection コンテキスト プロパティを変更する +@translationof Modifying context properties + +@cindex context properties (コンテキスト プロパティ) +@cindex context properties, modifying (コンテキスト プロパティを変更する) +@cindex modifying context properties (コンテキスト プロパティを変更する) +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +コンテキストにはいくつかのコンテキスト プロパティを保持する責任があります。@c +それらプロパティの多くは変更可能であり、変更することで入力の構文解釈に影響を@c +与えて出力の見た目を変化させます。@c +それらプロパティは \set コマンドによって変更されます。@c +これは以下のような形で行います: + +@example +\set @emph{ContextName}.@emph{propertyName} = #@emph{value} +@end example + +@emph{ontextName} には通常、@code{Score}, @code{Staff} or @code{Voice} が@c +入ります。@c +これを省略する場合もあり、そのような場合は @code{Voice} であると@c +見なされます。 + +コンテキスト プロパティの名前はハイフンやアンダスコアを使わずに連結された@c +単語によって形成され、最初の単語を除いて単語の最初の文字は大文字になります。@c +ここで、一般的に使用されるコンテキスト プロパティの例をいくつか挙げます。@c +実際には、コンテキスト プロパティはもっとたくさんあります。 + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem プロパティ名 + @tab タイプ + @tab 機能 + @tab 実際の値の例 +@item extraNatural + @tab ブール値 + @tab 真の場合、追加のナチュラル記号を臨時記号の前にセットします + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab 整数 + @tab 小節番号をセットします + @tab @code{50} +@item doubleSlurs + @tab ブール値 + @tab 真の場合、音符の上と下の両方にスラーを譜刻します + @tab @code{#t}, @code{#f} +@item instrumentName + @tab テキスト + @tab 譜表の先頭に表示される名前をセットします + @tab @code{"Cello I"} +@item fontSize + @tab 実数 + @tab フォント サイズを増減させます + @tab @code{2.4} +@item stanza + @tab テキスト + @tab 歌詞の先頭に譜刻されるテキストをセットします + @tab @code{"2"} +@end multitable + +@noindent +ここでのブール値とは真 (@code{#t}) または偽 (@code{#f}) の@c +どちらかであり、整数とは正の整数であり、実数とは正または負の小数点付きの@c +数であり、テキストはダブル アポストロフィで囲まれます。@c +ハッシュ記号 (@code{#}) が 2 つの異なる箇所で出現することに@c +注意してください -- ブール値での @code{t} や @code{f} の前と、@c +@code{@bs{}set} での@emph{値}の前です。@c +そのため、@code{@bs{}set} の値にブール値を挿入する場合、ハッシュ記号が 2 つ@c +必要になります -- つまり @code{##t} です。 + +@cindex properties operating in contexts (コンテキスト内でのプロパティの操作) +@cindex setting properties within contexts (コンテキスト内部のプロパティを設定する) + +これらのプロパティのいずれかをセットする前に、それらが操作するコンテキストは@c +どれなのかを知る必要があります。@c +これは明らかな場合もありますが、ややこしい場合もあります。@c +間違ったコンテキストが指定された場合、エラー メッセージは表示されませんが、@c +予期したアクションが起こりません。@c +例えば、@code{instrumentName} は間違いなく @code{Staff} コンテキストの中に@c +きます。@c +なぜなら、このプロパティが名前を付けるのは譜表だからです。@c +以下の例では、最初の譜表には名前が付けられていますが、2 番目の譜表には@c +付けられていません。@c +なぜなら、コンテキスト名を省略しているからです。 + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c2 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d2 d + } +>> +@end lilypond + +デフォルトのコンテキスト名は @code{Voice} であることを思い出してください。@c +このため、2 番目の @code{@bs{}set} コマンドは @code{Voice} コンテキストの@c +プロパティ @code{instrumentName} を @qq{Alto} にセットしています。@c +しかしながら、LilyPond は @code{Voice} コンテキストでそのようなプロパティを@c +見つけ出さないため、何のアクションも起こしません。@c +これはエラーではなく、ログ ファイルにエラー メッセージは残りません。 + +同様に、プロパティ名の綴りを間違えた場合もエラー メッセージは表示されず、@c +予期したアクションが起こりません。@c +実際のところ、@code{@bs{}set} コマンドを使って、存在するいかなる@c +コンテキストにでも、いかなる (架空の) @q{プロパティ} を@c +セットすることができます。@c +しかしながら、そのプロパティ名を LilyPond が知らない場合、@c +何のアクションも起こしません。@c +LilyPond 入力ファイルに対する特別なサポートを持つ@c +いくつかのテキスト エディタは、あなたがプロパティ名の上にマウスを@c +持ってくるとバレット (テキストの先頭に付く小丸) 付きのプロパティ名を表示して@c +そのプロパティの裏づけを行い (LilyPondTool を持つ JEdit)、@c +あるいは未知のプロパティ名をハイライトします (ConTEXT)。@c +そのような機能を持つエディタを使用していないのなら、内部リファレンスで@c +プロパティ名をチェックすることを推奨します: +@rinternals{Tunable context properties} や @rinternals{Contexts} +を参照してください。 + +@code{instrumentName} プロパティは @code{Staff} コンテキストの中に@c +セットされた場合にのみ効果を持ちますが、いくつかのプロパティは複数の@c +コンテキストの中にセットすることができます。@c +例えば、プロパティ @code{extraNatural} はすべての譜に対してデフォルトで +@code{##t} (真) にセットされています。@c +ある特定の @code{Staff} コンテキストでこれを @code{##f} (偽) に@c +セットした場合、その譜表の臨時記号にのみ適用されます。@c +これを @code{Score} コンテキストにセットした場合、すべての譜に適用されます。 + +それでは、ある譜表の追加ナチュラル記号を消してみます: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +さらに、すべての譜の追加ナチュラル記号を消します: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +他の例としては、@code{clefOctavation} が @code{Score} コンテキストに@c +セットされた場合、直ちにすべての譜でのオクターブの値を変更し、すべての譜に@c +適用される新しいデフォルト値をセットします。 + +逆のことを行うコマンド @code{\unset} はコンテキストからプロパティを@c +削除し、それによりたいていのプロパティはデフォルト値に戻ります。@c +通常、望みのことを達成するために新たな @code{\set} コマンドを@c +用いる場合、@code{\unset} は必要ありません。 + +@code{\set} と @code{\unset} コマンドは入力ファイルのどこにでも@c +現れる可能性があり、そのコマンドが出現した時点から、楽譜の終わりまたは@c +そのプロパティが再度 @code{\set} や @code{\unset} されるまで効果を@c +持ちます。@c +フォント サイズを変更してみましょう。@c +それにより (他のものに加えて) 符頭のサイズが何段階か変更されます。@c +変更は直前にセットされた値から行われるのではなく、デフォルト値から行われます。 + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,relative=1] +c4 d +% 符頭を小さくします +\set fontSize = #-4 +e4 f | +% 符頭を大きくします +\set fontSize = #2.5 +g4 a +% デフォルトのサイズに戻します +\unset fontSize +b4 c | +@end lilypond + +これまでにいくつかのタイプのプロパティ値をセットする方法を見てきました。@c +整数と番号の前には常にハッシュ記号 @code{#} が付き、真と偽の値は +2 つのハッシュ記号を付けて @code{##t} と @code{##f} +によって指定されてるということに注意してください。@c +テキスト プロパティは上で示したようにダブル クォーテーションによって@c +囲まれます。@c +しかしながら、後ほど、テキストは実際には非常に強力な @code{\markup} コマンドを@c +用いたもっと一般的な方法で指定できるということを見ていきます。 + + +@subsubheading @code{\with} を使ったコンテキスト プロパティの設定 +@c Setting context properties with @code{\with} + +@funindex \with +@funindex with +@cindex context properties, setting with \with (\with でコンテキスト プロパティを設定する) + +コンテキスト プロパティはコンテキストが作成されるときに@c +セットされることもあるかもしれません。@c +この設定がコンテキスト全体で保持される場合、この方法でプロパティ値を@c +指定すると明瞭になります。@c +コンテキストが @code{@bs{}new} コマンドで作成されるとき、その直後に +@code{@bs{}with @{ .. @}} ブロックが続き、その中でプロパティ値が@c +セットされるかもしれません。@c +例えば、ある譜表全体で追加のナチュラルの表示を抑制しようとする場合、@c +以下のように書きます: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +like this: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + gis4 ges aes ais + } + } + \new Staff \with { extraNatural = ##f } { + \relative c'' { + gis4 ges aes ais + } + } +>> +@end lilypond + +この方法でプロパティをセットした場合でも、@code{\set} +を使って動的に変更されたり、@c +@code{\unset} を使ってデフォルト値に戻されたりするかもしれません。 + +@cindex fontSize, default and setting (fontSize のデフォルトと設定) + +@code{fontSize} プロパティの扱いは異なります。@c +これが @code{\with} の中でセットされた場合、フォント サイズの@c +デフォルト値をセットし直します。@c +そのあとでフォント サイズが @code{\set} によって変更された場合、@c +@code{\with} でセットされた新しいデフォルト値は +@code{\unset fontSize} コマンドによって元に戻されるかもしれません。 + + +@subsubheading @code{\context} を使ったコンテキスト プロパティの設定 +@c Setting context properties with @code{\context} + +@cindex context properties, setting with \context (\context でコンテキスト プロパティを設定する) +@funindex \context +@funindex context + +コンテキスト プロパティの値は単一のコマンドによってある特定のタイプの@c +コンテキスト@emph{すべて} -- すべての @code{Staff} コンテキストなどのように +-- にセットされるかもしれません。@c +プロパティをセットするコンテキストのタイプは、@code{Staff} のような@c +そのコンテキストのタイプ名に接頭辞としてバック スラッシュを付けたもの +-- @code{\Staff} のように -- によって指定されます。@c +プロパティ値をセットするための記述は上で紹介した @code{\with} ブロックの中の@c +記述と同じです。@c +この記述は @code{\layout} ブロック内部の @code{\context} ブロックの中に@c +置かれます。@c +各 @code{\context} ブロックは、その @code{\layout} ブロックが@c +置かれている @code{\score} または @code{\book} ブロック全体を通じて、@c +指定されたタイプのコンテキストすべてに対して効果を持ちます。@c +ここで、記述方法を示すための例を挙げます: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond + +プロパティのオーバライドが 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 +この方法でセットされたコンテキスト プロパティは、@code{\with} ブロックの@c +中の記述によって、さらには、音楽表記の中に埋め込まれた +@code{\set} コマンドによって、ある特定のコンテキスト インスタンスでは@c +上書きされるかもしれません。 + + +@seealso +記譜法リファレンス: +@ruser{Changing context default settings}, +@ruser{The set command} + +内部リファレンス: +@rinternals{Contexts}, +@rinternals{Tunable context properties} + + +@node エングラーバを追加 / 削除する +@subsection エングラーバを追加 / 削除する +@translationof Adding and removing engravers + +@cindex engravers, adding (エングラーバを追加する) +@cindex adding engravers (エングラーバを追加する) +@cindex engravers, removing (エングラーバを削除する) +@cindex removing engravers (エングラーバを削除する) + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +これまでに、コンテキストはそれぞれにいくつかのエングラーバを保持し、@c +それぞれのエングラーバは出力のある特定部分 +-- 小節線、譜、符頭、符幹など -- の譜刻に責任を持つということを見てきました。@c +あるエングラーバがコンテキストから削除されると、それはもはや出力を行いません。@c +これは出力を変更するための荒っぽい方法ですが、役に立つ場合もあります。 + +@subsubheading 単一のコンテキストの変更 +@c Changing a single context + +あるコンテキストからあるエングラーバを削除するには、前のセクションで@c +見てたきたのと同様に、コンテキスト作成コマンドの直後に置く +@code{\with} コマンドを使用します。 + +例として、前のセクションで使用した例から譜表線を取り除いてみましょう。@c +譜表線は @code{Staff_symbol_engraver} によって作り出されるということを@c +思い出してください。 + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % 符頭を小さくします + e4 f | + \set fontSize = #2.5 % 符頭を大きくします + g4 a + \unset fontSize % デフォルトのサイズに戻します + b4 c | +} +@end lilypond + +@cindex ambitus engraver (音域エングラーバ) + +さらに、エングラーバは個々のコンテキストに追加されることもあります。@c +エングラーバを追加するコマンドは以下のようなものです: + +@code{\consists @var{Engraver_name}}, + +@noindent +これを @code{\with} ブロックの中に置きます。@c +いくつかのボーカル譜は、その譜表の中にある音符の範囲を示すために、@c +譜表の開始点に音域 (ambitus) を置きます -- +@rglos{ambitus} を参照してください。@c +音域は @code{Ambitus_engraver} によって作成され、普通は、@c +これはどのコンテキストにも含まれません。@c +これを @code{Voice} コンテキストに追加した場合、それはそのボイスのみから@c +音域を計算します: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +しかし、音域エングラーバを @code{Staff} コンテキストに追加した場合、@c +そのエングラーバはその譜表上にあるすべてのボイスの中の音符から音域を計算します: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@subsubheading 同じタイプのコンテキストをすべて変更する +@c Changing all contexts of the same type + +@funindex \layout +@funindex layout + +上の例では、個々のコンテキストにエングラーバを追加あるいは削除する方法を@c +示しました。@c +さらに、そのコマンドを @code{\layout} ブロックの中の適当なコンテキストの@c +中に置くことによって、ある特定のタイプのコンテキストすべてにエングラーバを@c +追加あるいは削除することもできます。@c +例えば、4 つの譜表を持つ楽譜ですべての譜表に音域を表示する場合、@c +以下のように記述します: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +また、コンテキスト プロパティの値も、上記と同様に +@code{\context} ブロックの中に @code{\set} を含ませることによって、@c +ある特定のタイプのコンテキストすべてに対してセットすることができます。 + + +@seealso +記譜法リファレンス: @ruser{Modifying context plug-ins}, +@ruser{Changing context default settings} +@c コンテキスト プラグインの変更, コンテキストのデフォルト設定の変更 + +@knownissues +@code{Stem_engraver} と @code{Beam_engraver} はそれらが描くオブジェクトを@c +符頭にくっつけます。@c +@code{Note_heads_engraver} が削除されると、符頭は作られず、@c +それゆえ符幹も連桁も作られません。 + + +@node テンプレートを拡張する +@section テンプレートを拡張する +@translationof Extending the templates + +あなたはチュートリアルを読み終えました。@c +あなたはどのように楽譜を書くかを知っていて、@c +基礎となるコンセプトを理解しています。@c +しかし、どうやったらあなたはあなたが望む譜を手に入れられるでしょうか?@c +あなたにとって良いスタート地点となるかもしれない多くのテンプレートがあります +(@ref{テンプレート} を参照してください)。@c +しかしながら、あなたの望むものがそこでカバーされていなかったらどうしましょう?@c +続きを読んでください。 + +@menu +* ソプラノとチェロ:: +* 4 パート SATB ボーカル譜:: +* ゼロから楽譜を構築する:: +* 変数と関数を用いて入力の手間を省く:: +* 楽譜とパート:: +@end menu + +@node ソプラノとチェロ +@subsection ソプラノとチェロ +@translationof Soprano and cello + +@cindex template, modifying (テンプレートを変更する) +@cindex modifying templates (テンプレートを変更する) + +あなたが最終的に望むものに最も近いテンプレートから始めてください。@c +ソプラノとチェロのための楽譜を書きたいということにしましょう。@c +ここでは、@q{音符と歌詞} (ソプラノ パート用) から始めることにします。 + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +text = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melody + @} + \new Lyrics \lyricsto "one" \text + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +これにチェロ パートを追加していきます。@c +@q{音符のみ} のテンプレートを見てみましょう: + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melody + \layout @{ @} + \midi @{ @} +@} +@end example + +@code{\version} コマンドは 2 つも必要ありません。@c +@code{melody} セクションは必要です。@c +@code{\score} セクションは 2 つも必要ありません +-- @code{\score} が 2 つあると、2 つのパートがばらばらになります。@c +2 つのパートをデュオのように一緒にしたいのです。@c +@code{\score} セクションの中に @code{\layout} や @code{\midi} は 2 つも@c +必要ありません。 + +単に @code{melody} セクションをカット&コピーした場合、@c +@code{melody} 定義が 2 つになります。@c +これはエラーにはなりませんが、@ +2 番目の定義が両方の旋律で使われることになります。@c +そのため、2 つの旋律を区別するためにリネームします。@c +ソプラノ用のセクションを @code{sopranoMusic} と呼び、@c +チェロ用のセクションを @code{celloMusic} と呼ぶことにします。@c +リネームするときに、@code{text} を @code{sopranoLyrics} とりネームしましょう。@c +これらのインスタンスをリネームすることも忘れないでください +−- 初期定義 (@code{melody = \relative c' @{ } 部分) とその名前が@c +使われているところ (@code{\score セクションの中}) の両方です。 + +リネームする際に、チェロ パートの譜も変更しましょう +−- 通常、チェロは低音部を使用します。@c +さらに、チェロの音符を変えてみます。 + +@example +\version @w{"@version{}"} + +sopranoMusic = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +sopranoLyrics = \lyricmode @{ + Aaa Bee Cee Dee +@} + +celloMusic = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +これでうまくいくように見えますが、チェロ パートが楽譜に表示されません +−- チェロ パートを @code{\score} セクションの中で使っていないからです。@c +チェロ パートをソプラノ パートの下に表示させたいのなら、@c +以下をソプラノの譜の下に追加する必要があります: + +@example +\new Staff \celloMusic +@end example + +@noindent +さらに、音楽を @code{<<} と @code{>>} で囲む必要もあります +−- これは LilyPond に複数のもの (この場合は 2 つの @code{Stave}) + が同時に起こるということを知らせます。@c +@code{\score} は以下のようになります: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +これは少し見にくいです。@c +インデントがきちんと入っていません。@c +これは簡単に修正できます。@c +ここで、完成したソプラノとチェロ用のテンプレートを挙げます。 + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +開始点となるテンプレートは付録 @q{テンプレート} で見つけることができます。@c +@ref{単一の譜表} を参照してください。 + + +@node 4 パート SATB ボーカル譜 +@subsection 4 パート SATB ボーカル譜 +@translationof Four-part SATB vocal score + +@cindex template, SATB (SATB テンプレート) +@cindex SATB template (SATB テンプレート) + +Mendelssohn の Elijah や Handel の Messiah などのオーケストラ伴奏付きの +4 パート聖歌隊のために書かれたボーカル譜の多くは 4 つの譜上に@c +音符と歌詞を持ち、それぞれの譜は SATB (ソプラノ、アルト、テナー、バス) のうちの +1 つであり、その下にオーケストラ伴奏のピアノ譜が付きます。@c +ここで、Handel の Messiah から例を挙げます: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} + +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords + +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords + +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords + +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} + +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +このレイアウトをそのまま提供するテンプレートはありません。@c +最も近いのは @q{SATB ボーカル譜と自動ピアノ伴奏譜} -- @ref{合唱} を@c +参照してください -- ですが、レイアウトを変更して、ボーカル パートから@c +自動的に生成されたものではないピアノ伴奏譜を付け加える必要があります。@c +ボーカル パートのための音楽と歌詞を保持している変数はそのまま使えますが、@c +ピアノ伴奏譜のための変数を付け加える必要があります。 + +テンプレートの @code{ChoirStaff} の中でコンテキストが出現する順序は上で@c +示したボーカル譜の順序と一致していません。@c +そのため、コンテキストを再配置して、それぞれの歌詞が対応する譜表の@c +すぐ下にくるようにします。@c +すべてのボイスは @code{\voiceOne} -- これがデフォルトです -- に@c +なるべきなので、@code{\voiceXXX} コマンドは削除すべきです。@c +さらに、テノールに対してハ音記号 (中音部記号) を指定する必要があります。@c +テンプレートの中で歌詞を指定する方法はまだ説明していませんので、@c +馴染みのある方法を使用する必要があります。@c +さらに、それぞれの譜に名前を追加すべきです。 + +以上のことを @code{ChoirStaff} に対して行います: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} +>> % end ChoirStaff +@end example + +次にピアノ パートに取り掛からなければなりません。@c +これは簡単です -- @q{ソロ ピアノ} テンプレートからピアノ パートを@c +引き抜いてくるだけです: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower +>> +@end example + +そして、@code{upper} と @code{lower} に変数定義を付け加えます。 + +@code{ChoirStaff} を @code{PianoStaff} の上に置きたいので、@c +それらを山括弧を使って組み合わせなければなりません: + +@example +<< % combine ChoirStaff and PianoStaff one above the other + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +これらすべてを組み合わせて、上の例の 3 小節分の音楽を付け加えます: + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,addversion] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % ChoirStaff と PianoStaff を並行に組み合わせます + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % ChoirStaff の終了 + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node ゼロから楽譜を構築する +@subsection ゼロから楽譜を構築する +@translationof Building a score from scratch + +@cindex template, writing your own (自分自身のテンプレートを記述する) +@cindex example of writing a score (楽譜の書き方の例) +@cindex writing a score, example (楽譜の書き方の例) +@cindex score, example of writing (楽譜の書き方の例) + +LilyPond コードを書くことにある程度熟練した後、あなたはテンプレートの 1 つを@c +変更するよりもゼロから楽譜を構築するほうがより容易であることに@c +気づくかもしれません。@c +さらに、あなたはこの方法であなたの好みのタイプの音楽に適したあなた自身の@c +スタイルを開発することもできます。@c +例として、オルガン前奏曲のための楽譜を作成する手順を見てみましょう。 + +ヘッダ セクションから始めます。@c +そこでタイトル、作曲者の名前などを記述し、それから任意の変数を定義し、@c +最後にスコア ブロックに取り掛かります。@c +以上のことを概要から始めて、その後に詳細を詰めていきます。 + +@emph{Jesu, meine Freude} +-- これは 2 つの鍵盤とペダルを持つオルガンのために書かれたものです +-- をベースとする Bach の前奏曲の最初の 2 小節を使います。@c +このセクションの最後でこの音楽の最初の 2 小節を見ることができます。@c +上段鍵盤パートは 2 つのボイスを持ち、@c +下段鍵盤とペダルはそれぞれ 1 つのボイスを持ちます。@c +そのため、4 つの音楽定義と、@c +拍子記号と調号を定義するための 1 つの音楽定義が必要となります: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +keyTime = @{ \key c \minor \time 4/4 @} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +ここでは、実際の音楽の代わりに空白音符 @code{s1} を使用しました。@c +実際の音楽は後で付け加えます。 + +次に、スコア ブロックで何をすべきなのかを見ていきましょう。@c +単純に望む譜表構造を反映させます。@c +通常、オルガン音楽は 3 つの譜で書かれます +-- 2 つの鍵盤とペダルのための譜です。@c +鍵盤の譜はブレース (譜表の左端の波括弧) でまとめられているべきなので、@c +それらに対して @code{PianoStaff} を使用する必要があります。@c +1 番目の鍵盤パートは 2 つのボイスを必要とし、2 番目の鍵盤パートは 1 つだけ@c +ボイスを必要とします。 + +@example +\new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % ManualOne Staff コンテキストの終了 + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % ManualTwo Staff コンテキストの終了 +>> % PianoStaff コンテキストの終了 +@end example + +次にペダル オルガンのための譜表を付け加える必要があります。@c +これは @code{PianoStaff} の下にきますが、@code{PianoStaff} と@c +同時進行でなければなりませんので、ペダル オルガンのための譜表と +@code{PianoStaff} を山括弧で囲む必要があります。@c +これを忘れるとエラーがログ ファイルに生成されます。@c +このエラーはあなたが早かれ遅かれ遭遇する一般的なミスです!@c +生成されるエラーを確認するために、このセクションの最後にある例をコピーし、@c +この山括弧を削除し、コンパイルしてみてください。 + +@example +<< % PianoStaff と Pedal Staff を同時進行させる必要があります + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % ManualOne Staff コンテキストの終了 + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % ManualTwo Staff コンテキストの終了 + >> % PianoStaff コンテキストの終了 + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +2 番目の鍵盤パートとペダル オルガンの譜表は 1 つだけしか音楽表記を@c +保持しないため、それらに対して同時進行構造 @code{<< .. >>} を使う必要は@c +必ずしもありません。@c +しかしながら、そうしても害はありませんし、@code{\new Staff} の後に常に@c +山括弧を置くというのは複数のボイスがある場合では推奨される良い習慣です。@c +Voice はこれとは対照的に、あなたの音楽を連続して演奏すべきいくつかの変数に@c +分けてコード化する場合に Voice の後に波括弧 @code{@{ .. @}} を常に置くべきです。 + +この構造をスコア ブロックに付け加えて、インデントを調整しましょう。@c +さらに、適切な音部記号を付け加え、@code{\voiceOne} と @code{\voiceTwo} を@c +使って上部譜の各ボイスで符幹、タイ、スラーの向きが正しくなるようにし、@c +あらかじめ定義しておいた変数 @code{\keyTime} を使って拍子記号と調号を@c +各譜に挿入します。 + +@example +\score @{ + << % PianoStaff と Pedal Staff を同時進行させる必要があります + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % 調号と拍子記号をセットします + \clef "treble" + \new Voice @{ + \voiceOne + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \voiceTwo + \ManualOneVoiceTwoMusic + @} + >> % ManualOne Staff コンテキストの終了 + \new Staff = "ManualTwo" << + \keyTime + \clef "bass" + \new Voice @{ + \ManualTwoMusic + @} + >> % ManualTwo Staff コンテキストの終了 + >> % PianoStaff コンテキストの終了 + \new Staff = "PedalOrgan" << + \keyTime + \clef "bass" + \new Voice @{ + \PedalOrganMusic + @} + >> % PedalOrgan Staff の終了 + >> +@} % Score コンテキストの終了 +@end example + +@cindex stretchability of staves (譜の伸縮性) +@cindex staves, stretchability (譜の伸縮性) + +上のオルガン譜のレイアウトはほぼ完璧です。@c +しかしながら、それぞれの譜を見ているだけではわからない、@c +ちょっとした欠陥があります。@c +ペダル譜と左手譜の距離は右手譜と左手譜の距離とほぼ等しくなるべきです。@c +詳しく説明すると、@code{PianoStaff} コンテキストの譜の伸縮性は制限される +(制限により、左手譜と右手譜の距離はあまりにも大きくなることはありません) +ので、ペダル譜も同様に制限されるべきです。 + +@cindex sub-properties (サブ-プロパティ) +@cindex properties, sub-properties (サブ-プロパティ) +@cindex graphical objects (グラフィカル オブジェクト) +@cindex objects, graphical (グラフィカル オブジェクト) +@cindex grobs (グラフィカル オブジェクト) + +譜の伸縮性は @q{グラフィカル オブジェクト} @code{VerticalAxisGroup} +の @code{staff-staff-spacing} プロパティで制御することができます。 +(LilyPond ドキュメントの中でグラフィカル オブジェクトは @q{grobs} +と呼ばれることが多いです。) +今、グラフィカル オブジェクトの詳細について知らなくても心配しないでください。@c +後で詳しく説明します。@c +興味があるのなら、@ruser{Overview of modifying properties} を見てください。@c +今回は、@code{stretchability} サブ-プロパティを変更する必要があるだけです。@c +さらに興味があるのなら、グラフィカル オブジェクト @code{VerticalAxisGroup} +の定義を調べていくと、ファイル @file{scm/define-grobs.scm} の中に +@code{staff-staff-spacing} プロパティのデフォルト値を見つけることができます。@c +@code{stretchability} の値は、@code{PianoStaff} コンテキスト +(これはファイル @file{ly/engraver-init.ly} の中にあります) +の定義から来ていて、2 つの値は等価です。 + +@example +\score @{ + << % PianoStaff と Pedal Staff を同時進行させる必要があります + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % 調号と拍子記号をセットします + \clef "treble" + \new Voice @{ + \voiceOne + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \voiceTwo + \ManualOneVoiceTwoMusic + @} + >> % ManualOne Staff コンテキストの終了 + \new Staff = "ManualTwo" \with @{ + \override VerticalAxisGroup + #'staff-staff-spacing #'stretchability = 5 + @} << + \keyTime + \clef "bass" + \new Voice @{ + \ManualTwoMusic + @} + >> % ManualTwo Staff コンテキストの終了 + >> % PianoStaff コンテキストの終了 + \new Staff = "PedalOrgan" << + \keyTime + \clef "bass" + \new Voice @{ + \PedalOrganMusic + @} + >> % PedalOrgan Staff の終了 + >> +@} % Score コンテキストの終了 +@end example + +これでこの構造は完成です。@c +3 つの譜を持つオルガン譜はいずれも同様の構造を持ちますが、@c +ボイスの数はさまざまになるかもしれません。@c +この後に行うべきことは、音楽を付け加え、各パートを一緒にすることです。 + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\score { + << % PianoStaff と Pedal Staff を同時進行させる必要があります + \new PianoStaff << + \new Staff = "ManualOne" << + \keyTime % 調号と拍子記号をセットします + \clef "treble" + \new Voice { + \voiceOne + \ManualOneVoiceOneMusic + } + \new Voice { + \voiceTwo + \ManualOneVoiceTwoMusic + } + >> % ManualOne Staff コンテキストの終了 + \new Staff = "ManualTwo" \with { + \override VerticalAxisGroup + #'staff-staff-spacing #'stretchability = 5 + } << + \keyTime + \clef "bass" + \new Voice { + \ManualTwoMusic + } + >> % ManualTwo Staff コンテキストの終了 + >> % PianoStaff コンテキストの終了 + \new Staff = "PedalOrgan" << + \keyTime + \clef "bass" + \new Voice { + \PedalOrganMusic + } + >> % PedalOrgan Staff コンテキストの終了 + >> +} % Score コンテキストの終了 +@end lilypond + +@seealso +音楽用語集: +@rglos{system} + + +@node 変数と関数を用いて入力の手間を省く +@subsection 変数と関数を用いて入力の手間を省く +@translationof Saving typing with variables and functions + +@cindex variables (変数) + +これまでに、以下のような記述を見てきました: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } + +\score { + { + \hornNotes + } +} +@end lilypond + +これは音楽表記を最小化するのに役に立つ可能性があるということに@c +気付くかもしれません: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } + +violin = \new Staff { + \fragmentA \fragmentA | + \fragmentB \fragmentA | +} + +\score { + { + \violin + } +} +@end lilypond + +さらに、これらの変数 (変数、マクロ、(ユーザ定義) コマンドなどと呼ばれます) +を調整のために使うこともできます: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } + +padText = { \once \override TextScript #'padding = #5.0 } +fthenp =_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b | + \padText + c4.^"hi there!" d8 e' f g d | + c,4.\fthenp b8 c4 c-. | + } +} + +\score { + { + \violin + } + \layout { ragged-right = ##t } +} +@end lilypond + +これらの変数は明らかに入力の手間を省くのに役立っています。@c +例え 1 回しか使用しない音楽であっても、変数化することを考慮する価値はあります +-- 変数化は複雑さを減らします。@c +前の例を変数化しなかったものを見てみましょう。@c +とても読み難く、特に最後の行が読み難いです。 + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d | + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +これまでに見てきたのは静的な置き換えです +-- LilyPond は @code{\padText} を見つけると、それを定義した内容 +(つまり、@code{padText=} の右側にあるもの) に置き換えます。 + +LilyPond は非静的な置き換えも処理できます (それらを関数と見なすことができます)。 + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +変数を使うことは、LilyPond 入力構文に変更があった場合の作業を減らす@c +良い方法でもあります (@rprogram{convert-ly を使ってファイルを更新する} +を参照してください)。@c +あなたがあなたの入力ファイルすべてに使用する単一の定義 +(@code{\dolce} のような) を持っていて、構文が変更された場合、@c +すべての @code{.ly} ファイルを変更する代わりに、@c +@code{@bs{}dolce} 定義をアップデートするだけで済みます。 +(@ref{スタイル シート} を参照してください。) + + +@node 楽譜とパート +@subsection 楽譜とパート +@translationof Scores and parts + +オーケストラ音楽では、すべての音符は 2 回譜刻されます。@c +1 回は演奏家のためのパート譜で、1 回は指揮者のための総譜で譜刻されます。@c +変数を使うことで二度手間を避けることができます。@c +音楽は 1 回、変数に入力されます。@c +その変数の内容は、パート譜と総譜の両方を生成するために使用されます。 + +音符を特別なファイルの中に定義すると便利です。@c +例えば、ファイル @code{horn-music.ly} は@c +以下のホルン/@/バスーン デュオのパートを保持しているとします: + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e4 d | +@} +@end example + +@noindent +個々のパートは、ファイルの中に以下の記述をすることによって作り出されます: + +@example +\include "horn-music.ly" + +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +以下の行: + +@example +\include "horn-music.ly" +@end example + +@noindent +は、ファイルの中でその行が置かれている場所で、@c +@file{horn-music.ly} の内容に置き換わり、@c +@code{hornNotes} の定義になります。@c +@code{\transpose f@tie{}c'} は、@c +引数 @code{\hornNotes} は 5 度上へ移調すべきであるということを@c +示しています。@c +@code{f} の音は譜面に表記された @code{c'} で表され、@c +これは通常のフレンチ ホルンを F にチューニングすることに相当します。@c +この移調により出力は以下のようになります: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +アンサンブルでは、しばしばボイスの 1 つが何小節も演奏されないことがあります。@c +これは特別な休符 -- 複小節休符 -- によって示されます。@c +これは大文字の @code{R} とその後に続く演奏時間 +(全音符には @code{1}、半音符には @code{2} などです) で入力されます。@c +この演奏時間に掛け算を行うことによって、@c +さらに長い休符を構築することができます。@c +例えば、以下の休符は 2/4 拍子で 3 小節分の長さになります: + +@example +R2*3 +@end example + +この部分を譜刻するとき、複小節休符を圧縮する必要があります。@c +これは以下のラン-タイム変数を設定することによって行います: + +@example +\set Score.skipBars = ##t +@end example + +@noindent +このコマンドは @code{Score} コンテキストの中にある@c +プロパティ @code{skipBars} を真 (@code{##t}) にセットします。@c +この休符とオプションを上記の音楽の先頭に追加することによって、@c +以下のような結果になります: + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +楽譜はすべての音楽を一緒にすることによって作り出されます。@c +他のボイスはファイル @file{bassoon-music.ly} の中の @code{bassoonNotes} の@c +中にあると仮定すると、楽譜は以下のような記述で作られます: + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +そして、以下のような楽譜になります: + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond + diff --git a/Documentation/ja/learning/preface.itely b/Documentation/ja/learning/preface.itely new file mode 100644 index 0000000000..387a8852cd --- /dev/null +++ b/Documentation/ja/learning/preface.itely @@ -0,0 +1,61 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: c028761d49ac4820206806dbc58e9704a87b4a8 + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + +@node 序文 +@unnumbered 序文 +@translationof Preface + +それは 1995 年のある日の EJE (Eindhoven Youth Orchestra) のリハーサル中のでき@c +ごとでした − ある変わり者のバイオリン奏者であるジャンは同じく変わり者のフレン@c +チホルン奏者のハン-ウェンに彼がかかわっている新しい大きなプロジェクトのことを@c +話しました。それは音楽を出版するための自動化されたシステムです (正確には、それ@c +は MPP − MusiXTeX のプリプロセッサです)。それを聞いてハン-ウェンはすぐに楽譜か@c +らいくつかの部分をプリントアウトしたいと思い、彼はそのためのソフトウェアを探し@c +始め、すぐにその虜になってしまいました。それが MPP の終わりを決定付けました。@c +多くの哲学的考察を含み白熱した email の交換の後、ハン-ウェンは 1996 年に @c +LilyPond の製作を開始しました。この時、ジャンはハン-ウェンの新しいプロジェクト@c +に引きずり込まれました。 + +ある意味、コンピュータ プログラムを開発することは楽器の演奏方法を学ぶことに似@c +ています。最初は、それ (プログラムや楽器) がどのように機能するか考えていくこと@c +が楽しみであり、できなかったことをできるようにするのは挑戦です。最初の興奮が@c +去った後は、あなたは練習を積み重ねなければなりません。練習や勉強は退屈であり、@c +他の人 − 先生、指揮者、聴衆 − からの動機付けを得なければあなたはすぐにあきらめ@c +てしまうことでしょう。継続して少しずつ演奏を重ねていくことはあなたの生活の一部@c +となります。あるときは演奏することはごく自然で素晴らしいことに感じ、さらにある@c +ときはうまくいきません。それでも、あなたは来る日も来る日も演奏を続けます。 + +音楽活動と同様に、LilyPond への取り組みも退屈なものになる可能性があり、あると@c +きはバグの泥沼をこつこつと克服していくような感じになります。けれども、それは@c +我々の生活の一部であり、我々はそれを続けます。おそらく最大の動機付けは、我々の@c +プログラムが実際に人々のために何らかの形で役に立つということでしょう。我々がイ@c +ンターネットを閲覧していると、多くの人々が LilyPond を使用し、印象的な楽譜を出@c +版していることがわかります。そういったものを見ることはまるで現実ではないようで@c +すが、とてもうれしいことです。 + +我々のユーザは我々のプログラムを使って我々を喜ばせてくれるだけではなく、彼らの@c +多くは我々に提案をくれたり、バグの報告を送ってくれます。そのため、我々はすべて@c +のユーザにバグ報告を送ってくれたり、提案をくれたり、その他の形で LilyPond に貢@c +献してくれることを感謝したいです。 + +音楽を演奏することと楽譜をプリントすることは素晴らしい類似であるばかりではあり@c +ません。一緒にプログラミングをすることは大いなる楽しみであり、人々の役に立つこ@c +とは深い満足感を与えてくれます。しかし、究極的には LilyPond への取り組みは我々@c +の音楽に対する深い愛情の表われなのです。あなたが多くの美しい音楽を作り出すのに +LilyPond が役に立ちますように! + +Han-Wen と Jan + +2002 年 7 月、オランダ ユトレヒト/アイントホーフェン diff --git a/Documentation/ja/learning/templates.itely b/Documentation/ja/learning/templates.itely new file mode 100644 index 0000000000..0a86faecc9 --- /dev/null +++ b/Documentation/ja/learning/templates.itely @@ -0,0 +1,246 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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" + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node テンプレート +@appendix テンプレート +@translationof Templates + +このセクションにはセットアップ済みの LilyPond 楽譜テンプレートがあります。@c +音符を付け加えて、LilyPond を実行してください。@c +あとは美しく譜刻された楽譜をお楽しみください! + +@c bad node name for ancient notation to avoid conflict +@menu +* 単一の譜表:: +* ピアノ テンプレート:: +* 弦楽四重奏:: +* 合唱:: +* オーケストラ テンプレート:: +* 古代の記譜法テンプレート:: +* その他のテンプレート:: +@end menu + + +@node 単一の譜表 +@appendixsec 単一の譜表 +@translationof Single staff + +@appendixsubsec 音符のみ + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-only-notes.ly} + +@appendixsubsec 音符と歌詞 + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-notes-and-lyrics.ly} + +@appendixsubsec 音符とコード + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes-and-chords.ly} + +@appendixsubsec 音符、歌詞それにコード + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes,-lyrics,-and-chords.ly} + + +@node ピアノ テンプレート +@appendixsec ピアノ テンプレート +@translationof Piano templates + +@appendixsubsec ソロ ピアノ + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-simple.ly} + +@appendixsubsec ピアノと歌詞を持つ旋律 + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-melody-and-lyrics.ly} + +@appendixsubsec 歌詞が中央に配置されたピアノ譜 + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-lyrics.ly} + +@appendixsubsec 強弱記号が中央に配置されたピアノ譜 + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-dynamics.ly} + + +@node 弦楽四重奏 +@appendixsec 弦楽四重奏 +@translationof String quartet + +@appendixsubsec 弦楽四重奏 +@translationof String quartet + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-simple.ly} + +@appendixsubsec 弦楽四重奏パート + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-with-separate-parts.ly} + + +@node 合唱 +@appendixsec 合唱 +@translationof Vocal ensembles + +@appendixsubsec SATB ボーカル譜 + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template.ly} + +@appendixsubsec SATB ボーカル譜と自動ピアノ譜 + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-automatic-piano-reduction.ly} + +@appendixsubsec 整列されたコンテキストを持つ SATB + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} + +@appendixsubsec 4 つの譜に配置された SATB + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{satb-choir-template---four-staves.ly} + +@appendixsubsec ソロと 2 パートのリフレイン + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-verse-and-refrain.ly} + +@appendixsubsec Hymn tunes +@c Hymn tunes + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{hymn-template.ly} + +@appendixsubsec 賛美歌 +@c Psalms + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{anglican-psalm-template.ly} + + +@node オーケストラ テンプレート +@appendixsec オーケストラ テンプレート +@translationof Orchestral templates + +@appendixsubsec オーケストラ、合唱それにピアノ +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{orchestra,-choir-and-piano-template.ly} + + +@c bad node name to avoid node name conflict +@node 古代の記譜法テンプレート +@appendixsec 古代の記譜法テンプレート +@translationof Ancient notation templates + +@appendixsubsec Transcription of mensural music + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-mensural-music.ly} + +@appendixsubsec Gregorian transcription template + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + + +@node その他のテンプレート +@appendixsec その他のテンプレート +@translationof Other templates + +@appendixsubsec 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 diff --git a/Documentation/ja/learning/tutorial.itely b/Documentation/ja/learning/tutorial.itely new file mode 100644 index 0000000000..61bbd759c0 --- /dev/null +++ b/Documentation/ja/learning/tutorial.itely @@ -0,0 +1,827 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: c028761d49ac4820206806dbc58e9704a87b4a8e + + 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 + +@include included/generating-output.itexi + +@c \version "2.14.0" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node チュートリアル +@chapter チュートリアル +@translationof Tutorial + +この章は LilyPond に取り組むための基本的な入門書です。 + +@menu +* ファイルをコンパイルする:: +* 入力ファイルの書き方:: +* エラーに対処する:: +* このマニュアルの読み方:: +@end menu + + +@node ファイルをコンパイルする +@section ファイルをコンパイルする +@translationof Compiling a file + +このセクションでは @qq{コンパイル}---出力ファイルを作り出すために +(あなたが記述した) LilyPond 入力ファイルを処理すること---について説明します。 + +@menu +* 入力を作成する:: +* MacOS X:: +* Windows:: +* コマンド ライン:: +@end menu + + +@node 入力を作成する +@subsection 入力を作成する +@translationof Entering input + +@cindex compiling (コンパイルする) +@cindex first example (最初の例) +@cindex example, first (最初の例) +@cindex case sensitive (大文字と小文字を区別する) + +@qq{コンパイル} は LilyPond フォーマットで書かれた入力ファイルから@c +出力ファイルを作り出す処理を意味する用語です。 +出力ファイルは一般に PDF (印刷や閲覧用)、MIDI (演奏用)、それに PNG +(オンラインで使用) + + +ため、そして (オプションとして) 演奏可能な MIDI ファイルを@c +作り出すために処理することを意味する用語です。@c +LilyPond 入力ファイルはシンプルなテキストファイルです。@c +最初の例ではシンプルな入力ファイルがどのようなものかを示します。 + +楽譜を作成するために、我々は記譜法を指定する入力ファイルを書きます。@c +例えば、以下のように書くと: + +@example +\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + +@noindent +結果は以下のようになります: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +@c strong内で {} を使用しようとした場合、なぜか下記のような表記にしなければ +エラーが発生した +@c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +@warning{LilyPond 入力の音符と歌詞は、 +@strong{@code{@{}} @strong{波括弧} @strong{@code{@}}} +で囲まれている必要があります。@c +さらに、あいまいさを避けるために、波括弧は行の最初か最後でない限りは@c +スペースによって囲まれているべきです。@c +波括弧はこのマニュアルのいくつかの例では省略されているかもしれませんが、@c +あなた自身が作成する楽譜では忘れないでください!@c +マニュアルの中にある例を表示する方法についての更なる情報については、@c +@ref{このマニュアルの読み方} を参照してください。} + +さらに、LilyPond 入力は@strong{大文字/小文字}の区別 があります。@c +@w{@code{@{ c d e @}}} は有効な入力ですが、@c +@w{@code{@{ C D E @}}} はエラーになります。 + +@smallspace + + +@smallspace + +@subheading 出力を作り出す + +@cindex PDF file (PDF ファイル) +@cindex viewing music (楽譜を閲覧する) +@cindex text editors (テキストエディタ) + +出力を作り出す方法はあなたが使用している OS とプログラムに依存します。 + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (グラフィカルな方法) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (グラフィカルな方法) + +@item +@ref{Command-line, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Command-line, すべての OS} (コマンドライン) + +@end itemize + +LilyPond 用のサポートを有するテキストエディタが他にもいくつかあります。@c +更なる情報は、@rweb{より簡単な編集手段} を参照してください。 + +@warning{あなたが初めて LilyPond を実行した場合、1, 2 分かかるかもしれません。@c +なぜなら、まず最初にすべてのシステム フォントが分析されるからです。@c +それから後は、LilyPond はずっと早く実行されます!} + + +@node MacOS X +@subsection MacOS X +@translationof MacOS X + +@cindex running LilyPond under MacOS X (MacOS X で LilyPond を実行する) +@cindex MacOS X, running LilyPond (MacOS X で LilyPond を実行する) + +@lilypadOSX + + +@node Windows +@subsection Windows +@translationof Windows + +@cindex running LilyPond under Windows (Windows で LilyPond を実行する) +@cindex Windows, running LilyPond (Windows で LilyPond を実行する) + +@lilypadWindows + + +@node コマンド ライン +@subsection コマンド ライン +@translationof Command-line + +@cindex running LilyPond under Unix (Unix で LilyPond を実行する) +@cindex Unix, running LilyPond (Unix で LilyPond を実行する) + +@lilypadCommandLine + + +@node 入力ファイルの書き方 +@section 入力ファイルの書き方 +@translationof How to write input files + +このセクションでは、あなたが入力ファイルを書き始めるのを手助けするために +LilyPond の基本的な構文をいくつか紹介します。 + +@menu +* 簡単な記譜法:: +* 入力ファイルに取り組む:: +@end menu + + +@node 簡単な記譜法 +@subsection 簡単な記譜法 +@translationof Simple notation + +@cindex simple notation (簡単な記譜法) +@cindex notation, simple (簡単な記譜法) + +LilyPond はいくつかの記譜要素を自動的に追加します。@c +次の例では、我々は 4 つのピッチを指定しただけですが、LilyPond が音部記号、@c +拍子記号、リズムを加えています。 + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +この挙動は変更されるかもしれませんが、たいていのケースではこれらの自動値は@c +役に立ちます。 + + +@subheading ピッチ +@c ピッチ + +@cindex pitches (ピッチ) +@cindex relative mode (相対モード) +@cindex quote, single (シングル クォート) +@cindex comma (カンマ) +@cindex accidentals and relative mode (臨時記号と相対モード) +@cindex relative mode, and accidentals (臨時記号と相対モード) + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +音楽用語集: @rglos{pitch}, @rglos{interval}, +@rglos{scale}, @rglos{middle C}, @rglos{octave}, +@rglos{accidental} + +音符を入力するための最も簡単な方法は @code{\relative} モードを@c +使用することです。@c +このモードでは、後に続く音符は常に前の音符に最も近い場所になるという@c +仮定によって自動的にオクターブが選択されます。@c +つまり、音符は前の音符から 3 譜表スペース (訳者: 1 譜表スペースとは同じ音階の@c +ド→レ、レ→ミ、~の間隔のこと) 以内に置かれます。@c +我々はまず音楽の最も基本的な要素 -- @notation{音階} (ここでは各音符は@c +前の音符からちょうど 1 譜表スペースの位置にきます) -- からはじめます。 + +@lilypond[verbatim,quote] +% set the starting point to middle C +\relative c' { + c d e f + g a b c +} +@end lilypond + +最初の音符は@notation{ミドル C} です。@c +一連の音符はそれぞれ前の音符と最も近い場所に置かれています -- +言い換えると、最初の @code{c} はミドル C に最も近い C です。@c +これに前の音符に最も近い D が続きます。@c +我々は @code{\relative} モードだけを使って@c +より大きな音程を持つ旋律を作ることができます: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +旋律の最初の音符が開始ピッチを指定している音符である必要はありません。@c +前の例では、最初の音符 -- @code{d} -- はミドル C に最も近い D です。 + +@code{@w{\relative c' @{}} コマンドにクォート @code{'} やカンマ @code{,} を@c +付け加える (あるいは取り除く) ことによって、@c +開始オクターブを変更することができます: + +@lilypond[verbatim,quote] +% one octave above middle C +\relative c'' { + e c a c +} +@end lilypond + +相対モードは最初のうちは混乱を引き起こす可能性がありますが、@c +たいていの旋律を入力するのに最も容易な方法です。@c +相対計算が実際にどのように行われるのか見てみましょう。@c +B -- ト音記号の譜面の真ん中の譜線上にあります -- から開始すると、C, D, E は@c +上方向に 3 譜表スペース以内にあり、A, G, F は下方向に 3 譜表スペース以内に@c +あります。@c +そのため、B の後に続く音符が C, D, E である場合、その音符は B の上に置かれ、@c +A, G, F である場合は B の下に置かれます。 + +@c KEEP LY +@lilypond[verbatim,quote] +\relative c'' { + b c % c は b よりも 1 譜表スペース上なので、c は b の上になります + b d % d は 2 つ上または 5 つ下なので、d は上になります + b e % e は 3 つ上または 4 つ下なので、e は上になります + b a % a は 6 つ上または 1 つ下なので、a は下になります + b g % g は 5 つ上または 2 つ下なので、g は下になります + b f % f は 4 つ上または 3 つ下なので、f は下になります +} +@end lilypond + +これらの音符のいずれかにシャープやフラットが付いたとしても@c +まったく同じことが起こります。@c +相対位置の算出時に@notation{臨時記号}は@strong{完全に無視}されます。@c +譜表上の他のいずれかの位置にある音符からの譜表スペース数もまったく同じです。 + +3 譜表スペースよりも大きな音程を加えるために、シングル クォート @code{'} +(あるいはアポストロフィ) を音符名に付け加えることによって@c +@notation{オクターブ}を上げることができます。@c +音符名にカンマ @code{,} を付け加えることによってオクターブを@c +下げることができます。 + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +音符を 2 オクターブ (あるいはそれ以上) 変えるには、複数化した @code{''} や +@code{,,} を使用します -- しかしながら、1 つのダブル クォート @code{"} +ではなく、2 つのシングル クォートを使用するよう注意してください!@c +また、@code{@w{\relative c'}} の中の最初の値もこのように@c +変更されるかもしれません。 +@c " - keeps quotes in order for context-sensitive editor -td + + +@subheading 演奏時間 (リズム) +@c Durations (rhythms) +@c 演奏時間 (原語: Durations, リズム) + +@cindex note durations (音符の演奏時間) +@cindex durations (演奏時間) +@cindex rhythms (リズム) +@cindex whole note (全音符) +@cindex half note (半音符) +@cindex quarter note (4 分音符) +@cindex dotted note (付点音符) +@cindex notating durations (演奏時間を記譜する) + +音楽用語集: @rglos{beam}, @rglos{duration}, +@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, +@rglos{dotted note} +@c 連桁 (beam), 演奏時間 (duration), 全音符 (whole note), 半音符 (half note), +@c 4 分音符 (quarter note), 付点音符 (dotted note) + +音符の@notation{演奏時間}は音符名の後の番号によって指定されます。@c +@notation{全音符}には @code{1} を、@notation{半音符}には @code{2} を、@c +@notation{4 分音符}には @code{4} を、などです。@c +@notation{連桁} +(符幹と符幹をつなぐ横棒。符幹は符頭から上下にでる縦棒。符頭は音符の玉) +は自動的に追加されます。 + +あなたが演奏時間を指定しなかった場合、@c +前の音符の演奏時間が次の音符の演奏時間に対しても使用されます。@c +最初の音符のデフォルトの演奏時間は 4 分音符です。 + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +@notation{付点音符}を作成するには、@c +演奏時間数にドット @code{.} を付け加えます。@c +付点音符の演奏時間は明記されなければなりません (つまり、数字で)。 + +@lilypond[verbatim,quote] +\relative c'' { + a4 a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading 休符 +@c Rests + +@cindex rest (休符) +@cindex notating rests (休符を記譜する) + +音楽用語集: @rglos{rest} +@c 休符 (rest) + +@notation{休符}は @code{r} という名前の音符のような形で入力されます: + +@lilypond[verbatim,quote] +\relative c'' { + a r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading 拍子記号 +@c Time signature + +@cindex time signature (拍子記号) + +@funindex \time +@funindex time + +音楽用語集: @rglos{time signature} +@c 拍子記号 (time signature) + +@notation{拍子記号}は @code{\time} コマンドでセットすることができます: + +@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 テンポ記号 +@c Tempo marks + +@cindex tempo marks (テンポ記号) +@cindex metronome marks (メトロノーム記号) + +@funindex \tempo +@funindex tempo + +音楽用語集: @rglos{tempo indication}, @rglos{metronome} + +@notation{テンポ指示} と @notation{メトロノーム記号} は +@code{\tempo} コマンドでセットすることができます: + +@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 + + +@subheading 音部記号 +@c Clef + +@cindex clef (音部記号) +@cindex treble (ト音記号、高音部記号) +@cindex alto (アルト) +@cindex tenor (テナー) +@cindex bass (バス) + +@funindex \clef +@funindex clef + +音楽用語集: @rglos{clef} +@c : 音部記号 (clef) + +@notation{音部記号}は @code{\clef} コマンドを使ってセットすることができます: + +@lilypond[verbatim,quote] +\relative c' { + \clef treble + c1 + \clef alto + c1 + \clef tenor + c1 + \clef bass + c1 +} +@end lilypond + + +@subheading すべてをまとめて +@c All together + +以上の要素をすべて集めたちょっとした例をお見せします: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + \tempo "Andante" 4 = 120 + c2 e8 c' + g'2. + f4 e d + c4 c, r +} +@end lilypond + + +@seealso +記譜法リファレンス: +@ruser{ピッチを記述する}, +@ruser{リズムを記述する}, +@ruser{休符を記述する}, +@ruser{拍子}, +@ruser{音部記号} + + +@node 入力ファイルに取り組む +@subsection 入力ファイルに取り組む +@translationof Working on input files + +@cindex curly braces (波括弧) +@cindex braces, curly (波括弧) +@cindex comments (コメント) +@cindex line comment (行コメント) +@cindex comment, line (行コメント) +@cindex block comment (ブロック コメント) +@cindex comment, block (ブロック コメント) +@cindex case sensitive (大文字と小文字を区別する) +@cindex whitespace insensitive (空白を無視する) +@cindex expressions (表記) +@cindex versioning (バージョンを付ける) +@cindex version (バージョン) +@cindex version number (バージョン番号) + +@funindex \version +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + +LilyPond 入力ファイルは多くの一般的なプログラミング言語のソース ファイルと@c +同じようなものです。@c +それらは大文字/小文字の区別があり、空白はたいてい無視されます。@c +表記は波括弧 @{ @} で囲まれ、@code{%} または @w{@code{%@{ .. %@}}} で@c +コメントになります。 + +上の文章があなたにとって意味不明だとしても、心配ありません!@c +我々がそれらの用語の意味を説明します: + +@itemize + +@item +@strong{バージョン宣言}: +すべての LilyPond ファイルにはバージョン宣言を持たせるべきです。@c +バージョン宣言は、そのファイルが LilyPond のどのバージョン用に@c +書かれたのかを説明します。@c +バージョン宣言は以下の例のように記述します: + +@example +\version "@w{@version{}}" +@end example + +規則上、バージョン宣言は LilyPond ファイルの先頭に配置します。 + +バージョン宣言は少なくとも 2 つの理由で重要です。@c +1 つ目の理由は、LilyPond 構文が変更された場合に、@c +入力ファイルを自動アップデートすることを可能にします。@c +2 つ目の理由は、そのファイルをコンパイルするのに必要な LilyPond の@c +バージョンが判断できます。 + +入力ファイルでバージョン宣言を省略した場合、@c +ファイルのコンパイル中に LilyPond は警告を表示します。 + + +@item +@strong{大文字/小文字の区別}: +あなたが小文字 (つまり、@w{@code{a, b, s, t)}} で入力するか、@c +大文字 (つまり、@w{@code{A, B, S, T}}) で入力するかの違いです: +@w{@code{@{ c d e @}}} は有効な入力ですが、@c +@w{@code{@{ C D E @}}} ではエラーになります。 + +@item +@strong{空白は無視される}: +あなたがどれくらい多くのスペース (または新しい行) を追加しても@c +問題にならないということです。@c +@w{@code{@{ c d e @}}} は @w{@code{@{ c @tie{}} @tie{} @tie{} d e @}} や@c +以下と同じ意味になります: + +@example +@{ c d + e @} +@end example + +@noindent +もちろん、このような書き方をすると読みにくいです。@c +見やすい書き方は、@c +コード ブロックにタブか 2 つのスペースでインデントを付けることです: + +@example +@{ + c d e +@} +@end example + +しかしながら、多くの構文要素を他の要素と区切るために必要とされます。@c +言い換えると、常に空白を @emph{付け加える} ことは可能ですが、@c +常に空白を @emph{削除} できるわけではありません。@c +空白が足りないためにエラーが発生することあり、@c +すべての構文要素の前後に空白を入れることは有用なことです。 + +@item +@strong{表記}: +LilyPond 入力の各部分は @strong{@{ 波括弧 @}} で囲まれている必要があります。@c +これらの波括弧は LilyPond に入力が単一の音楽表記であることを教えます。@c +これはちょうど数学での括弧 @code{()} のようなものです。@c +あいまいさを避けるために、波括弧は行の先頭か終端にないかぎりスペースで@c +囲まれているべきです。 + +波括弧で囲まれた表記が後に続く LilyPond コマンド +(@q{@w{@code{@bs{}relative c' @{ @dots{} @}}}} など) +もまた単一の音楽表記としてカウントされます。 + +@cindex comments (コメント) +@cindex line comment (行コメント) +@cindex block comment (ブロック コメント) + +@item +@strong{コメント}: +コメントは音楽入力を読む人間のための注釈です。@c +これは構文解析中には無視されるため、譜刻される出力には影響を与えません。@c +コメントには 2 つのタイプがあります。@c +パーセント記号 @code{%} は行コメントになります。@code{%} の後の文字は@c +無視されます。@c +慣習上、行コメントはそのコメントが参照するコードの上に置かれます。 + +@example +a4 a a a +% このコメントは B を持つ行を参照します +b2 b +@end example + +ブロック コメントは音楽入力のある部分全体をコメントにします。@c +@code{%@{} と @code{%@}} で囲まれた部分は無視されます。@c +しかしながら、ブロック コメントを @q{ネスト} させることはできません。@c +このことはあるブロック コメントを他のブロック コメントの中に@c +置くことはできないということを意味します。@c +そうした場合、最初の @code{%@}} は両方のブロック コメントを@c +終わらせてしまいます。@c +以下のコード断片はコメントの使用例を示しています: + +@example +% 以下はキラキラ星です + c4 c g' g a a g2 + +%@{ + この行と以下の音符は無視されます。 + なぜなら、これらはブロック コメントの中にあるからです + + f f e e d d c2 +%@} +@end example + +@end itemize + + +@node エラーに対処する +@section エラーに対処する +@translationof Dealing with errors + +@cindex troubleshooting (トラブルシュート) + +時には LilyPond はあなたが予期したような出力を作り出さないことがあります。@c +このセクションでは、あなたが遭遇するかもしれない問題を解決するのに@c +役立つリンクをいくつか提供します。 + +@menu +* 一般的なトラブルシュート Tips:: +* いくつかの一般的なエラー:: +@end menu + + +@node 一般的なトラブルシュート Tips +@subsection 一般的なトラブルシュート Tips +@translationof General troubleshooting tips + +LilyPond で発生する問題をトラブルシュートすることは、@c +グラフィカルインターフェイスに慣れ親しんだ人々にとっては@c +骨の折れることかもしれません。@c +なぜなら無効な入力ファイルが生成される可能性があるからです。@c +問題が発生した時は、論理的なアプローチが問題を特定して解決する最善の方法です。@c +トラブルシュートの仕方を学ぶのに役立つガイドラインが +@rprogram{トラブルシュート} で提供されています。 + + +@node いくつかの一般的なエラー +@subsection いくつかの一般的なエラー +@translationof Some common errors + +@cindex common errors (一般的なエラー) +@cindex errors, common (一般的なエラー) + +表示されるエラーメッセージだけでは解決が難しい一般的なエラーがいくつかあります。@c +それらのエラーについて @rprogram{一般的なエラー} で記述されています。 + + +@node このマニュアルの読み方 +@section このマニュアルの読み方 +@translationof How to read the manuals + +このセクションではドキュメントを効率的に読む方法を示し、@c +さらに、オンライン版で利用できる有用な対話的機能をいくつか紹介します。 + +@menu +* 省略された構成要素:: +* クリック可能な例:: +* マニュアルの概要:: +@end menu + + +@node 省略された構成要素 +@subsection 省略された構成要素 +@translationof Omitted material + + +@cindex how to read the manual (このマニュアルの読み方) +@cindex manual, reading (マニュアルを読む) +@cindex reading the manual (このマニュアルを読む) +@cindex examples, clickable (クリック可能な例) +@cindex clickable examples (クリック可能な例) +@cindex tips for constructing files (ファイルを構築するための Tips) +@cindex templates (テンプレート) +@cindex constructing files, tips (ファイルを構築するための Tips) +@cindex files, tips for constructing (ファイルを構築するための Tips) + +@c @ref{Working on input files} +@ref{入力ファイルに取り組む} で見てきたように、LilyPond 入力は @{ @} マークか +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +で囲まれていなければなりません。@c +このマニュアルの残りの部分では、たいていの例はこのことを省略しています。@c +このマニュアルにある例を複製するためにあなたは表示されている入力を@c +コピーするかもしれませんが、あなたは以下のように +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +を付け加えなければなりません: + +@example +\relative c'' @{ + @dots{}例がここに来ます@dots{} +@} +@end example + +なぜ波括弧を省略するのか?@c +このマニュアルの中のたいていの例はより大きな音楽の途中に@c +挿入することができます。@c +これらの例に対して @q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +を付け加えることには意味がありません +-- あなたはある @code{\relative} を他の @code{\relative} の +中に置くべきではありません!@c +すべての例の周りに +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +を置いてしまうと、@c +あなたは小さな例をコピーして、それをより大きなあなた自身の音楽の中に@c +ペーストすることができなくなってしまいます。@c +たいていの人は資料を既存の楽曲に付け加えようとしますので、@c +我々はそのようにマニュアルを形作っています。 + +さらに、すべての LilyPond ファイルは @code{\version} 宣言を持つべきである@c +ということを思い出してください。@c +マニュアルの中の例はコードの断片であり、ファイルではないため、@c +@code{\version} 宣言は省略されています。@c +しかしながら、あなたは入力ファイルの中にバージョン宣言を記述すべきです。 + + +@node クリック可能な例 +@subsection クリック可能な例 +@translationof Clickable examples + +@warning{この機能は HTML マニュアルでのみ利用可能です。} + +多くの人々はすでにあるプログラムを試したり、いじったりすることで@c +プログラムを学びます。@c +これは LilyPond でも可能です。@c +このマニュアルの HTML バージョンの中にある画像をクリックすると、@c +画像を生成するために使用された正確な LilyPond 入力を見ることができます。@c +以下の画像を試してみてください: + +@c no verbatim here +@lilypond[quote] +\relative c'' { + c-\markup { \bold \huge { ここをクリックしてください } } +} +@end lilypond + +@q{ly コード断片} セクションにある記述をカット&ペーストすることによって、@c +あなたは LilyPond を経験するための開始テンプレートを入手できます。@c +まったく同じもの (線の太さなどもすべて同じ) を出力させるには、@c +@qq{Start cut-&-pastable section} からファイルの最後までをコピーしてください。 + + +@ignore +@node キーボード ナビゲーション +@unnumberedsubsec キーボード ナビゲーション +@translationof Keyboard navigation +@end ignore + + +@node マニュアルの概要 +@subsection マニュアルの概要 +@translationof Overview of manuals + +LilyPond にはたくさんのドキュメントがあります。@c +新しいユーザは時々ドキュメントのどこを読むべきなのか混乱し、@c +時には必須の部分を読み飛ばしてしまいます。 + +@warning{ドキュメントの重要な部分を読み飛ばさないでください。@c +その後のセクションを理解することがはるかに難しくなります。} + +@itemize + +@item +@strong{LilyPond に取り組もうとする前}: 学習マニュアルの @ref{チュートリアル} +と @ref{一般的な記譜法} を読んでください。@c +理解できない音楽用語に遭遇した場合は、@rglosnamed{Top, 音楽用語集} で調べてください。 + +@item +@strong{楽譜全体を記述しようとする前}: 学習マニュアルの +@ref{基礎となるコンセプト} を読んでください。@c +読み終わった時、@rusernamed{Top, 記譜法リファレンス} の関係のあるセクションを@c +読もうと思うかもしれません。 + +@item +@strong{デフォルトの出力を変更しようとする前}: 学習マニュアルの +@ref{出力を調整する} を読んでください。 + +@item +@strong{大きなプロジェクトに取りかかる前}: 使用方法の +@rprogram{LilyPond 入力ファイルの記述に対する提案} を読んでください。 + +@end itemize + diff --git a/Documentation/ja/learning/tweaks.itely b/Documentation/ja/learning/tweaks.itely new file mode 100644 index 0000000000..929cebe429 --- /dev/null +++ b/Documentation/ja/learning/tweaks.itely @@ -0,0 +1,4379 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: b5a7328d19ebb2e40c3fbb7f1715b6023dc8329d + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 出力を調整する +@chapter 出力を調整する +@translationof Tweaking output + +この章では出力を変更する方法について議論します。@c +LilyPond は本当にさまざまな設定が可能です。@c +もしかすると出力のすべての部分が変更されるかもしれません。 + +@menu +* 調整の基本:: +* 内部リファレンス マニュアル:: +* オブジェクトの見た目:: +* オブジェクトの配置:: +* オブジェクトの衝突:: +* 更なる調整:: +@end menu + +@node 調整の基本 +@section 調整の基本 +@translationof Tweaking basics + +@menu +* 調整の紹介:: +* オブジェクトとインタフェイス:: +* オブジェクトとプロパティの命名規則:: +* 調整手段:: +@end menu + + +@node 調整の紹介 +@subsection 調整の紹介 +@translationof Introduction to tweaks + +@q{調整} は入力ファイルの解釈中にとられるアクションを変更し、@c +譜刻される楽譜の見た目を変更するためにユーザが利用可能なさまざまな手段を指す +LilyPond の用語です。@c +いくつかの調整はとても簡単に使うことができます。@c +他の調整はもっと複雑です。@c +しかしながら、調整のために利用可能な手段を組み合わせることによって、@c +ほとんどいかなる望みの見た目を持った楽譜でも譜刻することが可能になります。 + +このセクションでは、調整を理解するのに必要な基礎となるコンセプトを@c +カバーします。@c +その後、コピーするだけで効果が得られる作成準備が完了している@c +さまざまなコマンドについての情報を提供し、@c +同時に、あなたがあなた自身の調整を開発する方法を学べるように@c +それらのコマンドがどのように構築されるのかを示します。 + +この章を読み始める前に、あなたは @ref{コンテキストとエングラーバ} を@c +再読することを望むかもしれません。@c +なぜなら、コンテキスト、エングラーバとそれらの中に含まれるプロパティは@c +調整について理解し、調整を構成するための基礎だからです。 + + +@node オブジェクトとインタフェイス +@subsection オブジェクトとインタフェイス +@translationof Objects and interfaces + +@cindex object (オブジェクト) +@cindex grob (グラフィカル オブジェクト) +@cindex spanner (スパナ) +@cindex interface (インタフェイス) +@cindex properties, object (オブジェクト プロパティ) +@cindex object properties (オブジェクト プロパティ) +@cindex layout object (レイアウト プロパティ) +@cindex object, layout (レイアウト プロパティ) + +調整には LilyPond プログラムの内部オペレーションと構造体への変更も含まれます。@c +そのため、我々はまずそれらの内部オペレーションと構造体を記述するために@c +使用されるいくつかの用語を導入しなければなりません。 + +@q{オブジェクト} という用語は入力ファイルを処理している最中に LilyPond に@c +よってビルドされる多くの内部構造体を参照するために使われる汎用的な用語です。@c +LilyPond が @code{\new Staff} のようなコマンドに遭遇した場合、@c +タイプ @code{Staff} の新しいオブジェクトを構築します。@c +その @code{Staff} オブジェクトは、その譜のコンテキスト内部で機能するために@c +割り当てられているエングラーバの詳細とともに、その譜に関連付けられている@c +すべてのプロパティ -- 例えば、その譜の名前、調号 -- を保持します。@c +同様に、@code{Voice} オブジェクト、@code{Score} オブジェクト、@c +@code{Lyrics} オブジェクトなどの他のすべてのコンテキストのプロパティを@c +保持するためのオブジェクトが存在し、さらに、小節線、符頭、タイ、強弱記号などの@c +すべての記譜要素を表すためのオブジェクトも存在します。@c +各オブジェクトはそれ自体のプロパティ値のセットを持ちます。 + +いくつかのタイプのオブジェクトには特別な名前が与えられています。@c +符頭、符幹、スラー、タイ、運指記号、音部記号などの譜刻される出力上の記譜要素を@c +表すオブジェクトは @q{レイアウト オブジェクト} と呼ばれ、@c +しばしば @q{グラフィカル オブジェクト} +あるいは短くして @q{グロッブ (Grob: GRaphical OBject)} と呼ばれます。@c +これらのオブジェクトも上記の汎用的な観点から見るとオブジェクトであり、@c +それゆえ、それらもまたそれらのオブジェクトに関連付けされたプロパティ -- +そのオブジェクトの位置、サイズ、色など -- を持ちます。 + +いくつかのレイアウト オブジェクトも特別です。@c +フレージング スラー、クレッシェンド、オッターバ記号、@c +他の多くのグラフィカル オブジェクトが置かれる場所は一点ではありません + -- それらは開始点、終了点、そしておそらくそれらの形に関係する@c +他のプロパティを持ちます。@c +これらのオブジェクトのように形が伸長されるオブジェクトは +@q{スパナ (Spanners)} と呼ばれます。 + +@q{インタフェイス} とは何なのかという説明が残っています。@c +多くのオブジェクト -- たとえそれらが非常に異なっていたとしても -- +は同じ方法で処理される必要がある共通特徴を共有します。@c +例えば、すべてのグラフィカル オブジェクトは色、サイズ、位置などを持ち、@c +これらのプロパティはすべて LilyPond が入力ファイルを構文解釈する最中に@c +同じ方法で処理されます。@c +これらの内部オペレーションを簡潔にするために、これらの共通アクションと@c +プロパティは 1 つのグループとして +@code{grob-interface} と呼ばれるオブジェクトにまとめられています。@c +これと同じような共有プロパティのグループ化が他にも多くあり、@c +それぞれに対して最後に @code{interface} が付く名前が与えられています。@c +そのようなインタフェイスの総数は 100 を越えます。@c +我々は後でなぜこれがユーザにとって利益となり、役に立つのかを見ていきます。 + +これらは、我々がこの章で使用するオブジェクトと関係する主要な用語です。 + + +@node オブジェクトとプロパティの命名規則 +@subsection オブジェクトとプロパティの命名規則 +@translationof Naming conventions of objects and properties + +@cindex naming conventions for objects (オブジェクトの命名規則) +@cindex naming conventions for properties (プロパティの命名規則) +@cindex objects, naming conventions (オブジェクトの命名規則) +@cindex properties, naming conventions (プロパティの命名規則) + +我々は以前にも @ref{コンテキストとエングラーバ} で@c +いくつかのオブジェクト命名規則を見てきました。@c +ここで参照のために、最も一般的なオブジェクトとプロパティをリストアップし、@c +それに加えてそれらの命名規則と実際の名前の例を挙げます。@c +何らかの大文字のアルファベットを表すために @q{A} を使用し、@c +いくつかの小文字のアルファベットを表すために @q{aaa} を使用しています。@c +他の文字は実際の命名でもそのまま使用されます。 + +@multitable @columnfractions .33 .33 .33 +@headitem オブジェクト/プロパティのタイプ + @tab 命名規則 + @tab 例 +@item コンテキスト + @tab Aaaa や AaaaAaaaAaaa + @tab Staff, GrandStaff +@item レイアウト オブジェクト + @tab Aaaa や AaaaAaaaAaaa + @tab Slur, NoteHead +@item エングラーバ + @tab Aaaa_aaa_engraver + @tab Clef_engraver, Note_heads_engraver +@item インタフェイス + @tab aaa-aaa-interface + @tab grob-interface, break-aligned-interface +@item コンテキスト プロパティ + @tab aaa や aaaAaaaAaaa + @tab alignAboveContext, skipBars +@item レイアウト オブジェクト プロパティ + @tab aaa や aaa-aaa-aaa + @tab direction, beam-thickness +@end multitable + +これから見ていくのですが、タイプが異なるオブジェクトのプロパティは@c +異なるコマンドによって変更されます。@c +そのため、プロパティの名前からオブジェクトの種類を識別できるようになると@c +役に立ちます。 + + +@node 調整手段 +@subsection 調整手段 +@translationof Tweaking methods + +@cindex tweaking methods (調性手段) + +@strong{\override コマンド} + +@cindex override command (override コマンド) +@cindex override syntax (override 構文) + +@funindex \override +@funindex override + +我々はすでに @ref{コンテキスト プロパティを変更する} と +@ref{エングラーバを追加 / 削除する} で @strong{コンテキスト} のプロパティを@c +変更したり、@strong{エングラーバ} を追加/削除したりするために使用するコマンド +@code{\set} と @code{\with} を見てきました。@c +ここでは更に重要ないくつかのコマンドについて見ていきます。 + +@strong{レイアウト オブジェクト} のプロパティを変更するためのコマンドは +@code{\override} です。@c +このコマンドは LilyPond の奥深くにある内部プロパティを@c +変更しなければならないため、@c +これまで見てきたコマンドのように単純な構文ではありません。@c +どのコンテキストの中にあるどのオブジェクトのどのプロパティを@c +変更しなければならないのか、そこにセットする新しい値を何にするのかを@c +正確に知っている必要があります。@c +どのようにこれを行うのかを見ていきましょう。 + +このコマンドの一般的な構文は以下のようなものです: + +@example +\override @var{Context}.@var{LayoutObject} #'@var{layout-property} = +#@var{value} +@end example + +@noindent +これは @var{Context} コンテキストのメンバである +@var{LayoutObject} という名前のレイアウトの +@var{layout-property} という名前のプロパティに値 @var{value} をセットします。 + +必要とされているコンテキストが明白であり、それが最下位レベルのコンテキストである +-- つまり、@code{Voice}, @code{ChordNames} や @code{Lyrics} である +-- 場合、その @var{Context} は省略可能可能であり (そして通常は省略されます)、@c +この後の例の多くでも省略します。@c +後ほど、コンテキストを指定しなければならない場合について見ていきます。 + +これから後のセクションでは広範囲に亘るプロパティとそれらの値を扱います。@c +しかしながら、そのフォーマットとそれらのコマンドの使用方法を示すためには、@c +容易に理解できる簡単なプロパティと値を 2, 3 使用してみるだけです。 + +今や、レイアウト プロパティの前に置かれなければならない @code{#'} や@c +プロパティ値の前に置かれなければならない @code{#} について心配する必要は@c +ありません。@c +これらは常にそのような形式で正確に記述されなければなりません。@c +これは調整では最も一般的に使用されるコマンドであり、この章の残りの部分の@c +大半ではプロパティ (変更コマンド) の使用方法を示すための例を記述しています。@c +ここでは符頭の色を変更する簡単な例を挙げます: + + +@cindex color property, example (color プロパティの例) +@cindex NoteHead, example of overriding (NoteHead をオーバライドする例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{\revert コマンド} + +@cindex revert command (revert コマンド) + +@funindex \revert +@funindex revert + +一旦オーバライドされると、そのプロパティは再度オーバライドされるか +@code{\revert} コマンドに遭遇するまで新しい値のままでいます。@c +@code{\revert} コマンドは以下の構文を持ち、@c +プロパティの値をオリジナルのデフォルト値に戻します。@c +何度か @code{\override} コマンドが発行されている場合は、@c +前の値に戻すわけではないということに注意してください。 + + +@example +\revert @var{Context}.@var{LayoutObject} #'@var{layout-property} +@end example + +繰り返しますが、@code{\override} コマンドでの @var{Context} と同様に、@c +多くの場合で @var{Context} を記述する必要はありません。@c +以下の例の多くで、@var{Context} は省略されます。@c +ここでは、最後の 2 つの音符の符頭の色をデフォルトに戻します: + +@cindex color property, example (color プロパティの例) +@cindex NoteHead, example of overriding (NoteHead をオーバライドする例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a +\revert NoteHead #'color +b4 c | +@end lilypond + +@strong{\once 接頭辞} + +@funindex \once +@funindex once + +@code{\override} コマンドと @code{\set} コマンドには両方とも@c +接頭辞 @code{\once} が付く可能性があります。@c +これはその後に続く @code{\override} や @code{\set} コマンドを@c +その場一回限り有効にし、その後にそのプロパティの値をデフォルト値に戻します。@c +上と同じ例を使って、以下のように 1 つだけの音符の色を変更することができます: + +@cindex color property, example (color プロパティの例) +@cindex NoteHead, example of overriding (NoteHead をオーバライドする例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\once \override NoteHead #'color = #red +e4 f | +\once \override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{\overrideProperty コマンド} + +@cindex overrideProperty command (overrideProperty コマンド) + +@funindex \overrideProperty +@funindex overrideProperty + +オーバライド コマンドには @code{\overrideProperty} という@c +もう 1 つのフォーマットがあり、時々必要となります。@c +完璧を期すためにここでこれに言及しましたが、@c +詳細は @rextend{Difficult tweaks} を参照してください。 +@c Maybe explain in a later iteration -td + +@strong{\tweak コマンド} + +@cindex tweak command (tweak コマンド) + +@funindex \tweak +@funindex tweak + +利用可能な最後の調整コマンドは @code{\tweak} です。@c +これは同じタイミングで起こるオブジェクト +-- 和音の中にある音符などのように -- +のプロパティを変更するために使用されます。@c +@code{\override} コマンドを使用すると和音の中にあるすべての音符に@c +影響を与えます。@c +一方、@code{\tweak} は入力ストリームの中でその @code{\tweak} の@c +すぐ後にある要素 1 つだけに影響を与えます。 + +ここで例を挙げます。@c +C メジャー コードの中にある真ん中の音符 (ミドル E) の符頭のサイズを@c +変更したいとします。@c +まず最初に、@code{\once \override} だとどうなるか見てみましょう: + +@cindex font-size property, example (font-size プロパティの例) +@cindex NoteHead, example of overriding (NoteHead をオーバライドする例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +\once \override NoteHead #'font-size = #-3 +4 +4 +@end lilypond + +このオーバライドは和音の中にある@emph{すべて}の符頭に影響を与えています。@c +これは和音の中にあるすべての音符が同じ @emph{タイミング} で起こるためであり、@c +@code{\once} のアクションは @code{\override} と同様に同じタイミングで起こる、@c +指定されたタイプすべてのレイアウト オブジェクトへのオーバライドに適用されます。 + +@code{\tweak} コマンドはこれとは異なるやり方で処理されます。@c +これは入力ストリームの中ですぐ後に続く要素にだけ作用します。@c +しかしながら、これは入力ストリームから直接作成されるオブジェクト +-- 本質的に符頭とアーティキュレーション -- にだけ効果を持ちます。@c +符幹や臨時記号などのオブジェクトは後で作成されるため、@c +この方法では調整できません。@c +さらに、@code{\tweak} が符頭に適用される場合、@c +それらは和音の内部になければ @emph{なりません} +-- つまり、単一山括弧 @code{< .. >} の内部です。@c +そのため、単一の音符 (和音ではない音符) を調整するには、@c +@code{\tweak} コマンドはその音符とともに@c +単一の山括弧で囲わなければなりません。 + +それでは例に戻り、この方法で和音の真ん中の音符のサイズを変更します: + +@cindex font-size property, example (font-size プロパティの例) +@cindex @code{\tweak}, example (@code{\tweak} の例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +4 +@end lilypond + +@code{\tweak} の構文は @code{\override} コマンドの構文とは@c +異なるということに注意してください。@c +コンテキストもレイアウト オブジェクトも指定されません。@c +実際、それらを指定するとエラーになります。@c +これらは両方とも入力ストリームの中で後に続く要素によって示されます。@c +さらに、イコール記号を使うべきではないということに注意してください。@c +そのため、@code{\tweak} コマンドの一般的な構文は単純に以下のようになります: + +@example +\tweak #'@var{layout-property} #@var{value} +@end example + +さらに、@code{\tweak} コマンドは一連のアーティキュレーションの中にある@c +ただ 1 つのアーティキュレーションを変更されるためにも使用できます。@c +ここに例を挙げます: + +@cindex color property, example (color プロパティの例) +@cindex @code{\tweak}, example (@code{\tweak} の例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4^"Black" + -\tweak #'color #red ^"Red" + -\tweak #'color #green _"Green" +@end lilypond + +@noindent +@code{\tweak} コマンドは、まるでそれがアーティキュレーションの@c +一部であるかのように、アーティキュレーション マークの前に@c +置かれなければならないということに注意してください。 + +@cindex tuplets, nested (ネストされた連符) +@cindex triplets, nested (ネストされた 3 連符) +@cindex bracket, tuplet (連符の囲み) +@cindex bracket, triplet (3 連符の囲み) +@cindex tuplet bracket (連符の囲み) +@cindex triplet bracket (3 連符の囲み) + +@funindex TupletBracket + +さらに、@code{\tweak} コマンドは、同時に起こるネストされた@c +連符記号のセットのうちの 1 つの見た目を変更するためにも使用されます。@c +以下の例では、長い連符記号と 3 つの短い連符記号のうちの最初の連符記号が@c +同時に起こります。@c +そのため、@code{\override} コマンドだと両方の連符記号に@c +適用されてしまいます。@c +この例では、@code{\tweak} は 2 つの連符記号を区別するために@c +使用されています。@c +最初の @code{\tweak} コマンドは長い連符記号を音符の上に置くことを@c +指定していて、2 番目の @code{\tweak} コマンドは最初の短い連符記号の数字を@c +赤で描くことを指定しています。 + +@cindex @code{\tweak}, example (@code{\tweak} の例) +@cindex direction property, example (direction プロパティの例) +@cindex color property, example (color プロパティの例) + +@lilypond[quote,ragged-right,verbatim,fragment,relative=2] +\tweak #'direction #up +\times 4/3 { + \tweak #'color #red + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + +ネストされた連符が同時に起こらない場合、それらの見た目は @code{\override} +コマンドを用いた通常通りの方法で変更されるかもしれません: + +@cindex text property, example (text プロパティの例) +@cindex tuplet-number function, example (tuplet-number 関数の例) +@cindex transparent property, example (transparent プロパティの例) +@cindex TupletNumber, example of overriding (TupletNumber をオーバライドする例) + +@c NOTE Tuplet brackets collide if notes are high on staff +@c See issue 509 +@lilypond[quote,ragged-right,verbatim,fragment,relative=1] +\times 2/3 { c8[ c c] } +\once \override TupletNumber + #'text = #tuplet-number::calc-fraction-text +\times 2/3 { + c8[ c] + c8[ c] + \once \override TupletNumber #'transparent = ##t + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + + +@seealso +記譜法リファレンス: +@ruser{The tweak command} + + +@node 内部リファレンス マニュアル +@section 内部リファレンス マニュアル +@translationof The Internals Reference manual + +@cindex Internals Reference (内部リファレンス) + +@menu +* レイアウト オブジェクトのプロパティ:: +* インタフェイスの中で見つかるプロパティ:: +* プロパティのタイプ:: +@end menu + +@node レイアウト オブジェクトのプロパティ +@subsection レイアウト オブジェクトのプロパティ +@translationof Properties of layout objects + +@cindex properties of layout objects (レイアウト オブジェクトのプロパティ) +@cindex properties of grobs (グラフィカル オブジェクトのプロパティ) +@cindex grobs, properties of (グラフィカル オブジェクトのプロパティ) +@cindex layout objects, properties of (レイアウト オブジェクトのプロパティ) +@cindex Internals Reference manual (内部リファレンス マニュアル) + +あなたがスラーを楽譜に描き、@c +そのスラーが細すぎるためにもう少し太くしたいと思ったとします。@c +どうやってスラーを太くしますか?@c +以前に LilyPond の自由度の高さについて述べたので、@c +そのようなことが可能であることは知っています。@c +あなたはおそらく @code{\override} コマンドが必要であると推測するでしょう。@c +しかしながら、スラーの太さプロパティは存在するのでしょうか?@c +そして、それが存在するならどうやって変更するのでしょうか?@c +このようなことに内部リファレンス マニュアルは触れています。@c +内部リファレンス マニュアルには、あなたがスラーを太くするために必要な情報、@c +他のすべての @code{\override} コマンドを構築するために必要な情報が@c +含まれています。 + +内部リファレンスを見ていく前に一言警告です。@c +これは @strong{リファレンス} ドキュメントであり、@c +説明はほんの少しかまったく含まれていません: +リファレンスの目的は情報を正確に、かつ簡潔に提供することです。@c +そのため、内部リファレンスを一見してひるんでしまうかもしれません。@c +しかし、心配しないでください!@c +ここにあるガイダンスと説明を読めば、少し練習するだけで、@c +内部リファレンスから必要な情報を取り出せるようになります。 + +@cindex override example (オーバライドの例) +@cindex Internals Reference, example of using (内部リファレンスの使用例) +@cindex @code{\addlyrics} example (@code{\addlyrics} の例) + +実際の音楽からの簡単な断片を持つ具体例を使用していきましょう: + +@c Mozart, Die Zauberflöte Nr.7 Duett + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +ここで、スラーをもう少し太くしようと決めたことにします。@c +それは可能でしょうか?@c +スラーは確かにレイアウト オブジェクトです。@c +そのため、その疑問は +@q{スラーに属していて、太さを制御するプロパティは存在するのか?} +ということになります。@c +その答えを得るために内部リファレンス -- 縮めて IR -- を見なければなりません。 + +あなたが使用しているバージョンの LilyPond のための内部リファレンスは +LilyPond ウェブサイト @uref{http://lilypond.org} で見つかるでしょう。@c +ドキュメント ページに行き、内部リファレンスへのリンクをクリックしてください。@c +学習目的のためには標準の HTML バージョンを使うべきであり、@c +@q{1 つの大きなページ} や PDF を使うべきではありません。@c +次の数段落を読めば、あなたが内部リファレンスを読むときに@c +実際にすべきことがわかるでしょう。 + +内部リファレンスの @strong{トップ ページ} 下には 5 つのリンクがあります。@c +@emph{Backend} へのリンクを選択してください。@c +そこにはレイアウト オブジェクトについての情報があります。@c +@strong{Backend} 下にある @emph{All layout objects} へのリンクを@c +選択してください。@c +そのページには、あなたが使用しているバージョンの LilyPond で使用される@c +すべてのレイアウト オブジェクトがアルファベット順で@c +リストアップされています。@c +Slur へのリンクを選択すると、Slur のプロパティがリスト アップされます。 + +記譜法リファレンスからこのページを見つける方法もあります。@c +スラーについて扱っているページで、内部リファレンスへのリンクが@c +見つかるかもしれません。@c +このリンクでこのページに直接行くことができます。@c +しかしながら、あなたが調整するレイアウト オブジェクトの名前を@c +想像できる場合は、すぐに内部リファレンスに行ってそこで探す方が簡単です。 + +内部リファレンスの Slur ページでは、まず Slur オブジェクトは +@code{Slur_engraver} によって作成されるということが述べられています。@c +それから、標準設定がをリストアップされています。@c +標準設定はアルファベット順にはなって @strong{いない} ということに@c +注意してください。@c +太さを制御していそうなプロパティを探してブラウザを@c +スクロール ダウンさせていくと、以下が見つかります: + +@example +@code{thickness} (number) + @code{1.2} + Line thickness, generally measured in @code{line-thickness} +@end example + +これが太さを変更するプロパティのようです。@c +@code{thickness} の値は @emph{数} であり、デフォルト値は 1.2、@c +この値は他のプロパティでは @code{line-thickness} と@c +呼ばれるということがわかります。 + +前にも言ったように、内部リファレンスには説明がほとんど、@c +あるいはまったくありません。@c +しかしながら、すでにスラーの太さを変えるための十分な情報を持っています。@c +レイアウト オブジェクトの名前は @code{Slur} であり、@c +変更するプロパティの名前は @code{thickness} であり、@c +スラーをもっと太くするには新しい値を 1.2 よりも大きくすべきであることが@c +わかります。 + +今度は、レイアウト オブジェクト名で見つけた値を置き換えることによって +@code{\override} コマンドを構築することができます。@c +コンテキストは省略します。@c +最初は太さに非常に大きな値を割り当ててみます。@c +それによって、そのコマンドが確かに機能していることを確かめることができます。@c +実行するコマンドは以下のようになります: + +@example +\override Slur #'thickness = #5.0 +@end example + +プロパティ名の前に @code{#'} を付けること、@c +新しい値の前に @code{#} を付けることを忘れないでください! + +最後の疑問は @q{このコマンドをどこに置くべきか?} ということです。@c +そのことについて不確かであり、学んでいる最中であるのならば、@c +ベストな答えはこうです @q{音楽表記の内部で、最初のスラーの直前}。@c +ではやってみましょう: + +@cindex Slur example of overriding (Slur をオーバライドする例) +@cindex thickness property, example (thickness プロパティの例) + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +確かにスラーが太くなっています。 + +これが @code{\override} コマンドを構築する基本的な方法です。@c +これより後のセクションで遭遇するものはもう少し複雑ですが、@c +必要な要点はすべて知っています +-- しかしながら、まだ練習が必要でしょう。@c +これは以下の例で提供されます。 + +@subheading コンテキストを見つけ出す + +@cindex context, finding (コンテキストを見つけ出す) +@cindex context, identifying correct (正しいコンテキストを特定する) + +しかしながら、まず最初にコンテキストを指定しなければならないとしたら@c +どうでしょうか?@c +指定すべきコンテキストは何でしょうか?@c +スラーとボイスは音楽表記の各行で明らかに関係が深いので、@c +スラーは @code{Voice} コンテキストの中にあると推測できるかもしれません。@c +しかし、それは確かでしょうか?@c +この問題を解決するには、Slur について記述している内部リファレンス ページの@c +先頭に戻ります。@c +そこには @q{Slur オブジェクトは Slur エングラーバによって作成される} と@c +書かれています。@c +そのため、スラーは @code{Slur_engraver} が存在しているコンテキストの@c +どれかで作成されるということになります。@c +@code{Slur_engraver} へのリンクを辿ります。@c +そのページの最後の方で @code{Slur_engraver} は 5 つのボイス コンテキスト +-- 標準のボイス コンテキストである @code{Voice} を含む +-- の一部であることが述べられています。@c +ですから、推測は正しかったのです。@c +そして、@code{Voice} は最下位のコンテキストの 1 つである +-- このことは、そこに音符を入力するという事実によって明らかに示されています +-- ため、ここではそのコンテキストを省略することができるのです。 + +@subheading 1 回だけオーバライドする + +@cindex overriding once only (一度だけオーバライドする) +@cindex once override (一度だけオーバライドする) + +@funindex \once +@funindex once + +上記の最後の例では @emph{すべて} のスラーが太くなっています。@c +しかし、最初のスラーだけを太くしたい場合はどうでしょうか?@c +これは @code{\once} コマンドを使うことによって達成されます。@c +@code{\override} コマンドの直前に @code{\once} コマンドを@c +置くことによって、@code{\override} コマンドは @strong{直後にある} 音符から@c +始まるスラーだけを変更するようになります。@c +直後にある音符がスラーの開始点ではない場合、そのコマンドはまったく機能しません +-- それがスラーに遭遇するまで保持されるということはなく、@c +ただ切り捨てられるだけです。@c +そのため、@code{\once} コマンド付きの @code{\override} コマンドは@c +以下のように上記の例とは異なる場所に置かなくてはなりません: + +@cindex Slur, example of overriding (Slur をオーバライドする例) +@cindex thickness property, example (thickness プロパティの例) + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % 直後にあるスラーのみを太くします + \once \override Slur #'thickness = #5.0 + bes8[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +今度は、最初のスラーだけが太くなりました。 + +@code{\once} コマンドは @code{\set} コマンドの前でも使用される可能性があります。 + +@subheading 元に戻す + +@cindex revert (元に戻す) +@cindex default properties, reverting to (デフォルトのプロパティに戻す) + +@funindex \revert +@funindex revert + +最後に、最初の 2 つだけのスラーを太くしたい場合はどうでしょうか?@c +その場合、2 つのコマンド -- それぞれの前に @code{\once} を付けた -- +をスラーが始まる音符の直前に置きます: + +@cindex Slur, example of overriding (Slur をオーバライドする例) +@cindex thickness property, example (thickness プロパティの例) + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % 直後にあるスラーのみを太くします + \once \override Slur #'thickness = #5.0 + bes[( g]) g | + % 直後にあるスラーのみを太くします + \once \override Slur #'thickness = #5.0 + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +あるいは、@code{\once} コマンドを省略して、2 番目のスラーの後に +@code{thickness} プロパティをデフォルト値に戻すために +@code{\revert} コマンドを使うこともできます: + +@cindex Slur, example of overriding (Slur をオーバライドする例) +@cindex thickness property, example (thickness プロパティの例) + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % 以後のスラーの太さを 1.2 から 5.0 に増やします + \override Slur #'thickness = #5.0 + bes[( g]) g | + g8[( es]) es + % 以後のスラーの太さをデフォルトの 1.2 に戻します + \revert Slur #'thickness + d8[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +@code{\revert} コマンドは @code{\override} コマンドで@c +変更されたどのプロパティでもデフォルト値に戻すことができます。@c +状況に相応しい方を使用してください。 + +これで内部リファレンスと調整の基本的な方法についての紹介を終わりにします。@c +この章で後に続くセクションの中にあるいくつのかの例でも一部では、@c +内部リファレンスの特徴についての追加の紹介や、そこから情報を取り出すための@c +更なる練習を提供します。@c +それらの例ではガイダンスや説明のための言葉はずっと少ないでしょう。 + + +@node インタフェイスの中で見つかるプロパティ +@subsection インタフェイスの中で見つかるプロパティ +@translationof Properties found in interfaces + +@cindex interface (インタフェイス) +@cindex interface properties (インタフェイス プロパティ) +@cindex properties in interfaces (インタフェイス内のプロパティ) + +今度は歌詞をイタリック体で譜刻したいということにします。@c +そうするには @code{\override} コマンドをどのように使う必要があるのでしょうか?@c +以前と同様に、まず @q{すべてのレイアウト オブジェクト} をリストアップしている@c +内部リファレンス ページを開き、歌詞をコントロールしていそうなオブジェクトを@c +探します。@c +@code{LyricText} がそれであるようです。@c +これをクリックすると、歌詞のテキストに対してセットすることができる@c +プロパティが表示されます。@c +そこには @code{font-series} と @code{font-size} が含まれますが、@c +歌詞をイタリック体にするためのプロパティらしきものはありません。@c +これは、形に関するプロパティはすべてのフォント オブジェクトに共通なもの@c +であり、そのため、各レイアウト オブジェクトに含まれているのではなく、@c +他の同様な共通プロパティと一緒にグループ化されていて、@c +@strong{インタフェイス} の 1 つ @code{font-interface} の中に@c +置かれているからです。 + +そのため、インタフェイスのプロパティを見つける方法と、どのオブジェクトが@c +これらのインタフェイス プロパティを使うのかを調べる方法を学ぶ必要があります。 + +@code{LyricText} について記述している内部リファレンスのページを@c +再び開いてください。@c +そのページの最後に @code{LyricText} がサポートするインタフェイスへのリンクが@c +リスト アップされています。@c +そのリストには @code{font-interface} を含むいくつかの要素があります。@c +このリンクをクリックすると、このインタフェイスに@c +関連付けされているプロパティのところに行きます。@c +これらのプロパティは @code{LyricText} を含む @code{font-interface} を@c +サポートするすべてのオブジェクトのプロパティでもあります。 + +@code{font-shape(symbol)} を含むフォントを制御するユーザが@c +設定可能なプロパティをすべて見つけました。@c +@code{font-shape(symbol)} では @code{symbol} を @code{upright}, +@code{italics}, あるいは @code{caps} にセットすることができます。 + +そこには、@code{font-series} と @code{font-size} もリスト アップされている@c +ことに気づくでしょう。@c +そこで次のような疑問が湧いてきます: +共通フォントプロパティ @code{font-series} と @code{font-size} は +@code{LyricText} とインタフェイス @code{font-interface} の両方で@c +リスト アップされているのに、なぜ @code{font-shape} はそうでないのか?@c +その答えは、@code{font-series} と @code{font-size} は、@c +@code{LyricText} オブジェクトが作成されるときに、@c +それらのグローバルなデフォルト値から変更されるのに対して、@c +@code{font-shape} はそうではないからです。@c +@code{LyricText} の中にあるエントリから @code{LyricText} に適用される@c +それら 2 つのプロパティの値がわかります。@c +@code{font-interface} をサポートする他のオブジェクトは、@c +それらのオブジェクトが作成されるときに、@c +それらのプロパティを異なる値にセットします。 + +今度は歌詞をイタリック体に変更するように @code{\override} コマンドを@c +構築できるかどうかを見ていきましょう。@c +オブジェクトは @code{LyricText} であり、@c +プロパティは @code{font-shape} であり、セットする値は @code{italic} です。@c +前と同様に、コンテキストを省略します。 + +話は逸れますが重要なことを 1 つ挙げます。@c +@code{font-shape} の値はシンボルなので、シングル アポストロフィ @code{'} を@c +付ける必要があるということに注意してください。@c +その理由は、以前の例での @code{thickness} や @code{font-shape} の前に@c +アポストロフィを付ける必要がある理由と同じです。@c +それらも両方ともシンボルです。@c +シンボルは LilyPond によって内部的に読み取られます。@c +それらのいくつかは @code{thickness} や @code{font-shape} のようなプロパティの@c +名前であり、他のものは @code{italic} のようにプロパティに与えられる値として@c +使用されます。@c +任意のテキスト文字列との違い -- 任意のテキスト文字列は @code{"a text string"} +のような形で表記されます -- に注意してください。@c +シンボルと文字列についてのより詳細な説明は、@rextend{Scheme tutorial} を@c +参照してください。 + +さて、それでは歌詞をイタリック体で譜刻するために必要となる +@code{\override} コマンドは以下のようになります: + +@example +\override LyricText #'font-shape = #'italic +@end example + +@noindent +そして、これは以下のように影響を与える歌詞の前に、そして近くに置くべきです: + +@cindex font-shape property, example (font-shape プロパティの例) +@cindex italic, example (italic の例) +@cindex LyricText, example of overriding (Lyric をオーバライドする例) +@cindex @code{\addlyrics}, example (@code{\addlyrics} の例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + \override LyricText #'font-shape = #'italic + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +これで歌詞がすべてイタリック体で譜刻されました。 + +@subheading 歌詞モードの中でコンテキストを指定する + +@cindex context, specifying in lyric mode (歌詞モード内でコンテキストを指定する) +@cindex lyric mode, specifying context (歌詞モード内でコンテキストを指定する) + +歌詞の場合、以前のようなコマンドの発行の仕方の中でコンテキストを@c +指定しようとしても失敗するでしょう。@c +歌詞モードの中で入力される音節はスペース、改行、数字のいずれかで区切られます。@c +他のすべての文字は音節の一部と見なされます。@c +これが、終端の @code{@}} の前にはスペースか改行を@c +置かなければならない理由です。@c +そうしないと、終端の @code{@}} は最後の音節の一部に含まれてしまいます。@c +同様に、コンテキスト名とオブジェクト名を区切るために、@c +ピリオドまたはドット @q{.} の前と後ろにスペースを挿入しなければなりません。@c +さもないと 2 つの名前は一緒になってしまい、インタプリタはそれらを@c +認識できなくなります。@c +そのため、コマンドは以下のようにすべきです: + +@example +\override Lyrics . LyricText #'font-shape = #'italic +@end example + +@warning{歌詞の中では、最後の音節と終端の波括弧の間に常にスペースを@c +置いてください。} + +@warning{歌詞の中のオーバライドでは、コンテキスト名とオブジェクト名の@c +間にあるドットの両側に常にスペースを置いてください。} + + +@seealso +拡張: @rextend{Scheme tutorial} + + +@node プロパティのタイプ +@subsection プロパティのタイプ +@translationof Types of properties + +@cindex property types (プロパティ タイプ) + +これまでにプロパティのタイプを 2 つ見てきました: +@code{number} と @code{symbol} です。@c +プロパティに与える値が有効であるためには、その値は正しいタイプであり、@c +そのタイプのルールに従っていなければなりません。@c +プロパティのタイプは内部リファレンスの中で常にプロパティ名の後の括弧の中に@c +表示されています。@c +ここに、あなたが必要になるであろうプロパティのタイプを、@c +そのタイプのルールといくつかの例と共にリスト アップします。@c +もちろん、@code{\override} コマンドの中でプロパティの値を入力する時は、@c +常にそれらの値の前にハッシュ記号 @code{#} を付け加える必要があります。 + +@multitable @columnfractions .2 .45 .35 +@headitem プロパティ タイプ + @tab 規則 + @tab 例 +@item Boolean + @tab 真か偽のどちらかで、それぞれ #t と #f で表されます + @tab @code{#t}, @code{#f} +@item Dimension (譜スペース) + @tab 正の小数 (譜スペース単位) + @tab @code{2.5}, @code{0.34} +@item Direction + @tab 有効な向きを表す定数またはそれと等価な数値 (-1 から 1 までの小数が@c +許可されます) + @tab @code{LEFT}, @code{CENTER}, @code{UP}, + @code{1}, @code{-1} +@item Integer + @tab 正の整数 + @tab @code{3}, @code{1} +@item List + @tab 値のセット。@c +セットの値はスペースで区切られ、前にアポストロフィが付いた括弧で囲まれます + @tab @code{'(left-edge staff-bar)}, @code{'(1)}, + @code{'(1.0 0.25 0.5)} +@item Markup + @tab 有効なマークアップ + @tab @code{\markup @{ \italic "cresc." @}} +@item Moment + @tab make-moment 関数で構築される全音符の分数 + @tab @code{(ly:make-moment 1 4)}, + @code{(ly:make-moment 3 8)} +@item Number + @tab 正または負の小数 + @tab @code{3.5}, @code{-2.45} +@item (数の) Pair + @tab @q{スペース . スペース} で区切られ、前にアポストロフィが付いた括弧で@c +囲まれた 2 つの数値 + @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} +@item Symbol + @tab プロパティに許可されているシンボルのセットのいずれかであり、@c +前にアポロストロフィを付けます + @tab @code{'italic}, @code{'inside} +@item Unknown + @tab 手続き。何のアクションも起こさない場合は @code{#f} + @tab @code{bend::print}, @code{ly:text-interface::print}, + @code{#f} +@item Vector + @tab 前にアポストロフィ-ハッシュ @code{'#} が付いた括弧で囲まれた +3 要素のリスト + @tab @code{'#(#t #t #f)} +@end multitable + + +@seealso +拡張: @rextend{Scheme tutorial} + + +@node オブジェクトの見た目 +@section オブジェクトの見た目 +@translationof Appearance of objects + +いくつかの例を使ってこれまでに学んだことを練習して、譜刻される楽譜の見た目を@c +変更するためにどのように調整が使われるのかを見ていきましょう。 + +@menu +* オブジェクトの可視性と色:: +* オブジェクトのサイズ:: +* オブジェクトの長さと太さ:: +@end menu + + +@node オブジェクトの可視性と色 +@subsection オブジェクトの可視性と色 +@translationof Visibility and color of objects + +教育目的の楽譜では、ある要素を省略した楽譜を譜刻して、@c +学生にそれを付け足させるという訓練にしたいと思うかもしれません。@c +簡単な例として、その訓練とは小節線の無い楽譜だと仮定してみましょう。@c +しかしながら、通常、小節線は自動的に挿入されます。@c +どうやって小節線が譜刻されることを防ぐのでしょうか? + +このことに挑戦する前に、オブジェクト プロパティは @emph{インタフェイス} と@c +呼ばれるものにグループ化されているということを思い出してください +-- @ref{インタフェイスの中で見つかるプロパティ} を参照してください。@c +これはあるグラフィカル オブジェクトを調整するために一緒に@c +使用されるかもしれないプロパティをグループ化したものです +-- あるオブジェクトに対してインタフェイス内のプロパティの 1 つを使うことが@c +許可されるのなら、他のプロパティも許可されます。@c +あるオブジェクトはいくつかのインタフェイス内にあるプロパティを使用し、@c +別のオブジェクトはそれとは別のインタフェイス内にあるプロパティを使用します。@c +ある特定のグラフィカルオブジェクトによって使用されるプロパティを保持している@c +インタフェイスは、そのグラフィカル オブジェクトについて記述している@c +内部リファレンス ページの最後にリスト アップされていて、@c +それらのプロパティはそれらのインタフェイスを参照することによって閲覧できます。 + +グラフィカル オブジェクトについての情報を見つけ出す方法を +@ref{レイアウト オブジェクトのプロパティ} で説明しました。@c +同じアプローチを使って、内部リファレンスで小節線を@c +譜刻するレイアウト オブジェクトを見つけ出します。@c +@emph{Backend} を経由して @emph{All layout objects} に行くと、@c +そこに @code{BarLine} と呼ばれる@c +レイアウト オブジェクトがあることがわかります。@c +そのレイアウト オブジェクトのプロパティには小節線の可視性をコントロールする +2 つのプロパティが含まれています: @c +@code{break-visibility} と @code{stencil} です。@c +さらに、@code{BarLine} はインタフェイスのいくつかをサポートしています。@c +@code{grob-interface} もサポートされていて、@c +そこには @code{transparent} プロパティと @code{color} プロパティが@c +含まれています。@c +これらすべてが小節線の可視性に影響を与えます (そしてもちろん、@c +拡大解釈すれば他の多くのレイアウト オブジェクトにも影響を与えます)。@c +次はこれらのプロパティをそれぞれ見ていきましょう。 + +@subheading ステンシル (stencil) + +@cindex stencil property (stencil プロパティ) + +このプロパティは譜刻すべきシンボル (図柄) を指定することによって@c +小節線の見た目を制御します。@c +他の多くのプロパティでも共通に言えますが、このプロパティの値に +@code{#f} をセットすることによって何も譜刻させなくすることができます。@c +ではやってみましょう。@c +以前と同様に、暗黙のコンテキスト @code{Voice} は省略します: + +@cindex BarLine, example of overriding (BarLine をオーバライドする例) +@cindex stencil property, example (stencil プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +小節線はまだ譜刻されています。@c +何が間違っているのでしょうか?@c +内部リファレンスに戻って、@code{BarLine} のプロパティを記述しているページを@c +読み返してください。@c +そのページの先頭に +@qq{BarLine オブジェクトは Bar_engraver によって作成されます} と@c +記述されています。@c +@code{Bar_engraver} ページに行ってください。@c +そのページの最後で、@code{Bar_engraver} を保持するコンテキストが@c +リスト アップされています。@c +それらのコンテキストのタイプはすべて @code{Staff} です。@c +ですから、@code{\override} コマンドが予期したように機能しなかったのは、@c +@code{BarLine} はデフォルトの @code{Voice} コンテキストの中には@c +いなかったからなのです。@c +コンテキストが間違って指定された場合、そのコマンドは機能しません。@c +エラー メッセージは生成されず、ログ ファイルには何もログが残りません。@c +正しいコンテキストを付け加えることによってコマンドを修正してみましょう: + +@cindex BarLine, example of overriding (BarLine をオーバライドする例) +@cindex stencil property, example (stencil プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +今度は小節線が消えました。 + +しかしながら、@code{stencil} プロパティを @code{#f} にセットするのではなく、@c +オブジェクトの大きさを修正する必要があるオブジェクトも存在するということに@c +注意してください。@c +そのようなオブジェクトの @code{stencil} プロパティを @code{#f} にセットすると@c +エラーになります。 +例えば、@code{NoteHead} オブジェクトの @code{stencil} プロパティを +@code{#f} にセットするとエラーになります。@c +この場合、@code{point-stencil} を使ってサイズが 0 のステンシル (型、型紙) を@c +オブジェクトにセットします: + +@lilypond[quote,verbatim,relative=2] +{ + c4 c + \once \override NoteHead #'stencil = #point-stencil + c4 c +} +@end lilypond + +@subheading 可視性の破棄 (break-visibility) + +@cindex break-visibility property (break-visibility プロパティ) + +内部リファレンスの @code{BarLine} のプロパティから +@code{break-visibility} プロパティには 3 つのブール値からなるベクトルが@c +必要であることがわかります。@c +これらはそれぞれ、小節線が行の最後、行の途中、行の最初に譜刻されるかどうかを@c +制御します。@c +以下の例ではすべての小節線を消したいので、必要となる値は +@code{'#(#f #f #f)} です。@c +それではやってみましょう。@c +@code{Staff} コンテキストを含めることを忘れないでください。@c +また、この値を書くときに括弧を始める前に @code{#'#} を@c +付ける必要があることにも注意してください。@c +@code{'#} はベクトルを導入するときに値の一部として必要とされ、@c +先頭の @code{#} は @code{\override} コマンドの中で常に値の前に@c +置くことが必要とされます。 + +@cindex BarLine, example of overriding (BarLine をオーバライドする例) +@cindex break-visibility property, example (break-visibility プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'break-visibility = #'#(#f #f #f) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +今度もすべての小節線が消えました。 + +@subheading 透過性 (transparent) + +@cindex transparent property (transparent プロパティ) +@cindex transparency (透明性) + +内部リファレンスの @code{grob-interface} ページにあるプロパティから +@code{transparent} プロパティはブール値であることがわかります。@c +これはグラフィカル オブジェクトを透明にする場合には @code{#t} に@c +セットします。@c +次の例では、小節線ではなく拍子記号を不可視にしてみましょう。@c +そうするには、まず、拍子記号のグラフィカル オブジェクト名を@c +見つける必要があります。@c +@code{TimeSignature} レイアウト オブジェクトのプロパティを見つけるために@c +内部リファレンスの @q{すべてのレイアウト オブジェクト} ページに@c +戻ってください。@c +@code{TimeSigunature} は @code{Time_signature_engraver} によって作り出され、@c +さらに、@code{Time_signature_engraver} は @code{Staff} コンテキストに含まれ、@c +さらに、@code{Staff} コンテキストは @code{grob-interface} を@c +サポートしているということがわかります。@c +そのため、拍子記号を透明にするためのコマンドは以下のようになります: + +@cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例) +@cindex transparent property, example (transparent プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'transparent = ##t + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +拍子記号は消えました。@c +しかしながら、このコマンドは拍子記号があるべき場所に隙間を残しています。@c +たぶん、これは学生がその部分を埋めるための練習としては望ましいでしょうが、@c +他の状況ではこの隙間は望ましくありません。@c +この隙間を取り除くには、拍子記号の @code{transparent} の代わりに@c +ステンシル (型、型紙) を @code{#f} にセットします: + +@cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例) +@cindex stencil property, example (stencil プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +違いは明白です: ステンシルを @code{#f} にセットすると、@c +オブジェクト自体が削除されます。@c +一方、オブジェクトを @code{transparent} (透明) にするとそのオブジェクトは@c +消えますが、オブジェクトは不可視になっただけです。 + +@subheading 色 (color) + +@cindex color property (color プロパティ) + +最後に、小節線の色を白にすることによって小節線を不可視にしてみましょう。@c +(これには白い小節線が譜線と交差したところで@c +譜線を見えたり見えなくしてしまうかもしれないという問題があります。@c +以下のいくつかの例で、このことを予測することはできないと思うかもしれません。@c +そうなる理由と、それを制御する方法についての詳細は、@c +@ruser{Painting objects white} でカバーされています。@c +しかしここでは色について学んでいるところなので、@c +オブジェクトを白で描くことの限界を受け入れるだけにしてください。) + +@code{grob-interface} はカラー プロパティの値はリストであると指定しています。@c +しかしながら、そのリストが何であるべきなのかの説明はありません。@c +カラー プロパティで必要とされるリストは実際のところ内部ユニットの中にある@c +値のリストです。@c +しかし、内部ユニットの中にある値を知らなくても済むように、@c +カラーを指定するための手段がいくつか用意されています。@c +最初の方法は @ruser{List of colors} にある最初の表でリスト アップされている +@q{標準} のカラーの 1 つを使用する方法です。@c +小節線を白にするには以下のように記述します: + +@cindex BarLine, example of overriding (BarLine をオーバライドする例) +@cindex color property, example (color プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #white + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +今度も再び小節線は見えなくなりました。@c +@emph{white} の前にアポストロフィは付かないということに注意してください +-- これはシンボルではなく@emph{関数}です。@c +この関数が呼び出されると、この関数はカラーを白にセットするために@c +必要とされる内部値のリストを提供します。@c +標準カラー リストにある他のカラーもまた関数です。@c +これが機能していることをあなた自身が納得するために、@c +カラーをこのリストの中にある他の関数の 1 に変更しようと思うかもしれません。 + +@cindex color, X11 (X11 カラー) +@cindex X11 colors (X11 カラー) + +@funindex x11-color + +カラーを変えるための 2 番目の方法は、@ruser{List of colors} の +2 番目のリストの中にある X11 カラー名のリストを使用する方法です。@c +しかしながら、以下のように、これらの前には X11 カラー名を内部値のリストに@c +変更するもう 1 つの関数 -- @code{x11-color} -- がなければなりません: + +@cindex BarLine, example of overriding (BarLine をオーバライドする例) +@cindex color property, example (color プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(x11-color 'white) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +この場合、関数 @code{x11-color} はシンボルを引数として扱うので、@c +シンボルの前にはアポストロフィをつけなくてはならず、@c +@code{x11-color} とシンボルは括弧で囲まれていなければならないということに@c +注意してください。 + +@cindex rgb colors (RGB カラー) +@cindex color, rgb (RGB カラー) + +@funindex rgb-color + +まだ 3 番目の方法が残っています。@c +これは RGB 値を内部カラーに変換する @code{rgb-color} 関数を使用する方法です。@c +この関数は赤、緑、青の輝度を表す 3 つの引数をとります。@c +これらの引数は 0 から 1 までの値をとります。@c +ですから、カラーを赤にセットする場合の値は @code{(rgb-color 1 0 0)} となり、@c +白の場合は @code{(rgb-color 1 1 1)} となります: + +@cindex BarLine, example of overriding (BarLine をオーバライドする例) +@cindex color property, example (color プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(rgb-color 1 1 1) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +最後に、X11 カラー セットの一部であるグレー スケールを用いる方法もあります。@c +グレー スケールの範囲は黒 @code{'grey0'} から白 @code{'grey100'} まで +1 段階ずつあります。@c +グレー スケールの使用方法を示すために、@c +例の中にあるすべてのレイアウト オブジェクトのカラーをさまざまな濃度の@c +グレーにセットしてみましょう: + +@cindex StaffSymbol, example of overriding (StaffSymbol をオーバライドする例) +@cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例) +@cindex Clef, example of overriding (Clef をオーバライドする例) +@cindex NoteHead, example of overriding (NoteHead をオーバライドする例) +@cindex Stem, example of overriding (Stem をオーバライドする例) +@cindex BarLine, example of overriding (BarLine をオーバライドする例) +@cindex color property, example (color プロパティの例) +@cindex x11-color, example of using (x11-color の使用例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.StaffSymbol #'color = #(x11-color 'grey30) + \override Staff.TimeSignature #'color = #(x11-color 'grey60) + \override Staff.Clef #'color = #(x11-color 'grey60) + \override Voice.NoteHead #'color = #(x11-color 'grey85) + \override Voice.Stem #'color = #(x11-color 'grey85) + \override Staff.BarLine #'color = #(x11-color 'grey10) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +各レイアウト オブジェクトに関連付けされているコンテキストに注意してください。@c +これらのコンテキストを正しく取得することが重要であり、@c +そうしなければコマンドは機能しません!@c +コンテキストの中には特定のエングラーバが置かれているということを@c +忘れないでください。@c +エングラーバに対するデフォルト コンテキストを見つけ出すには、@c +内部リファレンスのレイアウト オブジェクトからスタートして、@c +そこからそれを作り出すエングラーバのページに行きます。@c +エングラーバのページには、@c +通常はどのコンテキストにそのエングラーバが含まれているのかが記述されています。 + + +@node オブジェクトのサイズ +@subsection オブジェクトのサイズ +@translationof Size of objects + +@cindex changing size of objects (オブジェクトのサイズを変更する) +@cindex size of objects (オブジェクトのサイズ) +@cindex objects, size of (オブジェクトのサイズ) +@cindex objects, changing size of (オブジェクトのサイズを変更する) + +以前の例を見直すことから始めてみましょう (@ref{音楽表記をネストする} を@c +参照してください)。@c +そこでは @rglos{ossia} として新たに一時的な譜を導入する方法が示されています。 + +@cindex alignAboveContext property, example (alignAboveContext プロパティの例) +@cindex @code{\with}, example (@code{\with} の例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +通常、オッシアは音部記号と拍子記号無しで記述され、@c +メインの譜よりもわずかに小さく譜刻されます。@c +今度は、すでに音部記号と拍子記号を削除する方法を知っています +-- 以下のようにそれぞれのステンシルを @code{#f} にセットするだけです: + +@cindex alignAboveContext property, example (alignAboveContext プロパティの例) +@cindex @code{\with}, example (@code{\with} の例) +@cindex stencil property, example (stencil プロパティの例) +@cindex Clef, example of overriding (Clef をオーバライドする例) +@cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } + { + \override Staff.Clef #'stencil = ##f + \override Staff.TimeSignature #'stencil = ##f + { f8 f c } + } + >> + r4 | + } +} +@end lilypond + +@noindent +ここで、@code{\with} 節の後にある追加の括弧のペアが、@c +その括弧に囲まれているオーバライドと音楽がオッシア譜に適用されることを@c +保証するために、必要となります。 + +しかし、@code{\with} を使った譜コンテキストの変更と +@code{\override} を使った音部記号と拍子記号のステンシルの変更との違いは@c +何なのでしょうか?@c +主な違いは、@code{\with} 節の中で行われた変更はそのコンテキストが@c +作成されるときに行われ、@c +そのコンテキストでは @strong{デフォルト} 値として残ります。@c +一方、音楽の中に埋め込まれた @code{\set} コマンドや +@code{\override} コマンドは動的です +-- それらは音楽のある特定のポイントに同期して変更を行います。@c +変更が @code{\unset} や @code{\revert} を使ってセットを解除されたり@c +元に戻された場合、デフォルト値 +-- これは @code{\with} 節でセットされていた場合はその値、@c +そうでない場合は通常のデフォルト値 -- に戻ります。 + +いくつかのコンテキスト プロパティは @code{\with} 節でのみ変更可能です。@c +これらは、コンテキストが作成された後では、変更されることのないプロパティです。@c +@code{alignAboveContext} とそのパートナー @code{alignBelowContext} が@c +そのようなプロパティです -- いったん譜が作成されると、@c +譜のアラインメントは決定され、@c +それを後で変更しようとすることには意味がありません。 + +レイアウト オブジェクトのデフォルト値は @code{\with} 節で@c +セットすることもできます。@c +通常の @code{\override} コマンドをコンテキスト名を省いて@c +使用するだけです。@c +コンテキスト名を省略するのは、そのコンテキストは明らかに +@code{\with} 節が変更しようとしているコンテキストだからです。@c +実際、@code{\with} 節の中でコンテキストを指定するとエラーが発生します。 + +それでは上記の例を以下のように書き換えます: + +@cindex alignAboveContext property, example (alignAboveContext プロパティの例) +@cindex @code{\with}, example (@code{\with} の例) +@cindex Clef, example of overriding (Clef をオーバライドする例) +@cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例) + +@c KEEP LY +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + % この譜には音部記号を譜刻しません + \override Clef #'stencil = ##f + % この譜には拍子記号を譜刻しません + \override TimeSignature #'stencil = ##f + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +最後に、レイアウト オブジェクトのサイズを変更してみます。 + +いくつかのレイアウト オブジェクトはある書体から選択された図柄として@c +作成されます。@c +これには符頭、臨時記号、マークアップ、音部記号、拍子記号、強弱記号、@c +歌詞が含まれます。@c +それらのサイズは、これから見ていくように、@code{font-size} プロパティを@c +変更することによって変更されます。@c +スラーやタイのような他のレイアウト オブジェクト +-- 一般には、スパナ オブジェクト (spanner objects) +-- は個々に描かれるため、@c +@code{font-size} プロパティとは関係がありません。@c +一般に、それらのオブジェクトはそれらを取り付けられるオブジェクトからサイズを@c +決定する (訳者: 例えば、スラーはそのスラーが付着する音符から@c +そのスラーのサイズを決定する) ので、@c +通常はサイズを手動で変更する必要はありません。@c +さらに、符幹や小節線の長さ、連桁や他の線の太さ、譜線の間隔などといった@c +他のプロパティはすべて特別な方法で変更する必要があります。 + +オッシアの例に戻って、まず @code{font-size} を変更してみましょう。@c +これを行うには 2 通りの方法があります。@c +以下のようなコマンドで @code{NoteHead} のような各オブジェクト タイプの@c +フォント サイズを変更する: + +@example +\override NoteHead #'font-size = #-2 +@end example + +あるいは、@code{\set} を使って特別なプロパティ @code{fontSize} を設定するか、@c +それを @code{\with} 節に含める +(ただし、@code{\set} は含めません) ことによって@c +すべてのフォントのサイズを変更します: + +@example +\set fontSize = #-2 +@end example + +これらの命令文は両方ともフォント サイズを前の値から 2 段階減らします。@c +各段階でサイズはおよそ 12% 増減します。 + +それではオッシアの例でフォント サイズを変更してみましょう: + +@cindex alignAboveContext property, example (alignAboveContext プロパティの例) +@cindex @code{\with}, example (@code{\with} の例) +@cindex Clef, example of overriding (Clef をオーバライドする例) +@cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例) +@cindex fontSize property, example (fontSize プロパティの例) + +@c KEEP LY +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + % すべてのフォント サイズを約 24% 減らします + fontSize = #-2 + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +これでもまだ完璧ではありません。@c +符頭とフラグは小さくなりましたが、符幹はそれに対して長すぎ、@c +譜線は離れすぎています。@c +これらをフォント サイズの減少に比例してスケール ダウンさせる必要があります。@c +次のサブ セクションでそれを行う方法について議論します。 + + +@node オブジェクトの長さと太さ +@subsection オブジェクトの長さと太さ +@translationof Length and thickness of objects + +@cindex distances (距離) +@cindex thickness (太さ) +@cindex length (長さ) +@cindex magstep +@cindex size, changing (サイズを変更する) +@cindex stem length, changing (符幹の長さを変更する) +@cindex staff line spacing, changing (譜線の間隔を変更する) + +LilyPond では距離と長さは一般に譜スペース -- 譜の中の隣り合う線の間隔 -- +で測ります (特別な場合では、譜スペースの半分で測ることもあります)。@c +一方、たいていの @code{thickness} プロパティは @code{line-thickness} と@c +呼ばれる内部プロパティを単位として測ります。@c +例えば、デフォルトでは、ヘアピン (訳者: 強弱記号) の線の太さは +1 単位の @code{line-thickness} であり、@c +音符の符幹の @code{thickness} は 1.3 です。@c +けれども、それとは単位の異なる太さプロパティがあるということにも@c +注意してください。@c +例えば、連桁の太さプロパティは譜スペースで測ります。 + +それでは、どうやって長さをフォント サイズに比例させるのでしょうか?@c +これは、まさにこの目的のために提供されている @code{magstep} と呼ばれる@c +特別な関数の助けを借りることによって達成できます。@c +この関数は引数を 1 つ -- フォント サイズの変化 (前の例では #-2) -- +をとり、他のオブジェクトの縮小に比例したスケーリング ファクタを返します。@c +以下のように使用します: + +@cindex alignAboveContext property, example (alignAboveContext プロパティの例) +@cindex @code{\with}, example (@code{\with} の例) +@cindex Clef, example of overriding (Clef をオーバライドする例) +@cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例) +@cindex fontSize property, example (fontSize プロパティの例) +@cindex StaffSymbol, example of overriding (StaffSymbol をオーバライドする例) +@cindex magstep function, example of using (magstep 関数の使用例) +@cindex staff-space property, example (staff-space プロパティの例) +@cindex stencil property, example (stencil プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + fontSize = #-2 + % 符幹の長さと譜線の間隔を減らします + \override StaffSymbol #'staff-space = #(magstep -2) + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +@noindent +符幹の長さと他の多くの長さに関係するプロパティは常に +@code{staff-space} プロパティの値と比例関係になるよう算出されるため、@c +それらの長さも自動的にスケール ダウンされます。@c +これはオッシアの垂直方向のスケールだけに効果を及ぼすということに@c +注意してください -- 水平方向のスケールは、メインの音楽と同期するよう、@c +メインの音楽のレイアウトによって決定されるため、水平方向のスケールは +@code{staff-space} の変更によっていかなる影響も受けません。@c +もちろん、メインの音楽のすべてのスケールがこの方法で変更された場合、@c +水平方向のスペースも影響を受けます。@c +このことについては、後のレイアウト セクションで議論します。 + +そして、これでオッシアの作成は完了です。@c +他のすべてのオブジェクトのサイズと長さが類似の方法で変更されるかもしれません。 + +上記の例のようなスケールのちょっとした変更に対して、小節線、連桁、ヘアピン、@c +スラーなどのさまざまな描画線の太さは通常はグローバルな調節を必要としません。@c +ある特定のレイアウト オブジェクトの太さを調節する必要がある場合、@c +それを達成する最良の方法はそのオブジェクトの @code{thickness} プロパティを@c +オーバライドすることです。@c +スラーの太さを変更する例は @ref{レイアウト オブジェクトのプロパティ} で@c +示されています。@c +すべての描画オブジェクト (つまり、フォントから作り出される@c +オブジェクトではないもの) の太さが同様の方法で変更されるかもしれません。 + + +@node オブジェクトの配置 +@section オブジェクトの配置 +@translationof Placement of objects + +@menu +* 自動配置:: +* 譜内部オブジェクト:: +* 譜外部オブジェクト:: +@end menu + + +@node 自動配置 +@subsection 自動配置 +@translationof Automatic behavior + +@cindex within-staff objects (譜内部オブジェクト) +@cindex outside-staff objects (譜内部オブジェクト) +@cindex objects, within-staff (譜内部オブジェクト) +@cindex objects, outside-staff (譜外部オブジェクト) + +音楽記譜法には譜に属するオブジェクトがいくつかあり、@c +他のオブジェクトは譜の外側に置かれるべきです。@c +それらはそれぞれ譜内部オブジェクトと譜外部オブジェクトと呼ばれます。 + +譜内部オブジェクトは譜上に置かれます +-- 符頭、符幹、臨時記号などです。@c +通常、それらの位置は音楽自体によって決定されます +-- 譜内部オブジェクトは譜のある特定の線と同じ垂直位置に置かれたり、@c +そこに置かれるべき他のオブジェクトにくっつけられたりします。@c +近接する和音の中にある符頭、符幹、臨時記号の衝突は普通は自動的に回避されます。@c +これから見ていくように、この自動配置を変更することができるコマンドと@c +オーバライドがあります。 + +譜の外部にあるオブジェクトには、リハーサル記号、テキスト、@c +強弱記号などがあります。@c +LilyPond が持つ譜外部オブジェクトの垂直位置のルールは、@c +譜外部オブジェクトをできるだけ譜の近くに、しかし他のオブジェクトと@c +衝突しない程度の近さに置くというものです。@c +以下で示すように、LilyPond はオブジェクトを配置する順番を決定するために +@code{outside-staff-priority} プロパティを使用します。 + +最初に、LilyPond はすべての譜内部オブジェクトを配置します。@c +それから、@code{outside-staff-priority} に従って譜外部オブジェクトを@c +並べます。@c +譜外部オブジェクトは最小の @code{outside-staff-priority} を@c +持つオブジェクトから順番に 1 つずつ並べられ、すでに配置されたオブジェクトと@c +衝突しないように配置されます。@c +つまり、2 つの譜外部オブジェクトが同じスペースを巡って競合する場合、@c +より小さな @code{outside-staff-priority} を持つオブジェクトが@c +譜の近くに配置されます。@c +2 つのオブジェクトが同じ @code{outside-staff-priority} を持つ場合、@c +先に発生するオブジェクトが譜の近くに配置されます。 + +以下の例では、すべてのマークアップ テキストが同じ優先度を持っています +(なぜなら、優先度が明示的にセットされていないからです)。@c +@q{Text3} が自動的に譜の近く、@q{Text2} の@c +すぐ下に納まるよう配置されていることに注意してください。 + +@cindex markup example (マークアップの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +デフォルトでは、譜も互いにできるだけ近くなるよう配置されます +(最小間隔に従います)。@c +音符が隣接する譜に向かって長く突き出てている場合、譜を離さないと@c +記譜したものが重なり合ってしまう場合にのみ譜は離されます。@c +以下の例は譜の調整によって音符が @q{ぴったりと納まる} 様子を示しています: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \relative c' { c4 a, } + } + \new Staff { + \relative c'''' { c4 a, } + } +>> +@end lilypond + + +@node 譜内部オブジェクト +@subsection 譜内部オブジェクト +@translationof Within-staff objects + +これまでにコマンド @code{\voiceXXX} がスラー、タイ、運指法記号、@c +符幹の向きに依存する他のすべてに対してどのように影響を与えるかを見てきました。@c +これらのコマンドは、多声部音楽を記述しているときに上下する旋律を@c +見分けられるようにすることを可能にするために不可欠なものです。@c +しかしながら、この自動機能をオーバライドする必要がある場合もあります。@c +このオーバライドは音楽全体に対しても、個々の音符に対してもできます。@c +この自動機能を制御しているプロパティは各レイアウト オブジェクトの +@code{direction} プロパティです。@c +まず、これは何をするのかを説明し、それから、作成済みのコマンドを@c +いくつか紹介します。@c +それらのコマンドを使うと、一般的な変更のための明示的なオーバライドを@c +コードしなくて済みます。 + +スラーやタイのようなレイアウト オブジェクトはカーブを描き、曲がり、@c +上下します。@c +符幹やフラグのような他のオブジェクトも上下の向きによって位置が左右します。@c +@code{direction} がセットされているときは、これは自動的に制御されます。 + +@cindex down (下) +@cindex up (上) +@cindex center (中央) +@cindex neutral (ニュートラル) + +以下の例は、小節 1 で符幹のデフォルトの振る舞いを示しています。@c +高い位置にある音符の符幹は下向きで、低い位置にある音符の符幹は上向きです。@c +続いて 4 つの音符の符幹をすべて強制的に下向きにし、4 つの音符の符幹を@c +すべて強制的に上向きにし、最後に 4 つの音符の符幹をデフォルトに戻します。 + +@cindex Stem, example of overriding (Stem をオーバライドする例) +@cindex direction property, example (direction プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4 g c a | +\override Stem #'direction = #DOWN +a4 g c a | +\override Stem #'direction = #UP +a4 g c a | +\revert Stem #'direction +a4 g c a | +@end lilypond + +ここで定数 @code{DOWN} と @code{UP} を使っています。@c +これらはそれぞれ値 @code{-1} と @code{+1} を持ち、定数の代わりに@c +それらの数値を使うこともできまはす。@c +さらに値 @code{0} を使う場合もあります。@c +この値は符幹では @code{UP} を意味するものとして扱われますが、@c +いくつかのオブジェクトでは @q{center} という意味になります。@c +値 @code{0} を持つ定数に @code{CENTER} があります。 + +しかしながら、これらの明示的なオーバライドは普通は使われません。@c +もっと簡単で定義済みのコマンドが利用可能だからです。@c +ここに一般的なコマンドの表を挙げます。@c +それぞれのコマンドの意味が明白でない場合は、そのコマンドの意味を述べています。 + +@multitable @columnfractions .2 .2 .25 .35 +@headitem 下/左 + @tab 上/右 + @tab 元に戻す + @tab 効果 +@item @code{\arpeggioArrowDown} + @tab @code{\arpeggioArrowUp} + @tab @code{\arpeggioNormal} + @tab 矢印が下に付く、上に付く、付かない +@item @code{\dotsDown} + @tab @code{\dotsUp} + @tab @code{\dotsNeutral} + @tab 譜線を避けるための移動方向 +@item @code{\dynamicDown} + @tab @code{\dynamicUp} + @tab @code{\dynamicNeutral} + @tab +@item @code{\phrasingSlurDown} + @tab @code{\phrasingSlurUp} + @tab @code{\phrasingSlurNeutral} + @tab Note: スラー コマンドとは別になります +@item @code{\slurDown} + @tab @code{\slurUp} + @tab @code{\slurNeutral} + @tab +@item @code{\stemDown} + @tab @code{\stemUp} + @tab @code{\stemNeutral} + @tab +@item @code{\textSpannerDown} + @tab @code{\textSpannerUp} + @tab @code{\textSpannerNeutral} + @tab スパナとして挿入されるテキストが譜の下/上にくる +@item @code{\tieDown} + @tab @code{\tieUp} + @tab @code{\tieNeutral} + @tab +@item @code{\tupletDown} + @tab @code{\tupletUp} + @tab @code{\tupletNeutral} + @tab 連符記号が音符の下/上にくる +@end multitable + +これらの定義済みコマンドの前には @code{\once} が@c +付か @strong{ない} かもしれません。@c +コマンドの効果を単一の音符に制限したい場合、@c +等価の @code{\once \override} コマンドを使用するか、@c +あるいは、定義済みコマンドを使用して、効果を受けた音符の後に@c +対応する @code{\xxxNeutral} コマンドを置かなければなりません。 + +@subheading 運指法記号 (Fingering) + +@cindex fingering, placement (運指法記号の配置) +@cindex fingering, chords (和音の運指法記号) + +単一の音符に対する運指法記号の配置も @code{direction} プロパティによって@c +制御できますが、@code{direction} を変更しても和音の運指法記号は影響を@c +受けません。@c +これから見ていくように、和音の中の個々の音符の運指法記号を制御するための@c +特別なコマンドがあります。@c +このコマンドを使うことで運指法記号を各音符の上、下、左、右に@c +配置することができます。 + +まず、単一の音符の運指法記号に対する @code{direction} を効果を示します。@c +最初の小節はデフォルト状態で、その後で @code{DOWN} と @code{UP} を@c +指定したときの効果を示します: + +@cindex Fingering, example of overriding (Fingering をオーバライドする例) +@cindex direction property, example (direction プロパティの例) + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #DOWN +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #UP +c4-5 a-3 f-1 c'-5 | +@end lilypond + +しかしながら、@code{direction} プロパティをオーバライドすることは、@c +手動で運指法記号を音符の上または下に配置するもっとも簡単な方法ではありません。@c +運指法番号の前に @code{-} の代わりに @code{_} または @code{^} を使う方が@c +普通は適切です。@c +ここで、上記の例にこの方法を用いた例を挙げます: + +@cindex fingering example (運指法記号の例) + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +c4_5 a_3 f_1 c'_5 | +c4^5 a^3 f^1 c'^5 | +@end lilypond + +@code{direction} プロパティは和音では無視されますが、@c +方向を示す接頭辞 @code{_} と @code{^} は機能します。@c +以下で示すように、デフォルトでは、運指法記号は和音の音符の@c +上と下の両方に自動的に配置されます: + +@cindex fingering example (運指法記号の例) + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +@noindent +しかし、以下で示すように、運指法番号のすべてまたはいずれかを手動で強制的に@c +和音の上または下に配置するために、これはオーバライドされるかもしれません: + +@cindex fingering example (運指法記号の例) + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +@code{\set fingeringOrientations} コマンドを使うことによって和音の中に@c +ある個々の音符の運指法記号の配置をより細かく制御することさえできます。@c +このコマンドのフォーマットは以下のようなものです: + +@example +@code{\set fingeringOrientations = #'([up] [left/right] [down])} +@end example + +@noindent +@code{fingeringOrientations} は @code{Voice} コンテキストのプロパティであり、@c +@code{New_fingering_engraver} によって作成、使用されるため、@c +@code{\set} が使用されます。 + +このプロパティには 1 つから 3 つまでの値のリストがセットされるかもしれません。@c +このプロパティは運指法記号を上 (リストに @code{up} がある場合)、@c +下 (リストに @code{down} がある場合)、@c +左 (リストに @code{left} がある場合。リストに @code{right} がある場合は右) +に配置します。@c +逆に配置位置がリストされていない場合、その位置に運指法記号は配置されません。@c +LilyPond はこれらの制約を受け取り、 +後に続く和音の音符への運指法記号をうまく配置します。@c +@code{left} と @code{right} は相互排他的であるということに注意してください -- +運指法記号は左右のどちらかにしか配置されないか、どちらにも配置されません。 + +@warning{このコマンドを使って単一の音符への運指法記号の配置を@c +コントロールするには、その音符を山括弧で囲んで単一音符の和音として@c +記述する必要があります。} + +いくつか例を挙げます: + +@cindex fingering example (運指法記号の例) +@cindex @code{\set}, example of using (@code{\set} の使用例) +@cindex fingeringOrientations property, example (fingeringOrientations プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + +@noindent +運指法記号が少し込み合っているように見える場合は、@c +@code{font-size} でサイズを下げることができます。@c +デフォルト値は内部リファレンスの @code{Fingering} オブジェクトのページから +@code{-5} であることがわかるので、@code{-7} にセットしてみましょう: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\override Fingering #'font-size = #-7 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + + +@node 譜外部オブジェクト +@subsection 譜外部オブジェクト +@translationof Outside-staff objects + +譜外部オブジェクトは自動的に衝突を回避するよう配置されます。@c +小さな値の @code{outside-staff-priority} プロパティを持つオブジェクトは@c +譜の近くに配置され、他の譜外部オブジェクトは衝突を避けるのに必要な分だけ@c +離されます。@c +@code{outside-staff-priority} は @code{grob-interface} の中で@c +定義されているため、すべてのレイアウト オブジェクトのプロパティです。@c +デフォルトでは、すべての譜内部オブジェクトの @code{outside-staff-priority} は +@code{#f} にセットされていて、譜外部オブジェクトが作成されたときに@c +その譜外部オブジェクトの @code{outside-staff-priority} に適当な数値が@c +セットされます。@c +以下の表はデフォルトで @code{Staff} コンテキストまたは +@code{Voice} コンテキストの中に配置される@c +いくつかの一般的な譜外部オブジェクトのデフォルトの +@code{outside-staff-priority} 値を示しています。 + +@multitable @columnfractions .3 .3 .3 +@headitem レイアウト オブジェクト + @tab 優先度 + @tab 以下のオブジェクトの配置を制御する: +@item @code{MultiMeasureRestText} + @tab @code{450} + @tab 全休符上のテキスト +@item @code{TextScript} + @tab @code{450} + @tab マークアップ テキスト +@item @code{OttavaBracket} + @tab @code{400} + @tab オッターバ (オクターブを上下させる記号) の囲み +@item @code{TextSpanner} + @tab @code{350} + @tab テキスト スパナ +@item @code{DynamicLineSpanner} + @tab @code{250} + @tab すべての強弱記号 +@item @code{VoltaBracketSpanner} + @tab @code{100} + @tab Volta (番号付きのリピート) の囲み +@item @code{TrillSpanner} + @tab @code{50} + @tab トリル記号 +@end multitable + +これらのうちのいくつかのデフォルトでの配置を示している例を挙げます。 + +@cindex text spanner (テキスト スパナ) +@cindex ottava bracket (オッターバ囲み) + +@funindex \startTextSpan +@funindex startTextSpan +@funindex \stopTextSpan +@funindex stopTextSpan + +@cindex TextSpanner, example of overriding (TextSpanner をオーバライドする例) +@cindex bound-details property, example (bound-details プロパティの例) + +@c KEEP LY +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% 以降のテキスト スパナの詳細を設定します +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% 強弱記号を譜の上に配置します +\dynamicUp +% オッターバ囲みの開始 +\ottava #1 +c'4 \startTextSpan +% 強弱テキストとヘアピンを付け加えます +c4\pp\< +c4 +% テキスト スクリプトを付け加えます +c4^Text | +c4 c +% 強弱テキストを付け加え、強弱ヘアピンを終わらせます +c4\ff c \stopTextSpan | +% オッターバ囲みを終わらせます +\ottava #0 +c,4 c c c | +@end lilypond + +この例はテキスト スパナ -- 音楽の上に置かれる延長線付きのテキスト -- の@c +作成方法についても示しています。@c +スパナは @code{\startTextSpan} コマンドから +@code{\stopTextSpan} コマンドまで延び、テキストのフォーマットは +@code{\override TextSpanner} コマンドによって定義されます。@c +詳細は @ruser{テキスト スパナ} を参照してください。 + +この例はさらにオッターバ囲みを作成する方法についても示しています。 + +@cindex tweaking bar number placement (小節番号の配置を調節する) +@cindex bar numbers, tweaking placement (小節番号の配置を調節する) +@cindex tweaking metronome mark placement (メトロノーム記号の配置を調節する) +@cindex metronome mark, tweaking placement (メトロノーム記号の配置を調節する) +@cindex tweaking rehearsal mark placement (リハーサル記号の配置を調節する) +@cindex rehearsal marks, tweaking placement (リハーサル記号の配置を調節する) + +小節番号、メトロノーム記号、リハーサル記号は示されていないということに@c +注意してください。@c +デフォルトでは、それらは @code{Score} コンテキストの中で作成され、@c +それらの @code{outside-staff-priority} は @code{Staff} コンテキストの中で@c +作成されるレイアウト オブジェクトとは異なり無視されます。@c +小節番号、メトロノーム記号あるいはリハーサル記号を@c +それらの @code{outside-staff-priority} に従って配置したいのなら、@c +@code{Score} コンテキストからそれぞれ @code{Bar_number_engraver}, +@code{Metronome_mark_engraver}, @code{Mark_engraver} を削除して最上位の +@code{Staff} コンテキストに置く必要があります。@c +そうした場合、それらの記号には@c +以下のデフォルトの @code{outside-staff-priority} 値が与えられます: + +@multitable @columnfractions .3 .3 +@headitem レイアウト オブジェクト @tab 優先度 +@item @code{RehearsalMark} @tab @code{1500} +@item @code{MetronomeMark} @tab @code{1000} +@item @code{BarNumber} @tab @code{ 100} +@end multitable + +@code{outside-staff-priority} のデフォルト値による配置が@c +あなたの望みに合わない場合、いずれかのオブジェクトの優先度を@c +オーバライドすることになるかもしれません。@c +上記の例で、オッターバ囲みをテキスト スパナの下に配置したいとします。@c +すべきことは、@code{OttavaBracket} は @code{Staff} コンテキストの中に@c +作成されるということを思い出し、@code{OttavaBracket} の優先度を@c +内部リファレンスか上記の表で調べて、それを @code{TextSpanner} の値よりも@c +小さくすることです: + +@cindex TextSpanner, example of overriding (TextSpanner をオーバライドする例) +@cindex bound-details property, example (bound-details プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% 以降のテキスト スパナの詳細を設定します +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% 強弱記号を譜の上に配置します +\dynamicUp +% 以降のオッターバ囲みをテキスト スパナの下に配置します +\once \override Staff.OttavaBracket #'outside-staff-priority = #340 +% オッターバ囲みの開始 +\ottava #1 +c'4 \startTextSpan +% 強弱テキストを付け加えます +c4\pp +% 強弱の線スパナを付け加えます +c4\< +% テキスト スクリプトを付け加えます +c4^Text | +c4 c +% 強弱テキストを付け加えます +c4\ff c \stopTextSpan | +% オッターバ囲みを終わらせます +\ottava #0 +c,4 c c c | +@end lilypond + +@cindex slurs and outside-staff-priority (スラーと outside-staff-priority) +@cindex slurs and articulations (スラーとアーティキュレーション) +@cindex articulations and slurs (アーティキュレーションとスラー) + +スラーはデフォルトでは譜内部オブジェクトに分類されています。@c +しかしながら、譜の上部に配置された音符に付くスラーは@c +しばしば譜の上に表示されます。@c +このことは、スラーがまず最初に配置されるため、アーティキュレーションなどの@c +譜外部オブジェクトをあまりにも高い位置に押し上げる可能性があります。@c +アーティキュレーションの @code{avoid-slur} プロパティに +@code{'inside} をセットすることでアーティキュレーションを@c +スラーよりも内側に配置することができます。@c +しかし、@code{avoid-slur} プロパティはアーティキュレーションの +@code{outside-staff-priority} が @code{#f} にセットされている場合にのみ@c +効果を持ちます。@c +代替手段として、スラーの @code{outside-staff-priority} に数値を@c +セットすることによって、スラーを他の譜外部オブジェクトとともに +@code{outside-staff-priority} 値に従って配置することができます。@c +ここで、2 つの方法の効果を示す例を挙げます: + +@lilypond[quote,verbatim,relative=2] +c4( c^\markup { \tiny \sharp } d4.) c8 | +c4( +\once \override TextScript #'avoid-slur = #'inside +\once \override TextScript #'outside-staff-priority = ##f +c4^\markup { \tiny \sharp } d4.) c8 | +\once \override Slur #'outside-staff-priority = #500 +c4( c^\markup { \tiny \sharp } d4.) c8 | +@end lilypond + +@code{outside-staff-priority} は、個々のオブジェクトの垂直方向の配置を@c +制御するために使用することもできます。@c +しかしながら、その結果は常に望み通りになるわけではありません。@c +@ref{自動配置} にある例で @qq{Text3} を @qq{Text4} の上に@c +配置したいとします。@c +すべきことは @code{TextScript} の優先度を内部リファレンスか上記の表で調べて、@c +@qq{Text3} の優先度を大きくすることです: + +@cindex TextScript, example of overriding (TextScript をオーバライドする例) +@cindex outside-staff-priority property, example (outside-staff-priority プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +\once \override TextScript #'outside-staff-priority = #500 +c2^"Text3" +c2^"Text4" | +@end lilypond + +これはたしかに @qq{Text3} を @qq{Text4} の上に配置しています。@c +しかし、@qq{Text3}を @qq{Text2} の上に配置して、@c +@qq{Text4} を押し下げてもいます。@c +おそらく、これはそれほど望ましい結果ではないでしょう。@c +本当に望んでいることは、すべての注釈を@c +譜の上に譜から同じ距離だけ離して配置することです。@c +そうするには明らかに、テキストのためにもっと広いスペースを確保するために、@c +音符を水平方向に広げる必要があります。@c +これは @code{\textLengthOn} コマンドを用いることで達成できます。 + +@subheading \textLengthOn + +@cindex notes, spreading out with text (テキストに合わせて音符の間隔を広げる) + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +デフォルトでは、音楽のレイアウトが考慮されている限り、@c +マークアップによって作り出されるテキストは水平方向のスペースと関係しません。@c +@code{\textLengthOn} コマンドはこの動作を逆にして、@c +テキストの配置に便宜をはかる必要がある限り、音符の間隔を広げます: + +@c KEEP LY +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\textLengthOn % 音符の間隔を広げてテキストに揃えます +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +デフォルトの動作に戻すためのコマンドは @code{\textLengthOff} です。@c +@code{\once} は @code{\override}, @code{\set}, @code{\revert} +それに @code{\unset} だけに付けることができるということを@c +思い出してください。@c +そのため、@code{\textLengthOn} で @code{\once} を使うことはできません。 + +@cindex markup text, allowing collisions (マークアップ テキストの衝突を許可する) + +マークアップ テキストは譜の上に突き出している音符を避けます。@c +このことが望ましくない場合、優先度を @code{#f} にセットすることによって@c +上方向への自動再配置を Off にすることになるかもしれません。@c +ここで、マークアップ テキストがそのような音符とどのように相互作用するかを@c +示す例を挙げます。 + +@cindex TextScript, example of overriding (TextScript をオーバライドする例) +@cindex outside-staff-priority property, example (outside-staff-priority プロパティの例) + +@c KEEP LY +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +% このマークアップは短いため衝突は起きません +c2^"Tex" c'' | +R1 | + +% このマークアップは長くて納まりきらないため、上に押し上げられます +c,,2^"Text" c'' | +R1 | + +% 衝突回避を OFF にします +\once \override TextScript #'outside-staff-priority = ##f +c,,2^"Long Text " c'' | +R1 | + +% 衝突回避を OFF にします +\once \override TextScript #'outside-staff-priority = ##f +\textLengthOn % そして textLengthOn を ON にします +c,,2^"Long Text " % 後ろにスペースが付け加えられます +c''2 | +@end lilypond + +@subheading 強弱記号 + +@cindex tweaking dynamics placement (強弱記号の配置を調整する) +@cindex dynamics, tweaking placement (強弱記号の配置を調整する) + +通常、強弱記号は譜の下に配置されます。@c +しかしながら、@code{dynamicUp} コマンドを使うことで上に@c +配置されるかもしれません。@c +強弱記号は、その記号が付いている音符と垂直方向の関係で配置され、@c +フレージング スラーや小節番号などの譜内部オブジェクトのすべてよりも@c +下 (あるいは上) に配置されます。@c +このことは、以下の例のように、@c +到底受け入れられない結果を生み出す可能性があります: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\clef "bass" +\key aes \major +\time 9/8 +\dynamicUp +bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | +ees,2.~\)\mf ees4 r8 | +@end lilypond + +しかしながら、音符とそれに付けられた強弱記号が互いに近い場合、@c +自動配置は後の方にある強弱記号を譜から離すことによって衝突を避けます。@c +しかし、以下のかなり不自然な例が示すように、@c +それは最適な配置ではないかもしれません: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +@q{実際} の音楽で同じような状況があった場合、音符の間隔をもう少し広げて、@c +すべての強弱記号が譜から垂直方向に同じだけ離れるようにする方が@c +望ましいかもしれません。@c +マークアップ テキストの場合は @code{\textLengthOn} コマンドを@c +用いることによってそうすることができますが、@c +強弱記号には等価のコマンドがありません。@c +そのため、@code{\override} コマンドを用いてそれを達成する方法を@c +見出す必要があります。 + +@subheading グラフィカル オブジェクトのサイズ + +@cindex grob sizing (グラフィカル オブジェクトのサイズを決定する) +@cindex sizing grobs (グラフィカル オブジェクトのサイズを決定する) + +まず最初に、グラフィカル オブジェクトのサイズがどのように決定されるかを@c +学ばなくてはなりません。@c +すべてのグラフィカル オブジェクトの内部では参照ポイントが定義され、@c +それはそれらの親オブジェクトとの相対位置を決定するために使用されます。@c +このポイントは親オブジェクトから垂直方向に @code{X-offset}、@c +垂直方向に @code{Y-offset} 離れた位置になります。@c +オブジェクトの水平方向の広がりは数値のペア @code{X-extent} で与えられ、@c +そのペアはオブジェクトの左端と右端の参照ポイントとの相対関係について@c +述べています。@c +垂直方向の広がりも同様に数値のペア @code{Y-extent} によって与えられます。@c +これらは @code{grob-interface} をサポートする@c +すべてのグラフィカル オブジェクトが持つプロパティです。 + +@cindex @code{extra-spacing-width} + +デフォルトでは、譜外部オブジェクトには 0 の幅が与えられているため、@c +水平方向で重なる可能性があります。@c +これは @code{extra-spacing-width} に @code{'(+inf.0 . -inf.0)} を@c +セットすることによって、左端の広がりにプラス無限大、右端の広がりに@c +マイナス無限大を付け加えるというトリックによって達成されています。@c +そのため、譜外部オブジェクトが水平方向で重ならないことを保証するには、@c +@code{extra-spacing-width} の値を @code{'(0 . 0)} に@c +オーバライドする必要があります。@c +これにより、本当の幅が明らかになります。@c +以下は強弱記号テキストに対してこれを行うコマンドです: + +@example +\override DynamicText #'extra-spacing-width = #'(0 . 0) +@end example + +@noindent +これが前の例で機能するかどうかを見てみましょう: + +@cindex DynamicText, example of overriding (DynamicText をオーバライドする例) +@cindex extra-spacing-width property, example (extra-spacing-width プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +\override DynamicText #'extra-spacing-width = #'(0 . 0) +a4\f b\mf c\mp b\p | +@end lilypond + +@noindent +確かに強弱記号の再配置をストップさせています。@c +しかし、2 つの問題が残っています。@c +強弱記号を互いにもう少し離すべきであり、それらは譜から@c +同じ距離にあるほうが望ましいです。@c +最初の問題は簡単に解決できます。@c +@code{extra-spacing-width} を 0 にする代わりに、@c +もう少し大きな値を与えるのです。@c +単位は 2 本の譜線の間隔なので、左端を 1 単位の半分だけ左に移動させ、@c +右端を 1 単位の半分だけ右に移動させると解決になります: + +@cindex DynamicText, example of overriding (DynamicText をオーバライドする例) +@cindex extra-spacing-width property, example (extra-spacing-width プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 staff space +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +これで前よりも良くなりました。@c +しかし、強弱記号が音符に合わせて上下するよりも、@c +同じベースラインで揃っている方が望ましいでしょう。@c +それを行うためのプロパティは @code{staff-padding} であり、@c +後に続くセクションでカバーされています。 + + +@node オブジェクトの衝突 +@section オブジェクトの衝突 +@translationof Collisions of objects + +@menu +* オブジェクトを移動させる:: +* 表記の重なりを修正する:: +* 実際の音楽からの例:: +@end menu + + +@node オブジェクトを移動させる +@subsection オブジェクトを移動させる +@translationof Moving objects + +@cindex moving overlapping objects (重なり合っているオブジェクトを移動させる) +@cindex moving colliding objects (衝突しているオブジェクトを移動させる) +@cindex moving colliding grobs (衝突しているグラフィカル オブジェクトを移動させる) +@cindex objects, moving colliding (衝突しているオブジェクトを移動させる) +@cindex grobs, moving colliding (衝突しているグラフィカル オブジェクトを移動させる) + +これを聞いて驚くかもしれませんが、LilyPond は完璧ではありません。@c +いくつかの記譜要素が重なりある可能性があります。@c +これは遺憾なことですが、実際にはごく稀です。@c +通常、オブジェクトを移動させる必要性は読みやすさや美しさのためです +-- オブジェクトの周りにもう少しスペースを多く/少なくとった方が@c +より良くなるといった場合です。 + +記譜要素の重なりを解決する主要なアプローチが 3 つあります。@c +それらは以下の順番で考慮されるべきです: + +@enumerate +@item +重なり合っているオブジェクトの 1 つの @strong{direction} を +@ref{譜内部オブジェクト} でリストアップした内部オブジェクトのための@c +定義済みコマンドを用いて変更することになるかもしれません。@c +符幹、スラー、連桁、タイ、強弱記号、テキスト、@c +連符はこの方法で容易に再配置できるかもしれません。@c +この方法の限界は配置の仕方の選択肢が 2 つしかないことであり、@c +どちらも適当でないかもしれません。 + +@item +LilyPond がレイアウト オブジェクトを配置するときに使用する@c +@strong{オブジェクト プロパティ}を @code{\override} を用いて@c +変更することになるかもしれません。@c +オブジェクト プロパティに変更を加えることの利点は、@c +(a) スペースをとる必要がある場合に他のいくつかのオブジェクトは@c +自動的に移動させられます、@c +(b) 1 回のオーバライドを同じオブジェクト タイプの@c +インスタンスすべてに適用することができます。@c +変更するプロパティには以下のものが含まれます: + +@itemize + +@item +@code{direction} + +これはすでに詳しくカバーされています -- +@ref{譜内部オブジェクト} を参照してください。 + +@item +@code{padding}, @code{left-padding}, +@code{right-padding}, @code{staff-padding} + +@cindex padding (パディング) +@cindex left-padding property (left-padding プロパティ) +@cindex padding property (padding プロパティ) +@cindex right-padding property (right-padding プロパティ) +@cindex staff-padding property (staff-padding プロパティ) + +あるオブジェクトが配置されるとき、そのオブジェクトの +@code{padding} プロパティが、そのオブジェクトとそのオブジェクトに@c +最も隣接するオブジェクトの端との間に置かれる間隔を指定します。@c +@strong{配置される最中}のオブジェクトの @code{padding} 値が@c +使用されるということに注意してください。@c +すでに配置されたオブジェクトの @code{padding} 値は無視されます。@c +@code{padding} によって指定された間隔は @code{side-position-interface} を@c +サポートするオブジェクトすべてに適用することができます。 + +臨時記号のグループの配置は、@code{padding} の代わりに、@code{left-padding} と +@code{right-padding} によって制御されます。@c +これらのプロパティは @code{AccidentalPlacement} オブジェクトの中にあり、@c +注意すべきことに、そのオブジェクトは +@strong{Staff} コンテキストの中にあります。@c +譜刻プロセスでは、符頭が最初に譜刻され、臨時記号 (がある場合は) が@c +次に符頭の左側に付け加えられます。@c +このとき、臨時記号と符頭の間隔は +@code{right-padding} プロパティによって指定されます。@c +そのため、@code{AccidentalPlacement} オブジェクトの +@code{right-padding} プロパティだけが臨時記号の配置に影響を与えます。 + +@code{staff-padding} プロパティは @code{padding} プロパティと@c +深い関わりがあります: +@code{padding} プロパティは、@code{side-position-interface} を@c +サポートするオブジェクトとそれに最隣接する他のオブジェクト +(一般には音符や譜線) との間のスペースの最小量を制御します。@c +一方、@code{staff-padding} は常に譜の外側に配置される@c +レイアウト オブジェクトにのみ適用されます -- +これは譜の外側に配置されるオブジェクトと譜の間に挿入されるべき@c +スペースの最小量を制御します。@c +@code{staff-paddin} は譜ではなく音符との相対関係で配置されるオブジェクトには@c +影響を与えないということに注意してください。@c +そのようなオブジェクトに対して @code{staff-padding} のオーバライドを@c +行ったとしてもエラーは起きないかもしれませんが、無視されます。 + +あなたが再配置しようとしているオブジェクトに対して求められる +@code{padding} プロパティはどれなのかを見つけるには、内部リファレンスに@c +戻ってそのオブジェクトのプロパティを調べる必要があります。@c +@code{padding} プロパティはあなたが再配置しようとしているオブジェクトの中には@c +無いかもしれないということに注意してください。@c +その場合は、そのオブジェクトに関係があるオブジェクトを調べてください。 + +すべての @code{padding} 値は譜スペースで測られます。@c +たいていのオブジェクトでは、この値はデフォルトで約 1.0 か@c +それ以下にセットされています (それぞれのオブジェクトで値はさまざまです)。@c +間隔を大きく (あるいは小さく) する必要がある場合、@c +その値はオーバライドされるかもしれません。 + +@item +@code{self-alignment-X} + +@cindex self-alignment-X property (self-alignment-X プロパティ) + +このプロパティを使うことで、親オブジェクトの参照ポイントに従って、@c +オブジェクトを左、右、中央に揃えることができます。@c +このプロパティは @code{self-alignment-interface} をサポートする@c +オブジェクトすべてに対して使用することができます。@c +一般に、テキストを保持するオブジェクトです。@c +値は @code{Left}, @code{RIGHT}, @code{CENTER} です。@c +代替手段として、@code{-1} から @code{+1} までの数値を@c +指定することもできます。@c +@code{-1} は左揃えであり、@code{+1} は右揃え、@c +その間の数値は左揃えから右揃えへのテキストを移動させます +(訳者: @code{-0.5} であれば、左揃えと中央揃えの中間ということ)。@c +@code{1} よりも大きな数値を指定することでテキストをさらに左へ、@c +@code{-1} よりも小さな数値を指定することでテキストを@c +さらに右へ移動させることができます。@c +この値を @code{1} 増減することによる移動量はそのテキストの長さの半分です。 + +@item +@code{extra-spacing-width} + +@cindex extra-spacing-width property (extra-spacing-width プロパティ) + +このプロパティは @code{item-interface} をサポートするオブジェクトすべてで@c +利用可能です。@c +このプロパティは 2 つの数値をとり、最初の数値はオブジェクトの左側に@c +余白を追加し、2 番目の数値はオブジェクトの右側に余白を追加します。@c +負値はオブジェクトの端を左に移動させ、正値は右に移動させます。@c +そのため、オブジェクトを広くするには、最初の数値を負値にして、@c +2 番目の数値を正値にする必要があります。@c +すべてのオブジェクトが両方の数値を遵守するわけではないということに@c +注意してください。@c +例えば、@code{Accidental} オブジェクトは最初の数値 (左端) にしか@c +注意を払いません。 + +@item +@code{staff-position} + +@cindex staff-position property (staff-position プロパティ) + +@code{staff-position} は @code{staff-symbol-referencer-interface} の@c +プロパティです。@c +これは、譜との相対関係で配置されるオブジェクトによってサポートされます。@c +このプロパティはオブジェクトの垂直方向の位置を、譜の中央にある譜線から@c +譜スペースの半分を単位として、指定します。@c +このプロパティは複数小節に亘る休符、タイ、異なるボイスの中にある音符といった@c +レイアウト オブジェクトの衝突を解決する場合に有用です。 + +@item +@code{force-hshift} + +@cindex force-hshift property (force-hshift プロパティ) + +和音の中で近接して配置された音符や異なるボイスの中にあって同時に起こる音符は、@c +符頭の衝突を避けるために、2 つ (場合によってはそれ以上) の列に@c +配置されます。@c +この列は音符列と呼ばれ、その列に音符をレイアウトするために @code{NoteColumn} +と呼ばれるオブジェクトが作成されます。 + +@code{force-hshift} プロパティは @code{NoteColumn} のプロパティです +(実際には @code{note-column-interface} のプロパティです)。@c +このプロパティを変更することで音符列を、音符列特有の単位 -- +すなわち、最初のボイスの中にある音符の符頭の幅 -- に従って、@c +移動させることができます。@c +このプロパティは、通常の +@code{\shiftOn} コマンド +(@ref{ボイスを明示的にインスタンス化する} を参照してください) +が音符の衝突を解決できないような複雑な状況で使用されるべきです。@c +この目的のためには、@code{extra-offset} プロパティを用いるよりも +@code{force-hshift} プロパティを用いる方が好ましいです。@c +なぜなら、譜スペースを単位とした距離を算出する必要が無く、@c +@code{NoteColumn} の内外に音符を移動させることは符頭のマージといった@c +他のアクションに影響を与えるからです。 + +@end itemize + +@item +最後に、他の方法がすべて失敗した場合、オブジェクトを手動で譜の中央線からの@c +垂直方向の相対位置に従って、あるいは新たに設定した位置との距離に従って、@c +再配置することになるかもしれません。@c +この方法の欠点は、再配置のための正確な値を算出する必要がある -- +しばしば、その算出はそれぞれのオブジェクトに対して個々に、トライ&エラーで@c +行われます -- 必要があるということ、さらに、この方法による移動は +LilyPond が他のオブジェクトをすべて配置した後に行われるため、@c +ユーザはその結果として起こるかもしれない衝突を@c +すべて回避する責任があるということです。@c +しかし、この方法の最大の問題点は、音楽が後で変更された場合に、@c +再配置用の値を再び算出する必要があるということです。@c +このタイプの手動再配置のために使用されるプロパティは以下のようなものです: + +@table @code +@item extra-offset + +@cindex extra-offset property (extra-offset プロパティ) + +このプロパティは @code{grob-interface} をサポートするレイアウト オブジェクトの@c +いずれかに適用されます。@c +このプロパティはペアになった数値をとり、それぞれの数値は@c +水平方向と垂直方向の移動を指定します。@c +負値はオブジェクトを左または下へ移動させます。@c +単位は譜スペースです。@c +この移動はオブジェクトの譜刻が完了した後に行われるため、あるオブジェクトを@c +任意の位置へ、他のオブジェクトに影響を与えることなく、再配置することができます。 + +@item positions + +@cindex positions property (positions プロパティ) + +このプロパティは、連桁、スラー、連符の傾きと高さを手動で調節するために@c +最も有用なプロパティです。@c +このプロパティはペアになった数値をとり、それぞれの数値は連桁、@c +スラーなどの左端と右端の位置を譜の中央線との距離で指定します。@c +単位は譜スペースです。@c +けれども、スラーとフレージング スラーを任意の値で@c +再配置することはできないということに注意してください。@c +LilyPond はまずスラーが取り得る位置のリストを生成し、それからデフォルトでは +@qq{最良に見える} スラーを探します。@c +@code{positions} がオーバライドされていた場合、@c +そのリストの中からリクエストされた位置に最も近いスラーが選択されます。 +@end table + +@end enumerate + +あるオブジェクトがこれらのプロパティすべてを持っているわけではありません。@c +内部リファレンスに行き、そのオブジェクトではどのプロパティが@c +利用可能なのかを調べる必要があります。 + +ここで、衝突に関係しそうなオブジェクトをリスト アップします。@c +内部リファレンスを調べるためのオブジェクト名を付けるので、@c +それらのオブジェクトを移動させるのに使うプロパティを見つけ出すのに@c +使ってください。 + +@multitable @columnfractions .5 .5 +@headitem オブジェクト タイプ @tab オブジェクト名 +@item アーティキュレーション (Articulation) @tab @code{Script} +@item 連桁 (Beam) @tab @code{Beam} +@item 強弱記号 (Dynamic) (垂直方向) @tab @code{DynamicLineSpanner} +@item 強弱記号 (Dynamic) (水平方向) @tab @code{DynamicText} +@item 運指法記号 (Fingering) @tab @code{Fingering} +@item リハーサル / テキスト記号 (Rehearsal / Text mark) @tab @code{RehearsalMark} +@item スラー (Slur) @tab @code{Slur} +@item テキスト -- つまり、@code{^"text"} (Text) @tab @code{TextScript} +@item タイ (Tie) @tab @code{Tie} +@item 連符 (Tuplet) @tab @code{TupletBracket} +@end multitable + + +@node 表記の重なりを修正する +@subsection 表記の重なりを修正する +@translationof Fixing overlapping notation + +今度は、前のセクションで扱ったプロパティが記譜の重なりを解決する手助けを@c +どのようにできるかを見ていきましょう。 + +@subheading padding プロパティ + +@cindex padding (パディング) +@cindex fixing overlapping notation (記譜要素の重なりを修正する) +@cindex overlapping notation (重なり合っている記譜要素) + +@code{padding} プロパティに値をセットすることによって、音符とその上または下に@c +譜刻される記号との間の距離を増減することができます。 + +@cindex Script, example of overriding (Script をオーバライドする例) +@cindex padding property, example (padding プロパティの例) + +@lilypond[quote,fragment,relative=1,verbatim] +c2\fermata +\override Script #'padding = #3 +b2\fermata +@end lilypond + +@cindex MetronomeMark, example of overriding (MetronomeMark をオーバライドする例) +@cindex padding property, example (padding プロパティの例) + +@c KEEP LY +@lilypond[quote,fragment,relative=1,verbatim] +% これは機能しません。この下を見てください +\override MetronomeMark #'padding = #3 +\tempo 4 = 120 +c1 | +% これは機能します +\override Score.MetronomeMark #'padding = #3 +\tempo 4 = 80 +d1 | +@end lilypond + +2 番目の例では、ある特定のオブジェクトを扱うのはどのコンテキストなのかを@c +突き止めることが重要であるということに注意してください。@c +@code{MetronomeMark} オブジェクトは @code{Score} コンテキストの中で@c +処理されるため、@code{Voice} コンテキストの中でのプロパティの変更は@c +無視されます。@c +更に詳細を知りたければ、@ruser{Modifying properties} を参照してください。 + +@code{outside-staff-priority} に従って配置されているオブジェクトの並びの中の@c +あるオブジェクトの @code{padding} プロパティが増やされた場合、@c +そのオブジェクトとそれよりも外側にあるすべてオブジェクトが移動させられます。 + +@subheading right-padding + +@cindex right-padding property (right-padding プロパティ) + +@code{right-padding} プロパティは臨時記号とそれが適用される音符との間の@c +スペースに影響を与えます。@c +このプロパティを変更することは必ずしも必要ではありませんが、@c +微分音の音楽で使われる特殊な臨時記号の図柄や図柄の組み合わせに対して@c +デフォルトのスペースが適切ではない場合に必要となるかもしれません。@c +臨時記号のステンシルを望みのシンボルを保持するマークアップにオーバライド@c +する必要があります: + +@cindex Accidental, example of overriding (Accidental をオーバライドする例) +@cindex text property, example (text プロパティの例) +@cindex stencil property, example (stencil プロパティの例) +@cindex AccidentalPlacement, example of overriding (AccidentalPlacement をオーバライドする例) +@cindex right-padding property, example (right-padding プロパティの例) + +@c KEEP LY +@lilypond[quote,ragged-right,verbatim] +sesquisharp = \markup { \sesquisharp } +\relative c'' { + c4 + % これは 1.5 倍シャープを譜刻しますが、スペースが小さすぎます + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 c + % これはスペースを改善しています + \once \override Score.AccidentalPlacement #'right-padding = #0.6 + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 | +} +@end lilypond + +@noindent +これは必然的に臨時記号のステンシルをオーバライドすることになります。@c +このオーバライドについては後々までカバーされません。@c +ステンシル タイプは手続きでなければならず、ここでは @code{Accidental} の +@code{text} プロパティの内容 +-- 内容には 1.5 倍シャープがセットされています +-- を譜刻するように変更されています。@c +それらの記号は @code{right-padding} のオーバライドによって@c +符頭からさらに遠くへ移動させられています。 + +@noindent + +@subheading staff-padding プロパティ + +@cindex aligning objects on a baseline (オブジェクトをベースラインに揃える) +@cindex objects, aligning on a baseline (オブジェクトをベースラインに揃える) + +@code{staff-padding} を使うことで、強弱記号などのオブジェクトを、@c +それらが取り付けられる音符の位置に依存した高さではなく、@c +譜上のある固定した高さのベースラインに揃えることができます。@c +このプロパティは @code{DynamicText} のプロパティではなく、@c +@code{DynamicSpanner} のプロパティです。@c +この理由は、このベースラインは延長スパナを含む @strong{すべて} の強弱記号に@c +等しく適用されるべきだからです。@c +そのため、これは以前のセクションでの例の中にある強弱記号を@c +揃えるための方法になります: + +@cindex DynamicText, example of overriding (DynamicText をオーバライドする例) +@cindex extra-spacing-width property, example (extra-spacing-width プロパティの例) +@cindex DynamicLineSpanner, example of overriding (DynamicLineSpanner をオーバライドする例) +@cindex staff-padding property, example (staff-padding プロパティの例) + +@c KEEP LY +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% 幅を 1 単位広げます +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +% 強弱記号を譜から 2 単位上のベース ラインに揃えます +\override DynamicLineSpanner #'staff-padding = #2 +a4\f b\mf c\mp b\p +@end lilypond + +@subheading self-alignment-X プロパティ + +以下の例はこのプロパティが、運指法記号オブジェクトの右端を親の音符の@c +参照ポイントに揃えることによって、@c +弦楽器の運指法記号オブジェクトと音符の符幹とのこのプロパティが衝突を@c +解決している様子を示しています: + +@cindex StringNumber, example of overriding (StringNumber をオーバライドする例) +@cindex self-alignment-X property, example (self-alignment-X プロパティの例) + +@lilypond[quote,fragment,ragged-right,verbatim,relative=3] +\voiceOne + +\once \override StringNumber #'self-alignment-X = #RIGHT + +@end lilypond + +@subheading staff-position プロパティ + +@cindex object collision within a staff (譜内部でのオブジェクトの衝突) + +あるボイスの中にある複数小節に亘る休符は他のボイスの中にある音符と@c +衝突する可能性があります。@c +このような休符は小節線と小節線の間の中央に譜刻されるため、@c +LilyPond がそれと衝突するかもしれない音符を突き止めるのは非常に困難です。@c +なぜなら、現在の音符間それに音符-休符間の衝突対応は、@c +同時に起こる音符と休符に対してのみ行われるからです。@c +以下に、このタイプの衝突の例を挙げます: + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< { c4 c c c } \\ { R1 } >> +@end lilypond + +ここでの最良の解決策は、複数小節に亘る休符を下へ移動させることです。@c +なぜなら、その休符はボイス 2 の中にあるからです。@c +@code{\voiceTwo} (すなわち、@code{<<@{...@} \\ @{...@}>>} 構造の +2 番目のボイス) のデフォルト状態では、@c +@code{MultiMeasureRest} の @code{staff-position} は @code{-4} に@c +セットされています。@c +そのため、そのプロパティを、例えば半譜スペース 4 つ分押し下げるには、@c +@code{-8} に変更する必要があります。 + +@cindex MultiMeasureRest, example of overriding (MultiMeasureRest をオーバライドする例) +@cindex staff-position property, example (staff-position プロパティの例) + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< + { c4 c c c } + \\ + \override MultiMeasureRest #'staff-position = #-8 + { R1 } +>> +@end lilypond + +これは、例えば @code{extra-offset} を使うよりも良い解決方法です。@c +なぜなら、その休符の上に加線が自動的に挿入されるからです。 + +@subheading extra-offset プロパティ + +@cindex positioning objects (オブジェクトの位置を決定する) +@cindex positioning grobs (グラフィカル オブジェクトの位置を決定する) +@cindex objects, positioning (オブジェクトの位置を決定する) +@cindex grobs, positioning (グラフィカル オブジェクトの位置を決定する) + +@code{extra-offset} プロパティは、あるオブジェクトの水平方向と垂直方向の@c +配置を完全に制御します。 + +以下の例では、2 番目の運指法記号が少し左に、そして 1.8 譜スペース下に@c +移動させられています: + +@cindex Fingering, example of overriding (Fingering をオーバライドする例) +@cindex extra-offset property, example (extra-offset プロパティの例) + +@lilypond[quote,fragment,relative=1,verbatim] +\stemUp +f4-5 +\once \override Fingering #'extra-offset = #'(-0.3 . -1.8) +f4-5 +@end lilypond + +@subheading positions プロパティ + +@cindex controlling tuplets, slurs, phrasing slurs, and beams manually (連符、スラー、フレージング スラーそれに連桁を手動で制御する) +@cindex manually controlling tuplets, slurs, phrasing slurs, and beams (連符、スラー、フレージング スラーそれに連桁を手動で制御する) +@cindex tuplet beams, controlling manually (連譜の連桁を手動で制御する) +@cindex slurs, controlling manually (スラーを手動で制御する) +@cindex phrasing slurs, controlling manually (フレージング スラーを手動で制御する) +@cindex beams, controlling manually (連桁を手動で制御する) + +@code{positions} プロパティは連符、スラー、フレージング スラー、@c +連桁の位置と傾きを手動で制御することを可能にします。@c +ここで、装飾音符に付いたスラーを避けようとしているために@c +醜いフレージング スラーを持つ例を挙げます。 + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 \acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +フレージング スラーを音符の上へ移動させることで、より良い結果が得られます: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\phrasingSlurUp +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +しかし、何らかの理由でそうすることができない場合、それに代わる解決策は、@c +@code{positions} プロパティを使ってフレージング スラーの左端を@c +少し下げることです。@c +この方法でも見栄えの悪さを解決できます。 + +@cindex PhrasingSlur, example of overriding (PhrasingSlur をオーバライドする例) +@cindex positions property, example (positions プロパティの例) + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\once \override PhrasingSlur #'positions = #'(-4 . -3) +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +さらに、Chopin の 前奏曲 Op 28 No. 2 の左手の譜の開始部分から取った@c +例を挙げます。@c +連桁が上部にある音符と衝突しています: + +@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 } >> +} +@end lilypond + +@noindent +これは、譜の中央線から 2 譜スペース上の位置にある連桁の両端を、例えば、3 +に手動で上げることによって解決することができます: + +@cindex Beam, example of overriding (Beam をオーバライドする例) +@cindex positions property, example (positions プロパティの例) + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \clef "bass" + << + \override Beam #'positions = #'(3 . 3) + { b,8 ais, b, g, } + \\ + { e,8 g e, g } + >> + << { b,8 ais, b, g, } \\ { e,8 g e, g } >> +} +@end lilypond + +@noindent +オーバライドの効果は継続して 2 番目のブロックのボイス 1 にも@c +適用されていますが、ボイス 2 の連桁にはまったく適用されていないということに@c +注意してください。 + +@subheading force-hshift プロパティ + +今や、@ref{私はボイスを聴いている} の最後で挙げた Chopin の例に@c +どのように修正を加えるべきかを知っています。@c +この例は以下のような状態でした: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + 2 des + } + >> | + 1 | +} +@end lilypond + +@noindent +最初の和音の下の方にある 2 つの音符 (つまり、3 番目のボイス (ボイス 4) の音符) +を上の方にある 2 つの音符の音符列からずらすべきではありません。@c +これを修正するには、下の音符の @code{force-hshift} -- +これは @code{NoteColumn} のプロパティです -- を 0 にセットします。@c +2 番目の和音の下の方の音符は、上の方の音符のすぐ右に置くのが最良です。@c +そうするには、この音符の @code{force-hshift} を 0.5 にセットします -- +つまり、上の方の音符の音符列から符頭の幅の半分だけ右にずらします。 + +ここで、最終結果を挙げます: + +@cindex NoteColumn, example of overriding (NoteColumn をオーバライドする例) +@cindex force-hshift property, example (force-hshift プロパティの例) + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +@node 実際の音楽からの例 +@subsection 実際の音楽からの例 +@translationof Real music example + +調整についてのセクションを、望みの出力を作り出すためにいくつかの調整を@c +必要とするトリッキーな例を処理するときにとられるステップを示すことで@c +締めくくります。@c +この例は、記譜法についての普通ではない問題を解決するための記譜法リファレンスの@c +使い方を示すために慎重に選ばれたものです。@c +この例は一般的な譜刻プロセスを代表するものではありません。@c +ですから、この例の複雑さでやる気を失わないでください!@c +幸いなことに、このように複雑な問題は非常に稀です! + +この例は Chopin の Première Ballade, Op. 23 の第 6 - 9 小節からとりました。@c +序盤の Lento から Moderato へと移調する部分です。@c +まず最初に望んでいる出力挙げますが、例があまりにも複雑になり過ぎないように@c +強弱記号、運指法記号、ペダル記号は省きました。 + +@c The following should appear as music without code +@c This example should not be indexed +@c line-width ensures no break +@c KEEP LY +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + bes2.^\markup { \bold "Moderato" } r8 + << + { c,8 d fis bes a } + \new Voice { + \voiceTwo + c,8~ + % マージされる音符の右にある c2 を再配置します + \once \override NoteColumn #'force-hshift = #1.0 + % c2 をメインの音符列から外したため、マージが機能します + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % マージさせるために d2 の符幹を下向きにする必要があります + \stemDown + % d2 の符幹を不可視にします + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +まず、第 3 小節の右手パートには 4 つのボイスが必要であることに注目します。@c +それぞれのボイスは、連桁でつながれた 5 つの 8 分音符、タイで結ばれた C、@c +半音符の D (これは 8 分音符の D とマージされています)、@c +付点 4 分音符の F シャープ (これも同じピッチの 8 分音符とマージされています) +です。@c +他の部分はすべて単一のボイスなので、最も容易な方法は +4 つのボイスを必要になったときに一時的に導入する方法です。@c +一時的に多声にする方法を忘れてしまったのならば、@c +@ref{私はボイスを聴いている} と @ref{ボイスを明示的にインスタンス化する} +を参照してください。@ +ここでは、多声パッセージに明示的にインスタンス化されたボイスを使うことにします。@c +なぜなら、すべてのボイスが明示的にインスタンス化されている方が、@c +LilyPond はうまく衝突を回避できるからです。 + +音符を 2 つの変数として入力し、@c +譜構造を Score ブロックの中でセットアップすることから始めて、@c +それで LilyPond がデフォルトでどのような出力を作り出すのか見てみましょう: + +@c line-width ensures no break +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4. g8 | + bes1~ | + \time 6/4 + bes2. r8 + % 4 つのボイスの多声セクションの開始 + << + { c,8 d fis bes a } % メイン ボイスの続き + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2. % メイン ボイスの続き + } +} + +lhMusic = \relative c' { + r2 2 | + 1 | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +すべての音符は間違っていません。@c +しかしながら、見た目は満足とは程遠いものです。@c +タイは移調する拍子記号と衝突していて、第 3 小節の連桁の付け方は@c +間違っていて、音符はマージされておらず、いくつかの記譜要素は欠けています。@c +簡単なものから片付けていきましょう。@c +連桁の付け方は手動で連桁を挿入することで修正でき、左手パートのスラーと@c +右手パートのフレージング スラーは簡単に追加できます +-- なぜなら、これらはすべてチュートリアルでカバーされているからです。@c +これらの修正を加えると、以下のようになります: + +@c line-width ensures no break +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + bes1~ | + \time 6/4 + bes2. r8 + % 4 つのボイスの多声セクションの開始 + << + { c,8 d fis bes a } % メイン ボイスの続き + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % メイン ボイスの続き + } +} + +lhMusic = \relative c' { + r2 2( | + 1) | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +第 1 小節は正しくなりました。@c +第 2 小節にはアルペジオが含まれていて、2 重の小節線で終わります。@c +この学習マニュアルではこれらのことは言及されてこなかったのに、@c +どうやってやればいいのでしょうか?@c +ここで、記譜法リファレンスに移行する必要があります。@c +索引で @q{arpeggio} と @q{bar line} を探せばすぐに、アルペジオは +@code{\arpeggio} を和音の後に付け加えることによって作り出され、@c +2 重小節線は @code{\bar "||"} コマンドによって作り出されることが@c +わかります。@c +それは簡単にできます。@c +次に、タイと拍子記号の衝突を修正する必要があります。@c +これはタイを上に移動させる方法が最善です。@c +オブジェクトの移動については以前に @ref{オブジェクトを移動させる} でカバーしました。@c +そこでは、譜との相対位置で配置されるオブジェクトは、@c +そのオブジェクトの @code{staff-position} プロパティを@c +オーバライドすることによって、移動させることができると述べられています。@c +このプロパティは譜スペースの半分を単位として、譜の中央線からの距離で@c +指定されます。@c +ですから、以下の以下のオーバライドをタイで結ばれる最初の音符の前に置けば、@c +タイは中央線から 3.5 半譜スペースだけ上の位置に移動させられます: + +@code{\once \override Tie #'staff-position = #3.5} + +これで第 2 小節の修正も完了で、以下のようになります: + +@c line-width ensures no break +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2. r8 + % 4 つのボイスの多声セクションの開始 + << + { c,8 d fis bes a } % メイン ボイスの続き + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % メイン ボイスの続き + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +第 3 小節 -- Moderato セクションの開始部分 -- に取り掛かります。@c +チュートリアルで @code{\markup} コマンドを使ってボールド体のテキストを@c +付け加える方法を示しましたので、@q{Moderato} をボールド体で付け加えることは@c +容易です。@c +しかし、異なるボイスの中にある音符をマージするにはどうするのでしょうか?@c +ここで、助けを求めて記譜法リファレンスに移行する必要があります。@c +記譜法リファレンスで @qq{merge} を探せばすぐに、@c +@ruser{Collision resolution} で符頭や付点の付き方が異なる音符を@c +マージするためのコマンドにたどり着きます。@c +今回の例では、多声部セクションで両方のタイプの音符をマージする +(異なる符頭を持つ音符のマージと、付点の付き方が異なる音符のマージ) +必要があるので、記譜法リファレンスで見つけた情報を使って、以下のコマンド: + +@example +\mergeDifferentlyHeadedOn +\mergeDifferentlyDottedOn +@end example + +@noindent +を多声部セクションの開始点に置き、以下のコマンド: + +@example +\mergeDifferentlyHeadedOff +\mergeDifferentlyDottedOff +@end example + +@noindent +をセクションの終了点に置きます。これで、例は以下のようになります: + +@c line-width ensures no break +@c KEEP LY +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % 4 つのボイスの多声セクションの開始 + << + { c,8 d fis bes a } % メイン ボイスの続き + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % メイン ボイスの続き + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +オーバライドは 2 つの F シャープの音符をマージしましたが、@c +2 つの D をマージしませんでした。@c +なぜマージしなかったのでしょうか?@c +その答えは記譜法リファレンスの同じセクションにあります +-- マージされる音符は反対向きの符幹を持っていなくてはならず、@c +同じ音符列に 3 つ目の音符がある場合は 2 つの音符をマージさせることは@c +できません。@c +今回の例では、2 つの D は両方とも上向きの符幹を持っていて、@c +3 つ目の音符 -- C -- が存在します。@c +我々は @code{\stemDown} を用いて符幹の向きを変更する方法を知っていて、@c +記譜法リファレンスも C を移動させる方法について述べています -- +@code{\shift} コマンドの 1 つを用いてシフトを行います。@c +しかし、どのシフトを行えばよいのでしょうか?@c +C はシフト off のボイス 2 の中にあり、2 つの D はボイス 1 とボイス 3 -- +それぞれ、シフト off とシフト on -- の中にあります。@c +ですから、C が 2 つの D と衝突するのを避けるために、@c +@code{\shiftOnn} を用いて C を更にシフトさせる必要があります。@c +これらの変更を加えると、以下のようになります: + +@cindex Tie, example of overriding (Tie をオーバライドする例) +@cindex staff-position property, example (staff-position プロパティの例) + +@c line-width ensures no break +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % 4 つのボイスの多声セクションの開始 + << + { c,8 d fis bes a } % メイン ボイスの続き + \new Voice { + \voiceTwo + % c2 をメインの音符列から外したため、マージが機能します + c,8~ \shiftOnn c2 + } + \new Voice { + \voiceThree + % マージさせるために d2 の符幹を下向きにする必要があります + s8 \stemDown d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % メイン ボイスの続き + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +もうちょっとです。@c +残っている問題は 2 つだけです: +マージされた D の下向きの符幹はあるべきではなく、C は D の右側に配置した方が@c +良いということです。@c +以前に行った調整からこれらを行う方法を両方とも知っています: +符幹を透明にして、@code{force-hshift} プロパティを用いて C を移動させます。@c +ここで、最終結果を示します: + +@cindex NoteColumn, example of overriding (NoteColumn をオーバライドする例) +@cindex force-hshift property, example (force-hshift プロパティの例) +@cindex Stem, example of overriding (Stem をオーバライドする例)) +@cindex transparent property, example (transparent プロパティの例) + +@c line-width ensures no break +@c KEEP LY +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % 4 つのボイスの多声セクションの開始 + << + { c,8 d fis bes a } % メイン ボイスの続き + \new Voice { + \voiceTwo + c,8~ + % マージされる音符の右にある c2 を再配置します + \once \override NoteColumn #'force-hshift = #1.0 + % c2 をメインの音符列から外したため、マージが機能します + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % マージさせるために d2 の符幹を下向きにする必要があります + \stemDown + % d2 の符幹を不可視にします + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % メイン ボイスの続き + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + + +@node 更なる調整 +@section 更なる調整 +@translationof Further tweaking + +@menu +* 調整のその他の使用方法:: +* 調整のために変数を使用する:: +* スタイル シート:: +* その他の情報源:: +* 処理に時間のかかる調整を避ける:: +* Scheme を用いた高度な調整:: +@end menu + +@node 調整のその他の使用方法 +@subsection 調整のその他の使用方法 +@translationof Other uses for tweaks + +@cindex transparent property, use of (transparent プロパティの使用方法) +@cindex objects, making invisible (オブジェクトを不可視にする) +@cindex removing objects (オブジェクトを削除する) +@cindex objects, removing (オブジェクトを削除する) +@cindex hiding objects (オブジェクトを隠す) +@cindex objects, hiding (オブジェクトを隠す) +@cindex invisible objects (不可視のオブジェクト) +@cindex objects, invisible (不可視のオブジェクト) +@cindex tying notes across voices (異なるボイスの中にある音符をタイで結ぶ) + +@subheading 異なるボイスの中にある音符をタイで結ぶ + +以下の例は異なるボイスの中にある音符をタイで結ぶ方法を示しています。@c +通常、タイで結べるのは同じボイスの中にある 2 つ音符だけです。@c +2 つのボイスを使い、そのうちの 1 つにタイで結んだ音符を置きます: + +@lilypond[quote,fragment,relative=2] +<< { b8~ b\noBeam } \\ { b8[ g] } >> +@end lilypond + +@noindent +そして、そのボイスの最初の上向き符幹を消します。@c +これで、タイはボイスをまたがっているように見えます: + +@cindex Stem, example of overriding (Stem をオーバライドする例) +@cindex transparent property, example (transparent プロパティの例) + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +符幹は表示されなくなっただけなので、タイの長さが十分ではありません。@c +符幹の @code{length} を @code{8} にセットすることで符幹を伸ばすことができます: + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +@subheading MIDI でフェルマータをシミュレートする + +@cindex stencil property, use of (stencil プロパティの使用方法) +@cindex fermata, implementing in MIDI (MIDI でフェルマータ を実装する) + +譜外部オブジェクトを出力から削除しようとする場合、そのオブジェクトの +@code{transparent} プロパティではなく @code{stencil} プロパティを@c +オーバライドする方が通常は望ましいです。@c +あるオブジェクトの @code{stencil} プロパティを +@code{#f} にセットすると、@c +そのオブジェクトは出力から完全に削除されます。@c +このことは、削除されたオブジェクトがそのオブジェクトとの相対位置で@c +配置される他のオブジェクトの配置にまったく影響を及ぼさないということを@c +意味します。 + +例えば、MIDI 出力でフェルマータをシミュレートするためにメトロノーム設定を@c +変更したいとします。@c +その場合、メトロノーム記号を出力に表示させたくありません。@c +そして、それが 2 つのシステム (小節とその中にある表記) 間のスペースと、@c +譜上にある隣接する注釈の位置に影響を与えることを望みません。@c +そのため、そのメトロノーム記号の @code{stencil} プロパティを +@code{#f} にセットする方法が最良です。@c +ここで、2 つの手法の結果を示します: + +@cindex MetronomeMark, example of overriding (MetronomeMark をオーバライドする例) +@cindex transparent property, example (transparent プロパティの例) + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'transparent = ##t + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@cindex MetronomeMark, example of overriding (MetronomeMark をオーバライドする例) +@cindex stencil property, example (stencil プロパティの例) + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'stencil = ##f + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@noindent +両方の手段とも、フェルマータ部分の演奏時間を伸ばすメトロノーム記号を@c +出力から削除していて、両方とも MIDI の演奏に必要な効果を与えています。@c +しかし、1 番目の例の透明なメトロノーム記号がそれに続く拍子指示を@c +上に押し上げているのに対して、2 番目のメトロノーム記号 (ステンシルが@c +削除されたもの) は押し上げていません。 + +@seealso +音楽用語集: +@rglos{system} + + +@node 調整のために変数を使用する +@subsection 調整のために変数を使用する +@translationof Using variables for tweaks + +@cindex variables, using for tweaks (調整のために変数を使用する) +@cindex using variables for tweaks (調整のために変数を使用する) +@cindex tweaks, using variables for (調整のために変数を使用する) + +オーバライド コマンドはしばしば長く、入力するのが大変なものになります。@c +そして、それらは完全に正しく記述されなければなりません。@c +同じオーバライドが何度も使用される場合、それらを保持する変数を定義すると@c +非常に役に立ちます。 + +歌詞の中のある特定の単語をボールド イタリック体で譜刻することによって、@c +それらを強調したいと仮定します。@c +歌詞の中では、@code{\italic} と @code{\bold} は (書式を) 変更したい@c +単語や文と一緒に @code{\markup} ブロックの中に入れた場合にのみ@c +機能しますが、それを毎回入力するのは大変です。@c +埋め込む必要のある単語自体が、2 つのコマンドを簡単な変数を用いて使うことを@c +妨げます。@c +代替手段として、@code{\override} コマンドと @code{\revert} コマンドを@c +使うことはできないでしょうか? + +@example +@code{\override Lyrics . LyricText #'font-shape = #'italic} +@code{\override Lyrics . LyricText #'font-series = #'bold} + +@code{\revert Lyrics . LyricText #'font-shape} +@code{\revert Lyrics . LyricText #'font-series} +@end example + +これらも、強調する必要のある単語がたくさんある場合、入力するのが@c +非常に大変です。@c +しかしながら、これらは 2 つの変数として定義することが@emph{でき}、@c +それらの変数で単語を囲むことによって使ってその単語を強調することが@c +@emph{できます}。@c +これらのオーバライドに変数を用いることのもう 1 つの利点は、@c +ドットの両側にスペースを置く必要が無いことです。@c +なぜなら、これらのオーバライドは @code{\lyricmode} の中で@c +直接解釈されるわけではないからです。@c +ここで変数を用いる例を挙げますが、実際には早く打ち込めるように@c +もっと短い変数名を使用します: + +@cindex LyricText, example of overriding (LyricText をオーバライドする例) +@cindex font-shape property, example (font-shape プロパティの例) +@cindex font-series property, example (font-series プロパティの例) + +@lilypond[quote,verbatim] +emphasize = { + \override Lyrics.LyricText #'font-shape = #'italic + \override Lyrics.LyricText #'font-series = #'bold +} + +normal = { + \revert Lyrics.LyricText #'font-shape + \revert Lyrics.LyricText #'font-series +} + +global = { \key c \major \time 4/4 \partial 4 } + +SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = \lyrics { + E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, +} + +VerseTwo = \lyricmode { + O | \emphasize Christ, \normal whose voice the | wa -- ters heard, +} + +VerseThree = \lyricmode { + O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood +} + +VerseFour = \lyricmode { + O | \emphasize Tri -- ni -- ty \normal of | love and pow'r +} + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Soprano" { \VerseOne } + \new Lyrics \lyricsto "Soprano" { \VerseTwo } + \new Lyrics \lyricsto "Soprano" { \VerseThree } + \new Lyrics \lyricsto "Soprano" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@node スタイル シート +@subsection スタイル シート +@translationof Style sheets + +LilyPond が作り出す出力にはさまざまな変更を加えることができます +(詳細は @ref{出力を調整する} を参照してください)。@c +しかしながら、調整を加えたい入力ファイルがたくさんあるとしたらどうでしょう?@c +また、単に調整を実際の音楽表記から分離したいとしたらどうでしょう?@c +これはとても簡単なことです。 + +以下の例を見てみましょう。@c +@code{#()} を持つ部分を理解できなくても心配しないでください。@c +@ref{Scheme を用いた高度な調整} で説明されています。 + +@lilypond[quote,verbatim,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +この例には出力が重なり合うという問題がいくつかあり、@c +@ref{オブジェクトを移動させる} のテクニックを使ってそれらを修正しています。@c +そこで、さらに @code{mpdolce} 定義と @code{tempoMark} 定義に関して@c +何かしてみましょう。@c +それらは望みの出力を作り出していますが、@c +それらを別の楽曲で使いたいとします。@c +単純にそれらを各ファイルの先頭部分にカット&ペーストすることもできますが、@c +わずらわしいです。@c +その方法では定義は依然として入力ファイルの中にあり、@c +私は個人的にすべての @code{#()} は何か醜いと感じます。@c +それらを他のファイルの中に隠すことにしましょう: + +@example +%%% これを "definitions.ily" というファイル名で保存してください +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) +@end example + +音楽ファイルの先頭付近で @code{\include} コマンドを使ってこのファイルを@c +参照します。@c +(インクルードされるファイルをコンパイルされるメイン ファイルと区別するため、@c +拡張子 @file{.ily} を使っています。) +今度は音楽ファイルを変更しましょう +(このファイルを @file{"music.ly"} として保存してください)。 + +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. + +@example +\include "definitions.ily" + +\relative c'' @{ + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +これで前よりも良くなりましたが、いくつか変更を加えることにします。@c +グリッサンド (訳者: 第 1 小節の C シャープと A の間) は見え難いので、@c +もっと太く、符頭に近づけます。@c +メトロノーム記号を、最初の音符の上ではなく、@c +音部記号の上に持ってきます。@c +最後に、私の作曲の先生は @q{C} 拍子記号を嫌っているので、@c +@q{4/4} に変更した方が良さそうです。 + +@file{music.ly} には変更を加えないでください。@c +@file{definitions.ily} を以下のように書き換えます: + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + \override TimeSignature #'style = #'numbered + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout{ + \context { + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { + \Staff + \override TimeSignature #'style = #'numbered + } + \context { + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +もっと良くなりました!@c +今度はこれを公表したいとします。@c +私の作曲の先生は @q{C} 拍子記号を嫌っていますが、@c +私はそちらを好みます。@c +現在の @code{definitions.ily} を @code{web-publish.ily} にコピーして、@c +それにを変更を加えてみましょう。@c +この音楽はスクリーンに表示される PDF を作り出すことを意図したものなので、@c +出力のフォントを全体に大きくすることにします。 + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +音楽ファイルの中では、単に @code{\include "definitions.ily"} を +@code{\include "web-publish.ily"} に置き換えるだけです。@c +もちろん、これをもっと便利なようにすることができます。@c +@file{definitions.ily} ファイルには +@code{mpdolce} と @code{tempoMark} の定義だけを持たせて、@c +@file{web-publish.ily} ファイルには@c +上で記述した @code{\layout} セクションだけを持たせ、@c +@file{university.ily} ファイルには@c +私の先生の好む出力を作り出すための調整だけを持たせます。@c +@file{music.ly} の先頭部分は以下のようになります: + +@example +\include "definitions.ily" + +%%% 以下の 2 行のどちらか片方のコメントを外してください! +\include "web-publish.ily" +%\include "university.ily" +@end example + +このアプローチは、@c +あなたがパーツ一式を作っているだけだとしても役に立つ可能性があります。@c +私は自分のプロジェクトのために@c +半ダースの @q{スタイル シート} ファイルを使います。@c +私はそれぞれの音楽ファイルを +@code{\include "../global.ily"} で始め、@c +@file{gloval.ily} には以下の内容を記述しています: + +@example +%%% global.ily +\version @w{"@version{}"} + +#(ly:set-option 'point-and-click #f) + +\include "../init/init-defs.ly" +\include "../init/init-layout.ly" +\include "../init/init-headers.ly" +\include "../init/init-paper.ly" +@end example + + +@node その他の情報源 +@subsection その他の情報源 +@translationof Other sources of information + +内部リファレンスは LilyPond についての多くの情報を持っていますが、@c +LilyPond の内部ファイルを調べることによって@c +さらに多くの情報を収集することができます。@c +内部ファイルを探究するには、@c +まずあなたの使っているシステム特有のディレクトリを見つけ出す必要があります。@c +このディレクトリの場所は、(a) あなたが lilypond.org からコンパイル済みの@c +バイナリをダウンロードすることによって LilyPond を手に入れたのか、@c +それとも、パッケージ マネージャから LilyPond をインストールした +(つまり、Linux と一緒に配布されたか、fink や cygwin でインストールされた) +のか、(b) LilyPond はどの OS 上で使用されているのか、に依存します: + +@strong{lilypond.org からダウンロードした} + +@itemize @bullet +@item Linux + +@file{@var{INSTALLDIR}/lilypond/usr/share/lilypond/current/} に進んでください + +@item MacOS X + +@file{@var{INSTALLDIR}/LilyPond.app/Contents/Resources/share/lilypond/current/} +に進んでください。@c +ターミナルからこのディレクトリへ @code{cd} で移動するか、@c +LilyPond アプリケーション上でコントロール クリックして +@q{Show Package Contents} を選択します。 + +@item Windows + +@file{@var{INSTALLDIR}/LilyPond/usr/share/lilypond/current/} に@c +進んでください。Windows Explorer を使います。 + +@end itemize + +@strong{パッケージ マネージャからインストールした、あるいは、@c +ソースからコンパイルした} + +@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/} に進んでください。@c +@var{PREFIX} はパッケージ マネージャか @code{configure} スクリプトによって@c +セットされるものであり、@var{X.Y.Z} は LilyPond のバージョン番号です。 + +@smallspace + +このディレクトリの中に 2 つの興味深いサブディレクトリがあります: + +@itemize +@item @file{ly/} - LilyPond フォーマットに関するファイルを保持しています +@item @file{scm/} -Scheme フォーマットに関するファイルを保持しています +@end itemize + +@file{ly/} の中にあるファイルから見ていきましょう。@c +@file{ly/property-init.ly} をテキスト エディタで開いてください。@c +エディタはあなたが普段 @code{.ly} ファイルを編集するために使っているもので@c +結構です。@c +このファイルは標準の LilyPond 定義済みコマンド +-- @code{\stemUp} や @code{\slurDotted} など +-- のすべての定義を保持しています。@c +1 つまたは複数の @code{\override} コマンドを保持している@c +変数の定義以外のものはないということがわかるでしょう。@c +例えば、@code{\tieDotted} は以下のように定義されています: + +@example +tieDotted = @{ + \override Tie #'dash-period = #0.75 + \override Tie #'dash-fraction = #0.1 +@} +@end example + +あなたがこれらのデフォルト値を好まない場合、これらの定義済みコマンドを@c +容易に再定義することができます -- +他の変数と同様に、入力ファイルの先頭で定義します。 + +以下のファイルは @file{ly/} で見つかる有用なファイルです: + +@multitable @columnfractions .4 .6 +@headitem ファイル名 + @tab 内容 +@item @file{ly/engraver-init.ly} + @tab エングラーバ コンテキストの定義 +@item @file{ly/paper-defaults-init.ly} + @tab 紙面関係のデフォルトの仕様 +@item @file{ly/performer-init.ly} + @tab パフォーマ コンテキストの定義 +@item @file{ly/property-init.ly} + @tab すべての共通定義済みコマンドの定義 +@item @file{ly/spanner-init.ly} + @tab スパナ関係の定義済みコマンドの定義 +@end multitable + +他の設定 (マークアップ コマンドの定義など) は +@code{.scm} (Scheme) ファイルとして保存されています。@c +Scheme プログラミング言語は、LilyPond 内部処理へのプログラム可能な@c +インタフェイスを提供するために使用されます。@c +これらのファイルについての詳しい説明は、Scheme 言語についての知識が@c +必要となるため、このマニュアルの範囲外です。@c +Scheme 言語とこれらのファイルを理解するには、十分な知識や時間が@c +必要であるということを知っておくべきです +(@rextend{Scheme tutorial} を参照してください)。 + +あなたがこの知識を持っているのなら、興味を持つかもしれない Scheme ファイルは@c +以下のものです: + +@multitable @columnfractions .4 .6 +@headitem ファイル名 + @tab 内容 +@item @file{scm/auto-beam.scm} + @tab サブ 連桁のデフォルト (訳者: 8 分音符には連桁だけが使用され、@c +16 分音符やそれよりも短い音符には連桁とサブ 連桁が使われるのだと思います) +@item @file{scm/define-grobs.scm} + @tab Grob (グラフィカル オブジェクト) プロパティのデフォルト設定 +@item @file{scm/define-markup-commands.scm} + @tab すべてのマークアップ コマンドの仕様 +@item @file{scm/midi.scm} + @tab MIDI 出力のデフォルト設定 +@item @file{scm/output-lib.scm} + @tab フレット、色、臨時記号、小節線などの見た目に影響を与える設定 +@item @file{scm/parser-clef.scm} + @tab サポートされる音部記号の定義 +@item @file{scm/script.scm} + @tab アーティキュレーションのデフォルト設定 +@end multitable + + +@node 処理に時間のかかる調整を避ける +@subsection 処理に時間のかかる調整を避ける +@translationof Avoiding tweaks with slower processing + +LilyPond は入力ファイルの処理中に追加のチェックを行うことができます。@c +これらのチェックは実行時間を伸ばしますが、適切な結果を得るのに必要とされる@c +手動調整を減らすかもしれません。@c +テキスト スクリプトや歌詞の一部が余白まではみ出す場合、これらのチェックは@c +楽譜のその行を縮めてマージンの内側に収まるようにします。 + +すべての状況下で有効にするには、以下のように、音楽の中の行ではなく +@code{Score} の @code{\with} ブロックの中に@c +これらのチェックのオーバライドを置くことによって、@c +動作可能な状態にする必要があります: + +@example +\score @{ + @{ @dots{}notes@dots{} @} + \layout @{ + \context @{ + \Score + % テキスト スクリプトと歌詞が紙面のマージン内に納まることを保証します + \override PaperColumn #'keep-inside-line = ##t + \override NonMusicalPaperColumn #'keep-inside-line = ##t + @} + @} +@} +@end example + +しかしながら、@code{keep-inside-line} は処理時間を伸ばすため、@c +最終バージョンを作るまでは有効化しないことをお勧めします。@c +この機能を用いると、手動で @code{\break} コマンドを入力しなくても@c +テキストがページの右端からはみ出すことを防げます。 + + +@node Scheme を用いた高度な調整 +@subsection Scheme を用いた高度な調整 +@translationof Advanced tweaks with Scheme + +@code{\override} と @code{\tweak} コマンドを用いることで@c +多くのことが可能になりますが、LilyPond のアクションを変更するもっと強力な手段が +LilyPond 内部処理へのプログラム可能なインタフェイスを通じて利用可能です。@c +Scheme プログラミング言語で書かれたコードは LilyPond の内部処理に@c +直接組み込むことができます。@c +もちろん、それを行うには Scheme プログラミングについての基礎知識が必要であり、@c +その手引きが @rextend{Scheme tutorial} で提供されています。 + +多くの実現可能なことの 1 つの例としては、プロパティに定数をセットする代わりに +Scheme プロシージャをセットすることができます。@c +このプロパティが LilyPond によってアクセスされたときに、@c +このプロシージャが呼び出されます。@c +このプロシージャが呼び出されたときに、このプロシージャによって決定された@c +値を動的にそのプロパティにセットすることができます。@c +以下の例では、符頭にその音符の譜上での位置に従って色を付けています: + +@cindex x11-color function, example of using (x11-color 関数の使用方法) +@cindex NoteHead, example of overriding (NoteHead をオーバライドする例) +@cindex color property, setting to Scheme procedure (Scheme プロシージャに color プロパティをセットする) + +@c KEEP LY +@lilypond[quote,verbatim,ragged-right] +#(define (color-notehead grob) + "Color the notehead according to its position on the staff." + (let ((mod-position (modulo (ly:grob-property grob 'staff-position) + 7))) + (case mod-position + ;; Return rainbow colors + ((1) (x11-color 'red )) ; for C + ((2) (x11-color 'orange )) ; for D + ((3) (x11-color 'yellow )) ; for E + ((4) (x11-color 'green )) ; for F + ((5) (x11-color 'blue )) ; for G + ((6) (x11-color 'purple )) ; for A + ((0) (x11-color 'violet )) ; for B + ))) + +\relative c' { + % Arrange to obtain color from color-notehead procedure + \override NoteHead #'color = #color-notehead + a2 b | c2 d | e2 f | g2 a | +} +@end lilypond + +@rextend{Callback functions} に、これらのプログラム可能なインタフェイスの@c +使い方を示している例がもっとあります。 + + diff --git a/Documentation/ja/macros.itexi b/Documentation/ja/macros.itexi new file mode 100644 index 0000000000..ca205399f7 --- /dev/null +++ b/Documentation/ja/macros.itexi @@ -0,0 +1,796 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: d2e5da205b22062ef806481b3bb6a27a1807569a + + 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 + + +@include version.itexi +@include common-macros.itexi + +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@quotedblleft{}\TEXT\@quotedblright{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@html +
+@end html +@strong{Note:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Note:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + +@c do not translate the following macro -- it is used in +@c an untranslated manual. + +@ifhtml + +@macro advanced{TEXT} +@html +
+@end html +@strong{Advanced note:} \TEXT\ +@c keep the space for proper nesting of

+ +@html +
+@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro advanced{TEXT} +@quotation +@b{Advanced note:} \TEXT\ +@end quotation +@end macro + +@end ifnothtml + + +@macro docMain +@cartouche +このマニュアルと他のドキュメントの関係について、あるいは、このマニュアルを他の形式で読む方法についての情報は、@rwebnamed{マニュアル,マニュアル} +を参照してください。 + +マニュアルのいずれかを見失ってしまった場合、@w{@uref{http://@/www@/.lilypond@/.org/}} にマニュアルがすべて揃っています。 +@end cartouche +@end macro + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@quotation +GNU フリー文書利用許諾契約書バージョン 1.1 またはフリー ソフトウェア財団によって発行されたその後のバージョンの約定に従う限り、このドキュメントを複製、変更する許可を与えます。変更不可部分はありません。この利用許諾契約書のコピーは「GNU フリー文書利用許諾契約書」という章に含まれています。 +@end quotation +@end copying +@end ifset + + + + + +@ifclear FDL +@copying +This document has been placed in the public domain. +@end copying +@end ifclear + + + +@c ***** Title page ***** +@ifnottex +@node Top +@top LilyPond --- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle 楽譜譜刻プログラム +@titlefont{\TITLE\} +@author LilyPond 開発チーム + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +LilyPond バージョン @version{} 用 +@end titlepage + +@end macro + + +@c ***** Headings in a doc subsection ***** + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading 定義済みコマンド +@end macro + +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Selected Snippets +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading 参照 +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading 既知の問題と警告 +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,\DISPLAY\} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Notation Reference} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extending} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Changes} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,General Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Internals Reference} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,\DISPLAY\} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,\DISPLAY\} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,\DISPLAY\} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,\DISPLAY\} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,\DISPLAY\} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,\DISPLAY\} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,\DISPLAY\} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,\DISPLAY\} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,\DISPLAY\} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,\DISPLAY\} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,\DISPLAY\} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,\DISPLAY\} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,\DISPLAY\} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,\DISPLAY\} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,\DISPLAY\} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,\DISPLAY\} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,\DISPLAY\} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-web, \DISPLAY\} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,\DISPLAY\} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,\DISPLAY\} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,\DISPLAY\} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,\DISPLAY\} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,\DISPLAY\} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning,\DISPLAY\} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation,\DISPLAY\} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,\DISPLAY\} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,\DISPLAY\} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,\DISPLAY\} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web,\DISPLAY\} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,\DISPLAY\} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage,\DISPLAY\} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,\DISPLAY\} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,\DISPLAY\} +@end macro + +@end iftex + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
+@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + +@macro help{TEXT} +@html +
+ + Help wanted: + \TEXT\ +
+@end html +@end macro + + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin was created by +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} with +@uref{http://www.isc.tamu.edu/~lewing/gimp/, the Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +The FreeBSD logo is a registered trademark of +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +The @qq{X image} is not a registered trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} and +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, and +placed under the GNU Free Documentation License version 1.2 or later. +We found the image on +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +this Wikipedia Commons page}. + +@end macro + +@macro logoLegalWindows +The @qq{four colored rectangles image} is not a registered +trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} and +placed under the GNU Free Documentation License version 1.2. We +found the image on +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +this Wikipedia Commons page}. + +@end macro + +@end ifset diff --git a/Documentation/ja/notation.tely b/Documentation/ja/notation.tely new file mode 100644 index 0000000000..572f63e6e1 --- /dev/null +++ b/Documentation/ja/notation.tely @@ -0,0 +1,141 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 2c3bd5e85d39155e3e6804f9818722bef483056d + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@setfilename lilypond-notation.info +@settitle LilyPond 記譜法リファレンス +@documentencoding UTF-8 +@documentlanguage ja +@afourpaper + +@macro manualIntro +このマニュアルは LilyPond バージョン @version{} で提供される@c +すべての記譜法についての参照を提供します。@c +このマニュアルは、読み手が @rlearningnamed{Top,学習マニュアル} で@c +扱っている題材に慣れ親しんでいることを前提としています。 +@end macro + +@c `Notation Reference' was born 1999-10-11 with git commit 940dda0... +@macro copyrightDeclare +Copyright @copyright{} 1999--2009 by 著作者一同 +@end macro + + +@set FDL +@include macros.itexi + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Notation Reference of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + +@lilyTitlePage{記譜法リファレンス} + + +@ifnottex + +@menu +* 音楽記譜法:: ほとんどすべての楽譜作成で使用される記譜法 +* Specialist notation:: 特別な目的でのみ使用される記譜法 +* General input and output:: LilyPond 入力についての一般的な情報 +* Spacing issues:: 出力の表示 +* Changing defaults:: 出力の調整 + +付録 + +* Notation manual tables:: 表と図 +* Cheat sheet:: LilyPond 構文についての要約 +* LilyPond 文法:: LilyPond 構文解析プログラムのための構文ダイアグラム +* GNU Free Documentation License:: このドキュメントの使用許諾書 +* LilyPond コマンド インデックス:: +* LilyPond インデックス:: +@end menu + +@ignore +@menu +* 音楽記譜法:: ほとんどすべての楽譜作成で使用される記譜法 +* 専門的な記譜法:: 特別な目的でのみ使用される記譜法 +* 入出力全般:: LilyPond 入力についての一般的な情報 +* スペースの問題:: 出力の表示 +* デフォルトを変更する:: 出力の調整 + +付録 + +* 記譜法マニュアル表:: 表と図 +* カンニング ペーパー:: LilyPond 構文についての要約 +* LilyPond 文法:: LilyPond 構文解析プログラムのための構文ダイアグラム +* GNU Free Documentation License:: このドキュメントの使用許諾書 +* LilyPond コマンド インデックス:: +* LilyPond インデックス:: +@end menu +@end ignore +@docMain +@end ifnottex + +@contents + +@include notation/notation.itely +@include notation/specialist.itely + +@include notation/input.itely +@include notation/spacing.itely + +@include notation/changing-defaults.itely + + +@include notation/notation-appendices.itely +@include notation/cheatsheet.itely + + + +@node LilyPond 文法 +@appendix LilyPond 文法 +@translationof LilyPond grammar + +この付録は、構文解析プログラムからの出力である、LilyPond 文法についての記述です。 + +@verbatiminclude ly-grammar.txt + + +@include fdl.itexi + + +@node LilyPond コマンド インデックス +@appendix LilyPond コマンド インデックス +@translationof LilyPond command index + +このインデックスは、すべての LilyPond コマンドとキーワードをリストアップしていて、@c +それらの使い方について説明しているマニュアルのセクションへのリンクがあります。@c +各リンクは 2 つのパートに分かれています。@c +最初のパートは、マニュアルの中でコマンドあるいはキーワードが出現する場所@c +へのリンクです。@c +2 番目のパートは、マニュアルの中でコマンドあるいはキーワードが出現するセクションの@c +先頭へのリンクです。 + +@printindex ky + +@node LilyPond インデックス +@appendix LilyPond インデックス +@translationof LilyPond index + +すべての LilyPond コマンドとキーワードに加えて、@c +このインデックスは、それらに関連する音楽用語や単語をリストアップしていて、@c +そのトピックスについて説明しているマニュアルのセクションへのリンクがあります。@c +各リンクは 2 つのパートに分かれています。@c +最初のパートは、マニュアルの中でトピックスが出現する場所へのリンクです。@c +2 番目のパートは、マニュアルの中でトピックスが出現するセクションの先頭へのリンクです。 + +@printindex cp + +@bye diff --git a/Documentation/ja/notation/GNUmakefile b/Documentation/ja/notation/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/ja/notation/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/ja/notation/editorial.itely b/Documentation/ja/notation/editorial.itely new file mode 100644 index 0000000000..f9aeb39776 --- /dev/null +++ b/Documentation/ja/notation/editorial.itely @@ -0,0 +1,746 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 192439e23bf243634b52f77dd7b084cac7a8d48c + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 編集者の注釈 +@section 編集者の注釈 +@translationof Editorial annotations + +@lilypondfile[quote]{editorial-headword.ly} + +このセクションでは、音符の見た目を変える方法と、@c +分析や教育的な強調を付け加える方法について議論します。 + +@menu +* 譜の内部:: +* 譜の外部:: +@end menu + + +@node 譜の内部 +@subsection 譜の内部 +@translationof Inside the staff + +このセクションでは、譜の内部にある要素に強調を付け加える方法について説明します。 + +@menu +* 記譜フォント サイズを選択する:: +* 運指の指示:: +* 隠された音符:: +* オブジェクトに色を付ける:: +* 括弧:: +* 符幹:: +@end menu + +@node 記譜フォント サイズを選択する +@unnumberedsubsubsec 記譜フォント サイズを選択する +@translationof Selecting notation font size + +@cindex font size (notation) scaling (フォント サイズ (記譜法) の調整) +@cindex font size (notation) (フォント サイズ (記譜法)) +@cindex selecting font size (notation) (フォント サイズ (記譜法) を選択する) +@cindex notation font size (記譜フォント サイズ) +@cindex note heads (符頭) + +@funindex fontSize +@funindex font-size +@funindex magstep +@funindex \huge +@funindex \large +@funindex \normalsize +@funindex \small +@funindex \tiny +@funindex \teeny +@funindex huge +@funindex large +@funindex normalsize +@funindex small +@funindex tiny +@funindex teeny + +記譜要素のフォント サイズを変更することができます。@c +これは連桁やスラーなどの可変シンボルのサイズは変更しません。 + +@warning{テキストのフォント サイズを変更する方法については +@ref{Selecting font and font size} を参照してください。} + +@lilypond[verbatim,quote,relative=2] +\huge +c4.-> d8---3 +\large +c4.-> d8---3 +\normalsize +c4.-> d8---3 +\small +c4.-> d8---3 +\tiny +c4.-> d8---3 +\teeny +c4.-> d8---3 +@end lilypond + +内部的には、これは @code{fontSize} プロパティを設定します。@c +この設定により @code{font-size} プロパティが@c +すべてのレイアウト オブジェクトにセットされます。@c +@code{font-size} の値は、カレントの譜の高さでの標準フォント サイズからの@c +相対値を表している数字です。@c +1 段階上がる毎にフォント サイズは約 12% 増加します。@c +6 段階でちょうど 2 倍になります。@c +Scheme 関数 @code{magstep} は @code{font-size} 数をスケーリング ファクタに@c +変換します。@c +@code{font-size} プロパティを直接設定することも可能です。@c +そうした場合、特定のレイアウト オブジェクトだけが影響を受けます。 + +@lilypond[verbatim,quote,relative=2] +\set fontSize = #3 +c4.-> d8---3 +\override NoteHead #'font-size = #-4 +c4.-> d8---3 +\override Script #'font-size = #2 +c4.-> d8---3 +\override Stem #'font-size = #-5 +c4.-> d8---3 +@end lilypond + +@cindex standard font size (notation) (標準フォント サイズ (記譜法)) +@cindex font size (notation), standard (標準フォント サイズ (記譜法)) + +@funindex font-interface +@funindex font-size + +フォント サイズの変更は、ひな形のサイズが望みのサイズに最も近くなるよう +(一定の割合で) 増減することによって、達成されます@c +標準フォント サイズ (@w{@code{font-size = #0}} のフォント サイズ) は@c +標準の譜の高さに基づきます。@c +20pt の譜では、10pt のフォントが選択されます。 + +@code{font-size} プロパティはフォントを使用するレイアウト オブジェクトだけに@c +セットすることができます@c +そのようなオブジェクトは @code{font-interface} レイアウト インタフェイスを@c +サポートします。 + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge} +@endpredefined + + +@seealso +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{font-interface} + + +@node 運指の指示 +@unnumberedsubsubsec 運指の指示 +@translationof Fingering instructions + +@cindex fingering (運指法) +@cindex finger change (指を変える) + +@funindex \finger +@funindex finger + +運指の指示は @var{音符}-@var{数字} を用いることで挿入することができます: + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 e-3 +@end lilypond + +指の変更のためにマークアップ テキストが使用されることもあります。 + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 e-3 +@end lilypond + +指の入れ替えのためにマークアップ テキストを使うこともできます。 + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } +@end lilypond + +@cindex thumb-script (サム-スクリプト) + +@funindex \thumb +@funindex thumb + +ある音符を親指で演奏するよう指示するために、@c +サム-スクリプト (thumb-script) を付け加えることができます +(例えば、チェロ音楽で)。 + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +@cindex fingering chords (和音の運指法) +@cindex fingering instructions for chords (和音の運指指示) +@cindex chords, fingering (和音の運指法) + +和音の個々の音符の後に運指を付け加えることによって、@c +和音に対する運指法を付け加えることができます。 + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +運指指示の配置を手動で譜の上または下にすることができます。@c +@ref{Direction and placement} を参照してください。 + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{avoiding-collisions-with-chord-fingerings.ly} + + +@seealso +記譜法リファレンス: +@ref{Direction and placement} + +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{FingeringEvent}, +@rinternals{fingering-event}, +@rinternals{Fingering_engraver}, +@rinternals{New_fingering_engraver}, +@rinternals{Fingering} + +@knownissues +デフォルトでは、@samp{@var{note}-@var{digit}} は 9 よりも大きな数は@c +サポートしません。 + + +@node 隠された音符 +@unnumberedsubsubsec 隠された音符 +@translationof Hidden notes + +@cindex hidden notes +@cindex invisible notes +@cindex transparent notes +@cindex notes, hidden +@cindex notes, invisible +@cindex notes, transparent + +@funindex \hideNotes +@funindex hideNotes +@funindex \unHideNotes +@funindex unHideNotes + +@c 未訳 +隠された (または不可視、透明の) 音符は、preparing theory や作曲の演習の際に@c +有用です。 + +@lilypond[verbatim,quote,relative=2] +c4 d +\hideNotes +e4 f +\unHideNotes +g a +\hideNotes +b +\unHideNotes +c +@end lilypond + +不可視の音符に取り付けられた記譜オブジェクトは可視のままです。 + +@lilypond[verbatim,quote,relative=2] +c4( d) +\hideNotes +e4(\p f)-- +@end lilypond + + +@predefined +@code{\hideNotes}, +@code{\unHideNotes} +@endpredefined + + +@seealso +学習マニュアル: +@rlearning{オブジェクトの可視性と色} + +Notation Reference: +@ref{不可視の休符}, +@ref{Visibility of objects}, +@ref{譜を隠す} + +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{Note_spacing_engraver}, +@rinternals{NoteSpacing} + + +@node オブジェクトに色を付ける +@unnumberedsubsubsec オブジェクトに色を付ける +@translationof Coloring objects + +@cindex colored objects (色付きのオブジェクト) +@cindex objects, colored (色付きのオブジェクト) +@cindex colors (色) +@cindex coloring objects (オブジェクトに色を付ける) +@cindex colored notes (色付きの音符) +@cindex coloring notes (音符に色を付ける) +@cindex notes, colored (色付きの音符) +@cindex x11 color (X11 カラー) +@cindex x11-color +@cindex with-color + +@funindex color +@funindex \with-color +@funindex with-color +@funindex x11-color + +個々のオブジェクトに色を割り振ることができます。@c +有効なカラー名は @ref{List of colors} でリストアップされています。 + +@lilypond[verbatim,quote,relative=2] +\override NoteHead #'color = #red +c4 c +\override NoteHead #'color = #(x11-color 'LimeGreen) +d +\override Stem #'color = #blue +e +@end lilypond + + +Scheme 関数 @code{x11-color} を用いることによって、@c +X11 のために定義された色の全範囲にアクセスすることができます。@c +この関数は引数を 1 つとります。@c +この引数は @code{'@var{FooBar}} という形式のシンボルであったり、@c +@code{"@var{FooBar}"} という形式の文字列であったりします。@c +最初の形式はより素早く記述できて、より効率的です。@c +しかしながら、2 番目の形式を使うと複数単語形式の X11 カラーに@c +アクセスすることができます。 + +@code{x11-color} がパラメータとして意味をなさない場合、@c +その色はデフォルトの黒になります。 + +@c KEEP LY +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +gis8 a +\override Beam #'color = #(x11-color "medium turquoise") +gis a +\override Accidental #'color = #(x11-color 'DarkRed) +gis a +\override NoteHead #'color = #(x11-color "LimeGreen") +gis a +% 以下は意図的に意味をなさない色を指定しています。符幹が黒のままであることに注意してください +\override Stem #'color = #(x11-color 'Boggle) +b2 cis +@end lilypond + +@cindex rgb-color +@cindex color, rgb (RGB カラー) +@cindex rgb color (RGB カラー) + +@funindex rgb-color + +Scheme 関数 @code{rgb-color} を用いることによって、@c +厳密な RGB カラーを指定することができます。 + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +\override Stem #'color = #(rgb-color 0 0 0) +gis8 a +\override Stem #'color = #(rgb-color 1 1 1) +gis8 a +\override Stem #'color = #(rgb-color 0 0 0.5) +gis4 a +@end lilypond + + +@seealso +記譜法リファレンス: +@ref{List of colors}, +@ref{The tweak command} + +コード断片集: +@rlsr{Editorial annotations} + + +@cindex x11 color (X11 カラー) +@cindex colored notes in chords (和音の中にある色付きの音符) +@cindex notes, colored in chords (和音の中にある色付きの音符) +@cindex color in chords (和音の中で色を付ける) + +@funindex x11-color + +@knownissues +X11 カラーは必ずしも同様の名前を持つノーマル カラーと@c +まったく同じとなるわけではありません。 + +すべての X11 カラーが Web ブラウザで見分けられるわけではありません。@c +つまり、ある Web ブラウザは @code{'LineGreen} と @code{'ForestGreen} を@c +同じ色で表示するかもしれません。@c +Web 向けでは、ノーマル カラーを使用することを推奨します +(つまり、@code{#blue}, @code{#green}, @code{#red})。 + +和音の中にある音符には @code{\override} で色を付けることはできません。@c +@code{\override} の代わりに @code{\tweak} を使用してください +-- @ref{The tweak command} を参照してください。 + + +@node 括弧 +@unnumberedsubsubsec 括弧 +@translationof Parentheses + +@c 保留: ghost notes +@cindex ghost notes (ゴースト音符) +@cindex notes, ghost (ゴースト音符) +@cindex notes, parenthesized (括弧で囲まれた音符) +@cindex parentheses (括弧) + +@funindex \parenthesize +@funindex parenthesize + +音楽イベントの前に @code{\parenthesize} を置くことによって、@c +そのオブジェクトに括弧を付けることができます。@c +和音の前に @code{\parenthesize} を置くと、@c +和音の音符それぞれに括弧が付けられます。@c +和音内部の音符に個別に括弧を付けることもできます。 + +@lilypond[verbatim,quote,relative=2] +c2 \parenthesize d +c2 \parenthesize +c2 +@end lilypond + +音符ではないオブジェクトにも括弧を付けることができます。@c +アーティキュレーションに対して括弧をつける場合、@c +@code{\parenthesize} コマンドの前にハイフンが必要です。 + +@lilypond[verbatim,quote,relative=2] +c2-\parenthesize -. d +c2 \parenthesize r +@end lilypond + + +@seealso +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{Parenthesis_engraver}, +@rinternals{ParenthesesItem}, +@rinternals{parentheses-interface} + + +@knownissues + +和音に括弧を付けると、和音全体に単一の大きな括弧が付くのではなく、@c +それぞれの音符に個別に括弧が付きます。 + + +@node 符幹 +@unnumberedsubsubsec 符幹 +@translationof Stems + +@cindex stem (符幹) +@cindex stem, invisible (不可視の符幹) +@cindex invisible stem (不可視の符幹) + +@funindex \stemUp +@funindex stemUp +@funindex \stemDown +@funindex stemDown +@funindex \stemNeutral +@funindex stemNeutral +@cindex stem, direction (符幹の向き) +@cindex stem, up (符幹を上向きにする) +@cindex stem, down (符幹を下向きにする) +@cindex stem, neutral (符幹の向きを元に戻す) + +音符が見つかった場合はいつでも @code{Stem} オブジェクトが@c +自動的に作成されます。@c +全音符や休符の場合でも @code{Stem} オブジェクトが作成されますが、@c +不可視になります。 + +符幹の向きを手動で上または下にすることができます +-- @ref{Direction and placement} を参照してください。 + + +@predefined +@code{\stemUp}, +@code{\stemDown}, +@code{\stemNeutral} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{default-direction-of-stems-on-the-center-line-of-the-staff.ly} + + +@seealso +記譜法リファレンス: +@ref{Direction and placement} + +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{Stem_engraver}, +@rinternals{Stem}, +@rinternals{stem-interface} + + +@node 譜の外部 +@subsection 譜の外部 +@translationof Outside the staff + +このセクションでは、@c +譜の外側から譜の中にある要素を強調するための方法について説明します。 + +@menu +* バルーン ヘルプ:: +* グリッド ライン:: +* 分析の囲み:: +@end menu + +@node バルーン ヘルプ +@unnumberedsubsubsec バルーン ヘルプ +@translationof Balloon help + +@cindex balloon (バルーン) +@cindex notation, explaining (記譜法を説明する) +@cindex balloon help (バルーン ヘルプ) +@cindex help, balloon (バルーン ヘルプ) + +@funindex \balloonGrobText +@funindex \balloonText +@funindex Balloon_engraver +@funindex balloonGrobText +@funindex balloonText +@funindex \balloonLengthOn +@funindex balloonLengthOn +@funindex \balloonLengthOff +@funindex balloonLengthOff + +記譜要素に四角いバルーンで印を付けて、テキストを付け加えることができます。@c +この機能の主目的は記譜法を説明することです。 + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + 2. +} +@end lilypond + + +上の例には 2 つの音楽関数が使われています +-- @code{balloonGrobText} と @code{balloonText} です。@c +前者は @w{@code{\once \override}} のように使用され、@c +任意のグラフィカル オブジェクトにテキストを付加します。@c +後者はたいてい和音の中で @code{\tweak} のように使用され、@c +個々の音符にテキストを付加します。 + +通常、バルーン ヘルプのテキストは音符の間隔に影響を与えますが、@c +影響を与えないよう変更することもできます: + +Balloon text normally influences note spacing, but this can be +altered: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonLengthOff + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + \balloonLengthOn + 2. +} +@end lilypond + + +@predefined +@code{\balloonLengthOn}, +@code{\balloonLengthOff} +@endpredefined + + +@seealso +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{Balloon_engraver}, +@rinternals{BalloonTextItem}, +@rinternals{balloon-interface} + + +@node グリッド ライン +@unnumberedsubsubsec グリッド ライン +@translationof Grid lines + +@cindex grid lines (グリッド ライン) +@cindex lines, grid (グリッド ライン) +@cindex vertical lines between staves (譜の間の垂直な線) +@cindex lines, vertical between staves (譜の間の垂直な線) + +@funindex Grid_point_engraver +@funindex Grid_line_span_engraver +@funindex gridInterval + +音符に同期して、譜の間に垂直な線を描くことができます。 + +線の終点を作成するために @code{Grid_point_engraver} を用いる必要があります。@c +一方、実際に線を描くために @code{Grid_line_span_engraver} を@c +用いる必要があります。@c +デフォルトでは、グリッド ラインは各符頭の左端に揃えられます。@c +グリッド ラインは上の譜の中央線から下の譜の中央線まで引かれます。@c +@code{gridInterval} でグリッド ライン間の演奏時間を指定する必要があります。 + +@lilypond[verbatim,quote] +\layout { + \context { + \Staff + \consists "Grid_point_engraver" + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + } +} + +\score { + \new ChoirStaff << + \new Staff \relative c'' { + \stemUp + c4. d8 e8 f g4 + } + \new Staff \relative c { + \clef bass + \stemDown + c4 g' f e + } + >> +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{grid-lines--changing-their-appearance.ly} + + +@seealso +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{Grid_line_span_engraver}, +@rinternals{Grid_point_engraver}, +@rinternals{GridLine}, +@rinternals{GridPoint}, +@rinternals{grid-line-interface}, +@rinternals{grid-point-interface}. + + +@node 分析の囲み +@unnumberedsubsubsec 分析の囲み +@translationof Analysis brackets + +@cindex brackets (囲み、角括弧) +@cindex bracket, phrasing (プレージングの囲み) +@cindex phrasing bracket (プレージングの囲み) +@cindex musicological analysis (音楽学的分析) +@cindex analysis, musicologica (音楽学的分析)l +@cindex note grouping bracket (音符グループ化囲み) +@cindex horizontal bracket (水平の囲み) +@cindex bracket, horizontal (水平の囲み) + +@funindex Horizontal_bracket_engraver +@funindex \startGroup +@funindex startGroup +@funindex \stopGroup +@funindex stopGroup + +音楽分析では、囲みを使って楽曲の構造を示します。@c +シンプルな水平な囲みがサポートされています。 + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c2\startGroup + d\stopGroup +} +@end lilypond + +Analysis brackets may be nested. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c4\startGroup\startGroup + d4\stopGroup + e4\startGroup + d4\stopGroup\stopGroup +} +@end lilypond + + +@seealso +コード断片集: +@rlsr{Editorial annotations} + +内部リファレンス: +@rinternals{Horizontal_bracket_engraver}, +@rinternals{HorizontalBracket}, +@rinternals{horizontal-bracket-interface}, +@rinternals{Staff} diff --git a/Documentation/ja/notation/expressive.itely b/Documentation/ja/notation/expressive.itely new file mode 100644 index 0000000000..5f8bdce6bc --- /dev/null +++ b/Documentation/ja/notation/expressive.itely @@ -0,0 +1,1351 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: fe4f33aca60ea7c58bc9196eac43b4acca1d4437 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 発想記号 +@section 発想記号 +@translationof Expressive marks + +@lilypondfile[quote]{expressive-headword.ly} + +このセクションでは楽譜の中で作成可能なさまざまな発想記号をリストアップします。 + +@menu +* 音符に付けられる発想記号:: +* 曲線の発想記号:: +* 直線の発想記号:: +@end menu + + +@node 音符に付けられる発想記号 +@subsection 音符に付けられる発想記号 +@translationof Expressive marks attached to notes + +このセクションでは、音符に添付される発想記号を作成する方法について説明します。@c +音符に添付される発想記号には以下のものがあります: +アーティキュレーション、装飾、強弱記号。@c +新たに強弱記号を作成する方法についても議論します。 + + +@menu +* アーティキュレーションと装飾:: +* 強弱記号:: +* 新たな強弱記号:: +@end menu + + +@node アーティキュレーションと装飾 +@unnumberedsubsubsec アーティキュレーションと装飾 +@translationof Articulations and ornamentations + +@cindex articulations (アーティキュレーション) +@cindex ornamentation (装飾) +@cindex scripts (スクリプト) +@cindex ornaments (装飾) +@cindex espressivo (表現的な) +@cindex fermata (フェルマータ) +@cindex upbow (アップボー、上弓) +@cindex downbow (ダウンボー、下弓) +@cindex foot marks (フット マーク、足記号) +@cindex organ pedal marks (オルガン ペダル記号) +@cindex pedal marks, organ (オルガン ペダル記号) +@cindex turn (ターン) +@cindex open (オープン) +@c 未訳 +@cindex stopped +@c フラジョレット: 六孔の縦笛 +@cindex flageolet (フラジョレット) +@cindex reverseturn (逆ターン) +@cindex trill (トリル) +@cindex prall (プラル) +@cindex mordent (モルデント) +@cindex prallprall (プラルプラル) +@cindex prallmordent (プラルモルデント) +@cindex prall, up (アップ プラル) +@cindex prall, down (ダウン プラル) +@cindex thumb marking +@cindex segno (セーニョ) +@cindex coda (コーダ) +@c 未訳 +@cindex varcoda + +@funindex \accent +@funindex \marcato +@funindex \staccatissimo +@funindex \espressivo +@funindex \staccato +@funindex \tenuto +@funindex \portato +@funindex \upbow +@funindex \downbow +@funindex \flageolet +@funindex \thumb +@funindex \lheel +@funindex \rheel +@funindex \ltoe +@funindex \rtoe +@funindex \open +@funindex \halfopen +@funindex \stopped +@funindex \snappizzicato +@funindex \turn +@funindex \reverseturn +@funindex \trill +@funindex \prall +@funindex \mordent +@funindex \prallprall +@funindex \prallmordent +@funindex \upprall +@funindex \downprall +@funindex \upmordent +@funindex \downmordent +@funindex \pralldown +@funindex \prallup +@funindex \lineprall +@funindex \signumcongruentiae +@funindex \shortfermata +@funindex \fermata +@funindex \longfermata +@funindex \verylongfermata +@funindex \fermataMarkup +@funindex \segno +@funindex \coda +@funindex \varcoda + + +@funindex - + + +アーティキュレーション、装飾音それに他の演奏指示を表すさまざまな記号は@c +以下の構文を用いて音符に付けることができます: + +@example +@var{note}\@var{name} +@end example + +@code{@var{name}} に対してとり得る値は +@ref{List of articulations} でリストアップしています。@c +例えば: + +@lilypond[verbatim,quote,relative=2] +c4\staccato c\mordent b2\turn +c1\fermata +@end lilypond + +@cindex marcato (マルカート) +@cindex tenuto (テヌート) +@cindex staccatissimo (スタッカーティシモ) +@cindex accent (アクセント) +@cindex staccato (スタッカート) +@cindex portato (ポルタート) + +これらのアーティキュレーションのいくつかはより容易に入力できるよう@c +短縮記法を持っています。@c +短縮記法は音符名の後ろに付けられ、ダッシュ @code{-} と@c +それに続くアーティキュレーションを表す記号から成ります。@c +あらかじめ定義されている短縮記法は以下のアーティキュレーションです: +@notation{marcato}, @notation{stopped}, @notation{tenuto}, +@notation{staccatissimo}, @notation{accent}, @notation{staccato} +それに @notation{portato}。@c +これらの出力は以下のように表示されます: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +アーティキュレーションのデフォルトの配置規則は@c +ファイル @file{scm/@/script@/.scm} で定義されています。@c +アーティキュレーションと装飾は手動で譜の上または下に配置されることもあります +-- @ref{Direction and placement} を参照してください。 + +アーティキュレーションは @code{Script} オブジェクトです。@c +これらのプロパティについて @rinternals{Script} に説明があります。 + +アーティキュレーションは音符と同様に休符に付けることもできますが、@c +複数小節の休符に付けることはできません。@c +特殊な定義済みコマンド @code{\fermataMarkup} は複数小節の休符に付ける@c +ことができます (複数小節の休符にだけ付けることができます)。@c +このコマンドは @code{MultiMeasureRestText} オブジェクトを作成します。 + +@lilypond[verbatim,quote,relative=2] +\override Script #'color = #red +\override MultiMeasureRestText #'color = #blue +a2\fermata r\fermata +R1\fermataMarkup +@end lilypond + +アーティキュレーションに加えて、テキストとマークアップを音符に付けることができます。@c +@ref{Text scripts} を参照してください。 + +音符につけられる Script と TextScript の配置順序についての更なる情報は、@c +@rlearning{オブジェクトの配置} を参照してください。 + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{modifying-default-values-for-articulation-shorthand-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-vertical-ordering-of-scripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-a-delayed-turn.ly} + +@seealso +音楽用語集: +@rglos{tenuto}, +@rglos{accent}, +@rglos{staccato}, +@rglos{portato} + +記譜法リファレンス: +@ref{Direction and placement}, +@ref{List of articulations}, +@ref{トリル} + +インストールされているファイル: +@file{scm/@/script@/.scm} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{Script}, +@rinternals{TextScript} + + +@node 強弱記号 +@unnumberedsubsubsec 強弱記号 +@translationof Dynamics + +@cindex absolute dynamics (絶対強弱記号) +@cindex dynamics (強弱記号) +@cindex dynamics, absolute (絶対強弱記号) + +@funindex \ppppp +@funindex ppppp +@funindex \pppp +@funindex pppp +@funindex \ppp +@funindex ppp +@funindex \pp +@funindex pp +@funindex \p +@funindex p +@funindex \mp +@funindex mp +@funindex \mf +@funindex mf +@funindex \f +@funindex f +@funindex \ff +@funindex ff +@funindex \fff +@funindex fff +@funindex \ffff +@funindex ffff +@funindex \fffff +@funindex fffff +@funindex \fp +@funindex fp +@funindex \sf +@funindex sf +@funindex \sff +@funindex sff +@funindex \sp +@funindex sp +@funindex \spp +@funindex spp +@funindex \sfz +@funindex sfz +@funindex \rfz +@funindex rfz + +絶対強弱記号は音符の後にコマンドを用いて +-- @code{c4\ff} などのように +-- 指定します。 +利用可能な強弱記号は +@code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, @code{\p}, +@code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, +@code{\ffff}, @code{\fffff}, @code{\fp}, @code{\sf}, @code{\sff}, +@code{\sp}, @code{\spp}, @code{\sfz}, それに @code{\rfz} です。 +強弱記号を手動で譜の上または下に配置することもできます -- +@ref{Direction and placement} を参照してください。 + +@lilypond[verbatim,quote,relative=2] +c2\ppp c\mp +c2\rfz c^\mf +c2_\spp c^\ff +@end lilypond + +@c 保留 +@cindex hairpin (ヘアピン) +@cindex crescendo (クレッシェンド) +@cindex decrescendo (デクレッシェンド) +@cindex diminuendo (ディミヌエンド) + +@funindex \< +@funindex \> +@funindex \! +@funindex \cr +@funindex cr +@funindex \decr +@funindex decr + +@notation{クレッシェンド} 記号は @code{\<} で始まり、@code{\!}、@c +絶対強弱記号あるいは追加のクレッシェンド記号またはデクレッシェンド記号で@c +終わります。@c +@notation{デクレッシェンド} 記号は @code{\>} で始まり、@code{\!}、@c +絶対強弱記号あるいは次のクレッシェンド記号またはデクレッシェンド記号で@c +終わります。@c +@code{\cr} と @code{\decr} を @code{\<} と @code{\>} の代わりに@c +用いる場合もあります。@c +この記譜法を用いるとデフォルトでは @notation{ヘアピン} が譜刻されます。 + +@lilypond[verbatim,quote,relative=2] +c2\< c\! +d2\< d\f +e2\< e\> +f2\> f\! +e2\> e\mp +d2\> d\> +c1\! +@end lilypond + +@code{\!} で終了するヘアピンは、@c +@code{\!} が割り当てられた音符の右端で終了します。@c +次の @notation{クレッシェンド} または @notation{デクレッシェンド} 記号の@c +開始によってヘアピンが終了する場合、@c +そのヘアピンは次の @code{\<} または @code{\>} が割り当てられた@c +音符の中央で終了します。@c +次のへアピンは、通常通りに音符の左端で始まる代わりに、右端から始まります。 + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\< a | c4 a c\! a\< | c4 a c a\! +@end lilypond + +@code{\!} の代わりに絶対強弱記号で終了するヘアピも同じように譜刻されます。@c +しかしながら、絶対強弱記号の幅によってヘアピンの終了点は変わります。 + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\mf a | c1\< | c4 a c\ffff a +@end lilypond + +@cindex multiple dynamic marks on one note (1 つの音符に複数の強弱記号をつける) +@cindex dynamic marks, multiple on one note (1 つの音符に複数の強弱記号をつける) +1 つの音符に複数の記号を譜刻するには、空白休符を用いる必要があります。@c +これは特に、同じ音符に @notation{クレッシェンド} と @notation{デクレッシェンド} +を付ける場合に有用です。 + +@lilypond[verbatim,quote,relative=2] +c4\< c\! d\> e\! +<< f1 { s4 s4\< s4\> s4\! } >> +@end lilypond + +@cindex espressivo articulation (表現的なアーティキュレーション) + +@funindex \espressivo +@funindex espressivo + +@code{\espressivo} コマンドを用いて、同じ音符にクレッシェンドとデクレッシェンドを@c +付けることができます。@c +しかしながら、これは強弱記号ではなくアーティキュレーションとして実装されている@c +ということに注意してください。 + +@lilypond[verbatim,quote,relative=2] +c2 b4 a +g1\espressivo +@end lilypond + + +@funindex \cresc +@funindex cresc +@funindex \decresc +@funindex decresc +@funindex \dim +@funindex dim +テキストのクレッシェンド記号は @code{\cresc} で開始します。@c +テキストのデクレッシェンド記号は @code{\decresc} または +@code{\dim} で開始します。@c +必要に応じて延長線が譜刻されます。 + +@lilypond[verbatim,quote,relative=2] +g8\cresc a b c b c d e\mf | +f8\decresc e d c e\> d c b | +a1\dim ~ | +a2. r4\! | +@end lilypond + +@funindex \crescTextCresc +@funindex crescTextCresc +@funindex \dimTextDecresc +@funindex dimTextDecresc +@funindex \dimTextDecr +@funindex dimTextDecr +@funindex \dimTextDim +@funindex dimTextDim +@funindex \crescHairpin +@funindex crescHairpin +@funindex \dimHairpin +@funindex dimHairpin + +強弱のテキスト符号の変更でヘアピンを置換することもできます: +@lilypond[verbatim,quote,relative=2] +\crescTextCresc +c4\< d e f\! | +\dimTextDecresc +g4\> e d c\! | +\dimTextDecr +e4\> d c b\! | +\dimTextDim +d4\> c b a\! | +\crescHairpin +\dimHairpin +c4\< d\! e\> d\! | +@end lilypond + +新たに絶対強弱記号や強弱に対応させるテキストを作成するには、@c +@ref{新たな強弱記号} を参照してください。 + +@cindex dynamics, vertical positioning (強弱記号の垂直方向の位置) +@cindex vertical positioning of dynamics (強弱記号の垂直方向の位置) + +@funindex DynamicLineSpanner + + +強弱記号の垂直方向の位置は +@rinternals{DynamicLineSpanner} によって処理されます。 +@funindex \dynamicUp +@funindex dynamicUp +@funindex \dynamicDown +@funindex dynamicDown +@funindex \dynamicNeutral +@funindex dynamicNeutral + +@code{Dynamics} を用いて水平線上に強弱記号を譜刻することができます。@c +タイミングを示すために空白休符を使用します。@c +(@code{Dynamics} コンテキスト内の音符は音楽的時間を取りますが、@c +譜刻されません。)@c +@code{Dynamics} コンテキストはテキスト スクリプト、テキスト スパナ、@c +ピアノ ペダル記号などを保持することができ、有用です。 + +@lilypond[verbatim,quote] +<< + \new Staff \relative c' { + c2 d4 e | + c4 e e,2 | + g'4 a g a | + c1 | + } + \new Dynamics { + s1\< | + s1\f | + s2\dim s2-"rit." | + s1\p | + } +>> +@end lilypond + +@predefined +@code{\dynamicUp}, +@code{\dynamicDown}, +@code{\dynamicNeutral}, +@code{\crescTextCresc}, +@code{\dimTextDim}, +@code{\dimTextDecr}, +@code{\dimTextDecresc}, +@code{\crescHairpin}, +@code{\dimHairpin} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-hairpin-behavior-at-bar-lines.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-minimum-length-of-hairpins.ly} + +@c 未訳 +@cindex al niente (アル ニエンテ) +@cindex niente, al (アル ニエンテ) + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-hairpins-using-al-niente-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligned-dynamics-and-textscripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{hiding-the-extender-line-for-text-dynamics.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-text-and-spanner-styles-for-text-dynamics.ly} + + +@seealso +音楽用語集: +@rglos{al niente}, +@rglos{crescendo}, +@rglos{decrescendo}, +@rglos{hairpin} + +学習マニュアル: +@rlearning{アーティキュレーションと強弱記号} + +記譜法リファレンス: +@ref{Direction and placement}, +@ref{新たな強弱記号}, +@ref{What goes into the MIDI output?}, +@ref{Controlling MIDI dynamics} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{DynamicText}, +@rinternals{Hairpin}, +@rinternals{DynamicLineSpanner}, +@rinternals{Dynamics} + + +@node 新たな強弱記号 +@unnumberedsubsubsec 新たな強弱記号 +@translationof New dynamic marks + +@cindex new dynamic marks (新たな強弱記号) +@cindex dynamic marks, new (新たな強弱記号) + +強弱記号を作成する最も容易な方法は、@c +@code{\markup} オブジェクトを使用することです。 + +@lilypond[verbatim,quote] +moltoF = \markup { molto \dynamic f } + +\relative c' { + 16_\moltoF + 2.. +} +@end lilypond + +@cindex dynamics, editorial (注釈の強弱記号) +@cindex dynamics, parenthesis (括弧の強弱記号) +@cindex editorial dynamics (注釈の強弱記号) +@funindex \bracket +@funindex bracket +@funindex \dynamic +@funindex dynamic + +マークアップ モードでは、@c +注釈の強弱記号 (括弧や角括弧で囲まれます) を作成することができます。@c +マークアップ モードの構文は @ref{Formatting text} で記述されています。 + +@lilypond[verbatim,quote] +roundF = \markup { + \center-align \concat { \bold { \italic ( } + \dynamic f \bold { \italic ) } } } +boxF = \markup { \bracket { \dynamic f } } +\relative c' { + c1_\roundF + c1_\boxF +} +@end lilypond + +@cindex make-dynamic-script +@funindex make-dynamic-script + +単純に中央揃えの強弱記号は @code{make-dynamic-script} 関数を用いて@c +簡単に作成できます。@c + +@lilypond[verbatim,quote] +sfzp = #(make-dynamic-script "sfzp") +\relative c' { + c4 c c\sfzp c +} +@end lilypond + +一般に、@code{make-dynamic-script} は引数として@c +何らかのマークアップ オブジェクトをとります。@c +強弱記号のフォントに含まれる文字は @code{f,m,p,r,s} それに @code{z} だけです。@c +このため、テキストや句読点を含む強弱記号を必要とする場合、@c +フォント ファミリとフォント エンコーディングを通常のテキストに戻すための@c +マークアップ コマンド +-- 例えば @code{\normal-text} -- を用いる必要があります。@c +通常のマークアップの代わりに @code{make-dynamic-script} を用いる利点は、@c +同じ符頭に付けられるマークアップ オブジェクトとヘアピンが垂直方向に揃うことを@c +保証されている点にあります。 + +@lilypond[verbatim,quote] +roundF = \markup { \center-align \concat { + \normal-text { \bold { \italic ( } } + \dynamic f + \normal-text { \bold { \italic ) } } } } +boxF = \markup { \bracket { \dynamic f } } +mfEspress = \markup { \center-align \line { + \hspace #3.7 mf \normal-text \italic espress. } } +roundFdynamic = #(make-dynamic-script roundF) +boxFdynamic = #(make-dynamic-script boxF) +mfEspressDynamic = #(make-dynamic-script mfEspress) +\relative c' { + c4_\roundFdynamic\< d e f + g,1~_\boxFdynamic\> + g1 + g'1~\mfEspressDynamic + g1 +} +@end lilypond + +Scheme 形式のマークアップ モードを用いることもできます。@c +マークアップ Scheme の構文は @rextend{Markup construction in Scheme} で@c +説明されています。 + +@lilypond[verbatim,quote] +moltoF = #(make-dynamic-script + (markup #:normal-text "molto" + #:dynamic "f")) +\relative c' { + 16 + 2..\moltoF +} +@end lilypond + +マークアップ モードでのフォント設定は +@ref{Selecting font and font size} で記述されています。 + + +@seealso +記譜法リファレンス: +@ref{Formatting text}, +@ref{Selecting font and font size}, +@ref{What goes into the MIDI output?}, +@ref{Controlling MIDI dynamics} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + + +@node 曲線の発想記号 +@subsection 曲線の発想記号 +@translationof Expressive marks as curves + +@c 未訳 +このセクションでは曲線を持つさまざまな発想記号 +-- 通常のスラー、フレージング スラー、ブレス記号、Fall それに Doit -- +を作成する方法について説明します。 + +@menu +* スラー:: +* フレージング スラー:: +* ブレス記号:: +* Fall と Doit:: +@end menu + +@node スラー +@unnumberedsubsubsec スラー +@translationof Slurs + +@cindex slurs (スラー) + +@notation{スラー} は括弧を用いて入力します: + +@warning{多声音楽では、@c +スラーが始まったボイスでそのスラーを終わらせる必要があります。} + +@lilypond[verbatim,quote,relative=2] +f4( g a) a8 b( +a4 g2 f4) +2( 2) +@end lilypond + +@cindex slurs, manual placement (手動でスラーを配置する) +@cindex slurs, below notes (音符の下にスラーを配置する) +@cindex slurs, above notes (音符の上にスラーを配置する) +@funindex \slurDown +@funindex slurDown +@funindex \slurNeutral +@funindex slurNeutral + +スラーを手動で音符の上または下に配置することができます。@c +@ref{Direction and placement} を参照してください。 + +@cindex phrasing slur (フレージング スラー) +@cindex multiple slurs (多重スラー) +@cindex simultaneous slurs (同時進行のスラー) +@cindex slur, phrasing (フレージング スラー) +@cindex slurs, multiple (多重スラー) +@cindex slurs, simultaneous (同時進行のスラー) + +同時進行または重なり合うスラーは許可されません。@c +しかしながら、フレージング スラーはスラーと重なり合うことができます。@c +これにより、2 つのスラーを同時に譜刻することができます。@c +詳細は @ref{フレージング スラー} を参照してください。 + +@cindex slur style (スラーのスタイル) +@cindex solid slur (実線のスラー) +@cindex dotted slur (点線のスラー) +@cindex dashed slur (破線のスラー) +@cindex sytle, slur (スラーのスタイル) +@cindex slur, solid (実線のスラー) +@cindex slur, dotted (点線のスラー) +@cindex slur, dashed (破線のスラー) +@cindex style, slur (スラーのスタイル) +@funindex \slurDashed +@funindex slurDashed +@funindex \slurDotted +@funindex slurDotted +@funindex \slurSolid +@funindex slurSolid + +スラーは実線、点線あるいは破線のどれかになります。@c +実線がスラーのデフォルト スタイルです: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashed +g4( e c2) +\slurDotted +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurHalfDashed +@funindex slurHalfDashed +@funindex \slurHalfSolid +@funindex slurHalfSolid +@cindex slur, half dashed and half solid (半分が破線で半分が実線のスラー) + +スラーの半分を破線 (前半を破線、後半を実線) にする、あるいは、@c +半分を実線 (前半を実線、後半を破線) にすることもできます: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurHalfDashed +g4( e c2) +\slurHalfSolid +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurDashPattern +@funindex slurDashPattern +@cindex slur, defining dash patterns (スラーの破線パターンを定義する) + +スラーの破線パターンを定義することができます: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashPattern #0.7 #0.75 +g4( e c2) +\slurDashPattern #0.5 #2.0 +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + + + +@funindex \slurUp +@funindex slurUp + + +@predefined +@code{\slurUp}, +@code{\slurDown}, +@code{\slurNeutral}, +@code{\slurDashed}, +@code{\slurDotted}, +@code{\slurHalfDashed}, +@code{\slurHalfSolid}, +@code{\slurDashPattern}, +@code{\slurSolid} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-double-slurs-for-legato-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-text-markups-inside-slurs.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-slurs-with-complex-dash-structure.ly} + +@seealso +音楽用語集: +@rglos{slur} + +学習マニュアル: +@rlearning{ネストされない括弧とタイ} + +記譜法リファレンス: +@ref{Direction and placement}, +@ref{フレージング スラー} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{Slur} + + +@node フレージング スラー +@unnumberedsubsubsec フレージング スラー +@translationof Phrasing slurs + +@cindex phrasing slurs (フレージング スラー) +@cindex phrasing marks (フレーズ記号) +@cindex slur, phrasing (フレージング スラー) +@cindex mark, phrasing (フレーズ記号) +@funindex \( +@funindex \) + +音楽センテンスを示す @notation{フレージング スラー} (またはフレーズ記号) は@c +コマンド @code{\(} と @code{\)} を用いて記述します: + +@lilypond[verbatim,quote,relative=2] +c4\( d( e) f( +e2) d\) +@end lilypond + +@funindex \phrasingSlurUp +@funindex phrasingSlurUp +@funindex \phrasingSlurDown +@funindex phrasingSlurDown +@funindex \phrasingSlurNeutral +@funindex phrasingSlurNeutral + +印刷の上では、フレージング スラーは通常のスラーとほとんど同じです。@c +しかしながら、それぞれ異なるオブジェクトとして取り扱われます。@c +@code{\slurUp} はフレージング スラーには影響を与えません。@c +フレージング スラーを手動で音符の上または下に配置することができます。@c +@ref{Direction and placement} を参照してください。 + +@cindex simultaneous phrasing slurs (同時進行のフレージング スラー) +@cindex multiple phrasing slurs (多重フレージング スラー) +@cindex slurs, simultaneous phrasing (同時進行のフレージング スラー) +@cindex slurs, multiple phrasing (多重フレージング スラー) +@cindex phrasing slurs, simultaneous (同時進行のフレージング スラー) +@cindex phrasing slurs, multiple (多重フレージング スラー) + +同時進行あるいは重なり合うフレージング スラーは許可されません。 + +@funindex phrasingSlurDashed +@funindex \phrasingSlurDashed +@funindex \phrasingSlurDotted +@funindex phrasingSlurDotted +@funindex \phrasingSlurSolid +@funindex phrasingSlurSolid +@cindex phrasing slur, dashed (破線のフレージング スラー) +@cindex dashed phrasing slur (破線のフレージング スラー) +@cindex phrasing slur, dotted (点線のフレージング スラー) +@cindex dotted phrasing slurs (点線のフレージング スラー) +@cindex slur, dashed phrasing (破線のフレージング スラー) +@cindex slur, dotted phrasing (点線のフレージング スラー) + +フレージング スラーを実線、点線あるいは破線にすることができます。@c +実線がフレージング スラーのデフォルト スタイルです: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashed +g4\( e c2\) +\phrasingSlurDotted +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex phrasingSlurHalfDashed +@funindex \phrasingSlurHalfDashed +@funindex \phrasingSlurHalfSolid +@funindex phrasingSlurHalfSolid +@cindex phrasing slur, half solid and half dashed (半分が実線で半分が破線のフレージング スラー) +@cindex slur, half solid and half dashed phrasing (半分が実線で半分が破線のフレージング スラー) + +フレージング スラーの半分を破線 (前半を破線、後半を実線) にする、あるいは、@c +半分を実線 (前半を実線、後半を破線) にすることもできます: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurHalfDashed +g4\( e c2\) +\phrasingSlurHalfSolid +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex \phrasingSlurDashPattern +@funindex phrasingSlurDashPattern +@cindex phrasing slur, defining dash patterns +@cindex slur, phrasing, defining dash patterns (フレージング スラーの破線パターンを定義する) +@cindex slur, defining dash patterns for phrasing (フレージング スラーの破線パターンを定義する) + +フレージング スラーの破線パターンを定義することができます: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashPattern #0.7 #0.75 +g4\( e c2\) +\phrasingSlurDashPattern #0.5 #2.0 +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +フレージング スラーに対する破線パターンの定義は、@c +スラーに対する破線パターンの定義と同じ構造をとります。@c +複雑な破線パターンについての更なる情報は、@c +@ref{スラー} のコード断片集を参照してください。 + +@predefined +@code{\phrasingSlurUp}, +@code{\phrasingSlurDown}, +@code{\phrasingSlurNeutral}, +@code{\phrasingSlurDashed}, +@code{\phrasingSlurDotted}, +@code{\phrasingSlurHalfDashed}, +@code{\phrasingSlurHalfSolid}, +@code{\phrasingSlurDashPattern}, +@code{\phrasingSlurSolid} +@endpredefined + + +@seealso +学習マニュアル: +@rlearning{ネストされない括弧とタイ} + +記譜法リファレンス: +@ref{Direction and placement}, +@ref{スラー} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{PhrasingSlur} + + +@node ブレス記号 +@unnumberedsubsubsec ブレス記号 +@translationof Breath marks + +@cindex breath marks (ブレス記号) +@cindex pause mark (休止記号) +@funindex \breathe +@funindex breathe + +ブレス記号は @code{\breathe} を用いて入力します: + +@lilypond[verbatim,quote,relative=2] +c2. \breathe d4 +@end lilypond + +ブレス記号は自動連桁を終わらせます。@c +この振る舞いをオーバライドする方法は、@ref{手動連桁} を参照してください。 + +@lilypond[verbatim,quote,relative=2] +c8 \breathe d e f g2 +@end lilypond + +@c 保留 +古代記譜法でのブレス記号の音楽指示子 -- +divisiones (ディビジョン: 区切り) がサポートされています。@c +詳細は @ref{Divisiones} を参照してください。 + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-breath-mark-symbol.ly} + +@c 未訳 +@cindex caesura +@cindex railroad tracks + +@c 未訳 +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{inserting-a-caesura.ly} + + +@seealso +音楽用語集: +@rglos{caesura} + +記譜法リファレンス: +@ref{Divisiones} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{BreathingEvent}, +@rinternals{BreathingSign}, +@rinternals{Breathing_sign_engraver} + + +@node Fall と Doit +@unnumberedsubsubsec Fall と Doit +@translationof Falls and doits + +@cindex falls (Fall) +@cindex doits (Doit) +@funindex \bendAfter +@funindex bendAfter + +@code{\bendAfter} コマンドを用いて、@c +@notation{Fall} と @notation{Doit} 音符にを付け加えることができます。@c +Fall あるいは Doit の向きはプラスあるいはマイナス (上あるいは下) で示します。@c +指示の数は Fall あるいは Doit の主音符を展開させるピッチの幅を示します。 + +@lilypond[verbatim,quote,relative=2] +c2-\bendAfter #+4 +c2-\bendAfter #-4 +c2-\bendAfter #+8 +c2-\bendAfter #-8 +@end lilypond + +Fall と Doit を記述する際、@c +@code{\bendAfter} コマンドの直前にダッシュ @code{-} を置く必要があります。 + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adjusting-the-shape-of-falls-and-doits.ly} + + +@seealso +音楽用語集: +@rglos{fall}, +@rglos{doit} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + + +@node 直線の発想記号 +@subsection 直線の発想記号 +@translationof Expressive marks as lines + +このセクションでは直線的な軌道をとるさまざまな発想記号 -- +グリッサンド、アルペジオそれにトリル -- を作成する方法について説明します。 + +@menu +* グリッサンド:: +* アルペジオ:: +* トリル:: +@end menu + +@node グリッサンド +@unnumberedsubsubsec グリッサンド +@translationof Glissando + +@cindex glissando (グリッサンド) +@funindex \glissando +@funindex glissando + +@notation{グリッサンド} は音符に @code{\glissando} を付けることによって@c +作成されます: + +@lilypond[verbatim,quote,relative=2] +g2\glissando g' +c2\glissando c, +@end lilypond + +異なるスタイルのグリッサンドを作成することもできます。@c +詳細は @ref{Line styles} を参照してください。 + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{contemporary-glissando.ly} + + +@seealso +音楽用語集: +@rglos{glissando} + +記譜法リファレンス: +@ref{Line styles} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{Glissando} + + +@knownissues + +@c 未訳 +線の上にテキストを譜刻する (@notation{グリッサンド} など) ことは@c +サポートされていません。 + + +@node アルペジオ +@unnumberedsubsubsec アルペジオ +@translationof Arpeggio + +@cindex arpeggio (アルペジオ) +@cindex broken chord (変則和音) +@cindex chord, broken (変則和音) + +@funindex \arpeggio +@funindex arpeggio +@funindex \arpeggioArrowUp +@funindex arpeggioArrowUp +@funindex \arpeggioArrowDown +@funindex arpeggioArrowDown +@funindex \arpeggioNormal +@funindex arpeggioNormal + +和音の @notation{アルペジオ} (変則和音とも呼ばれます) は和音構造の後に +@code{\arpeggio} を付けることによって記述されます: + +@lilypond[verbatim,quote,relative=1] +1\arpeggio +@end lilypond + +異なるタイプのアルペジオを描くこともできます。@c +@code{\arpeggioNormal} は通常のアルペジオに戻します: + +@lilypond[verbatim,quote,relative=1] +2\arpeggio + +\arpeggioArrowUp +2\arpeggio + +\arpeggioArrowDown +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +@cindex arpeggio symbols, special (特殊なアルペジオ シンボル) +@cindex special arpeggio symbols (特殊なアルペジオ シンボル) + +@funindex \arpeggioBracket +@funindex arpeggioBracket +@funindex \arpeggioParenthesis +@funindex arpeggioParenthesis +@funindex \arpeggioParenthesisDashed +@funindex arpeggioParenthesisDashed + +特殊な @emph{括弧スタイル} のアルペジオ シンボルを作成することができます: + +@lilypond[verbatim,quote,relative=1] +2 + +\arpeggioBracket +2\arpeggio + +\arpeggioParenthesis +2\arpeggio + +\arpeggioParenthesisDashed +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +括弧スタイルのアルペジオの破線プロパティは @code{'dash-details} プロパティで@c +制御します。@c +@code{'dash-details} プロパティについては @ref{スラー} で説明しています。 + +アルペジオをタイを用いて明示的に描き出すことができます。@c +詳細は @ref{タイ} を参照してください。 + + +@predefined +@code{\arpeggio}, +@code{\arpeggioArrowUp}, +@code{\arpeggioArrowDown}, +@code{\arpeggioNormal}, +@code{\arpeggioBracket}, +@code{\arpeggioParenthesis} +@code{\arpeggioParenthesisDashed} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-a-piano-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-other-contexts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-arpeggios-across-notes-in-different-voices.ly} + + +@seealso +音楽用語集: +@rglos{arpeggio} + +記譜法リファレンス: +@ref{スラー}, +@ref{タイ} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{Arpeggio}, +@rinternals{Slur}, +@rinternals{PianoStaff} + + +@knownissues + +@cindex cross-staff parenthesis-style arpeggio (譜を跨ぐ括弧スタイルのアルペジオ) +@cindex arpeggio, parenthesis-style, cross-staff (譜を跨ぐ括弧スタイルのアルペジオ) +@cindex arpeggio, cross-staff parenthesis-style (譜を跨ぐ括弧スタイルのアルペジオ) + +ある @code{PianoStaff} の中の同時点で譜を跨ぐアルペジオと跨がないアルペジオを@c +混在させることはできません。 + +譜を跨ぐアルペジオに括弧スタイルのアルペジオを適用することはできません。 + + +@node トリル +@unnumberedsubsubsec トリル +@translationof Trills + +@cindex trills (トリル) + +@funindex \trill +@funindex trill +@funindex \startTrillSpan +@funindex startTrillSpan +@funindex \stopTrillSpan +@funindex stopTrillSpan + +延長線を持たない短い @notation{トリル} は @code{\trill} で譜刻されます。@c +@ref{アーティキュレーションと装飾} を参照してください。 + +延長線を持つ長いトリルは @code{\startTrillSpan} と @code{\stopTrillSpan} で@c +作成されます: + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +c2\stopTrillSpan +r2 +@end lilypond + +改行を跨ぐトリルは、次行の最初の音符の上から再開されます。 + +@lilypond[ragged-right,verbatim,quote,relative=2] +d1\startTrillSpan +\break +d1 +c2\stopTrillSpan +r2 +@end lilypond + +連続したトリルには、明示的な @code{\stopTrillSpan} コマンドは必要ありません。@c +なぜなら、自動的に次のトリルが前のトリルの右端となるからです。 + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +b1\startTrillSpan +d2\stopTrillSpan +r2 +@end lilypond + +トリルを装飾小音符と組み合わせることもできます。@c +この組み合わせの構文と装飾小音符を正確に配置する方法については、@c +@ref{装飾小音符} で説明しています。 + +@lilypond[verbatim,quote,relative=2] +d1~\afterGrace +d1\startTrillSpan { c32[ d]\stopTrillSpan } +c2 r2 +@end lilypond + +@cindex pitched trills (ピッチを持つトリル) +@cindex trills, pitched (ピッチを持つトリル) +@funindex \pitchedTrill +@funindex pitchedTrill + +明示的なピッチを持つ予備の音符を必要とするトリルは +@code{\pitchedTrill} コマンドを用いて譜刻することができます。@c +最初の引数は主音符です。2 番目の引数は @emph{トリル} の音符であり、@c +括弧で囲まれた符幹を持たない符頭として譜刻されます。 + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +d2\startTrillSpan fis +d2 +c2\stopTrillSpan +r2 +@end lilypond + +@c 未訳 +@cindex pitched trill with forced accidental (ピッチを持つトリルに強制的に臨時記号を付ける) +@cindex trill, pitched with forced accidental (ピッチを持つトリルに強制的に臨時記号を付ける) +@cindex accidental, forced for pitched trill (ピッチを持つトリルに強制的に臨時記号を付ける) + +同じ小節内で、同一音符のためデフォルトでは譜刻されない臨時記号を譜刻するには@c +手動で譜刻を指定する必要があります。@c +最初の小節では、最初のピッチを持つトリルだけに臨時記号が譜刻されています。 + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan + +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan + +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan + +\pitchedTrill +eis4\startTrillSpan fis! +eis4\stopTrillSpan +@end lilypond + + +@predefined +@code{\startTrillSpan}, +@code{\stopTrillSpan} +@endpredefined + + +@seealso +音楽用語集: +@rglos{trill} + +記譜法リファレンス: +@ref{アーティキュレーションと装飾}, +@ref{装飾小音符} + +コード断片集: +@rlsrnamed{Expressive marks,発想記号} + +内部リファレンス: +@rinternals{TrillSpanner} diff --git a/Documentation/ja/notation/notation.itely b/Documentation/ja/notation/notation.itely new file mode 100644 index 0000000000..ff80f7c264 --- /dev/null +++ b/Documentation/ja/notation/notation.itely @@ -0,0 +1,39 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@c This file is part of notation.tely +@ignore + Translation of GIT committish: 2c3bd5e85d39155e3e6804f9818722bef483056d + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + +@node 音楽記譜法 +@chapter 音楽記譜法 +@translationof Musical notation + +この章では音楽表記を作成する方法について説明します。 + +@menu +* ピッチ:: 音符のピッチを記述、表示する +* リズム:: 音符の演奏時間を記述、表示する +* 発想記号:: 音符に表現を付け加える +* 繰り返し:: 音楽の繰り返し +* 同時進行する音符:: 同時に複数の音符を演奏する +* 譜の記譜法:: 譜を表示する +* 編集者の注釈:: 可読性を良くするための特別な表記 +* テキスト:: 楽譜にテキストを追加する +@end menu + +@include notation/pitches.itely +@include notation/rhythms.itely +@include notation/expressive.itely +@include notation/repeats.itely +@include notation/simultaneous.itely +@include notation/staff.itely +@include notation/editorial.itely +@include notation/text.itely diff --git a/Documentation/ja/notation/pitches.itely b/Documentation/ja/notation/pitches.itely new file mode 100644 index 0000000000..85073fc983 --- /dev/null +++ b/Documentation/ja/notation/pitches.itely @@ -0,0 +1,3102 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 2c3bd5e85d39155e3e6804f9818722bef483056d + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node ピッチ +@section ピッチ +@translationof Pitches + +@lilypondfile[quote]{pitches-headword.ly} + +このセクションでは音符のピッチを指定する方法について議論します。@c +このプロセスには 3 つのステップがあります: 入力、変更、出力です。 + +@menu +* ピッチを記述する:: +* 複数のピッチを変更する:: +* ピッチを表示する:: +* 符頭:: +@end menu + + +@node ピッチを記述する +@subsection ピッチを記述する +@translationof Writing pitches + +このセクションではピッチを入力する方法について議論します。@c +音符をオクターブの中に置くには 2 つの方法があります: +絶対モードと相対モードです。@c +たいていの場合、相対モードの方が便利です。 + +@menu +* 絶対オクターブ入力:: +* 相対オクターブ入力:: +* 臨時記号:: +* 他の言語での音符名:: +@end menu + + +@node 絶対オクターブ入力 +@unnumberedsubsubsec 絶対オクターブ入力 +@translationof Absolute octave entry + +@cindex pitch names (ピッチ名) +@cindex pitches (ピッチ) +@cindex absolute (絶対) +@cindex absolute octave specification (絶対オクターブ指定) +@cindex octave specification, absolute (絶対オクターブ指定) +@cindex absolute octave entry (絶対オクターブ入力) +@cindex octave entry, absolute (絶対オクターブ入力) + +ピッチ名は @code{a} から @code{g} までの小文字を使って指定されます。@c +@code{c} から @code{b} までの音符名はミドル C の下のオクターブに譜刻されます。 + +@c don't use c' here. +@lilypond[verbatim,quote] +{ + \clef bass + c4 d e f + g4 a b c + d4 e f g +} +@end lilypond + +@cindex octave changing mark (オクターブ変更記号) + +@funindex ' +@funindex , + +他のオクターブはシングル クォート@tie{}(@code{'}) または@c +カンマ@tie{}(@code{,}) 文字で指定されます。@c +各@tie{}@code{'} はピッチを 1 オクターブ上げます。@c +一方、各@tie{}@code{,} はピッチを 1 オクターブ下げます。 + +@lilypond[verbatim,quote] +{ + \clef treble + c'4 c'' e' g + d''4 d' d c + \clef bass + c,4 c,, e, g + d,,4 d, d c +} +@end lilypond + + +@seealso +音楽用語集: +@rglos{Pitch names} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + + +@node 相対オクターブ入力 +@unnumberedsubsubsec 相対オクターブ入力 +@translationof Relative octave entry + +@cindex relative (相対) +@cindex relative octave entry (相対オクターブ入力) +@cindex octave entry, relative (相対オクターブ入力) +@cindex relative octave specification (相対オクターブ指定) +@cindex ocatve specification, relative (相対オクターブ指定) + +@funindex relative +@funindex \relative + +オクターブが絶対モードで指定されている場合、@c +ピッチを間違ったオクターブに置くことは容易に起こりえます。@c +相対オクターブ モードはそのようなエラーを減らします。@c +なぜなら、相対オクターブ モードでは、たいていの場合、@c +オクターブを指定する必要が無いからです。@c +さらに、絶対モードでは 1 つのミスを見つけることが@c +困難であるかもしれないのに対し、@c +相対モードでは 1 つのミスが楽曲の残りの部分を 1 オクターブずらします。 + +@example +\relative @var{startpitch} @var{musicexpr} +@end example + +相対モードでは、各音符は可能な限り前の音符の近くに配置されます。@c +このことは、@code{@var{musicexp}} の中にある各ピッチのオクターブが@c +以下のように算出されるということを意味します: + +@itemize +@item +音符に対してオクターブ変更記号が使用されていない場合、@c +その音符のオクターブは前の音符との音程が +5 度よりも小さくなるよう算出されます。@c +この音程は臨時記号を考慮せずに決定されます。 + +@item +オクターブ変更記号@tie{}@code{'} や @code{,} を付け加えることによって、@c +オクターブ記号無しの場合のピッチから、@c +ピッチを 1 オクターブ上げ下げすることができます。 + +@item +複数のオクターブ変更記号を使用することができます。@c +例えば、@code{''}@tie{}と@tie{}@code{,,} はピッチを 2 オクターブ変えます。 + +@item +最初の音符のピッチは @code{@var{startpitch}} と相対関係で決定されます。@c +@var{startpitch} は絶対オクターブ モードで指定され、@c +@code{c} のオクターブにしておくことを推奨します。 + +@end itemize + +ここで、実際に相対モードの例を挙げます: + +@lilypond[verbatim,quote] +\relative c { + \clef bass + c d e f + g a b c + d e f g +} +@end lilypond + +オクターブ変更記号は 4 度よりも大きな音程に対して使用されます: + +@lilypond[verbatim,quote] +\relative c { + \clef bass + c d e f + g a b c + d e f g +} +@end lilypond + +音符の連なりはオクターブ変更記号が無い場合であっても@c +大きな音程に広がる可能性があります: + +@lilypond[verbatim,quote] +\relative c { + c f b e + a d g c +} +@end lilypond + +@code{\relative} ブロックがネストされている場合、@c +最も内側の @code{\relative} ブロックが適用されます。 + +@lilypond[verbatim,quote] +\relative c' { + c d e f + \relative c'' { + c d e f + } +} +@end lilypond + +@code{\relative} は @code{\chordmode} ブロックでは効果を持ちません。 + +@lilypond[verbatim,quote] +\new Staff { + \relative c''' { + \chordmode { c1 } + } + \chordmode { c1 } +} +@end lilypond + +@code{\relative} を @code{\chordmode} ブロックの中で使用することは@c +認められません。 + +@code{\transpose} ブロックの中では、@code{\relative} を記述しない限り、@c +絶対モードになります。 + +@lilypond[verbatim,quote] +\relative c' { + d e + \transpose f g { + d e + \relative c' { + d e + } + } +} +@end lilypond + +@cindex chords and relative octave entry (和音と相対オクターブ入力) +@cindex relative octave entry and chords (相対オクターブ入力と和音) + +前の要素が和音である場合、@c +その和音の最初の音符が後に続く音符または和音の参照ポイントとして使用されます。@c +和音の内部では、次の音符は常に 1 つ前の音符との相対関係になります。@c +次の例を、@code{c} の音符に気を付けて、注意深く検証してください。 + +@lilypond[verbatim,quote] +\relative c' { + c + + + +} +@end lilypond + +上で説明したように、ピッチのオクターブは音符名のみを使って算出され、@c +いかなる変更にも影響を受けません。@c +そのため、B の後の E ダブル シャープは B よりも上に配置され、@c +B の後の F ダブル フラットは B よりも下に配置されます。@c +言い換えると、4 度の 2 重増音の音程は 5 度の 2 重減音の音程よりも小さい +-- それぞれの音程に含まれる半音の数に関係無く -- と見なされます。 + +@lilypond[verbatim,quote] +\relative c'' { + c2 fis + c2 ges + b2 eisis + b2 feses +} +@end lilypond + + +@seealso +音楽用語集: +@rglos{fifth}, +@rglos{interval}, +@rglos{Pitch names} + +記譜法リファレンス: +@ref{オクターブ チェック} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{RelativeOctaveMusic} + + +@cindex relative octave entry and transposition (相対オクターブ入力と移調) +@cindex transposition and relative octave entry (移調と相対オクターブ入力) + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + + +@c DEPRECATED +@code{\relative} に対して @code{@var{startpitch}} が指定されていない場合、@c +@code{c'} であると見なされます。@c +しかしながら、これは使用を推奨されなくなったオプションであり、@c +将来のバージョンでは無くなるかもしれないので、@c +@code{@var{startpitch}} を指定しないことはお勧めできません。 + + +@node 臨時記号 +@unnumberedsubsubsec 臨時記号 +@translationof Accidentals + +@cindex accidental (臨時記号) +@cindex key signature (調号) +@cindex clef (音部記号) + +@c duplicated in Key signature and Accidentals +@warning{LilyPond を始めたばかりのユーザは@c +しばしば臨時記号と調号のことで混乱します。@c +LilyPond では、音符名は未加工の入力です +-- 調号と音部記号がこの未加工の入力をどのように表示するかを決定します。@c +@code{c} のような変更を加えられていない音符は、調号や音部記号とは無関係に、@c +@q{C ナチュラル} を意味します。@c +更なる情報は、@rlearning{臨時記号と調号} を参照してください。} + +@cindex note names, Dutch (オランダ語での音符名) +@cindex note names, default (デフォルトの音符名) +@cindex default note names (デフォルトの音符名) +@cindex sharp (シャープ) +@cindex flat (フラット) +@cindex double sharp (ダブル シャープ) +@cindex sharp, double (ダブル シャープ) +@cindex double flat (ダブル フラット) +@cindex flat, double (ダブル フラット) +@cindex natural sign (ナチュラル記号) +@cindex natural pitch (ナチュラル ピッチ) + +@notation{シャープ}のピッチは音符名に @code{is} を付け加えることによって@c +作られ、@notation{フラット}のピッチは @code{es} を付け加えることによって@c +作られます。@c +予想しているかもしれませんが、@notation{ダブル シャープ}や@c +@notation{ダブル フラット}は @code{isis} または @code{eses} を@c +付け加えることによって作られます。@c +この構文はオランダ語の音符命名規約から派生しました。@c +臨時記号に他の名前を使うには、@c +@ref{他の言語での音符名} を参照してください。 + +@lilypond[verbatim,quote,relative=2] +ais1 aes aisis aeses +@end lilypond + +ナチュラルは臨時記号や調号の効果をキャンセルします。@c +しかしながら、ナチュラルは接尾辞として音符名構文にエンコードされてはいません。@c +そのため、ナチュラルのピッチは単に音符名で入力されます: + +@lilypond[verbatim,quote,relative=2] +a4 aes a2 +@end lilypond + +@cindex quarter tones (4 分音) +@cindex semi-flats (半フラット) +@cindex semi-sharps (半シャープ) + +4 分音が付け加えられるかもしれません。@c +以下の一連の C は左から順にピッチが増えていっています: + +@lilypond[verbatim,quote,relative=2] +ceseh1 ces ceh c cih cis cisih +@end lilypond + + +@cindex accidental, reminder (親切の臨時記号) +@cindex accidental, cautionary (忠告の臨時記号) +@cindex accidental, parenthesized (括弧に囲まれた臨時記号) +@cindex reminder accidental (親切の臨時記号) +@cindex cautionary accidental (忠告の臨時記号) +@cindex parenthesized accidental (括弧に囲まれた臨時記号) + +@funindex ? +@funindex ! + +通常、臨時記号は自動的に譜刻されますが、@c +手動で譜刻する場合もあるかもしれません。@c +親切の臨時記号はピッチの後にエクスクラメーション記号@tie{}@code{!} を@c +付け加えることによって譜刻することができます。@c +忠告の臨時記号 (つまり、括弧で囲まれた臨時記号) は@c +ピッチの後にクエスチョン記号@tie{}@code{?} を付け加えることによって@c +譜刻することができます。@c +これら追加の臨時記号を使ってナチュラル記号を作り出すこともできます。 + +@lilypond[verbatim,quote,relative=2] +cis cis cis! cis? c c c! c? +@end lilypond + +@cindex accidental on tied note (タイで結ばれた音符への臨時記号) +@cindex tied note, accidental (タイで結ばれた音符への臨時記号) + +タイで結ばれた音符に付ける臨時記号は@c +新しいシステム (訳者: 譜 1 行分のこと) の開始点でのみ譜刻されます: + +@lilypond[verbatim,quote,relative=2] +cis1 ~ cis ~ +\break +cis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle,ragged-right] +{hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-extra-naturals-from-being-automatically-added.ly} + +@seealso +音楽用語集: +@rglos{sharp}, +@rglos{flat}, +@rglos{double sharp}, +@rglos{double flat}, +@rglos{Pitch names}, +@rglos{quarter tone} + +学習マニュアル: +@rlearning{臨時記号と調号} + +記譜法リファレンス: +@ref{自動臨時記号}, +@ref{Annotational accidentals (musica ficta)}, +@ref{他の言語での音符名} + +コード断片集: +@rlsrnamed{Pitches,ピッチ}. + +内部リファレンス: +@rinternals{Accidental_engraver}, +@rinternals{Accidental}, +@rinternals{AccidentalCautionary}, +@rinternals{accidental-interface} + + +@cindex accidental, quarter-tone (4 分音臨時記号) +@cindex quarter-tone accidental (4 分音臨時記号) + +@knownissues + +4 分音臨時記号の表記の仕方で広く認められた標準はないため、@c +LilyPond の記号はいかなる標準にも準拠しません。 + + +@node 他の言語での音符名 +@unnumberedsubsubsec 他の言語での音符名 +@translationof Note names in other languages + +@cindex note names, other languages (他の言語での音符名) +@cindex pitch names, other languages (他の言語でのピッチ名) +@cindex language, note names in other (他の言語での音符名) +@cindex language, pitch names in other (他の言語でのピッチ名) + +他のさまざまな言語での音符名と臨時記号名のセットが定義されています。@c +通常、音符名の言語の選択はファイルの先頭で行います。 +以下の例はイタリア語の音符名を使用します: + +@lilypond[quote,verbatim] +\language "italiano" + +\relative do' { + do re mi sib +} +@end lilypond + +利用可能な言語ファイルとそれらが定義している音符名を挙げます: + +@quotation +@multitable {@code{nederlands}} {do re mi fa sol la sib si} +@headitem 言語 + @tab 音符名 +@item @code{nederlands} + @tab c d e f g a bes b +@item @code{catalan} + @tab do re mi fa sol la sib si +@item @code{deutsch} + @tab c d e f g a b h +@item @code{english} + @tab c d e f g a bf b +@item @code{espanol} + @tab do re mi fa sol la sib si +@item @code{italiano} + @tab do re mi fa sol la sib si +@item @code{norsk} + @tab c d e f g a b h +@item @code{portugues} + @tab do re mi fa sol la sib si +@item @code{suomi} + @tab c d e f g a b h +@item @code{svenska} + @tab c d e f g a b h +@item @code{vlaams} + @tab do re mi fa sol la sib si +@end multitable +@end quotation + +音符名に加えて、臨時記号の接尾辞も言語によって異なる場合があります: + +@quotation +@multitable {@code{nederlands}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} +@headitem 言語 + @tab シャープ @tab フラット @tab ダブル シャープ @tab ダブル フラット +@item @code{nederlands} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{catalan} + @tab -d/-s @tab -b @tab -dd/-ss @tab -bb +@item @code{deutsch} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{english} + @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp + @tab -ff/-flatflat +@item @code{espanol} + @tab -s @tab -b @tab -ss/-x @tab -bb +@item @code{italiano} + @tab -d @tab -b @tab -dd @tab -bb +@item @code{norsk} + @tab -iss/-is @tab -ess/-es @tab -ississ/-isis + @tab -essess/-eses +@item @code{portugues} + @tab -s @tab -b @tab -ss @tab -bb +@item @code{suomi} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{svenska} + @tab -iss @tab -ess @tab -ississ @tab -essess +@item @code{vlaams} + @tab -k @tab -b @tab -kk @tab -bb +@end multitable +@end quotation + +オランダ語では、@code{aes} は縮めて @code{as} となりますが、@c +LilyPond ではどちらの形式も認められます。@c +同様に、@code{es} と @code{ees} の両方が認められます。@c +これはさらに、@code{aeses}@tie{}/@tie{}@code{ases} と +@code{eeses}@tie{}/@tie{}@code{eses} にも適用されます。@c +他の言語ファイルでは短縮名だけが定義されている場合があります。 + +@lilypond[verbatim,quote,relative=2] +a2 as e es a ases e eses +@end lilypond + + +@cindex microtones (微分音) +@cindex semi-sharp (半シャープ) +@cindex semi-flat (半フラット) +@cindex sesqui-sharp (1.5 シャープ) +@cindex sesqui-flat (1.5 フラット) + +音楽の中には @q{通常の} シャープやフラットの音の変化をさらに細かく分けた@c +微分音を使用するものがあります。@c +さまざまな言語 (ファイル) での 4 分音 +(訳者: シャープやフラットの半分の音の変化。4 分音符ではありません) +の音符名を以下の表で挙げます。@c +接頭辞 @notation{半-} と @notation{1.5-} はそれぞれ +@q{半分} と @q{1 つ半} を意味します。@c +表に無い言語では、まだ微分音の名前は定義されていません。 + +@quotation +@multitable {@code{nederlands}} {@b{半-シャープ}} {@b{半-フラット}} {@b{1.5-シャープ}} {@b{1.5-フラット}} +@headitem 元号 + @tab 半-シャープ @tab 半-フラット @tab 1.5-シャープ @tab 1.5-フラット + +@item @code{nederlands} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{deutsch} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{english} + @tab -qs @tab -qf @tab -tqs @tab -tqf +@item @code{espanol} + @tab -cs @tab -cb @tab -tcs @tab -tcb +@item @code{italiano} + @tab -sd @tab -sb @tab -dsd @tab -bsb +@item @code{portugues} + @tab -sqt @tab -bqt @tab -stqt @tab -btqt +@end multitable +@end quotation + +ここに示されている大半の言語は西洋クラシック音楽 +-- @notation{Common Practice Period}: 西暦1600年から1900年頃の@c +バロック音楽、クラシック音楽、ロマン派音楽とも言えます -- +に関係があります。@c +しかしながら、他のピッチやチューニング方法もサポートされています: +@ref{Common notation for non-Western music} を参照してください。 + +@seealso +音楽用語集: +@rglos{Pitch names}, +@rglos{Common Practice Period}. + +記譜法リファレンス: +@ref{Common notation for non-Western music} + +あらかじめイストールされているファイル: +@file{scm/define-note-names.scm} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + + +@node 複数のピッチを変更する +@subsection 複数のピッチを変更する +@translationof Changing multiple pitches + +このセクションではピッチを変更する方法について議論します。 + +@menu +* オクターブ チェック:: +* 移調:: +* 転回:: +* 逆行:: +* 様式的な移調:: +@end menu + + +@node オクターブ チェック +@unnumberedsubsubsec オクターブ チェック +@translationof Octave checks + +@cindex octave correction (オクターブ修正) +@cindex octave check (オクターブ チェック) +@cindex control pitch (ピッチの制御) + +@funindex = +@funindex \octaveCheck +@funindex octaveCheck +@funindex controlpitch + +相対モードでは、オクターブ変更記号を付け忘れることが容易に起こり得ます。@c +オクターブ チェックは、予期しないオクターブの音符を見つけた場合に@c +警告を表示してオクターブを修正することによって、@c +そのようなエラーを見つけ出すことをより容易にします。 + +音符のオクターブをチェックするには、@c +@code{=}@tie{}の後に絶対オクターブを指定します。@c +以下の例は、2 番目の音符の絶対オクターブがオクターブ チェックによって@c +示される @code{d'} ではなく @code{d''} であるため、@c +警告を発し (そしてピッチを変更し) ます。 + +@lilypond[verbatim,quote] +\relative c'' { + c2 d='4 d + e2 f +} +@end lilypond + +音符のオクターブは +@code{\octaveCheck@tie{}@var{controlpitch}} コマンドでも@c +チェックすることができます。@c +@code{@var{controlpitch}} は絶対モードで指定されます。@c +これは前の音符と @code{@var{controlpitch}} との間の音程が +4 度以内であるかどうかをチェックします +(つまり、通常の相対モードでの算出方法と同じです)。@c +このチェックが失敗した場合、警告が表示されますが、@c +このチェックの前にある音符は変更されません。@c +その後に続く音符は @code{@var{controlpitch}} から算出されます。 + +@lilypond[verbatim,quote] +\relative c'' { + c2 d + \octaveCheck c' + e2 f +} +@end lilypond + +以下の 2 小節を見てください。@c +1 番目と 3 番目の @code{\octaveCheck} は失敗していますが、@c +2 番目のチェックは失敗していません。 + +@lilypond[verbatim,quote] +\relative c'' { + c4 f g f + + c4 + \octaveCheck c' + f + \octaveCheck c' + g + \octaveCheck c' + f +} +@end lilypond + + +@seealso +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{RelativeOctaveCheck}. + + +@node 移調 +@unnumberedsubsubsec 移調 +@translationof Transpose + +@cindex transpose (移調) +@cindex transposing (移調) +@cindex transposition (移調) +@cindex transposition of pitches (ピッチの移調) +@cindex transposition of notes (音符の移調) +@cindex pitches, transposition of (ピッチの移調) +@cindex notes, transposition of (音符の移調) + +@funindex \transpose +@funindex transpose + +音楽表記は @code{\transpose} で移調させることができます。@c +構文は以下の通りです: + +@example +\transpose @var{frompitch} @var{topitch} @var{musicexpr} +@end example + +@noindent +これは @code{@var{musicexpr}} が @code{@var{frompitch}} から +@code{@var{topitch}} に移調されるということを意味します: +@code{@var{frompitch}} のピッチの音符はすべて @code{@var{topitch}} +に変更され、@c +他の音符もすべて同じ音程で移調されます。@c +@code{@var{frompitch}} と @code{@var{topitch}} のピッチはどちらも@c +絶対モードで指定されます。 + +@warning{@code{@bs{}transpose} ブロックの中にある音符は、@c +そのブロックの中に @code{@bs{}relative} が無い限り、絶対モードになります。} + +D-メジャーの調で書かれた楽曲を思い浮かべてください。@c +この楽曲を E-メジャーに移調することができます。@c +調号も自動的に移調されることに注意してください。 + +@lilypond[verbatim,quote] +\transpose d e { + \relative c' { + \key d \major + d4 fis a d + } +} +@end lilypond + +@cindex transposing instruments (移調楽器) +@cindex instruments, transposing (移調楽器) + +C (通常の @notation{コンサート ピッチ}) で書かれたパートを +A のクラリネットで演奏する +(そのため、A は C として表記され、演奏は表記されたものよりも 3 度低くなります) +場合、そのパート譜は以下のように作り出されます: + +@lilypond[verbatim,quote] +\transpose a c' { + \relative c' { + \key c \major + c4 d e g + } +} +@end lilypond + +@noindent +@w{@code{\key c \major}} を明示的に指定しているということに@c +注意してください。@c +調号を指定しなかった場合、音符は移調されますが、調号は譜刻されません。 + +@code{\transpose} は同音異名のピッチを区別します: +@w{@code{\transpose c cis}} と @w{@code{\transpose c des}} は@c +どちらも半音上に移調します。@c +1 番目の移調はシャープを譜刻し、音符の五線譜上での位置は変わりません。@c +2 番目の移調はフラットを譜刻し、音符の五線譜上での位置は上に上がります。 + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \transpose c cis { \music } + \transpose c des { \music } +} +@end lilypond + +@code{\transpose} は上記とは異なる方法で用いることもでき、@c +それによって移調楽器のために書かれた音符を入力することができます。@c +前の例では C (またはコンサート ピッチ) でピッチを入力して、@c +それらを移調楽器のために譜刻する方法を示しましたが、@c +それとは正反対のことも可能です +-- 例えば、移調楽器のパート譜から指揮譜を譜刻することです。@c +例えば、E で始まる B-フラットのトランペットの音楽 +(コンサート ピッチでは D で始まる音楽) を入力している場合に、@c +指揮譜を作り出すには以下のように記述します: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose c bes, \musicInBflat +@end example + +@noindent +この音楽を F で譜刻する (例えば、フレンチ ホルンの楽譜にアレンジし直すために) +には、既存の音楽をもう 1 つの @code{\transpose} で包み込みます: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose f c' @{ \transpose c bes, \musicInBflat @} +@end example + +@noindent +移調楽器についての更なる情報は、@c +@ref{楽器の移調} を参照してください。 + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} + + +@seealso +記譜法リファレンス: +@ref{楽器の移調}, +@ref{転回}, +@ref{様式的な移調}, +@ref{相対オクターブ入力}, +@ref{逆行} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{TransposedMusic} + + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + +@knownissues + +相対変換は +@code{\transpose}, @code{\chordmode}, @code{\transpose} の引数である@c +音楽表記の中にある @code{\relative} セクションには影響を及ぼしません。@c +移調された音楽の中で相対モードを使用するには、@c +@code{\transpose} の中に @code{\relative} を置く必要があります。 + + +@node 転回 +@unnumberedsubsubsec 転回 +@translationof Inversion + +@cindex inversion (転回) +@cindex operation, inversion (転回操作) +@funindex \inversion + +以下で音楽表記を転回することができます: + +@example +\inversion @var{from-pitch} @var{to-pitch} @var{musicexpr} +@end example + +@code{@var{musicexpr}} の音程は倒置され、@c +それから @code{@var{from-pitch}} が @code{@var{to-pitch}} になるよう@c +移調されます。 + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \music + \inversion d' d' \music + \inversion d' ees' \music +} +@end lilypond + +@seealso +記譜法リファレンス: +@ref{様式的な移調}, +@ref{逆行}, +@ref{移調} + + +@node 逆行 +@unnumberedsubsubsec 逆行 +@translationof Retrograde + +@cindex retrograde transformation (逆行変換) +@cindex transformation, retrograde (逆行変換) +@cindex operation, retrograde (逆行操作) +@funindex \retrograde +@funindex retrograde + +音楽表記を後ろから前に演奏する逆行を作り出すことができます: + +@lilypond[verbatim,quote] +music = \relative c' { c8. ees16( fis8. a16 b8.) gis16 f8. d16 } + +\new Staff { + \music + \retrograde \music +} +@end lilypond + +@knownissues +@code{\retrograde} の中にある手動のタイは壊れて警告を発します。@c +@ref{Automatic note splitting} を有効にすることによって@c +自動的に生成させられるタイもあります。 + +@seealso +記譜法リファレンス: +@ref{転回}, +@ref{様式的な移調}, +@ref{移調} + + +@node 様式的な移調 +@unnumberedsubsubsec 様式的な移調 +@translationof Modal transformations + +@c untranslated +@ignore + +@cindex modal transformations (様式的な移調) +@cindex transformations, modal (様式的な移調) +@cindex operations, modal (様式的な移調の操作) + +音階に基づく作曲では、モチーフはさまざまなやり方で頻繁に移調されます。@c +これは、異なる音程に @notation{移調} する場合や、@c +旋回点で @notation{転回} する場合があります。 +@notation{逆行} するために後戻りする場合もあります@c +-- @ref{逆行} を参照してください。 + +@warning{与えられた音階の中には無い音符は、移調されずに取り残されます。} + +@subsubheading 様式的な移調 + +@cindex modal transposition (様式的な移調) +@cindex transposition, modal (様式的な移調) +@cindex operation, transposition (移調操作) +@funindex \modalTranspose +@funindex modalTranspose + +以下により、与えられた音階でモチーフを移調させることができます: + +@example +\modalTranspose @var{from-pitch} @var{to-pitch} @var{scale} @var{motif} +@end example + +@var{motif} の音符は、@var{scale} @var{to-pitch} と @var{from-pitch} 間の音程によって@c +与えられる度数 +The notes of @var{motif} are shifted within the @var{scale} by the +number of scale degrees given by the interval between @var{to-pitch} +and @var{from-pitch}: +@end ignore + + +@cindex modal transformations +@cindex transformations, modal +@cindex operations, modal + +In a musical composition that is based on a scale, a motif is +frequently transformed in various ways. It may be +@notation{transposed} to start at different places in the scale or +it may be @notation{inverted} around a pivot point in the scale. +It may also be reversed to produce its @notation{retrograde}, see +@ref{Retrograde}. + +@warning{Any note that does not lie within the given scale will be +left untransformed.} + +@subsubheading Modal transposition + +@cindex modal transposition +@cindex transposition, modal +@cindex operation, transposition +@funindex \modalTranspose +@funindex modalTranspose + +A motif can be transposed within a given scale with: + +@example +\modalTranspose @var{from-pitch} @var{to-pitch} @var{scale} @var{motif} +@end example + +The notes of @var{motif} are shifted within the @var{scale} by the +number of scale degrees given by the interval between @var{to-pitch} +and @var{from-pitch}: + +@lilypond[verbatim,quote] +diatonicScale = \relative c' { c d e f g a b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \modalTranspose c f \diatonicScale \motif + \modalTranspose c b, \diatonicScale \motif +} +@end lilypond + +An ascending scale of any length and with any intervals may be +specified: + +@lilypond[verbatim,quote] +pentatonicScale = \relative c' { ges aes bes des ees } +motif = \relative c' { ees8 des ges,4 } + +\new Staff { + \motif + \modalTranspose ges ees' \pentatonicScale \motif +} +@end lilypond + +When used with a chromatic scale @code{\modalTranspose} has a +similar effect to @code{\transpose}, but with the ability to +specify the names of the notes to be used: + +@lilypond[verbatim,quote] +chromaticScale = \relative c' { c cis d dis e f fis g gis a ais b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \transpose c f \motif + \modalTranspose c f \chromaticScale \motif +} +@end lilypond + +@subsubheading Modal inversion + +@cindex modal inversion +@cindex inversion, modal +@cindex operation, modal inversion +@funindex \modalInversion +@funindex modalInversion + +A motif can be inverted within a given scale around a given pivot +note and transposed in a single operation with: + +@example +\modalInversion @var{around-pitch} @var{to-pitch} @var{scale} @var{motif} +@end example + +The notes of @var{motif} are placed the same number of scale degrees +from the @var{around-pitch} note within the @var{scale}, but in the +opposite direction, and the result is then shifted within the +@var{scale} by the number of scale degrees given by the interval between +@var{to-pitch} and @var{around-pitch}. + +So to simply invert around a note in the scale use the same value for +@var{around-pitch} and @var{to-pitch}: + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \modalInversion fis' fis' \octatonicScale \motif +} +@end lilypond + +To invert around a pivot between two notes in the scale, invert around +one of the notes and then transpose by one scale degree. The two notes +specified can be interpreted as bracketing the pivot point: + +@lilypond[verbatim,quote] +scale = \relative c' { c g' } +motive = \relative c' { c c g' c, } + +\new Staff { + \motive + \modalInversion c' g' \scale \motive +} +@end lilypond + +The combined operation of inversion and retrograde produce the +retrograde-inversion: + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \retrograde \modalInversion c' c' \octatonicScale \motif +} +@end lilypond + +@seealso +Notation Reference: +@ref{Inversion}, +@ref{Retrograde}, +@ref{Transpose}. + + +@node ピッチを表示する +@subsection ピッチを表示する +@translationof Displaying pitches + +このセクションではピッチの出力を変更する方法について議論します。 + +@menu +* 音部記号:: +* 調号:: +* オッターバ囲み:: +* 楽器の移調:: +* 自動臨時記号:: +* 音域:: +@end menu + + +@node 音部記号 +@unnumberedsubsubsec 音部記号 +@translationof Clef + +@cindex G clef (G 音部記号) +@cindex C clef (C 音部記号) +@cindex F clef (F 音部記号) +@cindex treble clef (ト音記号、高音部記号) +@cindex violin clef (バイオリン音部記号) +@cindex alto clef (アルト音部記号) +@cindex tenor clef (テノール音部記号) +@cindex bass clef (ヘ音記号、バス音部記号) +@cindex french clef (フレンチ (バイオリン) 音部記号) +@cindex soprano clef (ソプラノ音部記号) +@cindex mezzosoprano clef (メゾソプラノ音部記号) +@cindex baritone clef (バリトン音部記号) +@cindex varbaritone clef (変形バリトン音部記号) +@cindex subbass clef (低バス音部記号) +@cindex clef (音部記号) +@cindex ancient clef (古代音部記号) +@cindex clef, ancient (古代音部記号) +@cindex clef, G (G 音部記号) +@cindex clef, C (C 音部記号) +@cindex clef, F (F 音部記号) +@cindex clef, treble (高音部記号) +@cindex clef, violin (バイオリン音部記号) +@cindex clef, alto (アルト音部記号) +@cindex clef, tenor (テノール音部記号) +@cindex clef, bass (ヘ音記号、バス音部記号) +@cindex clef, french (フレンチ (バイオリン) 音部記号) +@cindex clef, soprano (ソプラノ音部記号) +@cindex clef, mezzosoprano (メゾソプラノ音部記号) +@cindex clef, baritone (バリトン音部記号) +@cindex clef, varbaritone (変形バリトン音部記号) +@cindex clef, subbass (低バス音部記号) + +@funindex \clef +@funindex clef + +音部記号を変えることができます。@c +以下のそれぞれの例の中にある音符はすべてミドル C です。@c +例の中にある音部名をダブル クォートで囲むことができます (必須ではありません)。 + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef alto +c2 c +\clef tenor +c2 c +\clef bass +c2 c +@end lilypond + +他の音部記号もあります: + +@c KEEP LY +@lilypond[verbatim,quote,relative=1] +\clef french +c2 c +\clef soprano +c2 c +\clef mezzosoprano +c2 c +\clef baritone +c2 c + +\break + +\clef varbaritone +c2 c +\clef subbass +c2 c +\clef percussion +c2 c + +\break + +\clef G % treble と同義です +c2 c +\clef F % bass と同義です +c2 c +\clef C % alto と同義です +c2 c +@end lilypond + +@cindex transposing clefs (音部を移調する) +@cindex clef, transposing (音部を移調する) +@cindex オクターブ移調 (octave transposition) +@c 未訳 +@cindex choral tenor clef +@cindex tenor clef, choral + +音部名に @code{_8} または @code{^8} を付け加えることによって、@c +音部はそれぞれ 1 オクターブ下/上に移調され、@c +@code{_15} または @code{^15} によって 2 オクターブ移調されます。@c +音部名にアルファベット以外の文字が含まれる場合、@c +音部名をダブル クォートで囲む必要があります。 + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef "treble_8" +c2 c +\clef "bass^15" +c2 c +\clef "alto_2" +c2 c +\clef "G_8" +c2 c +\clef "F^5" +c2 c +@end lilypond + +特殊な音部記号については @ref{Mensural clefs}, +@ref{Gregorian clefs}, @ref{Default tablatures}, それに @ref{Custom +tablatures} で説明します。 + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-clef-properties.ly} + + +@seealso +記譜法リファレンス: +@ref{Mensural clefs}, +@ref{Gregorian clefs}, +@ref{Default tablatures}, +@ref{Custom tablatures} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{Clef_engraver}, +@rinternals{Clef}, +@rinternals{OctavateEight}, +@rinternals{clef-interface} + + +@node 調号 +@unnumberedsubsubsec 調号 +@translationof Key signature + +@cindex key signature (調号) + +@funindex \key +@funindex key + +@c duplicated in Key signature and Accidentals +@warning{LilyPond を始めたばかりのユーザは@c +しばしば臨時記号と調号のことで混乱します。@c +LilyPond では、音符名は未加工の入力です。@c +調号と音部記号がこの未加工の入力をどのように表示するかを決定します。@c +@code{c} のような変更を加えられていない音符は、調号や音部記号とは無関係に、@c +@q{C ナチュラル} を意味します。@c +更なる情報は、@rlearning{臨時記号と調号} を参照してください。} + +調号は楽曲を演奏すべき調性を示します。@c +調号は譜の先頭で変更記号 (フラットやシャープ) のセットによって示されます。@c +調号は変更されることがあります: + +@example +\key @var{pitch} @var{mode} +@end example + +@funindex \major +@funindex major +@funindex \minor +@funindex minor +@funindex \ionian +@funindex ionian +@funindex \locrian +@funindex locrian +@funindex \aeolian +@funindex aeolian +@funindex \mixolydian +@funindex mixolydian +@funindex \lydian +@funindex lydian +@funindex \phrygian +@funindex phrygian +@funindex \dorian +@funindex dorian + +@cindex church modes (チャーチ モード) +@cindex modes (モード) +@cindex major (メジャー) +@cindex minor (マイナー) +@cindex ionian (アイオニアン) +@cindex locrian (ロクリアン) +@cindex aeolian (エオリアン) +@cindex mixolydian (ミクソリディアン) +@cindex lydian (リディアン) +@cindex phrygian (フリジアン) +@cindex dorian (ドリアン) + +@noindent + +調号を @code{@var{pitch}}-メジャーや @code{@var{pitch}}-マイナーにするには、@c +@code{@var{mode}} をそれぞれ @code{\major} または @code{\minor} にします。@c +さらに標準のモード名 + -- @notation{チャーチ モード} とも呼ばれます -- +を使うこともできます: +@code{\ionian}, @code{\dorian}, @code{\phrygian}, @code{\lydian}, +@code{\mixolydian}, @code{\aeolian} それに @code{\locrian} です。 + +@lilypond[verbatim,quote,relative=2] +\key g \major +fis1 +f +fis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +音楽用語集: +@rglos{church mode}, +@rglos{scordatura} + +学習マニュアル: +@rlearning{臨時記号と調号} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{KeyChangeEvent}, +@rinternals{Key_engraver}, +@rinternals{Key_performer}, +@rinternals{KeyCancellation}, +@rinternals{KeySignature}, +@rinternals{key-cancellation-interface}, +@rinternals{key-signature-interface}. + + +@node オッターバ囲み +@unnumberedsubsubsec オッターバ囲み +@translationof Ottava brackets + +@cindex ottava (オッターバ) +@cindex 15ma +@cindex 8va +@cindex 8ve +@cindex octavation (オクタベーション) + +@funindex set-octavation +@funindex \ottava +@funindex ottava + +@notation{オッターバ囲み} は譜をオクターブ単位で移調します: + +@lilypond[verbatim,quote,relative=2] +a2 b +\ottava #-2 +a2 b +\ottava #-1 +a2 b +\ottava #0 +a2 b +\ottava #1 +a2 b +\ottava #2 +a2 b +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ottava-text.ly} + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ottava-text.ly} + + +@seealso +音楽用語集: +@rglos{octavation} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{Ottava_spanner_engraver}, +@rinternals{OttavaBracket}, +@rinternals{ottava-bracket-interface} + + +@node 楽器の移調 +@unnumberedsubsubsec 楽器の移調 +@translationof Instrument transpositions + +@cindex transposition, MIDI (MIDI の移調) +@cindex transposition, instrument (楽器の移調) +@cindex transposing instrument (移調楽器) +@cindex MIDI +@cindex MIDI transposition (MIDI の移調) + +@funindex \transposition +@funindex transposition + +楽器の移調を含む楽器を譜刻するとき、いくつかのパートは@c +@notation{コンサート ピッチ} とは異なるピッチで譜刻される可能性があります。@c +このような場合、@notation{移調楽器} の調を指定すべきです。@c +指定しなければ MIDI 出力や他のパートの出だしのピッチは誤ったものになります。@c +引用についての更なる情報は @ref{Quoting other voices} を参照してください。 + +@example +\transposition @var{pitch} +@end example + +@code{\transposition} で使用するピッチは、@c +譜に書かれた @code{c'} をその移調楽器で演奏したときに聴こえる@c +実際の音に対応したものであるべきです。@c +このピッチは絶対モードで入力します。@c +ですから、楽譜よりも 1 度高い音を出す楽器は +@w{@code{\transposition d'}} を使うべきです。@c +@code{\transposition} は、ピッチがコンサート ピッチでは @emph{ない} ピッチで@c +入力されている場合に @emph{のみ} 使用すべきです。 + +バイオリンと B-フラットのクラリネットのための音符をいくつか挙げます。@c +それぞれのパートは、それぞれが指揮譜に刻譜されるときに使用される@c +音符と調を使って入力されています。@c +2 つの楽器は斉奏で演奏しています。 + +@lilypond[verbatim,quote] +\new GrandStaff << + \new Staff = "violin" { + \relative c'' { + \set Staff.instrumentName = #"Vln" + \set Staff.midiInstrument = #"violin" + % not strictly necessary, but a good reminder + \transposition c' + + \key c \major + g4( c8) r c r c4 + } + } + \new Staff = "clarinet" { + \relative c'' { + \set Staff.instrumentName = \markup { Cl (B\flat) } + \set Staff.midiInstrument = #"clarinet" + \transposition bes + + \key d \major + a4( d8) r d r d4 + } + } +>> +@end lilypond + +@code{\transposition} は楽曲の途中で変更されることもあります。@c +例えば、クラリネット奏者は A のクラリネットから B-フラットのクラリネットに@c +持ち替えることがあります。 + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = #"Cl (A)" +\key a \major +\transposition a +c d e f +\textLengthOn +s1*0^\markup { Switch to B\flat clarinet } +R1 + +\key bes \major +\transposition bes +c2 g +@end lilypond + + +@seealso +音楽用語集: +@rglos{concert pitch}, +@rglos{transposing instrument} + +記譜法リファレンス: +@ref{Quoting other voices}, @ref{移調} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + + +@node 自動臨時記号 +@unnumberedsubsubsec 自動臨時記号 +@translationof Automatic accidentals + +@cindex accidental style (臨時記号スタイル) +@cindex accidental style, default (デフォルトの臨時記号スタイル) +@cindex accidentals (臨時記号) +@cindex accidentals, automatic (自動臨時記号) +@cindex automatic accidentals (自動臨時記号) +@cindex default accidental style (デフォルトの臨時記号スタイル) + +@funindex set-accidental-style +@funindex voice +@funindex default + +臨時記号の譜刻の仕方には多くの異なる規約があります。@c +LilyPond はどの臨時記号スタイルを使用するのかを指定するための関数を@c +提供します。@c +この関数は以下のように呼び出されます: + +@example +\new Staff << + #(set-accidental-style 'voice) + @{ @dots{} @} +>> +@end example + +指定された臨時記号スタイルは、デフォルトでは、カレントの @code{Staff} に@c +適用されます +(スタイル @code{piano} と @code{piano-cautionary} は例外です。@c +これらは以下で説明します)。@c +オプションとして、この関数は 2 つ目の引数をとることができ、@c +それによってスタイルを変更すべき範囲 (スコープ) を指定できます。@c +例えば、カレントの @code{StaffGroup} のすべての譜で同じスタイルを使うには、@c +以下のようにします: + +@example +#(set-accidental-style 'voice 'StaffGroup) +@end example + +サポートされる臨時記号スタイルを以下で示します。@c +それぞれのスタイルを実際に示すために、以下の例を使用します: + +@lilypond[verbatim,quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +両方の譜で同じ臨時記号スタイルを使うのなら、@c +この例の最後のブロックを以下で置き換えられます: + +@example +\new PianoStaff @{ + << + \context Staff = "up" @{ + %%% 次の行を変更したいスタイルに合わせて変更してください: + #(set-accidental-style 'default 'Score) + \musicA + @} + \context Staff = "down" @{ + \musicB + @} + >> +@} +@end example + + +@c don't use verbatim in this table. +@table @code +@item default + +@cindex default accidental style (default 臨時記号スタイル) +@cindex accidental style, default (default 臨時記号スタイル) + +@funindex default + +これはデフォルトの譜刻の仕方です。@c +これは 18 世紀の一般的な習慣と一致します: +臨時記号が有効なのは、その臨時記号が発生した小節の終わりまでで、@c +かつ、その臨時記号が発生したオクターブの中だけです。@c +そのため以下の例の中では、第 2 小節の @code{b} や最後の @code{c} の前には@c +ナチュラル記号は譜刻されていません: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +@item voice + +@cindex accidental style, voice (voice 臨時記号スタイル) +@cindex voice accidental style (voice 臨時記号スタイル) +@cindex accidental style, modern (modern 臨時記号スタイル) +@cindex modern accidental style (modern 臨時記号スタイル) +@cindex accidental style, modern-cautionary (modern-cautionary 臨時記号スタイル) +@cindex modern-cautionary accidental style (modern-cautionary 臨時記号スタイル) + +@funindex voice + +通常の臨時記号の付け方では、臨時記号は @code{Staff} レベルで保持されます。@c +しかしながらこのスタイルでは、臨時記号はそれぞれのボイスで別々に譜刻されます。@c +それを除けば、このスタイルの規則は @code{default} と同じです。 + +結果として、あるボイスからの臨時記号は他のボイスでキャンセルされず、@c +これはしばしば望まない結果となります: +以下の例では、2 番目の @code{a} をナチュラルで演奏するか、@c +シャープで演奏するかを決定するのは困難です。@c +そのため、@code{voice} オプションは、それぞれのボイスが別々の演奏者によって@c +個々に読まれる場合にのみ使用すべきです。@c +譜が 1 人の演奏者によって使用される場合 (例えば、指揮者やピアノ譜の場合)、@c +このスタイルの代わりに @code{modern} や @code{modern-cautionary} を@c +使用すべきです。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'voice) + \musicB + } + >> +} +@end lilypond + +@item modern + +@cindex accidentals, modern style (modern 臨時記号スタイル) +@cindex modern style accidentals (modern 臨時記号スタイル) + +@funindex modern + +この規則は 20 世紀の一般的な臨時記号の付け方と一致します: +この規則の臨時記号の付け方は、あいまいさを避けるための 2 つの例外 + -- 一時的な臨時記号が使われると、@c +その後の小節で (同じオクターブにある音符に対して) キャンセル記号が@c +譜刻され、@c +臨時記号が使われたのと同じ小節では他のオクターブにある音符にも@c +キャンセル記号が譜刻されます -- +を除いて、@code{default} と同じです。@c +そのため、上部譜の第 2 小節の中にある @code{b} と @code{c} の前には@c +ナチュラルが付けられています: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern) + \musicB + } + >> +} +@end lilypond + +@item modern-cautionary + +@cindex accidentals, modern cautionary style (modern-cautionary 臨時記号スタイル) +@cindex modern accidental style (modern 臨時記号スタイル) +@cindex modern cautionary accidental style (modern-cautionary 臨時記号スタイル) +@cindex modern style accidentals (modern 臨時記号スタイル) +@cindex modern style cautionary accidentals (modern-cautionary 臨時記号スタイル) + +@funindex modern-cautionary + +この規則は @code{modern} と似ていますが、@c +忠告的臨時記号として @q{追加の} 臨時記号が譜刻されます +(これは @code{default} では譜刻されません)。@c +デフォルトでは、この臨時記号は括弧で囲まれて譜刻されますが、@c +@code{AccidentalSuggestion} の @code{cautionary-style} プロパティを@c +定義することによって小さなサイズで譜刻されることもあり得ます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-cautionary) + \musicB + } + >> +} +@end lilypond + +@item modern-voice + +@cindex accidental style, modern (modern 臨時記号スタイル) +@cindex accidentals, modern (modern 臨時記号) +@cindex accidentals, multivoice (マルチボイス臨時記号) +@cindex modern accidental style (modern 臨時記号スタイル) +@cindex modern accidentals (modern 臨時記号) +@cindex multivoice accidentals (マルチボイス) + +@funindex modern-voice + +この規則はマルチボイス臨時記号として使用されます。@c +演奏家が複数のボイスの中の 1 つのボイスを演奏する場合にも、@c +すべてのボイスを演奏する場合にも使用されます。@c +臨時記号はそれぞれのボイスに対して譜刻されますが、@c +同じ @code{Staff} の中であってもボイスをまたいで@emph{キャンセルされます}。@c +そのため、最後の小節で @code{a} がキャンセルされています + -- なぜなら、前のキャンセルは異なるボイスで行われたからです。@c +さらに下部譜では @code{d} がキャンセルされています + -- その臨時記号は前の小節の異なるボイスで付けられたものだからです: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice) + \musicB + } + >> +} +@end lilypond + +@cindex accidental style, cautionary, modern voice (modern-voice-cautionary 臨時記号スタイル) +@cindex accidental style, modern voice cautionary (modern-voice-cautionary 臨時記号スタイル) +@cindex accidental style, voice, modern cautionary (modern-voice-cautionary 臨時記号スタイル) + +@funindex modern-voice-cautionary + +@item modern-voice-cautionary + +この規則は @code{modern-voice} と同じですが、追加の臨時記号 +(これは @code{voice} では譜刻されません) +は忠告として譜刻されます。@c +たとえ @code{default} で譜刻されるすべての臨時記号が@c +この規則でも譜刻されたとしても、@c +それらの臨時記号のいくつかは忠告として譜刻されます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item piano + +@cindex accidental style, piano (ピアノ臨時記号スタイル) +@cindex accidentals, piano (ピアノ臨時記号) +@cindex piano accidental style (ピアノ臨時記号スタイル) +@cindex piano accidentals (ピアノ臨時記号) + +@funindex piano + +この規則は 20 世紀のピアノ譜の臨時記号のつけ方を反映しています。@c +このスタイルは @code{modern} スタイルと非常によく似ています。@c +しかしながらこのスタイルでは、@c +同じ @code{GrandStaff} または @code{PianoStaff} の中にある譜をまたがって@c +臨時記号はキャンセルされます。@c +そのため、最後の和音ではすべての音符でキャンセルが行われています。 + +この臨時記号スタイルは、@c +デフォルトで、@code{GrandStaff} や @code{PianoStaff} に適用されます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + +@item piano-cautionary + +@cindex accidentals, piano cautionary (piano-cautionary 臨時記号) +@cindex cautionary accidentals, piano (piano-cautionary 臨時記号) +@cindex piano cautionary accidentals (piano-cautionary 臨時記号) +@cindex accidental style, piano cautionary (piano-cautionary 臨時記号スタイル) +@cindex cautionary accidental style, piano (piano-cautionary 臨時記号スタイル) +@cindex piano cautionary accidental style (piano-cautionary 臨時記号スタイル) + +@funindex piano-cautionary + +この規則は @code{piano} と同じですが、追加の臨時記号は忠告として譜刻されます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano-cautionary) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + + +@item neo-modern + +@cindex neo-modern accidental style (neo-modern 臨時記号スタイル) +@cindex accidental style, neo-modern (neo-modern 臨時記号スタイル) + +@funindex neo-modern + +この規則は現代音楽での一般的な臨時記号の付け方を再現します: +臨時記号は @code{modern} と同じように譜刻されますが、@c +同じ小節の中で臨時記号を付けられた音符と同じ音符が再び現れた場合、@c +その音符にも臨時記号が譜刻されます + -- ただし、臨時記号を付けられた音符の直後に同じ音符が現れる場合は除きます +(訳者: 第 1 小節の下部譜にある 2 つの @code{f} には@c +両方とも臨時記号が譜刻されていますが、@c +第 1 小節の上部譜にある 2 つのミドル C は連続しているため、@c +後のミドル C には臨時記号が譜刻されません)。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-cautionary + +@cindex neo-modern-cautionary accidental style (neo-modern-cautionary 臨時記号スタイル) +@cindex accidental style, neo-modern-cautionary (neo-modern-cautionary 臨時記号スタイル) + +@funindex neo-modern-cautionary + +この規則は @code{neo-modern} と似ていますが、@c +追加の臨時記号は忠告の臨時記号として譜刻されます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-cautionary) + \musicB + } + >> +} +@end lilypond + + +@item neo-modern-voice + +@cindex neo-modern-voice accidental style (neo-modern-voice 臨時記号スタイル) +@cindex accidental style, neo-modern-voice (neo-modern-voice 臨時記号スタイル) + +@funindex neo-modern-voice + +この規則は、1 つのボイスを演奏する音楽家とすべてのボイスを演奏する音楽家@c +両方のための複数ボイスの臨時記号に使用されます。@c +@code{neo-modern} と同様に、臨時記号は各ボイスに譜刻されますが、@c +同じ @code{Staff} にあるボイスをまたがるとキャンセルされます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-voice-cautionary + +@cindex neo-modern-voice-cautionary accidental style (neo-modern-voice-cautionary 臨時記号スタイル) +@cindex accidental style, neo-modern-voice-cautionary (neo-modern-voice-cautionary 臨時記号スタイル) + +@funindex neo-modern-voice-cautionary + +この規則は @code{neo-modern-voice} と似ていますが、@c +追加の臨時記号が忠告の臨時記号として譜刻されます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item dodecaphonic + +@cindex dodecaphonic accidental style (dodecaphonic 臨時記号スタイル) +@cindex dodecaphonic style, neo-modern (neo-modern 12 音スタイル) + +@funindex dodecaphonic + +この規則は 20 世紀初頭の作曲家たちによって導入された臨時記号の付け方を@c +反映しています + -- ナチュラルの音符と非ナチュラルの音符 +(訳者: ピアノの白鍵に対応する音符と黒鍵に対応する音符) +間にある上下関係を無効にしようとする試みです。@c +このスタイルでは、@emph{すべて} の音符にナチュラル記号を含む臨時記号が@c +付けられます。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'dodecaphonic) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'dodecaphonic) + \musicB + } + >> +} +@end lilypond + + +@item teaching + +@cindex teaching accidental style (teaching 臨時記号スタイル) +@cindex accidental style, teaching (teaching 臨時記号スタイル) + +@funindex teaching + +この規則は学生向けを意図したものであり、@c +自動的に譜刻される忠告の臨時記号によって容易にスケール譜を作ることを@c +容易にします。@c +臨時記号は @code{modern} と同じように譜刻されます。@c +しかしながら、調号によって指定されたすべてのシャープ音、@c +フラット音に対して忠告の臨時記号が譜刻されます + -- ただし、前の音符の直後にある同じピッチの音符は例外です。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicA + } + \context Staff = "down" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicB + } + >> +} +@end lilypond + + + +@item no-reset + +@cindex accidental style, no reset (no-reset 臨時記号スタイル) +@cindex no reset accidental style (no-reset 臨時記号スタイル) + +@funindex no-reset + +この規則は @code{default} と同じですが、臨時記号の保持は小節内に限定されず、@c +@q{最後まで} 保持されます: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'no-reset) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'no-reset) + \musicB + } + >> +} +@end lilypond + +@item forget + +@cindex forget accidental style (forget 臨時記号スタイル) +@cindex accidental style, forget (forget 臨時記号スタイル) + +@funindex forget + +この規則は @code{no-reset} と正反対です: +臨時記号はまったく保持されません +-- そのため、調号に対応しながら、前にある音楽とは無関係に@c +すべての臨時記号が譜刻されます。@c +@code{dodecaphonic} とは異なり、@c +この規則ではナチュラルが譜刻されることはありません。 + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, d'4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'forget) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'forget) + \musicB + } + >> +} +@end lilypond +@end table + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dodecaphonic-style-accidentals-for-each-note-including-naturals.ly} + + +@seealso +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{Accidental}, +@rinternals{Accidental_engraver}, +@rinternals{GrandStaff} and +@rinternals{PianoStaff}, +@rinternals{Staff}, +@rinternals{AccidentalSuggestion}, +@rinternals{AccidentalPlacement}, +@rinternals{accidental-suggestion-interface} + + +@cindex accidentals and simultaneous notes (臨時記号と同時発生する音符) +@cindex simultaneous notes and accidentals (同時発生する音符と臨時記号) +@cindex accidentals in chords (和音の中の臨時記号) +@cindex chords, accidentals in (和音の中の臨時記号) + +@knownissues + +同時発生する音符はシーケンシャル モードで入力されたものと見なされます。@c +このことが意味するのは、和音の各音符は入力ファイルの中で記述された順に +1 つずつ発生するものとして、和音の臨時記号は譜刻されるということです。@c +これは和音の中の臨時記号が互いに依存関係にある場合に問題となります +-- この問題はデフォルトの臨時記号スタイルでは発生しません。@c +この問題は、問題となる音符に @code{!} や @code{?} を@c +手動で付け加えることによって解決できます。 + +臨時記号の忠告的なキャンセルは 1 つ前の小節を見て行われます。@c +しかしながら、@code{\repeat volta N} セクションの後にくる +@code{\alternative} ブロックでは、@c +キャンセルの算出はその前に @emph{譜刻された} 小節ではなく、@c +その前に @emph{演奏された} 小節を見て行われると演奏者は予想します。@c +以下の例では、2 番目の差し替え小節の中にあるナチュラル @code{c} +にナチュラル記号は必要ありません。 + +@lilypond[quote] +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + c' + } +} +@end lilypond + +以下の方法で解決できます: +局部的に臨時記号スタイルを @code{forget} に変更する関数を定義します: + +@lilypond[verbatim,quote] +forget = #(define-music-function (parser location music) (ly:music?) #{ + #(set-accidental-style 'forget) + $music + #(set-accidental-style 'modern) +#}) +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + \forget c' + } +} +@end lilypond + +@node 音域 +@unnumberedsubsubsec 音域 +@translationof Ambitus + +@cindex ambitus (音域) +@cindex range of pitches (ピッチの範囲) +@cindex pitch range (ピッチ範囲) + +用語 @notation{音域} (ambitus) は、@c +音楽のある部分の中にあるボイスがとるピッチの範囲を示します。@c +さらに、ある楽器が演奏することができるピッチ範囲を@c +示すこともあるかもしれません。@c +音域をボーカル パートに譜刻することによって、@c +歌い手はそのパートの音域が歌い手の能力と一致するかどうかを@c +容易に見極めることができます。 + +音域は、楽曲の開始点で、最初の音部記号の近くに記されます。@c +範囲は最低ピッチと最高ピッチを表す 2 つの音符によって@c +グラフィカルに示されます。@c +臨時記号は、その臨時記号が調号の一部でない場合にのみ譜刻されます。 + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\relative c'' { + aes c e2 + cis,1 +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-ambitus-per-voice.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ambitus-with-multiple-voices.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-ambitus-gap.ly} + + +@seealso +音楽用語集: +@rglos{ambitus} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{Ambitus_engraver}, +@rinternals{Voice}, +@rinternals{Staff}, +@rinternals{Ambitus}, +@rinternals{AmbitusAccidental}, +@rinternals{AmbitusLine}, +@rinternals{AmbitusNoteHead}, +@rinternals{ambitus-interface} + + +@knownissues + +複数のボイスがある場合にボイスごとに音域をとることによって生じる@c +音域の衝突を処理するシステムはありません。 + + +@node 符頭 +@subsection 符頭 +@translationof Note heads + +このセクションでは符頭を変更する方法について説明します。 + +@menu +* 特殊な符頭:: +* 演奏を容易にする記譜法の符頭:: +* シェイプ符頭:: +* 即興:: +@end menu + +@node 特殊な符頭 +@unnumberedsubsubsec 特殊な符頭 +@translationof Special note heads + +@cindex note heads, special (特別な符頭) +@cindex note heads, cross (×の符頭) +@cindex note heads, diamond (ダイアモンド形の符頭) +@cindex note heads, parlato (語りの符頭) +@cindex note heads, harmonic (和音の符頭) +@cindex note heads, guitar (ギターの符頭) +@cindex special note heads (特別な符頭) +@cindex cross note heads (×の符頭) +@cindex diamond note heads (ダイアモンド形の符頭) +@cindex parlato note heads (語りの符頭) +@cindex harmonic note heads (和音の符頭) +@cindex guitar note heads (ギターの符頭) +@cindex note head styles (符頭のスタイル) +@cindex styles, note heads (符頭のスタイル) + +@funindex cross + +符頭を変更することができます: + +@lilypond[verbatim,quote,relative=2] +c4 b +\override NoteHead #'style = #'cross +c4 b +\revert NoteHead #'style +a b +\override NoteHead #'style = #'harmonic +a b +\revert NoteHead #'style +c4 d e f +@end lilypond + +すべての符頭スタイルを調べるには、@ref{Note head styles} を参照してください。 + +@code{cross} スタイルはさまざまな音楽的意図を表すために使用されます。@c +以下の定義済みコマンドは符頭を譜コンテキストとタブ譜コンテキストで変更し、@c +何らかの音楽的意味を表すために使用することができます: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNotesOn + a b c4 b +\xNotesOff +c4 d +@end lilypond + +この定義済みコマンドの音楽関数は、譜コンテキストやタブ譜コンテキストの@c +和音の内外で使用して、符頭を×の形にすることができます: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNote { e f } +c b < g \xNote c f > b +@end lilypond + +@code{\xNote}, @code{\xNotesOn} それに @code{\xNotesOff} の同義語として +@code{\deadNote}, @code{\deadNotesOn} それに @code{\deadNotesOff} を@c +使用することができます。@c +@notation{dead note} という用語はギタリストが一般的に使用します。 + +また、和音の中でのみ使用できるダイアモンド形のための短縮記法があります: + +@lilypond[verbatim,quote,relative=2] +2 4 +@end lilypond + +@predefined +@code{\harmonic}, +@code{\xNotesOn}, +@code{\xNotesOff}, +@code{\xNote}. +@endpredefined + +@seealso +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +記譜法リファレンス: +@ref{Note head styles}, +@ref{Chorded notes}, +@ref{Indicating harmonics and dampened notes} + +内部リファレンス: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{Ledger_line_engraver}, +@rinternals{NoteHead}, +@rinternals{LedgerLineSpanner}, +@rinternals{note-head-interface}, +@rinternals{ledger-line-spanner-interface} + + +@node 演奏を容易にする記譜法の符頭 +@unnumberedsubsubsec 演奏を容易にする記譜法の符頭 +@translationof Easy notation note heads + +@cindex note heads, practice (練習のための符頭) +@cindex practice note heads (練習のための符頭) +@cindex note heads, easy notation (演奏を容易にする記譜法の符頭) +@cindex easy notation (演奏を容易にする記譜法) +@cindex Hal Leonard +@cindex beginners' music (初心者のための楽譜) +@cindex music, beginners' (初心者のための楽譜) +@cindex easy play note heads (演奏を容易にする符頭) +@cindex note heads, easy play (演奏を容易にする符頭) + +@funindex \easyHeadsOn +@funindex easyHeadsOn +@funindex \easyHeadsOff +@funindex easyHeadsOff + +@q{演奏を容易にする} 符頭は、符頭の中に音符名を含みます。@c +これは、初心者のための楽譜で使用されます。@c +文字を読みやすくするために、大きなフォント サイズで譜刻すべきです。@c +大きなフォントで譜刻する方法は、@c +@ref{Setting the staff size} を参照してください。 + +@lilypond[verbatim,quote] +#(set-global-staff-size 26) +\relative c' { + \easyHeadsOn + c2 e4 f + g1 + \easyHeadsOff + c,1 +} +@end lilypond + + +@predefined +@code{\easyHeadsOn}, +@code{\easyHeadsOff} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{numbers-as-easy-note-heads.ly} + + +@seealso +記譜法リファレンス: +@ref{Setting the staff size} + +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface} + + +@node シェイプ符頭 +@unnumberedsubsubsec シェイプ符頭 +@translationof Shape note heads + +@cindex note heads, shape (シェイプ符頭) +@cindex note heads, Aiken (Aiken の符頭) +@cindex note heads, sacred harp (セイクリッド ハープの符頭) +@cindex shape notes (シェイプ ノート) +@cindex Aiken shape note heads (Aiken のシェイプ符頭) +@cindex sacred harp note heads (セイクリッド ハープの符頭) +@cindex note heads, Southern Harmony +@cindex Southern Harmony note heads +@cindex Funk shape note heads +@cindex note heads, Funk +@cindex note heads, Harmonica Sacra +@cindex Harmonica Sacra note heads +@cindex Christian Harmony note heads +@cindex note heads, Christian Harmony +@cindex Walker shape note heads +@cindex note heads, Walker + +@funindex \aikenHeads +@funindex aikenHeads +@funindex \sacredHarpHeads +@funindex sacredHarpHeads +@funindex \southernHarmonyHeads +@funindex southernHarmonyHeads +@funindex \funkHeads +@funindex funkHeads +@funindex \walkerHeads +@funindex walkerHeads + +シェイプ ノート記譜法では、@c +符頭の形状は音階の中での音符の位置付けに対応します。@c +この表記は 19 世紀のアメリカの歌集で一般的なものです。@c +シェイプ符頭はセイクリッド ハープ、Southern Harmony、@c +Funk (Harmonica Sacra)、Walker、それに Aiken (Christian Harmony) スタイルで@c +使用されます: + +@lilypond[verbatim,quote,relative=2] +\aikenHeads +c, d e f g2 a b1 c \break +\sacredHarpHeads +c,4 d e f g2 a b1 c \break +\southernHarmonyHeads +c,4 d e f g2 a b1 c \break +\funkHeads +c,4 d e f g2 a b1 c \break +\walkerHeads +c,4 d e f g2 a b1 c \break +@end lilypond + +@funindex \key +@funindex key +@funindex \aikenHeadsMinor +@funindex aikenHeadsMinor +@funindex \sacredHarpHeadsMinor +@funindex sacredHarpHeadsMinor +@funindex \southernHarmonyHeadsMinor +@funindex southernHarmonyHeadsMinor +@funindex \funkHeadsMinor +@funindex funkHeadsMinor +@funindex \walkerHeadsMinor +@funindex walkerHeadsMinor + +符頭の形状は音階の中での位置に対応し、@c +音階のベースは @code{\key} コマンドによって決まります。@c +マイナーで記述している場合、@c +符頭の形状を決定する音階ステップはメジャーの場合との相対関係になります: + +@lilypond[verbatim,quote,relative=2] +\key a \minor +\aikenHeads +a b c d e2 f g1 a \break +\aikenHeadsMinor +a,4 b c d e2 f g1 a \break +\sacredHarpHeadsMinor +a,2 b c d \break +\southernHarmonyHeadsMinor +a2 b c d \break +\funkHeadsMinor +a2 b c d \break +\walkerHeadsMinor +a2 b c d \break + +@end lilypond + + +@predefined +@code{\aikenHeads}, +@code{\aikenHeadsMinor}, +@code{\funkHeads}, +@code{\funkHeadsMinor}, +@code{\sacredHarpHeads}, +@code{\sacredHarpHeadsMinor}, +@code{\southernHarmonyHeads}, +@code{\southernHarmonyHeadsMinor}, +@code{\walkerHeads}, +@code{\walkerHeadsMinor} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} + +すべての符頭スタイルを調べるには、@ref{Note head styles} を参照してください。 + + +@seealso +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +記譜法リファレンス: +@ref{Note head styles} + +内部リファレンス: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface} + + +@node 即興 +@unnumberedsubsubsec 即興 +@translationof Improvisation + +@cindex improvisation (即興) +@cindex slashed note heads (スラッシュ形の符頭) +@cindex note heads, improvisation (即興の符頭) +@cindex note heads, slashed (スラッシュ形の符頭) + +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +即興はしばしばスラッシュ形の符頭で記されます。@c +そのような表記では、演奏者は好みのピッチを選ぶことができますが、@c +指定されたリズムに従って演奏する必要があります。@c +このような符頭は以下のようにして作成することができます: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { + \consists "Pitch_squash_engraver" +} { + e8 e g a a16( bes) a8 g + \improvisationOn + e8 ~ + e2 ~ e8 f4 f8 ~ + f2 + \improvisationOff + a16( bes) a8 g e +} +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff} +@endpredefined + + +@seealso +コード断片集: +@rlsrnamed{Pitches,ピッチ} + +内部リファレンス: +@rinternals{Pitch_squash_engraver}, +@rinternals{Voice}, +@rinternals{RhythmicStaff} diff --git a/Documentation/ja/notation/repeats.itely b/Documentation/ja/notation/repeats.itely new file mode 100644 index 0000000000..b41cb45f0b --- /dev/null +++ b/Documentation/ja/notation/repeats.itely @@ -0,0 +1,725 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: fe4f33aca60ea7c58bc9196eac43b4acca1d4437 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 繰り返し +@section 繰り返し +@translationof Repeats + +@lilypondfile[quote]{repeats-headword.ly} + +繰り返しは音楽の主要なコンセプトであり、@c +繰り返しのために複数の記譜法が存在します。@c +LilyPond は以下の種類の繰り返しをサポートします: + + +@table @code +@item volta +繰り返される音楽は描き出されませんが、繰り返しの小節線で囲まれます。@c +繰り返しが楽曲の先頭にある場合、繰り返しの小節線は繰り返しの終端にのみ@c +譜刻されます。@c +繰り返し時に入れ替えて演奏される部分 (volte) は囲みの右側に譜刻されます。@c +これは入れ替えがある繰り返しの標準的な記譜法です。 + +@item unfold +繰り返される音楽は、@var{repeatcount} によって指定された回数だけ、@c +描き出されます。@c +これは反復の多い音楽を入力するときに有用です。 + +@item percent +これには拍の繰り返しや小節の繰り返しがあります。@c +スラッシュまたはパーセント記号のような外見をしています。 + +@item tremolo +これはトレモロの連桁を描くために使用されます。 +@end table + + +@menu +* 長い繰り返し:: +* 短い繰り返し:: +@end menu + +@node 長い繰り返し +@subsection 長い繰り返し +@translationof Long repeats + +このセクションでは長い (通常は複数の小節) 繰り返しを入力する方法について@c +議論します。@c +繰り返しには 2 つの形式があります: 繰り返し記号によって囲まれる繰り返しと、@c +描き出される繰り返し -- これは反復の多い音楽を入力するために使用されます +-- です。@c +繰り返し記号を手動で制御することもできます。 + +@menu +* 通常の繰り返し:: +* 手動の繰り返し記号:: +* 繰り返しを描き出す:: +@end menu + +@c 未訳 +@cindex volta +@cindex prima volta +@cindex seconda volta +@cindex volta, prima +@cindex volta, seconda +@cindex repeat, normal +@cindex normal repeat +@cindex repeat with alternate endings +@cindex alternate endings +@funindex \repeat +@funindex \alternative +@funindex \partial + +@node 通常の繰り返し +@unnumberedsubsubsec 通常の繰り返し +@translationof Normal repeats + +通常の繰り返しの構文は以下の通りです。 + +@example +\repeat volta @var{repeatcount} @var{musicexpr} +@end example + +@noindent +ここで、@code{@var{musicexpr}} は音楽表記です。@c + +入れ替えを持たない 1 回の繰り返しは以下のようになります: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f } +c2 d +\repeat volta 2 { d4 e f g } +@end lilypond + +繰り返し時に入れ替えて演奏する部分は @code{\alternative} を@c +用いて作り出すことができます。@c +入れ替えの各グループを波括弧で囲んで、このブロックの中に配置します。 + +@example +\repeat volta @var{repeatcount} @var{musicexpr} +\alternative @{ + @{ @var{musicexpr} @} +@} +@end example + +@noindent +ここで、@code{@var{musicexpr}} は音楽表記です。@c + +繰り返し回数が入れ替え部分の数よりも多い場合、始めの方の繰り返しには@c +最初の入れ替え部分が使用されます。 + +繰り返しが 1 回で、入れ替えも 1 つの場合は以下のようになります: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +複数の入れ替え部分を 1 回ずつ演奏する繰り返しは以下のようになります: + + +@lilypond[verbatim,quote,relative=2] +\repeat volta 4 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +繰り返し部分を複数回繰り返す場合は以下のようになります: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 3 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } + { a2 g | } +} +c1 +@end lilypond + +@warning{入れ替えが複数ある場合、入れ替えの閉じ波括弧と次の入れ替えの@c +開始の波括弧の間に何かを置くべきではありません。@c +さもないと、予期せぬ数の入れ替えが発生します。} + +@warning{@code{Voice} コンテキストを明示的にインスタンス化せずに@c +@code{@bs{}relative} を @code{@bs{}repeat} の中に配置すると、@c +余計な譜が表示されます。@c +@rprogram{余計な譜が表示される} を参照してください。} + +@cindex repeat with upbeat (上拍を持つ繰り返し) +@cindex upbeat in a repeat (繰り返しの中にある上拍) +@cindex anacrucis in a repeat (繰り返しの中にある弱拍) +@cindex repeat with anacrucis (弱拍を持つ繰り返し) +@cindex repeat with pickup (ピックアップを持つ繰り返し) +@cindex pickup in a repeat (繰り返しの中にあるピックアップ) +@funindex \partial + +繰り返しが小節の途中から始まり、入れ替え部分が無い場合、@c +風通は繰り返しの終わりも小節の途中になります。@c +そのため、1 つ小節に 2 つの終わりが加えられます。@c +そのような場合、繰り返し記号は本来の小節線とは異なります。@c +繰り返し記号を譜刻する場所で @code{\partila} コマンドや小節チェックを@c +使わないで下さい: + +@c KEEP LY +@lilypond[verbatim,quote,relative=1] +% ここで \partial を使わないで下さい +c4 e g % ここで小節チェックを行わないで下さい +% ここで \partial を使わないで下さい +\repeat volta 4 { + e4 | + c2 e | + % ここで \partial を使わないで下さい + g4 g g % ここで小節チェックを行わないで下さい +} +% ここで \partial を使わないで下さい +g4 | +a2 a | +g1 | +@end lilypond + +同様に、繰り返しが楽譜の先頭の部分小節から始まり、入れ替え部分を持たない場合、@c +楽譜の先頭で @code{\partial} コマンドを配置する必要があることを除いて、@c +上の例と同じ条件が適用されます: + +@c KEEP LY +@lilypond[verbatim,quote,relative=1] +\partial 4 % \partial が必要です +\repeat volta 4 { + e4 | + c2 e | + % ここで \partial を使わないで下さい + g4 g g % ここで小節チェックを行わないで下さい +} +% ここで \partial を使わないで下さい +g4 | +a2 a | +g1 | +@end lilypond + +完全な長さを持たない小節で始まる小節に入れ替え部分を付け加える場合、@c +以下の場所で @code{Timing.measureLength} コンテキスト プロパティを@c +手動で設定する必要があります: + +@itemize +@item +@code{\alternative} ブロック内の不完全な小節の開始点。@c +通常、これは (たいていの場合は) 最後の入れ替え部分を除く、@c +各入れ替え部分の最後の小節になります。 + +@item +最初の入れ替え部分を除く、各入れ替え部分の開始点。 +@end itemize + +@lilypond[verbatim,quote,relative=1] +\partial 4 +\repeat volta 2 { e4 | c2 e | } +\alternative { + { + f2 d | + \set Timing.measureLength = #(ly:make-moment 3 4) + g4 g g % optional bar check is allowed here + } + { + \set Timing.measureLength = #(ly:make-moment 4 4) + a2 a | + } +} +g1 | +@end lilypond + +@code{measureLength} プロパティについての説明は @ref{時間管理} にあります。 + +@cindex repeats with ties (タイを持つ繰り返し) +@cindex alternative endings with ties (タイを持つ繰り返しの入れ替え部分) +@cindex ties in repeats (繰り返しの中にあるタイ) +@cindex ties in alternative endings (繰り返しの入れ替え部分の中にあるタイ) +@funindex \repeatTie + +繰り返しの 2 回目の部分にタイを付け加えることもできます: + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat volta 2 { c4 d e f~ } +\alternative { + { f2 d } + { f2\repeatTie f, } +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{shortening-volta-brackets.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-volta-brackets-to-additional-staves.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-double-repeat-default-for-volte.ly} + +@seealso +音楽用語集: +@rglos{repeat}, +@rglos{volta} + +記譜法リファレンス: +@ref{小節線}, +@ref{Modifying context plug-ins}, +@ref{時間管理} + +コード断片集: +@rlsr{Repeats} + +内部リファレンス: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic} + + +@knownissues + +@cindex repeat, ambiguous (あいまいな繰り返し) +@cindex nested repeat (ネストされた繰り返し) +@cindex repeat, nested (ネストされた繰り返し) +@cindex repeat timing information (繰り返しタイミング情報) +@cindex repeat and measure number (繰り返しと小節番号) +@cindex timing information and repeats (タイミング情報と繰り返し) +@cindex measure number and repeats (小節番号と繰り返し) +@cindex repeat and slur (繰り返しとスラー) +@cindex slur and repeat (スラーと繰り返し) + +@code{\repeat} ブロックから @code{\alternative} ブロックまで続くスラーは、@c +最初の入れ替え部分に対してのみ機能します。@c +さらに、スラーは入れ替え部分の終わりから繰り返しの先頭までをカバーすることは@c +できません。 + +不完全な小節で始まる繰り返しが @code{measureLength} プロパティの変更を行う@c +@code{\alternative} ブロックを持つ場合、@c +@code{\unfoldRepeats} を使用するとおかしな場所に小節線が引かれ、@c +小節チェック警告が発生します。 + +以下のようにネストされた繰り返し + +@example +\repeat @dots{} +\repeat @dots{} +\alternative +@end example + +@noindent +はあいまいです。@c +なぜなら、@code{\alternative} がどちらの @code{\repeat} に属するのか@c +はっきりしないからです。@c +このあいまいさは、常に @code{\alternative} を内側の @code{\repeat} に@c +属させることによって解決されます。@c +はっきりとさせるために、そのような状況では波括弧を使用すると賢明です。 + + +@node 手動の繰り返し記号 +@unnumberedsubsubsec 手動の繰り返し記号 +@translationof Manual repeat marks + +@cindex manual repeat mark (手動の繰り返し記号) +@cindex repeat, manual (手動の繰り返し) +@cindex start repeat (繰り返しの開始) +@cindex repeat, start (繰り返しの開始) +@cindex end repeat (繰り返しの終了) +@cindex repeat, end (繰り返しの終了) +@cindex repeat number, changing (繰り返しの回数を変更する) +@cindex repeat volta, changing (繰り返し volta を変更する) +@cindex volta bracket (volta 囲み) +@cindex bracket, volta (volta 囲み) +@funindex repeatCommands +@funindex start-repeat + +@warning{以下の手法は特殊な繰り返し構造を表示するためだけに使用され、@c +予期しない振る舞いをする可能性があります。@c +たいていのケースでは、繰り返しは標準の @code{@bs{}repeat} コマンドを用いるか、@c +適切な小節線を譜刻することによって作成すべきです。@c +更なる情報は、@ref{小節線} を参照してください。} + +プロパティ @code{repeatCommands} を用いて繰り返しのレイアウトを@c +制御することができます。@c +このプロパティの値は繰り返しコマンドの Scheme リストです。 + +@table @code +@item start-repeat +@code{|:} 小節線を譜刻します。 + +@lilypond[verbatim,quote,relative=2] +c1 +\set Score.repeatCommands = #'(start-repeat) +d4 e f g +c1 +@end lilypond + +標準の譜刻習慣に従い、楽曲の先頭では繰り返し記号は譜刻されません。 + +@item end-repeat +@code{:|} 小節線を譜刻します。 + +@lilypond[verbatim,quote,relative=2] +c1 +d4 e f g +\set Score.repeatCommands = #'(end-repeat) +c1 +@end lilypond + +@item (volta @var{number}) ... (volta #f) +指定された番号を持つ新しい volta を作成します。@c +Volta 囲みは明示的に終了させる必要があります。@c +さもなければ、譜刻されません。 + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2")) +g4 a g a +\set Score.repeatCommands = #'((volta #f)) +c1 +@end lilypond + +@end table + +複数の繰り返しコマンドが同時に発生することもあります: + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2, 5") end-repeat) +g4 a g a +c1 +\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) +b1 +\set Score.repeatCommands = #'((volta #f)) +@end lilypond + +@cindex volta bracket with text (テキストを持つ volta 囲み) +@cindex text in volta bracket (volta 囲みの中にあるテキスト) + +テキストを volta 囲みに含めることができます。@c +テキストに使用できるのは数字やマークアップ テキストです。@c +@ref{Formatting text} を参照してください。@c +マークアップ テキストを使用するための最も簡単な方法は、最初にマークアップを@c +定義し、それからそのマークアップを Scheme リストに含める方法です。 + +@lilypond[verbatim,quote] +voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } +\relative c'' { + c1 + \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) + c4 b d e + \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) + f1 + \set Score.repeatCommands = #'((volta #f)) +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} + + +@seealso +記譜法リファレンス: +@ref{小節線}, +@ref{Formatting text} + +コード断片集: +@rlsr{Repeats} + +内部リファレンス: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic} + + +@node 繰り返しを描き出す +@unnumberedsubsubsec 繰り返しを描き出す +@translationof Written-out repeats + +@cindex written-out repeats (繰り返しを描き出す) +@cindex repetitious music (反復の多い音楽) +@cindex repeats, written-out (繰り返しを描き出す) +@cindex repeat, unfold (繰り返しを展開する) +@cindex unfold music (音楽を展開する) +@cindex unfold repeat (繰り返しを展開する) +@cindex unfold repeat with alternate endings (入れ替え部分のある繰り返しを展開する) +@cindex unfold music with alternate endings (入れ替え部分のある音楽を展開する) +@cindex alternate ending in written-out repeats (描き出される繰り返しの中にある入れ替え部分) +@funindex unfold + +@code{unfold} コマンドを用いることにより、@c +繰り返しを単に反復する音楽を描き出すために使用することができます。@c +構文は以下の通りです: + +@example +\repeat unfold @var{repeatcount} @var{musicexpr} +@end example + +ここで、@code{@var{musicexpr}} は音楽表記であり、@code{@var{repeatcount}} は +@code{@var{musicexpr}} を繰り返す回数です。 + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +c1 +@end lilypond + +入れ替え部分がある繰り返しを展開することもできます。@c + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } +} +c1 +@end lilypond + +繰り返し回数が入れ替え部分の数よりも多い場合、@c +最初の入れ替え部分が複数回使用して、入れ替え数と繰り返し回数を合わせます。 + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 4 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } + } +c1 +@end lilypond +入れ替え部分の数が繰り返し回数よりも多い場合、@c +最初の入れ替え部分が使用され、残りの繰り返し部分は無視され、譜刻されません。 + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } +} +c1 +@end lilypond + +複数の @code{unfold} 関数をネストすることも可能です。@c +(@code{unfold} は入れ替え部分を持っていても、持っていなくても構いません。) + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { + \repeat unfold 2 { c4 d e f } + \alternative { + { c2 g' } + { c,2 b } + } +} +c1 +@end lilypond + +@warning{@code{Voice} コンテキストを明示的にインスタンス化せずに@c +@code{@bs{}relative} を @code{@bs{}repeat} の中に配置すると、@c +余計な譜が表示されます。@c +@rprogram{余計な譜が表示される} を参照してください。} + + +@seealso +コード断片集: +@rlsr{Repeats} + +内部リファレンス: +@rinternals{RepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic} + + +@node 短い繰り返し +@subsection 短い繰り返し +@translationof Short repeats + +このセクションでは、短い繰り返しを入力する方法について議論します。@c +短い繰り返しには 2 つの形式があります: +単一の音符、単一の小節あるいは 2 小節の繰り返しを表す@c +スラッシュまたはパーセント記号と、トレモロです。 + +@menu +* パーセント繰り返し:: +* トレモロの繰り返し:: +@end menu + +@node パーセント繰り返し +@unnumberedsubsubsec パーセント繰り返し +@translationof Percent repeats + +@cindex percent repeats (パーセント繰り返し) +@cindex measure repeats (小節の繰り返し) +@cindex repeat, percent (パーセント繰り返し) +@cindex repeat, measure (小節の繰り返し) +@cindex repeat, short (短い繰り返し) +@funindex \repeat percent +@funindex percent + +繰り返される短いパターンは 1 回だけ譜刻され、@c +繰り返しは特殊な記号で置き換えられます。 + +構文は以下の通りです + +@example +\repeat percent @var{number} @var{musicexpr} +@end example + +@noindent +ここで、@code{@var{musicexpr}} は音楽表記です。 + +1 小節よりも短いパターンはスラッシュで置き換えられます。 + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c8 d } +\repeat percent 4 { c4 } +\repeat percent 2 { c2 } +@end lilypond + +1 または 2 小節のパターンはパーセントのような記号で置き換えられます。 + +@lilypond[verbatim,quote,relative=2] +\repeat percent 3 { c4 d e f } +\repeat percent 4 { c2 d } +@end lilypond + +@lilypond[verbatim,quote,relative=2] +\repeat percent 3 { c4 d e f | c2 g' } +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-counter.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-count-visibility.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{isolated-percent-repeats.ly} + + +@seealso +音楽用語集: +@rglos{percent repeat}, +@rglos{simile} + +コード断片集: +@rlsr{Repeats} + +内部リファレンス: +@rinternals{RepeatSlash}, +@rinternals{PercentRepeat}, +@rinternals{DoublePercentRepeat}, +@rinternals{DoublePercentRepeatCounter}, +@rinternals{PercentRepeatCounter}, +@rinternals{PercentRepeatedMusic} + + +@knownissues + +パーセント繰り返しは 3 種類だけサポートされます: +単一の拍を表す単線のスラッシュ (繰り返される音符の演奏時間とは関係ありません)、@c +1 小節を表す単線の付点スラッシュ、@c +それに 2 小節を表す 2 重線の付点スラッシュ +-- これは小節線の上に譜刻されます -- です。@c +16 分音符やそれよりも短い音符から成る単一拍の繰り返しを表す多重線スラッシュや、@c +さまざまな演奏時間の音符から成る単一拍の繰り返しを表す +2 重線の付点スラッシュはサポートされません。 + + +@node トレモロの繰り返し +@unnumberedsubsubsec トレモロの繰り返し +@translationof Tremolo repeats + +@cindex tremolo beams (トレモロの連桁) +@cindex tremolo (トレモロ) +@cindex repeat, tremolo (トレモロの繰り返し) +@funindex \repeat tremolo +@funindex tremolo + +トレモロには 2 つの形式があります: +2 つの和音あるいは 2 つの音符を交互に演奏するものと、@c +単一の音符あるいは和音を素早く繰り返すものです。@c +交互に演奏するトレモロは、@c +音符あるいは和音の間に多重連桁を付け加えることによって示され、@c +一方、単一の音符を素早く繰り返すトレモロは単一の音符に@c +多重連桁あるいは多重スラッシュを付け加えることによって示されます。 + +2 つの音符の間にトレモロ記号を配置するには、トレモロ スタイルの @code{\repeat} +を使用します: + +@lilypond[quote,verbatim,relative=2] +\repeat tremolo 8 { c16 d } +\repeat tremolo 6 { c16 d } +\repeat tremolo 2 { c16 d } +@end lilypond + +@code{\repeat tremolo} の構文では、@c +波括弧の中にある音符の数がちょうど 2 つであること、@c +それに、繰り返しの回数が普通の音符あるいは付点音符として表すことができる@c +音価に相当することが必須です。@c +それゆえ、@code{\repeat tremolo 7} は有効であり、2 重付点音符を作り出します。@c +しかしながら、@code{\repeat tremolo 9} は無効です。 + +トレモロの演奏時間は、@c +波括弧で囲まれた音楽表記の演奏時間に繰り返し回数を掛けたものに等しいです: +@code{\repeat tremolo 8 @{ c16 d16 @}} は全音符のトレモロであり、@c +トレモロの連桁でつながれた 2 つの全音符として譜刻されます。 + +単一の音符上にトレモロ記号を配置する方法は 2 つあります。@c +@code{\repeat tremolo} 構文をここでも使用します +-- この場合、音符を波括弧で囲むべきではありません: + +@lilypond[quote,verbatim,ragged-right] +\repeat tremolo 4 c'16 +@end lilypond + +@cindex tremolo marks (トレモロ記号) +@funindex tremoloFlags +@funindex : + +音符の後に @code{:@var{N}} を付け加えることによって@c +同じ出力を得ることができます。@c +@code{@var{N}} は細部の演奏時間を表し、8 以上である必要があります。@c +@code{@var{N}} が 8 である場合、音符の符幹に 1 本の連桁が付け加えられます。@c +@code{@var{N}} が省略された場合、 +最後の値 (@code{tremoloFlags} に保存されています) が使用されます: + +@lilypond[quote,verbatim,relative=2] +c2:8 c:32 +c: c: +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{cross-staff-tremolos.ly} + + +@seealso +コード断片集: +@rlsr{Repeats} + +@cindex tremolo, cross-staff (譜を跨ぐトレモロ) +@cindex cross-staff tremolo (譜を跨ぐトレモロ) diff --git a/Documentation/ja/notation/rhythms.itely b/Documentation/ja/notation/rhythms.itely new file mode 100644 index 0000000000..1ab0753ef2 --- /dev/null +++ b/Documentation/ja/notation/rhythms.itely @@ -0,0 +1,3383 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 1f655fba7d94feb67f846785f47ab6fb20dc2e59 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node リズム +@section リズム +@translationof Rhythms + +@lilypondfile[quote]{rhythms-headword.ly} + +このセクションではリズム、休符、演奏時間、連桁、小節について議論します。 + +@menu +* リズムを記述する:: +* 休符を記述する:: +* リズムを表示する:: +* 連桁:: +* 小節:: +* 特殊なリズム関連事項:: +@end menu + + +@node リズムを記述する +@subsection リズムを記述する +@translationof Writing rhythms + +@menu +* 演奏時間:: +* 連符:: +* 演奏時間を変更する:: +* タイ:: +@end menu + +@node 演奏時間 +@unnumberedsubsubsec 演奏時間 +@translationof Durations + +@cindex durations, of notes (音符の演奏時間) +@cindex note durations (音符の演奏時間) +@cindex length of notes (音符の長さ) +@cindex note lengths (音符の長さ) + +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve +@funindex \maxima +@funindex maxima + +演奏時間は数とドットで指定されます。@c +演奏時間はその演奏時間の逆数で入力されます。@c +例えば、4 分音符は @code{4} で入力され (1/4 の音符だから)、半音符は @code{2} +で入力されます (1/2 の音符だから)。@c +全音符よりも長い音符を入力するには、@code{\longa} コマンド (全音符の 4 倍) +と @code{\breve} コマンド (全音符の 2 倍) を使う必要があります。@c +128 分音符のような短い音符を指定することもできます。@c +それよりも短い音価を指定することも可能ですが、必ず連桁付きの音符となります。 + +@c Two 64th notes are needed to obtain beams +@lilypond[quote,verbatim,relative=2] +\time 8/1 +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +同じ例で自動連桁を off にしてみます。 + +@c not strictly "writing rhythms"; more of a "displaying" thing, +@c but it's ok here. -gp +@lilypond[quote,verbatim,relative=2] +\time 8/1 +\autoBeamOff +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +全音符の 8 倍の演奏時間を持つ音符は +@code{\maxima} を使って入力することができます。@c +しかしながら、これは古代音楽表記でのみサポートされます。@c +詳細は @ref{Ancient notation} を参照してください。 + +@cindex duration, default (デフォルトの演奏時間) +@cindex default note duration (デフォルトの音符演奏時間) +@cindex note duration, default (デフォルトの音符演奏時間) + +演奏時間を省略した場合、前に入力された演奏時間にセットされます。@c +最初の音符のデフォルト値は 4 分音符です。 + +@lilypond[quote,verbatim,relative=2] +a a a2 a a4 a a1 a +@end lilypond + +@cindex notes, dotted (付点音符) +@cindex dotted notes (付点音符) +@cindex notes, double-dotted (2 重付点音符) +@cindex double-dotted notes (2 重付点音符) + +@funindex . + +付点音符の演奏時間を得るには、演奏時間の後にドット (@code{.}) を置きます。@c +2 重付点音符は 2 つのドットを置き、3 重付点音符は 3 つのドットなどとなります。 + +@lilypond[quote,verbatim,relative=2] +a4 b c4. b8 a4. b4.. c8. +@end lilypond + +演奏時間の中には 2の倍数の演奏時間とドットだけでは表せないものもあります。@c +それらを表すには 2 つかそれ以上の音符をタイでつなげるしかありません。@c +詳細は @ref{タイ} を参照してください。 + +歌詞の音節に対して演奏時間を指定する方法、歌詞を音符に揃える方法については +@ref{Vocal music} を参照してください。 + +オプションとして、音符を音符の演奏時間に厳密に比例させた間隔で@c +配置することができます。@c +このオプションとプロポーショナル表記を制御するその他の設定についての@c +詳細は @ref{Proportional notation} を参照してください。 + +@funindex \dotsUp +@funindex dotsUp +@funindex \dotsDown +@funindex dotsDown +@funindex \dotsNeutral +@funindex dotsNeutral + +通常、多声でない限り、ドットは譜線を避けるために上に移動させられます。@c +ある特定のドットの移動方向を手動で指定するための定義済みコマンドがあります +-- 詳細は @ref{Direction and placement} を参照してください。 + + +@predefined +@code{\autoBeamOn}, +@code{\autoBeamOff}, +@code{\dotsUp}, +@code{\dotsDown}, +@code{\dotsNeutral} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-number-of-augmentation-dots-per-note.ly} + + +@seealso +音楽用語集: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}, +@rglos{note value}, +@rglos{Duration names notes and rests} + +記譜法リファレンス: +@ref{自動連桁}, +@ref{タイ}, +@ref{リズムを記述する}, +@ref{休符を記述する}, +@ref{Vocal music}, +@ref{Ancient notation}, +@ref{Proportional notation} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{Dots}, +@rinternals{DotColumn} + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +休符の演奏時間には基本的に限界がありません (最大値としても、最小値としても)。@c +しかしながら、図柄の数には限界があります: +128 分から全音符の 8 倍までの休符を譜刻することができます。 + + +@node 連符 +@unnumberedsubsubsec 連符 +@translationof Tuplets + +@cindex tuplets (連符) +@cindex triplets (3 連符) + +@funindex \times +@funindex times + +連符はその連符内のすべての音符の演奏時間に分数を掛け合わせる音楽表記によって@c +作られます: + +@example +\times @var{fraction} @{ @var{music} @} +@end example + +@noindent +@code{@var{music}} の演奏時間には分数 @code{@var{fraction}} が掛け合わされます。@c +分数の分母が音符の上または下に譜刻され、オプションで囲みが付きます。@c +最も一般的な連符は 3 連符であり、3 連符では 3 つの音符が音符 2 つ分の@c +演奏時間を持ちます。@c +そのため、3 連符で指定する分数は 2/3 です。 + +@lilypond[quote,verbatim,relative=2] +a2 \times 2/3 { b4 b b } +c4 c \times 2/3 { b4 a g } +@end lilypond + +@cindex tuplet bracket placement (連符囲みの配置) + +@funindex \tupletUp +@funindex tupletUp +@funindex \tupletDown +@funindex tupletDown +@funindex \tupletNeutral +@funindex tupletNeutral + +連符囲みは手動で譜の上または下に配置することができます +-- @ref{Direction and placement} を参照してください。 + +連符はネストすることができます: + +@lilypond[quote,verbatim,relative=2] +\autoBeamOff +c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 +@end lilypond + +ネストされた連符の演奏開始点が同時である場合に、それらの連符を変更するには +@code{\tweak} を使う必要があります。 + +連符囲みを譜刻せずに音符の演奏時間を変更する方法は +@ref{演奏時間を変更する} を参照してください。 + + +@predefined +@code{\tupletUp}, +@code{\tupletDown}, +@code{\tupletNeutral}. +@endpredefined + + +@snippets + +@cindex tuplet formatting (連符のフォーマット) +@cindex triplet formatting (3 連符のフォーマット) + +@funindex tupletNumberFormatFunction +@funindex tupletSpannerDuration + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{entering-several-tuplets-using-only-one--times-command.ly} + +@cindex Tuplet number changes (連符の数の変更) + +@funindex TupletNumber + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-tuplet-number.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{non-default-tuplet-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-tuplet-bracket-visibility.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{permitting-line-breaks-within-beamed-tuplets.ly} + + +@seealso +音楽用語集: +@rglos{triplet}, +@rglos{tuplet}, +@rglos{polymetric} + +学習マニュアル: +@rlearning{調整手段} + +記譜法リファレンス: +@ref{時間管理}, +@ref{演奏時間を変更する}, +@ref{The tweak command}, +@ref{複合拍子記譜法} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{TupletBracket}, +@rinternals{TupletNumber}, +@rinternals{TimeScaledMusic}. + + +@cindex grace notes within tuplet brackets (連符囲み内の装飾小音符) + +@knownissues +譜の先頭に装飾小音符とそれに続く連符を配置する場合でない限り、@c +装飾を連符囲みの中に配置することができます。@c +この特殊な場合では、エラーを避けるためにその装飾小音符を +@code{\times} コマンドの前に置かなければなりません。 + +@cindex tempo marks within tuplet brackets (連符囲み内でのテンポ記号) + +@code{\tempo} コマンドを持つ楽曲の先頭で連符を使う場合、@c +@rlearning{音楽を保持するボイス} で説明されているように@c +その音楽を明示的に @code{\new Voice} ブロックの中に入れる必要があります。 + + +@node 演奏時間を変更する +@unnumberedsubsubsec 演奏時間を変更する +@translationof Scaling durations + +@cindex scaling durations (演奏時間を伸縮する) +@cindex durations, scaling (演奏時間を伸縮する) + +@code{*N/M} (または、@code{M} が 1 の場合は @code{*N}) を演奏時間の後に@c +付け加えることによって、単一の音符、休符、和音の演奏時間を分数 @code{N/M} 倍 +に変更することができます。@c +これは作り出される音符や休符の見た目には影響を与えませんが、@c +変更された演奏時間は小節の中での位置を算出するためと、@c +MIDI 出力での演奏時間を決定するために使用されます。@c +掛け合わせる要素は @code{*L*M/N} などのように組み合わせることができます。 + +以下の例では、最初の 3 つの音符で 2 拍ですが、連符囲みは譜刻されていません。 + +@c KEEP LY +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% 演奏時間を変更して 3 連符にします +a4*2/3 gis4*2/3 a4*2/3 +% 通常の演奏時間 +a4 a4 +% 和音の演奏時間を 2 倍にします +4*2 +% 演奏時間は 4 分音符ですが、見た目は 16 分音符です +b16*4 c4 +@end lilypond + +空白音符の演奏時間も掛け算によって変更できます。@c +これは @code{s1*23} のように多くの小節をスキップする場合に役に立ちます。 + +@cindex compressing music (音楽を圧縮する) +@cindex expanding music (音楽を伸長する) + +@funindex \scaleDurations +@funindex scaleDurations + +同様の方法で分数を使うことで、長く伸びた音楽を圧縮することができます。@c +それによりそれぞれの音符、和音、休符には@c +分数が掛け合わせられたかのようになります。@c +これは楽譜要素の見た目をそのままにして、要素の内部演奏時間に@c +@emph{分子}/@emph{分母}を掛け合わせます。@c +ドットの両側にはスペースが必要です。@c +ここで、音楽がどのように圧縮され、伸張されるかを示す例を挙げます: + +@c KEEP LY +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% 通常の演奏時間 +4 c8 a +% 2/3 を掛けます +\scaleDurations #'(2 . 3) { + 4. c8 a f +} +% 2 を掛けます +\scaleDurations #'(2 . 1) { + 4 c8 b +} +@end lilypond + +このコマンドの応用例の 1 つは複合拍子表記での使用です。@c +@ref{複合拍子記譜法} を参照してください。 + + +@seealso +記譜法リファレンス: +@ref{連符}, +@ref{不可視の休符}, +@ref{複合拍子記譜法} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + + +@node タイ +@unnumberedsubsubsec タイ +@translationof Ties + +@cindex tie (タイ) + +@funindex ~ + +タイは同じピッチの隣り合う符頭を結び付けます。@c +タイは音符の演奏時間を伸張する効果があります。 + +@warning{タイを音楽的なフレーズを表す @emph{スラー} や +@emph{フレージング スラー} と混同しないでください。@c +タイは音符の演奏時間を伸ばす働きを持ち、音価を増やすドットに似ています。} + +タイはチルド記号 @code{~} を使って入力します: + +@lilypond[quote,verbatim,relative=2] +a2 ~ a +@end lilypond + +タイは、音符が小節線をまたがる場合か、リズムを表すためにドットを@c +使うことができない場合に使用されます。@c +さらに、以下の例のように音価が小節の区画をまたがる場合にも使用されます +(訳者補足: 4/4 拍子では 1 小節は 1/4, 1/4, 1/4, 1/4 の区画に分けられます。@c +下の例の第 2 小節では半音符が区画をまたがっているので良くない書き方であり、@c +第 1 小節のように書くべきです。): + +@c KEEP LY +@lilypond[verbatim,quote] +\relative c' { + r8 c8 ~ c2 r4 | + r8^"こうすべきではありません" c2 ~ c8 r4 +} +@end lilypond + +小節線をまたいで多くの音符をタイで結び付ける必要がある場合、@c +自動音符分割を使用したほうが簡単かもしれません +-- @ref{自動音符分割} を参照してください。@c +これは長い音符を自動的に分割して、小節線をまたがる音符をタイで結び付けます。 + +@cindex ties and chords (タイと和音) +@cindex chords and ties (和音とタイ) + +タイを和音に適用する場合、ピッチが一致する符頭すべてが結ばれます。@c +一致する符頭が無い場合、タイは作成されません。@c +和音の内部にタイを置くことによって、和音の一部だけをタイで結ぶことができます。 + +@lilypond[quote,verbatim,relative=1] + ~ + +@end lilypond + +@cindex repeating ties (タイを含む繰り返し) +@cindex ties, repeating (タイを含む繰り返し) +@cindex volta brackets and ties (volta 囲みとタイ) +@cindex ties and volta brackets (タイと volta 囲み) + +@funindex \repeatTie +@funindex repeatTie + +繰り返しの 2 回目の差し替え部分はタイで結ばれた音符で始まっています。@c +そのような繰り返し部分でのタイは以下のように指定する必要があります: + +@c KEEP LY +@lilypond[quote,relative=2,verbatim] +\repeat volta 2 { c g 2 ~ } +\alternative { + % 1 番目の差し替え部分: 後に続く音符は通常通りタイで結ばれます + { 2. r4 } + % 2 番目の差し替え部分: 後に続く音符にはリピート用のタイを付けます + { 2\repeatTie d4 c } } +@end lilypond + +@cindex laissez vibrer (レセ ヴィブレ) +@cindex ties, laissez vibrer (レセ ヴィブレのタイ) + +@funindex \laissezVibrer +@funindex laissezVibrer + +@notation{L.v.}@: タイ (@notation{レセ ヴィブレ: laissez vibrer}) は@c +音符を終端で途切れさせないということを示します。@c +ピアノ、ハープ、他の弦楽器、それに打楽器のための楽譜で使用されます。@c +L.v. タイは以下のように入力します: + +@lilypond[quote,verbatim,relative=1] +1\laissezVibrer +@end lilypond + +@cindex ties, placement (タイの配置) + +@funindex \tieUp +@funindex tieUp +@funindex \tieDown +@funindex tieDown +@funindex \tieNeutral +@funindex tieNeutral + +タイを手動で譜の上または下に配置することができます。 +@ref{Direction and placement} を参照してください。 + +@cindex ties, appearance (タイの見た目) +@cindex ties, dotted (点線のタイ) +@cindex ties, dashed (破線のタイ) +@cindex dashed ties (破線のタイ) +@cindex dotted ties (点線のタイ) + +@funindex \tieDotted +@funindex tieDotted +@funindex \tieDashed +@funindex tieDashed +@funindex \tieSolid +@funindex tieSolid + +タイを破線、点線、実線と破線の組み合わせにすることができます。 + +@lilypond[quote, verbatim, relative=1] +\tieDotted +c2 ~ c +\tieDashed +c2 ~ c +\tieHalfDashed +c2 ~ c +\tieHalfSolid +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +破線パターンのカスタマイズを指定することができます: + +@lilypond[quote, verbatim, relative=1] +\tieDashPattern #0.3 #0.75 +c2 ~ c +\tieDashPattern #0.7 #1.5 +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +タイの破線パターン定義の構造は、スラーの破線パターン定義と同じです。@c +複雑な破線パターンについての更なる情報は @ref{Slurs} にある@c +コード断片集を参照してください。 + +@predefined +@code{\tieUp}, +@code{\tieDown}, +@code{\tieNeutral}, +@code{\tieDotted}, +@code{\tieDashed}, +@code{\tieDashPattern}, +@code{\tieHalfDashed}, +@code{\tieHalfSolid}, +@code{\tieSolid} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-ties-with-arpeggios.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{engraving-ties-manually.ly} + + +@seealso +音楽用語集: +@rglos{tie}, +@rglos{laissez vibrer} + +記譜法リファレンス: +@ref{Slurs}, +@ref{自動音符分割} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{LaissezVibrerTie}, +@rinternals{LaissezVibrerTieColumn}, +@rinternals{TieColumn}, +@rinternals{Tie} + + +@knownissues + +タイがアクティブなときに譜を切り換えても斜めのタイは作られません。 + +タイの最中に音部記号やオクターブを変更することはきちんと定義されていません。@c +そのような場合には、スラーを用いる方が好ましいです。 + + +@node 休符を記述する +@subsection 休符を記述する +@translationof Writing rests + +休符は音楽表記の中の音楽の一部として入力されます。 + +@menu +* 休符:: +* 不可視の休符:: +* 小節単位の休符:: +@end menu + + +@node 休符 +@unnumberedsubsubsec 休符 +@translationof Rests + +@cindex rest (休符) +@cindex rest, entering durations (休符の演奏時間を入力する) +@cindex maxima rest (八全休符) +@cindex longa rest (四全休符) +@cindex breve rest (二全休符) + +@funindex \rest +@funindex rest +@funindex r +@funindex \maxima +@funindex maxima +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve + +休符は音符名 @code{r} を持つ音符として入力されます。@c +全休符よりも長い演奏時間を持つ休符には以下に示す定義済みコマンドを使用します: + +@c \time 16/1 is used to avoid spurious bar lines +@c and long tracts of empty measures +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +\new Staff { + % この 2 本線には意味はありません + \time 16/1 + \override Staff.TimeSignature #'stencil = ##f + % 八全休符を譜刻します。二全休符 4 つと等価です + r\maxima + % 四全休符を譜刻します。二全休符 2 つと等価です + r\longa + % 二全休符を譜刻します。 + r\breve + r1 r2 r4 r8 r16 r32 r64 r128 +} +@end lilypond + +@cindex rest, multi-measure (複数小節の休符) +@cindex rest, whole-measure (全休符) + +全休符 -- 小節の中心に置かれます -- は複数小節の休符として@c +入力する必要があります。@c +複数小節の休符は多くの小節に対してと同様に単一の小節に対しても@c +使用することができます。@c +詳細は @ref{小節単位の休符} を参照してください。 + +@cindex rest, specifying vertical position (休符の垂直方向の位置を指定する) + +休符の垂直方向の位置を明示的に指定するには、音符の後に続けて @code{\rest} +を記述します。@c +その音符が譜上で占める位置に、その音符の演奏時間を持つ休符が配置されます。@c +これは多声部音楽を手動で精密にフォーマットすることを考慮したものです。@c +なぜなら、自動休符フォーマットでは多声部音楽の休符の衝突を回避できないからです。 + +@lilypond[quote,verbatim,relative=2] +a4\rest d4\rest +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{rest-styles.ly} + + +@seealso +音楽用語集: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima} + +記譜法リファレンス: +@ref{小節単位の休符} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{Rest} + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +休符の演奏時間には基本的に限界がありません (最大値としても、最小値としても)。@c +しかしながら、図柄の数には限界があります: 128 分から全音符の 8 倍までの@c +休符を譜刻することができます。 + + +@node 不可視の休符 +@unnumberedsubsubsec 不可視の休符 +@translationof Invisible rests + +@cindex skip (スキップ) +@cindex invisible rest (不可視の休符) +@cindex rest, invisible (不可視の休符) +@cindex spacer note (空白音符) +@cindex spacer rest (空白休符) + +@funindex s +@funindex \skip +@funindex skip + +不可視の休符 (@q{空白休符} とも呼ばれます) は音符名@tie{}@code{s} を@c +持つ音符として入力することができます: + +@lilypond[verbatim,quote,relative=2] +c4 c s c +s2 c +@end lilypond + +@cindex lyrics, skip (歌詞をスキップする) + +空白休符は音符モードと和音モードでのみ利用可能です。@c +他のモードでは、例えば歌詞を入力している場合、音楽モーメントをスキップするには +@code{\skip} を使用します。@c +@code{\skip} は明示的な演奏時間を必要としますが、@c +@code{\addlyrics} や @code{\lyricsto} を使っていて、@c +歌詞が関係するメロディーの音符から演奏時間を得ている場合は無視されます。 + +@lilypond[quote,verbatim,relative=2] +<< + { + a2 \skip2 a2 a2 + } + \new Lyrics { + \lyricmode { + foo2 \skip 1 bla2 + } + } +>> +@end lilypond + +@code{\skip} はコマンドであるため、@c +@code{s} とは異なり後に続く音符のデフォルト演奏時間には影響を与えません。 + +@lilypond[quote,verbatim,relative=2] +<< + { + \repeat unfold 8 { a4 } + } + { + a4 \skip 2 a | + s2 a + } +>> +@end lilypond + + +空白休符は、音符や休符と同様に、@code{Staff} や @code{Voice} が@c +存在しない場合に、それらを暗黙的に作成します: + +@lilypond[quote,verbatim,fragment] +s1 s s +@end lilypond + +@code{\skip} はただ音楽的な時間をスキップするだけです。@c +これはいかなる種類の出力も作成しません。 + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +% これは有効な入力ですが、何もしません +\skip 1 \skip1 \skip 1 +@end lilypond + + +@seealso +学習マニュアル: +@rlearning{オブジェクトの可視性と色} + +記譜法リファレンス: +@ref{Hidden notes}, +@ref{Visibility of objects} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{SkipMusic} + + +@node 小節単位の休符 +@unnumberedsubsubsec 小節単位の休符 +@translationof Full measure rests + +@cindex multi-measure rests (複数の小節にまたがる休符) +@cindex full-measure rests (小節単位の休符) +@cindex rest, multi-measure (複数の小節にまたがる休符) +@cindex rest, full-measure (小節単位の休符) +@cindex whole rest for a full measure (小節に対する全休符) +@cindex rest, whole for a full measure (小節に対する全休符) + +@funindex R + +1 つまたは複数の小節に対する休符は@c +音符名として大文字の @code{R} を持つ音符として入力します: + +@lilypond[quote,verbatim,relative=2] +% 休みの小節は 1 つの小節にまとめられます +\compressFullBarRests +R1*4 +R1*24 +R1*4 +b2^"Tutti" b4 a4 +@end lilypond + +小節単位の休符の演奏時間は、音符に対する演奏時間と同じ表記を使います。@c +複数小節にまたがる休符の演奏時間は常に小節の長さの整数倍になります。@c +そのため、しばしばドットや分数を使う必要があります: + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 2/4 +R1 | R2 | +\time 3/4 +R2. | R2.*2 | +\time 13/8 +R1*13/8 | R1*13/8*12 | +\time 10/8 +R4*5*4 | +@end lilypond + +1 小節分の休符は、拍子次第で全休符または二全休符のどちらかとして、@c +小節の中央に譜刻されます。 + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +R1 | +\time 6/4 +R1*3/2 | +\time 8/4 +R1*2 | +@end lilypond + +@cindex multi-measure rest, expanding (複数小節にまたがる休符を展開する) +@cindex multi-measure rest, contracting (複数小節にまたがる休符をまとめる) + +@funindex \expandFullBarRests +@funindex expandFullBarRests +@funindex \compressFullBarRests +@funindex compressFullBarRests + +デフォルトでは、複数小節にまたがる休符は@c +休みの小節すべてを明示的に示すように譜刻される楽譜に展開されます。@c +そうする代わりに、複数小節にまたがる休符を複数小節の休符記号を持つ単一の@c +小節として譜刻することもできます -- 休みの小節数がその小節の上に譜刻されます。 + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +% デフォルトの振る舞い +\time 3/4 r2. | R2.*2 | +\time 2/4 R2 | +\time 4/4 +% 休みの小節を 1 つの小節にまとめます +\compressFullBarRests +r1 | R1*17 | R1*4 | +% 休みの小節を展開します +\expandFullBarRests +\time 3/4 +R2.*2 | +@end lilypond + + +@cindex text on multi-measure rest (複数小節にまたがる休符上のテキスト) +@cindex multi-measure rest, attaching text (複数小節にまたがる休符にテキストを付ける) +@cindex script on multi-measure rest (複数小節にまたがる休符上のスクリプト) +@cindex multi-measure rest, script (複数小節にまたがる休符上のスクリプト) +@cindex fermata on multi-measure rest (複数小節にまたがる休符上のフェルマータ) +@cindex multi-measure rest, attaching fermata (複数小節にまたがる休符にフェルマータを付ける) +@cindex markup on multi-measure rest (複数小節にまたがる休符上のマークアップ) +@cindex multi-measure rest with markup (マークアップを持つ複数小節にまたがる休符) + +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex MultiMeasureRestText + +マークアップを複数小節にまたがる休符に付け加えることができます。@c +フェルマータを付け加えるための定義済みコマンドとして +@code{\fermataMarkup} が提供されています。 + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 3/4 +R2.*10^\markup { \italic "ad lib." } +R2.^\fermataMarkup +@end lilypond + +@warning{ +複数小節にまたがる休符に付け加えられるマークアップはタイプ +@code{MultiMeasureRestText} のオブジェクトであり、@c +@code{TextScript} ではありません。@c +オーバライドは正しいオブジェクトに対して行わなければなりません。@c +さもないと無視されます。@c +以下の例を見てください。 +} + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +% この例は誤ったオブジェクト名を指定しているため失敗します +\override TextScript #'padding = #5 +R1^"wrong" +% この例は正しいオブジェクト名が指定されています +\override MultiMeasureRestText #'padding = #5 +R1^"right" +@end lilypond + +複数小節にまたがる休符が @code{\partial} 設定の直後にある場合、@c +小節チェックの警告が表示されないかもしれません。 + + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLenthOff +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex \compressFullBarRests +@funindex compressFullBarRests +@funindex \expandFullBarRests +@funindex expandFullBarRests + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}, +@code{\fermataMarkup}, +@code{\compressFullBarRests}, +@code{\expandFullBarRests} +@endpredefined + + +@snippets + +@c 未訳 +@cindex church rest +@cindex rest, church +@cindex kirchenpausen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-form-of-multi-measure-rests.ly} + +@cindex multi-measure rests, positioning +@cindex positioning multi-measure rests + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{positioning-multi-measure-rests.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{multi-measure-rest-markup.ly} + + +@seealso +音楽用語集: +@rglos{multi-measure rest} + +記譜法リファレンス: +@ref{演奏時間}, +@ref{Text}, +@ref{Formatting text}, +@ref{Text scripts} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{MultiMeasureRest}, +@rinternals{MultiMeasureRestNumber}, +@rinternals{MultiMeasureRestText} + + +@cindex fingerings and multi-measure rests (運指記号と複数小節にまたがる休符) +@cindex multi-measure rests and fingerings (運指記号と複数小節にまたがる休符) + +@knownissues +複数小節にまたがる休符の上に運指記号を配置すると (例えば、@code{R1*10-4})、@c +運指の数字が休みの小節数と衝突する可能性があります。 + +@cindex condensing rests (休符をまとめる) +@cindex rest, condensing ordinary (通常の休符をまとめる) + +複数の通常の休符を自動的に単一の複数小節休符にまとめる方法はありません。 + +@cindex rest, collisions of (休符の衝突) + +複数小節にまたがる休符が休符の衝突を引き起こすことはありません。 + + +@node リズムを表示する +@subsection リズムを表示する +@translationof Displaying rhythms + +@menu +* 拍子:: +* メトロノーム記号:: +* 上拍:: +* 無韻律の音楽:: +* 複合拍子記譜法:: +* 自動音符分割:: +* 旋律のリズムを示す:: +@end menu + +@node 拍子 +@unnumberedsubsubsec 拍子 +@translationof Time signature + +@cindex time signature (拍子) +@cindex meter (拍) + +@funindex \time +@funindex time + +拍子は以下のようにセットします: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c2 +\time 3/4 c2. +@end lilypond + +@cindex time signature, visibility of (拍子の可視性) + +拍子は楽曲の始まりと拍子が変更されたときに譜刻されます。@c +行の終わりで変更が起こる場合、警告の拍子が行の終わりに譜刻されます。@c +デフォルトの振る舞いを変更することができます。@c +@ref{Visibility of objects} を参照してください。 + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c2 c +\break +c c +\break +\time 4/4 +c c c c +@end lilypond + +@cindex time signature style (拍子スタイル) +@cindex meter style (拍スタイル) + +@funindex \numericTimeSignature +@funindex numericTimeSignature +@funindex \defaultTimeSignature +@funindex defaultTimeSignature + +2/2 や 4/4 で使用される拍子は数字を使用するスタイルに変更することができます: + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +% デフォルトのスタイル +\time 4/4 c1 +\time 2/2 c1 +% 数字を使うスタイルに変更します +\numericTimeSignature +\time 4/4 c1 +\time 2/2 c1 +% デフォルトのスタイルに戻します +\defaultTimeSignature +\time 4/4 c1 +\time 2/2 c1 +@end lilypond + + +定量拍子については @ref{Mensural time signatures} でカバーされています。 + +@cindex time signature default settings (拍子のデフォルト設定) +@cindex autobeaming properties for time signatures (拍子のための自動連桁プロパティ) +@cindex beaming, time signature default properties (連桁と拍子のデフォルト プロパティ) +@funindex \overrideTimeSignatureSettings + + +@predefined +@code{\numericTimeSignature}, +@code{\defaultTimeSignature} +@endpredefined + +譜刻される拍子を設定することに加えて、@c +@code{\time} コマンドは拍子に基づくプロパティ +@code{baseMoment}, @code{beatStructure}, それに @code{beamExceptions} +のデフォルト値も設定します。@c +これらのプロパティにあらかじめ定義されているデフォルト値は +@file{scm/time-signature-settings.scm} で見つかります。@c +既存のデフォルト値を変更したり、新しいデフォルト値を変更したりすることができます: + +@lilypond[quote,verbatim] +\score { + \new Staff { + \relative c' { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + } + } +} +@end lilypond + +@code{\overrideTimeSignatureSettings} は 4 つの引数をとります: + +@enumerate + +@item +@code{@var{timeSignatureFraction}}, 拍子を示す Scheme ペア。 + +@item +@code{@var{baseMomentFraction}}, 拍子の基本タイミングの単位となる@c +分子と分母を保持する Scheme ペア。 + +@item +@code{@var{beatStructure}}, 小節の拍構造を示す Scheme リスト。@c +基本タイミングを単位とします。 + +@item +@code{@var{beamExceptions}}, 指定された拍子でそれぞれの拍で終了しない@c +連桁のルールを保持する配列リスト。@c +@ref{自動連桁の振る舞いを設定する} に説明があります。 +@end enumerate + +@code{\overrideTimeSignatureSettings} を保持するコンテキストは、@c +その @code{\overrideTimeSignatureSettings} 呼び出しが実行される前に@c +インスタンス化されている必要があります。@c +このことは、そのようなコンテキストは明示的にインスタンス化するか、@c +そのコンテキスト内で @code{\overrideTimeSignatureSettings} の前に@c +音楽を置いておく必要があるということを意味します: + +@c KEEP LY +@lilypond[quote,verbatim] +\score { + \relative c' { + % コンテキストがまだインスタンス化されていないため、この呼び出しは失敗します + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (2 2)"} + \repeat unfold 7 { c8 } | + % この呼び出しは成功します + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (3 1)"} + \repeat unfold 7 { c8 } | + } +} +@end lilypond + +@cindex time signature properties, restoring default values (拍子プロパティをデフォルト値に戻す) +@cindex restoring default properties for time signatures (拍子をデフォルト プロパティに戻す) +@funindex \revertTimeSignatureSettings + +デフォルトの拍子プロパティ値の変更を元の値に戻すことができます: + +@lilypond[quote,verbatim] +\score{ + \relative c' { + \repeat unfold 8 { c8 } | + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + \revertTimeSignatureSettings #'(4 . 4) + \time 4/4 + \repeat unfold 8 { c8 } | + } +} +@end lilypond + +@code{Timing_translator} と @code{Default_bar_line_engraver} を@c +@code{Score} コンテキストから @code{Staff} コンテキストに移動させることにより、@c +異なる譜に対して異なる値のデフォルト拍子プロパティを割り当てることができます。 + +@lilypond[quote, verbatim] +\score { + \new StaffGroup << + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(1 3) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + >> + \layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } + } +} +@end lilypond + +@predefined +@code{\numericTimeSignature}, +@code{\defaultTimeSignature} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-time-signature-without-affecting-the-beaming.ly} + +@cindex compound time signatures +@cindex time signature, compound + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly} + + +@seealso +音楽用語集: +@rglos{time signature} + +記譜法リファレンス: +@ref{Mensural time signatures}, +@ref{時間管理} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{TimeSignature}, +@rinternals{Timing_translator} + + +@node メトロノーム記号 +@unnumberedsubsubsec メトロノーム記号 +@translationof Metronome marks + +@cindex tempo (テンポ) +@cindex beats per minute (1 分毎の拍数) +@cindex metronome mark (メトロノーム記号) +@cindex metronome marking with text (テキストを持つメトロノーム記号) + +@funindex \tempo +@funindex tempo + +基本的なメトロノーム記号は単純に以下のように記述します: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 120 +c2 d +e4. d8 c2 +@end lilypond + +メトロノーム記号を 2 つの数の範囲として譜刻することもできます: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 40 ~ 46 +c4. e8 a4 g +b,2 d4 r +@end lilypond + +テキストを持つテンポ指示にすこともできます: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +c4 e d c +b4. a16 b c4 r4 +@end lilypond + +メトロノーム記号とテキストを組み合わせると、@c +メトロノーム記号は自動的に括弧で囲まれます: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegro" 4 = 160 +g4 c d e +d4 b g2 +@end lilypond + +一般に、テキストを任意のマークアップ オブジェクトにすることができます: + +@lilypond[verbatim,quote,relative=2] +\tempo \markup { \italic Faster } 4 = 132 +a8-. r8 b-. r gis-. r a-. r +@end lilypond + +テキストを伴わないメトロノーム記号を括弧で囲むには、@c +空の文字列を含めて記述します: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-tempo-without-a-metronome-mark.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-metronome-marks-in-markup-mode.ly} + +詳細は @ref{Formatting text} を参照してください。 + + +@seealso +音楽用語集: +@rglos{metronome}, +@rglos{metronomic indication}, +@rglos{tempo indication}, +@rglos{metronome mark} + +記譜法リファレンス: +@ref{Formatting text}, +@ref{MIDI output} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{MetronomeMark} + + +@node 上拍 +@unnumberedsubsubsec 上拍 +@translationof Upbeats + +@cindex anacrusis (弱拍) +@cindex upbeat (上拍) +@cindex partial measure (部分小節) +@cindex measure, partial (部分小節) +@cindex pickup measure (ピックアップ小節) +@cindex measure, change length (小節の長さの変更) + +@funindex measurePosition +@funindex \partial +@funindex partial + +弱拍や上拍などのような部分小節またはピックアップ小節は、@c +@code{\partial} コマンドを使って入力します。@c +以下の構文を使用します: + +@example +\partial @var{duration} +@end example + +@noindent +@code{duration} は、最初の完全な長さを持つ小節の前に置かれる小節の長さです: + +@lilypond[quote,verbatim,relative=2] +\partial 4 e4 | +a2. c,4 | +@end lilypond + +部分小節は、完全な長さを持つ小節よりも短い演奏時間なら、@c +どのような長さでも持つことができます: + +@lilypond[quote,verbatim,relative=2] +\partial 4 e4 | +a2. c,4 | +@end lilypond + +部分小節は 1 小節よりも短い任意の演奏時間にすることができます: + +@lilypond[quote,verbatim,relative=2] +\partial 8*3 c8 d e | +a2. c,4 | +@end lilypond + +内部的には、@code{\partial @var{duration}} は以下のように翻訳されます: + +@example +\set Timing.measurePosition -@var{duration} +@end example + +例えば、@code{\partial 8*3} は以下のようになります: + +@example +\set Timing.measurePosition = #(ly:make-moment -3 8) +@end example + +プロパティ @code{measurePosition} は、@c +ある時点でその小節はどれくらい演奏済みになっているかを示す有理数を保持します。@c +このプロパティは @code{\partial} によって負の数にセットされるということに@c +注意してください: +すなわち、@code{\partial 4} は内部的に @code{-4} に翻訳され、@c +@qq{その小節には 4 分音符が残っている} という意味になります。 + + +@seealso +音楽用語集: +@rglos{anacrusis} + +記譜法リファレンス: +@ref{装飾小音符} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{Timing_translator} + + +@knownissues + +@code{\partial} コマンドは楽曲の開始時で使用されることだけを@c +意図したものです。@c +楽曲の途中でこのコマンドを使用した場合、@c +奇妙な警告がいくつか発生するかもしれません。@c +曲の途中では @code{\set Timing.measurePosition} を使用してください。 + +@node 無韻律の音楽 +@unnumberedsubsubsec 無韻律の音楽 +@translationof Unmetered music + +@cindex bar lines, turning off (小節線を付けない) +@cindex bar numbering, turning off (小節の付番を off にする) +@cindex cadenza (カデンツァ) +@cindex unmetered music (無韻律の音楽) + +@funindex \cadenzaOn +@funindex cadenzaOn +@funindex \cadenzaOff +@funindex cadenzaOff + +小節線と小節番号は自動的に算出されます。@c +無韻律の音楽 (例えば、カデンツァの一部) では、この機能は望ましくありません。@c +小節線と小節番号の自動算出を off にするには@c +コマンド @code{\cadenzaOn} を使用し、@c +再び on にするには @code{\cadenzaOff} を使用します。 + +@lilypond[verbatim,relative=2,quote] +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +小節の付番は、カデンツァが存在しないかのように、@c +カデンツァの終了点で再開されます: + +@lilypond[verbatim,relative=2,quote] +% すべての小節番号を表示します +\override Score.BarNumber #'break-visibility = #all-visible +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +@cindex beaming in cadenzas (カデンツァでの連桁) +@cindex beaming in unmetered music (無韻律の音楽での連桁) +@cindex cadenza, beaming in (カデンツァでの連桁) +@cindex unmetered music, beaming in (無韻律の音楽での連桁) + +自動連桁は @code{\cadenzaOn} で off になり、@c +@code{\cadenzaOff} で on になります。@c +このため、カデンツァ内の連桁はすべて手動で入力する必要があります +(@ref{手動連桁})。 + +@lilypond[verbatim,relative=2,quote] +\repeat unfold 8 { c8 } +\cadenzaOn +\repeat unfold 5 { c8 } +\bar"|" +\cadenzaOff +\repeat unfold 8 { c8 } +@end lilypond + +これらの定義済みコマンドは、@c +たとえ @code{Voice} コンテキストの 1 つの中に配置したとしても、@c +楽譜のすべての譜に影響を与えるということに注意してください。@c +これを変更するには、@ref{複合拍子記譜法} で示されているように、@c +@code{Timing_translator} を @code{Score} コンテキストから +@code{Staff} コンテキストに移動させます。 + +@predefined +@code{\cadenzaOn}, +@code{\cadenzaOff} +@endpredefined + + +@seealso +音楽用語集: +@rglos{cadenza} + +記譜法リファレンス: +@ref{Visibility of objects} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + + +@cindex cadenza line breaks (カデンツァでの改行) +@cindex cadenza page breaks (カデンツァでの改ページ) +@cindex unmetered music, line breaks (無韻律の音楽での改行) +@cindex unmetered music, page breaks (無韻律の音楽での改ページ) +@cindex breaks in unmetered music (無韻律の音楽での改行、改ページ) +@cindex line breaks in cadenzas (カデンツァでの改行) +@cindex page breaks in cadenzas (カデンツァでの改ページ) +@cindex line breaks in unmetered music (無韻律の音楽での改行) +@cindex page breaks in unmetered music (無韻律の音楽での改ページ) + +@knownissues + +LilyPond は改行と改ページを小節線の箇所にのみ挿入します。@c +無韻律の音楽が譜の行の終わりまでに終了しないのならば、@c +以下のように不可視の小節線を挿入して、@c +改行または改ページを起こすことができる場所であることを示す必要があります: + +@example +\bar "" +@end example + +@code{\cadenzaOn} で楽曲を始める場合、@c +@code{Voice} コンテキストを明示的に作成すべきです。@c +さもないと、奇妙なエラーが発生する可能性があります。 + +@example +\new Voice @{ + \relative c' @{ + \cadenzaOn + c16[^"Solo Free Time" d e f] g2. + \bar "||" + \cadenzaOff + @} +@} +@end example + + +@node 複合拍子記譜法 +@unnumberedsubsubsec 複合拍子記譜法 +@translationof Polymetric notation + +@c This section necessarily uses \set +@c This is acceptable -td + +@cindex double time signatures (2 重拍子) +@cindex signatures, polymetric (複合韻律) +@cindex time signatures, polymetric (複合拍子) +@cindex time signatures, double (2 重拍子) +@cindex polymetric signatures (複合韻律) +@cindex meter, polymetric (複合韻律拍) + +@funindex timeSignatureFraction +@funindex \scaleDurations +@funindex scaleDurations +@funindex \times +@funindex times + +複合拍子記譜法がサポートされます。@c +明示的な複合拍子と、拍子指定を変更して音符の演奏時間を@c +伸縮することによる複合拍子のどちらもです。 + + +@strong{@i{それぞれの譜は異なる拍子を持ち、小節の長さは等価である場合}} + +この記譜を作成するには、各譜に共通の拍子をセットし、@c +@code{timeSignatureFraction} に望みの分数をセットすることによって記号を@c +手動で置き換え、各譜の演奏時間を伸縮させて共通の拍子に合わせます +-- @ref{拍子} を参照してください。@c +演奏時間の伸縮は @code{\scaleDurations} で行います。@c +このコマンドの使用方法は @code{\times} と同じですが、連符囲みを@c +作成しません -- @ref{演奏時間を変更する} を参照してください。 + +@cindex beaming in polymetric music (複合拍子音楽での連桁) +@cindex beaming in polymetric meter (複合拍での連桁) + +この例では、3/4, 9/8 それに 10/8 の拍子を持つ音楽が並列に並べられています。@c +2 番目の譜では、演奏時間に 2/3 が掛けられ、それによって 2/3 * 9/8 = 3/4 と@c +なっています。@c +3 番目の譜では、演奏時間に 3/5 が掛けられ、それによって 3/5 * 10/8 = 3/4 と@c +なっています。@c +演奏時間の伸縮は自動連桁の規則に影響を与えるため、しばしば手動で連桁を@c +挿入することが必要になります。 + +@lilypond[quote,verbatim] +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \repeat unfold 6 { c8[ c c] } + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(10 . 8) + \scaleDurations #'(3 . 5) { + \repeat unfold 2 { c8[ c c] } + \repeat unfold 2 { c8[ c] } | + c4. c4. \times 2/3 { c8[ c c] } c4 + } + } +>> +@end lilypond + + +@strong{@i{それぞれの譜は異なる拍子を持ち、小節の長さは等価ではない場合}} + +@code{Timing_translator} と @code{Default_bar_line_engraver} を +@code{Staff} コンテキストに移すことによって、@c +それぞれの譜に独立した拍子を与えることができます。 + +@c KEEP LY +@lilypond[quote,verbatim] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +% 以上で、各譜はそれぞれに拍子を持つようになります + +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c4 c c | + } + \new Staff { + \time 2/4 + c4 c | + c4 c | + c4 c | + } + \new Staff { + \time 3/8 + c4. | + c8 c c | + c4. | + c8 c c | + } +>> +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + + +@seealso +音楽用語集: +@rglos{polymetric}, +@rglos{polymetric time signature}, +@rglos{meter} + +記譜法リファレンス: +@ref{拍子}, +@ref{演奏時間を変更する} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}, +@rinternals{Default_bar_line_engraver}, +@rinternals{Staff} + + +@knownissues + +異なる拍子を持つ譜が並列に並べられている場合、@c +同時に起こる音符の水平方向の位置は同じになります。@c +しかしながら、それぞれの譜の小節線により、@c +音符の間隔は通常の異なる拍子が無い場合よりも不規則になります。 + + +@node 自動音符分割 +@unnumberedsubsubsec 自動音符分割 +@translationof Automatic note splitting + +@cindex notes, splitting (音符を分割する) +@cindex splitting notes (音符を分割する) + +@funindex Note_heads_engraver +@funindex Completion_heads_engraver + +小節線をまたがる長い音符を自動的にタイで結ばれた音符に変換することができます。@c +これを行うには、@code{Note_heads_engraver} を +@code{Completion_heads_engraver} で置き換えます。@c +以下の例では、小節線をまたがる音符が分割され、タイで結ばれています。 + +@lilypond[quote,verbatim,relative=1] +\new Voice \with { + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" +} + +{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } +@end lilypond + +このエングラーバは進行中の音符をすべて小節線のところで分割して、@c +タイを挿入します。@c +このエングラーバの用途の 1 つに複雑な楽譜のデバッグがあります: +何小節かで音符がきちんと満たされていない場合、@c +このエングラーバで挿入されたタイが、それぞれの小節の狂いを示します。 + + +@seealso +音楽用語集: @rglos{tie} + +学習マニュアル: +@rlearning{エングラーバの説明}, +@rlearning{エングラーバを追加 / 削除する} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{Note_heads_engraver}, +@rinternals{Completion_heads_engraver}, +@rinternals{Forbid_line_break_engraver} + + +@knownissues + +すべての演奏時間を通常の音符と付点で正確に表すことはできません +(特に、連符を含んでいる場合) が、@c +@code{Completion_heads_engraver} が連符を挿入することはありません。 + +@code{Completion_heads_engraver} は音符にだけ作用します。@c +休符を分割することはありません。 + + +@node 旋律のリズムを示す +@unnumberedsubsubsec 旋律のリズムを示す +@translationof Showing melody rhythms + +@cindex melody rhythms, showing (旋律のリズムを示す) +@cindex rhythms, showing melody (旋律のリズムを示す) + +しばしば旋律のリズムだけを示したいことがあります。@c +これはリズム譜を使うことで達成できます。@c +そのような譜上にある音符のピッチはすべて破棄され、その譜自体は 1 本の@c +線を持ちます: + +@lilypond[quote,relative=1,verbatim] +<< + \new RhythmicStaff { + \new Voice = "myRhythm" { + \time 4/4 + c4 e8 f g2 + r4 g g f + g1 + } + } + \new Lyrics { + \lyricsto "myRhythm" { + This is my song + I like to sing + } + } +>> +@end lilypond + +@cindex guitar chord charts (ギター コード表) +@cindex strumming rhythms, showing (つま弾き (ストラム) のリズムを示す) +@cindex guitar strumming rhythms, showing (ギターのつま弾き (ストラム) のリズムを示す) + +@funindex Pitch_squash_engraver +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +ギター コード表はしばしばつま弾き (ストラム) のリズムを示します。@c +これは @code{Pitch_squash_engraver} と @code{\improvisationOn} を@c +使うことで達成できます。 + + +@lilypond[quote,verbatim] +<< + \new ChordNames { + \chordmode { + c1 f g c + } + } + \new Voice \with { + \consists Pitch_squash_engraver + } \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } +>> +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{guitar-strum-rhythms.ly} + + +@seealso +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{RhythmicStaff}, +@rinternals{Pitch_squash_engraver} + + +@node 連桁 +@subsection 連桁 +@translationof Beams + +@menu +* 自動連桁:: +* 自動連桁の振る舞いを設定する:: +* 手動連桁:: +* 羽状の連桁:: +@end menu + + +@node 自動連桁 +@unnumberedsubsubsec 自動連桁 +@translationof Automatic beams + +デフォルトでは、連桁は自動的に挿入されます: + +@cindex beams, manual (手動連桁) +@cindex manual beams (手動連桁) +@cindex beams, setting rules for (連桁の規則を設定する) +@cindex beams, custom rules for (連桁のためのカスタム規則) + +@funindex \autoBeamOn +@funindex autoBeamOn +@funindex \autoBeamOff +@funindex autoBeamOff + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c8 c c c +\time 6/8 c8 c c c8. c16 c8 +@end lilypond + +自動的に決定される連桁が満足いかないものである場合、@c +明示的に連桁を挿入することが可能です +-- @ref{手動連桁} を参照してください。@c +連桁を休符の上まで伸ばそうと意図しているのなら、@c +連桁を手動で挿入する @emph{必要があります}。 + +自動連桁を必要としない場合、@c +@code{\autoBeamOff} で off にすることができ、@c +@code{\autoBeamOn} で on にすることができます: + +@lilypond[quote,relative=1,verbatim] +c4 c8 c8. c16 c8. c16 c8 +\autoBeamOff +c4 c8 c8. c16 c8. +\autoBeamOn +c16 c8 +@end lilypond + +@cindex melismata, beams (メリスマと連桁) +@cindex beams and melismata (連桁とメリスマ) + +@warning{歌曲の中でメリスマを表すために連桁を使用する場合、 +@code{\autoBeamOff} で自動連桁を off にして、手動で連桁を示すべきです。} + +@warning{@code{@bs{}partcombine} を @code{@bs{}autoBeamOff} と一緒に@c +用いると予期しない結果になる可能性があります。@c +詳細は以下のコード断片を参照してください。} + +自動的に挿入されるデフォルトの連桁とは異なるパターンの連桁を@c +作成することができます +-- @ref{自動連桁の振る舞いを設定する} を参照してください。 + + +@predefined +@code{\autoBeamOff}, +@code{\autoBeamOn} +@endpredefined + + +@snippets + +@cindex line breaks and beams (改行と連桁) +@cindex beams and line breaks (連桁と改行) + +@funindex breakable + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beams-across-line-breaks.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-beam-knee-gap.ly} + +@cindex \partcombine and \autoBeamOff (\partcombine と \autoBeamOff) +@cindex \autoBeamOff and \partcombine (\autoBeamOff と \partcombine) + + +@lilypondfile [verbatim, lilyquote, ragged-right, texidoc, doctitle] +{partcombine-and-autobeamoff.ly} + + +@seealso +記譜法リファレンス: +@ref{手動連桁}, +@ref{自動連桁の振る舞いを設定する} + +インストールされているファイル: +@file{scm/auto-beam.scm} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}, +@rinternals{unbreakable-spanner-interface} + + +@knownissues + +連桁は他のボイスの中にある符頭や臨時記号と衝突する可能性があります。 + + +@node 自動連桁の振る舞いを設定する +@unnumberedsubsubsec 自動連桁の振る舞いを設定する +@translationof Setting automatic beam behavior + + +@cindex automatic beams, tuning (自動連桁を調整する) +@cindex tuning automatic beaming (自動連桁を調整する) +@cindex automatic beam generation (自動連桁生成) +@cindex autobeam (自動連桁) +@cindex lyrics and beaming (歌詞と連桁) + +@funindex autoBeaming +@funindex baseMoment +@funindex beamExceptions +@funindex beatStructure +@funindex measureLength +@funindex \time +@funindex time +@funindex \set +@funindex set + +たいていの場合、自動連桁は拍の終わりで終了します。@c +拍の終了点はコンテキスト プロパティ @code{baseMoment} と @code{beatStructure} +によって決定されます。@c +@code{beatStructure} は @code{baseMoment} を単位とする小節の各拍の長さを@c +定義する Scheme リストです。@c +デフォルトでは、@code{baseMoment} は「1/拍子の分母」です。@c +デフォルトでは、各拍の長さは @code{baseMoment} です。 + +@lilypond[quote,relative=2,verbatim] +\time 5/16 +c16^"default" c c c c | +\set Timing.beatStructure = #'(2 3) +c16^"(2+3)" c c c c | +\set Timing.beatStructure = #'(3 2) +c16^"(3+2)" c c c c | +@end lilypond + +連桁の設定変更をある特定のテキストに限定することができます。@c +下位コンテキストに連桁の設定が含まれない場合、@c +そのコンテキストを囲んでいる上位コンテキストの設定が適用されます。 + +@lilypond[quote, verbatim,relative=1] +\new Staff { + \time 7/8 + \set Staff.beatStructure = #'(2 3 2) + << + \new Voice = one { + \relative c'' { + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \set Voice.beatStructure = #'(1 3 3) + f8 f f f f f f + } + } + >> +} +@end lilypond + +譜で複数のボイスが使用されている場合に@c +連桁設定を譜のすべてのボイスに適用するには、@c +@code{Staff} コンテキストで設定を行う必要があります: + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +\time 7/8 +% リズム 3-1-1-2 +% デフォルトで連桁設定の変更は Voice に適用され、うまくいきません +% なぜなら、自動生成されるボイスで、すべての拍は baseMoment (1 . 8) だからです +\set beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> + +% コンテキスト Staff を指定するとうまくいきます +\set Staff.beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> +@end lilypond + +@code{baseMoment} の値を調整することで、@c +連桁の振る舞いを変更することができます。@c +@code{baseMoment} の値を変更した場合、@c +@code{beatStructure} に新しい @code{baseMoment} と矛盾しない値を@c +設定する必要があります。 + +@lilypond[quote,verbatim,relative=2] +\time 5/8 +\set Timing.baseMoment = #(ly:make-moment 1 16) +\set Timing.beatStructure = #'(7 3) +\repeat unfold 10 { a16 } +@end lilypond + +@code{beatLength} は @i{moment} -- 演奏時間の単位 -- です。@c +タイプ @i{momento} の量は +Scheme 関数 @code{ly:make-moment} によって作り出されます。@c +この関数についての更なる情報は @ref{時間管理} を参照してください。 + +デフォルトでは、@code{baseMoment} には「1/拍子の分母」がセットされています。@c +このデフォルトの例外は @file{scm/time-signature-settings.scm} で見つかります。 + +特殊な自動連桁規則 (連桁の終わりが拍に従わないもの) はプロパティ +@code{beamExceptions} に定義します。 + +@c 未訳 +@lilypond[quote,relative=2,verbatim] +\time 3/16 +\set Timing.beatStructure = #'(2 1) +\set Timing.beamExceptions = + #'( ;start of alist + (end . ;entry for end of beams + ( ;start of alist of end points + ((1 . 32) . (2 2 2)) ;rule for 1/32 beams -- end each 1/16 + ))) %close all entries +c16 c c | +\repeat unfold 6 { c32 } | +@end lilypond + +@code{beamExceptions} は規則タイプのキーと連桁規則の値を持つ配列リストです。 + +現時点で、利用可能な唯一の規則タイプの値は、@c +連桁の終わりのための @code{#'end} です。 + +連桁規則は、連桁タイプとその連桁タイプの最短演奏時間の音符を保持する連桁に@c +適用されるグループ化の仕方を示す Scheme 配列リスト (あるいはペアのリスト) です。 + +@example +#'((beam-type1 . grouping-1) + (beam-type2 . grouping-2) + (beam-type3 . grouping-3)) +@end example + +連桁タイプは、その連桁の演奏時間を示す Scheme ペアであり、@c +例えば @code{(1 . 16)} です。 + +@warning{@code{beamExceptions} の値は @emph{完全な} 例外リストである@c +必要があります。@c +つまり、その設定には適用されるべき例外がすべて含まれている必要があります。@c +例外の 1 つだけを追加、削除、変更することはできません。@c +このことは扱い難いように思えるかもしれませんが、@c +新しい連桁パターンを指定する際に現在の連桁設定を知る必要がないということを@c +意味します。} + +拍子が変更されると、@code{Timing.baseMoment}, @code{Timing.beatStructure}, +それに @code{Timing.beamExceptions} のデフォルト値が設定されます。@c +拍子を設定すると、その @code{Timing} コンテキストの自動連桁設定は@c +デフォルトの振る舞いにリセットされます。 + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +\time 6/8 +\repeat unfold 6 { a8 } +% (4 + 2) にグループ化します +\set Timing.beatStructure = #'(4 2) +\repeat unfold 6 { a8 } +% デフォルトの振る舞いに戻ります +\time 6/8 +\repeat unfold 6 { a8 } +@end lilypond + +ある拍子のデフォルトの自動連桁設定は @file{scm/beam-settings.scm} +の中で決定されます。@c +ある拍子に対する自動連桁のデフォルト設定を変更する方法は +@ref{拍子} で説明しています。 + +ある拍子に対する自動連桁設定の多くには +@code{beamExceptions} が登録されています。@c +例えば、4/4 拍子は 16 分音符しかない小節を 2 つの連桁で囲もうとします。@c +@code{beamExceptions} がリセットされていなければ、@c +@code{beamExceptions} 規則は @code{beatStructure} 設定を@c +オーバライドすることができます。 + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +\time 4/4 +\set Timing.baseMoment = #(ly:make-moment 1 8) +\set Timing.beatStructure = #'(3 3 2) +% 以下は beamExceptions のため、(3 3 2) の連桁にはなりません +\repeat unfold 8 {c8} | +% 以下は beamExceptions をクリアするため、(3 3 2) の連桁になります +\set Timing.beamExceptions = #'() +\repeat unfold 8 {c8} +@end lilypond + +同様に、デフォルトで 8 分音符のみの 3/4 拍子の小節は 1 つの連桁で囲まれます。@c +3/4 拍子での 8分音符を拍毎に連桁で囲むには、@c +@code{beamExceptions} をリセットします。 + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +\time 3/4 +% デフォルトでは beamExceptions のため、(3) の連桁になります +\repeat unfold 6 {a8} | +% 以下は beatLength のため、(1 1 1) の連桁になります +\set Timing.beamExceptions = #'() +\repeat unfold 6 {a8} +@end lilypond + +@i{@strong{自動連桁はどのように機能するのか}} + +自動連桁が有効である場合、自動連桁の配置はコンテキスト プロパティ +@code{baseMoment}, @code{beatStructure}, それに @code{beamExceptions} +によって決定されます。 + +連桁の配置を決定する際、以下の規則が並び順の優先度で適用されます: + +@itemize + +@item @code{[..]} で手動連桁が指定されている場合、@c +連桁は指定どおりに設定されます。@c +手動連桁が指定されていない場合、 + +@item +その連桁タイプに対する @code{beamExceptions} に連桁終了規則が@c +定義されている場合、@c +その規則を用いて連桁を終了させる位置を決定します。@c +連桁終了規則が定義されていない場合、 + +@item +もっと長い連桁タイプに対する @code{beamExceptions} に連桁終了規則が@c +定義されている場合、@c +その規則を用いて連桁を終了させる位置を決定します。@c +連桁終了規則が定義されていない場合、 + +@item +@code{baseMoment} と @code{beatStructure} の値を用いて@c +その小節での拍の終わりを決定し、@c +拍の終わりで連桁を終了させます。 + +@end itemize + +上記の規則で、連桁タイプは連桁でグループ化された音符の最短演奏時間です。 + +参考として、@c +デフォルトの連桁規則は @file{scm/time-signature-settings.scm} の中にあります。 + +@snippets + +@cindex beams, subdividing (連桁をサブ グループ化する) + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{subdividing-beams.ly} + +@cindex measure groupings (小節をグループ化する) +@cindex beats, grouping (拍をグループ化する) +@cindex grouping beats (拍をグループ化する) +@cindex measure sub-grouping (小節をサブ グループ化する) + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{conducting-signs,-measure-grouping-signs.ly} + +@cindex beam, last in score (楽譜の最後の連桁) +@cindex beam, last in polyphonic voice (多声ボイスの最後の連桁) + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beam-endings-in-score-context.ly} + + +@seealso +インストールされているファイル: +@file{scm/beam-settings.scm} + +コード断片集: +@rlsr{Rhythms} + +内部リファレンス: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface} + + +@knownissues +自動連桁が終了しておらず、まだ音符を受け付けている最中に楽譜が終了する場合、@c +その最後の連桁はまったく譜刻されません。@c +@code{<< @dots{} \\ @dots{} >>} で入力される多声ボイスでも同様です。@c +自動連桁がまだ音符を受け付けている最中に多声ボイスが終了する場合、@c +その最後の連桁はまったく譜刻されません。@c +ボイスや楽譜の最後の連桁には手動で連桁を付けることにより、@c +これらの問題を回避できます。 + + +@node 手動連桁 +@unnumberedsubsubsec 手動連桁 +@translationof Manual beams + +@cindex beams, manual (手動連桁) +@cindex manual beams (手動連桁) + +@funindex ] +@funindex [ + +自動連桁アルゴリズムをオーバライドする必要がある場合もあります。@c +例えば、自動連桁は休符や小節線を越えて連桁を配置することはなく、@c +合唱譜では連桁はしばしば音符ではなく歌詞の韻律に従って配置されます。@c +そのような連桁は @code{[} と @code{]} で開始点と終了点を記すことによって@c +手動で指定することができます: + +@lilypond[quote,relative=1,verbatim] +r4 r8[ g' a r] r g[ | a] r +@end lilypond + +@cindex manual beams, direction shorthand for (手動連桁の向きを指定する短縮記譜法) +@cindex manual beams, grace notes (装飾小音符の手動連桁) + +方向指示子を用いることで、連桁の向きを手動で設定することができます: + +@lilypond[quote,relative=2,verbatim] +c8^[ d e] c,_[ d e f g] +@end lilypond + +@funindex \noBeam +@funindex noBeam + +連桁でつながれないようにするために、個々の音符には +@code{\noBeam} が記されるかもしれません: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c8 c\noBeam c c +@end lilypond + +装飾小音符の連桁と通常の音符の連桁は同時進行で発生します。@c +通常の音符の連桁の途中に、連桁でつながれない装飾小音符は配置されません。 + +@lilypond[quote,verbatim,relative=2] +c4 d8[ +\grace { e32[ d c d] } +e8] e[ e +\grace { f16 } +e8 e] +@end lilypond + +@funindex stemLeftBeamCount +@funindex stemRightBeamCount + +プロパティ @code{stemLeftBeamCount} と @code{stemRightBeamCount} を@c +セットすることによって連桁をさらに厳密に手動制御することが可能です。@c +これらの値はそれぞれ、次の音符の左側と右側に描く連桁の本数を指定します。@c +どちらかのプロパティがセットされている場合、その値は 1 度だけ使用され、@c +それから消去されます。@c +以下の例では、最後の @code{f} は左側に連桁を 1 本だけ持って +-- すなわち、グループ全体をつなげている 8 分音符の連桁を持って -- +譜刻されています。 + +@lilypond[quote,relative=2,verbatim] +a8[ r16 f g a] +a8[ r16 +\set stemLeftBeamCount = #2 +\set stemRightBeamCount = #1 +f16 +\set stemLeftBeamCount = #1 +g16 a] +@end lilypond + + +@predefined +@code{\noBeam} +@endpredefined + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{flat-flags-and-beam-nibs.ly} + + +@seealso +記譜法リファレンス: +@ref{Direction and placement}, +@ref{Grace notes} + +コード断片集: +@rlsr{Rhythms} + +内部リファレンス: +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{Beam_engraver}, +@rinternals{beam-interface}, +@rinternals{Stem_engraver} + + +@node 羽状の連桁 +@unnumberedsubsubsec 羽状の連桁 +@translationof Feathered beams + +@cindex beams, feathered (羽状の連桁) +@cindex feathered beams (羽状の連桁) + +@funindex \featherDurations +@funindex featherDurations +@funindex grow-direction + +羽状の連桁は、楽曲全体のテンポを変えることなく、音符の小さなグループを@c +テンポを上げながら (あるいは下げながら) 演奏すべきであることを示すために@c +使用されます。@c +羽状連桁の範囲は @code{[} と @code{]} を使って手動で指定する必要があり、@c +連桁の羽は @code{Beam} のプロパティ @code{grow-direction} に向きを@c +指定することによって調整することができます。 + +音符の配置と MIDI 出力での音が羽状連桁によって指示された +ritardando (徐々に緩やかに) や accelerando (次第に速く) を@c +反映すべきであるのなら、@c +音符は波括弧で区切られた音楽表記としてグループ化される必要があり、@c +さらに、そのグループの最初の音符と最後の音符の演奏時間の比率を指定する +@code{featheredDurations} コマンドを前に置く必要があります。 + +角括弧は連桁の範囲を示し、@c +波括弧は演奏時間を変更される音符はどれなのかを示します。@c +通常これら 2 つは同じ音符のグループを囲みますが、@c +同じであることは必須ではありません: +2 つのコマンドは独立しています。 + +以下の例では、8 つの 16 分音符は 2 分音符とまったく同じ時間を占めますが、@c +最初の音符の長さは最後の音符の長さの半分であり、@c +中間の音符は徐々に長くなります。@c +最初の 4 つの 32 分音符は徐々にスピード アップしますが、@c +最後の 4 つの 32 分音符は一定のテンポです。 + +@lilypond[relative=1,verbatim,quote] +\override Beam #'grow-direction = #LEFT +\featherDurations #(ly:make-moment 2 1) +{ c16[ c c c c c c c] } +\override Beam #'grow-direction = #RIGHT +\featherDurations #(ly:make-moment 2 3) +{ c32[ d e f] } +% revert to non-feathered beams +\override Beam #'grow-direction = #'() +{ g32[ a b c] } +@end lilypond + +@noindent +譜刻される音符の間隔は音符の演奏時間を近似的に表しているだけですが、@c +MIDI 出力での演奏時間は正確です。 + + +@predefined +@code{\featherDurations} +@endpredefined + +@seealso +コード断片集: +@rlsr{Rhythms} + + +@knownissues + +@code{\featherDurations} は非常に短い音楽コード断片に対してだけ、@c +そして分数の数が小さいときにだけ機能します。 + + +@seealso +コード断片集: +@rlsrnamed{Rhythms,リズム} + + +@node 小節 +@subsection 小節 +@translationof Bars + +@menu +* 小節線:: +* 小節番号:: +* 小節と小節番号のチェック:: +* リハーサル記号:: +@end menu + + +@node 小節線 +@unnumberedsubsubsec 小節線 +@translationof Bar lines + +@cindex bar lines (小節線) +@cindex measure lines (小節線) +@cindex closing bar lines (閉じの小節線) +@cindex bar lines, closing (閉じの小節線) +@cindex double bar lines (2 重小節線) +@cindex bar lines, double (2 重小節線) +@cindex repeat bars (繰り返しの小節線) + +@funindex \bar +@funindex bar + +小節線は小節を区切り、繰り返しを示すためにも使用されます。@c +通常、単線の小節線が拍子に基づいて出力に自動的に挿入されます。 + +自動的に挿入される単線の小節線は +@code{\bar} コマンドで他のタイプに変更することができます。@c +例えば、通常、2 重線の閉じの小節線が楽曲の最後に配置されます: + +@lilypond[quote,relative=1,verbatim] +e4 d c2 \bar "|." +@end lilypond + +ある小節の最後の音符が、自動的に挿入される小節線の所で終わっていなくても@c +無効ではありません: +その音符は次の小節に持ち越されるものと見なされます。@c +しかしながら、そのような持ち越しのある小節がいくつも続く場合、@c +その音楽は圧縮されて表示される可能性があり、@c +ページからはみ出す可能性さえあります。@c +これは、自動改行は完全な小節 +-- つまり、小節の終端ですべての音符が終わっている小節 -- +の終わりでのみ発生するからです。 + +@warning{誤った演奏時間の指定は改行を抑制し、結果として@c +非常に圧縮された楽譜やページからはみ出す楽譜の原因となります。} + +@cindex line breaks (改行) +@cindex bar lines, invisible (不可視の小節線) +@cindex measure lines, invisible (不可視の小節線) + +手動で挿入された小節線のところでも +-- たとえ、その小節が不完全であっても -- +改行することができます。@c +小節線を譜刻せずに改行を可能にするには、以下を使用します: + +@example +\bar "" +@end example + +@noindent +これは不可視の小節線を挿入し、@c +そこで改行が発生することを可能にします (強制はしません)。@c +小節番号カウンタは増加しません。@c +強制的に改行を行うには、@ref{Line breaking} を参照してください。 + +@cindex manual bar lines (手動の小節線) +@cindex manual measure lines (手動の小節線) +@cindex bar lines, manual (手動の小節線) +@cindex measure lines, manual (手動の小節線) + +不可視の小節線と他の特殊な小節線は任意の位置に手動で挿入することができます。@c +それらの小節線の位置がある小節の終わりと一致する場合、@c +それらの小節線はそこに自動で挿入されるはずだった単線の小節線に@c +取って代わります。@c +小節の終わりと一致しない場合、指定された小節線がその位置に挿入されます。@c + +手動の小節線は純粋に視覚的なものです。@c +それらは通常の小節線が影響を与えるプロパティ +-- 小節番号、臨時記号、改行など -- +には何の影響も与えません。@c +手動の小節線はその後に続く自動小節線の算出や配置に影響を与えません。@c +自動小節線がすでに存在する場所に手動小節線が配置されても、@c +自動小節線の効果は変更されません。 + +手動で挿入できる小節線として、単線の小節線は 2 種類あり、@c +2 重線の小節線は 5 種類あります: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|" +f1 \bar "." +g1 \bar "||" +a1 \bar ".|" +b1 \bar ".|." +c1 \bar "|.|" +d1 \bar "|." +e1 +@end lilypond + +@noindent +さらに、点線と破線の小節線があります: + +@lilypond[quote,relative=1,verbatim] +f1 \bar ":" +g1 \bar "dashed" +a1 +@end lilypond + +@noindent +さらに、繰り返しの小節線が 5 種類あります: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|:" +g1 \bar ":|:" +a1 \bar ":|.|:" +b1 \bar ":|.:" +c1 \bar ":|" +e1 +@end lilypond + +@c 未訳 +Additionally, a bar line can be printed as a simple tick: +@lilypond[quote,relative=1,verbatim] +f1 \bar "'" +@end lilypond +However, as such ticks are typically used in Gregorian chant, it is preferable +to use @code{\divisioMinima} there instead, described in the section +@ref{Divisiones} in Gregorian chant. + +@cindex segno (セーニョ) + +行内のセーニョ記号として、3 タイプの小節線があり、@c +改行での振る舞いがそれぞれ異なります: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "S" +c4 c c c \break +\bar "S" +c4 c c c +\bar "|S" +c4 c c c \break +\bar "|S" +c4 c c c +\bar "S|" +c4 c c c \break +\bar "S|" +c1 +@end lilypond + +@cindex repeats (繰り返し) + +繰り返しを表す小節線は手動で挿入される場合がありますが、@c +それらの小節線自体は LilyPond に繰り返されるセクションを@c +認識させることはしません。@c +そのような繰り返されるセクションは@c +さまざまな繰り返しのコマンドを使って入力した方が良いです +(@ref{Repeats} を参照してください)。@c +繰り返しのコマンドは自動的に適切な小節線を譜刻します。 + +さらに、@code{"||:"} を使用することができます。@c +これは @code{"|:"} と等価ですが、例外として改行位置では、@c +この小節線は行の終わりに 2 重線の小節線を置き、@c +次の行の始めに繰り返し開始の小節線を置きます。 + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "||:" +c4 c c c \break +\bar "||:" +c4 c c c +@end lilypond + +繰り返しとセーニョ記号の組み合わせは 6 種類あります: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar ":|S" +c4 c c c \break +\bar ":|S" +c4 c c c +\bar ":|S." +c4 c c c \break +\bar ":|S." +c4 c c c +\bar "S|:" +c4 c c c \break +\bar "S|:" +c4 c c c +\bar ".S|:" +c4 c c c \break +\bar ".S|:" +c4 c c c +\bar ":|S|:" +c4 c c c \break +\bar ":|S|:" +c4 c c c +\bar ":|S.|:" +c4 c c c \break +\bar ":|S.|:" +c1 +@end lilypond + + +多くの譜を持つ楽譜では、ある譜の @code{\bar} コマンドは@c +自動的にすべての譜に適用されます。@c +結果として、@code{StaffGroup}, @code{PianoStaff}, あるいは +@code{GrandStaff} では、小節線は譜をまたがって 1 本に接続されます。 + +@lilypond[quote,relative=1,verbatim] +<< + \new StaffGroup << + \new Staff { + e4 d + \bar "||" + f4 e + } + \new Staff { \clef bass c4 g e g } + >> + \new Staff { \clef bass c2 c2 } +>> +@end lilypond + + +@cindex default bar lines, changing (デフォルトの小節線を変更する) +@cindex bar lines, default, changing (デフォルトの小節線を変更する) + +@snippets + +@funindex whichBar +@funindex defaultBarType +@funindex \bar +@funindex bar +@funindex bartype + +コマンド @code{\bar }@var{bartype} は +@samp{\set Timing.whichBar = @var{bartype}} の短縮記法です。@c +@code{whichBar} プロパティがセットされるといつでも小節線が作成されます。 + +自動的に挿入される小節線に使用されるデフォルトの@c +小節線タイプは @code{"|"} です。@c +これは @samp{\set Timing.defaultBarType = @var{bartype}} でいつでも@c +変更することができます。 + + +@seealso +記譜法リファレンス: +@ref{Line breaking}, +@ref{Repeats}, +@ref{Grouping staves} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{BarLine} (@rinternals{Staff} の階層で作成されます), +@rinternals{SpanBar} (譜をまたぎます), +@rinternals{Timing_translator} (@code{Timing} プロパティ用です) + + +@node 小節番号 +@unnumberedsubsubsec 小節番号 +@translationof Bar numbers + +@cindex bar numbers (小節番号) +@cindex measure numbers (小節番号) +@cindex numbers, bar (小節番号) +@cindex numbers, measure (小節番号) + +@funindex currentBarNumber + +小節番号は、デフォルトでは、最初の行を除く各行の開始点で譜刻されます。@c +番号自体は @code{currentBarNumber} プロパティに保存されていて、@c +通常は各小節で自動的に更新されます。@c +小節番号を手動で設定することも可能です: + +@lilypond[verbatim,quote,fragment,relative=1] +c1 c c c +\break +\set Score.currentBarNumber = #50 +c1 c c c +@end lilypond + +@cindex bar numbers, regular spacing 規則的な間隔で小節番号を譜刻する + +@funindex barNumberVisibility +@funindex BarNumber + +小節番号は、各行の開始点に配置する代わりに、規則的な間隔で@c +譜刻することができます。@c +このようにするには、小節番号を行の開始点以外の位置に譜刻できるよう、@c +デフォルトの振る舞いをオーバライドする必要があります。@c +これは @code{BarNumber} の @code{break-visibility} プロパティによって@c +制御されます。@c +これは 3 つの値をとります +-- 3 つの値は、対応する小節番号を可視にするかしないかを指定するために、@c +@code{#t} または @code{#f} にセットされます。@c +3 つの値の順番は、@code{end of line visible}, +@code{middle of line visible}, @code{beginning of line visible} +(行の終了点での可視性、行の途中での可視性、行の開始点での可視性) です。@c +以下の例では、譜刻可能な場所すべてに小節番号を譜刻しています: + +@lilypond[verbatim,quote,relative=1] +\override Score.BarNumber #'break-visibility = #'#(#t #t #t) +\set Score.currentBarNumber = #11 +% Permit first bar number to be printed +\bar "" +c1 | c | c | c +\break +c1 | c | c | c +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-the-bar-number-for-the-first-measure.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-at-regular-intervals.ly} + +@cindex measure number, format +@cindex bar number, format + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-inside-boxes-or-circles.ly} + +@cindex bar number alignment + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{aligning-bar-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{removing-bar-numbers-from-a-score.ly} + + +@seealso +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{BarNumber}, +@rinternals{Bar_number_engraver} + + +@cindex bar number collision (小節番号の衝突) +@cindex collision, bar number (小節番号の衝突) + +@knownissues +小節番号は @code{StaffGroup} の左括弧の上端と衝突する可能性があります。@c +これを解決するには、@code{BarNumber} の @code{padding} プロパティを@c +使って小節番号を適切な位置に配置します。@c +詳細は @rinternals{StaffGroup} と @rinternals{BarNumber} を参照してください。 + + +@node 小節と小節番号のチェック +@unnumberedsubsubsec 小節と小節番号のチェック +@translationof Bar and bar number checks + +@cindex bar check (小節チェック) +@cindex bar number check (小節番号チェック) +@cindex measure check (小節チェック) +@cindex measure number check (小節番号チェック) + +@funindex barCheckSynchronize +@funindex | + +小節チェックは入力された演奏時間の誤りを検出する手助けをします。@c +小節チェックは、小節線が書き込まれると予想される場所ならどこにでも、@c +小節記号 @code{|} を使うことで挿入できます。@c +他の場所で小節チェックの線に遭遇した場合、警告のリストがログ ファイルに@c +書き込まれ、小節チェックに失敗した行番号と行を示します。@c +次の例では、2 番目の小節チェックがエラーを発します。 + +@example +\time 3/4 c2 e4 | g2 | +@end example + +歌詞でも小節チェックを使用することができます。@c +以下に例を挙げます: + +@example +\lyricmode @{ + \time 2/4 + Twin -- kle | Twin -- kle | +@} +@end example + +正しくない演奏時間は滅茶苦茶な楽譜を生成する可能性があります +-- 特にその楽譜が多声である場合はそうなる可能性があります。@c +入力を修正するには、@c +まずざっと見て失敗した小節チェックと演奏時間の誤りを探すと良いでしょう。 + +連続する小節チェックは同じ音楽的間隔で off になり、@c +最初の警告メッセージだけが表示されます。@c +これにより、警告の焦点がタイミング エラーの発生源に絞られます。 + + +@funindex | +@funindex pipeSymbol + +入力の中で小節チェックあるいはパイプ記号 @code{|} に遭遇した場合にとられる@c +アクションを再定義することも可能です。@c +これにより、小節チェック以外のことを行うことができます。@c +再定義は音楽表記を @code{pipeSymbol} に代入することによって行います。@c +以下の例では、@code{|} は小節の終わりをチェックするのではなく、@c +それが現れた場所に 2 重線の小節線を挿入するようセットされています。 + +@lilypond[quote,verbatim] +pipeSymbol = \bar "||" +{ + c'2 c' | + c'2 c' + c'2 | c' + c'2 c' +} +@end lilypond + +@funindex \barNumberCheck +@funindex barNumberCheck + +大きな楽曲をコピーしている場合、LilyPond の小節番号と@c +コピー元のオリジナルの小節番号の対応をチェックすると役に立ちます。@c +この対応は @code{\barNumberCheck} によってチェックすることができます。@c +例えば、 + +@verbatim +\barNumberCheck #123 +@end verbatim + +@noindent +を使用すると、@code{currentBarNumber} が処理された時に 123 でなければ、@c +警告が表示されます。 + + +@seealso +コード断片集: +@rlsrnamed{Rhythms,リズム} + + +@node リハーサル記号 +@unnumberedsubsubsec リハーサル記号 +@translationof Rehearsal marks + +@cindex rehearsal marks (リハーサル記号) +@cindex mark, rehearsal (リハーサル記号) + +@funindex \mark +@funindex mark + +リハーサル記号を譜刻するには、@code{\mark} コマンドを使用します: + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +@code{\mark \default} を使用するとリハーサル記号は自動的に +1 されますが、@c +手動で整数をリハーサル記号にセットすることもできます。@c +セットした値は @code{rehearsalMark} に保存されます。 + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +文字@tie{}@q{I} は、譜刻の慣習に従って、スキップされます。@c +文字@tie{}@q{I} を含めたければ、@c +リハーサル記号のスタイル (文字のみ、四角で囲まれた文字、丸で囲まれた文字) +に合わせて以下のコマンドの 1 つを使用します: + +@example +\set Score.markFormatter = #format-mark-alphabet +\set Score.markFormatter = #format-mark-box-alphabet +\set Score.markFormatter = #format-mark-circle-alphabet +@end example + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-box-alphabet +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@cindex rehearsal mark format (リハーサル記号のフォーマット) +@cindex rehearsal mark style (リハーサル記号のスタイル) +@cindex style, rehearsal mark (リハーサル記号のスタイル) +@cindex format, rehearsal mark (リハーサル記号のフォーマット) +@cindex mark, rehearsal, style (リハーサル記号のスタイル) +@cindex mark, rehearsal, format (リハーサル記号のフォーマット) +@cindex rehearsal mark, manual (手動でリハーサル記号をセットする) +@cindex mark, rehearsal, manual (手動でリハーサル記号をセットする) +@cindex custom rehearsal mark (リハーサル記号のカスタム) +@cindex manual rehearsal mark (手動のリハーサル記号) + +スタイルはプロパティ @code{markFormatter} によって定義されます。@c +これは引数としてカレントの記号 (整数) とカレントのコンテキストをとる関数です。@c +この関数はマークアップ オブジェクトを返します。@c +以下の例では、@code{markFormatter} には定義済みの手続きがセットされています。@c +数小節後では、四角で囲まれた番号を作り出す手続きがセットされています。 + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-numbers +c1 \mark \default +c1 \mark \default +\set Score.markFormatter = #format-mark-box-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-letters +c1 +@end lilypond + +ファイル @file{scm/translation-functions.scm} は +@code{format-mark-numbers} (デフォルトのフォーマット), +@code{format-mark-box-numbers}, @code{format-mark-letters} それに +@code{format-mark-box-letters} の定義を保持しています。@c +これらを参考にして他のフォーマット関数を作り出すこともできます。 + +加算された数字や文字の代わりに小節番号を取得するために +@code{format-mark-barnumbers}, @code{format-mark-box-barnumbers}, それに +@code{format-mark-circle-barnumbers} を使うことがあります。 + +リハーサル記号の他のスタイルを手動で指定することができます: + +@example +\mark "A1" +@end example + +@noindent +@code{Score.markFormatter} はこの方法で指定された記号に影響を与えません。@c +しかしながら、文字列として @code{\markup} 使用することができます。 + +@example +\mark \markup@{ \box A1 @} +@end example + +@cindex segno (セーニョ) +@cindex coda (コーダ) +@cindex D.S al Fine (ここで曲の先頭に戻り、Fine で終わる) +@cindex fermata (フェルマータ) +@cindex music glyphs (音楽的図柄) +@cindex glyphs, music (音楽的図柄) + +@funindex \musicglyph +@funindex musicglyph + +音楽的図柄 (セーニョ記号など) を @code{\mark} の中に譜刻することができます: + +@lilypond[quote,verbatim,relative=1] +c1 \mark \markup { \musicglyph #"scripts.segno" } +c1 \mark \markup { \musicglyph #"scripts.coda" } +c1 \mark \markup { \musicglyph #"scripts.ufermata" } +c1 +@end lilypond + +@noindent +@code{\musicglyph} を使用して譜刻できる記号のリストは、@c +@ref{The Feta font} を参照してください。 + +リハーサル記号の配置の一般的な調整については、@c +@ref{Formatting text} を参照してください。@c +更に細かな制御を行う場合は、@c +@ref{Aligning objects} の @code{break-alignable-interface} を参照してください。 + + +@seealso +記譜法リファレンス: +@ref{The Feta font}, +@ref{Formatting text}, +@ref{Aligning objects} + +インストールされているファイル: +@file{scm/translation-functions.scm} は @code{format-mark-numbers} と +@code{format-mark-letters} の定義を保持しています。@c +ここにある定義を参考にして他のフォーマット関数を作り出すことができます。 + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark} + + +@node 特殊なリズム関連事項 +@subsection 特殊なリズム関連事項 +@translationof Special rhythmic concerns + + +@menu +* 装飾小音符:: +* カデンツァに揃える:: +* 時間管理:: +@end menu + +@node 装飾小音符 +@unnumberedsubsubsec 装飾小音符 +@translationof Grace notes + +@cindex ornaments (装飾音) +@cindex grace notes (装飾小音符) +@cindex appoggiatura (アッポジャトゥーラ) +@cindex acciaccatura (アッチャカトゥーラ) + +@funindex \grace +@funindex grace + +装飾小音符は楽譜に書き出される装飾音です。@c +装飾小音符は小さなフォントで譜刻され、@c +小節の中では論理的な時間を持ちません。 + +@lilypond[quote,relative=2,verbatim] +c4 \grace c16 c4 +\grace { c16[ d16] } c2 +@end lilypond + +Lilypond はさらに 2 つ特殊なタイプの装飾小音符をサポートします: +@emph{acciaccatura} (長さを持たない装飾小音符で、@c +スラッシュ付きの符幹を持つスラーでつなげられる小さな音符) と +@emph{appoggiatura} (一定の比率で主音符から演奏時間をとり、@c +スラッシュを持たない小さな音符で譜刻されます) です。 + +@lilypond[quote,relative=2,verbatim] +\grace c8 b4 +\acciaccatura d8 c4 +\appoggiatura e8 d4 +\acciaccatura { g16[ f] } e4 +@end lilypond + +装飾小音符の配置は他の譜と同期されます。@c +以下の例では、8 分の装飾小音符 1 つに対して 2 つの 16 分装飾小音符が@c +割り当てられています: + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e2 \grace { c16[ d e f] } e2 } + \new Staff { c2 \grace { g8[ b] } c2 } +>> +@end lilypond + +@cindex grace notes, following (装飾小音符を後ろに配置する) + +@funindex \afterGrace +@funindex afterGrace + +装飾小音符で記譜を終えたいのならば、@c +@code{\afterGrace} コマンドを使用します。@c +このコマンドは 2 つの引数をとります: +主音符と主音符の後に続く装飾小音符です。 + +@lilypond[quote,verbatim,relative=2] +c1 \afterGrace d1 { c16[ d] } c1 +@end lilypond + +これは主音符の長さの 3/4 のスペースをとった後に@c +装飾小音符を配置しています。@c +デフォルトの分数 3/4 は @code{afterGraceFraction} を設定することにより@c +変更することができます。@c +以下の例では、スペースをデフォルト、主音符の 15/16、最後は 1/2 に@c +設定した結果を示しています。 + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 15 16)) + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 1 2)) + c1 \afterGrace d1 { c16[ d] } c1 + } +>> +@end lilypond + +主音符と装飾小音符の間のスペースは空白音符を使って@c +指定することもできます。@c +以下の例では、主音符の長さの 7/8 のスペースをとった後に装飾小音符を@c +配置しています。 + +@lilypond[quote,verbatim,relative=2] +\new Voice { + << + { d1^\trill_( } + { s2 s4. \grace { c16[ d] } } + >> + c1) +} +@end lilypond + +@cindex tweaking grace notes (装飾小音符を調整する) +@cindex grace notes, tweaking (装飾小音符を調整する) +@cindex grace notes, changing layout settings (装飾小音符のレイアウト設定を変更する) + +@code{\grace} 音楽表記は特殊な譜刻設定を導入します +-- 例えば、小さなフォントを作り出し、向きを設定するためです。@c +それゆえ、装飾小音符の特殊な設定をオーバライドするために@c +レイアウトの調整を行う場合、@c +調整は装飾小音符の表記の中に置くべきです。@c +さらに、そのオーバライドは装飾小音符の表記の中で元に戻しておくべきです。@c +以下の例では、装飾小音符の符幹のデフォルトの向きがオーバライドされ、@c +それから元に戻されています。 + +@lilypond[quote,verbatim,relative=2] +\new Voice { + \acciaccatura { + \stemDown + f16-> + \stemNeutral + } + g4 e c2 +} +@end lilypond + + +@cindex stem, with slash (スラッシュ付きの符幹) + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-grace-note-slashes-with-normal-heads.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-grace-layout-within-music.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{redefining-grace-note-global-defaults.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-grace-notes-with-floating-space.ly} + + +@seealso +音楽用語集: +@rglos{grace notes}, +@rglos{acciaccatura}, +@rglos{appoggiatura} + +記譜法リファレンス: +@ref{手動連桁} + +インストールされているファイル: +@file{ly/grace-init@/.ly} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{GraceMusic}, +@rinternals{Grace_beam_engraver}, +@rinternals{Grace_engraver}, +@rinternals{Grace_spacing_engraver} + + +@knownissues + +@cindex acciaccatura, multi-note (複数音符のアッチャカトゥーラ) +@cindex multi-note acciaccatura (複数音符のアッチャカトゥーラ) +@cindex grace-note synchronization (装飾小音符の同期) + +複数の音符を連桁でつないだ @i{アッチャカトゥーラ} には@c +スラッシュは付けられず、@c +複数の音符を連桁でつないだ @i{アッポジャトゥーラ} と@c +まったく同じに見えます。 + +@c TODO Add link to LSR snippet to add slash when available + +装飾小音符の同期は予期しない結果を引き起こす可能性があります。@c +譜の記譜要素 -- 拍子、小節線など -- も同期をとられます。@c +装飾小音符を持つ譜と持たない譜を混在させる場合は気をつけて下さい。@c +例えば: + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" d2. } +>> +@end lilypond + +@noindent +これは、他の譜にある装飾小音符の演奏時間に対応した空白の@c +装飾小音符を挿入することによって修正することができます。@c +上の例を以下のように修正します: + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" \grace s16 d2. } +>> +@end lilypond + +装飾小音符セクションはシーケンシャルな音楽表記の中でのみ使用すべきです。@c +装飾小音符セクションのネスト、並置はサポートされておらず、@c +クラッシュや他のエラーを引き起こすかもしれません。 + + +@node カデンツァに揃える +@unnumberedsubsubsec カデンツァに揃える +@translationof Aligning to cadenzas + +@cindex cadenza (カデンツァ) +@cindex cadenza, aligning to (カデンツァに揃える) +@cindex aligning to cadenza (カデンツァに揃える) + +オーケストラのコンテキストにおいて、カデンツァは特殊な問題を提起します: +楽譜の構成に演奏時間を持つカデンツァや他のソロ パッセージが含まれる場合、@c +他のすべての楽器は、そのカデンツァの演奏時間の分だけ@c +スキップする必要があります。@c +さもなければ、他の楽器はカデンツァの終わりよりも早すぎる +(あるいは遅すぎる) タイミングで始まってしまいます。 + +この問題の解決方法の一つは、関数 @code{mmrest-of-length} と +@code{skip-of-length} を使用することです。@c +これらの Scheme 関数は、引数として定義済みの音楽表記をとり、@c +その音楽表記と同じ長さの複数小節休符または @code{\skip} を生成します。 + +@lilypond[verbatim,quote] +MyCadenza = \relative c' { + c4 d8 e f g g4 + f2 g4 g +} + +\new GrandStaff << + \new Staff { + \MyCadenza c'1 + \MyCadenza c'1 + } + \new Staff { + #(ly:export (mmrest-of-length MyCadenza)) + c'1 + #(ly:export (skip-of-length MyCadenza)) + c'1 + } +>> +@end lilypond + + +@seealso +音楽用語集: +@rglos{cadenza} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + + +@c ここから L3219 +@node 時間管理 +@unnumberedsubsubsec 時間管理 +@translationof Time administration + +@cindex time administration (時間管理) +@cindex timing (within the score) ((楽譜内での) タイミング) +@cindex music, unmetered (無韻律の音楽) +@cindex unmetered music (無韻律の音楽) + +@funindex currentBarNumber +@funindex measurePosition +@funindex measureLength + +時間は @code{Timing_translator} +-- これは、デフォルトでは、@code{Socre} コンテキストの中にあります -- +によって管理されます。@c +エイリアス @code{Timing} は @code{Timing_translator} が配置されている@c +コンテキストに付け加えられます。 +エイリアス @code{Timing} が利用可能であることを保証するため、@c +コンテキスト (@code{Voice} や @code{Staff} など) を明示的にインスタンス化@c +する必要があるかもしれません。 + +以下の @code{Timing} のプロパティは、@c +楽譜内でのタイミングの経過を追うために使用されます。 + +@cindex bar number (小節番号) +@cindex measure number (小節番号) + +@table @code +@item currentBarNumber +カレントの小節番号。@c +このプロパティの使用例は、@ref{小節番号} を参照してください。 + +@item measureLength +カレントの拍子での小節の長さ。@c +4/4 拍子では 1 であり、6/8 拍子では 3/4 です。@c +この値は小節線を挿入するタイミングと自動連桁の生成の仕方を決定します。 + +@item measurePosition +カレントで処理している小節内での位置。@c +この値は、@code{measureLength} に到達するか超過したときに、@c +この値から @code{measureLength} を減算されることによって、リセットされます。@c +リセットが起こるときに、@code{currentBarNumber} が +1 されます。 + +@item timing +真にセットされている場合、各タイム ステップごとに上記の変数は更新されます。@c +偽にセットされている場合、エングラーバはカレントの小節に永久に留まります。 + +@end table + +タイミングは、上記の値のいずれかを明示的に設定することによって、@c +変更することができます。@c +次の例では、デフォルトの 4/4 拍子が譜刻されていますが、@c +@code{measureLength} は 5/4 にセットされています。@c +第 3 小節の 4/8 の位置で、@code{measurePositoin} は 1/8 進められて +5/8 になり、それによりその小節は 1/8 短くされます。@c +次の小節線は 5/4 ではなく 9/8 の位置で引かれます。 + +@lilypond[quote,verbatim] +\new Voice \relative c' { + \set Timing.measureLength = #(ly:make-moment 5 4) + c1 c4 | + c1 c4 | + c4 c + \set Timing.measurePosition = #(ly:make-moment 5 8) + b4 b b8 | + c4 c1 | +} +@end lilypond + +@noindent +この例が示すように、@code{ly:make-moment n m} は全音符の n/m の長さの@c +演奏時間を構成します。@c +例えば、@code{ly:make-moment 1 8} は 1 個の 8 分音符の演奏時間であり、@c +@code{ly:make-moment 7 16} は 7 個の 16 分音符の演奏時間です。 + + +@seealso +記譜法リファレンス: +@ref{小節番号}, +@ref{無韻律の音楽} + +コード断片集: +@rlsrnamed{Rhythms,リズム} + +内部リファレンス: +@rinternals{Timing_translator}, +@rinternals{Score} diff --git a/Documentation/ja/notation/simultaneous.itely b/Documentation/ja/notation/simultaneous.itely new file mode 100644 index 0000000000..62f598329b --- /dev/null +++ b/Documentation/ja/notation/simultaneous.itely @@ -0,0 +1,1106 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 673cef312bbefe407f87a1c2e041980bc61396c6 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 同時進行する音符 +@section 同時進行する音符 +@translationof Simultaneous notes + +@lilypondfile[quote]{simultaneous-headword.ly} + +楽譜の中で多声部は楽曲の 1 節の中にある複数のボイスを参照します。@c +LilyPond の中で多声部は同じ譜にある複数のボイスを参照します。 + +@menu +* 単一のボイス:: +* 複数のボイス:: +@end menu + + +@node 単一のボイス +@subsection 単一のボイス +@translationof Single voice + +このセクションでは同じボイスの中にある同時進行する音符について議論します。 + +@menu +* 和音の音符:: +* 和音の繰り返し:: +* 同時進行表記:: +* クラスタ:: +@end menu + + +@node 和音の音符 +@unnumberedsubsubsec 和音の音符 +@translationof Chorded notes + +@cindex chords (和音) +@cindex brackets, angle (山括弧) + +@funindex < +@funindex > +@funindex <...> + +和音は @code{<} と @code{>} で 1 組のピッチを囲むことによって形成されます。@c +和音の後には -- 普通の音符と同様に -- 演奏時間が続くかもしれません: + +@lilypond[verbatim,quote,relative=2] +1 2 4 8. 16 +@end lilypond + +さらに、和音の後には -- 普通の音符と同様に -- アーティキュレーションが@c +続くかもしれません: + +@lilypond[verbatim,quote,relative=2] +1\fermata 2-> 4\prall 8.^| 16-. +@end lilypond + +和音の中にある音符自体にもアーティキュレーションや装飾を付けることができます。 + +@lilypond[verbatim,quote,relative=2] +1 c-^ e>2 4 8. 16 +@end lilypond + +しかしながら、いくつかの記譜要素 +-- 強弱記号、ヘアピン、それにスラーなど -- +は和音の中の音符ではなく、和音に付ける必要があります。@c +そうしなければ、譜刻されません。 + +@lilypond[verbatim,quote,relative=2] +1 \f ( ) \< \! +@end lilypond + +@cindex relative pitch, chords (和音と相対ピッチ) +@cindex chords, relative pitch (相対ピッチと和音) + +和音の中のピッチに対して相対モードを使うことができます。@c +各和音の最初の音符は常に、前の和音の最初の音符との相対関係で決まります。@c +前が和音でない場合は、その和音の前にある最後のピッチとの相対関係になります。@c +和音の中にある残りの音符はすべて @emph{同じ和音の中にある} +前の音符との相対関係になります。 + +@lilypond[verbatim,quote,relative=2] +1 +@end lilypond + +和音についての更なる情報は、@ref{Chord notation} を参照してください。 + + +@seealso +音楽用語集: +@rglos{chord} + +学習マニュアル: +@rlearning{音符を組み合わせて和音にする} + +記譜法リファレンス: +@ref{Chord notation}, +@ref{アーティキュレーションと装飾}, +@ref{相対オクターブ入力}, +@ref{複数のボイス} + +コード断片集: +@rlsr{Simultaneous notes} + +@knownissues +1 譜スペース内に 3 つ以上のピッチを保持している和音 +-- @samp{} など -- +では、符頭が重なります。@c +状況に応じて、適切な表記を用います + +@itemize + +@item +一時的に @ref{複数のボイス} を使用する -- @samp{<< f! \\ >>}, + +@item +いくつかのピッチを異名同音に書き換える -- @samp{}, + +@item +@ref{Clusters} + +@end itemize + +@node 和音の繰り返し +@unnumberedsubsubsec 和音の繰り返し +@translationof Chord repetition + +入力の手間を省くために、前の和音を繰り返すための短縮記法があります。@c +和音を繰り返すためのシンボルは @code{q} です: + +@lilypond[verbatim,quote,relative=2] +1 q 2 q +@end lilypond + +前の和音のピッチが複製されているだけなので、 +通常の和音と同様に、和音の繰り返しのシンボルにも演奏時間、@c +アーティキュレーション、マークアップ、スラー、連桁などを使うことができます。 + +@lilypond[verbatim,quote,relative=2] +1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +@end lilypond + +和音繰り返しのシンボルは常に最後の和音を覚えているため、@c +最後の和音の後に和音ではない音符や休符があったとしても、@c +和音を繰り返すことができます。 + +@lilypond[verbatim,quote,relative=2] +1 c4 q2 r8 q8 +@end lilypond + +しかしながら、和音繰り返しのシンボルは前の和音の強弱記号、@c +アーティキュレーション、あるいは装飾を持ち越しません。 + +@lilypond[verbatim,quote,relative=2] +1\sfz c4 q2 r8 q8 +@end lilypond + +@seealso +記譜法リファレンス: +@ref{Chord notation}, +@ref{アーティキュレーションと装飾} + +インストールされているファイル: +@file{ly/chord-repetition-init.ly} + + +@node 同時進行表記 +@unnumberedsubsubsec 同時進行表記 +@translationof Simultaneous expressions + +2 重山括弧で囲まれた 1 つあるいは複数の音楽表記は同時進行します。@c +最初の表記が単一の音符で始まる場合、@c +あるいは同時進行する表記全体が明らかに単一のボイスの中にある場合、@c +その表記全体は単一の譜の上に配置されます。@c +そうでない場合、同時進行する表記の要素は別々の譜の上に配置されます。 + +以下の例は 1 つの譜の上にある同時進行表記を示しています: + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +\new Voice { % 明らかに単一のボイスです + << { a4 b g2 } { d4 g c,2 } >> +} +@end lilypond + +@lilypond[quote,verbatim,relative=2] +% 単一の音符で始まります +a << {a4 b g} {d4 g c,} >> +@end lilypond + +これは同時進行するセクションが同一のリズムを持つ場合に役に立ちます。@c +しかしながら、異なる演奏時間を持つ音符を同じ符幹に取り付けようとすると@c +エラーとなります。 + +以下の例は、同時進行する表記が暗黙的に複数の譜を生成する様子を示しています: + +@c KEEP LY +@lilypond[quote,verbatim,relative=2] +% 単一の音符で始まりません +<< {a4 b g2} {d4 g2 c,4} >> +@end lilypond + +ここでは、リズムが異なっていても問題ありません。 + + +@node クラスタ +@unnumberedsubsubsec クラスタ +@translationof Clusters + +@cindex cluster (クラスタ) +@cindex note cluster (音符のクラスタ) + +@funindex \makeClusters +@funindex makeClusters + +クラスタは演奏すべき連続したピッチの範囲を示します。@c +クラスタは 1 組の音符の範囲 (envelope) として表されます。@c +クラスタはひと続きの和音に関数 @code{\makeClusters} +を適用することによって入力されます。@c +例えば以下のように: + +@lilypond[quote,relative=2,verbatim] +\makeClusters { 2 } +@end lilypond + +通常の音符とクラスタを同じ譜に一緒にして配置することができます +-- たとえ、それらが同時進行であってもです。@c +そのようなケースでは、通常の音符とクラスタの衝突を@c +自動的に回避しようとする試みは行われません。 + + +@seealso +音楽用語集: +@rglos{cluster} + +コード断片集: +@rlsr{Simultaneous notes} + +内部リファレンス: +@rinternals{ClusterSpanner}, +@rinternals{ClusterSpannerBeacon}, +@rinternals{Cluster_spanner_engraver} + + +@knownissues + +クラスタは少なくとも 2 つの和音を持つ場合にのみうまく譜刻されます。@c +さもなければ、あまりにも狭く譜刻されます。 + +クラスタは符幹を持たず、それ自体で演奏時間を示すことはできません。@c +しかしながら、譜刻されるクラスタの長さはクラスタを定義する和音の演奏時間に@c +よって決定されます。クラスタを分割するには、クラスタとクラスタの間に@c +分割するための休符が必要です。 + +クラスタは MIDI 出力を作り出しません。 + +@node 複数のボイス +@subsection 複数のボイス +@translationof Multiple voices + +このセクションでは複数のボイスあるいは複数の譜の中にある同時進行する音符に@c +ついて議論します。 + +@menu +* 単一譜の多声:: +* ボイス スタイル:: +* 衝突の解決:: +* 自動パート結合:: +* 音楽を並列に記述する:: +@end menu + + +@node 単一譜の多声 +@unnumberedsubsubsec 単一譜の多声 +@translationof Single-staff polyphony + +@cindex single-staff polyphony (単一譜の多声) +@cindex polyphony, single-staff (単一譜の多声) +@cindex voice (ボイス) +@cindex lyrics assigned to one voice (1 つのボイスに代入される歌詞) + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceOne ... \voiceFour +@funindex Voice +@funindex \oneVoice +@funindex oneVoice + +@strong{@i{明示的にボイスをインスタンス化する}} + +単一の譜の中に複数の独立したボイスを配置するのに必要とされる基本的な構造が@c +以下の例で示されています: + +@lilypond[quote,relative=3,verbatim] +\new Staff << + \new Voice = "first" + { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } + \new Voice= "second" + { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +@noindent +ここでは、ボイスは明示的にインスタンス化されていて、名前を与えられています。@c +@code{\voiceOne} ... @code{\voiceFour} コマンドはボイスをセット アップし、@c +それにより、1 番目と 3 番目のボイスは上向きの符幹を持ち、2 番目と 4 番目の@c +ボイスは下向きの符幹を持ち、3 番目と 4 番目のボイスの符頭は水平方向にずれて、@c +それぞれのボイスの中の休符は衝突を避けるために自動的に移動させられます。@c +@code{\oneVoice} コマンドはすべてのボイス設定をニュートラルなデフォルトの@c +向きに戻します。 + +@c passage: 楽節 +@strong{@i{一時的に多声となる楽節 (passage)}} + +一時的に多声となる楽節は以下のような構成で作成することができます: + +@example +<< @{ \voiceOne ... @} + \new Voice @{ \voiceTwo ... @} +>> \oneVoice +@end example + +@noindent +ここで、一時多声楽節の中の最初の表記は直前に使われていた +@code{Voice} コンテキストに配置され、@c +その @code{Voice} コンテキストは一時セクションの後も続いていきます。@c +山括弧の中の他の表記は別の一時ボイスに代入されます。@c +これと同様に、歌詞は多声セクションの前、最中、後に続いているボイスに@c +代入されます: + +@lilypond[quote, verbatim, relative=2] +<< + \new Voice = "melody" { + a4 + << + { + \voiceOne + g f + } + \new Voice { + \voiceTwo + d2 + } + >> + \oneVoice + e4 + } + \new Lyrics \lyricsto "melody" { + This is my song. + } +>> +@end lilypond + +@noindent +ここで、@code{\voiceOne} と @code{\voiceTwo} コマンドはそれぞれのボイスの@c +設定を定義するために必要とされています。 + +@strong{@i{2 重バックスラッシュ構造}} + +@code{<< @{...@} \\ @{...@} >>} 構造 +-- この中では 2 つ (あるいはそれ以上) の表記が +2 重バックスラッシュで区切られています -- +は、同じような構造だが 2 重バックスラッシュを持たない構造とは@c +まったく異なる振る舞いをします: +この構造の中にある @emph{すべての} 表記は新たな @code{Voice} コンテキストに@c +代入されます。@c +それらの新しい @code{Voice} コンテキストは暗黙的に作成され、@c +あらかじめ決められた名前 @code{"1"}, @code{"2"} などを与えられます。 + +最初の例は以下のように書き換えることができます: + +@lilypond[quote,relative=3,verbatim] +<< + { r8 r16 g e8. f16 g8[ c,] f e16 d } + \\ + { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +一時ボイスが作成され、それから消去されることが問題にならない場合に、@c +この構文を使用することができます。@c +暗黙的に作成されるボイスには、それらがコードの中で現れる順番に従って、@c +@code{\voiceOne} ... @code{\voiceFour} コマンドと同じ設定が与えられます。 + +以下の例では、真ん中のボイスは上向きの符幹を持ちます。@c +そのため、それを 3 番目に置いて、望みどおりに上向きの符幹を持つボイス 3 に@c +しています。@c +休符が 2 重に譜刻されることを避けるために、空白休符を使用しています。 + +@lilypond[quote,relative=3,verbatim] +<< + { r8 g g g g f16 ees f8 d } + \\ + { ees,8 r ees r d r d r } + \\ + { d'8 s c s bes s a s } +>> +@end lilypond + +簡単なことですが、@rlearning{コンテキストとエングラーバ} と +@rlearning{ボイスを明示的にインスタンス化する} で説明されているように、@c +明示的に @code{Voice} コンテキストを作成しておくと賢明です。 + +@strong{@i{ボイスの順序}} + +入力ファイルの中にある複数のボイスを譜刻する時、以下の順序で譜刻されます: + +@example +ボイス 1: 最上段 +ボイス 2: 最下段 +ボイス 3: 上から 2 番目 +ボイス 4: 下から 2 番目 +ボイス 5: 上から 3 番目 +ボイス 6: 下から 3 番目 +etc. +@end example + +これは直感に反するように見えるかもしれませんが、@c +自動レイアウト処理をシンプルにできます。@c +奇数番号のボイスには上向きの符幹が与えられ、@c +偶数番号のボイスには下向きの符幹が与えられるということに注意してください: + +@c KEEP LY +@lilypond[quote,verbatim] +\new Staff << + \time 2/4 + { f''2 } % 1: 最上段 + \\ + { c'2 } % 2: 最下段 + \\ + { d''2 } % 3: 上から 2 番 + \\ + { e'2 } % 4: 下から 2 番 + \\ + { b'2 } % 5: 上から 2 番 + \\ + { g'2 } % 6: 下から 3 番 +>> +@end lilypond + +@strong{@i{同一のリズム}} + +同じリズムを持ち、並行して進行する音楽を譜刻するという特殊なケースでは、@c +並行する音楽を単一の @code{Voice} の中に組み込み、@c +それにより和音を形成することができます。@c +これを実現するには、並行する音楽を明示的にインスタンス化されたボイス内の@c +同時進行音楽構造の中に置きます: + +@lilypond[quote,relative=2,verbatim] +\new Voice << + { e4 f8 d e16 f g8 d4 } + { c4 d8 b c16 d e8 b4 } +>> +@end lilypond + +この手法では、音楽が同じリズムを持たない場合に、@c +おかしな連桁と警告を生じます。 + + +@predefined +@code{\voiceOne}, +@code{\voiceTwo}, +@code{\voiceThree}, +@code{\voiceFour}, +@code{\oneVoice} +@endpredefined + + +@seealso +学習マニュアル: +@rlearning{音楽を保持するボイス}, +@rlearning{ボイスを明示的にインスタンス化する} + +記譜法リファレンス: +@ref{Percussion staves}, +@ref{不可視の休符}, +@ref{Stems} + +コード断片集: +@rlsr{Simultaneous notes} + + +@node ボイス スタイル +@unnumberedsubsubsec ボイス スタイル +@translationof Voice styles + +@cindex voice styles (ボイス スタイル) +@cindex styles, voice (ボイス スタイル) +@cindex coloring voices (ボイスに色を付ける) +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +ボイス毎に異なる色と形を与えて、容易に見分けられるようにすることができます: + +@lilypond[quote,relative=2,verbatim] +<< + { \voiceOneStyle d4 c2 b4 } + \\ + { \voiceTwoStyle e,2 e } + \\ + { \voiceThreeStyle b2. c4 } + \\ + { \voiceFourStyle g'2 g } +>> +@end lilypond + +@code{\voiceNeutralstyle} コマンドは標準の体裁に戻すために使用されます。 + + +@predefined +@code{\voiceOneStyle}, +@code{\voiceTwoStyle}, +@code{\voiceThreeStyle}, +@code{\voiceFourStyle}, +@code{\voiceNeutralStyle} +@endpredefined + + +@seealso +学習マニュアル: +@rlearning{私はボイスを聴いている}, +@rlearning{その他の情報源} + +コード断片集: +@rlsr{Simultaneous notes} + + +@node 衝突の解決 +@unnumberedsubsubsec 衝突の解決 +@translationof Collision resolution + +@cindex merging notes (音符に余白を設ける) +@cindex note collisions (音符の衝突) +@cindex collisions (衝突) +@cindex shift note (音符のシフト) +@cindex multiple voices +@cindex voices, multiple (複数のボイス) +@cindex polyphonic music (多声の音楽) +@cindex shifting voices (ボイスをずらす) +@cindex voices, multiple (複数のボイス) +@cindex shift rest, automatic (自動的な休符のシフト) +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn +@funindex \shiftOff +@funindex shiftOff +@funindex \mergeDifferentlyDottedOn +@funindex mergeDifferentlyDottedOn +@funindex \mergeDifferentlyDottedOff +@funindex mergeDifferentlyDottedOff +@funindex \mergeDifferentlyHeadedOn +@funindex mergeDifferentlyHeadedOn +@funindex \mergeDifferentlyHeadedOff +@funindex mergeDifferentlyHeadedOff + +同じピッチ、同じ符頭を持ち、符幹の方向が逆で異なるボイスの中にある符頭は@c +自動的に 1 つの符頭にまとめられます -- マージされます。@c +しかしながら、音符の符頭が異なっていたり、符幹の方向が同じである場合は@c +マージされません。@c +異なるボイスの中にあり、符幹の方向が逆の休符は垂直方向にずらされます。@c +以下の例は 3 つの異なる状態を示しています +-- 第 1 小節の 1, 3 拍目、それに第 2 小節の 1 拍目で自動マージが失敗しています。 + +@lilypond[quote,verbatim,relative=2] +<< + { + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +以下に示すように、異なる符頭を持つ音符をマージすることができます +-- 例外として、半音符と 4 分音符のマージはできません。@c +第 1 小節の 1 拍目の符頭がマージされました: + +@lilypond[quote,verbatim,relative=2] +<< + { + \mergeDifferentlyHeadedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +第 1 小節の 3 拍目のように異なる付点を持つ符頭もマージすることができます: + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + + +第 2 小節の最初の版音符と 8 分音符は正しくマージされていません。@c +なぜなら 3 つ以上の音符が同じ列に並ぶ場合、@c +自動マージは正しく機能できないからです。@c +今回のケースでは、マージされた符頭が間違っています。@c +マージが正しい符頭を選択できるようにするため、@c +マージすべきでない符頭に @code{\shift} を適用する必要があります。@c +ここでは、@code{\shiftOn} を適用することで、@c +最上段にある @notation{g} を列から外し、@c +@code{\mergeDifferentlyHeadedOn} を正しく機能させています。 + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + \shiftOn + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +@code{\shiftOn} コマンドは、ボイスの中にある音符がずれることを許可します +(強制はしません)。@c +@code{\shiftOn} がボイスに適用されると、そのボイスの中にある音符あるいは和音は、@c +同じ向きの符幹を持つ他のボイスと符幹が衝突する場合にのみ、ずらされます。@c +@code{\shiftOff} コマンドは、適用された時点から、@c +このタイプの音符の移動を禁止します。 + +デフォルトでは、@c +外側のボイス (通常はボイス 1 と 2) には @code{\shiftOff} が指定されていて、@c +内側のボイス (ボイス 3 以上) には @code{\shiftOn} が指定されています。@c +音符をずらす場合、上向きの符幹を持つボイス (奇数番号のボイス) は右側にずらされ、@c +下向きの符幹を持つボイス (偶数番号のボイス) は左側にずらされます。 + +簡略化された多声表記が内部的にどのように展開されるかをお見せするための@c +例を挙げます。 + +@warning{3 つ以上のボイスがある場合、@c +入力ファイルでのボイスの垂直方向の順序は、@c +譜上でのボイスの垂直方向の順序と同じにすべきではありません!} + +@c KEEP LY +@lilypond[quote,verbatim] +\new Staff \relative c'' { + %% 簡略化された入力 + << + { f2 } % 1: 最上段 + \\ + { g,2 } % 2: 最下段 + \\ + { d'2 } % 3: 真ん中の上側 + \\ + { b2 } % 4: 真ん中の下側 + >> + %% 上記の内部的な展開 + << + \new Voice = "1" { \voiceOne \shiftOff f'2 } + \new Voice = "2" { \voiceTwo \shiftOff g,2 } + \new Voice = "3" { \voiceThree \shiftOn d'2 } % shifts right + \new Voice = "4" { \voiceFour \shiftOn b2 } % shifts left + >> +} +@end lilypond + +さらに 2 つのコマンド -- @code{\shiftOnn} と @code{\shiftOnnn} -- は、@c +複雑な状況で衝突を解決するために一時的に指定されるさらに大きなずれを提供します。@c +@rlearning{実際の音楽からの例} を参照してください。 + +音符は符幹の向きが反対である場合 +(例えば、デフォルトのボイス 1 と 2 である場合や、@c +明示的に符幹の向きが反対になるよう指定されている場合) +にのみマージされます。 + + + +@predefined +@code{\mergeDifferentlyDottedOn}, +@code{\mergeDifferentlyDottedOff}, +@code{\mergeDifferentlyHeadedOn}, +@code{\mergeDifferentlyHeadedOff} + +@code{\shiftOn}, +@code{\shiftOnn}, +@code{\shiftOnnn}, +@code{\shiftOff} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{additional-voices-to-avoid-collisions.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{forcing-horizontal-shift-of-notes.ly} + + +@seealso +音楽用語集: +@rglos{polyphony} + +学習マニュアル: +@rlearning{同時に演奏する複数の音符}, +@rlearning{音楽を保持するボイス}, +@rlearning{オブジェクトの衝突} + +コード断片集: +@rlsr{Simultaneous notes} + +内部リファレンス: +@rinternals{NoteColumn}, +@rinternals{NoteCollision}, +@rinternals{RestCollision} + + +@ignore +@knownissues +上向きの符幹を持つ 8 分音符やそれよりも短い音符と下向きの符幹を持つ@c +半音符に対して @code{\mergeDifferentlyHeadedOn} を使用した場合、@c +8 分音符の符幹のオフセットはわずかに正しくなりません。@c +なぜなら、半音符の符頭シンボルと幅が異なるからです。 + +@c TODO investigate! Sometimes it works, sometimes not. --FV +The requirements for successfully merging different note heads that +are at the same time differently dotted are not clear. + +同じ和音の中で同じ音符が異なる臨時記号を持つ場合、その和音の衝突回避は@c +サポートされません。@c +そのような場合、異名同音 (エンハーモニック) に書き換えるか、@c +クラスタという特殊な記譜法 (@ref{クラスタ} を参照してください) +を用いることを推奨します。 +@end ignore + + +@node 自動パート結合 +@unnumberedsubsubsec 自動パート結合 +@translationof Automatic part combining + +@cindex automatic part combining (自動パート結合) +@cindex part combiner (パート結合) +@cindex combining parts (パート結合) +@cindex a due part (二重奏パート) +@cindex solo part (ソロ パート) +@funindex \partcombine +@funindex partcombine + +自動パート結合は 1 つの譜上にある 2 つのパートを 1 つに結合するために@c +使用されます。@c +これはオーケストラ譜を譜刻することを目的としています。@c +ある範囲で 2 つのパートが同一である場合、1 つだけが譜刻されます。@c +2 つのパートが異なる箇所では別々のボイスとして譜刻され、@c +符幹の向きは自動的にセットされます。@c +さらに、デフォルトで、ソロ パートと @notation{二重奏 (due)} パートが識別され、@c +デフォルトでマークを付けられます。 + +パート結合の構文は以下の通りです: + +@example +\partcombine @var{musicexpr1} @var{musicexpr2} +@end example + +以下の例はパート結合の基本的な機能を示しています: +パートを 1 つの譜に配置し、符幹の向きと多声をセットします。@c +個々のパートと結合譜で同じ変数が使用されています。 + +@lilypond[quote,verbatim] +instrumentOne = \relative c' { + 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 +} + +<< + \new Staff \instrumentOne + \new Staff \instrumentTwo + \new Staff \partcombine \instrumentOne \instrumentTwo +>> +@end lilypond + +第 3 小節の音符は、両方のパートで指定されているにもかかわらず、@c +1 パート分だけ譜刻されています。@c +符幹、スラーそれにタイの向きは、ソロなのかあるいは斉奏なのかによって、@c +自動的に設定されます。@c +多声が必要になる場合、第 1 パート (@code{one} と呼ばれるコンテキストを持ちます) +は常に上向きの符幹を持ち、@c +一方、第 2 パート (@code{two} と呼ばれるコンテキストを持ちます) は@c +常に下向きの符幹を持ちます。@c +ソロの場合、第 1 パートと第 2 パートにはそれぞれ @q{Solo} と @q{Solo II} +というマークが付けられます。@c +斉奏 (@notation{二重奏}) パートには、デフォルトで、テキスト @qq{a2} という@c +マークが付けられます。 + +@code{\partcombine} の引数は 2 つとも @code{Voice} コンテキストとして@c +解釈されます。@c +相対オクターブを用いる場合、@code{\relative} を両方の音楽表記に@c +対して指定すべきです。@c +すなわち、 + +@example +\partcombine + \relative @dots{} @var{musicexpr1} + \relative @dots{} @var{musicexpr2} +@end example + +@noindent +@code{\partcombine} の外側にある @code{\relative} セクションは @var{musicexpr1} +と @var{musicexpr2} のピッチには影響を与えません。 + +プロの楽譜では、@c +1, 2 の音符が同時進行していて容易にユニゾンとして譜刻できる場合であっても、 +長い間ボイスが分かれていることがしばしばあります。@c +@c その場合、音符を結合させて和音にしたり、@c +@c ボイスの 1 つをソロとして見せることは望ましくありません +@c 未訳 +Combining notes into a chord, or showing one voice as solo +is therefore not ideal as the @code{\partcombine} function considers +each note separately. +そのため、以下のコマンドで @code{\partcombine} 関数を@c +オーバライドすることができます: + +@itemize +@item +@code{\partcombineApart}, @code{\partcombineApartOnce}: +音符を結合させて和音やユニゾンにすることができる場合であっても、@c +音符を 2 つの別個のボイスに分けて譜刻します。 + +@item +@code{\partcombineChords}, @code{\partcombineChordsOnce}: +音符を結合させて、和音として譜刻します。 + +@item +@code{\partcombineUnisono}, @code{\partcombineUnisonoOnce}: +2 つのボイスをユニゾンとして譜刻します。 + +@item +@code{\partcombineSoloI}, @code{\partcombineSoloIOnce}: +ボイス 1 だけを譜刻して、ソロのマークを付けます。 + +@item +@code{\partcombineSoloII}, @code{\partcombineSoloIIOnce}: +ボイス 2 だけを譜刻して、ソロのマークを付けます。 + +@item +@code{\partcombineAutomatic}, @code{\partcombineAutomaticOnce}: +上記の特殊コマンドの効果を終わらせ、デフォルトのパート結合機能に戻します。 + +@end itemize + +終わりが @code{...Once} のコマンドはすべて、その後の音符にのみ適用されます。 + +@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 | +} +instrumentTwo = \relative c' { + c2 c | + e2 e | + a,2 c | + c2 c' | + c2 c | + c2 c | +} + +<< + \new Staff { \instrumentOne } + \new Staff { \instrumentTwo } + \new Staff { \partcombine \instrumentOne \instrumentTwo } +>> +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{combining-two-parts-on-the-same-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-partcombine-texts.ly} + + +@seealso +音楽用語集: +@rglos{a due}, +@rglos{part} + +記譜法リファレンス: +@ref{Writing parts} + +コード断片集: +@rlsr{Simultaneous notes} + +内部リファレンス: +@rinternals{PartCombineMusic}, +@rinternals{Voice} + + +@knownissues + +@code{\partcombine} が受け取れるボイスは 2 つだけです。 + +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} を @code{\times} の中に置くことはできません。 + +@code{\partcombine} を @code{\relative} の中に置くことはできません。 + +内部的には、@code{\partcombine} は 2 つの引数を @code{Voice} として解釈し、@c +2 つのパートを結合することができるかどうかを決定します。@c +2 つのパートが異なる演奏時間を持つ場合、@c +それらを結合させることはできず、@c +それぞれに @code{one}, @code{two} という名前が与えられます。@c +@c 未訳 +Consequently, if the arguments switch to +differently named @rinternals{Voice} contexts, the events in those will +be ignored. +同様に、パート結合は歌詞に対して機能するようには設計されていません。@c +ボイスの 1 つが、歌詞を持つために明示的に名前を付けられた場合、@c +パート結合は機能しなくなります。 + +@code{\partcombine} は @code{\partcombine} の開始後の音符だけを観察します。@c +その前に開始した音符が演奏中であるかどうかを検出することはできません。@c +これはさまざまな問題を引き起こします。 + + +@c ここから L954 +@node 音楽を並列に記述する +@unnumberedsubsubsec 音楽を並列に記述する +@translationof Writing music in parallel + +@cindex writing music in parallel (音楽を並列に記述する) +@cindex interleaved music (間奏) +@cindex parallel music (並列な音楽) +@funindex \parallelMusic +@funindex parallelMusic + +複数のパートを持つ音楽を入力コードの途中に挿入することができます。@c +関数 @code{\parallelMusic} は、@c +作成する変数名をいくつか持つリストと音楽表記を受け付けます。@c +各小節ごとの音楽表記は各変数の値となり、@c +後で音楽を譜刻するために使用することができます。 + +@warning{小節チェック @code{|} を使用する必要があり、@c +各小節は同じ長さでなければなりません。} + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | + r16 e'8.~ e'4 r16 e'8.~ e'4 | + c'2 c'2 | + + % Bar 2 + r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | + r16 d'8.~ d'4 r16 d'8.~ d'4 | + c'2 c'2 | + +} +\new StaffGroup << + \new Staff << \voiceA \\ \voiceB >> + \new Staff { \clef bass \voiceC } +>> +@end lilypond + +相対モードを使用することができます。@c +@code{\relative} コマンドを @code{\parallelMusic} 自体の中では@c +使用しないということに注意してください。@c +音符が前の音符と相対関係になるのはボイスの中であり、入力の中ではありません -- +言い換えると、@code{voiceA} の相対音符は @code{voiceB} の音符を無視します。 + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g16 c e g, c e r8 g,16 c e g, c e | + r16 e8.~ e4 r16 e8.~ e4 | + c2 c | + + % Bar 2 + r8 a,16 d f a, d f r8 a,16 d f a, d f | + r16 d8.~ d4 r16 d8.~ d4 | + c2 c | + + } +\new StaffGroup << + \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> + \new Staff \relative c' { \clef bass \voiceC } +>> +@end lilypond + +これはピアノ譜で非常に良く機能します。@c +以下の例は、4 つの連続する小節を 4 つの変数に割り当てています: + +@lilypond[quote,verbatim] +global = { + \key g \major + \time 2/4 +} + +\parallelMusic #'(voiceA voiceB voiceC voiceD) { + % Bar 1 + a8 b c d | + d4 e | + c16 d e fis d e fis g | + a4 a | + + % Bar 2 + e8 fis g a | + fis4 g | + e16 fis g a fis g a b | + a4 a | + + % Bar 3 ... +} + +\score { + \new PianoStaff << + \new Staff { + \global + << + \relative c'' \voiceA + \\ + \relative c' \voiceB + >> + } + \new Staff { + \global \clef bass + << + \relative c \voiceC + \\ + \relative c \voiceD + >> + } + >> +} +@end lilypond + + +@seealso +学習マニュアル: +@rlearning{変数を用いて楽曲を編成する} + +コード断片集: +@rlsr{Simultaneous notes} diff --git a/Documentation/ja/notation/staff.itely b/Documentation/ja/notation/staff.itely new file mode 100644 index 0000000000..6c8df354b4 --- /dev/null +++ b/Documentation/ja/notation/staff.itely @@ -0,0 +1,1503 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 7cd8c1d1e389edc26c26b7eba8358578329f5881 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 譜の記譜法 +@section 譜の記譜法 +@translationof Staff notation + +@lilypondfile[quote]{staff-headword.ly} + +このセクションでは、譜の見た目を変える方法、複数の譜を持つ楽譜を譜刻する方法、@c +それに、テンポ指示と演奏指示楽節の音符を譜に付け加える方法について説明します。 + +@menu +* 譜を表示する:: +* 個々の譜を変更する:: +* パートを記述する:: +@end menu + + +@node 譜を表示する +@subsection 譜を表示する +@translationof Displaying staves + +このセクションでは、譜を作成する方法と、@c +譜をグループ化する方法をいくつか説明します。 + +@menu +* 新たに譜をインスタンス化する:: +* 譜をグループ化する:: +* ネストされた譜グループ:: +* Separating systems:: +@end menu + + +@node 新たに譜をインスタンス化する +@unnumberedsubsubsec 新たに譜をインスタンス化する +@translationof Instantiating new staves + +@cindex new staff (新しい譜) +@cindex staff initiation (譜の開始) +@cindex staff instantiation (譜のインスタンス化) +@cindex staff, new (新しい譜) +@cindex staff, single (単一の譜) +@cindex staff, drum (ドラム譜) +@cindex staff, percussion (打楽器譜) +@cindex drum staff (ドラム譜) +@cindex percussion staff (打楽器譜) +@cindex Gregorian transcription staff (グレゴリア編曲譜) +@cindex rhythmic staff (リズム譜) +@cindex tabstaff (タブ譜) +@cindex tablature (タブ譜) + +@funindex \drummode +@funindex drummode +@funindex DrumStaff +@funindex RhythmicStaff +@funindex TabStaff +@funindex MensuralStaff +@funindex VaticanaStaff +@funindex GregorianTranscriptionStaff + +@notation{stave: 譜} (@notation{staff}: 譜 (表) の単称) は +@code{\new} コマンドや @code{\context} コマンドで作成されます。@c +詳細は @ref{Creating contexts} を参照してください。 + +基本的な譜コンテキストは @code{Staff} です: + +@lilypond[verbatim,quote,relative=2] +\new Staff { c4 d e f } +@end lilypond + +@code{DrumStaff} コンテキストは、一般的なドラム セットのための 5 線譜を@c +作成します。@c +各楽器は異なるシンボルで示されます。@c +@code{\drummode} コマンドの後に続けて、楽器をドラム モードで入力します。@c +各楽器は名前によって指定されます。@c +詳細は @ref{Percussion staves} を参照してください。 + +@lilypond[verbatim,quote] +\new DrumStaff { + \drummode { cymc hh ss tomh } +} +@end lilypond + +@code{RhythmicStaff} は、入力のリズム価だけを表示する単線譜を作成します。@c +(ピッチは無視されますが) 演奏時間が保持されます。@c +詳細は @ref{旋律のリズムを示す} を参照してください。 + +@lilypond[verbatim,quote,relative=2] +\new RhythmicStaff { c4 d e f } +@end lilypond + +@code{TabStaff} は、標準のギター チューニングの 6 弦のタブ譜を作成します。@c +詳細は @ref{Default tablatures} を参照してください。 + +@lilypond[verbatim,quote,relative=2] +\new TabStaff { c4 d e f } +@end lilypond + +古代音楽の記譜法のために 2 つの譜コンテキストが用意されています: +@code{MensuralStaff} と @code{VaticanaStaff} です。@c +これらのことは @ref{Pre-defined contexts} で説明されています。 + +@code{GregorianTranscriptionStaff} コンテキストは、@c +現代グレゴリア聖歌を記譜するための譜を作成します。@c +これは小節線を譜刻しません。 + +@lilypond[verbatim,quote,relative=2] +\new GregorianTranscriptionStaff { c4 d e f e d } +@end lilypond + +新たに単一譜コンテキストを定義する場合があります。@c +詳細は @ref{Defining new contexts} を参照してください。 + + +@seealso +音楽用語集: +@rglos{staff}, +@rglos{staves} + +記譜法リファレンス: +@ref{Creating contexts}, +@ref{Percussion staves}, +@ref{旋律のリズムを示す}, +@ref{Default tablatures}, +@ref{Pre-defined contexts}, +@ref{譜シンボル}, +@ref{Gregorian chant contexts}, +@ref{Mensural contexts}, +@ref{Defining new contexts} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{Staff}, +@rinternals{DrumStaff}, +@rinternals{GregorianTranscriptionStaff}, +@rinternals{RhythmicStaff}, +@rinternals{TabStaff}, +@rinternals{MensuralStaff}, +@rinternals{VaticanaStaff}, +@rinternals{StaffSymbol} + + +@node 譜をグループ化する +@unnumberedsubsubsec 譜をグループ化する +@translationof Grouping staves + +@cindex start of system (システムの開始) +@cindex staff, multiple (複数の譜) +@cindex staves, multiple (複数の譜) +@cindex system start delimiters (システム開始の境界線) +@cindex bracket, vertical (垂直の角括弧) +@cindex brace, vertical (垂直の波括弧) +@cindex choir staff (合唱譜) +@cindex grand staff (グランド譜) +@cindex piano staff (ピアノ譜) +@cindex staff group (譜グループ) +@cindex staff, choir (合唱譜) +@cindex staff, piano (ピアノ譜) +@cindex staff, grand (グランド譜) +@cindex system (システム) + +複数の譜からなるシステムを形成するために譜をグループ化する@c +さまざまなコンテキストが存在します。@c +グループ化を行うコンテキストはそれぞれにシステム開始境界線のスタイルと@c +小節線の振る舞いを設定します。 + +コンテキストが指定されていない場合、デフォルトのプロパティが使用されます: +グループは垂直の線で始まり、小節線はつながりません。 + +@lilypond[verbatim,quote,relative=2] +<< + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +@code{StaffGroup} コンテキストでは、グループは角括弧で始まり、@c +小節線はすべての譜を貫いて刻譜されます。 + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +@code{ChoirStaff} では、グループは角括弧で始まりますが、小節線はつながりません。 + +@lilypond[verbatim,quote,relative=2] +\new ChoirStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +@code{GrandStaff} では、グループは波括弧で始まり、小節線はすべての譜を貫きます。 + +@lilypond[verbatim,quote,relative=2] +\new GrandStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +@code{PianoStaff} は @code{GrandStaff} と同一ですが、@c +例外として楽器名を刻譜することができます。@c +詳細は @ref{楽器名} を参照してください。 + +@lilypond[verbatim,quote,relative=2] +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +各譜グループ化コンテキストはプロパティ @code{systemStartDelimiter} を@c +以下の値の 1 つにセットします: +@code{SystemStartBar}, @code{SystemStartBrace} あるいは +@code{SystemStartBracket}。@c +4 つ目の境界線 -- @code{SystemStartSquare} も利用可能ですが、@c +これは明示的に指定する必要があります。 + +新たな譜グループ化コンテキストを定義することもできます。@c +詳細は @ref{Defining new contexts} を参照してください。 + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{use-square-bracket-at-the-start-of-a-staff-group.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{display-bracket-with-only-one-staff-in-a-system.ly} + +@c 未訳 +@cindex mensurstriche layout +@cindex renaissance music) +@cindex transcription of mensural music +@cindex mensural music, transcription of + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + + +@seealso +音楽用語集: +@rglos{brace}, +@rglos{bracket}, +@rglos{grand staff} + +記譜法リファレンス: +@ref{楽器名}, +@ref{Defining new contexts} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{Staff}, +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare} + +@knownissues +デフォルトでは @code{PianoStaff} は @code{ChordNames} を受け付けません。 + + +@node ネストされた譜グループ +@unnumberedsubsubsec ネストされた譜グループ +@translationof Nested staff groups + +@cindex staff, nested (ネストされた譜) +@cindex staves, nested (ネストされた譜) +@cindex nesting of staves (譜をネストする) +@cindex system start delimiters, nested (ネストされたシステムの開始境界線) +@cindex nested staff brackets (ネストされた譜の角括弧) +@cindex brackets, nesting of (角括弧をネストする) +@cindex braces, nesting of (波括弧をネストする) + +譜グループ化コンテキストは任意の深さにネストすることができます。@c +そうした場合、それぞれの子コンテキストは、@c +親グループの角括弧に隣接して新しい角括弧を作成します。 + +@lilypond[verbatim,quote,relative=2]@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c2 c | c2 c } + \new StaffGroup << + \new Staff { g2 g | g2 g } + \new StaffGroup \with { + systemStartDelimiter = #'SystemStartSquare + } + << + \new Staff { e2 e | e2 e } + \new Staff { c2 c | c2 c } + >> + >> +>> +@end lilypond + +新たにネストされた譜グループ化コンテキストを定義することができます。@c +詳細は @ref{Defining new contexts} を参照してください。 + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{nesting-staves.ly} + + +@seealso +記譜法リファレンス: +@ref{譜をグループ化する}, +@ref{楽器名}, +@ref{Defining new contexts} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare} + +@c 未訳 +@node Separating systems +@unnumberedsubsubsec Separating systems + +@cindex system separator mark + +If the number of systems per page changes from page to page it is +customary to separate the systems by placing a system separator mark +between them. By default the system separator is blank, but can be +turned on with a @code{\paper} option. + +@c \book is required here to display the system separator +@c ragged-right is required as there are two systems +@lilypond[verbatim,quote,ragged-right] +\book { + \score { + \new StaffGroup << + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + >> + } + \paper { + system-separator-markup = \slashSeparator + % following commands are needed only to format this documentation + paper-width = 100\mm + paper-height = 100\mm + tagline = ##f + } +} +@end lilypond + +@seealso +Notation Reference: +@ref{Page layout}. + +Snippets: +@rlsr{Staff notation}. + + +@node 個々の譜を変更する +@subsection 個々の譜を変更する +@translationof Modifying single staves + +このセクションでは、譜の属性を変更する方法について説明します: +例えば、譜線の本数や譜サイズを変更します。@c +譜を開始/終了する方法とオッシア セクションをセットする方法についても記述します。 + +@menu +* 譜シンボル:: +* オッシア譜:: +* 譜を隠す:: +@end menu + + +@node 譜シンボル +@unnumberedsubsubsec 譜シンボル +@translationof Staff symbol + +@cindex adjusting staff symbol (譜シンボルを調節する) +@cindex drawing staff symbol (譜シンボルを描く) +@cindex staff symbol, setting of (譜シンボルを設定する) +@cindex staff symbol, drawing (譜シンボルを描く) +@cindex stop staff lines (譜線の譜刻を停止する) +@cindex start staff lines (譜線の譜刻を開始する) +@cindex staff lines, amount of (譜線の本数) +@cindex staff lines, number of (譜線の本数) +@cindex staff line, thickness of (譜線の太さ) +@cindex amount of staff lines (譜線の本数) +@cindex thickness of staff lines (譜線の太さ) +@cindex ledger lines, setting (加線を設定する) +@cindex setting of ledger lines (加線の設定) +@cindex spacing of ledger lines (加線の間隔) +@cindex number of staff lines (譜線の本数) + +譜の線は @code{StaffSymbol} グラフィカル オブジェクトに属します。@c +@code{StaffSymbol} プロパティを変更して、譜の見た目を変えることができます。@c +しかしながら、変更は譜を作成する前に行う必要があります。 + +譜線の本数を変えることもできます。音部記号の位置とミドル C の位置を、@c +新しい譜にフィットさせるために、変更する必要があるかもしれません。@c +具体例は、@ref{音部記号} にあるコード断片集セクションを参照してください。 + +@lilypond[verbatim,quote,relative=2] +\new Staff \with { + \override StaffSymbol #'line-count = #3 +} +{ d4 d d d } +@end lilypond + +譜線の太さを変えることができます。加線 (訳者注: ledger line, 譜の上下に@c +突き出た符頭と符幹に付けられる短い譜線) と符幹の太さも影響を受けます。@c +なぜなら、それらの太さは譜線の太さに基づいているからです。 + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'thickness = #3 +} +{ e4 d c b } +@end lilypond + +加線の太さを譜線の太さから独立して設定することができます。@c +以下の例では、2 つの数は譜線の太さと譜線の間隔に掛けられる因子です。@c +2 つを足し合わせて加線の太さになります。 + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) +} +{ e4 d c b } +@end lilypond + +譜線の間隔を変えることができます。この設定は加線の間隔にも影響を与えます。 + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'staff-space = #1.5 +} +{ a4 b c d } +@end lilypond + +@code{StaffSymbol} のプロパティについて更に詳細な説明が +@rinternals{staff-symbol-interface} に記述されています。 + +@cindex stopping a staff (譜の停止) +@cindex starting a staff (譜の開始) +@cindex staff, starting (譜の開始) +@cindex staff, stopping (譜の停止) + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +楽譜の途中で譜プロパティに変更を加えるには、@c +@code{\stopStaff} と @code{\startStaff} の間で行います。 + +@lilypond[verbatim,quote,relative=2] +c2 c +\stopStaff +\override Staff.StaffSymbol #'line-count = #2 +\startStaff +b2 b +\stopStaff +\revert Staff.StaffSymbol #'line-count +\startStaff +a2 a +@end lilypond + +@noindent +一般的に言うと、@code{\stopStaff} と @code{\startStaff} を用いることで、@c +楽譜の途中で譜を停止あるいは再開することができます。 + +@lilypond[verbatim,quote,relative=2] +c4 b a2 +\stopStaff +b4 c d2 +\startStaff +e4 d c2 +@end lilypond + + +@predefined +@code{\startStaff}, +@code{\stopStaff} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-some-staff-lines-thicker-than-the-others.ly} + + +@seealso +音楽用語集: +@rglos{line}, +@rglos{ledger line}, +@rglos{staff} + +記譜法リファレンス: +@ref{音部記号} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{StaffSymbol}, +@rinternals{staff-symbol-interface} + + +@node オッシア譜 +@unnumberedsubsubsec オッシア譜 +@translationof Ossia staves + +@c 未訳 +@cindex staff, Frenched +@cindex ossia (オッシア) +@c 未訳 +@cindex Frenched staves +@cindex staff, resizing of (譜をリサイズする) +@cindex resizing of staves (譜をリサイズする) + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +適切な位置で新しく同時進行の譜を作成することによって、@c +@notation{オッシア} 譜をセットすることができます: + +@lilypond[verbatim,quote] +\new Staff \relative c'' { + c4 b d c + << + { c4 b d c } + \new Staff { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +@noindent +しかしながら、上の例は通常は望ましいものではありません。@c +オリジナルの譜の上にあり、拍子記号や音部記号を持たず、@c +小さなサイズのフォントを使用するオッシア譜を作成するには調整が必要です。@c +学習マニュアルの @rlearning{音楽表記をネストする} に望ましいオッシア譜を@c +作成するための方法が記述されています。 + +以下の例は、オッシア譜をオリジナルの譜の上に配置するために +@code{alignAboveContext} プロパティを用いています。@c +この手法は、2, 3 のオッシア譜が必要とされているだけである場合であれば、@c +最も適切な方法です。 + +@lilypond[verbatim,quote] +\new Staff = main \relative c'' { + c4 b d c + << + { c4 b d c } + + \new Staff \with { + \remove "Time_signature_engraver" + alignAboveContext = #"main" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + firstClef = ##f + } + { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +多くの別個のオッシア譜が必要である場合、@c +ある特有の @emph{コンテキスト ID} を持つ空の @code{Staff} コンテキストを@c +作成する方が適切かもしれません: +このコンテキストを @emph{呼び出し}、@c +オッシア譜が必要とされる場所で @code{\startStaff} と @code{\stopStaff} +を用いることでオッシア譜が作成されます。@c +この手法の利点は、以下の例よりも長い楽曲であれば、明らかです。 + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + { \stopStaff s1*6 } + + \new Staff \relative c' { + c4 b c2 + << + { e4 f e2 } + \context Staff = ossia { + \startStaff e4 g8 f e2 \stopStaff + } + >> + g4 a g2 \break + c4 b c2 + << + { g4 a g2 } + \context Staff = ossia { + \startStaff g4 e8 f g2 \stopStaff + } + >> + e4 d c2 + } +>> +@end lilypond + +オッシア譜を作成するための代替手段として、@c +@code{\RemoveEmptyStaffContext} コマンドが用いられるかもしれません。@c +この手法は、オッシア譜が改行の直後に発生する場合、最も便利な手法です。@c +@c そのようなケースでは、空白休符を使用する必要はまったくありません: +@c @code{\startStaff} と @code{\stopStaff} が必要であるだけです。@c +@code{\RemoveEmptyStaffContext} についての更なる情報は、@c +@ref{譜を隠す} を参照してください。 + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } \relative c'' { + R1*3 + c4 e8 d c2 + } + \new Staff \relative c' { + c4 b c2 + e4 f e2 + g4 a g2 \break + c4 b c2 + g4 a g2 + e4 d c2 + } +>> + +\layout { + \context { + \Staff \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligning-ossias-and-lyrics.ly} + + +@seealso +音楽用語集: +@rglos{ossia}, +@rglos{staff}, +@rglos{Frenched staff} + +学習マニュアル: +@rlearning{音楽表記をネストする}, +@rlearning{オブジェクトのサイズ}, +@rlearning{オブジェクトの長さと太さ} + +記譜法リファレンス: +@ref{譜を隠す} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{StaffSymbol} + + +@node 譜を隠す +@unnumberedsubsubsec 譜を隠す +@translationof Hiding staves + +@c 未訳 +@cindex Frenched score +@c 未訳 +@cindex Frenched staff +@cindex staff, hiding (譜を隠す) +@cindex staff, empty (空の譜) +@cindex hiding of staves (譜を隠す) +@cindex empty staves (空の譜) + +@funindex \RemoveEmptyStaves +@funindex Staff_symbol_engraver +@funindex \stopStaff +@funindex stopStaff + +@code{Staff} コンテキストから @code{Staff_symbol_engraver} を@c +削除することによって、譜線を隠すことができます。@c +そうする代わりに、@code{\stopStaff} を用いることもできます。 + +@lilypond[verbatim,quote] +\new Staff \with { + \remove "Staff_symbol_engraver" +} +\relative c''' { a8 f e16 d c b a2 } +@end lilypond + +@c 未訳: Frenched Score +@code{\layout} ブロックの中で +@code{\RemoveEmptyStaffContext} コマンドをセットすることによって、@c +空の譜を隠すことができます。@c +オーケストラ譜では、@c +このようなスタイルの譜は @q{Frenched Score} として知られています。@c +デフォルトでは、このコマンドは@c +最初のシステム以外のところにあるすべての空の譜を隠して、削除します。 + +@warning{譜が空であると見なされるのは、@c +それが複数小節にわたる休符、休符、スキップ、空白休符、@c +あるいはそれらの要素の組み合わせだけで構成されている場合です。} + +@lilypond[verbatim,quote,ragged-right] +\layout { + \context { + \Staff \RemoveEmptyStaves + } +} + +\relative c' << + \new Staff { + e4 f g a \break + b1 \break + a4 b c2 + } + \new Staff { + c,4 d e f \break + R1 \break + f4 g c,2 + } +>> +@end lilypond + +@cindex ossia (オッシア) + +@noindent +譜に対してオッシア セクションを作成するために、@c +@code{\RemoveEmptyStaffContext} を用いることもできます。@c +詳細は @ref{オッシア譜} を参照してください。 + +@cindex hiding ancient staves (古代譜を隠す) +@cindex hiding rhythmic staves (リズム譜を隠す) + +@funindex \RemoveEmptyStaves + +古代音楽コンテキストの中にある空の譜を隠すために、@c +@code{\VaticanaStaff \RemoveEmptyStaves} コマンドが用いられることがあります。@c +同様に、空の @code{RhythmicStaff} コンテキストを隠すために、@c +@code{\RhythmicStaff \RemoveEmptyStaves} が用いられることがあります。 + + +@predefined +@code{\Staff \RemoveEmptyStaves}, +@code{\VaticanaStaff \RemoveEmptyStaves}, +@code{\RhythmicStaff \RemoveEmptyStaves} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{removing-the-first-empty-line.ly} + + +@seealso +音楽用語集: +@rglos{Frenched staff} + +学習マニュアル: +@rlearning{オブジェクトの可視性と色} + +記譜法リファレンス: +@ref{Changing context default settings}, +@ref{譜シンボル}, +@ref{オッシア譜} +@ref{Hidden notes}, +@ref{不可視の休符}, +@ref{Visibility of objects} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{ChordNames}, +@rinternals{FiguredBass}, +@rinternals{Lyrics}, +@rinternals{Staff}, +@rinternals{VerticalAxisGroup}, +@rinternals{Staff_symbol_engraver} + + +@knownissues + +@code{Staff_symbol_engraver} を削除すると、小節線も隠されます。@c +小節線が強制的に可視になるよう設定されている場合、@c +フォーマット エラーが発生するかもしれません。@c +そのような場合は、エングラーバを削除する代わりに、@c +以下のオーバライドを使用してください: + +@example +\override StaffSymbol #'stencil = ##f +\override NoteHead #'no-ledgers = ##t +@end example + +@code{\Staff \RemoveEmptyStaves} に関連する既知の問題と警告は +@ref{Changing context default settings} を参照してください。 + + +@node パートを記述する +@subsection パートを記述する +@translationof Writing parts + +このセクションでは、テンポ指示と楽器名を楽譜に挿入する方法について説明します。@c +他のボイスを引用する方法と、演奏指示音符を譜刻する方法についても記述します。 + +@menu +@c * メトロノーム記号:: +* 楽器名:: +* 他のボイスを引用する:: +* 合図音符をフォーマットする:: +@end menu + + +@ignore +@node メトロノーム記号 +@unnumberedsubsubsec メトロノーム記号 +@translationof Metronome marks + +@cindex tempo (テンポ) +@cindex beats per minute (1 分間あたりの拍数) +@cindex metronome marking (メトロノーム記号) +@cindex metronome marking with text (テキストのメトロノーム記号) + +@funindex \tempo +@funindex tempo + +基本的なメトロノーム記号は単純に以下のように記述します: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 120 +c2 d +e4. d8 c2 +@end lilypond + +上記の代わりに、テキストのテンポ指示を用いることもできます: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +c4 e d c +b4. a16 b c4 r4 +@end lilypond + +メトロノーム記号とテキストを組み合わせると、メトロノーム記号は自動的に括弧で@c +囲まれます: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegro" 4 = 160 +g4 c d e +d4 b g2 +@end lilypond + +一般的に、テキストは任意のマークアップ オブジェクトになり得ます: + +@lilypond[verbatim,quote,relative=2] +\tempo \markup { \italic Faster } 4 = 132 +a8-. r8 b-. r gis-. r a-. r +@end lilypond + +テキストの指示無しにメトロノーム記号を括弧で囲むには、入力に空の文字列を@c +含めます: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-tempo-without-a-metronome-mark.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-metronome-marks-in-markup-mode.ly} + +更なる詳細は、@ref{テキストをフォーマットする} を参照してください。 + + +@seealso +音楽用語集: +@rglos{metronome}, +@rglos{metronomic indication}, +@rglos{tempo indication}, +@rglos{metronome mark} + +記譜法リファレンス: +@ref{テキストをフォーマットする}, +@ref{MIDI 出力} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{MetronomeMark} +@end ignore + +@node 楽器名 +@unnumberedsubsubsec 楽器名 +@translationof Instrument names + +@cindex instrument names (楽器名) +@cindex instrument names, short (短縮楽器名) + +@code{Staff}, @code{PianoStaff}, @code{StaffGroup}, @code{GrandStaff} +それに @code{ChoirStaff} コンテキストの中にある譜の左側に、@c +楽器名を譜刻することができます。@c +@code{instrumentName} の値が最初の行の譜に対して使用され、@c +@code{shortInstrumentName} の値がそれに続くすべての@c +行の譜に対して使用されます。 + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"Violin " +\set Staff.shortInstrumentName = #"Vln " +c4.. g'16 c4.. g'16 +\break +c1 +@end lilypond + +マークアップ モードを用いて、より複雑な楽器名を作成することができます: + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = \markup { + \column { "Clarinetti" + \line { "in B" \smaller \flat } } } +c4 c,16 d e f g2 +@end lilypond + +@cindex instrument names, centering (楽器名を中央揃えする) + +2 つ以上の譜コンテキストが一緒になってグループ化されている場合、@c +デフォルトでは楽器名と短縮楽器名は中央揃えされます。@c +複数行にわたる楽器名を中央揃えするには、@c +@code{\center-column} を用いる必要があります: + +@lilypond[verbatim,quote,indent=1.5\cm,relative=2] +<< + \new Staff { + \set Staff.instrumentName = #"Flute" + f2 g4 f + } + \new Staff { + \set Staff.instrumentName = \markup \center-column { + Clarinet + \line { "in B" \smaller \flat } + } + c4 b c2 + } +>> +@end lilypond + +@funindex indent +@funindex short-indent + +しかしながら、楽器名が長い場合、@code{indent} 設定と @code{short-indent} +設定の値を増やさない限り、譜グループの中にある楽器名は中央揃えされません。@c +これらの設定についての詳細は @ref{\paper variables for shifts and indents} +を参照してください。 + +@lilypond[verbatim,quote,ragged-right] +\layout { + indent = 3.0\cm + short-indent = 1.5\cm +} + +\relative c'' << + \new Staff { + \set Staff.instrumentName = #"Alto Flute in G" + \set Staff.shortInstrumentName = #"Fl." + f2 g4 f \break + g4 f g2 + } + \new Staff { + \set Staff.instrumentName = #"Clarinet" + \set Staff.shortInstrumentName = #"Clar." + c,4 b c2 \break + c2 b4 c + } +>> +@end lilypond + +@cindex instrument names, adding to other contexts (楽器名を他のコンテキストに付け加える) + +楽器名を他のコンテキスト (@code{ChordNames} や @code{FiguredBass} など) +に付け加えるには、 +そのコンテキストに @code{Instrument_name_engraver} を追加する必要があります。@c +詳細は @ref{Modifying context plug-ins} を参照してください。 + +@cindex instrument names, changing (楽器名を変更する) +@cindex changing instrument names (楽器名を変更する) + +楽曲の途中で楽器名を変更することもできます。@c +しかしながら、@code{instrumentName} は最初の行の譜にしか表示されないため、@c +楽曲の途中では表示されないことを思い出してください: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"First" +\set Staff.shortInstrumentName = #"one" +c1 c c c \break +c1 c c c \break +\set Staff.instrumentName = #"Second" +\set Staff.shortInstrumentName = #"two" +c1 c c c \break +c1 c c c \break +@end lilypond + +@cindex instrument switch (楽器を切り換える) +@cindex switching instruments (楽器を切り換える) + +@funindex \addInstrumentDefinition +@funindex addInstrumentDefinition +@funindex \instrumentSwitch +@funindex instrumentSwitch + +楽器の @emph{切り替え} が必要な場合、切り替えのために必要とされる@c +変更の詳細なリストを作成するために、@code{\addInstrumentDefinition} を +@code{\instrumentSwitch} と組み合わせて使用することがあります。@c +@code{\addInstrumentDefinition} コマンドは 2 つの引数をとります: +識別文字列と、楽器で使用されるコンテキスト プロパティと値の連想リストです。@c +このコマンドは最上位のスコープに配置する必要があります。@c +@code{\instrumentSwitch} は音楽表記の中で使用され、楽器の切り替えを宣言します: + +@lilypond[verbatim,quote,ragged-right] +\addInstrumentDefinition #"contrabassoon" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Cbsn.") + (clefGlyph . "clefs.F") + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(make-bold-markup "cbsn.")) + (midiInstrument . "bassoon")) + +\new Staff \with { + instrumentName = #"Bassoon" +} +\relative c' { + \clef tenor + \compressFullBarRests + c2 g' + R1*16 + \instrumentSwitch "contrabassoon" + c,,2 g \break + c,1 ~ | c1 +} +@end lilypond + + +@seealso +記譜法リファレンス: +@ref{\paper variables for shifts and indents}, +@ref{Modifying context plug-ins} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{InstrumentName}, +@rinternals{PianoStaff}, +@rinternals{Staff} + + +@node 他のボイスを引用する +@unnumberedsubsubsec 他のボイスを引用する +@translationof Quoting other voices + +@cindex cues (演奏指示) +@cindex quoting other voices (他のボイスを引用する) +@c 未訳 +@cindex fragments (楽譜の一部分) +@cindex cue notes (演奏指示音符) + +@funindex \addQuote +@funindex addQuote +@funindex \quoteDuring +@funindex quoteDuring +@funindex \transposition +@funindex transposition + +あるボイスが他のボイスの音楽の一部を兼ねることはごく一般的なことです。@c +例えば、第 1 バイオリンと第2バイオリンは、音楽のあるパッセージの間、@c +同じ音符を演奏することがあるかもしれません。@c +LilyPond では、あるボイスに他のボイスを @emph{引用} させることによって@c +実現されます。@c +再入力する必要はありません。 + +パートを引用するには、@code{\addQuote} コマンドを用いて引用する部分を@c +初期化する必要があります。@c +このコマンドは最上位のスコープで使用しなければなりません。@c +1 番目の引数は識別文字列であり、2 番目の引数は音楽表記です: + +@example +flute = \relative c'' @{ + a4 gis g gis +@} +\addQuote "flute" @{ \flute @} +@end example + +@code{\quoteDuring} コマンドを用いて、引用を開始する位置を示します。@c +このコマンドは 2 つの引数をとります: +@code{\addQuote} で定義した引用するボイスの名前と、@c +引用部分の演奏時間を示す音楽表記 +-- 通常、これは空白休符か複数小節にわたる休符 -- です。@c +引用されるボイスの音楽から該当部分の音楽 +(アーティキュレーション、強弱記号、マークアップ等を含みます) +が音楽表記に挿入されます: + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g->\f gis^\markup{quoted} +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { s2 } +} +@end lilypond + +@code{\quoteDuring} で使用される音楽表記に空白休符や複数小節休符以外のものが@c +含まれている場合、多声部になります。@c +これは望まない結果であることがしばしばあります: + +@lilypond[verbatim,quote] +flute = \relative c'' { + a4 gis g->\f gis^\markup{quoted} +} +\addQuote "flute" { \flute } + +\relative c' { + c4 cis \quoteDuring #"flute" { s2 } +} +@end lilypond + +@code{\transposition} が使用される場合、@c +引用機能はソースとターゲット両方の楽器の楽器移調設定を考慮します。@c +@code{\transposition} についての詳細は @ref{楽器の移調} を@c +参照してください。 + +@lilypond[verbatim,quote] +clarinet = \relative c'' { + \transposition bes + a4 gis g gis +} +\addQuote "clarinet" { \clarinet } + +\relative c' { + c4 cis \quoteDuring #"clarinet" { s2 } +} +@end lilypond + +引用部分に固有名のタグを付けて、@c +引用部分をさまざまな形で処理することができます。@c +この手法についての詳細は @ref{Using tags} を参照してください。 + +@code{quotedEventTypes} プロパティを変更することで、@c +オリジナル ボイスからどのオブジェクトを引用するか調節することもできます。@c +デフォルトで、このプロパティの値は @code{#'(StreamEvent)} であり、@c +すべてを引用します。@c +例えば、この値を @code{#'(note-event rest-event tie-event)} に変更すると、@c +LilyPond は音符、休符それにタイを引用し、@c +アーティキュレーション、マーックアップあるいは強弱記号は引用しません。 + +@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 } +} +@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 + +@funindex quotedEventTypes +@funindex quotedCueEventTypes + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{quoting-another-voice.ly} + +@seealso +記譜法リファレンス: +@ref{楽器の移調}, +@ref{Using tags} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{QuoteMusic}, +@rinternals{Voice} + + +@knownissues + +@code{\addQuote} 中にある最初の @code{Voice} の内容だけが引用されます。@c +そのため、@code{@var{music}} には他の Voice に切り替わる @code{\new} や +@code{\context Voice} を含めることはできません。 + +装飾小音符を引用しようとしてもうまくいかず、@c +LilyPond がクラッシュする可能性さえあります。 + +ネストされた連符を引用しようとしてもうまくいきません。 + +以前のバージョンの LilyPond (2.11 よりも前) では、@code{addQuote} はすべて@c +小文字 -- @code{addquote} -- で記述されていました。 + + +@node 合図音符をフォーマットする +@unnumberedsubsubsec 合図音符をフォーマットする +@translationof Formatting cue notes + +@cindex cues (合図) +@cindex cue notes (合図音符) +@cindex cue notes, formatting (合図音符をフォーマットする) +@c 未訳 +@cindex fragments (楽譜の一部分) +@cindex quoting other voices (他のボイスを引用する) +@cindex cues, formatting (合図をフォーマットする) + +@funindex \cueDuring +@funindex cueDuring +@funindex \quoteDuring +@funindex quoteDuring + +前のセクションでは、引用を作成する方法について説明しました。@c +@code{\cueDuring} コマンドは @code{\quoteDuring} コマンドの@c +より特殊な形であり、あるパートに合図音符を挿入する場合に有用です。@c +構文は以下の通りです: + +@example +\cueDuring #@var{partname} #@var{voice} @var{music} +@end example + +このコマンドは @code{@var{partname}} の該当する小節から音符と休符だけを +@code{CueVoice} にコピーします。@c +@code{CueVoice} は暗黙的に作成されて @code{@var{music}} と同時進行し、@c +結果として多声になります。@c +引数 @code{@var{voice}} は合図音符を第 1 ボイスとして記譜すべきか、@c +第 2 ボイスとして記譜すべきかを決定します。@c +@code{UP} は第 1 ボイスに相当し、@code{DOWN} は第 2 ボイスに相当します。 + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +@noindent +上の例で、@code{Voice} コンテキストは明示的に宣言されている必要があります。@c +さもなければ、音楽表記全体が @code{CueVoice} コンテキストに属してしまいます。 + +@code{instrumentCueName} プロパティを設定することによって、@c +@code{\cueDuring} で音楽のどの側面を引用するか調節することができます。@c +このプロパティのデフォルト値は @code{#'(note-event rest-event +tie-event beam-event tuplet-span-event)} であり、音符、休符、タイ、連桁@c +それに連符だけが引用され、アーティキュレーション、強弱記号、マークアップ等は@c +引用されません。 + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event + beam-event tuplet-span-event + dynamic-event slur-event) + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +マークアップを使用して引用される楽器の名前を表示することができます。@c +また、合図音符が音部変更を必要とする場合、@c +合図音符の終わりで元の音部に戻す必要があります。 + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \relative c { + \clef bass + R1 + \clef treble + s1*0^\markup { \tiny "flute" } + \cueDuring #"flute" #UP { R1 } + \clef bass + g4. b8 d2 +} +\addQuote "flute" { \flute } +\new Staff { + \bassoon +} +@end lilypond + +@cindex removing cues (合図を削除する) +@cindex removing cue notes (合図音符を削除する) +@cindex cue notes, removing (合図音符を削除する) + +@funindex \killCues +@funindex killCues + +@code{\killCues} コマンドは音楽表記から合図音符を削除します。@c +これにより、同じ音楽表記を使って合図を持つ楽器パートと総譜を作り出すことが@c +可能です。@c +@code{\killCues} コマンドは @code{\cueDuring} によって引用された@c +音符とイベントだけを削除します。@c +合図に関連する他のマークアップ +-- 音部変更と引用元の楽器を識別するラベルなど -- +にはタグを付けて総譜に含めるかどうかを選択することができます。@c +@ref{Using tags} を参照してください。 + +@lilypond[verbatim,quote] +flute = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} +bassoon = \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" { \flute } + +\new Staff { + \bassoon +} +\new StaffGroup << + \new Staff { + \flute + } + \new Staff { + \removeWithTag #'part { \killCues { \bassoon } } + } +>> +@end lilypond + +あるいはまた、音部変更や楽器ラベルを再利用するために、@c +@code{\addInstrumentDefinition} を用いて楽器の定義に含めることができます。@c +@code{\addInstrumentDefinition} についての説明は +@ref{楽器名} を参照してください。 + +@funindex \transposedCueDuring +@funindex transposedCueDuring + +@code{\quoteDuring} と同様に、@code{\cueDuring} は楽器の移調を考慮します。@c +合図音符は、合図を受け取る楽器のピッチで作り出されます。 + +合図音符を移調させるには @code{\transposedCueDuring} を使用します。@c +このコマンドはコンサート ミドル C の音を表すピッチを (絶対モードで) 指定する@c +追加の引数を取ります。 + +@lilypond[verbatim,quote] +piccolo = \relative c''' { + \clef "treble^8" + R1 + c8 c c e g2 + c4 g g2 +} +bassClarinet = \relative c' { + \key d \major + \transposition bes, + d4 r a r + \transposedCueDuring #"piccolo" #UP d { R1 } + d4 r a r +} + +\addQuote "piccolo" { \piccolo } + +<< + \new Staff \piccolo + \new Staff \bassClarinet +>> +@end lilypond + +@cindex notes, smaller +@cindex smaller notes + +小さなサイズの音符が必要な場合、@c +@code{CueVoice} コンテキストを明示的に作成することがあります。@c +例えば、本来の演奏とは異なる音符列をオリジナル ボイスの上または下に@c +セットする場合に適しています。 + +@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 + + +@seealso +記譜法リファレンス: +@ref{楽器の移調}, +@ref{楽器名}, +@ref{Musical cues}, +@ref{Using tags} + +コード断片集: +@rlsr{Staff notation} + +内部リファレンス: +@rinternals{CueVoice}, +@rinternals{Voice} + + +@knownissues + +@code{\cueDuring} を使用した場合、@code{Voice} コンテキストと @code{CueVoice} +コンテキストの間で休符の衝突が発生する可能性があります。 diff --git a/Documentation/ja/notation/text.itely b/Documentation/ja/notation/text.itely new file mode 100644 index 0000000000..7a11517b44 --- /dev/null +++ b/Documentation/ja/notation/text.itely @@ -0,0 +1,1607 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: a35594af4584e56f6dffe15371eeca10449d1a44 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.14.0" + + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node テキスト +@section テキスト +@translationof Text + +@lilypondfile[quote]{text-headword.ly} + +このセクションでは、@c +楽譜に (さまざまなフォーマットの) テキストを含める方法について説明します。 + +@noindent +ここでは扱わないいくつかのテキスト要素については他のセクションで説明します: +@ref{Vocal music}, @ref{Titles and headers}。 + +@menu +* テキストを記述する:: +* テキストをフォーマットする:: +* フォント:: +@end menu + +@node テキストを記述する +@subsection テキストを記述する +@translationof Writing text + +このセクションでは、楽譜にテキストを付け加えるいくつかの方法を紹介します。 + +@cindex Text, other languages (他の言語のテキスト) +@warning{アクセント付きのテキストや特殊なテキスト +(他の言語の文字など) を記述するには、@c +単純にその文字を直接 LilyPond ファイルに挿入します。@c +ファイルは UTF-8 で保存しなければなりません。@c +更なる情報は @ref{Text encoding} を参照してください。} + +@menu +* テキスト スクリプト:: +* テキスト スパナ:: +* テキスト マーク:: +* 独立したテキスト:: +@end menu + + +@node テキスト スクリプト +@unnumberedsubsubsec テキスト スクリプト +@translationof Text scripts + +@cindex Text scripts (テキスト スクリプト) +@cindex text items, non-empty (空ではないテキスト アイテム) +@cindex non-empty texts (空ではないテキスト) +@cindex quoted text (引用符で囲まれたテキスト) + +以下の例で示すように、@c +シンプルな @qq{引用符で囲まれたテキスト} 指示を楽譜に@c +付け加えることができます。@c +そのような指示は、@ref{Direction and placement} で説明する構文を用いて、@c +手動で譜の上または下に配置することができます。 + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e a4-"scherz." f +@end lilypond + +この構文は実際には短縮記法です。@c +@ref{テキストをフォーマットする} で記述されているように、@c +@code{\markup} ブロックを用いて明示的に、@c +より複雑なテキスト フォーマットを音符に付け加えることができます。 + +@lilypond[quote,verbatim,relative=2] +a8^\markup { \italic pizz. } g f e +a4_\markup { \tiny scherz. \bold molto } f +@end lilypond + +デフォルトでは、テキスト指示は音符の間隔に影響を与えません。@c +しかしながら、テキスト指示の幅を考慮に入れることもできます: +以下の例では、最初のテキスト文字列は音符の間隔に影響を与えていませんが、@c +2 番目のテキスト文字列は影響を与えています。 + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e +\textLengthOn +a4_"scherzando" f +@end lilypond + +テキスト スクリプトだけでなく、@c +アーティキュレーションを音符に付けることもできます。@c +更なる情報は @ref{アーティキュレーションと装飾} を参照してください。 + +テキスト スクリプトとアーティキュレーションの順序についての更なる情報は +@rlearning{オブジェクトの配置} を参照してください。 + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff} +@endpredefined + +@seealso +学習マニュアル: +@rlearning{オブジェクトの配置} + + +記譜法リファレンス: +@ref{テキストをフォーマットする}, +@ref{Direction and placement}, +@ref{アーティキュレーションと装飾} + +コード断片集: +@rlsr{Text} + +内部リファレンス: +@rinternals{TextScript} + + +@cindex text outside margin (マージンからはみ出すテキスト) +@cindex margin, text running over (マージンからはみ出すテキスト) +@cindex text, keeping inside margin (テキストをマージン内に収める) +@cindex lyrics, keeping inside margin (歌詞をマージン内に収める) + + +@knownissues +テキスト スクリプトと歌詞がマージンに収まることを保証するためのチェックは@c +計算量を増やします。@c +処理速度を上げる必要がある場合は、以下を用います: + +@example +\override Score.PaperColumn #'keep-inside-line = ##f +@end example + + +@node テキスト スパナ +@unnumberedsubsubsec テキスト スパナ +@translationof Text spanners + +@cindex Text spanners (テキスト スパナ) + +いくつかの演奏指示 +-- 例えば @notation{rallentando} や @notation{accelerando} -- は、@c +テキストとして記述され、点線で複数の音符の上に伸ばされます。@c +そのようなオブジェクト +-- @qq{スパナ} と呼ばれます -- は、@c +以下の構文を用いることで、@c +ある音符から他の音符までの範囲に作成することができます: + +@lilypond[verbatim,quote,relative=2] +\override TextSpanner #'(bound-details left text) = "rit." +b1\startTextSpan +e,\stopTextSpan +@end lilypond + +@noindent +譜刻される文字列はオブジェクト プロパティを通じてセットされます。@c +デフォルトでは文字列はイタリック体で譜刻されます。@c +しかしながら、@ref{テキストをフォーマットする} で記述されているように、@c +@code{\markup} ブロックを用いることで他の書体にすることができます。 + +@lilypond[quote,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) = + \markup { \upright "rit." } +b1\startTextSpan c +e,\stopTextSpan +@end lilypond + +テキスト文字列と同様に、@c +線のスタイルもオブジェクト プロパティとして定義することができます。@c +線スタイルの構文は @ref{Line styles} で記述されています。 + +@funindex \textSpannerUp +@funindex textSpannerUp +@funindex \textSpannerDown +@funindex textSpannerDown +@funindex \textSpannerNeutral +@funindex textSpannerNeutral + + +@predefined +@code{\textSpannerUp}, +@code{\textSpannerDown}, +@code{\textSpannerNeutral}. +@endpredefined + +@knownissues +LilyPond が処理できるテキスト スパナは 1 ボイスにつき、1 つだけです。 + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-text-spanner-postfix.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-custom-text-spanner-postfix.ly} + + +@seealso +記譜法リファレンス: +@ref{Line styles}, +@ref{強弱記号}, +@ref{テキストをフォーマットする} + +コード断片集: +@rlsr{Text}, +@rlsr{Expressive marks} + +内部リファレンス: +@rinternals{TextSpanner} + + +@node テキスト マーク +@unnumberedsubsubsec テキスト マーク +@translationof Text marks + + +@cindex text marks (テキスト マーク) +@cindex marks, tex (テキスト マーク)t +@cindex text on bar line (小節線上のテキスト) +@cindex coda on bar line (小節線上のコーダ) +@cindex segno on bar line (小節線上のセーニョ) +@cindex fermata on bar line (小節線上のフェルマータ) +@cindex bar lines, symbols on (小節線上のシンボル) + +@funindex \mark +@funindex mark +@funindex \markup +@funindex markup + +@ref{リハーサル記号} で記述されている構文を用いて、@c +さまざまなテキスト要素を楽譜に付け加えることができます: + +@c \mark needs to be placed on a separate line (it's not +@c attached to an object like \markup is). -vv + +@lilypond[verbatim,quote,relative=2] +c4 +\mark "Allegro" +c c c +@end lilypond + +この構文を用いることで、@c +任意のテキストを小節線上に配置することが可能です。@c +@ref{テキストをフォーマットする} で記述されているように、@c +@code{\markup} ブロックを用いてより複雑なテキスト フォーマットを@c +付け加えることもできます: + +@lilypond[quote,verbatim,relative=1] +1 +\mark \markup { \italic { colla parte } } +2 +1 +@end lilypond + +@noindent +さらに、@ref{マークアップ内部での音楽記譜法} で説明されているように、@c +この構文で適切なシンボル名を指定することによって、@c +特殊な記号 -- コーダ、セーニョ、フェルマータなど -- を譜刻することが可能です: + +@lilypond[quote,verbatim,relative=2] +2 +\mark \markup { \musicglyph #"scripts.ufermata" } +1 +@end lilypond + +@noindent +このようなオブジェクトを配置できる位置は、@c +楽譜の最上段の譜の上だけです。@c +オブジェクトを小節の終わりで指定するか、途中で指定するか次第で、@c +小節線の上に配置されたり、音符の間に配置されたりします。@c +改行位置で指定した場合、そのマークは次の行の先頭に譜刻されます。 + +@lilypond[quote,verbatim,relative=2] +\mark "Allegro" +c1 c +\mark "assai" \break +c c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-at-the-end-of-a-line.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{aligning-marks-with-various-notation-objects.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-on-every-staff.ly} + + +@seealso +記譜法リファレンス: +@ref{リハーサル記号}, +@ref{テキストをフォーマットする}, +@ref{マークアップ内部での音楽記譜法}, +@ref{The Feta font} + +コード断片集: +@rlsr{Text} + +内部リファレンス: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark} + + +@node 独立したテキスト +@unnumberedsubsubsec 独立したテキスト +@translationof Separate text + +@cindex separate text (独立したテキスト) +@cindex text, separate (独立したテキスト) +@cindex standalone text (孤立したテキスト) +@cindex text, standalone (孤立したテキスト) +@cindex top-level text (最上位レベルのテキスト) +@cindex text, top-level (最上位レベルのテキスト) + +@funindex \markup +@funindex markup + +@code{\markup} ブロックはそれ自体で、@c +すべての @code{\score} ブロックの外側に、@c +@qq{最上位レベルの表記} として存在することができます。@c +この構文は @ref{File structure} で記述されています。 + +@lilypond[verbatim,quote] +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +@end lilypond + +@noindent +これによりテキストを音楽から分離して譜刻することが可能になります。@c +これは、@ref{Multiple scores in a book} で記述されているように、@c +入力ファイルが複数の楽曲を保持している場合に特に有用です。 + +@lilypond[quote,verbatim] +\score { + c'1 +} +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +\score { + c'1 +} +@end lilypond + +独立したテキスト ブロックは複数のページに広がることができます。@c +これにより、@c +テキスト ドキュメントやブック全体を LilyPond の中に譜刻することが@c +可能になります。@c +この機能と、この機能の構文は +@ref{複数ページにわたるマークアップ} で記述されています。 + + +@funindex \markup +@funindex markup +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markup}, +@code{\markuplines} +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{stand-alone-two-column-markup.ly} + +@seealso +記譜法リファレンス: +@ref{テキストをフォーマットする}, +@ref{File structure}, +@ref{Multiple scores in a book}, +@ref{複数ページにわたるマークアップ} + +コード断片集: +@rlsr{Text} + +内部リファレンス: +@rinternals{TextScript} + + +@node テキストをフォーマットする +@subsection テキストをフォーマットする +@translationof Formatting text + +このセクションでは、@code{\markup} モード特有の構文を用いた@c +基本的かつ高度なテキスト フォーマットについて説明します。 + +@menu +* テキスト マークアップの導入部:: +* フォントとフォント サイズを選択する:: +* テキスト揃え:: +* マークアップ内部でのグラフィック記譜法:: +* マークアップ内部での音楽記譜法:: +* 複数ページにわたるマークアップ:: +@end menu + +@node テキスト マークアップの導入部 +@unnumberedsubsubsec テキスト マークアップの導入部 +@translationof Text markup introduction + +@cindex markup (マークアップ) +@cindex text markup (テキスト マークアップ) +@cindex markup text (マークアップ テキスト) +@cindex typeset text (テキストの譜刻) + +@funindex \markup +@funindex markup + +@code{\markup} ブロックは @qq{マークアップ モード} と呼ばれる@c +拡張可能な構文でテキストを譜刻するために用いられます。 + +@cindex markup expressions (マークアップ表記) +@cindex expressions, markup (マークアップ表記) +@cindex markup syntax (マークアップ構文) +@cindex syntax, markup (マークアップ構文) + +マークアップ構文は LilyPond の通常の構文と同様です: +@code{\markup} 表記は波括弧 @code{@{ @dots{} @}} で囲まれます。@c +単語 1 つが最小の表記と見なされ、その場合は波括弧で囲む必要はありません。 + +シンプルな @qq{引用符で囲まれたテキスト} 指示とは異なり、@c +@code{\markup} ブロックは、@c +バックスラッシュ @code{\} を用いて挿入されるネストされた表記や@c +マークアップ コマンドを保持することができます。@c +そのようなコマンドは直後の表記にのみ影響を与えます。 + +@lilypond[quote,verbatim,relative=2] +a1-\markup intenso +a2^\markup { poco \italic più forte } +c e1 +d2_\markup { \italic "string. assai" } +e +b1^\markup { \bold { molto \italic agitato } } +c +@end lilypond + +@cindex special characters in markup mode (マークアップ モードでの特殊文字) +@cindex markup mode, special characters (マークアップ モードでの特殊文字) +@cindex printing reserved characters (予約文字を譜刻する) +@cindex reserved characters, printing (予約文字を譜刻する) +@cindex printing special characters (特殊文字を譜刻する) +@cindex special characters, printing (特殊文字を譜刻する) +@cindex quoted text in markup mode (マークアップ モードでの引用譜で囲まれたテキスト) +@cindex markup mode, quoted text (マークアップ モードでの引用譜で囲まれたテキスト) + +また、@code{\markup} ブロックは引用符で囲まれたテキスト文字列を@c +保持することがあります。@c +そのような文字列は最小のテキスト表記として扱われます。@c +そのため、引用符で囲まれたマークアップ コマンドや特殊文字 +(@code{\} や @code{#} など) はテキストのフォーマットに影響を与えず、@c +そのまま (逐語的に) 譜刻されます。@c +ダブル クォーテーション自体は、@c +それ自体の前にバックスラッシュを置くことによって譜刻されます。 + +@lilypond[quote,verbatim,relative=2] +a1^"\italic markup..." +a_\markup { \italic "... prints \"italic\" letters!" } +a a +@end lilypond + +表記をばらばらなものとして扱うには、@c +単語のリストをダブル クォーテーションで囲むか、@c +前にコマンドを置く必要があります。@c +マークアップ表記の定義の仕方は、@c +表記の配置のされ方 +-- 垂直に中央揃えして積み重ねられる、水平に並べられる -- +に影響を与えます。@c +以下の例では、@c +2 番目の @code{\markup} 表記は 1 番目の表記と同じように扱われています: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { \center-column { a bbb c } } +c1^\markup { \center-column { a { bbb c } } } +c1^\markup { \center-column { a \line { bbb c } } } +c1^\markup { \center-column { a "bbb c" } } +@end lilypond + +マークアップを変数に格納することができます。@c +そのような変数は直接音符にくっつけることができます: + +@lilypond[quote,verbatim] +allegro = \markup { \bold \large Allegro } + +{ + d''8.^\allegro + d'16 d'4 r2 +} +@end lilypond + + +@noindent +@ref{Text markup commands} に +@code{\markup} 特有のコマンドの徹底したリストがあります。 + + +@seealso +記譜法リファレンス: +@ref{Text markup commands} + +コード断片集: +@rlsr{Text} + +インストールされているファイル: +@file{scm/markup.scm} + + +@knownissues +マークアップ モードの構文エラーは混乱しやすいです。 + + +@node フォントとフォント サイズを選択する +@unnumberedsubsubsec フォントとフォント サイズを選択する +@translationof Selecting font and font size + +@cindex font switching (フォントの切り換え) +@cindex changing fonts (フォントを変更する) +@cindex switching fonts (フォントを切り換える) + +@funindex \italic +@funindex italic +@funindex \bold +@funindex bold +@funindex \underline +@funindex underline + +マークアップ モードでは、基本的なフォント切り替えがサポートされています: + +@lilypond[quote,verbatim,relative=2] +d1^\markup { + \bold { Più mosso } + \italic { non troppo \underline Vivo } +} +r2 r4 r8 +d,_\markup { \italic quasi \smallCaps Tromba } +f1 d2 r +@end lilypond + +@cindex font size (フォント サイズ) +@cindex text size (テキスト サイズ) + +@funindex \fontsize +@funindex fontsize +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger +@funindex \magnify +@funindex magnify + +文字のサイズもいくつかの方法で変更することができます: +@itemize +@item +フォント サイズをあらかじめ定義されている標準サイズに設定することができます。 + +@item +フォント サイズを絶対値で設定することができます。 + +@item +さらに、フォント サイズを現在の値からの相対値で設定することができます。 +@end itemize + +@noindent +以下の例は、これら 3 つの方法の使用例です: + +@lilypond[quote,verbatim,relative=1] +f1_\markup { + \tiny espressivo + \large e + \normalsize intenso +} +a^\markup { + \fontsize #5 Sinfonia + \fontsize #2 da + \fontsize #3 camera +} +bes^\markup { (con + \larger grande + \smaller emozione + \magnify #0.6 { e sentimento } ) +} +d c2 r8 c bes a g1 +@end lilypond + +@cindex subscript (下付き文字) +@cindex superscript (上付き文字) + +@funindex \super +@funindex super +@funindex \sub +@funindex sub + +テキストを下付き文字あるいは上付き文字として譜刻することができます。@c +デフォルトでは、それらは小さなサイズで譜刻されますが、@c +通常サイズにすることもできます: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { 1 \super st movement } + \line { 1 \normal-size-super st movement + \sub { (part two) } } + } +} +@end lilypond + +@cindex font families (フォント ファミリ) + +マークアップ モードは代わりのフォント ファミリを選択するための@c +簡単な方法を提供します。@c +他を指定しないかぎり、@c +デフォルトの Serif フォント -- ローマン体 -- が自動的に選択されます。@c +以下の例の最後の行では、最初の単語と 2 番目の単語はまったく同じです。 + +@lilypond[quote,verbatim] +\markup { + \column { + \line { Act \number 1 } + \line { \sans { Scene I. } } + \line { \typewriter { Verona. An open place. } } + \line { Enter \roman Valentine and Proteus. } + } +} +@end lilypond + +@noindent +@ref{新たな強弱記号} や @ref{手動の繰り返し記号} で言及されているように、@c +番号や強弱記号など特定の項目に用いられるフォント ファミリの中には@c +すべての文字を提供しないものもあります。 + +@c \concat is actually documented in Align (it is not +@c a font-switching command). But we need it here. -vv + +フォント切り替えやフォーマット コマンドの中には、@c +単語の中で使用されると@c +望まない空白を作り出すものがあります。@c +これはテキスト要素をつなげることによって容易に解決できます: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \concat { 1 \super st } + movement + } + \line { + \concat { \dynamic p , } + \italic { con dolce espressione } + } + } +} +@end lilypond + +@ref{フォント} に フォント切り換えとフォントのカスタム コマンドの@c +徹底したリストがあります。 + +@ref{フォント} で説明されているように、@c +カスタム フォント セットを定義することも可能です。 + +@funindex \teeny +@funindex teeny +@funindex \tiny +@funindex tiny +@funindex \small +@funindex small +@funindex \normalsize +@funindex normalsize +@funindex \large +@funindex large +@funindex \huge +@funindex huge +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}, +@code{\smaller}, +@code{\larger} +@endpredefined + + +@seealso +記譜法リファレンス: +@ref{フォント}, +@ref{新たな強弱記号}, +@ref{手動の繰り返し記号}, +@ref{フォント} + +コード断片集: +@rlsr{Text} + +内部リファレンス: +@rinternals{TextScript} + +インストールされているファイル: +@file{scm/define-markup-commands.scm} + +@knownissues +フォントのサイズ コマンド @code{\teeny}, @code{\tiny}, @code{\small}, +@code{\normalsize}, @code{\large} それに @code{\huge} を用いると、@c +@code{\fontsize} を用いた場合と比較して、つじつまの合わない行間になります。 + + +@node テキスト揃え +@unnumberedsubsubsec テキスト揃え +@translationof Text alignment + +@cindex text, aligning (テキストを揃える) +@cindex aligning text (テキストを揃える) +@cindex aligning markup text (マークアップ テキストを揃える) +@cindex markup text, aligning (マークアップ テキストを揃える) +@cindex aligning markups (マークアップを揃える) +@cindex markups, aligning (マークアップを揃える) + +このサブセクションでは、@c +マークアップ モードのテキストを配置する方法について説明します。@c +@rlearning{オブジェクトを移動させる} で記述されている構文を用いて、@c +マークアップ オブジェクト全体を移動させることも可能です。 + +@c Padding commands should be mentioned on this page, but +@c most of these require \box to be more clearly illustrated. -vv + +@cindex text, horizontal alignment (テキストを水平方向に揃える) +@cindex horizontal text alignment (テキストを水平方向に揃える) + +@funindex \left-align +@funindex left-align +@funindex \center-align +@funindex center-align +@funindex \right-align +@funindex right-align + +マークアップ オブジェクトの揃え方はいくつかあります。@c +デフォルトでは、テキスト指示はそのテキストの左端で揃えられます: +以下の例では、@c +最初のマークアップと 2 番目のマークアップの揃えられ方はまったく同じです。 + +@lilypond[quote,verbatim,relative=2] +d1-\markup { poco } +f +d-\markup { \left-align poco } +f +d-\markup { \center-align { poco } } +f +d-\markup { \right-align poco } +@end lilypond + +@funindex \halign +@funindex halign + +水平方向の揃え方は、数値を使って、微調整することができます: + +@lilypond[quote,verbatim,relative=2] +a1-\markup { \halign #-1 poco } +e' +a,-\markup { \halign #0 poco } +e' +a,-\markup { \halign #0.5 poco } +e' +a,-\markup { \halign #2 poco } +@end lilypond + +@noindent +オブジェクトの中には揃えるためのプロシージャをそれ自身で持っているものがあり、@c +それらは上記のコマンドでは影響を受けません。@c +@ref{テキスト マーク} の中の例で示されているように、@c +そのようなマークアップ オブジェクト全体を移動させることが可能です。 + +@cindex text, vertical alignment (テキストを垂直方向に揃える) +@cindex vertical text alignment (テキストを垂直方向に揃える) + +@funindex \raise +@funindex raise +@funindex \lower +@funindex lower +@funindex \null +@funindex null + +@c QUERY Should the function of ``\null'' be clarified? rp + +垂直方向に揃える方法はもう少し複雑です。@c +上で述べたようにマークアップ オブジェクト全体を移動させることが可能ですが、@c +マークアップ ブロックの中にある特定の要素を移動させることも可能です。 +特定要素だけをを移動させるには、@c +移動させる要素の前に @emph{アンカ ポイント} +-- もう 1 つのオブジェクト要素、あるいは不可視のオブジェクト要素 -- +を置く必要があります。@c +以下の例では 2 つのケースを示しています。@c +最後のマークアップはアンカ ポイントを持たず、それゆえ移動されません。 + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \raise #2 { Scène 1 } +} +a' +g_\markup { + \null + \lower #4 \bold { Très modéré } +} +a +d,^\markup { + \raise #4 \italic { Une forêt. } +} +a'4 a g2 a +@end lilypond + +@funindex \general-align +@funindex general-align +@funindex \translate +@funindex translate +@funindex \translate-scaled +@funindex translate-scaled + +コマンドの中にはマークアップ モードの中にあるテキスト オブジェクトの@c +水平方向と垂直方向の両方の揃え方に影響を与えることができるものもあります。@c +そのようなコマンドで移動させるオブジェクトの前には@c +アンカ ポイントを置く必要があります: + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \translate #'(-1 . 2) "Scène 1" +} +a' +g_\markup { + \null + \general-align #Y #3.2 \bold "Très modéré" +} +a +d,^\markup { + \null + \translate-scaled #'(-1 . 2) \teeny "Une forêt." +} +a'4 a g2 a +@end lilypond + +@cindex multi-line markup (複数行にわたるマークアップ) +@cindex markup, multi-line (複数行にわたるマークアップ) +@cindex multi-line text (複数行にわたるテキスト) +@cindex text, multi-line (複数行にわたるテキスト) +@cindex text in columns (縦に積み重ねたテキスト) +@cindex columns, text (縦に積み重ねたテキスト) + +@funindex \column +@funindex column +@funindex \center-column +@funindex center-column + +マークアップ オブジェクトに何行かのテキストが含まれる場合もあります。@c +以下の例では、それぞれの要素あるいは表記はそれ自体の行に配置され、@c +左揃えあるいは中央揃えされています: + +@lilypond[quote,verbatim] +\markup { + \column { + a + "b c" + \line { d e f } + } + \hspace #10 + \center-column { + a + "b c" + \line { d e f } + } +} +@end lilypond + +@cindex centering text on the page (テキストをページの中央に揃える) +@cindex text, centering on the page (テキストをページの中央に揃える) +@cindex centering markup on the page (マークアップをページの中央に揃える) +@cindex markup, centering on the page (マークアップをページの中央に揃える) + +@funindex \fill-line +@funindex fill-line + +同様に、要素あるいは表記のリストの広がりが水平の行幅いっぱいを占める@c +ことがあります (要素が 1 つだけの場合、その要素はページの中央に揃えられます)。@c +さらに、@c +そのような表記は複数行にわたるテキストや他の任意の表記を含むことができます: + +@lilypond[quote,verbatim] +\markup { + \fill-line { + \line { William S. Gilbert } + \center-column { + \huge \smallCaps "The Mikado" + or + \smallCaps "The Town of Titipu" + } + \line { Sir Arthur Sullivan } + } +} +\markup { + \fill-line { 1885 } +} +@end lilypond + +@cindex wordwrapped text (折り返しされたテキスト) +@cindex text, wordwrapped (折り返しされたテキスト) +@cindex justified text (両端揃えのテキスト) +@cindex text, justified (両端揃えのテキスト) +@cindex markup text, wordwrapped (折り返しされたマークアップ テキスト) +@cindex markup text, justified (両端揃えのマークアップ テキスト) + +@funindex \wordwrap +@funindex wordwrap +@funindex \justify +@funindex justify + +さらに、長いテキスト指示を自動的に行幅に合わせて折り返すことができます。@c +そのようなテキスト指示は、以下の例で示すように、左揃えされるか両端揃えされます。 + +@lilypond[quote,verbatim] +\markup { + \column { + \line \smallCaps { La vida breve } + \line \bold { Acto I } + \wordwrap \italic { + (La escena representa el corral de una casa de + gitanos en el Albaicín de Granada. Al fondo una + puerta por la que se ve el negro interior de + una Fragua, iluminado por los rojos resplandores + del fuego.) + } + \hspace #0 + + \line \bold { Acto II } + \override #'(line-width . 50) + \justify \italic { + (Calle de Granada. Fachada de la casa de Carmela + y su hermano Manuel con grandes ventanas abiertas + a través de las que se ve el patio + donde se celebra una alegre fiesta) + } + } +} +@end lilypond + +@cindex text alignment commands (テキスト揃えのコマンド) +@cindex markup text alignment commands (マークアップ テキスト揃えのコマンド) +@cindex alignment, text, commands (テキスト揃えのコマンド) + +@ref{Align} にテキスト揃えコマンドの徹底したリストがあります。 + + +@seealso +学習マニュアル: +@rlearning{オブジェクトを移動させる} + +記譜法リファレンス: +@ref{Align}, +@ref{テキスト マーク} + +コード断片集: +@rlsr{Text} + +内部リファレンス: +@rinternals{TextScript} + +インストールされているファイル: +@file{scm/define-markup-commands.scm}. + + +@node マークアップ内部でのグラフィック記譜法 +@unnumberedsubsubsec マークアップ内部でのグラフィック記譜法 +@translationof Graphic notation inside markup + +@cindex graphics, embedding (グラフィックを埋め込む) +@cindex drawing graphic objects (グラフィック オブジェクトを描く) +@cindex graphic objects, drawing (グラフィック オブジェクトを描く) +@cindex embedding graphic objects (グラフィック オブジェクトを埋め込む) +@cindex graphic objects, embedding (グラフィック オブジェクトを埋め込む) + +マークアップ コマンドを用いて、@c +さまざまなグラフィック オブジェクトを楽譜に付け加えることができます。 + +@cindex decorating text (テキストを飾り付ける) +@cindex framing text (テキストにフレームを付ける) +@cindex text, framing (テキストにフレームを付ける) +@cindex text, decorating (テキストを飾り付ける) +@cindex markup text, decorating (マークアップ テキストを飾り付ける) +@cindex markup text, framing (マークアップ テキストにフレームを付ける) + +@funindex \box +@funindex box +@funindex \circle +@funindex circle +@funindex \rounded-box +@funindex rounded-box +@funindex \bracket +@funindex bracket +@funindex \hbracket +@funindex hbracket + +以下の例で示すように、@c +マークアップ コマンドの中にはテキスト要素を@c +グラフィックスで飾り付けることができるものがあります。 + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \circle Jack + \box "in the box" + \null + \line { + Erik Satie + \hspace #3 + \bracket "1866 - 1925" + } + \null + \rounded-box \bold Prelude + } +} +@end lilypond + +@cindex padding around text (テキストの周りのパディング) +@cindex text padding (テキスト パディング) +@cindex markup text padding (マークアップ テキスト パディング) + +@funindex \pad-markup +@funindex pad-markup +@funindex \pad-x +@funindex pad-x +@funindex \pad-to-box +@funindex pad-to-box +@funindex \pad-around +@funindex pad-around + +コマンドの中にはテキストの周りのパディングを増やすことを必要とするものも@c +あります。@c +パティングの増加は @ref{Align} で徹底的に記述されている@c +マークアップ コマンドを用いて達成できます。 + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \box "Charles Ives (1874 - 1954)" + \null + \box \pad-markup #2 "THE UNANSWERED QUESTION" + \box \pad-x #8 "A Cosmic Landscape" + \null + } +} +\markup \column { + \line { + \hspace #10 + \box \pad-to-box #'(-5 . 20) #'(0 . 5) + \bold "Largo to Presto" + } + \pad-around #3 + "String quartet keeps very even time, +Flute quartet keeps very uneven time." +} +@end lilypond + +@cindex graphic notation (グラフィック記譜法) +@cindex symbols, non-musical (音楽要素ではないシンボル) +@cindex non-musical symbols (音楽要素ではないシンボル) +@cindex notation, graphic (グラフィック記譜法) + +@funindex \combine +@funindex combine +@funindex \draw-circle +@funindex draw-circle +@funindex \filled-box +@funindex filled-box +@funindex \triangle +@funindex triangle +@funindex \draw-line +@funindex draw-line +@funindex \arrow-head +@funindex arrow-head + +テキストを持たないグラフィック要素やシンボルを譜刻することもできます。@c +他のマークアップ表記と同様に、@c +そのようなオブジェクトも組み合わせることができます。 + +@lilypond[quote,verbatim] +\markup { + \combine + \draw-circle #4 #0.4 ##f + \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 + \hspace #5 + + \center-column { + \triangle ##t + \combine + \draw-line #'(0 . 4) + \arrow-head #Y #DOWN ##f + } +} +@end lilypond + +@cindex embedded graphics (埋め込みグラフィック) +@cindex images, embedding (画像を埋め込む) +@cindex graphics, embedding (グラフィックを埋め込む) +@cindex postscript + +@funindex \epsfile +@funindex epsfile +@funindex \postscript +@funindex postscript + +高度なグラフィック機能として、@c +外部画像ファイルを Encapsulated PostScript フォーマット (@emph{eps}) +に変換してインクルードする機能や、@c +ネイティブの PostScript コードを用いて@c +グラフィックを直接に入力ファイルへ埋め込む機能があります。@c +このような機能を使う場合、以下で示すように、@c +描画サイズを明示的に指定することを推奨します: + +@lilypond[quote,verbatim,relative=1] +c1^\markup { + \combine + \epsfile #X #10 #"./context-example.eps" + \with-dimensions #'(0 . 6) #'(0 . 10) + \postscript #" + -2 3 translate + 2.7 2 scale + newpath + 2 -1 moveto + 4 -2 4 1 1 arct + 4 2 3 3 1 arct + 0 4 0 3 1 arct + 0 0 1 -1 1 arct + closepath + stroke" + } +c +@end lilypond + +@ref{Graphic} にグラフィック特有のコマンドの徹底したリストがあります。 + + +@seealso +記譜法リファレンス: +@ref{Graphic}, +@ref{編集者の注釈}, +@ref{Align} + +コード断片集: +@rlsr{Text} + +内部リファレンス: +@rinternals{TextScript} + +インストールされているファイル: +@file{scm/define-markup-commands.scm}, +@file{scm/stencil.scm} + + +@node マークアップ内部での音楽記譜法 +@unnumberedsubsubsec マークアップ内部での音楽記譜法 +@translationof Music notation inside markup + +@cindex notation inside markup (マークアップ内部の記譜法) +@cindex music inside markup (マークアップ内部の音楽) +@cindex markup, music notation inside (マークアップ内部の音楽記譜法) + +マークアップ オブジェクトの内部で、さまざまな音楽記譜要素を楽譜に@c +付け加えることができます。 + +音符と臨時記号はマークアップ コマンドを用いて入力することができます: + +@lilypond[quote,verbatim,relative=2] +a2 a^\markup { + \note #"4" #1 + = + \note-by-number #1 #1 #1.5 +} +b1_\markup { + \natural \semiflat \flat + \sesquiflat \doubleflat +} +\glissando +a1_\markup { + \natural \semisharp \sharp + \sesquisharp \doublesharp +} +\glissando b +@end lilypond + +他の記譜オブジェクトもマークアップ モードの中で譜刻することができます: + +@lilypond[quote,verbatim,relative=1] +g1 bes +ees-\markup { + \finger 4 + \tied-lyric #"~" + \finger 1 +} +fis_\markup { \dynamic rf } +bes^\markup { + \beam #8 #0.1 #0.5 +} +cis +d-\markup { + \markalphabet #8 + \markletter #8 +} +@end lilypond + +より一般的には、以下で示すように、@c +使用可能な音楽シンボルはすべてマークアップ オブジェクトに@c +含めることができます。@c +@ref{The Feta font} に、@c +音楽シンボルと音楽シンボル名の徹底したリストがあります。 + +@lilypond[quote,verbatim,relative=2] +c2 +c'^\markup { \musicglyph #"eight" } +c,4 +c,8._\markup { \musicglyph #"clefs.G_change" } +c16 +c2^\markup { \musicglyph #"timesig.neomensural94" } +@end lilypond + +@noindent +テキストではない図柄を譜刻するもう 1 つの方法が +@ref{フォントの説明} で記述されています。@c +この方法はさまざまなサイズの波括弧を譜刻する場合に有用です。 + +さらに、マークアップ モードは特定の楽器のためのダイアグラムをサポートします: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { + \fret-diagram-terse #"x;x;o;2;3;2;" +} +c^\markup { + \harp-pedal #"^-v|--ov^" +} +c +c^\markup { + \combine + \musicglyph #"accordion.discant" + \combine + \raise #0.5 \musicglyph #"accordion.dot" + \raise #1.5 \musicglyph #"accordion.dot" +} +@end lilypond + +@c The accordion diagram is actually taken from a snippet. + +@noindent +そのようなダイアグラムは @ref{Instrument Specific Markup} で@c +ドキュメント化されています。 + +@cindex score inside markup (マークアップ内部の楽譜) +@cindex markup, score inside (マークアップ内部の楽譜) + +楽譜全体でさえもマークアップ オブジェクト内部にネストさせることができます。@c +そのような場合、以下で示すように、@c +ネストされる @code{\score} ブロックには +@code{\layout} ブロックを含める必要があります: + +@lilypond[quote,verbatim,relative=1] +c4 d^\markup { + \score { + \relative c' { c4 d e f } + \layout { } + } +} +e f | +c d e f +@end lilypond + +@ref{Music} に、音楽記譜法関連のコマンドの徹底したリストがあります。 + + +@seealso +記譜法リファレンス: +@ref{Music}, +@ref{The Feta font}, +@ref{フォントの説明} + +コード断片集: +@rlsr{Text} + +内部リファレンス: +@rinternals{TextScript} + +インストールされているファイル: +@file{scm/define-markup-commands.scm}, +@file{scm/fret-diagrams.scm}, +@file{scm/harp-pedals.scm}. + + +@node 複数ページにわたるマークアップ +@unnumberedsubsubsec 複数ページにわたるマークアップ +@translationof Multi-page markup + +@cindex multi-page markup (複数ページにわたるマークアップ) +@cindex markup, multi-page (複数ページにわたるマークアップ) +@cindex markup text, multi-page (複数ページにわたるマークアップ テキスト) +@cindex text spread over multiple pages (複数ページに広がるテキスト) + +@funindex \markuplines +@funindex markuplines +@funindex \justified-lines +@funindex justified-lines +@funindex \wordwrap-lines +@funindex wordwrap-lines + +標準のマークアップ オブジェクトは分割することができません。@c +しかしながら、 +ある特定の構文は複数ページにわたるテキストを入力することを可能にします: + +@c KEEP LY +@lilypond[quote,verbatim] +\markuplines { + \justified-lines { + 両端揃えされた非常に長いテキスト。 + ... + } + \wordwrap-lines { + もう 1 つの非常に長いテキスト。 + ... + } + ... +} +@end lilypond + +この構文はマークアップのリストを受け付けます。@c +受け付けるものは以下の通りです: +@itemize +@item +マークアップ リスト コマンドの結果 +@item +マークアップのリスト +@item +マークアップ リストのリスト +@end itemize + +@ref{Text markup list commands} に、@c +マークアップ リスト コマンドの徹底したリストがあります。 + + +@seealso +記譜法リファレンス: +@ref{Text markup list commands}, + +コード断片集: +@rlsr{Text} + +拡張: +@rextend{New markup list command definition} + +内部リファレンス: +@rinternals{TextScript} + +インストールされているファイル: +@file{scm/define-markup-commands.scm}. + +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markuplines} +@endpredefined + + +@node フォント +@subsection フォント +@translationof Fonts + +このセクションでは、@c +フォントを扱う方法と、楽譜の中でフォントを変更する方法について説明します。 + +@menu +* フォントの説明:: +* 個々に登録するフォント:: +* ドキュメント全体のフォント:: +@end menu + +@node フォントの説明 +@unnumberedsubsubsec フォントの説明 +@translationof Fonts explained + +@cindex Pango +@cindex fonts, explained (フォントの説明) +@cindex braces, various sizes (さまざまなサイズの波括弧) +@cindex fonts, non-text in markup (マークアップ内の非テキスト フォント) +@cindex non-text fonts in markup (マークアップ内の非テキスト フォント) + +@funindex font-interface + +フォントはいくつかのライブラリを通じて扱われます。@c +FontConfig はシステムで利用可能なフォントを検出するために使用されます。@c +選択されたフォントは Pango を用いて描かれます。 + +音楽記譜フォントはいくつかのファミリに分類された特殊な図柄のセットと@c +言うことができます。@c +以下の構文により、@c +さまざまな LilyPond @code{feta} 非テキスト フォントを@c +マークアップ モードの中で直接使用することが可能になります: + +@lilypond[quote,verbatim,relative=2] +a1^\markup { + \vcenter { + \override #'(font-encoding . fetaBraces) + \lookup #"brace120" + \override #'(font-encoding . fetaText) + \column { 1 3 sf } + \override #'(font-encoding . fetaMusic) + \lookup #"noteheads.s0petrucci" + } +} +@end lilypond + +@noindent +しかしながら、これらの図柄はすべて +-- @code{fetaBraces} で保持されているさまざまサイズの波括弧を除いて -- +は、@ref{マークアップ内部での音楽記譜法} で記述されている、@c +もっと簡単な構文を用いて利用することができます。 + +@code{fetaBraces} に保持されている図柄を使う場合、@c +波括弧のサイズは図柄名の一部となっている任意の数値によって指定されます。@c +@code{0} から @code{575} までの整数すべてを指定でき、@c +@code{0} は最小の波括弧を提供します。@c +最適な値はトライ&エラーで決定する必要があります。@c +これらの図柄はすべて左波括弧です。@c +右波括弧は回転によって得ることができます +-- @ref{Rotating objects} を参照してください。 + +3 ファミリのテキスト フォントが利用可能になっています: +@emph{roman} (serif) フォント +-- これはデフォルトでは New Century Schoolbook です -- +と、@emph{sans} フォントと単一幅の @emph{typewriter} フォント +-- これら 2 つのファミリは Pango のインストール時に決定されます -- +です。 + +それぞれのファミリには異なる形状とセットのフォントが保持されています。@c +以下の例は、ファミリ、形状、セットそれにサイズを変更する様子を示しています。@c +デフォルト サイズから変更する場合、@c +@code{font-size} に提供する値が必要となります。 + +@lilypond[quote,verbatim,relative=2] +\override Score.RehearsalMark #'font-family = #'typewriter +\mark \markup "Ouverture" +\override Voice.TextScript #'font-shape = #'italic +\override Voice.TextScript #'font-series = #'bold +d2.^\markup "Allegro" +\override Voice.TextScript #'font-size = #-3 +c4^smaller +@end lilypond + +@noindent +同様の構文をマークアップ モードの中で使用することができます。@c +しかしながら、マークアップ モードの中では、@c +@ref{フォントとフォント サイズを選択する} で説明されている、@c +もっと簡単な構文を使用するほうが良いでしょう: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \override #'(font-shape . italic) + \override #'(font-size . 4) + Idomeneo, + } + \line { + \override #'(font-family . typewriter) + { + \override #'(font-series . bold) + re + di + } + \override #'(font-family . sans) + Creta + } + } +} +@end lilypond + +あらかじめ構成されているフォント間で切り替えを行う方が簡単ですが、@c +他のフォントを使用することも可能です。@c +他のフォントを使用する方法は以下のセクションで説明されています: +@ref{個々に登録するフォント} と @ref{ドキュメント全体のフォント}。 + + +@seealso +記譜法リファレンス: +@ref{The Feta font}, +@ref{マークアップ内部での音楽記譜法}, +@ref{Rotating objects}, +@ref{フォントとフォント サイズを選択する}, +@ref{フォント} + + +@node 個々に登録するフォント +@unnumberedsubsubsec 個々に登録するフォント +@translationof Single entry fonts + +以下の構文を用いることで、@c +オペレーティング システムにインストールされていて、@c +FontConfig に認識されている任意のフォントを@c +楽譜の中で使用することができます: + +@lilypond[quote,verbatim,relative=2] +\override Staff.TimeSignature #'font-name = #"Bitstream Charter" +\override Staff.TimeSignature #'font-size = #2 +\time 3/4 + +a1_\markup { + \override #'(font-name . "Vera Bold") + { Vera Bold } +} +@end lilypond + +@cindex fonts, finding available (利用可能なフォントを見つける) +@cindex finding available fonts (利用可能なフォントを見つける) +@cindex listing available fonts (利用可能なフォントをリストアップする) +@cindex available fonts, listing (利用可能なフォントをリストアップする) + +@funindex show-available-fonts + +以下のコマンドはオペレーティング システムで利用可能な@c +すべてのフォントのリストを表示します: + +@example +lilypond -dshow-available-fonts x +@end example + + +@seealso +記譜法リファレンス: +@ref{フォントの説明}, +@ref{ドキュメント全体のフォント} + +コード断片集: +@rlsr{Text} + +@c A source file gets never installed... +@c Installed Files: +@c @file{lily/font-config-scheme.cc}. + + +@node ドキュメント全体のフォント +@unnumberedsubsubsec ドキュメント全体のフォント +@translationof Entire document fonts + +以下の例で示す方法に従ってフォント ファミリを指定することにより、@c +@emph{roman}, @emph{sans} それに @emph{typewriter} フォント ファミリ@c +として使用されるデフォルト フォントを変更することができます。@c +フォントについての説明は、@ref{フォントの説明} を参照してください。 + +@cindex font families, setting (フォント ファミリを設定する) +@cindex fonts, changing for entire document (ドキュメント全体のフォントを変更する) + +@funindex make-pango-font-tree + +@lilypond[verbatim,quote] +\paper { + myStaffSize = #20 + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" + (/ myStaffSize 20))) +} + +\relative c'{ + c1-\markup { + roman, + \sans sans, + \typewriter typewriter. } +} +@end lilypond + +@c we don't do Helvetica / Courier, since GS incorrectly loads +@c Apple TTF fonts + + +@seealso +記譜法リファレンス: +@ref{フォントの説明}, +@ref{個々に登録するフォント}, +@ref{フォントとフォント サイズを選択する}, +@ref{フォント} diff --git a/Documentation/ja/texidocs/GNUmakefile b/Documentation/ja/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/ja/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/ja/texidocs/piano-template-with-centered-dynamics.texidoc b/Documentation/ja/texidocs/piano-template-with-centered-dynamics.texidoc new file mode 100644 index 0000000000..bec33fa9d1 --- /dev/null +++ b/Documentation/ja/texidocs/piano-template-with-centered-dynamics.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +多くのピアノ譜は、強弱記号を 2 つの譜の間に置きます。これを実現するにはちょっ@c +とした調整が必要ですが、そのテンプレートがここにあるので、あなた自身が調整を行@c +う必要はありません。 +" diff --git a/Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc new file mode 100644 index 0000000000..83cc1e7b87 --- /dev/null +++ b/Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc @@ -0,0 +1,4 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +旋律と歌詞のための譜表を持つ代わりに、歌詞をピアノ譜の 2 つの譜の間に置くことができます。 +" diff --git a/Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc new file mode 100644 index 0000000000..bef7ded495 --- /dev/null +++ b/Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -0,0 +1,4 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜表と、その下にピアノ伴奏譜があります。 +" diff --git a/Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc new file mode 100644 index 0000000000..8e8391e7c8 --- /dev/null +++ b/Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -0,0 +1,4 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは旋律、単語、コードを持つ歌曲の楽譜のためのテンプレートです。 +" diff --git a/Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc new file mode 100644 index 0000000000..fff7212241 --- /dev/null +++ b/Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -0,0 +1,4 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません! +" diff --git a/Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc new file mode 100644 index 0000000000..357d38339e --- /dev/null +++ b/Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -0,0 +1,8 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&ペーストして、音符@c +を付け加えて、それから歌詞の単語を付け加えてください。この例は自動ビームを off にして@c +います。これはボーカル パートでは一般的なことです。自動ビームを使用するには、対応する@c +行を変更するか、コメント アウトしてください。 +" + diff --git a/Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc new file mode 100644 index 0000000000..0440d84912 --- /dev/null +++ b/Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは音符を持つ譜表を提供するとても簡単なテンプレートであり、ソロの楽器や旋律に適しています。@c +これをファイルにカット&ペーストして、音符を付け加えれば完了です! +" + diff --git a/Documentation/ja/texidocs/string-quartet-template-simple.texidoc b/Documentation/ja/texidocs/string-quartet-template-simple.texidoc new file mode 100644 index 0000000000..7b8e7a4686 --- /dev/null +++ b/Documentation/ja/texidocs/string-quartet-template-simple.texidoc @@ -0,0 +1,5 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号のために +@code{@bs{}global} セクションを使っています。 +" diff --git a/Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc new file mode 100644 index 0000000000..d8171cb6a5 --- /dev/null +++ b/Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -0,0 +1,14 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +\"弦楽四重奏テンプレート\" は適切な弦楽四重奏の楽譜を作り出しますが、個々の@c +パート譜を譜刻する必要がある場合はどうでしょうか?今度の新しいテンプレートは +@code{@bs{}tag} 機能を用いて容易に楽曲を個々のパートに分ける方法を示しています。 + +このテンプレートは別々のファイルに分ける必要があります。ファイル名は各ファイル@c +の開始部分のコメントの中に記述されています。@code{piece.ly} はすべての音楽定義@c +を保持しています。他のファイル - @code{score.ly}, @code{vn1.ly}, @code{vn2.ly}, +@code{vla.ly} それに @code{vlc.ly} - は対応するパートを作り出します。 + + +別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないでください! +" diff --git a/Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc new file mode 100644 index 0000000000..3e4a057a7b --- /dev/null +++ b/Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -0,0 +1,7 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +このテンプレートは、\"合唱テンプレート\"で示された標準の SATB ボーカル譜に自動@c +ピアノ譜を付け加えています。これは LilyPond の強みの 1 つを示しています - 音楽@c +定義を何回も使用することができます。ボーカルの音符 (例えば、@code{tenorMusic} +の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。 +" diff --git a/Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc new file mode 100644 index 0000000000..3e8301636e --- /dev/null +++ b/Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -0,0 +1,5 @@ +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +このテンプレートは基本的に単純な \"合唱\" テンプレートと同じですが、歌詞が +@code{alignAboveContext} と @code{alignBelowContext} を用いて配置されています。 +" diff --git a/Documentation/ja/texidocs/vocal-ensemble-template.texidoc b/Documentation/ja/texidocs/vocal-ensemble-template.texidoc new file mode 100644 index 0000000000..0273fc12e2 --- /dev/null +++ b/Documentation/ja/texidocs/vocal-ensemble-template.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441 + texidocja = " +これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c +もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c +便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@c +歌\" テンプレートのように、4 つのボイスは 2 つの譜にグループ分けされています。" diff --git a/Documentation/ja/translations.html.in b/Documentation/ja/translations.html.in deleted file mode 100644 index d110144a12..0000000000 --- a/Documentation/ja/translations.html.in +++ /dev/null @@ -1,171 +0,0 @@ -

最終更新日 Mon Apr 13 17:48:23 UTC 2009 -

- - - - - LilyPond documentation translations status - - - - -

Up to documentation index

- -

ドキュメント翻訳状況

- -

このページは、LilyPond @TOPLEVEL_VERSION@ ドキュメントのうちの翻訳されたセクションについての概要です。ドキュメントの各セクションについて以下の情報が示されています: 括弧の中にそのセクションの単語数、翻訳者と校正者 (校正者は小さなフォントで表示されます)、英語で書かれたそのセクションのオリジナルのうちどれくらいが翻訳されたのか、その翻訳がどれくらい新しいのか、その翻訳が Grand Documentation Project (GDP) の開始後に更新されたのかどうか。 -

- -

GDP は英語のドキュメントに多くの変更を加えるため、翻訳されたドキュメントはたいてい最新ではないということに注意してください。しかしながら、そのことは翻訳されたドキュメントが現在の LilyPond バージョンに対して不正確であるということを意味するわけではありません。それは翻訳されたドキュメントは英語で書かれたドキュメントと同期していないということを意味するだけです。我々は翻訳ドキュメントが現在の LilyPond 文法や機能と矛盾しないよう最善を尽くしており、GDP が英語で書かれた対応セクションを処理し終わったときにそのセクションを更新しようと心がけています。 -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond --- 学習マニュアル 翻訳者翻訳点検者翻訳済み最新その他の情報
セクション タイトル
(429)
Yoshiki Sawadaはいpartiallypost-GDP
序文
(411)
Yoshiki Sawadaはいはいpost-GDP
1 導入部
(3855)
Yoshiki Sawadaはいはいpost-GDP
2 チュートリアル
(6287)
Yoshiki Sawadaはいpartiallypost-GDP
3 基礎となるコンセプト
(10318)
Yoshiki Sawadaはいはいpost-GDP
4 出力を調整する
(14775)
Yoshiki Sawadaはいはいpost-GDP
5 LilyPond プロジェクトに取り組む
(3144)
Yoshiki Sawadaはいpartiallypost-GDP
A テンプレート
(498)
Yoshiki Sawada一部 (40 %)partiallypost-GDP
B Scheme tutorial
(960)
いいえpre-GDP
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU LilyPond --- アプリケーション使用方法 翻訳者翻訳点検者翻訳済み最新その他の情報
セクション タイトル
(407)
Yoshiki Sawadaはいpartiallypost-GDP
1 インストール
(193)
Yoshiki Sawadaはいpartiallypost-GDP
2 セットアップ
(1149)
Yoshiki Sawadaはいはいpost-GDP
3 LilyPond を実行する
(2827)
Yoshiki Sawadaはいはいpost-GDP
4 @command{lilypond-book}: Integrating text and music
(3248)
Yoshiki Sawadaいいえはいpost-GDP
5 Converting from other formats
(1171)
Yoshiki Sawadaいいえはいpost-GDP
-

- - - diff --git a/Documentation/ja/translations.itexi b/Documentation/ja/translations.itexi new file mode 100644 index 0000000000..1cd9db36f7 --- /dev/null +++ b/Documentation/ja/translations.itexi @@ -0,0 +1,802 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{最終更新日 Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +GNU LilyPond 学習マニュアル +@tab 翻訳者 +@tab 翻訳点検者 +@tab 翻訳済み +@tab 最新 +@tab その他の情報 +@item +セクション タイトル +@* +124 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@item +1 チュートリアル +@* +2535 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +2 一般的な記譜法 +@* +4184 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +3 基礎となるコンセプト +@* +11139 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +4 出力を調整する +@* +15408 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab post-GDP +@item +A テンプレート +@* +225 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond 記譜法リファレンス +@tab 翻訳者 +@tab 翻訳点検者 +@tab 翻訳済み +@tab 最新 +@tab その他の情報 +@item +セクション タイトル +@* +355 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@item +1 音楽記譜法 +@* +91 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +1.1 ピッチ +@* +4479 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab post-GDP +@item +1.2 リズム +@* +6048 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab post-GDP +@item +1.3 表現記号 +@* +1726 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +1.4 繰り返し +@* +930 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +GNU LilyPond -- アプリケーション使用方法 +@tab 翻訳者 +@tab 翻訳点検者 +@tab 翻訳済み +@tab 最新 +@tab その他の情報 +@item +セクション タイトル +@* +135 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@item +1 @command{lilypond} を実行する +@* +3622 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +2 @command{convert-ly} を使ってファイルを更新する +@* +1189 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +3 @command{lilypond-book}: Integrating text and music +@* +3764 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +いいえ +@end html +@end ifhtml +@ifnothtml +いいえ +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab post-GDP +@item +4 外部プログラム +@* +2170 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@item +5 LilyPond 入力ファイルの記述に対する提案 +@* +2694 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab post-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond -- みんなの楽譜作成 +@tab 翻訳者 +@tab 翻訳点検者 +@tab 翻訳済み +@tab 最新 +@tab その他の情報 +@item +セクション タイトル +@* +585 +@tab Yoshiki Sawada +@* +Yoshinobu Ishizaki +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +partially +@end html +@end ifhtml +@ifnothtml +partially +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Yoshiki Sawada +@* +Yoshinobu Ishizaki +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@item +導入部 +@* +4506 +@tab Yoshiki Sawada +@* +Yoshinobu Ishizaki +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@item +ダウンロード +@* +1183 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@item +マニュアル +@* +1200 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@item +コミュニティ +@* +1755 +@tab Yoshiki Sawada +@tab +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab +@ifhtml + +@html +はい +@end html +@end ifhtml +@ifnothtml +はい +@end ifnothtml +@tab pre-GDP +@end multitable + diff --git a/Documentation/ja/translations.template.html.in b/Documentation/ja/translations.template.html.in deleted file mode 100644 index ab76105d89..0000000000 --- a/Documentation/ja/translations.template.html.in +++ /dev/null @@ -1,25 +0,0 @@ - - - - LilyPond documentation translations status - - - - -

Up to documentation index

- -

ドキュメント翻訳状況

- -

このページは、LilyPond @TOPLEVEL_VERSION@ ドキュメントのうちの翻訳されたセクションについての概要です。ドキュメントの各セクションについて以下の情報が示されています: 括弧の中にそのセクションの単語数、翻訳者と校正者 (校正者は小さなフォントで表示されます)、英語で書かれたそのセクションのオリジナルのうちどれくらいが翻訳されたのか、その翻訳がどれくらい新しいのか、その翻訳が Grand Documentation Project (GDP) の開始後に更新されたのかどうか。 -

- -

GDP は英語のドキュメントに多くの変更を加えるため、翻訳されたドキュメントはたいてい最新ではないということに注意してください。しかしながら、そのことは翻訳されたドキュメントが現在の LilyPond バージョンに対して不正確であるということを意味するわけではありません。それは翻訳されたドキュメントは英語で書かれたドキュメントと同期していないということを意味するだけです。我々は翻訳ドキュメントが現在の LilyPond 文法や機能と矛盾しないよう最善を尽くしており、GDP が英語で書かれた対応セクションを処理し終わったときにそのセクションを更新しようと心がけています。 -

- - - diff --git a/Documentation/ja/usage.tely b/Documentation/ja/usage.tely new file mode 100644 index 0000000000..3091af4cc1 --- /dev/null +++ b/Documentation/ja/usage.tely @@ -0,0 +1,87 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 + +@setfilename lilypond-program.info +@settitle GNU LilyPond -- アプリケーション使用方法 +@documentencoding UTF-8 +@documentlanguage ja +@afourpaper + +@macro manualIntro +このマニュアルは LilyPond バージョン @version{} で配布される@c +プログラムの実効方法について説明します。@c +さらに、効率的な使用方法について提案します。 +@end macro + +@c `Usage' was born 1999-10-10 with git commit c82c30c... +@macro copyrightDeclare +Copyright @copyright{} 1999--2010 by the authors. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Program Usage of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage Japanese +@end ignore + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@lilyTitlePage{使用方法} + + +@c TOC -- non-tex +@ifnottex + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* lilypond を実行する:: 操作方法 +* convert-ly を使ってファイルを更新する:: 入力ファイルをアップデートする +* lilypond-book:: 文章と楽譜を統合する +* 外部プログラム:: LilyPond と他のプログラムを混合する。 +* LilyPond 入力ファイルの記述に対する提案:: 効率的な使用方法とバグ対処方法 + +付録 + +* GNU Free Documentation License:: このドキュメントの使用許諾書 +* LilyPond インデックス:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include usage/running.itely +@include usage/updating.itely +@include usage/lilypond-book.itely +@include usage/external.itely +@include usage/suggestions.itely + +@include fdl.itexi + +@node LilyPond インデックス +@appendix LilyPond インデックス +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/ja/usage/GNUmakefile b/Documentation/ja/usage/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/ja/usage/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/ja/usage/external.itely b/Documentation/ja/usage/external.itely new file mode 100644 index 0000000000..6352a345ba --- /dev/null +++ b/Documentation/ja/usage/external.itely @@ -0,0 +1,643 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node 外部プログラム +@chapter 外部プログラム +@translationof External programs + +LilyPond は様々な方法で他のプログラムと連携することができます。 + +@menu +* ポイント&クリック:: +* テキスト エディタ サポート:: +* 他のフォーマットから変換する:: +* LilyPond 出力を他のプログラムで使用する:: +* 独立した include:: +@end menu + + +@node ポイント&クリック +@section ポイント&クリック +@translationof Point and click + +@cindex point and click (ポイント&クリック) + +ポイント&クリックは PDF ビューアの中で表記をクリックすることで@c +入力の中の表記を見つけ出すことを可能にします。@c +これは楽譜の中でエラーを引き起こす入力を見つけ出すことより容易にします。 + +この機能がアクティブな場合、@c +LilyPond は PDF ファイルにハイパーリンクを付け加えます。@c +これらのハイパーリンクは Web ブラウザに送られ、@c +Web ブラウザはカーソルを持つテキスト エディタを適切な位置に開きます。 + +この一連の動作を有効にするには、@c +PDF ビューアが LilyPond で提供される @file{lilypond-invoke-editor} +スクリプトを使ってハイパーリンクを追うように設定変更する必要があります。 + +UNIX の Xpdf では、@c +@file{xpdfrc}@footnote{UNIXでは、このファイルは @file{/etc/xpdfrc} か@c +ホーム ディレクトリの中の @file{.xpdfrc} としてのどちらかです。} +の中に以下の記述が必要です: + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +プログラム @file{lilypond-invoke-editor} は小さな支援プログラムです。@c +これは特別な @code{textedit} URI に対してエディタを呼び出し、@c +それ以外に対しては Web ブラウザを呼び出します。@c +このプログラムは環境変数 @code{EDITOR} を調べて、@c +以下のパターンに動作します: + +@table @code +@item emacs + このプログラムは以下を呼び出します +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item gvim + このプログラムは以下を呼び出します +@example +gvim --remote +:@var{line}:norm@var{column} @var{file} +@end example +@item nedit + このプログラムは以下を呼び出します +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +環境変数 @code{LYEDITOR} はこの動作をオーバライドするために使用されます。@c +これにはエディタを起動するためのコマンド ラインを保持し、@c +@code{%(column)s}, @code{%(line)s} は@c +それぞれファイル、列、行に置き換えられます。 +以下の @code{LYEDITOR} 設定は標準の emacsclient 呼び出しと等価です。 + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + + +@cindex file size, output (出力のファイル サイズ) + +ポイント&クリックのリンクは出力ファイルを肥大化させます。@c +PDF ファイルと PS ファイルのサイズを小さくするには、@c +@file{.ly} ファイルの中に以下を記述してポイント&クリックを OFF にします: + +@example +\pointAndClickOff +@end example + +@noindent +以下を用いて、ポイント&クリックを明示的に ON にすることができます: + +@example +\pointAndClickOn +@end example + +@file{.ly} ファイルの中でポイント&クリックを OFF にする代わりに@c +コマンド ライン オプションで OFF にすることができます: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{配布する LilyPond ファイルでは常にポイント&クリックを OFF にして、@c +.pdf ファイルにあなたのコンピュータの Path 情報が含まれないようにすべきです。@c +配布する .pdf ファイルに Path 情報が含まれていると@c +セキュリティ リスクとなります。} + + +@node テキスト エディタ サポート +@section テキスト エディタ サポート +@translationof Text editor support + +@cindex editors (エディタ) +@cindex vim +@cindex emacs +@cindex modes, editor (エディタのモード) +@cindex syntax coloring (カラーリング構文) +@cindex coloring, syntax (カラーリング構文) + +いくつかのテキスト エディタの LilyPond サポート機能があります。 + +@menu +* Emacs モード:: +* Vim モード:: +* その他のエディタ:: +@end menu + +@node Emacs モード +@unnumberedsubsec Emacs モード +@translationof Emacs mode + +Emacs は @file{lilypond-mode} を持ちます。@c +これはキーワード自動補完、インデント挿入、LilyPond 特有の括弧一致、@c +構文カラーリング、コンパイルへのショートカット、@c +それに Info を用いての LilyPond マニュアル参照といった機能を持ちます。@c +@file{lilypond-mode} があなたのプラットフォームにインストールされて@c +いないのであれば、以下を参照してください。 + +楽譜を記述して、LilyPond を実行するための Emacs モードは +@file{elisp} ディレクトリの中にあるソース アーカイブに保持されています。@c +@command{make install} を実行して、@c +これを @var{elispdir} にインストールします。@c +ファイル @file{lilypond-init.el} を @var{load-path}@file{/sites-start.d/} に@c +配置するか、@file{~/.emacs} または @file{~/.emacs.el} に追記する必要があります。 + +@file{~/.emacs} に以下の行を追記 (あるいは修正) して、@c +ソース パス (例えば @file{~/site-lisp/) を @var{load-path} に@c +追加した方が良いかもしれません。 + +@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 Vim モード +@unnumberedsubsec Vim モード +@translationof Vim mode + +@uref{http://@/www@/.vim@/.org,Vim} のために +LilyPond 用のファイルタイプ プラグイン、インデント モード、@c +それに構文ハイライト モードが用意されています。@c +これらの機能をすべて有効にするには、@c +@file{$HOME/.vimrc} が以下の 3 行を順序に従って保持するよう追記 +(あるいは修正) します: + +@example +filetype off +set runtimepath+=/usr/local/share/lilypond/current/vim/ +filetype on +@end example + +@noindent +LilyPond が @file{/usr/local} にインストールされていない場合は@c +パスを適切に変更してください。@c +このトピックは @rlearning{その他の情報源} で議論されています。 + + +@node その他のエディタ +@unnumberedsubsec その他のエディタ +@translationof Other editors + +他にも LilyPond をサポートするエディタ +(テキスト ベースとグラフィカル ベースの両方) がありますが、@c +それらの特殊な設定ファイルは LilyPond では配布されません。@c +更なる情報はそれらのエディタのドキュメントを参照してください。@c +LilyPond をサポートするエディタは +@rweb{より簡単な編集手段} でリストアップされています。 + + +@node 他のフォーマットから変換する +@section 他のフォーマットから変換する +@translationof Converting from other formats + +楽譜の記述を他のフォーマットからインポートするもできます。@c +この章では、配布プログラムに含まれるインポート ツールについて説明します。 +LilyPond 入力を作り出すツールは他にもあります。@c +例えば GUI シーケンスと XML コンバータです。@c +詳細は @uref{http://@/lilypond@/.org,website} を参照してください。 + +上で述べたツールは @command{lilypond} とは別のプログラムであり、@c +コマンド ラインで実行します。@c +詳細は @ref{コマンド ラインの使用方法} を参照してください。@c +あなたが MacOS 10.3 や 10.4 を使っていて、@c +これらのスクリプト (例えば @code{convert-ly}) を実行する際に問題が@c +発生した場合は、@rweb{MacOS X} を参照してください。 + + +@knownissues +残念なことに我々にはこれらのプログラムを維持していくだけの余力はありません。@c +@qq{これからの課題} になっていると考えてください。@c +パッチは適用されていますが、バグ レポートはほとんど解決されていません。 + +@menu +* midi2ly を呼び出す:: MIDI をインポートする +* musicxml2ly を呼び出す:: MusicXML をインポートする +* abc2ly を呼び出す:: ABC をインポートする +* etf2ly を呼び出す:: Finale をインポートする +* その他のフォーマット:: +@end menu + + +@node midi2ly を呼び出す +@subsection @command{midi2ly} を呼び出す +@translationof Invoking @command{midi2ly} + +@cindex MIDI + +@command{midi2ly} は Type@tie{}1 MIDI ファイルを +LilyPond ソース ファイルに変換します。 + +MIDI (Music Instrument Digital Interface) は電子楽器の標準です: +これはケーブル、シリアル プロトコル、それにファイル フォーマットを指定します。@c +MIDI ファイル フォーマットは音楽を他のプログラムにエクスポートするための@c +デファクトスタンダードなフォーマットです。@c +そのため、MIDI ファイルを扱う機能を持つことは、@c +独自フォーマットを MIDI に変換できるプログラムのファイルを@c +インポートする際に有用です。 + +@command{midi2ly} はトラックを @rinternals{Staff} コンテキストに変換し、@c +チャネルを @rinternals{Voice} コンテキストに変換します。@c +ピッチには相対モードが使用され、演奏時間は必要がある場合にだけ記述されます。 + +デジタル キーボードを使って MIDI ファイルを録音し、@c +それを @file{.ly} ファイルに変換することが可能です。@c +しかしながら、人間の演奏者のリズムは LilyPond コンバータにかけられる +MIDI を作り出せるほど正確ではありません。@c +量子化オプション (@code{-s} と @code{-d} オプション) を指定して +@command{midi2ly} を呼び出すと、リズムの誤りを訂正しようとしますが、@c +十分機能するとは言えません。@c +このため、人間の演奏で生成された MIDI ファイルを @command{midi2ly} で@c +変換することはお勧めできません。 + + +@command{midi2ly} は以下のようにコマンド ラインから呼び出します: +@example +midi2ly [@var{option}]@dots{} @var{midi-file} +@end example + +@q{コマンド ライン} とは、OS のコマンド ラインを意味しているということに@c +注意してください。@c +このことについての更なる情報は @ref{他のフォーマットから変換する} +を参照してください。 + +@command{midi2ly} には以下のオプションがあります。 + +@table @code +@item -a, --absolute-pitches +絶対ピッチで出力します。 + +@item -d, --duration-quant=@var{DUR} +音符の演奏時間を @var{DUR} で量子化します。 + +@item -e, --explicit-durations +すべての音符の演奏時間を出力します。 + +@item -h,--help +使用方法の要約を表示します。 + +@item -k, --key=@var{acc}[:@var{minor}] +デフォルトの調をセットします。@c +@math{@var{acc} > 0} はシャープの数をセットし、@c +@math{@var{acc} < 0} はフラットの数をセットします。@c +短調は @code{:1} で指定します。 + +@item -o, --output=@var{file} +@var{file} に出力します。 + +@item -s, --start-quant=@var{DUR} +音符の始まりを @var{DUR} で量子化します。 + +@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} +連符の演奏時間 @var{DUR}*@var{NUM}/@var{DEN} を許可します。 + +@item -v, --verbose +Verbose モード (ログ等が詳細) で実行します。 + +@item -V, --version +バージョン番号を表示します。 + +@item -w, --warranty +保証と著作権を表示します。 + +@item -x, --text-lyrics +すべてのテキストを歌詞として扱います。 +@end table + + +@knownissues + +アルペジオでの音符のオーバラップは正しく変換されません。@c +最初の音符は読み込まれますが、他の音符は無視されます。@c +すべての音符を同時に開始させ、同じ演奏にして、@c +フレーズ記号かペダル指示記号を追加してください。 + + +@node musicxml2ly を呼び出す +@subsection @code{musicxml2ly} を呼び出す +@translationof Invoking @code{musicxml2ly} + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} は音楽記譜を表すための +XML の派生語です。 + +@command{musicxml2ly} は Part-wise (時間軸優先ではなくパート優先の) MusicXML +から、音符、アーティキュレーション、楽譜構造、歌詞等を抽出し、@c +それらを @file{.ly} ファイルに記述します。@c + +このプログラムはコマンド ラインから以下のように呼び出します: +@example +musicxml2ly [@var{option}]@dots{} @var{xml-file} +@end example + +@q{コマンド ライン} とは、OS のコマンド ラインを意味しているということに@c +注意してください。@c +このことについての更なる情報は @ref{他のフォーマットから変換する} +を参照してください。 + +ファイル名に @file{-} を指定すると、@c +@command{musicxml2ly} はコマンド ラインから入力を受け付けます。 + +@command{musicxml2ly} には以下のオプションがあります。 + +@table @code +@item -a, --absolute +絶対ピッチで出力します。 + +@item -h,--help +使用方法の要約を表示します。 + +@item -l, --language=LANG +ピッチ名に LANG を使用します。@c +例えば、ピッチ名にドイツ語を使用するには 'deutsch' を指定します。 + +@item --lxml +XML 解析に lxml.etree Python パッケージを使用します。@c +これはより少ないメモリと CPU 時間で実行されます。 + +@item --nd --no-articulation-directions +アーティキュレーションや強弱等の指示 (@code{^}, @code{_} あるいは @code{-}) +を変換しません。 + +@item --no-beaming +連桁情報を変換せず、LilyPond の自動連桁機能を使用します。 + +@item -o,--output=@var{file} +出力ファイル名を @var{file} とします。@c +@var{file} に @file{-} を指定すると、出力は stdout に表示されます。@c +指定が無い場合、出力は @var{xml-file}@file{.ly} となります。 + +@item -r,--relative +ピッチを相対モードに変換します。(デフォルト) + +@item -v,--verbose +Verbose モード (ログ等が詳細) で実行します。 + +@item --version +バージョン情報を表示します。 + +@item -z,--compressed +入力ファイルが ZIP で圧縮された MusicXML ファイルであることを示します。 +@end table + + +@node abc2ly を呼び出す +@subsection @code{abc2ly} を呼び出す +@translationof Invoking @code{abc2ly} + +@warning{このプログラムはサポートされていません。@c +LilyPond 将来のバージョンからは削除される可能性があります。} + +@cindex ABC + +ABC は ASCII ベースの非常にシンプルなフォーマットです。@c +このファイル形式について ABC のサイトで説明されています: + +@quotation +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. +@end quotation + +@command{abc2ly} は ABC から LilyPond に変換を行います。@c +以下のように呼び出します: + +@example +abc2ly [@var{option}]@dots{} @var{abc-file} +@end example + +@command{abc2ly} には以下のオプションがあります。 + +@table @code +@item -b,--beams=None +ABC の連桁情報を保持します。 + +@item -h,--help +このオプション一覧を表示します。 + +@item -o,--output=@var{file} +出力ファイル名を @var{file} とします。 + +@item -s,--strict +@c 未訳 +be strict about success + +@item --version +バージョン情報を表示します。 +@end table + +LilyPond コードを ABC ソース ファイルに付け加えるための簡単な機能があります。@c +以下のように記述した場合: + +@example +%%LY voices \set autoBeaming = ##f +@end example + +キーワード @q{voices} の後に続くテキストが +LilyPond 出力ファイルのカレントのボイスに挿入されます。 + +同様に、 + +@example +%%LY slyrics more words +@end example + +これは、キーワード @q{slyrics} の後に続くテキストを@c +歌詞のカレント行に挿入します。 + + +@knownissues + +ABC の標準はあくまでも @q{標準} でしかありません。@c +機能拡張 (例えば、多声音楽) のために、異なる書式があります。 + +1 つのファイルに複数の旋律を持つものは変換できません。 + +ABC は行の先頭で単語と音符との同期をとりますが、@c +@command{abc2ly} は同期をとりません。 + +@command{abc2ly} は ABC の連桁を無視します。 + + +@node etf2ly を呼び出す +@subsection @command{etf2ly} を呼び出す +@translationof Invoking @command{etf2ly} + +@warning{このプログラムはサポートされていません。@c +LilyPond 将来のバージョンからは削除される可能性があります。} + +@c not yet +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) is a format used by Coda Music +Technology's Finale product. @command{etf2ly} will convert part of an ETF +file to a ready-to-use LilyPond file. + +It is invoked from the command-line as follows. + +@example +etf2ly [@var{option}]@dots{} @var{etf-file} +@end example + +Note that by @q{command-line}, we mean the command line of the +operating system. See @ref{Converting from other formats}, for +more information about this. + +The following options are supported by @command{etf2ly}: + +@table @code +@item -h,--help +this help +@item -o,--output=@var{FILE} +set output filename to @var{FILE} +@item --version +version information +@end table + + +@knownissues + +The list of articulation scripts is incomplete. Empty measures +confuse @command{etf2ly}. Sequences of grace notes are ended improperly. + + +@node その他のフォーマット +@subsection その他のフォーマット +@translationof Other formats + +@cindex External programs, generating LilyPond files (LilyPond ファイルを生成する外部プログラム) + +LilyPond 自体は他のフォーマットを一切サポートしませんが、@c +外部ツールで LilyPond ファイルを生成することができます。@c +それらのツールは @rweb{より簡単な編集手段} でリストアップされています。 + + +@node LilyPond 出力を他のプログラムで使用する +@section LilyPond 出力を他のプログラムで使用する +@translationof LilyPond output in other programs + +このセクションでは、@command{lilypond-book} を用いた自動手法ではない、@c +テキストと楽譜を統合する手法を示します。 + +@menu +* 大きな楽譜から多くの引用を行う:: +* LilyPond 出力を OpenOffice.org に挿入する:: +* LilyPond 出力を他のプログラムに挿入する:: +@end menu + +@node 大きな楽譜から多くの引用を行う +@unnumberedsubsec 大きな楽譜から多くの引用を行う +@translationof Many quotes from a large score + +大きな楽譜から多くの断片を引用する必要がある場合、@c +システムをクリップする機能を使うことができます。@c +@c @ruser{音楽の断片を抽出する} +@ruser{Extracting fragments of music} を参照してください。 + +@node LilyPond 出力を OpenOffice.org に挿入する +@unnumberedsubsec LilyPond 出力を OpenOffice.org に挿入する +@translationof Inserting LilyPond output into OpenOffice.org + +@cindex OpenOffice.org + +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond} を用いて +LilyPond 記譜を OpenOffice.org に付け加えることができます。 + + +@node LilyPond 出力を他のプログラムに挿入する +@unnumberedsubsec LilyPond 出力を他のプログラムに挿入する +@translationof Inserting LilyPond output into other programs + +LilyPond 出力を他のプログラムに挿入するには、@c +@code{lilypond-book} ではなく、@code{lilypond} を使用します。@c +それぞれの例を個々に作成してドキュメントに付け加えます。@c +大抵のプログラムに @file{PNG}, @file{EPS}, あるいは @file{PDF} フォーマットの +LilyPond 出力を挿入することができます。 + +LilyPond 楽譜の周りの空白を減らすには、以下のオプションを使用します: +the following options + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + + +@file{EPS} を作り出すには、以下のようにします: + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly + +@file{PNG}: +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly +@end example + + +@node 独立した include +@section 独立した @code{include} +@translationof Independent @code{include}s + +共有可能な大きな (そして有用な!) コードを記述している人がいます。@c +これらのコードは独自のやり方で LilyPond を include してい場合があります。@c +include が行われない場合、include されるファイルをダウンロードして@c +手動でそれらを include する必要があります。 + + +@menu +* MIDI アーティキュレーション:: +@end menu + + +@node MIDI アーティキュレーション +@subsection MIDI アーティキュレーション +@translationof MIDI articulation + +LilyPond は @qq{校閲} のために MIDI 出力を作り出すことができます。@c +しかしながら MIDI に出力されるのは、強弱記号、明示的なテンポ記号、@c +音符と演奏時間だけです。 + +@emph{アーティキュレーション} プロジェクトは、@c +楽譜の情報をより多く MIDI に組み込もうとしている試みの 1 つです。@c +音符に @q{アーティキュレーション} を加えるため、@c +スラーの付いていない音符を縮めます。@c +縮める長さは音符に付いているアーティキュレーション記号に基づいてが決まります: +例えば、スタッカートは音価を半分にし、@c +テヌートは音符を演奏時間いっぱい鳴らします。@c +さらに、このスクリプトはトリルとターンを理解し、@c +モルデントなど他の装飾を理解するよう拡張することができます。 + +@example +@uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate} +@end example + +@knownissues + +この機能は理解できるものにしか効果を持ちません: +(音符のプロパティの代わりの) テキスト マークアップは無視されます。 diff --git a/Documentation/ja/usage/lilypond-book.itely b/Documentation/ja/usage/lilypond-book.itely new file mode 100644 index 0000000000..0d9e18923e --- /dev/null +++ b/Documentation/ja/usage/lilypond-book.itely @@ -0,0 +1,1084 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + +@c Note: keep this node named so that `info lilypond-book' brings you here. +@node lilypond-book +@chapter @command{lilypond-book}: Integrating text and music +@translationof lilypond-book + +@untranslated + +If you want to add pictures of music to a document, you can simply do it +the way you would do with other types of pictures. The pictures are +created separately, yielding PostScript output or PNG images, and those +are included into a @LaTeX{} or HTML document. + +@command{lilypond-book} provides a way to automate this process: This +program extracts snippets of music from your document, runs +@command{lilypond} on them, and outputs the document with pictures +substituted for the music. The line width and font size definitions for +the music are adjusted to match the layout of your document. + +This is a separate program from @command{lilypond} itself, and is run +on the command line; for more information, see @ref{コマンド ラインの使用方法}. If you have MacOS 10.3 or 10.4 and you have trouble running +@code{lilypond-book}, see FIXME FIXME @c @ref{MacOS X のためのセットアップ}. + +This procedure may be applied to @LaTeX{}, HTML, Texinfo or DocBook +documents. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex documents, adding music to +@cindex HTML, music in +@cindex Texinfo, music in +@cindex DocBook, music in +@cindex @LaTeX{}, music in + +@menu +* An example of a musicological document:: +* Integrating music and text:: +* Music fragment options:: +* Invoking lilypond-book:: +* Filename extensions:: +* Alternate methods of mixing text and music:: +@end menu + + +@node An example of a musicological document +@section An example of a musicological document +@translationof An example of a musicological document + +@untranslated + +@cindex musicology +Some texts contain music examples. These texts are musicological +treatises, songbooks, or manuals like this. Such texts can be made by +hand, simply by importing a PostScript figure into the word processor. +However, there is an automated procedure to reduce the amount of work +involved in HTML, @LaTeX{}, Texinfo and DocBook documents. + +A script called @code{lilypond-book} will extract the music fragments, +format them, and put back the resulting notation. Here we show a small +example for use with @LaTeX{}. The example also contains explanatory +text, so we will not comment on it further. + +@subheading Input + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Documents for \verb+lilypond-book+ may freely mix music and text. +For example, + +\begin{lilypond} +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +\end{lilypond} + +Options are put in brackets. + +\begin{lilypond}[fragment,quote,staffsize=26,verbatim] + c'4 f16 +\end{lilypond} + +Larger examples can be put into a separate file, and introduced with +\verb+\lilypondfile+. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(If needed, replace screech-boink.ly by any .ly file you put in the same +directory as this file.) + +\end{document} +@end verbatim +@end quotation + +@subheading Processing + +Save the code above to a file called @file{lilybook.lytex}, then in a +terminal run + +@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{..lots of stuff deleted..} +@emph{Compiling lilybook.tex...} +cd out +pdflatex lilybook +@emph{..lots of stuff deleted..} +xpdf lilybook +@emph{(replace @command{xpdf} by your favorite PDF viewer)} +@end example + +Running @command{lilypond-book} and @command{latex} creates a lot of +temporary files, which would clutter up the working directory. To +remedy this, use the @code{--output=@var{dir}} option. It will create +the files in a separate subdirectory @file{dir}. + +Finally the result of the @LaTeX{} example shown above.@footnote{This +tutorial is processed with Texinfo, so the example gives slightly +different results in layout.} This finishes the tutorial section. + +@page + +@subheading Output + +Documents for @command{lilypond-book} may freely mix music and text. +For example, + +@lilypond +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +@end lilypond + +Options are put in brackets. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Larger examples can be put into a separate file, and introduced with +@code{\lilypondfile}. + +@lilypondfile[quote,noindent]{screech-boink.ly} + + +@page + +@node Integrating music and text +@section Integrating music and text +@translationof Integrating music and text + +@untranslated + +Here we explain how to integrate LilyPond with various output formats. + +@menu +* LaTeX:: +* Texinfo:: +* HTML:: +* DocBook:: +@end menu + +@node LaTeX +@subsection @LaTeX{} +@translationof LaTeX + +@untranslated + +@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@{ 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]@{@} +@end example + +@noindent +produces + +@lilypond[quote,fragment,staffsize=11]{} + +@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\endinput\fi +@} +@end example + +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\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 +@translationof Texinfo + +@untranslated + +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]@{@} +@end example + +@noindent +produces + +@lilypond[fragment,staffsize=11]{} + +Contrary to @LaTeX{}, @code{@@lilypond@{...@}} does not generate an +in-line image. It always gets a paragraph of its own. + + +@node HTML +@subsection HTML +@translationof HTML + +@untranslated + +Music is entered using + +@example + +\key c \minor c4 es g2 + +@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{}, where the options +are separated by a colon from the music, for example + +@example +Some music in a line of text. +@end example + + +To include separate files, say + +@example +@var{filename} +@end example + +Additionally, @code{} displays the current version +of lilypond. + + +@cindex titling in HTML +@cindex preview image +@cindex thumbnail + +@node DocBook +@subsection DocBook +@translationof DocBook + +@untranslated + +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 + + + + + +@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 + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@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 +@translationof Music fragment options + +@untranslated + +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} +@translationof Invoking lilypond-book + +@untranslated + +@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.pdftex +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{}. + +@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 +@translationof Filename extensions + +@untranslated + +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{.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 Alternate methods of mixing text and music +@section Alternative methods of mixing text and music +@translationof Alternate methods of mixing text and music + +@untranslated + +This section shows methods to integrate text and music, different than +the automated method with @command{lilypond-book}. + +@menu +* Many quotes from a large score:: +* Inserting LilyPond output into OpenOffice.org:: +* Inserting LilyPond output into other programs:: +@end menu + +@node Many quotes from a large score +@unnumberedsubsec Many quotes from a large score +@translationof Many quotes from a large score + +@untranslated + +If you need to quote many fragments from a large score, you can also use +the clip systems feature, see @ruser{Extracting fragments of music}. + + +@node Inserting LilyPond output into OpenOffice.org +@unnumberedsubsec Inserting LilyPond output into OpenOffice.org +@translationof Inserting LilyPond output into OpenOffice.org + +@untranslated + +@cindex OpenOffice.org + +LilyPond notation can be added to OpenOffice.org with +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. + + +@node Inserting LilyPond output into other programs +@unnumberedsubsec Inserting LilyPond output into other programs +@translationof Inserting LilyPond output into other programs + +@untranslated + +To insert LilyPond output in other programs, use @code{lilypond} +instead of @code{lilypond-book}. Each example must be created +individually and added to the document; consult the documentation for +that program. Most programs will be able to insert LilyPond output in +@file{PNG}, @file{EPS}, or @file{PDF} formats. + +To reduce the white space around your LilyPond score, use +the following options + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +To produce a useful @file{EPS} file, use + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly + +@file{PNG}: +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly +@end example + diff --git a/Documentation/ja/usage/running.itely b/Documentation/ja/usage/running.itely new file mode 100644 index 0000000000..01c60ad00b --- /dev/null +++ b/Documentation/ja/usage/running.itely @@ -0,0 +1,837 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + +@node lilypond を実行する +@chapter @command{lilypond} を実行する +@translationof Running lilypond + +この章では LilyPond を実行するための細かな規定について詳述します。 + +@menu +* 通常の使用方法:: +* コマンド ラインの使用方法:: +* エラー メッセージ:: +* 一般的なエラー:: +@end menu + + +@node 通常の使用方法 +@section 通常の使用方法 +@translationof Normal usage + +たいていのユーザは GUI から LilyPond を実行します。@c +まだ実行したことがないのであれば @rlearning{チュートリアル} を読んでください。 +lilypond ファイルを書くのに代替のエディタを使用するのであれば、@c +そのエディタのドキュメントを読んでください。 + + +@node コマンド ラインの使用方法 +@section コマンド ラインの使用方法 +@translationof Command-line usage + +この節にはコマンド ラインで LilyPond を使用するための追加情報が含まれます。@c +これにはプログラムに追加オプションを渡す必要があるかもしれません。@c +さらに、いくつかの特別なプログラム (@code{midi2ly} など) は@c +コマンド ラインからしか利用できません。 + +ここで @q{コマンド ライン} とは、OS の中にあるコマンド ラインを意味します。@c +Windows ユーザは @q{DOS シェル} という言葉の方が馴染みがあるかもしれません。@c +MaxOS@tie{}X ユーザは @q{ターミナル} や @q{コンソール} という言葉の方が@c +馴染みがあるかもしれません。@c +MaxOS@tie{}X ユーザは追加のセットアップが必要かもしれません。@c +@rweb{MacOS X} を参照してください。 + +OS のコマンド ラインの使用方法についての説明は@c +このマニュアルが扱う範囲ではありません。@c +コマンド ラインに馴染みがない場合は、@c +その内容を扱っている他のドキュメントをあたってください。 + +@menu +* lilypond を呼び出す:: +* lilypond のコマンド ライン オプション:: +* 環境変数:: +* LilyPond in chroot jail:: +@end menu + +@node lilypond を呼び出す +@unnumberedsubsec @command{lilypond} を呼び出す +@translationof Invoking lilypond + + +@command{lilypond} 実行可能形式ファイルは@c +コマンド ラインから以下のように呼び出されます。 + +@example +lilypond [@var{option}]@dots{} @var{file}@dots{} +@end example + +拡張子を持たないファイル名で呼び出された場合、@c +@file{.ly} が最初に試されます。@c +sudin から入力を読み込む場合には、@c +@var{file} に対してダッシュ (@code{-}) を使用します。 + +@file{filename.ly} が処理されると、@c +lilypond は出力として @file{filename.ps} と @file{filename.pdf} を作り出します。@c +いくつかのファイルを指定することもできます。@c +その場合、それらのファイルは個々に処理されます。@c +@footnote{GUILE のステータスは @code{.ly} 処理後にリセットされません。@c +そのため、Scheme 内部からいかなるシステム デフォルトも変更しないよう注意してください。} + +@file{filename.ly} が複数の @code{\score} を含んでいる場合、@c +2 つ目以降の score は +@file{filename-1.pdf} から始まる番号付きのファイルに出力されます。@c +さらに、@code{output-suffix} がベース名と番号の間に挿入されます。@c +以下の内容を含んでいる入力ファイルは + +@example +#(define output-suffix "violin") +\book @{ @dots{} @} +#(define output-suffix "cello") +\book @{ @dots{} @} +@end example + +@noindent +@var{base}@file{-violin.pdf} と @var{base}@file{-cello-1.pdf} を出力します。 + + +@unnumberedsubsubsec 標準シェル コマンド + +シェル (例えばコマンド ウィンドウ) がリダイレクトをサポートしているのであれば、@c +以下のコマンドでコンソール出力をファイルにリダイレクトすると役に立つかもしれません。 + +@itemize + +@item +@code{lilypond file.ly 1>stdout.log} 通常出力をリダイレクトします + +@item +@code{lilypond file.ly 2>stderr.log} エラー メッセージをリダイレクトします。 + +@item +@code{lilypond file.ly &>all.log} すべての出力をリダイレクトします + +@end itemize + +あなたの使用しているシェルがこれらのオプションをサポートしているかどうか、@c +あるいは構文が異なるかどうかは、そのシェルのドキュメントを調べてください。@c +これらはシェル コマンドであり、lilypond とは無関係です。 + + +@node lilypond のコマンド ライン オプション +@unnumberedsubsec @command{lilypond} のコマンド ライン オプション +@translationof Command line options for lilypond + +@cindex Invoking @command{lilypond} (@command{lilypond} を呼び出す) +@cindex command line options for @command{lilypond} (@command{lilypond} のためのコマンド ライン オプション) +@cindex options, command line (コマンド ライン オプション) +@cindex switches (切り換え) + +以下のオプションがサポートされます: + +@table @code + +@item -e,--evaluate=@var{expr} +@file{.ly} ファイルを解析する前に Scheme @var{expr} を評価します。@c +複数の @code{-e} オプションが与えられた場合、それらは順番に評価されます。 + +表記は @code{guile-user} モジュールの中で評価されます。@c +そのため、@var{expr} の中で定義を使いたいのならば、@c +@code{.ly} ファイルに以下をインクルードして: + +@example +#(use-modules (guile-user)) +@end example + +@noindent +コマンド ラインで以下を使用します: + +@example +lilypond -e '(define-public a 42)' +@end example + + + +@item -f,--format=@var{format} +フォーマットを指定します。@c +@code{format} には @code{svg}, @code{ps}, @code{pdf}, @code{png} を選択します。 + +例: @code{lilypond -fpng @var{filename}.ly} + + + +@item -d,--define-default=@var{var}=@var{val} +これは内部プログラム オプション @var{var} に +Scheme 値 @var{val} をセットします。@c +@var{val} が提供されていない場合、@var{#t} が使用されます。@c +オプションを OFF にするには、@var{var} の接頭辞として @code{no-} を付けます。@c +つまり、 + +@cindex point and click, command line (コマンド ラインからポイント&クリックを制御する) + +@example +-dno-point-and-click +@end example + +@noindent +は +@example +-dpoint-and-click='#f' +@end example +と同じです。 + +ここで興味深いオプションをいくつか挙げます。 + +@table @samp +@item help +@code{lilypond -dhelp} を実行すると@c +使用可能な @code{-d} オプションがすべて表示されます。 + +@cindex paper-size, command line (コマンドラインで paper-size を指定する) + +@item paper-size +このオプションはデフォルトの用紙サイズをセットします。 +@example +-dpaper-size=\"letter\" +@end example + +@noindent +文字列はエスケーブされたクォート ( @code{\"} ) で@c +囲まれていなければならないということに注意してください。 +@c Match " in previous line to help context-sensitive editors + +@item safe +@code{.ly} 入力を信用してはいけません。 + +Web サーバを通じて LilyPond フォーマットが利用可能な場合、@c +@code{--safe} オプションか @code{--jail} オプションの@c +どちらかを@b{渡さなければなりません}。@c +@code{--safe} オプションは@c +以下のようなインライン Scheme コードが大混乱をもたらすことを防ぎます: + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +訳者: #(system "rm -rf /") はルート ディレクトリ以下を削除し、@c +export (ly:gulp-file "/etc/passwd") はパスワード ファイルをエクスポートします。 + +@code{-dsafe} オプションはインライン Scheme 表記を@c +特別なセーフ モジュールの中で評価します。@c +このセーフ モジュールは GUILE @file{safe-r5rs} モジュールから派生したものですが、@c +LilyPond API 関数をいくつか追加しています。@c +これらの関数は @file{scm/safe-lily.scm} でリスト アップされています。 + +さらに、セーフ モードは @code{\include} 指示を却下し、@c +@TeX{} 文字列の中にあるバックスラッシュを無効にします。 + +セーフ モードでは、LilyPond 変数を Scheme にインポートすることはできません。 + +@code{-dsafe} はリソースの乱用を検出@emph{しません}。@c +例えば循環データ構造体をバックエンドに食わせることで、@c +プログラムをハングさせることは可能です。@c +そのため、パブリックにアクセス可能な Web サーバ上で LilyPond を使用する場合、@c +そのプロセスの CPU とメモリの両方の使用は制限されるべきです。 + +セーフ モードは多くの有用な LilyPond 断片がコンパイルされることを妨げます。@c +@code{--jail} はより安全な代替オプションですが、@c +セット アップにより多くの作業を必要とします。 + +@cindex output format, setting (出力フォーマットを設定する) +@item backend +バックエンドに対して使用する出力フォーマットを指定します。@c +@code{format} の選択肢には以下があります: +@table @code +@item ps +@cindex PostScript output (PostScript 出力) + PostScript + + Postscript ファイルは TTF, Type1, OTF フォントを含んでいます。@c +これらのフォントのサブセット化 +(訳者: フォント セットを使用するフォントに限定すること) は行われません。@c +東洋の文字セットを使用する場合、巨大なファイルになる可能性があります。 + +@item eps + 縮約された PostScript (EPS)。@c +これは各ページ (システム) を@c +フォントを持たない個別の @file{EPS} ファイルとして吐き出し、@c +フォントを含めたすべてのページ (システム) を持つ +@file{EPS} ファイルを 1 つ吐き出します。 + +このモードは @command{lilypond-book} でデフォルトで使用されます。 + +@item svg +@cindex SVG (Scalable Vector Graphics) + SVG (Scalable Vector Graphics)。@c +これは各ページを@c +フォントを埋め込まれた個別の @file{SVG} ファイルとして吐き出します。@c +埋め込みフォントをサポートする SVG ビューアか@c +埋め込みフォントを OTF フォントに置き換える機能を持つ SVG ビューアが必要になります。@c +UNIX では、@c +@uref{http://www.inkscape.org,Inkscape} (バージョン 0.42 以降) を@c +使うことになるかもしれません。@c +使用前に、OTF フォントを LilyPond ディレクトリ +(一般には @file{/usr/share/lilypond/VERSION/fonts/otf/}) から +@file{~/.fonts/} にコピーしてください。 +@item scm +@cindex Scheme dump (Scheme ダンプ) + 生データ -- 内部 Scheme ベース描画コマンド -- を吐き出します。 + +@item null + 譜刻された楽譜を出力しません。@c +@code{-dno-print-pages} と同じ効果を持ちます。 +@end table + +例: @code{lilypond -dbackend=svg @var{filename}.ly} + +@item preview +タイトルとファイル システム情報を保持している出力ファイルを生成します。 +@item print-pages + +すべてのページを生成します。@c +デフォルトです。@code{-dno-print-pages} は +@code{-dpreview} と組み合わせて使うと有用です。 + +@end table + + + +@item -h,--help +使用方法の要約を表示します。 + +@item -H,--header=@var{FIELD} +ヘッダ フィールドをファイル @file{BASENAME.@var{FIELD}} に吐き出します。 + +@item --include, -I=@var{directory} +@var{directory} を入力ファイルのサーチ パスに追加します。 +@cindex file searching (ファイル検索) +@cindex search path (サーチ パス) + +@item -i,--init=@var{file} +init ファイルとして @var{file} をセットします (デフォルト: @file{init.ly})。 + +@item -o,--output=@var{FILE} +デフォルトの出力ファイルとして @var{FILE} をセットします。@c +適切な接尾辞が追加されます (つまり、pdf ならば拡張子 @code{.pdf} が追加されます)。 + +@item --ps +PostScript を生成します。 + +@item --png +各ページの図を PNG フォーマットで生成します。@c +これは内部で @code{--ps} を使用します。@c +画像の DPI 解像度は以下のようにセットします: +@example +-dresolution=110 +@end example + +@item --pdf +PDF を生成します。@c +これは内部で @code{--ps} を使用します。 + + + +@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir} +@command{lilypond} を chroot jail 環境で実行します。@c +(訳者: chroot jail 環境とはセキュリティのために@c +カレント プロセスに対してルート ディレクトリの位置を変更すること。) + +@code{--jail} オプションは、@c +Web サーバを通じて LilyPond 譜刻を実行するときや +LilyPond が外部から提供されたソースを実行するときに、@c +@code{--safe} よりも自由度の高い代替手段を提供します。 + +@code{--jail} オプションはコンパイル プロセスの開始直前に +@command{lilypond} の ルートを @var{jail} に変更します。@c +それからユーザとグループを提供された環境にマッチするように変更し、@c +カレント ディレクトリは @var{dir} に変更されます。@c +このセットアップは jail (牢獄) から抜け出せないということを +(少なくとも理論的には) 保証します。@c +@code{--jail} を指定した @command{lilypond} の実行は@c +root (ユーザ名) として行われる必要があります。@c +通常、これは @command{sudo} を用いた安全な方法で行われます。 + +jail のセットアップは少々デリケートな問題です。@c +LilyPond がソースをコンパイルするのに必要とされるものすべてを +@emph{jail の内部} で見つけられるということを保証しなければならないからです。@c +一般的なセットアップには以下の項目が含まれます: + +@table @asis +@item 専用のファイルシステムをセットアップする +@code{noexec}, @code{nodev}, @code{nosuid} などのセーフ オプションで@c +マウントするための専用ファイルシステムを作成すべきです。@c +こうすることで、LilyPond から実行可能形式ファイルを実行したり、@c +デバイスに直接書き込むことは不可能になります。@c +専用のパーティションを作成することを望まないのなら、@c +適当なサイズのファイルを作成し、@c +それを使用してループ デバイス (ループバック デバイス) をマウントしてください。@c +専用ファイルシステムはさらに、@c +LilyPond が許可されたディスク容量以上には書き込めないということを保証します。 + +@item 専用のユーザをセットアップする +jail 内部で LilyPond を実行する際、@c +低い権限を持つ専用のユーザとグループ (仮に @code{lily}/@code{lily} とします) で@c +行うべきです。@c +このユーザが書き込み可能なディレクトリが 1 つだけ存在すべきであり、@c +それを @var{dir} に渡します。 + +@item jail の準備をする +LilyPond は実行中にいくつかのファイルを読み込む必要があります。@c +それらのファイルをすべて jail にコピーしておきます。@c +それらのファイルが本当のルート ファイル システムで存在しているパスと@c +同じパスにコピーします。@c +LilyPond インストールの内容すべて (例えば、@file{/usr/share/lilypond}) を@c +コピーすべきです。 + +問題が発生した場合、その原因を突き止める最も簡単な方法は +@command{strace} を使って LilyPond を実行することです。@c +これによりどのファイルが見当たらないのかがわかります。 + +@item LilyPond を実行する +@code{noexec} でマウントされた jail の中では、@c +外部プログラムを実行することは一切できません。@c +そのため、外部プログラムを必要としないバックエンドで +LilyPond を実行しなければなりません。@c +すでに述べたように、@c +jail モードでの LilyPond の実行はスーパーユーザ権限で行われならず +(もちろん、その権限はすぐに外されます)、@c +たぶん @command{sudo} を使います。@c +LilyPond が使用可能な CPU 時間を数秒に制限する +(例えば、@command{ulimit -t} を使って) というのは良いアイディアです。@c +さらに、OS がサポートしているのなら、@c +割り当て可能なメモリ容量を制限するというのも良いアイディアです。 +@end table + + +@item -v,--version +バージョン情報を表示します。 + +@item -V,--verbose +冗長表示モードにします: +読み込むすべてのファイルのフル パスを表示して、時間情報を表示します。 + +@item -w,--warranty +GNU LilyPond の保証責任を表示します。@c +(GNU LilyPond には@strong{保証責任はありません}!) +@end table + +@node 環境変数 +@unnumberedsubsec 環境変数 +@translationof Environment variables + +@cindex LANG +@cindex LILYPOND_DATADIR + +@command{lilypond} は以下の環境変数を認識します: +@table @code +@item LILYPOND_DATADIR +これはデフォルトで参照する@c +ロケール メッセージとデータ ファイルがあるディレクトリを指定します。@c +このディレクトリは @file{ly/}, @file{ps/}, @file{tex/} などの@c +サブディレクトリを保持しているべきです。 + +@item LANG +これは警告メッセージの言語を選択します。 + +@item LILYPOND_GC_YIELD +この変数を使ってメモリ使用量とパフォーマンスを調節することができます。@c +これはメモリ管理の振る舞いを調整するパーセント値です。@c +高い値にするとプログラムはより多くのメモリを使用し、@c +低い値にするとより多くの CPU 時間を使用します。@c +デフォルト値は @code{70} です。 + +@end table + +@c 未訳 +@node LilyPond in chroot jail +@unnumberedsubsec LilyPond in chroot jail + +Setting up the server to run LilyPond in a chroot jail is a complicated +task. The steps are listed below. Examples in the steps are from +Ubuntu Linux, and may require the use of @code{sudo} as appropriate. + +@itemize + +@item Install the necessary packages: LilyPond, GhostScript, and ImageMagick. + +@item Create a new user by the name of @code{lily}: + +@example +adduser lily +@end example + +@noindent +This will create a new group for the @code{lily} user as well, and a home folder, +@code{/home/lily} + +@item In the home folder of the @code{lily} user create a file to use as a +separate filesystem: + +@example +dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000 +@end example + +@noindent +This example creates a 200MB file for use as the jail filesystem. + +@item Create a loop device, make a file system and mount it, then create +a folder that can be written by the @code{lily} user: + +@example +mkdir /mnt/lilyloop +losetup /dev/loop0 /home/lily/loopfile +mkfs -t ext3 /dev/loop0 200000 +mount -t ext3 /dev/loop0 /mnt/lilyloop +mkdir /mnt/lilyloop/lilyhome +chown lily /mnt/lilyloop/lilyhome +@end example + +@item In the configuration of the servers, the JAIL will be @code{/mnt/lilyloop} +and the DIR will be @code{/lilyhome}. + +@item Create a big directory tree in the jail by copying the necessary files, as +shown in the sample script below. + +You can use @code{sed} to create the necessary copy commands for a given +executable: + +@example +for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ + do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ + cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ + \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done +@end example + +@end itemize + +@subheading Example script for 32-bit Ubuntu 8.04 + +@example +#!/bin/sh +## defaults set here + +username=lily +home=/home +loopdevice=/dev/loop0 +jaildir=/mnt/lilyloop +# the prefix (without the leading slash!) +lilyprefix=usr/local +# the directory where lilypond is installed on the system +lilydir=/$lilyprefix/lilypond/ + +userhome=$home/$username +loopfile=$userhome/loopfile +adduser $username +dd if=/dev/zero of=$loopfile bs=1k count=200000 +mkdir $jaildir +losetup $loopdevice $loopfile +mkfs -t ext3 $loopdevice 200000 +mount -t ext3 $loopdevice $jaildir +mkdir $jaildir/lilyhome +chown $username $jaildir/lilyhome +cd $jaildir + +mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp +chmod a+w tmp + +cp -r -L $lilydir $lilyprefix +cp -L /bin/sh /bin/rm bin +cp -L /usr/bin/convert /usr/bin/gs usr/bin +cp -L /usr/share/fonts/truetype usr/share/fonts + +# Now the library copying magic +for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ + "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ + \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ + 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ + | sed '/.*=>.*/d'; done | sh -s + +# The shared files for ghostscript... + cp -L -r /usr/share/ghostscript usr/share +# The shared files for ImageMagick + cp -L -r /usr/lib/ImageMagick* usr/lib + +### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, +### you should be able to run: +### Note that /$lilyprefix/bin/lilypond is a script, which sets the +### LD_LIBRARY_PATH - this is crucial + /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly +@end example + +@c " keep quote signs balanced for context-sensitive editors + + +@node エラー メッセージ +@section エラー メッセージ +@translationof Error messages + +@cindex error messages (エラー メッセージ) +ファイルのコンパイルの最中にはさまざまなエラー メッセージが@c +表示される可能性があります。 + +@table @emph + +@item Warning +@cindex warning (警告) +何か疑わしいことがあります。@c +あなたが何か普通でないことをリクエストしている場合は、@c +そのメッセージを理解して、それを無視することができます。@c +しかしながら、@c +Warning は通常、入力ファイルに何か問題があることを示しています。 + +@item Error +何か明らかに問題があります。@c +カレントの処理ステップ (構文解析、構文解釈、フォーマット) は終了され、@c +次のステップは飛ばされます。 + +@item Fatal error +@cindex error (エラー) +@cindex fatal error (致命的なエラー) +何か明らかに問題があり、LilyPond はコンパイルを続けられません。@c +これが起きることは稀です。@c +これが起こるのはたいてい、フォントのインストールに問題があるためです。 + +@item Scheme error +@cindex trace, Scheme (Scheme トレース) +@cindex call trace (トレースを呼び出す) +@cindex Scheme error (Scheme エラー) +Scheme コードの実行中に発生するこのエラーは +Scheme インタプリタによって引き起こされます。@c +冗長オプション (@code{-V} または @code{--verbose}) 付きで実行している場合、@c +問題となっている関数呼び出しの呼び出し追跡が表示されます。 + +@item Programming error +@cindex Programming error (プログラミング エラー) +内部的な矛盾があります。@c +このエラー メッセージはプログラマとデバッガを助けることを意図したものです。@c +通常、それらは無視できます。@c +時々、それらは非常に大きなメッセージとなり、他の出力を見えにくくします。 + +@item Aborted (core dumped) +これは、プログラムをクラッシュさせる深刻なプログラミング エラーを@c +示しています。@c +そのようなエラーは決定的なものだと考えられます。@c +あなたがそのようなエラーでつまずいた場合、バグ レポートを送ってください。 +@end table + +@cindex errors, message format (エラー メッセージの形式) +警告とエラーを入力ファイルのある部分にリンクさせることが可能な場合、@c +エラー メッセージは以下のような形式になります: + +@example +@var{filename}:@var{lineno}:@var{columnno}: @var{message} +@var{offending input line} +@end example + +エラーが見つかった場所を示すために問題のある行に改行が挿入されます。@c +例えば: + +@example +test.ly:2:19: error: not a duration: 5 + @{ c'4 e' + 5 g' @} +@end example + +これらの位置は LilyPond が警告やエラーが発生した位置を@c +最善を尽くして推測したものですが、@c +(ごく当たり前のことですが) 警告とエラーは@c +何か予期しないことが起こったときに発生するものです。@c +入力ファイルの示された行にエラーを見つけることができない場合は、@c +示された位置の 1 行か 2 行上をチェックしてみてください。 + +エラーについての更なる情報が @ref{一般的なエラー} で提供されています。 + + +@node 一般的なエラー +@section 一般的なエラー +@translationof Common errors + +以下で説明するエラーがしばしば発生しますが、@c +その原因は明白でなかったり、見つけにくかったりします。@c +目を通しておくと、それらのエラーに対処しやすくなります。 + + +@menu +* 楽譜がページからはみ出る:: +* 余計な譜が表示される:: +* 見かけ上 ../ly/init.ly のエラーとなる:: +* エラー メッセージ Unbound variable %:: +* エラー メッセージ FT_Get_Glyph_Name:: +* 警告 -- Warning staff affinities should only decrease:: +@end menu + +@node 楽譜がページからはみ出る +@unnumberedsubsec 楽譜がページからはみ出る +@translationof Music runs off the page + +楽譜がページの右マージンを越えてはみ出る、あるいは過度に密集するのは、@c +ほぼ間違いなく音符の演奏時間に誤りがあり、@c +小節の最後の音符が小節線を越えてしまうためです。@c +ある小節の最後の音符が自動的に挿入される小節線の所で終わらなくても@c +無効ではありません。@c +なぜなら、その音符は次の小節に持ち越されるためです。@c +しかしながら、そのような持ち越しが発生する小節が長く続くと、@c +楽譜は密集して表示されたり、ページからはみ出たりします。@c +ページからはみ出るのは、@c +自動改行を挿入できるのは正しく終了する小節 +(その小節のすべての音符が小節の中で終了しています) +の後ろだけだからです。@c + +@warning{誤った演奏時間は改行を抑制し、結果として楽譜が過度に密集したり、c@ +ページからはみ出たりする可能性が生じます。} + +小節チェックを使用していれば、誤った演奏時間を簡単に見つけることができます。@c +@ruser{小節と小節番号のチェック} を参照してください。 + +あなたがそのような音符が持ち越される小節を続けることを意図しているのであれば、@c +改行させたい場所に不可視の小節線を挿入する必要があります。@c +詳細は +@ruser{小節線} を参照してください。 + + +@node 余計な譜が表示される +@unnumberedsubsec 余計な譜が表示される +@translationof An extra staff appears + +コンテキストが @code{\new} や @code{\context} で明示的に作成されていない場合、@c +既存のコンテキストには適用できないコマンドに遭遇した時点で@c +暗黙的に作成されます。@c +単純な楽譜では、コンテキストの自動作成は有用であり、@c +LilyPond マニュアルのほとんどの例はこの手法を用いています。@c +しかしながら、コンテキストの暗黙的な作成はしばしば予期しない譜や楽譜を@c +発生させてしまいます。@c +例えば、以下のコードは後に続く譜の中にあるすべての符頭を赤にすることを@c +意図していますが、@c +結果は 2 つの譜が表示され、下の譜の符頭の色はデフォルトの黒のままとなります。 + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +これは、(符頭色の) オーバライドが処理される時に +@code{Staff} コンテキストが存在していないため、@c +@code{Staff} コンテキストが暗黙的に作成され、@c +そのコンテキストにオーバライドが適用されるからです。@c +その後に @code{\new Staff} コマンドにより@c +もう 1 つ別の @code{Staff} コンテキストが作成され、@c +そこに音符が配置されます。@c +すべての符頭を赤にする正しいコードは以下のようになります: + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +次の例では、@code{\repeat} コマンドの中に @code{\relative} コマンドが@c +置かれているため、譜が 2 つ生じています。@c +@code{\repeat} コマンドが 2 つの @code{\relative} ブロックを生成し、@c +それぞれが暗黙的に @code{Staff} ブロックと @code{Voice} を作成するため、@c +2 番目の譜は右にずれています。 + +@lilypond[quote,verbatim] +\repeat unfold 2 { + \relative c' { c4 d e f } +} +@end lilypond + +明示的に @code{Voice} をインスタンス化することで、この問題は修正されます: + +@lilypond[quote,verbatim] +\new Voice { + \repeat unfold 2 { + \relative c' { c4 d e f } + } +} +@end lilypond + + +@node 見かけ上 ../ly/init.ly のエラーとなる +@unnumberedsubsec 見かけ上 @code{../ly/init.ly} のエラーとなる +@translationof Apparent error in @code{../ly/init.ly} + +入力ファイルが正しく構成されていないと、@c +@file{../ly/init.ly} に構文エラーがあるという@c +様々な原因のはっきりしないエラー メッセージが表示されます。@c +例えば、括弧やクォート記号の数が一致していない場合に@c +このようなエラーが発生します。 + +最も一般的なエラーは @code{score} ブロックの終わりに括弧が見当たらない +(missing brace, (@code{@}})) というエラーです。@c +この場合の解決方法は明らかです: +@code{score} ブロックが正しく閉じられているかチェックしてください。@c +入力ファイルの正しい構造は @rlearning{LilyPond 入力ファイルの仕組み} +で記述されています。@c +括弧の一致を自動的にハイライトするエディタを使うと、@c +そのようなエラーを防ぐのに役立ちます。 + +次に一般的なエラーの原因は、歌詞ブロックの最後の音節と閉じ括弧 (@code{@}}) +の間に空白が無いために発生します。@c +空白が無ければ、この閉じ括弧は音節の一部と見なされます。@c +常に @emph{すべての} 括弧の前後に空白を入れることをお勧めします。@c +歌詞を用いる場合にこのことが重要になります。@c +@ruser{Entering lyrics} を参照してください。 + + +@node エラー メッセージ Unbound variable % +@unnumberedsubsec エラー メッセージ Unbound variable % +@translationof Error message Unbound variable % + +@emph{Scheme} 形式のコメントではなく @emph{LilyPond} 形式のコメント@c +を持つ Scheme ルーチンが呼び出されると、@c +コンソール出力やログ ファイルの最後にエラー メッセージ +@qq{Unbound variable %} が @qq{GUILE signalled an error ...} +と共に表示されます。@c + +LilyPond 形式のコメントはパーセント記号 (@code{%}) で始まり、@c +Scheme ルーチンの中で使うことはできません。@c +Scheme 形式のコメントはセミコロン (@code{;}) で始まります。 + + +@node エラー メッセージ FT_Get_Glyph_Name +@unnumberedsubsec エラー メッセージ FT_Get_Glyph_Name +@translationof Error message FT_Get_Glyph_Name + +入力ファイルが非 ASCII キャラクタを保持していて、@c +UTF-8 エンコードで保存されていない場合、@c +このエラー メッセージがコンソール出力やログ ファイルに表示されます。@c +詳細は、 +@c @ruser{テキスト エンコーディング} +@ruser{Text encoding} を参照してください。 + + +@node 警告 -- Warning staff affinities should only decrease +@unnumberedsubsec 警告 -- Warning staff affinities should only decrease +@translationof Warning staff affinities should only decrease + +この警告は、譜刻された出力の中に譜が無い場合に表示されます。@c +例えば、リード譜に @code{ChordName} コンテキストと @code{Lyrics} コンテキスト@c +しか無い場合です。@c +この警告は、入力の始めに以下を挿入することで@c +譜として振舞うコンテキストを作ることで回避できます: + +@example +\override VerticalAxisGroup #'staff-affinity = ##f +@end example + +@noindent +詳細は @ruser{Flexible vertical spacing within systems} の中の +@qq{Spacing of non-staff lines} を参照してください。 diff --git a/Documentation/ja/usage/suggestions.itely b/Documentation/ja/usage/suggestions.itely new file mode 100644 index 0000000000..d893e94491 --- /dev/null +++ b/Documentation/ja/usage/suggestions.itely @@ -0,0 +1,645 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node LilyPond 入力ファイルの記述に対する提案 +@chapter LilyPond 入力ファイルの記述に対する提案 +@translationof Suggestions for writing files + +今やあなたはもっと大きな LilyPond 入力ファイル -- チュートリアルにあるような@c +小さな例ではなく、楽曲全体 -- を書き始める準備が整っています。@c +しかしながら、どのように書き進めていくべきなのでしょうか? + +LilyPond があなたの入力ファイルを理解でき、望みの出力を作り出している限り、@c +あなたの入力ファイルがどのようなものであるかは問題になりません。@c +しかしながら、LilyPond 入力ファイルを書いているときに考慮すべきことが@c +他にもいくつかあります。 + +@itemize +@item あなたがミスをしたとしたらどうでしょうか?@c +LilyPond ファイルの構造はエラーを見つけ出すことを@c +より容易に (あるいはより困難に) します。 + +@item あなたがあなたの入力ファイルを誰か他の人と共有したいとしたら@c +どうでしょうか?@c +実際には、あなたが数年前のあなた自身の入力ファイルを変更したいとしたら@c +どうでしょうか?@c +一読して理解可能な LilyPond 入力ファイルがある一方で、@c +あなたを 1 時間も悩ます入力ファイルもあるかもしれません。 + +@item あなたがあなたの LilyPond ファイルを最近のバージョンの LilyPond のために@c +アップグレードしたいとしたらどうでしょうか?@c +入力構文は LilyPond の改良に合わせてしばしば変更されます。@c +たいていの変更は @code{convert-ly} で自動的に変換できますが、@c +いくつかの変更は手動での援助を必要とするかもしれません。@c +LilyPond 入力ファイルはより容易に (あるいはより困難に) +更新できるように構成することができます。 + +@end itemize + +@menu +* 一般的な提案:: +* 既存の音楽を譜刻する:: +* 大きなプロジェクト:: +* トラブルシュート:: +* Make と Makefile:: +@end menu + + +@node 一般的な提案 +@section 一般的な提案 +@translationof General suggestions + +ここで、あなたが問題を回避したり修正する手助けになる@c +可能性がある提案をいくつか挙げます: + +@itemize +@item @strong{すべてのファイルに @code{@bs{}version} 番号を含めます}。@c +テンプレートはすべて @code{@bs{}version} 情報を保持しているということに@c +注意してください。@c +常に @code{@bs{}version} を含めること -- ファイルの大小にかかわらず -- +を強く推奨します。@c +個人的な経験から言って、数年前に使っていた LilyPond のバージョンを@c +思い出そうとすることは大変なことです。@c +@command{convert-ly} は使用した LilyPond のバージョンを宣言することを@c +必要とします。 + +@item @strong{チェックを含めます}: +@ruser{小節と小節番号のチェック}, @ruser{オクターブ チェック}。@c +時々チェックを入れておけば、ミスをしたときに素早くそれを@c +見つけ出すことができます。@c +@q{時々} とはどれくらいの頻度なのでしょうか?@c +それはその音楽の複雑さ次第です。@c +とても簡単な音楽であれば、たぶん 1 回か 2 回です。@c +とても複雑な音楽であれば、おそらく各小節にチェックを入れます。 + +@item @strong{テキスト 1 行につき 1 小節にします}。@c +音楽自体や望みの出力が複雑である場合、1 行に 1 小節だけを記述すると@c +良い場合が多いです。@c +画面スペースを節約するために 1 行に 8 小節も詰め込むことは、@c +入力ファイルを @q{デバッグ} しなければならない場合に、@c +そうするだけの価値はありません。 + +@item @strong{入力ファイルにコメントをつけます}。@c +コメントとして小節番号 (時々) や音楽テーマへの参照 +(@q{second theme in violins}, @q{fourth variation} +(@q{ヴァイオリンの第 2 テーマ}, @q{第 4 ヴァイオリン}) +など) を使用します。@c +初めて楽曲を書いているときはコメントをつける必要は無いかもしれません。@c +しかしながら、数年後に何か変更を加えたいと思った場合や、@c +ソースを友人に渡す場合、あなたがファイルにコメントをつけていなければ、@c +あなたの意図やファイルがどのように構成されているのかを特定することは@c +ずっと大変になります。 + +@item @strong{波括弧にインデントを入れる}。@c +多くの問題は @code{@{} と @code{@}} の数が食い違うことによって生じます。 + +@item セクションや変数の開始時に@strong{明示的に演奏時間を付け加える}。@c +フレーズの開始時に @code{c4 d e} (@code{c d e} ではなく) と記述しておけば、@c +後になって音楽を再編成する場合に問題の発生を免れる可能性があります。 + +@item 音楽定義から@strong{調整を分離します}。@c +@rlearning{変数と関数を用いて入力の手間を省く} と +@rlearning{スタイル シート} を参照してください。 + +@end itemize + + +@node 既存の音楽を譜刻する +@section 既存の音楽を譜刻する +@translationof Typesetting existing music + +既存の楽譜からの音楽を入力している +(つまり、既存の楽譜の楽曲を譜刻している) のなら、 + +@itemize + +@item 1 回につき 1 つのシステム +(訳者: システムとは譜の集まりのこと。例えば、ピアノ譜での 1 システムとは、@c +右手譜 1 小節とそれに対応する左手譜 1 小節) +を入力し (しかし、それでもテキスト 1 行につき 1 小節だけにします)、@c +それを終えたときに各システムをチェックします。@c +処理をスピード アップさせるために @code{showLastLength} プロパティや +@code{showFirstLength} プロパティを使うことになるかもしれません -- +@ruser{Skipping corrected music} を参照してください。 + +@item @code{mBreak = @{ @bs{}break @}} を定義して、写している楽譜が@c +改行するたびに @code{@bs{}mBreak} を入力ファイルに挿入します。@c +これにより、LilyPond の音楽とオリジナルの音楽を比較することが@c +ずっと容易になります。@c +入力した楽譜の校正が終わったときに、それらの改行すべてを削除するために +@code{mBreak = @{ @}} を定義することになるかもしれません。@c +これにより、LilyPond は LilyPond が最適と思う場所に@c +改行を入れることができるようになります。 + +@item 移調楽器のパートは変数に入力します。@c +移調楽器の音符は以下で囲むことを推奨します: + +@example +\transpose c natural-pitch @{...@} +@end example + +@noindent +(@code{natural-pitch} はその楽器のオープン ピッチです) +これにより、変数の中の音楽は C で効率的に記述することができます。@c +変数を使用していれば、必要なときに移調しなおすこともできます +(例えば、楽譜をコンサート ピッチで譜刻したり、@c +トロンボーン パートをト音記号からヘ音記号に変換したり、など)。@c +音楽をすべて変数の中に首尾一貫したピッチで記述しておけば、@c +移調のミスは起こりにくくなります。 + +また、移調が C との間で行われるだけ +-- つまり、他に使用する調が楽器のナチュラル ピッチだけ: +B-フラット トランペットなら bes、@c +A-フラット クラリネットなら aes -- +であるとしても、音楽を変数に格納しておくべきです。@c + +@end itemize + + +@node 大きなプロジェクト +@section 大きなプロジェクト +@translationof Large projects + +大きなプロジェクトに取り組んでいるとき、@c +LilyPond 入力ファイルの構造をすっきりさせておくことが不可欠です。 + +@itemize + +@item @strong{各ボイスに対して変数を使用して}、@c +定義の中の構造を最小限にします。@c +@code{@bs{}score} セクションの構造が最も変更される可能性が高い箇所です。@c +一方、@code{violin} 定義は LilyPond のバージョンが新しくなっても@c +変更される可能性はまずありません。 + +@example +violin = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violin + @} + @} +@} +@end example + +@item @strong{調整を音楽定義から分離します}。@c +このことは前にも触れましたが、大きなプロジェクトでは絶対に不可欠なことです。@c +@code{fthenp} の定義を変更する必要が生じた場合、変更は 1 回で済み、@c +@code{violin} の内部にはまったく手を触れる必要がありません。 + +@example +fthenp = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fthenp c'8. e16 +@} +@end example + +@end itemize + + +@node トラブルシュート +@section トラブルシュート +@translationof Troubleshooting + +遅かれ早かれ、あなたは LilyPond がコンパイルできないファイルを@c +書くことになります。@c +LilyPond が返すメッセージはエラーを見つけ出す@c +手助けになるかもしれませんが、多くの場合、@c +問題の原因を探し出すために調査を行う必要があります。 + +この目的のための最も強力なツールは 1 行コメント (@code{%} で記述します) と@c +ブロック コメント (@code{%@{ ... %@}} で記述します) です。@c +問題がどこにあるかわからない場合、@c +入力ファイルの大きな一部分をコメント アウトすることから始めます。@c +あるセクションをコメント アウトして、そのファイルを再びコンパイルしてみます。@c +コンパイルが通ったのなら、問題は今コメント アウトした部分の中にあります。@c +コンパイルが通らなかった場合は、コンパイルが通るようになるまで@c +コメント アウトしたままにしておきます。 + +極端な場合、最終的に以下のようになるかもしれません: + +@example +\score @{ + << + % \melody + % \harmony + % \bass + >> + \layout@{@} +@} +@end example + +@noindent +(言い換えると、何の音楽も持たないファイルです) + +こうなったとしても、あきらめないでください。@c +少しだけコメントを外して -- 例えば、バス パートを -- +コンパイルが通るかどうか試してみます。@c +コンパイルが通らなかった場合は、バスの音楽をすべてコメント アウトします +(しかし、@code{@bs{}score} の中の @code{@bs{}bass} はコメントを@c +外したままにしておきます)。 + +@example +bass = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +そして、問題を起こしている行を見つけ出すまで、@c +@code{bass} パートから少しずつコメントを外していきます。 + +もう 1 つの非常に有用なデバッグ テクニックは +@rweb{Tiny examples} を構築することです。 + + +@node Make と Makefile +@section Make と Makefile +@translationof Make and Makefiles + +LilyPond を実行できるほとんどすべてのプラットフォームが +@code{make} というソフトウェアをサポートします。@c +このソフトウェアは @code{Makefile} という名前の特殊なファイルを読み込みます。@c +ファイル @code{Makefile} は、@c +ファイルの依存関係と、@c +あるファイルから別のファイルを作り出すために@c +オペレーティング システムに渡す必要があるコマンドを定義します。@c +例えば、@code{Makefile} は LilyPond を実行して +@code{ballad.ly} から @code{ballad.pdf} と @code{ballad.midi} を@c +作り出す方法を記述します。 + +自身の便利さのためかソース ファイルにアクセスしてくれる他の人のために、@c +自身のプロジェクト用に @code{Makefile} を作成することが良い場合があります。@c +これが当てはまるのは、@c +多くのインクルード ファイルと複数の出力オプション +(例えば、フル スコア、パート スコア、指揮譜、ピアノ譜など) を持つ +非常に大きなプロジェクト、あるいは、@c +ビルドするために複雑なコマンドを必要とするプロジェクト +(@code{lilypond-book} プロジェクトなど) +です。@c +@code{Makefile} の複雑さと自由度は、必要性と作者のスキルに応じて、@c +さまざまです。@c +プログラム GNU Make は +GNU/Linux ディストリビューションと MacOS X にインストールされていて、@c +Windows でも利用可能です。 + +@code{make} の使い方についてのすべての詳細は +@strong{GNU Make マニュアル} を参照してください。@c +これから示すのは @code{make} でできることのほんの一例です。 + +@code{Makefile} の中に規則を定義するためのコマンドは、@c +プラットフォームによって異なります。@c +例えば、さまざまな種類がある Linux と MacOS は @code{bash} を使いますが、@c +Windows は @code{cmd} を使います。@c +MacOS X では、コマンド ライン インタプリタを使用するためにシステムを@c +コンフィグレーションする必要があるということに注意してください。@c +ここで、@code{Makefile} の例をいくつか +Linux/MacOS 用と Windows 用の両方のバージョンで示します。 + +最初の例は、4 楽章のオーケストラのためのもので、@c +以下のようなディレクトリ構造を持ちます: + +@example +Symphony/ +|-- MIDI/ +|-- Makefile +|-- Notes/ +| |-- cello.ily +| |-- figures.ily +| |-- horn.ily +| |-- oboe.ily +| |-- trioString.ily +| |-- viola.ily +| |-- violinOne.ily +| `-- violinTwo.ily +|-- PDF/ +|-- Parts/ +| |-- symphony-cello.ly +| |-- symphony-horn.ly +| |-- symphony-oboes.ly +| |-- symphony-viola.ly +| |-- symphony-violinOne.ly +| `-- symphony-violinTwo.ly +|-- Scores/ +| |-- symphony.ly +| |-- symphonyI.ly +| |-- symphonyII.ly +| |-- symphonyIII.ly +| `-- symphonyIV.ly +`-- symphonyDefs.ily +@end example + +@code{Scores} ディレクトリと @code{Parts} ディレクトリの中にある +@code{.ly} ファイルは音符を +@code{Notes} ディレクトリの中にある @code{.ily} ファイルから取得します: + +@example +%%% top of file "symphony-cello.ly" +\include ../definitions.ily +\include ../Notes/cello.ily +@end example + +この @code{Makefile} はターゲットとして +@code{score} (フル スコアの楽曲全体)、@c +@code{movements} (フル スコアの個々の楽章)、@c +それに @code{parts} (演奏者のための個々のパート) を持ちます。@c +さらに、web や email で配布するのに適したソース ファイルの tarball +(訳者: 複数のファイルをコマンド @code{tar} で 1 つのファイルにまとめたもの) +を作成するターゲット @code{archive} もあります。@c +ここでは GNU/Linux や MacOS X 用の @code{Makefile} を示します。@c +これをプロジェクトのトップ ディレクトリに +@code{Makefile} という名前で保存する必要があります: + +@warning{ターゲットやパターン ルールが定義されたとき、@c +そのあとの行はスペースではなく Tab で始まる必要があります。} + +@example +# 出力ファイル名 +piece = symphony +# いくつプロセッサがあるかを決定します +CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` +# lilypond を実行するコマンド +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click -djob-count=$(CPU_CORES) + +# この Makefile で使用される拡張子 +.SUFFIXES: .ly .ily .pdf .midi + +# 入力ファイルと出力ファイルのサーチは VPATH 変数でリストアップされている +# ディレクトリの中で行われます。それらのディレクトリはすべて (GNU make 変数 +# `CURDIR' によって与えられる) カレント ディレクトリのサブディレクトリです。 +VPATH = \ + $(CURDIR)/Scores \ + $(CURDIR)/PDF \ + $(CURDIR)/Parts \ + $(CURDIR)/Notes + +# LY 入力ファイルから PDF ファイルと MIDI ファイルを作成するための +# パターン ルール。.pdf 出力ファイルは `PDF' サブディレクトリの中に +# 配置され、.midi ファイルは `MIDI' サブディレクトリの中に配置されます。 +%.pdf %.midi: %.ly + $(LILY_CMD) $<; \ # this line begins with a tab + if test -f "$*.pdf"; then \ + mv "$*.pdf" PDF/; \ + fi; \ + if test -f "$*.midi"; then \ + mv "$*.midi" MIDI/; \ + fi + +notes = \ + cello.ily \ + horn.ily \ + oboe.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +# 楽章の依存関係 +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +# 総譜の依存関係 +$(piece).pdf: $(piece).ly $(notes) + +# パート譜の依存関係 +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +# 4 つすべての楽章のフル スコアを 1 つのファイルとして生成するには +# `make score' とタイプします。 +.PHONY: score +score: $(piece).pdf + +# すべてのパートを生成するには `make parts' とタイプします。 +# 楽器 `foo' のためのパートを生成するには `make foo.pdf' とタイプします。 +# 例: `make symphony-cello.pdf' +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +# 4 つの楽章を別個のファイルとして生成するには `make movements' とタイプします。 +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements + +archive: + tar -cvvf stamitz.tar \ # this line begins with a tab + --exclude=*pdf --exclude=*~ \ + --exclude=*midi --exclude=*.tar \ + ../Stamitz/* +@end example + + +Windows プラットフォームには特別な面倒さがあります。@c +Windows 用の GNU Make をダウンロードしてインストールした後、@c +システム環境変数に正しいパスを設定して、@c +DOS シェルが Make プログラムを見つけられるようにする必要があります。@c +これを行うには、@c +"マイ コンピュータ" を右クリックして、@code{プロパティ} を選択し、@c +それから @code{詳細設定} を選択します。@c +それから @code{環境変数} をクリックして、@c +@code{システム環境変数} パネルの中にある @code{Path} をハイライトしてから +@code{編集} をクリックして、@c +GNU Make の実行ファイルへのパスを追加します。@c +そのパスは以下のようになります +(訳者: GNU Make のインストールのされ方によって異なります): + +@example +C:\Program Files\GnuWin32\bin +@end example + +Linux/MacOS X とは異なるシェル コマンドを扱い、@c +いくつかのデフォルト システム ディレクトリの中に存在する@c +ファイル空間を扱うために、@c +@code{Makefile} 自体を変更する必要があります。@c +Windows は @code{tar} コマンドを持たないため、@c +@code{archive} ターゲットは除去されます。@c +また、Windows が持つ MIDI ファイルのデフォルト拡張子は異なります。 + +@example +## WINDOWS VERSION +## +piece = symphony +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click \ + -djob-count=$(NUMBER_OF_PROCESSORS) + +#get the 8.3 name of CURDIR (workaround for spaces in PATH) +workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ + do @@echo %%~sb) + +.SUFFIXES: .ly .ily .pdf .mid + +VPATH = \ + $(workdir)/Scores \ + $(workdir)/PDF \ + $(workdir)/Parts \ + $(workdir)/Notes + +%.pdf %.mid: %.ly + $(LILY_CMD) $< # this line begins with a tab + if exist "$*.pdf" move /Y "$*.pdf" PDF/ # begin with tab + if exist "$*.mid" move /Y "$*.mid" MIDI/ # begin with tab + +notes = \ + cello.ily \ + figures.ily \ + horn.ily \ + oboe.ily \ + trioString.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +$(piece).pdf: $(piece).ly $(notes) + +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +.PHONY: score +score: $(piece).pdf + +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements +@end example + + +次の @code{Makefile} は、@c +LaTeX で処理する @command{lilypond-book} ドキュメント用です。@c +このドキュメントは目次を持ちます。@c +目次を作成するには、@c +リンクを更新するために @command{latex} コマンドを 2 回実行する必要があります。@c +.pdf 出力ファイルは @code{out} ディレクトリに保存され、@c +HTML 出力ファイルは @code{htmlout} ディレクトリに保存されます。 + +@example +SHELL=/bin/sh +FILE=myproject +OUTDIR=out +WEBDIR=htmlout +VIEWER=acroread +BROWSER=firefox +LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex +LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex +PDF=cd $(OUTDIR) && pdflatex $(FILE) +HTML=cd $(WEBDIR) && latex2html $(FILE) +INDEX=cd $(OUTDIR) && makeindex $(FILE) +PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf & + +all: pdf web keep + +pdf: + $(LILYBOOK_PDF) # begin with tab + $(PDF) # begin with tab + $(INDEX) # begin with tab + $(PDF) # begin with tab + $(PREVIEW) # begin with tab + +web: + $(LILYBOOK_HTML) # begin with tab + $(HTML) # begin with tab + cp -R $(WEBDIR)/$(FILE)/ ./ # begin with tab + $(BROWSER) $(FILE)/$(FILE).html & # begin with tab + +keep: pdf + cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # begin with tab + +clean: + rm -rf $(OUTDIR) # begin with tab + +web-clean: + rm -rf $(WEBDIR) # begin with tab + +archive: + tar -cvvf myproject.tar \ # begin this line with tab + --exclude=out/* \ + --exclude=htmlout/* \ + --exclude=myproject/* \ + --exclude=*midi \ + --exclude=*pdf \ + --exclude=*~ \ + ../MyProject/* +@end example + +TODO: make this thing work on Windows + +この @code{Makefile} は Windows では機能しません。@c +Windows ユーザの代替手段として、@c +ビルド コマンドを保持する簡単なバッチ ファイルを作成する方法があります。@c +これは @code{Makefile} のように依存関係を保持できませんが、@c +少なくともビルド処理を単一のコマンドに縮小します。@c +以下のコードを +@command{build.bat} あるいは @command{build.cmd} として保存してください。@c +このバッチ ファイルは DOS プロンプトから実行することができ、@c +単にそのアイコンをダブル クリックすることでも実行することができます。 + +@example +lilypond-book --output=out --pdf myproject.lytex +cd out +pdflatex myproject +makeindex myproject +pdflatex myproject +cd .. +copy out\myproject.pdf MyProject.pdf +@end example + + +@seealso +アプリケーションの使用方法: +@rprogram{コマンド ラインの使用方法}, +@rprogram{lilypond-book} diff --git a/Documentation/ja/usage/updating.itely b/Documentation/ja/usage/updating.itely new file mode 100644 index 0000000000..8dc4930faa --- /dev/null +++ b/Documentation/ja/usage/updating.itely @@ -0,0 +1,286 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- + +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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" + +@c Translators: Yoshiki Sawada +@c Translation status: post-GDP + + +@node convert-ly を使ってファイルを更新する +@chapter @command{convert-ly} を使ってファイルを更新する +@translationof Updating files with convert-ly + +@cindex Updating a LilyPond file (LilyPond ファイルを更新する) +@cindex convert-ly + +LilyPond の入力構文は、さまざまな方法で単純化または改善するために、@c +定期的に変更されます。@c +その副作用として、LilyPond のインタプリタは@c +しばしば古い入力ファイルと互換性を持たなくなります。@c +これを救済するために、プログラム @command{convert-ly} を用いることで、@c +たいていの LilyPond のバージョン間での構文変更を処理することができます。 + + +@menu +* 何故構文は変更されるのか?:: +* convert-ly を呼び出す:: +* convert-ly のコマンド ライン オプション:: +* convert-ly の問題点:: +* 手動変換:: +@end menu + +@node 何故構文は変更されるのか? +@section 何故構文は変更されるのか? +@translationof Why does the syntax change? + +@cindex convert-ly +@cindex updating old input files (古い入力ファイルを更新する) + +LilyPond の入力構文はしばしば変更されます。@c +LilyPond 自体が改良されるため、構文 (入力言語) もそれに合わせて変更されます。@c +変更の目的は、入力ファイルを読みやすく、書きやすくするためであったり、@c +LilyPond に新しい機能を持たせるためであったりします。 + +例えば、@code{\paper} と @code{\layout} のプロパティ名は +@code{first-second-third} という形式で記述することになっています。@c +しかしながら、バージョン 2.11.60 で @code{printallheaders} プロパティが@c +この規則に従っていないことが判明しました。@c +放置すべきでしょうか? +(新しいユーザはつじつまの合わない入力形式で混乱するでしょう。) +それとも、変更すべきでしょうか? +(既存の楽譜を持つユーザには煩わしいことです。) +このケースでは、プロパティ名を @code{print-all-headers} に変更することを@c +決断しました。@c +幸運なことに、@c +この変更は @command{convert-ly} ツールで自動的に変換することができます。 + +不幸なことに、@c +@command{convert-ly} はすべての変更を処理できるわけではありません。@c +例えば、バージョン 2.4 以前の LilyPond では、@c +アクセント文字と非英語文字を LaTeX を用いて入力していました +-- Christmas のフランス語は @code{No\"el} のように入力されていました。@c +しかしながら、バージョン 2.6 以降の LilyPond では、@c +特殊文字 @code{ë} を UTF-8 文字として直接 LilyPond ファイルに@c +入力することになりました。@c +@command{convert-ly} はすべての LaTeX の特殊文字を UTF-8 文字に変換する@c +ことはできません。@c +手動で古い LilyPond 入力ファイルを更新する必要があります。 + + +@node convert-ly を呼び出す +@section @command{convert-ly} を呼び出す +@translationof Invoking convert-ly + +@command{convert-ly} は古いバージョン番号を検出するために@c +入力ファイルの @code{version} ステートメントを使用します。@c +たいていの場合、あなたの入力ファイルを更新するには、@c +そのファイルを保持しているディレクトリで以下を実行することで十分です: + +@example +convert-ly -e myfile.ly +@end example + +@noindent +これにより、@code{myfile.ly} は更新され、@c +オリジナル ファイルは @code{myfile.ly~} に保存されます。 + +@warning{@command{convert-ly} のバージョンは、@c +それが扱う最新の構文変更に合わせて変更されます。@c +このため、入力ファイルの @code{\version} 番号はたいてい@c +@command{convert-ly} のバージョンよりも低いことになります。} + +ディレクトリの中にある入力ファイルをすべて変換するには、@c +以下のようにします: + +@example +convert-ly -e *.ly +@end example + +オリジナル ファイルをそのまま残しておき、 +更新されたファイルに新しいファイル名を指定するには以下のようにします: + +@example +convert-ly myfile.ly > mynewfile.ly +@end example + +このプログラムは変換元のバージョン番号をリストアップします。 +バージョン番号がリストアップされない場合、@c +そのファイルは最新であるということになります。 + +MacOS@tie{}X ユーザはこのコマンドをメニュー エントリ +(@code{Compile > Update syntax}) 下で実行することになるかもしれません。 + +Windows ユーザはこれらのコマンドを @q{コマンド プロンプト} ウィンドウから@c +実行する必要があります。@c +コマンド プロンプトは通常、@code{スタート > アクセサリ > コマンド プロンプト} +で見つかります。 + + +@node convert-ly のコマンド ライン オプション +@section @command{convert-ly} のコマンド ライン オプション +@translationof Command line options for convert-ly + +一般に、このプログラムは以下のように呼び出されます: + +@example +convert-ly [@var{option}]@dots{} @var{filename}@dots{} +@end example + + +以下のオプションを与えることができます: + +@table @code +@item -e,--edit +Apply the conversions direct to the input file, modifying it +in-place. + +@item -f,--from=@var{from-patchlevel} +変換元のバージョンをセットします。@c +これがセットされていない場合、@c +@command{convert-ly} は入力ファイルの中にある +@code{version} 文字列を基に推測します。@c +例: @code{--from=2.10.25} + +@item -n,--no-version +通常、@command{convert-ly} は @code{\version} インジケータを@c +出力に付け加えます。@c +このオプションを指定すると、それを抑制します。 + +@item -s, --show-rules +すべての変換を表示して、終了します。 + +@item --to=@var{to-patchlevel} +変換先のバージョンをセットします。@c +デフォルトは利用可能な最新バージョンです。@c +例: @code{--to=2.12.2} + +@item -h, --help +使用方法についてのヘルプを表示します。 +@end table + +texinfo ファイルの中にある LilyPond 断片を更新するには@c +以下を使用してください: + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +2 つのバージョン間での LilyPond 構文の変更を調べるには、@c +以下を使用してください: + +@example +convert-ly --from=... --to=... -s +@end example + + +@node convert-ly の問題点 +@section @code{convert-ly} の問題点 +@translationof Problems with convert-ly + +Windows の @q{コマンド プロンプト} ウィンドウから@c +スペースを含むファイル名やパスを持つファイルに対して@c +convert-ly を実行する場合、@c +入力ファイル名全体を 3 つ (!) のダブル クォートで囲む必要があります: + +@example +convert-ly """D:/My Scores/Ode.ly""" > "D:/My Scores/new Ode.ly" +@end example + +@command{convert-ly -e *.ly} コマンドが@c +展開時に長くなりすぎて失敗する場合、@c +@command{convert-ly} コマンドをループさせてやります。@c +以下の例は UNIX 用であり、@c +カレント ディレクトリの中にあるすべての @code{.ly} ファイルを@c +更新します: + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +Windows の @q{コマンド プロンプト} ウィンドウでの@c +上の例に対応するコマンドは以下の通りです: + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +言語の変更がすべて処理されるわけではありません。@c +指定できる出力オプションは 1 つだけです。@c +自動的に Scheme と更新することと +LilyPond の Scheme インタフェイスを更新することはまったく異なります。@c +Scheme コードの調整は手動で行う覚悟でいてください。 + + +@node 手動変換 +@section 手動変換 +@translationof Manual conversions + +@c not yet +理論的には、@c +@command{convert-ly} のようなプログラムはすべての構文変更を処理できます。 +After all, a computer program interprets the old +version and the new version, so another computer program can +translate one file into another@footnote{At least, this is +possible in any LilyPond file which does not contain scheme. If +there is scheme in the file, then the LilyPond file contains a +Turing-complete language, and we run into problems with the famous +@qq{Halting Problem} in computer science.}. + +しかしながら、LilyPond プロジェクトの資源には限りがあり、@c +すべての変換を自動化することはできません。@c +以下は既知の問題のリストです。 + +@verbatim +1.6->2.0: + Doesn't always convert figured bass correctly, specifically things like {< +>}. Mats' comment on working around this: + To be able to run convert-ly + on it, I first replaced all occurrences of '{<' to some dummy like '{#' + and similarly I replaced '>}' with '&}'. After the conversion, I could + then change back from '{ #' to '{ <' and from '& }' to '> }'. + Doesn't convert all text markup correctly. In the old markup syntax, + it was possible to group a number of markup commands together within +parentheses, e.g. + -#'((bold italic) "string") + This will incorrectly be converted into + -\markup{{\bold italic} "string"} + instead of the correct + -\markup{\bold \italic "string"} +2.0->2.2: + Doesn't handle \partcombine + Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple +stanzas. +2.0->2.4: + \magnify isn't changed to \fontsize. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag isn't changed. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number isn't changed. + - first-page-number no => print-first-page-number = ##f + Line breaks in header strings aren't converted. + - \\\\ as line break in \header strings => \markup \center-align < + "First Line" "Second Line" > + Crescendo and decrescendo terminators aren't converted. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly +converted. +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } should be converted to: + \markup{ \center-align {\line { ... }} } + but now, \line is missing. +2.4->2.6 + Special LaTeX characters such as $~$ in text are not converted to UTF8. +2.8 + \score{} must now begin with a music expression. Anything else + (particularly \header{}) must come after the music. +@end verbatim diff --git a/Documentation/ja/user/GNUmakefile b/Documentation/ja/user/GNUmakefile deleted file mode 100644 index 1b51cfc8e2..0000000000 --- a/Documentation/ja/user/GNUmakefile +++ /dev/null @@ -1,7 +0,0 @@ -ISOLANG = ja -depth = ../../.. -LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-user -include $(depth)/make/stepmake.make - -$(outdir)/%.pdf: - true diff --git a/Documentation/ja/user/fundamental.itely b/Documentation/ja/user/fundamental.itely deleted file mode 100644 index 01bf54ba9e..0000000000 --- a/Documentation/ja/user/fundamental.itely +++ /dev/null @@ -1,171 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Fundamental concepts -@chapter Fundamental concepts - -@untranslated - - -@menu -* How LilyPond input files work:: -* Voices contain music:: -* Contexts and engravers:: -* Extending the templates:: -@end menu - -@node How LilyPond input files work -@section How LilyPond input files work - -@untranslated - - -@menu -* Introduction to the LilyPond file structure:: -* Score is a (single) compound musical expression:: -* Nesting music expressions:: -* On the un-nestedness of brackets and ties:: -@end menu - -@node Introduction to the LilyPond file structure -@subsection Introduction to the LilyPond file structure - -@untranslated - - -@node Score is a (single) compound musical expression -@subsection Score is a (single) compound musical expression - -@untranslated - - -@node Nesting music expressions -@subsection Nesting music expressions - -@untranslated - - -@node On the un-nestedness of brackets and ties -@subsection On the un-nestedness of brackets and ties - -@untranslated - - -@node Voices contain music -@section Voices contain music - -@untranslated - - -@menu -* I'm hearing Voices:: -* Explicitly instantiating voices:: -* Voices and vocals:: -@end menu - -@node I'm hearing Voices -@subsection I'm hearing Voices - -@untranslated - - -@node Explicitly instantiating voices -@subsection Explicitly instantiating voices - -@untranslated - - -@subsubheading Note columns -@node Voices and vocals -@subsection Voices and vocals - -@untranslated - - -@node Contexts and engravers -@section Contexts and engravers - -@untranslated - - -@menu -* Contexts explained:: -* Creating contexts:: -* Engravers explained:: -* Modifying context properties:: -* Adding and removing engravers:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@untranslated - - -@node Creating contexts -@subsection Creating contexts - -@untranslated - - -@node Engravers explained -@subsection Engravers explained - -@untranslated - - -@node Modifying context properties -@subsection Modifying context properties - -@untranslated - - -@unnumberedsubsubsec Setting context properties with @code{\with} -@unnumberedsubsubsec Setting context properties with @code{\context} -@node Adding and removing engravers -@subsection Adding and removing engravers - -@untranslated - - -@subsubheading Changing a single context -@subsubheading Changing all contexts of the same type -@node Extending the templates -@section Extending the templates - -@untranslated - - -@menu -* Soprano and cello:: -* Four-part SATB vocal score:: -* Building a score from scratch:: -@end menu - -@node Soprano and cello -@subsection Soprano and cello - -@untranslated - - -@node Four-part SATB vocal score -@subsection Four-part SATB vocal score - -@untranslated - - -@node Building a score from scratch -@subsection Building a score from scratch - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/ja/user/introduction.itely b/Documentation/ja/user/introduction.itely deleted file mode 100644 index 407505a89a..0000000000 --- a/Documentation/ja/user/introduction.itely +++ /dev/null @@ -1,715 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Sawada, Yoshiki -@c Translation status: post-GDP - -@node Introduction -@chapter Introduction - -この章では読者に LilyPond とこのドキュメントについての紹介を行います。 - -@menu -* Background:: -* About the documentation:: -@end menu - - -@node Background -@section Background - -この節は LilyPond の最終目的とアーキテクチャについてカバーします。 - -@menu -* Engraving:: -* Automated engraving:: -* What symbols to engrave?:: -* Music representation:: -* Example applications:: -@end menu - - -@node Engraving -@unnumberedsubsec Engraving - -@cindex engraving -@cindex typography, music -@cindex music typography -@cindex plate engraving -@cindex music engraving - -楽譜印刷の技術は @emph{(プレート) 譜刻} (原文: engraving、版画などの印刷のこと) と呼ばれています。この用語は伝統的な楽譜印刷のプロセスに由来します。ほんの数十年前まで、楽譜は音楽記号を亜鉛やしろめ (錫と鉛の合金) の版に反転したイメージで彫り込んだり、刻印することによって作られていました。版にはインクが塗られ、彫り込んだり刻印してくぼんだ部分にはインクが溜まります。版のイメージはその版に紙が押し付けられることによって形になります。刻印と彫刻は完全に手作業で行われていました。校正は可能だとしても厄介でした。なぜなら一から刻印と彫刻のやり直しだったからです。譜刻は高度に専門的な技術でした; 職人はマスター エングラーバ (譜刻を行う人) の称号を得るまで 5 年の修行を修めなければならず、本当に技術を習得するまでにはさらにもう 5 年の経験が必要だったのです。 - -今日では、コンピュータによってまったく新しい楽譜が出版されています。これには明らかな利点があります; 印刷は安く済み、編集したものを email で配ることが可能です。不幸なことに、コンピュータが広く使われるようになって楽譜のグラフィカルな品質は低下しています。コンピュータによって出版された楽譜は味気無く、機械的な見た目をしているため、その楽譜で演奏することに喜びを感じられません。 - -@c introduce illustrating aspects of engraving, font... -以下の図は伝統的な譜刻とコンピュータ出版の違いを描いたものであり、3 番目の図は LilyPond がどれくらい伝統的な見た目を模倣しているのかを示しています。左端のスキャンした図はコンピュータ出版の典型的な決定を示しています; 縦棒は細く、フラット記号の太さは細線と一致していて、曲線はまっすぐなレイアウトになっています。対照的に、ベーレンライター (Barenreiter: ドイツの出版社) のフラットは太く、曲線は官能的です。我々のフラットは 2 つのもののうち後者を元にデザインされています。丸みを帯びていて、太さは縦棒の太さと調和していて、コンピュータによるものよりも線が太くなっています。 - -@multitable @columnfractions .125 .25 .25 .25 .125 -@item @tab -@ifnotinfo -@iftex -@image{henle-flat-gray,,4cm} -@end iftex -@ifnottex -@image{henle-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{baer-flat-gray,,4cm} -@end iftex -@ifnottex -@image{baer-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{lily-flat-bw,,4cm} -@end iftex -@ifnottex -@image{lily-flat-bw,,,png} -@end ifnottex -@end ifnotinfo -@ifinfo -@image{lilypond/henle-flat-bw,,,png} @image{lilypond/baer-flat-bw,,,png} -@image{lilypond/lily-flat-bw,,,png} -@end ifinfo - -@item @tab -Henle (2000) -@tab -Bärenreiter (1950) -@tab -LilyPond Feta font (2003) - -@end multitable - - -@cindex musical symbols -@cindex font -@cindex blackness -@cindex balance - -@c introduce illustrating aspects of engraving, spacing... -スペースの点では、スペースの配分は音符と音符の間の音の間隔を反映します。しかしながら、現代楽譜の多くは数学的な正確さを持った間隔に固執しています。このことはおもしろくない結果を生み出します。次の例では、2 度楽譜をプリントしています: 1 度目は正確に数学的なスペースを用いて、2 度目はそれに校正を加えています。違いを見分けられますか? - -@cindex optical spacing -@c file spacing-optical. -@c need to include it here, because we want two images. -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} - -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.6 - } - } -} -@end lilypond - -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.0 - \override NoteSpacing #'same-direction-correction = #0.0 - \override StaffSpacing #'stem-spacing-correction = #0.0 - } - } -} -@end lilypond - -@cindex regular rhythms -@cindex regular spacing -@cindex spacing, regular - -各小節には一定のリズムで演奏される音符だけがあります。スペースもそれを反映しています。不幸なことに、我々の目は我々を少し惑わせます。音符の「玉」 (ノート ヘッド) の間隔だけでなく、連続した棒 (ステム、音符から突き出る棒) の間隔も考慮します。結果として、アップ ステム/@/ダウン ステム (玉の上に突き出た棒/@/玉の下に突き出た棒) の組み合わせは離すべきであり、ダウン ステム/アップステムの組み合わせは近づけるべきです、すべては音符の垂直方向の位置の組み合わせに次第です。上の 2 小節は音符のダウン ステム/@/アップ ステムの組み合わせを近づけるよう校正を加えたものであり、下の 2 小節はこの校正を加えていないものです。 - - -通常、奏者は楽譜の見え方を勉強するよりも演奏をするほうに夢中ですので、印刷上の詳細にこだわることは形式尊重のように思えるかもしれません。しかしそうではありません。単調なリズムがずっと続くような場合、スペースの校正を行うことで各行のレイアウトに微妙な変化が加わり、それぞれが異なる視覚的特徴を持つようになります。この特徴が無ければすべての行は同じに見え、迷路のようになってしまいます。奏者がちょっと目を逸らしたり、集中力を欠くと、それまで見ていた行はページの中に埋もれてしまいます。 - -同様に、太い譜線 (音の高さを表す線。五線譜では 5 本) に描かれた太い記号は見た目が強く、楽譜から奏者が離れている場合 -- 例えば、楽譜が譜面台にある場合 -- に良く目立ちます。空白を注意深く配置することで、楽譜は記号が乱雑になることなく締まります。結果としてページをめくる回数は最小となり、これは大きな利点になります。 - -これは印刷において共通して言えることですが、レイアウトはこざっぱりとしているべきです。これは印刷自体のためであるだけでなく、特にその印刷物を読んでいる読み手の助けにもなるからです。楽譜のような演奏用の道具では、このことは 2 重に重要性を持ちます: 奏者の注意力には限界があり、奏者が楽譜を読むことに払う注意力が少なくて済めば済むほど、その奏者は演奏に集中することができます。言い換えると、良い印刷は良い演奏につながるのです。 - -以上で挙げたことは、楽譜の印刷は微妙で複雑な技術であり、楽譜を印刷するには非常な熟練 -- これは通常、奏者が持っているものではありません -- が必要であるということを示しています。LilyPond は、手作業で譜刻された楽譜のすばらしさをコンピュータ世代に提供しよう、すばらしい楽譜を普通の音楽家にも利用可能にしようという我々の努力なのです。我々は、良く見てみたくなり、演奏したくなるような古い楽譜のクオリティに匹敵する楽譜を提供するために、アルゴリズム、フォント デザイン、プログラム設定を調整してきました。 - - -@node Automated engraving -@unnumberedsubsec Automated engraving - -@cindex engraving, automated -@cindex automated engraving - -我々はどのように譜刻を実現していくのでしょうか?職人が本当のマスターになるのに 10 年以上かかるのなら、単なるハッカーである我々がどうやったら職人の仕事を越えるプログラムを書けるのでしょうか? - -その答えは、我々には「できない」です。譜刻は人間的な状況判断に頼っているため、判断を行う人間を完全にコンピュータに置き換えることはできません。しかしながら、退屈な作業の多くを自動化することはできます。もし LilyPond が一般的なケースの大半に対処できるなら、それは既存のソフトウェアよりも大きく前進することになります。残りのケースは手作業で調整することができます。年数が経つにつれて、このソフトウェアはより多くのことを自動的に行えるよう洗練されていき、手作業による手直しはどんどん必要なくなっていくことでしょう。 - -我々が LilyPond の開発を始めたとき、我々は LilyPond プログラム全体を C++ プログラミング言語で書いていました。プログラムの機能は開発者によってかっちりと決められていました。これはいくつかの理由で不満足なものであることがわかりました: - -@itemize -@item LilyPond が失敗を犯したとき、ユーザはフォーマット判断 (どのようなフォーマットにするかの判断) を上書きする必要があります。そのため、ユーザはフォーマット エンジンにアクセスしなければなりません。そのため、コンパイル時に我々 (開発者) によって規則と設定を固定することは無理があり、実行時 (LilyPond によって楽譜を作り出すとき) にユーザが規則と設定にアクセスできなければなりません。 - -@item 譜刻は視覚的判断の問題であり、そのために好みがあります。我々には知識がありますが、ユーザは我々の個人的な判断に異を唱える可能性もあります。そのため、譜刻様式の定義もまたユーザがアクセスできるものでなければなりません。 -@item 最後に、我々は継続的にフォーマット アルゴリズムを改良させていくので、我々には規則に対する自由度の高いアプローチが必要です。C++ 言語は音楽表記の作業とはうまくマッチしない規則分類法を押し付けてきます。 - -@end itemize - -@cindex Scheme programming language - -これらの問題に対して、Scheme プログラミング言語のインタプリタを統合し、LilyPond の各部分を Scheme で書き直すという処置がとられてきました。現在のフォーマット アーキテクチャはグラフィカル オブジェクトという概念で構築されていて、Scheme 変数と関数によって記述されています。このアーキテクチャは、フォーマット規則、譜刻スタイル、個々のフォーマットに関する判断を包含しています。ユーザはこれらの制御の大半に直接アクセスする術を持ちます。 - -Scheme 変数はレイアウトに関する判断を制御します。例えば、多くのグラフィカル オブジェクトは上か下か (あるいは左か右か) の選択を決定する方向 (に関する) 変数を持ちます。ここで、アクセントとアルペジオを持つ 2 つの和音を見てみます。最初の和音では、すべてのグラフィカル オブジェクトは下向き (あるいは左向き) の方向を持っています。2 番目の和音では、すべてが上向き (あるいは右向き) の方向を持っています。 - -@lilypond[quote,ragged-right] -\new Score \with { - \override SpacingSpanner #'spacing-increment = #3 - \override TimeSignature #'transparent = ##t -} \relative c' { - \stemDown 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT - \stemUp 4^>-\arpeggio -} -@end lilypond - -@cindex score formatting -@cindex formatting a score -@cindex formatting rules - -@noindent -楽譜を形作るプロセスはグラフィカルオブジェクトの変数を読み込んだり、書き込んだりすることからなります。いくつかの変数はプリセット値を持ちます。例えば、多くの線の太さ -- 印刷スタイルの特性 -- はプリセット値を持つ変数です。あなたは自由にこの値を変更することができ、それによってあなたの楽譜は異なる印象を持つことになります。 - -@lilypond[quote,ragged-right] -fragment = { - \clef bass f8 as8 - c'4-~ c'16 as g f e16 g bes c' des'4 -} -<< - \new Staff \fragment - \new Staff \with { - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #0.5 - \override Bar #'thickness = #3.6 - \override Tie #'thickness = #2.2 - \override StaffSymbol #'thickness = #3.0 - \override Tie #'extra-offset = #'(0 . 0.3) - } - \fragment ->> -@end lilypond - -さらにフォーマット規則もプリセット変数です: 各オブジェクトはプロシージャを保持している変数を持ちます。これらのプロシージャが実際のフォーマットを実行し、異なるプロシージャを使用することによってオブジェクトの見た目を変えることができます。以下の例では、音符の玉 (ノート ヘッド) シンボルを印刷するのにどの音符の玉オブジェクトを使用するかを決定する規則を楽譜の途中で変更しています。 - -@lilypond[quote,ragged-right] -#(set-global-staff-size 30) - -#(define (mc-squared grob orig current) - (let* ((interfaces (ly:grob-interfaces grob)) - (pos (ly:grob-property grob 'staff-position))) - (if (memq 'note-head-interface interfaces) - (begin - (ly:grob-set-property! grob 'stencil - (grob-interpret-markup grob - (make-lower-markup 0.5 - (case pos - ((-5) "m") - ((-3) "c ") - ((-2) (make-smaller-markup (make-bold-markup "2"))) - (else "bla"))))))))) - -\new Voice \relative c' { - \stemUp - \set autoBeaming = ##f - \time 2/4 - 4 - \once \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil - \once \override NoteHead #'font-size = #-7 - \once \override NoteHead #'font-family = #'sans - \once \override NoteHead #'font-series = #'bold - 4 - \once \override NoteHead #'style = #'cross - 4 - \applyOutput #'Voice #mc-squared - 4 - << - { d8[ es-( fis^^ g] fis2-) } - \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } - >> -} -@end lilypond - - -@node What symbols to engrave? -@unnumberedsubsec What symbols to engrave? - -@cindex engraving -@cindex typography -@cindex engraver -@cindex plug-in - - -フォーマット プロセスはシンボルを置く場所を決定します。しかしながら、@emph{どの}シンボルを譜刻すべきかを決定する -- 言い換えると、使用する表記を決定する -- と、シンボルを置く場所も決まります。 - -一般の音楽表記は音楽を記録するシステムであり、これは過去 1000 年以上にもわたって進化してきました。現在の一般的な形式はルネッサンス前期にまでさかのぼります。基本的な形式 (すなわち、音符の玉が 5 本線の譜表上にあるというもの) は変更されていませんが、細かな点は現代の表記の改革を表現するためにいまだに発展が続けられています。したがって、一般的な音楽表記はおよそ500年間の音楽を扱います。応用範囲は単旋律から大規模なオーケストラのための途方もない対位法にまで及びます。 - -どうやったら我々はそのような多頭の獣を統率し、制限のあるコンピュータ プログラムに押し込めることができるでしょうか?我々の解決策は表記の問題 (譜刻とは対照的にある、すなわち、活字学) を消化の良いプログラム可能な小さな塊に分解していくことです: それぞれのシンボルのタイプは個々のモジュール -- いわゆるプラグイン -- によって処理されます。各プラグインは完全にモジュール化されて独立していて、それによりそれぞれを別個に開発、改良することができます。そのようなプラグインは音楽的概念をグラフィック シンボルに変換する職人に例えて @code{engraver} (エングラーバ) と呼びます。 - -以下の例では、我々が音符の玉のためのプラグイン @code{Note_heads_engraver} から始めていく様子を見ていきます。 - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \consists "Pitch_squash_engraver" - } - } -} -@end lilypond - -@noindent -それから、@code{Staff_symbol_engraver} が譜表を加え - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \consists "Pitch_squash_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -@code{Clef_engraver} が譜表の参照位置を定義し - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -@code{Stem_engraver} が棒 (ステム) を付け加えます。 - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -@code{Stem_engraver} はやって来るすべての音符の玉 (ノート ヘッド) について知らされます。1 つの音符の玉 (あるいは和音の場合は複数の音符の玉) が現れるたびに、ステム オブジェクトが作成され、音符の玉に接続されます。さらにビーム (ステムとステムをつなぐ横棒)、スラー、アクセント、臨時記号、小節線 (小節と小節を区切る縦線)、拍子記号、調号のためのエングラーバを付け加えるによって、我々は完全な楽譜を手に入れることができます。 - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { \topVoice } -@end lilypond - -@cindex polyphony -@cindex engraving multiple voices -@cindex contexts - -このシステムは単旋律の音楽に対してはうまく機能しますが、多声部音楽に対してはどうでしょうか?多声部表記では、多くの声部 (ボイス) が 1 つの譜表を共有します。 - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\new Staff << \topVoice \\ \botVoice >> -@end lilypond - -このような場合、臨時記号と譜表は共有されますが、ステム、スラー、ビームなどは各声部が単独で持ちます。そのため、エングラーバはグループ化されるべきです。音符の玉、ステム、スラーなどのためのエングラーバは @q{Voice context} (ボイス コンテキスト) と呼ばれるグループに入れられ、一方の調子、臨時記号、小節線などのためのエングラーバは @q{Staff context} (譜表コンテキスト) とグループに入れられます。多声部音楽の場合、単一の譜表コンテキストには複数のボイス コンテキストが含まれます。同様に、複数の譜表コンテキストは単一の楽譜 (Score) コンテキストになり得ます。楽譜コンテキストは最上位の表記コンテキストです。 - - -@seealso -内部リファレンス: @rinternals{Contexts}. - - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { - << - \new Staff << \topVoice \\ \botVoice >> - \new Staff << \pah \\ \hoom >> - >> -} -@end lilypond - - -@node Music representation -@unnumberedsubsec Music representation - -概念上、高レベル フォーマット システムのための入力フォーマットは内容を抽象的に記述するものになります。このケースでは、内容は音楽自体になります。これは手に負えない問題に見えます: どうやったら我々は音楽の本質を定義できるでしょうか?その答えを見つけようとする代わりに、我々はその問題を逆転させました。我々は楽譜を譜刻する能力を持つプログラムを書き、そのフォーマットができる限りすっきりしたものになるよう調整します。これ以上フォーマットを減らすことができないという状態になったとき、当然のことながら我々に残されているのは内容自体になります。我々のプログラムは音楽ドキュメントの形式定義として機能します。 - -さらに、構文が LilyPond のユーザ インタフェイスになっているため、 - -@example -@{ - c'4 d'8 -@} -@end example - -とタイプだけで、4 分音符の C1 (ミドル C (=ド)) と 8 分音符の D1 (ミドル C の上の D (=レ)) になります。 - -@lilypond[quote] -{ - c'4 d'8 -} -@end lilypond - -@warning{C = ド, D = レ, E = ミ, F = ファ, G = ソ, A = ラ, B = シ です。LilyPond では音符を「ドレミ〜」ではなく "CDE~" として捉えることが必須なので、今後は音符をアルファべット表記にします。} - -小さなスケールでは、そのような構文は簡単に使用できます。大きなスケールでは、構文はさらに構造を持つ必要があります。そうしなければ、どうやったらあなたはシンフォニーやオペラのような複雑な楽譜に取り組めるでしょうか?構造は音楽表現法というコンセプトによって形成されます: 小さな音楽の断片を組み合わせて大きな音楽にすることによって、より複雑な音楽を表すことができるようになります。例を挙げます。 - -@lilypond[quote,verbatim,fragment,relative=1] -f4 -@end lilypond - -@noindent -同時進行の音符はそれらを @code{<<} と @code{>>} で囲むことによって構築できます: - - -@example -<> -@end example - -@lilypond[quote,fragment,relative=1] -\new Voice { <> } -@end lilypond - -@noindent -この音楽表現を中括弧 @code{@{@tie{}@dots{}@tie{}@}} で囲むことによってシークエンスの中に入れることができます: - -@example -@{ f4 <> @} -@end example - -@lilypond[quote,relative=1,fragment] -{ f4 <> } -@end lilypond - -@noindent -上記もまた音楽表現の 1 つなので、@code{<<}, @code{\\}, and @code{>>} を使ってそれを再び他の同時進行の音楽表現 (2 分音符) と組み合わせることもできます: - -@example -@code{<< g2 \\ @{ f4 <> @} >>} -@end example - - -@lilypond[quote,fragment,relative=2] -\new Voice { << g2 \\ { f4 <> } >> } -@end lilypond - -このような再帰的な構造はさっぱりと、かつ、しっかりした形式でコンテキスト フリー文法で記すことができます。コード解析もまたこの文法から生成されます。言い換えると、LilyPond の構文ははっきりと明快に定義されます。 - -ユーザが LilyPond に取り組むときに、ユーザがその時間の大半で見て、扱うものはユーザ インタフェイスと構文です。それらのある部分は好みの問題であり、多くの議論の対象にもなるものです。好みについて議論することは有意義なことですが、それほど生産的なことではありません。LilyPond という大きな世界の中で、入力構文の重要性は小さいのです: さっぱりとした構文をでっちあげることは簡単ですが、見苦しくないフォーマット コードを作成することはとても難しいのです。このことは、それぞれのコンポーネントの行数をカウントすることによっても実証されます: 解析と表記のためのコンポーネントはソース コード全体の 10 % にも達しません。 - - - - - - - - -@node Example applications -@unnumberedsubsec Example applications - -@cindex simple examples -@cindex examples, simple - -我々はどのように譜刻の技術をコンピュータ プログラムの中に凝縮するかという実験として LilyPond を開発してきました。重労働のおかげで、今やこのプログラムは有用な働きを行うのに使用できるようになりました。非常に簡単な利用例は音符を刻譜することです。 - -@lilypond[quote,relative=1] -{ - \time 2/4 - c4 c g'4 g a4 a g2 -} -@end lilypond - -@noindent -コード ネームと歌詞を加えることによって、我々はリード譜を得ます。 - -@lilypond[quote,ragged-right] -<< - \chords { c2 c f2 c } - \new Staff - \relative c' { - \time 2/4 - c4 c g' g a a g2 - } - \addlyrics { twin -- kle twin -- kle lit -- tle star } ->> -@end lilypond - -さらに、多声部表記とピアノ譜を刻譜することもできます。以下の例はいくつかのより風変わりな構成を組み合わせています。 - -@lilypond[quote] -\header { - title = "Screech and boink" - subtitle = "Random complex notation" - composer = "Han-Wen Nienhuys" -} - -\score { - \context PianoStaff << - \new Staff = "up" { - \time 4/8 - \key c \minor - << { - \revert Stem #'direction - \change Staff = down - \set subdivideBeams = ##t - g16.[ - \change Staff = up - c'''32 - \change Staff = down - g32 - \change Staff = up - c'''32 - \change Staff = down - g16] - \change Staff = up - \stemUp - \set followVoice = ##t - c'''32([ b''16 a''16 gis''16 g''32)] - } \\ { - s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] - } \\ { - s4 \autoBeamOff d''8.. f''32 - } \\ { - s4 es''4 - } >> - } - - \new Staff = "down" { - \clef bass - \key c \minor - \set subdivideBeams = ##f - \override Stem #'french-beaming = ##t - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #4.0 - g'16[ b16 fis16 g16] - << \makeClusters { - as16 - - - } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down - 4\arpeggio - } - >> } - >> - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 8) - } - } - \layout { - \context { - \Staff - \consists Horizontal_bracket_engraver - } - } -} -@end lilypond - -上で示した楽譜の断片はすべて手作業で作成されていました。しかしながら、必ずしも手作業で行う必要はありません。フォーマット エンジンの大部分は自動化されているため、その出力を音楽を操作する他のプログラムに供することができます。例えば、音楽の断片のデータベースをウェブサイトやマルチメディア プレゼンテーションで使用する画像に変換するために使用することもできます。 - -このマニュアルも利用例です: 入力フォーマットはテキストなので、容易に他のテキスト ベースのフォーマット -- 例えば、@LaTex{}, HTML, このマニュアルの場合は Texinfo -- に埋め込むことができます。ある特別なプログラムによって入力断片を音楽イメージに置き換えることができ、それによって PDF や HTML の出力ファイルという結果を得ることができます。これはドキュメントの中で音楽とテキストを混在させることを容易にします。 - - - - - - - - - -@node About the documentation -@section About the documentation - -この節では、このドキュメントの各部分について説明します。 - -@cindex Learning Manual -@cindex Music Glossary -@cindex Notation Reference -@cindex Application Usage -@cindex Snippet List -@cindex Internals Reference - -@c leave these lines wrapping around. It's some texinfo 4.12 thing. -gp -@c This is actually a limitation of texi2html. -jm -@menu -* About the Learning Manual:: このマニュアルは表記を作成する方法について丁寧な説明をしながら LilyPond についての紹介を行います。 -* About the Music Glossary:: このマニュアルは音楽用語についての説明を行い、それらの用語の他の言語への訳語を提供します。 -* About the Notation Reference:: このマニュアルはこのドキュメントの主要部分です。表記を作成する方法についての詳細な情報を提供します。このマニュアルは読者が学習マニュアルでカバーされている基本的な内容を知っていて、音楽用語集に書かれている英語の音楽用語に馴染んでいるものと仮定しています。 -* About the Application Usage:: ここでは実際のプログラムとオペレーティング システム特有の問題について議論します。 -* About the Snippet List:: これは短い LilyPond の例のコレクションです。 -* About the Internals Reference:: このドキュメントは LilyPond の内部構造体についての参照情報を提供します。調整を行うのに LilyPond の内部構造体についての知識が必要です。 -* Other documentation:: ここにはこのドキュメントの他の部分 -- ニュースやメール アーカイブなど -- がいくつかあります。 -@end menu - - -@node About the Learning Manual -@unnumberedsubsec About the Learning Manual - -@cindex Learning Manual - -本書は LilyPond の学習の始め方と、いくつかのキーとなるコンセプトをわかりやすい言葉で説明します。あなたは本書を一読すべきです。 - -各節の最後にある @strong{参照} には、他の節への参照が含まれています: 初めて本書を読むときはこれらの参照を追うべきではありません。あなたが学習マニュアルをすべて読み終えたとき、いくつかの節を読み返し、さらに参照を追おうと思うかもしれません。 - - - -@node About the Music Glossary -@unnumberedsubsec About the Music Glossary - -@untranslated - - -@node About the Notation Reference -@unnumberedsubsec About the Notation Reference - -@untranslated - - -@node About the Application Usage -@unnumberedsubsec About the Application Usage - -@untranslated - - -@node About the Snippet List -@unnumberedsubsec About the Snippet List - -@untranslated - - -@node About the Internals Reference -@unnumberedsubsec About the Internals Reference - -@untranslated - - -@node Other documentation -@unnumberedsubsec Other documentation - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/ja/user/lilypond-learning.tely b/Documentation/ja/user/lilypond-learning.tely deleted file mode 100644 index a02d46cc8d..0000000000 --- a/Documentation/ja/user/lilypond-learning.tely +++ /dev/null @@ -1,204 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@documentencoding UTF-8 -@setfilename lilypond-learning.info -@settitle GNU LilyPond -- Manuel d'initiation - - -@include macros.itexi - -@afourpaper - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Learning Manual of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage Japanese -@end ignore - -@c Translators: Sawada, Yoshiki -@c Translation status: post-GDP - -@ifnottex -@node Top -@top GNU LilyPond --- 学習マニュアル -@end ifnottex - - -@ifhtml -@ifclear bigpage -このドキュメントは -@uref{source/Documentation/user/lilypond-learning.ja.pdf,PDF 形式} -と -@uref{source/Documentation/user/lilypond-learning-big-page.ja.html,大きな 1 ページ形式} -でも利用可能です。 -@end ifclear -@ifset bigpage -このドキュメントは -@uref{source/Documentation/user/lilypond-learning.ja.pdf,PDF 形式} -と -@uref{source/Documentation/user/lilypond-learning/index.ja.html,複数のページにインデックス化された形式} -でも利用可能です。 -@end ifset -@end ifhtml - -@c urg, makeinfo 4.9.91 French translation is funky -@c 日本語の場合の makeinfo ??? -@iftex -@documentlanguage ja -@c @frenchspacing on -@end iftex - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@c subtitle Le système de gravure musicale -@subtitle 音楽譜刻システム -@c titlefont{Manuel d'initiation} -@author LilyPond開発チーム - - -Copyright @copyright{} 1999--2008 著作者一同 - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{以下は英語を話さない人々のための著作権についての注意書きです。しかしながら、 -英語で書かれた注意書きだけが法的に有効です。} - -@quotation -GNU フリー文書利用許諾契約書バージョン 1.1 またはフリー ソフトウェア財団によって発行 -されたその後のバージョンの約定に従う限り、このドキュメントを複製、変更する許可を与えます。 -変更不可部分はありません。この利用許諾契約書のコピーは 「GNU フリー文書利用許諾契約書」 -という章に含まれています。 -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -Pour LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2008 著作者一同 - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{以下は英語を話さない人々のための著作権についての注意書きです。しかしながら、 -英語で書かれた注意書きだけが法的に有効です。} - - -@quotation -GNU フリー文書利用許諾契約書バージョン 1.1 またはフリー ソフトウェア財団によって発行されたその後のバージョンの約定に従う限り、このドキュメントを複製、変更する許可を与えます。変更不可部分はありません。この利用許諾契約書のコピーは 「GNU フリー文書利用許諾契約書」 -という章に含まれています。 -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -このファイルは GNU LilyPond のドキュメントです。 - -Copyright @copyright{} 1999--2008 著作者一同 - -@emph{The translation of the following copyright notice is provided -for courtesy to non-English speakers, but only the notice in English -legally counts.} - -@emph{以下は英語を話さない人々のための著作権についての注意書きです。しかしながら、英語で書かれた注意書きだけが法的に有効です。} - -@quotation -GNU フリー文書利用許諾契約書バージョン 1.1 またはフリー ソフトウェア財団によって発行 -されたその後のバージョンの約定に従う限り、このドキュメントを複製、変更する許可を与えます。 -変更不可部分はありません。この利用許諾契約書のコピーは 「GNU フリー文書利用許諾契約書」 -という章に含まれています。 -@end quotation - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex - -これは GNU LilyPond バージョン @version{} のための学習マニュアルです。このドキュメントと他のドキュメントとの関係についての更なる情報は、@ref{About the documentation} を参照してください。 - -@cindex web site -@cindex URL - -@uref{http://@/www@/.lilypond@/.org/} で更なる情報を見つけることができます。 -このウェブ サイトにはこのドキュメントと他のドキュメントのオンライン コピーがあります。 - -@menu -* Preface:: -* Introduction:: LilyPond とは何なのか、なぜ LilyPond を使うのか、どうやって LilyPond を使うのか -* Tutorial:: LilyPond 導入の手引き -* Fundamental concepts:: このマニュアルの残りの部分を読むために必要とされる基本的なコンセプト -* Tweaking output:: 出力を変更するための導入部 -* Working on LilyPond projects:: 実際の使用についての議論 - -付録 - -* Templates:: Ready-made templates. -* Scheme tutorial:: Programming inside LilyPond. -* GNU Free Documentation License:: License of this document. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include preface.itely -@include introduction.itely -@include tutorial.itely -@include fundamental.itely -@include tweaks.itely -@include working.itely - -@include templates.itely -@include scheme-tutorial.itely -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/ja/user/macros.itexi b/Documentation/ja/user/macros.itexi deleted file mode 100644 index f755bafe6e..0000000000 --- a/Documentation/ja/user/macros.itexi +++ /dev/null @@ -1,323 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@include version.itexi -@include common-macros.itexi - - -@c ***** Displaying text ***** - -@macro hash -\# -@end macro - -@c To get decent quotes in `foo' and ``foo''. -@c FIXME: Use thin spaces for @qq. - -@ifnotinfo - -@macro q{TEXT} -@quoteleft{}\TEXT\@quoteright{} -@end macro - -@macro qq{TEXT} -@quotedblleft{}\TEXT\@quotedblright{} -@end macro - -@end ifnotinfo - -@ifinfo - -@macro q{TEXT} -`\TEXT\' -@end macro - -@macro qq{TEXT} -« \TEXT\ » -@end macro - -@end ifinfo - - -@ifhtml - -@macro warning{TEXT} -@cartouche -@b{Note:} \TEXT\ -@end cartouche -@end macro - -@end ifhtml - -@ifnothtml - -@macro warning{TEXT} -@quotation -@quotation -@cartouche -@b{Note:} \TEXT\ -@end cartouche -@end quotation -@end quotation -@end macro - -@end ifnothtml - - - -@c ***** Headings in a doc subsection ***** - -@c Don't insert an empty line after @predefined! Right now -@c it doesn't matter, but a future implementation will probably -@c add some code which needs this restriction. - -@macro predefined -@noindent -@subsubheading Predefined commands -@end macro - -@macro snippets -@noindent -@subsubheading Selected Snippets -@end macro - - -@c Don't insert an empty line after @seealso! Otherwise we get -@c unwanted extra vertical space in the PDF output. - -@macro seealso -@noindent -@subsubheading See also -@indent -@end macro - - -@macro knownissues -@noindent -@subsubheading Known issues and warnings -@end macro - - - -@c ***** Links and references ***** - -@c Definitions for references: -@c -@c @rglos -@c @rlearning -@c @ruser -@c @rprogram -@c @rlsr -@c @rinternals -@c -@c All these also have a @...named version which allows to specify the -@c displayed text for the reference as second argument. -@c -@c ***** HTML + bigpage is a special case (other manual names); all other -@c formats are treated similarly. - - -@c *** not TeX *** - -@ifnottex - -@c ** bigpage ** - -@ifset bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary-big-page,Music Glossary} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Music Glossary} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning-big-page,Learning Manual} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning-big-page,Learning Manual} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-big-page,Notation Reference} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-big-page,Notation Reference} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program-big-page,Application Usage} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program-big-page,Application Usage} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets-big-page,Snippets} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets-big-page,Snippets} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals-big-page,Internals Reference} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals-big-page,Internals Reference} -@end macro - -@end ifset - - -@c ** not bigpage ** - -@ifclear bigpage - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary,Music Glossary} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} -@end macro - -@macro rlearning{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning,Learning Manual} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning,Learning Manual} -@end macro - -@macro ruser{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond,Notation Reference} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference} -@end macro - -@macro rprogram{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program,Application Usage} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets,Snippets} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippets} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals,Internals Reference} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} -@end macro - -@end ifclear - -@end ifnottex - - -@c *** TeX *** - -@iftex - -@macro rglos{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,music-glossary,Music Glossary} -@end macro - -@macro rglosnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} -@end macro - -@macro rlearning{TEXT} -@ref{\TEXT\,,,lilypond-learning,Learning Manual} -@end macro - -@macro rlearningnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Learning Manual} -@end macro - -@macro ruser{TEXT} -@ref{\TEXT\,,,lilypond,Notation Reference} -@end macro - -@macro rusernamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference} -@end macro - -@macro rprogram{TEXT} -@ref{\TEXT\,,,lilypond-program,Application Usage} -@end macro - -@macro rprogramnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage} -@end macro - -@macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets,Snippets} -@end macro - -@macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippets} -@end macro - -@macro rinternals{TEXT} -@vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals,Internals Reference} -@end macro - -@macro rinternalsnamed{TEXT,DISPLAY} -@vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} -@end macro - -@end iftex - - -@c ***** Macros specific to translated docs ***** - -@c None currently defined diff --git a/Documentation/ja/user/preface.itely b/Documentation/ja/user/preface.itely deleted file mode 100644 index 253879bf6b..0000000000 --- a/Documentation/ja/user/preface.itely +++ /dev/null @@ -1,31 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@c Translators: Sawada, Yoshiki -@c Translation status: post-GDP - -@node Preface -@unnumbered Preface - -それは 1995 年のある日の EJE (Eindhoven Youth Orchestra) のリハーサル中のできごとでした − ある変わり者のバイオリン奏者であるジャンは同じく変わり者のフレンチホルン奏者のハン-ウェンに彼がかかわっている新しい大きなプロジェクトのことを話しました。それは音楽を出版するための自動化されたシステムです (正確には、それは MPP − MusiXTeX のプリプロセッサです)。それを聞いてハン-ウェンはすぐに楽譜からいくつかの部分をプリントアウトしたいと思い、彼はそのためのソフトウェアを探し始め、すぐにその虜になってしまいました。それが MPP の終わりを決定付けました。多くの哲学的考察を含み白熱した email の交換の後、ハン-ウェンは 1996 年に LilyPond の製作を開始しました。この時、ジャンはハン-ウェンの新しいプロジェクトに引きずり込まれました。 - -ある意味、コンピュータ プログラムを開発することは楽器の演奏方法を学ぶことに似ています。最初は、それ (プログラムや楽器) がどのように機能するか考えていくことが楽しみであり、できなかったことをできるようにするのは挑戦です。最初の興奮が去った後は、あなたは練習を積み重ねなければなりません。練習や勉強は退屈であり、他の人 − 先生、指揮者、聴衆 − からの動機付けを得なければあなたはすぐにあきらめてしまうことでしょう。継続して少しずつ演奏を重ねていくことはあなたの生活の一部となります。あるときは演奏することはごく自然で素晴らしいことに感じ、さらにあるときはうまくいきません。それでも、あなたは来る日も来る日も演奏を続けます。 - -音楽活動と同様に、LilyPond への取り組みも退屈なものになる可能性があり、あるときはバグの泥沼をこつこつと克服していくような感じになります。けれども、それは我々の生活の一部であり、我々はそれを続けます。おそらく最大の動機付けは、我々のプログラムが実際に人々のために何らかの形で役に立つということでしょう。我々がインターネットを閲覧していると、多くの人々が LilyPond を使用し、印象的な楽譜を出版していることがわかります。そういったものを見ることはまるで現実ではないようですが、とてもうれしいことです。 - -我々のユーザは我々のプログラムを使って我々を喜ばせてくれるだけではなく、彼らの多くは我々に提案をくれたり、バグの報告を送ってくれます。そのため、我々はすべてのユーザにバグ報告を送ってくれたり、提案をくれたり、その他の形で LilyPond に貢献してくれることを感謝したいです。 - -音楽を演奏することと楽譜をプリントすることは素晴らしい類似であるばかりではありません。一緒にプログラミングをすることは大いなる楽しみであり、人々の役に立つことは深い満足感を与えてくれます。しかし、究極的には LilyPond への取り組みは我々の音楽に対する深い愛情の表われなのです。あなたが多くの美しい音楽を作り出すのに LilyPond が役に立ちますように! - -Han-Wen と Jan - -2002年7月、オランダ ユトレヒト/アイントホーフェン - diff --git a/Documentation/ja/user/scheme-tutorial.itely b/Documentation/ja/user/scheme-tutorial.itely deleted file mode 100644 index aaef2106a2..0000000000 --- a/Documentation/ja/user/scheme-tutorial.itely +++ /dev/null @@ -1,28 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Scheme tutorial -@appendix Scheme tutorial - -@untranslated - - -@menu -* Tweaking with Scheme:: -@end menu - -@node Tweaking with Scheme -@appendixsec Tweaking with Scheme - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/ja/user/templates.itely b/Documentation/ja/user/templates.itely deleted file mode 100644 index 96fd85656e..0000000000 --- a/Documentation/ja/user/templates.itely +++ /dev/null @@ -1,88 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Templates -@appendix Templates - -@untranslated - - -@menu -* Single staff:: -* Piano templates:: -* String quartet:: -* Vocal ensembles:: -* Ancient notation templates:: -* Jazz combo:: -* lilypond-book templates:: -@end menu - -@node Single staff -@appendixsec Single staff - -@untranslated - - -@appendixsubsec Notes only -@appendixsubsec Notes and lyrics -@appendixsubsec Notes and chords -@appendixsubsec Notes, lyrics, and chords. -@node Piano templates -@appendixsec Piano templates - -@untranslated - - -@appendixsubsec Solo piano -@appendixsubsec Piano and melody with lyrics -@appendixsubsec Piano centered lyrics -@appendixsubsec Piano centered dynamics -@node String quartet -@appendixsec String quartet - -@untranslated - - -@appendixsubsec String quartet -@appendixsubsec String quartet parts -@node Vocal ensembles -@appendixsec Vocal ensembles - -@untranslated - - -@appendixsubsec SATB vocal score -@appendixsubsec SATB vocal score and automatic piano reduction -@appendixsubsec SATB with aligned contexts -@node Ancient notation templates -@appendixsec Ancient notation templates - -@untranslated - - -@appendixsubsec Transcription of mensural music -@appendixsubsec Gregorian transcription template -@node Jazz combo -@appendixsec Jazz combo - -@untranslated - - -@node lilypond-book templates -@appendixsec lilypond-book templates - -@untranslated - - -@appendixsubsec LaTeX -@appendixsubsec Texinfo -@appendixsubsec xelatex - -@c -- SKELETON FILE -- diff --git a/Documentation/ja/user/tutorial.itely b/Documentation/ja/user/tutorial.itely deleted file mode 100644 index 89cc949f0e..0000000000 --- a/Documentation/ja/user/tutorial.itely +++ /dev/null @@ -1,259 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Tutorial -@chapter Tutorial - -@untranslated - - -@menu -* First steps:: -* Single staff notation:: -* Multiple notes at once:: -* Songs:: -* Final touches:: -@end menu - -@node First steps -@section First steps - -@untranslated - - -@menu -* Compiling a file:: -* Simple notation:: -* Working on input files:: -* How to read the manual:: -@end menu - -@node Compiling a file -@subsection Compiling a file - -@untranslated - - -@subheading Entering music and viewing output -@subsubheading MacOS X -@subsubheading Windows -@subsubheading UNIX -@node Simple notation -@subsection Simple notation - -@untranslated - - -@subheading Pitches -@subheading Durations (rhythms) -@subheading Rests -@subheading Time signature -@subheading Clef -@subheading All together -@node Working on input files -@subsection Working on input files - -@untranslated - - -@node How to read the manual -@subsection How to read the manual - -@untranslated - - -@subheading Clickable examples -@node Single staff notation -@section Single staff notation - -@untranslated - - -@menu -* Accidentals and key signatures:: -* Ties and slurs:: -* Articulation and dynamics:: -* Adding text:: -* Automatic and manual beams:: -* Advanced rhythmic commands:: -@end menu - -@node Accidentals and key signatures -@subsection Accidentals and key signatures - -@untranslated - - -@subheading Accidentals -@subheading Key signatures -@subheading Warning: key signatures and pitches -@node Ties and slurs -@subsection Ties and slurs - -@untranslated - - -@subheading Ties -@subheading Slurs -@subheading Phrasing slurs -@subheading Warnings: slurs vs. ties -@node Articulation and dynamics -@subsection Articulation and dynamics - -@untranslated - - -@subheading Articulations -@subheading Fingerings -@subheading Dynamics -@node Adding text -@subsection Adding text - -@untranslated - - -@node Automatic and manual beams -@subsection Automatic and manual beams - -@untranslated - - -@node Advanced rhythmic commands -@subsection Advanced rhythmic commands - -@untranslated - - -@subheading Partial measure -@subheading Tuplets -@subheading Grace notes -@node Multiple notes at once -@section Multiple notes at once - -@untranslated - - -@menu -* Music expressions explained:: -* Multiple staves:: -* Staff groups:: -* Combining notes into chords:: -* Single staff polyphony:: -@end menu - -@node Music expressions explained -@subsection Music expressions explained - -@untranslated - - -@subheading Analogy: mathematical expressions -@subheading Simultaneous music expressions: multiple staves -@subheading Simultaneous music expressions: single staff -@node Multiple staves -@subsection Multiple staves - -@untranslated - - -@node Staff groups -@subsection Staff groups - -@untranslated - - -@node Combining notes into chords -@subsection Combining notes into chords - -@untranslated - - -@node Single staff polyphony -@subsection Single staff polyphony - -@untranslated - - -@node Songs -@section Songs - -@untranslated - - -@menu -* Setting simple songs:: -* Aligning lyrics to a melody:: -* Lyrics to multiple staves:: -@end menu - -@node Setting simple songs -@subsection Setting simple songs - -@untranslated - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@untranslated - - -@node Lyrics to multiple staves -@subsection Lyrics to multiple staves - -@untranslated - - -@node Final touches -@section Final touches - -@untranslated - - -@menu -* Organizing pieces with variables:: -* Version number:: -* Adding titles:: -* Absolute note names:: -* After the tutorial:: -@end menu - -@node Organizing pieces with variables -@subsection Organizing pieces with variables - -@untranslated - - -@node Version number -@subsection Version number - -@untranslated - - -@node Adding titles -@subsection Adding titles - -@untranslated - - -@node Absolute note names -@subsection Absolute note names - -@untranslated - - -@node After the tutorial -@subsection After the tutorial - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/ja/user/tweaks.itely b/Documentation/ja/user/tweaks.itely deleted file mode 100644 index ab23f20748..0000000000 --- a/Documentation/ja/user/tweaks.itely +++ /dev/null @@ -1,250 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Tweaking output -@chapter Tweaking output - -@untranslated - - -@menu -* Tweaking basics:: -* The Internals Reference manual:: -* Appearance of objects:: -* Placement of objects:: -* Collisions of objects:: -* Further tweaking:: -@end menu - -@node Tweaking basics -@section Tweaking basics - -@untranslated - - -@menu -* Introduction to tweaks:: -* Objects and interfaces:: -* Naming conventions of objects and properties:: -* Tweaking methods:: -@end menu - -@node Introduction to tweaks -@subsection Introduction to tweaks - -@untranslated - - -@node Objects and interfaces -@subsection Objects and interfaces - -@untranslated - - -@node Naming conventions of objects and properties -@subsection Naming conventions of objects and properties - -@untranslated - - -@node Tweaking methods -@subsection Tweaking methods - -@untranslated - - -@node The Internals Reference manual -@section The Internals Reference manual - -@untranslated - - -@menu -* Properties of layout objects:: -* Properties found in interfaces:: -* Types of properties:: -@end menu - -@node Properties of layout objects -@subsection Properties of layout objects - -@untranslated - - -@subheading Finding the context -@subheading Overriding once only -@subheading Reverting -@node Properties found in interfaces -@subsection Properties found in interfaces - -@untranslated - - -@subheading Specifying the context in lyric mode -@node Types of properties -@subsection Types of properties - -@untranslated - - -@node Appearance of objects -@section Appearance of objects - -@untranslated - - -@menu -* Visibility and color of objects:: -* Size of objects:: -* Length and thickness of objects:: -@end menu - -@node Visibility and color of objects -@subsection Visibility and color of objects - -@untranslated - - -@subheading stencil -@subheading break-visibility -@subheading transparent -@subheading color -@node Size of objects -@subsection Size of objects - -@untranslated - - -@node Length and thickness of objects -@subsection Length and thickness of objects - -@untranslated - - -@node Placement of objects -@section Placement of objects - -@untranslated - - -@menu -* Automatic behavior:: -* Within-staff objects:: -* Outside-staff objects:: -@end menu - -@node Automatic behavior -@subsection Automatic behavior - -@untranslated - - -@node Within-staff objects -@subsection Within-staff objects - -@untranslated - - -@subheading Fingering -@node Outside-staff objects -@subsection Outside-staff objects - -@untranslated - - -@subheading \textLengthOn -@subheading Dynamics -@subheading Grob sizing -@node Collisions of objects -@section Collisions of objects - -@untranslated - - -@menu -* Moving objects:: -* Fixing overlapping notation:: -* Real music example:: -@end menu - -@node Moving objects -@subsection Moving objects - -@untranslated - - -@node Fixing overlapping notation -@subsection Fixing overlapping notation - -@untranslated - - -@subheading padding property -@subheading left-padding and right-padding -@subheading staff-padding property -@subheading self-alignment-X property -@subheading staff-position property -@subheading extra-offset property -@subheading positions property -@subheading force-hshift property -@node Real music example -@subsection Real music example - -@untranslated - - -@node Further tweaking -@section Further tweaking - -@untranslated - - -@menu -* Other uses for tweaks:: -* Using variables for tweaks:: -* Other sources of information:: -* Avoiding tweaks with slower processing:: -* Advanced tweaks with Scheme:: -@end menu - -@node Other uses for tweaks -@subsection Other uses for tweaks - -@untranslated - - -@subheading Tying notes across voices -@subheading Simulating a fermata in MIDI -@node Using variables for tweaks -@subsection Using variables for tweaks - -@untranslated - - -@node Other sources of information -@subsection Other sources of information - -@untranslated - - -@node Avoiding tweaks with slower processing -@subsection Avoiding tweaks with slower processing - -@untranslated - - -@node Advanced tweaks with Scheme -@subsection Advanced tweaks with Scheme - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/ja/user/working.itely b/Documentation/ja/user/working.itely deleted file mode 100644 index ab84ef3883..0000000000 --- a/Documentation/ja/user/working.itely +++ /dev/null @@ -1,104 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421 - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - - -@node Working on LilyPond projects -@chapter Working on LilyPond projects - -@untranslated - - -@menu -* Suggestions for writing LilyPond input files:: -* When things don't work:: -* Scores and parts:: -@end menu - -@node Suggestions for writing LilyPond input files -@section Suggestions for writing LilyPond input files - -@untranslated - - -@menu -* General suggestions:: -* Typesetting existing music:: -* Large projects:: -* Saving typing with variables and functions:: -* Style sheets:: -@end menu - -@node General suggestions -@subsection General suggestions - -@untranslated - - -@node Typesetting existing music -@subsection Typesetting existing music - -@untranslated - - -@node Large projects -@subsection Large projects - -@untranslated - - -@node Saving typing with variables and functions -@subsection Saving typing with variables and functions - -@untranslated - - -@node Style sheets -@subsection Style sheets - -@untranslated - - -@node When things don't work -@section When things don't work - -@untranslated - - -@menu -* Updating old input files:: -* Troubleshooting (taking it all apart):: -* Minimal examples:: -@end menu - -@node Updating old input files -@subsection Updating old input files - -@untranslated - - -@node Troubleshooting (taking it all apart) -@subsection Troubleshooting (taking it all apart) - -@untranslated - - -@node Minimal examples -@subsection Minimal examples - -@untranslated - - -@node Scores and parts -@section Scores and parts - -@untranslated - - - -@c -- SKELETON FILE -- diff --git a/Documentation/ja/web.texi b/Documentation/ja/web.texi new file mode 100644 index 0000000000..03ee564b39 --- /dev/null +++ b/Documentation/ja/web.texi @@ -0,0 +1,315 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea + + 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 Translators: Yoshiki Sawada, Yoshinobu Ishizaki + +@setfilename web.info +@settitle LilyPond -- みんなの楽譜作成 +@documentencoding UTF-8 +@documentlanguage ja +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 by the authors. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + +@afourpaper + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + +@copying +Copyright @copyright{} 2009--2011 by the authors. + +@quotation +GNU フリー文書利用許諾契約書バージョン 1.1 またはフリー ソフトウェア財団によって +発行されたその後のバージョンの約定に従う限り、このドキュメントを複製、変更する +許可を与えます。 +変更不可部分はありません。 +この利用許諾契約書のコピーは ``GNU フリー文書利用許諾契約書'' という章に含まれて +います。 +@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 --- 楽譜譜刻プログラム +@direntry +* LilyPond 学習マニュアル: (lilypond-learning). ここから始めてください。 +* 音楽用語集: (music-glossary). 非英語圏のユーザ向け。 +* LilyPond: (lilypond-notation). LilyPond 記譜法リファレンス。 +* LilyPond コード断片集: (lilypond-snippets). ちょっとしたテクニック、@c +TIPS、それに例。 +* LilyPond 内部リファレンス: (lilypond-internals). 調整するための定義。 +* LilyPond アプリケーション使用方法: (lilypond-usage). アプリケーションを@c +インスールして、実行する方法。 +* LilyPond Web サイト: (lilypond-web). 新しい Web サイトのプレビュー。 +* lilypond: (lilypond-usage)lilypond を実行する. LilyPond を呼び出す。 +* abc2ly: (lilypond-usage)abc2ly を呼び出す. ABC をインポートする。 +* convert-ly: (lilypond-usage)convert-ly でファイルを更新する. 古い LilyPond バージョン。 +* etf2ly: (lilypond-usage)etf2ly を呼び出す. Finale をインポートする。 +* lilypond-book: (lilypond-usage)lilypond-book. 文章と楽譜を統合する。 +* midi2ly: (lilypond-usage)midi2ly を呼び出す. MIDI をインポートする。 +* musicxml2ly: (lilypond-usage)musicxml2ly を呼び出す. MusicXML をインポートする。 +@end direntry + + +@c TITLE PAGE +@ifnottex +@node Top +@top LilyPond... みんなの楽譜作成 +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle 楽譜譜刻プログラム +@titlefont{全般的な情報} +@author LilyPond 開発チーム + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +LilyPond バージョン @version{} 用 +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... みんなの楽譜作成 +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading LilyPond って? + +LilyPond は、可能な限り高品位な楽譜を生み出すことを目的とする、@c +オープン ソースの楽譜作成プログラムです。@c +このフリー ソフトウェアは、伝統的な彫版の楽譜の美しさを@c +コンピュータ プリントアウトで実現します。@c +LilyPond はフリーソフトウェアであり、@uref{http://gnu.org,GNU プロジェクト} +の一部です。 + + +@divClass{align-right} +@ref{導入部} を読んで、LilyPond をもっと知ってください! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{古いニュース}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading クイック リンク + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading 安定版 + +@ref{ダウンロード, ダウンロード @versionStable} + +@ref{マニュアル, マニュアル @versionStable} + +@subsubheading 開発版 + +@ref{開発, ダウンロード @versionDevel} + +@ref{開発, マニュアル @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* 導入部:: ここから始めて、楽譜を作ってください。 +* ダウンロード:: LilyPond の入手方法。 +* マニュアル:: マニュアルを読んでください。 +* コミュニティ:: 他のユーザとの交流。 +@end menu +@divEnd + +@end ifnottex + +@contents + + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@c * lilypond: (lilypond-application)Running LilyPond. Invoking the +@c LilyPond program. +@end ignore + +@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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading お読みください + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (ページ毎に分割された HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (1 つの大きな HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + このマニュアルはいくつもの HTML ページに分割されています。 + @*@ @ @emph{(ページ毎の小さなダウンロード)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + このマニュアルは 1 つの巨大な HTML ページです。 + @*@ @ @emph{(大きな単一のダウンロード, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + 日本語では PDF 形式での提供はありません。 + @*@ @ @emph{(大きな単一のダウンロード, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/ja/web/GNUmakefile b/Documentation/ja/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/ja/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/ja/web/community.itexi b/Documentation/ja/web/community.itexi new file mode 100644 index 0000000000..b10177a2b3 --- /dev/null +++ b/Documentation/ja/web/community.itexi @@ -0,0 +1,857 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 2613eed0a13ce118cb11f83057d9d79fc6973a4e + + 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 Translators: Yoshiki Sawada + +@include included/authors.itexi +@include included/helpus.itexi + +@node コミュニティ +@unnumbered コミュニティ +@translationof Community + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading コミュニティと交流する + +@itemize + +@item +@ref{コンタクト}: 援助を求める、議論する、そして交流する! + +@item +@ref{最小化例}: LilyPond について議論する際に、@emph{強く} 推奨することがあります。 + +@item +@ref{バグ報告}: 何かうまくいかない。 + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading LilyPond を改善する + +@itemize + +@item +@ref{援助が必要です}: あなたの手助けが必要です。 + +@item +@ref{開発}: 貢献者とテスタ向けです。 + +@item +@ref{著者}: 現在の LilyPond を作った人々。 + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading その他 + +@itemize + +@item +@ref{出版物}: 我々が書いたもの、我々についてかかれたもの。 + +@item +@ref{古いニュース}: アーカイブ。 + +@end itemize +@divEnd + +@divEnd + + + + +@divClass{hide} +@menu +* コンタクト:: +* 最小化例:: +* バグ報告:: +* 援助が必要です:: +* 開発:: +* 著者:: +* 出版物:: +* 古いニュース:: +@end menu +@divEnd + + +@node コンタクト +@unnumberedsec コンタクト +@translationof Contact + + +@divClass{column-left-bottom} +@subheading ユーザの議論とヘルプ + +@subsubheading ユーザ メーリング リスト: @code{lilypond-user@@gnu.org} + +このメーリング リストは、ユーザ同士で議論やヘルプを行う場所です。 + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user, +lilypond-user への登録と情報} + +@uref{http://lists.gnu.org/archive/html/lilypond-user/, +アーカイブ 1} +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +アーカイブ 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +アーカイブ 3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +gmane で lilypond-user にメールを送る} +@end quotation + +@warning{質問がある場合、@ref{最小化例} を使ってください!} + +@subsubheading LilyPond コード断片リポジトリ + +LilyPond コード断片リポジトリ (LSR) はユーザが投稿した例の@c +大きなコレクションであり、自由にコピーして使用することができます。@c +他の人が書いた楽譜を見て、あなた自身も投稿してください! + +@example +@uref{http://lsr.dsi.unimi.it} +@end example + +LSR から、@c +ためになる例を公式ドキュメントの @ref{コード断片集} に含めています。 + + +@subsubheading IRC + +我々の IRC チャネルでサポートが提供されています: + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +このチャネルはアーカイブされません。@c +そのため、他のユーザにも役に立ちそうな質問は、@c +メーリング リストに投稿した方が良いでしょう。 + +@html +
irc name: + + + + +
+ + +@end html + +@subsubheading 他の言語 + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-es, +スペイン語のメーリング リスト} + +@uref{http://www.lilypondforum.de/, +ドイツ語のフォーラム} + +@uref{http://groups.google.com/group/lilypond-brasil, +ポルトガル語のグループ} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +フランス語のメーリング リスト} + +@uref{http://www.lilypondforum.nl/, +オランダ語のフォーラム} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading 通知 +@c Stay Informed + +@subsubheading LilyPond レポート + +LilyPond のことを知る最も簡単な方法は、@c +我々のコミュニティのニュース レター LilyPond レポートを読むことです。 + +@example +@uref{http://news.lilynet.net} +@end example + +@subsubheading リリース メーリング リスト: @code{info-lilypond@@gnu.org} + +このメーリング リストは小さなボリュームの読むだけのメーリング リストで、@c +新しいリリースが通知されます。 + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +info-lilypond への登録と情報} + +@uref{http://lists.gnu.org/archive/html/info-lilypond/, +アーカイブ 1} +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +アーカイブ 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +アーカイブ 3} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading 開発者の議論 + +@subsubheading 開発者メーリング リスト: @code{lilypond-devel@@gnu.org} + +多くの開発者がこのメーリング リストに登録しています。@c +パッチはここに送ってください。 + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel, +lilypond-devel への登録と情報} + +@uref{http://lists.gnu.org/archive/html/lilypond-devel/, +アーカイブ 1} +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +アーカイブ 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +アーカイブ 3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +gmane で lilypond-devel にメールを送る} +@end quotation + + +@subsubheading バグ メーリング リスト: @code{bug-lilypond@@gnu.org} + +バグについての議論はここで行われます。 + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond, +bug-lilypond への登録と情報} + +@uref{http://lists.gnu.org/archive/html/bug-lilypond/, +アーカイブ 1} +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +アーカイブ 2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +アーカイブ 3} + +@c don't include gmane posting here. -gp +@end quotation + +@warning{バグ リストにメールを送る前に @ref{バグ報告} の@c +ガイドラインを呼んで下さい。} + +@divEnd + + +@node 最小化例 +@unnumberedsec 最小化例 +@translationof Tiny examples + +@divClass{column-center-top} +@subheading @qq{最小化例} とは? + +最小化例は、削除可能なものをすべて削除した例です。 +@divEnd + +@divClass{column-left-bottom} +@subheading なぜそれを作る必要があるの? + +@divClass{keep-bullets} +@itemize + +@item +例が簡単なほど、援助者は素早くそれを理解して手助けすることができます。 + +@item +簡単な例は、あなたが自分自身で問題を解決する努力した証明になります。@c +入力ファイルの大部分を送った場合、援助を期待していないかのように@c +見られてしまいます。 + +@item +最小化例を作ることで、あなたは何が起きているかを理解することになります。@c +多くの問題報告は最小化例を作る努力をすることで回避できるものです。@c +最小化例の中で @qq{バグ} を再現できないのであれば、それはバグではなく、@c +LilyPond への理解不足である可能性が高いです! + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading どうやって作るの? + +@divClass{keep-bullets} +@itemize + +@item +\version 番号を含めてください。 + +@item +小さくしてください!@c +スペースやページ レイアウトについての例は多くの小節を必要とするかも@c +しれませんが、多くの問題は 1 つの小節に作り直すことができます。 + +@item +例を作ろうとする時、ファイルの部分々々をコメント アウト +@w{(@code{%} や @code{%@{ @dots{} %@}})} してみてください。@c +あなたの考えていることを残しながらコメント アウトできるものがあれば、@c +それを削除してください! + +@item +バグと関係がないのであれば、複雑な音符、調、拍子を使わないで下さい。 + +@item +バグと関係がないのであれば、@code{\override} や @code{\set} コマンド@c +を使わないでください。 + +@end itemize +@divEnd + +@divEnd + + +@node バグ報告 +@unnumberedsec バグ報告 +@translationof Bug reports + +@divClass{column-center-top} +@subheading ステップ 1: 既知のバグ + +クラッシュやエラーを引き起こす入力が入力があるのなら、@c +それはバグです。@c +Google バグ トラッカーに現在知られているバグがリスト アップされています。 + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{バグ トラッカーに直接バグ報告を @strong{送らないで下さい}。@c +トラッカーに登録された問題については、自由に追加情報を書き込んでください。} + +@divEnd + + +@divClass{column-left-bottom} +@subheading ステップ 2: バグ報告を作成する + +リスト アップされていないバグを発見した場合、@c +我々がバグを無くすることができるよう、バグ報告を作ってください。 + +@warning{我々が受け付けられるバグ報告は、@c +@ref{最小化例} になっているものだけです。@c +我々がバグ報告を扱うために使える資源は非常に限られています。@c +そのため、最小化されていない例は受け付けられません。@c +ほとんどのバグは 4 つ以下の音符で表すことができます!} + +良くできたバグ報告の例を挙げます: + +@example +% 臨時記号はタイの最初の音符にだけ付くはずですが、 +% このバージョンでは両方の音符にフラットが付けられます。 +\version "2.10.1" + +\relative c'' @{ + bes1 ~ + bes1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading ステップ 3: バグ報告を送る + +問題が既知ではないことを確認して、バグ報告を作ったのなら、@c +それを我々に送ってください! + +@divClass{keep-bullets} +@itemize + +@item +@uref{mailto:bug-lilypond@@gnu.org, +bug-lilypond@@gnu.org} メーリング リストに登録済みであれば、@c +普通に email を送ってください。 + +@item +登録していない場合でも、@c +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +gmane lilypond.bugs web インタフェイス} でバグ報告を送ることができます。 + +しかしながら、gmane インタフェイスには厳しい @qq{Top-posting} +制限@footnote{オリジナル メッセージの引用の上に自分のメッセージを@c +記述することで、ネチケット違反とされます。} +があり、しばしば誤って LilyPond ファイルに反応してしまいます。@c +これを避けるには、以下をバグ報告の先頭に付け加えてください: + +@example +> I'm not top posting. +@end example + +@noindent +(@code{>} を付け忘れないでください。) + +@end itemize +@divEnd +@divEnd + +@divClass{column-center-bottom} +@subheading ステップ 4: 回答を待つ + +バグ報告がメーリング リストに送られると、@c +バグ チームがその報告を検証します。@c +この仕事に割り当てられるボランティアの数は限られているため、 +24 時間は待ってください。@c +バグ チームは情報を求めてあなたに何か尋ねるかもしれませんし、@c +バグ トラッカーに報告を追加してあなたにそのバグの問題番号を@c +通知するかもしれません。 + +バグにマークを付けて、@c +そのバグに対して何かアクションがあったときに +email を受け取るようにできます。@c +こうするには Google アカウントが必要です。 +@divEnd + +@divClass{column-center-bottom} +@subheading オプションのステップ: 望ましい結果を提示してください + +問題がトラッカーに登録された場合、@c +望ましい結果を提示してもらえるととても役に立ちます。@c +このような結果になってほしいということを示す入力コードや画像 +(もしかすると他のツールで作ることになるかもしれません) +を自由に追加してください! + +@divEnd + + +@node 援助が必要です +@unnumberedsec 援助が必要です +@translationof Help us + +@divClass{column-center-top} +@helpusNeed + +@divEnd + +@divClass{column-left-top} +@divClass{keep-bullets} +@helpusTasks + +@divEnd +@divEnd + +@divClass{column-right-top} +@helpusProjects + +@divEnd + + +@node 開発 +@unnumberedsec 開発 +@translationof Development + +@divClass{heading-center} +@ifclear web_version + @heading LilyPond @version の開発 +@end ifclear +@ifset web_version + @heading LilyPond @versionDevel の開発 +@end ifset + + +@c we normally don't allow named references, but in this case +@c it's good to emphasize the "stable" part. -gp +@warning{@emph{不安定な開発} バージョンです。@c +LilyPond の使い方やインストールの仕方に少しでも疑問を持つのであれば、@c +@ref{Download, 安定版のダウンロード} を使い、@c +@ref{Manuals, 安定版のマニュアル} を読むことをお勧めします。} + +@divEnd + +@divClass{column-center-top} +@subheading リリース番号 + +LilyPond には 2 セットのリリースがあります: +安定版リリースと不安定な開発リリースです。@c +安定バージョンは偶数の @q{マイナー} バージョン番号 +(例えば 2.8, 2.10, 2.12) を持ち、@c +開発バージョンは奇数の @q{マイナー} バージョン番号 +(例えば 2.7, 2.9, 2.11) を持ちます。 + +@divEnd + + +@divClass{column-left-top} +@subheading ダウンロード + +git とコンパイルについての説明は貢献者向けガイドにあります。 + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, lilypond git リポジトリ} +@end quotation + +ドキュメント作成者とテスターはたいてい最新のバイナリをダウンロード@c +しようとします: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource + +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading 貢献者向けガイド + +LilyPond の開発手法はかなり複雑です。@c +新しい貢献者を助けるために、そしてシステム全体の安定を保つために、@c +開発作業のマニュアルを作成しました。 + +@docLinksBare{Contributor's Guide, contributor, + @rcontribnamed{Top,Contributor's Guide}, + @manualDevelContributorSplit, + @manualDevelContributorBig, 500 kB, + @manualDevelContributorPdf, 2.8 MB} + +@divEnd + + +@divClass{column-center-top} +@subheading 回帰テスト + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@uref{../../input/regression/collated-files.html, 回帰テスト}: +このリリースの回帰テスト。 +(@uref{../../input/regression/collated-files.pdf, PDF バージョン}) + +@item +@uref{../../input/regression/musicxml/collated-files.html, MusicXML テスト}: +このリリースの musicXML テスト。 +(@uref{../../input/regression/musicxml/collated-files.pdf, PDF バージョン}) + +@item +@uref{../../input/regression/abc2ly/collated-files.html, abc2ly テスト}: +このリリースの abc2ly テスト。 +(@uref{../../input/regression/abc2ly/collated-files.pdf, PDF バージョン}) + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, lilypond-book テスト}: +このリリースのlilypond-book テスト。 +(@uref{../../input/regression/lilypond-book/collated-files.pdf, PDF バージョン}) +@end itemize + +@end ifclear + +@ifset web_version +@subsubheading 開発バージョン + +@itemize +@item @regtestDevel (@regtestDevelPdf{}) + +@item @regtestDevelXml (@regtestDevelXmlPdf{}) + +@item @regtestDevelAbc (@regtestDevelAbcPdf{}) + +@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{}) +@end itemize + +@subsubheading 安定バージョン + +@itemize +@item @regtestStable (@regtestStablePdf{}) + +@item @regtestStableXml (@regtestStableXmlPdf{}) + +@item @regtestStableAbc (@regtestStableAbcPdf{}) + +@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{}) +@end itemize +@end ifset + + +@subsubheading すべてのバージョン + +@itemize +@item @uref{http://lilypond.org/test, バージョン間での回帰テストの比較} + +@item @uref{http://lilypond.org/download/binaries/test-output/, +すべての回帰テストのアーカイブ} + +@end itemize + +@divEnd +@divEnd + + + +@divClass{column-center-bottom} +@subheading マニュアル + +@ifclear web_version +@warning{以下のマニュアルは LilyPond @version{} 用です。@c +最新のマニュアルは @url{http://lilypond.org} で見つかります。} +@end ifclear + +@divClass{normal-table} +@multitable @columnfractions .3 .3 .3 +@headitem 導入部 +@item +@docLinkSplit{学習,learning,@manualDevelLearningSplit} +@tab +@docLinkBig{学習,learning,@manualDevelLearningBig} +@tab +@docLinkPdf{学習,learning,@manualDevelLearningPdf} + +@item +@docLinkSplit{用語集,music-glossary,@manualDevelGlossarySplit} +@tab +@docLinkBig{用語集,music-glossary,@manualDevelGlossaryBig} +@tab +@docLinkPdf{用語集,music-glossary,@manualDevelGlossaryPdf} + +@item +@docLinkSplit{Essay,essay,@manualDevelEssaySplit} +@tab +@docLinkBig{Essay,essay,@manualDevelEssayBig} +@tab +@docLinkPdf{Essay,essay,@manualDevelEssayPdf} + +@headitem 常用マニュアル + +@item +@docLinkSplit{Notation,notation,@manualDevelNotationSplit} +@tab +@docLinkBig{Notation,notation,@manualDevelNotationBig} +@tab +@docLinkPdf{Notation,notation,@manualDevelNotationPdf} + +@item +@docLinkSplit{使用方法,usage,@manualDevelUsageSplit} +@tab +@docLinkBig{使用方法,usage,@manualDevelUsageBig} +@tab +@docLinkPdf{使用方法,usage,@manualDevelUsagePdf} + +@item +@docLinkSplit{Snippets,snippets,@manualDevelSnippetsSplit} +@tab +@docLinkBig{Snippets,snippets,@manualDevelSnippetsBig} +@tab +@docLinkPdf{Snippets,snippets,@manualDevelSnippetsPdf} + +@headitem 時々使用するマニュアル + +@item +@docLinkSplit{Web,web,@manualDevelWebSplit} +@tab +@docLinkBig{Web,web,@manualDevelWebBig} +@tab +@docLinkPdf{Web,web,@manualDevelWebPdf} + +@item +@docLinkSplit{Changes,changes,@manualDevelChangesSplit} +@tab +@docLinkBig{Changes,changes,@manualDevelChangesBig} +@tab +@docLinkPdf{Changes,changes,@manualDevelChangesPdf} + +@item +@docLinkSplit{Extending,extending,@manualDevelExtendingSplit} +@tab +@docLinkBig{Extending,extending,@manualDevelExtendingBig} +@tab +@docLinkPdf{Extending,extending,@manualDevelExtendingPdf} + +@item +@docLinkSplit{Internals,internals,@manualDevelInternalsSplit} +@tab +@docLinkBig{Internals,internals,@manualDevelInternalsBig} +@tab +@docLinkPdf{Internals,internals,@manualDevelInternalsPdf} + +@ifset web_version +@headitem Downloadable + +@item +@doctarballDevel +@end ifset + +@end multitable + +@divEnd +@divEnd + + + +@node 著者 +@unnumberedsec 著者 +@translationof Authors + +@divClass{column-left-top} +@subheading 現在の開発チーム + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading 以前のの開発チーム + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading 現在の貢献者 + +@divClass{keep-bullets} +@subsubheading プログラミング + +@coreCurrent + +@subsubheading フォント + +@fontCurrent + +@subsubheading ドキュメント + +@docCurrent + +@subsubheading バグ チーム + +@bugsquadCurrent + +@subsubheading サポート + +@supportCurrent + +@subsubheading 翻訳 + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading 以前の貢献者 + +@divClass{keep-bullets} +@subsubheading プログラミング + +@corePrevious + +@subsubheading フォント + +@fontPrevious + +@subsubheading ドキュメント + +@docPrevious + +@c uncomment when we have any previous members -gp +@c @subsubheading Bug squad + +@c @bugsquadCurrent + +@subsubheading サポート + +@supportPrevious + +@subsubheading 翻訳 + +@translationsPrevious + +@divEnd +@divEnd + + +@node 出版物 +@unnumberedsec 出版物 +@translationof Publications + +@divClass{column-center-top} +@subheading 我々が LilyPond について書いたもの + +@divClass{keep-bullets} + +@include we-wrote.itexi + +@divEnd +@divEnd + +@divClass{column-center-bottom} + +@subheading LilyPond についての活動 + + +@divClass{keep-bullets} + +@include others-did.itexi + +@divEnd +@divEnd + +@contactUsAbout{academic papers} + + +@node 古いニュース +@unnumberedsec 古いニュース +@translationof Old news + +@include web/news-front.itexi + +@include web/news.itexi diff --git a/Documentation/ja/web/download.itexi b/Documentation/ja/web/download.itexi new file mode 100644 index 0000000000..8edf198cb8 --- /dev/null +++ b/Documentation/ja/web/download.itexi @@ -0,0 +1,620 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 2613eed0a13ce118cb11f83057d9d79fc6973a4e + + 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 Translators: Yoshiki Sawada + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond は @strong{テキスト ベース} の楽譜作成プログラムです。@c +グラフィカルな楽譜編集プログラムよりも、むしろプログラミング言語に似ています。@c +LilyPond をダウンロードする前に、@ref{テキスト入力} を読んでください。} +@end macro + +@node ダウンロード +@unnumbered ダウンロード +@translationof Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want verisonDevel here, since the online links + @c for @version won't be up yet! + @heading Downloads for LilyPond @versionDevel + +@warning{LilyPond の安定バージョンへのリンクは +@uref{http://lilypond.org, lilypond.org} にあります。} +@end ifclear +@ifset web_version + @heading LilyPond @versionStable のダウンロード +@end ifset + +@warningTextBased + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading ユーザ向け + +@itemize + +@item +@c ref is duplicated to avoid underlining ref as image. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux や FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading 開発者向け + +@itemize + +@item +@ref{ソース}: +パッケージ作成用 + +@item +@ref{古いダウンロード}: +旧バージョン + +@item @ref{Development}: +最新の不安定なバージョン + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-center-bottom} + +@subheading ソフトウェア ライセンス + +LilyPond は @ref{GPL, GNU General Public License} に基づいて +公開されています。 +@divEnd + + +@divClass{color1} + +@subheading スポンサー +通信帯域を提供してくれている @uref{http://www.vt.edu/, Virgina Tech} と +@uref{http://www.linuxaudio.org/, linuxaudio.org} に深謝します。 + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading 法律用語 + +@divClass{legal} +すべてのロゴと製品イメージには著作権があり、商標登録されています。 + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* ソース:: +* 古いダウンロード:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading 一般パッケージ?それともディストリビューション専用パッケージ? +@c Generic Packages or Distribution-Specific Packages? + +多くのディストリビューションは、通常パッケージに LilyPond を含めています。@c +そのようなバージョンは一般パッケージよりも@c +容易にインストール/アンインストールできますが、@c +古いバージョンである可能性があります。@c +一般パッケージを使いたければ、@c +お使いのディストリビューションのパッケージ マネージャを用いて、@c +システムから公式バージョンをアンインストールしてください。@c +お使いのディストリビューションのパッケージ マネージャの使い方については、@c +そのディストリビューションのドキュメントを参照してください。 + +@divEnd + + +@divClass{column-left-top} +@subheading 一般パッケージ + +@subsubheading ダウンロード + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(迷っているのなら、こちらを使ってください) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading インストール + +シェルで、以下を入力してください: + +@example +cd PATH-TO-DOWNLOAD-DIRECTORY +sh lilypond-@versionStable{}-OS-TYPE.sh +@end example + +@subsubheading アンインストール + +シェルで、以下を入力してください: + +@example +uninstall-lilypond +@end example + +@divEnd + + +@divClass{column-right-top} +@subheading ファイルをコンパイルする + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading ディストリビューション専用パッケージ +@c Distribution-specific Packages + +これらのバージョンをインストール、あるいはアップグレードする場合、@c +お使いのディストリビューションのパッケージ マネージャを使ってください。 + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{https://admin.fedoraproject.org/pkgdb/packages/name/lilypond, +Fedora: LilyPond 2.12.0} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{https://launchpad.net/ubuntu/+source/lilypond, +Ubuntu: LilyPond 2.12.1} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.1} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.10.33} + +@item +@sourceimage{logo-suse,,,} +@uref{http://opensuse.org/?fixme=urg-no-lilypond-package-page, +openSUSE: LilyPond 2.10.33} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading 法律用語 + +@divClass{legal} +すべてのロゴと商品イメージには著作権があり、商標登録されています。 + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X +@translationof MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading パッケージ + +@subsubheading ダウンロード + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Intel チップの MacOS X 10.4 以上用 (迷っているのなら、こちらを使ってください) + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +G3 と G4 CPU の MacOS X 10.4 以上用 (古い Apple コンピュータ) + +@end itemize + +@subsubheading インストール + +ダウンロードしたファイルをダブルクリックして、@c +それをお好みの場所にドラッグしてください。 + +@subsubheading アンインストール + +LilyPond.app フォルダを削除してください。 + +@divEnd + +@divClass{column-right-top} +@subheading ファイルをコンパイルする + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading コマンドラインから実行する + +@warning{GUI 環境の方を好むのであれば、以下の説明は無視してください。} + +@subsubheading MacOS X のコマンドライン + +lilypond スクリプトを実行する最も簡便な方法は、@c +あなた自身の @qq{ヘルパー} スクリプトをセットすることです。 + +@enumerate + +@item +スクリプトを保存するためのディレクトリを作成します: + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +以下の内容を持つ @command{lilypond} というファイルを作成します: + +@divClass{h-scroll-auto} +@example +exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example +@divEnd + +@warning{@var{DIR} は、一般には @code{/Applications/} です。} + + +@item +@command{bin/lilypond} を @command{bin/convert-ly} +(あるいは他のプログラム名) に置き換えて、@c +@command{lilypond-book}, @command{convert-ly}, +それに他の使いたいスクリプトのファイルを同じように作成します。 + + +@item +ファイルを実行可能にします: + +@example +chmod u+x lilypond +@end example + + +@item +さらに、このディレクトリをパスに加えます。@c +ホーム ディレクトリの中にある @code{.profile} というファイルを変更 +(あるいは作成) して、以下のような内容を持たせます: + +@example +export PATH=$PATH:~/bin +@end example + +このファイルは、空の行で終わっていなければなりません。 + +@end enumerate + + +@subsubheading 個々のスクリプトを呼び出す + +スクリプト +-- @command{lilypond-book}, @command{convert-ly}, @command{abc2ly}, +それに @command{lilypond} 自体も +-- は、MacOS@tie{}X 用の @code{.app} ファイルの中に含まれています。 + +さらに、スクリプトを直接呼び出すことによって、@c +コマンドラインから実行することができます: + +@divClass{h-scroll-auto} +@example +@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond +@end example +@divEnd + +そのディレクトリの中にある他のすべてのスクリプト +-- @command{lilypond-book} や @command{convert-ly} など +-- についても同じことが言えます。 + +@divEnd + + +@divClass{column-center-bottom} +@subheading 法律用語 + +@divClass{legal} +すべてのロゴと商品イメージには著作権があり、商標登録されています。 + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows +@translationof Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading パッケージ + +@subsubheading ダウンロード + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Windows ME, NT, 2000, XP, Vista それに 7 用 + +@end itemize + +@subsubheading インストール + +@enumerate + +@item +ダウンロードしたファイルをダブルクリックして、インストールを開始してください。@c +インストーラの指示に従ってインストールしてください。@c +すべてのインストール オプションにチェックを入れて、@c +デフォルトのインストール場所にインストールすることをお勧めします。@c +インストールが完了したら、@q{Finish} ボタンをクリックしてください。@c +これで LilyPond はインストールされています。 + +@end enumerate + +@subsubheading アンインストール + +アンインストールする方法は 2 つあります -- + +@enumerate + +@item +スタート メニューから LilyPond を選択し、@c +そこから @qq{Uninstall} アイコンをクリックしてください。@c +アンインストールが完了したら、@q{Finish} ボタンをクリックしてください。 + +@item +あるいは、コントロール パネルの @qq{プログラムの追加と削除} を開き、@c +LilyPond までスクロールして、@qq{削除} ボタンをクリックしてください。 + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading ファイルをコンパイルする + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading コマンドラインから実行する + +@warning{GUI 環境の方を好むのであれば、以下の説明は無視してください。} + +@subsubheading Windows のコマンドライン + +LilyPond を実行する最も簡便な方法は、@c +LilyPond 実行可能のファイルを保持しているフォルダを、@c +環境変数 @qq{Path} に追加することです。 + + +@enumerate + +@item +コントロール パネルの @qq{システム} を開き、@c +@qq{詳細設定} タブを選択し、@qq{環境変数} ボタンをクリックします。 + +@item +@qq{システム環境変数} リストから変数 @qq{Path} を選択し、@c +編集ボタンをクリックします。@c +@qq{システム変数の編集} というタイトルのウィンドウが表示されます。@c +@qq{変数値} の最後に、LilyPond の実行可能ファイルを保持しているフォルダを、@c +以下のように付け加えます: + +@example +[@var{既存の Path}];@var{DIR}\LilyPond\usr\bin +@end example + +@warning{@var{DIR} は、一般には @code{C:\Program Files} です。} + +@noindent +@qq{OK} ボタンをクリックしてウィンドウを閉じます。 + +@end enumerate + +@subsubheading 個々の実行可能ファイルを呼び出す + +lilypond, lilypond-book, convert-ly などの LilyPond 実行可能ファイルを@c +コマンドラインから呼び出すことによって、実行することができます: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading 法律用語 + +@divClass{legal} +すべてのロゴと製品イメージには著作権があり、商標登録されています。 + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node ソース +@unnumberedsec ソース +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{自分自身で LilyPond をビルドしようと @strong{しない} ことを@c +強く推奨します。@c +ほとんどすべてのユーザは、ビルド済みバージョンを使用した方が良いです。} + +@divClass{column-left-bottom} +@subheading ソース tarball +@c Source tarball + +@downloadStableSource{} + +新旧すべてのバージョンは、@c +@uref{http://download.linuxaudio.org/lilypond/binaries/,ダウンロード サイト} +でリストアップされています。 + +@divEnd + +@divClass{column-right-bottom} +@subheading コンパイル方法 + +コンパイル方法は @rcontrib{Compiling LilyPond} に記載されています。 + +@divEnd + + +@node 古いダウンロード +@unnumberedsec 古いダウンロード +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading すべてのバージョン + +新旧すべてのバージョンは、@c +@uref{http://download.linuxaudio.org/lilypond/binaries/,ダウンロード サイト} +でリストアップされています。 + +@divEnd + + +@node GPL +@unnumberedsec GPL +@translationof GPL + +@divClass{column-center-top} +@subheading ソフトウェア ライセンス +@c Software license + +GNU LilyPond は、@c +GNU General Public License に基づいて公開されています。@c +このライセンスの紹介と、このライセンスを選択した理由については、@c +@ref{自由} に記述されています。@c +(訳者) GNU GPL, GNU FDL の日本語訳は +@uref{http://www.opensource.jp/,Open Source Group Japan} +を参照してください。 + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd diff --git a/Documentation/ja/web/introduction.itexi b/Documentation/ja/web/introduction.itexi new file mode 100644 index 0000000000..8de77992dd --- /dev/null +++ b/Documentation/ja/web/introduction.itexi @@ -0,0 +1,1295 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 2613eed0a13ce118cb11f83057d9d79fc6973a4e + + 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 Translators: Yoshiki Sawada, Yoshinobu Ishizaki + +@node 導入部 +@unnumbered 導入部 +@translationof Introduction + +@divClass{column-center-top} +@subheading 我々のゴール + +@imageFloat{flat-design,png,right} + +LilyPond のきっかけは2人の音楽仲間がコンピュータで印刷した@c +つまらない見栄えの楽譜を超えようと決意したことに始まります。@c +すべての音楽家は美しい楽譜を好みます。@c +それなら、我々プログラマーは美しい楽譜を作り出すソフトウェアを@c +作ることはできないでしょうか? + +答えは、音楽家をレイアウトの細かな問題から解放し、@c +音楽に集中できるようにするシステムです。@c +LilyPond は、@c +音楽家が伝統的な手法で製作された出版物レベルの品質を持つ楽譜を@c +作成することを可能にします。 + +@divEnd + +@divClass{column-left-top} +@subheading LilyPond の機能 + +@c ここから +@itemize + +@item +@ref{特徴}: LilyPond で何ができるのか? + +@item +@ref{例}: 実際に楽譜を見てみたい! + +@item +@ref{自由}: LilyPond はフリー ソフトウェアです。 + +@item +@ref{バックグラウンド}: 我々のコンピュータ審美学。 + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading LilyPond の使用例 + +@itemize + +@item +@ref{成果物}: LilyPond の実際の使用例。 + +@item +@ref{人々の評価}: 人々は何と言っている? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading LilyPond の使い方 +@c How LilyPond works + +@itemize + +@item +@ref{テキスト入力}: 楽譜を @emph{テキスト} で記述する?! + +@item +@ref{より簡単な編集手段}: LilyPond に取り組むための他の方法。 + +@end itemize +@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 +* 特徴:: LilyPond は何ができるの? +* 例:: 楽譜を見てみたい! +* 自由:: 自由と GPL。 +* バックグラウンド:: コンピュータ審美学。 +* 成果物:: LilyPond の実際の使用例。 +* 人々の評価:: 人々は何と言っている? +* テキスト入力:: 楽譜をテキストで記述する?! +* より簡単な編集手段:: LilyPond に取り組むための他の方法。 +@end menu +@divEnd + + + +@node 特徴 +@unnumberedsec 特徴 +@translationof Features + + +@subheading 優美 +@subsubheading すぐれた伝統的な譜刻 +@c Excellent classical engraving + +@imageFloat{flat-design,png,right} + +LilyPond は、音楽家が美しく、読みやすい楽譜を作り出すことを可能にします。@c +LilyPond の開発者コミュニティは、@c +美しく譜刻された楽譜を生み出す強力な譜刻ソフトウェアを開発するために@c +何千時間も費やしてきました。@c +LilyPond の書式設定、フォント デザイン、それにアルゴリズムはすべて、@c +手で譜刻された最高品質の楽譜を参考にしています。@c +LilyPond の出力は、最高の職人によって作られた伝統的な楽譜と同じくらい、@c +力強く、バランスがとれていて、美しい見栄えがします。@c +これらのことについて、@ref{エッセー} でさらに説明しています。 + + +@subsubheading 効果的なレイアウト機能 +@c Effective layout choices + +出力の調整に時間を無駄にするのは止めましょう。@c +LilyPond は最初から正しいフォーマットで出力します。@c +緻密で統一のとれたレイアウトになるよう、スペースを自動的に決定し、@c +改行、改ページを行います。@c +歌詞、音符、和音の衝突回避、それにスラーや連桁の傾きは自動的に行われます! + +@divEnd + + +@divClass{color2} +@subheading 使いやすさ + +@imageFloat{lilypond-book,png,right} + +@subsubheading テキスト ベース入力 +@c Text-based input + +LilyPond は ASCII 入力を受け付けます。@c +これは、お好みのテキスト エディタで素早く、快適に作成することができます。@c +マウスを使うわずらわしさはありません。@c +入力にはすべての情報が保持されるため、@c +複雑なコマンドの羅列を覚える必要はありません。@c +後で参照するために、入力を保存しておけば良いだけです。@c + + +@subsubheading 楽譜と文章の混合 +@c Mix music and text + +@imageFloat{lilypond-book,png,right} + +画像のカット&ペーストをせずに、 +楽譜の断片をテキストに入れることができます。@c +LaTeX や HTML に楽譜を垣根無く統合できますし、@c +OOoLilyPond を使えば OpenOffice.org に楽譜を追加することも出来ます。@c +LilyPond のコードを様々なブログ、Wiki で使用可能にする@c +プラグインがあります。@c + + +@subsubheading アクセス性 +@c Accessibility + +テキスト ベースの入力は、重い身体障がいを持つユーザであっても、@c +楽譜を記述することを可能にします。@c +キーボードやマウスを扱うことができない、上肢障がいのあるユーザは、@c +音声認識ソフトウェアを使って、LilyPond ファイルを編集することができます。@c +盲目のユーザでさえも、読み上げソフトウェアを使って、@c +LilyPond ファイルを記述することができます +-- これは、グラフィカル ベースの楽譜作成プログラムでは不可能なことです。 + + +@subsubheading 拡張性の高い設計 +@c Extensible design + +すべての設定は、個人的な写植上の好みに合わせて変更可能です。@c +仮にそれが不十分な場合でも、強力な LISP 言語の変種である@c +組込みのスクリプト言語 Scheme があります。@c +全てはの設定、変数、それに関数は、 +広範囲に亘るプログラム リファレンス マニュアルの中に@c +ドキュメント化されています。 + +@divEnd + +@divClass{color3} + +@subheading 環境 + +@subsubheading フリー ソフトウェア +@c Free software + +LilyPond は無料でダウンロードすることができます!@c +そうです -- 無料です。@c +ダウンロード ページから入手してください。 + +LilyPond は (口語的な意味でも) フリーなソフトウェアです。@c +ソース コードが公開されており、変更もコピーも認められています。@c +ですから、バグにいらいらしていたり、仕様面で不満があるのなら、@c +自分でそれを追加したり、他の人にそれを注文することが出来ます。 + + +@subsubheading 素晴らしいサポート +@c Excellent support + +LilyPond は一般的なプラットフォーム全て +(GNU/Linux, MacOS, そして Windows) で動きます。 +LilyPond には広範囲のドキュメントと数百の実例ファイルが付属します。@c +Lilypond ユーザー メーリング リストで質問に答えてくれる@c +活発なユーザ コミュニティがありますし、@c +開発チームは問題が早期に解決されるよう活動しています。 + + +@subsubheading Enhanced editors + +自身が活発な LilyPond ユーザである開発者の何人かは、@c +LilyPond ファイルの編集プロセスをより早く、より効率的に行うための@c +ツールを作っています。@c +@ref{より簡単な編集手段} で例を挙げます。 + +@divEnd +@divClass{column-center-bottom} + + +@subheading どうですか? +@c Where now? + +まだ迷っていますか?@c +ちょっとした @ref{例} をいくつか見てください。@c +LilyPond を試してみる決心がついたのなら、@c +まず @ref{テキスト入力} を読んでください。 +@divEnd + + + +@node 例 +@unnumberedsec 例 +@translationof Examples + +LilyPond は、いかなる種類の譜刻にも対応できる、@c +強力で、自由度の高いツールです。@c +我々の楽譜ギャラリーを見て、楽譜の多様さ、美しさを実感してください! + + +@newsItem +@subsubheading クラシック音楽 + +この J. S. Bach 作のオルガン曲の楽譜は、@c +LilyPond の象徴的な例です。 + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading 複雑な楽譜 +@c Complex Notation + +@c 保留 +この Enrique Granados 作の @emph{Goyescas} からの例は、@c +符幹が上下に突き出る連桁、譜をまたぐ符幹、それに voice-follow lines を含む@c +より高度な写植機能を示しています。 + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading 古楽 +@c Early Music + +LilyPond は、以下のグレゴリオ聖歌のパッセージのような、@c +さまざまなタイプの古楽もサポートします。 + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading 現代音楽 +@c Modern Music + +現代音楽の作曲家は、@c +LilyPond が標準的でない楽譜を扱うのに適していることを見出すでしょう。@c +ここで、Trevor Bača の無伴奏バス フルートのための @emph{Čáry} から、@c +抜粋を示します。 + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading 効率的に、自由に演奏資料を作り出します + +同じソース コードからさまざまな演奏資料を作り出すことができます。@c +以下は、@uref{http://nicolas.sceaux.free.fr/,Nicolas Sceaux} が +Handel の @emph{Giulio Cesare} を譜刻したものの抜粋から、@c +総譜、ピアノ伴奏を持つボーカル譜、それにバイオリン パートを作り出しています。 + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading タブ譜 +@c Tablature + +@c ここから +LilyPond はタブ譜をサポートします。@c +楽器に合わせてカスタマイズすることが可能です。@c +タブ譜は、五線譜用に記述された音符から自動的に生成されます。 + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Schenker Graphs + +Standard output can be modified heavily. Here someone has created +an impressive Schenkerian analysis. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Vocal Music + +Lilypond is excellent for vocal music of all kinds, from sacred +hymns to opera. Here is a medieval motet with slightly unusual +requirements. The tenor voice is written in a different meter +than the others, but must line up as if it were in the same meter. +Lilypond handles this most elegantly. Note also the incipits with +Vaticana style clefs, the slashed stems indicating plicated notes, +and the ligature braces above certain groups of notes. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading 教育 + +LilyPond は教育を目的とした使用にも適しています。@c +ちょっとした対位法の問題例を挙げます。 + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading ポピュラー音楽 + +メロディー、歌詞、コード名、フレットボードを持つ@c +ポピュラー音楽のリード譜を簡単に作れます。@c +以下の例ではあらかじめ定義されているフレットボード ダイアグラムを@c +使用していますが、@c +状況に合わせて様々なカスタマイズを行うことができます。 + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Large Projects + +LilyPond はオペラや交響楽団のような大きなプロジェクトにも非常に適しています。@c +さらに、テキスト ベースの入力は高いアクセス性を提供します +-- 以下の例は盲目の作曲家である Hu Haipeng によって作られた例です。 + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading どうですか? +@c Where now? + +まだ迷っていますか?@c +LilyPond は @ref{自由} をもたらすフリー ソフトウェアです。@c +LilyPond を試してみる決心がついたのなら、@c +まず @ref{テキスト入力} を読んでください。 +@divEnd + + +@node 自由 +@unnumberedsec 自由 +@translationof Freedom + +@divClass{column-center-top} +@subheading フリー ソフトウェア +@c Free Software + +@uref{http://www.gnu.org/, GNU} LilyPond は熱心な人々からなる@c +コミュニティによって作成され、維持されています。@c +LilyPond は、すべての人にプログラムの修正、変更、拡張を許可する +@ref{GPL, GNU General Public License} と +@ref{FDL, GNU Free Documentation License} に基づいて公開されています。@c +美しい楽譜を作るのに、何万円もするソフトウェアは必要ありません! +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading ユーザにとっての利益は何なのか? +@c What are the benefits to users? + +@itemize + +@item +無料: ダウンロードして試してみてください!何か失うものはありますか? + +@item +共有: このプログラムを気に入ったのなら、@c +コピーを友人、先生、生徒、同僚にあげることができます! + +@item +ソースを入手可能: LilyPond がどのように記譜を行うのかに興味を持ったのなら、@c +それを実際に見ることができます。 + +@item +拡張性: 機能やバグ修正を追加したり、機能変更を行うことができます。@c +プログラマでなければ、そういった仕事をする人を雇うことができます。 + +このことはアマチュア音楽家には意味のないことかもしれませんが、@c +ソフトウェアの拡張性は、本格的な作曲家、企業、大学にとっては@c +非常に価値のあるものです。 + +@item +将来の安全性: 営利企業が破産した場合、@c +その企業の製品に基づく電子音楽はどうなるでしょうか?@c +LilyPond にはこういったこととは無縁です。@c +たとえ開発チームが全員辞めたとしても (まったくあり得ない話ですが)、@c +このプログラムは合法的にコピー、変更、配布することができます。 + + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading 何故 LilyPond の開発者たちはこのプログラムを無料にしておくのか? +@c Why do LilyPond developers @qq{give away} their work for free? + +たいていの人たちは、LilyPond の開発を趣味やボランティア活動と見なしています。@c +ですから、この質問の本質はこうです +-- @qq{なぜボランティア活動を行うのか?}。 + +@itemize + +@item +楽しい: ゴールに向かって取り組むことは楽しいことです。@c +特に、チームで取り組んでいる場合は! + +@item +ゴールの共有: 我々は皆、美しい楽譜を望んでいます。@c +しかしながら、すべての状況を処理できるプログラムを作成できるような@c +熟練者はほとんどいません (そして、皆、時間がありません!)。@c +皆で取り組むことで +-- ある人は自動連桁のコードを改良し、ある人はスラーの形を改良し、@c +またある人は、それらの機能の使い方を説明するドキュメントを記述します +-- 個人々々ができる努力からゴールを達成することができます。 + +@item +@qq{与える文化}: フリー ソフトウェア (あるいは @qq{オープン ソース}) +運動は多くの偉大なソフトウェア プロジェクトを生み出してきました +-- @uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox}, それに +@uref{http://www.wesnoth.org/, Battle for Wesnoth} など。 +これらのプロジェクトの恩恵を受けて、@c +そのコミュニティに @qq{恩返し} をしたいと考えている開発者もいます。 + +@item +経験: オープン ソース プロジェクトに貢献することは、@c +プログラミング、ドキュメントの記述、デザインを訓練するための@c +素晴らしい方法です。@c +この経験により、仕事の依頼を受けたり、奨学金を得た開発者もいます。 + + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading どうですか? +@c Where now? + +まだ迷っていますか?@c +@ref{バックグラウンド} で我々の譜刻哲学についての広範囲な@c +エッセーを読んでください。 +ちょっとした @ref{例} をいくつか見てください。@c +LilyPond を試してみる決心がついたのなら、@c +まず @ref{テキスト入力} を読んでください。 +@divEnd + + +@node バックグラウンド +@unnumberedsec バックグラウンド +@translationof Background + +@divClass{column-center-top} +@subheading バックグラウンド エッセー + +コンピュータ審美学 -- コンピュータで美しいものを作り出す手法 +-- について記述した広範囲なエッセーがあります。 + +LilyPond についての簡単な紹介を望むのであれば、@c +このエッセーは大きすぎるでしょう。@c +今、このエッセーを読もうと思うのならば、@ref{エッセー} に進んでください。 + +@divEnd + +@divClass{column-center-bottom} +@subheading どうですか? +@c Where now? + +まだ迷っていますか?@c +ユーザの @ref{成果物} と楽譜について読んでみてください。 +LilyPond を試してみる決心がついたのなら、@c +まず @ref{テキスト入力} を読んでください。 +@divEnd + + +@node 成果物 +@unnumberedsec 成果物 +@translationof Productions + +@divClass{column-left-top} +@subheading コンサート + +LilyPond で生成された楽譜は、世界中の演奏で使用されています。@c +いくつかハイライトを挙げます: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire Étrangère}, an opera by Valentin Villenave, with +libretto by Lewis Trondheim, premiered February 1, 2009, by +@uref{http://www.orchestre-montpellier.com/, L'Opéra Montpellier}. + +@item +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}'s +performance of Lully's @emph{Armide}, May 15-16, 2009, in Houston, +Texas (engraving by @uref{http://nicolas.sceaux.free.fr/, +Nicolas Sceaux}). + +@item +Instrumental excerpts from Rameau's @emph{Hippolyte et Aricie} at +St. James's Church in Manhattan, May 8, 2009, by Frederick Renz +and his ensemble @uref{http://www.earlymusicny.org/, Early Music +New York} (engraving by Nicolas Sceaux). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading 公開されている楽譜 +@c Published sheet music + +@divClass{keep-bullets} +@itemize + +@item +@uref{http://www.mutopiaproject.org/index.html, Mutopia Project}, +1500 曲を越えるクラシック音楽の楽譜を自由にダウンロードできます。@c +LilyPond で生成された楽譜の主要なショーケースです。 + +@c don't make this "Mutopia" a link, since that looks silly. +@item +@uref{http://etudeapp.com, Etude}, @qq{sheet music on steroids} is +an iPhone app which displays piano music engraved with LilyPond, +including many pieces from Mutopia. The app includes a virtual +piano keyboard showing which keys to press to help beginners learn +how to read sheet music. + +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing}, +high-quality scores of sacred music, available for immediate +download or in traditional paper format. + +@item +@uref{http://theshadylanepublishing.com/, The Shady Lane +Publishing}, +a @qq{micro musical publishing house} whose goal is to promote a +new form of musical economy closer to the musicians and music +lovers. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading どうですか? +@c Where now? + +まだ迷っていますか?@c +ユーザの @ref{人々の評価} を読んでみてください。 +LilyPond を試してみる決心がついたのなら、@c +まず @ref{テキスト入力} を読んでください。 +@divEnd + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/testimonials + +@node 人々の評価 +@unnumberedsec 人々の評価 +@translationof Reviews + +@divClass{column-left-top} +@subheading 出版された記事 + +@divClass{keep-bullets} +@itemize + +@item +May 2010 + +Peter Kirn, on the Create Digital Music website, publishes a +@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,LilyPond +review}. He takes a balanced view on usage, praises LilyPond's +high-quality notation and suggests to try it out. + +@item +September 2009 + +The German LinuxUser magazine wrote an +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +article about LilyPond}. + +@item +August 2009 + +Ann Drinan, on the +@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org} +website, presents comments by two orchestra librarians who +talk about using software to maintain their libraries. + +@item +June 2009 + +In an @uref{http://news.lilynet.net/Free-Music-Now, article} +published in the French @emph{National Conservatory Parent +Association}'s yearly magazine, French composer and LilyPond +contributor Valentin Villenave explains how Free licenses, and +specifically LilyPond-engraved scores, are instrumental in +making written music accessible to all. + +@item +February 2008 + +In @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, +articles on his personal site}, Andrew Hawryluk compares Finale +and LilyPond in general terms, and evaluates engraving +capabilities of both pieces of software in detail. The second +article is an instructive analysis of engraving issues in +Rachmaninoff's Piano Prelude No. 6, including comparisons with a +hand-engraved reference edition. + +@item +June 2006 + +@uref{http://distrowatch.com,DistroWatch} awards LilyPond and +@uref{http://distrowatch.com/weekly.php?issue=20060605,writes} +@qq{Ladies and Gentleman, we are pleased to announce that, based +on readers' requests, the DistroWatch May 2006 donation has been +awarded to LilyPond (@euro{}190.00) and Lua (US$250.00).} + +@item +December 2005 + +@uref{http://linuxjournal.com,Linux Journal} publishes an article +titled @uref{http://www.linuxjournal.com/article/8364, Make +Stunning Schenker Graphs with GNU LilyPond}. It is an in-depth +but hands-on feature article with crisp LilyPond graphics. Author +Kris Shaffer remarks @qq{GNU LilyPond generates beautiful graphics +that make commercial alternatives seem second-rate.} + +@item +August 20, 2005 + +The Belgian newspaper De Standaard investigates what drives Free +Software authors in an article titled +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} (Non-profit sharing of +knowlegde) in its @q{DS2 bijlage}. LilyPond is used as an example +and the article is interspersed with quotes from an email +interview with Jan Nieuwenhuizen. This marks LilyPond's first +appearance in mainstream printed press. + +@item +June 2005 + +A French article on the LilyPond 2.6 release appeared on +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +October 2004 + +The editors of Computer!Totaal, a Dutch computer magazine, +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, +describe LilyPond} in the October 2004 issue as: @qq{Wonderful +free (open source) software [..] The sheet music produced by +LilyPond is exceptionally pretty [..] a very powerful system that +can do almost anything.} + +@item +July, August 2004 + +Dave Phillips wrote an introductory article for +@uref{http://linuxjournal.com,Linux Journal}: At +the sounding edge: LilyPond, parts +@uref{http://www.linuxjournal.com/article/7657, one} and +@uref{http://www.linuxjournal.com/article/7719, two}. + +@item +March 2004 + +Chris Cannam +@uref{http://www.all-day-breakfast.com/cannam/linux-musician/lilypond.html,interviewed} +Han-Wen Nienhuys and Jan Nieuwenhuizen on linuxmusician.com +(original site defunct). This interview was also reviewed in a +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, +slashdot story}. + +@item +February 2004 + +Jazz singer Gail Selkirk writes about +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Diving into LilyPond}. @qq{... you can make lead sheets or full +orchestral parts, and the results can be stunning.} +@uref{http://www.computermusic.co.uk/, Computer Music Special}, +issue CMS06. + +@end itemize + +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading ユーザからの推薦状 +@c User testimonials + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, ニューヨークフィル首席チェロ奏者 + +@qq{...私は、何曲かのチェロ独奏用のアンコール ピースを書き、@c +LilyPond で印刷しました。@c +Shirmer に出版を掛け合おうとしていますが、そこで印刷される物は@c +恐らく私の物の半分も良くないでしょう!} + +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, フライブルク音楽大学作曲科教授 + +@qq{まだ [LilyPond] について詳しく知りませんが、@strong{とても}感銘を受けています。@c +定量記譜法で Josquin Desprez のモテットを入力するのに LilyPond を使いましたが、@c +LilyPond が、スピード、使い易さ、見栄えにおいて、 +他の全ての楽譜作成プログラムを圧倒していることは間違いありません!} + +@divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, 作曲家 (ベルギー ブリュッセル) + +@qq{[..最初のオーケストラリハーサルの後で] 私は楽譜の出来について@c +たくさんの賛辞をいただきました。@c +重要なのは、@c +Lilypondには楽譜の見栄えをより良くするための数多くの方法があるのですが、@c +私がオーケストラに渡したのは@c +基本的に生の、そのままの出力結果だったということです。} + +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, 作曲家 (カナダ トロント) + +@qq{この素晴らしい仕事をした開発チームに感謝と賛辞の意を。@c +Lilypondで得られる結果に近い物は他ではありません +-- この偉大なアプリケーションは、私の楽譜出版の必要性に対して、@c +期待以上の結果を間違いなくもたらしてくれます。@c +[..] 基本的に、いじっていない Lilypond の出力は [..] +私が比較した最近の @q{プロ} の出版物 +(Warner Bros. の楽譜、それから @q{老舗} の最近の楽譜の大多数) +よりも良いです。[..]} + +@qq{Finale/Sibelius/Igor/他の楽譜ソフトウェアに負けるな!!!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, @uref{http://www.rosegardenmusic.com/, RoseGarden} プロジェクトの主任プログラマ。 + +@qq{LilyPond は明らかに [楽譜清書における] 超重量級ゴリラです。} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro 楽譜出版社} + +@qq{ +楽譜作成を LilyPond に任せることで、私はより音楽に集中することができます。@c +どうやって Lily に譜刻させるかで途方に暮れたこともありました。@c +しかしながら、たとえ私が作曲家の思った通りに譜刻したとしても、@c +その楽譜は読み難いものになるだろうということに気付きました。@c +LilyPond を使うことで、@c +私はより容易に編集者と譜刻者の 2 つの役割を果たすことができます。} + + +@qq{私の拙い楽譜出版ビジネスは、完全に LilyPond に頼っています。@c +作曲家に出版しようとしている楽譜の校正刷りを見せると、@c +例外なく彼らはその質の高さに圧倒されます。@c +賭けてもいいです。@c +私は出力の調整 -- 特に (和音の) タイの調整 -- に多くの時間を費やしますが、@c +LilyPond は私に素晴らしいスタート地点、直感的なインターフェイス、@c +それに時間をかけさえすればすべてを思い通りに変更できる能力を与えてくれます。@c +商用製品でこれだけのことをできるものは無いと確信しています。} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, アイスランド交響楽団バス トロンボーン奏者 + +@qq{LilyPond は素晴らしい。[..] LilyPond について知れば知るほど好きになる!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, エレキギター プレーヤ (そう、@uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, コレ} 関係) + +@qq{私は LilyPond に超、感動しています。[..]} + +@qq{今まででサイコーのプログラム!!!} + +@qq{作ってくれた人みんなの仕事と献身に感謝します!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, @uref{http://www.mutopiaproject.org/, Mutopia} メンバー + +@qq{憎悪にも似た情愛を感じました。@c +情愛の理由は、最初に見た楽譜があまりにも素晴らしかったからです!@c +LilyPond の美しさの説明は不十分です -- あまりにも控えめ過ぎる!@c +LilyPond は常に良くなっていますし、@c +scheme がどう使われているかを良く知るにつれ、@c +フラストレーションは減ってきました。@c +とにかく、言いたいことは @q{LilyPond を作ってくれて有難う、本当に素晴らしい。}@c +ということです。} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, ドイツ Koblenz 劇場指揮者、優れた GNU ハッカー + +@qq{とにかく、LilyPond は驚くほど良い仕事をする!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, @uref{http://jackaudio.org/, JACK} と @uref{http://www.ardour.org/, Ardour} の開発者 + +@qq{[LilyPond] はすごいプログラムだと思う。実に素敵な結果が得られる。@c +去年、これについてのインタビュー記事を読んだ後、@c +そのポテンシャルについて友達に夢中で喋っていたよ。} +@divEnd + +@divEnd + +@contactUsAbout{news articles or testimonals} + +@divClass{column-center-bottom} +@subheading どうですか? +@c Where now? + +@ref{テキスト入力} を読んでください。 +@divEnd + + + +@node テキスト入力 +@unnumberedsec テキスト入力 +@translationof Text input + +@c TRANSLATORS: so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading 楽譜を @qq{コンパイル} する + +@imageClickable{nereid-shot-small,png, (クリックすると拡大します), nereid-shot,png, right} + +LilyPond は @emph{コンパイル} システムです: +音符を保持しているテキスト ファイルに対して実行します。@c +結果として得られる出力は、スクリーン上で閲覧するか、プリントします。@c +いくつかの点で、LilyPond はグラフィカルな楽譜編集ソフトウェアよりも@c +プログラミング言語に似ています。 + +ツールバーから音符をドラッグして、楽譜に配置するのではありません。@c +テキストを打ち込むことで楽譜を記述します。@c +このテキストは LilyPond によって解析 (あるいは @qq{コンパイル}) され、@c +美しく譜刻された楽譜が生成されます。 + +グラフィカル ユーザ インターフェイスに慣れている人は、@c +新しい方法を学ぶ必要があるかもしれません。 +しかしながら、そうする価値は間違いなくあります! + +@warning{テキスト入力についての簡単な概要を用意しています +-- これは、見た目ほど難しいものではありません!@c +提示した例の詳細を理解できなくても心配ありません。 +初心者向けドキュメントがゆっくりとしたペースで説明しています。} + + +@subsubheading A B C と同じくらい簡単 + +音符は英字と数字で表現されます。@c +特殊なコマンドはバックスラッシュと一緒に入力します。 + +@imageFloat{text-input-1-annotate,png,center} +@imageFloat{text-input-1-output,png,center} + +臨時記号は違う名前で入力します。@c +シャープには @code{-is} を、フラットには @code{-es} を付けます +(これらは、オランダ語の音符名で、他の言語用もあります)。@c +LilyPondがどこに臨時記号を付けるかを判断します。 + +@imageFloat{text-input-2-annotate,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading ポップ ミュージック +@c Pop music + +リード譜を作るために、コードと歌詞を一緒に配置します: + +@imageFloat{text-input-pop-annotate,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading オーケストラ パート +@c Orchesteral parts + +入力ファイルには楽曲の音符が入っています。@c +スコアとパート譜を、一つの入力ファイルから作り出すことができます。@c +そのため、音符を変更すると常にパートとスコア両方に影響します。@c +音符を共有するには、その音楽を変数に割り当てます: + +@imageFloat{text-input-parts-both-annotate,png,center} + + +この変数は、単一のパートに使うことができます +(ここでは、移調され、複小節休符はまとめられています): + +@imageFloat{text-input-parts-single-annotate,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +同じ変数をフル スコアで使うことができます +(ここでは、コンサート ピッチです): + +@imageFloat{text-input-score-annotate,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading 初心者のためのドキュメント +@c Beginner Documentation + +多くのユーザがこのような方法で楽譜を入力することに違和感を覚えます。@c +そのため、新しいユーザを援助するために、@c +@ref{学習} から始まる広範囲なドキュメントを用意してあります。@c +学習マニュアルは LilyPond を始めるのにぴったりです。@c +ユーザが感じるであろう疑問に対する答えをたくさん含んでいます。 + +バグだと不満を漏らす前に、学習マニュアルを読んでください!@c +LilyPond は設計どおりに機能しているのですが、@c +新しいユーザは LilyPond が正しく機能していないと思い込むことが@c +しばしばあります。 + +もっと掘り下げた情報が @ref{マニュアル} にあります。 + + +@subsubheading より簡単な編集環境 +@c Easier editing environments + +@imageClickable{lilykde-screenshot-small,png, + (クリックすると拡大します),lilykde-screenshot,png,right} + +LilyPond は元来、最高品質の楽譜を作り出すことを目的としています。@c +グラフィカル ユーザ インターフェイス (GUI) を作ることは、@c +本来の趣旨から外れます。@c +しかしながら、LilyPond 入力ファイルの作成をより簡単にすることを@c +目指しているプロジェクトが別に存在します。 + +いくつか編集環境は、構文ハイライト、自動コマンド補完、@c +それに作成済みのテンプレートを用意しています。 +また、他のプログラムでは、グラフィカルな楽譜を直接操作することができる +GUI を提供しているものもあります。@c +更なる情報は、@ref{より簡単な編集手段} を読んでください。 + + +@divClass{column-center-bottom} +@subheading どうですか? +@c Where now? + +@ref{ダウンロード, LilyPond をダウンロードする} ところまで来ました。@c +まだ迷っていますか?@c +@ref{より簡単な編集手段} を読んでください。 + +@divEnd + + +@node より簡単な編集手段 +@unnumberedsec より簡単な編集手段 +@translationof Easier editing + + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (クリックすると拡大します),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +テキスト エディタ @uref{http://www.jedit.org,jEdit} 用のプラグインである +LilyPondTool は、LilyPond 楽譜を編集するための最も機能豊富な@c +テキスト ベース ツールの 1 つです。 +歌詞サポート機能を持つ文書ウイザードでより容易に文書を@c +セットアップすることができ、@c +進化したポイント&クリック サポートを持つ埋め込み PDF ビューアを@c +備えています。 + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (クリックすると拡大します),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi は LilyPond 専用の楽譜・テキスト エディタです。@c +ビルドイン PDF プレビューア、強力な楽譜ウイザード、@c +それに多くの編集機能を持ちます。@c +KDE4 ライブラリの最上位階層に組み込まれていて、@c +Linux や UNIX ライクな OS のすべてで実行できます。 + +@divEnd + + + +@divClass{column-center-top} +@subheading グラフィカルな環境: Denemo +@c Graphical environment: Denemo + +@imageClickable{screenshot-denemo-small,png, + (クリックすると拡大),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo は、LilyPond ソース コードを生成し、演奏することもできる@c +グラフィカルなエディタです。@c +LilyPond ソースコードをグラフィカル ビューと並べて表示することができます。@c +音符や和音等に LilyPond が処理可能な調整を加えることができ、@c +それを Denemo ファイルとして保存することができるため、@c +ユーザはグラフィカル環境で楽譜を編集することができます。 +LilyPond テキストの中でカーソルを動かすと、@c +グラフィカル ビューの中でもカーソルが動きます。@c +調整で構文エラーが起きると、テキスト ビューで該当部分がハイライトされます。 + +@divEnd + + +@divClass{column-center-top} +@subheading テキスト エディタ + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs は、多くのコンピュータ言語に対応する言語検出機能を持つ@c +テキスト エディタです。@c +Emacs には高い拡張性があり、統合開発環境として使用することができます。@c +LilyPond ソース ファイルに作成するための@c +言語定義を提供する @q{lilypond モード} があります。 +また、LilyPond 開発者の 1 人が Emacs メジャーモード +@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi} +を作成しています。 + + +@uref{http://www.vim.org} + +Vim は最小限度の機能を持つテキスト エディタであり、@c +古い Unix @command{vi} エディタの機能拡張版です。@c +このプログラムも拡張やコンフィグレーションを行うことができます。 + +一般的に言って、すでに Emacs や Vim に慣れているのでなければ、@c +LilyPond 入力ファイルを記述するために他のエディタを使うべきです。 + +Emacs と Vim をセットアップするための更なる情報が +@rprogram{テキスト エディタ サポート} にあります。 + +@sourceimage{logo-macosx,,,} +@uref{http://www.uoregon.edu/~koch/texshop} + +MacOS@tie{}X 用のエディタ TexShop を拡張して、 +エディタから LilyPond, @command{lilypond-book} それに +@command{convert-ly} を実行させることができます。 +拡張機能は以下で入手できます: + +@example +@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts} +@end example + +@sourceimage{logo-macosx,,,} +MacOS 用の商用エディタ TextMate にバンドルされる LilyPond があります。@c +以下を実行することでインストールされます: + +@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 + +@divClass{column-center-top} +@subheading LilyPond コードをエクスポートできるプログラム + + +@subsubheading Score, tab and MIDI editors: + +@itemize +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}: +オーディオ・MIDI シーケンサであり、単一譜を扱える楽譜エディタでもあります。 + +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}: +@uref{http://www.cairographics.org,Cairo} ライブラリをベースにした@c +楽譜エディタで、試験的に LilyPond へのエクスポートをサポートしています。 + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}: +マルチトラックなタブ譜のエディタ・プレイヤで、楽譜ビューアを持ち、@c +LilyPond コードのエクスポートが可能です。 + +@item +@uref{http://www.musescore.org,MuseScore}: +楽譜エディタで、完全ではありませんが LilyPond コードをエクスポートできます。@c +活発に開発が行われています。 + +@item +@uref{http://www.canorus.org,Canorus}: +楽譜エディタで、LilyPond コードをエクスポートできが、まだベータ版です。@c +テスターを歓迎しています。 + +@item +@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}: +リアルタイムにモノラル MIDI を LilyPond に変換します。 + +@item +@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm, +NW2LY}: +@uref{http://www.noteworthysoftware.com/, NoteWorthy} の曲を +LilyPond に変換する C# プログラムです。 + +@end itemize + +@subsubheading Algorithmic code generators + +@itemize + +@item +@uref{http://www.projectabjad.org/,Abjad}, a +@uref{http://www.python.org/,Python} API for Formalized Score +Control designed to help composers build up complex pieces of +LilyPond notation in an iterative and incremental way. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, a LISP library +to generate music notation from computer music software +environments. + +@item +@uref{http://strasheela.sourceforge.net,Strasheela}, an +environment built on top of the +@uref{http://www.mozart-oz.org/, Mozart/Oz} constraint programming +language. + +@end itemize +@divEnd + +@divClass{column-center-top} + +@subheading 活発には開発されていない他のプログラム + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} は +@uref{http://www.frescobaldi.org/,Frescobaldi} に置き換わり、 +KDE 3.5 用の LilyKDE3 と KDE 4.1 用の lilypond-KDE4 だけが存在します。 + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, which imported +@uref{http://www.musicxml.com/xml.html,MusicXML}, has been forked +into +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +and @uref{http://canorus.org,Canorus}. + + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} is a graphical +note entry program, acting much like a number-pad which produces +lilypond notes. + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading どうですか? +@c Where now? + +@ref{ダウンロード, LilyPond をダウンロードする} ところまで来ました。@c + +まだ迷っていますか?@c +多くの作曲家、音楽家、それに指揮者が LilyPond 入力フォーマットで@c +記述することを学んでいます。@c +経験を積んだユーザは、LilyPond を使うことで、@c +ピアノやマウス&GUI を使うよりも短時間で総譜を入力できると@c +レポートしてさえいます!@c +LilyPond が提供する @ref{特徴}, @ref{例}, あるいは @ref{自由} を@c +読み返してみてください。@c +また、ユーザの @ref{成果物} と @ref{人々の評価} を読んでみてください。@c +さらに、伝統的な譜刻の審美性をコンピュータで実現するための@c +我々のアプローチが @ref{バックグラウンド} で説明されています。 + + +@subheading 法律用語 +@c Legalese + +@divClass{legal} +すべてのロゴと製品イメージには著作権があり、商標登録されています。 + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/ja/web/manuals.itexi b/Documentation/ja/web/manuals.itexi new file mode 100644 index 0000000000..802fb323f4 --- /dev/null +++ b/Documentation/ja/web/manuals.itexi @@ -0,0 +1,585 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- +@ignore + Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066 + + 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 Translators: Yoshiki Sawada + +@node マニュアル +@unnumbered マニュアル +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, \reference\} の詳細) +@spanEnd +@end macro + +@divClass{heading-center} +@ifclear web_version + @heading LilyPond @version 用のマニュアル +@end ifclear +@ifset web_version + @heading LilyPond @versionStable 用のマニュアル +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading 導入部 + +@itemize + +@item @ref{テキスト入力}: +LilyPond は @strong{テキスト ベース} の楽譜作成プログラムです。@c +まず最初にこのドキュメントを読んでください! + +@item @ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,学習}} +@qq{必読} のやさしい LilyPond 入門書です。 +@details{学習} + +@item @ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,用語集}} +@emph{(副読本)} +音楽用語についての説明と、 +英語の音楽用語に馴染みの無いユーザのための訳語を提供します。 +@details{用語集} + +@item @ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}} +@emph{(副読本)} +コンピュータによる譜刻についての背景。 +@details{エッセー} + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading 常用するマニュアル + +@itemize + +@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,記譜法}} +構文リファレンス。 +@details{記譜法} + +@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,使用方法}} +このプログラムの実行方法。 +@details{使用方法} + +@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}} +ちょっとしたトリック、秘訣。 +@details{コード断片集} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading 常用外のマニュアル + +@itemize + +@item @ref{FAQ}: +頻繁に質問されること。 + +@item @ref{Top, Web}: +このドキュメント。 +@details{Web} + +@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}} +変更点。 +@details{変更点} + +@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}} +変則的な調整。 +@details{拡張} + +@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}} +調整のためのリファレンス。 +@details{内部リファレンス} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading その他の資料 + +@itemize + +@item @ref{翻訳済み}: +非英語圏の読者のための翻訳状況。 + +@item @ref{すべて}: +ダウンロード可能なバージョンと古いマニュアル。 + +@item @ref{Development}: +開発バージョンのためのマニュアル。 + +@item @ref{FDL}: +これらのマニュアルは GNU Free Documentation License に基づいて@c +発行されています。 + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* 学習:: 学習 +* 用語集:: 用語集 +* エッセー:: エッセー +* 記譜法:: リファレンス +* 使用方法:: 使用方法 +* コード断片集:: コード断片集 +* FAQ:: FAQ +* Web:: Web +* 変更点:: ニュース +* 拡張:: プログラミング +* 内部リファレンス::内部リファレンス +* 翻訳済み:: 翻訳 +* すべて:: すべてのマニュアル +* FDL:: ライセンス +@end menu + +@divEnd + + +@c TRANSLATORS: most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node 学習 +@unnumberedsec 学習 +@translationof Learning + +@divClass{column-left-top} +@subheading 学習マニュアル + +本書は LilyPond の学習の始め方を説明します。@c +同時に、キーとなるコンセプトのいくつかをやさしい用語で説明します。@c +各章を順番に読んでいくことをお勧めします。 + +各セクションの最後に @strong{参照} という段落があります。@c +ここには他のセクションへの相互参照があります: +初読時にはこの相互参照を追いかけていくべきではありません。@c +このマニュアルをすべて読み終えて、いくつかのセクションを再読するときに、@c +更なる情報を求めてこの相互参照を追っていくことになるかもしれません。 +@divEnd + +@divClass{column-right-bottom} + +@docLinks{学習, learning, + @rlearningnamed{Top,学習}, + @manualStableLearningSplit, + @manualStableLearningBig, 1.5 MB, + @manualStableLearningPdf, 3 MB} + +@divEnd + + +@node 用語集 +@unnumberedsec 用語集 +@translationof Glossary + +@divClass{column-left-top} +@subheading 用語集 + +本書は音楽用語について説明します。@c +さまざまな言語への訳語も含みます。@c +記譜法や音楽用語に馴染みが無い場合 (特に、英語圏ではない人であれば)、@c +この用語集を調べると大いに役立つでしょう。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{音楽用語集, music-glossary, + @rglosnamed{Top,音楽用語集}, + @manualStableGlossarySplit, + @manualStableGlossaryBig, 1 MB, + @manualStableGlossaryPdf, 1.5 MB} + +@divEnd + + +@node エッセー +@unnumberedsec エッセー +@translationof Essay + +@divClass{column-left-top} +@subheading エッセー + +本書は楽譜の活版技術の歴史について簡単に説明し、@c +LilyPond の譜刻テクニックの例を挙げます。@c +さらに、LilyPond と他の楽譜譜刻システムを比較します。 + +@warning{活版技術の詳細についての例は、@c +分析しやすくするため、高解像度の PDF 形式としています。} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{エッセー, essay, + @ressaynamed{Top,エッセー}, + @manualStableEssaySplit, + @manualStableEssayBig, 2 MB, + @manualStableEssayPdf, 2.5 MB} + +@divEnd + + +@node 記譜法 +@unnumberedsec 記譜法 +@translationof Notation + +@divClass{column-left-top} +@subheading 記譜法リファレンス + +本書は楽譜を生み出す LilyPond コマンドをすべて説明します。 + +@warning{ +この記譜法リファレンスは、@c +読み手が学習マニュアルでカバーされている基本的な題材についての知識を有していて、@c +音楽用語集で提供されている英語の音楽用語に馴染みがあることを前提としています。 +} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{記譜法, notation, + @rusernamed{Top,記譜法}, + @manualStableNotationSplit, + @manualStableNotationBig, 7 MB, + @manualStableNotationPdf, 18 MB} + +@divEnd + + +@node 使用方法 +@unnumberedsec 使用方法 +@translationof Usage + +@divClass{column-left-top} +@subheading 使用法マニュアル + +本書はこのプログラムの実行のしかた、@c +LilyPond 記譜法を他のプログラムと統合する方法について説明します。@c +さらに、効果的な使い方をするための @qq{最良の習慣} を提案します。@c +大きなプロジェクトに取り組む前に、本書を読むことをお勧めします。 +@divEnd + +@divClass{column-right-bottom} + +@docLinks{使用方法, usage, + @rprogramnamed{Top,使用方法}, + @manualStableUsageSplit, + @manualStableUsageBig, 300 KB, + @manualStableUsagePdf, 400 KB} + +@divEnd + + +@node コード断片集 +@unnumberedsec コード断片集 +@translationof Snippets + +@divClass{column-left-top} +@subheading コード断片集 + +これは @uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond コード断片リポジトリ} +(LSR) から選び出した LilyPond のコード断片集です。@c +LSR にあるすべてのコード断片はパブリック ドメインにあります +(公開されています)。 + +このコード断片集に含まれるコード断片は、必ずしも LSR にあるわけではありません。@c +LSR は LilyPond の安定版で実行することを前提としているため、@c +開発版の新機能をデモンストレーションするコード断片を別に付け加える必要があります。@c +新機能を使用するコード断片は、LilyPond ソース ツリーの中の @file{input/new/} に@c +保存されています。 + +さらに、記譜法リファレンスの各サブセクションに対応するコード断片のリストは、@c +記譜法リファレンスの @strong{参照} 部分からリンクが張られています。 +@divEnd + +@divClass{column-right-bottom} + +@docLinks{コード断片集, snippets, + @rlsrnamed{Top,コード断片集}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node FAQ +@unnumberedsec FAQ +@translationof FAQ + +@divClass{column-center-top} +@subheading 使い始めの質問 + +@subsubheading グラフィカルなキャンバス、メニュー、それにツールバーはどこに@c +あるのですか? + +LilyPond は、ユーザが音楽をテキストで書くソフトウェアです。@c +@ref{テキスト入力} を読んでください。 + + +@subsubheading ドキュメントがたくさんあります!すべて読む必要があるのですか!? + +読む必要があるのは @ref{学習, 学習マニュアル} です。@c +他のドキュメントで読む必要があるのは、@c +作成したい記譜について議論しているセクションだけです。 + + +@subsubheading それでもまだ、読むものがたくさんあります!そこまでする価値のあるソフトウェアなのですか? + +あなた自身で決めてください。@c +LilyPond を使う理由については、@ref{導入部} に書かれています。 + +@divEnd + +@divClass{column-center-bottom} +@subheading 使い方についての質問 +@c Usage questions + +@subsubheading 何かがうまくいっていません!どうやって直せば良いのですか? + +修正方法については、@rprogram{トラブルシュート} で説明されています。 + + +@subsubheading 何故、構文が変更されるのですか? + +そのことについては、@rprogram{何故構文は変更されるのか?} で説明されています。 + +@divEnd + + +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +本書は LilyPond についての全般的な情報を提供します。@c +さらに、さまざまなコミュニティ フォーラム、バグ レポート、@c +それに開発についての情報も含んでいます。 + +@divEnd + +@divClass{column-right-bottom} +@subheading お読みください + +@subsubheading 最新のマニュアル + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading @versionDevel の Web マニュアル + +@docLinksBare{Web, web, + @ref{Top,Web}, + @manualDevelWebSplit, + @manualDevelWebBig, 1 MB, + @manualDevelWebPdf, 2 MB} + +@divEnd + + +@node 変更点 +@unnumberedsec 変更点 +@translationof Changes + +@divClass{column-left-top} +@subheading 変更点 + +本書は、LilyPond の前の安定バージョンからの、@c +重要な変更点と新しい機能についての要約です。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{変更点, changes, + @rchangesnamed{Top,変更点}, + @manualStableChangesSplit, + @manualStableChangesBig, 6 KB, + @manualStableChangesPdf, 200 KB} + +@divEnd + +@node 拡張 +@unnumberedsec 拡張 +@translationof Extending + +@divClass{column-left-top} +@subheading LilyPond の拡張 + +本書は、LilyPond を拡張する方法について説明しています。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{拡張, extend, + @rextendnamed{Top,拡張}, + @manualStableExtendingSplit, + @manualStableExtendingBig, 200 KB, + @manualStableExtendingPdf, 400 KB} + +@divEnd + + +@node 内部リファレンス +@unnumberedsec 内部リファレンス +@translationof Internals + +@divClass{column-left-top} +@subheading 内部リファレンス + +本書は、LilyPond のクラス、オブジェクト、それに関数を@c +それぞれすべて詳細に、かつ具体的にドキュメント化した@c +幾重にもリンクし合う HTML ページのセットです。@c +本書は、ソース コードのフォーマット定義から直接生成されます。 + +内部的に使用されるフォーマット関数のほとんどすべてを、@c +ユーザが直接使用できます。@c +例えば、太さ、間隔等を制御する変数の値のほとんどを、@c +入力ファイルの中で変更することが可能です。@c +膨大な数のフォーマット オプションがあり、@c +それらすべてが本書の中で記述されています。@c +記譜法リファレンスの各セクションには @b{参照} というサブセクションがあり、@c +そこから本書を参照しています。@c +HTML ドキュメントでは、それらサブセクションにはクリック可能なリンクがあります。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{内部リファレンス, internals, + @rinternalsnamed{Top,内部リファレンス}, + @manualStableInternalsSplit, + @manualStableInternalsBig, 2.5 MB, + @manualStableInternalsPdf, 2.8 MB} + + +@divEnd + + +@node 翻訳済み +@unnumberedsec 翻訳済み +@translationof Translated + +@divClass{column-center-bottom} +@subheading 翻訳状況 + +@include translations.itexi + +@divEnd + + +@node すべて +@unnumberedsec すべて +@translationof All + +@divClass{column-left-top} +@subheading ダウンロード可能なバージョン + +@ifclear web_version +ダウンロード可能な .tar.gz ファイルは @uref{http://lilypond.org} でのみ入手可能です。 +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading 以前の安定バージョン + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +LilyPond 2.12 ドキュメント} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +LilyPond 2.10 ドキュメント} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +LilyPond 2.8 ドキュメント} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +LilyPond 2.6 ドキュメント} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/, +LilyPond 2.4 ドキュメント} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/, +LilyPond 2.2 ドキュメント} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/, +LilyPond 2.0 ドキュメント} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/, +LilyPond 1.8 ドキュメント} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/, +LilyPond 1.6 ドキュメント} + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL +@translationof FDL + +@divClass{column-center-top} +@subheading ドキュメント ライセンス + +GNU LilyPond のドキュメントは、@c +GNU Free Documentation License に基づいて公開されています。@c +このライセンスの紹介と、このライセンスを選択した理由については、@c +@ref{自由} に記述されています。@c +(訳者) GNU GPL, GNU FDL の日本語訳は +@uref{http://www.opensource.jp/,Open Source Group Japan} +を参照してください。 + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd diff --git a/Documentation/learning.tely b/Documentation/learning.tely new file mode 100644 index 0000000000..65b9addbe2 --- /dev/null +++ b/Documentation/learning.tely @@ -0,0 +1,83 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-learning.info +@settitle LilyPond Learning Manual +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@macro manualIntro +This file provides an introduction to LilyPond version +@version{}. +@end macro + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 by the authors. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Learning Manual of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Learning Manual} + +@c TOC -- non-tex +@ifnottex + +@menu +* Tutorial:: Basics of typesetting with LilyPond. +* Common notation:: Writing very common notation. +* Fundamental concepts:: Basic concepts required for reading the rest of the manuals. +* Tweaking output:: Introduction to modifying output. + +Appendices + +* Templates:: Ready-made templates. +* GNU Free Documentation License:: License of this document. +* LilyPond index:: +@end menu + +@docMain +@end ifnottex + + +@c TOC - tex +@contents + +@allowcodebreaks false + +@c INCLUDES + +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely + +@include learning/templates.itely +@include fdl.itexi + + +@node LilyPond index +@appendix LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/learning/GNUmakefile b/Documentation/learning/GNUmakefile new file mode 100644 index 0000000000..c93c9e0624 --- /dev/null +++ b/Documentation/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/learning/common-notation.itely b/Documentation/learning/common-notation.itely new file mode 100644 index 0000000000..4318925596 --- /dev/null +++ b/Documentation/learning/common-notation.itely @@ -0,0 +1,1433 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@ignore +Tutorial guidelines: (different from policy.txt!) +- unless you have a really good reason, use either + @lilypond[verbatim,quote] + or + @lilypond[verbatim,quote,relative=2] + + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "es". I know it's not + correct Dutch naming, but let's not confuse people with this + until we get to the Basic notation chapter. + +- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant + portions of the tutorial. + +@end ignore + + +@node Common notation +@chapter Common notation + +This chapter explains how to create beautiful printed music +containing common musical notation, following the material in +@ref{Tutorial}. + +@menu +* Single staff notation:: +* Multiple notes at once:: +* Songs:: +* Final touches:: +@end menu + + +@node Single staff notation +@section Single staff notation + +This section introduces common notation that is used for one voice +on one staff. + +@menu +* Bar checks:: +* Accidentals and key signatures:: +* Ties and slurs:: +* Articulation and dynamics:: +* Adding text:: +* Automatic and manual beams:: +* Advanced rhythmic commands:: +@end menu + + +@node Bar checks +@subsection Bar checks + +Though not strictly necessary, @emph{bar checks} should be +used in the input code to show where bar lines are expected +to fall. They are entered using the bar symbol, @code{|}. +With bar checks, the program can verify that you've entered +durations that make each measure add up to the correct +length. Bar checks also make your input code easier to +read, since they help to keep things organized. + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +Notation Reference: +@ruser{Bar and bar number checks}. + + +@node Accidentals and key signatures +@subsection Accidentals and key signatures + +@warning{New users are often confused by these -- please read the +warning at the bottom of this page, especially if you are not +familiar with music theory!} + +@subheading Accidentals + +@cindex accidentals +@cindex accidentals and key signatures +@cindex sharp +@cindex double sharp +@cindex sharp, double +@cindex flat +@cindex double flat +@cindex flat, double + +@funindex es +@funindex is +@funindex eses +@funindex isis + +Music Glossary: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, +@rglos{double flat}, @rglos{accidental}. + +A @notation{sharp} pitch is made by adding @code{is} to the name, +and a @notation{flat} pitch by adding @code{es}. As you might +expect, a @notation{double sharp} or @notation{double flat} is +made by adding @code{isis} or @code{eses}. This syntax is derived +from note naming conventions in Nordic and Germanic languages, +like German and Dutch. To use other names for +@notation{accidentals}, see @ruser{Note names in other languages}. + +@lilypond[verbatim,quote,relative=2] +cis4 ees fisis, aeses +@end lilypond + +@cindex key signature, setting +@subheading Key signatures + +@cindex key signature +@cindex major +@cindex minor +@cindex accidentals and key signature +@cindex content vs. layout +@cindex layout vs. content + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +Music Glossary: @rglos{key signature}, @rglos{major}, +@rglos{minor}. + +The @notation{key signature} is set with the command @code{\key} +followed by a pitch and @code{\major} or @code{\minor}. + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 | +\key c \minor +a1 | +@end lilypond + +@smallspace + +@subheading Warning: key signatures and pitches + +Music Glossary: @rglos{accidental}, @rglos{key signature}, +@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, +@rglos{transposition}, @rglos{Pitch names}. + +To determine whether to print an @notation{accidental}, LilyPond +examines the pitches and the @notation{key signature}. The key +signature only affects the @emph{printed} accidentals, not the +note's @notation{pitch}! This is a feature that often causes +confusion to newcomers, so let us explain it in more detail. + +LilyPond makes a clear distinction between musical content and +layout. The alteration (@notation{flat}, @notation{natural sign} or +@notation{sharp}) of a note is part of the pitch, and is therefore +musical content. Whether an accidental (a @emph{printed} flat, +natural or sharp sign) is printed in front of the corresponding +note is a question of layout. Layout is something that follows +rules, so accidentals are printed automatically according to those +rules. The pitches in your music are works of art, so they will +not be added automatically, and you must enter what you want to +hear. + +In this example: + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +No note has a printed accidental, but you must still add +@code{is} and type @code{cis} and @code{fis} in the input file. + +The code @code{b} does not mean @qq{print a black dot just on +the middle line of the staff.} Rather, it means @qq{there is a +note with pitch B-natural.} In the key of A-flat major, it +@emph{does} get an accidental: + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +If the above seems confusing, consider this: if you were playing a +piano, which key would you hit? If you would press a black key, +then you @emph{must} add @code{-is} or @code{-es} to the note +name! + +Adding all alterations explicitly might require a little more +effort when typing, but the advantage is that +@notation{transposing} is easier, and accidentals can be printed +according to different conventions. For some examples of how +accidentals can be printed according to different rules, see +@ruser{Automatic accidentals}. + + +@seealso +Notation Reference: +@ruser{Note names in other languages}, +@ruser{Accidentals}, +@ruser{Automatic accidentals}, +@ruser{Key signature}. + + +@node Ties and slurs +@subsection Ties and slurs + +@cindex tie +@cindex slur +@cindex slur, phrasing +@cindex phrasing slur + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + +@subheading Ties + + +Music Glossary: @rglos{tie}. + +A @notation{tie} is created by appending a tilde @code{~} to the +first note being tied. + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4~ c8 a~ a2 | +@end lilypond + +@subheading Slurs + + +Music Glossary: @rglos{slur}. + +A @notation{slur} is a curve drawn across many notes. The +starting note and ending note are marked with @code{(} and +@code{)} respectively. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@subheading Phrasing slurs + +Music Glossary: @rglos{slur}, @rglos{phrasing}. + +Slurs to indicate longer @notation{phrasing} can be entered with +@code{\(} and @code{\)}. You can have both @notation{slurs} +and phrasing slurs at the same time, but you cannot have +simultaneous slurs or simultaneous phrasing slurs. + +@lilypond[verbatim,quote,relative=2] +g4\( g8( a) b( c) b4\) +@end lilypond + +@smallspace + +@cindex slurs versus ties +@subheading Warnings: slurs vs. ties + +Music Glossary: @rglos{articulation}, @rglos{slur}, @rglos{tie}. + +A @notation{slur} looks like a @notation{tie}, but it has a +different meaning. A tie simply makes the first note longer, and +can only be used on pairs of notes with the same pitch. Slurs +indicate the @notation{articulation} of notes, and can be used on +larger groups of notes. Slurs and ties can be nested. + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + + +@seealso +Notation Reference: +@ruser{Ties}, +@ruser{Slurs}, +@ruser{Phrasing slurs}. + + +@node Articulation and dynamics +@subsection Articulation and dynamics + + +@subheading Articulations + +@cindex articulation +@cindex accent +@cindex staccato + +Music Glossary: @rglos{articulation}. + +Common @notation{articulations} can be added to a note using a +dash @code{-} and a single character: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +@subheading Fingerings + +@cindex fingering + +@funindex ^ +@funindex _ + +Music Glossary: @rglos{fingering}. + +Similarly, @notation{fingering} indications can be added to a note +using a dash (@code{-}) and the digit to be printed: + +@lilypond[verbatim,quote,relative=2] +c4-3 e-5 b-2 a-1 +@end lilypond + +Articulations and fingerings are usually placed automatically, but +you can specify a direction by replacing the dash (@code{-}) with +@code{^} (up) or @code{_} (down). You can also use multiple +articulations on the same note. However, in most cases it is best +to let LilyPond determine the articulation directions. + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Dynamics + +@cindex dynamics +@cindex decrescendo +@cindex crescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Music Glossary: @rglos{dynamics}, @rglos{crescendo}, +@rglos{decrescendo}. + +@notation{Dynamic} signs are made by adding the markings (with a +backslash) to the note: + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + + +@notation{Crescendi} and @notation{decrescendi} are started with +the commands @code{\<} and @code{\>}. The next dynamics sign, for +example @code{\f}, will end the (de)crescendo, or the command +@code{\!} can be used: + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +Notation Reference: +@ruser{Articulations and ornamentations}, +@ruser{Fingering instructions}, +@ruser{Dynamics}. + + +@node Adding text +@subsection Adding text + +@cindex text, adding +@cindex adding text +@cindex markup + +@funindex \markup +@funindex markup + +Text may be added to your scores: + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +Extra formatting may be added with the @code{\markup} command: + +@lilypond[verbatim,quote,relative=2] +c2^\markup { \bold espr } +a2_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Notation Reference: +@ruser{Writing text}. + + +@node Automatic and manual beams +@subsection Automatic and manual beams + +@cindex beaming +@cindex automatic beams +@cindex manual beams +@cindex beams, automatic +@cindex beams, manual +@cindex beams, by hand + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Music Glossary: @rglos{beam}. + +All @notation{beams} are drawn automatically: + +@lilypond[verbatim,quote,relative=2] +a8 ais d ees r d c16 b a8 +@end lilypond + +If you do not like the automatic beams, they may be overridden +manually. To correct just an occasional beam mark the first note +to be beamed with @code{[} and the last one with @code{]}. + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +If you want to turn off automatic beaming entirely or for an +extended section of music, use the command @code{\autoBeamOff} +to turn off automatic beaming and @code{\autoBeamOn} to turn it +on again. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +Notation Reference: +@ruser{Automatic beams}, +@ruser{Manual beams}. + + +@node Advanced rhythmic commands +@subsection Advanced rhythmic commands + +@subheading Partial measure + +@cindex pickup +@cindex anacrusis +@cindex partial measure + +@funindex \partial +@funindex partial + +Music Glossary: @rglos{anacrusis}. + +A pickup (or @notation{anacrusis}) is entered with the keyword +@code{\partial}. It is followed by a duration: @code{\partial 4} +is a quarter note pickup and @code{\partial 8} an eighth note. + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + +@subheading Tuplets + +@cindex tuplets +@cindex triplets + +@funindex \times +@funindex times + +Music Glossary: @rglos{note value}, @rglos{triplet}. + +@notation{Tuplets} are made with the @code{\times} keyword. It +takes two arguments: a fraction and a piece of music. The +duration of the piece of music is multiplied by the fraction. +Triplets make notes occupy 2/3 of their notated duration, so a +@notation{triplet} has 2/3 as its fraction + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Grace notes + +@cindex grace notes +@cindex acciaccatura +@cindex appoggiatura + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Music Glossary: @rglos{grace notes}, @rglos{acciaccatura}, +@rglos{appoggiatura}. + +@notation{Grace notes} are created with the @code{\grace} command, +although they can also be created by prefixing a music expression +with the keyword @code{\appoggiatura} or @code{\acciaccatura}: + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +Notation Reference: +@ruser{Grace notes}, +@ruser{Tuplets}, +@ruser{Upbeats}. + + +@node Multiple notes at once +@section Multiple notes at once + +This section introduces having more than one note at the same +time: multiple instruments, multiple staves for a single +instrument (i.e. piano), and chords. + +Polyphony in music refers to having more than one voice occurring +in a piece of music. Polyphony in LilyPond refers to having more +than one voice on the same staff. + +@menu +* Music expressions explained:: +* Multiple staves:: +* Staff groups:: +* Combining notes into chords:: +* Single staff polyphony:: +@end menu + + +@node Music expressions explained +@subsection Music expressions explained + +@cindex music expression +@cindex expression, music +@cindex compound music expression +@cindex music expression, compound + +In LilyPond input files, music is represented by @emph{music +expressions}. A single note is a music expression: + +@lilypond[verbatim,quote,relative=2] +a4 +@end lilypond + +Enclosing a note in braces creates a @emph{compound music +expression}. Here we have created a compound music expression +with two notes: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +Putting a group of music expressions (e.g. notes) in braces means +that they are in sequence (i.e. each one follows the previous +one). The result is another music expression: + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f4 g } +@end lilypond + +@subheading Analogy: mathematical expressions + +This mechanism is similar to mathematical formulas: a big formula +is created by composing small formulas. Such formulas are called +expressions, and they can contain other expressions, so you can +make arbitrarily complex and large expressions. For example, + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +This is a sequence of expressions, where each expression is +contained in the next (larger) one. The simplest expressions are +numbers, and larger ones are made by combining expressions with +operators (like @code{+}, @code{*} and @code{/}) and parentheses. +Like mathematical expressions, music expressions can be nested +arbitrarily deep, which is necessary for complex music like +polyphonic scores. + + +@subheading Simultaneous music expressions: multiple staves + +@cindex multiple staves +@cindex staves, multiple +@cindex polyphony +@cindex combining expressions in parallel +@cindex parallel expressions +@cindex expressions, parallel +@cindex relative notes and simultaneous music +@cindex relative notes and parallel expressions +@cindex simultaneous music and relative notes +@cindex parallel expressions and relative notes + +@funindex << +@funindex >> +@funindex << ... >> + +Music Glossary: @rglos{polyphony}. + +This technique is useful for @notation{polyphonic} music. To +enter music with more voices or more staves, we combine +expressions in parallel. To indicate that two voices should play +at the same time, simply enter a simultaneous combination of music +expressions. A @q{simultaneous} music expression is formed by +enclosing expressions inside @code{<<} and @code{>>}. In the +following example, three sequences (all containing two separate +notes) are combined simultaneously: + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +Note that we have indented each level of the input with a +different amount of space. LilyPond does not care how much (or +little) space there is at the beginning of a line, but indenting +LilyPond code like this makes it much easier for humans to read. + +@warning{each note is relative to the previous note in +the input, not relative to the @code{c''} in the initial +@code{@bs{}relative} command.} + + +@subheading Simultaneous music expressions: single staff + +To determine the number of staves in a piece, LilyPond looks at +the beginning of the first expression. If there is a single note, +there is one staff; if there is a simultaneous expression, there +is more than one staff. The following example shows a complex +expression, but as it begins with a single note it will be set +out on a single staff. + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e2 f } { c2 <> } >> | +} +@end lilypond + +@node Multiple staves +@subsection Multiple staves + +@cindex multiple staves +@cindex staves, multiple +@cindex context +@cindex context, notation +@cindex notation context + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +LilyPond input files are constructed out of music expressions, as +we saw in @ref{Music expressions explained}. If the score begins +with simultaneous music expressions, LilyPond creates multiples +staves. However, it is easier to see what happens if we create +each staff explicitly. + +To print more than one staff, each piece of music that makes up a +staff is marked by adding @code{\new Staff} before it. These +@code{Staff} elements are then combined in parallel with @code{<<} +and @code{>>}: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +The command @code{\new} introduces a @q{notation context.} A +notation context is an environment in which musical events (like +notes or @code{\clef} commands) are interpreted. For simple +pieces, such notation contexts are created automatically. For +more complex pieces, it is best to mark contexts explicitly. + +There are several types of contexts. @code{Score}, @code{Staff}, +and @code{Voice} handle melodic notation, while @code{Lyrics} sets +lyric texts and @code{ChordNames} prints chord names. + +In terms of syntax, prepending @code{\new} to a music expression +creates a bigger music expression. In this way it resembles the +minus sign in mathematics. The formula @math{(4+5)} is an +expression, so @math{-(4+5)} is a bigger expression. + +Time signatures entered in one staff affect all other staves by +default. On the other hand, the key signature of one staff does +@emph{not} affect other staves. This different default behavior +is because scores with transposing instruments are more common +than polyrhythmic scores. + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + + + +@node Staff groups +@subsection Staff groups + +@cindex piano staff +@cindex staff, piano +@cindex choir staff +@cindex staff, choir +@cindex grand staff +@cindex staff, grand +@cindex staff group + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Music Glossary: +@rglos{brace}, +@rglos{staff}, +@rglos{system}. + +Piano music is typeset in two staves connected by a +@notation{brace}. +Printing such a staff is similar to the polyphonic example in +@ref{Multiple staves}. However, now this entire expression is +inserted inside a @code{PianoStaff}: + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> +@end example + +Here is a small example: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef "bass" c,,4 c' | e c | } + >> +} +@end lilypond + +Other staff groupings are introduced with @code{\new GrandStaff}, +suitable for orchestral scores, and @w{@code{\new ChoirStaff}}, +suitable for vocal scores. These staff groups each form another +type of context, one that generates the brace at the left end of +every system and also controls the extent of bar lines. + + +@seealso +Notation Reference: +@ruser{Keyboard and other multi-staff instruments}, +@ruser{Displaying staves}. + + +@node Combining notes into chords +@subsection Combining notes into chords + +Music Glossary: @rglos{chord} + +@cindex chords +@cindex note durations in chords + +@funindex < +@funindex > +@funindex < ... > + +We saw earlier how notes can be combined into @notation{chords} by +indicating they are simultaneous by enclosing them in double angle +brackets. However, the normal way of indicating a chord is to +surround the pitches with @emph{single} angle brackets. Note that +all the notes in a chord must have the same duration, and that the +duration is placed after the closing bracket. + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +Think of chords as almost equivalent to single notes: +almost everything you can attach to a single note can be attached +to a chord, and everything must go @emph{outside} the angle +brackets. For example, you can combine markings like beams and +ties with chords. They must be placed outside the angle brackets. + +@lilypond[verbatim,quote,relative=2] +r4 ~ 2 | +8[ ] \>[ ]\! | +r4 8.\p 16( 4-. ) | +@end lilypond + +@seealso +Notation Reference: +@ruser{Chorded notes}. + + +@node Single staff polyphony +@subsection Single staff polyphony + +@cindex polyphony +@cindex multiple voices +@cindex voices, more on one staff +@cindex single staff polyphony +@cindex spacer rest +@cindex rest, spacer + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +Polyphonic music in lilypond, while not difficult, uses concepts +that we haven't discussed yet, so we're not going to introduce +them here. Instead, the following sections introduce these concepts +and explain them thoroughly. + +@seealso +Learning Manual: +@ref{Voices contain music}. + +Notation Reference: +@ruser{Simultaneous notes}. + +@node Songs +@section Songs + +This section introduces vocal music and simple song sheets. + +@menu +* Setting simple songs:: +* Aligning lyrics to a melody:: +* Lyrics to multiple staves:: +@end menu + + +@node Setting simple songs +@subsection Setting simple songs + +@cindex lyrics +@cindex songs + +@funindex \addlyrics +@funindex addlyrics + +Music Glossary: @rglos{lyrics}. + +Here is the start of the melody to a nursery +rhyme, @notation{Girls and boys come out to play}: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +The @notation{lyrics} can be set to these notes, combining both +with the @code{\addlyrics} keyword. Lyrics are entered by +separating each syllable with a space. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } +>> +@end lilypond + +@warning{It is essential that the final syllable is separated from +the terminating curly bracket by a space or a newline, or it will be +assumed to be part of the syllable, giving rise to an obscure +error, see @rprogram{Apparent error in ../ly/init.ly}.} + +Note the double angle brackets @w{@code{<< ... >>}} around the +whole piece to show that the music and lyrics are to occur at the +same time. + +@node Aligning lyrics to a melody +@subsection Aligning lyrics to a melody + +@cindex melisma +@cindex extender line +@cindex hyphens +@cindex underscore +@cindex lyrics, aligning +@cindex aligning lyrics +@cindex lyrics, multi-syllable words +@cindex words with multiple syllables in lyrics + +Music Glossary: @rglos{melisma}, @rglos{extender line}. + +The next line in the nursery rhyme is @notation{The moon doth +shine as bright as day}. Let's extend it: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +If you compile the code in the example above, you should see some +warnings in the console output: + +@example +song.ly:12:29: warning: barcheck failed at: 5/8 + The | moon doth shine as + | bright as day; | +song.ly:12:46: warning: barcheck failed at: 3/8 + The | moon doth shine as | bright as day; + | +@end example + +This is a good example of the usefulness of bar checks. Now, +looking at the music, we see that the extra lyrics do not align +properly with the notes. The word @notation{shine} should be sung +on two notes, not one. This is called a @notation{melisma}, a +single syllable sung to more than one note. There are several +ways to spread a syllable over multiple notes, the simplest being +to add a slur across them, for details, see @ref{Ties and slurs}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +The words now line up correctly with the notes, but the automatic +beaming for the notes above @notation{shine as} does not look right. +We can correct this by inserting manual beaming commands to override +the automatic beaming here, for details, see @ref{Automatic and +manual beams}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +As an alternative to using slurs, the melismata may be indicated +in just the lyrics by using an underscore @code{_} for each note +that should be included in the melisma: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +If a syllable extends over several notes or a single very long +note an @notation{extender line} is usually drawn from the +syllable extending under all the notes for that syllable. It is +entered as two underscores @code{__}. Here is an example from the +first three bars of @notation{Dido's Lament}, from Purcell's +@notation{Dido and Æneas}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +None of the examples so far have involved words containing more +than one syllable. Such words are usually split one syllable to a +note, with hyphens between syllables. Such hyphens are entered as +two dashes, resulting in a centered hyphen between the syllables. +Here is an example showing this and everything we have learned so +far about aligning lyrics to notes. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +Some lyrics, especially those in Italian, require the opposite: +setting more than one syllable to a single note. This is +achieved by linking the syllables together with a single +underscore @code{_} (with no spaces), or enclosing them in quotes. +Here's an example from Rossini's @notation{Figaro}, where +@notation{al} has to be sung on the same note as the @notation{go} of +@notation{Largo} in Figaro's aria @notation{Largo al factotum}: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef "bass" + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + + +@seealso +Notation Reference: +@ruser{Vocal music}. + + +@node Lyrics to multiple staves +@subsection Lyrics to multiple staves + +@cindex lyrics and multiple staves +@cindex multiple staves and lyrics + +The simple approach using @code{\addlyrics} can be used for +placing lyrics under more than one staff. Here is an +example from Handel's @notation{Judas Maccabæus}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + +Scores any more complex than this simple example are better +produced by separating out the score structure from the notes and +lyrics with variables. These are discussed in @ref{Organizing +pieces with variables}. + + +@seealso +Notation Reference: +@ruser{Vocal music}. + + +@node Final touches +@section Final touches + +This is the final section of the tutorial; it demonstrates how to +add the final touches to simple pieces, and provides an +introduction to the rest of the manual. + +@menu +* Organizing pieces with variables:: +* Adding titles:: +* Absolute note names:: +* After the tutorial:: +@end menu + + +@node Organizing pieces with variables +@subsection Organizing pieces with variables + +@cindex variables +@cindex variables, defining +@cindex identifiers +@cindex macros +@cindex assigning variables +@cindex using variables +@cindex variables, using +@cindex variables, characters allowed in +@cindex characters allowed in variables + +When all of the elements discussed earlier are combined to produce +larger files, the music expressions get a lot bigger. In +polyphonic music with many staves, the input files can become very +confusing. We can reduce this confusion by using +@emph{variables}. + +With variables (also known as identifiers or macros), we can break +up complex music expressions. A variable is assigned as +follows: + +@example +namedMusic = @{ @dots{} @} +@end example + +The contents of the music expression @code{namedMusic} can be used +later by placing a backslash in front of the name +(@code{\namedMusic}, just like a normal LilyPond command). + +@lilypond[verbatim,quote] +violin = \new Staff { + \relative c'' { + a4 b c b + } +} + +cello = \new Staff { + \relative c { + \clef "bass" + e2 d + } +} + +{ + << + \violin + \cello + >> +} +@end lilypond + +@noindent +The name of a variable must have alphabetic characters only, no +numbers, underscores, or dashes. + +Variables must be defined @emph{before} the main music +expression, but may be used as many times as required anywhere after +they have been defined. They may even be used in a later definition +of another variable, giving a way of shortening the input if a +section of music is repeated many times. + +@lilypond[verbatim,quote] +tripletA = \times 2/3 { c,8 e g } +barA = { \tripletA \tripletA \tripletA \tripletA } + +\relative c'' { + \barA \barA +} +@end lilypond + +Variables may be used for many other types of objects in +the input. For example, + +@example +width = 4.5\cm +name = "Wendy" +aFivePaper = \paper @{ paperheight = 21.0 \cm @} +@end example + +Depending on its contents, the variable can be used in different +places. The following example uses the above variables: + +@example +\paper @{ + \aFivePaper + line-width = \width +@} + +@{ + c4^\name +@} +@end example + + +@node Adding titles +@subsection Adding titles + +@cindex title +@cindex headers +@cindex header block + +@funindex \header +@funindex header + +The title, composer, opus number, and similar information are +entered in the @code{\header} block. This exists outside of the +main music expression; the @code{\header} block is usually placed +underneath the version number. + +@example +\version @w{"@version{}"} + +\header @{ + title = "Symphony" + composer = "Me" + opus = "Op. 9" +@} + +@{ + @dots{} music @dots{} +@} +@end example + +When the file is processed, the title and composer are printed +above the music. More information on titling can be found in +@ruser{Creating titles}. + + +@node Absolute note names +@subsection Absolute note names + +@cindex note names +@cindex note names, absolute +@cindex absolute mode +@cindex absolute values for pitches +@cindex pitches, absolute values +@cindex absolute note names + +So far we have always used @code{\relative} to define pitches. +This is the easiest way to enter most music, but another way of +defining pitches exists: absolute mode. + +If you omit the @code{\relative}, LilyPond treats all pitches as +absolute values. A @code{c'} will always mean middle C, a +@code{b} will always mean the note one step below middle C, and a +@code{g,} will always mean the note on the bottom staff of the +bass clef. + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +Here is a four-octave scale: + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +As you can see, writing a melody in the treble clef involves a lot +of quote @code{'} marks. Consider this fragment from Mozart: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +All these quotes makes the input less readable and they are a source +of errors. With @code{\relative}, the previous example is much +easier to read and type: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 | + b8. cis16 b8 d4 d8 | +} +@end lilypond + +If you make a mistake with an octave mark (@code{'} or @code{,}) +while working in @code{\relative} mode, it is very obvious -- many +notes will be in the wrong octave. When working in absolute mode, +a single mistake will not be as visible, and will not be as easy +to find. + +However, absolute mode is useful for music which has large +intervals, and is extremely useful for computer-generated LilyPond +files. + + + +@node After the tutorial +@subsection After the tutorial + +After finishing the tutorial, you should probably try writing a +piece or two. Start by adding notes to one of the +@ref{Templates}. If you need any notation that was not covered in +the tutorial, look at the Notation Reference, starting with +@ruser{Musical notation}. If you want to write for an instrument +ensemble that is not covered in the templates, take a look at +@ref{Extending the templates}. + +Once you have written a few short pieces, read the rest of the +Learning Manual (chapters 3-5). There's nothing wrong with +reading it now, of course! However, the rest of the Learning +Manual assumes that you are familiar with LilyPond input. You may +wish to skim these chapters right now, and come back to them after +you have more experience. + +In this tutorial and in the rest of the Learning Manual, there is a +paragraph @strong{See also} at the end of each section, which contains +cross-references to other sections: you should not follow these +cross-references at first reading; when you have read all of the +Learning Manual, you may want to read some sections again and follow +cross-references for further reading. + +If you have not done so already, @emph{please} read @ref{Overview +of manuals}. There is a lot of information about LilyPond, so +newcomers often do not know where they should look for help. If +you spend five minutes reading that section carefully, you might +save yourself hours of frustration looking in the wrong places! + diff --git a/Documentation/learning/fundamental.itely b/Documentation/learning/fundamental.itely new file mode 100644 index 0000000000..b203fefd6e --- /dev/null +++ b/Documentation/learning/fundamental.itely @@ -0,0 +1,3213 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Fundamental concepts +@chapter Fundamental concepts + +You've seen in the Tutorial how to produce beautifully printed +music from a simple text file. This section introduces the +concepts and techniques required to produce equally beautiful +but more complex scores. + +@menu +* How LilyPond input files work:: +* Voices contain music:: +* Contexts and engravers:: +* Extending the templates:: +@end menu + + +@node How LilyPond input files work +@section How LilyPond input files work + +The LilyPond input format is quite free-form, giving experienced +users a lot of flexibility to structure their files however they +wish. But this flexibility can make things confusing for new +users. This section will explain some of this structure, but may +gloss over some details in favor of simplicity. For a complete +description of the input format, see @ruser{File structure}. + +@menu +* Introduction to the LilyPond file structure:: +* Score is a (single) compound musical expression:: +* Nesting music expressions:: +* On the un-nestedness of brackets and ties:: +@end menu + +@node Introduction to the LilyPond file structure +@subsection Introduction to the LilyPond file structure + +@cindex input format +@cindex file structure + +A basic example of a LilyPond input file is + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...compound music expression...} % all the music goes here! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +There are many variations of this basic pattern, but this +example serves as a useful starting place. + +@funindex \book +@funindex book +@funindex \score +@funindex score +@cindex book +@cindex score + +Up to this point none of the examples you have seen have used a +@code{\score@{@}} command. This is because LilyPond automatically +adds the extra commands which are needed when you give it simple +input. LilyPond treats input like this: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +as shorthand for this: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +In other words, if the input contains a single music expression, +LilyPond will interpret the file as though the music expression +was wrapped up inside the commands shown above. + +@cindex implicit contexts +@cindex contexts, implicit + +@strong{A word of warning!} Many of the examples in the LilyPond +documentation will omit the @code{\new Staff} and @code{\new Voice} +commands, leaving them to be created implicitly. For simple +examples this works well, but for more complex examples, especially +when additional commands are used, the implicit creation of contexts +can give surprising results, maybe creating extra unwanted staves. +The way to create contexts explicitly is explained in +@ref{Contexts and engravers}. + +@warning{When entering more than a few lines of music it is +advisable to always create staves and voices explicitly.} + +For now, though, let us return to the first example and examine the +@code{\score} command, leaving the others to default. + +A @code{\score} block must always contain just one music expression, +and this must appear immediately after the @code{\score} command. +Remember that a music expression could be anything from a single +note to a huge compound expression like + +@example +@{ + \new StaffGroup << + @var{...insert the whole score of a Wagner opera in here...} + >> +@} +@end example + +@noindent +Since everything is inside @code{@{ ... @}}, it counts +as one music expression. + +As we saw previously, the @code{\score} block can contain other +things, such as + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex header +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi +@cindex header +@cindex layout +@cindex midi + +@noindent +Note that these three commands -- @code{\header}, @code{\layout} and +@code{\midi} -- are special: unlike many other commands which begin +with a backward slash (@code{\}) they are @emph{not} music expressions +and are not part of any music expression. So they may be placed +inside a @code{\score} block or outside it. In fact, these commands +are commonly placed outside the @code{\score} block -- for example, +@code{\header} is often placed above the @code{\score} command, as the +example at the beginning of this section shows. + +Two more commands you have not previously seen are +@code{\layout @{ @}} and @code{\midi @{@}}. If these appear as +shown they will cause LilyPond to produce a printed output and a +MIDI output respectively. They are described fully in the +Notation Reference -- @ruser{Score layout}, and +@ruser{Creating MIDI files}. + +@cindex scores, multiple +@cindex book block, implicit +@cindex implicit book block +@funindex \book +@funindex book + +You may code multiple @code{\score} blocks. Each will be +treated as a separate score, but they will be all combined into +a single output file. A @code{\book} command is not necessary +-- one will be implicitly created. However, if you would like +separate output files from one @file{.ly} file then the +@code{\book} command should be used to separate the different +sections: each @code{\book} block will produce a +separate output file. + +In summary: + +Every @code{\book} block creates a separate output file (e.g., a +PDF file). If you haven't explicitly added one, LilyPond wraps +your entire input code in a @code{\book} block implicitly. + +Every @code{\score} block is a separate chunk of music within a +@code{\book} block. + +@cindex layout block, effect of location + +Every @code{\layout} block affects the @code{\score} or +@code{\book} block in which it appears -- i.e., a @code{\layout} +block inside a @code{\score} block affects only that @code{\score} +block, but a @code{\layout} block outside of a @code{\score} block +(and thus in a @code{\book} block, either explicitly or +implicitly) will affect every @code{\score} in that @code{\book}. + +For details see @ruser{Multiple scores in a book}. + +@cindex variables + +Another great shorthand is the ability to define variables, as +shown in @ref{Organizing pieces with variables}. All the +templates use this: + +@example +melody = \relative c' @{ + c4 a b c +@} + +\score @{ + \melody +@} +@end example + +When LilyPond looks at this file, it takes the value of +@code{melody} (everything after the equals sign) and inserts it +whenever it sees @code{\melody}. There's nothing special about +the name -- it could be @code{melody}, @code{global}, +@code{keyTime}, @code{pianorighthand}, or something else. +Remember that you can use almost any name you like as long as it +contains just alphabetic characters and is distinct from LilyPond +command names. For more details, see @ref{Saving typing with +variables and functions}. The exact limitations on variable names +are detailed in @ruser{File structure}. + + +@seealso +For a complete definition of the input format, see +@ruser{File structure}. + + +@node Score is a (single) compound musical expression +@subsection Score is a (single) compound musical expression + +@funindex \score +@funindex score +@cindex score +@cindex contents of a score block +@cindex score block, contents of +@cindex compound music expression +@cindex music expression, compound + +We saw the general organization of LilyPond input files in the +previous section, @ref{Introduction to the LilyPond file structure}. +But we seemed to skip over the most important part: how do we figure +out what to write after @code{\score}? + +We didn't skip over it at all. The big mystery is simply that +there @emph{is} no mystery. This line explains it all: + +@quotation +@emph{A @code{\score} block must begin with a compound music expression.} +@end quotation + +@noindent +To understand what is meant by a music expression and a compound +music expression, you may find it useful to review the tutorial, +@ref{Music expressions explained}. In that section, we saw how to +build big music expressions from small pieces -- we started from +notes, then chords, etc. Now we're going to start from a big +music expression and work our way down. For simplicity, we'll use +just a singer and piano in our example. We don't need a +@code{StaffGroup} for this ensemble, which simply groups a number +of staves together with a bracket at the left, but we do need +staves for a singer and a piano, though. + +@example +\score @{ + << + \new Staff = "singer" << + >> + \new PianoStaff = "piano" << + >> + >> + \layout @{ @} +@} +@end example + +Here we have given names to the staves -- @qq{singer} and +@qq{piano}. This is not essential here, but it is a useful habit +to cultivate so that you can see at a glance what each stave is +for. + +Remember that we use @code{<< ... >>} instead of @code{@{ ... @}} to +show simultaneous music. This causes the vocal part and piano part +to appear one above the other in the score. The @code{<< ... >>} +construct would not be necessary for the Singer staff in the example +above if it were going to contain only one sequential music +expression, but @code{<< ... >>} rather than braces is necessary if +the music in the Staff is to contain two or more simultaneous +expressions, e.g. two simultaneous Voices, or a Voice with lyrics. +We're going to have a voice with lyrics, so angle brackets are +required. We'll add some real music later; for now let's just put +in some dummy notes and lyrics. If you've forgotten how to add lyrics +you may wish to review @code{\addlyrics} in @ref{Setting simple songs}. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +Now we have a lot more details. We have the singer's staff: it +contains a @code{Voice} (in LilyPond, this term refers to a set of +notes, not necessarily vocal notes -- for example, a violin +generally plays one voice) and some lyrics. We also have a piano +staff: it contains an upper staff (right hand) and a lower staff +(left hand), although the lower staff has yet to be given a bass +clef. + +At this stage, we could start filling in notes. Inside the curly +braces next to @code{\new Voice = "vocal"}, we could start writing + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +But if we did that, the @code{\score} section would get pretty +long, and it would be harder to understand what was happening. So +let's use variables instead. These were introduced at the end +of the previous section, remember? To ensure the contents of the +@code{text} variable are interpreted as lyrics we preface them with +@code{\lyricmode}. Like @code{\addlyrics}, this switches the input +mode to lyrics. Without that, LilyPond would try to interpret the +contents as notes, which would generate errors. (Several other +input modes are available, see @ruser{Input modes}.) + +So, adding a few notes and a bass clef for the left hand, we now +have a piece of real music: + +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e } + +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond + +When writing (or reading) a @code{\score} section, just take it +slowly and carefully. Start with the outer level, then work on +each smaller level. It also really helps to be strict with +indentation -- make sure that each item on the same level starts +on the same horizontal position in your text editor. + + +@seealso +Notation Reference: @ruser{Structure of a score}. + + +@node Nesting music expressions +@subsection Nesting music expressions + +@cindex staves, temporary +@cindex temporary staves +@cindex ossias + +It is not essential to declare all staves at the beginning; they may +be introduced temporarily at any point. This is particularly useful +for creating ossia sections -- see @rglos{ossia}. Here is a simple +example showing how to introduce a new staff temporarily for the +duration of three notes: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Note that the size of the clef is the same as a clef printed +following a clef change -- slightly smaller than the clef +at the beginning of the line. This is usual for clefs printed +in the middle of a line. + +@cindex staff, positioning + +The ossia section may be placed above the staff +as follows: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } { f8 f c } + >> + r4 | + } +} +@end lilypond + +This example uses @code{\with}, which will be explained more +fully later. It is a means of modifying the default behavior +of a single Staff. Here it says that the new staff should be +placed above the staff called @qq{main} instead of the default +position which is below. + + +@seealso +Ossia are often written without clef and without +time signature and are usually in a smaller font. +These require further commands which +have not yet been introduced. See @ref{Size of objects}, +and @ruser{Ossia staves}. + + +@node On the un-nestedness of brackets and ties +@subsection On the un-nestedness of brackets and ties + +@cindex brackets, nesting +@cindex bracket types +@cindex brackets, enclosing vs. marking + +You have already met a number of different types of bracket and +bracket-like constructs in writing the input file to LilyPond. +These obey different rules which can be confusing at first. +Let's first review the different types of brackets and bracket-like +constructs. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Bracket Type + @tab Function +@item @code{@{ .. @}} + @tab Encloses a sequential segment of music +@item @code{< .. >} + @tab Encloses the notes of a chord +@item @code{<< .. >>} + @tab Encloses simultaneous music expressions +@item @code{( .. )} + @tab Marks the start and end of a slur +@item @code{\( .. \)} + @tab Marks the start and end of a phrasing slur +@item @code{[ .. ]} + @tab Marks the start and end of a manual beam +@end multitable + +To these we should add other constructs which generate lines +between or across notes: ties (marked by a tilde, @code{~}), +tuplets written as @code{\times x/y @{..@}}, and grace notes +written as @code{\grace@{..@}}. + +Outside LilyPond, the conventional use of brackets requires the +different types to be properly nested, like this, @code{<< [ @{ ( .. ) +@} ] >>}, with the closing brackets being encountered in exactly the +opposite order to the opening brackets. This @strong{is} a +requirement for the three types of bracket described by the word +@q{Encloses} in the table above -- they must nest properly. However, +the remaining bracket-like constructs, described with the word +@q{Marks} in the table above together with ties and tuplets, do +@strong{not} have to nest properly with any of the brackets or +bracket-like constructs. In fact, these are not brackets in +the sense that they enclose something -- they are simply markers to +indicate where something starts and ends. + +So, for example, a phrasing slur can start before a manually +inserted beam and end before the end of the beam -- not very +musical, perhaps, but possible: + +@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, +and those implied by tuplets, ties and grace notes, may be mixed +freely. This example shows a beam extending into a tuplet (line 1), +a slur extending into a tuplet (line 2), a beam and a slur +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,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 + + +@node Voices contain music +@section Voices contain music + +Singers need voices to sing, and so does LilyPond. +The actual music for all instruments in a score +is contained in Voices -- the most fundamental +of all LilyPond's concepts. + +@menu +* I'm hearing Voices:: +* Explicitly instantiating voices:: +* Voices and vocals:: +@end menu + +@node I'm hearing Voices +@subsection I'm hearing Voices + +@cindex polyphony +@cindex layers +@cindex multiple voices +@cindex voices, multiple +@cindex Voice context +@cindex context, Voice +@cindex simultaneous music +@cindex music, simultaneous +@cindex concurrent music +@cindex music, concurrent +@cindex voices vs. chords +@cindex chords vs. voices + +The lowest, most fundamental or innermost layers in a LilyPond +score are called @q{Voice contexts} or just @q{Voices} for short. +Voices are sometimes called @q{layers} in other notation +packages. + +In fact, a Voice layer or context is the only one which can contain +music. If a Voice context is not explicitly declared one is created +automatically, as we saw at the beginning of this chapter. Some +instruments such as an Oboe can play only one note at a time. Music +written for such instruments is monophonic and requires just a single +voice. Instruments which can play more than one note at a time like +the piano will often require multiple voices to encode the different +concurrent notes and rhythms they are capable of playing. + +A single voice can contain many notes in a chord, of course, +so when exactly are multiple voices needed? Look first at +this example of four chords: + +@lilypond[quote,verbatim,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +This can be expressed using just the single angle bracket chord +symbols, @code{< ... >}, and for this just a single voice is +needed. But suppose the F-sharp were actually an eighth-note +followed by an eighth-note G, a passing note on the way to the A? +Now we have two notes which start at the same time but have +different durations: the quarter-note D and the eighth-note +F-sharp. How are these to be coded? They cannot be written as +a chord because all the notes in a chord must have the same +duration. And they cannot be written as two sequential notes +as they need to start at the same time. This is when two +voices are required. + +Let us see how this is done in LilyPond input syntax. + +@funindex << \\ >> +@funindex \\ + +The easiest way to enter fragments with more than one voice on a +staff is to enter each voice as a sequence (with @code{@{...@}}), +and combine them simultaneously with angle brackets, @code{<<...>>}. +The fragments must also be separated with double backward slashes, +@code{\\}, to place them in separate voices. Without these, the +notes would be entered into a single voice, which would usually +cause errors. This technique is particularly suited to pieces of +music which are largely monophonic with occasional short sections +of polyphony. + +Here's how we split the chords above into two voices and add both +the passing note and a slur: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Notice how the stems of the second voice now point down. + +Here's another simple example: + +@lilypond[quote,verbatim,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | +<< { a2. r4 } \\ { fis2. s4 } >> | +@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 +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,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +@cindex voices, naming +@cindex voices crossing brackets +@cindex slurs crossing brackets +@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 +separators. + +The Voice contexts bear the names @code{"1"}, @code{"2"}, etc. +In each of these contexts, the vertical direction of slurs, +stems, ties, dynamics etc., is set appropriately. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> | + << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | +} +@end lilypond + +These voices are all separate from the main voice that contains +the notes just outside the @code{<< .. >>} construct. Let's call +this the @emph{simultaneous construct}. Slurs and ties may only +connect notes within the same voice, so slurs and ties cannot go +into or out of a simultaneous construct. Conversely, +parallel voices from separate simultaneous constructs on the same +staff are the same voice. Other voice-related properties also +carry across simultaneous constructs. Here is the same example, +with different colors and note heads for each voice. Note that +changes in one voice do not affect other voices, but they do +persist in the same voice later. Note also that tied notes may be +split across the same voices in two constructs, shown here in the +blue triangle voice. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +The commands @code{\voiceXXXStyle} are mainly intended for use in +educational documents such as this one. They modify the color +of the note head, the stem and the beams, and the style of the +note head, so that the voices may be easily distinguished. +Voice one is set to red diamonds, voice two to blue triangles, +voice three to green crossed circles, and voice four (not used +here) to magenta crosses; @code{\voiceNeutralStyle} (also not +used here) reverts the style back to the default. +We shall see later how commands like these may be created by the +user. +See @ref{Visibility and color of objects} and +@ref{Using variables for tweaks}. + +@cindex polyphony and relative note entry +@cindex relative note entry and polyphony + +Polyphony does not change the relationship of notes within a +@code{\relative} block. Each note is still calculated relative to +the note immediately preceding it, or to the first note of the +preceding chord. So in + +@example +\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} +@end example + +@noindent +@code{noteB} is relative to @code{noteA} @* +@code{noteC} is relative to @code{noteB}, not @code{noteA}; @* +@code{noteD} is relative to @code{noteB}, not @code{noteA} or +@code{noteC}; @* +@code{noteE} is relative to @code{noteD}, not @code{noteA}. + +An alternative way, which may be clearer if the notes in the +voices are widely separated, is to place a @code{\relative} +command at the start of each voice: + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +\\ + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +Let us finally analyze the voices in a more complex piece of music. +Here are the notes from the first two bars of the second of Chopin's +Deux Nocturnes, Op 32. This example will be used at later stages in +this and the next chapter to illustrate several techniques for +producing notation, so please ignore for now anything in the +underlying code which looks mysterious and concentrate just on the +music and the voices -- the complications will all be explained in +later sections. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +The direction of the stems is often used to indicate the continuity of +two simultaneous melodic lines. Here the stems of the highest notes +are all pointing up and the stems of the lower notes are all pointing +down. This is the first indication that more than one voice is +required. + +But the real need for multiple voices arises when notes +which start at the same time have different durations. +Look at the notes which start at beat three in the first +bar. The A-flat is a dotted quarter note, the F is a +quarter note and the D-flat is a half note. These +cannot be written as a chord as all the notes in a chord +must have the same duration. Neither can they be written +as sequential notes, as they must start at the same time. +This section of the bar requires three voices, and the +normal practice would be to write the whole bar as three +voices, as shown below, where we have used different note heads +and colors for the three voices. Again, the code behind this +example will be explained later, so ignore anything you do +not understand. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +Let us try to encode this music from scratch. As we +shall see, this encounters some difficulties. We begin as +we have learnt, using the @code{<< \\ >>} construct to +enter the music of the first bar in three voices: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des } + >> | + 1 | +} +@end lilypond + +@cindex stem down +@cindex voices and stem directions +@cindex stem directions and voices +@cindex stem up + +The stem directions are automatically assigned with the +odd-numbered voices taking upward stems and the even-numbered +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 +adding another pair of @code{\\}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des } + >> | + 1 | +} +@end lilypond + +@noindent +We see that this fixes the stem direction, but exposes a problem +sometimes encountered with multiple voices -- the stems of the notes +in one voice can collide with the note heads in other voices. In +laying out the notes, LilyPond allows the notes or chords from two +voices to occupy the same vertical note column provided the stems are +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 +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}. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + +@node Explicitly instantiating voices +@subsection Explicitly instantiating voices + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex voice contexts, creating + +Voice contexts can also be created manually +inside a @code{<< >>} block to create polyphonic music, using +@code{\voiceOne} ... @code{\voiceFour} to indicate the required +directions of stems, slurs, etc. In longer scores this method +is clearer, as it permits the voices to be separated and to be +given more descriptive names. + +Specifically, the construct @code{<< \\ >>} which we used in +the previous section: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +is equivalent to + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Both of the above would produce + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex voices, reverting to single +@cindex reverting to a single voice + +The @code{\voiceXXX} commands set the direction of stems, slurs, +ties, articulations, text annotations, augmentation dots of dotted +notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} +make these objects point upwards, while @code{\voiceTwo} and +@code{\voiceFour} make them point downwards. These commands also +generate a horizontal shift for each voice when this is required +to avoid clashes of note heads. The command @code{\oneVoice} +reverts the settings back to the normal values for a single voice. + +Let us see in some simple examples exactly what effect +@code{\oneVoice}, @code{\voiceOne} and @code{voiceTwo} have on +markup, ties, slurs, and dynamics: + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +Now let's look at three different ways to notate the same passage +of polyphonic music, each of which is advantageous in different +circumstances, using the example from the previous section. + +An expression that appears directly inside a @code{<< >>} belongs +to the main voice (but, note, @strong{not} in a @code{<< \\ >>} +construct). This is useful when extra voices appear while the +main voice is playing. Here is a more correct rendition of our +example. The red diamond-shaped notes +demonstrate that the main melody is now in a single voice context, +permitting a phrasing slur to be drawn over them. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b c2 | + } + >> +} +@end lilypond + +@cindex nesting music expressions +@cindex nesting simultaneous constructs +@cindex nesting voices +@cindex voices, temporary +@cindex voices, nesting + +More deeply nested polyphony constructs are possible, and if a +voice appears only briefly this might be a more natural way to +typeset the music: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ | + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b c2 | + } + >> + } + >> +} +@end lilypond + +@cindex spacing notes + +This method of nesting new voices briefly is useful +when only small sections of the music +are polyphonic, but when the whole staff is largely polyphonic +it can be clearer to use multiple voices throughout, using +spacing notes to step over sections where the voice is silent, +as here: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b c2 | + } +>> +@end lilypond + +@subsubheading Note columns + +@cindex note column +@cindex note collisions +@cindex collisions, notes +@cindex shift commands +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +Closely spaced notes in a chord, or notes occurring at the same +time in different voices, are arranged in two, occasionally more, +columns to prevent the note heads overlapping. These are called +note columns. There are separate columns for each voice, and +the currently specified voice-dependent shift is applied to the +note column if there would otherwise be a collision. This can +be seen in the example above. In bar 2 the C in voice two is +shifted to the right relative to the D in voice one, and in the +final chord the C in voice three is also shifted to the right +relative to the other notes. + +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 +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 right and voices two and four to the left. + +@code{\shiftOnn} and @code{\shiftOnnn} define further shift +levels which may be specified temporarily to resolve collisions +in complex situations -- see @ref{Real music example}. + +A note column can contain just one note (or chord) from a voice +with stems up and one note (or chord) from a voice with stems +down. If notes from two voices which have their stems in the +same direction are placed at the same position and both voices +have no shift or the same shift specified, the error message +@qq{Too many clashing note columns} will be produced. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + +@node Voices and vocals +@subsection Voices and vocals + +Vocal music presents a special difficulty: we need to combine two +expressions -- notes and lyrics. + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics context, creating +@cindex lyrics, linking to voice + +You have already seen the @code{\addlyrics@{@}} command, which +handles simple scores well. However, this technique is +quite limited. For more complex music, you must introduce the +lyrics in a @code{Lyrics} context using @code{\new Lyrics} and +explicitly link +the lyrics to the notes with @code{\lyricsto@{@}}, using the +name assigned to the Voice. + +@lilypond[quote,verbatim] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +Note that the lyrics must be linked to a @code{Voice} context, +@emph{not} a @code{Staff} context. This is a case where it is +necessary to create @code{Staff} and @code{Voice} contexts +explicitly. + +@cindex lyrics and beaming +@cindex beaming and lyrics +@funindex \autoBeamOff +@funindex autoBeamOff + +The automatic beaming which LilyPond uses by default works well +for instrumental music, but not so well for music with lyrics, +where beaming is either not required at all or is used to indicate +melismata in the lyrics. In the example above we use the command +@code{\autoBeamOff} to turn off the automatic beaming. + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode +@cindex vocal score structure +@cindex choir staff + +Let us reuse the earlier example from Judas Maccabæus to +illustrate this more flexible technique. We first recast +it to use variables so the music and lyrics can be separated +from the staff structure. We also introduce a ChoirStaff +bracket. The lyrics themselves must be introduced with +@code{\lyricmode} to ensure they are interpreted as lyrics +rather than music. + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +This is the basic structure of all vocal scores. More staves may be +added as required, more voices may be added to the staves, more verses +may be added to the lyrics, and the variables containing the music can +easily be placed in separate files should they become too long. + +@cindex hymn structure +@cindex SATB structure +@cindex vocal scores with multiple verses +@cindex multiple vocal verses +@cindex verses, multiple vocal + +Here is an example of the first line of a hymn with four +verses, set for SATB. In this case the words for all four +parts are the same. Note how we use variables to separate the +music notation and words from the staff structure. See too +how a variable, which we have chosen to call @q{keyTime}, is used +to hold several commands for use within the two staves. In other +examples this is often called @q{global}. + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@seealso +Notation Reference: @ruser{Vocal music}. + + +@node Contexts and engravers +@section Contexts and engravers + +Contexts and engravers have been mentioned informally +in earlier sections; we now must look at +these concepts in more detail, as they are important +in the fine-tuning of LilyPond output. + + +@menu +* Contexts explained:: +* Creating contexts:: +* Engravers explained:: +* Modifying context properties:: +* Adding and removing engravers:: +@end menu + +@node Contexts explained +@subsection Contexts explained + +@cindex contexts explained + +When music is printed, many notational elements which do not +appear explicitly in the input file must be added to the +output. For example, compare the input and output of the +following example: + +@lilypond[quote,verbatim,relative=2] +cis4 cis2. | a4 a2. | +@end lilypond + +The input is rather sparse, but in the output, bar lines, +accidentals, clef, and time signature have been added. When +LilyPond @emph{interprets} the input the musical information +is parsed from left to right, similar to the way a performer +reads the score. While reading the input, the program remembers +where measure boundaries are, and which pitches require explicit +accidentals. This information must be held on several levels. +For example, an accidental affects only a single staff, while +a bar line must be synchronized across the entire score. + +Within LilyPond, these rules and bits of information are grouped in +@emph{Contexts}. We have already introduced the @code{Voice} context. +Others are the @code{Staff} and @code{Score} contexts. Contexts are +hierarchical to reflect the hierarchical nature of a musical score. +For example: a @code{Staff} context can contain many @code{Voice} +contexts, and a @code{Score} context can contain many @code{Staff} +contexts. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Each context has the responsibility for enforcing some notation rules, +creating some notation objects and maintaining the associated +properties. For example, the @code{Voice} context may introduce an +accidental and then the @code{Staff} context maintains the rule to +show or suppress the accidental for the remainder of the measure. + +As another example, the synchronization of bar lines is, by default, +handled in the @code{Score} context. +However, in some music we may not want the bar lines to be +synchronized -- consider a polymetric score in 4/4 and 3/4 time. +In such cases, we must modify the default settings of the +@code{Score} and @code{Staff} contexts. + +For very simple scores, contexts are created implicitly, and you need +not be aware of them. For larger pieces, such as anything with more +than one staff, they must be +created explicitly to make sure that you get as many staves as you +need, and that they are in the correct order. For typesetting pieces +with specialized notation, it is usual to modify existing, or +even to define totally new, contexts. + +In addition to the @code{Score,} @code{Staff} and +@code{Voice} contexts there are contexts which fit between +the score and staff levels to control staff groups, such as the +@code{PianoStaff} and @code{ChoirStaff} contexts. There +are also alternative staff and voice contexts, and contexts for +lyrics, percussion, fret boards, figured bass, etc. + +The names of all context types are formed from one or more +words, each word being capitalized and joined immediately to the +preceding word with no hyphen or underscore, e.g., +@code{GregorianTranscriptionStaff}. + + +@seealso +Notation Reference: @ruser{Contexts explained}. + + +@node Creating contexts +@subsection Creating contexts + +@funindex \new +@funindex new +@cindex new contexts +@cindex creating contexts +@cindex contexts, creating + +In an input file a score block, introduced with a @code{\score} +command, contains a single music expression and an associated +output definition (either a @code{\layout} or a @code{\midi} block). +The @code{Score} context is usually left to be created automatically +when the interpretation of that music expression starts. + +For scores with only one voice and one staff, the @code{Voice} and +@code{Staff} contexts may also be left to be created automatically, +but for more complex scores it is necessary to create them by hand. +The simplest command that does this is @code{\new}. It is prepended +to a music expression, for example + +@example +\new @var{type} @var{music-expression} +@end example + +@noindent +where @var{type} is a context name (like @code{Staff} or +@code{Voice}). This command creates a new context, and starts +interpreting the @var{music-expression} within that context. + +@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 +to remind you how these commands are used in practice, here's an +annotated real-music example: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \clef "treble" + \key g \minor + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. | + d4 ees16 c8. | + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \clef "bass" + \key g \minor + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, | + g8 ees, | + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees | + g4 ees | + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Note how all the statements which open a block with either a +curly bracket, @code{@{}, or double angle brackets, @code{<<}, +are indented by two further spaces, and the corresponding +closing bracket is indented by exactly the same amount. While +this is not required, following this practice will greatly +reduce the number of @q{unmatched bracket} errors, and is +strongly recommended. It enables the structure of the music to +be seen at a glance, and any unmatched brackets will be obvious. +Note too how the LH staff is created using double angle brackets +because it requires two voices for its music, whereas the RH staff +is created with a single music expression surrounded by curly +brackets because it requires only one voice.) + +@cindex contexts, naming +@cindex naming contexts + +The @code{\new} command may also give an identifying name to the +context to distinguish it from other contexts of the same type, + +@example +\new @var{type} = @var{id} @var{music-expression} +@end example + +Note the distinction between the name of the context type, +@code{Staff}, @code{Voice}, etc, and the identifying name of a +particular instance of that type, which can be any sequence of letters +invented by the user. Digits and spaces can also be used in the +identifying name, but then it has to be placed in quotes, +i.e. @code{\new Staff = "MyStaff 1" @var{music-expression}}. +The identifying name is used to +refer back to that particular instance of a context. We saw this in +use in the section on lyrics, see @ref{Voices and vocals}. + + +@seealso +Notation Reference: @ruser{Creating contexts}. + + +@node Engravers explained +@subsection Engravers explained + +@cindex engravers + +Every mark on the printed output of a score produced by LilyPond +is produced by an @code{Engraver}. Thus there is an engraver +to print staves, one to print note heads, one for stems, one for +beams, etc, etc. In total there are over 120 such engravers! +Fortunately, for most scores it is not necessary to know about +more than a few, and for simple scores you do not need to know +about any. + +Engravers live and operate in Contexts. Engravers such as the +@code{Metronome_mark_engraver}, whose action and output apply to the +score as a whole, operate in the highest level context -- the +@code{Score} context. + +The @code{Clef_engraver} and @code{Key_engraver} are to be +found in every @code{Staff} Context, as different staves may require +different clefs and keys. + +The @code{Note_heads_engraver} and @code{Stem_engraver} live +in every @code{Voice} context, the lowest level context of all. + +Each engraver processes the particular objects associated +with its function, and maintains the properties that relate +to that function. These properties, like the properties +associated with contexts, may be modified to change the +operation of the engraver or the appearance of those elements +in the printed score. + +Engravers all have compound names formed from words which +describe their function. Just the first word is capitalized, +and the remainder are joined to it with underscores. Thus +the @code{Staff_symbol_engraver} is responsible for creating the +lines of the staff, the @code{Clef_engraver} determines and sets +the pitch reference point on the staff by drawing a clef symbol. + +Here are some of the most common engravers together with their +function. You will see it is usually easy to guess the function +from the name, or vice versa. + +@multitable @columnfractions .3 .7 +@headitem Engraver + @tab Function +@item Accidental_engraver + @tab Makes accidentals, cautionary and suggested accidentals +@item Beam_engraver + @tab Engraves beams +@item Clef_engraver + @tab Engraves clefs +@item Completion_heads_engraver + @tab Splits notes which cross bar lines +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Creates hairpins and dynamic texts +@item Forbid_line_break_engraver + @tab Prevents line breaks if a musical element is still active +@item Key_engraver + @tab Creates the key signature +@item Metronome_mark_engraver + @tab Engraves metronome marking +@item Note_heads_engraver + @tab Engraves note heads +@item Rest_engraver + @tab Engraves rests +@item Staff_symbol_engraver + @tab Engraves the five (by default) lines of the staff +@item Stem_engraver + @tab Creates stems and single-stem tremolos +@item Time_signature_engraver + @tab Creates time signatures +@end multitable + +@smallspace + +We shall see later how the output of LilyPond can be changed +by modifying the action of Engravers. + + +@seealso +Internals reference: @rinternals{Engravers and Performers}. + + +@node Modifying context properties +@subsection Modifying context properties + +@cindex context properties +@cindex context properties, modifying +@cindex modifying context properties +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +Contexts are responsible for holding the values of a number of +context @emph{properties}. Many of them can be changed to +influence the interpretation of the input and so change the +appearance of the output. They are changed by the +@code{\set} command. This takes the form + +@example +\set @emph{ContextName}.@emph{propertyName} = #@emph{value} +@end example + +Where the @emph{ContextName} is usually @code{Score}, +@code{Staff} or @code{Voice}. It may be omitted, +in which case the current context (typically @code{Voice}) is assumed. + +The names of context properties consist of words joined +together with no hyphens or underscores, all except the +first having a capital letter. Here are a few examples +of some commonly used ones. There are many more. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem propertyName + @tab Type + @tab Function + @tab Example Value +@item extraNatural + @tab Boolean + @tab If true, set extra natural signs before accidentals + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Integer + @tab Set the current bar number + @tab @code{50} +@item doubleSlurs + @tab Boolean + @tab If true, print slurs both above and below notes + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Text + @tab Set the name to be placed at the start of the staff + @tab @code{"Cello I"} +@item fontSize + @tab Real + @tab Increase or decrease the font size + @tab @code{2.4} +@item stanza + @tab Text + @tab Set the text to print before the start of a verse + @tab @code{"2"} +@end multitable + +@noindent +where a Boolean is either True (@code{#t}) or False (@code{#f}), +an Integer is a positive whole number, a Real is a positive +or negative decimal number, and text is enclosed in double +apostrophes. Note the occurrence of hash signs, +(@code{#}), in two different places -- as part of the Boolean +value before the @code{t} or @code{f}, and before @emph{value} +in the @code{\set} statement. So when a Boolean is being +entered you need to code two hash signs, e.g., @code{##t}. + +@cindex properties operating in contexts +@cindex setting properties within contexts + +Before we can set any of these properties we need to know +in which context they operate. Sometimes this is obvious, +but occasionally it can be tricky. If the wrong context +is specified, no error message is produced, but the expected +action will not take place. For example, the +@code{instrumentName} clearly lives in the @code{Staff} context, since +it is the staff that is to be named. +In this example the first staff is labelled, but not the second, +because we omitted the context name. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c2 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d2 d + } +>> +@end lilypond + +Remember the default context name is @code{Voice}, so the second +@code{\set} command set the property @code{instrumentName} in the +@code{Voice} context to @qq{Alto}, but as LilyPond does not look +for any such property in the @code{Voice} context, no +further action took place. This is not an error, and no error +message is logged in the log file. + +Similarly, if the property name is mis-spelt no error message is +produced, and clearly the expected action cannot be performed. In +fact, you can set any (fictitious) @q{property} using any name you +like in any context that exists by using the @code{\set} command. But +if the name is not known to LilyPond it will not cause any action to +be taken. Some text editors with special support for LilyPond input +files document property names with bullets when you hover them with +the mouse, like JEdit with LilyPondTool, or highlight unknown property +names differently, like ConTEXT. If you do not use an editor with +such features, it is recommended to check the property name in the +Internals Reference: see @rinternals{Tunable context properties}, or +@rinternals{Contexts}. + +The @code{instrumentName} property will take effect only +if it is set in the @code{Staff} context, but +some properties can be set in more than one context. +For example, the property @code{extraNatural} is by +default set to ##t (true) for all staves. +If it is set to ##f (false) in one particular @code{Staff} +context it applies just to the accidentals on that staff. +If it is set to false in the @code{Score} context +it applies to all staves. + +So this turns off extra naturals in one staff: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +and this turns them off in all staves: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +As another example, if @code{clefOctavation} is set in +the @code{Score} context this immediately changes the value +of the octavation in all current staves and sets a new default +value which will be applied to all staves. + +The opposite command, @code{\unset}, effectively removes the +property from the context, which causes most properties to +revert to their default value. Usually @code{\unset} is not +required as a new @code{\set} command will achieve what is +wanted. + +The @code{\set} and @code{\unset} commands can appear anywhere +in the input file and will take effect from the time they are +encountered until the end of the score or until the property is +@code{\set} or @code{\unset} again. Let's try changing the +font size, which affects the size of the note heads (among +other things) several times. The change is from the default +value, not the most recently set value. + +@lilypond[quote,verbatim,ragged-right,relative=1] +c4 d +% make note heads smaller +\set fontSize = #-4 +e4 f | +% make note heads larger +\set fontSize = #2.5 +g4 a +% return to default size +\unset fontSize +b4 c | +@end lilypond + +We have now seen how to set the values of several different types of +property. Note that integers and numbers are always preceded by a +hash sign, @code{#}, while a true or false value is specified by +@code{##t} and @code{##f}, with two hash signs. A text property +should be enclosed in double quotation signs, as above, although we +shall see later that text can actually be specified in a much more +general way by using the very powerful @code{\markup} command. + +@subsubheading Setting context properties with @code{\with} + +@funindex \with +@funindex with +@cindex context properties, setting with \with + +The default value of context properties may be set at the time the +context is created. Sometimes this is a clearer way of setting a +property value if it is to remain fixed for the duration of +the context. When a context is created with a @code{\new} +command it may be followed immediately by a @code{\with @{ .. @}} +block in which the default property values are set. For example, +if we wish to suppress the printing of extra naturals for the +duration of a staff we would write: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +like this: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + gis4 ges aes ais + } + } + \new Staff \with { extraNatural = ##f } { + \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}. + +@cindex fontSize, default and setting + +So if the @code{fontSize} property is set in a @code{\with} clause +it sets the default value of the font size. If it is later changed +with @code{\set}, this new default value may be restored with the +@code{\unset fontSize} command. + +@subsubheading Setting context properties with @code{\context} + +@cindex context properties, setting with \context +@funindex \context +@funindex context + +The values of context properties may be set in @emph{all} contexts +of a particular type, such as all @code{Staff} contexts, with a single +command. The context type is identified by using its +type name, like @code{Staff}, prefixed by a back-slash: @code{\Staff}. +The statement which sets the property value is the same as that in a +@code{\with} block, introduced above. It is placed in a +@code{\context} block within a @code{\layout} block. Each +@code{\context} block will affect all contexts of the type specified +throughout the @code{\score} or @code{\book} block in which the +@code{\layout} block appears. Here is a example to show the format: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@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} commands embedded in music statements. + + +@seealso +Notation Reference: +@ruser{Changing context default settings}. +@ruser{The set command}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Adding and removing engravers +@subsection Adding and removing engravers + +@cindex engravers, adding +@cindex adding engravers +@cindex engravers, removing +@cindex removing engravers + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +We have seen that contexts each contain several engravers, each +of which is responsible for producing a particular part of the +output, like bar lines, staves, note heads, stems, etc. If an +engraver is removed from a context, it can no longer produce its +output. This is a crude way of modifying the output, but it +can sometimes be useful. + +@subsubheading Changing a single context + +To remove an engraver from a single context we use the +@code{\with} command placed immediately after the context creation +command, as in the previous section. + +As an illustration, let's repeat an example from the previous section +with the staff lines removed. Remember that the staff lines are +produced by the @code{Staff_symbol_engraver}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % make note heads smaller + e4 f | + \set fontSize = #2.5 % make note heads larger + g4 a + \unset fontSize % return to default size + b4 c | +} +@end lilypond + +@cindex ambitus engraver + +Engravers can also be added to individual contexts. +The command to do this is + +@code{\consists @var{Engraver_name}}, + +@noindent +placed inside a @code{\with} block. Some vocal scores have an ambitus +placed at the beginning of a staff to indicate the range of notes in +that staff -- see @rglos{ambitus}. The ambitus is produced by the +@code{Ambitus_engraver}, which is not normally included in any +context. If we add it to the @code{Voice} context, it calculates the +range from that voice only: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +but if we add the ambitus engraver to the +@code{Staff} context, it calculates the range from all +the notes in all the voices on that staff: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@subsubheading Changing all contexts of the same type + +@funindex \layout +@funindex layout + +The examples above show how to remove or add engravers to +individual contexts. It is also possible to remove or add +engravers to every context of a specific type by placing the +commands in the appropriate context in a @code{\layout} +block. For example, if we wanted to show an ambitus for every +staff in a four-staff score, we could write + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +The values of context properties may also be set +for all contexts of a particular type by including the +@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 + +You've read the tutorial, you know how to write music, you +understand the fundamental concepts. But how can you +get the staves that you want? Well, you can find lots of +templates (see @ref{Templates}) which may give you a start. +But what if you want something that isn't covered there? Read on. + +@menu +* Soprano and cello:: +* Four-part SATB vocal score:: +* Building a score from scratch:: +* Saving typing with variables and functions:: +* Scores and parts:: +@end menu + +@node Soprano and cello +@subsection Soprano and cello + +@cindex template, modifying +@cindex modifying templates + +Start off with the template that seems closest to what you want to +end up with. Let's say that you want to write something for +soprano and cello. In this case, we would start with the +@q{Notes and lyrics} template (for the soprano part). + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +text = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melody + @} + \new Lyrics \lyricsto "one" \text + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Now we want to add a cello part. Let's look at the @q{Notes only} example: + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melody + \layout @{ @} + \midi @{ @} +@} +@end example + +We don't need two @code{\version} commands. We'll need the +@code{melody} section. We don't want two @code{\score} sections +-- if we had two @code{\score}s, we'd get the two parts separately. +We want them together, as a duet. Within the @code{\score} +section, we don't need two @code{\layout} or @code{\midi}. + +If we simply cut and paste the @code{melody} section, we would +end up with two @code{melody} definitions. This would not generate +an error, but the second one would be used for both melodies. +So let's rename them to make them distinct. We'll call the +section for the soprano @code{sopranoMusic} and the section for +the cello @code{celloMusic}. While we're doing this, let's rename +@code{text} to be @code{sopranoLyrics}. Remember to rename both +instances of all these names -- both the initial definition (the +@code{melody = \relative c' @{ } part) and the name's use (in the +@code{\score} section). + +While we're doing this, let's change the cello part's staff -- +celli normally use bass clef. We'll also give the cello some +different notes. + +@example +\version @w{"@version{}"} + +sopranoMusic = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +sopranoLyrics = \lyricmode @{ + Aaa Bee Cee Dee +@} + +celloMusic = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +This is looking promising, but the cello part won't appear in the +score -- we haven't used it in the @code{\score} section. If we +want the cello part to appear under the soprano part, we need to add + +@example +\new Staff \celloMusic +@end example + +@noindent +underneath the soprano stuff. We also need to add @code{<<} and +@code{>>} around the music -- that tells LilyPond that there's +more than one thing (in this case, two @code{Staves}) happening +at once. The @code{\score} looks like this now: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +This looks a bit messy; the indentation is messed up now. That is +easily fixed. Here's the complete soprano and cello template. + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +The starting templates can be found in the @q{Templates} appendix, +see @ref{Single staff}. + + +@node Four-part SATB vocal score +@subsection Four-part SATB vocal score + +@cindex template, SATB +@cindex SATB template + +Most vocal scores of music written for four-part mixed choir +with orchestral accompaniment such as Mendelssohn's Elijah or +Handel's Messiah have the choral music and words on four +staves, one for each of SATB, with a piano reduction of the +orchestral accompaniment underneath. Here's an example +from Handel's Messiah: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} + +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords + +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords + +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords + +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} + +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@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 +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. + +The order in which the contexts appear in the ChoirStaff of the +template do not correspond with the order in the vocal score shown +above. We need to rearrange them so there are four staves with the +words written directly underneath the notes for each part. All the +voices should be @code{\voiceOne}, which is the default, so the +@code{\voiceXXX} commands should be removed. We also need to specify +the tenor clef for the tenors. The way in which lyrics are specified +in the template has not yet been encountered so we need to use the +method with which we are familiar. We should also add the names of +each staff. + +Doing this gives for our ChoirStaff: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} +>> % end ChoirStaff +@end example + +Next we must work out the piano part. This is +easy - we just pull out the piano part from the +@q{Solo piano} template: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower +>> +@end example + +and add the variable definitions for @code{upper} +and @code{lower}. + +The ChoirStaff and PianoStaff must be combined +using angle brackets as we want them to be +stacked one above the other: + +@example +<< % combine ChoirStaff and PianoStaff one above the other + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Combining all these together and adding the music +for the three bars of the example above gives: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Building a score from scratch +@subsection Building a score from scratch + +@cindex template, writing your own +@cindex example of writing a score +@cindex writing a score, example +@cindex score, example of writing + +After gaining some facility with writing LilyPond code, you +may find that it is easier to build a score from scratch +rather than modifying one of the templates. You can also +develop your own style this way to suit the sort of music you +like. Let's see how to put together the score for an organ +prelude as an example. + +We begin with a header section. Here go the title, name +of composer, etc, then come any variable definitions, and +finally the score block. Let's start with these in outline +and fill in the details later. + +We'll use the first two bars of Bach's prelude +based on @emph{Jesu, meine Freude} which is written for two +manuals and pedal organ. You can see these two bars of music +at the bottom of this section. The top manual part has two voices, +the lower and pedal organ one each. So we need four +music definitions and one to define the time signature +and key: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +keyTime = @{ \key c \minor \time 4/4 @} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +For now we've just used a spacer note, @code{s1}, +instead of the real music. We'll add that later. + +Next let's see what should go in the score block. +We simply mirror the staff structure we want. +Organ music is usually written on three staves, +one for each manual and one for the pedals. The +manual staves should be bracketed together, so we +need to use a PianoStaff for them. The first +manual part needs two voices and the second manual +part just one. + +@example +\new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context +>> % end PianoStaff context +@end example + +Next we need to add a staff for the pedal organ. +This goes underneath the PianoStaff, but it must +be simultaneous with it, so we need angle brackets +around the two. Missing these out would generate +an error in the log file. It's a common mistake +which you'll make sooner or later! Try copying +the final example at the end of this section, +remove these angle brackets, and compile it to +see what errors it generates. + +@example +<< % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +It is not necessary to use the simultaneous construct +@code{<< .. >>} for the manual two staff and the pedal organ staff, +since they contain only one music expression, but it does no harm, +and always using angle brackets after @code{\new Staff} is a good +habit to cultivate in case there are multiple voices. The opposite +is true for Voices: these should habitually be followed by braces +@code{@{ .. @}} in case your music is coded in several variables +which need to run consecutively. + +Let's add this structure to the score block, and adjust the indenting. +We also add the appropriate clefs, ensure stems, ties and slurs in +each voice on the upper staff point to the right direction with +@code{\voiceOne} and @code{\voiceTwo}, and enter the key and time +signature to each staff using our predefined variable, @code{\keyTime}. + +@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" << + \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 + +@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 +is to add the music, and combine all the parts together. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\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 context + >> +} % end Score context +@end lilypond + +@seealso +Music Glossary: +@rglos{system}. + +@node Saving typing with variables and functions +@subsection Saving typing with variables and functions + +@cindex variables +@cindex variables + +By this point, you've seen this kind of thing: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } + +\score { + { + \hornNotes + } +} +@end lilypond + +You may even realize that this could be useful in minimalist music: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } + +violin = \new Staff { + \fragmentA \fragmentA | + \fragmentB \fragmentA | +} + +\score { + { + \violin + } +} +@end lilypond + +However, you can also use these variables (also known as +macros, or user-defined commands) for tweaks: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } + +padText = { \once \override TextScript #'padding = #5.0 } +fthenp =_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b | + \padText + c4.^"hi there!" d8 e' f g d | + c,4.\fthenp b8 c4 c-. | + } +} + +\score { + { + \violin + } + \layout { ragged-right = ##t } +} +@end lilypond + +These variables are obviously useful for saving +typing. But they're worth considering even if you +only use them once -- they reduce complexity. Let's +look at the previous example without any +variables. It's a lot harder to read, especially +the last line. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d | + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +So far we've seen static substitution -- when LilyPond +sees @code{\padText}, it replaces it with the stuff that +we've defined it to be (ie the stuff to the right of +@code{padtext=}). + +LilyPond can handle non-static substitution, too (you +can think of these as functions). + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +Using variables is also a good way to reduce work if the +LilyPond input syntax changes (see +@rprogram{Updating files with convert-ly}). If +you have a single definition (such as @code{\dolce}) for all your +input files (see @ref{Style sheets}), then if the syntax changes, you +only need to update your single @code{\dolce} definition, +instead of making changes throughout every @file{.ly} file. + + +@node Scores and parts +@subsection Scores and parts + +In orchestral music, all notes are printed twice. Once in a part for +the musicians, and once in a full score for the conductor. Variables can +be used to avoid double work. The music is entered once, and stored in +a variable. The contents of that variable is then used to generate +both the part and the full score. + +It is convenient to define the notes in a special file. For example, +suppose that the file @file{horn-music.ly} contains the following part +of a horn/@/bassoon duo + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e4 d | +@} +@end example + +@noindent +Then, an individual part is made by putting the following in a file + +@example +\include "horn-music.ly" + +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +The line + +@example +\include "horn-music.ly" +@end example + +@noindent +substitutes the contents of @file{horn-music.ly} at this position in +the file, so @code{hornNotes} is defined afterwards. The command +@code{\transpose f@tie{}c'} indicates that the argument, being +@code{\hornNotes}, should be transposed by a fifth upwards. Sounding +@code{f} is denoted by notated @code{c'}, which corresponds with the +tuning of a normal French Horn in@tie{}F. The transposition can be seen +in the following output + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +In ensemble pieces, one of the voices often does not play for many +measures. This is denoted by a special rest, the multi-measure +rest. It is entered with a capital @code{R} followed by a duration +(@code{1}@tie{}for a whole note, @code{2}@tie{}for a half note, +etc.). By multiplying the +duration, longer rests can be constructed. For example, this rest +takes 3@tie{}measures in 2/4 time + +@example +R2*3 +@end example + +When printing the part, multi-rests +must be condensed. This is done by setting a run-time variable + +@example +\set Score.skipBars = ##t +@end example + +@noindent +This command sets the property @code{skipBars} in the +@code{Score} context to true (@code{##t}). Prepending the rest and +this option to the music above, leads to the following result + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + + +The score is made by combining all of the music together. Assuming +that the other voice is in @code{bassoonNotes} in the file +@file{bassoon-music.ly}, a score is made with + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +leading to + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond + + + diff --git a/Documentation/learning/preface.itely b/Documentation/learning/preface.itely new file mode 100644 index 0000000000..0cdf383d91 --- /dev/null +++ b/Documentation/learning/preface.itely @@ -0,0 +1,60 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Preface +@unnumbered Preface + + +It must have been during a rehearsal of the EJE (Eindhoven Youth +Orchestra), somewhere in 1995 that Jan, one of the cranked violists, +told Han-Wen, one of the distorted French horn players, about the +grand new project he was working on. It was an automated system for +printing music (to be precise, it was MPP, a preprocessor for +MusiXTeX). As it happened, Han-Wen accidentally wanted to print out +some parts from a score, so he started looking at the software, and he +quickly got hooked. It was decided that MPP was a dead end. After +lots of philosophizing and heated email exchanges, Han-Wen started +LilyPond in 1996. This time, Jan got sucked into Han-Wen's new +project. + +In some ways, developing a computer program is like learning to play +an instrument. In the beginning, discovering how it works is fun, and +the things you cannot do are challenging. After the initial excitement, +you have to practice and practice. Scales and studies can be dull, and +if you are not motivated by others -- teachers, conductors or +audience -- it is very tempting to give up. You continue, and gradually +playing becomes a part of your life. Some days it comes naturally, and +it is wonderful, and on some days it just does not work, but you keep +playing, day after day. + +Like making music, working on LilyPond can be dull work, and on +some days it feels like plodding through a morass of bugs. +Nevertheless, it has become a part of our life, and we keep doing it. +Probably the most important motivation is that our program actually +does something useful for people. When we browse around the net we +find many people who use LilyPond, and produce impressive pieces of +sheet music. Seeing that feels unreal, but in a very pleasant way. + +Our users not only give us good vibes by using our program, many of +them also help us by giving suggestions and sending bug reports, so we +would like to thank all users that sent us bug reports, gave +suggestions or contributed in any other way to LilyPond. + +Playing and printing music is more than a nice analogy. Programming +together is a lot of fun, and helping people is deeply satisfying, but +ultimately, working on LilyPond is a way to express our deep love for +music. May it help you create lots of beautiful music! + +Han-Wen and Jan + +Utrecht/Eindhoven, The Netherlands, July 2002. + diff --git a/Documentation/learning/templates.itely b/Documentation/learning/templates.itely new file mode 100644 index 0000000000..e9fc0f21e6 --- /dev/null +++ b/Documentation/learning/templates.itely @@ -0,0 +1,236 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Templates +@appendix Templates + +This section of the manual contains templates with the LilyPond score +already set up for you. Just add notes, run LilyPond, and enjoy +beautiful printed scores! + +@c bad node name for ancient notation to avoid conflict +@menu +* Single staff:: +* Piano templates:: +* String quartet:: +* Vocal ensembles:: +* Orchestral templates:: +* Ancient notation templates:: +* Other templates:: +@end menu + + +@node Single staff +@appendixsec Single staff + +@appendixsubsec Notes only + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-only-notes.ly} + + +@appendixsubsec Notes and lyrics + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] +{single-staff-template-with-notes-and-lyrics.ly} + +@appendixsubsec Notes and chords + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes-and-chords.ly} + +@appendixsubsec Notes, lyrics, and chords. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{single-staff-template-with-notes,-lyrics,-and-chords.ly} + + +@node Piano templates +@appendixsec Piano templates + +@appendixsubsec Solo piano + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-simple.ly} + +@appendixsubsec Piano and melody with lyrics + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-melody-and-lyrics.ly} + +@appendixsubsec Piano centered lyrics + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-lyrics.ly} + +@appendixsubsec Piano centered dynamics + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{piano-template-with-centered-dynamics.ly} + + +@node String quartet +@appendixsec String quartet + +@appendixsubsec String quartet + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-simple.ly} + +@appendixsubsec String quartet parts + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{string-quartet-template-with-separate-parts.ly} + + +@node Vocal ensembles +@appendixsec Vocal ensembles + +@appendixsubsec SATB vocal score + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template.ly} + +@appendixsubsec SATB vocal score and automatic piano reduction + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-automatic-piano-reduction.ly} + +@appendixsubsec SATB with aligned contexts + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} + +@appendixsubsec SATB on four staves + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{satb-choir-template---four-staves.ly} + +@appendixsubsec Solo verse and two-part refrain + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{vocal-ensemble-template-with-verse-and-refrain.ly} + +@appendixsubsec Hymn tunes + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{hymn-template.ly} + +@appendixsubsec Psalms + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{anglican-psalm-template.ly} + + +@node Orchestral templates +@appendixsec Orchestral templates + +@appendixsubsec Orchestra, choir and piano +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{orchestra,-choir-and-piano-template.ly} + + +@c bad node name to avoid node name conflict +@node Ancient notation templates +@appendixsec Ancient notation templates + +@appendixsubsec Transcription of mensural music + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-mensural-music.ly} + +@appendixsubsec Gregorian transcription template + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + + +@node Other templates +@appendixsec Other templates + +@appendixsubsec Jazz combo + +@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 + + + diff --git a/Documentation/learning/tutorial.itely b/Documentation/learning/tutorial.itely new file mode 100644 index 0000000000..6752a3bc40 --- /dev/null +++ b/Documentation/learning/tutorial.itely @@ -0,0 +1,766 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@include included/generating-output.itexi + +@c \version "2.14.0" + +@node Tutorial +@chapter Tutorial + +This chapter gives a basic introduction to working with LilyPond. + +@menu +* Compiling a file:: +* How to write input files:: +* Dealing with errors:: +* How to read the manuals:: +@end menu + +@node Compiling a file +@section Compiling a file + +This section introduces @qq{compiling}---the processing of +LilyPond input files (written by you) to produce output files. + +@menu +* Entering input:: +* MacOS X:: +* Windows:: +* Command-line:: +@end menu + +@node Entering input +@subsection Entering input + +@cindex compiling +@cindex first example +@cindex example, first +@cindex case sensitive + +@qq{Compiling} is the term used for processing an input file in +LilyPond format to produce output file(s). Output files are +generally PDF (for printing or viewing), MIDI (for playing), and +PNG (for online use). LilyPond input files are simple text files. + +This example shows a simple input file: + +@example +\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + +The graphical output is: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@warning{Notes and lyrics in LilyPond input must always be +surrounded by @w{@strong{@{ curly braces @}}}. The braces +should also be surrounded by a space unless they are at the +beginning or end of a line to avoid ambiguities. They may +be omitted in some examples in this manual, but don't forget them +in your own music! For more information about the display of +examples in the manual, see @ref{How to read the manuals}.} + +In addition, LilyPond input is @strong{case sensitive}. +@w{@samp{@{ c d e @}}} is valid input; @w{@samp{@{ C D E @}}} will +produce an error message. + + +@smallspace + +@subheading Producing output + +@cindex PDF file +@cindex viewing music +@cindex text editors + +The method of producing output depends on your operating system +and the program(s) you use. + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (graphical) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (graphical) + +@item +@ref{Command-line, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Command-line, All operating systems} (command-line) + +@end itemize + +There are several other text editors available with specific +support for LilyPond. For more information, see +@rweb{Easier editing}. + +@warning{The first time you ever run LilyPond, it may take a +minute or two because all of the system fonts have to be analyzed +first. After this, LilyPond will be much faster!} + + +@node MacOS X +@subsection MacOS X + +@cindex running LilyPond under MacOS X +@cindex MacOS X, running LilyPond + +@lilypadOSX + + +@node Windows +@subsection Windows + +@cindex running LilyPond under Windows +@cindex Windows, running LilyPond + +@lilypadWindows + + +@node Command-line +@subsection Command-line + +@cindex running LilyPond under Unix +@cindex Unix, running LilyPond + +@lilypadCommandLine + +@node How to write input files +@section How to write input files + +This section introduces some basic LilyPond syntax to help get you +started writing input files. + +@menu +* Simple notation:: +* Working on input files:: +@end menu + + +@node Simple notation +@subsection Simple notation + +@cindex simple notation +@cindex notation, simple + +LilyPond will add some notation elements automatically. In the +next example, we have only specified four pitches, but LilyPond +has added a clef, time signature, and rhythms. + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +This behavior may be altered, but in most cases these automatic +values are useful. + + +@subheading Pitches + +@cindex pitches +@cindex relative mode +@cindex quote, single +@cindex comma +@cindex accidentals and relative mode +@cindex relative mode, and accidentals + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +Music Glossary: @rglos{pitch}, @rglos{interval}, +@rglos{scale}, @rglos{middle C}, @rglos{octave}, +@rglos{accidental}. + +The easiest way to enter notes is by using @code{\relative} mode. +In this mode, the octave is chosen automatically by assuming the +following note is always to be placed closest to the previous +note, i.e., it is to be placed in the octave which is within three +staff spaces of the previous note. We begin by entering the most +elementary piece of music, a @notation{scale}, in which every note +is within just one staff space of the previous note. + +@lilypond[verbatim,quote] +% set the starting point to middle C +\relative c' { + c d e f + g a b c +} +@end lilypond + +The initial note is @notation{middle C}. Each successive note is +placed closest to the previous note -- in other words, the first +@code{c} is the closest C to middle C. This is followed by the +closest D to the previous note. We can create melodies which have +larger intervals, still using only @code{\relative} mode: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +It is not necessary for the first note of the melody to start on +the note which specifies the starting pitch. In the previous +example, the first note -- the @code{d} -- is the closest D to +middle C. + +By adding (or removing) quotes @code{'} or commas @code{,} from +the @q{@w{@code{@bs{}relative c'}}} command, we can change the +starting octave: + +@lilypond[verbatim,quote] +% one octave above middle C +\relative c'' { + e c a c +} +@end lilypond + +Relative mode can be confusing initially, but is the easiest way +to enter most melodies. Let us see how this relative calculation +works in practice. Starting from a B, which is on the middle line +in a treble clef, you can reach a C, D and E within 3 staff spaces +going up, and an A, G and F within 3 staff spaces going down. So +if the note following a B is a C, D or E it will be assumed to be +above the B, and an A, G or F will be assumed to be below. + +@lilypond[verbatim,quote] +\relative c'' { + b c % c is 1 staff space up, so is the c above + b d % d is 2 up or 5 down, so is the d above + b e % e is 3 up or 4 down, so is the e above + b a % a is 6 up or 1 down, so is the a below + b g % g is 5 up or 2 down, so is the g below + b f % f is 4 up or 3 down, so is the f below +} +@end lilypond + +Exactly the same happens even when any of these notes are +sharpened or flattened. @notation{Accidentals} are +@strong{totally ignored} in the calculation of relative position. +Precisely the same staff space counting is done from a note at any +other position on the staff. + +To add intervals that are larger than three staff spaces, we can +raise the @notation{octave} by adding a single quote @code{'} (or +apostrophe) to the note name. We can lower the octave by adding a +comma @code{,} to the note name. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +To change a note by two (or more!) octaves, we use multiple +@code{''} or @code{,,} -- but be careful that you use two single +quotes @code{''} and not one double quote @code{"}@tie{}! +@c " - keeps quotes in order for context-sensitive editor -td + +@subheading Durations (rhythms) + +@cindex note durations +@cindex durations +@cindex rhythms +@cindex whole note +@cindex half note +@cindex quarter note +@cindex dotted note +@cindex notating durations + +Music Glossary: @rglos{beam}, @rglos{duration}, +@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, +@rglos{dotted note}. + +The @notation{duration} of a note is specified by a number after +the note name: @code{1} for a @notation{whole note}, @code{2} for +a @notation{half note}, @code{4} for a @notation{quarter note} and +so on. @notation{Beams} are added automatically. + +If you do not specify a duration, the previous duration is used +for the next note. The duration of the first note defaults to a +quarter note. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +To create @notation{dotted notes}, add a dot @code{.} to the +duration number. The duration of a dotted note must be stated +explicitly (i.e., with a number). + +@lilypond[verbatim,quote] +\relative c'' { + a4 a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Rests + +@cindex rest +@cindex notating rests + +Music Glossary: @rglos{rest}. + +A @notation{rest} is entered just like a note with the name +@code{r}@tie{}: + +@lilypond[verbatim,quote] +\relative c'' { + a4 r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Time signature + +@cindex time signature + +@funindex \time +@funindex time + +Music Glossary: @rglos{time signature}. + +The @notation{time signature} can be set with the @code{\time} +command: + +@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 marks + +@cindex tempo marks +@cindex metronome marks + +@funindex \tempo +@funindex tempo + +Music Glossary: @rglos{tempo indication}, @rglos{metronome}. + +The @notation{tempo indication} and @notation{metronome mark} can be +set with the @code{\tempo} command: + +@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 + + +@subheading Clef + +@cindex clef +@cindex treble +@cindex alto +@cindex tenor +@cindex bass + +@funindex \clef +@funindex clef + +Music Glossary: @rglos{clef}. + +The @notation{clef} can be set using the @code{\clef} command: + +@lilypond[verbatim,quote] +\relative c' { + \clef "treble" + c1 + \clef "alto" + c1 + \clef "tenor" + c1 + \clef "bass" + c1 +} +@end lilypond + + +@subheading All together + +Here is a small example showing all these elements together: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + \tempo "Andante" 4 = 120 + c2 e8 c' + g'2. + f4 e d + c4 c, r +} +@end lilypond + + +@seealso +Notation Reference: @ruser{Writing pitches}, +@ruser{Writing rhythms}, @ruser{Writing rests}, +@ruser{Time signature}, @ruser{Clef}. + + +@node Working on input files +@subsection Working on input files + +@cindex curly braces +@cindex braces, curly +@cindex comments +@cindex line comment +@cindex comment, line +@cindex block comment +@cindex comment, line +@cindex case sensitive +@cindex whitespace insensitive +@cindex expressions +@cindex versioning +@cindex version +@cindex version number + +@funindex \version +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + +LilyPond input files are similar to source files in many common +programming languages. They contain a version statement, are case +sensitive, and white-space is generally ignored. Expressions are +formed with curly braces @w{@code{@{ @}}}, and comments are +denoted with @code{%} or @w{@code{%@{ @dots{} %@}}}@tie{}. + +If the previous sentences sound like nonsense, don't worry! We'll +explain what all these terms mean: + +@itemize + +@item +@strong{Version statement}: +Every LilyPond file should contain a version statement. A version +statement is a line that describes the version of LilyPond for which +the file was written, as in the following example: + +@example +\version "@w{@version{}}" +@end example + +By convention, the version statement is placed at the top of the +LilyPond file. + +The version statement is important for at least two reasons. First, +it allows automatic updating of the input file as LilyPond syntax +changes. Second, it describes the version of LilyPond needed to +compile the file. + +If the version statement is omitted from an input file, LilyPond will print +a warning during the compilation of the file. + +@item +@strong{Case sensitive}: +it matters whether you enter a letter in lower case (e.g. +@w{@code{a, b, s, t}}) or upper case (e.g. @w{@code{A, B, S, T}}). +Notes are lower case: @w{@samp{@{ c d e @}}} is valid input; +@w{@samp{@{ C D E @}}} will produce an error message. + +@item +@strong{Whitespace insensitive}: +it does not matter how many spaces (or tabs or new lines) you add. +@w{@samp{@{ c4 d e @}}} means the same thing as +@w{@samp{@{ c4 @tie{} @tie{} @tie{} d e @}}} and: + +@example +@{ c4 d + e @} +@end example + +@noindent +Of course, the previous example is hard to read. A good rule of +thumb is to indent code blocks with two spaces: + +@example +@{ + c4 d e +@} +@end example + +However, whitespace @emph{is} required to separate many +syntactical elements from others. In other words, whitespace can +always be @emph{added}, but not always @emph{eliminated}. Since +missing whitespace can give rise to strange errors, it is +advisable to always insert whitespace before and after every +syntactic element, for example, before and after every curly +brace. + +@item +@strong{Expressions}: +every piece of LilyPond input needs to have +@strong{@{@tie{}curly@tie{}braces@tie{}@}} placed around the +input. These braces tell LilyPond that the input is a single +music expression, just like parentheses @code{()} in mathematics. +The braces should be surrounded by a space unless they are at the +beginning or end of a line to avoid ambiguities. + +A LilyPond command followed by a simple expression in braces (such +as @q{@w{@code{@bs{}relative c' @{ @dots{} @}}}}) also counts as a +single music expression. + +@cindex comments +@cindex line comment +@cindex block comment +@item +@strong{Comments}: +a comment is a remark for the human reader of the music input; it +is ignored while parsing, so it has no effect on the printed +output. There are two types of comments. The percent symbol +@code{%} introduces a line comment; anything after @code{%} on +that line is ignored. By convention, a line comment is placed +@emph{above} the code it refers to. + +@example +a4 a a a +% this comment refers to the Bs +b2 b +@end example + +A block comment marks a whole section of music input as a comment. +Anything that is enclosed in @code{%@{} and @code{%@}} is ignored. +However, block comments do not @q{nest}. This means that you +cannot place a block comment inside another block comment. If you +try, the first @code{%@}} will terminate @emph{both} block +comments. The following fragment shows possible uses for +comments: + +@example +% notes for twinkle twinkle follow + c4 c g' g a a g2 + +%@{ + This line, and the notes below are ignored, + since they are in a block comment. + + f4 f e e d d c2 +%@} +@end example + +@end itemize + + +@node Dealing with errors +@section Dealing with errors + +@cindex troubleshooting + +Sometimes LilyPond doesn't produce the output you expect. This +section provides some links to help you solve the problems you +might encounter. + + +@menu +* General troubleshooting tips:: +* Some common errors:: +@end menu + +@node General troubleshooting tips +@subsection General troubleshooting tips + +Troubleshooting LilyPond problems can be challenging for +people who are used to a graphical interface, because invalid +input files can be created. When this happens, a logical approach +is the best way to identify and solve the problem. Some guidelines +to help you learn to do this are provided in @rprogram{Troubleshooting}. + + +@node Some common errors +@subsection Some common errors + +@cindex common errors +@cindex errors, common + +There are a few common errors that are difficult to troubleshoot +based simply on the error messages that are displayed. These are +described in @rprogram{Common errors}. + + + +@node How to read the manuals +@section How to read the manuals + +This section shows how to read the documentation efficiently, and +also introduces some useful interactive features available in the +online version. + +@menu +* Omitted material:: +* Clickable examples:: +* Overview of manuals:: +@end menu + + +@node Omitted material +@subsection Omitted material + + +@cindex how to read the manual +@cindex manual, reading +@cindex reading the manual +@cindex examples, clickable +@cindex clickable examples +@cindex tips for constructing files +@cindex templates +@cindex constructing files, tips +@cindex files, tips for constructing + +LilyPond input must be surrounded by @code{@{ @}} marks or a +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}}, as we saw in +@ref{Working on input files}. For the rest of this manual, most +examples will omit this. To replicate the examples, you may copy +and paste the displayed input, but you @strong{must} add the +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} like this: + +@example +\relative c'' @{ + @dots{}example goes here@dots{} +@} +@end example + +Why omit the braces? Most examples in this manual can be inserted +into the middle of a longer piece of music. For these examples, +it does not make sense to add +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} -- you should not +place a @code{\relative} inside another @code{\relative}! If we +included @q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} around +every example, you would not be able to copy a small documentation +example and paste it inside a longer piece of your own. Most +people want to add material to an existing piece, so we format the +manual this way. + +Also, remember that every LilyPond file should have a +@code{\version} statement. Because the examples in the manuals +are snippets, not files, the @code{\version} statement is omitted. +But you should make a practice of including them in your files. + +@node Clickable examples +@subsection Clickable examples + +@warning{This feature is only available in the HTML manuals.} + +Many people learn programs by trying and fiddling around with the +program. This is also possible with LilyPond. If you click on a +picture in the HTML version of this manual, you will see the exact +LilyPond input that was used to generate that image. Try it on +this image: + +@c no verbatim here +@lilypond[quote] +\relative c'' { + c4-\markup { \bold \huge { Click here. } } +} +@end lilypond + +By cutting and pasting everything in the @qq{ly snippet} section, +you have a starting template for experiments. To see exactly the +same output (line-width and all), copy everything from @qq{Start +cut-&-pastable section} to the bottom of the file. + + +@ignore +This is item 825 + +@n ode Keyboard navigation +@s ubsection Keyboard navigation + +@warning{This features is only available in the HTML manuals.} + +@c TODO: once this is figured out, insert it here. + +We are currently working on this feature. +@end ignore + +@node Overview of manuals +@subsection Overview of manuals + +There is a lot of documentation for LilyPond. New users are +sometimes confused about what part(s) they should read, and +occasionally skip over reading vital portions. + +@warning{Please do not skip over important parts of the +documentation. You will find it much harder to understand later +sections.} + +@itemize + +@item +@strong{Before trying to do @emph{anything}}: read the Learning +manual's @ref{Tutorial}, and @ref{Common notation}. If you +encounter musical terms which you do not recognize, please look +them up in the @rglosnamed{Top, Glossary}. + +@item +@strong{Before trying to write a complete piece of music}: read +the Learning manual's @ref{Fundamental concepts}. After that, you +may want to look in relevant sections of the +@rusernamed{Top, Notation reference}. + +@item +@strong{Before trying to change the default output}: read the +Learning manual's @ref{Tweaking output}. + +@item +@strong{Before undertaking a large project}: read the Usage +document's @rprogram{Suggestions for writing files}. + +@end itemize + + + diff --git a/Documentation/learning/tweaks.itely b/Documentation/learning/tweaks.itely new file mode 100644 index 0000000000..40f46cf675 --- /dev/null +++ b/Documentation/learning/tweaks.itely @@ -0,0 +1,4165 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Tweaking output +@chapter Tweaking output + +This chapter discusses how to modify output. LilyPond is extremely +configurable; virtually every fragment of output may be changed. + + +@menu +* Tweaking basics:: +* The Internals Reference manual:: +* Appearance of objects:: +* Placement of objects:: +* Collisions of objects:: +* Further tweaking:: +@end menu + +@node Tweaking basics +@section Tweaking basics + +@menu +* Introduction to tweaks:: +* Objects and interfaces:: +* Naming conventions of objects and properties:: +* Tweaking methods:: +@end menu + +@node Introduction to tweaks +@subsection Introduction to tweaks + +@q{Tweaking} is a LilyPond term for the various methods available +to the user for modifying the actions taken during interpretation +of the input file and modifying the appearance of the printed +output. Some tweaks are very easy to use; others are more +complex. But taken together the methods available for tweaking +permit almost any desired appearance of the printed music to be +achieved. + +In this section we cover the basic concepts required to understand +tweaking. Later we give a variety of ready-made commands which can +simply be copied to obtain the same effect in your own scores, and +at the same time we show how these commands may be constructed so +that you may learn how to develop your own tweaks. + +Before starting on this Chapter you may wish to review the section +@ref{Contexts and engravers}, as Contexts, Engravers, and the +Properties contained within them are fundamental to understanding +and constructing Tweaks. + +@node Objects and interfaces +@subsection Objects and interfaces + +@cindex object +@cindex grob +@cindex spanner +@cindex interface +@cindex properties, object +@cindex object properties +@cindex layout object +@cindex object, layout +@cindex interface + +Tweaking involves modifying the internal operation and structures +of the LilyPond program, so we must first introduce some terms +which are used to describe those internal operations and +structures. + +The term @q{Object} is a generic term used to refer to the +multitude of internal structures built by LilyPond during the +processing of an input file. So when a command like @code{\new +Staff} is encountered a new object of type @code{Staff} is +constructed. That @code{Staff} object then holds all the +properties associated with that particular staff, for example, its +name and its key signature, together with details of the engravers +which have been assigned to operate within that staff's context. +Similarly, there are objects to hold the properties of all other +contexts, such as @code{Voice} objects, @code{Score} objects, +@code{Lyrics} objects, as well as objects to represent all +notational elements such as bar lines, +note heads, ties, dynamics, etc. Every object has its own set of +property values. + +Some types of object are given special names. Objects which represent +items of notation on the printed output such as note heads, stems, +slurs, ties, fingering, clefs, etc are called @q{Layout objects}, +often known as @q{Graphical Objects}, or @q{Grobs} for short. These +are still objects in the generic sense above, and so they too all have +properties associated with them, such as their position, size, color, +etc. + +Some layout objects are still more specialized. Phrasing slurs, +crescendo hairpins, ottava marks, and many other grobs are not +localized in a single place -- they have a starting point, an +ending point, and maybe other properties concerned with their +shape. Objects with an extended shape like these are called +@q{Spanners}. + +It remains to explain what @q{Interfaces} are. Many objects, even +though they are quite different, share common features which need to +be processed in the same way. For example, all grobs have a color, a +size, a position, etc, and all these properties are processed in the +same way during LilyPond's interpretation of the input file. To +simplify these internal operations these common actions and properties +are grouped together in an object called a @code{grob-interface}. +There are many other groupings of common properties like this, each +one given a name ending in @code{interface}. In total there are over +100 such interfaces. We shall see later why this is of interest and +use to the user. + +These, then, are the main terms relating to objects which we +shall use in this chapter. + +@node Naming conventions of objects and properties +@subsection Naming conventions of objects and properties + +@cindex naming conventions for objects +@cindex naming conventions for properties +@cindex objects, naming conventions +@cindex properties, naming conventions + +We met some object naming conventions previously, in +@ref{Contexts and engravers}. Here for reference is a list +of the most common object and property types together with +the conventions for naming them and a couple of examples of +some real names. We have used @q{A} to stand for any capitalized +alphabetic character and @q{aaa} to stand for any number of +lower-case alphabetic characters. Other characters are used +verbatim. + +@multitable @columnfractions .33 .33 .33 +@headitem Object/property type + @tab Naming convention + @tab Examples +@item Contexts + @tab Aaaa or AaaaAaaaAaaa + @tab Staff, GrandStaff +@item Layout Objects + @tab Aaaa or AaaaAaaaAaaa + @tab Slur, NoteHead +@item Engravers + @tab Aaaa_aaa_engraver + @tab Clef_engraver, Note_heads_engraver +@item Interfaces + @tab aaa-aaa-interface + @tab grob-interface, break-aligned-interface +@item Context Properties + @tab aaa or aaaAaaaAaaa + @tab alignAboveContext, skipBars +@item Layout Object Properties + @tab aaa or aaa-aaa-aaa + @tab direction, beam-thickness +@end multitable + +As we shall see shortly, the properties of different types of +object are modified by different commands, so it is useful to +be able to recognize the type of object from the names of its +properties. + + +@node Tweaking methods +@subsection Tweaking methods + +@cindex tweaking methods + +@strong{\override command} + +@cindex override command +@cindex override syntax + +@funindex \override +@funindex override + +We have already met the commands @code{\set} and @code{\with}, used to +change the properties of @strong{contexts} and to remove and add +@strong{engravers}, in @ref{Modifying context properties}, and +@ref{Adding and removing engravers}. We must now introduce some more +important commands. + +The command to change the properties of @strong{layout objects} is +@code{\override}. Because this command has to modify +internal properties deep within LilyPond its syntax is not +as simple as the commands you have used so far. It needs to +know precisely which property of which object in which context +has to be modified, and what its new value is to be. Let's see +how this is done. + +The general syntax of this command is: + +@example +\override @var{Context}.@var{LayoutObject} #'@var{layout-property} = +#@var{value} +@end example + +@noindent +This will set the property with the name @var{layout-property} of the +layout object with the name @var{LayoutObject}, which is a member of +the @var{Context} context, to the value @var{value}. + +The @var{Context} can be omitted (and usually is) when the +required context is unambiguously implied and is one of lowest +level contexts, i.e., @code{Voice}, @code{ChordNames} or +@code{Lyrics}, and we shall omit it in many of the following +examples. We shall see later when it must be specified. + +Later sections deal comprehensively with properties and their +values, but to illustrate the format and use of these commands +we shall use just a few simple properties and values which are +easily understood. + +For now, don't worry about the @code{#'}, which must precede the +layout property, and the @code{#}, which must precede the value. +These must always be present in exactly this form. This is the +most common command used in tweaking, and most of the rest of +this chapter will be directed to presenting examples of how it is +used. Here is a simple example to change the color of the +note head: + +@cindex color property, example +@cindex NoteHead, example of overriding + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{\revert command} + +@cindex revert command + +@funindex \revert +@funindex revert + +Once overridden, the property retains its new value until it is +overridden again or a @code{\revert} command is encountered. +The @code{\revert} command has the following syntax and causes +the value of the property to revert to its original default +value; note, not its previous value if several @code{\override} +commands have been issued. + +@example +\revert @var{Context}.@var{LayoutObject} #'@var{layout-property} +@end example + +Again, just like @var{Context} in the @code{\override} command, +@var{Context} is often not needed. It will be omitted +in many of the following examples. Here we revert the color +of the note head to the default value for the final two notes: + +@cindex color property, example +@cindex NoteHead, example of overriding + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\override NoteHead #'color = #red +e4 f | +\override NoteHead #'color = #green +g4 a +\revert NoteHead #'color +b4 c | +@end lilypond + +@strong{\once prefix} + +@funindex \once +@funindex once + +Both the @code{\override} and the @code{\set} commands may be +prefixed by @code{\once}. This causes the following +@code{\override} or @code{\set} command to be effective only +during the current musical moment before the property reverts +back to its default value. Using the same example, we can +change the color of a single note like this: + +@cindex color property, example +@cindex NoteHead, example of overriding + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +c4 d +\once \override NoteHead #'color = #red +e4 f | +\once \override NoteHead #'color = #green +g4 a b c | +@end lilypond + +@strong{\overrideProperty command} + +@cindex overrideProperty command + +@funindex \overrideProperty +@funindex overrideProperty + +There is another form of the override command, +@code{\overrideProperty}, which is occasionally required. +We mention it here for completeness, but for details see +@rextend{Difficult tweaks}. +@c Maybe explain in a later iteration -td + +@strong{\tweak command} + +@cindex tweak command + +@funindex \tweak +@funindex tweak + +The final tweaking command which is available is @code{\tweak}. +This should be used to change the properties of objects which +occur at the same musical moment, such as the notes within a +chord. Using @code{\override} would affect all the notes +within a chord, whereas @code{\tweak} affects just the following +item in the input stream. + +Here's an example. Suppose we wish to change the size of the +middle note head (the E) in a C major chord. Let's first see what +@code{\once \override} would do: + +@cindex font-size property, example +@cindex NoteHead, example of overriding + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +\once \override NoteHead #'font-size = #-3 +4 +4 +@end lilypond + +We see the override affects @emph{all} the note heads in the chord. +This is because all the notes of a chord occur at the same +@emph{musical moment}, and the action of @code{\once} is to +apply the override to all layout objects of the type specified +which occur at the same musical moment as the @code{\override} +command itself. + +The @code{\tweak} command operates in a different way. It acts +on the immediately following item in the input stream. However, +it is effective only on objects which are created directly from +the input stream, essentially note heads and articulations; +objects such as stems and accidentals are created later and +cannot be tweaked in this way. Furthermore, when it is applied +to note heads these @emph{must} be within a chord, i.e., within +single angle brackets, so to tweak a single note the @code{\tweak} +command must be placed inside single angle brackets with the +note. + +So to return to our example, the size of the middle note of +a chord would be changed in this way: + +@cindex font-size property, example +@cindex @code{\tweak}, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +4 +4 +@end lilypond + +Note that the syntax of @code{\tweak} is different from that +of the @code{\override} command. Neither the context nor the +layout object should be specified; in fact, it would generate +an error to do so. These are both implied by the following +item in the input stream. Note also that an equals sign should +not be present. So the general syntax of the +@code{\tweak} command is simply + +@example +\tweak #'@var{layout-property} #@var{value} +@end example + +A @code{\tweak} command can also be used to modify just one in +a series of articulations, as shown here: + +@cindex color property, example +@cindex @code{\tweak}, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4^"Black" + -\tweak #'color #red ^"Red" + -\tweak #'color #green _"Green" +@end lilypond + +@noindent +Note that the @code{\tweak} command must be preceded by an +articulation mark as if it were an articulation itself. + +@cindex tuplets, nested +@cindex triplets, nested +@cindex bracket, tuplet +@cindex bracket, triplet +@cindex tuplet bracket +@cindex triplet bracket + +@funindex TupletBracket + +The @code{\tweak} command must also be used to change the +appearance of one of a set of nested tuplets which begin at the +same musical moment. In the following example, the long tuplet +bracket and the first of the three short brackets begin at the +same musical moment, so any @code{\override} command would apply +to both of them. In the example, @code{\tweak} is used to +distinguish between them. The first @code{\tweak} command +specifies that the long tuplet bracket is to be placed above the +notes and the second one specifies that the tuplet number is to be +printed in red on the first short tuplet bracket. + +@cindex @code{\tweak}, example +@cindex direction property, example +@cindex color property, example + +@lilypond[quote,ragged-right,verbatim,fragment,relative=2] +\tweak #'direction #up +\times 4/3 { + \tweak #'color #red + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + +If nested tuplets do not begin at the same moment, their +appearance may be modified in the usual way with +@code{\override} commands: + +@cindex text property, example +@cindex tuplet-number function, example +@cindex transparent property, example +@cindex TupletNumber, example of overriding + +@c NOTE Tuplet brackets collide if notes are high on staff +@c See issue 509 +@lilypond[quote,ragged-right,verbatim,fragment,relative=1] +\times 2/3 { c8[ c c] } +\once \override TupletNumber + #'text = #tuplet-number::calc-fraction-text +\times 2/3 { + c8[ c] + c8[ c] + \once \override TupletNumber #'transparent = ##t + \times 2/3 { c8[ c c] } + \times 2/3 { c8[ c c] } +} +@end lilypond + + +@seealso +Notation Reference: +@ruser{The tweak command}. + + +@node The Internals Reference manual +@section The Internals Reference manual + +@cindex Internals Reference + +@menu +* Properties of layout objects:: +* Properties found in interfaces:: +* Types of properties:: +@end menu + +@node Properties of layout objects +@subsection Properties of layout objects + +@cindex properties of layout objects +@cindex properties of grobs +@cindex grobs, properties of +@cindex layout objects, properties of +@cindex Internals Reference manual + +Suppose you have a slur in a score which, to your mind, +appears too thin and you'd like to draw it a little heavier. +How do you go about doing this? You know from the statements +earlier about the flexibility of LilyPond that such a thing +should be possible, and you would probably guess that an +@code{\override} command would be needed. But is there a +heaviness property for a slur, and if there is, how might it +be modified? This is where the Internals Reference manual +comes in. It contains all the information you might need to +construct this and all other @code{\override} commands. + +Before we look at the Internals Reference a word of warning. +This is a @strong{reference} document, which means there is +little or no explanation contained within it: its purpose is +to present information precisely and concisely. This +means it might look daunting at first sight. Don't worry! +The guidance and explanation presented here will enable you +to extract the information from the Internals Reference for +yourself with just a little practice. + +@cindex override example +@cindex Internals Reference, example of using +@cindex @code{\addlyrics} example + +Let's use a concrete example with a simple fragment of real +music: + +@c Mozart, Die Zauberflöte Nr.7 Duett + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +Suppose now that we decide we would like the slurs to be a +little heavier. Is this possible? The slur is certainly a +layout object, so the question is, @q{Is there a property +belonging to a slur which controls the heaviness?} To answer +this we must look in the Internals Reference, or IR for short. + +The IR for the version of LilyPond you are using may be found +on the LilyPond website at @uref{http://lilypond.org}. Go to the +documentation page and click on the Internals Reference link. +For learning purposes you should use the standard HTML version, +not the @q{one big page} or the PDF. For the next few +paragraphs to make sense you will need to actually do this +as you read. + +Under the heading @strong{Top} you will see five links. Select +the link to the @emph{Backend}, which is where information about +layout objects is to be found. There, under the heading +@strong{Backend}, select the link to @emph{All layout objects}. +The page that appears lists all the layout objects used in your +version of LilyPond, in alphabetic order. Select the link to +Slur, and the properties of Slurs are listed. + +An alternative way of finding this page is from the Notation +Reference. On one of the pages that deals with slurs you may find a +link to the Internals Reference. This link will take you directly to +this page, but if you have an idea about the name of the layout object +to be tweaked, it is easier to go straight to the IR and search there. + +This Slur page in the IR tells us first that Slur objects are created +by the Slur_engraver. Then it lists the standard settings. Note +these are @strong{not} in alphabetic order. Browse down them looking +for a property that might control the heaviness of slurs, and you +should find + +@example +@code{thickness} (number) + @code{1.2} + Line thickness, generally measured in @code{line-thickness} +@end example + +This looks a good bet to change the heaviness. It tells us that +the value of @code{thickness} is a simple @emph{number}, +that the default value is 1.2, and that the units are +in another property called @code{line-thickness}. + +As we said earlier, there are few to no explanations in the IR, +but we already have enough information to try changing the +slur thickness. We see that the name of the layout object +is @code{Slur}, that the name of the property to change is +@code{thickness} and that the new value should be a number +somewhat larger than 1.2 if we are to make slurs thicker. + +We can now construct the @code{\override} command by simply +substituting the values we have found for the names, omitting +the context. Let's use a very large value for the thickness +at first, so we can be sure the command is working. We get: + +@example +\override Slur #'thickness = #5.0 +@end example + +Don't forget the @code{#'} preceding the +property name and a @code{#} preceding the new value! + +The final question is, @q{Where should this command be +placed?} While you are unsure and learning, the best +answer is, @q{Within the music, before the first slur and +close to it.} Let's do that: + +@cindex Slur example of overriding +@cindex thickness property, example + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +and we see that the slur is indeed heavier. + +So this is the basic way of constructing @code{\override} +commands. There are a few more complications that we +shall meet in later sections, but you now know all the +essentials required to make up your own -- but you will +still need some practice. This is provided in the examples +which follow. + +@subheading Finding the context + +@cindex context, finding +@cindex context, identifying correct + +But first, what if we had needed to specify the Context? +What should it be? We could guess that slurs are in +the Voice context, as they are clearly closely associated +with individual lines of music, but can we be sure? To +find out, go back to the top of the IR page describing the +Slur, where it says @q{Slur objects are created by: Slur +engraver}. So slurs will be created in whichever context +the @code{Slur_engraver} is in. Follow the link to the +@code{Slur_engraver} page. At the very bottom it tells +us that @code{Slur_engraver} is part of five Voice contexts, +including the standard voice context, @code{Voice}, so our +guess was correct. And because @code{Voice} is one of the +lowest level contexts which is implied unambiguously by +the fact that we are entering notes, we can omit it in this +location. + +@subheading Overriding once only + +@cindex overriding once only +@cindex once override + +@funindex \once +@funindex once + +As you can see, @emph{all} the slurs are thicker in the final example +above. But what if we wanted just the first slur to be thicker? This +is achieved with the @code{\once} command. Placed immediately before +the @code{\override} command it causes it to change only the slur +which begins on the @strong{immediately following} note. If the +immediately following note does not begin a slur the command has no +effect at all -- it is not remembered until a slur is encountered, it +is simply discarded. So the command with @code{\once} must be +repositioned as follows: + +@cindex Slur, example of overriding +@cindex thickness property, example + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes8[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +Now only the first slur is made heavier. + +The @code{\once} command can also be used before the @code{\set} +command. + +@subheading Reverting + +@cindex revert +@cindex default properties, reverting to + +@funindex \revert +@funindex revert + +Finally, what if we wanted just the first two slurs to be +heavier? Well, we could use two commands, each preceded by +@code{\once} placed immediately before each of the notes where +the slurs begin: + +@cindex Slur, example of overriding +@cindex thickness property, example + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + bes[( g]) g | + % Increase thickness of immediately following slur only + \once \override Slur #'thickness = #5.0 + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +or we could omit the @code{\once} command and use the @code{\revert} +command to return the @code{thickness} property to its default value +after the second slur: + +@cindex Slur, example of overriding +@cindex thickness property, example + +@lilypond[quote,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 + % Increase thickness of all following slurs from 1.2 to 5.0 + \override Slur #'thickness = #5.0 + bes[( g]) g | + g8[( es]) es + % Revert thickness of all following slurs to default of 1.2 + \revert Slur #'thickness + d8[( f]) as | + as8 g + } + \addlyrics { + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +The @code{\revert} command can be used to return any property +changed with @code{\override} back to its default value. +You may use whichever method best suits what you want to do. + +That concludes our introduction to the IR, and the basic +method of tweaking. Several examples follow in the later +sections of this Chapter, partly to introduce you to some of the +additional features of the IR, and partly to give you more +practice in extracting information from it. These examples will +contain progressively fewer words of guidance and explanation. + + +@node Properties found in interfaces +@subsection Properties found in interfaces + +@cindex interface +@cindex interface properties +@cindex properties in interfaces + +Suppose now that we wish to print the lyrics in italics. What form of +@code{\override} command do we need to do this? We first look in the +IR page listing @q{All layout objects}, as before, and look for an +object that might control lyrics. We find @code{LyricText}, which +looks right. Clicking on this shows the settable properties for lyric +text. These include the @code{font-series} and @code{font-size}, but +nothing that might give an italic shape. This is because the shape +property is one that is common to all font objects, so, rather than +including it in every layout object, it is grouped together with other +similar common properties and placed in an @strong{Interface}, the +@code{font-interface}. + +So now we need to learn how to find the properties of interfaces, +and to discover what objects use these interface properties. + +Look again at the IR page which describes LyricText. At the bottom of +the page is a list of clickable interfaces which LyricText supports. +The list has several items, including @code{font-interface}. Clicking +on this brings up the properties associated with this interface, which +are also properties of all the objects which support it, including +LyricText. + +Now we see all the user-settable properties which control fonts, +including @code{font-shape(symbol)}, where @code{symbol} can be +set to @code{upright}, @code{italics} or @code{caps}. + +You will notice that @code{font-series} and @code{font-size} are also +listed there. This immediately raises the question: Why are the +common font properties @code{font-series} and @code{font-size} listed +under @code{LyricText} as well as under the interface +@code{font-interface} but @code{font-shape} is not? The answer is +that @code{font-series} and @code{font-size} are changed from their +global default values when a @code{LyricText} object is created, but +@code{font-shape} is not. The entries in @code{LyricText} then tell +you the values for those two properties which apply to +@code{LyricText}. Other objects which support @code{font-interface} +will set these properties differently when they are created. + +Let's see if we can now construct the @code{\override} command +to change the lyrics to italics. The object is @code{LyricText}, +the property is @code{font-shape} and the value is +@code{italic}. As before, we'll omit the context. + +As an aside, although it is an important one, note that because the +values of @code{font-shape} are symbols they must be introduced with a +single apostrophe, @code{'}. That is why apostrophes are needed +before @code{thickness} in the earlier example and @code{font-shape}. +These are both symbols too. Symbols are then read internally by +LilyPond. Some of them are the names of properties, like +@code{thickness} or @code{font-shape}, others are used as values that +can be given to properties, like @code{italic}. Note the distinction +from arbitrary text strings, which would appear as @code{"a text +string"}; for more details about symbols and strings, see +@rextend{Scheme tutorial}. + +So we see that the @code{\override} command needed to print the lyrics +in italics is: + +@example +\override LyricText #'font-shape = #'italic +@end example + +@noindent +This should be placed just in front of the lyrics we wish to affect, +like so: + +@cindex font-shape property, example +@cindex italic, example +@cindex LyricText, example of overriding +@cindex @code{\addlyrics}, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \key es \major + \time 6/8 + { + r4 bes8 bes[( g]) g | + g8[( es]) es d[( f]) as | + as8 g + } + \addlyrics { + \override LyricText #'font-shape = #'italic + The man who | feels love's sweet e -- | mo -- tion + } +} +@end lilypond + +@noindent +and the lyrics are all printed in italics. + +@subheading Specifying the context in lyric mode + +@cindex context, specifying in lyric mode +@cindex lyric mode, specifying context + +In the case of lyrics, if you try specifying the context in the +format given earlier the command will fail. A syllable +entered in lyricmode is terminated by either a space, +a newline or a digit. All other characters are included +as part of the syllable. For this reason a space or newline +must appear before the terminating @code{@}} to prevent it being +included as part of the final syllable. Similarly, +spaces must be inserted before and after the +period or dot, @q{.}, separating the context name from the +object name, as otherwise the two names are run together and +the interpreter cannot recognize them. So the command should be: + +@example +\override Lyrics . LyricText #'font-shape = #'italic +@end example + +@warning{In lyrics always leave whitespace between the final +syllable and the terminating brace.} + +@warning{In overrides in lyrics always place spaces around +the dot between the context name and the object name.} + + +@seealso +Extending: @rextend{Scheme tutorial}. + + +@node Types of properties +@subsection Types of properties + +@cindex property types + +So far we have seen two types of property: @code{number} and +@code{symbol}. To be valid, the value given to a property +must be of the correct type and obey the rules for that type. +The type of property is always shown in brackets after the +property name in the IR. Here is a list of the types you may +need, together with the rules for that type, and some examples. +You must always add a hash symbol, @code{#}, of course, +to the front of these values when they are entered in the +@code{\override} command. + +@multitable @columnfractions .2 .45 .35 +@headitem Property type + @tab Rules + @tab Examples +@item Boolean + @tab Either True or False, represented by #t or #f + @tab @code{#t}, @code{#f} +@item Dimension (in staff space) + @tab A positive decimal number (in units of staff space) + @tab @code{2.5}, @code{0.34} +@item Direction + @tab A valid direction constant or its numerical equivalent (decimal +values between -1 and 1 are allowed) + @tab @code{LEFT}, @code{CENTER}, @code{UP}, + @code{1}, @code{-1} +@item Integer + @tab A positive whole number + @tab @code{3}, @code{1} +@item List + @tab A set of values separated by spaces, enclosed in parentheses +and preceded by an apostrophe + @tab @code{'(left-edge staff-bar)}, @code{'(1)}, + @code{'(1.0 0.25 0.5)} +@item Markup + @tab Any valid markup + @tab @code{\markup @{ \italic "cresc." @}} +@item Moment + @tab A fraction of a whole note constructed with the +make-moment function + @tab @code{(ly:make-moment 1 4)}, + @code{(ly:make-moment 3 8)} +@item Number + @tab Any positive or negative decimal value + @tab @code{3.5}, @code{-2.45} +@item Pair (of numbers) + @tab Two numbers separated by a @q{space . space} and enclosed +in brackets preceded by an apostrophe + @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} +@item Symbol + @tab Any of the set of permitted symbols for that property, +preceded by an apostrophe + @tab @code{'italic}, @code{'inside} +@item Unknown + @tab A procedure, or @code{#f} to cause no action + @tab @code{bend::print}, @code{ly:text-interface::print}, + @code{#f} +@item Vector + @tab A list of three items enclosed in parentheses and preceded +by apostrophe-hash, @code{'#}. + @tab @code{'#(#t #t #f)} +@end multitable + + +@seealso +Extending: @rextend{Scheme tutorial}. + + +@node Appearance of objects +@section Appearance of objects + +Let us now put what we have learned into practice with a few +examples which show how tweaks may be used to change the +appearance of the printed music. + +@menu +* Visibility and color of objects:: +* Size of objects:: +* Length and thickness of objects:: +@end menu + +@node Visibility and color of objects +@subsection Visibility and color of objects + +In the educational use of music we might wish to print a score +with certain elements omitted as an exercise for the student, +who is required to supply them. As a simple example, +let us suppose the exercise is to supply the missing bar lines +in a piece of music. But the bar lines are normally inserted +automatically. How do we prevent them printing? + +Before we tackle this, let us remember that object properties are +grouped in what are called @emph{interfaces} -- see @ref{Properties +found in interfaces}. This is simply to group together those +properties that may be used together to tweak a graphical object -- if +one of them is allowed for an object, so are the others. Some objects +then use the properties in some interfaces, others use them from other +interfaces. The interfaces which contain the properties used by a +particular grob are listed in the IR at the bottom of the page +describing that grob, and those properties may be viewed by looking at +those interfaces. + +We explained how to find information about grobs in @ref{Properties of +layout objects}. Using the same approach, we go to the IR to find the +layout object which prints bar lines. Going via @emph{Backend} and +@emph{All layout objects} we find there is a layout object called +@code{BarLine}. Its properties include two that control its +visibility: @code{break-visibility} and @code{stencil}. Barline also +supports a number of interfaces, including the @code{grob-interface}, +where we find the @code{transparent} and the @code{color} properties. +All of these can affect the visibility of bar lines (and, of course, +by extension, many other layout objects too.) Let's consider each of +these in turn. + +@subheading stencil + +@cindex stencil property + +This property controls the appearance of the bar lines by specifying +the symbol (glyph) which should be printed. In common +with many other properties, it can be set to print nothing by +setting its value to @code{#f}. Let's try it, as before, omitting +the implied Context, @code{Voice}: + +@cindex BarLine, example of overriding +@cindex stencil property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +The bar lines are still printed. What is wrong? Go back to the IR +and look again at the page giving the properties of BarLine. At the +top of the page it says @qq{Barline objects are created by: +Bar_engraver}. Go to the @code{Bar_engraver} page. At the bottom it +gives a list of Contexts in which the bar engraver operates. All of +them are of the type @code{Staff}, so the reason the @code{\override} +command failed to work as expected is because @code{Barline} is not in +the default @code{Voice} context. If the context is specified +incorrectly, the command simply does not work. No error message is +produced, and nothing is logged in the log file. Let's try correcting +it by adding the correct context: + +@cindex BarLine, example of overriding +@cindex stencil property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Now the bar lines have vanished. + +Note, though, that setting the @code{stencil} property to @code{#f} +will cause errors when the dimensions of the object are required for +correct processing. For example, errors will be generated if the +@code{stencil} property of the @code{NoteHead} object is set to +@code{#f}. If this is the case, you can instead use the +@code{point-stencil} function, which sets the stencil to a object +with zero size: + +@lilypond[quote,verbatim,relative=2] +{ + c4 c + \once \override NoteHead #'stencil = #point-stencil + c4 c +} +@end lilypond + +@subheading break-visibility + +@cindex break-visibility property + +We see from the @code{BarLine} properties in the IR that the +@code{break-visibility} property requires a vector of three booleans. +These control respectively whether bar lines are printed at the end of +a line, in the middle of lines, and at the beginning of lines. For +our example we want all bar lines to be suppressed, so the value we +need is @code{'#(#f #f #f)}. Let's try that, remembering to include +the @code{Staff} context. Note also that in writing this value we +have @code{#'#} before the opening bracket. The @code{'#} is required +as part of the value to introduce a vector, and the first @code{#} is +required, as always, to precede the value itself in the +@code{\override} command. + +@cindex BarLine, example of overriding +@cindex break-visibility property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'break-visibility = #'#(#f #f #f) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +And we see this too removes all the bar lines. + +@subheading transparent + +@cindex transparent property +@cindex transparency + +We see from the properties specified in the @code{grob-interface} page +in the IR that the @code{transparent} property is a boolean. This +should be set to @code{#t} to make the grob transparent. In this next +example let us make the time signature invisible rather than the bar +lines. To do this we need to find the grob name for the time +signature. Back to the @q{All layout objects} page in the IR to find +the properties of the @code{TimeSignature} layout object. This is +produced by the @code{Time_signature_engraver} which you can check +also lives in the @code{Staff} context and also supports the +@code{grob-interface}. So the command to make the time signature +transparent is: + +@cindex TimeSignature, example of overriding +@cindex transparent property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'transparent = ##t + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +The time signature is gone, but this command leaves a gap where +the time signature should be. Maybe this is what is wanted for +an exercise for the student to fill it in, but in other +circumstances a gap might be undesirable. To remove it, the +stencil for the time signature should be set to @code{#f} +instead: + +@cindex TimeSignature, example of overriding +@cindex stencil property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.TimeSignature #'stencil = ##f + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +and the difference is obvious: setting the stencil to @code{#f} +removes the object entirely; making the object @code{transparent} +leaves it where it is, but makes it invisible. + +@subheading color + +@cindex color property + +Finally let us try making the bar lines invisible by coloring +them white. (There is a difficulty with this in that the +white bar line may or may not blank out the staff lines where +they cross. You may see in some of the examples below that this +happens unpredictably. The details of why this is so and how to +control it are covered in @ruser{Painting objects white}. But at +the moment we are learning about color, so please just accept this +limitation for now.) + +The @code{grob-interface} specifies that the +color property value is a list, but there is no +explanation of what that list should be. The list it +requires is actually a list of values in internal units, +but, to avoid having to know what these are, several ways +are provided to specify colors. The first way is to use one +of the @q{normal} colors listed in the first table in +@ruser{List of colors}. To set the bar lines to white +we write: + +@cindex BarLine, example of overriding +@cindex color property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #white + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +and again, we see the bar lines are not visible. Note that +@emph{white} is not preceded by an apostrophe -- it is not +a symbol, but a @emph{function}. When called, it provides +the list of internal values required to set the color to +white. The other colors in the normal list are functions +too. To convince yourself this is working you might like +to change the color to one of the other functions in the +list. + +@cindex color, X11 +@cindex X11 colors + +@funindex x11-color + +The second way of changing the color is to use the list of +X11 color names in the second list in @ruser{List of colors}. +However, these must be preceded by another function, which +converts X11 color names into the list of internal values, +@code{x11-color}, like this: + +@cindex BarLine, example of overriding +@cindex color property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(x11-color 'white) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Note that in this case the function @code{x11-color} takes +a symbol as an argument, so the symbol must be preceded by +an apostrophe and the two enclosed in brackets. + +@cindex rgb colors +@cindex color, rgb + +@funindex rgb-color + +There is yet a third function, one which converts RGB values into +internal colors -- the @code{rgb-color} function. This takes +three arguments giving the intensities of the red, green and +blue colors. These take values in the range 0 to 1. So to +set the color to red the value should be @code{(rgb-color 1 0 0)} +and to white it should be @code{(rgb-color 1 1 1)}: + +@cindex BarLine, example of overriding +@cindex color property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.BarLine #'color = #(rgb-color 1 1 1) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +Finally, there is also a grey scale available as part of the +X11 set of colors. These range from black, @code{'grey0'}, +to white, @code{'grey100}, in steps of 1. Let's illustrate +this by setting all the layout objects in our example to +various shades of grey: + +@cindex StaffSymbol, example of overriding +@cindex TimeSignature, example of overriding +@cindex Clef, example of overriding +@cindex NoteHead, example of overriding +@cindex Stem, example of overriding +@cindex BarLine, example of overriding +@cindex color property, example +@cindex x11-color, example of using + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +{ + \time 12/16 + \override Staff.StaffSymbol #'color = #(x11-color 'grey30) + \override Staff.TimeSignature #'color = #(x11-color 'grey60) + \override Staff.Clef #'color = #(x11-color 'grey60) + \override Voice.NoteHead #'color = #(x11-color 'grey85) + \override Voice.Stem #'color = #(x11-color 'grey85) + \override Staff.BarLine #'color = #(x11-color 'grey10) + c4 b8 c d16 c d8 | + g,8 a16 b8 c d4 e16 | + e8 +} +@end lilypond + +@noindent +Note the contexts associated with each of the layout objects. +It is important to get these right, or the commands will not +work! Remember, the context is the one in which the appropriate +engraver is placed. The default context for engravers can be +found by starting from the layout object, going from there to +the engraver which produces it, and on the engraver page in the +IR it tells you in which context the engraver will normally be +found. + + +@node Size of objects +@subsection Size of objects + +@cindex changing size of objects +@cindex size of objects +@cindex objects, size of +@cindex objects, changing size of + +Let us begin by looking again at the earlier example +see @ref{Nesting music expressions}) which showed +how to introduce a new temporary staff, as in an @rglos{ossia}. + +@cindex alignAboveContext property, example +@cindex @code{\with}, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Ossia are normally written without clef and time signature, and +are usually printed slightly smaller than the main staff. We +already know now how to remove the clef and time signature -- +we simply set the stencil of each to @code{#f}, as follows: + +@cindex alignAboveContext property, example +@cindex @code{\with}, example +@cindex stencil property, example +@cindex Clef, example of overriding +@cindex TimeSignature, example of overriding + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } + { + \override Staff.Clef #'stencil = ##f + \override Staff.TimeSignature #'stencil = ##f + { f8 f c } + } + >> + r4 | + } +} +@end lilypond + +@noindent +where the extra pair of braces after the @code{\with} clause are +required to ensure the enclosed overrides and music are applied +to the ossia staff. + +But what is the difference between modifying the staff context by +using @code{\with} and modifying the stencils of the clef and the +time signature with \override? The main difference is that +changes made in a @code{\with} clause are made at the time the +context is created, and remain in force as the @strong{default} +values for the duration of that context, whereas +@code{\set} or @code{\override} commands embedded in the +music are dynamic -- they make changes synchronized with +a particular point in the music. If changes are unset or +reverted using @code{\unset} or @code{\revert} they return to +their default values, which will be the ones set in the +@code{\with} clause, or if none have been set there, the normal +default values. + +Some context properties can be modified only in @code{\with} clauses. +These are those properties which cannot sensibly be changed after the +context has been created. @code{alignAboveContext} and its partner, +@code{alignBelowContext}, are two such properties -- once the staff +has been created its alignment is decided and it would make no sense +to try to change it later. + +The default values of layout object properties can also be set +in @code{\with} clauses. Simply use the normal @code{\override} +command leaving out the context name, since this is unambiguously +defined as the context which the @code{\with} clause is modifying. +If fact, an error will be generated if a context is specified +in this location. + +So we could replace the example above with + +@cindex alignAboveContext property, example +@cindex @code{\with}, example +@cindex Clef, example of overriding +@cindex TimeSignature, example of overriding + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + % Don't print clefs in this staff + \override Clef #'stencil = ##f + % Don't print time signatures in this staff + \override TimeSignature #'stencil = ##f + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Finally we come to changing the size of layout objects. + +Some layout objects are created as glyphs selected from a typeface +font. These include note heads, accidentals, markup, clefs, time +signatures, dynamics and lyrics. Their size is changed by modifying +the @code{font-size} property, as we shall shortly see. Other layout +objects such as slurs and ties -- in general, spanner objects -- are +drawn individually, so there is no @code{font-size} associated with +them. These objects generally derive their size from the objects to +which they are attached, so usually there is no need to change their +size manually. Still other properties such as the length of stems and +bar lines, thickness of beams and other lines, and the separation of +staff lines all need to be modified in special ways. + +Returning to the ossia example, let us first change the font-size. +We can do this in two ways. We can either change the size of the +fonts of each object type, like @code{NoteHead}s with commands +like + +@example +\override NoteHead #'font-size = #-2 +@end example + +or we can change the size of all fonts by setting a special +property, @code{fontSize}, using @code{\set}, or by including +it in a @code{\with} clause (but without the @code{\set}). + +@example +\set fontSize = #-2 +@end example + +Both of these statements would cause the font size to be reduced +by 2 steps from its previous value, where each +step reduces or increases the size by approximately 12%. + +Let's try it in our ossia example: + +@cindex alignAboveContext property, example +@cindex @code{\with}, example +@cindex Clef, example of overriding +@cindex TimeSignature, example of overriding +@cindex fontSize property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + % Reduce all font sizes by ~24% + fontSize = #-2 + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +This is still not quite right. The note heads and flags are +smaller, but the stems are too long in proportion and the +staff lines are spaced too widely apart. These need to be +scaled down in proportion to the font reduction. The next +sub-section discusses how this is done. + +@node Length and thickness of objects +@subsection Length and thickness of objects + +@cindex distances +@cindex thickness +@cindex length +@cindex magstep +@cindex size, changing +@cindex stem length, changing +@cindex staff line spacing, changing + +Distances and lengths in LilyPond are generally measured in +staff-spaces, the distance between adjacent lines in the staff, +(or occasionally half staff spaces) while most @code{thickness} +properties are measured in units of an internal property called +@code{line-thickness.} For example, by default, the lines of +hairpins are given a thickness of 1 unit of @code{line-thickness}, +while the @code{thickness} of a note stem is 1.3. Note, though, +that some thickness properties are different; for example, the +thickness of beams is controlled by the value of the +@code{beam-thickness} property, which is measured in staff-spaces. + +So how are lengths to be scaled in proportion to the font size? +This can be done with the help of a special function called +@code{magstep} provided for exactly this purpose. It takes +one argument, the change in font size (#-2 in the example above) +and returns a scaling factor suitable for reducing other +objects in proportion. It is used like this: + +@cindex alignAboveContext property, example +@cindex @code{\with}, example +@cindex Clef, example of overriding +@cindex TimeSignature, example of overriding +@cindex fontSize property, example +@cindex StaffSymbol, example of overriding +@cindex magstep function, example of using +@cindex staff-space property, example +@cindex stencil property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + \override Clef #'stencil = ##f + \override TimeSignature #'stencil = ##f + fontSize = #-2 + % Reduce stem length and line spacing to match + \override StaffSymbol #'staff-space = #(magstep -2) + } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +@noindent +Since the length of stems and many other length-related properties are +always calculated relative to the value of the @code{staff-space} +property these are automatically scaled down in length too. Note that +this affects only the vertical scale of the ossia -- the horizontal +scale is determined by the layout of the main music in order to remain +synchronized with it, so it is not affected by any of these changes in +size. Of course, if the scale of all the main music were changed in +this way then the horizontal spacing would be affected. This is +discussed later in the layout section. + +This, then, completes the creation of an ossia. The sizes and +lengths of all other objects may be modified in analogous ways. + +For small changes in scale, as in the example above, the +thickness of the various drawn lines such as bar lines, +beams, hairpins, slurs, etc does not usually require global +adjustment. If the thickness of any particular layout object +needs to be adjusted this can be best achieved by overriding its +@code{thickness} property. An example of changing the thickness +of slurs was shown above in @ref{Properties of layout objects}. +The thickness of all drawn objects (i.e., those not produced +from a font) may be changed in the same way. + + +@node Placement of objects +@section Placement of objects + +@menu +* Automatic behavior:: +* Within-staff objects:: +* Outside-staff objects:: +@end menu + + +@node Automatic behavior +@subsection Automatic behavior + +@cindex within-staff objects +@cindex outside-staff objects +@cindex objects, within-staff +@cindex objects, outside-staff + +There are some objects in musical notation that belong to +the staff and there are other objects that should be +placed outside the staff. These are called within-staff +objects and outside-staff objects respectively. + +Within-staff objects are those that are located on the staff +-- note heads, stems, accidentals, etc. The positions of +these are usually fixed by the music itself -- they are +vertically positioned on specific lines of the staff or are +tied to other objects that are so positioned. Collisions of +note heads, stems and accidentals in closely set chords are +normally avoided automatically. There are commands and +overrides which can modify this automatic behavior, as we +shall shortly see. + +Objects belonging outside the staff include things such as +rehearsal marks, text and dynamic markings. LilyPond's rule for +the vertical placement of outside-staff objects is to place them +as close to the staff as possible but not so close that they +collide with any other object. LilyPond uses the +@code{outside-staff-priority} property to determine the order in +which the objects should be placed, as follows. + +First, LilyPond places all the within-staff objects. +Then it sorts the outside-staff objects according to their +@code{outside-staff-priority}. The outside-staff objects are +taken one by one, beginning with the object with the lowest +@code{outside-staff-priority}, and placed so that they do not +collide with any objects that have already been placed. That is, +if two outside-staff grobs are competing for the same space, the +one with the lower @code{outside-staff-priority} will be placed +closer to the staff. If two objects have the same +@code{outside-staff-priority} the one encountered first will be +placed closer to the staff. + +In the following example all the markup texts have the same +priority (since it is not explicitly set). Note that @q{Text3} +is automatically positioned close to the staff again, nestling +under @q{Text2}. + +@cindex markup example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +Staves are also positioned, by default, as closely together as +possible (subject to a minimum separation). If notes project +a long way towards an adjacent staff they will force the +staves further apart only if an overlap of the notation +would otherwise occur. The following example demonstrates +this @q{nestling} of the notes on adjacent staves: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \relative c' { c4 a, } + } + \new Staff { + \relative c'''' { c4 a, } + } +>> +@end lilypond + + +@node Within-staff objects +@subsection Within-staff objects + +We have already seen how the commands @code{\voiceXXX} affect +the direction of slurs, ties, fingering and +everything else which depends on the direction of the stems. +These commands are essential when writing polyphonic music to +permit interweaving melodic lines to be distinguished. +But occasionally it may be necessary to override this automatic +behavior. This can be done for whole sections of music or even +for an individual note. The property which controls this +behavior is the @code{direction} property of each layout object. +We first explain what this does, and then introduce a number of +ready-made commands which avoid your having to code explicit +overrides for the more common modifications. + +Some layout objects like slurs and ties curve, bend or point +either up or down; others like stems and flags also move to +right or left when they point up or down. This is controlled +automatically when @code{direction} is set. + +@cindex down +@cindex up +@cindex center +@cindex neutral + +The following example shows in bar 1 the default behavior of stems, +with those on high notes pointing down and those on low notes pointing +up, followed by four notes with all stems forced down, four notes with +all stems forced up, and finally four notes reverted back to the +default behavior. + +@cindex Stem, example of overriding +@cindex direction property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +a4 g c a | +\override Stem #'direction = #DOWN +a4 g c a | +\override Stem #'direction = #UP +a4 g c a | +\revert Stem #'direction +a4 g c a | +@end lilypond + +Here we use the constants @code{DOWN} and @code{UP}. +These have the values @code{-1} and @code{+1} respectively, and +these numerical values may be used instead. The value @code{0} +may also be used in some cases. It is simply treated as meaning +@code{UP} for stems, but for some objects it means @q{center}. +There is a constant, @code{CENTER} which has the value @code{0}. + +However, these explicit overrides are not usually used, as there are +simpler equivalent predefined commands available. Here is a table of +the commonest. The meaning of each is stated where it is not obvious. + +@multitable @columnfractions .2 .2 .25 .35 +@headitem Down/Left + @tab Up/Right + @tab Revert + @tab Effect +@item @code{\arpeggioArrowDown} + @tab @code{\arpeggioArrowUp} + @tab @code{\arpeggioNormal} + @tab Arrow is at bottom, at top, or no arrow +@item @code{\dotsDown} + @tab @code{\dotsUp} + @tab @code{\dotsNeutral} + @tab Direction of movement to avoid staff lines +@item @code{\dynamicDown} + @tab @code{\dynamicUp} + @tab @code{\dynamicNeutral} + @tab +@item @code{\phrasingSlurDown} + @tab @code{\phrasingSlurUp} + @tab @code{\phrasingSlurNeutral} + @tab Note: distinct from slur commands +@item @code{\slurDown} + @tab @code{\slurUp} + @tab @code{\slurNeutral} + @tab +@item @code{\stemDown} + @tab @code{\stemUp} + @tab @code{\stemNeutral} + @tab +@item @code{\textSpannerDown} + @tab @code{\textSpannerUp} + @tab @code{\textSpannerNeutral} + @tab Text entered as spanner is below/above staff +@item @code{\tieDown} + @tab @code{\tieUp} + @tab @code{\tieNeutral} + @tab +@item @code{\tupletDown} + @tab @code{\tupletUp} + @tab @code{\tupletNeutral} + @tab Tuplets are below/above notes +@end multitable + +Note that these predefined commands may @strong{not} be +preceded by @code{\once}. If you wish to limit the +effect to a single note you must either use the equivalent +@code{\once \override} command or use the predefined command +followed after the affected note by the corresponding +@code{\xxxNeutral} command. + +@unnumberedsubsubsec Fingering + +@cindex fingering, placement +@cindex fingering, chords + +The placement of fingering on single notes can also be controlled +by the @code{direction} property, but changing @code{direction} +has no effect on chords. As we shall see, there are special +commands which allow the fingering of individual notes +of chords to be controlled, with the fingering being placed +above, below, to the left or to the right of each note. + +First, here's the effect of @code{direction} on the fingering +attached to single notes. The first bar shows the default +behaviour, and the following two bars shows the effect of +specifying @code{DOWN} and @code{UP}: + +@cindex Fingering, example of overriding +@cindex direction property, example + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #DOWN +c4-5 a-3 f-1 c'-5 | +\override Fingering #'direction = #UP +c4-5 a-3 f-1 c'-5 | +@end lilypond + +However, overriding the @code{direction} property is not the +easiest way of manually setting the fingering above or below +the notes; using @code{_} or @code{^} instead of @code{-} before +the fingering number is usually preferable. Here is the previous +example using this method: + +@cindex fingering example + +@lilypond[quote,verbatim,relative=2] +c4-5 a-3 f-1 c'-5 | +c4_5 a_3 f_1 c'_5 | +c4^5 a^3 f^1 c'^5 | +@end lilypond + +The @code{direction} property is ignored for chords, but the +directional prefixes, @code{_} and @code{^} do work. By default, +the fingering is automatically placed both above and below the +notes of a chord, as shown: + +@cindex fingering example + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +@noindent +but this may be overridden to manually force all or any of the +individual fingering numbers above or below: + +@cindex fingering example + +@lilypond[quote,verbatim,relative=2] +4 +4 +4 +@end lilypond + +Even greater control over the placement of fingering of the +individual notes in a chord is possible by using the +@code{\set fingeringOrientations} command. The format of this +command is: + +@example +@code{\set fingeringOrientations = #'([up] [left/right] [down])} +@end example + +@noindent +@code{\set} is used because @code{fingeringOrientations} is a +property of the @code{Voice} context, created and used by the +@code{New_fingering_engraver}. + +The property may be set to a list of one to three values. +It controls whether fingerings may be placed above (if +@code{up} appears in the list), below (if @code{down} appears), +to the left (if @code{left} appears, or to the right +(if @code{right} appears). Conversely, if a location is not +listed, no fingering is placed there. LilyPond takes these +constraints and works out the best placement for the fingering +of the notes of the following chords. Note that @code{left} and +@code{right} are mutually exclusive -- fingering may be placed +only on one side or the other, not both. + +@warning{To control the placement of the fingering of a single +note using this command it is necessary to write it as a single +note chord by placing angle brackets round it.} + +Here are a few examples: + +@cindex fingering example +@cindex @code{\set}, example of using +@cindex fingeringOrientations property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + +@noindent +If the fingering seems a little crowded the @code{font-size} +could be reduced. The default value can be seen from the +@code{Fingering} object in the IR to be @code{-5}, so let's +try @code{-7}: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\override Fingering #'font-size = #-7 +\set fingeringOrientations = #'(left) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +4 +@end lilypond + +@node Outside-staff objects +@subsection Outside-staff objects + +Outside-staff objects are automatically placed to avoid collisions. +Objects with the lower value of the @code{outside-staff-priority} +property are placed nearer to the staff, and other outside-staff +objects are then raised as far as necessary to avoid collisions. +The @code{outside-staff-priority} is defined in the +@code{grob-interface} and so is a property of all layout objects. +By default it is set to @code{#f} for all within-staff objects, +and to a numerical value appropriate to each outside-staff object +when the object is created. The following table shows the default +numerical values for some of the commonest outside-staff objects. + +@cindex spanners + +Note the unusual names for some of the objects: spanner objects +are automatically created to control the vertical positioning of +grobs which (might) start and end at different musical moments, so +changing the @code{outside-staff-priority} of the underlying grob +will have no effect. For example, changing +@code{outside-staff-priority} of the @code{Hairpin} object will +have no effect on the vertical positioning of hairpins -- you must +change @code{outside-staff-priority} of the associated +@code{DynamicLineSpanner} object instead. This override must be +placed at the start of the spanner, which might include several +linked hairpins and dynamics. + +@multitable @columnfractions .3 .3 .3 +@headitem Layout Object + @tab Priority + @tab Controls position of: +@item @code{RehearsalMark} + @tab @code{1500} + @tab Rehearsal marks +@item @code{MetronomeMark} + @tab @code{1000} + @tab Metronome marks +@item @code{VoltaBracketSpanner} + @tab @code{600} + @tab Volta brackets +@item @code{TextScript} + @tab @code{450} + @tab Markup text +@item @code{MultiMeasureRestText} + @tab @code{450} + @tab Markup text over full-bar rests +@item @code{OttavaBracket} + @tab @code{400} + @tab Ottava brackets +@item @code{TextSpanner} + @tab @code{350} + @tab Text spanners +@item @code{DynamicLineSpanner} + @tab @code{250} + @tab All dynamic markings +@item @code{BarNumber} + @tab @code{ 100} + @tab Bar numbers +@item @code{TrillSpanner} + @tab @code{50} + @tab Spanning trills +@end multitable + +Here is an example showing the default placement of some of +these. + +@cindex text spanner +@cindex ottava bracket + +@funindex \startTextSpan +@funindex startTextSpan +@funindex \stopTextSpan +@funindex stopTextSpan + +@cindex TextSpanner, example of overriding +@cindex bound-details property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text and hairpin +c4\pp\< +c4 +% Add Text Script +c4^Text | +c4 c +% Add Dynamic Text and terminate hairpin +c4\ff c \stopTextSpan | +% Stop Ottava Bracket +\ottava #0 +c,4 c c c | +@end lilypond + +This example also shows how to create Text Spanners -- +text with extender lines above a section of music. The +spanner extends from the @code{\startTextSpan} command to +the @code{\stopTextSpan} command, and the format of the +text is defined by the @code{\override TextSpanner} command. +For more details see @ruser{Text spanners}. + +It also shows how ottava brackets are created. + +@cindex tweaking bar number placement +@cindex bar numbers, tweaking placement +@cindex tweaking metronome mark placement +@cindex metronome mark, tweaking placement +@cindex tweaking rehearsal mark placement +@cindex rehearsal marks, tweaking placement + +If the default values of @code{outside-staff-priority} do not give you +the placing you want, the priority of any of the objects may be +overridden. Suppose we would like the ottava bracket to be placed +below the text spanner in the example above. All we need to do is to +look up the priority of @code{OttavaBracket} in the IR or in the +tables above, and reduce it to a value lower than that of a +@code{TextSpanner}, remembering that @code{OttavaBracket} is created +in the @code{Staff} context: + +@cindex TextSpanner, example of overriding +@cindex bound-details property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +% Set details for later Text Spanner +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +% Place dynamics above staff +\dynamicUp +% Place following Ottava Bracket below Text Spanners +\once \override Staff.OttavaBracket #'outside-staff-priority = #340 +% Start Ottava Bracket +\ottava #1 +c'4 \startTextSpan +% Add Dynamic Text +c4\pp +% Add Dynamic Line Spanner +c4\< +% Add Text Script +c4^Text | +c4 c +% Add Dynamic Text +c4\ff c \stopTextSpan | +% Stop Ottava Bracket +\ottava #0 +c,4 c c c | +@end lilypond + +Note that some of these objects, in particular bar numbers, +metronome marks and rehearsal marks, live by default in the +@code{Score} context, so be sure to use the correct context +when these are being overriden. + +@cindex slurs and outside-staff-priority +@cindex slurs and articulations +@cindex articulations and slurs + +Slurs by default are classed as within-staff objects, but +they often appear above the staff if the notes to +which they are attached are high on the staff. This can push +outside-staff objects such as articulations too high, as the slur +will be placed first. The @code{avoid-slur} property of the +articulation can be set to @code{'inside} to bring the articulation +inside the slur, but the @code{avoid-slur} property is effective +only if the @code{outside-staff-priority} is also set to @code{#f}. +Alternatively, the @code{outside-staff-priority} of the slur +can be set to a numerical value to cause it to be placed along with +other outside-staff objects according to that value. Here's an +example showing the effect of the two methods: + +@lilypond[quote,verbatim,relative=2] +c4( c^\markup { \tiny \sharp } d4.) c8 | +c4( +\once \override TextScript #'avoid-slur = #'inside +\once \override TextScript #'outside-staff-priority = ##f +c4^\markup { \tiny \sharp } d4.) c8 | +\once \override Slur #'outside-staff-priority = #500 +c4( c^\markup { \tiny \sharp } d4.) c8 | +@end lilypond + +Changing the @code{outside-staff-priority} can also be used to +control the vertical placement of individual objects, although +the results may not always be desirable. Suppose we would +like @qq{Text3} to be placed above @qq{Text4} in the example +under Automatic behavior, above (see @ref{Automatic behavior}). +All we need to do is to look up the priority of @code{TextScript} +in the IR or in the tables above, and increase the priority of +@qq{Text3} to a higher value: + +@cindex TextScript, example of overriding +@cindex outside-staff-priority property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +c2^"Text1" +c2^"Text2" | +\once \override TextScript #'outside-staff-priority = #500 +c2^"Text3" +c2^"Text4" | +@end lilypond + +This certainly lifts @qq{Text3} above @qq{Text4} but it also lifts it +above @qq{Text2}, and @qq{Text4} now drops down. Perhaps this is not +so good. What we would really like to do is to position all the +annotation at the same distance above the staff. To do this, we +clearly will need to space the notes out horizontally to make more +room for the text. This is done using the @code{textLengthOn} +command. + +@subheading \textLengthOn + +@cindex notes, spreading out with text + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +By default, text produced by markup takes up no horizontal space +as far as laying out the music is concerned. The @code{\textLengthOn} +command reverses this behavior, causing the notes to be spaced +out as far as is necessary to accommodate the text: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\textLengthOn % Cause notes to space out to accommodate text +c2^"Text1" +c2^"Text2" | +c2^"Text3" +c2^"Text4" | +@end lilypond + +The command to revert to the default behavior is +@code{\textLengthOff}. Remember @code{\once} only works with +@code{\override}, @code{\set}, @code{\revert} or @code{unset}, +so cannot be used with @code{\textLengthOn}. + +@cindex markup text, allowing collisions + +Markup text will also avoid notes which project above the staff. +If this is not desired, the automatic displacement upwards may +be turned off by setting the priority to @code{#f}. Here's an +example to show how markup text interacts with such notes. + +@cindex TextScript, example of overriding +@cindex outside-staff-priority property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +% This markup is short enough to fit without collision +c2^"Tex" c'' | +R1 | + +% This is too long to fit, so it is displaced upwards +c,,2^"Text" c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +c,,2^"Long Text " c'' | +R1 | + +% Turn off collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\textLengthOn % and turn on textLengthOn +c,,2^"Long Text " % Spaces at end are honored +c''2 | +@end lilypond + + +@subheading Dynamics + +@cindex tweaking dynamics placement +@cindex dynamics, tweaking placement + +Dynamic markings will normally be positioned beneath the +staff, but may be positioned above with the @code{dynamicUp} +command. They will be positioned vertically relative to the +note to which they are attached, and will float below (or above) +all within-staff objects such as phrasing slurs and bar numbers. +This can give quite acceptable results, as this example +shows: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=1] +\clef "bass" +\key aes \major +\time 9/8 +\dynamicUp +bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | +ees,2.~\)\mf ees4 r8 | +@end lilypond + +However, if the notes and attached dynamics are close +together the automatic placement will avoid collisions +by displacing later dynamic markings further away, but this may +not be the optimum placement, as this rather artificial example +shows: + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +Should a similar situation arise in @q{real} music, it may be +preferable to space out the notes a little further, so the dynamic +markings can all fit at the same vertical distance from the staff. We +were able to do this for markup text by using the @code{\textLengthOn} +command, but there is no equivalent command for dynamic marks. So we +shall have to work out how to do this using @code{\override} commands. + +@subheading Grob sizing + +@cindex grob sizing +@cindex sizing grobs + +First we must learn how grobs are sized. All grobs have a +reference point defined within them which is used to position +them relative to their parent object. This point in the grob +is then positioned at a horizontal distance, @code{X-offset}, +and at a vertical distance, @code{Y-offset}, from its parent. +The horizontal extent of the object is given by a pair of +numbers, @code{X-extent}, which say where the left and right +edges are relative to the reference point. The vertical extent +is similarly defined by a pair of numbers, @code{Y-extent}. +These are properties of all grobs which support the +@code{grob-interface}. + +@cindex @code{extra-spacing-width} + +By default, outside-staff objects are given a width of zero so +that they may overlap in the horizontal direction. This is done +by the trick of adding infinity to the leftmost extent and +minus infinity to the rightmost extent by setting the +@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}. So +to ensure they do not overlap in the horizontal direction we +must override this value of @code{extra-spacing-width} to +@code{'(0 . 0)} so the true width shines through. This is +the command to do this for dynamic text: + +@example +\override DynamicText #'extra-spacing-width = #'(0 . 0) +@end example + +@noindent +Let's see if this works in our previous example: + +@cindex DynamicText, example of overriding +@cindex extra-spacing-width property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +\override DynamicText #'extra-spacing-width = #'(0 . 0) +a4\f b\mf c\mp b\p | +@end lilypond + +@noindent +Well, it has certainly stopped the dynamic marks being +displaced, but two problems remain. The marks should be +spaced a little further apart and it would be better +if they were all the same distance from the staff. +We can solve the first problem easily. Instead of making +the @code{extra-spacing-width} zero we could add a little +more to it. The units are the space between two staff +lines, so moving the left edge half a unit to the left and the +right edge half a unit to the right should do it: + +@cindex DynamicText, example of overriding +@cindex extra-spacing-width property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 staff space +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +a4\f b\mf c\mp b\p +@end lilypond + +@noindent +This looks better, but maybe we would prefer the dynamic marks +to be aligned along the same baseline rather than going up and +down with the notes. The property to do this is +@code{staff-padding} which is covered in the following section. + + +@node Collisions of objects +@section Collisions of objects + +@menu +* Moving objects:: +* Fixing overlapping notation:: +* Real music example:: +@end menu + +@node Moving objects +@subsection Moving objects + +@cindex moving overlapping objects +@cindex moving colliding objects +@cindex moving colliding grobs +@cindex objects, moving colliding +@cindex grobs, moving colliding + +This may come as a surprise, but LilyPond is not perfect. Some +notation elements can overlap. This is unfortunate, but in fact +rather rare. Usually the need to move objects is for clarity or +aesthetic reasons -- they would look better with a little more +or a little less space around them. + +There are three main approaches to resolving overlapping +notation. They should be considered in the following order: + +@enumerate +@item +The @strong{direction} of one of the overlapping objects may +be changed using the predefined commands listed above for +within-staff objects (see @ref{Within-staff objects}). +Stems, slurs, beams, ties, dynamics, text and tuplets may be +repositioned easily in this way. The limitation is that you +have a choice of only two positions, and neither may be +suitable. + +@item +The @strong{object properties}, which LilyPond uses when positioning +layout objects, may be modified using @code{\override}. The +advantages of making changes to this type of property are (a) that +some other objects will be moved automatically if necessary to make +room and (b) the single override can apply to all instances of the +same type of object. Such properties include: + +@itemize + +@item +@code{direction} + +This has already been covered in some detail -- see +@ref{Within-staff objects}. + +@item +@code{padding}, @code{right-padding}, @code{staff-padding} + +@cindex padding +@cindex padding property +@cindex right-padding property +@cindex staff-padding property + +As an object is being positioned the value of its @code{padding} +property specifies the gap that must be left between itself and the +nearest edge of the object against which it is being positioned. Note +that it is the @code{padding} value of the object @strong{being +placed} that is used; the @code{padding} value of the object which is +already placed is ignored. Gaps specified by @code{padding} can be +applied to all objects which support the +@code{side-position-interface}. + +Instead of @code{padding}, the placement of groups of accidentals +is controlled by @code{right-padding}. This property is to be found +in the @code{AccidentalPlacement} object which, note, lives in the +@strong{Staff} context. In the typesetting process the note heads +are typeset first and then the accidentals, if any, are added to the +left of the note heads using the @code{right-padding} property to determine +the separation from the note heads and between individual accidentals. +So only the @code{right-padding} property of the @code{AccidentalPlacement} +object has any effect on the placement of the accidentals. + +The @code{staff-padding} property is closely related to the +@code{padding} property: @code{padding} controls the minimum amount of +space between any object which supports the +@code{side-position-interface} and the nearest other object (generally +the note or the staff lines); @code{staff-padding} applies only to +those objects which are always set outside the staff -- it controls +the minimum amount of space that should be inserted between that +object and the staff. Note that @code{staff-padding} has no effect on +objects which are positioned relative to the note rather than the +staff, even though it may be overridden without error for such objects +-- it is simply ignored. + +To discover which padding property is required for the object you wish +to reposition, you need to return to the IR and look up the object's +properties. Be aware that the padding properties might not be located +in the obvious object, so look in objects that appear to be related. + +All padding values are measured in staff spaces. For most +objects, this value is set by default to be around 1.0 or less +(it varies with each object). It may be overridden if a larger +(or smaller) gap is required. + +@item +@code{self-alignment-X} + +@cindex self-alignment-X property + +This property can be used to align the object to the left, to +the right, or to center it with respect to the parent object's +reference point. It may be used with all objects which support +the @code{self-alignment-interface}. In general these are objects +that contain text. The values are @code{LEFT}, @code{RIGHT} +or @code{CENTER}. Alternatively, a numerical value between +@code{-1} and @code{+1} may be specified, where @code{-1} is +left-aligned, @code{+1} is right-aligned, and numbers in between +move the text progressively from left-aligned to right-aligned. +Numerical values greater than @code{1} may be specified to move +the text even further to the left, or less than @code{-1} to +move the text even further to the right. A change of @code{1} +in the value corresponds to a movement of half the text's length. + +@item +@code{extra-spacing-width} + +@cindex extra-spacing-width property + +This property is available for all objects which support the +@code{item-interface}. It takes two numbers, the first is added +to the leftmost extent and the second is added to the rightmost +extent. Negative numbers move the edge to the left, positive to +the right, so to widen an object the first number must be negative, +the second positive. Note that not all objects honor both +numbers. For example, the @code{Accidental} object only takes +notice of the first (left edge) number. + +@item +@code{staff-position} + +@cindex staff-position property + +@code{staff-position} is a property of the +@code{staff-symbol-referencer-interface}, which is supported by +objects which are positioned relative to the staff. It specifies +the vertical position of the object relative to the center line +of the staff in half staff-spaces. It is useful in resolving +collisions between layout objects like multi-measure rests, ties +and notes in different voices. + +@item +@code{force-hshift} + +@cindex force-hshift property + +Closely spaced notes in a chord, or notes occurring at the same +time in different voices, are arranged in two, occasionally more, +columns to prevent the note heads overlapping. These are called +note columns, and an object called @code{NoteColumn} is created +to lay out the notes in that column. + +The @code{force-hshift} property is a property of a @code{NoteColumn} +(actually of the @code{note-column-interface}). Changing it permits a +note column to be moved in units appropriate to a note column, +viz. the note head width of the first voice note. It should be used +in complex situations where the normal @code{\shiftOn} commands (see +@ref{Explicitly instantiating voices}) do not resolve the note +conflict. It is preferable to the @code{extra-offset} property for +this purpose as there is no need to work out the distance in +staff-spaces, and moving the notes into or out of a @code{NoteColumn} +affects other actions such as merging note heads. + +@end itemize + +@item +Finally, when all else fails, objects may be manually repositioned +relative to the staff center line vertically, or by displacing them by +any distance to a new position. The disadvantages are that the +correct values for the repositioning have to be worked out, often by +trial and error, for every object individually, and, because the +movement is done after LilyPond has placed all other objects, the user +is responsible for avoiding any collisions that might ensue. But the +main difficulty with this approach is that the repositioning values +may need to be reworked if the music is later modified. The +properties that can be used for this type of manual repositioning are: + +@table @code +@item extra-offset + +@cindex extra-offset property + +This property applies to any layout object supporting the +@code{grob-interface}. It takes a pair of numbers which specify the +extra displacement in the horizontal and vertical directions. +Negative numbers move the object to the left or down. The units are +staff-spaces. The extra displacement is made after the typesetting of +objects is finished, so an object may be repositioned anywhere without +affecting anything else. + +@item positions + +@cindex positions property + +This is most useful for manually adjusting the slope and height +of beams, slurs, and tuplets. It takes a pair of numbers +giving the position of the left and right ends of the beam, slur, +etc. relative to the center line of the staff. Units are +staff-spaces. Note, though, that slurs and phrasing slurs cannot +be repositioned by arbitrarily large amounts. LilyPond first +generates a list of possible positions for the slur and by default +finds the slur that @qq{looks best}. If the @code{positions} +property has been overridden the slur that is closest to the +requested positions is selected from the list. +@end table + +@end enumerate + +A particular object may not have all of these properties. +It is necessary to go to the IR to look up which properties +are available for the object in question. + +Here is a list of the objects which are most likely to be +involved in collisions, together with the name of the object which +should be looked up in the IR in order to discover which properties +should be used to move them. + +@multitable @columnfractions .5 .5 +@headitem Object type @tab Object name +@item Articulations @tab @code{Script} +@item Beams @tab @code{Beam} +@item Dynamics (vertically) @tab @code{DynamicLineSpanner} +@item Dynamics (horizontally) @tab @code{DynamicText} +@item Fingerings @tab @code{Fingering} +@item Rehearsal / Text marks @tab @code{RehearsalMark} +@item Slurs @tab @code{Slur} +@item Text e.g. @code{^"text"} @tab @code{TextScript} +@item Ties @tab @code{Tie} +@item Tuplets @tab @code{TupletBracket} +@end multitable + + +@node Fixing overlapping notation +@subsection Fixing overlapping notation + +Let's now see how the properties in the previous section can +help to resolve overlapping notation. + +@subheading padding property + +@cindex padding +@cindex fixing overlapping notation +@cindex overlapping notation + +The @code{padding} property can be set to increase +(or decrease) the distance between symbols that are printed +above or below notes. + +@cindex Script, example of overriding +@cindex padding property, example + +@lilypond[quote,fragment,relative=1,verbatim] +c2\fermata +\override Script #'padding = #3 +b2\fermata +@end lilypond + +@cindex MetronomeMark, example of overriding +@cindex padding property, example + +@lilypond[quote,fragment,relative=1,verbatim] +% This will not work, see below +\override MetronomeMark #'padding = #3 +\tempo 4 = 120 +c1 | +% This works +\override Score.MetronomeMark #'padding = #3 +\tempo 4 = 80 +d1 | +@end lilypond + +Note in the second example how important it is to figure out what +context handles a certain object. Since the @code{MetronomeMark} +object is handled in the @code{Score} context, property changes in the +@code{Voice} context will not be noticed. For more details, see +@ruser{Modifying properties}. + +If the @code{padding} property of an object is increased when that +object is in a stack of objects being positioned according to +their @code{outside-staff-priority}, then that object and all +objects outside it are moved. + + +@subheading right-padding + +@cindex right-padding property + +The @code{right-padding} property affects the spacing between the +accidental and the note to which it applies. It is not often +required, but the default spacing may be wrong for certain special +accidental glyphs or combination of glyphs used in some microtonal +music. These have to be entered by overriding the accidental +stencil with a markup containing the desired symbol(s), like this: + +@cindex Accidental, example of overriding +@cindex text property, example +@cindex stencil property, example +@cindex AccidentalPlacement, example of overriding +@cindex right-padding property, example + +@lilypond[quote,ragged-right,verbatim] +sesquisharp = \markup { \sesquisharp } +\relative c'' { + c4 + % This prints a sesquisharp but the spacing is too small + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 c + % This improves the spacing + \once \override Score.AccidentalPlacement #'right-padding = #0.6 + \once \override Accidental + #'stencil = #ly:text-interface::print + \once \override Accidental #'text = #sesquisharp + cis4 | +} +@end lilypond + +@noindent +This necessarily uses an override for the accidental stencil which +will not be covered until later. The stencil type must be a +procedure, here changed to print the contents of the @code{text} +property of @code{Accidental}, which itself is set to be a +sesquisharp sign. This sign is then moved further away from the +note head by overriding @code{right-padding}. + +@noindent + +@subheading staff-padding property + +@cindex aligning objects on a baseline +@cindex objects, aligning on a baseline + +@code{staff-padding} can be used to align objects such as dynamics +along a baseline at a fixed height above the staff, rather than at a +height dependent on the position of the note to which they are +attached. It is not a property of @code{DynamicText} but of +@code{DynamicLineSpanner}. This is because the baseline should apply +equally to @strong{all} dynamics, including those created as extended +spanners. So this is the way to align the dynamic marks in the +example taken from the previous section: + +@cindex DynamicText, example of overriding +@cindex extra-spacing-width property, example +@cindex DynamicLineSpanner, example of overriding +@cindex staff-padding property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\dynamicUp +% Extend width by 1 unit +\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) +% Align dynamics to a base line 2 units above staff +\override DynamicLineSpanner #'staff-padding = #2 +a4\f b\mf c\mp b\p +@end lilypond + + +@subheading self-alignment-X property + +The following example shows how this can resolve the collision +of a string fingering object with a note's stem by aligning the +right edge with the reference point of the parent note: + +@cindex StringNumber, example of overriding +@cindex self-alignment-X property, example + +@lilypond[quote,fragment,ragged-right,verbatim,relative=3] +\voiceOne + +\once \override StringNumber #'self-alignment-X = #RIGHT + +@end lilypond + +@subheading staff-position property + +@cindex object collision within a staff + +Multimeasure rests in one voice can collide with notes in another. +Since these rests are typeset centered between the bar lines, it +would require significant effort for LilyPond to figure out which +other notes might collide with it, since all the current collision +handling between notes and between notes and rests is done only +for notes and rests that occur at the same time. Here's an +example of a collision of this type: + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< { c4 c c c } \\ { R1 } >> +@end lilypond + +The best solution here is to move the multimeasure rest down, since +the rest is in voice two. The default in @code{\voiceTwo} (i.e. in +the second voice of a @code{<<@{...@} \\ @{...@}>>} construct) is that +@code{staff-position} is set to -4 for MultiMeasureRest, so we need to +move it, say, four half-staff spaces down to @code{-8}. + +@cindex MultiMeasureRest, example of overriding +@cindex staff-position property, example + +@lilypond[quote,verbatim,fragment,ragged-right, relative=1] +<< + { c4 c c c } + \\ + \override MultiMeasureRest #'staff-position = #-8 + { R1 } +>> +@end lilypond + +This is better than using, for example, @code{extra-offset}, +because the ledger line above the rest is inserted automatically. + +@subheading extra-offset property + +@cindex positioning objects +@cindex positioning grobs +@cindex objects, positioning +@cindex grobs, positioning + +The @code{extra-offset} property provides complete control over the +positioning of an object both horizontally and vertically. + +In the following example, the second fingering is moved a little to +the left, and 1.8 staff space downwards: + +@cindex Fingering, example of overriding +@cindex extra-offset property, example + +@lilypond[quote,fragment,relative=1,verbatim] +\stemUp +f4-5 +\once \override Fingering #'extra-offset = #'(-0.3 . -1.8) +f4-5 +@end lilypond + + +@subheading positions property + +@cindex controlling tuplets, slurs, phrasing slurs, and beams manually +@cindex manually controlling tuplets, slurs, phrasing slurs, and beams +@cindex tuplet beams, controlling manually +@cindex slurs, controlling manually +@cindex phrasing slurs, controlling manually +@cindex beams, controlling manually + +The @code{positions} property allows the position and slope of +tuplets, slurs, phrasing slurs and beams to be controlled manually. +Here's an example which has an ugly phrasing slur due to its trying to +avoid the slur on the acciaccatura. + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 \acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +We could simply move the phrasing slur above the notes, and this +would be the preferred solution: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\phrasingSlurUp +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +@noindent +But if there were some reason why this could not be done the +other alternative would be to move the left end of the phrasing +slur down a little using the @code{positions} property. This +also resolves the rather nasty shape. + +@cindex PhrasingSlur, example of overriding +@cindex positions property, example + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +r4 +\once \override PhrasingSlur #'positions = #'(-4 . -3) +\acciaccatura e8\( d8 c~ c d c d\) +@end lilypond + +Here's a further example. We see that the beams +collide with the ties: + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + \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 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] +{ + \time 4/2 + << + { 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'' } + >> +} +@end lilypond + +@noindent +Note that the override continues to apply in the first voice of +the second measure of eighth notes, but not to any of the beams in the +second voice. + +@subheading force-hshift property + +We can now see how to apply the final corrections to the Chopin +example introduced at the end of @ref{I'm hearing Voices}, which +was left looking like this: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + 2 des + } + >> | + 1 | +} +@end lilypond + +@noindent +The lower two notes of the first chord (i.e, those in the third voice) +should not be shifted away from the note column of the higher two +notes. To correct this we set @code{force-hshift}, which is a +property of @code{NoteColumn}, of these notes to zero. The lower note +of the second chord is best placed just to the right of the higher +notes. We achieve this by setting @code{force-hshift} of this note to +0.5, ie half a note head's width to the right of the note column of +the higher notes. + +Here's the final result: + +@cindex NoteColumn, example of overriding +@cindex force-hshift property, example + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } + \\ + { aes2 f4 fes } + \\ + { + \voiceFour + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +@node Real music example +@subsection Real music example + +We end this section on Tweaks by showing the steps to be taken to +deal with a tricky example which needs several tweaks to produce +the desired output. The example has been deliberately chosen to +illustrate the use of the Notation Reference to resolve unusual +problems with notation. It is not representative of the more usual +engraving process, so please do not let these difficulties put +you off! Fortunately, difficulties like these are not very common! + +The example is from Chopin's Première Ballade, Op. 23, bars 6 to +9, the transition from the opening Lento to Moderato. +Here, first, is what we want the output to look like, but to avoid +over-complicating the example too much we have left out the +dynamics, fingering and pedalling. + +@c The following should appear as music without code +@c This example should not be indexed +@c line-width ensures no break +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + bes2.^\markup { \bold "Moderato" } r8 + << + { c,8 d fis bes a } + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +We note first that the right hand part in the third bar +requires four voices. These are the five beamed eighth notes, +the tied C, the half-note D which is merged with the eighth note +D, and the dotted quarter note F-sharp, which is also merged with +the eighth note at the same pitch. Everything else is in a single +voice, so the easiest way is to introduce these extra three voices +temporarily at the time they are needed. If you have forgotten +how to do this, look at @ref{I'm hearing Voices} and @ref{Explicitly +instantiating voices}. Here we choose to use explicitly instantiated +voices for the polyphonic passage, as LilyPond is better able to +avoid collisions if all voices are instantiated explicitly in this +way. + +So let us begin by entering the notes as two variables, setting up +the staff structure in a score block, and seeing what LilyPond +produces by default: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4. g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2. % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2 | + 1 | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +All the notes are right, but the appearance is far from +satisfactory. The tie collides with the change in time signature, +some notes are not merged together, and several notation elements +are missing. Let's first deal with the easier things. We can +easily add the left hand slur and the right hand phrasing slur, +since these were all covered in the Tutorial. Doing this gives: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + bes1~ | + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1) | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +The first bar is now correct. The second bar contains an arpeggio and +is terminated by a double bar line. How do we do these, as they have +not been mentioned in this Learning Manual? This is where we need to +turn to the Notation Reference. Looking up @q{arpeggio} and @q{bar +line} in the index quickly shows us that an arpeggio is produced by +appending @code{\arpeggio} to a chord, and a double bar line is +produced by the @code{\bar "||"} command. That's easily done. We +next need to correct the collision of the tie with the time signature. +This is best done by moving the tie upwards. Moving objects was +covered earlier in @ref{Moving objects}, which says that objects +positioned relative to the staff can be moved vertically by overriding +their @code{staff-position} property, which is specified in half staff +spaces relative to the center line of the staff. So the following +override placed just before the first tied note would move the tie up +to 3.5 half staff spaces above the center line: + +@code{\once \override Tie #'staff-position = #3.5} + +This completes bar two, giving: + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2. r8 + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +On to bar three and the start of the Moderato section. The tutorial +showed how to add bold text with the @code{\markup} command, so +adding @qq{Moderato} in bold is easy. But how do we merge notes in +different voices together? This is where we need to turn again to +the Notation Reference for help. A search for @qq{merge} in the +Notation Reference index quickly leads us to the commands for merging +differently headed and differently dotted notes in +@ruser{Collision resolution}. In our example we need to merge both +types of note for the duration of the polyphonic section in bar 3, +so using the information we find in the Notation Reference we add + +@example +\mergeDifferentlyHeadedOn +\mergeDifferentlyDottedOn +@end example + +@noindent +to the start of that section and + +@example +\mergeDifferentlyHeadedOff +\mergeDifferentlyDottedOff +@end example + +@noindent +to the end, giving: + +@c line-width ensures no break +@lilypond[quote,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ c2 + } + \new Voice { + \voiceThree + s8 d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +These overrides have merged the two F-sharp notes, but not the two +on D. Why not? The answer is there in the same section in the +Notation Reference -- notes being merged must have stems in +opposite directions and two notes cannot be merged successfully if +there is a third note in the same note column. Here the two D's +both have upward stems and there is a third note -- the C. We know +how to change the stem direction using @code{\stemDown}, and +the Notation Reference also says how to move the C -- apply a shift +using one of the @code{\shift} commands. But which one? +The C is in voice two which has shift off, and the two D's are in +voices one and three, which have shift off and shift on, +respectively. So we have to shift the C a further level still +using @code{\shiftOnn} to avoid it interfering with the two D's. +Applying these changes gives: + +@cindex Tie, example of overriding +@cindex staff-position property, example + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + % Move the c2 out of the main note column so the merge will work + c,8~ \shiftOnn c2 + } + \new Voice { + \voiceThree + % Stem on the d2 must be down to permit merging + s8 \stemDown d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + +Nearly there. Only two problems remain: The downward stem on the +merged D should not be there, and the C would be better positioned +to the right of the D's. We know how to do both of these from the +earlier tweaks: we make the stem transparent, and move the C with +the @code{force-hshift} property. Here's the final result: + +@cindex NoteColumn, example of overriding +@cindex force-hshift property, example +@cindex Stem, example of overriding +@cindex transparent property, example + +@c line-width ensures no break +@lilypond[quote,verbatim,ragged-right,line-width=6\in] +rhMusic = \relative c'' { + \new Voice { + r2 c4.\( g8 | + \once \override Tie #'staff-position = #3.5 + bes1~ | + \bar "||" + \time 6/4 + bes2.^\markup { \bold "Moderato" } r8 + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + % Start polyphonic section of four voices + << + { c,8 d fis bes a } % continuation of main voice + \new Voice { + \voiceTwo + c,8~ + % Reposition the c2 to the right of the merged note + \once \override NoteColumn #'force-hshift = #1.0 + % Move the c2 out of the main note column so the merge will work + \shiftOnn + c2 + } + \new Voice { + \voiceThree + s8 + % Stem on the d2 must be down to permit merging + \stemDown + % Stem on the d2 should be invisible + \once \override Stem #'transparent = ##t + d2 + } + \new Voice { + \voiceFour + s4 fis4. + } + >> | + \mergeDifferentlyHeadedOff + \mergeDifferentlyDottedOff + g2.\) % continuation of main voice + } +} + +lhMusic = \relative c' { + r2 2( | + 1)\arpeggio | + r2. d,,4 r4 r | + r4 +} + +\score { + \new PianoStaff << + \new Staff = "RH" << + \key g \minor + \rhMusic + >> + \new Staff = "LH" << + \key g \minor + \clef "bass" + \lhMusic + >> + >> +} +@end lilypond + + +@node Further tweaking +@section Further tweaking + +@menu +* Other uses for tweaks:: +* Using variables for tweaks:: +* Style sheets:: +* Other sources of information:: +* Advanced tweaks with Scheme:: +@end menu + +@node Other uses for tweaks +@subsection Other uses for tweaks + +@cindex transparent property, use of +@cindex objects, making invisible +@cindex removing objects +@cindex objects, removing +@cindex hiding objects +@cindex objects, hiding +@cindex invisible objects +@cindex objects, invisible +@cindex tying notes across voices + +@subheading Tying notes across voices + +The following example demonstrates how to connect notes in +different voices using ties. Normally, only two notes in the +same voice can be connected with ties. By using two voices, +with the tied notes in one of them + +@lilypond[quote,fragment,relative=2] +<< { b8~ b\noBeam } \\ { b8[ g] } >> +@end lilypond + +@noindent +and blanking the first up-stem in that voice, the tie appears to +cross voices: + +@cindex Stem, example of overriding +@cindex transparent property, example + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +To make sure that the just-blanked stem doesn't squeeze the tie +too much, we can lengthen the stem by setting the +@code{length} to @code{8}, + +@lilypond[quote,fragment,relative=2,verbatim] +<< + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8~ b\noBeam + } +\\ + { b8[ g] } +>> +@end lilypond + +@subheading Simulating a fermata in MIDI + +@cindex stencil property, use of +@cindex fermata, implementing in MIDI + +For outside-staff objects it is usually better to override the +object's @code{stencil} property rather than its @code{transparent} +property when you wish to remove it from the printed output. +Setting the @code{stencil} property of an object to @code{#f} will +remove that object entirely from the printed output. This means it +has no effect on the placement of other objects placed relative to +it. + +For example, if we wished to change the metronome setting in order +to simulate a fermata in the MIDI output we would not want the +metronome markings to appear in the printed output, and we would +not want it to influence the spacing between the two systems or +the positions of adjacent annotations on the staff. So setting +its @code{stencil} property to @code{#f} would be the best way. +We show here the effect of the two methods: + +@cindex MetronomeMark, example of overriding +@cindex transparent property, example + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'transparent = ##t + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@cindex MetronomeMark, example of overriding +@cindex stencil property, example + +@lilypond[quote,verbatim,ragged-right] +\score { + \relative c'' { + % Visible tempo marking + \tempo 4=120 + a4 a a + \once \override Score.MetronomeMark #'stencil = ##f + % Invisible tempo marking to lengthen fermata in MIDI + \tempo 4=80 + a4\fermata | + % New tempo for next section + \tempo 4=100 + a4 a a a | + } + \layout { } + \midi { } +} +@end lilypond + +@noindent +Both methods remove the metronome mark which lengthens the fermata +from the printed output, and both affect the MIDI timing as +required, but the transparent metronome mark in the first line +forces the following tempo indication too high while the +second (with the stencil removed) does not. + +@seealso +Music Glossary: +@rglos{system}. + +@node Using variables for tweaks +@subsection Using variables for tweaks + +@cindex variables, using for tweaks +@cindex using variables for tweaks +@cindex tweaks, using variables for + +Override commands are often long and tedious to type, and they +have to be absolutely correct. If the same overrides are to be +used many times it may be worth defining variables to hold them. + +Suppose we wish to emphasize certain words in lyrics by printing +them in bold italics. The @code{\italic} and @code{\bold} +commands only work within lyrics if they are embedded, together with +the word or words to be modified, within a @code{\markup} block, +which makes them tedious to enter. The need to embed the words +themselves prevents their use in simple variables. As an +alternative can we use @code{\override} and @code{\revert} commands? + +@example +@code{\override Lyrics . LyricText #'font-shape = #'italic} +@code{\override Lyrics . LyricText #'font-series = #'bold} + +@code{\revert Lyrics . LyricText #'font-shape} +@code{\revert Lyrics . LyricText #'font-series} +@end example + +These would also be extremely tedious to enter if there were many +words requiring emphasis. But we @emph{can} define these as two +variables and use those to bracket the words to be emphasized. +Another advantage of using variables for these overrides is that +the spaces around the dot are not necessary, since they are not +being interpreted in @code{\lyricmode} directly. Here's an example +of this, although in practice we would choose shorter names +for the variables to make them quicker to type: + +@cindex LyricText, example of overriding +@cindex font-shape property, example +@cindex font-series property, example + +@lilypond[quote,verbatim] +emphasize = { + \override Lyrics.LyricText #'font-shape = #'italic + \override Lyrics.LyricText #'font-series = #'bold +} + +normal = { + \revert Lyrics.LyricText #'font-shape + \revert Lyrics.LyricText #'font-series +} + +global = { \key c \major \time 4/4 \partial 4 } + +SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = \lyrics { + E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, +} + +VerseTwo = \lyricmode { + O | \emphasize Christ, \normal whose voice the | wa -- ters heard, +} + +VerseThree = \lyricmode { + O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood +} + +VerseFour = \lyricmode { + O | \emphasize Tri -- ni -- ty \normal of | love and pow'r +} + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Soprano" { \VerseOne } + \new Lyrics \lyricsto "Soprano" { \VerseTwo } + \new Lyrics \lyricsto "Soprano" { \VerseThree } + \new Lyrics \lyricsto "Soprano" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@node Style sheets +@subsection Style sheets + +The output that LilyPond produces can be heavily modified; see +@ref{Tweaking output}, for details. But what if you have many +input files that you want to apply your tweaks to? Or what if you +simply want to separate your tweaks from the actual music? This +is quite easy to do. + +Let's look at an example. Don't worry if you don't understand +the parts with all the @code{#()}. This is explained in +@ref{Advanced tweaks with Scheme}. + +@lilypond[quote,verbatim,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +There are some problems with overlapping output; we'll fix those using +the techniques in @ref{Moving objects}. But let's also +do something about the @code{mpdolce} and @code{inst} +definitions. They produce the output we desire, but we might want +to use them in another piece. We could simply copy-and-paste them +at the top of every file, but that's an annoyance. It also leaves +those definitions in our input files, and I personally find all +the @code{#()} somewhat ugly. Let's hide them in another file: + +@example +%%% save this to a file called "definitions.ily" +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) +@end example + +We will refer to this file using the @code{\include} command near +the top of the music file. (The extension @file{.ily} is used to +distinguish this included file, which is not meant to be compiled +on its own, from the main file.) +Now let's modify our music (let's save this file as @file{music.ly}). + +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. + +@example +\include "definitions.ily" + +\relative c'' @{ + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +That looks better, but let's make a few changes. The glissando is hard +to see, so let's make it thicker and closer to the note heads. Let's +put the metronome marking above the clef, instead of over the first +note. And finally, my composition professor hates @q{C} time signatures, +so we'd better make that @q{4/4} instead. + +Don't change @file{music.ly}, though. Replace our @file{definitions.ily} +with this: + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + \override TimeSignature #'style = #'numbered + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +\layout{ + \context { + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { + \Staff + \override TimeSignature #'style = #'numbered + } + \context { + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +That looks nicer! But now suppose that I want to publish this +piece. My composition professor doesn't like @q{C} time +signatures, but I'm somewhat fond of them. Let's copy the +current @file{definitions.ily} to @file{web-publish.ily} and +modify that. Since this music is aimed at producing a pdf which +will be displayed on the screen, we'll also increase the +overall size of the output. + +@example +%%% definitions.ily +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout@{ + \context @{ + \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ + \Staff + @} + \context @{ + \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(5 . 0) + #:line (#:dynamic "mp" + #:text #:italic "dolce"))) + +inst = +#(define-music-function + (parser location string) + (string?) + (make-music + 'TextScriptEvent + 'direction UP + 'text (markup #:bold (#:box string)))) + +#(set-global-staff-size 23) + +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | + b4 bes a2 | + \inst "Clarinet" + cis4.\< d8 e4 fis | + g8(\! fis)-. e( d)-. cis2 | +} +@end lilypond + +Now in our music, I simply replace +@code{\include "definitions.ily"} with +@code{\include "web-publish.ily"}. Of course, we could make this +even more convenient. We could make a @file{definitions.ily} file which +contains only the definitions of @code{mpdolce} and @code{inst}, a +@file{web-publish.ily} file which contains only the @code{\layout} +section listed above, and a @file{university.ily} file which +contains only the tweaks to produce the output that my professor +prefers. The top of @file{music.ly} would then look like this: + +@example +\include "definitions.ily" + +%%% Only uncomment one of these two lines! +\include "web-publish.ily" +%\include "university.ily" +@end example + +This approach can be useful even if you are only producing +one set of parts. I use half a dozen different +@q{style sheet} files for my projects. I begin every music +file with @code{\include "../global.ily"}, which contains + +@example +%%% global.ily +\version @w{"@version{}"} + +#(ly:set-option 'point-and-click #f) + +\include "../init/init-defs.ly" +\include "../init/init-layout.ly" +\include "../init/init-headers.ly" +\include "../init/init-paper.ly" +@end example + + +@node Other sources of information +@subsection Other sources of information + +The Internals Reference documentation contains a lot of information +about LilyPond, but even more information can be gathered by +looking at the internal LilyPond files. To explore these, you must +first find the directory appropriate to your system. The location +of this directory depends (a) on whether you obtained LilyPond +by downloading a precompiled binary from lilypond.org +or whether you installed it from a package manager (i.e. +distributed with Linux, or installed under fink or cygwin) or +compiled it from source, and (b) on which operating system it is +being used: + +@strong{Downloaded from lilypond.org} + +@itemize @bullet +@item Linux + +Navigate to +@file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/} + +@item MacOS X + +Navigate to +@file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/} +by either @code{cd}-ing into this directory from the +Terminal, or control-clicking on the LilyPond application and +selecting @q{Show Package Contents}. + +@item Windows + +Using Windows Explorer, navigate to +@file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/} + +@end itemize + +@strong{Installed from a package manager or compiled from source} + +Navigate to +@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, where +@var{PREFIX} is set by your package manager or @code{configure} +script, and @var{X.Y.Z} is the LilyPond version number. + +@smallspace + +Within this directory the two interesting subdirectories are + +@itemize +@item @file{ly/} - contains files in LilyPond format +@item @file{scm/} - contains files in Scheme format +@end itemize + +Let's begin by looking at some files in @file{ly/}. +Open @file{ly/property-init.ly} in a text editor. The one +you normally use for @code{.ly} files will be fine. This file +contains the definitions of all the standard LilyPond predefined +commands, such as @code{\stemUp} and @code{\slurDotted}. You will +see that these are nothing more than definitions of variables +containing one or a group of @code{\override} commands. For +example, @code{/tieDotted} is defined to be: + +@example +tieDotted = @{ + \override Tie #'dash-period = #0.75 + \override Tie #'dash-fraction = #0.1 +@} +@end example + +If you do not like the default values these predefined commands can +be redefined easily, just like any other variable, at the +head of your input file. + +The following are the most useful files to be found in +@file{ly/}: + +@multitable @columnfractions .4 .6 +@headitem Filename + @tab Contents +@item @file{ly/engraver-init.ly} + @tab Definitions of engraver Contexts +@item @file{ly/paper-defaults-init.ly} + @tab Specifications of paper-related defaults +@item @file{ly/performer-init.ly} + @tab Definitions of performer Contexts +@item @file{ly/property-init.ly} + @tab Definitions of all common predefined commands +@item @file{ly/spanner-init.ly} + @tab Definitions of spanner-related predefined commands +@end multitable + +Other settings (such as the definitions of markup commands) are +stored as @file{.scm} (Scheme) files. The Scheme programming +language is used to provide a programmable interface into +LilyPond internal operation. Further explanation of these files +is currently outside the scope of this manual, as a knowledge of +the Scheme language is required. Users should be warned that +a substantial amount of technical knowledge or time is required +to understand Scheme and these files (see @rextend{Scheme tutorial}). + +If you have this knowledge, the Scheme files which may be of +interest are: + +@multitable @columnfractions .4 .6 +@headitem Filename + @tab Contents +@item @file{scm/auto-beam.scm} + @tab Sub-beaming defaults +@item @file{scm/define-grobs.scm} + @tab Default settings for grob properties +@item @file{scm/define-markup-commands.scm} + @tab Specify all markup commands +@item @file{scm/midi.scm} + @tab Default settings for MIDI output +@item @file{scm/output-lib.scm} + @tab Settings that affect appearance of frets, colors, + accidentals, bar lines, etc +@item @file{scm/parser-clef.scm} + @tab Definitions of supported clefs +@item @file{scm/script.scm} + @tab Default settings for articulations +@end multitable + + +@node Advanced tweaks with Scheme +@subsection Advanced tweaks with Scheme + +Although many things are possible with the @code{\override} and +@code{\tweak} commands, an even more powerful way of modifying +the action of LilyPond is available through a programmable +interface to the LilyPond internal operation. Code written in +the Scheme programming language can be incorporated directly in +the internal operation of LilyPond. Of course, at least a basic +knowledge of programming in Scheme is required to do this, and an +introduction is provided in the @rextend{Scheme tutorial}. + +As an illustration of one of the many possibilities, instead of +setting a property to a constant it can be set to a Scheme +procedure which is then called whenever that property is accessed +by LilyPond. The property can then be set dynamically to a value +determined by the procedure at the time it is called. In this +example we color the note head in accordance with its position on +the staff. + +@cindex x11-color function, example of using +@cindex NoteHead, example of overriding +@cindex color property, setting to Scheme procedure + +@lilypond[quote,verbatim,ragged-right] +#(define (color-notehead grob) + "Color the notehead according to its position on the staff." + (let ((mod-position (modulo (ly:grob-property grob 'staff-position) + 7))) + (case mod-position + ;; Return rainbow colors + ((1) (x11-color 'red )) ; for C + ((2) (x11-color 'orange )) ; for D + ((3) (x11-color 'yellow )) ; for E + ((4) (x11-color 'green )) ; for F + ((5) (x11-color 'blue )) ; for G + ((6) (x11-color 'purple )) ; for A + ((0) (x11-color 'violet )) ; for B + ))) + +\relative c' { + % Arrange to obtain color from color-notehead procedure + \override NoteHead #'color = #color-notehead + a2 b | c2 d | e2 f | g2 a | +} +@end lilypond + +Further examples showing the use of these programmable interfaces +can be found in @rextend{Callback functions}. + + + diff --git a/Documentation/lily-bib.bst b/Documentation/lily-bib.bst new file mode 100644 index 0000000000..13320d46ba --- /dev/null +++ b/Documentation/lily-bib.bst @@ -0,0 +1,400 @@ +% This template file was written by Phil Holmes to replace the one used for the bibliogrphy +% on the LilyPond project. 18 Feb 2011 + +% This section lists the possible fields, although not all are handled by the template +ENTRY + { abstract + address + author + booktitle + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +% s and t came from the original. The other strings are self explanatory +STRINGS { s t } +STRINGS { ThesisType ReportType } + +% from the original +INTEGERS { nameptr namesleft numnames } + +% This was simply copied and pasted from the original +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + % This line was changed: the {ff{ } } entry outputs the first name without allowing bibtex to use + % a ~ to replace the spaces where it thinks fit. The downside is that we lose hyphens... + { s nameptr "{ff{ } }{vv }{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +% This is a very common construct. It means "if the author is empty, process the lines in the first pair +% of braces {}. Otherwise process the lines in the second pair. So if it's empty, an empty string is +% stacked. +{ author empty$ + { "" } + % If it's not empty, it formats author (and stacks the result) and then checks whether editor is empty + { author format.names + editor empty$ + % If editor is empty, it appends an empty string (the * is a postfix operator meaning append this + % string to the top entry on the stack + { "" * } + % Otherwise it appends a period, parenthesis. + { ". (" * } + if$ + } + if$ +} + +FUNCTION {format.editor} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + author empty$ + { "" * } + { ")" * } + if$ + } + if$ + +} + +FUNCTION {output.bibitem} +{ newline$ + "@item " write$ newline$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { edition " edition, " * } + if$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +FUNCTION {format.address} +{ address empty$ + { "" } + { address + year empty$ + { "" * } + { ", " * } + if$ + } + if$ +} + +FUNCTION {format.publisher} +{ + publisher empty$ + { "" } + { publisher + address empty$ + { year empty$ + { "" * } + { ", " * } + if$ + } + { ", " * } + if$ + } + if$ +} + +FUNCTION {format.note} +{ note empty$ + { "" } + { note + add.period$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { "@strong{" title * "}" * + journal empty$ + { + volume empty$ + { "" * } + { ", " * } + if$ + } + { "" * } + if$ + } + if$ +} + +FUNCTION {format.number} +{ + % ReportType is set by us when we call the correct function for the bibliography type + ReportType empty$ + { + volume empty$ + {number empty$ + { "" } + { "Number " number * ". " * } + if$ + } + { "" } + if$ + } + { ReportType + number empty$ + { ", " * } + { " " * number * ", " * institution * ", " * } + if$ + } + if$ +} + +FUNCTION {format.volume} +{ journal empty$ + { + volume empty$ + { "" } + { "volume " volume * } + if$ + } + { "" } + if$ +} + +FUNCTION {format.journal} +{ journal empty$ + { "" write$ } + { "@emph{" journal * "}" * + write$ + volume empty$ + { "" } + { ", " volume * } + if$ + write$ + number empty$ + { "" } + { "(" number * ")" * } + if$ + write$ + pages empty$ + { "" } + { ":" pages * } + if$ + write$ + year empty$ + { "" } + { ", " } + if$ + write$ + } + if$ +} + +FUNCTION {format.series} +{ series empty$ + { "" } + { series + % This is an inbuilt function that adds a period when appropriate. + add.period$ + " " * + } + if$ +} + +FUNCTION {format.booktitle} +{ booktitle empty$ + { "" } + { "In @emph{" booktitle * "}, " * + pages empty$ + { "" * } + { "pages " * pages * ", " * } + if$ + } + if$ +} + +FUNCTION {format.thesis} +{ ThesisType empty$ + { "" } + { ThesisType school * ", " *} + if$ +} + +% This is the function that runs the formatting code. It's called when the biblio type is @Book +FUNCTION {book} +{ output.bibitem + format.authors write$ + format.editor write$ + "." write$ newline$ + format.title write$ + format.volume write$ + "." write$ newline$ + format.number write$ + format.journal + format.series write$ + format.publisher write$ + format.address write$ + format.edition write$ + format.booktitle write$ + format.thesis write$ + format.date write$ + "." write$ newline$ + format.note write$ + newline$ + newline$ + newline$ + newline$ +} + +% All the following functions are called for the other biblio types. This is @article +FUNCTION {article} +{ + % And we just call the book function + book +} + +FUNCTION {booklet} +{ + book +} + +FUNCTION {PhDThesis} +{ + % This sets the string ThesisType to be equal to "PhD Thesis" + "PhD thesis, " 'ThesisType := + book + % And this sets it back to an empty string + "" 'ThesisType := +} + +FUNCTION {TechReport} +{ + "Technical Report" 'ReportType := + book + "" 'ReportType := +} + +FUNCTION {InProceedings} +{ + book +} + +FUNCTION {MastersThesis} +{ + "Master's thesis, " 'ThesisType := + book + "" 'ThesisType := +} + +FUNCTION {InBook} +{ + book +} + +% Haven't dug too deeply into this, but it seems to set the sort key +FUNCTION {presort} +{ cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +% The entry point for processing + +% Read the .bib file +READ + +% Work through the entries, calling the presort function +ITERATE {presort} + +% Sort the entries +SORT + +% This could go higher with all the other functions, but it _has_ to be above the call +FUNCTION {begin.bib} +{ "@c bib -> itexi intro" write$ newline$ + "@itemize" write$ newline$ +} + +% Run the begin.bib function +EXECUTE {begin.bib} + +% For each bibliogrpahy entry call the relevant function (e.g. book, article, booklet, etc.) +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "@end itemize" write$ newline$ + "@c bib -> itexi end" write$ newline$ +} + +EXECUTE {end.bib} +% And that's it. diff --git a/Documentation/lily_index_search.php b/Documentation/lily_index_search.php new file mode 100644 index 0000000000..518654dacb --- /dev/null +++ b/Documentation/lily_index_search.php @@ -0,0 +1,62 @@ +"en", "cs"=>"cs", "de"=>"de", "nl"=>"nl", "ja"=>"ja", "hu"=>"hu", "fr"=>"fr", "zh"=>"zh", ""=>"en"); + $manuals = array ("essay"=>"essay", "extending"=>"extending", "learning"=>"learning", "notation"=>"notation", "usage"=>"usage"); + + $lang = $languages[$_REQUEST['lang']]; + $man = $manuals[$_REQUEST['manual']]; + if (!$man) { + echo "

Invalid manual " . $_REQUEST['lang'] . "

"; + exit (); + } + $bigpage = ($_REQUEST['bigpage'] == "1"); + $search_string = $_REQUEST['q']; + // If enter was pressed, browsers will use the returned HTML for a complete page! + $form_submitted = $_REQUEST['form_submitted']; + + + $relpath = ""; + if ($form_submitted) { + if (! $bigpage) { + $relpath = "$man/"; + } + echo "\n"; + } + + $filename = "./$man"; + if ($bigpage) { $filename .= "-big-page"; } + $filename .= ".$lang.idx"; + + $found = 0; + $file = @fopen($filename, "r"); + if ($file ) { + while ( (($line=fgets($file)) !== false) ) { + $line = rtrim($line); + $entries = split ("\t", $line); + if (stripos ($entries[0], $search_string) !== false) { + if ($found == 0) { + echo "

Search results for "".htmlentities($search_string, ENT_QUOTES)."":
\n"; + echo "\n"; + } else if ($found > 50) { + echo "\n"; + break; + } + // format the entry and print it out + echo "\n"; + echo " \n"; + $found++; + } + } + if ($found > 0) { + echo "
Too many hits, displaying only 50 results
$entries[1]$entries[3]
\n"; + } else { + echo "No results found in the index.\n"; + } + echo "

"; + fclose($file); + } else { + echo "

Unable to open search index $filename

"; + } + if ($form_submitted) { + echo "\n"; + } +?> diff --git a/Documentation/lily_search.js b/Documentation/lily_search.js new file mode 100644 index 0000000000..09516b306b --- /dev/null +++ b/Documentation/lily_search.js @@ -0,0 +1,101 @@ +var resObject = null; +var useAjax = (document.location.protocol.toLowerCase() == 'http:'); +var isLocal = !useAjax; + +var previous_search = ""; + +function erzXMLHttpRequestObject () +{ + var resObject = null; + try { + resObject = new XMLHttpRequest (); + } + catch (Error) { + try { + resObject = new ActiveXObject ("Microsoft.XMLHTTP"); + } + catch (Error) { + try { + resObject = new ActiveXObject ("MSXML2.XMLHTTP"); + } + catch (Error) { + alert ("Unable to create XMLHttpRequest object for the search function!"); + useAjax = false; + } + } + } + return resObject; +} + +function searchResult (language, manual, bigpage) +{ + search_string = this.document.search_form.q.value; + if (useAjax && previous_search != search_string) { + if (useAjax && search_string.length >= 3) { + var reldir = ""; + if (bigpage == 0) { + reldir = "../" + } + resObject.open ('get', reldir + 'lily_index_search.php?lang=' + escape(language) + '&manual=' + escape(manual) + '&bigpage=' + bigpage + '&q=' + escape(search_string), true); + resObject.onreadystatechange = handleResponse; + resObject.send (null); + } else { + clearResults (); + } + previous_search = search_string; + } +} + +function result_field () +{ + return document.getElementById ('search_results'); +} +function assignResults (results) +{ + field = result_field (); + field.innerHTML = resObject.responseText; + field.style.display = 'block'; +} + +function handleResponse () +{ + if (resObject.readyState == 4 ) { + assignResults (resObject.responseText); + } +} + +function clearResults () +{ + field = result_field (); + field.innerHTML = 0; + field.style.display = 'none'; +} + + +function print_search_field (language, manual, bigpage) +{ + if (useAjax) { + // If the user presses enter and submits the form, also call the search + // script to print out the results in a separate page + search_call = "searchResult('" + language + "', '" + manual + "', " + bigpage + ")"; + var reldir = ""; + if (bigpage == 0) { + reldir = "../" + } + search_script = reldir + 'lily_index_search.php'; + document.write("
"); + document.write("
"); + document.write(""); + document.write(""); + document.write(""); + document.write(""); + document.write("

Search: "); + document.write("

"); + document.write("
"); + document.write("
"); + document.write("
"); + } +} +if (useAjax) { + resObject = erzXMLHttpRequestObject (); +} \ No newline at end of file diff --git a/Documentation/lilypond-blue.css b/Documentation/lilypond-blue.css deleted file mode 100644 index 47ac507731..0000000000 --- a/Documentation/lilypond-blue.css +++ /dev/null @@ -1,355 +0,0 @@ -/**********************************************************/ -/* PAGE-WIDE SETTINGS */ -/**********************************************************/ - -html { - height: 100%; -} - -body { - background-color: white; - color: black; - font-size: 87.5%; - height: 100%; - line-height: 1.125; - margin: 0 auto; - padding: 0; -} - - -/***********************************************************/ -/* HEADERS */ -/***********************************************************/ - -.chapter, .section, .subsection, -.appendix, .appendixsec, .appendixsubsec, -.unnumberedsubsubsec, .subsubheading, -.unnumbered, .subheading { - border-bottom: 1px dashed #bbb; - color: #204a87; - margin: 1em 0; - padding-bottom: 0.4em; -} - -.settitle { - background-color: #eef; - border-bottom: 1px solid #3465A4; - font-size: 2em; - margin: 0.5em 0 0 0; - padding: 0.5em; -} - -.chapter { - font-size: 1.8em; - padding: 0.5em; -} - -.section { - font-size: 1.6em; - padding: 0.5em; -} - -.subsection { - font-size: 1.4em; - padding: 0.5em; -} - -.unnumberedsubsubsec { - font-size: 1.25em; - padding: 0.5em; -} - -.subsubheading { - font-size: 1em; - font-weight: bold; - padding: 0.5em 1em; -} - -/***********************************************************/ -/* LINKS */ -/***********************************************************/ - -a:link { - /* color: #4169e1; */ - /* color: #3555b6; */ - color: #3465a4; -} - -a:visited { - color: #8f5902; -} - -a:hover { - color: #ce5c00; -} - -a:active { - color: #4487D7; -} - -/***********************************************************/ -/* BLOCK FORMATTING */ -/***********************************************************/ - -blockquote, .smallexample { - border: thin solid #3465a4; - border-width: 0 0 0 2px; - margin: 1em 0 1em 3em; - padding: 0; -} - -blockquote p, pre.smallexample { - margin: 0; - padding: 1em; -} - -blockquote blockquote { - border: none; - /* border: thick red dashed; */ -} - -.verbatim, .example, .lisp { - font-size: 1.25em; - margin: 0; - padding: 1em; -} - -hr { - display: none; -} - -table.cartouche { - background: #eee; - border: 1px solid #3465a4; - border-width: 0 0 0 2px; - width: 85%; - padding: 0 0.5em; - margin: 1em 0 1em 3em; -} - -table.cartouche p { - padding: 1em; - margin: 0; -} - -table.cartouche td { - border: none; -} - -/***********************************************************/ -/* MAIN CONTENT */ -/***********************************************************/ - -div#main { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 25%; - padding: 0; - margin: 0; - overflow: auto; -} - -div#main li { - padding: 0 1em 0.5em 0; -} - -div#main ul { - margin: 0; -} - -h1, h2, h3, h4, p, table, address, dt { - padding-left: 1em; - padding-right: 1em; -} - -p { - margin: 1em 0; -} - -th { - text-align: left; -} - -#languages { - margin: 0; - padding: 1em; -} - -pre.menu-comment { - font-size: 1em; - padding-top: 1em; - padding-bottom: 0; - margin: 0; -} - -/***********************************************************/ -/* TOC SIDEBAR */ -/***********************************************************/ - -div#tocframe { - background-color: #F9FCFF; - font-size: 0.83em; - line-height: 1.4; - list-style-type: none; - margin: 0; - padding: 0; - position: absolute; - bottom: 0; - left: 0; - right: 75%; - top: 0; - overflow: auto; - z-index: 100; -} - -/* position: fixed for savvy browsers */ - -@media screen { - body > div#tocframe { - position: fixed; - } -} - -div#tocframe h4 { - background-color: #eef; - border: 1px solid #3465A4; - border-width: 0 0 1px 0; - color: #344; - font-size: 1.2em; - font-weight: normal; - height: 26px; - margin: 0; - padding: 8px 0 0 6px; -} - -#tocframe .contents { - background-color: transparent; - border: none; - list-style-type: none; - margin: 0; - padding: 0; -} - -#tocframe ul.toc { - list-style-type: none; - margin: 0; - padding: 1em 0.5em; -} - -#tocframe ul.toc ul.toc { - margin: 0; - padding: 0; -} - -#tocframe ul.toc li { - margin: 0; - padding: 0; -} - -#tocframe ul.toc > li { - font-size: 1em; -} - -#tocframe ul.toc li li { - padding-left: 1em; -} - -li.toc_current { - font-style: italic; - font-weight: bold; -} - -li.toc_current ul { - background: transparent; - font-style: normal; - font-weight: normal; -} - - -/***********************************************************/ -/* NAVIGATION */ -/***********************************************************/ - -.nav_table { - background-color: #eef; - border: 1px solid #3465A4; - border-width: 0 0 1px 0; - font-size: 0.8em; - margin: 0; - padding: 0; - width: 100%; -} - -div.header { - background-color: #dde; - margin: 0.75em 0 0 0; -} - -div.header h1 { - margin: 0; - padding: 0.5em 0 0.5em 1em; -} - -div.subheader { - background-color: #eef; - margin: 0; -} - -div.subheader p { - margin: 0; - padding: 1em 0 1em 2em; -} - -table#navigation { - line-height: 1.5; - margin: 1em 0 1em 3em; - padding: 0; -} - -table#navigation td { - padding: 0.5em 0.75em; -} - -table#navigation ul { - margin-bottom: 1em; - padding-left: 0.5em; -} - -table .title { - font-weight: bold; -} - -.footer { - background-color: #eef; - border: 1px solid #3465A4; - border-width: 0 0 1px 0; - font-size: 0.8em; - text-indent: 1em; - padding: 1.5em 0; - margin: 1em 0 0 0; -} - -.footer p { - line-height: 1.5; - padding: 0; - margin: 0 0.25em; -} - -table.menu { - margin: 0 0 1em; -} - -/***********************************************************/ -/* OVERRIDES FOR PRINTING */ -/***********************************************************/ - -@media print { - body { padding-left: 0; font: 10pt Georgia, Garamond, serif;} - /* Hide the sidebar: */ - #tocframe { display: none; } - .nav_table { display: none; } - /* Let #main expand to fill the new space */ - div#main { position: static; left: 0; } -} \ No newline at end of file diff --git a/Documentation/lilypond-mccarty.css b/Documentation/lilypond-mccarty.css deleted file mode 100644 index ee917448cc..0000000000 --- a/Documentation/lilypond-mccarty.css +++ /dev/null @@ -1,415 +0,0 @@ -/**********************************************************/ -/* PAGE-WIDE SETTINGS */ -/**********************************************************/ - -html { - height: 100%; -} - -body { - margin: 0 auto; - padding: 0; - height: 100%; - font-size: 100%; - line-height: 1.125; - color: #000; - background-color: #fff; -} - -/***********************************************************/ -/* HEADERS */ -/***********************************************************/ - -.chapter, .section, .subsection, .subsubsection, -.appendix, .appendixsec, .appendixsubsec, -.unnumbered, .unnumberedsec, .unnumberedsubsec, .unnumberedsubsubsec, -.subheading, .subsubheading { - color: #204a87; - border-bottom: 1px dashed black; - padding-bottom: 0.15em; - margin-top: 0.6em; - margin-bottom: 1em; -} - -.settitle { - background: #b1d281; - font-size: 2em; - text-align: center; - padding: 0.4em 0.5em; - border: solid #7b925a; - border-width: 1px 0; - margin: 0; -} - -.chapter, .appendix, .unnumbered { - font-size: 1.8em; -} - -.section, .appendixsec, .unnumberedsec { - font-size: 1.6em; -} - -.subsection, .appendixsubsec, .unnumberedsubsec { - font-size: 1.4em; -} - -.subheading, .subsubsection, .unnumberedsubsubsec { - font-size: 1.25em; -} - -.subsubheading { - font-size: 1em; - font-weight: bold; -} - -.chapheading { - position: absolute; - height: 0; - overflow: hidden; - text-indent: -999em; -} - -/***********************************************************/ -/* LINKS */ -/***********************************************************/ - -a:link { - color: #0c51ab; -} - -a:visited { - color: #804f01; -} - -a:active { - color: #278800; -} - -a:hover { - color: #0105ad; -} - -/***********************************************************/ -/* BLOCK FORMATTING */ -/***********************************************************/ - -blockquote, .smallexample { - width: 96%; - padding: 0; - border: solid #b1d281; - border-width: 1px 1px 1px 5px; - margin: 1em auto; -} - -blockquote p, pre.smallexample { - padding: 1em; - margin: 0; -} - -blockquote blockquote { - border: none; -} - -.verbatim, .example, .lisp { - font-size: 1em; - padding: 1em; - margin: 0; -} - -#main hr { - height: 0; - padding: 0; - border: 0; - margin: 0; - text-indent: -999em; -} - -table.cartouche { - background: #f5f5dc; - width: 85%; - border-collapse: collapse; - padding: 0 0.5em; - border: 2px solid #8f5902; - margin: 0 auto 1em; -} - -table.cartouche p { - padding: 1em; - margin: 0; -} - -table.cartouche td { - border: none; -} - -/***********************************************************/ -/* MAIN CONTENT */ -/***********************************************************/ - -div#main { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 27%; - padding: 0; - margin: 0; - overflow: auto; -} - -div#main li { - padding: 0 1em 0.5em 0; -} - -div#main ul { - margin: 0; - padding-left: 3em; -} - -h1, h2, h3, h4, p, table, address, dt { - padding-left: 1em; - padding-right: 1em; -} - -p { - margin: 1em 0; -} - -#languages { - padding: 0.5em 1em; - margin: 0; -} - -pre.menu-comment { - font-size: 1em; - padding-top: 1em; - padding-bottom: 0; - margin: 0; -} - -#main .contents li { - padding-bottom: 0; -} - -#main .contents > ul { - margin-bottom: 1em; -} - -/***********************************************************/ -/* TOC SIDEBAR */ -/***********************************************************/ - -div#tocframe { - position: absolute; - top: 0; - right: 73%; - bottom: 0; - left: 0; - padding: 0; - margin: 0; - overflow: auto; - background: #f5f5dc; - z-index: 100; - list-style-type: none; - font-size: 0.83em; - line-height: 1.3; -} - -@media screen { - body > div#tocframe { - position: fixed - } -} - -div#tocframe a:link, div#tocframe a:visited { - color: #454532; - text-decoration: none; -} - -div#tocframe a:hover { - color: #232b16; - text-decoration: underline; -} - -div#tocframe p.toc_uplink { - font-size: 1em; - line-height: 1.125; - background: #c9ccc4; - padding: 0.25em 1em 0.25em 0.5em; - border-bottom: 1px solid #a0a087; - margin: 0; -} - -div#tocframe p.toc_uplink a:link, -div#tocframe p.toc_uplink a:visited { - color: #1c1c1b; -} - -div#tocframe p.toc_uplink a:hover { - color: #000; -} - -div#tocframe h4 { - font-size: 1em; - line-height: 1.125; - font-weight: bold; - font-style: italic; - padding: 0.75em 0.5em 0 0.5em; - margin: 0; -} - -#tocframe .contents { - background-color: transparent; - list-style-type: none; - padding: 0; - border: 0; - margin: 0; -} - -#tocframe ul.toc { - padding: 0.25em 0.5em 1em 0.5em; - list-style-type: none; - margin: 0; -} - -#tocframe ul.toc ul.toc { - padding: 0; - margin: 0; -} - -#tocframe ul.toc li { - padding: 0; - margin: 0; -} - -#tocframe ul.toc > li { - font-size: 1em; -} - -#tocframe ul.toc li li { - padding-left: 1em; -} - -li.toc_current { - font-weight: bold; - font-style: italic; -} - -li.toc_current ul { - font-weight: normal; - font-style: normal; - background: transparent; -} - -/***********************************************************/ -/* NAVIGATION */ -/***********************************************************/ - -.nav_table { - width: 100%; - background: #c9ccc4; - font-size: 0.83em; - border-collapse: collapse; - padding: 0; - border: none; - margin: 0; -} - -.nav_table a:link, .nav_table a:visited { - color: #1c1c1b; - text-decoration: none; -} - -.nav_table a:hover { - color: #000; - text-decoration: underline; -} - -.nav_table tr, .nav_table a { - padding: 0; - margin: 0; -} - -.nav_table td { - padding: 0.25em; - margin: 0; -} - -div.header { - background: #b1d281; - text-align: center; - padding: 0.5em; - border-bottom: 1px solid #7b925a; - margin: 0; - height: auto; -} - -div.header h1 { - font-size: 2em; - padding: 0.25em; - margin: 0; -} - -div.subheader { - background: #ddd; - padding: 0; - margin: 0; - text-align: center; -} - -div.subheader p { - padding: 0.5em; - margin: 0; -} - -table#navigation { - line-height: 1.5; - padding: 0; - margin: 1em auto; -} - -table#navigation td { - padding: 0.5em 0.75em; -} - -table#navigation ul { - padding-left: 0.5em; - margin: 0; -} - -table .title { - font-weight: bold; -} - -.footer { - background: #e5f5ce; - font-size: 0.8em; - padding: 0.2em 0; - border: solid #b1d281; - border-width: 0 0 5px 0; - margin: 0; -} - -.footer a:link { - color: #0308fc; -} - -.footer p { - padding: 0 1.25em; - margin: 0.4em 0; -} - -table.menu { - margin: 0 0 1em; -} - -/***********************************************************/ -/* OVERRIDES FOR PRINTING */ -/***********************************************************/ - -@media print { - /* Hide the sidebar: */ - body { padding-left: 0; } - #tocframe { display: none; } - .nav_table { display: none; } -} diff --git a/Documentation/lilypond-texi2html.init b/Documentation/lilypond-texi2html.init index 8b1a749e65..0b542ed777 100644 --- a/Documentation/lilypond-texi2html.init +++ b/Documentation/lilypond-texi2html.init @@ -1,11 +1,11 @@ #!/usr/bin/env perl # -*- coding: utf-8; -*- -### texi2html customization script for Lilypond +### texi2html customization script for LilyPond ### Author: Reinhold Kainhofer , 2008. ### Some code parts copied from texi2html and adapted. These functions ### were written mainly by Patrice Dumas -### License: GPLv2+ +### License: GPLv3+ ### ### ### Features implemented here: @@ -13,7 +13,7 @@ ### -) All @unnumbered* sections are placed into the same file ### (implemented by split_at_numbered_sections) ### -) Use our custom CSS file, with IE-specific fixes in another CSS file, -### impelmented by lilypond_css_lines +### implemented by lilypond_css_lines ### -) TOC (folded, with the current page highlighted) in an overflown
''' + +web_footer = ''' + +''' + footer_name_version = _doc ('This page is for %(package_name)s-%(package_version)s (%(branch_str)s).') # ugh, must not have "_doc" in strings because it is naively replaced with "_" in hacked gettext process -footer_report_links = _doc ('Your suggestions for the documentation are welcome, please report errors to our bug list.') +footer_report_links = _doc ('We welcome your aid; please help us by reporting errors to our bug list.') mail_address = 'http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs' -suggest_Docs_url = 'http://lilypond.org/web/devel/participating/documentation-adding' +help_us_url = 'http://lilypond.org/help-us.html' header_tag = '' header_tag_re = re.compile (header_tag) @@ -91,43 +101,44 @@ def build_pages_dict (filelist): def source_links_replace (m, source_val): return 'href="' + os.path.join (source_val, m.group (1)) + '"' -splitted_docs_re = re.compile ('(input/lsr/out-www/lilypond-snippets|\ -Documentation/user/out-www/(lilypond|music-glossary|lilypond-program|\ -lilypond-learning))/') - -snippets_ref_re = re.compile (r'href="(\.\./)?lilypond-snippets') -user_ref_re = re.compile ('href="(?:\.\./)?lilypond\ -(-internals|-learning|-program|(?!-snippets))') +# More hardcoding, yay! +splitted_docs_re = re.compile('(Documentation/out-www/(automated-engraving|essay|notation|changes|extending|music-glossary|usage|web|learning|snippets))/') +lily_snippets_re = re.compile ('(href|src)="([0-9a-f]{2}/lily-.*?)"') +pictures_re = re.compile ('src="(pictures/.*?)"') docindex_link_re = re.compile (r'href="index.html"') - +manuals_page_link_re = re.compile (r'href="((?:\.\./)+)Documentation/web/manuals') ## Windows does not support symlinks. # This function avoids creating symlinks for splitted HTML manuals # Get rid of symlinks in GNUmakefile.in (local-WWW-post) # this also fixes missing PNGs only present in translated docs -def hack_urls (s, prefix): +def hack_urls (s, prefix, target, is_development_branch): if splitted_docs_re.match (prefix): - s = re.sub ('(href|src)="(../lily-.*?|.*?[.]png)"', '\\1="../\\2"', s) - - # fix xrefs between documents in different directories ad hoc - if 'user/out-www/lilypond' in prefix: - s = snippets_ref_re.sub ('href="source/input/lsr/lilypond-snippets', s) - elif 'input/lsr' in prefix: - s = user_ref_re.sub ('href="source/Documentation/user/lilypond\\1', s) - + s = lily_snippets_re.sub ('\\1="../\\2"', s) + s = pictures_re.sub ('src="../\\1"', s) + # we also need to replace in the lsr, which is already processed above! - if 'input/' in prefix or 'Documentation/topdocs' in prefix: + if 'input/' in prefix or 'Documentation/topdocs' in prefix or \ + 'Documentation/contributor' in prefix: # fix the link from the regtest, lsr and topdoc pages to the doc index # (rewrite prefix to obtain the relative path of the doc index page) rel_link = re.sub (r'out-www/.*$', '', prefix) rel_link = re.sub (r'[^/]*/', '../', rel_link) - if 'input/regression' in prefix: - indexfile = "Documentation/devel/index" + if 'input/regression' in prefix or 'Documentation/contributor' in prefix: + indexfile = "Documentation/devel" else: indexfile = "index" s = docindex_link_re.sub ('href="' + rel_link + indexfile + '.html\"', s) - + # make the "return to doc index" work with the online website. + if target == 'online': + if (('Documentation/contributor' in prefix) or + is_development_branch): + manuals_page = 'development' + else: + manuals_page = 'manuals' + s = manuals_page_link_re.sub (r'href="../../\1website/%s' + % manuals_page, s) source_path = os.path.join (os.path.dirname (prefix), 'source') if not os.path.islink (source_path): return s @@ -140,9 +151,7 @@ doctype_re = re.compile ('(?i)\n' css_re = re.compile ('(?i)]*)href="[^">]*?lilypond.*\.css"([^>]*)>') end_head_tag_re = re.compile ('(?i)') -css_link = """ - - +css_link = """ @@ -159,10 +168,8 @@ def add_header (s, prefix): if not n: s = header + s - s = header_tag + '\n' + s - if doctype_re.search (s) == None: - s = doctype + s + s = doctype + header_tag + '\n' + s if css_re.search (s) == None: depth = (prefix.count ('/') - 1) * '../' @@ -217,7 +224,7 @@ online_links_re = re.compile ('''(href|src)=['"]\ ((?!Compiling-from-source.html")[^/][.]*[^.:'"]*)\ ([.]html)(#[^"']*|)['"]''') offline_links_re = re.compile ('href=[\'"]\ -((?!Compiling-from-source.html")[^/][.]*[^.:\'"]*)([.]html)(#[^"\']*|)[\'"]') +((?!Compiling-from-source.html")(?![.]{2}/contributor)[^/][.]*[^.:\'"]*)([.]html)(#[^"\']*|)[\'"]') big_page_name_re = re.compile ('''(.+?)-big-page''') def process_i18n_big_page_links (match, prefix, lang_ext): @@ -225,7 +232,8 @@ def process_i18n_big_page_links (match, prefix, lang_ext): if big_page_name: destination_path = os.path.normpath (os.path.join (os.path.dirname (prefix), big_page_name.group (0))) - if not lang_ext in pages_dict[destination_path]: + if not (destination_path in pages_dict and + lang_ext in pages_dict[destination_path]): return match.group (0) return 'href="' + match.group (1) + '.' + lang_ext \ + match.group (2) + match.group (3) + '"' @@ -341,12 +349,15 @@ def process_html_files (package_name = '', in_f.close() s = s.replace ('%', '%%') - s = hack_urls (s, prefix) + s = hack_urls (s, prefix, target, bool (int (versiontup[1]) % 2)) s = add_header (s, prefix) ### add footer if footer_tag_re.search (s) == None: - s = add_footer (s, footer_tag + footer) + if 'web' in file_name: + s = add_footer (s, footer_tag + web_footer) + else: + s = add_footer (s, footer_tag + footer) available, missing = find_translations (prefix, lang_ext) page_flavors = process_links (s, prefix, lang_ext, file_name, missing, target) diff --git a/python/book_base.py b/python/book_base.py new file mode 100644 index 0000000000..b73f37336e --- /dev/null +++ b/python/book_base.py @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- + +import lilylib as ly +import book_snippets as BookSnippet +from book_snippets import * +import re +global _;_=ly._ + +progress = ly.progress +warning = ly.warning +error = ly.error + +######################################################################## +# Helper functions +######################################################################## + +def find_file (name, include_path, raise_error=True): + for i in include_path: + full = os.path.join (i, name) + if os.path.exists (full): + return full + + if raise_error: + error (_ ("file not found: %s") % name + '\n') + exit (1) + return '' + +def verbatim_html (s): + return re.sub ('>', '>', + re.sub ('<', '<', + re.sub ('&', '&', s))) + + +######################################################################## +# Option handling +######################################################################## + +#TODO: Definitions just once in all files!!! +LINE_WIDTH = 'line-width' + +# TODO: Implement the intertext snippet option: +# 'intertext': r',?\s*intertext=\".*?\"', + +default_snippet_opts = { 'alt': "[image of music]" } + + +######################################################################## +# format handling +######################################################################## + +all_formats = [] +def register_format (fmt): + all_formats.append (fmt) + + + +######################################################################## +# Snippet handling +######################################################################## + +# Use this for sorting the keys of the defined snippet types (the dict +# is unsorted, so we need to return sorted keys to ensure processing +# in a pre-defined order) +# Containing blocks must be first, see find_toplevel_snippets. + +snippet_type_order = [ + 'multiline_comment', + 'verbatim', + 'verb', + 'lilypond_block', + 'singleline_comment', + 'lilypond_file', + 'include', + 'lilypond', + 'lilypondversion', +] + + + +######################################################################## +# Base class for all output formats +######################################################################## + +class BookOutputFormat: + def __init__ (self): + self.format = None + self.default_extension = None + self.snippet_res = {} + self.output = {} + self.handled_extensions = [] + self.image_formats = "ps,png" + self.global_options = {} + self.document_language = '' + self.default_snippet_options = default_snippet_opts + self.snippet_option_separator = "\s*,\s*" + + def supported_snippet_types (self): + # Sort according to snippet_type_order, unknown keys come last + keys = self.snippet_res.keys () + # First the entries in snippet_type_order in that order (if present) + # then all entries not in snippet_type_order in given order + res = filter (lambda x:x in keys, snippet_type_order) + filter (lambda x:x not in snippet_type_order, keys) + return res + + def snippet_regexp (self, snippettype): + return self.snippet_res.get (snippettype, None) + + def can_handle_format (self, format): + return format == self.format + def can_handle_extension (self, extension): + return extension in self.handled_extensions + + def add_options (self, option_parser): + pass + + def process_options (self, global_options): + pass + + + def process_options_pdfnotdefault (self, global_options): + ## prevent PDF from being switched on by default. + global_options.process_cmd += ' --formats=eps ' + if global_options.create_pdf: + global_options.process_cmd += "--pdf -dinclude-eps-fonts -dgs-load-fonts " + if global_options.latex_program == 'latex': + global_options.latex_program = 'pdflatex' + + + def snippet_class (self, type): + return BookSnippet.snippet_type_to_class.get (type, BookSnippet.Snippet) + + def get_document_language (self, source): + return '' + + + def init_default_snippet_options (self, source): + self.document_language = self.get_document_language (source) + if LINE_WIDTH not in self.default_snippet_options: + line_width = self.get_line_width (source) + if line_width: + self.default_snippet_options[LINE_WIDTH] = line_width + + def get_line_width (self, source): + return None; + + def split_snippet_options (self, option_string): + if option_string: + return re.split (self.snippet_option_separator, option_string) + return [] + + def input_fullname (self, input_filename): + return find_file (input_filename, self.global_options.include_path) + + def adjust_snippet_command (self, cmd): + return cmd + + def process_chunks (self, chunks): + return chunks + + def snippet_output (self, basename, snippet): + warning (_("Output function not implemented")) + return '' + + def output_simple (self, type, snippet): + return self.output.get (type, '') % snippet.get_replacements () + + def output_simple_replacements (self, type, variables): + return self.output.get (type, '') % variables + + def output_print_filename (self, basename, snippet): + str = '' + rep = snippet.get_replacements () + if PRINTFILENAME in snippet.option_dict: + rep['base'] = basename + rep['filename'] = os.path.basename (snippet.substring ('filename')) + str = self.output[PRINTFILENAME] % rep + + return str + + def required_files (self, snippet, base, full, required_files): + return [] + + def required_files_png (self, snippet, base, full, required_files): + # UGH - junk global_options + res = [] + if (base + '.eps' in required_files and not snippet.global_options.skip_png_check): + page_count = BookSnippet.ps_page_count (full + '.eps') + if page_count <= 1: + res.append (base + '.png') + else: + for page in range (1, page_count + 1): + res.append (base + '-page%d.png' % page) + return res diff --git a/python/book_docbook.py b/python/book_docbook.py new file mode 100644 index 0000000000..5ae766bbaf --- /dev/null +++ b/python/book_docbook.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- + +import book_base as BookBase +from book_snippets import * + +# Recognize special sequences in the input. +# +# (?Pregex) -- Assign result of REGEX to NAME. +# *? -- Match non-greedily. +# (?!...) -- Match if `...' doesn't match next (without consuming +# the string). +# +# (?m) -- Multiline regex: Make ^ and $ match at each line. +# (?s) -- Make the dot match all characters including newline. +# (?x) -- Ignore whitespace in patterns. +# Possible keys are: +# 'multiline_comment', 'verbatim', 'lilypond_block', 'singleline_comment', +# 'lilypond_file', 'include', 'lilypond', 'lilypondversion' +Docbook_snippet_res = { + 'lilypond': + r'''(?smx) + (?P + <(?P(inline)?)mediaobject>\s* + \s* + .*?)")?> + (?P.*?) + \s* + \s* + )''', + + 'lilypond_block': + r'''(?smx) + (?P + <(?P(inline)?)mediaobject>\s* + \s* + .*?)")?> + (?P.*?) + \s* + \s* + )''', + + 'lilypond_file': + r'''(?smx) + (?P + <(?P(inline)?)mediaobject>\s* + \s* + |>\s*)\s* + \s* + )''', + + 'multiline_comment': + r'''(?smx) + (?P + \s*(?!@c\s+) + (?P) + \s)''', +} + + +Docbook_output = { + FILTER: r''' + + +%(code)s + + +''', + + OUTPUT: r''' + + + + +''', + + PRINTFILENAME: r''' + + + + %(filename)s + + + +''', + + VERBATIM: r''' +%(verb)s''', + + VERSION: r'''%(program_version)s''', +} + + + + +class BookDocbookOutputFormat (BookBase.BookOutputFormat): + def __init__ (self): + BookBase.BookOutputFormat.__init__ (self) + self.format = "docbook" + self.default_extension = ".xml" + self.snippet_res = Docbook_snippet_res + self.output = Docbook_output + self.handled_extensions = ['.lyxml'] + self.snippet_option_separator = '\s*' + + def adjust_snippet_command (self, cmd): + if '--formats' not in cmd: + return cmd + ' --formats=png,pdf ' + else: + return cmd + + def snippet_output (self, basename, snippet): + str = '' + rep = snippet.get_replacements (); + for image in snippet.get_images (): + rep['image'] = image + (rep['base'], rep['ext']) = os.path.splitext (image) + str += self.output[OUTPUT] % rep + str += self.output_print_filename (basename, snippet) + if (snippet.substring('inline') == 'inline'): + str = '' + str + '' + else: + str = '' + str + '' + if VERBATIM in snippet.option_dict: + rep['verb'] = BookBase.verbatim_html (snippet.verb_ly ()) + str = self.output[VERBATIM] % rep + str + return str + + +BookBase.register_format (BookDocbookOutputFormat ()); diff --git a/python/book_html.py b/python/book_html.py new file mode 100644 index 0000000000..cf56dd5f49 --- /dev/null +++ b/python/book_html.py @@ -0,0 +1,143 @@ +# -*- coding: utf-8 -*- + +import book_base as BookBase +import copy +from book_snippets import * + +# Recognize special sequences in the input. +# +# (?Pregex) -- Assign result of REGEX to NAME. +# *? -- Match non-greedily. +# (?!...) -- Match if `...' doesn't match next (without consuming +# the string). +# +# (?m) -- Multiline regex: Make ^ and $ match at each line. +# (?s) -- Make the dot match all characters including newline. +# (?x) -- Ignore whitespace in patterns. +# Possible keys are: +# 'multiline_comment', 'verbatim', 'lilypond_block', 'singleline_comment', +# 'lilypond_file', 'include', 'lilypond', 'lilypondversion' +HTML_snippet_res = { + 'lilypond': + r'''(?mx) + (?P + .*?))?\s*:\s*(?P.*?)\s*/>)''', + + 'lilypond_block': + r'''(?msx) + (?P + .*?)\s*> + (?P.*?) + )''', + + 'lilypond_file': + r'''(?mx) + (?P + .*?)\s*> + \s*(?P.*?)\s* + )''', + + 'multiline_comment': + r'''(?smx)(?P\s*(?!@c\s+)(?P)\s)''', + + 'verb': + r'''(?x)(?P(?P
.*?
))''', + + 'verbatim': + r'''(?xs)(?P(?P
\s.*?
\s))''', + + 'lilypondversion': + r'''(?mx)(?P)''', +} + + +HTML_output = { + FILTER: r''' +%(code)s + +''', + + AFTER: r''' + +

''', + + BEFORE: r'''

+ ''', + + OUTPUT: r''' + %(alt)s''', + + PRINTFILENAME: '

%(filename)s

', + + QUOTE: r'''
+%(str)s +
+''', + + VERBATIM: r'''
+%(verb)s
''', + + VERSION: r'''%(program_version)s''', +} + + + + + + + +class BookHTMLOutputFormat (BookBase.BookOutputFormat): + def __init__ (self): + BookBase.BookOutputFormat.__init__ (self) + self.format = "html" + self.default_extension = ".html" + self.snippet_res = HTML_snippet_res + self.output = HTML_output + self.handled_extensions = ['.html', '.xml','.htmly'] + self.snippet_option_separator = '\s*' + + def split_snippet_options (self, option_string): + if option_string: + options = re.findall('[-\w\.-:]+(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|\S+))?', + option_string) + options = [re.sub('^([^=]+=\s*)(?P["\'])(.*)(?P=q)', '\g<1>\g<3>', opt) + for opt in options] + return options + return [] + + def adjust_snippet_command (self, cmd): + if '--formats' not in cmd: + return cmd + ' --formats=png ' + else: + return cmd + + def snippet_output (self, basename, snippet): + str = '' + rep = snippet.get_replacements (); + rep['base'] = basename + str += self.output_print_filename (basename, snippet) + if VERBATIM in snippet.option_dict: + rep['verb'] = BookBase.verbatim_html (snippet.verb_ly ()) + str += self.output[VERBATIM] % rep + if QUOTE in snippet.option_dict: + str = self.output[QUOTE] % {'str': str} + + str += self.output[BEFORE] % rep + for image in snippet.get_images (): + rep1 = copy.copy (rep) + rep1['image'] = image + (rep1['base'], rep1['ext']) = os.path.splitext (image) + rep1['alt'] = snippet.option_dict[ALT] + str += self.output[OUTPUT] % rep1 + + str += self.output[AFTER] % rep + return str + + def required_files (self, snippet, base, full, required_files): + return self.required_files_png (snippet, base, full, required_files) + + +BookBase.register_format (BookHTMLOutputFormat ()); diff --git a/python/book_latex.py b/python/book_latex.py new file mode 100644 index 0000000000..677e88a1f7 --- /dev/null +++ b/python/book_latex.py @@ -0,0 +1,270 @@ +# -*- coding: utf-8 -*- + +import re +import tempfile +import os +import book_base as BookBase +from book_snippets import * +import lilylib as ly +global _;_=ly._ + +progress = ly.progress +warning = ly.warning +error = ly.error + +# Recognize special sequences in the input. +# +# (?Pregex) -- Assign result of REGEX to NAME. +# *? -- Match non-greedily. +# (?!...) -- Match if `...' doesn't match next (without consuming +# the string). +# +# (?m) -- Multiline regex: Make ^ and $ match at each line. +# (?s) -- Make the dot match all characters including newline. +# (?x) -- Ignore whitespace in patterns. +# Possible keys are: +# 'multiline_comment', 'verbatim', 'lilypond_block', 'singleline_comment', +# 'lilypond_file', 'include', 'lilypond', 'lilypondversion' +Latex_snippet_res = { + 'include': + r'''(?smx) + ^[^%\n]*? + (?P + \\input\s*{ + (?P\S+?) + })''', + + 'lilypond': + r'''(?smx) + ^[^%\n]*? + (?P + \\lilypond\s*( + \[ + \s*(?P.*?)\s* + \])?\s*{ + (?P.*?) + })''', + + 'lilypond_block': + r'''(?smx) + ^[^%\n]*? + (?P + \\begin\s*(?P{lilypond}\s*)?( + \[ + \s*(?P.*?)\s* + \])?(?(env)|\s*{lilypond}) + (?P.*?) + ^[^%\n]*? + \\end\s*{lilypond})''', + + 'lilypond_file': + r'''(?smx) + ^[^%\n]*? + (?P + \\lilypondfile\s*( + \[ + \s*(?P.*?)\s* + \])?\s*\{ + (?P\S+?) + })''', + + 'singleline_comment': + r'''(?mx) + ^.*? + (?P + (?P + %.*$\n+))''', + + 'verb': + r'''(?mx) + ^[^%\n]*? + (?P + (?P + \\verb(?P.) + .*? + (?P=del)))''', + + 'verbatim': + r'''(?msx) + ^[^%\n]*? + (?P + (?P + \\begin\s*{verbatim} + .*? + \\end\s*{verbatim}))''', + + 'lilypondversion': + r'''(?smx) + (?P + \\lilypondversion)[^a-zA-Z]''', +} + +Latex_output = { + FILTER: r'''\begin{lilypond}[%(options)s] +%(code)s +\end{lilypond}''', + + OUTPUT: r'''{%% +\parindent 0pt +\noindent +\ifx\preLilyPondExample \undefined +\else + \expandafter\preLilyPondExample +\fi +\def\lilypondbook{}%% +\input %(base)s-systems.tex +\ifx\postLilyPondExample \undefined +\else + \expandafter\postLilyPondExample +\fi +}''', + + PRINTFILENAME: '''\\texttt{%(filename)s} +''', + + QUOTE: r'''\begin{quotation} +%(str)s +\end{quotation}''', + + VERBATIM: r'''\noindent +\begin{verbatim}%(verb)s\end{verbatim} +''', + + VERSION: r'''%(program_version)s''', +} + + + + + +### +# Retrieve dimensions from LaTeX +LATEX_INSPECTION_DOCUMENT = r''' +\nonstopmode +%(preamble)s +\begin{document} +\typeout{textwidth=\the\textwidth} +\typeout{columnsep=\the\columnsep} +\makeatletter\if@twocolumn\typeout{columns=2}\fi\makeatother +\end{document} +''' + +# Do we need anything else besides `textwidth'? +def get_latex_textwidth (source, global_options): + m = re.search (r'''(?P\\begin\s*{document})''', source) + if m == None: + warning (_ ("cannot find \\begin{document} in LaTeX document")) + + ## what's a sensible default? + return 550.0 + + preamble = source[:m.start (0)] + latex_document = LATEX_INSPECTION_DOCUMENT % {'preamble': preamble} + + (handle, tmpfile) = tempfile.mkstemp('.tex') + logfile = os.path.splitext (tmpfile)[0] + '.log' + logfile = os.path.split (logfile)[1] + + tmp_handle = os.fdopen (handle,'w') + tmp_handle.write (latex_document) + tmp_handle.close () + + ly.system ('%s %s' % (global_options.latex_program, tmpfile), + be_verbose=global_options.verbose) + parameter_string = file (logfile).read() + + os.unlink (tmpfile) + os.unlink (logfile) + + columns = 0 + m = re.search ('columns=([0-9.]+)', parameter_string) + if m: + columns = int (m.group (1)) + + columnsep = 0 + m = re.search ('columnsep=([0-9.]+)pt', parameter_string) + if m: + columnsep = float (m.group (1)) + + textwidth = 0 + m = re.search ('textwidth=([0-9.]+)pt', parameter_string) + if m: + textwidth = float (m.group (1)) + if columns: + textwidth = (textwidth - columnsep) / columns + + return textwidth + + +def modify_preamble (chunk): + str = chunk.replacement_text () + if (re.search (r"\\begin *{document}", str) + and not re.search ("{graphic[sx]", str)): + str = re.sub (r"\\begin{document}", + r"\\usepackage{graphics}" + '\n' + + r"\\begin{document}", + str) + chunk.override_text = str + + + + + + +class BookLatexOutputFormat (BookBase.BookOutputFormat): + def __init__ (self): + BookBase.BookOutputFormat.__init__ (self) + self.format = "latex" + self.default_extension = ".tex" + self.snippet_res = Latex_snippet_res + self.output = Latex_output + self.handled_extensions = ['.latex', '.lytex', '.tex'] + self.image_formats = "ps" + self.snippet_option_separator = '\s*,\s*' + + def process_options (self, global_options): + self.process_options_pdfnotdefault (global_options) + + def get_line_width (self, source): + textwidth = get_latex_textwidth (source, self.global_options) + return '%.0f\\pt' % textwidth + + def input_fullname (self, input_filename): + # Use kpsewhich if available, otherwise fall back to the default: + if ly.search_exe_path ('kpsewhich'): + return os.popen ('kpsewhich ' + input_filename).read()[:-1] + else: + return BookBase.BookOutputFormat.input_fullname (self, input_filename) + + def process_chunks (self, chunks): + for c in chunks: + if (c.is_plain () and + re.search (r"\\begin *{document}", c.replacement_text())): + modify_preamble (c) + break + return chunks + + def snippet_output (self, basename, snippet): + str = '' + rep = snippet.get_replacements (); + rep['base'] = basename + str += self.output_print_filename (basename, snippet) + if VERBATIM in snippet.option_dict: + rep['verb'] = snippet.verb_ly () + str += self.output[VERBATIM] % rep + + str += self.output[OUTPUT] % rep + + ## todo: maintain breaks + if 0: + breaks = snippet.ly ().count ("\n") + str += "".ljust (breaks, "\n").replace ("\n","%\n") + + if QUOTE in snippet.option_dict: + str = self.output[QUOTE] % {'str': str} + return str + + + + +BookBase.register_format (BookLatexOutputFormat ()); diff --git a/python/book_snippets.py b/python/book_snippets.py new file mode 100644 index 0000000000..b7c3ddf0d6 --- /dev/null +++ b/python/book_snippets.py @@ -0,0 +1,854 @@ +# -*- coding: utf-8 -*- + +import book_base as BookBase +import lilylib as ly +global _;_=ly._ +import re +import os +import copy +# TODO: We are using os.popen3, which has been deprecated since python 2.6. The +# suggested replacement is the Popen function of the subprocess module. +# Unfortunately, on windows this needs the msvcrt module, which doesn't seem +# to be available in GUB?!?!?! +# from subprocess import Popen, PIPE + +progress = ly.progress +warning = ly.warning +error = ly.error + + + + + +#################################################################### +# Snippet option handling +#################################################################### + + +# +# Is this pythonic? Personally, I find this rather #define-nesque. --hwn +# +# Global definitions: +ADDVERSION = 'addversion' +AFTER = 'after' +ALT = 'alt' +BEFORE = 'before' +DOCTITLE = 'doctitle' +EXAMPLEINDENT = 'exampleindent' +FILENAME = 'filename' +FILTER = 'filter' +FRAGMENT = 'fragment' +LANG = 'lang' ## TODO: This is handled nowhere! +LAYOUT = 'layout' +LILYQUOTE = 'lilyquote' +LINE_WIDTH = 'line-width' +NOFRAGMENT = 'nofragment' +NOGETTEXT = 'nogettext' +NOINDENT = 'noindent' +NOQUOTE = 'noquote' +INDENT = 'indent' +NORAGGED_RIGHT = 'noragged-right' +NOTES = 'body' +NOTIME = 'notime' +OUTPUT = 'output' +OUTPUTIMAGE = 'outputimage' +PAPER = 'paper' +PAPERSIZE = 'papersize' +PREAMBLE = 'preamble' +PRINTFILENAME = 'printfilename' +QUOTE = 'quote' +RAGGED_RIGHT = 'ragged-right' +RELATIVE = 'relative' +STAFFSIZE = 'staffsize' +TEXIDOC = 'texidoc' +VERBATIM = 'verbatim' +VERSION = 'lilypondversion' + + + +# NOTIME and NOGETTEXT have no opposite so they aren't part of this +# dictionary. +# NOQUOTE is used internally only. +no_options = { + NOFRAGMENT: FRAGMENT, + NOINDENT: INDENT, +} + +# Options that have no impact on processing by lilypond (or --process +# argument) +PROCESSING_INDEPENDENT_OPTIONS = ( + ALT, NOGETTEXT, VERBATIM, ADDVERSION, + TEXIDOC, DOCTITLE, VERSION, PRINTFILENAME) + + + +# Options without a pattern in snippet_options. +simple_options = [ + EXAMPLEINDENT, + FRAGMENT, + NOFRAGMENT, + NOGETTEXT, + NOINDENT, + PRINTFILENAME, + DOCTITLE, + TEXIDOC, + LANG, + VERBATIM, + FILENAME, + ALT, + ADDVERSION +] + + + +#################################################################### +# LilyPond templates for the snippets +#################################################################### + +snippet_options = { + ## + NOTES: { + RELATIVE: r'''\relative c%(relative_quotes)s''', + }, + + ## + PAPER: { + PAPERSIZE: r'''#(set-paper-size "%(papersize)s")''', + INDENT: r'''indent = %(indent)s''', + LINE_WIDTH: r'''line-width = %(line-width)s''', + QUOTE: r'''line-width = %(line-width)s - 2.0 * %(exampleindent)s''', + LILYQUOTE: r'''line-width = %(line-width)s - 2.0 * %(exampleindent)s''', + RAGGED_RIGHT: r'''ragged-right = ##t''', + NORAGGED_RIGHT: r'''ragged-right = ##f''', + }, + + ## + LAYOUT: { + NOTIME: r''' + \context { + \Score + timing = ##f + } + \context { + \Staff + \remove "Time_signature_engraver" + }''', + }, + + ## + PREAMBLE: { + STAFFSIZE: r'''#(set-global-staff-size %(staffsize)s)''', + }, +} + + + + + +FRAGMENT_LY = r''' +%(notes_string)s +{ + + +%% **************************************************************** +%% ly snippet contents follows: +%% **************************************************************** +%(code)s + + +%% **************************************************************** +%% end ly snippet +%% **************************************************************** +} +''' + +def classic_lilypond_book_compatibility (key, value): + if key == 'singleline' and value == None: + return (RAGGED_RIGHT, None) + + m = re.search ('relative\s*([-0-9])', key) + if m: + return ('relative', m.group (1)) + + m = re.match ('([0-9]+)pt', key) + if m: + return ('staffsize', m.group (1)) + + if key == 'indent' or key == 'line-width': + m = re.match ('([-.0-9]+)(cm|in|mm|pt|staffspace)', value) + if m: + f = float (m.group (1)) + return (key, '%f\\%s' % (f, m.group (2))) + + return (None, None) + + +PREAMBLE_LY = '''%%%% Generated by %(program_name)s +%%%% Options: [%(option_string)s] +\\include "lilypond-book-preamble.ly" + + +%% **************************************************************** +%% Start cut-&-pastable-section +%% **************************************************************** + +%(preamble_string)s + +\paper { + %(paper_string)s + force-assignment = #"" + line-width = #(- line-width (* mm %(padding_mm)f)) +} + +\layout { + %(layout_string)s +} + +%(safe_mode_string)s +''' + + +FULL_LY = ''' + + +%% **************************************************************** +%% ly snippet: +%% **************************************************************** +%(code)s + + +%% **************************************************************** +%% end ly snippet +%% **************************************************************** +''' + + + + + + + + +#################################################################### +# Helper functions +#################################################################### + +def ps_page_count (ps_name): + header = file (ps_name).read (1024) + m = re.search ('\n%%Pages: ([0-9]+)', header) + if m: + return int (m.group (1)) + return 0 + +ly_var_def_re = re.compile (r'^([a-zA-Z]+)[\t ]*=', re.M) +ly_comment_re = re.compile (r'(%+[\t ]*)(.*)$', re.M) +ly_context_id_re = re.compile ('\\\\(?:new|context)\\s+(?:[a-zA-Z]*?(?:Staff\ +(?:Group)?|Voice|FiguredBass|FretBoards|Names|Devnull))\\s+=\\s+"?([a-zA-Z]+)"?\\s+') + +def ly_comment_gettext (t, m): + return m.group (1) + t (m.group (2)) + + + +class CompileError(Exception): + pass + + + +#################################################################### +# Snippet classes +#################################################################### + +class Chunk: + def replacement_text (self): + return '' + + def filter_text (self): + return self.replacement_text () + + def is_plain (self): + return False + +class Substring (Chunk): + """A string that does not require extra memory.""" + def __init__ (self, source, start, end, line_number): + self.source = source + self.start = start + self.end = end + self.line_number = line_number + self.override_text = None + + def is_plain (self): + return True + + def replacement_text (self): + if self.override_text: + return self.override_text + else: + return self.source[self.start:self.end] + + + +class Snippet (Chunk): + def __init__ (self, type, match, formatter, line_number, global_options): + self.type = type + self.match = match + self.checksum = 0 + self.option_dict = {} + self.formatter = formatter + self.line_number = line_number + self.global_options = global_options + self.replacements = {'program_version': ly.program_version, + 'program_name': ly.program_name} + + # return a shallow copy of the replacements, so the caller can modify + # it locally without interfering with other snippet operations + def get_replacements (self): + return copy.copy (self.replacements) + + def replacement_text (self): + return self.match.group ('match') + + def substring (self, s): + return self.match.group (s) + + def __repr__ (self): + return `self.__class__` + ' type = ' + self.type + + + +class IncludeSnippet (Snippet): + def processed_filename (self): + f = self.substring ('filename') + return os.path.splitext (f)[0] + self.formatter.default_extension + + def replacement_text (self): + s = self.match.group ('match') + f = self.substring ('filename') + return re.sub (f, self.processed_filename (), s) + + + +class LilypondSnippet (Snippet): + def __init__ (self, type, match, formatter, line_number, global_options): + Snippet.__init__ (self, type, match, formatter, line_number, global_options) + os = match.group ('options') + self.do_options (os, self.type) + + + def snippet_options (self): + return []; + + def verb_ly_gettext (self, s): + lang = self.formatter.document_language + if not lang: + return s + try: + t = langdefs.translation[lang] + except: + return s + + s = ly_comment_re.sub (lambda m: ly_comment_gettext (t, m), s) + + if langdefs.LANGDICT[lang].enable_ly_identifier_l10n: + for v in ly_var_def_re.findall (s): + s = re.sub (r"(?m)(? 0: + relative_quotes += "'" * relative + + # put paper-size first, if it exists + for i,elem in enumerate(compose_dict[PAPER]): + if elem.startswith("#(set-paper-size"): + compose_dict[PAPER].insert(0, compose_dict[PAPER].pop(i)) + break + + paper_string = '\n '.join (compose_dict[PAPER]) % override + layout_string = '\n '.join (compose_dict[LAYOUT]) % override + notes_string = '\n '.join (compose_dict[NOTES]) % vars () + preamble_string = '\n '.join (compose_dict[PREAMBLE]) % override + padding_mm = self.global_options.padding_mm + if self.global_options.safe_mode: + safe_mode_string = "#(ly:set-option 'safe #t)" + else: + safe_mode_string = "" + + d = globals().copy() + d.update (locals()) + d.update (self.global_options.information) + return (PREAMBLE_LY + body) % d + + def get_checksum (self): + if not self.checksum: + # Work-around for md5 module deprecation warning in python 2.5+: + try: + from hashlib import md5 + except ImportError: + from md5 import md5 + + # We only want to calculate the hash based on the snippet + # code plus fragment options relevant to processing by + # lilypond, not the snippet + preamble + hash = md5 (self.relevant_contents (self.ly ())) + for option in self.get_option_list (): + for name in PROCESSING_INDEPENDENT_OPTIONS: + if option.startswith (name): + break + else: + hash.update (option) + + ## let's not create too long names. + self.checksum = hash.hexdigest ()[:10] + + return self.checksum + + def basename (self): + cs = self.get_checksum () + name = '%s/lily-%s' % (cs[:2], cs[2:]) + return name + + final_basename = basename + + def write_ly (self): + base = self.basename () + path = os.path.join (self.global_options.lily_output_dir, base) + directory = os.path.split(path)[0] + if not os.path.isdir (directory): + os.makedirs (directory) + filename = path + '.ly' + if os.path.exists (filename): + existing = open (filename, 'r').read () + + if self.relevant_contents (existing) != self.relevant_contents (self.full_ly ()): + warning ("%s: duplicate filename but different contents of orginal file,\n\ +printing diff against existing file." % filename) + ly.stderr_write (self.filter_pipe (self.full_ly (), 'diff -u %s -' % filename)) + else: + out = file (filename, 'w') + out.write (self.full_ly ()) + file (path + '.txt', 'w').write ('image of music') + + def relevant_contents (self, ly): + return re.sub (r'\\(version|sourcefileline|sourcefilename)[^\n]*\n', '', ly) + + def link_all_output_files (self, output_dir, output_dir_files, destination): + existing, missing = self.all_output_files (output_dir, output_dir_files) + if missing: + print '\nMissing', missing + raise CompileError(self.basename()) + for name in existing: + if (self.global_options.use_source_file_names + and isinstance (self, LilypondFileSnippet)): + base, ext = os.path.splitext (name) + components = base.split ('-') + # ugh, assume filenames with prefix with one dash (lily-xxxx) + if len (components) > 2: + base_suffix = '-' + components[-1] + else: + base_suffix = '' + final_name = self.final_basename () + base_suffix + ext + else: + final_name = name + try: + os.unlink (os.path.join (destination, final_name)) + except OSError: + pass + + src = os.path.join (output_dir, name) + dst = os.path.join (destination, final_name) + dst_path = os.path.split(dst)[0] + if not os.path.isdir (dst_path): + os.makedirs (dst_path) + os.link (src, dst) + + + def all_output_files (self, output_dir, output_dir_files): + """Return all files generated in lily_output_dir, a set. + + output_dir_files is the list of files in the output directory. + """ + result = set () + missing = set () + base = self.basename() + full = os.path.join (output_dir, base) + def consider_file (name): + if name in output_dir_files: + result.add (name) + + def require_file (name): + if name in output_dir_files: + result.add (name) + else: + missing.add (name) + + # UGH - junk self.global_options + skip_lily = self.global_options.skip_lilypond_run + for required in [base + '.ly', + base + '.txt']: + require_file (required) + if not skip_lily: + require_file (base + '-systems.count') + + if 'ddump-profile' in self.global_options.process_cmd: + require_file (base + '.profile') + if 'dseparate-log-file' in self.global_options.process_cmd: + require_file (base + '.log') + + map (consider_file, [base + '.tex', + base + '.eps', + base + '.texidoc', + base + '.doctitle', + base + '-systems.texi', + base + '-systems.tex', + base + '-systems.pdftexi']) + if self.formatter.document_language: + map (consider_file, + [base + '.texidoc' + self.formatter.document_language, + base + '.doctitle' + self.formatter.document_language]) + + required_files = self.formatter.required_files (self, base, full, result) + for f in required_files: + require_file (f) + + system_count = 0 + if not skip_lily and not missing: + system_count = int(file (full + '-systems.count').read()) + + for number in range(1, system_count + 1): + systemfile = '%s-%d' % (base, number) + require_file (systemfile + '.eps') + consider_file (systemfile + '.pdf') + + # We can't require signatures, since books and toplevel + # markups do not output a signature. + if 'ddump-signature' in self.global_options.process_cmd: + consider_file (systemfile + '.signature') + + + return (result, missing) + + def is_outdated (self, output_dir, current_files): + found, missing = self.all_output_files (output_dir, current_files) + return missing + + def filter_pipe (self, input, cmd): + """Pass input through cmd, and return the result.""" + + if self.global_options.verbose: + progress (_ ("Opening filter `%s'\n") % cmd) + + # TODO: Use Popen once we resolve the problem with msvcrt in Windows: + (stdin, stdout, stderr) = os.popen3 (cmd) + # p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True) + # (stdin, stdout, stderr) = (p.stdin, p.stdout, p.stderr) + stdin.write (input) + status = stdin.close () + + if not status: + status = 0 + output = stdout.read () + status = stdout.close () + error = stderr.read () + + if not status: + status = 0 + signal = 0x0f & status + if status or (not output and error): + exit_status = status >> 8 + ly.error (_ ("`%s' failed (%d)") % (cmd, exit_status)) + ly.error (_ ("The error log is as follows:")) + ly.stderr_write (error) + ly.stderr_write (stderr.read ()) + exit (status) + + if self.global_options.verbose: + progress ('\n') + + return output + + def get_snippet_code (self): + return self.substring ('code'); + + def filter_text (self): + """Run snippet bodies through a command (say: convert-ly). + + This functionality is rarely used, and this code must have bitrot. + """ + code = self.get_snippet_code (); + s = self.filter_pipe (code, self.global_options.filter_cmd) + d = { + 'code': s, + 'options': self.match.group ('options') + } + return self.formatter.output_simple_replacements (FILTER, d) + + def replacement_text (self): + base = self.final_basename () + return self.formatter.snippet_output (base, self) + + def get_images (self): + rep = {'base': self.final_basename ()} + + single = '%(base)s.png' % rep + multiple = '%(base)s-page1.png' % rep + images = (single,) + if (os.path.exists (multiple) + and (not os.path.exists (single) + or (os.stat (multiple)[stat.ST_MTIME] + > os.stat (single)[stat.ST_MTIME]))): + count = ps_page_count ('%(base)s.eps' % rep) + images = ['%s-page%d.png' % (rep['base'], page) for page in range (1, count+1)] + images = tuple (images) + + return images + + + +re_begin_verbatim = re.compile (r'\s+%.*?begin verbatim.*\n*', re.M) +re_end_verbatim = re.compile (r'\s+%.*?end verbatim.*$', re.M) + +class LilypondFileSnippet (LilypondSnippet): + def __init__ (self, type, match, formatter, line_number, global_options): + LilypondSnippet.__init__ (self, type, match, formatter, line_number, global_options) + self.contents = file (BookBase.find_file (self.substring ('filename'), global_options.include_path)).read () + + def get_snippet_code (self): + return self.contents; + + def verb_ly (self): + s = self.contents + s = re_begin_verbatim.split (s)[-1] + s = re_end_verbatim.split (s)[0] + if not NOGETTEXT in self.option_dict: + s = self.verb_ly_gettext (s) + if not s.endswith ('\n'): + s += '\n' + return s + + def ly (self): + name = self.substring ('filename') + return ('\\sourcefilename \"%s\"\n\\sourcefileline 0\n%s' + % (name, self.contents)) + + def final_basename (self): + if self.global_options.use_source_file_names: + base = os.path.splitext (os.path.basename (self.substring ('filename')))[0] + return base + else: + return self.basename () + + +class LilyPondVersionString (Snippet): + """A string that does not require extra memory.""" + def __init__ (self, type, match, formatter, line_number, global_options): + Snippet.__init__ (self, type, match, formatter, line_number, global_options) + + def replacement_text (self): + return self.formatter.output_simple (self.type, self) + + +snippet_type_to_class = { + 'lilypond_file': LilypondFileSnippet, + 'lilypond_block': LilypondSnippet, + 'lilypond': LilypondSnippet, + 'include': IncludeSnippet, + 'lilypondversion': LilyPondVersionString, +} diff --git a/python/book_texinfo.py b/python/book_texinfo.py new file mode 100644 index 0000000000..03f723754a --- /dev/null +++ b/python/book_texinfo.py @@ -0,0 +1,266 @@ +# -*- coding: utf-8 -*- + +import re +import book_base as BookBase +from book_snippets import * + +# Recognize special sequences in the input. +# +# (?Pregex) -- Assign result of REGEX to NAME. +# *? -- Match non-greedily. +# (?!...) -- Match if `...' doesn't match next (without consuming +# the string). +# +# (?m) -- Multiline regex: Make ^ and $ match at each line. +# (?s) -- Make the dot match all characters including newline. +# (?x) -- Ignore whitespace in patterns. +# Possible keys are: +# 'multiline_comment', 'verbatim', 'lilypond_block', 'singleline_comment', +# 'lilypond_file', 'include', 'lilypond', 'lilypondversion' +TexInfo_snippet_res = { + 'include': r'''(?mx) + ^(?P + @include\s+ + (?P\S+))''', + + 'lilypond': r'''(?smx) + ^[^\n]*?(?!@c\s+)[^\n]*? + (?P + @lilypond\s*( + \[ + \s*(?P.*?)\s* + \])?\s*{ + (?P.*?) + })''', + + 'lilypond_block': r'''(?msx) + ^(?P + @lilypond\s*( + \[ + \s*(?P.*?)\s* + \])?\s+? + ^(?P.*?) + ^@end\s+lilypond)\s''', + + 'lilypond_file': r'''(?mx) + ^(?P + @lilypondfile\s*( + \[ + \s*(?P.*?)\s* + \])?\s*{ + (?P\S+) + })''', + + 'multiline_comment': r'''(?smx) + ^(?P + (?P + @ignore\s + .*? + @end\s+ignore))\s''', + + 'singleline_comment': r'''(?mx) + ^.* + (?P + (?P + @c([ \t][^\n]*|)\n))''', + + # Don't do this: It interferes with @code{@{}. + # 'verb': r'''(?P@code{.*?})''', + + 'verbatim': r'''(?sx) + (?P + (?P + @example + \s.*? + @end\s+example\s))''', + + 'lilypondversion': r'''(?mx) + [^@](?P + @lilypondversion)[^a-zA-Z]''', + +} + + +TexInfo_output = { + ADDVERSION: r'''@example +\version @w{"@version{}"} +@end example +''', + + FILTER: r'''@lilypond[%(options)s] +%(code)s +@lilypond''', + + OUTPUT: r''' +@iftex +@include %(base)s-systems.texi +@end iftex +''', + + OUTPUTIMAGE: r'''@noindent +@ifinfo +@image{%(info_image_path)s,,,%(alt)s,%(ext)s} +@end ifinfo +@html +

+ + %(alt)s + +

+@end html +''', + + PRINTFILENAME: ''' +@html + +@end html +@file{%(filename)s} +@html + +@end html + ''', + + QUOTE: r'''@quotation +%(str)s@end quotation +''', + + NOQUOTE: r'''@format +%(str)s@end format +''', + + VERBATIM: r'''@exampleindent 0 +%(version)s@verbatim +%(verb)s@end verbatim +''', + + VERSION: r'''%(program_version)s''', +} + + +texinfo_line_widths = { + '@afourpaper': '160\\mm', + '@afourwide': '6.5\\in', + '@afourlatex': '150\\mm', + '@smallbook': '5\\in', + '@letterpaper': '6\\in', +} + + + +texinfo_lang_re = re.compile ('(?m)^@documentlanguage (.*?)( |$)') + +class BookTexinfoOutputFormat (BookBase.BookOutputFormat): + def __init__ (self): + BookBase.BookOutputFormat.__init__ (self) + self.format = "texinfo" + self.default_extension = ".texi" + self.snippet_res = TexInfo_snippet_res + self.output = TexInfo_output + self.handled_extensions = ['.itely', '.tely', '.texi', '.texinfo'] + self.snippet_option_separator = '\s*,\s*' + + def can_handle_format (self, format): + return (BookBase.BookOutputFormat.can_handle_format (self, format) or + (format in ['texi-html', 'texi'])) + + def process_options (self, global_options): + self.process_options_pdfnotdefault (global_options) + + def get_document_language (self, source): + m = texinfo_lang_re.search (source) + if m and not m.group (1).startswith ('en'): + return m.group (1) + else: + return '' + + def get_line_width (self, source): + for regex in texinfo_line_widths: + # FIXME: @layout is usually not in + # chunk #0: + # + # \input texinfo @c -*-texinfo-*- + # + # Bluntly search first K items of + # source. + # s = chunks[0].replacement_text () + if re.search (regex, source[:1024]): + return texinfo_line_widths[regex] + return None + + def adjust_snippet_command (self, cmd): + if '--formats' not in cmd: + return cmd + ' --formats=png ' + else: + return cmd + + def output_info (self, basename, snippet): + str = '' + rep = snippet.get_replacements (); + for image in snippet.get_images (): + rep1 = copy.copy (rep) + (rep1['base'], rep1['ext']) = os.path.splitext (image) + rep1['image'] = image + + # URG, makeinfo implicitly prepends dot to extension. + # Specifying no extension is most robust. + rep1['ext'] = '' + rep1['alt'] = snippet.option_dict[ALT] + rep1['info_image_path'] = os.path.join (self.global_options.info_images_dir, rep1['base']) + str += self.output[OUTPUTIMAGE] % rep1 + + rep['base'] = basename + str += self.output[OUTPUT] % rep + return str + + def snippet_output (self, basename, snippet): + str = self.output_print_filename (basename, snippet) + base = basename + if DOCTITLE in snippet.option_dict: + doctitle = base + '.doctitle' + translated_doctitle = doctitle + self.document_language + if os.path.exists (translated_doctitle): + str += '@lydoctitle %s\n\n' % open (translated_doctitle).read () + elif os.path.exists (doctitle): + str += '@lydoctitle %s\n\n' % open (doctitle).read () + if TEXIDOC in snippet.option_dict: + texidoc = base + '.texidoc' + translated_texidoc = texidoc + self.document_language + if os.path.exists (translated_texidoc): + str += '@include %(translated_texidoc)s\n\n' % vars () + elif os.path.exists (texidoc): + str += '@include %(texidoc)s\n\n' % vars () + + substr = '' + rep = snippet.get_replacements (); + if VERBATIM in snippet.option_dict: + rep['version'] = '' + if ADDVERSION in snippet.option_dict: + rep['version'] = self.output[ADDVERSION] + rep['verb'] = snippet.verb_ly () + substr = self.output[VERBATIM] % rep + substr += self.output_info (basename, snippet) + if LILYQUOTE in snippet.option_dict: + substr = self.output[QUOTE] % {'str': substr} + str += substr + +# str += ('@ifinfo\n' + self.output_info () + '\n@end ifinfo\n') +# str += ('@tex\n' + self.output_latex () + '\n@end tex\n') +# str += ('@html\n' + self.output_html () + '\n@end html\n') + + if QUOTE in snippet.option_dict: + str = self.output[QUOTE] % {'str': str} + + # need par after image + str += '\n' + + return str + + def required_files (self, snippet, base, full, required_files): + return self.required_files_png (snippet, base, full, required_files) + + + +BookBase.register_format (BookTexinfoOutputFormat ()); diff --git a/python/convertrules.py b/python/convertrules.py index 657eeb1137..25506ca916 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -9,8 +9,8 @@ import lilylib _ = lilylib._ -NOT_SMART = _ ("Not smart enough to convert %s") -UPDATE_MANUALLY = _ ("Please refer to the manual for details, and update manually.") +NOT_SMART = "\n" + _ ("Not smart enough to convert %s") +UPDATE_MANUALLY = _ ("Please refer to the manual for details, and update manually.") FROM_TO = _ ( "%s has been replaced by %s") @@ -1187,7 +1187,7 @@ def text_markup (str): while match: result = result + str[:match.end (1)] + " \markup" str = str[match.end( 2):] - # Count matching parentheses to find the end of the + # Count matching parentheses to find the end of the # current markup: nesting_level = 0 pars = re.finditer(r"[()]",str) @@ -1228,7 +1228,7 @@ def articulation_substitute (str): string_or_scheme = re.compile ('("(?:[^"\\\\]|\\\\.)*")|(#\\s*\'?\\s*\\()') -# Only apply articulation_substitute () outside strings and +# Only apply articulation_substitute () outside strings and # Scheme expressions: def smarter_articulation_subst (str): result = '' @@ -1242,7 +1242,7 @@ def smarter_articulation_subst (str): # Copy the string to output: result = result + match.group (1) str = str[match.end(1):] - else: # Found a Scheme expression. Count + else: # Found a Scheme expression. Count # matching parentheses to find its end str = str[match.start ():] nesting_level = 0 @@ -1321,7 +1321,7 @@ def conv (str): return str -@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") + +@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") + ", fingerHorizontalDirection -> fingeringOrientations") def conv (str): str = re.sub ('accacciatura', @@ -1821,7 +1821,6 @@ def conv (str): a = g - lower_pitches [-1] - print s , lower_pitches, g, a, s str = 'cdefgab' [s] str += ['eses', 'es', '', 'is', 'isis'][a + 2] if o < 0: @@ -2003,7 +2002,7 @@ def conv (str): str = re.sub ('soloADue', 'printPartCombineTexts', str) str = re.sub (r'\\applymusic\s*#notes-to-clusters', '\\makeClusters', str) - + str = re.sub (r'pagenumber\s*=', 'firstpagenumber = ', str) return str @@ -2056,7 +2055,7 @@ with str = re.sub (r'#\(paper-set-staff-size', '%Use set-global-staff-size at toplevel\n% #(layout-set-staff-size', str) return str - + @rule ((2, 3, 23), r'\context Foo = NOTENAME -> \context Foo = "NOTENAME"') def conv (str): @@ -2219,7 +2218,7 @@ def conv (str): stderr_write ('\n') stderr_write (_ (''' Auto beam settings must now specify each interesting moment in a measure -explicitely; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too. +explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too. ''')) stderr_write (UPDATE_MANUALLY) stderr_write ('\n') @@ -2241,7 +2240,7 @@ def conv (str): @rule ((2, 7, 0), 'ly:get-default-font -> ly:grob-default-font') def conv (str): - return re.sub('ly:get-default-font', 'ly:grob-default-font', str) + return re.sub('ly:get-default-font', 'ly:grob-default-font', str) @rule ((2, 7, 1), '''ly:parser-define -> ly:parser-define! @@ -2540,7 +2539,7 @@ def conv (str): while dur > 1 : dur /= 2 log2 += 1 - + den = (1 << dots) * (1 << log2) num = ((1 << (dots+1)) - 1) @@ -2553,7 +2552,7 @@ def conv (str): } """ % (num*count, den) - + str = re.sub (r'\\midi\s*{\s*\\tempo ([0-9]+)\s*([.]*)\s*=\s*([0-9]+)\s*}', sub_tempo, str) return str @@ -2596,10 +2595,10 @@ def conv (str): @rule ((2, 11, 6), _ ("Rename accidental glyphs, use glyph-name-alist.")) def conv (str): - + def sub_acc_name (m): idx = int (m.group (1).replace ('M','-')) - + return ["accidentals.doublesharp", "accidentals.sharp.slashslash.stemstemstem", "accidentals.sharp", @@ -2611,7 +2610,7 @@ def conv (str): "accidentals.flatflat"][4-idx] str = re.sub (r"accidentals[.](M?[-0-9]+)", - sub_acc_name, str) + sub_acc_name, str) str = re.sub (r"(KeySignature|Accidental[A-Za-z]*)\s*#'style\s*=\s*#'([a-z]+)", r"\1 #'glyph-name-alist = #alteration-\2-glyph-name-alist", str) ## FIXME: standard vs default, alteration-FOO vs FOO-alteration @@ -2656,7 +2655,8 @@ def conv (str): return str -@rule ((2, 11, 15), "TextSpanner #'edge-height -> #'bound-details #'right/left #'text = ...") +@rule ((2, 11, 15), "TextSpanner #'edge-height -> #'bound-details #'right/left #'text = ...\n\ +Remove 'forced-distance for fixed spacing between staves in a PianoStaff.") def conv (str): def sub_edge_height (m): s = '' @@ -2670,16 +2670,21 @@ def conv (str): context = m.group (2) if not context: context = '' - + s += (r"%s \override %sTextSpanner #'bound-details #'%s #'text = \markup { \draw-line #'(0 . %s) }" % (once, context, var, h)) s += '\n' - + return s - - + + str = re.sub (r"(\\once)?\s*\\override\s*([a-zA-Z]+\s*[.]\s*)?TextSpanner\s*#'edge-height\s*=\s*#'\(\s*([0-9.-]+)\s+[.]\s+([0-9.-]+)\s*\)", sub_edge_height, str) + if re.search (r"#'forced-distance", str): + stderr_write (NOT_SMART % ("VerticalAlignment #'forced-distance.\n")) + stderr_write (_ ("Use the `alignment-offsets' sub-property of\n")) + stderr_write (_ ("NonMusicalPaperColumn #'line-break-system-details\n")) + stderr_write (_ ("to set fixed distances between staves.\n")) return str @@ -2745,8 +2750,8 @@ def conv (str): "\t(format-metronome-markup text dur count context)\n") ## warning 2/2: fret diagram properties moved to fret-diagram-details - fret_props = ['barre-type', - 'dot-color', + fret_props = ['barre-type', + 'dot-color', 'dot-radius', 'finger-code', 'fret-count', @@ -2801,7 +2806,7 @@ def conv (str): @rule ((2, 11, 55), "#(set-octavation oct) -> \\ottava #oct,\n\ \\put-adjacent markup axis dir markup -> \\put-adjacent axis dir markup markup") -def conv (str): +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")) @@ -2881,6 +2886,328 @@ def conv(str): raise FatalConversionError () return str +@rule ((2, 13, 0), _ ("keySignature property not reversed any more\n\ +MIDI 47: orchestral strings -> orchestral harp")) +def conv(str): + if re.search(r'\set Staff.keySignature', str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("The alist for Staff.keySignature is no \ +longer in reversed order.\n")) + str = str.replace('"orchestral strings"', '"orchestral harp"') + return str + +@rule ((2, 13, 1), + _ ("\\bar \".\" now produces a thick barline\n\ +ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n\ +Dash parameters for slurs and ties are now in dash-definition")) +def conv(str): + if re.search(r'\\bar\s*"\."', str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("\\bar \".\" now produces a thick barline.\n")) + stderr_write (UPDATE_MANUALLY) + str = re.sub (r'ly:hairpin::after-line-breaking', r'ly:spanner::kill-zero-spanned-time', str) + if re.search("(Slur|Tie)\w+#\'dash-fraction", str) \ + or re.search("(Slur|Tie)\w+#\'dash-period", str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("Dash parameters for slurs and ties are now in \'dash-details.\n")) + stderr_write (UPDATE_MANUALLY) + return str + +@rule ((2, 13, 4), + _ ("Autobeaming rules have changed. override-auto-beam-setting and\n\ +revert-auto-beam-setting have been eliminated.\n\ +\\overrideBeamSettings has been added.\n\ +beatGrouping has been eliminated.\n\ +Different settings for vertical layout.\n\ +ly:system-start-text::print -> system-start-text::print\n\ +Beam #'thickness -> Beam #'beam-thickness\n\ +ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n\ +ly:ambitus::print -> ambitus::print\n\ +Explicit dynamics context definition from `Piano centered dynamics'\n\ +template replaced by new `Dynamics' context.")) +def conv(str): + if re.search("override-auto-beam-setting", str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\ + Autobeam settings are now overriden with \\overrideBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + if re.search("revert-auto-beam-setting", str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\ + Autobeam settings are now reverted with \\revertBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + str = re.sub(r"\\set\s+beatGrouping", r"\\setBeatGrouping", str) + if re.search(r"\w+\s*.\s*beatGrouping", str): + stderr_write (NOT_SMART % _("beatGrouping. \n\ + beatGrouping with a specified context must now be accomplished with\n\ + \\overrideBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + if re.search(r'alignment-offsets', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("alignment-offsets has been changed to alignment-distances: \ +you must now specify the distances between staves rather than the offset of staves.\n")) + stderr_write(UPDATE_MANUALLY) + str = re.sub ('ly:(system-start-text::print|note-head::brew-ez-stencil|ambitus::print)', + '\\1', str) + str = re.sub ('(\\bBeam\\s+#\')(?=thickness\\b)', '\\1beam-', str) + str = re.sub (r'(\\context\s*\{{1}[^\}]+\\type\s+\"?Engraver_group\"?\s+\\name\s+"*Dynamics"*[^\}]*\}{1})', + '% [Convert-ly] The Dynamics context is now included by default.', str) + return str + +@rule ((2, 13, 10), + _ ("Remove obsolete engravers/translators: Note_swallow_translator,\n\ +Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n\ +Swallow_performer and String_number_engraver.\n\ +New vertical spacing variables.")) +def conv(str): + str = re.sub (r'\\(consists|remove)\s+"*(Swallow_(engraver|performer)|' + '(Note|Rest|Skip_event)_swallow_translator|String_number_engraver)"*', + '', str) + + # match through the end of assignments in the form "x = 30", "x = 1 \in", or "x = #3" + str = re.sub (r"(page-top-space)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))", + r"obsolete-\g<0>" + r" top-system-spacing #'space = #(/ obsolete-\1 staff-space)", + str) + str = re.sub (r"(between-system-space)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))", + r"obsolete-\g<0>" + r" between-system-spacing #'space = #(/ obsolete-\1 staff-space)" + r" between-scores-system-spacing #'space = #(/ obsolete-\1 staff-space)", + str) + str = re.sub (r"(between-system-padding)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))", + r"obsolete-\g<0>" + r" between-system-spacing #'padding = #(/ obsolete-\1 staff-space)" + r" between-scores-system-spacing #'padding = #(/ obsolete-\1 staff-space)", + str) + str = re.sub (r"((before|between|after)-title-space)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))", + r"obsolete-\g<0>" + r" \2-title-spacing #'space = #(/ obsolete-\1 staff-space)", + str) + + if re.search(r"VerticalAxisGroup\s*#\s*'minimum-Y-extent", str): + stderr_write("\n") + stderr_write(NOT_SMART % _("minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n")) + stderr_write(UPDATE_MANUALLY) + + return str + +@rule ((2, 13, 16), + _ ("Unify fetaNumber and fetaDynamic encodings")) +def conv(str): + return re.sub(r'\bfeta(Number|Dynamic)', 'fetaText', str) + +@rule ((2, 13, 18), + _ ("\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves")) +def conv(str): + str = re.sub (r"\\RemoveEmpty(|Drum|Rhythmic|Tab)StaffContext", + r"\\\1Staff \\RemoveEmptyStaves", + str); + str = re.sub (r"\\AncientRemoveEmptyStaffContext", + r"\\VaticanaStaff \\RemoveEmptyStaves", + str); + return str + +@rule ((2, 13, 20), + _ ("\\cresc etc. are now postfix operators")) +def conv (str): + str = re.sub (r'\\(cresc|dim|endcresc|enddim)\b', r'\\deprecated\1', str) + return str + +@rule ((2, 13, 29), + _ ("Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n\ +\"accordion.accEtcbase\" -> \"accordion.etcbass\"")) +def conv(str): + def sub_acc (m): + d = { + 'Dot': 'dot', + 'Discant': 'discant', + 'Bayanbase': 'bayanbass', + 'Stdbase': 'stdbass', + 'Freebase': 'freebass', + 'OldEE': 'oldEE' + } + return '"accordion.%s"' % d[m.group (1)] + + str = re.sub (r'"accordion\.acc([a-zA-Z]+)"', + sub_acc, str) + if re.search(r'overrideBeamSettings', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("\\overrideBeamSettings. Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n")) + stderr_write(UPDATE_MANUALLY) + if re.search(r'revertBeamSettings', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("\\revertBeamSettings. Use \\set beamExceptions or \\revertTimeSignatureSettings.\n")) + stderr_write(UPDATE_MANUALLY) + if re.search(r'beamSettings', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n")) + stderr_write(UPDATE_MANUALLY) + if re.search(r'beatLength', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("beatLength. Use baseMoment and beatStructure.\n")) + stderr_write(UPDATE_MANUALLY) + if re.search(r'setBeatGrouping', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("setbeatGrouping. Use baseMoment and beatStructure.\n")) + stderr_write(UPDATE_MANUALLY) + return str + +@rule ((2, 13, 31), + _ ("Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n\ +Deprecate negative dash-period for hidden lines: use #'style = #'none instead.")) +def conv(str): + if re.search(r'woodwind-diagram', str): + stderr_write("\n") + stderr_write(NOT_SMART % _("woodwind-diagrams. Move size, thickness, and graphic to properties. Argument should be just the key list.\n")) + stderr_write(UPDATE_MANUALLY) + str = re.sub (r"dash-period\s+=\s*#\s*-[0-9.]+", + r"style = #'none", + str); + return str + +@rule ((2, 13, 36), + _ ("Rename vertical spacing variables.\n\ +Add fretboard-table argument to savePredefinedFretboard.")) +def conv(str): + str = re.sub ('after-title-spacing', 'markup-system-spacing', str) + str = re.sub ('before-title-spacing', 'score-markup-spacing', str) + str = re.sub ('between-scores-system-spacing', 'score-system-spacing', str) + # this rule also converts page-breaking-between-system-spacing: + str = re.sub ('between-system-spacing', 'system-system-spacing', str) + str = re.sub ('between-title-spacing', 'markup-markup-spacing', str) + str = re.sub ('bottom-system-spacing', 'last-bottom-spacing', str) + str = re.sub ('top-title-spacing', 'top-markup-spacing', str) + + str = re.sub (r"storePredefinedDiagram", + r"storePredefinedDiagram #default-fret-table", + str); + return str + +@rule ((2, 13, 39), + _ ("Rename vertical spacing grob properties.")) +def conv(str): + # this rule also converts default-next-staff-spacing: + str = re.sub ('next-staff-spacing', 'staff-staff-spacing', str) + # this is not a mistake: + # Both 'next- and 'between- become 'staff-staff-spacing. + # There is no conflict since they are in different grobs. + str = re.sub ('between-staff-spacing', 'staff-staff-spacing', str) + str = re.sub ('after-last-staff-spacing', 'staffgroup-staff-spacing', str) + str = re.sub ('inter-staff-spacing', 'nonstaff-relatedstaff-spacing', str) + str = re.sub ('non-affinity-spacing', 'nonstaff-unrelatedstaff-spacing', str) + str = re.sub ('inter-loose-line-spacing', 'nonstaff-nonstaff-spacing', str); + + return str + +@rule ((2, 13, 40), + _ ("Remove \\paper variables head-separation and foot-separation.")) +def conv(str): + if re.search (r'head-separation', str): + stderr_write("\n") + stderr_write(NOT_SMART % ("head-separation.\n")) + stderr_write(_ ("Adjust settings for top-system-spacing instead.\n")) + stderr_write (UPDATE_MANUALLY) + if re.search (r'foot-separation', str): + stderr_write("\n") + stderr_write(NOT_SMART % ("foot-separation.\n")) + stderr_write(_ ("Adjust settings for last-bottom-spacing instead.\n")) + stderr_write(UPDATE_MANUALLY); + + return str + +@rule ((2, 13, 42), + _ ("Rename space to basic-distance in various spacing alists.\n\ +Remove HarmonicParenthesesItem grob.")) +def conv(str): + 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); + return str + +@rule ((2, 13, 44), + _ ("Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n")) + +def conv(str): + str = re.sub (r"\\(override|revert)TimeSignatureSettings(\s+[^#]*)(#[^#]*)#", r"\\\1TimeSignatureSettings\2#", str) + return str + +@rule ((2, 13, 46), + _ ("Change stringTunings from a list of semitones to a list of pitches.\n"\ + "Change tenor and baritone ukulele names in string tunings.\n"\ + "Generate messages for manual conversion of vertical spacing if required.")) + +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 + + 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 + + def new_tunings (matchobj): + return "stringTunings = #`(" + convert_tones(matchobj.group(1)) + ")" + str = re.sub (r"stringTunings\s*=\s*#'\(([\d\s-]*)\)", \ + new_tunings , str) + + str = re.sub (r"ukulele-(tenor|baritone)-tuning", r"\1-ukulele-tuning", str) + + if re.search (r"[^-]page-top-space", str): + stderr_write (NOT_SMART % "page-top-space. " + UPDATE_MANUALLY) + if re.search (r"[^-]between-system-(space|padding)", str): + stderr_write (NOT_SMART % "between-system-space, -padding. " + UPDATE_MANUALLY) + if re.search (r"[^-](before|between|after)-title-space", str): + stderr_write (NOT_SMART % "-title-space. " + UPDATE_MANUALLY) + if re.search (r"\\name\s", str): + stderr_write("\n" + _("Vertical spacing changes might affect user-defined contexts. ") + UPDATE_MANUALLY) + + return str + +@rule ((2, 13, 48), + _ ("Replace bar-size with bar-extent.")) + +def conv(str): + def size_as_extent (matchobj): + half = "%g" % (float (matchobj.group (1)) / 2) + return "bar-extent = #'(-" + half + " . " + half + ")" + + str = re.sub (r"bar-size\s*=\s*#([0-9\.]+)", size_as_extent, str) + + return 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) + return str + +@rule ((2, 14, 0), + _ ("bump version for release")) +def conv (str): + return str + + # Guidelines to write rules (please keep this at the end of this file) # # - keep at most one rule per version; if several conversions should be done, @@ -2891,5 +3218,5 @@ def conv(str): # - write rule for bumping major stable version with # # _ ("bump version for release") -# +# # as exact description. diff --git a/python/langdefs.py b/python/langdefs.py index 6b2d79d4f1..983fe3bb30 100644 --- a/python/langdefs.py +++ b/python/langdefs.py @@ -15,7 +15,7 @@ def lang_file_name (p, langext, ext): return p + ext class LanguageDef: - def __init__ (self, code, name, webext=None, double_punct_char_sep='', html_filter=lambda s: s): + def __init__ (self, code, name, webext=None, double_punct_char_sep='', html_filter=lambda s: s, enable_ly_identifier_l10n=True): self.code = code self.name = name self.enabled = True @@ -25,7 +25,7 @@ class LanguageDef: self.webext = webext self.double_punct_char_sep = double_punct_char_sep self.html_filter = html_filter - + self.enable_ly_identifier_l10n = enable_ly_identifier_l10n def file_name (self, prefix, ext): return lang_file_name (prefix, self.webext, ext) @@ -59,16 +59,22 @@ def french_html_filter (page): body = body.replace (r[0], r[1]) return page[:body_begin] + body + page[body_end:] -fr = LanguageDef ('fr', 'français', double_punct_char_sep=' ', html_filter = french_html_filter) -es = LanguageDef ('es', 'español') +cs = LanguageDef ('cs', 'česky', enable_ly_identifier_l10n=False) de = LanguageDef ('de', 'deutsch') -# FIXME: should use localized name for ja -ja = LanguageDef ('ja', 'japanese') +es = LanguageDef ('es', 'español') +fr = LanguageDef ('fr', 'français', double_punct_char_sep=' ', html_filter = french_html_filter) +hu = LanguageDef ('hu', 'magyar') +it = LanguageDef ('it', 'italiano') +ja = LanguageDef ('ja', '日本語', enable_ly_identifier_l10n=False) +nl = LanguageDef ('nl', 'nederlands') +zh = LanguageDef ('zh', '中文', enable_ly_identifier_l10n=False) + # Outdated or broken translations may be disabled # (please run 'make doc-clean' before doing that): #fr.enabled = False -LANGUAGES = (site, fr, es, de, ja) +# LANGUAGES = (site, cs, de, es, fr, hu, it, ja, nl, zh) +LANGUAGES = (site, cs, de, es, fr, hu, it, ja, nl, zh) if __name__ == '__main__': print ' '.join ([l.code for l in LANGUAGES if l.enabled and l.code != 'en']) diff --git a/python/lilylib.py b/python/lilylib.py index b34c632f36..6fb96bbbf5 100644 --- a/python/lilylib.py +++ b/python/lilylib.py @@ -1,10 +1,20 @@ -############################################################### -# lilylib.py -- options and stuff -# -# source file of the GNU LilyPond music typesetter +# This file is part of LilyPond, the GNU music typesetter. # -# (c) 1998--2009 Han-Wen Nienhuys -# Jan Nieuwenhuizen +# Copyright (C) 1998--2011 Han-Wen Nienhuys +# Jan Nieuwenhuizen +# +# 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 . import __main__ import glob @@ -37,19 +47,48 @@ underscore = _ # Urg, Python 2.4 does not define stderr/stdout encoding # Maybe guess encoding from LANG/LC_ALL/LC_CTYPE? +reload (sys) +sys.setdefaultencoding ('utf-8') +import codecs +sys.stdout = codecs.getwriter ('utf8') (sys.stdout) +sys.stderr = codecs.getwriter ('utf8') (sys.stderr) + def encoded_write(f, s): - f.write (s.encode (f.encoding or 'utf_8')) + f.write (s.encode (f.encoding or 'utf-8', 'replace')) # ugh, Python 2.5 optparse requires Unicode strings in some argument # functions, and refuse them in some other places def display_encode (s): - return s.encode (sys.stderr.encoding or 'utf_8') + return s.encode (sys.stderr.encoding or 'utf-8', 'replace') + +# Lilylib globals. +program_version = '@TOPLEVEL_VERSION@' +program_name = os.path.basename (sys.argv[0]) + + +# Check if program_version contains @ characters. This will be the case if +# the .py file is called directly while building the lilypond documentation. +# If so, try to check for the env var LILYPOND_VERSION, which is set by our +# makefiles and use its value. +at_re = re.compile (r'@') +if at_re.match (program_version): + if os.environ.has_key('LILYPOND_VERSION'): + program_version = os.environ['LILYPOND_VERSION'] + else: + program_version = "unknown" def stderr_write (s): encoded_write (sys.stderr, s) +def warning (s): + stderr_write (program_name + ": " + _ ("warning: %s") % s + '\n') + +def error (s): + stderr_write (program_name + ": " + _ ("error: %s") % s + '\n') + progress = stderr_write + def require_python_version (): if sys.hexversion < 0x02040000: stderr_write ("Python 2.4 or newer is required to run this program.\n\ @@ -58,7 +97,7 @@ please read 'Setup for MacOS X' in Application Usage.") os.system ("open http://python.org/download/") sys.exit (2) -# Modified version of the commands.mkarg(x), which always uses +# Modified version of the commands.mkarg(x), which always uses # double quotes (since Windows can't handle the single quotes: def mkarg(x): s = ' "' @@ -82,7 +121,7 @@ def subprocess_system (cmd, log_file=None): import subprocess - show_progress= progress_p + show_progress= progress_p name = command_name (cmd) error_log_file = '' @@ -161,7 +200,7 @@ def ossystem_system (cmd, system = subprocess_system if sys.platform == 'mingw32': - + ## subprocess x-compile doesn't work. system = ossystem_system @@ -184,7 +223,7 @@ def search_exe_path (name): 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): @@ -205,13 +244,25 @@ class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter): " ".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 + def indent(self): + self.current_indent = self.indent_increment + self.level += 1 + def dedent(self): + self.level -= 1 + if self.level <= 0: + self.current_indent = '' + self.level = 0; + def format_usage(self, usage): return _("Usage: %s") % usage + '\n' def format_description(self, description): return description -def get_option_parser (*args, **kwargs): +def get_option_parser (*args, **kwargs): p = optparse.OptionParser (*args, **kwargs) - p.formatter = NonDentedHeadingFormatter () + p.formatter = NonDentedHeadingFormatter () + p.formatter.set_parser (p) return p diff --git a/python/midi.c b/python/midi.c index ec57ef7284..187268b78e 100644 --- a/python/midi.c +++ b/python/midi.c @@ -1,11 +1,22 @@ /* - midi.c -- implement Python midi parser module + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2001--2009 Han-Wen Nienhuys + Copyright (C) 2001--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ /* @@ -19,7 +30,7 @@ midi.parse (s) returns a MIDI file as the tuple - (format, division, TRACKLIST) + ((format, division), TRACKLIST) each track is an EVENTLIST, where EVENT is @@ -29,6 +40,14 @@ each track is an EVENTLIST, where EVENT is #include +char * +compat_itoa (int i) +{ + static char buffer[9]; + snprintf (buffer, 8, "%d", i); + return buffer; +} + /* PyMIDINIT_FUNC isn't defined in Python < 2.3 */ #ifndef PyMODINIT_FUNC # if defined(__cplusplus) @@ -41,7 +60,8 @@ each track is an EVENTLIST, where EVENT is #if 0 int x = 0; int *track = &x; -#define debug_print(f, args...) fprintf (stderr, "%s:%d: track: %p :" f, __FUNCTION__, __LINE__, *track, ##args) +#define urg_debug_print(f, args...) fprintf (stderr, "%s:%d: track: %p: " f, __FUNCTION__, __LINE__, *track, ##args) +#define debug_print(f, args...) fprintf (stderr, f, ##args) #else #define debug_print(f, args...) #endif @@ -50,11 +70,13 @@ static PyObject *Midi_error; static PyObject *Midi_warning; static PyObject * -midi_error (char const *func, char *s) +midi_error (char const *func, char *s, char *t) { - char *dest = (char*) malloc (sizeof (char) * (strlen (func) + strlen (s) + 1)); + char *dest = (char*) malloc (sizeof (char) + * (strlen (func) + strlen (s) + strlen (t) + 1)); strcpy (dest, func); strcat (dest, s); + strcat (dest, t); PyErr_SetString (Midi_error, dest); free (dest); @@ -140,7 +162,7 @@ get_number (unsigned char ** str, unsigned char * end_str, int length) sum = (sum << 8) + (unsigned char) (*str)[i]; *str += length; - debug_print ("%d:\n", sum); + debug_print ("%ld:\n", sum); return sum; } @@ -157,7 +179,7 @@ get_variable_length_number (unsigned char **str, unsigned char * end_str) if (!(x & 0x80)) break; } - debug_print ("%d:\n", sum); + debug_print ("%ld:\n", sum); return sum; } @@ -270,7 +292,7 @@ read_event (unsigned char **track, unsigned char *end, PyObject *time, } static PyObject * -midi_parse_track (unsigned char **track, unsigned char *track_end) +midi_parse_track (unsigned char **track, unsigned char *track_end, int clocks_max) { unsigned int time = 0; unsigned long track_len, track_size; @@ -282,20 +304,22 @@ midi_parse_track (unsigned char **track, unsigned char *track_end) debug_print ("%s", "\n"); if (memcmp (*track, "MTrk", 4)) - return midi_error (__FUNCTION__, ": MTrk expected"); + { + *track[4] = 0; + return midi_error (__FUNCTION__, ": MTrk expected, got: ", *(char**)track); + } *track += 4; track_len = get_number (track, *track + 4, 4); - - debug_print ("track_len: %u\n", track_len); - debug_print ("track_size: %u\n", track_size); + debug_print ("track_len: %lu\n", track_len); + debug_print ("track_size: %lu\n", track_size); debug_print ("track begin: %p\n", track); debug_print ("track end: %p\n", track + track_len); if (track_len > track_size) - return midi_error (__FUNCTION__, ": track size corrupt"); + return midi_error (__FUNCTION__, ": track length corrupt: ", compat_itoa (track_len)); pytrack = PyList_New (0); @@ -314,7 +338,8 @@ midi_parse_track (unsigned char **track, unsigned char *track_end) time += dt; if (dt) pytime = PyInt_FromLong (time); - + if (clocks_max && time > clocks_max) + break; pyev = read_event (track, track_end, pytime, &running_status); if (pyev) @@ -332,21 +357,23 @@ pymidi_parse_track (PyObject *self, PyObject *args) { unsigned char *track, *track_end; unsigned long track_size; + int clocks_max; debug_print ("%s", "\n"); - if (!PyArg_ParseTuple (args, "s#", &track, &track_size)) + if (!PyArg_ParseTuple (args, "s#|i", &track, &track_size, &clocks_max)) return 0; + debug_print ("clocks_max: %d\n", clocks_max); if (track_size < 0) - return midi_error (__FUNCTION__, ": negative track size"); + return midi_error (__FUNCTION__, ": negative track size: ", compat_itoa (track_size)); track_end = track + track_size; - return midi_parse_track (&track, track_end); + return midi_parse_track (&track, track_end, clocks_max); } static PyObject * -midi_parse (unsigned char **midi,unsigned char *midi_end) +midi_parse (unsigned char **midi,unsigned char *midi_end, int clocks_max) { PyObject *pymidi = 0; unsigned long header_len; @@ -360,13 +387,13 @@ midi_parse (unsigned char **midi,unsigned char *midi_end) header_len = get_number (midi, *midi + 4, 4); if (header_len < 6) - return midi_error (__FUNCTION__, ": header too short"); + return midi_error (__FUNCTION__, ": header too short: ", compat_itoa (header_len)); format = get_number (midi, *midi + 2, 2); tracks = get_number (midi, *midi + 2, 2); - if (tracks > 32) - return midi_error (__FUNCTION__, ": too many tracks"); + if (tracks > 256) + return midi_error (__FUNCTION__, ": too many tracks: ", compat_itoa (tracks)); division = get_number (midi, *midi + 2, 2) * 4; @@ -380,7 +407,7 @@ midi_parse (unsigned char **midi,unsigned char *midi_end) /* Tracks */ for (i = 0; i < tracks; i++) - PyList_Append (pymidi, midi_parse_track (midi, midi_end)); + PyList_Append (pymidi, midi_parse_track (midi, midi_end, clocks_max)); pymidi = Py_BuildValue ("(OO)", Py_BuildValue ("(ii)", format, division), pymidi); @@ -392,26 +419,30 @@ pymidi_parse (PyObject *self, PyObject *args) { unsigned char *midi, *midi_end; unsigned long midi_size; + int clocks_max; debug_print ("%s", "\n"); - if (!PyArg_ParseTuple (args, "s#", &midi, &midi_size)) + if (!PyArg_ParseTuple (args, "s#|i", &midi, &midi_size, &clocks_max)) return 0; + debug_print ("clocks_max: %d\n", clocks_max); if (memcmp (midi, "MThd", 4)) - return midi_error (__FUNCTION__, ": MThd expected"); - + { + midi[4] = 0; + return midi_error (__FUNCTION__, ": MThd expected, got: ", (char*)midi); + } + midi += 4; midi_end = midi + midi_size; - return midi_parse (&midi, midi_end); + return midi_parse (&midi, midi_end, clocks_max); } - static PyMethodDef MidiMethods[] = { - {"parse", pymidi_parse, 1}, - {"parse_track", pymidi_parse_track, 1}, + {"parse", pymidi_parse, METH_VARARGS}, + {"parse_track", pymidi_parse_track, METH_VARARGS}, {0, 0} /* Sentinel */ }; diff --git a/python/musicexp.py b/python/musicexp.py index 6bf587be8f..68318678de 100644 --- a/python/musicexp.py +++ b/python/musicexp.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import inspect import sys import string @@ -41,9 +42,9 @@ class Output_printer: """A class that takes care of formatting (eg.: indenting) a Music expression as a .ly file. - + """ - + def __init__ (self): self._line = '' self._indent = 4 @@ -56,19 +57,19 @@ class Output_printer: def set_file (self, file): self._file = file - + def dump_version (self): self.newline () self.print_verbatim ('\\version "@TOPLEVEL_VERSION@"') self.newline () - + def get_indent (self): return self._nesting * self._indent - + def override (self): last = self._output_state_stack[-1] self._output_state_stack.append (last.copy()) - + def add_factor (self, factor): self.override() self._output_state_stack[-1].factor *= factor @@ -86,21 +87,21 @@ class Output_printer: def unformatted_output (self, str): # don't indent on \< and indent only once on << - self._nesting += ( str.count ('<') - - str.count ('\<') - str.count ('<<') + self._nesting += ( str.count ('<') + - str.count ('\<') - str.count ('<<') + str.count ('{') ) self._nesting -= ( str.count ('>') - str.count ('\>') - str.count ('>>') - str.count ('->') - str.count ('_>') - str.count ('^>') + str.count ('}') ) self.print_verbatim (str) - + def print_duration_string (self, str): if self._last_duration == str: return - + self.unformatted_output (str) - + def add_word (self, str): if (len (str) + 1 + len (self._line) > self._line_len): self.newline() @@ -110,7 +111,7 @@ class Output_printer: self._line += ' ' self.unformatted_output (str) self._skipspace = False - + def newline (self): self._file.write (self._line + '\n') self._line = ' ' * self._indent * self._nesting @@ -118,10 +119,10 @@ class Output_printer: def skipspace (self): self._skipspace = True - + def __call__(self, arg): self.dump (arg) - + def dump (self, str): if self._skipspace: self._skipspace = False @@ -143,7 +144,7 @@ class Duration: self.duration_log = 0 self.dots = 0 self.factor = Rational (1) - + def lisp_expression (self): return '(ly:make-duration %d %d %d %d)' % (self.duration_log, self.dots, @@ -172,14 +173,14 @@ class Duration: str += '*%d' % factor.numerator () return str - + def print_ly (self, outputter): str = self.ly_expression (self.factor / outputter.duration_factor ()) outputter.print_duration_string (str) - + def __repr__(self): return self.ly_expression() - + def copy (self): d = Duration () d.dots = self.dots @@ -281,7 +282,7 @@ class Pitch: self.step = 0 self.octave = 0 self._force_absolute_pitch = False - + def __repr__(self): return self.ly_expression() @@ -291,7 +292,7 @@ class Pitch: c.step += interval.step c.octave += interval.octave c.normalize () - + target_st = self.semitones() + interval.semitones() c.alteration += target_st - c.semitones() return c @@ -312,7 +313,7 @@ class Pitch: p = Pitch () p.alteration = self.alteration p.step = self.step - p.octave = self.octave + p.octave = self.octave return p def steps (self): @@ -320,8 +321,8 @@ class Pitch: def semitones (self): return self.octave * 12 + [0,2,4,5,7,9,11][self.step] + self.alteration - - def ly_step_expression (self): + + def ly_step_expression (self): return pitch_generating_function (self) def absolute_pitch (self): @@ -356,26 +357,26 @@ class Pitch: str += self.absolute_pitch () return str - + def print_ly (self, outputter): outputter (self.ly_expression()) - + class Music: def __init__ (self): self.parent = None self.start = Rational (0) self.comment = '' self.identifier = None - + def get_length(self): return Rational (0) - + def get_properties (self): return '' - + def has_children (self): return False - + def get_index (self): if self.parent: return self.parent.elements.index (self) @@ -383,12 +384,12 @@ class Music: return None def name (self): return self.__class__.__name__ - + def lisp_expression (self): name = self.name() props = self.get_properties () - + return "(make-music '%s %s)" % (name, props) def set_start (self, start): @@ -405,20 +406,20 @@ class Music: if not text: return - + if text == '\n': printer.newline () return - + lines = string.split (text, '\n') for l in lines: if l: printer.unformatted_output ('% ' + l) printer.newline () - + def print_with_identifier (self, printer): - if self.identifier: + if self.identifier: printer ("\\%s" % self.identifier) else: self.print_ly (printer) @@ -455,7 +456,7 @@ class RelativeMusic (MusicWrapper): previous_pitch = self.basepitch if not previous_pitch: previous_pitch = Pitch () - func ('\\relative %s%s' % (pitch_generating_function (previous_pitch), + func ('\\relative %s%s' % (pitch_generating_function (previous_pitch), previous_pitch.absolute_pitch ())) MusicWrapper.print_ly (self, func) relative_pitches = prev_relative_pitches @@ -483,8 +484,8 @@ class TimeScaledMusic (MusicWrapper): func ("\\once \\override TupletBracket #'stencil = #ly:slur::print") func.newline () - base_number_function = {None: "#f", - "actual": "tuplet-number::calc-denominator-text", + base_number_function = {None: "#f", + "actual": "tuplet-number::calc-denominator-text", "both": "tuplet-number::calc-fraction-text"}.get (self.display_number, None) # If we have non-standard numerator/denominator, use our custom function if self.display_number == "actual" and self.display_denominator: @@ -508,13 +509,25 @@ class TimeScaledMusic (MusicWrapper): (base_number_function, base_duration)) func.newline () elif self.display_type == "both": # TODO: Implement this using actual_type and normal_type! - warning (_ ("Tuplet brackets displaying both note durations are not implemented, using default")) if self.display_number == None: func ("\\once \\override TupletNumber #'stencil = ##f") func.newline () elif self.display_number == "both": - func ("\\once \\override TupletNumber #'text = #%s" % base_number_function) - func.newline () + den_duration = self.normal_type.ly_expression (None, True) + # If we don't have an actual type set, use the normal duration! + if self.actual_type: + num_duration = self.actual_type.ly_expression (None, True) + else: + num_duration = den_duration + if (self.display_denominator or self.display_numerator): + func ("\\once \\override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes %s \"%s\" %s \"%s\")" % + (self.display_denominator, den_duration, + self.display_numerator, num_duration)) + func.newline () + else: + func ("\\once \\override TupletNumber #'text = #(tuplet-number::fraction-with-notes \"%s\" \"%s\")" % + (den_duration, num_duration)) + func.newline () else: if self.display_number == None: func ("\\once \\override TupletNumber #'stencil = ##f") @@ -537,7 +550,7 @@ class NestedMusic(Music): def append (self, what): if what: self.elements.append (what) - + def has_children (self): return self.elements @@ -545,7 +558,7 @@ class NestedMusic(Music): assert elt.parent == None assert succ == None or succ in self.elements - + idx = 0 if succ: idx = self.elements.index (succ) @@ -559,7 +572,7 @@ class NestedMusic(Music): self.elements.insert (idx, elt) elt.parent = self - + def get_properties (self): return ("'elements (list %s)" % string.join (map (lambda x: x.lisp_expression(), @@ -580,10 +593,10 @@ class NestedMusic(Music): def delete_element (self, element): assert element in self.elements - + self.elements.remove (element) element.parent = None - + def set_start (self, start): self.start = start for e in self.elements: @@ -593,13 +606,13 @@ class NestedMusic(Music): r = Music.find_first (self, predicate) if r: return r - + for e in self.elements: r = e.find_first (predicate) if r: return r return None - + class SequentialMusic (NestedMusic): def get_last_event_chord (self): value = None @@ -626,15 +639,15 @@ class SequentialMusic (NestedMusic): printer ('}') if newline: printer.newline() - + def lisp_sub_expression (self, pred): name = self.name() props = self.get_subset_properties (pred) - + return "(make-music '%s %s)" % (name, props) - + def set_start (self, start): for e in self.elements: e.set_start (start) @@ -736,12 +749,12 @@ class Paper: self.print_length_field (printer, "paper-width", self.page_width) self.print_length_field (printer, "paper-height", self.page_height) self.print_length_field (printer, "top-margin", self.top_margin) - self.print_length_field (printer, "botton-margin", self.bottom_margin) + self.print_length_field (printer, "bottom-margin", self.bottom_margin) self.print_length_field (printer, "left-margin", self.left_margin) # TODO: maybe set line-width instead of right-margin? self.print_length_field (printer, "right-margin", self.right_margin) # TODO: What's the corresponding setting for system_left_margin and - # system_right_margin in Lilypond? + # system_right_margin in LilyPond? self.print_length_field (printer, "between-system-space", self.system_distance) self.print_length_field (printer, "page-top-space", self.top_system_distance) @@ -817,7 +830,7 @@ class ChordEvent (NestedMusic): rest_events = [e for e in self.elements if isinstance (e, RhythmicEvent) and not isinstance (e, NoteEvent)] - + other_events = [e for e in self.elements if not isinstance (e, RhythmicEvent)] @@ -840,7 +853,7 @@ class ChordEvent (NestedMusic): self.grace_elements.print_ly (printer, False) printer ('{}') - # Print all overrides and other settings needed by the + # Print all overrides and other settings needed by the # articulations/ornaments before the note for e in other_events: e.print_before_note (printer) @@ -864,7 +877,7 @@ class ChordEvent (NestedMusic): duration.print_ly (printer) else: pass - + for e in other_events: e.print_ly (printer) @@ -876,7 +889,7 @@ class ChordEvent (NestedMusic): self.after_grace_elements.print_ly (printer, False) self.print_comment (printer) - + class Partial (Music): def __init__ (self): Music.__init__ (self) @@ -890,12 +903,12 @@ class BarLine (Music): Music.__init__ (self) self.bar_number = 0 self.type = None - + def print_ly (self, printer): bar_symbol = { 'regular': "|", 'dotted': ":", 'dashed': "dashed", 'heavy': "|", 'light-light': "||", 'light-heavy': "|.", 'heavy-light': ".|", 'heavy-heavy': ".|.", 'tick': "'", - 'short': "'|", 'none': "" }.get (self.type, None) + 'short': "'", 'none': "" }.get (self.type, None) if bar_symbol <> None: printer.dump ('\\bar "%s"' % bar_symbol) else: @@ -942,13 +955,13 @@ class SpanEvent (Event): class SlurEvent (SpanEvent): def print_before_note (self, printer): - command = {'dotted': '\\slurDotted', + command = {'dotted': '\\slurDotted', 'dashed' : '\\slurDashed'}.get (self.line_type, '') if command and self.span_direction == -1: printer.dump (command) def print_after_note (self, printer): # reset non-solid slur types! - command = {'dotted': '\\slurSolid', + command = {'dotted': '\\slurSolid', 'dashed' : '\\slurSolid'}.get (self.line_type, '') if command and self.span_direction == -1: printer.dump (command) @@ -975,7 +988,7 @@ class BracketSpannerEvent (SpanEvent): def print_before_note (self, printer): if self.span_direction == -1: printer.dump ('\[') - # the the bracket after the last note + # the bracket after the last note def print_after_note (self, printer): if self.span_direction == 1: printer.dump ('\]') @@ -1004,7 +1017,7 @@ class OctaveShiftEvent (SpanEvent): value = '' if dir: value = '\ottava #%s' % dir - return { + return { -1: value, 1: '\ottava #0'}.get (self.span_direction, '') @@ -1020,10 +1033,10 @@ class GlissandoEvent (SpanEvent): style= { "dashed" : "dashed-line", "dotted" : "dotted-line", - "wavy" : "zigzag" + "wavy" : "zigzag" }. get (self.line_type, None) if style: - printer.dump ("\once \override Glissando #'style = #'%s" % style) + printer.dump ("\\once \\override Glissando #'style = #'%s" % style) def ly_expression (self): return {-1: '\\glissando', 1:''}.get (self.span_direction, '') @@ -1062,10 +1075,10 @@ class HairpinEvent (SpanEvent): return '\!' else: return {1: '\<', -1: '\>'}.get (self.span_type, '') - + def ly_expression (self): return self.hairpin_to_ly () - + def print_ly (self, printer): val = self.hairpin_to_ly () if val: @@ -1248,7 +1261,7 @@ class ChordPitch: self.step = 0 def __repr__(self): return self.ly_expression() - def ly_expression (self): + def ly_expression (self): return pitch_generating_function (self) class ChordModification: @@ -1341,11 +1354,11 @@ class RhythmicEvent(Event): def get_length (self): return self.duration.get_length() - + def get_properties (self): return ("'duration %s" % self.duration.lisp_expression ()) - + class RestEvent (RhythmicEvent): def __init__ (self): RhythmicEvent.__init__ (self) @@ -1357,7 +1370,7 @@ class RestEvent (RhythmicEvent): return res + "%s%s\\rest" % (self.pitch.ly_expression (), self.duration.ly_expression ()) else: return 'r%s' % self.duration.ly_expression () - + def print_ly (self, printer): for ev in self.associated_events: ev.print_ly (printer) @@ -1371,7 +1384,7 @@ class RestEvent (RhythmicEvent): class SkipEvent (RhythmicEvent): def ly_expression (self): - return 's%s' % self.duration.ly_expression () + return 's%s' % self.duration.ly_expression () class NoteEvent(RhythmicEvent): def __init__ (self): @@ -1383,14 +1396,14 @@ class NoteEvent(RhythmicEvent): def get_properties (self): str = RhythmicEvent.get_properties (self) - + if self.pitch: str += self.pitch.lisp_expression () elif self.drum_type: str += "'drum-type '%s" % self.drum_type return str - + def pitch_mods (self): excl_question = '' if self.cautionary: @@ -1468,11 +1481,6 @@ class KeySignatureChange (Music): elif self.non_standard_alterations: alterations = [self.format_non_standard_alteration (a) for a in self.non_standard_alterations] - # TODO: Check if the alterations should really be given in reverse - # order of if that's just a bug in Lilypond. If it's a bug, - # fix it and remove the following call, otherwise add a - # proper comment here! - alterations.reverse () return "\\set Staff.keySignature = #`(%s)" % string.join (alterations, " ") else: return '' @@ -1491,8 +1499,8 @@ class TimeSignatureChange (Music): def ly_expression (self): st = '' - # Print out the style if we have ome, but the '() should only be - # forced for 2/2 or 4/4, since in all other cases we'll get numeric + # Print out the style if we have ome, but the '() should only be + # forced for 2/2 or 4/4, since in all other cases we'll get numeric # signatures anyway despite the default 'C signature style! is_common_signature = self.fractions in ([2,2], [4,4], [4,2]) if self.style: @@ -1510,7 +1518,7 @@ class TimeSignatureChange (Music): return st + "\\compoundMeter #'%s" % self.format_fraction (self.fractions) else: return st + '' - + class ClefChange (Music): def __init__ (self): Music.__init__ (self) @@ -1543,7 +1551,7 @@ class ClefChange (Music): "C": ("clefs.C", 0, 0), "F": ("clefs.F", 2, 6), } - + def lisp_expression (self): try: (glyph, pos, c0) = self.clef_dict[self.type] @@ -1579,6 +1587,26 @@ class StaffChange (Music): else: return '' +class SetEvent (Music): + def __init__ (self, contextprop, value): + Music.__init__ (self) + self.context_prop = contextprop + self.value = value + def ly_expression (self): + if self.value: + return "\\set %s = %s" % (self.context_prop, self.value) + else: + return '' + +class StaffLinesEvent (Music): + def __init__ (self, lines): + Music.__init__ (self) + self.lines = lines + def ly_expression (self): + if (self.lines > 0): + return "\\stopStaff \\override Staff.StaffSymbol #'line-count = #%s \\startStaff" % self.lines + else: + return "\\stopStaff \\revert Staff.StaffSymbol #'line-count \\startStaff" class TempoMark (Music): def __init__ (self): @@ -1599,7 +1627,7 @@ class TempoMark (Music): return False def duration_to_markup (self, dur): if dur: - # Generate the markup to print the note, use scheme mode for + # Generate the markup to print the note, use scheme mode for # ly_expression to get longa and not \longa (which causes an error) return "\\general-align #Y #DOWN \\smaller \\note #\"%s\" #UP" % dur.ly_expression(None, True) else: @@ -1702,6 +1730,14 @@ class MultiMeasureRest(Music): return 'R%s' % self.duration.ly_expression () +class Break (Music): + def __init__ (self, tp="break"): + Music.__init__ (self) + self.type = tp + def print_ly (self, printer): + if self.type: + printer.dump ("\\%s" % self.type) + class StaffGroup: def __init__ (self, command = "StaffGroup"): self.stafftype = command @@ -1712,6 +1748,7 @@ class StaffGroup: self.spanbar = None self.children = [] self.is_group = True + self.context_modifications = [] # part_information is a list with entries of the form # [staffid, voicelist] # where voicelist is a list with entries of the form @@ -1728,27 +1765,38 @@ class StaffGroup: for c in self.children: c.set_part_information (part_name, staves_info) + def add_context_modification (self, modification): + self.context_modifications.append (modification) + def print_ly_contents (self, printer): for c in self.children: if c: c.print_ly (printer) - def print_ly_overrides (self, printer): + def needs_with (self): needs_with = False needs_with |= self.spanbar == "no" needs_with |= self.instrument_name != None needs_with |= self.short_instrument_name != None needs_with |= (self.symbol != None) and (self.symbol != "bracket") + return needs_with + def print_ly_context_mods (self, printer): + if self.instrument_name or self.short_instrument_name: + printer.dump ("\\consists \"Instrument_name_engraver\"") + if self.spanbar == "no": + printer.dump ("\\override SpanBar #'transparent = ##t") + brack = {"brace": "SystemStartBrace", + "none": "f", + "line": "SystemStartSquare"}.get (self.symbol, None) + if brack: + printer.dump ("systemStartDelimiter = #'%s" % brack) + + def print_ly_overrides (self, printer): + needs_with = self.needs_with () | (len (self.context_modifications) > 0); if needs_with: printer.dump ("\\with {") - if self.instrument_name or self.short_instrument_name: - printer.dump ("\\consists \"Instrument_name_engraver\"") - if self.spanbar == "no": - printer.dump ("\\override SpanBar #'transparent = ##t") - brack = {"brace": "SystemStartBrace", - "none": "f", - "line": "SystemStartSquare"}.get (self.symbol, None) - if brack: - printer.dump ("systemStartDelimiter = #'%s" % brack) + self.print_ly_context_mods (printer) + for m in self.context_modifications: + printer.dump (m) printer.dump ("}") def print_ly (self, printer): @@ -1758,7 +1806,7 @@ class StaffGroup: printer.dump ("<<") printer.newline () if self.stafftype and self.instrument_name: - printer.dump ("\\set %s.instrumentName = %s" % (self.stafftype, + printer.dump ("\\set %s.instrumentName = %s" % (self.stafftype, escape_instrument_string (self.instrument_name))) printer.newline () if self.stafftype and self.short_instrument_name: @@ -1779,7 +1827,9 @@ class Staff (StaffGroup): self.voice_command = "Voice" self.substafftype = None - def print_ly_overrides (self, printer): + def needs_with (self): + return False + def print_ly_context_mods (self, printer): pass def print_ly_contents (self, printer): @@ -1835,9 +1885,9 @@ class TabStaff (Staff): if self.string_tunings or self.tablature_format: printer.dump ("\\with {") if self.string_tunings: - printer.dump ("stringTunings = #'(") + printer.dump ("stringTunings = #`(") for i in self.string_tunings: - printer.dump ("%s" % i.semitones ()) + printer.dump (",%s" % i.lisp_expression ()) printer.dump (")") if self.tablature_format: printer.dump ("tablatureFormat = #%s" % self.tablature_format) @@ -1858,7 +1908,7 @@ class DrumStaff (Staff): class RhythmicStaff (Staff): def __init__ (self, command = "RhythmicStaff"): Staff.__init__ (self, command) - + class Score: def __init__ (self): self.contents = None @@ -1866,7 +1916,7 @@ class Score: def set_contents (self, contents): self.contents = contents - + def set_part_information (self, part_id, staves_info): if self.contents: self.contents.set_part_information (part_id, staves_info) @@ -1898,8 +1948,8 @@ def test_pitch (): down = Pitch () down.step = -4 down.normalize () - - + + print bflat.semitones() print bflat.transposed (fifth), bflat.transposed (fifth).transposed (fifth) print bflat.transposed (fifth).transposed (fifth).transposed (fifth) @@ -1924,7 +1974,7 @@ def test_printer (): m.append (make_note ()) m.append (make_note ()) - + t = TimeScaledMusic () t.numerator = 2 t.denominator = 3 @@ -1935,14 +1985,14 @@ def test_printer (): m.append (make_tup ()) m.append (make_tup ()) m.append (make_tup ()) - + printer = Output_printer() m.print_ly (printer) printer.newline () - + def test_expr (): m = SequentialMusic() - l = 2 + l = 2 evc = ChordEvent() n = NoteEvent() n.duration.duration_log = l @@ -1960,7 +2010,7 @@ def test_expr (): evc = ChordEvent() n = NoteEvent() n.duration.duration_log = l - n.pitch.step = 2 + n.pitch.step = 2 evc.insert_around (None, n, 0) m.insert_around (None, evc, 0) @@ -1975,7 +2025,7 @@ def test_expr (): n = KeySignatureChange() n.tonic=tonic.copy() n.scale = [0, 0, -2, 0, 0,-2,-2] - + evc.insert_around (None, n, 0) m.insert_around (None, evc, 0) @@ -1986,7 +2036,7 @@ if __name__ == '__main__': test_printer () raise 'bla' test_pitch() - + expr = test_expr() expr.set_start (Rational (0)) print expr.ly_expression() @@ -1995,6 +2045,6 @@ if __name__ == '__main__': def sub(x, start=start, stop=stop): ok = x.start >= start and x.start +x.get_length() <= stop return ok - + print expr.lisp_sub_expression(sub) diff --git a/python/musicxml.py b/python/musicxml.py index 431bcd695d..be3c61ca8f 100644 --- a/python/musicxml.py +++ b/python/musicxml.py @@ -35,6 +35,8 @@ def musicxml_duration_to_log (dur): 'longa': -2, 'long': -2}.get (dur, 0) + + def interpret_alter_element (alter_elm): alter = 0 if alter_elm: @@ -253,9 +255,8 @@ class Pitch (Music_xml_node): return step def get_octave (self): ch = self.get_unique_typed_child (get_class (u'octave')) - - step = ch.get_text ().strip () - return int (step) + octave = ch.get_text ().strip () + return int (octave) def get_alteration (self): ch = self.get_maybe_exist_typed_child (get_class (u'alter')) @@ -417,7 +418,7 @@ class Attributes (Measure_element): current_step = 0 for i in key.get_all_children (): if isinstance (i, KeyStep): - current_step = int (i.get_text ()) + current_step = i.get_text ().strip () elif isinstance (i, KeyAlter): alterations.append ([current_step, interpret_alter_element (i)]) elif isinstance (i, KeyOctave): @@ -828,7 +829,7 @@ class Part (Music_xml_node): 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) ): + isinstance (n, FiguredBass) or isinstance (n, Print)): continue if isinstance (n, Attributes) and not start_attr: @@ -844,7 +845,7 @@ class Part (Music_xml_node): voices[v].add_element (staff_attributes) continue - if isinstance (n, Partial) or isinstance (n, Barline): + if isinstance (n, Partial) or isinstance (n, Barline) or isinstance (n, Print): for v in voices.keys (): voices[v].add_element (n) continue @@ -997,7 +998,10 @@ class Beam (Music_xml_spanner): def get_type (self): return self.get_text () def is_primary (self): - return self.number == "1" + if hasattr (self, 'number'): + return self.number == "1" + else: + return True class Wavy_line (Music_xml_spanner): pass @@ -1036,15 +1040,14 @@ class Rest (Music_xml_node): def get_step (self): ch = self.get_maybe_exist_typed_child (get_class (u'display-step')) if ch: - step = ch.get_text ().strip () - return step + return ch.get_text ().strip () else: return None def get_octave (self): ch = self.get_maybe_exist_typed_child (get_class (u'display-octave')) if ch: - step = ch.get_text ().strip () - return int (step) + oct = ch.get_text ().strip () + return int (oct) else: return None @@ -1147,6 +1150,9 @@ class BeatUnitDot (Music_xml_node): class PerMinute (Music_xml_node): pass +class Print (Music_xml_node): + pass + ## need this, not all classes are instantiated @@ -1197,6 +1203,7 @@ class_dict = { 'pedal': Pedal, 'per-minute': PerMinute, 'pitch': Pitch, + 'print': Print, 'rest': Rest, 'root': Root, 'score-part': Score_part, diff --git a/scm/GNUmakefile b/scm/GNUmakefile index f2555bb481..0c1965293a 100644 --- a/scm/GNUmakefile +++ b/scm/GNUmakefile @@ -1,8 +1,8 @@ -# scm/Makefile +# scm/GNUmakefile depth = .. -INSTALLATION_DIR=$(local_lilypond_datadir)/scm/ +INSTALLATION_DIR=$(local_lilypond_datadir)/scm INSTALLATION_FILES=$(SCM_FILES) XGETTEXT_FLAGS = --language=Scheme diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 6479969eb8..82b5917d1c 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -1,305 +1,122 @@ -;;;; auto-beam.scm -- Auto-beam-engraver settings +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2000--2011 Jan Nieuwenhuizen ;;;; -;;;; (c) 2000--2009 Jan Nieuwenhuizen - -;;; specify generic beam end times - -;;; format: -;;; -;;; function shortest-duration-in-beam time-signature -;;; -;;; where -;;; -;;; function = begin or end -;;; shortest-duration-in-beam = numerator denominator; e.g.: 1 16 -;;; time-signature = numerator denominator, e.g.: 4 4 -;;; -;;; unspecified or wildcard entries for duration or time-signature -;;; are given by * * - -;;; maybe do: '(end shortest-1 16 time-3 4) ? - -(define-public default-auto-beam-settings - `( - ;; in 2 2 time: - ;; use beatLength for all except 32nd notes - ;; end beams with 32nd notes each 1 4 beat - - ((end 1 32 2 2) . ,(ly:make-moment 1 4)) - ((end 1 32 2 2) . ,(ly:make-moment 2 4)) - ((end 1 32 2 2) . ,(ly:make-moment 3 4)) - - ;; in 3 2 time: - ;; use beatLength for all except 16th and 32nd notes - ;; end beams with 16th notes each 1 4 beat - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 16 3 2) . ,(ly:make-moment 1 4)) - ((end 1 16 3 2) . ,(ly:make-moment 2 4)) - ((end 1 16 3 2) . ,(ly:make-moment 3 4)) - ((end 1 16 3 2) . ,(ly:make-moment 4 4)) - ((end 1 16 3 2) . ,(ly:make-moment 5 4)) - - ((end 1 32 3 2) . ,(ly:make-moment 1 8)) - ((end 1 32 3 2) . ,(ly:make-moment 2 8)) - ((end 1 32 3 2) . ,(ly:make-moment 3 8)) - ((end 1 32 3 2) . ,(ly:make-moment 4 8)) - ((end 1 32 3 2) . ,(ly:make-moment 5 8)) - ((end 1 32 3 2) . ,(ly:make-moment 6 8)) - ((end 1 32 3 2) . ,(ly:make-moment 7 8)) - ((end 1 32 3 2) . ,(ly:make-moment 8 8)) - ((end 1 32 3 2) . ,(ly:make-moment 9 8)) - ((end 1 32 3 2) . ,(ly:make-moment 10 8)) - ((end 1 32 3 2) . ,(ly:make-moment 11 8)) - - ;; in 2 4 time: - ;; use beatLength for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 2 4) . ,(ly:make-moment 1 8)) - ((end 1 32 2 4) . ,(ly:make-moment 2 8)) - ((end 1 32 2 4) . ,(ly:make-moment 3 8)) - - ;; in 3 4 time: - ;; override beatLength which would end beams at 1 4 beats - ;; end beams with 16th notes each 1 4 beat - ;; end beams with 32nd notes each 1 8 beat - - ((end * * 3 4) . ,(ly:make-moment 3 4)) - ((end 1 16 3 4) . ,(ly:make-moment 1 4)) - ((end 1 16 3 4) . ,(ly:make-moment 2 4)) - ((end 1 32 3 4) . ,(ly:make-moment 1 8)) - ((end 1 32 3 4) . ,(ly:make-moment 2 8)) - ((end 1 32 3 4) . ,(ly:make-moment 3 8)) - ((end 1 32 3 4) . ,(ly:make-moment 4 8)) - ((end 1 32 3 4) . ,(ly:make-moment 5 8)) - - ;; in common time: - ;; override beatLength which would end beams at 1 4 beats - ;; end all beams at 1 2 beat - ;; end beams with 8th triplets each 1 4 beat - ;; end beams with 16th notes each 1 4 beat - ;; end beams with 32nd notes each 1 8 beat - - ((end * * 4 4) . ,(ly:make-moment 1 2)) - - ((end 1 12 4 4) . ,(ly:make-moment 1 4)) - ((end 1 12 4 4) . ,(ly:make-moment 3 4)) - - ((end 1 16 4 4) . ,(ly:make-moment 1 4)) - ((end 1 16 4 4) . ,(ly:make-moment 3 4)) - - ((end 1 32 4 4) . ,(ly:make-moment 1 8)) - ((end 1 32 4 4) . ,(ly:make-moment 2 8)) - ((end 1 32 4 4) . ,(ly:make-moment 3 8)) - ((end 1 32 4 4) . ,(ly:make-moment 5 8)) - ((end 1 32 4 4) . ,(ly:make-moment 6 8)) - ((end 1 32 4 4) . ,(ly:make-moment 7 8)) - - ;; in 3 8 time: - ;; override beatLength which would end beams at 1 8 beats - - ((end * * 3 8) . ,(ly:make-moment 3 8)) - - ;; in 4 8 time - ;; override beatLength which would end beams at 1 8 beats - ;; end all beams at 1 4 beat - ;; end beams with 32nd notes each 1 8 beat - - ((end * * 4 8) . ,(ly:make-moment 1 4)) - ((end 1 32 4 8) . ,(ly:make-moment 1 8)) - ((end 1 32 4 8) . ,(ly:make-moment 3 8)) - - ;; in 6 8, 9 8 and 12 8 time: - ;; use beatGrouping for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 6 8) . ,(ly:make-moment 1 8)) - ((end 1 32 6 8) . ,(ly:make-moment 2 8)) - ((end 1 32 6 8) . ,(ly:make-moment 3 8)) - ((end 1 32 6 8) . ,(ly:make-moment 4 8)) - ((end 1 32 6 8) . ,(ly:make-moment 5 8)) - - ((end 1 32 9 8) . ,(ly:make-moment 1 8)) - ((end 1 32 9 8) . ,(ly:make-moment 2 8)) - ((end 1 32 9 8) . ,(ly:make-moment 3 8)) - ((end 1 32 9 8) . ,(ly:make-moment 4 8)) - ((end 1 32 9 8) . ,(ly:make-moment 5 8)) - ((end 1 32 9 8) . ,(ly:make-moment 6 8)) - ((end 1 32 9 8) . ,(ly:make-moment 7 8)) - ((end 1 32 9 8) . ,(ly:make-moment 8 8)) - - ((end 1 32 12 8) . ,(ly:make-moment 1 8)) - ((end 1 32 12 8) . ,(ly:make-moment 2 8)) - ((end 1 32 12 8) . ,(ly:make-moment 3 8)) - ((end 1 32 12 8) . ,(ly:make-moment 4 8)) - ((end 1 32 12 8) . ,(ly:make-moment 5 8)) - ((end 1 32 12 8) . ,(ly:make-moment 6 8)) - ((end 1 32 12 8) . ,(ly:make-moment 7 8)) - ((end 1 32 12 8) . ,(ly:make-moment 8 8)) - ((end 1 32 12 8) . ,(ly:make-moment 9 8)) - ((end 1 32 12 8) . ,(ly:make-moment 10 8)) - ((end 1 32 12 8) . ,(ly:make-moment 11 8)) - - ;; in 4 16 time - ;; end all beams each 1 8 beat - - ((end * * 4 16) . ,(ly:make-moment 1 8)) - - )) - -(define (override-property-setting context property setting value) - "Like the C++ code that executes \\override, but without type -checking. " - (ly:context-set-property! - context property - (cons (cons setting value) (ly:context-property context property)))) - -(define (revert-property-setting context property setting) - "Like the C++ code that executes \revert, but without type -checking. " - - (define (revert-member alist entry new) - "Return ALIST, with ENTRY removed. ALIST is not modified, instead -a fresh copy of the list-head is made." - (cond - ((null? alist) new) - ((equal? (car alist) entry) (revert-member (cdr alist) entry new)) - (else (revert-member (cdr alist) entry (cons (car alist) new))))) - - (ly:context-set-property! - context property - (revert-member (ly:context-property context property) setting '()))) - -(define-public (override-auto-beam-setting setting num den . rest) - (ly:export - (context-spec-music - (make-apply-context (lambda (c) - (override-property-setting - c 'autoBeamSettings - setting (ly:make-moment num den)))) - (if (and (pair? rest) (symbol? (car rest))) - (car rest) - 'Voice)))) - -(define-public (score-override-auto-beam-setting setting num den) - (override-auto-beam-setting setting num den 'Score)) - -(define-public (revert-auto-beam-setting setting num den . rest) - (ly:export - (context-spec-music - (make-apply-context - (lambda (c) - (revert-property-setting - c 'autoBeamSettings - (cons setting (ly:make-moment num den))))) - (if (and (pair? rest) (symbol? (car rest))) - (car rest) - 'Voice)))) +;;;; 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 . -;; Determine end moment for auto beaming (or begin moment, but mostly -;; 0== anywhere). In order of decreasing priority: +;; Determine whether an auto beam should be extended to the right +;; of the current stem. We start anywhere except on the last note +;; of a beat. We end according to the follwing rules, in order +;; of decreasing priority: ;; -;; 1. end * * -;; 2. end * * * -;; 3. end -;; 4. end * -;; 5. if 1-4 not specified, begin anywhere, end at time determined by -;; beatGrouping and beatLength: -;; if beatGrouping and beatLength are consistent with measureLength, -;; use beatGrouping to determine end of beams. -;; if beatGrouping and beatLength are inconsistent with measureLength, -;; use beatLength to determine end of beams. +;; 1. end +;; 2. end +;; 3. if 1-2 not specified, end at beatStructure intervals ;; ;; Rationale: ;; ;; [user override] ;; 1. override for specific duration type -;; 2. generic override +;; 2. overrides apply to shorter durations ;; -;; [to be defined in config file] -;; 3. exceptions for specific time signature, for specific duration type -;; 4. exceptions for specific time signature -;; 5. easy catch-all rule for non-specified measure types +;; defined in scm/time-signature-settings.scm: +;; 1. Default grouping for common time signatures - -(define-public (default-auto-beam-check context dir test) +(define-public (default-auto-beam-check context dir measure-pos test-beam) (define (get name default) (let ((value (ly:context-property context name))) (if (not (null? value)) value default))) - (define (ending-moments group-list start-beat beat-length) + (define (beamingmoment (car a)) + (fraction->moment (car b)))) + + (define (ending-moments group-list start-beat base-moment) (if (null? group-list) '() (let ((new-start (+ start-beat (car group-list)))) - (cons (ly:moment-mul (ly:make-moment new-start 1) beat-length) - (ending-moments (cdr group-list) new-start beat-length))))) - - (define (make-end-settings time ending-list moment-den) - (if (null? ending-list) - '() - (cons (cons (append '(end * *) time) - (ly:make-moment (car ending-list) moment-den)) - (make-end-settings time (cdr ending-list) moment-den)))) - + (cons (ly:moment-mul (ly:make-moment new-start 1) base-moment) + (ending-moments (cdr group-list) new-start base-moment))))) + + (define (larger-setting test-beam sorted-alist) + (if (null? sorted-alist) + '() + (let* ((first-key (caar sorted-alist)) + (first-moment (fraction->moment first-key))) + (if (moment<=? test-beam first-moment) + (car sorted-alist) + (larger-setting test-beam (cdr sorted-alist)))))) + + (define (beat-end? moment beat-structure) + (pair? (member moment beat-structure))) ;; member returns a list if found, not #t + + ;; Start of actual auto-beam test routine + ;; + ;; ;; Don't start auto beams on grace notes (if (and (!= (ly:moment-grace-numerator (ly:context-now context)) 0) (= dir START)) #f - (let* ((beat-length (get 'beatLength (ly:make-moment 1 4))) + (let* ((base-moment (get 'baseMoment (ly:make-moment 1 4))) (measure-length (get 'measureLength (ly:make-moment 1 1))) - (measure-pos (get 'measurePosition ZERO-MOMENT)) - (beat-grouping (get 'beatGrouping '())) - (settings (get 'autoBeamSettings '())) - (function (list (if (= dir START) 'begin 'end))) - ;; Calculate implied time signature based on measureLength - ;; and beatLength for default value in get - (num-mom (ly:moment-div measure-length beat-length)) - (num (inexact->exact - (round (/ (ly:moment-main-numerator num-mom) - (ly:moment-main-denominator num-mom))))) - (den (ly:moment-main-denominator beat-length)) - (time-signature-fraction - (get 'timeSignatureFraction (cons num den))) - (time (list (car time-signature-fraction) - (cdr time-signature-fraction))) - (type (list (ly:moment-main-numerator test) - (ly:moment-main-denominator test))) - (pos (if (>= (ly:moment-main-numerator measure-pos) 0) - measure-pos - (ly:moment-add measure-length measure-pos))) - (grouping-moments (ending-moments beat-grouping 0 beat-length)) - ;; Calculate implied measure length from beatGrouping - ;; and beatLength - (grouping-length (if (null? grouping-moments) - ZERO-MOMENT - (list-ref grouping-moments - (1- (length grouping-moments))))) - (lst (list - ;; Hmm, should junk user-override feature, - ;; or split this in user-override and config section? - (append function type '(* *)) - (append function '(* * * *)) - (append function type time) - (append function '(* *) time))) - (predefined-setting (first-assoc lst settings))) - (if (or - ;; always begin or end beams at beginning/ending of measure - (= (ly:moment-main-numerator pos) 0) - (first-member (map (lambda (x) (cons x pos)) lst) settings)) - #t - (if (= dir START) - ;; if no entry matches our function + time or type, - ;; start anywhere - (not predefined-setting) - ;; if entry matches our function + time or type, check moment - (if predefined-setting - (equal? measure-pos (cdr predefined-setting)) - ;; if measure-length matches grouping-length, use - ;; grouping moments, else use beat-length - (if (equal? measure-length grouping-length) - (member measure-pos grouping-moments) - (= (ly:moment-main-denominator - (ly:moment-div pos beat-length)) 1)))))))) + (time-signature-fraction + (get 'timeSignatureFraction '(4 . 4))) + (beat-structure (get 'beatStructure '(1 1 1 1))) + (beat-endings (ending-moments beat-structure 0 base-moment)) + (exceptions (sort (assoc-get 'end + (get 'beamExceptions '()) + '()) + beamingfraction test-beam)) + (non-grace (ly:make-moment + (ly:moment-main-numerator measure-pos) + (ly:moment-main-denominator measure-pos))) + (pos (if (ly:momentmoment default-beat-length) + test-beam)) + (exception-moments (ending-moments + exception-grouping 0 grouping-moment))) + + (if (= dir START) + ;; Start rules + (or (not (equal? time-signature-fraction '(3 . 4))) ;; start anywhere if not 3/4 + (= (ly:moment-main-numerator pos) 0) ;; start at beginning of measure + (not (null? exception-grouping)) ;; don't use special rules if exception + (beat-end? pos beat-endings) ;; are we at start of beat? + (and (not (equal? test-beam base-moment)) ;; is beat split? + (not (beat-end? (ly:moment-add pos test-beam) + beat-endings)))) ;; will this note end the beat + ;; End rules + (or (= (ly:moment-main-numerator pos) 0) ;; end at measure beginning + (if (null? exception-grouping) + (beat-end? pos beat-endings) ;; no exception, so check beat ending + (member pos exception-moments))))))) ;; check exception rule + diff --git a/scm/autochange.scm b/scm/autochange.scm index c445997199..54f5e96250 100644 --- a/scm/autochange.scm +++ b/scm/autochange.scm @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; autochange - fairly related to part combining. +;; autochange.scm - fairly related to part combining. (define-public (make-autochange-music parser music) (define (generate-split-list change-moment event-list acc) diff --git a/scm/backend-library.scm b/scm/backend-library.scm index ca1a16b7f6..706bccb2de 100644 --- a/scm/backend-library.scm +++ b/scm/backend-library.scm @@ -1,30 +1,34 @@ -;;;; backend-library.scm -- helpers for the backends. +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2005--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2005--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; backend helpers. -(define-public (ly:system command . rest) - (let* ((status 0) - (dev-null "/dev/null") - (silenced (if (or (ly:get-option 'verbose) - (not (access? dev-null W_OK))) - command - (format #f "~a > ~a 2>&1 " command dev-null)))) - (if (ly:get-option 'verbose) - (begin - (ly:message (_ "Invoking `~a'...") command)) - (ly:progress "\n")) - - (set! status - (if (pair? rest) - (system-with-env silenced (car rest)) - (system silenced))) - +(use-modules (scm ps-to-png) + (scm paper-system) + (ice-9 optargs)) + +(define-public (ly:system command) + (if (ly:get-option 'verbose) + (begin + (ly:message (_ "Invoking `~a'...") (string-join command))) + (ly:progress "\n")) + (let ((status (apply ly:spawn command))) (if (> status 0) (begin (ly:message (_ "`~a' failed (~a)") command status) @@ -32,24 +36,8 @@ ;; hmmm. what's the best failure option? (throw 'ly-file-failed))))) -(define-public (system-with-env cmd env) - - "Execute CMD in fork, with ENV (a list of strings) as the environment" - (let* - ;; laziness: should use execle? - - ((pid (primitive-fork))) - (if (= 0 pid) - ;; child - (begin - (environ env) - (system cmd)) - - ;; parent - (cdr (waitpid pid))))) - (define-public (sanitize-command-option str) - "Kill dubious shell quoting" + "Kill dubious shell quoting." (string-append "\"" @@ -76,50 +64,37 @@ (dir-basename name ".ps" ".eps") ".pdf")) (is-eps (string-match "\\.eps$" name)) - (paper-size-string (if is-eps - "-dEPSCrop" - (ly:format "-dDEVICEWIDTHPOINTS=~$\ - -dDEVICEHEIGHTPOINTS=~$" - paper-width paper-height))) - - (cmd (simple-format #f - "~a\ - ~a\ - ~a\ - ~a\ - -dCompatibilityLevel=1.4\ - -dNOPAUSE\ - -dBATCH\ - -r1200\ - -sDEVICE=pdfwrite\ - -sOutputFile=~S\ - -c .setpdfwrite\ - -f ~S\ -" - (search-gs) - (if (ly:get-option 'verbose) "" "-q") - (if (or (ly:get-option 'gs-load-fonts) - (ly:get-option 'gs-load-lily-fonts)) - "-dNOSAFER" - "-dSAFER") - paper-size-string - pdf-name - name))) - ;; The wrapper on windows cannot handle `=' signs, - ;; gs has a workaround with #. - (if (eq? PLATFORM 'windows) - (begin - (set! cmd (string-regexp-substitute "=" "#" cmd)) - (set! cmd (string-regexp-substitute "-dSAFER " "" cmd)) - (if (access? pdf-name W_OK) - (delete-file pdf-name)))) + (*unspecified* (if #f #f)) + (cmd + (remove (lambda (x) (eq? x *unspecified*)) + (list + (search-gs) + (if (ly:get-option 'verbose) *unspecified* "-q") + (if (or (ly:get-option 'gs-load-fonts) + (ly:get-option 'gs-load-lily-fonts) + (eq? PLATFORM 'windows)) + "-dNOSAFER" + "-dSAFER") + + (if is-eps + "-dEPSCrop" + (ly:format "-dDEVICEWIDTHPOINTS=~$" paper-width)) + (if is-eps + *unspecified* + (ly:format "-dDEVICEHEIGHTPOINTS=~$" paper-height)) + "-dCompatibilityLevel=1.4" + "-dNOPAUSE" + "-dBATCH" + "-r1200" + "-sDEVICE=pdfwrite" + (string-append "-sOutputFile=" pdf-name) + "-c.setpdfwrite" + (string-append "-f" name))))) (ly:message (_ "Converting to `~a'...") pdf-name) (ly:progress "\n") (ly:system cmd))) -(use-modules (scm ps-to-png)) - (define-public (postscript->png resolution paper-width paper-height name) (let* ((verbose (ly:get-option 'verbose)) (rename-page-1 #f)) @@ -189,3 +164,112 @@ scope))) (apply string-append (map output-scope scopes))) +(define-public (relevant-book-systems book) + (let ((systems (ly:paper-book-systems book))) + ;; skip booktitles. + (if (and (not (ly:get-option 'include-book-title-preview)) + (pair? systems) + (ly:prob-property (car systems) 'is-book-title #f)) + (cdr systems) + systems))) + +(define-public (relevant-dump-systems systems) + (let ((to-dump-systems '())) + (for-each + (lambda (sys) + (if (or (paper-system-title? sys) + (not (pair? to-dump-systems)) + (paper-system-title? (car to-dump-systems))) + (set! to-dump-systems (cons sys to-dump-systems)))) + systems) + to-dump-systems)) + +(define missing-stencil-list '()) + +(define-public (backend-testing output-module) + (define (missing-stencil-expression name) + (begin + (ly:warning (_ "missing stencil expression `~S'") name) + "")) + + (map (lambda (x) + (if (not (module-defined? output-module x)) + (begin + (module-define! output-module x + (lambda* (#:optional y . z) + (missing-stencil-expression x))) + (set! missing-stencil-list (append (list x) + missing-stencil-list))))) + (ly:all-stencil-commands))) + +(define-public (remove-stencil-warnings output-module) + (for-each + (lambda (x) + (module-remove! output-module x)) + missing-stencil-list)) + +(define (filter-out pred? lst) + (filter (lambda (x) (not (pred? x))) lst)) + +(define-public (font-name-split font-name) + "Return @code{(FONT-NAME . DESIGN-SIZE)} from @var{font-name} string +or @code{#f}." + (let ((match (regexp-exec (make-regexp "(.*)-([0-9]*)") font-name))) + (if (regexp-match? match) + (cons (match:substring match 1) (match:substring match 2)) + (cons font-name-designsize #f)))) + +;; Example of a pango-physical-font +;; ("Emmentaler-11" "/home/janneke/vc/lilypond/out/share/lilypond/current/fonts/otf/emmentaler-11.otf" 0) +(define-public (pango-pf-font-name pango-pf) + "Return the font-name of the pango physical font @var{pango-pf}." + (list-ref pango-pf 0)) +(define-public (pango-pf-file-name pango-pf) + "Return the file-name of the pango physical font @var{pango-pf}." + (list-ref pango-pf 1)) +(define-public (pango-pf-fontindex pango-pf) + "Return the fontindex of the pango physical font @var{pango-pf}." + (list-ref pango-pf 2)) + +(define (pango-font-name pango-font) + (let ((pf-fonts (ly:pango-font-physical-fonts pango-font))) + (if (pair? pf-fonts) + (pango-pf-font-name (car pf-fonts)) + ""))) + +(define-public (define-fonts paper define-font define-pango-pf) + "Return a string of all fonts used in @var{paper}, invoking the functions +@var{define-font} and @var{define-pango-pf} for producing the actual font +definition." + + (let* ((font-list (ly:paper-fonts paper)) + (pango-fonts (filter ly:pango-font? font-list)) + (other-fonts (filter-out ly:pango-font? font-list)) + (other-font-names (map ly:font-name other-fonts)) + (pango-only-fonts + (filter-out (lambda (x) + (member (pango-font-name x) other-font-names)) + pango-fonts))) + + (define (font-load-command font) + (let* ((font-name (ly:font-name font)) + (designsize (ly:font-design-size font)) + (magnification (* (ly:font-magnification font))) + (ops (ly:output-def-lookup paper 'output-scale)) + (scaling (* ops magnification designsize))) + (if (equal? font-name "unknown") + (display (list font font-name))) + (define-font font font-name scaling))) + + (define (pango-font-load-command pango-font) + (let* ((pf-fonts (ly:pango-font-physical-fonts pango-font)) + (pango-pf (if (pair? pf-fonts) (car pf-fonts) '("" "" 0))) + (font-name (pango-pf-font-name pango-pf)) + (scaling (ly:output-def-lookup paper 'output-scale))) + (if (equal? font-name "unknown") + (display (list pango-font font-name))) + (define-pango-pf pango-pf font-name scaling))) + + (string-append + (apply string-append (map font-load-command other-fonts)) + (apply string-append (map pango-font-load-command pango-only-fonts))))) diff --git a/scm/bezier-tools.scm b/scm/bezier-tools.scm new file mode 100644 index 0000000000..76ececb891 --- /dev/null +++ b/scm/bezier-tools.scm @@ -0,0 +1,105 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2010--2011 Carl D. Sorensen +;;;; +;;;; 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 . + +(define (make-coord x-value y-value) + "Make a coordinate pair from @var{x-valye} and @var{y-value}." + (cons x-value y-value)) + +(define (coord+ coord1 coord2) + "Add @var{coord1} to @var{coord2}, returning a coordinate." + (cons (+ (car coord1) (car coord2)) + (+ (cdr coord1) (cdr coord2)))) + +(define (coord- coord1 coord2) + "Subtract @var{coord2} from @var{coord1}." + (cons (- (car coord1) (car coord2)) + (- (cdr coord1) (cdr coord2)))) + +(define (coord* scalar coord) + "Multiply each component of @var{coord} by @var{scalar}." + (cons (* (car coord) scalar) + (* (cdr coord) scalar))) + +(define (make-bezier point-0 point-1 point-2 point-3) + "Create a cubic bezier from the four control points." + (list point-0 point-1 point-2 point-3)) + +(define (interpolated-control-points control-points split-value) + "Interpolate @var{control-points} at @var{split-value}. Return a +set of control points that is one degree less than @var{control-points}." + (if (null? (cdr control-points)) + '() + (let ((first (car control-points)) + (second (cadr control-points))) + (cons* (coord+ first (coord* split-value (coord- second first))) + (interpolated-control-points + (cdr control-points) + split-value))))) + +(define (split-bezier bezier split-value) + "Split a cubic bezier defined by @var{bezier} at the value +@var{split-value}. @var{bezier} is a list of pairs; each pair is +is the coordinates of a control point. Returns a list of beziers. +The first element is the LHS spline; the second +element is the RHS spline." + (let* ((quad-points (interpolated-control-points + bezier + split-value)) + (lin-points (interpolated-control-points + quad-points + split-value)) + (const-point (interpolated-control-points + lin-points + split-value)) + (left-side (list (car bezier) + (car quad-points) + (car lin-points) + (car const-point))) + (right-side (list (car const-point) + (list-ref lin-points 1) + (list-ref quad-points 2) + (list-ref bezier 3)))) + (cons left-side right-side))) + +(define (multi-split-bezier bezier start-t split-list) + "Split @var{bezier} at all the points listed in @var{split-list}. +@var{bezier} has a parameter value that goes from @var{start-t} to 1. +Returns a list of @var{(1+ (length split-list))} beziers." + (let* ((bezier-split (split-bezier bezier + (/ (- (car split-list) start-t) + (- 1 start-t)))) + (left-bezier (car bezier-split)) + (right-bezier (cdr bezier-split))) + (if (null? (cdr split-list)) + bezier-split + (cons* left-bezier + (multi-split-bezier right-bezier + (car split-list) + (cdr split-list)))))) + + +(define (bezier-sandwich-list top-bezier bottom-bezier) + "create the list of control points for a bezier sandwich consisting +of @var{top-bezier} and @var{bottom-bezier}." + (list (list-ref bottom-bezier 1) + (list-ref bottom-bezier 2) + (list-ref bottom-bezier 3) + (list-ref bottom-bezier 0) + (list-ref top-bezier 2) + (list-ref top-bezier 1) + (list-ref top-bezier 0) + (list-ref top-bezier 3))) diff --git a/scm/c++.scm b/scm/c++.scm index b6ec6a4ee7..74f58f4da3 100644 --- a/scm/c++.scm +++ b/scm/c++.scm @@ -1,9 +1,20 @@ -;;;; c++.scm -- implement Scheme frontends to C++ functions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . ;;; Note: this file can't be used without LilyPond executable @@ -36,12 +47,23 @@ (define-public (string-or-pair? x) (or (string? x) (pair? x))) +(define-public (number-or-pair? x) + (or (number? x) (pair? x))) + +(define-public (cheap-list? x) + (or (pair? x) (null? x))) + +(define-public (list-or-symbol? x) + (or (cheap-list? x) (symbol? x))) + (define-public (scheme? x) #t) +(define-public (symbol-or-boolean? x) + (or (symbol? x) (boolean? x))) ;; moved list to end of lily.scm: then all type-predicates are ;; defined. -(define type-p-name-alist '()) +(define type-p-name-alist '()) (define (match-predicate obj alist) (if (null? alist) @@ -59,4 +81,6 @@ (define-public (type-name predicate) (let ((entry (assoc predicate type-p-name-alist))) (if (pair? entry) (cdr entry) - "unknown"))) + (string-trim-right + (symbol->string (procedure-name predicate)) + #\?)))) diff --git a/scm/chord-entry.scm b/scm/chord-entry.scm index 45c395ba4e..06cc077ce4 100644 --- a/scm/chord-entry.scm +++ b/scm/chord-entry.scm @@ -1,17 +1,27 @@ -;;;; chord-entry.scm -- Generate chord names for the parser. +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys ;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; 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 . (define-public (construct-chord-elements root duration modifications) - " Build a chord on root using modifiers in MODIFICATIONS. NoteEvents -have duration DURATION. + "Build a chord on root using modifiers in @var{modifications}. +@code{NoteEvents} have duration @var{duration}. -Notes: natural 11 is left from chord if not explicitly specified. +Notes: Natural 11 is left from chord if not explicitly specified. -Entry point for the parser. -" +Entry point for the parser." (let* ((flat-mods (flatten-list modifications)) (base-chord (stack-thirds (ly:make-pitch 0 4 0) the-canonical-chord)) (complete-chord '()) @@ -22,7 +32,7 @@ Entry point for the parser. (start-additions #t)) (define (interpret-inversion chord mods) - "Read /FOO part. Side effect: INVERSION is set." + "Read /FOO part. Side effect: INVERSION is set." (if (and (> (length mods) 1) (eq? (car mods) 'chord-slash)) (begin (set! inversion (cadr mods)) @@ -30,13 +40,13 @@ Entry point for the parser. (interpret-bass chord mods)) (define (interpret-bass chord mods) - "Read /+FOO part. Side effect: BASS is set." + "Read /+FOO part. Side effect: BASS is set." (if (and (> (length mods) 1) (eq? (car mods) 'chord-bass)) (begin (set! bass (cadr mods)) (set! mods (cddr mods)))) (if (pair? mods) - (scm-error 'chord-format "construct-chord" "Spurious garbage following chord: ~A" mods #f)) + (ly:warning (_ "Spurious garbage following chord: ~A") mods)) chord) (define (interpret-removals chord mods) @@ -50,7 +60,7 @@ Entry point for the parser. (interpret-inversion chord mods))) (define (interpret-additions chord mods) - "Interpret additions. TODO: should restrict modifier use?" + "Interpret additions. TODO: should restrict modifier use?" (cond ((null? mods) chord) ((ly:pitch? (car mods)) (if (= (pitch-step (car mods)) 11) @@ -225,7 +235,7 @@ DURATION, and INVERSION." '(1 3 5 7 9 11 13))) (define (stack-thirds upper-step base) - "Stack thirds listed in BASE until we reach UPPER-STEP. Add + "Stack thirds listed in BASE until we reach UPPER-STEP. Add UPPER-STEP separately." (cond ((null? base) '()) ((> (ly:pitch-steps upper-step) (ly:pitch-steps (car base))) diff --git a/scm/chord-generic-names.scm b/scm/chord-generic-names.scm index 190ef7d437..a30036d1af 100644 --- a/scm/chord-generic-names.scm +++ b/scm/chord-generic-names.scm @@ -1,8 +1,19 @@ -;;;; chord-generic-names.scm -- Compile chord names +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2003--2011 Jan Nieuwenhuizen ;;;; -;;;; (c) 2003--2009 Jan Nieuwenhuizen +;;;; 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 . ;;;; NOTE: this is experimental code @@ -10,6 +21,10 @@ ;;;; Naming of the base chord (steps 1-5) is handled by exceptions only ;;;; see input/test/chord-names-dpnj.ly + +(define (default-note-namer pitch) + (note-name->markup pitch #f)) + (define (markup-or-empty-markup markup) "Return MARKUP if markup, else empty-markup" (if (markup? markup) markup empty-markup)) @@ -32,14 +47,13 @@ (define-public (ugh-compat-double-plus-new-chord->markup style pitches bass inversion context options) - "Entry point for New_chord_name_engraver. + "Entry point for @code{New_chord_name_engraver}. FIXME: func, options/context have changed - See -double-plus-new-chord-name.scm for the signature of STYLE. PITCHES, -BASS and INVERSION are lily pitches. OPTIONS is an alist-alist (see -input/test/dpncnt.ly). - " + +See @file{double-plus-new-chord-name.scm} for the signature of @var{style}. +@var{pitches}, @var{bass}, and @var{inversion} are lily pitches. +@var{options} is an alist-alist (see @file{input/test/dpncnt.ly})." (define (step-nr pitch) (let* ((pitch-nr (+ (* 7 (ly:pitch-octave pitch)) @@ -97,16 +111,16 @@ input/test/dpncnt.ly). (list (ly:context-property context 'majorSevenSymbol)) (list (accidental->markup (step-alteration pitch)) (make-simple-markup (number->string (step-nr pitch))))))) - + ;; tja, kennok (define (make-sub->markup step->markup) (lambda (pitch) (make-line-markup (list (make-simple-markup "no") (step->markup pitch))))) - + (define (step-based-sub->markup step->markup pitch) (make-line-markup (list (make-simple-markup "no") (step->markup pitch)))) - + (define (get-full-list pitch) (if (<= (step-nr pitch) (step-nr (last pitches))) (cons pitch (get-full-list (next-third pitch))) @@ -162,7 +176,7 @@ input/test/dpncnt.ly). ;; (all pitches) (all (append (take full (length partial-pitches)) (drop pitches (length partial-pitches)))) - + (highest (last all)) (missing (list-minus full (map pitch-unalter all))) (consecutive (get-consecutive 1 all)) @@ -170,7 +184,7 @@ input/test/dpncnt.ly). (altered (filter step-even-or-altered? all)) (cons-alt (filter step-even-or-altered? consecutive)) (base (list-minus consecutive altered))) - + (if #f (begin (write-me "full:" full) @@ -192,7 +206,7 @@ input/test/dpncnt.ly). ;; + subs:missing (let* ((root->markup (assoc-get - 'root->markup options note-name->markup)) + 'root->markup options default-note-namer)) (step->markup (assoc-get 'step->markup options step->markup-plusminus)) (sub->markup (assoc-get @@ -201,11 +215,11 @@ input/test/dpncnt.ly). (step-based-sub->markup step->markup x)))) (sep (assoc-get 'separator options (make-simple-markup "/")))) - + (if (pair? full-markup) (make-line-markup (list (root->markup root) full-markup)) - + (make-line-markup (list (root->markup root) @@ -230,7 +244,7 @@ input/test/dpncnt.ly). ;; + 'add' ;; + steps:rest (let* ((root->markup (assoc-get - 'root->markup options note-name->markup)) + 'root->markup options default-note-namer)) (step->markup (assoc-get ;; FIXME: ignatzek @@ -240,11 +254,11 @@ input/test/dpncnt.ly). 'separator options (make-simple-markup " "))) (add-prefix (assoc-get 'add-prefix options (make-simple-markup " add")))) - + (if (pair? full-markup) (make-line-markup (list (root->markup root) full-markup)) - + (make-line-markup (list (root->markup root) @@ -252,11 +266,11 @@ input/test/dpncnt.ly). (make-normal-size-super-markup (make-line-markup (list - + ;; kludge alert: omit <= 5 ;;(markup-join (map step->markup ;; (cons (last base) cons-alt)) sep) - + ;; This fixes: ;; c C5 -> C ;; c:2 C5 2 -> C2 @@ -268,7 +282,7 @@ input/test/dpncnt.ly). (if (> (step-nr tb) 5) (cons tb cons-alt) cons-alt))) sep) - + (if (pair? rest) add-prefix empty-markup) diff --git a/scm/chord-ignatzek-names.scm b/scm/chord-ignatzek-names.scm index 0621716d17..696d02fc7a 100644 --- a/scm/chord-ignatzek-names.scm +++ b/scm/chord-ignatzek-names.scm @@ -1,8 +1,19 @@ -;;;; chord-ignatzek-names.scm -- chord name utility functions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . @@ -12,20 +23,20 @@ ;; jazz-part 2 ;; ;; after Klaus Ignatzek, Die Jazzmethode fuer Klavier 1. -;; +;; ;; The idea is: split chords into -;; +;; ;; ROOT PREFIXES MAIN-NAME ALTERATIONS SUFFIXES ADDITIONS ;; ;; and put that through a layout routine. -;; -;; the split is a procedural process, with lots of set!. +;; +;; the split is a procedural process, with lots of set!. ;; ;; todo: naming is confusing: steps (0 based) vs. steps (1 based). (define (pitch-step p) - "Musicological notation for an interval. Eg. C to D is 2." + "Musicological notation for an interval. Eg. C to D is 2." (+ 1 (ly:pitch-steps p))) (define (get-step x ps) @@ -33,7 +44,7 @@ (if (null? ps) #f (if (= (- x 1) (ly:pitch-steps (car ps))) - (car ps) + (car ps) (get-step x (cdr ps))))) (define (replace-step p ps) @@ -66,21 +77,21 @@ (if (< (ly:pitch-steps (car ps)) (- x 1)) (remove-uptil-step x (cdr ps)) ps))) - + (define name-root (ly:context-property context 'chordRootNamer)) - (define name-note + (define name-note (let ((nn (ly:context-property context 'chordNoteNamer))) (if (eq? nn '()) ;; replacing the next line with name-root gives guile-error...? -rz ;; apparently sequence of defines is equivalent to let, not let* ? -hwn - (ly:context-property context 'chordRootNamer) + (ly:context-property context 'chordRootNamer) ;; name-root nn))) (define (is-natural-alteration? p) (= (natural-chord-alteration p) (ly:pitch-alteration p))) - + (define (ignatzek-format-chord-name root prefix-modifiers @@ -88,11 +99,12 @@ alteration-pitches addition-pitches suffix-modifiers - bass-pitch) + bass-pitch + lowercase-root?) - "Format for the given (lists of) pitches. This is actually more + "Format for the given (lists of) pitches. This is actually more work than classifying the pitches." - + (define (filter-main-name p) "The main name: don't print anything for natural 5 or 3." (if @@ -104,29 +116,29 @@ work than classifying the pitches." (list (name-step p)))) (define (glue-word-to-step word x) - (make-line-markup + (make-line-markup (list (make-simple-markup word) (name-step x)))) - + (define (suffix-modifier->markup mod) (if (or (= 4 (pitch-step mod)) (= 2 (pitch-step mod))) (glue-word-to-step "sus" mod) (glue-word-to-step "huh" mod))) - + (define (prefix-modifier->markup mod) (if (and (= 3 (pitch-step mod)) (= FLAT (ly:pitch-alteration mod))) - (make-simple-markup "m") + (make-simple-markup (if lowercase-root? "" "m")) (make-simple-markup "huh"))) - + (define (filter-alterations alters) "Filter out uninteresting (natural) pitches from ALTERS." - + (define (altered? p) (not (is-natural-alteration? p))) - + (if (null? alters) '() @@ -152,11 +164,11 @@ work than classifying the pitches." (list (ly:context-property context 'majorSevenSymbol)) args) (cons (accidental->markup (step-alteration pitch)) args)))) - + (make-line-markup total))) (let* ((sep (ly:context-property context 'chordNameSeparator)) - (root-markup (name-root root)) + (root-markup (name-root root lowercase-root?)) (add-markups (map (lambda (x) (glue-word-to-step "add" x)) addition-pitches)) (filtered-alterations (filter-alterations alteration-pitches)) @@ -171,7 +183,7 @@ work than classifying the pitches." suffixes add-markups) sep)) (base-stuff (if (ly:pitch? bass-pitch) - (list sep (name-note bass-pitch)) + (list sep (name-note bass-pitch #f)) '()))) (set! base-stuff @@ -188,20 +200,25 @@ work than classifying the pitches." (define (ignatzek-format-exception root exception-markup - bass-pitch) + bass-pitch + lowercase-root?) (make-line-markup `( - ,(name-root root) + ,(name-root root lowercase-root?) ,exception-markup - . + . ,(if (ly:pitch? bass-pitch) (list (ly:context-property context 'chordNameSeparator) - (name-note bass-pitch)) + (name-note bass-pitch #f)) '())))) (let* ((root (car in-pitches)) (pitches (map (lambda (x) (ly:pitch-diff x root)) (cdr in-pitches))) + (lowercase-root? + (and (ly:context-property context 'chordNameLowercaseMinor) + (let ((third (get-step 3 pitches))) + (and third (= (ly:pitch-alteration third) FLAT))))) (exceptions (ly:context-property context 'chordNameExceptions)) (exception (assoc-get pitches exceptions)) (prefixes '()) @@ -213,10 +230,10 @@ work than classifying the pitches." inversion bass)) (alterations '())) - + (if exception - (ignatzek-format-exception root exception bass-note) - + (ignatzek-format-exception root exception bass-note lowercase-root?) + (begin ;; no exception. ;; handle sus4 and sus2 suffix: if there is a 3 together with @@ -236,7 +253,7 @@ work than classifying the pitches." (if (and (get-step 3 pitches) (= (ly:pitch-alteration (get-step 3 pitches)) FLAT)) (set! prefixes (cons (get-step 3 pitches) prefixes))) - + ;; lazy bum. Should write loop. (cond ((get-step 7 pitches) (set! main-name (get-step 7 pitches))) @@ -270,4 +287,5 @@ work than classifying the pitches." (set! alterations '()))) (ignatzek-format-chord-name - root prefixes main-name alterations add-steps suffixes bass-note)))))) + root prefixes main-name alterations add-steps suffixes bass-note + lowercase-root?)))))) diff --git a/scm/chord-name.scm b/scm/chord-name.scm index 718a3c9e3b..79b018992a 100644 --- a/scm/chord-name.scm +++ b/scm/chord-name.scm @@ -1,9 +1,20 @@ -;;;; chord-name.scm -- chord name utility functions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . (define (natural-chord-alteration p) "Return the natural alteration for step P." @@ -11,11 +22,16 @@ FLAT 0)) -;; +(define (conditional-string-downcase str condition) + (if condition + (string-downcase str) + str)) + +;; ;; TODO: make into markup. -;; +;; (define-public (alteration->text-accidental-markup alteration) - + (make-smaller-markup (make-raise-markup (if (= alteration FLAT) @@ -23,7 +39,7 @@ 0.6) (make-musicglyph-markup (assoc-get alteration standard-alteration-glyph-name-alist ""))))) - + (define (accidental->markup alteration) "Return accidental markup for ALTERATION." (if (= alteration 0) @@ -43,18 +59,21 @@ (make-hspace-markup (if (= alteration SHARP) 0.2 0.1)) )))) -(define-public (note-name->markup pitch) - "Return pitch markup for PITCH." +(define-public (note-name->markup pitch lowercase?) + "Return pitch markup for @var{pitch}." (make-line-markup (list (make-simple-markup - (vector-ref #("C" "D" "E" "F" "G" "A" "B") (ly:pitch-notename pitch))) - (accidental->markup (ly:pitch-alteration pitch))))) + (conditional-string-downcase + (vector-ref #("C" "D" "E" "F" "G" "A" "B") (ly:pitch-notename pitch)) + lowercase?)) + (accidental->markup (ly:pitch-alteration pitch))))) (define (pitch-alteration-semitones pitch) (inexact->exact (round (* (ly:pitch-alteration pitch) 2)))) -(define-safe-public ((chord-name->german-markup B-instead-of-Bb) pitch) +(define-safe-public ((chord-name->german-markup B-instead-of-Bb) + pitch lowercase?) "Return pitch markup for PITCH, using german note names. If B-instead-of-Bb is set to #t real german names are returned. Otherwise semi-german names (with Bb and below keeping the british names) @@ -67,11 +86,13 @@ (make-line-markup (list (make-simple-markup - (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))) + (conditional-string-downcase + (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a)) + lowercase?)) (make-normal-size-super-markup (accidental->markup (/ (cdr n-a) 2))))))) -(define-safe-public (note-name->german-markup pitch) +(define-safe-public (note-name->german-markup pitch lowercase?) (let* ((name (ly:pitch-notename pitch)) (alt-semitones (pitch-alteration-semitones pitch)) (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2))) @@ -85,20 +106,23 @@ (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a))) (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a))))))))) -(define-public ((chord-name->italian-markup re-with-eacute) pitch) - "Return pitch markup for PITCH, using italian/french note names. - If re-with-eacute is set to #t, french 'ré' is returned for D instead of 're' -" +(define-public ((chord-name->italian-markup re-with-eacute) pitch lowercase?) + "Return pitch markup for @var{pitch}, using italian/french note names. +If @var{re-with-eacute} is set to @code{#t}, french `ré' is returned for +pitch@tie{}D instead of `re'." + (let* ((name (ly:pitch-notename pitch)) (alt (ly:pitch-alteration pitch))) (make-line-markup (list (make-simple-markup - (vector-ref - (if re-with-eacute - #("Do" "Ré" "Mi" "Fa" "Sol" "La" "Si") - #("Do" "Re" "Mi" "Fa" "Sol" "La" "Si")) - name)) + (conditional-string-downcase + (vector-ref + (if re-with-eacute + #("Do" "Ré" "Mi" "Fa" "Sol" "La" "Si") + #("Do" "Re" "Mi" "Fa" "Sol" "La" "Si")) + name) + lowercase?)) (accidental->markup-italian alt) )))) @@ -120,7 +144,7 @@ FOOBAR-MARKUP) if OMIT-ROOT is given and non-false. elts))) (sorted (sort pitches ly:pitch ..., diff --git a/scm/clip-region.scm b/scm/clip-region.scm index c8eb537b25..8718f56104 100644 --- a/scm/clip-region.scm +++ b/scm/clip-region.scm @@ -1,64 +1,43 @@ -;; -;; clip-region.scm -- implement rhythmic-location and EPS musical clipping -;; -;; source file of the GNU LilyPond music typesetter -;; -;; (c) 2006 Han-Wen Nienhuys -;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2006--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . (define-module (scm clip-region)) (use-modules (lily)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The procedures shown in this list have been moved to +;; scm/output-lib.scm +;; +;; +;; (define-public (make-rhythmic-location bar-num num den) +;: (define-public (rhythmic-location? a) +;; (define-public (make-graceless-rhythmic-location loc) +;; (define-public rhythmic-location-measure-position cdr) +;; (define-public rhythmic-location-bar-number car) +;; (define-public (rhythmic-location=? a b) +;; (define-public (rhythmic-location>? a b) +;: (define-public (rhythmic-location=? a b) +;; (define-public (rhythmic-location->file-string a) +;; (define-public (rhythmic-location->string a) -(define-public (make-rhythmic-location bar-num num den) - (cons - bar-num (ly:make-moment num den))) - -(define-public (rhythmic-location? a) - (and (pair? a) - (integer? (car a)) - (ly:moment? (cdr a)))) - -(define-public (make-graceless-rhythmic-location loc) - (make-rhythmic-location - (car loc) - (ly:moment-main-numerator (rhythmic-location-measure-position loc)) - (ly:moment-main-denominator (rhythmic-location-measure-position loc)))) - - -(define-public rhythmic-location-measure-position cdr) -(define-public rhythmic-location-bar-number car) - -(define-public (rhythmic-location (car a) (car b)) #f) - (else - (ly:moment=? a b) - (rhythmic-location? a b) - (rhythmic-locationfile-string a) - (ly:format "~a.~a.~a" - (car a) - (ly:moment-main-numerator (cdr a)) - (ly:moment-main-denominator (cdr a)))) - -(define-public (rhythmic-location->string a) - (ly:format "bar ~a ~a" - (car a) - (ly:moment->string (cdr a)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Actual clipping logic. @@ -71,8 +50,8 @@ ;; but let's leave that for future extensions. ;; (define-public (system-clipped-x-extent system-grob clip-region) - "Return the X-extent of the SYSTEM-GROB when clipped with -CLIP-REGION. Return #f if not appropriate." + "Return the X-extent of @var{system-grob} when clipped with +@var{clip-region}. Return @code{#f} if not appropriate." (let* ((region-start (car clip-region)) diff --git a/scm/coverage.scm b/scm/coverage.scm index e7392bb683..3c210555ae 100644 --- a/scm/coverage.scm +++ b/scm/coverage.scm @@ -1,3 +1,5 @@ +;;;; coverage.scm + (define-module (scm coverage)) (use-modules (lily) diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 1012c86855..dab5211f14 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -1,9 +1,20 @@ -;;;; define-context-properties.scm -- part of backend documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define-public all-translation-properties '()) @@ -14,11 +25,11 @@ (procedure? type?) (string? description))) (throw 'init-format-error)) - - + + (if (not (equal? #f (object-property symbol 'translation-doc))) (ly:error (_ "symbol ~S redefined" symbol))) - + (set-object-property! symbol 'translation-type? type?) (set-object-property! symbol 'translation-doc description) (set! all-translation-properties (cons symbol all-translation-properties)) @@ -32,14 +43,14 @@ `( ;; TODO FIXME - + (aDueText ,markup? "Text to print at a unisono passage.") - (alignBelowContext ,string? "Where to insert newly created context in -vertical alignment.") (alignAboveContext ,string? "Where to insert newly created context in vertical alignment.") (alignBassFigureAccidentals ,boolean? "If true, then the accidentals are aligned in bass figure context.") + (alignBelowContext ,string? "Where to insert newly created context in +vertical alignment.") (associatedVoice ,string? "Name of the @code{Voice} that has the melody for this @code{Lyrics} line.") (autoAccidentals ,list? "List of different ways to typeset an @@ -55,7 +66,7 @@ Each entry in the list is either a symbol or a procedure. @item symbol The symbol is the name of the context in which the following rules are to be -applied. For example, if @var{context} is @rinternals{Score} then all +applied. For example, if @var{context} is @rinternals{Score} then all staves share accidentals, and if @var{context} is @rinternals{Staff} then all voices in the same staff share accidentals, but staves do not. @@ -81,18 +92,15 @@ The current measure position. @end table -The procedure returns a pair of booleans. The first states whether an extra -natural should be added. The second states whether an accidental should be -printed. @code{(#t . #f)} does not make sense. +The procedure returns a pair of booleans. The first states whether an extra +natural should be added. The second states whether an accidental should be +printed. @code{(#t . #f)} does not make sense. @end table") (autoBeamCheck ,procedure? "A procedure taking three arguments, @var{context}, @var{dir} [start/stop (-1 or 1)], and @var{test} [shortest note in the beam]. A non-@code{#f} return value starts or stops the auto beam.") - (autoBeamSettings ,list? "Specifies when automatically generated -beams should begin and end. See @ruser{Setting automatic beam -behavior} for more information.") (autoBeaming ,boolean? "If set to true then beams are generated automatically.") (autoCautionaries ,list? "List similar to @code{autoAccidentals}, @@ -105,7 +113,7 @@ be printed automatically; they must be explicitly created with a are still counted. Bar line generation will resume according to that count if this property is unset.") - + (barAlways ,boolean? "If set to true a bar line is drawn after each note.") (barCheckSynchronize ,boolean? "If true then reset @@ -113,6 +121,8 @@ each note.") (barNumberVisibility ,procedure? "A Procedure that takes an integer and returns whether the corresponding bar number should be printed.") + (baseMoment ,ly:moment? "Smallest unit of time that will stand on its +own as a subdivided section.") (bassFigureFormatFunction ,procedure? "A procedure that is called to produce the formatting for a @code{BassFigure} grob. It takes a list of @code{BassFigureEvent}s, a context, and the grob to @@ -120,15 +130,12 @@ format.") (bassStaffProperties ,list? "An alist of property settings to apply for the down staff of @code{PianoStaff}. Used by @code{\\autochange}.") - (beatLength ,ly:moment? "The length of one beat in this time -signature.") - (beatGrouping ,list? "A list of beatgroups, e.g., in 5/8 time -@code{'(2 3)}.") - + (beamExceptions ,list? "An alist of exceptions to autobeam rules +that normally end on beats.") + (beatStructure ,list? "List of @code{baseMoment}s that are combined +to make beats.") (chordChanges ,boolean? "Only show changes in chords scheme?") - (chordNameFunction ,procedure? "The function that converts lists -of pitches to chord names.") (chordNameExceptions ,list? "An alist of chord exceptions. Contains @code{(@var{chord} . @var{markup})} entries.") (chordNameExceptionsFull ,list? "An alist of full chord @@ -136,6 +143,9 @@ exceptions. Contains @code{(@var{chord} . @var{markup})} entries.") (chordNameExceptionsPartial ,list? "An alist of partial chord exceptions. Contains @code{(@var{chord} . (@var{prefix-markup} @var{suffix-markup}))} entries.") + (chordNameFunction ,procedure? "The function that converts lists +of pitches to chord names.") + (chordNameLowercaseMinor ,boolean? "Downcase roots of minor chords?") (chordNameSeparator ,markup? "The markup object used to separate parts of a chord name.") (chordNoteNamer ,procedure? "A function that converts from a pitch @@ -159,11 +169,17 @@ percent repeats.") the clef is changed.") (createSpacing ,boolean? "Create @code{StaffSpacing} objects? Should be set for staves.") - (crescendoText ,markup? "The text to print at start of non-hairpin -crescendo, i.e., @samp{cresc.}.") (crescendoSpanner ,symbol? "The type of spanner to be used for crescendi. Available values are @samp{hairpin} and @samp{text}. If unset, a hairpin crescendo is used.") + (crescendoText ,markup? "The text to print at start of non-hairpin +crescendo, i.e., @samp{cresc.}.") + (cueClefGlyph ,string? "Name of the symbol within the music font.") + (cueClefOctavation ,integer? "Add this much extra octavation. +Values of 7 and -7 are common.") + (cueClefPosition ,number? "Where should the center of the clef +symbol go, measured in half staff spaces from the center of the +staff.") (currentBarNumber ,integer? "Contains the current barnumber. This property is incremented at every bar line.") @@ -178,6 +194,9 @@ non-hairpin decrescendo, i.e., @samp{dim.}.") This variable is read by @rinternals{Timing_translator} at @rinternals{Score} level.") + (defaultStrings ,list? "A list of strings to use in calculating +frets for tablatures and fretboards if no strings are provided in +the notes for the current moment.") (doubleRepeatType ,string? "Set the default bar line for double repeats.") (doubleSlurs ,boolean? "If set, two slurs are created for every @@ -197,6 +216,8 @@ values.") (explicitClefVisibility ,vector? "@samp{break-visibility} function for clef changes.") + (explicitCueClefVisibility ,vector? "@samp{break-visibility} +function for cue clef changes.") (explicitKeySignatureVisibility ,vector? "@samp{break-visibility} function for explicit key changes. @samp{\\override} of the @code{break-visibility} property will set the visibility for normal @@ -231,12 +252,25 @@ at this point.") (forceClef ,boolean? "Show clef symbol, even if it has not changed. Only active for the first clef after the property is set, not for the full staff.") + (fretLabels ,list? "A list of strings or Scheme-formatted markups +containing, in the correct order, the labels to be used for lettered +frets in tablature.") + (glissandoMap ,list? "A map in the form of '((source1 . target1) +(source2 . target2) (sourcen . targetn)) showing the glissandi to +be drawn for note columns. The value '() will default to '((0 . 0) +(1 . 1) (n . n)), where n is the minimal number of note-heads in +the two note columns between which the glissandi occur.") (gridInterval ,ly:moment? "Interval for which to generate @code{GridPoint}s.") + (handleNegativeFrets ,symbol? "How the automatic fret calculator +should handle calculated negative frets. Values include @code{'ignore}, +to leave them out of the diagram completely, @code{'include}, to include +them as calculated, and @code{'recalculate}, to ignore the specified +string and find a string where they will fit with a positive fret number.") (harmonicAccidentals ,boolean? "If set, harmonic notes in chords get accidentals.") (harmonicDots ,boolean? "If set, harmonic notes in dotted chords get @@ -254,14 +288,16 @@ string selector for tablature notation.") printed as numbers, but only as extender lines.") (implicitTimeSignatureVisibility ,vector? "break visibility for the default time signature.") + (includeGraceNotes ,boolean? "Do not ignore grace notes for +@rinternals{Lyrics}.") (instrumentCueName ,markup? "The name to print if another instrument is to be taken.") - (instrumentName ,markup? "The name to print left of a staff. The -@code{instrument} property labels the staff in the first system, and -the @code{instr} property labels following lines.") (instrumentEqualizer ,procedure? "A function taking a string (instrument name), and returning a @code{(@var{min} . @var{max})} pair of numbers for the loudness range of the instrument.") + (instrumentName ,markup? "The name to print left of a staff. The +@code{instrumentName} property labels the staff in the first system, and +the @code{shortInstrumentName} property labels following lines.") ;; the definition is reversed wrt traditional transposition ;; otherwise \transpose { \transposition .. } won't work (instrumentTransposition ,ly:pitch? "Define the transposition of @@ -270,11 +306,11 @@ This is used to transpose the MIDI output, and @code{\\quote}s.") (internalBarNumber ,integer? "Contains the current barnumber. This property is used for internal timekeeping, among others by the @code{Accidental_engraver}.") - + (keepAliveInterfaces ,list? "A list of symbols, signifying grob interfaces that are worth keeping a staff with @code{remove-empty} set -around for.") +around for.") (keyAlterationOrder ,list? "An alist that defines in what order alterations should be printed. The format is @code{(@var{step} . @var{alter})}, where @var{step} is a number from 0 to@tie{}6 and @@ -308,21 +344,27 @@ manual beams are considered. Possible values include @code{melismaBusy}, @code{slurMelismaBusy}, @code{tieMelismaBusy}, and @code{beamMelismaBusy}.") (metronomeMarkFormatter ,procedure? "How to produce a metronome -markup. Called with four arguments: text, duration, count and context.") - (midiInstrument ,string? "Name of the MIDI instrument to use.") - (midiMaximumVolume ,number? "Analogous to -@code{midiMinimumVolume}.") - (midiMinimumVolume ,number? "Set the minimum loudness for MIDI. -Ranges from 0 to@tie{}1.") +markup. Called with two arguments: a @code{TempoChangeEvent} and context.") (middleCClefPosition ,number? "The position of the middle C, as determined only by the clef. This can be calculated by looking at @code{clefPosition} and @code{clefGlyph}.") + (middleCCuePosition ,number? "The position of the middle C, +as determined only by the clef of the cue notes. This can be calculated by +looking at @code{cueClefPosition} and @code{cueClefGlyph}.") (middleCOffset ,number? "The offset of middle C from the position given by @code{middleCClefPosition} This is used for ottava brackets.") (middleCPosition ,number? "The place of the middle C, measured in half staff-spaces. Usually determined by looking at @code{middleCClefPosition} and @code{middleCOffset}.") + (midiInstrument ,string? "Name of the MIDI instrument to use.") + (midiMergeUnisons ,boolean? "If true, output only one MIDI note-on +event when notes with the same pitch, in the same MIDI-file track, overlap.") + (midiMaximumVolume ,number? "Analogous to +@code{midiMinimumVolume}.") + (midiMinimumVolume ,number? "Set the minimum loudness for MIDI. +Ranges from 0 to@tie{}1.") + (midiChannelMapping ,symbol? "How to map MIDI channels: per @code{instrument} (default), @code{staff} or @code{voice}.") (minimumFret ,number? "The tablature auto string-selecting mechanism selects the highest string with a fret at least @code{minimumFret}.") @@ -332,8 +374,12 @@ page turn to be allowed.") repeated section for a page turn to be allowed within that section.") - (noteToFretFunction ,procedure? "How to produce a fret diagram. -Parameters: A list of note events and a list of tabstring events.") + (noChordSymbol ,markup? "Markup to be displayed for rests in a +ChordNames context.") + (noteToFretFunction ,procedure? "Convert list of notes and list of +defined strings to full list of strings and fret numbers. +Parameters: The context, a list of note events, a list of +tabstring events, and the fretboard grob if a fretboard is desired.") (ottavation ,markup? "If set, the text for an ottava spanner. @@ -342,6 +388,8 @@ Changing this creates a new text spanner.") translator during music interpretation.") + (partCombineTextsOnNote ,boolean? "Print part-combine texts only on +the next note rather than immediately on rests or skips.") (pedalSostenutoStrings ,list? "See @code{pedalSustainStrings}.") (pedalSostenutoStyle ,symbol? "See @code{pedalSustainStyle}.") (pedalSustainStrings ,list? "A list of strings to print for @@ -365,12 +413,6 @@ shortest-playing duration. This is used for switching on proportional notation.") - (recordEventSequence ,procedure? "When -@code{Recording_group_engraver} is in this context, then upon -termination of the context, this function is called with current -context and a list of music objects. The list of contains entries with -start times, music objects and whether they are processed in this -context.") (rehearsalMark ,integer? "The last rehearsal mark printed.") (repeatCommands ,list? "This property is a list of commands of the form @code{(list 'volta @var{x})}, where @var{x} is a string or @@ -379,13 +421,16 @@ of the form @code{(list 'volta @var{x})}, where @var{x} is a string or arguments an integer and context, returning whether the corresponding percent repeat number should be printed when @code{countPercentRepeats} is set.") + (restCompletionBusy ,boolean? "Signal whether a completion-rest is active.") (restNumberThreshold ,number? "If a multimeasure rest has more measures than this, a number is printed.") - + (searchForVoice ,boolean? "Signal whether a search should be made +of all contexts in the context hierarchy for a voice to provide rhythms +for the lyrics.") (shapeNoteStyles ,vector? "Vector of symbols, listing style for each note head relative to the tonic (qv.) of the scale.") - (shortInstrumentName ,markup? "See @code{instrument}.") + (shortInstrumentName ,markup? "See @code{instrumentName}.") (shortVocalName ,markup? "Name of a vocal line, short version.") (skipBars ,boolean? "If set to true, then skip the empty bars that are produced by multimeasure notes and rests. These bars will @@ -423,39 +468,46 @@ value is only used once, and then it is erased.") (stringOneTopmost ,boolean? "Whether the first string is printed on the top line of the tablature.") (stringTunings ,list? "The tablature strings tuning. It is a list -of the pitch (in semitones) of each string (starting with the lower +of the pitches of each string (starting with the lowest numbered one).") (strokeFingerOrientations ,list? "See @code{fingeringOrientations}.") (subdivideBeams ,boolean? "If set, multiple beams will be -subdivided at beat positions by only drawing one beam over the beat.") +subdivided at @code{baseMoment} positions by only drawing one beam over the beat.") (suggestAccidentals ,boolean? "If set, accidentals are typeset as cautionary suggestions over the note.") (systemStartDelimiter ,symbol? "Which grob to make for the start of the system/staff? Set to @code{SystemStartBrace}, @code{SystemStartBracket} or @code{SystemStartBar}.") (systemStartDelimiterHierarchy ,pair? "A nested list, indicating -the nesting of a start delimiters.") +the nesting of a start delimiters.") (tablatureFormat ,procedure? "A function formatting a tablature -note head. Called with three arguments: string number, context and event. -It returns the text as a string.") +note head. Called with three arguments: context, string number and, +fret number. It returns the text as a markup.") + (tabStaffLineLayoutFunction ,procedure? "A function determining the +staff position of a tablature note head. Called with two arguments: +the context and the string.") + (tempoHideNote ,boolean? "Hide the note = count in tempo marks.") (tempoWholesPerMinute ,ly:moment? "The tempo in whole notes per minute.") - (tempoUnitCount ,number? "Count for specifying tempo.") - (tempoUnitDuration ,ly:duration? "Unit for specifying tempo.") - (tempoText ,markup? "Text for tempo marks.") - (tempoHideNote ,boolean? "Hide the note=count in tempo marks.") (tieWaitForNote ,boolean? "If true, tied notes do not have to follow each other directly. This can be used for writing out arpeggios.") (timeSignatureFraction ,number-pair? "A pair of numbers, signifying the time signature. For example, @code{#'(4 . 4)} is a 4/4 time signature.") + (timeSignatureSettings ,cheap-list? "A nested alist of settings for +time signatures. Contains elements for various time signatures. The +element for each time signature contains entries for @code{baseMoment}, +@code{beatStructure}, and @code{beamExceptions}.") (timing ,boolean? "Keep administration of measure length, position, bar number, etc.? Switch off for cadenzas.") (tonic ,ly:pitch? "The tonic of the current scale.") + (topLevelAlignment ,boolean? "If true, the @var{Vertical_align_engraver} +will create a @var{VerticalAlignment}; otherwise, it will create a +@var{StaffGrouper}") (trebleStaffProperties ,list? "An alist of property settings to apply for the up staff of @code{PianoStaff}. Used by @code{\\autochange}.") @@ -479,10 +531,7 @@ setting this property, you can make brackets last shorter. (useBassFigureExtenders ,boolean? "Whether to use extender lines for repeated bass figures.") - - (verticallySpacedContexts ,list? "List of symbols, containing -context names whose vertical axis groups should be taken into account -for vertical spacing of systems.") + (vocalName ,markup? "Name of a vocal line.") (voltaSpannerDuration ,ly:moment? "This specifies the maximum duration to use for the brackets printed for @code{\\alternative}. @@ -520,8 +569,6 @@ are described in @rinternals{bar-line-interface}.") (barCheckLastFail ,ly:moment? "Where in the measure did the last barcheck fail?") (beamMelismaBusy ,boolean? "Signal if a beam is present.") - (breakableSeparationItem ,ly:grob? "The breakable items in this -time step, for this staff.") (busyGrobs ,list? "A queue of @code{(@var{end-moment} . @var{GROB})} cons cells. This is for internal (C++) use only. This property contains the grobs which are still busy (e.g. note heads, @@ -534,7 +581,9 @@ current breakable (clef, key signature, etc.) items.") non-breakable items (note heads, lyrics, etc.).") - (dynamicAbsoluteVolumeFunction ,procedure? "[DOCUMENT-ME]") + (dynamicAbsoluteVolumeFunction ,procedure? "A procedure that takes +one argument, the text value of a dynamic event, and returns the absolute +volume of that dynamic event.") (finalizations ,list? "A list of expressions to evaluate before @@ -549,10 +598,6 @@ should be manipulated through the @code{add-grace-property} function.") @code{CommandColumn} contains items that will affect spacing.") - (instrumentSupport ,grob-list? "A list of grobs to attach the -instrument name to.") - - (lastKeySignature ,list? "Last key signature before a key signature change.") (localKeySignature ,list? "The key signature at this point in the @@ -566,14 +611,12 @@ This can be used to signal melismas on top of those automatically detected.") - (originalMiddleCPosition ,integer? "Used for temporary overriding -middle@tie{}C in octavation brackets.") - - + (quotedCueEventTypes ,list? "A list of symbols, representing the +event types that should be duplicated for @code{\\cueDuring} commands.") (quotedEventTypes ,list? "A list of symbols, representing the -event types that should be duplicated for @code{\\quote} commands.") -; (quotes ,hash-table? "A hash table, mapping names to -;@code{music-event} vectors.") +event types that should be duplicated for @code{\\quoteDuring} commands. +This is also a fallback for @code{\\cueDuring} if @code{quotedCueEventTypes} +is not set") (rootSystem ,ly:grob? "The System object.") diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index f5d7b790de..c632e430a9 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -1,8 +1,19 @@ -;;;; stream-event-classes.scm -- define the tree of stream-event classes. +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2005--2011 Erik Sandberg ;;;; -;;;; (c) 2005-2006 Erik Sandberg +;;;; 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 . (use-modules (srfi srfi-1)) @@ -13,32 +24,35 @@ (StreamEvent . (RemoveContext ChangeParent Override Revert UnsetProperty SetProperty music-event OldMusicEvent CreateContext Prepare - OneTimeStep Finish)) - (music-event . (annotate-output-event + OneTimeStep Finish)) + (music-event . (annotate-output-event footnote-event arpeggio-event breathing-event extender-event span-event rhythmic-event dynamic-event break-event label-event percent-event - key-change-event string-number-event stroke-finger-event tie-event part-combine-event - beam-forbid-event script-event + key-change-event string-number-event stroke-finger-event tie-event + part-combine-event part-combine-force-event + beam-forbid-event script-event tempo-change-event tremolo-event bend-after-event fingering-event glissando-event harmonic-event hyphen-event laissez-vibrer-event mark-event - multi-measure-text-event note-grouping-event + multi-measure-text-event note-grouping-event pes-or-flexa-event repeat-tie-event spacing-section-event - layout-instruction-event)) - - (layout-instruction-event . (apply-output-event )) + layout-instruction-event completize-extender-event break-span-event)) + + (layout-instruction-event . (apply-output-event)) (script-event . (articulation-event text-script-event)) (part-combine-event . (solo-one-event solo-two-event unisono-event)) (break-event . (line-break-event page-break-event page-turn-event)) (dynamic-event . (absolute-dynamic-event)) - (span-event . (span-dynamic-event beam-event ligature-event + (span-event . (span-dynamic-event beam-event episema-event ligature-event pedal-event phrasing-slur-event slur-event staff-span-event - text-span-event trill-span-event tremolo-span-event + text-span-event trill-span-event tremolo-span-event tuplet-span-event)) (span-dynamic-event . (decrescendo-event crescendo-event)) + (break-span-event . (break-dynamic-span-event)) (pedal-event . (sostenuto-event sustain-event una-corda-event)) (rhythmic-event . (lyric-event melodic-event multi-measure-rest-event - percent-event - rest-event skip-event bass-figure-event)) + double-percent-event percent-event + repeat-slash-event rest-event + skip-event bass-figure-event)) (melodic-event . (cluster-note-event note-event)) (() . (Announcement)) (Announcement . (AnnounceNewContext)) @@ -54,11 +68,26 @@ (lambda (rel) (for-each (lambda (type) - (hashq-set! ancestor-lookup type + (hashq-set! ancestor-lookup type (cons type (hashq-ref ancestor-lookup (car rel) '())))) (cdr rel))) event-classes) +(define-public (define-event-class leaf heritage) + (cond + ((not (eq? leaf (car heritage))) + (ly:warning (_ "All classes must be the last in their matrilineal line."))) + ((not (equal? (cdr heritage) + (list-head (hashq-ref ancestor-lookup (cadr heritage) '()) + (length (cdr heritage))))) + (ly:warning (_ "All classes must have a well-defined pedigree in the existing class hierarchy."))) + (else (hashq-set! ancestor-lookup + leaf + (cons leaf + (hashq-ref ancestor-lookup + (cadr heritage) + '())))))) + ;; TODO: Allow entering more complex classes, by taking unions. (define-public (ly:make-event-class leaf) (hashq-ref ancestor-lookup leaf)) @@ -84,10 +113,11 @@ root))) ;; All leaf event classes that no translator listens to -;; directly. Avoids printing a warning. +;; directly. Avoids printing a warning. (define unlistened-music-event-classes '(harmonic-event line-break-event page-break-event page-turn-event label-event - solo-one-event solo-two-event skip-event unisono-event)) + solo-one-event solo-two-event skip-event unisono-event + part-combine-force-event break-dynamic-span-event)) ;; produce neater representation of music event tree. ;; TODO: switch to this representation for the event-classes list? @@ -111,12 +141,12 @@ ;; check that the music event tree corresponds well with the set of ;; available translators; print warnings otherwise. -(map-tree (lambda (sym) +(map-tree (lambda (sym) (if (and (symbol? sym) (not (ly:is-listened-event-class sym)) (not (assq sym event-classes)) (not (memq sym unlistened-music-event-classes))) - (ly:programming-error (_ "event class ~A seems to be unused") sym))) + (ly:programming-error (_ "event class ~A seems to be unused") sym))) music-event-tree) (map (lambda (sym) @@ -163,4 +193,3 @@ (define-public (ly:simplify-scheme e) (list 'quasiquote (simplify e))) - diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index a2ee15276f..735b9c7895 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -1,11 +1,27 @@ -;;;; interface-description.scm -- part of generated backend documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . +;; The interfaces defined here generally have no code (e.g., +;; dynamic-interface), or have callbacks defined entirely in +;; scheme. Others interfaces are defined in lily/*.cc with the +;; ADD_INTERFACE function. + ;; should include default value? @@ -15,6 +31,11 @@ note)." '()) +(ly:add-interface + 'ambitus-interface + "The line between note heads for a pitch range." + '(gap note-heads thickness)) + (ly:add-interface 'bass-figure-interface "A bass figure text." @@ -40,37 +61,73 @@ note)." "Dynamic line spanner." '(avoid-slur)) +(ly:add-interface + 'dynamic-text-interface + "An absolute text dynamic." + '(right-padding)) + (ly:add-interface 'dynamic-text-spanner-interface "Dynamic text spanner." '(text)) +(ly:add-interface + 'episema-interface + "An episema line." + '()) + (ly:add-interface 'finger-interface "A fingering instruction." '()) +(ly:add-interface + 'footnote-interface + "Make a footnote." + '(footnote-text)) + +(ly:add-interface + 'footnote-spanner-interface + "Make a footnote spanner." + '(footnote-text spanner-placement)) + (ly:add-interface 'fret-diagram-interface "A fret diagram" '(align-dir fret-diagram-details size dot-placement-list thickness)) +(ly:add-interface + 'glissando-interface + "A glissando." + '(glissando-index)) + (ly:add-interface 'grace-spacing-interface "Keep track of durations in a run of grace notes." '(columns common-shortest-duration)) +(ly:add-interface + 'inline-accidental-interface + "An inlined accidental (i.e. normal accidentals, cautionary +accidentals)." + '()) + (ly:add-interface 'instrument-specific-markup-interface "Instrument-specific markup (like fret boards or harp pedal diagrams)." - '(fret-diagram-details harp-pedal-details size thickness)) + '(fret-diagram-details graphical harp-pedal-details size thickness)) (ly:add-interface 'key-cancellation-interface "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." @@ -167,11 +224,15 @@ interesting enough to maintain a hara-kiri staff." "A right hand finger instruction." '(digit-names)) -;;; todo: this is not typesetting info. Move to interpretation. (ly:add-interface - 'tablature-interface - "An interface for any notes set in a tablature staff." - '()) + 'system-start-text-interface + "Text in front of the system." + '(long-text self-alignment-X self-alignment-Y text)) + +(ly:add-interface + 'tab-note-head-interface + "A note head in tablature." + '(details display-cautionary span-start)) (ly:add-interface 'trill-spanner-interface @@ -190,7 +251,6 @@ with @code{breakable=##t}." '(breakable)) (ly:add-interface - 'vertically-spaceable-interface - "Objects that should be kept at constant vertical distances. Typically: -@rinternals{VerticalAxisGroup} objects of @rinternals{Staff} contexts." + 'volta-interface + "A volta repeat." '()) diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 9fd76528fc..6afeead462 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -1,9 +1,20 @@ -;;;; define-grob-properties.scm -- part of generated backend documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define (define-grob-property symbol type? description) (if (not (equal? (object-property symbol 'backend-doc) #f)) @@ -14,9 +25,7 @@ symbol) ;; put this in an alist? -(define-public - all-user-grob-properties - +(define-public all-user-grob-properties (map (lambda (x) (apply define-grob-property x)) @@ -39,6 +48,9 @@ be created below this bar line.") (alteration-alist ,list? "List of @code{(@var{pitch} . @var{accidental})} pairs for key signature.") (annotation ,string? "Annotate a grob for debug purposes.") + (annotation-balloon ,boolean? "Print the balloon around an annotation.") + (annotation-line ,boolean? "Print the line from an annotation to the +grob that it annotates.") (arpeggio-direction ,ly:dir? "If set, put an arrow on the arpeggio squiggly line.") (arrow-length ,number? "Arrow length.") @@ -51,10 +63,14 @@ averaged over staves.") (avoid-note-head ,boolean? "If set, the stem of a chord does not pass through all note heads, but starts at the last note head.") (avoid-slur ,symbol? "Method of handling slur collisions. -Choices are @code{around}, @code{inside}, @code{outside}. If unset, -scripts and slurs ignore each other. @code{around} only moves the -script if there is a collision; @code{outside} always moves the -script.") +Choices are @code{inside}, @code{outside}, @code{around}, and +@code{ignore}. @code{inside} adjusts the slur if needed to keep the +grob inside the slur. @code{outside} moves the grob vertically to the +outside of the slur. @code{around} moves the grob vertically to the +outside of the slur only if there is a collision. @code{ignore} does +not move either. In grobs whose notational significance depends on +vertical position (such as accidentals, clefs, etc.), @code{outside} +and @code{around} behave like @code{ignore}.") (axes ,list? "List of axis numbers. In the case of alignment grobs, this should contain only one number.") @@ -62,7 +78,6 @@ grobs, this should contain only one number.") ;; ;; b ;; - (bar-size ,ly:dimension? "The size of a bar line.") (base-shortest-duration ,ly:moment? "Spacing is based on the shortest notes in a piece. Normally, pieces are spaced as if notes at least as short as this are present.") @@ -91,10 +106,10 @@ beamlet, as a proportion of the distance between two adjacent stems.") (before-line-breaking ,boolean? "Dummy property, used to trigger a callback function.") (between-cols ,pair? "Where to attach a loose column to.") - (bound-padding ,number? "The amount of padding to insert around -spanner bounds.") (bound-details ,list? "An alist of properties for determining attachments of spanners to edges.") + (bound-padding ,number? "The amount of padding to insert around +spanner bounds.") (bracket-flare ,number-pair? "A pair of numbers specifying how much edges of brackets should slant outward. Value @code{0.0} means straight edges.") @@ -109,13 +124,7 @@ for example, this is used to position grobs relative to the (visual) center of the bar line.") (break-align-anchor-alignment ,number? "Read by @code{ly:break-aligned-interface::calc-extent-aligned-anchor} for -aligning an anchor to a grob's extent") - (break-align-symbol ,symbol? "This key is used for aligning and -spacing breakable items.") - (break-align-symbols ,list? "A list of symbols that determine -which break-aligned grobs to align this to. If the grob selected by -the first symbol in the list is invisible due to break-visibility, we -will align to the next grob (and so on).") +aligning an anchor to a grob's extent.") (break-align-orders ,vector? "Defines the order in which prefatory matter (clefs, key signatures) appears. The format is a vector of length@tie{}3, where each element is one order for @@ -133,6 +142,15 @@ For example, clefs are put after key signatures by setting clef time-signature)) @end example") + (break-align-symbol ,symbol? "This key is used for aligning and +spacing breakable items.") + (break-align-symbols ,list? "A list of symbols that determine +which break-aligned grobs to align this to. If the grob selected by +the first symbol in the list is invisible due to break-visibility, we +will align to the next grob (and so on). Choices are @code{left-edge}, +@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{staff-bar}, +@code{key-cancellation}, @code{key-signature}, @code{time-signature}, +and @code{custos}.") (break-overshoot ,number-pair? "How much does a broken spanner stick out of its bounds?") (break-visibility ,vector? "A vector of 3@tie{}booleans, @@ -152,6 +170,10 @@ hairpins (al/del niente).") edges of beams?") (collapse-height ,ly:dimension? "Minimum height of system start delimiter. If equal or smaller, the bracket/brace/line is removed.") + (collision-interfaces ,list? "A list of interfaces for which +automatic beam-collision resolution is run.") + (collision-voice-only ,boolean? "Does automatic beam collsion apply +only to the voice in which the beam was created?") (color ,color? "The color of this grob.") (common-shortest-duration ,ly:moment? "The most common shortest note length. This is used in spacing. Enlarging this sets the score @@ -166,11 +188,13 @@ this grob looks as a continued break.") control points for the tie, slur, or bracket shape. For B@'eziers, this should list the control points of a third-order B@'ezier curve.") - ;; ;; d ;; (damping ,number? "Amount of beam slope damping.") + (dash-definition ,pair? "List of @code{dash-elements} defining the +dash structure. Each @code{dash-element} has a starting t value, +an ending t-value, a @code{dash-fraction}, and a @code{dash-period}.") (dash-fraction ,number? "Size of the dashes, relative to @code{dash-period}. Should be between @code{0.0} (no line) and @code{1.0} (continuous line).") @@ -178,7 +202,16 @@ this should list the control points of a third-order B@'ezier curve.") whitespace. If negative, no line is drawn at all.") (default-direction ,ly:dir? "Direction determined by note head positions.") - (digit-names ,vector "Names for string finger digits.") + (default-staff-staff-spacing ,list? "The settings to use for +@code{staff-staff-spacing} when it is unset, for ungrouped staves +and for grouped staves that do not have the relevant +@code{StaffGrouper} property set (@code{staff-staff-spacing} or +@code{staffgroup-staff-spacing}).") + (details ,list? "Alist of parameters for detailed grob behavior. +More information on the allowed parameters for a grob can be found by +looking at the top of the Internals Reference page for each interface +having a @code{details} property.") + (digit-names ,vector? "Names for string finger digits.") (direction ,ly:dir? "If @code{side-axis} is @code{0} (or @code{#X}), then this property determines whether the object is placed @code{#LEFT}, @code{#CENTER} or @code{#RIGHT} with respect to the @@ -209,10 +242,6 @@ the vertical edges: @code{(@var{left-height} . @var{right-height})}.") edges: @code{(@var{left-text} . @var{right-text})}.") (expand-limit ,integer? "Maximum number of measures expanded in church rests.") - (extra-X-extent ,number-pair? "A grob is enlarged in -X@tie{}dimension by this much.") - (extra-Y-extent ,number-pair? "A grob is enlarged in -Y@tie{}dimension by this much.") ;; remove me? (extra-dy ,number? "Slope glissandi this much extra.") (extra-offset ,number-pair? "A pair representing an offset. This @@ -230,6 +259,10 @@ problem, we pad each item by this amount (by adding the @q{car} on the left side of the item and adding the @q{cdr} on the right side of the item). In order to make a grob take up no horizontal space at all, set this to @code{(+inf.0 . -inf.0)}.") + (extra-X-extent ,number-pair? "A grob is enlarged in +X@tie{}dimension by this much.") + (extra-Y-extent ,number-pair? "A grob is enlarged in +Y@tie{}dimension by this much.") ;; @@ -248,9 +281,9 @@ for standard flags, @code{'mensural} and @code{'no-flag}, which switches off the flag.") (font-encoding ,symbol? "The font encoding is the broadest category for selecting a font. Currently, only lilypond's system -fonts (Emmentaler and Aybabtu) are using this property. Available -values are @code{fetaMusic} (Emmentaler), @code{fetaBraces} (Aybabtu), -@code{fetaNumber} (Emmentaler), and @code{fetaDynamic} (Emmentaler).") +fonts (Emmentaler) are using this property. Available +values are @code{fetaMusic} (Emmentaler), @code{fetaBraces}, +@code{fetaText} (Emmentaler).") (font-family ,symbol? "The font family is the broadest category for selecting text fonts. Options include: @code{sans}, @code{roman}.") @@ -266,6 +299,7 @@ include @code{upright}, @code{italic}, @code{caps}.") @code{-1} is smaller, @code{+1} is bigger. Each step of@tie{}1 is approximately 12% larger; 6@tie{}steps are exactly a factor@tie{}2 larger. Fractional values are allowed.") + (footnote-text ,markup? "A footnote for the grob.") (force-hshift ,number? "This specifies a manual shift for notes in collisions. The unit is the note head width of the first voice note. This is used by @rinternals{note-collision-interface}.") @@ -306,6 +340,10 @@ Default @code{none} for markup fret diagrams, @code{below-string} for @item @code{fret-count} -- The number of frets. Default@tie{}4. @item +@code{fret-label-custom-format} -- The format string to be used label +the lowest fret number, when @code{number-type} equals to +@code{custom}. Default@tie{}\"~a\". +@item @code{fret-label-font-mag} -- The magnification of the font used to label the lowest fret number. Default@tie{}0.5. @item @@ -321,7 +359,9 @@ Default@tie{}0. string. Default @code{\"x\"}. @item @code{number-type} -- Type of numbers to use in fret label. Choices -include @code{roman-lower}, @code{roman-upper}, and @code{arabic}. +include @code{roman-lower}, @code{roman-upper}, @code{arabic} and +@code{custom}. In the later case, the format string is supplied by +the @code{fret-label-custom-format} property. Default @code{roman-lower}. @item @code{open-string} -- Character string to be used to indicate open @@ -372,7 +412,9 @@ read from the NonMusicalPaperColumn that begins the measure.") (glyph ,string? "A string determining what @q{style} of glyph is typeset. Valid choices depend on the function that is reading this property.") + (glyph-name ,string? "The glyph name within the font.") (glyph-name-alist ,list? "An alist of key-string pairs.") + (graphical ,boolean? "Display in graphical (vs. text) form.") (grow-direction ,ly:dir? "Crescendo or decrescendo?") @@ -417,6 +459,8 @@ semitie?") units.") (height-limit ,ly:dimension? "Maximum slur height: The longer the slur, the closer it is to this height.") + (hide-tied-accidental-after-break ,boolean? "If set, an accidental +that appears on a tied note after a line break will not be displayed.") (horizontal-shift ,integer? "An integer that identifies ranking of @code{NoteColumn}s for horizontal shifting. This is used by @rinternals{note-collision-interface}.") @@ -439,9 +483,6 @@ slur quants to this position, and print the respective scores.") ;; ;; k ;; - (keep-fixed-while-stretching ,boolean? "A grob with this property -set to true is fixed relative to the staff above it when systems are -stretched.") (keep-inside-line ,boolean? "If set, this column cannot have objects sticking into the margin.") (kern ,ly:dimension? "Amount of extra white space to add. For @@ -455,10 +496,12 @@ correction and @code{1} for full correction.") ;; ;; l ;; - (labels ,list? "List of labels (symbols) placed on a column") - (layer ,integer? "The output layer (a value between 0 -and@tie{}2): Layers define the order of printing objects. Objects in -lower layers are overprinted by objects in higher layers.") + (labels ,list? "List of labels (symbols) placed on a column.") + (layer ,integer? "An integer which determines the order of printing +objects. Objects with the lowest value of layer are drawn first, then +objects with progressively higher values are drawn, so objects with +higher values overwrite objects with lower values. By default most +objects are assigned a layer value of 1.") (ledger-line-thickness ,number-pair? "The thickness of ledger lines. It is the sum of 2@tie{}numbers: The first is the factor for line thickness, and the second for staff space. Both contributions @@ -466,7 +509,7 @@ are added.") (left-bound-info ,list? "An alist of properties for determining attachments of spanners to edges.") (left-padding ,ly:dimension? "The amount of space that is put -left to an object (e.g., a group of accidentals).") +left to an object (e.g., a lyric extender).") (length ,ly:dimension? "User override for the stem length of unbeamed stems.") (length-fraction ,number? "Multiplier for lengths. Used for @@ -513,10 +556,6 @@ guitar notation. The value of this setting is used by @code{merge-differently-headed} only applies to opposing stem directions (i.e., voice 1 &@tie{}2).") - (minimum-X-extent ,number-pair? "Minimum size of an object in -X@tie{}dimension, measured in @code{staff-space} units.") - (minimum-Y-extent ,number-pair? "Minimum size of an object in -Y@tie{}dimension, measured in @code{staff-space} units.") (minimum-distance ,ly:dimension? "Minimum distance between rest and notes or beam.") (minimum-length ,ly:dimension? "Try to make a spanner at least @@ -528,6 +567,10 @@ noteheads.") as fraction of note head size.") (minimum-space ,ly:dimension? "Minimum distance that the victim should move (after padding).") + (minimum-X-extent ,number-pair? "Minimum size of an object in +X@tie{}dimension, measured in @code{staff-space} units.") + (minimum-Y-extent ,number-pair? "Minimum size of an object in +Y@tie{}dimension, measured in @code{staff-space} units.") ;; @@ -546,9 +589,39 @@ syllable following an extender).") object.") (no-stem-extend ,boolean? "If set, notes with ledger lines do not get stems extending to the middle staff line.") + (non-break-align-symbols ,list? "A list of symbols that determine +which NON-break-aligned interfaces to align this to.") (non-default ,boolean? "Set for manually specified clefs.") (non-musical ,boolean? "True if the grob belongs to a @code{NonMusicalPaperColumn}.") + (nonstaff-nonstaff-spacing ,list? "The spacing alist +controlling the distance between the current non-staff line and +the next non-staff line in the direction of @code{staff-affinity}, +if both are on the same side of the related staff, and +@code{staff-affinity} is either @code{UP} or @code{DOWN}. See +@code{staff-staff-spacing} for a description of the alist +structure.") + (nonstaff-relatedstaff-spacing ,list? "The spacing alist +controlling the distance between the current non-staff line and +the nearest staff in the direction of @code{staff-affinity}, if +there are no non-staff lines between the two, and +@code{staff-affinity} is either @code{UP} or @code{DOWN}. If +@code{staff-affinity} is @code{CENTER}, then +@code{nonstaff-relatedstaff-spacing} is used for the nearest +staves on @emph{both} sides, even if other non-staff lines appear +between the current one and either of the staves. See +@code{staff-staff-spacing} for a description of the alist +structure.") + (nonstaff-unrelatedstaff-spacing ,list? "The spacing alist +controlling the distance between the current non-staff line and +the nearest staff in the opposite direction from +@code{staff-affinity}, if there are no other non-staff lines +between the two, and @code{staff-affinity} is either @code{UP} or +@code{DOWN}. See @code{staff-staff-spacing} for a description of +the alist structure.") + (normalized-endpoints ,pair? "Represents left and right placement +over the total spanner, where the width of the spanner is normalized +between 0 and 1.") (note-names ,vector? "Vector of strings containing names for easy-notation note heads.") @@ -640,11 +713,6 @@ value @code{-1} means left aligned, @code{0}@tie{}centered, and values may also be specified.") (self-alignment-Y ,number? "Like @code{self-alignment-X} but for the Y@tie{}axis.") - (toward-stem-shift ,number? "Amount by which scripts are shifted -toward the stem if their direction coincides with the stem direction. -@code{0.0} means keep the default position (centered on the note -head), @code{1.0} means centered on the stem. Interpolated values are -possible.") (shorten-pair ,number-pair? "The lengths to shorten a text-spanner on both sides, for example a pedal bracket. Positive values shorten the text-spanner, while negative values lengthen it.") @@ -669,6 +737,11 @@ vertical distance between two staves, it is possible to have a configuration which would result in a tight interleaving of grobs from the top staff and the bottom staff. The larger this parameter is, the farther apart the staves are placed in such a configuration.") + (skyline-vertical-padding ,number? "The amount by which the left +and right skylines of a column are padded vertically, beyond the +@code{Y-extent}s and @code{extra-spacing-height}s of the constituent +grobs in the column. Increase this to prevent interleaving of grobs +from adjacent columns.") (slash-negative-kern ,number? "The space to remove between slashes in percent repeat glyphs. Larger values bring the two elements closer together.") @@ -688,9 +761,28 @@ there.") (spacing-increment ,number? "Add this much space for a doubled duration. Typically, the width of a note head. See also @rinternals{spacing-spanner-interface}.") + (spacing-pair ,pair? "A pair of alignment symbols which set an object's +spacing relative to its left and right @code{BreakAlignment}s. + +For example, a @code{MultiMeasureRest} will ignore prefatory items at its +bounds (i.e., clefs, key signatures and time signatures) using the following +override: + +@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?") + (staff-affinity ,ly:dir? "The direction of the staff to use +for spacing the current non-staff line. Choices are @code{UP}, +@code{DOWN}, and @code{CENTER}. If @code{CENTER}, the non-staff +line will be placed equidistant between the two nearest staves on +either side, unless collisions or other spacing constraints +prevent this. Setting @code{staff-affinity} for a staff causes it +to be treated as a non-staff line. Setting @code{staff-affinity} +to @code{#f} causes a non-staff line to be treated as a staff.") (staff-padding ,ly:dimension? "Maintain this much space between reference points and the staff. Its effect is to align objects of differing sizes (like the dynamics @b{p} and @b{f}) on their @@ -699,6 +791,48 @@ baselines.") staff spaces, counted from the middle line.") (staff-space ,ly:dimension? "Amount of space between staff lines, expressed in global @code{staff-space}.") + (staff-staff-spacing ,list? "When applied to a staff-group's +@code{StaffGrouper} grob, this spacing alist controls the distance +between consecutive staves within the staff-group. When applied +to a staff's @code{VerticalAxisGroup} grob, it controls the +distance between the staff and the nearest staff below it in the +same system, replacing any settings inherited from the +@code{StaffGrouper} grob of the containing staff-group, if there +is one. This property remains in effect even when non-staff lines +appear between staves. The alist can contain the following keys: + +@itemize + +@item +@code{basic-distance} -- the vertical distance, measured in +staff-spaces, between the reference points of the two items when +no collisions would result, and no stretching or compressing is in +effect. + +@item +@code{minimum-distance} -- the smallest allowable vertical +distance, measured in staff-spaces, between the reference points +of the two items, when compressing is in effect. + +@item +@code{padding} -- the minimum required amount of unobstructed +vertical whitespace between the bounding boxes (or skylines) of +the two items, measured in staff-spaces. + +@item +@code{stretchability} -- a unitless measure of the dimension's +relative propensity to stretch. If zero, the distance will not +stretch (unless collisions would result). + +@end itemize") + (staffgroup-staff-spacing ,list? "The spacing alist +controlling the distance between the last staff of the current +staff-group and the staff just below it in the same system, even +if one or more non-staff lines exist between the two staves. If +the @code{staff-staff-spacing} property of the staff's +@code{VerticalAxisGroup} grob is set, that is used instead. See +@code{staff-staff-spacing} for a description of the alist +structure.") (stem-attachment ,number-pair? "An @code{(@var{x} . @var{y})} pair where the stem attaches to the notehead.") (stem-end-position ,number? "Where does the stem end (the end is @@ -714,7 +848,7 @@ rest?") (stencils ,list? "Multiple stencils, used as intermediate value.") (strict-grace-spacing ,boolean? "If set, main notes are spaced -normally, then grace notes are put left of the musical columns fot the +normally, then grace notes are put left of the musical columns for the main notes.") (strict-note-spacing ,boolean? "If set, unbroken columns with non-musical material (clefs, bar lines, etc.) are not spaced @@ -739,8 +873,6 @@ should use @code{LEFT}.") (thickness ,number? "Line thickness, generally measured in @code{line-thickness}.") (thin-kern ,number? "The space after a hair-line in a bar line.") - (threshold ,number-pair? "@code{(@var{min} . @var{max})}, where -@var{min} and @var{max} are dimensions in staff space.") (tie-configuration ,list? "List of @code{(@var{position} . @var{dir})} pairs, indicating the desired tie configuration, where @var{position} is the offset from the center of the staff in staff @@ -750,6 +882,11 @@ in the list causes the corresponding tie to be formatted automatically.") (to-barline ,boolean? "If true, the spanner will stop at the bar line just before it would otherwise stop.") + (toward-stem-shift ,number? "Amount by which scripts are shifted +toward the stem if their direction coincides with the stem direction. +@code{0.0} means keep the default position (centered on the note +head), @code{1.0} means centered on the stem. Interpolated values are +possible.") (transparent ,boolean? "This makes the grob invisible.") @@ -775,6 +912,9 @@ one below this grob.") ;; (when ,ly:moment? "Global time step associated with this column happen?") + (whiteout ,boolean? "If true, the grob is printed over a white +background to white-out underlying material, if the grob is visible. + Usually #f by default.") (width ,ly:dimension? "The width of a grob measured in staff space.") (word-space ,ly:dimension? "Space to insert between words in @@ -827,136 +967,140 @@ constructed from a whole number of squiggles.") `( ;;;;;;;;;;;;;;;; ;; grobs & grob arrays. (alphabetical) - (X-common ,ly:grob? "Common reference point for axis group.") - - (Y-common ,ly:grob? "See @code{X-common}.") - (accidental-grob ,ly:grob? "The accidental for this note.") (accidental-grobs ,list? "An alist with @code{(@var{notename} . @var{groblist})} entries.") - (adjacent-pure-heights ,vector? "Used by a @code{VerticalAxisGroup} to -cache the @code{Y-extent}s of different column ranges.") - (adjacent-hairpins ,ly:grob-array? "A list of directly neighboring -hairpins.") - (all-elements ,ly:grob-array? "A list of all grobs in this line. Its + (adjacent-spanners ,ly:grob-array? "An array of directly neighboring +dynamic spanners.") + (all-elements ,ly:grob-array? "An array of all grobs in this line. Its function is to protect objects from being garbage collected.") (arpeggio ,ly:grob? "A pointer to an @code{Arpeggio} object.") (axis-group-parent-X ,ly:grob? "Containing X@tie{}axis group.") (axis-group-parent-Y ,ly:grob? "Containing Y@tie{}axis group.") - (bar-extent ,number-pair? "The Y-extent of the actual bar line. -This may differ from @code{Y-extent} because it does not include the dots in -a repeat bar line.") - (bars ,ly:grob-array? "A list of bar line pointers.") + (bars ,ly:grob-array? "An array of bar line pointers.") (beam ,ly:grob? "A pointer to the beam, if applicable.") - (bounded-by-me ,ly:grob-array? "A list of spanners that have this + (bounded-by-me ,ly:grob-array? "An array of spanners that have this column as start/begin point. Only columns that have grobs or act as bounds are spaced.") (bracket ,ly:grob? "The bracket for a number.") - (columns ,ly:grob-array? "A list of grobs, typically containing + (columns ,ly:grob-array? "An array of grobs, typically containing @code{PaperColumn} or @code{NoteColumn} objects.") (conditional-elements ,ly:grob-array? "Internal use only.") - (cross-staff ,boolean? "For a beam or a stem, this is true if we -depend on inter-staff spacing.") + (covered-grobs ,ly:grob-array? "Grobs that could potentially collide +with a beam.") (direction-source ,ly:grob? "In case @code{side-relative-direction} is set, which grob to get the direction from.") + (display-cautionary ,boolean? "Should the grob be displayed as a cautionary grob?") (dot ,ly:grob? "A reference to a @code{Dots} object.") (dots ,ly:grob-array? "Multiple @code{Dots} objects.") - (elements ,ly:grob-array? "A list of grobs; the type is depending on + (elements ,ly:grob-array? "An array of grobs; the type is depending on the grob where this is set in.") (encompass-objects ,ly:grob-array? "Objects that a slur should avoid in addition to notes and stems.") (figures ,ly:grob-array? "Figured bass objects for continuation line.") - (forced ,boolean? "Manually forced accidental.") - (glyph-name ,string? "The glyph name within the font.") + (glissando-index ,integer? "The index of a glissando in its note +column.") (grace-spacing ,ly:grob? "A run of grace notes.") - (heads ,ly:grob-array? "A list of note heads.") + (heads ,ly:grob-array? "An array of note heads.") - (important-column-ranks ,vector? "A cache of columns that contain -@code{items-worth-living} data.") - (items-worth-living ,ly:grob-array? "A list of interesting items. If + (items-worth-living ,ly:grob-array? "An array of interesting items. If empty in a particular staff, then that staff is erased.") - (left-items ,ly:grob-array? "DOCME") - (left-neighbors ,ly:grob-array? "A list of @code{spacing-wishes} grobs -that are close to the current column. + (keep-alive-with ,ly:grob-array? "An array of other +@code{VerticalAxisGroup}s. If any of them are alive, then we will stay alive.") -The closest @code{spacing-wishes} determine the actual distances between the -columns.") + (left-items ,ly:grob-array? "DOCME") + (left-neighbor ,ly:grob? "The right-most column that has a spacing-wish +for this column.") (normal-stems ,ly:grob-array? "An array of visible stems.") - (note-columns ,pair? "A list of @code{NoteColumn} grobs.") + (note-columns ,ly:grob-array? "An array of @code{NoteColumn} grobs.") (note-head ,ly:grob? "A single note head.") - (note-heads ,ly:grob-array? "A list of note head grobs.") + (note-heads ,ly:grob-array? "An array of note head grobs.") (pedal-text ,ly:grob? "A pointer to the text of a mixed-style piano pedal.") - (pure-Y-common ,ly:grob? "A cache of the -@code{common_refpoint_of_array} of the @code{elements} grob set.") - (pure-Y-offset-in-progress ,boolean? "A debugging aid for catching -cyclic dependencies.") + (pure-relevant-grobs ,ly:grob-array? "All the grobs (items and spanners) +that are relevant for finding the @code{pure-Y-extent}") (pure-relevant-items ,ly:grob-array? "A subset of elements that are relevant for finding the @code{pure-Y-extent}.") (pure-relevant-spanners ,ly:grob-array? "A subset of elements that are relevant for finding the @code{pure-Y-extent}.") + (pure-Y-common ,ly:grob? "A cache of the +@code{common_refpoint_of_array} of the @code{elements} grob set.") (rest ,ly:grob? "A pointer to a @code{Rest} object.") (rest-collision ,ly:grob? "A rest collision that a rest is in.") - (rests ,ly:grob-array? "A list of rest objects.") + (rests ,ly:grob-array? "An array of rest objects.") (right-items ,ly:grob-array? "DOCME") - (right-neighbors ,ly:grob-array? "See @code{left-neighbors}.") + (right-neighbor ,ly:grob? "See @code{left-neighbor}.") - (separation-item ,ly:grob? "A separation item.") - (side-support-elements ,ly:grob-array? "The side support, a list of + (side-support-elements ,ly:grob-array? "The side support, an array of grobs.") (slur ,ly:grob? "A pointer to a @code{Slur} object.") - (spaceable-staves ,ly:grob-array? "Objects to be spaced during page -layout.") (spacing ,ly:grob? "The spacing spanner governing this section.") - (spacing-wishes ,ly:grob-array? "List of note spacing or staff spacing + (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-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 +of the entire spanner, although this behavior is unpredictable in situations +with lots of rhythmic diversity. For predictable results, use LEFT and RIGHT.") + (staff-grouper ,ly:grob? "The staff grouper we belong to.") (staff-symbol ,ly:grob? "The staff symbol grob that we are in.") (stem ,ly:grob? "A pointer to a @code{Stem} object.") - (stems ,ly:grob-array? "A list of stem objects, corresponding to the -notes that the arpeggio has to be before.") + (stems ,ly:grob-array? "An array of stem objects.") (tie ,ly:grob? "A pointer to a @code{Tie} object.") (tremolo-flag ,ly:grob? "The tremolo object on a stem.") (tuplet-number ,ly:grob? "The number for a bracket.") - (tuplets ,ly:grob-array? "A list of smaller tuplet brackets.") + (tuplets ,ly:grob-array? "An array of smaller tuplet brackets.") + (X-common ,ly:grob? "Common reference point for axis group.") + (Y-common ,ly:grob? "See @code{X-common}.") ;;;;;;;;;;;;;;;; ;; other - (begin-of-line-visible ,boolean? "Used for marking @code{ChordNames} -that should only show changes.") + (adjacent-pure-heights ,pair? "A pair of vectors. Used by a +@code{VerticalAxisGroup} to cache the @code{Y-extent}s of different column +ranges.") + + (bar-extent ,number-pair? "The Y-extent of the actual bar line. +This may differ from @code{Y-extent} because it does not include the dots in +a repeat bar line.") + (begin-of-line-visible ,boolean? "Set to make @code{ChordName} or +@code{FretBoard} be visible only at beginning of line or at +chord changes.") (cause ,scheme? "Any kind of causation objects (i.e., music, or perhaps translator) that was the cause for this grob.") - (delta-position ,number? "The vertical position difference.") - (details ,list? "Alist of parameters for detailed grob behavior. + (cross-staff ,boolean? "For a beam or a stem, this is true if we +depend on inter-staff spacing.") -More information on the allowed parameters can be found by inspecting -@file{lily/slur-scoring.cc}, @file{lily/beam-quanting.cc}, and -@file{lily/tie-formatting-problem.cc}. Setting @code{debug-tie-scoring}, -@code{debug-beam-scoring} or @code{debug-slur-scoring} also provides -useful clues.") + (delta-position ,number? "The vertical position difference.") (font ,ly:font-metric? "A cached font metric object.") + (forced ,boolean? "Manually forced accidental.") (head-width ,ly:dimension? "The width of this ligature head.") (ideal-distances ,list? "@code{(@var{obj} . (@var{dist} . @var{strength}))} pairs.") + (important-column-ranks ,vector? "A cache of columns that contain +@code{items-worth-living} data.") (interfaces ,list? "A list of symbols indicating the interfaces supported by this object. It is initialized from the @code{meta} field.") (least-squares-dy ,number? "The ideal beam slope, without damping.") + (maybe-loose ,boolean? "Used to mark a breakable column that is +loose if and only if it is in the middle of a line.") (meta ,list? "Provide meta information. It is an alist with the entries @code{name} and @code{interfaces}.") (minimum-distances ,list? "A list of rods that have the format @@ -965,9 +1109,8 @@ entries @code{name} and @code{interfaces}.") (positioning-done ,boolean? "Used to signal that a positioning element did its job. This ensures that a positioning is only done once.") (pure-Y-extent ,number-pair? "The estimated height of a system.") - - (quant-score ,string? "The beam quanting score; stored for -debugging.") + (pure-Y-offset-in-progress ,boolean? "A debugging aid for catching +cyclic dependencies.") (quantize-position ,boolean? "If set, a vertical alignment is aligned to be within staff spaces.") (quantized-positions ,number-pair? "The beam positions after @@ -977,9 +1120,9 @@ quanting.") acts as an index for looking up a @code{Stencil} object.") (shorten ,ly:dimension? "The amount of space that a stem is shortened. Internally used to distribute beam shortening over stems.") - (skyline-distance ,number? "The distance between this staff and the -next one, as determined by a skyline algorithm.") (stem-info ,pair? "A cache of stem parameters.") + (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.") @@ -1012,19 +1155,20 @@ a head may be affected by the left and/or right neighbour head. @code{context-info} holds for each head such information about the left and right neighbour, encoded as a bit mask.") - (descendens ,boolean? "Is this neume of descendent type?") (deminutum ,boolean? "Is this neume deminished?") + (descendens ,boolean? "Is this neume of descendent type?") (flexa-height ,ly:dimension? "The height of a flexa shape in a ligature grob (in @code{staff-space} units).") + (flexa-interval ,integer? "The interval spanned by the two notes of a +flexa shape (1 is a second, 7 is an octave).") (flexa-width ,ly:dimension? "The width of a flexa shape in a ligature grob in (in @code{staff-space} units).") + (ligature-flexa ,boolean? "request joining note to the previous one +in a flexa.") (inclinatum ,boolean? "Is this neume an inclinatum?") - (join-heads ,boolean? "Whether to join the note heads of an ambitus -grob with a vertical line.") - (join-right-amount ,number? "DOCME") (linea ,boolean? "Attach vertical lines to this neume?") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index f458290be5..0ddc677a04 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1,9 +1,20 @@ -;;;; define-grobs.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . ;;;; distances are given in line-thickness (thicknesses) and ;;;; staff-space (distances) @@ -13,191 +24,182 @@ ;; TODO: junk the meta field in favor of something more compact? -;;; todo:: reorder sensibly. - (define-public all-grob-descriptions `( (Accidental . ( + (alteration . ,accidental-interface::calc-alteration) (avoid-slur . inside) (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (alteration . ,accidental-interface::calc-alteration) (stencil . ,ly:accidental-interface::print) - (Y-extent . ,ly:accidental-interface::height) (X-extent . ,ly:accidental-interface::width) + (Y-extent . ,ly:accidental-interface::height) (meta . ((class . Item) (interfaces . (accidental-interface + inline-accidental-interface font-interface)))))) (AccidentalCautionary . ( + (alteration . ,accidental-interface::calc-alteration) (avoid-slur . inside) - (parenthesized . #t) (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (alteration . ,accidental-interface::calc-alteration) + (parenthesized . #t) (stencil . ,ly:accidental-interface::print) (Y-extent . ,ly:accidental-interface::height) (meta . ((class . Item) (interfaces . (accidental-interface + inline-accidental-interface font-interface)))))) + (AccidentalPlacement + . ( + (direction . ,LEFT) + (positioning-done . ,ly:accidental-placement::calc-positioning-done) + + ;; this is quite small, but it is very ugly to have + ;; accs closer to the previous note than to the next one. + (right-padding . 0.15) + + ;; for horizontally stacked scripts. + (script-priority . -100) + + (X-extent . ,ly:axis-group-interface::width) + (meta . ((class . Item) + (interfaces . (accidental-placement-interface)))))) + (AccidentalSuggestion . ( + (alteration . ,accidental-interface::calc-alteration) + (direction . ,UP) + (font-size . -2) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (outside-staff-priority . 0) + (script-priority . 0) + (self-alignment-X . ,CENTER) + (side-axis . ,Y) + (staff-padding . 0.25) (stencil . ,ly:accidental-interface::print) - (X-extent . ,ly:accidental-interface::width) - (Y-extent . ,ly:accidental-interface::height) + (X-extent . ,ly:accidental-interface::width) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) - (self-alignment-X . ,CENTER) - (font-size . -2) - (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (alteration . ,accidental-interface::calc-alteration) + (Y-extent . ,ly:accidental-interface::height) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (direction . ,UP) - (staff-padding . 0.25) - (outside-staff-priority . 0) - (script-priority . 0) - (side-axis . ,Y) (meta . ((class . Item) - (interfaces . (side-position-interface - script-interface - accidental-interface + (interfaces . (accidental-interface accidental-suggestion-interface + font-interface + script-interface self-alignment-interface - font-interface)))))) - - (AccidentalPlacement - . ( - (left-padding . 0.2) + side-position-interface)))))) - ;; for horizontally stacked scripts. - (script-priority . -100) - (direction . ,LEFT) - - (positioning-done . ,ly:accidental-placement::calc-positioning-done) - (X-extent . ,ly:axis-group-interface::width) - - ;; this is quite small, but it is very ugly to have - ;; accs closer to the previous note than to the next one. - (right-padding . 0.15) - (meta . ((class . Item) - (interfaces . (accidental-placement-interface)))))) - (Ambitus . ( (axes . (,X ,Y)) - (X-extent . ,ly:axis-group-interface::width) - (Y-extent . ,ly:axis-group-interface::height) + (break-align-symbol . ambitus) + (break-visibility . ,begin-of-line-visible) + (non-musical . #t) (space-alist . ( + (cue-end-clef . (extra-space . 0.5)) (clef . (extra-space . 0.5)) + (cue-clef . (extra-space . 0.5)) (key-signature . (extra-space . 0.0)) (staff-bar . (extra-space . 0.0)) (time-signature . (extra-space . 0.0)) (first-note . (fixed-space . 0.0)))) - (non-musical . #t) - (break-align-symbol . ambitus) - (break-visibility . ,begin-of-line-visible) - (meta . ((class . Item) - (interfaces . (axis-group-interface - break-aligned-interface - ambitus-interface)))))) - - (AmbitusLine - . ( - (stencil . ,ly:ambitus::print) - (join-heads . #t) - (thickness . 2) - (X-offset . ,ly:self-alignment-interface::centered-on-x-parent) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Item) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) (interfaces . (ambitus-interface - staff-symbol-referencer-interface - font-interface)))))) + axis-group-interface + break-aligned-interface)))))) + (AmbitusAccidental . ( - (font-family . music) - (padding . 0.5) - (X-offset . ,ly:side-position-interface::x-aligned-side) (direction . ,LEFT) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (padding . 0.5) + (side-axis . ,X) (stencil . ,ly:accidental-interface::print) + (X-offset . ,ly:side-position-interface::x-aligned-side) (Y-extent . ,ly:accidental-interface::height) - (glyph-name-alist . ,standard-alteration-glyph-name-alist) - (side-axis . ,X) (meta . ((class . Item) - (interfaces . ( - accidental-interface + (interfaces . (accidental-interface break-aligned-interface - side-position-interface + font-interface + side-position-interface)))))) + + (AmbitusLine + . ( + (gap . 0.35) + (stencil . ,ambitus::print) + (thickness . 2) + (X-offset . ,ly:self-alignment-interface::centered-on-x-parent) + (meta . ((class . Item) + (interfaces . (ambitus-interface font-interface)))))) (AmbitusNoteHead . ( (duration-log . 2) - (stencil . ,ly:note-head::print) (glyph-name . ,note-head::calc-glyph-name) + (stencil . ,ly:note-head::print) (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (font-interface + (interfaces . (ambitus-interface + font-interface + ledgered-interface note-head-interface - ambitus-interface - staff-symbol-referencer-interface rhythmic-head-interface - ledgered-interface)))))) + staff-symbol-referencer-interface)))))) (Arpeggio - . ((X-extent . ,ly:arpeggio::width) - (stencil . ,ly:arpeggio::print) - (Y-offset . ,ly:staff-symbol-referencer::callback) - (X-offset . ,ly:side-position-interface::x-aligned-side) + . ( (direction . ,LEFT) - (positions . ,ly:arpeggio::calc-positions) (padding . 0.5) + (positions . ,ly:arpeggio::calc-positions) (script-priority . 0) (side-axis . ,X) (staff-position . 0.0) - (Y-extent . ,ly:arpeggio::height) + (stencil . ,ly:arpeggio::print) + (X-extent . ,ly:arpeggio::width) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) (interfaces . (arpeggio-interface - staff-symbol-referencer-interface + font-interface side-position-interface - font-interface)))))) + staff-symbol-referencer-interface)))))) - (BalloonTextItem - . ((stencil . ,ly:balloon-interface::print) - (text . ,(grob::calc-property-by-copy 'text)) - (X-offset . ,(grob::calc-property-by-copy 'X-offset)) - (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) + (BalloonTextItem + . ( + (annotation-balloon . #t) + (annotation-line . #t) + (stencil . ,ly:balloon-interface::print) + (text . ,(grob::calc-property-by-copy 'text)) + (X-offset . ,(grob::calc-property-by-copy 'X-offset)) + (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) (meta . ((class . Item) (interfaces . (balloon-interface - text-interface - font-interface)))))) + font-interface + text-interface)))))) + (BarLine . ( - (break-align-symbol . staff-bar) + (allow-span-bar . #t) + (bar-extent . ,ly:bar-line::calc-bar-extent) (break-align-anchor . ,ly:bar-line::calc-anchor) - (glyph . "|") - (gap . 0.4) - (layer . 0) + (break-align-symbol . staff-bar) (break-visibility . ,bar-line::calc-break-visibility) - (non-musical . #t) - (stencil . ,ly:bar-line::print) + (gap . 0.4) + (glyph . "|") (glyph-name . ,bar-line::calc-glyph-name) - (bar-size . ,ly:bar-line::calc-bar-size) - (bar-extent . ,ly:bar-line::calc-bar-extent) - (allow-span-bar . #t) - - (space-alist . ( - (time-signature . (extra-space . 0.75)) - (custos . (minimum-space . 2.0)) - (clef . (minimum-space . 1.0)) - (key-signature . (extra-space . 1.0)) - (key-cancellation . (extra-space . 1.0)) - (first-note . (fixed-space . 1.3)) - (next-note . (semi-fixed-space . 0.9)) - (right-edge . (extra-space . 0.0)))) ;; ;; Ross. page 151 lists other values, we opt for a leaner look @@ -208,6 +210,19 @@ (thin-kern . 3.0) (hair-thickness . 1.9) (thick-thickness . 6.0) + + (layer . 0) + (non-musical . #t) + (space-alist . ( + (time-signature . (extra-space . 0.75)) + (custos . (minimum-space . 2.0)) + (clef . (minimum-space . 1.0)) + (key-signature . (extra-space . 1.0)) + (key-cancellation . (extra-space . 1.0)) + (first-note . (fixed-space . 1.3)) + (next-note . (semi-fixed-space . 0.9)) + (right-edge . (extra-space . 0.0)))) + (stencil . ,ly:bar-line::print) (meta . ((class . Item) (interfaces . (bar-line-interface break-aligned-interface @@ -215,74 +230,78 @@ (BarNumber . ( - (stencil . ,ly:text-interface::print) - (non-musical . #t) + (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff) + ;; want the bar number before the clef at line start. + (break-align-symbols . (left-edge staff-bar)) + (break-visibility . ,begin-of-line-visible) - (padding . 1.0) (direction . ,UP) (font-family . roman) (font-size . -2) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) + (non-musical . #t) (outside-staff-priority . 100) + (padding . 1.0) + (self-alignment-X . ,RIGHT) + (side-axis . ,Y) + (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:break-alignable-interface::self-align-callback)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) - - (self-alignment-X . ,RIGHT) - - ;; want the bar number before the clef at line start. - (break-align-symbols . (left-edge staff-bar)) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (side-position-interface - text-interface - break-alignable-interface + (interfaces . (break-alignable-interface + font-interface self-alignment-interface - font-interface)))))) + side-position-interface + text-interface)))))) (BassFigure . ( (stencil . ,ly:text-interface::print) (meta . ((class . Item) - (interfaces . (text-interface + (interfaces . (bass-figure-interface + font-interface rhythmic-grob-interface - bass-figure-interface - font-interface)))))) + text-interface)))))) (BassFigureAlignment . ( (axes . (,Y)) - (threshold . (2 . 1000)) - (positioning-done . ,ly:align-interface::calc-positioning-done) - (Y-extent . ,ly:axis-group-interface::height) - (stacking-dir . ,DOWN) (padding . 0.2) + (positioning-done . ,ly:align-interface::align-to-minimum-distances) + (stacking-dir . ,DOWN) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Spanner) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) (interfaces . (align-interface - bass-figure-alignment-interface - axis-group-interface)))))) + axis-group-interface + bass-figure-alignment-interface)))))) (BassFigureAlignmentPositioning - . ((Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (direction . ,UP) - (Y-extent . ,ly:axis-group-interface::height) + . ( (axes . (,Y)) - (staff-padding . 1.0) + (direction . ,UP) (padding . 0.5) + (side-axis . ,Y) + (staff-padding . 1.0) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (side-position-interface - axis-group-interface)))))) - + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + side-position-interface)))))) + (BassFigureBracket . ( + (edge-height . (0.2 . 0.2)) (stencil . ,ly:enclosing-bracket::print) (X-extent . ,ly:enclosing-bracket::width) - (edge-height . (0.2 . 0.2)) (meta . ((class . Item) (interfaces . (enclosing-bracket-interface)))))) @@ -295,11 +314,13 @@ (BassFigureLine . ( + (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) (vertical-skylines . ,ly:axis-group-interface::calc-skylines) - (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Spanner) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) (interfaces . (axis-group-interface)))))) @@ -307,33 +328,10 @@ . ( ;; todo: clean this up a bit: the list is getting ;; rather long. - (gap . 0.8) - (positions . ,(ly:make-simple-closure - (ly:make-simple-closure - (list chain-grob-member-functions - `(,cons 0 0) - ly:beam::calc-least-squares-positions - ly:beam::slope-damping - ly:beam::shift-region-to-valid - ly:beam::quanting - )))) - - ;; this is a hack to set stem lengths, if positions is set. - (quantized-positions . ,ly:beam::set-stem-lengths) - (concaveness . ,ly:beam::calc-concaveness) - (direction . ,ly:beam::calc-direction) - (shorten . ,ly:beam::calc-stem-shorten) - (beaming . ,ly:beam::calc-beaming) - (stencil . ,ly:beam::print) - (clip-edges . #t) - (cross-staff . ,ly:beam::calc-cross-staff) - - (details . ((hint-direction-penalty . 20))) - ;; TODO: should be in SLT. - (thickness . 0.48) ; in staff-space - (neutral-direction . ,DOWN) + (auto-knee-gap . 5.5) + (beam-thickness . 0.48) ; in staff-space - ;; Whe have some unreferenced problems here. + ;; We have some unreferenced problems here. ;; ;; If we shorten beamed stems less than normal stems (1 staff-space), ;; or high order less than 8th beams, patterns like @@ -348,39 +346,94 @@ ;; isolated shortened beams look nice and a bit shortened, ;; sadly possibly breaking patterns with high order beams. (beamed-stem-shorten . (1.0 0.5 0.25)) + + (beaming . ,ly:beam::calc-beaming) + (clip-edges . #t) + (collision-interfaces . (beam-interface + clef-interface + inline-accidental-interface + key-signature-interface + note-head-interface + stem-interface + time-signature-interface)) + (concaveness . ,ly:beam::calc-concaveness) + (cross-staff . ,ly:beam::calc-cross-staff) (damping . 1) - (auto-knee-gap . 5.5) + (details + .( + (secondary-beam-demerit . 10) + (stem-length-demerit-factor . 5) + (region-size . 2) + (beam-eps . 0.001) + (stem-length-limit-penalty . 5000) + (damping-direction-penalty . 800) + (hint-direction-penalty . 20) + (musical-direction-factor . 400) + (ideal-slope-factor . 10) + (collision-penalty . 500) + (collision-padding . 0.35) + (round-to-zero-slope . 0.02))) + (direction . ,ly:beam::calc-direction) + (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints) ;; only for debugging. (font-family . roman) - (meta . ((class . Spanner) - (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems))) - (interfaces . (staff-symbol-referencer-interface - unbreakable-spanner-interface - beam-interface - font-interface)))))) - (BendAfter - . ( - (stencil . ,bend::print) + (gap . 0.8) + (neutral-direction . ,DOWN) + (positions . ,(ly:make-simple-closure + (ly:make-simple-closure + (list chain-grob-member-functions + `(,cons 0 0) + ly:beam::calc-least-squares-positions + ly:beam::slope-damping + ly:beam::shift-region-to-valid + ly:beam::quanting + )))) + + ;; this is a hack to set stem lengths, if positions is set. + (quantized-positions . ,ly:beam::set-stem-lengths) + + (shorten . ,ly:beam::calc-stem-shorten) + (stencil . ,ly:beam::print) + + (meta . ((class . Spanner) + (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems))) + (interfaces . (beam-interface + font-interface + staff-symbol-referencer-interface + unbreakable-spanner-interface)))))) + + (BendAfter + . ( (minimum-length . 0.5) + (stencil . ,bend::print) (thickness . 2.0) (meta . ((class . Spanner) - (interfaces . (spanner-interface - bend-after-interface)))))) + (interfaces . (bend-after-interface + spanner-interface)))))) - (BreakAlignment + (BreakAlignGroup . ( - (non-musical . #t) - (stacking-dir . 1) - (positioning-done . ,ly:break-alignment-interface::calc-positioning-done) + (axes . (,X)) + (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor) + (break-visibility . ,ly:break-aligned-interface::calc-break-visibility) (X-extent . ,ly:axis-group-interface::width) + (meta . ((class . Item) + (interfaces . (axis-group-interface + break-aligned-interface)))))) + + (BreakAlignment + . ( + (axes . (,X)) (break-align-orders . ;; end of line #(( left-edge + cue-end-clef ambitus breathing-sign clef + cue-clef staff-bar key-cancellation key-signature @@ -390,14 +443,16 @@ ;; unbroken ( left-edge + cue-end-clef ambitus breathing-sign clef + cue-clef staff-bar key-cancellation key-signature - staff - time-signature custos) + time-signature + custos) ;; begin of line ( @@ -409,25 +464,20 @@ key-signature staff-bar time-signature + cue-clef custos))) - (axes . (,X)) - (meta . ((class . Item) - (interfaces . (break-alignment-interface - axis-group-interface)))))) - - (BreakAlignGroup - . ( - (axes . (,X)) + (non-musical . #t) + (positioning-done . ,ly:break-alignment-interface::calc-positioning-done) + (stacking-dir . 1) (X-extent . ,ly:axis-group-interface::width) - (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor) - (break-visibility . ,ly:break-aligned-interface::calc-break-visibility) (meta . ((class . Item) - (interfaces . (break-aligned-interface - axis-group-interface)))))) + (interfaces . (axis-group-interface + break-alignment-interface)))))) (BreathingSign . ( (break-align-symbol . breathing-sign) + (break-visibility . ,begin-of-line-invisible) (non-musical . #t) (space-alist . ( (ambitus . (extra-space . 2.0)) @@ -436,29 +486,42 @@ (time-signature . (minimum-space . 1.5)) (staff-bar . (minimum-space . 1.5)) (clef . (minimum-space . 2.0)) + (cue-clef . (minimum-space . 2.0)) + (cue-end-clef . (minimum-space . 2.0)) (first-note . (fixed-space . 1.0)) ;huh? (right-edge . (extra-space . 0.1)))) (stencil . ,ly:text-interface::print) (text . ,(make-musicglyph-markup "scripts.rcomma")) (Y-offset . ,ly:breathing-sign::offset-callback) - (break-visibility . ,begin-of-line-invisible) (meta . ((class . Item) (interfaces . (break-aligned-interface breathing-sign-interface - text-interface - font-interface)))))) + font-interface + text-interface)))))) + + (ChordName + . ( + (after-line-breaking . ,ly:chord-name::after-line-breaking) + (font-family . sans) + (font-size . 1.5) + (stencil . ,ly:text-interface::print) + (extra-spacing-height . (0.2 . -0.2)) + (word-space . 0.0) + (meta . ((class . Item) + (interfaces . (chord-name-interface + font-interface + rhythmic-grob-interface + text-interface)))))) (Clef . ( - (stencil . ,ly:clef::print) - (glyph-name . ,ly:clef::calc-glyph-name) - (non-musical . #t) (avoid-slur . inside) - (font-family . music) - (break-align-symbol . clef) (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . clef) (break-visibility . ,begin-of-line-visible) - (space-alist . ((ambitus . (extra-space . 2.0)) + (glyph-name . ,ly:clef::calc-glyph-name) + (non-musical . #t) + (space-alist . ((cue-clef . (extra-space . 2.0)) (staff-bar . (extra-space . 0.7)) (key-cancellation . (minimum-space . 3.5)) (key-signature . (minimum-space . 3.5)) @@ -466,123 +529,172 @@ (first-note . (minimum-fixed-space . 5.0)) (next-note . (extra-space . 0.5)) (right-edge . (extra-space . 0.5)))) + (stencil . ,ly:clef::print) (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (clef-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface + clef-interface font-interface - break-aligned-interface)))))) - - (ClusterSpannerBeacon - . ( - (Y-extent . ,ly:cluster-beacon::height) - (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface - cluster-beacon-interface)))))) + staff-symbol-referencer-interface)))))) (ClusterSpanner . ( - (springs-and-rods . ,ly:spanner::set-spacing-rods) - (stencil . ,ly:cluster::print) + (cross-staff . ,ly:cluster::calc-cross-staff) (minimum-length . 0.0) (padding . 0.25) - (cross-staff . ,ly:cluster::calc-cross-staff) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:cluster::print) (style . ramp) (meta . ((class . Spanner) (interfaces . (cluster-interface)))))) - (ChordName + (ClusterSpannerBeacon . ( - (stencil . ,ly:text-interface::print) - (after-line-breaking . ,ly:chord-name::after-line-breaking) - (word-space . 0.0) - (font-family . sans) - (font-size . 1.5) + (Y-extent . ,ly:cluster-beacon::height) (meta . ((class . Item) - (interfaces . (font-interface - rhythmic-grob-interface - text-interface - chord-name-interface)))))) + (interfaces . (cluster-beacon-interface + rhythmic-grob-interface)))))) (CombineTextScript . ( - (stencil . ,ly:text-interface::print) - (extra-spacing-width . (+inf.0 . -inf.0)) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (avoid-slur . outside) + (baseline-skip . 2) (direction . ,UP) + (extra-spacing-width . (+inf.0 . -inf.0)) + (font-series . bold) + (outside-staff-priority . 450) (padding . 0.5) - (staff-padding . 0.5) (script-priority . 200) - ;; todo: add X self alignment? - (baseline-skip . 2) (side-axis . ,Y) - (avoid-slur . outside ) - (font-series . bold) + (staff-padding . 0.5) + ;; todo: add X self alignment? + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (text-script-interface - text-interface + (interfaces . (font-interface side-position-interface - font-interface)))))) + text-interface + text-script-interface)))))) + + (CueClef + . ( + (avoid-slur . inside) + (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . cue-clef) + (break-visibility . ,begin-of-line-visible) + (font-size . -4) + (glyph-name . ,ly:clef::calc-glyph-name) + (non-musical . #t) + (full-size-change . #t) + (space-alist . ((staff-bar . (minimum-space . 2.7)) + (key-cancellation . (minimum-space . 3.5)) + (key-signature . (minimum-space . 3.5)) + (time-signature . (minimum-space . 4.2)) + (custos . (minimum-space . 0.0)) + (first-note . (minimum-fixed-space . 3.0)) + (next-note . (extra-space . 0.5)) + (right-edge . (extra-space . 0.5)))) + (stencil . ,ly:clef::print) + (Y-offset . ,ly:staff-symbol-referencer::callback) + (meta . ((class . Item) + (interfaces . (break-aligned-interface + clef-interface + font-interface + staff-symbol-referencer-interface)))))) + + (CueEndClef + . ( + (avoid-slur . inside) + (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . cue-end-clef) + (break-visibility . ,begin-of-line-invisible) + (font-size . -4) + (glyph-name . ,ly:clef::calc-glyph-name) + (non-musical . #t) + (full-size-change . #t) + (space-alist . ((clef . (extra-space . 0.7)) + (cue-clef . (extra-space . 0.7)) + (staff-bar . (extra-space . 0.7)) + (key-cancellation . (minimum-space . 3.5)) + (key-signature . (minimum-space . 3.5)) + (time-signature . (minimum-space . 4.2)) + (first-note . (minimum-fixed-space . 5.0)) + (next-note . (extra-space . 0.5)) + (right-edge . (extra-space . 0.5)))) + (stencil . ,ly:clef::print) + (Y-offset . ,ly:staff-symbol-referencer::callback) + (meta . ((class . Item) + (interfaces . (break-aligned-interface + clef-interface + font-interface + staff-symbol-referencer-interface)))))) (Custos . ( (break-align-symbol . custos) - (non-musical . #t) - (stencil . ,ly:custos::print) (break-visibility . ,end-of-line-visible) - (style . vaticana) (neutral-direction . ,DOWN) - (Y-offset . ,ly:staff-symbol-referencer::callback) + (non-musical . #t) (space-alist . ( (first-note . (minimum-fixed-space . 0.0)) (right-edge . (extra-space . 0.1)))) + (stencil . ,ly:custos::print) + (style . vaticana) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (custos-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface + custos-interface font-interface - break-aligned-interface)))))) + staff-symbol-referencer-interface)))))) (DotColumn . ( (axes . (,X)) (direction . ,RIGHT) - (positioning-done . ,ly:dot-column::calc-positioning-done) + (positioning-done . ,ly:dot-column::calc-positioning-done) (X-extent . ,ly:axis-group-interface::width) (meta . ((class . Item) - (interfaces . (dot-column-interface - axis-group-interface)))))) + (interfaces . (axis-group-interface + dot-column-interface)))))) (Dots . ( - (stencil . ,ly:dots::print) (dot-count . ,dots::calc-dot-count) (staff-position . ,dots::calc-staff-position) + (stencil . ,ly:dots::print) + (extra-spacing-height . (-0.5 . 0.5)) (meta . ((class . Item) - (interfaces . (font-interface - staff-symbol-referencer-interface - dots-interface)))))) + (interfaces . (dots-interface + font-interface + staff-symbol-referencer-interface)))))) (DoublePercentRepeat . ( - (stencil . ,ly:percent-repeat-item-interface::double-percent) - (non-musical . #t) - (slope . 1.0) + (break-align-symbol . staff-bar) + (break-visibility . ,begin-of-line-invisible) (dot-negative-kern . 0.75) - (slash-negative-kern . 1.6) (font-encoding . fetaMusic) - (width . 2.0) + (non-musical . #t) + (slash-negative-kern . 1.6) + (slope . 1.0) + (stencil . ,ly:percent-repeat-item-interface::double-percent) (thickness . 0.48) - (break-align-symbol . staff-bar) - (break-visibility . ,begin-of-line-invisible) (meta . ((class . Item) - (interfaces . (font-interface - break-aligned-interface + (interfaces . (break-aligned-interface + font-interface percent-repeat-interface percent-repeat-item-interface)))))) (DoublePercentRepeatCounter . ( + (direction . ,UP) + (font-encoding . fetaText) + (font-size . -2) + (padding . 0.2) + (self-alignment-X . ,CENTER) + (side-axis . ,Y) + (staff-padding . 0.25) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -591,36 +703,45 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (font-encoding . fetaNumber) - (self-alignment-X . ,CENTER) - (font-size . -2) - (direction . ,UP) - (padding . 0.2) - (staff-padding . 0.25) - (side-axis . ,Y) (meta . ((class . Item) - (interfaces . (side-position-interface - self-alignment-interface - percent-repeat-item-interface + (interfaces . (font-interface percent-repeat-interface - font-interface + percent-repeat-item-interface + self-alignment-interface + side-position-interface text-interface)))))) + (DoubleRepeatSlash + . ( + (dot-negative-kern . 0.75) + (font-encoding . fetaMusic) + (slash-negative-kern . 1.6) + (slope . 1.0) + (stencil . ,ly:percent-repeat-item-interface::beat-slash) + (thickness . 0.48) + (meta . ((class . Item) + (interfaces . (font-interface + percent-repeat-interface + percent-repeat-item-interface + rhythmic-grob-interface)))))) + (DynamicLineSpanner . ( (axes . (,Y)) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (staff-padding . 0.1) - (padding . 0.6) - (slur-padding . 0.3) - (minimum-space . 1.2) + (cross-staff . ,ly:side-position-interface::calc-cross-staff) (direction . ,DOWN) - (side-axis . ,Y) + (minimum-space . 1.2) (outside-staff-priority . 250) - (Y-extent . ,ly:axis-group-interface::height) + (padding . 0.6) + (side-axis . ,Y) + (slur-padding . 0.3) + (staff-padding . 0.1) (X-extent . ,ly:axis-group-interface::width) - (cross-staff . ,ly:side-position-interface::calc-cross-staff) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) (interfaces . (axis-group-interface dynamic-interface dynamic-line-spanner-interface @@ -631,35 +752,30 @@ ;; todo. - (stencil . ,ly:text-interface::print) (direction . ,ly:script-interface::calc-direction) - (positioning-done . ,ly:script-interface::calc-positioning-done) - - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) - (self-alignment-X . ,CENTER) - (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self) - (self-alignment-Y . ,CENTER) + (extra-spacing-width . (+inf.0 . -inf.0)) + (font-encoding . fetaText) (font-series . bold) - (font-encoding . fetaDynamic) (font-shape . italic) - (extra-spacing-width . (+inf.0 . -inf.0)) (outside-staff-priority . 250) + (positioning-done . ,ly:script-interface::calc-positioning-done) + (right-padding . 0.5) + (self-alignment-X . ,CENTER) + (self-alignment-Y . ,CENTER) + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self) (meta . ((class . Item) - (interfaces . (font-interface - text-interface + (interfaces . (dynamic-interface + dynamic-text-interface + font-interface + script-interface self-alignment-interface - dynamic-interface - script-interface)))))) + text-interface)))))) (DynamicTextSpanner . ( - ;; rather ugh with NCSB - ;; (font-series . bold) - (font-shape . italic) - (style . dashed-line) - - ;; make sure the spanner doesn't get too close to notes - (minimum-Y-extent . (-1 . 1)) + (before-line-breaking . ,dynamic-text-spanner::before-line-breaking) (bound-details . ((right . ((attach-dir . ,LEFT) (Y . 0) (padding . 0.75) @@ -667,76 +783,150 @@ (right-broken . ((attach-dir . ,RIGHT) (padding . 0.0) )) - + (left . ((attach-dir . ,LEFT) (Y . 0) - (stencil-offset . (0 . -0.5)) - (padding . 0.5) + (stencil-offset . (-0.75 . -0.5)) + (padding . 0.75) )) (left-broken . ((attach-dir . ,RIGHT) )) )) - (stencil . ,ly:line-spanner::print) - (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (dash-fraction . 0.2) + (dash-period . 3.0) + + ;; rather ugh with NCSB + ;; (font-series . bold) + (font-shape . italic) ;; need to blend with dynamic texts. (font-size . 1) - (dash-fraction . 0.2) - (dash-period . 3.0) + + (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text) + + (minimum-length . 2.0) + ;; make sure the spanner doesn't get too close to notes + (minimum-Y-extent . (-1 . 1)) + + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:line-spanner::print) + (style . dashed-line) (meta . ((class . Spanner) - (interfaces . (font-interface - text-interface + (interfaces . (dynamic-interface + dynamic-text-spanner-interface + font-interface + line-interface line-spanner-interface + spanner-interface + text-interface)))))) + + + (Episema + . ( + (bound-details . ((left . ((Y . 0) + (padding . 0) + (attach-dir . ,LEFT) + )) + (right . ((Y . 0) + (padding . 0) + (attach-dir . ,RIGHT) + )) + )) + (direction . ,UP) + (left-bound-info . ,ly:line-spanner::calc-left-bound-info) + (quantize-position . #t) + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (side-axis . ,Y) + (stencil . ,ly:line-spanner::print) + (style . line) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (meta . ((class . Spanner) + (interfaces . (episema-interface + font-interface line-interface - dynamic-interface - dynamic-text-spanner-interface - spanner-interface)))))) + line-spanner-interface + side-position-interface)))))) + - (Fingering . ( ;; sync with TextScript (?) - (padding . 0.5) (avoid-slur . around) - (slur-padding . 0.2) - (staff-padding . 0.5) + (cross-staff . ,ly:side-position-interface::calc-cross-staff) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaText) + (font-size . -5) ; don't overlap when next to heads. + (padding . 0.5) + (positioning-done . ,ly:script-interface::calc-positioning-done) + (script-priority . 100) (self-alignment-X . ,CENTER) (self-alignment-Y . ,CENTER) - (script-priority . 100) + (slur-padding . 0.2) + (staff-padding . 0.5) (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) - (positioning-done . ,ly:script-interface::calc-positioning-done) - (cross-staff . ,ly:side-position-interface::calc-cross-staff) - - (text . ,fingering::calc-text) - (font-encoding . fetaNumber) - (font-size . -5) ; don't overlap when next to heads. + (text . ,fingering::calc-text) (meta . ((class . Item) (interfaces . (finger-interface font-interface - text-script-interface - text-interface + self-alignment-interface side-position-interface - self-alignment-interface)))))) + text-interface + text-script-interface)))))) + + (FootnoteItem + . ( + (annotation-balloon . #f) + (annotation-line . #t) + (break-visibility . ,inherit-y-parent-visibility) + (footnote-text . ,(grob::calc-property-by-copy 'footnote-text)) + (stencil . ,ly:balloon-interface::print) + (text . ,(grob::calc-property-by-copy 'text)) + (Y-extent . #f) + (X-offset . ,(grob::calc-property-by-copy 'X-offset)) + (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) + (meta . ((class . Item) + (interfaces . (balloon-interface + footnote-interface + font-interface + text-interface)))))) + + (FootnoteSpanner + . ( + (annotation-balloon . #f) + (annotation-line . #t) + (footnote-text . ,(grob::calc-property-by-copy 'footnote-text)) + (spanner-placement . ,LEFT) + (stencil . ,ly:balloon-interface::print-spanner) + (text . ,(grob::calc-property-by-copy 'text)) + (Y-extent . #f) + (X-offset . ,(grob::calc-property-by-copy 'X-offset)) + (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) + (meta . ((class . Spanner) + (interfaces . (balloon-interface + footnote-interface + footnote-spanner-interface + font-interface + text-interface)))))) (FretBoard - . ((stencil . ,fret-board::calc-stencil) + . ( + (after-line-breaking . ,ly:chord-name::after-line-breaking) (fret-diagram-details . ((finger-code . below-string))) + (stencil . ,fret-board::calc-stencil) + (extra-spacing-height . (0.2 . -0.2)) (meta . ((class . Item) - (interfaces . (fret-diagram-interface - font-interface)))))) + (interfaces . (chord-name-interface + font-interface + fret-diagram-interface + rhythmic-grob-interface)))))) (Glissando . ( - (style . line) - (gap . 0.5) - (zigzag-width . 0.75) - (X-extent . #f) - (Y-extent . #f) + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) (bound-details . ((right . ((attach-dir . ,CENTER) (padding . 1.5) )) @@ -744,216 +934,231 @@ (padding . 1.5) )) )) - (stencil . ,ly:line-spanner::print) + (gap . 0.5) (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) + (stencil . ,ly:line-spanner::print) + (style . line) + (X-extent . #f) + (Y-extent . #f) + (zigzag-width . 0.75) (meta . ((class . Spanner) - (interfaces . (line-interface - unbreakable-spanner-interface - line-spanner-interface)))))) + (interfaces . (glissando-interface + line-interface + line-spanner-interface + unbreakable-spanner-interface)))))) (GraceSpacing . ( (common-shortest-duration . ,grace-spacing::calc-shortest-duration) - (spacing-increment . 0.8) (shortest-duration-space . 1.6) + (spacing-increment . 0.8) (meta . ((class . Spanner) (interfaces . (grace-spacing-interface spacing-options-interface spanner-interface)))))) - (GridPoint - . ( - (X-extent . (0 . 0)) - (Y-extent . (0 . 0)) - (meta . ((class . Item) - (interfaces . (grid-point-interface)))))) - (GridLine . ( - (X-extent . ,ly:grid-line-interface::width) - (stencil . ,ly:grid-line-interface::print) + (layer . 0) (self-alignment-X . ,CENTER) + (stencil . ,ly:grid-line-interface::print) + (X-extent . ,ly:grid-line-interface::width) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) - (layer . 0) (meta . ((class . Item) - (interfaces . (self-alignment-interface - grid-line-interface)))))) + (interfaces . (grid-line-interface + self-alignment-interface)))))) + + (GridPoint + . ( + (X-extent . (0 . 0)) + (Y-extent . (0 . 0)) + (meta . ((class . Item) + (interfaces . (grid-point-interface)))))) (Hairpin . ( - (stencil . ,ly:hairpin::print) - (springs-and-rods . ,ly:spanner::set-spacing-rods) - (after-line-breaking . ,ly:hairpin::after-line-breaking) - (grow-direction . ,hairpin::calc-grow-direction) + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) + (bound-padding . 1.0) (circled-tip . #f) - (to-barline . #t) - (thickness . 1.0) + (grow-direction . ,hairpin::calc-grow-direction) (height . 0.6666) (minimum-length . 2.0) - (bound-padding . 1.0) (self-alignment-Y . ,CENTER) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:hairpin::print) + (thickness . 1.0) + (to-barline . #t) (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self) (meta . ((class . Spanner) - (interfaces . (hairpin-interface + (interfaces . (dynamic-interface + hairpin-interface line-interface self-alignment-interface - dynamic-interface spanner-interface)))))) (HorizontalBracket . ( - (thickness . 1.0) - (stencil . ,ly:horizontal-bracket::print) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (bracket-flare . (0.5 . 0.5)) (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) - - (padding . 0.2) - (staff-padding . 0.2) (direction . ,DOWN) + (padding . 0.2) (side-axis . ,Y) - (bracket-flare . (0.5 . 0.5)) + (staff-padding . 0.2) + (stencil . ,ly:horizontal-bracket::print) + (thickness . 1.0) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) (interfaces . (horizontal-bracket-interface - side-position-interface line-interface + side-position-interface spanner-interface)))))) (InstrumentName . ( - (padding . 0.3) - (stencil . ,ly:system-start-text::print) - (X-offset . ,ly:side-position-interface::x-aligned-side) (direction . ,LEFT) - (self-alignment-Y . ,CENTER) + (padding . 0.3) (self-alignment-X . ,CENTER) + (self-alignment-Y . ,CENTER) + (stencil . ,system-start-text::print) + (X-offset . ,system-start-text::calc-x-offset) + (Y-offset . ,system-start-text::calc-y-offset) (meta . ((class . Spanner) - (interfaces . (system-start-text-interface - side-position-interface + (interfaces . (font-interface self-alignment-interface - font-interface)))))) + side-position-interface + system-start-text-interface)))))) (InstrumentSwitch . ( + (direction . ,UP) + (extra-spacing-width . (+inf.0 . -inf.0)) + (outside-staff-priority . 500) (padding . 0.5) + (self-alignment-X . ,LEFT) + (side-axis . ,Y) + (staff-padding . 0.5) (stencil . ,ly:text-interface::print) - (Y-offset . ,ly:side-position-interface::y-aligned-side) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) - (staff-padding . 0.5) - (direction . ,UP) - (side-axis . ,Y) - (self-alignment-X . ,LEFT) - (outside-staff-priority . 500) - (extra-spacing-width . (+inf.0 . -inf.0)) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (side-position-interface + (interfaces . (font-interface self-alignment-interface - text-interface - font-interface)))))) + side-position-interface + text-interface)))))) + - (KeyCancellation . ( - (stencil . ,ly:key-signature-interface::print) + (break-align-symbol . key-cancellation) + (break-visibility . ,begin-of-line-invisible) (glyph-name-alist . ,cancellation-glyph-name-alist) + (non-musical . #t) (space-alist . ( (time-signature . (extra-space . 1.25)) (staff-bar . (extra-space . 0.6)) (key-signature . (extra-space . 0.5)) + (cue-clef . (extra-space . 0.5)) (right-edge . (extra-space . 0.5)) (first-note . (fixed-space . 2.5)))) + (stencil . ,ly:key-signature-interface::print) + (extra-spacing-width . (0.0 . 0.5)) (Y-offset . ,ly:staff-symbol-referencer::callback) - (break-align-symbol . key-cancellation) - (break-visibility . ,begin-of-line-invisible) - (non-musical . #t) (meta . ((class . Item) - (interfaces . (key-cancellation-interface - key-signature-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface font-interface - break-aligned-interface)))))) + key-cancellation-interface + key-signature-interface + staff-symbol-referencer-interface)))))) (KeySignature . ( - (stencil . ,ly:key-signature-interface::print) (avoid-slur . inside) + (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . key-signature) + (break-visibility . ,begin-of-line-visible) (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (non-musical . #t) (space-alist . ( (time-signature . (extra-space . 1.15)) (staff-bar . (extra-space . 1.1)) + (cue-clef . (extra-space . 0.5)) (right-edge . (extra-space . 0.5)) (first-note . (fixed-space . 2.5)))) + (stencil . ,ly:key-signature-interface::print) + (extra-spacing-width . (0.0 . 0.5)) (Y-offset . ,ly:staff-symbol-referencer::callback) - (break-align-symbol . key-signature) - (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) - (break-visibility . ,begin-of-line-visible) - (non-musical . #t) (meta . ((class . Item) - (interfaces . (key-signature-interface - staff-symbol-referencer-interface + (interfaces . (break-aligned-interface font-interface - break-aligned-interface)))))) - - + key-signature-interface + staff-symbol-referencer-interface)))))) + + (LaissezVibrerTie . ( - (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) + (direction . ,ly:tie::calc-direction) (head-direction . ,LEFT) + (stencil . ,laissez-vibrer::print) (thickness . 1.0) + (extra-spacing-height . (-0.5 . 0.5)) (meta . ((class . Item) (interfaces . (semi-tie-interface)))))) (LaissezVibrerTieColumn . ( + (head-direction . ,ly:semi-tie-column::calc-head-direction) + (positioning-done . ,ly:semi-tie-column::calc-positioning-done) (X-extent . #f) (Y-extent . #f) - (head-direction . ,LEFT) - (positioning-done . ,ly:semi-tie-column::calc-positioning-done) (meta . ((class . Item) (interfaces . (semi-tie-column-interface)))))) (LedgerLineSpanner . ( + (layer . 0) + (length-fraction . 0.25) + (minimum-length-fraction . 0.25) (springs-and-rods . ,ly:ledger-line-spanner::set-spacing-rods) (stencil . ,ly:ledger-line-spanner::print) (X-extent . #f) (Y-extent . #f) - (minimum-length-fraction . 0.25) - (length-fraction . 0.25) - (layer . 0) (meta . ((class . Spanner) (interfaces . (ledger-line-spanner-interface)))))) (LeftEdge . ( - (break-align-symbol . left-edge) (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) - (X-extent . (0 . 0)) - (non-musical . #t) + (break-align-symbol . left-edge) (break-visibility . ,center-invisible) + (non-musical . #t) + (extra-spacing-height . (+inf.0 . -inf.0)) (space-alist . ( - (custos . (extra-space . 0.0)) (ambitus . (extra-space . 2.0)) - (time-signature . (extra-space . 1.0)) - (staff-bar . (extra-space . 0.0)) (breathing-sign . (minimum-space . 0.0)) + (cue-end-clef . (extra-space . 0.8)) (clef . (extra-space . 0.8)) + (cue-clef . (extra-space . 0.8)) + (staff-bar . (extra-space . 0.0)) + (key-cancellation . (extra-space . 0.0)) + (key-signature . (extra-space . 0.8)) + (time-signature . (extra-space . 1.0)) + (custos . (extra-space . 0.0)) (first-note . (fixed-space . 2.0)) (right-edge . (extra-space . 0.0)) - (key-signature . (extra-space . 0.0)) - (key-cancellation . (extra-space . 0.0)) )) + (X-extent . (0 . 0)) (meta . ((class . Item) (interfaces . (break-aligned-interface)))))) @@ -962,89 +1167,94 @@ ;; ugh. A ligature bracket is totally different from ;; a tuplet bracket. - (padding . 2.0) - (thickness . 1.6) - (edge-height . (0.7 . 0.7)) - (shorten-pair . (-0.2 . -0.2)) + (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) + (control-points . ,ly:tuplet-bracket::calc-control-points) (direction . ,UP) + (edge-height . (0.7 . 0.7)) + (padding . 2.0) (positions . ,ly:tuplet-bracket::calc-positions) - (stencil . ,ly:tuplet-bracket::print) + (shorten-pair . (-0.2 . -0.2)) (staff-padding . 0.25) - (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) - (control-points . ,ly:tuplet-bracket::calc-control-points) + (stencil . ,ly:tuplet-bracket::print) + (thickness . 1.6) (meta . ((class . Spanner) (interfaces . (line-interface tuplet-bracket-interface)))))) (LyricExtender . ( + (minimum-length . 1.5) (stencil . ,ly:lyric-extender::print) (thickness . 0.8) ; line-thickness - (minimum-length . 1.5) (Y-extent . (0 . 0)) (meta . ((class . Spanner) - (interfaces . (lyric-interface - lyric-extender-interface)))))) + (interfaces . (lyric-extender-interface + lyric-interface)))))) (LyricHyphen . ( - (thickness . 1.3) - (height . 0.42) + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) (dash-period . 10.0) + (height . 0.42) (length . 0.66) - (minimum-length . 0.3) (minimum-distance . 0.1) + (minimum-length . 0.3) (padding . 0.07) (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) (stencil . ,ly:lyric-hyphen::print) + (thickness . 1.3) (Y-extent . (0 . 0)) (meta . ((class . Spanner) - (interfaces . (lyric-interface - font-interface + (interfaces . (font-interface lyric-hyphen-interface + lyric-interface spanner-interface)))))) (LyricSpace - . ((minimum-distance . 0.45) - (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) + . ( + (minimum-distance . 0.45) (padding . 0.0) - (Y-extent . #f) + (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods) (X-extent . #f) + (Y-extent . #f) (meta . ((class . Spanner) - (interfaces . (spanner-interface - lyric-hyphen-interface)))))) - + (interfaces . (lyric-hyphen-interface + spanner-interface)))))) + (LyricText . ( - (stencil . ,lyric-text::print) - (text . ,(grob::calc-property-by-copy 'text)) - (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent) + (extra-spacing-width . (0.0 . 0.0)) + ;; Recede in height for purposes of note spacing, + ;; so notes in melismata can be freely spaced above lyrics + (extra-spacing-height . (0.2 . -0.2)) + (font-series . medium) + (font-size . 1.0) (self-alignment-X . ,CENTER) + (stencil . ,lyric-text::print) + (text . ,(grob::calc-property-by-copy 'text)) (word-space . 0.6) - (font-series . bold-narrow) - (font-size . 1.0) - (extra-spacing-width . (0.0 . 0.0)) + (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent) (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface + (interfaces . (font-interface lyric-syllable-interface + rhythmic-grob-interface self-alignment-interface - text-interface - font-interface)))))) + text-interface)))))) (MeasureGrouping . ( - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (stencil . ,ly:measure-grouping::print) - (padding . 2) (direction . ,UP) - (thickness . 1) (height . 2.0) + (padding . 2) + (side-axis . ,Y) (staff-padding . 3) + (stencil . ,ly:measure-grouping::print) + (thickness . 1) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (side-position-interface - measure-grouping-interface)))))) + (interfaces . (measure-grouping-interface + side-position-interface)))))) (MelodyItem . ( @@ -1054,49 +1264,68 @@ (MensuralLigature . ( - (thickness . 1.4) - (flexa-width . 2.0) (stencil . ,ly:mensural-ligature::print) + (thickness . 1.4) (meta . ((class . Spanner) - (interfaces . (mensural-ligature-interface - font-interface)))))) + (interfaces . (font-interface + mensural-ligature-interface)))))) (MetronomeMark . ( - (stencil . ,ly:text-interface::print) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff) + (break-visibility . ,end-of-line-invisible) (direction . ,UP) - (padding . 0.8) - (side-axis . ,Y) (extra-spacing-width . (+inf.0 . -inf.0)) (outside-staff-priority . 1000) + (padding . 0.8) + (side-axis . ,Y) + (stencil . ,ly:text-interface::print) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (X-offset . ,(ly:make-simple-closure + `(,+ + ,(ly:make-simple-closure + (list ly:break-alignable-interface::self-align-callback)) + ,(ly:make-simple-closure + (list ly:self-alignment-interface::x-aligned-on-self))))) + (self-alignment-X . ,LEFT) + (break-align-symbols . (time-signature)) + (non-break-align-symbols . (multi-measure-rest-interface)) (meta . ((class . Item) - (interfaces . (text-interface - side-position-interface + (interfaces . (break-alignable-interface font-interface - metronome-mark-interface)))))) + metronome-mark-interface + self-alignment-interface + side-position-interface + text-interface)))))) (MultiMeasureRest . ( - (stencil . ,ly:multi-measure-rest::print) - (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods) - (Y-offset . ,ly:staff-symbol-referencer::callback) - (staff-position . 0) (expand-limit . 10) - (thick-thickness . 6.6) (hair-thickness . 2.0) (padding . 1) + (spacing-pair . (break-alignment . break-alignment)) + (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods) + (staff-position . 0) + (stencil . ,ly:multi-measure-rest::print) + (thick-thickness . 6.6) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Spanner) - (interfaces . (multi-measure-rest-interface + (interfaces . (font-interface multi-measure-interface + multi-measure-rest-interface rest-interface - font-interface staff-symbol-referencer-interface)))))) (MultiMeasureRestNumber . ( (bound-padding . 2.0) + (direction . ,UP) + (font-encoding . fetaText) + (padding . 0.4) + (self-alignment-X . ,CENTER) + (side-axis . ,Y) (springs-and-rods . ,ly:multi-measure-rest::set-text-rods) + (staff-padding . 0.4) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1105,21 +1334,20 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-centered-on-y-parent))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (padding . 0.4) - (staff-padding . 0.4) - (font-encoding . fetaNumber) (meta . ((class . Spanner) - (interfaces . (side-position-interface + (interfaces . (font-interface multi-measure-interface self-alignment-interface - font-interface + side-position-interface text-interface)))))) (MultiMeasureRestText . ( + (direction . ,UP) + (outside-staff-priority . 450) + (padding . 0.2) + (self-alignment-X . ,CENTER) + (staff-padding . 0.25) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1128,16 +1356,11 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (padding . 0.2) - (staff-padding . 0.25) - (outside-staff-priority . 450) (meta . ((class . Spanner) - (interfaces . (side-position-interface + (interfaces . (font-interface multi-measure-interface self-alignment-interface - font-interface + side-position-interface text-interface)))))) @@ -1146,194 +1369,198 @@ (allow-loose-spacing . #t) (axes . (,X)) (before-line-breaking . ,ly:paper-column::before-line-breaking) - (X-extent . ,ly:axis-group-interface::width) + (full-measure-extra-space . 1.0) (horizontal-skylines . ,ly:separation-item::calc-skylines) + ;; sufficient padding to prevent ledger lines from moving over/under + (skyline-vertical-padding . 0.6) ;; (stencil . ,ly:paper-column::print) - - (non-musical . #t) + + (keep-inside-line . #t) (line-break-permission . allow) + (non-musical . #t) (page-break-permission . allow) - (full-measure-extra-space . 1.0) ;; debugging stuff: print column number. ;; (font-size . -6) (font-name . "sans") (Y-extent . #f) + (X-extent . ,ly:axis-group-interface::width) (meta . ((class . Paper_column) - (interfaces . (paper-column-interface - axis-group-interface + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + font-interface + paper-column-interface separation-item-interface - spaceable-grob-interface - font-interface)))))) + spaceable-grob-interface)))))) (NoteCollision . ( (axes . (,X ,Y)) + (positioning-done . ,ly:note-collision-interface::calc-positioning-done) + (prefer-dotted-right . #t) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) - (prefer-dotted-right . #t) - (positioning-done . ,ly:note-collision-interface::calc-positioning-done) (meta . ((class . Item) - (interfaces . (note-collision-interface - axis-group-interface)))))) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + note-collision-interface)))))) (NoteColumn . ( (axes . (,X ,Y)) + (horizontal-skylines . ,ly:separation-item::calc-skylines) + (skyline-vertical-padding . 0.15) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) - (horizontal-skylines . ,ly:separation-item::calc-skylines) (meta . ((class . Item) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) (interfaces . (axis-group-interface - separation-item-interface - note-column-interface)))))) + note-column-interface + separation-item-interface)))))) (NoteHead . ( - (stencil . ,ly:note-head::print) + (flexa-width . 2.0) (duration-log . ,note-head::calc-duration-log) - (stem-attachment . ,ly:note-head::calc-stem-attachment) + (extra-spacing-height . ,ly:note-head::include-ledger-line-height) (glyph-name . ,note-head::calc-glyph-name) - (Y-offset . ,ly:staff-symbol-referencer::callback) + (ligature-flexa . #f) + (stem-attachment . ,ly:note-head::calc-stem-attachment) + (stencil . ,ly:note-head::print) (X-offset . ,ly:note-head::stem-x-shift) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface - rhythmic-head-interface - font-interface - note-head-interface - ledgered-interface - staff-symbol-referencer-interface + (interfaces . (font-interface gregorian-ligature-interface + ledgered-interface + ligature-head-interface mensural-ligature-interface + note-head-interface + rhythmic-grob-interface + rhythmic-head-interface + staff-symbol-referencer-interface vaticana-ligature-interface)))))) + (NoteName + . ( + (stencil . ,ly:text-interface::print) + (meta . ((class . Item) + (interfaces . (font-interface + note-name-interface + text-interface)))))) + (NoteSpacing . ( - (stem-spacing-correction . 0.5) - (same-direction-correction . 0.25) - (space-to-barline . #t) ;; Changed this from 0.75. ;; If you ever change this back, please document! --hwn (knee-spacing-correction . 1.0) + (same-direction-correction . 0.25) + (space-to-barline . #t) + (stem-spacing-correction . 0.5) (meta . ((class . Item) - (interfaces . (spacing-interface - note-spacing-interface)))))) - - (NoteName - . ( - (stencil . ,ly:text-interface::print) - (meta . ((class . Item) - (interfaces . (note-name-interface - text-interface - font-interface)))))) + (interfaces . (note-spacing-interface + spacing-interface)))))) (OctavateEight . ( + (break-visibility . ,inherit-x-parent-visibility) + (font-shape . italic) + (font-size . -4) (self-alignment-X . ,CENTER) - (break-visibility . ,begin-of-line-visible) + (staff-padding . 0.2) + (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self)) ,(ly:make-simple-closure - (list ly:self-alignment-interface::centered-on-x-parent))))) + (list ly:self-alignment-interface::centered-on-x-parent))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (stencil . ,ly:text-interface::print) - (font-shape . italic) - (staff-padding . 0.2) - (font-size . -4) (meta . ((class . Item) - (interfaces . (text-interface + (interfaces . (font-interface self-alignment-interface side-position-interface - font-interface)))))) + text-interface)))))) (OttavaBracket . ( - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (stencil . ,ly:ottava-bracket::print) + (dash-fraction . 0.3) + (direction . ,UP) + (edge-height . (0 . 1.2)) (font-shape . italic) + (minimum-length . 1.0) + (outside-staff-priority . 400) + (padding . 0.5) (shorten-pair . (0.0 . -0.6)) (staff-padding . 1.0) - (padding . 0.5) - (minimum-length . 1.0) + (stencil . ,ly:ottava-bracket::print) (style . dashed-line) - (dash-fraction . 0.3) - (edge-height . (0 . 1.2)) - (direction . ,UP) - (outside-staff-priority . 400) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (ottava-bracket-interface + (interfaces . (font-interface horizontal-bracket-interface line-interface + ottava-bracket-interface side-position-interface - font-interface text-interface)))))) (PaperColumn . ( - (axes . (,X)) (allow-loose-spacing . #t) + (axes . (,X)) (before-line-breaking . ,ly:paper-column::before-line-breaking) (horizontal-skylines . ,ly:separation-item::calc-skylines) + (keep-inside-line . #t) ;; (stencil . ,ly:paper-column::print) (X-extent . ,ly:axis-group-interface::width) - + ;; debugging ;; (font-size . -6) (font-name . "sans") (Y-extent . #f) (meta . ((class . Paper_column) - (interfaces . (paper-column-interface + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + font-interface + paper-column-interface separation-item-interface - axis-group-interface - spaceable-grob-interface - font-interface)))))) + spaceable-grob-interface)))))) (ParenthesesItem - . ((stencil . ,parentheses-item::print) - (stencils . ,parentheses-item::calc-parenthesis-stencils) + . ( (font-size . -6) (padding . 0.2) + (stencil . ,parentheses-item::print) + (stencils . ,parentheses-item::calc-parenthesis-stencils) (meta . ((class . Item) - (interfaces . (parentheses-interface font-interface)))))) - - (HarmonicParenthesesItem - . ((stencil . ,parentheses-item::print) - (padding . 0) - (stencils . ,parentheses-item::calc-angled-bracket-stencils) - (meta . ((class . Item) - (interfaces . (parentheses-interface font-interface)))))) - - (PhrasingSlur - . ((details . ,default-slur-details) - (control-points . ,ly:slur::calc-control-points) - (direction . ,ly:slur::calc-direction) - (springs-and-rods . ,ly:spanner::set-spacing-rods) - (Y-extent . ,ly:slur::height) - (stencil . ,ly:slur::print) - (thickness . 1.1) - (minimum-length . 1.5) - (height-limit . 2.0) - (ratio . 0.333) - (cross-staff . ,ly:slur::calc-cross-staff) - (meta . ((class . Spanner) - (interfaces . (slur-interface)))))) + (interfaces . (font-interface + parentheses-interface)))))) (PercentRepeat . ( + (dot-negative-kern . 0.75) + (font-encoding . fetaMusic) + (slope . 1.0) + (spacing-pair . (break-alignment . staff-bar)) (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods) (stencil . ,ly:multi-measure-rest::percent) - (slope . 1.0) (thickness . 0.48) - (dot-negative-kern . 0.75) - (font-encoding . fetaMusic) (meta . ((class . Spanner) - (interfaces . (multi-measure-rest-interface - font-interface + (interfaces . (font-interface + multi-measure-rest-interface percent-repeat-interface)))))) (PercentRepeatCounter . ( + (direction . ,UP) + (font-encoding . fetaText) + (font-size . -2) + (padding . 0.2) + (self-alignment-X . ,CENTER) + (staff-padding . 0.25) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1342,38 +1569,60 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (padding . 0.2) - (staff-padding . 0.25) - (font-size . -2) - (font-encoding . fetaNumber) (meta . ((class . Spanner) - (interfaces . (side-position-interface - self-alignment-interface + (interfaces . (font-interface percent-repeat-interface - font-interface + self-alignment-interface + side-position-interface text-interface)))))) + (PhrasingSlur + . ( + (control-points . ,ly:slur::calc-control-points) + (cross-staff . ,ly:slur::calc-cross-staff) + (details . ,default-slur-details) + (direction . ,ly:slur::calc-direction) + (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) + (Y-extent . ,ly:slur::height) + (meta . ((class . Spanner) + (interfaces . (slur-interface)))))) + ;; an example of a text spanner (PianoPedalBracket . ( - (stencil . ,ly:piano-pedal-bracket::print) - (style . line) (bound-padding . 1.0) - (direction . ,DOWN) (bracket-flare . (0.5 . 0.5)) + (direction . ,DOWN) (edge-height . (1.0 . 1.0)) (shorten-pair . (0.0 . 0.0)) + (stencil . ,ly:piano-pedal-bracket::print) + (style . line) (thickness . 1.0) (meta . ((class . Spanner) (interfaces . (line-interface - piano-pedal-interface - piano-pedal-bracket-interface)))))) + piano-pedal-bracket-interface + piano-pedal-interface)))))) (RehearsalMark . ( + (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff) + (baseline-skip . 2) + (break-align-symbols . (staff-bar clef)) + (break-visibility . ,end-of-line-invisible) + (direction . ,UP) + (extra-spacing-width . (+inf.0 . -inf.0)) + (font-size . 2) + (non-musical . #t) + (outside-staff-priority . 1500) + (padding . 0.8) + (self-alignment-X . ,CENTER) (stencil . ,ly:text-interface::print) (X-offset . ,(ly:make-simple-closure `(,+ @@ -1382,72 +1631,63 @@ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))))) (Y-offset . ,ly:side-position-interface::y-aligned-side) - (extra-spacing-width . (+inf.0 . -inf.0)) - (self-alignment-X . ,CENTER) - (direction . ,UP) - (non-musical . #t) - (font-size . 2) - (baseline-skip . 2) - (break-visibility . ,end-of-line-invisible) - (break-align-symbols . (staff-bar clef)) - (padding . 0.8) - (outside-staff-priority . 1500) (meta . ((class . Item) - (interfaces . (text-interface - side-position-interface - break-alignable-interface + (interfaces . (break-alignable-interface font-interface mark-interface - self-alignment-interface)))))) + self-alignment-interface + side-position-interface + text-interface)))))) (RepeatSlash . ( + (slash-negative-kern . 0.85) + (slope . 1.7) (stencil . ,ly:percent-repeat-item-interface::beat-slash) (thickness . 0.48) - (slope . 1.7) (meta . ((class . Item) - (interfaces . (rhythmic-grob-interface - percent-repeat-interface - percent-repeat-item-interface)))))) + (interfaces . (percent-repeat-interface + percent-repeat-item-interface + rhythmic-grob-interface)))))) (RepeatTie . ( - (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) - (thickness . 1.0) + (direction . ,ly:tie::calc-direction) (head-direction . ,RIGHT) + (stencil . ,ly:tie::print) + (thickness . 1.0) + (extra-spacing-height . (-0.5 . 0.5)) (meta . ((class . Item) (interfaces . (semi-tie-interface)))))) (RepeatTieColumn . ( - (X-extent . #f) - (Y-extent . #f) (direction . ,ly:tie::calc-direction) (head-direction . ,ly:semi-tie-column::calc-head-direction) - (positioning-done . ,ly:semi-tie-column::calc-positioning-done) + (X-extent . #f) + (Y-extent . #f) (meta . ((class . Item) (interfaces . (semi-tie-column-interface)))))) (Rest . ( - (stencil . ,ly:rest::print) + (cross-staff . ,ly:rest::calc-cross-staff) (duration-log . ,stem::calc-duration-log) + (minimum-distance . 0.25) + (stencil . ,ly:rest::print) (X-extent . ,ly:rest::width) (Y-extent . ,ly:rest::height) (Y-offset . ,ly:rest::y-offset-callback) - (minimum-distance . 0.25) - (cross-staff . ,ly:rest::calc-cross-staff) (meta . ((class . Item) (interfaces . (font-interface - rhythmic-head-interface + rest-interface rhythmic-grob-interface - staff-symbol-referencer-interface - rest-interface)))))) + rhythmic-head-interface + staff-symbol-referencer-interface)))))) (RestCollision . ( @@ -1459,23 +1699,23 @@ (Script . ( - ;; don't set direction here: it breaks staccato. + (add-stem-support . #t) + (cross-staff . ,ly:script-interface::calc-cross-staff) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaMusic) + (positioning-done . ,ly:script-interface::calc-positioning-done) + (side-axis . ,Y) ;; padding set in script definitions. (staff-padding . 0.25) - (X-offset . ,script-interface::calc-x-offset) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) (stencil . ,ly:script-interface::print) - (direction . ,ly:script-interface::calc-direction) - (positioning-done . ,ly:script-interface::calc-positioning-done) - (font-encoding . fetaMusic) - (cross-staff . ,ly:script-interface::calc-cross-staff) + (X-offset . ,script-interface::calc-x-offset) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (script-interface - side-position-interface - font-interface)))))) + (interfaces . (font-interface + script-interface + side-position-interface)))))) (ScriptColumn . ( @@ -1489,96 +1729,81 @@ (meta . ((class . Item) (interfaces . (script-column-interface)))))) - (SeparationItem - . ( - (avoid-slur . inside) - (X-extent . ,ly:axis-group-interface::width) - (Y-extent . ,ly:axis-group-interface::height) - (horizontal-skylines . ,ly:separation-item::calc-skylines) - (stencil . ,ly:separation-item::print) - (meta . ((class . Item) - (interfaces . (separation-item-interface)))))) - (Slur . ( - (details . ,default-slur-details) + (avoid-slur . inside) (control-points . ,ly:slur::calc-control-points) + (cross-staff . ,ly:slur::calc-cross-staff) + (details . ,default-slur-details) (direction . ,ly:slur::calc-direction) - (springs-and-rods . ,ly:spanner::set-spacing-rods) - (Y-extent . ,ly:slur::height) - (stencil . ,ly:slur::print) - (thickness . 1.2) + (height-limit . 2.0) (line-thickness . 0.8) (minimum-length . 1.5) - (height-limit . 2.0) (ratio . 0.25) - (avoid-slur . inside) - (cross-staff . ,ly:slur::calc-cross-staff) + (spanner-id . "") + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:slur::print) + (thickness . 1.2) + (Y-extent . ,ly:slur::height) (meta . ((class . Spanner) (interfaces . (slur-interface)))))) (SostenutoPedal . ( - (stencil . ,ly:text-interface::print) (direction . ,RIGHT) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (extra-spacing-width . (+inf.0 . -inf.0)) - (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner (font-shape . italic) + (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner (self-alignment-X . ,CENTER) + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) - (interfaces . (text-interface - self-alignment-interface + (interfaces . (font-interface piano-pedal-script-interface - font-interface)))))) + self-alignment-interface + text-interface)))))) (SostenutoPedalLineSpanner . ( (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (direction . ,DOWN) + (minimum-space . 1.0) (outside-staff-priority . 1000) + (padding . 1.2) (side-axis . ,Y) (staff-padding . 1.0) - (padding . 1.2) - (minimum-space . 1.0) - (direction . ,DOWN) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (piano-pedal-interface - axis-group-interface + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + piano-pedal-interface side-position-interface)))))) (SpacingSpanner . ( - (springs-and-rods . ,ly:spacing-spanner::set-springs) - (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration) (average-spacing-wishes . #t) + (base-shortest-duration . ,(ly:make-moment 3 16)) + (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration) (shortest-duration-space . 2.0) (spacing-increment . 1.2) - - (base-shortest-duration . ,(ly:make-moment 3 16)) + (springs-and-rods . ,ly:spacing-spanner::set-springs) (meta . ((class . Spanner) (interfaces . (spacing-options-interface spacing-spanner-interface)))))) (SpanBar . ( + (allow-span-bar . #t) + (bar-extent . ,ly:axis-group-interface::height) + (before-line-breaking . ,ly:span-bar::before-line-breaking) (break-align-symbol . staff-bar) - (Y-extent . ,ly:axis-group-interface::height) (cross-staff . #t) - (layer . 0) - (non-musical . #t) - (stencil . ,ly:span-bar::print) - (bar-size . ,ly:span-bar::calc-bar-size) - (bar-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:span-bar::width) (glyph-name . ,ly:span-bar::calc-glyph-name) - (before-line-breaking . ,ly:span-bar::before-line-breaking) - (allow-span-bar . #t) - - ;; ugh duplication! + ;; ugh duplication! (these 4 properties were copied from Barline) ;; ;; Ross. page 151 lists other values, we opt for a leaner look ;; @@ -1586,24 +1811,31 @@ (thin-kern . 3.0) (hair-thickness . 1.6) (thick-thickness . 6.0) - (meta . ((class . Item) - (interfaces . (span-bar-interface - font-interface - bar-line-interface)))))) - (StanzaNumber - . ( - (stencil . ,ly:text-interface::print) - (font-series . bold) - (padding . 1.0) - (X-offset . ,ly:side-position-interface::x-aligned-side) - (side-axis . ,X) - (direction . ,LEFT) + (layer . 0) + (non-musical . #t) + (stencil . ,ly:span-bar::print) + (X-extent . ,ly:span-bar::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Item) - (interfaces . (side-position-interface - stanza-number-interface - text-interface - font-interface)))))) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (bar-line-interface + font-interface + span-bar-interface)))))) + + (StaffGrouper + . ( + (staff-staff-spacing . ((basic-distance . 9) + (minimum-distance . 7) + (padding . 1) + (stretchability . 5))) + (staffgroup-staff-spacing . ((basic-distance . 10.5) + (minimum-distance . 8) + (padding . 1) + (stretchability . 9))) + (meta . ((class . Spanner) + (interfaces . (staff-grouper-interface)))))) (StaffSpacing . ( @@ -1612,41 +1844,42 @@ (meta . ((class . Item) (interfaces . (spacing-interface staff-spacing-interface)))))) - + (StaffSymbol . ( - (Y-extent . ,ly:staff-symbol::height) - (stencil . ,ly:staff-symbol::print) - (line-count . 5) - (ledger-line-thickness . (1.0 . 0.1)) (layer . 0) + (ledger-line-thickness . (1.0 . 0.1)) + (line-count . 5) + (stencil . ,ly:staff-symbol::print) + (Y-extent . ,ly:staff-symbol::height) (meta . ((class . Spanner) (interfaces . (staff-symbol-interface)))))) + (StanzaNumber + . ( + (direction . ,LEFT) + (font-series . bold) + (padding . 1.0) + (side-axis . ,X) + (stencil . ,ly:text-interface::print) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (meta . ((class . Item) + (interfaces . (font-interface + side-position-interface + stanza-number-interface + text-interface)))))) + (Stem . ( - (direction . ,ly:stem::calc-direction) - (duration-log . ,stem::calc-duration-log) - (default-direction . ,ly:stem::calc-default-direction) - (stem-end-position . ,ly:stem::calc-stem-end-position) - - (neutral-direction . ,DOWN) - (stem-info . ,ly:stem::calc-stem-info) - (positioning-done . ,ly:stem::calc-positioning-done) - (stencil . ,ly:stem::print) - (X-extent . ,ly:stem::width) - (Y-extent . ,ly:stem::height) - (length . ,ly:stem::calc-length) - (thickness . 1.3) - (cross-staff . ,ly:stem::calc-cross-staff) - (flag . ,ly:stem::calc-flag) (beamlet-default-length . (1.1 . 1.1)) (beamlet-max-length-proportion . (0.75 . 0.75)) + (cross-staff . ,ly:stem::calc-cross-staff) + (default-direction . ,ly:stem::calc-default-direction) (details . ( ;; 3.5 (or 3 measured from note head) is standard length ;; 32nd, 64th, 128th flagged stems should be longer - (lengths . (3.5 3.5 3.5 4.5 5.0 6.0)) + (lengths . (3.5 3.5 3.5 4.25 5.0 6.0)) ;; FIXME. 3.5 yields too long beams (according to Ross and ;; looking at Baerenreiter examples) for a number of common @@ -1673,130 +1906,150 @@ ;; We use the normal minima as minimum for the ideal lengths, ;; and the extreme minima as abolute minimum length. + (direction . ,ly:stem::calc-direction) + (duration-log . ,stem::calc-duration-log) + (flag . ,ly:stem::calc-flag) + (length . ,ly:stem::calc-length) + (neutral-direction . ,DOWN) + (positioning-done . ,ly:stem::calc-positioning-done) + (stem-end-position . ,ly:stem::calc-stem-end-position) + (stem-info . ,ly:stem::calc-stem-info) + (stencil . ,ly:stem::print) + (thickness . 1.3) + (X-extent . ,ly:stem::width) (X-offset . ,ly:stem::offset-callback) + (Y-extent . ,ly:stem::height) (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (stem-interface - font-interface)))))) + (interfaces . (font-interface + stem-interface)))))) (StemTremolo . ( - (Y-extent . ,ly:stem-tremolo::height) - (X-extent . ,ly:stem-tremolo::width) - (stencil . ,ly:stem-tremolo::print) - (slope . ,ly:stem-tremolo::calc-slope) - (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space - (style . ,ly:stem-tremolo::calc-style) (beam-thickness . 0.48) ; staff-space + (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space + (slope . ,ly:stem-tremolo::calc-slope) + (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)))))) (StringNumber . ( - (stencil . ,print-circled-text-callback) - (text . ,string-number::calc-text) + (avoid-slur . around) + (font-encoding . fetaText) + (font-size . -5) ; don't overlap when next to heads. (padding . 0.5) - (staff-padding . 0.5) + (script-priority . 100) (self-alignment-X . ,CENTER) (self-alignment-Y . ,CENTER) - (script-priority . 100) - (avoid-slur . around) - (font-encoding . fetaNumber) - (font-size . -5) ; don't overlap when next to heads. + (staff-padding . 0.5) + (stencil . ,print-circled-text-callback) + (text . ,string-number::calc-text) (meta . ((class . Item) - (interfaces . (string-number-interface - font-interface - text-script-interface - text-interface + (interfaces . (font-interface + self-alignment-interface side-position-interface - self-alignment-interface)))))) - + string-number-interface + text-interface + text-script-interface)))))) + (StrokeFinger . ( - (stencil . ,ly:text-interface::print) - (text . ,stroke-finger::calc-text) (digit-names . #("p" "i" "m" "a" "x")) + (font-shape . italic) + (font-size . -4) ; don't overlap when next to heads. (padding . 0.5) - (staff-padding . 0.5) + (script-priority . 100) (self-alignment-X . ,CENTER) (self-alignment-Y . ,CENTER) - (script-priority . 100) - (font-shape . italic) - (font-size . -4) ; don't overlap when next to heads. + (staff-padding . 0.5) + (stencil . ,ly:text-interface::print) + (text . ,stroke-finger::calc-text) (meta . ((class . Item) - (interfaces . (stroke-finger-interface - font-interface - text-script-interface - text-interface + (interfaces . (font-interface + self-alignment-interface side-position-interface - self-alignment-interface)))))) + stroke-finger-interface + text-interface + text-script-interface)))))) (SustainPedal . ( - (extra-spacing-width . (+inf.0 . -inf.0)) - (stencil . ,ly:sustain-pedal::print) - (self-alignment-X . ,CENTER) (direction . ,RIGHT) + (extra-spacing-width . (+inf.0 . -inf.0)) (padding . 0.0) ;; padding relative to SustainPedalLineSpanner + (self-alignment-X . ,CENTER) + (stencil . ,ly:sustain-pedal::print) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) - (interfaces . (piano-pedal-interface - text-interface - self-alignment-interface + (interfaces . (font-interface + piano-pedal-interface piano-pedal-script-interface - font-interface)))))) + self-alignment-interface + text-interface)))))) (SustainPedalLineSpanner . ( (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (direction . ,DOWN) + (minimum-space . 1.0) (outside-staff-priority . 1000) - (side-axis . ,Y) (padding . 1.2) + (side-axis . ,Y) (staff-padding . 1.2) - (minimum-space . 1.0) - (direction . ,DOWN) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (piano-pedal-interface - axis-group-interface + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + piano-pedal-interface side-position-interface)))))) (System . ( + (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) (axes . (,X ,Y)) - (X-extent . ,ly:axis-group-interface::width) - (Y-extent . ,ly:axis-group-interface::height) + (skyline-horizontal-padding . 0.5) (vertical-skylines . ,ly:axis-group-interface::calc-skylines) - (max-stretch . ,ly:axis-group-interface::calc-max-stretch) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:system::height) (meta . ((class . System) - (interfaces . (system-interface - axis-group-interface)))))) + (object-callbacks . ((pure-relevant-grobs . ,ly:system::calc-pure-relevant-grobs) + (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common))) + (interfaces . (axis-group-interface + system-interface)))))) - (SystemStartBrace + (SystemStartBar . ( - (style . brace) - (padding . 0.3) - (stencil . ,ly:system-start-delimiter::print) (collapse-height . 5.0) - (X-offset . ,ly:side-position-interface::x-aligned-side) (direction . ,LEFT) - (font-encoding . fetaBraces) + + ;; ugh--hardcoded. + (padding . -0.1) ;; bar must cover rounded ending of staff line. + (stencil . ,ly:system-start-delimiter::print) + (style . bar-line) + (thickness . 1.6) + (X-offset . ,ly:side-position-interface::x-aligned-side) (Y-extent . #f) (meta . ((class . Spanner) - (interfaces . (system-start-delimiter-interface - side-position-interface - font-interface)))))) + (interfaces . (side-position-interface + system-start-delimiter-interface)))))) - (SystemStartSquare + (SystemStartBrace . ( - (Y-extent . #f) - (X-offset . ,ly:side-position-interface::x-aligned-side) + (collapse-height . 5.0) (direction . ,LEFT) + (font-encoding . fetaBraces) + (padding . 0.3) (stencil . ,ly:system-start-delimiter::print) - (style . line-bracket) - (thickness . 1.0) + (style . brace) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (Y-extent . #f) (meta . ((class . Spanner) (interfaces . (font-interface side-position-interface @@ -1804,123 +2057,130 @@ (SystemStartBracket . ( - (Y-extent . #f) - (padding . 0.8) - (X-offset . ,ly:side-position-interface::x-aligned-side) + (collapse-height . 5.0) (direction . ,LEFT) + (padding . 0.8) (stencil . ,ly:system-start-delimiter::print) (style . bracket) - (collapse-height . 5.0) (thickness . 0.45) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (Y-extent . #f) (meta . ((class . Spanner) (interfaces . (font-interface side-position-interface system-start-delimiter-interface)))))) - (SystemStartBar + (SystemStartSquare . ( - (Y-extent . #f) - - ;; ugh--hardcoded. - (padding . -0.1) ;; bar must cover rounded ending of staff line. - (X-offset . ,ly:side-position-interface::x-aligned-side) (direction . ,LEFT) - (style . bar-line) - (collapse-height . 5.0) - (thickness . 1.6) (stencil . ,ly:system-start-delimiter::print) + (style . line-bracket) + (thickness . 1.0) + (X-offset . ,ly:side-position-interface::x-aligned-side) + (Y-extent . #f) (meta . ((class . Spanner) - (interfaces . (side-position-interface + (interfaces . (font-interface + side-position-interface system-start-delimiter-interface)))))) (TabNoteHead . ( - (stencil . ,ly:text-interface::print) - (duration-log . ,note-head::calc-duration-log) - (Y-offset . ,ly:staff-symbol-referencer::callback) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (details . ((cautionary-properties . ((angularity . 0.4) + (half-thickness . 0.075) + (padding . 0) + (procedure . ,parenthesize-stencil) + (width . 0.25))) + (head-offset . 3/5) + (harmonic-properties . ((angularity . 2) + (half-thickness . 0.075) + (padding . 0) + (procedure . ,parenthesize-stencil) + (width . 0.25))) + (repeat-tied-properties . ((note-head-visible . #t) + (parenthesize . #t))) + (tied-properties . ((break-visibility . ,begin-of-line-visible) + (parenthesize . #t))))) + (direction . ,CENTER) + (duration-log . ,note-head::calc-duration-log) + (font-series . bold) (font-size . -2) (stem-attachment . (0.0 . 1.35)) - (font-series . bold) + (stencil . ,tab-note-head::print) + (whiteout . #t) + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (rhythmic-head-interface - font-interface - rhythmic-grob-interface + (interfaces . (font-interface note-head-interface + rhythmic-grob-interface + rhythmic-head-interface staff-symbol-referencer-interface + tab-note-head-interface text-interface)))))) (TextScript . ( - (extra-spacing-width . (+inf.0 . -inf.0)) - (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) + (avoid-slur . around) + (cross-staff . ,ly:script-interface::calc-cross-staff) (direction . ,DOWN) + (extra-spacing-width . (+inf.0 . -inf.0)) + (outside-staff-priority . 450) ;; sync with Fingering ? (padding . 0.5) - (staff-padding . 0.5) - - (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) - (positioning-done . ,ly:script-interface::calc-positioning-done) - (outside-staff-priority . 450) - (avoid-slur . around) - (slur-padding . 0.5) (script-priority . 200) - (cross-staff . ,ly:script-interface::calc-cross-staff) + (side-axis . ,Y) + (slur-padding . 0.5) + (staff-padding . 0.5) + (stencil . ,ly:text-interface::print) ;; todo: add X self alignment? + (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Item) - (interfaces . (text-script-interface - text-interface + (interfaces . (font-interface instrument-specific-markup-interface - side-position-interface self-alignment-interface - font-interface)))))) + side-position-interface + text-interface + text-script-interface)))))) (TextSpanner . ( - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (font-shape . italic) - (style . dashed-line) - (staff-padding . 0.8) - (dash-fraction . 0.2) - (dash-period . 3.0) - (side-axis . ,Y) - (direction . ,UP) - (outside-staff-priority . 350) - - (left-bound-info . ,ly:line-spanner::calc-left-bound-info) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) (bound-details . ((left . ((Y . 0) (padding . 0.25) (attach-dir . ,LEFT) )) + (left-broken . ((end-on-note . #t))) (right . ((Y . 0) (padding . 0.25) )) )) + (dash-fraction . 0.2) + (dash-period . 3.0) + (direction . ,UP) + (font-shape . italic) + (left-bound-info . ,ly:line-spanner::calc-left-bound-info) + (outside-staff-priority . 350) + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (side-axis . ,Y) + (staff-padding . 0.8) (stencil . ,ly:line-spanner::print) + (style . dashed-line) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (line-spanner-interface + (interfaces . (font-interface line-interface - side-position-interface - font-interface)))))) + line-spanner-interface + side-position-interface)))))) (Tie . ( - (control-points . ,ly:tie::calc-control-points) - (springs-and-rods . ,ly:spanner::set-spacing-rods) (avoid-slur . inside) - (direction . ,ly:tie::calc-direction) - (neutral-direction . ,UP) - (stencil . ,ly:tie::print) - (font-size . -6) + (control-points . ,ly:tie::calc-control-points) (details . ( ;; for a full list, see tie-details.cc (ratio . 0.333) @@ -1932,7 +2192,7 @@ (horizontal-distance-penalty-factor . 10) (same-dir-as-stem-penalty . 8) (min-length-penalty-factor . 26) - (tie-tie-collision-distance . 0.45) + (tie-tie-collision-distance . 0.45) (tie-tie-collision-penalty . 25.0) (intra-space-threshold . 1.25) (outer-tie-vertical-distance-symmetry-penalty-factor . 10) @@ -1942,16 +2202,21 @@ (multi-tie-region-size . 3) (single-tie-region-size . 4) (between-length-limit . 1.0))) - - (thickness . 1.2) + + (direction . ,ly:tie::calc-direction) + (font-size . -6) (line-thickness . 0.8) + (neutral-direction . ,UP) + (springs-and-rods . ,ly:spanner::set-spacing-rods) + (stencil . ,ly:tie::print) + (thickness . 1.2) (meta . ((class . Spanner) (interfaces . (tie-interface)))))) (TieColumn . ( - (positioning-done . ,ly:tie-column::calc-positioning-done) (before-line-breaking . ,ly:tie-column::before-line-breaking) + (positioning-done . ,ly:tie-column::calc-positioning-done) (X-extent . #f) (Y-extent . #f) (meta . ((class . Spanner) @@ -1959,263 +2224,275 @@ (TimeSignature . ( - (stencil . ,ly:time-signature::print) - (break-align-symbol . time-signature) + (avoid-slur . inside) (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor) + (break-align-symbol . time-signature) + (break-align-anchor-alignment . ,LEFT) (break-visibility . ,all-visible) - (avoid-slur . inside) (extra-spacing-height . (-1.0 . 1.0)) + (non-musical . #t) (space-alist . ( + (cue-clef . (extra-space . 1.5)) (first-note . (fixed-space . 2.0)) (right-edge . (extra-space . 0.5)) (staff-bar . (minimum-space . 2.0)))) - (non-musical . #t) + (stencil . ,ly:time-signature::print) (style . C) (meta . ((class . Item) - (interfaces . (time-signature-interface - break-aligned-interface - font-interface)))))) - - (TrillSpanner - . ( - (left-bound-info . ,ly:line-spanner::calc-left-bound-info) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) - - (bound-details . ((left . ((text . ,(make-translate-scaled-markup - '(0.0 . -1.0) - (make-musicglyph-markup "scripts.trill"))) - (Y . 0) - (stencil-offset . (-0.5 . 0)) - (padding . 1.5) - (attach-dir . ,CENTER) - ;; this isn't CENTER because the trill glyph's origin - ;; is not centered in its extent; to have the trill - ;; spanner aligned the same as a trill, we need a slight offset - (anchor-alignment . 0.15) - )) - (left-broken . ((end-on-note . #t))) - (right . ((Y . 0))) - )) - - (stencil . ,ly:line-spanner::print) - - (style . trill) - (staff-padding . 1.0) - (padding . 0.5) - (direction . ,UP) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (side-axis . ,Y) - (outside-staff-priority . 50) - (meta . ((class . Spanner) - (interfaces . (line-spanner-interface - line-interface - trill-spanner-interface - side-position-interface - font-interface)))))) + (interfaces . (break-aligned-interface + font-interface + time-signature-interface)))))) (TrillPitchAccidental - . ((X-offset . ,ly:side-position-interface::x-aligned-side) - (padding . 0.2) + . ( (direction . ,LEFT) (font-size . -4) + (glyph-name-alist . ,standard-alteration-glyph-name-alist) + (padding . 0.2) (side-axis . ,X) (stencil . ,ly:accidental-interface::print) + (X-offset . ,ly:side-position-interface::x-aligned-side) (Y-extent . ,ly:accidental-interface::height) - (glyph-name-alist . ,standard-alteration-glyph-name-alist) (meta . ((class . Item) - (interfaces . (trill-pitch-accidental-interface - accidental-interface + (interfaces . (accidental-interface + font-interface + inline-accidental-interface side-position-interface - font-interface)))))) + trill-pitch-accidental-interface)))))) (TrillPitchGroup - . ((X-offset . ,ly:side-position-interface::x-aligned-side) + . ( (axes . (,X)) + (direction . ,RIGHT) (font-size . -4) + (padding . 0.3) + (side-axis . ,X) (stencil . ,parenthesize-elements) (stencils . ,parentheses-item::calc-parenthesis-stencils) - (direction . ,RIGHT) - (side-axis . ,X) - (padding . 0.3) + (X-offset . ,ly:side-position-interface::x-aligned-side) (meta . ((class . Item) - (interfaces . (side-position-interface - parentheses-interface - note-head-interface + (interfaces . (axis-group-interface font-interface - axis-group-interface)))))) + note-head-interface + parentheses-interface + side-position-interface)))))) (TrillPitchHead . ( - (stencil . ,ly:note-head::print) (duration-log . 2) - (Y-offset . ,ly:staff-symbol-referencer::callback) (font-size . -4) + (stencil . ,ly:note-head::print) + (Y-offset . ,ly:staff-symbol-referencer::callback) (meta . ((class . Item) - (interfaces . (rhythmic-head-interface - font-interface - pitched-trill-interface + (interfaces . (font-interface ledgered-interface + pitched-trill-interface + rhythmic-head-interface staff-symbol-referencer-interface)))))) + (TrillSpanner + . ( + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) + (bound-details . ((left . ((text . ,(make-musicglyph-markup "scripts.trill")) + (Y . 0) + (stencil-offset . (-0.5 . -1)) + (padding . 0.5) + (attach-dir . ,CENTER) + )) + (left-broken . ((end-on-note . #t))) + (right . ((Y . 0))) + )) + (direction . ,UP) + (left-bound-info . ,ly:line-spanner::calc-left-bound-info) + (outside-staff-priority . 50) + (padding . 0.5) + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (side-axis . ,Y) + (staff-padding . 1.0) + (stencil . ,ly:line-spanner::print) + (style . trill) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (meta . ((class . Spanner) + (interfaces . (font-interface + line-interface + line-spanner-interface + side-position-interface + trill-spanner-interface)))))) + (TupletBracket . ( - (padding . 1.1) - (thickness . 1.6) + (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) + (control-points . ,ly:tuplet-bracket::calc-control-points) + (cross-staff . ,ly:tuplet-bracket::calc-cross-staff) + (direction . ,ly:tuplet-bracket::calc-direction) (edge-height . (0.7 . 0.7)) - (shorten-pair . (-0.2 . -0.2)) - (staff-padding . 0.25) (full-length-to-extent . #t) - (direction . ,ly:tuplet-bracket::calc-direction) + (padding . 1.1) (positions . ,ly:tuplet-bracket::calc-positions) - (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) - (control-points . ,ly:tuplet-bracket::calc-control-points) + (shorten-pair . (-0.2 . -0.2)) + (staff-padding . 0.25) (stencil . ,ly:tuplet-bracket::print) - (cross-staff . ,ly:tuplet-bracket::calc-cross-staff) - + (thickness . 1.6) + (meta . ((class . Spanner) (interfaces . (line-interface tuplet-bracket-interface)))))) (TupletNumber . ( - (stencil . ,ly:tuplet-number::print) - (text . ,tuplet-number::calc-denominator-text) - (font-shape . italic) - (font-size . -2) (avoid-slur . inside) (cross-staff . ,ly:tuplet-number::calc-cross-staff) + (font-shape . italic) + (font-size . -2) + (stencil . ,ly:tuplet-number::print) + (text . ,tuplet-number::calc-denominator-text) (meta . ((class . Spanner) - (interfaces . (text-interface tuplet-number-interface - font-interface)))))) + (interfaces . (font-interface + text-interface + tuplet-number-interface)))))) + - (UnaCordaPedal . ( - (stencil . ,ly:text-interface::print) - (font-shape . italic) - (extra-spacing-width . (+inf.0 . -inf.0)) - (self-alignment-X . ,CENTER) (direction . ,RIGHT) + (extra-spacing-width . (+inf.0 . -inf.0)) + (font-shape . italic) (padding . 0.0) ;; padding relative to UnaCordaPedalLineSpanner + (self-alignment-X . ,CENTER) + (stencil . ,ly:text-interface::print) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) - (interfaces . (text-interface + (interfaces . (font-interface piano-pedal-script-interface self-alignment-interface - font-interface)))))) + text-interface)))))) (UnaCordaPedalLineSpanner . ( (axes . (,Y)) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) - (Y-offset . ,ly:side-position-interface::y-aligned-side) + (direction . ,DOWN) + (minimum-space . 1.0) (outside-staff-priority . 1000) - (side-axis . ,Y) (padding . 1.2) + (side-axis . ,Y) (staff-padding . 1.2) - (minimum-space . 1.0) - (direction . ,DOWN) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (piano-pedal-interface - axis-group-interface + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + piano-pedal-interface side-position-interface)))))) (VaticanaLigature . ( - (thickness . 0.6) (flexa-width . 2.0) (stencil . ,ly:vaticana-ligature::print) + (thickness . 0.6) (meta . ((class . Spanner) - (interfaces . (vaticana-ligature-interface - font-interface)))))) + (interfaces . (font-interface + vaticana-ligature-interface)))))) (VerticalAlignment . ( (axes . (,Y)) - (positioning-done . ,ly:align-interface::calc-positioning-done) - (after-line-breaking . ,ly:align-interface::stretch-after-break) - (Y-extent . ,ly:axis-group-interface::height) - (X-extent . ,ly:axis-group-interface::width) + (positioning-done . ,ly:align-interface::align-to-ideal-distances) (stacking-dir . -1) - (padding . 0.5) (vertical-skylines . ,ly:axis-group-interface::combine-skylines) - (max-stretch . 0) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Spanner) - (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common))) + (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs) + (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common))) (interfaces . (align-interface axis-group-interface)))))) (VerticalAxisGroup . ( + (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) (axes . (,Y)) - (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) - (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) - (X-extent . ,ly:axis-group-interface::width) - (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines) - (max-stretch . ,ly:axis-group-interface::calc-max-stretch) + (default-staff-staff-spacing . ((basic-distance . 9) + (minimum-distance . 8) + (padding . 1))) + (nonstaff-unrelatedstaff-spacing . ((padding . 0.5))) + (staff-staff-spacing . ,ly:axis-group-interface::calc-staff-staff-spacing) (stencil . ,ly:axis-group-interface::print) - (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights) + (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) + (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) (meta . ((class . Spanner) - (object-callbacks . ((X-common . ,ly:axis-group-interface::calc-x-common))) + (object-callbacks . ( + (X-common . ,ly:axis-group-interface::calc-x-common) + (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface - hara-kiri-group-spanner-interface - vertically-spaceable-interface)))))) + hara-kiri-group-spanner-interface)))))) + + (VoiceFollower + . ( + (after-line-breaking . ,ly:spanner::kill-zero-spanned-time) + (bound-details . ((right . ((attach-dir . ,CENTER) + (padding . 1.5) + )) + (left . ((attach-dir . ,CENTER) + (padding . 1.5) + )) + )) + (gap . 0.5) + (left-bound-info . ,ly:line-spanner::calc-left-bound-info) + (non-musical . #t) + (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (stencil . ,ly:line-spanner::print) + (style . line) + (X-extent . #f) + (Y-extent . #f) + (meta . ((class . Spanner) + (interfaces . (line-interface + line-spanner-interface)))))) (VoltaBracket . ( - (stencil . ,ly:volta-bracket-interface::print) - (font-encoding . fetaNumber) - (thickness . 1.6) ;; line-thickness + (direction . ,UP) (edge-height . (2.0 . 2.0)) ;; staff-space; + (font-encoding . fetaText) (font-size . -4) + (stencil . ,ly:volta-bracket-interface::print) + (thickness . 1.6) ;; line-thickness (word-space . 0.6) - (direction . ,UP) (meta . ((class . Spanner) - (interfaces . (volta-bracket-interface - horizontal-bracket-interface + (interfaces . (font-interface + horizontal-bracket-interface line-interface - text-interface side-position-interface - font-interface)))))) + text-interface + volta-bracket-interface + volta-interface)))))) (VoltaBracketSpanner - . ( + . ( + (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff) (axes . (,Y)) - (side-axis . ,Y) (direction . ,UP) + (no-alignment . #t) + (outside-staff-priority . 600) (padding . 1) - (Y-offset . ,ly:side-position-interface::y-aligned-side) - (outside-staff-priority . 100) - (Y-extent . ,ly:axis-group-interface::height) + (side-axis . ,Y) (X-extent . ,ly:axis-group-interface::width) - (no-alignment . ,#t) - (meta . ((class . Spanner) - (interfaces . (side-position-interface - axis-group-interface)))))) - - (VoiceFollower - . ( - (style . line) - (gap . 0.5) - (non-musical . #t) - (X-extent . #f) - (Y-extent . #f) - (bound-details . ((right . ((attach-dir . ,CENTER) - (padding . 1.5) - )) - (left . ((attach-dir . ,CENTER) - (padding . 1.5) - )) - )) - (stencil . ,ly:line-spanner::print) - (left-bound-info . ,ly:line-spanner::calc-left-bound-info) - (right-bound-info . ,ly:line-spanner::calc-right-bound-info) + (Y-extent . ,ly:axis-group-interface::height) + (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) - (interfaces . (line-spanner-interface - line-interface)))))) + (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) + (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs))) + (interfaces . (axis-group-interface + side-position-interface + volta-interface)))))) )) @@ -2226,10 +2503,10 @@ ;; (newline) (let* ((name-sym (car x)) (grob-entry (cdr x)) - (meta-entry (cdr (assoc 'meta grob-entry))) - (class (cdr (assoc 'class meta-entry))) + (meta-entry (assoc-get 'meta grob-entry)) + (class (assoc-get 'class meta-entry)) (ifaces-entry - (cdr (assoc 'interfaces meta-entry)))) + (assoc-get 'interfaces meta-entry))) (cond ((eq? 'Item class) @@ -2269,47 +2546,81 @@ (set! all-grob-descriptions (sort all-grob-descriptions alist +;;;; Copyright (C) 2000--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen - - -;;; markup commands -;;; * each markup function should have a doc string with -;; syntax, description and example. +;;;; +;;;; 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 . + +;;; +;;; Markup commands and markup-list commands definitions. +;;; +;;; Markup commands which are part of LilyPond, are defined +;;; in the (lily) module, which is the current module in this file, +;;; using the `define-markup-command' macro. +;;; +;;; Usage: +;;; +;;; (define-markup-command (command-name layout props args...) +;;; args-signature +;;; [ #:category category ] +;;; [ #:properties property-bindings ] +;;; documentation-string +;;; ..body..) +;;; +;;; with: +;;; command-name +;;; the name of the markup command +;;; +;;; layout and props +;;; arguments that are automatically passed to the command when it +;;; is interpreted. +;;; `layout' is an output def, which properties can be accessed +;;; using `ly:output-def-lookup'. +;;; `props' is a list of property settings which can be accessed +;;; using `chain-assoc-get' (more on that below) +;;; +;;; args... +;;; the command arguments. +;;; There is no limitation on the order of command arguments. +;;; However, markup functions taking a markup as their last +;;; argument are somewhat special as you can apply them to a +;;; markup list, and the result is a markup list where the +;;; markup function (with the specified leading arguments) has +;;; been applied to every element of the original markup list. +;;; +;;; Since replicating the leading arguments for applying a +;;; markup function to a markup list is cheap mostly for +;;; Scheme arguments, you avoid performance pitfalls by just +;;; using Scheme arguments for the leading arguments of markup +;;; functions that take a markup as their last argument. +;;; +;;; args-signature +;;; the arguments signature, i.e. a list of type predicates which +;;; are used to type check the arguments, and also to define the general +;;; argument types (markup, markup-list, scheme) that the command is +;;; expecting. +;;; For instance, if a command expects a number, then a markup, the +;;; signature would be: (number? markup?) +;;; +;;; category +;;; for documentation purpose, builtin markup commands are grouped by +;;; category. This can be any symbol. When documentation is generated, +;;; the symbol is converted to a capitalized string, where hyphens are +;;; replaced by spaces. +;;; +;;; property-bindings +;;; this is used both for documentation generation, and to ease +;;; programming the command itself. It is list of +;;; (property-name default-value) +;;; or (property-name) +;;; elements. Each property is looked-up in the `props' argument, and +;;; the symbol naming the property is bound to its value. +;;; When the property is not found in `props', then the symbol is bound +;;; to the given default value. When no default value is given, #f is +;;; used instead. +;;; Thus, using the following property bindings: +;;; ((thickness 0.1) +;;; (font-size 0)) +;;; is equivalent to writing: +;;; (let ((thickness (chain-assoc-get 'thickness props 0.1)) +;;; (font-size (chain-assoc-get 'font-size props 0))) +;;; ..body..) +;;; When a command `B' internally calls an other command `A', it may +;;; desirable to see in `B' documentation all the properties and +;;; default values used by `A'. In that case, add `A-markup' to the +;;; property-bindings of B. (This is used when generating +;;; documentation, but won't create bindings.) +;;; +;;; documentation-string +;;; the command documentation string (used to generate manuals) +;;; +;;; body +;;; the command body. The function is supposed to return a stencil. +;;; +;;; Each markup command definition shall have a documentation string +;;; with description, syntax and example. (use-modules (ice-9 regex)) @@ -23,10 +118,10 @@ ;; geometric shapes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (draw-line layout props dest) +(define-markup-command (draw-line layout props dest) (number-pair?) - graphic - ((thickness 1)) + #:category graphic + #:properties ((thickness 1)) " @cindex drawing lines within text @@ -44,10 +139,35 @@ A simple line. (y (cdr dest))) (make-line-stencil th 0 0 x y))) -(define-builtin-markup-command (draw-circle layout props radius thickness filled) - (number? number? boolean?) - graphic +(define-markup-command (draw-hline layout props) () + #:category graphic + #:properties ((draw-line-markup) + (line-width) + (span-factor 1)) + " +@cindex drawing a line across a page + +Draws a line across a page, where the property @code{span-factor} +controls what fraction of the page is taken up. +@lilypond[verbatim,quote] +\\markup { + \\column { + \\draw-hline + \\override #'(span-factor . 1/3) + \\draw-hline + } +} +@end lilypond" + (interpret-markup layout + props + (markup #:draw-line (cons (* line-width + span-factor) + 0)))) + +(define-markup-command (draw-circle layout props radius thickness filled) + (number? number? boolean?) + #:category graphic " @cindex drawing circles within text @@ -63,12 +183,12 @@ optionally filled. @end lilypond" (make-circle-stencil radius thickness filled)) -(define-builtin-markup-command (triangle layout props filled) +(define-markup-command (triangle layout props filled) (boolean?) - graphic - ((thickness 0.1) - (font-size 0) - (baseline-skip 2)) + #:category graphic + #:properties ((thickness 0.1) + (font-size 0) + (baseline-skip 2)) " @cindex drawing triangles within text @@ -92,12 +212,12 @@ A triangle, either filled or empty. (cons 0 ex) (cons 0 (* .86 ex))))) -(define-builtin-markup-command (circle layout props arg) +(define-markup-command (circle layout props arg) (markup?) - graphic - ((thickness 1) - (font-size 0) - (circle-padding 0.2)) + #:category graphic + #:properties ((thickness 1) + (font-size 0) + (circle-padding 0.2)) " @cindex circling text @@ -118,10 +238,9 @@ thickness and padding around the markup. (m (interpret-markup layout props arg))) (circle-stencil m th pad))) -(define-builtin-markup-command (with-url layout props url arg) +(define-markup-command (with-url layout props url arg) (string? markup?) - graphic - () + #:category graphic " @cindex inserting URL links into text @@ -145,10 +264,63 @@ the PDF backend. (ly:stencil-add (ly:make-stencil url-expr xextent yextent) stil))) -(define-builtin-markup-command (beam layout props width slope thickness) +(define-markup-command (page-link layout props page-number arg) + (number? markup?) + #:category other + " +@cindex referencing page numbers in text + +Add a link to the page @var{page-number} around @var{arg}. This only works in +the PDF backend. + +@lilypond[verbatim,quote] +\\markup { + \\page-link #2 { \\italic { This links to page 2... } } +} +@end lilypond" + (let* ((stil (interpret-markup layout props arg)) + (xextent (ly:stencil-extent stil X)) + (yextent (ly:stencil-extent stil Y)) + (old-expr (ly:stencil-expr stil)) + (link-expr (list 'page-link page-number `(quote ,xextent) `(quote ,yextent)))) + + (ly:stencil-add (ly:make-stencil link-expr xextent yextent) stil))) + +(define-markup-command (with-link layout props label arg) + (symbol? markup?) + #:category other + " +@cindex referencing page labels in text + +Add a link to the page holding label @var{label} around @var{arg}. This +only works in the PDF backend. + +@lilypond[verbatim,quote] +\\markup { + \\with-link #\"label\" { \\italic { This links to the page containing the label... } } +} +@end lilypond" + (let* ((arg-stencil (interpret-markup layout props arg)) + (x-ext (ly:stencil-extent arg-stencil X)) + (y-ext (ly:stencil-extent arg-stencil Y))) + (ly:make-stencil + `(delay-stencil-evaluation + ,(delay (ly:stencil-expr + (let* ((table (ly:output-def-lookup layout 'label-page-table)) + (page-number (if (list? table) + (assoc-get label table) + #f)) + (link-expr (list 'page-link page-number + `(quote ,x-ext) `(quote ,y-ext)))) + (ly:stencil-add (ly:make-stencil link-expr x-ext y-ext) +arg-stencil))))) + x-ext + y-ext))) + + +(define-markup-command (beam layout props width slope thickness) (number? number? number?) - graphic - () + #:category graphic " @cindex drawing beams within text @@ -163,7 +335,7 @@ Create a beam with the specified parameters. (half (/ thickness 2))) (ly:make-stencil - `(polygon ',(list + `(polygon ',(list 0 (/ thickness -2) width (+ (* width slope) (/ thickness -2)) width (+ (* width slope) (/ thickness 2)) @@ -174,41 +346,42 @@ Create a beam with the specified parameters. (cons (+ (- half) (car yext)) (+ half (cdr yext)))))) -(define-builtin-markup-command (underline layout props arg) +(define-markup-command (underline layout props arg) (markup?) - font - ((thickness 1)) + #:category font + #:properties ((thickness 1) (offset 2)) " @cindex underlining text Underline @var{arg}. Looks at @code{thickness} to determine line -thickness and y-offset. +thickness, and @code{offset} to determine line y-offset. @lilypond[verbatim,quote] -\\markup { - default - \\hspace #2 - \\override #'(thickness . 2) - \\underline { - underline - } +\\markup \\fill-line { + \\underline \"underlined\" + \\override #'(offset . 5) + \\override #'(thickness . 1) + \\underline \"underlined\" + \\override #'(offset . 1) + \\override #'(thickness . 5) + \\underline \"underlined\" } @end lilypond" - (let* ((thick (* (ly:output-def-lookup layout 'line-thickness) - thickness)) + (let* ((thick (ly:output-def-lookup layout 'line-thickness)) + (underline-thick (* thickness thick)) (markup (interpret-markup layout props arg)) (x1 (car (ly:stencil-extent markup X))) (x2 (cdr (ly:stencil-extent markup X))) - (y (* thick -2)) - (line (make-line-stencil thick x1 y x2 y))) + (y (* thick (- offset))) + (line (make-line-stencil underline-thick x1 y x2 y))) (ly:stencil-add markup line))) -(define-builtin-markup-command (box layout props arg) +(define-markup-command (box layout props arg) (markup?) - font - ((thickness 1) - (font-size 0) - (box-padding 0.2)) + #:category font + #:properties ((thickness 1) + (font-size 0) + (box-padding 0.2)) " @cindex enclosing text within a box @@ -229,10 +402,9 @@ thickness and padding around the markup. (m (interpret-markup layout props arg))) (box-stencil m th pad))) -(define-builtin-markup-command (filled-box layout props xext yext blot) +(define-markup-command (filled-box layout props xext yext blot) (number-pair? number-pair? number?) - graphic - () + #:category graphic " @cindex drawing solid boxes within text @cindex drawing boxes with rounded corners @@ -258,13 +430,13 @@ circle of diameter@tie{}0 (i.e., sharp corners). (ly:round-filled-box xext yext blot)) -(define-builtin-markup-command (rounded-box layout props arg) +(define-markup-command (rounded-box layout props arg) (markup?) - graphic - ((thickness 1) - (corner-radius 1) - (font-size 0) - (box-padding 0.5)) + #:category graphic + #:properties ((thickness 1) + (corner-radius 1) + (font-size 0) + (box-padding 0.5)) "@cindex enclosing text in a box with rounded corners @cindex drawing boxes with rounded corners around text Draw a box with rounded corners around @var{arg}. Looks at @code{thickness}, @@ -279,7 +451,7 @@ c4^\\markup { } } c,8. c16 c4 r -@end lilypond" +@end lilypond" (let ((th (* (ly:output-def-lookup layout 'line-thickness) thickness)) (pad (* (magstep font-size) box-padding)) @@ -287,10 +459,9 @@ c,8. c16 c4 r (ly:stencil-add (rounded-box-stencil m th pad corner-radius) m))) -(define-builtin-markup-command (rotate layout props ang arg) +(define-markup-command (rotate layout props ang arg) (number? markup?) - align - () + #:category align " @cindex rotating text @@ -309,10 +480,9 @@ Rotate object with @var{ang} degrees around its center. (let* ((stil (interpret-markup layout props arg))) (ly:stencil-rotate stil ang 0 0))) -(define-builtin-markup-command (whiteout layout props arg) +(define-markup-command (whiteout layout props arg) (markup?) - other - () + #:category other " @cindex adding a white background to text @@ -327,10 +497,9 @@ Provide a white background for @var{arg}. @end lilypond" (stencil-whiteout (interpret-markup layout props arg))) -(define-builtin-markup-command (pad-markup layout props amount arg) +(define-markup-command (pad-markup layout props amount arg) (number? markup?) - align - () + #:category align " @cindex padding text @cindex putting space around text @@ -364,10 +533,9 @@ Add space around a markup object. ;; space ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (strut layout props) - () - other +(define-markup-command (strut layout props) () + #:category other " @cindex creating vertical spaces in text @@ -379,10 +547,10 @@ Create a box of the same height as the space in the current font." ))) ;; todo: fix negative space -(define-builtin-markup-command (hspace layout props amount) +(define-markup-command (hspace layout props amount) (number?) - align - () + #:category align + #:properties ((word-space)) " @cindex creating horizontal spaces in text @@ -397,19 +565,45 @@ Create an invisible object taking up horizontal space @var{amount}. three } @end lilypond" - (if (> amount 0) - (ly:make-stencil "" (cons 0 amount) '(-1 . 1)) - (ly:make-stencil "" (cons amount amount) '(-1 . 1)))) + (let ((corrected-space (- amount word-space))) + (if (> corrected-space 0) + (ly:make-stencil "" (cons 0 corrected-space) '(0 . 0)) + (ly:make-stencil "" (cons corrected-space corrected-space) '(0 . 0))))) + +;; todo: fix negative space +(define-markup-command (vspace layout props amount) + (number?) + #:category align + " +@cindex creating vertical spaces in text + +Create an invisible object taking up vertical space +of @var{amount} multiplied by 3. + +@lilypond[verbatim,quote] +\\markup { + \\center-column { + one + \\vspace #2 + two + \\vspace #5 + three + } +} +@end lilypond" + (let ((amount (* amount 3.0))) + (if (> amount 0) + (ly:make-stencil "" (cons 0 0) (cons 0 amount)) + (ly:make-stencil "" (cons 0 0) (cons amount amount))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; importing graphics. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (stencil layout props stil) +(define-markup-command (stencil layout props stil) (ly:stencil?) - other - () + #:category other " @cindex importing stencils into text @@ -429,18 +623,17 @@ Use a stencil as markup. "Extract the bbox from STRING, or return #f if not present." (let* ((match (regexp-exec bbox-regexp string))) - + (if match (map (lambda (x) (string->number (match:substring match x))) (cdr (iota 5))) - + #f))) -(define-builtin-markup-command (epsfile layout props axis size file-name) +(define-markup-command (epsfile layout props axis size file-name) (number? number? string?) - graphic - () + #:category graphic " @cindex inlining an Encapsulated PostScript image @@ -460,44 +653,32 @@ Inline an EPS image. The image is scaled along @var{axis} to (eps-file->stencil axis size file-name) )) -(define-builtin-markup-command (postscript layout props str) +(define-markup-command (postscript layout props str) (string?) - graphic - () + #:category graphic " @cindex inserting PostScript directly into text This inserts @var{str} directly into the output as a PostScript command string. @lilypond[verbatim,quote] -eyeglassesps = #\" +ringsps = #\" 0.15 setlinewidth - -0.9 0 translate - 1.1 1.1 scale - 1.2 0.7 moveto - 0.7 0.7 0.5 0 361 arc - stroke - 2.20 0.70 0.50 0 361 arc - stroke - 1.45 0.85 0.30 0 180 arc + 0.9 0.6 moveto + 0.4 0.6 0.5 0 361 arc stroke - 0.20 0.70 moveto - 0.80 2.00 lineto - 0.92 2.26 1.30 2.40 1.15 1.70 curveto + 1.0 0.6 0.5 0 361 arc stroke - 2.70 0.70 moveto - 3.30 2.00 lineto - 3.42 2.26 3.80 2.40 3.65 1.70 curveto - stroke\" + \" -eyeglasses = \\markup { - \\with-dimensions #'(0 . 4.4) #'(0 . 2.5) - \\postscript #eyeglassesps +rings = \\markup { + \\with-dimensions #'(-0.2 . 1.6) #'(0 . 1.2) + \\postscript #ringsps } \\relative c'' { - c2^\\eyeglasses - a2_\\eyeglasses + c2^\\rings + a2_\\rings } @end lilypond" ;; FIXME @@ -512,10 +693,141 @@ grestore str)) '(0 . 0) '(0 . 0))) -(define-builtin-markup-command (score layout props score) +(define-markup-command (path layout props thickness commands) (number? list?) + #:category graphic + #:properties ((line-cap-style 'round) + (line-join-style 'round) + (filled #f)) + " +@cindex paths, drawing +@cindex drawing paths +Draws a path with line thickness @var{thickness} according to the +directions given in @var{commands}. @var{commands} is a list of +lists where the @code{car} of each sublist is a drawing command and +the @code{cdr} comprises the associated arguments for each command. + +Line-cap styles and line-join styles may be customized by +overriding the @code{line-cap-style} and @code{line-join-style} +properties, respectively. Available line-cap styles are +@code{'butt}, @code{'round}, and @code{'square}. Available +line-join styles are @code{'miter}, @code{'round}, and +@code{'bevel}. + +The property @code{filled} specifies whether or not the path is +filled with color. + +There are seven commands available to use in the list +@code{commands}: @code{moveto}, @code{rmoveto}, @code{lineto}, +@code{rlineto}, @code{curveto}, @code{rcurveto}, and +@code{closepath}. Note that the commands that begin with @emph{r} +are the relative variants of the other three commands. + +The commands @code{moveto}, @code{rmoveto}, @code{lineto}, and +@code{rlineto} take 2 arguments; they are the X and Y coordinates +for the destination point. + +The commands @code{curveto} and @code{rcurveto} create cubic +Bézier curves, and take 6 arguments; the first two are the X and Y +coordinates for the first control point, the second two are the X +and Y coordinates for the second control point, and the last two +are the X and Y coordinates for the destination point. + +The @code{closepath} command takes zero arguments and closes the +current subpath in the active path. + +Note that a sequence of commands @emph{must} begin with a +@code{moveto} or @code{rmoveto} to work with the SVG output. + +@lilypond[verbatim,quote] +samplePath = + #'((moveto 0 0) + (lineto -1 1) + (lineto 1 1) + (lineto 1 -1) + (curveto -5 -5 -5 5 -1 0) + (closepath)) + +\\markup { + \\path #0.25 #samplePath +} +@end lilypond" + (let* ((half-thickness (/ thickness 2)) + (current-point '(0 . 0)) + (set-point (lambda (lst) (set! current-point lst))) + (relative? (lambda (x) + (string-prefix? "r" (symbol->string (car x))))) + ;; For calculating extents, we want to modify the command + ;; list so that all coordinates are absolute. + (new-commands (map (lambda (x) + (cond + ;; for rmoveto, rlineto + ((and (relative? x) (eq? 3 (length x))) + (let ((cp (cons + (+ (car current-point) + (second x)) + (+ (cdr current-point) + (third x))))) + (set-point cp) + (list (car cp) + (cdr cp)))) + ;; for rcurveto + ((and (relative? x) (eq? 7 (length x))) + (let* ((old-cp current-point) + (cp (cons + (+ (car old-cp) + (sixth x)) + (+ (cdr old-cp) + (seventh x))))) + (set-point cp) + (list (+ (car old-cp) (second x)) + (+ (cdr old-cp) (third x)) + (+ (car old-cp) (fourth x)) + (+ (cdr old-cp) (fifth x)) + (car cp) + (cdr cp)))) + ;; for moveto, lineto + ((eq? 3 (length x)) + (set-point (cons (second x) + (third x))) + (drop x 1)) + ;; for curveto + ((eq? 7 (length x)) + (set-point (cons (sixth x) + (seventh x))) + (drop x 1)) + ;; keep closepath for filtering; + ;; see `without-closepath'. + (else x))) + commands)) + ;; path-min-max does not accept 0-arg lists, + ;; and since closepath does not affect extents, filter + ;; out those commands here. + (without-closepath (filter (lambda (x) + (not (equal? 'closepath (car x)))) + new-commands)) + (extents (path-min-max + ;; set the origin to the first moveto + (list (list-ref (car without-closepath) 0) + (list-ref (car without-closepath) 1)) + without-closepath)) + (X-extent (cons (list-ref extents 0) (list-ref extents 1))) + (Y-extent (cons (list-ref extents 2) (list-ref extents 3))) + (command-list (fold-right append '() commands))) + + ;; account for line thickness + (set! X-extent (interval-widen X-extent half-thickness)) + (set! Y-extent (interval-widen Y-extent half-thickness)) + + (ly:make-stencil + `(path ,thickness `(,@',command-list) + ',line-cap-style ',line-join-style ,filled) + X-extent + Y-extent))) + +(define-markup-command (score layout props score) (ly:score?) - music - () + #:category music + #:properties ((baseline-skip)) " @cindex inserting music into text @@ -560,19 +872,20 @@ Inline an image of music. } } @end lilypond" - (let* ((output (ly:score-embedded-format score layout))) + (let ((output (ly:score-embedded-format score layout))) (if (ly:music-output? output) - (paper-system-stencil - (vector-ref (ly:paper-score-paper-systems output) 0)) + (stack-stencils Y DOWN baseline-skip + (map paper-system-stencil + (vector->list + (ly:paper-score-paper-systems output)))) (begin (ly:warning (_"no systems found in \\score markup, does it have a \\layout block?")) empty-stencil)))) -(define-builtin-markup-command (null layout props) - () - other +(define-markup-command (null layout props) () + #:category other " @cindex creating empty text objects @@ -589,10 +902,9 @@ An empty markup with extents of a single point. ;; basic formatting. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (simple layout props str) +(define-markup-command (simple layout props str) (string?) - font - () + #:category font " @cindex simple text strings @@ -611,10 +923,9 @@ the use of @code{\\simple} is unnecessary. @end lilypond" (interpret-markup layout props str)) -(define-builtin-markup-command (tied-lyric layout props str) +(define-markup-command (tied-lyric layout props str) (string?) - music - () + #:category music " @cindex simple text strings with tie characters @@ -633,7 +944,7 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols. (join-stencil (interpret-markup layout props tie-str)) ) - (interpret-markup layout + (interpret-markup layout (prepend-alist-chain 'word-space (/ (interval-length (ly:stencil-extent join-stencil X)) -3.5) @@ -646,39 +957,45 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols. (make-simple-markup "")) ;; helper for justifying lines. -(define (get-fill-space word-count line-width text-widths) +(define (get-fill-space word-count line-width word-space text-widths) "Calculate the necessary paddings between each two adjacent texts. - The lengths of all texts are stored in @var{text-widths}. - The normal formula for the padding between texts a and b is: - padding = line-width/(word-count - 1) - (length(a) + length(b))/2 - The first and last padding have to be calculated specially using the - whole length of the first or last text. - Return a list of paddings." + The lengths of all texts are stored in @var{text-widths}. + The normal formula for the padding between texts a and b is: + padding = line-width/(word-count - 1) - (length(a) + length(b))/2 + The first and last padding have to be calculated specially using the + whole length of the first or last text. + All paddings are checked to be at least word-space, to ensure that + no texts collide. + Return a list of paddings." (cond ((null? text-widths) '()) - + ;; special case first padding ((= (length text-widths) word-count) - (cons + (cons (- (- (/ line-width (1- word-count)) (car text-widths)) (/ (car (cdr text-widths)) 2)) - (get-fill-space word-count line-width (cdr text-widths)))) + (get-fill-space word-count line-width word-space (cdr text-widths)))) ;; special case last padding ((= (length text-widths) 2) (list (- (/ line-width (1- word-count)) (+ (/ (car text-widths) 2) (car (cdr text-widths)))) 0)) (else - (cons - (- (/ line-width (1- word-count)) - (/ (+ (car text-widths) (car (cdr text-widths))) 2)) - (get-fill-space word-count line-width (cdr text-widths)))))) - -(define-builtin-markup-command (fill-line layout props args) + (let ((default-padding + (- (/ line-width (1- word-count)) + (/ (+ (car text-widths) (car (cdr text-widths))) 2)))) + (cons + (if (> word-space default-padding) + word-space + default-padding) + (get-fill-space word-count line-width word-space (cdr text-widths))))))) + +(define-markup-command (fill-line layout props args) (markup-list?) - align - ((text-direction RIGHT) - (word-space 1) - (line-width #f)) + #:category align + #:properties ((text-direction RIGHT) + (word-space 0.6) + (line-width #f)) "Put @var{markups} in a horizontal line of width @var{line-width}. The markups are spaced or flushed to fill the entire line. If there are no arguments, return an empty stencil. @@ -701,59 +1018,64 @@ If there are no arguments, return an empty stencil. } @end lilypond" (let* ((orig-stencils (interpret-markup-list layout props args)) - (stencils - (map (lambda (stc) - (if (ly:stencil-empty? stc) - point-stencil - stc)) orig-stencils)) - (text-widths - (map (lambda (stc) - (if (ly:stencil-empty? stc) - 0.0 - (interval-length (ly:stencil-extent stc X)))) - stencils)) - (text-width (apply + text-widths)) - (word-count (length stencils)) - (prop-line-width (chain-assoc-get 'line-width props #f)) - (line-width (or line-width (ly:output-def-lookup layout 'line-width))) - (fill-space - (cond - ((= word-count 1) - (list - (/ (- line-width text-width) 2) - (/ (- line-width text-width) 2))) - ((= word-count 2) - (list - (- line-width text-width))) - (else - (get-fill-space word-count line-width text-widths)))) - (fill-space-normal - (map (lambda (x) - (if (< x word-space) - word-space - x)) - fill-space)) - - (line-stencils (if (= word-count 1) - (list - point-stencil - (car stencils) - point-stencil) - stencils))) - - (if (= text-direction LEFT) - (set! line-stencils (reverse line-stencils))) + (stencils + (map (lambda (stc) + (if (ly:stencil-empty? stc) + point-stencil + stc)) orig-stencils)) + (text-widths + (map (lambda (stc) + (if (ly:stencil-empty? stc) + 0.0 + (interval-length (ly:stencil-extent stc X)))) + stencils)) + (text-width (apply + text-widths)) + (word-count (length stencils)) + (line-width (or line-width (ly:output-def-lookup layout 'line-width))) + (fill-space + (cond + ((= word-count 1) + (list + (/ (- line-width text-width) 2) + (/ (- line-width text-width) 2))) + ((= word-count 2) + (list + (- line-width text-width))) + (else + (get-fill-space word-count line-width word-space text-widths)))) + + (line-contents (if (= word-count 1) + (list + point-stencil + (car stencils) + point-stencil) + stencils))) (if (null? (remove ly:stencil-empty? orig-stencils)) - empty-stencil - (stack-stencils-padding-list X - RIGHT fill-space-normal line-stencils)))) - -(define-builtin-markup-command (line layout props args) + empty-stencil + (begin + (if (= text-direction LEFT) + (set! line-contents (reverse line-contents))) + (set! line-contents + (stack-stencils-padding-list + X RIGHT fill-space line-contents)) + (if (> word-count 1) + ;; shift s.t. stencils align on the left edge, even if + ;; first stencil had negative X-extent (e.g. center-column) + ;; (if word-count = 1, X-extents are already normalized in + ;; the definition of line-contents) + (set! line-contents + (ly:stencil-translate-axis + line-contents + (- (car (ly:stencil-extent (car stencils) X))) + X))) + line-contents)))) + +(define-markup-command (line layout props args) (markup-list?) - align - ((word-space) - (text-direction RIGHT)) + #:category align + #:properties ((word-space) + (text-direction RIGHT)) "Put @var{args} in a horizontal line. The property @code{word-space} determines the space between markups in @var{args}. @@ -771,10 +1093,9 @@ determines the space between markups in @var{args}. word-space (remove ly:stencil-empty? stencils)))) -(define-builtin-markup-command (concat layout props args) +(define-markup-command (concat layout props args) (markup-list?) - align - () + #:category align " @cindex concatenating text @cindex ligatures in text @@ -814,7 +1135,7 @@ equivalent to @code{\"fi\"}. (define (wordwrap-stencils stencils justify base-space line-width text-dir) - "Perform simple wordwrap, return stencil of each line." + "Perform simple wordwrap, return stencil of each line." (define space (if justify ;; justify only stretches lines. (* 0.7 base-space) @@ -844,7 +1165,7 @@ equivalent to @code{\"fi\"}. line-stencils)))) (line-word-space (cond ((not justify) space) ;; don't stretch last line of paragraph. - ;; hmmm . bug - will overstretch the last line in some case. + ;; hmmm . bug - will overstretch the last line in some case. ((null? (cdr line-break)) base-space) ((null? line-stencils) 0.0) @@ -866,11 +1187,11 @@ equivalent to @code{\"fi\"}. X))) (reverse (cons line lines))))))) -(define-builtin-markup-list-command (wordwrap-internal layout props justify args) +(define-markup-list-command (wordwrap-internal layout props justify args) (boolean? markup-list?) - ((line-width #f) - (word-space) - (text-direction RIGHT)) + #:properties ((line-width #f) + (word-space) + (text-direction RIGHT)) "Internal markup list command used to define @code{\\justify} and @code{\\wordwrap}." (wordwrap-stencils (remove ly:stencil-empty? (interpret-markup-list layout props args)) @@ -880,11 +1201,11 @@ equivalent to @code{\"fi\"}. (ly:output-def-lookup layout 'line-width)) text-direction)) -(define-builtin-markup-command (justify layout props args) +(define-markup-command (justify layout props args) (markup-list?) - align - ((baseline-skip) - wordwrap-internal-markup-list) + #:category align + #:properties ((baseline-skip) + wordwrap-internal-markup-list) " @cindex justifying text @@ -905,11 +1226,11 @@ Use @code{\\override #'(line-width . @var{X})} to set the line width; (stack-lines DOWN 0.0 baseline-skip (wordwrap-internal-markup-list layout props #t args))) -(define-builtin-markup-command (wordwrap layout props args) +(define-markup-command (wordwrap layout props args) (markup-list?) - align - ((baseline-skip) - wordwrap-internal-markup-list) + #:category align + #:properties ((baseline-skip) + wordwrap-internal-markup-list) "Simple wordwrap. Use @code{\\override #'(line-width . @var{X})} to set the line width, where @var{X} is the number of staff spaces. @@ -926,11 +1247,11 @@ the line width, where @var{X} is the number of staff spaces. (stack-lines DOWN 0.0 baseline-skip (wordwrap-internal-markup-list layout props #f args))) -(define-builtin-markup-list-command (wordwrap-string-internal layout props justify arg) +(define-markup-list-command (wordwrap-string-internal layout props justify arg) (boolean? string?) - ((line-width) - (word-space) - (text-direction RIGHT)) + #:properties ((line-width) + (word-space) + (text-direction RIGHT)) "Internal markup list command used to define @code{\\justify-string} and @code{\\wordwrap-string}." (let* ((para-strings (regexp-split @@ -953,13 +1274,13 @@ the line width, where @var{X} is the number of staff spaces. list-para-words))) (apply append para-lines))) -(define-builtin-markup-command (wordwrap-string layout props arg) +(define-markup-command (wordwrap-string layout props arg) (string?) - align - ((baseline-skip) - wordwrap-string-internal-markup-list) + #:category align + #:properties ((baseline-skip) + wordwrap-string-internal-markup-list) "Wordwrap a string. Paragraphs may be separated with double newlines. - + @lilypond[verbatim,quote] \\markup { \\override #'(line-width . 40) @@ -979,13 +1300,13 @@ the line width, where @var{X} is the number of staff spaces. (stack-lines DOWN 0.0 baseline-skip (wordwrap-string-internal-markup-list layout props #f arg))) -(define-builtin-markup-command (justify-string layout props arg) +(define-markup-command (justify-string layout props arg) (string?) - align - ((baseline-skip) - wordwrap-string-internal-markup-list) + #:category align + #:properties ((baseline-skip) + wordwrap-string-internal-markup-list) "Justify a string. Paragraphs may be separated with double newlines - + @lilypond[verbatim,quote] \\markup { \\override #'(line-width . 40) @@ -1005,16 +1326,15 @@ the line width, where @var{X} is the number of staff spaces. (stack-lines DOWN 0.0 baseline-skip (wordwrap-string-internal-markup-list layout props #t arg))) -(define-builtin-markup-command (wordwrap-field layout props symbol) +(define-markup-command (wordwrap-field layout props symbol) (symbol?) - align - () + #:category align "Wordwrap the data which has been assigned to @var{symbol}. - + @lilypond[verbatim,quote] \\header { title = \"My title\" - description = \"Lorem ipsum dolor sit amet, consectetur adipisicing + myText = \"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\" @@ -1025,7 +1345,7 @@ the line width, where @var{X} is the number of staff spaces. \\column { \\fill-line { \\fromproperty #'header:title } \\null - \\wordwrap-field #'header:descr + \\wordwrap-field #'header:myText } } } @@ -1039,16 +1359,15 @@ the line width, where @var{X} is the number of staff spaces. (wordwrap-string-markup layout props m) empty-stencil))) -(define-builtin-markup-command (justify-field layout props symbol) +(define-markup-command (justify-field layout props symbol) (symbol?) - align - () + #:category align "Justify the data which has been assigned to @var{symbol}. - + @lilypond[verbatim,quote] \\header { title = \"My title\" - description = \"Lorem ipsum dolor sit amet, consectetur adipisicing + myText = \"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\" @@ -1059,7 +1378,7 @@ the line width, where @var{X} is the number of staff spaces. \\column { \\fill-line { \\fromproperty #'header:title } \\null - \\justify-field #'header:description + \\justify-field #'header:myText } } } @@ -1073,10 +1392,9 @@ the line width, where @var{X} is the number of staff spaces. (justify-string-markup layout props m) empty-stencil))) -(define-builtin-markup-command (combine layout props arg1 arg2) +(define-markup-command (combine layout props arg1 arg2) (markup? markup?) - align - () + #:category align " @cindex merging text @@ -1104,11 +1422,11 @@ curly braces as an argument; the follow example will not compile: ;; ;; TODO: should extract baseline-skip from each argument somehow.. -;; -(define-builtin-markup-command (column layout props args) +;; +(define-markup-command (column layout props args) (markup-list?) - align - ((baseline-skip)) + #:category align + #:properties ((baseline-skip)) " @cindex stacking text in a column @@ -1129,11 +1447,11 @@ in @var{args}. (stack-lines -1 0.0 baseline-skip (remove ly:stencil-empty? arg-stencils)))) -(define-builtin-markup-command (dir-column layout props args) +(define-markup-command (dir-column layout props args) (markup-list?) - align - ((direction) - (baseline-skip)) + #:category align + #:properties ((direction) + (baseline-skip)) " @cindex changing direction of text columns @@ -1166,14 +1484,14 @@ setting of the @code{direction} layout property. (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))) -(define-builtin-markup-command (center-column layout props args) +(define-markup-command (center-column layout props args) (markup-list?) - align - ((baseline-skip)) + #:category align + #:properties ((baseline-skip)) " @cindex centering a column of text @@ -1190,12 +1508,12 @@ Put @code{args} in a centered column. @end lilypond" (general-column CENTER baseline-skip (interpret-markup-list layout props args))) -(define-builtin-markup-command (left-column layout props args) +(define-markup-command (left-column layout props args) (markup-list?) - align - ((baseline-skip)) + #:category align + #:properties ((baseline-skip)) " -@cindex text columns, left-aligned +@cindex text columns, left-aligned Put @code{args} in a left-aligned column. @@ -1210,10 +1528,10 @@ Put @code{args} in a left-aligned column. @end lilypond" (general-column LEFT baseline-skip (interpret-markup-list layout props args))) -(define-builtin-markup-command (right-column layout props args) +(define-markup-command (right-column layout props args) (markup-list?) - align - ((baseline-skip)) + #:category align + #:properties ((baseline-skip)) " @cindex text columns, right-aligned @@ -1230,10 +1548,9 @@ Put @code{args} in a right-aligned column. @end lilypond" (general-column RIGHT baseline-skip (interpret-markup-list layout props args))) -(define-builtin-markup-command (vcenter layout props arg) +(define-markup-command (vcenter layout props arg) (markup?) - align - () + #:category align " @cindex vertically centering text @@ -1250,10 +1567,9 @@ Align @code{arg} to its Y@tie{}center. (let* ((mol (interpret-markup layout props arg))) (ly:stencil-aligned-to mol Y CENTER))) -(define-builtin-markup-command (center-align layout props arg) +(define-markup-command (center-align layout props arg) (markup?) - align - () + #:category align " @cindex horizontally centering text @@ -1272,10 +1588,9 @@ Align @code{arg} to its X@tie{}center. (let* ((mol (interpret-markup layout props arg))) (ly:stencil-aligned-to mol X CENTER))) -(define-builtin-markup-command (right-align layout props arg) +(define-markup-command (right-align layout props arg) (markup?) - align - () + #:category align " @cindex right aligning text @@ -1294,10 +1609,9 @@ Align @var{arg} on its right edge. (let* ((m (interpret-markup layout props arg))) (ly:stencil-aligned-to m X RIGHT))) -(define-builtin-markup-command (left-align layout props arg) +(define-markup-command (left-align layout props arg) (markup?) - align - () + #:category align " @cindex left aligning text @@ -1316,10 +1630,9 @@ Align @var{arg} on its left edge. (let* ((m (interpret-markup layout props arg))) (ly:stencil-aligned-to m X LEFT))) -(define-builtin-markup-command (general-align layout props axis dir arg) +(define-markup-command (general-align layout props axis dir arg) (integer? number? markup?) - align - () + #:category align " @cindex controlling general text alignment @@ -1357,10 +1670,9 @@ Align @var{arg} in @var{axis} direction to the @var{dir} side. (let* ((m (interpret-markup layout props arg))) (ly:stencil-aligned-to m axis dir))) -(define-builtin-markup-command (halign layout props dir arg) +(define-markup-command (halign layout props dir arg) (number? markup?) - align - () + #:category align " @cindex setting horizontal text alignment @@ -1396,23 +1708,21 @@ alignment accordingly. (let* ((m (interpret-markup layout props arg))) (ly:stencil-aligned-to m X dir))) -(define-builtin-markup-command (with-dimensions layout props x y arg) +(define-markup-command (with-dimensions layout props x y arg) (number-pair? number-pair? markup?) - other - () + #:category other " @cindex setting extent of text objects -Set the dimensions of @var{arg} to @var{x} and@tie{}@var{y}." +Set the dimensions of @var{arg} to @var{x} and@tie{}@var{y}." (let* ((m (interpret-markup layout props arg))) (ly:make-stencil (ly:stencil-expr m) x y))) -(define-builtin-markup-command (pad-around layout props amount arg) +(define-markup-command (pad-around layout props amount arg) (number? markup?) - align - () + #:category align "Add padding @var{amount} all around @var{arg}. - + @lilypond[verbatim,quote] \\markup { \\box { @@ -1433,10 +1743,9 @@ Set the dimensions of @var{arg} to @var{x} and@tie{}@var{y}." (interval-widen x amount) (interval-widen y amount)))) -(define-builtin-markup-command (pad-x layout props amount arg) +(define-markup-command (pad-x layout props amount arg) (number? markup?) - align - () + #:category align " @cindex padding text horizontally @@ -1462,21 +1771,19 @@ Add padding @var{amount} around @var{arg} in the X@tie{}direction. (interval-widen x amount) y))) -(define-builtin-markup-command (put-adjacent layout props axis dir arg1 arg2) +(define-markup-command (put-adjacent layout props axis dir arg1 arg2) (integer? ly:dir? markup? markup?) - align - () + #:category align "Put @var{arg2} next to @var{arg1}, without moving @var{arg1}." (let ((m1 (interpret-markup layout props arg1)) (m2 (interpret-markup layout props arg2))) (ly:stencil-combine-at-edge m1 axis dir m2 0.0))) -(define-builtin-markup-command (transparent layout props arg) +(define-markup-command (transparent layout props arg) (markup?) - other - () + #:category other "Make @var{arg} transparent. - + @lilypond[verbatim,quote] \\markup { \\transparent { @@ -1489,10 +1796,9 @@ Add padding @var{amount} around @var{arg} in the X@tie{}direction. (y (ly:stencil-extent m Y))) (ly:make-stencil "" x y))) -(define-builtin-markup-command (pad-to-box layout props x-ext y-ext arg) +(define-markup-command (pad-to-box layout props x-ext y-ext arg) (number-pair? number-pair? markup?) - align - () + #:category align "Make @var{arg} take at least @var{x-ext}, @var{y-ext} space. @lilypond[verbatim,quote] @@ -1515,10 +1821,9 @@ Add padding @var{amount} around @var{arg} in the X@tie{}direction. (interval-union x-ext x) (interval-union y-ext y)))) -(define-builtin-markup-command (hcenter-in layout props length arg) +(define-markup-command (hcenter-in layout props length arg) (number? markup?) - align - () + #:category align "Center @var{arg} horizontally within a box of extending @var{length}/2 to the left and right. @@ -1551,10 +1856,9 @@ Add padding @var{amount} around @var{arg} in the X@tie{}direction. ;; property ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (fromproperty layout props symbol) +(define-markup-command (fromproperty layout props symbol) (symbol?) - other - () + #:category other "Read the @var{symbol} from property settings, and produce a stencil from the markup contained within. If @var{symbol} is not defined, it returns an empty markup. @@ -1577,10 +1881,9 @@ returns an empty markup. (interpret-markup layout props m) empty-stencil))) -(define-builtin-markup-command (on-the-fly layout props procedure arg) +(define-markup-command (on-the-fly layout props procedure arg) (symbol? markup?) - other - () + #:category other "Apply the @var{procedure} markup command to @var{arg}. @var{procedure} should take a single argument." (let ((anonymous-with-signature (lambda (layout props arg) (procedure layout props arg)))) @@ -1589,10 +1892,23 @@ returns an empty markup. (list markup?)) (interpret-markup layout props (list anonymous-with-signature arg)))) -(define-builtin-markup-command (override layout props new-prop arg) +(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 + (ly:make-stencil + `(footnote ,(interpret-markup layout props note)) + '(0 . 0) + '(0 . 0)) + 0.0)) + +(define-markup-command (override layout props new-prop arg) (pair? markup?) - other - () + #:category other " @cindex overriding properties within text markup @@ -1624,10 +1940,9 @@ may be any property supported by @rinternals{font-interface}, ;; files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (verbatim-file layout props name) +(define-markup-command (verbatim-file layout props name) (string?) - other - () + #:category other "Read the contents of file @var{name}, and include it verbatim. @lilypond[verbatim,quote] @@ -1648,12 +1963,11 @@ may be any property supported by @rinternals{font-interface}, ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (smaller layout props arg) +(define-markup-command (smaller layout props arg) (markup?) - font - () + #:category font "Decrease the font size relative to the current setting. - + @lilypond[verbatim,quote] \\markup { \\fontsize #3.5 { @@ -1670,10 +1984,9 @@ may be any property supported by @rinternals{font-interface}, (interpret-markup layout props `(,fontsize-markup -1 ,arg))) -(define-builtin-markup-command (larger layout props arg) +(define-markup-command (larger layout props arg) (markup?) - font - () + #:category font "Increase the font size relative to the current setting. @lilypond[verbatim,quote] @@ -1687,10 +2000,9 @@ may be any property supported by @rinternals{font-interface}, (interpret-markup layout props `(,fontsize-markup 1 ,arg))) -(define-builtin-markup-command (finger layout props arg) +(define-markup-command (finger layout props arg) (markup?) - font - () + #:category font "Set @var{arg} as small numbers. @lilypond[verbatim,quote] @@ -1701,13 +2013,12 @@ may be any property supported by @rinternals{font-interface}, } @end lilypond" (interpret-markup layout - (cons '((font-size . -5) (font-encoding . fetaNumber)) props) + (cons '((font-size . -5) (font-encoding . fetaText)) props) arg)) -(define-builtin-markup-command (abs-fontsize layout props size arg) +(define-markup-command (abs-fontsize layout props size arg) (number? markup?) - font - () + #:category font "Use @var{size} as the absolute font size to display @var{arg}. Adjusts @code{baseline-skip} and @code{word-space} accordingly. @@ -1732,12 +2043,12 @@ Adjusts @code{baseline-skip} and @code{word-space} accordingly. props) arg))) -(define-builtin-markup-command (fontsize layout props increment arg) +(define-markup-command (fontsize layout props increment arg) (number? markup?) - font - ((font-size 0) - (word-space 1) - (baseline-skip 2)) + #:category font + #:properties ((font-size 0) + (word-space 1) + (baseline-skip 2)) "Add @var{increment} to the font-size. Adjusts @code{baseline-skip} accordingly. @@ -1755,10 +2066,9 @@ accordingly. (cons 'font-size (+ font-size increment))))) (interpret-markup layout (cons entries props) arg))) -(define-builtin-markup-command (magnify layout props sz arg) +(define-markup-command (magnify layout props sz arg) (number? markup?) - font - () + #:category font " @cindex magnifying text @@ -1782,16 +2092,15 @@ Use @code{\\fontsize} otherwise. } @end lilypond" (interpret-markup - layout + layout (prepend-alist-chain 'font-size (magnification->font-size sz) props) arg)) -(define-builtin-markup-command (bold layout props arg) +(define-markup-command (bold layout props arg) (markup?) - font - () + #:category font "Switch to bold font-series. - + @lilypond[verbatim,quote] \\markup { default @@ -1802,12 +2111,11 @@ Use @code{\\fontsize} otherwise. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-series 'bold props) arg)) -(define-builtin-markup-command (sans layout props arg) +(define-markup-command (sans layout props arg) (markup?) - font - () + #:category font "Switch to the sans serif font family. - + @lilypond[verbatim,quote] \\markup { default @@ -1819,10 +2127,9 @@ Use @code{\\fontsize} otherwise. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-family 'sans props) arg)) -(define-builtin-markup-command (number layout props arg) +(define-markup-command (number layout props arg) (markup?) - font - () + #:category font "Set font family to @code{number}, which yields the font used for time signatures and fingerings. This font contains numbers and some punctuation; it has no letters. @@ -1834,14 +2141,13 @@ some punctuation; it has no letters. } } @end lilypond" - (interpret-markup layout (prepend-alist-chain 'font-encoding 'fetaNumber props) arg)) + (interpret-markup layout (prepend-alist-chain 'font-encoding 'fetaText props) arg)) -(define-builtin-markup-command (roman layout props arg) +(define-markup-command (roman layout props arg) (markup?) - font - () + #:category font "Set font family to @code{roman}. - + @lilypond[verbatim,quote] \\markup { \\sans \\bold { @@ -1857,10 +2163,9 @@ some punctuation; it has no letters. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-family 'roman props) arg)) -(define-builtin-markup-command (huge layout props arg) +(define-markup-command (huge layout props arg) (markup?) - font - () + #:category font "Set font size to +2. @lilypond[verbatim,quote] @@ -1873,10 +2178,9 @@ some punctuation; it has no letters. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-size 2 props) arg)) -(define-builtin-markup-command (large layout props arg) +(define-markup-command (large layout props arg) (markup?) - font - () + #:category font "Set font size to +1. @lilypond[verbatim,quote] @@ -1889,12 +2193,11 @@ some punctuation; it has no letters. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-size 1 props) arg)) -(define-builtin-markup-command (normalsize layout props arg) +(define-markup-command (normalsize layout props arg) (markup?) - font - () + #:category font "Set font size to default. - + @lilypond[verbatim,quote] \\markup { \\teeny { @@ -1910,12 +2213,11 @@ some punctuation; it has no letters. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-size 0 props) arg)) -(define-builtin-markup-command (small layout props arg) +(define-markup-command (small layout props arg) (markup?) - font - () + #:category font "Set font size to -1. - + @lilypond[verbatim,quote] \\markup { default @@ -1926,12 +2228,11 @@ some punctuation; it has no letters. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-size -1 props) arg)) -(define-builtin-markup-command (tiny layout props arg) +(define-markup-command (tiny layout props arg) (markup?) - font - () + #:category font "Set font size to -2. - + @lilypond[verbatim,quote] \\markup { default @@ -1942,12 +2243,11 @@ some punctuation; it has no letters. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-size -2 props) arg)) -(define-builtin-markup-command (teeny layout props arg) +(define-markup-command (teeny layout props arg) (markup?) - font - () + #:category font "Set font size to -3. - + @lilypond[verbatim,quote] \\markup { default @@ -1958,21 +2258,19 @@ some punctuation; it has no letters. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-size -3 props) arg)) -(define-builtin-markup-command (fontCaps layout props arg) +(define-markup-command (fontCaps layout props arg) (markup?) - font - () + #:category font "Set @code{font-shape} to @code{caps} - + Note: @code{\\fontCaps} requires the installation and selection of fonts which support the @code{caps} font shape." (interpret-markup layout (prepend-alist-chain 'font-shape 'caps props) arg)) ;; Poor man's caps -(define-builtin-markup-command (smallCaps layout props arg) +(define-markup-command (smallCaps layout props arg) (markup?) - font - () + #:category font "Emit @var{arg} as small caps. Note: @code{\\smallCaps} does not support accented characters. @@ -2017,10 +2315,9 @@ Note: @code{\\smallCaps} does not support accented characters. (make-small-caps (string->list arg) (list) #f (list)) arg))) -(define-builtin-markup-command (caps layout props arg) +(define-markup-command (caps layout props arg) (markup?) - font - () + #:category font "Copy of the @code{\\smallCaps} command. @lilypond[verbatim,quote] @@ -2034,10 +2331,9 @@ Note: @code{\\smallCaps} does not support accented characters. @end lilypond" (interpret-markup layout props (make-smallCaps-markup arg))) -(define-builtin-markup-command (dynamic layout props arg) +(define-markup-command (dynamic layout props arg) (markup?) - font - () + #:category font "Use the dynamic font. This font only contains @b{s}, @b{f}, @b{m}, @b{z}, @b{p}, and @b{r}. When producing phrases, like @q{pi@`{u}@tie{}@b{f}}, the normal words (like @q{pi@`{u}}) should be @@ -2050,14 +2346,13 @@ done in a different font. The recommended font for this is bold and italic. } @end lilypond" (interpret-markup - layout (prepend-alist-chain 'font-encoding 'fetaDynamic props) arg)) + layout (prepend-alist-chain 'font-encoding 'fetaText props) arg)) -(define-builtin-markup-command (text layout props arg) +(define-markup-command (text layout props arg) (markup?) - font - () + #:category font "Use a text font instead of music symbol or music alphabet font. - + @lilypond[verbatim,quote] \\markup { \\number { @@ -2074,10 +2369,9 @@ done in a different font. The recommended font for this is bold and italic. (interpret-markup layout (prepend-alist-chain 'font-encoding 'latin1 props) arg)) -(define-builtin-markup-command (italic layout props arg) +(define-markup-command (italic layout props arg) (markup?) - font - () + #:category font "Use italic @code{font-shape} for @var{arg}. @lilypond[verbatim,quote] @@ -2090,12 +2384,11 @@ done in a different font. The recommended font for this is bold and italic. @end lilypond" (interpret-markup layout (prepend-alist-chain 'font-shape 'italic props) arg)) -(define-builtin-markup-command (typewriter layout props arg) +(define-markup-command (typewriter layout props arg) (markup?) - font - () + #:category font "Use @code{font-family} typewriter for @var{arg}. - + @lilypond[verbatim,quote] \\markup { default @@ -2107,10 +2400,9 @@ done in a different font. The recommended font for this is bold and italic. (interpret-markup layout (prepend-alist-chain 'font-family 'typewriter props) arg)) -(define-builtin-markup-command (upright layout props arg) +(define-markup-command (upright layout props arg) (markup?) - font - () + #:category font "Set @code{font-shape} to @code{upright}. This is the opposite of @code{italic}. @@ -2130,10 +2422,9 @@ of @code{italic}. (interpret-markup layout (prepend-alist-chain 'font-shape 'upright props) arg)) -(define-builtin-markup-command (medium layout props arg) +(define-markup-command (medium layout props arg) (markup?) - font - () + #:category font "Switch to medium font-series (in contrast to bold). @lilypond[verbatim,quote] @@ -2152,10 +2443,9 @@ of @code{italic}. (interpret-markup layout (prepend-alist-chain 'font-series 'medium props) arg)) -(define-builtin-markup-command (normal-text layout props arg) +(define-markup-command (normal-text layout props arg) (markup?) - font - () + #:category font "Set all font related properties (except the size) to get the default normal text font, no matter what font was used earlier. @@ -2183,10 +2473,35 @@ normal text font, no matter what font was used earlier. ;; symbols. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (doublesharp layout props) - () - music +(define-markup-command (musicglyph layout props glyph-name) + (string?) + #:category music + "@var{glyph-name} is converted to a musical symbol; for example, +@code{\\musicglyph #\"accidentals.natural\"} selects the natural sign from +the music font. See @ruser{The Feta font} for a complete listing of +the possible glyphs. + +@lilypond[verbatim,quote] +\\markup { + \\musicglyph #\"f\" + \\musicglyph #\"rests.2\" + \\musicglyph #\"clefs.G_change\" +} +@end lilypond" + (let* ((font (ly:paper-get-font layout + (cons '((font-encoding . fetaMusic) + (font-name . #f)) + + props))) + (glyph (ly:font-get-glyph font glyph-name))) + (if (null? (ly:stencil-expr glyph)) + (ly:warning (_ "Cannot find glyph ~a") glyph-name)) + + glyph)) + +(define-markup-command (doublesharp layout props) () + #:category music "Draw a double sharp symbol. @lilypond[verbatim,quote] @@ -2196,10 +2511,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get 1 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (sesquisharp layout props) - () - music +(define-markup-command (sesquisharp layout props) () + #:category music "Draw a 3/2 sharp symbol. @lilypond[verbatim,quote] @@ -2207,12 +2521,11 @@ normal text font, no matter what font was used earlier. \\sesquisharp } @end lilypond" - (interpret-markup layout props (markup #:musicglyph (assoc-get 3/4 standard-alteration-glyph-name-alist "")))) + (interpret-markup layout props (markup #:musicglyph (assoc-get 3/4 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (sharp layout props) - () - music +(define-markup-command (sharp layout props) () + #:category music "Draw a sharp symbol. @lilypond[verbatim,quote] @@ -2222,10 +2535,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get 1/2 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (semisharp layout props) - () - music +(define-markup-command (semisharp layout props) () + #:category music "Draw a semisharp symbol. @lilypond[verbatim,quote] @@ -2235,10 +2547,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get 1/4 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (natural layout props) - () - music +(define-markup-command (natural layout props) () + #:category music "Draw a natural symbol. @lilypond[verbatim,quote] @@ -2248,10 +2559,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get 0 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (semiflat layout props) - () - music +(define-markup-command (semiflat layout props) () + #:category music "Draw a semiflat symbol. @lilypond[verbatim,quote] @@ -2261,10 +2571,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get -1/4 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (flat layout props) - () - music +(define-markup-command (flat layout props) () + #:category music "Draw a flat symbol. @lilypond[verbatim,quote] @@ -2274,10 +2583,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get -1/2 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (sesquiflat layout props) - () - music +(define-markup-command (sesquiflat layout props) () + #:category music "Draw a 3/2 flat symbol. @lilypond[verbatim,quote] @@ -2287,10 +2595,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get -3/4 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (doubleflat layout props) - () - music +(define-markup-command (doubleflat layout props) () + #:category music "Draw a double flat symbol. @lilypond[verbatim,quote] @@ -2300,10 +2607,9 @@ normal text font, no matter what font was used earlier. @end lilypond" (interpret-markup layout props (markup #:musicglyph (assoc-get -1 standard-alteration-glyph-name-alist "")))) -(define-builtin-markup-command (with-color layout props color arg) +(define-markup-command (with-color layout props color arg) (color? markup?) - other - () + #:category other " @cindex coloring text @@ -2325,15 +2631,14 @@ Draw @var{arg} in color specified by @var{color}. (ly:make-stencil (list 'color color (ly:stencil-expr stil)) (ly:stencil-extent stil X) (ly:stencil-extent stil Y)))) - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; glyphs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (arrow-head layout props axis dir filled) +(define-markup-command (arrow-head layout props axis dir filled) (integer? ly:dir? boolean?) - graphic - () + #:category graphic "Produce an arrow head in specified direction and axis. Use the filled head if @var{filled} is specified. @lilypond[verbatim,quote] @@ -2361,40 +2666,11 @@ Use the filled head if @var{filled} is specified. props)) name))) -(define-builtin-markup-command (musicglyph layout props glyph-name) +(define-markup-command (lookup layout props glyph-name) (string?) - music - () - "@var{glyph-name} is converted to a musical symbol; for example, -@code{\\musicglyph #\"accidentals.natural\"} selects the natural sign from -the music font. See @ruser{The Feta font} for a complete listing of -the possible glyphs. - -@lilypond[verbatim,quote] -\\markup { - \\musicglyph #\"f\" - \\musicglyph #\"rests.2\" - \\musicglyph #\"clefs.G_change\" -} -@end lilypond" - (let* ((font (ly:paper-get-font layout - (cons '((font-encoding . fetaMusic) - (font-name . #f)) - - props))) - (glyph (ly:font-get-glyph font glyph-name))) - (if (null? (ly:stencil-expr glyph)) - (ly:warning (_ "Cannot find glyph ~a") glyph-name)) - - glyph)) - - -(define-builtin-markup-command (lookup layout props glyph-name) - (string?) - other - () + #:category other "Lookup a glyph by name. - + @lilypond[verbatim,quote] \\markup { \\override #'(font-encoding . fetaBraces) { @@ -2408,10 +2684,9 @@ the possible glyphs. (ly:font-get-glyph (ly:paper-get-font layout props) glyph-name)) -(define-builtin-markup-command (char layout props num) +(define-markup-command (char layout props num) (integer?) - other - () + #:category other "Produce a single character. Characters encoded in hexadecimal format require the prefix @code{#x}. @@ -2438,16 +2713,15 @@ format require the prefix @code{#x}. (define (number->markletter-string vec n) "Double letters for big marks." (let* ((lst (vector-length vec))) - + (if (>= n lst) (string-append (number->markletter-string vec (1- (quotient n lst))) (number->markletter-string vec (remainder n lst))) (make-string 1 (vector-ref vec n))))) -(define-builtin-markup-command (markletter layout props num) +(define-markup-command (markletter layout props num) (integer?) - other - () + #:category other "Make a markup letter for @var{num}. The letters start with A to@tie{}Z (skipping letter@tie{}I), and continue with double letters. @@ -2461,10 +2735,9 @@ format require the prefix @code{#x}. (ly:text-interface::interpret-markup layout props (number->markletter-string number->mark-letter-vector num))) -(define-builtin-markup-command (markalphabet layout props num) +(define-markup-command (markalphabet layout props num) (integer?) - other - () + #:category other "Make a markup letter for @var{num}. The letters start with A to@tie{}Z and continue with double letters. @@ -2515,7 +2788,7 @@ and continue with double letters. ; backward slashes might use slope and point in the other direction! (dy (* mag (if forward 0.4 -0.4))) (number-stencil (interpret-markup layout - (prepend-alist-chain 'font-encoding 'fetaNumber props) + (prepend-alist-chain 'font-encoding 'fetaText props) (number->string num))) (num-x (horizontal-slash-interval num forward (ly:stencil-extent number-stencil X) mag)) (center (interval-center (ly:stencil-extent number-stencil Y))) @@ -2524,7 +2797,7 @@ and continue with double letters. (num-y (interval-widen (cons center center) (abs dy))) (is-sane (and (interval-sane? num-x) (interval-sane? num-y))) (slash-stencil (if is-sane - (make-line-stencil thickness + (make-line-stencil thickness (car num-x) (- (interval-center num-y) dy) (cdr num-x) (+ (interval-center num-y) dy)) #f))) @@ -2539,11 +2812,11 @@ and continue with double letters. number-stencil)) -(define-builtin-markup-command (slashed-digit layout props num) +(define-markup-command (slashed-digit layout props num) (integer?) - other - ((font-size 0) - (thickness 1.6)) + #:category other + #:properties ((font-size 0) + (thickness 1.6)) " @cindex slashed digits @@ -2559,11 +2832,11 @@ figured bass notation. @end lilypond" (slashed-digit-internal layout props num #t font-size thickness)) -(define-builtin-markup-command (backslashed-digit layout props num) +(define-markup-command (backslashed-digit layout props num) (integer?) - other - ((font-size 0) - (thickness 1.6)) + #:category other + #:properties ((font-size 0) + (thickness 1.6)) " @cindex backslashed digits @@ -2579,17 +2852,108 @@ figured bass notation. @end lilypond" (slashed-digit-internal layout props num #f font-size thickness)) +;; eyeglasses +(define eyeglassespath + '((moveto 0.42 0.77) + (rcurveto 0 0.304 -0.246 0.55 -0.55 0.55) + (rcurveto -0.304 0 -0.55 -0.246 -0.55 -0.55) + (rcurveto 0 -0.304 0.246 -0.55 0.55 -0.55) + (rcurveto 0.304 0 0.55 0.246 0.55 0.55) + (closepath) + (moveto 2.07 0.77) + (rcurveto 0 0.304 -0.246 0.55 -0.55 0.55) + (rcurveto -0.304 0 -0.55 -0.246 -0.55 -0.55) + (rcurveto 0 -0.304 0.246 -0.55 0.55 -0.55) + (rcurveto 0.304 0 0.55 0.246 0.55 0.55) + (closepath) + (moveto 1.025 0.935) + (rcurveto 0 0.182 -0.148 0.33 -0.33 0.33) + (rcurveto -0.182 0 -0.33 -0.148 -0.33 -0.33) + (moveto -0.68 0.77) + (rlineto 0.66 1.43) + (rcurveto 0.132 0.286 0.55 0.44 0.385 -0.33) + (moveto 2.07 0.77) + (rlineto 0.66 1.43) + (rcurveto 0.132 0.286 0.55 0.44 0.385 -0.33))) + +(define-markup-command (eyeglasses layout props) + () + #:category other + "Prints out eyeglasses, indicating strongly to look at the conductor. +@lilypond[verbatim,quote] +\\markup { \\eyeglasses } +@end lilypond" + (interpret-markup layout props + (make-override-markup '(line-cap-style . butt) + (make-path-markup 0.15 eyeglassespath)))) + +(define-markup-command (left-brace layout props size) + (number?) + #:category other + " +A feta brace in point size @var{size}. + +@lilypond[verbatim,quote] +\\markup { + \\left-brace #35 + \\hspace #2 + \\left-brace #45 +} +@end lilypond" + (let* ((font (ly:paper-get-font layout + (cons '((font-encoding . fetaBraces) + (font-name . #f)) + props))) + (glyph-count (1- (ly:otf-glyph-count font))) + (scale (ly:output-def-lookup layout 'output-scale)) + (scaled-size (/ (ly:pt size) scale)) + (glyph (lambda (n) + (ly:font-get-glyph font (string-append "brace" + (number->string n))))) + (get-y-from-brace (lambda (brace) + (interval-length + (ly:stencil-extent (glyph brace) Y)))) + (find-brace (binary-search 0 glyph-count get-y-from-brace scaled-size)) + (glyph-found (glyph find-brace))) + + (if (or (null? (ly:stencil-expr glyph-found)) + (< scaled-size (interval-length (ly:stencil-extent (glyph 0) Y))) + (> scaled-size (interval-length + (ly:stencil-extent (glyph glyph-count) Y)))) + (begin + (ly:warning (_ "no brace found for point size ~S ") size) + (ly:warning (_ "defaulting to ~S pt") + (/ (* scale (interval-length + (ly:stencil-extent glyph-found Y))) + (ly:pt 1))))) + glyph-found)) + +(define-markup-command (right-brace layout props size) + (number?) + #:category other + " +A feta brace in point size @var{size}, rotated 180 degrees. + +@lilypond[verbatim,quote] +\\markup { + \\right-brace #45 + \\hspace #2 + \\right-brace #35 +} +@end lilypond" + (interpret-markup layout props (markup #:rotate 180 #:left-brace size))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; the note command. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; TODO: better syntax. -(define-builtin-markup-command (note-by-number layout props log dot-count dir) +(define-markup-command (note-by-number layout props log dot-count dir) (number? number? number?) - music - ((font-size 0) - (style '())) + #:category music + #:properties ((font-size 0) + (style '())) " @cindex notes within text by log and dot-count @@ -2605,25 +2969,36 @@ Construct a note symbol, with stem. By using fractional values for @end lilypond" (define (get-glyph-name-candidates dir log style) (map (lambda (dir-name) - (format "noteheads.~a~a~a" dir-name (min log 2) - (if (and (symbol? style) - (not (equal? 'default style))) - (symbol->string style) - ""))) + (format "noteheads.~a~a" dir-name + (if (and (symbol? style) + (not (equal? 'default style))) + (select-head-glyph style (min log 2)) + (min log 2)))) (list (if (= dir UP) "u" "d") "s"))) - + (define (get-glyph-name font cands) (if (null? cands) - "" - (if (ly:stencil-empty? (ly:font-get-glyph font (car cands))) - (get-glyph-name font (cdr cands)) - (car cands)))) - - (let* ((font (ly:paper-get-font layout (cons '((font-encoding . fetaMusic)) props))) + "" + (if (ly:stencil-empty? (ly:font-get-glyph font (car cands))) + (get-glyph-name font (cdr cands)) + (car cands)))) + + (let* ((font (ly:paper-get-font layout (cons '((font-encoding . fetaMusic)) + props))) (size-factor (magstep font-size)) - (stem-length (* size-factor (max 3 (- log 1)))) - (head-glyph-name (get-glyph-name font (get-glyph-name-candidates (sign dir) log style))) + (stem-length (* size-factor (max 3 (- log 1)))) + (head-glyph-name + (let ((result (get-glyph-name font (get-glyph-name-candidates + (sign dir) log style)))) + (if (string-null? result) + ;; If no glyph name can be found, select default heads. Though + ;; this usually means an unsupported style has been chosen, it + ;; also prevents unrelated 'style settings from other grobs + ;; (e.g., TextSpanner and TimeSignature) leaking into markup. + (get-glyph-name font (get-glyph-name-candidates + (sign dir) log 'default)) + result))) (head-glyph (ly:font-get-glyph font head-glyph-name)) (attach-indices (ly:note-head::stem-attachment font head-glyph-name)) (stem-thickness (* size-factor 0.13)) @@ -2631,18 +3006,19 @@ Construct a note symbol, with stem. By using fractional values for (attach-off (cons (interval-index (ly:stencil-extent head-glyph X) (* (sign dir) (car attach-indices))) - (* (sign dir) ; fixme, this is inconsistent between X & Y. + (* (sign dir) ; fixme, this is inconsistent between X & Y. (interval-index (ly:stencil-extent head-glyph Y) (cdr attach-indices))))) (stem-glyph (and (> log 0) (ly:round-filled-box (ordered-cons (car attach-off) - (+ (car attach-off) (* (- (sign dir)) stem-thickness))) + (+ (car attach-off) + (* (- (sign dir)) stem-thickness))) (cons (min stemy (cdr attach-off)) (max stemy (cdr attach-off))) (/ stem-thickness 3)))) - + (dot (ly:font-get-glyph font "dots.dot")) (dotwid (interval-length (ly:stencil-extent dot X))) (dots (and (> dot-count 0) @@ -2657,11 +3033,15 @@ Construct a note symbol, with stem. By using fractional values for (string-append "flags." (if (> dir 0) "u" "d") (number->string log))) - (cons (+ (car attach-off) (if (< dir 0) stem-thickness 0)) stemy))))) - - ; If there is a flag on an upstem and the stem is short, move the dots to avoid the flag. - ; 16th notes get a special case because their flags hang lower than any other flags. - (if (and dots (> dir 0) (> log 2) (or (< dir 1.15) (and (= log 4) (< dir 1.3)))) + (cons (+ (car attach-off) (if (< dir 0) + stem-thickness 0)) + stemy))))) + + ;; If there is a flag on an upstem and the stem is short, move the dots + ;; to avoid the flag. 16th notes get a special case because their flags + ;; hang lower than any other flags. + (if (and dots (> dir 0) (> log 2) + (or (< dir 1.15) (and (= log 4) (< dir 1.3)))) (set! dots (ly:stencil-translate-axis dots 0.5 X))) (if flaggl (set! stem-glyph (ly:stencil-add flaggl stem-glyph))) @@ -2678,15 +3058,17 @@ Construct a note symbol, with stem. By using fractional values for stem-glyph))) stem-glyph)) -(define-public log2 +(define-public log2 (let ((divisor (log 2))) (lambda (z) (inexact->exact (/ (log z) divisor))))) (define (parse-simple-duration duration-string) - "Parse the `duration-string', e.g. ''4..'' or ''breve.'', and return a (log dots) list." - (let ((match (regexp-exec (make-regexp "(breve|longa|maxima|[0-9]+)(\\.*)") duration-string))) + "Parse the `duration-string', e.g. ''4..'' or ''breve.'', +and return a (log dots) list." + (let ((match (regexp-exec (make-regexp "(breve|longa|maxima|[0-9]+)(\\.*)") + duration-string))) (if (and match (string=? duration-string (match:substring match 0))) - (let ((len (match:substring match 1)) + (let ((len (match:substring match 1)) (dots (match:substring match 2))) (list (cond ((string=? len "breve") -1) ((string=? len "longa") -2) @@ -2695,10 +3077,10 @@ Construct a note symbol, with stem. By using fractional values for (if dots (string-length dots) 0))) (ly:error (_ "not a valid duration string: ~a") duration-string)))) -(define-builtin-markup-command (note layout props duration dir) +(define-markup-command (note layout props duration dir) (string? number?) - music - (note-by-number-markup) + #:category music + #:properties (note-by-number-markup) " @cindex notes within text by string @@ -2723,10 +3105,9 @@ a shortened down stem. ;; translating. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (lower layout props amount arg) +(define-markup-command (lower layout props amount arg) (number? markup?) - align - () + #:category align " @cindex lowering text @@ -2744,10 +3125,10 @@ A negative @var{amount} indicates raising; see also @code{\\raise}. (ly:stencil-translate-axis (interpret-markup layout props arg) (- amount) Y)) -(define-builtin-markup-command (translate-scaled layout props offset arg) +(define-markup-command (translate-scaled layout props offset arg) (number-pair? markup?) - align - ((font-size 0)) + #:category align + #:properties ((font-size 0)) " @cindex translating text @cindex scaling text @@ -2770,13 +3151,12 @@ Translate @var{arg} by @var{offset}, scaling the offset by the (ly:stencil-translate (interpret-markup layout props arg) scaled))) -(define-builtin-markup-command (raise layout props amount arg) +(define-markup-command (raise layout props amount arg) (number? markup?) - align - () + #:category align " @cindex raising text - + Raise @var{arg} by the distance @var{amount}. A negative @var{amount} indicates lowering, see also @code{\\lower}. @@ -2801,10 +3181,10 @@ and/or @code{extra-offset} properties. @end lilypond" (ly:stencil-translate-axis (interpret-markup layout props arg) amount Y)) -(define-builtin-markup-command (fraction layout props arg1 arg2) +(define-markup-command (fraction layout props arg1 arg2) (markup? markup?) - other - ((font-size 0)) + #:category other + #:properties ((font-size 0)) " @cindex creating text fractions @@ -2837,10 +3217,10 @@ Make a fraction of two markups. ;; empirical anyway (ly:stencil-translate-axis stack offset Y)))) -(define-builtin-markup-command (normal-size-super layout props arg) +(define-markup-command (normal-size-super layout props arg) (markup?) - font - ((baseline-skip)) + #:category font + #:properties ((baseline-skip)) " @cindex setting superscript in standard font size @@ -2858,12 +3238,12 @@ Set @var{arg} in superscript with a normal font size. (interpret-markup layout props arg) (* 0.5 baseline-skip) Y)) -(define-builtin-markup-command (super layout props arg) +(define-markup-command (super layout props arg) (markup?) - font - ((font-size 0) - (baseline-skip)) - " + #:category font + #:properties ((font-size 0) + (baseline-skip)) + " @cindex superscript text Set @var{arg} in superscript. @@ -2886,13 +3266,12 @@ Set @var{arg} in superscript. (* 0.5 baseline-skip) Y)) -(define-builtin-markup-command (translate layout props offset arg) +(define-markup-command (translate layout props offset arg) (number-pair? markup?) - align - () + #:category align " @cindex translating text - + Translate @var{arg} relative to its surroundings. @var{offset} is a pair of numbers representing the displacement in the X and Y axis. @@ -2906,11 +3285,11 @@ is a pair of numbers representing the displacement in the X and Y axis. (ly:stencil-translate (interpret-markup layout props arg) offset)) -(define-builtin-markup-command (sub layout props arg) +(define-markup-command (sub layout props arg) (markup?) - font - ((font-size 0) - (baseline-skip)) + #:category font + #:properties ((font-size 0) + (baseline-skip)) " @cindex subscript text @@ -2935,10 +3314,10 @@ Set @var{arg} in subscript. (* -0.5 baseline-skip) Y)) -(define-builtin-markup-command (normal-size-sub layout props arg) +(define-markup-command (normal-size-sub layout props arg) (markup?) - font - ((baseline-skip)) + #:category font + #:properties ((baseline-skip)) " @cindex setting subscript in standard font size @@ -2956,18 +3335,17 @@ Set @var{arg} in subscript with a normal font size. (interpret-markup layout props arg) (* -0.5 baseline-skip) Y)) - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; brackets. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (hbracket layout props arg) +(define-markup-command (hbracket layout props arg) (markup?) - graphic - () + #:category graphic " @cindex placing horizontal brackets around text - + Draw horizontal brackets around @var{arg}. @lilypond[verbatim,quote] @@ -2983,13 +3361,12 @@ Draw horizontal brackets around @var{arg}. (m (interpret-markup layout props arg))) (bracketify-stencil m X th (* 2.5 th) th))) -(define-builtin-markup-command (bracket layout props arg) +(define-markup-command (bracket layout props arg) (markup?) - graphic - () + #:category graphic " @cindex placing vertical brackets around text - + Draw vertical brackets around @var{arg}. @lilypond[verbatim,quote] @@ -3002,15 +3379,61 @@ Draw vertical brackets around @var{arg}. (let ((th 0.1) ;; todo: take from GROB. (m (interpret-markup layout props arg))) (bracketify-stencil m Y th (* 2.5 th) th))) + +(define-markup-command (parenthesize layout props arg) + (markup?) + #:category graphic + #:properties ((angularity 0) + (padding) + (size 1) + (thickness 1) + (width 0.25)) + " +@cindex placing parentheses around text + +Draw parentheses around @var{arg}. This is useful for parenthesizing +a column containing several lines of text. + +@lilypond[verbatim,quote] +\\markup { + \\line { + \\parenthesize { + \\column { + foo + bar + } + } + \\override #'(angularity . 2) { + \\parenthesize { + \\column { + bah + baz + } + } + } + } +} +@end lilypond" + (let* ((markup (interpret-markup layout props arg)) + (scaled-width (* size width)) + (scaled-thickness + (* (chain-assoc-get 'line-thickness props 0.1) + thickness)) + (half-thickness + (min (* size 0.5 scaled-thickness) + (* (/ 4 3.0) scaled-width))) + (padding (chain-assoc-get 'padding props half-thickness))) + (parenthesize-stencil + markup half-thickness scaled-width angularity padding))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Delayed markup evaluation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-builtin-markup-command (page-ref layout props label gauge default) +(define-markup-command (page-ref layout props label gauge default) (symbol? markup? markup?) - other - () + #:category other " @cindex referencing page numbers in text @@ -3025,8 +3448,9 @@ when @var{label} is not found." `(delay-stencil-evaluation ,(delay (ly:stencil-expr (let* ((table (ly:output-def-lookup layout 'label-page-table)) - (label-page (and (list? table) (assoc label table))) - (page-number (and label-page (cdr label-page))) + (page-number (if (list? table) + (assoc-get label table) + #f)) (page-markup (if page-number (format "~a" page-number) default)) (page-stencil (interpret-markup layout props page-markup)) (gap (- (interval-length x-ext) @@ -3035,7 +3459,114 @@ when @var{label} is not found." (markup #:concat (#:hspace gap page-markup))))))) x-ext y-ext))) - + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scaling +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-markup-command (scale layout props factor-pair arg) + (number-pair? markup?) + #:category graphic + " +@cindex scaling markup +@cindex mirroring markup + +Scale @var{arg}. @var{factor-pair} is a pair of numbers +representing the scaling-factor in the X and Y axes. +Negative values may be used to produce mirror images. + +@lilypond[verbatim,quote] +\\markup { + \\line { + \\scale #'(2 . 1) + stretched + \\scale #'(1 . -1) + mirrored + } +} +@end lilypond" + (let ((stil (interpret-markup layout props arg)) + (sx (car factor-pair)) + (sy (cdr factor-pair))) + (ly:stencil-scale stil sx sy))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Repeating +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-markup-command (pattern layout props count axis space pattern) + (integer? integer? number? markup?) + #:category other + " +Prints @var{count} times a @var{pattern} markup. +Patterns are spaced apart by @var{space}. +Patterns are distributed on @var{axis}. + +@lilypond[verbatim, quote] +\\markup \\column { + \"Horizontally repeated :\" + \\pattern #7 #X #2 \\flat + \\null + \"Vertically repeated :\" + \\pattern #3 #Y #0.5 \\flat +} +@end lilypond" + (let ((pattern-width (interval-length + (ly:stencil-extent (interpret-markup layout props pattern) X))) + (new-props (prepend-alist-chain 'word-space 0 (prepend-alist-chain 'baseline-skip 0 props)))) + (let loop ((i (1- count)) (patterns (markup))) + (if (zero? i) + (interpret-markup + layout + new-props + (if (= axis X) + (markup patterns pattern) + (markup #:column (patterns pattern)))) + (loop (1- i) + (if (= axis X) + (markup patterns pattern #:hspace space) + (markup #:column (patterns pattern #:vspace space)))))))) + +(define-markup-command (fill-with-pattern layout props space dir pattern left right) + (number? ly:dir? markup? markup? markup?) + #:category align + #:properties ((word-space) + (line-width)) + " +Put @var{left} and @var{right} in a horizontal line of width @code{line-width} +with a line of markups @var{pattern} in between. +Patterns are spaced apart by @var{space}. +Patterns are aligned to the @var{dir} markup. + +@lilypond[verbatim, quote] +\\markup \\column { + \"right-aligned :\" + \\fill-with-pattern #1 #RIGHT . first right + \\fill-with-pattern #1 #RIGHT . second right + \\null + \"center-aligned :\" + \\fill-with-pattern #1.5 #CENTER - left right + \\null + \"left-aligned :\" + \\override #'(line-width . 50) \\fill-with-pattern #2 #LEFT : left first + \\override #'(line-width . 50) \\fill-with-pattern #2 #LEFT : left second +} +@end lilypond" + (let* ((pattern-x-extent (ly:stencil-extent (interpret-markup layout props pattern) X)) + (pattern-width (interval-length pattern-x-extent)) + (left-width (interval-length (ly:stencil-extent (interpret-markup layout props left) X))) + (right-width (interval-length (ly:stencil-extent (interpret-markup layout props right) X))) + (middle-width (max 0 (- line-width (+ (+ left-width right-width) (* word-space 2))))) + (period (+ space pattern-width)) + (count (truncate (/ (- middle-width pattern-width) period))) + (x-offset (+ (* (- (- middle-width (* count period)) pattern-width) (/ (1+ dir) 2)) (abs (car pattern-x-extent))))) + (interpret-markup layout props + (markup left + #:with-dimensions (cons 0 middle-width) '(0 . 0) + #:translate (cons x-offset 0) + #:pattern (1+ count) X space pattern + right)))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Markup list commands ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -3061,10 +3592,10 @@ when @var{label} is not found." dy-top))))) (space-stil (cdr stils) (cons new-stil result)))))) -(define-builtin-markup-list-command (justified-lines layout props args) +(define-markup-list-command (justified-lines layout props args) (markup-list?) - ((baseline-skip) - wordwrap-internal-markup-list) + #:properties ((baseline-skip) + wordwrap-internal-markup-list) " @cindex justifying lines of text @@ -3075,10 +3606,10 @@ Use @code{\\override-lines #'(line-width . @var{X})} to set the line width; (interpret-markup-list layout props (make-wordwrap-internal-markup-list #t args)))) -(define-builtin-markup-list-command (wordwrap-lines layout props args) +(define-markup-list-command (wordwrap-lines layout props args) (markup-list?) - ((baseline-skip) - wordwrap-internal-markup-list) + #:properties ((baseline-skip) + wordwrap-internal-markup-list) "Like @code{\\wordwrap}, but return a list of lines instead of a single markup. Use @code{\\override-lines #'(line-width . @var{X})} to set the line width, where @var{X} is the number of staff spaces." @@ -3086,16 +3617,15 @@ where @var{X} is the number of staff spaces." (interpret-markup-list layout props (make-wordwrap-internal-markup-list #f args)))) -(define-builtin-markup-list-command (column-lines layout props args) +(define-markup-list-command (column-lines layout props args) (markup-list?) - ((baseline-skip)) + #:properties ((baseline-skip)) "Like @code{\\column}, but return a list of lines instead of a single markup. @code{baseline-skip} determines the space between each markup in @var{args}." - (space-lines (chain-assoc-get 'baseline-skip props) + (space-lines baseline-skip (interpret-markup-list layout props args))) -(define-builtin-markup-list-command (override-lines layout props new-prop args) +(define-markup-list-command (override-lines layout props new-prop args) (pair? markup-list?) - () "Like @code{\\override}, for markup lists." (interpret-markup-list layout (cons (list new-prop) props) args)) diff --git a/scm/define-music-callbacks.scm b/scm/define-music-callbacks.scm new file mode 100644 index 0000000000..0cbd96b862 --- /dev/null +++ b/scm/define-music-callbacks.scm @@ -0,0 +1,89 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys +;;;; Jan Nieuwenhuizen +;;;; Neil Puttock +;;;; Carl Sorensen +;;;; +;;;; 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 . + +;; TODO: should link back into user manual. + +(define (mm-rest-child-list music) + "Generate events for multimeasure rests, +to be used by the sequential-iterator" + (let ((location (ly:music-property music 'origin)) + (duration (ly:music-property music 'duration))) + (list (make-music 'BarCheck + 'origin location) + (make-event-chord (cons (make-music 'MultiMeasureRestEvent + 'origin location + 'duration duration) + (ly:music-property music 'articulations))) + (make-music 'BarCheck + 'origin location)))) + +(define (make-ottava-set music) + "Set context properties for an ottava bracket." + (let ((octavation (ly:music-property music 'ottava-number))) + + (list (context-spec-music + (make-apply-context + (lambda (context) + (let ((offset (* -7 octavation)) + (string (assoc-get octavation '((2 . "15ma") + (1 . "8va") + (0 . #f) + (-1 . "8vb") + (-2 . "15mb"))))) + (set! (ly:context-property context 'middleCOffset) offset) + (set! (ly:context-property context 'ottavation) string) + (ly:set-middle-C! context)))) + 'Staff)))) + +(define (make-time-signature-set music) + "Set context properties for a time signature." + (let* ((num (ly:music-property music 'numerator)) + (den (ly:music-property music 'denominator)) + (structure (ly:music-property music 'beat-structure)) + (fraction (cons num den))) + (list (descend-to-context + (context-spec-music + (make-apply-context + (lambda (context) + (let* ((time-signature-settings + (ly:context-property context 'timeSignatureSettings)) + (my-base-fraction + (base-fraction fraction time-signature-settings)) + (my-beat-structure + (if (null? structure) + (beat-structure my-base-fraction + fraction + time-signature-settings) + structure)) + (beaming-exception + (beam-exceptions fraction time-signature-settings)) + (new-measure-length (ly:make-moment num den))) + (ly:context-set-property! + context 'timeSignatureFraction fraction) + (ly:context-set-property! + context 'baseMoment (fraction->moment my-base-fraction)) + (ly:context-set-property! + context 'beatStructure my-beat-structure) + (ly:context-set-property! + context 'beamExceptions beaming-exception) + (ly:context-set-property! + context 'measureLength new-measure-length)))) + 'Timing) + 'Score)))) diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index 9a3a4c1069..c0041ba2a9 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -1,7 +1,7 @@ ;;; define-music-display-methods.scm -- data for displaying music ;;; expressions using LilyPond notation. ;;; -;;; (c) 2005--2009 Nicolas Sceaux +;;; Copyright (C) 2005--2011 Nicolas Sceaux ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -16,7 +16,8 @@ ;;; (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)) @@ -37,7 +38,8 @@ ;;; (define-public (markup->lily-string markup-expr) - "Return a string describing, in LilyPond syntax, the given markup expression." + "Return a string describing, in LilyPond syntax, the given markup +expression." (define (proc->command proc) (let ((cmd-markup (symbol->string (procedure-name proc)))) (substring cmd-markup 0 (- (string-length cmd-markup) @@ -81,7 +83,7 @@ (if (and (car alist) (test item (cdar alist))) (set! result (car alist))))) -(define (note-name->lily-string ly-pitch parser) +(define-public (note-name->lily-string ly-pitch parser) ;; here we define a custom pitch= function, since we do not want to ;; test whether octaves are also equal. (otherwise, we would be using equal?) (define (pitch= pitch1 pitch2) @@ -92,7 +94,7 @@ (car result) #f))) -(define (octave->lily-string pitch) +(define-public (octave->lily-string pitch) (let ((octave (ly:pitch-octave pitch))) (cond ((>= octave 0) (make-string (1+ octave) #\')) @@ -103,7 +105,7 @@ ;;; ;;; durations ;;; -(define* (duration->lily-string ly-duration #:key (prev-duration (*previous-duration*)) +(define*-public (duration->lily-string ly-duration #:key (prev-duration (*previous-duration*)) (force-duration (*force-duration*)) (time-factor-numerator (*time-factor-numerator*)) (time-factor-denominator (*time-factor-denominator*))) @@ -134,33 +136,37 @@ ;;; post events ;;; -(define post-event? (make-music-type-predicate - 'StringNumberEvent - 'ArticulationEvent - 'FingeringEvent - 'TextScriptEvent - 'MultiMeasureTextEvent - 'HyphenEvent - 'ExtenderEvent - 'BeamEvent - 'SlurEvent - 'TieEvent - 'CrescendoEvent - 'DecrescendoEvent - 'PhrasingSlurEvent - 'TremoloEvent - 'SustainEvent - 'SostenutoEvent - 'TextSpanEvent - 'HarmonicEvent - 'BeamForbidEvent - 'AbsoluteDynamicEvent - 'TupletSpanEvent - 'TrillSpanEvent - 'GlissandoEvent - 'ArpeggioEvent - 'NoteGroupingEvent - 'UnaCordaEvent)) +(define post-event? + (make-music-type-predicate + 'AbsoluteDynamicEvent + 'ArpeggioEvent + 'ArticulationEvent + 'BeamEvent + 'BeamForbidEvent + 'BendAfterEvent + 'CrescendoEvent + 'DecrescendoEvent + 'EpisemaEvent + 'ExtenderEvent + 'FingeringEvent + 'GlissandoEvent + 'HarmonicEvent + 'HyphenEvent + 'MultiMeasureTextEvent + 'NoteGroupingEvent + 'PhrasingSlurEvent + 'SlurEvent + 'SostenutoEvent + 'StringNumberEvent + 'StrokeFingerEvent + 'SustainEvent + 'TextScriptEvent + 'TextSpanEvent + 'TieEvent + 'TremoloEvent + 'TrillSpanEvent + 'TupletSpanEvent + 'UnaCordaEvent)) (define* (event-direction->lily-string event #:optional (required #t)) (let ((direction (ly:music-property event 'direction))) @@ -223,16 +229,23 @@ (define-post-event-display-method MultiMeasureTextEvent (event parser) #t (markup->lily-string (ly:music-property event 'text))) +(define-post-event-display-method BendAfterEvent (event parser) #t + (format #f "\\bendAfter #~a" (ly:music-property event 'delta-step))) + (define-post-event-display-method HarmonicEvent (event parser) #f "\\harmonic") (define-post-event-display-method GlissandoEvent (event parser) #t "\\glissando") (define-post-event-display-method ArpeggioEvent (event parser) #t "\\arpeggio") (define-post-event-display-method AbsoluteDynamicEvent (event parser) #f (format #f "\\~a" (ly:music-property event 'text))) +(define-post-event-display-method StrokeFingerEvent (event parser) #t + (format #f "\\rightHandFinger #~a" (ly:music-property event 'digit))) + (define-span-event-display-method BeamEvent (event parser) #f "[" "]") (define-span-event-display-method SlurEvent (event parser) #f "(" ")") (define-span-event-display-method CrescendoEvent (event parser) #f "\\<" "\\!") (define-span-event-display-method DecrescendoEvent (event parser) #f "\\>" "\\!") +(define-span-event-display-method EpisemaEvent (event parser) #f "\\episemInitium" "\\episemFinis") (define-span-event-display-method PhrasingSlurEvent (event parser) #f "\\(" "\\)") (define-span-event-display-method SustainEvent (event parser) #f "\\sustainOn" "\\sustainOff") (define-span-event-display-method SostenutoEvent (event parser) #f "\\sostenutoOn" "\\sostenutoOff") @@ -275,7 +288,7 @@ (music 'SlurEvent span-direction START)))))) - #t) + #t) (with-music-match (?stop (music 'SequentialMusic elements ((music @@ -317,7 +330,7 @@ grob-property-path '(stroke-style) grob-value "grace" symbol 'Stem))))) - #t) + #t) (with-music-match (?stop (music 'SequentialMusic elements ((music @@ -449,12 +462,14 @@ Otherwise, return #f." (music->lily-string (car elements) parser) (if (and (not (null? simple-elements)) (null? (cdr simple-elements)) - ;; special case: if this simple_element has a HarmonicEvent in its - ;; 'articulations list, it should be interpreted instead as a - ;; note_chord_element, since \harmonic only works inside chords, - ;; even for single notes, e.g., < c\harmonic > - (null? (filter (make-music-type-predicate 'HarmonicEvent) - (ly:music-property (car simple-elements) 'articulations)))) + ;; special case: if this simple_element has any post_events in + ;; its 'articulations list, it should be interpreted instead + ;; 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))) + ;; 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)) @@ -505,6 +520,9 @@ Otherwise, return #f." (define-display-method SkipMusic (skip parser) (format #f "\\skip ~a" (duration->lily-string (ly:music-property skip 'duration) #:force-duration #t))) +(define-display-method OttavaMusic (ottava parser) + (format #f "\\ottava #~a" (ly:music-property ottava 'ottava-number))) + ;;; ;;; Notes, rests, skips... ;;; @@ -556,6 +574,9 @@ Otherwise, return #f." (define-display-method SkipEvent (rest parser) "s") +(define-display-method RepeatedChord (chord parser) + (music->lily-string (ly:music-property chord 'element) parser)) + (define-display-method MarkEvent (mark parser) (let ((label (ly:music-property mark 'label))) (if (null? label) @@ -756,7 +777,7 @@ Otherwise, return #f." (*indent*) (first op) (second op))) - (reverse operations))) + operations)) (*indent*))) (parameterize ((*current-context* ctype)) (music->lily-string music parser))))) @@ -870,6 +891,20 @@ Otherwise, return #f." properties) (new-line->lily-string)))) +(define-display-method TimeSignatureMusic (expr parser) + (let* ((num (ly:music-property expr 'numerator)) + (den (ly:music-property expr 'denominator)) + (structure (ly:music-property expr 'beat-structure))) + (if (null? structure) + (format #f + "\\time ~a/~a~a" + num den + (new-line->lily-string)) + (format #f + "#(set-time-signature ~a ~a '~a)~a" + num den structure + (new-line->lily-string))))) + ;;; \melisma and \melismaEnd (define-extra-display-method ContextSpeccedMusic (expr parser) "If expr is a melisma, return \"\\melisma\", otherwise, return #f." @@ -887,53 +922,35 @@ Otherwise, return #f." "\\melismaEnd")) ;;; \tempo -;;; Check for all three different syntaxes of tempo: -;;; \tempo string duration=note, \tempo duration=note and \tempo string -(define-extra-display-method ContextSpeccedMusic (expr parser) - "If expr is a tempo, return \"\\tempo x = nnn\", otherwise return #f." - (or (with-music-match (expr (music 'ContextSpeccedMusic - element (music 'SequentialMusic - elements ((music 'PropertySet - value ?unit-text - symbol 'tempoText) - (music 'PropertySet - symbol 'tempoWholesPerMinute) - (music 'PropertySet - value ?unit-duration - symbol 'tempoUnitDuration) - (music 'PropertySet - value ?unit-count - symbol 'tempoUnitCount))))) - (format #f "\\tempo ~a ~a = ~a" - (scheme-expr->lily-string ?unit-text) - (duration->lily-string ?unit-duration #:force-duration #t) - ?unit-count)) - (with-music-match (expr (music 'ContextSpeccedMusic - element (music 'SequentialMusic - elements ((music 'PropertyUnset - symbol 'tempoText) - (music 'PropertySet - symbol 'tempoWholesPerMinute) - (music 'PropertySet - value ?unit-duration - symbol 'tempoUnitDuration) - (music 'PropertySet - value ?unit-count - symbol 'tempoUnitCount))))) - (format #f "\\tempo ~a = ~a" - (duration->lily-string ?unit-duration #:force-duration #t) - ?unit-count)) - (with-music-match (expr (music 'ContextSpeccedMusic - element (music 'SequentialMusic - elements ((music 'PropertySet - value ?tempo-text - symbol 'tempoText))))) - (format #f "\\tempo ~a" (scheme-expr->lily-string ?tempo-text))))) +(define-extra-display-method SequentialMusic (expr parser) + (with-music-match (expr (music 'SequentialMusic + elements ((music 'TempoChangeEvent + text ?text + tempo-unit ?unit + metronome-count ?count) + (music 'ContextSpeccedMusic + element (music 'PropertySet + symbol 'tempoWholesPerMinute))))) + (format #f "\\tempo ~{~a~a~}~a = ~a~a" + (if (markup? ?text) + (list (markup->lily-string ?text) " ") + '()) + (duration->lily-string ?unit #:force-duration #t) + (if (pair? ?count) + (format #f "~a ~~ ~a" (car ?count) (cdr ?count)) + ?count) + (new-line->lily-string)))) + +(define-display-method TempoChangeEvent (expr parser) + (let ((text (ly:music-property expr 'text))) + (format #f "\\tempo ~a~a" + (markup->lily-string text) + (new-line->lily-string)))) ;;; \clef (define clef-name-alist #f) (define-public (memoize-clef-names clefs) - "Initialize `clef-name-alist', if not already set." + "Initialize @code{clef-name-alist}, if not already set." (if (not clef-name-alist) (set! clef-name-alist (map (lambda (name+vals) @@ -942,8 +959,8 @@ Otherwise, return #f." clefs)))) (define-extra-display-method ContextSpeccedMusic (expr parser) - "If `expr' is a clef change, return \"\\clef ...\" -Otherwise, return #f." + "If @var{expr} is a clef change, return \"\\clef ...\". +Otherwise, return @code{#f}." (with-music-match (expr (music 'ContextSpeccedMusic context-type 'Staff element (music 'SequentialMusic @@ -960,11 +977,11 @@ Otherwise, return #f." symbol 'clefOctavation) (music 'ApplyContext procedure ly:set-middle-C!))))) - (let ((clef-prop+name (assoc (list ?clef-glyph ?clef-position 0) - clef-name-alist))) - (if clef-prop+name + (let ((clef-name (assoc-get (list ?clef-glyph ?clef-position 0) + clef-name-alist))) + (if clef-name (format #f "\\clef \"~a~{~a~a~}\"~a" - (cdr clef-prop+name) + clef-name (cond ((= 0 ?clef-octavation) (list "" "")) ((> ?clef-octavation 0) @@ -974,36 +991,6 @@ Otherwise, return #f." (new-line->lily-string)) #f)))) -;;; \time -(define-extra-display-method ContextSpeccedMusic (expr parser) - "If `expr' is a time signature set, return \"\\time ...\". -Otherwise, return #f." - (with-music-match (expr (music - 'ContextSpeccedMusic - element (music - 'ContextSpeccedMusic - context-type 'Timing - element (music - 'SequentialMusic - elements ((music - 'PropertySet - value ?num+den - symbol 'timeSignatureFraction) - (music - 'PropertySet - symbol 'beatLength) - (music - 'PropertySet - symbol 'measureLength) - (music - 'PropertySet - value ?grouping - symbol 'beatGrouping)))))) - (if (null? ?grouping) - (format #f "\\time ~a/~a~a" (car ?num+den) (cdr ?num+den) (new-line->lily-string)) - (format #f "#(set-time-signature ~a ~a '~s)~a" - (car ?num+den) (cdr ?num+den) ?grouping (new-line->lily-string))))) - ;;; \bar (define-extra-display-method ContextSpeccedMusic (expr parser) "If `expr' is a bar, return \"\\bar ...\". @@ -1013,34 +1000,9 @@ Otherwise, return #f." element (music 'PropertySet value ?bar-type symbol 'whichBar))) - (format #f "\\bar \"~a\"~a" ?bar-type (new-line->lily-string)))) + (format #f "\\bar \"~a\"~a" ?bar-type (new-line->lily-string)))) ;;; \partial -(define (duration->moment ly-duration) - (let ((log2 (ly:duration-log ly-duration)) - (dots (ly:duration-dot-count ly-duration)) - (num+den (ly:duration-factor ly-duration))) - (let* ((m (expt 2 (- log2))) - (factor (/ (car num+den) (cdr num+den)))) - (/ (do ((i 0 (1+ i)) - (delta (/ m 2) (/ delta 2))) - ((= i dots) m) - (set! m (+ m delta))) - factor)))) -(define moment-duration-alist (map (lambda (duration) - (cons (duration->moment duration) - duration)) - (append-map (lambda (log2) - (map (lambda (dots) - (ly:make-duration log2 dots 1 1)) - (list 0 1 2 3))) - (list 0 1 2 3 4)))) - -(define (moment->duration moment) - (let ((result (assoc (- moment) moment-duration-alist =))) - (and result - (cdr result)))) - (define-extra-display-method ContextSpeccedMusic (expr parser) "If `expr' is a partial measure, return \"\\partial ...\". Otherwise, return #f." @@ -1050,13 +1012,12 @@ Otherwise, return #f." 'ContextSpeccedMusic context-type 'Timing element (music - 'PropertySet - value ?moment - symbol 'measurePosition)))) - (let ((duration (moment->duration (/ (ly:moment-main-numerator ?moment) - (ly:moment-main-denominator ?moment))))) - (and duration (format #f "\\partial ~a" (duration->lily-string duration - #:force-duration #t)))))) + 'PartialSet + partial-duration ?duration)))) + + (and ?duration + (format #f "\\partial ~a" + (duration->lily-string ?duration #:force-duration #t))))) ;;; ;;; @@ -1191,4 +1152,6 @@ Otherwise, return #f." (music->lily-string ?lyric-sequence parser))) #f))) - +;; Silence internal event sent at end of each lyrics block +(define-display-method CompletizeExtenderEvent (expr parser) + "") diff --git a/scm/define-music-properties.scm b/scm/define-music-properties.scm index 6fa69e9e2f..5e11593636 100644 --- a/scm/define-music-properties.scm +++ b/scm/define-music-properties.scm @@ -1,9 +1,20 @@ -;;;; music-property-description.scm -- part of generated backend documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define (music-property-description symbol type? description) (if (not (equal? #f (object-property symbol 'music-doc))) @@ -16,27 +27,25 @@ (map (lambda (x) (apply music-property-description x)) `( - (X-offset ,number? - "Offset of resulting grob; only used for balloon texts.") - (Y-offset ,number? - "Offset of resulting grob; only used for balloon texts.") - - (alteration ,number? "Alteration for figured bass.") (absolute-octave ,integer? "The absolute octave for a octave check note.") - (articulations ,ly:music-list? - "Articulation events specifically for this note.") + (alteration ,number? "Alteration for figured bass.") (articulation-type ,string? "Key for script definitions alist. TODO: Consider making type into symbol.") + (articulations ,ly:music-list? + "Articulation events specifically for this note.") + (associated-context ,string? "Name of the Voice context associated with +this @code{\\lyricsto} section.") (augmented ,boolean? "This figure is for an augmented figured bass (with @code{+} sign).") (augmented-slash ,boolean? "This figure is for an augmented figured bass (back-slashed number).") - (associated-context ,string? "Name of the Voice context associated with -this @code{\\newaddlyrics} section.") + (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.") (bracket-start ,boolean? "Start a bracket here. TODO: Use SpanEvents?") @@ -56,27 +65,29 @@ Arg@tie{}1: the music, arg@tie{}2: factor.") (create-new ,boolean? "Create a fresh context.") (delta-step ,number? "How much should a fall change pitch?") + (denominator ,integer? "Denominator in a time signature.") (descend-only ,boolean? "If set, this @code{\\context} only descends in the context tree.") - (denominator ,integer? "Denominator in a time signature.") (digit ,integer? "Digit for fingering.") (diminished ,boolean? "This bass figure should be slashed.") (direction ,ly:dir? "Print this up or down?") (drum-type ,symbol? "Which percussion instrument to play this note on.") (duration ,ly:duration? "Duration of this note or lyric.") - (error-found ,boolean? - "If true, a parsing error was found in this expression.") (element ,ly:music? "The single child of a Music_wrapper music object, or the body of a repeat.") (elements ,ly:music-list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music.") (elements-callback ,procedure? "Return a list of children, for use by a sequential iterator. Takes a single music parameter.") + (error-found ,boolean? + "If true, a parsing error was found in this expression.") (figure ,integer? "A bass figure.") + (footnote-text ,markup? "Text to appear in a footnote.") (force-accidental ,boolean? "If set, a cautionary accidental should always be printed on this note.") + (forced-type ,symbol? "Override for the part-combiner.") (grob-property ,symbol? "The symbol of the grob property to set.") (grob-property-path ,list? "A list of symbols, locating a nested grob @@ -97,16 +108,19 @@ This property can only be defined as initializer in (line-break-permission ,symbol? "When the music is at top-level, whether to allow, forbid or force a line break.") - (metronome-count ,number? "How many beats in a minute?") + (metronome-count ,number-or-pair? "How many beats in a minute?") (name ,symbol? "Name of this music object.") (no-continuation ,boolean? "If set, disallow continuation lines.") (numerator ,integer? "Numerator of a time signature.") - (once ,boolean? "Apply this operation only during one time step?") (octavation ,integer? "This pitch was octavated by how many octaves? For chord inversions, this is negative.") + (once ,boolean? "Apply this operation only during one time step?") (origin ,ly:input-location? "Where was this piece of music defined?") + (original-chord ,ly:music? "Original chord of a repeated chord. +Used by repeated chords in \\relative mode, to determine the first note octave") + (ottava-number ,integer? "The octavation for @code{\\ottava}.") (page-break-permission ,symbol? "When the music is at top-level, whether to allow, forbid or force a page break.") @@ -115,9 +129,11 @@ whether to allow, forbid or force a page break.") top-level, a page marker object is instanciated instead of a score.") (page-turn-permission ,symbol? "When the music is at top-level, whether to allow, forbid or force a page turn.") + (parenthesize ,boolean? "Enclose resulting objects in parentheses?") + (partial-duration ,ly:duration? "The length of a partial measure as a +duration.") (part-combine-status ,symbol? "Change to what kind of state? Options are @code{solo1}, @code{solo2} and @code{unisono}.") - (parenthesize ,boolean? "Enclose resulting objects in parentheses?") (pitch ,ly:pitch? "The pitch of this note.") (pitch-alist ,list? "A list of pitches jointly forming the scale of a key signature.") @@ -129,50 +145,53 @@ It must take a single argument, being the context.") (property-operations ,list? "Do these operations for instantiating the context.") + (quoted-context-id ,string? "The ID of the context to direct quotes to, +e.g., @code{cue}.") + (quoted-context-type ,symbol? "The name of the context to +direct quotes to, e.g., @code{Voice}.") (quoted-events ,vector? "A vector of with @code{moment} and @code{event-list} entries.") + (quoted-music-clef ,string? "The clef of the voice to quote.") (quoted-music-name ,string? "The name of the voice to quote.") - (quoted-voice-direction ,ly:dir? "Should the quoted voice be up-stem -or down-stem?") - (quoted-context-type ,symbol? "The name of the context to -direct quotes to, e.g., @code{Voice}.") - (quoted-context-id ,string? "The ID of the context to direct quotes to, -e.g., @code{cue}.") (quoted-transposition ,ly:pitch? "The pitch used for the quote, overriding @code{\\transposition}.") + (quoted-voice-direction ,ly:dir? "Should the quoted voice be up-stem +or down-stem?") (repeat-count ,integer? "Do a @code{\\repeat} how often?") + (slash-count ,integer? "The number of slashes in a single-beat repeat. +If zero, signals a beat containing varying durations.") (span-direction ,ly:dir? "Does this start or stop a spanner?") - (span-type ,string? "What kind of spanner should be created? - -TODO: Consider making type into symbol.") + (span-type ,symbol? "What kind of dynamic spanner should be created? +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 in @file{scm/@/define-music-types.scm}.") (string-number ,integer? "The number of the string in -a @code{StringNumberEvent.}") +a @code{StringNumberEvent}.") (symbol ,symbol? "Grob name to perform an override or revert on.") (tags ,list? "List of symbols that for denoting extra details, e.g., @code{\\tag #'part @dots{}} could tag a piece of music as only being active in a part.") - (text-type ,symbol? - "Particular type of text script (e.g., finger, dynamic).") - (text ,markup? "Markup expression to be printed.") (tempo-unit ,ly:duration? "The unit for the metronome count.") + (text ,markup? "Markup expression to be printed.") (to-relative-callback ,procedure? "How to transform a piece of music to relative pitches.") (tonic ,ly:pitch? "Base of the scale.") (tremolo-type ,integer? "Speed of tremolo, e.g., 16 for @code{c4:16}.") (trill-pitch ,ly:pitch? "Pitch of other note of the trill.") + (tweaks ,list? "An alist of properties to override in the backend +for the grob made of this event.") (type ,symbol? "The type of this music object. Determines iteration in some cases.") (types ,list? "The types of this music object; determines by what engraver this music expression is processed.") - (tweaks ,list? "An alist of properties to override in the backend -for the grob made of this event.") (untransposable ,boolean? "If set, this music is not transposed.") @@ -183,4 +202,10 @@ music expression is to be discarded by the toplevel music handler.") (what ,symbol? "What to change for auto-change. FIXME: Naming.") + + (X-offset ,number? + "Offset of resulting grob; only used for balloon texts.") + + (Y-offset ,number? + "Offset of resulting grob; only used for balloon texts.") ))) diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index c454cfd3a6..8a3676b2a1 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -1,26 +1,23 @@ -;;;; define-music-types.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . ;; TODO: should link back into user manual. -(define (mm-rest-child-list music) - "Generate events for multimeasure rests, -to be used by the sequential-iterator" - (let ((location (ly:music-property music 'origin)) - (duration (ly:music-property music 'duration))) - (list (make-music 'BarCheck - 'origin location) - (make-event-chord (cons (make-music 'MultiMeasureRestEvent - 'origin location - 'duration duration) - (ly:music-property music 'articulations))) - (make-music 'BarCheck - 'origin location)))) - (define-public music-descriptions `( (AbsoluteDynamicEvent @@ -69,7 +66,7 @@ Syntax: @var{note}@code{-\\arpeggio}") Syntax: @var{note}@code{x}@code{y}, where @code{x} is a direction (@code{^} for up or @code{_} for down), or LilyPond's choice -(no direction specified)), and where @code{y} is an articulation +(no direction specified), and where @code{y} is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto}, @code{\\downbow}). See the Notation Reference for details.") (types . (general-music event articulation-event script-event)) @@ -108,6 +105,11 @@ Syntax for manual control: @code{c8-[ c c-] c8}") (types . (general-music event beam-forbid-event)) )) + (BreakDynamicSpanEvent + . ((description . "End an alignment spanner for dynamics here.") + (types . (general-music break-span-event break-dynamic-span-event event)) + )) + (BendAfterEvent . ((description . "A drop/fall/doit jazz articulation.") (types . (general-music bend-after-event event)))) @@ -120,6 +122,20 @@ Syntax: @var{note}@code{\\breathe}") (types . (general-music event breathing-event)) )) + (ClusterNoteEvent + . ((description . "A note that is part of a cluster.") + ;; not a note-event, to ensure that Note_heads_engraver doesn't eat it. + (types . (general-music cluster-note-event melodic-event + rhythmic-event event)) + )) + + (CompletizeExtenderEvent + . ((description . "Used internally to signal the end of a lyrics block to +ensure extenders are completed correctly when a @code{Lyrics} context ends +before its associated @code{Voice} context.") + (types . (general-music completize-extender-event event)) + )) + (ContextChange . ((description . "Change staves in Piano staff. @@ -128,13 +144,6 @@ Syntax: @code{\\change Staff = @var{new-id}}") (types . (general-music translator-change-instruction)) )) - (ClusterNoteEvent - . ((description . "A note that is part of a cluster.") - ;; not a note-event, to ensure that Note_engraver doesn't eat it. - (types . (general-music cluster-note-event melodic-event - rhythmic-event event)) - )) - (ContextSpeccedMusic . ((description . "Interpret the argument music within a specific context.") @@ -147,23 +156,33 @@ specific context.") (CrescendoEvent . ((description . "Begin or end a crescendo. -Syntax: @var{note}@code{\\cr} @dots{} @var{note}@code{\\rc} +Syntax: @var{note}@code{\\<} @dots{} @var{note}@code{\\!} -You can also use @code{\\<}, @code{\\!}, @code{\\cresc}, and -@code{\\endcresc}. See the Notation Reference for details.") +An alternative syntax is @var{note}@code{\\cr} @dots{} +@var{note}@code{\\endcr}.") (types . (general-music span-event span-dynamic-event crescendo-event event)) )) (DecrescendoEvent - . ((description . "See @ref{CrescendoEvent}.") + . ((description . "Begin or end a decrescendo. + +Syntax: @var{note}@code{\\>} @dots{} @var{note}@code{\\!} + +An alternative syntax is @var{note}@code{\\decr} @dots{} +@var{note}@code{\\enddecr}.") (types . (general-music span-event span-dynamic-event decrescendo-event event)) )) - (ExtenderEvent - . ((description . "Extend lyrics.") - (types . (general-music extender-event event)) + (DoublePercentEvent + . ((description . "Used internally to signal double percent repeats.") + (types . (general-music event double-percent-event rhythmic-event)) + )) + + (EpisemaEvent + . ((description . "Begin or end an episema.") + (types . (general-music span-event event episema-event)) )) (Event @@ -180,11 +199,21 @@ You can also use @code{\\<}, @code{\\!}, @code{\\cresc}, and (types . (general-music event-chord simultaneous-music)) )) + (ExtenderEvent + . ((description . "Extend lyrics.") + (types . (general-music extender-event event)) + )) + (FingeringEvent . ((description . "Specify what finger to use for this note.") (types . (general-music fingering-event event)) )) + (FootnoteEvent + . ((description . "Footnote a grob.") + (types . (general-music event footnote-event)) + )) + (GlissandoEvent . ((description . "Start a glissando on this note.") (types . (general-music glissando-event event)) @@ -230,7 +259,6 @@ Syntax: @var{note}@code{\\laissezVibrer}") (LigatureEvent . ((description . "Start or end a ligature.") - (span-type . ligature) (types . (general-music span-event ligature-event event)) )) @@ -304,6 +332,13 @@ Note the explicit font switch.") (types . (general-music event note-grouping-event)) )) + (OttavaMusic + . ((description . "Start or stop an ottava bracket.") + (iterator-ctor . ,ly:sequential-iterator::constructor) + (elements-callback . ,make-ottava-set) + (types . (general-music ottava-music)) + )) + (OverrideProperty . ((description . "Extend the definition of a graphical object. @@ -324,6 +359,17 @@ Syntax: @code{\\override} [ @var{context} @code{.} ] (types . (general-music break-event page-turn-event event)) )) + (PartCombineForceEvent + . ((description . "Override the part-combiner's strategy.") + (types . (general-music part-combine-force-event event)) + )) + + (PartialSet + . ((description . "Create an anacrusis or upbeat (partial measure).") + (iterator-ctor . ,ly:partial-iterator::constructor) + (types . (general-music partial-set)) + )) + (PartCombineMusic . ((description . "Combine two parts on a staff, either merged or as separate voices.") @@ -339,7 +385,7 @@ as separate voices.") )) (PercentRepeatedMusic - . ((description . "Repeats encoded by percents.") + . ((description . "Repeats encoded by percents and slashes.") (iterator-ctor . ,ly:percent-repeat-iterator::constructor) (start-callback . ,ly:repeated-music::first-start) (length-callback . ,ly:repeated-music::unfolded-music-length) @@ -357,20 +403,23 @@ goes down).") . ((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)) )) (PropertySet . ((description . "Set a context property. -Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}") +Syntax: @code{\\set @var{context}.@var{prop} = @var{scheme-val}}") (types . (layout-instruction-event general-music)) (iterator-ctor . ,ly:property-iterator::constructor) )) (PropertyUnset - . ((description . "Remove the definition of a context -@code{\\property}.") + . ((description . "Restore the default setting for a context +property. See @ref{PropertySet}. + +Syntax: @code{\\unset @var{context}.@var{prop}}") (types . (layout-instruction-event general-music)) (iterator-ctor . ,ly:property-unset-iterator::constructor) )) @@ -398,9 +447,13 @@ Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}") (types . (music-wrapper-music general-music relative-octave-music)) )) - (RepeatTieEvent - . ((description . "Ties for starting a second volta bracket.") - (types . (general-music event repeat-tie-event)) + (RepeatedChord + . ((description . "A chord repetition") + (to-relative-callback . ,ly:music-sequence::repeated-chord-relative-callback) + (iterator-ctor . ,ly:music-wrapper-iterator::constructor) + (start-callback . ,ly:music-wrapper::start-callback) + (length-callback . ,ly:music-wrapper::length-callback) + (types . (general-music music-wrapper-music)) )) (RepeatedMusic @@ -408,6 +461,16 @@ Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}") (types . (general-music repeated-music)) )) + (RepeatSlashEvent + . ((description . "Used internally to signal beat repeats.") + (types . (general-music event repeat-slash-event rhythmic-event)) + )) + + (RepeatTieEvent + . ((description . "Ties for starting a second volta bracket.") + (types . (general-music event repeat-tie-event)) + )) + (RestEvent . ((description . "A Rest. @@ -472,6 +535,7 @@ Syntax: @code{\\skip} @var{duration}") . ((description . "Start or end slur. Syntax: @var{note}@code{(} and @var{note}@code{)}") + (spanner-id . "") (types . (general-music span-event event slur-event)) )) @@ -526,13 +590,19 @@ Syntax: @code{\\rightHandFinger @var{text}}") (types . (general-music event pedal-event sustain-event)) )) + (TempoChangeEvent + . ((description . "A metronome mark or tempo indication.") + (types . (general-music event tempo-change-event)) + )) + (TextScriptEvent . ((description . "Print text.") (types . (general-music script-event text-script-event event)) )) (TextSpanEvent - . ((description . "Start a text spanner, e.g., 8va.....|") + . ((description . "Start a text spanner, for example, an +octavation.") (types . (general-music span-event event text-span-event)) )) @@ -546,14 +616,21 @@ Syntax: @var{note}@code{-~}") (TimeScaledMusic . ((description . "Multiply durations, as in tuplets. -Syntax: @code{\\times @var{fraction} @var{music}}, e.g. +Syntax: @code{\\times @var{fraction} @var{music}}, e.g., @code{\\times 2/3 @{ @dots{} @}} for triplets.") (length-callback . ,ly:music-wrapper::length-callback) (start-callback . ,ly:music-wrapper::start-callback) - (iterator-ctor . ,ly:time-scaled-music-iterator::constructor) + (iterator-ctor . ,ly:tuplet-iterator::constructor) (types . (time-scaled-music music-wrapper-music general-music)) )) + (TimeSignatureMusic + . ((description . "Set a new time signature") + (iterator-ctor . ,ly:sequential-iterator::constructor) + (elements-callback . ,make-time-signature-set) + (types . (general-music time-signature-music)) + )) + (TransposedMusic . ((description . "Music that has been transposed.") (iterator-ctor . ,ly:music-wrapper-iterator::constructor) @@ -579,12 +656,12 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g. )) (TremoloSpanEvent - . ((description . "Tremolo over two stems") + . ((description . "Tremolo over two stems.") (types . (general-music event span-event tremolo-span-event)) )) (TrillSpanEvent - . ((description . "Start a trill spanner tr~~~") + . ((description . "Start a trill spanner.") (types . (general-music span-event event trill-span-event)) )) @@ -641,7 +718,7 @@ Syntax: @code{\\\\}") (set! music-descriptions (sort music-descriptions alist et al: +;;;; +;;;; Copyright (C) 1996--2011 Han-Wen Nienhuys (Nederlands) +;;;; Copyright (C) 1998--2011 Jaume Obrador (Catalan) +;;;; Copyright (C) 1997--2011 Roland Meier +;;;; Bjoern Jacke (Deutsch) +;;;; Copyright (C) 1996--2011 Han-Wen Nienhuys (English) +;;;; Copyright (C) 2002--2011 Carlos García Suárez +;;;; Maximiliano G. G. (Espanol) +;;;; Copyright (C) 1998--2011 Paolo Zuliani +;;;; Eric Wurbel (Italiano) +;;;; Copyright (C) 1998--2011 Arvid Grøtting (Norsk) +;;;; Copyright (C) 2004--2011 Pedro Kröger (Portugues) +;;;; Copyright (C) 2001--2011 Heikki Junes (Suomi) +;;;; Copyright (C) 1997--2011 Mats Bengtsson (Svenska) +;;;; Copyright (C) 2004--2011 Hendrik Maryns (Vlaams) +;;;; +;;;; 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 . + + +;;; Variable declaration +(define-public pitchnames '()) +(define-public default-language "") +(define-public previous-pitchnames #f) + +(define-public language-pitch-names + `( + ;; Language: Nederlands --------------------------------------------; + ;; Dutch note names -- LilyPond's default language. + ;; Han-Wen Nienhuys + ;; + ;; es = flat + ;; eses = double-flat + ;; eh = quarter-tone flat + ;; eseh = three-quarter-tones flat + ;; + ;; is = sharp + ;; isis = double-sharp + ;; ih = quarter-tone sharp + ;; isih = three-quarter-tones sharp + ;; + ;; English: c d e f g a bf b + ;; Dutch: c d e f g a b h + + (nederlands . ( + (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT)) + (ces . ,(ly:make-pitch -1 0 FLAT)) + (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) + (c . ,(ly:make-pitch -1 0 NATURAL)) + (cis . ,(ly:make-pitch -1 0 SHARP)) + (cih . ,(ly:make-pitch -1 0 SEMI-SHARP)) + (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) + (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + + (deh . ,(ly:make-pitch -1 1 SEMI-FLAT)) + (des . ,(ly:make-pitch -1 1 FLAT)) + (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) + (d . ,(ly:make-pitch -1 1 NATURAL)) + (dis . ,(ly:make-pitch -1 1 SHARP)) + (dih . ,(ly:make-pitch -1 1 SEMI-SHARP)) + (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) + (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + + (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT)) + (ees . ,(ly:make-pitch -1 2 FLAT)) + (eeseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) + (es . ,(ly:make-pitch -1 2 FLAT)) + (e . ,(ly:make-pitch -1 2 NATURAL)) + (eis . ,(ly:make-pitch -1 2 SHARP)) + (eih . ,(ly:make-pitch -1 2 SEMI-SHARP)) + (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) + (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + + (feh . ,(ly:make-pitch -1 3 SEMI-FLAT)) + (fes . ,(ly:make-pitch -1 3 FLAT)) + (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) + (f . ,(ly:make-pitch -1 3 NATURAL)) + (fis . ,(ly:make-pitch -1 3 SHARP)) + (fih . ,(ly:make-pitch -1 3 SEMI-SHARP)) + (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) + (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + + (geh . ,(ly:make-pitch -1 4 SEMI-FLAT)) + (ges . ,(ly:make-pitch -1 4 FLAT)) + (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (gis . ,(ly:make-pitch -1 4 SHARP)) + (gih . ,(ly:make-pitch -1 4 SEMI-SHARP)) + (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) + (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + + (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT)) + (aes . ,(ly:make-pitch -1 5 FLAT)) + (aeseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) + (as . ,(ly:make-pitch -1 5 FLAT)) + (a . ,(ly:make-pitch -1 5 NATURAL)) + (ais . ,(ly:make-pitch -1 5 SHARP)) + (aih . ,(ly:make-pitch -1 5 SEMI-SHARP)) + (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) + (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (beses . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + + (beh . ,(ly:make-pitch -1 6 SEMI-FLAT)) + (bes . ,(ly:make-pitch -1 6 FLAT)) + (beseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) + (b . ,(ly:make-pitch -1 6 NATURAL)) + (bis . ,(ly:make-pitch -1 6 SHARP)) + (bih . ,(ly:make-pitch -1 6 SEMI-SHARP)) + (bisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) + (bisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: Catalan -----------------------------------------------; + ;; Jaume Obrador + ;; + ;; b = flat (bemoll) + ;; bb = double-flat + ;; + ;; d = sharp (diesi) + ;; dd = double-sharp + ;; + ;; s = sharp (sostingut) + ;; ss = double-sharp + ;; + ;; English: c d e f g a b + ;; Catalan: do re mi fa sol la si + + (catalan . ( + (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (dob . ,(ly:make-pitch -1 0 FLAT)) + (do . ,(ly:make-pitch -1 0 NATURAL)) + (dod . ,(ly:make-pitch -1 0 SHARP)) + (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (reb . ,(ly:make-pitch -1 1 FLAT)) + (re . ,(ly:make-pitch -1 1 NATURAL)) + (red . ,(ly:make-pitch -1 1 SHARP)) + (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (mib . ,(ly:make-pitch -1 2 FLAT)) + (mi . ,(ly:make-pitch -1 2 NATURAL)) + (mid . ,(ly:make-pitch -1 2 SHARP)) + (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fab . ,(ly:make-pitch -1 3 FLAT)) + (fa . ,(ly:make-pitch -1 3 NATURAL)) + (fad . ,(ly:make-pitch -1 3 SHARP)) + (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (solb . ,(ly:make-pitch -1 4 FLAT)) + (sol . ,(ly:make-pitch -1 4 NATURAL)) + (sold . ,(ly:make-pitch -1 4 SHARP)) + (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (lab . ,(ly:make-pitch -1 5 FLAT)) + (la . ,(ly:make-pitch -1 5 NATURAL)) + (lad . ,(ly:make-pitch -1 5 SHARP)) + (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (sib . ,(ly:make-pitch -1 6 FLAT)) + (si . ,(ly:make-pitch -1 6 NATURAL)) + (sid . ,(ly:make-pitch -1 6 SHARP)) + (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + + ;; Now that we have espanol.ly, should these be junked? --jcn + (dos . ,(ly:make-pitch -1 0 SHARP)) + (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (res . ,(ly:make-pitch -1 1 SHARP)) + (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (mis . ,(ly:make-pitch -1 2 SHARP)) + (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (fas . ,(ly:make-pitch -1 3 SHARP)) + (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (sols . ,(ly:make-pitch -1 4 SHARP)) + (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (las . ,(ly:make-pitch -1 5 SHARP)) + (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (sis . ,(ly:make-pitch -1 6 SHARP)) + (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: Deutsch -----------------------------------------------; + ;; Roland Meier , + ;; Bjoern Jacke + ;; + ;; es = flat + ;; eses = double-flat + ;; eh = quarter-tone flat + ;; eseh = three-quarter-tones flat + ;; + ;; is = sharp + ;; isis = double-sharp + ;; ih = quarter-tone sharp + ;; isih = three-quarter-tones sharp + ;; + ;; English: c d e f g a bf b + ;; German: c d e f g a b h + + (deutsch . ( + (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) + (ces . ,(ly:make-pitch -1 0 FLAT)) + (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT)) + (c . ,(ly:make-pitch -1 0 NATURAL)) + (cih . ,(ly:make-pitch -1 0 SEMI-SHARP)) + (cis . ,(ly:make-pitch -1 0 SHARP)) + (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) + (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + + (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) + (des . ,(ly:make-pitch -1 1 FLAT)) + (deh . ,(ly:make-pitch -1 1 SEMI-FLAT)) + (d . ,(ly:make-pitch -1 1 NATURAL)) + (dih . ,(ly:make-pitch -1 1 SEMI-SHARP)) + (dis . ,(ly:make-pitch -1 1 SHARP)) + (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) + (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + + (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (eseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) + (es . ,(ly:make-pitch -1 2 FLAT)) + (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT)) + (e . ,(ly:make-pitch -1 2 NATURAL)) + (eih . ,(ly:make-pitch -1 2 SEMI-SHARP)) + (eis . ,(ly:make-pitch -1 2 SHARP)) + (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) + (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + + (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) + (fes . ,(ly:make-pitch -1 3 FLAT)) + (feh . ,(ly:make-pitch -1 3 SEMI-FLAT)) + (f . ,(ly:make-pitch -1 3 NATURAL)) + (fih . ,(ly:make-pitch -1 3 SEMI-SHARP)) + (fis . ,(ly:make-pitch -1 3 SHARP)) + (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) + (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + + (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) + (ges . ,(ly:make-pitch -1 4 FLAT)) + (geh . ,(ly:make-pitch -1 4 SEMI-FLAT)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (gih . ,(ly:make-pitch -1 4 SEMI-SHARP)) + (gis . ,(ly:make-pitch -1 4 SHARP)) + (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) + (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + + (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (asah . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) + (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) ;;non-standard name for asas + (aseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) + (as . ,(ly:make-pitch -1 5 FLAT)) + (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT)) + (a . ,(ly:make-pitch -1 5 NATURAL)) + (aih . ,(ly:make-pitch -1 5 SEMI-SHARP)) + (ais . ,(ly:make-pitch -1 5 SHARP)) + (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) + (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + + (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (heseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) + (b . ,(ly:make-pitch -1 6 FLAT)) + (beh . ,(ly:make-pitch -1 6 SEMI-FLAT)) + (h . ,(ly:make-pitch -1 6 NATURAL)) + (hih . ,(ly:make-pitch -1 6 SEMI-SHARP)) + (his . ,(ly:make-pitch -1 6 SHARP)) + (hisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) + (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: English -----------------------------------------------; + ;; Han-Wen Nienhuys + ;; + ;; f = flat + ;; ff = double-flat + ;; qf = quarter[-tone] flat + ;; tqf = three-quarter[-tones] flat + ;; + ;; s = sharp + ;; x = double-sharp + ;; ss = double-sharp + ;; qs = quarter[-tone] sharp + ;; tqs = three-quarter[-tones] sharp + + (english . ( + (cflatflat . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (cflat . ,(ly:make-pitch -1 0 FLAT)) + (c . ,(ly:make-pitch -1 0 NATURAL)) + (csharp . ,(ly:make-pitch -1 0 SHARP)) + (csharpsharp . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (dflatflat . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (dflat . ,(ly:make-pitch -1 1 FLAT)) + (d . ,(ly:make-pitch -1 1 NATURAL)) + (dsharp . ,(ly:make-pitch -1 1 SHARP)) + (dsharpsharp . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (eflatflat . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (eflat . ,(ly:make-pitch -1 2 FLAT)) + (e . ,(ly:make-pitch -1 2 NATURAL)) + (esharp . ,(ly:make-pitch -1 2 SHARP)) + (esharpsharp . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (fflatflat . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fflat . ,(ly:make-pitch -1 3 FLAT)) + (f . ,(ly:make-pitch -1 3 NATURAL)) + (fsharp . ,(ly:make-pitch -1 3 SHARP)) + (fsharpsharp . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (gflatflat . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (gflat . ,(ly:make-pitch -1 4 FLAT)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (gsharp . ,(ly:make-pitch -1 4 SHARP)) + (gsharpsharp . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (aflatflat . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (aflat . ,(ly:make-pitch -1 5 FLAT)) + (a . ,(ly:make-pitch -1 5 NATURAL)) + (asharp . ,(ly:make-pitch -1 5 SHARP)) + (asharpsharp . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (bflatflat . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (bflat . ,(ly:make-pitch -1 6 FLAT)) + (b . ,(ly:make-pitch -1 6 NATURAL)) + (bsharp . ,(ly:make-pitch -1 6 SHARP)) + (bsharpsharp . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + + (cff . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (ctqf . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) + (cf . ,(ly:make-pitch -1 0 FLAT)) + (cqf . ,(ly:make-pitch -1 0 SEMI-FLAT)) + (c . ,(ly:make-pitch -1 0 NATURAL)) + (cqs . ,(ly:make-pitch -1 0 SEMI-SHARP)) + (cs . ,(ly:make-pitch -1 0 SHARP)) + (ctqs . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) + (css . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (cx . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + + (dff . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (dtqf . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) + (df . ,(ly:make-pitch -1 1 FLAT)) + (dqf . ,(ly:make-pitch -1 1 SEMI-FLAT)) + (d . ,(ly:make-pitch -1 1 NATURAL)) + (dqs . ,(ly:make-pitch -1 1 SEMI-SHARP)) + (ds . ,(ly:make-pitch -1 1 SHARP)) + (dtqs . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) + (dss . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (dx . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + + (eff . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (etqf . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) + (ef . ,(ly:make-pitch -1 2 FLAT)) + (eqf . ,(ly:make-pitch -1 2 SEMI-FLAT)) + (e . ,(ly:make-pitch -1 2 NATURAL)) + (eqs . ,(ly:make-pitch -1 2 SEMI-SHARP)) + (es . ,(ly:make-pitch -1 2 SHARP)) + (etqs . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) + (ess . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (ex . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + + (fff . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (ftqf . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) + (ff . ,(ly:make-pitch -1 3 FLAT)) + (fqf . ,(ly:make-pitch -1 3 SEMI-FLAT)) + (f . ,(ly:make-pitch -1 3 NATURAL)) + (fqs . ,(ly:make-pitch -1 3 SEMI-SHARP)) + (fs . ,(ly:make-pitch -1 3 SHARP)) + (ftqs . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) + (fss . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (fx . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + + (gff . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (gtqf . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) + (gf . ,(ly:make-pitch -1 4 FLAT)) + (gqf . ,(ly:make-pitch -1 4 SEMI-FLAT)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (gqs . ,(ly:make-pitch -1 4 SEMI-SHARP)) + (gs . ,(ly:make-pitch -1 4 SHARP)) + (gtqs . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) + (gss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (gx . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + + (aff . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (atqf . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) + (af . ,(ly:make-pitch -1 5 FLAT)) + (aqf . ,(ly:make-pitch -1 5 SEMI-FLAT)) + (a . ,(ly:make-pitch -1 5 NATURAL)) + (aqs . ,(ly:make-pitch -1 5 SEMI-SHARP)) + (as . ,(ly:make-pitch -1 5 SHARP)) + (atqs . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) + (ass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (ax . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + + (bff . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (btqf . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) + (bf . ,(ly:make-pitch -1 6 FLAT)) + (bqf . ,(ly:make-pitch -1 6 SEMI-FLAT)) + (b . ,(ly:make-pitch -1 6 NATURAL)) + (bqs . ,(ly:make-pitch -1 6 SEMI-SHARP)) + (bs . ,(ly:make-pitch -1 6 SHARP)) + (btqs . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) + (bss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + (bx . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: Espanol -----------------------------------------------; + ;; Carlos García Suárez , + ;; Maximiliano G. G. + ;; + ;; b = flat (bemol) + ;; bb = double-flat + ;; cb = quarter-tone flat (cuarto [de tono de] bemol) + ;; tcb = three-quarter-tones flat (tres cuartos [de tonos de] bemol) + ;; + ;; s = sharp (sostenido) + ;; x = double-sharp + ;; ss = double-sharp + ;; cs = quarter-tone sharp (cuarto [de tono de] sostenido) + ;; tcs = three-quarter-tones sharp (tres cuartos [de tonos de] sostenido) + ;; + ;; English: c d e f g a b + ;; Spanish: do re mi fa sol la si + + (espanol . ( + (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (dotcb . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) + (dob . ,(ly:make-pitch -1 0 FLAT)) + (docb . ,(ly:make-pitch -1 0 SEMI-FLAT)) + (do . ,(ly:make-pitch -1 0 NATURAL)) + (docs . ,(ly:make-pitch -1 0 SEMI-SHARP)) + (dos . ,(ly:make-pitch -1 0 SHARP)) + (dotcs . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) + (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (dox . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + + (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (retcb . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) + (reb . ,(ly:make-pitch -1 1 FLAT)) + (recb . ,(ly:make-pitch -1 1 SEMI-FLAT)) + (re . ,(ly:make-pitch -1 1 NATURAL)) + (recs . ,(ly:make-pitch -1 1 SEMI-SHARP)) + (res . ,(ly:make-pitch -1 1 SHARP)) + (retcs . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) + (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (rex . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + + (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (mitcb . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) + (mib . ,(ly:make-pitch -1 2 FLAT)) + (micb . ,(ly:make-pitch -1 2 SEMI-FLAT)) + (mi . ,(ly:make-pitch -1 2 NATURAL)) + (mics . ,(ly:make-pitch -1 2 SEMI-SHARP)) + (mis . ,(ly:make-pitch -1 2 SHARP)) + (mitcs . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) + (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (mix . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + + (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fatcb . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) + (fab . ,(ly:make-pitch -1 3 FLAT)) + (facb . ,(ly:make-pitch -1 3 SEMI-FLAT)) + (fa . ,(ly:make-pitch -1 3 NATURAL)) + (facs . ,(ly:make-pitch -1 3 SEMI-SHARP)) + (fas . ,(ly:make-pitch -1 3 SHARP)) + (fatcs . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) + (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (fax . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + + (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (soltcb . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) + (solb . ,(ly:make-pitch -1 4 FLAT)) + (solcb . ,(ly:make-pitch -1 4 SEMI-FLAT)) + (sol . ,(ly:make-pitch -1 4 NATURAL)) + (solcs . ,(ly:make-pitch -1 4 SEMI-SHARP)) + (sols . ,(ly:make-pitch -1 4 SHARP)) + (soltcs . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) + (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (solx . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + + (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (latcb . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) + (lab . ,(ly:make-pitch -1 5 FLAT)) + (lacb . ,(ly:make-pitch -1 5 SEMI-FLAT)) + (la . ,(ly:make-pitch -1 5 NATURAL)) + (lacs . ,(ly:make-pitch -1 5 SEMI-SHARP)) + (las . ,(ly:make-pitch -1 5 SHARP)) + (latcs . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) + (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (lax . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + + (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (sitcb . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) + (sib . ,(ly:make-pitch -1 6 FLAT)) + (sicb . ,(ly:make-pitch -1 6 SEMI-FLAT)) + (si . ,(ly:make-pitch -1 6 NATURAL)) + (sics . ,(ly:make-pitch -1 6 SEMI-SHARP)) + (sis . ,(ly:make-pitch -1 6 SHARP)) + (sitcs . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) + (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + (six . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: Italiano ----------------------------------------------; + ;; Paolo Zuliani , + ;; Eric Wurbel + ;; + ;; b = flat (bemolle) + ;; bb = double-flat + ;; sb = quarter-tone flat (semi-bemolle) + ;; bsb = three-quarter-tones flat + ;; + ;; d = sharp (diesis) + ;; dd = double-sharp + ;; sd = quarter-tone sharp (semi-diesis) + ;; dsd = three-quarter-tones sharp + ;; + ;; English: c d e f g a b + ;; Italian: do re mi fa sol la si + + (italiano . ( + (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (dobsb . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) + (dob . ,(ly:make-pitch -1 0 FLAT)) + (dosb . ,(ly:make-pitch -1 0 SEMI-FLAT)) + (do . ,(ly:make-pitch -1 0 NATURAL)) + (dosd . ,(ly:make-pitch -1 0 SEMI-SHARP)) + (dod . ,(ly:make-pitch -1 0 SHARP)) + (dodsd . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) + (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + + (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (rebsb . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) + (reb . ,(ly:make-pitch -1 1 FLAT)) + (resb . ,(ly:make-pitch -1 1 SEMI-FLAT)) + (re . ,(ly:make-pitch -1 1 NATURAL)) + (resd . ,(ly:make-pitch -1 1 SEMI-SHARP)) + (red . ,(ly:make-pitch -1 1 SHARP)) + (redsd . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) + (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + + (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (mibsb . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) + (mib . ,(ly:make-pitch -1 2 FLAT)) + (misb . ,(ly:make-pitch -1 2 SEMI-FLAT)) + (mi . ,(ly:make-pitch -1 2 NATURAL)) + (misd . ,(ly:make-pitch -1 2 SEMI-SHARP)) + (mid . ,(ly:make-pitch -1 2 SHARP)) + (midsd . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) + (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + + (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fabsb . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) + (fab . ,(ly:make-pitch -1 3 FLAT)) + (fasb . ,(ly:make-pitch -1 3 SEMI-FLAT)) + (fa . ,(ly:make-pitch -1 3 NATURAL)) + (fasd . ,(ly:make-pitch -1 3 SEMI-SHARP)) + (fad . ,(ly:make-pitch -1 3 SHARP)) + (fadsd . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) + (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + + (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (solbsb . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) + (solb . ,(ly:make-pitch -1 4 FLAT)) + (solsb . ,(ly:make-pitch -1 4 SEMI-FLAT)) + (sol . ,(ly:make-pitch -1 4 NATURAL)) + (solsd . ,(ly:make-pitch -1 4 SEMI-SHARP)) + (sold . ,(ly:make-pitch -1 4 SHARP)) + (soldsd . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) + (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + + (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (labsb . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) + (lab . ,(ly:make-pitch -1 5 FLAT)) + (lasb . ,(ly:make-pitch -1 5 SEMI-FLAT)) + (la . ,(ly:make-pitch -1 5 NATURAL)) + (lasd . ,(ly:make-pitch -1 5 SEMI-SHARP)) + (lad . ,(ly:make-pitch -1 5 SHARP)) + (ladsd . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) + (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + + (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (sibsb . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) + (sib . ,(ly:make-pitch -1 6 FLAT)) + (sisb . ,(ly:make-pitch -1 6 SEMI-FLAT)) + (si . ,(ly:make-pitch -1 6 NATURAL)) + (sisd . ,(ly:make-pitch -1 6 SEMI-SHARP)) + (sid . ,(ly:make-pitch -1 6 SHARP)) + (sidsd . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) + (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + + )) + + + ;; Language: Norsk -------------------------------------------------; + ;; Arvid Grøtting + ;; + ;; es = flat + ;; ess = flat + ;; eses = double-flat + ;; essess = double-flat + ;; + ;; is = sharp + ;; iss = sharp + ;; isis = double-sharp + ;; ississ = double-sharp + ;; + ;; English: c d e f g a bf b + ;; Norwegian: c d e f g a b h + + (norsk . ( + (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (ces . ,(ly:make-pitch -1 0 FLAT)) + (cess . ,(ly:make-pitch -1 0 FLAT)) + (c . ,(ly:make-pitch -1 0 NATURAL)) + (cis . ,(ly:make-pitch -1 0 SHARP)) + (ciss . ,(ly:make-pitch -1 0 SHARP)) + (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (des . ,(ly:make-pitch -1 1 FLAT)) + (dess . ,(ly:make-pitch -1 1 FLAT)) + (d . ,(ly:make-pitch -1 1 NATURAL)) + (dis . ,(ly:make-pitch -1 1 SHARP)) + (diss . ,(ly:make-pitch -1 1 SHARP)) + (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (eessess . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (ees . ,(ly:make-pitch -1 2 FLAT)) + (eess . ,(ly:make-pitch -1 2 FLAT)) + (es . ,(ly:make-pitch -1 2 FLAT)) + (ess . ,(ly:make-pitch -1 2 FLAT)) + (e . ,(ly:make-pitch -1 2 NATURAL)) + (eis . ,(ly:make-pitch -1 2 SHARP)) + (eiss . ,(ly:make-pitch -1 2 SHARP)) + (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fes . ,(ly:make-pitch -1 3 FLAT)) + (fess . ,(ly:make-pitch -1 3 FLAT)) + (f . ,(ly:make-pitch -1 3 NATURAL)) + (fis . ,(ly:make-pitch -1 3 SHARP)) + (fiss . ,(ly:make-pitch -1 3 SHARP)) + (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (ges . ,(ly:make-pitch -1 4 FLAT)) + (gess . ,(ly:make-pitch -1 4 FLAT)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (gis . ,(ly:make-pitch -1 4 SHARP)) + (giss . ,(ly:make-pitch -1 4 SHARP)) + (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (aessess . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (aes . ,(ly:make-pitch -1 5 FLAT)) + (aess . ,(ly:make-pitch -1 5 FLAT)) + (as . ,(ly:make-pitch -1 5 FLAT)) + (ass . ,(ly:make-pitch -1 5 FLAT)) + (a . ,(ly:make-pitch -1 5 NATURAL)) + (ais . ,(ly:make-pitch -1 5 SHARP)) + (aiss . ,(ly:make-pitch -1 5 SHARP)) + (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (bess . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (b . ,(ly:make-pitch -1 6 FLAT)) + (b . ,(ly:make-pitch -1 6 FLAT)) + (h . ,(ly:make-pitch -1 6 NATURAL)) + (his . ,(ly:make-pitch -1 6 SHARP)) + (hiss . ,(ly:make-pitch -1 6 SHARP)) + (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: Portugues ---------------------------------------------; + ;; Pedro Kröger + ;; + ;; b = flat (bemol) + ;; bb = double-flat + ;; bqt = quarter-tone flat + ;; btqt = three-quarter-tones flat + ;; + ;; s = sharp (sustenido) + ;; ss = double-sharp + ;; sqt = quarter-tone sharp + ;; stqt = three-quarter-tones sharp + ;; + ;; English: c d e f g a b + ;; Portuguese: do re mi fa sol la si + + (portugues . ( + (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (dobtqt . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) + (dob . ,(ly:make-pitch -1 0 FLAT)) + (dobqt . ,(ly:make-pitch -1 0 SEMI-FLAT)) + (do . ,(ly:make-pitch -1 0 NATURAL)) + (dosqt . ,(ly:make-pitch -1 0 SEMI-SHARP)) + (dos . ,(ly:make-pitch -1 0 SHARP)) + (dostqt . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) + (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + + (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (rebtqt . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) + (reb . ,(ly:make-pitch -1 1 FLAT)) + (rebqt . ,(ly:make-pitch -1 1 SEMI-FLAT)) + (re . ,(ly:make-pitch -1 1 NATURAL)) + (resqt . ,(ly:make-pitch -1 1 SEMI-SHARP)) + (res . ,(ly:make-pitch -1 1 SHARP)) + (restqt . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) + (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + + (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (mibtqt . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) + (mib . ,(ly:make-pitch -1 2 FLAT)) + (mibqt . ,(ly:make-pitch -1 2 SEMI-FLAT)) + (mi . ,(ly:make-pitch -1 2 NATURAL)) + (misqt . ,(ly:make-pitch -1 2 SEMI-SHARP)) + (mis . ,(ly:make-pitch -1 2 SHARP)) + (mistqt . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) + (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + + (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fabtqt . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) + (fab . ,(ly:make-pitch -1 3 FLAT)) + (fabqt . ,(ly:make-pitch -1 3 SEMI-FLAT)) + (fa . ,(ly:make-pitch -1 3 NATURAL)) + (fasqt . ,(ly:make-pitch -1 3 SEMI-SHARP)) + (fas . ,(ly:make-pitch -1 3 SHARP)) + (fastqt . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) + (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + + (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (solbtqt . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) + (solb . ,(ly:make-pitch -1 4 FLAT)) + (solbqt . ,(ly:make-pitch -1 4 SEMI-FLAT)) + (sol . ,(ly:make-pitch -1 4 NATURAL)) + (solsqt . ,(ly:make-pitch -1 4 SEMI-SHARP)) + (sols . ,(ly:make-pitch -1 4 SHARP)) + (solstqt . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) + (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + + (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (labtqt . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) + (lab . ,(ly:make-pitch -1 5 FLAT)) + (labqt . ,(ly:make-pitch -1 5 SEMI-FLAT)) + (la . ,(ly:make-pitch -1 5 NATURAL)) + (lasqt . ,(ly:make-pitch -1 5 SEMI-SHARP)) + (las . ,(ly:make-pitch -1 5 SHARP)) + (lastqt . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) + (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + + (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (sibtqt . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) + (sib . ,(ly:make-pitch -1 6 FLAT)) + (sibqt . ,(ly:make-pitch -1 6 SEMI-FLAT)) + (si . ,(ly:make-pitch -1 6 NATURAL)) + (sisqt . ,(ly:make-pitch -1 6 SEMI-SHARP)) + (sis . ,(ly:make-pitch -1 6 SHARP)) + (sistqt . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) + (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + + )) + + + ;; Language: Suomi -------------------------------------------------; + ;; Heikki Junes + ;; + ;; es = flat + ;; eses = double-flat + ;; + ;; is = sharp + ;; isis = double-sharp + ;; + ;; English: c d e f g a bf b + ;; Finnish: c d e f g a b h + + (suomi . ( + (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (ces . ,(ly:make-pitch -1 0 FLAT)) + (c . ,(ly:make-pitch -1 0 NATURAL)) + (cis . ,(ly:make-pitch -1 0 SHARP)) + (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (des . ,(ly:make-pitch -1 1 FLAT)) + (d . ,(ly:make-pitch -1 1 NATURAL)) + (dis . ,(ly:make-pitch -1 1 SHARP)) + (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (es . ,(ly:make-pitch -1 2 FLAT)) + (e . ,(ly:make-pitch -1 2 NATURAL)) + (eis . ,(ly:make-pitch -1 2 SHARP)) + (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fes . ,(ly:make-pitch -1 3 FLAT)) + (f . ,(ly:make-pitch -1 3 NATURAL)) + (fis . ,(ly:make-pitch -1 3 SHARP)) + (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (ges . ,(ly:make-pitch -1 4 FLAT)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (gis . ,(ly:make-pitch -1 4 SHARP)) + (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) ;;non-standard name for asas + (as . ,(ly:make-pitch -1 5 FLAT)) + (a . ,(ly:make-pitch -1 5 NATURAL)) + (ais . ,(ly:make-pitch -1 5 SHARP)) + (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (bb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) ;; should be bes. Kept for downwards compatibility + (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) ;;non-standard name for bb + (b . ,(ly:make-pitch -1 6 FLAT)) + (h . ,(ly:make-pitch -1 6 NATURAL)) + (his . ,(ly:make-pitch -1 6 SHARP)) + (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: Svenska -----------------------------------------------; + ;; Mats Bengtsson + ;; + ;; ess = flat + ;; essess = double-flat + ;; + ;; iss = sharp + ;; ississ = double-sharp + ;; + ;; English: c d e f g a bf b + ;; Swedish: c d e f g a b h + + (svenska . ( + (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (cess . ,(ly:make-pitch -1 0 FLAT)) + (c . ,(ly:make-pitch -1 0 NATURAL)) + (ciss . ,(ly:make-pitch -1 0 SHARP)) + (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (dess . ,(ly:make-pitch -1 1 FLAT)) + (d . ,(ly:make-pitch -1 1 NATURAL)) + (diss . ,(ly:make-pitch -1 1 SHARP)) + (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (ess . ,(ly:make-pitch -1 2 FLAT)) + (e . ,(ly:make-pitch -1 2 NATURAL)) + (eiss . ,(ly:make-pitch -1 2 SHARP)) + (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fess . ,(ly:make-pitch -1 3 FLAT)) + (f . ,(ly:make-pitch -1 3 NATURAL)) + (fiss . ,(ly:make-pitch -1 3 SHARP)) + (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (gess . ,(ly:make-pitch -1 4 FLAT)) + (g . ,(ly:make-pitch -1 4 NATURAL)) + (giss . ,(ly:make-pitch -1 4 SHARP)) + (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (ass . ,(ly:make-pitch -1 5 FLAT)) + (a . ,(ly:make-pitch -1 5 NATURAL)) + (aiss . ,(ly:make-pitch -1 5 SHARP)) + (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + (hessess . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (b . ,(ly:make-pitch -1 6 FLAT)) + (h . ,(ly:make-pitch -1 6 NATURAL)) + (hiss . ,(ly:make-pitch -1 6 SHARP)) + (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + + + ;; Language: Vlaams ------------------------------------------------; + ;; Hendrik Maryns + ;; + ;; b = flat (bemol) + ;; bb = double-flat + ;; + ;; k = sharp (kruis) + ;; kk = double-sharp + ;; + ;; English: c d e f g a b + ;; Flemish: do re mi fa sol la si + + (vlaams . ( + (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) + (dob . ,(ly:make-pitch -1 0 FLAT)) + (do . ,(ly:make-pitch -1 0 NATURAL)) + (dok . ,(ly:make-pitch -1 0 SHARP)) + (dokk . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) + + (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) + (reb . ,(ly:make-pitch -1 1 FLAT)) + (re . ,(ly:make-pitch -1 1 NATURAL)) + (rek . ,(ly:make-pitch -1 1 SHARP)) + (rekk . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) + + (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) + (mib . ,(ly:make-pitch -1 2 FLAT)) + (mi . ,(ly:make-pitch -1 2 NATURAL)) + (mik . ,(ly:make-pitch -1 2 SHARP)) + (mikk . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) + + (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) + (fab . ,(ly:make-pitch -1 3 FLAT)) + (fa . ,(ly:make-pitch -1 3 NATURAL)) + (fak . ,(ly:make-pitch -1 3 SHARP)) + (fakk . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) + + (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) + (solb . ,(ly:make-pitch -1 4 FLAT)) + (sol . ,(ly:make-pitch -1 4 NATURAL)) + (solk . ,(ly:make-pitch -1 4 SHARP)) + (solkk . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) + + (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) + (lab . ,(ly:make-pitch -1 5 FLAT)) + (la . ,(ly:make-pitch -1 5 NATURAL)) + (lak . ,(ly:make-pitch -1 5 SHARP)) + (lakk . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) + + (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) + (sib . ,(ly:make-pitch -1 6 FLAT)) + (si . ,(ly:make-pitch -1 6 NATURAL)) + (sik . ,(ly:make-pitch -1 6 SHARP)) + (sikk . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) + )) + )) + +(define-public (note-names-language parser str) + (_ "Select note names language.") + (let ((alist (assoc-get (string->symbol str) + language-pitch-names + '()))) + (if (pair? alist) + (begin + (if (ly:get-option 'verbose) + (ly:message (_ "Using `~a' note names...") str)) + (set! pitchnames alist) + (ly:parser-set-note-names parser alist)) + (ly:warning (_ "Could not find language `~a'. Ignoring.") str)))) diff --git a/scm/define-stencil-commands.scm b/scm/define-stencil-commands.scm index 2e816ccaa2..7b27d5201b 100644 --- a/scm/define-stencil-commands.scm +++ b/scm/define-stencil-commands.scm @@ -1,57 +1,79 @@ -;; -;; define-stencil-commands.scm -- define valid stencil expression heads -;; -;; source file of the GNU LilyPond music typesetter -;; -;; (c) 2005--2009 Han-Wen Nienhuys -;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2005--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . -(map ly:register-stencil-expression - '(beam - bezier-sandwich - blank - bracket - char - circle - dashed-line - dashed-slur - dot - draw-line - ellipse - embedded-ps - glyph-string - named-glyph - oval - path - polygon - repeat-slash - resetcolor - round-filled-box - setcolor - text - url-link - utf-8-string - white-dot - white-text - zigzag-line - - grob-cause - no-origin - placebox - unknown +;; TODO: +;; - stencil-commands should have docstrings. - delay-stencil-evaluation - )) +(define-public (ly:all-stencil-commands) + "Return the list of stencil commands that can be +defined in the output modules (@file{output-*.scm})." + '(beam + bezier-sandwich + blank + bracket + char + circle + dashed-line + dashed-slur + dot + draw-line + ellipse + embedded-ps + embedded-svg + glyph-string + grob-cause + named-glyph + no-origin + oval + page-link + path + partial-ellipse + placebox + polygon + repeat-slash + resetcolor + resetrotation + resetscale + round-filled-box + setcolor + setrotation + setscale + text + unknown + url-link + utf-8-string + zigzag-line + )) ;; TODO: -;; - generate this list by registering the output-backend-commands -;; output-backend-commands should have docstrings. -;; - remove hard copies in output-ps +;; - output-backend-commands should have docstrings. (define-public (ly:all-output-backend-commands) - "Return list of output backend commands." - '(combine-stencil - color - translate-stencil)) + "Return the list of extra output backend commands that +are used internally in @file{lily/stencil-interpret.cc}." + '(color + combine-stencil + delay-stencil-evaluation + footnote + rotate-stencil + scale-stencil + translate-stencil + )) -(map ly:register-stencil-expression (ly:all-output-backend-commands)) +(map ly:register-stencil-expression + (append (ly:all-stencil-commands) + (ly:all-output-backend-commands))) diff --git a/scm/define-woodwind-diagrams.scm b/scm/define-woodwind-diagrams.scm new file mode 100644 index 0000000000..29825fd5a5 --- /dev/null +++ b/scm/define-woodwind-diagrams.scm @@ -0,0 +1,1231 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2010--2011 Mike Solomon +;;;; Clarinet drawings copied from diagrams created by +;;;; Gilles Thibault +;;;; +;;;; 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 . + +(define HOLE-FILL-LIST '((R . 3) (1q . 5) (1h . 7) (3q . 11) (F . 13))) + +;; Utility functions + +(define-public (symbol-concatenate . names) + "Like @code{string-concatenate}, but for symbols." + (string->symbol (apply string-append (map symbol->string names)))) + +(define-public (function-chain arg function-list) + "Applies a list of functions in @var{function-list} to @var{arg}. +Each element of @var{function-list} is structured @code{(cons function +'(arg2 arg3 ...))}. If function takes arguments besides @var{arg}, they +are provided in @var{function-list}. + +Example: Executing @samp{(function-chain 1 `((,+ 1) (,- 2) (,+ 3) (,/)))} +returns @samp{1/3}." + (if (null? function-list) + arg + (function-chain + (apply (caar function-list) (append `(,arg) (cdar function-list))) + (cdr function-list)))) + +(define (rotunda-map function inlist rotunda) + "Like map, but with a rotating last argument to function. + For example: + @code{guile> (rotunda-map + '(1 2 3 4) '(1 -10))} + @code{(2 -8 4 -6)}" + (define (rotunda-map-chain function inlist outlist rotunda) + (if (null? inlist) + outlist + (rotunda-map-chain + function + (cdr inlist) + (append outlist (list (function (car inlist) (car rotunda)))) + (append (cdr rotunda) (list (car rotunda)))))) + (rotunda-map-chain function inlist '() rotunda)) + +(define (assoc-keys alist) + "Gets the keys of an alist." + (map (lambda (x) (car x)) alist)) + +(define (assoc-values alist) + "Gets the values of an alist." + (map (lambda (x) (cdr x)) alist)) + +(define (get-slope-offset p1 p2) + "Gets the slope and offset for p1 and p2. + For example: + @code{(get-slope-offset '(1 . 2) '(3 . -5.1))} + @code{(-3.55 . 5.55)}" + (let* + ((slope (/ (- (cdr p1) (cdr p2)) (- (car p1) (car p2)))) + (offset (- (cdr p1) (* slope (car p1))))) + `(,slope . ,offset))) + +(define (is-square? x input-list) + "Returns true if x is the square of a value in input-list." + (pair? (memv (inexact->exact (sqrt x)) input-list))) + +(define (satisfies-function? function input-list) + "Returns true if an element in @code{input-list} is true + when @code{function} is applied to it. + For example: + @code{guile> (satisfies-function? null? '((1 2) ()))} + @code{#t} + @code{guile> (satisfies-function? null? '((1 2) (3)))} + @code{#f}" + (if (null? input-list) + #f + (or (function (car input-list)) + (satisfies-function? function (cdr input-list))))) + +(define (true-entry? input-list) + "Is there a true entry in @code{input-list}?" + (satisfies-function? identity input-list)) + +(define (entry-greater-than-x? input-list x) + "Is there an entry greater than @code{x} in @code{input-list}?" + (satisfies-function? (lambda (y) (> y x)) input-list)) + +(define (n-true-entries input-list) + "Returns number of true entries in @code{input-list}." + (reduce + 0 (map (lambda (x) (if x 1 0)) input-list))) + +(define (bezier-head-for-stencil bezier cut-point) + "Prepares a split-bezier to be used in a connected path stencil." + (list-tail (flatten-list (car (split-bezier bezier cut-point))) 2)) + +;; Translators for keys + +; Translates a "normal" key (open, closed, trill) +(define (key-fill-translate fill) + (cond + ((= fill 1) #f) + ((= fill 2) #f) + ((= fill (expt (assoc-get 'F HOLE-FILL-LIST) 2)) 0.5) + ((= fill (assoc-get 'F HOLE-FILL-LIST)) #t))) + +; Similar to above, but trans vs opaque doesn't matter +(define (text-fill-translate fill) + (cond + ((< fill 3) 1.0) + ((= fill (expt (assoc-get 'F HOLE-FILL-LIST) 2)) 0.5) + ((= fill (assoc-get 'F HOLE-FILL-LIST)) 0.0))) + +; Emits a list for the central-column-hole maker +; (not-full?, 1-quarter-full?, 1-half-full?, 3-quarters-full?, full?) +; Multiple values, such as (#t #f #f #t #f), mean a trill between +; not-full and 3-quarters-full +(define (process-fill-value fill) + (let* ((avals (list-tail (assoc-values HOLE-FILL-LIST) 1))) + (append `(,(or (< fill 3) (is-square? fill avals))) + (map (lambda (x) (= 0 (remainder fill x))) avals)))) + +; Color a stencil gray +(define (gray-colorize stencil) + (apply ly:stencil-in-color (cons stencil (x11-color 'grey)))) + +; A connected path stencil that is surrounded by proc +(define (rich-path-stencil ls x-stretch y-stretch proc) + (lambda (radius thick fill layout props) + (let* + ((fill-translate (key-fill-translate fill)) + (gray? (eqv? fill-translate 0.5))) + (ly:stencil-add + ((if gray? gray-colorize identity) + (proc + (make-connected-path-stencil + ls + thick + (* x-stretch radius) + (* y-stretch radius) + #f + (if gray? #t fill-translate)))) + (if (not gray?) + empty-stencil + ((rich-path-stencil ls x-stretch y-stretch proc) + radius + thick + 1 + layout + props)))))) + +; A connected path stencil without a surrounding proc +(define (standard-path-stencil ls x-stretch y-stretch) + (rich-path-stencil ls x-stretch y-stretch identity)) + +; An ellipse stencil that is surrounded by a proc +(define (rich-pe-stencil x-stretch y-stretch start end proc) + (lambda (radius thick fill layout props) + (let* + ((fill-translate (key-fill-translate fill)) + (gray? (eqv? fill-translate 0.5))) + (ly:stencil-add + ((if gray? gray-colorize identity) + (proc + (make-partial-ellipse-stencil + (* x-stretch radius) + (* y-stretch radius) + start + end + thick + #t + (if gray? #t fill-translate)))) + (if (not gray?) + empty-stencil + ((rich-pe-stencil x-stretch y-stretch start end proc) + radius + thick + 1 + layout + props)))))) + +(define (rich-e-stencil x-stretch y-stretch proc) + (lambda (radius thick fill layout props) + (let* + ((fill-translate (key-fill-translate fill)) + (gray? (eqv? fill-translate 0.5))) + (ly:stencil-add + ((if gray? gray-colorize identity) + (proc + (make-ellipse-stencil + (* x-stretch radius) + (* y-stretch radius) + thick + (if gray? #t fill-translate)))) + (if (not gray?) + empty-stencil + ((rich-e-stencil x-stretch y-stretch proc) + radius + thick + 1 + layout + props)))))) + +; An ellipse stencil without a surrounding proc +(define (standard-e-stencil x-stretch y-stretch) + (rich-e-stencil x-stretch y-stretch identity)) + +; Translates all possible representations of symbol. +; If simple? then the only representations are open, closed, and trill. +; Otherwise, there can be various levels of "closure" on the holes +; ring? allows for a ring around the holes as well +(define (make-symbol-alist symbol simple? ring?) + (filter (lambda (x) + (not + (equal? + x + `(,(symbol-concatenate symbol 'T 'F) . + ,(expt (assoc-get 'F HOLE-FILL-LIST) 2))))) + (append + `((,symbol . ,(assoc-get 'F HOLE-FILL-LIST)) + (,(symbol-concatenate symbol 'T) . + ,(expt (assoc-get 'F HOLE-FILL-LIST) 2))) + (if simple? + '() + (apply append + (map (lambda (x) + (append + `((,(symbol-concatenate symbol (car x) 'T) + . ,(expt (cdr x) 2)) + (,(symbol-concatenate symbol 'T (car x)) + . ,(* (cdr x) (assoc-get 'F HOLE-FILL-LIST))) + (,(symbol-concatenate symbol (car x)) + . ,(cdr x))) + (apply append + (map (lambda (y) + (map (lambda (a b) + `(,(symbol-concatenate symbol + (car a) + 'T + (car b)) + . ,(* (cdr a) (cdr b)))) + `(,x ,y) `(,y ,x))) + (cdr (member x HOLE-FILL-LIST)))))) + (if ring? HOLE-FILL-LIST (cdr HOLE-FILL-LIST)))))))) + +;;; Commands for text layout + +; Draws a circle around markup if (= trigger 0.5) +(define-markup-command + (conditional-circle-markup layout props trigger in-markup) + (number? markup?) + (interpret-markup layout props + (if (eqv? trigger 0.5) + (markup #:circle (markup in-markup)) + (markup in-markup)))) + +; Makes a list of named-keys +(define (make-name-keylist input-list key-list font-size) + (map (lambda (x y) + (if (< x 1) + (markup #:conditional-circle-markup + x + (make-concat-markup + (list + (markup #:abs-fontsize font-size (car y)) + (if (and (< x 1) (cdr y)) + (if (eqv? (cdr y) 1) + (markup + #:abs-fontsize + font-size + #:raise + 1 + #:fontsize + -2 + #:sharp) + (markup + #:abs-fontsize + font-size + #:raise + 1 + #:fontsize + -2 + #:flat)) + (markup #:null))))) + (markup #:null))) + input-list key-list)) + +; Makes a list of number-keys +(define (make-number-keylist input-list key-list font-size) + (map (lambda (x y) + (if (< x 1) + (markup + #:conditional-circle-markup + x + (markup #:abs-fontsize font-size #:number y)) + (markup #:null))) + input-list + key-list)) + +; Creates a named-key list with a certain alignment +(define (aligned-text-stencil-function dir hv) + (lambda (key-name-list radius fill-list layout props) + (interpret-markup + layout + props + (make-general-align-markup + X + dir + ((if hv make-concat-markup make-center-column-markup) + (make-name-keylist + (map text-fill-translate fill-list) + key-name-list + (* 12 radius))))))) + +(define number-column-stencil + (lambda (key-name-list radius fill-list layout props) + (interpret-markup + layout + props + (make-general-align-markup + Y + CENTER + (make-general-align-markup + X + RIGHT + (make-override-markup + '(baseline-skip . 0) + (make-column-markup + (make-number-keylist + (map text-fill-translate fill-list) + key-name-list + (* radius 8))))))))) + +; Utility function for the left-hand keys +(define lh-woodwind-text-stencil + (aligned-text-stencil-function LEFT #t)) + +; Utility function for the right-hand keys +(define rh-woodwind-text-stencil + (aligned-text-stencil-function RIGHT #t)) + +(define octave-woodwind-text-stencil + (aligned-text-stencil-function CENTER #f)) + +;;; Draw rules + +(define (rich-group-draw-rule alist target-part change-part) + (if + (entry-greater-than-x? + (map (lambda (key) (assoc-get key alist)) target-part) 3) + (map-selected-alist-keys (lambda (x) (if (= x 0) 1 x)) change-part alist) + alist)) + +(define (bassoon-midline-rule alist target-part) + (if + (entry-greater-than-x? + (map (lambda (key) (assoc-get key alist)) target-part) 0) + (map-selected-alist-keys (lambda (x) 1) '((hidden . long-midline)) alist) + (map-selected-alist-keys (lambda (x) 1) '((hidden . midline)) alist))) + +(define (group-draw-rule alist target-part) + (rich-group-draw-rule alist target-part target-part)) + +(define (group-automate-rule alist change-part) + (map-selected-alist-keys (lambda (x) (if (= x 0) 1 x)) change-part alist)) + +(define (apply-group-draw-rule-series alist target-part-list) + (if (null? target-part-list) + alist + (apply-group-draw-rule-series + (group-draw-rule alist (car target-part-list)) + (cdr target-part-list)))) + +;; Extra-offset rules + +(define (rich-group-extra-offset-rule alist target-part change-part eos) + (if + (entry-greater-than-x? + (map (lambda (key) (assoc-get key alist)) target-part) 0) + (map-selected-alist-keys (lambda (x) eos) change-part alist) + alist)) + +(define (group-extra-offset-rule alist target-part eos) + (rich-group-extra-offset-rule alist target-part target-part eos)) + +(define (uniform-extra-offset-rule alist eos) + (map-selected-alist-keys + (lambda (x) (if (pair? x) x eos)) + (assoc-keys alist) + alist)) + +;;; General drawing commands + +; Used all the time for a dividing line +(define (midline-stencil radius thick fill layout props) + (make-line-stencil (* thick 2) (* -0.80 radius) 0 (* 0.80 radius) 0)) + +(define (long-midline-stencil radius thick fill layout props) + (make-line-stencil (* thick 2) (* -5.75 radius) 0 (* 0.75 radius) 0)) + +; Used all the time for a small, between-hole key +(define little-elliptical-key-stencil (standard-e-stencil 0.75 0.2)) + +; Used for several upper keys in the clarinet and sax +(define (upper-key-stencil tailw tailh bodyw bodyh) + (let* + ((xmove (lambda (x) (+ tailw (+ 0.2 (* bodyw (- x 0.2)))))) + (ymove (lambda (x) (+ (- tailh) (+ -0.05 (* bodyh (+ x 0.05))))))) + (standard-path-stencil + `((,(xmove 0.7) + ,(ymove -0.2) + ,(xmove 1.0) + ,(ymove -1.0) + ,(xmove 0.5) + ,(ymove -1.0)) + (,(xmove 0.2) + ,(ymove -1.0) + ,(xmove 0.2) + ,(ymove -0.2) + ,(xmove 0.3) + ,(ymove -0.1)) + (,(+ 0.2 tailw) + ,(- -0.05 tailh) + ,(+ 0.1 (/ tailw 2)) + ,(- -0.025 (/ tailh 2)) + 0.0 + 0.0)) + 1.0 + 1.0))) + +; Utility function for the column-hole maker. +; Returns the left and right degrees for the drawing of a given +; fill level (1-quarter, 1-half, etc...) +(define (degree-first-true fill-list left? reverse?) + (define (dfl-crawler fill-list os-list left?) + (if (car fill-list) + ((if left? car cdr) (car os-list)) + (dfl-crawler (cdr fill-list) (cdr os-list) left?))) + (dfl-crawler + ((if reverse? reverse identity) fill-list) + ((if reverse? reverse identity) + '((0 . 0) (215 . 325) (180 . 0) (145 . 35) (90 . 90))) + left?)) + +; Gets the position of the first (or last if reverse?) element of a list. +(define (position-true-endpoint in-list reverse?) + (define (pte-crawler in-list n) + (if (car in-list) + n + (pte-crawler (cdr in-list) (+ n 1)))) + ((if reverse? - +) + (if reverse? (length in-list) 0) + (pte-crawler ((if reverse? reverse identity) in-list) 0))) + +; Huge, kind-of-ugly maker of a circle in a column. +; I think this is the clearest way to write it, though... + +(define (column-circle-stencil radius thick fill layout props) + (let* ((fill-list (process-fill-value fill))) + (cond + ((and + (list-ref fill-list 0) + (not (true-entry? (list-tail fill-list 1)))) ; is it empty? + ((standard-e-stencil 1.0 1.0) radius thick fill layout props)) + ((and + (list-ref fill-list 4) + (not (true-entry? (list-head fill-list 4)))) ; is it full? + ((standard-e-stencil 1.0 1.0) radius thick fill layout props)) + ((and + (list-ref fill-list 0) + (list-ref fill-list 4)) ; is it a trill between empty and full? + ((standard-e-stencil 1.0 1.0) radius thick fill layout props)) + (else ;If none of these, it is partially full. + (ly:stencil-add + ((rich-pe-stencil 1.0 1.0 0 360 identity) + radius + thick + (if (list-ref fill-list 4) + (expt (assoc-get 'F HOLE-FILL-LIST) 2) + 1) + layout + props) + ((rich-pe-stencil + 1.0 + 1.0 + (degree-first-true fill-list #t #t) + (degree-first-true fill-list #f #t) + identity) + radius + thick + (if + (true-entry? + (list-head fill-list (position-true-endpoint fill-list #t))) + (expt (assoc-get 'F HOLE-FILL-LIST) 2) + (assoc-get 'F HOLE-FILL-LIST)) + layout + props) + (if + (= 2 (n-true-entries (list-tail fill-list 1))) ; trill? + ((rich-pe-stencil + 1.0 + 1.0 + (degree-first-true fill-list #t #f) + (degree-first-true fill-list #f #f) + identity) + radius + thick + (assoc-get 'F HOLE-FILL-LIST) + layout + props) + empty-stencil)))))) + +(define (variable-column-circle-stencil scaler) + (lambda (radius thick fill layout props) + (column-circle-stencil (* radius scaler) thick fill layout props))) + +; A stencil for ring-column circles that combines two of the above +(define (ring-column-circle-stencil radius thick fill layout props) + (if (= 0 (remainder fill (assoc-get 'R HOLE-FILL-LIST))) + (ly:stencil-add + ((if + (= fill (expt (assoc-get 'R HOLE-FILL-LIST) 2)) + gray-colorize + identity) + ((standard-e-stencil + (* (+ (- 1.0 (* 2 thick)) (/ thick 2))) + (* (+ (- 1.0 (* 2 thick)) (/ thick 2)))) + radius + (* (* 4 radius) thick) + 1 + layout + props)) + ((standard-e-stencil 1.0 1.0) radius thick 1 layout props) + (column-circle-stencil + (+ (* (- 1.0 (* 4 thick)) radius) (/ thick 2)) + thick + (* + (if (= 0 (remainder fill (assoc-get 'F HOLE-FILL-LIST))) + (assoc-get 'F HOLE-FILL-LIST) + 1) + (if (= fill (expt (assoc-get 'R HOLE-FILL-LIST) 2)) + (/ fill (expt (assoc-get 'R HOLE-FILL-LIST) 2)) + (/ fill (assoc-get 'R HOLE-FILL-LIST)))) + layout + props)) + (column-circle-stencil radius thick fill layout props))) + +;;; Flute family stencils + +(define flute-lh-b-key-stencil + (standard-path-stencil + '((0 1.3) + (0 1.625 -0.125 1.75 -0.25 1.75) + (-0.55 1.75 -0.55 0.95 -0.25 0.7) + (0 0.4 0 0.125 0 0)) + 2 + 1.55)) + +(define flute-lh-bes-key-stencil + (standard-path-stencil + '((0 1.3) + (0 1.625 -0.125 1.75 -0.25 1.75) + (-0.55 1.75 -0.55 0.95 -0.25 0.7) + (0 0.4 0 0.125 0 0)) + 2.0 + 1.3)) + +(define (flute-lh-gis-rh-bes-key-stencil deg) + (rich-path-stencil + '((0.1 0.1 0.2 0.4 0.3 0.6) + (0.3 1.0 0.8 1.0 0.8 0.7) + (0.8 0.3 0.5 0.3 0 0)) + 1.0 + 1.0 + (lambda (stencil) (ly:stencil-rotate stencil deg 0 0)))) + +(define flute-lh-gis-key-stencil (flute-lh-gis-rh-bes-key-stencil 0)) + +(define flute-rh-bes-key-stencil (flute-lh-gis-rh-bes-key-stencil 200)) + +(define flute-rh-d-key-stencil little-elliptical-key-stencil) + +(define flute-rh-dis-key-stencil little-elliptical-key-stencil) + +(define flute-rh-ees-key-stencil + (standard-path-stencil + '((0.8 0) (1.1 0 1.1 0.75 0.7 0.75) (0.5 0.75) (0.15 0.75 0.1 0.2 0 0)) + -2.38 + 1.4)) + +(define (piccolo-rh-x-key-stencil radius thick fill layout props) + (interpret-markup + layout + props + (make-general-align-markup + Y + DOWN + (make-concat-markup + (make-name-keylist + `(,(text-fill-translate fill)) + '(("X" . #f)) + (* 9 radius)))))) + +(define flute-lower-row-stretch 1.4) + +(define flute-rh-cis-key-stencil + (standard-path-stencil + '((0 0.75) (-0.8 0.75 -0.8 0 0 0)) + flute-lower-row-stretch + flute-lower-row-stretch)) + +(define flute-rh-c-key-stencil + (standard-path-stencil + '((0 0.75) (0.4 0.75) (0.4 0) (0 0)) + flute-lower-row-stretch + flute-lower-row-stretch)) + +(define flute-rh-b-key-stencil + (standard-path-stencil + '((0 0.75) (0.25 0.75) (0.25 0) (0 0)) + flute-lower-row-stretch + flute-lower-row-stretch)) + +(define flute-rh-gz-key-stencil + (rich-path-stencil + '((0.1 0.1 0.4 0.2 0.6 0.3) + (1.0 0.3 1.0 0.8 0.7 0.8) + (0.3 0.8 0.3 0.5 0 0)) + flute-lower-row-stretch + flute-lower-row-stretch + (lambda (stencil) (ly:stencil-rotate stencil 160 0 0)))) + +;;; Shared oboe/clarinet stencils + +(define (oboe-lh-gis-lh-low-b-key-stencil gis?) + (let* + ((x 1.2) + (y 0.4) + (scaling-factor 1.7) + (up-part + (car + (split-bezier + `((0.0 . 0.0) (0.0 . ,y) (,x . ,y) (,x . 0.0)) + 0.8))) + (down-part + (cdr + (split-bezier + `((,x . 0.0) (,x . ,(- y)) (0.0 . ,(- y)) (0.0 . 0.0)) + 0.2)))) + (if gis? + (standard-path-stencil + (append + (append + `((0.25 ,(/ y -2) 0.75 ,(/ y -2) 1.0 0.0)) + (map (lambda (l) + (flatten-list + (map (lambda (x) + (coord-translate + (coord-rotate x (atan (/ y (* 2 0.25)))) + '(1.0 . 0))) + l))) + `(((0 . ,y) (,x . ,y) (,x . 0)) + ((,x . ,(- y)) (0 . ,(- y)) (0 . 0))))) + `((0.75 ,(/ y -2) 0.25 ,(/ y -2) 0.0 0.0))) + scaling-factor + scaling-factor) + (standard-path-stencil + (map (lambda (l) + (flatten-list + (map (lambda (x) + (coord-rotate x (atan (/ y (* 2 0.25))))) + l))) + `(,(list-tail up-part 1) + ,(list-head down-part 1) + ,(list-tail down-part 1))) + (- scaling-factor) + (- scaling-factor))))) + +(define oboe-lh-gis-key-stencil (oboe-lh-gis-lh-low-b-key-stencil #t)) + +(define oboe-lh-low-b-key-stencil (oboe-lh-gis-lh-low-b-key-stencil #f)) + +(define (oboe-lh-ees-lh-bes-key-stencil ees?) + (standard-path-stencil + `((0 1.5) + (0 1.625 -0.125 1.75 -0.25 1.75) + (-0.5 1.75 -0.5 0.816 -0.25 0.5) + (0 0.25 0 0.125 0 0) + (0 ,(if ees? -0.6 -0.3))) + (* (if ees? -1.0 1.0) -1.8) + 1.8)) + +(define oboe-lh-ees-key-stencil (oboe-lh-ees-lh-bes-key-stencil #t)) + +(define oboe-lh-bes-key-stencil (oboe-lh-ees-lh-bes-key-stencil #f)) + +;;; Oboe family stencils + +(define (oboe-lh-octave-key-stencil long?) + (let* ((h (if long? 1.4 1.2))) + (standard-path-stencil + `((-0.4 0 -0.4 1.0 -0.1 1.0) + (-0.1 ,h) + (0.1 ,h) + (0.1 1.0) + (0.4 1.0 0.4 0 0 0)) + 2.0 + 2.0))) + +(define oboe-lh-I-key-stencil (oboe-lh-octave-key-stencil #f)) + +(define oboe-lh-II-key-stencil (oboe-lh-octave-key-stencil #f)) + +(define oboe-lh-III-key-stencil (oboe-lh-octave-key-stencil #t)) + +(define oboe-lh-b-key-stencil (standard-e-stencil 0.6 0.8)) + +(define oboe-lh-d-key-stencil little-elliptical-key-stencil) + +(define oboe-lh-cis-key-stencil little-elliptical-key-stencil) + +(define oboe-lh-f-key-stencil (standard-e-stencil 0.5 1.0)) + +(define oboe-rh-a-key-stencil (standard-e-stencil 1.0 0.45)) + +(define oboe-rh-gis-key-stencil (standard-e-stencil 0.45 1.2)) + +(define oboe-rh-d-key-stencil little-elliptical-key-stencil) + +(define oboe-rh-f-key-stencil little-elliptical-key-stencil) + +(define (oboe-rh-c-rh-ees-key-stencil c?) + (rich-path-stencil + '((1.0 0.0 1.0 0.70 1.5 0.70) + (2.25 0.70 2.25 -0.4 1.5 -0.4) + (1.0 -0.4 1.0 0 0 0) + (-0.15 0)) + 2.0 + 1.4 + (lambda (stencil) (ly:stencil-rotate stencil (if c? 170 180) 0 0)))) + +(define oboe-rh-banana-key-stencil oboe-rh-gis-key-stencil) + +(define oboe-rh-c-key-stencil (oboe-rh-c-rh-ees-key-stencil #t)) + +(define oboe-rh-cis-key-stencil + (rich-path-stencil + '((0.6 0.0 0.6 0.50 1.25 0.50) + (2.25 0.50 2.25 -0.4 1.25 -0.4) + (0.6 -0.4 0.6 0 0 0)) + -0.9 + 1.0 + (lambda (stencil) (ly:stencil-rotate stencil 0 0 0)))) + +(define oboe-rh-ees-key-stencil (oboe-rh-c-rh-ees-key-stencil #f)) + +;;; Clarinet family stencils + +(define clarinet-lh-thumb-key-stencil + (variable-column-circle-stencil 0.9)) + +(define clarinet-lh-R-key-stencil + (let* ((halfbase (cos (/ PI 10))) + (height (* + halfbase + (/ (sin (/ (* 4 PI) 10)) (cos (/ (* 4 PI) 10)))))) + (standard-path-stencil + `( + (0 ,(/ -4.0 3.0) -2.0 ,(/ -4.0 3.0) -2.0 0.0) + (-1.5 ,(* 0.5 height) -1.25 ,(* 0.75 height) -1.0 ,height) + (-0.75 ,(* 0.75 height) -0.5 ,(* 0.5 height) 0.0 0.0)) + 0.9 + 0.9))) + +(define (clarinet-lh-a-key-stencil radius thick fill layout props) + (let* ((width 0.4) (height 0.75) (linelen 0.45)) + (ly:stencil-add + ((standard-e-stencil width height) radius thick fill layout props) + (ly:stencil-translate + (make-line-stencil thick 0 0 0 (* linelen radius)) + (cons 0 (* height radius)))))) + +(define clarinet-lh-gis-key-stencil (upper-key-stencil 0.0 0.0 1.3 2.0)) + +(define clarinet-lh-ees-key-stencil little-elliptical-key-stencil) + +(define clarinet-lh-cis-key-stencil oboe-lh-gis-key-stencil) + +(define clarinet-lh-f-key-stencil oboe-lh-low-b-key-stencil) + +(define clarinet-lh-e-key-stencil oboe-lh-ees-key-stencil) + +(define clarinet-lh-fis-key-stencil oboe-lh-bes-key-stencil) + +(define clarinet-lh-d-key-stencil (standard-e-stencil 1.0 0.4)) + +(define clarinet-rh-low-c-key-stencil + (standard-path-stencil + '((0.0 1.5) + (0.0 2.5 -1.0 2.5 -1.0 0.75) + (-1.0 0.1 0.0 0.25 0.0 0.3) + (0.0 0.0)) + 0.8 + 0.8)) + +(define clarinet-rh-low-cis-key-stencil + (standard-path-stencil + '((0.0 1.17) + (0.0 1.67 -1.0 1.67 -1.0 0.92) + (-1.0 0.47 0.0 0.52 0.0 0.62) + (0.0 0.0)) + 0.8 + 0.8)) + +(define clarinet-rh-low-d-key-stencil + (standard-path-stencil + '((0.0 1.05) + (0.0 1.55 -1.0 1.55 -1.0 0.8) + (-1.0 0.35 0.0 0.4 0.0 0.5) + (0.0 0.0)) + 0.8 + 0.8)) + +(define clarinet-rh-one-key-stencil (standard-e-stencil 0.5 0.25)) + +(define clarinet-rh-two-key-stencil clarinet-rh-one-key-stencil) + +(define clarinet-rh-three-key-stencil clarinet-rh-one-key-stencil) + +(define clarinet-rh-four-key-stencil clarinet-rh-one-key-stencil) + +(define clarinet-rh-b-key-stencil little-elliptical-key-stencil) + +; cl low-rh values +(define CL-RH-HAIR 0.09) +(define CL-RH-H-STRETCH 2.7) +(define CL-RH-V-STRETCH 0.9) + +; TODO +; there is some unnecessary information duplication here. +; need a way to control all of the below stencils so that if one +; changes, all change... + +(define clarinet-rh-fis-key-stencil + (standard-path-stencil + `(,(bezier-head-for-stencil + '((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0)) + 0.5) + ,(bezier-head-for-stencil + '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75)) + 0.5) + (1.0 1.0 0.0 1.0 0.0 0.0)) + CL-RH-H-STRETCH + CL-RH-V-STRETCH)) + +(define clarinet-rh-gis-key-stencil + (standard-path-stencil + '((0.0 1.0 1.0 1.0 1.0 0.0) (1.0 -1.0 0.0 -1.0 0.0 0.0)) + CL-RH-H-STRETCH + CL-RH-V-STRETCH)) + +(define clarinet-rh-e-key-stencil + (standard-path-stencil + `(,(bezier-head-for-stencil + '((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0)) + 0.5) + ,(bezier-head-for-stencil + '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75)) + 0.5) + ,(bezier-head-for-stencil + `((1.0 . 0.0) (,(/ 1 3) . 0.0) (,(/ 1 3) . 1.5) (1.0 . 1.5)) + 0.5) + ,(bezier-head-for-stencil + `((0.5 . 0.75) (,(/ -1 6) . 0.75) (,(/ -1 6) . -0.75) (0.5 . -0.75)) + 0.5)) + CL-RH-H-STRETCH + CL-RH-V-STRETCH)) + +(define clarinet-rh-f-key-stencil clarinet-rh-gis-key-stencil) + +(define bass-clarinet-rh-ees-key-stencil + (standard-path-stencil + `(,(bezier-head-for-stencil + '((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0)) + 0.5) + ,(bezier-head-for-stencil + '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75)) + 0.5) + (1.0 1.0 0.0 1.0 0.0 0.0)) + CL-RH-H-STRETCH + (- CL-RH-V-STRETCH))) + +(define low-bass-clarinet-rh-ees-key-stencil clarinet-rh-e-key-stencil) + +(define clarinet-rh-d-key-stencil clarinet-rh-gis-key-stencil) + +;;; Saxophone family stencils + +(define saxophone-lh-ees-key-stencil (upper-key-stencil 0.0 0.0 1.3 2.0)) + +(define saxophone-lh-f-key-stencil (upper-key-stencil 0.0 0.0 1.3 2.0)) + +(define saxophone-lh-d-key-stencil (upper-key-stencil 0.0 0.0 1.3 2.0)) + +(define saxophone-lh-front-f-key-stencil (standard-e-stencil 0.7 0.7)) + +(define saxophone-lh-bes-key-stencil (standard-e-stencil 0.5 0.5)) + +(define saxophone-lh-T-key-stencil (standard-e-stencil 0.75 0.75)) + +(define saxophone-lh-gis-key-stencil + (standard-path-stencil + '((0.0 0.4) + (0.0 0.8 3.0 0.8 3.0 0.4) + (3.0 0.0) + (3.0 -0.4 0.0 -0.4 0.0 0.0)) + 0.8 + 0.8)) + +(define (saxophone-lh-b-cis-key-stencil flip?) + (standard-path-stencil + '((0.0 1.0) + (0.4 1.0 0.8 0.9 1.35 0.8) + (1.35 0.0) + (0.0 0.0)) + (* (if flip? -1 1) 0.8) + 0.8)) + +(define saxophone-lh-cis-key-stencil (saxophone-lh-b-cis-key-stencil #t)) + +(define saxophone-lh-b-key-stencil (saxophone-lh-b-cis-key-stencil #f)) + +(define saxophone-lh-low-bes-key-stencil + (standard-path-stencil + '((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0)) + 0.8 + 0.8)) + +(define (saxophone-rh-side-key-stencil width height) + (standard-path-stencil + `((0.0 ,height) + (0.05 ,(+ height 0.05) 0.1 ,(+ height 0.1) 0.15 ,(+ height 0.15)) + (,(- width 0.15) ,(+ height 0.15)) + (,(- width 0.1) + ,(+ height 0.1) + ,(- width 0.05) + ,(+ height 0.05) + ,width + ,height) + (,width 0.0) + (,(- width 0.05) -0.05 ,(- width 0.1) -0.1 ,(- width 0.15) -0.15) + (0.15 -0.15) + (0.1 -0.1 0.05 -0.05 0.0 0.0)) + 1.0 + 1.0)) + +(define saxophone-rh-e-key-stencil (saxophone-rh-side-key-stencil 0.9 1.2)) + +(define saxophone-rh-c-key-stencil (saxophone-rh-side-key-stencil 0.9 0.6)) + +(define saxophone-rh-bes-key-stencil (saxophone-rh-side-key-stencil 0.9 0.45)) + +(define saxophone-rh-high-fis-key-stencil + (standard-path-stencil + (append + '((0.0 1.0) (0.0 1.4 0.6 1.4 0.6 1.0) (0.6 0.0)) + (map (lambda (l) + (flatten-list + (map (lambda (x) + (coord-rotate x (atan (* -1 (/ PI 6))))) + l))) + '(((0.6 . -1.0)) + ((0.6 . -1.4) (0.0 . -1.4) (0.0 . -1.0)) + ((0.0 . 0.0))))) + 0.75 + 0.75)) + +(define saxophone-rh-fis-key-stencil (standard-e-stencil 1.0 0.5)) + +(define saxophone-rh-ees-key-stencil (standard-e-stencil 1.2 0.5)) + +(define saxophone-rh-low-c-key-stencil + (standard-path-stencil + '((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0)) + 0.8 + 0.8)) + +(define (saxophone-lh-low-a-key-stencil radius thick fill layout props) + (interpret-markup + layout + props + (make-general-align-markup + Y + DOWN + (make-concat-markup + (make-name-keylist + `(,(text-fill-translate fill)) + '(("lowA" . #f)) + (* 9 radius)))))) + +;;; Bassoon family stencils + +(define (bassoon-bend-info-maker height gap cut) + (let* ( + (first-bezier + (flatten-list + (car + (split-bezier + `((0.0 . ,(+ height gap)) + (0.0 . ,(+ height (+ gap 1.0))) + (1.0 . ,(+ height (+ gap 2.0))) + (2.0 . ,(+ height (+ gap 2.0)))) + cut)))) + (second-bezier + (flatten-list + (reverse + (car + (split-bezier + `((1.0 . ,height) + (1.0 . ,(+ 0.5 height)) + (1.5 . ,(+ 1.0 height)) + (2.0 . ,(+ 1.0 height))) + cut))))) + (slope-offset1 + (get-slope-offset + `(,(list-ref first-bezier 4) . ,(list-ref first-bezier 5)) + `(,(list-ref first-bezier 6) . ,(list-ref first-bezier 7)))) + (slope-offset2 + (get-slope-offset + `(,(list-ref second-bezier 0) . ,(list-ref second-bezier 1)) + `(,(list-ref second-bezier 2) . ,(list-ref second-bezier 3))))) + (list first-bezier second-bezier slope-offset1 slope-offset2))) + +(define + (make-tilted-portion + first-bezier + second-bezier + slope-offset1 + slope-offset2 + keylen + bezier?) + (append + `((,(+ keylen (list-ref first-bezier 6)) + ,(+ + (* + (car slope-offset1) + (+ keylen (list-ref first-bezier 6))) (cdr slope-offset1)))) + ((if bezier? (lambda (x) `(,(apply append x))) identity) + `((,(+ (+ keylen 1.75) (list-ref first-bezier 6)) + ,(+ + (* + (car slope-offset1) + (+ (+ keylen 1.75) (list-ref first-bezier 6))) + (cdr slope-offset1))) + (,(+ (+ keylen 1.75) (list-ref second-bezier 0)) + ,(+ + (* + (car slope-offset2) + (+ (+ keylen 1.75) (list-ref second-bezier 0))) + (cdr slope-offset2))) + (,(+ keylen (list-ref second-bezier 0)) + ,(+ + (* (car slope-offset2) (+ keylen (list-ref second-bezier 0))) + (cdr slope-offset2))))) + `(,(list-head second-bezier 2)))) + +(define (rich-bassoon-uber-key-stencil height gap cut keylen d1 d2 proc bezier?) + (let* ((info-list (bassoon-bend-info-maker height gap cut)) + (first-bezier (car info-list)) + (second-bezier (cadr info-list)) + (slope-offset1 (caddr info-list)) + (slope-offset2 (cadddr info-list))) + (rich-path-stencil + (append + `((0.0 ,(+ height gap)) + ,(list-tail first-bezier 2)) + (make-tilted-portion + first-bezier + second-bezier + slope-offset1 + slope-offset2 + keylen + bezier?) + `(,(list-tail second-bezier 2) + (1.0 0.0) + (0.0 0.0))) + d1 + d2 + proc))) + +(define (bassoon-uber-key-stencil height gap cut keylen d1 d2) + (rich-bassoon-uber-key-stencil height gap cut keylen d1 d2 identity #t)) + +(define bassoon-cc-one-key-stencil (standard-e-stencil 1.5 0.8)) + +(define bassoon-lh-he-key-stencil little-elliptical-key-stencil) + +(define bassoon-lh-hees-key-stencil little-elliptical-key-stencil) + +(define bassoon-lh-ees-key-stencil + (rich-e-stencil + 1.2 + 0.6 + (lambda (stencil) (ly:stencil-rotate stencil 30 0 0)))) + +(define bassoon-lh-cis-key-stencil + (rich-e-stencil + 1.0 + 0.5 + (lambda (stencil) (ly:stencil-rotate stencil 30 0 0)))) + +(define bassoon-lh-lbes-key-stencil + (bassoon-uber-key-stencil 1.0 0.5 0.7 0.5 0.6 -0.6)) + +(define bassoon-lh-lb-key-stencil + (bassoon-uber-key-stencil 2.0 0.5 0.9 1.2 0.6 -0.6)) + +(define bassoon-lh-lc-key-stencil + (rich-pe-stencil 1.0 1.0 135 315 identity)) + +(define bassoon-lh-ld-key-stencil + (standard-path-stencil + '((-0.8 4.0 1.4 4.0 0.6 0.0) + (0.5 -0.5 0.5 -0.8 0.6 -1.0) + (0.7 -1.2 0.8 -1.3 0.8 -1.8) + (0.5 -1.8) + (0.5 -1.4 0.4 -1.2 0.3 -1.1) + (0.2 -1.0 0.1 -0.5 0.0 0.0)) + 1.0 + 1.0)) + +(define bassoon-lh-d-flick-key-stencil + (let ((height 3.0)) + (standard-path-stencil + `((0.0 ,height) + (0.2 ,(+ height 1.6) 0.8 ,(+ height 1.8) 1.0 ,(+ height 1.8)) + (1.4 ,(+ height 1.8) 1.9 ,(+ height 1.3) 1.9 ,(+ height 1.0)) + (1.9 ,(+ height 0.7) 1.0 ,(+ height 0.4) 0.8 ,(+ height 0.3)) + (0.6 ,(+ height 0.2) 0.4 ,(+ height 0.1) 0.4 ,(- height 0.1)) + (0.4 0.0) + (0.0 0.0)) + -1.0 + -1.0))) + +(define bassoon-lh-c-flick-key-stencil + (let ((height 3.0)) + (standard-path-stencil + `((0.0 ,height) + (0.0 ,(+ height 1.6) 0.4 ,(+ height 1.8) 0.5 ,(+ height 1.8)) + (0.7 ,(+ height 1.8) 0.9 ,(+ height 1.3) 0.9 ,(+ height 1.0)) + (0.9 ,(+ height 0.5) 0.7 ,(+ height 0.4) 0.6 ,(+ height 0.3)) + (0.5 ,(+ height 0.2) 0.4 ,(+ height 0.1) 0.4 ,(- height 0.1)) + (0.4 0.0) + (0.0 0.0)) + -1.0 + -1.0))) + +(define bassoon-lh-a-flick-key-stencil + (bassoon-uber-key-stencil 5.0 1.0 0.3 0.6 -0.5 -0.5)) + +(define bassoon-lh-thumb-cis-key-stencil + (bassoon-uber-key-stencil 1.5 1.5 0.6 0.6 -0.6 0.6)) + +(define bassoon-lh-whisper-key-stencil (variable-column-circle-stencil 0.7)) + +(define bassoon-rh-cis-key-stencil + (rich-bassoon-uber-key-stencil + 1.1 + 1.5 + 0.9 + 0.3 + 0.5 + 0.5 + (lambda (stencil) (ly:stencil-rotate stencil -76 0 0)) + #t)) + +(define bassoon-rh-bes-key-stencil little-elliptical-key-stencil) + +(define bassoon-rh-fis-key-stencil + (rich-bassoon-uber-key-stencil 0.5 1.0 0.8 1.5 -0.7 0.7 identity #f)) + +(define bassoon-rh-f-key-stencil + (let* ((height 0.5) (gap 1.0) (cut 0.8) (keylen 1.5) + (info-list (bassoon-bend-info-maker height gap cut)) + (first-bezier (car info-list)) + (second-bezier (cadr info-list)) + (slope-offset1 (caddr info-list)) + (slope-offset2 (cadddr info-list))) + (standard-path-stencil + (append + (map + (lambda (l) + (rotunda-map + - + l + (list-tail first-bezier 6))) + (make-tilted-portion + first-bezier + second-bezier + slope-offset1 + slope-offset2 + keylen + #t)) + '((0.0 0.0))) + -0.7 + 0.7))) + +(define bassoon-rh-gis-key-stencil + (bassoon-uber-key-stencil 0.3 1.0 0.8 1.0 -0.7 0.7)) + +(define bassoon-rh-thumb-bes-key-stencil + (bassoon-uber-key-stencil 1.0 1.0 0.9 1.0 0.7 0.7)) + +(define bassoon-rh-thumb-e-key-stencil (variable-column-circle-stencil 0.7)) + +(define bassoon-rh-thumb-fis-key-stencil + (bassoon-uber-key-stencil 1.0 1.2 0.9 1.0 0.7 0.7)) + +(define bassoon-rh-thumb-gis-key-stencil + (bassoon-uber-key-stencil 1.2 0.8 0.9 0.4 0.7 0.7)) diff --git a/scm/display-lily.scm b/scm/display-lily.scm index 21ed3a93f6..302259fa23 100644 --- a/scm/display-lily.scm +++ b/scm/display-lily.scm @@ -2,7 +2,7 @@ ;;; ;;; ;;; -;;; (c) 2005--2009 Nicolas Sceaux +;;; Copyright (C) 2005--2011 Nicolas Sceaux ;;; ;;; - This file defines the procedures used to define display methods for each @@ -28,9 +28,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-13) #:use-module (srfi srfi-39) - #:use-module (lily) - #:use-syntax (srfi srfi-39) - #:use-syntax (ice-9 optargs)) + #:use-module (lily)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; @@ -41,7 +39,7 @@ (define-macro (define-display-method music-type vars . body) "Define a display method for a music type and store it in the `display-methods' property of the music type entry found in the -`music-name-to-property-table' hash table. Print methods previously +`music-name-to-property-table' hash table. Print methods previously defined for that music type are lost. Syntax: (define-display-method MusicType (expression parser) ...body...))" @@ -57,9 +55,9 @@ Syntax: (define-display-method MusicType (expression parser) method)) (define-macro (define-extra-display-method music-type vars . body) - "Add a display method for a music type. A primary display method + "Add a display method for a music type. A primary display method is supposed to have been previously defined with `define-display-method'. -This new method should return a string or #f. If #f is returned, the next +This new method should return a string or #f. If #f is returned, the next display method will be called." `(let* ((type-props (hashq-ref music-name-to-property-table ',music-type '())) @@ -81,8 +79,17 @@ display method will be called." (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 expr, a music expression, in LilyPond syntax" + "Print @var{expr}, a music expression, in LilyPond syntax." (if (ly:music? expr) (let* ((music-type (ly:music-property expr 'name)) (procs (assoc-ref (hashq-ref music-name-to-property-table @@ -92,8 +99,9 @@ display method will be called." (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))) @@ -230,7 +238,7 @@ Generate binding forms by looking for ?var symbol in pattern." elements-list)))) (define-macro (with-music-match music-expr+pattern . body) - "If `music-expr' matches `pattern', call `body'. `pattern' should look like: + "If `music-expr' matches `pattern', call `body'. `pattern' should look like: '(music property value property ?var1 @@ -243,8 +251,8 @@ pattern (the name property being the symbol after the `music' keyword), then all music expression found in its properties (such as 'element or 'elements). When ?var is found instead of a property value, ?var is bound that property value, -as read inside `music-expr'. ?var may also be used to refere to a whole music -expression inside an elements list for instance. These bindings are accessible +as read inside `music-expr'. ?var may also be used to refere to a whole music +expression inside an elements list for instance. These bindings are accessible inside body." (let ((music-expr (first music-expr+pattern)) (pattern (second music-expr+pattern)) @@ -289,11 +297,14 @@ inside body." ;;; (define (make-music-type-predicate . music-types) - (define ((make-music-type-predicate-aux mtypes) expr) - (if (null? mtypes) - #f - (or (eqv? (car mtypes) (ly:music-property expr 'name)) - ((make-music-type-predicate-aux (cdr mtypes)) expr)))) - (make-music-type-predicate-aux music-types)) - -(load "define-music-display-methods.scm") \ No newline at end of file + (define make-music-type-predicate-aux + (lambda (mtypes) + (lambda (expr) + (if (null? mtypes) + #f + (or (eqv? (car mtypes) (ly:music-property expr 'name)) + ((make-music-type-predicate-aux (cdr mtypes)) expr)))))) + (make-music-type-predicate-aux music-types)) + +(ly:load "define-music-display-methods.scm") + diff --git a/scm/display-woodwind-diagrams.scm b/scm/display-woodwind-diagrams.scm new file mode 100644 index 0000000000..a2b037e294 --- /dev/null +++ b/scm/display-woodwind-diagrams.scm @@ -0,0 +1,1989 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2010--2011 Mike Solomon +;;;; +;;;; 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 . + +;; Constants + +(define CENTRAL-COLUMN-HOLE-PLACEMENTS '((one . (0.0 . 6.5)) + (two . (0.0 . 5.5)) + (three . (0.0 . 4.5)) + (four . (0.0 . 3.0)) + (five . (0.0 . 2.0)) + (six . (0.0 . 1.0)))) + +(define CENTRAL-COLUMN-HOLE-LIST (map car CENTRAL-COLUMN-HOLE-PLACEMENTS)) +(define CENTRAL-COLUMN-HOLE-H-LIST (cons 'h CENTRAL-COLUMN-HOLE-LIST)) + +;; Utility functions + +(define (return-1 x) 1.0) + +(define (make-spreadsheet parameter-list) + "Makes a spreadsheet function with columns of parameter-list. + This function can then be filled with rows. + For example: + @code{guile> ((make-spreadsheet '(foo bar)) '((1 2) (3 4) (5 6)))} + @code{(((foo . 1) (bar . 2)) ((foo . 3) (bar . 4)) ((foo . 5) (bar . 6)))}" + (lambda (ls) + (map (lambda (list-to-translate) + (map (lambda (name element) + `(,name . ,element)) + parameter-list + list-to-translate)) + ls))) + +(define (get-spreadsheet-column column spreadsheet) + "Gets all the values in @code{column} form @code{spreadsheet} + made by @{make-spreadsheet}. + For example: + @code{guile> (get-spreadsheet-column 'bar ((make-spreadsheet '(foo bar)) '((1 2) (3 4) (5 6))))} + @code{(2 4 6)}" + (map (lambda (row) (assoc-get column row)) spreadsheet)) + +(define (make-named-spreadsheet parameter-list) + "Makes a named spreadsheet function with columns of parameter-list. + This function can then be filled with named rows + For example: + @code{guile> ((make-named-spreadsheet '(foo bar)) '((x . (1 2)) (y . (3 4)) (z . (5 6))))} + @code{((x (foo . 1) (bar . 2)) (y (foo . 3) (bar . 4)) (z (foo . 5) (bar . 6)))}" + (lambda (ls) + (map (lambda (list-to-translate) + `(,(list-ref list-to-translate 0) + . ,(map (lambda (name element) + `(,name . ,element)) + parameter-list + (list-tail list-to-translate 1)))) + ls))) + +(define (get-named-spreadsheet-column column spreadsheet) + "Gets all the values in @code{column} form @code{spreadsheet} + made by @{make-named-spreadsheet}. + For example: + @code{guile> (get-spreadsheet-column 'bar ((make-named-spreadsheet '(foo bar)) '((x . (1 2)) (y . (3 4)) (z . (5 6)))))} + @code{((x . 2) (y . 4) (z . 6))}" + (map + (lambda (row) (cons (car row) (assoc-get column (cdr row)))) + spreadsheet)) + +(define make-key-alist + (make-named-spreadsheet '(name offset graphical textual))) + +(define (simple-stencil-alist stencil offset) + "A stencil alist that contains one and only one stencil. + Shorthand used repeatedly in various instruments." + `((stencils . (,stencil)) + (offset . ,offset) + (textual? . #f) + (xy-scale-function . (,return-1 . ,return-1)))) + +(define (make-central-column-hole-addresses keys) + "Takes @code{keys} and ascribes them to the central column." + (map + (lambda (key) `(central-column . ,key)) + keys)) + +(define (make-key-symbols hand) + "Takes @code{hand} and ascribes @code{key} to it." + (lambda (keys) + (map (lambda (key) `(,hand . ,key)) + keys))) + +(define make-left-hand-key-addresses (make-key-symbols 'left-hand)) + +(define make-right-hand-key-addresses (make-key-symbols 'right-hand)) + +;; Flute assembly instructions + +(define flute-change-points + ((make-named-spreadsheet '(piccolo flute flute-b-extension)) + `((bottom-group-key-names + . (((x + . ((offset . (-0.45 . -1.05)) + (stencil . ,piccolo-rh-x-key-stencil) + (text? . ("X" . #f)) + (complexity . trill)))) + ((cis + . ((offset . (0.0 . 0.0)) + (stencil . ,flute-rh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (c + . ((offset . (0.3 . 0.0)) + (stencil . ,flute-rh-c-key-stencil) + (text? . ("C" . #f)) + (complexity . trill))) + (gz + . ((offset . (0.0 . -1.2)) + (stencil . ,flute-rh-gz-key-stencil) + (text? . ("gz" . #f)) + (complexity . trill)))) + ((cis + . ((offset . (0.0 . 0.0)) + (stencil . ,flute-rh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (c + . ((offset . (0.3 . 0.0)) + (stencil . ,flute-rh-c-key-stencil) + (text? . ("C" . #f)) + (complexity . trill))) + (b + . ((offset . (1.0 . 0.0)) + (stencil . ,flute-rh-b-key-stencil) + (text? . ("B" . #f)) + (complexity . trill))) + (gz + . ((offset . (0.0 . -1.2)) + (stencil . ,flute-rh-gz-key-stencil) + (text? . ("gz" . #f)) + (complexity . trill)))))) + (bottom-group-graphical-stencil + . (((right-hand . ees) (right-hand . x)) + ,(make-right-hand-key-addresses '(ees cis c gz)) + ,(make-right-hand-key-addresses '(ees cis c b gz)))) + (bottom-group-graphical-draw-instruction + . (((right-hand . ees)) + ,(make-right-hand-key-addresses '(ees cis c)) + ,(make-right-hand-key-addresses '(ees cis c b)))) + (bottom-group-special-key-instruction + . ((,rich-group-draw-rule ((right-hand . x)) ((right-hand . ees))) + (,rich-group-draw-rule ((right-hand . gz)) + ,(make-right-hand-key-addresses + '(ees cis c))) + (,rich-group-draw-rule ((right-hand . gz)) + ,(make-right-hand-key-addresses + '(ees cis c b))))) + (bottom-group-text-stencil + . (,(make-right-hand-key-addresses '(bes d dis ees x)) + ,(make-right-hand-key-addresses '(bes d dis ees cis c gz)) + ,(make-right-hand-key-addresses '(bes d dis ees cis c b gz))))))) + +(define (generate-flute-family-entry flute-name) + (let* + ((change-points + (get-named-spreadsheet-column + flute-name + flute-change-points))) + `(,flute-name + . ((keys + . ((hidden + . ((midline + . ((offset . (0.0 . 0.0)) + (stencil . ,midline-stencil) + (text? . #f) + (complexity . basic))))) + (central-column + . ((one + . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (two + . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (three + . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (four + . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (five + . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (six + . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))))) + (left-hand + . ((bes + . ((offset . (0.5 . 1.8)) + (stencil . ,flute-lh-bes-key-stencil) + (text? . ("B" . 0)) + (complexity . trill))) + (b + . ((offset . (0.0 . 0.0)) + (stencil . ,flute-lh-b-key-stencil) + (text? . ("B" . #f)) + (complexity . trill))) + (gis + . ((offset . (0.0 . 0.0)) + (stencil . ,flute-lh-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill))))) + (right-hand + . ,(append `((bes + . ((offset . (0.0 . 0.0)) + (stencil . ,flute-rh-bes-key-stencil) + (text? . ("B" . 0)) + (complexity . trill))) + (d + . ((offset . (0.0 . 0.0)) + (stencil . ,flute-rh-d-key-stencil) + (text? . ("D" . #f)) + (complexity . trill))) + (dis + . ((offset . (0.0 . 0.0)) + (stencil . ,flute-rh-dis-key-stencil) + (text? . ("D" . 1)) + (complexity . trill))) + (ees + . ((offset . (1.5 . 1.3)) + (stencil . ,flute-rh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill)))) + (assoc-get 'bottom-group-key-names change-points))))) + (graphical-commands + . ((stencil-alist + . ((stencils + . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils . ((left-hand . bes) (left-hand . b))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-1.5 . 6.5))) + ,(simple-stencil-alist '(left-hand . gis) '(1.0 . 4.0)) + ,(simple-stencil-alist '(right-hand . bes) '(-1.75 . 3.05)) + ,(simple-stencil-alist '(right-hand . d) '(-1.0 . 2.5)) + ,(simple-stencil-alist '(right-hand . dis) '(-1.0 . 1.5)) + ((stencils + . ,(assoc-get 'bottom-group-graphical-stencil + change-points)) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (0.0 . -0.6))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (((left-hand . bes) (left-hand . b)) + ,(assoc-get 'bottom-group-graphical-draw-instruction + change-points))) + ,(assoc-get 'bottom-group-special-key-instruction + change-points) + (,group-automate-rule + ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,uniform-extra-offset-rule (0.0 . 0.0)))))) + (text-commands + . ((stencil-alist + . ((stencils + . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils . ,(make-left-hand-key-addresses '(bes b gis))) + (textual? . ,lh-woodwind-text-stencil) + (offset . (1.5 . 3.75))) + ((stencils . ,(assoc-get 'bottom-group-text-stencil + change-points)) + (textual? . ,rh-woodwind-text-stencil) + (offset . (-1.25 . 0.0))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (,(make-left-hand-key-addresses '(bes b gis)) + ,(assoc-get 'bottom-group-text-stencil change-points))) + (,group-automate-rule + ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,uniform-extra-offset-rule (0.0 . 0.0)))))))))) + +;;; Tin whistle assembly instructions + +(define tin-whistle-change-points + ((make-named-spreadsheet '(tin-whistle)) '())) + +(define (generate-tin-whistle-family-entry tin-whistle-name) + (let* + ((change-points + (get-named-spreadsheet-column tin-whistle-name tin-whistle-change-points))) + `(,tin-whistle-name + . ((keys + . ((hidden + . ((midline + . ((offset . (0.0 . 0.0)) + (stencil . ,midline-stencil) + (text? . #f) + (complexity . basic))))) + (central-column + . ((one + . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (two + . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (three + . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (four + . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (five + . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (six + . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))))) + (left-hand . ()) + (right-hand . ()))) + (graphical-commands + . ((stencil-alist + . ((stencils + . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,group-automate-rule + ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,uniform-extra-offset-rule (0.0 . 0.0)))))) + (text-commands + . ((stencil-alist + . ((stencils . + (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-H-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,group-automate-rule + ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,uniform-extra-offset-rule (0.0 . 0.0)))))))))) + +;;; Oboe assembly instructions + +(define oboe-change-points + ((make-named-spreadsheet '(oboe)) '())) + +(define (generate-oboe-family-entry oboe-name) + (let* + ((change-points + (get-named-spreadsheet-column oboe-name oboe-change-points))) + `(,oboe-name + . ((keys + . ((hidden + . ((midline + . ((offset . (0.0 . 0.0)) + (stencil . ,midline-stencil) + (text? . #f) + (complexity . basic))))) + (central-column + . ((one + . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (two + . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (three + . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (four + . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (five + . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (six + . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (h + . ((offset . (0.0 . 6.25)) + (stencil . ,(variable-column-circle-stencil 0.4)) + (text? . #f) + (complexity . trill))))) + (left-hand + . ((I + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-lh-I-key-stencil) + (text? . ("I" . #f)) + (complexity . trill))) + (III + . ((offset . (0.0 . 2.6)) + (stencil . ,oboe-lh-III-key-stencil) + (text? . ("III" . #f)) + (complexity . trill))) + (II + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-lh-II-key-stencil) + (text? . ("II" . #f)) + (complexity . trill))) + (b + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-lh-b-key-stencil) + (text? . ("B" . #f)) + (complexity . trill))) + (d + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-lh-d-key-stencil) + (text? . ("D" . #f)) + (complexity . trill))) + (cis + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-lh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (gis + . ((offset . (-0.85 . 0.2)) + (stencil . ,oboe-lh-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill))) + (ees + . ((offset . (2.05 . -3.65)) + (stencil . ,oboe-lh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill))) + (low-b + . ((offset . (3.6 . 0.5)) + (stencil . ,oboe-lh-low-b-key-stencil) + (text? . ("b" . #f)) + (complexity . trill))) + (bes + . ((offset . (2.25 . -4.15)) + (stencil . ,oboe-lh-bes-key-stencil) + (text? . ("B" . 0)) + (complexity . trill))) + (f + . ((offset . (2.15 . -3.85)) + (stencil . ,oboe-lh-f-key-stencil) + (text? . ("F" . #f)) + (complexity . trill))))) + (right-hand + . ((a + . ((offset . (1.5 . 1.2)) + (stencil . ,oboe-rh-a-key-stencil) + (text? . ("A" . #f)) + (complexity . trill))) + (gis + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-rh-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill))) + (d + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-rh-d-key-stencil) + (text? . ("D" . #f)) + (complexity . trill))) + (f + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-rh-f-key-stencil) + (text? . ("F" . #f)) + (complexity . trill))) + (banana + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-rh-banana-key-stencil) + (text? . ("ban" . #f)) + (complexity . trill))) + (c + . ((offset . (0.0 . 0.0)) + (stencil . ,oboe-rh-c-key-stencil) + (text? . ("C" . #f)) + (complexity . trill))) + (cis + . ((offset . (3.8 . -0.6)) + (stencil . ,oboe-rh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (ees + . ((offset . (0.0 . -1.8)) + (stencil . ,oboe-rh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill))))))) + (graphical-commands + . ((stencil-alist + . ((stencils + . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-H-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils . ((left-hand . I) (left-hand . III))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-2.5 . 6.5))) + ,(simple-stencil-alist '(left-hand . II) '(2.5 . 6.0)) + ,(simple-stencil-alist '(left-hand . b) '(-1.35 . 6.0)) + ,(simple-stencil-alist '(left-hand . d) '(1.0 . 6.0)) + ,(simple-stencil-alist '(left-hand . cis) '(1.0 . 5.0)) + ((stencils + . ,(make-left-hand-key-addresses '(gis bes low-b ees f))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (0.0 . 3.9))) + ((stencils . + ,(make-right-hand-key-addresses '(a gis))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-3.5 . 3.5))) + ,(simple-stencil-alist '(right-hand . d) '(1.0 . 2.5)) + ,(simple-stencil-alist '(right-hand . f) '(-1.0 . 1.5)) + ,(simple-stencil-alist '(right-hand . banana) '(1.7 . 1.0)) + ((stencils . ,(make-right-hand-key-addresses '(c cis ees))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-3.4 . 0.3))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (((right-hand . a) (right-hand . gis)) + ,(make-left-hand-key-addresses '(gis bes low-b ees)) + ,(make-right-hand-key-addresses '(cis c ees)))) + (,rich-group-draw-rule + ((left-hand . III)) + ((left-hand . I))) + (,rich-group-draw-rule + ((left-hand . f)) + ,(make-left-hand-key-addresses '(gis bes low-b ees))) + (,group-automate-rule + ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,rich-group-extra-offset-rule + ((central-column . h)) ((central-column . one)) (0.0 . 0.8)) + (,uniform-extra-offset-rule (0.0 . 0.0)))))) + (text-commands + . ((stencil-alist + . ((stencils . + (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-H-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils . ,(make-left-hand-key-addresses '(III I))) + (textual? . ,lh-woodwind-text-stencil) + (offset . (-2.8 . 7.0))) + ((stencils . ,(make-left-hand-key-addresses '(II))) + (textual? . ,lh-woodwind-text-stencil) + (offset . (2.2 . 7.0))) + ((stencils + . ,(make-left-hand-key-addresses + '(b d cis gis ees low-b bes f))) + (textual? . ,lh-woodwind-text-stencil) + (offset . (1.5 . 3.75))) + ((stencils + . ,(make-right-hand-key-addresses + '(a gis d f banana c cis ees))) + (textual? . ,rh-woodwind-text-stencil) + (offset . (-1.25 . 0.0))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (,(make-left-hand-key-addresses '(b d cis gis ees low-b bes f)) + ,(make-left-hand-key-addresses '(III I)) + ,(make-right-hand-key-addresses '(a gis d f banana c cis ees)))) + (,group-automate-rule + ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,rich-group-extra-offset-rule + ((central-column . h)) + ((central-column . one)) + (0.0 . 0.8)) + (,uniform-extra-offset-rule (0.0 . 0.0)))))))))) + +;; Clarinet assembly instructions + +(define clarinet-change-points + ((make-named-spreadsheet '(clarinet bass-clarinet low-bass-clarinet)) + `((bottom-group-key-names + . (() + ((ees + . ((offset . (0.0 . ,(* 0 (+ 0.75 CL-RH-HAIR)))) + (stencil . ,bass-clarinet-rh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill)))) + ((ees + . ((offset . (0.0 . ,(* 0 (+ 0.75 CL-RH-HAIR)))) + (stencil . ,low-bass-clarinet-rh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill))) + (d + . ((offset . (,(+ 1.5 CL-RH-HAIR) . ,(* -1 (+ 0.75 CL-RH-HAIR)))) + (stencil . ,clarinet-rh-d-key-stencil) + (text? . ("d" . #f)) + (complexity . trill))) + (low-cis + . ((offset . (0.0 . 1.4)) + (stencil . ,clarinet-rh-low-cis-key-stencil) + (text? . ("c" . 1)) + (complexity . trill))) + (low-d + . ((offset . (0.0 . 2.4)) + (stencil . ,clarinet-rh-low-d-key-stencil) + (text? . ("d" . #f)) + (complexity . trill))) + (low-c + . ((offset . (0.0 . 0.0)) + (stencil . ,clarinet-rh-low-c-key-stencil) + (text? . ("c" . #f)) + (complexity . trill)))))) + (left-extra-key-names + . (() + () + ((d + . ((offset . (4.0 . -0.8)) + (stencil . ,clarinet-lh-d-key-stencil) + (text? . ("D" . #f)) + (complexity . trill)))))) + (right-thumb-group + . (() + () + (((stencils + . ,(make-right-hand-key-addresses '(low-c low-cis))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-1.3 . 4.0)))))) + (low-left-hand-key-addresses + . (,(make-left-hand-key-addresses '(cis f e fis)) + ,(make-left-hand-key-addresses '(cis f e fis)) + ,(make-left-hand-key-addresses '(cis f e fis d)))) + (all-left-hand-key-addresses + . (,(make-left-hand-key-addresses '(a gis ees cis f e fis)) + ,(make-left-hand-key-addresses '(a gis ees cis f e fis)) + ,(make-left-hand-key-addresses '(a gis ees cis f e fis d)))) + (low-key-group + . (() + () + (,(make-right-hand-key-addresses '(low-c low-cis))))) + (low-rich-draw-rules + . (() + () + ((,rich-group-draw-rule + ((left-hand . d)) + ,(make-left-hand-key-addresses '(cis f e fis))) + (,rich-group-draw-rule + ((right-hand . low-d)) + ((right-hand . low-cis) (right-hand . low-c)))))) + (low-extra-offset-rule + . (() + () + ((,rich-group-extra-offset-rule + ,(make-right-hand-key-addresses '(low-c low-d low-cis)) + ,(make-right-hand-key-addresses '(one two three four)) + (-0.5 . -0.7))))) + (bottom-right-group-key-addresses + . (,(make-right-hand-key-addresses '(fis e f gis)) + ,(make-right-hand-key-addresses '(fis e ees gis f)) + ,(make-right-hand-key-addresses '(fis e ees gis f d)))) + (right-hand-key-addresses + . (,(make-right-hand-key-addresses '(fis e f gis)) + ,(make-right-hand-key-addresses '(fis e ees gis f)) + ,(make-right-hand-key-addresses + '(low-d low-cis low-c fis e ees gis f d))))))) + +(define (generate-clarinet-family-entry clarinet-name) + (let* + ((change-points + (get-named-spreadsheet-column clarinet-name clarinet-change-points))) + `(,clarinet-name + . ((keys + . ((hidden + . ((midline + . ((offset . (0.0 . 0.0)) + (stencil . ,midline-stencil) + (text? . #f) + (complexity . basic))))) + (central-column + . ((one + . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (two + . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (three + . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (four + . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (five + . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (six + . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . covered))) + (h + . ((offset . (0.0 . 6.25)) + (stencil . ,(variable-column-circle-stencil 0.4)) + (text? . #f) + (complexity . covered))))) + (left-hand + . ,(append `((thumb + . ((offset . (0.0 . 0.0)) + (stencil . ,clarinet-lh-thumb-key-stencil) + (text? . #f) + (complexity . trill))) + (R + . ((offset . (1.0 . 1.0)) + (stencil . ,clarinet-lh-R-key-stencil) + (text? . #f) + (complexity . trill))) + (a + . ((offset . (0.0 . 0.0)) + (stencil . ,clarinet-lh-a-key-stencil) + (text? . ("A" . #f)) + (complexity . trill))) + (gis + . ((offset . (0.8 . 1.0)) + (stencil . ,clarinet-lh-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill))) + (ees + . ((offset . (0.0 . 0.0)) + (stencil . ,clarinet-lh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill))) + (cis + . ((offset . (-0.85 . 0.2)) + (stencil . ,clarinet-lh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (f + . ((offset . (3.6 . 0.5)) + (stencil . ,clarinet-lh-f-key-stencil) + (text? . ("F" . #f)) + (complexity . trill))) + (e + . ((offset . (2.05 . -3.65)) + (stencil . ,clarinet-lh-e-key-stencil) + (text? . ("E" . #f)) + (complexity . trill))) + (fis + . ((offset . (2.25 . -4.15)) + (stencil . ,clarinet-lh-fis-key-stencil) + (text? . ("F" . 1)) + (complexity . trill)))) + (assoc-get 'left-extra-key-names change-points))) + (right-hand + . ,(append `((one + . ((offset . (0.0 . 0.75)) + (stencil . ,clarinet-rh-one-key-stencil) + (text? . "1") + (complexity . trill))) + (two + . ((offset . (0.0 . 0.25)) + (stencil . ,clarinet-rh-two-key-stencil) + (text? . "2") + (complexity . trill))) + (three + . ((offset . (0.0 . -0.25)) + (stencil . ,clarinet-rh-three-key-stencil) + (text? . "3") + (complexity . trill))) + (four + . ((offset . (0.0 . -0.75)) + (stencil . ,clarinet-rh-four-key-stencil) + (text? . "4") + (complexity . trill))) + (b + . ((offset . (0.0 . 0.0)) + (stencil . ,clarinet-rh-b-key-stencil) + (text? . ("B" . #f)) + (complexity . trill))) + (fis + . ((offset . (0.0 . ,(* 4 (+ 0.75 CL-RH-HAIR)))) + (stencil . ,clarinet-rh-fis-key-stencil) + (text? . ("F" . 1)) + (complexity . trill))) + (gis + . ((offset . (,(+ 1.5 CL-RH-HAIR) + . ,(* 3 (+ 0.75 CL-RH-HAIR)))) + (stencil . ,clarinet-rh-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill))) + (e + . ((offset . (0.0 . ,(* 2 (+ 0.75 CL-RH-HAIR)))) + (stencil . ,clarinet-rh-e-key-stencil) + (text? . ("E" . #f)) + (complexity . trill))) + (f + . ((offset . (,(+ 1.5 CL-RH-HAIR) + . ,(* 1 (+ 0.75 CL-RH-HAIR)))) + (stencil . ,clarinet-rh-f-key-stencil) + (text? . ("F" . #f)) + (complexity . trill)))) + (assoc-get 'bottom-group-key-names change-points))))) + (graphical-commands + . ((stencil-alist + . ((stencils + . ,(append (assoc-get 'right-thumb-group change-points) + `(,(simple-stencil-alist '(hidden . midline) + '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-H-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils + . ,(make-left-hand-key-addresses '(thumb R))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (-2.5 . 6.5))) + ((stencils + . ((left-hand . a) (left-hand . gis))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (0.0 . 7.5))) + ,(simple-stencil-alist '(left-hand . ees) + '(1.0 . 5.0)) + ((stencils + . ,(make-left-hand-key-addresses '(cis f e fis))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (0.0 . 3.9))) + ((stencils + . ,(make-right-hand-key-addresses + '(one two three four))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-1.25 . 3.75))) + ,(simple-stencil-alist '(right-hand . b) + '(-1.0 . 1.5)) + ((stencils + . ,(assoc-get 'bottom-right-group-key-addresses + change-points)) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-4.0 . -0.75)))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ,(append (assoc-get 'low-rich-draw-rules change-points) + `((,apply-group-draw-rule-series + ,(append (assoc-get 'low-key-group change-points) + `(((left-hand . a) (left-hand . gis)) + ,(make-right-hand-key-addresses + '(one two three four)) + ,(assoc-get 'low-left-hand-key-addresses + change-points) + ,(assoc-get 'right-hand-key-addresses + change-points)))) + (,rich-group-draw-rule + ((left-hand . R)) + ((left-hand . thumb))) + (,group-automate-rule + ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline)))))) + (extra-offset-instructions + . ,(append (assoc-get 'low-extra-offset-rule change-points) + `((,rich-group-extra-offset-rule + ((central-column . h)) + ((central-column . one) + (left-hand . a) + (left-hand . gis)) + (0.0 . 0.8)) + (,uniform-extra-offset-rule (0.0 . 0.0))))))) + (text-commands + . ((stencil-alist + . ((stencils + . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils . ((left-hand . thumb) (left-hand . R))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (-2.5 . 6.5))) + ((stencils + . ,(assoc-get 'all-left-hand-key-addresses change-points)) + (textual? . ,lh-woodwind-text-stencil) + (offset . (1.5 . 3.75))) + ((stencils + . ,(make-right-hand-key-addresses '(one two three four))) + (textual? . ,number-column-stencil) + (offset . (-1.25 . 3.75))) + ((stencils . ,(assoc-get 'right-hand-key-addresses + change-points)) + (textual? . ,rh-woodwind-text-stencil) + (offset . (-1.25 . 0.0))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (,(assoc-get 'all-left-hand-key-addresses change-points) + ,(make-right-hand-key-addresses '(one two three four)) + ,(assoc-get 'right-hand-key-addresses change-points))) + (,group-automate-rule + ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,rich-group-extra-offset-rule + ((central-column . h)) + ((central-column . one) (left-hand . a) (left-hand . gis)) + (0.0 . 0.8)) + (,uniform-extra-offset-rule (0.0 . 0.0)))))))))) + +;; Saxophone assembly instructions + +(define (saxophone-name-passerelle name) + (cond ((eqv? name 'saxophone) 'saxophone) + ((eqv? name 'soprano-saxophone) 'saxophone) + ((eqv? name 'alto-saxophone) 'saxophone) + ((eqv? name 'tenor-saxophone) 'saxophone) + ((eqv? name 'baritone-saxophone) 'baritone-saxophone))) + +(define saxophone-change-points + ((make-named-spreadsheet '(saxophone baritone-saxophone)) + `((low-a-key-definition + . (() + ((low-a + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-lh-low-a-key-stencil) + (text? . #f) + (complexity . trill)))))) + (low-a-key-group + . (() + (,(simple-stencil-alist '(left-hand . low-a) '(-5.0 . 7.0))))) + (low-a-presence + . (() + ((left-hand . low-a)))) + (left-hand-key-names + . (,(make-right-hand-key-addresses + '(ees d f front-f bes gis cis b low-bes)) + ,(make-right-hand-key-addresses + '(ees d f front-f bes gis cis b low-bes low-a))))))) + +(define (generate-saxophone-family-entry saxophone-name) + (let* + ((change-points + (get-named-spreadsheet-column + (saxophone-name-passerelle saxophone-name) saxophone-change-points))) + `(,saxophone-name + . ((keys + . ((hidden + . ((midline + . ((offset . (0.0 . 0.0)) + (stencil . ,midline-stencil) + (text? . #f) + (complexity . basic))))) + (central-column + . ((one + . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . trill))) + (two + . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . trill))) + (three + . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . trill))) + (four + . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . trill))) + (five + . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . trill))) + (six + . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,column-circle-stencil) + (text? . #f) + (complexity . trill))))) + (left-hand + . ,(append (assoc-get 'low-a-key-definition change-points) + `((T + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-lh-T-key-stencil) + (text? . ("T" . #f)) + (complexity . trill))) + (ees + . ((offset . (0.4 . 1.6)) + (stencil . ,saxophone-lh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill))) + (d + . ((offset . (1.5 . 0.5)) + (stencil . ,saxophone-lh-d-key-stencil) + (text? . ("D" . #f)) + (complexity . trill))) + (f + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-lh-f-key-stencil) + (text? . ("F" . #f)) + (complexity . trill))) + (front-f + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-lh-front-f-key-stencil) + (text? . ("f" . #f)) + (complexity . trill))) + (bes + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-lh-bes-key-stencil) + (text? . ("B" . 0)) + (complexity . trill))) + (gis + . ((offset . (0.0 . 1.1)) + (stencil . ,saxophone-lh-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill))) + (cis + . ((offset . (2.4 . 0.0)) + (stencil . ,saxophone-lh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (b + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-lh-b-key-stencil) + (text? . ("B" . #f)) + (complexity . trill))) + (low-bes + . ((offset . (0.0 . -0.2)) + (stencil . ,saxophone-lh-low-bes-key-stencil) + (text? . ("b" . 0)) + (complexity . trill)))))) + (right-hand + . ((e + . ((offset . (0.0 . 2.0)) + (stencil . ,saxophone-rh-e-key-stencil) + (text? . ("E" . #f)) + (complexity . trill))) + (c + . ((offset . (0.0 . 0.9)) + (stencil . ,saxophone-rh-c-key-stencil) + (text? . ("C" . #f)) + (complexity . trill))) + (bes + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-rh-bes-key-stencil) + (text? . ("B" . 0)) + (complexity . trill))) + (high-fis + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-rh-high-fis-key-stencil) + (text? . ("hF" . 1)) + (complexity . trill))) + (fis + . ((offset . (0.0 . 0.0)) + (stencil . ,saxophone-rh-fis-key-stencil) + (text? . ("F" . 1)) + (complexity . trill))) + (ees + . ((offset . (0.0 . 0.7)) + (stencil . ,saxophone-rh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill))) + (low-c + . ((offset . (-1.2 . -0.1)) + (stencil . ,saxophone-rh-low-c-key-stencil) + (text? . ("c" . #f)) + (complexity . trill))))))) + (graphical-commands + . ((stencil-alist + . ((stencils + . ,(append (assoc-get 'low-a-key-group change-points) + `(,(simple-stencil-alist '(hidden . midline) + '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils + . ,(make-left-hand-key-addresses '(ees d f))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (1.5 . 6.8))) + ,(simple-stencil-alist '(left-hand . front-f) + '(0.0 . 7.35)) + ,(simple-stencil-alist '(left-hand . T) + '(-2.2 . 6.5)) + ,(simple-stencil-alist '(left-hand . bes) + '(0.0 . 6.2)) + ((stencils + . ,(make-left-hand-key-addresses + '(gis cis b low-bes))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (1.2 . 3.5))) + ((stencils + . ,(make-right-hand-key-addresses '(e c bes))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-2.3 . 3.4))) + ,(simple-stencil-alist '(right-hand . high-fis) + '(-1.8 . 2.5)) + ,(simple-stencil-alist '(right-hand . fis) + '(-1.5 . 1.5)) + ((stencils + . ,(make-right-hand-key-addresses '(ees low-c))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-2.0 . 0.3)))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (,(make-left-hand-key-addresses '(ees d f)) + ,(make-left-hand-key-addresses '(gis cis b low-bes)) + ,(make-right-hand-key-addresses '(e c bes)) + ,(make-right-hand-key-addresses '(ees low-c)))) + (,group-automate-rule + ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,rich-group-extra-offset-rule + ((left-hand . bes)) + ,(append (assoc-get 'low-a-presence change-points) + '((central-column . one) + (left-hand . front-f) + (left-hand . T) + (left-hand . ees) + (left-hand . d) + (left-hand . f))) + (0.0 . 1.0)) + (,uniform-extra-offset-rule (0.0 . 0.0)))))) + (text-commands + . ((stencil-alist + . ((stencils + . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ,(simple-stencil-alist '(left-hand . T) '(-1.0 . 7.0)) + ((stencils + . ,(assoc-get 'left-hand-key-names change-points)) + (textual? . ,lh-woodwind-text-stencil) + (offset . (1.5 . 3.75))) + ((stencils + . ,(make-right-hand-key-addresses + '(e c bes high-fis fis ees low-c))) + (textual? . ,rh-woodwind-text-stencil) + (offset . (-1.25 . 0.0))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (,(make-left-hand-key-addresses + '(ees d f front-f bes gis cis b low-bes)) + ,(make-right-hand-key-addresses + '(e c bes high-fis fis ees low-c)))) + (,group-automate-rule + ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,uniform-extra-offset-rule (0.0 . 0.0)))))))))) + +;; Bassoon assembly instructions + +(define bassoon-change-points + ((make-named-spreadsheet '(bassoon contrabassoon)) + `((left-hand-additional-keys . + (((a . + ((offset . (0.0 . -0.3)) + (stencil . ,bassoon-lh-a-flick-key-stencil) + (text? . ("A" . #f)) + (complexity . trill))) + (w . + ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-lh-whisper-key-stencil) + (text? . ("w" . #f)) + (complexity . trill)))) + ())) + (right-hand-additional-keys . + (((cis . + ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-rh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (thumb-gis . + ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-rh-thumb-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill)))) + ())) + (left-hand-flick-group . + (((left-hand . d) (left-hand . c) (left-hand . a)) + ((left-hand . d) (left-hand . c)))) + (left-hand-thumb-group . + (((left-hand . w) (left-hand . thumb-cis)) + ((left-hand . thumb-cis)))) + (cis-offset-instruction . + (((,rich-group-extra-offset-rule + ((right-hand . cis)) + ,(append + '((hidden . midline) (hidden . long-midline)) + (make-central-column-hole-addresses '(three two one)) + (make-left-hand-key-addresses + '(low-b low-bes low-c low-d d a c w thumb-cis + high-ees high-e cis ees))) + (0.0 . 0.9))) + ())) + (right-hand-lower-thumb-group . + (((right-hand . thumb-gis) (right-hand . thumb-fis)) + ((right-hand . thumb-fis)))) + (right-hand-cis-key . + ((,(simple-stencil-alist '(right-hand . cis) '(-2.3 . 3.22))) + ())) + (back-left-hand-key-addresses . + ((low-b low-bes low-c low-d d a c w thumb-cis) + (low-b low-bes low-c low-d d c thumb-cis))) + (front-right-hand-key-addresses . + ((cis bes fis f gis) (bes fis f gis))) + (back-right-hand-key-addresses . + ((thumb-bes thumb-gis thumb-e thumb-fis) + (thumb-bes thumb-e thumb-fis)))))) + +(define (generate-bassoon-family-entry bassoon-name) + (let* + ((change-points + (get-named-spreadsheet-column bassoon-name bassoon-change-points))) + `(,bassoon-name + . ((keys + . ((hidden + . ((midline + . ((offset . (0.0 . 0.0)) + (stencil . ,midline-stencil) + (text? . #f) + (complexity . basic))) + (long-midline + . ((offset . (0.0 . 0.0)) + (stencil . ,long-midline-stencil) + (text? . #f) + (complexity . basic))))) + (central-column + . ((one + . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,bassoon-cc-one-key-stencil) + (text? . #f) + (complexity . trill))) + (two + . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (three + . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (four + . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (five + . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))) + (six + . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS)) + (stencil . ,ring-column-circle-stencil) + (text? . #f) + (complexity . ring))))) + (left-hand + . ,(append (assoc-get 'left-hand-additional-keys + change-points) + `((high-e + . ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-lh-he-key-stencil) + (text? . ("hE" . #f)) + (complexity . trill))) + (high-ees + . ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-lh-hees-key-stencil) + (text? . ("hE" . 0)) + (complexity . trill))) + (ees + . ((offset . (-1.0 . 1.0)) + (stencil . ,bassoon-lh-ees-key-stencil) + (text? . ("E" . 0)) + (complexity . trill))) + (cis + . ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-lh-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill))) + (low-bes + . ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-lh-lbes-key-stencil) + (text? . ("b" . 0)) + (complexity . trill))) + (low-b + . ((offset . (-1.0 . -0.7)) + (stencil . ,bassoon-lh-lb-key-stencil) + (text? . ("b" . #f)) + (complexity . trill))) + (low-c + . ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-lh-lc-key-stencil) + (text? . ("c" . #f)) + (complexity . trill))) + (low-d + . ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-lh-ld-key-stencil) + (text? . ("d" . #f)) + (complexity . trill))) + (d + . ((offset . (-1.5 . 2.0)) + (stencil . ,bassoon-lh-d-flick-key-stencil) + (text? . ("D" . #f)) + (complexity . trill))) + (c + . ((offset . (-0.8 . 1.1)) + (stencil . ,bassoon-lh-c-flick-key-stencil) + (text? . ("C" . #f)) + (complexity . trill))) + (thumb-cis + . ((offset . (2.0 . -1.0)) + (stencil . ,bassoon-lh-thumb-cis-key-stencil) + (text? . ("C" . 1)) + (complexity . trill)))))) + (right-hand + . ,(append (assoc-get 'right-hand-additional-keys + change-points) + `((bes + . ((offset . (0.0 . 0.8)) + (stencil . ,bassoon-rh-bes-key-stencil) + (text? . ("B" . 0)) + (complexity . trill))) + (f + . ((offset . (-2.2 . 4.35)) + (stencil . ,bassoon-rh-f-key-stencil) + (text? . ("F" . #f)) + (complexity . trill))) + (fis + . ((offset . (1.5 . 1.0)) + (stencil . ,bassoon-rh-fis-key-stencil) + (text? . ("F" . 1)) + (complexity . trill))) + (gis + . ((offset . (0.0 . -0.15)) + (stencil . ,bassoon-rh-gis-key-stencil) + (text? . ("G" . 1)) + (complexity . trill))) + (thumb-bes + . ((offset . (0.0 . 0.0)) + (stencil . ,bassoon-rh-thumb-bes-key-stencil) + (text? . ("B" . 0)) + (complexity . trill))) + (thumb-e + . ((offset . (1.75 . 0.4)) + (stencil . ,bassoon-rh-thumb-e-key-stencil) + (text? . ("E" . #f)) + (complexity . trill))) + (thumb-fis + . ((offset . (-1.0 . 1.6)) + (stencil . ,bassoon-rh-thumb-fis-key-stencil) + (text? . ("F" . 1)) + (complexity . trill)))))))) + (graphical-commands + . ((stencil-alist + . ((stencils + . ,(append (assoc-get 'right-hand-cis-key change-points) + `(,(simple-stencil-alist '(hidden . midline) + '(0.0 . 3.75)) + ,(simple-stencil-alist '(hidden . long-midline) + '(0.0 . 3.80)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ,(simple-stencil-alist '(left-hand . high-e) + '(-1.0 . 7.0)) + ,(simple-stencil-alist '(left-hand . high-ees) + '(-1.0 . 6.0)) + ((stencils + . ((left-hand . ees) (left-hand . cis))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (3.0 . 3.75))) + ((stencils + . (((stencils + . ((left-hand . low-b) + (left-hand . low-bes))) + (xy-scale-function + . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-2.0 . 9.0))) + ((stencils + . ,(assoc-get 'left-hand-flick-group + change-points)) + (xy-scale-function + . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (3.0 . 7.0))) + ,(simple-stencil-alist '(left-hand . low-c) + '(-1.0 . 4.5)) + ,(simple-stencil-alist '(left-hand . low-d) + '(-1.0 . 0.1)) + ((stencils + . ,(assoc-get 'left-hand-thumb-group + change-points)) + (xy-scale-function + . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (1.5 . -0.6))))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-5.5 . 4.7))) + ,(simple-stencil-alist '(right-hand . bes) + '(1.0 . 1.2)) + ((stencils + . ,(make-right-hand-key-addresses '(gis f fis))) + (xy-scale-function . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (2.0 . -1.25))) + ((stencils + . (((stencils + . ((right-hand . thumb-bes) + (right-hand . thumb-e))) + (xy-scale-function + . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-1.22 . 5.25))) + ((stencils + . ,(assoc-get 'right-hand-lower-thumb-group + change-points)) + (xy-scale-function + . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (0.0 . 0.0))))) + (xy-scale-function + . (,return-1 . ,return-1)) + (textual? . #f) + (offset . (-5.0 . 0.0)))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (,(make-left-hand-key-addresses '(ees cis)) + ,(make-left-hand-key-addresses + (assoc-get 'back-left-hand-key-addresses change-points)) + ,(make-right-hand-key-addresses '(f fis gis)) + ,(make-right-hand-key-addresses + (assoc-get 'back-right-hand-key-addresses change-points)))) + (,group-automate-rule + ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (,bassoon-midline-rule + ,(append + (make-left-hand-key-addresses + (assoc-get 'back-left-hand-key-addresses change-points)) + (make-right-hand-key-addresses + (assoc-get 'back-right-hand-key-addresses + change-points)))))) + (extra-offset-instructions + . ,(append + (assoc-get 'cis-offset-instruction change-points) + `((,uniform-extra-offset-rule (0.0 . 0.0))))))) + (text-commands + . ((stencil-alist + . ((stencils + . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75)) + ((stencils + . ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0))) + ((stencils + . ,(make-left-hand-key-addresses + '(high-e high-ees ees cis))) + (textual? . ,lh-woodwind-text-stencil) + (offset . (1.5 . 3.75))) + ((stencils + . ,(make-left-hand-key-addresses + (assoc-get 'back-left-hand-key-addresses + change-points))) + (textual? . ,rh-woodwind-text-stencil) + (offset . (-1.25 . 3.75))) + ((stencils + . ,(make-right-hand-key-addresses + (assoc-get 'front-right-hand-key-addresses + change-points))) + (textual? . ,lh-woodwind-text-stencil) + (offset . (1.5 . 0.0))) + ((stencils . + ,(make-right-hand-key-addresses + (assoc-get 'back-right-hand-key-addresses + change-points))) + (textual? . ,rh-woodwind-text-stencil) + (offset . (-1.25 . 0.0))))) + (xy-scale-function . (,identity . ,identity)) + (textual? . #f) + (offset . (0.0 . 0.0)))) + (draw-instructions + . ((,apply-group-draw-rule-series + (,(make-left-hand-key-addresses + (assoc-get 'back-left-hand-key-addresses change-points)) + ,(make-right-hand-key-addresses + (assoc-get 'front-right-hand-key-addresses change-points)) + ,(make-right-hand-key-addresses + (assoc-get 'back-right-hand-key-addresses change-points)) + ,(make-left-hand-key-addresses '(high-e high-ees ees cis)))) + (,group-automate-rule + ,(make-central-column-hole-addresses + CENTRAL-COLUMN-HOLE-LIST)) + (,group-automate-rule ((hidden . midline))))) + (extra-offset-instructions + . ((,uniform-extra-offset-rule (0.0 . 0.0)))))))))) + +;; Assembly functions + +; Scans a bank for name. +; for example, '(left-hand . bes) will return bes in the left-hand +; of a given bank +(define (get-key name bank) + (assoc-get (cdr name) (assoc-get (car name) bank))) + +(define (translate-key-instruction key-instruction) + (let* + ((key-name (car key-instruction)) + (key-complexity (assoc-get 'complexity (cdr key-instruction)))) + (cond + ((eqv? key-complexity 'basic) + `((,key-name . ,(assoc-get 'F HOLE-FILL-LIST)))) + ((eqv? key-complexity 'trill) + (make-symbol-alist key-name #t #f)) + ((eqv? key-complexity 'covered) + (make-symbol-alist key-name #f #f)) + ((eqv? key-complexity 'ring) + (make-symbol-alist key-name #f #t))))) + +(define (update-possb-list input-key possibility-list canonic-list) + (if (null? possibility-list) + (ly:error "woodwind markup error - invalid key or hole requested") + (if + (assoc-get input-key (cdar possibility-list)) + (append + `(((,(caaar possibility-list) . + ,(assoc-get input-key (cdar possibility-list))) . + ,(assoc-get (caar possibility-list) canonic-list))) + (assoc-remove (caar possibility-list) canonic-list)) + (update-possb-list input-key (cdr possibility-list) canonic-list)))) + +(define (key-crawler input-list possibility-list) + (if (null? input-list) + (map car possibility-list) + (key-crawler + (cdr input-list) + (update-possb-list + (car input-list) + possibility-list + possibility-list)))) + +(define (translate-draw-instructions input-alist key-name-alist) + (apply append + (map (lambda (short long) + (let* + ((key-instructions + (map (lambda (instr) + `(((,long . ,(car instr)) . 0) + . ,(translate-key-instruction instr))) + (assoc-get long key-name-alist)))) + (key-crawler (assoc-get short input-alist) key-instructions))) + '(hd cc lh rh) + '(hidden central-column left-hand right-hand)))) + +(define (uniform-draw-instructions key-name-alist) + (apply append + (map (lambda (long) + (map (lambda (key-instructions) + `((,long . ,(car key-instructions)) . 1)) + (assoc-get long key-name-alist))) + '(hidden central-column left-hand right-hand)))) + +(define (list-all-possible-keys key-name-alist) + (map (lambda (short long) + `(,short + . ,(map (lambda (key-instructions) + (car key-instructions)) + (assoc-get long key-name-alist)))) + '(cc lh rh) + '(central-column left-hand right-hand))) + +(define (list-all-possible-keys-verbose key-name-alist) + (map (lambda (short long) + `(,short + . ,(map (lambda (key-instructions) + `(,(car key-instructions) + . ,(map (lambda (x) + (car x)) + (translate-key-instruction key-instructions)))) + (assoc-get long key-name-alist)))) + '(cc lh rh) + '(central-column left-hand right-hand))) + +(define woodwind-data-assembly-instructions + `((,generate-flute-family-entry . piccolo) + (,generate-flute-family-entry . flute) + (,generate-flute-family-entry . flute-b-extension) + (,generate-tin-whistle-family-entry . tin-whistle) + (,generate-oboe-family-entry . oboe) + (,generate-clarinet-family-entry . clarinet) + (,generate-clarinet-family-entry . bass-clarinet) + (,generate-clarinet-family-entry . low-bass-clarinet) + (,generate-saxophone-family-entry . saxophone) + (,generate-saxophone-family-entry . soprano-saxophone) + (,generate-saxophone-family-entry . alto-saxophone) + (,generate-saxophone-family-entry . tenor-saxophone) + (,generate-saxophone-family-entry . baritone-saxophone) + (,generate-bassoon-family-entry . bassoon) + (,generate-bassoon-family-entry . contrabassoon))) + +(define-public woodwind-instrument-list + (map cdr woodwind-data-assembly-instructions)) + +(define woodwind-data-alist + (map (lambda (instruction) + ((car instruction) (cdr instruction))) + woodwind-data-assembly-instructions)) + +;;; The brains of the markup function: takes drawing and offset information +;;; about a key region and calls the appropriate stencils to draw the region. + +(define + (assemble-stencils + stencil-alist + key-bank + draw-instructions + extra-offset-instructions + radius + thick + xy-stretch + layout + props) + (apply + ly:stencil-add + (map (lambda (node) + (ly:stencil-translate + (if (pair? (cdr node)) + (if (assoc-get 'textual? node) + ((assoc-get 'textual? node) (map (lambda (key) + (assoc-get 'text? key)) + (map (lambda (instr) + (get-key + instr + key-bank)) + (assoc-get 'stencils node))) + radius + (map (lambda (key) + (assoc-get + key + draw-instructions)) + (assoc-get 'stencils + node)) + layout + props) + (assemble-stencils + node + key-bank + draw-instructions + extra-offset-instructions + radius + thick + (coord-apply (assoc-get 'xy-scale-function stencil-alist) + xy-stretch) + layout + props)) + (if (= 0 (assoc-get node draw-instructions)) + empty-stencil + ((assoc-get 'stencil (get-key node key-bank)) + radius + thick + (assoc-get node draw-instructions) + layout + props))) + (coord-scale + (coord-translate + (coord-scale + (assoc-get + 'offset + (if (pair? (cdr node)) + node + (get-key node key-bank))) + (coord-apply + (assoc-get 'xy-scale-function stencil-alist) + xy-stretch)) + (if + (assoc-get node extra-offset-instructions) + (assoc-get node extra-offset-instructions) + '(0.0 . 0.0))) + radius))) + (assoc-get 'stencils stencil-alist)))) + +(define-public (print-keys instrument) + (let* + ((chosen-instrument + (begin + (format #t "\nPrinting keys for: ~a\n" instrument) + (assoc-get instrument woodwind-data-alist))) + (key-list (list-all-possible-keys (assoc-get 'keys chosen-instrument)))) + (define (key-list-loop key-list) + (if (null? key-list) + 0 + (begin + (format #t "~a\n ~a\n" (caar key-list) (cdar key-list)) + (key-list-loop (cdr key-list))))) + (key-list-loop key-list))) + +(define-public (get-woodwind-key-list instrument) + (list-all-possible-keys-verbose + (assoc-get + 'keys + (assoc-get instrument woodwind-data-alist)))) + +(define-public (print-keys-verbose instrument) + (let* + ((chosen-instrument + (begin + (format #t "\nPrinting keys in verbose mode for: ~a\n" instrument) + (assoc-get instrument woodwind-data-alist))) + (key-list + (list-all-possible-keys-verbose (assoc-get 'keys chosen-instrument)))) + (define (key-list-loop key-list) + (if (null? key-list) + 0 + (begin + (format #t "~a\n" (caar key-list)) + (map (lambda (x) + (format #t " possibilities for ~a:\n ~a\n" (car x) (cdr x))) + (cdar key-list)) + (key-list-loop (cdr key-list))))) + (key-list-loop key-list))) + +(define-markup-command + (woodwind-diagram layout props instrument user-draw-commands) + (symbol? list?) + #:category instrument-specific-markup ; markup category + #:properties ((size 1) + (thickness 0.1) + (graphical #t)) + "Make a woodwind-instrument diagram. For example, say + +@example +\\markup \\woodwind-diagram #'oboe #'((lh . (d ees)) (cc . (five3qT1q)) (rh . (gis))) +@end example + +@noindent +for an oboe with the left-hand d key, left-hand ees key, +and right-hand gis key depressed while the five-hole of +the central column effectuates a trill between 1/4 and 3/4 closed. + +The following instruments are supported: +@itemize @minus + +@item +piccolo + +@item +flute + +@item +oboe + +@item +clarinet + +@item +bass-clarinet + +@item +saxophone + +@item +bassoon + +@item +contrabassoon + +@end itemize + +To see all of the callable keys for a given instrument, +include the function @code{(print-keys 'instrument)} +in your .ly file, where instrument is the instrument +whose keys you want to print. + +Certain keys allow for special configurations. The entire gamut of +configurations possible is as follows: + +@itemize @minus + +@item +1q (1/4 covered) + +@item +1h (1/2 covered) + +@item +3q (3/4 covered) + +@item +R (ring depressed) + +@item +F (fully covered; the default if no state put) + +@end itemize + +Additionally, these configurations can be used in trills. So, for example, +@code{three3qTR} effectuates a trill between 3/4 full and ring depressed +on the three hole. As another example, @code{threeRT} effectuates a trill +between R and open, whereas @code{threeTR} effectuates a trill between open +and shut. To see all of the possibilities for all of the keys of a given +instrument, invoke @code{(print-keys-verbose 'instrument)}. + +Lastly, substituting an empty list for the pressed-key alist will result in +a diagram with all of the keys drawn but none filled, for example: + +@example +\\markup \\woodwind-diagram #'oboe #'() +@end example" + (let* ((radius size) + (thick (* size thickness)) + (display-graphic graphical) + (xy-stretch `(1.0 . 2.5)) + (chosen-instrument (assoc-get instrument woodwind-data-alist)) + (chosen-instrument + (if (not chosen-instrument) + (ly:error "~a is not a valid woodwind instrument." + instrument) + chosen-instrument)) + (stencil-info + (assoc-get + (if display-graphic 'graphical-commands 'text-commands) + chosen-instrument)) + (pressed-info + (if (null? user-draw-commands) + (uniform-draw-instructions (assoc-get 'keys chosen-instrument)) + (translate-draw-instructions + (append '((hd . ())) user-draw-commands) + (assoc-get 'keys chosen-instrument)))) + (draw-info + (function-chain + pressed-info + (assoc-get 'draw-instructions stencil-info))) + (extra-offset-info + (function-chain + pressed-info + (assoc-get 'extra-offset-instructions stencil-info)))) + (assemble-stencils + (assoc-get 'stencil-alist stencil-info) + (assoc-get 'keys chosen-instrument) + draw-info + extra-offset-info + radius + thick + xy-stretch + layout + props))) diff --git a/scm/document-backend.scm b/scm/document-backend.scm index d77a194d31..4d55382fc4 100644 --- a/scm/document-backend.scm +++ b/scm/document-backend.scm @@ -1,14 +1,47 @@ -;;;; backend-documentation-lib.scm -- Functions for backend documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . + +(define (sort-grob-properties x) + ;; force 'meta to the end of each prop-list + (let ((meta (assoc 'meta x))) + (append (sort (assoc-remove! x 'meta) ly:alist-citexi 'backend pr grob-description))) @@ -35,13 +68,12 @@ (description-list->texi internal-propdocs #t)) "")))) -(define iface->grob-table (make-vector 61 '())) +(define iface->grob-table (make-hash-table 61)) ;; extract ifaces, and put grob into the hash table. (map (lambda (x) - (let* ((metah (assoc 'meta (cdr x))) - (meta (cdr metah)) - (ifaces (cdr (assoc 'interfaces meta)))) + (let* ((meta (assoc-get 'meta (cdr x))) + (ifaces (assoc-get 'interfaces meta))) (map (lambda (iface) (hashq-set! @@ -61,7 +93,7 @@ (hashq-ref iface->grob-table (car interface) '())) - string #:name name #:text (string-append @@ -88,16 +120,18 @@ "Given a property alist DESCRIPTION, make a documentation node." - (let* ((metah (assoc 'meta description)) - (meta (cdr metah)) - (name (cdr (assoc 'name meta))) + (let* ((meta (assoc-get 'meta description)) + (name (assoc-get 'name meta)) ;; (bla (display name)) - (ifaces (map lookup-interface (cdr (assoc 'interfaces meta)))) - (ifacedoc (map (lambda (iface) - (if (pair? iface) - (ref-ify (symbol->string (car iface))) - (ly:error (_ "pair expected in doc ~s") name))) - (reverse ifaces))) + (ifaces (map lookup-interface (assoc-get 'interfaces meta))) + (ifacedoc (map ref-ify + (sort + (map (lambda (iface) + (if (pair? iface) + (symbol->string (car iface)) + (ly:error (_ "pair expected in doc ~s") name))) + ifaces) + ly:string-cistring lst) stringstring lst) ly:string-citexi 'backend (string->symbol prop) '())) ps)) (texi (description-list->texi descs #f))) diff --git a/scm/document-functions.scm b/scm/document-functions.scm index 34d406f89f..81ec310373 100644 --- a/scm/document-functions.scm +++ b/scm/document-functions.scm @@ -1,9 +1,20 @@ -;;;; document-funcions.scm -- part of generated backend documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (use-modules (ice-9 regex)) @@ -34,7 +45,7 @@ (let* ((fdocs (map (lambda (x) (document-scheme-function (car x) (cadr x) (cddr x))) all-scheme-functions)) - (sfdocs (sort fdocs string #:name "Scheme functions" #:desc "Primitive functions exported by LilyPond." diff --git a/scm/document-identifiers.scm b/scm/document-identifiers.scm index 67e282bd86..ffccf72c30 100644 --- a/scm/document-identifiers.scm +++ b/scm/document-identifiers.scm @@ -1,11 +1,19 @@ -;; -;; document-identifiers.scm -- implement documentation -;; of identifiers from .ly file. -;; -;; source file of the GNU LilyPond music typesetter -;; -;; (c) 2006 Han-Wen Nienhuys -;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2006--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . (use-modules (ice-9 format)) @@ -46,7 +54,7 @@ (define (identifierstring (car a)) (symbol->string (car b)))) diff --git a/scm/document-markup.scm b/scm/document-markup.scm index af4a65d7c6..c348e66e55 100644 --- a/scm/document-markup.scm +++ b/scm/document-markup.scm @@ -1,9 +1,20 @@ -;;;; document-markup.scm -- part of generated backend documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define (doc-markup-function-properties func) @@ -62,14 +73,17 @@ "@end itemize\n")))))) (define (markup-functionstring (procedure-name a)) (symbol->string (procedure-name b)))) + (ly:string-cistring (procedure-name a)) (symbol->string (procedure-name b)))) (define (markup-category-doc-node category) (let* ((category-string (symbol->string category)) (category-name (string-capitalize (regexp-substitute/global #f "-" category-string 'pre " " 'post))) - (markup-functions (hashq-ref markup-functions-by-category - category))) + (markup-functions (hash-fold (lambda (markup-function dummy functions) + (cons markup-function functions)) + '() + (hashq-ref markup-functions-by-category + category)))) (make #:appendix #t #:name category-name @@ -81,14 +95,6 @@ (sort markup-functions markup-function #:appendix #t @@ -107,11 +113,16 @@ raw-categories)))) (map markup-category-doc-node categories)))) -(define (markup-list-doc-node) - (make - #:appendix #t - #:name "Text markup list commands" - #:desc "" - #:text (string-append - "The following commands can all be used with @code{\\markuplines}.\n" - (markup-list-doc-string)))) +(define (markup-list-doc-string) + (string-append + "@table @asis" + (apply string-append + (map doc-markup-function + (sort (hash-fold (lambda (markup-list-function dummy functions) + (cons markup-list-function functions)) + '() + markup-list-functions) + markup-function +;;;; Copyright (C) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define (music-props-doc) (make #:name "Music properties" #:desc "All music properties, including descriptions." #:text - (let* ((ps (sort (map symbol->string all-music-properties) stringstring all-music-properties) ly:string-citexi 'music (string->symbol prop))) ps)) (texi (description-list->texi descs #f))) texi))) -(define music-types->names (make-vector 61 '())) +(define music-types->names (make-hash-table 61)) (filter-map (lambda (entry) (let* ((class (ly:camel-case->lisp-identifier (car entry))) (classes (ly:make-event-class class))) @@ -53,9 +64,8 @@ (symbol->string (car entry)) "} is in music objects of type " (human-listify - (sort - (map (lambda (x) (ref-ify (symbol->string x))) - (cdr entry)) stringstring (cdr entry)) + ly:string-cialist music-types->names) alistalist music-types->names) ly:alist-cistring classes))) + (map ref-ify (sort (map symbol->string classes) + ly:string-citexi (map (lambda (x) (property->texi 'music x props)) - (map car props)) + (sort (map car props) ly:symbol-ci +;;;; Copyright (C) 2000--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define (engraver-makes-grob? name-symbol grav) (memq name-symbol (assoc 'grobs-created (ly:translator-description grav)))) @@ -19,12 +30,12 @@ (engraver-accepts-music-types? (cdr types) grav)))) (define (engraver-doc-string engraver in-which-contexts) - (let* ((propsr (cdr (assoc 'properties-read (ly:translator-description engraver)))) - (propsw (cdr (assoc 'properties-written (ly:translator-description engraver)))) - (accepted (cdr (assoc 'events-accepted (ly:translator-description engraver)))) + (let* ((propsr (assoc-get 'properties-read (ly:translator-description engraver))) + (propsw (assoc-get 'properties-written (ly:translator-description engraver))) + (accepted (assoc-get 'events-accepted (ly:translator-description engraver))) (name-sym (ly:translator-name engraver)) (name-str (symbol->string name-sym)) - (desc (cdr (assoc 'description (ly:translator-description engraver)))) + (desc (assoc-get 'description (ly:translator-description engraver))) (grobs (engraver-grobs engraver))) (string-append @@ -34,18 +45,15 @@ (string-append "Music types accepted:\n\n" (human-listify - (map (lambda (x) - (string-append - "@ref{" - (symbol->string x) - "}")) accepted))) + (map ref-ify (sort (map symbol->string accepted) ly:string-citexi - (map (lambda (x) (property->texi 'translation x '())) propsr) + (map (lambda (x) (property->texi 'translation x '())) + (sort propsr ly:symbol-citexi - (map (lambda (x) (property->texi 'translation x '())) propsw) + (map (lambda (x) (property->texi 'translation x '())) + (sort propsw ly:symbol-cistring contexts) - stringengraver-table (make-vector 61 '())) +(define name->engraver-table (make-hash-table 61)) (map (lambda (x) (hash-set! name->engraver-table (ly:translator-name x) x)) @@ -150,18 +159,15 @@ (define (context-doc context-desc) - (let* ((name-sym (cdr (assoc 'context-name context-desc))) + (let* ((name-sym (assoc-get 'context-name context-desc)) (name (symbol->string name-sym)) - (aliases (map symbol->string (cdr (assoc 'aliases context-desc)))) - (desc-handle (assoc 'description context-desc)) - (desc (if (and (pair? desc-handle) (string? (cdr desc-handle))) - (cdr desc-handle) "(not documented)")) - - (accepts (cdr (assoc 'accepts context-desc))) - (consists (cdr (assoc 'consists context-desc))) - (props (cdr (assoc 'property-ops context-desc))) + (aliases (map symbol->string (assoc-get 'aliases context-desc))) + (desc (assoc-get 'description context-desc "(not documented")) + (accepts (assoc-get 'accepts context-desc)) + (consists (assoc-get 'consists context-desc)) + (props (assoc-get 'property-ops context-desc)) (grobs (context-grobs context-desc)) - (grob-refs (map (lambda (x) (ref-ify x)) grobs))) + (grob-refs (map ref-ify (sort grobs ly:string-ci #:name name @@ -171,17 +177,18 @@ (if (pair? aliases) (string-append "\n\nThis context also accepts commands for the following context(s):\n\n" - (human-listify aliases) + (human-listify (sort aliases ly:string-cistring accepts))) + (human-listify (map ref-ify (sort (map symbol->string accepts) + ly:string-citexi - (map document-engraver-by-name consists) + (map document-engraver-by-name (sort consists ly:symbol-cistring (cdr (assoc 'grobs-created (ly:translator-description eg))))))) + (map symbol->string (assoc-get 'grobs-created (ly:translator-description eg)))))) (define (context-grobs context-desc) (let* ((group (assq-ref context-desc 'group-type)) @@ -222,7 +230,7 @@ (if group (list group) '()) - (cdr (assoc 'consists context-desc)))) + (assoc-get 'consists context-desc))) (grobs (apply append (map engraver-grobs consists)))) grobs)) @@ -230,8 +238,8 @@ (define (all-contexts-doc) (let* ((layout-alist (sort (ly:output-description $defaultlayout) - (lambda (x y) (symbolstring (map car layout-alist)) stringstring (map car layout-alist)) ly:string-ci @@ -243,7 +251,7 @@ (define all-engravers-list (ly:get-all-translators)) (set! all-engravers-list (sort all-engravers-list - (lambda (a b) (stringstring (ly:translator-name a)) + (lambda (a b) (ly:string-cistring (ly:translator-name a)) (symbol->string (ly:translator-name b)))))) (define (all-engravers-doc) @@ -255,7 +263,7 @@ (map engraver-doc all-engravers-list))) (define (translation-properties-doc-string lst) - (let* ((ps (sort (map symbol->string lst) stringstring lst) ly:string-cisymbol ps)) (propdescs (map diff --git a/scm/document-type-predicates.scm b/scm/document-type-predicates.scm new file mode 100644 index 0000000000..9e7dc4fe94 --- /dev/null +++ b/scm/document-type-predicates.scm @@ -0,0 +1,69 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2010--2011 Mark Polesky +;;;; +;;;; 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 . + +(define (document-type-predicate entry) + (let ((pred (procedure-name (car entry)))) + (string-append + "@item @code{" + (case pred + ;; don't print "cheap-markup?" + ((cheap-markup?) "markup?") + (else (symbol->string pred))) + "} @tab \n" + (case pred + ;; clarify `list?' vs. `cheap-list?' + ((list?) "list @emph{(use} @code{cheap-list?} + @emph{for faster processing)}") + ((cheap-list?) "list @emph{(use this instead of} + @code{list?} @emph{for faster processing)}") + (else (cdr entry))) + "\n"))) + +(define (document-type-predicate-category alist nodename) + (string-append + "@node " nodename "\n" + "@unnumberedsubsec " nodename "\n" + "\n" + "@multitable @columnfractions .33 .66\n" + "@headitem Type predicate @tab Description\n" + (apply string-append + (sort (map document-type-predicate alist) + ly:string-ci +;;;; Copyright (C) 2000--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . ;;; File entry point for generated documentation ;;; Running LilyPond on this file generates the documentation @@ -17,9 +28,11 @@ ;; todo: naming: grob vs. layout property (map ly:load '("documentation-lib.scm" + "lily-sort.scm" "document-functions.scm" "document-translation.scm" "document-music.scm" + "document-type-predicates.scm" "document-identifiers.scm" "document-backend.scm" "document-markup.scm")) @@ -30,19 +43,32 @@ (slot-ref (all-scheme-functions-doc) 'text) (open-output-file "scheme-functions.tely")) -;;(display +;;(display ;; (markup-doc-string) ;; (open-output-file "markup-commands.tely")) -(call-with-output-file "markup-commands.tely" - (lambda (port) - (dump-node (markup-doc-node) port 2))) +(display + ;; ugly hack to remove the @node... @appendixsec... portion + (substring + (call-with-output-string + (lambda (port) + (dump-node (markup-doc-node) port 2))) + ;; magic number to remove the initial part. 63 comes from: + ;; "\nnode Text markup commands\n@appendixsec Text markup commands\n\n\n\n" + ;; which is generated by (dump-node...) in documentation-lib.scm + 63 + ) + (open-output-file "markup-commands.tely")) + +(display + (markup-list-doc-string) + (open-output-file "markup-list-commands.tely")) -(call-with-output-file "markup-list-commands.tely" - (lambda (port) - (dump-node (markup-list-doc-node) port 2))) +(display + type-predicates-doc-string + (open-output-file "type-predicates.tely")) -(display +(display (identifiers-doc-string) (open-output-file "identifiers.tely")) @@ -57,7 +83,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define file-name "lilypond-internals") +(define file-name "internals") (define outname (string-append file-name ".texi")) (define out-port (open-output-file outname)) @@ -66,8 +92,8 @@ (display (string-append - (texi-file-head "LilyPond program-reference" file-name - "(lilypond/lilypond-internals.info)") + (texi-file-head "LilyPond Internals Reference" file-name + "(lilypond-internals.info)") " @include macros.itexi @@ -83,11 +109,6 @@ @iftex @afourpaper -@c don't replace quotes with directed quotes -@tex -\\gdef\\SETtxicodequoteundirected{Foo} -\\gdef\\SETtxicodequotebacktick{Bla} -@end tex @end iftex @finalout @@ -98,7 +119,8 @@ @titlefont{Internals Reference} @author The LilyPond development team -Copyright @copyright{} 1999--2009 by the authors +@c `Internals Reference' was born 2000-10-21 with git commit 01e371f... +Copyright @copyright{} 2000--2011 by the authors @vskip 20pt @@ -119,13 +141,13 @@ For LilyPond version @version{} @ifhtml @ifclear bigpage This document is also available as a -@uref{source/Documentation/user/lilypond-internals.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-internals-big-page.html,one big page}. +@uref{source/Documentation/internals.pdf,PDF} and as +@uref{source/Documentation/internals-big-page.html,one big page}. @end ifclear @ifset bigpage This document is also available as a -@uref{source/Documentation/user/lilypond-internals.pdf,PDF} and as a -@uref{source/Documentation/user/lilypond-internals/index.html,HTML indexed multiple pages}. +@uref{source/Documentation/internals.pdf,PDF} and as a +@uref{source/Documentation/internals/index.html,HTML indexed multiple pages}. @end ifset @end ifhtml diff --git a/scm/documentation-lib.scm b/scm/documentation-lib.scm index ba434f1947..b71709def4 100644 --- a/scm/documentation-lib.scm +++ b/scm/documentation-lib.scm @@ -1,10 +1,20 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; documentation-lib.scm -- Assorted Functions for generated documentation -;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (use-modules (oop goops) (srfi srfi-13) @@ -60,22 +70,22 @@ (define (texi-section-command level) - (cdr (assoc level '( - ;; Hmm, texinfo doesn't have ``part'' - (0 . "@top") - (1 . "@chapter") - (2 . "@section") - (3 . "@subsection") - (4 . "@unnumberedsubsubsec") - (5 . "@unnumberedsubsubsec"))))) + (assoc-get level '( + ;; Hmm, texinfo doesn't have ``part'' + (0 . "@top") + (1 . "@chapter") + (2 . "@section") + (3 . "@subsection") + (4 . "@unnumberedsubsubsec") + (5 . "@unnumberedsubsubsec")))) (define (texi-appendix-section-command level) - (cdr (assoc level '((0 . "@top") - (1 . "@appendix") - (2 . "@appendixsec") - (3 . "@appendixsubsec") - (4 . "@appendixsubsubsec") - (5 . "@appendixsubsubsec"))))) + (assoc-get level '((0 . "@top") + (1 . "@appendix") + (2 . "@appendixsec") + (3 . "@appendixsubsec") + (4 . "@appendixsubsubsec") + (5 . "@appendixsubsubsec")))) (define (one-item->texi label-desc-pair) "Document one (LABEL . DESC); return empty string if LABEL is empty string." @@ -100,13 +110,13 @@ string-to-use). If QUOTE? is #t, embed table in a @quotation environment." "Generate what is between @menu and @end menu." (let ((maxwid (apply max (map (lambda (x) (string-length (car x))) items-alist)))) - + (string-append "\n@menu" (apply string-append (map (lambda (x) (string-append - (string-pad-right + (string-pad-right (string-append "\n* " (car x) ":: ") (+ maxwid 8)) (cdr x))) @@ -149,12 +159,13 @@ string-to-use). If QUOTE? is #t, embed table in a @quotation environment." name) (define (ref-ify x) - "Add ref to X" + "Return @ref{X}. If mapping ref-ify to a list that needs to be sorted, + sort the list first." (string-append "@ref{" x "}")) (define (human-listify lst) "Produce a textual enumeration from LST, a list of strings" - + (cond ((null? lst) "none") ((null? (cdr lst)) (car lst)) @@ -176,23 +187,23 @@ with init values from ALIST (1st optional argument) (alist (if (pair? rest) (car rest) '())) (type?-name (string->symbol (string-append (symbol->string where) "-type?"))) - (doc-name (string->symbol + (doc-name (string->symbol (string-append (symbol->string where) "-doc"))) (type (object-property sym type?-name)) (typename (type-name type)) (desc (object-property sym doc-name)) - (handle (assoc sym alist))) + (init-value (assoc-get sym alist))) (if (eq? desc #f) (ly:error (_ "cannot find description for property ~S (~S)") sym where)) - + (cons (string-append "@code{" name "} " "(" typename ")" - (if handle + (if init-value (string-append ":\n\n" - (scm->texi (cdr handle)) + (scm->texi init-value) "\n\n") "")) desc))) diff --git a/scm/editor.scm b/scm/editor.scm index 01e9244761..ff1894a268 100644 --- a/scm/editor.scm +++ b/scm/editor.scm @@ -1,8 +1,19 @@ -;;;; editor.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2005--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2005--2011 Jan Nieuwenhuizen +;;;; +;;;; 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 . (define-module (scm editor)) @@ -31,7 +42,7 @@ (define editor-command-template-alist '(("emacs" . "emacsclient --no-wait +%(line)s:%(column)s %(file)s || (emacs +%(line)s:%(column)s %(file)s&)") - ("gvim" . "gvim --remote +:%(line)s:norm%(char)s %(file)s") + ("gvim" . "gvim --remote +:%(line)s:norm%(column)s %(file)s") ("uedit32" . "uedit32 %(file)s -l%(line)s -c%(char)s") ("nedit" . "nc -noask +%(line)s %(file)s") ("gedit" . "gedit +%(line)s %(file)s") diff --git a/scm/encoding.scm b/scm/encoding.scm index 9a441ac881..a35be6c391 100644 --- a/scm/encoding.scm +++ b/scm/encoding.scm @@ -1,8 +1,19 @@ -;;;; encoding.scm -- font encoding +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2004--2011 Jan Nieuwenhuizen ;;;; -;;;; (c) 2004--2009 Jan Nieuwenhuizen +;;;; 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 . (define-public latin1-coding-vector #(.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef @@ -48,7 +59,7 @@ (define-public (decode-byte-string str) "Return vector of glyphname symbols that correspond to string, -assuming that STR is byte-coded using ENCODING-NAME." +assuming that @var{str} is byte-coded using latin-1 encoding." (let* ((len (string-length str)) (output-vector (make-vector len '.notdef))) diff --git a/scm/file-cache.scm b/scm/file-cache.scm index 7df106891e..7deea1a28e 100644 --- a/scm/file-cache.scm +++ b/scm/file-cache.scm @@ -1,8 +1,19 @@ -;;;; file-cache.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2005--2011 Han-Wen Nienhuys ;;;; -;;;; (c) 2005--2009 Han-Wen Nienhuys +;;;; 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 . (define cache-hash-tab (make-hash-table 11)) diff --git a/scm/flag-styles.scm b/scm/flag-styles.scm index ae671db8ba..9e1a268e4d 100644 --- a/scm/flag-styles.scm +++ b/scm/flag-styles.scm @@ -1,14 +1,26 @@ -;;;; flag-styles.scm +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPOnd music typesetter +;;;; Copyright (C) 2008--2011 Reinhold Kainhofer ;;;; +;;;; 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 . + ;;;; This file implements different flag styles in Scheme / GUILE, most ;;;; notably the old-straight-flag and the modern-straight-flag styles. -;;;; (define-public (no-flag stem-grob) - "No flag: Simply return empty stencil" + "No flag: Simply return empty stencil." empty-stencil) @@ -17,34 +29,22 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-public (add-stroke-straight stencil stem-grob dir log stroke-style offset length thickness stroke-thickness) +(define-public (add-stroke-straight stencil stem-grob dir log stroke-style + offset length thickness stroke-thickness) "Add the stroke for acciaccatura to the given flag stencil. - The stroke starts for up-flags at upper-end-of-flag+(0,length/2) and - ends at (0, vertical-center-of-flag-end) - (flag-x-width/2, flag-x-width + flag-thickness). - Here length is the whole length, while flag-x-width is just the - x-extent and thus depends on the angle! Other combinations don't look as - good... For down-stems the y-coordinates are simply mirrored." +The stroke starts for up-flags at `upper-end-of-flag + (0,length/2)' +and ends at `(0, vertical-center-of-flag-end) - +(flag-x-width/2, flag-x-width + flag-thickness)'. Here `length' is the +whole length, while `flag-x-width' is just the x-extent and thus depends on +the angle! Other combinations don't look as good. + +For down-stems the y-coordinates are simply mirrored." (let* ((start (offset-add offset (cons 0 (* (/ length 2) dir)))) - (end (offset-add (cons 0 (cdr offset)) + (end (offset-add (cons 0 (cdr offset)) (cons (- (/ (car offset) 2)) (* (- (+ thickness (car offset))) dir)))) (stroke (make-line-stencil stroke-thickness (car start) (cdr start) (car end) (cdr end)))) (ly:stencil-add stencil stroke))) -(define PI-OVER-180 (/ (atan 1 1) 45)) -(define (degrees->radians angle-degrees) - "Convert the given angle from degrees to radians" - (* angle-degrees PI-OVER-180)) - -(define (polar->rectangular radius angle-in-degrees) - "Convert polar coordinate @code{radius} and @code{angle-in-degrees} - to (x-length . y-length)" - (let* ((complex (make-polar - radius - (degrees->radians angle-in-degrees)))) - (cons - (real-part complex) - (imag-part complex)))) - (define (buildflag flag-stencil remain curr-stencil spacing) "Internal function to recursively create a stencil with @code{remain} flags from the single-flag stencil curr-stencil, which is already translated to @@ -56,12 +56,15 @@ flag-stencil)) (define-public (straight-flag flag-thickness flag-spacing - upflag-angle upflag-length - downflag-angle downflag-length) - "Create a stencil for a straight flag. - flag-thickness, -spacing are given in staff spaces, - *flag-angle is given in degree, *flag-length is given in staff spaces. - All lengths will be scaled according to the font size of the note." + upflag-angle upflag-length + downflag-angle downflag-length) + "Create a stencil for a straight flag. @var{flag-thickness} and +@var{flag-spacing} are given in staff spaces, @var{upflag-angle} and +@var{downflag-angle} are given in degrees, and @var{upflag-length} and +@var{downflag-length} are given in staff spaces. + +All lengths are scaled according to the font size of the note." + (lambda (stem-grob) (let* ((log (ly:grob-property stem-grob 'duration-log)) (dir (ly:grob-property stem-grob 'direction)) @@ -104,13 +107,13 @@ (define-public (modern-straight-flag stem-grob) "Modern straight flag style (for composers like Stockhausen, Boulez, etc.). - The angles are 18 and 22 degrees and thus smaller than for the ancient style - of Bach etc." +The angles are 18 and 22 degrees and thus smaller than for the ancient style +of Bach, etc." ((straight-flag 0.55 1 -18 1.1 22 1.2) stem-grob)) (define-public (old-straight-flag stem-grob) - "Old straight flag style (for composers like Bach). The angles of the flags - are both 45 degrees." + "Old straight flag style (for composers like Bach). The angles of the +flags are both 45 degrees." ((straight-flag 0.55 1 -45 1.2 45 1.4) stem-grob)) @@ -129,7 +132,7 @@ (define-public (add-stroke-glyph stencil stem-grob dir stroke-style flag-style) "Load and add a stroke (represented by a glyph in the font) to the given - flag stencil" +flag stencil." (if (not (string? stroke-style)) stencil ; Otherwise: look up the stroke glyph and combine it with the flag @@ -148,7 +151,7 @@ (define-public (retrieve-glyph-flag flag-style dir dir-modifier stem-grob) - "Load the correct flag glyph from the font" + "Load the correct flag glyph from the font." (let* ((log (ly:grob-property stem-grob 'duration-log)) (font (ly:grob-default-font stem-grob)) (font-char (string-append "flags." flag-style dir dir-modifier (number->string log))) @@ -159,7 +162,7 @@ (define-public (create-glyph-flag flag-style dir-modifier stem-grob) - "Create a flag stencil by looking up the glyph from the font" + "Create a flag stencil by looking up the glyph from the font." (let* ((dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "u" "d")) (flag (retrieve-glyph-flag flag-style dir dir-modifier stem-grob)) (stroke-style (ly:grob-property stem-grob 'stroke-style))) @@ -171,12 +174,12 @@ (define-public (mensural-flag stem-grob) "Mensural flags: Create the flag stencil by loading the glyph from the font. - Flags are always aligned with staff lines, so we need to check the end point - of the stem: For stems ending on staff lines, use different flags than for - notes between staff lines. The idea is that flags are always vertically - aligned with the staff lines, regardless of whether the note head is on a - staff line or between two staff lines. In other words, the inner end of - a flag always touches a staff line." +Flags are always aligned with staff lines, so we need to check the end point +of the stem: For stems ending on staff lines, use different flags than for +notes between staff lines. The idea is that flags are always vertically +aligned with the staff lines, regardless of whether the note head is on a +staff line or between two staff lines. In other words, the inner end of +a flag always touches a staff line." (let* ((adjust #t) (stem-end (inexact->exact (round (ly:grob-property stem-grob 'stem-end-position)))) @@ -188,25 +191,27 @@ (define-public ((glyph-flag flag-style) stem-grob) - "Simulates the default way of generating flags: look up glyphs - flags.style[ud][1234] from the feta font and use it for the flag stencil." + "Simulatesthe default way of generating flags: Look up glyphs +@code{flags.style[ud][1234]} from the feta font and use it for the flag +stencil." (create-glyph-flag flag-style "" stem-grob)) (define-public (normal-flag stem-grob) - "Create a default flag" + "Create a default flag." (create-glyph-flag "" "" stem-grob)) (define-public (default-flag stem-grob) - "Create a flag stencil for the stem. Its style will be derived from the - @code{'flag-style} Stem property. By default, @code{lilypond} uses a - C++ Function (which is slightly faster) to do exactly the same as this - function. However, if one wants to modify the default flags, this function - can be used to obtain the default flag stencil, which can then be modified - at will. The correct way to do this is: + "Create a flag stencil for the stem. Its style will be derived from the +@code{'flag-style} Stem property. By default, @code{lilypond} uses a +C++ Function (which is slightly faster) to do exactly the same as this +function. However, if one wants to modify the default flags, this function +can be used to obtain the default flag stencil, which can then be modified +at will. The correct way to do this is: + @example \\override Stem #'flag = #default-flag \\override Stem #'flag-style = #'mensural diff --git a/scm/font.scm b/scm/font.scm index c29258860c..539e1aaee2 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -1,14 +1,32 @@ -;;;; font.scm -- construct font trees +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . ;; TODO: ;; ;; lookup-font should be written in C. ;; +;; We have a tree, where each level of the tree is a qualifier +;; (eg. encoding, family, shape, series etc.) this defines the levels +;; in the tree. The first one is encoding, so we can directly select +;; between text or music in the first step of the selection. +(define default-qualifier-order + '(font-encoding font-family font-shape font-series)) + (define-class ()) @@ -28,14 +46,14 @@ qualifier default) (make #:qualifier qualifier - #:default default + #:default default #:children (make-hash-table 11))) (define-method (display (leaf ) port) (map (lambda (x) (display x port)) (list "#" ))) @@ -50,7 +68,7 @@ "(def: " (font-default node) ") {\n")) - (for-each + (for-each (lambda (x) (display "\n") (display (car x) port) @@ -59,13 +77,11 @@ (hash-table->alist (font-children node))) (display "} }\n")) -(define default-qualifier-order - '(font-encoding font-family font-shape font-series)) (define-method (add-font (node ) fprops size-family) (define (assoc-delete key alist) (assoc-remove! (list-copy alist) key)) - + (define (make-node fprops size-family) (if (null? fprops) (make-font-tree-leaf (car size-family) (cdr size-family)) @@ -117,51 +133,80 @@ (define (lookup-font node alist-chain) (g-lookup-font node alist-chain)) - -;; Ugh. Currently, we load the PFB Feta fonts for `fetaDynamic' with -;; Pango. This should be changed to load the Emmentaler fonts instead -;; (with Pango too), but then we need support for a `font-style' -;; property which isn't implemented yet. -(define feta-alphabet-size-vector - (list->vector - (map (lambda (tup) - (cons (ly:pt (cdr tup)) - (format "feta-alphabet~a ~a" - (car tup) - (ly:pt (cdr tup))))) - '((11 . 11.22) - (13 . 12.60) - (14 . 14.14) - (16 . 15.87) - (18 . 17.82) - (20 . 20) - (23 . 22.45) - (26 . 25.20))))) +;; TODO - we could actually construct this by loading all OTFs and +;; inspecting their design size fields. +(define-public feta-design-size-mapping + '((11 . 11.22) + (13 . 12.60) + (14 . 14.14) + (16 . 15.87) + (18 . 17.82) + (20 . 20) + (23 . 22.45) + (26 . 25.20))) ;; Each size family is a vector of fonts, loaded with a delay. The ;; vector should be sorted according to ascending design size. -(define-public (add-music-fonts node factor) +(define-public (add-music-fonts node name family design-size-alist factor) + "Set up music fonts. + +Arguments: +@itemize +@item +@var{node} is the font tree to modify. + +@item +@var{name} is the basename for the music font. +@file{@var{name}-.otf} should be the music font, +@file{@var{name}-brace.otf} should have piano braces. + +@item +@var{family} is the family name of the music font. + +@item +@var{design-size-alist} is a list of @code{(rounded . designsize)}. +@code{rounded} is a suffix for font filenames, while @code{designsize} +should be the actual design size. The latter is used for text fonts +loaded through pango/fontconfig. + +@item +@var{factor} is a size factor relative to the default size that is being +used. This is used to select the proper design size for the text fonts. +@end itemize" (for-each (lambda (x) (add-font node - (list (cons 'font-encoding (car x))) + (list (cons 'font-encoding (car x)) + (cons 'font-family family)) (cons (* factor (cadr x)) (caddr x)))) - `((fetaDynamic ,(ly:pt 20.0) ,feta-alphabet-size-vector) - (fetaNumber ,(ly:pt 20.0) ,feta-alphabet-size-vector) + + `((fetaText ,(ly:pt 20.0) + ,(list->vector + (map (lambda (tup) + (cons (ly:pt (cdr tup)) + (format "~a-~a ~a" + name + (car tup) + (ly:pt (cdr tup))))) + design-size-alist))) (fetaMusic ,(ly:pt 20.0) - #(,(delay (ly:system-font-load "emmentaler-11")) - ,(delay (ly:system-font-load "emmentaler-13")) - ,(delay (ly:system-font-load "emmentaler-14")) - ,(delay (ly:system-font-load "emmentaler-16")) - ,(delay (ly:system-font-load "emmentaler-18")) - ,(delay (ly:system-font-load "emmentaler-20")) - ,(delay (ly:system-font-load "emmentaler-23")) - ,(delay (ly:system-font-load "emmentaler-26")))) + ,(list->vector + (map (lambda (size-tup) + (delay (ly:system-font-load + (format "~a-~a" name (car size-tup))))) + design-size-alist + ))) (fetaBraces ,(ly:pt 20.0) - #(,(delay (ly:system-font-load "aybabtu"))))))) - + #(,(delay (ly:system-font-load + (format "~a-brace" name))))) + ))) + (define-public (add-pango-fonts node lily-family family factor) + ;; Synchronized with the `text-font-size' variable in + ;; layout-set-absolute-staff-size-in-module (see paper.scm). + (define text-font-size (ly:pt (* factor 11.0))) + (define (add-node shape series) (add-font node `((font-family . ,lily-family) @@ -169,7 +214,7 @@ (font-series . ,series) (font-encoding . latin1) ;; ugh. ) - `(,(ly:pt (* factor 11.0)) + `(,text-font-size . #(,(cons (ly:pt 12) (ly:make-pango-description-string @@ -178,15 +223,15 @@ (font-shape . ,shape))) (ly:pt 12))))))) - (add-node 'upright 'normal) - (add-node 'caps 'normal) - (add-node 'upright 'bold) + (add-node 'upright 'normal) + (add-node 'caps 'normal) + (add-node 'upright 'bold) (add-node 'italic 'normal) (add-node 'italic 'bold)) (define-public (make-pango-font-tree roman-str sans-str typewrite-str factor) (let ((n (make-font-tree-node 'font-encoding 'fetaMusic))) - (add-music-fonts n factor) + (add-music-fonts n "emmentaler" 'feta feta-design-size-mapping factor) (add-pango-fonts n 'roman roman-str factor) (add-pango-fonts n 'sans sans-str factor) (add-pango-fonts n 'typewriter typewrite-str factor) @@ -194,8 +239,16 @@ (define-public (make-century-schoolbook-tree factor) (make-pango-font-tree - "Century Schoolbook L" - "Sans" "Mono" factor)) + "Century Schoolbook L" + "sans-serif" "monospace" factor)) + +(define-public all-text-font-encodings + '(latin1)) + +(define-public all-music-font-encodings + '(fetaBraces + fetaMusic + fetaText)) (define-public (magstep s) (exp (* (/ s 6) (log 2)))) diff --git a/scm/framework-eps.scm b/scm/framework-eps.scm index 7383f3181c..4ab6e7bddd 100644 --- a/scm/framework-eps.scm +++ b/scm/framework-eps.scm @@ -1,8 +1,19 @@ -;;;; framework-ps.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys ;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; 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 . (define-module (scm framework-eps)) @@ -51,6 +62,9 @@ alignment." (define paper (ly:paper-book-paper book)) + + (define create-aux-files + (ly:get-option 'aux-files)) (define (dump-infinite-stack-EPS stencils) (let* ((dump-me (stack-stencils Y DOWN 2.0 stencils))) @@ -65,61 +79,61 @@ alignment." (ly:get-option 'include-eps-fonts)) (string-append name ".eps"))) - (define (dump-stencils-as-separate-EPS stencils count) - (if (pair? stencils) - (let* ((line (car stencils)) - (rest (cdr stencils)) - (system-base-name (format "~a-~a" basename count))) - (dump-stencil-as-EPS paper line system-base-name) - (if do-pdf - (postscript->pdf 0 0 - (string-append system-base-name ".eps"))) - (dump-stencils-as-separate-EPS rest (1+ count))))) - ;; main body - (let* ((write-file (lambda (str-port ext) - (let* ((name (format "~a-systems.~a" basename ext)) - (port (open-output-file name))) - (ly:message (_ "Writing ~a...") name) - (display (get-output-string str-port) port) - (close-output-port port)))) - (tex-system-port (open-output-string)) - (texi-system-port (open-output-string)) - (count-system-port (open-output-string)) - (widened-stencils (widen-left-stencil-edges stencils)) - (counted-systems (count-list widened-stencils)) - (eps-files (map dump-counted-stencil counted-systems))) - (if do-pdf - ;; par-for-each: a bit faster ... - (for-each (lambda (y) - (postscript->pdf 0 0 y)) - eps-files)) - (for-each (lambda (c) - (if (< 0 c) - (display (format - "\\ifx\\betweenLilyPondSystem \\undefined + ;; First, create the output, then if necessary, individual staves and + ;; 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)) + + ;; 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 + ;; Also always create if aux-files=##t + (if (or create-aux-files (< 1 (length stencils))) + (let* ((widened-stencils (widen-left-stencil-edges stencils)) + (counted-systems (count-list widened-stencils)) + (eps-files (map dump-counted-stencil counted-systems))) + (if do-pdf + ;; par-for-each: a bit faster ... + (for-each (lambda (y) (postscript->pdf 0 0 y)) + eps-files)))) + + ;; Now, write some aux files if requested: .texi, .tex and .count + ;; for direct inclusion into latex and texinfo + (if create-aux-files + (let* ((write-file (lambda (str-port ext) + (if create-aux-files + (let* ((name (format "~a-systems.~a" basename ext)) + (port (open-output-file name))) + (ly:message (_ "Writing ~a...") name) + (display (get-output-string str-port) port) + (close-output-port port))))) + (tex-system-port (open-output-string)) + (texi-system-port (open-output-string)) + (count-system-port (open-output-string))) + (for-each (lambda (c) + (if (< 0 c) + (display (format + "\\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)) - (iota (length stencils))) - (display "@c eof\n" texi-system-port) - (display "% eof\n" tex-system-port) - (display (format "~a" (length stencils)) count-system-port) - (dump-infinite-stack-EPS stencils) - (postprocess-output book framework-eps-module - (format "~a.eps" basename) (ly:output-formats)) - (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 - ;; this file is present. - (write-file count-system-port "count"))) + 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)) + (iota (length stencils))) + (display "@c eof\n" texi-system-port) + (display "% eof\n" tex-system-port) + (display (format "~a" (length stencils)) count-system-port) + (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 + ;; this file is present. + (write-file count-system-port "count")))) (define-public (output-classic-framework basename book scopes fields) (output-scopes scopes fields basename) diff --git a/scm/framework-null.scm b/scm/framework-null.scm index a552b5e707..bcc58142e5 100644 --- a/scm/framework-null.scm +++ b/scm/framework-null.scm @@ -1,4 +1,4 @@ -;; module for benchmarking. +;;;; framework-null.scm -- module for benchmarking. (define-module (scm framework-null) #:export (output-framework) diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index 84f3a3bec8..7c44920d67 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -1,8 +1,19 @@ -;;;; framework-ps.scm -- structure for PostScript output +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys ;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; 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 . (define-module (scm framework-ps)) @@ -37,37 +48,15 @@ "%" "_" name))) "m" (string-encode-integer (inexact->exact (round (* 1000 magnify))))))) -(define (define-fonts paper) - (define font-list (ly:paper-fonts paper)) +(define (ps-define-pango-pf pango-pf font-name scaling) + "") - (define (define-font command fontname scaling) - (string-append - "/" command - " { /" fontname - " " (ly:number->string scaling) " output-scale div selectfont }" - " bind def\n")) - - (define (font-load-command font) - (let* ((specced-font-name (ly:font-name font)) - (fontname (if specced-font-name - specced-font-name - (ly:font-file-name font))) - (command (ps-font-command font)) - - ;; FIXME -- see (ps-font-command) - (plain (ps-font-command font)) - (designsize (ly:font-design-size font)) - (magnification (* (ly:font-magnification font))) - (ops (ly:output-def-lookup paper 'output-scale)) - (scaling (* ops magnification designsize))) - (if (equal? fontname "unknown") - (display (list font fontname))) - (define-font plain fontname scaling))) - - (apply string-append - (map (lambda (x) (font-load-command x)) - (filter (lambda (x) (not (ly:pango-font? x))) - font-list)))) +(define (ps-define-font font font-name scaling) + (string-append + "/" (ps-font-command font) + " { /" font-name + " " (ly:number->string scaling) " output-scale div selectfont }" + " bind def\n")) ;; FIXME: duplicated in other output backends ;; FIXME: silly interface name @@ -191,7 +180,7 @@ (define (setup-variables paper) (string-append "\n" - (define-fonts paper) + (define-fonts paper ps-define-font ps-define-pango-pf) (output-variables paper))) (define (cff-font? font) @@ -229,8 +218,7 @@ (define (internal-font? file-name) (or (string-startswith file-name "Emmentaler") (string-startswith file-name "emmentaler") - (string-startswith file-name "aybabtu") - (string-startswith file-name "Aybabtu"))) + )) (define (load-font-via-GS font-name-filename) (define (ps-load-file file-name) @@ -275,14 +263,16 @@ (dir-helper dir (cons e lst))))) (reverse (dir-helper (opendir dir-name) '()))) - (define (handle-mac-font name filename) + (define (handle-mac-font name file-name) (let* ((dir-name (tmpnam)) (files '()) (status 0) - (embed #f)) + (embed #f) + (cwd (getcwd))) (mkdir dir-name #o700) - (set! status (ly:system - (format "cd ~a && fondu -force '~a'" dir-name filename))) + (chdir dir-name) + (set! status (ly:system (list "fondu" "-force" file-name))) + (chdir cwd) (set! files (dir-listing dir-name)) (for-each (lambda (f) @@ -301,7 +291,7 @@ (begin (set! embed "% failed\n") (ly:warning (_ "cannot extract file matching ~a from ~a") - name filename))) + name file-name))) embed)) (define (font-file-as-ps-string name file-name font-index) @@ -345,7 +335,7 @@ (else (ly:warning (_ "do not know how to embed font ~s ~s ~s") name file-name font)))))) - + (define (load-fonts paper) (let* ((fonts (ly:paper-fonts paper)) @@ -389,6 +379,7 @@ (pfas (map font-loader font-names))) pfas)) + (display "%%BeginProlog\n" port) (format port @@ -408,6 +399,47 @@ (display "%%EndProlog\n" port) (display "%%BeginSetup\ninit-lilypond-parameters\n%%EndSetup\n\n" port)) +(define (ps-quote str) + (fold + (lambda (replacement-list result) + (string-join + (string-split + result + (car replacement-list)) + (cadr replacement-list))) + str + '((#\\ "\\\\") (#\( "\\(") (#\) "\\)")))) + +;;; Create DOCINFO pdfmark containing metadata +;;; header fields with pdf prefix override those without the prefix +(define (handle-metadata header port) + (define (metadata-encode val) + ;; First, call ly:encode-string-for-pdf to encode the string (latin1 or + ;; utf-16be), then escape all parentheses and backslashes + ;; FIXME guile-2.0: use (string->utf16 str 'big) instead + + (ps-quote (ly:encode-string-for-pdf val))) + (define (metadata-lookup-output overridevar fallbackvar field) + (let* ((overrideval (ly:modules-lookup (list header) overridevar)) + (fallbackval (ly:modules-lookup (list header) fallbackvar)) + (val (if overrideval overrideval fallbackval))) + (if val + (format port "/~a (~a)\n" field (metadata-encode (markup->string val)))))) + (display "[ " port) + (metadata-lookup-output 'pdfcomposer 'composer "Author") + (format port "/Creator (LilyPond ~a)\n" (lilypond-version)) + (metadata-lookup-output 'pdftitle 'title "Title") + (metadata-lookup-output 'pdfsubject 'subject "Subject") + (metadata-lookup-output 'pdfkeywords 'keywords "Keywords") + (metadata-lookup-output 'pdfmodDate 'modDate "ModDate") + (metadata-lookup-output 'pdfsubtitle 'subtitle "Subtitle") + (metadata-lookup-output 'pdfcomposer 'composer "Composer") + (metadata-lookup-output 'pdfarranger 'arranger "Arranger") + (metadata-lookup-output 'pdfpoet 'poet "Poet") + (metadata-lookup-output 'pdfcopyright 'copyright "Copyright") + (display "/DOCINFO pdfmark\n\n" port)) + + (define-public (output-framework basename book scopes fields) (let* ((filename (format "~a.ps" basename)) (outputter (ly:make-paper-outputter @@ -417,6 +449,7 @@ (open-file filename "wb") 'ps)) (paper (ly:paper-book-paper book)) + (header (ly:paper-book-header book)) (systems (ly:paper-book-systems book)) (page-stencils (map page-stencil (ly:paper-book-pages book))) (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t)) @@ -432,6 +465,8 @@ ;; don't do BeginDefaults PageMedia: A4 ;; not necessary and wrong (write-preamble paper #t port) + (if (module? header) + (handle-metadata header port)) (for-each (lambda (page) (set! page-number (1+ page-number)) @@ -472,9 +507,9 @@ (define-public (dump-stencil-as-EPS-with-bbox paper dump-me filename load-fonts bbox) - "Create an EPS file from stencil DUMP-ME to FILENAME. BBOX has -format (left-x, lower-y, right x, up-y). If LOAD-FONTS set, include -fonts inline." + "Create an EPS file from stencil @var{dump-me} to @var{filename}. +@var{bbox} has format @code{(left-x, lower-y, right-x, upper-y)}. If +@var{load-fonts} set, include fonts inline." (define (to-rounded-bp-box box) "Convert box to 1/72 inch with rounding to enlarge the box." (let* ((scale (ly:output-def-lookup paper 'output-scale)) @@ -509,7 +544,7 @@ fonts inline." (display "stroke grestore\n%%Trailer\n%%EOF\n" port) (ly:outputter-close outputter))) -(define (clip-systems-to-region basename paper systems region do-pdf) +(define (clip-systems-to-region basename paper systems region do-pdf do-png) (let* ((extents-system-pairs (filtered-map (lambda (paper-system) (let* ((x-ext (system-clipped-x-extent @@ -537,12 +572,17 @@ fonts inline." (ly:get-option 'include-eps-fonts) bbox) (if do-pdf - (postscript->pdf 0 0 (format "~a.eps" filename))))) + (postscript->pdf 0 0 (format "~a.eps" filename))) + (if do-png + (postscript->png (ly:get-option 'resolution) 0 0 + (format "~a.eps" filename))))) extents-system-pairs))) (define-public (clip-system-EPSes basename paper-book) (define do-pdf (member "pdf" (ly:output-formats))) + (define do-png + (member "png" (ly:output-formats))) (define (clip-score-systems basename systems) (let* ((layout (ly:grob-layout (paper-system-system-grob (car systems)))) @@ -555,7 +595,7 @@ fonts inline." (rhythmic-location->file-string (car region)) (rhythmic-location->file-string (cdr region))) layout systems region - do-pdf)) + do-pdf do-png)) regions))) ;; partition in system lists sharing their layout blocks @@ -577,30 +617,17 @@ fonts inline." (for-each (lambda (system-list) ;; filter out headers and top-level markup (if (pair? system-list) - (clip-score-systems - (if (> count 0) - (format "~a-~a" basename count) - basename) - system-list))) + (clip-score-systems + (if (> count 0) + (format "~a-~a" basename count) + basename) + system-list))) score-system-list))) (define-public (output-preview-framework basename book scopes fields) (let* ((paper (ly:paper-book-paper book)) - (systems (ly:paper-book-systems book)) - (scale (ly:output-def-lookup paper 'output-scale)) - (to-dump-systems '())) - ;; skip booktitles. - (if (and (not (ly:get-option 'include-book-title-preview)) - (pair? systems) - (ly:prob-property (car systems) 'is-book-title #f)) - (set! systems (cdr systems))) - (for-each - (lambda (sys) - (if (or (paper-system-title? sys) - (not (pair? to-dump-systems)) - (paper-system-title? (car to-dump-systems))) - (set! to-dump-systems (cons sys to-dump-systems)))) - systems) + (systems (relevant-book-systems book)) + (to-dump-systems (relevant-dump-systems systems))) (dump-stencil-as-EPS paper (stack-stencils Y DOWN 0.0 (map paper-system-stencil @@ -611,31 +638,10 @@ fonts inline." (format "~a.preview.eps" basename) (cons "png" (ly:output-formats))))) -(if #f - (define-public (output-preview-framework basename book scopes fields) - (let* ((paper (ly:paper-book-paper book)) - (systems (ly:paper-book-systems book)) - (scale (ly:output-def-lookup paper 'output-scale)) - (titles (take-while paper-system-title? systems)) - (non-title (find (lambda (x) - (not (paper-system-title? x))) systems)) - (dump-me - (stack-stencils Y DOWN 0.0 - (map paper-system-stencil - (append titles (list non-title)))))) - (output-scopes scopes fields basename) - (dump-stencil-as-EPS paper dump-me - (format "~a.preview" basename) - #t) - (postprocess-output book framework-ps-module - (format "~a.preview.eps" basename) - (ly:output-formats))))) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-public (convert-to-pdf book name) - (let* ((defs (ly:paper-book-paper book)) - (landscape (ly:output-def-lookup defs 'landscape)) +(define (output-width-height defs) + (let* ((landscape (ly:output-def-lookup defs 'landscape)) (output-scale (ly:output-def-lookup defs 'output-scale)) (convert (lambda (x) (* x output-scale (/ (ly:bp 1))))) @@ -643,23 +649,35 @@ fonts inline." (paper-height (convert (ly:output-def-lookup defs 'paper-height))) (w (if landscape paper-height paper-width)) (h (if landscape paper-width paper-height))) - (if (equal? (basename name ".ps") "-") - (ly:warning (_ "cannot convert to ~S" "PDF")) - (postscript->pdf w h name)))) + (cons w h))) + +(define (output-resolution defs) + (let ((defs-resolution (ly:output-def-lookup defs 'pngresolution))) + (if (number? defs-resolution) + defs-resolution + (ly:get-option 'resolution)))) + +(define (output-filename name) + (if (equal? (basename name ".ps") "-") + (string-append "./" name) + name)) + +(define-public (convert-to-pdf book name) + (let* ((defs (ly:paper-book-paper book)) + (width-height (output-width-height defs)) + (width (car width-height)) + (height (cdr width-height)) + (filename (output-filename name))) + (postscript->pdf width height filename))) (define-public (convert-to-png book name) (let* ((defs (ly:paper-book-paper book)) - (defs-resolution (ly:output-def-lookup defs 'pngresolution)) - (resolution (if (number? defs-resolution) - defs-resolution - (ly:get-option 'resolution))) - (paper-width (ly:output-def-lookup defs 'paper-width)) - (paper-height (ly:output-def-lookup defs 'paper-height)) - (output-scale (ly:output-def-lookup defs 'output-scale))) - (postscript->png resolution - (* paper-width output-scale (/ (ly:bp 1))) - (* paper-height output-scale (/ (ly:bp 1))) - name))) + (resolution (output-resolution defs)) + (width-height (output-width-height defs)) + (width (car width-height)) + (height (cdr width-height)) + (filename (output-filename name))) + (postscript->png resolution width height filename))) (define-public (convert-to-ps book name) #t) diff --git a/scm/framework-scm.scm b/scm/framework-scm.scm index 5cb3a67490..51a1446302 100644 --- a/scm/framework-scm.scm +++ b/scm/framework-scm.scm @@ -1,36 +1,36 @@ +;;;; framework-scm.scm -- output full-page stencil expressions -(define-module (scm framework-scm) - #:export (output-framework) - ) +(define-module (scm framework-scm)) -(use-modules (ice-9 regex) - (ice-9 string-fun) - (guile) - (srfi srfi-1) - (ice-9 pretty-print) - (srfi srfi-13) - (scm page) - (lily)) +(use-modules + (ice-9 regex) + (ice-9 string-fun) + (guile) + (srfi srfi-1) + (ice-9 pretty-print) + (srfi srfi-13) + (scm page) + (lily)) -(define-public (output-framework basename book scopes fields ) - (let* - ((file (open-output-file (format #f "~a.scm" basename)))) +(define format ergonomic-simple-format) + +(define-public (output-framework basename book scopes fields) + (let* ((file (open-output-file (format "~a.scm" basename)))) (display ";;Creator: LilyPond\n" file) (display ";; raw SCM output\n" file) - - (for-each - (lambda (page) - (display - ";;;;;;;;;;;;;;;;;;;;;;;;;;\n;;;PAGE\n" file) -; (pretty-print (ly:stencil-expr page) file) - (write (ly:stencil-expr page) file) - ) - (map page-stencil (ly:paper-book-pages book))))) + + (for-each + (lambda (page) + (display ";;;;;;;;;;;;;;;;;;;;;;;;;;\n;;;PAGE\n" file) + ;; The following two lines are alternates + ;(pretty-print (ly:stencil-expr page) file) + (write (ly:stencil-expr page) file) + ) + (map page-stencil (ly:paper-book-pages book))))) (define-public output-classic-framework output-framework) - (define-public (convert-to-ps . args) #t) (define-public (convert-to-pdf . args) #t) (define-public (convert-to-png . args) #t) diff --git a/scm/framework-socket.scm b/scm/framework-socket.scm index 69b48db8a1..abaaa08ec9 100644 --- a/scm/framework-socket.scm +++ b/scm/framework-socket.scm @@ -1,3 +1,5 @@ +;;;; framework-socket.scm + (define-module (scm framework-socket) #:export (output-framework) ) @@ -12,23 +14,63 @@ (srfi srfi-13) (lily)) -(define-public (output-framework channel book scopes fields ) - (let* - ((ctor-arg (if (string? channel) - (open-output-file (format "~a.socket" channel)) - channel)) - (outputter (ly:make-paper-outputter - ctor-arg - 'socket)) - (systems (ly:paper-book-systems book))) - - (if (pair? systems) - (ly:outputter-dump-stencil outputter - (paper-system-stencil (car systems)))) - )) +(define (get-page-dimensions paper) + (let* ((landscape (ly:output-def-lookup paper 'landscape)) + (output-scale (ly:output-def-lookup paper 'output-scale)) + (paper-width (ly:output-def-lookup paper 'paper-width)) + (paper-height (ly:output-def-lookup paper 'paper-height)) + (indent (ly:output-def-lookup paper 'indent)) + (line-width (ly:output-def-lookup paper 'line-width)) + (plain-left-margin (ly:output-def-lookup paper 'left-margin)) + (top-margin (ly:output-def-lookup paper 'top-margin)) + (w (if landscape paper-height paper-width)) + (h (if landscape paper-width paper-height)) + (left-margin (if (null? plain-left-margin) + (/ (- w line-width) 2) + plain-left-margin)) +;; (list w h left-margin top-margin indent line-width))) +;; (convert (lambda (x) (* x output-scale (/ (ly:bp 1)))))) + (unit-length (ly:output-def-lookup paper 'output-scale)) + (convert (lambda (x) (* x lily-unit->mm-factor unit-length)))) + (map convert (list w h left-margin top-margin indent line-width)))) -(define-public output-classic-framework output-framework) +(define-public (output-framework channel book scopes fields) + (let* ((ctor-arg (if (string? channel) + (open-output-file (format "~a.socket" channel)) + channel)) + (outputter (ly:make-paper-outputter + ctor-arg + 'socket)) + (systems (ly:paper-book-systems book)) + (paper (ly:paper-book-paper book)) + (pages (ly:paper-book-pages book))) + (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))) + (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)) + 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))) + (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))) + (ly:outputter-dump-stencil outputter system-stencil))) + systems))) (define-public (convert-to-ps . args) #t) (define-public (convert-to-pdf . args) #t) diff --git a/scm/framework-svg.scm b/scm/framework-svg.scm index b2e0b5604d..f10125caa8 100644 --- a/scm/framework-svg.scm +++ b/scm/framework-svg.scm @@ -1,110 +1,199 @@ -;; -;; framework-svg.scm -- structure for SVG output +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2004--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2004--2011 Jan Nieuwenhuizen +;;;; Patrick McCarty +;;;; +;;;; 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 . -(define-module (scm framework-svg)) +;;;; Recommendations: +;;;; http://www.w3.org/TR/SVG11/ +;;;; http://www.w3.org/TR/SVGTiny12/ +;;;; +;;;; Working draft: +;;;; http://www.w3.org/TR/SVGPrint/ -- for and -(use-modules (guile) - (lily) - (scm page) - (scm output-svg)) +;;;; TODO: +;;;; * Once and are supported by Inkscape and +;;;; other user agents, add a -d option (-dsvg-multiple-page) +;;;; that will create a single SVG file containing all pages +;;;; of output. --pmccarty -(use-modules (srfi srfi-1) - (srfi srfi-2) - (srfi srfi-13) - (ice-9 regex)) +(define-module (scm framework-svg)) + +(use-modules + (guile) + (lily) + (scm page) + (scm paper-system) + (scm output-svg) + (srfi srfi-1) + (srfi srfi-2) + (srfi srfi-13) + (ice-9 regex)) (define format ergonomic-simple-format) -(define-public (output-framework basename book scopes fields) - (let* ((filename (format "~a.svg" basename)) - (outputter (ly:make-paper-outputter (open-file filename "wb") - (ly:get-option 'backend))) +(define (svg-begin . rest) + (eo 'svg + '(xmlns . "http://www.w3.org/2000/svg") + '(xmlns:xlink . "http://www.w3.org/1999/xlink") + '(version . "1.2") + `(width . ,(ly:format "~2fmm" (first rest))) + `(height . ,(ly:format "~2fmm" (second rest))) + `(viewBox . ,(ly:format "~4f ~4f ~4f ~4f" + (third rest) (fourth rest) + (fifth rest) (sixth rest))))) + +(define (svg-end) + (ec 'svg)) + +(define (mkdirs dir-name mode) + (let loop ((dir-name (string-split dir-name #\/)) (root "")) + (if (pair? dir-name) + (let ((dir (string-append root (car dir-name)))) + (if (not (file-exists? dir)) + (mkdir dir mode)) + (loop (cdr dir-name) (string-append dir "/")))))) + +(define output-dir #f) + +(define (svg-define-font font font-name scaling) + (let* ((base-file-name (basename (if (list? font) (pango-pf-file-name font) + (ly:font-file-name font)) ".otf")) + (woff-file-name (string-regexp-substitute "([.]otf)?$" ".woff" + base-file-name)) + (woff-file (or (ly:find-file woff-file-name) "/no-such-file.woff")) + (url (string-append output-dir "/fonts/" (lilypond-version) "/" + (basename woff-file-name))) + (lower-name (string-downcase font-name))) + (if (file-exists? woff-file) + (begin + (if (not (file-exists? url)) + (begin + (ly:message (_ "Updating font into: ~a") url) + (mkdirs (string-append output-dir "/" (dirname url)) #o700) + (copy-file woff-file url) + (ly:progress "\n"))) + (ly:format + "@font-face { +font-family: '~a'; +font-weight: normal; +font-style: normal; +src: url('~a'); +} +" + font-name url)) + ""))) + +(define (woff-header paper dir) + "TODO: + * add (ly:version) to font name + * copy woff font with version alongside svg output +" + (set! output-dir dir) + (string-append + (eo 'defs) + (eo 'style '(text . "style/css")) + " +" + (ec 'style) + (ec 'defs))) + +(define (dump-page paper filename page page-number page-count) + (let* ((outputter (ly:make-paper-outputter (open-file filename "wb") 'svg)) + (dump (lambda (str) (display str (ly:outputter-port outputter)))) + (lookup (lambda (x) (ly:output-def-lookup paper x))) + (unit-length (lookup 'output-scale)) + (output-scale (* lily-unit->mm-factor unit-length)) + (device-width (lookup 'paper-width)) + (device-height (lookup 'paper-height)) + (page-width (* output-scale device-width)) + (page-height (* output-scale device-height))) + + (if (ly:get-option 'svg-woff) + (module-define! (ly:outputter-module outputter) 'paper paper)) + (dump (svg-begin page-width page-height + 0 0 device-width device-height)) + (if (ly:get-option 'svg-woff) + (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))) + (ly:outputter-output-scheme outputter + `(begin (set! lily-unit-length ,unit-length) + "")) + (ly:outputter-dump-stencil outputter page) + (dump (svg-end)) + (ly:outputter-close outputter))) + +(define (dump-preview paper stencil filename) + (let* ((outputter (ly:make-paper-outputter (open-file filename "wb") 'svg)) (dump (lambda (str) (display str (ly:outputter-port outputter)))) - (paper (ly:paper-book-paper book)) - (unit-length (ly:output-def-lookup paper 'output-scale)) - (output-scale (* lily-unit->mm-factor - unit-length)) + (lookup (lambda (x) (ly:output-def-lookup paper x))) + (unit-length (lookup 'output-scale)) + (x-extent (ly:stencil-extent stencil X)) + (y-extent (ly:stencil-extent stencil Y)) + (left-x (car x-extent)) + (top-y (cdr y-extent)) + (device-width (interval-length x-extent)) + (device-height (interval-length y-extent)) + (output-scale (* lily-unit->mm-factor unit-length)) + (svg-width (* output-scale device-width)) + (svg-height (* output-scale device-height))) + + (if (ly:get-option 'svg-woff) + (module-define! (ly:outputter-module outputter) 'paper paper)) + (dump (svg-begin svg-width svg-height + left-x (- top-y) device-width device-height)) + (if (ly:get-option 'svg-woff) + (module-remove! (ly:outputter-module outputter) 'paper)) + (if (ly:get-option 'svg-woff) + (dump (woff-header paper (dirname filename)))) + (ly:outputter-output-scheme outputter + `(begin (set! lily-unit-length ,unit-length) + "")) + (ly:outputter-dump-stencil outputter stencil) + (dump (svg-end)) + (ly:outputter-close outputter))) + + +(define (output-framework basename book scopes fields) + (let* ((paper (ly:paper-book-paper book)) (page-stencils (map page-stencil (ly:paper-book-pages book))) - (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t)) (page-number (1- (ly:output-def-lookup paper 'first-page-number))) (page-count (length page-stencils)) - (paper-width (ly:output-def-lookup paper 'paper-width)) - (paper-height (ly:output-def-lookup paper 'paper-height)) - (page-width (inexact->exact (ceiling (* output-scale paper-width)))) - (page-height (inexact->exact (ceiling (* output-scale paper-height)))) - (page-set? (or (> page-count 1) landscape?))) - - (ly:outputter-output-scheme outputter - `(begin (set! lily-unit-length ,unit-length) "")) - (dump (eo 'svg - '(xmlns . "http://www.w3.org/2000/svg") - '(xmlns:xlink . "http://www.w3.org/1999/xlink") - '(version . "1.2") - - ;; Argggghhhh: SVG takes the px <-> mm mapping from the windowing system - `(width . ,(format "~s" page-width)) - `(height . ,(format "~s" page-height)))) - - (dump (dump-fonts outputter paper)) - (dump - (string-append - ;; FIXME: only use pages if there are more than one, pageSet is - ;; not supported by all SVG applications yet. - (if page-set? (eo 'pageSet) "") - (eo 'g `(transform . ,(format "scale(~a, ~a) " - output-scale output-scale))))) - + (filename "") + (file-suffix (lambda (num) + (if (= page-count 1) "" (format "-page-~a" num))))) (for-each - (lambda (page) - (set! page-number (1+ page-number)) - (dump-page outputter page page-number page-count landscape? page-set?)) - page-stencils) - - (if page-set? (eo 'pageSet) "") - (dump - (string-append - (ec 'g) - (if page-set? (ec 'pageSet) "") - (ec 'svg))) - - (ly:outputter-close outputter) - )) - -(define (dump-page outputter page page-number page-count landscape? page-set?) - (define (dump str) (display str (ly:outputter-port outputter))) - - (dump (comment (format "Page: ~S/~S" page-number page-count))) - (if (or landscape? page-set?) - (dump - (if landscape? - (eo 'page '(page-orientation . "270")) - (eo 'page)))) - - (dump (string-append (eo 'g ))) - (ly:outputter-dump-stencil outputter page) - (dump (string-append (ec 'g))) - (if (or landscape? page-set?) - (dump (ec 'page)))) - -(define (embed-font string) - (let ((start (string-contains string "")) - (end (string-contains string ""))) - (substring string (+ start 7) (- end 1)))) - -(define (dump-fonts outputter paper) - (let* ((fonts (ly:paper-fonts paper)) - (font-names (uniq-list (sort - (filter string? - (map ly:font-file-name fonts)) string ;;;; -;;;; (c) 2004--2009 Carl D. Sorensen +;;;; 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 . ; ; Utility functions @@ -61,10 +72,20 @@ to end-point." (if (null? dot-list) '() (let ((this-list (car dot-list))) - (cons* (list (car this-list) (- (second this-list) base-fret) - (if (null? (cddr this-list)) - '() - (third this-list))) + (cons* (list + ;; string + (car this-list) + ;; fret + (- (second this-list) base-fret) + ;; finger + (if (null? (cddr this-list)) + '() + (third this-list)) + ;; color modifier + (if (or (null? (cddr this-list)) + (null? (cdddr this-list))) + '() + (fourth this-list))) (subtract-base-fret base-fret (cdr dot-list)))))) (define (drop-paren item-list) @@ -89,7 +110,7 @@ to end-point." (define (merge-details key alist-list . default) "Return @code{alist-list} entries for @code{key}, in one combined alist. -There can be two @code{alist-list} entries for a given key. The first +There can be two @code{alist-list} entries for a given key. The first comes from the override-markup function, the second comes from property settings during a regular override. This is necessary because some details can be set in one @@ -101,9 +122,9 @@ found." (define (helper key alist-list default) (if (null? alist-list) default - (let* ((handle (assoc key (car alist-list)))) - (if (pair? handle) - (append (cdr handle) (chain-assoc-get key (cdr alist-list) '())) + (let* ((entry (assoc-get key (car alist-list)))) + (if entry + (append entry (chain-assoc-get key (cdr alist-list) '())) (helper key (cdr alist-list) default))))) (helper key alist-list @@ -246,33 +267,32 @@ with magnification @var{mag} of the string @var{text}." (if (eq? finger-code 'in-dot) 0.425 0.25)) ; bigger dots if labeled (default-dot-position (if (eq? finger-code 'in-dot) - (- 0.95 default-dot-radius) - 0.6)) ; move up to make room for bigger dot if labeled + (- 0.95 default-dot-radius) + 0.6)) ; move up to make room for bigger dot if labeled (dot-radius (assoc-get 'dot-radius details default-dot-radius)) ; needed for draw-dots - ; and draw-barre + ; and draw-barre (dot-position (assoc-get - 'dot-position details default-dot-position)) ; needed for draw-dots - ; and draw-barre + 'dot-position details default-dot-position)) ; needed for + ; draw-dots and draw-barre (th (* (ly:output-def-lookup layout 'line-thickness) (chain-assoc-get 'thickness props 0.5))) ; needed for draw-frets - ; and draw-strings + ; and draw-strings (sth (* size th)) (thickness-factor (assoc-get 'string-thickness-factor details 0)) (alignment (chain-assoc-get 'align-dir props -0.4)) ; needed only here - (xo-padding - (* size (assoc-get 'xo-padding details 0.2))) ; needed only here + (xo-padding (assoc-get 'xo-padding details 0.2)) ; needed only here (parameters (fret-parse-marking-list marking-list my-fret-count)) (capo-fret (assoc-get 'capo-fret parameters 0)) - (dot-list (cdr (assoc 'dot-list parameters))) - (xo-list (cdr (assoc 'xo-list parameters))) - (fret-range (cdr (assoc 'fret-range parameters))) + (dot-list (assoc-get 'dot-list parameters)) + (xo-list (assoc-get 'xo-list parameters)) + (fret-range (assoc-get 'fret-range parameters)) (my-fret-count (fret-count fret-range)) - (barre-list (cdr (assoc 'barre-list parameters))) + (barre-list (assoc-get 'barre-list parameters)) (barre-type (assoc-get 'barre-type details 'curved)) (fret-diagram-stencil '())) @@ -294,7 +314,7 @@ with magnification @var{mag} of the string @var{text}." (cons string-coordinate (- fret-coordinate))))) (define (stencil-coordinate-offset fret-offset string-offset) - "Return a pair @code{(x-offset . y-offstet)} + "Return a pair @code{(x-offset . y-offset)} for translation in stencil coordinate system." (cond ((eq? orientation 'landscape) @@ -352,7 +372,7 @@ baseline at fret coordinate @var{base}, a height of "Draw the string lines for a fret diagram with @var{string-count} strings and frets as indicated in @var{fret-range}. Line thickness is given by @var{th}, fret & string spacing by -@var{size}. Orientation is determined by @var{orientation}. " +@var{size}. Orientation is determined by @var{orientation}." (define (helper x) (if (null? (cdr x)) @@ -389,7 +409,7 @@ Line thickness is given by @var{th}, fret & string spacing by "Draw the fret lines for a fret diagram with @var{string-count} strings and frets as indicated in @var{fret-range}. Line thickness is given by @var{th}, fret & string spacing by -@var{size}. Orientation is given by @var{orientation}." +@var{size}. Orientation is given by @var{orientation}." (define (helper x) (if (null? (cdr x)) (fret-stencil (car x)) @@ -520,7 +540,7 @@ fret-diagram overall parameters." (let* ( (scale-dot-radius (* size dot-radius)) (scale-dot-thick (* size th)) - (dot-color (assoc-get 'dot-color details 'black)) + (default-dot-color (assoc-get 'dot-color details 'black)) (finger-label-padding 0.3) (dot-label-font-mag (* scale-dot-radius @@ -544,6 +564,11 @@ fret-diagram overall parameters." (extent (cons (- scale-dot-radius) scale-dot-radius)) (finger (caddr mypair)) (finger (if (number? finger) (number->string finger) finger)) + (inverted-color (eq? 'inverted (cadddr mypair))) + (dot-color (if (or (and (eq? default-dot-color 'black) inverted-color) + (and (eq? default-dot-color 'white) (not inverted-color))) + 'white + 'black)) (dot-stencil (if (eq? dot-color 'white) (ly:stencil-add (make-circle-stencil @@ -630,12 +655,11 @@ fret-diagram overall parameters." "Put open and mute string indications on diagram, as contained in @var{xo-list}." (let* ((xo-font-mag - (* size (assoc-get - 'xo-font-magnification details + (assoc-get 'xo-font-magnification details (cond ((or (eq? orientation 'landscape) (eq? orientation 'opposing-landscape)) 0.4) - (else 0.4))))) + (else 0.4)))) (mypair (car xo-list)) (restlist (cdr xo-list)) (glyph-string (if (eq? (car mypair) 'mute) @@ -698,6 +722,11 @@ at @var{fret}." (fancy-format #f "~@r" base-fret)) ((equal? 'arabic number-type) (fancy-format #f "~d" base-fret)) + ((equal? 'custom number-type) + (fancy-format #f + (assoc-get 'fret-label-custom-format + details "~a") + base-fret)) (else (fancy-format #f "~(~@r~)" base-fret)))) (label-stencil (centered-stencil @@ -712,7 +741,7 @@ at @var{fret}." (ly:stencil-translate label-stencil (stencil-coordinates - (1+ (* size label-vertical-offset)) + (* size (+ 1.0 label-vertical-offset)) (if (eq? label-dir LEFT) (- label-outside-diagram) (+ (* size (1- string-count)) label-outside-diagram)))))) @@ -751,7 +780,7 @@ at @var{fret}." xo-stencil 'fret orientation)) (xo-stencil-offset (stencil-coordinate-offset - (- diagram-fret-top + (- diagram-fret-top xo-fret-offset (* size xo-padding)) 0))) @@ -916,14 +945,14 @@ a fret-indication list with the appropriate values" `(,props . ,output-list))) ; ugh -- hard coded; proc is better -(define-builtin-markup-command +(define-markup-command (fret-diagram-verbose layout props marking-list) (pair?) ; argument type (list, but use pair? for speed) - instrument-specific-markup ; markup type - ((align-dir -0.4) ; properties and defaults - (size 1.0) - (fret-diagram-details) - (thickness 0.5)) + #:category instrument-specific-markup ; markup type + #:properties ((align-dir -0.4) ; properties and defaults + (size 1.0) + (fret-diagram-details) + (thickness 0.5)) "Make a fret diagram containing the symbols indicated in @var{marking-list}. For example, @@ -955,12 +984,15 @@ Place a capo indicator (a large solid bar) across the entire fretboard at fret location @var{fret-number}. Also, set fret @var{fret-number} to be the lowest fret on the fret diagram. -@item (place-fret @var{string-number} @var{fret-number} @var{finger-value}) +@item (place-fret @var{string-number} @var{fret-number} [@var{finger-value} [@var{color-modifier}]]) Place a fret playing indication on string @var{string-number} at fret -@var{fret-number} with an optional fingering label @var{finger-value}. +@var{fret-number} with an optional fingering label @var{finger-value}, +and an optional color modifier @var{color-modifier}. By default, the fret playing indicator is a solid dot. This can be -changed by setting the value of the variable @var{dot-color}. If the -@var{finger} part of the @code{place-fret} element is present, +globally changed by setting the value of the variable @var{dot-color}. +Setting @var{color-modifier} to @code{inverted} inverts the dot color +for a specific fingering. +If the @var{finger} part of the @code{place-fret} element is present, @var{finger-value} will be displayed according to the setting of the variable @var{finger-code}. There is no limit to the number of fret indications per string. @@ -969,10 +1001,10 @@ indications per string. (make-fret-diagram layout props marking-list)) -(define-builtin-markup-command (fret-diagram layout props definition-string) +(define-markup-command (fret-diagram layout props definition-string) (string?) ; argument type - instrument-specific-markup ; markup category - (fret-diagram-verbose-markup) ; properties and defaults + #:category instrument-specific-markup ; markup category + #:properties (fret-diagram-verbose-markup) ; properties and defaults "Make a (guitar) fret diagram. For example, say @example @@ -1046,11 +1078,11 @@ Note: There is no limit to the number of fret indications per string. (fret-diagram-verbose-markup layout (car definition-list) (cdr definition-list)))) -(define-builtin-markup-command +(define-markup-command (fret-diagram-terse layout props definition-string) (string?) ; argument type - instrument-specific-markup ; markup category - (fret-diagram-verbose-markup) ; properties + #:category instrument-specific-markup ; markup category + #:properties (fret-diagram-verbose-markup) ; properties "Make a fret diagram markup using terse string-based syntax. Here is an example diff --git a/scm/graphviz.scm b/scm/graphviz.scm index 5144977644..f6fd8fa9e4 100644 --- a/scm/graphviz.scm +++ b/scm/graphviz.scm @@ -1,8 +1,19 @@ -;;;; graphviz.scm -- utilities for creating graphviz output +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2007--2011 Joe Neeman ;;;; -;;;; (c) 2007--2009 Joe Neeman +;;;; 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 . (define-module (scm graphviz) diff --git a/scm/guile-debugger.scm b/scm/guile-debugger.scm new file mode 100644 index 0000000000..3c6897eaca --- /dev/null +++ b/scm/guile-debugger.scm @@ -0,0 +1,90 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2010--2011 Ian Hulin +;;;; +;;;; 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 . + +;;; Commentary: + +;;; This file provides the support routines for a guile debugger called +;;; from a environment controlled by LilyPond. It works in conjunction +;;; with file guile-debugger.ly. + +;;; Code: + +(define-module (scm guile-debugger) + #:use-module (ice-9 debugger) + #:use-module (ice-9 debugging traps) + #:use-module (ice-9 debugging trace) + #:use-module (ice-9 debugging steps) + #:use-module (ice-9 debugging ice-9-debugger-extensions) + #:use-module (ice-9 readline) + #:export (set-break! + clear-break! + set-trace-call! + clear-trace-call! + set-trace-subtree! + clear-trace-subtree! + debug-help)) + +(define (set-break! proc) + (install-trap (make + #:procedure proc + #:behaviour debug-trap))) +(define (clear-break! proc) + (uninstall-trap (make + #:procedure proc + #:behaviour debug-trap))) + + +(define (set-trace-call! proc) + (install-trap (make + #:procedure proc + #:behaviour (list trace-trap + trace-at-exit)))) +(define (clear-trace-call! proc) + (uninstall-trap (make + #:procedure proc + #:behaviour (list trace-trap + trace-at-exit)))) + +(define (set-trace-subtree! proc) + (install-trap (make + #:procedure proc + #:behaviour (list trace-trap + trace-until-exit)))) + +(define (clear-trace-subtree! proc) + (uninstall-trap (make + #:procedure proc + #:behaviour (list trace-trap + trace-until-exit)))) + +(define (debug-help ) + (display "\nYou may add the following commands as debugging statements in your source file\n") + (display "or enter the set-x! commands at the guile prompt:\n\n") + (display " (set-break! )\n") + (display " causes guile to enter debugger on a call to \n") + (display " (clear-break! )\n") + (display " disables a breakpoint previously set on a call to \n") + (display " (set-trace-call! )\n") + (display " prints out a line when Scheme enters or exits \n") + (display " (clear-trace-call! )\n") + (display " turns off tracing calls to \n") + (display " (set-trace-subtree! )\n") + (display " displays each line of Scheme code executed during a call to \n") + (display " (clear-trace-subtree! )\n") + (display " turns off tracing code during calls to \n\n") + (display "Enter help at the guile debug> prompt for further information on debugger commands\n") + (newline)) diff --git a/scm/harp-pedals.scm b/scm/harp-pedals.scm index 876e392bf0..357618287a 100644 --- a/scm/harp-pedals.scm +++ b/scm/harp-pedals.scm @@ -1,16 +1,27 @@ -;;;; harp-pedals.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2008--2011 Reinhold Kainhofer ;;;; -;;;; (c) 2008--2009 Reinhold Kainhofer +;;;; 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 . -(define-builtin-markup-command (harp-pedal layout props definition-string) (string?) - instrument-specific-markup ; markup type for the documentation! - ((size 1.0) - (harp-pedal-details) - (thickness 0.5)) +(define-markup-command (harp-pedal layout props definition-string) (string?) + #:category instrument-specific-markup ; markup type for the documentation! + #:properties ((size 1.2) + (harp-pedal-details '()) + (thickness 0.5)) "Make a harp pedal diagram. Possible elements in @var{definition-string}: @@ -29,16 +40,16 @@ the following pedal should be circled (indicating a change) @end table The function also checks if the string has the typical form of three -pedals, then the divider and then the remaining four pedals. If not it -prints out a warning. However, in any case, it will also print each symbol -in the order as given. This means you can place the divider (even multiple +pedals, then the divider and then the remaining four pedals. If not it +prints out a warning. However, in any case, it will also print each symbol +in the order as given. This means you can place the divider (even multiple dividers) anywhere you want, but you'll have to live with the warnings. The appearance of the diagram can be tweaked inter alia using the size property of the TextScript grob (@code{\\override Voice.TextScript #'size = #0.3}) for the overall, the thickness property (@code{\\override Voice.TextScript #'thickness = #3}) for the line thickness of -the horizontal line and the divider. The remaining configuration (box sizes, +the horizontal line and the divider. The remaining configuration (box sizes, offsets and spaces) is done by the harp-pedal-details list of properties (@code{\\override Voice.TextScript #'harp-pedal-details #'box-width = #1}). It contains the following settings: @code{box-offset} (vertical shift of the @@ -50,78 +61,8 @@ divider) and @code{space-after-divider} (box spacing after the divider). \\markup \\harp-pedal #\"^-v|--ov^\" @end lilypond " - (make-harp-pedal layout props (harp-pedals-parse-string definition-string))) - - -;; There is also a \harp-pedal-verbose version, which takes a list of -1/0/1 -;; directions, o and a possible |. It's commented out, because it has some -;; issues (see below) and does not add any new functionality over \harp-pedal -;; The caveats: -;; 1) the | cannot be given as a string "|" but as a character #\| and -;; the "o" has to be given as #\o. -;; 2) if one wants to use directions like UP, CENTER or DOWN, one cannot use -;; '(UP DOWN CENTER #\| ....), because the contents of that list are -;; never evaluated to -1/0/1. Instead one has to explicitly create a -;; list like (list UP DOWN CENTER #\| ....) -;; -;; (define-builtin-markup-command (harp-pedal-verbose layout props pedal-list) (list?) -;; instrument-specific-markup ; markup type -;; ((size 1.0) -;; (harp-pedal-details) -;; (thickness 0.5)) -;; "Make a harp pedal diagram containing the directions indicated in @var{pedal-list}." -;; (make-harp-pedal layout props pedal-list)) - - - -;; Parse the harp pedal definition string into list of directions (-1/0/1), #\o and #\| -(define (harp-pedals-parse-string definition-string) - "Parse a harp pedals diagram string and return a list containing 1, 0, -1, #\\o or #\\|" - (map (lambda (c) - (case c - ((#\^) 1) - ((#\v) -1) - ((#\-) 0) - ((#\| #\o) c) - (else c))) - (string->list definition-string))) - - -;; Analyze the pedal-list: Return (pedalcount . (divider positions)) -(define (harp-pedal-info pedal-list) - (let check ((pedals pedal-list) - (pedalcount 0) - (dividerpositions '())) - (if (null? pedals) - (cons pedalcount (reverse dividerpositions)) - - (case (car pedals) - ((-1 0 1) (check (cdr pedals) (+ pedalcount 1) dividerpositions)) - ((#\|) (check (cdr pedals) pedalcount (cons pedalcount dividerpositions))) - (else (check (cdr pedals) pedalcount dividerpositions)))))) - - -;; Sanity checks, spit out warning if pedal-list violates the conventions -(define (harp-pedal-check pedal-list) - "Perform some sanity checks for harp pedals (7 pedals, divider after third)" - (let ((info (harp-pedal-info pedal-list))) - ; 7 pedals: - (if (not (equal? (car info) 7)) - (ly:warning "Harp pedal diagram contains ~a pedals rather than the usual 7." (car info))) - ; One divider after third pedal: - (if (null? (cdr info)) - (ly:warning "Harp pedal diagram does not contain a divider (usually after third pedal).") - (if (not (equal? (cdr info) '(3))) - (ly:warning "Harp pedal diagram contains dividers at positions ~a. Normally, there is only one divider after the third pedal." (cdr info)))))) - - -(define (make-harp-pedal layout props pedal-list) - "Make a harp pedals diagram markup" - - (harp-pedal-check pedal-list) - - (let* ((size (chain-assoc-get 'size props 1.2)) - (details (chain-assoc-get 'harp-pedal-details props '())) + (let* ((pedal-list (harp-pedals-parse-string definition-string)) + (details (begin (harp-pedal-check pedal-list) harp-pedal-details)) (dy (* size (assoc-get 'box-offset details 0.8))) ; offset of the box center from the line (line-width (* (ly:output-def-lookup layout 'line-thickness) (chain-assoc-get 'thickness props 0.5))) @@ -185,3 +126,42 @@ divider) and @code{space-after-divider} (box spacing after the divider). (make-line-stencil line-width 0 0 final-x 0) stencils)))) +;; Parse the harp pedal definition string into list of directions (-1/0/1), #\o and #\| +(define (harp-pedals-parse-string definition-string) + "Parse a harp pedals diagram string and return a list containing 1, 0, -1, #\\o or #\\|" + (map (lambda (c) + (case c + ((#\^) 1) + ((#\v) -1) + ((#\-) 0) + ((#\| #\o) c) + (else c))) + (string->list definition-string))) + + +;; Analyze the pedal-list: Return (pedalcount . (divider positions)) +(define (harp-pedal-info pedal-list) + (let check ((pedals pedal-list) + (pedalcount 0) + (dividerpositions '())) + (if (null? pedals) + (cons pedalcount (reverse dividerpositions)) + + (case (car pedals) + ((-1 0 1) (check (cdr pedals) (+ pedalcount 1) dividerpositions)) + ((#\|) (check (cdr pedals) pedalcount (cons pedalcount dividerpositions))) + (else (check (cdr pedals) pedalcount dividerpositions)))))) + + +;; Sanity checks, spit out warning if pedal-list violates the conventions +(define (harp-pedal-check pedal-list) + "Perform some sanity checks for harp pedals (7 pedals, divider after third)" + (let ((info (harp-pedal-info pedal-list))) + ; 7 pedals: + (if (not (equal? (car info) 7)) + (ly:warning "Harp pedal diagram contains ~a pedals rather than the usual 7." (car info))) + ; One divider after third pedal: + (if (null? (cdr info)) + (ly:warning "Harp pedal diagram does not contain a divider (usually after third pedal).") + (if (not (equal? (cdr info) '(3))) + (ly:warning "Harp pedal diagram contains dividers at positions ~a. Normally, there is only one divider after the third pedal." (cdr info)))))) diff --git a/scm/kpathsea.scm b/scm/kpathsea.scm deleted file mode 100644 index 5b655f6cb6..0000000000 --- a/scm/kpathsea.scm +++ /dev/null @@ -1,48 +0,0 @@ -;; -;; kpathsea.scm -- implement kpath support using command-line -;; -;; -;; source file of the GNU LilyPond music typesetter -;; -;; (c) 2005--2009 Han-Wen Nienhuys -;; - -(define-module (scm kpathsea)) - -(use-modules (ice-9 popen) - (lily) - (ice-9 rdelim)) - - - -(define-public (ly:kpathsea-find-file name) - (let* - ((cmd (format #f "kpsewhich ~a" - (sanitize-command-option name))) - (unused (if (ly:get-option 'verbose) - (ly:message "Running ~a" cmd))) - (pipe (open-input-pipe cmd)) - (answer (read-line pipe))) - - (if (string? answer) - answer - #f))) - -(define-public (ly:kpathsea-expand-variable var) - (let* - ((cmd (format #f "kpsexpand '$'~a" - (sanitize-command-option var))) - (unused (if (ly:get-option 'verbose) - (ly:message "Running ~a" cmd))) - (pipe (open-input-pipe cmd)) - (answer (read-line pipe))) - - (if (string? answer) - answer #f))) - -;; Test: - -;;(display (ly:kpathsea-find-file "cmr10.tfm")) -;; -;;(display (ly:kpathsea-expand-variable "TEXMF")) - diff --git a/scm/layout-beam.scm b/scm/layout-beam.scm index 09dc09fd8e..4ef49e9759 100644 --- a/scm/layout-beam.scm +++ b/scm/layout-beam.scm @@ -1,17 +1,28 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; beam.scm -- Beam scheme stuff +;;;; Copyright (C) 2000--2011 Jan Nieuwenhuizen ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Jan Nieuwenhuizen +;;;; 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 . -(define ((check-beam-quant posl posr) beam posns) +(define check-beam-quant + (lambda (posl posr) + (lambda (beam posns) "Check whether BEAM has POSL and POSR quants. POSL are (POSITION . QUANT) pairs, where QUANT is -1 (hang), 0 (center), 1 (sit) or -2/ 2 (inter) " - (let* ((thick (ly:grob-property beam 'thickness)) + (let* ((thick (ly:grob-property beam 'beam-thickness)) (layout (ly:grob-layout beam)) (lthick (ly:output-def-lookup layout 'line-thickness)) (staff-thick lthick) ; fixme. @@ -30,11 +41,11 @@ want-l want-r posns) (set! (ly:grob-property beam 'annotation) (format "(~S,~S)" want-l want-r)))) - posns - )) - + posns)))) -(define ((check-beam-slope-sign comparison) beam posns) +(define check-beam-slope-sign + (lambda (comparison) + (lambda (beam posns) "Check whether the slope of BEAM is correct wrt. COMPARISON." (let* ((slope-sign (- (cdr posns) (car posns))) (correct (comparison slope-sign 0))) @@ -45,7 +56,7 @@ (set! (ly:grob-property beam 'annotation) (format "~S 0" (procedure-name comparison)))) (set! (ly:grob-property beam 'annotation) "")) - posns)) + posns)))) (define-public (check-quant-callbacks l r) diff --git a/scm/layout-page-dump.scm b/scm/layout-page-dump.scm deleted file mode 100644 index 8237106f06..0000000000 --- a/scm/layout-page-dump.scm +++ /dev/null @@ -1,147 +0,0 @@ -;;;; layout-page-tweaks.scm -- page breaking and page layout -;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2006 Han-Wen Nienhuys -;;;; 2006 Nicolas Sceaux - -(define-module (scm layout-page-dump) - #:use-module (srfi srfi-1) - #:use-module (ice-9 pretty-print) - #:use-module (scm paper-system) - #:use-module (scm page) - #:use-module (scm layout-page-layout) - #:use-module (lily) - #:export (write-page-breaks - ;; utilisties for writing other page dump functions - record-tweaks dump-all-tweaks)) - -(define (record-tweaks what property-pairs tweaks) - (let ((key (ly:output-def-lookup (ly:grob-layout what) - 'tweak-key - "tweaks")) - (when (ly:grob-property what 'when))) - (if (not (hash-ref tweaks key)) - (hash-set! tweaks key '())) - (hash-set! tweaks key - (acons when property-pairs - (hash-ref tweaks key))))) - -(define (graceless-moment mom) - (ly:make-moment (ly:moment-main-numerator mom) - (ly:moment-main-denominator mom) - 0 0)) - -(define (moment->skip mom) - (let ((main (if (> (ly:moment-main-numerator mom) 0) - (format "\\skip 1*~a/~a" - (ly:moment-main-numerator mom) - (ly:moment-main-denominator mom)) - "")) - (grace (if (< (ly:moment-grace-numerator mom) 0) - (format "\\grace { \\skip 1*~a/~a }" - (- (ly:moment-grace-numerator mom)) - (ly:moment-grace-denominator mom)) - ""))) - (format "~a~a" main grace))) - -(define (dump-tweaks out-port tweak-list last-moment) - (if (not (null? tweak-list)) - (let* ((now (caar tweak-list)) - (diff (ly:moment-sub now last-moment)) - (these-tweaks (cdar tweak-list)) - (skip (moment->skip diff)) - (line-break-str (if (assoc-get 'line-break these-tweaks #f) - "\\break\n" - "")) - (page-break-str (if (assoc-get 'page-break these-tweaks #f) - "\\pageBreak\n" - "")) - (space-tweaks (format "\\spacingTweaks #'~a\n" - (with-output-to-string - (lambda () - (pretty-print - (assoc-get 'spacing-parameters - these-tweaks '())))))) - (base (format "~a~a~a" - line-break-str - page-break-str - space-tweaks))) - (format out-port "~a\n~a\n" skip base) - (dump-tweaks out-port (cdr tweak-list) (graceless-moment now))))) - -(define (dump-all-tweaks pages tweaks output-name) - (let* ((paper (ly:paper-book-paper (page-property (car pages) 'paper-book))) - (name (format "~a-page-layout.ly" output-name)) - (out-port (open-output-file name))) - - (ly:message "Writing page layout to ~a" name) - (hash-for-each - (lambda (key val) - (format out-port "~a = {" key) - (dump-tweaks out-port (reverse val) (ly:make-moment 0 1)) - (display "}" out-port)) - tweaks) - (close-port out-port))) - -(define (write-page-breaks pages output-name) - "Dump page breaks and tweaks" - (let ((tweaks (make-hash-table 60))) - (define (handle-page page) - "Computes vertical stretch for each music line of `page' (starting by - the smallest lines), then record the tweak parameters of each line to - the `tweaks' hash-table." - (let* ((lines (page-property page 'lines)) - (line-count (length lines)) - (compute-max-stretch (ly:output-def-lookup - (ly:paper-book-paper (page-property page - 'paper-book)) - 'system-maximum-stretch-procedure)) - (page-number (page-property page 'page-number))) - (let set-line-stretch! ((sorted-lines (sort lines - (lambda (l1 l2) - (< (line-height l1) - (line-height l2))))) - (rest-height ;; sum of stretchable line heights - (reduce + 0.0 - (map line-height - (filter stretchable-line? lines)))) - (space-left (page-maximum-space-left page))) - (if (not (null? sorted-lines)) - (let* ((line (first sorted-lines)) - (height (line-height line)) - (stretch (min (compute-max-stretch line) - (if (and (stretchable-line? line) - (positive? rest-height)) - (/ (* height space-left) rest-height) - 0.0)))) - (set! (ly:prob-property line 'stretch) stretch) - (set-line-stretch! (cdr sorted-lines) - (if (stretchable-line? line) - (- rest-height height) - rest-height) - (- space-left stretch))))) - (let record-line-tweak ((lines lines) - (is-first-line #t) - (index 0)) - (if (not (null? lines)) - (let ((line (first lines))) - (if (not (ly:prob-property? line 'is-title)) - (record-tweaks - (ly:spanner-bound (ly:prob-property line 'system-grob) LEFT) - `((line-break . #t) - (page-break . ,is-first-line) - (spacing-parameters - . ((page-number . ,page-number) - (system-index . ,index) - (system-stretch . ,(ly:prob-property line 'stretch)) - (system-Y-extent . ,(paper-system-extent line Y)) - (system-refpoint-Y-extent . ,(paper-system-staff-extents line)) - (page-system-count . ,line-count) - (page-printable-height . ,(page-printable-height page)) - (page-space-left . ,(page-property page 'space-left))))) - tweaks)) - (record-line-tweak (cdr lines) #f (1+ index))))))) - ;; Compute tweaks for each page, then dump them to the page-layout file - (for-each handle-page pages) - (dump-all-tweaks pages tweaks output-name))) diff --git a/scm/layout-page-layout.scm b/scm/layout-page-layout.scm deleted file mode 100644 index ffd6d632c4..0000000000 --- a/scm/layout-page-layout.scm +++ /dev/null @@ -1,478 +0,0 @@ -;;;; layout-page-layout.scm -- page breaking and page layout -;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2004--2009 Jan Nieuwenhuizen -;;;; Han-Wen Nienhuys - -(define-module (scm layout-page-layout) - #:use-module (srfi srfi-1) - #:use-module (oop goops describe) - #:use-module (oop goops) - #:use-module (scm paper-system) - #:use-module (scm page) - #:use-module (scm layout-page-dump) - #:use-module (lily) - #:export (post-process-pages optimal-page-breaks make-page-from-systems - page-breaking-wrapper - stretchable-line? ; delete me - ;; utilities for writing custom page breaking functions - line-height line-next-space line-next-padding - line-minimum-distance line-ideal-distance - first-line-position - line-ideal-relative-position line-minimum-relative-position - page-maximum-space-to-fill page-maximum-space-left space-systems)) - -; this is for 2-pass spacing. Delete me. -(define (stretchable-line? line) - "Say whether a system can be stretched." - (not (or (ly:prob-property? line 'is-title) - (let ((system-extent (paper-system-staff-extents line))) - (= (interval-start system-extent) - (interval-end system-extent)))))) - -(define (stretch-and-draw-page paper-book systems page-number ragged - is-last-bookpart is-bookpart-last-page) - (define (max-stretch sys) - (if (ly:grob? sys) - (ly:grob-property sys 'max-stretch) - 0.0)) - - (define (stretchable? sys) - (and (ly:grob? sys) - (> (max-stretch sys) 0.0))) - - (define (height-estimate sys) - (interval-length - (if (ly:grob? sys) - (ly:grob-property sys 'pure-Y-extent) - (paper-system-extent sys Y)))) - - (define (print-system sys) - (if (ly:grob? sys) - (ly:system-print sys) - sys)) - - (define (set-line-stretch! sorted-lines rest-height space-left) - (if (not (null? sorted-lines)) - (let* ((line (first sorted-lines)) - (height (height-estimate line)) - (stretch (min (max-stretch line) - (if (positive? rest-height) - (/ (* height space-left) rest-height) - 0.0)))) - (if (stretchable? line) - (ly:system-stretch line stretch)) - (set-line-stretch! (cdr sorted-lines) - (if (stretchable? line) - (- rest-height height) - rest-height) - (- space-left stretch))))) - - (define (total-padding systems) - (let ((layout (ly:paper-book-paper paper-book))) - (if (or (null? systems) - (null? (cdr systems))) - 0.0 - (+ (line-next-padding (car systems) (cadr systems) layout) - (total-padding (cdr systems)))))) - - (let* ((page (make-page paper-book - 'page-number page-number - 'is-last-bookpart is-last-bookpart - 'is-bookpart-last-page is-bookpart-last-page)) - (paper (ly:paper-book-paper paper-book)) - (height (page-printable-height page)) - ; there is a certain amount of impreciseness going on here: - ; the system heights are estimated, we aren't using skyline distances - ; yet, etc. If we overstretch because of underestimation, the result - ; is very bad. So we stick in some extra space, just to be sure. - (buffer (/ height 10.0)) - (total-system-height (+ (apply + (map height-estimate systems)) - (total-padding systems))) - (height-left (- height total-system-height buffer))) - - (if (and - (not ragged) - (> height-left 0)) - (set-line-stretch! (sort systems - (lambda (s1 s2) - (< (height-estimate s1) - (height-estimate s2)))) - (apply + (map height-estimate - (filter stretchable? systems))) - height-left)) - - (let ((lines (map print-system systems))) - (page-set-property! page 'lines lines) - (page-set-property! - page 'configuration - (if (null? lines) - (list) - (let* ((paper (ly:paper-book-paper paper-book)) - (max-space-to-fill (page-maximum-space-to-fill page lines paper)) - (space-to-fill (if (ly:output-def-lookup - paper 'page-limit-inter-system-space #f) - (min max-space-to-fill - (* (ly:output-def-lookup - paper 'page-limit-inter-system-space-factor 1.4) - (- max-space-to-fill - (or (page-ideal-space-left page) 0)))) - max-space-to-fill)) - (spacing (space-systems space-to-fill lines ragged paper #f))) - (if (and (> (length lines) 1) - (or (not (car spacing)) (inf? (car spacing)))) - (begin - (ly:warning (_ "Can't fit systems on page -- ignoring between-system-padding")) - (cdr (space-systems space-to-fill lines ragged paper #t))) - (cdr spacing))))) - page))) - -(define (page-breaking-wrapper paper-book) - "Compute line and page breaks by calling the page-breaking paper variable, - then performs the post process function using the page-post-process paper - variable. Finally, return the pages." - (let* ((paper (ly:paper-book-paper paper-book)) - (pages ((ly:output-def-lookup paper 'page-breaking) paper-book))) - ((ly:output-def-lookup paper 'page-post-process) paper pages) - pages)) - -(define (post-process-pages layout pages) - "If the write-page-layout paper variable is true, dumps page breaks - and tweaks." - - (let* - ((parser (ly:modules-lookup (list (current-module)) 'parser)) - (output-name (ly:parser-output-name parser)) - ) - - (if (ly:output-def-lookup layout 'write-page-layout #f) - (write-page-breaks pages output-name)))) - -;;; -;;; Utilities for computing line distances and positions -;;; -(define (line-extent line) - "Return the extent of the line (its lowest and highest Y-coordinates)." - (paper-system-extent line Y)) - -(define (line-height line) - "Return the system height, that is the length of its vertical extent." - (interval-length (line-extent line))) - -(define (line-next-space line next-line layout) - "Return space to use between `line' and `next-line'. - `next-line' can be #f, meaning that `line' is the last line." - (let* ((title (paper-system-title? line)) - (next-title (and next-line (paper-system-title? next-line)))) - (ly:prob-property - line 'next-space - (ly:output-def-lookup layout - (cond ((and title next-title) 'between-title-space) - (title 'after-title-space) - (next-title 'before-title-space) - (else 'between-system-space)))))) - -(define (line-next-padding line next-line layout) - "Return padding to use between `line' and `next-line'. - `next-line' can be #f, meaning that `line' is the last line." - (let ((default (ly:output-def-lookup layout 'between-system-padding))) - (if (ly:grob? line) - (let* ((details (ly:grob-property line 'line-break-system-details)) - (padding (assq 'next-padding details))) - (if padding - (cdr padding) - default)) - (ly:prob-property line 'next-padding default)))) - - -(define (line-minimum-distance line next-line layout ignore-padding) - "Minimum distance between `line' reference position and `next-line' - reference position. If next-line is #f, return #f." - (and next-line - (let ((padding (if ignore-padding - 0 - (line-next-padding line next-line layout)))) - (if (or (ly:grob? line) (ly:grob? next-line)) - (max 0 (+ padding - (- (interval-start (line-extent line)) - (interval-end (line-extent next-line))))) - (max 0 (+ padding - (ly:paper-system-minimum-distance line next-line))))))) - -(define (line-ideal-distance line next-line layout ignore-padding) - "Ideal distance between `line' reference position and `next-line' - reference position. If next-line is #f, return #f." - (and next-line - (max 0 - (+ (- (+ (interval-end (paper-system-staff-extents next-line)) - (if ignore-padding 0 (line-next-padding line next-line layout))) - (interval-start (paper-system-staff-extents line))) - (line-next-space line next-line layout))))) - -(define (first-line-position line layout) - "Position of the first line on page" - (max (+ (if (ly:prob-property? line 'is-title) - ;; do not use page-top-space if first line is a title - 0.0 - (ly:output-def-lookup layout 'page-top-space)) - (interval-end (paper-system-staff-extents line))) - (interval-end (line-extent line)))) - -(define (line-ideal-relative-position line prev-line layout ignore-padding) - "Return ideal position of `line', relative to `prev-line' position. - `prev-line' can be #f, meaning that `line' is the first line." - (if (not prev-line) - ;; first line on page - (first-line-position line layout) - ;; not the first line on page - (max (line-minimum-distance prev-line line layout ignore-padding) - (line-ideal-distance prev-line line layout ignore-padding)))) - -(define (line-minimum-relative-position line prev-line layout ignore-padding) - "Return position of `line', relative to `prev-line' position. - `prev-line' can be #f, meaning that `line' is the first line." - (if (not prev-line) - ;; first line on page - (first-line-position line layout) - ;; not the first line on page - (line-minimum-distance prev-line line layout ignore-padding))) - -(define (line-position-on-page line prev-line prev-position page relative-positionning-fn) - "If `line' fits on `page' after `prev-line', which position on page is - `prev-position', then return the line's postion on page, otherwise #f. - `prev-line' can be #f, meaning that `line' is the first line." - (let* ((layout (ly:paper-book-paper (page-property page 'paper-book))) - (position (+ (relative-positionning-fn line prev-line layout #f) - (if prev-line prev-position 0.0))) - (bottom-position (- position - (interval-start (line-extent line))))) - position)) - -(define (page-maximum-space-to-fill page lines paper) - "Return the space between the first line top position and the last line - bottom position. This constitutes the maximum space to fill on `page' - with `lines'." - (let ((last-line (car (last-pair lines)))) - (- (page-printable-height page) - (first-line-position (first lines) paper) - (ly:prob-property last-line - 'bottom-space 0.0) - (- (interval-start (line-extent last-line)))))) - -(define (page-space-left page relative-positionning-fn) - (let ((paper (ly:paper-book-paper (page-property page 'paper-book)))) - (let bottom-position ((lines (page-property page 'lines)) - (prev-line #f) - (prev-position #f)) - (if (null? lines) - (page-printable-height page) - (let* ((line (first lines)) - (position (line-position-on-page - line prev-line prev-position page relative-positionning-fn))) - (if (null? (cdr lines)) - (max 0 - (- (page-printable-height page) - (- position - (interval-start (line-extent line))))) - (bottom-position (cdr lines) line position))))))) - -(define (page-maximum-space-left page) - (page-space-left page line-minimum-relative-position)) - -(define (page-ideal-space-left page) - (page-space-left page line-ideal-relative-position)) - -;;; -;;; Utilities for distributing systems on a page -;;; - -(define (space-systems space-to-fill lines ragged paper ignore-padding) - "Compute lines positions on page: return force and line positions as a pair. - force is #f if lines do not fit on page." - (let* ((empty-stencil (ly:make-stencil '() '(0 . 0) '(0 . 0))) - (empty-prob (ly:make-prob 'paper-system (list `(stencil . ,empty-stencil)))) - (cdr-lines (append (cdr lines) - (if (<= (length lines) 1) - (list empty-prob) - '()))) - (springs (map (lambda (prev-line line) - (list (line-ideal-distance prev-line line paper ignore-padding) - (line-next-space prev-line line paper))) - lines - cdr-lines)) - (rods (map (let ((i -1)) - (lambda (prev-line line) - (set! i (1+ i)) - (list i (1+ i) - (line-minimum-distance prev-line line paper ignore-padding)))) - lines - cdr-lines)) - (space-result - (ly:solve-spring-rod-problem springs rods space-to-fill ragged))) - (cons (car space-result) - (map (let ((topskip (first-line-position (first lines) paper))) - (lambda (y) - (+ y topskip))) - (cdr space-result))))) - - -;;; -;;; Page breaking function -;;; - -;; Optimal distribution of -;; lines over pages; line breaks are a given. - -;; TODO: -;; -;; - density scoring -;; - separate function for word-wrap style breaking? -;; - ragged-bottom? ragged-last-bottom? - -(define (get-path node done) - "Follow NODE.PREV, and return as an ascending list of pages. DONE -is what have collected so far, and has ascending page numbers." - (if (page? node) - (get-path (page-prev node) (cons node done)) - done)) - -(define (combine-penalties force user best-paths - inter-system-space force-equalization-factor) - (let* ((prev-force (if (null? best-paths) - 0.0 - (page-force (car best-paths)))) - (prev-penalty (if (null? best-paths) - 0.0 - (page-penalty (car best-paths)))) - (relative-force (/ force inter-system-space)) - (abs-relative-force (abs relative-force))) - (+ (* abs-relative-force (+ abs-relative-force 1)) - prev-penalty - (* force-equalization-factor (/ (abs (- prev-force force)) - inter-system-space)) - user))) - -(define (walk-paths done-lines best-paths current-lines is-last-bookpart - is-bookpart-last-page current-best paper-book page-alist) - "Return the best optimal-page-break-node that contains -CURRENT-LINES. DONE-LINES.reversed ++ CURRENT-LINES is a consecutive -ascending range of lines, and BEST-PATHS contains the optimal breaks -corresponding to DONE-LINES. - -CURRENT-BEST is the best result sofar, or #f." - (let* ((paper (ly:paper-book-paper paper-book)) - (this-page (make-page - paper-book - 'is-last-bookpart is-last-bookpart - 'is-bookpart-last-page is-bookpart-last-page - 'page-number (if (null? best-paths) - (ly:output-def-lookup paper 'first-page-number) - (1+ (page-page-number (first best-paths)))))) - (ragged-all (eq? #t (ly:output-def-lookup paper 'ragged-bottom))) - (ragged-last (eq? #t (ly:output-def-lookup paper 'ragged-last-bottom))) - (ragged (or ragged-all (and ragged-last is-bookpart-last-page))) - (space-to-fill (page-maximum-space-to-fill this-page current-lines paper)) - (vertical-spacing (space-systems space-to-fill current-lines ragged paper #f)) - (satisfied-constraints (car vertical-spacing)) - (force (if satisfied-constraints - (if (and is-bookpart-last-page ragged-last) - 0.0 - satisfied-constraints) - 10000)) - (positions (cdr vertical-spacing)) - (get-break-penalty (lambda (sys) - (ly:prob-property sys 'penalty 0.0))) - (user-nobreak-penalties (- (apply + (filter negative? - (map get-break-penalty - (cdr current-lines)))))) - (user-penalty (+ (max (get-break-penalty (car current-lines)) 0.0) - user-nobreak-penalties)) - (total-penalty (combine-penalties - force user-penalty best-paths - (ly:output-def-lookup paper 'between-system-space) - (ly:output-def-lookup paper 'verticalequalizationfactor 0.3))) - (new-best (if (or (not current-best) - (and satisfied-constraints - (< total-penalty (page-penalty current-best)))) - (begin - (map (lambda (x) - (page-set-property! this-page - (car x) - (cdr x))) - (list (cons 'prev (if (null? best-paths) - #f - (car best-paths))) - (cons 'lines current-lines) - (cons 'force force) - (cons 'configuration positions) - (cons 'penalty total-penalty))) - this-page) - current-best))) - (if #f ;; debug - (display - (list - "\nuser pen " user-penalty - "\nsatisfied-constraints" satisfied-constraints - "\nlast? " is-bookpart-last-page "ragged?" ragged - "\nis-better " is-better " total-penalty " total-penalty "\n" - "\nconfig " positions - "\nforce " force - "\nlines: " current-lines "\n"))) - (if #f ; debug - (display (list "\nnew-best is " (page-lines new-best) - "\ncontinuation of " - (if (null? best-paths) - "start" - (page-lines (car best-paths)))))) - (if (and (pair? done-lines) - ;; if this page is too full, adding another line won't help - satisfied-constraints) - (walk-paths (cdr done-lines) (cdr best-paths) - (cons (car done-lines) current-lines) - is-last-bookpart is-bookpart-last-page new-best - paper-book page-alist) - new-best))) - -(define (walk-lines done best-paths todo paper-book page-alist is-last-bookpart) - "Return the best page breaking as a single -page node for optimally breaking TODO ++ -DONE.reversed. BEST-PATHS is a list of break nodes corresponding to -DONE." - (if (null? todo) - (car best-paths) - (let* ((this-line (car todo)) - (is-bookpart-last-page (null? (cdr todo))) - (next (walk-paths done best-paths (list this-line) is-last-bookpart - is-bookpart-last-page #f paper-book page-alist))) - (walk-lines (cons this-line done) - (cons next best-paths) - (cdr todo) - paper-book - page-alist - is-last-bookpart)))) - -(define-public (optimal-page-breaks paper-book) - "Return pages as a list starting with 1st page. Each page is a 'page Prob." - (let* ((paper (ly:paper-book-paper paper-book)) - (lines (ly:paper-book-systems paper-book)) - (page-alist (layout->page-init paper)) - (force-equalization-factor (ly:output-def-lookup - paper 'verticalequalizationfactor 0.3)) - (is-last-bookpart (ly:output-def-lookup paper 'is-last-bookpart))) - (ly:message (_ "Calculating page breaks...")) - (let* ((best-break-node (walk-lines '() '() lines paper-book page-alist is-last-bookpart)) - (break-nodes (get-path best-break-node '()))) - (if #f; (ly:get-option 'verbose) - (begin - (display (list - "\nbreaks: " (map (lambda (node) - (ly:prob-property (car (page-lines node)) - 'number)) - break-nodes) - "\nsystems " (map page-lines break-nodes) - "\npenalties " (map page-penalty break-nodes) - "\nconfigs " (map page-configuration break-nodes))))) - ;; construct page stencils. - (for-each page-stencil break-nodes) - break-nodes))) diff --git a/scm/layout-slur.scm b/scm/layout-slur.scm index e153c0cf79..8626e01146 100644 --- a/scm/layout-slur.scm +++ b/scm/layout-slur.scm @@ -1,8 +1,19 @@ -;;;; slur.scm -- Slur scheme stuff +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2011 Jan Nieuwenhuizen +;;;; +;;;; 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 . ; ; this is put into the slur-details property of Slur and PhrasingSlur (define default-slur-details diff --git a/scm/lily-library.scm b/scm/lily-library.scm index b70af4ec53..0e2c810da9 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -1,10 +1,23 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; lily-library.scm -- utilities -;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . + +; for take, drop, take-while, list-index, and find-tail: +(use-modules (srfi srfi-1)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; constants. @@ -44,11 +57,24 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; moments -(define-public ZERO-MOMENT (ly:make-moment 0 1)) +(define-public ZERO-MOMENT (ly:make-moment 0 1)) (define-public (moment-min a b) (if (ly:momentmoment fraction) + (if (null? fraction) + ZERO-MOMENT + (ly:make-moment (car fraction) (cdr fraction)))) + +(define-public (moment->fraction moment) + (cons (ly:moment-main-numerator moment) + (ly:moment-main-denominator moment))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; arithmetic (define-public (average x . lst) @@ -56,9 +82,9 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; parser <-> output hooks. - + (define-public (collect-bookpart-for-book parser book-part) - "Toplevel book-part handler" + "Toplevel book-part handler." (define (add-bookpart book-part) (ly:parser-define! parser 'toplevel-bookparts @@ -105,49 +131,83 @@ (score-handler (scorify-music music parser))))) (define-public (collect-music-for-book parser music) - "Top-level music handler" + "Top-level music handler." (collect-music-aux (lambda (score) (collect-scores-for-book parser score)) parser music)) (define-public (collect-book-music-for-book parser book music) - "Book music handler" + "Book music handler." (collect-music-aux (lambda (score) (ly:book-add-score! book score)) parser music)) (define-public (scorify-music music parser) - "Preprocess MUSIC." - + "Preprocess @var{music}." + (for-each (lambda (func) (set! music (func music parser))) toplevel-music-functions) (ly:make-score music)) -(define (print-book-with parser book process-procedure) - (let* - ((paper (ly:parser-lookup parser '$defaultpaper)) - (layout (ly:parser-lookup parser '$defaultlayout)) - (count (ly:parser-lookup parser 'output-count)) - (base (ly:parser-output-name parser)) - (output-suffix (ly:parser-lookup parser 'output-suffix)) ) +(define (get-current-filename parser) + "return any suffix value for output filename allowing for settings by +calls to bookOutputName function" + (let ((book-filename (ly:parser-lookup parser 'book-filename))) + (if (not book-filename) + (ly:parser-output-name parser) + book-filename))) + +(define (get-current-suffix parser) + "return any suffix value for output filename allowing for settings by calls to +bookoutput function" + (let ((book-output-suffix (ly:parser-lookup parser 'book-output-suffix))) + (if (not (string? book-output-suffix)) + (ly:parser-lookup parser 'output-suffix) + book-output-suffix))) + +(define-public current-outfile-name #f) ; for use by regression tests + +(define (get-outfile-name parser) + "return current filename for generating backend output files" + ;; user can now override the base file name, so we have to use + ;; the file-name concatenated with any potential output-suffix value + ;; 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)) + (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! base (format "~a-~a" base (string-regexp-substitute - "[^a-zA-Z0-9-]" "_" output-suffix)))) + (set! result + (format "~a-~a" + result + (string-regexp-substitute + "[^-[:alnum:]]" + "_" + output-suffix)))) + + ;; assoc-get call will always have returned a number + (if (> output-count 0) + (set! result (format #f "~a-~a" result output-count))) - ;; must be careful: output-count is under user control. - (if (not (integer? count)) - (set! count 0)) + (ly:parser-define! + parser 'counter-alist + (assoc-set! counter-alist alist-key (1+ output-count))) + (set! current-outfile-name result) + result)) - (if (> count 0) - (set! base (format #f "~a-~a" base count))) - (ly:parser-define! parser 'output-count (1+ count)) - (process-procedure book paper layout base) - )) +(define (print-book-with parser book process-procedure) + (let* ((paper (ly:parser-lookup parser '$defaultpaper)) + (layout (ly:parser-lookup parser '$defaultlayout)) + (outfile-name (get-outfile-name parser))) + (process-procedure book paper layout outfile-name))) (define-public (print-book-with-defaults parser book) (print-book-with parser book ly:book-process)) @@ -155,11 +215,35 @@ (define-public (print-book-with-defaults-as-systems parser book) (print-book-with parser book ly:book-process-to-systems)) +;; Add a score to the current bookpart, book or toplevel +(define-public (add-score parser score) + (cond + ((ly:parser-lookup parser '$current-bookpart) + ((ly:parser-lookup parser 'bookpart-score-handler) + (ly:parser-lookup parser '$current-bookpart) score)) + ((ly:parser-lookup parser '$current-book) + ((ly:parser-lookup parser 'book-score-handler) + (ly:parser-lookup parser '$current-book) score)) + (else + ((ly:parser-lookup parser 'toplevel-score-handler) parser score)))) + +(define-public (add-text parser text) + (add-score parser (list text))) + +(define-public (add-music parser music) + (collect-music-aux (lambda (score) + (add-score parser score)) + parser + music)) + + ;;;;;;;;;;;;;;;; ;; alist (define-public assoc-get ly:assoc-get) +(define-public chain-assoc-get ly:chain-assoc-get) + (define-public (uniqued-alist alist acc) (if (null? alist) acc (if (assoc (caar alist) acc) @@ -170,21 +254,6 @@ (stringstring (car x)) (symbol->string (car y)))) -(define-public (chain-assoc-get x alist-list . default) - "Return ALIST entry for X. Return DEFAULT (optional, else #f) if not -found." - - (define (helper x alist-list default) - (if (null? alist-list) - default - (let* ((handle (assoc x (car alist-list)))) - (if (pair? handle) - (cdr handle) - (helper x (cdr alist-list) default))))) - - (helper x alist-list - (if (pair? default) (car default) #f))) - (define (map-alist-vals func list) "map FUNC over the vals of LIST, leaving the keys." (if (null? list) @@ -193,21 +262,22 @@ found." (map-alist-vals func (cdr list))))) (define (map-alist-keys func list) - "map FUNC over the keys of an alist LIST, leaving the vals. " + "map FUNC over the keys of an alist LIST, leaving the vals." (if (null? list) '() (cons (cons (func (caar list)) (cdar list)) (map-alist-keys func (cdr list))))) (define-public (first-member members lst) - "Return first successful MEMBER of member from MEMBERS in LST." + "Return first successful member (of member) from @var{members} in +@var{lst}." (if (null? members) #f (let ((m (member (car members) lst))) (if m m (first-member (cdr members) lst))))) (define-public (first-assoc keys lst) - "Return first successful ASSOC of key from KEYS in LST." + "Return first successful assoc of key from @var{keys} in @var{lst}." (if (null? keys) #f (let ((k (assoc (car keys) lst))) @@ -220,6 +290,40 @@ found." (cons (cdar alist) (flatten-alist (cdr alist)))))) +(define (assoc-remove key alist) + "Remove key (and its corresponding value) from an alist. + Different than assoc-remove! because it is non-destructive." + (define (assoc-crawler key l r) + (if (null? r) + l + (if (equal? (caar r) key) + (append l (cdr r)) + (assoc-crawler key (append l `(,(car r))) (cdr r))))) + (assoc-crawler key '() alist)) + +(define-public (map-selected-alist-keys function keys alist) + "Return @var{alist} with @var{function} applied to all of the values +in list @var{keys}. + +For example: +@example +@code{guile> (map-selected-alist-keys - '(a b) '((a . 1) (b . -2) (c . 3) (d . 4)))} +@code{((a . -1) (b . 2) (c . 3) (d . 4)} +@end example" + (define (map-selected-alist-keys-helper function key alist) + (map + (lambda (pair) + (if (equal? key (car pair)) + (cons key (function (cdr pair))) + pair)) + alist)) + (if (null? keys) + alist + (map-selected-alist-keys + function + (cdr keys) + (map-selected-alist-keys-helper function (car keys) alist)))) + ;;;;;;;;;;;;;;;; ;; vector @@ -236,7 +340,7 @@ found." (hash-fold (lambda (k v acc) (acons k v acc)) '() t)) -;; todo: code dup with C++. +;; todo: code dup with C++. (define-safe-public (alist->hash-table lst) "Convert alist to table" (let ((m (make-hash-table (length lst)))) @@ -249,7 +353,7 @@ found." (define (functional-or . rest) (if (pair? rest) (or (car rest) - (apply functional-and (cdr rest))) + (apply functional-or (cdr rest))) #f)) (define (functional-and . rest) @@ -260,14 +364,14 @@ found." (define (split-list lst n) "Split LST in N equal sized parts" - + (define (helper todo acc-vector k) (if (null? todo) acc-vector (begin (if (< k 0) (set! k (+ n k))) - + (vector-set! acc-vector k (cons (car todo) (vector-ref acc-vector k))) (helper (cdr todo) acc-vector (1- k))))) @@ -284,7 +388,8 @@ found." (helper lst 0)) (define-public (count-list lst) - "Given lst (E1 E2 .. ) return ((E1 . 1) (E2 . 2) ... ) " + "Given @var{lst} as @code{(E1 E2 .. )}, return +@code{((E1 . 1) (E2 . 2) ... )}." (define (helper l acc count) (if (pair? l) @@ -293,9 +398,9 @@ found." (reverse (helper lst '() 1))) - + (define-public (list-join lst intermediate) - "put INTERMEDIATE between all elts of LST." + "Put @var{intermediate} between all elts of @var{lst}." (fold-right (lambda (elem prev) @@ -309,23 +414,22 @@ found." (lambda (x) x) (map proc lst))) - -(define (flatten-list lst) - "Unnest LST" - (if (null? lst) - '() - (if (pair? (car lst)) - (append (flatten-list (car lst)) (flatten-list (cdr lst))) - (cons (car lst) (flatten-list (cdr lst)))))) +(define-public (flatten-list x) + "Unnest list." + (cond ((null? x) '()) + ((not (pair? x)) (list x)) + (else (append (flatten-list (car x)) + (flatten-list (cdr x)))))) (define (list-minus a b) "Return list of elements in A that are not in B." (lset-difference eq? a b)) (define-public (uniq-list lst) - "Uniq LST, assuming that it is sorted. Uses equal? for comparisons." + "Uniq @var{lst}, assuming that it is sorted. Uses @code{equal?} +for comparisons." - (reverse! + (reverse! (fold (lambda (x acc) (if (null? acc) (list x) @@ -334,57 +438,36 @@ found." (cons x acc)))) '() lst) '())) -(define (split-at-predicate predicate lst) - "Split LST = (a_1 a_2 ... a_k b_1 ... b_k) - into L1 = (a_1 ... a_k ) and L2 =(b_1 .. b_k) - Such that (PREDICATE a_i a_{i+1}) and not (PREDICATE a_k b_1). - L1 is copied, L2 not. - - (split-at-predicate (lambda (x y) (= (- y x) 2)) '(1 3 5 9 11) (cons '() '()))" - - ;; " Emacs is broken - - (define (inner-split predicate lst acc) - (cond - ((null? lst) acc) - ((null? (cdr lst)) - (set-car! acc (cons (car lst) (car acc))) - acc) - ((predicate (car lst) (cadr lst)) - (set-car! acc (cons (car lst) (car acc))) - (inner-split predicate (cdr lst) acc)) - (else - (set-car! acc (cons (car lst) (car acc))) - (set-cdr! acc (cdr lst)) - acc))) - - (let* ((c (cons '() '()))) - (inner-split predicate lst c) - (set-car! c (reverse! (car c))) - c)) - -(define-public (split-list-by-separator lst sep?) - "(display (split-list-by-separator '(a b c / d e f / g) (lambda (x) (equal? x '/)))) - => - ((a b c) (d e f) (g)) - " - ;; " Emacs is broken - (define (split-one sep? lst acc) - "Split off the first parts before separator and return both parts." - (if (null? lst) - (cons acc '()) - (if (sep? (car lst)) - (cons acc (cdr lst)) - (split-one sep? (cdr lst) (cons (car lst) acc))))) - - (if (null? lst) - '() - (let* ((c (split-one sep? lst '()))) - (cons (reverse! (car c) '()) (split-list-by-separator (cdr c) sep?))))) +(define (split-at-predicate pred lst) + "Split LST into two lists at the first element that returns #f for + (PRED previous_element element). Return the two parts as a pair. + Example: (split-at-predicate < '(1 2 3 2 1)) ==> ((1 2 3) . (2 1))" + (if (null? lst) + (list lst) + (let ((i (list-index (lambda (x y) (not (pred x y))) + lst + (cdr lst)))) + (if i + (cons (take lst (1+ i)) (drop lst (1+ i))) + (list lst))))) + +(define-public (split-list-by-separator lst pred) + "Split @var{lst} at each element that satisfies @var{pred}, and return +the parts (with the separators removed) as a list of lists. For example, +executing @samp{(split-list-by-separator '(a 0 b c 1 d) number?)} returns +@samp{((a) (b c) (d))}." + (let loop ((result '()) (lst lst)) + (if (and lst (not (null? lst))) + (loop + (append result + (list (take-while (lambda (x) (not (pred x))) lst))) + (let ((tail (find-tail pred lst))) + (if tail (cdr tail) #f))) + result))) (define-public (offset-add a b) (cons (+ (car a) (car b)) - (+ (cdr a) (cdr b)))) + (+ (cdr a) (cdr b)))) (define-public (offset-flip-y o) (cons (car o) (- (cdr o)))) @@ -400,66 +483,61 @@ found." (ly:list->offsets accum (cddr coords))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; numbers - -(if (not (defined? 'nan?)) ;; guile 1.6 compat - (define-public (nan? x) (not (or (< 0.0 x) - (> 0.0 x) - (= 0.0 x))))) +;; intervals -(if (not (defined? 'inf?)) - (define-public (inf? x) (= (/ 1.0 x) 0.0))) +(define-public empty-interval '(+inf.0 . -inf.0)) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; intervals +(define-public (symmetric-interval expr) + (cons (- expr) expr)) (define-public (interval-length x) - "Length of the number-pair X, when an interval" + "Length of the number-pair @var{x}, if an interval." (max 0 (- (cdr x) (car x)))) -(define-public interval-start car) (define-public (ordered-cons a b) (cons (min a b) (max a b))) -(define-public interval-end cdr) - (define-public (interval-bound interval dir) ((if (= dir RIGHT) cdr car) interval)) (define-public (interval-index interval dir) - "Interpolate INTERVAL between between left (DIR=-1) and right (DIR=+1)" - + "Interpolate @var{interval} between between left (@var{dir}=-1) and +right (@var{dir}=+1)." + (* (+ (interval-start interval) (interval-end interval) (* dir (- (interval-end interval) (interval-start interval)))) 0.5)) (define-public (interval-center x) - "Center the number-pair X, when an interval" + "Center the number-pair @var{x}, if an interval." (if (interval-empty? x) 0.0 (/ (+ (car x) (cdr x)) 2))) (define-public interval-start car) + (define-public interval-end cdr) -(define-public (interval-translate iv amount) - (cons (+ amount (car iv)) - (+ amount (cdr iv)))) (define (other-axis a) (remainder (+ a 1) 2)) (define-public (interval-widen iv amount) - (cons (- (car iv) amount) - (+ (cdr iv) amount))) - + (cons (- (car iv) amount) + (+ (cdr iv) amount))) (define-public (interval-empty? iv) (> (car iv) (cdr iv))) (define-public (interval-union i1 i2) - (cons (min (car i1) (car i2)) - (max (cdr i1) (cdr i2)))) + (cons + (min (car i1) (car i2)) + (max (cdr i1) (cdr i2)))) + +(define-public (interval-intersection i1 i2) + (cons + (max (car i1) (car i2)) + (min (cdr i1) (cdr i2)))) (define-public (interval-sane? i) (not (or (nan? (car i)) @@ -468,6 +546,108 @@ found." (inf? (cdr i)) (> (car i) (cdr i))))) +(define-public (add-point interval p) + (cons (min (interval-start interval) p) + (max (interval-end interval) p))) + +(define-public (reverse-interval iv) + (cons (cdr iv) (car iv))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; coordinates + +(define coord-x car) +(define coord-y cdr) + +(define (coord-operation operator operand coordinate) + (if (pair? operand) + (cons (operator (coord-x operand) (coord-x coordinate)) + (operator (coord-y operand) (coord-y coordinate))) + (cons (operator operand (coord-x coordinate)) + (operator operand (coord-y coordinate))))) + +(define (coord-apply function coordinate) + (if (pair? function) + (cons + ((coord-x function) (coord-x coordinate)) + ((coord-y function) (coord-y coordinate))) + (cons + (function (coord-x coordinate)) + (function (coord-y coordinate))))) + +(define-public (coord-translate coordinate amount) + (coord-operation + amount coordinate)) + +(define-public (coord-scale coordinate amount) + (coord-operation * amount coordinate)) + +(define-public (coord-rotate coordinate degrees-in-radians) + (let* + ((coordinate + (cons + (exact->inexact (coord-x coordinate)) + (exact->inexact (coord-y coordinate)))) + (radius + (sqrt + (+ (* (coord-x coordinate) (coord-x coordinate)) + (* (coord-y coordinate) (coord-y coordinate))))) + (angle (angle-0-2pi (atan (coord-y coordinate) (coord-x coordinate))))) + (cons + (* radius (cos (+ angle degrees-in-radians))) + (* radius (sin (+ angle degrees-in-radians)))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; trig + +(define-public PI (* 4 (atan 1))) + +(define-public TWO-PI (* 2 PI)) + +(define-public PI-OVER-TWO (/ PI 2)) + +(define-public THREE-PI-OVER-TWO (* 3 PI-OVER-TWO)) + +(define-public (cyclic-base-value value cycle) + "Take @var{value} and modulo-maps it between 0 and base @var{cycle}." + (if (< value 0) + (cyclic-base-value (+ value cycle) cycle) + (if (>= value cycle) + (cyclic-base-value (- value cycle) cycle) + value))) + +(define-public (angle-0-2pi angle) + "Take @var{angle} (in radians) and maps it between 0 and 2pi." + (cyclic-base-value angle TWO-PI)) + +(define-public (angle-0-360 angle) + "Take @var{angle} (in degrees) and maps it between 0 and 360 degrees." + (cyclic-base-value angle 360.0)) + +(define-public PI-OVER-180 (/ PI 180)) + +(define-public (degrees->radians angle-degrees) + "Convert the given angle from degrees to radians." + (* angle-degrees PI-OVER-180)) + +(define-public (ellipse-radius x-radius y-radius angle) + (/ + (* x-radius y-radius) + (sqrt + (+ (* (expt y-radius 2) + (* (cos angle) (cos angle))) + (* (expt x-radius 2) + (* (sin angle) (sin angle))))))) + +(define-public (polar->rectangular radius angle-in-degrees) + "Return polar coordinates (@var{radius}, @var{angle-in-degrees}) +as rectangular coordinates @ode{(x-length . y-length)}." + + (let ((complex (make-polar + radius + (degrees->radians angle-in-degrees)))) + (cons + (real-part complex) + (imag-part complex)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; string @@ -476,10 +656,10 @@ found." (equal? suffix (substring s (max 0 (- (string-length s) (string-length suffix))) (string-length s)))) - + (define-public (string-startswith s prefix) (equal? prefix (substring s 0 (min (string-length s) (string-length prefix))))) - + (define-public (string-encode-integer i) (cond ((= i 0) "o") @@ -506,14 +686,15 @@ found." (ly:number->string (cdr c)))) (define-public (dir-basename file . rest) - "Strip suffixes in REST, but leave directory component for FILE." + "Strip suffixes in @var{rest}, but leave directory component for +@var{file}." (define (inverse-basename x y) (basename y x)) (simple-format #f "~a/~a" (dirname file) (fold inverse-basename file rest))) (define-public (write-me message x) - "Return X. Display MESSAGE and write X. Handy for debugging, -possibly turned off." + "Return @var{x}. Display @var{message} and write @var{x}. +Handy for debugging, possibly turned off." (display message) (write x) (newline) x) ;; x) @@ -535,7 +716,7 @@ possibly turned off." (cons (f (car x)) (f (cdr x)))) (define-public (list-insert-separator lst between) - "Create new list, inserting BETWEEN between elements of LIST" + "Create new list, inserting @var{between} between elements of @var{lst}." (define (conc x y ) (if (eq? y #f) (list x) @@ -543,7 +724,7 @@ possibly turned off." (fold-right conc #f lst)) (define-public (string-regexp-substitute a b str) - (regexp-substitute/global #f a str 'pre b 'post)) + (regexp-substitute/global #f a str 'pre b 'post)) (define (regexp-split str regex) (define matches '()) @@ -566,25 +747,66 @@ possibly turned off." (reverse matches)) ;;;;;;;;;;;;;;;; -; other +;; other + (define (sign x) (if (= x 0) 0 (if (< x 0) -1 1))) +(define-public (binary-search start end getter target-val) + (_i "Find the index between @var{start} and @var{end} (an integer) +which produces the closest match to @var{target-val} if +applied to function @var{getter}.") + (if (<= end start) + start + (let* ((compare (quotient (+ start end) 2)) + (get-val (getter compare))) + (cond + ((< target-val get-val) + (set! end (1- compare))) + ((< get-val target-val) + (set! start (1+ compare)))) + (binary-search start end getter target-val)))) (define-public (car< a b) (< (car a) (car b))) +(define-public (car<= a b) + (<= (car a) (car b))) + (define-public (symbolstring lst) (symbol->string r))) (define-public (symbol-keystring (car lst)) (symbol->string (car r)))) +(define-public (eval-carefully symbol module . default) + "Check whether all symbols in expr @var{symbol} are reachable +in module @var{module}. In that case evaluate, otherwise +print a warning and set an optional @var{default}." + (let* ((unavailable? (lambda (sym) + (not (module-defined? module sym)))) + (sym-unavailable (if (pair? symbol) + (filter + unavailable? + (filter symbol? (flatten-list symbol))) + (if (unavailable? symbol) + #t + '())))) + (if (null? sym-unavailable) + (eval symbol module) + (let* ((def (and (pair? default) (car default)))) + (ly:programming-error + "cannot evaluate ~S in module ~S, setting to ~S" + (object->string symbol) + (object->string module) + (object->string def)) + def)))) + +;; +;; don't confuse users with # syntax. ;; -;; don't confuse users with # syntax. -;; (define-public (scm->string val) (if (and (procedure? val) (symbol? (procedure-name val))) @@ -614,17 +836,11 @@ possibly turned off." ;;; FONT may be font smob, or pango font string... (define-public (font-name-style font) - ;; FIXME: ughr, (ly:font-name) sometimes also has Style appended. + (if (string? font) + (string-downcase font) (let* ((font-name (ly:font-name font)) - (full-name (if font-name font-name (ly:font-file-name font))) - (name-style (string-split full-name #\-))) - ;; FIXME: ughr, barf: feta-alphabet is actually emmentaler - (if (string-prefix? "feta-alphabet" full-name) - (list "emmentaler" - (substring full-name (string-length "feta-alphabet"))) - (if (not (null? (cdr name-style))) - name-style - (append name-style '("Regular")))))) + (full-name (if font-name font-name (ly:font-file-name font)))) + (string-downcase full-name)))) (define-public (modified-font-metric-font-scaling font) (let* ((designsize (ly:font-design-size font)) @@ -637,7 +853,7 @@ possibly turned off." (define-public (version-not-seen-message input-file-name) (ly:message - "~a:0: ~a ~a" + "~a:0: ~a ~a" input-file-name (_ "warning:") (format #f @@ -646,7 +862,7 @@ possibly turned off." (define-public (old-relative-not-used-message input-file-name) (ly:message - "~a:0: ~a ~a" + "~a:0: ~a ~a" input-file-name (_ "warning:") (_ "old relative compatibility not used"))) diff --git a/scm/lily-sort.scm b/scm/lily-sort.scm new file mode 100644 index 0000000000..ac239a7f50 --- /dev/null +++ b/scm/lily-sort.scm @@ -0,0 +1,116 @@ +;;;; lily-sort.scm -- improved sorting of symbols, strings, and alists. +;;;; +;;;; source file of the GNU LilyPond music typesetter +;;;; +;;;; Copyright 2009--2011 Mark Polesky + + +;; This file implements a LilyPond-specific character-sorting algorithm +;; that can be used to sort lists, alists, etc. consistently and +;; predictably throughout the source code. The primary advantage of this +;; algorithm is that lists are sorted in a more intuitive way, which may +;; allow users to find items faster in the documentation. +;; +;; As an example, a user, looking in the documentation to see if there's +;; a function called "ly:grob?", might assume that there isn't one, +;; since it doesn't appear before "ly:grob-alist-chain" (using the +;; default sort). +;; +;; This happens because "-" comes before "?" in the default sort order. +;; But since "?" is more likely to come at the end of a scheme symbol, a +;; more intuitive sort can be achieved by reversing that order. +;; +;; Similarly, non-alphanumeric characters can be ranked in terms of how +;; likely one will be found closer to the end of a symbol. For example, +;; ":" is stronger separator than "-", as can be seen here: +;; +;; "ly:staff-symbol::print" +;; "ly:staff-symbol-referencer::callback" +;; +;; Intuitively, "staff-symbol-referencer" ought to come after +;; "staff-symbol", but since "-" comes before ":" in the default sort +;; order, these symbols are by default listed in the opposite order. +;; +;; Thus the algorithm implemented here ranks the following nine +;; characters (starting with the space character) in order from +;; most-to-least likely to terminate a symbol: " !?<=>:-_". These nine +;; characters are in effect "extracted" from the default order and then +;; "prepended" to it so that they now come first. This is achieved with +;; the function "ly:char-generic-list " !?<=>:-_")) + (mem-a (member a init-list)) + (mem-b (member b init-list))) + (cond ((and mem-a mem-b) (< (length mem-b) (length mem-a))) + (mem-a #t) + (mem-b #f) + (else ((if ci char-cilist str0)) (b (string->list str1))) + (cond ((and (null? a) (null? b)) #f) + ((null? a) (cons #f (car b))) + ((null? b) (cons (car a) #f)) + ((not ((if ci char-ci=? char=?) (car a) (car b))) + (cons (car a) (car b))) + (else (find-mismatch (cdr a) (cdr b)))))) + +(define (ly:string-generic-string a) + (symbol->string b))) + +(define (ly:symbol-cistring a) + (symbol->string b))) + +(define (ly:aliststring (car a)) + (symbol->string (car b)))) + +(define (ly:alist-cistring (car a)) + (symbol->string (car b)))) diff --git a/scm/lily.scm b/scm/lily.scm index d62c70bb0f..203a449c8f 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -1,9 +1,20 @@ -;;;; lily.scm -- top-level Scheme stuff +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . ;; Internationalisation: (_i "to be translated") gets an entry in the ;; POT file; (gettext ...) must be invoked explicitly to do the actual @@ -17,7 +28,6 @@ (defmacro-public _i (x) x) (read-enable 'positions) -(debug-enable 'debug) (define-public PLATFORM (string->symbol @@ -38,9 +48,12 @@ "Render at higher resolution (using given factor) and scale down result to prevent jaggies in PNG images.") + (aux-files #t +"Create .tex, .texi, .count files in the +EPS backend.") (backend ps "Select backend. Possible values: 'eps, 'null, -'ps, 'scm, 'svg.") +'ps, 'scm, 'socket, 'svg.") (check-internal-types #f "Check every property assignment for types.") (clip-systems #f @@ -65,7 +78,7 @@ configurations.") "Debug cyclic callback chains.") (debug-skylines #f "Debug skylines.") - (delete-intermediate-files #f + (delete-intermediate-files #t "Delete unusable, intermediate PostScript files.") (dump-profile #f "Dump memory and time information for each file.") @@ -90,6 +103,8 @@ a log file.") "Include book titles in preview images.") (include-eps-fonts #t "Include fonts in separate-system EPS files.") + (include-settings #f +"Include file for global settings, included before the score is processed.") (job-count #f "Process in parallel, using the given number of jobs.") @@ -101,6 +116,9 @@ output to log file `FOO.log'.") "midi") "Set the default file extension for MIDI output file to given string.") + (music-strings-to-paths #f +"Convert text strings to paths when glyphs belong +to a music font.") (old-relative #f "Make \\relative mode for simultaneous music work similar to chord syntax.") @@ -111,7 +129,7 @@ similar to chord syntax.") (pixmap-format "png16m" "Set GhostScript's output format for pixel images.") (preview #f -"Create PNG and EPS preview images also.") +"Create preview images also.") (print-pages #t "Print pages in the normal way.") (protected-scheme-parsing #t @@ -132,26 +150,31 @@ the included file relative to the current file (instead of the root file)") (safe #f "Run in safer mode.") + (separate-log-files #f +"For input files `FILE1.ly', `FILE2.ly', ... +output log data to files `FILE1.log', +`FILE2.log', ...") + (show-available-fonts #f +"List available font names.") (strict-infinity-checking #f "Force a crash on encountering Inf and NaN floating point exceptions.") (strip-output-dir #t "Don't use directories from input files while constructing output file names.") - (separate-log-files #f -"For input files `FILE1.ly', `FILE2.ly', ... -output log data to files `FILE1.log', -`FILE2.log', ...") + (svg-woff #f +"Use woff font files in SVG backend.") (trace-memory-frequency #f "Record Scheme cell usage this many times per second. Dump results to `FILE.stacks' and `FILE.graph'.") (trace-scheme-coverage #f "Record coverage of Scheme files in `FILE.cov'.") - (show-available-fonts #f -"List available font names.") (verbose ,(ly:command-line-verbose?) "Value of the --verbose flag (read-only).") + (warning-as-error #f +"Change all warning and programming_error +messages into errors.") )) ;; Need to do this in the beginning. Other parts of the Scheme @@ -170,13 +193,17 @@ second. Dump results to `FILE.stacks' and (if (defined? 'set-debug-cell-accesses!) (set-debug-cell-accesses! #f)) - ;(set-debug-cell-accesses! 1000) +;;(set-debug-cell-accesses! 1000) + +;;; Boolean thunk - are we integrating Guile V2.0 or higher with LilyPond? +(define-public (guile-v2) + (string>? (version) "1.9.10")) (use-modules (ice-9 regex) (ice-9 safe) (ice-9 format) (ice-9 rdelim) - (ice-9 optargs) + (ice-9 optargs) (oop goops) (srfi srfi-1) (srfi srfi-13) @@ -185,11 +212,32 @@ second. Dump results to `FILE.stacks' and (scm memory-trace) (scm coverage)) +(define-public _ gettext) +;;; There are new modules defined in Guile V2.0 which we need to use. +;; +;; Modules and scheme files loaded by lily.scm use currying +;; in Guile V2 this needs a module which is not present in Guile V1.8 +;; + +(cond + ((guile-v2) + (if (ly:get-option 'verbose) + (ly:message (_ "Using (ice-9 curried-definitions) module\n"))) + (use-modules (ice-9 curried-definitions))) + (else + (if (ly:get-option 'verbose) + (ly:message + (_ "Guile 1.8\n"))))) + +;; TODO add in modules for V1.8.7 deprecated in V2.0 and integrated +;; into Guile base code, like (ice-9 syncase). +;; + (define-public fancy-format format) (define-public (ergonomic-simple-format dest . rest) - "Like ice-9 format, but without the memory consumption." + "Like ice-9's @code{format}, but without the memory consumption." (if (string? dest) (apply simple-format (cons #f (cons dest rest))) (apply simple-format (cons dest rest)))) @@ -219,7 +267,6 @@ second. Dump results to `FILE.stacks' and (ly:get-option 'trace-scheme-coverage)) (begin (ly:set-option 'protected-scheme-parsing #f) - (debug-enable 'debug) (debug-enable 'backtrace) (read-enable 'positions))) @@ -228,11 +275,12 @@ second. Dump results to `FILE.stacks' and (define-public parser #f) +(define music-string-to-path-backends + '(svg)) + +(if (memq (ly:get-option 'backend) music-string-to-path-backends) + (ly:set-option 'music-strings-to-paths #t)) -;; gettext wrapper for guile < 1.7.2 -(if (defined? 'gettext) - (define-public _ gettext) - (define-public _ ly:gettext)) (define-public (ly:load x) (let* ((file-name (%search-load-path x))) @@ -240,7 +288,7 @@ second. Dump results to `FILE.stacks' and (ly:progress "[~A" file-name)) (if (not file-name) (ly:error (_ "cannot find: ~A") x)) - (primitive-load file-name) + (primitive-load-path file-name) ;; to support Guile V2 autocompile (if (ly:get-option 'verbose) (ly:progress "]\n")))) @@ -250,25 +298,17 @@ second. Dump results to `FILE.stacks' and (if (null? (cdr platform)) #f (member (string-downcase (cadr platform)) '("95" "98" "me"))))) -(case PLATFORM - ((windows) - (define native-getcwd - getcwd) - - (define (slashify x) - (if (string-index x #\\) - x - (string-regexp-substitute - "//*" "/" - (string-regexp-substitute "\\\\" "/" x)))) +(define (slashify x) + (if (string-index x #\\) + x + (string-regexp-substitute + "//*" "/" + (string-regexp-substitute "\\\\" "/" x)))) - ;; FIXME: this prints a warning. - (define-public (ly-getcwd) - (slashify (native-getcwd)))) - - (else - (define-public ly-getcwd - getcwd))) +(define-public (ly-getcwd) + (if (eq? PLATFORM 'windows) + (slashify (getcwd)) + (getcwd))) (define-public (is-absolute? file-name) (let ((file-name-length (string-length file-name))) @@ -281,7 +321,22 @@ second. Dump results to `FILE.stacks' and (eq? (string-ref file-name 2) #\/)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; If necessary, emulate Guile V2 module_export_all! for Guile V1.8.n +(cond-expand + ((not guile-v2) + (define (module-export-all! mod) + (define (fresh-interface!) + (let ((iface (make-module))) + (set-module-name! iface (module-name mod)) + ;; for guile 2: (set-module-version! iface (module-version mod)) + (set-module-kind! iface 'interface) + (set-module-public-interface! mod iface) + iface)) + (let ((iface (or (module-public-interface mod) + (fresh-interface!)))) + (set-module-obarray! iface (module-obarray mod)))))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (type-check-list location signature arguments) "Typecheck a list of arguments against a list of type predicates. Print a message at LOCATION if any predicate failed." @@ -303,16 +358,6 @@ Print a message at LOCATION if any predicate failed." (recursion-helper (cdr signature) (cdr arguments) (1+ count))))) (recursion-helper signature arguments 1)) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; output - -;; (define-public (output-framework) (write "hello\n")) - -(define output-ps-module - (make-module 1021 (list (resolve-interface '(scm output-ps))))) - -(define-public (ps-output-expression expr port) - (display (eval expr output-ps-module) port)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Safe definitions utility @@ -356,7 +401,9 @@ LilyPond safe mode. The syntax is the same as `define*-public'." '("lily-library.scm" "file-cache.scm" "define-event-classes.scm" + "define-music-callbacks.scm" "define-music-types.scm" + "define-note-names.scm" "output-lib.scm" "c++.scm" "chord-ignatzek-names.scm" @@ -364,17 +411,22 @@ LilyPond safe mode. The syntax is the same as `define*-public'." "chord-generic-names.scm" "stencil.scm" "markup.scm" + "modal-transforms.scm" "music-functions.scm" "part-combiner.scm" "autochange.scm" "define-music-properties.scm" + "time-signature-settings.scm" "auto-beam.scm" - "chord-name.scm" - + "bezier-tools.scm" "parser-ly-from-scheme.scm" "ly-syntax-constructors.scm" "define-context-properties.scm" + ;; guile 1.9 wants markups defined before referenced + "define-markup-commands.scm" + + "chord-name.scm" "translation-functions.scm" "script.scm" "midi.scm" @@ -386,9 +438,11 @@ LilyPond safe mode. The syntax is the same as `define*-public'." "flag-styles.scm" "fret-diagrams.scm" + "tablature.scm" "harp-pedals.scm" + "define-woodwind-diagrams.scm" + "display-woodwind-diagrams.scm" "predefined-fretboards.scm" - "define-markup-commands.scm" "define-grob-properties.scm" "define-grobs.scm" "define-grob-interfaces.scm" @@ -404,42 +458,120 @@ LilyPond safe mode. The syntax is the same as `define*-public'." (for-each ly:load init-scheme-files) +(define-public r5rs-primary-predicates + `((,boolean? . "boolean") + (,char? . "character") + (,number? . "number") + (,pair? . "pair") + (,port? . "port") + (,procedure? . "procedure") + (,string? . "string") + (,symbol? . "symbol") + (,vector? . "vector"))) + +(define-public r5rs-secondary-predicates + `((,char-alphabetic? . "alphabetic character") + (,char-lower-case? . "lower-case character") + (,char-numeric? . "numeric character") + (,char-upper-case? . "upper-case character") + (,char-whitespace? . "whitespace character") + + (,complex? . "complex number") + (,even? . "even number") + (,exact? . "exact number") + (,inexact? . "inexact number") + (,integer? . "integer") + (,negative? . "negative number") + (,odd? . "odd number") + (,positive? . "positive number") + (,rational? . "rational number") + (,real? . "real number") + (,zero? . "zero") + + (,list? . "list") + (,null? . "null") + + (,input-port? . "input port") + (,output-port? . "output port") + + ;; would this ever be used? + (,eof-object? . "end-of-file object") + )) + +(define-public guile-predicates + `((,hash-table? . "hash table") + )) + +(define-public lilypond-scheme-predicates + `((,boolean-or-symbol? . "boolean or symbol") + (,color? . "color") + (,cheap-list? . "list") + (,grob-list? . "list of grobs") + ;; this is built on cheap-list + (,list-or-symbol? . "list or symbol") + (,markup? . "markup") + (,markup-command-list? . "markup command list") + (,markup-list? . "markup list") + (,moment-pair? . "pair of moment objects") + (,number-or-grob? . "number or grob") + (,number-or-pair? . "number or pair") + (,number-or-string? . "number or string") + (,number-pair? . "pair of numbers") + (,rhythmic-location? . "rhythmic location") + (,scheme? . "any type") + (,string-or-pair? . "string or pair") + (,string-or-symbol? . "string or symbol") + )) + +(define-public lilypond-exported-predicates + `((,ly:box? . "box") + (,ly:context? . "context") + (,ly:dimension? . "dimension, in staff space") + (,ly:dir? . "direction") + (,ly:dispatcher? . "dispatcher") + (,ly:duration? . "duration") + (,ly:font-metric? . "font metric") + (,ly:grob? . "graphical (layout) object") + (,ly:grob-array? . "array of grobs") + (,ly:input-location? . "input location") + (,ly:item? . "item") + (,ly:iterator? . "iterator") + (,ly:lily-lexer? . "lily-lexer") + (,ly:lily-parser? . "lily-parser") + (,ly:listener? . "listener") + (,ly:moment? . "moment") + (,ly:music? . "music") + (,ly:music-function? . "music function") + (,ly:music-list? . "list of music objects") + (,ly:music-output? . "music output") + (,ly:otf-font? . "OpenType font") + (,ly:output-def? . "output definition") + (,ly:page-marker? . "page marker") + (,ly:pango-font? . "pango font") + (,ly:paper-book? . "paper book") + (,ly:paper-system? . "paper-system Prob") + (,ly:pitch? . "pitch") + (,ly:prob? . "property object") + (,ly:score? . "score") + (,ly:simple-closure? . "simple closure") + (,ly:skyline? . "skyline") + (,ly:skyline-pair? . "pair of skylines") + (,ly:source-file? . "source file") + (,ly:spanner? . "spanner") + (,ly:stencil? . "stencil") + (,ly:stream-event? . "stream event") + (,ly:translator? . "translator") + (,ly:translator-group? . "translator group") + )) + + (set! type-p-name-alist - `((,boolean-or-symbol? . "boolean or symbol") - (,boolean? . "boolean") - (,char? . "char") - (,grob-list? . "list of grobs") - (,hash-table? . "hash table") - (,input-port? . "input port") - (,integer? . "integer") - (,list? . "list") - (,ly:context? . "context") - (,ly:dimension? . "dimension, in staff space") - (,ly:dir? . "direction") - (,ly:duration? . "duration") - (,ly:grob? . "layout object") - (,ly:input-location? . "input location") - (,ly:moment? . "moment") - (,ly:music? . "music") - (,ly:pitch? . "pitch") - (,ly:translator? . "translator") - (,ly:font-metric? . "font metric") - (,ly:simple-closure? . "simple closure") - (,markup-list? . "list of markups") - (,markup? . "markup") - (,ly:music-list? . "list of music") - (,number-or-grob? . "number or grob") - (,number-or-string? . "number or string") - (,number-pair? . "pair of numbers") - (,number? . "number") - (,output-port? . "output port") - (,pair? . "pair") - (,procedure? . "procedure") - (,rhythmic-location? . "rhythmic location") - (,scheme? . "any type") - (,string? . "string") - (,symbol? . "symbol") - (,vector? . "vector"))) + (append r5rs-primary-predicates + r5rs-secondary-predicates + guile-predicates + lilypond-scheme-predicates + lilypond-exported-predicates)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; timing @@ -449,8 +581,8 @@ LilyPond safe mode. The syntax is the same as `define*-public'." (stats (gc-stats))) (list (- (+ (tms:cutime t) (tms:utime t)) - (ly:assoc-get 'gc-time-taken stats)) - (ly:assoc-get 'total-cells-allocated stats 0)))) + (assoc-get 'gc-time-taken stats)) + (assoc-get 'total-cells-allocated stats 0)))) (define (dump-profile base last this) (let* ((outname (format "~a.profile" (dir-basename base ".ly"))) @@ -531,10 +663,8 @@ LilyPond safe mode. The syntax is the same as `define*-public'." (format "~a ~a ~a\n" gc-protect-stat-count sym - (let ((sym-stat (assoc sym stats))) - (if sym-stat - (cdr sym-stat) - "?"))) + (assoc-get sym stats "?")) + outfile)) '(protected-objects bytes-malloced cell-heap-size))) (set! gc-dumping #f) @@ -579,20 +709,31 @@ PIDs or the number of the process." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define* (ly:exit status #:optional (silently #f)) + "Exit function for lilypond" + (if (not silently) + (case status + ((0) (ly:success (_ "Compilation successfully completed"))) + ((1) (ly:warning (_ "Compilation completed with warnings or errors"))) + (else (ly:message "")))) + (exit status)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (define-public (lilypond-main files) "Entry point for LilyPond." (eval-string (ly:command-line-code)) (if (ly:get-option 'help) (begin (ly:option-usage) - (exit 0))) + (ly:exit 0 #t))) (if (ly:get-option 'show-available-fonts) (begin (ly:font-config-display-fonts) - (exit 0))) + (ly:exit 0 #t))) (if (ly:get-option 'gui) (gui-main files)) (if (null? files) (begin (ly:usage) - (exit 2))) + (ly:exit 2 #t))) (if (ly:get-option 'read-file-list) (set! files (filter (lambda (s) @@ -648,9 +789,10 @@ PIDs or the number of the process." (if (ly:get-option 'dump-profile) (dump-profile "lily-run-total" '(0 0) (profile-measurements))) - (exit (if (null? errors) - 0 - 1)))))) + (if (null? errors) + (ly:exit 0 #f) + (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")) (let ((failed (lilypond-all files))) @@ -660,11 +802,10 @@ PIDs or the number of the process." (string-contains f "lilypond"))))) (if (pair? failed) (begin (ly:error (_ "failed files: ~S") (string-join failed)) - (exit 1)) + (ly:exit 1 #f)) (begin - ;; HACK: be sure to exit with single newline - (ly:message "") - (exit 0))))) + (ly:exit 0 #f))))) + (define-public (lilypond-all files) (let* ((failed '()) @@ -673,7 +814,7 @@ PIDs or the number of the process." (if separate-logs (open-file (if (string-or-symbol? (ly:get-option 'log-file)) (format "~a.log" (ly:get-option 'log-file)) - "/dev/tty") "a") #f)) + "/dev/stderr") "a") #f)) (do-measurements (ly:get-option 'dump-profile)) (handler (lambda (key failed-file) (set! failed (append (list failed-file) failed))))) @@ -700,17 +841,15 @@ PIDs or the number of the process." (for-each (lambda (s) (ly:set-option (car s) (cdr s))) all-settings) - (ly:clear-anonymous-modules) (ly:set-option 'debug-gc-assert-parsed-dead #t) (gc) (ly:set-option 'debug-gc-assert-parsed-dead #f) (if (ly:get-option 'debug-gc) (dump-gc-protects) - (if (= (random 40) 1) - (ly:reset-all-fonts))))) + (ly:reset-all-fonts)))) files) - ;; we want the failed-files notice in the aggregrate logfile. + ;; Ensure a notice re failed files is written to aggregate logfile. (if ping-log (format ping-log "Failed files: ~a\n" failed)) (if (ly:get-option 'dump-profile) @@ -743,7 +882,7 @@ PIDs or the number of the process." (ly:error (_ "failed files: ~S") (string-join failed)) ;; not reached? (exit 1)) - (exit 0))))) + (ly:exit 0 #f))))) (define (gui-no-files-handler) (let* ((ly (string-append (ly:effective-prefix) "/ly/")) @@ -752,4 +891,4 @@ PIDs or the number of the process." (cmd (get-editor-command welcome-ly 0 0 0))) (ly:message (_ "Invoking `~a'...\n") cmd) (system cmd) - (exit 1))) + (ly:exit 1 #f))) diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index ee79823361..171cee1240 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -1,12 +1,24 @@ -;;;; define-syntax.scm -- Defines functions for syntax expressions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2006 Erik Sandberg +;;;; Copyright (C) 2006--2011 Erik Sandberg +;;;; +;;;; 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 . ;; TODO: use separate module for syntax ;; constructors. Also create wrapper around the constructor? -(define define-ly-syntax define-public) +(defmacro define-ly-syntax (args . body) + `(define-public ,args ,(cons 'begin body))) ;; A ly-syntax constructor takes two extra parameters, parser and ;; location. These are mainly used for reporting errors and @@ -14,22 +26,21 @@ ;; location arg to set the origin of the returned music object; this ;; behaviour is usually desired (defmacro define-ly-syntax-loc (args . body) - (primitive-eval `(define-ly-syntax ,args - (let ((m ,(cons 'begin body))) - (set! (ly:music-property m 'origin) ,(third args)) - m)))) - + `(define-public ,args + (let ((m ,(cons 'begin body))) + (set! (ly:music-property m 'origin) ,(third args)) + m))) ;; Like define-ly-syntax-loc, but adds parser and location ;; parameters. Useful for simple constructors that don't need to ;; report errors. (defmacro define-ly-syntax-simple (args . body) - (primitive-eval `(define-ly-syntax ,(cons* (car args) - 'parser - 'location - (cdr args)) - (let ((m ,(cons 'begin body))) - (set! (ly:music-property m 'origin) location) - m)))) + `(define-public ,(cons* (car args) + 'parser + 'location + (cdr args)) + (let ((m ,(cons 'begin body))) + (set! (ly:music-property m 'origin) location) + m))) ;; Music function: Apply function and check return value. (define-ly-syntax-loc (music-function parser loc fun args) @@ -78,29 +89,34 @@ (make-music 'TransposedMusic 'element (ly:music-transpose music pitch))) -(define-ly-syntax-simple (tempo text duration tempo) - (let ((props (list - (make-property-set 'tempoWholesPerMinute - (ly:moment-mul (ly:make-moment tempo 1) - (ly:duration-length duration))) - (make-property-set 'tempoUnitDuration duration) - (make-property-set 'tempoUnitCount tempo)))) - (set! props (cons - (if text (make-property-set 'tempoText text) - (make-property-unset 'tempoText)) - props)) - (context-spec-music - (make-sequential-music props) - 'Score))) - -(define-ly-syntax-simple (tempoText text) - (context-spec-music - (make-sequential-music - (list - (make-property-unset 'tempoUnitDuration) - (make-property-unset 'tempoUnitCount) - (make-property-set 'tempoText text))) - 'Score)) +(define-ly-syntax (tempo parser location text . rest) + (let* ((unit (and (pair? rest) + (car rest))) + (count (and unit + (cadr rest))) + (range-tempo? (pair? count)) + (tempo-change (make-music 'TempoChangeEvent + 'origin location + 'text text + 'tempo-unit unit + 'metronome-count count)) + (tempo-set + (and unit + (context-spec-music + (make-property-set 'tempoWholesPerMinute + (ly:moment-mul + (ly:make-moment + (if range-tempo? + (round (/ (+ (car count) (cdr count)) + 2)) + count) + 1) + (ly:duration-length unit))) + 'Score)))) + + (if tempo-set + (make-sequential-music (list tempo-change tempo-set)) + tempo-change))) (define-ly-syntax-simple (skip-music dur) (make-music 'SkipMusic @@ -110,16 +126,17 @@ (make-repeat type num body alts)) (define (script-to-mmrest-text music) - "Extract 'direction and 'text from SCRIPT-MUSIC, and transform MultiMeasureTextEvent" + "Extract @code{'direction} and @code{'text} from @var{music}, and transform +into a @code{MultiMeasureTextEvent}." (if (memq 'script-event (ly:music-property music 'types)) - - (let* - ((dir (ly:music-property music 'direction)) - (tags (ly:music-property music 'tags)) - (p (make-music 'MultiMeasureTextEvent - 'tags tags - 'text (ly:music-property music 'text)))) + (let* ((location (ly:music-property music 'origin)) + (dir (ly:music-property music 'direction)) + (tags (ly:music-property music 'tags)) + (p (make-music 'MultiMeasureTextEvent + 'origin location + 'tags tags + 'text (ly:music-property music 'text)))) (if (ly:dir? dir) (set! (ly:music-property p 'direction) dir)) p) @@ -131,6 +148,12 @@ 'duration duration 'origin location)) +(define-ly-syntax (repetition-chord parser location previous-chord repetition-function duration articulations) + (make-music 'RepeatedChord + 'original-chord previous-chord + 'element (repetition-function previous-chord location duration articulations) + 'origin location)) + (define-ly-syntax-simple (context-specification type id mus ops create-new) (let* ((type-sym (if (symbol? type) type (string->symbol type))) (csm (context-spec-music mus type-sym id))) @@ -179,6 +202,11 @@ (call-with-output-string (lambda (p) (format p "uniqueContext~s" unique-counter)))) (define (lyric-combine-music sync music loc) + ;; CompletizeExtenderEvent is added following the last lyric in MUSIC + ;; to signal to the Extender_engraver that any pending extender should + ;; be completed if the lyrics end before the associated voice. + (append! (ly:music-property music 'elements) + (list (make-music 'CompletizeExtenderEvent))) (make-music 'LyricCombineMusic 'element music 'associated-context sync @@ -209,3 +237,30 @@ 'origin loc))) addlyrics-list))) (make-simultaneous-music (cons voice lyricstos)))) + +(define-ly-syntax (make-mark-set parser location label) + "Make the music for the \\mark command." + (let* ((set (and (integer? label) + (context-spec-music (make-property-set 'rehearsalMark label) + 'Score))) + (ev (make-music 'MarkEvent)) + (ch (make-event-chord (list ev)))) + + (set! (ly:music-property ev 'origin) location) + (if set + (make-sequential-music (list set ch)) + (begin + (set! (ly:music-property ev 'label) label) + ch)))) + +(define-ly-syntax (partial parser location dur) + "Make a partial measure." + + ;; We use `descend-to-context' here instead of `context-spec-music' to + ;; ensure \partial still works if the Timing_translator is moved + (descend-to-context + (context-spec-music (make-music 'PartialSet + 'origin location + 'partial-duration dur) + 'Timing) + 'Score)) diff --git a/scm/markup.scm b/scm/markup.scm index ceb6a86a24..6bd9fd6236 100644 --- a/scm/markup.scm +++ b/scm/markup.scm @@ -1,8 +1,19 @@ -;;;; markup.scm -- Implement a user extensible markup scheme. +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2003--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2003--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . " Internally markup is stored as lists, whose head is a function. @@ -11,7 +22,7 @@ Internally markup is stored as lists, whose head is a function. When the markup is formatted, then FUNCTION is called as follows - (FUNCTION GROB PROPS ARG1 ARG2 ... ) + (FUNCTION GROB PROPS ARG1 ARG2 ... ) GROB is the current grob, PROPS is a list of alists, and ARG1.. are the rest of the arguments. @@ -20,9 +31,7 @@ The function should return a stencil (i.e. a formatted, ready to print object). -To add a builtin markup command, use the define-builtin-markup-command -utility. In a user file, the define-markup-command macro shall be used -(see ly/markup-init.ly). +To add a markup command, use the define-markup-command utility. (define-markup-command (mycommand layout prop arg1 ...) (arg1-type? ...) \"my command usage and description\" @@ -41,170 +50,180 @@ The command is now available in markup mode, e.g. ;; category -> markup functions (define-public markup-functions-by-category (make-hash-table 150)) ;; markup function -> used properties -(define-public markup-functions-properties (make-hash-table 150)) +(define-public markup-functions-properties (make-weak-key-hash-table 151)) ;; List of markup list functions -(define-public markup-list-function-list (list)) +(define-public markup-list-functions (make-weak-key-hash-table 151)) -(define-macro (define-builtin-markup-command command-and-args signature - category properties-or-copied-function . body) +(use-modules (ice-9 optargs)) + +(defmacro*-public define-markup-command + (command-and-args signature + #:key (category '()) (properties '()) + #:rest body) " * Define a COMMAND-markup function after command-and-args and body, register COMMAND-markup and its signature, * add COMMAND-markup to markup-functions-by-category, -* sets COMMAND-markup markup-signature and markup-keyword object properties, +* sets COMMAND-markup markup-signature object property, * define a make-COMMAND-markup function. Syntax: - (define-builtin-markup-command (COMMAND layout props . arguments) + (define-markup-command (COMMAND layout props . arguments) argument-types - category - properties + [ #:properties properties ] \"documentation string\" ...command body...) - or: - (define-builtin-markup-command COMMAND - argument-types - category - function) where: - argument-types is a list of type predicates for arguments - category is either a symbol or a symbol list - properties a list of (property default-value) lists or COMMANDx-markup elements - (when a COMMANDx-markup is found, the properties of the said commandx are - added instead). No check is performed against cyclical references! + `argument-types' is a list of type predicates for arguments + `properties' a list of (property default-value) lists + +The specified properties are available as let-bound variables in the +command body, using the respective `default-value' as fallback in case +`property' is not found in `props'. `props' itself is left unchanged: +if you want defaults specified in that manner passed down into other +markup functions, you need to adjust `props' yourself. + +The autogenerated documentation makes use of some optional +specifications that are otherwise ignored: + +After `argument-types', you may also specify + [ #:category category ] +where: + `category' is either a symbol or a symbol list specifying the + category for this markup command in the docs. + +As an element of the `properties' list, you may directly use a +COMMANDx-markup symbol instead of a `(prop value)' list to indicate +that this markup command is called by the newly defined command, +adding its properties to the documented properties of the new +command. There is no protection against circular definitions. " - (let* ((command (if (pair? command-and-args) (car command-and-args) command-and-args)) - (args (if (pair? command-and-args) (cdr command-and-args) '())) + (let* ((command (car command-and-args)) + (args (cdr command-and-args)) (command-name (string->symbol (format #f "~a-markup" command))) (make-markup-name (string->symbol (format #f "make-~a-markup" command)))) + (while (and (pair? body) (keyword? (car body))) + (set! body (cddr body))) `(begin ;; define the COMMAND-markup function - ,(if (pair? args) - (let ((documentation (car body)) - (real-body (cdr body)) - (properties properties-or-copied-function)) - `(define-public (,command-name ,@args) - ,documentation - (let ,(filter identity - (map (lambda (prop-spec) - (if (pair? prop-spec) - (let ((prop (car prop-spec)) - (default-value (if (null? (cdr prop-spec)) - #f - (cadr prop-spec))) - (props (cadr args))) - `(,prop (chain-assoc-get ',prop ,props ,default-value))) - #f)) - properties)) - ,@real-body))) - (let ((args (gensym "args")) - (markup-command properties-or-copied-function)) - `(define-public (,command-name . ,args) - ,(format #f "Copy of the ~a command." markup-command) - (apply ,markup-command ,args)))) + ,(let* ((documentation (if (string? (car body)) + (list (car body)) + '())) + (real-body (if (or (null? documentation) + (null? (cdr body))) + body (cdr body)))) + `(define-public (,command-name ,@args) + ,@documentation + (let ,(map (lambda (prop-spec) + (let ((prop (car prop-spec)) + (default-value (if (null? (cdr prop-spec)) + #f + (cadr prop-spec))) + (props (cadr args))) + `(,prop (chain-assoc-get ',prop ,props ,default-value)))) + (filter pair? properties)) + ,@real-body))) (set! (markup-command-signature ,command-name) (list ,@signature)) ;; Register the new function, for markup documentation ,@(map (lambda (category) - `(hashq-set! markup-functions-by-category ',category - (cons ,command-name - (or (hashq-ref markup-functions-by-category ',category) - (list))))) - (if (list? category) category (list category))) + `(hashq-set! + (or (hashq-ref markup-functions-by-category ',category) + (let ((hash (make-weak-key-hash-table 151))) + (hashq-set! markup-functions-by-category ',category + hash) + hash)) + ,command-name #t)) + (if (list? category) category (list category))) ;; Used properties, for markup documentation (hashq-set! markup-functions-properties - ,command-name - (list ,@(map (lambda (prop-spec) - (cond ((symbol? prop-spec) - prop-spec) - ((not (null? (cdr prop-spec))) - `(list ',(car prop-spec) ,(cadr prop-spec))) - (else - `(list ',(car prop-spec))))) - (if (pair? args) - properties-or-copied-function - (list))))) + ,command-name + (list ,@(map (lambda (prop-spec) + (cond ((symbol? prop-spec) + prop-spec) + ((not (null? (cdr prop-spec))) + `(list ',(car prop-spec) ,(cadr prop-spec))) + (else + `(list ',(car prop-spec))))) + (if (pair? args) + properties + (list))))) ;; define the make-COMMAND-markup function (define-public (,make-markup-name . args) - (let ((sig (list ,@signature))) - (make-markup ,command-name ,(symbol->string make-markup-name) sig args)))))) - -(define-macro (define-builtin-markup-list-command command-and-args signature - properties . body) - "Same as `define-builtin-markup-command, but defines a command that, when -interpreted, returns a list of stencils instead os a single one" - (let* ((command (if (pair? command-and-args) (car command-and-args) command-and-args)) - (args (if (pair? command-and-args) (cdr command-and-args) '())) + (let ((sig (list ,@signature))) + (make-markup ,command-name ,(symbol->string make-markup-name) sig args)))))) + +(defmacro*-public define-markup-list-command + (command-and-args signature #:key (properties '()) #:rest body) + "Same as `define-markup-command', but defines a command that, when +interpreted, returns a list of stencils instead of a single one" + (let* ((command (car command-and-args)) + (args (cdr command-and-args)) (command-name (string->symbol (format #f "~a-markup-list" command))) (make-markup-name (string->symbol (format #f "make-~a-markup-list" command)))) + (while (and (pair? body) (keyword? (car body))) + (set! body (cddr body))) `(begin ;; define the COMMAND-markup-list function - ,(if (pair? args) - (let ((documentation (car body)) - (real-body (cdr body))) - `(define-public (,command-name ,@args) - ,documentation - (let ,(filter identity - (map (lambda (prop-spec) - (if (pair? prop-spec) - (let ((prop (car prop-spec)) - (default-value (if (null? (cdr prop-spec)) - #f - (cadr prop-spec))) - (props (cadr args))) - `(,prop (chain-assoc-get ',prop ,props ,default-value))) - #f)) - properties)) - ,@body))) - (let ((args (gensym "args")) - (markup-command (car body))) - `(define-public (,command-name . ,args) - ,(format #f "Copy of the ~a command." markup-command) - (apply ,markup-command ,args)))) + ,(let* ((documentation (if (string? (car body)) + (list (car body)) + '())) + (real-body (if (or (null? documentation) + (null? (cdr body))) + body (cdr body)))) + `(define-public (,command-name ,@args) + ,@documentation + (let ,(map (lambda (prop-spec) + (let ((prop (car prop-spec)) + (default-value (if (null? (cdr prop-spec)) + #f + (cadr prop-spec))) + (props (cadr args))) + `(,prop (chain-assoc-get ',prop ,props ,default-value)))) + (filter pair? properties)) + ,@real-body))) (set! (markup-command-signature ,command-name) (list ,@signature)) ;; add the command to markup-list-function-list, for markup documentation - (if (not (member ,command-name markup-list-function-list)) - (set! markup-list-function-list (cons ,command-name - markup-list-function-list))) + (hashq-set! markup-list-functions ,command-name #t) ;; Used properties, for markup documentation (hashq-set! markup-functions-properties - ,command-name - (list ,@(map (lambda (prop-spec) - (cond ((symbol? prop-spec) - prop-spec) - ((not (null? (cdr prop-spec))) - `(list ',(car prop-spec) ,(cadr prop-spec))) - (else - `(list ',(car prop-spec))))) - (if (pair? args) - properties - (list))))) + ,command-name + (list ,@(map (lambda (prop-spec) + (cond ((symbol? prop-spec) + prop-spec) + ((not (null? (cdr prop-spec))) + `(list ',(car prop-spec) ,(cadr prop-spec))) + (else + `(list ',(car prop-spec))))) + (if (pair? args) + properties + (list))))) ;; it's a markup-list command: (set-object-property! ,command-name 'markup-list-command #t) ;; define the make-COMMAND-markup-list function (define-public (,make-markup-name . args) - (let ((sig (list ,@signature))) - (list (make-markup ,command-name - ,(symbol->string make-markup-name) sig args))))))) + (let ((sig (list ,@signature))) + (list (make-markup ,command-name + ,(symbol->string make-markup-name) sig args))))))) (define-public (make-markup markup-function make-name signature args) - " Construct a markup object from MARKUP-FUNCTION and ARGS. Typecheck -against SIGNATURE, reporting MAKE-NAME as the user-invoked function. -" + "Construct a markup object from @var{markup-function} and @var{args}. +Typecheck against @var{signature}, reporting @var{make-name} as the +user-invoked function." (let* ((arglen (length args)) - (siglen (length signature)) - (error-msg (if (and (> siglen 0) (> arglen 0)) - (markup-argument-list-error signature args 1) - #f))) + (siglen (length signature)) + (error-msg (if (and (> siglen 0) (> arglen 0)) + (markup-argument-list-error signature args 1) + #f))) (if (or (not (= arglen siglen)) (< siglen 0) (< arglen 0)) - (ly:error (string-append make-name ": " - (_ "Wrong number of arguments. Expect: ~A, found ~A: ~S")) + (ly:error (string-append make-name ": " + (_ "Wrong number of arguments. Expect: ~A, found ~A: ~S")) siglen arglen args)) (if error-msg - (ly:error + (ly:error (string-append make-name ": " (_ "Invalid argument in position ~A. Expect: ~A, found: ~S.")) @@ -215,8 +234,7 @@ against SIGNATURE, reporting MAKE-NAME as the user-invoked function. ;;; markup constructors ;;; lilypond-like syntax for markup construction in scheme. -(use-modules (ice-9 optargs) - (ice-9 receive)) +(use-modules (ice-9 receive)) (defmacro*-public markup (#:rest body) "The `markup' macro provides a lilypond-like syntax for building markups. @@ -234,17 +252,17 @@ Example: <==> (markup \"foo\" #:raise 0.2 #:hbracket #:bold \"bar\" - #:override '(baseline-skip . 4) + #:override '(baseline-skip . 4) #:bracket #:column (\"baz\" \"bazr\" \"bla\")) Use `markup*' in a \\notemode context." - + (car (compile-all-markup-expressions `(#:line ,body)))) (defmacro*-public markup* (#:rest body) "Same as `markup', for use in a \\notes block." `(ly:export (markup ,@body))) - - + + (define (compile-all-markup-expressions expr) "Return a list of canonical markups expressions, e.g.: (#:COMMAND1 arg11 arg12 #:COMMAND2 arg21 arg22 arg23) @@ -339,58 +357,29 @@ Use `markup*' in a \\notemode context." ;;;;;;;;;;;;;;; ;;; Utilities for storing and accessing markup commands signature -;;; and keyword. ;;; Examples: ;;; ;;; (set! (markup-command-signature raise-markup) (list number? markup?)) -;;; ==> ((# #) . scheme0-markup1) +;;; ==> (# #) ;;; ;;; (markup-command-signature raise-markup) ;;; ==> (# #) ;;; -;;; (markup-command-keyword raise-markup) ==> "scheme0-markup1" -;;; - -(define-public (markup-command-keyword markup-command) - "Return markup-command's argument keyword, ie a string describing the command - arguments, eg. \"scheme0markup1\"" - (object-property markup-command 'markup-keyword)) (define-public (markup-command-signature-ref markup-command) - "Return markup-command's signature (the 'markup-signature object property)" + "Return @var{markup-command}'s signature (the @code{'markup-signature} +object property)." (object-property markup-command 'markup-signature)) (define-public (markup-command-signature-set! markup-command signature) - "Set markup-command's signature and keyword (as object properties)" + "Set @var{markup-command}'s signature (as object property)." (set-object-property! markup-command 'markup-signature signature) - (set-object-property! markup-command 'markup-keyword - (markup-signature-to-keyword signature)) signature) (define-public markup-command-signature (make-procedure-with-setter markup-command-signature-ref markup-command-signature-set!)) -(define-public (markup-signature-to-keyword sig) - " (A B C) -> a0-b1-c2 " - (if (null? sig) - 'empty - (string->symbol (string-join (map - (let* ((count 0)) - (lambda (func) - (set! count (+ count 1)) - (string-append - ;; for reasons I don't get, - ;; (case func ((markup?) .. ) - ;; doesn't work. - (cond - ((eq? func markup?) "markup") - ((eq? func markup-list?) "markup-list") - (else "scheme")) - (number->string (- count 1))))) - sig) - "-")))) - (define (lookup-markup-command-aux symbol) (let ((proc (catch 'misc-error (lambda () @@ -402,24 +391,27 @@ Use `markup*' in a \\notemode context." (let ((proc (lookup-markup-command-aux (string->symbol (format #f "~a-markup" code))))) (and proc (markup-function? proc) - (cons proc (markup-command-keyword proc))))) + (cons proc (markup-command-signature proc))))) (define-public (lookup-markup-list-command code) (let ((proc (lookup-markup-command-aux (string->symbol (format #f "~a-markup-list" code))))) (and proc (markup-list-function? proc) - (cons proc (markup-command-keyword proc))))) + (cons proc (markup-command-signature proc))))) ;;;;;;;;;;;;;;;;;;;;;; ;;; used in parser.yy to map a list of markup commands on markup arguments (define-public (map-markup-command-list commands markups) - "`markups' being a list of markups, eg (markup1 markup2 markup3), -and `commands' a list of commands with their scheme arguments, in reverse order, -eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg: - ((bold (raise 4 (italic markup1))) - (bold (raise 4 (italic markup2))) - (bold (raise 4 (italic markup3)))) -" + "@var{markups} being a list of markups, for example +@code{(markup1 markup2 markup3)}, and @var{commands} a list of commands with +their scheme arguments, in reverse order, for example +@code{((italic) (raise 4) (bold))}, map the commands on each markup argument, +for example +@example +((bold (raise 4 (italic markup1))) + (bold (raise 4 (italic markup2))) + (bold (raise 4 (italic markup3)))) +@end example" (map-in-order (lambda (arg) (let ((result arg)) (for-each (lambda (cmd) @@ -440,12 +432,12 @@ eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg: (object-property x 'markup-list-command))) (define-public (markup-command-list? x) - "Determine if `x' is a markup command list, ie. a list composed of -a markup list function and its arguments." + "Determine whether @var{x} is a markup command list, i.e. a list +composed of a markup list function and its arguments." (and (pair? x) (markup-list-function? (car x)))) (define-public (markup-list? arg) - "Return a true value if `x' is a list of markups or markup command lists." + "Return @code{#t} if @var{x} is a list of markups or markup command lists." (define (markup-list-inner? lst) (or (null? lst) (and (or (markup? (car lst)) (markup-command-list? (car lst))) @@ -480,10 +472,10 @@ a markup list function and its arguments." (markup-argument-list? (markup-command-signature (car arg)) (cdr arg))))) -;; -;; ;; -;; +;; +;; +;; (define (markup-thrower-typecheck arg) "typecheck, and throw an error when something amiss. @@ -501,7 +493,7 @@ Uncovered - cheap-markup? is used." ;; ;; good enough if you only use make-XXX-markup functions. -;; +;; (define (cheap-markup? x) (or (string? x) (and (pair? x) @@ -509,7 +501,7 @@ Uncovered - cheap-markup? is used." ;; ;; replace by markup-thrower-typecheck for more detailed diagnostics. -;; +;; (define-public markup? cheap-markup?) ;; utility @@ -541,7 +533,7 @@ Uncovered - cheap-markup? is used." "DOCME" (if (and (pair? stencils) (ly:stencil? (car stencils))) - + (if (and (pair? (cdr stencils)) (ly:stencil? (cadr stencils))) (let* ((tail (stack-stencil-line space (cdr stencils))) @@ -552,3 +544,63 @@ Uncovered - cheap-markup? is used." (car stencils)) (ly:make-stencil '() '(0 . 0) '(0 . 0)))) + +;;; convert a full markup object to an approximate pure string representation + +(define-public (markup->string m) + ;; markup commands with one markup argument, formatting ignored + (define markups-first-argument '(list + bold-markup box-markup caps-markup dynamic-markup finger-markup + fontCaps-markup huge-markup italic-markup large-markup larger-markup + medium-markup normal-size-sub-markup normal-size-super-markup + normal-text-markup normalsize-markup number-markup roman-markup + sans-markup simple-markup small-markup smallCaps-markup smaller-markup + sub-markup super-markup teeny-markup text-markup tiny-markup + typewriter-markup underline-markup upright-markup bracket-markup + circle-markup hbracket-markup parenthesize-markup rounded-box-markup + + center-align-markup center-column-markup column-markup dir-column-markup + fill-line-markup justify-markup justify-string-markup left-align-markup + left-column-markup line-markup right-align-markup right-column-markup + vcenter-markup wordwrap-markup wordwrap-string-markup )) + + ;; markup commands with markup as second argument, first argument + ;; specifies some formatting and is ignored + (define markups-second-argument '(list + abs-fontsize-markup fontsize-markup magnify-markup lower-markup + pad-around-markup pad-markup-markup pad-x-markup raise-markup + halign-markup hcenter-in-markup rotate-markup translate-markup + translate-scaled-markup with-url-markup scale-markup )) + + ;; helper functions to handle string cons like string lists + (define (markup-cons->string-cons c) + (if (not (pair? c)) (markup->string c) + (cons (markup->string (car c)) (markup-cons->string-cons (cdr c))))) + (define (string-cons-join c) + (if (not (pair? c)) c + (string-join (list (car c) (string-cons-join (cdr c))) ""))) + + (cond + ((string? m) m) + ((null? m) "") + + ;; handle \concat (string-join without spaces) + ((and (pair? m) (equal? (car m) concat-markup)) + (string-cons-join (markup-cons->string-cons (cadr m))) ) + + ;; markup functions with the markup as first arg + ((member (car m) (primitive-eval markups-first-argument)) + (markup->string (cadr m))) + + ;; markup functions with markup as second arg + ((member (car m) (primitive-eval markups-second-argument)) + (markup->string (cddr m))) + + ;; ignore all other markup functions + ((markup-function? (car m)) "") + + ;; handle markup lists + ((list? m) + (string-join (map markup->string m) " ")) + + (else "ERROR, unable to extract string from markup"))) diff --git a/scm/memory-trace.scm b/scm/memory-trace.scm index 39bedc1804..345d1327f0 100644 --- a/scm/memory-trace.scm +++ b/scm/memory-trace.scm @@ -1,3 +1,5 @@ +;;;; memory-trace.scm + (define-module (scm memory-trace)) (use-modules (lily) (ice-9 format)) @@ -32,7 +34,7 @@ (if (eq? (current-thread) trace-thread) #t ;; do nothing. (let* - ((cells (cdr (assoc 'total-cells-allocated (gc-stats)))) + ((cells (assoc-get 'total-cells-allocated (gc-stats))) (proc (arg-procedure args)) (time (tms:utime (times))) (stack (extract-trace continuation))) @@ -65,7 +67,7 @@ (set! trace-points '()) (set! continue-tracing #t) (set! trace-count 0) - (set! start-memory (cdr (assoc 'total-cells-allocated (gc-stats)))) + (set! start-memory (assoc-get 'total-cells-allocated (gc-stats))) (set! start-time (tms:utime (times))) (install-tracepoint)) @@ -98,10 +100,10 @@ (for-each (lambda (r) (let* - ((mem (- (cdr (assoc 'cells r)) start-memory)) - (proc (cdr (assoc 'proc r))) - (stack (cdr (assoc 'stack r))) - (time (- (cdr (assoc 'time r)) start-time))) + ((mem (- (assoc-get 'cells r) start-memory)) + (proc (assoc-get 'proc r)) + (stack (assoc-get 'stack r)) + (time (- (assoc-get 'time r) start-time))) (format graph-out "~a ~a\n" time mem) (if stack @@ -111,7 +113,7 @@ (- mem last-mem) proc) (do ((j 0 (1+ j)) - (stack (cdr (assoc 'stack r)) stack)) + (stack (assoc-get 'stack r) stack)) ((>= j (vector-length stack))) (format stacks-out "\t~a\n" diff --git a/scm/midi.scm b/scm/midi.scm index 68352456b2..a3540e60ca 100644 --- a/scm/midi.scm +++ b/scm/midi.scm @@ -1,8 +1,19 @@ -;;;; midi.scm -- scm midi variables and functions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2011 Jan Nieuwenhuizen +;;;; +;;;; 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 . @@ -14,33 +25,31 @@ ;; define factor of total volume per dynamic marking (define-public absolute-volume-alist '()) (set! absolute-volume-alist - (append - '( - ("sf" . 1.00) - ("fffff" . 0.95) - ("ffff" . 0.92) - ("fff" . 0.85) - ("ff" . 0.80) - ("f" . 0.75) - ("mf" . 0.68) - ("mp" . 0.61) - ("p" . 0.55) - ("pp" . 0.49) - ("ppp" . 0.42) - ("pppp" . 0.34) - ("ppppp" . 0.25) - ) - absolute-volume-alist)) + (append + '( + ("sf" . 1.00) + ("fffff" . 0.95) + ("ffff" . 0.92) + ("fff" . 0.85) + ("ff" . 0.80) + ("f" . 0.75) + ("mf" . 0.68) + ("mp" . 0.61) + ("p" . 0.55) + ("pp" . 0.49) + ("ppp" . 0.42) + ("pppp" . 0.34) + ("ppppp" . 0.25) + ) + absolute-volume-alist)) (define-public (default-dynamic-absolute-volume s) - (let ((entry (assoc s absolute-volume-alist))) - (if entry - (cdr entry)))) + (assoc-get s absolute-volume-alist)) ;; define factors of total volume of minimum and maximum volume (define-public instrument-equalizer-alist '()) (set! instrument-equalizer-alist - (append + (append '( ("flute" . (0 . 0.7)) ("oboe" . (0 . 0.7)) @@ -57,228 +66,225 @@ instrument-equalizer-alist)) (define-public (default-instrument-equalizer s) - (let ((entry (assoc s instrument-equalizer-alist))) - (if entry - (cdr entry)))) + (assoc-get s instrument-equalizer-alist)) ;; (name . program+32768*(channel10 ? 1 : 0)) (define instrument-names-alist '()) (set! instrument-names-alist (append `( - ("acoustic grand" . ,(- 1 1)) - ("bright acoustic" . ,(- 2 1)) - ("electric grand" . ,(- 3 1)) - ("honky-tonk" . ,(- 4 1)) - ("electric piano 1" . ,(- 5 1)) - ("electric piano 2" . ,(- 6 1)) - ("harpsichord" . ,(- 7 1)) - ("clav" . ,(- 8 1)) - - ; (9-16 chrom percussion) - ("celesta" . ,(- 9 1)) - ("glockenspiel" . ,(- 10 1)) - ("music box" . ,(- 11 1)) - ("vibraphone" . ,(- 12 1)) - ("marimba" . ,(- 13 1)) - ("xylophone" . ,(- 14 1)) - ("tubular bells" . ,(- 15 1)) - ("dulcimer" . ,(- 16 1)) - - ; (17-24 organ) - ("drawbar organ" . ,(- 17 1)) - ("percussive organ" . ,(- 18 1)) - ("rock organ" . ,(- 19 1)) - ("church organ" . ,(- 20 1)) - ("reed organ" . ,(- 21 1)) - ("accordion" . ,(- 22 1)) - ("harmonica" . ,(- 23 1)) - ("concertina" . ,(- 24 1)) - - ; (25-32 guitar) - ("acoustic guitar (nylon)" . ,(- 25 1)) - ("acoustic guitar (steel)" . ,(- 26 1)) - ("electric guitar (jazz)" . ,(- 27 1)) - ("electric guitar (clean)" . ,(- 28 1)) - ("electric guitar (muted)" . ,(- 29 1)) - ("overdriven guitar" . ,(- 30 1)) - ("distorted guitar" . ,(- 31 1)) - ("guitar harmonics" . ,(- 32 1)) - - ; (33-40 bass) - ("acoustic bass" . ,(- 33 1)) - ("electric bass (finger)" . ,(- 34 1)) - ("electric bass (pick)" . ,(- 35 1)) - ("fretless bass" . ,(- 36 1)) - ("slap bass 1" . ,(- 37 1)) - ("slap bass 2" . ,(- 38 1)) - ("synth bass 1" . ,(- 39 1)) - ("synth bass 2" . ,(- 40 1)) - - ; (41-48 strings) - ("violin" . ,(- 41 1)) - ("viola" . ,(- 42 1)) - ("cello" . ,(- 43 1)) - ("contrabass" . ,(- 44 1)) - ("tremolo strings" . ,(- 45 1)) - ("pizzicato strings" . ,(- 46 1)) - ("orchestral strings" . ,(- 47 1)) - ("timpani" . ,(- 48 1)) - - ; (49-56 ensemble) - ("string ensemble 1" . ,(- 49 1)) - ("string ensemble 2" . ,(- 50 1)) - ("synthstrings 1" . ,(- 51 1)) - ("synthstrings 2" . ,(- 52 1)) - ("choir aahs" . ,(- 53 1)) - ("voice oohs" . ,(- 54 1)) - ("synth voice" . ,(- 55 1)) - ("orchestra hit" . ,(- 56 1)) - - ; (57-64 brass) - ("trumpet" . ,(- 57 1)) - ("trombone" . ,(- 58 1)) - ("tuba" . ,(- 59 1)) - ("muted trumpet" . ,(- 60 1)) - ("french horn" . ,(- 61 1)) - ("brass section" . ,(- 62 1)) - ("synthbrass 1" . ,(- 63 1)) - ("synthbrass 2" . ,(- 64 1)) - - ; (65-72 reed) - ("soprano sax" . ,(- 65 1)) - ("alto sax" . ,(- 66 1)) - ("tenor sax" . ,(- 67 1)) - ("baritone sax" . ,(- 68 1)) - ("oboe" . ,(- 69 1)) - ("english horn" . ,(- 70 1)) - ("bassoon" . ,(- 71 1)) - ("clarinet" . ,(- 72 1)) - - ; (73-80 pipe) - ("piccolo" . ,(- 73 1)) - ("flute" . ,(- 74 1)) - ("recorder" . ,(- 75 1)) - ("pan flute" . ,(- 76 1)) - ("blown bottle" . ,(- 77 1)) - ("shakuhachi" . ,(- 78 1)) - ("whistle" . ,(- 79 1)) - ("ocarina" . ,(- 80 1)) - - ; (81-88 synth lead) - ("lead 1 (square)" . ,(- 81 1)) - ("lead 2 (sawtooth)" . ,(- 82 1)) - ("lead 3 (calliope)" . ,(- 83 1)) - ("lead 4 (chiff)" . ,(- 84 1)) - ("lead 5 (charang)" . ,(- 85 1)) - ("lead 6 (voice)" . ,(- 86 1)) - ("lead 7 (fifths)" . ,(- 87 1)) - ("lead 8 (bass+lead)" . ,(- 88 1)) - - ; (89-96 synth pad) - ("pad 1 (new age)" . ,(- 89 1)) - ("pad 2 (warm)" . ,(- 90 1)) - ("pad 3 (polysynth)" . ,(- 91 1)) - ("pad 4 (choir)" . ,(- 92 1)) - ("pad 5 (bowed)" . ,(- 93 1)) - ("pad 6 (metallic)" . ,(- 94 1)) - ("pad 7 (halo)" . ,(- 95 1)) - ("pad 8 (sweep)" . ,(- 96 1)) - - ; (97-104 synth effects) - ("fx 1 (rain)" . ,(- 97 1)) - ("fx 2 (soundtrack)" . ,(- 98 1)) - ("fx 3 (crystal)" . ,(- 99 1)) - ("fx 4 (atmosphere)" . ,(- 100 1)) - ("fx 5 (brightness)" . ,(- 101 1)) - ("fx 6 (goblins)" . ,(- 102 1)) - ("fx 7 (echoes)" . ,(- 103 1)) - ("fx 8 (sci-fi)" . ,(- 104 1)) - - ; (105-112 ethnic) - ("sitar" . ,(- 105 1)) - ("banjo" . ,(- 106 1)) - ("shamisen" . ,(- 107 1)) - ("koto" . ,(- 108 1)) - ("kalimba" . ,(- 109 1)) - ("bagpipe" . ,(- 110 1)) - ("fiddle" . ,(- 111 1)) - ("shanai" . ,(- 112 1)) - - ; (113-120 percussive) - ("tinkle bell" . ,(- 113 1)) - ("agogo" . ,(- 114 1)) - ("steel drums" . ,(- 115 1)) - ("woodblock" . ,(- 116 1)) - ("taiko drum" . ,(- 117 1)) - ("melodic tom" . ,(- 118 1)) - ("synth drum" . ,(- 119 1)) - ("reverse cymbal" . ,(- 120 1)) - - ; (121-128 sound effects) - ("guitar fret noise" . ,(- 121 1)) - ("breath noise" . ,(- 122 1)) - ("seashore" . ,(- 123 1)) - ("bird tweet" . ,(- 124 1)) - ("telephone ring" . ,(- 125 1)) - ("helicopter" . ,(- 126 1)) - ("applause" . ,(- 127 1)) - ("gunshot" . ,(- 128 1)) - - ; (channel 10 drum-kits - subtract 32768 to get program no.) - ("standard kit" . ,(+ 32768 0)) - ("standard drums" . ,(+ 32768 0)) - ("drums" . ,(+ 32768 0)) - ("room kit" . ,(+ 32768 8)) - ("room drums" . ,(+ 32768 8)) - ("power kit" . ,(+ 32768 16)) - ("power drums" . ,(+ 32768 16)) - ("rock drums" . ,(+ 32768 16)) - ("electronic kit" . ,(+ 32768 24)) - ("electronic drums" . ,(+ 32768 24)) - ("tr-808 kit" . ,(+ 32768 25)) - ("tr-808 drums" . ,(+ 32768 25)) - ("jazz kit" . ,(+ 32768 32)) - ("jazz drums" . ,(+ 32768 32)) - ("brush kit" . ,(+ 32768 40)) - ("brush drums" . ,(+ 32768 40)) - ("orchestra kit" . ,(+ 32768 48)) - ("orchestra drums" . ,(+ 32768 48)) - ("classical drums" . ,(+ 32768 48)) - ("sfx kit" . ,(+ 32768 56)) - ("sfx drums" . ,(+ 32768 56)) - ("mt-32 kit" . ,(+ 32768 127)) - ("mt-32 drums" . ,(+ 32768 127)) - ("cm-64 kit" . ,(+ 32768 127)) - ("cm-64 drums" . ,(+ 32768 127)) - ) + ("acoustic grand" . ,(- 1 1)) + ("bright acoustic" . ,(- 2 1)) + ("electric grand" . ,(- 3 1)) + ("honky-tonk" . ,(- 4 1)) + ("electric piano 1" . ,(- 5 1)) + ("electric piano 2" . ,(- 6 1)) + ("harpsichord" . ,(- 7 1)) + ("clav" . ,(- 8 1)) + + ;; (9-16 chrom percussion) + ("celesta" . ,(- 9 1)) + ("glockenspiel" . ,(- 10 1)) + ("music box" . ,(- 11 1)) + ("vibraphone" . ,(- 12 1)) + ("marimba" . ,(- 13 1)) + ("xylophone" . ,(- 14 1)) + ("tubular bells" . ,(- 15 1)) + ("dulcimer" . ,(- 16 1)) + + ;; (17-24 organ) + ("drawbar organ" . ,(- 17 1)) + ("percussive organ" . ,(- 18 1)) + ("rock organ" . ,(- 19 1)) + ("church organ" . ,(- 20 1)) + ("reed organ" . ,(- 21 1)) + ("accordion" . ,(- 22 1)) + ("harmonica" . ,(- 23 1)) + ("concertina" . ,(- 24 1)) + + ;; (25-32 guitar) + ("acoustic guitar (nylon)" . ,(- 25 1)) + ("acoustic guitar (steel)" . ,(- 26 1)) + ("electric guitar (jazz)" . ,(- 27 1)) + ("electric guitar (clean)" . ,(- 28 1)) + ("electric guitar (muted)" . ,(- 29 1)) + ("overdriven guitar" . ,(- 30 1)) + ("distorted guitar" . ,(- 31 1)) + ("guitar harmonics" . ,(- 32 1)) + + ;; (33-40 bass) + ("acoustic bass" . ,(- 33 1)) + ("electric bass (finger)" . ,(- 34 1)) + ("electric bass (pick)" . ,(- 35 1)) + ("fretless bass" . ,(- 36 1)) + ("slap bass 1" . ,(- 37 1)) + ("slap bass 2" . ,(- 38 1)) + ("synth bass 1" . ,(- 39 1)) + ("synth bass 2" . ,(- 40 1)) + + ;; (41-48 strings) + ("violin" . ,(- 41 1)) + ("viola" . ,(- 42 1)) + ("cello" . ,(- 43 1)) + ("contrabass" . ,(- 44 1)) + ("tremolo strings" . ,(- 45 1)) + ("pizzicato strings" . ,(- 46 1)) + ("orchestral harp" . ,(- 47 1)) + ("timpani" . ,(- 48 1)) + + ;; (49-56 ensemble) + ("string ensemble 1" . ,(- 49 1)) + ("string ensemble 2" . ,(- 50 1)) + ("synthstrings 1" . ,(- 51 1)) + ("synthstrings 2" . ,(- 52 1)) + ("choir aahs" . ,(- 53 1)) + ("voice oohs" . ,(- 54 1)) + ("synth voice" . ,(- 55 1)) + ("orchestra hit" . ,(- 56 1)) + + ;; (57-64 brass) + ("trumpet" . ,(- 57 1)) + ("trombone" . ,(- 58 1)) + ("tuba" . ,(- 59 1)) + ("muted trumpet" . ,(- 60 1)) + ("french horn" . ,(- 61 1)) + ("brass section" . ,(- 62 1)) + ("synthbrass 1" . ,(- 63 1)) + ("synthbrass 2" . ,(- 64 1)) + + ;; (65-72 reed) + ("soprano sax" . ,(- 65 1)) + ("alto sax" . ,(- 66 1)) + ("tenor sax" . ,(- 67 1)) + ("baritone sax" . ,(- 68 1)) + ("oboe" . ,(- 69 1)) + ("english horn" . ,(- 70 1)) + ("bassoon" . ,(- 71 1)) + ("clarinet" . ,(- 72 1)) + + ;; (73-80 pipe) + ("piccolo" . ,(- 73 1)) + ("flute" . ,(- 74 1)) + ("recorder" . ,(- 75 1)) + ("pan flute" . ,(- 76 1)) + ("blown bottle" . ,(- 77 1)) + ("shakuhachi" . ,(- 78 1)) + ("whistle" . ,(- 79 1)) + ("ocarina" . ,(- 80 1)) + + ;; (81-88 synth lead) + ("lead 1 (square)" . ,(- 81 1)) + ("lead 2 (sawtooth)" . ,(- 82 1)) + ("lead 3 (calliope)" . ,(- 83 1)) + ("lead 4 (chiff)" . ,(- 84 1)) + ("lead 5 (charang)" . ,(- 85 1)) + ("lead 6 (voice)" . ,(- 86 1)) + ("lead 7 (fifths)" . ,(- 87 1)) + ("lead 8 (bass+lead)" . ,(- 88 1)) + + ;; (89-96 synth pad) + ("pad 1 (new age)" . ,(- 89 1)) + ("pad 2 (warm)" . ,(- 90 1)) + ("pad 3 (polysynth)" . ,(- 91 1)) + ("pad 4 (choir)" . ,(- 92 1)) + ("pad 5 (bowed)" . ,(- 93 1)) + ("pad 6 (metallic)" . ,(- 94 1)) + ("pad 7 (halo)" . ,(- 95 1)) + ("pad 8 (sweep)" . ,(- 96 1)) + + ;; (97-104 synth effects) + ("fx 1 (rain)" . ,(- 97 1)) + ("fx 2 (soundtrack)" . ,(- 98 1)) + ("fx 3 (crystal)" . ,(- 99 1)) + ("fx 4 (atmosphere)" . ,(- 100 1)) + ("fx 5 (brightness)" . ,(- 101 1)) + ("fx 6 (goblins)" . ,(- 102 1)) + ("fx 7 (echoes)" . ,(- 103 1)) + ("fx 8 (sci-fi)" . ,(- 104 1)) + + ;; (105-112 ethnic) + ("sitar" . ,(- 105 1)) + ("banjo" . ,(- 106 1)) + ("shamisen" . ,(- 107 1)) + ("koto" . ,(- 108 1)) + ("kalimba" . ,(- 109 1)) + ("bagpipe" . ,(- 110 1)) + ("fiddle" . ,(- 111 1)) + ("shanai" . ,(- 112 1)) + + ;; (113-120 percussive) + ("tinkle bell" . ,(- 113 1)) + ("agogo" . ,(- 114 1)) + ("steel drums" . ,(- 115 1)) + ("woodblock" . ,(- 116 1)) + ("taiko drum" . ,(- 117 1)) + ("melodic tom" . ,(- 118 1)) + ("synth drum" . ,(- 119 1)) + ("reverse cymbal" . ,(- 120 1)) + + ;; (121-128 sound effects) + ("guitar fret noise" . ,(- 121 1)) + ("breath noise" . ,(- 122 1)) + ("seashore" . ,(- 123 1)) + ("bird tweet" . ,(- 124 1)) + ("telephone ring" . ,(- 125 1)) + ("helicopter" . ,(- 126 1)) + ("applause" . ,(- 127 1)) + ("gunshot" . ,(- 128 1)) + + ;; (channel 10 drum-kits - subtract 32768 to get program no.) + ("standard kit" . ,(+ 32768 0)) + ("standard drums" . ,(+ 32768 0)) + ("drums" . ,(+ 32768 0)) + ("room kit" . ,(+ 32768 8)) + ("room drums" . ,(+ 32768 8)) + ("power kit" . ,(+ 32768 16)) + ("power drums" . ,(+ 32768 16)) + ("rock drums" . ,(+ 32768 16)) + ("electronic kit" . ,(+ 32768 24)) + ("electronic drums" . ,(+ 32768 24)) + ("tr-808 kit" . ,(+ 32768 25)) + ("tr-808 drums" . ,(+ 32768 25)) + ("jazz kit" . ,(+ 32768 32)) + ("jazz drums" . ,(+ 32768 32)) + ("brush kit" . ,(+ 32768 40)) + ("brush drums" . ,(+ 32768 40)) + ("orchestra kit" . ,(+ 32768 48)) + ("orchestra drums" . ,(+ 32768 48)) + ("classical drums" . ,(+ 32768 48)) + ("sfx kit" . ,(+ 32768 56)) + ("sfx drums" . ,(+ 32768 56)) + ("mt-32 kit" . ,(+ 32768 127)) + ("mt-32 drums" . ,(+ 32768 127)) + ("cm-64 kit" . ,(+ 32768 127)) + ("cm-64 drums" . ,(+ 32768 127)) + ) instrument-names-alist)) (define-public (percussion? instrument) - " -returns whether the instrument should use midi channel 9 -" + "Return @code{#t} if the instrument should use MIDI channel 9." + (let* ((inst (symbol->string instrument)) - (entry (assoc inst instrument-names-alist))) - (and entry (>= (cdr entry) 32768)))) + (entry (assoc-get inst instrument-names-alist))) + (and entry (>= entry 32768)))) (define-public (midi-program instrument) -" -returns the program of the instrument -" + "Return the program of the instrument." + (let* ((inst (symbol->string instrument)) - (entry (assoc inst instrument-names-alist))) - (if entry (modulo (cdr entry) 32768) #f))) + (entry (assoc-get inst instrument-names-alist))) + (if entry + (modulo entry 32768) + #f))) ;; 90 == 90/127 == 0.71 is supposed to be the default value ;; urg: we should set this at start of track (define-public dynamic-default-volume 0.71) (define-public (alterations-in-key pitch-list) - "Count number of sharps minus number of flats" - - (* (apply + (map cdr pitch-list)) 2)) + "Count number of sharps minus number of flats." + (apply + (map (lambda (p) (round (* (cdr p) 2))) pitch-list)) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -290,7 +296,7 @@ returns the program of the instrument loop ((perfs performances) (count (if (null? rest) 0 (car rest)))) - (if (pair? perfs) + (if (pair? perfs) (begin (ly:performance-write (car perfs) diff --git a/scm/modal-transforms.scm b/scm/modal-transforms.scm new file mode 100644 index 0000000000..151fb8c3be --- /dev/null +++ b/scm/modal-transforms.scm @@ -0,0 +1,239 @@ +;;; modal-transforms.scm --- Modal transposition, inversion, and retrograde. + +;; Copyright (C) 2011 Ellis & Grant, Inc. + +;; Author: Michael Ellis + +;; COPYRIGHT NOTICE + +;; 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 2 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, write to the Free Software +;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + + +(define (transposer-factory scale) + "Returns a transposer for the specified @var{scale}. +It is an error if either argument to a transposer is not in the scale +it was created with. A transposer knows nothing about LilyPond +internals. It treats scales as an ordered list of arbitrary items and +pitches as members of a scale. +" + + (define (index item lis) + (list-index (lambda (x) (equal? item x)) lis)) + + (lambda (from-pitch to-pitch pitch) + (cond + ((not (member from-pitch scale)) + (ly:warning (_i "'from' pitch not in scale; ignoring")) + pitch) + + ((not (member to-pitch scale)) + (ly:warning (_i "'to' pitch not in scale; ignoring")) + pitch) + + ((not (member pitch scale)) + (ly:warning (_i "pitch to be transposed not in scale; ignoring")) + pitch) + + (else + (list-ref scale + (modulo + (+ (index pitch scale) + (- (index to-pitch scale) + (index from-pitch scale))) + (length scale))))))) + +(define (inverter-factory scale) + "Returns an inverter for the specified @var{scale}. +It is an error if either argument to an inverter +is not in the scale it was created with. An inverter knows nothing +about LilyPond internals. It treats scales as an ordered list of +arbitrary items and pitches as members of a scale. +" + + (define (index item lis) + (list-index (lambda (x) (equal? item x)) lis)) + + (lambda (around-pitch to-pitch pitch) + (cond + ((not (member around-pitch scale)) + (ly:warning (_i "'around' pitch not in scale; ignoring")) + pitch) + + ((not (member to-pitch scale)) + (ly:warning (_i "'to' pitch not in scale; ignoring")) + pitch) + + ((not (member pitch scale)) + (ly:warning (_i "pitch to be inverted not in scale; ignoring")) + pitch) + + (else + (list-ref scale + (modulo + (+ (index to-pitch scale) + (- (index around-pitch scale) + (index pitch scale))) + (length scale))))))) + +(define (replicate-modify lis n mod-proc) + "Apply @code{(mod-proc lis n)} to each element of a list and +concatenate the results. Knows nothing of LilyPond internals." + (cond + ((< n 0) + (ly:warning (_i "negative replication count; ignoring"))) + ((= n 0) + '()) + ((= n 1) + (mod-proc lis 1)) + ((> n 1) + (append + (replicate-modify lis (- n 1) mod-proc) + (mod-proc lis n))))) + + + +(define-public (change-pitches music converter) + "Recurse through @var{music}, applying @var{converter} to pitches. +Converter is typically a transposer or an inverter as defined above in +this module, but may be user-defined. The converter function must take +a single pitch as its argument and return a new pitch. These are +LilyPond scheme pitches, e.g. @code{(ly:make-pitch 0 2 0)} +" + (let ((elements (ly:music-property music 'elements)) + (element (ly:music-property music 'element)) + (pitch (ly:music-property music 'pitch))) + + (cond + ((ly:pitch? pitch) + (ly:music-set-property! music 'pitch (converter pitch))) + + ((pair? elements) + (map (lambda (x) (change-pitches x converter)) elements)) + + ((ly:music? element) + (change-pitches element converter))))) + + +(define (extract-pitch-sequence music) + "Recurse through @var{music}, extracting pitches. +Returns a list of pitch objects, e.g +@code{'((ly:make-pitch 0 2 0) (ly:make-pitch 0 4 0) ... )} +Typically used to construct a scale for input to transposer-factory +(see). +" + + (let ((elements (ly:music-property music 'elements)) + (element (ly:music-property music 'element)) + (pitch (ly:music-property music 'pitch))) + + (cond + ((ly:pitch? pitch) + pitch) + + ((pair? elements) + (map + (lambda (x) (extract-pitch-sequence x)) + elements)) + + ((ly:music? element) + (extract-pitch-sequence element))))) + +(define (make-scale music) + "Convenience wrapper for extract-pitch-sequence." + (map car (extract-pitch-sequence music))) + + +(define (make-extended-scale music) + "Extend scale given by @var{music} by 5 octaves up and down." + ;; This is a bit of a hack since, in theory, someone might want to + ;; transpose further than 5 octaves from the original scale + ;; definition. In practice this seems unlikely to occur very often. + (define extender + (lambda (lis n) + (map + (lambda (i) + (ly:make-pitch + (+ (- n 6) (ly:pitch-octave i)) + (ly:pitch-notename i) + (ly:pitch-alteration i))) + lis))) + + (let ((scale (make-scale music))) + (replicate-modify scale 11 extender))) + + +;; ------------- PUBLIC FUNCTIONS ----------------------------- + +(define-public (make-modal-transposer from-pitch to-pitch scale) + "Wrapper function for transposer-factory." + (let ((transposer (transposer-factory (make-extended-scale scale))) + (from (car (extract-pitch-sequence from-pitch))) + (to (car (extract-pitch-sequence to-pitch)))) + + (lambda (p) + (transposer from to p)))) + +(define-public (make-modal-inverter around-pitch to-pitch scale) + "Wrapper function for inverter-factory" + (let ((inverter (inverter-factory (make-extended-scale scale))) + (around (car (extract-pitch-sequence around-pitch))) + (to (car (extract-pitch-sequence to-pitch)))) + + (lambda (p) + (inverter around to p)))) + + +(define-public (retrograde-music music) + "Returns @var{music} in retrograde (reversed) order." + ;; Copied from LSR #105 and renamed. + ;; Included here to allow this module to provide a complete set of + ;; common formal operations on motives, i.e transposition, + ;; inversion and retrograding. + + (let* ((elements (ly:music-property music 'elements)) + (reversed (reverse elements)) + (element (ly:music-property music 'element)) + (span-dir (ly:music-property music 'span-direction))) + + (ly:music-set-property! music 'elements reversed) + + (if (ly:music? element) + (ly:music-set-property! + music 'element + (retrograde-music element))) + + (if (ly:dir? span-dir) + (ly:music-set-property! music 'span-direction (- span-dir))) + + (map retrograde-music reversed) + + music)) + +(define-public (pitch-invert around to music) + "If @var{music} is a single pitch, inverts it about @var{around} +and transposes from @var{around} to @var{to}." + (let ((p (ly:music-property music 'pitch))) + (if (ly:pitch? p) + (ly:music-set-property! + music 'pitch + (ly:pitch-transpose to (ly:pitch-diff around p)))) + music)) + +(define-public (music-invert around-pitch to-pitch music) + "Applies pitch-invert to all pitches in @var{music}." + (let ((around (car (extract-pitch-sequence around-pitch))) + (to (car (extract-pitch-sequence to-pitch)))) + (music-map (lambda (x) (pitch-invert around to x)) music))) + diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 8edb658627..8d828db869 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -1,11 +1,22 @@ -;;;; music-functions.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . -;; (use-modules (ice-9 optargs)) +;; (use-modules (ice-9 optargs)) ;;; ly:music-property with setter ;;; (ly:music-property my-music 'elements) @@ -25,18 +36,30 @@ (make-procedure-with-setter ly:grob-property ly:grob-set-property!)) +(define-public ly:grob-object + (make-procedure-with-setter ly:grob-object + ly:grob-set-object!)) + +(define-public ly:grob-parent + (make-procedure-with-setter ly:grob-parent + ly:grob-set-parent!)) + (define-public ly:prob-property (make-procedure-with-setter ly:prob-property ly:prob-set-property!)) +(define-public ly:context-property + (make-procedure-with-setter ly:context-property + ly:context-set-property!)) + (define-public (music-map function music) "Apply @var{function} to @var{music} and all of the music it contains. -First it recurses over the children, then the function is applied to MUSIC. -" +First it recurses over the children, then the function is applied to +@var{music}." (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element))) - (set! (ly:music-property music 'elements) + (set! (ly:music-property music 'elements) (map (lambda (y) (music-map function y)) es)) (if (ly:music? e) (set! (ly:music-property music 'element) @@ -44,8 +67,8 @@ First it recurses over the children, then the function is applied to MUSIC. (function music))) (define-public (music-filter pred? music) - "Filter out music expressions that do not satisfy PRED." - + "Filter out music expressions that do not satisfy @var{pred?}." + (define (inner-music-filter pred? music) "Recursive function." (let* ((es (ly:music-property music 'elements)) @@ -73,10 +96,11 @@ First it recurses over the children, then the function is applied to MUSIC. (make-music 'Music))) ;must return music. (define-public (display-music music) - "Display music, not done with music-map for clarity of presentation." + "Display music, not done with @code{music-map} for clarity of +presentation." (display music) - (display ": { ") + (display ": { ") (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element))) (display (ly:music-mutable-properties music)) @@ -96,7 +120,7 @@ First it recurses over the children, then the function is applied to MUSIC. ;;; (define (markup-expression->make-markup markup-expression) "Transform `markup-expression' into an equivalent, hopefuly readable, scheme expression. -For instance, +For instance, \\markup \\bold \\italic hello ==> (markup #:line (#:bold (#:italic (#:simple \"hello\"))))" @@ -111,7 +135,7 @@ For instance, ((and (not (string? arg)) (markup? arg)) ;; a markup (inner-markup->make-markup arg)) (else ;; scheme arg - arg))) + (music->make-music arg)))) (define (inner-markup->make-markup mrkup) (if (string? mrkup) `(#:simple ,mrkup) @@ -124,14 +148,15 @@ For instance, `(markup ,@(inner-markup->make-markup markup-expression)))) (define-public (music->make-music obj) - "Generate a expression that, once evaluated, may return an object equivalent to `obj', -that is, for a music expression, a (make-music ...) form." + "Generate an expression that, once evaluated, may return an object +equivalent to @var{obj}, that is, for a music expression, a +@code{(make-music ...)} form." (cond (;; markup expression (markup? obj) (markup-expression->make-markup obj)) (;; music expression (ly:music? obj) - `(make-music + `(make-music ',(ly:music-property obj 'name) ,@(apply append (map (lambda (prop) `(',(car prop) @@ -170,7 +195,7 @@ that is, for a music expression, a (make-music ...) form." `(list ,@(map music->make-music obj))) (;; a pair (pair? obj) - `(cons ,(music->make-music (car obj)) + `(cons ,(music->make-music (car obj)) ,(music->make-music (cdr obj)))) (else obj))) @@ -204,9 +229,9 @@ Returns `obj'. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (shift-one-duration-log music shift dot) - " add SHIFT to duration-log of 'duration in music and optionally - a dot to any note encountered. This scales the music up by a factor - 2^shift * (2 - (1/2)^dot)" + "Add @var{shift} to @code{duration-log} of @code{'duration} in +@var{music} and optionally @var{dot} to any note encountered. This +scales the music up by a factor `2^@var{shift} * (2 - (1/2)^@var{dot})'." (let ((d (ly:music-property music 'duration))) (if (ly:duration? d) (let* ((cp (ly:duration-factor d)) @@ -222,7 +247,8 @@ Returns `obj'. music)) (define-public (make-repeat name times main alts) - "create a repeat music expression, with all properties initialized properly" + "Create a repeat music expression, with all properties initialized +properly." (define (first-note-duration music) "Finds the duration of the first NoteEvent by searching depth-first through MUSIC." @@ -246,9 +272,20 @@ through MUSIC." (set! (ly:music-property r 'element) main) (set! (ly:music-property r 'repeat-count) (max times 1)) (set! (ly:music-property r 'elements) talts) - (if (equal? name "tremolo") - (let* ((dots (1- (logcount times))) - (mult (/ (* times (ash 1 dots)) (1- (ash 2 dots)))) + (if (and (equal? name "tremolo") + (or (pair? (ly:music-property main 'elements)) + (ly:music? (ly:music-property main 'element)))) + ;; This works for single-note and multi-note tremolos! + (let* ((children (if (music-is-of-type? main 'sequential-music) + ;; \repeat tremolo n { ... } + (length (extract-named-music main 'EventChord)) + ;; \repeat tremolo n c4 + 1)) + ;; # of dots is equal to the 1 in bitwise representation (minus 1)! + (dots (1- (logcount (* times children)))) + ;; The remaining missing multiplicator to scale the notes by + ;; times * children + (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots)))) (shift (- (ly:intlog2 (floor mult)))) (note-duration (first-note-duration r)) (duration-log (if (ly:duration? note-duration) @@ -258,27 +295,31 @@ through MUSIC." (set! (ly:music-property r 'tremolo-type) tremolo-type) (if (not (integer? mult)) (ly:warning (_ "invalid tremolo repeat count: ~a") times)) - (if (memq 'sequential-music (ly:music-property main 'types)) - ;; \repeat "tremolo" { c4 d4 } - (let ((children (length (ly:music-property main 'elements)))) - - ;; fixme: should be more generic. - (if (and (not (= children 2)) - (not (= children 1))) - (ly:warning (_ "expecting 2 elements for chord tremolo, found ~a") children)) - (ly:music-compress r (ly:make-moment 1 children)) - (shift-duration-log r - (if (= children 2) (1- shift) shift) - dots)) - ;; \repeat "tremolo" c4 - (shift-duration-log r shift dots))) + ;; Adjust the time of the notes + (ly:music-compress r (ly:make-moment 1 children)) + ;; Adjust the displayed note durations + (shift-duration-log r shift dots)) r))) +(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 @var{music} vary, allowing slash beats and double-percent +beats to be distinguished." + (let* ((durs (map (lambda (elt) + (duration-of-note elt)) + (extract-named-music music 'EventChord))) + (first-dur (car durs))) + + (if (every (lambda (d) (equal? d first-dur)) durs) + (max (- (ly:duration-log first-dur) 2) 1) + 0))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; clusters. (define-public (note-to-cluster music) - "Replace NoteEvents by ClusterNoteEvents." + "Replace @code{NoteEvents} by @code{ClusterNoteEvents}." (if (eq? (ly:music-property music 'name) 'NoteEvent) (make-music 'ClusterNoteEvent 'pitch (ly:music-property music 'pitch) @@ -292,39 +333,38 @@ through MUSIC." ;; repeats. (define-public (unfold-repeats music) - " -This function replaces all repeats with unfold repeats. " + "Replace all repeats with unfolded repeats." (let ((es (ly:music-property music 'elements)) - (e (ly:music-property music 'element)) - ) - (if (memq 'repeated-music (ly:music-property music 'types)) - (let* - ((props (ly:music-mutable-properties music)) - (old-name (ly:music-property music 'name)) - (flattened (flatten-alist props))) + (e (ly:music-property music 'element))) + (if (memq 'repeated-music (ly:music-property music 'types)) + (let* ((props (ly:music-mutable-properties music)) + (old-name (ly:music-property music 'name)) + (flattened (flatten-alist props))) (set! music (apply make-music (cons 'UnfoldedRepeatedMusic flattened))) (if (equal? old-name 'TremoloRepeatedMusic) (let* ((seq-arg? (memq 'sequential-music (ly:music-property e 'types))) - (count (ly:music-property music 'repeat-count)) + (count (ly:music-property music 'repeat-count)) (dot-shift (if (= 0 (remainder count 3)) - -1 0))) + -1 0)) + (child-count (if seq-arg? + (length (ly:music-property e 'elements)) + 0))) (if (= 0 -1) (set! count (* 2 (quotient count 3)))) - - (shift-duration-log music (+ (if seq-arg? 1 0) + + (shift-duration-log music (+ (if (= 2 child-count) + 1 0) (ly:intlog2 count)) dot-shift) - + (if seq-arg? - (ly:music-compress e (ly:make-moment (length (ly:music-property - e 'elements)) 1))))))) - - + (ly:music-compress e (ly:make-moment child-count 1))))))) + (if (pair? es) (set! (ly:music-property music 'elements) (map unfold-repeats es))) @@ -337,8 +377,8 @@ This function replaces all repeats with unfold repeats. " ;; property setting music objs. (define-public (make-grob-property-set grob gprop val) - "Make a Music expression that sets GPROP to VAL in GROB. Does a pop first, -i.e. this is not an override" + "Make a @code{Music} expression that sets @var{gprop} to @var{val} in +@var{grob}. Does a pop first, i.e., this is not an override." (make-music 'OverrideProperty 'symbol grob 'grob-property gprop @@ -346,15 +386,15 @@ i.e. this is not an override" 'pop-first #t)) (define-public (make-grob-property-override grob gprop val) - "Make a Music expression that sets GPROP to VAL in GROB. Does a pop first, -i.e. this is not an override" + "Make a @code{Music} expression that overrides @var{gprop} to @var{val} +in @var{grob}." (make-music 'OverrideProperty 'symbol grob 'grob-property gprop 'grob-value val)) (define-public (make-grob-property-revert grob gprop) - "Revert the grob property GPROP for GROB." + "Revert the grob property @var{gprop} for @var{grob}." (make-music 'RevertProperty 'symbol grob 'grob-property gprop)) @@ -384,15 +424,20 @@ i.e. this is not an override" ;; TODO: take this from voicedGraceSettings or similar. '((Voice Stem font-size -3) (Voice NoteHead font-size -3) + (Voice TabNoteHead font-size -4) (Voice Dots font-size -3) (Voice Stem length-fraction 0.8) (Voice Stem no-stem-extend #t) - (Voice Beam thickness 0.384) + (Voice Beam beam-thickness 0.384) (Voice Beam length-fraction 0.8) - (Voice Accidental font-size -4))) - + (Voice Accidental font-size -4) + (Voice AccidentalCautionary font-size -4) + (Voice Script font-size -3) + (Voice Fingering font-size -8) + (Voice StringNumber font-size -8))) + (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2)) - (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) + (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) (define-safe-public (make-voice-props-revert) (make-sequential-music @@ -405,7 +450,7 @@ i.e. this is not an override" (define-safe-public (context-spec-music m context #:optional id) - "Add \\context CONTEXT = ID to M. " + "Add \\context CONTEXT = ID to M." (let ((cm (make-music 'ContextSpeccedMusic 'element m 'context-type context))) @@ -414,7 +459,7 @@ i.e. this is not an override" cm)) (define-public (descend-to-context m context) - "Like context-spec-music, but only descending. " + "Like @code{context-spec-music}, but only descending." (let ((cm (context-spec-music m context))) (ly:music-set-property! cm 'descend-only #t) cm)) @@ -464,80 +509,23 @@ i.e. this is not an override" (make-music 'PropertyUnset 'symbol sym)) -(define-public (make-ottava-set octavation) - (let ((m (make-music 'ApplyContext))) - (define (ottava-modify context) - "Either reset middleCPosition to the stored original, or remember -old middleCPosition, add OCTAVATION to middleCPosition, and set -OTTAVATION to `8va', or whatever appropriate." - (if (number? (ly:context-property context 'middleCOffset)) - (let ((where (ly:context-property-where-defined context 'middleCOffset))) - (ly:context-unset-property where 'middleCOffset) - (ly:context-unset-property where 'ottavation))) - - (let* ((offset (* -7 octavation)) - (string (cdr (assoc octavation '((2 . "15ma") - (1 . "8va") - (0 . #f) - (-1 . "8vb") - (-2 . "15mb")))))) - (ly:context-set-property! context 'middleCOffset offset) - (ly:context-set-property! context 'ottavation string) - (ly:set-middle-C! context))) - (set! (ly:music-property m 'procedure) ottava-modify) - (context-spec-music m 'Staff))) - -(define-public (set-octavation ottavation) - (ly:export (make-ottava-set ottavation))) - -(define-public (make-time-signature-set num den . rest) - "Set properties for time signature NUM/DEN. Rest can contain a list -of beat groupings " - - (define (standard-beat-grouping num den) - - "Some standard subdivisions for time signatures." - (let* - ((key (cons num den)) - (entry (assoc key '(((6 . 8) . (3 3)) - ((5 . 8) . (3 2)) - ((9 . 8) . (3 3 3)) - ((12 . 8) . (3 3 3 3)) - ((8 . 8) . (3 3 2)) - )))) - - (if entry - (cdr entry) - '()))) - - (let* ((set1 (make-property-set 'timeSignatureFraction (cons num den))) - (beat (ly:make-moment 1 den)) - (len (ly:make-moment num den)) - (set2 (make-property-set 'beatLength beat)) - (set3 (make-property-set 'measureLength len)) - (set4 (make-property-set 'beatGrouping (if (pair? rest) - (car rest) - (standard-beat-grouping num den)))) - (basic (list set1 set2 set3 set4))) - (descend-to-context - (context-spec-music (make-sequential-music basic) 'Timing) 'Score))) - -(define-public (make-mark-set label) - "Make the music for the \\mark command." - (let* ((set (if (integer? label) - (context-spec-music (make-property-set 'rehearsalMark label) - 'Score) - #f)) - (ev (make-music 'MarkEvent)) - (ch (make-event-chord (list ev)))) - (if set - (make-sequential-music (list set ch)) - (begin - (set! (ly:music-property ev 'label) label) - ch)))) +;;; Need to keep this definition for \time calls from parser +(define-public (make-time-signature-set num den) + "Set properties for time signature @var{num}/@var{den}." + (make-music 'TimeSignatureMusic + 'numerator num + 'denominator den + 'beat-structure '())) +;;; Used for calls that include beat-grouping setting (define-public (set-time-signature num den . rest) - (ly:export (apply make-time-signature-set `(,num ,den . ,rest)))) + "Set properties for time signature @var{num}/@var{den}. +If @var{rest} is present, it is used to set @code{beatStructure}." + (ly:export + (make-music 'TimeSignatureMusic + 'numerator num + 'denominator den + 'beat-structure (if (null? rest) rest (car rest))))) (define-safe-public (make-articulation name) (make-music 'ArticulationEvent @@ -552,15 +540,50 @@ of beat groupings " (make-music type 'span-direction span-dir)) -(define-public (set-mus-properties! m alist) - "Set all of ALIST as properties of M." +(define-public (override-head-style heads style) + "Override style for @var{heads} to @var{style}." + (make-sequential-music + (if (pair? heads) + (map (lambda (h) + (make-grob-property-override h 'style style)) + heads) + (list (make-grob-property-override heads 'style style))))) + +(define-public (revert-head-style heads) + "Revert style for @var{heads}." + (make-sequential-music + (if (pair? heads) + (map (lambda (h) + (make-grob-property-revert h 'style)) + heads) + (list (make-grob-property-revert heads 'style))))) + +(define-public (style-note-heads heads style music) + "Set @var{style} for all @var{heads} in @var{music}. Works both +inside of and outside of chord construct." + ;; are we inside a <...>? + (if (eq? (ly:music-property music 'name) 'NoteEvent) + ;; yes -> use a tweak + (begin + (set! (ly:music-property music 'tweaks) + (acons 'style style (ly:music-property music 'tweaks))) + music) + ;; not in <...>, so use overrides + (make-sequential-music + (list + (override-head-style heads style) + music + (revert-head-style heads))))) + + (define-public (set-mus-properties! m alist) + "Set all of @var{alist} as properties of @var{m}." (if (pair? alist) (begin (set! (ly:music-property m (caar alist)) (cdar alist)) (set-mus-properties! m (cdr alist))))) (define-public (music-separator? m) - "Is M a separator?" + "Is @var{m} a separator?" (let ((ts (ly:music-property m 'types))) (memq 'separator ts))) @@ -568,10 +591,10 @@ of beat groupings " (define (voicify-list lst number) "Make a list of Musics. - voicify-list :: [ [Music ] ] -> number -> [Music] - LST is a list music-lists. +voicify-list :: [ [Music ] ] -> number -> [Music] +LST is a list music-lists. - NUMBER is 0-base, i.e. Voice=1 (upstems) has number 0. +NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0. " (if (null? lst) '() @@ -579,7 +602,7 @@ of beat groupings " (make-sequential-music (list (make-voice-props-set number) (make-simultaneous-music (car lst)))) - 'Voice (number->string (1+ number))) + 'Bottom (number->string (1+ number))) (voicify-list (cdr lst) (1+ number))))) (define (voicify-chord ch) @@ -590,7 +613,7 @@ of beat groupings " ch)) (define-public (voicify-music m) - "Recursively split chords that are separated with \\ " + "Recursively split chords that are separated with @code{\\\\}." (if (not (ly:music? m)) (ly:error (_ "music expected: ~S") m)) (let ((es (ly:music-property m 'elements)) @@ -608,12 +631,10 @@ of beat groupings " (define-public (empty-music) (ly:export (make-music 'Music))) -;; Make a function that checks score element for being of a specific type. +;; Make a function that checks score element for being of a specific type. (define-public (make-type-checker symbol) (lambda (elt) - ;;(display symbol) - ;;(eq? #t (ly:grob-property elt symbol)) - (not (eq? #f (memq symbol (ly:grob-property elt 'interfaces)))))) + (grob::has-interface elt symbol))) (define-public ((outputproperty-compatibility func sym val) grob g-context ao-context) (if (func grob) @@ -621,25 +642,20 @@ of beat groupings " (define-public ((set-output-property grob-name symbol val) grob grob-c context) - "Usage: - -\\applyoutput #(set-output-property 'Clef 'extra-offset '(0 . 1)) - -" + "Usage example: +@code{\\applyoutput #(set-output-property 'Clef 'extra-offset '(0 . 1))}" (let ((meta (ly:grob-property grob 'meta))) - (if (equal? (cdr (assoc 'name meta)) grob-name) + (if (equal? (assoc-get 'name meta) grob-name) (set! (ly:grob-property grob symbol) val)))) ;; (define-public (smart-bar-check n) - "Make a bar check that checks for a specific bar number. -" + "Make a bar check that checks for a specific bar number." (let ((m (make-music 'ApplyContext))) (define (checker tr) (let* ((bn (ly:context-property tr 'currentBarNumber))) - (if (= bn n) - #t + (or (= bn n) (ly:error ;; FIXME: uncomprehensable message (_ "Bar check failed. Expect to be at ~a, instead at ~a") @@ -649,9 +665,8 @@ of beat groupings " (define-public (skip->rest mus) - - "Replace MUS by RestEvent of the same duration if it is a -SkipEvent. Useful for extracting parts from crowded scores" + "Replace @var{mus} by @code{RestEvent} of the same duration if it is a +@code{SkipEvent}. Useful for extracting parts from crowded scores." (if (memq (ly:music-property mus 'name) '(SkipEvent SkipMusic)) (make-music 'RestEvent 'duration (ly:music-property mus 'duration)) @@ -697,20 +712,20 @@ SkipEvent. Useful for extracting parts from crowded scores" nv)) (define (vector-map f v) - "Map F over V. This function returns nothing." + "Map F over V. This function returns nothing." (do ((n (vector-length v)) (i 0 (+ i 1))) ((>= i n)) (f (vector-ref v i)))) (define (vector-reverse-map f v) - "Map F over V, N to 0 order. This function returns nothing." + "Map F over V, N to 0 order. This function returns nothing." (do ((i (- (vector-length v) 1) (- i 1))) ((< i 0)) (f (vector-ref v i)))) (define-public (add-grace-property context-name grob sym val) - "Set SYM=VAL for GROB in CONTEXT-NAME. " + "Set @var{sym}=@var{val} for @var{grob} in @var{context-name}." (define (set-prop context) (let* ((where (ly:context-property-where-defined context 'graceSettings)) (current (ly:context-property where 'graceSettings)) @@ -720,7 +735,7 @@ SkipEvent. Useful for extracting parts from crowded scores" (ly:export (context-spec-music (make-apply-context set-prop) 'Voice))) (define-public (remove-grace-property context-name grob sym) - "Remove all SYM for GROB in CONTEXT-NAME. " + "Remove all @var{sym} for @var{grob} in @var{context-name}." (define (sym-grob-context? property sym grob context-name) (and (eq? (car property) context-name) (eq? (cadr property) grob) @@ -728,11 +743,11 @@ SkipEvent. Useful for extracting parts from crowded scores" (define (delete-prop context) (let* ((where (ly:context-property-where-defined context 'graceSettings)) (current (ly:context-property where 'graceSettings)) - (prop-settings (filter + (prop-settings (filter (lambda(x) (sym-grob-context? x sym grob context-name)) - current)) + current)) (new-settings current)) - (for-each (lambda(x) + (for-each (lambda(x) (set! new-settings (delete x new-settings))) prop-settings) (ly:context-set-property! where 'graceSettings new-settings))) @@ -774,29 +789,35 @@ Syntax: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (cue-substitute quote-music) - "Must happen after quote-substitute." - + "Must happen after @code{quote-substitute}." + (if (vector? (ly:music-property quote-music 'quoted-events)) (let* ((dir (ly:music-property quote-music 'quoted-voice-direction)) + (clef (ly:music-property quote-music 'quoted-music-clef)) (main-voice (if (eq? 1 dir) 1 0)) (cue-voice (if (eq? 1 dir) 0 1)) (main-music (ly:music-property quote-music 'element)) (return-value quote-music)) (if (or (eq? 1 dir) (eq? -1 dir)) - + ;; if we have stem dirs, change both quoted and main music ;; to have opposite stems. (begin (set! return-value - ;; cannot context-spec Quote-music, since context ;; for the quotes is determined in the iterator. (make-sequential-music (list + (if (null? clef) + (make-music 'Music) + (make-cue-clef-set clef)) (context-spec-music (make-voice-props-set cue-voice) 'CueVoice "cue") quote-music - (context-spec-music (make-voice-props-revert) 'CueVoice "cue")))) + (context-spec-music (make-voice-props-revert) 'CueVoice "cue") + (if (null? clef) + (make-music 'Music) + (make-cue-clef-unset))))) (set! main-music (make-sequential-music (list @@ -810,11 +831,10 @@ Syntax: (define-public ((quote-substitute quote-tab) music) (let* ((quoted-name (ly:music-property music 'quoted-music-name)) - (quoted-vector (if (string? quoted-name) - (hash-ref quote-tab quoted-name #f) - #f))) + (quoted-vector (and (string? quoted-name) + (hash-ref quote-tab quoted-name #f)))) + - (if (string? quoted-name) (if (vector? quoted-vector) (begin @@ -841,7 +861,7 @@ Syntax: (if (and (ly:music? m) (eq? (ly:music-property m 'error-found) #t)) (set! found #t))) - + (for-each signal (ly:music-property music 'elements)) (signal (ly:music-property music 'element)) @@ -855,37 +875,26 @@ Syntax: music) (define-public (make-duration-of-length moment) - "Make duration of the given MOMENT length." + "Make duration of the given @code{moment} length." (ly:make-duration 0 0 (ly:moment-main-numerator moment) (ly:moment-main-denominator moment))) -(define (skip-this moment) - "set skipTypesetting, make SkipMusic of the given MOMENT length, - and then unset skipTypesetting." - (make-sequential-music - (list - (context-spec-music (make-property-set 'skipTypesetting #t) - 'Score) - (make-music 'SkipMusic 'duration - (make-duration-of-length moment)) - (context-spec-music (make-property-set 'skipTypesetting #f) - 'Score)))) - -(define (unskip-this moment) - "unset skipTypesetting, make SkipMusic of the given MOMENT length, - and then set skipTypesetting." +(define (make-skipped moment bool) + "Depending on BOOL, set or unset skipTypesetting, +then make SkipMusic of the given MOMENT length, and +then revert skipTypesetting." (make-sequential-music (list - (context-spec-music (make-property-set 'skipTypesetting #f) + (context-spec-music (make-property-set 'skipTypesetting bool) 'Score) (make-music 'SkipMusic 'duration (make-duration-of-length moment)) - (context-spec-music (make-property-set 'skipTypesetting #t) + (context-spec-music (make-property-set 'skipTypesetting (not bool)) 'Score)))) (define (skip-as-needed music parser) - "Replace MUSIC by + "Replace MUSIC by << { \\set skipTypesetting = ##f LENGTHOF(\\showFirstLength) \\set skipTypesetting = ##t @@ -896,51 +905,54 @@ Syntax: When only showFirstLength is set, the 'length property of the music is overridden to speed up compiling." - (let* - ((show-last (ly:parser-lookup parser 'showLastLength)) - (show-first (ly:parser-lookup parser 'showFirstLength))) - (cond - - ;; both properties may be set. - ((and (ly:music? show-first) (ly:music? show-last)) - (let* - ((orig-length (ly:music-length music)) - (skip-length (ly:moment-sub orig-length (ly:music-length show-last))) - (begin-length (ly:music-length show-first))) - (make-simultaneous-music - (list - (make-sequential-music - (list - (skip-this skip-length) - ;; let's draw a separator between the beginning and the end - (context-spec-music (make-property-set 'whichBar "||") - 'Timing))) - (unskip-this begin-length) - music)))) - - ;; we may only want to print the last length - ((ly:music? show-last) - (let* - ((orig-length (ly:music-length music)) - (skip-length (ly:moment-sub orig-length (ly:music-length show-last)))) - (make-simultaneous-music - (list - (skip-this skip-length) - music)))) - - ;; we may only want to print the beginning; in this case - ;; only the first length will be processed (much faster). - ((ly:music? show-first) - (let* - ((orig-length (ly:music-length music)) - (begin-length (ly:music-length show-first))) - ;; the first length must not exceed the original length. - (if (ly:moment (* prev-alt this-alt) 0))) (set! need-restore #t)))))) (cons need-restore need-accidental))) (define-public ((make-accidental-rule octaveness laziness) context pitch barnum measurepos) - "Creates an accidental rule that makes its decision based on the octave of the note - and a laziness value. - octaveness is either 'same-octave or 'any-octave and defines whether the rule should - respond to accidental changes in other octaves than the current. 'same-octave is the - normal way to typeset accidentals - an accidental is made if the alteration is different - from the last active pitch in the same octave. 'any-octave looks at the last active pitch - in any octave. - laziness states over how many bars an accidental should be remembered. - 0 is default - accidental lasts over 0 bar lines, that is, to the end of current measure. - A positive integer means that the accidental lasts over that many bar lines. - -1 is 'forget immediately', that is, only look at key signature. - #t is forever." + "Create an accidental rule that makes its decision based on the octave of +the note and a laziness value. + +@var{octaveness} is either @code{'same-octave} or @code{'any-octave} and +defines whether the rule should respond to accidental changes in other +octaves than the current. @code{'same-octave} is the normal way to typeset +accidentals -- an accidental is made if the alteration is different from the +last active pitch in the same octave. @code{'any-octave} looks at the last +active pitch in any octave. + +@var{laziness} states over how many bars an accidental should be remembered. +@code{0}@tie{}is the default -- accidental lasts over 0@tie{}bar lines, that +is, to the end of current measure. A positive integer means that the +accidental lasts over that many bar lines. @code{-1} is `forget +immediately', that is, only look at key signature. @code{#t} is `forever'." + (check-pitch-against-signature context pitch barnum laziness octaveness)) (define (key-entry-notename entry) - "Return the pitch of an entry in localKeySignature. The entry is either of the form + "Return the pitch of an entry in localKeySignature. The entry is either of the form '(notename . alter) or '((octave . notename) . (alter barnum . measurepos))." (if (number? (car entry)) (car entry) @@ -1121,42 +1141,43 @@ specifies whether accidentals should be canceled in different octaves." (and (pair? (car entry)) (cdddr entry))) (define (key-entry-alteration entry) - "Return the alteration of an entry in localKeySignature." - (if (number? (car entry)) - (cdr entry) - (cadr entry))) + "Return the alteration of an entry in localKeySignature. + +For convenience, returns @code{0} if entry is @code{#f}." + (if entry + (if (number? (car entry)) + (cdr entry) + (cadr entry)) + 0)) (define-public (find-pitch-entry keysig pitch accept-global accept-local) - "Return the first entry in keysig that matches the pitch. - accept-global states whether key signature entries should be included. - accept-local states whether local accidentals should be included. - if no matching entry is found, #f is returned." - (if (pair? keysig) - (let* ((entry (car keysig)) - (entryoct (key-entry-octave entry)) - (entrynn (key-entry-notename entry)) - (oct (ly:pitch-octave pitch)) - (nn (ly:pitch-notename pitch))) - (if (and (equal? nn entrynn) - (or (and accept-global (equal? #f entryoct)) - (and accept-local (equal? oct entryoct)))) - entry - (find-pitch-entry (cdr keysig) pitch accept-global accept-local))) - #f)) + "Return the first entry in @var{keysig} that matches @var{pitch}. +@var{accept-global} states whether key signature entries should be included. +@var{accept-local} states whether local accidentals should be included. +If no matching entry is found, @var{#f} is returned." + (and (pair? keysig) + (let* ((entry (car keysig)) + (entryoct (key-entry-octave entry)) + (entrynn (key-entry-notename entry)) + (oct (ly:pitch-octave pitch)) + (nn (ly:pitch-notename pitch))) + (if (and (equal? nn entrynn) + (or (and accept-global (not entryoct)) + (and accept-local (equal? oct entryoct)))) + entry + (find-pitch-entry (cdr keysig) pitch accept-global accept-local))))) (define-public (neo-modern-accidental-rule context pitch barnum measurepos) - "an accidental rule that typesets an accidental if it differs from the key signature - AND does not directly follow a note on the same staff-line. - This rule should not be used alone because it does neither look at bar lines - nor different accidentals at the same notename" + "An accidental rule that typesets an accidental if it differs from the +key signature @emph{and} does not directly follow a note on the same +staff line. This rule should not be used alone because it does neither +look at bar lines nor different accidentals at the same note name." (let* ((keysig (ly:context-property context 'localKeySignature)) (entry (find-pitch-entry keysig pitch #t #t))) - (if (equal? #f entry) + (if (not entry) (cons #f #f) (let* ((global-entry (find-pitch-entry keysig pitch #t #f)) - (key-acc (if (equal? global-entry #f) - 0 - (key-entry-alteration global-entry))) + (key-acc (key-entry-alteration global-entry)) (acc (ly:pitch-alteration pitch)) (entrymp (key-entry-measure-position entry)) (entrybn (key-entry-bar-number entry))) @@ -1164,17 +1185,15 @@ specifies whether accidentals should be canceled in different octaves." (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))) (define-public (teaching-accidental-rule context pitch barnum measurepos) - "an accidental rule that typesets a cautionary accidental - if it is included in the key signature AND does not directly follow - a note on the same staff-line." + "An accidental rule that typesets a cautionary accidental if it is +included in the key signature @emph{and} does not directly follow a note +on the same staff line." (let* ((keysig (ly:context-property context 'localKeySignature)) (entry (find-pitch-entry keysig pitch #t #t))) - (if (equal? #f entry) + (if (not entry) (cons #f #f) (let* ((global-entry (find-pitch-entry keysig pitch #f #f)) - (key-acc (if (equal? global-entry #f) - 0 - (key-entry-alteration global-entry))) + (key-acc (key-entry-alteration global-entry)) (acc (ly:pitch-alteration pitch)) (entrymp (key-entry-measure-position entry)) (entrybn (key-entry-bar-number entry))) @@ -1194,9 +1213,10 @@ specifies whether accidentals should be canceled in different octaves." context)) (define-public (set-accidental-style style . rest) - "Set accidental style to STYLE. Optionally takes a context argument, -e.g. 'Staff or 'Voice. The context defaults to Staff, except for piano styles, which -use GrandStaff as a context. " + "Set accidental style to @var{style}. Optionally take a context +argument, e.g. @code{'Staff} or @code{'Voice}. The context defaults +to @code{Staff}, except for piano styles, which use @code{GrandStaff} +as a context." (let ((context (if (pair? rest) (car rest) 'Staff)) (pcontext (if (pair? rest) @@ -1249,6 +1269,29 @@ use GrandStaff as a context. " ,(make-accidental-rule 'same-octave 1) ,neo-modern-accidental-rule) context)) + ((equal? style 'neo-modern-voice) + (set-accidentals-properties #f + `(Voice ,(make-accidental-rule 'same-octave 0) + ,(make-accidental-rule 'any-octave 0) + ,(make-accidental-rule 'same-octave 1) + ,neo-modern-accidental-rule + Staff ,(make-accidental-rule 'same-octave 0) + ,(make-accidental-rule 'any-octave 0) + ,(make-accidental-rule 'same-octave 1) + ,neo-modern-accidental-rule) + '() + context)) + ((equal? style 'neo-modern-voice-cautionary) + (set-accidentals-properties #f + `(Voice ,(make-accidental-rule 'same-octave 0)) + `(Voice ,(make-accidental-rule 'any-octave 0) + ,(make-accidental-rule 'same-octave 1) + ,neo-modern-accidental-rule + Staff ,(make-accidental-rule 'same-octave 0) + ,(make-accidental-rule 'any-octave 0) + ,(make-accidental-rule 'same-octave 1) + ,neo-modern-accidental-rule) + context)) ;; Accidentals as they were common in dodecaphonic music with no tonality. ;; Each note gets one accidental. ((equal? style 'dodecaphonic) @@ -1303,14 +1346,14 @@ use GrandStaff as a context. " pcontext)) ;; same as modern, but cautionary accidentals are printed for all sharp or flat - ;; tones specified by the key signature. + ;; tones specified by the key signature. ((equal? style 'teaching) (set-accidentals-properties #f `(Staff ,(make-accidental-rule 'same-octave 0)) `(Staff ,(make-accidental-rule 'same-octave 1) ,teaching-accidental-rule) context)) - + ;; do not set localKeySignature when a note alterated differently from ;; localKeySignature is found. ;; Causes accidentals to be printed at every note instead of @@ -1334,10 +1377,40 @@ use GrandStaff as a context. " (ly:warning (_ "unknown accidental style: ~S") style) (make-sequential-music '())))))) +(define-public (invalidate-alterations context) + "Invalidate alterations in @var{context}. + +Elements of @code{'localKeySignature} corresponding to local +alterations of the key signature have the form +@code{'((octave . notename) . (alter barnum . measurepos))}. +Replace them with a version where @code{alter} is set to @code{'clef} +to force a repetition of accidentals. + +Entries that conform with the current key signature are not invalidated." + (let* ((keysig (ly:context-property context 'keySignature))) + (set! (ly:context-property context 'localKeySignature) + (map-in-order + (lambda (entry) + (let* ((localalt (key-entry-alteration entry)) + (localoct (key-entry-octave entry))) + (if (or (accidental-invalid? localalt) + (not localoct) + (= localalt + (key-entry-alteration + (find-pitch-entry + keysig + (ly:make-pitch localoct + (key-entry-notename entry) + 0) + #t #t)))) + entry + (cons (car entry) (cons 'clef (cddr entry)))))) + (ly:context-property context 'localKeySignature))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (skip-of-length mus) - "Create a skip of exactly the same length as MUS." + "Create a skip of exactly the same length as @var{mus}." (let* ((skip (make-music 'SkipEvent @@ -1346,8 +1419,8 @@ use GrandStaff as a context. " (make-event-chord (list (ly:music-compress skip (ly:music-length mus)))))) (define-public (mmrest-of-length mus) - "Create a mmrest of exactly the same length as MUS." - + "Create a multi-measure rest of exactly the same length as @var{mus}." + (let* ((skip (make-multi-measure-rest (ly:make-duration 0 0) '()))) @@ -1355,20 +1428,25 @@ use GrandStaff as a context. " skip)) (define-public (pitch-of-note event-chord) + (let ((evs (filter (lambda (x) + (music-has-type x 'note-event)) + (ly:music-property event-chord 'elements)))) - (let* - ((evs (filter (lambda (x) (memq 'note-event (ly:music-property x 'types))) - (ly:music-property event-chord 'elements)))) + (and (pair? evs) + (ly:music-property (car evs) 'pitch)))) + +(define-public (duration-of-note event-chord) + (let ((evs (filter (lambda (x) + (music-has-type x 'rhythmic-event)) + (ly:music-property event-chord 'elements)))) + + (and (pair? evs) + (ly:music-property (car evs) 'duration)))) - (if (pair? evs) - (ly:music-property (car evs) 'pitch) - #f))) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (extract-named-music music music-name) -"Return a flat list of all music named @code{music-name} -from @code{music}." + "Return a flat list of all music named @var{music-name} from @var{music}." (let ((extracted-list (if (ly:music? music) (if (eq? (ly:music-property music 'name) music-name) @@ -1379,19 +1457,19 @@ from @code{music}." (extract-named-music elt music-name) (if (null? elts) '() - (map (lambda(x) + (map (lambda(x) (extract-named-music x music-name )) elts))))) '()))) (flatten-list extracted-list))) (define-public (event-chord-notes event-chord) -"Return a list of all notes from @{event-chord}." + "Return a list of all notes from @var{event-chord}." (filter (lambda (m) (eq? 'NoteEvent (ly:music-property m 'name))) (ly:music-property event-chord 'elements))) (define-public (event-chord-pitches event-chord) -"Return a list of all pitches from @{event-chord}." + "Return a list of all pitches from @var{event-chord}." (map (lambda (x) (ly:music-property x 'pitch)) (event-chord-notes event-chord))) diff --git a/scm/output-lib.scm b/scm/output-lib.scm index b82ffa2c4c..c25edf31f6 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -1,120 +1,70 @@ -;;;; output-lib.scm -- implement Scheme output helper functions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys - - +;;;; +;;;; 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 . ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; general + (define-public (grob::has-interface grob iface) (memq iface (ly:grob-interfaces grob))) -(define-public (make-stencil-boxer thickness padding callback) +(define-public (grob::is-live? grob) + (pair? (ly:grob-basic-properties grob))) +(define-public (make-stencil-boxer thickness padding callback) "Return function that adds a box around the grob passed as argument." (lambda (grob) - (box-stencil (callback grob) thickness padding))) (define-public (make-stencil-circler thickness padding callback) "Return function that adds a circle around the grob passed as argument." - - (lambda (grob) (circle-stencil (callback grob) thickness padding))) + (lambda (grob) + (circle-stencil (callback grob) thickness padding))) (define-public (print-circled-text-callback grob) (grob-interpret-markup grob (make-circle-markup - (ly:grob-property grob 'text)) - )) + (ly:grob-property grob 'text)))) (define-public (event-cause grob) - (let* - ((cause (ly:grob-property grob 'cause))) - + (let ((cause (ly:grob-property grob 'cause))) + (cond ((ly:stream-event? cause) cause) ((ly:grob? cause) (event-cause cause)) (else #f)))) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; tablature - -;; The TabNoteHead tablatureFormat callback. -;; Compute the text grob-property -(define-public (fret-number-tablature-format string - context event) - (let* - ((tuning (ly:context-property context 'stringTunings)) - (pitch (ly:event-property event 'pitch)) - (is-harmonic (apply - functional-or - (map - (lambda (ev) - (eq? 'harmonic-event (ly:event-property ev 'class))) - (ly:event-property event 'articulations))))) - - - (make-whiteout-markup - (make-vcenter-markup - (format - "~a" - (- (ly:pitch-semitones pitch) - (list-ref tuning - ;; remove 1 because list index starts at 0 and guitar string at 1. - (- string 1)))))) - )) - -;; The 5-string banjo has got a extra string, the fifth (duh), wich -;; starts at the fifth fret on the neck. Frets on the fifth string -;; are referred to relative to the other frets: -;; the "first fret" on the fifth string is really the sixth fret -;; on the banjo neck. -;; We solve this by defining a new fret-number-tablature function: -(define-public (fret-number-tablature-format-banjo string - context event) - (let* - ((tuning (ly:context-property context 'stringTunings)) - (pitch (ly:event-property event 'pitch)) - ) - (make-whiteout-markup - (make-vcenter-markup - (let ((fret (- (ly:pitch-semitones pitch) (list-ref tuning (- string 1))))) - (number->string (cond - ((and (> fret 0) (= string 5)) - (+ fret 5)) - (else fret)))))) - )) - - -; default tunings for common string instruments -(define-public guitar-tuning '(4 -1 -5 -10 -15 -20)) -(define-public guitar-open-g-tuning '(2 -1 -5 -10 -17 -22)) -(define-public bass-tuning '(-17 -22 -27 -32)) -(define-public mandolin-tuning '(16 9 2 -5)) - -;; tunings for 5-string banjo -(define-public banjo-open-g-tuning '(2 -1 -5 -10 7)) -(define-public banjo-c-tuning '(2 -1 -5 -12 7)) -(define-public banjo-modal-tuning '(2 0 -5 -10 7)) -(define-public banjo-open-d-tuning '(2 -3 -6 -10 9)) -(define-public banjo-open-dm-tuning '(2 -3 -6 -10 9)) -;; convert 5-string banjo tuning to 4-string by removing the 5th string -(define-public (four-string-banjo tuning) - (reverse (cdr (reverse tuning)))) +(define-public (grob-interpret-markup grob text) + (let* ((layout (ly:grob-layout grob)) + (defs (ly:output-def-lookup layout 'text-font-defaults)) + (props (ly:grob-alist-chain grob defs))) + + (ly:text-interface::interpret-markup layout props text))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; note heads - (define-public (stem::calc-duration-log grob) (ly:duration-log (ly:event-property (event-cause grob) 'duration))) (define-public (note-head::calc-duration-log grob) - (min 2 + (min 2 (ly:duration-log (ly:event-property (event-cause grob) 'duration)))) @@ -123,13 +73,12 @@ (ly:event-property (event-cause grob) 'duration))) (define-public (dots::calc-staff-position grob) - (let* - ((head (ly:grob-parent grob Y)) - (log (ly:grob-property head 'duration-log))) + (let* ((head (ly:grob-parent grob Y)) + (log (ly:grob-property head 'duration-log))) (cond ((or (not (grob::has-interface head 'rest-interface)) - (not (integer? log))) 0) + (not (integer? log))) 0) ((= log 7) 4) ((> log 4) 3) ((= log 0) -1) @@ -137,79 +86,149 @@ ((= log -1) 1) (else 0)))) -(define (note-head::calc-tablature-stem-attachment grob) - (cons 0.0 1.35)) +;; Kept separate from note-head::calc-glyph-name to allow use by +;; markup commands \note and \note-by-number +(define-public (select-head-glyph style log) + "Select a note head glyph string based on note head style @var{style} +and duration-log @var{log}." + (case style + ;; "default" style is directly handled in note-head.cc as a + ;; special case (HW says, mainly for performance reasons). + ;; Therefore, style "default" does not appear in this case + ;; statement. -- jr + ((xcircle) "2xcircle") + ((harmonic) "0harmonic") + ((harmonic-black) "2harmonic") + ((harmonic-mixed) (if (<= log 1) "0harmonic" + "2harmonic")) + ((baroque) + ;; Oops, I actually would not call this "baroque", but, for + ;; backwards compatibility to 1.4, this is supposed to take + ;; brevis, longa and maxima from the neo-mensural font and all + ;; other note heads from the default font. -- jr + (if (< log 0) + (string-append (number->string log) "neomensural") + (number->string log))) + ((altdefault) + ;; Like default, but brevis is drawn with double vertical lines + (if (= log -1) + (string-append (number->string log) "double") + (number->string log))) + ((mensural) + (string-append (number->string log) (symbol->string style))) + ((petrucci) + (if (< log 0) + (string-append (number->string log) "mensural") + (string-append (number->string log) (symbol->string style)))) + ((blackpetrucci) + (if (< log 0) + (string-append (number->string log) "blackmensural") + (string-append (number->string log) (symbol->string style)))) + ((semipetrucci) + (if (< log 0) + (string-append (number->string log) "semimensural") + (string-append (number->string log) "petrucci"))) + ((neomensural) + (string-append (number->string log) (symbol->string style))) + (else + (if (string-match "vaticana*|hufnagel*|medicaea*" (symbol->string style)) + (symbol->string style) + (string-append (number->string (max 0 log)) + (symbol->string style)))))) - - -;; silly, use alist? (define-public (note-head::calc-glyph-name grob) - (let* - ((style (ly:grob-property grob 'style)) - (log (min 2 (ly:grob-property grob 'duration-log)))) - - (case style - ;; "default" style is directly handled in note-head.cc as a - ;; special case (HW says, mainly for performance reasons). - ;; Therefore, style "default" does not appear in this case - ;; statement. -- jr - ((xcircle) "2xcircle") - ((harmonic) "0harmonic") - ((harmonic-black) "2harmonic") - ((harmonic-mixed) (if (<= log 1) "0harmonic" - "2harmonic")) - ((baroque) - ;; Oops, I actually would not call this "baroque", but, for - ;; backwards compatibility to 1.4, this is supposed to take - ;; brevis, longa and maxima from the neo-mensural font and all - ;; other note heads from the default font. -- jr - (if (< log 0) - (string-append (number->string log) "neomensural") - (number->string log))) - ((mensural) - (string-append (number->string log) (symbol->string style))) - ((petrucci) - (if (< log 0) - (string-append (number->string log) "mensural") - (string-append (number->string log) (symbol->string style)))) - ((neomensural) - (string-append (number->string log) (symbol->string style))) - (else - (if (string-match "vaticana*|hufnagel*|medicaea*" (symbol->string style)) - (symbol->string style) - (string-append (number->string (max 0 log)) - (symbol->string style))))))) - -;; TODO junk completely? -(define (note-head-style->attachment-coordinates grob axis) - "Return pair (X . Y), containing multipliers for the note head -bounding box, where to attach the stem. e.g.: X==0 means horizontally -centered, X==1 is at the right, X == -1 is at the left." - - '(1.0 . 0.0)) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; bar numbers - -(define-public ((every-nth-bar-number-visible n) barnum) (= 0 (modulo barnum n))) - -(define-public ((modulo-bar-number-visible n m) barnum) (and (> barnum 1) (= m (modulo barnum n)))) - -(define-public ((set-bar-number-visibility n) tr) - (let* ((bn (ly:context-property tr 'currentBarNumber))) - (ly:context-set-property! tr 'barNumberVisibility (modulo-bar-number-visible n (modulo bn n))))) - -(define-public (first-bar-number-invisible barnum) (> barnum 1)) - -(define-public (all-bar-numbers-visible barnum) #t) + (let ((style (ly:grob-property grob 'style)) + (log (min 2 (ly:grob-property grob 'duration-log)))) + + (select-head-glyph style log))) + +(define-public (note-head::brew-ez-stencil grob) + (let* ((log (ly:grob-property grob 'duration-log)) + (pitch (ly:event-property (event-cause grob) 'pitch)) + (pitch-index (ly:pitch-notename pitch)) + (note-names (ly:grob-property grob 'note-names)) + (pitch-string (if (and (vector? note-names) + (> (vector-length note-names) pitch-index)) + (vector-ref note-names pitch-index) + (string + (integer->char + (+ (modulo (+ pitch-index 2) 7) + (char->integer #\A)))))) + (staff-space (ly:staff-symbol-staff-space grob)) + (line-thickness (ly:staff-symbol-line-thickness grob)) + (stem (ly:grob-object grob 'stem)) + (stem-thickness (* (if (ly:grob? stem) + (ly:grob-property stem 'thickness) + 1.3) + line-thickness)) + (radius (/ (+ staff-space line-thickness) 2)) + (letter (markup #:center-align #:vcenter pitch-string)) + (filled-circle (markup #:draw-circle radius 0 #t))) + + (ly:stencil-translate-axis + (grob-interpret-markup + grob + (if (>= log 2) + (make-combine-markup + filled-circle + (make-with-color-markup white letter)) + (make-combine-markup + (make-combine-markup + filled-circle + (make-with-color-markup white (make-draw-circle-markup + (- radius stem-thickness) 0 #t))) + letter))) + radius X))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; percent repeat counters - -(define-public ((every-nth-repeat-count-visible n) count context) (= 0 (modulo count n))) - -(define-public (all-repeat-counts-visible count context) #t) +;; clipping + +(define-public (make-rhythmic-location bar-num num den) + (cons + bar-num (ly:make-moment num den))) + +(define-public (rhythmic-location? a) + (and (pair? a) + (integer? (car a)) + (ly:moment? (cdr a)))) + +(define-public (make-graceless-rhythmic-location loc) + (make-rhythmic-location + (car loc) + (ly:moment-main-numerator (rhythmic-location-measure-position loc)) + (ly:moment-main-denominator (rhythmic-location-measure-position loc)))) + +(define-public rhythmic-location-measure-position cdr) +(define-public rhythmic-location-bar-number car) + +(define-public (rhythmic-location (car a) (car b)) #f) + (else + (ly:moment=? a b) + (rhythmic-location? a b) + (rhythmic-locationfile-string a) + (ly:format "~a.~a.~a" + (car a) + (ly:moment-main-numerator (cdr a)) + (ly:moment-main-denominator (cdr a)))) + +(define-public (rhythmic-location->string a) + (ly:format "bar ~a ~a" + (car a) + (ly:moment->string (cdr a)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; break visibility @@ -222,27 +241,34 @@ centered, X==1 is at the right, X == -1 is at the left." (define-public center-visible #(#f #t #f)) (define-public end-of-line-visible #(#t #f #f)) (define-public all-invisible #(#f #f #f)) +(define-public (inherit-x-parent-visibility grob) + (let ((parent (ly:grob-parent grob X))) + (ly:grob-property parent 'break-visibility all-invisible))) +(define-public (inherit-y-parent-visibility grob) + (let ((parent (ly:grob-parent grob X))) + (ly:grob-property parent 'break-visibility))) -(define-public spanbar-begin-of-line-invisible - #(#t #f #f)) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define-public spanbar-begin-of-line-invisible #(#t #f #f)) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Bar lines. ;; -;; How should a bar line behave at a break? +;; How should a bar line behave at a break? (define bar-glyph-alist '((":|:" . (":|" . "|:")) (":|.|:" . (":|" . "|:")) (":|.:" . (":|" . "|:")) ("||:" . ("||" . "|:")) - ("dashed" . ("dashed" . '())) + ("dashed" . ("dashed" . '())) ("|" . ("|" . ())) ("||:" . ("||" . "|:")) ("|s" . (() . "|")) ("|:" . ("|" . "|:")) ("|." . ("|." . ())) - + ;; hmm... should we end with a bar line here? (".|" . ("|" . ".|")) (":|" . (":|" . ())) @@ -255,29 +281,38 @@ centered, X==1 is at the right, X == -1 is at the left." ("'" . ("'" . ())) ("empty" . (() . ())) ("brace" . (() . "brace")) - ("bracket" . (() . "bracket")) - )) + ("bracket" . (() . "bracket")) + + ;; segno bar lines + ("S" . ("||" . "S")) + ("|S" . ("|" . "S")) + ("S|" . ("S" . ())) + (":|S" . (":|" . "S")) + (":|S." . (":|S" . ())) + ("S|:" . ("S" . "|:")) + (".S|:" . ("|" . "S|:")) + (":|S|:" . (":|" . "S|:")) + (":|S.|:" . (":|S" . "|:")))) (define-public (bar-line::calc-glyph-name grob) - (let* ( - (glyph (ly:grob-property grob 'glyph)) + (let* ((glyph (ly:grob-property grob 'glyph)) (dir (ly:item-break-dir grob)) - (result (assoc glyph bar-glyph-alist)) + (result (assoc-get glyph bar-glyph-alist)) (glyph-name (if (= dir CENTER) glyph - (if (and result (string? (index-cell (cdr result) dir))) - (index-cell (cdr result) dir) - #f))) - ) + (if (and result + (string? (index-cell result dir))) + (index-cell result dir) + #f)))) glyph-name)) (define-public (bar-line::calc-break-visibility grob) (let* ((glyph (ly:grob-property grob 'glyph)) - (result (assoc glyph bar-glyph-alist))) - (if result - (vector (string? (cadr result)) #t (string? (cddr result))) - #(#f #f #f)))) + (result (assoc-get glyph bar-glyph-alist))) + (if result + (vector (string? (car result)) #t (string? (cdr result))) + all-invisible))) (define-public (shift-right-at-line-begin g) "Shift an item to the right, but only at the start of the line." @@ -293,17 +328,76 @@ centered, X==1 is at the right, X == -1 is at the left." (number->string (ly:event-property (event-cause grob) 'denominator))) (define-public (tuplet-number::calc-fraction-text grob) - (let* - ((ev (event-cause grob))) + (let ((ev (event-cause grob))) - (format "~a:~a" + (format "~a:~a" (ly:event-property ev 'denominator) (ly:event-property ev 'numerator)))) +;; a formatter function, which is simply a wrapper around an existing +;; tuplet formatter function. It takes the value returned by the given +;; function and appends a note of given length. +(define-public ((tuplet-number::append-note-wrapper function note) grob) + (let ((txt (if function (function grob) #f))) + + (if txt + (markup txt #:fontsize -5 #:note note UP) + (markup #:fontsize -5 #:note note UP)))) + +;; Print a tuplet denominator with a different number than the one derived from +;; the actual tuplet fraction +(define-public ((tuplet-number::non-default-tuplet-denominator-text denominator) + grob) + (number->string (if denominator + denominator + (ly:event-property (event-cause grob) 'denominator)))) + +;; Print a tuplet fraction with different numbers than the ones derived from +;; the actual tuplet fraction +(define-public ((tuplet-number::non-default-tuplet-fraction-text + denominator numerator) grob) + (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))) + +;; Print a tuplet fraction with note durations appended to the numerator and the +;; denominator +(define-public ((tuplet-number::fraction-with-notes + denominatornote numeratornote) grob) + (let* ((ev (event-cause grob)) + (denominator (ly:event-property ev 'denominator)) + (numerator (ly:event-property ev 'numerator))) + + ((tuplet-number::non-default-fraction-with-notes + denominator denominatornote numerator numeratornote) grob))) + +;; Print a tuplet fraction with note durations appended to the numerator and the +;; denominator +(define-public ((tuplet-number::non-default-fraction-with-notes + denominator denominatornote numerator numeratornote) grob) + (let* ((ev (event-cause grob)) + (den (if denominator denominator (ly:event-property ev 'denominator))) + (num (if numerator numerator (ly:event-property ev 'numerator)))) + + (make-concat-markup (list + (make-simple-markup (format "~a" den)) + (markup #:fontsize -5 #:note denominatornote UP) + (make-simple-markup " : ") + (make-simple-markup (format "~a" num)) + (markup #:fontsize -5 #:note numeratornote UP))))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Color -(define-public color? list?) +(define-public (color? x) + (and (list? x) + (= 3 (length x)) + (apply eq? #t (map number? x)) + (apply eq? #t (map (lambda (y) (<= 0 y 1)) x)))) + (define-public (rgb-color r g b) (list r g b)) ; predefined colors @@ -324,38 +418,39 @@ centered, X==1 is at the right, X == -1 is at the left." (define-public darkmagenta '(0.5 0.0 0.5)) (define-public darkyellow '(0.5 0.5 0.0)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; key signature - -(define-public (key-signature-interface::alteration-position step alter c0-position) +(define-public (key-signature-interface::alteration-position step alter + c0-position) ;; TODO: memoize - this is mostly constant. - + ;; fes, ges, as and bes typeset in lower octave (define FLAT_TOP_PITCH 2) - + ;; ais and bis typeset in lower octave (define SHARP_TOP_PITCH 4) (if (pair? step) - (+ (cdr step) (* (car step) 7) c0-position) - (let* - ((from-bottom-pos (modulo (+ 4 49 c0-position) 7)) - (p step) - (c0 (- from-bottom-pos 4))) - + (+ (cdr step) (* (car step) 7) c0-position) + (let* ((from-bottom-pos (modulo (+ 4 49 c0-position) 7)) + (p step) + (c0 (- from-bottom-pos 4))) + (if - (or (and (< alter 0) (or (> p FLAT_TOP_PITCH) (> (+ p c0) 4)) (> (+ p c0) 1)) - (and (> alter 0) (or (> p SHARP_TOP_PITCH) (> (+ p c0) 5)) (> (+ p c0) 2)) - ) + (or (and (< alter 0) + (or (> p FLAT_TOP_PITCH) (> (+ p c0) 4)) (> (+ p c0) 1)) + (and (> alter 0) + (or (> p SHARP_TOP_PITCH) (> (+ p c0) 5)) (> (+ p c0) 2))) - ;; Typeset below c_position + ;; Typeset below c_position (set! p (- p 7))) ;; Provide for the four cases in which there's a glitch ;; it's a hack, but probably not worth ;; the effort of finding a nicer solution. - ;; --dl. + ;; --dl. (cond ((and (= c0 2) (= p 3) (> alter 0)) (set! p (- p 7))) @@ -373,64 +468,62 @@ centered, X==1 is at the right, X == -1 is at the left." ;; accidentals (define-public (accidental-interface::calc-alteration grob) - (ly:pitch-alteration (ly:event-property (event-cause grob) 'pitch))) - + (ly:pitch-alteration (ly:event-property (event-cause grob) 'pitch))) (define-public cancellation-glyph-name-alist '((0 . "accidentals.natural"))) (define-public standard-alteration-glyph-name-alist - '( - ;; ordered for optimal performance. - (0 . "accidentals.natural") - (-1/2 . "accidentals.flat") - (1/2 . "accidentals.sharp") - - (1 . "accidentals.doublesharp") - (-1 . "accidentals.flatflat") - - (3/4 . "accidentals.sharp.slashslash.stemstemstem") - (1/4 . "accidentals.sharp.slashslash.stem") - (-1/4 . "accidentals.mirroredflat") - (-3/4 . "accidentals.mirroredflat.flat") - )) + '( + ;; ordered for optimal performance. + (0 . "accidentals.natural") + (-1/2 . "accidentals.flat") + (1/2 . "accidentals.sharp") + + (1 . "accidentals.doublesharp") + (-1 . "accidentals.flatflat") + + (3/4 . "accidentals.sharp.slashslash.stemstemstem") + (1/4 . "accidentals.sharp.slashslash.stem") + (-1/4 . "accidentals.mirroredflat") + (-3/4 . "accidentals.mirroredflat.flat"))) ;; FIXME: standard vs default, alteration-FOO vs FOO-alteration -(define-public alteration-default-glyph-name-alist standard-alteration-glyph-name-alist) +(define-public alteration-default-glyph-name-alist + standard-alteration-glyph-name-alist) (define-public makam-alteration-glyph-name-alist - '((1 . "accidentals.doublesharp") - (8/9 . "accidentals.sharp.slashslashslash.stemstem") - (5/9 . "accidentals.sharp.slashslashslash.stem") - (4/9 . "accidentals.sharp") - (1/9 . "accidentals.sharp.slashslash.stem") - (0 . "accidentals.natural") - (-1/9 . "accidentals.mirroredflat") - (-4/9 . "accidentals.flat.slash") - (-5/9 . "accidentals.flat") - (-8/9 . "accidentals.flat.slashslash") - (-1 . "accidentals.flatflat") - )) - + '((1 . "accidentals.doublesharp") + (8/9 . "accidentals.sharp.slashslashslash.stemstem") + (5/9 . "accidentals.sharp.slashslashslash.stem") + (4/9 . "accidentals.sharp") + (1/9 . "accidentals.sharp.slashslash.stem") + (0 . "accidentals.natural") + (-1/9 . "accidentals.mirroredflat") + (-4/9 . "accidentals.flat.slash") + (-5/9 . "accidentals.flat") + (-8/9 . "accidentals.flat.slashslash") + (-1 . "accidentals.flatflat"))) + (define-public alteration-hufnagel-glyph-name-alist - '((-1/2 . "accidentals.hufnagelM1") - (0 . "accidentals.vaticana0") - (1/2 . "accidentals.mensural1"))) + '((-1/2 . "accidentals.hufnagelM1") + (0 . "accidentals.vaticana0") + (1/2 . "accidentals.mensural1"))) (define-public alteration-medicaea-glyph-name-alist - '((-1/2 . "accidentals.medicaeaM1") - (0 . "accidentals.vaticana0") - (1/2 . "accidentals.mensural1"))) + '((-1/2 . "accidentals.medicaeaM1") + (0 . "accidentals.vaticana0") + (1/2 . "accidentals.mensural1"))) (define-public alteration-vaticana-glyph-name-alist - '((-1/2 . "accidentals.vaticanaM1") - (0 . "accidentals.vaticana0") - (1/2 . "accidentals.mensural1"))) + '((-1/2 . "accidentals.vaticanaM1") + (0 . "accidentals.vaticana0") + (1/2 . "accidentals.mensural1"))) (define-public alteration-mensural-glyph-name-alist - '((-1/2 . "accidentals.mensuralM1") - (0 . "accidentals.vaticana0") - (1/2 . "accidentals.mensural1"))) + '((-1/2 . "accidentals.mensuralM1") + (0 . "accidentals.vaticana0") + (1/2 . "accidentals.mensural1"))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -444,69 +537,76 @@ centered, X==1 is at the right, X == -1 is at the left." (list lp rp))) - -(define-public (grob-interpret-markup grob text) - (let* - ((layout (ly:grob-layout grob)) - (defs (ly:output-def-lookup layout 'text-font-defaults)) - (props (ly:grob-alist-chain grob defs))) - - (ly:text-interface::interpret-markup - layout props text))) - (define-public (parentheses-item::calc-angled-bracket-stencils grob) - (let* ( - (font (ly:grob-default-font grob)) - (lp (ly:stencil-aligned-to (ly:stencil-aligned-to (grob-interpret-markup grob (ly:wide-char->utf-8 #x2329)) - Y CENTER) X RIGHT)) - (rp (ly:stencil-aligned-to (ly:stencil-aligned-to (grob-interpret-markup grob (ly:wide-char->utf-8 #x232A)) - Y CENTER) X LEFT)) - ) - + (let* ((parent (ly:grob-parent grob Y)) + (y-extent (ly:grob-extent parent parent Y)) + (half-thickness 0.05) ; should it be a property? + (width 0.5) ; should it be a property? + (angularity 1.5) ; makes angle brackets + (white-padding 0.1) ; should it be a property? + (lp (ly:stencil-aligned-to + (ly:stencil-aligned-to + (make-parenthesis-stencil y-extent + half-thickness + (- width) + angularity) + Y CENTER) + X RIGHT)) + (lp-x-extent + (interval-widen (ly:stencil-extent lp X) white-padding)) + (rp (ly:stencil-aligned-to + (ly:stencil-aligned-to + (make-parenthesis-stencil y-extent + half-thickness + width + angularity) + Y CENTER) + X LEFT)) + (rp-x-extent + (interval-widen (ly:stencil-extent rp X) white-padding))) + (set! lp (ly:make-stencil (ly:stencil-expr lp) + lp-x-extent + (ly:stencil-extent lp Y))) + (set! rp (ly:make-stencil (ly:stencil-expr rp) + rp-x-extent + (ly:stencil-extent rp Y))) (list (stencil-whiteout lp) - (stencil-whiteout rp)))) + (stencil-whiteout rp)))) (define (parenthesize-elements grob . rest) - (let* - ((refp (if (null? rest) - grob - (car rest))) - (elts (ly:grob-object grob 'elements)) - (x-ext (ly:relative-group-extent elts refp X)) - (stencils (ly:grob-property grob 'stencils)) - (lp (car stencils)) - (rp (cadr stencils)) - (padding (ly:grob-property grob 'padding 0.1))) - + (let* ((refp (if (null? rest) + grob + (car rest))) + (elts (ly:grob-object grob 'elements)) + (x-ext (ly:relative-group-extent elts refp X)) + (stencils (ly:grob-property grob 'stencils)) + (lp (car stencils)) + (rp (cadr stencils)) + (padding (ly:grob-property grob 'padding 0.1))) + (ly:stencil-add (ly:stencil-translate-axis lp (- (car x-ext) padding) X) - (ly:stencil-translate-axis rp (+ (cdr x-ext) padding) X)) - )) + (ly:stencil-translate-axis rp (+ (cdr x-ext) padding) X)))) -(define (parentheses-item::print me) - (let* - ((elts (ly:grob-object me 'elements)) - (y-ref (ly:grob-common-refpoint-of-array me elts Y)) - (x-ref (ly:grob-common-refpoint-of-array me elts X)) - (stencil (parenthesize-elements me x-ref)) - (elt-y-ext (ly:relative-group-extent elts y-ref Y)) - (y-center (interval-center elt-y-ext))) +(define-public (parentheses-item::print me) + (let* ((elts (ly:grob-object me 'elements)) + (y-ref (ly:grob-common-refpoint-of-array me elts Y)) + (x-ref (ly:grob-common-refpoint-of-array me elts X)) + (stencil (parenthesize-elements me x-ref)) + (elt-y-ext (ly:relative-group-extent elts y-ref Y)) + (y-center (interval-center elt-y-ext))) (ly:stencil-translate stencil (cons - (- - (ly:grob-relative-coordinate me x-ref X)) - (- - y-center - (ly:grob-relative-coordinate me y-ref Y)))) - )) + (- (ly:grob-relative-coordinate me x-ref X)) + (- y-center (ly:grob-relative-coordinate me y-ref Y)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; +;; (define-public (chain-grob-member-functions grob value . funcs) (for-each @@ -516,58 +616,61 @@ centered, X==1 is at the right, X == -1 is at the left." value) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; falls/doits (define-public (bend::print spanner) (define (close a b) (< (abs (- a b)) 0.01)) - - (let* - ((delta-y (* 0.5 (ly:grob-property spanner 'delta-position))) - (left-span (ly:spanner-bound spanner LEFT)) - (dots (if (and (grob::has-interface left-span 'note-head-interface) - (ly:grob? (ly:grob-object left-span 'dot))) - (ly:grob-object left-span 'dot) #f)) - - (right-span (ly:spanner-bound spanner RIGHT)) - (thickness (* (ly:grob-property spanner 'thickness) - (ly:output-def-lookup (ly:grob-layout spanner) - 'line-thickness))) - (padding (ly:grob-property spanner 'padding 0.5)) - (common (ly:grob-common-refpoint right-span - (ly:grob-common-refpoint spanner - left-span X) - X)) - (common-y (ly:grob-common-refpoint spanner left-span Y)) - (minimum-length (ly:grob-property spanner 'minimum-length 0.5)) - - (left-x (+ padding - (max (interval-end (ly:grob-robust-relative-extent - left-span common X)) - (if (and - dots - (close (ly:grob-relative-coordinate dots common-y Y) - (ly:grob-relative-coordinate spanner common-y Y))) - (interval-end (ly:grob-robust-relative-extent dots common X)) - -10000) ;; TODO: use real infinity constant. - ))) - (right-x (max (- (interval-start (ly:grob-robust-relative-extent right-span common X)) - padding) - (+ left-x minimum-length))) - (self-x (ly:grob-relative-coordinate spanner common X)) - (dx (- right-x left-x)) - (exp (list 'path thickness - `(quote - (rmoveto - ,(- left-x self-x) 0 - - rcurveto - ,(/ dx 3) - 0 - ,dx ,(* 0.66 delta-y) - ,dx ,delta-y - ))))) + + (let* ((delta-y (* 0.5 (ly:grob-property spanner 'delta-position))) + (left-span (ly:spanner-bound spanner LEFT)) + (dots (if (and (grob::has-interface left-span 'note-head-interface) + (ly:grob? (ly:grob-object left-span 'dot))) + (ly:grob-object left-span 'dot) #f)) + + (right-span (ly:spanner-bound spanner RIGHT)) + (thickness (* (ly:grob-property spanner 'thickness) + (ly:output-def-lookup (ly:grob-layout spanner) + 'line-thickness))) + (padding (ly:grob-property spanner 'padding 0.5)) + (common (ly:grob-common-refpoint right-span + (ly:grob-common-refpoint spanner + left-span X) + X)) + (common-y (ly:grob-common-refpoint spanner left-span Y)) + (minimum-length (ly:grob-property spanner 'minimum-length 0.5)) + + (left-x (+ padding + (max + (interval-end (ly:grob-robust-relative-extent + left-span common X)) + (if + (and dots + (close + (ly:grob-relative-coordinate dots common-y Y) + (ly:grob-relative-coordinate spanner common-y Y))) + (interval-end + (ly:grob-robust-relative-extent dots common X)) + ;; TODO: use real infinity constant. + -10000)))) + (right-x (max (- (interval-start + (ly:grob-robust-relative-extent right-span common X)) + padding) + (+ left-x minimum-length))) + (self-x (ly:grob-relative-coordinate spanner common X)) + (dx (- right-x left-x)) + (exp (list 'path thickness + `(quote + (rmoveto + ,(- left-x self-x) 0 + + rcurveto + ,(/ dx 3) + 0 + ,dx ,(* 0.66 delta-y) + ,dx ,delta-y))))) (ly:make-stencil exp @@ -575,99 +678,116 @@ centered, X==1 is at the right, X == -1 is at the left." (cons (min 0 delta-y) (max 0 delta-y))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; grace spacing - (define-public (grace-spacing::calc-shortest-duration grob) - (let* - ((cols (ly:grob-object grob 'columns)) - (get-difference - (lambda (idx) - (ly:moment-sub (ly:grob-property - (ly:grob-array-ref cols (1+ idx)) 'when) - (ly:grob-property - (ly:grob-array-ref cols idx) 'when)))) - - (moment-min (lambda (x y) - (cond - ((and x y) - (if (ly:moment digit 5) (ly:input-message (ly:event-property event 'origin) - "Warning: Fingering notation for finger number ~a" digit)) + "Warning: Fingering notation for finger number ~a" + digit)) - (number->string digit 10) - )) + (number->string digit 10))) (define-public (string-number::calc-text grob) - (let* - ((digit (ly:event-property (event-cause grob) 'string-number))) - - (number->string digit 10) - )) + (let ((digit (ly:event-property (event-cause grob) 'string-number))) + (number->string digit 10))) (define-public (stroke-finger::calc-text grob) - (let* - ((digit (ly:event-property (event-cause grob) 'digit)) - (text (ly:event-property (event-cause grob) 'text))) + (let* ((digit (ly:event-property (event-cause grob) 'digit)) + (text (ly:event-property (event-cause grob) 'text))) (if (string? text) text - (vector-ref (ly:grob-property grob 'digit-names) (1- (max (min 5 digit) 1)))))) + (vector-ref (ly:grob-property grob 'digit-names) + (1- (max (min 5 digit) 1)))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; dynamics + (define-public (hairpin::calc-grow-direction grob) (if (eq? (ly:event-property (event-cause grob) 'class) 'decrescendo-event) START - STOP - )) + STOP)) + +(define-public (dynamic-text-spanner::before-line-breaking grob) + "Monitor left bound of @code{DynamicTextSpanner} for absolute dynamics. +If found, ensure @code{DynamicText} does not collide with spanner text by +changing @code{'attach-dir} and @code{'padding}. Reads the +@code{'right-padding} property of @code{DynamicText} to fine tune space +between the two text elements." + (let ((left-bound (ly:spanner-bound grob LEFT))) + (if (grob::has-interface left-bound 'dynamic-text-interface) + (let* ((details (ly:grob-property grob 'bound-details)) + (left-details (ly:assoc-get 'left details)) + (my-padding (ly:assoc-get 'padding left-details)) + (script-padding (ly:grob-property left-bound 'right-padding 0))) + + (and (number? my-padding) + (ly:grob-set-nested-property! grob + '(bound-details left attach-dir) + RIGHT) + (ly:grob-set-nested-property! grob + '(bound-details left padding) + (+ my-padding script-padding))))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; lyrics (define-public (lyric-text::print grob) "Allow interpretation of tildes as lyric tieing marks." - - (let* - ((text (ly:grob-property grob 'text))) - (grob-interpret-markup grob - (if (string? text) - (make-tied-lyric-markup text) - text)))) + (let ((text (ly:grob-property grob 'text))) + + (grob-interpret-markup grob (if (string? text) + (make-tied-lyric-markup text) + text)))) (define-public ((grob::calc-property-by-copy prop) grob) (ly:event-property (event-cause grob) prop)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; fret boards (define-public (fret-board::calc-stencil grob) - (grob-interpret-markup - grob - (make-fret-diagram-verbose-markup - (ly:grob-property grob 'dot-placement-list)))) + (grob-interpret-markup + grob + (make-fret-diagram-verbose-markup + (ly:grob-property grob 'dot-placement-list)))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; scripts @@ -675,20 +795,154 @@ centered, X==1 is at the right, X == -1 is at the left." (define-public (script-interface::calc-x-offset grob) (ly:grob-property grob 'positioning-done) (let* ((shift (ly:grob-property grob 'toward-stem-shift 0.0)) - (note-head-location (ly:self-alignment-interface::centered-on-x-parent grob)) + (note-head-location + (ly:self-alignment-interface::centered-on-x-parent grob)) (note-head-grob (ly:grob-parent grob X)) (stem-grob (ly:grob-object note-head-grob 'stem))) + (+ note-head-location - ;; If the property 'toward-stem-shift is defined and the script has the - ;; same direction as the stem, move the script accordingly. Since scripts can - ;; also be over skips, we need to check whether the grob has a stem at all. + ;; If the property 'toward-stem-shift is defined and the script + ;; has the same direction as the stem, move the script accordingly. + ;; Since scripts can also be over skips, we need to check whether + ;; the grob has a stem at all. (if (ly:grob? stem-grob) (let ((dir1 (ly:grob-property grob 'direction)) (dir2 (ly:grob-property stem-grob 'direction))) (if (equal? dir1 dir2) (let* ((common-refp (ly:grob-common-refpoint grob stem-grob X)) - (stem-location (ly:grob-relative-coordinate stem-grob common-refp X))) - (* shift (- stem-location - note-head-location))) + (stem-location + (ly:grob-relative-coordinate stem-grob common-refp X))) + (* shift (- stem-location note-head-location))) 0.0)) 0.0)))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; instrument names + +(define-public (system-start-text::print grob) + (let* ((left-bound (ly:spanner-bound grob LEFT)) + (left-mom (ly:grob-property left-bound 'when)) + (name (if (moment<=? left-mom ZERO-MOMENT) + (ly:grob-property grob 'long-text) + (ly:grob-property grob 'text)))) + + (if (and (markup? name) + (!= (ly:item-break-dir left-bound) CENTER)) + + (grob-interpret-markup grob name) + (ly:grob-suicide! grob)))) + +(define-public (system-start-text::calc-x-offset grob) + (let* ((left-bound (ly:spanner-bound grob LEFT)) + (left-mom (ly:grob-property left-bound 'when)) + (layout (ly:grob-layout grob)) + (indent (ly:output-def-lookup layout + (if (moment<=? left-mom ZERO-MOMENT) + 'indent + 'short-indent) + 0.0)) + (system (ly:grob-system grob)) + (my-extent (ly:grob-extent grob system X)) + (elements (ly:grob-object system 'elements)) + (common (ly:grob-common-refpoint-of-array system elements X)) + (total-ext empty-interval) + (align-x (ly:grob-property grob 'self-alignment-X 0)) + (padding (min 0 (- (interval-length my-extent) indent))) + (right-padding (- padding + (/ (* padding (1+ align-x)) 2)))) + + ;; compensate for the variation in delimiter extents by + ;; calculating an X-offset correction based on united extents + ;; of all delimiters in this system + (let unite-delims ((l (ly:grob-array-length elements))) + (if (> l 0) + (let ((elt (ly:grob-array-ref elements (1- l)))) + + (if (grob::has-interface elt 'system-start-delimiter-interface) + (let ((dims (ly:grob-extent elt common X))) + (if (interval-sane? dims) + (set! total-ext (interval-union total-ext dims))))) + (unite-delims (1- l))))) + + (+ + (ly:side-position-interface::x-aligned-side grob) + right-padding + (- (interval-length total-ext))))) + +(define-public (system-start-text::calc-y-offset grob) + + (define (live-elements-list me) + (let ((elements (ly:grob-object me 'elements))) + + (filter! grob::is-live? + (ly:grob-array->list elements)))) + + (let* ((left-bound (ly:spanner-bound grob LEFT)) + (live-elts (live-elements-list grob)) + (system (ly:grob-system grob)) + (extent empty-interval)) + + (if (and (pair? live-elts) + (interval-sane? (ly:grob-extent grob system Y))) + (let get-extent ((lst live-elts)) + (if (pair? lst) + (let ((axis-group (car lst))) + + (if (and (ly:spanner? axis-group) + (equal? (ly:spanner-bound axis-group LEFT) + left-bound)) + (set! extent (add-point extent + (ly:grob-relative-coordinate + axis-group system Y)))) + (get-extent (cdr lst))))) + ;; no live axis group(s) for this instrument name -> remove from system + (ly:grob-suicide! grob)) + + (+ + (ly:self-alignment-interface::y-aligned-on-self grob) + (interval-center extent)))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ambitus + +(define-public (ambitus::print grob) + (let ((heads (ly:grob-object grob 'note-heads))) + + (if (and (ly:grob-array? heads) + (= (ly:grob-array-length heads) 2)) + (let* ((common (ly:grob-common-refpoint-of-array grob heads Y)) + (head-down (ly:grob-array-ref heads 0)) + (head-up (ly:grob-array-ref heads 1)) + (gap (ly:grob-property grob 'gap 0.35)) + (point-min (+ (interval-end (ly:grob-extent head-down common Y)) + gap)) + (point-max (- (interval-start (ly:grob-extent head-up common Y)) + gap))) + + (if (< point-min point-max) + (let* ((layout (ly:grob-layout grob)) + (line-thick (ly:output-def-lookup layout 'line-thickness)) + (blot (ly:output-def-lookup layout 'blot-diameter)) + (grob-thick (ly:grob-property grob 'thickness 2)) + (width (* line-thick grob-thick)) + (x-ext (symmetric-interval (/ width 2))) + (y-ext (cons point-min point-max)) + (line (ly:round-filled-box x-ext y-ext blot)) + (y-coord (ly:grob-relative-coordinate grob common Y))) + + (ly:stencil-translate-axis line (- y-coord) Y)) + empty-stencil)) + (begin + (ly:grob-suicide! grob) + (list))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; laissez-vibrer tie +;; +;; needed so we can make laissez-vibrer a pure print +;; +(define-public (laissez-vibrer::print grob) + (ly:tie::print grob)) + diff --git a/scm/output-ps.scm b/scm/output-ps.scm index b2c047a651..c83b613cbd 100644 --- a/scm/output-ps.scm +++ b/scm/output-ps.scm @@ -1,50 +1,35 @@ -;;;; output-ps.scm -- implement Scheme output interface for PostScript +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . ;;;; Note: currently misused as testbed for titles with markup, see ;;;; input/test/title-markup.ly -;;;; +;;;; ;;;; TODO: ;;;; * %% Papersize in (header ...) ;;;; * text setting, kerning. ;;;; * document output-interface (define-module (scm output-ps) - #:re-export (quote) - - ;; JUNK this -- see lily.scm: ly:all-output-backend-commands - #:export (unknown - bezier-sandwich - char - circle - comment - dashed-line - dashed-slur - dot - draw-line - ellipse - embedded-ps - named-glyph - no-origin - oval - placebox - polygon - repeat-slash - resetcolor - resetrotation - round-filled-box - setcolor - setrotation - text - )) - + #:re-export (quote)) (use-modules (guile) (ice-9 regex) + (ice-9 optargs) (srfi srfi-1) (srfi srfi-13) (scm framework-ps) @@ -60,14 +45,14 @@ (define (str4 num) (if (or (nan? num) (inf? num)) (begin - (ly:warning (_ "Found infinity or nan in output. Substituting 0.0")) + (ly:warning (_ "Found infinity or nan in output. Substituting 0.0")) (if (ly:get-option 'strict-infinity-checking) (exit 1)) "0.0") (ly:number->string num))) (define (number-pair->string4 numpair) - (ly:format "~4l" numpair)) + (ly:format "~4l" numpair)) ;;; ;;; Lily output interface, PostScript implementation --- cleanup and docme @@ -75,7 +60,7 @@ ;; two beziers (define (bezier-sandwich lst thick) - (ly:format "~l ~4f draw_bezier_sandwich" + (ly:format "~l ~4f draw_bezier_sandwich" (map number-pair->string4 lst) thick)) @@ -118,6 +103,16 @@ (- x2 x1) (- y2 y1) x1 y1 thick)) +(define (partial-ellipse x-radius y-radius start-angle end-angle thick connect fill) + (ly:format "~a ~a ~4f ~4f ~4f ~4f ~4f draw_partial_ellipse" + (if fill "true" "false") + (if connect "true" "false") + x-radius + y-radius + start-angle + end-angle + thick)) + (define (ellipse x-radius y-radius thick fill) (ly:format "~a ~4f ~4f ~4f draw_ellipse" @@ -139,8 +134,8 @@ (ly:format "~4f ~4f ~4f ~a~a" w x y prefix g))) - - (ly:format + + (ly:format (if cid? "/~a /CIDFont findresource ~a output-scale div scalefont setfont ~a @@ -178,12 +173,11 @@ (+ (car offset) (cdr x-ext)) (+ (cdr offset) (cdr y-ext)) - ;; TODO - ;;full escaping. + ;; Backslashes are not valid + ;; file URI path separators. + (ly:string-percent-encode + (ly:string-substitute "\\" "/" file)) - ;; backslash is interpreted by GS. - (ly:string-substitute "\\" "/" - (ly:string-substitute " " "%20" file)) (cadr location) (caddr location) (cadddr location)) @@ -207,10 +201,10 @@ "false") x-radius y-radius thick)) -(define (placebox x y s) - (ly:format -"~4f ~4f moveto -~a\n" x y s)) +(define (placebox x y s) + (if (not (string-null? s)) + (ly:format "~4f ~4f moveto ~a\n" x y s) + "")) (define (polygon points blot-diameter filled?) (ly:format "~a ~4l ~a ~4f draw_polygon" @@ -256,30 +250,7 @@ (define (resetrotation ang x y) "grestore ") - -(define (text font s) - ;; (ly:warning (_ "TEXT backend-command encountered in Pango backend")) - ;; (ly:warning (_ "Arguments: ~a ~a"" font str)) - - (let* ((space-length (cdar (ly:text-dimension font " "))) - (space-move (string-append (number->string space-length) - ;; how much precision do we need here? - " 0.0 rmoveto ")) - (out-vec (decode-byte-string s))) - - (string-append - (ps-font-command font) " " - (string-join - (vector->list - (vector-for-each - - (lambda (sym) - (if (eq? sym 'space) - space-move - (string-append "/" (symbol->string sym) " glyphshow"))) - out-vec)))))) - -(define (unknown) +(define (unknown) "\n unknown\n") (define (url-link url x y) @@ -290,19 +261,27 @@ (cdr y) url)) -(define (utf-8-string pango-font-description string) - (ly:warning (_ "utf-8-string encountered in PS backend"))) - -(define (path thickness exps) +(define (page-link page-no x y) + (if (number? page-no) + (ly:format "~a ~a currentpoint vector_add ~a ~a currentpoint vector_add ~a mark_page_link" + (car x) + (car y) + (cdr x) + (cdr y) + page-no) + "")) + +(define* (path thickness exps #:optional (cap 'round) (join 'round) (fill? #f)) (define (convert-path-exps exps) (if (pair? exps) (let* ((head (car exps)) (rest (cdr exps)) - (arity + (arity (cond ((memq head '(rmoveto rlineto lineto moveto)) 2) ((memq head '(rcurveto curveto)) 6) + ((eq? head 'closepath) 0) (else 1))) (args (take rest arity)) ) @@ -310,14 +289,34 @@ ;; WARNING: this is a vulnerability: a user can output arbitrary PS code here. (cons (ly:format "~l ~a " - args + args head) (convert-path-exps (drop rest arity)))) '())) - - - (ly:format - "1 setlinecap ~a setlinewidth\n~l stroke" - thickness - (convert-path-exps exps) )) - + + (let ((cap-numeric (case cap ((butt) 0) ((round) 1) ((square) 2) + (else (begin + (ly:warning (_ "unknown line-cap-style: ~S") + (symbol->string cap)) + 1)))) + (join-numeric (case join ((miter) 0) ((round) 1) ((bevel) 2) + (else (begin + (ly:warning (_ "unknown line-join-style: ~S") + (symbol->string join)) + 1))))) + (ly:format + "gsave currentpoint translate +~a setlinecap ~a setlinejoin ~a setlinewidth +~l gsave stroke grestore ~a grestore" + cap-numeric + join-numeric + thickness + (convert-path-exps exps) + (if fill? "fill" "")))) + +(define (setscale x y) + (ly:format "gsave ~4l scale\n" + (list x y))) + +(define (resetscale) + "grestore\n") diff --git a/scm/output-socket.scm b/scm/output-socket.scm index 083d5a081b..c86047815a 100644 --- a/scm/output-socket.scm +++ b/scm/output-socket.scm @@ -1,124 +1,106 @@ +;;;; output-socket.scm +;;;; +;;;; implement network-based output (socket) in Scheme (define-module (scm output-socket) - #:re-export (quote) - ) + #:re-export (quote)) (use-modules (guile) (srfi srfi-1) (srfi srfi-13) (lily)) -(define (dummy . rest) - "") -(display (ly:all-stencil-expressions)) -(for-each - (lambda (x) - (module-define! (current-module) - x - dummy)) - - (ly:all-stencil-expressions)) - - -(define-public (draw-line thick x1 y1 x2 y2) - (format "drawline ~a ~a ~a ~a ~a" - thick x1 y2 x2 y2)) - -(define-public (polygon xy-coords blot do-fill) - (format "polygon ~a ~a ~a" - blot - (if do-fill "True" "False") - (string-join - (map number->string xy-coords)) - )) - -(define-public (named-glyph font glyph) - (format "glyphshow ~a \"~a\" ~a \"~a\"" - (ly:font-glyph-name-to-charcode font glyph) - (ly:font-name font) - (modified-font-metric-font-scaling font) - glyph - )) - -(define-public (placebox x y s) - (format "at ~a ~a ~a\n" x y s)) - -(define-public (round-filled-box breapth width depth height blot-diameter) - (format "draw_round_box ~a ~a ~a ~a ~a" - breapth width depth height blot-diameter - )) +(define format ergonomic-simple-format) (define (event-cause grob) (let* - ((cause (ly:grob-property grob 'cause))) + ((cause (ly:grob-property grob 'cause))) - (cond - ((ly:stream-event? cause) cause) - (else - #f)))) + (if (ly:stream-event? cause) + cause + #f))) (define (grob-bbox grob offset) (let* - ((x-ext (ly:grob-extent grob grob X)) - (y-ext (ly:grob-extent grob grob Y)) - (x (car offset)) - (y (cdr offset))) + ((x-ext (ly:grob-extent grob grob X)) + (y-ext (ly:grob-extent grob grob Y)) + (x (car offset)) + (y (cdr offset))) (if (interval-empty? x-ext) (set! x-ext '(0 . 0))) (if (interval-empty? y-ext) (set! y-ext '(0 . 0))) - + (list (+ x (car x-ext)) (+ y (car y-ext)) (+ x (cdr x-ext)) - (+ y (cdr y-ext)) - ))) + (+ y (cdr y-ext))))) -(define-public (no-origin) - "nocause\n") +(define (escape-string str) + (string-regexp-substitute + " " "\\040" + (string-regexp-substitute "\"" "\\\"" str))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; stencil commands +;;; -(define-public (grob-cause offset grob) +(define (bezier-sandwich lst thick) + (format "bezier_sandwich ~a [~a]" + thick + (string-append + (string-join (map + (lambda (x) + (format "(~a,~a)" (car x) (cdr x))) + lst) + ",")))) + +(define (draw-line thick x1 y1 x2 y2) + (format "drawline ~a ~a ~a ~a ~a" + thick x1 y2 x2 y2)) + +(define (grob-cause offset grob) (let* - ((cause (event-cause grob)) - (tag (if (and cause (integer? (ly:event-property cause 'input-tag))) - (ly:event-property cause 'input-tag) - -1)) - (name (cdr (assoc 'name (ly:grob-property grob 'meta)))) - ) - + ((cause (event-cause grob)) + (tag (if (and cause (integer? (ly:event-property cause 'input-tag))) + (ly:event-property cause 'input-tag) + -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)) - ))) + (append (list "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\"" + (ly:font-glyph-name-to-charcode font glyph) + (ly:font-name font) + (modified-font-metric-font-scaling font) + glyph)) -(define (escape-string str) - (string-regexp-substitute - " " "\\040" - (string-regexp-substitute "\"" "\\\"" str))) - -(define-public (utf-8-string - descr - string) - - (format "utf-8 \"~a\" \"~a\"" - (escape-string descr) +(define (no-origin) + "nocause\n") - ;; don't want unescaped spaces. - (escape-string string) - )) +(define (placebox x y s) + (if (not (string-null? s)) + (format "at ~a ~a ~a\n" x y s) + "")) +(define (polygon xy-coords blot do-fill) + (format "polygon ~a ~a ~a" + blot + (if do-fill "True" "False") + (string-join (map number->string xy-coords)))) -(define (bezier-sandwich lst thick) - (format - #f - "bezier_sandwich ~a [~a]" - thick - (string-append - (string-join (map (lambda (x) (format "(~a,~a)" (car x) (cdr x))) - lst) ",")))) +(define (round-filled-box breapth width depth height blot-diameter) + (format "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\"" + (escape-string descr) + ;; don't want unescaped spaces. + (escape-string string))) diff --git a/scm/output-svg.scm b/scm/output-svg.scm index 716f0f1355..3132175414 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -1,54 +1,61 @@ -;;;; output-svg.scm -- implement Scheme output routines for SVG1 +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2002--2011 Jan Nieuwenhuizen +;;;; Patrick McCarty ;;;; -;;;; (c) 2002--2009 Jan Nieuwenhuizen - -;;;; http://www.w3.org/TR/SVG11 -;;;; http://www.w3.org/TR/SVG12/ -- page, pageSet in draft - -;;;; TODO: -;;;; * .cff MUST NOT be in fc's fontpath. -;;;; - workaround: remove mf/out from ~/.fonts.conf, -;;;; instead add ~/.fonts and symlink all /mf/out/*otf there. -;;;; - bug in fontconfig/freetype/pango? - -;;;; * inkscape page/pageSet support -;;;; * inkscape SVG-font support -;;;; - use fontconfig/fc-cache for now, see output-gnome.scm +;;;; 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 . (define-module (scm output-svg)) (define this-module (current-module)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; globals + +;;; set by framework-gnome.scm +(define paper #f) + (use-modules - (guile) - (ice-9 regex) - (ice-9 format) - (lily) - (srfi srfi-1) - (srfi srfi-13)) + (guile) + (ice-9 regex) + (ice-9 format) + (ice-9 optargs) + (lily) + (srfi srfi-1) + (srfi srfi-13)) (define fancy-format format) (define format ergonomic-simple-format) -(define lily-unit-length 1.75) +(define lily-unit-length 1.7573) (define (dispatch expr) (let ((keyword (car expr))) - (cond - ((eq? keyword 'some-func) "") - ;;((eq? keyword 'placebox) (dispatch (cadddr expr))) - (else - (if (module-defined? this-module keyword) - (apply (eval keyword this-module) (cdr expr)) - (begin - (ly:warning (_ "undefined: ~S") keyword) - "")))))) + (cond ((eq? keyword 'some-func) "") + (else (if (module-defined? this-module keyword) + (apply (eval keyword this-module) (cdr expr)) + (begin (ly:warning (_ "undefined: ~S") keyword) + "")))))) ;; Helper functions (define-public (attributes attributes-alist) (apply string-append - (map (lambda (x) (format " ~s=\"~a\"" (car x) (cdr x))) + (map (lambda (x) + (let ((attr (car x)) + (value (cdr x))) + (if (number? value) + (set! value (ly:format "~4f" value))) + (format " ~s=\"~a\"" attr value))) attributes-alist))) (define-public (eo entity . attributes-alist) @@ -56,43 +63,43 @@ (format "<~S~a>\n" entity (attributes attributes-alist))) (define-public (eoc entity . attributes-alist) - " oc = open/close" + "oc = open/close" (format "<~S~a/>\n" entity (attributes attributes-alist))) (define-public (ec entity) "c = close" (format "\n" entity)) - +(define-public (comment s) + (string-append "\n")) (define-public (entity entity string . attributes-alist) (if (equal? string "") (apply eoc entity attributes-alist) (string-append - (apply eo (cons entity attributes-alist)) string (ec entity)))) + (apply eo (cons entity attributes-alist)) string (ec entity)))) (define (offset->point o) - (format " ~S,~S" (car o) (- (cdr o)))) + (ly:format "~4f ~4f" (car o) (- (cdr o)))) (define (number-list->point lst) (define (helper lst) (if (null? lst) '() - (cons (format "~S,~S" (car lst) (cadr lst)) + (cons (format "~S ~S" (car lst) (- (cadr lst))) (helper (cddr lst))))) - (string-join (helper lst) " ")) + (string-join (helper lst) " ")) (define (svg-bezier lst close) (let* ((c0 (car (list-tail lst 3))) (c123 (list-head lst 3))) (string-append - (if (not close) "M " "L ") - (offset->point c0) - "C " (apply string-append (map offset->point c123)) - (if (not close) "" (string-append - "L " (offset->point close)))))) + (if (not close) "M" "L") + (offset->point c0) + "C" (string-join (map offset->point c123) " ") + (if (not close) "" "z")))) (define (sqr x) (* x x)) @@ -107,102 +114,217 @@ (apply string-append (map (lambda (x) (char->entity x)) (string->list string)))) +(define svg-element-regexp + (make-regexp "^(<[a-z]+) ?(.*>)")) + +(define scaled-element-regexp + (make-regexp "^(<[a-z]+ transform=\")(scale.[-0-9. ]+,[-0-9. ]+.\" .*>)")) + (define pango-description-regexp-comma - (make-regexp "([^,]+), ?([-a-zA-Z_]*) ([0-9.]+)$")) + (make-regexp ",( Bold)?( Italic)?( Small-Caps)?[ -]([0-9.]+)$")) (define pango-description-regexp-nocomma - (make-regexp "([^ ]+) ([-a-zA-Z_]*) ?([0-9.]+)$")) + (make-regexp "( Bold)?( Italic)?( Small-Caps)?[ -]([0-9.]+)$")) -(define (pango-description-to-svg-font str) - (let* - ((size 4.0) - (family "Helvetica") - (style #f) - (match-1 (regexp-exec pango-description-regexp-comma str)) - (match-2 (regexp-exec pango-description-regexp-nocomma str)) - (match (if match-1 - match-1 - match-2))) +(define (pango-description-to-text str expr) + (define alist '()) + (define (set-attribute attr val) + (set! alist (assoc-set! alist attr val))) + (let* ((match-1 (regexp-exec pango-description-regexp-comma str)) + (match-2 (regexp-exec pango-description-regexp-nocomma str)) + (match (if match-1 match-1 match-2))) (if (regexp-match? match) (begin - (set! family (match:substring match 1)) - (if (< 0 (string-length (match:substring match 2))) - (set! style (match:substring match 2))) - (set! size - (string->number (match:substring match 3)))) - + (set-attribute 'font-family (match:prefix match)) + (if (string? (match:substring match 1)) + (set-attribute 'font-weight "bold")) + (if (string? (match:substring match 2)) + (set-attribute 'font-style "italic")) + (if (string? (match:substring match 3)) + (set-attribute 'font-variant "small-caps")) + (set-attribute 'font-size + (/ (string->number (match:substring match 4)) + lily-unit-length)) + (set-attribute 'text-anchor "start") + (set-attribute 'fill "currentColor")) (ly:warning (_ "cannot decypher Pango description: ~a") str)) - (set! style - (if (string? style) - (format "font-style:~a;" style) - "")) - - (format "font-family:~a;~afont-size:~a;text-anchor:west" - family - style - (/ size lily-unit-length)) - )) - -;;; FONT may be font smob, or pango font string -(define (svg-font font) - (if (string? font) - (pango-description-to-svg-font font) - (let ((name-style (font-name-style font)) - (size (modified-font-metric-font-scaling font)) - (anchor "west")) - - (format "font-family:~a;font-style:~a;font-size:~a;text-anchor:~a;" - (car name-style) (cadr name-style) - size anchor)))) + (apply entity 'text expr (reverse! alist)))) + +(define (dump-path path scale . rest) + (define alist '()) + (define (set-attribute attr val) + (set! alist (assoc-set! alist attr val))) + (if (not (null? rest)) + (let* ((dx (car rest)) + (dy (cadr rest)) + (total-x (+ dx next-horiz-adv))) + (if (or (not (zero? total-x)) + (not (zero? dy))) + (let ((x (ly:format "~4f" total-x)) + (y (ly:format "~4f" dy))) + (set-attribute 'transform + (string-append + "translate(" x ", " y ") " + "scale(" scale ", -" scale ")"))) + (set-attribute 'transform + (string-append + "scale(" scale ", -" scale ")")))) + (set-attribute 'transform (string-append + "scale(" scale ", -" scale ")"))) + + (set-attribute 'd path) + (set-attribute 'fill "currentColor") + (apply entity 'path "" (reverse alist))) + + +;; A global variable for keeping track of the *cumulative* +;; horizontal advance for glyph strings, but only if there +;; is more than one glyph. +(define next-horiz-adv 0.0) + +;; Matches the required "unicode" attribute from +(define glyph-unicode-value-regexp + (make-regexp "unicode=\"([^\"]+)\"")) + +;; Matches the optional path data from +(define glyph-path-regexp + (make-regexp "d=\"([-MmZzLlHhVvCcSsQqTt0-9.\n ]*)\"")) + +;; Matches a complete element with the glyph-name +;; attribute value of NAME. For example: +;; +;; +;; +;; TODO: it would be better to use an XML library to extract +;; the glyphs instead, and store them in a hash table. --pmccarty +;; +(define (glyph-element-regexp name) + (make-regexp (string-append ""))) + +(define (extract-glyph all-glyphs name size . rest) + (let* ((new-name (regexp-quote name)) + (regexp (regexp-exec (glyph-element-regexp new-name) all-glyphs)) + (glyph (match:substring regexp)) + (unicode-attr (regexp-exec glyph-unicode-value-regexp glyph)) + (unicode-attr-value (match:substring unicode-attr 1)) + (unicode-attr? (regexp-match? unicode-attr)) + (d-attr (regexp-exec glyph-path-regexp glyph)) + (d-attr-value "") + (d-attr? (regexp-match? d-attr)) + ;; TODO: not urgent, but do not hardcode this value + (units-per-em 1000) + (font-scale (ly:format "~4f" (/ size units-per-em))) + (path "")) + + (if (and unicode-attr? (not unicode-attr-value)) + (ly:warning (_ "Glyph must have a unicode value"))) + + (if d-attr? (set! d-attr-value (match:substring d-attr 1))) + + (cond ( + ;; Glyph-strings with path data + (and d-attr? (not (null? rest))) + (begin + (set! path (apply dump-path d-attr-value + font-scale + (list (cadr rest) (caddr rest)))) + (set! next-horiz-adv (+ next-horiz-adv + (car rest))) + path)) + ;; Glyph-strings without path data ("space") + ((and (not d-attr?) (not (null? rest))) + (begin + (set! next-horiz-adv (+ next-horiz-adv + (car rest))) + "")) + ;; Font smobs with path data + ((and d-attr? (null? rest)) + (set! path (dump-path d-attr-value font-scale)) + path) + ;; Font smobs without path data ("space") + (else + "")))) + +(define (extract-glyph-info all-glyphs glyph size) + (let* ((offsets (list-head glyph 3)) + (glyph-name (car (reverse glyph)))) + (apply extract-glyph all-glyphs glyph-name size offsets))) + +(define (svg-defs svg-font) + (let ((start (string-contains svg-font "")) + (end (string-contains svg-font ""))) + (substring svg-font (+ start 7) (- end 1)))) + +(define (cache-font svg-font size glyph) + (let ((all-glyphs (svg-defs (cached-file-contents svg-font)))) + (if (list? glyph) + (extract-glyph-info all-glyphs glyph size) + (extract-glyph all-glyphs glyph size)))) + + +(define (music-string-to-path font size glyph) + (let* ((name-style (font-name-style font)) + (scaled-size (/ size lily-unit-length)) + (font-file (ly:find-file (string-append name-style ".svg")))) + + (if font-file + (cache-font font-file scaled-size glyph) + (ly:warning (_ "cannot find SVG font ~S") font-file)))) + + +(define (font-smob-to-path font glyph) + (let* ((name-style (font-name-style font)) + (scaled-size (modified-font-metric-font-scaling font)) + (font-file (ly:find-file (string-append name-style ".svg")))) + + (if font-file + (cache-font font-file scaled-size glyph) + (ly:warning (_ "cannot find SVG font ~S") font-file)))) + +(define (woff-font-smob-to-text font expr) + (let* ((name-style (font-name-style font)) + (scaled-size (modified-font-metric-font-scaling font)) + (font-file (ly:find-file (string-append name-style ".woff"))) + (charcode (ly:font-glyph-name-to-charcode font expr)) + (char-lookup (format #f "&#~S;" charcode)) + (glyph-by-name (eoc 'altglyph `(glyphname . ,expr))) + (apparently-broken + (comment "FIXME: how to select glyph by name, altglyph is broken?")) + (text (string-regexp-substitute "\n" "" + (string-append glyph-by-name apparently-broken char-lookup)))) + (define alist '()) + (define (set-attribute attr val) + (set! alist (assoc-set! alist attr val))) + (set-attribute 'font-family name-style) + (set-attribute 'font-size scaled-size) + (apply entity 'text text (reverse! alist)))) + +(define font-smob-to-text + (if (not (ly:get-option 'svg-woff)) + font-smob-to-path woff-font-smob-to-text)) (define (fontify font expr) - (entity 'text expr - `(style . ,(svg-font font)) - '(fill . "currentColor") - )) + (if (string? font) + (pango-description-to-text font expr) + (font-smob-to-text font expr))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; stencil outputters ;;; -;;; catch-all for missing stuff -;;; comment this out to see find out what functions you miss :-) - -(if #f - (begin - (define (dummy . foo) "") - (map (lambda (x) (module-define! this-module x dummy)) - (append - (ly:all-stencil-expressions) - (ly:all-output-backend-commands))) - )) - -(define (url-link url x y) - (string-append - (eo 'a `(xlink:href . ,url)) - (eoc 'rect - `(x . ,(car x)) - `(y . ,(car y)) - `(width . ,(- (cdr x) (car x))) - `(height . ,(- (cdr y) (car y))) - '(fill . "none") - '(stroke . "none") - '(stroke-width . "0.0")) - (ec 'a))) - -(define (grob-cause offset grob) - "") - -(define (no-origin) - "") - - - (define (bezier-sandwich lst thick) (let* ((first (list-tail lst 4)) - (first-c0 (car (list-tail first 3))) (second (list-head lst 4))) (entity 'path "" '(stroke-linejoin . "round") @@ -211,174 +333,341 @@ '(fill . "currentColor") `(stroke-width . ,thick) `(d . ,(string-append (svg-bezier first #f) - (svg-bezier second first-c0))) - ))) + (svg-bezier second #t)))))) -(define (path thick commands) - (define (convert-path-exps exps) - (if (pair? exps) - (let* - ((head (car exps)) - (rest (cdr exps)) - (arity - (cond - ((memq head '(rmoveto rlineto lineto moveto)) 2) - ((memq head '(rcurveto curveto)) 6) - (else 1))) - (args (take rest arity)) - (svg-head (assoc-get head '((rmoveto . m) - (rcurveto . c) - (curveto . C) - (moveto . M) - (lineto . L) - (rlineto . l)) - "")) - ) - - (cons (format "~a~a " - svg-head (number-list->point args) - ) - (convert-path-exps (drop rest arity)))) - '())) - - (entity 'path "" - `(stroke-width . ,thick) - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - '(stroke . "currentColor") - '(fill . "none") - `(d . ,(string-join (convert-path-exps commands) " ")))) - (define (char font i) (dispatch `(fontify ,font ,(entity 'tspan (char->entity (integer->char i)))))) -(define-public (comment s) - (string-append "\n")) +(define (circle radius thick is-filled) + (entity + 'circle "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(fill . ,(if is-filled "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + `(r . ,radius))) + +(define (dashed-line thick on off dx dy phase) + (draw-line thick 0 0 dx dy + `(stroke-dasharray . ,(format "~a,~a" on off)))) (define (draw-line thick x1 y1 x2 y2 . alist) - (apply entity 'line "" (append - `((stroke-linejoin . "round") - (stroke-linecap . "round") - (stroke-width . ,thick) - (stroke . "currentColor") - (x1 . ,x1) - (y1 . ,(- y1)) - (x2 . ,x2) - (y2 . ,(- y2))) - alist))) + `((stroke-linejoin . "round") + (stroke-linecap . "round") + (stroke-width . ,thick) + (stroke . "currentColor") + (x1 . ,x1) + (y1 . ,(- y1)) + (x2 . ,x2) + (y2 . ,(- y2))) + alist))) -(define (dashed-line thick on off dx dy phase) - (draw-line thick 0 0 dx dy `(style . ,(format "stroke-dasharray:~a,~a;" on off)))) +(define (ellipse x-radius y-radius thick is-filled) + (entity + 'ellipse "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(fill . ,(if is-filled "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + `(rx . ,x-radius) + `(ry . ,y-radius))) + +(define (partial-ellipse x-radius y-radius start-angle end-angle thick connect fill) + (define (make-ellipse-radius x-radius y-radius angle) + (/ (* x-radius y-radius) + (sqrt (+ (* (* y-radius y-radius) + (* (cos angle) (cos angle))) + (* (* x-radius x-radius) + (* (sin angle) (sin angle))))))) + (let* + ((new-start-angle (* PI-OVER-180 (angle-0-360 start-angle))) + (start-radius (make-ellipse-radius x-radius y-radius new-start-angle)) + (new-end-angle (* PI-OVER-180 (angle-0-360 end-angle))) + (end-radius (make-ellipse-radius x-radius y-radius new-end-angle)) + (epsilon 1.5e-3) + (x-end (- (* end-radius (cos new-end-angle)) + (* start-radius (cos new-start-angle)))) + (y-end (- (* end-radius (sin new-end-angle)) + (* start-radius (sin new-start-angle))))) + (if (and (< (abs x-end) epsilon) (< (abs y-end) epsilon)) + (entity + 'ellipse "" + `(fill . ,(if fill "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + '(cx . 0) + '(cy . 0) + `(rx . ,x-radius) + `(ry . ,y-radius)) + (entity + 'path "" + `(fill . ,(if fill "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + (cons + 'd + (string-append + (ly:format + "M~4f ~4fA~4f ~4f 0 ~4f 0 ~4f ~4f" + (* start-radius (cos new-start-angle)) + (- (* start-radius (sin new-start-angle))) + x-radius + y-radius + (if (> 0 (- new-start-angle new-end-angle)) 0 1) + (* end-radius (cos new-end-angle)) + (- (* end-radius (sin new-end-angle)))) + (if connect + (ly:format "L~4f,~4f" + (* start-radius (cos new-start-angle)) + (- (* start-radius (sin new-start-angle)))) + ""))))))) + +(define (embedded-svg string) + string) + +(define (embedded-glyph-string font size cid glyphs) + (define path "") + (if (= 1 (length glyphs)) + (set! path (music-string-to-path font size (car glyphs))) + (begin + (set! path + (string-append (eo 'g) + (string-join + (map (lambda (x) + (music-string-to-path font size x)) + glyphs) + "\n") + (ec 'g))))) + (set! next-horiz-adv 0.0) + path) + +(define (woff-glyph-string font-name size cid? w-x-y-named-glyphs) + (let* ((name-style (font-name-style font-name)) + (family-designsize (regexp-exec (make-regexp "(.*)-([0-9]*)") + font-name)) + (family (if (regexp-match? family-designsize) + (match:substring family-designsize 1) + font-name)) + (design-size (if (regexp-match? family-designsize) + (match:substring family-designsize 2) + #f)) + (scaled-size (/ size lily-unit-length)) + (font (ly:paper-get-font paper `(((font-family . ,family) + ,(if design-size + `(design-size . design-size))))))) + (define (glyph-spec w x y g) + (let* ((charcode (ly:font-glyph-name-to-charcode font g)) + (char-lookup (format #f "&#~S;" charcode)) + (glyph-by-name (eoc 'altglyph `(glyphname . ,g))) + (apparently-broken + (comment "XFIXME: how to select glyph by name, altglyph is broken?"))) + ;; what is W? + (ly:format + "~a" + (if (or (> (abs x) 0.00001) + (> (abs y) 0.00001)) + (ly:format " transform=\"translate(~4f,~4f)\"" x y) + " ") + name-style scaled-size + (string-regexp-substitute + "\n" "" + (string-append glyph-by-name apparently-broken char-lookup))))) + + (string-join (map (lambda (x) (apply glyph-spec x)) + (reverse w-x-y-named-glyphs)) "\n"))) + +(define glyph-string + (if (not (ly:get-option 'svg-woff)) embedded-glyph-string woff-glyph-string)) + +(define (grob-cause offset grob) + "") (define (named-glyph font name) - (dispatch - `(fontify ,font ,(entity 'tspan - (integer->entity - (ly:font-glyph-name-to-charcode font name)))))) + (dispatch `(fontify ,font ,name))) + +(define (no-origin) + "") + +(define (oval x-radius y-radius thick is-filled) + (let ((x-max x-radius) + (x-min (- x-radius)) + (y-max y-radius) + (y-min (- y-radius))) + (entity + 'path "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(fill . ,(if is-filled "currentColor" "none")) + `(stroke . "currentColor") + `(stroke-width . ,thick) + `(d . ,(ly:format "M~4f ~4fC~4f ~4f ~4f ~4f ~4f ~4fS~4f ~4f ~4f ~4fz" + x-max 0 + x-max y-max + x-min y-max + x-min 0 + x-max y-min + x-max 0))))) + +(define* (path thick commands #:optional (cap 'round) (join 'round) (fill? #f)) + (define (convert-path-exps exps) + (if (pair? exps) + (let* + ((head (car exps)) + (rest (cdr exps)) + (arity + (cond ((memq head '(rmoveto rlineto lineto moveto)) 2) + ((memq head '(rcurveto curveto)) 6) + ((eq? head 'closepath) 0) + (else 1))) + (args (take rest arity)) + (svg-head (assoc-get head + '((rmoveto . m) + (rcurveto . c) + (curveto . C) + (moveto . M) + (lineto . L) + (rlineto . l) + (closepath . z)) + ""))) + + (cons (format "~a~a" svg-head (number-list->point args)) + (convert-path-exps (drop rest arity)))) + '())) + + (let* ((line-cap-styles '(butt round square)) + (line-join-styles '(miter round bevel)) + (cap-style (if (not (memv cap line-cap-styles)) + (begin + (ly:warning (_ "unknown line-cap-style: ~S") + (symbol->string cap)) + 'round) + cap)) + (join-style (if (not (memv join line-join-styles)) + (begin + (ly:warning (_ "unknown line-join-style: ~S") + (symbol->string join)) + 'round) + join))) + (entity 'path "" + `(stroke-width . ,thick) + `(stroke-linejoin . ,(symbol->string join-style)) + `(stroke-linecap . ,(symbol->string cap-style)) + '(stroke . "currentColor") + `(fill . ,(if fill? "currentColor" "none")) + `(d . ,(apply string-append (convert-path-exps commands)))))) (define (placebox x y expr) - (entity 'g - expr - ;; FIXME: Not using GNU coding standards [translate ()] here - ;; to work around a bug in Microsoft Internet Explorer 6.0 - `(transform . ,(ly:format "translate(~f, ~f)" - x (- y))))) + (if (string-null? expr) + "" + (let* + ((normal-element (regexp-exec svg-element-regexp expr)) + (scaled-element (regexp-exec scaled-element-regexp expr)) + (scaled? (if scaled-element #t #f)) + (match (if scaled? scaled-element normal-element)) + (string1 (match:substring match 1)) + (string2 (match:substring match 2))) + + (if scaled? + (string-append string1 + (ly:format "translate(~4f, ~4f) " x (- y)) + string2 + "\n") + (string-append string1 + (ly:format " transform=\"translate(~4f, ~4f)\" " + x (- y)) + string2 + "\n"))))) (define (polygon coords blot-diameter is-filled) (entity - 'polygon "" - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - `(stroke-width . ,blot-diameter) - `(fill . ,(if is-filled "currentColor" "none")) - '(stroke . "currentColor") - `(points . ,(string-join - (map offset->point (ly:list->offsets '() coords)))) - )) + 'polygon "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(stroke-width . ,blot-diameter) + `(fill . ,(if is-filled "currentColor" "none")) + '(stroke . "currentColor") + `(points . ,(string-join + (map offset->point (ly:list->offsets '() coords)))))) + +(define (repeat-slash width slope thickness) + (define (euclidean-length x y) + (sqrt (+ (* x x) (* y y)))) + (let* ((x-width (euclidean-length thickness (/ thickness slope))) + (height (* width slope))) + (entity + 'path "" + '(fill . "currentColor") + `(d . ,(ly:format "M0 0l~4f 0 ~4f ~4f ~4f 0z" + x-width width (- height) (- x-width)))))) -;; rotate around given point -(define (setrotation ang x y) - (format "" - (number->string (* -1 ang)) - (number->string x) - (number->string (* -1 y)))) +(define (resetcolor) + "\n") (define (resetrotation ang x y) - "
### is added to every page; implemented by: ### lilypond_print_element_header -- building of the TOC @@ -63,26 +63,353 @@ ### non-standard chars replaced by _xxxx (ascii char code) and forced to ### start with a letter by prepending t_g if necessary) +package main; +$original_normalise_node = \&normalise_node; + +sub t2h_default_normalise_node($) +{ + my $text = shift; + $original_normalise_node->($text); +} + +*normalise_node = sub($) +{ + my $text = shift; + return &$Texi2HTML::Config::normalise_node($text); +}; package Texi2HTML::Config; +##$normalise_node = \&t2h_default_normalise_node; +$normalise_node = \&lilypond_normalise_node; + + +use utf8; +use Encode qw(decode); ############################################################################# ### TRANSLATIONS ############################################################################# -use utf8; my $LY_LANGUAGES = {}; -$LY_LANGUAGES->{'fr'} = { - 'Back to Documentation Index' => 'Retour à l\'accueil de la documentation', +$LY_LANGUAGES->{'cs'} = { + 'Back to Documentation Index' => '', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', }; + +$LY_LANGUAGES->{'de'} = { + 'Back to Documentation Index' => 'Zur Dokumentationsübersicht', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', +}; + $LY_LANGUAGES->{'es'} = { 'Back to Documentation Index' => 'Volver al índice de la documentación', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '

Agradecemos a ${webdev_link} el alojamiento de ${lily_site}.', }; -$LY_LANGUAGES->{'de'} = { - 'Back to Documentation Index' => 'Zur Dokumentationsübersicht', + +$LY_LANGUAGES->{'fr'} = { + 'Back to Documentation Index' => 'Retour à l\'accueil de la documentation', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '

Remerciements à ${webdev_link} pour l\'hébergement de ${lily_site}.', +}; + + +$LY_LANGUAGES->{'hu'} = { + 'Back to Documentation Index' => 'Vissza a dokumentációk jegyzékéhez', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => 'Köszönet a ${webdev_link} részére a ${lily_site} tárhelyért.', +}; + +$LY_LANGUAGES->{'it'} = { + 'Back to Documentation Index' => 'Torna all\'indice della documentazione', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', +}; + +$LY_LANGUAGES->{'ja'} = { + 'Back to Documentation Index' => 'ドキュメント インデックスに戻る', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '${lily_site} をホスティングしてくれている ${webdev_link} に感謝します。', +}; + + +$LY_LANGUAGES->{'nl'} = { + 'Back to Documentation Index' => 'Terug naar de Documentatieindex', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '

Met dank aan ${webdev_link} voor het hosten van ${lily_site}.', +}; + +$LY_LANGUAGES->{'zh'} = { + 'Back to Documentation Index' => '回到文档索引', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '非常感谢 ${webdev_link} 提供 ${lily_site} 的主机空间。', }; # FIXME: request the translations below then send them to texi2html/texinfo devs + +$LANGUAGES->{'it'} = { + ' The buttons in the navigation panels have the following meaning:' => ' I bottoni nei pannelli di navigazione hanno il seguente significato:', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' dove @strong{ Esempio } assume che l\'attuale posizione è alla @strong{ Sottosottosezione Uno-Due-Tre } di un documento che ha la seguente struttura:', + ' Up ' => ' Su ', + '(outside of any element)' => '(fuori da qualsiasi elemento)', + '(outside of any node)' => '(fuori da qualsiasi nodo)', + '@b{{quotation_arg}:} ' => '@b{{quotation_arg}:} ', + '@cite{{book}}' => '@cite{{book}}', + '@{No value for `{value}\'@}' => '@{Nessun valore per `{value}\'@}', + 'About' => 'Informazioni', + 'About (help)' => 'Informazioni (aiuto)', + 'About This Document' => 'Informazioni su questo documento', + 'April' => 'Aprile', + 'August' => 'Agosto', + 'Back' => 'Indietro', + 'Back section in previous file' => '', + 'Beginning of this chapter or previous chapter' => 'Inizio di questo capitolo o capitolo precedente', + 'Button' => 'Bottone', + 'Contents' => 'Contenuti', + 'Cover (top) of document' => 'Copertina (inizio) del documento', + 'Current' => 'Attuale', + 'Current Position' => 'Posizione Attuale', + 'Current section' => 'Sezione attuale', + 'December' => 'Dicembre', + 'FastBack' => 'Indietro veloce', + 'FastForward' => 'Avanti veloce', + 'February' => 'Febbraio', + 'First' => 'Primo', + 'First section in reading order' => 'Prima sezione in ordine di lettura', + 'Following' => 'Seguente', + 'Following node' => 'Nodo seguente', + 'Footnotes' => 'Note a piè di pagina', + 'Forward' => 'Avanti', + 'Forward section in next file' => 'Sezione successiva nel prossimo file', + 'From 1.2.3 go to' => 'Da 1.2.3 vai a', + 'Go to' => 'Vai a', + 'Index' => 'Indice', + 'Index Entry' => 'Voce dell\'indice', + 'January' => 'Gennaio', + 'July' => 'Luglio', + 'Jump to' => 'Salta a', + 'June' => 'Giugno', + 'Last' => 'Ultimo', + 'Last section in reading order' => 'Ultima sezione in ordine di lettura', + 'March' => 'Marzo', + 'May' => 'Maggio', + 'Menu:' => 'Menu', + 'Name' => 'Nome', + 'Next' => 'Successivo', + 'Next chapter' => 'Capitolo successivo', + 'Next file' => 'File successivo', + 'Next node' => 'Nodo successivo', + 'Next section in reading order' => 'Sezione successiva in ordine di lettura', + 'Next section on same level' => 'Sezione successiva sullo stesso livello', + 'NextFile' => 'File successivo', + 'Node following in node reading order' => 'Nodo seguente in ordine di lettura', + 'Node up' => 'Nodo superiore', + 'NodeNext' => 'Nodo successivo', + 'NodePrev' => 'Nodo precedente', + 'NodeUp' => 'Nodo superiore', + 'November' => 'Novembre', + 'October' => 'Ottobre', + 'Overview' => 'Panoramica', + 'Prev' => 'Prec.', + 'PrevFile' => 'File precedente', + 'Previous' => 'Precedente', + 'Previous file' => 'File precedente', + 'Previous node' => 'Nodo precedente', + 'Previous section in reading order' => 'Sezione precedente in ordine di lettura', + 'Previous section on same level' => 'Sezione precedente sullo stesso livello', + 'Section' => 'Sezione', + 'Section One' => 'Sezione uno', + 'See ' => 'Vedi', + 'See @cite{{book}}' => 'Vedi @cite{{book}}', + 'See section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'Vedi la sezione `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}', + 'See section `{section}\' in @cite{{book}}' => 'Vedi la sezione `{section}\' in @cite{{book}}', + 'See section {reference_name}' => 'Vedi la sezione {reference_name}', + 'See {node_file_href}' => 'Vedi {node_file_href}', + 'See {node_file_href} @cite{{book}}' => 'Vedi {node_file_href} @cite{{book}}', + 'See {node_file_href} section `{section}\' in @cite{{book}}' => 'Vedi {node_file_href} nella sezione `{section}\' in @cite{{book}}', + 'See {reference_name}' => 'Vedi {reference_name}', + 'See {ref}' => 'Vedi {ref}', + 'See {title_ref}' => 'Vedi {title_ref}', + 'September' => 'Settembre', + 'Short Table of Contents' => 'Indice breve', + 'Short table of contents' => 'Indice breve', + 'Subsection One-Four' => 'Sottosezione Uno-Quattro', + 'Subsection One-One' => 'Sottosezione Uno-Uno', + 'Subsection One-Three' => 'Sottosezione Uno-Tre', + 'Subsection One-Two' => 'Sottosezione Uno-Due', + 'Subsubsection One-Two-Four' => 'Sottosottosezione Uno-Due-Quattro', + 'Subsubsection One-Two-One' => 'Sottosottosezione Uno-Due-Uno', + 'Subsubsection One-Two-Three' => 'Sottosottosezione Uno-Due-Tre', + 'Subsubsection One-Two-Two' => 'Sottosottosezione Uno-Due-Due', + 'T2H_today' => '%s, %d %d', + 'Table of Contents' => 'Indice', + 'Table of contents' => 'Indice', + 'The node you are looking for is at {href}.' => 'Il nodo che stai cercando è {href}', + 'This' => 'Questo', + 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => 'Questo documento è stato generato il @i{{date}} con @uref{{program_homepage}, @i{{program}}}.', + 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => 'Questo documento è stato generato con @uref{{program_homepage}, @emph{{program}}}.', + 'Top' => 'Inizio', + 'Untitled Document' => 'Documento senza titolo', + 'Up' => 'Su', + 'Up node' => 'Nodo superiore', + 'Up section' => 'Sezione superiore', + 'current' => 'attuale', + 'on @emph{{date}}' => 'il @emph{{date}}', + 'section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'sezione `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}', + 'section `{section}\' in @cite{{book}}' => 'sezione `{section}\' in @cite{{book}}', + 'see ' => 'vedi ', + 'see @cite{{book}}' => 'vedi @cite{{book}}', + 'see section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'vedi la sezione `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}', + 'see section `{section}\' in @cite{{book}}' => 'vedi la sezione `{section}\' in @cite{{book}}', + 'see section {reference_name}' => 'vedi la sezione {reference_name}', + 'see {node_file_href}' => 'vedi {node_file_href}', + 'see {node_file_href} @cite{{book}}' => 'vedi {node_file_href} @cite{{book}}', + 'see {node_file_href} section `{section}\' in @cite{{book}}' => 'vedi {node_file_href} nella sezione `{section}\' in @cite{{book}}', + 'see {reference_name}' => 'vedi {reference_name}', + 'see {ref}' => 'vedi {ref}', + 'see {title_ref}' => 'vedi {title_ref}', + '{acronym_like} ({explanation})' => '{acronym_like} ({explanation})', + '{name} of {class}' => '{name} di {class}', + '{name} on {class}' => '{name} in {class}', + '{node_file_href}' => '{node_file_href}', + '{node_file_href} @cite{{book}}' => '{node_file_href} @cite{{book}}', + '{node_file_href} section `{section}\' in @cite{{book}}' => '{node_file_href} nella sezione `{section}\' in @cite{{book}}', + '{reference_name}' => '{reference_name}', + '{ref}' => '{ref}', + '{style} {number}' => '{style} {number}', + '{style}: {caption_first_line}' => '{style}: {caption_first_line}', + '{style}: {shortcaption_first_line}' => '{style}: {shortcaption_first_line}', + '{title_ref}' => '{title_ref}' + }; + +$LANGUAGES->{'hu'} = { + ' The buttons in the navigation panels have the following meaning:' => ' A navigációs panelen levő gombok jelentése a következő:', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' @strong{ Példánkban } az aktuális pozíció az @strong{ 1.2.3 alalszakasz } egy olyan dokumentumban, melynek szerkezete a következő:', + ' Up ' => 'Fel', + '(outside of any element)' => '(bármelyik elemen kívül)', + '(outside of any node)' => '(bármelyik csomóponton kívül)', + '@b{{quotation_arg}:} ' => '@b{{quotation_arg}:} ', + '@cite{{book}}' => '@cite{{book}}', + '@{No value for `{value}\'@}' => '@{Nincs értéke ennek: `{value}\'@}', + 'About' => 'Súgó', + 'About (help)' => 'Segítség a navigációhoz', + 'About This Document' => 'A navigációs panel használata', + 'April' => 'április', + 'August' => 'augusztus', + 'Back' => 'Vissza', + 'Back section in previous file' => 'Előző fájl hátsó szakasza', + 'Beginning of this chapter or previous chapter' => 'Fejezet eleje vagy előző fejezet', + 'Button' => 'Gomb', + 'Contents' => 'Tartalom', + 'Cover (top) of document' => 'Dokumentum címoldala', + 'Current' => 'Aktuális', + 'Current Position' => 'Aktuális pozíció', + 'Current section' => 'Aktuális szakasz', + 'December' => 'december', + 'FastBack' => 'Visszaugrás', + 'FastForward' => 'Előreugrás', + 'February' => 'február', + 'First' => 'Első', + 'First section in reading order' => 'Első szakasz az olvasási sorrendben', + 'Following' => 'Következő', + 'Following node' => 'Következő csomópont', + 'Footnotes' => 'Lábjegyzet', + 'Forward' => 'Előre', + 'Forward section in next file' => 'Következő fájl elülső szakasza', + 'From 1.2.3 go to' => '1.2.3-ból ide jutunk', + 'Go to' => 'Cél', + 'Index' => 'Tárgymutató', + 'Index Entry' => 'Tárgymutató-bejegyzés', + 'January' => 'január', + 'July' => 'július', + 'Jump to' => 'Ugorj ide', + 'June' => 'június', + 'Last' => 'Utolsó', + 'Last section in reading order' => 'Utolsó szakasz az olvasási sorrendben', + 'March' => 'március', + 'May' => 'május', + 'Menu:' => 'Menü:', + 'Name' => 'Név', + 'Next' => 'Következő', + 'Next chapter' => 'Következő fejezet', + 'Next file' => 'Következő fájl', + 'Next node' => 'Következő csomópont', + 'Next section in reading order' => 'Következő szakasz az olvasási sorrendben', + 'Next section on same level' => 'Következő szakasz ugyanazon a szinten', + 'NextFile' => 'KövetkezőFájl', + 'Node following in node reading order' => 'Következő csomópont az olvasási sorrendben', + 'Node up' => 'Szülő csomópont', + 'NodeNext' => 'KövetkezőCsomópont', + 'NodePrev' => 'ElőzőCsomópont', + 'NodeUp' => 'SzülőCsomópont', + 'November' => 'november', + 'October' => 'október', + 'Overview' => 'Áttekintés', + 'Prev' => 'Előző', + 'PrevFile' => 'ElőzőFájl', + 'Previous' => 'Előző', + 'Previous file' => 'Előző fájl', + 'Previous node' => 'Előző csomópont', + 'Previous section in reading order' => 'Előző szakasz az olvasási sorrendben', + 'Previous section on same level' => 'Előző szakasz ugyanazon a szinten', + 'Section' => 'Szakasz', + 'Section One' => 'szakasz', + 'See ' => 'Ld. ', + 'See @cite{{book}}' => 'Ld. @cite{{book}}', + 'See section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'Ld. ezt a szakaszt: `@asis{}`{section_name}\'@asis{}\' itt: @cite{{book}}', + 'See section `{section}\' in @cite{{book}}' => 'Ld. ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'See section {reference_name}' => 'Ld. ezt a szakaszt: {reference_name}', + 'See {node_file_href}' => 'Ld. {node_file_href}', + 'See {node_file_href} @cite{{book}}' => 'See {node_file_href} @cite{{book}}', + 'See {node_file_href} section `{section}\' in @cite{{book}}' => 'Ld. {node_file_href} ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'See {reference_name}' => 'Ld. {reference_name}', + 'See {ref}' => 'Ld. {ref}', + 'See {title_ref}' => 'Ld. {title_ref}', + 'September' => 'szeptember', + 'Short Table of Contents' => 'Rövid tartalomjegyzék', + 'Short table of contents' => 'Rövid tartalomjegyzék', + 'Subsection One-Four' => 'alszakasz', + 'Subsection One-One' => 'alszakasz', + 'Subsection One-Three' => 'alszakasz', + 'Subsection One-Two' => 'alszakasz', + 'Subsubsection One-Two-Four' => 'alalszakasz', + 'Subsubsection One-Two-One' => 'alalszakasz', + 'Subsubsection One-Two-Three' => 'alalszakasz', + 'Subsubsection One-Two-Two' => 'alalszakasz', + 'T2H_today' => '%s, %d %d', + 'Table of Contents' => 'Tartalomjegyzék', + 'Table of contents' => 'Tartalomjegyzék', + 'The node you are looking for is at {href}.' => 'A keresett csomópont itt található: {href}.', + 'This' => 'Ez a(z)', + 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => 'Ezt a dokumentumot @i{{date}} napon generálta a(z) @uref{{program_homepage}, @i{{program}}}.', + 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => 'Ezt a dokumentumot a(z) @uref{{program_homepage}, @emph{{program}}} generálta.', + 'Top' => 'Címoldal', + 'Untitled Document' => 'Névtelen dokumentum', + 'Up' => 'Fel', + 'Up node' => 'Szülő csomópont', + 'Up section' => 'Szülő szakasz', + 'current' => 'aktuális', + 'on @emph{{date}}' => 'ekkor: @emph{{date}}', + 'section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'szakasz: `@asis{}`{section_name}\'@asis{}\' itt: @cite{{book}}', + 'section `{section}\' in @cite{{book}}' => 'szakasz: `{section}\' itt: @cite{{book}}', + 'see ' => 'ld. ', + 'see @cite{{book}}' => 'ld. @cite{{book}}', + 'see section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'ld. ezt a szakaszt: `@asis{}`{section_name}\'@asis{}\' itt: @cite{{book}}', + 'see section `{section}\' in @cite{{book}}' => 'ld. ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'see section {reference_name}' => 'ld. ezt a szakaszt: {reference_name}', + 'see {node_file_href}' => 'ld. {node_file_href}', + 'see {node_file_href} @cite{{book}}' => 'ld. {node_file_href} @cite{{book}}', + 'see {node_file_href} section `{section}\' in @cite{{book}}' => 'ld. {node_file_href} ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'see {reference_name}' => 'ld. {reference_name}', + 'see {ref}' => 'ld. {ref}', + 'see {title_ref}' => 'ld. {title_ref}', + '{acronym_like} ({explanation})' => '{acronym_like} ({explanation})', + '{name} of {class}' => '{name} típusa: {class}', + '{name} on {class}' => '{name} ezen: {class}', + '{node_file_href}' => '{node_file_href}', + '{node_file_href} @cite{{book}}' => '{node_file_href} @cite{{book}}', + '{node_file_href} section `{section}\' in @cite{{book}}' => '{node_file_href} szakasz: `{section}\' itt: @cite{{book}}', + '{reference_name}' => '{reference_name}', + '{ref}' => '{ref}', + '{style} {number}' => '{style} {number}', + '{style}: {caption_first_line}' => '{style}: {caption_first_line}', + '{style}: {shortcaption_first_line}' => '{style}: {shortcaption_first_line}', + '{title_ref}' => '{title_ref}' + }; + $LANGUAGES->{'ja'} = { ' The buttons in the navigation panels have the following meaning:' => ' ナビゲーション パネルの中にあるボタンには以下のような意味があります:', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' この表で、@strong{ 行き先 } は、現在の位置が以下のような構造を持つドキュメントの @strong{ サブサブセクション 1-2-3 } であると仮定しています:', @@ -97,45 +424,180 @@ $LANGUAGES->{'ja'} = { 'About This Document' => 'このドキュメントについて', 'April' => '4 月', 'August' => '8 月', - 'Back' => 'Back', - 'Back section in previous file' => '', + 'Back' => '戻る', + 'Back section in previous file' => '前のファイルのセクションに戻る', 'Beginning of this chapter or previous chapter' => 'この章あるいは前の章の先頭', 'Button' => 'ボタン', 'Contents' => '目次', 'Cover (top) of document' => 'ドキュメントの表紙 (先頭)', - 'Current' => '', + 'Current' => '現在の', 'Current Position' => '現在の位置', - 'Current section' => '', + 'Current section' => '現在のセクション', 'December' => '12 月', - 'FastBack' => '', - 'FastForward' => '', + 'FastBack' => '大きく戻る', + 'FastForward' => '大きく進む', 'February' => '2 月', - 'First' => '', - 'First section in reading order' => '', - 'Following' => '', - 'Following node' => '', + 'First' => '最初', + 'First section in reading order' => '最初のセクション', + 'Following' => '次', + 'Following node' => '次のノード', 'Footnotes' => '脚注', - 'Forward' => '', - 'Forward section in next file' => '', + 'Forward' => '進む', + 'Forward section in next file' => '次のファイルのセクションに進む', 'From 1.2.3 go to' => '1.2.3 からの行き先', 'Go to' => '行き先', 'Index' => 'インデックス', 'Index Entry' => 'インデックス エントリ', 'January' => '1 月', 'July' => '7 月', - 'Jump to' => '', + 'Jump to' => '行き先', 'June' => '6月', - 'Last' => '', - 'Last section in reading order' => '', + 'Last' => '最後', + 'Last section in reading order' => '最後のセクション', 'March' => '3 月', 'May' => '5 月', 'Menu:' => 'メニュー', + 'Name' => '名前', + 'Next' => '次', + 'Next chapter' => '次の章', + 'Next file' => '次のファイル', + 'Next node' => '次のノード', + 'Next section in reading order' => '次のセクション', + 'Next section on same level' => '次のセクション', + 'NextFile' => '次のファイル', + 'Node following in node reading order' => '次のノード', + 'Node up' => '上のノード', + 'NodeNext' => '次のノード', + 'NodePrev' => '前のノード', + 'NodeUp' => '上のノード', + 'November' => '11 月', + 'October' => '10 月', + 'Overview' => '概要', + 'Prev' => '前', + 'PrevFile' => '前のファイル', + 'Previous' => '前の', + 'Previous file' => '前のファイル', + 'Previous node' => '前のノード', + 'Previous section in reading order' => '前のセクション', + 'Previous section on same level' => '前のセクション', + 'Section' => 'セクション', + 'Section One' => 'セクション 1', + 'See ' => '参照', + 'See @cite{{book}}' => '@cite{{book}} を参照してください', + 'See section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '@cite{{book}} のセクション `@asis{}`{section_name}\'@asis{}\' を参照してください', + 'See section `{section}\' in @cite{{book}}' => '@cite{{book}} のセクション `{section}\' を参照してください', + 'See section {reference_name}' => 'セクション {reference_name} を参照してください', + 'See {node_file_href}' => '{node_file_href} を参照してください', + 'See {node_file_href} @cite{{book}}' => '@cite{{book}} の {node_file_href} を参照してください', + 'See {node_file_href} section `{section}\' in @cite{{book}}' => '@cite{{book}} の {node_file_href} セクション `{section}\' を参照してください', + 'See {reference_name}' => '{reference_name} を参照してください', + 'See {ref}' => '{ref} を参照してください', + 'See {title_ref}' => '{title_ref} を参照してください', + 'September' => '9 月', + 'Short Table of Contents' => '簡単な目次', + 'Short table of contents' => '簡単な目次', + 'Subsection One-Four' => 'サブセクション 1-4', + 'Subsection One-One' => 'サブセクション 1-1', + 'Subsection One-Three' => 'サブセクション 1-3', + 'Subsection One-Two' => 'サブセクション 1-2', + 'Subsubsection One-Two-Four' => 'サブサブセクション 1-2-4', + 'Subsubsection One-Two-One' => 'サブサブセクション 1-2-1', + 'Subsubsection One-Two-Three' => 'サブサブセクション 1-2-3', + 'Subsubsection One-Two-Two' => 'サブサブセクション 1-2-2', + 'T2H_today' => '%s, %d %d', + 'Table of Contents' => '目次', + 'Table of contents' => '目次', + 'The node you are looking for is at {href}.' => 'あなたが探しているノードは {href} にあります。', + 'This' => 'この', + 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => 'このドキュメントは @i{{date}} に、@uref{{program_homepage}, @i{{program}}} を用いて生成されました。', + 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => 'このドキュメントは @uref{{program_homepage}, @emph{{program}}} を用いて生成されました。', + 'Top' => 'トップ', + 'Untitled Document' => '無題のドキュメント', + 'Up' => '上', + 'Up node' => '上のノード', + 'Up section' => '上のセクション', + 'current' => '現在の', + 'on @emph{{date}}' => '@emph{{date}} に', + 'section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '@cite{{book}} のセクション `@asis{}`{section_name}\'@asis{}\'', + 'section `{section}\' in @cite{{book}}' => '@cite{{book}} のセクション `{section}\'', + 'see ' => '参照', + 'see @cite{{book}}' => '@cite{{book}} を参照してください', + 'see section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '@cite{{book}} のセクション `@asis{}`{section_name}\'@asis{}\' を参照してください', + 'see section `{section}\' in @cite{{book}}' => '@cite{{book}} のセクション `{section}\' を参照してください', + 'see section {reference_name}' => 'セクション {reference_name} を参照してください', + 'see {node_file_href}' => '{node_file_href} を参照してください', + 'see {node_file_href} @cite{{book}}' => '{node_file_href} @cite{{book}} を参照してください', + 'see {node_file_href} section `{section}\' in @cite{{book}}' => '@cite{{book}} の {node_file_href} section `{section}\' を参照してください', + 'see {reference_name}' => '{reference_name} を参照してください', + 'see {ref}' => '{ref} を参照してくださ', + 'see {title_ref}' => '{title_ref} を参照してくださ', + '{acronym_like} ({explanation})' => '{acronym_like} ({explanation})', + '{name} of {class}' => '{class} の {name}', + '{name} on {class}' => '{class} の {name}', + '{node_file_href}' => '{node_file_href}', + '{node_file_href} @cite{{book}}' => '{node_file_href} @cite{{book}}', + '{node_file_href} section `{section}\' in @cite{{book}}' => '@cite{{book}} の {node_file_href} セクション `{section}\'', + '{reference_name}' => '{reference_name}', + '{ref}' => '{ref}', + '{style} {number}' => '{style} {number}', + '{style}: {caption_first_line}' => '{style}: {caption_first_line}', + '{style}: {shortcaption_first_line}' => '{style}: {shortcaption_first_line}', + '{title_ref}' => '{title_ref}' + }; + +$LANGUAGES->{'cs'} = { + ' The buttons in the navigation panels have the following meaning:' => '', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', + ' Up ' => '', + '(outside of any element)' => '', + '(outside of any node)' => '', + '@b{{quotation_arg}:} ' => '', + '@cite{{book}}' => '', + '@{No value for `{value}\'@}' => '', + 'About' => '', + 'About (help)' => '', + 'About This Document' => '', + 'April' => '', + 'August' => '', + 'Back' => '', + 'Back section in previous file' => '', + 'Beginning of this chapter or previous chapter' => '', + 'Button' => '', + 'Contents' => '', + 'Cover (top) of document' => '', + 'Current' => '', + 'Current Position' => '', + 'Current section' => '', + 'December' => '', + 'FastBack' => '', + 'FastForward' => '', + 'February' => '', + 'First' => '', + 'First section in reading order' => '', + 'Following' => '', + 'Following node' => '', + 'Footnotes' => '', + 'Forward' => '', + 'Forward section in next file' => '', + 'From 1.2.3 go to' => '', + 'Go to' => '', + 'Index' => '', + 'Index Entry' => '', + 'January' => '', + 'July' => '', + 'Jump to' => '', + 'June' => '', + 'Last' => '', + 'Last section in reading order' => '', + 'March' => '', + 'May' => '', + 'Menu:' => '', 'Name' => '', 'Next' => '', - 'Next chapter' => '次の章', + 'Next chapter' => '', 'Next file' => '', 'Next node' => '', - 'Next section in reading order' => '次のセクション', + 'Next section in reading order' => '', 'Next section on same level' => '', 'NextFile' => '', 'Node following in node reading order' => '', @@ -143,18 +605,18 @@ $LANGUAGES->{'ja'} = { 'NodeNext' => '', 'NodePrev' => '', 'NodeUp' => '', - 'November' => '11 月', - 'October' => '10 月', - 'Overview' => '概要', + 'November' => '', + 'October' => '', + 'Overview' => '', 'Prev' => '', 'PrevFile' => '', 'Previous' => '', 'Previous file' => '', 'Previous node' => '', - 'Previous section in reading order' => '前のセクション', + 'Previous section in reading order' => '', 'Previous section on same level' => '', - 'Section' => 'セクション', - 'Section One' => 'セクション 1', + 'Section' => '', + 'Section One' => '', 'See ' => '', 'See @cite{{book}}' => '', 'See section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '', @@ -166,31 +628,31 @@ $LANGUAGES->{'ja'} = { 'See {reference_name}' => '', 'See {ref}' => '', 'See {title_ref}' => '', - 'September' => '9 月', + 'September' => '', 'Short Table of Contents' => '', 'Short table of contents' => '', - 'Subsection One-Four' => 'サブセクション 1-4', - 'Subsection One-One' => 'サブセクション 1-1', - 'Subsection One-Three' => 'サブセクション 1-3', - 'Subsection One-Two' => 'サブセクション 1-2', - 'Subsubsection One-Two-Four' => 'サブサブセクション 1-2-4', - 'Subsubsection One-Two-One' => 'サブサブセクション 1-2-1', - 'Subsubsection One-Two-Three' => 'サブサブセクション 1-2-3', - 'Subsubsection One-Two-Two' => 'サブサブセクション 1-2-2', - 'T2H_today' => '%s, %d %d', - 'Table of Contents' => '目次', - 'Table of contents' => '目次', + 'Subsection One-Four' => '', + 'Subsection One-One' => '', + 'Subsection One-Three' => '', + 'Subsection One-Two' => '', + 'Subsubsection One-Two-Four' => '', + 'Subsubsection One-Two-One' => '', + 'Subsubsection One-Two-Three' => '', + 'Subsubsection One-Two-Two' => '', + 'T2H_today' => '', + 'Table of Contents' => '', + 'Table of contents' => '', 'The node you are looking for is at {href}.' => '', 'This' => '', - 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => 'このドキュメントは @i{{date}} に、@uref{{program_homepage}, @i{{program}}} を用いて生成されました。', - 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => 'このドキュメントは @uref{{program_homepage}, @emph{{program}}} を用いて生成されました。', - 'Top' => 'トップ', + 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => '', + 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => '', + 'Top' => '', 'Untitled Document' => '', - 'Up' => '上', + 'Up' => '', 'Up node' => '', - 'Up section' => '上のセクション', + 'Up section' => '', 'current' => '', - 'on @emph{{date}}' => '@emph{{date}} に', + 'on @emph{{date}}' => '', 'section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '', 'section `{section}\' in @cite{{book}}' => '', 'see ' => '', @@ -204,13 +666,148 @@ $LANGUAGES->{'ja'} = { 'see {reference_name}' => '', 'see {ref}' => '', 'see {title_ref}' => '', - '{acronym_like} ({explanation})' => '{acronym_like} ({explanation})', + '{acronym_like} ({explanation})' => '', '{name} of {class}' => '', '{name} on {class}' => '', '{node_file_href}' => '', '{node_file_href} @cite{{book}}' => '', '{node_file_href} section `{section}\' in @cite{{book}}' => '', '{reference_name}' => '', + '{ref}' => '', + '{style} {number}' => '', + '{style}: {caption_first_line}' => '', + '{style}: {shortcaption_first_line}' => '', + '{title_ref}' => '{title_ref}' + }; + +$LANGUAGES->{'zh'} = { + ' The buttons in the navigation panels have the following meaning:' => ' 在导航面板上按钮有以下含意:', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' 这里的@strong{ 例子 } 假设当前的位置是在紧接着的结构的文档中的 @strong{ 小分段 1-2-3 }:', + ' Up ' => ' 上 ', + '(outside of any element)' => '(任何元素外面)', + '(outside of any node)' => '(任何节点外面)', + '@b{{quotation_arg}:} ' => '@b{{quotation_arg}:} ', + '@cite{{book}}' => '@cite{{book}}', + '@{No value for `{value}\'@}' => '@{没有值 `{value}\'@}', + 'About' => '关于', + 'About (help)' => '关于 (帮助)', + 'About This Document' => '关于本文档', + 'April' => '4 月', + 'August' => '8 月', + 'Back' => '返回', + 'Back section in previous file' => '返回到前一个文件', + 'Beginning of this chapter or previous chapter' => '本章开头或前一章', + 'Button' => '按钮', + 'Contents' => '目录', + 'Cover (top) of document' => '文档的封面(首页)', + 'Current' => '当前', + 'Current Position' => '当前的位置', + 'Current section' => '当前的段', + 'December' => '12 月', + 'FastBack' => '快速返回', + 'FastForward' => '快速向前', + 'February' => '2 月', + 'First' => '第一个', + 'First section in reading order' => '看的第一段', + 'Following' => '紧接着的', + 'Following node' => '紧接着的节点', + 'Footnotes' => '脚注', + 'Forward' => '向前', + 'Forward section in next file' => '向前到下一个文件的段', + 'From 1.2.3 go to' => '从1.2.3 到', + 'Go to' => '到', + 'Index' => '索引', + 'Index Entry' => '索引条目', + 'January' => '1 月', + 'July' => '7 月', + 'Jump to' => '跳转到', + 'June' => '6 月', + 'Last' => '最后', + 'Last section in reading order' => '看的最后一段', + 'March' => '3 月', + 'May' => '5 月', + 'Menu:' => '菜单', + 'Name' => '名字', + 'Next' => '下一个', + 'Next chapter' => '下一章', + 'Next file' => '下一个文件', + 'Next node' => '下一个节点', + 'Next section in reading order' => '看的下一段', + 'Next section on same level' => '同级的下一段', + 'NextFile' => '下一个文件', + 'Node following in node reading order' => '看的下一个节点', + 'Node up' => '向上一个节点', + 'NodeNext' => '下一个节点', + 'NodePrev' => '前一个节点', + 'NodeUp' => '向上一个节点', + 'November' => '11 月', + 'October' => '10 月', + 'Overview' => '综述', + 'Prev' => '前一个', + 'PrevFile' => '前一个文件', + 'Previous' => '前一个', + 'Previous file' => '前一个文件', + 'Previous node' => '前一个节点', + 'Previous section in reading order' => '看的前一段', + 'Previous section on same level' => '同级的前一段', + 'Section' => '段', + 'Section One' => '段 1', + 'See ' => '见', + 'See @cite{{book}}' => '见 @cite{{book}}', + 'See section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '', + 'See section `{section}\' in @cite{{book}}' => '', + 'See section {reference_name}' => '见段 {reference_name}', + 'See {node_file_href}' => '见 {node_file_href}', + 'See {node_file_href} @cite{{book}}' => '见 {node_file_href} @cite{{book}}', + 'See {node_file_href} section `{section}\' in @cite{{book}}' => '见在@cite{{book}} 中的 {node_file_href} 段 `{section}\' ', + 'See {reference_name}' => '见 {reference_name}', + 'See {ref}' => '见 {ref}', + 'See {title_ref}' => '见 {title_ref}', + 'September' => '9 月', + 'Short Table of Contents' => '短目录', + 'Short table of contents' => '短目录', + 'Subsection One-Four' => '分段 1-4', + 'Subsection One-One' => '分段 1-1', + 'Subsection One-Three' => '分段 1-3', + 'Subsection One-Two' => '分段 1-2', + 'Subsubsection One-Two-Four' => '小分段 1-2-4', + 'Subsubsection One-Two-One' => '小分段 1-2-1', + 'Subsubsection One-Two-Three' => '小分段 1-2-3', + 'Subsubsection One-Two-Two' => '小分段 1-2-2', + 'T2H_today' => '', + 'Table of Contents' => '目录', + 'Table of contents' => '目录', + 'The node you are looking for is at {href}.' => '你查找的节点在{href}。', + 'This' => '这个', + 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => '本文档在 @i{{date}} 上用 @uref{{program_homepage}, @i{{program}}} 生成的。', + 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => '本文档用 @uref{{program_homepage}, @emph{{program}}} 生成的。', + 'Top' => '首页', + 'Untitled Document' => '没有标题的文档', + 'Up' => '上', + 'Up node' => '上一节点', + 'Up section' => '上一段', + 'current' => '目前', + 'on @emph{{date}}' => '@emph{{date}} 上', + 'section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '', + 'section `{section}\' in @cite{{book}}' => '', + 'see ' => '见', + 'see @cite{{book}}' => '见 @cite{{book}}', + 'see section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => '见在@cite{{book}}里的段`@asis{}`{section_name}\'@asis{}\'', + 'see section `{section}\' in @cite{{book}}' => '见在@cite{{book}}里的段`{section}\'', + 'see section {reference_name}' => '见段 {reference_name}', + 'see {node_file_href}' => '见 {node_file_href}', + 'see {node_file_href} @cite{{book}}' => '见 {node_file_href} @cite{{book}}', + 'see {node_file_href} section `{section}\' in @cite{{book}}' => '见在@cite{{book}}里的{node_file_href} 段`{section}\'', + 'see {reference_name}' => '见 {reference_name}', + 'see {ref}' => '见 {ref}', + 'see {title_ref}' => '见 {title_ref}', + '{acronym_like} ({explanation})' => '{acronym_like} ({explanation})', + '{name} of {class}' => '{class} 的 {name}', + '{name} on {class}' => '在{class} 上的 {name}', + '{node_file_href}' => '', + '{node_file_href} @cite{{book}}' => '', + '{node_file_href} section `{section}\' in @cite{{book}}' => '{node_file_href} 段 `{section}\' 在 @cite{{book}}里', + '{reference_name}' => '', '{ref}' => '{ref}', '{style} {number}' => '{style} {number}', '{style}: {caption_first_line}' => '{style}: {caption_first_line}', @@ -218,6 +815,7 @@ $LANGUAGES->{'ja'} = { '{title_ref}' => '{title_ref}' }; + sub ly_get_string () { my $lang = $Texi2HTML::THISDOC{current_lang}; my $string = shift; @@ -229,25 +827,52 @@ sub ly_get_string () { } +############################################################################# +### FUNCTIONALITY FOR MAIN WEB PAGES +############################################################################# + +our $web_manual; + ############################################################################# ### SETTINGS FOR TEXI2HTML ############################################################################# -@Texi2HTML::Config::CSS_REFS = ( - {FILENAME => "lilypond-mccarty.css", TITLE => "Patrick McCarty's design"} -); +# Validation fix for texi2html<=1.82 +$Texi2HTML::Config::DOCTYPE = ''; + +@Texi2HTML::Config::CSS_REFS = ( + {FILENAME => "lilypond-manuals.css", TITLE => "Default style"} + ); @Texi2HTML::Config::ALT_CSS_REFS = ( - {FILENAME => "lilypond.css", TITLE => "Andrew Hawryluk's design" }, - {FILENAME => "lilypond-blue.css", TITLE => "Kurt Kroon's blue design" }, -); + ); + +sub web_settings() { + print STDERR "Initializing settings for web site: [$Texi2HTML::THISDOC{current_lang}]\n"; + $Texi2HTML::Config::BODYTEXT = ""; + @Texi2HTML::Config::CSS_REFS = ( + {FILENAME => "lilypond-website.css", TITLE => "Default style"} + ); + @Texi2HTML::Config::ALT_CSS_REFS = ( + ); +} + $Texi2HTML::Config::USE_ACCESSKEY = 1; $Texi2HTML::Config::USE_LINKS = 1; $Texi2HTML::Config::USE_REL_REV = 1; $Texi2HTML::Config::SPLIT_INDEX = 0; $Texi2HTML::Config::SEPARATED_FOOTNOTES = 0; # Print footnotes on same page, not separated -if ($Texi2HTML::Config::SPLIT eq 'section') { + +my $bigpage = 0; +my $have_index_entries = 0; +if ($Texi2HTML::Config::SPLIT eq 'section' or + $Texi2HTML::Config::SPLIT eq 'node') { $Texi2HTML::Config::element_file_name = \&lilypond_element_file_name; + $bigpage = 0; +} else { + $bigpage = 1; } + +$Texi2HTML::Config::anchor = \&lilypond_anchor; $Texi2HTML::Config::element_target_name = \&lilypond_element_target_name; $default_print_element_header = $Texi2HTML::Config::print_element_header; $Texi2HTML::Config::print_element_header = \&lilypond_print_element_header; @@ -312,6 +937,22 @@ sub print_element_info($) ### HELPER FUNCTIONS ############################################################################# +# only lc() the last portion of an href +sub lc_last($) +{ + my $href = shift; + my @hrefsplit = split('/', $href); + # change the last portion (the filename), if it exists; + # if it is a plain filename with no path, change the string as a whole + if ($#hrefsplit > 0) { + @hrefsplit[$#hrefsplit] = lc( @hrefsplit[$#hrefsplit] ); + $href = join("/", @hrefsplit); + } else { + $href = lc($href); + } + return $href; +} + # Convert a given node name to its proper file name (normalization as explained # in the texinfo manual: # http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref-Node-Name-Expansion.html @@ -344,35 +985,41 @@ sub texinfo_file_name($) $result = 't_g' . $result; } # DONE - return $result + return lc_last($result) } - # Load a file containing a nodename<=>filename map (tab-sepatared, i.e. # NODENAME\tFILENAME\tANCHOR # Returns a ref to a hash "Node title" => ["FilenameWithoutExt", "Anchor"] sub load_map_file ($) { - my $mapfile = shift; - my $node_map = (); - - if (open(XREFFILE,'<:encoding(utf8)', $mapfile)) { - my $line; - while ( $line = ) { - # parse the tab-separated entries and insert them into the map: - chomp($line); - my @entries = split(/\t/, $line); - if (scalar (@entries) == 3) { - $node_map->{$entries[0]} = [$entries[1], $entries[2]]; - } else { - print STDERR "Invalid entry in the node file $mapfile: $line\n"; - } - } - close (XREFFILE); - } else { - print STDERR "WARNING: Unable to load the map file $mapfile\n"; + my $mapfile = shift; + my $node_map = (); + + # For some unknown reason, Perl on my system (5.10.0 on Fedora 12) + # refuses to open map files of translated documents with + # '<:encoding(utf8)', but decoding from UTF-8 line by line works. -jm + if (open(XREFFILE,'<', $mapfile)) { + my $line; + # print STDERR "*** PRINTING MAP FILE LINES ***\n"; + while ( $line = decode ('UTF-8', ) ) { + # parse the tab-separated entries and insert them into the map: + chomp($line); + my @entries = split(/\t/, $line); + if (scalar (@entries) == 3) { + $node_map->{$entries[0]} = [$entries[1], $entries[2]]; + $, = " "; + # print STDERR @entries; + # print STDERR "\n"; + } else { + print STDERR "Invalid entry in the node file $mapfile: $line\n"; + } } - return $node_map; + close (XREFFILE); + } else { + print STDERR "WARNING: Unable to load the map file $mapfile\n"; + } + return $node_map; } @@ -406,25 +1053,45 @@ sub split_texi_filename ($) # For IE, conditionally include the lilypond-ie-fixes.css style sheet sub lilypond_css_lines ($$) { - my $import_lines = shift; - my $rule_lines = shift; - return if (defined($Texi2HTML::THISDOC{'CSS_LINES'})); - if (@$rule_lines or @$import_lines) - { - $Texi2HTML::THISDOC{'CSS_LINES'} = "\n"; - } - foreach my $ref (@CSS_REFS) - { - $Texi2HTML::THISDOC{'CSS_LINES'} .= "{TITLE}\" href=\"$ref->{FILENAME}\">\n"; - } - foreach my $ref (@Texi2HTML::Config::ALT_CSS_REFS) - { - $Texi2HTML::THISDOC{'CSS_LINES'} .= "{FILENAME}\" title=\"$ref->{TITLE}\">\n"; + my $import_lines = shift; + my $rule_lines = shift; + return if (defined($Texi2HTML::THISDOC{'CSS_LINES'})); + if (@$rule_lines or @$import_lines) + { + $Texi2HTML::THISDOC{'CSS_LINES'} = "\n"; + } + foreach my $ref (@CSS_REFS) + { + $Texi2HTML::THISDOC{'CSS_LINES'} .= + "{TITLE}\" href=\"$ref->{FILENAME}\">\n"; + } + foreach my $ref (@Texi2HTML::Config::ALT_CSS_REFS) + { + $Texi2HTML::THISDOC{'CSS_LINES'} .= + "{FILENAME}\" title=\"$ref->{TITLE}\">\n"; + } + + # The ie-fixes stylesheet is needed for the docs, but not the website. + if (not ($web_manual)) { + $Texi2HTML::THISDOC{'CSS_LINES'} .= + "\n"; + } + + if ($ENV{'AJAX_SEARCH'} == 1) { + # Add the JavaScript file only if we have an index. + # Unfortunately, init_out is called after css_lines, so as a workaround + # here we have to check again for the existence of an index... + my $ix = main::get_index ("cp"); + $have_index_entries = (scalar $ix > 0); + my $reldir = ""; + $reldir = "../" unless $bigpage; + if ($have_index_entries) { + $Texi2HTML::THISDOC{'CSS_LINES'} .= "\n"; } - $Texi2HTML::THISDOC{'CSS_LINES'} .= "\n"; + } } @@ -438,6 +1105,7 @@ sub lilypond_css_lines ($$) my $lastfilename; my $docnr = 0; my $node_to_filename_map = (); +$source_to_translationof_map = (); # This function makes sure that files are only generated for numbered sections, @@ -473,10 +1141,13 @@ sub lilypond_element_file_name($$$) if (exists ($node_to_filename_map->{$node_name})) { (my $filename, my $anchor) = @{$node_to_filename_map->{$node_name}}; $filename .= ".$docu_ext" if (defined($docu_ext)); + # don't do lc_last here, otherwise the colors are messed up! + $filename = lc($filename); # unnumbered sections (except those at top-level!) always go to the same # file as the previous numbered section - if (not ($element->{number}) and not ($lastfilename eq '') and ($element->{level} > 1)) { + if (not ($web_manual) and not ($element->{number}) + and not ($lastfilename eq '') and ($element->{level} > 1)) { $filename = $lastfilename; } if (($filename eq $lastfilename)) { @@ -486,9 +1157,12 @@ sub lilypond_element_file_name($$$) $$element{doc_nr} = $docnr; $lastfilename = $filename; } + #print STDERR "Output file name: $filename\n"; + $filename = lc_last($filename); return $filename; - } elsif ($type eq "top" or $type eq "toc" or $type eq "doc" or $type eq "stoc" or $type eq "foot" or $type eq "about") { + } elsif ($type eq "top" or $type eq "toc" or $type eq "doc" or + $type eq "stoc" or $type eq "foot" or $type eq "about") { return; } else { print STDERR "WARNING: Node '$node_name' was NOT found in the map\n" @@ -504,19 +1178,68 @@ sub lilypond_element_file_name($$$) } my $filename = texinfo_file_name($node_name); $filename .= ".$docu_ext" if (defined($docu_ext)); + $filename = lc_last($filename); $docnr += 1; $$element{doc_nr} = $docnr; $lastfilename = $filename; + print STDERR "File name: $filename\n"; return $filename; } else { $$element{doc_nr} = $docnr; - return $lastfilename; + $filename = lc_last($filename); + print STDERR "File name: $filename\n"; + return $filename; } } return; } +sub lilypond_normalise_node($) +{ + my $text = shift; + my $norm = main::t2h_default_normalise_node($text); + if (exists ($source_to_translationof_map->{$text})) { + my $original = $source_to_translationof_map->{$text}; + $norm = main::t2h_default_normalise_node($original); + } + + return $norm; +} + +# This function produces an anchor. +# +# arguments: +# $name : anchor name +# $href : anchor href +# text : text displayed +# extra_attribs : added to anchor attributes list +sub lilypond_anchor($;$$$) +{ + my $name = shift; + my $href = shift; + my $text = shift; + my $attributes = shift; + $href = remove_unneeded_anchor($href); + if (!defined($attributes) or ($attributes !~ /\S/)) + { + $attributes = ''; + } + else + { + $attributes = ' ' . $attributes; + } + $name = '' if (!defined($name) or ($name !~ /\S/)); + $href = '' if (!defined($href) or ($href !~ /\S/)); + $text = '' if (!defined($text)); + return $text if (($name eq '') and ($href eq '')); + $name = "name=\"$name\"" if ($name ne ''); + $href = "href=\"$href\"" if ($href ne ''); + $href = ' ' . $href if (($name ne '') and ($href ne '')); + return "$text"; +} + + sub lilypond_element_target_name($$$) { my $element = shift; @@ -542,7 +1265,11 @@ sub lilypond_element_target_name($$$) } # TODO: Once texi2html correctly prints out the target and not the id for # the sections, change this back to ($id, $target) - return ($target, $target); + # I don't understand this comment, so I'm reluctant to delete it -gp + $target = lc_last($target); + $id = lc($target); +# $id =~ s/-1$//i; # remove any trailing "-1" + return ($target, $id); } @@ -555,6 +1282,11 @@ sub lilypond_init_map () my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'}); my $map_filename = main::locate_include_file ("${docu_name}.$Texi2HTML::THISDOC{current_lang}.xref-map") || main::locate_include_file ("${docu_name}.xref-map"); + #print STDERR "Map filename is: $map_filename\nDocu name is $docu_name\n"; + if ($docu_name eq 'web') { + $web_manual = 1; + web_settings(); + } $node_to_filename_map = load_map_file ($map_filename); } push @Texi2HTML::Config::command_handler_init, \&lilypond_init_map; @@ -576,6 +1308,9 @@ sub lilypond_external_ref($$$$$$) my $book = shift; my $file_node = shift; my $href = shift; + + $href = lc_last($href); + my $cross_ref = shift; my $displaytext = ''; @@ -624,7 +1359,13 @@ sub lilypond_unknown($$$$$) # python script messed up ;-) if ($pass == 1 and $macro eq "translationof") { if (ref($state->{'element'}) eq 'HASH') { - $state->{'element'}->{'translationof'} = main::normalise_space($line); + $state->{'element'}->{'translationof'} = main::normalise_space($line); + my $source = main::normalise_space ($line); + if (ref($state->{'node_ref'}) eq 'HASH') { + my $translationof = $state->{'node_ref'}->{'texi'}; + our %source_to_translationof_map; + $source_to_translationof_map->{$source} = $translationof; + } } return ('', 1, undef, undef); } else { @@ -633,8 +1374,6 @@ sub lilypond_unknown($$$$$) } - - my %translated_books = (); # Construct a href to an external source of information. # node is the node with texinfo @-commands @@ -647,7 +1386,7 @@ sub lilypond_external_href($$$) { my $node = shift; my $node_id = shift; - my $node_hxmlt_id = shift; + my $node_xhtml_id = shift; my $file = shift; # 1) Keep a hash of book->section_map @@ -673,20 +1412,48 @@ sub lilypond_external_href($$$) my $section_name_map = $translated_books{$map_name}; my $node_text = main::remove_texi($node); if (defined($section_name_map->{$node_text})) { - ($node_id, $node_hxmlt_id) = @{$section_name_map->{$node_text}}; + ($node_id, $node_xhtml_id) = @{$section_name_map->{$node_text}}; } else { print STDERR "WARNING: Unable to find node '$node_text' in book $map_name.\n"; } } if (defined $file) { - return &$default_external_href($node, $node_id, $node_hxmlt_id, $file); + $href = &$default_external_href($node, $node_id, $node_xhtml_id, lc_last($file)); + $href = remove_unneeded_anchor($href); + + # TODO: very yucky, but will be fixed in issue 1004 + if ($web_manual) { + my $only_web = $ENV{ONLY_WEB}; + if ($only_web) { + $href = "../../doc/v2.13/Documentation/web/".$href; + } + } + + return $href; } else { - return &$default_external_href($node, $node_id, $node_hxmlt_id); + $href = &$default_external_href($node, $node_id, $node_xhtml_id); + $href = remove_unneeded_anchor($href); + return $href; } } - +sub remove_unneeded_anchor($) +{ + my $href = shift; + my @hrefsplit = split("/", $href); + for ($i = 0; $i < @hrefsplit; $i++) { + $item = @hrefsplit[$i]; + if ($item =~ /#/) { + @splitted = split(".html#", $item); + if (@splitted[0] eq @splitted[1]) { + @hrefsplit[$i] = @splitted[0] . ".html"; + } + } + } + $href = join("/", @hrefsplit); + return $href +} @@ -697,61 +1464,97 @@ sub lilypond_external_href($$$) my $page_toc_depth = 2; my @default_toc = []; - # Initialize the toc_depth to 1 if the command-line option -D=short_toc is given sub lilypond_init_toc_depth () { - if (exists($main::value{'short_toc'}) and not exists($main::value{'bigpage'})) { + if (exists($main::value{'short_toc'}) and not exists($main::value{'bigpage'}) + and not $web_manual) { $page_toc_depth = 1; } } -# Set the TOC-depth (depending on a texinfo variable short_toc) in a +# Set the TOC-depth (depending on a texinfo variable short_toc) in a # command-handler, so we have them available when creating the pages push @Texi2HTML::Config::command_handler_process, \&lilypond_init_toc_depth; + # recursively generate the TOC entries for the element and its children (which # are only shown up to maxlevel. All ancestors of the current element are also # shown with their immediate children, irrespective of their level. -# Unnumbered entries are only printed out if they are at top-level or 2nd level +# Unnumbered entries are only printed out if they are at top-level or 2nd level # or their parent element is an ancestor of the currently viewed node. # The conditions to call this method to print the entry for a child node is: # -) the parent is an ancestor of the current page node -# -) the parent is a numbered element at top-level toplevel (i.e. show numbered +# -) the parent is a numbered element at top-level toplevel (i.e. show numbered # and unnumbered 2nd-level children of numbered nodes) # -) the child element is a numbered node below level maxlevel -sub generate_ly_toc_entries($$$) +sub generate_ly_toc_entries($$$$$) { my $element = shift; my $element_path = shift; my $maxlevel = shift; + if ($web_manual) { + $maxlevel = 1; + } + my $child_count = shift; + my $current_element = shift; # Skip undefined sections, plus all sections generated by index splitting return() if (not defined($element) or exists($element->{'index_page'})); my @result = (); my $level = $element->{'toc_level'}; my $is_parent_of_current = $element->{'id'} && $element_path->{$element->{'id'}}; my $ind = ' ' x $level; - my $this_css_class = $is_parent_of_current ? " class=\"toc_current\"" : ""; - - my $entry = "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}",$element->{'text'}); + my $this_css_class = " class=\""; + # color indices for the second navigation bar on the website + if ($web_manual) { + my %color_maps = ( + 'introduction' => [2, 2, 2, 2, 3, 3, 4, 4], + 'download' => [2, 2, 2, 3, 3, 4], + 'manuals' => [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4], + 'community' => [1, 1, 1, 2, 2, 2, 3, 3], + ); + my $addColor = "colorDefault"; + while (($top_section, $color_indices) = each %color_maps) { + if (index ($element->{'sectionup'}->{'file'}, $top_section) >= 0) { + $addColor = "color" . $color_indices->[$child_count]; + } + } + $this_css_class .= $addColor; + } + $this_css_class .= $is_parent_of_current ? ' toc_current"' : '"'; + my $entry = "$ind" . + &$anchor ($element->{'tocid'}, + "$element->{'file'}#$element->{'target'}", + $element->{'text'}); push (@result, $entry); my $children = $element->{'section_childs'}; if (defined($children) and (ref($children) eq "ARRAY")) { my $force_children = $is_parent_of_current or ($level == 1 and $element->{'number'}); my @child_result = (); + my $sub_child_count = 0; foreach my $c (@$children) { my $is_numbered_child = defined ($c->{'number'}); my $below_maxlevel = $c->{'toc_level'} le $maxlevel; if ($force_children or ($is_numbered_child and $below_maxlevel)) { - my @child_res = generate_ly_toc_entries($c, $element_path, $maxlevel); + my @child_res = + generate_ly_toc_entries($c, $element_path, $maxlevel, $sub_child_count, $current_element); push (@child_result, @child_res); + $sub_child_count += 1; } } # if no child nodes were generated, e.g. for the index, where expanded pages # are ignored, don't generate a list at all... if (@child_result) { push (@result, "\n$ind\n"); + if ($web_manual) { + push (@result, "$ind

  • {'text'} eq $current_element->{'text'} ? + ' toc_current">' : '">') . + &$anchor ($element->{'tocid'}, + "$element->{'file'}#$element->{'target'}", + $element->{'text'}) . "
  • \n"); + } push (@result, @child_result); push (@result, "$ind\n"); } @@ -776,16 +1579,54 @@ sub lilypond_generate_page_toc_body($) $parentelements{$current_element->{'sectionup'}->{'id'}} = 1 if ($current_element->{'sectionup'}->{'id'} ne ''); $current_element = $current_element->{'sectionup'}; + if ($web_manual) { + if (exists($main::value{'shallow_toc'})) { + last; + } + } } return () if not defined($current_element); # Create the toc entries recursively - my @toc_entries = ("
    \n", "\n"); + my @toc_entries = ""; + if ($web_manual) { + @toc_entries = "\n"; + # FIXME: add link to main page, really hackily. + if ($element->{'sectionup'}) { + # it's not the top element + push (@toc_entries, "
  • Main
  • \n"); + } else { + push (@toc_entries, + "
  • Main
  • \n"); + } + } else { + push (@toc_entries, "
    \n"); + push (@toc_entries, "\n"); + } my $children = $current_element->{'section_childs'}; foreach ( @$children ) { - push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth)); + push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth, 0, $element)); + } + # search box + # I'm assuming that we wouldn't keep the google search box? -gp + if (!($ENV{AJAX_SEARCH} == 1)) { + local $/=undef; + my $name = "search-box"; + $lang = $Texi2HTML::THISDOC{current_lang}; + open FILE, "$ENV{TOP_SRC_DIR}/Documentation/$lang/$name.ihtml" or + open FILE, "$ENV{TOP_SRC_DIR}/Documentation/$name.ihtml" or + die "no such file: $name.ihtml: $!"; + my $search_string = decode ('UTF-8', ); + $search_string = "
  • \n" . $search_string . "
  • \n"; + push (@toc_entries, $search_string); + close FILE; } + push (@toc_entries, "\n"); - push (@toc_entries, "
    \n"); + if ($web_manual) { + push (@toc_entries, "\n"); + } else { + push (@toc_entries, "
    \n"); + } return @toc_entries; } @@ -797,13 +1638,13 @@ sub lilypond_print_toc_div ($$) # use default TOC if no custom lines have been generated @lines = @default_toc if (not @lines); if (@lines) { - + print $fh "\n\n
    \n"; - + # Remove the leading "GNU LilyPond --- " from the manual title my $topname = $Texi2HTML::NAME{'Top'}; $topname =~ s/^GNU LilyPond(:| &[mn]dash;) //; - + # construct the top-level Docs index (relative path and including language!) my $lang = $Texi2HTML::THISDOC{current_lang}; if ($lang and $lang ne "en") { @@ -811,20 +1652,40 @@ sub lilypond_print_toc_div ($$) } else { $lang = ""; } - my $reldir = ""; - $reldir = "../" if ($Texi2HTML::Config::SPLIT eq 'section'); - my $uplink = $reldir."index.${lang}html"; + my $reldir = $ENV{DEPTH}; + # strip one depth level for translations + if ($lang and $lang ne "en" and substr ($reldir, 0, 3) eq '../') { + $reldir = substr ($reldir, 3); + } + # add a / at the end if there isn't one. + if (substr ($reldir, -1) ne '/') { + $reldir .= '/'; + } + my $uplink = $reldir."Documentation/web/manuals.${lang}html"; - print $fh "

    << " . &ly_get_string ('Back to Documentation Index') . "

    \n"; - print $fh '

    ' . &$anchor('', + # AJAX search box, written in JavaScript + if ($ENV{'AJAX_SEARCH'} == 1) { + if ($have_index_entries) { + my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'}); + print $fh '\n"; + } + } + + print $fh '

    ' . &$anchor('', $Texi2HTML::HREF{'Top'}, $topname, 'title="Start of the manual"' ) . "

    \n"; + } + foreach my $line (@lines) { print $fh $line; } @@ -876,6 +1737,24 @@ sub print_lilypond_page_foot($) # print $fh "

    $program_string
    $PRE_BODY_CLOSE

    \n"; print $fh "\n\n"; print $fh "\n
    \n\n"; + if ($web_manual) { + # FIXME: This div and p#languages need to be in div#footer. + # Should we move this div to postprocess_html.py ? + print $fh "
    \n"; + print $fh "

    Validation

    \n"; + # FIXME: inlined text substitution, move to ly_get_string as soon as another case is needed + my $webdev_link = "webdev.nl"; + my $lily_site = "lilypond.org"; + my $hosting_thanks = &ly_get_string ('

    Thanks to ${webdev_link} for hosting ${lily_site}.'); + # this does the variable substitution ("quoting" in Perlish) after the localization + $hosting_thanks =~ s/(\$\{\w+\})/$1/eeg; + print $fh $hosting_thanks . "\n"; + print $fh "\n"; + print $fh "\"Valid

    \n"; + print $fh "
    "; + } # Print the TOC frame and reset the TOC: lilypond_print_toc_div ($fh, \@this_page_toc); @@ -954,17 +1833,19 @@ sub lilypond_print_navigation my $text = $button->[1]; my $button_href = $button->[0]; # verify that $button_href is simple text and text is a reference - if (defined($button_href) and !ref($button_href) + if (defined($button_href) and !ref($button_href) and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) { # use given text if ($Texi2HTML::HREF{$button_href}) { my $anchor_attributes = ''; - if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button_href})) and ($BUTTONS_ACCESSKEY{$button_href} ne '')) + if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button_href})) and + ($BUTTONS_ACCESSKEY{$button_href} ne '')) { $anchor_attributes = "accesskey=\"$BUTTONS_ACCESSKEY{$button_href}\""; } - if ($USE_REL_REV and (defined($BUTTONS_REL{$button_href})) and ($BUTTONS_REL{$button_href} ne '')) + if ($USE_REL_REV and (defined($BUTTONS_REL{$button_href})) and + ($BUTTONS_REL{$button_href} ne '')) { $anchor_attributes .= " rel=\"$BUTTONS_REL{$button_href}\""; } @@ -983,7 +1864,7 @@ sub lilypond_print_navigation } elsif ($button eq ' ') { # handle space button - $result .= + $result .= ($ICONS && $ACTIVE_ICONS{' '}) ? &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{' '}) : $NAVIGATION_TEXT{' '}; @@ -993,11 +1874,13 @@ sub lilypond_print_navigation { # button is active my $btitle = $BUTTONS_GOTO{$button} ? 'title="' . $BUTTONS_GOTO{$button} . '"' : ''; - if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button})) and ($BUTTONS_ACCESSKEY{$button} ne '')) + if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button})) and + ($BUTTONS_ACCESSKEY{$button} ne '')) { $btitle .= " accesskey=\"$BUTTONS_ACCESSKEY{$button}\""; } - if ($USE_REL_REV and (defined($BUTTONS_REL{$button})) and ($BUTTONS_REL{$button} ne '')) + if ($USE_REL_REV and (defined($BUTTONS_REL{$button})) and + ($BUTTONS_REL{$button} ne '')) { $btitle .= " rel=\"$BUTTONS_REL{$button}\""; } @@ -1014,7 +1897,7 @@ sub lilypond_print_navigation } else { # use text - $result .= + $result .= '[' . &$anchor('', $Texi2HTML::HREF{$button}, @@ -1026,7 +1909,7 @@ sub lilypond_print_navigation } else { # button is passive - $result .= + $result .= $ICONS && $PASSIVE_ICONS{$button} ? &$button_icon_img($BUTTONS_NAME{$button}, $PASSIVE_ICONS{$button}, @@ -1040,7 +1923,11 @@ sub lilypond_print_navigation $result .= "" unless $beginofline; $result .= "" unless $vertical; $result .= "\n"; - return $result; + if ($web_manual) { + return "\n"; + } else { + return $result; + } } @@ -1055,7 +1942,8 @@ sub lilypond_print_navigation ); # buttons for misc stuff -@Texi2HTML::Config::MISC_BUTTONS = ('center-aligned-cell-3', 'Top', 'Contents', 'Index', 'About'); +@Texi2HTML::Config::MISC_BUTTONS = ('center-aligned-cell-3', + 'Top', 'Contents', 'Index', 'About'); # buttons for chapter file footers # (and headers but only if SECTION_NAVIGATION is false) @@ -1126,8 +2014,11 @@ sub makeinfo_like_foot_line_and_ref($$$$$$$$) $from_file = $footnote_file = ''; } - my $foot_anchor = "" . &$anchor($docid, "$footnote_file#$footid", $relative_num) . ""; - $foot_anchor = &$anchor($docid, "$footnote_file#$footid", "($relative_num)") if ($state->{'preformatted'}); + my $foot_anchor = "" . + &$anchor($docid, "$footnote_file#$footid", $relative_num) . ""; + $foot_anchor = &$anchor($docid, + "$footnote_file#$footid", + "($relative_num)") if ($state->{'preformatted'}); # unshift @$lines, "
  • "; # push @$lines, "
  • \n"; @@ -1210,12 +2101,72 @@ sub makeinfo_like_paragraph ($$$$$$$$$$$$$) } +############################################################################# +### WRITING OUT THE INDEX FOR THE AJAX SEARCH FIELD +############################################################################# + +$Texi2HTML::Config::IDX_SUMMARY = 1; +$Texi2HTML::Config::init_out = \&lilypond_init_out; +$Texi2HTML::Config::finish_out = \&lilypond_finish_out; +$Texi2HTML::Config::index_summary_file_entry = \&lilypond_index_summary_file_entry; + +my @index_entries; + +sub lilypond_init_out () +{ + t2h_default_init_out (); + # Check whether we have an index at all! If not -> don't print out a search box! + my $ix = main::get_index ("cp"); + $have_index_entries = (scalar $ix > 0); +} + +sub lilypond_index_summary_file_entry ($$$$$$$$$) +{ + my $index_name = shift; + my $entry_text = shift; + my $entry_reference = shift; + my $formatted_entry = shift; + my $texi_entry = shift; + my $entry_element_reference = shift; + my $entry_element_header = shift; + my $is_printed = shift; + my $manual_name = shift; + + if ($ENV{'AJAX_SEARCH'}==1) { + if ($index_name eq "cp") + { + # The entries in the index file have the form: + # SearchText \t FormattedText \t EntryURL \t SectionText \t SectionURL + push @index_entries, "$entry_text\t$formatted_entry\t$entry_reference\t$entry_element_header\t$entry_element_reference\n"; + } + } +} + +sub lilypond_finish_out () +{ + if ($ENV{'AJAX_SEARCH'}==1) { + if (((scalar @index_entries) > 0) and $have_index_entries) { + my $lang = $Texi2HTML::THISDOC{current_lang}; + my $big = ""; + $big = "-big-page" if $bigpage; + my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'}); + my $idx_file = "$docu_dir/$docu_name$big.$lang.idx"; + open IDXOUTFILE, ">:utf8", $idx_file; + print IDXOUTFILE @index_entries; + close IDXOUTFILE; + } + } +} + + + ############################################################################# ### OTHER SETTINGS ############################################################################# # For split pages, use index.html as start page! -if ($Texi2HTML::Config::SPLIT eq 'section') { +if ($Texi2HTML::Config::SPLIT eq 'section' or + $Texi2HTML::Config::SPLIT eq 'node') { $Texi2HTML::Config::TOP_FILE = 'index.html'; } diff --git a/Documentation/lilypond.css b/Documentation/lilypond.css deleted file mode 100644 index 82ab472b95..0000000000 --- a/Documentation/lilypond.css +++ /dev/null @@ -1,216 +0,0 @@ -/***********************************************************/ -/* PAGE-WIDE SETTINGS */ -/**********************************************************/ - -html { - height:100%; -} - -body { - margin: 0; - padding: 0; - height: 100%; - font-size: 100%; - margin-right: auto; - margin-left: auto; - color: black; - background-color: white; -} - -/***********************************************************/ -/* HEADERS */ -/***********************************************************/ -h4, h3, h2, .unnumberedsubsubsec, .subsubheading { - color: #151959; -} - -h2 { - font-size: x-large; -} -.unnumberedsubsubsec, .subsubheading { - font-size: large; -} - -/***********************************************************/ -/* LINKS */ -/***********************************************************/ -a:link, a:visited, a:hover, a:active {color:#2E5479; text-decoration: none;} -a:hover {text-decoration: underline;} -a:active {color:#CCCCFF;} - -/***********************************************************/ -/* BLOCK FORMATTING */ -/***********************************************************/ -blockquote { - border: 1px solid #CCCCCC; - padding: 3px; - width: 40em; -} -.verbatim, .example, .smallexample { - font-family: "Courier New",Courier,monospace; -} -hr { - border: none; - height: 1px; - color: #666666; - background-color: #666666; -} -table.cartouche { - border: 2px dotted #CCCCCC; - margin-left: auto; - margin-right: auto; - width: 85%; -} -table.cartouche td { - border: none; -} - -/***********************************************************/ -/* MAIN CONTENT */ -/***********************************************************/ - -div#main { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 27%; - padding: 0 1em; - margin: 0; - overflow: auto; -} - -#languages { - padding-bottom: 1em; -} - -/***********************************************************/ -/* TOC SIDEBAR */ -/***********************************************************/ - -div#tocframe { - position: absolute; - top: 0; - right: 73%; - bottom: 0; - left: 0; - padding: 5px; - padding-bottom: 0; - margin: 0; - overflow: auto; - background-color: #E7EFE3; - z-index:100; - list-style-type: none; -} - -@media screen { - body>div#tocframe { - position: fixed - } - } - -#tocframe .contents { - width: 100%; - padding-bottom: 0.25em; - border: none; - margin: 0em; - background-color: transparent; - list-style-type: none; -} - -#tocframe a, #tocframe a:visited, #tocframe a:active { - color: #1B3313; - text-decoration: none; -} - -#tocframe a:hover { - color: #2E5479; - text-decoration:underline; -} - -#tocframe ul.toc { - padding-left: 0px; - margin-left: 0px; -} -#tocframe ul.toc li { - padding-left: 0px; - margin-left: 0px; - list-style-type: none; -} -#tocframe ul.toc > li { - font-size: 12px; -} -#tocframe ul.toc li li { - padding-left: 15px; -} -li.toc_current { - font-weight: bold; - font-style: italic; -} - -li.toc_current ul { - font-weight: normal; - font-style: normal; - background: transparent; -} - - - - -/***********************************************************/ -/* NAVIGATION */ -/***********************************************************/ - -div.header { - background-color: #E7EFE3; - padding: 2px; - border: #CCD3CC 1px solid; - text-align: center; -} - -h1.header { - font-weight: bold; - font-family: avantgarde, sans-serif; - font-size: 220%; -} - -div.subheader { - text-align: center; -} - -#navigation { - margin: 0 auto; -} - -.nav_table { - width: 100%; - background-color: #CCD3CC; - border: 0; - margin-top: 4px; - left: auto; - right: auto; - font-size: 0.8em; -} - -.title { - font-weight: bold; -} - -.footer { - background-color: #E7EFE3; - padding: 5px; - border: #CCD3CC 1px solid; - font-size: 80%; -} - - - -/***********************************************************/ -/* OVERRIDES FOR PRINTING */ -/***********************************************************/ -@media print { - /* Hide the sidebar: */ - body { padding-left: 0; } - #tocframe { display: none; } - .nav_table { display: none; } -} diff --git a/Documentation/logo/GNUmakefile b/Documentation/logo/GNUmakefile new file mode 100644 index 0000000000..4a8f2eb72f --- /dev/null +++ b/Documentation/logo/GNUmakefile @@ -0,0 +1,27 @@ +depth = ../.. + +STEPMAKE_TEMPLATES=documentation +XPM_FILES=$(call src-wildcard,*.xpm) +EXTRA_DIST_FILES= $(XPM_FILES) + +lilypond-icon = $(outdir)/lilypond.ico +ly-icon = $(outdir)/ly.ico + +include $(depth)/make/stepmake.make + +ifeq ($(PLATFORM_WINDOWS),yes) + +$(outdir)/%.ico: %.xpm + $(buildscript-dir)/genicon $< $@ + +default: $(lilypond-icon) $(ly-icon) + +endif # PLATFORM_WINDOWS + +local-dist: $(icon) +xgifs: $(OUTGIF_FILES) +pngs: $(OUTPNG_FILES) + +ifeq ($(out),www) +local-WWW-1: $(OUTPNG_FILES) +endif diff --git a/Documentation/pictures/lelie-logo.xpm b/Documentation/logo/lelie-logo.xpm similarity index 100% rename from Documentation/pictures/lelie-logo.xpm rename to Documentation/logo/lelie-logo.xpm diff --git a/Documentation/pictures/lilypond.xpm b/Documentation/logo/lilypond.xpm similarity index 100% rename from Documentation/pictures/lilypond.xpm rename to Documentation/logo/lilypond.xpm diff --git a/Documentation/pictures/ly.xpm b/Documentation/logo/ly.xpm similarity index 100% rename from Documentation/pictures/ly.xpm rename to Documentation/logo/ly.xpm diff --git a/Documentation/macros.itexi b/Documentation/macros.itexi index 86f549bc81..ea63eb63d5 100644 --- a/Documentation/macros.itexi +++ b/Documentation/macros.itexi @@ -1,15 +1,28 @@ -@c -*- coding: us-ascii; mode: texinfo; -*- +@c -*- coding: utf-8; mode: texinfo; -*- @ignore Translation of GIT committish: FILL-IN-HEAD-COMMITTISH When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. @end ignore @include version.itexi @include common-macros.itexi +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore @c ***** Displaying text ***** @@ -27,9 +40,15 @@ @ifhtml @macro warning{TEXT} -@cartouche -@b{Note:} \TEXT\ -@end cartouche +@html +
    +@end html +@strong{Note:} \TEXT\ +@c keep the space for proper nesting of

    + +@html +
    +@end html @end macro @end ifhtml @@ -48,10 +67,121 @@ @end ifnothtml +@c do not translate the following macro -- it is used in +@c an untranslated manual. + +@ifhtml + +@macro advanced{TEXT} +@html +
    +@end html +@strong{Advanced note:} \TEXT\ +@c keep the space for proper nesting of

    + +@html +
    +@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro advanced{TEXT} +@quotation +@b{Advanced note:} \TEXT\ +@end quotation +@end macro + +@end ifnothtml + + +@macro docMain +@cartouche +For more information about how this manual fits with the other +documentation, or to read this manual in other formats, see +@rweb{Manuals}. + +If you are missing any manuals, the complete documentation can be +found at @w{@uref{http://@/www@/.lilypond@/.org/}}. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +This document has been placed in the public domain. +@end copying +@end ifclear + + + +@c ***** Title page ***** +@ifnottex +@node Top +@top LilyPond --- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle The music typesetter +@titlefont{\TITLE\} +@author The LilyPond development team + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +For LilyPond version @version{} +@end titlepage + +@end macro @c ***** Headings in a doc subsection ***** +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c @c Don't insert an empty line after @predefined! Right now @c it doesn't matter, but a future implementation will probably @c add some code which needs this restriction. @@ -61,11 +191,8 @@ @subsubheading Predefined commands @end macro -@c The next macro is a dummy currently since texinfo doesn't -@c provide a real ragged-right environment yet. -@c @c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) -@c the macro must not be empty. +@c the next macro must not be empty. @macro endpredefined @c @@ -99,12 +226,17 @@ @c Definitions for references: @c +@c @rweb +@c @ressay @c @rglos +@c @rinternals @c @rlearning -@c @ruser -@c @rprogram @c @rlsr -@c @rinternals +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib @c @c All these also have a @...named version which allows to specify the @c displayed text for the reference as second argument. @@ -133,50 +265,100 @@ @macro rlearning{TEXT} @vindex \TEXT\ -@ref{\TEXT\,,,lilypond-learning-big-page,Learning Manual} +@ref{\TEXT\,,,learning-big-page,Learning Manual} @end macro @macro rlearningnamed{TEXT,DISPLAY} @vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-learning-big-page,Learning Manual} +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Learning Manual} @end macro @macro ruser{TEXT} @vindex \TEXT\ -@ref{\TEXT\,,,lilypond-big-page,Notation Reference} +@ref{\TEXT\,,,notation-big-page,Notation Reference} @end macro @macro rusernamed{TEXT,DISPLAY} @vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-big-page,Notation Reference} +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Notation Reference} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extending} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Changes} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,General Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Essay} @end macro @macro rprogram{TEXT} @vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program-big-page,Application Usage} +@ref{\TEXT\,,,usage-big-page,Application Usage} @end macro @macro rprogramnamed{TEXT,DISPLAY} @vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program-big-page,Application Usage} +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Application Usage} @end macro @macro rlsr{TEXT} -@ref{\TEXT\,,,lilypond-snippets-big-page,Snippets} +@ref{\TEXT\,,,snippets-big-page,Snippets} @end macro @macro rlsrnamed{TEXT,DISPLAY} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets-big-page,Snippets} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Snippets} @end macro @macro rinternals{TEXT} @vindex \TEXT\ -@ref{\TEXT\,,,lilypond-internals-big-page,Internals Reference} +@ref{\TEXT\,,,internals-big-page,Internals Reference} @end macro @macro rinternalsnamed{TEXT,DISPLAY} @vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-internals-big-page,Internals Reference} +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Internals Reference} @end macro @end ifset @@ -186,6 +368,120 @@ @ifclear bigpage +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Notation Reference} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,General Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Internals Reference} +@end macro + +@end ifnotinfo + +@ifinfo + @macro rglos{TEXT} @vindex \TEXT\ @ref{\TEXT\,,,music-glossary,Music Glossary} @@ -208,22 +504,72 @@ @macro ruser{TEXT} @vindex \TEXT\ -@ref{\TEXT\,,,lilypond,Notation Reference} +@ref{\TEXT\,,,lilypond-notation,Notation Reference} @end macro @macro rusernamed{TEXT,DISPLAY} @vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference} +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Notation Reference} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-web, General Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Essay} @end macro @macro rprogram{TEXT} @vindex \TEXT\ -@ref{\TEXT\,,,lilypond-program,Application Usage} +@ref{\TEXT\,,,lilypond-usage,Application Usage} @end macro @macro rprogramnamed{TEXT,DISPLAY} @vindex \TEXT\ -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage} +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Application Usage} @end macro @macro rlsr{TEXT} @@ -244,6 +590,8 @@ @ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} @end macro +@end ifinfo + @end ifclear @end ifnottex @@ -260,7 +608,7 @@ @c delimits arguments in the standard way (i.e., with braces). @tex -\gdef\lilyvindex#1{\doind{vr}{\code #1}\ignorespaces} +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} @end tex @macro rglos{TEXT} @@ -275,52 +623,176 @@ @macro rlearning{TEXT} @lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-learning,Learning Manual} +@ref{\TEXT\,,,learning,Learning Manual} @end macro @macro rlearningnamed{TEXT,DISPLAY} @lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Learning Manual} +@ref{\TEXT\,,\DISPLAY\,learning,Learning Manual} @end macro @macro ruser{TEXT} @lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond,Notation Reference} +@ref{\TEXT\,,,notation,Notation Reference} @end macro @macro rusernamed{TEXT,DISPLAY} @lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference} +@ref{\TEXT\,,\DISPLAY\,notation,Notation Reference} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Changes} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web,General Information} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Essay} @end macro @macro rprogram{TEXT} @lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-program,Application Usage} +@ref{\TEXT\,,,usage,Application Usage} @end macro @macro rprogramnamed{TEXT,DISPLAY} @lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage} +@ref{\TEXT\,,\DISPLAY\,usage,Application Usage} @end macro @macro rlsr{TEXT} @lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-snippets,Snippets} +@ref{\TEXT\,,,snippets,Snippets} @end macro @macro rlsrnamed{TEXT,DISPLAY} @lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippets} +@ref{\TEXT\,,\DISPLAY\,snippets,Snippets} @end macro @macro rinternals{TEXT} @lilyvindex{\TEXT\} -@ref{\TEXT\,,,lilypond-internals,Internals Reference} +@ref{\TEXT\,,,internals,Internals Reference} @end macro @macro rinternalsnamed{TEXT,DISPLAY} @lilyvindex{\TEXT\} -@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} +@ref{\TEXT\,,\DISPLAY\,internals,Internals Reference} @end macro @end iftex + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
    + + \IMAGE-FILE\ + +

    + (click to enlarge) +

    +
    +@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + +@macro help{TEXT} +@html +
    + + Help wanted: + \TEXT\ +
    +@end html +@end macro + + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin was created by +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} with +@uref{http://www.isc.tamu.edu/~lewing/gimp/, the Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +The FreeBSD logo is a registered trademark of +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +The @qq{X image} is not a registered trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} and +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, and +placed under the GNU Free Documentation License version 1.2 or later. +We found the image on +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +this Wikimedia Commons page}. + +@end macro + +@macro logoLegalWindows +The @qq{four colored rectangles image} is not a registered +trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} and +placed under the GNU Free Documentation License version 1.2. We +found the image on +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +this Wikimedia Commons page}. + +@end macro + +@end ifset diff --git a/Documentation/misc/GNUmakefile b/Documentation/misc/GNUmakefile index bb3beb4998..17eb63922e 100644 --- a/Documentation/misc/GNUmakefile +++ b/Documentation/misc/GNUmakefile @@ -2,14 +2,14 @@ depth = ../.. NAME = documentation -STEPMAKE_TEMPLATES=documentation texinfo +STEPMAKE_TEMPLATES = documentation texinfo TEXTS = $(call src-wildcard,ANNOUNCE-*[0-9]) $(call src-wildcard,CHANGES-*[0-9]) $(call src-wildcard,ChangeLog*[0-9]) $(call src-wildcard,NEWS-*[0-9]) EXTRA_DIST_FILES = $(TEXTS) include $(depth)/make/stepmake.make -default: local-doc +default: local-txt-doc #urg default local-WWW target uses footify before its time; # must add footify with txt-to-html target diff --git a/Documentation/user/music-glossary.tely b/Documentation/music-glossary.tely similarity index 90% rename from Documentation/user/music-glossary.tely rename to Documentation/music-glossary.tely index 4c70e2f6a1..d822de1dfe 100644 --- a/Documentation/user/music-glossary.tely +++ b/Documentation/music-glossary.tely @@ -1,46 +1,24 @@ \input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@setfilename music-glosssary.info -@settitle Music Glossary + +@setfilename music-glossary.info +@settitle LilyPond Music Glossary @documentencoding UTF-8 @documentlanguage en +@afourpaper -@include macros.itexi +@macro manualIntro +This glossary provides definitions and translations of musical +terms used in the documentation manuals for LilyPond version +@version{}. +@end macro -@afourpaper +@c `Music Glossary' was born 1999-10-04 with git commit 280a0bb... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 by the authors +@end macro -@c see lilypond.tely for info installation note -@dircategory LilyPond -@direntry -* Glossary: (lilypond/music-glossary). Glossary of music terms. -@end direntry - -@titlepage -@title Music Glossary -@author Christian Mondrup @c Original author of LilyPond glossary -@c Danish glossary -@author François Pinard @c Original glossary of GNU music project, -@c French glossary -@author Mats Bengtsson @c Swedish glossary -@author David González @c Spanish glossary -@author Bjoern Jacke @c German glossary -@author Neil Jerram @c English glossary translations -@author Heikki Junes @c Finnish glossary -@author Kurtis Kroon @c English glossary maintenance, beg. Oct. 2007 -@author Adrian Mariano @c Italian glossary -@author Han-Wen Nienhuys @c Dutch glossary -@author Jan Nieuwenhuizen @c Dutch glossary - -@c Fixes by Jean-Pierre Coulon and `Dirk', alphabetized by last name, KK, 10/07 -@c Updates to the German translation by Till Rettig, 12/07 - -Copyright @copyright{} 1999--2009 by the authors - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation, - without Invariant Sections. - -@end titlepage +@set FDL +@include macros.itexi @c TODO: multiple omfcreators? @@ -52,153 +30,48 @@ Copyright @copyright{} 1999--2009 by the authors @omflanguage English @end ignore -@ifnottex -@node Top -@top Music glossary -@end ifnottex - - -@ifnottex - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/music-glossary.pdf,PDF} and as -@uref{source/Documentation/user/music-glossary-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/music-glossary.pdf,PDF} and as a -@uref{source/Documentation/user/music-glossary/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - -This glossary was brought you by: - -@itemize - -@item @b{Christian Mondrup}: Original author of LilyPond glossary, Danish, -@item @b{François Pinard}: Original glossary of GNU music project, French, - -@item @b{Han-Wen Nienhuys}: Dutch, -@item @b{Jan Nieuwenhuizen}: Dutch, - -@item @b{Neil Jerram}: English, -@item @b{Kurtis Kroon}: English, - -@item @b{Heikki Junes}: Finnish, - -@item @b{Bjoern Jacke}: German, - -@item @b{Adrian Mariano}: Italian, - -@item @b{David González}: Spanish, - -@item @b{Mats Bengtsson}: Swedish, - -@end itemize - -with additional contributions: thanks to all who have contributed. - -@ignore - -The list is rather long ... - -@itemize - -@item Danish: -@itemize -@item Rune Zedeler, @emph{pace} -@item Eyolf Østrem -@end itemize - -@item Dutch: -@itemize -@item Alard de Boer -@end itemize - -@item English: -@itemize -@item Trevor Bača -@item Trevor Daniels -@item Andrew Hawryluk -@item Ian Hulin -@item Kieren MacMillan -@item Patrick McCarty -@item Ralph Palmer -@item Carl D. Sorensen -@item Anh Hai Trinh -@end itemize - -@item Finnish: -@itemize -@item Risto Vääräniemi -@end itemize - -@item German: -@itemize -@item Orm Finnendahl -@item Reinhold Kainhofer -@item Werner Lemberg -@item Till Rettig -@item Thomas Scharkowski -@end itemize - -@item Italian -@itemize -@item Andrea Valle -@end itemize - -@item Spanish -@itemize -@item Francisco Vila -@end itemize - -@item Swedish -@itemize -@item Simon Dahlbacka -@end itemize - -@end itemize -@end ignore - -@* -Copyright 1999--2009 by the authors - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation, - without Invariant Sections. +@lilyTitlePage{Music Glossary} -@* -@end ifnottex @c @pagesizes 10.3in @c @everyheading @| @thispage @| @c @evenheading @thispage @| @| @c @oddheading @| @| @thispage @| -This is the Music Glossary (MG) for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @rlearning{About the documentation}. - - @c arrowref @macro aref{word} @iftex @w{@expansion{}@strong{\word\}}@c @end iftex + @ifnottex @expansion{}@ref{\word\, @strong{\word\}}@c @end ifnottex @end macro +@c TOC -- non-tex +@ifnottex + @menu * Musical terms A-Z:: * Duration names notes and rests:: * Pitch names:: +* Non-Western terms A-Z:: + +Appendices + +* Literature used:: +* GNU Free Documentation License:: License of this document. @end menu +@docMain +@end ifnottex + + +@c TOC - tex. Not desired for this manual. -gp +@c @contents + @node Musical terms A-Z @chapter Musical terms A-Z @@ -276,6 +149,7 @@ Languages in this order. * cluster:: * comma:: * common meter:: +* Common Practice Period:: * common time:: * complement:: * compound interval:: @@ -372,6 +246,7 @@ Languages in this order. * harmony:: * hemiola:: * homophony:: +* hook:: * hymn meter:: * interval:: * inversion:: @@ -455,6 +330,7 @@ Languages in this order. * polymetric time signature:: * polyphony:: * portato:: +* power chord:: * presto:: * proportion:: * Pythagorean comma:: @@ -582,17 +458,18 @@ DK: ?, S: ?, FI: kahdelle. -Abbreviated @notation{a2} or @notation{a 2}. In orchestral scores, @notation{a -due} indicates that: +Abbreviated @notation{a2} or @notation{a 2}. In orchestral scores, +@notation{a due} indicates that: @enumerate -@item A single part notated on a single staff that normally carries parts for -two players (e.g. first and second oboes) is to be played by both players. +@item A single part notated on a single staff that normally carries parts +for two players (e.g. first and second oboes) is to be played by both +players. -@item Or conversely, that two pitches or parts notated on a staff that normally -carries a single part (e.g. first violin) are to be played by different players, -or groups of players (@q{desks}). +@item Or conversely, that two pitches or parts notated on a staff that +normally carries a single part (e.g. first violin) are to be played by +different players, or groups of players (@q{desks}). @end enumerate @@ -614,7 +491,7 @@ FI: accelerando, kiihdyttäen. [Italian: @q{speed up, accelerate}] -Increase tempo +An increase in the tempo, abbreviated @notation{accel.} @seealso No cross-references. @@ -648,19 +525,18 @@ No cross-references. @node acciaccatura @section acciaccatura -ES: ?, +ES: mordente de una nota, I: acciaccatura, -F: ?, -D: ?, -NL: ?, +F: acciaccatura, appoggiature brève, +D: Zusammenschlag, +NL: samenslag, DK: ?, S: ?, FI: ?. A grace note which takes its time from the rest or note preceding the -principal note to which it is attached. The acciaccatura is drawn as a -small eighth note (quaver) with a line drawn through the flag and -stem. +principal note to which it is attached. The acciaccatura is drawn as a +small eighth note (quaver) with a line drawn through the flag and stem. @seealso @ref{appoggiatura}, @ref{grace notes}, @ref{ornament}. @@ -670,7 +546,7 @@ stem. @section accidental ES: alteración accidental, -I: accidento, +I: alterazione, accidente, F: altération accidentelle, D: Versetzungszeichen, Akzidenz, NL: toevallig (verplaatsings)teken, @@ -684,14 +560,14 @@ An accidental alters a note by: @item Raising its pitch: @itemize -@item By two semitones (a whole tone)—@notation{double sharp} +@item By two semitones—@notation{double sharp} @item By one semitone—@notation{sharp} @end itemize @item Lowering its pitch: @itemize @item By one semitone—@notation{flat} -@item By two semitones (a whole tone)—@notation{double flat} +@item By two semitones—@notation{double flat} @end itemize @item Or canceling the effects of the key signature or previous accidentals. @@ -733,7 +609,7 @@ An accidental alters a note by: @node adagio @section adagio -ES: adagio, +ES: adagio, lento, I: adagio, F: adagio, lent, D: Adagio, Langsam, @@ -746,8 +622,8 @@ FI: adagio, hitaasti. @itemize -@item Slow tempo, slower -- especially in even meter -- than @notation{andante} -and faster than @notation{largo}. +@item Slow tempo, slower -- especially in even meter -- than +@notation{andante} and faster than @notation{largo}. @item A movement in slow tempo, especially the second (slow) movement of sonatas, symphonies, etc. @@ -761,9 +637,9 @@ of sonatas, symphonies, etc. @node al niente @section al niente -ES: ?, +ES: al niente, I: al niente, -F: ?, +F: al niente, en mourant, D: ?, NL: ?, DK: ?, @@ -804,10 +680,10 @@ Since one does not crescendo @emph{to} nothing, it is not correct to use @node alla breve @section alla breve -ES: ?, +ES: alla breve, I: ?, -F: alla breve, -D: ?, +F: alla breve, à la brève, +D: Allabreve, alla breve NL: ?, DK: ?, S: ?, @@ -815,15 +691,17 @@ FI: ?. [Italian: @q{on the breve}] Twice as fast as the notation indicates. -Also called @notation{in cut-time}. The name derives from mensural notation, -where the @notation{tactus} (or beat) is counted on the semibreve (the modern -whole note). Counting @q{on the breve} shifts the tactus to the next longest -note value, which (in modern usage) effectively halves all note values. +Also called @notation{in cut time}. The name derives from mensural +notation, where the @notation{tactus} (or beat) is counted on the semibreve +(the modern whole note). Counting @q{on the breve} shifts the tactus to the +next longest note value, which (in modern usage) effectively halves all note +values. -(In mensural notation, breves and semibreves can have a ternary relationship, in -which case @notation{alla breve} means thrice (not twice) as fast. In practice, -this complication may not have mattered, since Gaffurius's system of multiplex -proportions makes it easy to explicitly state which proportion is needed.) +In mensural notation, breves and semibreves can have a ternary relationship, +in which case @notation{alla breve} means thrice (not twice) as fast. In +practice, this complication may not have mattered, since Gaffurius's system +of multiplex proportions makes it easy to explicitly state which proportion +is needed. @seealso @ref{breve}, @ref{hemiola}, @ref{mensural notation}, @ref{note value}, @@ -833,9 +711,9 @@ proportions makes it easy to explicitly state which proportion is needed.) @node allegro @section allegro -ES: allegro, +ES: allegro, rápido, I: allegro, -F: allegro, +F: allegro, gaiement, D: Allegro, Schnell, Fröhlich, Lustig, NL: allegro, DK: allegro, @@ -857,8 +735,8 @@ I: alterazione, F: altération, D: Alteration, NL: verhoging of verlaging, -DK: ?, -S: ?, +DK: Forandring, +S: Förändring, FI: muunnettu. An alteration is the modification, raising or lowering, of a note's @@ -882,9 +760,9 @@ DK: alt, S: alt, FI: altto, matala naisääni. -A female voice of low range (@emph{contralto}). Originally the alto -was a high male voice (hence the name), which by the use of falsetto -reached the height of the female voice. This type of voice is also +A female voice of low range (@emph{contralto}). Originally the alto was a +high male voice (hence the name), which by castration or the use of falsetto +reached the height of the natural female voice. This type of voice is also known as countertenor. @seealso @@ -914,7 +792,7 @@ C clef setting middle C on the middle line of the staff. ES: ámbito, I: ambitus, -F: ambitus, +F: ambitus, tessiture, D: Ambitus, NL: ambitus, DK: ambitus, @@ -943,7 +821,7 @@ S: upptakt, FI: kohotahti. An anacrusis (also known as pickup or upbeat) is an incomplete measure -of music before a section of music. It also refers to the initial +of music before a section of music. It also refers to the initial note(s) of a melody occurring in that incomplete measure. @lilypond[quote,relative=1] @@ -988,7 +866,7 @@ a1 b c d e f g a ES: andante, I: andante, -F: andante, +F: andante, allant, D: Andante, Gehend, NL: andante, DK: andante, @@ -1010,7 +888,7 @@ ES: apoyatura, I: appoggiatura, F: appoggiature, (port de voix), D: Vorschlag, Vorhalt -NL: voorslag, +NL: (korte) voorslag, DK: forslag, S: förslag, FI: appoggiatura, etuhele. @@ -1118,7 +996,7 @@ No cross-references. @section articulation ES: articulación, -I: articulazione, +I: articolazione, F: articulation, D: Artikulation, NL: articulatie, @@ -1152,6 +1030,26 @@ A distance between a starting lower note and a higher ending note. No cross-references. +@node augmentation +@section augmentation + +ES: aumentación, +I: aumentazione, +F: augmentation, +D: Augmentation, +NL: Augmentatio, +DK: Forøgelse, +S: Förstoring, +FI: aika-arvojen pidentäminen. + +@c TODO: add definition. + +This is a placeholder for augmentation (wrt mensural notation). + +@seealso +@ref{diminution}, @ref{mensural notation}. + + @node augmented interval @section augmented interval @@ -1168,26 +1066,6 @@ FI: ylinouseva intervalli. @ref{interval}. -@node augmentation -@section augmentation - -ES: ?, -I: ?, -F: ?, -D: ?, -NL: ?, -DK: ?, -S: ?, -FI: aika-arvojen pidentäminen. - -@c TODO: add definition. - -This is a placeholder for augmentation (wrt mensural notation). - -@seealso -@ref{diminution}, @ref{mensural notation}. - - @node autograph @section autograph @@ -1206,7 +1084,7 @@ FI: käsinkirjoitettu nuotti. @item Music prepared for photoreproduction by freehand drawing, with the aid of a straightedge ruler and T-square only, which attempts to -emulate engraving. This required more skill than did engraving. +emulate engraving. This required more skill than did engraving. @end itemize @@ -1292,7 +1170,7 @@ The male voice intermediate in pitch between the bass and the tenor. ES: clave de fa en tercera, I: chiave di baritono, -F: clef d' Ut cinquième ligne, clef de Fa troisième, +F: clef d'ut cinquième ligne, clef de fa troisième, D: Baritonschlüssel, NL: baritonsleutel, DK: barytonnøgle, @@ -1351,16 +1229,16 @@ A clef setting with middle C on the first top ledger line. @node beam @section beam -ES: barra +ES: barra (de corcheas), I: coda, -F: barre, +F: ligature, barre (de croches), D: Balken, NL: waardestreep, DK: bjælke, S: balk, FI: palkki. -Line connecting a series of notes (shorter than a quarter note). The +Line connecting a series of notes (shorter than a quarter note). The number of beams determines the note value of the connected notes. @lilypond[quote,notime,relative=2,line-width=13\cm] @@ -1480,8 +1358,8 @@ No cross-references. @section bracket ES: corchete, -I: ?, -F: ?, +I: parentesi quadra, +F: crochet, D: ?, NL: ?, DK: ?, @@ -1506,7 +1384,8 @@ FI: vaskisoitin. A family of blown musical instruments made of brass, all using a cup formed mouth piece. The brass instruments commonly used in a symphony -orchestra are trumpet, trombone, french horn, and tuba. +orchestra are trumpet, trombone, French horn, and tuba. In marching bands, +sousaphones and contrabass bugles are common. @seealso No cross-references. @@ -1565,7 +1444,7 @@ g\breve @itemize @item ES: do @item I: do -@item F: ut +@item F: ut, do @item D: C, c @item NL: c @item DK: c @@ -1603,7 +1482,7 @@ lines. } \addlyrics { \override Lyrics . LyricText #'self-alignment-X = #LEFT - "Soprano " "Mezzosoprano " "Alto " "Tenor " Baritone + "Soprano " "Mezzosoprano " "Alto " "Tenor " "Baritone " } @end lilypond @@ -1654,7 +1533,7 @@ No cross-references. ES: cesura, I: cesura, -F: césura, +F: césure, D: Zäsur, NL: ?, DK: ?, @@ -1699,8 +1578,8 @@ S: cent, FI: sentti, puolisävelaskeleen sadasosa tasavireisessä viritysjärjestelmässä. -Logarithmic unit of measurement. 1@tie{}cent is 1/1200 of an octave -(1/100 of an equally tempered semitone). +Logarithmic unit of measuring pitch differences. 1@tie{}cent is 1/1200 of +an octave (1/100 of an equally tempered semitone). @seealso @ref{equal temperament}, @ref{semitone}. @@ -1726,9 +1605,9 @@ S: ackord, FI: sointu. Three or more tones sounding simultaneously. In traditional European music -the base chord is a @emph{triad} consisting of two thirds. @emph{Major} +the base chord is a @emph{triad} consisting of two thirds. @emph{Major} (major + minor third) as well as @emph{minor} (minor + major third) chords -may be extended with more thirds. Four-tone @emph{seventh chords} and +may be extended with more thirds. Four-tone @emph{seventh chords} and five-tone @emph{ninth} major chords are most often used as dominants (functional harmony). Chords having no third above the lower notes to define their mood are a special case called @q{open chords}. The lack of @@ -1754,7 +1633,7 @@ minor. "diminished " "augmented " "seventh-chord " - ninth-chord + "ninth-chord" } >> @end lilypond @@ -1809,7 +1688,7 @@ Using tones extraneous to a diatonic scale (minor, major). ES: modo eclesiástico, I: modo ecclesiastico, -F: mode ecclésiastique, +F: mode ecclésiastique, mode d'église, D: Kirchentonart, NL: kerktoonladder, DK: kirketoneart, @@ -1903,7 +1782,7 @@ the top line high F: \override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 1 1) \override NonMusicalPaperColumn - #'line-break-system-details = #'((alignment-offsets . (3 0 -3 -6))) + #'line-break-system-details = #'((alignment-distances . (3 3))) \override BarLine #'stencil = ##f } \context { @@ -1914,10 +1793,10 @@ the top line high F: } @end lilypond -Staves of five lines are usually used, and the clef superimposed on -them indicates which five lines have been selected from this -@samp{grand staff}. For example, the treble or G clef indicates that -the top five lines have been selected: +Staves of five lines are usually used, and the clef superimposed on them +indicates which five lines have been selected from this @notation{grand +staff}. For example, the treble or G clef indicates that the top five lines +have been selected: @lilypond[quote] \score { @@ -1964,7 +1843,7 @@ the top five lines have been selected: \override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 2 1) \override NonMusicalPaperColumn - #'line-break-system-details = #'((alignment-offsets . (3 0 -3 -6))) + #'line-break-system-details = #'((alignment-distances . (3 3))) \override BarLine #'stencil = ##f } \context { @@ -1978,11 +1857,10 @@ the top five lines have been selected: The @q{curl} of the G clef is centered on the line that represents the pitch G. -In the same way, the bass or F clef indicates that the bottom five -lines have been selected from the @samp{grand staff}, and the alto or -C clef indicates the middle five lines have been selected. This -relationship is shown below, where the notes show an arpeggio on a C -major chord. +In the same way, the bass or F clef indicates that the bottom five lines +have been selected from the @notation{grand staff}, and the alto or C clef +indicates the middle five lines have been selected. This relationship is +shown below, where the notes show an arpeggio on a C major chord. @lilypond[quote] \score { @@ -2028,7 +1906,7 @@ major chord. \override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 2 1) \override NonMusicalPaperColumn - #'line-break-system-details = #'((alignment-offsets . (0 -3 -6))) + #'line-break-system-details = #'((alignment-distances . (3 3))) \override BarLine #'stencil = ##f } \context { @@ -2047,8 +1925,8 @@ major chord. @section cluster ES: racimo, -I: ?, -F: ?, +I: cluster, +F: cluster, D: Cluster, NL: ?, DK: ?, @@ -2114,12 +1992,31 @@ Another name for @ref{common time}. @ref{common time}, @ref{meter}. +@node Common Practice Period +@section Common Practice Period + +ES: ?, +I: ?, +F: ?, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: ?. + +@c TODO: +This is a stub for Common Practice Period (CPP). + +@seealso +@ruser{Note names in other languages}. + + @node common time @section common time ES: compasillo, -I: ?, -F: ?, +I: tempo semplice, +F: mesure à 4/4, D: ?, NL: ?, DK: ?, @@ -2171,9 +2068,9 @@ Intervals larger than an octave. @section compound meter ES: compás compuesto, compás de subdivisión ternaria, -I: ?, -F: ?, -D: ?, +I: tempo composto, +F: mesure composée, +D: Dreiertakt, NL: ?, DK: ?, S: ?, @@ -2191,8 +2088,8 @@ A meter that includes a triplet subdivision within the beat, such as ES: compás compuesto, compás de amalgama (def. 2), I: ?, -F: ?, -D: ?, +F: temps composé, +D: zusammengesetzte Taktart, NL: ?, DK: ?, S: ?, @@ -2206,7 +2103,7 @@ A meter that includes a triplet subdivision within the beat: see @item A time signature that additively combines two or more unequal meters, e.g., -"3/8 + 2/8" instead of "5/8". Sometimes called additive time signatures. +@q{3/8 + 2/8} instead of @q{5/8}. Sometimes called additive time signatures. @end enumerate @@ -2228,9 +2125,6 @@ A time signature that additively combines two or more unequal meters, e.g., #(set-time-signature 8 8 '(3 2 3)) \override Staff.TimeSignature #'stencil = #(compound-time "3" "2" "3" "8") - #(override-auto-beam-setting '(end 1 8 8 8) 3 8) - #(override-auto-beam-setting '(end 1 8 8 8) 5 8) - c8 d e f4 d8 c bes c4 g'8 e c f4. \bar "||" @@ -2244,10 +2138,10 @@ A time signature that additively combines two or more unequal meters, e.g., @node concert pitch @section concert pitch -ES: en Do, afinación de concierto, -I: ?, -F: ?, -D: ?, +ES: en Do, tono de concierto, +I: intonazione reale, +F: tonalité de concert, en ut, +D: Kammerton, NL: ?, DK: ?, S: ?, @@ -2259,8 +2153,8 @@ all) instruments that play in concert pitch: @c Let's see how easy (or hard) it is to put bulleted lists in tables. -@multitable {alto trombone} {tenor trombone} {bass trombone} -@headitem Woodwinds @tab Brass @tab Strings +@multitable {bassoon} {violoncello} +@headitem Woodwinds @tab Strings @item @itemize @@ -2271,14 +2165,6 @@ all) instruments that play in concert pitch: @tab -@itemize -@item alto trombone -@item tenor trombone -@item bass trombone -@end itemize - -@tab - @itemize @item violin @item viola @@ -2287,21 +2173,24 @@ all) instruments that play in concert pitch: @end multitable +@ignore This needs to be reworked. The trombones are a special case: although they are said to be @q{in F} (alto or bass) or @q{in B-flat} (tenor), this refers to their fundamental note, not to their parts' transposition. (In fact, the trombones' parts are written at concert pitch with an appropriate clef -- alto, tenor or bass.) This differs from other instruments @q{in F}, @q{in B-flat}, and so on, which are transposing instruments. +@end ignore Instruments that play @q{in C} but in a different octave than what is written are, technically speaking, @emph{transposing instruments}: @itemize -@item piccolo (plays an octave higher) -@item celesta (plays an octave higher) -@item double bass (plays an octave lower) +@item piccolo (plays an octave higher than written) +@item celesta (plays an octave higher than written) +@item classical guitar (plays an octave lower than written) +@item double bass (plays an octave lower than written) @end itemize @@ -2470,7 +2359,7 @@ S: crescendo, FI: cresendo, voimistuen. Increasing volume. Indicated by a rightwards opening horizontal wedge -(hairpin) or the abbreviation @notation{cresc.}. +(hairpin) or the abbreviation @notation{cresc.} @lilypond[quote,relative=2] \key g \major @@ -2487,25 +2376,25 @@ g4\< a b c | d1\! \bar "|." ES: notas guía, I: notine, -F: petites notes précédent l'entrée d'un instrument, réplique, +F: petites notes précédant l'entrée d'un instrument, réplique, @q{à défaut}, D: Stichnoten, NL: stichnoten, DK: stiknoder, S: inprickningar, FI: vihjenuotit. -In a separate part notes belonging to another part with the purpose of -hinting when to start playing. Usually printed in a smaller type. +Notes belonging to one part printed in another to hint when to start +playing. Usually printed in a smaller type. @seealso -No cross-references. +Compare: @ref{ossia}. @node custos @section custos ES: custos, -I: ?, +I: custos, guida, F: guidon, D: Notenzeiger, Custos, NL: ?, @@ -2519,8 +2408,8 @@ anticipates the pitch of the first note of the following line and thus helps the player or singer to manage line breaks during performance, which enhances the readability of a score. -Custodes were frequently used in music notation until the 16th century. -There were different appearences for different notation styles. Nowadays, +Custodes were frequently used in music notation until the 16th century. +There were different appearances for different notation styles. Nowadays, they have survived only in special forms of musical notation such as the @emph{Editio Vaticana}, dating from the beginning of the 20th century @@ -2582,7 +2471,7 @@ DK: da capo, S: da capo, FI: da capo, alusta. -Abbreviated @notation{D.C.}. Indicates that the piece is to be repeated from +Abbreviated @notation{D.C.} Indicates that the piece is to be repeated from the beginning to the end or to a certain place marked @emph{fine}. @seealso @@ -2592,10 +2481,10 @@ No cross-references. @node dal niente @section dal niente -ES: ?, +ES: dal niente, de la nada, I: dal niente, -F: ?, -D: ?, +F: partant de rien, +D: aus dem Nichts, dal niente, NL: ?, DK: ?, S: ?, @@ -2620,7 +2509,7 @@ DK: dal segno, S: dal segno, FI: dal segno, lähtien merkistä. -Abbreviated @notation{D.S.}. Repetition, not from the beginning, but from +Abbreviated @notation{D.S.} Repetition, not from the beginning, but from another place frequently near the beginning marked by a sign (@notation{segno}): @@ -2653,7 +2542,7 @@ S: decrescendo, FI: decresendo, hiljentyen. Decreasing tone volume. Indicated by a leftwards opening horizontal -wedge (hairpin) or the abbreviation @notation{decresc.}. +wedge (hairpin) or the abbreviation @notation{decresc.} @lilypond[quote,relative=2] \key g \major @@ -2695,8 +2584,8 @@ DK: diatonisk skala, S: diatonisk skala, FI: diatoninen asteikko. -A scale consisting of 5@w{ }whole tones and 2@w{ }semitones (S). Scales -played on the white keys of a piano keybord are diatonic. These scales +A scale consisting of 5@w{ }whole tones and 2@w{ }semitones (S). Scales +played on the white keys of a piano keyboard are diatonic. These scales are sometimes called, somewhat inaccurately, @q{church modes}). These @emph{modes} are used in Gregorian chant and in pre-baroque early music @@ -2881,13 +2770,15 @@ FI: vähennetty intervalli. ES: diminuendo, I: diminuendo, -F: diminuendo, +F: diminuendo, en diminuant, D: diminuendo, NL: diminuendo, DK: diminuendo, S: diminuendo, FI: diminuendo, hiljentyen. +Abbreviated @emph{dim.} It indicates a decrease in tone volume. + @seealso @ref{decrescendo}. @@ -2895,10 +2786,10 @@ FI: diminuendo, hiljentyen. @node diminution @section diminution -ES: ?, -I: ?, -F: ?, -D: ?, +ES: disminución, +I: diminuzione, +F: diminution, +D: Diminution, NL: ?, DK: ?, S: ?, @@ -2913,7 +2804,7 @@ This is a stub for diminution (@emph{wrt} mensural notation). @node direct @section direct -ES: ?, +ES: directo, I: ?, F: ?, D: Weiser, Zeiger, @@ -2968,7 +2859,7 @@ Another name for @ref{dissonant interval}. ES: intervalo disonante, disonancia, I: intervallo dissonante, dissonanza, -F: dissonance, +F: intervalle dissonant, dissonance, D: Dissonanz, NL: dissonant interval, dissonant, DK: dissonerende interval, dissonans, @@ -2982,10 +2873,10 @@ FI: dissonanssi, dissonoiva intervalli, riitasointi. @node divisio @section divisio -ES: ?, +ES: división, I: ?, F: ?, -D: ?, +D: Divisio, NL: ?, DK: ?, S: ?, @@ -3017,10 +2908,10 @@ No cross-references. @node doit @section doit -ES: ?, +ES: elevación [de tono], I: ?, -F: ?, -D: ?, +F: saut, +D: Glissando zu unbestimmter Tonhöhe, NL: ?, DK: ?, S: ?, @@ -3056,7 +2947,7 @@ The fifth @emph{scale degree} in @emph{functional harmony}. ES: acorde de novena de dominante, I: accordo di nona di dominante, -F: accord de neuvième dominante, +F: accord de neuvième de dominante, D: Domi@-nant@-nonen@-akkord, NL: dominant noon akkoord, DK: dominantnoneakkord, @@ -3072,7 +2963,7 @@ FI: dominanttinoonisointu. ES: acorde de séptima de dominante, I: accordo di settima di dominante, -F: accord de septième dominante, +F: accord de septième de dominante, D: Dominantseptakkord, NL: dominant septiem akkoord, DK: dominantseptimakkord, @@ -3216,10 +3107,10 @@ FI: kaksoisylennysmerkki. @node double time signature @section double time signature -ES: ?, +ES: compás polimétrico, I: ?, F: ?, -D: ?, +D: zusammengesetzte Taktart, NL: ?, DK: ?, S: ?, @@ -3252,7 +3143,7 @@ No cross-references. ES: tiempo binario, I: tempo binario, -F: temps binaire, +F: métrique binaire, D: in zwei, grader Takt, NL: tweedelige maatsoort, DK: todelt takt, @@ -3299,7 +3190,7 @@ FI: kesto, aika-arvo. @section dynamics ES: dinámica, matices, -I: ?, +I: dinamica, F: nuances, D: Dynamik, Lautstärke, NL: ?, @@ -3385,9 +3276,9 @@ indicate this information are called dynamic marks. @c TODO: add languages ES: sinalefa, -I: ?, -F: ?, -D: ?, +I: elisione, +F: élision, +D: Elision, NL: ?, DK: ?, S: ?, @@ -3423,7 +3314,7 @@ DK: nodestik, S: nottryck, FI: painatus. -Engraving means incising or etching a metal plate for printing. +Engraving means incising or etching a metal plate for printing. Photoengraving means drawing music with ink in a manner similar to drafting or engineering drawing, using similar tools. @@ -3516,7 +3407,7 @@ Performance indications concerning: @section extender line ES: línea de extensión [de melisma, de bajo cifrado, etc.], -I: ?, +I: linea di estensione, F: ligne d'extension [de mélisme, de basse chiffrée, etc.], D: Fülllinie, NL: ?, @@ -3598,7 +3489,7 @@ S: f-klav, FI: F-avain. The position between the dots of the key symbol is the line of the F -below central@w{ }C. Used on the third, fourth and fifth note line. +below central@w{ }C. Used on the third, fourth and fifth note line. A digit@w{ }8 above the clef symbol indicates that the notes must be played an octave higher (for example, bass recorder) while 8@w{ }below the clef symbol indicates playing an octave lower (for example, on the @@ -3636,10 +3527,10 @@ Double Bass). @node fall @section fall -ES: ?, +ES: caída [de tono], I: ?, -F: ?, -D: ?, +F: chute, +D: Glissando zu unbestimmter Tonhöhe nach unten, NL: ?, DK: ?, S: ?, @@ -3655,9 +3546,9 @@ Indicator for a indeterminately falling pitch bend. Compare with @node feathered beam @section feathered beam -ES: barra punteada, +ES: barra progresiva, I: ?, -F: liens de croches en soufflet, +F: ligature en soufflet, lien de croches en soufflet, D: gespreizter Balken, NL: ?, DK: ?, @@ -3819,10 +3710,10 @@ g64-"64th" s8 @node flageolet @section flageolet -ES: ?, +ES: armónico, I: ?, -F: ?, -D: ?, +F: flageolet, +D: Flageolett, NL: ?, DK: ?, S: ?, @@ -3871,7 +3762,7 @@ FI: alennusmerkki. @node forte @section forte -ES: forte, +ES: forte, fuerte, I: forte, F: forte, D: forte, laut, @@ -3915,11 +3806,11 @@ FI: kvartti. ES: partitura a la francesa, I: ?, F: ?, -D: ?, +D: Orchesterpartitur ohne leere Systeme, NL: ?, DK: ?, S: ?, -FI: partituuri francesan tapaan. +FI: partituuri ilman tyhjiä nuottiviivastoja. A @q{condensed} score, produced by omitting staves for instruments that are not playing at the moment, and by moving up additional systems from following pages @@ -3940,7 +3831,7 @@ you may wish to procure a copy of their style manual. ES: pentagrama a la francesa, I: ?, F: ?, -D: ?, +D: zeitweiliges Notensystem, NL: ?, DK: ?, S: ?, @@ -4099,7 +3990,7 @@ No cross-references. ES: notas de adorno, I: abbellimenti, -F: fioriture, +F: ornement, fioriture, D: Verzierungen, Vorschläge, Vor@-schlags@-noten, NL: versieringen, DK: forsiringer, @@ -4118,8 +4009,8 @@ counted in the rhythm of the bar. @section grand staff ES: sistema de piano, -I: accolatura, -F: accolade, +I: accollatura, +F: système [de portées], accolade, D: Akkolade, Klaviersystem, NL: piano systeem, DK: klaversystem, @@ -4137,7 +4028,7 @@ A combination of two staves with a brace. Usually used for piano music. ES: grave, I: grave, -F: grave, +F: grave, lent, D: Grave, Langsam, NL: grave, ernstig, DK: grave, @@ -4169,7 +4060,7 @@ No cross-references. @item DK: h @item S: h @item FI: H, h -@end itemize +@end itemize Letter name used for @notation{B natural} in German and Scandinavian usage. In the standard usage of these countries, @notation{B} means @@ -4276,8 +4167,8 @@ A sequence of chords that terminates a musical phrase or section. @node harmonics @section harmonics -ES: sonidos del flautín, -I: suoni flautati, +ES: armónicos, sonidos aflautados, +I: armonici, F: flageolet, sons harmoniques, D: Flageolett-Töne, NL: ?, @@ -4346,13 +4237,13 @@ For harmony that uses three or more notes, see @ref{chord}. @section hemiola ES: hemiolia, -I: ?, -F: ?, -D: ?, +I: emiolia, (rarely hemiola or emiola), +F: hémiole, +D: Hemiole, NL: ?, DK: ?, S: ?, -FI: 3/2 -suhde. +FI: hemioli, 3/2 -suhde. [Greek: in Latin, @emph{sesquialtera}] The ratio 3:2. @@ -4407,13 +4298,20 @@ the same rhythm (more or less). In contrast to @emph{polyphony}. @ref{polyphony}. +@node hook +@section hook + +@seealso +@ref{flag}. + + @node hymn meter @section hymn meter ES: ?, I: ?, F: ?, -D: ?, +D: Silbenanzahl, NL: ?, DK: ?, S: ?, @@ -4461,31 +4359,31 @@ S: intervall, FI: intervalli, kahden sävelen korkeusero. Difference in pitch between two notes. Intervals may be diminished, minor, -perfect, major, or augmented. The augmented fourth and the diminished fifth are -identical (or @emph{enharmonic}) and are called @emph{tritonus} because they -consist of three whole tones. The addition of such two intervals forms an -octave. +perfect, major, or augmented. The augmented fourth and the diminished fifth +are identical (or @emph{enharmonic}) on an equal-tempered twelve-tone scale +and are called @emph{tritonus} because they consist of three whole tones. +The addition of such two intervals forms an octave. @lilypond[quote,notime,line-width=13.0\cm] << \context Voice \relative c'' { % Prime or unison - < g g >1 + < g g >1 < g gis >^"aug" % Second < gis as >^"dim" - < g! as >^"min" + < g! as >^"min" < g a! >^"maj" - < g ais >^"aug" + < g ais >^"aug" % Third - < gis bes >^"dim" - < g! bes >^"min" - < g b! >^"maj" - < g bis >^"aug" + < gis bes >^"dim" + < g! bes >^"min" + < g b! >^"maj" + < g bis >^"aug" % Fourth - < g ces >^"dim" - < g c! >^"per" - < g cis >^"aug" + < g ces >^"dim" + < g c! >^"per" + < g cis >^"aug" % Fifth < g des' >^"dim" < g d' >^"per" @@ -4496,9 +4394,9 @@ octave. < g e'! >^"maj" < g eis' >^"aug" % Seventh - < gis f'! >^"dim" - < g! f'! >^"min" - < g fis' >^"maj" + < gis f'! >^"dim" + < g! f'! >^"min" + < g fis' >^"maj" < g fisis' >^"aug" % Octave < g ges' >^"dim" @@ -4525,38 +4423,38 @@ octave. @node inversion @section inversion -ES: ?, -I: ?, -F: inversion, -D: ?, +ES: inversión, +I: rivolto, +F: renversement, +D: Umkehrung, NL: ?, DK: ?, S: ?, FI: käännös. When a chord sounds with a bass note that differs from the root of the -chord, it is said to be @emph{inverted}. The number of inversions that a +chord, it is said to be @emph{inverted}. The number of inversions that a chord can have is one fewer than the number of constituent notes. For example, triads (which have three constituent notes) can have three positions, two of which are inversions: @table @dfn @item Root position -The root note is in the bass, and above that are the third and the fifth. A +The root note is in the bass, and above that are the third and the fifth. A triad built on the first scale degree, for example, is marked @notation{I}. @item First inversion -The third is in the bass, and above it are the fifth and the root. This +The third is in the bass, and above it are the fifth and the root. This creates an interval of a sixth and a third above the bass note, and so is -marked in figured Roman notation as @notation{6/3}. This is commonly +marked in figured Roman notation as @notation{6/3}. This is commonly abbreviated to @notation{I6} (or @notation{Ib}) since the sixth is the characteristic interval of the inversion, and so always implies @notation{6/3}. @item Second inversion -The fifth is in the bass, and above it are the root and the third. This +The fifth is in the bass, and above it are the root and the third. This creates an interval of a sixth and a fourth above the bass note, and so is -marked as @notation{I6/4} or @notation{Ic}. Second inversion is the most +marked as @notation{I6/4} or @notation{Ic}. Second inversion is the most unstable chord position. @end table @@ -4569,7 +4467,7 @@ No cross-references. ES: intervalo invertido, I: intervallo rivolto, -F: intervalle reversé, +F: intervalle renversé, D: umgekehrtes Intervall, NL: interval inversie, DK: omvendingsinterval, @@ -4649,16 +4547,16 @@ key of the music. @section laissez vibrer ES: dejar vibrar, -I: ?, +I: laissez vibrer, F: laissez vibrer, -D: ?, +D: Laissez vibrer, schwingen lassen, NL: ?, DK: ?, S: ?, FI: antaa väristä. [French: @q{Let vibrate}] Most frequently associated with harp -parts. Marked @notation{l.v.} in the score. +parts. Marked @notation{l.v.} in the score. @seealso No cross-references. @@ -4669,7 +4567,7 @@ No cross-references. ES: largo, I: largo, -F: largo, +F: largo, large, ample, D: Largo, Langsam, Breit, NL: largo, DK: largo, @@ -4677,7 +4575,7 @@ S: largo, FI: largo, hitaasti, leveästi. [Italian: @q{wide}.] Very slow in tempo, usually combined with great -expressiveness. @emph{Larghetto} is less slow than largo. +expressiveness. @emph{Larghetto} is less slow than largo. @node leading note @@ -4685,7 +4583,7 @@ expressiveness. @emph{Larghetto} is less slow than largo. ES: sensible, I: sensibile, -F: note sensible, +F: (note) sensible, D: Leitton, NL: leidtoon, DK: ledetone, @@ -4843,7 +4741,7 @@ FI: viiva, nuottiviiva. ES: en su lugar, I: loco, F: ?, -D: ?, +D: loco, NL: ?, DK: ?, S: ?, @@ -4876,10 +4774,10 @@ FI: pitkä appoggiatura, pitkä etuhele. @section longa @itemize -@item US: long, longa, +@item US: long, longa, @item ES: longa, @item I: longa, -@item F: longa, +@item F: longa, longue, @item D: Longa, @item NL: longa, @item DK: longa, @@ -4903,7 +4801,7 @@ g\longa g\breve ES: ligadura de letra, I: ?, -F: ?, +F: ligature de mots, D: Textbindung, NL: ?, DK: ?, @@ -4920,9 +4818,9 @@ FI: sidonta sanoituksessa. @section lyrics ES: letra (de la canción), -I: ?, +I: testo, F: paroles, -D: Liedtext, Gesangtext, +D: Liedtext, Gesangstext, NL: liedtekst, DK: ?, S: ?, @@ -4969,14 +4867,14 @@ FI: suuri intervalli. @node maxima @section maxima -ES: ?, -I: ?, -F: ?, -D: ?, +ES: máxima, +I: maxima, +F: maxima, maxime, +D: Maxima, NL: ?, DK: ?, S: ?, -FI: ?. +FI: maxima. Note value: twice the length of a @notation{longa}. @@ -5068,8 +4966,8 @@ mediant (variant tonic). @section melisma ES: melisma, -I: ?, -F: mélisme, +I: melisma, +F: mélisme, tenue, D: Melisma, NL: melisma, DK: ?, @@ -5089,9 +4987,9 @@ No cross-references. @c TODO: add languages ES: línea de melisma, -I: ?, -F: ?, -D: ?, +I: linea del melisma, +F: trait de mélisme, trait de tenue, +D: Fülllinie, NL: ?, DK: ?, S: ?, @@ -5114,9 +5012,9 @@ FI: melismaviiva. @c TODO: add languages ES: notación mensural, -I: ?, -F: ?, -D: ?, +I: notazione mensurale, +F: notation mensurale, +D: Mensuralnotation, NL: ?, DK: ?, S: ?, @@ -5131,7 +5029,7 @@ Franco of Cologne (ca. 1250) is credited with the first systematic explanation of the notation's principles, so the notation of this earliest period is called @q{Franconian}. Franco's system made use of three note values -- long, breve, and semibreve -- each of which was normally equivalent to three of the next -lower note value. +lower note value. Then, in the first half of the 14th century, Philippe de Vitry and Jehan de Murs added several note values (the minim, semiminim and fusa) and extended Franco's @@ -5160,10 +5058,10 @@ TODO: add to definition (including summary info on proportional notation) @c TODO: add languages -ES: ?, +ES: signo de mensuración, I: ?, -F: ?, -D: ?, +F: signe de mensuration, +D: Mensurzeichen, NL: ?, DK: ?, S: ?, @@ -5263,7 +5161,7 @@ Two mensuration signs have survived to the present day: the C-shaped sign, which originally designated @notation{tempus imperfectum} and @notation{prolatio minor} now stands for @notation{common time}; and the slashed C, which designated the same with @notation{diminution} now stands -for @notation{cut-time} (essentially, it has not lost its original meaning). +for @notation{cut time} (essentially, it has not lost its original meaning). @seealso @ref{diminution}, @ref{proportion}, @ref{time signature}. @@ -5334,7 +5232,7 @@ frequently used prior to the 20th Century. @item triple: 9/8 @item quadruple: 12/8 - @end itemize + @end itemize @end itemize @@ -5417,9 +5315,11 @@ Compound quadruple meter (P. Yon, 1886-1943): \bar "||"} @end lilypond +@ignore @b{@q{Monometer} vs Polymeter} TODO: add information from discussion on lilypond-user related to polymeter. +@end ignore @seealso @ref{accent}, @ref{hemiola}, @ref{note value}, @ref{time signature} @@ -5479,10 +5379,10 @@ Exact tempo indication (in beats per minute). Abbreviated @notation{M.M.} or @node mezzo @section mezzo -ES: ?, +ES: mezzo, I: mezzo, -F: ?, -D: ?, +F: mezzo, +D: mezzo, etwas, NL: ?, DK: ?, S: ?, @@ -5537,8 +5437,8 @@ The female voice between soprano and contralto. ES: do central, I: do centrale, -F: do central, -D: eingestrichenes@w{ }c, +F: do central, do 3 +D: zweigestrichenes@w{ }c, NL: centrale@w{ }c, DK: enstreget@w{ }c, S: ettstruket@w{ }c, @@ -5562,7 +5462,7 @@ No cross-references. ES: menor, I: minore, -F: mode mineur, +F: (mode) mineur, D: Moll, NL: mineur, DK: mol, @@ -5659,7 +5559,7 @@ FI: mordent, korukuvio. ES: motivo, I: inciso, -F: incise, +F: motif, incise, D: Motiv, NL: motief, DK: motiv, @@ -5713,9 +5613,9 @@ No cross-references. @node multi-measure rest @section multi-measure rest -ES: compases de espera, +ES: compases de espera, silencio multicompás, I: pausa multipla, -F: pause multiple, +F: pause multiple, mesure à compter, NL: meermaats rust, D: mehrtaktige Pause, Kirchenpause, DK: flertaktspause, @@ -5725,7 +5625,7 @@ FI: usean tahdin mittainen tauko. Multi-measure rests are conventionally typeset with a combination of longa, breve and whole rests for shorter and a long horizontal bar for longer spans of rest, with a number above to indicate the duration (in -measures) of the rest. The former style is called @q{Kirchenpausen} in +measures) of the rest. The former style is called @q{Kirchenpausen} in German, as a reminiscence of its use in Renaissance vocal polyphony. @lilypond[quote,relative=2] @@ -5761,6 +5661,17 @@ FI: palautusmerkki. @node neighbor tones @section neighbor tones +@c TODO: add definition. + +ES: tonos vecinos, +I: ?, +F: tons voisins, +D: ?, +NL: ?, +DK: ?, +S: ?, +FI: ?. + @seealso @ref{acciaccatura}, @ref{appoggiatura}, @ref{grace notes}, @ref{ornament}. @@ -5816,7 +5727,7 @@ No cross-references. ES: cabeza, I: testa, testina, capocchia, -F: tête de la note, +F: tête de note, D: Notenkopf, NL: nootballetje, DK: nodehovede, @@ -5825,7 +5736,7 @@ FI: nuotin pää. A head-like sign which indicates pitch by its position on a @notation{staff} provided with a @notation{clef}, and duration by a variety of shapes such as -hollow or black heads with or without @notation{stems}, @notation{flags}, etc. +hollow or black heads with or without @notation{stems}, @notation{flags}, etc. For percussion instruments (often having no defined pitch) the note head may indicate the instrument. @@ -5843,7 +5754,7 @@ indicate the instrument. @node note value @section note value -ES: valor (duración), +ES: valor, duración, I: valore, durata, F: durée, valeur (d'une note), D: Notenwert, @@ -5862,7 +5773,7 @@ As used in mensural notation, this fraction was more flexible: it could also be one-third the higher note value. Composers indicated which proportions to use with various signs—two of which survive to the present day: the C-shaped sign for @notation{common time}, and the slashed C for -@notation{alla breve} or @notation{cut-time}. +@notation{alla breve} or @notation{cut time}. @c TODO -- add maxima to this example, in a way that doesn't break it. @@ -5955,9 +5866,9 @@ bracket, or @notation{loco} see octave marking. @section octave mark ES: indicación de octava, -I: ?, -F: ?, -D: ?, +I: segno di ottava, +F: indication d'octave, +D: Oktavierungszeichen, NL: ?, DK: ?, S: ?, @@ -6071,8 +5982,7 @@ the upper note is played first. @end lilypond Other frequently used ornaments are the @emph{turn}, the @emph{mordent}, and -the -@emph{prall} (inverted mordent). +the @emph{prall} (inverted mordent). @lilypond[quote,line-width=13.0\cm] << @@ -6100,7 +6010,7 @@ the ES: ossia, I: ossia, -F: ossia, +F: ossia, alternative, D: Ossia, NL: alternatief, DK: ossia, @@ -6112,13 +6022,13 @@ score, usually only a few measures long, which presents another version of the music, for example for small hands. @seealso -No cross-references. +Compare: @ref{cue-notes}. @node part @section part -ES: parte, +ES: parte, particella, I: voce, parte, F: partie, D: Stimme, @@ -6200,7 +6110,7 @@ FI: lyömäsoittimet. A family of musical instruments which are played on by striking or shaking. Percussion instruments commonly used in a symphony orchestra are kettledrums (I: @emph{timpani}, D: @emph{Pauken}), snare drum, bass drum, -tambourine, cymbals, chinese gong (tam-tam), triangle, celesta, glockenspiel, +tambourine, cymbals, Chinese gong (tam-tam), triangle, celesta, glockenspiel, and xylophone. @seealso @@ -6263,7 +6173,7 @@ melody. Phrasing may be indicated by a @notation{slur}. @node piano @section piano -ES: piano, +ES: piano, suave, I: piano, F: piano, D: piano, leise, @@ -6347,9 +6257,9 @@ No cross-references. @section polymeter ES: compás polimétrico, -I: ?, -F: ?, -D: ?, +I: polimetria, +F: polymétrie, +D: Polymetrie, NL: ?, DK: ?, S: ?, @@ -6362,7 +6272,7 @@ parts. @item The @emph{successive} use of different meters in one or more parts. -@end itemize +@end itemize @seealso @ref{polymetric} (adj.) @@ -6372,9 +6282,9 @@ parts. @section polymetric ES: polimétrico, -I: ?, -F: ?, -D: ?, +I: polimetrico, +F: polymétrique, +D: polymetrisch, NL: ?, DK: ?, S: ?, @@ -6390,10 +6300,10 @@ simultaneously or in alternation. @node polymetric time signature @section polymetric time signature -ES: compás polimétrico, -I: ?, +ES: indicación de compás polimétrico, +I: tempo polimetrico, F: ?, -D: ?, +D: zusammengesetzte Taktart, NL: ?, DK: ?, S: ?, @@ -6430,19 +6340,28 @@ of a more or less pronounced individuality. [Italian: past participle of @emph{portare}, @q{to carry}] A stroke in which each of several notes is separated slightly within a slur, -without changing the bow's direction. It is used for passages of a +without changing the bow's direction. It is used for passages of a @notation{cantabile} character. @seealso @ref{legato}. +@node power chord +@section power chord + +A chord containing only the root and the fifth (possibly in multiple +octaves). Commonly used in guitar music, particularly with electric +guitar and high distortion. + +@seealso +@ref{chord}. @node presto @section presto -ES: presto, +ES: presto, muy rápido, I: presto, -F: presto, +F: presto, très rapide, enlevé, D: Presto, Sehr schnell, NL: presto, Sehr schnell, DK: presto, @@ -6462,9 +6381,9 @@ No cross-references. @section proportion ES: proporción, -I: proprozione (?), +I: proporzione, F: proportion, -D: ?, +D: Proportio, NL: ?, DK: ?, S: ?, @@ -6540,7 +6459,7 @@ called @emph{subdupla}. Examples: 2:1, 4:2, and 6:3. @item If three, @emph{tripla}; and its inversion, @emph{subtripla}. Example: 3:1, 6:2, and 9:3. -@item If four, @emph{quadrupla}; and its inversion, @emph{subquadrupla}. +@item If four, @emph{quadrupla}; and its inversion, @emph{subquadrupla}. Example: 4:1, 8:2, and 12:3 @end itemize @@ -6605,10 +6524,10 @@ FI: kvartoli. @node quality @section quality -ES: ?, +ES: variante [de acorde o intervalo], I: qualità (?), F: qualité (?), -D: ?, +D: Modus (Dur oder Moll), NL: ?, DK: ?, S: ?, @@ -6618,7 +6537,7 @@ The quality of a triad is determined by the precise arrangement of its intervals. Tertian triads can be described as a series of three notes. The first element is the root note (or simply @q{root}) of the chord, the second note is the @q{third} of the chord, and the last note is the @q{fifth} of -the chord. These are described below: +the chord. These are described below: @multitable {Chord name} {Component intervals} {Example} {C, CM, Cma, Cmaj, CΔ} @headitem Chord name @@ -6642,9 +6561,9 @@ the chord. These are described below: There are various types of seventh chords depending on the quality of the original chord and the quality of the seventh added. -Five common types of seventh chords have standard symbols. The chord quality +Five common types of seventh chords have standard symbols. The chord quality indications are sometimes superscripted and sometimes not (e.g. Dm7, Dm^7, -and D^m7 are all identical). The last three chords are not commonly used +and D^m7 are all identical). The last three chords are not commonly used except in jazz. @seealso @@ -6692,8 +6611,8 @@ except in jazz. @node quarter tone @section quarter tone -ES: cuarto de tonno, -I: ?, +ES: cuarto de tono, +I: quarto di tono, F: quart de ton, D: Viertelton, NL: kwart toon, @@ -6710,7 +6629,7 @@ An interval equal to half a semitone. @node quintuplet @section quintuplet -ES: cinquillo, quintillo. +ES: cinquillo, quintillo, I: quintina, F: quintolet, D: Quintole, @@ -6728,14 +6647,14 @@ FI: kvintoli. ES: rallentando, I: rallentando, -F: rallentando, +F: rallentando, en ralentissant, D: rallentando, langsamer werden, NL: rallentando, DK: rallentando, S: rallentando, FI: rallerdando, hidastuen. -[Italian] A performance indication, abbreviated "rall.". +[Italian] A performance indication, abbreviated @notation{rall.} @seealso @ref{ritardando}. @@ -6775,7 +6694,7 @@ c1_"c minor" d es f g a! b! c @section repeat ES: repetición, -I: ritornello, +I: ripetizione, F: barre de reprise, D: Wiederholung, NL: herhaling, @@ -6832,9 +6751,9 @@ FI: rytmi. @itemize @item Metrical rhythm in which every time value is a multiple or -fraction of a fixed unit of time, called @ref{beat}, and in which the -normal @ref{accent} recurs in regular intervals, called @ref{measure}. -The basic scheme of time values is called @ref{meter}. +fraction of a fixed unit of time, called @emph{beat}, and in which the +normal @emph{accent} recurs in regular intervals, called @emph{measure}. +The basic scheme of time values is called @emph{meter}. @item Measured rhythm which lacks regularly recurrent accent. In modern notation such music appears as a free alternation of different @@ -6846,22 +6765,23 @@ metrical unit (beat). @end itemize @seealso -No cross-references. +@ref{accent}, @ref{beat}, @ref{measure}, @ref{meter}. @node ritardando @section ritardando -ES: ritardando, +ES: ritardando, retardando, I: ritardando, -F: ritardando, +F: ritardando, en ralentissant, D: ritardando, langsamer werden, NL: ritardando, DK: ritardando, S: ritardando, FI: ritardando, hidastuen, -Gradually slackening in speed. Mostly abbreviated to rit.@: or ritard. +Gradually slackening in speed. Mostly abbreviated to @notation{rit.} or +@notation{ritard}. @seealso No cross-references. @@ -6870,9 +6790,9 @@ No cross-references. @node ritenuto @section ritenuto -ES: ritenuto, +ES: ritenuto, reteniendo, I: ritenuto, -F: ritenuto, +F: ritenuto, en retenant, D: ritenuto, NL: ritenuto, DK: ritenuto, @@ -6978,7 +6898,7 @@ No cross-references. ES: partitura, I: partitura, -F: partition, +F: partition, conducteur (full score), D: Partitur (full score), Klavierauszug (vocal score), NL: partituur, DK: partitur, @@ -6997,7 +6917,7 @@ No cross-references. @section second ES: segunda, -I: secunda, +I: seconda, F: seconde, D: Sekunde, NL: secunde, @@ -7021,7 +6941,7 @@ second depends on the scale degrees in question. @item ES: redonda, @item I: semibreve, @item F: ronde, -@item D: Ganze, ganze Note, +@item D: Ganze, ganze Note, Semibrevis, @item NL: hele noot, @item DK: helnode, @item S: helnot, @@ -7127,10 +7047,10 @@ FI: korotusmerkki. @node simile @section simile -ES: simile, +ES: simile, similar, I: simile, -F: ?, -D: ?, +F: simile, +D: simile, gleichartig, NL: ?, DK: ?, S: ?, @@ -7149,8 +7069,8 @@ TODO: Where else could I refer the reader? ES: compás simple, compás de subdivisión binaria, I: ?, -F: ?, -D: ?, +F: mesure binaire, +D: grader Takt, NL: ?, DK: ?, S: ?, @@ -7265,8 +7185,8 @@ FI: seksti. @node slur @section slur -ES: ligadura (de expresión), -I: legatura (di portamento or espressiva), +ES: ligadura de expresión, +I: legatura (di portamento o espressiva), F: liaison, coulé, D: Bogen (Legatobogen, Phrasierungsbogen), NL: fraseringsboog, legatoboog, streekboog, @@ -7317,7 +7237,7 @@ FI: sonaatti. In its present-day meaning a sonata denotes an instrumental composition for piano or for some other instrument with piano -accompaniment, which consists of three or four independant pieces, +accompaniment, which consists of three or four independent pieces, called movements. @seealso @@ -7411,7 +7331,7 @@ No cross-references. @section staff UK: stave, -ES: pentagrama, +ES: pentagrama, pauta, I: pentagramma, rigo (musicale), F: portée, D: Notensystem, Notenzeile, @@ -7425,8 +7345,12 @@ lines upon and between which the musical notes are written, thus indicating (in connection with a @ref{clef}) their pitch. Staves for @ref{percussion} instruments may have fewer lines. +@lilypond[quote,relative=1] +c4 e g c +@end lilypond + @seealso -No cross-references. +@ref{system}. @node staves @@ -7441,7 +7365,7 @@ No cross-references. ES: plica, I: gamba, -F: queue, +F: hampe, D: Hals, Notenhals, Stiel, NL: stok, DK: hals, @@ -7466,10 +7390,10 @@ whole note. @node stringendo @section stringendo -ES: ?, +ES: stringendo, acelerando, I: stringendo, -F: ?, -D: ?, +F: stringendo, en accélérant, +D: stringendo, NL: ?, DK: ?, S: ?, @@ -7540,7 +7464,7 @@ The fourth @notation{scale degree}. @section submediant ES: submediante, -I: sopratonica, +I: sopradominante, F: sous-médiante, D: Submediante, NL: submediant, @@ -7576,7 +7500,7 @@ The seventh @ref{scale degree}. @section sul G ES: sobre la cuerda de Sol, -I: sul g, +I: sul Sol, F: sur la G, D: auf G, auf der G-Saite, NL: ?, @@ -7603,7 +7527,7 @@ DK: superdominant, S: superdominant, FI: ylidominantti. -The sixth @ref{scale degree}. +The sixth @ref{scale degree}. Equivalent to the submediant, q.v. @seealso @ref{functional harmony}, @ref{scale degree}, @ref{submediant}. @@ -7645,7 +7569,6 @@ A symphony may be defined as a @emph{sonata} for orchestra. @ref{sonata}. - @node syncopation @section syncopation @@ -7707,16 +7630,17 @@ This comma is also known as the comma of Didymus, or didymic comma. @section system ES: sistema, -I: accollatura, +I: sistema, F: système, D: Notensystem, Partitur, NL: systeem, DK: system, S: system, -FI: nuottijärjestelmä. +FI: nuottiviivasto. -The collection of staves (@notation{staff}), two or more, as used for writing -down of keyboard, chamber, choral, or orchestral music. +The collection of staves (@notation{staff}), two or more, as used +for writing down keyboard, chamber, choral, or orchestral music; +a section of the score spanning the width of a single page. @seealso @ref{staff}. @@ -7835,7 +7759,7 @@ FI: terssi. @node thirty-second note @section thirty-second note -@itemize +@itemize @item UK: demisemiquaver @item ES: fusa @item I: biscroma @@ -7880,9 +7804,9 @@ FI: terssi. @node tie @section tie -ES: ligadura de prolongación, ligadura de unión, +ES: ligadura de unión (o de prolongación), I: legatura (di valore), -F: liaison, +F: liaison (de tenue), D: Haltebogen, Bindebogen, NL: overbinding, bindingsboog, DK: bindebue, @@ -7911,7 +7835,7 @@ g2 ~ g4. r8 ES: indicación de compás, I: segni di tempo, -F: chiffrage (chiffres indicateurs), signe de valeur, indication de mesure, +F: métrique, chiffrage (chiffres indicateurs), indication de mesure, D: Taktangabe, Angabe der Taktart, NL: maatsoort, DK: taktangivelse, @@ -7931,7 +7855,7 @@ derived from mensural notation and proportions are also employed. ES: tono, I: suono, -F: ton, +F: ton, son, D: Ton, NL: toon, DK: tone, @@ -7969,9 +7893,9 @@ The first @notation{scale degree}. @section transposing instrument ES: instrumento transpositor, -I: ?, -F: ?, -D: ?, +I: strumento traspositore, +F: instrument transpositeur, +D: transponierende Instrumente, NL: ?, DK: ?, S: ?, @@ -7991,12 +7915,20 @@ note sounds the A (one and half tones -- a minor third -- lower). Not all transposing instruments include the pitch class in their name: @itemize - +@item Alto flute (in G) @item English horn (in F) +@item Saxophones (in B-flat or E-flat) +@end itemize -@item Alto flute (in G) +@ignore Can we do better? -@end itemize +To make matters more complex, some instruments are transposing instruments, +but their players play from parts written at concert pitch. This is the +case for orchestral trombone and tuba players—whereas trombone players in +brass bands treat their parts as if written for a true transposing +instrument in B-flat. + +@end ignore @seealso @ref{concert pitch}. @@ -8005,7 +7937,7 @@ Not all transposing instruments include the pitch class in their name: @node transposition @section transposition -ES: transporte, +ES: transporte, transposición, I: trasposizione, F: transposition, D: Transposition, @@ -8044,7 +7976,7 @@ No cross-references. @node treble clef @section treble clef -ES: clave de sol, +ES: clave de sol en segunda, I: chiave di violino, F: clef de sol, D: Violinschlüssel, Sopranschlüssel, @@ -8129,7 +8061,7 @@ FI: trilli. ES: compás ternario, I: tempo ternario, F: mesure ternaire, -D: in drei, ungerader Takt, +D: Dreiertakt, ungerader Takt, NL: driedelige maatsoort, DK: tredelt takt, S: tretakt, @@ -8174,14 +8106,14 @@ FI: tritonus. @node tuning fork @section tuning fork -ES: diapasón, horquilla de afinación, +ES: diapasón [de horquilla], I: diapason, corista, F: diapason, D: Stimmgabel, NL: stemvork, DK: stemmegaffel, S: stämgaffel, -FI: viritysavain. +FI: viritysavain, äänirauta. A two-pronged piece of steel used to indicate an absolute pitch, usually for @emph{A} above middle C (440 cps/Hz), which is the international tuning @@ -8194,6 +8126,15 @@ standard. Tuning forks for other pitches are available. @node tuplet @section tuplet +ES: grupo de valoración especial, +I: gruppi irregolari, +F: ?, +D: N-tole, +NL: Antimetrische figuur, +DK: ?, +S: ?, +FI: ?. + A non-standard subdivision of a beat or part of a beat, usually indicated with a bracket and a number indicating the number of subdivisions. @@ -8292,8 +8233,8 @@ No cross-references. ES: vez, primera y segunda vez, I: volta, -F: ?, -D: ?, +F: volta, fois, +D: volta-Klammer, Wiederholungsklammer, NL: ?, DK: ?, S: ?, @@ -8552,13 +8493,13 @@ No cross-references. @end multitable -* About the French naming system: @emph{croche} refers to the note's "hook". -Therefore, from the eighth note on, the note names mean @q{hook}, @q{doubled -hook}, @q{trebled hook}, and so on. +* About the French naming system: @notation{croche} refers to the note's +@q{hook}. Therefore, from the eighth note on, the note names mean @q{hook}, +@q{doubled hook}, @q{trebled hook}, and so on. -The rest names are based on the @emph{soupir}, or quarter rest. Subsequent -rests are expressed as fractions thereof: half a @emph{soupir}, a quarter of -a @emph{soupir}, and so on. +The rest names are based on the @notation{soupir}, or quarter rest. +Subsequent rests are expressed as fractions thereof: half a +@notation{soupir}, a quarter of a @notation{soupir}, and so on. Each of the following tables contains one type of note and its matching rest, with abbreviations that apply to both notes and rests. Just switch the part @@ -8572,9 +8513,9 @@ that means @q{note} with the part that means @q{rest}, for example: @end itemize -I put a dash @q{-} when I could not find a language-specific abbreviation for a -duration name. If you know of one that I missed, please send it to me, care of -the lilypond-user discussion list. +Editor's note: I put a dash @q{-} when I could not find a language-specific +abbreviation for a duration name. If you know of one that I missed, please +send it to me, care of the lilypond-user discussion list. @multitable @columnfractions .10 .35 .35 .20 @@ -8768,64 +8709,189 @@ the lilypond-user discussion list. @node Pitch names @chapter Pitch names -@c -is/-es endings for Danish per Rune Zedeler, pace -@c and for Finnish per Risto Vääräniemi -@c -iss/-ess endings for Swedish per Mats Bengtsson -@c @columnfractions .105 .145 .125 .125 .125 .125 .125 .125 --> +@ignore + -is/-es endings for Danish per Rune Zedeler, pace, + and for Finnish per Risto Vääräniemi; + -iss/-ess endings for Swedish per Mats Bengtsson + originally spaced with @columnfractions .105 .145 .125 .125 .125 .125 .125 .125 + + NOTE: Please leave the first line as-is -- that is, do not wrap it to + multiple lines -- as texinfo needs it to allow enough space for the + table entries. (For the curious, it's a list of the widest items in + each column of the table. Romance pitch names are two characters, + except for g (sol) ... so there you go.) +@end ignore @multitable {g-sharp} {sol sostenido} {sol diesis} {sol dièse} {Gis} {gis} {gis} {giss} {gis} -@headitem EN - @tab ES @tab I @tab F @tab D - @tab NL @tab DK @tab S @tab FI -@item @strong{c} @tab do @tab do @tab ut @tab C - @tab c @tab c @tab c @tab c -@item @strong{c-sharp} @tab do sostenido @tab do diesis @tab ut dièse @tab Cis - @tab cis @tab cis @tab ciss @tab cis +@headitem EN @tab ES @tab I @tab F @tab D @tab NL @tab DK @tab S @tab FI +@item @strong{c} @tab do @tab do @tab ut @tab C @tab c @tab c @tab c @tab c +@item @strong{c-sharp} @tab do sostenido @tab do diesis @tab ut dièse + @tab Cis @tab cis @tab cis @tab ciss @tab cis @item @strong{d-flat} @tab re bemol @tab re bemolle @tab ré bémol @tab Des @tab des @tab des @tab dess @tab des -@item @strong{d} @tab re @tab re @tab ré @tab D - @tab d @tab d @tab d @tab d +@item @strong{d} @tab re @tab re @tab ré @tab D @tab d @tab d @tab d @tab d @item @strong{d-sharp} @tab re sostenido @tab re diesis @tab re dièse @tab Dis @tab dis @tab dis @tab diss @tab dis @item @strong{e-flat} @tab mi bemol @tab mi bemolle @tab mi bémol @tab Es @tab es @tab es @tab ess @tab es -@item @strong{e} @tab mi @tab mi @tab mi @tab E - @tab e @tab e @tab e @tab e -@item @strong{f-flat} = e - @tab fa bemol @tab fa bemolle @tab fa bémol @tab Fes - @tab fes @tab fes @tab fess @tab fes -@item @strong{f} @tab fa @tab fa @tab fa @tab F - @tab f @tab f @tab f @tab f -@item @strong{e-sharp} = f - @tab mi sostenido @tab mi diesis @tab mi dièse @tab Eis - @tab eis @tab eis @tab eiss @tab eis +@item @strong{e} @tab mi @tab mi @tab mi @tab E @tab e @tab e @tab e @tab e +@item @strong{f-flat} = e @tab fa bemol @tab fa bemolle @tab fa bémol + @tab Fes @tab fes @tab fes @tab fess @tab fes +@item @strong{f} @tab fa @tab fa @tab fa @tab F @tab f @tab f @tab f @tab f +@item @strong{e-sharp} = f @tab mi sostenido @tab mi diesis @tab mi dièse + @tab Eis @tab eis @tab eis @tab eiss @tab eis @item @strong{f-sharp} @tab fa sostenido @tab fa diesis @tab fa dièse @tab Fis @tab fis @tab fis @tab fiss @tab fis @item @strong{g-flat} @tab sol bemol @tab sol bemolle @tab sol bémol @tab Ges @tab ges @tab ges @tab gess @tab ges -@item @strong{g} @tab sol @tab sol @tab sol @tab G - @tab g @tab g @tab g @tab g -@item @strong{g-sharp} @tab sol sostenido @tab sol diesis @tab sol dièse @tab Gis - @tab gis @tab gis @tab giss @tab gis +@item @strong{g} @tab sol @tab sol @tab sol @tab G @tab g @tab g @tab g @tab g +@item @strong{g-sharp} @tab sol sostenido @tab sol diesis @tab sol dièse + @tab Gis @tab gis @tab gis @tab giss @tab gis @item @strong{a-flat} @tab la bemol @tab la bemolle @tab la bémol @tab As @tab as @tab as @tab ass @tab as -@item @strong{a} @tab la @tab la @tab la @tab A - @tab a @tab a @tab a @tab a +@item @strong{a} @tab la @tab la @tab la @tab A @tab a @tab a @tab a @tab a @item @strong{a-sharp} @tab la sostenido @tab la diesis @tab la dièse @tab Ais @tab ais @tab ais @tab aiss @tab ais @item @strong{b-flat} @tab si bemol @tab si bemolle @tab si bémol @tab B @tab bes @tab b @tab b @tab b -@item @strong{b} @tab si @tab si @tab si @tab H - @tab b @tab h @tab h @tab h +@item @strong{b} @tab si @tab si @tab si @tab H @tab b @tab h @tab h @tab h +@item @strong{c-flat} = b @tab do bemol @tab do bemolle @tab ut bémol @tab Ces + @tab ces @tab ces @tab cess @tab ces +@item @strong{b-sharp} = c @tab si sostenido @tab si diesis @tab si dièse + @tab His @tab bis @tab his @tab hiss @tab his @end multitable +@node Non-Western terms A-Z +@chapter Non-Western terms A-Z + @menu -* Literature used:: +* bayati:: +* iraq:: +* kurd:: +* makam:: +* makamlar:: +* maqam:: +* rast:: +* semai:: +* sikah:: +* taqasim:: @end menu + +@node bayati +@section bayati + +@c TODO +This is a stub for @code{bayati}. + +@seealso +Notation Reference: +@ruser{Arabic key signatures}. + + +@node iraq +@section iraq + +@c TODO +This is a stub for @code{iraq}. + +@seealso +Notation Reference: +@ruser{Arabic key signatures}. + + +@node kurd +@section kurd + +@c TODO +This is a stub for @code{kurd}. + +@seealso +Notation Reference: +@ruser{Arabic key signatures}. + + +@node makam +@section makam + +@c TODO +This is a stub for @code{makam}. + +@seealso +Notation Reference: +@ruser{Turkish classical music}. + + +@node makamlar +@section makamlar + +@c TODO +This is a stub for @code{makamlar}. + +@seealso +Notation Reference: +@ruser{Turkish classical music}. + + +@node maqam +@section maqam + +@c TODO +This is a stub for @code{maqam}. + +@seealso +Notation Reference: +@ruser{Arabic music}, +@ruser{Arabic key signatures}. + + +@node rast +@section rast + +@c TODO +This is a stub for @code{rast}. + +@seealso +Notation Reference: +@ruser{Arabic key signatures}. + + +@node semai +@section semai + +@c TODO +This is a stub for @code{semai}. + +@seealso +Notation Reference: +@ruser{Arabic key signatures}. + + +@node sikah +@section sikah + +@c TODO +This is a stub for @code{sikah}. + +@seealso +Notation Reference: +@ruser{Arabic key signatures}. + + +@node taqasim +@section taqasim + +@c TODO +This is a stub for @code{taqasim}. + +@seealso +Notation Reference: +@ruser{Arabic key signatures}. + + @node Literature used -@unnumberedsec Literature used +@appendix Literature used @itemize @item Apel, Willi, ed. @cite{The Harvard Dictionary of Music}. @@ -8847,7 +8913,10 @@ Springfield, Massachusetts: G. & C. Merriam Company, 1913. Cambridge: Belknap Press (Harvard University Press), 1986. @item Riemann, Hugo. @cite{Musik-lexicon}. Berlin, 1929. - @end itemize + +@include fdl.itexi + + @bye diff --git a/Documentation/nl/GNUmakefile b/Documentation/nl/GNUmakefile new file mode 100644 index 0000000000..8f0d832563 --- /dev/null +++ b/Documentation/nl/GNUmakefile @@ -0,0 +1,18 @@ +ISOLANG = nl +depth = ../.. +SUBDIRS = included web learning texidocs +STEPMAKE_TEMPLATES = documentation +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root +NO_PDF_FILES = 1 + +EXTRA_DIST_FILES = web.texi + +include $(depth)/make/stepmake.make + +check-xrefs: + # This is still clumsy, as check_texi_ref.py does not handle + # an untranslated @ref{Tutorial} (used in an untranslated + # file) to the translated @node Leerboek + $(PYTHON) $(auxscript-dir)/check_texi_refs.py --batch \ + $(DOCUMENTS_INCLUDES) -I $(top-src-dir)/Documentation \ + $(auxpython-dir)/manuals_definitions.py diff --git a/Documentation/nl/included/GNUmakefile b/Documentation/nl/included/GNUmakefile new file mode 100644 index 0000000000..afe7a4d738 --- /dev/null +++ b/Documentation/nl/included/GNUmakefile @@ -0,0 +1,10 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation + +EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) +EXTRA_DIST_FILES+=$(call src-wildcard,*.ily) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi) +EXTRA_DIST_FILES+=$(call src-wildcard,*.itely) + +include $(depth)/make/stepmake.make diff --git a/Documentation/nl/included/generating-output.itexi b/Documentation/nl/included/generating-output.itexi new file mode 100644 index 0000000000..1259b05c7c --- /dev/null +++ b/Documentation/nl/included/generating-output.itexi @@ -0,0 +1,255 @@ +@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*- +@ignore + Translation of GIT committish: b275aa092642adb798079f7853309e2f5e4383ce + + 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 Translator: Jan Nieuwenhuizen +@c Translation checker: +@c Translation checker committish: + +@c This file is part of web/download.itexi and +@c learning/tutorial.itely + +@c This is about "compiling" a lilypond file +@c (Learning 1 Tutorial), **not** compiling the +@c source code. + +@macro lilypadOSX +@warning{Deze instructies veronderstellen dat je de de +LilyPond applicate gebruikt. Als je een van de andere +programma's gebruikt die beschreven staan in +@rweb{Eenvoudiger bewerken}, raadpleeg dan de documentatie +voor dat programma als je problemen hebt.} + + +@subsubheading Stap 1. Maak je @file{.ly}-bestand + +Dubbelklik de @command{LilyPond.app}, een voorbeeldbestand +wordt geopend. + +@sourceimage{Learning_Macos_welcome,,,} + +Uit de menu's links bovenaan je scherm, kies +@w{@code{Bestand > Opslaan}}. + +@sourceimage{Learning_Macos_Save_menu,,,} + +Kies een naam voor je bestand, bijvoorbeeld @file{test.ly}. + +@sourceimage{Learning_Macos_Save_file_with_name,,,} + + +@subsubheading Stapp 2. Compileer (met LilyPad) + +Uit dezelfde menu's, kies +@w{@code{Compile > Tyepset}}. + +@sourceimage{Learning_Macos_Typeset_menu,,,} + +Een nieuw venster opent en toont een voortgangslog van de +compilatie van het bestand dat je zojuist hebt opgeslagen. + +@sourceimage{Learning_Macos_Compiling_log,,,} + + +@subsubheading Stap 3. Bekijk de uitvoer + +Zodra de compilatie klaar is, wordt een PDF-bestand gemaakt +met dezelfde naam als het originele bestand en dat wordt +automatisch geopend in de standaard PDF-viewer en op je +scherm getoond. + +@sourceimage{Learning_Macos_pdf_output,,,} + + +@subsubheading Andere commando's + +@c FIXME: is lilypad vertaald in het nederlands, of is dit File > New? +Een nieuw LilyPond bestand maken, doe je door het kiezen van +@w{@code{Bestand > Nieuw}} + +@sourceimage{Learning_Macos_New_menu,,,} + +@c FIXME: is lilypad vertaald in het nederlands, of is dit +@c File > Open? +of je opent met @w{@code{Bestand > Openen}} een bestaand bestand +om te bewerken. + +@sourceimage{Learning_Macos_Open_menu,,,} + +@c FIXME: is lilypad vertaald in het nederlands, hoe heet Compile > Typeset? +Als je een bestand bewerkt hebt, moet je het eerst opslaan +voordat je @w{@code{Compile > Typeset}} doet en als het +PDF-bestand niet wordt getoond, controleer dan het venster +met de voortgangslog op foutmeldingen. + +@c FIXME: hoe heet Preview in de nederlandse osx? +Als je geen gebruik maakt van de standaard Preview PDF-viewer die +onderdeel is van het Mac Operating systeem en je hebt het PDF-bestand +van een vorige compilatie nog open staan, dan kan het zijn dan +alle volgende compileerpogingen niet slagen in het genereren van +een nieuwe PDF totdat je het originele venster sluit. + + +@end macro + + +@macro lilypadWindows +@warning{Deze instructies veronderstellen dat je gebruik +maakt van de ingebouwde LilyPad-editor. Als je een van de +andere programma's gebruikt die beschreven staan in +@rweb{Eenvoudiger bewerken}, raadpleeg dan de documentatie +voor dat programma als je problemen hebt met het compileren +van een bestand.} + + +@subsubheading Stap 1. Maak je @file{.ly}-bestand + +Dubbelklik het LilyPond ikoon op je Bureaublad, een +voorbeeldbestand wordt geopend. + +@sourceimage{Learning_Win7_Welcome_File_Whole,,,} + +Kies uit de menu's bovenaan het voorbeeldbestand +@w{@code{Bestand > Opslaan als}}. De optie @w{@code{Bestand +> Opslaan}} kun je voor dit voorbeeldbestand niet gebruiken +als je het nog geen geldige LilyPond-naam hebt gegeven. + +@sourceimage{Learning_Win7_Save_Menu,,,} + +Kies een naam voor je bestand, bijvoorbeeld @file{test.ly}. + +@sourceimage{Learning_Win7_Save_File_With_Name,,,} + + +@subsubheading Stap 2a. Compileer (door slepen en neerzetten - drag and drop) + +Afhankelijk van wat je voorkeur heeft, compileer je je +bestand door ofwel: + +te slepen en neer te zetten bovenop het LilyPond ikoon, +ofwel + +@sourceimage{Learning_Win7_Open_Dragndrop,,,} + +met de tweede muisknop op het bestand te klikken en uit het +popup-contextmenu @w{@code{Open met > LilyPond}} te kiezen. + +@sourceimage{Learning_Win7_Open_Context_Menu,,,} + +@c FIXME: why present/advise the best/simplest for last? +@subsubheading Stap 2b. Compileer (door te dubbelklikken) + +Of dubbelklik het @file{test.ly} bestand. + + +@subsubheading Stap 3. Bekijk de uitvoer + +Tijdens het compileren van het @file{test.ly} bestand, wordt +een commandovenster geopend dat zich na korte tijd weer +sluit. Tijdens dit proces worden drie extra bestanden +aangemaakt. + +@sourceimage{Learning_Win7_All_Files_Created,,,} + +Het PDF-bestand bevat het gegraveerde @file{test.ly} bestand. + +@sourceimage{Learning_Win7_Pdf_Output,,,} + + +@subsubheading Andere commando's + +Om een nieuw bestand te maken, kies @w{@code{Bestand > Nieuw}} vanuit +een eerder gemaakt bestand. + +@sourceimage{Learning_Win7_New_Menu,,,} + +@noindent +of gebruik @w{@code{Bestand > Openen}} om een eerder gemaakt +bestand te openen en te bewerken. + +@sourceimage{Learning_Win7_Open_Menu,,,} + +Als je een bestand bewerkt hebt, moet je het eerst opslaan +voordat je het compileert en als het PDF-bestand niet wordt +aangemaakt, controleer dan het venster met de voortgangslog +op foutmeldingen. + +@sourceimage{Learning_Win7_Log_File,,,} + +Dit logbestand wordt elke keer overschreven als je je +LilyPond-bestand compileert. + +Het PS-bestand wordt LilyPond intern gebruikt als tussenstap +om het PDF-bestand aan te maken, je kunt het verder negeren. +Dit bestand wordt ook elke keer overschreven als je je +LilyPond-bestand compileert. + +Als je je bestand bekijkt met een PDF-viewer, dan moet je de +PDF sluiten als je een nieuwe compilatie wilt doen omdat het +genereren van een nieuwe PDF kan mislukken zolang je de oude +nog aan het bekijken bent. + + +@end macro + + +@c not lilypad at all, but I ran out of names. :( +@macro lilypadCommandLine +@warning{Deze instructies veronderstellen dat je vertrouwd +bent met het gebruik van de commandoregel. Als je een van +de andere programma's gebruikt die beschreven staan in +@rweb{Eenvoudiger bewerken}, raadpleeg dan de documentatie +voor dat programma als je problemen hebt met het compileren +van een bestand.} + + +@subsubheading Stap 1. Maak je @file{.ly}-bestand + +Maak een tekstbestand met de naam @file{test.ly} en vul het met: + +@c double \\ required because this is inside a macro! +@example +\\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + + +@subsubheading Stap 2. Compileren (op de commandoregel) + +Om het @file{test.ly}-bestand te compileren, typ op de +commandoregel: + +@example +lilypond test.ly +@end example + +@noindent +Je ziet dan iets dat lijkt op: + +@example +GNU LilyPond @w{@version{}} +Verwerken van `test.ly' +Ontleden... +Vertolken van muziek... +Voorbewerken van grafische objecten... +Berekenen van 1 pagina-afbreek brokken...[1: 1 pagina's] +Tekenen van systemen... +Opmaakuitvoer naar `test.ps'... +Converteren naar `./test.pdf'... +@end example + +@subsubheading Stap 3. Bekijk de uitvoer + +Je kunt het resulterende @file{test.pdf}-bestand bekijken of +printen. + +@end macro + + diff --git a/Documentation/nl/learning.tely b/Documentation/nl/learning.tely new file mode 100644 index 0000000000..89eb6e8670 --- /dev/null +++ b/Documentation/nl/learning.tely @@ -0,0 +1,92 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: f0968c08c70e954c1d928feadf94006504ac4de1 + + 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 Translation status: post-GDP + +@c Translator: Jan Nieuwenhuizen +@c Translation checker: +@c Translation checker committish: + +@setfilename lilypond-learning.info +@settitle LilyPond beginnershandleiding +@documentencoding UTF-8 +@documentlanguage nl +@afourpaper + +@macro manualIntro +This file provides an introduction to LilyPond version +@version{}. +@end macro + +@c `Learning Manual' was born 1999-10-10 with git commit b9abaac... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 door de auteurs. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Learning Manual of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage Nederlands +@end ignore + + +@lilyTitlePage{Beginnershandleiding} + +@c TOC -- non-tex +@ifnottex + +@menu +* Leerboek:: De basis van muzieknotatie met LilyPond. +* Algemene muzieknotatie:: Het schrijven van algemene muzieknotatie. +* Fundamentele concepten:: Basisconcepten van belang voor het begrijpen van het vervolg van de handleiding. +@c * Uitvoerverfijningen:: Inleiding in het verfijnen van de uitvoer. +* Tweaking output:: Inleiding in het verfijnen van de uitvoer. + +Appendices + +* Templates:: Pasklare sjablonen. +@c * Sjablonen:: Pasklare sjablonen. +* GNU Free Documentation License:: Licentie van dit document. +* LilyPond register:: Register. +@end menu + +@docMain +@end ifnottex + + +@c TOC - tex +@contents + +@allowcodebreaks false + +@c INCLUDES + +@include learning/tutorial.itely +@include learning/common-notation.itely +@include learning/fundamental.itely +@include learning/tweaks.itely + +@include learning/templates.itely +@include fdl.itexi + + +@node LilyPond register +@appendix LilyPond register +@translationof LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/nl/learning/GNUmakefile b/Documentation/nl/learning/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/nl/learning/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/nl/learning/common-notation.itely b/Documentation/nl/learning/common-notation.itely new file mode 100644 index 0000000000..d12808b24f --- /dev/null +++ b/Documentation/nl/learning/common-notation.itely @@ -0,0 +1,1552 @@ +@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*- + +@ignore + Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8 + + 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 Translator: Jan Nieuwenhuizen +@c Translation checker: +@c Translation checker committish: + +@c \version "2.14.0" + +@ignore +Tutorial guidelines: (different from policy.txt!) +- unless you have a really good reason, use either + @lilypond[verbatim,quote] + or + @lilypond[verbatim,quote,relative=2] + + Don't use any other relative=X commands. + +- use "aes" and "ees" instead of "as" and "es". I know it's not + correct Dutch naming, but let's not confuse people with this + until we get to the Basic notation chapter. + +- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant + portions of the tutorial. + +@end ignore + + +@node Algemene muzieknotatie +@translationof Common notation +@chapter Algemene muzieknotatie + +In dit hoofdstuk wordt uitgelegd hoe je prachtig geprinte +muziek maakt met algemene muzieknotatie; dit is het vervolg +op het materiaal in het @ref{Leerboek}. + +@menu +* Notatie voor een enkele notenbalk:: +* Verschillende noten tegelijk klinkend:: +* Vocale muziek:: +* De puntjes op de i's:: +@end menu + + +@node Notatie voor een enkele notenbalk +@translationof Single staff notation +@section Notatie voor een enkele notenbalk + +Deze paragraaf introduceert algemene muzieknotatie gebruikt +voor een enkelvoudige melodie op één notenbalk. + +@menu +* Maat-controles:: +* Verplaatsingstekens en toonsoorten:: +* Overbindingen en legatobogen:: +* Articulatie en dynamiek:: +* Tekst toevoegen:: +* Automatische en handmatige waardestrepen:: +* Geavanceerde ritmische commando's:: +@end menu + + +@node Maat-controles +@subsection Maat-controles +@translationof Bar checks + +Alhoewel ze niet strikt noodzakelijk zijn, zouden +@emph{maat-controles} gebruikt moeten worden in de +invoer-code om aan te geven waar de maatstrepen verwacht +worden. Ze worden ingevoerd met het vertikale +streep-symbool, @code{|}. Met behulp van deze +maat-controles kan het programma nagaan, door de nootlengten +die je ingevoerd hebt op te tellen, dat alle maten precies +gevuld zijn. Maat-controles maken de invoer-code eenvoudiger +te lezen, omdat ze helpen deze opgeruimd te houden. + +@lilypond[verbatim,quote,relative=2] +g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 | +@end lilypond + +@seealso +Notatiehandleiding: +@ruser{Bar and bar number checks}. + + +@node Verplaatsingstekens en toonsoorten +@translationof Accidentals and key signatures +@subsection Verplaatsingstekens en toonsoorten + +@warning{Voor nieuwe gebruikers kan dit soms verwarrend zijn +-- lees de waarschuwing onderaan deze pagina, vooral als je +niet zo vertrouwd bent met muziektheorie!} + +@subheading Verplaatsingstekens + +@cindex verplaatsingstekens +@cindex toevallige tekens en toonsoorten +@cindex kruis +@cindex dubbelkruis +@cindex kruis, dubbel +@cindex mol +@cindex dubbelmol +@cindex mol, dubbel + +@funindex es +@funindex is +@funindex eses +@funindex isis + +Terminologie: @rglos{sharp}, @rglos{flat}, @rglos{double +sharp}, @rglos{double flat}, @rglos{accidental}. + +Een noot met een @notation{kruis} maak je door @code{is} +achter de naam te plakken, en een noot met een +@notation{mol} maak je door er @code{es} achter te plakken. +Zoals je zou kunnen verwachten, een @notation{dubbelkruis} +of @notation{dubbelmol} wordt gemaakt door het toevoegen van +@code{isis} of @code{eses}. Deze syntax is afgeleid van de +Noordse en Germaanse talen zoals het Duits en het +Nederlands. Om andere namen te gebruiken voor +@notation{verplaatsingstekens}, zie @ruser{Note names in +other languages}. + +@lilypond[verbatim,quote,relative=2] +cis4 ees fisis, aeses +@end lilypond + +@cindex toonsoort, zetten van +@subheading Toonsoorten + +@cindex toonsoort +@cindex majeur, groot +@cindex mineur, klein +@cindex toevallige tekens en toonsoort +@cindex verplaatsingstekens en toonsoort +@cindex invoer versus layout +@cindex layout versus invoer + +@funindex \key +@funindex key +@funindex \major +@funindex major +@funindex \minor +@funindex minor + +Terminologie: @rglos{key signature}, @rglos{major}, +@rglos{minor}. + +De @notation{toonsoort} wordt gezet met het commando +@code{\key} gevolgd door een toonhoogte en @code{\major} of +@code{\minor}. + +@lilypond[verbatim,quote,relative=2] +\key d \major +a1 | +\key c \minor +a1 | +@end lilypond + +@smallspace + +@subheading Waarschuwing: toonsoorten en toonhoogten + +Terminologie: @rglos{accidental}, @rglos{key signature}, +@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, +@rglos{transposition}. + +Om uit te maken of er wel of geen @notation{toevallig teken} +geprint moet worden, onderzoekt LilyPond de toonhoogten en +de @notation{toonsoort}. De toonsoort beïnvloed alleen het +@emph{printen} van toevallige tekens, en niet de +@notation{toonhoogte} van de noot! Deze functie zaait vaak +verwarring bij nieuwe gebruikers, dus laten we het eens wat +beter bekijken. + +LilyPond maakt een duidelijk onderscheid tussen muzikale +beschrijving en layout. De verhoging of verlaging +(@notation{mol}, @notation{herstellingsteken} of +@notation{kruis}) van een noot is onderdeel van de +toonhoogte, en is dus de muzikale beschrijving. Of een +toevallig teken (een @emph{geprinte} mol, herstellingteken +of kruis) ook daadwerkelijk vóór de betreffende noot wordt +geprint, dat is een kwestie van layout. Voor de layout +bestaan regels, dus toevallige tekens worden automatisch +geprint volgens die regels. De toonhoogten in je muziek +zijn kunstuitingen, dus die zullen niet automatisch worden +toegevoegd, en je moet zelf datgene invoeren wat je wilt +horen. + +In dit voorbeeld: + +@lilypond[verbatim,quote,relative=2] +\key d \major +cis4 d e fis +@end lilypond + +@noindent +wordt voor geen enkele noot een toevallig teken geprint, +maar je moet toch @code{is} toevoegen en @code{cis} en +@code{fis} in het invoerbestand typen. + +De code @code{b} betekent niet @qq{print een zwart bolletje +op de middelste lijn van de notenbalk.} Het betekent +veelmeer @qq{er is hier een noot met toonhoogte B-stamtoon.} +In de toonsoort van A-mol majeur, krijgt hij bij het printen +@emph{toch} een toevallig teken: + +@lilypond[verbatim,quote,relative=2] +\key aes \major +aes4 c b c +@end lilypond + +Als het bovenstaand voorbeeld verwarrend is, ga dan eens na: +als je piano aan het spelen was, welke toets zou je +aanslaan? Als je een zwarte aan zou slaan, dan @emph{moet} +je @code{-is} of @code{-es} aan de notenaam toevoegen! + +Het expliciet toevoegen van alle verplaatsingen vergt +misschien een klein beetje extra inspanning tijdens het +intypen, maar het voordeel is dat @notation{transponeren} +eenvoudiger is, en toevallige tekens kunnen automatisch +geplaatst en geprint worden volgens verschillende +conventies. Voor enkele voorbeelden van het printen van +toevallige tekens volgens verschillende regels, zie +@ruser{Automatic accidentals}. + + +@seealso +Notatiehandleiding: +@ruser{Note names in other languages}, +@ruser{Accidentals}, +@ruser{Automatic accidentals}, +@ruser{Key signature}. + +Terminologie: +@rglos{Pitch names}. + + +@node Overbindingen en legatobogen +@translationof Ties and slurs +@subsection Overbindingen en legatobogen + +@cindex overbinding +@cindex legatoboog +@cindex fraseringsboog +@cindex boog, frasering + +@funindex ~ +@funindex ( ... ) +@funindex \( ... \) + +@subheading Overbindingen + + +Terminologie: @rglos{tie}. + +Een @notation{overbinding} maak je door het toevoegen van +een tilde @code{~} aan de eerste noot die overgebonden +wordt. + +@lilypond[verbatim,quote,relative=2] +g4~ g c2~ | c4~ c8 a~ a2 | +@end lilypond + +@subheading Legatobogen + + +Terminologie: @rglos{slur}. + +Een @notation{legatoboog} is een kromme, getrokken over een +aantal noten. De beginnoot en eindnoot worden gemarkeerd +met respectievelijk @code{(} en @code{)}. + +@lilypond[verbatim,quote,relative=2] +d4( c16) cis( d e c cis d) e( d4) +@end lilypond + +@subheading Fraseringsbogen + +Terminologie: @rglos{slur}, @rglos{phrasing}. + +Bogen die langere @notation{frasering} aangeven kunnen +worden ingevoerd met @code{\(} en @code{\)}. Je een +@notation{legatoboog} een een @notation{fraseringsboog} +tegelijkertijd gebruiken, maar je kunt geen gelijktijdige +legatobogen of gelijktijdige fraseringsbogen gebruiken. + +@lilypond[verbatim,quote,relative=2] +g4\( g8( a) b( c) b4\) +@end lilypond + +@smallspace + +@cindex legatobogen versus overbindingen +@subheading Waarschuwingen: legatobogen versus overbindingen + +Terminologie: @rglos{articulation}, @rglos{slur}, @rglos{tie}. + +Een @notation{legatoboog} ziet er net zo uit als een +@notation{overbinding}, maar heeft een andere betekenis. +Een overbinding maakt de eerste noot gewoon langer, en kan +alleen gebruikt worden tussen twee noten van dezelfde +toonhoogte. Legatobogen geven de speelwijze of +@notation{articulatie} van noten aan, en kunnen worden +gebruikt over grotere nootgroepen. Legatobogen en +overbindingen kunnen worden genest. + +@lilypond[verbatim,quote,relative=2] +c4~( c8 d~ d4 e) +@end lilypond + + +@seealso +Notatiehandleiding: +@ruser{Ties}, +@ruser{Slurs}, +@ruser{Phrasing slurs}. + + +@node Articulatie en dynamiek +@translationof Articulation and dynamics +@subsection Articulatie en dynamiek + + +@subheading Articulaties + +@cindex articulatie +@cindex speelwijze +@cindex accent +@cindex staccato + +Terminologie: @rglos{articulation}. + +Algemene @notation{articulaties} kunnen worden toegevoegd +aan een noot met een streepje @code{-} en een enkel +karakter: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +@subheading Vingerzetting + +@cindex vingerzetting + +@funindex ^ +@funindex _ + +Terminologie: @rglos{fingering}. + +Op soortgelijke manier wordt een @notation{vingerzetting} +aan een noot toegevoegd met een streepje (@code{-}) en het +cijfer dat moet worden geprint: + +@lilypond[verbatim,quote,relative=2] +c4-3 e-5 b-2 a-1 +@end lilypond + +Je kunt meerdere articulaties bij dezelfde noot gebruiken. +Articulaties en vingerzetting worden gewoonlijk automatisch +geplaatst, maar je kunt een richting specificeren door het +streepje (@code{-}) te vervangen door @code{^} (boven) or +@code{_} (onder). Echter, in de meeste gevallen is het +beter om LilyPond de richting van de articulaties te laten +uitzoeken. + +@lilypond[verbatim,quote,relative=2] +c4_-^1 d^. f^4_2-> e^-_+ +@end lilypond + +@subheading Dynamiek + +@cindex dynamiek +@cindex decrescendo +@cindex crescendo + +@funindex \f +@funindex \ff +@funindex \mp +@funindex \p +@funindex \mf +@funindex \pp +@funindex \< +@funindex < +@funindex \> +@funindex > +@funindex \! +@funindex ! + +Terminologie: @rglos{dynamics}, @rglos{crescendo}, +@rglos{decrescendo}. + +@notation{Dynamische} tekens maak je door het teken (met een +backslash) aan de noot toe te voegen: + +@lilypond[verbatim,quote,relative=2] +c4\ff c\mf c\p c\pp +@end lilypond + + +@notation{Crescendi} en @notation{decrescendi} begin je met +de commando's @code{\<} en @code{\>}. Het volgende +dynamische teken, bijvoorbeeld @code{\f}, beïndigt de +(de)crescendo maar je kunt ook het commando @code{\!} +gebruiken: + +@lilypond[verbatim,quote,relative=2] +c4\< c\ff\> c c\! +@end lilypond + + +@seealso +Notatiehandleiding: +@ruser{Articulations and ornamentations}, +@ruser{Fingering instructions}, +@ruser{Dynamics}. + + +@node Tekst toevoegen +@translationof Adding text +@subsection Tekst toevoegen + +@cindex tekst, toevoegen +@cindex toevoegen van tekst text +@cindex opmaak +@cindex markup + +@funindex \markup +@funindex markup + +Je kunt tekst aan je muziek toevoegen door: + +@lilypond[verbatim,quote,relative=2] +c2^"espr" a_"legato" +@end lilypond + +Extra formattering kan worden toegevoegd met het +@code{\markup}-commando: + +@lilypond[verbatim,quote,relative=2] +c2^\markup { \bold espr } +a2_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} +@end lilypond + + +@seealso +Notatiehandleiding: +@ruser{Writing text}. + + +@node Automatische en handmatige waardestrepen +@translationof Automatic and manual beams +@subsection Automatische en handmatige waardestrepen + +@cindex waardestrepen +@cindex automatische waardestrepen +@cindex handmatige waardestrepen +@cindex waardestrepen, automatisch +@cindex waardestrepen, handmatig +@cindex waardestrepen, met de hand + +@funindex [ ... ] +@funindex [ +@funindex ] +@funindex \autoBeamOff +@funindex autoBeamOff +@funindex \autoBeamOn +@funindex autoBeamOn + +Terminologie: @rglos{beam}. + +Alle @notation{waardestrepen} worden automatisch getekend: + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] c16 b a8 +@end lilypond + +Als de automatische waardestrepen je niet bevallen, kun je +ze handmatig overschijven. Om een bepaalde waardestreep te +verbeteren markeer je de eerste noot met @code{[} en de +laatste met @code{]}. + +@lilypond[verbatim,quote,relative=2] +a8[ ais] d[ ees r d] a b +@end lilypond + +Als je de automatische waardestrepen helemaal uit wilt +zetten voor een bepaald stuk muziek, gebruik je het commando +@code{\autoBeamOff} om de automatische waardestrepen uit te +zetten en @code{\autoBeamOn} om ze weer aan te zetten. + +@lilypond[verbatim,quote,relative=2] +\autoBeamOff +a8 c b4 d8. c16 b4 | +\autoBeamOn +a8 c b4 d8. c16 b4 | +@end lilypond + + +@seealso +Notatiehandleiding: +@ruser{Automatic beams}, +@ruser{Manual beams}. + + +@node Geavanceerde ritmische commando's +@translationof Advanced rhythmic commands +@subsection Geavanceerde ritmische commando's + +@subheading Opmaat + +@cindex opmaat +@cindex anacrouse +@cindex onvolledige maat + +@funindex \partial +@funindex partial + +Terminologie: @rglos{anacrusis}. + +Een opmaat (of @notation{anacrouse}) wordt ingevoerd met het +sleutelwoord @code{\partial}. Het wordt gevolgd door een +nootlengte: @code{\partial 4} is een opmaat van een kwart en +@code{\partial 8} een achtste. + +@lilypond[verbatim,quote,relative=2] +\partial 8 f8 | +c2 d | +@end lilypond + +@c Note bene: duolen, triolen, kwartolen etc. worden anti-metrische +@c figuren genoemd, hoewel ze in feite anti-ritmisch zijn -- hemiolen +@c zijn veeleer anti-metrisch +@subheading Antimetrische figuren + +@cindex antimetrische figuren +@cindex triolen + +@funindex \times +@funindex times + +Terminologie: @rglos{note value}, @rglos{triplet}. + +@notation{Antimetrische figuren} wordeg gemaakt met het +@code{\times} sleutelwoord. Het verwacht twee parameters: +een fractie (breuk) en een stuk muziek. De lengte van het +stuk muziek wordt vermenigvuldigd met de fractie. Een triol +maakt dat de noten 2/3 van hun lengte duren, dus een +@notation{triool} heeft als fractie 2/3 + +@lilypond[verbatim,quote,relative=2] +\times 2/3 { f8 g a } +\times 2/3 { c8 r c } +\times 2/3 { f,8 g16[ a g a] } +\times 2/3 { d4 a8 } +@end lilypond + +@subheading Versieringen + +@cindex versieringen +@cindex voorslag +@cindex naslag +@cindex acciaccatura +@cindex appoggiatura + +@funindex \grace +@funindex grace +@funindex \acciaccatura +@funindex acciaccatura +@funindex \appoggiatura +@funindex acciaccatura + +Terminologie: @rglos{grace notes}, @rglos{acciaccatura}, +@rglos{appoggiatura}. + +@notation{Versieringen} worden gemaakt met het @code{\grace} +commando, hoewel ze ook gemaakt kunenn worden door een het +sleutelwoord @code{\appoggiatura} of @code{\acciaccatura} +voor een muziekuitdrukking te zetten + +@lilypond[verbatim,quote,relative=2] +c2 \grace { a32[ b] } c2 | +c2 \appoggiatura b16 c2 | +c2 \acciaccatura b16 c2 | +@end lilypond + + +@seealso +Notatiehandleiding: +@ruser{Grace notes}, +@ruser{Tuplets}, +@ruser{Upbeats}. + + +@node Verschillende noten tegelijk klinkend +@translationof Multiple notes at once +@section Verschillende noten tegelijk klinkend + +Deze paragraaf introduceert het hebben van meer dan één +klinkende noot tegelijkertijd: verscheidene instrumenten, +verscheidene notenbalken voor één instrument (bijv. piano), +en akkoorden. + +Polyfonie betekent in de muziek het hebben van meer dan één +klinkende melodie tegelijk. Polyfonie in LilyPond betekent +het hebben van meer dan een stem op dezelfde notenbalk. + +@menu +* Muziekuitdrukkingen nader verklaard:: +* Meerdere notenbalken:: +* Notenbalkgroepen:: +* Het combineren van noten tot accoorden:: +* Polyfonie binnen een notenbalk:: +@end menu + + +@node Muziekuitdrukkingen nader verklaard +@translationof Music expressions explained +@subsection Muziekuitdrukkingen nader verklaard + +@cindex muziekuitdrukking +@cindex uitdrukking, muziek +@cindex samengestelde muziekuitdrukking +@cindex muziekuitdrukking, samengesteld + +In LilyPond-invoerbestanden wordt muziek gerepresenteerd +door @emph{muziekuitdrukkingen}. Een enkele noot is een +muziekuitdrukking: + +@lilypond[verbatim,quote,relative=2] a4 +@end lilypond + +Een noot tussen accolades zetten maakt er een +@emph{samengestelde muziekuitdrukking} van. Hier hebben we +een samengestelde muziekuitdrukking gemaakt die twee noten +bevat: + +@lilypond[verbatim,quote,relative=2] +{ a4 g4 } +@end lilypond + +Een groep muziekuitdrukkingen (bijv. noten) tussen accolades +zetten betekent dat ze een sequentie zijn (d.w.z. de ene +volgt op de vorige). Het resultaat is een nieuwe +muziekuitdrukking: + +@lilypond[verbatim,quote,relative=2] +{ { a4 g } f4 g } +@end lilypond + +@subheading Analogie: wiskundige uitdrukkingen + +Dit mechanisme lijkt op wiskundige formules: een grote +formule wordt gemaakt door een samenstelling van kleine +formules. Zulke formules worden uitdrukkingen genoemd, en +ze kunnen andere uitdrukkingen bevatten, zodat je +willekeurig ingewikkelde en grote uitdrukkingen kunt maken. +Bijvoorbeeld, + +@example +1 + +1 + 2 + +(1 + 2) * 3 + +((1 + 2) * 3) / (4 * 5) +@end example + +Dit is een opeenvolging van uitdrukkingen, waar elke +uitdrukking onderdeel is van de volgende (grotere) +uitdrukking. De eenvoudigste uitdrukkingen zijn getallen, +en grotere worden gemaakt door het combineren van +uitdrukkingen met operatoren (zoals @code{+}, @code{*} en +@code{/}) en haakjes. Net als wiskundige uitdrukkingen, +kunnen muziekuitdrukkingen willekeurig diep worden genest, +wat nodig is voor ingewikkelde muziek zoals polyfone +partituren. + + +@subheading Simultane muziekuitdrukkingen: meerdere notenbalken + +@cindex meerdere notenbalken +@cindex notenbalken, meerdere +@cindex polyfonie +@cindex combineren van gelijktijdige uitdrukkingen +@cindex gelijktijdige uitdrukkingen +@cindex uitdrukkingen, gelijktijdig +@cindex relatieve noten en gelijktijdige muziek +@cindex relatieve noten en gelijktijdige uitdrukkingen +@cindex simultane muziek en relatieve noten +@cindex gelijktijdige uitdrukkingen en relatieve noten + +@funindex << +@funindex >> +@funindex << ... >> + +Terminologie: @rglos{polyphony}. + +Deze techniek is nuttig voor @notation{polyfone} muziek. +Voor het invoeren van muziek met meerdere stemmen of +meerdere notenbalken, combineren we uitdrukkingen +gelijktijdig. Om aan te geven dat twee stemmen tegelijk +klinken, voer je gewoon een simultane samenstelling van +muziekuitdrukkingen in. Een @q{simultane} muziekuitdrukking +wordt gevormd door uitdrukkingen te tussen @code{<<} en +@code{>>} te zetten. In onderstaand voorbeeld, zijn drie +sequenties (die allemaal enkele noten bevatten) simultaan +samengesteld: + +@lilypond[verbatim,quote] +\relative c'' { + << + { a2 g } + { f2 e } + { d2 b } + >> +} +@end lilypond + +Merk op dat we elk niveau van de invoer met een ander aantal +spaties hebben ingesprongen. Het maakt LilyPond niet uit +hoeveel (of hoe weinig) spaties er aan het begin van een +regel staan, maar het op deze wijze inspringen van +LilyPond-code maakt het voor mensen veel leesbaarder. + +@warning{elke noot is relatief aan de vorige noot in de +invoer, niet relatief aan de @code{c''} in het eerste +@code{@bs{}relative} commando.} + + +@subheading Simultane muziekuitdrukking: enkele notenbalk + +Om het aantal notenbalken in een stuk te bepalen, kijkt +LilyPond naar het begin van de eerste uitdrukking. Als dat +een enkele noot is, is er één notenbalk; als dat een +simultane uitdrukking is, is er meer dan één notenbalk. +Onderstaand voorbeeld toont een ingewikkelde uitdrukking, +maar omdat het begint met een enkele noot wordt het +genoteerd op een enkele notenbalk. + +@lilypond[verbatim,quote] +\relative c'' { + c2 <> | + << { e2 f } { c2 <> } >> | +} +@end lilypond + +@node Meerdere notenbalken +@translationof Multiple staves +@subsection Meerdere notenbalken + +@cindex meerdere notenbalken +@cindex notenbalken, meerdere +@cindex context +@cindex context, notatie +@cindex notatiecontext + +@funindex \new Staff +@funindex new Staff +@funindex Staff +@funindex \new +@funindex new +@funindex Score +@funindex Voice +@funindex Lyrics +@funindex ChordNames + +LilyPond-invoerbestanden bestaan uit muziekuitdrukkingen, +zoals we zagen in @ref{Muziekuitdrukkingen nader verklaard}. +Als de partituur begint met een simultane muziekuitdrukking, +maakt LilyPond meerdere notenbalken. Echter, het is +eenvoudiger te zien wat er gebeurt als we de notebalk +expliciet creëren. + +Om meer dan een één notenbalk te printen, wordt elk stuk +muziek dat een op een notebalk hoort gemarkeerd door er +@code{\new Staff} voor te zetten. Deze +@code{Staff}-elementen worden dan gelijktijdig samengesteld +met @code{<<} en @code{>>}: + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + +Het commando @code{\new} opent een @q{notatiecontext.} Een +notatiecontext is een omgeving waarin muziekelementen (zoals +noten of @code{\clef}-commando's) worden geïnterpreteerd. +Voor eenvoudige stukken worden zulke notatiecontexten +automatisch aangemaakt. Voor ingewikkeldere stukken, is het +beter om contexten expliciet aan te geven. + +Er zijn verschillende soorten van contexten. @code{Score}, +@code{Staff}, en @code{Voice} zorgen voor melodische +notatie, terwijl @code{Lyrics} liedteksten zet en +@code{ChordNames} accoordnamen print. + +In syntaxtermen maakt het laten voorafgaan van Als je +@code{\new} voor een muziekuitdrukking zet, maakt dat in +syntaxtermen een grotere muziekuitdrukking. Dat lijkt op +het minteken in de wiskunde. De formule @math{(4+5)} is een +uitdrukking, dus @math{-(4+5)} is een grotere uitdrukking. + +Maatsoorten die in één notenbalk worden ingevoerd, +beïnvloeden standaard ook alle andere notenbalken. And de +andere kant, de toonsoort van een notenbalk heeft +@emph{geen} invloed op andere notenbalken. Dit verschil in +standaard gedrag is omdat partituren met transponerende +instrumenten veel meer voorkomen dan polyritmische +partituren. + +@lilypond[verbatim,quote] +\relative c'' { + << + \new Staff { \clef "treble" \key d \major \time 3/4 c4 } + \new Staff { \clef "bass" c,,4 } + >> +} +@end lilypond + + + + +@node Notenbalkgroepen +@translationof Staff groups +@subsection Notenbalkgroepen + +@cindex pianobalk +@cindex notenbalk, piano +@cindex koorbalk +@cindex notenbalk, koor +@cindex manuaalbalk +@cindex notenbalk, manuaal +@cindex notenbalkgroep + +@funindex PianoStaff +@funindex GrandStaff +@funindex ChoirStaff + +Terminologie: @rglos{brace}. + +Pianomuziek wordt meestal genoteerd op twee notenbalken die +verbonden zijn door een @notation{accolade}. Het afdrukken +van zo'n balk gaat hetzelfde als in het polyfone voorbeeld +in @ref{Meerdere notenbalken}. Echter, nu wordt de gehele +uitdrukking in een @code{PianoStaff} gestopt: + +@example +\new PianoStaff << + \new Staff @dots{} + \new Staff @dots{} +>> +@end example + +Hier is een voorbeeldje: + +@lilypond[verbatim,quote] +\relative c'' { + \new PianoStaff << + \new Staff { \time 2/4 c4 e | g g, | } + \new Staff { \clef bass c,,4 c' | e c | } + >> +} +@end lilypond + +Andere notenbalkgroeperingen gaan met @code{\new +GrandStaff}, geschikt voor for orkestpartituren, en +@w{@code{\new ChoirStaff}}, geschikt voor vocale partituren. +Deze notenbalkgroepen vormen allemaal een ander type +context, namelijk een die een accolade aan de linkerkant van +elk systeem maakt en ook de lengte van de maatstrepen +bepaalt. + + +@seealso +Notatiehandleiding: +@ruser{Keyboard and other multi-staff instruments}, +@ruser{Displaying staves}. + + +@node Het combineren van noten tot accoorden +@translationof Combining notes into chords +@subsection Het combineren van noten tot accoorden + +@cindex accoorden +@cindex nootlengten in accoorden + +@funindex < +@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. +Echter, de normale manier om een accoord aan te geven is +door de toonhoogten tussen @emph{enkele} hoekige haken te +zetten. Merk op dat alle noten in een accoord dezelfde +lengte moeten hebben, en dat die lengte na de afsluitende +haak komt. + +@lilypond[verbatim,quote,relative=2] +r4 2 +@end lilypond + +Beschouw accoorden als vrijwel identiek aan enkele noten: +bijna alles wat je aan een enkele noot kunt plakken, kun je +aan een accoord plakken, en alles komt @emph{buiten} de +hoekige haken. Bijvoorbeeld, je kunt markeringen als +waardestrepen en overbindingen gebruiken met accoorden. Ze +worden geplaatst buiten de hoekige haken. + +@lilypond[verbatim,quote,relative=2] +r4 8[ ]~ 2 | +r4 8( \> 4 \!) | +@end lilypond + + +@node Polyfonie binnen een notenbalk +@translationof Single staff polyphony +@subsection Polyfonie binnen een notenbalk + +@cindex polyfonie +@cindex meerdere stemmen +@cindex stemmen, meerdere op een balk +@cindex enkelbalks polyfonie +@cindex spatierust +@cindex rust, spatie + +@funindex << ... \\ ... >> +@funindex << +@funindex \\ +@funindex >> + +Polyfone muziek in LilyPond, hoewel niet moeilijk, maakt +gebruik van concepten die we nog niet hebben besproken, dus +kunnen we nog niet introduceren. In plaats daarvan worden +in de volgende paragrafen eerst deze concepten uitvoerig +verklaard. + +@seealso +Beginnershandleiding: +@ref{Voices contain music}. + +Notatiehandleiding: +@ruser{Simultaneous notes}. + +@node Vocale muziek +@translationof Songs +@section Vocale muziek + +Deze paragraaf introduceert vocale muziek en eenvoudige +liedjes. + +@menu +* Het zetten van eenvoudige liedjes:: +* Liedteksten uitrichten op een melodie:: +* Liedteksten bij meerdere notenbalken:: +@end menu + + +@node Het zetten van eenvoudige liedjes +@translationof Setting simple songs +@subsection Het zetten van eenvoudige liedjes + +@cindex liedteksten +@cindex liedjes + +@funindex \addlyrics +@funindex addlyrics + +Terminologie: @rglos{lyrics}. + +Hier is het begin van de melodie van een slaapliedje, +@notation{Girls and boys come out to play}: + +@lilypond[verbatim,quote] +\relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 +} +@end lilypond + +De @notation{liedteksten} kunnen op deze noten worden gezet, +door beiden te combineren met het +@code{\addlyrics}-sleutelwoord. Liedteksten worden +ingevoerd door de lettergrepen van elkaar te scheiden met +een spatie. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } +>> +@end lilypond + +Merk de accolades op die zowel de muziek als de liedtekst +afbakenen. 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}. + +Merk tevens de hoekige haken @w{@code{<< ... >>}} op die om +het hele stuk heen staan en aangeven dat de muziek en de +woorden tegelijk klinken. + +@node Liedteksten uitrichten op een melodie +@translationof Aligning lyrics to a melody +@subsection Liedteksten uitrichten op een melodie + +@cindex melisma +@cindex legatolijn +@cindex streepjes +@cindex underscore +@cindex liedteksten, uitrichten +@cindex uitrichten van liedteksten +@cindex liedteksten, woorden met meerdere lettergrepen +@cindex woorden met meerdere lettergrepen in liedteksten + +Terminologie: @rglos{melisma}, @rglos{extender line}. + +De volgende regel van het slaapliedje is @notation{The moon +doth shine as bright as day}. Laten we die ook invoeren: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c b a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Als je de code van het bovenstaand voorbeeld compileert, +zul je waarschuwingen op het scherm zien: + +@example +song.ly:12:29: waarschuwing: maat-controle gefaald op: 5/8 + The | moon doth shine as + | bright as day; | +song.ly:12:46: waarschuwing: maat-controle gefaald op: 3/8 + The | moon doth shine as | bright as day; + | +@end example + +Dit is een goed voorbeeld van de waarde van maat-controles. +Als we naar de muziek kijken, dan zien we dat de extra +liedteksten niet helemaal goed uitgericht zijn met de noten. +Het woord @notation{shine} moet op twee noten gezongen +worden, niet op één. Dit wordt een @notation{melisma} +genoemd, een enkele lettergreep gezongen op meer dan een +noot. Er zijn verschillende manieren om een lettergreep +over meerdere noten uit te verdelen, het eenvoudigst is een +legatoboog over de noten te zetten, voor details, zie +@ref{Overbindingen en legatobogen}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c( b) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +De woorden zijn nu goed uitgericht met de noten, maar de +automatische waardestrepen voor de noten boven +@notation{shine as} zien er niet helemaal goed uit. We +kunnen dit verbeteren door handmatige +waardestreep-aanduidingen in te voegen om de automatische +waardestrepen te overschrijven, voor details, see +@ref{Automatische en handmatige waardestrepen}. + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c([ b]) a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine as | bright as day; | + } +>> +@end lilypond + +Als alternatief voor het gebruik van legatobogen, kunnen +melismata worden aangegeven door in de liedtekst een +underscore @code{_} toe te voegen voor elke noot die moet +worden opgenomen in de melisma: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 g8 | + a4 b8 c[ b] a | d4 b8 g4. | + } + \addlyrics { + Girls and boys come | out to play, + The | moon doth shine _ as | bright as day; | + } +>> +@end lilypond + +Als een lettergreep zich uitstrekt over een aantal noten of +over een noot die heel lang duurt, wordt gewoonlijk een +@notation{legatolijn} getrokken vanaf de lettergreep die +zich uitstrekt onder alle noten van die lettergreep. Die +wordt ingevoerd als twee underscores @code{__}. Hier is een +voorbeeld uit de eerste drie maten van @notation{Dido's +Lament}, van Purcells @notation{Dido and Æneas}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key g \minor + \time 3/2 + g2 a bes | bes2( a) b2 | + c4.( bes8 a4. g8 fis4.) g8 | fis1 + } + \addlyrics { + When I am | laid, + am | laid __ in | earth, + } +>> +@end lilypond + +In geen van de voorbeelden tot nu toe zijn woorden met meer +dan een lettergreep gebruikt. Zulke woorden worden +gewoonlijk opgedeeld in een lettergreep per noot, met +koppeltekens tussen de lettergrepen. Zo'n koppelteken +worden ingevoerd als twee streepjes, wat een koppelteken +midden tussen de twee lettergrepen oplevert. Hier is een +voorbeeld dat dit laat zien en alles wat we tot nu toe +hebben geleerd over het uitrichten van liedteksten naar +noten. notes. + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \key g \major + \time 3/4 + \partial 4 + d4 | g4 g a8( b) | g4 g b8( c) | + d4 d e | c2 + } + \addlyrics { + A -- | way in a __ | man -- ger, + no __ | crib for a | bed, __ + } +>> +@end lilypond + +Sommige liedteksten, vooral die in het Italiaans, hebben het +omgekeerde nodig: het zetten van meer dan een lettergreep op +een noot. Dit wordt bereikt door lettergreepen aan elkaar +te koppelen met een enkele underscore @code{_} (zonder +spaties), of door ze tussen dubbele aanhalingtekens te +zetten. Hier is een voorbeeld uit Rossini's +@notation{Figaro}, waar @notation{al} op dezelfde noot moet +worden gezongen als @notation{go} uit het @notation{Largo} +in Figaro's aria @notation{Largo al factotum}: + +@c no ragged-right here because otherwise the hyphens get lost, +@c but the example is long enough to avoid looking strange. +@lilypond[verbatim,quote,noragged-right] +<< + \relative c' { + \clef "bass" + \key c \major + \time 6/8 + c4.~ c8 d b | c8([ d]) b c d b | c8 + } + \addlyrics { + Lar -- go_al fac -- | to -- tum del -- la cit -- | tà + } +>> +@end lilypond + + +@seealso +Notatiehandleiding: +@ruser{Vocal music}. + + +@node Liedteksten bij meerdere notenbalken +@translationof Lyrics to multiple staves +@subsection Liedteksten bij meerdere notenbalken + +@cindex liedteksten en meerdere notenbalken +@cindex meerdere notenbalken en liedteksten + +De eenvoudige aanpak met @code{\addlyrics} kan gebruikt +worden voor het plaatsen van liedteksten onder meer dan een +notenbalk. Hier is een voorbeeld uit Handels +@notation{Judas Maccabæus}: + +@lilypond[verbatim,quote] +<< + \relative c'' { + \key f \major + \time 6/8 + \partial 8 + c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- | dorn, __ + } + \relative c' { + \key f \major + \time 6/8 + \partial 8 + r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4 + } + \addlyrics { + Let | flee -- cy flocks the | hills a -- dorn, + } +>> +@end lilypond + +Partituren die ingewikkelder zijn dan dit eenvoudige +voorbeeld kun je beter maken door het uit elkaar trekken van +de score structuur en de noten en liedteksten door het +gebruik van variabelen. Dit wordt behandeld in +@ref{Stukken organiseren met variabelen}. + + +@seealso +Notatiehandleiding: +@ruser{Vocal music}. + + +@node De puntjes op de i's +@translationof Final touches +@section De puntjes op de i's + +Dit is de laatste paragraaf van het leerboek; het laat zien +hoe je de puntjes op de i's zet voor eenvoudige stukken, en +geeft een inleiding op het vervolg van de handleiding. + +@menu +* Stukken organiseren met variabelen:: +* Titels toevoegen:: +* Absolute notenamen:: +* Na het leerboek:: +@end menu + + +@node Stukken organiseren met variabelen +@translationof Organizing pieces with variables +@subsection Stukken organiseren met variabelen + +@cindex variabelen +@cindex variabelen, definiëren +@cindex identifiers +@cindex macro's +@cindex variabelen toekennen +@cindex variables gebruiken +@cindex gebruik van variables +@cindex variabelen, toegestane tekens in +@cindex tekens toegestaan in variabelen + +Wanneer alle elementen die eerder zijn besproken worden +gecombineerd om grotere bestanden te maken, worden de +muziekuitdrukkingen een stuk groter. In polyfone muziek met +veel notenbalken, kunnen invoerbestanden heel verwarrend +worden. Deze verwarring kunnen we verminderen door het +gebruik van @emph{variabelen}. + +Met variabelen (ook bekend als identifiers of macro's), +kunnen we ingewikkelde muziekuitdrukkingen in stukken +breken. Een waarde aan een variabele toekennen gaat as +volgt: + +@example +benoemdeMuziek = @{ @dots{} @} +@end example + +De inhoud van de muziekuitdrukking @code{benoemdeMuziek} kan +later worden gebruikt door een backslash voor de naam te +zetten (@code{\benoemdeMuziek}, precies als een gewoon +LilyPond-commando). + +@c KEEP LY +@lilypond[verbatim,quote] +viool = \new Staff { + \relative c'' { + a4 b c b + } +} + +cello = \new Staff { + \relative c { + \clef "bass" + e2 d + } +} +{ + << + \viool + \cello + >> +} +@end lilypond + +@noindent +De naam van een variabele mag alleen letters bevatten, geen +cijfers, underscores, or of streepjes. + +Variabelen moeten gedefiniëerd worden @emph{voor} de +eigenlijke muziekuitdrukking, daarna kunnen ze zo vaak als +nodig worden hergebruikt. Ze kunnen zelfs worden gebruikt +om de inhoud van een nieuwe variabele te construeren, wat +een manier is om een stuk muziek met veel herhalingen +compacter in te voeren. + +@c KEEP LY +@lilypond[verbatim,quote] +trioolA = \times 2/3 { c,8 e g } +maatA = { \trioolA \trioolA \trioolA \trioolA } + +\relative c'' { + \maatA \maatA +} +@end lilypond + +Variabelen kunnen worden gebruikt voor allerlei andere typen +objecten in de invoer. Bijvoorbeeld + +@example +breedte = 4.5\cm +naam = "Janneke" +aVijfPapier = \paper @{ paperheight = 21.0 \cm @} +@end example + +Afhankelijk van de inhoud kan de variabele gebruikt wonden +op verschillende plaatsen. Onderstaand voorbeeld maakt +gebruik van de bovenstaande variabelen: + +@example +\paper @{ + \aVijfPapier + line-width = \breedte +@} + +@{ + c4^\naam +@} +@end example + + +@node Titels toevoegen +@translationof Adding titles +@subsection Titels toevoegen + +@cindex titel +@cindex kopjes +@cindex titelblok + +@funindex \header +@funindex header + +De titel, componist, opusnummer, en soortgelijke informatie +worden ingevoerd in het @code{\header}-blok. Deze bevindt +zich buiten de muziekuitdrukking; het @code{\header}-blok +staat gewoonlijk direct onder het versienummer. + +@example +\version @w{"@version{}"} + +\header @{ + title = "Symfonie" + composer = "Ik" + opus = "Op. 9" +@} + +@{ + @dots{} muziek @dots{} +@} +@end example + +Als het bestand wordt verwerkt, worden titel en componist en +opus boven de muziek geprint. Meer informatie over titels +staat in @ruser{Creating titles}. + + +@node Absolute notenamen +@translationof Absolute note names +@subsection Absolute notenamen + +@cindex notenamen +@cindex notenamen, absolute +@cindex absolute modus +@cindex absolute waarden voor toonhoogten +@cindex toonhoogten, absolute waarden +@cindex absolute notenamen + +Totnutoe hebben we steeds @code{\relative} gebruikt om +toonhoogten aan te duiden. Dit is voor de meeste muziek de +eenvoudigste manier van invoeren, maar er is ook een andere +manier om toonhoogten in te voeren: de absolute modus. + +Alls je @code{\relative} weglaat, behandelt LilyPond alle +toonhoogten als absolute waarden. Een @code{c'} betekent +altijd de centrale C, een @code{b} betekent altijd de noot +een stapje onder de centrale C en een @code{g,} is altijd de +noot onderaan de balk bij de bassleutel. + +@lilypond[verbatim,quote] +{ + \clef "bass" + c'4 b g, g, | + g,4 f, f c' | +} +@end lilypond + +Hier is een toonladder over vier octaven: + +@lilypond[verbatim,quote] +{ + \clef "bass" + c,4 d, e, f, | + g,4 a, b, c | + d4 e f g | + a4 b c' d' | + \clef "treble" + e'4 f' g' a' | + b'4 c'' d'' e'' | + f''4 g'' a'' b'' | + c'''1 | +} +@end lilypond + +Zoals je ziet, behoeft het schrijven van een melodie in de +vioolsleutel nogal wat apostrof-tekens @code{'}. Kijk eens +naar dit fragment van mozart: + +@lilypond[verbatim,quote] +{ + \key a \major + \time 6/8 + cis''8. d''16 cis''8 e''4 e''8 | + b'8. cis''16 b'8 d''4 d''8 | +} +@end lilypond + +Al die apostrofs maken de invoer onleesbaar en zijn een bron +van fouten. met @code{\relative} is bovenstaand voorbeeld +een stuk leesbaarder en ook eenvoudiger in te voeren: + +@lilypond[verbatim,quote] +\relative c'' { + \key a \major + \time 6/8 + cis8. d16 cis8 e4 e8 | + b8. cis16 b8 d4 d8 | +} +@end lilypond + +Als je een fout maakt met een octaveringsteken (@code{'} of +@code{,}) in de @code{\relative}-modus, wordt dat heel snel +duidelijk -- veel noten staan in het verkeerde octaaf. Als +je in absolute modus werkt, is een enkele octaaffout lang +niet zo goed zichtbaar, en zal dus ook niet zo eenvoudig te +vinden zijn. + +Echter, absolute modus is is nuttig in muziek met zeer grote +intervallen en vooral voor lilypond-invoer die met de +computer wordt gegenereerd. + + +@node Na het leerboek +@translationof After the tutorial +@subsection Na het leerboek + +Als je dit leerboek uit hebt, kun je het beste zelf een paar +stukken in gaan voeren. Begin met het toevoegen van noten +aan een van de @ref{Templates}. Als je notatie nodig hebt +die niet is behandeld in het leerboek, kijk dan in de +notatiehandleiding, beginnend bij @ruser{Musical notation}. +Al je een stuk wilt schrijven voor een ensemble waarvoor +geen sjabloon beschikbaar is, kijk dan naar @ref{Extending +the templates}. + +Zodra je een paar korte stukken hebt geschreven, lees de +rest van de beginnershandleiding (hoofdstukken 3-5). Je mag +die nu natuurlijk ook best gaan lezen! Echter, het vervolg +van de Beginnershandleiding veronderstelt dat je vertrouwd +bent met LilyPond-invoer. Je zou die hoofstukken snel +kunnne doorkijken en later terugkomen als je wat meer +ervaring hebt. + +In dit leerboek en in het vervolg van de +beginnershandleiding is een alinea @strong{Zie ook} aan het +eind van elke paragraaf met kruisverwijzingen naar andere +paragrafen: deze kruisverwijzingen kun je beter niet volgen +bij de eerste keer lezen. Als je de gehele +beginnershandleiding een keer hebt gelezen, wil je wellicht +bepaalde stukken herlezen en kun je deze kruisverwijzingen +bijvoorbeeld volgen voor meer informatie. + +Mocht je dat nog niet gedaan hebben, lees @emph{alsjeblieft} +het @ref{Overzicht van handleidingen}. Er is veel +informatie beschikbaar over LilyPond, dus nieuwkomers weten +vaak niet waar ze precies moeten zoeken. Als je vijf +minuten uittrekt om die paragraaf goed te lezen, kun je +jezelf uren frustratie besparen met het zoeken op +verkeerde plaatsen! + diff --git a/Documentation/nl/learning/fundamental.itely b/Documentation/nl/learning/fundamental.itely new file mode 100644 index 0000000000..05557e40cc --- /dev/null +++ b/Documentation/nl/learning/fundamental.itely @@ -0,0 +1,3159 @@ +@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*- + +@ignore + Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8 + + 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 Translator: Jan Nieuwenhuizen +@c Translation checker: +@c Translation checker committish: + +@c \version "2.14.0" + +@node Fundamentele concepten +@translationof Fundamental concepts +@chapter Fundamentele concepten + +In het Leerboek hebben we gezien hoe je prachtig geprinte +muziek maakt van een eenvoudig tekstbestand. Dit hoofdstuk +introduceert de achterliggende concepten en benodigde +technieken voor het maken van ingewikkeldere partituren die +er net zo mooi uitzien. + +@menu +* Hoe LilyPond-invoerbestanden werken:: +* Voices contain music:: +* Contexts and engravers:: +* Extending the templates:: +@end menu + + +@node Hoe LilyPond-invoerbestanden werken +@translationof How LilyPond input files work +@section Hoe LilyPond-invoerbestanden werken + +Het LilyPond invoerformaat is tamelijk vrij, wat ervaren +gebruikers veel flexibiliteit geeft hun bestanden te +structureren zoals ze dat wensen. Deze flexibiliteit kan +verwarrend zijn voor nieuwe gebruikers. Deze paragraaf legt +het een en ander uit over deze structuur. Om het leesbaar +te houden worden details weggelaten. Een complete +beschrijving van het invoerformaat is te vinden in +@ruser{File structure}. + +@menu +* Inleiding in de LilyPond-bestandsstructuur:: +* Score is a (single) compound musical expression:: +* Nesting music expressions:: +* On the un-nestedness of brackets and ties:: +@end menu + +@node Inleiding in de LilyPond-bestandsstructuur +@translationof Introduction to the LilyPond file structure +@subsection Inleiding in de LilyPond-bestandsstructuur + +@cindex invoerformaat +@cindex bestandsstructuur + +Een basisvoorbeeld van een LilyPond-invoerbestand is + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...samengestelde muziekuitdrukking...} % alle muziek komt hier! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Er zijn veel variaties op dit basispatroon maar dit +voorbeeld dient als een handig beginpunt. + +@funindex \book +@funindex boek +@funindex \score +@funindex partituur +@cindex boek +@cindex partituur + +Tot nu toe heeft geen van de voorbeelden het +@code{\score@{@}}-commando gebruikt. Dit kan omdat LilyPond +automatisch de extra commando's toevoegt die benodigt zijn +als je het eenvoudige invoer geeft. LilyPond behandelt invoer +zoals dit: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +als een afkorting voor dit: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +Anders gezegd, als de invoer een enkelvoudige +muziekuitdrukking bevat, interpreteert LilyPond het bestand +alsof die muziekuitdrukking ingepakt is in bovenstaande +commando's. + +@cindex impliciete contexten +@cindex contexten, impliciet + +@strong{Een kleine waarschuwing!} In veel van de voorbeelden +in de LilyPond-documentatie worden de @code{\new Staff}- en +@code{\new Voice}-commando's weggelaten en worden ze +impliciet aangemaakt. Voor eenvoudige voorbeelden werkt dat +goed, maar voor ingewikkelde voorbeelden, vooral wanneer +additionele commando's worden gebruikt, kan het impliciete +aanmaken van contexten verrassende resultaten opleveren, +zoals extra ongewenste notebalken. Hoe je contexten +expliciet specificeert, wordt uitgelegd in @ref{Contexts and +engravers}. + +@warning{Voor het invoeren van meer dan enkele regels muziek +wordt aangeraden altijd notenbalken en stemmen expliciet te +specificeren.} + +Laten we terugkeren naar het eerste voorbeeld en het +@code{\score}-commando beter bekijken. + +Een @code{\score}-blok moet altijd precies één +muziekuitdrukking bevatten, en die moet direct na het +@code{\score}-commando staan. Herrinner je dat een +muziekuitdrukking alles kan zijn van een enkele noot +tot een enorme samengestelde uitdrukking zoals + +@example +@{ + \new StaffGroup << + @var{...vul de volledige partituur van een Wagner opera hier in...} + >> +@} +@end example + +@noindent +Omdat alles tussen @code{@{ ... @}} staat, telt het als één +muziekuitdrukking. + +Zoals we eerder al zagen, kan het @code{\score}-blok +allerlei andere dingen bevatten, zoals + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex kop +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi +@cindex kop +@cindex opmaak +@cindex midi + +@noindent +Merk op dat deze drie commando's -- @code{\header}, +@code{\layout} en @code{\midi} -- speciaal zijn: in +tegenstelling tot veel andere commando's die met een +backslash (@code{\}) beginnen zijn het @emph{geen} +muziekuitdrukkingen en ze zijn ook geen onderdeel van een +muziekuitdrukking. Ze kunnen zowel binnen als buiten het +@code{\score}-blok worden geplaatst. Deze commando's worden +gewoonlijk dan ook buiten het @code{\score}-blok gezet +-- bijvoorbeeld, @code{\header} staat meestal boven het +@code{\score}-commando, zoals het in eerste voorbeeld van +deze paragraaf. + +De twee andere commando's die je niet eerder hebt gezien +zijn @code{\layout @{ @}} en @code{\midi @{@}}. Als deze +gebruikt worden als hierboven laten ze LilyPond +respectievelijk geprinte- en MIDI-uitvoer genereren. Een +volledige beschrijving van deze commando's is te vinden in +de Notatiehandleiding -- @ruser{Score layout}, en +@ruser{Creating MIDI files}. + +@cindex partituren, verscheidene +@cindex boek blok, impliciet +@cindex impliciet boek blok +@funindex \book +@funindex boek + +Je kunt meer dan een @code{\score}-blok gebruiken. Elk +wordt behandeld als een afzonderlijke partituur en ze worden +allemaal samengevoegd in een enkel uitvoerbestand. Een +@code{\book}-commando is niet nodig -- die wordt impliciet +aangemaakt. Echter, als je afzonderlijke uitvoerbestanden +vanuit een @file{.ly}-bestand wil maken, dan moet het +@code{\book}-commando worden gebruikt om de verschillende +secties aan te geven: elk @code{\book}-blok produceert +een apart uitvoerbestand. + +Samengevat: + +Elk @code{\book}-blok geeft een apart uitvoerbestand (bijv., +een PDF-bestand). Als je er geen expliciet toevoegt, stopt +LilyPond je gehele invoercode impliciet in een +@code{\book}-blok. + +Elk @code{\score}-blok is een apart brok muziek binnen een +@code{\book}-blok. + +@cindex opmaakblok, effect van locatie + +Elk @code{\layout}-blok beïnvloedt het @code{\score}- of +@code{\book}-blok waarin het voorkomt -- d.w.z., een +@code{\layout}-blok binnen een @code{\score}-blok heeft +uitsluitend invloed op dat @code{\score}-blok, maar een +@code{\layout}-blok buiten een @code{\score}-blok (en dus +binnen een @code{\book}-blok, expliciet danwel impliciet) +beïnvloedt elke @code{\score} in dat @code{\book}. + +Voor details zie @ruser{Multiple scores in a book}. + +@cindex variabelen + +Een andere manier van afkorten is het gebruik van +variabelen, zoals getoond in @ref{Stukken organiseren met +variabelen}. Alle sjablonen gebruiken dat: + +@example +melodie = \relative c' @{ + c4 a b c +@} + +\score @{ + \melodie +@} +@end example + +Als LilyPond naar dit bestand kijkt, neemt het de waarde van +@code{melodie} (alles na het isgelijkteken) en voegt die in +zodra ergens @code{\melody} staat. De naam van de variable +heeft verder geen speciale betekenis -- het kan net zo goed +@code{melodie}, @code{globaal}, @code{TijdSleutel}, +@code{pianorechterhand}, of iets anders zijn. Bedenk dat je +vrijwel elke naam kunt gebruiken die je wilt, zolang die +maar bestaat uit letters en het niet de naam is van een +LilyPond-commando. Voor meer details, zie @ref{Saving +typing with variables and functions}. De precieze +beperkingen van variabelenamen staan beschreven in +@ruser{File structure}. + + +@seealso +Voor een volledige definitie van het invoerformaat, zie +@ruser{File structure}. + + +@node Score is a (single) compound musical expression +@subsection Score is a (single) compound musical expression + +@funindex \score +@funindex score +@cindex score +@cindex contents of a score block +@cindex score block, contents of +@cindex compound music expression +@cindex music expression, compound + +We saw the general organization of LilyPond input files in the +previous section, @ref{Introduction to the LilyPond file structure}. +But we seemed to skip over the most important part: how do we figure +out what to write after @code{\score}? + +We didn't skip over it at all. The big mystery is simply that +there @emph{is} no mystery. This line explains it all: + +@quotation +@emph{A @code{\score} block must begin with a compound music expression.} +@end quotation + +@noindent +To understand what is meant by a music expression and a compound +music expression, you may find it useful to review the tutorial, +@ref{Music expressions explained}. In that section, we saw how to +build big music expressions from small pieces -- we started from +notes, then chords, etc. Now we're going to start from a big +music expression and work our way down. For simplicity, we'll use +just a singer and piano in our example. We don't need a +@code{StaffGroup} for this ensemble, which simply groups a number +of staves together with a bracket at the left, but we do need +staves for a singer and a piano, though. + +@example +\score @{ + << + \new Staff = "singer" << + >> + \new PianoStaff = "piano" << + >> + >> + \layout @{ @} +@} +@end example + +Here we have given names to the staves -- @qq{singer} and +@qq{piano}. This is not essential here, but it is a useful habit +to cultivate so that you can see at a glance what each stave is +for. + +Remember that we use @code{<< ... >>} instead of @code{@{ ... @}} to +show simultaneous music. This causes the vocal part and piano part +to appear one above the other in the score. The @code{<< ... >>} +construct would not be necessary for the Singer staff in the example +above if it were going to contain only one sequential music +expression, but @code{<< ... >>} rather than braces is necessary if +the music in the Staff is to contain two or more simultaneous +expressions, e.g. two simultaneous Voices, or a Voice with lyrics. +We're going to have a voice with lyrics, so angle brackets are +required. We'll add some real music later; for now let's just put +in some dummy notes and lyrics. If you've forgotten how to add lyrics +you may wish to review @code{\addlyrics} in @ref{Setting simple songs}. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +Now we have a lot more details. We have the singer's staff: it +contains a @code{Voice} (in LilyPond, this term refers to a set of +notes, not necessarily vocal notes -- for example, a violin +generally plays one voice) and some lyrics. We also have a piano +staff: it contains an upper staff (right hand) and a lower staff +(left hand), although the lower staff has yet to be given a bass +clef. + +At this stage, we could start filling in notes. Inside the curly +braces next to @code{\new Voice = "vocal"}, we could start writing + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +But if we did that, the @code{\score} section would get pretty +long, and it would be harder to understand what was happening. So +let's use variables instead. These were introduced at the end +of the previous section, remember? To ensure the contents of the +@code{text} variable are interpreted as lyrics we preface them with +@code{\lyricmode}. Like @code{\addlyrics}, this switches the input +mode to lyrics. Without that, LilyPond would try to interpret the +contents as notes, which would generate errors. (Several other +input modes are available, see @ruser{Input modes}.) + +So, adding a few notes and a bass clef for the left hand, we now +have a piece of real music: + +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e } + +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } + >> + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond + +When writing (or reading) a @code{\score} section, just take it +slowly and carefully. Start with the outer level, then work on +each smaller level. It also really helps to be strict with +indentation -- make sure that each item on the same level starts +on the same horizontal position in your text editor. + + +@seealso +Notation Reference: @ruser{Structure of a score}. + + +@node Nesting music expressions +@subsection Nesting music expressions + +@cindex staves, temporary +@cindex temporary staves +@cindex ossias + +It is not essential to declare all staves at the beginning; they may +be introduced temporarily at any point. This is particularly useful +for creating ossia sections -- see @rglos{ossia}. Here is a simple +example showing how to introduce a new staff temporarily for the +duration of three notes: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Note that the size of the clef is the same as a clef printed +following a clef change -- slightly smaller than the clef +at the beginning of the line. This is usual for clefs printed +in the middle of a line. + +@cindex staff, positioning + +The ossia section may be placed above the staff +as follows: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f8 c c } + \new Staff \with { + alignAboveContext = #"main" + } { f8 f c } + >> + r4 | + } +} +@end lilypond + +This example uses @code{\with}, which will be explained more +fully later. It is a means of modifying the default behavior +of a single Staff. Here it says that the new staff should be +placed above the staff called @qq{main} instead of the default +position which is below. + + +@seealso +Ossia are often written without clef and without +time signature and are usually in a smaller font. +These require further commands which +have not yet been introduced. See @ref{Size of objects}, +and @ruser{Ossia staves}. + + +@node On the un-nestedness of brackets and ties +@subsection On the un-nestedness of brackets and ties + +@cindex brackets, nesting +@cindex bracket types +@cindex brackets, enclosing vs. marking + +You have already met a number of different types of bracket and +bracket-like constructs in writing the input file to LilyPond. +These obey different rules which can be confusing at first. +Let's first review the different types of brackets and bracket-like +constructs. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Bracket Type + @tab Function +@item @code{@{ .. @}} + @tab Encloses a sequential segment of music +@item @code{< .. >} + @tab Encloses the notes of a chord +@item @code{<< .. >>} + @tab Encloses simultaneous music expressions +@item @code{( .. )} + @tab Marks the start and end of a slur +@item @code{\( .. \)} + @tab Marks the start and end of a phrasing slur +@item @code{[ .. ]} + @tab Marks the start and end of a manual beam +@end multitable + +To these we should add other constructs which generate lines +between or across notes: ties (marked by a tilde, @code{~}), +tuplets written as @code{\times x/y @{..@}}, and grace notes +written as @code{\grace@{..@}}. + +Outside LilyPond, the conventional use of brackets requires the +different types to be properly nested, like this, @code{<< [ @{ ( .. ) +@} ] >>}, with the closing brackets being encountered in exactly the +opposite order to the opening brackets. This @strong{is} a +requirement for the three types of bracket described by the word +@q{Encloses} in the table above -- they must nest properly. However, +the remaining bracket-like constructs, described with the word +@q{Marks} in the table above together with ties and tuplets, do +@strong{not} have to nest properly with any of the brackets or +bracket-like constructs. In fact, these are not brackets in +the sense that they enclose something -- they are simply markers to +indicate where something starts and ends. + +So, for example, a phrasing slur can start before a manually +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 } +@end lilypond + +In general, different kinds of brackets, bracket-like constructs, +and those implied by tuplets, ties and grace notes, may be mixed +freely. This example shows a beam extending into a tuplet (line 1), +a slur extending into a tuplet (line 2), a beam and a slur +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.\) +} +@end lilypond + + +@node Voices contain music +@section Voices contain music + +Singers need voices to sing, and so does LilyPond. +The actual music for all instruments in a score +is contained in Voices -- the most fundamental +of all LilyPond's concepts. + +@menu +* I'm hearing Voices:: +* Explicitly instantiating voices:: +* Voices and vocals:: +@end menu + +@node I'm hearing Voices +@subsection I'm hearing Voices + +@cindex polyphony +@cindex layers +@cindex multiple voices +@cindex voices, multiple +@cindex Voice context +@cindex context, Voice +@cindex simultaneous music +@cindex music, simultaneous +@cindex concurrent music +@cindex music, concurrent +@cindex voices vs. chords +@cindex chords vs. voices + +The lowest, most fundamental or innermost layers in a LilyPond +score are called @q{Voice contexts} or just @q{Voices} for short. +Voices are sometimes called @q{layers} in other notation +packages. + +In fact, a Voice layer or context is the only one which can contain +music. If a Voice context is not explicitly declared one is created +automatically, as we saw at the beginning of this chapter. Some +instruments such as an Oboe can play only one note at a time. Music +written for such instruments is monophonic and requires just a single +voice. Instruments which can play more than one note at a time like +the piano will often require multiple voices to encode the different +concurrent notes and rhythms they are capable of playing. + +A single voice can contain many notes in a chord, of course, +so when exactly are multiple voices needed? Look first at +this example of four chords: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +This can be expressed using just the single angle bracket chord +symbols, @code{< ... >}, and for this just a single voice is +needed. But suppose the F-sharp were actually an eighth-note +followed by an eighth-note G, a passing note on the way to the A? +Now we have two notes which start at the same time but have +different durations: the quarter-note D and the eighth-note +F-sharp. How are these to be coded? They cannot be written as +a chord because all the notes in a chord must have the same +duration. And they cannot be written as two sequential notes +as they need to start at the same time. This is when two +voices are required. + +Let us see how this is done in LilyPond input syntax. + +@funindex << \\ >> +@funindex \\ + +The easiest way to enter fragments with more than one voice on a +staff is to enter each voice as a sequence (with @code{@{...@}}), +and combine them simultaneously with angle brackets, @code{<<...>>}. +The fragments must also be separated with double backward slashes, +@code{\\}, to place them in separate voices. Without these, the +notes would be entered into a single voice, which would usually +cause errors. This technique is particularly suited to pieces of +music which are largely monophonic with occasional short sections +of polyphony. + +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] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Notice how the stems of the second voice now point down. + +Here's another simple example: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | +<< { a2. r4 } \\ { fis2. s4 } >> | +@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 +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] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +@cindex voices, naming +@cindex voices crossing brackets +@cindex slurs crossing brackets +@cindex ties crossing brackest + +This example has just two voices, but the same construct may be +used to encode three or more voices by adding more back-slash +separators. + +The Voice contexts bear the names @code{"1"}, @code{"2"}, etc. +In each of these contexts, the vertical direction of slurs, +stems, ties, dynamics etc., is set appropriately. + +@lilypond[quote,verbatim,fragment] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> | + << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | +} +@end lilypond + +These voices are all separate from the main voice that contains +the notes just outside the @code{<< .. >>} construct. Let's call +this the @emph{simultaneous construct}. Slurs and ties may only +connect notes within the same voice, so slurs and ties cannot go +into or out of a simultaneous construct. Conversely, +parallel voices from separate simultaneous constructs on the same +staff are the same voice. Other voice-related properties also +carry across simultaneous constructs. Here is the same example, +with different colors and note heads for each voice. Note that +changes in one voice do not affect other voices, but they do +persist in the same voice later. Note also that tied notes may be +split across the same voices in two constructs, shown here in the +blue triangle voice. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> | + << % Bar 2 + % Voice 1 continues + { d2 e } + \\ + % Voice 2 continues + { c8 b16 a b8 g~ g2 } + \\ + { + \voiceThreeStyle + s4 b c2 + } + >> | +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +The commands @code{\voiceXXXStyle} are mainly intended for use in +educational documents such as this one. They modify the color +of the note head, the stem and the beams, and the style of the +note head, so that the voices may be easily distinguished. +Voice one is set to red diamonds, voice two to blue triangles, +voice three to green crossed circles, and voice four (not used +here) to magenta crosses; @code{\voiceNeutralStyle} (also not +used here) reverts the style back to the default. +We shall see later how commands like these may be created by the +user. +See @ref{Visibility and color of objects} and +@ref{Using variables for tweaks}. + +@cindex polyphony and relative note entry +@cindex relative note entry and polyphony + +Polyphony does not change the relationship of notes within a +@code{\relative} block. Each note is still calculated relative to +the note immediately preceding it, or to the first note of the +preceding chord. So in + +@example +\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} +@end example + +@noindent +@code{noteB} is relative to @code{noteA} @* +@code{noteC} is relative to @code{noteB}, not @code{noteA}; @* +@code{noteD} is relative to @code{noteB}, not @code{noteA} or +@code{noteC}; @* +@code{noteE} is relative to @code{noteD}, not @code{noteA}. + +An alternative way, which may be clearer if the notes in the +voices are widely separated, is to place a @code{\relative} +command at the start of each voice: + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +\\ + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +Let us finally analyze the voices in a more complex piece of music. +Here are the notes from the first two bars of the second of Chopin's +Deux Nocturnes, Op 32. This example will be used at later stages in +this and the next chapter to illustrate several techniques for +producing notation, so please ignore for now anything in the +underlying code which looks mysterious and concentrate just on the +music and the voices -- the complications will all be explained in +later sections. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +The direction of the stems is often used to indicate the continuity of +two simultaneous melodic lines. Here the stems of the highest notes +are all pointing up and the stems of the lower notes are all pointing +down. This is the first indication that more than one voice is +required. + +But the real need for multiple voices arises when notes +which start at the same time have different durations. +Look at the notes which start at beat three in the first +bar. The A-flat is a dotted quarter note, the F is a +quarter note and the D-flat is a half note. These +cannot be written as a chord as all the notes in a chord +must have the same duration. Neither can they be written +as sequential notes, as they must start at the same time. +This section of the bar requires three voices, and the +normal practice would be to write the whole bar as three +voices, as shown below, where we have used different note heads +and colors for the three voices. Again, the code behind this +example will be explained later, so ignore anything you do +not understand. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + + +Let us try to encode this music from scratch. As we +shall see, this encounters some difficulties. We begin as +we have learnt, using the @code{<< \\ >>} construct to +enter the music of the first bar in three voices: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des } + >> | + 1 | +} +@end lilypond + +@cindex stem down +@cindex voices and stem directions +@cindex stem directions and voices +@cindex stem up + +The stem directions are automatically assigned with the +odd-numbered voices taking upward stems and the even-numbered +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 +adding another pair of @code{\\}. + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des } + >> | + 1 | +} +@end lilypond + +@noindent +We see that this fixes the stem direction, but exposes a problem +sometimes encountered with multiple voices -- the stems of the notes +in one voice can collide with the note heads in other voices. In +laying out the notes, LilyPond allows the notes or chords from two +voices to occupy the same vertical note column provided the stems are +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 +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}. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + +@node Explicitly instantiating voices +@subsection Explicitly instantiating voices + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex voice contexts, creating + +Voice contexts can also be created manually +inside a @code{<< >>} block to create polyphonic music, using +@code{\voiceOne} ... @code{\voiceFour} to indicate the required +directions of stems, slurs, etc. In longer scores this method +is clearer, as it permits the voices to be separated and to be +given more descriptive names. + +Specifically, the construct @code{<< \\ >>} which we used in +the previous section: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +is equivalent to + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Both of the above would produce + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex voices, reverting to single +@cindex reverting to a single voice + +The @code{\voiceXXX} commands set the direction of stems, slurs, +ties, articulations, text annotations, augmentation dots of dotted +notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} +make these objects point upwards, while @code{\voiceTwo} and +@code{\voiceFour} make them point downwards. These commands also +generate a horizontal shift for each voice when this is required +to avoid clashes of note heads. The command @code{\oneVoice} +reverts the settings back to the normal values for a single voice. + +Let us see in some simple examples exactly what effect +@code{\oneVoice}, @code{\voiceOne} and @code{voiceTwo} have on +markup, ties, slurs, and dynamics: + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + % Default behavior or behavior after \oneVoice + c4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceOne + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \voiceTwo + c4 d8~ d e4( f | g4 a) b-> c | + \oneVoice + c,4 d8~ d e4( f | g4 a) b-> c | +} +@end lilypond + +Now let's look at three different ways to notate the same passage +of polyphonic music, each of which is advantageous in different +circumstances, using the example from the previous section. + +An expression that appears directly inside a @code{<< >>} belongs +to the main voice (but, note, @strong{not} in a @code{<< \\ >>} +construct). This is useful when extra voices appear while the +main voice is playing. Here is a more correct rendition of our +example. The red diamond-shaped notes +demonstrate that the main melody is now in a single voice context, +permitting a phrasing slur to be drawn over them. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b c2 | + } + >> +} +@end lilypond + +@cindex nesting music expressions +@cindex nesting simultaneous constructs +@cindex nesting voices +@cindex voices, temporary +@cindex voices, nesting + +More deeply nested polyphony constructs are possible, and if a +voice appears only briefly this might be a more natural way to +typeset the music: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ | + << + { c8 b16 a b8 g~ g2 | } + \new Voice { + \voiceThree + s4 b c2 | + } + >> + } + >> +} +@end lilypond + +@cindex spacing notes + +This method of nesting new voices briefly is useful +when only small sections of the music +are polyphonic, but when the whole staff is largely polyphonic +it can be clearer to use multiple voices throughout, using +spacing notes to step over sections where the voice is silent, +as here: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b c2 | + } +>> +@end lilypond + +@subsubheading Note columns + +@cindex note column +@cindex note collisions +@cindex collisions, notes +@cindex shift commands +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +Closely spaced notes in a chord, or notes occurring at the same +time in different voices, are arranged in two, occasionally more, +columns to prevent the note heads overlapping. These are called +note columns. There are separate columns for each voice, and +the currently specified voice-dependent shift is applied to the +note column if there would otherwise be a collision. This can +be seen in the example above. In bar 2 the C in voice two is +shifted to the right relative to the D in voice one, and in the +final chord the C in voice three is also shifted to the right +relative to the other notes. + +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 +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 right and voices two and four to the left. + +@code{\shiftOnn} and @code{\shiftOnnn} define further shift +levels which may be specified temporarily to resolve collisions +in complex situations -- see @ref{Real music example}. + +A note column can contain just one note (or chord) from a voice +with stems up and one note (or chord) from a voice with stems +down. If notes from two voices which have their stems in the +same direction are placed at the same position and both voices +have no shift or the same shift specified, the error message +@qq{Too many clashing note columns} will be produced. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + +@node Voices and vocals +@subsection Voices and vocals + +Vocal music presents a special difficulty: we need to combine two +expressions -- notes and lyrics. + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics context, creating +@cindex lyrics, linking to voice + +You have already seen the @code{\addlyrics@{@}} command, which +handles simple scores well. However, this technique is +quite limited. For more complex music, you must introduce the +lyrics in a @code{Lyrics} context using @code{\new Lyrics} and +explicitly link +the lyrics to the notes with @code{\lyricsto@{@}}, using the +name assigned to the Voice. + +@lilypond[quote,verbatim,fragment] +<< + \new Voice = "one" { + \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 | g4. f8 | e4 d | c2 | + } + } + \new Lyrics \lyricsto "one" { + No more let | sins and | sor -- rows | grow. | + } +>> +@end lilypond + +Note that the lyrics must be linked to a @code{Voice} context, +@emph{not} a @code{Staff} context. This is a case where it is +necessary to create @code{Staff} and @code{Voice} contexts +explicitly. + +@cindex lyrics and beaming +@cindex beaming and lyrics +@funindex \autoBeamOff +@funindex autoBeamOff + +The automatic beaming which LilyPond uses by default works well +for instrumental music, but not so well for music with lyrics, +where beaming is either not required at all or is used to indicate +melismata in the lyrics. In the example above we use the command +@code{\autoBeamOff} to turn off the automatic beaming. + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode +@cindex vocal score structure +@cindex choir staff + +Let us reuse the earlier example from Judas Maccabæus to +illustrate this more flexible technique. We first recast +it to use variables so the music and lyrics can be separated +from the staff structure. We also introduce a ChoirStaff +bracket. The lyrics themselves must be introduced with +@code{\lyricmode} to ensure they are interpreted as lyrics +rather than music. + +@lilypond[quote,verbatim] +global = { \key f \major \time 6/8 \partial 8 } + +SopOneMusic = \relative c'' { + c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 +} +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ +} +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' +} +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +This is the basic structure of all vocal scores. More staves may be +added as required, more voices may be added to the staves, more verses +may be added to the lyrics, and the variables containing the music can +easily be placed in separate files should they become too long. + +@cindex hymn structure +@cindex SATB structure +@cindex vocal scores with multiple verses +@cindex multiple vocal verses +@cindex verses, multiple vocal + +Here is an example of the first line of a hymn with four +verses, set for SATB. In this case the words for all four +parts are the same. Note how we use variables to separate the +music notation and words from the staff structure. See too +how a variable, which we have chosen to call @q{keyTime}, is used +to hold several commands for use within the two staves. In other +examples this is often called @q{global}. + +@lilypond[quote,verbatim] +keyTime = { \key c \major \time 4/4 \partial 4 } + +SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } + +VerseOne = + \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = + \lyricmode { O | Christ, whose voice the | wa -- ters heard, } +VerseThree = + \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = + \lyricmode { O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + + +@seealso +Notation Reference: @ruser{Vocal music}. + + +@node Contexts and engravers +@section Contexts and engravers + +Contexts and engravers have been mentioned informally +in earlier sections; we now must look at +these concepts in more detail, as they are important +in the fine-tuning of LilyPond output. + + +@menu +* Contexts explained:: +* Creating contexts:: +* Engravers explained:: +* Modifying context properties:: +* Adding and removing engravers:: +@end menu + +@node Contexts explained +@subsection Contexts explained + +@cindex contexts explained + +When music is printed, many notational elements which do not +appear explicitly in the input file must be added to the +output. For example, compare the input and output of the +following example: + +@lilypond[quote,verbatim,relative=2,fragment] +cis4 cis2. | a4 a2. | +@end lilypond + +The input is rather sparse, but in the output, bar lines, +accidentals, clef, and time signature have been added. When +LilyPond @emph{interprets} the input the musical information +is parsed from left to right, similar to the way a performer +reads the score. While reading the input, the program remembers +where measure boundaries are, and which pitches require explicit +accidentals. This information must be held on several levels. +For example, an accidental affects only a single staff, while +a bar line must be synchronized across the entire score. + +Within LilyPond, these rules and bits of information are grouped in +@emph{Contexts}. We have already introduced the @code{Voice} context. +Others are the @code{Staff} and @code{Score} contexts. Contexts are +hierarchical to reflect the hierarchical nature of a musical score. +For example: a @code{Staff} context can contain many @code{Voice} +contexts, and a @code{Score} context can contain many @code{Staff} +contexts. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Each context has the responsibility for enforcing some notation rules, +creating some notation objects and maintaining the associated +properties. For example, the @code{Voice} context may introduce an +accidental and then the @code{Staff} context maintains the rule to +show or suppress the accidental for the remainder of the measure. + +As another example, the synchronization of bar lines is, by default, +handled in the @code{Score} context. +However, in some music we may not want the bar lines to be +synchronized -- consider a polymetric score in 4/4 and 3/4 time. +In such cases, we must modify the default settings of the +@code{Score} and @code{Staff} contexts. + +For very simple scores, contexts are created implicitly, and you need +not be aware of them. For larger pieces, such as anything with more +than one staff, they must be +created explicitly to make sure that you get as many staves as you +need, and that they are in the correct order. For typesetting pieces +with specialized notation, it is usual to modify existing, or +even to define totally new, contexts. + +In addition to the @code{Score,} @code{Staff} and +@code{Voice} contexts there are contexts which fit between +the score and staff levels to control staff groups, such as the +@code{PianoStaff} and @code{ChoirStaff} contexts. There +are also alternative staff and voice contexts, and contexts for +lyrics, percussion, fret boards, figured bass, etc. + +The names of all context types are formed from one or more +words, each word being capitalized and joined immediately to the +preceding word with no hyphen or underscore, e.g., +@code{GregorianTranscriptionStaff}. + + +@seealso +Notation Reference: @ruser{Contexts explained}. + + +@node Creating contexts +@subsection Creating contexts + +@funindex \new +@funindex new +@cindex new contexts +@cindex creating contexts +@cindex contexts, creating + +In an input file a score block, introduced with a @code{\score} +command, contains a single music expression and an associated +output definition (either a @code{\layout} or a @code{\midi} block). +The @code{Score} context is usually left to be created automatically +when the interpretation of that music expression starts. + +For scores with only one voice and one staff, the @code{Voice} and +@code{Staff} contexts may also be left to be created automatically, +but for more complex scores it is necessary to create them by hand. +The simplest command that does this is @code{\new}. It is prepended +to a music expression, for example + +@example +\new @var{type} @var{music-expression} +@end example + +@noindent +where @var{type} is a context name (like @code{Staff} or +@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}.) + +You have seen many practical examples which created new +@code{Staff} and @code{Voice} contexts in earlier sections, but +to remind you how these commands are used in practice, here's an +annotated real-music example: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \clef "treble" + \key g \minor + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. | + d4 ees16 c8. | + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \clef "bass" + \key g \minor + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, | + g8 ees, | + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees | + g4 ees | + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Note how all the statements which open a block with either a +curly bracket, @code{@{}, or double angle brackets, @code{<<}, +are indented by two further spaces, and the corresponding +closing bracket is indented by exactly the same amount. While +this is not required, following this practice will greatly +reduce the number of @q{unmatched bracket} errors, and is +strongly recommended. It enables the structure of the music to +be seen at a glance, and any unmatched brackets will be obvious. +Note too how the LH staff is created using double angle brackets +because it requires two voices for its music, whereas the RH staff +is created with a single music expression surrounded by curly +brackets because it requires only one voice.) + +@cindex contexts, naming +@cindex naming contexts + +The @code{\new} command may also give an identifying name to the +context to distinguish it from other contexts of the same type, + +@example +\new @var{type} = @var{id} @var{music-expression} +@end example + +Note the distinction between the name of the context type, +@code{Staff}, @code{Voice}, etc, and the identifying name of a +particular instance of that type, which can be any sequence of letters +invented by the user. Digits and spaces can also be used in the +identifying name, but then it has to be placed in quotes, +i.e. @code{\new Staff = "MyStaff 1" @var{music-expression}}. +The identifying name is used to +refer back to that particular instance of a context. We saw this in +use in the section on lyrics, see @ref{Voices and vocals}. + + +@seealso +Notation Reference: @ruser{Creating contexts}. + + +@node Engravers explained +@subsection Engravers explained + +@cindex engravers + +Every mark on the printed output of a score produced by LilyPond +is produced by an @code{Engraver}. Thus there is an engraver +to print staves, one to print note heads, one for stems, one for +beams, etc, etc. In total there are over 120 such engravers! +Fortunately, for most scores it is not necessary to know about +more than a few, and for simple scores you do not need to know +about any. + +Engravers live and operate in Contexts. Engravers such as the +@code{Metronome_mark_engraver}, whose action and output apply to the +score as a whole, operate in the highest level context -- the +@code{Score} context. + +The @code{Clef_engraver} and @code{Key_engraver} are to be +found in every @code{Staff} Context, as different staves may require +different clefs and keys. + +The @code{Note_heads_engraver} and @code{Stem_engraver} live +in every @code{Voice} context, the lowest level context of all. + +Each engraver processes the particular objects associated +with its function, and maintains the properties that relate +to that function. These properties, like the properties +associated with contexts, may be modified to change the +operation of the engraver or the appearance of those elements +in the printed score. + +Engravers all have compound names formed from words which +describe their function. Just the first word is capitalized, +and the remainder are joined to it with underscores. Thus +the @code{Staff_symbol_engraver} is responsible for creating the +lines of the staff, the @code{Clef_engraver} determines and sets +the pitch reference point on the staff by drawing a clef symbol. + +Here are some of the most common engravers together with their +function. You will see it is usually easy to guess the function +from the name, or vice versa. + +@multitable @columnfractions .3 .7 +@headitem Engraver + @tab Function +@item Accidental_engraver + @tab Makes accidentals, cautionary and suggested accidentals +@item Beam_engraver + @tab Engraves beams +@item Clef_engraver + @tab Engraves clefs +@item Completion_heads_engraver + @tab Splits notes which cross bar lines +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Creates hairpins and dynamic texts +@item Forbid_line_break_engraver + @tab Prevents line breaks if a musical element is still active +@item Key_engraver + @tab Creates the key signature +@item Metronome_mark_engraver + @tab Engraves metronome marking +@item Note_heads_engraver + @tab Engraves note heads +@item Rest_engraver + @tab Engraves rests +@item Staff_symbol_engraver + @tab Engraves the five (by default) lines of the staff +@item Stem_engraver + @tab Creates stems and single-stem tremolos +@item Time_signature_engraver + @tab Creates time signatures +@end multitable + +@smallspace + +We shall see later how the output of LilyPond can be changed +by modifying the action of Engravers. + + +@seealso +Internals reference: @rinternals{Engravers and Performers}. + + +@node Modifying context properties +@subsection Modifying context properties + +@cindex context properties +@cindex context properties, modifying +@cindex modifying context properties +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +Contexts are responsible for holding the values of a number of +context @emph{properties}. Many of them can be changed to +influence the interpretation of the input and so change the +appearance of the output. They are changed by the +@code{\set} command. This takes the form + +@example +\set @emph{ContextName}.@emph{propertyName} = #@emph{value} +@end example + +Where the @emph{ContextName} is usually @code{Score}, +@code{Staff} or @code{Voice}. It may be omitted, +in which case the current context (typically @code{Voice}) is assumed. + +The names of context properties consist of words joined +together with no hyphens or underscores, all except the +first having a capital letter. Here are a few examples +of some commonly used ones. There are many more. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem propertyName + @tab Type + @tab Function + @tab Example Value +@item extraNatural + @tab Boolean + @tab If true, set extra natural signs before accidentals + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Integer + @tab Set the current bar number + @tab @code{50} +@item doubleSlurs + @tab Boolean + @tab If true, print slurs both above and below notes + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Text + @tab Set the name to be placed at the start of the staff + @tab @code{"Cello I"} +@item fontSize + @tab Real + @tab Increase or decrease the font size + @tab @code{2.4} +@item stanza + @tab Text + @tab Set the text to print before the start of a verse + @tab @code{"2"} +@end multitable + +@noindent +where a Boolean is either True (@code{#t}) or False (@code{#f}), +an Integer is a positive whole number, a Real is a positive +or negative decimal number, and text is enclosed in double +apostrophes. Note the occurrence of hash signs, +(@code{#}), in two different places -- as part of the Boolean +value before the @code{t} or @code{f}, and before @emph{value} +in the @code{\set} statement. So when a Boolean is being +entered you need to code two hash signs, e.g., @code{##t}. + +@cindex properties operating in contexts +@cindex setting properties within contexts + +Before we can set any of these properties we need to know +in which context they operate. Sometimes this is obvious, +but occasionally it can be tricky. If the wrong context +is specified, no error message is produced, but the expected +action will not take place. For example, the +@code{instrumentName} clearly lives in the @code{Staff} context, since +it is the staff that is to be named. +In this example the first staff is labelled, but not the second, +because we omitted the context name. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c2 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d2 d + } +>> +@end lilypond + +Remember the default context name is @code{Voice}, so the second +@code{\set} command set the property @code{instrumentName} in the +@code{Voice} context to @qq{Alto}, but as LilyPond does not look +for any such property in the @code{Voice} context, no +further action took place. This is not an error, and no error +message is logged in the log file. + +Similarly, if the property name is mis-spelt no error message is +produced, and clearly the expected action cannot be performed. In +fact, you can set any (fictitious) @q{property} using any name you +like in any context that exists by using the @code{\set} command. But +if the name is not known to LilyPond it will not cause any action to +be taken. Some text editors with special support for LilyPond input +files document property names with bullets when you hover them with +the mouse, like JEdit with LilyPondTool, or highlight unknown property +names differently, like ConTEXT. If you do not use an editor with +such features, it is recommended to check the property name in the +Internals Reference: see @rinternals{Tunable context properties}, or +@rinternals{Contexts}. + +The @code{instrumentName} property will take effect only +if it is set in the @code{Staff} context, but +some properties can be set in more than one context. +For example, the property @code{extraNatural} is by +default set to ##t (true) for all staves. +If it is set to ##f (false) in one particular @code{Staff} +context it applies just to the accidentals on that staff. +If it is set to false in the @code{Score} context +it applies to all staves. + +So this turns off extra naturals in one staff: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +@noindent +and this turns them off in all staves: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais2 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais2 aes + } +>> +@end lilypond + +As another example, if @code{clefOctavation} is set in +the @code{Score} context this immediately changes the value +of the octavation in all current staves and sets a new default +value which will be applied to all staves. + +The opposite command, @code{\unset}, effectively removes the +property from the context, which causes most properties to +revert to their default value. Usually @code{\unset} is not +required as a new @code{\set} command will achieve what is +wanted. + +The @code{\set} and @code{\unset} commands can appear anywhere +in the input file and will take effect from the time they are +encountered until the end of the score or until the property is +@code{\set} or @code{\unset} again. Let's try changing the +font size, which affects the size of the note heads (among +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] +c4 d +% make note heads smaller +\set fontSize = #-4 +e4 f | +% make note heads larger +\set fontSize = #2.5 +g4 a +% return to default size +\unset fontSize +b4 c | +@end lilypond + +We have now seen how to set the values of several different types of +property. Note that integers and numbers are always preceded by a +hash sign, @code{#}, while a true or false value is specified by +@code{##t} and @code{##f}, with two hash signs. A text property +should be enclosed in double quotation signs, as above, although we +shall see later that text can actually be specified in a much more +general way by using the very powerful @code{\markup} command. + +@subsubheading Setting context properties with @code{\with} + +@funindex \with +@funindex with +@cindex context properties, setting with \with + +The default value of context properties may be set at the time the +context is created. Sometimes this is a clearer way of setting a +property value if it is to remain fixed for the duration of +the context. When a context is created with a @code{\new} +command it may be followed immediately by a @code{\with @{ .. @}} +block in which the default property values are set. For example, +if we wish to suppress the printing of extra naturals for the +duration of a staff we would write: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +like this: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + gis4 ges aes ais + } + } + \new Staff \with { extraNatural = ##f } { + \relative c'' { + gis4 ges aes ais + } + } +>> +@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}. + +@cindex fontSize, default and setting + +So if the @code{fontSize} property is set in a @code{\with} clause +it sets the default value of the font size. If it is later changed +with @code{\set}, this new default value may be restored with the +@code{\unset fontSize} command. + +@subsubheading Setting context properties with @code{\context} + +@cindex context properties, setting with \context +@funindex \context +@funindex context + +The values of context properties may be set in @emph{all} contexts +of a particular type, such as all @code{Staff} contexts, with a single +command. The context type is identified by using its +type name, like @code{Staff}, prefixed by a back-slash: @code{\Staff}. +The statement which sets the property value is the same as that in a +@code{\with} block, introduced above. It is placed in a +@code{\context} block within a @code{\layout} block. Each +@code{\context} block will affect all contexts of the type specified +throughout the @code{\score} or @code{\book} block in which the +@code{\layout} block appears. Here is a example to show the format: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@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} commands embedded in music statements. + + +@seealso +Notation Reference: +@ruser{Changing context default settings}. +@ruser{The set command}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + +@node Adding and removing engravers +@subsection Adding and removing engravers + +@cindex engravers, adding +@cindex adding engravers +@cindex engravers, removing +@cindex removing engravers + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +We have seen that contexts each contain several engravers, each +of which is responsible for producing a particular part of the +output, like bar lines, staves, note heads, stems, etc. If an +engraver is removed from a context, it can no longer produce its +output. This is a crude way of modifying the output, but it +can sometimes be useful. + +@subsubheading Changing a single context + +To remove an engraver from a single context we use the +@code{\with} command placed immediately after the context creation +command, as in the previous section. + +As an illustration, let's repeat an example from the previous section +with the staff lines removed. Remember that the staff lines are +produced by the @code{Staff_symbol_engraver}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 d + \set fontSize = #-4 % make note heads smaller + e4 f | + \set fontSize = #2.5 % make note heads larger + g4 a + \unset fontSize % return to default size + b4 c | +} +@end lilypond + +@cindex ambitus engraver + +Engravers can also be added to individual contexts. +The command to do this is + +@code{\consists @var{Engraver_name}}, + +@noindent +placed inside a @code{\with} block. Some vocal scores have an ambitus +placed at the beginning of a staff to indicate the range of notes in +that staff -- see @rglos{ambitus}. The ambitus is produced by the +@code{Ambitus_engraver}, which is not normally included in any +context. If we add it to the @code{Voice} context, it calculates the +range from that voice only: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@noindent +but if we add the ambitus engraver to the +@code{Staff} context, it calculates the range from all +the notes in all the voices on that staff: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver +} +<< + \new Voice { + \relative c'' { + \voiceOne + c4 a b g + } + } + \new Voice { + \relative c' { + \voiceTwo + c4 e d f + } + } +>> +@end lilypond + +@subsubheading Changing all contexts of the same type + +@funindex \layout +@funindex layout + +The examples above show how to remove or add engravers to +individual contexts. It is also possible to remove or add +engravers to every context of a specific type by placing the +commands in the appropriate context in a @code{\layout} +block. For example, if we wanted to show an ambitus for every +staff in a four-staff score, we could write + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \relative c'' { + c4 a b g + } + } + \new Staff { + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "G_8" + \relative c' { + c4 a b g + } + } + \new Staff { + \clef "bass" + \relative c { + c4 a b g + } + } + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +The values of context properties may also be set +for all contexts of a particular type by including the +@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}. + + +@node Extending the templates +@section Extending the templates + +You've read the tutorial, you know how to write music, you +understand the fundamental concepts. But how can you +get the staves that you want? Well, you can find lots of +templates (see @ref{Templates}) which may give you a start. +But what if you want something that isn't covered there? Read on. + +@menu +* Soprano and cello:: +* Four-part SATB vocal score:: +* Building a score from scratch:: +* Saving typing with variables and functions:: +* Scores and parts:: +@end menu + +@node Soprano and cello +@subsection Soprano and cello + +@cindex template, modifying +@cindex modifying templates + +Start off with the template that seems closest to what you want to +end up with. Let's say that you want to write something for +soprano and cello. In this case, we would start with the +@q{Notes and lyrics} template (for the soprano part). + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +text = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melody + @} + \new Lyrics \lyricsto "one" \text + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Now we want to add a cello part. Let's look at the @q{Notes only} example: + +@example +\version @w{"@version{}"} + +melody = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melody + \layout @{ @} + \midi @{ @} +@} +@end example + +We don't need two @code{\version} commands. We'll need the +@code{melody} section. We don't want two @code{\score} sections +-- if we had two @code{\score}s, we'd get the two parts separately. +We want them together, as a duet. Within the @code{\score} +section, we don't need two @code{\layout} or @code{\midi}. + +If we simply cut and paste the @code{melody} section, we would +end up with two @code{melody} definitions. This would not generate +an error, but the second one would be used for both melodies. +So let's rename them to make them distinct. We'll call the +section for the soprano @code{sopranoMusic} and the section for +the cello @code{celloMusic}. While we're doing this, let's rename +@code{text} to be @code{sopranoLyrics}. Remember to rename both +instances of all these names -- both the initial definition (the +@code{melody = \relative c' @{ } part) and the name's use (in the +@code{\score} section). + +While we're doing this, let's change the cello part's staff -- +celli normally use bass clef. We'll also give the cello some +different notes. + +@example +\version @w{"@version{}"} + +sopranoMusic = \relative c' @{ + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +@} + +sopranoLyrics = \lyricmode @{ + Aaa Bee Cee Dee +@} + +celloMusic = \relative c @{ + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +This is looking promising, but the cello part won't appear in the +score -- we haven't used it in the @code{\score} section. If we +want the cello part to appear under the soprano part, we need to add + +@example +\new Staff \celloMusic +@end example + +@noindent +underneath the soprano stuff. We also need to add @code{<<} and +@code{>>} around the music -- that tells LilyPond that there's +more than one thing (in this case, two @code{Staves}) happening +at once. The @code{\score} looks like this now: + +@c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +This looks a bit messy; the indentation is messed up now. That is +easily fixed. Here's the complete soprano and cello template. + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef "treble" + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef "bass" + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +The starting templates can be found in the @q{Templates} appendix, +see @ref{Single staff}. + + +@node Four-part SATB vocal score +@subsection Four-part SATB vocal score + +@cindex template, SATB +@cindex SATB template + +Most vocal scores of music written for four-part mixed choir +with orchestral accompaniment such as Mendelssohn's Elijah or +Handel's Messiah have the choral music and words on four +staves, one for each of SATB, with a piano reduction of the +orchestral accompaniment underneath. Here's an example +from Handel's Messiah: + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } + +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} + +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords + +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords + +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords + +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} + +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@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 +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. + +The order in which the contexts appear in the ChoirStaff of the +template do not correspond with the order in the vocal score shown +above. We need to rearrange them so there are four staves with the +words written directly underneath the notes for each part. All the +voices should be @code{\voiceOne}, which is the default, so the +@code{\voiceXXX} commands should be removed. We also need to specify +the tenor clef for the tenors. The way in which lyrics are specified +in the template has not yet been encountered so we need to use the +method with which we are familiar. We should also add the names of +each staff. + +Doing this gives for our ChoirStaff: + +@example +\new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} +>> % end ChoirStaff +@end example + +Next we must work out the piano part. This is +easy - we just pull out the piano part from the +@q{Solo piano} template: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower +>> +@end example + +and add the variable definitions for @code{upper} +and @code{lower}. + +The ChoirStaff and PianoStaff must be combined +using angle brackets as we want them to be +stacked one above the other: + +@example +<< % combine ChoirStaff and PianoStaff one above the other + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Combining all these together and adding the music +for the three bars of the example above gives: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy | is the lamb | that was slain | +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + +@node Building a score from scratch +@subsection Building a score from scratch + +@cindex template, writing your own +@cindex example of writing a score +@cindex writing a score, example +@cindex score, example of writing + +After gaining some facility with writing LilyPond code, you +may find that it is easier to build a score from scratch +rather than modifying one of the templates. You can also +develop your own style this way to suit the sort of music you +like. Let's see how to put together the score for an organ +prelude as an example. + +We begin with a header section. Here go the title, name +of composer, etc, then come any variable definitions, and +finally the score block. Let's start with these in outline +and fill in the details later. + +We'll use the first two bars of Bach's prelude +based on @emph{Jesu, meine Freude} which is written for two +manuals and pedal organ. You can see these two bars of music +at the bottom of this section. The top manual part has two voices, +the lower and pedal organ one each. So we need four +music definitions and one to define the time signature +and key: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +keyTime = @{ \key c \minor \time 4/4 @} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +For now we've just used a spacer note, @code{s1}, +instead of the real music. We'll add that later. + +Next let's see what should go in the score block. +We simply mirror the staff structure we want. +Organ music is usually written on three staves, +one for each manual and one for the pedals. The +manual staves should be bracketed together, so we +need to use a PianoStaff for them. The first +manual part needs two voices and the second manual +part just one. + +@example +\new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context +>> % end PianoStaff context +@end example + +Next we need to add a staff for the pedal organ. +This goes underneath the PianoStaff, but it must +be simultaneous with it, so we need angle brackets +around the two. Missing these out would generate +an error in the log file. It's a common mistake +which you'll make sooner or later! Try copying +the final example at the end of this section, +remove these angle brackets, and compile it to +see what errors it generates. + +@example +<< % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +It is not necessary to use the simultaneous construct +@code{<< .. >>} for the manual two staff and the pedal organ staff, +since they contain only one music expression, but it does no harm, +and always using angle brackets after @code{\new Staff} is a good +habit to cultivate in case there are multiple voices. The opposite +is true for Voices: these should habitually be followed by braces +@code{@{ .. @}} in case your music is coded in several variables +which need to run consecutively. + +Let's add this structure to the score block, and adjust the indenting. +We also add the appropriate clefs, ensure stems, ties and slurs in +each voice on the upper staff point to the right direction with +@code{\voiceOne} and @code{\voiceTwo}, and enter the key and time +signature to each staff using our predefined variable, @code{\keyTime}. + +@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" << + \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 +is to add the music, and combine all the parts together. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +keyTime = { \key c \minor \time 4/4 } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | + d2 c | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c8 c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f16 ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | +} + +\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" << + \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 context + >> +} % end Score context +@end lilypond + + +@node Saving typing with variables and functions +@subsection Saving typing with variables and functions + +@cindex variables +@cindex variables + +By this point, you've seen this kind of thing: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } + +\score { + { + \hornNotes + } +} +@end lilypond + +You may even realize that this could be useful in minimalist music: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } + +violin = \new Staff { + \fragmentA \fragmentA | + \fragmentB \fragmentA | +} + +\score { + { + \violin + } +} +@end lilypond + +However, you can also use these variables (also known as +macros, or user-defined commands) for tweaks: + +@c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } + +padText = { \once \override TextScript #'padding = #5.0 } +fthenp =_\markup { + \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p +} + +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b | + \padText + c4.^"hi there!" d8 e' f g d | + c,4.\fthenp b8 c4 c-. | + } +} + +\score { + { + \violin + } + \layout { ragged-right = ##t } +} +@end lilypond + +These variables are obviously useful for saving +typing. But they're worth considering even if you +only use them once -- they reduce complexity. Let's +look at the previous example without any +variables. It's a lot harder to read, especially +the last line. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d | + c,4.\markup @{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p + @} + b8 c4 c-. | + @} +@} +@end example + +@c TODO Replace the following with a better example -td +@c Skylining handles this correctly without padText + +So far we've seen static substitution -- when LilyPond +sees @code{\padText}, it replaces it with the stuff that +we've defined it to be (ie the stuff to the right of +@code{padtext=}). + +LilyPond can handle non-static substitution, too (you +can think of these as functions). + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b | + \padText #1.8 + c4^"piu mosso" d e f | + \padText #2.6 + c4^"piu mosso" fis a g | +} +@end lilypond + +Using variables is also a good way to reduce work if the +LilyPond input syntax changes (see +@rprogram{Updating files with convert-ly}). If +you have a single definition (such as @code{\dolce}) for all your +input files (see @ref{Style sheets}), then if the syntax changes, you +only need to update your single @code{\dolce} definition, +instead of making changes throughout every @file{.ly} file. + + +@node Scores and parts +@subsection Scores and parts + +In orchestral music, all notes are printed twice. Once in a part for +the musicians, and once in a full score for the conductor. Variables can +be used to avoid double work. The music is entered once, and stored in +a variable. The contents of that variable is then used to generate +both the part and the full score. + +It is convenient to define the notes in a special file. For example, +suppose that the file @file{horn-music.ly} contains the following part +of a horn/@/bassoon duo + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a | cis4 f | e4 d | +@} +@end example + +@noindent +Then, an individual part is made by putting the following in a file + +@example +\include "horn-music.ly" + +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +The line + +@example +\include "horn-music.ly" +@end example + +@noindent +substitutes the contents of @file{horn-music.ly} at this position in +the file, so @code{hornNotes} is defined afterwards. The command +@code{\transpose f@tie{}c'} indicates that the argument, being +@code{\hornNotes}, should be transposed by a fifth upwards. Sounding +@code{f} is denoted by notated @code{c'}, which corresponds with the +tuning of a normal French Horn in@tie{}F. The transposition can be seen +in the following output + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + +In ensemble pieces, one of the voices often does not play for many +measures. This is denoted by a special rest, the multi-measure +rest. It is entered with a capital @code{R} followed by a duration +(@code{1}@tie{}for a whole note, @code{2}@tie{}for a half note, +etc.). By multiplying the +duration, longer rests can be constructed. For example, this rest +takes 3@tie{}measures in 2/4 time + +@example +R2*3 +@end example + +When printing the part, multi-rests +must be condensed. This is done by setting a run-time variable + +@example +\set Score.skipBars = ##t +@end example + +@noindent +This command sets the property @code{skipBars} in the +@code{Score} context to true (@code{##t}). Prepending the rest and +this option to the music above, leads to the following result + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 | + r4 f8 a | cis4 f | e4 d | +} +@end lilypond + + +The score is made by combining all of the music together. Assuming +that the other voice is in @code{bassoonNotes} in the file +@file{bassoon-music.ly}, a score is made with + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +leading to + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \clef "treble" + \time 2/4 + R2*3 | + r4 f8 a | cis4 f | e4 d | + } + \new Staff { + \clef "bass" + \time 2/4 + r4 d,8 f | gis4 c | b4 bes | + a8 e f4 | g4 d | gis4 f | + } +>> +@end lilypond + + diff --git a/Documentation/nl/learning/tutorial.itely b/Documentation/nl/learning/tutorial.itely new file mode 100644 index 0000000000..0b08b426b0 --- /dev/null +++ b/Documentation/nl/learning/tutorial.itely @@ -0,0 +1,801 @@ +@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*- +@ignore + Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8 + + 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 Translator: Jan Nieuwenhuizen +@c Translation checker: +@c Translation checker committish: + +@include included/generating-output.itexi + +@c \version "2.14.0" + +@node Leerboek +@translationof Tutorial +@chapter Leerboek + +Dit hoofdstuk is de basisinleiding voor het werken met +LilyPond. + +@menu +* Het compileren van een bestand:: +* Het schrijven van invoerbestanden:: +* Omgaan met foutmeldingen:: +* Het lezen van de handleidingen:: +@end menu + +@node Het compileren van een bestand +@translationof Compiling a file +@section Het compileren van een bestand + +Deze paragraaf introduceert het @qq{compileren}---het +verwerken van LilyPond-invoerbestanden (geschreven door +jouzelf) voor het produceren van uitvoerbestanden. + +@menu +* Invoer schrijven:: +* MacOS X:: +* Windows:: +* Commandoregel:: +@end menu + +@node Invoer schrijven +@translationof Entering input +@subsection Invoer schrijven + +@cindex compileren +@cindex eerste voorbeeld +@cindex voorbeeld, eerste +@cindex hoofdlettergevoelig + +@qq{Compileren} is de term die gebruikt wordt voor het +verwerken van een invoerbestand in LilyPond-formaat voor het +produceren van één of meer uitvoerbestanden. +Uitvoerbestanden zijn gewoonlijk PDF (om te printen of te +bekijken), MIDI (om af te spelen), en PNG (for online +gebruik). LilyPond-invoerbestanden zijn gewone +tekstbestanden. + +Dit is een voorbeeld van een eenvoudig invoerbestand: + +@example +\version "@w{@version{}}" +@{ + c' e' g' e' +@} +@end example + +De grafische uitvoer is: + +@c in this case we don't want verbatim +@lilypond[quote] +{ + c' e' g' e' +} +@end lilypond + +@warning{Noten en liedteksten in LilyPond invoer moeten +altijd binnen @w{@strong{@{ accolades @}}} staan. Om +ambiguïteit te voorkomen moeten deze accolades altijd los +staan, d.w.z. omgeven zijn door witruimte, of aan het begin +of einde van een regel staan. In sommige voorbeelden in +deze handleiding zijn ze weggelaten, maar vergeet ze niet te +gebruiken in je eigen muziek! Voor meer informatie over hoe +voorbeelden worden afgebeeld in deze handleiding, zie +@ref{Het lezen van de handleidingen}.} + +LilyPond-invoer is @strong{hoofdlettergevoelig}. +@w{@samp{@{ c d e @}}} is geldige invoer; @w{@samp{@{ C D E +@}}} zal een foutmelding geven. + + +@smallspace + +@subheading Het produceren van uitvoer + +@cindex PDF-bestand +@cindex muziek weergeven +@cindex tekst-editors + +Hoe je uitvoer produceert, is afhankelijk van je operating +systeem en van de programma's die je gebruikt. + +@itemize + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} (grafisch) + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} (grafisch) + +@item +@ref{Commandoregel, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} +} +@ref{Commandoregel, Alle operating systemens} (commandoregel) + +@end itemize + +Er zijn verscheidene andere tekst-editors beschikbaar met +specifieke LilyPond-ondersteuning. Voor meer informatie, +zie @rweb{Eenvoudiger bewerken}. + +@warning{Als je LilyPond voor de allereerste keer draait, +kan dat een minuut of twee duren omdat alle systeemfonts +eerst moeten worden geanalyseerd. De volgende keer draait +LilyPond veel sneller!} + + +@node MacOS X +@subsection MacOS X + +@cindex draaien van LilyPond onder MacOS X +@cindex MacOS X, draaien van LilyPond + +@lilypadOSX + + +@node Windows +@subsection Windows + +@cindex draaien van LilyPond onder Windows +@cindex Windows, draaien van LilyPond + +@lilypadWindows + + +@node Commandoregel +@translationof Command-line +@subsection Commandoregel + +@cindex draaien van LilyPond onder Unix +@cindex Unix, draaien van LilyPond + +@lilypadCommandLine + +@node Het schrijven van invoerbestanden +@translationof How to write input files +@section Het schrijven van invoerbestanden + +Deze paragraaf introduceert de LilyPond basissyntax om je op +weg te helpen bij het schrijven van invoerbestanden. + +@menu +* Eenvoudige notatie:: +* Werken met invoerbestanden:: +@end menu + + +@node Eenvoudige notatie +@translationof Simple notation +@subsection Eenvoudige notatie + +@cindex eenvoudige notatie +@cindex notatie, eenvoudig + +LilyPond kan bepaalde notatie-elementen automatisch +toevoegen. In het volgende voorbeeld hebben we slechts vier +toonhoogten ingevoerd, maar LilyPond heeft een +muzieksleutel, een maatsoort, en nootlengtes toegevoegd. + +@lilypond[verbatim,quote] +{ + c' e' g' e' +} +@end lilypond + +@noindent +Dit gedrag kan worden veranderd, maar in de meeste gevallen +zijn deze automatische waarden heel handig. + + +@subheading Toonhoogten + +@cindex toonhoogten +@cindex relatieve modus +@cindex apostrof, enkel aanhalingsteken +@cindex komma +@cindex toevallige tekens en relatieve modus +@cindex relatieve modus, en toevallige tekens + +@funindex \relative +@funindex relative +@funindex ' +@funindex , + +Terminologie: @rglos{pitch}, @rglos{interval}, +@rglos{scale}, @rglos{middle C}, @rglos{octave}, +@rglos{accidental}. + +De meest eenvoudige manier voor het invoeren van noten is de +@code{\relative} modus. In deze modus wordt het octaaf +automatisch gekozen door de aanname dat een opvolgende noot +altijd zo dicht mogelijk bij de vorige noot geplaatst moet +worden, d.w.z., hij wordt geplaatst in het octaaf dat binnen +drie notenbalk-ruimtes ten opzichte van de vorige noot valt. +We beginnen met het invoeren van het meest elementaire stuk +muziek, een @notation{toonladder}, waarin elke noot precies +één notenbalk-ruimte hoger is dan de vorige noot. + +@lilypond[verbatim,quote] +% zet het beginpunt op de centrale C +\relative c' { + c d e f + g a b c +} +@end lilypond + +De eerste noot is de @notation{centrale C}. Elke volgende +noot wordt zo dicht mogelijk geplaatst ten op zichte van de +vorige noot -- of anders gezegd, de eerste @code{c} is de C +het dichtst bij de centrale C. Die wordt gevolgd door +dichtstbijzijnde D ten opzichte van de vorige noot. We +kunnen melodieën maken die grotere intervallen hebben, nog +steeds uitsluitend gebruikmakend van de @code{\relative} +modus: + +@lilypond[verbatim,quote] +\relative c' { + d f a g + c b f d +} +@end lilypond + +@noindent +De eerste noot van de melodie hoeft niet te beginnen met de +noot die de begintoonhoogte aangeeft. In bovenstaand +voorbeeld is de eerste noot -- de @code{d} -- de +dichtstbijzijnde D bij de centrale C. + +Door het toevoegen (of weghalen) van apostrofs @code{'} of +komma's @code{,} van het @q{@w{@code{@bs{}\relative +c'}}}-commando, kunnen we het beginoctaaf veranderen: + +@lilypond[verbatim,quote] +% één octaaf boven de centrale C +\relative c'' { + e c a c +} +@end lilypond + +Relatieve modus kan aanvankelijk wat verwarrend zijn, maar +het is de eenvoudigste manier om melodieën in te voeren. +Laten we eens kijken hoe het uitrekenen van relatieve +afstanden in de praktijk werkt. Beginnend met een B, die in +de vioolsleutel op de middelste lijn staat, kan je een C, D +en E bereiken binnen 3 notenbalk-ruimten omhoog, een een A, +G en F binnen 3 notenbalk-ruimten omlaag. Dus als de noot +na een B een C, D of E is, wordt aangenomen dat die hoger is +dan de B, en van een A, G of F wordt aangenomen dat hij +lager is. + +@lilypond[verbatim,quote] +\relative c'' { + b c % c is 1 notenbalk-ruimte omhoog, dus de c hoger + b d % d is 2 omhoog of 5 omlaag, dus de d hoger + b e % e is 3 omhoog of 4 omlaag, dus de e hoger + b a % a is 6 omhoog of 1 omlaag, dus de a lager + b g % g is 5 omhoog of 2 omlaag, dus de g lager + b f % f is 4 omhoog of 3 omlaag, dus de f lager +} +@end lilypond + +Precies hetzelfde gebeurt als een van deze noten verhoogd of +verlaagd is met een kruis of mol. @notation{Toevallige +tekens} worden @strong{volledig genegeerd} in de berekening +van de relatieve positie. Exact dezelfde +notenbalkruimte-telling wordt gedaan voor een noot op +willekeurig welke andere plaats op de notenbalk. + +Om intervallen te gebruiken die groter zijn dan drie +notenbalk-ruimten, kunnen we het @notation{octaaf} verhogen +door een apostrof @code{'} (of enkel aanhalingsteken) aan de +notenaam toe te voegen. We kunnen het octaaf verlagen door +een komma @code{,} aan de notenaam toe toe voegen. + +@lilypond[verbatim,quote] +\relative c'' { + a a, c' f, + g g'' a,, f' +} +@end lilypond + +@noindent +Voor het veranderen van een noot met twee (of meer!) octaven +gebruiken we meerdere @code{''} of @code{,,} -- maar let op +dat je twee enkele apostrofs of aanhalingstekens gebruikt +@code{''} en niet één dubbel aanhalingsteken @code{"}@tie{}! +@c " - keeps quotes in order for context-sensitive editor -td + +@subheading Nootlengten (ritmen) + +@cindex nootlengten +@cindex lengten +@cindex ritmen +@cindex hele noot +@cindex halve noot +@cindex kwartnoot +@cindex gepuncteerde noot +@cindex lengten noteren + +Terminologie: @rglos{beam}, @rglos{duration}, +@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, +@rglos{dotted note}. + +De @notation{lengte} van een noot wordt aangegeven door een +getal na de notenaam: @code{1} voor een @notation{hele +noot}, @code{2} voor een @notation{halve noot}, @code{4} +voor een @notation{kwartnoot} enzovoorts. +@notation{Waardestrepen} worden automatisch toegevoegd. + +Als je geen lengte aangeeft, word te vorige lengte ook +gebruikt voor de volgende noot. De lengte van de eerste +noot is standaard een kwartnoot. + +@lilypond[verbatim,quote] +\relative c'' { + a1 + a2 a4 a8 a + a16 a a a a32 a a a a64 a a a a a a a a2 +} +@end lilypond + +Voor het maken van @notation{gepuncteerde noten} voeg je een +punt @code{.} toe aan het lengte-getal. De lengte van een +gepuncteerde noot moet expliciet worden aangegeven (d.w.z., +altijd ook met een getal). + +@lilypond[verbatim,quote] +\relative c'' { + a4 a a4. a8 + a8. a16 a a8. a8 a4. +} +@end lilypond + + +@subheading Rusten + +@cindex rust +@cindex rusten noteren + +Terminologie: @rglos{rest}. + +Een @notation{rust} voer je in net zoals een noot met de +naam @code{r}@tie{}: + +@lilypond[verbatim,quote] +\relative c'' { + a4 r r2 + r8 a r4 r4. r8 +} +@end lilypond + + +@subheading Maatsoort + +@cindex maatsoort + +@funindex \time +@funindex time + +Terminologie: @rglos{time signature}. + +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 Sleutel + +@cindex sleutel +@cindex viool +@cindex sopraan +@cindex alt +@cindex tenor +@cindex bas + +@funindex \clef +@funindex clef + +Terminologie: @rglos{clef}. + +De @notation{sleutel} kun je aangeven met het @code{\clef} +commando: + +@lilypond[verbatim,quote] +\relative c' { + \clef "treble" + c1 + \clef "alto" + c1 + \clef "tenor" + c1 + \clef "bass" + c1 +} +@end lilypond + + +@subheading Alles samen + +Hier is een klein voorbeeld dat al deze onderdelen samen +toont: + +@lilypond[verbatim,quote] +\relative c, { + \clef "bass" + \time 3/4 + \clef "bass" + c2 e8 c' + g'2. + f4 e d + c4 c, r +} +@end lilypond + + +@seealso +Notatiehandleiding: @ruser{Writing pitches}, +@ruser{Writing rhythms}, @ruser{Writing rests}, +@ruser{Time signature}, @ruser{Clef}. + + +@node Werken met invoerbestanden +@translationof Working on input files +@subsection Werken met invoerbestanden + +@cindex accolades +@cindex haakjes, gekruld +@cindex commentaar +@cindex regelcommentaar +@cindex commentaar, regel +@cindex blokcommentaar +@cindex commentaar, blok +@cindex hoofdlettergevoelig +@cindex witruimteongevoelig +@cindex expressies +@cindex versie aangeven +@cindex versie +@cindex versienummer + +@funindex \version +@funindex { ... } +@funindex % +@funindex %@{ ... %@} + +LilyPond-invoerbestanden lijken op broncodebestanden van de +meest gebruikte programmeertalen. Ze bevatten een +versie-uitdrukking, zijn hoofdlettergevoelig, en witruimte +wordt grotendeels genegeerd. Expressies worden gevormd met +accolades @w{@code{@{ @}}}, en commentaren worden aangegeven met +@code{%} of @w{@code{%@{ @dots{} %@}}}@tie{}. + +Als de vorige alinea totale onzin lijkt, geen probleem! We +leggen hieronder uit wat al deze termen betekenen: + +@itemize + +@item +@strong{Versie-uitdrukking}: +Elk LilyPond-bestand zou een versie-uitdrukking moeten +hebben. Een versie-uitdrukking is een regel die aangeeft +voor welke versie van LilyPond het bestand is geschreven, +zoals in onderstaand voorbeeld: + +@example +\version "@w{@version{}}" +@end example + +De versie-uitdrukking wordt altijd helemaal bovenin het +LilyPond-bestand gezet. + +Er zijn twee redenen waarom de versie-uitdrukking belangrijk +is. Ten eerste maakt het een automatische update van het +invoerbestand mogelijk voor wanneer de syntax van een +nieuwere LilyPond-versie verandert. Ten tweede geeft het de +LilyPond-versie aan die nodig is om het bestand te +compileren. + +Als de versie-uitdrukking wordt weggelaten uit een +invoerbestand, zal LilyPond een waarschuwing geven tijdens +het compileren van het bestand. + +@item +@strong{Hoofdlettergevoelig}: +het maakt uit of je een letter als kleine letter typt (bijv. +@w{@code{a, b, s, t}}) of als hoofdletter (bijv. @w{@code{A, +B, S, T}}). Noten zijn met een kleine letter: @w{@samp{@{ c +d e @}}} is geldige invoer; @w{@samp{@{ C D E @}}} geeft een +foutmelding. + +@item +@strong{Witeruimteongevoelig}: +het maakt niet uit hoeveel spaties (of tabs of nieuwe +regels) je invoegt. @w{@samp{@{ c d e @}}} betekent +hetzelfde als @w{@samp{@{ c @tie{}} @tie{} @tie{} d e @}} en +als: + +@example +@{ c4 d + e @} +@end example + +@noindent +Het laatste voorbeeld leest natuurlijk erg lastig. Een +goede vuistregel is om blokken code in te springen met twee +spaties: + +@example +@{ + c4 d e +@} +@end example + +Echter, vele syntactische elementen @emph{moeten} van elkaar +gescheiden worden door witruimte. Anders gezegd, witruimte +kan altijd worden @emph{ingevoegd}, maar niet altijd worden +@emph{weggehaald}. Omdat ontbrekende witruimte voor vreemde +foutmeldingen kan zorgen, is het verstandig altijd witruimte +te gebruiken voor en na elk syntactisch element, +bijvoorbeeld, voor en na elke accolade. + +@item +@strong{Uitdrukkingen}: +om elk stuk LilyPond-invoer moeten @strong{@{@tie{}accolades@tie{}@}} +heen staan. Deze haakjes vertellen LilyPond dat de invoer +een enkele muziekuitdrukking is, net als de haakjes +@code{()} bij wiskunde. De accolades moeten altijd los +staan, d.w.z. omgeven zijn door witruimte, of aan het begin +of einde van een regel staan om ambiguïteiten te voorkomen. + +Een LilyPond-commando gevolgd door een enkele uitdrukking +tussen accolades (zoals @q{@w{@code{@bs{}relative c' @{ +@dots{} @}}}}) telt ook als een enkele muziekuitdrukking. + +@cindex commentaren +@cindex regercommentaar +@cindex blokcommentaar +@item +@strong{Commentaren}: +een commentaar is een opmerking voor de lezer van de +muziekinvoer; het wordt genegeerd tijdens het verwerken, dus +het heeft geen effect op de geprinte uitvoer. Er zijn twee +soorten commentaar. Het procentteken @code{%} markeert het +begin van een regelcommentaar; alles na een @code{%} op die +regel wordt genegeerd. Een regelcommentaar wordt altijd +@emph{boven} de regel geplaatst waar hij bij hoort. + +@example +a4 a a a +% dit commentaar slaat op de B's +b2 b +@end example + +Een blokcommentaar markeert een heel stuk van de +muziekinvoer als commentaar. Alles wat tussen @code{%@{} en +@code{%@}} staat, wordt genegeerd. Echter, blockcommentaren +kunnen niet worden ge@q{nest}. Dat betekent dat je een +blokcommentaar niet binnen een ander blokcommentaar kunt +zetten. Als je dat toch probeert, zal de eerste @code{%@}} +@emph{beide} blokcommentaren sluiten. Het volgende fragment +toont het gebruik van commentaren: + +@example +% noten voor twinkle twinkle volgen + c4 c g' g a a g2 + +%@{ + Deze regel, en de noten hieronder worden genegeerd, + omdat ze in een blokcommentaar staan. + + f4 f e e d d c2 +%@} +@end example + +@end itemize + +@node Omgaan met foutmeldingen +@section Omgaan met foutmeldingen +@translationof Dealing with errors + +@cindex problemen oplossen +@cindex oplossen van problemen + +Soms produceert LilyPond niet de uitvoer die je verwachtte. +Deze paragraaf geeft enkele verwijzingen om je te helpen met +het oplossen van problemen die je tegen zou kunnen komen. + +@menu +* Algemene tips voor het oplossen van problemen:: +* Enkele algemene fouten:: +@end menu + +@node Algemene tips voor het oplossen van problemen +@subsection Algemene tips voor het oplossen van problemen +@node General troubleshooting tips + +Het oplossen van LilyPond-problemen kan een uitdaging als je +gewend bent aan een grafische gebruikers interface, omdat +ongeldige invoerbestanden kunnen worden gemaakt. Zodra dit +gebeurt, is een logische aanpak de beste manier om het +probleem te identificeren en op te lossen. Enkele +richtlijnen om je te helpen dit te leren, worden gegeven in +@rprogram{Troubleshooting}. + +@node Enkele algemene fouten +@subsection Enkele algemene fouten +@translationof Some common errors + +@cindex algemene fouten +@cindex fouten, algemene + +Er zijn een paar algemene fouten die moeilijk op te lossen +zijn als je alleen afgaat op de foutmelding die wordt +getoond. Deze fouten worden beschreven in @rprogram{Common +errors}. + + +@node Het lezen van de handleidingen +@translationof How to read the manuals +@section Het lezen van de handleidingen + +Deze paragraaf laat zien hoe je de documentatie efficient +kunt lezen, en introduceert enkele nuttige interactieve +functies die beschikbaar zijn in de online-versie. + +@menu +* Weggelaten materiaal:: +* Klikbare voorbeelden:: +* Overzicht van handleidingen:: +@end menu + + +@node Weggelaten materiaal +@translationof Omitted material +@subsection Weggelaten materiaal + + +@cindex hoe de handleidingen te lezen +@cindex handleiding, lezen +@cindex het lezen van de handleiding +@cindex voorbeelden, aanklikbaar +@cindex klikbare voorbeelden +@cindex tips voor het bouwen van bestanden +@cindex sjablonen +@cindex bouwen van bestanden, tips +@cindex bestanden, tips om te maken + +LilyPond-invoer moet tussen @code{@{ @}}-tekens of +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} staan, zoals +we gezien hebben in @ref{Werken met invoerbestanden}. Vanaf +nu zullen we dit weglaten uit de meeste voorbeelden in de +handleiding. Als je die voorbeelden wilt gebruiken, kun je +you de getoonde invoer kopiëren en plakken, maar je +@strong{moet} zelf wel @q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} +toevoegen, dus: + +@example +\relative c'' @{ + @dots{}plak hier het voorbeeld@dots{} +@} +@end example + +Waarom laten we die accolades weg? De meeste voorbeelden in +deze handleiding kunnen midden in een langer stuk muziek +worden ingevoegd. Bij zulke voorbeelden is het onzinnig om +@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} toe te voegen +-- je moet een @code{\relative} niet binnen een ander +@code{\relative} zetten! Als we @q{@w{@code{@bs{}relative +c'' @{ @dots{} @}}}} om elk voorbeeld heen zouden zetten, +zou je een klein documentatievoorbeeld niet zomaar kunnen +kopiëren en in een langer stuk kunnen plakken. De meeste +mensen willen materiaal toevoegen aan een bestaand stuk, dus +zorgen we dat de handleiding daarvoor het meest geschikt is. + +Verder moet elk LilyPond-bestand eigenlijk ook een +@code{\version}-uitdrukking hebben. Omdat de voorbeelden in +de handleidingen fragmenten zijn, en geen volledige +bestanden, wordt de @code{\version}-uitdrukking weggelaten. +Maar je zou er een gewoonte van moeten maken ze in je +bestanden op te nemen. + +@node Klikbare voorbeelden +@translationof Clickable examples +@subsection Klikbare voorbeelden + +@warning{Deze functie is uitsluitend beschikbaar in de +HTML-handleidingen.} + +Veel mensen leren programma's door te proberen en er wat mee +te prutsen. Dat kan ook goed met LilyPond. Als je op een +afbeelding in de HTML-versie van deze handleiding klikt, zie +je de exacte LilyPond-invoer die gebruikt is om die +afbeelding te genereren. Probeer het maar met deze +afbeelding: + +@c no verbatim here +@lilypond[quote] +\relative c'' { + c4-\markup { \bold \huge { Klik hier. } } +} +@end lilypond + +Door het knippen en plakken van het gehele @qq{ly +snippet}-gedeelte, heb je een sjabloon om je experiment mee +te beginnen. Om precies dezelde uitvoer te krijgen +(inclusief regelbreedte en alles), kopiëer alles vanaf +@qq{Start cut-&-pastable section} tot aan het einde van het +bestand. + + +@ignore +This is item 825 + +@n ode Keyboard navigation +@s ubsection Keyboard navigation + +@warning{This features is only available in the HTML manuals.} + +@c TODO: once this is figured out, insert it here. + +We are currently working on this feature. +@end ignore + +@node Overzicht van handleidingen +@translationof Overview of manuals +@subsection Overzicht van handleidingen + +Er is veel documentatie voor LilyPond. Nieuwe gebruikers +weten soms niet helemaal wat ze nu wel en niet zouden moeten +lezen, en soms slaan ze essentiële delen over. + +@warning{Sla liever geen belangrjke delen van de +documentatie over. Dat maakt het veel lastiger vinden om +het vervolg te begrijpen.} + +@itemize + +@item +@strong{Voordat je ook maar @emph{iets}} probeert: lees uit +de Beginnershandleiding het @ref{Leerboek}, en @ref{Algemene +muzieknotatie}. Als je muziektermen tegenkomt die je niet +herkent, zoek ze dan op in de @rglosnamed{Top, +Terminologie}. + +@item +@strong{Voordat je een heel muziekstuk probeert te +schrijven}: lees uit de Beginnershandleiding de +@ref{Fundamentele concepten}. Daarna wil je wellicht de +relevante delen van de @rusernamed{Top, Notatiehandleiding} +bekijken. + +@item +@strong{Voordat je de standaarduitvoer probeert te +veranderen}: lees uit de Beginnershandleiding over +@ref{Tweaking output}. + +@item +@strong{Voordat je een groot project begint}: lees uit de +Gebruikershandleiding @rprogram{Suggestions for writing +files}. + +@end itemize diff --git a/Documentation/nl/macros.itexi b/Documentation/nl/macros.itexi new file mode 100644 index 0000000000..a7e20d7b5f --- /dev/null +++ b/Documentation/nl/macros.itexi @@ -0,0 +1,804 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 77c34ddc0877c0625a48e1b41049b6dbaae215e0 + + 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 + + +@include version.itexi +@include common-macros.itexi + +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +This file should contain macro defintions 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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore + + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@quotedblleft{}\TEXT\@quotedblright{} +@end macro + +@ifhtml + +@macro warning{TEXT} +@html +
    +@end html +@strong{Nota bene :} \TEXT\ +@c keep the space for proper nesting of

    + +@html +
    +@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Note :} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + + +@macro docMain +@cartouche +Voor meer informatie over waar deze handleiding in de rest van de +documentatie past, of over het lezen van deze handleiding in andere +formaten, zie @rweb{Handleidingen}. + +Mocht je een handleiding missen, de volledige documentatie is altijd te +vinden op @w{@uref{http://@/www@/.lilypond@/.org/}}. +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@emph{The translation of the following copyright notice is provided +for courtesy to non-English speakers, but only the notice in English +legally counts.} + +@emph{De vertaling van onderstaande copyright voorwaarden wordt gegeven +ter oriëntering voor niet-Engelstalige lezers. Juridisch gezien is +echter uitsluitend de engelstalige versie rechtsgeldig.} + +@c van http://nl.wiktionary.org/wiki/WikiWoordenboek:GNU-licentie_voor_vrije_documentatie_in_het_Nederlands +@quotation +Toestemming wordt verleend tot het kopiëren, verspreiden en/of wijzigen +van dit document onder de bepalingen van de GNU Vrije Documentatie +Licentie, versie 1.1 of iedere latere versie uitgegeven door de Free +Software Foundation; zonder Invariante Secties, zonder Omslagteksten +voor de Voorkant en zonder Omslagteksten voor de Achterkant. Een kopie +van de licentie is opgenomen in de sectie getiteld ``GNU Vrije +Documentatie Licentie''. + +@end quotation + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +This document has been placed in the public domain. +@end copying +@end ifclear + + +@c ***** Title page ***** +@ifnottex +@node Top +@top LilyPond -- \TITLE\ + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle Het muziekprogramma +@titlefont{\TITLE\} +@author Het LilyPond ontwikkelteam + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +Voor LilyPond versie @version{} +@end titlepage + +@end macro + +@c ***** Headings in a doc subsection ***** + +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading Voorgedefiniëerde commando's +@end macro + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading Uitgezochte snippers +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading Zie ook +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading Bekende problemen en waarschuwingen +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Terminologie} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Terminologie} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Beginnen} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Beginnen} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Notatie-handleiding} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Notatie-handleiding} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Veranderingen} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Medewerkers handleiding} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Medewerkers handleiding} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Algemene Informatie} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Algemene Informatie} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Gebruiks handleiding} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Gebruiks handleiding} +@end macro + +@macro rlsr{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,snippets-big-page,Snippers} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Internals Reference} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Terminologie} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Terminologie} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Beginnershandleiding} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Beginnershandleiding} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Notatie-handleiding} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Notatie-handleiding} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Veranderingen} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Veranderingen} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Uitbreidingen} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Uitbreidingen} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Medewerkers handleiding} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Medewerkers handleiding} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,Algemene Informatie} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,Algemene Informatie} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Gebruiks handleiding} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Gebruiks handleiding} +@end macro + +@macro rlsr{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,snippets,Snippers} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,snippets,Snippers} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Internals handleiding} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Internals handleiding} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Terminologie} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Terminologie} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Beginnershandleiding} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Beginnershandleiding} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Notatie-handleiding} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Notatie-handleiding} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Veranderingen} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Veranderingen} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Uitbreidingen} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Uitbreidingen} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Medewerkers handleiding} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Medewerkers handleiding} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-web,Algemene Informatie} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-web,Algemene Informatie} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Gebruiks handleiding} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Gebruiks handleiding} +@end macro + +@macro rlsr{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-snippets,Snippers} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippers} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Internals handleiding} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals handleiding} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Terminologie} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Terminologie} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning.nl,Beginnershandleiding} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning.nl,Beginnershandleiding} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation.nl,Notatie-handleiding} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation.nl,Notatie-handleiding} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Veranderingen} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Veranderingen} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Uitbreidingen} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Uitbreidingen} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Medewerkers handleiding} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Medewerkers handleiding} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web,Algemene Informatie} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web,Algemene Informatie} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Essay} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage.nl,Gebruiks handleiding} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage.nl,Gebruiks handleiding} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Snippers} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Snippers} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Internals handleiding} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,Internals handleiding} +@end macro + +@end iftex + + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
    +@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + + +@macro help{TEXT} +@html +
    + + Hulp gezocht: + \TEXT\ +
    +@end html +@end macro + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin was created by +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} with +@uref{http://www.isc.tamu.edu/~lewing/gimp/, the Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +The FreeBSD logo is a registered trademark of +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +The @qq{X image} is not a registered trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} and +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, and +placed under the GNU Free Documentation License version 1.2 or later. +We found the image on +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +this Wikipedia Commons page}. + +@end macro + +@macro logoLegalWindows +The @qq{four colored rectangles image} is not a registered +trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} and +placed under the GNU Free Documentation License version 1.2. We +found the image on +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +this Wikipedia Commons page}. + +@end macro + +@end ifset + + + +@c ***** Macros specific to translated docs ***** + + +@macro englishref +Deze alinea is nog niet vertaald. Leest u alstublieft de engelse +handleiding. +@end macro + diff --git a/Documentation/nl/search-box.ihtml b/Documentation/nl/search-box.ihtml new file mode 100644 index 0000000000..b28d1a7ee8 --- /dev/null +++ b/Documentation/nl/search-box.ihtml @@ -0,0 +1,20 @@ + + +
    + + + +
    diff --git a/Documentation/nl/texidocs/GNUmakefile b/Documentation/nl/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/nl/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/nl/translations.itexi b/Documentation/nl/translations.itexi new file mode 100644 index 0000000000..f8c7605b20 --- /dev/null +++ b/Documentation/nl/translations.itexi @@ -0,0 +1,313 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Meest recente update Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond beginnershandleiding +@tab Vertalers +@tab Revisie vertaling +@tab Vertaald +@tab Actueel +@tab Andere informatie +@item +Paragraaftitels +@* +124 +@tab Jan Nieuwenhuizen +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab na-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Jan Nieuwenhuizen +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@item +1 Leerboek +@* +2535 +@tab Jan Nieuwenhuizen +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@item +2 Algemene muzieknotatie +@* +4184 +@tab Jan Nieuwenhuizen +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@item +3 Fundamentele concepten +@* +11139 +@tab Jan Nieuwenhuizen +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond -- Muzieknotatie voor iedereen +@tab Vertalers +@tab Revisie vertaling +@tab Vertaald +@tab Actueel +@tab Andere informatie +@item +Paragraaftitels +@* +585 +@tab Jan Nieuwenhuizen +@tab Tineke de Munnik +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab na-GDP +@item +LilyPond -- \TITLE\ +@* +1139 +@tab Jan Nieuwenhuizen +@tab Tineke de Munnik +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@item +Inleiding +@* +4506 +@tab Jan Nieuwenhuizen +@tab Tineke de Munnik +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@item +Download +@* +1183 +@tab Jan Nieuwenhuizen +@tab Tineke de Munnik +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@item +Handleidingen +@* +1200 +@tab Jan Nieuwenhuizen +@tab Tineke de Munnik +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@end multitable + diff --git a/Documentation/nl/web.texi b/Documentation/nl/web.texi new file mode 100644 index 0000000000..c432b127b0 --- /dev/null +++ b/Documentation/nl/web.texi @@ -0,0 +1,319 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: nl -*- +@ignore + Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8 + + 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 Translation status: post-GDP + +@c Translator: Jan Nieuwenhuizen +@c Translation checker: Tineke de Munnik +@c Translation checker committish: fd33752 + +@setfilename web.info +@settitle LilyPond -- Muzieknotatie voor iedereen +@documentencoding UTF-8 +@documentlanguage nl +@afourpaper + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + +@afourpaper + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@copying +Copyright @copyright{} 2009--2011 by the authors. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +This file documents the LilyPond website. + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@end quotation +@end copying + + +@c TITLE PAGE +@ifnottex +@node Top +@top LilyPond... muzieknotatie voor iedereen +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle De muziekzetter +@titlefont{Algemene informatie} +@author Het LilyPond ontwikkelteam + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +Voor LilyPond versie @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... muzieknotatie voor iedereen +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading Wat is LilyPond? + +LilyPond is een muzieknotatie programma 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 +@uref{http://gnu.org,GNU Project}. + + +@divClass{align-right} +Lees meer in onze @ref{Inleiding}! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Old news}) @c (@ref{Old news,,,,Oud nieuws}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading Snelle verwijzingen + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Stabiel + +@ref{Download, Download @versionStable} + +@ref{Handleidingen, Handleidingen @versionStable} + +@subsubheading Ontwikkeling + +@c community.itexi met `Ontwikkeling' is nog niet vertaald +@ref{Development, Download @versionDevel} + +@ref{Development, Handleidingen @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* Inleiding:: Start here to creating sheet music. +* Download:: Get LilyPond. +* Handleidingen:: Read The Fine Manuals (RTFM). +* Community:: Contact other users. +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Read it + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (split HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (big HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + the manual is split between many HTML pages. + @*@ @ @emph{(small download for each page)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + read this manual as one huge HTML page. + @*@ @ @emph{(large single download, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + download as a PDF file. + @*@ @ @emph{(large single download, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye + diff --git a/Documentation/nl/web/GNUmakefile b/Documentation/nl/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/nl/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/nl/web/download.itexi b/Documentation/nl/web/download.itexi new file mode 100644 index 0000000000..57613ce068 --- /dev/null +++ b/Documentation/nl/web/download.itexi @@ -0,0 +1,631 @@ +@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*- +@ignore + Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b + + 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 Translator: Jan Nieuwenhuizen +@c Translation checker: Tineke de Munnik +@c Translation checker committish: abc1ebe + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond is een @strong{tekstgebaseerd} +muzieknotatieprogramma; in bepaalde opzichten lijkt LilyPond +meer op een programmeertaal dan op een grafisch +muziekprogramma. Voordat je LilyPond download, lees dan +eerst de informatie over onze @ref{Tekstinvoer}.} +@end macro + +@node Download +@unnumbered Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want verisonDevel here, since the online links + @c for @version won't be up yet! + @heading Downloads voor LilyPond @versionDevel + +@warning{Links voor de stabiele versie van LilyPond staan op +@uref{http://lilypond.org, lilypond.org}} +@end ifclear +@ifset web_version + @heading Downloads voor LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{column-left-top} +@subheading Voor gebruikers + +@itemize + +@item +@c TODO: duplicate to avoid underlined refs in HTML? icky. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux en FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading Voor ontwikkelaars + +@itemize + +@item +@ref{Broncode}: +voor packagers + +@item +@ref{Oude downloads}: +oude versies + +@c community.itexi met `Ontwikkeling' is nog niet vertaald +@item @ref{Development}: +meest recente ontwikkelversie + +@end itemize +@divEnd + + +@divClass{column-center-bottom} + +@subheading Software-licentie + +LilyPond is uitgegeven onder de @ref{GPL, GNU General Public +License} (GNU Algemene Publieke Licentie). +@divEnd + + +@divClass{color1} + +@subheading Sponsors + +Hartelijk dank aan @uref{http://www.vt.edu/, Virgina Tech} en +@uref{http://www.linuxaudio.org/, linuxaudio.org} voor het +sponsoren van onze bandbreedte. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Broncode:: +* Oude downloads:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Generieke pakketten of distributie-pakketten? + +Veel Linux-distributies (zoals Fedora, openSUSE, Ubuntu) +leveren LilyPond mee als onderdeel van hun +normale software-pakketsysteem. Zo'n LilyPond-pakket is +eenvoudiger te installeren en verwijderen dan een generiek +pakket, maar het kan een verouderde versie zijn. Als je +liever één van onze generieke pakketten wilt gebruiken, verwijder dan eerst +de officiële versie van LilyPond met het normale +pakketbeheer van je distributie (softwarecentrum). Zie de +documentatie van je distributie voor hoe je het pakketbeheer +of softwarecentrum gebruikt. + +@divEnd + + +@divClass{column-left-top} +@subheading Generieke pakketten + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(als je twijfelt, gebruik deze) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Installeren + +Op de commandoregel, typ: + +@example +cd PAD-NAAR-DOWNLOAD-MAP # waarschijnlijk: cd Downloads +sh lilypond-@versionStable{}-OS-TYPE.sh +@end example + +@subsubheading Verwijderen + +Op de commandoregel, typ: + +@example +uninstall-lilypond +@end example + +@divEnd + + + +@divClass{column-right-top} +@subheading Een bestand compileren + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Distributie-pakketten + +Gebruik het pakketbeheer (softwarecentrum) van je +distributie voor het upgraden naar deze versies. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.3} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.3} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=lilypond, +openSUSE: LilyPond 2.12.3} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Pakketten + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +Voor Intel processors (als je twijfelt, gebruik deze). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +Voor G3 and G4 CPUs (oudere Apple computers). + +@end itemize + +@subsubheading Installeren + +Dubbelklik het gedownloade bestand, sleep het dan naar de +plaats waar je het wilt hebben. + +@subsubheading Verwijderen + +Verwijder de LilyPond.app map. + +@divEnd + +@divClass{column-right-top} +@subheading Een bestand compileren + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Uitvoeren op de commandoregel + +@warning{Als je liever de GUI gebruikt, sla deze instructies +dan over.} + +@subsubheading MacOS X op de commandoregel + +De handigste manier om LilyPond-scripts uit te voeren is +door middel van het maken van je eigen @qq{hulp}scripts. + +@enumerate + +@item +Maak een map en sla deze scripts op, + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@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 +exec @var{MAP}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end smallexample + +@warning{@var{MAP} is normaal gesproken @code{/Applications/}} + + +@item +Maak gelijksoortige bestanden @command{lilypond-book}, +@command{convert-ly}, en andere scripts die je wilt +gebruiken, door het commando @command{bin/lilypond} te +vervangen met @command{bin/convert-ly} (of een andere +programmanaam). + + +@item +Maak het bestand executeerbaar, + +@example +chmod u+x lilypond +@end example + + +@item +Voeg nu deze map toe aan je pad. Wijzig het bestand genaamd +@code{.profile} in je persoonlijke map (of maak een nieuwe aan) +zodat het het volgende bevat + +@example +export PATH=$PATH:~/bin +@end example + +Het bestand moet eindigen met een lege regel. + +@end enumerate + + +@subsubheading Afzonderlijke scripts uitvoeren + +De scripts --- zoals @command{lilypond-book}, +@command{convert-ly}, @command{abc2ly}, en zelfs +@command{lilypond} --- worden meegeleverd met het +@code{.app} bestand voor MacOS@tie{}X. + +Scripts kunnen ook worden uitgevoerd op de commandoregel +door ze direct aan te roepen: + +@example +@var{pad/naar}/LilyPond.app/Contents/Resources/bin/lilypond +@end example + +Dat geldt ook voor alle andere scripts in die map, zoals +@command{lilypond-book} en @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Pakketten + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +Voor Windows ME, NT, 2000, XP, Vista, en Windows 7. + +@end itemize + +@subsubheading Installeren + +@enumerate + +@item +Zoek het gedownloade bestand en dubbelklik het om het te +installeren. Volg de instructies op die de installer je +geeft; wij raden je aan alle installatiekeuzes aangevinkt te +laten en de standaard aangegeven locatie te gebruiken. Klik +op de @q{Finish} knop als de installer klaar is. LilyPond +is nu geïnstalleerd. + +@end enumerate + +@subsubheading Verwijderen + +Om LilyPond te verwijderen: + +@enumerate + +@item +Zoek de LilyPond-map in het menu @q{Start} en klik op het +@q{Uninstall} icoon. Klik op de @q{Finish} knop als de +uninstaller klaar is. + +@item +Ofwel: vanuit het Configuratiescherm, kies Programma's en +onderdelen, zoek en selecteer LilyPond en kies de optie +verwijderen/wijzigen. Klik op de @q{Finish} knop als de +uninstaller klaar is. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Een bestand compileren + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Uitvoeren op de commandoregel + +@warning{Als je liever de GUI gebruikt, sla deze instructies +dan over.} + +@subsubheading Windows on the command line + +@ignore +CHECK: check the following descriptions. +I don't have English version of Windows. +@end ignore + +De handigste manier om LilyPond uit te voeren is door de map +die de LilyPond programmabestanden bevat, toe te voegen aan +de omgevingsvariabele @qq{Path}. + + +@enumerate +@item +In het Configuratiescherm, open @qq{Systeem}, selecteer +Geavanceerde systeeminstellingen of het Tab Geavanceerd en +klik op de knop @q{Omgevingsvariabelen}. + +@item +Selecteer de Variabele @qq{Path} uit de lijst Systeemvariabelen +en klik op de knop @q{Bewerken}. Een dialoogvenster met de +titel @qq{Systeemvariabele bewerken} verschijnt; voeg aan de +@qq{Waarde van variable} de naam van de map toe waarin de +LilyPond programmabestanden staan: + +@example +[@var{vooringestelde paden}];@var{MAP}\LilyPond\usr\bin +@end example + +@warning{@var{MAP} is normaal gesproken @code{C:\Program +Files}.} + +@noindent +en klik op de @qq{OK} knop om het dialoogvenster te sluiten. + +@end enumerate + +@subsubheading Afzonderlijke programmabestanden uitvoeren + +LilyPond pogrammabestanden -- zoals lilypond, +lilypond-book, convert-ly, enz. -- kunnen op de +commandoregel worden uitgevoerd door ze aan te roepen: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Broncode +@unnumberedsec Broncode +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{Het zelf proberen te bouwen van LilyPond wordt +@strong{afgeraden}; het is voor vrijwel iedere gebruiker aan te raden om +de voorgebouwde versie gebruiken.} + +@divClass{column-left-bottom} +@subheading Broncode tarball + +@downloadStableSource-nl{} + +Voor een uitgebreide lijst van alle versies (zowel oude als +nieuwe), zie onze +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, +download site}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Compileerinstructies + +Instructies worden beschreven in @rcontrib{Compiling}. + +@divEnd + + +@node Oude downloads +@unnumberedsec Oude downloads +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Alle versies + +Voor een uitgebreide lijst van alle versies (zowel oude als +nieuwe), zie onze +@uref{http://download.linuxaudio.org/lilypond/binaries/, +download site}. + +@divEnd + + +@node GPL +@unnumberedsec GPL + +@divClass{column-center-top} +@subheading Software licentie + +GNU LilyPond wordt uitgebracht onder de GNU General Public +License (GNU Algemene Publieke Licentie). Een inleiding op +deze licentie en de redenen om voor deze keuze, wordt +gegeven in @ref{Vrijheid}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd + + + diff --git a/Documentation/nl/web/introduction.itexi b/Documentation/nl/web/introduction.itexi new file mode 100644 index 0000000000..03b9995f08 --- /dev/null +++ b/Documentation/nl/web/introduction.itexi @@ -0,0 +1,1256 @@ +@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 + + 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 Translator: Jan Nieuwenhuizen +@c Translation checker: Tineke de Munnik +@c Translation checker committish: fd33752 + +@node Inleiding +@unnumbered Inleiding +@translationof Introduction + +@divClass{column-center-top} +@subheading Ons Doel +@imageFloat{flat-design,png,right} + +De inspiratie voor LilyPond ontstond toen twee muzikanten +meer wilden dan de ontzielde aanblik van met de computer +geprinte bladmuziek. Muzikanten lezen het liefst mooie +muziek dus waarom zouden programmeurs geen software kunnen +schrijven waarmee je prachtige partijen kunt afdrukken? + +Het resultaat is een systeem waarin muzikanten geen omkijken +meer hebben naar layout-details, maar zich kunnen +concentreren op het maken van muziek. LilyPond biedt hen de +mogelijkheid om partijen te maken van publicatiekwalteit, +volgens de beste tratities van klassieke muziekgravure. + +@divEnd + +@divClass{column-left-top} +@subheading Wat LilyPond doet + +@itemize + +@item +@ref{Functies}: Wat kan LilyPond? + +@item +@ref{Voorbeelden}: Ik wil muziek zien! + +@item +@ref{Vrijheid}: LilyPond is Vrije Software. + +@item +@ref{Achtergrond}: Onze berekende esthetiek. +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading LilyPond in gebruik + +@itemize + +@item +@ref{Producties}: Daadwerkelijke gebruik van LilyPond. + +@item +@ref{Recenties}: Wat zeggen anderen over LilyPond? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading Hoe LilyPond werkt + +@itemize + +@item +@ref{Tekstinvoer}: Jullie schrijven muziek als @emph{tekst}?! + +@item +@ref{Eenvoudiger bewerken}: Andere manieren van werken met LilyPond. + +@end itemize +@divEnd + +@divClass{hide} +@menu +* Functies:: What can LilyPond do? +* Voorbeelden:: I want to see some music! +* Vrijheid:: Freedom and the GPL. +* Achtergrond:: Computational aesthetics. +* Producties:: Real-life use of LilyPond. +* Recenties:: What do people say about it? +* Tekstinvoer:: You write music as text?! +* Eenvoudiger bewerken:: Other ways of working with LilyPond. +@end menu +@divEnd + + + +@node Functies +@unnumberedsec Functies +@translationof Features +@divClass{column-center-top} + + +@subheading Elegantie +@subsubheading Prachtige klassieke muziekgravure + +@imageFloat{flat-design,png,right} + +Met LilyPond kunnen muzikanten elegante bladmuziek +produceren die gemakkelijk leest. De community van +ontwikkelaars heeft duizenden uren geïnvesteerd in het +ontwikkelen van krachtige muzieknotatie-software die +prachtige gegraveerde muziek oplevert. Alle +stijlinstellingen, het speciaal ontworpen muziekfont en +algoritmes zijn geïnspireerd op de mooiste handgegraveerde +bladmuziek. De LilyPond-uitvoer ziet er net zo krachtig en +harmonisch uit als de best gegraveerde klassieke partituren. +Dit wordt verder uitgewerkt in ons @ref{Essay}. + +@subsubheading Effectieve layout-keuzes + +Verlies minder tijd met het verfraaien van het resultaat; +LilyPond verzint zelf de beste layout. Het bepaalt de +spatiëring en het afbreken van regels en pagina's, zodat een +strakke en regelmatige layout ontstaat. Het voorkomt +botsingen tussen liedteksten, noten en akkoorden en zet +legatobogen en waardestrepen automatisch op de juiste +manier! + +@divEnd + +@divClass{color2} +@subheading Gebruiksgemak + +@imageFloat{lilypond-book,png,right} + +@subsubheading Tekstgebaseerde invoer + +LilyPond werkt met ASCII-invoer die je kunt aanleveren met +jouw favoriete teksteditor, snel en comfortabel. De invoer +bevat alle informatie, dus het onthouden van ingewikkelde +reeksen commando's is niet nodig: sla gewoon je +invoerbestand op en je kunt alles later opnieuw raadplegen. + +@subsubheading Combineer muziek en tekst + +Voeg muziekfragmenten aan teksten toe zonder het knippen en +plakken van plaatjes. Integreer muziek naadloos in @LaTeX{} +of HTML, of voeg muziek toe aan OpenOffice.org met behulp +van OOoLilyPond. Plugins zijn ook beschikbaar voor het +gebruik van LilyPond-code in verschillende blogs and wiki's, +wat online-samenwerking mogelijk maakt. + +@subsubheading Toegankelijkheid + +Tekstgebaseerde invoer maakt het schrijven van partituren +ook toegankelijk voor gebruikers met ernstige lichamelijke +beperkingen. Gebruikers met motorische beperkingen die niet +kunnen typen of een muis kunnen besturen, kunnen +spraakherkenningssoftware gebruiken om LilyPond-bestanden te +bewerken. Zelfs blinde gebruikers kunnen voorleessoftware +gebruiken voor het schrijven van LilyPond-bestanden -- een +onmogelijke taak in grafisch-gebaseerde muziekprogramma's. + +@subsubheading Uitbreidbaar ontwerp + +Alle instellingen kunnen worden aangepast aan je eigen +persoonlijke typografische voorkeuren. Als dat niet +voldoende is, bestaat er nog altijd de ingebouwde +scriptingtaal Scheme, een dialect van de krachtige +programmeertaal LISP. Instellingen, variabelen en functies +zijn allemaal beschreven in de uitvoerige +referentiehandleiding van het programma. + +@divEnd + +@divClass{color3} + +@subheading Omgeving + +@imageFloat{frescobaldi-lilypond-editor-small,png,right} + +@subsubheading Vrije software + +LilyPond kan kostenloos worden gedownload! Ja hoor - het is +gratis. Je kunt het downloaden van de downloadpagina. + +Bovendien is het ook vrije software. Wat betekent dat je de +broncode erbij krijgt, plus toestemming om deze te +veranderen en te kopiëren. Dus als je je ergert aan een +fout, of als er iets in het programma ontbreekt, kun je het +zelf oplossen of iemand anders inhuren om het voor je te +doen. + + +@subsubheading Uitstekende ondersteuning + +LilyPond werkt op alle bekende besturingssystemen: +GNU/Linux, MacOS X, en Windows. Er is een zeer uitgebreide +handleiding met honderden voorbeeldbestandjes. Er is een +actieve gebruikersgroep die antwoorden geeft op de +lilypond-user mailinglijst, terwijl het ontwikkelingsteam +ervoor zorgt dat problemen snel worden opgelost. + + +@subsubheading Verbeterde editors + +Verscheidene ontwikkelaars, zelf actieve gebruikers van +LilyPond, hebben ook gereedschappen geschreven die speciaal +bedoeld zijn om het invoeren van LilyPond-bestanden sneller +en effectiever te maken. Een aantal voorbeelden is te +vinden in @ref{Eenvoudiger bewerken}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading En nu? + +Nog steeds niet overtuigd? Bekijk dan maar eens enkele +specifieke @ref{Voorbeelden}. Heb je al besloten LilyPond +te gaan proberen, lees dan eerst over onze +@ref{Tekstinvoer}. +@divEnd + + +@node Voorbeelden +@unnumberedsec Voorbeelden +@translationof Examples + +LilyPond is een krachtig en flexibel gereedschap voor +uiteenlopende muzieknotatie-taken. Bekijk ter inspiratie +eens onze galerij met voorbeelden! + +@newsItem +@subsubheading Klassieke Muziek + +Dit orgelwerk van J.S. Bach is een typisch LilyPond-project. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Ingewikkelde muzieknotatie + +Dit voorbeeld uit @emph{Goyescas} van Enrique Granados laat +geavanceerde typesettingsfuncties zien, zoals waardestrepen +met knie, stokken tussen notenbalken en +melodie-volglijntjes. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Vroege muziek + +LilyPond geeft ook ondersteuning voor verscheidene +verouderde notatievormen zoals dit Gregoriaanse liedfragment. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Moderne muziek + +Hedendaagse componisten vinden dat LilyPond zich goed leent +voor het tonen van ongebruikelijke notatie. Hier is een +fragment uit Trevor Bača's @emph{Čáry}, voor solo basfluit. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Maak efficiënte, flexibele partijen voor uitvoerenden + +Vanuit één en dezelfde broncode kunnen allerlei soorten +partijen worden gemaakt. Dit is een fragment uit +@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux's} +gravure van Handels @emph{Giulio Cesare}, als volledige +partituur, piano-zang reductie, en een vioolpartij. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Tablatuur + +LilyPond ondersteunt tablatuurnotatie die kan +worden aangepast aan elk intrument dat van tablatuur kan spelen. +De tablatuurbalk wordt automatisch gegenereerd op basis van de +noten die voor de vijf-lijns notenbalk zijn ingevoerd. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Schenker-diagrammen + +De standaard uitvoer kan ingrijpend worden veranderd. Dit +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 +toegevoegd. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Vocale muziek + +LilyPond blinkt uit in alle soorten vocale muziek, van +psalmen en gezangen tot opera. Hier is een Middeleeuws +motet met enigszins ongebruikelijke eisen. De tenorstem is +in een andere maatsoort genoteerd dan de anderen, maar moet +uitgelijnd zijn als ware het dezelfde maatsoort. LilyPond +doet dit bijzonder elegant. Let ook op de incipits met +sleutels in de Vaticana stijl, de doorgestreepte stokken die +gepliceerde noten aangeven en de ligatuurhaken boven +bepaalde groepen noten. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Educatieve doeleinden + +LilyPond is ook perfect voor educatieve doeleinden. +Hier is een voorbeeld van een eenvoudige contrapunt-oefening. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Populaire muziek + +Het is eenvoudig om zogenaamde pop leadsheets met melodie, +songtekst, akkoordnamen, en fretboard-diagrammen te maken. In dit +voorbeeld zie je enkele van de voorgedefiniëerde +fretboard-diagrammen, maar ze kunnen ook ingrijpend veranderd +worden voor vrijwel elke andere situatie. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Grote projecten + +LilyPond is uitstekend voor grote projecten zoals opera's of +werken voor groot symfonieorkest. Daarnaast levert de +tekstgebaseerde invoer een grotere toegankelijkheid -- dit +voorbeeld is een bijdrage van Hu Haipeng, een blinde +componist. + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading En nu? + +Nog steeds niet overtuigd? LilyPond is Vrije Software, die +jou @ref{Vrijheid} geeft. Heb je al besloten LilyPond te +gaan proberen, lees dan eerst over onze @ref{Tekstinvoer}. +@divEnd + +@node Vrijheid +@unnumberedsec Vrijheid +@translationof Freedom + + +@divClass{column-center-top} +@subheading Vrije Software + +@uref{http://www.gnu.org/, GNU} LilyPond is geschreven en +wordt onderhouden door een groep enthousiaste liefhebbers. +Het wordt uitgebracht onder de @ref{GPL, GNU General Public +License} (GNU Algemene Publieke Licentie) en de @ref{FDL, +GNU Free Documentation License} (GNU Vrije Documentatie +Licentie), hetgeen iedereen de vrijheid geeft het programma +te verbeteren, veranderen en uit te breiden. Het maken van +prachtige muziek zou geen honderden euro's aan software +moeten kosten! +@divEnd + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading Wat zijn de voordelen voor gebruikers? + +@itemize + +@item +Geen kosten: download en probeer het! Wat heb je te +verliezen? + +@item +Delen: als het programma je bevalt, geef dan een kopie aan +je vrienden, docenten, studenten, en collega's. + +@item +Broncode beschikbaar: als je benieuwd bent hoe LilyPond +bepaalde notatie maakt, kun je precies zien hoe het in zijn +werk gaat. + +@item +Uitbreidbaar: je kunt functies toevoegen, fouten repareren, +en de functionaliteit veranderen. Als je geen programmeur +bent, kun je iemand inhuren die het voor je doet. + +Dit mag misschien niet zo aantrekkelijk lijken voor +sommige muzikanten, maar de mogelijkheid om software +uit te breiden kan van groot belang zijn voor +serieuze componisten, bedrijven en wetenschappers. + +@item +Veilige toekomst: als een commerciëel bedrijf bankroet gaat, +wat gebeurt er dan met de elektronische muziek die +afhankelijk is van hun producten? Dit bezwaar bestaat niet +met LilyPond; zelfs wanneer het gehele ontwikkelteam ermee +stop (bijzonder onwaarschijnlijk), zal het programma nog +steeds legaal beschikbaar zijn om te kopiëren, wijzigen en +te distribueren. + +@end itemize + +@divEnd +@divEnd + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading Waarom @qq{geven} LilyPond-ontwikkelaars hun werk gratis @qq{weg}? + +De meesten van ons zien het ontwikkelen van LilyPond als een +hobby of als vrijwilligerswerk. Dus de vraag is eigenlijk +@qq{waarom willen mensen vrijwilliger zijn}? + + +@itemize + +@item +Plezier: naar een doel toewerken kan prettig zijn, vooral +wanneer je het met een team doet! + +@item +Gedeelde doelen: we willen allemaal prachtige bladmuziek, +maar weinig mensen hebben de expertise (en niemand heeft de +tijd!), om een programma te maken dat alle situaties aan +kan. Door samen te werken -- één verbetert de automatische +waardestreepcode, een ander verbetert de vorm van de +legatoboogjes, en een derde schrijft documentatie waarin +wordt uitgelegd hoe je deze functies kunt gebruiken -- +kunnen we samen onze doelen bereiken met een fractie van de +individuele inzet. + +@item +Geef-cultuur: de Vrije Software (of @qq{Open Source}) +beweging heeft veel geweldige software projecten opgeleverd, +zoals @uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox}, en +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Omdat +ze van deze projecten geprofiteerd hebben, willen sommige +ontwikkelaars iets @qq{terug doen} voor de community. + +@item +Werkervaring: bijdragen aan open-source projecten is een +mooie manier om te oefenen met programmeren, het schrijven +van documentatie, het vertalen van documentatie, of +ontwerpen. Deze ervaring heeft sommige ontwikkelaars zelfs +een baan of een beurs opgeleverd. + +@end itemize + +@divEnd +@divEnd + +@divClass{column-center-bottom} +@subheading En nu? + +Nog steeds niet overtuigd? Lees ons uitgebreide essay over +onze graveerfilosofie in @ref{Achtergrond}. Heb je al +besloten LilyPond te gaan proberen, lees dan eerst over onze +@ref{Tekstinvoer}. +@divEnd + +@node Achtergrond +@unnumberedsec Achtergrond +@translationof Background + +@divClass{column-center-top} +@subheading Achtergrond essay + +We hebben een uitgrebreid essay waarin we onze berekende +esthetiek uiteenzetten: de kunst van de creatie van +schoonheid met de computer. + +Als je slechts een snelle inleiding in LilyPond wilt, is het +essay wellicht wat te veel stof om nu door te lezen. Als je +het leuk zou vinden het nu te lezen, ga dan verder naar +@ref{Essay}. +@divEnd + +@divClass{column-center-bottom} +@subheading En nu? + +Nog steeds niet overtuigd? Lees over @ref{Producties} en +bladmuziek van enkele van onze gebruikers. Heb je al +besloten LilyPond te gaan proberen, lees dan eerst over onze +@ref{Tekstinvoer}. +@divEnd + +@node Producties +@unnumberedsec Producties +@translationof Productions + +@divClass{column-left-top} +@subheading Concerten + +LilyPond gravures zijn wereldwijd gebruikt voor +uitvoeringen. Enkele hoogtepunten: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire étrangère}, een opera van +@uref{http://valentin.villenave.net/,Valentin Villenave} +op een frans libretto van +@uref{http://nl.wikipedia.org/wiki/Lewis_Trondheim, Lewis +Trondheim}, premiëre op 1 februari, 2009 in +@uref{http://www.orchestre-montpellier.com/, L'Opéra National de +Montpellier}, Frankrijk. + +@item +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury +Baroque}s uitvoering van Lullys @emph{Armide}, 15-16 mei +2009, in Houston, Texas (gravure door +@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}). + +@item +Instrumentale fragmenten van Rameaus @emph{Hippolyte et +Aricie} in St. James's Church in Manhattan, 8 mei 2009, door +Frederick Renz met zijn ensemble +@uref{http://www.earlymusicny.org/, Early Music New York} +(gravure door Nicolas Sceaux). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Uitgegeven bladmuziek + +@divClass{keep-bullets} +@itemize + +@item +@uref{http://www.mutopiaproject.org/index.html, Mutopia +Project}, bladmuziek voor meer dan 1500 klassieke +muziekstukken vrij te downloaden, de voornaamste verzameling +van LilyPond partituren. + +@c don't make this "Mutopia" a link, since that looks silly. +@item +@uref{http://etudeapp.com, Etude}, @qq{bladmuziek op +steroïden} is een iPhone app die pianomuziek toont die gezet +is met LilyPond, inclusief vele stukken uit Mutopia. De app +heeft een virtueel pianoklavier waarop is te zien welke +toetsen aangeslagen worden om beginners te helpen bladmuziek +lezen. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music +Publishing}, partituren van hoge kwaliteit van religieuze +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. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{column-center-bottom} +@subheading En nu? + +Nog steeds niet overtuigd? Lees de @ref{Recenties} van +enkele van onze gebruikers. Als je het leuk zou vinden het +nu te lezen, ga dan verder naar @ref{Essay}. +@divEnd + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/testimonials + +@node Recenties +@unnumberedsec Recenties +@translationof Reviews + +@divClass{column-left-top} +@subheading Gepubliceerde artikelen + +@divClass{keep-bullets} +@itemize + +@item +september 2009 + +Het Duitse blad LinuxUser schrijft een +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +artikel over LilyPond}. + + +@item +februari 2008 + +In @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, +artikelen op zijn persoonlijke site} vergelijkt Andrew +Hawryluk Finale en LilyPond in algemene termen, en evalueert +muzieknotatie-mogelijkheden van beide programma's in detail. +Het tweede artikel is een leerzame analyse van +muzieknotatie-kwesties in Rachmaninoff's Piano Prelude +No. 6, inclusief vergelijkingen met een hand-gegraveerde +referentie-uitgave. + +@item +juni 2006 + +@uref{http://distrowatch.com,DistroWatch} complimenteert +LilyPond en +@uref{http://distrowatch.com/weekly.php?issue=20060605,schrijft} +@qq{Dames en Heren, wij zijn blij te mogen aankondingen, +gebaseerd op verzoeken van lezers, dat de donatie van +DistroWatch mei 2006 is toegekent aan LilyPond +(@euro{}190.00) en Lua (US$250.00).} + +@item +december 2005 + +@uref{http://linuxjournal.com,Linux Journal} publiceert een +artikel getiteld +@uref{http://www.linuxjournal.com/article/8364, Maak +verbluffende Schenker gravures met GNU LilyPond}. Het is +een diepgaand maar praktisch uitgelicht artikel met scherp +gestoken LilyPond-gravures. Auteur Kris Shaffer merkt op +dat @qq{GNU LilyPond prachtige gravures maakt die +commerciële alternatieven op tweede-rangs laat lijken.} + +@item +20 augustus, 2005 + +Het Belgische dagblad De Standaard onderzoekt wat Free +Software auteurs bezield in een artikel getiteld +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} in de @q{DS2-bijlage}. +LilyPond wordt als een voorbeeld gebruikt en het artikel is +doorlucht met citaten van een e-mail interview met Jan +Nieuwenhuizen. Dit is LilyPonds eerste optreden in +mainstream gedrukte pers. + +@item +june 2005 + +Een Frans artikel over de LilyPond 2.6 uitgave verschijnt op +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +oktober 2004 + +De redacteurs van of Computer!Totaal, een Nederlands +computerblad, +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, +beschrijven LilyPond} in het oktober 2004-nummer als: +@qq{Prachtige gratis (open source) software [..] De +bladmuziek die LilyPond oplevert is inderdaad bijzonder +fraai [..] een zeer krachtig systeem waarvoor bijna +niets onmogelijk is.} + +@item +juli, augustus 2004 + +Dave Phillips schrijft een inleidend artikel voor +@uref{http://linuxjournal.com,Linux Journal}: Aan +de klinkende rand: LilyPond, delen +@uref{http://www.linuxjournal.com/article/7657, een} en +@uref{http://www.linuxjournal.com/article/7719, twee}. + +@item +maart 2004 + +Chris Cannam +@uref{http://www.all-day-breakfast.com/cannam/linux-musician/lilypond.html,interviewt} +Han-Wen Nienhuys en Jan Nieuwenhuizen op linuxmusician.com +(originele site opgeheven). Dit interview is gerecenceerd +in een +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, +slashdot artikel}. + +@item +februari 2004 + +Jazz-zanger Gail Selkirk schrijft over +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Duik in LilyPond}. @qq{... je kunt make lead sheets of volledige +orkestpartituren maken, en de resultaten kunnen verbluffend zijn.} +@uref{http://www.computermusic.co.uk/, Computer Music Special}, +nummer CMS06. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading Gebruikerservaringen + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, Aanvoerder van de celli, New York Philharmonic + +@qq{@dots{}Ik heb een paar toegiften geschreven voor +solo-cello die ik heb afgedrukt met LilyPond en die ik aan +Schirmer zal voorleggen ter publicatie. Ik weet zeker dat +hun gegraveerde versie niet half zo gelikt is als de mijne!} +@divEnd + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, professor in de compositieleer, Musikhochschule Freiburg + +@qq{Hoewel ik [LilyPond] nog niet zo goed ken, ben ik +@strong{erg} onder de indruk. Ik heb het programma gebruikt +om een motet van Josquin Desprez in te voeren in mensurale +notatie. Lilypond overtreft zonder twijfel en met gemak +alle andere muzieknotatieprogramma's voor wat betreft +snelheid, gebruiksgemak en schoonheid!} +@divEnd + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, componist (Brussels, Belgium) + +@qq{[..na de eerste orkestrepetitie] kreeg ik heel veel +complimenten over de kwaliteit van de partituren. En wat +nog veel mooier is: terwijl Lilypond allerlei manieren +biedt om te zorgen dat de partituren er nog mooier uitzien, +kreeg het orkest van mij slechts de ruwe, ongewijzigde +LilyPond-output.} +@divEnd + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, componist (Toronto, Canada) +@qq{Dank en lof voor het ontwikkelteam voor hun fantastische +werk. Ik heb nog nooit iets gezien wat maar in de buurt +komt van de output die ik bereik met Lilypond -- Ik ben er +zeker van dat dit fantastische programma aan al mijn +muziekpublicatie-wensen kan voldoen en deze zelfs zal +overtreffen. [..] hoofdzakelijk pure Lilypond output [..] +ziet er beter uit dan de meeste recente @q{professionele} +uitgaven waarmee ik het heb vergeleken (q.v., zo ongeveer +elke Warner Bros. partituur, en zelfs een groot deel van de +meest recente partituren van de @q{de oude +muziekuitgeverijen}). [..]} + +@qq{Doe ze dat maar eens na, Finale/Sibelius/Igor/of wie dan +ook!!!} +@divEnd + +@divClass{testimonial-item} +@subsubheading Chris Cannam, hoofdontwikkelaar van het @uref{http://www.rosegardenmusic.com/, RoseGarden} project +@qq{LilyPond is overduidelijk een zwaargewicht [in de +categorie prachtige muziek zetten].} +@divEnd + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} + +@qq{De wijze waarop muziek wordt ingevoerd voor LilyPond +laat mij op een muzikalere manier denken -- het is enkele +malen voorgekomen dat ik vertwijfeld was hoe ik Lelie nu zou +kunnen vertellen iets te graveren, om mezelf te realiseren +dat zelf wanneer het me precies zo zou lukken als de +componist het wilde, de muziek lastig te lezen zou zijn. +LilyPond maakt het mij een stuk eenvoudiger om in mijn +dubbele redacteur+graveer rol te werken.} + +@qq{Voor mijn beginnende muziekuitgeverij heb ik uitsluitend +LilyPond gebruikt. Vrijwel zonder uitzondering werd elke +componist overrompeld door de kwaliteit van de gravure +waneer ik hem de proefdrukken van zijn muziek presenteerde. +Ik verdien zelf ook een deel van deze lof -- ik heb veel +tijd besteed aan het verfijnen van de uitvoer, met name +overbindingen (hoofdzakelijk in akkoorden) -- maar LilyPond +biedt me een uitstekend uitgangspunt, een erg intuïtieve +interface, plus de mogelijkheid om absoluut alles te +veranderen als ik daar de tijd voor wil nemen. Ik ben ervan +overtuigd dat geen commercieel product hierbij ook maar +enigszins in de buurt kan komen.} +@divEnd + +@divClass{testimonial-item} +@subsubheading David Bobroff, bastrombonist, Iceland Symphony Orchestra + +@qq{Ik vind Lilypond fantastisch [..] Hoe beter ik het +programma leer kennen, hoe mooier ik het vind!} +@divEnd + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, elektrische gitaar (Ja, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, verwant aan}) +@qq{Ik ben zwaar onder de indruk van LilyPond [..]} + +@qq{DIT IS HET BESTE PROGRAMMA OOIT!!!} + +@qq{ENORM bedankt allemaal voor jullie fantastische werk en toewijding!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, @uref{http://www.mutopiaproject.org/, Mutopia} bijdrager + +@qq{Ik had een soort haat/liefde-verhouding met LilyPond. +Liefde omdat de eerste partituur die ik zag er zo +fantastisch uit zag! De beschrijving van de elegantie van +LilyPond klopt niet, het is nog veel mooier! [..] aangezien +LilyPond nog altijd beter wordt, en naarmate ik beter +doorzie hoe dingen worden gedaan in scheme, heb ik steeds +minder last van frustraties. Nouja, wat ik eigenlijk wil +zeggen is: dank jullie wel voor LilyPond, het is +prachtig.} +@divEnd + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, Dirigent bij het Theater van Koblenz in Duitsland en een befaamde GNU-hacker + +@qq{Hoe dan ook, LilyPond levert een verbazingwekkend goed resultaat!} + +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, ontwikkelaar van @uref{http://jackaudio.org/, JACK} en @uref{http://www.ardour.org/, Ardour} + +@qq{Ik vind [LilyPond] een ongelofelijk programma, en het +produceert prachtige, schitterende output. Toen ik vorig +jaar een interview over LilyPond las, kon ik niet wachten om +aan een paar vrienden van mij te laten zien hoeveel potentie +het wel niet heeft.} +@divEnd + +@divEnd + +@divClass{column-center-bottom} +@subheading En nu? + +Lees over onze @ref{Tekstinvoer}. +@divEnd + + +@node Tekstinvoer +@unnumberedsec Tekstinvoer +@translationof Text input + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading Muziek @qq{Compileren} + +@imageClickable{nereid-shot-small,png, (klik om te vergroten), nereid-shot,png, right} + +LilyPond is een @emph{batch} programma: het wordt uitgevoerd +op een tekstbestand waarin de muziek wordt beschreven. Het +resultaat kan op het beeldscherm worden bekeken of worden +afgedrukt. In bepaalde opzichten lijkt LilyPond meer op een +programmeertaal dan op een grafisch muziekprogramma. + +Je schrijft de muziek niet door noten van een grafische +werkbalk naar een zichzelf dynamisch verversende partituur +te slepen; je schrijft muziek door het intypen van tekst. +Deze tekst word geïnterpreteerd (of @qq{gecompileerd}) door +LilyPond, die hiervan prachtig gegraveerde bladmuziek maakt. + +Mensen die gewend zijn aan een grafische gebruikersinterface +moeten wellicht een nieuwe manier van werken aanleren, maar +de resultaten zijn de moeite meer dan waard! + +@warning{We presenteren een kort overzicht van onze +tekstinvoer -- het is niet zo ingewikkeld als het klinkt! +Maak je geen zorgen, je hoeft niet elk detail in deze +voorbeelden te begrijpen; in onze beginnershandleiding wordt +alles stap voor stap uitgelegd.} + +@subsubheading Waarom moeilijk doen als het ook makkelijk kan? +@c Het is zo eenvoudig als A B C + +Noten worden gecodeerd met letters en nummers. Speciale +commando's worden ingevoerd met een backslash. + +@imageFloat{text-input-1-annotate-nl,png,center} +@imageFloat{text-input-1-output,png,center} + +Verplaatsingen worden gevormd met verschillende benamingen: +voeg @code{-is} toe voor een kruis en @code{-es} voor een +mol. LilyPond bepaalt zelf waar de toevallige tekens +geplaatst worden. + +@imageFloat{text-input-2-annotate-nl,png,center} +@imageFloat{text-input-2-output,png,center} + +@subsubheading Popmuziek + +Combineer akkoorden en songteksten om zogenaamde leadsheets +te maken: + +@imageFloat{text-input-pop-annotate-nl,png,center} +@imageFloat{text-input-pop-output,png,center} + +@subsubheading Orkestpartijen + +Het invoerbestand bevat de noten van het muziekstuk. +Partituur en partijen kunnen vanuit dit zelfde invoerbestand +worden gemaakt. Dus het veranderen van een noot heeft +altijd invloed op partijen en partituur, zodat beide altijd +up-to-date zijn. Om dezelfde muziek op verschillende +plaatsen te kunnen invoegen, moet aan de noten een +@qq{variable} (een naam) worden toegekend. + +@imageFloat{text-input-parts-both-annotate-nl,png,center} + + +Deze variabele wordt vervolgens in één partij gebruikt (hier +getransponeerd en met samengevoegde rusten): + +@imageFloat{text-input-parts-single-annotate-nl,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +Dezelfde variabele wordt ook in de volledige partituur +gebruikt (hier klinkend en met uitgeschreven rusten): + +@imageFloat{text-input-score-annotate-nl,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Beginnershandleiding + +We realiseren ons dat veel gebruikers deze manier van muziek +invoeren een beetje vreemd vinden. Daarom hebben we een +uitgebreide handleiding geschreven om nieuwe gebruikers op +weg te helpen, te beginnen met @ref{Beginnen}. Het beste +kun je beginnen met deze beginnershandleiding omdat hierin +de meeste vragen worden beantwoord. + +Lees liever eerst de beginnershandleiding alvorens eventuele +fouten in het programma aan ons te melden! Nieuwe +gebruikers denken soms dat LilyPond niet goed werkt, terwijl +het in feite precies werkt zoals de bedoeling is. + +Verdere informatie is beschikbaar in +@ref{Handleidingen}. + +@subsubheading Omgevingen voor eenvoudiger bewerken + +@imageClickable{lilykde-screenshot-small,png, + (klik om te vergroten),lilykde-screenshot,png,right} + +LilyPond gaat hoofdzakelijk over het produceren van +gegraveerde bladmuziek van topkwaliteit; het maken van een +Grafische Gebruikers Interface (GUI) zou ons enkel van dit +doel afleiden. Er zijn wel andere projecten die als doel +hebben het maken van LilyPond-invoer gemakkelijker te maken. + +Sommige omgevingen hebben syntax highlighting, automatische +commando aanvulling, en voorbereide sjablonen. Andere +programma's bieden een GUI die directe manipulatie van een +grafische partituur mogelijk maakt. Voor meer informatie, +zie @ref{Eenvoudiger bewerken}. + +@divClass{column-center-bottom} +@subheading En nu? + +Je bent nu zover om @ref{Download, LilyPond te downloaden}. +Nog steeds niet overtuigd? +Lees over @ref{Eenvoudiger bewerken}. +@divEnd + +@node Eenvoudiger bewerken +@unnumberedsec Eenvoudiger bewerken +@translationof Easier editing + + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (klik om te vergroten),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +Gemaakt als een plugin voor de +@uref{http://www.jedit.org,jEdit} teksteditor, is +LilyPondTool één van de tekstgebaseerde gereedschappen met +de meeste functies voor het bewerken van +LilyPond-partituren. Functies omvatten een Document-wizard +met liedtekstondersteuning om documenten eenvoudiger op te +stellen, en geïntegreerde PDF-viewer met geavanceerde +point-and-click ondersteuning. + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (klik om te vergroten),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi is een muziek- en teksteditor speciaal voor +LilyPond met een ingebouwde PDF-viewer, een krachtige +partituur wizard en vele bewerkingsfuncties. Het is +gebaseerd op de KDE4 bibliotheken en draait momenteel op +alle soorten Linux en andere UNIX-achtige operating +systemen. + +@divEnd + +@divClass{column-center-top} +@subheading Grafische omgeving: Denemo + +@imageClickable{screenshot-denemo-small,png, + (klik om te vergroten),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo is een grafische editor die LilyPond-broncode +genereert, en ook audio afspeelt. Hiermee kunnen gebruikers +LilyPond-broncode parallel weergeven met het grafische +beeld. Extra LilyPond-verfijningen (tweaks) kunnen aan +noten, akkoorden enz. worden gekoppeld en worden opgeslagen +in het Denemo-bestand, zodat gebruikers toch grafisch verder +kunnen bewerken. + +Het verplaatsen van de cursor in de LilyPond-tekst +verplaatst ook de cursor in het grafische beeld, en +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 + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs is een teksteditor met taalgevoelige functies voor +veel verschillende computertalen. Emacs is een in hoge mate +uitbreidbare editor en kan gebruikt worden als een +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. + + +@uref{http://www.vim.org} + +Vim is een minimale teksteditor en is een uitbreiding van de +oudere Unix @command{vi}-editor. Het is uitbreidbaar en +configureerbaar. + +Als algemene regel geldt dat, wanneer je nog niet bekend +bent met Emacs of Vim, je waarschijnlijk liever een andere +editor verkiest voor het schrijven van +LilyPond-invoerbestanden. + +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 +voor het uitvoeren van LilyPond, @command{lilypond-book} en +@command{convert-ly} vanuit de editor, door gebruik te maken +van de uitbreidingen die beschikbaar zijn op: + +@example +@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts} +@end example + +@subsubheading TextMate + +@divEnd +@end ignore + +@divClass{column-center-top} +@subheading Andere programma's die LilyPond-code kunnen exporteren + +@subsubheading Score, tab en MIDI-editors: + +@itemize +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}, een audio en +MIDI-sequencer, die tevens een partituur-editor voor het editen +van enkelvoudige notenbalken heeft. + +@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 + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, een +multi-track tablatuur-editor en -speler, heeft 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. + +@item +@uref{http://canorus.org,Canorus} 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. + +@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}. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, een LISP-bibliotheek +voor het genereren van muzieknotatie. + +@end itemize +@divEnd + +@divClass{column-center-top} + +@subheading Andere programma's die niet actief worden ontwikkeld + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} is vervangen door +@uref{http://www.frescobaldi.org/,Frescobaldi}, en bestaat alleen nog als +LilyKDE3 voor KDE 3.5 en lilypond-KDE4 voor KDE 4.1. + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, dat +@uref{http://www.musicxml.com/xml.html,MusicXML} importeerde, is geforkt +in +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +en @uref{http://canorus.org,Canorus}. + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} is een grafisch +nootinvoer-programma en werkt ongeveer als een numeriek toetsenbord +dat LilyPond noten produceert. + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading En nu? +Je bent nu zover om @ref{Download, LilyPond te downloaden}. + +Nog steeds niet overtuigd? Veel componisten, muzikanten en +drigenten hebben geleerd muziek te schrijven in ons +invoerformaat. Ervaren gebruikers melden dat ze een +volledige partituur sneller kunnen invoeren in LilyPond dan +met een pianoklavier of muis+GUI! Misschien wil je de +@ref{Functies}, @ref{Voorbeelden} of @ref{Vrijheid} +herlezen, of wil je lezen over @ref{Producties} en +@ref{Recenties} van gebruikers. Onze aanpak van +berekende esthetiek van klassieke muziekgravure wordt +beschreven in @ref{Achtergrond}. + +@subheading Legalese + +@divClass{legal} + +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/nl/web/manuals.itexi b/Documentation/nl/web/manuals.itexi new file mode 100644 index 0000000000..352f52be04 --- /dev/null +++ b/Documentation/nl/web/manuals.itexi @@ -0,0 +1,595 @@ +@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*- +@ignore + Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b + + 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 Translator: Jan Nieuwenhuizen +@c Translation checker: Tineke de Munnik +@c Translation checker committish: 67d7d87 + +@node Handleidingen +@unnumbered Handleidingen +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, meer over \reference\}) +@spanEnd +@end macro + + +@divClass{heading-center} +@ifclear web_version + @heading Handleidingen voor LilyPond @version +@end ifclear +@ifset web_version + @heading Handleidingen voor LilyPond @versionStable +@end ifset + +@divEnd + +@c TODO: do we want these links to be in larger text / bold ? CSS. + +@divClass{column-center-top} +@subheading Inleiding + +@itemize + +@item @ref{Tekstinvoer}: +LilyPond is een @strong{tekstgebaseerd} muzieknotatieprogramma. Lees +dit eerst! + +@item @ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Beginnen}} +een @qq{onmisbare} gebruiksvriendelijke inleiding in LilyPond. +@details{Beginnen} + +@item @ifWebLinks{@manualStableGlossarySplitNoName-nl,@rglosnamed{Top,Terminologie}} +@emph{(optioneel te lezen)} +muziektermen en vertalingen. +@details{Terminologie} + +@item @ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}} +@emph{(optioneel te lezen)} +achtergrondinformatie over muzieknotatie dmv de computer. +@details{Essay} + + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Frequent gebruik + +@itemize + +@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notatie}} +syntax handleiding. +@details{Notatie} + +@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Gebruik}} +het draaien van alle programma's. +@details{Gebruik} + +@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippers}} +handige trucs en tips. +@details{Snippers} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Onregelmatig gebruik + +@itemize + +@item @ref{FAQ}: +Veel gestelde vragen. + +@item @ref{Top, Web}: +dit document. +@details{Web} + +@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Veranderingen}} +wat is nieuw? +@details{Veranderingen} + +@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Uitbreidingen}} +specialistische verfraaiingen (tweaks). +@details{Uitbreidingen} + +@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}} +tweaks-handleiding. +@details{Internals} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Ander materiaal + +@itemize + +@item @ref{Vertaald}: +status van de vertaling voor niet-Engelstaligen. + +@item @ref{Alles}: +te downloaden handleidingen en oude handleidingen. + +@item @ref{Development}: +handleidingen voor de ontwikkelversie. + +@item @ref{FDL}: +deze handleidingen zijn uitgegeven onder de GNU Free Documentation +License (GNU Vrije Documentatie Licentie). + +@end itemize + +@divEnd + + +@divClass{hide} +@menu +* Beginnen:: Beginnen. +* Terminologie:: Terminologie. +* Essay:: Essay. +* Notatie:: Notatie. +* Gebruik:: Gebruik. +* Snippers:: Snippers. +* FAQ:: FAQ. +* Web:: Web. +* Veranderingen:: Veranderingen. +* Uitbreidingen:: Uitbreidingen. +* Internals:: Internals. +* Vertaald:: Vertaald. +* Alles:: Alles. +* FDL:: FDL. +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Beginnen +@unnumberedsec Beginnen +@translationof Learning + +@divClass{column-left-top} +@subheading Beginnershandleiding + +Deze handleiding behandelt de eerste stappen van LilyPond en +legt in eenvoudige taal enkele belangrijke concepten uit. +Deze hoofdstukken kun je in chronologische volgorde +doorlezen. + +Er is een alinea @strong{Zie ook} aan het eind van elke +paragraaf met kruisverwijzingen naar andere paragrafen: deze +kruisverwijzingen kun je beter niet volgen bij de eerste +keer lezen. Als je de gehele beginnershandleiding een keer +hebt gelezen, wil je wellicht bepaalde stukken herlezen en +kun je deze kruisverwijzingen bijvoorbeeld volgen voor meer +informatie. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Beginnen, learning, + @rlearningnamed{Top,Learning}, + @manualStableLearningSplit, + @manualStableLearningBig, 1.5 MB, + @manualStableLearningPdf, 3 MB} + +@divEnd + + +@node Terminologie +@unnumberedsec Terminologie +@translationof Glossary + +@divClass{column-left-top} +@subheading Terminologie + +Dit verklaart muziektermen en bevat vertalingen in +verschillende talen. Als je niet zo bekend bent met +muzieknotatie of muziektermen (en vooral als Engels niet je +moedertaal is), is het aan te raden deze termijnlijst te +raadplegen. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Terminologie, music-glossary, + @rglosnamed{Top,Music glossary}, + @manualStableGlossarySplit-nl, + @manualStableGlossaryBig-nl, 1 MB, + @manualStableGlossaryPdf-nl, 1.5 MB} + +@divEnd + + +@node Essay +@unnumberedsec Essay + +@divClass{column-left-top} +@subheading Essay + +Deze essay geeft een kort overzicht van de geschiedenis van +de muziektypografie, gevolgd door een beschouwing van +LilyPonds graveertechnieken. Ook wordt er een vergelijking +gegeven tussen LilyPond en andere muzieknotatiesystemen. + +@warning{de gedetailleerde typografische voorbeelden zijn +beter te analyseren in de PDF-versie vanwege de veel hogere +resolutie.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Essay, essay, + @ressaynamed{Top,Essay}, + @manualStableEssaySplit, + @manualStableEssayBig, 2 MB, + @manualStableEssayPdf, 2.5 MB} + +@divEnd + + +@node Notatie +@unnumberedsec Notatie +@translationof Notation + +@divClass{column-left-top} +@subheading Notatie-handleiding + +Deze handleiding behandelt alle LilyPond-commando's die +notatie produceren. + +@warning{de notatie-handleiding veronderstelt dat de lezer +bekend is met het basismateriaal dat besproken is in de +beginnershandleiding en met de Engelse termen in de +terminologielijst.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notatie-handleiding, notation, + @rusernamed{Top,Notation}, + @manualStableNotationSplit, + @manualStableNotationBig, 7 MB, + @manualStableNotationPdf, 18 MB} + +@divEnd + + +@node Gebruik +@unnumberedsec Gebruik +@translationof Usage + +@divClass{column-left-top} +@subheading Gebruikshandleiding + +Deze handleiding laat zien hoe de programma's moeten worden +uitgevoerd, hoe LilyPond-notatie kan worden gecombineerd en +geïntegreerd met andere programma's, en geeft @qq{goede +gebruiken} voor een efficiënt gebruik. Dit is aanbevolen +lectuur indien je een groot project wilt beginnen. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Gebruik, usage, + @rprogramnamed{Top,Usage}, + @manualStableUsageSplit, + @manualStableUsageBig, 300 KB, + @manualStableUsagePdf, 400 KB} + +@divEnd + + +@node Snippers +@unnumberedsec Snippers +@translationof Snippets + +@divClass{column-left-top} +@subheading Snippers + +Dit toont een geselecteerde set LilyPond-snippers +(codefragementen) uit de +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet +Repository} (LSR). Al deze snippers zijn publiek domein. + +Let op dat dit document geen exacte deelverzameling is van +de LSR. LSR draait een stabiele versie van LilyPond, dus +elke snipper die nieuwe functies demonstreert van een +ontwikkelversie moet apart worden toegevoegd. Deze worden +opgeslagen in @file{Documentation/snippets/new/} in de +LilyPond source tree. + +De lijst met snippers voor elke subsectie van de notatie +zijn ook gekoppeld vanuit het @strong{Zie ook} gedeelte. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Snippers, snippets, + @rlsrnamed{Top,Snippets}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node FAQ +@unnumberedsec FAQ + +@divClass{column-center-top} +@subheading Vragen bij het begin + +@subsubheading Waar zijn het grafische notenwerkblad, de menu's en de werkbalken? + +In LilyPond schrijf je muziek door het invoeren van tekst. +Lees alsjeblieft over onze @ref{Tekstinvoer}. + + +@subsubheading Er is zo veel documentatie! Moet ik dat allemaal lezen? + +Je moet de @ref{Beginnen, Beginnershandleiding} lezen. Wat +betreft de rest van de documentatie, dat is een naslagwerk: +je leest alleen die onderdelen die gaan over het soort +notatie dat jij wilt produceren. + + +@subsubheading Maar dat is nog steeds heel veel leeswerk! Is het dat wel de moeite waard? + +Oordeel zelf; redenen waarom je LilyPond zou willen +gebruiken, worden besproken in de @ref{Inleiding}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Gebruikersvragen + +@subsubheading Iets werkt er niet! Hoe kan ik dat oplossen? + +Dit wordt uitgelegd in @rprogram{Troubleshooting}. + + +@subsubheading Waarom veranderen jullie de syntax? + +Dit wordt uitgelegd in @rprogram{Why does the syntax +change?}. + +@divEnd + + +@node Web +@unnumberedsec Web + +@divClass{column-left-top} +@subheading Web + +Deze handleiding geeft algemene informatie over LilyPond. +Het bevat ook informatie over verschillende +gebruikersgroepen en -forums, het sturen van foutrapporten +(bug reports) en ontwikkeling. + +@divEnd + +@divClass{column-right-bottom} +@subheading Lees het + +@subsubheading Meest recente handleiding + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading Web-handleiding in @versionDevel + +@docLinksBare{Web, web, + @ref{Top,Web}, + @manualDevelWebSplit-nl, + @manualDevelWebBig-nl, 1 MB, + @manualDevelWebPdf-nl, 2 MB} + +@divEnd + + +@node Veranderingen +@unnumberedsec Veranderingen +@translationof Changes + +@divClass{column-left-top} +@subheading Veranderingen + + +Dit is een overzicht van de belangrijkste veranderingen en +nieuwe functies in LilyPond sinds de vorige stabiele versie. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Veranderingen, changes, + @rchangesnamed{Top,Changes}, + @manualStableChangesSplit, + @manualStableChangesBig, 6 KB, + @manualStableChangesPdf, 200 KB} + +@divEnd + + +@node Uitbreidingen +@unnumberedsec Uitbreidingen +@translationof Extending + +@divClass{column-left-top} +@subheading LilyPond uitbreiden + +Deze handleiding laat zie hoe je uitbreidingen maakt voor +LilyPond. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Uitbreidingen, extending, + @rextendnamed{Top,Extending}, + @manualStableExtendingSplit, + @manualStableExtendingBig, 200 KB, + @manualStableExtendingPdf, 400 KB} + +@divEnd + + +@node Internals +@unnumberedsec Internals +@translationof Internals + +@divClass{column-left-top} +@subheading Internals handleiding + +Dit is een set van zwaar kruisgekoppelde pagina's die de +kleinste details van werkelijk elke klasse, object en +functie in LilyPond documenteren. Het wordt direct vanuit +de layout-definities in de broncode gegenereerd. + +Bijna alle layout-functionaliteit die intern wordt gebruikt, +is ook direct beschikbaar voor de gebruiker. Bijvoorbeeld, +de meeste variabelen die diktes, afstanden enz. bepalen, +kunnen in het invoerbestand worden veranderd. Er is een +ernorm aantal layout-opties en deze staan allemaal +beschreven in dit document. Elk onderdeel van de +notatie-handleiding heeft een @strong{Zie ook} subonderdeel +dat verwijst naar deze gegenereerde documentatie. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Internals, internals, + @rinternalsnamed{Top,Internals}, + @manualStableInternalsSplit, + @manualStableInternalsBig, 2.5 MB, + @manualStableInternalsPdf, 2.8 MB} + +@divEnd + + +@node Vertaald +@unnumberedsec Vertaald +@translationof Translated + +@divClass{column-center-bottom} +@subheading Status van de vertaling + +@include translations.itexi + +@divEnd + + +@node Alles +@unnumberedsec Alles +@translationof All + +@divClass{column-left-top} +@subheading Te downloaden versies + +@ifclear web_version +Tarballen voor downloaden uitsluitend beschikbaar op @uref{http://lilypond.org} +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable-nl + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Previous stable versions + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +LilyPond 2.12 Documentatie} + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +LilyPond 2.11 Documentatie} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +LilyPond 2.10 Documentatie} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +LilyPond 2.8 Documentatie} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +LilyPond 2.6 Documentatie} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +LilyPond 2.4 Documentatie} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +LilyPond 2.2 Documentatie} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +LilyPond 2.0 Documentatie} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +LilyPond 1.8 Documentatie} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +LilyPond 1.6 Documentatie} + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL + +@divClass{column-center-top} +@subheading Documentatie-licentie + +De documentatie voor GNU LilyPond is uitgegeven onder de GNU +Free Documentation License. Een inleiding op deze licentie +en onze redenen om hiervoor te kiezen, wordt gegeven in +@ref{Vrijheid}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd + + diff --git a/Documentation/notation.tely b/Documentation/notation.tely new file mode 100644 index 0000000000..84297d59da --- /dev/null +++ b/Documentation/notation.tely @@ -0,0 +1,125 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-notation.info +@settitle LilyPond Notation Reference +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@macro manualIntro +This manual provides a reference for all notation that can be +produced with LilyPond version @version{}. It assumes that +the reader is familiar with the material in the +@rlearningnamed{Top, Learning Manual}. +@end macro + +@c `Notation Reference' was born 1999-10-11 with git commit 940dda0... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 by the authors. +@end macro + + +@set FDL +@include macros.itexi + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Notation Reference of the LilyPond music engraving system +@omftype user manual +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Notation Reference} + + +@ifnottex + +@menu +* Musical notation:: Notation which is used in + almost all projects. +* Specialist notation:: Notation which is only used for + specific purposes. +* General input and output:: General information about + LilyPond input and output. +* Spacing issues:: Display of output on paper. +* Changing defaults:: Tuning output. + +Appendices + +* Notation manual tables:: Tables and charts. +* Cheat sheet:: Summary of LilyPond syntax. +* LilyPond grammar:: Syntax diagram for LilyPond parser. +* GNU Free Documentation License:: License of this document. +* LilyPond command index:: +* LilyPond index:: +@end menu + +@docMain +@end ifnottex + +@contents + +@allowcodebreaks false + +@include notation/notation.itely +@include notation/specialist.itely + +@include notation/input.itely +@include notation/spacing.itely + +@include notation/changing-defaults.itely + + +@include notation/notation-appendices.itely +@include notation/cheatsheet.itely + + + +@node LilyPond grammar +@appendix LilyPond grammar + +This appendix contains a description of the LilyPond grammar, as +output from the parser. + +@verbatiminclude ly-grammar.txt + + +@include fdl.itexi + + +@node LilyPond command index +@appendix LilyPond command index + +This index lists all the LilyPond commands and keywords with links +to those sections of the manual which describe or discuss their +use. Each link is in two parts. The first part points to the +exact location in the manual where the command or keyword appears; +the second part points to the start of the section of the manual +in which the command or keyword appears. + +@printindex ky + +@node LilyPond index +@appendix LilyPond index + +In addition to all the LilyPond commands and keywords, this index +lists musical terms and words which relate to each of them, with +links to those sections of the manual which describe or discuss +that topic. Each link is in two parts. The first part points to +the exact location in the manual where the topic appears; the +second part points to the start of the section of the manual where +that topic is discussed. + +@printindex cp + +@bye diff --git a/Documentation/notation/GNUmakefile b/Documentation/notation/GNUmakefile new file mode 100644 index 0000000000..c93c9e0624 --- /dev/null +++ b/Documentation/notation/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/notation/ancient.itely b/Documentation/notation/ancient.itely new file mode 100644 index 0000000000..bb7404d327 --- /dev/null +++ b/Documentation/notation/ancient.itely @@ -0,0 +1,2692 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c vim: foldmethod=marker +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@node Ancient notation +@section Ancient notation + +@lilypondfile[quote]{ancient-headword.ly} + +@cindex Vaticana, Editio +@cindex Medicaea, Editio +@cindex hufnagel +@cindex Petrucci +@cindex mensural + + +@menu +* Overview of the supported styles:: +* Ancient notation---common features:: +* Typesetting mensural music:: +* Typesetting Gregorian chant:: +* Working with ancient music---scenarios and solutions:: +@end menu + + +Support for ancient notation includes features for mensural +notation and Gregorian chant notation. These features can be +accessed either by modifying style properties of graphical objects +such as note heads and rests, or by using one of the pre-defined +contexts for mensural or Gregorian notation. + +Many graphical objects, such as note heads and flags, accidentals, +time signatures, and rests, provide a @code{style} property, which +can be changed to emulate several different styles of ancient +notation. See + +@itemize +@item @ref{Mensural note heads}, +@item @ref{Mensural accidentals and key signatures}, +@item @ref{Mensural rests}, +@item @ref{Mensural clefs}, +@item @ref{Gregorian clefs}, +@item @ref{Mensural flags}, +@item @ref{Mensural time signatures}. +@end itemize + +Some notational concepts are introduced specifically for ancient +notation, + +@itemize +@item @ref{Custodes}, +@item @ref{Divisiones}, +@item @ref{Ligatures}. +@end itemize + +@seealso +Music Glossary: +@rglos{custos}, +@rglos{ligature}, +@rglos{mensural notation}. + +Notation Reference: +@ref{Mensural note heads}, +@ref{Mensural accidentals and key signatures}, +@ref{Mensural rests}, +@ref{Gregorian clefs}, +@ref{Mensural flags}, +@ref{Mensural time signatures}, +@ref{Custodes}, +@ref{Divisiones}, +@ref{Ligatures}. + + +@node Overview of the supported styles +@subsection Overview of the supported styles + + +Three styles are available for typesetting Gregorian chant: + +@itemize +@item @emph{Editio Vaticana} is a complete style for +Gregorian chant, following the appearance of the Solesmes +editions, the official chant books of the Vatican since 1904. +LilyPond has support for all the notational signs used in this +style, including ligatures, @emph{custodes}, and special signs +such as the quilisma and the oriscus. + +@cindex Solesmes +@cindex Vaticana, Editio + +@item The @emph{Editio Medicaea} style offers certain features +used in the Medicaea (or Ratisbona) editions which were used prior +to the Solesmes editions. The most significant differences from +the @emph{Vaticana} style are the clefs, which have +downward-slanted strokes, and the note heads, which are square and +regular. + +@cindex Ratisbona, Editio +@cindex Medicaea, Editio + +@item The @emph{Hufnagel} (@qq{horseshoe nail}) or @emph{Gothic} +style mimics the writing style in chant manuscripts from Germany +and Central Europe during the middle ages. It is named after the +basic note shape (the @emph{virga}), which looks like a small +nail. +@cindex hufnagel +@end itemize + +Three styles emulate the appearance of late-medieval and +renaissance manuscripts and prints of mensural music: + +@itemize +@item The @emph{Mensural} style most closely resembles the +writing style used in late-medieval and early renaissance +manuscripts, with its small and narrow, diamond-shaped note heads +and its rests which approach a hand-drawn style. + +@cindex mensural + +@item The @emph{Neomensural} style is a modernized and +stylized version of the former: the note heads are broader and the +rests are made up of straight lines. This style is particularly +suited, e.g., for incipits of transcribed pieces of mensural +music. + +@cindex neomensural + +@item The @emph{Petrucci} style is named after Ottaviano Petrucci +(1466-1539), the first printer to use movable type for music (in +his @emph{Harmonice musices odhecaton}, 1501). The style uses +larger note heads than the other mensural styles. + +@cindex Petrucci + +@end itemize + +@emph{Baroque} and @emph{Classical} are not complete styles +but differ from the default style only in some details: certain +note heads (Baroque) and the quarter rest (Classical). + +Only the mensural style has alternatives for all aspects of the +notation. Thus, there are no rests or flags in the Gregorian +styles, since these signs are not used in plainchant notation, and +the Petrucci style has no flags or accidentals of its own. + +Each element of the notation can be changed independently of the +others, so that one can use mensural flags, petrucci note heads, +classical rests and vaticana clefs in the same piece, if one +wishes. + +@seealso +Music Glossary: +@rglos{mensural notation}, +@rglos{flag}. + + +@node Ancient notation---common features +@subsection Ancient notation---common features + +@menu +* Pre-defined contexts:: +* Ligatures:: +* Custodes:: +* Figured bass support:: +@end menu + + +@node Pre-defined contexts +@unnumberedsubsubsec Pre-defined contexts + +For Gregorian chant and mensural notation, there are pre-defined +voice and staff contexts available, which set all the various +notation signs to values suitable for these styles. If one is +satisfied with these defaults, one can proceed directly with note +entry without worrying about the details on how to customize a +context. See one of the pre-defined contexts +@code{VaticanaVoice}, @code{VaticanaStaff}, @code{MensuralVoice}, +and @code{MensuralStaff}. See further + +@itemize +@item @ref{Gregorian chant contexts}, +@item @ref{Mensural contexts}. +@end itemize + +@seealso +Music Glossary: +@rglos{mensural notation}. + +Notation Reference: +@ref{Gregorian chant contexts}, +@ref{Mensural contexts}. + + +@node Ligatures +@unnumberedsubsubsec Ligatures + +@cindex Ligatures + +@c TODO: Should double check if I recalled things correctly when I wrote +@c down the following paragraph by heart. + +A ligature is a graphical symbol that represents at least two +distinct notes. Ligatures originally appeared in the manuscripts +of Gregorian chant notation to denote ascending or descending +sequences of notes on the same syllable. They are also used in +mensural notation. + +Ligatures are entered by @emph{enclosing} them in @code{\[} and +@code{\]}. Some ligature styles may need additional input syntax +specific for this particular type of ligature. By default, the +@code{LigatureBracket} engraver just puts a square bracket +above the ligature. + +@lilypond[quote,ragged-right,verbatim] +\transpose c c' { + \[ g c a f d' \] + a g f + \[ e f a g \] +} +@end lilypond + +Two other ligature styles are available: the Vaticana for +Gregorian chant, and the Mensural for mensural music (only white +mensural ligatures are supported for mensural music, and with +certain limitations). To use any of these styles, the default +@code{Ligature_bracket_engraver} has to be replaced with one of the +specialized ligature engravers in the @code{Voice} context, +as explained in @ref{White mensural ligatures} and +@ref{Gregorian square neume ligatures}. + +@seealso +Music Glossary: +@rglos{ligature}. + +Notation Reference: +@ref{White mensural ligatures}, +@ref{Gregorian square neume ligatures}. + +@knownissues +Ligatures need special spacing that has not yet been implemented. As +a result, there is too much space between ligatures most of the time, +and line breaking often is unsatisfactory. Also, lyrics do not +correctly align with ligatures. + +Accidentals must not be printed within a ligature, but instead need to +be collected and printed in front of it. + +The syntax still uses the deprecated infix style +@code{\[ music expr \]}. For consistency reasons, it will eventually +be changed to postfix style @code{note\[ ... note\]}. + +@c Alternatively, the file +@c @file{gregorian-init.ly} can be included; it provides a scheme +@c function +@c @example +@c \ligature @var{music expr} +@c @end example +@c with the same effect and is believed to be stable. + +@c TODO: this does not seem to work at the moment. +@c -- eo + + +@node Custodes +@unnumberedsubsubsec Custodes + +@cindex custos +@cindex custodes + +A @emph{custos} (plural: @emph{custodes}; Latin word for @qq{guard}) +is a symbol that appears at the end of a staff. It anticipates the +pitch of the first note of the following line, thus helping the performer +to manage line breaks during performance. + +Custodes were frequently used in music notation until the +seventeenth century. Nowadays, they have survived only in a few +particular forms of musical notation such as contemporary editions +of Gregorian chant like the @emph{Editio Vaticana}. There are +different custos glyphs used in different flavors of notational +style. + +For typesetting custodes, just put a @code{Custos_engraver} into the +@code{Staff} context when declaring the @code{\layout} block, +and change the style of the custos with an @code{\override} if +desired, as shown in the following example: + +@lilypond[quote,ragged-right] +\score { + \relative c'' { + a1 + \break + g + } + \layout { + \context { + \Staff + \consists Custos_engraver + \override Custos #'style = #'mensural + } + } +} +@end lilypond + +The custos glyph is selected by the @code{style} property. The styles +supported are @code{vaticana}, @code{medicaea}, @code{hufnagel}, and +@code{mensural}. They are demonstrated in the following fragment. + +@lilypond[quote,ragged-right,fragment] +\new Lyrics \lyricmode { + \markup { \column { + \typewriter "vaticana " + \line { " " \musicglyph #"custodes.vaticana.u0" } + } } + \markup { \column { + \typewriter "medicaea " + \line { " " \musicglyph #"custodes.medicaea.u0" } + }} + \markup { \column { + \typewriter "hufnagel " + \line { " " \musicglyph #"custodes.hufnagel.u0" } + }} + \markup { \column { + \typewriter "mensural " + \line { " " \musicglyph #"custodes.mensural.u0" } + }} +} +@end lilypond + +@seealso +Music Glossary: +@rglos{custos}. + +Internals Reference: +@rinternals{Custos}. + +Snippets: +@rlsr{Ancient notation}. + + +@node Figured bass support +@unnumberedsubsubsec Figured bass support + +There is limited support for figured bass notation from the +Baroque period; see @ref{Figured bass}. + +@seealso +Music Glossary: +@rglos{figured bass}. + +Notation Reference: +@ref{Figured bass}. + + +@node Typesetting mensural music +@subsection Typesetting mensural music + +@menu +* Mensural contexts:: +* Mensural clefs:: +* Mensural time signatures:: +* Mensural note heads:: +* Mensural flags:: +* Mensural rests:: +* Mensural accidentals and key signatures:: +* Annotational accidentals (musica ficta):: +* White mensural ligatures:: +@end menu + + +@node Mensural contexts +@unnumberedsubsubsec Mensural contexts + +@cindex MensuralVoiceContext +@cindex MensuralStaffContext + +The predefined @code{MensuralVoice} and @code{MensuralStaff} +contexts can be used to engrave a piece in mensural style. These +contexts initialize all relevant context properties and grob +properties to proper values, so you can immediately go ahead +entering the chant, as the following excerpt demonstrates: + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new MensuralVoice = "discantus" \transpose c c' { + \override Score.BarNumber #'transparent = ##t { + c'1\melisma bes a g\melismaEnd + f\breve + \[ f1\melisma a c'\breve d'\melismaEnd \] + c'\longa + c'\breve\melisma a1 g1\melismaEnd + fis\longa^\signumcongruentiae + } + } + \new Lyrics \lyricsto "discantus" { + San -- ctus, San -- ctus, San -- ctus + } + >> +} +@end lilypond + + +@seealso +Music Glossary: +@rglos{mensural notation}. + + +@node Mensural clefs +@unnumberedsubsubsec Mensural clefs + +@cindex clefs + +The following table shows all mensural clefs that are supported via +the @code{\clef} command. Some of the clefs use the same glyph, +but differ only with respect to the line they are printed on. In +such cases, a trailing number in the name is used to enumerate +these clefs, numbered from the lowest to the highest line. Still, +you can manually force a clef glyph to be typeset on an arbitrary +line, as described in @ref{Clef}. The note printed to the right +side of each clef in the example column denotes the @code{c'} with +respect to that clef. + +Petrucci used C clefs with differently balanced left-side vertical +beams, depending on which staff line it is printed. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Description} +@tab +@b{Supported Clefs} +@tab +@b{Example} + +@item +mensural C clef +@tab +@code{mensural-c1}, @code{mensural-c2},@* +@code{mensural-c3}, @code{mensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +mensural F clef +@tab +@code{mensural-f} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-f" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +mensural G clef +@tab +@code{mensural-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "mensural-g" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +neomensural C clef +@tab +@code{neomensural-c1}, @code{neomensural-c2},@* +@code{neomensural-c3}, @code{neomensural-c4} +@tab +@lilypond[fragment,relative=1,notime] + \clef "neomensural-c2" c +@end lilypond + +@item +petrucci style C clefs, for use on different staff lines +(the example shows the 2nd staff line C clef) +@tab +@code{petrucci-c1}, @code{petrucci-c2},@* +@code{petrucci-c3}, @code{petrucci-c4},@* +@code{petrucci-c5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-c2" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +petrucci style F clefs, for use on different staff lines +(the example shows the 3rd staff line F clef) +@tab +@code{petrucci-f3}, @code{petrucci-f4},@* +@code{petrucci-f5} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-f3" + \override NoteHead #'style = #'mensural + c +@end lilypond + +@item +petrucci style G clef +@tab +@code{petrucci-g} +@tab +@lilypond[fragment,relative=1,notime] + \clef "petrucci-g" + \override NoteHead #'style = #'mensural + c +@end lilypond +@end multitable + +@seealso +Music Glossary: +@rglos{mensural notation}, +@rglos{clef}. + +Notation Reference: +@ref{Clef}. + + +@knownissues +The mensural g clef is mapped to the Petrucci g clef. + + +@node Mensural time signatures +@unnumberedsubsubsec Mensural time signatures + +@cindex mensuration sign +@cindex time signatures + +There is limited support for mensuration signs (which are similar to, +but not exactly the same as time signatures). The glyphs are hard-wired +to particular time fractions. In other words, to get a particular mensuration sign with the @code{\time n/m} command, @code{n} and +@code{m} have to be chosen according to the following table + +@lilypond[quote,ragged-right] +\layout { + indent = 0.0 + \context { + \Staff + \remove Staff_symbol_engraver + \remove Clef_engraver + \remove Time_signature_engraver + } +} +{ + \set Score.timing = ##f + \set Score.barAlways = ##t + s_\markup { "\\time 4/4" }^\markup { " " \musicglyph +#"timesig.neomensural44" } + s + s_\markup { "\\time 2/2" }^\markup { " " \musicglyph +#"timesig.neomensural22" } + s + s_\markup { "\\time 6/4" }^\markup { " " \musicglyph +#"timesig.neomensural64" } + s + s_\markup { "\\time 6/8" }^\markup { " " \musicglyph +#"timesig.neomensural68" } + \break + s_\markup { "\\time 3/2" }^\markup { " " \musicglyph +#"timesig.neomensural32" } + s + s_\markup { "\\time 3/4" }^\markup { " " \musicglyph +#"timesig.neomensural34" } + s + s_\markup { "\\time 9/4" }^\markup { " " \musicglyph +#"timesig.neomensural94" } + s + s_\markup { "\\time 9/8" }^\markup { " " \musicglyph +#"timesig.neomensural98" } + \break + s_\markup { "\\time 4/8" }^\markup { " " \musicglyph +#"timesig.neomensural48" } + s + s_\markup { "\\time 2/4" }^\markup { " " \musicglyph +#"timesig.neomensural24" } +} +@end lilypond + +Use the @code{style} property of grob @code{TimeSignature} +to select ancient time signatures. Supported styles are +@code{neomensural} and @code{mensural}. The above table uses the +@code{neomensural} style. The following examples show the +differences in style: + +@lilypond[ragged-right,fragment,relative=1,quote] +{ + \textLengthOn + + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter default } + + \override Staff.TimeSignature #'style = #'numbered + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter numbered } + + \override Staff.TimeSignature #'style = #'mensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter mensural } + + \override Staff.TimeSignature #'style = #'neomensural + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter neomensural } + \override Staff.TimeSignature #'style = #'single-digit + \time 2/2 + c1^\markup { \hspace #-2.0 \typewriter single-digit } +} +@end lilypond + +@ref{Time signature}, gives a general introduction to +the use of time signatures. + +@seealso +Music Glossary: +@rglos{mensural notation}. + +Notation Reference: +@ref{Time signature}. + +@knownissues +Ratios of note durations cannot change with the time signature, +as those are not constant. For +example, the ratio of 1@tie{}breve = 3@tie{}semibreves +(@emph{tempus perfectum}) can be made by hand, by setting + +@example +breveTP = #(ly:make-duration -1 0 3 2) +@dots{} +@{ c\breveTP f1 @} +@end example + +@noindent +This sets @code{breveTP} to 3/2 times 2 = 3 times a whole note. + +The @code{mensural68alt} and @code{neomensural68alt} symbols +(alternate symbols for 6/8) are not addressable with @code{\time}. +Use @code{\markup @{\musicglyph #"timesig.mensural68alt" @}} instead. + + +@node Mensural note heads +@unnumberedsubsubsec Mensural note heads + +@cindex note heads, ancient + +For ancient notation, a note head style other than the +@code{default} style may be chosen. This is accomplished by setting +the @code{style} property of the @code{NoteHead} object to +@code{baroque}, @code{neomensural}, @code{mensural}, +@code{petrucci}, @code{blackpetrucci} or @code{semipetrucci}. + +The @code{baroque} style differs from the @code{default} style by: + +@itemize +@item Providing a @code{maxima} note head, and +@item Using a square shape for @code{\breve} note heads. +@end itemize + +The @code{neomensural}, @code{mensural}, and @code{petrucci} styles +differ from the @code{baroque} style by: + +@itemize +@item Using rhomboidal heads for semibreves and all smaller durations, +and +@item Centering the stems on the note heads. +@end itemize + +The @code{blackpetrucci} style produces note heads usable in black +mensural notation or coloratio sections in white mensural notation. +Because note head style does not influence flag count, in +this style a semiminima should be notated as @code{a8*2}, not +@code{a4}, otherwise it will look like a minima. +The multiplyer can be different if coloratio is used e.g. to notate +triplets. + +Use @code{semipetrucci} style to draw half-colored +note heads (breves, longas and maximas). + + +The following example demonstrates the @code{petrucci} style: + +@c Renaissance music doesn't use bar lines ... but they do help to +@c separate the notes for easier identification. + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\autoBeamOff +\override NoteHead #'style = #'petrucci +a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a' +\override NoteHead #'style = #'semipetrucci +a'\breve*5/6 +\override NoteHead #'style = #'blackpetrucci +a'8*4/3 a' +\override NoteHead #'style = #'petrucci +a'\longa +@end lilypond + + +@ref{Note head styles}, gives an overview of all available note head +styles. + +@seealso +Music Glossary: +@rglos{mensural notation}, +@rglos{note head}. + +Notation Reference: +@ref{Note head styles}. + + +@node Mensural flags +@unnumberedsubsubsec Mensural flags + +@cindex flags + +Use the @code{flag-style} property of grob @code{Stem} to +select ancient flags. Besides the @code{default} flag style, +only the @code{mensural} style is supported. + +@lilypond[quote,fragment,ragged-right,verbatim] +\override Stem #'flag-style = #'mensural +\override Stem #'thickness = #1.0 +\override NoteHead #'style = #'mensural +\autoBeamOff +c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 +c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 +@end lilypond + +Note that the innermost flare of each mensural flag always is +vertically aligned with a staff line. + +There is no particular flag style for neo-mensural or Petrucci notation. +@c Hence, +@c when typesetting the incipit of a transcribed piece of mensural +@c music, the default flag style should be used. +There are no flags in Gregorian chant notation. + + +@seealso +Music Glossary: +@rglos{mensural notation}, +@rglos{flag}. + + +@knownissues +The attachment of ancient flags to stems is slightly off. +@c due to a change in early 2.3.x. + +Vertically aligning each flag with a staff line assumes that stems +always end either exactly on or exactly in the middle between two +staff lines. This may not always be true when using advanced layout +features of classical notation (which however are typically out of +scope for mensural notation). + + +@node Mensural rests +@unnumberedsubsubsec Mensural rests + +@cindex rests, ancient + +Use the @code{style} property of grob @code{Rest} to select +ancient rests. Supported styles are @code{classical}, +@code{neomensural}, and @code{mensural}. @code{classical} differs +from the @code{default} style only in that the quarter rest looks +like a horizontally mirrored 8th rest. The @code{mensural} and +the @code{neomensural} styles mimic the appearance of rests in +manuscripts and prints up to the 16th century. + +The following example demonstrates the @code{mensural} and +@code{neomensural} styles: + +@lilypond[quote,fragment,ragged-right,verbatim] +\set Score.skipBars = ##t +\override Rest #'style = #'classical +r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'mensural +r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break +\override Rest #'style = #'neomensural +r\longa^"neomensural" r\breve r1 r2 r4 r8 r16 +@end lilypond + +There are no 32th and 64th rests specifically for the mensural or +neo-mensural style. Instead, the rests from the default style will be +taken. + +@seealso +Music Glossary: +@rglos{mensural notation}. + +Notation Reference: +@ref{Rests}. + +Snippets: +@rlsr{Ancient notation}. + + +@knownissues +The glyph for the maxima rest in mensural style is actually a perfect +longa rest; use two (or three) longa rests to print a maxima rest. +Longa rests are not grouped automatically, so have to be done manually by +using pitched rests. + + +@node Mensural accidentals and key signatures +@unnumberedsubsubsec Mensural accidentals and key signatures + +@cindex accidentals +@cindex key signature + +The @code{mensural} style provides a sharp and a flat sign +different from the default style. If called for, the natural sign +will be taken from the @code{vaticana} style. + +@lilypond[quote,ragged-right,staffsize=26] +\markup { + \column { + "mensural" + \line { " " \musicglyph #"accidentals.mensural-1" + " " \musicglyph #"accidentals.mensural1" } + } +} +@end lilypond + +The style for accidentals and key signatures is controlled by the +@code{glyph-name-alist} property of the grobs @code{Accidental} and +@code{KeySignature}, respectively; e.g.: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + +@seealso +Music Glossary: +@rglos{mensural notation}, +@rglos{Pitch names}, +@rglos{accidental}, +@rglos{key signature}. + +Notation Reference: +@ref{Pitches}, +@ref{Accidentals}, +@ref{Automatic accidentals}, +@ref{Key signature}. + +Internals Reference: +@rinternals{KeySignature}. + + +@node Annotational accidentals (musica ficta) +@unnumberedsubsubsec Annotational accidentals (@emph{musica ficta}) + +In European music from before about 1600, singers were expected to +chromatically alter notes at their own initiative according to +certain rules. This is called @notation{musica ficta}. In modern +transcriptions, these accidentals are usually printed over the +note. + +@cindex Accidental, musica ficta +@cindex Musica ficta + +Support for such suggested accidentals is included, and can be +switched on by setting @code{suggestAccidentals} to true. + +@funindex suggestAccidentals + +@lilypond[verbatim,fragment,relative=1] +fis gis +\set suggestAccidentals = ##t +ais bis +@end lilypond + +This will treat @emph{every} subsequent accidental as +@emph{musica ficta} until it is unset with +@code{\set suggestAccidentals = ##f}. A more practical way is to +use @code{\once \set suggestAccidentals = ##t}, which can even be +defined as a convenient shorthand: + +@lilypond[quote,verbatim] +ficta = { \once \set suggestAccidentals = ##t } +\score { \relative c'' + \new MensuralVoice { + \once \set suggestAccidentals = ##t + bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1 + } +} +@end lilypond + + +@seealso +Internals Reference: +@rinternals{Accidental_engraver}, +@rinternals{AccidentalSuggestion}. + + +@node White mensural ligatures +@unnumberedsubsubsec White mensural ligatures + +@cindex Mensural ligatures +@cindex White mensural ligatures + +There is limited support for white mensural ligatures. + +To engrave white mensural ligatures, in the layout block, replace +the @code{Ligature_bracket_engraver} with the +@code{Mensural_ligature_engraver} in the @code{Voice} +context: + +@example +\layout @{ + \context @{ + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + @} +@} +@end example + +There is no additional input language to describe the shape of a +white mensural ligature. The shape is rather determined solely from +the pitch and duration of the enclosed notes. While this approach may +take a new user a while to get accustomed to, it has the great advantage +that the full musical information of the ligature is known internally. +This is not only required for correct MIDI output, but also allows for +automatic transcription of the ligatures. + +At certain places two consecutive notes can be represented either as +two squares or as an oblique parallelogram (flexa shape). In such +cases the default is the two squares, but a flexa can be required by +setting the @code{ligature-flexa} property of the @emph{second} note +head. The length of a flexa can be set by the note head property +@code{flexa-width}. + +For example, + +@c @example +@c \set Score.timing = ##f +@c \set Score.defaultBarType = "empty" +@c \override NoteHead #'style = #'neomensural +@c \override Staff.TimeSignature #'style = #'neomensural +@c \clef "petrucci-g" +@c \[ c'\maxima g \] +@c \[ d\longa c\breve f e d \] +@c \[ c'\maxima d'\longa \] +@c \[ e'1 a g\breve \] +@c @end example +@lilypond[quote,ragged-right,verbatim] +\score { + \transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'petrucci + \override Staff.TimeSignature #'style = #'mensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa + \override NoteHead #'ligature-flexa = ##t + \once \override NoteHead #'flexa-width = #3.2 + c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] + } + \layout { + \context { + \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + } +} +@end lilypond + +Without replacing @code{Ligature_bracket_engraver} with +@code{Mensural_ligature_engraver}, the same music transcribes +to the following + +@lilypond[quote,ragged-right] +\transpose c c' { + \set Score.timing = ##f + \set Score.defaultBarType = "empty" + \override NoteHead #'style = #'petrucci + \override Staff.TimeSignature #'style = #'mensural + \clef "petrucci-g" + \[ c'\maxima g \] + \[ d\longa + \override NoteHead #'ligature-flexa = ##t + \once \override NoteHead #'flexa-width = #3.2 + c\breve f e d \] + \[ c'\maxima d'\longa \] + \[ e'1 a g\breve \] +} +@end lilypond + +@seealso +Music Glossary: +@rglos{ligature}. + +Notation Reference: +@ref{Gregorian square neume ligatures}, +@ref{Ligatures}. + +@knownissues +Horizontal spacing of ligatures is poor. +Accidentals may collide with previous notes. + +@node Typesetting Gregorian chant +@subsection Typesetting Gregorian chant + +@menu +* Gregorian chant contexts:: +* Gregorian clefs:: +* Gregorian accidentals and key signatures:: +* Divisiones:: +* Gregorian articulation signs:: +* Augmentum dots (morae):: +* Gregorian square neume ligatures:: +@end menu + +When typesetting a piece in Gregorian chant notation, the +@code{Vaticana_ligature_engraver} automatically selects the +proper note heads, so there is no need to explicitly set the note +head style. Still, the note head style can be set, e.g., to +@code{vaticana_punctum} to produce punctum neumes. Similarly, the +@code{Mensural_ligature_engraver} automatically assembles +mensural ligatures. + +@seealso +Music Glossary: +@rglos{ligature}. + +Notation Reference: +@ref{White mensural ligatures}, +@ref{Ligatures}. + +@node Gregorian chant contexts +@unnumberedsubsubsec Gregorian chant contexts + +@cindex VaticanaVoiceContext +@cindex VaticanaStaffContext + +The predefined @code{VaticanaVoiceContext} and +@code{VaticanaStaffContext} can be used to engrave a piece of +Gregorian chant in the style of the Editio Vaticana. These contexts +initialize all relevant context properties and grob properties to +proper values, so you can immediately go ahead entering the chant, as +the following excerpt demonstrates: + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + << + \new VaticanaVoice = "cantus" { + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] + f \divisioMinima + \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] + c' \divisioMinima \break + \[ c'\melisma c' \flexa a \] + \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima + } + \new Lyrics \lyricsto "cantus" { + San- ctus, San- ctus, San- ctus + } + >> +} +@end lilypond + + +@c @seealso +@c TODO: nothing here yet ... + + +@node Gregorian clefs +@unnumberedsubsubsec Gregorian clefs + +@cindex clefs + +The following table shows all Gregorian clefs that are supported via +the @code{\clef} command. Some of the clefs use the same glyph, +but differ only with respect to the line they are printed on. In +such cases, a trailing number in the name is used to enumerate +these clefs, numbered from the lowest to the highest line. Still, +you can manually force a clef glyph to be typeset on an arbitrary +line, as described in @ref{Clef}. The note printed to the right +side of each clef in the example column denotes the @code{c'} with +respect to that clef. + +@multitable @columnfractions .4 .4 .2 +@item +@b{Description} +@tab +@b{Supported Clefs} +@tab +@b{Example} + +@item +Editio Vaticana style do clef +@tab +@code{vaticana-do1}, @code{vaticana-do2},@* +@code{vaticana-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-do2" + c +@end lilypond + +@item +Editio Vaticana style fa clef +@tab +@code{vaticana-fa1}, @code{vaticana-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'vaticana.punctum + \clef "vaticana-fa2" + c +@end lilypond + +@item +Editio Medicaea style do clef +@tab +@code{medicaea-do1}, @code{medicaea-do2},@* +@code{medicaea-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-do2" + c +@end lilypond + +@item +Editio Medicaea style fa clef +@tab +@code{medicaea-fa1}, @code{medicaea-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'medicaea.punctum + \clef "medicaea-fa2" + c +@end lilypond + +@item +hufnagel style do clef +@tab +@code{hufnagel-do1}, @code{hufnagel-do2},@* +@code{hufnagel-do3} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do2" + c +@end lilypond + +@item +hufnagel style fa clef +@tab +@code{hufnagel-fa1}, @code{hufnagel-fa2} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'line-count = #4 + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-fa2" + c +@end lilypond + +@item +hufnagel style combined do/fa clef +@tab +@code{hufnagel-do-fa} +@tab +@lilypond[fragment,relative=1,notime] + \override Staff.StaffSymbol #'color = #red + \override Staff.LedgerLineSpanner #'color = #red + \override Voice.Stem #'transparent = ##t + \override NoteHead #'style = #'hufnagel.punctum + \clef "hufnagel-do-fa" + c +@end lilypond +@end multitable + + +@seealso +Music Glossary: +@rglos{clef}. + +Notation Reference: +@ref{Clef}. + + +@node Gregorian accidentals and key signatures +@unnumberedsubsubsec Gregorian accidentals and key signatures + +@cindex accidentals +@cindex key signature + +Accidentals for the three different Gregorian styles are available: + +@lilypond[quote,ragged-right,staffsize=26] +\markup { + \column { + "vaticana" + \line { " " \musicglyph #"accidentals.vaticana-1" + " " \musicglyph #"accidentals.vaticana0" } + } + \column { + "medicaea" + \line { " " \musicglyph #"accidentals.medicaea-1" } + } + \column { + "hufnagel" + \line { " " \musicglyph #"accidentals.hufnagel-1" } + } +} +@end lilypond + +As shown, not all accidentals are supported by each style. When +trying to access an unsupported accidental, LilyPond will switch to a +different style. + +@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] +@c {ancient-accidentals.ly} + +The style for accidentals and key signatures is controlled by the +@code{glyph-name-alist} property of the grobs @code{Accidental} and +@code{KeySignature}, respectively; e.g.: + +@code{\override Staff.Accidental #'glyph-name-alist = +#alteration-mensural-glyph-name-alist} + + +@seealso +Music Glossary: +@rglos{accidental}, +@rglos{key signature}. + +Notation Reference: +@ref{Pitches}, +@ref{Accidentals}, +@ref{Automatic accidentals}, +@ref{Key signature}. + +Internals Reference: +@rinternals{KeySignature}. + + +@node Divisiones +@unnumberedsubsubsec Divisiones + +@cindex divisio +@cindex divisiones +@cindex finalis + +There are no rests in Gregorian chant notation; instead, it uses +@ref{Divisiones}. + +A @emph{divisio} (plural: @emph{divisiones}; Latin word for +@q{division}) is a staff context symbol that is used to indicate +the phrase and section structure of Gregorian music. The musical +meaning of @emph{divisio minima}, @emph{divisio maior}, and +@emph{divisio maxima} can be characterized as short, medium, and +long pause, somewhat like the breath marks from @ref{Breath marks}. +The @emph{finalis} sign not only marks the end of a chant, but is +also frequently used within a single antiphonal/responsorial chant +to mark the end of each section. + +To use divisiones, include the file @file{gregorian.ly}. It +contains definitions that you can apply by just inserting +@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima}, +and @code{\finalis} at proper places in the input. Some editions use +@emph{virgula} or @emph{caesura} instead of divisio minima. +Therefore, @file{gregorian.ly} also defines @code{\virgula} and +@code{\caesura} + +@lilypond[quote,ragged-right] +\include "gregorian.ly" +\score { + << + \context VaticanaVoice { + \override TextScript #'padding = #3 + g a g + s^\markup { "divisio minima" } + \divisioMinima + g a g + s^\markup { "divisio maior" } + \divisioMaior + g a g + s^\markup { "divisio maxima" } + \divisioMaxima + \break + g a g + s^\markup { "finalis" } + \finalis + g a g + s^\markup { "virgula" } + \virgula + g a g + s^\markup { "caesura" } + \caesura + g a g + } + >> +} +@end lilypond + + +@predefined +@funindex \virgula +@code{\virgula}, +@funindex \caesura +@code{\caesura}, +@funindex \divisioMinima +@code{\divisioMinima}, +@funindex \divisioMaior +@code{\divisioMaior}, +@funindex \divisioMaxima +@code{\divisioMaxima}, +@funindex \finalis +@code{\finalis}. +@endpredefined + +@seealso +Music Glossary: +@rglos{caesura}, +@rglos{divisio}. + +Notation Reference: +@ref{Breath marks}. + +Installed Files: +@file{gregorian.ly}. + + +@node Gregorian articulation signs +@unnumberedsubsubsec Gregorian articulation signs + +@cindex articulations + +In addition to the standard articulation signs described in +section @ref{Articulations and ornamentations}, articulation signs +specifically designed for use with notation in +@emph{Editio Vaticana} style are provided. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \override TextScript #'font-family = #'typewriter + \override TextScript #'font-shape = #'upright + \override Script #'padding = #-0.1 + a\ictus_"ictus " \bar "" \break + a\circulus_"circulus " \bar "" \break + a\semicirculus_"semicirculus " \bar "" \break + a\accentus_"accentus " \bar "" \break + \[ a_"episema" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] + } +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Articulations and ornamentations}. + +Snippets: +@rlsr{Ancient notation}. + +Internals Reference: +@rinternals{Episema}, +@rinternals{EpisemaEvent}, +@rinternals{Episema_engraver}, +@rinternals{Script}, +@rinternals{ScriptEvent}, +@rinternals{Script_engraver}. + + +@knownissues +Some articulations are vertically placed too closely to the +corresponding note heads. + + +@node Augmentum dots (morae) +@unnumberedsubsubsec Augmentum dots (@emph{morae}) + +Augmentum dots, also called @emph{morae}, are added with the music +function @code{\augmentum}. Note that @code{\augmentum} is +implemented as a unary music function rather than as head prefix. It +applies to the immediately following music expression only. That is, +@code{\augmentum \virga c} will have no visible effect. Instead, say +@code{\virga \augmentum c} or @code{\augmentum @{\virga c@}}. Also +note that you can say @code{\augmentum @{a g@}} as a shortcut for +@code{\augmentum a \augmentum g}. + +@lilypond[quote,ragged-right,verbatim] +\include "gregorian.ly" +\score { + \new VaticanaVoice { + \[ \augmentum a \flexa \augmentum g \] + \augmentum g + } +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Breath marks}. + +Internals Reference: +@rinternals{BreathingSign}. + +Snippets: +@rlsr{Ancient notation}. + + +@node Gregorian square neume ligatures +@unnumberedsubsubsec Gregorian square neume ligatures + +@cindex Square neumes ligatures +@cindex Gregorian square neumes ligatures + +There is limited support for Gregorian square neumes notation +(following the style of the Editio Vaticana). Core ligatures can +already be typeset, but essential issues for serious typesetting are +still lacking, such as (among others) horizontal alignment of multiple +ligatures, lyrics alignment, and proper handling of accidentals. + +The support for Gregorian neumes is enabled by @code{\include}ing +@file{gregorian.ly} at the beginning of the file. This makes available +a number of extra commands to produce the neume symbols used in +plainchant notation. + + + +Note heads can be @emph{modified} and/or @emph{joined}. + +@itemize +@item The shape of +the note head can be modified by @emph{prefixing} the note name +with any of the following commands: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. + +@item Ligatures, properly speaking (i.e. notes joined together), are +produced by placing one of the joining commands @code{\pes} or +@code{\flexa}, for upwards and downwards movement, respectively, +@emph{between} the notes to be joined. +@end itemize + +A note name without any qualifiers will produce a @emph{punctum}. +All other neumes, including the single-note neumes with a +different shape such as the @emph{virga}, are in principle +considered as ligatures and should therefore be placed +between @code{\[...\]}. +@c Regarding the @emph{punctum}, @code{b} and @code{\[ b \]} are +@c equivalent. + +@noindent +Single-note neumes: + +@itemize +@item The @emph{punctum} is the basic note shape (in the +@emph{Vaticana} style: a square with some curvation for +typographical finesse). In addition to the regular +@emph{punctum}, there is also the oblique @emph{punctum +inclinatum}, produced with the prefix @code{\inclinatum}. The +regular @emph{punctum} can be modified with @code{\cavum}, which +produces a hollow note, and @code{\linea}, which draws vertical +lines on either side of the note. + +@item The @emph{virga} has a descending stem on the right side. It is +produced by the modifier @code{\virga}. +@end itemize + +@noindent +Ligatures + +Unlike most other neumes notation systems, the typographical +appearance of ligatures is not directly dictated by the input +commands, but follows certain conventions dependent on musical +meaning. For example, a three-note ligature with the musical shape +low-high-low, such as @code{\[ a \pes b \flexa g \]}, produces a +Torculus consisting of three Punctum heads, while the shape +high-low-high, such as @code{\[ a \flexa g \pes b \]}, produces a +Porrectus with a curved flexa shape and only a single Punctum +head. There is no command to explicitly typeset the curved flexa +shape; the decision of when to typeset a curved flexa shape is +based on the musical input. The idea of this approach is to +separate the musical aspects of the input from the notation style +of the output. This way, the same input can be reused to typeset +the same music in a different style of Gregorian chant notation. + +@noindent +Liquescent neumes + +Another main category of notes in Gregorian chant is the so-called +liquescent neumes. They are used under certain circumstances at +the end of a syllable which ends in a @q{liquescent} letter, i.e. +the sounding consonants that can hold a tone (the nasals, l, r, v, +j, and their diphthong equivalents). Thus, the liquescent neumes +are never used alone (although some of them can be produced), and +they always fall at the end of a ligature. + +Liquescent neumes are represented graphically in two different, +more or less interchangeable ways: with a smaller note or by +@q{twisting} the main note upwards or downwards. The first is +produced by making a regular @code{pes} or @code{flexa} and +modifying the shape of the second note: +@code{\[ a \pes \deminutum b \] }, the second by modifying the shape +of a single-note neume with @code{\auctum} and one of the direction +markers @code{\descendens} or @code{\ascendens}, e.g., +@code{ \[ \auctum \descendens a \] }. + +@noindent +Special signs + +A third category of signs is made up of a small number of signs +with a special meaning (which, incidentally, in most cases is only +vaguely known): the @emph{quilisma}, the @emph{oriscus}, and the +@emph{strophicus}. These are all produced by prefixing a note name +with the corresponding modifier, @code{\quilisma}, +@code{\oriscus}, or @code{\stropha}. + +Virtually, within the ligature delimiters @code{\[} and @code{\]}, +any number of heads may be accumulated to form a single ligature, +and head prefixes like @code{\pes}, @code{\flexa}, @code{\virga}, +@code{\inclinatum}, etc. may be mixed in as desired. The use of +the set of rules that underlies the construction of the ligatures +in the above table is accordingly extrapolated. This way, +infinitely many different ligatures can be created. + +Note that the use of these signs in the music itself follows +certain rules, which are not checked by LilyPond. E.g., the +@emph{quilisma} is always the middle note of an ascending +ligature, and usually falls on a half-tone step, but it is +perfectly possible, although incorrect, to make a single-note +quilisma. + +In addition to the note signs, @file{gregorian.ly} also defines the +commands @code{\versus}, @code{\responsum}, @code{\ij}, +@code{\iij}, @code{\IJ}, and @code{\IIJ}, that will produce the +corresponding characters, e.g., for use in lyrics, as section +markers, etc. These commands use special Unicode characters and +will only work if a font is used which supports them. + + +@c neume table + +The following table shows a limited, but still representative pool +of Gregorian ligatures, together with the code fragments that +produce the ligatures. The table is based on the extended neumes +table of the 2nd volume of the Antiphonale Romanum +(@emph{Liber Hymnarius}), published 1983 by the monks of Solesmes. +The first column gives the name of the ligature, with the main form in +boldface and the liquescent forms in italics. The third column +shows the code fragment that produces this ligature, using +@code{g}, @code{a}, and @code{b} as example pitches. + + +@b{Single-note neums} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Basic} and @emph{Liquescent} forms +@tab +@b{Output} +@tab +@b{LilyPond@* +code} + +@c TODO: \layout block is identical in all of the below examples. +@c Therefore, it should somehow be included rather than duplicated all +@c the time. --jr + +@c why not make variables in ly/engraver-init.ly? --hwn + +@c Because it's just used to typeset plain notes without +@c a staff for demonstration purposes rather than something +@c special of Gregorian chant notation. --jr + + +@item +@b{Punctum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \cavum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \cavum b \]} + +@item +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum + \[ \linea b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \linea b \]} + +@item +@emph{Punctum Auctum Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Ascendens + \[ \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \ascendens b \]} + +@item +@emph{Punctum Auctum Descendens} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Auctum Descendens + \[ \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \auctum \descendens b \]} + +@item +@b{Punctum inclinatum} +@tab +@lilypond[staffsize=26,line-width=1.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum + \[ \inclinatum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum b \]} + +@item +@emph{Punctum Inclinatum Auctum} +@tab +@lilypond[staffsize=26,line-width=2.5\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Auctum + \[ \inclinatum \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \auctum b \]} + +@item +@emph{Punctum Inclinatum Parvum} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Punctum Inclinatum Parvum + \[ \inclinatum \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \inclinatum \deminutum b \]} + +@item +@b{Virga} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Virga + \[ \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab + +@end multitable + +@noindent +@b{Two-note ligatures} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Clivis vel Flexa} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis vel Flexa + \[ b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa g \]} + + +@item +@emph{Clivis Aucta Descendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Descendens + \[ b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \descendens g \]} + +@item +@emph{Clivis Aucta Ascendens} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Clivis Aucta Ascendens + \[ b \flexa \auctum \ascendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \auctum \ascendens g \]} + +@item +@emph{Cephalicus} +@tab +@lilypond[staffsize=26,line-width=2.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Cephalicus + \[ b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ b \flexa \deminutum g \]} + +@item +@b{Podatus/Pes} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Podatus vel Pes + \[ g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes b \]} + +@item +@emph{Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens + \[ g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \descendens b \]} + +@item +@emph{Pes Auctus Ascendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Ascendens + \[ g \pes \auctum \ascendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \auctum \ascendens b \]} + +@item +@emph{Epiphonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Epiphonus + \[ g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \deminutum b \]} + +@item +@emph{Pes Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Initio Debilis + \[ \deminutum g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes b \]} + +@item +@emph{Pes Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Auctus Descendens Initio Debilis + \[ \deminutum g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum g \pes \auctum \descendens b \]} + +@end multitable + +@noindent +@b{Multi-note ligatures} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Torculus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus + \[ a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens + \[ a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus + \[ a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \pes b \flexa \deminutum g \]} + +@item +@emph{Torculus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Initio Debilis + \[ \deminutum a \pes b \flexa g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa g \]} + +@item +@emph{Torculus Auctus Descendens Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Auctus Descendens Initio Debilis + \[ \deminutum a \pes b \flexa \auctum \descendens g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} + +@item +@emph{Torculus Deminutus Initio Debilis} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Torculus Deminutus Initio Debilis + \[ \deminutum a \pes b \flexa \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \deminutum a \pes b \flexa \deminutum g \]} + +@item +@b{Porrectus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus + \[ a \flexa g \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes b \]} + +@item +@emph{Porrectus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Auctus Descendens + \[ a \flexa g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \auctum \descendens b \]} + +@item +@emph{Porrectus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Porrectus Deminutus + \[ a \flexa g \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ a \flexa g \pes \deminutum b \]} + +@item +@b{Climacus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus + \[ \virga b \inclinatum a \inclinatum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum g \]} + +@item +@emph{Climacus Auctus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Auctus + \[ \virga b \inclinatum a \inclinatum \auctum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} + +@item +@emph{Climacus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Climacus Deminutus + \[ \virga b \inclinatum a \inclinatum \deminutum g \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} + +@item +@b{Scandicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus + \[ g \pes a \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \virga b \]} + +@item +@emph{Scandicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Auctus Descendens + \[ g \pes a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \auctum \descendens b \]} + +@item +@emph{Scandicus Deminutus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Scandicus Deminutus + \[ g \pes a \pes \deminutum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes a \pes \deminutum b \]} + +@end multitable + +@noindent +@b{Special Signs} + +@multitable @columnfractions .4 .2 .4 + +@item +@b{Quilisma} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma + \[ g \pes \quilisma a \pes b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \pes \quilisma a \pes b \]} + +@item +@emph{Quilisma Pes Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Quilisma Pes Auctus Descendens + \[ g \quilisma a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \quilisma g \pes \auctum \descendens b \]} + +@item +@b{Oriscus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Oriscus + \[ \oriscus b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus b \]} + +@item +@emph{Pes Quassus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus + \[ \oriscus g \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \virga b \]} + +@item +@emph{Pes Quassus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Pes Quassus Auctus Descendens + \[ \oriscus g \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \oriscus g \pes \auctum \descendens b \]} + +@item +@b{Salicus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus + \[ g \oriscus a \pes \virga b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \virga b \]} + +@item +@emph{Salicus Auctus Descendens} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Salicus Auctus Descendens + \[ g \oriscus a \pes \auctum \descendens b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ g \oriscus a \pes \auctum \descendens b \]} + +@item +@b{(Apo)stropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha + \[ \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \]} + +@item +@emph{Stropha Aucta} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Stropha Aucta + \[ \stropha \auctum b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha \auctum b \]} + +@item +@b{Bistropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Bistropha + \[ \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \]} + +@item +@b{Tristropha} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Tristropha + \[ \stropha b \stropha b \stropha b \] + } +\layout { \neumeDemoLayout }} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha b \]} + +@item +@emph{Trigonus} +@tab +@lilypond[staffsize=26,line-width=1.0\cm] +\include "gregorian.ly" +\score { + \transpose c c' { + % Trigonus + \[ \stropha b \stropha b \stropha a \] + } + \layout { \neumeDemoLayout } +} +@end lilypond +@tab +@code{\[ \stropha b \stropha b \stropha a \]} + +@end multitable + + +@predefined +The following head prefixes are supported: +@funindex \virga +@code{\virga}, +@funindex \stropha +@code{\stropha}, +@funindex \inclinatum +@code{\inclinatum}, +@funindex \auctum +@code{\auctum}, +@funindex \descendens +@code{\descendens}, +@funindex \ascendens +@code{\ascendens}, +@funindex \oriscus +@code{\oriscus}, +@funindex \quilisma +@code{\quilisma}, +@funindex \deminutum +@code{\deminutum}, +@funindex \cavum +@code{\cavum}, +@funindex \linea +@code{\linea}. +@endpredefined + +Head prefixes can be accumulated, though restrictions apply. For +example, either @code{\descendens} or @code{\ascendens} can be applied +to a head, but not both to the same head. + +@funindex \pes +@funindex \flexa + +Two adjacent heads can be tied together with the @code{\pes} and +@code{\flexa} infix commands for a rising and falling line of melody, +respectively. + +@funindex \augmentum + +Use the unary music function @code{\augmentum} to add augmentum dots. + +@seealso +Music Glossary: +@rglos{ligature}. + +Notation Reference: +@ref{Gregorian square neume ligatures}, +@ref{White mensural ligatures}, +@ref{Ligatures}. + + +@knownissues +When an @code{\augmentum} dot appears at the end of the last staff +within a ligature, it is sometimes vertically placed wrong. As a +workaround, add an additional skip note (e.g., @code{s8}) as last note +of the staff. + +@code{\augmentum} should be implemented as a head prefix rather than a +unary music function, such that @code{\augmentum} can be intermixed +with head prefixes in arbitrary order. + + +@node Working with ancient music---scenarios and solutions +@subsection Working with ancient music---scenarios and solutions + +@menu +* Incipits:: +* Mensurstriche layout:: +* Transcribing Gregorian chant:: +* Ancient and modern from one source:: +* Editorial markings:: +@end menu + +Working with ancient music frequently involves particular tasks +which differ considerably from the modern notation for which +LilyPond is designed. In the rest of this section, a number of +typical scenarios are outlined, with suggestions of solutions. +These involve: + +@itemize +@item how to make incipits (i.e. prefatory material to indicate +what the original has looked like) to modern transcriptions of +mensural music; +@item how to achieve the @emph{Mensurstriche} layout frequently +used for modern transcriptions of polyphonic music; +@item how to transcribe Gregorian chant in modern notation; +@item how to generate both ancient and modern notation from the +same source. +@end itemize + + +@node Incipits +@unnumberedsubsubsec Incipits + +@c TODO Add text +@c clefs, mensuration signs etc from lsr and -user +@c use snippet Transcription-of-ancient-music-with-incipit +TBC + + +@c @seealso +@c ... and reference to other sections ... + + +@node Mensurstriche layout +@unnumberedsubsubsec Mensurstriche layout + +@emph{Mensurstriche} (@q{mensuration lines}) is the accepted term +for bar lines that are drawn between the staves of a system but +not through the staves themselves. It is a common way to preserve +the rhythmic appearance of the original, i.e. not having to break +syncopated notes at bar lines, while still providing the +orientation aids that bar lines give. + + +@lilypondfile[verbatim,lilyquote,texidoc] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + +@c This simple setup will take care of the +@c TODO Add text about lyrics to the lowest line, to be placed +@c outside the StaffGroup. +@c from lsr and -user +@c TBC + + +@c @seealso +@c ... and reference to other sections ... + + +@node Transcribing Gregorian chant +@unnumberedsubsubsec Transcribing Gregorian chant + +Gregorian chant can be transcribed into modern notation with a +number of simple tweaks. + +@b{Stems}. Stems can be left out altogether by @code{\remove}-ing +the @code{Stem_engraver} from the Voice context: + +@example +\layout @{ + ... + \context @{ + \Voice + \remove "Stem_engraver" + @} +@} +@end example + +However, in some transcription styles, stems are used +occasionally, for example to indicate the transition from a +single-tone recitative to a fixed melodic gesture. In these cases, +one can use either @code{\override Stem #'transparent = ##t} or +@code{\override Stem #'length = #0} instead, and restore the stem +when needed with the corresponding @code{\once \override Stem +#'transparent = ##f} (see example below). + +@b{Timing.} For unmetered chant, there are several alternatives. + +The Time_signature_engraver can be removed from the Staff context +without any negative side effects. The alternative, to make it +transparent, will leave an empty space in the score, since the +invisible signature will still take up space. + +In many cases, @code{\set Score.timing = ##f} will give good +results. Another alternative is to use @code{\CadenzaOn} and +@code{\CadenzaOff}. + +To remove the bar lines, the radical approach is to @code{\remove} +the Bar_engraver from the Staff context. Again, one may want to +use @code{\override BarLine #'transparent = ##t} instead, if an +occasional barline is wanted. + +A common type of transcription is recitativic chant where the +repeated notes are indicated with a single breve. The text to +the recitation tone can be dealt with in two different ways: +either set as a single, left-aligned syllable: + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + c\breve c4 b4 a c2 c4 \divisioMaior + c\breve c4 c f, f \finalis +} + +verba = \lyricmode { + \once \override LyricText #'self-alignment-X = #-1 + "Noctem quietam et" fi -- nem per -- fec -- tum + \once \override LyricText #'self-alignment-X = #-1 + "concedat nobis Dominus" om -- ni -- po -- tens. +} +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics = "one" \lyricsto melody \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Bar_engraver" + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +This works fine, as long as the text doesn't span a line break. If +that is the case, an alternative is to add hidden notes to the +score, here in combination with changing stem visibility: + + +@lilypond[verbatim,ragged-right] +\include "gregorian.ly" +chant = \relative c' { + \clef "G_8" + \set Score.timing = ##f + c\breve \override NoteHead #'transparent = ##t c c c c c + \revert NoteHead #'transparent + \override Stem #'transparent = ##f \stemUp c4 b4 a + \override Stem #'transparent = ##t c2 c4 \divisioMaior + c\breve \override NoteHead #'transparent = ##t c c c c c c c + \revert NoteHead #'transparent c4 c f, f \finalis +} + +verba = \lyricmode { + No -- ctem qui -- e -- tam et fi -- nem per -- fec -- tum + con -- ce -- dat no -- bis Do -- mi -- nus om -- ni -- po -- tens. +} + +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics \lyricsto "melody" \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'transparent = ##t + \override Stem #'transparent = ##t + } + } +} +@end lilypond + +Another common situation is transcription of neumatic or +melismatic chants, i.e. chants with a varying number of notes +to each syllable. In this case, one would want to set the +syllable groups clearly apart, usually also the subdivisions of a +longer melisma. One way to achieve this is to use a fixed +@code{\time}, e.g., 1/4, and let each syllable or note group fill +one of these measures, with the help of tuplets or shorter +durations. If the bar lines and all other rhythmical indications +are made transparent, and the space around the bar lines is +increased, this will give a fairly good representation in modern +notation of the original. + +To avoid that syllables of different width (such as @qq{-ri} and +@qq{-rum}) spread the syllable note groups unevenly apart, the +@code{#'X-extent} property of the @code{LyricText} object may be +set to a fixed value. Another, more cumbersome way would be to +add the syllables as @code{\markup} elements. If further +adjustments are necessary, this can be easily done with +@code{s} @q{notes}. + +@lilypond[verbatim,quote] +spiritus = \relative c' { + \time 1/4 + \override Lyrics.LyricText #'X-extent = #'(0 . 3) + d4 \times 2/3 { f8 a g } g a a4 g f8 e + d4 f8 g g8 d f g a g f4 g8 a a4 s + \times 2/3 { g8 f d } e f g a g4 +} + +spirLyr = \lyricmode { + Spi -- ri -- _ _ tus _ Do -- mi -- ni _ re -- ple -- _ vit _ + or -- _ bem _ ter -- ra -- _ rum, al -- _ _ le -- _ lu + -- _ ia. +} +\score { + \new Staff << + \new Voice = "chant" \spiritus + \new Lyrics = "one" \lyricsto "chant" \spirLyr + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \override BarLine #'X-extent = #'(-1 . 1) + \override Stem #'transparent = ##t + \override Beam #'transparent = ##t + \override BarLine #'transparent = ##t + \override TupletNumber #'transparent = ##t + } + } +} +@end lilypond + +@c extract from 1.6.1.1 + +@c @seealso +@c ... and reference to other sections ... + + +@node Ancient and modern from one source +@unnumberedsubsubsec Ancient and modern from one source + +@c TODO Add text +@c Here among others the snippets about reducing note length +TBC + +@c @seealso +@c ... and reference to other sections ... + + +@node Editorial markings +@unnumberedsubsubsec Editorial markings + + +@c @node Baroque rhythmic notation +@c @unnumberedsubsubsec Baroque rhythmic notation + +@c TODO Add text +@c try Till Rettig +@c Add example of white note heads: +@c In the french baroque some composers used white note heads in slow pieces, +@c mainly in 3/2-time. A quarter looks there like a eighth with a white +@c note head. (Franz-Rudolf Kuhnen) + +@c TODO Add example of this: +@c I was referring to e.g. notated a8. a16, which should, if I +@c remember correctly, be interpreted more like a8.. a32 (in the french +@c style). The editor might want to show that rythmic figure above the +@c staff as an hint to performers. (Karl Hammer) + + +@c TBC + + +@c @seealso +@c ... and reference to other sections ... + diff --git a/Documentation/notation/changing-defaults.itely b/Documentation/notation/changing-defaults.itely new file mode 100644 index 0000000000..7f1bb0f0a0 --- /dev/null +++ b/Documentation/notation/changing-defaults.itely @@ -0,0 +1,3862 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Changing defaults +@chapter Changing defaults + +The purpose of LilyPond's design is to provide the finest quality +output by default. Nevertheless, it may happen that you need to +change this default layout. The layout is controlled through a large +number of @q{knobs and switches} collectively called @q{properties}. +A tutorial introduction to accessing and modifying these properties +can be found in the Learning Manual, see @rlearning{Tweaking output}. +This should be read first. This chapter covers similar ground, but +in a style more appropriate to a reference manual. + +@cindex Internals Reference + +The definitive description of the controls available for tuning can +be found in a separate document: @rinternalsnamed{Top,the Internals +Reference}. That manual lists all the variables, functions and +options available in LilyPond. It is written as a HTML document, +which is available +@c leave the @uref as one long line. +@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line}, +and is also included with the LilyPond documentation package. + +Internally, LilyPond uses Scheme (a LISP dialect) to provide +infrastructure. Overriding layout decisions in effect accesses the +program internals, which requires Scheme input. Scheme elements are +introduced in a @file{.ly} file with the hash mark +@code{#}.@footnote{@rextend{Scheme tutorial}, contains a short tutorial +on entering numbers, lists, strings, and symbols in Scheme.} + + +@menu +* Interpretation contexts:: +* Explaining the Internals Reference:: +* Modifying properties:: +* Useful concepts and properties:: +* Advanced tweaks:: +* Using music functions:: +@end menu + + +@node Interpretation contexts +@section Interpretation contexts + +This section describes what contexts are, and how to modify them. + +@menu +* Contexts explained:: +* Creating contexts:: +* Keeping contexts alive:: +* Modifying context plug-ins:: +* Changing context default settings:: +* Defining new contexts:: +* Aligning contexts:: +@end menu + + +@seealso +Learning Manual: +@rlearning{Contexts and engravers}. + +Installed Files: +@file{ly/engraver-init.ly}, +@file{ly/performer-init.ly}. + +Snippets: +@rlsr{Contexts and engravers}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{Engravers and Performers}. + + +@node Contexts explained +@subsection Contexts explained + +@ignore +@c TODO Rethink and rewrite + +>> > > - list of contexts: my *danger unmaintainable* +>> > > alarm just went off. I'm + +I knew it would... And leaving out some of them is perfectly fine +with me. +I do think that a list like this, with the main contexts and a +brief +description of what they do (perhaps also with a note about what +default +behavior is associated with each of them, but this may be +unmanageable), +should be there, and then we could simply list the remaining ones +without +further explanation and with links to the IR. +@end ignore + +@c TODO Improve layout, order and consistency of wording -td + +@c TODO Add introduction which explains contexts in generality -td + +@c TODO Describe propagation of property values -td + +Contexts are arranged hierarchically: + +@menu +* Score - the master of all contexts:: +* Top-level contexts - staff containers:: +* Intermediate-level contexts - staves:: +* Bottom-level contexts - voices:: +@end menu + +@node Score - the master of all contexts +@unnumberedsubsubsec Score - the master of all contexts + +This is the top level notation context. No other context can +contain a Score context. By default the Score context handles +the administration of time signatures and makes sure that items +such as clefs, time signatures, and key-signatures are aligned +across staves. + +A Score context is instantiated implicitly when a +@code{\score @{@dots{}@}} or @code{\layout @{@dots{}@}} block is +processed. + +@node Top-level contexts - staff containers +@unnumberedsubsubsec Top-level contexts - staff containers + +@strong{@emph{StaffGroup}} + +Groups staves while adding a bracket on the left side, grouping +the staves together. The bar lines of the contained staves are +connected vertically. @code{StaffGroup} only consists of a collection +of staves, with a bracket in front and spanning bar lines. + +@strong{@emph{ChoirStaff}} + +Identical to @code{StaffGroup} except that the bar lines of the +contained staves are not connected vertically. + +@strong{@emph{GrandStaff}} + +A group of staves, with a brace on the left side, grouping the +staves together. The bar lines of the contained staves are +connected vertically. + +@strong{@emph{PianoStaff}} + +Just like @code{GrandStaff}, but with support for instrument names +to the left of each system. + +@node Intermediate-level contexts - staves +@unnumberedsubsubsec Intermediate-level contexts - staves + +@strong{@emph{Staff}} + +Handles clefs, bar lines, keys, accidentals. It can contain +@code{Voice} contexts. + +@strong{@emph{RhythmicStaff}} + +Like @code{Staff} but for printing rhythms. Pitches are ignored; +the notes are printed on one line. + +@strong{@emph{TabStaff}} + +Context for generating tablature. By default lays the music +expression out as a guitar tablature, printed on six lines. + +@strong{@emph{DrumStaff}} + +Handles typesetting for percussion. Can contain @code{DrumVoice} + +@strong{@emph{VaticanaStaff}} + +Same as @code{Staff}, except that it is designed for typesetting +a piece in gregorian style. + +@strong{@emph{MensuralStaff}} + +Same as @code{Staff}, except that it is designed for typesetting +a piece in mensural style. + +@node Bottom-level contexts - voices +@unnumberedsubsubsec Bottom-level contexts - voices + +Voice-level contexts initialise certain properties and start +appropriate engravers. Being bottom-level contexts, they cannot +contain other contexts. + +@strong{@emph{Voice}} + +Corresponds to a voice on a staff. This context handles the +conversion of dynamic signs, stems, beams, super- and sub-scripts, +slurs, ties, and rests. You have to instantiate this explicitly +if you require multiple voices on the same staff. + +@strong{@emph{VaticanaVoice}} + +Same as @code{Voice}, except that it is designed for typesetting +a piece in gregorian style. + +@strong{@emph{MensuralVoice}} + +Same as @code{Voice}, with modifications for typesetting a piece in +mensural style. + +@strong{@emph{Lyrics}} + +Corresponds to a voice with lyrics. Handles the printing of a +single line of lyrics. + +@strong{@emph{DrumVoice}} + +The voice context used in a percussion staff. + +@strong{@emph{FiguredBass}} + +The context in which @code{BassFigure} objects are created from +input entered in @code{\figuremode} mode. + +@strong{@emph{TabVoice}} + +The voice context used within a @code{TabStaff} context. Usually +left to be created implicitly. + +@strong{@emph{CueVoice}} + +A voice context used to render notes of a reduced size, intended +primarily for adding cue notes to a staff, see @ref{Formatting +cue notes}. Usually left to be created implicitly. + +@strong{@emph{ChordNames}} + +Typesets chord names. + +@ignore +TODO + +Then the following, which I don't know what to do with: + + * GregorianTranscriptionVoice + * GregorianTranscriptionStaff + + * FretBoards + Engraves fretboards from chords. Not easy... Not +documented. + There is now some documentation on FretBoards in the NR, under + instrument-specific notation -- cds. + + * NoteNames + + * Global + Hard coded entry point for LilyPond. Cannot be tuned. + * Devnull + Silently discards all musical information given to this +context. + +@end ignore + +@node Creating contexts +@subsection Creating contexts + +@c TODO more complete descriptions rather than learning style + +For scores with only one voice and one staff, contexts are +created automatically. For more complex scores, it is necessary to +create them by hand. There are three commands that do this. + +@itemize + +@item +The easiest command is @code{\new}, and it also the quickest to type. +It is prepended to a music expression, for example + +@funindex \new +@cindex new contexts +@cindex Context, creating + +@example +\new @var{type} @var{music expression} +@end example + +@noindent +where @var{type} is a context name (like @code{Staff} or +@code{Voice}). This command creates a new context, and starts +interpreting the @var{music expression} with that. + +A practical application of @code{\new} is a score with many +staves. Each part that should be on its own staff, is preceded with +@code{\new Staff}. + +@lilypond[quote,verbatim,relative=2,ragged-right] +<< + \new Staff { c4 c } + \new Staff { d4 d } +>> +@end lilypond + +The @code{\new} command may also give a name to the context, + +@example +\new @var{type} = @var{id} @var{music} +@end example +However, this user specified name is only used if there is no other +context already earlier with the same name. + + +@funindex \context + +@item +Like @code{\new}, the @code{\context} command also directs a music +expression to a context object, but gives the context an explicit name. The +syntax is + +@example +\context @var{type} = @var{id} @var{music} +@end example + +This form will search for an existing context of type @var{type} +called @var{id}. If that context does not exist yet, a new +context with the specified name is created. This is useful if +the context is referred to later on. For example, when +setting lyrics the melody is in a named context + +@example +\context Voice = "@b{tenor}" @var{music} +@end example + +@noindent +so the texts can be properly aligned to its notes, + +@example +\new Lyrics \lyricsto "@b{tenor}" @var{lyrics} +@end example + +@noindent + +Another possible use of named contexts is funneling two different +music expressions into one context. In the following example, +articulations and notes are entered separately, + +@example +music = @{ c4 c4 @} +arts = @{ s4-. s4-> @} +@end example + +They are combined by sending both to the same @code{Voice} context, + +@example +<< + \new Staff \context Voice = "A" \music + \context Voice = "A" \arts +>> +@end example +@lilypond[quote,ragged-right] +music = { c4 c4 } +arts = { s4-. s4-> } +\relative c'' << + \new Staff \context Voice = "A" \music + \context Voice = "A" \arts +>> +@end lilypond + +With this mechanism, it is possible to define an Urtext (original +edition), with the option to put several distinct articulations on the +same notes. + +@cindex creating contexts + +@item +The third command for creating contexts is +@example +\context @var{type} @var{music} +@end example + + +@noindent +This is similar to @code{\context} with @code{= @var{id}}, but matches +any context of type @var{type}, regardless of its given name. + +This variant is used with music expressions that can be interpreted at +several levels. For example, the @code{\applyOutput} command (see +@rextend{Running a function on all layout objects}). Without an explicit +@code{\context}, it is usually applied to @code{Voice} + +@example +\applyOutput #'@var{context} #@var{function} % apply to Voice +@end example + +To have it interpreted at the @code{Score} or @code{Staff} level use +these forms + +@example +\applyOutput #'Score #@var{function} +\applyOutput #'Staff #@var{function} +@end example + +@end itemize + +@node Keeping contexts alive +@subsection Keeping contexts alive + +@cindex contexts, keeping alive +@cindex contexts, lifetime + +Contexts are usually terminated at the first musical moment in +which they have nothing to do. So @code{Voice} contexts die as +soon as they contain no events; @code{Staff} contexts die as soon +as all the @code{Voice} contexts within them contain no events; etc. +This can cause difficulties if earlier contexts which have died +have to be referenced, for example, when changing staves with +@code{\change} commands, associating lyrics with a voice with +@code{\lyricsto} commands, or when adding further musical events to +an earlier context. + +There is an exception to this general rule: just one of the +@code{Voice} contexts in a @code{Staff} context or in a +@code{<<...>>} construct will always persist to the end of the +enclosing @code{Staff} context or @code{<<...>>} construct, even +though there may be periods when it has nothing to do. The context +to persist in this way will be the first one encountered in the +first enclosed @code{@{...@}} construct, ignoring any in enclosed +@code{<<...>>} constructs. + +Any context can be kept alive by ensuring it has something to do at +every musical moment. @code{Staff} contexts are kept alive by +ensuring one of their voices is kept alive. One way of doing this +is to add spacer rests to a voice in parallel with the real music. +These need to be added to every @code{Voice} context which needs to +be kept alive. If several voices are to be used sporadically it is +safest to keep them all alive rather than attempting to rely on the +exceptions mentioned above. + +In the following example, both voice A and voice B are kept alive +in this way for the duration of the piece: + +@lilypond[quote,verbatim] +musicA = \relative c'' { d4 d d d } +musicB = \relative c'' { g4 g g g } +keepVoicesAlive = { + << + \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars + \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars + >> +} + +music = { + \context Voice = "A" { + \voiceOneStyle + \musicA + } + \context Voice = "B" { + \voiceTwoStyle + \musicB + } + \context Voice = "A" { \musicA } + \context Voice = "B" { \musicB } + \context Voice = "A" { \musicA } +} + +\score { + \new Staff << + \keepVoicesAlive + \music + >> +} +@end lilypond + +@cindex lyrics, aligning with sporadic melody + +The following example shows how a sporadic melody line with lyrics +might be written using this approach. In a real situation the +melody and accompaniment would consist of several different +sections, of course. + +@lilypond[quote,verbatim] +melody = \relative c'' { a4 a a a } +accompaniment = \relative c' { d4 d d d } +words = \lyricmode { These words fol -- low the mel -- o -- dy } +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + s1*4 % Keep Voice "melody" alive for 4 bars + } + { + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + \context Voice = "accompaniment" { \accompaniment } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + +An alternative way, which may be better in many circumstances, is +to keep the melody line alive by simply including spacer notes to +line it up correctly with the accompaniment: + +@lilypond[quote,verbatim] +melody = \relative c'' { + s1 % skip a bar + a4 a a a + s1 % skip a bar + a4 a a a +} +accompaniment = \relative c' { + d4 d d d + d4 d d d + d4 d d d + d4 d d d +} +words = \lyricmode { These words fol -- low the mel -- o -- dy } + +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + \melody + } + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + + +@node Modifying context plug-ins +@subsection Modifying context plug-ins + +@c TODO Should this be Modifying engravers or Modifying contexts? + +Notation contexts (like @code{Score} and @code{Staff}) not only +store properties, +they also contain plug-ins called @q{engravers} that create notation +elements. For example, the @code{Voice} context contains a +@code{Note_heads_engraver} and the @code{Staff} context contains a +@code{Key_signature_engraver}. + +For a full a description of each plug-in, see +@ifhtml +@rinternals{Engravers and Performers}. +@end ifhtml +@ifnothtml +Internals Reference @expansion{} Translation @expansion{} Engravers. +@end ifnothtml +Every context described in +@ifhtml +@rinternals{Contexts} +@end ifhtml +@ifnothtml +Internals Reference @expansion{} Translation @expansion{} Context. +@end ifnothtml +lists the engravers used for that context. + + +It can be useful to shuffle around these plug-ins. This is done by +starting a new context with @code{\new} or @code{\context}, and +modifying it, + +@funindex \with + +@example +\new @var{context} \with @{ + \consists @dots{} + \consists @dots{} + \remove @dots{} + \remove @dots{} + @emph{etc.} +@} +@{ + @emph{..music..} +@} +@end example + +@noindent +where the @dots{} should be the name of an engraver. Here is a simple +example which removes @code{Time_signature_engraver} and +@code{Clef_engraver} from a @code{Staff} context, + +@lilypond[quote,relative=1,verbatim] +<< + \new Staff { + f2 g + } + \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + } { + f2 g2 + } +>> +@end lilypond + +In the second staff there are no time signature or clef symbols. This +is a rather crude method of making objects disappear since it will affect +the entire staff. This method also influences the spacing, which may or +may not be desirable. More sophisticated methods of blanking objects +are shown in @rlearning{Visibility and color of objects}. + +The next example shows a practical application. Bar lines and time +signatures are normally synchronized across the score. This is done +by the @code{Timing_translator} and @code{Default_bar_line_engraver}. +This plug-in keeps an administration of time signature, location +within the measure, etc. By moving these engraver from @code{Score} to +@code{Staff} context, we can have a score where each staff has its own +time signature. + +@cindex polymetric scores +@cindex Time signatures, multiple + +@lilypond[quote,verbatim] +\score { + << + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 3/4 + c4 c c c c c + } + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 2/4 + c4 c c c c c + } +>> +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + } +} +@end lilypond + +@knownissues + +Usually the order in which the engravers are specified +does not matter, but in a few special cases the order +is important, for example where one engraver writes +a property and another reads it, or where one engraver +creates a grob and another must process it. The order in +which the engravers are specified is the order in which +they are called to carry out their processing. + +The following orderings are important: the +@code{Bar_engraver} must normally be first, and +the @code{New_fingering_engraver} must come before +the @code{Script_column_engraver}. There may be others +with ordering dependencies. + +@node Changing context default settings +@subsection Changing context default settings + +The context settings which are to be used by default in +@code{Score}, @code{Staff} and @code{Voice} contexts may be specified +in a @code{\layout} block, as illustrated in the following example. +The @code{\layout} block should be placed within the @code{\score} +block to which it is to apply, but outside any music. + +Note that the @code{\set} command itself and the context must be +omitted when the context default values are specified in this way: + +@lilypond[quote,verbatim] +\score { + \relative c'' { + a4^"Really small, thicker stems, no time signature" a a a + a a a a + } + \layout { + \context { + \Staff + fontSize = #-4 + \override Stem #'thickness = #4.0 + \remove "Time_signature_engraver" + } + } +} +@end lilypond + +In this example, the @code{\Staff} command specifies that the +subsequent specifications are to be applied to all staves within +this score block. + +Modifications can be made to the @code{Score} context or all +@code{Voice} contexts in a similar way. + +@knownissues + +It is not possible to collect context changes in a variable and apply +them to a @code{\context} definition by referring to that variable. + +The @code{\Staff \RemoveEmptyStaves} will overwrite your current +@code{\Staff} settings. If you wish to change the defaults for a +staff which uses @code{\Staff \RemoveEmptyStaves}, you must do so +after calling @code{\Staff \RemoveEmptyStaves}, ie + +@example +\layout @{ + \context @{ + \Staff \RemoveEmptyStaves + + \override Stem #'thickness = #4.0 + @} +@} +@end example + +@c TODO: add \with in here. + + + +@node Defining new contexts +@subsection Defining new contexts + +@cindex contexts, defining new +@cindex engravers, including in contexts + +@funindex \alias +@funindex alias +@funindex \name +@funindex name +@funindex \type +@funindex type +@funindex \consists +@funindex consists +@funindex \accepts +@funindex accepts +@funindex \denies +@funindex denies + +Specific contexts, like @code{Staff} and @code{Voice}, are made of +simple building blocks. It is possible to create new types of +contexts with different combinations of engraver plug-ins. + +The next example shows how to build a different type of +@code{Voice} context from scratch. It will be similar to +@code{Voice}, but only prints centered slash note heads. It can be used +to indicate improvisation in jazz pieces, + +@lilypond[quote,ragged-right] +\layout { \context { + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Rhythmic_column_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +} +\context { \Staff + \accepts "ImproVoice" +}} + +\relative c'' { + a4 d8 bes8 \new ImproVoice { c4^"ad lib" c + c4 c^"undress" c_"while playing :)" c } + a1 +} +@end lilypond + + +These settings are defined within a @code{\context} block inside a +@code{\layout} block, + +@example +\layout @{ + \context @{ + @dots{} + @} +@} +@end example + +In the following discussion, the example input shown should go in place +of the @dots{} in the previous fragment. + +First it is necessary to define a name for the new context: + +@example +\name ImproVoice +@end example + +Since it is similar to the @code{Voice}, we want commands that work +on (existing) @code{Voice}s to remain working. This is achieved by +giving the new context an alias @code{Voice}, + +@example +\alias Voice +@end example + +The context will print notes and instructive texts, so we need to add +the engravers which provide this functionality, + +@example +\consists Note_heads_engraver +\consists Text_engraver +@end example + +but we only need this on the center line, + +@example +\consists Pitch_squash_engraver +squashedPosition = #0 +@end example + +The @rinternals{Pitch_squash_engraver} modifies note heads (created +by @rinternals{Note_heads_engraver}) and sets their vertical +position to the value of @code{squashedPosition}, in this case@tie{}@code{0}, +the center line. + +The notes look like a slash, and have no stem, + +@example +\override NoteHead #'style = #'slash +\override Stem #'transparent = ##t +@end example + +All these plug-ins have to cooperate, and this is achieved with a +special plug-in, which must be marked with the keyword @code{\type}. +This should always be @code{Engraver_group}. + +@example +\type "Engraver_group" +@end example + +Put together, we get + +@example +\context @{ + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +@} +@end example + +@funindex \accepts +Contexts form hierarchies. We want to hang the @code{ImproVoice} +under @code{Staff}, just like normal @code{Voice}s. Therefore, we +modify the @code{Staff} definition with the @code{\accepts} +command, + +@example +\context @{ + \Staff + \accepts ImproVoice +@} +@end example + +@funindex \denies +The opposite of @code{\accepts} is @code{\denies}, +which is sometimes needed when reusing existing context definitions. + +Putting both into a @code{\layout} block, like + +@example +\layout @{ + \context @{ + \name ImproVoice + @dots{} + @} + \context @{ + \Staff + \accepts "ImproVoice" + @} +@} +@end example + +Then the output at the start of this subsection can be entered as + +@example +\relative c'' @{ + a4 d8 bes8 + \new ImproVoice @{ + c4^"ad lib" c + c4 c^"undress" + c c_"while playing :)" + @} + a1 +@} +@end example + + +@node Aligning contexts +@subsection Aligning contexts + +New contexts may be aligned above or below existing contexts. This +could be useful in setting up a vocal staff (@rlearning{Vocal ensembles}) and +in ossia, + +@c TODO Better example needed. Ref LM, and expand on it. + +@cindex ossia +@funindex alignAboveContext +@funindex alignBelowContext + +@lilypond[quote,ragged-right] +ossia = { f4 f f f } +\score{ + \relative c' \new Staff = "main" { + c4 c c c + << + \new Staff \with { alignAboveContext = #"main" } \ossia + { d8 f d f d f d f } + >> + } +} +@end lilypond + +@cindex nested contexts +@cindex contexts, nested + +@funindex \accepts +@funindex \denies + +Contexts like @code{PianoStaff} can contain other contexts +nested within them. Contexts which are acceptable for nesting +are defined by the @qq{accepts} list of a context. Contexts +which are not in this list are placed below the outer context +in the printed score. +For example, the @code{PianoStaff} context is defined by default +to accept @code{Staff} and @code{FiguredBass} contexts within +it, but not (for example) a @code{Lyrics} context. So in the +following structure the lyrics are placed below the piano staff +rather than between the two staves: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +The @qq{accepts} list of a context can be modified to include +additional nested contexts, so if we wanted the lyrics to appear +between the two staves we could use: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff \with { \accepts Lyrics } +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond + +The opposite of @code{\accepts} is @code{\denies}; this removes a +context from the @qq{accepts} list. + +@node Explaining the Internals Reference +@section Explaining the Internals Reference + + +@menu +* Navigating the program reference:: +* Layout interfaces:: +* Determining the grob property:: +* Naming conventions:: +@end menu + +@node Navigating the program reference +@subsection Navigating the program reference + +@c TODO remove this (it's in the LM) +@c Replace with more factual directions + +Suppose we want to move the fingering indication in the fragment +below: + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +If you visit the documentation on fingering instructions (in +@ref{Fingering instructions}), you will notice: + +@quotation +@strong{See also} + +Internals Reference: @rinternals{Fingering}. + +@end quotation + + +@c outdated info; probably will delete. +@ignore +This fragment points to two parts of the program reference: a page +on @code{FingeringEvent} and one on @code{Fingering}. + +The page on @code{FingeringEvent} describes the properties of the music +expression for the input @code{-2}. The page contains many links +forward. For example, it says + +@quotation +Accepted by: @rinternals{Fingering_engraver}, +@end quotation + +@noindent +That link brings us to the documentation for the Engraver, the +plug-in, which says + +@quotation +This engraver creates the following layout objects: @rinternals{Fingering}. +@end quotation + +In other words, once the @code{FingeringEvent}s are interpreted, the +@code{Fingering_engraver} plug-in will process them. +@end ignore + +@ignore +@c I can't figure out what this is supposed to mean. -gp + +The @code{Fingering_engraver} is also listed to create +@rinternals{Fingering} objects, + +@c old info? it doesn't make any sense to me with our current docs. +This is also the +second bit of information listed under @b{See also} in the Notation +manual. +@end ignore + +@ifnothtml +The programmer's reference is available as an HTML document. It is +highly recommended that you read it in HTML form, either online or +by downloading the HTML documentation. This section will be much more +difficult to understand if you are using the +PDF manual. +@end ifnothtml + +Follow the link to @rinternals{Fingering}. At the top of the +page, you will see + +@quotation +Fingering objects are created by: @rinternals{Fingering_engraver} and +@rinternals{New_fingering_engraver}. +@end quotation + +By following related links inside the program reference, we can follow the +flow of information within the program: + +@itemize + +@item @rinternals{Fingering}: +@rinternals{Fingering} objects are created by: +@rinternals{Fingering_engraver} + +@item @rinternals{Fingering_engraver}: +Music types accepted: @rinternals{fingering-event} + +@item @rinternals{fingering-event}: +Music event type @code{fingering-event} is in Music expressions named +@rinternals{FingeringEvent} +@end itemize + +This path goes against the flow of information in the program: it +starts from the output, and ends at the input event. You could +also start at an input event, and read with the flow of +information, eventually ending up at the output object(s). + +The program reference can also be browsed like a normal document. It +contains chapters on +@ifhtml +@rinternals{Music definitions}, +@end ifhtml +@ifnothtml +@code{Music definitions} +@end ifnothtml +on @rinternals{Translation}, and the @rinternals{Backend}. Every +chapter lists all the definitions used and all properties that may be +tuned. + + +@node Layout interfaces +@subsection Layout interfaces + +@cindex interface, layout +@cindex layout interface +@cindex grob + +The HTML page that we found in the previous section describes the +layout object called @rinternals{Fingering}. Such an object is a +symbol within the score. It has properties that store numbers (like +thicknesses and directions), but also pointers to related objects. A +layout object is also called a @emph{Grob}, which is short for Graphical +Object. For more details about Grobs, see @rinternals{grob-interface}. + +The page for @code{Fingering} lists the definitions for the +@code{Fingering} object. For example, the page says + +@quotation +@code{padding} (dimension, in staff space): + +@code{0.5} +@end quotation + +@noindent +which means that the number will be kept at a distance of at least 0.5 +of the note head. + + +Each layout object may have several functions as a notational or +typographical element. For example, the Fingering object +has the following aspects + +@itemize +@item +Its size is independent of the horizontal spacing, unlike slurs or beams. + +@item +It is a piece of text. Granted, it is usually a very short text. + +@item +That piece of text is typeset with a font, unlike slurs or beams. + +@item +Horizontally, the center of the symbol should be aligned to the +center of the note head. + +@item +Vertically, the symbol is placed next to the note and the staff. + +@item +The vertical position is also coordinated with other superscript +and subscript symbols. +@end itemize + +Each of these aspects is captured in so-called @emph{interface}s, +which are listed on the @rinternals{Fingering} page at the bottom + +@quotation +This object supports the following interfaces: +@rinternals{item-interface}, +@rinternals{self-alignment-interface}, +@rinternals{side-position-interface}, @rinternals{text-interface}, +@rinternals{text-script-interface}, @rinternals{font-interface}, +@rinternals{finger-interface}, and @rinternals{grob-interface}. +@end quotation + +Clicking any of the links will take you to the page of the respective +object interface. Each interface has a number of properties. Some of +them are not user-serviceable (@q{Internal properties}), but others +can be modified. + +We have been talking of @emph{the} @code{Fingering} object, but actually it +does not amount to much. The initialization file (see +@rlearning{Other sources of information}) +@file{scm/define-grobs.scm} shows the soul of the @q{object}, + +@example +(Fingering + . ((padding . 0.5) + (avoid-slur . around) + (slur-padding . 0.2) + (staff-padding . 0.5) + (self-alignment-X . 0) + (self-alignment-Y . 0) + (script-priority . 100) + (stencil . ,ly:text-interface::print) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaText) + (font-size . -5) ; don't overlap when next to heads. + (meta . ((class . Item) + (interfaces . (finger-interface + font-interface + text-script-interface + text-interface + side-position-interface + self-alignment-interface + item-interface)))))) +@end example + +@noindent +As you can see, the @code{Fingering} object is nothing more than a +bunch of variable settings, and the webpage in the Internals Reference +is directly generated from this definition. + + +@node Determining the grob property +@subsection Determining the grob property + +@c TODO remove this (it's in the LM) +@c Replace with more factual directions + +Recall that we wanted to change the position of the @b{2} in + +@lilypond[quote,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Since the @b{2} is vertically positioned next to its note, we have to +meddle with the interface associated with this positioning. This is +done using @code{side-position-interface}. The page for this interface +says + +@quotation +@code{side-position-interface} + +Position a victim object (this one) next to other objects (the +support). The property @code{direction} signifies where to put the +victim object relative to the support (left or right, up or down?) +@end quotation + +@cindex padding +@noindent +Below this description, the variable @code{padding} is described as + +@quotation +@table @code +@item padding +(dimension, in staff space) + +Add this much extra space between objects that are next to each other. +@end table +@end quotation + +By increasing the value of @code{padding}, we can move the +fingering away from the note head. The following command inserts +3 staff spaces of white +between the note and the fingering: +@example +\once \override Voice.Fingering #'padding = #3 +@end example + +Inserting this command before the Fingering object is created, +i.e., before @code{c2}, yields the following result: + +@lilypond[quote,relative=2,verbatim] +\once \override Voice.Fingering #'padding = #3 +c-2 +\stemUp +f +@end lilypond + + +In this case, the context for this tweak is @code{Voice}. This +fact can also be deduced from the program reference, for the page for +the @rinternals{Fingering_engraver} plug-in says + +@quotation +Fingering_engraver is part of contexts: @dots{} @rinternals{Voice} +@end quotation + + +@node Naming conventions +@subsection Naming conventions + +Another thing that is needed, is an overview of the various naming +conventions: + +@itemize +@item scheme functions: lowercase-with-hyphens (incl. one-word +names) +@item scheme functions: ly:plus-scheme-style +@item music events, music classes and music properties: +as-scheme-functions +@item Grob interfaces: scheme-style +@item backend properties: scheme-style (but X and Y!) +@item contexts (and MusicExpressions and grobs): Capitalized or +CamelCase +@item context properties: lowercaseFollowedByCamelCase +@item engravers: +Capitalized_followed_by_lowercase_and_with_underscores +@end itemize + +Questions to be answered: +@itemize +@item Which of these are conventions and which are rules? +@item Which are rules of the underlying language, and which are +LP-specific? +@end itemize + +@node Modifying properties +@section Modifying properties + +@c TODO change the menu and subsection node names to use +@c backslash once the new macro to handle the refs +@c is available. Need to find and change all refs at +@c the same time. -td + +@menu +* Overview of modifying properties:: +* The set command:: +* The override command:: +* The tweak command:: +* set versus override:: +* Modifying alists:: +@end menu + + +@node Overview of modifying properties +@subsection Overview of modifying properties + +Each context is responsible for creating certain types of graphical +objects. The settings used for printing these objects are also stored by +context. By changing these settings, the appearance of objects can be +altered. + +There are two different kinds of properties stored in contexts: +context properties and grob properties. Context properties are +properties that apply to the context as a whole and control +how the context itself is displayed. In contrast, grob properties +apply to specific grob types that will be displayed in the context. + +The @code{\set} and @code{\unset} commands are used to change values +for context properties. The @code{\override} and @code{\revert} +commands are used to change values for grob properties. + +@ignore +The syntax for this is + +@example +\override @var{context}.@var{name} #'@var{property} = #@var{value} +@end example + +Here @var{name} is the name of a graphical object, like +@code{Stem} or @code{NoteHead}, and @var{property} is an internal +variable of the formatting system (@q{grob property} or @q{layout +property}). The latter is a symbol, so it must be quoted. The +subsection @ref{Modifying properties}, explains what to fill in +for @var{name}, @var{property}, and @var{value}. Here we only +discuss the functionality of this command. + +The command + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +makes stems thicker (the default is 1.3, with staff line thickness as a +unit). Since the command specifies @code{Staff} as context, it only +applies to the current staff. Other staves will keep their normal +appearance. Here we see the command in action: + +@lilypond[quote,verbatim,relative=2] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond + +The @code{\override} command changes the definition of the @code{Stem} +within the current @code{Staff}. After the command is interpreted +all stems are thickened. + +Analogous to @code{\set}, the @var{context} argument may be left out, +causing the default context @code{Voice} to be used. Adding +@code{\once} applies the change during one timestep only. + +@lilypond[quote,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond + +The @code{\override} must be done before the object is +started. Therefore, when altering @emph{Spanner} objects such as slurs +or beams, the @code{\override} command must be executed at the moment +when the object is created. In this example, + +@lilypond[quote,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'beam-thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +the slur is fatter but the beam is not. This is because the command for +@code{Beam} comes after the Beam is started, so it has no effect. + +Analogous to @code{\unset}, the @code{\revert} command for a context +undoes an @code{\override} command; like with @code{\unset}, it only +affects settings that were made in the same context. In other words, the +@code{\revert} in the next example does not do anything. + +@example +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Some tweakable options are called @q{subproperties} and reside inside +properties. To tweak those, use commands of the form + +@c leave this as a long long +@example +\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} +@end example + +@noindent +such as + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + +@end ignore + +@seealso +Internals: +@rinternals{Backend}, +@rinternals{All layout objects}, +@rinternals{OverrideProperty}, +@rinternals{RevertProperty}, +@rinternals{PropertySet}. + + +@knownissues + +The back-end is not very strict in type-checking object properties. +Cyclic references in Scheme values for properties can cause hangs +or crashes, or both. + + + +@node The set command +@subsection The @code{@bs{}set} command + +@cindex properties +@funindex \set +@cindex changing properties + +Each context has a set of @emph{properties}, variables contained +in that context. Context properties are changed with the @code{\set} +command, which has the following syntax: + +@example +\set @var{context}.@var{property} = #@var{value} +@end example + +@var{value} is a Scheme object, which is why it must be preceded by +the @code{#} character. + +Contexts properties are usually named in +@code{studlyCaps}. They mostly control the translation from +music to notation, e.g. @code{localKeySignature} (for determining +whether to print accidentals), or @code{measurePosition} (for +determining when to print a bar line). Context properties can +change value over time while interpreting a piece of music; +@code{measurePosition} is an obvious example of +this. Context properties are modified with @code{\set}. + +For example, multimeasure rests will be combined into a single bar +if the context property @code{skipBars} is set to @code{#t}: + +@lilypond[quote,verbatim,relative=2] +R1*2 +\set Score.skipBars = ##t +R1*2 +@end lilypond + +If the @var{context} argument is left out, then the property will be +set in the current bottom context (typically @code{ChordNames}, +@code{Voice}, @code{TabVoice}, or @code{Lyrics}). + +@lilypond[quote,verbatim,relative=2] +\set Score.autoBeaming = ##f +<< + { + e8 e e e + \set autoBeaming = ##t + e8 e e e + } \\ { + c8 c c c c8 c c c + } +>> +@end lilypond + +The change is applied @q{on-the-fly}, during the music, so that the +setting only affects the second group of eighth notes. + +Note that the bottom-most context does not always contain the property +that you wish to change -- for example, attempting to set the +@code{skipBars} property of the default bottom context, in this case +@code{Voice}, will have no effect, because skipBars is a property of +the @code{Score} context. + +@lilypond[quote,verbatim,relative=2] +R1*2 +\set skipBars = ##t +R1*2 +@end lilypond + +Contexts are hierarchical, so if an enclosing context was specified, for +example @code{Staff}, then the change would also apply to all +@code{Voice}s in the current staff. + +@funindex \unset + +The @code{\unset} command: + +@example +\unset @var{context}.@var{property} +@end example + +@noindent +is used to remove the definition of @var{property} from +@var{context}. This command removes +the definition only if it is set in @var{context}. +Properties that have been set in enclosing contexts will +not be altered by an unset in an enclosed context: + +@lilypond[quote,verbatim,relative=2] +\set Score.autoBeaming = ##t +<< + { + \unset autoBeaming + e8 e e e + \unset Score.autoBeaming + e8 e e e + } \\ { + c8 c c c c8 c c c + } +>> +@end lilypond + +Like @code{\set}, the @var{context} argument does not have to be +specified for a bottom context, so the two statements + +@example +\set Voice.autoBeaming = ##t +\set autoBeaming = ##t +@end example + +@noindent +are equivalent if the current bottom context is @code{Voice}. + + +@cindex \once +Preceding a @code{\set} command by @code{\once} makes the +setting apply to only a single time-step: + +@lilypond[quote,verbatim,relative=2] +c4 +\once \set fontSize = #4.7 +c4 +c4 +@end lilypond + +A full description of all available context properties is in the +internals reference, see +@ifhtml +@rinternals{Tunable context properties}. +@end ifhtml +@ifnothtml +Translation @expansion{} Tunable context properties. +@end ifnothtml + +@seealso + +Internals Reference: + +@rinternals{Tunable context properties}. + + +@cindex grob properties +@cindex properties, grob +@funindex \override + + +@node The override command +@subsection The @code{\override} command + +There is a special type of context property: the grob +description. Grob descriptions are named in @code{StudlyCaps} +(starting with capital letters). They contain the +@q{default settings} for a particular kind of grob as an +association list. See @file{scm/define-grobs.scm} +to see the settings for each grob description. Grob descriptions +are modified with @code{\override}. + +@code{\override} is actually a shorthand; + +@example +\override @var{context}.@var{GrobName} #'@var{property} = #@var{value} +@end example + +@noindent +is more or less equivalent to + +@c leave this long line -gp +@example +\set @var{context}.@var{GrobName} = + #(cons (cons '@var{property} @var{value}) + ) +@end example + +The value of @code{context}.@code{GrobName} (the alist) is used to initialize +the properties of individual grobs. Grobs have +properties, named in Scheme style, with +@code{dashed-words}. The values of grob properties change +during the formatting process: formatting basically amounts +to computing properties using callback functions. + +For example, we can increase the thickness of a note stem by +overriding the @code{thickness} property of the @code{Stem} +object: + +@lilypond[quote,verbatim,relative=2] +c4 c +\override Voice.Stem #'thickness = #3.0 +c4 c +@end lilypond + +If no context is specified in an @code{\override}, the bottom +context is used: + +@lilypond[quote,verbatim,relative=2] +{ \override Staff.Stem #'thickness = #3.0 + << + { + e4 e + \override Stem #'thickness = #0.5 + e4 e + } \\ { + c4 c c c + } + >> +} +@end lilypond + +@funindex \revert +@cindex reverting overrides +@cindex overrides, reverting + +The effects of @code{\override} can be undone by @code{\revert}: + +@lilypond[quote,verbatim,relative=2] +c4 +\override Voice.Stem #'thickness = #3.0 +c4 c +\revert Voice.Stem #'thickness +c4 +@end lilypond + +The effects of @code{\override} and @code{\revert} apply to all +grobs in the affected context from the current time forward: + +@lilypond[quote,verbatim,relative=2] +{ + << + { + e4 + \override Staff.Stem #'thickness = #3.0 + e4 e e + } \\ { + c4 c c + \revert Staff.Stem #'thickness + c4 + } + >> +} +@end lilypond + +@funindex \once +@cindex overriding for only one moment + +@code{\once} can be used with @code{\override} +to affect only the current time step: + +@lilypond[quote,verbatim,relative=2] +{ + << + { + \override Stem #'thickness = #3.0 + e4 e e e + } \\ { + c4 + \once \override Stem #'thickness = #3.0 + c4 c c + } + >> +} +@end lilypond + + +@ignore +Commands which change output generally look like + +@example +\override Voice.Stem #'thickness = #3.0 +@end example + +@noindent +To construct this tweak we must determine these bits of information: + +@itemize +@item the context: here @code{Voice}. +@item the layout object: here @code{Stem}. +@item the layout property: here @code{thickness}. +@item a sensible value: here @code{3.0}. +@end itemize + +Some tweakable options are called @q{subproperties} and reside inside +properties. To tweak those, use commands in the form + +@example +\override Stem #'(details beamed-lengths) = #'(4 4 3) +@end example + +@cindex internal documentation +@cindex finding graphical objects +@cindex graphical object descriptions +@cindex tweaking +@funindex \override +@cindex internal documentation + +For many properties, regardless of the data type of the property, setting the +property to false ( @code{##f} ) will result in turning it off, causing +LilyPond to ignore that property entirely. This is particularly useful for +turning off grob properties which may otherwise be causing problems. + +We demonstrate how to glean this information from the notation manual +and the program reference. +@end ignore + +@seealso + +Internals Reference: +@rinternals{Backend} + +@node The tweak command +@subsection The @code{\tweak} command + +@funindex \tweak +@cindex tweaking + +Changing grob properties +with @code{\override} causes the changes to apply to all of the +given grobs in the context at the moment the change applies. +Sometimes, however, it is desirable to have changes apply to just +one grob, rather than to all grobs in the affected context. This is +accomplished with the @code{\tweak} command, which has the following +syntax: + +@example +\tweak #'@code{grob-property} #@code{value} +@end example + +The @code{\tweak} command applies to the object that immediately +follows @code{value} in the music stream. + +@ignore +In some cases, it is possible to take a short-cut for tuning +graphical objects. For objects that are created directly from +an item in the input file, you can use the @code{\tweak} command. +For example: + +@lilypond[relative=2,verbatim,quote] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +-\tweak #'padding #8 +-^ +@end lilypond + + + +But the main use of the @code{\tweak} command is to modify just +one of a number of notation elements which start at the same musical +moment, like the notes of a chord, or tuplet brackets which start +at the same time. + +The @code{\tweak} command sets a property in the following object +directly, without requiring the grob name or context to be +specified. For this to work, it is necessary for the @code{\tweak} +command to remain immediately adjacent to the object to which it is +to apply after the input file has been converted to a music stream. +This is often not the case, as many additional elements are inserted +into the music stream implicitly. For example, when a note which is +not part of a chord is processed, LilyPond implicitly inserts a +@code{ChordEvent} event before the note, so separating the tweak +from the note. However, if chord symbols are placed round the +tweak and the note, the @code{\tweak} command comes after the +@code{ChordEvent} in the music stream, so remaining adjacent to the +note, and able to modify it. + +So, this works: + +@lilypond[relative=2,verbatim,quote] +<\tweak #'color #red c>4 +@end lilypond + +@noindent +but this does not: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +@end lilypond + +@end ignore + +For an introduction to the syntax and uses of the tweak command +see @rlearning{Tweaking methods}. + +When several similar items are placed at the same musical moment, +the @code{\override} command cannot be used to modify just one of +them -- this is where the @code{\tweak} command must be used. +Items which may appear more than once at the same musical moment +include the following: + +@c TODO expand to include any further uses of \tweak +@itemize +@item note heads of notes inside a chord +@item articulation signs on a single note +@item ties between notes in a chord +@item tuplet brackets starting at the same time +@end itemize + +@c TODO add examples of these + +@cindex chord, modifying one note in + +In this example, the color of one note head and the type of another +note head are modified within a single chord: + +@lilypond[relative=2,verbatim,quote] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +@end lilypond + +@code{\tweak} can be used to modify slurs: + +@lilypond[verbatim,quote,relative=1] +c-\tweak #'thickness #5 ( d e f) +@end lilypond + + +For the @code{\tweak} command to work, it must +remain immediately adjacent to the object to which it is +to apply after the input file has been converted to a music stream. +At times, LilyPond may insert additional items into the music stream +during the parsing process. For example, when a note that is not +explicitly part of a chord will be placed in a chord by LilyPond, +so notes to be modified with @code{\tweak} must be placed inside +a chord construct: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +<\tweak #'color #red c>4 +@end lilypond + +The @code{\tweak} command cannot be used to modify any item +that does not appear explicitly in the input file. In particular +it cannot be used to modify stems, +beams or accidentals directly, since these are generated later by +note heads, rather than by music elements in the input stream. +Nor can @code{\tweak} be used to modify clefs or time +signatures, since these become separated from any preceding +@code{\tweak} command in the input stream by the automatic +insertion of extra elements required to specify the context. + +Several @code{\tweak} commands may be placed before a +notational element -- all affect it: + +@lilypond[verbatim,quote,relative=1] +c +-\tweak #'style #'dashed-line +-\tweak #'dash-fraction #0.2 +-\tweak #'thickness #3 +-\tweak #'color #red + \glissando +f' +@end lilypond + +The music stream which is generated from a section of an input file, +including any automatically inserted elements, may be examined, +see @rextend{Displaying music expressions}. This may be helpful in +determining what may be modified by a @code{\tweak} command, or +in determining how to adjust the input to make a @code{\tweak} +apply. + + +@seealso +Learning Manual: +@rlearning{Tweaking methods}. + +Extending: +@rextend{Displaying music expressions}. + + +@knownissues + +@cindex tweaks in a variable +The @code{\tweak} command cannot be used inside a variable. + +@cindex tweaks in lyrics +The @code{\tweak} commands cannot be used in @code{\lyricmode}. + +@cindex tweaking control points +@cindex control points, tweaking + +The @code{\tweak} command will apply to only the first of several +generated ties in a chord. + +@node set versus override +@subsection @code{\set} vs. @code{\override} + +@c TODO -- This section is probably unnecessary now. + +@ignore +We have seen two methods of changing properties: @code{\set} and +@code{\override}. There are actually two different kinds of +properties. + +@code{fontSize} is a special property: it is equivalent to +entering @code{\override ... #'font-size} for all pertinent +objects. Since this is a common change, the special +property (modified with @code{\set}) was created. + +@end ignore + + +@node Modifying alists +@subsection Modifying alists + +Some user-configurable properties are internally represented as +@emph{alists} (association lists), which store pairs of +@emph{keys} and @emph{values}. The structure of an alist is: + +@example +'((@var{key1} . @var{value1}) + (@var{key2} . @var{value2}) + (@var{key3} . @var{value3}) + @dots{}) +@end example + +If an alist is a grob property or @code{\paper} variable, its keys +can be modified individually without affecting other keys. + +For example, to reduce the space between adjacent staves in a +staff-group, use the @code{staff-staff-spacing} property of the +@code{StaffGrouper} grob. The property is an alist with four +keys: @code{basic-distance}, @code{minimum-distance}, +@code{padding}, and @code{stretchability}. The standard settings +for this property are listed in the @qq{Backend} section of the +Internals Reference (see @rinternals{StaffGrouper}): + +@example +'((basic-distance . 9) + (minimum-distance . 7) + (padding . 1) + (stretchability . 5)) +@end example + +One way to bring the staves closer together is by reducing the +value of the @code{basic-distance} key (@code{9}) to match the +value of @code{minimum-distance} (@code{7}). To modify a single +key individually, use a @emph{nested declaration}: + +@lilypond[quote,verbatim] +% default space between staves +\new PianoStaff << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> + +% reduced space between staves +\new PianoStaff \with { + % this is the nested declaration + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7 +} << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> +@end lilypond + +Using a nested declaration will update the specified key (such as +@code{basic-distance} in the above example) without altering any +other keys already set for the same property. + +Now suppose we want the staves to be as close as possible without +overlapping. The simplest way to do this is to set all four alist +keys to zero. However, it is not necessary to enter four nested +declarations, one for each key. Instead, the property can be +completely re-defined with one declaration, as an alist: + +@lilypond[quote,verbatim] +\new PianoStaff \with { + \override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 0) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} << + \new Staff { \clef treble c''1 } + \new Staff { \clef bass c1 } +>> +@end lilypond + +Note that any keys not explicitly listed in the alist definition +will be reset to their @emph{default-when-unset} values. In the +case of @code{staff-staff-spacing}, any unset key-values would be +reset to zero (except @code{stretchability}, which takes the value +of @code{basic-distance} when unset). Thus the following two +declarations are equivalent: + +@example +\override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 7)) + +\override StaffGrouper #'staff-staff-spacing = + #'((basic-distance . 7) + (minimum-distance . 0) + (padding . 0) + (stretchability . 7)) +@end example + +One (possibly unintended) consequence of this is the removal of +any standard settings that are set in an initialization file and +loaded each time an input file is compiled. In the above example, +the standard settings for @code{padding} and +@code{minimum-distance} (defined in @file{scm/define-grobs.scm}) +are reset to their default-when-unset values (zero for both keys). +Defining a property or variable as an alist (of any size) will +always reset all unset key-values to their default-when-unset +values. Unless this is the intended result, it is safer to update +key-values individually with a nested declaration. + +@warning{Nested declarations will not work for context property +alists (such as @code{beamExceptions}, @code{keySignature}, +@code{timeSignatureSettings}, etc.). These properties can only be +modified by completely re-defining them as alists.} + + +@node Useful concepts and properties +@section Useful concepts and properties + + +@menu +* Input modes:: +* Direction and placement:: +* Context layout order:: +* Distances and measurements:: +* Staff symbol properties:: +* Spanners:: +* Visibility of objects:: +* Line styles:: +* Rotating objects:: +@end menu + +@node Input modes +@subsection Input modes + +The way in which the notation contained within an input file is +interpreted is determined by the current input mode. + +@strong{Chord mode} + +This is activated with the @code{\chordmode} command, and causes +input to be interpreted with the syntax of chord notation, see +@ref{Chord notation}. Chords are rendered as notes on a staff. + +Chord mode is also activated with the @code{\chords} command. +This also creates a new @code{ChordNames} context and +causes the following input to be interpreted with the syntax of +chord notation and rendered as chord names in the @code{ChordNames} +context, see @ref{Printing chord names}. + +@strong{Drum mode} + +This is activated with the @code{\drummode} command, and causes +input to be interpreted with the syntax of drum notation, see +@ref{Basic percussion notation}. + +Drum mode is also activated with the @code{\drums} command. +This also creates a new @code{DrumStaff} context and causes the +following input to be interpreted with the syntax of drum notation +and rendered as drum symbols on a drum staff, see @ref{Basic +percussion notation}. + +@strong{Figure mode} + +This is activated with the @code{\figuremode} command, and causes +input to be interpreted with the syntax of figured bass, see +@ref{Entering figured bass}. + +Figure mode is also activated with the @code{\figures} command. +This also creates a new @code{FiguredBass} context and causes the +following input to be interpreted with the figured bass syntax +and rendered as figured bass symbols in the @code{FiguredBass} +context, see @ref{Introduction to figured bass}. + +@strong{Fret and tab modes} + +There are no special input modes for entering fret and tab symbols. + +To create tab diagrams, enter notes or chords in note mode and +render them in a @code{TabStaff} context, see +@ref{Default tablatures}. + +To create fret diagrams above a staff, you have two choices. +You can either use the @code{FretBoards} context (see +@ref{Automatic fret diagrams} or you can enter them as a markup +above the notes using the @code{\fret-diagram} command (see +@ref{Fret diagram markups}). + +@strong{Lyrics mode} + +This is activated with the @code{\lyricmode} command, and causes +input to be interpreted as lyric syllables with optional durations +and associated lyric modifiers, see @ref{Vocal music}. + +Lyric mode is also activated with the @code{\addlyrics} command. +This also creates a new @code{Lyrics} context and an implicit +@code{\lyricsto} command which associates the following lyrics +with the preceding music. + +@strong{Markup mode} + +This is activated with the @code{\markup} command, and causes +input to be interpreted with the syntax of markup, see +@ref{Text markup commands}. + +@c silly work-around for texinfo broken-ness +@c (@strong{Note...} causes a spurious cross-reference in Info) +@b{Note mode} + +This is the default mode or it may be activated with the +@code{\notemode} command. Input is interpreted as pitches, +durations, markup, etc and typeset as musical notation on a staff. + +It is not normally necessary to specify note mode explicitly, but +it may be useful to do so in certain situations, for example if you +are in lyric mode, chord mode or any other mode and want to insert +something that only can be done with note mode syntax. + +For example, to indicate dynamic markings for the verses of a +choral pieces it is necessary to enter note mode to interpret +the markings: + +@lilypond[verbatim,relative=2,quote] +{ c4 c4 c4 c4 } +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic f 1. } } + To be sung loudly +} +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic p 2. } } + To be sung quietly +} +@end lilypond + + + +@node Direction and placement +@subsection Direction and placement + +In typesetting music the direction and placement of many items is +a matter of choice. For example, the stems of notes can +be directed up or down; lyrics, dynamics, and other expressive +marks may be placed above or below the staff; text may be aligned +left, right or center; etc. Most of these choices may be left to +be determined automatically by LilyPond, but in some cases it may +be desirable to force a particular direction or placement. + +@strong{Articulation direction indicators} + +By default some directions are always up or always down (e.g. +dynamics or fermata), while other things can alternate between +up or down based on the stem direction (like slurs or accents). + +@c TODO Add table showing these + +The default action may be overridden by prefixing the articulation +by a @emph{direction indicator}. Three direction indicators are +available: @code{^} (meaning @qq{up}), @code{_} (meaning @qq{down}) +and @code{-} (meaning @qq{use default direction}). The direction +indicator can usually be omitted, in which case @code{-} is assumed, +but a direction indicator is @strong{always} required before + +@itemize +@item @code{\tweak} commands +@item @code{\markup} commands +@item @code{\tag} commands +@item string markups, e.g. -"string" +@item fingering instructions, e.g. @code{-1} +@item articulation shortcuts, e.g. @code{-.}, @code{->}, @code{--} +@end itemize + +Direction indicators affect only the next note: + +@lilypond[verbatim,quote,relative=2] +c2( c) +c2_( c) +c2( c) +c2^( c) +@end lilypond + +@strong{The direction property} + +The position or direction of many layout objects is controlled +by the @code{direction} property. + +The value of the @code{direction} property may be +set to @code{1}, meaning @qq{up} or @qq{above}, or to @code{-1}, +meaning @qq{down} or @qq{below}. The symbols @code{UP} and +@code{DOWN} may be used instead of @code{1} and @code{-1} +respectively. The default direction may be specified by setting +@code{direction} to @code{0} or @code{CENTER}. Alternatively, +in many cases predefined commands +exist to specify the direction. These are all of the form + +@noindent +@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} + +@noindent +where @code{xxxNeutral} means @qq{use the default direction}. +See @rlearning{Within-staff objects}. + +In a few cases, arpeggio being the only common example, the value +of the @code{direction} property specifies whether the object +is to be placed to the right or left of the parent object. In +this case @code{-1} or @code{LEFT} means @qq{to the left} and +@code{1} or @code{RIGHT} means @qq{to the right}. @code{0} +or @code{CENTER} means @qq{use the default} direction, as before. + +@ignore +These all have side-axis set to #X +AmbitusAccidental - direction has no effect +Arpeggio - works +StanzaNumber - not tried +TrillPitchAccidental - not tried +TrillPitchGroup - not tried +@end ignore + +These indications affect all notes until they are cancelled. + +@lilypond[verbatim,quote,relative=2] +c2( c) +\slurDown +c2( c) +c2( c) +\slurNeutral +c2( c) +@end lilypond + + +@node Context layout order +@subsection Context layout order + +@cindex contexts, layout order + +Contexts are normally positioned in a system from top to bottom +in the order in which they are encountered in the input file. When +contexts are nested, the outer context will include inner nested +contexts as specified in the input file, provided the inner contexts +are included in the outer context's @qq{accepts} list. Nested +contexts which are not included in the outer context's @qq{accepts} +list will be repositioned below the outer context rather than nested +within it. + +Note that a context will be silently created implicitly if a command +is encountered when there is no suitable context available to +contain it. This can give rise to unexpected new staves or scores. + +The default order in which contexts are laid out and the +@qq{accepts} list can be changed, see @ref{Aligning contexts}. + +@seealso +Usage Manual: +@rprogram{An extra staff appears}. + + +@node Distances and measurements +@subsection Distances and measurements + +@cindex distances, absolute +@cindex distances, scaled + +@funindex \mm +@funindex \cm +@funindex \in +@funindex \pt + +Distances in LilyPond are of two types: absolute and scaled. + +Absolute distances are used for specifying margins, indents, and +other page layout details, and are by default specified in +millimeters. Distances may be specified in other units by +following the quantity by @code{\mm}, @code{\cm}, +@code{\in}@tie{}(inches), or @code{\pt}@tie{}(points, 1/72.27 of +an inch). Page layout distances can also be specified in scalable +units (see the following paragraph) by appending +@code{\staff-space} to the quantity. Page layout is described in +detail in @ref{Page layout}. + +Scaled distances are always specified in units of the staff-space +or, rarely, the half staff-space. The staff-space is the distance +between two adjacent staff lines. The default value can be changed +globally by setting the global staff size, or it can be overridden +locally by changing the @code{staff-space} property of +@code{StaffSymbol}. Scaled distances automatically scale with any +change to the either the global staff size or the +@code{staff-space} property of @code{StaffSymbol}, but fonts scale +automatically only with changes to the global staff size. +The global staff size thus enables the overall size of a rendered +score to be easily varied. For the methods of setting the global +staff size see @ref{Setting the staff size}. + +@funindex magstep + +If just a section of a score needs to be rendered to a different +scale, for example an ossia section or a footnote, the global staff +size cannot simply be changed as this would affect the entire score. +In such cases the change in size is made by overriding both the +@code{staff-space} property of @code{StaffSymbol} and the size of +the fonts. A Scheme function, @code{magstep}, is available to +convert from a font size change to the equivalent change in +@code{staff-space}. For an explanation and an example of its use, +see @rlearning{Length and thickness of objects}. + + +@seealso +Learning Manual: +@rlearning{Length and thickness of objects}. + +Notation Reference: +@ref{Page layout}, +@ref{Setting the staff size}. + + +@node Staff symbol properties +@subsection Staff symbol properties + +@cindex adjusting staff symbol +@cindex drawing staff symbol +@cindex staff symbol, setting of + +@c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol +@c Need to think of uses for these properties. Eg 'line-positions +@c is used in a snippet to thicken centre line. +@c If retained, add @ref to here in 1.6.2 -td + +The vertical position of staff lines and the number of staff lines +can be defined at the same time. As the following example shows, +note positions are not influenced by the staff line positions. + +@warning{The @code{'line-positions} property overrides the +@code{'line-count} property. The number of staff lines is +implicitly defined by the number of elements in the list of values +for @code{'line-positions}.} + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) +} +{ a4 e' f b | d1 } +@end lilypond + +The width of a staff can be modified. The units are staff +spaces. The spacing of objects inside the staff is not affected by +this setting. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'width = #23 +} +{ a4 e' f b | d1 } +@end lilypond + + +@node Spanners +@subsection Spanners + +Many objects of musical notation extend over several notes or even +several bars. Examples are slurs, beams, tuplet brackets, volta +repeat brackets, crescendi, trills, and glissandi. Such objects +are collectively called @qq{spanners}, and have special properties to control +their appearance and behaviour. Some of these properties are common +to all spanners; others are restricted to a sub-set of the spanners. + +All spanners support the @code{spanner-interface}. A few, essentially +those that draw a straight line between the two objects, support in +addition the @code{line-spanner-interface}. + +@unnumberedsubsubsec Using the @code{spanner-interface} + +This interface provides two properties that apply to several spanners. + +@strong{@i{The @code{minimum-length} property}} + +The minimum length of the spanner is specified by the +@code{minimum-length} property. Increasing this usually has the +necessary effect of increasing the spacing of the notes between the +two end points. However, this override has no effect on +many spanners, as their length is determined by other considerations. +A few examples where it is effective are shown below. + +@ignore +Works for: + Tie + MultiMeasureRest + Hairpin + Slur + PhrasingSlur + +Works as long as callback is made: + Glissando + Beam + +Works not at all for: + LyricSpace + LyricHyphen + LyricExtender + TextSpanner + System + +@end ignore + +@lilypond[verbatim,quote,relative=2] +a~a +a +% increase the length of the tie +-\tweak #'minimum-length #5 +~a +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a1 +\compressFullBarRests +R1*23 +% increase the length of the rest bar +\once \override MultiMeasureRest #'minimum-length = #20 +R1*23 +a1 +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a \< a a a \! +% increase the length of the hairpin +\override Hairpin #'minimum-length = #20 +a \< a a a \! +@end lilypond + +This override can also be used to increase the length of slurs and +phrasing slurs: + +@lilypond[verbatim,quote,relative=2] +a( a) +a +-\tweak #'minimum-length #5 +( a) + +a\( a\) +a +-\tweak #'minimum-length #5 +\( a\) +@end lilypond + +For some layout objects, the @code{minimum-length} property becomes +effective only if the @code{set-spacing-rods} procedure is called +explicitly. To do this, the @code{springs-and-rods} property should +be set to @code{ly:spanner::set-spacing-rods}. For example, +the minimum length of a glissando has no effect unless the +@code{springs-and-rods} property is set: + +@lilypond[verbatim,quote,relative=1] +% default +e \glissando c' + +% not effective alone +\once \override Glissando #'minimum-length = #20 +e, \glissando c' + +% effective only when both overrides are present +\once \override Glissando #'minimum-length = #20 +\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods +e, \glissando c' +@end lilypond + +The same is true of the @code{Beam} object: + +@lilypond[verbatim,quote,relative=1] +% not effective alone +\once \override Beam #'minimum-length = #20 +e8 e e e + +% effective only when both overrides are present +\once \override Beam #'minimum-length = #20 +\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods +e8 e e e +@end lilypond + +@strong{@i{The @code{to-barline} property}} + +The second useful property of the @code{spanner-interface} is +@code{to-barline}. By default this is true, causing hairpins and +other spanners which are terminated on the first note of a measure to +end instead on the immediately preceding bar line. If set to false, +the spanner will extend beyond the bar line and end on the note +itself: + +@lilypond[verbatim,quote,relative=2] +a \< a a a a \! a a a \break +\override Hairpin #'to-barline = ##f +a \< a a a a \! a a a +@end lilypond + +This property is not effective for all spanners. For example, +setting it to @code{#t} has no effect on slurs or phrasing slurs +or on other spanners for which terminating on the bar line would +not be meaningful. + +@unnumberedsubsubsec Using the @code{line-spanner-interface} + +Objects which support the @code{line-spanner-interface} include + +@itemize +@item @code{DynamicTextSpanner} +@item @code{Glissando} +@item @code{TextSpanner} +@item @code{TrillSpanner} +@item @code{VoiceFollower} +@end itemize + +The routine responsible for drawing the stencils for these spanners is +@code{ly:line-interface::print}. This routine determines the +exact location of the two end points and draws a line +between them, in the style requested. The locations of the two +end points of the spanner are computed on-the-fly, but it is +possible to override their Y-coordinates. The +properties which need to be specified are nested +two levels down within the property hierarchy, but the syntax of +the @code{\override} command is quite simple: + +@lilypond[relative=2,quote,verbatim] +e2 \glissando b +\once \override Glissando #'(bound-details left Y) = #3 +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando b +@end lilypond + +The units for the @code{Y} property are @code{staff-space}s, +with the center line of the staff being the zero point. +For the glissando, this is the value for @code{Y} at the +X-coordinate corresponding to the center point of each note head, +if the line is imagined to be extended to there. + +If @code{Y} is not set, the value is computed from the vertical +position of the corresponding attachment point of the spanner. + +In case of a line break, the values for the end points are +specified by the @code{left-broken} and @code{right-broken} +sub-lists of @code{bound-details}. For example: + +@lilypond[relative=2,ragged-right,verbatim,quote] +\override Glissando #'breakable = ##t +\override Glissando #'(bound-details right-broken Y) = #-3 +c1 \glissando \break +f1 +@end lilypond + + +A number of further properties of the @code{left} and +@code{right} sub-lists of the @code{bound-details} property +may be modified in the same way as @code{Y}: + +@table @code +@item Y +This sets the Y-coordinate of the end point, in @code{staff-space}s +offset from the staff center line. By default, it is the center of +the bound object, so a glissando points to the vertical center of +the note head. + +For horizontal spanners, such as text spanners and trill spanners, +it is hardcoded to 0. + +@item attach-dir +This determines where the line starts and ends in the X-direction, +relative to the bound object. So, a value of @code{-1} (or +@code{LEFT}) makes the line start/end at the left side of the note +head it is attached to. + +@item X +This is the absolute X-coordinate of the end point. It is usually +computed on the fly, and overriding it has little useful effect. + +@item stencil +Line spanners may have symbols at the beginning or end, which is +contained in this sub-property. This is for internal use; it is +recommended that @code{text} be used instead. + +@item text +This is a markup that is evaluated to yield the stencil. It is used +to put @i{cresc.}, @i{tr} and other text on horizontal spanners. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) + = \markup { \small \bold Slower } +c2\startTextSpan b c a\stopTextSpan +@end lilypond + +@item stencil-align-dir-y +@item stencil-offset +Without setting one of these, the stencil is simply put at the +end-point, centered on the line, as defined by the @code{X} and +@code{Y} sub-properties. Setting either @code{stencil-align-dir-y} +or @code{stencil-offset} will move the symbol at the edge vertically +relative to the end point of the line: + +@lilypond[relative=1,quote,verbatim] +\override TextSpanner + #'(bound-details left stencil-align-dir-y) = #-2 +\override TextSpanner + #'(bound-details right stencil-align-dir-y) = #UP + +\override TextSpanner + #'(bound-details left text) = #"ggg" +\override TextSpanner + #'(bound-details right text) = #"hhh" +c4^\startTextSpan c c c \stopTextSpan +@end lilypond + +Note that negative values move the text @emph{up}, contrary to the +effect that might be expected, as a value of @code{-1} or +@code{DOWN} means align the @emph{bottom} edge of the text with +the spanner line. A value of @code{1} or @code{UP} aligns +the top edge of the text with the spanner line. + +@item arrow +Setting this sub-property to @code{#t} produces an arrowhead at the +end of the line. + +@item padding +This sub-property controls the space between the specified +end point of the line and the actual end. Without padding, a +glissando would start and end in the center of each note head. + +@end table + +The music function @code{\endSpanners} terminates the spanner +which starts on the immediately following note prematurely. It +is terminated after exactly one note, or at the following bar line +if @code{to-barline} is true and a bar line occurs before the next +note. + +@lilypond[verbatim,quote,ragged-right,relative=2] +\endSpanners +c2 \startTextSpan c2 c2 +\endSpanners +c2 \< c2 c2 +@end lilypond + +When using @code{\endSpanners} it is not necessary to close +\startTextSpan with \stopTextSpan, nor is it necessary to close +hairpins with @code{\!}. + + +@seealso +Internals Reference: +@rinternals{TextSpanner}, +@rinternals{Glissando}, +@rinternals{VoiceFollower}, +@rinternals{TrillSpanner}, +@rinternals{line-spanner-interface}. + + +@node Visibility of objects +@subsection Visibility of objects + +@cindex objects, visibility of +@cindex grobs, visibility of +@cindex visibility of objects + +There are four main ways in which the visibility of layout objects +can be controlled: their stencil can be removed, they can be made +transparent, they can be colored white, or their +@code{break-visibility} property can be overridden. The first +three apply to all layout objects; the last to just a few -- the +@emph{breakable} objects. The Learning Manual introduces these +four techniques, see @rlearning{Visibility and color of objects}. + +There are also a few other techniques which are specific to +certain layout objects. These are covered under Special +considerations. + +@menu +* Removing the stencil:: +* Making objects transparent:: +* Painting objects white:: +* Using break-visibility:: +* Special considerations:: +@end menu + + +@node Removing the stencil +@unnumberedsubsubsec Removing the stencil + +@cindex stencil, removing + +Every layout object has a stencil property. By default this is set +to the specific function which draws that object. If this property +is overridden to @code{#f} no function will be called and the object +will not be drawn. The default action can be recovered with +@code{\revert}. + +@lilypond[quote,verbatim,relative=1] +a1 a +\override Score.BarLine #'stencil = ##f +a a +\revert Score.BarLine #'stencil +a a a +@end lilypond + +@node Making objects transparent +@unnumberedsubsubsec Making objects transparent + +@cindex transparent, making objects + +Every layout object has a transparent property which by default is +set to @code{#f}. If set to @code{#t} the object still occupies +space but is made invisible. + +@lilypond[quote,verbatim,relative=2] +a4 a +\once \override NoteHead #'transparent = ##t +a a +@end lilypond + +@node Painting objects white +@unnumberedsubsubsec Painting objects white + +@cindex objects, coloring +@cindex coloring objects +@cindex layers +@cindex printing order +@cindex overwriting objects +@cindex objects, overwriting +@cindex grobs, overwriting + +Every layout object has a color property which by default is set +to @code{black}. If this is overridden to @code{white} the object +will be indistinguishable from the white background. However, +if the object crosses other objects the color of the crossing +points will be determined by the order in which they are drawn, +and this may leave a ghostly image of the white object, as shown +here: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +a1 +@end lilypond + +This may be avoided by changing the order of printing the objects. +All layout objects have a @code{layer} property which should be set +to an integer. Objects with the lowest value of @code{layer} are +drawn first, then objects with progressively higher values are drawn, +so objects with higher values overwrite objects with lower values. +By default most objects are assigned a @code{layer} value of +@code{1}, although a few objects, including @code{StaffSymbol} and +@code{BarLine}, are assigned a value of @code{0}. The order of +printing objects with the same value of @code{layer} is indeterminate. + +In the example above the white clef, with a default @code{layer} +value of @code{1}, is drawn after the staff lines (default +@code{layer} value @code{0}), so overwriting them. To change this, +the @code{Clef} object must be given in a lower value of +@code{layer}, say @code{-1}, so that it is drawn earlier: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +\override Staff.Clef #'layer = #-1 +a1 +@end lilypond + +@node Using break-visibility +@unnumberedsubsubsec Using break-visibility + +@c TODO Add making other objects breakable + +@cindex break-visibility + +Most layout objects are printed only once, but some like +bar lines, clefs, time signatures and key signatures, may need +to be printed twice when a line break occurs -- once at the end +of the line and again at the start of the next line. Such +objects are called @emph{breakable}, and have a property, the +@code{break-visibility} property to control their visibility +at the three positions in which they may appear -- at the +start of a line, within a line if they are changed, and at the +end of a line if a change takes place there. + +For example, the time signature +by default will be printed at the start of the first line, but +nowhere else unless it changes, when it will be printed at the +point at which the change occurs. If this change occurs at the +end of a line the new time signature will be printed at the start +of the next line and a cautionary time signature will be printed +at the end of the previous line as well. + +This behaviour is controlled by the @code{break-visibility} +property, which is explained in +@c Leave this ref on a newline - formats incorrectly otherwise -td +@rlearning{Visibility and color of objects}. This property takes +a vector of three booleans which, in order, determine whether the +object is printed at the end of, within the body of, or at the +beginning of a line. Or to be more precise, before a line break, +where there is no line break, or after a line break. + +Alternatively, these eight combinations may be specified +by pre-defined functions, defined in @file{scm/output-lib.scm}, +where the last three columns indicate whether the layout objects +will be visible in the positions shown at the head of the columns: + +@multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {yes} {yes} {yes} +@headitem Function @tab Vector @tab Before @tab At no @tab After +@headitem form @tab form @tab break @tab break @tab break + +@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab yes @tab yes @tab yes +@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab no @tab no @tab yes +@item @code{center-visible} @tab @code{'#(#f #t #f)} @tab no @tab yes @tab no +@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab yes @tab no @tab no +@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab yes @tab yes @tab no +@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab yes @tab no @tab yes +@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab no @tab yes @tab yes +@item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab no @tab no @tab no +@end multitable + +The default settings of @code{break-visibility} depend on the +layout object. The following table shows all the layout objects +of interest which are affected by @code{break-visibility} and the +default setting of this property: + +@multitable @columnfractions .3 .3 .4 + +@headitem Layout object @tab Usual context @tab Default setting + +@c omit Ambitus as it appears not to be affected by break-visibility -td +@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} +@item @code{BarLine} @tab @code{Score} @tab calculated +@item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible} +@c omit the following item until it can be explained -td +@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated +@item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} +@item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@c omit KeyCancellation until it can be explained -td +@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} +@item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible} +@c omit LeftEdge until it can be explained -td +@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} +@item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible} +@item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible} + +@end multitable + +The example below shows the use of the vector form to control the +visibility of bar lines: + +@lilypond[quote,verbatim,relative=1,ragged-right] +f4 g a b +f4 g a b +% Remove bar line at the end of the current line +\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) +\break +f4 g a b +f4 g a b +@end lilypond + +Although all three components of the vector used to override +@code{break-visibility} must be present, not all of them are +effective with every layout object, and some combinations may +even give errors. The following limitations apply: + +@itemize @bullet +@item Bar lines cannot be printed at start of line. +@item A bar number cannot be printed at the start of the first +line unless it is set to be different from 1. +@item Clef -- see below +@item Double percent repeats are either all printed or all +suppressed. Use begin-of line-invisible to print and +all-invisible to suppress. +@item Key signature -- see below +@item OctavateEight -- see below +@end itemize + +@node Special considerations +@unnumberedsubsubsec Special considerations + +@strong{@emph{Visibility following explicit changes}} + +@cindex key signature, visibility following explicit change +@cindex explicitKeySignatureVisibility +@cindex clef, visibility following explicit change +@cindex explicitClefVisibility + +The @code{break-visibility} property controls the visibility of +key signatures and changes of clef only at the start of lines, +i.e. after a break. It has no effect on the visibility of the +key signature or clef following an explicit key change or an +explicit clef change within or at the end of a line. In the +following example the key signature following the explicit change +to B-flat major is still visible, even though @code{all-invisible} +is set. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +% Try to remove all key signatures +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b +\break +f4 g a b +f4 g a b +@end lilypond + +The visibility of such explicit key signature and clef changes is +controlled by the @code{explicitKeySignatureVisibility} and +@code{explicitClefVisibility} properties. These are the equivalent +of the @code{break-visibility} property and both take a vector of +three booleans or the predefined functions listed above, exactly like +@code{break-visibility}. Both are properties of the Staff context, +not the layout objects themselves, and so they are set using the +@code{\set} command. Both are set by default to @code{all-visible}. +These properties control only the visibility of key signatures and +clefs resulting from explicit changes and do not affect key +signatures and clefs at the beginning of lines; +@code{break-visibility} must still be overridden in the appropriate +object to remove these. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +@strong{@emph{Visibility of cautionary accidentals}} + +To remove the cautionary accidentals printed at an explicit key +change, set the Staff context property @code{printKeyCancellation} +to @code{#f}: + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.printKeyCancellation = ##f +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +With these overrides only the accidentals before the notes remain +to indicate the change of key. + +@c TODO Add visibility of cautionary accidentals before notes + +@strong{@emph{Automatic bars}} + +@cindex automaticBars +@cindex bar lines, suppressing + +As a special case, the printing of bar lines can also be turned off +by setting the @code{automaticBars} property in the Score context. +If set to @code{#f}, bar lines will not be printed automatically; +they must be explicitly created with a @code{\bar} command. Unlike +the @code{\cadenzaOn} predefined command, measures are still counted. +Bar generation will resume according to that count if this property +is later set to @code{#t}. When set to @code{#f}, line breaks can +occur only at explicit @code{\bar} commands. + +@c TODO Add example + +@strong{@emph{Octavated clefs}} + +@cindex octavated clefs, visibility of +@cindex visibility of octavated clefs +@cindex clefs, visibility of octavation + +The small octavation symbol on octavated clefs is produced by the +@code{OctavateEight} layout object. Its visibility is automatically +inherited from the @code{Clef} object, so it is not necessary to apply +any required @code{break-visibility} overrides to the @code{OctavateEight} +layout objects to suppress octavation symbols for invisible clefs. + +For explicit clef changes, the @code{explicitClefVisibility} +property controls both the clef symbol and any octavation symbol +associated with it. + + +@seealso +Learning Manual: +@rlearning{Visibility and color of objects} + + +@node Line styles +@subsection Line styles + +Some performance indications, e.g., @i{rallentando} and +@i{accelerando} and @i{trills} are written as text and are +extended over many measures with lines, sometimes dotted or wavy. + +These all use the same routines as the glissando for drawing the +texts and the lines, and tuning their behavior is therefore also +done in the same way. It is done with a spanner, and the routine +responsible for drawing the spanners is +@code{ly:line-interface::print}. This routine determines the +exact location of the two @i{span points} and draws a line +between them, in the style requested. + +Here is an example showing the different line styles available, +and how to tune them. + +@lilypond[relative=2,ragged-right,verbatim,quote] +d2 \glissando d'2 +\once \override Glissando #'style = #'dashed-line +d,2 \glissando d'2 +\override Glissando #'style = #'dotted-line +d,2 \glissando d'2 +\override Glissando #'style = #'zigzag +d,2 \glissando d'2 +\override Glissando #'style = #'trill +d,2 \glissando d'2 +@end lilypond + +The locations of the end-points of the spanner are computed +on-the-fly for every graphic object, but it is possible to +override these: + +@c TODO Complete +@lilypond[relative=2,ragged-right,verbatim,quote] +e2 \glissando f +\once \override Glissando #'(bound-details right Y) = #-2 +e2 \glissando f +@end lilypond + +The value for @code{Y} is set to @code{-2} for the right end +point. The left side may be similarly adjusted by specifying +@code{left} instead of @code{right}. + +If @code{Y} is not set, the value is computed from the vertical +position of the left and right attachment points of the spanner. + +Other adjustments of spanners are possible, for details, see +@ref{Spanners}. + +@node Rotating objects +@subsection Rotating objects + +Both layout objects and elements of markup text can be rotated by +any angle about any point, but the method of doing so differs. + +@menu +* Rotating layout objects:: +* Rotating markup:: +@end menu + +@node Rotating layout objects +@unnumberedsubsubsec Rotating layout objects + +@cindex rotating objects +@cindex objects, rotating + +All layout objects which support the @code{grob-interface} can be +rotated by setting their @code{rotation} property. This takes a +list of three items: the angle of rotation counter-clockwise, +and the x and y coordinates of the point relative to the object's +reference point about which the rotation is to be performed. The +angle of rotation is specified in degrees and the coordinates in +staff-spaces. + +The angle of rotation and the coordinates of the rotation point must +be determined by trial and error. + +@cindex hairpins, angled +@cindex angled hairpins + +There are only a few situations where the rotation of layout +objects is useful; the following example shows one situation where +they may be: + +@lilypond[quote,verbatim,relative=1] +g4\< e' d' f\! +\override Hairpin #'rotation = #'(20 -1 0) +g,,4\< e' d' f\! +@end lilypond + +@node Rotating markup +@unnumberedsubsubsec Rotating markup + +All markup text can be rotated to lie at any angle by prefixing it +with the @code{\rotate} command. The command takes two arguments: +the angle of rotation in degrees counter-clockwise and the text to +be rotated. The extents of the text are not rotated: they take +their values from the extremes of the x and y coordinates of the +rotated text. In the following example the +@code{outside-staff-priority} property for text is set to @code{#f} +to disable the automatic collision avoidance, which would push some +of the text too high. + +@lilypond[quote,verbatim,relative=1] +\override TextScript #'outside-staff-priority = ##f +g4^\markup { \rotate #30 "a G" } +b^\markup { \rotate #30 "a B" } +des^\markup { \rotate #30 "a D-Flat" } +fis^\markup { \rotate #30 "an F-Sharp" } +@end lilypond + +@node Advanced tweaks +@section Advanced tweaks + +This section discusses various approaches to fine tuning the +appearance of the printed score. + +@menu +* Aligning objects:: +* Vertical grouping of grobs:: +* Modifying stencils:: +* Modifying shapes:: +@end menu + + +@seealso +Learning Manual: +@rlearning{Tweaking output}, +@rlearning{Other sources of information}. + +Notation Reference: +@ref{Explaining the Internals Reference}, +@ref{Modifying properties}. + +Installed Files: +@file{scm/define-grobs.scm}. + +Snippets: +@rlsr{Tweaks and overrides}. + +Extending: +@rextend{Interfaces for programmers}. + +Internals Reference: +@rinternals{All layout objects}. + + +@node Aligning objects +@subsection Aligning objects + +Graphical objects which support the @code{self-alignment-interface} +and/or the @code{side-position-interface} can be aligned to a previously +placed object in a variety of ways. For a list of these objects, see +@rinternals{self-alignment-interface} and @rinternals{side-position-interface}. + +All graphical objects have a reference point, a horizontal extent and a +vertical extent. The horizontal extent is a pair of numbers +giving the displacements from the reference point of the left and +right edges, displacements to the left being negative. The vertical +extent is a pair of numbers giving the displacement from the reference +point to the bottom and top edges, displacements down being negative. + +An object's position on a staff is given by the values of the +@code{X-offset} and @code{Y-offset} properties. The value of +@code{X-offset} gives the displacement from the X coordinate of +the reference point of the parent object, and the value of +@code{Y-offset} gives the displacement from the center line of the +staff. The values of @code{X-offset} and @code{Y-offset} may +be set directly or may be set to be calculated by procedures in order +to achieve alignment with the parent object. + +@warning{Many objects have special positioning considerations which +cause any setting of @code{X-offset} or @code{Y-offset} to be +ignored or modified, even though the object supports the +@code{self-alignment-interface}. Overriding the @code{X-offset} +or @code{Y-offset} properties to a fixed value causes the respective +@code{self-alignment} property to be disregarded.} + +For example, an accidental can be repositioned vertically by setting +@code{Y-offset} but any changes to @code{X-offset} have no effect. + +Rehearsal marks may be aligned with breakable objects such as bar +lines, clef symbols, time signature symbols and key signatures. There +are special properties to be found in the @code{break-aligned-interface} +for positioning rehearsal marks on such objects. + +@seealso +@ref{Using the break-alignable-interface}, +@rextend{Callback functions}. + +@menu +* Setting X-offset and Y-offset directly:: +* Using the side-position-interface:: +* Using the self-alignment-interface:: +* Using the break-alignable-interface:: +@end menu + +@node Setting X-offset and Y-offset directly +@unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly + +Numerical values may be given to the @code{X-offset} and @code{Y-offset} +properties of many objects. The following example shows three +notes with the default fingering position and the positions with @code{X-offset} +and @code{Y-offset} modified. + +@lilypond[verbatim,quote,relative=2] +a-3 +a +-\tweak #'X-offset #0 +-\tweak #'Y-offset #0 +-3 +a +-\tweak #'X-offset #-1 +-\tweak #'Y-offset #1 +-3 +@end lilypond + +@c TODO write more + +@node Using the side-position-interface +@unnumberedsubsubsec Using the @code{side-position-interface} + +An object which supports the @code{side-position-interface} can be +placed next to its parent object so that +the specified edges of the two objects touch. The object may be +placed above, below, to the right or to the left of the parent. +The parent cannot be specified; it is determined by the order of +elements in the input stream. Most objects have the associated +note head as their parent. + +The values of the @code{side-axis} and @code{direction} properties +determine where the object is to be placed, as follows: + +@c TODO add an example of each to the table + +@multitable @columnfractions .3 .3 .3 +@headitem @code{side-axis} @tab @code{direction} @tab +@headitem property @tab property @tab Placement + +@item @code{0} @tab @code{-1} @tab left +@item @code{0} @tab @code{1} @tab right +@item @code{1} @tab @code{-1} @tab below +@item @code{1} @tab @code{1} @tab above + +@end multitable + +When @code{side-axis} is @code{0}, @code{X-offset} should be set to +the procedure @code{ly:side-position-interface::x-aligned-side}. +This procedure will return the correct value of @code{X-offset} to +place the object to the left or right side of the parent according +to value of @code{direction}. + +When @code{side-axis} is @code{1}, @code{Y-offset} should be set to +the procedure @code{ly:side-position-interface::y-aligned-side}. +This procedure will return the correct value of @code{Y-offset} to +place the object to the top or bottom of the parent according +to value of @code{direction}. + +@c TODO Add examples + +@node Using the self-alignment-interface +@unnumberedsubsubsec Using the @code{self-alignment-interface} + +@emph{Self-aligning objects horizontally} + +The horizontal alignment of an object which supports the +@code{self-alignment-interface} is controlled by the value of +the @code{self-alignment-X} property, provided the object's +@code{X-offset} property is set to +@code{ly:self-alignment-interface::x-aligned-on-self}. +@code{self-alignment-X} may be given any +real value, in units of half the total X extent of the +object. Negative values move the object to the right, positive +to the left. A value of @code{0} centers the object on the +reference point of its parent, a value of @code{-1} aligns the +left edge of the object on the reference point of its parent, +and a value of @code{1} aligns the right edge of the object on the +reference point of its parent. The symbols @code{LEFT}, +@code{CENTER} and @code{RIGHT} may be used instead of the values +@code{-1, 0, 1} respectively. + +Normally the @code{\override} command would be used to modify the +value of @code{self-alignment-X}, but the @code{\tweak} command +can be used to separately align several annotations on a single +note: + +@lilypond[quote,verbatim,relative=1] +a' +-\tweak #'self-alignment-X #-1 +^"left-aligned" +-\tweak #'self-alignment-X #0 +^"center-aligned" +-\tweak #'self-alignment-X #RIGHT +^"right-aligned" +-\tweak #'self-alignment-X #-2.5 +^"aligned further to the right" +@end lilypond + +@emph{Self-aligning objects vertically} + +Objects may be aligned vertically in an analogous way to aligning +them horizontally if the @code{Y-offset} property is set to +@code{ly:self-alignment-interface::y-aligned-on-self}. However, +other mechanisms are often involved in vertical alignment: the +value of @code{Y-offset} is just one variable taken into account. +This may make adjusting the value of some objects tricky. +The units are just half the vertical extent of the object, which +is usually quite small, so quite large numbers may be required. +A value of @code{-1} aligns the lower edge of the object with +the reference point of the parent object, a value of @code{0} +aligns the center of the object with the reference point of the +parent, and a value of @code{1} aligns the top edge of the object +with the reference point of the parent. The symbols @code{DOWN}, +@code{CENTER}, @code{UP} may be substituted for @code{-1, 0, 1} +respectively. + +@emph{Self-aligning objects in both directions} + +By setting both @code{X-offset} and @code{Y-offset}, an object may +be aligned in both directions simultaneously. + +The following example shows how to adjust a fingering mark so +that it nestles close to the note head. + +@lilypond[quote,verbatim,relative=2] +a +-\tweak #'self-alignment-X #0.5 % move horizontally left +-\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self +-\tweak #'self-alignment-Y #-1 % move vertically up +-3 % third finger +@end lilypond + +@ignore +@unnumberedsubsubsec Using the @code{aligned-on-parent} procedures + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +The @code{aligned-on-parent} procedures are used in the same way +as the @code{aligned-on-self} procedures, they difference being +that they permit an object to be aligned with the @emph{edges} of +the parent rather than the parent's reference point. The following +example shows the difference: + +@c TODO Add example + +@lilypond[verbatim,quote] +@end lilypond + +@end ignore + +@ignore +@unnumberedsubsubsec Using the @code{centered-on-parent} procedures + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +@end ignore + +@c TODO The align-interface, BassFigureAlignment and VerticalAlignment + +@node Using the break-alignable-interface +@unnumberedsubsubsec Using the @code{break-alignable-interface} + +@cindex align to objects +@cindex break-align-symbols + +Rehearsal marks and bar numbers may be aligned with notation +objects other than bar lines. These objects include @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and +@code{time-signature}. + +By default, rehearsal marks and bar numbers will be horizontally +centered above the object: + +@lilypond[verbatim,quote,relative=1] +% The rehearsal mark will be centered above the Clef +\override Score.RehearsalMark #'break-align-symbols = #'(clef) +\key a \major +\clef treble +\mark "↓" +e1 +% The rehearsal mark will be centered above the Time Signature +\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) +\key a \major +\clef treble +\time 3/4 +\mark "↓" +e2. +% The rehearsal mark will be centered above the Breath Mark +\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign) +\key a \major +\clef treble +\time 4/4 +e1 +\breathe +\mark "↓" +@end lilypond + +A list of possible target alignment objects may be specified. If +some of the objects are invisible at that point due to the setting +of @code{break-visibility} or the explicit visibility settings for +keys and clefs, the rehearsal mark or bar number is aligned to the +first object in the list which is visible. If no objects in the +list are visible the object is aligned to the bar line. If the bar +line is invisible the object is aligned to the place where the bar +line would be. + +@lilypond[verbatim,quote,relative=1] +% The rehearsal mark will be centered above the Key Signature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef treble +\mark "↓" +e1 +% The rehearsal mark will be centered above the Clef +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef bass +\mark "↓" +gis,,1 +% The rehearsal mark will be centered above the Bar Line +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.explicitClefVisibility = #all-invisible +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) +\key a \major +\clef treble +\mark "↓" +e''1 +@end lilypond + +The alignment of the rehearsal mark relative to the notation object +can be changed, as shown in the following example. In a score with +multiple staves, this setting should be done for all the staves. + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be centered above the Key Signature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\key a \major +\clef treble +\time 4/4 +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the Key Signature +\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT +\mark "↓" +\key a \major +e1 +% The RehearsalMark will be aligned with the right edge of the Key Signature +\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT +\key a \major +\mark "↓" +e1 +@end lilypond + +The rehearsal mark can also be offset to the right or left of the left +edge by an arbitrary amount. The units are staff-spaces: + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be aligned with the left edge of the Key Signature +% and then shifted right by 3.5 staff-spaces +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\once \override Score.KeySignature #'break-align-anchor = #3.5 +\key a \major +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the Key Signature +% and then shifted left by 2 staff-spaces +\once \override Score.KeySignature #'break-align-anchor = #-2 +\key a \major +\mark "↓" +e1 +@end lilypond + + +@node Vertical grouping of grobs +@subsection Vertical grouping of grobs + +@c TODO Expand this section + +The VerticalAlignment and VerticalAxisGroup grobs work together. +VerticalAxisGroup groups together different grobs like Staff, Lyrics, +etc. VerticalAlignment then vertically aligns the different grobs +grouped together by VerticalAxisGroup. There is usually only one +VerticalAlignment per score but every Staff, Lyrics, etc. has its own +VerticalAxisGroup. + + +@node Modifying stencils +@subsection Modifying stencils + +All layout objects have a @code{stencil} property which is part of +the @code{grob-interface}. By default, this property is usually +set to a function specific to the object that is tailor-made to +render the symbol which represents it in the output. For example, +the standard setting for the @code{stencil} property of the +@code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}. + +The standard symbol for any object can be replaced by modifying the +@code{stencil} property to reference a different, specially-written, +procedure. This requires a high level of knowledge of the internal +workings of LilyPond, but there is an easier way which can often +produce adequate results. + +This is to set the @code{stencil} property to the procedure which +prints text -- @code{ly:text-interface::print} -- and to add a +@code{text} property to the object which is set to contain the +markup text which produces the required symbol. Due to the +flexibility of markup, much can be achieved -- see in particular +@ref{Graphic notation inside markup}. + +The following example demonstrates this by changing the note head +symbol to a cross within a circle. + +@lilypond[verbatim,quote] +XinO = { + \once \override NoteHead #'stencil = #ly:text-interface::print + \once \override NoteHead #'text = \markup { + \combine + \halign #-0.7 \draw-circle #0.85 #0.2 ##f + \musicglyph #"noteheads.s2cross" + } +} +\relative c'' { + a a \XinO a a +} +@end lilypond + +Any of the glyphs in the feta Font can be supplied to the +@code{\musicglyph} markup command -- see @ref{The Feta font}. + +@c TODO Add inserting eps files or ref to later + +@c TODO Add inserting Postscript or ref to later + + +@seealso +Notation Reference: +@ref{Graphic notation inside markup}, +@ref{Formatting text}, +@ref{Text markup commands}, +@ref{The Feta font}. + + +@node Modifying shapes +@subsection Modifying shapes + +@menu +* Modifying ties and slurs:: +@end menu + +@node Modifying ties and slurs +@unnumberedsubsubsec Modifying ties and slurs + +@cindex slurs, modifying +@cindex ties, modifying +@cindex Bézier curves +@cindex Bézier control points + +Ties, slurs and phrasing slurs are drawn as third-order Bézier +curves. If the shape of the tie or slur which is calculated +automatically is not optimum, the shape may be modified manually by +explicitly specifying the four control points required to define +a third-order Bézier curve. + +Third-order or cubic Bézier curves are defined by four control +points. The first and fourth control points are precisely the +starting and ending points of the curve. The intermediate two +control points define the shape. Animations showing how the curve +is drawn can be found on the web, but the following description +may be helpful. The curve starts from the first control point +heading directly towards the second, gradually bending over to +head towards the third and continuing to bend over to head towards +the fourth, arriving there travelling directly from the third +control point. The curve is entirely contained in the +quadrilateral defined by the four control points. + +Here is an example of a case where the tie is not optimum, and +where @code{\tieDown} would not help. + +@lilypond[verbatim,quote,relative=1] +<< + { e1 ~ e } +\\ + { r4 } +>> +@end lilypond + +One way of improving this tie is to manually modify its control +points, as follows. + +The coordinates of the Bézier control points are specified in units +of staff-spaces. The X@tie{}coordinate is relative to the reference +point of the note to which the tie or slur is attached, and the +Y@tie{}coordinate is relative to the staff center line. The +coordinates are entered as a list of four pairs of decimal numbers +(reals). One approach is to estimate the coordinates of the two +end points, and then guess the two intermediate points. The optimum +values are then found by trial and error. + +It is useful to remember that a symmetric curve requires symmetric +control points, and that Bézier curves have the useful property that +transformations of the curve such as translation, rotation and +scaling can be achieved by applying the same transformation to the +curve's control points. + +For the example above the following override gives a satisfactory +tie. Note the placement -- it has to be immediately before the note +to which the start of the tie (or slur) is attached. + +@lilypond[verbatim,quote,relative=1] +<< + { + \once \override Tie + #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) + e1 ~ e1 + } +\\ + { r4 4 } +>> +@end lilypond + +@knownissues + +It is not possible to modify shapes of ties or slurs by changing +the @code{control-points} property if there are more than one at +the same musical moment, not even by using the @code{\tweak} +command. However, the @code{tie-configuration} property of +@code{TieColumn} can be overridden to set start line and direction +of ties as required. + + + + +@node Using music functions +@section Using music functions + +@c TODO -- add @seealso, etc. to these subsections + +Where tweaks need to be reused with different music expressions, +it is often convenient to make the tweak part of a @emph{music +function}. In this section, we discuss only @emph{substitution} +functions, where the object is to substitute a variable into a +piece of LilyPond input code. Other more complex functions are +described in @rextend{Music functions}. + +@menu +* Substitution function syntax:: +* Substitution function examples:: +@end menu + +@node Substitution function syntax +@subsection Substitution function syntax + +Making a function that substitutes a variable into LilyPond +code is easy. The general form of these functions is + +@example +function = +#(define-music-function + (parser location @var{arg1} @var{arg2} @dots{}) + (@var{type1?} @var{type2?} @dots{}) + #@{ + @var{@dots{}music@dots{}} + #@}) +@end example + +@noindent +where + +@multitable @columnfractions .33 .66 +@item @code{@var{argN}} +@tab @var{n}th argument + +@item @code{@var{typeN?}} +@tab a scheme @emph{type predicate} for which @code{@var{argN}} +must return @code{#t}. + +@item @code{@var{@dots{}music@dots{}}} +@tab normal LilyPond input, using @code{$} to reference arguments +(eg. @samp{$arg1}). +@end multitable + + +The @code{parser} and @code{location} arguments are mandatory, and +are used in some advanced situations as described in the +@q{Extending} manual (see @rextend{Music functions}). For +substitution functions, just be sure to include them. + +The list of type predicates is also required. Some of the most +common type predicates used in music functions are: + +@example +boolean? +cheap-list? @emph{(use instead of }@q{list?}@emph{ for faster processing)} +ly:music? +markup? +number? +pair? +string? +symbol? +@end example + +@noindent +For a list of available type predicates, see +@ref{Predefined type predicates}. User-defined type predicates +are also allowed. + + +@seealso + +Notation Reference: +@ref{Predefined type predicates}. + +Extending: +@rextend{Music functions}. + +Installed Files: +@file{lily/music-scheme.cc}, +@file{scm/c++.scm}, +@file{scm/lily.scm}. + + +@node Substitution function examples +@subsection Substitution function examples + +This section introduces some substitution function examples. +These are not intended to be exhaustive, but rather to demonstrate +some of the possibilities of simple substitution functions. + +In the first example, a function is defined that simplifies +setting the padding of a TextScript: + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function + (parser location padding) + (number?) + #{ + \once \override TextScript #'padding = $padding + #}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + +In addition to numbers, we can use music expressions such +as notes for arguments to music functions: + +@c TODO: use a better example (the music argument is redundant). + +@lilypond[quote,verbatim,ragged-right] +custosNote = +#(define-music-function + (parser location note) + (ly:music?) + #{ + \once \override Voice.NoteHead #'stencil = + #ly:text-interface::print + \once \override Voice.NoteHead #'text = + \markup \musicglyph #"custodes.mensural.u0" + \once \override Voice.Stem #'stencil = ##f + $note + #}) + +\relative c' { c4 d e f \custosNote g } +@end lilypond + +Substitution functions with multiple arguments can be defined: + +@lilypond[quote,verbatim,ragged-right] +tempoPadded = +#(define-music-function + (parser location padding tempotext) + (number? string?) + #{ + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } + #}) + +\relative c'' { + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 +} +@end lilypond + +@c TODO: add appropriate @@ref's here. diff --git a/Documentation/notation/cheatsheet.itely b/Documentation/notation/cheatsheet.itely new file mode 100644 index 0000000000..c66a87631b --- /dev/null +++ b/Documentation/notation/cheatsheet.itely @@ -0,0 +1,300 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@c TODO: add tablature. + +@node Cheat sheet +@appendix Cheat sheet + + +@multitable @columnfractions .35 .3 .35 + +@item @b{Syntax} +@tab @b{Description} +@tab @b{Example} + +@item @code{1 2 8 16} +@tab durations +@tab +@lilypond[relative=2,notime] +\set Staff.autoBeaming = ##f +\override Staff.Clef #'break-visibility = #all-invisible +c1 c2 c8 c16 +@end lilypond + +@item @code{c4. c4..} +@tab augmentation dots +@tab +@lilypond[relative=2,notime] +\override Staff.Clef #'break-visibility = #all-invisible +c4. c4.. +@end lilypond + +@item @code{c d e f g a b } +@tab scale +@tab +@lilypond[relative=1,notime] +c d e f g a b +@end lilypond + +@item @code{fis bes} +@tab alteration +@tab +@lilypond[relative=1,notime] +fis bes +@end lilypond + +@item @code{\clef treble \clef bass } +@tab clefs +@tab +@lilypond[relative=1,notime] +\clef treble +s4_" " +\clef bass +s4_" " +@end lilypond + +@item @code{\time 3/4 \time 4/4 } +@tab time signature +@tab +@lilypond[relative=1] +\override Staff.Clef #'stencil = #empty-stencil +\time 3/4 +s4_" " +\time 4/4 +s16_" " +@end lilypond + + +@item @code{r4 r8} +@tab rest +@tab +@lilypond[relative=2,notime] +\override Staff.Clef #'break-visibility = #all-invisible +r4 r8 +@end lilypond + +@item @code{d ~ d} +@tab tie +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +d ~ d +@end lilypond + +@item @code{\key es \major } +@tab key signature +@tab +@lilypond[notime,relative=1] +\clef treble +\key es \major +\hideNotes +c128 +@end lilypond + +@item @var{note}@code{'} +@tab raise octave +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +a a' +@end lilypond + +@item @var{note}@code{,} +@tab lower octave +@tab +@lilypond[relative=2,notime] +\set Score.timing = ##f +\set Staff.autoBeaming = ##f +c c, +@end lilypond + + +@item @code{c( d e)} +@tab slur +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c( d e) +@end lilypond + + +@item @code{c\( c( d) e\)} +@tab phrasing slur +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +c\( c( d) e\) +@end lilypond + + +@item @code{a8[ b]} +@tab beam +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a8-[ b-] +@end lilypond + + +@item @code{<< \new Staff ... >>} +@tab more staves +@tab +@lilypond[relative=1] +<< \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } + \new Staff { + \set Staff.implicitTimeSignatureVisibility = #all-invisible + c1 + } >> +@end lilypond + + +@item @code{c-> c-.} +@tab articulations +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c-> c-. +@end lilypond + + +@item @code{c2\mf c\sfz} +@tab dynamics +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +c2\mf c\sfz +@end lilypond + + +@item @code{a\< a a\!} +@tab crescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\< a a\! +@end lilypond + +@item @code{a\> a a\!} +@tab decrescendo +@tab +@lilypond[relative=2] +\set Score.timing = ##f +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\set Staff.autoBeaming = ##f +a\> a a\! +@end lilypond + + +@item @code{< >} +@tab chord +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible + +@end lilypond + + +@item @code{\partial 8} +@tab pickup / upbeat +@tab +@lilypond[relative=2] +\partial 8 +f8 c2 d e +@end lilypond + + +@item @code{\times 2/3 @{f g a@}} +@tab triplets +@tab +@lilypond[relative=1] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\times 2/3 { f8 g a } +@end lilypond + + +@item @code{\grace} +@tab grace notes +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Voice { \grace b16 c4 } +@end lilypond + +@item @code{\lyricmode @{ twinkle @}} +@tab entering lyrics +@tab +twinkle + + +@item @code{\new Lyrics} +@tab printing lyrics +@tab +@lilypond[relative=1] +\new Lyrics \lyricmode { twinkle } +@end lilypond + +@item @code{twin -- kle} +@tab lyric hyphen +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +<< + { g'1 g } + \new Lyrics \lyricsto "" { twin -- kle } +>> +@end lilypond + +@item @code{\chordmode @{ c:dim f:maj7 @}} +@tab chords +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\chordmode { c:dim f:maj7 } +@end lilypond + +@item @code{\context ChordNames} +@tab printing chord names +@tab +@lilypond[relative=2] +\chords { c:dim f:maj7 } +@end lilypond + +@item @code{<<@{e f@} \\ @{c d@}>>} +@tab polyphony +@tab +@lilypond[relative=2] +\set Staff.implicitTimeSignatureVisibility = #all-invisible +\context Staff <<{e f} \\ {c d}>> +@end lilypond + + +@item @code{s4 s8 s16} +@tab spacer rests +@tab + +@end multitable + diff --git a/Documentation/notation/chords.itely b/Documentation/notation/chords.itely new file mode 100644 index 0000000000..1109075d66 --- /dev/null +++ b/Documentation/notation/chords.itely @@ -0,0 +1,1182 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@node Chord notation +@section Chord notation + +@lilypondfile[quote]{chords-headword.ly} + +Chords can be entered either as normal notes or in chord mode and displayed +using a variety of traditional European chord naming conventions. Chord +names and figured bass notation can also be displayed. + +@menu +* Chord mode:: +* Displaying chords:: +* Figured bass:: +@end menu + + +@node Chord mode +@subsection Chord mode + +@cindex chord chords + +Chord mode is used to enter chords using an indicator of the chord +structure, rather than the chord pitches. + +@menu +* Chord mode overview:: +* Common chords:: +* Extended and altered chords:: +@end menu + +@node Chord mode overview +@unnumberedsubsubsec Chord mode overview + +@cindex chord names +@cindex chord mode + +Chords can be entered as simultaneous music, as discussed in +@ref{Chorded notes}. + +Chords can also be entered in @qq{chord mode}, which is an input +mode that focuses on the structures of chords in traditional +European music, rather than on specific pitches. This is +convenient for those who are familiar with using chord names to +describe chords. More information on different input modes can be +found at @ref{Input modes}. + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c1 g a g c } +@end lilypond + +Chords entered using chord mode are music elements, and can be +transposed just like chords entered using simultaneous music. +@code{\chordmode} is absolute, as @code{\relative} has no effect +on @code{chordmode} blocks. However, in @code{\chordmode} the +absolute pitches are one octave higher than in note mode. + +Chord mode and note mode can be mixed in sequential music: + +@lilypond[verbatim,quote,ragged-right,relative=1] +2 +\chordmode { c2 f } +2 +\chordmode { f2 g } +@end lilypond + + +@seealso +Music Glossary: +@rglos{chord}. + +Notation Reference: +@ref{Chorded notes}, +@ref{Input modes}. + +Snippets: +@rlsr{Chords}. + + +@knownissues + +Predefined shorthands for articulations and ornaments cannot be used +on notes in chord mode, see @ref{Articulations and ornamentations}. + +When chord mode and note mode are mixed in sequential music, and +chord mode comes first, the note mode will create a new @code{Staff} +context: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\chordmode { c2 f } +2 +@end lilypond + +@noindent +To avoid this behavior, explicitly create the @code{Staff} context: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\new Staff { + \chordmode { c2 f } + 2 +} +@end lilypond + +@node Common chords +@unnumberedsubsubsec Common chords + +@cindex triads +@cindex seventh chords +@cindex root of chord +@cindex modifiers, in chords. +@cindex chord quality + +Major triads are entered by including the root and an +optional duration: + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c2 f4 g } +@end lilypond + +Minor, augmented, and diminished triads are entered by placing +@code{:} and a quality modifier string after the duration: + +@lilypond[verbatim,quote,ragged-right] +\chordmode { c2:m f4:aug g:dim } +@end lilypond + +Seventh chords can be created: + +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } +@end lilypond + +@funindex aug +@funindex dim +@funindex maj +@funindex m + +The table below shows the actions of the quality modifiers on +triads and seventh chords. The default seventh step added to +chords is a minor or flatted seventh, which makes the dominant +seventh the basic seventh chord. All alterations are relative to +the dominant seventh. A more complete table of modifier usage +is found at @ref{Common chord modifiers}. + +@c @table @code +@multitable @columnfractions .2 .4 .3 + +@item +@b{Modifier} +@tab +@b{Action} +@tab +@b{Example} + +@item +None +@tab +The default action; produces a major triad. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1 +} +@end lilypond + +@item +m, m7 +@tab +The minor chord. This modifier lowers the 3rd. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:m c:m7 +} +@end lilypond + + +@item +dim, dim7 +@tab +The diminished chord. This modifier lowers the 3rd, 5th and (if +present) the 7th step. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:dim c:dim7 +} +@end lilypond + +@item +aug +@tab +The augmented chord. This modifier raises the 5th step. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:aug +} +@end lilypond + +@item +maj, maj7 +@tab +The major 7th chord. This modifier adds a raised 7th step. The +@code{7} following @code{maj} is optional. Do NOT use this modifier +to create a major triad. +@tab +@lilypond[line-width=4\cm, noragged-right] +\chordmode { + \override Staff.TimeSignature #'stencil = ##f + c1:maj c:maj7 +} +@end lilypond + +@end multitable + + +@seealso +Notation Reference: +@ref{Common chord modifiers}, +@ref{Extended and altered chords}. + +Snippets: +@rlsr{Chords}. + + +@knownissues +Only one quality modifier should be used per chord, typically on the +highest step present in the chord. Chords with more than quality +modifier will be parsed without an error or warning, but the results +are unpredictable. Chords that cannot be achieved with a single +quality modifier should be altered by individual pitches, as described +in @ref{Extended and altered chords}. + + +@node Extended and altered chords +@unnumberedsubsubsec Extended and altered chords + +@cindex extended chords +@cindex altered chords + +Chord structures of arbitrary complexity can be created in chord +mode. The modifier string can be used to extend a chord, add or +remove chord steps, raise or lower chord steps, and add a bass note +or create an inversion. + +The first number following the @code{:} is taken to be the extent +of the chord. The chord is constructed by sequentially adding +thirds to the root until the specified number has been reached. +Note that the seventh step added as part of an extended chord will be the +minor or flatted seventh, not the major seventh. +If the extent is not a third (e.g., 6), thirds are added up to the +highest third below the extent, and then the step of the extent is +added. The largest possible value for the extent is 13. Any +larger value is interpreted as 13. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:2 c:3 c:4 c:5 + c1:6 c:7 c:8 c:9 + c1:10 c:11 c:12 c:13 + c1:14 +} +@end lilypond + +@noindent +Note that both @code{c:5} and @code{c} produce a C major triad. + +Since an unaltered 11 does not sound good when combined with an +unaltered 13, the 11 is removed from a @code{:13} chord (unless it +is added explicitly). + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:13 c:13.11 c:m13 +} +@end lilypond + +@cindex additions, in chords + +Individual steps can be added to a chord. Additions follow the +extent and are prefixed by a dot (@code{.}). The basic seventh +step added to a chord is the minor or flatted seventh, rather than +the major seventh. + +@lilypond[quote,verbatim] +\chordmode { + c1:5.6 c:3.7.8 c:3.6.13 +} +@end lilypond + +Added steps can be as high as desired. + +@lilypond[quote,verbatim] +\chordmode { + c4:5.15 c:5.20 c:5.25 c:5.30 +} +@end lilypond + +@cindex chord steps, altering + +Added chord steps can be altered by suffixing a @code{-} or @code{+} +sign to the number. To alter a step that is automatically included +as part of the basic chord structure, add it as an altered step. + +@lilypond[quote,verbatim] +\chordmode { + c1:7+ c:5+.3- c:3-.5-.7- +} +@end lilypond + +@cindex removals, in chords + +@funindex ^ + +Following any steps to be added, a series of steps to be removed +is introduced in a modifier string with a prefix of @code{^}. +If more than one step is to be removed, the steps to be +removed are separated by @code{.} following the +initial @code{^}. + +@lilypond[quote,verbatim] +\chordmode { + c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 +} +@end lilypond + +@funindex sus + +The modifier @code{sus} can be added to the modifier string to +create suspended chords. This removes the 3rd step from the chord. +Append either @code{2} or @code{4} to add the 2nd or 4th step to the +chord. @code{sus} is equivalent to @code{^3}; @code{sus4} is +equivalent to @code{.4^3}. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1:sus c:sus2 c:sus4 c:5.4^3 +} +@end lilypond + +@funindex / +@cindex chord inversions +@cindex bass note, for chords + +Inversions (putting a pitch other than the root on the bottom of the +chord) and added bass notes can be specified by appending +@code{/}@var{pitch} to the chord. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1 c/g c/f +} +@end lilypond + +@funindex /+ + +A bass note that is part of the chord can be added, instead of +moved as part of an inversion, by using @code{/+}@var{pitch}. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c1 c/g c/+g +} +@end lilypond + +Chord modifiers that can be used to produce a variety of +standard chords are shown in +@ref{Common chord modifiers}. + + +@seealso +Notation Reference: +@ref{Common chord modifiers}. + +Snippets: +@rlsr{Chords}. + + +@knownissues + +Each step can only be present in a chord once. The following +simply produces the augmented chord, since @code{5+} is +interpreted last. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { c1:5.5-.5+ } +@end lilypond + +Only the second inversion can be created by adding a bass +note. The first inversion requires changing the root of +the chord. + +@lilypond[quote,ragged-right,verbatim] +\chordmode { + c'1: c':/g e:6-3-^5 e:m6-^5 +} +@end lilypond + +@node Displaying chords +@subsection Displaying chords + +Chords can be displayed by name, in addition to the standard display +as notes on a staff. + +@menu +* Printing chord names:: +* Customizing chord names:: +@end menu + +@node Printing chord names +@unnumberedsubsubsec Printing chord names + +@cindex printing chord names +@cindex chord names +@cindex chords + +Chord names are printed in the @code{ChordNames} context: + +@lilypond[verbatim,quote,ragged-right] +\new ChordNames { + \chordmode { + c2 f4. g8 + } +} +@end lilypond + +Chords can be entered as simultaneous notes or through the use of +chord mode. The displayed chord name will be the same, regardless +of the mode of entry, unless there are inversions or added bass notes: + +@lilypond[verbatim,quote,relative=1] +<< + \new ChordNames { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } + { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } + } +>> +@end lilypond + +@cindex no chord symbol +@cindex N.C. symbol +@cindex indicating No Chord in ChordNames + +Rests passed to a @code{ChordNames} context will cause the +@code{noChordSymbol} markup to be displayed. + +@lilypond[verbatim, quote, relative=1] +<< + \new ChordNames \chordmode { + c1 + r1 + g1 + c1 + } + \chordmode { + c1 + r1 + g1 + c1 + } +>> +@end lilypond + +@funindex{\chords} + +@code{\chords @{ ... @}} is a shortcut notation for +@code{\new ChordNames @{ \chordmode @{ ... @} @}}. + +@lilypond[verbatim,quote,ragged-right] +\chords { + c2 f4.:m g8:maj7 +} +@end lilypond + +@lilypond[verbatim,quote,ragged-right] +\new ChordNames { + \chordmode { + c2 f4.:m g8:maj7 + } +} +@end lilypond + +@snippets + +@c Keep index entries with following snippet +@cindex chords, suppressing repeated +@funindex chordChanges + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{showing-chords-at-changes.ly} + +@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +@c {adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + + +@seealso +Music Glossary: +@rglos{chord}. + +Notation Reference: +@ref{Writing music in parallel}. + +Snippets: +@rlsr{Chords}. + +Internals Reference: +@rinternals{ChordNames}, +@rinternals{ChordName}, +@rinternals{Chord_name_engraver}, +@rinternals{Volta_engraver}, +@rinternals{Bar_engraver}. + + +@knownissues + +Chords containing inversions or altered bass notes are not named +properly if entered using simultaneous music. + + +@node Customizing chord names +@unnumberedsubsubsec Customizing chord names + +@cindex customizing chord names + +There is no unique system for naming chords. Different musical +traditions use different names for the same set of chords. There +are also different symbols displayed for a given chord name. The +names and symbols displayed for chord names are customizable. + +@cindex jazz chords +@cindex chords, jazz + +The basic chord name layout is a system for Jazz music, proposed +by Klaus Ignatzek (see @ressay{Literature list}). The chord naming +system can be modified as described below. An alternate jazz +chord system has been developed using these modifications. +The Ignatzek and alternate +Jazz notation are shown on the chart in @ref{Chord name chart}. + +@c TODO -- Change this so we don't have a non-verbatim example. +@c Make short example in docs, then move longer example to +@c appendix, where the length of the snippet won't matter. + +In addition to the different naming systems, different note names +are used for the root in different languages. The predefined +variables @code{\germanChords}, @code{\semiGermanChords}, +@code{\italianChords} and @code{\frenchChords} set these variables. +The effect is demonstrated here: + +@lilypondfile[ragged-right]{chord-names-languages.ly} + + +@funindex chordNameLowercaseMinor + +German songbooks may indicate minor chords as lowercase letters, +without any @var{m} suffix. This can be obtained by setting the +@code{chordNameLowercaseMinor} property: + +@lilypond[verbatim,quote,ragged-right] +\chords { + \set chordNameLowercaseMinor = ##t + c2 d:m e:m f +} +@end lilypond + +If none of the existing settings give the desired output, the chord +name display can be tuned through the following properties. + +@table @code + +@funindex chordRootNamer + +@item chordRootNamer + +The chord name is usually printed as a letter for the root with an +optional alteration. The transformation from pitch to letter is +done by this function. Special note names (for example, the German +@q{H} for a B-chord) can be produced by storing a new function in +this property. + +@funindex majorSevenSymbol + +@item majorSevenSymbol + +This property contains the markup object used to follow the output +of @code{chordRootNamer} to identify a major 7 chord. Predefined +options are @code{whiteTriangleMarkup} and +@code{blackTriangleMarkup}. + +@funindex chordNoteNamer + +@item chordNoteNamer + +When the chord name contains additional pitches other than the root +(e.g., an added bass note), this function is used to print the +additional pitch. By default the pitch is printed using +@code{chordRootNamer}. The @code{chordNoteNamer} property can be set +to a specialized function to change this behavior. For example, the +bass note can be printed in lower case. + +@funindex chordNameSeparator + +@item chordNameSeparator + +Different parts of a chord name are normally separated by a slash. +By setting @code{chordNameSeparator}, you can use any desired markup +for a separator. + +@funindex chordNameExceptions + +@item chordNameExceptions + +This property is a list of pairs. The first item in each pair +is a set of pitches used to identify the steps present in the chord. +The second item is a markup that will follow the @code{chordRootNamer} +output to create the chord name. + +@funindex chordPrefixSpacer +@item chordPrefixSpacer + +The @q{m} for minor chords is usually printed immediately to the +right of the root of the chord. A spacer can be placed between +the root and @q{m} by setting @code{chordPrefixSpacer}. +The spacer is not used when the root is altered. + +@end table + + +@predefined +@funindex major seven symbols +@code{\whiteTriangleMarkup}, +@code{\blackTriangleMarkup}, +@funindex \germanChords +@code{\germanChords}, +@funindex \semiGermanChords +@code{\semiGermanChords}, +@funindex \italianChords +@code{\italianChords}, +@funindex \frenchChords +@code{\frenchChords}. +@endpredefined + + +@snippets + +@cindex exceptions, chord names. +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-exceptions.ly} + +@c TODO - tweak snippet to use \blackTriangleMarkup as well +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-name-major7.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-bar-lines-to-chordnames-context.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{volta-below-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-chord-separator.ly} + + +@seealso +Notation Reference: +@ref{Chord name chart}, +@ref{Common chord modifiers}. + +Essay on automated music engraving: +@ressay{Literature list}. + +Installed Files: +@file{scm/chords-ignatzek.scm}, +@file{scm/chord-entry.scm}, +@file{ly/chord-modifier-init.ly}. + +Snippets: +@rlsr{Chords}. + +@c Internals Reference: +@c @r internals{}. + + +@knownissues + +Chord names are determined from both the pitches that are present +in the chord and the information on the chord structure that may +have been entered in @code{\chordmode}. If the simultaneous pitches +method of entering chords is used, undesired names result from +inversions or bass notes. + +@lilypond[quote,ragged-right,verbatim] +myChords = \relative c' { + \chordmode { c1 c/g c/f } + 1 +} +<< + \new ChordNames { \myChords } + \new Staff { \myChords } +>> +@end lilypond + + +@node Figured bass +@subsection Figured bass + +@lilypondfile[quote]{figured-bass-headword.ly} + +Figured bass notation can be displayed. + +@menu +* Introduction to figured bass:: +* Entering figured bass:: +* Displaying figured bass:: +@end menu + +@node Introduction to figured bass +@unnumberedsubsubsec Introduction to figured bass + +@cindex Basso continuo +@cindex Thorough bass +@cindex Figured bass +@cindex Bass, thorough +@cindex Bass, figured + +@c TODO: musicological blurb about FB + + +LilyPond has support for figured bass, also called thorough bass +or basso continuo: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice { \clef bass dis4 c d ais g fis} + \new FiguredBass { + \figuremode { + < 6 >4 < 7\+ >8 < 6+ [_!] > + < 6 >4 <6 5 [3+] > + < _ >4 < 6 5/>4 + } + } +>> +@end lilypond + +The support for figured bass consists of two parts: there is an +input mode, introduced by @code{\figuremode}, that accepts +entry of bass figures, and there is a context named +@code{FiguredBass} that takes care of displaying +@code{BassFigure} objects. Figured bass can also be displayed +in @code{Staff} contexts. + +@code{\figures@{ ... @}} is a shortcut notation for +@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. + + +Although the support for figured bass may superficially resemble chord +support, it is much simpler. @code{\figuremode} mode simply +stores the figures and the @code{FiguredBass} context prints them +as entered. There is no conversion to pitches. + +@ignore +Figures are created as markup texts. Any of the standard markup +properties can be used to modify the display of figures. For +example, the vertical spacing of the figures may be set with +@code{baseline-skip}. +@end ignore + + +@seealso +Music Glossary: +@rglos{figured bass}. + +Snippets: +@rlsr{Chords}. + + +@node Entering figured bass +@unnumberedsubsubsec Entering figured bass + +@code{\figuremode} is used to switch the input mode to figure mode. +More information on different input modes can be +found at @ref{Input modes}. + +In figure mode, a group of bass figures is delimited by +@code{<} and @code{>}. The duration is entered after the @code{>}. + +@lilypond[verbatim,quote,ragged-right] +\new FiguredBass { + \figuremode { + <6 4>2 + } +} +@end lilypond + + +Accidentals (including naturals) can be added to figures: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +Augmented and diminished steps can be indicated: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +A backward slash through a figure (typically used for raised +sixth steps) can be created: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <6> <6\\> +} +@end lilypond + +Vertical spaces and brackets can be included in figures: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <[12 _!] 8 [6 4]> +} +@end lilypond + +Any text markup can be inserted as a figure: + +@lilypond[verbatim,quote,ragged-right] +\figures { + <\markup { \tiny \number 6 \super (1) } 5> +} +@end lilypond + +@c NOTE: We need to include notes any time we use extenders to +@c avoid extraneous staff creation due to Staff.use... in +@c \bassFigureExtendersOn + +Continuation lines can be used to indicate repeated figures: + +@lilypond[verbatim,quote,ragged-right] +<< + { + \clef bass + e4 d c b, + e4 d c b, + } + \figures { + \bassFigureExtendersOn + <6 4>4 <6 3> <7 3> <7 3> + \bassFigureExtendersOff + <6 4>4 <6 3> <7 3> <7 3> + } +>> +@end lilypond + +@noindent +In this case, the extender lines replace existing figures, +unless the continuation lines have been explicitly terminated. + +@lilypond[verbatim,quote,ragged-right] +<< + \figures { + \bassFigureExtendersOn + <6 4>4 <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d4 d c c + } +>> +@end lilypond + +The table below summarizes the figure modifiers available. + +@multitable @columnfractions .1 .5 .4 + +@item +@b{Modifier} +@tab +@b{Purpose} +@tab +@b{Example} + +@item ++, -, ! +@tab +Accidentals +@tab +@lilypond[line-width=4\cm] +\figures { + <7! 6+ 4-> <5++> <3--> +} +@end lilypond + +@item +\+, / +@tab +Augmented and diminished steps +@tab +@lilypond[line-width=4\cm] +\figures { + <6\+ 5/> <7/> +} +@end lilypond + +@item +\\ +@tab +Raised sixth step +@tab +@lilypond[line-width=4\cm] +\figures { + <6\\> +} +@end lilypond + +@item +\! +@tab +End of continuation line +@tab +@lilypond[line-width=4\cm] +<< + \figures { + \bassFigureExtendersOn + <6 4> <6 4> <6\! 4\!> <6 4> + } + { + \clef bass + d d c c + } +>> +@end lilypond + +@end multitable + + +@predefined +@cindex figured bass extender lines +@code{\bassFigureExtendersOn}, +@code{\bassFigureExtendersOff}. +@endpredefined + + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-positions-of-figured-bass-alterations.ly} + + +@seealso +@c Music Glossary: +@c @rglos{}. +@c +@c Learning Manual: +@c @rlearning{}. +@c +@c Notation Reference: +@c @ref{}. +@c +@c Application Usage: +@c @rprogram{}. +@c +@c Installed Files: +@c @file{}. +@c +Snippets: +@rlsr{Chords}. + +Internals Reference: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + + +@c @knownissues + + +@node Displaying figured bass +@unnumberedsubsubsec Displaying figured bass + +Figured bass can be displayed using the @code{FiguredBass} context, +or in most staff contexts. + +When displayed in a @code{FiguredBass} context, the vertical location +of the figures is independent of the notes on the staff. + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c'' { + c4 c'8 r8 c,4 c' + } + \new FiguredBass { + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + } +>> +@end lilypond + +@noindent +In the example above, the @code{FiguredBass} context must be +explicitly instantiated to avoid creating a second (empty) staff. + + +Figured bass can also be added to @code{Staff} contexts +directly. In this case, the vertical position of the +figures is adjusted automatically. + +@lilypond[verbatim,ragged-right,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + + +When added in a @code{Staff} context, figured bass can be displayed above +or below the staff. + +@lilypond[verbatim,ragged-right,quote] +<< + \new Staff = myStaff + \figuremode { + <4>4 <10 6>8 s8 + \bassFigureStaffAlignmentDown + <6 4>4 <6 4> + } + %% Put notes on same Staff as figures + \context Staff = myStaff + { + \clef bass + c4 c'8 r8 c4 c' + } +>> +@end lilypond + + +@predefined +@cindex figured bass alignment +@code{\bassFigureStaffAlignmentDown}, +@code{\bassFigureStaffAlignmentUp}, +@code{\bassFigureStaffAlignmentNeutral}. +@endpredefined + + +@c @snippets + + +@seealso +@c Music Glossary: +@c @rglos{}. +@c +@c Learning Manual: +@c @rlearning{}. +@c +@c Notation Reference: +@c @ref{}. +@c +@c Application Usage: +@c @rprogram{}. +@c +@c Installed Files: +@c @file{}. +@c +Snippets: +@rlsr{Chords}. + +Internals Reference: +@rinternals{BassFigure}, +@rinternals{BassFigureAlignment}, +@rinternals{BassFigureLine}, +@rinternals{BassFigureBracket}, +@rinternals{BassFigureContinuation}, +@rinternals{FiguredBass}. + + +@knownissues + +To ensure that continuation lines work properly, it is +safest to use the same rhythm in the figure line as in +the bass line. + +@lilypond[verbatim,ragged-right,quote] +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are correct here, with the same rhythm as the bass + \repeat unfold 4 { <6 4->16. <6 4->32 } + <5>8. r16 <6>8 <6\! 5-> + } +>> +<< + { + \clef bass + \repeat unfold 4 { f16. g32 } f8. es16 d8 es + } + \figures { + \bassFigureExtendersOn + % The extenders are incorrect here, even though the timing is the same + <6 4->4 <6 4->4 + <5>8. r16 <6>8 <6\! 5-> + } +>> +@end lilypond + +When using extender lines, adjacent figures with the same number in +a different figure location can cause the figure positions to invert. + +@lilypond[verbatim,ragged-right,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + \bassFigureExtendersOn + <6 5>4 <5\! 4> < 5 _!> <6> + } +>> +@end lilypond + +To avoid this problem, simply turn on extenders after the figure that +begins the extender line and turn them off at the end of the extender line. + +@lilypond[verbatim,ragged-right,quote,relative=1] +<< + { fis4 g g, e' } + \figures { + <6 5>4 <5 4> + \bassFigureExtendersOn + < 5 _!>4 <6> + \bassFigureExtendersOff + } +>> +@end lilypond + diff --git a/Documentation/notation/contemporary.itely b/Documentation/notation/contemporary.itely new file mode 100644 index 0000000000..49f5acb412 --- /dev/null +++ b/Documentation/notation/contemporary.itely @@ -0,0 +1,226 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@node Contemporary music +@section Contemporary music + +From the beginning of the 20th Century there has been a massive +expansion of compositional style and technique. New harmonic +and rhythmic developments, an expansion of the pitch spectrum +and the development of a wide range of new instrumental +techniques have been accompanied by a parallel evolution and +expansion of musical notation. The purpose of this section is +to provide references and information relevant to working with +these new notational techniques. + +@menu +* Pitch and harmony in contemporary music:: +* Contemporary approaches to rhythm:: +* Graphical notation:: +* Contemporary scoring techniques:: +* New instrumental techniques:: +* Further reading and scores of interest:: +@end menu + + +@node Pitch and harmony in contemporary music +@subsection Pitch and harmony in contemporary music + +This section highlights issues that are relevant to notating +pitch and harmony in contemporary music. + +@menu +* References for pitch and harmony in contemporary music:: +* Microtonal notation:: +* Contemporary key signatures and harmony:: +@end menu + + +@node References for pitch and harmony in contemporary music +@unnumberedsubsubsec References for pitch and harmony in contemporary music + +@itemize +@item Standard quarter-tone notation is addressed in +@ref{Note names in other languages}. + +@item Non-standard key signatures are addressed in +@ref{Key signature}. + +@item Contemporary practises in displaying accidentals are +addressed in @ref{Automatic accidentals}. + +@end itemize + + +@node Microtonal notation +@unnumberedsubsubsec Microtonal notation + +@ignore + Discussion of microtones other than quarter-tones, + alternative notations (arrows, slash-flats), etc. +@end ignore + + +@node Contemporary key signatures and harmony +@unnumberedsubsubsec Contemporary key signatures and harmony + +@ignore + Discussion of contemporary key signatures: + non-standard, polytonality, etc. +@end ignore + + +@node Contemporary approaches to rhythm +@subsection Contemporary approaches to rhythm + +This section highlights issues that are relevant to the +notation of rhythm in contemporary music. + +@menu +* References for contemporary approaches to rhythm:: +* Tuplets in contemporary music:: +* Contemporary time signatures:: +* Extended polymetric notation:: +* Beams in contemporary music:: +* Bar lines in contemporary music:: +@end menu + + +@node References for contemporary approaches to rhythm +@unnumberedsubsubsec References for contemporary approaches to rhythm + +@itemize +@item Compound time signatures are addressed in @ref{Time signature}. + +@item Basic polymetric notation is addressed in +@ref{Polymetric notation}. + +@item Feathered beams are addressed in @ref{Feathered beams}. + +@item Mensurstriche bar lines (bar lines between staves only) are +addressed in @ref{Grouping staves}. + +@end itemize + + +@node Tuplets in contemporary music +@unnumberedsubsubsec Tuplets in contemporary music + +@ignore + Extended discussion of modern tuplets, including + non-standard ratios, nested tuplets and customising + the appearance of tuplets (ratios, note values etc.) + Also how to provide an ossia RhythmicStaff to help + players break down a complicated tuplet. +@end ignore + + +@node Contemporary time signatures +@unnumberedsubsubsec Contemporary time signatures + +@ignore + Extended discussion of compound time signatures + including Graham P.'s work; non-standard time + signatures such as 7/10, 5/6; alternative + notations such as Orff-esque 4/note, placing a + single time signature across multiple staves, or + placing time signatures at the top of StaffGroups + or systems rather than in the stave. +@end ignore + + +@node Extended polymetric notation +@unnumberedsubsubsec Extended polymetric notation + +@ignore + Extended examples e.g. different instruments + or ensembles with independent tempi +@end ignore + + +@node Beams in contemporary music +@unnumberedsubsubsec Beams in contemporary music + +@ignore + Beaming practises, stemlets, Boulez-esque displaying + of beamed notes with flags +@end ignore + + +@node Bar lines in contemporary music +@unnumberedsubsubsec Bar lines in contemporary music + +@ignore + Mensurstriche barlines, tick barlines, etc. +@end ignore + + +@node Graphical notation +@subsection Graphical notation + + +@node Contemporary scoring techniques +@subsection Contemporary scoring techniques + + +@node New instrumental techniques +@subsection New instrumental techniques + + +@node Further reading and scores of interest +@subsection Further reading and scores of interest + +This section suggests books, musical examples and other +resources useful in studying contemporary musical notation. + +@menu +* Books and articles on contemporary musical notation:: +* Scores and musical examples:: +@end menu + + +@node Books and articles on contemporary musical notation +@unnumberedsubsubsec Books and articles on contemporary musical notation + +@itemize +@item +@emph{Music Notation in the Twentieth Century: A Practical Guidebook} +by Kurt Stone [W. W. Norton, 1980] + +@item +@emph{Music Notation: A Manual of Modern Practice} by Gardner Read +[Taplinger, 1979] + +@item +@emph{Instrumentation and Orchestration} by Alfred Blatter [Schirmer, +2nd ed. 1997] + +@end itemize + + +@node Scores and musical examples +@unnumberedsubsubsec Scores and musical examples + +@ignore + Rough list of composers whose work could be included + (in alphabetical order, perhaps with suggested work): + + Pierre Boulez (Le Marteau Sans Maître?) + John Cage (Freeman Etudes?) + George Crumb (Black Angels?) + Brian Ferneyhough (Transit? Time & Motion Studies?) + Ben Johnston (extended just intonation example) + György Ligeti (several, including Hamburg Concerto) + Krzysztof Penderecki (Threnody to the Victims of Hiroshima?) + Karlheinz Stockhausen (Gruppen?) +@end ignore + diff --git a/Documentation/notation/editorial.itely b/Documentation/notation/editorial.itely new file mode 100644 index 0000000000..a003f946f1 --- /dev/null +++ b/Documentation/notation/editorial.itely @@ -0,0 +1,714 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Editorial annotations +@section Editorial annotations + +@lilypondfile[quote]{editorial-headword.ly} + +This section discusses the various ways to change the appearance of +notes and add analysis or educational emphasis. + +@menu +* Inside the staff:: +* Outside the staff:: +@end menu + + +@node Inside the staff +@subsection Inside the staff + +This section discusses how to add emphasis to elements that are +inside the staff. + +@menu +* Selecting notation font size:: +* Fingering instructions:: +* Hidden notes:: +* Coloring objects:: +* Parentheses:: +* Stems:: +@end menu + +@node Selecting notation font size +@unnumberedsubsubsec Selecting notation font size + +@cindex font size (notation) scaling +@cindex font size (notation) +@cindex selecting font size (notation) +@cindex notation font size +@cindex note heads + +@funindex fontSize +@funindex font-size +@funindex magstep +@funindex \huge +@funindex \large +@funindex \normalsize +@funindex \small +@funindex \tiny +@funindex \teeny +@funindex huge +@funindex large +@funindex normalsize +@funindex small +@funindex tiny +@funindex teeny + +The font size of notation elements may be altered. It does not +change the size of variable symbols, such as beams or slurs. + +@warning{For font sizes of text, see +@ref{Selecting font and font size}.} + +@lilypond[verbatim,quote,relative=2] +\huge +c4.-> d8---3 +\large +c4.-> d8---3 +\normalsize +c4.-> d8---3 +\small +c4.-> d8---3 +\tiny +c4.-> d8---3 +\teeny +c4.-> d8---3 +@end lilypond + +Internally, this sets the @code{fontSize} property. This in turn +causes the @code{font-size} property to be set in all layout +objects. The value of @code{font-size} is a number indicating the +size relative to the standard size for the current staff height. +Each step up is an increase of approximately 12% of the font size. +Six steps is exactly a factor of two. The Scheme function +@code{magstep} converts a @code{font-size} number to a scaling +factor. The @code{font-size} property can also be set directly, +so that only certain layout objects are affected. + +@lilypond[verbatim,quote,relative=2] +\set fontSize = #3 +c4.-> d8---3 +\override NoteHead #'font-size = #-4 +c4.-> d8---3 +\override Script #'font-size = #2 +c4.-> d8---3 +\override Stem #'font-size = #-5 +c4.-> d8---3 +@end lilypond + +@cindex standard font size (notation) +@cindex font size (notation), standard + +@funindex font-interface +@funindex font-size + +Font size changes are achieved by scaling the design size that is +closest to the desired size. The standard font size (for +@w{@code{font-size = #0}}) depends on the standard staff height. +For a 20pt staff, a 10pt font is selected. + +The @code{font-size} property can only be set on layout objects +that use fonts. These are the ones supporting the +@code{font-interface} layout interface. + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{font-interface}. + + +@node Fingering instructions +@unnumberedsubsubsec Fingering instructions + +@cindex fingering +@cindex finger change + +@funindex \finger +@funindex finger + +Fingering instructions can be entered using +@samp{@var{note}-@var{digit}}: + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 e-3 +@end lilypond + +Markup texts may be used for finger changes. + +@lilypond[verbatim,quote,relative=2] +c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } +@end lilypond + +@cindex thumb-script + +@funindex \thumb +@funindex thumb + +A thumb-script can be added (e.g. cello music) to indicate +that a note should be played with the thumb. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +@cindex fingering chords +@cindex fingering instructions for chords +@cindex chords, fingering + +Fingerings for chords can also be added to individual notes by +adding them after the pitches. + +@lilypond[verbatim,quote,relative=2] +2 +@end lilypond + +Fingering instructions may be manually placed above or below the +staff, see @ref{Direction and placement}. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{avoiding-collisions-with-chord-fingerings.ly} + + +@seealso +Notation Reference: +@ref{Direction and placement}. + +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{FingeringEvent}, +@rinternals{fingering-event}, +@rinternals{Fingering_engraver}, +@rinternals{New_fingering_engraver}, +@rinternals{Fingering}. + +@knownissues +By default, numbers greater than 9 are not supported using +@samp{@var{note}-@var{digit}}. + + +@node Hidden notes +@unnumberedsubsubsec Hidden notes + +@cindex hidden notes +@cindex invisible notes +@cindex transparent notes +@cindex notes, hidden +@cindex notes, invisible +@cindex notes, transparent + +@funindex \hideNotes +@funindex hideNotes +@funindex \unHideNotes +@funindex unHideNotes + +Hidden (or invisible or transparent) notes can be useful in +preparing theory or composition exercises. + +@lilypond[verbatim,quote,relative=2] +c4 d +\hideNotes +e4 f +\unHideNotes +g a +\hideNotes +b +\unHideNotes +c +@end lilypond + +Notation objects which are attached to invisible notes are still +visible. + +@lilypond[verbatim,quote,relative=2] +c4( d) +\hideNotes +e4(\p f)-- +@end lilypond + + +@predefined +@code{\hideNotes}, +@code{\unHideNotes}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{Visibility and color of objects}. + +Notation Reference: +@ref{Invisible rests}, +@ref{Visibility of objects}, +@ref{Hiding staves}. + +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Note_spacing_engraver}, +@rinternals{NoteSpacing}. + + +@node Coloring objects +@unnumberedsubsubsec Coloring objects + +@cindex colored objects +@cindex objects, colored +@cindex colors +@cindex coloring objects +@cindex colored notes +@cindex coloring notes +@cindex notes, colored +@cindex x11 color +@cindex x11-color +@cindex with-color + +@funindex color +@funindex \with-color +@funindex with-color +@funindex x11-color + +Individual objects may be assigned colors. Valid color names +are listed in the @ref{List of colors}. + +@lilypond[verbatim,quote,relative=2] +\override NoteHead #'color = #red +c4 c +\override NoteHead #'color = #(x11-color 'LimeGreen) +d +\override Stem #'color = #blue +e +@end lilypond + + +The full range of colors defined for X11 can be accessed by using +the Scheme function @code{x11-color}. The function takes one +argument; this can be a symbol in the form @code{'@var{FooBar}} or +a string in the form @code{"@var{FooBar}"}. The first form is +quicker to write and is more efficient. However, using the second +form it is possible to access X11 colors by the multi-word form of +its name. + +If @code{x11-color} cannot make sense of the parameter then the +color returned defaults to black. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +gis8 a +\override Beam #'color = #(x11-color "medium turquoise") +gis a +\override Accidental #'color = #(x11-color 'DarkRed) +gis a +\override NoteHead #'color = #(x11-color "LimeGreen") +gis a +% this is deliberate nonsense; note that the stems remain black +\override Stem #'color = #(x11-color 'Boggle) +b2 cis +@end lilypond + +@cindex rgb-color +@cindex color, rgb +@cindex rgb color + +@funindex rgb-color + +Exact RGB colors can be specified using the Scheme function +@code{rgb-color}. + +@lilypond[verbatim,quote,relative=2] +\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) +\set Staff.instrumentName = \markup { + \with-color #(x11-color 'navy) "Clarinet" +} + +\override Stem #'color = #(rgb-color 0 0 0) +gis8 a +\override Stem #'color = #(rgb-color 1 1 1) +gis8 a +\override Stem #'color = #(rgb-color 0 0 0.5) +gis4 a +@end lilypond + + +@seealso +Notation Reference: +@ref{List of colors}, @ref{The +tweak command}. + +Snippets: +@rlsr{Editorial annotations}. + + +@cindex x11 color +@cindex colored notes in chords +@cindex notes, colored in chords +@cindex color in chords + +@funindex x11-color + +@knownissues +An X11 color is not necessarily exactly the same shade as a +similarly named normal color. + +Not all X11 colors are distinguishable in a web browser, i.e., +a web browser might not display a difference between @code{'LimeGreen} +and @code{'ForestGreen}. For web use normal colors are recommended +(i.e., @code{#blue}, @code{#green}, @code{#red}). + + +Notes in a chord cannot be colored with @code{\override}; use +@code{\tweak} instead, see @ref{The tweak command}. + + +@node Parentheses +@unnumberedsubsubsec Parentheses + +@cindex ghost notes +@cindex notes, ghost +@cindex notes, parenthesized +@cindex parentheses + +@funindex \parenthesize +@funindex parenthesize + +Objects may be parenthesized by prefixing @code{\parenthesize} to +the music event. When prefixed to a chord, it parenthesizes every +note. Individual notes inside a chord may also be parenthesized. + +@lilypond[verbatim,quote,relative=2] +c2 \parenthesize d +c2 \parenthesize +c2 +@end lilypond + +Non-note objects may be parenthesized as well. For articulations, +a hyphen is needed before the @code{\parenthesize} command. + +@lilypond[verbatim,quote,relative=2] +c2-\parenthesize -. d +c2 \parenthesize r +@end lilypond + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Parenthesis_engraver}, +@rinternals{ParenthesesItem}, +@rinternals{parentheses-interface}. + + +@knownissues + +Parenthesizing a chord prints parentheses around each individual +note, instead of a single large parenthesis around the entire +chord. + + +@node Stems +@unnumberedsubsubsec Stems + +@cindex stem +@cindex stem, invisible +@cindex invisible stem + +@funindex \stemUp +@funindex stemUp +@funindex \stemDown +@funindex stemDown +@funindex \stemNeutral +@funindex stemNeutral +@cindex stem, direction +@cindex stem, up +@cindex stem, down +@cindex stem, neutral + +Whenever a note is found, a @code{Stem} object is created +automatically. For whole notes and rests, they are also created but +made invisible. + +Stems may be manually placed to point up or down; see +@ref{Direction and placement}. + + +@predefined +@code{\stemUp}, +@code{\stemDown}, +@code{\stemNeutral}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{default-direction-of-stems-on-the-center-line-of-the-staff.ly} + + +@seealso +Notation Reference: +@ref{Direction and placement}. + +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Stem_engraver}, +@rinternals{Stem}, +@rinternals{stem-interface}. + + +@node Outside the staff +@subsection Outside the staff + +This section discusses how to add emphasis to elements in the staff +from outside of the staff. + +@menu +* Balloon help:: +* Grid lines:: +* Analysis brackets:: +@end menu + +@node Balloon help +@unnumberedsubsubsec Balloon help + +@cindex balloon +@cindex notation, explaining +@cindex balloon help +@cindex help, balloon + +@funindex \balloonGrobText +@funindex \balloonText +@funindex Balloon_engraver +@funindex balloonGrobText +@funindex balloonText +@funindex \balloonLengthOn +@funindex balloonLengthOn +@funindex \balloonLengthOff +@funindex balloonLengthOff + +Elements of notation can be marked and named with the help of a +square balloon. The primary purpose of this feature is to explain +notation. + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + 2. +} +@end lilypond + + +There are two music functions, @code{balloonGrobText} and +@code{balloonText}; the former is used like +@w{@code{\once \override}} to attach text to any grob, and the +latter is used like @code{\tweak}, typically within chords, to +attach text to an individual note. + +Balloon text normally influences note spacing, but this can be +altered: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { \consists "Balloon_engraver" } +{ + \balloonLengthOff + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + a8 + \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } + r + \balloonLengthOn + 2. +} +@end lilypond + + +@predefined +@code{\balloonLengthOn}, +@code{\balloonLengthOff}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Balloon_engraver}, +@rinternals{BalloonTextItem}, +@rinternals{balloon-interface}. + + +@node Grid lines +@unnumberedsubsubsec Grid lines + +@cindex grid lines +@cindex lines, grid +@cindex vertical lines between staves +@cindex lines, vertical between staves + +@funindex Grid_point_engraver +@funindex Grid_line_span_engraver +@funindex gridInterval + +Vertical lines can be drawn between staves synchronized with the +notes. + +The @code{Grid_point_engraver} must be used to create the end +points of the lines, while the @code{Grid_line_span_engraver} must +be used to actually draw the lines. By default this centers grid +lines horizontally below and to the left side of each note head. +Grid lines extend from the middle lines of each staff. The +@code{gridInterval} must specify the duration between the grid +lines. + +@lilypond[verbatim,quote] +\layout { + \context { + \Staff + \consists "Grid_point_engraver" + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + } +} + +\score { + \new ChoirStaff << + \new Staff \relative c'' { + \stemUp + c4. d8 e8 f g4 + } + \new Staff \relative c { + \clef bass + \stemDown + c4 g' f e + } + >> +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{grid-lines--changing-their-appearance.ly} + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Grid_line_span_engraver}, +@rinternals{Grid_point_engraver}, +@rinternals{GridLine}, +@rinternals{GridPoint}, +@rinternals{grid-line-interface}, +@rinternals{grid-point-interface}. + + +@node Analysis brackets +@unnumberedsubsubsec Analysis brackets + +@cindex brackets +@cindex bracket, phrasing +@cindex phrasing bracket +@cindex musicological analysis +@cindex analysis, musicological +@cindex note grouping bracket +@cindex horizontal bracket +@cindex bracket, horizontal + +@funindex Horizontal_bracket_engraver +@funindex \startGroup +@funindex startGroup +@funindex \stopGroup +@funindex stopGroup + +Brackets are used in musical analysis to indicate structure in musical +pieces. Simple horizontal brackets are supported. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c2\startGroup + d\stopGroup +} +@end lilypond + +Analysis brackets may be nested. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + c4\startGroup\startGroup + d4\stopGroup + e4\startGroup + d4\stopGroup\stopGroup +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Editorial annotations}. + +Internals Reference: +@rinternals{Horizontal_bracket_engraver}, +@rinternals{HorizontalBracket}, +@rinternals{horizontal-bracket-interface}, +@rinternals{Staff}. + diff --git a/Documentation/notation/expressive.itely b/Documentation/notation/expressive.itely new file mode 100644 index 0000000000..87a1c7ef9f --- /dev/null +++ b/Documentation/notation/expressive.itely @@ -0,0 +1,1326 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Expressive marks +@section Expressive marks + +@lilypondfile[quote]{expressive-headword.ly} + +This section lists various expressive marks that can be +created in a score. + +@menu +* Expressive marks attached to notes:: +* Expressive marks as curves:: +* Expressive marks as lines:: +@end menu + + +@node Expressive marks attached to notes +@subsection Expressive marks attached to notes + +This section explains how to create expressive marks that are +attached to notes: articulations, ornamentations, and dynamics. +Methods to create new dynamic markings are also discussed. + +@menu +* Articulations and ornamentations:: +* Dynamics:: +* New dynamic marks:: +@end menu + +@node Articulations and ornamentations +@unnumberedsubsubsec Articulations and ornamentations + +@cindex articulations +@cindex ornamentation +@cindex scripts +@cindex ornaments +@cindex espressivo +@cindex fermata +@cindex upbow +@cindex downbow +@cindex foot marks +@cindex organ pedal marks +@cindex pedal marks, organ +@cindex turn +@cindex open +@cindex stopped +@cindex flageolet +@cindex reverseturn +@cindex trill +@cindex prall +@cindex mordent +@cindex prallprall +@cindex prallmordent +@cindex prall, up +@cindex prall, down +@cindex mordent, up +@cindex mordent, down +@cindex thumb marking +@cindex segno +@cindex coda +@cindex varcoda + +@funindex \accent +@funindex \marcato +@funindex \staccatissimo +@funindex \espressivo +@funindex \staccato +@funindex \tenuto +@funindex \portato +@funindex \upbow +@funindex \downbow +@funindex \flageolet +@funindex \thumb +@funindex \lheel +@funindex \rheel +@funindex \ltoe +@funindex \rtoe +@funindex \open +@funindex \halfopen +@funindex \stopped +@funindex \snappizzicato +@funindex \turn +@funindex \reverseturn +@funindex \trill +@funindex \prall +@funindex \mordent +@funindex \prallprall +@funindex \prallmordent +@funindex \upprall +@funindex \downprall +@funindex \upmordent +@funindex \downmordent +@funindex \pralldown +@funindex \prallup +@funindex \lineprall +@funindex \signumcongruentiae +@funindex \shortfermata +@funindex \fermata +@funindex \longfermata +@funindex \verylongfermata +@funindex \fermataMarkup +@funindex \segno +@funindex \coda +@funindex \varcoda + + +@funindex - + +A variety of symbols that denote articulations, ornamentations, +and other performance indications can be attached to a note using +this syntax: + +@example +@var{note}\@var{name} +@end example + +The possible values for @code{@var{name}} are listed in +@ref{List of articulations}. For example: + +@lilypond[verbatim,quote,relative=2] +c4\staccato c\mordent b2\turn +c1\fermata +@end lilypond + +@cindex marcato +@cindex tenuto +@cindex staccatissimo +@cindex accent +@cindex staccato +@cindex portato + +Some of these articulations have shorthands for easier entry. +Shorthands are appended to the note name, and their syntax +consists of a dash @code{-} followed by a symbol signifying the +articulation. Predefined shorthands exist for @notation{marcato}, +@notation{stopped}, @notation{tenuto}, @notation{staccatissimo}, +@notation{accent}, @notation{staccato}, and @notation{portato}. +Their corresponding output appears as follows: + +@lilypond[verbatim,quote,relative=2] +c4-^ c-+ c-- c-| +c4-> c-. c2-_ +@end lilypond + +The rules for the default placement of articulations are defined +in @file{scm/script.scm}. Articulations and ornamentations +may be manually placed above or below the staff; see +@ref{Direction and placement}. + +Articulations are @code{Script} objects. Their properties are +described more fully in @rinternals{Script}. + +Articulations can be attached to rests as well as notes but they +cannot be attached to multi-measure rests. A special predefined +command, @code{\fermataMarkup}, is available for attaching a fermata +to a multi-measure rest (and only a multi-measure rest). This +creates a @code{MultiMeasureRestText} object. + +@lilypond[verbatim,quote,relative=2] +\override Script #'color = #red +\override MultiMeasureRestText #'color = #blue +a2\fermata r\fermata +R1\fermataMarkup +@end lilypond + +In addition to articulations, text and markups can be attached to +notes. See @ref{Text scripts}. + +For more information about the ordering of Scripts and TextScripts that +are attached to the notes, see @rlearning{Placement of objects}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{modifying-default-values-for-articulation-shorthand-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-vertical-ordering-of-scripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-a-delayed-turn.ly} + +@seealso +Music Glossary: +@rglos{tenuto}, +@rglos{accent}, +@rglos{staccato}, +@rglos{portato}. + +Learning Manual: +@rlearning{Placement of objects}. + +Notation Reference: +@ref{Text scripts}, +@ref{Direction and placement}, +@ref{List of articulations}, +@ref{Trills}. + +Installed Files: +@file{scm/script.scm}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Script}, +@rinternals{TextScript}. + + +@node Dynamics +@unnumberedsubsubsec Dynamics + +@cindex absolute dynamics +@cindex dynamics +@cindex dynamics, absolute + +@funindex \ppppp +@funindex ppppp +@funindex \pppp +@funindex pppp +@funindex \ppp +@funindex ppp +@funindex \pp +@funindex pp +@funindex \p +@funindex p +@funindex \mp +@funindex mp +@funindex \mf +@funindex mf +@funindex \f +@funindex f +@funindex \ff +@funindex ff +@funindex \fff +@funindex fff +@funindex \ffff +@funindex ffff +@funindex \fffff +@funindex fffff +@funindex \fp +@funindex fp +@funindex \sf +@funindex sf +@funindex \sff +@funindex sff +@funindex \sp +@funindex sp +@funindex \spp +@funindex spp +@funindex \sfz +@funindex sfz +@funindex \rfz +@funindex rfz + +Absolute dynamic marks are specified using a command after a note, +such as @code{c4\ff}. The available dynamic marks are +@code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, @code{\p}, +@code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, +@code{\ffff}, @code{\fffff}, @code{\fp}, @code{\sf}, @code{\sff}, +@code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}. Dynamic +marks may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@lilypond[verbatim,quote,relative=2] +c2\ppp c\mp +c2\rfz c^\mf +c2_\spp c^\ff +@end lilypond + +@cindex hairpin +@cindex crescendo +@cindex decrescendo +@cindex diminuendo + +@funindex \< +@funindex \> +@funindex \! +@funindex \cr +@funindex cr +@funindex \decr +@funindex decr + +A @notation{crescendo} mark is started with @code{\<} and +terminated with @code{\!}, an absolute dynamic, or an additional +crescendo or decrescendo mark. A @notation{decrescendo} mark is +started with @code{\>} and is also terminated with @code{\!}, an +absolute dynamic, or another crescendo or decrescendo mark. +@code{\cr} and @code{\decr} may be used instead of @code{\<} and +@code{\>}. @notation{Hairpins} are engraved by default using this +notation. + +@lilypond[verbatim,quote,relative=2] +c2\< c\! +d2\< d\f +e2\< e\> +f2\> f\! +e2\> e\mp +d2\> d\> +c1\! +@end lilypond + +A hairpin that is terminated with @code{\!} will end at the +right edge of the note that has the @code{\!} assigned to it. In the +case where it is terminated with the start of another @notation{crescendo} +or @notation{decrescendo} mark, it will end at the centre of the note +that has the next @code{\<} or @code{\>} assigned to it. The next +hairpin will then start at the right edge of the same note +instead of the usual left edge had it been terminated with @code{\!} +before. + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\< a | c4 a c\! a\< | c4 a c a\! +@end lilypond + +Hairpins that are terminated with absolute dynamic marks instead of +@code{\!} will also be engraved in a similar way. However, the length +of the absolute dynamic itself can alter where the preceding hairpin +ends. + +@lilypond[verbatim,quote,relative=2] +c1\< | c4 a c\mf a | c1\< | c4 a c\ffff a +@end lilypond + +@cindex multiple dynamic marks on one note +@cindex dynamic marks, multiple on one note +Spacer rests are needed to engrave multiple marks on one note. +This is particularly useful when adding a @notation{crescendo} and +@notation{decrescendo} to the same note: + +@lilypond[verbatim,quote,relative=2] +c4\< c\! d\> e\! +<< f1 { s4 s4\< s4\> s4\! } >> +@end lilypond + +@cindex espressivo articulation + +@funindex \espressivo +@funindex espressivo + +The @code{\espressivo} command can be used to indicate a crescendo +and decrescendo on the same note. However, be warned that this is +implemented as an articulation, not a dynamic. + +@lilypond[verbatim,quote,relative=2] +c2 b4 a +g1\espressivo +@end lilypond + +@funindex \cresc +@funindex cresc +@funindex \decresc +@funindex decresc +@funindex \dim +@funindex dim +Textual crescendo marks begin with @code{\cresc}. +Textual decrescendos begin with @code{\decresc} or @code{\dim}. +Extender lines are engraved as required. + +@lilypond[verbatim,quote,relative=2] +g8\cresc a b c b c d e\mf | +f8\decresc e d c e\> d c b | +a1\dim ~ | +a2. r4\! | +@end lilypond + +@funindex \crescTextCresc +@funindex crescTextCresc +@funindex \dimTextDecresc +@funindex dimTextDecresc +@funindex \dimTextDecr +@funindex dimTextDecr +@funindex \dimTextDim +@funindex dimTextDim +@funindex \crescHairpin +@funindex crescHairpin +@funindex \dimHairpin +@funindex dimHairpin + +Textual marks for dynamic changes can also replace hairpins: +@lilypond[verbatim,quote,relative=2] +\crescTextCresc +c4\< d e f\! | +\dimTextDecresc +g4\> e d c\! | +\dimTextDecr +e4\> d c b\! | +\dimTextDim +d4\> c b a\! | +\crescHairpin +\dimHairpin +c4\< d\! e\> d\! | +@end lilypond + + +To create new absolute dynamic marks or text that should be +aligned with dynamics, see @ref{New dynamic marks}. + +@cindex dynamics, vertical positioning +@cindex vertical positioning of dynamics + +@funindex DynamicLineSpanner + + +Vertical positioning of dynamics is handled by +@rinternals{DynamicLineSpanner}. +@funindex \dynamicUp +@funindex dynamicUp +@funindex \dynamicDown +@funindex dynamicDown +@funindex \dynamicNeutral +@funindex dynamicNeutral + +A @code{Dynamics} context is available to engrave dynamics on +their own horizontal line. Use spacer rests to indicate timing. +(Notes in a @code{Dynamics} context will also take up +musical time, but will not be engraved.) +The @code{Dynamics} context can usefully contain some other +items such as text scripts, text spanners, and piano pedal marks. + +@lilypond[verbatim,quote] +<< + \new Staff \relative c' { + c2 d4 e | + c4 e e,2 | + g'4 a g a | + c1 | + } + \new Dynamics { + s1\< | + s1\f | + s2\dim s2-"rit." | + s1\p | + } +>> +@end lilypond + +@predefined +@code{\dynamicUp}, +@code{\dynamicDown}, +@code{\dynamicNeutral}, +@code{\crescTextCresc}, +@code{\dimTextDim}, +@code{\dimTextDecr}, +@code{\dimTextDecresc}, +@code{\crescHairpin}, +@code{\dimHairpin}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-hairpin-behavior-at-bar-lines.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-minimum-length-of-hairpins.ly} + +@cindex al niente +@cindex niente, al + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-hairpins-using-al-niente-notation.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligned-dynamics-and-textscripts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{hiding-the-extender-line-for-text-dynamics.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-text-and-spanner-styles-for-text-dynamics.ly} + + +@seealso +Music Glossary: +@rglos{al niente}, +@rglos{crescendo}, +@rglos{decrescendo}, +@rglos{hairpin}. + +Learning Manual: +@rlearning{Articulation and dynamics}. + +Notation Reference: +@ref{Direction and placement}, +@ref{New dynamic marks}, +@ref{What goes into the MIDI output?}, +@ref{Controlling MIDI dynamics}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{DynamicText}, +@rinternals{Hairpin}, +@rinternals{DynamicLineSpanner}, +@rinternals{Dynamics}. + + +@node New dynamic marks +@unnumberedsubsubsec New dynamic marks + +@cindex new dynamic marks +@cindex dynamic marks, new + +The easiest way to create dynamic indications is to use +@code{\markup} objects. + +@lilypond[verbatim,quote] +moltoF = \markup { molto \dynamic f } + +\relative c' { + 16_\moltoF + 2.. +} +@end lilypond + +@cindex dynamics, editorial +@cindex dynamics, parenthesis +@cindex editorial dynamics +@funindex \bracket +@funindex bracket +@funindex \dynamic +@funindex dynamic + +In markup mode, editorial dynamics (within parentheses or square +brackets) can be created. The syntax for markup mode is described +in @ref{Formatting text}. + +@lilypond[verbatim,quote] +roundF = \markup { + \center-align \concat { \bold { \italic ( } + \dynamic f \bold { \italic ) } } } +boxF = \markup { \bracket { \dynamic f } } +\relative c' { + c1_\roundF + c1_\boxF +} +@end lilypond + +@cindex make-dynamic-script +@funindex make-dynamic-script + +Simple, centered dynamic marks are easily created with the +@code{make-dynamic-script} function. + +@lilypond[verbatim,quote] +sfzp = #(make-dynamic-script "sfzp") +\relative c' { + c4 c c\sfzp c +} +@end lilypond + +In general, @code{make-dynamic-script} takes any markup object as its +argument. The dynamic font only contains the characters +@code{f,m,p,r,s} and @code{z}, so if a dynamic mark that includes +plain text or punctuation symbols is desired, markup commands that +reverts font family and font encoding to normal text should be used, +for example @code{\normal-text}. The interest of using +@code{make-dynamic-script} instead of an ordinary markup is ensuring +the vertical alignment of markup objects and hairpins that are +attached to the same note head. + +@lilypond[verbatim,quote] +roundF = \markup { \center-align \concat { + \normal-text { \bold { \italic ( } } + \dynamic f + \normal-text { \bold { \italic ) } } } } +boxF = \markup { \bracket { \dynamic f } } +mfEspress = \markup { \center-align \line { + \hspace #3.7 mf \normal-text \italic espress. } } +roundFdynamic = #(make-dynamic-script roundF) +boxFdynamic = #(make-dynamic-script boxF) +mfEspressDynamic = #(make-dynamic-script mfEspress) +\relative c' { + c4_\roundFdynamic\< d e f + g,1~_\boxFdynamic\> + g1 + g'1~\mfEspressDynamic + g1 +} +@end lilypond + +The Scheme form of markup mode may be used instead. Its syntax is +explained in @rextend{Markup construction in Scheme}. + +@lilypond[verbatim,quote] +moltoF = #(make-dynamic-script + (markup #:normal-text "molto" + #:dynamic "f")) +\relative c' { + 16 + 2..\moltoF +} +@end lilypond + +Font settings in markup mode are described in +@ref{Selecting font and font size}. + + +@seealso +Notation Reference: +@ref{Formatting text}, +@ref{Selecting font and font size}, +@ref{What goes into the MIDI output?}, +@ref{Controlling MIDI dynamics}. + +Snippets: +@rlsr{Expressive marks}. + +Extend: +@rextend{Markup construction in Scheme}. + + + +@node Expressive marks as curves +@subsection Expressive marks as curves + +This section explains how to create various expressive marks that +are curved: normal slurs, phrasing slurs, breath marks, falls, and +doits. + +@menu +* Slurs:: +* Phrasing slurs:: +* Breath marks:: +* Falls and doits:: +@end menu + +@node Slurs +@unnumberedsubsubsec Slurs + +@cindex slurs + +@notation{Slurs} are entered using parentheses: + +@warning{In polyphonic music, a slur must be terminated +in the same voice it began.} + +@lilypond[verbatim,quote,relative=2] +f4( g a) a8 b( +a4 g2 f4) +2( 2) +@end lilypond + +@cindex slurs, manual placement +@cindex slurs, below notes +@cindex slurs, above notes +@funindex \slurDown +@funindex slurDown +@funindex \slurNeutral +@funindex slurNeutral + +Slurs may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@cindex phrasing slur +@cindex multiple slurs +@cindex simultaneous slurs +@cindex slur, phrasing +@cindex slurs, multiple +@cindex slurs, simultaneous + +Simultaneous or overlapping slurs are not permitted, but a phrasing +slur can overlap a slur. This permits two slurs to be printed at +once. For details, see @ref{Phrasing slurs}. + +@cindex slur style +@cindex slur, solid +@cindex slur, dotted +@cindex slur, dashed +@cindex solid slur +@cindex dotted slur +@cindex dashed slur +@cindex style, slur +@funindex \slurDashed +@funindex slurDashed +@funindex \slurDotted +@funindex slurDotted +@funindex \slurSolid +@funindex slurSolid + +Slurs can be solid, dotted, or dashed. Solid is the default slur +style: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashed +g4( e c2) +\slurDotted +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurHalfDashed +@funindex slurHalfDashed +@funindex \slurHalfSolid +@funindex slurHalfSolid +@cindex slur, half dashed and half solid + +Slurs can also be made half-dashed (the first half dashed, the +second half solid) or half-solid (the first half solid, the second +half dashed): + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurHalfDashed +g4( e c2) +\slurHalfSolid +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + +@funindex \slurDashPattern +@funindex slurDashPattern +@cindex slur, defining dash patterns + +Custom dash patterns for slurs can be defined: + +@lilypond[verbatim,quote,relative=1] +c4( e g2) +\slurDashPattern #0.7 #0.75 +g4( e c2) +\slurDashPattern #0.5 #2.0 +c4( e g2) +\slurSolid +g4( e c2) +@end lilypond + + + +@funindex \slurUp +@funindex slurUp + + +@predefined +@code{\slurUp}, +@code{\slurDown}, +@code{\slurNeutral}, +@code{\slurDashed}, +@code{\slurDotted}, +@code{\slurHalfDashed}, +@code{\slurHalfSolid}, +@code{\slurDashPattern}, +@code{\slurSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-double-slurs-for-legato-chords.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-text-markups-inside-slurs.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-slurs-with-complex-dash-structure.ly} + + +@seealso +Music Glossary: +@rglos{slur}. + +Learning Manual: +@rlearning{On the un-nestedness of brackets and ties}. + +Notation Reference: +@ref{Direction and placement}, +@ref{Phrasing slurs}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Slur}. + + +@node Phrasing slurs +@unnumberedsubsubsec Phrasing slurs + +@cindex phrasing slurs +@cindex phrasing marks +@cindex slur, phrasing +@cindex mark, phrasing +@funindex \( +@funindex \) + +@notation{Phrasing slurs} (or phrasing marks) that indicate a +musical sentence are written using the commands @code{\(} and +@code{\)} respectively: + +@lilypond[verbatim,quote,relative=2] +c4\( d( e) f( +e2) d\) +@end lilypond + +@funindex \phrasingSlurUp +@funindex phrasingSlurUp +@funindex \phrasingSlurDown +@funindex phrasingSlurDown +@funindex \phrasingSlurNeutral +@funindex phrasingSlurNeutral + +Typographically, a phrasing slur behaves almost exactly like a +normal slur. However, they are treated as different objects; a +@code{\slurUp} will have no effect on a phrasing slur. Phrasing +may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@cindex simultaneous phrasing slurs +@cindex multiple phrasing slurs +@cindex slur, simultaneous phrasing +@cindex slur, multiple phrasing +@cindex phrasing slur, simultaneous +@cindex phrasing slur, multiple + +Simultaneous or overlapping phrasing slurs are not permitted. + +@funindex phrasingSlurDashed +@funindex \phrasingSlurDashed +@funindex \phrasingSlurDotted +@funindex phrasingSlurDotted +@funindex \phrasingSlurSolid +@funindex phrasingSlurSolid +@cindex phrasing slur, dashed +@cindex dashed phrasing slur +@cindex phrasing slur, dotted +@cindex dotted phrasing slurs +@cindex slur, dashed phrasing +@cindex slur, dotted phrasing + +Phrasing slurs can be solid, dotted, or dashed. Solid is the default +style for phrasing slurs: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashed +g4\( e c2\) +\phrasingSlurDotted +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex phrasingSlurHalfDashed +@funindex \phrasingSlurHalfDashed +@funindex \phrasingSlurHalfSolid +@funindex phrasingSlurHalfSolid +@cindex phrasing slur, half solid and half dashed +@cindex slur, half solid and half dashed phrasing + +Phrasing slurs can also be made half-dashed (the first half dashed, the +second half solid) or half-solid (the first half solid, the second +half dashed): + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurHalfDashed +g4\( e c2\) +\phrasingSlurHalfSolid +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +@funindex \phrasingSlurDashPattern +@funindex phrasingSlurDashPattern +@cindex phrasing slur, defining dash patterns +@cindex slur, phrasing, defining dash patterns +@cindex slur, defining dash patterns for phrasing + +Custom dash patterns for phrasing slurs can be defined: + +@lilypond[verbatim,quote,relative=1] +c4\( e g2\) +\phrasingSlurDashPattern #0.7 #0.75 +g4\( e c2\) +\phrasingSlurDashPattern #0.5 #2.0 +c4\( e g2\) +\phrasingSlurSolid +g4\( e c2\) +@end lilypond + +Dash pattern definitions for phrasing slurs have the same structure +as dash pattern definitions for slurs. For more information about +complex dash patterns, see the snippets under @ref{Slurs}. + +@predefined +@code{\phrasingSlurUp}, +@code{\phrasingSlurDown}, +@code{\phrasingSlurNeutral}, +@code{\phrasingSlurDashed}, +@code{\phrasingSlurDotted}, +@code{\phrasingSlurHalfDashed}, +@code{\phrasingSlurHalfSolid}, +@code{\phrasingSlurDashPattern}, +@code{\phrasingSlurSolid}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{On the un-nestedness of brackets and ties}. + +Notation Reference: +@ref{Direction and placement}, +@ref{Slurs}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{PhrasingSlur}. + + +@node Breath marks +@unnumberedsubsubsec Breath marks + +@cindex breath marks +@cindex pause mark +@funindex \breathe +@funindex breathe + +Breath marks are entered using @code{\breathe}: + +@lilypond[verbatim,quote,relative=2] +c2. \breathe d4 +@end lilypond + +A breath mark will end an automatic beam; to override this behavior, see +@ref{Manual beams}. + +@lilypond[verbatim,quote,relative=2] +c8 \breathe d e f g2 +@end lilypond + +Musical indicators for breath marks in ancient notation, +divisiones, are supported. For details, see @ref{Divisiones}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-breath-mark-symbol.ly} + +@cindex caesura +@cindex railroad tracks + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{inserting-a-caesura.ly} + + +@seealso +Music Glossary: +@rglos{caesura}. + +Notation Reference: +@ref{Divisiones}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{BreathingEvent}, +@rinternals{BreathingSign}, +@rinternals{Breathing_sign_engraver}. + + +@node Falls and doits +@unnumberedsubsubsec Falls and doits + +@cindex falls +@cindex doits +@funindex \bendAfter +@funindex bendAfter + +@notation{Falls} and @notation{doits} can be added to notes using +the @code{\bendAfter} command. The direction of the fall or doit +is indicated with a plus or minus (up or down). The number +indicates the pitch interval that the fall or doit will extend +@emph{beyond} the main note. + +@lilypond[verbatim,quote,relative=2] +c2-\bendAfter #+4 +c2-\bendAfter #-4 +c2-\bendAfter #+6.5 +c2-\bendAfter #-6.5 +c2-\bendAfter #+8 +c2-\bendAfter #-8 +@end lilypond + +The dash @code{-} immediately preceding the @code{\bendAfter} +command is @emph{required} when writing falls and doits. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adjusting-the-shape-of-falls-and-doits.ly} + + +@seealso +Music Glossary: +@rglos{fall}, +@rglos{doit}. + +Snippets: +@rlsr{Expressive marks}. + + +@node Expressive marks as lines +@subsection Expressive marks as lines + +This section explains how to create various expressive marks that +follow a linear path: glissandos, arpeggios, and trills. + +@menu +* Glissando:: +* Arpeggio:: +* Trills:: +@end menu + +@node Glissando +@unnumberedsubsubsec Glissando + +@cindex glissando +@funindex \glissando +@funindex glissando + +A @notation{glissando} is created by attaching @code{\glissando} +to a note: + +@lilypond[verbatim,quote,relative=2] +g2\glissando g' +c2\glissando c, +@end lilypond + +Different styles of glissandi can be created. For details, see +@ref{Line styles}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{contemporary-glissando.ly} + + +@seealso +Music Glossary: +@rglos{glissando}. + +Notation Reference: +@ref{Line styles}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Glissando}. + + +@knownissues + +Printing text over the line (such as @notation{gliss.}) is not +supported. + + +@node Arpeggio +@unnumberedsubsubsec Arpeggio + +@cindex arpeggio +@cindex broken chord +@cindex chord, broken + +@funindex \arpeggio +@funindex arpeggio +@funindex \arpeggioArrowUp +@funindex arpeggioArrowUp +@funindex \arpeggioArrowDown +@funindex arpeggioArrowDown +@funindex \arpeggioNormal +@funindex arpeggioNormal + +An @notation{arpeggio} on a chord (also known as a broken chord) +is denoted by appending @code{\arpeggio} to the chord construct: + +@lilypond[verbatim,quote,relative=1] +1\arpeggio +@end lilypond + +Different types of arpeggios may be written. +@code{\arpeggioNormal} reverts to a normal arpeggio: + +@lilypond[verbatim,quote,relative=1] +2\arpeggio + +\arpeggioArrowUp +2\arpeggio + +\arpeggioArrowDown +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +@cindex arpeggio symbols, special +@cindex special arpeggio symbols + +@funindex \arpeggioBracket +@funindex arpeggioBracket +@funindex \arpeggioParenthesis +@funindex arpeggioParenthesis +@funindex \arpeggioParenthesisDashed +@funindex arpeggioParenthesisDashed + +Special @emph{bracketed} arpeggio symbols can be created: + +@lilypond[verbatim,quote,relative=1] +2 + +\arpeggioBracket +2\arpeggio + +\arpeggioParenthesis +2\arpeggio + +\arpeggioParenthesisDashed +2\arpeggio + +\arpeggioNormal +2\arpeggio +@end lilypond + +The dash properties of the parenthesis arpeggio are controlled +with the @code{'dash-details} property, which is described at @ref{Slurs}. + +Arpeggios can be explicitly written out with ties. For more +information, see @ref{Ties}. + + +@predefined +@code{\arpeggio}, +@code{\arpeggioArrowUp}, +@code{\arpeggioArrowDown}, +@code{\arpeggioNormal}, +@code{\arpeggioBracket}, +@code{\arpeggioParenthesis} +@code{\arpeggioParenthesisDashed}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-a-piano-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-cross-staff-arpeggios-in-other-contexts.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-arpeggios-across-notes-in-different-voices.ly} + + +@seealso +Music Glossary: +@rglos{arpeggio}. + +Notation Reference: +@ref{Slurs}, +@ref{Ties}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{Arpeggio}, +@rinternals{Slur}, +@rinternals{PianoStaff}. + + +@knownissues + +@cindex cross-staff parenthesis-style arpeggio +@cindex arpeggio, parenthesis-style, cross-staff +@cindex arpeggio, cross-staff parenthesis-style + +It is not possible to mix connected arpeggios and unconnected +arpeggios in one @code{PianoStaff} at the same point in +time. + +The parenthesis-style arpeggio brackets do not work for +cross-staff arpeggios. + + +@node Trills +@unnumberedsubsubsec Trills + +@cindex trills + +@funindex \trill +@funindex trill +@funindex \startTrillSpan +@funindex startTrillSpan +@funindex \stopTrillSpan +@funindex stopTrillSpan + +Short trills without an extender line are printed with +@code{\trill}; see @ref{Articulations and ornamentations}. + +Longer trills with an extender line are made with +@code{\startTrillSpan} and @code{\stopTrillSpan}: + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +c2\stopTrillSpan +r2 +@end lilypond + +A trill spanner crossing a line break will restart exactly above +the first note on the new line. + +@lilypond[ragged-right,verbatim,quote,relative=2] +d1\startTrillSpan +\break +d1 +c2\stopTrillSpan +r2 +@end lilypond + +Consecutive trill spans will work without explicit +@code{\stopTrillSpan} commands, since successive trill spanners will +automatically become the right bound of the previous trill. + +@lilypond[verbatim,quote,relative=2] +d1\startTrillSpan +d1 +b1\startTrillSpan +d2\stopTrillSpan +r2 +@end lilypond + +Trills can also be combined with grace notes. The syntax of this +construct and the method to precisely position the grace notes are +described in @ref{Grace notes}. + +@lilypond[verbatim,quote,relative=2] +d1~\afterGrace +d1\startTrillSpan { c32[ d]\stopTrillSpan } +c2 r2 +@end lilypond + +@cindex pitched trills +@cindex trills, pitched +@funindex \pitchedTrill +@funindex pitchedTrill + +Trills that require an auxiliary note with an explicit pitch can +be typeset with the @code{\pitchedTrill} command. The first +argument is the main note, and the second is the @emph{trilled} +note, printed as a stemless note head in parentheses. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +d2\startTrillSpan fis +d2 +c2\stopTrillSpan +r2 +@end lilypond + +@cindex pitched trill with accidental +@cindex trill with accidental + +Subsequent accidentals of the same note in the same measure will need +to be added manually. Only the accidental of the first pitched trill +in a measure is printed. + +@lilypond[verbatim,quote,relative=2] +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan cis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis +eis4\stopTrillSpan +\pitchedTrill +eis4\startTrillSpan fis! +eis4\stopTrillSpan +@end lilypond + + +@predefined +@code{\startTrillSpan}, +@code{\stopTrillSpan}. +@endpredefined + +@seealso +Music Glossary: +@rglos{trill}. + +Notation Reference: +@ref{Articulations and ornamentations}, +@ref{Grace notes}. + +Snippets: +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{TrillSpanner}. + diff --git a/Documentation/notation/fretted-strings.itely b/Documentation/notation/fretted-strings.itely new file mode 100644 index 0000000000..1f462c0d96 --- /dev/null +++ b/Documentation/notation/fretted-strings.itely @@ -0,0 +1,1905 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Fretted string instruments +@section Fretted string instruments + +@lilypondfile[quote]{fretted-headword.ly} + +This section discusses several aspects of music notation that are unique +to fretted string instruments. + +@cindex tablature +@cindex tablature, guitar +@cindex tablature, banjo +@cindex guitar tablature +@cindex banjo tablature + +@menu +* Common notation for fretted strings:: +* Guitar:: +* Banjo:: +@end menu + +@node Common notation for fretted strings +@subsection Common notation for fretted strings + +This section discusses common notation that is unique +to fretted string instruments. + +@menu +* References for fretted strings:: +* String number indications:: +* Default tablatures:: +* Custom tablatures:: +* Fret diagram markups:: +* Predefined fret diagrams:: +* Automatic fret diagrams:: +* Right-hand fingerings:: +@end menu + +@node References for fretted strings +@unnumberedsubsubsec References for fretted strings + +Music for fretted string instruments is normally notated on +a single staff, either in traditional music notation or in +tablature. Sometimes the two types are combined, and it is +especially common in popular music to use chord diagrams above +a staff of traditional notation. The guitar and the banjo are +transposing instruments, sounding an octave lower than written. +Scores for these instruments should use the @code{"treble_8"} clef +(or @code{\transposition c} to get correct MIDI output). +Some other elements pertinent to fretted string instruments +are covered elsewhere: + +@itemize +@item Fingerings are indicated as shown in +@ref{Fingering instructions}. + +@item Instructions for @notation{Laissez vibrer} ties +as well as ties on arpeggios and tremolos can be found in +@ref{Ties}. + +@item Instructions for handling multiple voices can be found +in @ref{Collision resolution}. + +@item Instructions for indicating harmonics can be found in +@ref{Harmonics}. + +@end itemize + + +@seealso +Notation Reference: +@ref{Fingering instructions}, +@ref{Ties}, +@ref{Collision resolution}, +@ref{Instrument names}, +@ref{Writing music in parallel}, +@ref{Arpeggio}, +@ref{List of articulations}, +@ref{Clef}, +@ref{Instrument transpositions}. + + +@node String number indications +@unnumberedsubsubsec String number indications + +@cindex string numbers +@cindex string vs. fingering numbers +@cindex fingering vs. string numbers + +The string on which a note should be played may be indicated by +appending @code{\@var{number}} to a note inside a chord construct +@code{<>}. + +@warning{String numbers @strong{must} be defined inside a chord +construct even if there is only a single note.} + +@lilypond[verbatim,quote,relative=0] +\clef "treble_8" +4 2 +1 +@end lilypond + +When fingerings and string indications are used together, their +placement is controlled by the order in which the two items appear +in the code: + +@lilypond[verbatim,quote,relative=1] +\clef "treble_8" +2 + +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{controlling-the-placement-of-chord-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{allowing-fingerings-to-be-printed-inside-the-staff.ly} + + +@seealso +Notation Reference: +@ref{Fingering instructions}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{StringNumber}, +@rinternals{Fingering}. + + +@node Default tablatures +@unnumberedsubsubsec Default tablatures + +@cindex tablatures, basic +@cindex tablatures, default + +@funindex TabStaff +@funindex TabVoice + +Music for plucked string instruments is frequently notated using a +finger/touch notation or tablature. In contrast to traditional +notation pitches are not denoted with note heads, but by numbers (or +letter-like symbols in historical intavolatura). The staff lines +in tablature indicate the string on which the note is to be played, +and a number placed on a staff line indicated the fret at which +the corresponding string is to be pressed. +Notes that are to be played simultaneously are vertically aligned. + +By default, string 1 is the highest string, and corresponds to the top +line on the @code{TabStaff}. The tuning of the @code{TabStaff} +strings defaults to the +standard guitar tuning (with 6 strings). The notes are printed as +tablature, by using @code{TabStaff} and @code{TabVoice} contexts. A +calligraphic tablature clef is added automatically. + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff \relative c' { + a,8 a' a + d,8 a' a +} +@end lilypond + +Default tablatures do not contain any symbols for tone duration nor any +other musical symbols such as e.g. expressive marks. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c~ c2\! + c'2.\prall\) +} + +\score { + << + \new Staff { \clef "G_8" \symbols } + \new TabStaff { \symbols } + >> +} +@end lilypond + +@funindex \tabFullNotation + +If all musical symbols used in traditional notation should also show up +in tablature one has to apply the command @code{\tabFullNotation} in a +@code{TabStaff}-context. Please bear in mind that half notes are +double-stemmed in tablature in order to distinguish them from quarter +notes. + +@lilypond[quote,ragged-right,verbatim] +symbols = { + \time 3/4 + c4-.^"Allegro" d( e) + f4-.\f g a^\fermata + \mark \default + c8_.\<\( c16 c~ c2\! + c'2.\prall\) +} + +\score { + \new TabStaff { + \tabFullNotation + \symbols + } +} +@end lilypond + +@cindex fret + +@funindex minimumFret + +By default pitches are assigned to the lowest playing position on the +fret-board (first position). Open strings are automatically preferred. +If you would like a certain pitch to be played on a specific string +you can add a string number indication to the pitch name. If you +define pitch names and string numbers without a chord construct +(@code{<>}) the string number indications do not appear in traditional +notation. It is much more comfortable to define the playing position +by using the value of @code{minimumFret}. The default value for +minimumFret is 0. + + +@lilypond[quote,ragged-right,verbatim] +\new StaffGroup << + \new Staff \relative c { + \clef "treble_8" + \time 2/4 + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + c,16 d e f g4 + } + \new TabStaff \relative c { + c16 d e f g4 + c,16\5 d\5 e\4 f\4 g4\4 + \set TabStaff.minimumFret = #5 + c,16 d e f g4 + } +>> +@end lilypond + +@funindex \tabChordRepetition + +Chord constructs can be repeated by the chord repetition symbol +@code{q}. To use this feature in combination with tablature, +@code{\tabChordRepetition} is provided. It preserves the string +information explicitly given within chord constructs so repeated chords +get identical tablature representations. + +@lilypond[quote,verbatim] +\tabChordRepetition + +guitar = \relative c' { + r8 ~ q4 q8~ q q4 +} + +\new StaffGroup << + \new Staff { + \clef "treble_8" + \override Voice.StringNumber #'transparent = ##t + \guitar + } + \new TabStaff { + \guitar + } +>> +@end lilypond + + +Ties over a line break are parenthesized by default. The same holds for +the second alternative of a repeat. + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ + } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~ + \break + b1 + \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@funindex \hideSplitTiedTabNotes + +The command @code{\hideSplitTiedTabNotes} cancels the behavior of +engraving fret numbers in parentheses: + +@lilypond[quote,ragged-right,verbatim] +ties = \relative c' { + \repeat volta 2 { + e2. f4~ + f2 g2~ } + \alternative { + { g4 f2. } + { g4\repeatTie c,2. } + } + b1~ + \break + b1 + \bar "|." +} + +\score { + << + \new StaffGroup << + \context Staff { + \clef "treble_8" + \ties + } + \context TabStaff { + \hideSplitTiedTabNotes + \ties + } + >> + >> + \layout { + indent = #0 + ragged-right = ##t + } +} +@end lilypond + +@cindex harmonic indications in tablature notation +@cindex tablature and harmonic indications +@cindex slides in tablature notation +@cindex tablature and slides +@cindex chord glissandi +@funindex \harmonic +@funindex \harmonicByFret +@funindex \harmonicByRatio +@funindex \chordGlissando + +Harmonic indications can be added to tablature notation as sounding +pitches: + +@lilypond[verbatim,quote] +firstHarmonic = { + 4 + 4 + 2 +} +\score { + << + \new Staff { \firstHarmonic } + \new TabStaff { \firstHarmonic } + >> +} +@end lilypond + +Note that the command @code{\harmonic} must always be defined +inside a chord construct. It only makes sense for open-string harmonics +in the 12th fret. All other harmonics should be calculated by LilyPond. +This can be achieved by indicating the fret where a finger of the +fretting hand should touch a string. + +@lilypond[verbatim,quote] +fretHarmonics = { + \harmonicByFret #5 d16\4 + \harmonicByFret #4 d16\4 + \harmonicByFret #3 d8\4 + \harmonicByFret #5 2. +} +\score { + << + \new Staff { \fretHarmonics } + \new TabStaff { \fretHarmonics } + >> +} +@end lilypond + +Alternatively, harmonics can be computed by defining the ratio of +string lengths above and below the harmonic fingering. + +@lilypond[verbatim,quote] +ratioHarmonics = { + \harmonicByRatio #1/2 4 + \harmonicByRatio #1/3 4 + \harmonicByRatio #1/4 { g8\3 b8\2 e'4\1 } +} +\score { + << + \new Staff { \ratioHarmonics } + \new TabStaff { \ratioHarmonics } + >> +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{stem-and-beam-behavior-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{polyphony-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{open-string-harmonics-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fretted-string-harmonics-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{slides-in-tablature.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chord-glissando-in-tablature.ly} + + +@seealso +Notation Reference: +@ref{Stems}, +@ref{Harmonics}, +@ref{Glissando}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{TabNoteHead}, +@rinternals{TabStaff}, +@rinternals{TabVoice}, +@rinternals{Beam}. + + +@knownissues + +Chords are not handled in a special way, and hence the automatic +string selector may easily select the same string for two notes in +a chord. + +In order to handle @code{\partcombine}, a @code{TabStaff} must use +specially-created voices: + +@lilypond[quote,ragged-right,verbatim] +melodia = \partcombine { e4 g g g } { e4 e e e } +<< + \new TabStaff << + \new TabVoice = "one" s1 + \new TabVoice = "two" s1 + \new TabVoice = "shared" s1 + \new TabVoice = "solo" s1 + { \melodia } + >> +>> +@end lilypond + +Guitar special effects are limited to harmonics and slides. + +@node Custom tablatures +@unnumberedsubsubsec Custom tablatures + +@cindex tablatures, custom +@cindex tablature, banjo +@cindex tablature, mandolin +@cindex tablature, guitar +@cindex tablature, bass guitar +@cindex tablature, ukulele +@cindex tablature, predefined string tunings +@cindex fretted instruments, predefined string tunings +@cindex predefined string tunings for fretted instruments +@cindex tablature, violin +@cindex tablature, viola +@cindex tablature, cello +@cindex tablature, bass +@cindex tablature, double bass + +@funindex StringTunings + +LilyPond tablature automatically calculates the fret for +a note based on the string to which the note is assigned. +In order to do this, the tuning of the strings must be +specified. The tuning of the strings is given in the +@code{stringTunings} property. + +LilyPond comes with predefined string tunings for banjo, mandolin, +guitar, bass guitar, ukulele, violin, viola, cello, and double bass. +LilyPond automatically sets +the correct transposition for predefined tunings. The following +example is for bass guitar, which sounds an octave lower than +written. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff { + \clef "bass_8" + \relative c, { + c4 d e f + } + } + \new TabStaff { + \set TabStaff.stringTunings = #bass-tuning + \relative c, { + c4 d e f + } + } +>> +@end lilypond + +The default string tuning is @code{guitar-tuning}, which +is the standard EADGBE tuning. Some other predefined tunings are +@code{guitar-open-g-tuning}, @code{mandolin-tuning} and +@code{banjo-open-g-tuning}. The predefined string tunings +are found in @file{ly/string-tuning-init.ly}. + +@funindex contextStringTunings +@funindex \contextStringTunings +@cindex tablature, custom string tunings +@cindex custom string tunings + +Any desired string tuning can be created. The +@code{\contextStringTuning} function can be +used to define a string tuning and set it as the +@code{stringTunings} for the current context. +@code{\contextStringTuning} takes two arguments: the +symbol in which the string tuning will be stored, +and a chord construct +that defines the pitches of each string in the tuning. +The chord construct must be in absolute octave mode, +see @ref{Absolute octave entry}. The string +with the highest number (generally the lowest string) must +come first in the chord. For example, we can +define a string tuning for a four-string instrument with pitches +of @code{a''}, @code{d''}, @code{g'}, and @code{c'}: + +@lilypond[quote,verbatim] + +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \contextStringTuning #'custom-tuning + \mynotes + } +>> +@end lilypond + +The @code{stringTunings} property is also used by +@code{FretBoards} to calculate automatic fret diagrams. + +@funindex makeStringTuning +@funindex \makeStringTuning + +String tunings are used as part of the hash key +for predefined fret diagrams +(see @ref{Predefined fret diagrams}). The @code{\makeStringTuning} +function is used to create a string tuning without setting the +@code{stringTunings} property in the current context. The +arguments to @code{\makeStringTuning} are the symbol to be +used for the new string tuning and a chord construct used +to define the tuning. +The previous example could also be written as follows: + +@lilypond[quote,verbatim] +\makeStringTuning #'custom-tuning + +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #custom-tuning + \mynotes + } +>> +@end lilypond + +Internally, a string tuning is a Scheme list of string pitches, +one for each string, ordered by string number from 1 to N, +where string 1 is at the top of the tablature staff and +string N is at the bottom. This ordinarily results in ordering +from highest pitch to lowest pitch, but some instruments +(e.g. ukulele) do not have strings ordered by pitch. + +A string pitch in a string tuning list is a LilyPond pitch +object. Pitch objects are created with the Scheme function +@code{ly:make-pitch} (see @ref{Scheme functions}). + +If desired, a string tuning can be created as a Scheme +literal. The example below recreates the examples above, +but the string tuning is not saved as a separate object: + +@lilypond[quote,verbatim] +mynotes = { + c'4 e' g' c'' | + e''4 g'' b'' c''' +} + +<< + \new Staff { + \clef treble + \mynotes + } + \new TabStaff { + \set TabStaff.stringTunings = #`(,(ly:make-pitch 1 5 0) + ,(ly:make-pitch 1 1 0) + ,(ly:make-pitch 0 4 0) + ,(ly:make-pitch 0 0 0)) + \mynotes + } +>> +@end lilypond + +LilyPond automatically calculates the number of lines in the +@code{TabStaff} and the number of strings in an automatically +calculated @code{FretBoard} as the number of elements +in @code{stringTunings}. + +@cindex moderntab clef +@cindex clef, moderntab +@cindex clef, tab +@cindex tab clef + +A modern tab clef can also be used. + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff { + \clef moderntab + 1 + \break + \clef tab + 1 +} +@end lilypond + +The modern tab clef supports tablatures from 4 to 7 strings. + +@seealso +Notation Reference: +@ref{Absolute octave entry}, +@ref{Predefined fret diagrams}, +@ref{Scheme functions}. + +Installed Files: +@file{ly/string-tuning-init.ly} +@file{scm/tablature.scm}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{Tab_note_heads_engraver}. + +@knownissues +Automatic tablature calculations do not work properly in most +cases for instruments where string pitches do not vary +monotonically with string number, such as ukuleles. + +@node Fret diagram markups +@unnumberedsubsubsec Fret diagram markups + +@cindex fret diagrams +@cindex chord diagrams +@cindex diagrams, fret +@cindex diagrams, chord for fretted instruments +@cindex fret diagrams, custom +@cindex custom fret diagrams + +Fret diagrams can be added to music as a markup to the desired +note. The markup contains information about the desired fret +diagram. There are three different fret-diagram markup +interfaces: standard, terse, and verbose. The three interfaces +produce equivalent markups, but have varying amounts of +information in the markup string. Details about the +syntax of the different markup strings used to define +fret diagrams are found at @ref{Instrument Specific Markup}. + +The standard fret diagram markup string indicates the string +number and the fret number for each dot to be placed on the string. +In addition, open and unplayed (muted) strings can be indicated. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" + } + 1^\markup { + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" + } + } +>> +@end lilypond + +@cindex barre indications + +Barre indications can be added to the diagram from +the fret-diagram markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + } + 1^\markup { + \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" + } + } +>> +@end lilypond + +@cindex fret-diagram markup +@cindex ukulele + +@funindex fret-diagram +@funindex \fret-diagram + +The size of the fret diagram, and the number of frets in the diagram +can be changed in the fret-diagram markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" + } + 1^\markup { + \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" + } + } +>> +@end lilypond + +The number of strings in a fret diagram can be changed to accommodate +different instruments such as banjos and ukuleles with the fret-diagram +markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + a1 + } + } + \context Staff { + % An 'A' chord for ukulele + a'1^\markup { + \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" + } + } +>> +@end lilypond + +Fingering indications can be added, and the location of fingering labels +can be controlled by the fret-diagram markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" + } + 1^\markup { + \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" + } + } +>> +@end lilypond + +Dot radius and dot position can be controlled with the fret-diagram +markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" + } + 1^\markup { + \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" + } + } +>> +@end lilypond + +@cindex fret-diagram-terse markup + +@funindex fret-diagram-terse +@funindex \fret-diagram-terse + +The fret-diagram-terse markup string omits string numbers; the string +number is implied by the presence of semicolons. There is one semicolon +for each string in the diagram. The first semicolon corresponds to the +highest string number and the last semicolon corresponds to the first string. +Mute strings, open strings, and fret numbers can be indicated. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"x;3;2;o;1;o;" + } + 1^\markup { + \fret-diagram-terse #"x;x;o;2;3;1;" + } + } +>> +@end lilypond + +Barre indicators can be included in the fret-diagram-terse markup string. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"1-(;3;3;2;1;1-);" + } + 1^\markup { + \fret-diagram-terse #"3-(;5;5;4;3;3-);" + } + } +>> +@end lilypond + +Fingering indications can be included in the fret-diagram-terse markup string. + +@c Need to use override to enable fingerings to show this -- can we do so? +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + \clef "treble_8" + 1^\markup { + \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" + } + 1^\markup { + \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" + } + } +>> +@end lilypond + +Other fret diagram properties must be adjusted using +@code{\override} when using the fret-diagram-terse markup. + +@cindex fret-diagram-verbose markup +@cindex capo + +@funindex fret-diagram-verbose +@funindex \fret-diagram-verbose + +The fret-diagram-verbose markup string is in the format of a Scheme list. Each +element of the list indicates an item to be placed on the fret diagram. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context Staff { + \clef "treble_8" + 1^\markup { + \fret-diagram-verbose #'( + (mute 6) + (place-fret 5 3) + (place-fret 4 2) + (open 3) + (place-fret 2 1) + (open 1) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (mute 6) + (mute 5) + (open 4) + (place-fret 3 2) + (place-fret 2 3) + (place-fret 1 1) + ) + } + } +>> +@end lilypond + +Fingering indications and barres can be included in a +fret-diagram-verbose markup string. Unique to the +fret-diagram-verbose interface is a capo indication that +can be placed on the fret diagram. The capo indication is +a thick bar that covers all strings. The fret with the +capo will be the lowest fret in the fret diagram. + +@c \override is necessary to make fingering visible +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + f1 g c + } + } + \context Staff { + \clef "treble_8" + \override Voice.TextScript + #'(fret-diagram-details finger-code) = #'below-string + 1^\markup { + \fret-diagram-verbose #'( + (place-fret 6 1) + (place-fret 5 3) + (place-fret 4 3) + (place-fret 3 2) + (place-fret 2 1) + (place-fret 1 1) + (barre 6 1 1) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (place-fret 6 3 2) + (place-fret 5 2 1) + (open 4) + (open 3) + (open 2) + (place-fret 1 3 3) + ) + } + 1^\markup { + \fret-diagram-verbose #'( + (capo 3) + (mute 6) + (place-fret 4 5 1) + (place-fret 3 5 2) + (place-fret 2 5 3) + ) + } + } +>> +@end lilypond + +All other fret diagram properties must be adjusted using +@code{\override} when using the fret-diagram-verbose markup. + +@ignore +The following example shows the three fret-diagram markup +interfaces, along with examples of common tweaks. For example, +the size of the verbose fret diagram is reduced to 0.75, and the +finger indications are specified to appear below the diagram. The +terse diagram includes tweaks to specify placement of finger code +and color of dots. + +@lilypond[verbatim,ragged-right,quote] +\new Voice { + \clef "treble_8" + d4^\markup { + \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" + } + d4 d d + fis^\markup { + \override #'(size . 0.75) { + \override #'(finger-code . below-string) { + \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) + (place-fret 5 4 3) + (place-fret 4 4 4) + (place-fret 3 3 2) + (place-fret 2 2 1) + (place-fret 1 2 1)) + } + } + } + fis4 fis fis + c^\markup { + \override #'(dot-radius . 0.35) { + \override #'(finger-code . in-dot) { + \override #'(dot-color . white) { + \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" + } + } + } + } + c4 c c +} +@end lilypond +@end ignore + +@cindex customized fret diagram +@cindex fret diagram, customized +@cindex diagram, fret, customized + +@funindex fret-diagram-interface + +The graphical layout of a fret diagram can be customized according to +user preference through the properties of the +@code{fret-diagram-interface}. Details are found at +@rinternals{fret-diagram-interface}. For a fret diagram +markup, the interface properties belong to @code{Voice.TextScript}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-fret-orientations.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-markup-fret-diagrams.ly} + +@seealso +Notation Reference: +@ref{Instrument Specific Markup}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{fret-diagram-interface}. + + +@node Predefined fret diagrams +@unnumberedsubsubsec Predefined fret diagrams + + +@cindex fret diagrams +@cindex fret diagrams, ukulele +@cindex fret diagrams, mandolin +@cindex chord diagrams + +@funindex FretBoards +@funindex stringTunings + +Fret diagrams can be displayed using the @code{FretBoards} context. By +default, the @code{FretBoards} context will display fret diagrams that +are stored in a lookup table: + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { + c1 d + } +} +@end lilypond + +The default predefined fret diagrams are contained in the file +@file{predefined-guitar-fretboards.ly}. Fret diagrams are +stored based on the pitches of a chord and the value of +@code{stringTunings} that is currently in use. +@file{predefined-guitar-fretboards.ly} contains predefined +fret diagrams only for @code{guitar-tuning}. Predefined fret +diagrams can be added for other instruments or other tunings +by following the examples found in +@file{predefined-guitar-fretboards.ly}. + +Fret diagrams for the ukulele are contained in the file +@file{predefined-ukulele-fretboards.ly}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-ukulele-fretboards.ly" + +myChords = \chordmode { a1 a:m a:aug } + +\new ChordNames { + \myChords +} + +\new FretBoards { + \set stringTunings = #ukulele-tuning + \myChords +} +@end lilypond + +Fret diagrams for the mandolin are contained in the file +@file{predefined-mandolin-fretboards.ly}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-mandolin-fretboards.ly" + +myChords = \chordmode { c1 c:m7.5- c:aug } + +\new ChordNames { + \myChords +} + +\new FretBoards { + \set stringTunings = #mandolin-tuning + \myChords +} +@end lilypond + +Chord pitches can be entered +either as simultaneous music or using chord mode (see +@ref{Chord mode overview}). + +@lilypond[verbatim, ragged-right,quote] +\include "predefined-guitar-fretboards.ly" +\context FretBoards { + \chordmode { c1 } + 1 +} +@end lilypond + +@cindex chord names with fret diagrams +@cindex fret diagrams with chord names + +@funindex ChordNames +@funindex chordmode +@funindex \chordmode + +It is common that both chord names and fret diagrams are displayed together. +This is achieved by putting a @code{ChordNames} context in parallel with +a @code{FretBoards} context and giving both contexts the same music. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex transposing fret diagrams +@cindex fret diagrams, transposing +@cindex diagrams, fret, transposing + +Predefined fret diagrams are transposable, as long as a diagram for the +transposed chord is stored in the fret diagram table. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 f g +} + +mychordlist = { + \mychords + \transpose c e { \mychords } +} +<< + \context ChordNames { + \mychordlist + } + \context FretBoards { + \mychordlist + } +>> +@end lilypond + + +The predefined fret diagram table for guitar contains eight chords (major, minor, +augmented, diminished, dominant seventh, major seventh, minor seventh, dominant ninth) +for each of 17 keys. +The predefined fret diagram table for ukulele contains these chords +plus an additional three chords (major sixth, suspended second, and +suspended fourth). +A complete list of the predefined fret diagrams is +shown in @ref{Predefined fretboard diagrams}. If there is no entry in +the table for a chord, the FretBoards engraver will calculate a +fret-diagram using the automatic fret diagram functionality described in +@ref{Automatic fret diagrams}. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" +mychords = \chordmode{ + c1 c:maj9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex fret diagrams, adding custom +@cindex custom fret diagrams, adding +@cindex adding custom fret diagrams + +Fret diagrams can be added to the fret diagram table. To add a diagram, +you must specify the hash table for the diagram, the chord for the +diagram, the tuning to be used, and +a definition for the diagram. Normally, the hash table will be +@var{default-fret-table}. The diagram definition can be either a +fret-diagram-terse definition string or a fret-diagram-verbose +marking list. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table + \chordmode { c:maj9 } + #guitar-tuning + #"x;3-2;o;o;o;o;" + +mychords = \chordmode { + c1 c:maj9 +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +Different fret diagrams for the same chord name can be stored using different +octaves of pitches. The different octave should be at least two octaves +above or below the default octave, because the octaves above and below the +default octave are used for transposing fretboards. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +\storePredefinedDiagram #default-fret-table + \chordmode { c'' } + #guitar-tuning + #(offset-fret 2 (chord-shape 'bes guitar-tuning)) + +mychords = \chordmode { + c1 c'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +@cindex fretted instruments, chord shapes +@cindex chord shapes for fretted instruments + +@funindex \addChordShape +@funindex addChordShape +@funindex storePredefinedDiagram +@funindex \storePredefinedDiagram + +In addition to fret diagrams, LilyPond stores an internal list of chord +shapes. The chord shapes are fret diagrams that can be shifted along +the neck to different positions to provide different chords. Chord +shapes can be added to the internal list and then used to define +predefined fret diagrams. Because they can be moved to various +positions on the neck, chord shapes will normally not contain +any open strings. Like fret diagrams, chord shapes can be +entered as either fret-diagram-terse strings or fret-diagram-verbose +marking lists. + +@lilypond[verbatim, ragged-right, quote] +\include "predefined-guitar-fretboards.ly" + +% Add a new chord shape + +\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" + +% add some new chords based on the power chord shape + +\storePredefinedDiagram #default-fret-table + \chordmode { f'' } + #guitar-tuning + #(chord-shape 'powerf guitar-tuning) +\storePredefinedDiagram #default-fret-table + \chordmode { g'' } + #guitar-tuning + #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) + +mychords = \chordmode{ + f1 f'' g g'' +} + +<< + \context ChordNames { + \mychords + } + \context FretBoards { + \mychords + } +>> +@end lilypond + +The graphical layout of a fret diagram can be customized according to +user preference through the properties of the +@code{fret-diagram-interface}. Details are found at +@rinternals{fret-diagram-interface}. For a predefined fret diagram, +the interface properties belong to @code{FretBoards.FretBoard}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{customizing-fretboard-fret-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{defining-predefined-fretboards-for-other-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{chordchanges-for-fretboards.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fretboards-alternate-tables.ly} + + +@seealso +Notation Reference: +@ref{Custom tablatures}, +@ref{Automatic fret diagrams}, +@ref{Chord mode overview}, +@ref{Predefined fretboard diagrams}. + +Installed Files: +@file{ly/predefined-guitar-fretboards.ly}, +@file{ly/predefined-guitar-ninth-fretboards.ly}, +@file{ly/predefined-ukulele-fretboards.ly}, +@file{ly/predefined-mandolin-fretboards.ly}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals {fret-diagram-interface}. + + +@node Automatic fret diagrams +@unnumberedsubsubsec Automatic fret diagrams + +@cindex fret diagrams, automatic +@cindex chord diagrams, automatic +@cindex automatic fret diagrams +@cindex automatic chord diagrams + +Fret diagrams can be automatically created from entered notes using the +@code{FretBoards} context. If no predefined diagram is available for +the entered notes in the active @code{stringTunings}, this context +calculates strings and frets that can be used to play the notes. + +@lilypond[quote,ragged-right,verbatim] +<< + \context ChordNames { + \chordmode { + f1 g + } + } + \context FretBoards { + 1 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +@funindex predefinedFretboardsOff +@funindex \predefinedFretboardsOff +@funindex predefinedFretboardsOn +@funindex \predefinedFretboardsOn + +As no predefined diagrams are loaded by default, automatic calculation +of fret diagrams is the default behavior. Once default diagrams are +loaded, automatic calculation can be enabled and disabled with predefined +commands: + +@lilypond[quote,ragged-right,verbatim] + +\storePredefinedDiagram #default-fret-table + + #guitar-tuning + #"x;3-1-(;5-2;5-3;5-4;3-1-1-);" +<< + \context ChordNames { + \chordmode { + c1 c c + } + } + \context FretBoards { + 1 + \predefinedFretboardsOff + 1 + \predefinedFretboardsOn + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + 1 + } +>> +@end lilypond + + + +Sometimes the fretboard calculator will be unable to find +an acceptable diagram. This can often be remedied by +manually assigning a note to a string. In many cases, only one +note need be manually placed on a string; the rest of +the notes will then be placed appropriately by the +@code{FretBoards} context. + +@cindex fret diagrams, adding fingerings +@cindex fingerings, adding to fret diagrams + +Fingerings can be added to FretBoard fret diagrams. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + c1 d:m + } + } + \context FretBoards { + 1 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +@funindex minimumFret + +The minimum fret to be used in calculating strings and frets for +the FretBoard context can be set with the @code{minimumFret} +property. + +@lilypond[quote, verbatim] +<< + \context ChordNames { + \chordmode { + d1:m d:m + } + } + \context FretBoards { + 1 + \set FretBoards.minimumFret = #5 + 1 + } + \context Staff { + \clef "treble_8" + 1 + 1 + } +>> +@end lilypond + +The strings and frets for the @code{FretBoards} context depend +on the @code{stringTunings} property, which has the same meaning +as in the TabStaff context. See @ref{Custom tablatures} for +information on the @code{stringTunings} property. + +The graphical layout of a fret diagram can be customized according to +user preference through the properties of the +@code{fret-diagram-interface}. Details are found at +@rinternals{fret-diagram-interface}. For a @code{FretBoards} fret +diagram, the interface properties belong to +@code{FretBoards.FretBoard}. + + +@predefined +@code{\predefinedFretboardsOff}, +@code{\predefinedFretboardsOn}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Custom tablatures}. + +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals {fret-diagram-interface}. + +@knownissues +Automatic fretboard calculations do not work properly for instruments +with non-monotonic tunings. + + +@node Right-hand fingerings +@unnumberedsubsubsec Right-hand fingerings + +@cindex fretted instruments, right hand fingerings +@cindex fingerings, right hand for fretted instruments +@cindex right hand fingerings for fretted instruments + +@funindex rightHandFinger +@funindex \rightHandFinger + +Right-hand fingerings @var{p-i-m-a} must be entered within a +chord construct @code{<>} for them to be printed in the score, +even when applied to a single note. + +@warning{There @strong{must} be a hyphen before +@code{@bs{}rightHandFinger} and a space before the closing @code{>}.} + +@lilypond[quote,verbatim,relative=0] +\clef "treble_8" +4 + + + +1 +@end lilypond + +For convenience, you can abbreviate @code{\rightHandFinger} to something +short, for example @code{RH}, + +@example +#(define RH rightHandFinger) +@end example + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{placement-of-right-hand-fingerings.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingerings,-string-indications,-and-right-hand-fingerings.ly} + + +@seealso +Snippets: +@rlsr{Fretted strings}. + +Internals Reference: +@rinternals{StrokeFinger}. + + +@node Guitar +@subsection Guitar + +Most of the notational issues associated with guitar music are +covered sufficiently in the general fretted strings section, but there +are a few more worth covering here. Occasionally users want to +create songbook-type documents having only lyrics with chord +indications above them. Since LilyPond is a music typesetter, +it is not recommended for documents that have no music notation +in them. A better alternative is a word processor, text editor, +or, for experienced users, a typesetter like GuitarTeX. + +@menu +* Indicating position and barring:: +* Indicating harmonics and dampened notes:: +* Indicating power chords:: +@end menu + +@node Indicating position and barring +@unnumberedsubsubsec Indicating position and barring + +@cindex indicating position and barring for fretted instruments +@cindex fretted instruments, indicating position and barring + +This example demonstrates how to include guitar position and +barring indications. + +@lilypond[quote,ragged-right,verbatim,relative=0] +\clef "treble_8" +b16 d g b e +\textSpannerDown +\override TextSpanner #'(bound-details left text) = #"XII " +g16\startTextSpan +b16 e g e b g\stopTextSpan +e16 b g d +@end lilypond + + +@seealso +Notation Reference: +@ref{Text spanners}. + +Snippets: +@rlsr{Fretted strings}, +@rlsr{Expressive marks}. + + +@node Indicating harmonics and dampened notes +@unnumberedsubsubsec Indicating harmonics and dampened notes + +@cindex fretted instruments, dampened notes +@cindex fretted instruments, harmonics +@cindex dampened notes on fretted instruments +@cindex harmonics on fretted instruments + +Special note heads can be used to indicate dampened notes or +harmonics. Harmonics are normally further explained with a +text markup. + +@lilypond[quote,ragged-right,verbatim] +\relative c' { + \clef "treble_8" + \override Staff.NoteHead #'style = #'harmonic-mixed + d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 +} +@end lilypond + +Dampened notes (also called @notation{dead notes}) are supported +within normal and tablature staves: + +@lilypond[quote,ragged-right,verbatim] +music = \relative c' { + < a\3 \deadNote c\2 a'\1 >4 + < b\3 \deadNote d\2 b'\1 > + < c\3 \deadNote e\2 c'\1 > + \deadNotesOn + \times 2/3 { g8 b e } + \deadNotesOff + < a,\3 c\2 e\1 >1 +} +\new StaffGroup << + \new Staff { + \clef "treble_8" + \music + } + \new TabStaff { + \music + } +>> +@end lilypond + +Another playing technique (especially used on electric guitars) is +called @notation{palm mute}. The string is hereby partly muted by the +palm of the striking hand (hence the name). Lilypond supports +the notation of palm mute-style notes by changing the note head to a +triangle shape. + +@lilypond[quote,ragged-right,verbatim] +\new Voice { % Warning: explicit Voice instantiation is + % required to have palmMuteOff work properly + % when palmMuteOn comes at the beginning of + % the piece. + \relative c, { + \clef "G_8" + \palmMuteOn + e8^\markup { \musicglyph #"noteheads.u2do" = palm mute } + < e b' e > e + \palmMuteOff + e e \palmMute e e e | + e8 \palmMute { e e e } e e e e | + < \palmMute e b' e >8 \palmMute { e e e } < \palmMute e b' e >2 + } +} +@end lilypond + +@seealso +Snippets: +@rlsr{Fretted strings}. + +Notation Reference: +@ref{Special note heads}, +@ref{Note head styles}. + + +@node Indicating power chords +@unnumberedsubsubsec Indicating power chords + +@funindex powerChords +@funindex \powerChords + +@cindex power chords +@cindex chords, power + +Power chords and their symbols can be engraved in chord mode or as chord +constructs: + +@lilypond[quote,ragged-right,verbatim] +ChordsAndSymbols = { + \chordmode { + \powerChords + e,,1:1.5 + a,,1:1.5.8 + \set minimumFret = #8 + c,1:1.5 + f,1:1.5.8 + } + \set minimumFret = #5 + 1 + 1 +} +\score { + << + \new ChordNames { + \ChordsAndSymbols + } + \new Staff { + \clef "treble_8" + \ChordsAndSymbols + } + \new TabStaff { + \ChordsAndSymbols + } + >> +} +@end lilypond + +Power chord symbols are automatically switched off as soon as one of the +other common chord modifier is used: + +@lilypond[quote,ragged-right,verbatim] +mixedChords = \chordmode { + c,1 + \powerChords + b,,1:1.5 + fis,,1:1.5.8 + g,,1:m +} +\score { + << + \new ChordNames { + \mixedChords + } + \new Staff { + \clef "treble_8" + \mixedChords + } + \new TabStaff { + \mixedChords + } + >> +} +@end lilypond + +@seealso +Music Glossary: +@rglos{power chord}. + +Notation Reference: +@ref{Extended and altered chords}, +@ref{Printing chord names}. + +Snippets: +@rlsr{Fretted strings}. + + +@node Banjo +@subsection Banjo + +@menu +* Banjo tablatures:: +@end menu + +@node Banjo tablatures +@unnumberedsubsubsec Banjo tablatures + +@cindex banjo tablatures +@cindex tablature, banjo + +LilyPond has basic support for the five-string banjo. When making tablatures +for five-string banjo, use the banjo tablature format function to get +correct fret numbers for the fifth string: + +@c due to crazy intervals of banjo music, absolute pitch is recommended + +@lilypond[quote,ragged-right,verbatim] +\new TabStaff << + \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo + \set TabStaff.stringTunings = #banjo-open-g-tuning + { + \stemDown + g8 d' g'\5 a b g e d' | + g4 d''8\5 b' a'\2 g'\5 e'\2 d' | + g4 + } +>> +@end lilypond + +@cindex banjo tunings +@cindex tunings, banjo + +@funindex banjo-c-tuning +@funindex banjo-modal-tuning +@funindex banjo-open-d-tuning +@funindex banjo-open-dm-tuning +@funindex four-string-banjo + +A number of common tunings for banjo are predefined in LilyPond: +@code{banjo-c-tuning} (gCGBD), @code{banjo-modal-tuning} (gDGCD), +@code{banjo-open-d-tuning} (aDF#AD) and @code{banjo-open-dm-tuning} +(aDFAD). + +These tunings may be converted to four-string banjo tunings using the +@code{four-string-banjo} function: + +@example +\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) +@end example + + +@seealso +Snippets: +@rlsr{Fretted strings}. + +Installed Files: +@file{scm/string-tunings-init.scm} contains predefined banjo tunings. diff --git a/Documentation/notation/input.itely b/Documentation/notation/input.itely new file mode 100644 index 0000000000..1085477059 --- /dev/null +++ b/Documentation/notation/input.itely @@ -0,0 +1,2540 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node General input and output +@chapter General input and output + +This section deals with general LilyPond input and output issues, +rather than specific notation. + +@menu +* Input structure:: +* Titles and headers:: +* Working with input files:: +* Controlling output:: +* MIDI output:: +@end menu + + +@node Input structure +@section Input structure + +The main format of input for LilyPond are text files. By convention, +these files end with @file{.ly}. + +@menu +* Structure of a score:: +* Multiple scores in a book:: +* Multiple output files from one input file:: +* Output file names:: +* File structure:: +@end menu + + +@node Structure of a score +@subsection Structure of a score + +@funindex \score + +A @code{\score} block must contain a single music expression +delimited by curly brackets: + +@example +\score @{ +... +@} +@end example + +@warning{There must be @strong{only one} outer music expression in +a @code{\score} block, and it @strong{must} be surrounded by +curly brackets.} + +This single music expression may be of any size, and may contain +other music expressions to any complexity. All of these examples +are music expressions: + +@example +@{ c'4 c' c' c' @} +@end example + +@lilypond[verbatim,quote] +{ + { c'4 c' c' c' } + { d'4 d' d' d' } +} +@end lilypond + +@lilypond[verbatim,quote] +<< + \new Staff { c'4 c' c' c' } + \new Staff { d'4 d' d' d' } +>> +@end lilypond + +@example +@{ + \new GrandStaff << + \new StaffGroup << + \new Staff @{ \flute @} + \new Staff @{ \oboe @} + >> + \new StaffGroup << + \new Staff @{ \violinI @} + \new Staff @{ \violinII @} + >> + >> +@} +@end example + +Comments are one exception to this general rule. (For others see +@ref{File structure}.) Both single-line comments and comments +delimited by @code{%@{ .. %@}} may be placed anywhere within an +input file. They may be placed inside or outside a @code{\score} +block, and inside or outside the single music expression within a +@code{\score} block. + +Remember that even in a file containing only a @code{\score} block, it +is implicitly enclosed in a \book block. A \book block in a source +file produces at least one output file, and by default the name of the +output file produced is derived from the name of the input file, so +@file{fandangoforelephants.ly} will produce +@file{fandangoforelephants.pdf}. + +(For more details about @code{\book} blocks, see +@ref{Multiple scores in a book}, +@ref{Multiple output files from one input file} @ref{File structure}.) + +@seealso +Learning Manual: +@rlearning{Working on input files}, +@rlearning{Music expressions explained}, +@rlearning{Score is a (single) compound musical expression}. + + +@node Multiple scores in a book +@subsection Multiple scores in a book + +@funindex \book +@cindex movements, multiple + +A document may contain multiple pieces of music and text. Examples +of these are an etude book, or an orchestral part with multiple +movements. Each movement is entered with a @code{\score} block, + +@example +\score @{ + @var{..music..} +@} +@end example + +and texts are entered with a @code{\markup} block, + +@example +\markup @{ + @var{..text..} +@} +@end example + +@funindex \book + +All the movements and texts which appear in the same @file{.ly} file +will normally be typeset in the form of a single output file. + +@example +\score @{ + @var{..} +@} +\markup @{ + @var{..} +@} +\score @{ + @var{..} +@} +@end example + +One important exception is within lilypond-book documents, +where you explicitly have to add a @code{\book} block, otherwise only +the first @code{\score} or @code{\markup} will appear in the output. + +The header for each piece of music can be put inside the @code{\score} +block. The @code{piece} name from the header will be printed before +each movement. The title for the entire book can be put inside the +@code{\book}, but if it is not present, the @code{\header} which is at +the top of the file is inserted. + +@example +\header @{ + title = "Eight miniatures" + composer = "Igor Stravinsky" +@} +\score @{ + @dots{} + \header @{ piece = "Romanze" @} +@} +\markup @{ + ..text of second verse.. +@} +\markup @{ + ..text of third verse.. +@} +\score @{ + @dots{} + \header @{ piece = "Menuetto" @} +@} +@end example + +@funindex \bookpart + +Pieces of music may be grouped into book parts using @code{\bookpart} +blocks. Book parts are separated by a page break, and can start with a +title, like the book itself, by specifying a @code{\header} block. + +@example +\bookpart @{ + \header @{ + title = "Book title" + subtitle = "First part" + @} + \score @{ @dots{} @} + @dots{} +@} +\bookpart @{ + \header @{ + subtitle = "Second part" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + +@node Multiple output files from one input file +@subsection Multiple output files from one input file + +If you want multiple output files from the same @file{.ly} file, +then you can add multiple @code{\book} blocks, where each +such \book block will result in a separate output file. +If you do not specify any @code{\book} block in the +input file, LilyPond will implicitly treat the whole +file as a single \book block, see +@ref{File structure}. + +When producing multiple files from a single source file, Lilypond +ensures that none of the output files from any @code{\book} block +overwrites the output file produced by a preceding @code{\book} from +the same input file. + +It does this by adding a suffix to the output name for each +@code{\book} which uses the default output file name derived from the +input source file. + +The default behaviour is to append a version-number suffix for each +name which may clash, so + +@example +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +in source file @file{eightminiatures.ly} +will produce + +@itemize +@item +@file{eightminiatures.pdf}, +@item +@file{eightminiatures-1.pdf} and +@item +@file{eightminiatures-2.pdf}. +@end itemize + +@node Output file names +@subsection Output file names + +@funindex \bookOutputSuffix +@funindex \bookOutputName + +Lilypond provides facilities to allow you to control what file names +are used by the various back-ends when producing output files. + +In the previous section, we saw how Lilypond prevents name-clashes when +producing several ouputs from a single source file. You also have the +ability to specify your own suffixes for each @code{\book} block, so +for example you can produce files called +@file{eightminiatures-Romanze.pdf}, @file{eightminiatures-Menuetto.pdf} +and @file{eightminiatures-Nocturne.pdf} by adding a +@code{\bookOutputSuffix} declaration inside each @code{\book} block. + +@example +\book @{ + \bookOutputSuffix "Romanze" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Menuetto" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Nocturne" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +You can also specify a different output filename for @code{book} block, +by using @code{\bookOutputName} declarations + +@example +\book @{ + \bookOutputName "Romanze" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Menuetto" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Nocturne" + \score @{ @dots{} @} +  \layout @{ @dots{} @} +@} +@end example + +The file above will produce these output files: + +@itemize +@item +@file{Romanze.pdf}, +@item +@file{Menuetto.pdf} and +@item +@file{Nocturne.pdf}. +@end itemize + + +@node File structure +@subsection File structure + +@funindex \paper +@funindex \midi +@funindex \layout +@funindex \header +@funindex \score +@funindex \book +@funindex \bookpart + +A @file{.ly} file may contain any number of toplevel expressions, where a +toplevel expression is one of the following: + +@itemize +@item +An output definition, such as @code{\paper}, @code{\midi}, and +@code{\layout}. Such a definition at the toplevel changes the default +book-wide settings. If more than one such definition of +the same type is entered at the top level any definitions in the later +expressions have precedence. + +@item +A direct scheme expression, such as +@code{#(set-default-paper-size "a7" 'landscape)} or +@code{#(ly:set-option 'point-and-click #f)}. + +@item +A @code{\header} block. This sets the global header block. This +is the block containing the definitions for book-wide settings, like +composer, title, etc. + +@item +A @code{\score} block. This score will be collected with other +toplevel scores, and combined as a single @code{\book}. +This behavior can be changed by setting the variable +@code{toplevel-score-handler} at toplevel. The default handler is +defined in the init file @file{../scm/lily.scm}. + +@item +A @code{\book} block logically combines multiple movements +(i.e., multiple @code{\score} blocks) in one document. If there +are a number of @code{\score}s, one output file will be created +for each @code{\book} block, in which all corresponding movements +are concatenated. The only reason to explicitly specify +@code{\book} blocks in a @file{.ly} file is if you wish to create +multiple output files from a single input file. One exception is +within lilypond-book documents, where you explicitly have to add +a @code{\book} block if you want more than a single @code{\score} +or @code{\markup} in the same example. This behavior can be +changed by setting the variable @code{toplevel-book-handler} at +toplevel. The default handler is defined in the init file +@file{../scm/lily.scm}. + +@item +A @code{\bookpart} block. A book may be divided into several parts, +using @code{\bookpart} blocks, in order to ease the page breaking, +or to use different @code{\paper} settings in different parts. + +@item +A compound music expression, such as +@example +@{ c'4 d' e'2 @} +@end example + +This will add the piece in a @code{\score} and format it in a +single book together with all other toplevel @code{\score}s and music +expressions. In other words, a file containing only the above +music expression will be translated into + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + @{ c'4 d' e'2 @} + @} + @} + @} + \layout @{ @} + \header @{ @} +@} +@end example + +This behavior can be changed by setting the variable +@code{toplevel-music-handler} at toplevel. The default handler is +defined in the init file @file{../scm/lily.scm}. + +@item +A markup text, a verse for example +@example +\markup @{ + 2. The first line verse two. +@} +@end example + +Markup texts are rendered above, between or below the scores or music +expressions, wherever they appear. + +@cindex variables + +@item +A variable, such as +@example +foo = @{ c4 d e d @} +@end example + +This can be used later on in the file by entering @code{\foo}. The +name of a variable should have alphabetic characters only; no +numbers, underscores or dashes. + +@end itemize + +The following example shows three things that may be entered at +toplevel + +@example +\layout @{ + % Don't justify the output + ragged-right = ##t +@} + +\header @{ + title = "Do-re-mi" +@} + +@{ c'4 d' e2 @} +@end example + + +At any point in a file, any of the following lexical instructions can +be entered: + +@itemize +@item @code{\version} +@item @code{\include} +@item @code{\sourcefilename} +@item @code{\sourcefileline} +@item +A single-line comment, introduced by a leading @code{%} sign. + +@item +A multi-line comment delimited by @code{%@{ .. %@}}. + +@end itemize + +@cindex whitespace + +Whitespace between items in the input stream is generally ignored, +and may be freely omitted or extended to enhance readability. +However, whitespace should always be used in the following +circumstances to avoid errors: + +@itemize +@item Around every opening and closing curly bracket. +@item After every command or variable, i.e. every item that +begins with a @code{\} sign. +@item After every item that is to be interpreted as a Scheme +expression, i.e. every item that begins with a @code{#} sign. +@item To separate all elements of a Scheme expression. +@item In @code{lyricmode} to separate all the terms in both +@code{\override} and @code{\set} commands. In particular, spaces +must be used around the dot and the equals sign in commands like +@code{\override Score . LyricText #'font-size = #5} and before and +after the entire command. + +@end itemize + + +@seealso +Learning Manual: +@rlearning{How LilyPond input files work}. + + +@node Titles and headers +@section Titles and headers + +Almost all printed music includes a title and the composer's name; +some pieces include a lot more information. + +@menu +* Creating titles headers and footers:: +* Custom headers footers and titles:: +* Reference to page numbers:: +* Table of contents:: +@end menu + + +@node Creating titles headers and footers +@subsection Creating titles, headers, and footers + +@menu +* Title blocks explained:: +* Default layout of book and score title blocks:: +* Default layout of headers and footers:: +@end menu + + +@node Title blocks explained +@unnumberedsubsubsec Title blocks explained + +@c TODO: figure out how \bookpart titles work + +There are two types of title blocks: the main title block that appears +above of the first @code{\score} of a book, and individual title +blocks that appear within each @code{\score} block. Text fields for +both types are entered using a @code{\header} block. + +If the book only has a single score, the @code{\header} block may be +placed inside or outside of the @code{\score} block. + +@warning{Remember when adding a @bs{}@code{header} block inside a +@bs{}@code{score} block, that the music expression must come before the +@bs{}@code{header} block.} + +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\header { + title = "SUITE I." + composer = "J. S. Bach." +} + +\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." + } +} + +\score { + \new Staff \relative b { + \clef bass + \key g \major + \partial 16 b16 | + 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 + +Text fields from the main title block of a book can be displayed in all +@code{\score} blocks, or manually suppressed: + +@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 + +@seealso +Notation Reference: +@ref{File structure}, +@ref{Custom layout for title blocks}. + + +@node Default layout of book and score title blocks +@unnumberedsubsubsec Default layout of book and score title blocks + +The layout and formatting of title blocks are controlled by two +@code{\paper} variables; @code{bookTitleMarkup} for the main +@code{\header} title block and @code{scoreTitleMarkup} for individual +@code{\header} blocks within a @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" +} + +\score { + { s1 } + \header { + % The following fields are placed at opposite ends of the same line + piece = "Piece" + opus = "Opus" + } +} +@end lilypond + +@c Is the bit about \null markups true? -mp + +Text fields left unset in a @code{\header} block are replaced with +@code{\null} markups so that the space is not wasted. + +The default settings for @code{scoreTitleMarkup} place the @code{piece} +and @code{opus} text fields at opposite ends of the same line. + +@cindex breakbefore + +Use the @code{breakbefore} variable inside a @code{\header} block +that is itself in a @code{\score} block, to make the top-level +@code{\header} block titles appear on the first page on their own, with +the music (defined in the @code{\score} block) starting on the next. + +@lilypond[papersize=a8landscape,verbatim,noragged-right] +\book { + \header { + title = "This is my Title" + subtitle = "This is my Subtitle" + copyright = "This is the bottom of the first page" + } + \score { + \repeat unfold 4 { e'' e'' e'' e'' } + \header { + piece = "This is the Music" + breakbefore = ##t + } + } +} +@end lilypond + +@seealso +Learning Manual: +@rlearning{How LilyPond input files work}, + +Notation Reference: +@ref{File structure}. + +Installed Files: +@file{ly/titling-init.ly}. + +@node Default layout of headers and footers +@unnumberedsubsubsec Default layout of headers and footers + +@emph{Headers} and @emph{footers} are lines of text appearing at +the top and bottom of pages, separate from the main text of a book. +They are controlled by the following @code{\paper} variables: + +@itemize +@item @code{oddHeaderMarkup} +@item @code{evenHeaderMarkup} +@item @code{oddFooterMarkup} +@item @code{evenFooterMarkup} +@end itemize + +These markup variables can only access text fields from top-level +@code{\header} blocks (which apply to all scores in the book) and are +defined in @file{ly/titling-init.ly}. By default: + +@itemize + +@item +page numbers are automatically placed on the top far left (if even) or +top far right (if odd), starting from the second page. + +@item +the @code{instrument} text field is placed in the center of every +page, starting from the second page. + +@item +the @code{copyright} text is centered on the bottom of the first page. + +@item +the @code{tagline} is centered on the bottom of the last page, and below +the @code{copyright} text if there is only a single page. + +@end itemize + +@lilypond[papersize=a8landscape] +\book { + \score { + \relative c' { + c4 d e f + } + } +} +@end lilypond + +The default tagline can be changed by adding a @code{tagline} in the +top-level @code{\header} block. + +@lilypond[papersize=a8landscape,verbatim] +\book { + \header { + tagline = "... music notation for Everyone" + } + \score { + \relative c' { + c4 d e f + } + } +} +@end lilypond + +To remove the @code{tagline} set the value to @code{##f}. + + +@node Custom headers footers and titles +@subsection 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 +* Custom text formatting for title blocks:: +* Custom layout for title blocks:: +* Custom layout for headers and footers:: +@end menu + + +@node Custom text formatting for title blocks +@unnumberedsubsubsec Custom text formatting for title blocks + +Standard @code{\markup} commands can be used to customize any header, +footer and title text within the @code{\header} block. + +@lilypond[quote,verbatim,noragged-right] +\score { + { s1 } + \header { + piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" } + subtitle = \markup { \italic "(Excerpt)" } + } +} +@end lilypond + +@seealso +Notation Reference: +@ref{Formatting text}. + + +@node Custom layout for title blocks +@unnumberedsubsubsec Custom layout for title blocks + +@code{\markup} commands in the @code{\header} block are useful for +simple text formatting, but they do not allow precise control over the +placement of titles. To customize the placement of the text fields, +use either or both of the following @code{\paper} variables: + +@itemize +@item @code{bookTitleMarkup} +@item @code{scoreTitleMarkup} +@end itemize + +These markup variables are discussed in +@ref{Default layout of book and score title blocks}. + +The default settings for @code{scoreTitleMarkup} as defined in +@file{ly/titling-init.ly} are: + +@example +scoreTitleMarkup = \markup @{ \column @{ + \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @} + \fill-line @{ + \fromproperty #'header:piece + \fromproperty #'header:opus + @} +@} +@} +@end example + +This places the @code{piece} and @code{opus} text fields at opposite +ends of the same line: + +@lilypond[quote,verbatim,noragged-right] +\score { + { s1 } + \header { + piece = "PRAELUDIUM I" + opus = "BWV 846" + } +} +@end lilypond + +This example redefines @code{scoreTitleMarkup} so that the @code{piece} +text field is centered and in a large, bold font. + +@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 + +Text fields normally reserved for the main title block can be included +in individual score title blocks with the @code{print-all-headers} +placed inside the @code{\paper} block. A disadvantage of using this +method is that the text fields that are intended specifically for the +top-level @code{\header} block need to be manually suppressed in every +@code{\score} block. See @ref{Title blocks explained}. + +To avoid this, add the desired text field to the @code{scoreTitleMarkup} +definition. In the following example, the @code{composer} text field +(normally associated with @code{bookTitleMarkup}) is added to +@code{scoreTitleMarkup}, allowing each score to list a different +composer: + +@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 + +It is also possible to create your own custom text fields, and refer to +them in the markup definition. + +@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 + + +@node Custom layout for headers and footers +@unnumberedsubsubsec Custom layout for headers and footers + +@c can make-header and make-footer be removed from +@c paper-defaults-init.ly? -mp + +@code{\markup} commands in the @code{\header} block are useful for +simple text formatting, but they do not allow precise control over the +placement of headers and footers. To customize the placement of +the text fields, use either or both of the following @code{\paper} +variables: + +@itemize +@item @code{oddHeaderMarkup} +@item @code{evenHeaderMarkup} +@item @code{oddFooterMarkup} +@item @code{evenFooterMarkup} +@end itemize + +These markup variables are discussed in +@ref{Default layout of book and score title blocks}. + +The following example centers page numbers at the bottom of every +page. First, the default settings for @code{oddHeaderMarkup} and +@code{evenHeaderMarkup} are removed by defining each as a @emph{null} +markup. Then, @code{oddFooterMarkup} is redefined with the page +number centered. Finally, @code{evenFooterMarkup} is given the +same layout by defining it as @code{\oddFooterMarkup}: + +@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 + + +@node Reference to page numbers +@subsection Reference to page numbers + +A particular place of a score can be marked using the @code{\label} +command, either at top-level or inside music. This label can then be +referred to in a markup, to get the number of the page where the marked +point is placed, using the @code{\page-ref} markup command. + +@lilypond[verbatim] +\header { tagline = ##f } +\book { + \label #'firstScore + \score { + { + c'1 + \pageBreak \mark A \label #'markA + c'1 + } + } + \markup { The first score begins on page \page-ref #'firstScore "0" "?" } + \markup { Mark A is on page \page-ref #'markA "0" "?" } +} +@end lilypond + +The @code{\page-ref} markup command takes three arguments: +@enumerate +@item the label, a scheme symbol, eg. @code{#'firstScore}; +@item a markup that will be used as a gauge to estimate the dimensions +of the markup; +@item a markup that will be used in place of the page number if the label +is not known; +@end enumerate + +The reason why a gauge is needed is that, at the time markups are +interpreted, the page breaking has not yet occurred, so the page numbers +are not yet known. To work around this issue, the actual markup +interpretation is delayed to a later time; however, the dimensions of +the markup have to be known before, so a gauge is used to decide these +dimensions. If the book has between 10 and 99 pages, it may be "00", +ie. a two digit number. + + +@predefined +@funindex \label +@code{\label}, +@funindex \page-ref +@code{\page-ref}. +@endpredefined + + +@node Table of contents +@subsection Table of contents +A table of contents is included using the @code{\markuplines \table-of-contents} +command. The elements which should appear in the table of contents are +entered with the @code{\tocItem} command, which may be used either at +top-level, or inside a music expression. + +@verbatim +\markuplines \table-of-contents +\pageBreak + +\tocItem \markup "First score" +\score { + { + c'4 % ... + \tocItem \markup "Some particular point in the first score" + d'4 % ... + } +} + +\tocItem \markup "Second score" +\score { + { + e'4 % ... + } +} +@end verbatim + +The markups which are used to format the table of contents are defined +in the @code{\paper} block. The default ones are @code{tocTitleMarkup}, +for formatting the title of the table, and @code{tocItemMarkup}, for +formatting the toc elements, composed of the element title and page +number. These variables may be changed by the user: + +@verbatim +\paper { + %% Translate the toc title into French: + tocTitleMarkup = \markup \huge \column { + \fill-line { \null "Table des matières" \null } + \hspace #1 + } + %% use larger font size + tocItemMarkup = \markup \large \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page + } +} +@end verbatim + +Note how the toc element text and page number are referred to in +the @code{tocItemMarkup} definition. + +New commands and markups may also be defined to build more elaborated +table of contents: +@itemize +@item first, define a new markup variable in the @code{\paper} block +@item then, define a music function which aims at adding a toc element +using this markup paper variable. +@end itemize + +In the following example, a new style is defined for entering act names +in the table of contents of an opera: + +@verbatim +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) +@end verbatim + +@lilypond[line-width=11.0\cm] +\header { tagline = ##f } +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) + +\book { + \markuplines \table-of-contents + \tocAct \markup { Atto Primo } + \tocItem \markup { Coro. Viva il nostro Alcide } + \tocItem \markup { Cesare. Presti omai l'Egizzia terra } + \tocAct \markup { Atto Secondo } + \tocItem \markup { Sinfonia } + \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } + \markup \null +} +@end lilypond + +Dots can be added to fill the line between an item and its page number: + +@lilypond[verbatim,quote] +\header { tagline = ##f } +\paper { + tocItemMarkup = \tocItemWithDotsMarkup +} + +\book { + \markuplines \table-of-contents + \tocItem \markup { Allegro } + \tocItem \markup { Largo } + \markup \null +} +@end lilypond + + +@seealso +Init files: @file{../ly/toc-init.ly}. + + +@predefined +@funindex \table-of-contents +@code{\table-of-contents}, +@funindex \tocItem +@code{\tocItem}. +@endpredefined + + +@node Working with input files +@section Working with input files + +@menu +* Including LilyPond files:: +* Different editions from one source:: +* Text encoding:: +* Displaying LilyPond notation:: +@end menu + + +@node Including LilyPond files +@subsection Including LilyPond files + +@funindex \include +@cindex including files + +A large project may be split up into separate files. To refer to +another file, use + +@example +\include "otherfile.ly" +@end example + +The line @code{\include "otherfile.ly"} is equivalent to pasting the +contents of @file{otherfile.ly} into the current file at the place +where the @code{\include} appears. For example, in a large +project you might write separate files for each instrument part +and create a @qq{full score} file which brings together the +individual instrument files. Normally the included file will +define a number of variables which then become available +for use in the full score file. Tagged sections can be +marked in included files to assist in making them usable in +different places in a score, see @ref{Different editions from +one source}. + +Files in the current working directory may be referenced by +specifying just the file name after the @code{\include} command. +Files in other locations may be included by giving either a full +path reference or a relative path reference (but use the UNIX +forward slash, /, rather than the DOS/Windows back slash, \, as the +directory separator.) For example, if @file{stuff.ly} is located +one directory higher than the current working directory, use + +@example +\include "../stuff.ly" +@end example + +@noindent +or if the included orchestral parts files are all located in a +subdirectory called @file{parts} within the current directory, use + +@example +\include "parts/VI.ly" +\include "parts/VII.ly" +... etc +@end example + +Files which are to be included can also contain @code{\include} +statements of their own. By default, these second-level +@code{\include} statements are not interpreted until they have +been brought into the main file, so the file names they specify +must all be relative to the directory containing the main file, +not the directory containing the included file. However, +this behavior can be changed by passing the option +@code{-drelative-includes} option at the command line +(or by adding @code{#(ly:set-option 'relative-includes #t)} +at the top of the main input file). With @code{relative-includes} +set, the path for each @code{\include} command will be taken +relative to the file containing that command. This behavior is +recommended and it will become the default behavior in a future +version of lilypond. + +Files can also be included from a directory in a search path +specified as an option when invoking LilyPond from the command +line. The included files are then specified using just their +file name. For example, to compile @file{main.ly} which includes +files located in a subdirectory called @file{parts} by this method, +cd to the directory containing @file{main.ly} and enter + +@example +lilypond --include=parts main.ly +@end example + +and in main.ly write + +@example +\include "VI.ly" +\include "VII.ly" +... etc +@end example + +Files which are to be included in many scores may be placed in +the LilyPond directory @file{../ly}. (The location of this +directory is installation-dependent - see +@rlearning{Other sources of information}). These files can then +be included simply by naming them on an @code{\include} statement. +This is how the language-dependent files like @file{english.ly} are +included. + +LilyPond includes a number of files by default when you start +the program. These includes are not apparent to the user, but the +files may be identified by running @code{lilypond --verbose} from +the command line. This will display a list of paths and files that +LilyPond uses, along with much other information. Alternatively, +the more important of these files are discussed in +@rlearning{Other sources of information}. These files may be +edited, but changes to them will be lost on installing a new +version of LilyPond. + +Some simple examples of using @code{\include} are shown in +@rlearning{Scores and parts}. + + +@seealso +Learning Manual: +@rlearning{Other sources of information}, +@rlearning{Scores and parts}. + + +@knownissues + +If an included file is given a name which is the same as one in +LilyPond's installation files, LilyPond's file from the +installation files takes precedence. + + + +@node Different editions from one source +@subsection Different editions from one source + +Several mechanisms are available to facilitate the generation +of different versions of a score from the same music source. +Variables are perhaps most useful for combining lengthy sections +of music and/or annotation in various ways, while tags are more +useful for selecting one from several alternative shorter sections +of music. Whichever method is used, separating the notation from +the structure of the score will make it easier to change the +structure while leaving the notation untouched. + +@menu +* Using variables:: +* Using tags:: +* Using global settings:: +@end menu + +@node Using variables +@unnumberedsubsubsec Using variables + +@cindex variables, use of + +If sections of the music are defined in variables they can be +reused in different parts of the score, see @rlearning{Organizing +pieces with variables}. For example, an @notation{a cappella} +vocal score frequently includes a piano reduction of the parts +for rehearsal purposes which is identical to the vocal music, so +the music need be entered only once. Music from two variables +may be combined on one staff, see @ref{Automatic part combining}. +Here is an example: + +@lilypond[verbatim,quote] +sopranoMusic = \relative c'' { a4 b c b8( a) } +altoMusic = \relative g' { e4 e e f } +tenorMusic = \relative c' { c4 b e d8( c) } +bassMusic = \relative c' { a4 gis a d, } +allLyrics = \lyricmode {King of glo -- ry } +<< + \new Staff = "Soprano" \sopranoMusic + \new Lyrics \allLyrics + \new Staff = "Alto" \altoMusic + \new Lyrics \allLyrics + \new Staff = "Tenor" { + \clef "treble_8" + \tenorMusic + } + \new Lyrics \allLyrics + \new Staff = "Bass" { + \clef "bass" + \bassMusic + } + \new Lyrics \allLyrics + \new PianoStaff << + \new Staff = "RH" { + \set Staff.printPartCombineTexts = ##f + \partcombine + \sopranoMusic + \altoMusic + } + \new Staff = "LH" { + \set Staff.printPartCombineTexts = ##f + \clef "bass" + \partcombine + \tenorMusic + \bassMusic + } + >> +>> +@end lilypond + +Separate scores showing just the vocal parts or just the piano +part can be produced by changing just the structural statements, +leaving the musical notation unchanged. + +For lengthy scores, the variable definitions may be placed in +separate files which are then included, see @ref{Including +LilyPond files}. + +@node Using tags +@unnumberedsubsubsec Using tags + +@funindex \tag +@funindex \keepWithTag +@funindex \removeWithTag +@cindex tag +@cindex keep tagged music +@cindex remove tagged music + +The @code{\tag #'@var{partA}} command marks a music expression +with the name @var{partA}. +Expressions tagged in this way can be selected or filtered out by +name later, using either @code{\keepWithTag #'@var{name}} or +@code{\removeWithTag #'@var{name}}. The result of applying these filters +to tagged music is as follows: +@multitable @columnfractions .5 .5 +@headitem Filter + @tab Result +@item +Tagged music preceded by @code{\keepWithTag #'@var{name}} + @tab Untagged music and music tagged with @var{name} is included; + music tagged with any other tag name is excluded. +@item +Tagged music preceded by @code{\removeWithTag #'@var{name}} +@tab Untagged music and music tagged with any tag name other than + @var{name} is included; music tagged with @var{name} is + excluded. +@item +Tagged music not preceded by either @code{\keepWithTag} or +@code{\removeWithTag} +@tab All tagged and untagged music is included. +@end multitable + +The arguments of the @code{\tag}, @code{\keepWithTag} and +@code{\removeWithTag} commands should be a symbol +(such as @code{#'score} or @code{#'part}), followed +by a music expression. + +In the following example, we see two versions of a piece of music, +one showing trills with the usual notation, and one with trills +explicitly expanded: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand { \repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \keepWithTag #'trills \music +} +\score { + \keepWithTag #'expand \music +} +@end lilypond + +@noindent +Alternatively, it is sometimes easier to exclude sections of music: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand {\repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \removeWithTag #'expand + \music +} +\score { + \removeWithTag #'trills + \music +} +@end lilypond + +Tagged filtering can be applied to articulations, texts, etc. by +prepending + +@example +-\tag #'@var{your-tag} +@end example + +to an articulation. For example, this would define a note with a +conditional fingering indication and a note with a conditional +annotation: + +@example +c1-\tag #'finger ^4 +c1-\tag #'warn ^"Watch!" +@end example + +Multiple tags may be placed on expressions with multiple +@code{\tag} entries: + +@lilypond[quote,verbatim] +music = \relative c'' { + \tag #'a \tag #'both { a4 a a a } + \tag #'b \tag #'both { b4 b b b } +} +<< +\keepWithTag #'a \music +\keepWithTag #'b \music +\keepWithTag #'both \music +>> +@end lilypond + +Multiple @code{\removeWithTag} filters may be applied to a single +music expression to remove several differently named tagged sections: + +@lilypond[verbatim,quote] +music = \relative c'' { +\tag #'A { a4 a a a } +\tag #'B { b4 b b b } +\tag #'C { c4 c c c } +\tag #'D { d4 d d d } +} +{ +\removeWithTag #'B +\removeWithTag #'C +\music +} +@end lilypond + +Two or more @code{\keepWithTag} filters applied to a single music +expression will cause @emph{all} tagged sections to be removed, as +the first filter will remove all tagged sections except the one +named, and the second filter will remove even that tagged section. + + +@seealso +Learning Manual: +@rlearning{Organizing pieces with variables}. + +Notation Reference: +@ref{Automatic part combining}, +@ref{Including LilyPond files}. + + +@ignore +@c This warning is more general than this placement implies. +@c Rests are not merged whether or not they come from tagged sections. +@c Should be deleted? -td + +@knownissues + +Multiple rests are not merged if you create a score with more +than one tagged section at the same place. + +@end ignore + +@node Using global settings +@unnumberedsubsubsec Using global settings + +@cindex include-settings + +Global settings can be included from a separate file: + +@example +lilypond -dinclude-settings=MY_SETTINGS.ly MY_SCORE.ly +@end example + +Groups of settings such as page size, font or type face can be stored +in separate files. This allows different editions from the same score +as well as standard settings to be applied to many scores, simply by +specifying the proper settings file. + +This technique also works well with the use of style sheets, as +discussed in @rlearning{Style sheets}. + +@seealso +Learning Manual: +@rlearning{Organizing pieces with variables}, +@rlearning{Style sheets}. + +Notation Reference: +@ref{Including LilyPond files}. + +@node Text encoding +@subsection Text encoding + +@cindex Unicode +@cindex UTF-8 +@cindex non-ASCII characters + +LilyPond uses the character repertoire defined by the Unicode +consortium and ISO/IEC 10646. This defines a unique name and +code point for the character sets used in virtually all modern +languages and many others too. Unicode can be implemented using +several different encodings. LilyPond uses the UTF-8 encoding +(UTF stands for Unicode Transformation Format) which represents +all common Latin characters in one byte, and represents other +characters using a variable length format of up to four bytes. + +The actual appearance of the characters is determined by the +glyphs defined in the particular fonts available - a font defines +the mapping of a subset of the Unicode code points to glyphs. +LilyPond uses the Pango library to layout and render multi-lingual +texts. + +LilyPond does not perform any input-encoding conversions. This +means that any text, be it title, lyric text, or musical +instruction containing non-ASCII characters, must be encoded in +UTF-8. The easiest way to enter such text is by using a +Unicode-aware editor and saving the file with UTF-8 encoding. Most +popular modern editors have UTF-8 support, for example, vim, Emacs, +jEdit, and GEdit do. All MS Windows systems later than NT use +Unicode as their native character encoding, so even Notepad can +edit and save a file in UTF-8 format. A more functional +alternative for Windows is BabelPad. + +If a LilyPond input file containing a non-ASCII character is not +saved in UTF-8 format the error message + +@example +FT_Get_Glyph_Name () error: invalid argument +@end example + +will be generated. + +Here is an example showing Cyrillic, Hebrew and Portuguese +text: + +@lilypond[quote] +%c No verbatim here as the code does not display correctly in PDF +% Cyrillic +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} + +% Hebrew +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} + +% Portuguese +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} + +\relative c' { + c2 d e f g f e +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \portuguese } +@end lilypond + +To enter a single character for which the Unicode code point is +known but which is not available in the editor being used, use +either @code{\char ##xhhhh} or @code{\char #dddd} within a +@code{\markup} block, where @code{hhhh} is the hexadecimal code for +the character required and @code{dddd} is the corresponding decimal +value. Leading zeroes may be omitted, but it is usual to specify +all four characters in the hexadecimal representation. (Note that +the UTF-8 encoding of the code point should @emph{not} be used +after @code{\char}, as UTF-8 encodings contain extra bits indicating +the number of octets.) Unicode code charts and a character name +index giving the code point in hexadecimal for any character can be +found on the Unicode Consortium website, +@uref{http://www.unicode.org/}. + +For example, @code{\char ##x03BE} and @code{\char #958} would both +enter the Unicode U+03BE character, which has the Unicode name +@qq{Greek Small Letter Xi}. + +Any Unicode code point may be entered in this way and if all special +characters are entered in this format it is not necessary to save +the input file in UTF-8 format. Of course, a font containing all +such encoded characters must be installed and available to LilyPond. + +The following example shows Unicode hexadecimal values being entered +in four places -- in a rehearsal mark, as articulation text, in +lyrics and as stand-alone text below the score: + +@lilypond[quote,verbatim] +\score { + \relative c'' { + c1 \mark \markup { \char ##x03EE } + c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } + } + \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } +} +\markup { "Copyright 2008--2011" \char ##x00A9 } +@end lilypond + +@cindex copyright sign + +To enter the copyright sign in the copyright notice use: + +@example +\header @{ + copyright = \markup @{ \char ##x00A9 "2008" @} +@} +@end example + +@node Displaying LilyPond notation +@subsection Displaying LilyPond notation + +@funindex \displayLilyMusic +Displaying a music expression in LilyPond notation can be +done with the music function @code{\displayLilyMusic} but only when +using the command line. For example, + +@example +@{ + \displayLilyMusic \transpose c a, @{ c4 e g a bes @} +@} +@end example + +will display + +@example +@{ a,4 cis e fis g @} +@end example + +By default, LilyPond will print these messages to the console +along with all the other LilyPond compilation messages. To split +up these messages and save the results of @code{\display@{STUFF@}}, +redirect the output to a file. + +@example +lilypond file.ly >display.txt +@end example + + + +@node Controlling output +@section Controlling output + +@menu +* Extracting fragments of music:: +* Skipping corrected music:: +* Alternative output formats:: +* Replacing the notation font:: +@end menu + +@node Extracting fragments of music +@subsection Extracting fragments of music + +It is possible to quote small fragments of a large score directly from +the output. This can be compared to clipping a piece of a paper score +with scissors. + +This is done by defining the measures that need to be cut out +separately. For example, including the following definition + + +@verbatim +\layout { + clip-regions + = #(list + (cons + (make-rhythmic-location 5 1 2) + (make-rhythmic-location 7 3 4))) +} +@end verbatim + +@noindent +will extract a fragment starting halfway the fifth measure, ending in +the seventh measure. The meaning of @code{5 1 2} is: after a 1/2 note +in measure 5, and @code{7 3 4} after 3 quarter notes in measure 7. + +More clip regions can be defined by adding more pairs of +rhythmic-locations to the list. + +In order to use this feature, LilyPond must be invoked with +@code{-dclip-systems}. The clips are output as EPS files, and are +converted to PDF and PNG if these formats are switched on as well. + +For more information on output formats, see @rprogram{Invoking lilypond}. + +@node Skipping corrected music +@subsection Skipping corrected music + + +@funindex skipTypesetting +@funindex showFirstLength +@funindex showLastLength + +When entering or copying music, usually only the music near the end (where +you +are adding notes) is interesting to view and correct. To speed up +this correction process, it is possible to skip typesetting of all but +the last few measures. This is achieved by putting + +@verbatim +showLastLength = R1*5 +\score { ... } +@end verbatim + +@noindent +in your source file. This will render only the last 5 measures +(assuming 4/4 time signature) of every @code{\score} in the input +file. For longer pieces, rendering only a small part is often an order +of magnitude quicker than rendering it completely. When working on the +beginning of a score you have already typeset (e.g. to add a new part), +the @code{showFirstLength} property may be useful as well. + +Skipping parts of a score can be controlled in a more fine-grained +fashion with the property @code{Score.skipTypesetting}. When it is +set, no typesetting is performed at all. + +This property is also used to control output to the MIDI file. Note that +it skips all events, including tempo and instrument changes. You have +been warned. + +@lilypond[quote,relative=2,ragged-right,verbatim] +c8 d +\set Score.skipTypesetting = ##t +e8 e e e e e e e +\set Score.skipTypesetting = ##f +c8 d b bes a g c2 +@end lilypond + +In polyphonic music, @code{Score.skipTypesetting} will affect all +voices and staves, saving even more time. + +@node Alternative output formats +@subsection Alternative output formats + +@cindex scalable vector graphics output +@cindex SVG output +@cindex encapsulated postscript output +@cindex EPS output + +The default output formats for the printed score are Portable +Document Format (PDF) and PostScript (PS). Scalable Vector +Graphics (SVG), Encapsulated PostScript (EPS) and Portable +Network Graphics (PNG) output formats are also available through +command line options, see @rprogram{Command line options for +lilypond}. + + +@node Replacing the notation font +@subsection Replacing the notation font + +Gonville is an alternative to the Feta font used in LilyPond and can +be downloaded from: +@example +@uref{http://www.chiark.greenend.org.uk/~sgtatham/gonville/ ,http://www.chiark.greenend.org.uk/~sgtatham/gonville/} +@end example + +Here are a few sample bars of music set in Gonville: + +@c NOTE: these images are a bit big, but that's important +@c for the font comparison. -gp +@sourceimage{Gonville_after,,,} + +Here are a few sample bars of music set in LilyPond's Feta font: + +@sourceimage{Gonville_before,,,} + +@subsubheading Installation Instructions for MacOS + +Download and extract the zip file. Copy the @code{lilyfonts} +directory to @file{@var{SHARE_DIR}/lilypond/current}; for more +information, see @rlearning{Other sources of information}. +Move the existing @code{fonts} directory to @code{fonts_orig} and +move the @code{lilyfonts} directory to @code{fonts}. Simply move +@code{fonts_orig} back to @code{fonts} to revert back to Feta. + +@seealso +Learning Manual: @rlearning{Other sources of information}. + +@knownissues + +Gonville cannot be used to typeset @q{Ancient Music} notation. Please +refer to the author's website for more information on this and other +specifics including licensing of Gonville. + + +@node MIDI output +@section MIDI output + +@cindex Sound +@cindex MIDI + +MIDI (Musical Instrument Digital Interface) is a standard for +connecting and controlling digital instruments. A MIDI file is a +series of notes in a number of tracks. It is not an actual +sound file; you need special software to translate between the +series of notes and actual sounds. + +Pieces of music can be converted to MIDI files, so you can listen to +what was entered. This is convenient for checking the music; octaves +that are off or accidentals that were mistyped stand out very much +when listening to the MIDI output. + +Standard MIDI oputput is somewhat crude; optionally, an enhanced and +more realistic MIDI output is available by means of +@ref{The Articulate script}. + +@c TODO Check this +The midi output allocates a channel for each staff, and one for global +settings. Therefore the midi file should not have more than 15 staves +(or 14 if you do not use drums). Other staves will remain silent. + +@menu +* Creating MIDI files:: +* MIDI block:: +* What goes into the MIDI output?:: +* Repeats in MIDI:: +* Controlling MIDI dynamics:: +* Percussion in MIDI:: +* The Articulate script:: +@end menu + +@node Creating MIDI files +@subsection Creating MIDI files + +To create a MIDI output file from a LilyPond input file, add a +@code{\midi} block to a score, for example, + +@example +\score @{ + @var{...music...} + \midi @{ @} +@} +@end example + +If there is a @code{\midi} block in a @code{\score} with no +@code{\layout} block, only MIDI output will be produced. When +notation is needed too, a @code{\layout} block must also be +present. + +@example +\score @{ + @var{...music...} + \midi @{ @} + \layout @{ @} +@} +@end example + +Pitches, rhythms, ties, dynamics, and tempo changes are interpreted +and translated correctly to the MIDI output. Dynamic marks, +crescendi and decrescendi translate into MIDI volume levels. +Dynamic marks translate to a fixed fraction of the available MIDI +volume range. Crescendi and decrescendi make the volume vary +linearly between their two extremes. The effect of dynamic markings +on the MIDI output can be removed completely, see @ref{MIDI block}. + +The initial tempo and later tempo changes can be specified +with the @code{\tempo} command within the music notation. These +are reflected in tempo changes in the MIDI output. This command +will normally result in the metronome mark being printed, but this +can be suppressed, see @ref{Metronome marks}. An alternative way +of specifying the initial or overall MIDI tempo is described below, +see @ref{MIDI block}. + +Due to some limitations on Windows, the default extension for +MIDI files on Windows is @code{.mid}. Other operating systems still +use the extension @code{.midi}. If a different extension is preferred, +insert the following line at the top-level of the input file, +before the start of any @code{\book}, @code{\bookpart} or @code{\score} blocks: + +@example +#(ly:set-option 'midi-extension "midi") +@end example + +The line above will set the default extension for MIDI files to +@code{.midi}. + +Alternatively, this option can also be supplied on the command line: + +@example +lilypond … -dmidi-extension=midi lilyFile.ly +@end example + + +@unnumberedsubsubsec Instrument names + +@cindex instrument names +@funindex Staff.midiInstrument + +The MIDI instrument to be used is specified by setting the +@code{Staff.midiInstrument} property to the instrument name. +The name should be chosen from the list in @ref{MIDI instruments}. + +@example +\new Staff @{ + \set Staff.midiInstrument = #"glockenspiel" + @var{...notes...} +@} +@end example + +@example +\new Staff \with @{midiInstrument = #"cello"@} @{ + @var{...notes...} +@} +@end example + +If the selected instrument does not exactly match an instrument from +the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"}) +instrument is used. + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-midi-output-to-one-channel-per-voice.ly} + +@knownissues + +@c In 2.11 the following no longer seems to be a problem -td +@ignore +Unterminated (de)crescendos will not render properly in the midi file, +resulting in silent passages of music. The workaround is to explicitly +terminate the (de)crescendo. For example, + +@example +@{ a4\< b c d\f @} +@end example + +@noindent +will not work properly but + +@example +@{ a4\< b c d\!\f @} +@end example + +@noindent +will. +@end ignore + +Changes in the MIDI volume take place only on starting a note, so +crescendi and decrescendi cannot affect the volume of a +single note. + +Not all midi players correctly handle tempo changes in the midi +output. Players that are known to work include MS Windows Media +Player and @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. + +@node MIDI block +@subsection MIDI block +@cindex MIDI block + +A @code{\midi} block must appear within a score block if MIDI output +is required. It is analogous to the layout block, but somewhat +simpler. Often, the @code{\midi} block is left empty, but it +can contain context rearrangements, new context definitions or code +to set the values of properties. For example, the following will +set the initial tempo exported to a MIDI file without causing a tempo +indication to be printed: + +@example +\score @{ + @var{...music...} + \midi @{ + \context @{ + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + @} + @} +@} +@end example + +In this example the tempo is set to 72 quarter note +beats per minute. This kind of tempo specification cannot take +a dotted note length as an argument. If one is required, break +the dotted note into smaller units. For example, a tempo of 90 +dotted quarter notes per minute can be specified as 270 eighth +notes per minute: + +@example +tempoWholesPerMinute = #(ly:make-moment 270 8) +@end example + +@cindex MIDI context definitions + +Context definitions follow precisely the same syntax as those +within a @code{\layout} block. Translation modules for sound are +called performers. The contexts for MIDI output are defined in +@file{../ly/performer-init.ly}, +see @rlearning{Other sources of information}. +For example, to remove the effect of dynamics +from the MIDI output, insert the following lines in the +@code{\midi@{ @}} block. + +@example +\midi @{ + ... + \context @{ + \Voice + \remove "Dynamic_performer" + @} +@} +@end example + +MIDI output is created only when a @code{\midi} block is included +within a score block defined with a @code{\score} command. + +@example +\score @{ + @{ @dots{}notes@dots{} @} + \midi @{ @} +@} +@end example + +@node What goes into the MIDI output? +@subsection What goes into the MIDI output? + +@c TODO Check grace notes - timing is suspect? + +@unnumberedsubsubsec Supported in MIDI + +@cindex Pitches in MIDI +@cindex MIDI, Pitches +@cindex Quarter tones in MIDI +@cindex MIDI, quarter tones +@cindex Microtones in MIDI +@cindex MIDI, microtones +@cindex Chord names in MIDI +@cindex MIDI, chord names +@cindex Rhythms in MIDI +@cindex MIDI, Rhythms +@cindex Articlulate scripts +@cindex MIDI, articulations +@cindex articulations in MIDI +@cindex trills in MIDI +@cindex turns in MIDI +@cindex rallentando in MIDI +@cindex accelerando in MIDI +@c TODO etc + +The following items of notation are reflected in the MIDI output: + +@itemize +@item Pitches +@item Microtones (See @ref{Accidentals}. Rendering needs a +player that supports pitch bend.) +@item Chords entered as chord names +@item Rhythms entered as note durations, including tuplets +@item Tremolos entered without @q{@code{:}[@var{number}]} +@item Ties +@item Dynamic marks +@item Crescendi, decrescendi over multiple notes +@item Tempo changes entered with a tempo marking +@item Lyrics +@end itemize + +Using @ref{The Articulate script}, a number of items are added to the +above list: + +@itemize +@item Articulations (slurs, staccato, etc) +@item Trills, turns +@item Rallentando and accelerando +@end itemize + + +@unnumberedsubsubsec Unsupported in MIDI + +@c TODO index as above + +The following items of notation have no effect on the MIDI output, +unless you use @ref{The Articulate script}: + +@itemize +@item Rhythms entered as annotations, e.g. swing +@item Tempo changes entered as annotations with no tempo marking +@item Staccato and other articulations and ornamentations +@item Slurs and Phrasing slurs +@item Crescendi, decrescendi over a single note +@item Tremolos entered with @q{@code{:}[@var{number}]} +@item Figured bass +@item Microtonal chords +@end itemize + + +@node Repeats in MIDI +@subsection Repeats in MIDI + +@cindex repeats in MIDI +@funindex \unfoldRepeats + +With a few minor additions, all types of repeats can be represented +in the MIDI output. This is achieved by applying the +@code{\unfoldRepeats} music function. This function changes all +repeats to unfold repeats. + +@lilypond[quote,verbatim] +\unfoldRepeats { + \repeat tremolo 8 { c'32 e' } + \repeat percent 2 { c''8 d'' } + \repeat volta 2 { c'4 d' e' f' } + \alternative { + { g' a' a' g' } + { f' e' d' c' } + } +} +\bar "|." +@end lilypond + +In scores containing multiple voices, unfolding of repeats in MIDI +output will only occur correctly if @emph{each} voice contains fully +notated repeat indications. + +When creating a score file using @code{\unfoldRepeats} for MIDI, +it is necessary to make two @code{\score} blocks: one for MIDI +(with unfolded repeats) and one for notation (with volta, tremolo, +and percent repeats). For example, + +@example +\score @{ + @var{..music..} + \layout @{ .. @} +@} +\score @{ + \unfoldRepeats @var{..music..} + \midi @{ .. @} +@} +@end example + +@node Controlling MIDI dynamics +@subsection Controlling MIDI dynamics + +MIDI dynamics are implemented by the Dynamic_performer which lives +by default in the Voice context. It is possible to control the +overall MIDI volume, the relative volume of dynamic markings and +the relative volume of different instruments. + +@unnumberedsubsubsec Dynamic marks + +Dynamic marks are translated to a fixed fraction of the available +MIDI volume range. The default fractions range from 0.25 for +@notation{ppppp} to 0.95 for @notation{fffff}. The set of dynamic +marks and the associated fractions can be seen in +@file{../scm/midi.scm}, see @rlearning{Other sources of information}. +This set of fractions may be changed or extended by providing a +function which takes a dynamic mark as its argument and returns the +required fraction, and setting +@code{Score.dynamicAbsoluteVolumeFunction} to this function. + +For example, if a @notation{rinforzando} dynamic marking, +@code{\rfz}, is required, this will not by default +have any effect on the MIDI volume, as this dynamic marking is not +included in the default set. Similarly, if a new dynamic marking +has been defined with @code{make-dynamic-script} that too will not +be included in the default set. The following example shows how the +MIDI volume for such dynamic markings might be added. The Scheme +function sets the fraction to 0.9 if a dynamic mark of rfz is +found, or calls the default function otherwise. + +@lilypond[verbatim,quote] +#(define (myDynamics dynamic) + (if (equal? dynamic "rfz") + 0.9 + (default-dynamic-absolute-volume dynamic))) + +\score { + \new Staff { + \set Staff.midiInstrument = #"cello" + \set Score.dynamicAbsoluteVolumeFunction = #myDynamics + \new Voice { + \relative c'' { + a4\pp b c-\rfz + } + } + } + \layout {} + \midi {} +} +@end lilypond + +Alternatively, if the whole table of fractions needs to be +redefined, it would be better to use the +@notation{default-dynamic-absolute-volume} procedure in +@file{../scm/midi.scm} and the associated table as a model. +The final example in this section shows how this might be done. + +@unnumberedsubsubsec Overall MIDI volume + +The minimum and maximum overall volume of MIDI dynamic markings is +controlled by setting the properties @code{midiMinimumVolume} and +@code{midiMaximumVolume} at the @code{Score} level. These +properties have an effect only on dynamic marks, so if they +are to apply from the start of the score a dynamic mark must be +placed there. The fraction corresponding to each dynamic mark is +modified with this formula + +@example +midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction +@end example + +In the following example the dynamic range of the overall MIDI +volume is limited to the range 0.2 - 0.5. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + midiMinimumVolume = #0.2 + midiMaximumVolume = #0.5 + } + } +} +@end lilypond + +@unnumberedsubsubsec Equalizing different instruments (i) + +If the minimum and maximum MIDI volume properties are set in +the @code{Staff} context the relative volumes of the MIDI +instruments can be controlled. This gives a basic instrument +equalizer, which can enhance the quality of the MIDI output +remarkably. + +In this example the volume of the clarinet is reduced relative +to the volume of the flute. There must be a dynamic +mark on the first note of each instrument for this to work +correctly. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \set Staff.midiMinimumVolume = #0.7 + \set Staff.midiMaximumVolume = #0.9 + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \set Staff.midiMinimumVolume = #0.3 + \set Staff.midiMaximumVolume = #0.6 + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@unnumberedsubsubsec Equalizing different instruments (ii) + +If the MIDI minimum and maximum volume properties are not set +LilyPond will, by default, apply a small degree of equalization +to a few instruments. The instruments and the equalization +applied are shown in the table @notation{instrument-equalizer-alist} +in @file{../scm/midi.scm}. + +This basic default equalizer can be replaced by setting +@code{instrumentEqualizer} in the @code{Score} context to a new +Scheme procedure which accepts a MIDI instrument name as its only +argument and returns a pair of fractions giving the minimum and +maximum volumes to be applied to that instrument. This replacement +is done in the same way as shown for resetting the +@code{dynamicAbsoluteVolumeFunction} at the start of this section. +The default equalizer, @notation{default-instrument-equalizer}, in +@file{../scm/midi.scm} shows how such a procedure might be written. + +The following example sets the relative flute and clarinet volumes +to the same values as the previous example. + +@lilypond[verbatim,quote] +#(define my-instrument-equalizer-alist '()) + +#(set! my-instrument-equalizer-alist + (append + '( + ("flute" . (0.7 . 0.9)) + ("clarinet" . (0.3 . 0.6))) + my-instrument-equalizer-alist)) + +#(define (my-instrument-equalizer s) + (let ((entry (assoc s my-instrument-equalizer-alist))) + (if entry + (cdr entry)))) + +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Score.instrumentEqualizer = #my-instrument-equalizer + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@ignore +@c Delete when satisfied this is adequately covered elsewhere -td + +@n ode Microtones in MIDI +@s ubsection Microtones in MIDI + +@cindex microtones in MIDI + +Microtones consisting of half sharps and half flats are exported +to the MIDI file and render correctly in MIDI players which support +pitch bending. See @ref{Note names in other languages}. Here is +an example showing all the half sharps and half flats. It can be +copied out and compiled to test microtones in your MIDI player. + +@lilypond[verbatim,quote] +\score { + \relative c' { + c4 cih cis cisih + d4 dih ees eeh + e4 eih f fih + fis4 fisih g gih + gis4 gisih a aih + bes4 beh b bih + } + \layout {} + \midi {} +} +@end lilypond +@end ignore + + +@node Percussion in MIDI +@subsection Percussion in MIDI + +Percussion instruments are generally notated in a @code{DrumStaff} +context and when notated in this way they are outputted correctly +to MIDI channel@tie{}10, but some pitched percussion instruments, +like the xylophone, marimba, vibraphone, timpani, etc., are +treated like @qq{normal} instruments and music for these instruments +should be entered in a normal @code{Staff} context, not a +@code{DrumStaff} context, to obtain the correct MIDI output. + +Some non-pitched percussion sounds included in the general MIDI +standard, like melodic tom, taiko drum, synth drum, etc., cannot +be reached via MIDI channel@tie{}10, so the notation for such +instruments should also be entered in a normal @code{Staff} +context, using suitable normal pitches. + +Many percussion instruments are not included in the general MIDI +standard, e.g. castanets. The easiest, although unsatisfactory, +method of producing some MIDI output when writing for such +instruments is to substitute the nearest sound from the standard +set. + +@c TODO Expand with examples, and any other issues + +@knownissues + +Because the general MIDI standard does not contain rim shots, the +sidestick is used for this purpose instead. + +@node The Articulate script +@subsection The Articulate script + +A more realistic MIDI output is possible when using the Articulate +script. It tries to take articulations (slurs, staccato, etc) into +account, by replacing notes with sequential music of suitably +time-scaled note plus skip. It also tries to unfold trills turns +etc., and take rallentando and accelerando into account. + +To use the Articulate script, you have to include it at the top of +your input file, + +@example +\include "articulate.ly" +@end example + +and in the @code{\score} section do + +@example +\unfoldRepeats \articulate << + all the rest of the score... +>> +@end example + +After altering your input file this way, the visual output is heavily +altered, but the standard @code{\midi} block will produce a better +MIDI file. + +Although not essential for the Articulate script to work, you may want +to insert the @code{\unfoldRepeats} command as it appears in the +example shown above as it enables performing abbreviatures such as +@notation{trills}. + +@knownissues + +Articulate shortens chords and some music (esp. organ music) could +sound worse. diff --git a/Documentation/notation/keyboards.itely b/Documentation/notation/keyboards.itely new file mode 100644 index 0000000000..77c8e9b98f --- /dev/null +++ b/Documentation/notation/keyboards.itely @@ -0,0 +1,688 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Keyboard and other multi-staff instruments +@section Keyboard and other multi-staff instruments + +@lilypondfile[quote]{keyboard-headword.ly} + +This section discusses several aspects of music notation that are +unique to keyboard instruments and other instruments notated on +many staves, such as harps and vibraphones. For the purposes of +this section this entire group of multi-staff instruments is called +@qq{keyboards} for short, even though some of them do not have a +keyboard. + +@menu +* Common notation for keyboards:: +* Piano:: +* Accordion:: +* Harp:: +@end menu + +@node Common notation for keyboards +@subsection Common notation for keyboards + +This section discusses notation issues that may arise for most +keyboard instruments. + +@menu +* References for keyboards:: +* Changing staff manually:: +* Changing staff automatically:: +* Staff-change lines:: +* Cross-staff stems:: +@end menu + +@node References for keyboards +@unnumberedsubsubsec References for keyboards + +@cindex piano staves +@cindex staves, piano +@cindex staves, keyboard instruments +@cindex staves, keyed instruments +@cindex keyboard instrument staves +@cindex keyed instrument staves +@cindex keyboard music, centering dynamics +@cindex dynamics, centered in keyboard music +@cindex piano music, centering dynamics +@cindex centered dynamics in piano music + +@funindex PianoStaff + +Keyboard instruments are usually notated with Piano staves. These +are two or more normal staves coupled with a brace. The same +notation is also used for other keyed instruments. +Organ music is normally written with two staves inside a +@code{PianoStaff} group and third, normal staff for the pedals. + +The staves in keyboard music are largely independent, but +sometimes voices can cross between the two staves. This +section discusses notation techniques particular to keyboard +music. + +Several common issues in keyboard music are covered elsewhere: + +@itemize + +@item Keyboard music usually contains multiple voices and the +number of voices may change regularly; this is described in +@ref{Collision resolution}. + +@item Keyboard music can be written in parallel, as described in +@ref{Writing music in parallel}. + +@item Dynamics may be placed in a @code{Dynamics} context, +between the two @code{Staff} contexts +to align the dynamic marks on a horizontal line +centered between the staves; see @ref{Dynamics}. + +@item Fingerings are indicated with @ref{Fingering instructions}. + +@item Organ pedal indications are inserted as articulations, see +@ref{List of articulations}. + +@item Vertical grid lines can be shown with @ref{Grid lines}. + +@item Keyboard music often contains @notation{Laissez vibrer} ties +as well as ties on arpeggios and tremolos, described in +@ref{Ties}. + +@item Placing arpeggios across multiple voices and staves is +covered in @ref{Arpeggio}. + +@item Tremolo marks are described in @ref{Tremolo repeats}. + +@item Several of the tweaks that can occur in keyboard music are +demonstrated in @rlearning{Real music example}. + +@item Hidden notes can be used to produce ties that cross voices, +as shown in @rlearning{Other uses for tweaks}. + +@end itemize + +@c @snippets +@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] +@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly} +@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 + +@seealso +Learning Manual: +@rlearning{Real music example}, +@rlearning{Other uses for tweaks}. + +Notation Reference: +@ref{Grouping staves}, +@ref{Instrument names}, +@ref{Collision resolution}, +@ref{Writing music in parallel}, +@ref{Fingering instructions}, +@ref{List of articulations}, +@ref{Grid lines}, +@ref{Ties}, +@ref{Arpeggio}, +@ref{Tremolo repeats}. + +Internals Reference: +@rinternals{PianoStaff}. + +Snippets: +@rlsr{Keyboards}. + +@node Changing staff manually +@unnumberedsubsubsec Changing staff manually + +@cindex changing staff manually +@cindex manual staff changes +@cindex staff changes, manual +@cindex cross-staff notes +@cindex notes, cross-staff +@cindex cross-staff beams +@cindex beams, cross-staff + +@funindex \change +@funindex change + +Voices can be switched between staves manually, using the command + +@example +\change Staff = @var{staffname} +@end example + +@noindent +The string @var{staffname} is the name of the staff. It switches +the current voice from its current staff to the staff called +@var{staffname}. Typical values for @var{staffname} are +@code{"up"} and @code{"down"}, or @code{"RH"} and @code{"LH"}. + +The staff to which the voice is being switched must exist at the +time of the switch. If necessary, staves should be @qq{kept alive}, +see @ref{Keeping contexts alive}. + +Cross-staff notes are beamed automatically: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + 8 + \change Staff = "down" + g8 fis g + \change Staff = "up" + 8 + \change Staff = "down" + e8 dis e + \change Staff = "up" + } + \new Staff = "down" { + \clef bass + % keep staff alive + s1 + } +>> +@end lilypond + +If the beaming needs to be tweaked, make any changes to the stem +directions first. The beam positions are then measured from the +center of the staff that is closest to the beam. For a simple +example of beam tweaking, see @rlearning{Fixing overlapping +notation}. + +@cindex cross-staff collisions +@cindex collisions, cross-staff voices + +Overlapping notation can result when voices cross staves: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff = "up" { + \voiceOne + % Make space for fingering in the cross-staff voice + \once\override DynamicLineSpanner #'staff-padding = #3.4 + e''2\p\< d''\> s1*0\! + } + \new Staff = "down" << + { + \clef bass + s4. e,8\rest g,2\rest + } \\ { + c8\( g c' + \change Staff = "up" + e' g' b'-3 a' g'\) + } + >> +>> +@end lilypond + +The stem and slur overlap the intervening line of dynamics +because automatic collision resolution is suspended for beams, slurs +and other spanners that connect notes on different staves, +as well as for stems and articulations if their placement is +affected by a cross-staff spanner. +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}. + +Notation Reference: +@ref{Stems}, +@ref{Automatic beams}, +@ref{Keeping contexts alive}. + +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{Beam}, +@rinternals{ContextChange}. + + +@node Changing staff automatically +@unnumberedsubsubsec Changing staff automatically + +@cindex changing staff automatically +@cindex automatic staff changes +@cindex staff changes, automatic + +@funindex \autochange +@funindex autochange +@funindex PianoStaff + +Voices can be made to switch automatically between the top and the +bottom staff. The syntax for this is + +@example +\autochange @dots{}@var{music}@dots{} +@end example + +@noindent +This will create two staves inside the current staff group +(usually a @code{PianoStaff}), called @code{"up"} and +@code{"down"}. The lower staff will be in the bass clef by default. +The autochanger switches on the basis of the pitch (middle@tie{}C is the +turning point), and it looks ahead skipping over rests to switch +in advance. + +@lilypond[quote,verbatim] +\new PianoStaff { + \autochange { + g4 a b c' + d'4 r a g + } +} +@end lilypond + +@cindex relative music and autochange +@cindex autochange and relative music + +@funindex \relative +@funindex relative + +A @code{\relative} section that is outside of @code{\autochange} +has no effect on the pitches of the music, so if necessary, put +@code{\relative} inside @code{\autochange}. + +If additional control is needed over the individual staves, they +can be created manually with the names @code{"up"} and +@code{"down"}. The @code{\autochange} command will then switch +its voice between the existing staves. + +@warning{If staves are created manually, they @emph{must} be named +@code{"up"} and @code{"down"}.} + +For example, staves must be created manually in order to place a +key signature in the lower staff: + +@lilypond[quote,verbatim] +\new PianoStaff << + \new Staff = "up" { + \new Voice = "melOne" { + \key g \major + \autochange \relative c' { + g8 b a c b d c e + d8 r fis, g a2 + } + } + } + \new Staff = "down" { + \key g \major + \clef bass + } +>> +@end lilypond + + +@seealso +Notation Reference: +@ref{Changing staff manually}. + +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{AutoChangeMusic}. + + +@knownissues + +@cindex chords, splitting across staves with \autochange + +The staff switches may not end up in optimal places. For high +quality output, staff switches should be specified manually. + +Chords will not be split across the staves; they will be assigned to a +staff based on the first note named in the chord construct. + +@node Staff-change lines +@unnumberedsubsubsec Staff-change lines + +@cindex staff-change line +@cindex staff change line +@cindex cross-staff line +@cindex cross staff line +@cindex line, staff-change follower +@cindex line, cross-staff +@cindex line, staff-change +@cindex follow voice +@cindex voice, following +@cindex staff switching +@cindex cross-staff + +@funindex followVoice +@funindex \showStaffSwitch +@funindex showStaffSwitch +@funindex \hideStaffSwitch +@funindex hideStaffSwitch + +Whenever a voice switches to another staff, a line connecting the +notes can be printed automatically: + +@lilypond[quote,verbatim,relative=1] +\new PianoStaff << + \new Staff = "one" { + \showStaffSwitch + c1 + \change Staff = "two" + b2 a + } + \new Staff = "two" { + \clef bass + s1*2 + } +>> +@end lilypond + + +@predefined +@code{\showStaffSwitch}, +@code{\hideStaffSwitch}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{Note_head_line_engraver}, +@rinternals{VoiceFollower}. + + +@node Cross-staff stems +@unnumberedsubsubsec Cross-staff stems + +@cindex cross-staff notes +@cindex cross staff notes +@cindex notes, cross-staff +@cindex cross-staff stems +@cindex cross staff stems +@cindex stems, cross-staff +@cindex chords, cross-staff +@cindex cross-staff chords +@cindex cross staff chords + +@funindex Stem +@funindex cross-staff +@funindex length +@funindex flag-style + +Chords that cross staves may be produced: + +@lilypond[verbatim,quote] +\new PianoStaff << + \new Staff { + \relative c' { + f8 e4 d8 d f e4 + } + } + \new Staff { + \relative c' { + << { + \clef bass + % stems may overlap the other staff + \override Stem #'cross-staff = ##t + % extend the stems to reach the other staff + \override Stem #'length = #12 + % do not print extra flags + \override Stem #'flag-style = #'no-flag + % prevent beaming as needed + a8 g4 f8 f bes\noBeam g4 + } + \\ + { + f,2 bes4 c + } >> + } + } +>> +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{indicating-cross-staff-chords-with-arpeggio-bracket.ly} + + +@seealso +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{Stem}. + + +@node Piano +@subsection Piano + +This section discusses notation issues that relate most directly to the +piano. + +@menu +* Piano pedals:: +@end menu + +@node Piano pedals +@unnumberedsubsubsec Piano pedals + +@cindex piano pedals +@cindex pedals, piano +@cindex sustain pedal +@cindex pedal, sustain +@cindex sostenuto pedal +@cindex pedal, sostenuto +@cindex una corda +@cindex tre corde +@cindex sos. +@cindex U.C. + +@funindex \sustainOn +@funindex sustainOn +@funindex \sustainOff +@funindex sustainOff +@funindex \sostenutoOn +@funindex sostenutoOn +@funindex \sostenutoOff +@funindex sostenutoOff +@funindex \unaCorda +@funindex unaCorda +@funindex \treCorde +@funindex treCorde + +Pianos generally have three pedals that alter the way sound is +produced: @notation{sustain}, @notation{sostenuto} +(@notation{sos.}), and @notation{una corda} (@notation{U.C.}). +Sustain pedals are also found on vibraphones and celestas. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn d e g +1\sustainOff +c4\sostenutoOn e g c, +1\sostenutoOff +c4\unaCorda d e g +1\treCorde +@end lilypond + +@cindex pedal indication styles +@cindex pedal indication, text +@cindex pedal indication, bracket +@cindex pedal indication, mixed +@cindex pedal sustain style +@cindex sustain pedal style + +@funindex pedalSustainStyle +@funindex mixed +@funindex bracket +@funindex text + +There are three styles of pedal indications: text, bracket, and mixed. +The sustain pedal and the una corda pedal use the text style by default +while the sostenuto pedal uses mixed by default. + +@lilypond[quote,verbatim,relative=2] +c4\sustainOn g c2\sustainOff +\set Staff.pedalSustainStyle = #'mixed +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2\sustainOff +\set Staff.pedalSustainStyle = #'bracket +c4\sustainOn g c d +d\sustainOff\sustainOn g, c2 +\bar "|." +@end lilypond + +The placement of the pedal commands matches the physical movement of the +sustain pedal during piano performance. Pedalling to the final bar line +is indicated by omitting the final pedal off command. + +Pedal indications may be placed in a @code{Dynamics} context, +which aligns them on a horizontal line. + +@seealso +Notation Reference: +@ref{Ties}. + +Snippets: +@rlsr{Keyboards}. + +Internals Reference: +@rinternals{SustainPedal}, +@rinternals{SustainPedalLineSpanner}, +@rinternals{SustainEvent}, +@rinternals{SostenutoPedal}, +@rinternals{SostenutoPedalLineSpanner}, +@rinternals{SostenutoEvent}, +@rinternals{UnaCordaPedal}, +@rinternals{UnaCordaPedalLineSpanner}, +@rinternals{UnaCordaEvent}, +@rinternals{PianoPedalBracket}, +@rinternals{Piano_pedal_engraver}. + + +@node Accordion +@subsection Accordion + +@cindex accordion + +This section discusses notation that is unique to the accordion. + +@menu +* Discant symbols:: +@end menu + +@node Discant symbols +@unnumberedsubsubsec Discant symbols + +@cindex accordion discant symbols +@cindex discant symbols, accordion +@cindex accordion shifts +@cindex accordion shift symbols + +Accordions are often built with more than one set of reeds that may be +in unison with, an octave above, or an octave below the written pitch. +Each accordion maker has different names for the @notation{shifts} that +select the various reed combinations, such as @notation{oboe}, +@notation{musette}, or @notation{bandonium}, so a system of symbols has +come into use to simplify the performance instructions. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{accordion-discant-symbols.ly} + + +@seealso +Snippets: +@rlsr{Keyboards}. + + +@node Harp +@subsection Harp + +This section discusses notation issues that are unique to the harp. + +@menu +* References for harps:: +* Harp pedals:: +@end menu + +@node References for harps +@unnumberedsubsubsec References for harps +@cindex harps +@cindex bisbiglando + +Some common characteristics of harp music are covered elsewhere: + +@itemize + +@item The glissando is the most characteristic harp technique, +@ref{Glissando}. + +@item A @notation{bisbigliando} is written as a tremelo @ref{Tremolo +repeats}. + +@item Natural harmonics are covered under @ref{Harmonics}. + +@item For directional arpeggios and non-arpeggios, see @ref{Arpeggio}. + +@end itemize + +@seealso +Notation Reference: +@ref{Tremolo repeats}, +@ref{Glissando}, +@ref{Arpeggio}, +@ref{Harmonics}. + +@node Harp pedals +@unnumberedsubsubsec Harp pedals + +@cindex harp pedals +@cindex harp pedal diagrams +@cindex pedals, harp +@cindex pedal diagrams, harp + +Harps have seven strings per octave that may be sounded at the natural, +flattened, or sharpened pitch. In lever harps, each string is adjusted +individually, but in pedal harps every string with the same pitch name +is controlled by a single pedal. From the player's left to right, the +pedals are D, C, and B on the left and E, F, G, and A on the right. +The position of the pedals may be indicated with text marks: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup \concat \vcenter { + [D \flat C \sharp B|E \sharp F \sharp G A \flat] } +c!1_\markup \concat \vcenter { + [ C \natural ] } +@end lilypond + +or pedal diagrams: + +@lilypond[quote,verbatim,relative=2] +\textLengthOn +cis1_\markup { \harp-pedal #"^v-|vv-^" } +c!1_\markup { \harp-pedal #"^o--|vv-^" } +@end lilypond + +The @code{\harp-pedal} command accepts a string of characters, where +@code{^} is the highest pedal position (flattened pitch), @code{-} is +the middle pedal position (natural pitch), @code{v} is the lowest pedal +position (sharpened pitch), and @code{|} is the divider. A prefixed +@code{o} will circle the following pedal symbol. + +@seealso +Notation Reference: +@ref{Text scripts}, +@ref{Instrument Specific Markup}. diff --git a/Documentation/notation/notation-appendices.itely b/Documentation/notation/notation-appendices.itely new file mode 100644 index 0000000000..66a907f709 --- /dev/null +++ b/Documentation/notation/notation-appendices.itely @@ -0,0 +1,1389 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Notation manual tables +@appendix Notation manual tables + +@menu +* Chord name chart:: +* Common chord modifiers:: +* Predefined string tunings:: +* Predefined fretboard diagrams:: +* MIDI instruments:: +* List of colors:: +* The Feta font:: +* Note head styles:: +* Text markup commands:: +* Text markup list commands:: +* List of articulations:: +* Percussion notes:: +* Technical glossary:: +* All context properties:: +* Layout properties:: +* Available music functions:: +* Predefined type predicates:: +* Scheme functions:: +@end menu + + + +@node Chord name chart +@appendixsec Chord name chart + +The following charts shows two standard systems for printing chord +names, along with the pitches they represent. + +@lilypondfile{chord-names-jazz.ly} + +@node Common chord modifiers +@appendixsec Common chord modifiers + +The following table shows chord modifiers that can be used in +@code{\chordmode} to generate standard chord structures. + +@multitable @columnfractions .2 .3 .2 .2 + +@item +@b{Chord type} +@tab +@b{Intervals} +@tab +@b{Modifier(s)} +@tab +@b{Example} + + +@item +Major +@tab +Major third, perfect fifth +@tab +@code{5} or nothing +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:5 +} +@end lilypond + +@item +Minor +@tab +Minor third, perfect fifth +@tab +@code{m} or @code{m5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m +} +@end lilypond + +@item +Augmented +@tab +Major third, augmented fifth +@tab +@code{aug} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug +} +@end lilypond + +@item +Diminished +@tab +Minor third, diminished fifth +@tab +@code{dim} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim +} +@end lilypond + +@item +Dominant seventh +@tab +Major triad, minor seventh +@tab +@code{7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:7 +} +@end lilypond + +@item +Major seventh +@tab +Major triad, major seventh +@tab +@code{maj7} or @code{maj} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj7 +} +@end lilypond + +@item +Minor seventh +@tab +Minor triad, minor seventh +@tab +@code{m7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7 +} +@end lilypond + +@item +Diminished seventh +@tab +Diminished triad, diminished seventh +@tab +@code{dim7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:dim7 +} +@end lilypond + +@item +Augmented seventh +@tab +Augmented triad, minor seventh +@tab +@code{aug7} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:aug7 +} +@end lilypond + +@item +Half-diminished seventh +@tab +Diminished triad, minor seventh +@tab +@code{m7.5-} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7.5- +} +@end lilypond + +@item +Minor-major seventh +@tab +Minor triad, major seventh +@tab +@code{m7+} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m7+ +} +@end lilypond + +@item +Major sixth +@tab +Major triad, sixth +@tab +@code{6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:6 +} +@end lilypond + +@item +Minor sixth +@tab +Minor triad, sixth +@tab +@code{m6} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m6 +} +@end lilypond + +@item +Dominant ninth +@tab +Dominant seventh, major ninth +@tab +@code{9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:9 +} +@end lilypond + +@item +Major ninth +@tab +Major seventh, major ninth +@tab +@code{maj9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj9 +} +@end lilypond + +@item +Minor ninth +@tab +Minor seventh, major ninth +@tab +@code{m9} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m9 +} +@end lilypond + +@item +Dominant eleventh +@tab +Dominant ninth, perfect eleventh +@tab +@code{11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:11 +} +@end lilypond + +@item +Major eleventh +@tab +Major ninth, perfect eleventh +@tab +@code{maj11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj11 +} +@end lilypond + +@item +Minor eleventh +@tab +Minor ninth, perfect eleventh +@tab +@code{m11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m11 +} +@end lilypond + +@item +Dominant thirteenth +@tab +Dominant ninth, major thirteenth +@tab +@code{13} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13 +} +@end lilypond + +@item +Dominant thirteenth +@tab +Dominant eleventh, major thirteenth +@tab +@code{13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:13.11 +} +@end lilypond + +@item +Major thirteenth +@tab +Major eleventh, major thirteenth +@tab +@code{maj13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:maj13.11 +} +@end lilypond + +@item +Minor thirteenth +@tab +Minor eleventh, major thirteenth +@tab +@code{m13.11} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:m13.11 +} +@end lilypond + +@item +Suspended second +@tab +Major second, perfect fifth +@tab +@code{sus2} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus2 +} +@end lilypond + +@item +Suspended fourth +@tab +Perfect fourth, perfect fifth +@tab +@code{sus4} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + c1:sus4 +} +@end lilypond + +@item +Power chord (two-voiced) +@tab +Perfect fifth +@tab +@code{1.5} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + \powerChords + c1:1.5 +} +@end lilypond + +@item +Power chord (three-voiced) +@tab +Perfect fifth, octave +@tab +@code{1.5.8} +@tab +@lilypond[line-width=3\cm,noragged-right, notime] +\chordmode { + \powerChords + c1:1.5.8 +} +@end lilypond + +@end multitable + +@node Predefined string tunings +@appendixsec Predefined string tunings + +The chart below shows the predefined string tunings. + +@lilypondfile{display-predefined-string-tunings.ly} + +@node Predefined fretboard diagrams +@appendixsec Predefined fretboard diagrams + +The chart below shows the predefined fretboard diagrams for guitar. + +@lilypondfile{display-predefined-fretboards.ly} + +The chart below shows the predefined fretboard diagrams for ukulele. + +@lilypondfile{display-predefined-ukulele-fretboards.ly} + +The chart below shows the predefined fretboard diagrams for mandolin. + +@lilypondfile{display-predefined-mandolin-fretboards.ly} + +@node MIDI instruments +@appendixsec MIDI instruments + +The following is a list of names that can be used for the +@code{midiInstrument} property. The order of the instruments +below, starting in the left-hand column moving down, corresponds +to the General MIDI Standard's 128 Program Numbers. + +@example +acoustic grand contrabass lead 7 (fifths) +bright acoustic tremolo strings lead 8 (bass+lead) +electric grand pizzicato strings pad 1 (new age) +honky-tonk orchestral harp pad 2 (warm) +electric piano 1 timpani pad 3 (polysynth) +electric piano 2 string ensemble 1 pad 4 (choir) +harpsichord string ensemble 2 pad 5 (bowed) +clav synthstrings 1 pad 6 (metallic) +celesta synthstrings 2 pad 7 (halo) +glockenspiel choir aahs pad 8 (sweep) +music box voice oohs fx 1 (rain) +vibraphone synth voice fx 2 (soundtrack) +marimba orchestra hit fx 3 (crystal) +xylophone trumpet fx 4 (atmosphere) +tubular bells trombone fx 5 (brightness) +dulcimer tuba fx 6 (goblins) +drawbar organ muted trumpet fx 7 (echoes) +percussive organ french horn fx 8 (sci-fi) +rock organ brass section sitar +church organ synthbrass 1 banjo +reed organ synthbrass 2 shamisen +accordion soprano sax koto +harmonica alto sax kalimba +concertina tenor sax bagpipe +acoustic guitar (nylon) baritone sax fiddle +acoustic guitar (steel) oboe shanai +electric guitar (jazz) english horn tinkle bell +electric guitar (clean) bassoon agogo +electric guitar (muted) clarinet steel drums +overdriven guitar piccolo woodblock +distorted guitar flute taiko drum +guitar harmonics recorder melodic tom +acoustic bass pan flute synth drum +electric bass (finger) blown bottle reverse cymbal +electric bass (pick) shakuhachi guitar fret noise +fretless bass whistle breath noise +slap bass 1 ocarina seashore +slap bass 2 lead 1 (square) bird tweet +synth bass 1 lead 2 (sawtooth) telephone ring +synth bass 2 lead 3 (calliope) helicopter +violin lead 4 (chiff) applause +viola lead 5 (charang) gunshot +cello lead 6 (voice) +@end example + + +@node List of colors +@appendixsec List of colors + +@subsubheading Normal colors + +Usage syntax is detailed in @ref{Coloring objects}. + +@cindex List of colors +@cindex Colors, list of + +@verbatim +black white red green +blue cyan magenta yellow +grey darkred darkgreen darkblue +darkcyan darkmagenta darkyellow +@end verbatim + + +@subsubheading X color names + +X color names come several variants: + +Any name that is spelled as a single word with capitalization +(e.g. @q{LightSlateBlue}) can also be spelled as space separated +words without capitalization (e.g. @q{light slate blue}). + +The word @q{grey} can always be spelled @q{gray} (e.g. @q{DarkSlateGray}). + +Some names can take a numerical suffix (e.g. @q{LightSalmon4}). + + +@subsubheading Color Names without a numerical suffix: + +@verbatim +snow GhostWhite WhiteSmoke gainsboro FloralWhite +OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond +bisque PeachPuff NavajoWhite moccasin cornsilk +ivory LemonChiffon seashell honeydew MintCream +azure AliceBlue lavender LavenderBlush MistyRose +white black DarkSlateGrey DimGrey SlateGrey +LightSlateGrey grey LightGrey MidnightBlue navy +NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue +LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue +DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue +LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise +turquoise cyan LightCyan CadetBlue MediumAquamarine +aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen +MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen +green chartreuse MediumSpringGreen GreenYellow LimeGreen +YellowGreen ForestGreen OliveDrab DarkKhaki khaki +PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold +LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed +SaddleBrown sienna peru burlywood beige +wheat SandyBrown tan chocolate firebrick +brown DarkSalmon salmon LightSalmon orange +DarkOrange coral LightCoral tomato OrangeRed +red HotPink DeepPink pink LightPink +PaleVioletRed maroon MediumVioletRed VioletRed magenta +violet plum orchid MediumOrchid DarkOrchid +DarkViolet BlueViolet purple MediumPurple thistle +DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed +LightGreen +@end verbatim + + +@subsubheading Color names with a numerical suffix + +In the following names the suffix N can be a number in the range 1-4: + +@verbatim +snowN seashellN AntiqueWhiteN bisqueN PeachPuffN +NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN +LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN +blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN +LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN +CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN +SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN +OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN +yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN +IndianRedN siennaN burlywoodN wheatN tanN +chocolateN firebrickN brownN salmonN LightSalmonN +orangeN DarkOrangeN coralN tomatoN OrangeRedN +redN DeepPinkN HotPinkN pinkN LightPinkN +PaleVioletRedN maroonN VioletRedN magentaN orchidN +plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN +thistleN +@end verbatim + + +@subsubheading Grey Scale + +A grey scale can be obtained using: + +@example +greyN +@end example + +@noindent +Where N is in the range 0-100. + + +@node The Feta font +@appendixsec The Feta font + +@cindex Feta font +@cindex Font, Feta + +The following symbols are available in the Emmentaler font and may be +accessed directly using text markup with the name of the glyph +as shown in the tables below, +such as @code{g^\markup @{\musicglyph #"scripts.segno" @}} or +@code{\markup @{\musicglyph #"five"@}}. For more information, +see @ref{Formatting text}. + + +@menu +* Clef glyphs:: +* Time Signature glyphs:: +* Number glyphs:: +* Accidental glyphs:: +* Default Notehead glyphs:: +* Special Notehead glyphs:: +* Shape-note Notehead glyphs:: +* Rest glyphs:: +* Flag glyphs:: +* Dot glyphs:: +* Dynamic glyphs:: +* Script glyphs:: +* Arrowhead glyphs:: +* Bracket-tip glyphs:: +* Pedal glyphs:: +* Accordion glyphs:: +* Vaticana glyphs:: +* Medicaea glyphs:: +* Hufnagel glyphs:: +* Mensural glyphs:: +* Neomensural glyphs:: +* Petrucci glyphs:: +* Solesmes glyphs:: +@end menu + + +@node Clef glyphs +@unnumberedsubsec Clef glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #clefs +@end lilypond + + +@node Time Signature glyphs +@unnumberedsubsec Time Signature glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #timesig +@end lilypond + + +@node Number glyphs +@unnumberedsubsec Number glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #numbers +@end lilypond + + +@node Accidental glyphs +@unnumberedsubsec Accidental glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accidentals +@end lilypond + + +@node Default Notehead glyphs +@unnumberedsubsec Default Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #default-noteheads +@end lilypond + + +@node Special Notehead glyphs +@unnumberedsubsec Special Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #special-noteheads +@end lilypond + + +@node Shape-note Notehead glyphs +@unnumberedsubsec Shape-note Notehead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #shape-note-noteheads +@end lilypond + + +@node Rest glyphs +@unnumberedsubsec Rest glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #rests +@end lilypond + + +@node Flag glyphs +@unnumberedsubsec Flag glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #flags +@end lilypond + + +@node Dot glyphs +@unnumberedsubsec Dot glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dots +@end lilypond + + +@node Dynamic glyphs +@unnumberedsubsec Dynamic glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #dynamics +@end lilypond + + +@node Script glyphs +@unnumberedsubsec Script glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #scripts +@end lilypond + + +@node Arrowhead glyphs +@unnumberedsubsec Arrowhead glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #arrowheads +@end lilypond + + +@node Bracket-tip glyphs +@unnumberedsubsec Bracket-tip glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #brackettips +@end lilypond + + +@node Pedal glyphs +@unnumberedsubsec Pedal glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #pedal +@end lilypond + + +@node Accordion glyphs +@unnumberedsubsec Accordion glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #accordion +@end lilypond + + +@node Vaticana glyphs +@unnumberedsubsec Vaticana glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #vaticana +@end lilypond + + +@node Medicaea glyphs +@unnumberedsubsec Medicaea glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #medicaea +@end lilypond + + +@node Hufnagel glyphs +@unnumberedsubsec Hufnagel glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #hufnagel +@end lilypond + + +@node Mensural glyphs +@unnumberedsubsec Mensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #mensural +@end lilypond + + +@node Neomensural glyphs +@unnumberedsubsec Neomensural glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #neomensural +@end lilypond + + +@node Petrucci glyphs +@unnumberedsubsec Petrucci glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #petrucci +@end lilypond + + +@node Solesmes glyphs +@unnumberedsubsec Solesmes glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplines \override-lines #'(word-space . 4) + \doc-chars #solesmes +@end lilypond + + +@node Note head styles +@appendixsec Note head styles + +@cindex note head styles +The following styles may be used for note heads. + +@lilypondfile[noindent]{note-head-style.ly} + + +@node Text markup commands +@appendixsec Text markup commands + +@include markup-commands.tely + + +@node Text markup list commands +@appendixsec Text markup list commands + +The following commands can all be used with @code{\markuplines}: + +@include markup-list-commands.tely + + +@node List of articulations +@appendixsec List of articulations + + +@cindex accent +@cindex accentus +@cindex circulus +@cindex coda +@cindex downbow +@cindex downmordent +@cindex downprall +@cindex espressivo +@cindex fermata +@cindex flageolet +@cindex halfopen +@cindex ictus +@cindex lheel +@cindex lineprall +@cindex longfermata +@cindex ltoe +@cindex marcato +@cindex mordent +@cindex open +@cindex portato +@cindex prall +@cindex pralldown +@cindex prallmordent +@cindex prallprall +@cindex prallup +@cindex reverseturn +@cindex rheel +@cindex rtoe +@cindex segno +@cindex semicirculus +@cindex shortfermata +@cindex signumcongruentiae +@cindex snappizzicato +@cindex staccatissimo +@cindex staccato +@cindex stopped +@cindex tenuto +@cindex thumb +@cindex trill +@cindex turn +@cindex upbow +@cindex upmordent +@cindex upprall +@cindex varcoda +@cindex verylongfermata + +The following scripts are available in the Feta font and may be +attached to notes (eg. @samp{c\accent}). + +@c Articulations and ornamentations +@c Fingering instructions (for "thumb") +@c Common notation for unfretted strings +@c Bowing indications +@c Harmonics +@c Snap (Bartók) pizzicato +@c Custom percussion staves (for "halfopen" -- not yet funindexed) +@c References for wind instruments (for "open"/"stopped" -- not yet funindexed) + + +@menu +* Articulation scripts:: +* Ornament scripts:: +* Fermata scripts:: +* Instrument-specific scripts:: +* Repeat sign scripts:: +* Ancient scripts:: +@end menu + + +@node Articulation scripts +@unnumberedsubsec Articulation scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #articulations } +@end lilypond + +@node Ornament scripts +@unnumberedsubsec Ornament scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #ornaments } +@end lilypond + +@node Fermata scripts +@unnumberedsubsec Fermata scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #fermatas } +@end lilypond + +@node Instrument-specific scripts +@unnumberedsubsec Instrument-specific scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #instrument-specific } +@end lilypond + +@node Repeat sign scripts +@unnumberedsubsec Repeat sign scripts + +@lilypond[quote] +\include "script-chart.ly" +\new RhythmicStaff { \scriptStaff #repeats } +@end lilypond + +@node Ancient scripts +@unnumberedsubsec Ancient scripts + +@lilypond[quote] +\include "script-chart.ly" +\include "gregorian.ly" +\new VaticanaStaff { \scriptStaffAncient #ancient } +@end lilypond + + +@node Percussion notes +@appendixsec Percussion notes + +@lilypondfile[quote]{percussion-chart.ly} + + +@node Technical glossary +@appendixsec Technical glossary + +A glossary of the technical terms and concepts used internally in +LilyPond. These terms may appear in the manuals, on mailing lists +or in the source code. + +@menu +* alist:: +* callback:: +* closure:: +* glyph:: +* grob:: +* immutable:: +* interface:: +* lexer:: +* mutable:: +* output-def:: +* parser:: +* parser variable:: +* prob:: +* simple closure:: +* smob:: +* stencil:: +@end menu + +@node alist +@unnumberedsubsec alist + +@cindex alist +@cindex association list + +An association list or @strong{alist} for short is a Scheme pair +which associates a value with a key: @w{@code{(key . value)}}. For +example, in @file{scm/lily.scm}, the alist +@w{@qq{type-p-name-alist}} associates certain type predicates +(e.g.@tie{}@code{ly:music?}) with names (e.g.@tie{}@qq{music}) so +that type-check failures can be reported with a console message that +includes the name of the expected type predicate. + +@node callback +@unnumberedsubsec callback + +@cindex callback + +A @strong{callback} is a routine, function or method whose reference is +passed as an argument in a call to another routine, so allowing +the called routine to invoke it. The technique enables a lower- +level software layer to call a function defined in a higher +layer. Callbacks are used extensively in LilyPond to permit +user-level Scheme code to define how many low-level actions are +performed. + + +@node closure +@unnumberedsubsec closure + +@cindex closure +@cindex simple closure + +In Scheme, a @strong{closure} is created when a function, usually +a lambda expression, is passed as a variable. The closure contains +the function's code plus references to the lexical bindings of the +function's free variables (i.e. those variables used in the +expression but defined outside it). When this function is applied +to different arguments later, the free variable bindings that were +captured in the closure are used to obtain the values of the free +variables to be used in the calculation. One useful property of +closures is the retention of internal variable values between +invocations, so permitting state to be maintained. + +A @strong{simple closure} is a closure whose expression has no free +variables and hence no free variable bindings. + +A simple closure is represented in LilyPond by a smob containing +the expression and a method to apply the expression to a passed +list of arguments. + + +@node glyph +@unnumberedsubsec glyph + +@cindex glyph +@cindex font +@cindex typeface + +A @strong{glyph} is a particular graphical representation of a typographic +character, or a combination of two characters formating a ligature. +A set of glyphs with a single style and shape comprise a font, and +a set of fonts covering several styles and sizes comprise a typeface. + + +@seealso +Notation Reference: +@ref{Fonts}, +@ref{Text encoding}. + + +@node grob +@unnumberedsubsec grob + +@cindex grob +@cindex layout objects +@cindex graphical objects + +LilyPond objects which represent items of notation in the printed +output such as note heads, stems, slurs, ties, fingering, clefs, +etc are called @q{Layout objects}, often known as @q{GRaphical +OBjects}, or @strong{grobs} for short. They are represented by +instances of the @code{Grob} class. + +@seealso +Learning Manual: +@rlearning{Objects and interfaces}, +@rlearning{Naming conventions of objects and properties}, +@rlearning{Properties of layout objects}. + +Internals Reference: +@rinternals{grob-interface}, +@rinternals{All layout objects}. + + +@node immutable +@unnumberedsubsec immutable + +@cindex immutable objects +@cindex immutable properties +@cindex shared properties + +An @strong{immutable} object is one whose state cannot be modified +after creation, in contrast to a mutable object, which can be +modified after creation. + +In LilyPond, immutable or shared properties define the default +style and behavior of grobs. They are shared between many objects. +In apparent contradiction to the name, they can be changed using +@code{\override} and @code{\revert}. + +@seealso +Notation Reference: +@ref{mutable}. + +@node interface +@unnumberedsubsec interface + +@cindex interface +@cindex grob-interface +@cindex graphical object interfaces + +Actions and properties which are common to a number of grobs are +grouped together in an object called a @code{grob-interface}, or +just @q{interface} for short. + +@seealso +Learning Manual: +@rlearning{Objects and interfaces}, +@rlearning{Naming conventions of objects and properties}, +@rlearning{Properties found in interfaces}. + +Notation Reference: +@ref{Layout interfaces}. + +Internals Reference: +@rinternals{Graphical Object Interfaces}. + + +@node lexer +@unnumberedsubsec lexer + +@cindex lexer +@cindex Flex + +A @strong{lexer} is a program which converts a sequence of +characters into a sequence of tokens, a process called lexical +analysis. The LilyPond lexer converts the stream obtained from an +input @file{.ly} file into a tokenized stream more suited to the +next stage of processing - parsing, for which see @ref{parser}. +The LilyPond lexer is built with Flex from the lexer file +@file{lily/lexer.ll} which contains the lexical rules. This file +is part of the source code and is not included in the LilyPond +binary installation. + + +@node mutable +@unnumberedsubsec mutable + +@cindex mutable objects +@cindex mutable properties + +A @strong{mutable} object is one whose state can be modified after +creation, in contrast to an immutable object, whose state is fixed +at the time of creation. + +In LilyPond, mutable properties contain values that are specific to +one grob. Typically, lists of other objects or results from +computations are stored in mutable properties. + +@seealso +Notation Reference: +@ref{immutable}. + +@node output-def +@unnumberedsubsec output-def + +@cindex output-def + +An instance of the @code{Output-def} class contains the methods and +data structures associated with an output block. Instances are +created for midi, layout and paper blocks. + + +@node parser +@unnumberedsubsec parser + +@cindex parser +@cindex Bison +@cindex grammar for LilyPond +@cindex BNF + +A @strong{parser} analyzes the sequence of tokens produced by a +lexer to determine its grammatical structure, grouping the tokens +progressively into larger groupings according to the rules of the +grammar. If the sequence of tokens is valid the end product is a +tree of tokens whose root is the grammar's start symbol. If this +cannot be achieved the file is invalid and an appropriate error +message is produced. The syntactic groupings and the rules for +constructing the groupings from their parts for the LilyPond syntax +are defined in @file{lily/parser.yy} and shown in Backus Normal Form +(BNF) in @ref{LilyPond grammar}. This file is used to build the +parser during the program build by the parser generator, Bison. It +is part of the source code and is not included in the LilyPond +binary installation. + + +@node parser variable +@unnumberedsubsec parser variable + +@cindex parser variable +@cindex Scheme variable +@cindex global variable +@cindex afterGraceFraction +@cindex musicQuotes +@cindex mode +@cindex output-count +@cindex output-suffix +@cindex parseStringResult +@cindex partCombineListener +@cindex pitchnames +@cindex toplevel-bookparts +@cindex toplevel-scores +@cindex showLastLength +@cindex showFirstLength + +These are variables defined directly in Scheme. Their direct +use by users is strongly discouraged, because their scoping +semantics can be confusing. + +When the value of such a variable is changed in a @file{.ly} file, +the change is global, and unless explicitly reverted, the new value +will persist to the end of the file, affecting subsequent +@code{\score} blocks as well as external files added with the +@code{\include} command. This can lead to unintended consequences +and in complex typesetting projects the consequent errors can be +difficult to track down. + +LilyPond uses the following parser variables: + +@itemize +@item afterGraceFraction +@item musicQuotes +@item mode +@item output-count +@item output-suffix +@item parseStringResult +@item partCombineListener +@item pitchnames +@item toplevel-bookparts +@item toplevel-scores +@item showLastLength +@item showFirstLength +@end itemize + + +@node prob +@unnumberedsubsec prob + +@cindex prob +@cindex property object + +PRoperty OBjects, or @strong{probs} for short, are instances of +the @code{Prob} class, a simple base class for objects which have +mutable and immutable property alists and the methods to manipulate +them. The @code{Music} and @code{Stream_event} classes derive from +@code{Prob}. Instances of the @code{Prob} class are also created +to hold the formatted content of system grobs and titling blocks +during page layout. + + +@node simple closure +@unnumberedsubsec simple closure + +See @ref{closure}. + + +@node smob +@unnumberedsubsec smob + +@cindex smob +@cindex Scheme object + +@strong{Smobs}, or ScheMe OBjects, are part of the mechanism used +by Guile to export C and C++ objects to Scheme code. In LilyPond, +smobs are created from C++ objects through macros. There are two +types of smob objects: simple smobs, intended for simple immutable +objects like numbers, and complex smobs, used for objects with +identities. If you have access to the LilyPond sources, more +information can be found in @file{lily/includes/smob.hh}. + +@node stencil +@unnumberedsubsec stencil + +@cindex stencil + +An instance of the @strong{stencil} class holds the information +required to print a typographical object. It is a simple smob +containing a confining box, which defines the vertical and +horizontal extents of the object, and a Scheme expression which +will print the object when evaluated. Stencils may be combined +to form more complex stencils defined by a tree of Scheme +expressions formed from the Scheme expressions of the component +stencils. + +The @code{stencil} property, which connects a grob to its stencil, +is defined in the @code{grob-interface} interface. + +@seealso +Internals Reference: +@rinternals{grob-interface}. + + +@node All context properties +@appendixsec All context properties + +@include context-properties.tely + + +@node Layout properties +@appendixsec Layout properties + +@include layout-properties.tely + + +@node Available music functions +@appendixsec Available music functions + +@include identifiers.tely + + +@node Predefined type predicates +@appendixsec Predefined type predicates + +@include type-predicates.tely + + +@node Scheme functions +@appendixsec Scheme functions + +@include scheme-functions.tely + diff --git a/Documentation/notation/notation.itely b/Documentation/notation/notation.itely new file mode 100644 index 0000000000..69c2cd79e2 --- /dev/null +++ b/Documentation/notation/notation.itely @@ -0,0 +1,36 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Musical notation +@chapter Musical notation + +This chapter explains how to create musical notation. + +@menu +* Pitches:: Writing and display the pitches of notes. +* Rhythms:: Writing and displaying the durations of notes. +* Expressive marks:: Adding expression to notes. +* Repeats:: Repeat music. +* Simultaneous notes:: More than one note at once. +* Staff notation:: Displaying staves. +* Editorial annotations:: Special notation to increase legibility. +* Text:: Adding text to scores. +@end menu + +@include notation/pitches.itely +@include notation/rhythms.itely +@include notation/expressive.itely +@include notation/repeats.itely +@include notation/simultaneous.itely +@include notation/staff.itely +@include notation/editorial.itely +@include notation/text.itely + diff --git a/Documentation/notation/percussion.itely b/Documentation/notation/percussion.itely new file mode 100644 index 0000000000..f325de0abc --- /dev/null +++ b/Documentation/notation/percussion.itely @@ -0,0 +1,620 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Percussion +@section Percussion + +@menu +* Common notation for percussion:: +@end menu + +@node Common notation for percussion +@subsection Common notation for percussion + +Rhythmic music is primarily used for percussion and drum notation, but it can +also be used to show the rhythms of melodies. + +@menu +* References for percussion:: +* Basic percussion notation:: +* Drum rolls:: +* Pitched percussion:: +* Percussion staves:: +* Custom percussion staves:: +* Ghost notes:: +@end menu + +@node References for percussion +@unnumberedsubsubsec References for percussion + +@c TODO add more references. + +@itemize + +@item Some percussion may be notated on a rhythmic staff; this is +discussed in @ref{Showing melody rhythms}, and +@ref{Instantiating new staves}. + +@item MIDI output is discussed in a separate section; please see +@ref{Percussion in MIDI}. + +@end itemize + + +@seealso +Notation Reference: +@ref{Showing melody rhythms}, +@ref{Instantiating new staves}. +@ref{Percussion in MIDI}. + +Snippets: +@rlsr{Percussion}. + + +@node Basic percussion notation +@unnumberedsubsubsec Basic percussion notation + +@cindex percussion +@cindex drums + +Percussion notes may be entered in @code{\drummode} mode, which is +similar to the standard mode for entering notes. The simplest way +to enter percussion notes is to use the @code{\drums} command, +which creates the correct context and entry mode for percussion: + +@lilypond[quote,verbatim] +\drums { + hihat4 hh bassdrum bd +} +@end lilypond + +This is shorthand for: + +@lilypond[quote,verbatim] +\new DrumStaff { + \drummode { + hihat4 hh bassdrum bd + } +} +@end lilypond + +Each piece of percussion has a full name and an abbreviated name, +and both can be used in input files. The full list of percussion +note names may be found in @ref{Percussion notes}. + +@cindex clef, percussion +@cindex percussion clef + +Note that the normal notation of pitches (such as @code{cis4}) in a +@code{DrumStaff} context will cause an error message. Percussion clefs +are added automatically to a @code{DrumStaff} context but they can also +be set explicitly. Other clefs may be used as well. + +@lilypond[quote,ragged-right,verbatim] +\drums { + \clef treble + hh4 hh hh hh + \break + \clef percussion + bd4 bd bd bd +} +@end lilypond + + +There are a few issues concerning MIDI support for percussion +instruments; for details please see @ref{Percussion in MIDI}. + + +@seealso +Notation Reference: +@ref{Percussion in MIDI}, +@ref{Percussion notes}. + +File: +@file{ly/drumpitch-init.ly} + +Snippets: +@rlsr{Percussion}. + + +@node Drum rolls +@unnumberedsubsubsec Drum rolls + +Drum rolls are indicated with three slashes across the stem. For +quarter notes or longer the three slashes are shown explicitly, +eighth notes are shown with two slashes (the beam being the +third), and drum rolls shorter than eighths have one stem slash to +supplement the beams. This is achieved with the tremolo notation, +@code{:32}, as described in @ref{Tremolo repeats}. Here is an +example of some snare rolls: + +@lilypond[quote,verbatim] +\drums { + \time 2/4 + sn16 sn8 sn16 sn8 sn8:32 ~ + sn8 sn8 sn4:32 ~ + sn4 sn8 sn16 sn16 + sn4 r4 +} +@end lilypond + +Sticking can be indicated by placing @code{^"R"} or @code{^"L"} +after the note. The @code{staff-padding} property may be +overridden to achieve a pleasing baseline. + +@lilypond[quote,verbatim] +\drums { + \repeat unfold 2 { + sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" + } +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Percussion}. + + +@node Pitched percussion +@unnumberedsubsubsec Pitched percussion + +Certain pitched percussion instruments (e.g. xylophone, +vibraphone, and timpani) are written using normal staves. +This is covered in other sections of the manual. + + +@seealso +@c TODO: possibly link to an alternate section of NR 3.5, if +@c "percussion in MIDI" gets a separate subsubsection for +@c pitched percussion sounds. -gp +Notation Reference: +@ref{Percussion in MIDI}. + +Snippets: +@rlsr{Percussion}. + + +@node Percussion staves +@unnumberedsubsubsec Percussion staves + +@cindex percussion +@cindex drums + +A percussion part for more than one instrument typically uses a +multiline staff where each position in the staff refers to one +piece of percussion. To typeset the music, the notes must be +interpreted in @code{DrumStaff} and @code{DrumVoice} context. + +@lilypond[quote,verbatim] +up = \drummode { + crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat +} +down = \drummode { + bassdrum4 snare8 bd r bd sn4 +} +\new DrumStaff << + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + +The above example shows verbose polyphonic notation. The short +polyphonic notation, described in @rlearning{I'm hearing Voices}, +can also be used. +For example, + +@lilypond[quote,verbatim] +\new DrumStaff << + \drummode { + bd4 sn4 bd4 sn4 + << { + \repeat unfold 16 hh16 + } \\ { + bd4 sn4 bd4 sn4 + } >> + } +>> +@end lilypond + +There are also other layout possibilities. To use these, set the +property @code{drumStyleTable} in context @code{DrumVoice}. The +following variables have been predefined: + +@c TODO: decide what to do about this table. (ie verbatim or not) +@table @code + +@item drums-style +This is the default. It typesets a typical drum kit on a +five-line staff: + +@lilypond[quote,line-width=10.0\cm] +nam = \lyricmode { + cymc cyms cymr hh hhc hho hhho hhp + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } +mus = \drummode { + cymc cyms cymr hh hhc hho hhho hhp \break + cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } +\score { + << \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics \nam + >> + \layout { + \context { + \Score + \override LyricText #'font-family = #'typewriter + \override BarNumber #'transparent =##T + } + } +} +@end lilypond + +The drum scheme supports six different toms. When there are fewer +toms, simply select the toms that produce the desired result. For +example, to get toms on the three middle lines you use +@code{tommh}, @code{tomml}, and @code{tomfh}. + +@item timbales-style +This typesets timbales on a two line staff: + +@lilypond[quote,ragged-right] +nam = \lyricmode { timh ssh timl ssl cb } +mus = \drummode { timh ssh timl ssl cb s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + \override StaffSymbol #'line-count = #2 + \override StaffSymbol #'staff-space = #2 + \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) + drumStyleTable = #timbales-style + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item congas-style +This typesets congas on a two line staff: + +@lilypond[quote,ragged-right] +nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } +mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + drumStyleTable = #congas-style + \override StaffSymbol #'line-count = #2 + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item bongos-style +This typesets bongos on a two line staff: + +@lilypond[quote,ragged-right] +nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } +mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } + +<< + \new DrumStaff \with { + \remove Bar_engraver + \remove Time_signature_engraver + \override StaffSymbol #'line-count = #2 + drumStyleTable = #bongos-style + + %% this sucks; it will lengthen stems. + \override StaffSymbol #'staff-space = #2 + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond + +@item percussion-style +To typeset all kinds of simple percussion on one line staves: + +@lilypond[quote,ragged-right] +nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } +mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } + +<< + \new DrumStaff \with{ + \remove Bar_engraver + drumStyleTable = #percussion-style + \override StaffSymbol #'line-count = #1 + \remove Time_signature_engraver + \override Stem #'transparent = ##t + \override Stem #'Y-extent = ##f + } \mus + \new Lyrics { + \override LyricText #'font-family = #'typewriter + \nam + } +>> +@end lilypond +@end table + + +@node Custom percussion staves +@unnumberedsubsubsec Custom percussion staves + +If you do not like any of the predefined lists you can define your +own list at the top of your file. + +@lilypond[quote,verbatim] +#(define mydrums '( + (bassdrum default #f -1) + (snare default #f 0) + (hihat cross #f 1) + (halfopenhihat cross "halfopen" 1) + (pedalhihat xcircle "stopped" 2) + (lowtom diamond #f 3))) +up = \drummode { hh8 hh hhho hhho hhp4 hhp } +down = \drummode { bd4 sn bd toml8 toml } + +\new DrumStaff << + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \new DrumVoice { \voiceOne \up } + \new DrumVoice { \voiceTwo \down } +>> +@end lilypond + + +@snippets + +@c TODO: MOVE ALL THESE TO LSR! -gp + +Here are some examples: + +Two Woodblocks, entered with wbh (high woodblock) and wbl (low woodblock) + +@lilypond[quote,verbatim] +% These lines define the position of the woodblocks in the stave; +% if you like, you can change it or you can use special note heads +% for the woodblocks. +#(define mydrums '((hiwoodblock default #t 3) + (lowoodblock default #t -2))) + +woodstaff = { + % This defines a staff with only two lines. + % It also defines the positions of the two lines. + \override Staff.StaffSymbol #'line-positions = #'(-2 3) + + % This is necessary; if not entered, the barline would be too short! + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) +} + +\new DrumStaff { + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + % with this you load your new drum style table + \woodstaff + + \drummode { + \time 2/4 + wbl8 wbl16 wbl wbh8-> wbl | + wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | + } +} +@end lilypond + +Note that in this special case the length of the barline must +altered with @code{\override Staff.BarLine #'bar-extent #'(from . to)}. +Otherwise it would be too short. And you have also to define the +positions of the two stafflines. For more information about these +delicate things have a look at @ref{Staff symbol}. + +A tambourine, entered with @q{tamb}: + +@lilypond[quote,verbatim] +#(define mydrums '((tambourine default #t 0))) + +tambustaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Tambourine" +} + +\new DrumStaff { + \tambustaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + \time 6/8 + tamb8. tamb16 tamb8 tamb tamb tamb | + tamb4. tamb8 tamb tamb | + % the trick with the scaled duration and the shorter rest + % is neccessary for the correct ending of the trill-span! + tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | + } +} +@end lilypond + +Music for Tam-Tam (entered with @q{tt}): + +@lilypond[quote,verbatim] +#(define mydrums '((tamtam default #t 0))) + +tamtamstaff = { + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Tamtam" +} + +\new DrumStaff { + \tamtamstaff + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + + \drummode { + tt 1 \pp \laissezVibrer + } +} +@end lilypond + +Two different bells, entered with @q{cb} (cowbell) and @q{rb} (ridebell) + +@lilypond[quote,verbatim] +#(define mydrums '((ridebell default #t 3) + (cowbell default #t -2))) + +bellstaff = { + \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) + \set DrumStaff.instrumentName = #"Different Bells" +} + +\new DrumStaff { + \bellstaff + \drummode { + \time 2/4 + rb8 rb cb cb16 rb-> ~ | + rb16 rb8 rb16 cb8 cb | + } +} +@end lilypond + +Here a short example taken from Stravinsky's @q{L'histoire du Soldat}. + +@lilypond[quote,verbatim] +#(define mydrums '((bassdrum default #t 4) + (snare default #t -4) + (tambourine default #t 0))) + +global = { + \time 3/8 s4. + \time 2/4 s2*2 + \time 3/8 s4. + \time 2/4 s2 +} + +drumsA = { + \context DrumVoice << + { \global } + { \drummode { + \autoBeamOff + \stemDown sn8 \stemUp tamb s8 | + sn4 \stemDown sn4 | + \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | + \stemDown sn8 \stemUp tamb s8 | + \stemUp sn4 s8 \stemUp tamb + } + } + >> +} + +drumsB = { + \drummode { + s4 bd8 s2*2 s4 bd8 s4 bd8 s8 + } +} + +\layout { + indent = #40 +} + +\score { + \new StaffGroup << + \new DrumStaff { + \set DrumStaff.instrumentName = \markup { + \column { + "Tambourine" + "et" + "caisse claire s. timbre" + } + } + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsA + } + + \new DrumStaff { + \set DrumStaff.instrumentName = #"Grosse Caisse" + \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) + \drumsB } + >> +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Percussion}. + +Internals Reference: +@rinternals{DrumStaff}, +@rinternals{DrumVoice}. + + +@c TODO: check name -gp +@node Ghost notes +@unnumberedsubsubsec Ghost notes + +Ghost notes for drums and percussion may be created using the +@code{\parenthesize} command detailed in @ref{Parentheses}. +However, the default @code{\drummode} does not include the +@code{Parenthesis_engraver} plugin which allows this. + +@lilypond[quote,ragged-right,verbatim] +\new DrumStaff \with { + \consists "Parenthesis_engraver" +} +<< + \context DrumVoice = "1" { s1 } + \context DrumVoice = "2" { s1 } + \drummode { + << + { + hh8[ hh] hh16 + < \parenthesize sn > hh + < \parenthesize sn > hh8 hh + } \\ + { + bd4 r4 bd8 bd r8 bd + } + >> + } +>> +@end lilypond + +@noindent +Also note that you must add chords (@code{< >} brackets) +around each @code{\parenthesize} statement. + + +@seealso +Snippets: +@rlsr{Percussion}. diff --git a/Documentation/notation/pitches.itely b/Documentation/notation/pitches.itely new file mode 100644 index 0000000000..5116347482 --- /dev/null +++ b/Documentation/notation/pitches.itely @@ -0,0 +1,3007 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@node Pitches +@section Pitches + +@lilypondfile[quote]{pitches-headword.ly} + +This section discusses how to specify the pitch of notes. There +are three steps to this process: input, modification, and output. + +@menu +* Writing pitches:: +* Changing multiple pitches:: +* Displaying pitches:: +* Note heads:: +@end menu + + +@node Writing pitches +@subsection Writing pitches + +This section discusses how to input pitches. There are two +different ways to place notes in octaves: absolute and relative +mode. In most cases, relative mode will be more convenient. + +@menu +* Absolute octave entry:: +* Relative octave entry:: +* Accidentals:: +* Note names in other languages:: +@end menu + + +@node Absolute octave entry +@unnumberedsubsubsec Absolute octave entry + +@cindex pitch names +@cindex pitches +@cindex absolute +@cindex absolute octave specification +@cindex octave specification, absolute +@cindex absolute octave entry +@cindex octave entry, absolute + +A pitch name is specified using lowercase letters@tie{}@code{a} +through@tie{}@code{g}. The note names @code{c} to @code{b} are +engraved in the octave below middle C. + +@c don't use c' here. +@lilypond[verbatim,quote] +{ + \clef bass + c4 d e f + g4 a b c + d4 e f g +} +@end lilypond + +@cindex octave changing mark + +@funindex ' +@funindex , + +Other octaves may be specified with a single quote@tie{}(@code{'}) +or comma@tie{}(@code{,}) character. Each@tie{}@code{'} raises the +pitch by one octave; each@tie{}@code{,} lowers the pitch by an +octave. + +@lilypond[verbatim,quote] +{ + \clef treble + c'4 c'' e' g + d''4 d' d c + \clef bass + c,4 c,, e, g + d,,4 d, d c +} +@end lilypond + + +@seealso +Music Glossary: +@rglos{Pitch names}. + +Snippets: +@rlsr{Pitches}. + + +@node Relative octave entry +@unnumberedsubsubsec Relative octave entry + +@cindex relative +@cindex relative octave entry +@cindex octave entry, relative +@cindex relative octave specification +@cindex octave specification, relative + +@funindex relative +@funindex \relative + +When octaves are specified in absolute mode it is easy to +accidentally put a pitch in the wrong octave. Relative octave +mode reduces these errors since most of the time it is not +necessary to indicate any octaves at all. Furthermore, in +absolute mode a single mistake may be difficult to spot, while in +relative mode a single error puts the rest of the piece off by one +octave. + +@example +\relative @var{startpitch} @var{musicexpr} +@end example + +In relative mode, each note is assumed to be as close to the +previous note as possible. This means that the octave of each +pitch inside @code{@var{musicexpr}} is calculated as follows: + +@itemize +@item +If no octave changing mark is used on a pitch, its octave is +calculated so that the interval with the previous note is less +than a fifth. This interval is determined without considering +accidentals. + +@item +An octave changing mark@tie{}@code{'} or@tie{}@code{,} can be +added to respectively raise or lower a pitch by an extra octave, +relative to the pitch calculated without an octave mark. + +@item +Multiple octave changing marks can be used. For example, +@code{''}@tie{}and@tie{}@code{,,} will alter the pitch by two +octaves. + +@item +The pitch of the first note is relative to +@code{@var{startpitch}}. @code{@var{startpitch}} is specified in +absolute octave mode, and it is recommended that it be a octave of +@code{c}. +@end itemize + +Here is the relative mode shown in action: + +@lilypond[verbatim,quote] +\relative c { + \clef bass + c d e f + g a b c + d e f g +} +@end lilypond + +Octave changing marks are used for intervals greater than a +fourth: + +@lilypond[verbatim,quote] +\relative c'' { + c g c f, + c' a, e'' c +} +@end lilypond + +A note sequence without a single octave mark can nevertheless span +large intervals: + +@lilypond[verbatim,quote] +\relative c { + c f b e + a d g c +} +@end lilypond + +When @code{\relative} blocks are nested, the innermost +@code{\relative} block applies. + +@lilypond[verbatim,quote] +\relative c' { + c d e f + \relative c'' { + c d e f + } +} +@end lilypond + +@code{\relative} has no effect on @code{\chordmode} blocks. + +@lilypond[verbatim,quote] +\new Staff { + \relative c''' { + \chordmode { c1 } + } + \chordmode { c1 } +} +@end lilypond + +@code{\relative} is not allowed inside of @code{\chordmode} blocks. + +Music inside a @code{\transpose} block is absolute unless a +@code{\relative} is included. + +@lilypond[verbatim,quote] +\relative c' { + d e + \transpose f g { + d e + \relative c' { + d e + } + } +} +@end lilypond + + +@cindex chords and relative octave entry +@cindex relative octave entry and chords + +If the preceding item is a chord, the first note of the chord is +used as the reference point for the octave placement of a +following note or chord. Inside chords, the next note is always +relative to the preceding one. Examine the next example +carefully, paying attention to the @code{c} notes. + +@lilypond[verbatim,quote] +\relative c' { + c + + + +} +@end lilypond + +As explained above, the octave of pitches is calculated only with +the note names, regardless of any alterations. Therefore, an +E-double-sharp following a B will be placed higher, while an +F-double-flat will be placed lower. In other words, a +double-augmented fourth is considered a smaller interval than a +double-diminished fifth, regardless of the number of semitones +that each interval contains. + +@lilypond[verbatim,quote] +\relative c'' { + c2 fis + c2 ges + b2 eisis + b2 feses +} +@end lilypond + + +@seealso +Music Glossary: +@rglos{fifth}, +@rglos{interval}, +@rglos{Pitch names}. + +Notation Reference: +@ref{Octave checks}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{RelativeOctaveMusic}. + + +@cindex relative octave entry and transposition +@cindex transposition and relative octave entry + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + + +@c DEPRECATED +If no @code{@var{startpitch}} is specified for @code{\relative}, +then@tie{}@code{c'} is assumed. However, this is a deprecated +option and may disappear in future versions, so its use is +discouraged. + + + +@node Accidentals +@unnumberedsubsubsec Accidentals + +@cindex accidental +@cindex key signature +@cindex clef + +@c duplicated in Key signature and Accidentals +@warning{New users are sometimes confused about accidentals and +key signatures. In LilyPond, note names are the raw input; key +signatures and clefs determine how this raw input is displayed. +An unaltered note like@tie{}@code{c} means @q{C natural}, +regardless of the key signature or clef. For more information, +see @rlearning{Accidentals and key signatures}.} + +@cindex note names, Dutch +@cindex note names, default +@cindex default note names +@cindex sharp +@cindex flat +@cindex double sharp +@cindex sharp, double +@cindex double flat +@cindex flat, double +@cindex natural sign +@cindex natural pitch + +A @notation{sharp} pitch is made by adding @code{is} to the note +name, and a @notation{flat} pitch by adding @code{es}. As you +might expect, a @notation{double sharp} or @notation{double flat} +is made by adding @code{isis} or @code{eses}. This syntax is +derived from Dutch note naming conventions. To use other names +for accidentals, see @ref{Note names in other languages}. + +@lilypond[verbatim,quote,relative=2] +ais1 aes aisis aeses +@end lilypond + +A natural will cancel the effect of an accidental or key +signature. However, naturals are not encoded into the note name +syntax with a suffix; a natural pitch is shown as a simple note +name: + +@lilypond[verbatim,quote,relative=2] +a4 aes a2 +@end lilypond + +@cindex quarter tones +@cindex semi-flats +@cindex semi-sharps + +Quarter tones may be added; the following is a series of Cs with +increasing pitches: + +@lilypond[verbatim,quote,relative=2] +ceseh1 ces ceh c cih cis cisih +@end lilypond + + + +@cindex accidental, reminder +@cindex accidental, cautionary +@cindex accidental, parenthesized +@cindex reminder accidental +@cindex cautionary accidental +@cindex parenthesized accidental + +@funindex ? +@funindex ! + + +Normally accidentals are printed automatically, but you may also +print them manually. A reminder accidental can be forced by +adding an exclamation mark@tie{}@code{!} after the pitch. A +cautionary accidental (i.e., an accidental within parentheses) can +be obtained by adding the question mark@tie{}@code{?} after the +pitch. These extra accidentals can also be used to produce +natural signs. + +@lilypond[verbatim,quote,relative=2] +cis cis cis! cis? c c c! c? +@end lilypond + +@cindex accidental on tied note +@cindex tied note, accidental + +Accidentals on tied notes are only printed at the beginning of a +new system: + +@lilypond[verbatim,quote,relative=2] +cis1~ cis~ +\break +cis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle,ragged-right] +{hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-extra-naturals-from-being-automatically-added.ly} + +@seealso +Music Glossary: +@rglos{sharp}, +@rglos{flat}, +@rglos{double sharp}, +@rglos{double flat}, +@rglos{Pitch names}, +@rglos{quarter tone}. + +Learning Manual: +@rlearning{Accidentals and key signatures}. + +Notation Reference: +@ref{Automatic accidentals}, +@ref{Annotational accidentals (musica ficta)}, +@ref{Note names in other languages}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Accidental_engraver}, +@rinternals{Accidental}, +@rinternals{AccidentalCautionary}, +@rinternals{accidental-interface}. + + +@cindex accidental, quarter-tone +@cindex quarter-tone accidental + +@knownissues + +There are no generally accepted standards for denoting +quarter-tone accidentals, so LilyPond's symbol does not conform to +any standard. + + + +@node Note names in other languages +@unnumberedsubsubsec Note names in other languages + +@cindex note names, other languages +@cindex pitch names, other languages +@cindex language, note names in other +@cindex language, pitch names in other + +There are predefined sets of note and accidental names for various +other languages. Selecting the note name language is usually done +at the beginning of the file; the following example is written +using Italian note names: + +@lilypond[quote,verbatim] +\language "italiano" + +\relative do' { + do re mi sib +} +@end lilypond + +The available languages and the note names they define are: + +@quotation +@multitable {@code{nederlands}} {do re mi fa sol la sib si} +@headitem Language + @tab Note Names +@item @code{nederlands} + @tab c d e f g a bes b +@item @code{catalan} + @tab do re mi fa sol la sib si +@item @code{deutsch} + @tab c d e f g a b h +@item @code{english} + @tab c d e f g a bf b +@item @code{espanol} + @tab do re mi fa sol la sib si +@item @code{italiano} + @tab do re mi fa sol la sib si +@item @code{norsk} + @tab c d e f g a b h +@item @code{portugues} + @tab do re mi fa sol la sib si +@item @code{suomi} + @tab c d e f g a b h +@item @code{svenska} + @tab c d e f g a b h +@item @code{vlaams} + @tab do re mi fa sol la sib si +@end multitable +@end quotation + +In addition to note names, accidental suffixes may +also vary depending on the language: + +@quotation +@multitable {@code{nederlands}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} +@headitem Language + @tab sharp @tab flat @tab double sharp @tab double flat +@item @code{nederlands} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{catalan} + @tab -d/-s @tab -b @tab -dd/-ss @tab -bb +@item @code{deutsch} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{english} + @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp + @tab -ff/-flatflat +@item @code{espanol} + @tab -s @tab -b @tab -ss/-x @tab -bb +@item @code{italiano} + @tab -d @tab -b @tab -dd @tab -bb +@item @code{norsk} + @tab -iss/-is @tab -ess/-es @tab -ississ/-isis + @tab -essess/-eses +@item @code{portugues} + @tab -s @tab -b @tab -ss @tab -bb +@item @code{suomi} + @tab -is @tab -es @tab -isis @tab -eses +@item @code{svenska} + @tab -iss @tab -ess @tab -ississ @tab -essess +@item @code{vlaams} + @tab -k @tab -b @tab -kk @tab -bb +@end multitable +@end quotation + +In Dutch, @code{aes} is contracted to @code{as}, but both forms +are accepted in LilyPond. Similarly, both @code{es} and +@code{ees} are accepted. This also applies to +@code{aeses}@tie{}/@tie{}@code{ases} and +@code{eeses}@tie{}/@tie{}@code{eses}. Sometimes only these +contracted names are defined in the corresponding language files. + +@lilypond[verbatim,quote,relative=2] +a2 as e es a ases e eses +@end lilypond + + +@cindex microtones +@cindex semi-sharp +@cindex semi-flat +@cindex sesqui-sharp +@cindex sesqui-flat + +Some music uses microtones whose alterations are fractions of a +@q{normal} sharp or flat. The following table lists note names +for quarter-tone accidentals in various languages; here the prefixes +@notation{semi-} and @notation{sesqui-} respectively +mean @q{half} and @q{one and a half}. Languages that do not +appear in this table do not provide special note names yet. + +@quotation +@multitable {@code{nederlands}} {@b{semi-sharp}} {@b{semi-flat}} {@b{sesqui-sharp}} {@b{sesqui-flat}} +@headitem Language + @tab semi-sharp @tab semi-flat @tab sesqui-sharp @tab sesqui-flat + +@item @code{nederlands} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{deutsch} + @tab -ih @tab -eh @tab -isih @tab -eseh +@item @code{english} + @tab -qs @tab -qf @tab -tqs @tab -tqf +@item @code{espanol} + @tab -cs @tab -cb @tab -tcs @tab -tcb +@item @code{italiano} + @tab -sd @tab -sb @tab -dsd @tab -bsb +@item @code{portugues} + @tab -sqt @tab -bqt @tab -stqt @tab -btqt +@end multitable +@end quotation + +Most languages presented here are commonly associated with +Western classical music, also referred to as +@notation{Common Practice Period}. However, alternate +pitches and tuning systems are also supported: see +@ref{Common notation for non-Western music}. + + +@seealso +Music Glossary: +@rglos{Pitch names}, +@rglos{Common Practice Period}. + +Notation Reference: +@ref{Common notation for non-Western music}. + +Installed Files: +@file{scm/define-note-names.scm}. + +Snippets: +@rlsr{Pitches}. + + +@node Changing multiple pitches +@subsection Changing multiple pitches + +This section discusses how to modify pitches. + +@menu +* Octave checks:: +* Transpose:: +* Inversion:: +* Retrograde:: +* Modal transformations:: +@end menu + +@node Octave checks +@unnumberedsubsubsec Octave checks + +@cindex octave correction +@cindex octave check +@cindex control pitch + +@funindex = +@funindex \octaveCheck +@funindex octaveCheck +@funindex controlpitch + +In relative mode, it is easy to forget an octave changing mark. +Octave checks make such errors easier to find by displaying a +warning and correcting the octave if a note is found in an +unexpected octave. + +To check the octave of a note, specify the absolute octave after +the @code{=}@tie{}symbol. This example will generate a warning +(and change the pitch) because the second note is the absolute +octave @code{d''} instead of @code{d'} as indicated by the octave +correction. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d='4 d + e2 f +} +@end lilypond + +The octave of notes may also be checked with the +@code{\octaveCheck@tie{}@var{controlpitch}} command. +@code{@var{controlpitch}} is specified in absolute mode. This +checks that the interval between the previous note and the +@code{@var{controlpitch}} is within a fourth (i.e., the normal +calculation of relative mode). If this check fails, a warning is +printed, but the previous note is not changed. Future notes are +relative to the @code{@var{controlpitch}}. + +@lilypond[verbatim,quote] +\relative c'' { + c2 d + \octaveCheck c' + e2 f +} +@end lilypond + +Compare the two bars below. The first and third @code{\octaveCheck} +checks fail, but the second one does not fail. + +@lilypond[verbatim,quote] +\relative c'' { + c4 f g f + + c4 + \octaveCheck c' + f + \octaveCheck c' + g + \octaveCheck c' + f +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{RelativeOctaveCheck}. + + +@node Transpose +@unnumberedsubsubsec Transpose + +@cindex transpose +@cindex transposing +@cindex transposition +@cindex transposition of pitches +@cindex transposition of notes +@cindex pitches, transposition of +@cindex notes, transposition of + +@funindex \transpose +@funindex transpose + +A music expression can be transposed with @code{\transpose}. The +syntax is + +@example +\transpose @var{frompitch} @var{topitch} @var{musicexpr} +@end example + +@noindent +This means that @code{@var{musicexpr}} is transposed by the +interval between the pitches @code{@var{frompitch}} and +@code{@var{topitch}}: any note with pitch @code{@var{frompitch}} +is changed to @code{@var{topitch}} and any other note is +transposed by the same interval. Both pitches are entered in +absolute mode. + +@warning{Music inside a @code{@bs{}transpose} block is absolute +unless a @code{@bs{}relative} is included in the block.} + +Consider a piece written in the key of D-major. It can be +transposed up to E-major; note that the key signature is +automatically transposed as well. + +@lilypond[verbatim,quote] +\transpose d e { + \relative c' { + \key d \major + d4 fis a d + } +} +@end lilypond + +@cindex transposing instruments +@cindex instruments, transposing + +If a part written in C (normal @notation{concert pitch}) is to be +played on the A clarinet (for which an A is notated as a C and +thus sounds a minor third lower than notated), the appropriate +part will be produced with: + +@lilypond[verbatim,quote] +\transpose a c' { + \relative c' { + \key c \major + c4 d e g + } +} +@end lilypond + +@noindent +Note that we specify @w{@code{\key c \major}} explicitly. If we +do not specify a key signature, the notes will be transposed but +no key signature will be printed. + +@code{\transpose} distinguishes between enharmonic pitches: both +@w{@code{\transpose c cis}} or @w{@code{\transpose c des}} will +transpose up a semitone. The first version will print sharps and +the notes will remain on the same scale step, the second version +will print flats on the scale step above. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \transpose c cis { \music } + \transpose c des { \music } +} +@end lilypond + + +@code{\transpose} may also be used in a different way, to input +written notes for a transposing instrument. The previous examples +show how to enter pitches in C (or @notation{concert pitch}) and +typeset them for a transposing instrument, but the opposite is +also possible if you for example have a set of instrumental parts +and want to print a conductor's score. For example, when entering +music for a B-flat trumpet that begins on a notated E (concert D), +one would write: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose c bes, \musicInBflat +@end example + +@noindent +To print this music in F (e.g., rearranging to a French horn) you +could wrap the existing music with another @code{\transpose}: + +@example +musicInBflat = @{ e4 @dots{} @} +\transpose f c' @{ \transpose c bes, \musicInBflat @} +@end example + +@noindent +For more information about transposing instruments, +see @ref{Instrument transpositions}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} + + +@seealso +Notation Reference: +@ref{Instrument transpositions}, +@ref{Inversion}, +@ref{Modal transformations}, +@ref{Relative octave entry}, +@ref{Retrograde}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{TransposedMusic}. + + +@funindex \transpose +@funindex transpose +@funindex \chordmode +@funindex chordmode +@funindex \relative +@funindex relative + +@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}. + +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 + +@cindex inversion +@cindex operation, inversion +@funindex \inversion + +A music expression can be inverted with: + +@example +\inversion @var{from-pitch} @var{to-pitch} @var{musicexpr} +@end example + +The @code{@var{musicexpr}} is inverted interval-by-interval, +and then transposed so that @code{@var{from-pitch}} is mapped +to @code{@var{to-pitch}}. + +@lilypond[verbatim,quote] +music = \relative c' { c d e f } +\new Staff { + \music + \inversion d' d' \music + \inversion d' ees' \music +} +@end lilypond + +@seealso +Notation Reference: +@ref{Modal transformations}, +@ref{Retrograde}, +@ref{Transpose}. + + +@node Retrograde +@unnumberedsubsubsec Retrograde + +@cindex retrograde transformation +@cindex transformation, retrograde +@cindex operation, retrograde +@funindex \retrograde +@funindex retrograde + +A music expression can be reversed to produce its retrograde: + +@lilypond[verbatim,quote] +music = \relative c' { c8. ees16( fis8. a16 b8.) gis16 f8. d16 } + +\new Staff { + \music + \retrograde \music +} +@end lilypond + +@knownissues +Manual ties inside @code{\retrograde} will be broken and +generate warnings. Some ties can be generated automatically +by enabling @ref{Automatic note splitting}. + +@seealso +Notation Reference: +@ref{Inversion}, +@ref{Modal transformations}, +@ref{Transpose}. + + +@node Modal transformations +@unnumberedsubsubsec Modal transformations + +@cindex modal transformations +@cindex transformations, modal +@cindex operations, modal + +In a musical composition that is based on a scale, a motif is +frequently transformed in various ways. It may be +@notation{transposed} to start at different places in the scale or +it may be @notation{inverted} around a pivot point in the scale. +It may also be reversed to produce its @notation{retrograde}, see +@ref{Retrograde}. + +@warning{Any note that does not lie within the given scale will be +left untransformed.} + +@subsubheading Modal transposition + +@cindex modal transposition +@cindex transposition, modal +@cindex operation, transposition +@funindex \modalTranspose +@funindex modalTranspose + +A motif can be transposed within a given scale with: + +@example +\modalTranspose @var{from-pitch} @var{to-pitch} @var{scale} @var{motif} +@end example + +The notes of @var{motif} are shifted within the @var{scale} by the +number of scale degrees given by the interval between @var{to-pitch} +and @var{from-pitch}: + +@lilypond[verbatim,quote] +diatonicScale = \relative c' { c d e f g a b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \modalTranspose c f \diatonicScale \motif + \modalTranspose c b, \diatonicScale \motif +} +@end lilypond + +An ascending scale of any length and with any intervals may be +specified: + +@lilypond[verbatim,quote] +pentatonicScale = \relative c' { ges aes bes des ees } +motif = \relative c' { ees8 des ges,4 } + +\new Staff { + \motif + \modalTranspose ges ees' \pentatonicScale \motif +} +@end lilypond + +When used with a chromatic scale @code{\modalTranspose} has a +similar effect to @code{\transpose}, but with the ability to +specify the names of the notes to be used: + +@lilypond[verbatim,quote] +chromaticScale = \relative c' { c cis d dis e f fis g gis a ais b } +motif = \relative c' { c8 d e f g a b c } + +\new Staff { + \motif + \transpose c f \motif + \modalTranspose c f \chromaticScale \motif +} +@end lilypond + +@subsubheading Modal inversion + +@cindex modal inversion +@cindex inversion, modal +@cindex operation, modal inversion +@funindex \modalInversion +@funindex modalInversion + +A motif can be inverted within a given scale around a given pivot +note and transposed in a single operation with: + +@example +\modalInversion @var{around-pitch} @var{to-pitch} @var{scale} @var{motif} +@end example + +The notes of @var{motif} are placed the same number of scale degrees +from the @var{around-pitch} note within the @var{scale}, but in the +opposite direction, and the result is then shifted within the +@var{scale} by the number of scale degrees given by the interval between +@var{to-pitch} and @var{around-pitch}. + +So to simply invert around a note in the scale use the same value for +@var{around-pitch} and @var{to-pitch}: + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \modalInversion fis' fis' \octatonicScale \motif +} +@end lilypond + +To invert around a pivot between two notes in the scale, invert around +one of the notes and then transpose by one scale degree. The two notes +specified can be interpreted as bracketing the pivot point: + +@lilypond[verbatim,quote] +scale = \relative c' { c g' } +motive = \relative c' { c c g' c, } + +\new Staff { + \motive + \modalInversion c' g' \scale \motive +} +@end lilypond + +The combined operation of inversion and retrograde produce the +retrograde-inversion: + +@lilypond[verbatim,quote] +octatonicScale = \relative c' { ees f fis gis a b c d } +motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 } + +\new Staff { + \motif + \retrograde \modalInversion c' c' \octatonicScale \motif +} +@end lilypond + +@seealso +Notation Reference: +@ref{Inversion}, +@ref{Retrograde}, +@ref{Transpose}. + + +@node Displaying pitches +@subsection Displaying pitches + +This section discusses how to alter the output of pitches. + +@menu +* Clef:: +* Key signature:: +* Ottava brackets:: +* Instrument transpositions:: +* Automatic accidentals:: +* Ambitus:: +@end menu + + +@node Clef +@unnumberedsubsubsec Clef + +@cindex G clef +@cindex C clef +@cindex F clef +@cindex treble clef +@cindex violin clef +@cindex alto clef +@cindex tenor clef +@cindex bass clef +@cindex french clef +@cindex soprano clef +@cindex mezzosoprano clef +@cindex baritone clef +@cindex varbaritone clef +@cindex subbass clef +@cindex clef +@cindex ancient clef +@cindex clef, ancient +@cindex clef, G +@cindex clef, C +@cindex clef, F +@cindex clef, treble +@cindex clef, violin +@cindex clef, alto +@cindex clef, tenor +@cindex clef, bass +@cindex clef, french +@cindex clef, soprano +@cindex clef, mezzosoprano +@cindex clef, baritone +@cindex clef, varbaritone +@cindex clef, subbass + + +@funindex \clef +@funindex clef + +The clef may be altered. Middle C is shown in every example. The +following clef names can (but do not need to) be enclosed in quotes. + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef alto +c2 c +\clef tenor +c2 c +\clef bass +c2 c +@end lilypond + +Other clefs include: + +@lilypond[verbatim,quote,relative=1] +\clef french +c2 c +\clef soprano +c2 c +\clef mezzosoprano +c2 c +\clef baritone +c2 c + +\break + +\clef varbaritone +c2 c +\clef subbass +c2 c +\clef percussion +c2 c + +\break + +\clef G % synonym for treble +c2 c +\clef F % synonym for bass +c2 c +\clef C % synonym for alto +c2 c +@end lilypond + +@cindex transposing clef +@cindex clef, transposing +@cindex octave transposition +@cindex choral tenor clef +@cindex tenor clef, choral + +By adding@tie{}@code{_8} or@tie{}@code{^8} to the clef name, the +clef is transposed one octave down or up respectively, +and@tie{}@code{_15} and@tie{}@code{^15} transpose by two octaves. +Other integers can be used if required. Clef names containing +non-alphabetic characters must be enclosed in quotes + +@lilypond[verbatim,quote,relative=1] +\clef treble +c2 c +\clef "treble_8" +c2 c +\clef "bass^15" +c2 c +\clef "alto_2" +c2 c +\clef "G_8" +c2 c +\clef "F^5" +c2 c +@end lilypond + +Some special purpose clefs are described in @ref{Mensural clefs}, +@ref{Gregorian clefs}, @ref{Default tablatures}, and @ref{Custom +tablatures}. + +@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}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Clef_engraver}, +@rinternals{Clef}, +@rinternals{OctavateEight}, +@rinternals{clef-interface}. + + +@node Key signature +@unnumberedsubsubsec Key signature + +@cindex key signature + +@funindex \key +@funindex key + +@c duplicated in Key signature and Accidentals +@warning{New users are sometimes confused about accidentals and +key signatures. In LilyPond, note names are the raw input; key +signatures and clefs determine how this raw input is displayed. +An unaltered note like@tie{}@code{c} means @q{C natural}, +regardless of the key signature or clef. For more information, +see @rlearning{Accidentals and key signatures}.} + +The key signature indicates the tonality in which a piece is +played. It is denoted by a set of alterations (flats or sharps) +at the start of the staff. The key signature may be altered: + +@example +\key @var{pitch} @var{mode} +@end example + +@funindex \major +@funindex major +@funindex \minor +@funindex minor +@funindex \ionian +@funindex ionian +@funindex \locrian +@funindex locrian +@funindex \aeolian +@funindex aeolian +@funindex \mixolydian +@funindex mixolydian +@funindex \lydian +@funindex lydian +@funindex \phrygian +@funindex phrygian +@funindex \dorian +@funindex dorian + +@cindex church modes +@cindex modes +@cindex major +@cindex minor +@cindex ionian +@cindex locrian +@cindex aeolian +@cindex mixolydian +@cindex lydian +@cindex phrygian +@cindex dorian + +@noindent +Here, @code{@var{mode}} should be @code{\major} or @code{\minor} +to get a key signature of @code{@var{pitch}}-major or +@code{@var{pitch}}-minor, respectively. You may also use the +standard mode names, also called @notation{church modes}: +@code{\ionian}, @code{\dorian}, @code{\phrygian}, @code{\lydian}, +@code{\mixolydian}, @code{\aeolian}, and @code{\locrian}. + +@lilypond[verbatim,quote,relative=2] +\key g \major +fis1 +f +fis +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Music Glossary: +@rglos{church mode}, +@rglos{scordatura}. + +Learning Manual: +@rlearning{Accidentals and key signatures}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{KeyChangeEvent}, +@rinternals{Key_engraver}, +@rinternals{Key_performer}, +@rinternals{KeyCancellation}, +@rinternals{KeySignature}, +@rinternals{key-cancellation-interface}, +@rinternals{key-signature-interface}. + + +@node Ottava brackets +@unnumberedsubsubsec Ottava brackets + +@cindex ottava +@cindex 15ma +@cindex 8va +@cindex 8ve +@cindex octavation + +@funindex set-octavation +@funindex \ottava +@funindex ottava + +@notation{Ottava brackets} introduce an extra transposition of an +octave for the staff: + +@lilypond[verbatim,quote,relative=2] +a2 b +\ottava #-2 +a2 b +\ottava #-1 +a2 b +\ottava #0 +a2 b +\ottava #1 +a2 b +\ottava #2 +a2 b +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ottava-text.ly} + + +@seealso +Music Glossary: +@rglos{octavation}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Ottava_spanner_engraver}, +@rinternals{OttavaBracket}, +@rinternals{ottava-bracket-interface}. + + +@node Instrument transpositions +@unnumberedsubsubsec Instrument transpositions + +@cindex transposition, MIDI +@cindex transposition, instrument +@cindex transposing instrument +@cindex MIDI +@cindex MIDI transposition + +@funindex \transposition +@funindex transposition + +When typesetting scores that involve transposing instruments, some +parts can be typeset in a different pitch than the +@notation{concert pitch}. In these cases, the key of the +@notation{transposing instrument} should be specified; otherwise +the MIDI output and cues in other parts will produce incorrect +pitches. For more information about quotations, see +@ref{Quoting other voices}. + +@example +\transposition @var{pitch} +@end example + +The pitch to use for @code{\transposition} should correspond to +the real sound heard when a@tie{}@code{c'} written on the staff is +played by the transposing instrument. This pitch is entered in +absolute mode, so an instrument that produces a real sound which +is one tone higher than the printed music should use +@w{@code{\transposition d'}}. @code{\transposition} should +@emph{only} be used if the pitches are @emph{not} being entered in +concert pitch. + +Here are a few notes for violin and B-flat clarinet where the +parts have been entered using the notes and key as they appear in +each part of the conductor's score. The two instruments are +playing in unison. + +@lilypond[verbatim,quote] +\new GrandStaff << + \new Staff = "violin" { + \relative c'' { + \set Staff.instrumentName = #"Vln" + \set Staff.midiInstrument = #"violin" + % not strictly necessary, but a good reminder + \transposition c' + + \key c \major + g4( c8) r c r c4 + } + } + \new Staff = "clarinet" { + \relative c'' { + \set Staff.instrumentName = \markup { Cl (B\flat) } + \set Staff.midiInstrument = #"clarinet" + \transposition bes + + \key d \major + a4( d8) r d r d4 + } + } +>> +@end lilypond + +The @code{\transposition} may be changed during a piece. For +example, a clarinetist may switch from an A clarinet to a B-flat +clarinet. + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = #"Cl (A)" +\key a \major +\transposition a +c d e f +\textLengthOn +s1*0^\markup { Switch to B\flat clarinet } +R1 + +\key bes \major +\transposition bes +c2 g +@end lilypond + + +@seealso +Music Glossary: +@rglos{concert pitch}, +@rglos{transposing instrument}. + +Notation Reference: +@ref{Quoting other voices}, +@ref{Transpose}. + +Snippets: +@rlsr{Pitches}. + + +@node Automatic accidentals +@unnumberedsubsubsec Automatic accidentals + +@cindex accidental style +@cindex accidental style, default +@cindex accidentals +@cindex accidentals, automatic +@cindex automatic accidentals +@cindex default accidental style + +@funindex set-accidental-style +@funindex voice +@funindex default + +There are many different conventions on how to typeset +accidentals. LilyPond provides a function to specify which +accidental style to use. This function is called as follows: + +@example +\new Staff << + #(set-accidental-style 'voice) + @{ @dots{} @} +>> +@end example + +The accidental style applies to the current @code{Staff} by +default (with the exception of the styles @code{piano} and +@code{piano-cautionary}, which are explained below). Optionally, +the function can take a second argument that determines in which +scope the style should be changed. For example, to use the same +style in all staves of the current @code{StaffGroup}, use: + +@example +#(set-accidental-style 'voice 'StaffGroup) +@end example + +The following accidental styles are supported. To demonstrate +each style, we use the following example: + + +@lilypond[verbatim,quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +Note that the last lines of this example can be replaced by the +following, as long as the same accidental style should be used in +both staves. + +@example +\new PianoStaff @{ + << + \context Staff = "up" @{ + %%% change the next line as desired: + #(set-accidental-style 'default 'Score) + \musicA + @} + \context Staff = "down" @{ + \musicB + @} + >> +@} +@end example + + +@c don't use verbatim in this table. +@table @code +@item default + +@cindex default accidental style +@cindex accidental style, default + +@funindex default + +This is the default typesetting behavior. It corresponds to +eighteenth-century common practice: accidentals are remembered to +the end of the measure in which they occur and only in their own +octave. Thus, in the example below, no natural signs are printed +before the@tie{}@code{b} in the second measure or the +last@tie{}@code{c}: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'default) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'default) + \musicB + } + >> +} +@end lilypond + +@item voice + +@cindex accidental style, voice +@cindex voice accidental style +@cindex accidental style, modern +@cindex modern accidental style +@cindex accidental style, modern-cautionary +@cindex modern-cautionary accidental style + +@funindex voice + +The normal behavior is to remember the accidentals at +@code{Staff}-level. In this style, however, accidentals are +typeset individually for each voice. Apart from that, the rule is +similar to @code{default}. + +As a result, accidentals from one voice do not get canceled in +other voices, which is often an unwanted result: in the following +example, it is hard to determine whether the second@tie{}@code{a} +should be played natural or sharp. The @code{voice} option should +therefore be used only if the voices are to be read solely by +individual musicians. If the staff is to be used by one musician +(e.g., a conductor or in a piano score) then @code{modern} or +@code{modern-cautionary} should be used instead. + + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'voice) + \musicB + } + >> +} +@end lilypond + +@item modern + +@cindex accidentals, modern style +@cindex modern style accidentals + +@funindex modern + +This rule corresponds to the common practice in the twentieth +century. It omits some extra natural signs, which were +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 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 +the@tie{}@code{b} and the@tie{}@code{c} in the second measure of +the upper staff: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern) + \musicB + } + >> +} +@end lilypond + +@item modern-cautionary + +@cindex accidentals, modern cautionary style +@cindex modern accidental style +@cindex modern cautionary accidental style +@cindex modern style accidentals +@cindex modern style cautionary accidentals + +@funindex modern-cautionary + +This rule is similar to @code{modern}, but the @q{extra} +accidentals (the ones not typeset by @code{default}) are typeset +as cautionary accidentals. They are by default printed with +parentheses, but they can also be printed in reduced size by +defining the @code{cautionary-style} property of +@code{AccidentalSuggestion}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-cautionary) + \musicB + } + >> +} +@end lilypond + +@item modern-voice + +@cindex accidental style, modern +@cindex accidentals, modern +@cindex accidentals, multivoice +@cindex modern accidental style +@cindex modern accidentals +@cindex multivoice accidentals + +@funindex modern-voice + +This rule is used for multivoice accidentals to be read both by +musicians playing one voice and musicians playing all voices. +Accidentals are typeset for each voice, but they @emph{are} +canceled across voices in the same @code{Staff}. Hence, +the@tie{}@code{a} in the last measure is canceled because the +previous cancellation was in a different voice, and +the@tie{}@code{d} in the lower staff is canceled because of the +accidental in a different voice in the previous measure: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice) + \musicB + } + >> +} +@end lilypond + +@cindex accidental style, cautionary, modern voice +@cindex accidental style, modern voice cautionary +@cindex accidental style, voice, modern cautionary + +@funindex modern-voice-cautionary + +@item modern-voice-cautionary + +This rule is the same as @code{modern-voice}, but with the extra +accidentals (the ones not typeset by @code{voice}) typeset as +cautionaries. Even though all accidentals typeset by +@code{default} @emph{are} typeset with this rule, some of them are +typeset as cautionaries. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item piano + +@cindex accidental style, piano +@cindex accidentals, piano +@cindex piano accidental style +@cindex piano accidentals + +@funindex piano + +This rule reflects twentieth-century practice for piano notation. +Its behavior is very similar to @code{modern} style, but here +accidentals also get canceled across the staves in the same +@code{GrandStaff} or @code{PianoStaff}, hence all the +cancellations of the final notes. + +This accidental style applies to the current @code{GrandStaff} or +@code{PianoStaff} by default. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + +@item piano-cautionary + +@cindex accidentals, piano cautionary +@cindex cautionary accidentals, piano +@cindex piano cautionary accidentals +@cindex accidental style, piano cautionary +@cindex cautionary accidental style, piano +@cindex piano cautionary accidental style + +@funindex piano-cautionary + +This is the same as @code{piano} but with the extra accidentals +typeset as cautionaries. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'piano-cautionary) + \musicA + } + \context Staff = "down" { + \musicB + } + >> +} +@end lilypond + + +@item neo-modern + +@cindex neo-modern accidental style +@cindex accidental style, neo-modern + +@funindex neo-modern + +This rule reproduces a common practice in contemporary music: +accidentals are printed like with @code{modern}, but they are printed +again if the same note appears later in the same measure -- except +if the note is immediately repeated. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-cautionary + +@cindex neo-modern-cautionary accidental style +@cindex accidental style, neo-modern-cautionary + +@funindex neo-modern-cautionary + +This rule is similar to @code{neo-modern}, but the extra +accidentals are printed as cautionary accidentals. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-cautionary) + \musicB + } + >> +} +@end lilypond + + +@item neo-modern-voice + +@cindex neo-modern-voice accidental style +@cindex accidental style, neo-modern-voice + +@funindex neo-modern-voice + +This rule is used for multivoice accidentals to be read both by +musicians playing one voice and musicians playing all voices. +Accidentals are typeset for each voice as with @code{neo-modern}, +but they are canceled across voices in the same @code{Staff}. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice) + \musicB + } + >> +} +@end lilypond + +@item neo-modern-voice-cautionary + +@cindex neo-modern-voice-cautionary accidental style +@cindex accidental style, neo-modern-voice-cautionary + +@funindex neo-modern-voice-cautionary + +This rule is similar to @code{neo-modern-voice}, but the extra +accidentals are printed as cautionary accidentals. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'neo-modern-voice-cautionary) + \musicB + } + >> +} +@end lilypond + +@item dodecaphonic + +@cindex dodecaphonic accidental style +@cindex dodecaphonic style, neo-modern + +@funindex dodecaphonic + +This rule reflects a practice introduced by composers at +the beginning of the 20th century, in an attempt to +abolish the hierarchy between natural and non-natural notes. +With this style, @emph{every} note gets an accidental sign, +including natural signs. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'dodecaphonic) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'dodecaphonic) + \musicB + } + >> +} +@end lilypond + + +@item teaching + +@cindex teaching accidental style +@cindex accidental style, teaching + +@funindex teaching + +This rule is intended for students, and makes it easy to create +scale sheets with automatically created cautionary accidentals. +Accidentals are printed like with @code{modern}, but cautionary +accidentals are added for all sharp or flat tones specified by the +key signature, except if the note is immediately repeated. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicA + } + \context Staff = "down" { + \key fis \minor + #(set-accidental-style 'teaching) + \musicB + } + >> +} +@end lilypond + + + +@item no-reset + +@cindex accidental style, no reset +@cindex no reset accidental style + +@funindex no-reset + +This is the same as @code{default} but with accidentals lasting +@q{forever} and not only within the same measure: + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'no-reset) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'no-reset) + \musicB + } + >> +} +@end lilypond + +@item forget + +@cindex forget accidental style +@cindex accidental style, forget + +@funindex forget + +This is the opposite of @code{no-reset}: Accidentals are not +remembered at all -- and hence all accidentals are typeset +relative to the key signature, regardless of what came before in +the music. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8 + \change Staff = up + cis' cis + \change Staff = down + + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + #(set-accidental-style 'forget) + \musicA + } + \context Staff = "down" { + #(set-accidental-style 'forget) + \musicB + } + >> +} +@end lilypond +@end table + +@seealso +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Accidental}, +@rinternals{Accidental_engraver}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{Staff}, +@rinternals{AccidentalSuggestion}, +@rinternals{AccidentalPlacement}, +@rinternals{accidental-suggestion-interface}. + + +@cindex accidentals and simultaneous notes +@cindex simultaneous notes and accidentals +@cindex accidentals in chords +@cindex chords, accidentals in + +@knownissues + +Simultaneous notes are not considered in the automatic +determination of accidentals; only previous notes and the key +signature are considered. Forcing accidentals with@tie{}@code{!} +or@tie{}@code{?} may be required when the same note name occurs +simultaneously with different alterations, as in @samp{}. + +Cautionary cancellation of accidentals is done by looking at previous measure. +However, in the @code{\alternative} block following a @code{\repeat volta N} +section, one would expect the cancellation being calculated using the previous +@emph{played} measure, not previous @emph{printed} measure. +In the following example, the natural @code{c} in the second alternative does +not need a natural sign: + +@lilypond[quote] +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + c' + } +} +@end lilypond + +The following work-around can be used: define a function that locally changes +the accidental style to @code{forget}: + +@lilypond[verbatim,quote] +forget = #(define-music-function (parser location music) (ly:music?) #{ + #(set-accidental-style 'forget) + $music + #(set-accidental-style 'modern) +#}) +{ + #(set-accidental-style 'modern) + \time 2/4 + \repeat volta 2 { + c'2 + } + \alternative { + cis' + \forget c' + } +} +@end lilypond + +@node Ambitus +@unnumberedsubsubsec Ambitus + +@cindex ambitus +@cindex range of pitches +@cindex pitch range + +The term @notation{ambitus} (pl. ambitus) denotes a range of +pitches for a given voice in a part of music. It may also denote +the pitch range that a musical instrument is capable of playing. +Ambitus are printed on vocal parts so that performers can easily +determine if it matches their capabilities. + +Ambitus are denoted at the beginning of a piece near the initial +clef. The range is graphically specified by two note heads that +represent the lowest and highest pitches. Accidentals are only +printed if they are not part of the key signature. + +@lilypond[verbatim,quote] +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\relative c'' { + aes c e2 + cis,1 +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-ambitus-per-voice.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{ambitus-with-multiple-voices.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-ambitus-gap.ly} + + +@seealso +Music Glossary: +@rglos{ambitus}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Ambitus_engraver}, +@rinternals{Voice}, +@rinternals{Staff}, +@rinternals{Ambitus}, +@rinternals{AmbitusAccidental}, +@rinternals{AmbitusLine}, +@rinternals{AmbitusNoteHead}, +@rinternals{ambitus-interface}. + + +@knownissues + +There is no collision handling in the case of multiple per-voice +ambitus. + + +@node Note heads +@subsection Note heads + +This section suggests ways of altering note heads. + +@menu +* Special note heads:: +* Easy notation note heads:: +* Shape note heads:: +* Improvisation:: +@end menu + +@node Special note heads +@unnumberedsubsubsec Special note heads + +@cindex note heads, special +@cindex note heads, cross +@cindex note heads, diamond +@cindex note heads, parlato +@cindex note heads, harmonic +@cindex note heads, guitar +@cindex special note heads +@cindex cross note heads +@cindex diamond note heads +@cindex parlato note heads +@cindex harmonic note heads +@cindex guitar note heads +@cindex note head styles +@cindex styles, note heads + +@funindex cross + +The appearance of note heads may be altered: + +@lilypond[verbatim,quote,relative=2] +c4 b +\override NoteHead #'style = #'cross +c4 b +\revert NoteHead #'style +a b +\override NoteHead #'style = #'harmonic +a b +\revert NoteHead #'style +c4 d e f +@end lilypond + +To see all note head styles, see @ref{Note head styles}. + +The @code{cross} style is used to represent a variety of musical +intentions. The following generic predefined commands modify the +note head in both staff and tablature contexts and can be used to +represent any musical meaning: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNotesOn + a b c4 b +\xNotesOff +c4 d +@end lilypond + +The music function form of this predefined command may be used +inside and outside chords to generate crossed note heads in both +staff and tablature contexts: + +@lilypond[verbatim,quote,relative=2] +c4 b +\xNote { e f } +c b < g \xNote c f > b +@end lilypond + +As synonyms for @code{\xNote}, @code{\xNotesOn} and @code{\xNotesOff}, +@code{\deadNote}, @code{\deadNotesOn} and @code{\deadNotesOff} can +be used. The term @notation{dead note} is commonly used by guitarists. + +There is also a shorthand for diamond shapes which can be used +only inside chords: + +@lilypond[verbatim,quote,relative=2] +2 4 +@end lilypond + +@predefined +@code{\harmonic}, +@code{\xNotesOn}, +@code{\xNotesOff}, +@code{\xNote}. +@endpredefined + +@seealso +Snippets: +@rlsr{Pitches}. + +Notation Reference: +@ref{Note head styles}, +@ref{Chorded notes}, +@ref{Indicating harmonics and dampened notes}. + +Internals Reference: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{Ledger_line_engraver}, +@rinternals{NoteHead}, +@rinternals{LedgerLineSpanner}, +@rinternals{note-head-interface}, +@rinternals{ledger-line-spanner-interface}. + + +@node Easy notation note heads +@unnumberedsubsubsec Easy notation note heads + +@cindex note heads, practice +@cindex practice note heads +@cindex note heads, easy notation +@cindex easy notation +@cindex beginners' music +@cindex music, beginners' +@cindex easy play note heads +@cindex note heads, easy play + +@funindex \easyHeadsOn +@funindex easyHeadsOn +@funindex \easyHeadsOff +@funindex easyHeadsOff + +The @q{easy play} note head includes a note name inside the head. +It is used in music for beginners. To make the letters readable, +it should be printed in a large font size. To print with a larger +font, see @ref{Setting the staff size}. + +@lilypond[verbatim,quote] +#(set-global-staff-size 26) +\relative c' { + \easyHeadsOn + c2 e4 f + g1 + \easyHeadsOff + c,1 +} +@end lilypond + + +@predefined +@code{\easyHeadsOn}, +@code{\easyHeadsOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{numbers-as-easy-note-heads.ly} + + +@seealso +Notation Reference: +@ref{Setting the staff size}. + +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Shape note heads +@unnumberedsubsubsec Shape note heads + +@cindex note heads, shape +@cindex note heads, Aiken +@cindex note heads, sacred harp +@cindex shape notes +@cindex Aiken shape note heads +@cindex sacred harp note heads +@cindex note heads, Southern Harmony +@cindex Southern Harmony note heads +@cindex Funk shape note heads +@cindex note heads, Funk +@cindex note heads, Harmonica Sacra +@cindex Harmonica Sacra note heads +@cindex Christian Harmony note heads +@cindex note heads, Christian Harmony +@cindex Walker shape note heads +@cindex note heads, Walker + +@funindex \aikenHeads +@funindex aikenHeads +@funindex \sacredHarpHeads +@funindex sacredHarpHeads +@funindex \southernHarmonyHeads +@funindex southernHarmonyHeads +@funindex \funkHeads +@funindex funkHeads +@funindex \walkerHeads +@funindex walkerHeads + +In shape note head notation, the shape of the note head +corresponds to the harmonic function of a note in the scale. This +notation was popular in nineteenth-century American song books. +Shape note heads can be produced in Sacred Harp, Southern Harmony, +Funk (Harmonica Sacra), Walker, and Aiken (Christian Harmony) styles: + +@lilypond[verbatim,quote,relative=2] +\aikenHeads +c, d e f g2 a b1 c \break +\sacredHarpHeads +c,4 d e f g2 a b1 c \break +\southernHarmonyHeads +c,4 d e f g2 a b1 c \break +\funkHeads +c,4 d e f g2 a b1 c \break +\walkerHeads +c,4 d e f g2 a b1 c \break +@end lilypond + +@funindex \key +@funindex key +@funindex \aikenHeadsMinor +@funindex aikenHeadsMinor +@funindex \sacredHarpHeadsMinor +@funindex sacredHarpHeadsMinor +@funindex \southernHarmonyHeadsMinor +@funindex southernHarmonyHeadsMinor +@funindex \funkHeadsMinor +@funindex funkHeadsMinor +@funindex \walkerHeadsMinor +@funindex walkerHeadsMinor + +Shapes are typeset according to the step in the scale, where the base +of the scale is determined by the @code{\key} command. When writing +in a minor key, the scale step can be determined from the relative +major: + +@lilypond[verbatim,quote,relative=2] +\key a \minor +\aikenHeads +a b c d e2 f g1 a \break +\aikenHeadsMinor +a,4 b c d e2 f g1 a \break +\sacredHarpHeadsMinor +a,2 b c d \break +\southernHarmonyHeadsMinor +a2 b c d \break +\funkHeadsMinor +a2 b c d \break +\walkerHeadsMinor +a2 b c d \break + +@end lilypond + + +@predefined +@code{\aikenHeads}, +@code{\aikenHeadsMinor}, +@code{\funkHeads}, +@code{\funkHeadsMinor}, +@code{\sacredHarpHeads}, +@code{\sacredHarpHeadsMinor}, +@code{\southernHarmonyHeads}, +@code{\southernHarmonyHeadsMinor}, +@code{\walkerHeads}, +@code{\walkerHeadsMinor}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} + +To see all note head styles, see @ref{Note head styles}. + + +@seealso +Snippets: +@rlsr{Pitches}. + +Notation Reference: +@ref{Note head styles}. + +Internals Reference: +@rinternals{note-event}, +@rinternals{Note_heads_engraver}, +@rinternals{NoteHead}, +@rinternals{note-head-interface}. + + +@node Improvisation +@unnumberedsubsubsec Improvisation + +@cindex improvisation +@cindex slashed note heads +@cindex note heads, improvisation +@cindex note heads, slashed + +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +Improvisation is sometimes denoted with slashed note heads, where +the performer may choose any pitch but should play the specified +rhythm. Such note heads can be created: + +@lilypond[verbatim,quote,relative=2] +\new Voice \with { + \consists "Pitch_squash_engraver" +} { + e8 e g a a16( bes) a8 g + \improvisationOn + e8 ~ + e2 ~ e8 f4 f8 ~ + f2 + \improvisationOff + a16( bes) a8 g e +} +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Pitches}. + +Internals Reference: +@rinternals{Pitch_squash_engraver}, +@rinternals{Voice}, +@rinternals{RhythmicStaff}. diff --git a/Documentation/notation/repeats.itely b/Documentation/notation/repeats.itely new file mode 100644 index 0000000000..71d81fb01b --- /dev/null +++ b/Documentation/notation/repeats.itely @@ -0,0 +1,715 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Repeats +@section Repeats + +@lilypondfile[quote]{repeats-headword.ly} + +Repetition is a central concept in music, and multiple notations +exist for repetitions. LilyPond supports the following kinds of +repeats: + + +@table @code +@item volta +The repeated music is not written out but enclosed between repeat bar +lines. If the repeat is at the beginning of a piece, a repeat bar +line is only printed at the end of the repeat. Alternative endings +(volte) are printed left to right with brackets. This is the standard +notation for repeats with alternatives. + +@item unfold +The repeated music is fully written out, as many times as +specified by @code{@var{repeatcount}}. This is useful when +entering repetitious music. + +@item percent +These are beat or measure repeats. They look like single slashes or +percent signs. + +@item tremolo +This is used to write tremolo beams. + +@end table + + +@menu +* Long repeats:: +* Short repeats:: +@end menu + +@node Long repeats +@subsection Long repeats + +This section discusses how to input long (usually multi-measure) +repeats. The repeats can take two forms: repeats enclosed between +repeat signs; or written out repeats, used to input repetitious music. +Repeat signs can also be controlled manually. + +@menu +* Normal repeats:: +* Manual repeat marks:: +* Written-out repeats:: +@end menu + +@cindex volta +@cindex prima volta +@cindex seconda volta +@cindex volta, prima +@cindex volta, seconda +@cindex repeat, normal +@cindex normal repeat +@cindex repeat with alternate endings +@cindex alternate endings +@funindex \repeat +@funindex \alternative +@funindex \partial + +@node Normal repeats +@unnumberedsubsubsec Normal repeats + +The syntax for a normal repeat is + +@example +\repeat volta @var{repeatcount} @var{musicexpr} +@end example + +@noindent +where @code{@var{musicexpr}} is a music expression. + +A single repeat without an alternate ending: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f } +c2 d +\repeat volta 2 { d4 e f g } +@end lilypond + +Alternative endings can be produced using @code{\alternative}. Each +group of alternatives must be themselves, enclosed in a set of braces. + +@example +\repeat volta @var{repeatcount} @var{musicexpr} +\alternative @{ + @{ @var{musicexpr} @} +@} +@end example + +@noindent +where @code{@var{musicexpr}} is a music expression. + +If there are more repeats than there are alternate endings, the earliest +repeats are given the first alternative. + +A single repeat with one alternate ending: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 2 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +A single repeat with more than one alternate ending: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 4 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } +} +c1 +@end lilypond + +Multiple repeats with more than one alternate ending: + +@lilypond[verbatim,quote,relative=2] +\repeat volta 3 { c4 d e f | } +\alternative { + { c2 e | } + { f2 g | } + { a2 g | } +} +c1 +@end lilypond + +@warning{If there are two or more alternatives, nothing should appear +between the closing brace of one and the opening brace of the next +in an @code{@bs{}alternative} block, otherwise you will not get the +expected number of endings.} + +@warning{If you include @code{@bs{}relative} inside a +@code{@bs{}repeat} without explicitly instantiating the +@code{Voice} context, extra (unwanted) staves will appear. See +@rprogram{An extra staff appears}.} + +@cindex repeat with upbeat +@cindex upbeat in a repeat +@cindex anacrucis in a repeat +@cindex repeat with anacrucis +@cindex repeat with pickup +@cindex pickup in a repeat +@funindex \partial + +If a repeat starts in the middle of a measure and has no alternate +endings, normally the end of the repeat will also fall in the +middle of a measure, so that the two ends add up to one complete +measure. In such cases, the repeat signs do not constitute true +bar lines. Do not use @code{\partial} commands or bar checks +where these repeat signs are printed: + +@lilypond[verbatim,quote,relative=1] +% no \partial here +c4 e g % no bar check here +% no \partial here +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +Similarly, if a repeat begins with the initial partial measure of +a score and has no alternate endings, the same conditions apply as +in the above example, except that in this case the @code{\partial} +command is required at the beginning of the score: + +@lilypond[verbatim,quote,relative=1] +\partial 4 % required +\repeat volta 4 { + e4 | + c2 e | + % no \partial here + g4 g g % no bar check here +} +% no \partial here +g4 | +a2 a | +g1 | +@end lilypond + +When alternate endings are added to a repeat that begins with an +incomplete measure, it becomes necessary to set the +@code{Timing.measureLength} context property manually, in the +following specific places: + +@itemize +@item +at the start of any incomplete measures in the @code{\alternative} +block, which normally occur at the end of each alternative, except +(in most cases) the last. + +@item +at the start of each alternative, except the first. +@end itemize + +@lilypond[verbatim,quote,relative=1] +\partial 4 +\repeat volta 2 { e4 | c2 e | } +\alternative { + { + f2 d | + \set Timing.measureLength = #(ly:make-moment 3 4) + g4 g g % optional bar check is allowed here + } + { + \set Timing.measureLength = #(ly:make-moment 4 4) + a2 a | + } +} +g1 | +@end lilypond + +The @code{measureLength} property is described in @ref{Time +administration}. + +@cindex repeats with ties +@cindex alternative endings with ties +@cindex ties in repeats +@cindex ties in alternative endings +@funindex \repeatTie + +Ties may be added to a second ending: + +@lilypond[verbatim,quote,relative=2] +c1 +\repeat volta 2 { c4 d e f~ } +\alternative { + { f2 d } + { f2\repeatTie f, } +} +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{shortening-volta-brackets.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{adding-volta-brackets-to-additional-staves.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{setting-the-double-repeat-default-for-volte.ly} + +@seealso +Music Glossary: +@rglos{repeat}, +@rglos{volta}. + +Notation Reference: +@ref{Bar lines}, +@ref{Modifying context plug-ins}, +@ref{Time administration}. + +Snippets: +@rlsr{Repeats}. + +Internals Reference: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@knownissues + +@cindex repeat, ambiguous +@cindex nested repeat +@cindex repeat, nested +@cindex repeat timing information +@cindex repeat and measure number +@cindex timing information and repeats +@cindex measure number and repeats +@cindex repeat and slur +@cindex slur and repeat + +Slurs that span from a @code{\repeat} block into an +@code{\alternative} block will only work for the first alternate +ending. Also, slurs cannot wrap around from the end of one +alternative back to the beginning of the repeat. + +If a repeat that begins with an incomplete measure has an +@code{\alternative} block that contains modifications to the +@code{measureLength} property, using @code{\unfoldRepeats} will +result in wrongly-placed bar lines and bar check warnings. + +A nested repeat like + +@example +\repeat @dots{} +\repeat @dots{} +\alternative +@end example + +@noindent +is ambiguous, since it is not clear to which @code{\repeat} the +@code{\alternative} belongs. This ambiguity is resolved by always +having the @code{\alternative} belong to the inner @code{\repeat}. +For clarity, it is advisable to use braces in such situations. + + +@node Manual repeat marks +@unnumberedsubsubsec Manual repeat marks + +@cindex manual repeat mark +@cindex repeat, manual +@cindex start repeat +@cindex repeat, start +@cindex end repeat +@cindex repeat, end +@cindex repeat number, changing +@cindex repeat volta, changing +@cindex volta bracket +@cindex bracket, volta +@funindex repeatCommands +@funindex start-repeat + +@warning{These methods are only used for displaying unusual repeat +constructs, and may produce unexpected behavior. In most cases, +repeats should be created using the standard @code{@bs{}repeat} command +or by printing the relevant bar lines. For more information, see +@ref{Bar lines}.} + +The property @code{repeatCommands} can be used to control the +layout of repeats. Its value is a Scheme list of repeat commands. + +@table @code +@item start-repeat +Print a @code{|:} bar line. + +@lilypond[verbatim,quote,relative=2] +c1 +\set Score.repeatCommands = #'(start-repeat) +d4 e f g +c1 +@end lilypond + +As per standard engraving practice, repeat signs are not printed +at the beginning of a piece. + +@item end-repeat +Print a @code{:|} bar line: + +@lilypond[verbatim,quote,relative=2] +c1 +d4 e f g +\set Score.repeatCommands = #'(end-repeat) +c1 +@end lilypond + +@item (volta @var{number}) ... (volta #f) +Create a new volta with the specified number. The volta bracket must +be explicitly terminated, or it will not be printed. + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2")) +g4 a g a +\set Score.repeatCommands = #'((volta #f)) +c1 +@end lilypond + +@end table + +Multiple repeat commands may occur at the same point: + +@lilypond[verbatim,quote,relative=2] +f4 g a b +\set Score.repeatCommands = #'((volta "2, 5") end-repeat) +g4 a g a +c1 +\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) +b1 +\set Score.repeatCommands = #'((volta #f)) +@end lilypond + +@cindex volta bracket with text +@cindex text in volta bracket + +Text can be included with the volta bracket. The text can be a +number or numbers or markup text, see @ref{Formatting text}. The +simplest way to use markup text is to define the markup first, +then include the markup in a Scheme list. + +@lilypond[verbatim,quote] +voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } +\relative c'' { + c1 + \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) + c4 b d e + \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) + f1 + \set Score.repeatCommands = #'((volta #f)) +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} + + +@seealso +Notation Reference: +@ref{Bar lines}, +@ref{Formatting text}. + +Snippets: +@rlsr{Repeats}. + +Internals Reference: +@rinternals{VoltaBracket}, +@rinternals{RepeatedMusic}, +@rinternals{VoltaRepeatedMusic}. + + +@node Written-out repeats +@unnumberedsubsubsec Written-out repeats + +@cindex written-out repeats +@cindex repetitious music +@cindex repeats, written-out +@cindex repeat, unfold +@cindex unfold music +@cindex unfold repeat +@cindex unfold repeat with alternate endings +@cindex unfold music with alternate endings +@cindex alternate ending in written-out repeats +@funindex unfold + +By using the @code{unfold} command, repeats can be used to simplify +the writing out of repetitious music. The syntax is + +@example +\repeat unfold @var{repeatcount} @var{musicexpr} +@end example + +@noindent +where @code{@var{musicexpr}} is a music expression and +@code{@var{repeatcount}} is the number of times +@code{@var{musicexpr}} is repeated. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +c1 +@end lilypond + +Unfold repeats can be made with alternate endings. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } +} +c1 +@end lilypond + +If there are more repeats than there are alternate endings, the first +alternative is applied multiple times until the remaining alternatives +make up the total number of repeats. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 4 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } + } +c1 +@end lilypond + +If there are more alternate endings than repeats then the first +alternatives are applied, LilyPond will ignore the remaining +alternatives which will not be printed. + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { c4 d e f } +\alternative { + { c2 g' } + { c,2 b } + { e2 d } +} +c1 +@end lilypond + +It is also possible to nest multiple @code{unfold} functions (with or +without alternate endings). + +@lilypond[verbatim,quote,relative=2] +\repeat unfold 2 { + \repeat unfold 2 { c4 d e f } + \alternative { + { c2 g' } + { c,2 b } + } +} +c1 +@end lilypond + + +@warning{If you include @code{@bs{}relative} inside a +@code{@bs{}repeat} without explicitly instantiating the +@code{Voice} context, extra (unwanted) staves will appear. See +@rprogram{An extra staff appears}.} + + +@seealso +Snippets: +@rlsr{Repeats}. + +Internals Reference: +@rinternals{RepeatedMusic}, +@rinternals{UnfoldedRepeatedMusic}. + + +@node Short repeats +@subsection Short repeats + +This section discusses how to input short repeats. Short repeats can +take two forms: slashes or percent signs to represent repeats of a +single note, a single measure or two measures, and tremolos otherwise. + +@menu +* Percent repeats:: +* Tremolo repeats:: +@end menu + +@node Percent repeats +@unnumberedsubsubsec Percent repeats + +@cindex percent repeats +@cindex measure repeats +@cindex repeat, percent +@cindex repeat, measure +@cindex repeat, short +@funindex \repeat percent +@funindex percent + +Repeated short patterns are printed once, and the repeated pattern +is replaced with a special sign. + +The syntax is + +@example +\repeat percent @var{number} @var{musicexpr} +@end example + +@noindent +where @code{@var{musicexpr}} is a music expression. + +Patterns that are shorter than one measure are replaced by slashes. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c128 d e f } +\repeat percent 4 { c64 d e f } +\repeat percent 5 { c32 d e f } +\repeat percent 4 { c16 d e f } +\repeat percent 4 { c8 d } +\repeat percent 4 { c4 } +\repeat percent 2 { c2 } +@end lilypond + +Patterns of one or two measures are replaced by percent-like symbols. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 2 { c4 d e f } +\repeat percent 2 { c2 d } +\repeat percent 2 { c1 } +@end lilypond + +@lilypond[verbatim,quote,relative=2] +\repeat percent 3 { c4 d e f | c2 g' } +@end lilypond + +Patterns that are shorter than one measure but contain mixed durations +use a double-percent symbol. + +@lilypond[verbatim,quote,relative=2] +\repeat percent 4 { c8. 16 } +\repeat percent 2 { \times 2/3 { r8 c d } e4 } +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-counter.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{percent-repeat-count-visibility.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{isolated-percent-repeats.ly} + +@seealso +Music Glossary: +@rglos{percent repeat}, +@rglos{simile}. + +Snippets: +@rlsr{Repeats}. + +Internals Reference: +@rinternals{RepeatSlash}, +@rinternals{RepeatSlashEvent}, +@rinternals{DoubleRepeatSlash}, +@rinternals{PercentRepeat}, +@rinternals{PercentRepeatCounter}, +@rinternals{PercentRepeatedMusic}, +@rinternals{Percent_repeat_engraver}, +@rinternals{DoublePercentEvent}, +@rinternals{DoublePercentRepeat}, +@rinternals{DoublePercentRepeatCounter}, +@rinternals{Double_percent_repeat_engraver}, +@rinternals{Slash_repeat_engraver}. + + +@node Tremolo repeats +@unnumberedsubsubsec Tremolo repeats + +@cindex tremolo beams +@cindex tremolo +@cindex repeat, tremolo +@funindex \repeat tremolo +@funindex tremolo + +Tremolos can take two forms: alternation between two chords or two +notes, and rapid repetition of a single note or chord. Tremolos +consisting of an alternation are indicated by adding beams between the +notes or chords being alternated, while tremolos consisting of the +rapid repetition of a single note are indicated by adding beams or +slashes to a single note. + +To place tremolo marks between notes, use @code{\repeat} with +tremolo style: + +@lilypond[quote,verbatim,relative=2] +\repeat tremolo 8 { c16 d } +\repeat tremolo 6 { c16 d } +\repeat tremolo 2 { c16 d } +@end lilypond + +The @code{\repeat tremolo} syntax expects exactly two notes within +the braces, and the number of repetitions must correspond to a +note value that can be expressed with plain or dotted notes. Thus, +@code{\repeat tremolo 7} is valid and produces a double dotted +note, but @code{\repeat tremolo 9} is not. + +The duration of the tremolo equals the duration of the +braced expression multiplied by the number of repeats: +@code{\repeat tremolo 8 @{ c16 d16 @}} gives a whole note tremolo, +notated as two whole notes joined by tremolo beams. + +There are two ways to put tremolo marks on a single note. The +@code{\repeat tremolo} syntax is also used here, in which case +the note should not be surrounded by braces: + +@lilypond[quote,verbatim,ragged-right] +\repeat tremolo 4 c'16 +@end lilypond + +@cindex tremolo marks +@funindex tremoloFlags +@funindex : + +The same output can be obtained by adding @code{:@var{N}} after +the note, where @code{@var{N}} indicates the duration of the +subdivision (it must be at least 8). If @code{@var{N}} is 8, one +beam is added to the note's stem. If @code{@var{N}} is omitted, +the last value (stored in @code{tremoloFlags}) is used: + +@lilypond[quote,verbatim,relative=2] +c2:8 c:32 +c: c: +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{cross-staff-tremolos.ly} + + +@seealso +Snippets: +@rlsr{Repeats}. + +@cindex tremolo, cross-staff +@cindex cross-staff tremolo + diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely new file mode 100644 index 0000000000..478bb76b3d --- /dev/null +++ b/Documentation/notation/rhythms.itely @@ -0,0 +1,3400 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Rhythms +@section Rhythms + +@lilypondfile[quote]{rhythms-headword.ly} + +This section discusses rhythms, rests, durations, beaming and bars. + +@menu +* Writing rhythms:: +* Writing rests:: +* Displaying rhythms:: +* Beams:: +* Bars:: +* Special rhythmic concerns:: +@end menu + + +@node Writing rhythms +@subsection Writing rhythms + +@menu +* Durations:: +* Tuplets:: +* Scaling durations:: +* Ties:: +@end menu + +@node Durations +@unnumberedsubsubsec Durations + +@cindex durations, of notes +@cindex note durations +@cindex length of notes +@cindex note lengths + +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve +@funindex \maxima +@funindex maxima + +Durations are designated by numbers and dots. Durations are entered +as their reciprocal values. For example, a quarter note is entered +using a @code{4} (since it is a 1/4 note), and a half note is entered +using a @code{2} (since it is a 1/2 note). For notes longer than a +whole you must use the @code{\longa} (a double breve) and +@code{\breve} commands. Durations as short as 128th notes may be +specified. Shorter values are possible, but only as beamed notes. + +@c Two 64th notes are needed to obtain beams +@lilypond[quote,verbatim,relative=2] +\time 8/1 +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +Here are the same durations with automatic beaming turned off. + +@c not strictly "writing rhythms"; more of a "displaying" thing, +@c but it's ok here. -gp +@lilypond[quote,verbatim,relative=2] +\time 8/1 +\autoBeamOff +c\longa c\breve c1 c2 +c4 c8 c16 c32 c64 c128 c128 +@end lilypond + +A note with the duration of a quadruple breve may be entered with +@code{\maxima}, but this is supported only within ancient music +notation. For details, see @ref{Ancient notation}. + +@cindex duration, default +@cindex default note duration +@cindex note duration, default + +If the duration is omitted, it is set to the previously +entered duration. The default for the first note is a quarter +note. + +@lilypond[quote,verbatim,relative=2] +a a a2 a a4 a a1 a +@end lilypond + +@cindex notes, dotted +@cindex dotted notes +@cindex notes, double-dotted +@cindex double-dotted notes + +@funindex . + +To obtain dotted note lengths, place a dot (@code{.}) after the +duration. Double-dotted notes are specified by appending two +dots, and so on. + +@lilypond[quote,verbatim,relative=2] +a4 b c4. b8 a4. b4.. c8. +@end lilypond + +Some durations cannot be represented with just binary durations +and dots; they can be represented only by tying two or more +notes together. For details, see @ref{Ties}. + +For ways of specifying durations for the syllables of lyrics and +ways of aligning lyrics to notes, see @ref{Vocal music}. + +Optionally, notes can be spaced strictly proportionately to their +duration. For details of this and other settings which control +proportional notation, see @ref{Proportional notation}. + +@funindex \dotsUp +@funindex dotsUp +@funindex \dotsDown +@funindex dotsDown +@funindex \dotsNeutral +@funindex dotsNeutral + +Dots are normally moved up to avoid staff lines, except in +polyphonic situations. Dots may be manually placed above or below +the staff; see @ref{Direction and placement}. + + +@predefined +@code{\autoBeamOn}, +@code{\autoBeamOff}, +@code{\dotsUp}, +@code{\dotsDown}, +@code{\dotsNeutral}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{alternative-breve-note.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-number-of-augmentation-dots-per-note.ly} + + +@seealso +Music Glossary: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}, +@rglos{note value}, +@rglos{Duration names notes and rests}. + +Notation Reference: +@ref{Automatic beams}, +@ref{Ties}, +@ref{Stems}, +@ref{Writing rhythms}, +@ref{Writing rests}, +@ref{Vocal music}, +@ref{Ancient notation}, +@ref{Proportional notation}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Dots}, +@rinternals{DotColumn}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +There is no fundamental limit to rest durations (both in terms of +longest and shortest), but the number of glyphs is limited: +rests from 128th to maxima (8 x whole) may be printed. + + +@node Tuplets +@unnumberedsubsubsec Tuplets + +@cindex tuplets +@cindex triplets + +@funindex \times +@funindex times + +Tuplets are made from a music expression by multiplying all the +durations with a fraction: + +@example +\times @var{fraction} @{ @var{music} @} +@end example + +@noindent +The duration of @code{@var{music}} will be multiplied by the +fraction. The fraction's denominator will be printed over or +under the notes, optionally with a bracket. The most common +tuplet is the triplet in which 3 notes have the duration of 2, so +the notes are 2/3 of their written length. + +@lilypond[quote,verbatim,relative=2] +a2 \times 2/3 { b4 b b } +c4 c \times 2/3 { b4 a g } +@end lilypond + +@cindex tuplet bracket placement + +@funindex \tupletUp +@funindex tupletUp +@funindex \tupletDown +@funindex tupletDown +@funindex \tupletNeutral +@funindex tupletNeutral + +Tuplet brackets may be manually placed above or below the staff; +see @ref{Direction and placement}. + +Tuplets may be nested: + +@lilypond[quote,verbatim,relative=2] +\autoBeamOff +c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 +@end lilypond + +Modifying nested tuplets which begin at the same musical moment +must be done with @code{\tweak}. + +To modify the duration of notes without printing a tuplet bracket, +see @ref{Scaling durations}. + + +@predefined +@code{\tupletUp}, +@code{\tupletDown}, +@code{\tupletNeutral}. +@endpredefined + + +@snippets + +@cindex tuplet formatting +@cindex triplet formatting + +@funindex tupletNumberFormatFunction +@funindex tupletSpannerDuration + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{entering-several-tuplets-using-only-one--times-command.ly} + +@cindex Tuplet number changes + +@funindex TupletNumber + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-tuplet-number.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{non-default-tuplet-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{controlling-tuplet-bracket-visibility.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{permitting-line-breaks-within-beamed-tuplets.ly} + + +@seealso +Music Glossary: +@rglos{triplet}, +@rglos{tuplet}, +@rglos{polymetric}. + +Learning Manual: +@rlearning{Tweaking methods}. + +Notation Reference: +@ref{Time administration}, +@ref{Scaling durations}, +@ref{The tweak command}, +@ref{Polymetric notation}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{TupletBracket}, +@rinternals{TupletNumber}, +@rinternals{TimeScaledMusic}. + + +@cindex grace notes within tuplet brackets + +@knownissues +Grace notes may be placed within tuplet brackets, @emph{except} +when a staff begins with a grace note followed by a tuplet. In this +particular case, the grace note must be placed before the @code{\times} +command to avoid errors. + +@cindex tempo marks within tuplet brackets + +When using a tuplet at the beginning of a piece with a @code{\tempo} +mark, the music must be explicitly entered in a @code{\new Voice} +block, as discussed in @rlearning{Voices contain music}. + + +@node Scaling durations +@unnumberedsubsubsec Scaling durations + +@cindex scaling durations +@cindex durations, scaling + +You can alter the duration of single notes, rests or chords by a +fraction @code{N/M} by appending @code{*N/M} (or @code{*N} if @code{M} +is 1) to the duration. This will not affect the appearance of the +notes or rests produced, but the altered duration will be used in +calculating the position within the measure and setting the duration +in the MIDI output. Multiplying factors may be combined such as +@code{*L*M/N}. + +In the following example, the first three notes take up exactly +two beats, but no triplet bracket is printed. + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Alter durations to triplets +a4*2/3 gis4*2/3 a4*2/3 +% Normal durations +a4 a4 +% Double the duration of chord +4*2 +% Duration of quarter, appears like sixteenth +b16*4 c4 +@end lilypond + +The duration of spacing notes may also be modified by +a multiplier. This is useful for skipping many measures, e.g., +@code{s1*23}. + +@cindex compressing music +@cindex expanding music + +@funindex \scaleDurations +@funindex scaleDurations + +Longer stretches of music may be compressed by a fraction in the +same way, as if every note, chord or rest had the fraction as a +multiplier. This leaves the appearance of the music unchanged but +the internal duration of the notes will be multiplied by the +fraction @emph{num}/@emph{den}. The spaces around the dot are +required. Here is an example showing how music can be compressed +and expanded: + +@lilypond[quote,relative=2,verbatim] +\time 2/4 +% Normal durations +4 c8 a +% Scale music by *2/3 +\scaleDurations #'(2 . 3) { + 4. c8 a f +} +% Scale music by *2 +\scaleDurations #'(2 . 1) { + 4 c8 b +} +@end lilypond + +One application of this command is in polymetric +notation, see @ref{Polymetric notation}. + + +@seealso +Notation Reference: +@ref{Tuplets}, +@ref{Invisible rests}, +@ref{Polymetric notation}. + +Snippets: +@rlsr{Rhythms}. + + +@node Ties +@unnumberedsubsubsec Ties + +@cindex tie + +@funindex ~ + +A tie connects two adjacent note heads of the same pitch. The tie +in effect extends the duration of a note. + +@warning{Ties should not be confused with @emph{slurs}, which +indicate articulation, or @emph{phrasing slurs}, which indicate +musical phrasing. A tie is just a way of extending a note +duration, similar to the augmentation dot.} + +A tie is entered using the tilde symbol (@code{~}). + +@lilypond[quote,verbatim,relative=2] +a2 ~ a +@end lilypond + +Ties are used either when the note crosses a bar line, or when +dots cannot be used to denote the rhythm. Ties should also be +used when note values cross larger subdivisions of the measure: + +@lilypond[verbatim,quote] +\relative c' { + r8 c8 ~ c2 r4 | + r8^"not" c2 ~ c8 r4 +} +@end lilypond + +If you need to tie many notes across bar lines, it may be +easier to use automatic note splitting, see @ref{Automatic note +splitting}. This mechanism automatically splits long notes, and +ties them across bar lines. + +@cindex ties and chords +@cindex chords and ties + +When a tie is applied to a chord, all note heads whose pitches +match are connected. When no note heads match, no ties will be +created. Chords may be partially tied by placing the tie inside +the chord. + +@lilypond[quote,verbatim,relative=1] + ~ + +@end lilypond + +@cindex repeating ties +@cindex ties, repeating +@cindex volta brackets and ties +@cindex ties and volta brackets + +@funindex \repeatTie +@funindex repeatTie + +When a second alternative of a repeat starts with a tied note, you +have to specify the repeated tie as follows: + +@lilypond[quote,relative=2,verbatim] +\repeat volta 2 { c g 2 ~ } +\alternative { + % First alternative: following note is tied normally + { 2. r4 } + % Second alternative: following note has a repeated tie + { 2\repeatTie d4 c } } +@end lilypond + +@cindex laissez vibrer +@cindex ties, laissez vibrer + +@funindex \laissezVibrer +@funindex laissezVibrer + +@notation{L.v.}@: ties (@notation{laissez vibrer}) indicate that +notes must not be damped at the end. It is used in notation for +piano, harp and other string and percussion instruments. They can +be entered as follows: + +@lilypond[quote,verbatim,relative=1] +1\laissezVibrer +@end lilypond + +@cindex ties, placement + +@funindex \tieUp +@funindex tieUp +@funindex \tieDown +@funindex tieDown +@funindex \tieNeutral +@funindex tieNeutral + +Ties may be manually placed above or below the staff; see +@ref{Direction and placement}. + +@cindex ties, appearance +@cindex ties, dotted +@cindex ties, dashed +@cindex dashed ties +@cindex dotted ties + +@funindex \tieDotted +@funindex tieDotted +@funindex \tieDashed +@funindex tieDashed +@funindex \tieSolid +@funindex tieSolid + +Ties may be made dashed, dotted, or a combination of solid and +dashed. + +@lilypond[quote, verbatim, relative=1] +\tieDotted +c2 ~ c +\tieDashed +c2 ~ c +\tieHalfDashed +c2 ~ c +\tieHalfSolid +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Custom dash patterns can be specified: + +@lilypond[quote, verbatim, relative=1] +\tieDashPattern #0.3 #0.75 +c2 ~ c +\tieDashPattern #0.7 #1.5 +c2 ~ c +\tieSolid +c2 ~ c +@end lilypond + +Dash pattern definitions for ties have the same structure as +dash pattern definitions for slurs. +For more information about complex dash patterns, +see the snippets under @ref{Slurs}. + +@predefined +@code{\tieUp}, +@code{\tieDown}, +@code{\tieNeutral}, +@code{\tieDotted}, +@code{\tieDashed}, +@code{\tieDashPattern}, +@code{\tieHalfDashed}, +@code{\tieHalfSolid}, +@code{\tieSolid}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-ties-with-arpeggios.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{engraving-ties-manually.ly} + + +@seealso +Music Glossary: +@rglos{tie}, +@rglos{laissez vibrer}. + +Notation Reference: +@ref{Slurs}, +@ref{Automatic note splitting}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{LaissezVibrerTie}, +@rinternals{LaissezVibrerTieColumn}, +@rinternals{TieColumn}, +@rinternals{Tie}. + + +@knownissues +Switching staves when a tie is active will not produce a slanted +tie. + +Changing clefs or ottavations during a tie is not really +well-defined. In these cases, a slur may be preferable. + + + +@node Writing rests +@subsection Writing rests + +Rests are entered as part of the music in music expressions. + +@menu +* Rests:: +* Invisible rests:: +* Full measure rests:: +@end menu + +@node Rests +@unnumberedsubsubsec Rests + +@cindex rest +@cindex rest, entering durations +@cindex maxima rest +@cindex longa rest +@cindex breve rest + +@funindex \rest +@funindex rest +@funindex r +@funindex \maxima +@funindex maxima +@funindex \longa +@funindex longa +@funindex \breve +@funindex breve + +Rests are entered like notes with the note name @code{r}. +Durations longer than a whole rest use the following predefined +commands: + +@c \time 16/1 is used to avoid spurious bar lines +@c and long tracts of empty measures +@lilypond[quote,verbatim,relative=2] +\new Staff { + % These two lines are just to prettify this example + \time 16/1 + \override Staff.TimeSignature #'stencil = ##f + % Print a maxima rest, equal to four breves + r\maxima + % Print a longa rest, equal to two breves + r\longa + % Print a breve rest + r\breve + r1 r2 r4 r8 r16 r32 r64 r128 +} +@end lilypond + +@cindex rest, multi-measure +@cindex rest, whole-measure + +Whole measure rests, centered in the middle of the measure, must be +entered as multi-measure rests. They can be used for a single +measure as well as many measures and are discussed in +@ref{Full measure rests}. + +@cindex rest, specifying vertical position + +To explicitly specify a rest's vertical position, write a note +followed by @code{\rest}. A rest of the duration of the note will +be placed at the staff position where the note would appear. This +allows for precise manual formatting of polyphonic music, since the +automatic rest collision formatter will not move these rests. + +@lilypond[quote,verbatim,relative=2] +a4\rest d4\rest +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{rest-styles.ly} + + +@seealso +Music Glossary: +@rglos{breve}, +@rglos{longa}, +@rglos{maxima}. + +Notation Reference: +@ref{Full measure rests}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Rest}. + + +@knownissues + +@c Deliberately duplicated in Durations and Rests. -gp +There is no fundamental limit to rest durations (both in terms of +longest and shortest), but the number of glyphs is limited: there +are rests from 128th to maxima (8 x whole). + + +@node Invisible rests +@unnumberedsubsubsec Invisible rests + +@cindex skip +@cindex invisible rest +@cindex rest, invisible +@cindex spacer note +@cindex spacer rest + +@funindex s +@funindex \skip +@funindex skip + +An invisible rest (also called a @q{spacer rest}) can be entered +like a note with the note name@tie{}@code{s}: + +@lilypond[verbatim,quote,relative=2] +c4 c s c +s2 c +@end lilypond + +@cindex lyrics, skip + +Spacer rests are available only in note mode and chord mode. In +other situations, for example, when entering lyrics, the +command @code{\skip} is used to skip a musical moment. +@code{\skip} requires an explicit duration, but this is ignored if +the lyrics derive their durations from the notes in an associated +melody through @code{\addlyrics} or @code{\lyricsto}. + +@lilypond[quote,verbatim,relative=2] +<< + { + a2 \skip2 a2 a2 + } + \new Lyrics { + \lyricmode { + foo2 \skip 1 bla2 + } + } +>> +@end lilypond + +Because @code{\skip} is a command, it does not affect the default +durations of following notes, unlike@tie{}@code{s}. + +@lilypond[quote,verbatim,relative=2] +<< + { + \repeat unfold 8 { a4 } + } + { + a4 \skip 2 a | + s2 a + } +>> +@end lilypond + + +A spacer rest implicitly causes @code{Staff} and @code{Voice} +contexts to be created if none exist, just like notes and rests +do: + +@lilypond[quote,verbatim,relative=2] +s1 s s +@end lilypond + +@code{\skip} simply skips musical time; it creates no output of +any kind. + +@lilypond[quote,verbatim,relative=2] +% This is valid input, but does nothing +\skip 1 \skip1 \skip 1 +@end lilypond + + +@seealso +Learning Manual: +@rlearning{Visibility and color of objects}. + +Notation Reference: +@ref{Hidden notes}, +@ref{Visibility of objects}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{SkipMusic}. + + +@node Full measure rests +@unnumberedsubsubsec Full measure rests + +@cindex multi-measure rests +@cindex full-measure rests +@cindex rest, multi-measure +@cindex rest, full-measure +@cindex whole rest for a full measure +@cindex rest, whole for a full measure + +@funindex R + +Rests for one or more full measures are entered like notes with +the note name uppercase @code{R}: + +@lilypond[quote,verbatim,relative=2] +% Rest measures contracted to single measure +\compressFullBarRests +R1*4 +R1*24 +R1*4 +b2^"Tutti" b4 a4 +@end lilypond + +The duration of full-measure rests is identical to the duration +notation used for notes. The duration in a multi-measure rest must +always be an integral number of measure-lengths, so augmentation dots +or fractions must often be used: + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 2/4 +R1 | R2 | +\time 3/4 +R2. | R2.*2 | +\time 13/8 +R1*13/8 | R1*13/8*12 | +\time 10/8 +R4*5*4 | +@end lilypond + +A full-measure rest is printed as either a whole or breve rest, +centered in the measure, depending on the time signature. + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +R1 | +\time 6/4 +R1*3/2 | +\time 8/4 +R1*2 | +@end lilypond + +@cindex multi-measure rest, expanding +@cindex multi-measure rest, contracting + +@funindex \expandFullBarRests +@funindex expandFullBarRests +@funindex \compressFullBarRests +@funindex compressFullBarRests + +By default a multi-measure rest is expanded in the printed score to +show all the rest measures explicitly. Alternatively, a multi-measure +rest can be shown as a single measure containing a multi-measure rest +symbol, with the number of measures of rest printed above the measure: + +@lilypond[quote,verbatim,relative=2] +% Default behavior +\time 3/4 r2. | R2.*2 | +\time 2/4 R2 | +\time 4/4 +% Rest measures contracted to single measure +\compressFullBarRests +r1 | R1*17 | R1*4 | +% Rest measures expanded +\expandFullBarRests +\time 3/4 +R2.*2 | +@end lilypond + + +@cindex text on multi-measure rest +@cindex multi-measure rest, attaching text +@cindex script on multi-measure rest +@cindex multi-measure rest, script +@cindex fermata on multi-measure rest +@cindex multi-measure rest, attaching fermata +@cindex markup on multi-measure rest +@cindex multi-measure rest with markup + +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex MultiMeasureRestText + +Markups can be added to multi-measure rests. +The predefined command @code{\fermataMarkup} +is provided for adding fermatas. + +@lilypond[quote,verbatim,relative=2] +\compressFullBarRests +\time 3/4 +R2.*10^\markup { \italic "ad lib." } +R2.^\fermataMarkup +@end lilypond + +@warning{Markups attached to a multi-measure rest are objects of type +@code{MultiMeasureRestText}, not @code{TextScript}. Overrides must +be directed to the correct object, or they will be ignored. See the +following example:} + +@lilypond[quote,verbatim,relative=2] +% This fails, as the wrong object name is specified +\override TextScript #'padding = #5 +R1^"wrong" +% This is the correct object name to be specified +\override MultiMeasureRestText #'padding = #5 +R1^"right" +@end lilypond + +When a multi-measure rest immediately follows a @code{\partial} +setting, resulting bar-check warnings may not be displayed. + + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff +@funindex \fermataMarkup +@funindex fermataMarkup +@funindex \compressFullBarRests +@funindex compressFullBarRests +@funindex \expandFullBarRests +@funindex expandFullBarRests + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}, +@code{\fermataMarkup}, +@code{\compressFullBarRests}, +@code{\expandFullBarRests}. +@endpredefined + + +@snippets + +@cindex church rest +@cindex rest, church +@cindex kirchenpausen + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-form-of-multi-measure-rests.ly} + +@cindex multi-measure rests, positioning +@cindex positioning multi-measure rests + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{positioning-multi-measure-rests.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{multi-measure-rest-markup.ly} + + +@seealso +Music Glossary: +@rglos{multi-measure rest}. + +Notation Reference: +@ref{Durations}, +@ref{Text}, +@ref{Formatting text}, +@ref{Text scripts}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{MultiMeasureRest}, +@rinternals{MultiMeasureRestNumber}, +@rinternals{MultiMeasureRestText}. + + +@cindex fingerings and multi-measure rests +@cindex multi-measure rests and fingerings + +@knownissues +Fingerings over multi-measure rests (e.g. @code{R1*10-4}) may result +in the fingering numeral colliding with the bar counter +numeral. + +@cindex condensing rests +@cindex rest, condensing ordinary + +There is no way to automatically condense multiple ordinary rests +into a single multi-measure rest. + +@cindex rest, collisions of + +Multi-measure rests do not take part in rest collisions. + +@node Displaying rhythms +@subsection Displaying rhythms + +@menu +* Time signature:: +* Metronome marks:: +* Upbeats:: +* Unmetered music:: +* Polymetric notation:: +* Automatic note splitting:: +* Showing melody rhythms:: +@end menu + +@node Time signature +@unnumberedsubsubsec Time signature + +@cindex time signature +@cindex meter + +@funindex \time +@funindex time + +The time signature is set as follows: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c2 +\time 3/4 c2. +@end lilypond + +@cindex time signature, visibility of + +Time signatures are printed at the beginning of a piece +and whenever the time signature changes. If a change takes place +at the end of a line a warning time signature sign is printed +there. This default behavior may be changed, see +@ref{Visibility of objects}. + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c2 c +\break +c c +\break +\time 4/4 +c c c c +@end lilypond + +@cindex time signature style +@cindex meter style + +@funindex \numericTimeSignature +@funindex numericTimeSignature +@funindex \defaultTimeSignature +@funindex defaultTimeSignature + +The time signature symbol that is used in 2/2 and 4/4 time can be +changed to a numeric style: + +@lilypond[quote,verbatim,relative=2] +% Default style +\time 4/4 c1 +\time 2/2 c1 +% Change to numeric style +\numericTimeSignature +\time 4/4 c1 +\time 2/2 c1 +% Revert to default style +\defaultTimeSignature +\time 4/4 c1 +\time 2/2 c1 +@end lilypond + + +Mensural time signatures are covered in +@ref{Mensural time signatures}. + +@cindex time signature default settings +@cindex autobeaming properties for time signatures +@cindex beaming, time signature default properties +@funindex \overrideTimeSignatureSettings + +In addition to setting the printed time signature, the @code{\time} +command also sets time-signature-based default values for the properties +@code{baseMoment}, @code{beatStructure}, and @code{beamExceptions}. The +predefined default values for these properties can be found in +@file{scm/time-signature-settings.scm}. The existing default values can +be changed, or new default values can be added: + +@lilypond[quote,verbatim] +\score { + \new Staff { + \relative c' { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + } + } +} +@end lilypond + +@code{\overrideTimeSignatureSettings} takes four arguments: + +@enumerate + +@item +@code{@var{timeSignatureFraction}}, a Scheme pair describing the +time signature. + +@item +@code{@var{baseMomentFraction}}, a Scheme pair containing the numerator +and denominator of the basic timing unit for the time signature. + +@item +@code{@var{beatStructure}}, a Scheme list indicating the structure +of the beats in the measure, in units of the base moment. + +@item +@code{@var{beamExceptions}}, an alist containing any beaming rules +for the time signature that go beyond ending at every beat, as +described in @ref{Setting automatic beam behavior}. +@end enumerate + +The context containing @code{\overrideTimeSignatureSettings} must +be instantiated before the @code{\overrideTimeSignatureSettings} +call is executed. That means it must either be explicitly +instantiated or there must be music in the context before the +@code{\overrideTimeSignatureSettings} call: + +@lilypond[quote,verbatim] +\score { + \relative c' { + % This call will fail because the context isn't yet instantiated + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (2 2)"} + \repeat unfold 7 { c8 } | + % This call will succeed + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beamed (3 1)"} + \repeat unfold 7 { c8 } | + } +} +@end lilypond + + +@cindex time signature properties, restoring default values +@cindex restoring default properties for time signatures +@funindex \revertTimeSignatureSettings + +Changed values of default time signature properties can be restored +to the original values: + +@lilypond[quote,verbatim] +\score{ + \relative c' { + \repeat unfold 8 { c8 } | + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 { c8 } | + \revertTimeSignatureSettings #'(4 . 4) + \time 4/4 + \repeat unfold 8 { c8 } | + } +} +@end lilypond + +Different values of default time signature properties can be established +for different staves by moving the @code{Timing_translator} and the +@code{Default_bar_line_engraver} from the @code{Score} context to the +@code{Staff} context. + +@lilypond[quote, verbatim] +\score { + \new StaffGroup << + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(1 3) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + >> + \layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } + } +} +@end lilypond + +@predefined +@code{\numericTimeSignature}, +@code{\defaultTimeSignature}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-the-time-signature-without-affecting-the-beaming.ly} + +@cindex compound time signatures +@cindex time signature, compound + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly} + + +@seealso +Music Glossary: +@rglos{time signature} + +Notation Reference: +@ref{Mensural time signatures}, +@ref{Time administration}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}. + +@node Metronome marks +@unnumberedsubsubsec Metronome marks + +@cindex tempo +@cindex beats per minute +@cindex metronome mark +@cindex metronome marking with text + +@funindex \tempo +@funindex tempo + +A basic metronome mark is simple to write: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 120 +c2 d +e4. d8 c2 +@end lilypond + +Metronome marks may also be printed as a range of two numbers: + +@lilypond[verbatim,quote,relative=1] +\tempo 4 = 40 ~ 46 +c4. e8 a4 g +b,2 d4 r +@end lilypond + +Tempo indications with text can be used instead: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +c4 e d c +b4. a16 b c4 r4 +@end lilypond + +Combining a metronome mark and text will automatically place the +metronome mark within parentheses: + +@lilypond[verbatim,quote,relative=2] +\tempo "Allegro" 4 = 160 +g4 c d e +d4 b g2 +@end lilypond + +In general, the text can be any markup object: + +@lilypond[verbatim,quote,relative=2] +\tempo \markup { \italic Faster } 4 = 132 +a8-. r8 b-. r gis-. r a-. r +@end lilypond + +A parenthesized metronome mark with no textual indication may be +written by including an empty string in the input: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-tempo-without-a-metronome-mark.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{creating-metronome-marks-in-markup-mode.ly} + +For more details, see @ref{Formatting text}. + + +@seealso +Music Glossary: +@rglos{metronome}, +@rglos{metronomic indication}, +@rglos{tempo indication}, +@rglos{metronome mark}. + +Notation Reference: +@ref{Formatting text}, +@ref{MIDI output}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{MetronomeMark}. + + +@node Upbeats +@unnumberedsubsubsec Upbeats + +@cindex anacrusis +@cindex upbeat +@cindex partial measure +@cindex measure, partial +@cindex pickup measure +@cindex measure, change length + +@funindex measurePosition +@funindex \partial +@funindex partial + +Partial or pick-up measures, such as an anacrusis or upbeat, are +entered using the @code{\partial} command, with the syntax + +@example +\partial @var{duration} +@end example + +@noindent +where @code{@var{duration}} is the rhythmic length of the +remaining interval of the current measure before the start of the +next. + +@lilypond[quote,verbatim,relative=2] +\partial 4 e4 | +a2. c,4 | +@end lilypond + +The partial measure can be any duration less than the full measure: + +@lilypond[quote,verbatim,relative=2] +\partial 8*3 c8 d e | +a2. c,4 | +@end lilypond + +Internally, @code{\partial @var{duration}} is translated into: + +@example +\set Timing.measurePosition -@var{duration} +@end example + +For example, @code{\partial 8*3} becomes: + +@example +\set Timing.measurePosition = #(ly:make-moment -3 8) +@end example + +The property @code{measurePosition} contains a rational number +indicating how much of the measure has passed at this point. Note +that this is set to a negative number by the @code{\partial} command: +i.e., @code{\partial 4} is internally translated to @code{-4}, meaning +@qq{there is a quarter note left in the measure.} + +@seealso +Music Glossary: +@rglos{anacrusis}. + +Notation Reference: +@ref{Grace notes}. + +Snippets: +@rlsr{Rhythms}. + +Internal Reference: +@rinternals{Timing_translator}. + +@knownissues + +The @code{\partial} command is intended to be used only at the +beginning of a piece. If you use it after the beginning, some +odd warnings or effects may occur, in this case use +@code{\set Timing.measurePosition} instead. + +@node Unmetered music +@unnumberedsubsubsec Unmetered music + +@cindex bar lines, turning off +@cindex bar numbering, turning off +@cindex cadenza +@cindex unmetered music + +@funindex \cadenzaOn +@funindex cadenzaOn +@funindex \cadenzaOff +@funindex cadenzaOff + +Bar lines and bar numbers are calculated automatically. For +unmetered music (some cadenzas, for example), this is not desirable. +To turn off automatic calculation of bar lines and bar numbers, +use the command @code{\cadenzaOn}, and use @code{\cadenzaOff} +to turn them on again. + +@lilypond[verbatim,relative=2,quote] +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +Bar numbering is resumed at the end of the cadenza as if the +cadenza were not there: + +@lilypond[verbatim,relative=2,quote] +% Show all bar numbers +\override Score.BarNumber #'break-visibility = #all-visible +c4 d e d +\cadenzaOn +c4 c d8[ d d] f4 g4. +\cadenzaOff +\bar "|" +d4 e d c +@end lilypond + +@cindex beams, in cadenzas +@cindex beams, in unmetered music +@cindex cadenza, with beams +@cindex unmetered music, with beams + +Automatic beaming is disabled by @code{\cadenzaOn} and enabled +by @code{\cadenzaOff}. Therefore, all beaming in cadenzas +must be entered manually (@ref{Manual beams}). + +@lilypond[verbatim,relative=2,quote] +\repeat unfold 8 { c8 } +\cadenzaOn +\repeat unfold 5 { c8 } +\bar"|" +\cadenzaOff +\repeat unfold 8 { c8 } +@end lilypond + +Note that these predefined commands affect all staves in the +score, even when they are placed in just one @code{Voice} +context. To change this, move the @code{Timing_translator} +from the @code{Score} context to the @code{Staff} context, as +shown in @ref{Polymetric notation}. + +@predefined +@code{\cadenzaOn}, +@code{\cadenzaOff}. +@endpredefined + + +@seealso +Music Glossary: +@rglos{cadenza}. + +Notation Reference: +@ref{Visibility of objects}, +@ref{Polymetric notation}, +@ref{Manual beams}. + +Snippets: +@rlsr{Rhythms}. + + +@cindex cadenza line breaks +@cindex cadenza page breaks +@cindex unmetered music, line breaks +@cindex unmetered music, page breaks +@cindex breaks in unmetered music +@cindex line breaks in cadenzas +@cindex page breaks in cadenzas +@cindex line breaks in unmetered music +@cindex page breaks in unmetered music + +@knownissues + +LilyPond will insert line breaks and page breaks only at a +bar line. Unless the unmetered music ends before the end of the +staff line, you will need to insert invisible bar lines with + +@example +\bar "" +@end example + +@noindent +to indicate where breaks can occur. + +You should explicitly create a @code{Voice} context when starting a +piece with @code{\cadenzaOn}, otherwise strange errors may occur. + +@example +\new Voice @{ + \relative c' @{ + \cadenzaOn + c16[^"Solo Free Time" d e f] g2. + \bar "||" + \cadenzaOff + @} +@} +@end example + + +@node Polymetric notation +@unnumberedsubsubsec Polymetric notation + +@c This section necessarily uses \set +@c This is acceptable -td + +@cindex double time signatures +@cindex signatures, polymetric +@cindex time signatures, polymetric +@cindex time signatures, double +@cindex polymetric signatures +@cindex meter, polymetric + +@funindex timeSignatureFraction +@funindex \scaleDurations +@funindex scaleDurations +@funindex \times +@funindex times + +Polymetric notation is supported, either explicitly or by modifying +the visible time signature symbol and scaling the note durations. + +@strong{@i{Staves with different time signatures, equal measure lengths}} + +This notation can be created by setting a common time signature +for each staff but replacing the symbol manually by setting +@code{timeSignatureFraction} to the desired fraction and scaling +the printed durations in each staff to the common time +signature; see @ref{Time signature}. The scaling is done with +@code{\scaleDurations}, which is used in a similar way to +@code{\times}, but does not create a tuplet bracket; see +@ref{Scaling durations}. + +@cindex beams, with polymetric meters +@cindex polymetric meters, with beams + +In this example, music with the time signatures of 3/4, 9/8, and +10/8 are used in parallel. In the second staff, shown durations +are multiplied by 2/3, as 2/3 * 9/8 = 3/4, and in the third +staff, shown durations are multiplied by 3/5, as 3/5 * 10/8 = 3/4. +It will often be necessary to insert beams manually, as the +duration scaling affects the autobeaming rules. + +@lilypond[quote,verbatim] +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c c c | + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \repeat unfold 6 { c8[ c c] } + } + \new Staff { + \time 3/4 + \set Staff.timeSignatureFraction = #'(10 . 8) + \scaleDurations #'(3 . 5) { + \repeat unfold 2 { c8[ c c] } + \repeat unfold 2 { c8[ c] } | + c4. c4. \times 2/3 { c8[ c c] } c4 + } + } +>> +@end lilypond + +@strong{@i{Staves with different time signatures, unequal bar lengths}} + +Each staff can be given its own independent time signature by +moving the @code{Timing_translator} and the +@code{Default_bar_line_engraver} to the @code{Staff} context. + +@lilypond[quote,verbatim] +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } +} + +% Now each staff has its own time signature. + +\relative c' << + \new Staff { + \time 3/4 + c4 c c | + c4 c c | + } + \new Staff { + \time 2/4 + c4 c | + c4 c | + c4 c | + } + \new Staff { + \time 3/8 + c4. | + c8 c c | + c4. | + c8 c c | + } +>> +@end lilypond + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{compound-time-signatures.ly} + + +@seealso +Music Glossary: +@rglos{polymetric}, +@rglos{polymetric time signature}, +@rglos{meter}. + +Notation Reference: +@ref{Time signature}, +@ref{Scaling durations}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{TimeSignature}, +@rinternals{Timing_translator}, +@rinternals{Default_bar_line_engraver}, +@rinternals{Staff}. + + +@knownissues + +When using different time signatures in parallel, notes +at the same moment will be placed at the same horizontal +location. However, the bar lines in the different staves +will cause the note spacing to be less regular in each of the +individual staves than would be normal without the different +time signatures. + +@node Automatic note splitting +@unnumberedsubsubsec Automatic note splitting + +@cindex notes, splitting +@cindex splitting notes +@cindex rests, splitting +@cindex splitting rests + +@funindex Note_heads_engraver +@funindex Completion_heads_engraver +@funindex Completion_rest_engraver + +Long notes which overrun bar lines can be converted automatically to +tied notes. This is done by replacing the @code{Note_heads_engraver} +with the @code{Completion_heads_engraver}. Similarly, long rests which +overrun bar lines are split automatically by replacing the +@code{Rest_engraver} with the @code{Completion_rest_engraver}. In the +following example, notes and rests crossing the bar lines are split, +notes are also tied. + +@lilypond[quote,verbatim,relative=1] +\new Voice \with { + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" +} + +{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 r1*2 } +@end lilypond + +These engravers split all running notes and rests at the bar line, and +inserts ties for notes. One of its uses is to debug complex scores: if +the measures are not entirely filled, then the ties show exactly how +much each measure is off. + + +@seealso +Music Glossary: +@rglos{tie} + +Learning Manual: +@rlearning{Engravers explained}, +@rlearning{Adding and removing engravers}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Note_heads_engraver}, +@rinternals{Completion_heads_engraver}, +@rinternals{Rest_engraver}, +@rinternals{Completion_rest_engraver}, +@rinternals{Forbid_line_break_engraver}. + + +@knownissues + +Not all durations (especially those containing tuplets) can be +represented exactly with normal notes and dots, but the +@code{Completion_heads_engraver} will not insert tuplets. + +The @code{Completion_heads_engraver} only affects notes; it does not +split rests. + + +@node Showing melody rhythms +@unnumberedsubsubsec Showing melody rhythms + +@cindex melody rhythms, showing +@cindex rhythms, showing melody + +Sometimes you might want to show only the rhythm of a melody. This +can be done with the rhythmic staff. All pitches of notes on such a +staff are squashed, and the staff itself has a single line + +@lilypond[quote,relative=1,verbatim] +<< + \new RhythmicStaff { + \new Voice = "myRhythm" { + \time 4/4 + c4 e8 f g2 + r4 g g f + g1 + } + } + \new Lyrics { + \lyricsto "myRhythm" { + This is my song + I like to sing + } + } +>> +@end lilypond + +@cindex guitar chord charts +@cindex strumming rhythms, showing +@cindex guitar strumming rhythms, showing + +@funindex Pitch_squash_engraver +@funindex \improvisationOn +@funindex improvisationOn +@funindex \improvisationOff +@funindex improvisationOff + +Guitar chord charts often show the strumming rhythms. This can +be done with the @code{Pitch_squash_engraver} and +@code{\improvisationOn}. + + +@lilypond[quote,verbatim] +<< + \new ChordNames { + \chordmode { + c1 f g c + } + } + \new Voice \with { + \consists Pitch_squash_engraver + } \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } +>> +@end lilypond + + +@predefined +@code{\improvisationOn}, +@code{\improvisationOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{guitar-strum-rhythms.ly} + + +@seealso +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{RhythmicStaff}, +@rinternals{Pitch_squash_engraver}. + + +@node Beams +@subsection Beams + +@menu +* Automatic beams:: +* Setting automatic beam behavior:: +* Manual beams:: +* Feathered beams:: +@end menu + +@node Automatic beams +@unnumberedsubsubsec Automatic beams + +By default, beams are inserted automatically: + +@cindex beams, manual +@cindex manual beams +@cindex beams, customizing rules + +@funindex \autoBeamOn +@funindex autoBeamOn +@funindex \autoBeamOff +@funindex autoBeamOff + +@lilypond[quote,verbatim,relative=2] +\time 2/4 c8 c c c +\time 6/8 c8 c c c8. c16 c8 +@end lilypond + +If these automatic decisions are not satisfactory, beaming can be +entered explicitly; see @ref{Manual beams}. Beams @emph{must} be +entered manually if beams are to be extended over rests. + +If automatic beaming is not required, it may be turned off with +@code{\autoBeamOff} and on with @code{\autoBeamOn}: + +@lilypond[quote,relative=1,verbatim] +c4 c8 c8. c16 c8. c16 c8 +\autoBeamOff +c4 c8 c8. c16 c8. +\autoBeamOn +c16 c8 +@end lilypond + +@cindex melismata, with beams +@cindex beams, with melismata + +@warning{If beams are used to indicate melismata in songs, then +automatic beaming should be switched off with @code{\autoBeamOff} +and the beams indicated manually.} + +@warning{Using @code{@bs{}partcombine} with @code{@bs{}autoBeamOff} can +produce unintended results. See the snippet below for more information.} + +Beaming patterns that differ from the automatic defaults can be +created; see @ref{Setting automatic beam behavior}. + +@predefined +@code{\autoBeamOff}, +@code{\autoBeamOn}. +@endpredefined + +@cindex beams, line breaks +@cindex line breaks, beams +@cindex beams, with knee gap +@cindex knee gap, with beams +@funindex breakable + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beams-across-line-breaks.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-beam-knee-gap.ly} + +@cindex beams, \partcombine with \autoBeamOff +@cindex voices, \partcombine with \autoBeamOff + +@lilypondfile [verbatim, lilyquote, ragged-right, texidoc, doctitle] +{partcombine-and-autobeamoff.ly} + +@seealso +Notation Reference: +@ref{Manual beams}, +@ref{Setting automatic beam behavior}. + +Installed Files: +@file{scm/auto-beam.scm}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}, +@rinternals{unbreakable-spanner-interface}. + +@node Setting automatic beam behavior +@unnumberedsubsubsec Setting automatic beam behavior + +@cindex beams, with lyrics +@cindex lyrics, with beams + +@funindex autoBeaming +@funindex baseMoment +@funindex beamExceptions +@funindex beatStructure +@funindex measureLength +@funindex \time +@funindex time +@funindex \set +@funindex set + +In most instances, automatic beams will end at the end of a beat. +The ending points for beats are determined by the context properties +@code{baseMoment} and @code{beatStructure}. @code{beatStructure} +is a scheme list that defines the length of each beat in the measure +in units of @code{baseMoment}. By default, @code{baseMoment} is +the one over numerator of the time signature. By default, +each unit of length @code{baseMoment} is a single beat. + +@lilypond[quote,relative=2,verbatim] +\time 5/16 +c16^"default" c c c c | +\set Timing.beatStructure = #'(2 3) +c16^"(2+3)" c c c c | +\set Timing.beatStructure = #'(3 2) +c16^"(3+2)" c c c c | +@end lilypond + +Beam setting changes can be limited to specific contexts. If no +setting is included in a lower-level context, the setting of the +enclosing context will apply. + +@lilypond[quote, verbatim,relative=1] +\new Staff { + \time 7/8 + \set Staff.beatStructure = #'(2 3 2) + << + \new Voice = one { + \relative c'' { + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \set Voice.beatStructure = #'(1 3 3) + f8 f f f f f f + } + } + >> +} +@end lilypond + +When multiple voices are used the @code{Staff} context must be +specified if the beaming is to be applied to all voices in the +staff: + +@lilypond[quote,verbatim,relative=2] +\time 7/8 +% rhythm 3-1-1-2 +% Change applied to Voice by default -- does not work correctly +% Because of autogenerated voices, all beating will +% be at baseMoment (1 . 8) +\set beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> + +% Works correctly with context Staff specified +\set Staff.beatStructure = #'(3 1 1 2) +<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> +@end lilypond + +The value of @code{baseMoment} can be adjusted to change +the beaming behavior, if desired. When this is done, +the value of @code{beatStructure} must be set to be +compatible with the new value of @code{baseMoment}. + +@lilypond[quote,verbatim,relative=2] +\time 5/8 +\set Timing.baseMoment = #(ly:make-moment 1 16) +\set Timing.beatStructure = #'(7 3) +\repeat unfold 10 { a16 } +@end lilypond + +@code{baseMoment} is a @i{moment}; a unit of musical duration. A +quantity of type @i{moment} is created by the scheme function +@code{ly:make-moment}. For more information about this function, +see @ref{Time administration}. + +By default @code{baseMoment} is set to one over the denominator of +the time signature. Any exceptions to this default can be found in +@file{scm/time-signature-settings.scm}. + +Special autobeaming rules (other than ending a beam on a beat) +are defined in the @code{beamExceptions} property. + +@lilypond[quote,relative=2,verbatim] +\time 3/16 +\set Timing.beatStructure = #'(2 1) +\set Timing.beamExceptions = + #'( ;start of alist + (end . ;entry for end of beams + ( ;start of alist of end points + ((1 . 32) . (2 2 2)) ;rule for 1/32 beams -- end each 1/16 + ))) %close all entries +c16 c c | +\repeat unfold 6 { c32 } | +@end lilypond + +@code{beamExceptions} is an alist with a key of rule-type and a value +of beaming-rules. + +At this time the only available value of rule-type is +@code{#'end} for beam ending. + +Beaming-rules is a scheme alist (or list of pairs) that indicates the +beam type and the grouping to be applied to beams containing notes with +a shortest duration of that beam type. + +@example +#'((beam-type1 . grouping-1) + (beam-type2 . grouping-2) + (beam-type3 . grouping-3)) +@end example + +Beam type is a scheme pair indicating the duration of the beam, +e.g., @code{(1 . 16)}. + +Grouping is a scheme list indicating the grouping to be applied to +the beam. The grouping is in units of the beam type. + +@warning{ A @code{beamExceptions} value must be @emph{complete} +exceptions list. That is, every exception that should be applied +must be included in the setting. It is not possible to add, remove, +or change only one of the exceptions. While this may seem cumbersome, +it means that the current beaming settings need not be known in order +to specify a new beaming pattern.} + +When the time signature is changed, default values of +@code{Timing.baseMoment}, @code{Timing.beatStructure}, +and @code{Timing.beamExceptions} are set. Setting the time signature +will reset the automatic beaming settings for the @code{Timing} +context to the default behavior. + +@lilypond[quote,verbatim,relative=2] +\time 6/8 +\repeat unfold 6 { a8 } +% group (4 + 2) +\set Timing.beatStructure = #'(4 2) +\repeat unfold 6 { a8 } +% go back to default behavior +\time 6/8 +\repeat unfold 6 { a8 } +@end lilypond + +The default automatic beaming settings for a time signature +are determined in @file{scm/time-signature-settings.scm}. +Changing the default automatic beaming settings +for a time signature is described in @ref{Time signature}. + +Many automatic beaming settings for a time signature contain an +entry for @code{beamExceptions}. For example, 4/4 time tries to +beam the measure in two if there are only eighth notes. The +@code{beamExceptions} rule can override the @code{beatStructure} setting +if @code{beamExceptions} is not reset. + +@lilypond[quote,verbatim,relative=2] +\time 4/4 +\set Timing.baseMoment = #(ly:make-moment 1 8) +\set Timing.beatStructure = #'(3 3 2) +% This won't beam (3 3 2) because of beamExceptions +\repeat unfold 8 {c8} | +% This will beam (3 3 2) because we clear beamExceptions +\set Timing.beamExceptions = #'() +\repeat unfold 8 {c8} +@end lilypond + +In a similar fashion, eighth notes in 3/4 time are beamed as a full +measure by default. To beam eighth notes in 3/4 time on the beat, +reset @code{beamExceptions}. + +@lilypond[quote,verbatim,relative=2] +\time 3/4 +% by default we beam in (3) due to beamExceptions +\repeat unfold 6 {a8} | +% This will beam (1 1 1) due to beatLength +\set Timing.beamExceptions = #'() +\repeat unfold 6 {a8} +@end lilypond + +@i{@strong{How automatic beaming works}} + +When automatic beaming is enabled, the placement of automatic beams +is determined by the context properties +@code{baseMoment}, @code{beatStructure}, and @code{beamExceptions}. + +The following rules, in order of priority, apply when determining +the appearance of beams: + +@itemize +@item +If a manual beam is specified with @code{[..]} set the beam +as specified, otherwise + +@item +if a beam-ending rule is defined in @code{beamExceptions} +for the beam-type, use it to determine the valid places where +beams may end, otherwise + +@item +if a beam-ending rule is defined in @code{beamExceptions} +for a longer beam-type, use it to determined the valid places +where beams may end, otherwise + +@item +use the values of @code{baseMoment} and @code{beatStructure} to +determine the ends of the beats in the measure, and +end beams at the end of beats. + +@end itemize + +In the rules above, the @emph{beam-type} is the duration of the +shortest note in the beamed group. + +The default beaming rules can be found in +@file{scm/time-signature-settings.scm}. + +@snippets + +@cindex beams, subdividing + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{subdividing-beams.ly} + +@cindex measure groupings +@cindex beats, grouping +@cindex grouping beats +@cindex measure sub-grouping + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{conducting-signs,-measure-grouping-signs.ly} + +@cindex beam, endings in a score +@cindex beam, endings with multiple voices + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beam-endings-in-score-context.ly} + + +@seealso +Installed Files: +@file{scm/beam-settings.scm}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Auto_beam_engraver}, +@rinternals{Beam}, +@rinternals{BeamForbidEvent}, +@rinternals{beam-interface}. + + +@knownissues +If a score ends while an automatic beam has not been ended and is +still accepting notes, this last beam will not be typeset at all. +The same holds for polyphonic voices, entered with +@code{<< @dots{} \\ @dots{} >>}. If a polyphonic voice ends while an +automatic beam is still accepting notes, it is not typeset. +The workaround for these problems is to manually beam the last +beam in the voice or score. + +By default, the @code{Timing} translator is aliased to the +@code{Score} context. This means that setting the time signature +in one staff will affect the beaming of the other staves as well. +Thus, a time signature setting in a later staff will reset custom +beaming that was set in an earlier staff. +One way to avoid this problem is to set the time signature +in only one staff. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \time 3/4 + \set Timing.baseMoment = #(ly:make-moment 1 8) + \set Timing.beatStructure = #'(1 5) + \repeat unfold 6 { a8 } + } + \new Staff { + \repeat unfold 6 { a8 } + } +>> +@end lilypond + +The default beam settings for the time signature can also be changed, so +that the desired beaming will always be used. Changes in automatic +beaming settings for a time signature are described in +@ref{Time signature}. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + \overrideTimeSignatureSettings + #'(3 . 4) % timeSignatureFraction + #'(1 . 8) % baseMomentFraction + #'(1 5) % beatStructure + #'() % beamExceptions + \time 3/4 + \repeat unfold 6 { a8 } + } + \new Staff { + \time 3/4 + \repeat unfold 6 { a8 } + } +>> +@end lilypond + +@node Manual beams +@unnumberedsubsubsec Manual beams + +@cindex beams, manual +@cindex manual beams + +@funindex ] +@funindex [ + +In some cases it may be necessary to override the automatic +beaming algorithm. For example, the autobeamer will not put beams +over rests or bar lines, and in choral scores the beaming is +often set to follow the meter of the lyrics rather than the +notes. Such beams can be specified manually by +marking the begin and end point with @code{[} and @code{]}. + +@lilypond[quote,relative=1,verbatim] +r4 r8[ g' a r] r g[ | a] r +@end lilypond + +@cindex manual beams, direction shorthand for +@cindex manual beams, grace notes + +Beaming direction can be set manually using direction indicators: + +@lilypond[quote,relative=2,verbatim] +c8^[ d e] c,_[ d e f g] +@end lilypond + +@funindex \noBeam +@funindex noBeam + +Individual notes may be marked with @code{\noBeam} to prevent them +from being beamed: + +@lilypond[quote,verbatim,relative=2] +\time 2/4 +c8 c\noBeam c c +@end lilypond + +Grace note beams and normal note beams can occur simultaneously. +Unbeamed grace notes are not put into normal note beams. + +@lilypond[quote,verbatim,relative=2] +c4 d8[ +\grace { e32[ d c d] } +e8] e[ e +\grace { f16 } +e8 e] +@end lilypond + +@funindex stemLeftBeamCount +@funindex stemRightBeamCount + +Even more strict manual control with the beams can be achieved by +setting the properties @code{stemLeftBeamCount} and +@code{stemRightBeamCount}. They specify the number of beams to +draw on the left and right side, respectively, of the next note. +If either property is set, its value will be used only once, and +then it is erased. In this example, the last @code{f} is printed +with only one beam on the left side, i.e., the eighth-note beam of +the group as a whole. + +@lilypond[quote,relative=2,verbatim] +a8[ r16 f g a] +a8[ r16 +\set stemLeftBeamCount = #2 +\set stemRightBeamCount = #1 +f16 +\set stemLeftBeamCount = #1 +g16 a] +@end lilypond + + +@predefined +@code{\noBeam}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{flat-flags-and-beam-nibs.ly} + + +@seealso +Notation Reference: +@ref{Direction and placement}, +@ref{Grace notes}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Beam}, +@rinternals{BeamEvent}, +@rinternals{Beam_engraver}, +@rinternals{beam-interface}, +@rinternals{Stem_engraver}. + + +@node Feathered beams +@unnumberedsubsubsec Feathered beams + +@cindex beams, feathered +@cindex feathered beams + +@funindex \featherDurations +@funindex featherDurations +@funindex grow-direction + +Feathered beams are used to indicate that a small group of notes +should be played at an increasing (or decreasing) tempo, without +changing the overall tempo of the piece. The extent of the +feathered beam must be indicated manually using @code{[} and +@code{]}, and the beam feathering is turned on by specifying a +direction to the @code{Beam} property @code{grow-direction}. + +If the placement of the notes and the sound in the MIDI output is to +reflect the @emph{ritardando} or @emph{accelerando} indicated by the +feathered beam the notes must be grouped as a music expression delimited +by braces and preceded by a @code{featherDurations} command which specifies +the ratio between the durations of the first and last notes in the +group. + +The square brackets show the extent of the beam and the braces show +which notes are to have their durations modified. Normally these +would delimit the same group of notes, but this is not required: the +two commands are independent. + +In the following example the eight 16th notes occupy exactly the +same time as a half note, but the first note is one half as long +as the last one, with the intermediate notes gradually +lengthening. The first four 32nd notes gradually speed up, while +the last four 32nd notes are at a constant tempo. + +@lilypond[relative=1,verbatim,quote] +\override Beam #'grow-direction = #LEFT +\featherDurations #(ly:make-moment 2 1) +{ c16[ c c c c c c c] } +\override Beam #'grow-direction = #RIGHT +\featherDurations #(ly:make-moment 2 3) +{ c32[ d e f] } +% revert to non-feathered beams +\override Beam #'grow-direction = #'() +{ g32[ a b c] } +@end lilypond + +@noindent +The spacing in the printed output represents the +note durations only approximately, but the MIDI output is exact. + + +@predefined +@code{\featherDurations}. +@endpredefined + +@seealso +Snippets: +@rlsr{Rhythms}. + + +@knownissues + +The @code{\featherDurations} command only works with very short +music snippets, and when numbers in the fraction are small. + + +@node Bars +@subsection Bars + + +@menu +* Bar lines:: +* Bar numbers:: +* Bar and bar number checks:: +* Rehearsal marks:: +@end menu + +@node Bar lines +@unnumberedsubsubsec Bar lines + +@cindex bar lines +@cindex measure lines +@cindex closing bar lines +@cindex bar lines, closing +@cindex double bar lines +@cindex bar lines, double +@cindex repeat bars + +@funindex \bar +@funindex bar + +Bar lines delimit measures, and are also used to indicate +repeats. Normally, simple bar lines are automatically inserted +into the printed output at places based on the current time +signature. + +The simple bar lines inserted automatically can be changed to +other types with the @code{\bar} command. For example, a closing +double bar line is usually placed at the end of a piece: + +@lilypond[quote,relative=1,verbatim] +e4 d c2 \bar "|." +@end lilypond + +It is not invalid if the final note in a measure does not +end on the automatically entered bar line: the note is assumed +to carry over into the next measure. But if a long sequence +of such carry-over measures appears the music can appear compressed +or even flowing off the page. This is because automatic line +breaks happen only at the end of complete measures, i.e., where +all notes end before the end of a measure. + +@warning{An incorrect duration can cause line breaks to be +inhibited, leading to a line of highly compressed music or +music which flows off the page.} + +@cindex line breaks +@cindex bar lines, invisible +@cindex measure lines, invisible + +Line breaks are also permitted at manually inserted bar lines +even within incomplete measures. To allow a line break without +printing a bar line, use the following: + +@example +\bar "" +@end example + +@noindent +This will insert an invisible bar line and allow (but not +force) a line break to occur at this point. The bar number +counter is not increased. To force a line break see +@ref{Line breaking}. + +@cindex manual bar lines +@cindex manual measure lines +@cindex bar lines, manual +@cindex measure lines, manual + +This and other special bar lines may be inserted manually at any +point. When they coincide with the end of a measure they replace +the simple bar line which would have been inserted there +automatically. When they do not coincide with the end of a measure +the specified bar line is inserted at that point in the printed +output. + +Note that manual bar lines are purely visual. They do not affect +any of the properties that a normal bar line would affect, such as +measure numbers, accidentals, line breaks, etc. They do not affect +the calculation and placement of subsequent automatic bar lines. +When a manual bar line is placed where a normal bar line already +exists, the effects of the original bar line are not altered. + +Two types of simple bar lines and five types of double bar lines are +available for manual insertion: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|" +f1 \bar "." +g1 \bar "||" +a1 \bar ".|" +b1 \bar ".|." +c1 \bar "|.|" +d1 \bar "|." +e1 +@end lilypond + +@noindent +together with dotted and dashed bar lines: + +@lilypond[quote,relative=1,verbatim] +f1 \bar ":" +g1 \bar "dashed" +a1 +@end lilypond + +@noindent +and five types of repeat bar line: + +@lilypond[quote,relative=1,verbatim] +f1 \bar "|:" +g1 \bar ":|:" +a1 \bar ":|.|:" +b1 \bar ":|.:" +c1 \bar ":|" +e1 +@end lilypond + +Additionally, a bar line can be printed as a simple tick: +@lilypond[quote,relative=1,verbatim] +f1 \bar "'" +@end lilypond +However, as such ticks are typically used in Gregorian chant, it is +preferable to use @code{\divisioMinima} there instead, described in +the section @ref{Divisiones} in Gregorian chant. + +@cindex segno + +For in-line segno signs, there are three types of bar lines which +differ in their behavior at line breaks: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "S" +c4 c c c \break +\bar "S" +c4 c c c +\bar "|S" +c4 c c c \break +\bar "|S" +c4 c c c +\bar "S|" +c4 c c c \break +\bar "S|" +c1 +@end lilypond + +@cindex repeats + +Although the bar line types signifying repeats may be inserted +manually they do not in themselves cause LilyPond to recognize +a repeated section. Such repeated sections are better entered +using the various repeat commands (see @ref{Repeats}), which +automatically print the appropriate bar lines. + +In addition, you can specify @code{"||:"}, which is equivalent to +@code{"|:"} except at line breaks, where it gives a double bar +line at the end of the line and a start repeat at the beginning of +the next line. + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar "||:" +c4 c c c \break +\bar "||:" +c4 c c c +@end lilypond + +For combinations of repeats with the segno sign, there are six different +variations: + +@lilypond[quote,relative=2,verbatim] +c4 c c c +\bar ":|S" +c4 c c c \break +\bar ":|S" +c4 c c c +\bar ":|S." +c4 c c c \break +\bar ":|S." +c4 c c c +\bar "S|:" +c4 c c c \break +\bar "S|:" +c4 c c c +\bar ".S|:" +c4 c c c \break +\bar ".S|:" +c4 c c c +\bar ":|S|:" +c4 c c c \break +\bar ":|S|:" +c4 c c c +\bar ":|S.|:" +c4 c c c \break +\bar ":|S.|:" +c1 +@end lilypond + + +In scores with many staves, a @code{\bar} command in one staff is +automatically applied to all staves. The resulting bar lines are +connected between different staves of a @code{StaffGroup}, +@code{PianoStaff}, or @code{GrandStaff}. + +@lilypond[quote,relative=1,verbatim] +<< + \new StaffGroup << + \new Staff { + e4 d + \bar "||" + f4 e + } + \new Staff { \clef bass c4 g e g } + >> + \new Staff { \clef bass c2 c2 } +>> +@end lilypond + + +@cindex default bar lines, changing +@cindex bar lines, default, changing + +@snippets + +@funindex whichBar +@funindex defaultBarType +@funindex \bar +@funindex bar +@funindex bartype + +The command @samp{\bar @var{bartype}} is a shortcut for +@samp{\set Timing.whichBar = @var{bartype}}. A bar line is +created whenever the @code{whichBar} property is set. + +The default bar type used for automatically inserted bar lines is +@code{"|"}. This may be changed at any time with +@samp{\set Timing.defaultBarType = @var{bartype}}. + + +@seealso +Notation Reference: +@ref{Line breaking}, +@ref{Repeats}, +@ref{Grouping staves}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{BarLine} (created at @code{Staff} level), +@rinternals{SpanBar} (across staves), +@rinternals{Timing_translator} (for Timing properties). + + +@node Bar numbers +@unnumberedsubsubsec Bar numbers + +@cindex bar numbers +@cindex measure numbers +@cindex numbers, bar +@cindex numbers, measure + +@funindex currentBarNumber + +Bar numbers are typeset by default at the start of every line except +the first line. The number itself is stored in the +@code{currentBarNumber} property, which is normally updated +automatically for every measure. It may also be set manually: + +@lilypond[verbatim,quote,relative=1] +c1 c c c +\break +\set Score.currentBarNumber = #50 +c1 c c c +@end lilypond + +@cindex bar numbers, regular spacing + +@funindex barNumberVisibility +@funindex BarNumber + +Bar numbers can be typeset at regular intervals instead of just at +the beginning of every line. To do this the default behavior +must be overridden to permit bar numbers to be printed at places +other than the start of a line. This is controlled by the +@code{break-visibility} property of @code{BarNumber}. This takes +three values which may be set to @code{#t} or @code{#f} to specify +whether the corresponding bar number is visible or not. The order +of the three values is @code{end of line visible}, @code{middle of +line visible}, @code{beginning of line visible}. In the following +example bar numbers are printed at all possible places: + +@lilypond[verbatim,quote,relative=1] +\override Score.BarNumber #'break-visibility = #'#(#t #t #t) +\set Score.currentBarNumber = #11 +% Permit first bar number to be printed +\bar "" +c1 | c | c | c +\break +c1 | c | c | c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-the-bar-number-for-the-first-measure.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-at-regular-intervals.ly} + +@cindex measure number, format +@cindex bar number, format + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-bar-numbers-inside-boxes-or-circles.ly} + +@cindex bar number alignment + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{aligning-bar-numbers.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{removing-bar-numbers-from-a-score.ly} + + +@seealso +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{BarNumber}, +@rinternals{Bar_number_engraver}. + + +@cindex bar number collision +@cindex collision, bar number + +@knownissues +Bar numbers may collide with the top of the @code{StaffGroup} bracket, +if there is one. To solve this, the @code{padding} property of +@code{BarNumber} can be used to position the number correctly. See +@rinternals{StaffGroup} and @rinternals{BarNumber} for more. + + +@node Bar and bar number checks +@unnumberedsubsubsec Bar and bar number checks + +@cindex bar check +@cindex bar number check +@cindex measure check +@cindex measure number check + +@funindex barCheckSynchronize +@funindex | + +Bar checks help detect errors in the entered durations. A bar check +may be entered using the bar symbol, @code{|}, at any place where a +bar line is expected to fall. If bar check lines are encountered at +other places, a list of warnings is printed in the log file, showing +the line numbers and lines in which the bar checks failed. In the +next example, the second bar check will signal an error. + +@example +\time 3/4 c2 e4 | g2 | +@end example + +Bar checks can also be used in lyrics: + +@example +\lyricmode @{ + \time 2/4 + Twin -- kle | Twin -- kle | +@} +@end example + +An incorrect duration can result in a completely garbled score, +especially if the score is polyphonic, so a good place to start +correcting input is by scanning for failed bar checks and +incorrect durations. + +If successive bar checks are off by the same musical interval, +only the first warning message is displayed. This allows the +warning to focus on the source of the timing error. + + +@funindex | +@funindex pipeSymbol + +It is also possible to redefine the action taken when a bar check +or pipe symbol, @code{|}, is encountered in the input, so that +it does something other than a bar check. This is done by +assigning a music expression to @code{pipeSymbol}. +In the following example @code{|} is set to insert a double bar +line wherever it appears in the input, rather than checking +for end of bar. + +@lilypond[quote,verbatim] +pipeSymbol = \bar "||" +{ + c'2 c' | + c'2 c' + c'2 | c' + c'2 c' +} +@end lilypond + +@funindex \barNumberCheck +@funindex barNumberCheck + +When copying large pieces of music, it can be helpful to check that +the LilyPond bar number corresponds to the original that you are +entering from. This can be checked with @code{\barNumberCheck}, for +example, + +@verbatim +\barNumberCheck #123 +@end verbatim + +@noindent +will print a warning if the @code{currentBarNumber} is not 123 +when it is processed. + + +@seealso +Snippets: +@rlsr{Rhythms}. + + +@node Rehearsal marks +@unnumberedsubsubsec Rehearsal marks + +@cindex rehearsal marks +@cindex mark, rehearsal + +@funindex \mark +@funindex mark + +To print a rehearsal mark, use the @code{\mark} command. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +The mark is incremented automatically if you use @code{\mark +\default}, but you can also use an integer argument to set the +mark manually. The value to use is stored in the property +@code{rehearsalMark}. + +@lilypond[quote,verbatim,relative=2] +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@noindent +The letter@tie{}@q{I} is skipped in accordance with engraving +traditions. If you wish to include the letter @q{I}, then use one +of the following commands, depending on which style of rehearsal mark +you want (letters only, letters in a hollow box, or letters in a +hollow circle). + +@example +\set Score.markFormatter = #format-mark-alphabet +\set Score.markFormatter = #format-mark-box-alphabet +\set Score.markFormatter = #format-mark-circle-alphabet +@end example + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-box-alphabet +c1 \mark \default +c1 \mark \default +c1 \mark #8 +c1 \mark \default +c1 \mark \default +@end lilypond + +@cindex rehearsal mark format +@cindex rehearsal mark style +@cindex style, rehearsal mark +@cindex format, rehearsal mark +@cindex mark, rehearsal, style +@cindex mark, rehearsal, format +@cindex rehearsal mark, manual +@cindex mark, rehearsal, manual +@cindex custom rehearsal mark +@cindex manual rehearsal mark + +The style is defined by the property @code{markFormatter}. It is +a function taking the current mark (an integer) and the current +context as argument. It should return a markup object. In the +following example, @code{markFormatter} is set to a pre-defined +procedure. After a few measures, it is set to a procedure that +produces a boxed number. + +@lilypond[quote,verbatim,relative=2] +\set Score.markFormatter = #format-mark-numbers +c1 \mark \default +c1 \mark \default +\set Score.markFormatter = #format-mark-box-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-numbers +c1 \mark \default +\set Score.markFormatter = #format-mark-circle-letters +c1 +@end lilypond + +The file @file{scm/translation-functions.scm} contains the +definitions of @code{format-mark-numbers} (the default format), +@code{format-mark-box-numbers}, @code{format-mark-letters} and +@code{format-mark-box-letters}. These can be used as inspiration +for other formatting functions. + +You may use @code{format-mark-barnumbers}, +@code{format-mark-box-barnumbers}, and +@code{format-mark-circle-barnumbers} to get bar numbers instead of +incremented numbers or letters. + +Other styles of rehearsal mark can be specified manually: + +@example +\mark "A1" +@end example + +@noindent +Note that @code{Score.markFormatter} does not affect marks specified +in this manner. However, it is possible to apply a @code{\markup} to the +string. + +@example +\mark \markup@{ \box A1 @} +@end example + +@cindex segno +@cindex coda +@cindex D.S. al Fine +@cindex fermata +@cindex music glyphs +@cindex glyphs, music + +@funindex \musicglyph +@funindex musicglyph + +Music glyphs (such as the segno sign) may be printed inside a +@code{\mark} + +@lilypond[quote,verbatim,relative=1] +c1 \mark \markup { \musicglyph #"scripts.segno" } +c1 \mark \markup { \musicglyph #"scripts.coda" } +c1 \mark \markup { \musicglyph #"scripts.ufermata" } +c1 +@end lilypond + +@noindent +See @ref{The Feta font}, for a list of symbols which may be +printed with @code{\musicglyph}. + +For common tweaks to the positioning of rehearsal marks, see +@ref{Formatting text}. For more precise control, see +@code{break-alignable-interface} in @ref{Aligning objects}. + + +@seealso +Notation Reference: +@ref{The Feta font}, +@ref{Formatting text}, +@ref{Aligning objects}. + +Installed Files: +@file{scm/translation-functions.scm} contains +the definitions of @code{format-mark-numbers} and +@code{format-mark-letters}. They can be used as inspiration for +other formatting functions. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + + +@node Special rhythmic concerns +@subsection Special rhythmic concerns + + +@menu +* Grace notes:: +* Aligning to cadenzas:: +* Time administration:: +@end menu + +@node Grace notes +@unnumberedsubsubsec Grace notes + +@cindex ornaments +@cindex grace notes +@cindex appoggiatura +@cindex acciaccatura + +@funindex \grace +@funindex grace + +Grace notes are ornaments that are written out. Grace notes +are printed in a smaller font and take up no logical time +in a measure. + +@lilypond[quote,relative=2,verbatim] +c4 \grace c16 c4 +\grace { c16[ d16] } c2 +@end lilypond + +LilyPond also supports two special types of grace notes, the +@emph{acciaccatura} -- an unmeasured grace note indicated by a slurred +small note with a slashed stem -- and the @emph{appoggiatura}, which +takes a fixed fraction of the main note and appears in small print +without a slash. + +@lilypond[quote,relative=2,verbatim] +\grace c8 b4 +\acciaccatura d8 c4 +\appoggiatura e8 d4 +\acciaccatura { g16[ f] } e4 +@end lilypond + +The placement of grace notes is synchronized between different +staves. In the following example, there are two sixteenth grace +notes for every eighth grace note + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e2 \grace { c16[ d e f] } e2 } + \new Staff { c2 \grace { g8[ b] } c2 } +>> +@end lilypond + +@cindex grace notes, following + +@funindex \afterGrace +@funindex afterGrace + +If you want to end a note with a grace, use the @code{\afterGrace} +command. It takes two arguments: the main note, and the grace +notes following the main note. + +@lilypond[quote,verbatim,relative=2] +c1 \afterGrace d1 { c16[ d] } c1 +@end lilypond + +This will put the grace notes after a space lasting 3/4 of the +length of the main note. The default fraction 3/4 can be changed by +setting @code{afterGraceFraction}. The following example shows +the results from setting the space at the default, at 15/16, and +finally at 1/2 of the main note. + +@lilypond[quote,verbatim,relative=2] +<< + \new Staff { + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 15 16)) + c1 \afterGrace d1 { c16[ d] } c1 + } + \new Staff { + #(define afterGraceFraction (cons 1 2)) + c1 \afterGrace d1 { c16[ d] } c1 + } +>> +@end lilypond + +The space between the main note and the grace note may also be +specified using spacers. The following example places the grace +note after a space lasting 7/8 of the main note. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + << + { d1^\trill_( } + { s2 s4. \grace { c16[ d] } } + >> + c1) +} +@end lilypond + +@cindex tweaking grace notes +@cindex grace notes, tweaking +@cindex grace notes, changing layout settings + +A @code{\grace} music expression will introduce special +typesetting settings, for example, to produce smaller type, and +set directions. Hence, when introducing layout tweaks to +override the special settings, they should be placed inside +the grace expression. The overrides should also be reverted +inside the grace expression. Here, the grace note's default stem +direction is overridden and then reverted. + +@lilypond[quote,verbatim,relative=2] +\new Voice { + \acciaccatura { + \stemDown + f16-> + \stemNeutral + } + g4 e c2 +} +@end lilypond + + +@cindex stem, with slash + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{using-grace-note-slashes-with-normal-heads.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{tweaking-grace-layout-within-music.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{redefining-grace-note-global-defaults.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{positioning-grace-notes-with-floating-space.ly} + + +@seealso +Music Glossary: +@rglos{grace notes}, +@rglos{acciaccatura}, +@rglos{appoggiatura}. + +Notation Reference: +@ref{Manual beams}. + +Installed Files: +@file{ly/grace-init.ly}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{GraceMusic}, +@rinternals{Grace_beam_engraver}, +@rinternals{Grace_engraver}, +@rinternals{Grace_spacing_engraver}. + + +@knownissues + +@cindex acciaccatura, multi-note +@cindex multi-note acciaccatura +@cindex grace-note synchronization + +A multi-note beamed @i{acciaccatura} is printed without a slash, +and looks exactly the same as a multi-note beamed +@i{appoggiatura}. + +@c TODO Add link to LSR snippet to add slash when available + +Grace note synchronization can also lead to surprises. Staff +notation, such as key signatures, bar lines, etc., are also +synchronized. Take care when you mix staves with grace notes and +staves without, for example, + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" d2. } +>> +@end lilypond + +@noindent +This can be remedied by inserting grace skips of the corresponding +durations in the other staves. For the above example + +@lilypond[quote,relative=2,verbatim] +<< + \new Staff { e4 \bar "|:" \grace c16 d2. } + \new Staff { c4 \bar "|:" \grace s16 d2. } +>> +@end lilypond + +The use of grace notes within voice contexts confuses the way the voice +is typeset. This can be overcome by inserting a rest or note between the +voice command and the grace note. + +@lilypond[quote,verbatim] +accMusic = { + \acciaccatura { f8 } e8 r8 \acciaccatura { f8 } e8 r4 +} + +\new Staff { + << + \new Voice { + \relative c'' { + r8 r8 \voiceOne \accMusic \oneVoice r8 | + r8 \voiceOne r8 \accMusic \oneVoice r8 | + } + } + \new Voice { + \relative c' { + s8 s8 \voiceTwo \accMusic \oneVoice s8 | + s8 \voiceTwo r8 \accMusic \oneVoice s8 | + } + } + >> +} +@end lilypond + +Grace sections should only be used within sequential music expressions. +Nesting or juxtaposing grace sections is not supported, and might +produce crashes or other errors. + +Each grace note in MIDI output has a length of 1/4 of its actual +duration. If the combined length of the grace notes is greater than the +length of the preceding note a @qq{@code{Going back in MIDI time}} +error will be generated. Either make the grace notes shorter in +duration, for example: + +@example +\acciaccatura @{ c'8[ d' e' f' g'] @} +@end example + +becomes: + +@example +\acciaccatura @{ c'16[ d' e' f' g'] @} +@end example + +Or explicitly change the musical duration: + +@example +\acciaccatura @{ \scaleDurations #' (1 . 2) @{ c'8[ d' e' f' g'] @} @} +@end example + +See @ref{Scaling durations}. + + +@node Aligning to cadenzas +@unnumberedsubsubsec Aligning to cadenzas + +@cindex cadenza +@cindex cadenza, aligning to +@cindex aligning to cadenza + +In an orchestral context, cadenzas present a special problem: when +constructing a score that includes a measured cadenza or other solo +passage, all other instruments should skip just as many notes as the +length of the cadenza, otherwise they will start too soon or too late. + +One solution to this problem is to use the functions +@code{mmrest-of-length} and @code{skip-of-length}. These Scheme +functions take a defined piece of music as an argument and generate a +multi-measure rest or @code{\skip} exactly as long as the piece. + +@lilypond[verbatim,quote] +MyCadenza = \relative c' { + c4 d8 e f g g4 + f2 g4 g +} + +\new GrandStaff << + \new Staff { + \MyCadenza c'1 + \MyCadenza c'1 + } + \new Staff { + #(ly:export (mmrest-of-length MyCadenza)) + c'1 + #(ly:export (skip-of-length MyCadenza)) + c'1 + } +>> +@end lilypond + + +@seealso +Music Glossary: +@rglos{cadenza}. + +Snippets: +@rlsr{Rhythms}. + + +@node Time administration +@unnumberedsubsubsec Time administration + +@cindex time administration +@cindex timing (within the score) +@cindex music, unmetered +@cindex unmetered music + +@funindex currentBarNumber +@funindex measurePosition +@funindex measureLength + +Time is administered by the @code{Timing_translator}, which by +default is to be found in the @code{Score} context. An alias, +@code{Timing}, is added to the context in which the +@code{Timing_translator} is placed. To ensure that the +@code{Timing} alias is available, you may need to explicitly +instantiate the containing context (such as @code{Voice} or +@code{Staff}). + +The following properties of @code{Timing} are used +to keep track of timing within the score. + +@cindex bar number +@cindex measure number + +@table @code +@item currentBarNumber +The current measure number. For an example showing the +use of this property see @ref{Bar numbers}. + +@item measureLength +The length of the measures in the current time signature. For a +4/4 time this is@tie{}1, and for 6/8 it is 3/4. Its value +determines when bar lines are inserted and how automatic beams +should be generated. + +@item measurePosition +The point within the measure where we currently are. This +quantity is reset by subtracting @code{measureLength} whenever +@code{measureLength} is reached or exceeded. When that happens, +@code{currentBarNumber} is incremented. + +@item timing +If set to true, the above variables are updated for every time +step. When set to false, the engraver stays in the current +measure indefinitely. + +@end table + +Timing can be changed by setting any of these variables +explicitly. In the next example, the default 4/4 time +signature is printed, but @code{measureLength} is set to 5/4. +At 4/8 through the third measure, the @code{measurePosition} is +advanced by 1/8 to 5/8, shortening that bar by 1/8. +The next bar line then falls at 9/8 rather than 5/4. + +@lilypond[quote,verbatim] +\new Voice \relative c' { + \set Timing.measureLength = #(ly:make-moment 5 4) + c1 c4 | + c1 c4 | + c4 c + \set Timing.measurePosition = #(ly:make-moment 5 8) + b4 b b8 | + c4 c1 | +} +@end lilypond + +@noindent +As the example illustrates, @code{ly:make-moment n m} constructs a +duration of n/m of a whole note. For example, +@code{ly:make-moment 1 8} is an eighth note duration and +@code{ly:make-moment 7 16} is the duration of seven sixteenths +notes. + + +@seealso +Notation Reference: +@ref{Bar numbers}, +@ref{Unmetered music}. + +Snippets: +@rlsr{Rhythms}. + +Internals Reference: +@rinternals{Timing_translator}, +@rinternals{Score}. + diff --git a/Documentation/notation/simultaneous.itely b/Documentation/notation/simultaneous.itely new file mode 100644 index 0000000000..b59bdbb8e2 --- /dev/null +++ b/Documentation/notation/simultaneous.itely @@ -0,0 +1,1094 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@node Simultaneous notes +@section Simultaneous notes + +@lilypondfile[quote]{simultaneous-headword.ly} + +Polyphony in music refers to having more than one voice occurring +in a piece of music. Polyphony in LilyPond refers to having more +than one voice on the same staff. + +@menu +* Single voice:: +* Multiple voices:: +@end menu + + +@node Single voice +@subsection Single voice + +This section discusses simultaneous notes inside the same voice. + +@menu +* Chorded notes:: +* Chord repetition:: +* Simultaneous expressions:: +* Clusters:: +@end menu + + +@node Chorded notes +@unnumberedsubsubsec Chorded notes + +@cindex chords +@cindex brackets, angle + +@funindex < +@funindex > +@funindex <...> + +A chord is formed by enclosing a set of pitches between @code{<} +and @code{>}. A chord may be followed by a duration just like simple +notes. + +@lilypond[verbatim,quote,relative=2] +1 2 4 8. 16 +@end lilypond + +Chords may also be followed by articulations, again just like simple +notes. + +@lilypond[verbatim,quote,relative=2] +1\fermata 2-> 4\prall 8.^| 16-. +@end lilypond + +The notes within the chord themselves can also be followed by articulation +and ornamentation. + +@lilypond[verbatim,quote,relative=2] +1 c-^ e>2 4 8. 16 +@end lilypond + +However some notation, such as dynamics, hairpins and slurs must be +attached to the chord, rather than notes within the chord, otherwise +they will not print. + +@lilypond[verbatim,quote,relative=2] +1 \f ( ) \< \! +@end lilypond + +@cindex relative pitch, chords +@cindex chords, relative pitch + +Relative mode can be used for pitches in chords. The first note of +each chord is always relative to the first note of the chord that +came before it, or in the case where no preceding chord exists, the +pitch of the last note that came before the chord. All remaining notes +in the chord are relative to the note that came before it +@emph{within the same chord}. + +@lilypond[verbatim,quote,relative=2] +1 +@end lilypond + +For more information about chords, see @ref{Chord notation}. + +@seealso +Music Glossary: +@rglos{chord}. + +Learning Manual: +@rlearning{Combining notes into chords}. + +Notation Reference: +@ref{Chord notation}, +@ref{Articulations and ornamentations}, +@ref{Relative octave entry}, +@ref{Multiple voices}. + +Snippets: +@rlsr{Simultaneous notes}. + +@knownissues +Chords containing more than two pitches within a staff space, +such as @samp{}, create overlapping noteheads. +Depending on the situation, better representations might involve + +@itemize + +@item +temporary use of @ref{Multiple voices}, +@samp{<< f! \\ >>}, + +@item +enharmonic transcription of one or more pitches, +@samp{}, or + +@item +@ref{Clusters}. + +@end itemize + +@node Chord repetition +@unnumberedsubsubsec Chord repetition + +In order to save typing, a shortcut can be used to repeat the preceding +chord. The chord repetition symbol is @code{q}: + +@lilypond[verbatim,quote,relative=2] +1 q 2 q +@end lilypond + +As with regular chords, the chord repetition symbol can be used with +durations, articulations, markups, slurs, beams, etc. as only the +pitches of the previous chord are duplicated. + +@lilypond[verbatim,quote,relative=2] +1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +@end lilypond + +The chord repetition symbol always remembers the last instance of +a chord so it is possible to repeat the most recent chord even if +other non-chorded notes or rests have been added since. + +@lilypond[verbatim,quote,relative=2] +1 c4 q2 r8 q8 +@end lilypond + +However, the chord repetition symbol does not retain any dynamics, +articulation or ornamentation within, or attached to the previous chord. + +@lilypond[verbatim,quote,relative=2] +1\sfz c4 q2 r8 q8 +@end lilypond + +@seealso +Notation Reference: +@ref{Chord notation}, +@ref{Articulations and ornamentations}. + +Installed Files: +@file{ly/chord-repetition-init.ly}. + + +@node Simultaneous expressions +@unnumberedsubsubsec Simultaneous expressions + +One or more music expressions enclosed in double angle brackets are +taken to be simultaneous. If the first expression begins with a +single note or if the whole simultaneous expression appears +explicitly within a single voice, the whole expression is placed on +a single staff; otherwise the elements of the simultaneous +expression are placed on separate staves. + +The following examples show simultaneous expressions on one staff: + +@lilypond[quote,verbatim,relative=2] +\new Voice { % explicit single voice + << { a4 b g2 } { d4 g c,2 } >> +} +@end lilypond + +@lilypond[quote,verbatim,relative=2] +% single first note +a << { a4 b g } { d4 g c, } >> +@end lilypond + +This can be useful if the simultaneous sections have identical +rhythms, but attempts to attach notes with different durations +to the same stem will cause errors. + +The following example shows how simultaneous expressions can +generate multiple staves implicitly: + +@lilypond[quote,verbatim,relative=2] +% no single first note +<< { a4 b g2 } { d4 g2 c,4 } >> +@end lilypond + +Here different rhythms cause no problems. + + +@node Clusters +@unnumberedsubsubsec Clusters + +@cindex cluster +@cindex note cluster + +@funindex \makeClusters +@funindex makeClusters + +A cluster indicates a continuous range of pitches to be played. +They can be denoted as the envelope of a set of notes. They are +entered by applying the function @code{\makeClusters} to a sequence +of chords, e.g., + +@lilypond[quote,relative=2,verbatim] +\makeClusters { 2 } +@end lilypond + +Ordinary notes and clusters can be put together in the same staff, +even simultaneously. In such a case no attempt is made to +automatically avoid collisions between ordinary notes and clusters. + + +@seealso +Music Glossary: +@rglos{cluster}. + +Snippets: +@rlsr{Simultaneous notes}. + +Internals Reference: +@rinternals{ClusterSpanner}, +@rinternals{ClusterSpannerBeacon}, +@rinternals{Cluster_spanner_engraver}. + + +@knownissues + +Clusters look good only if they span at least two chords; otherwise +they appear too narrow. + +Clusters do not have a stem and cannot indicate durations by +themselves, but the length of the printed cluster is determined by +the durations of the defining chords. Separate clusters need a +separating rest between them. + +Clusters do not produce MIDI output. + +@node Multiple voices +@subsection Multiple voices + +This section discusses simultaneous notes in multiple voices or +multiple staves. + +@menu +* Single-staff polyphony:: +* Voice styles:: +* Collision resolution:: +* Automatic part combining:: +* Writing music in parallel:: +@end menu + + +@node Single-staff polyphony +@unnumberedsubsubsec Single-staff polyphony + +@cindex single-staff polyphony +@cindex polyphony, single-staff +@cindex voice +@cindex lyrics assigned to one voice + +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceOne ... \voiceFour +@funindex Voice +@funindex \oneVoice +@funindex oneVoice + +@strong{@i{Explicitly instantiating voices}} + +The basic structure needed to achieve multiple independent +voices in a single staff is illustrated in the following example: + +@lilypond[quote,relative=3,verbatim] +\new Staff << + \new Voice = "first" + { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } + \new Voice= "second" + { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +@noindent +Here, voices are instantiated explicitly and are given names. The +@code{\voiceOne} ... @code{\voiceFour} commands set up the voices +so that first and third voices get stems up, second and fourth +voices get stems down, third and fourth voice note heads are +horizontally shifted, and rests in the respective voices are +automatically moved to avoid collisions. The @code{\oneVoice} +command returns all the voice settings to the neutral default +directions. + +@strong{@i{Temporary polyphonic passages}} + +A temporary polyphonic passage can be created with the following +construct: + +@example +<< @{ \voiceOne ... @} + \new Voice @{ \voiceTwo ... @} +>> \oneVoice +@end example + +@noindent +Here, the first expression within a temporary polyphonic passage is +placed into the @code{Voice} context which was in use immediately +before the polyphonic passage, and that same @code{Voice} context +continues after the temporary section. Other expressions within +the angle brackets are assigned to distinct temporary voices. +This allows lyrics to be assigned to one continuing voice before, +during and after a polyphonic section: + +@lilypond[quote, verbatim, relative=2] +<< + \new Voice = "melody" { + a4 + << + { + \voiceOne + g f + } + \new Voice { + \voiceTwo + d2 + } + >> + \oneVoice + e4 + } + \new Lyrics \lyricsto "melody" { + This is my song. + } +>> +@end lilypond + +@noindent +Here, the @code{\voiceOne} and @code{\voiceTwo} commands are +required to define the settings of each voice. + +@strong{@i{The double backslash construct}} + +The @code{<< @{...@} \\ @{...@} >>} construct, where the two (or +more) expressions are separated by double backslashes, behaves +differently to the similar construct without the double backslashes: +@emph{all} the expressions within this construct are assigned +to new @code{Voice} contexts. These new @code{Voice} contexts +are created implicitly and are given the fixed names @code{"1"}, +@code{"2"}, etc. + +The first example could be typeset as follows: + +@lilypond[quote,relative=3,verbatim] +<< + { r8 r16 g e8. f16 g8[ c,] f e16 d } + \\ + { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } +>> +@end lilypond + +This syntax can be used where it does not matter that temporary +voices are created and then discarded. These implicitly created +voices are given the settings equivalent to the effect of the +@code{\voiceOne} ... @code{\voiceFour} commands, in the order in +which they appear in the code. + +In the following example, the intermediate voice has stems up, +therefore we enter it in the third place, so it becomes voice +three, which has the stems up as desired. Spacer rests are +used to avoid printing doubled rests. + +@lilypond[quote,relative=3,verbatim] +<< + { r8 g g g g f16 ees f8 d } + \\ + { ees,8 r ees r d r d r } + \\ + { d'8 s c s bes s a s } +>> +@end lilypond + +In all but the simplest works it is advisable to create explicit +@code{Voice} contexts as explained in @rlearning{Contexts and engravers} and +@rlearning{Explicitly instantiating voices}. + +@strong{@i{Voice order}} + +When entering multiple voices in the input file, use the following +order: + +@example +Voice 1: highest +Voice 2: lowest +Voice 3: second highest +Voice 4: second lowest +Voice 5: third highest +Voice 6: third lowest +etc. +@end example + +Though this may seem counterintuitive, it simplifies the automatic +layout process. Note that the odd-numbered voices are given +upstems, and the even-numbered voices are given downstems: + +@lilypond[quote,verbatim] +\new Staff << + \time 2/4 + { f''2 } % 1: highest + \\ + { c'2 } % 2: lowest + \\ + { d''2 } % 3: second-highest + \\ + { e'2 } % 4: second-lowest + \\ + { b'2 } % 5: third-highest + \\ + { g'2 } % 6: third-lowest +>> +@end lilypond + +@strong{@i{Identical rhythms}} + +In the special case that we want to typeset parallel pieces of music +that have the same rhythm, we can combine them into a single +@code{Voice} context, thus forming chords. To achieve this, enclose +them in a simple simultaneous music construct within an explicit voice: + +@lilypond[quote,relative=2,verbatim] +\new Voice << + { e4 f8 d e16 f g8 d4 } + { c4 d8 b c16 d e8 b4 } +>> +@end lilypond + +This method leads to strange beamings and warnings if the pieces of +music do not have the same rhythm. + + +@predefined +@code{\voiceOne}, +@code{\voiceTwo}, +@code{\voiceThree}, +@code{\voiceFour}, +@code{\oneVoice}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{Voices contain music}, +@rlearning{Explicitly instantiating voices}. + +Notation Reference: +@ref{Percussion staves}, +@ref{Invisible rests}, +@ref{Stems}. + +Snippets: +@rlsr{Simultaneous notes}. + + +@node Voice styles +@unnumberedsubsubsec Voice styles + +@cindex voice styles +@cindex styles, voice +@cindex coloring voices +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Voices may be given distinct colors and shapes, allowing them to be +easily identified: + +@lilypond[quote,relative=2,verbatim] +<< + { \voiceOneStyle d4 c2 b4 } + \\ + { \voiceTwoStyle e,2 e } + \\ + { \voiceThreeStyle b2. c4 } + \\ + { \voiceFourStyle g'2 g } +>> +@end lilypond + +The @code{\voiceNeutralStyle} command is used to revert to the +standard presentation. + + +@predefined +@code{\voiceOneStyle}, +@code{\voiceTwoStyle}, +@code{\voiceThreeStyle}, +@code{\voiceFourStyle}, +@code{\voiceNeutralStyle}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{I'm hearing Voices}, +@rlearning{Other sources of information}. + +Snippets: +@rlsr{Simultaneous notes}. + + +@node Collision resolution +@unnumberedsubsubsec Collision resolution + +@cindex merging notes +@cindex note collisions +@cindex collisions +@cindex shift note +@cindex multiple voices +@cindex voices, multiple +@cindex polyphonic music +@cindex shifting voices +@cindex voices, multiple +@cindex shift rest, automatic +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn +@funindex \shiftOff +@funindex shiftOff +@funindex \mergeDifferentlyDottedOn +@funindex mergeDifferentlyDottedOn +@funindex \mergeDifferentlyDottedOff +@funindex mergeDifferentlyDottedOff +@funindex \mergeDifferentlyHeadedOn +@funindex mergeDifferentlyHeadedOn +@funindex \mergeDifferentlyHeadedOff +@funindex mergeDifferentlyHeadedOff + +The note heads of notes in different voices with the same pitch, +same note head and opposite stem direction are automatically +merged, but notes with different note heads or the same stem +direction are not. Rests opposite a stem in a different voice +are shifted vertically. The following example shows three +different circumstances, on beats 1 and 3 in bar 1 and beat 1 +in bar 2, where the automatic merging fails. + +@lilypond[quote,verbatim,relative=2] +<< + { + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Notes with different note heads may be merged, with the +exception of half-note heads and quarter-note heads, as shown +below. Here the note heads on beat 1 of bar 1 are now merged: + +@lilypond[quote,verbatim,relative=2] +<< + { + \mergeDifferentlyHeadedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +Note heads with different dots as shown in beat 3 of bar 1 may be +also be merged: + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + + +The half note and eighth note at the start of the second measure +are incorrectly merged because the automatic merge cannot +successfully complete the merge when three or more notes line up in +the same note column, and in this case the merged note head is +incorrect. To allow the merge to select the correct note head +a @code{\shift} must be applied to the note that should not be +merged. Here, @code{\shiftOn} is applied to move the top +@notation{g} out of the column, and @code{\mergeDifferentlyHeadedOn} +then works properly. + +@lilypond[quote,relative=2,verbatim] +<< + { + \mergeDifferentlyHeadedOn + \mergeDifferentlyDottedOn + c8 d e d c d c4 + \shiftOn + g'2 fis + } \\ { + c2 c8. b16 c4 + e,2 r + } \\ { + \oneVoice + s1 + e8 a b c d2 + } +>> +@end lilypond + +The @code{\shiftOn} command allows (but does not force) the notes +in a voice to be shifted. When @code{\shiftOn} is applied to a +voice, a note or chord in that voice is shifted only if its stem +would otherwise collide with a stem from another voice, and only +if the colliding stems point in the same direction. The +@code{\shiftOff} command prevents this type of shifting from +occurring. + +By default, the outer voices (normally voices one and two) have +@code{\shiftOff} specified, while the inner voices (three and +above) have @code{\shiftOn} specified. When a shift is applied, +voices with upstems (odd-numbered voices) are shifted to the +right, and voices with downstems (even-numbered voices) are +shifted to the left. + +Here is an example to help you visualize how an abbreviated +polyphonic expression would be expanded internally. + +@warning{Note that with three or more voices, the vertical order +of voices in your input file should not be the same as the +vertical order of voices on the staff!} + +@lilypond[quote,verbatim] +\new Staff \relative c'' { + %% abbreviated entry + << + { f2 } % 1: highest + \\ + { g,2 } % 2: lowest + \\ + { d'2 } % 3: upper middle + \\ + { b2 } % 4: lower middle + >> + %% internal expansion of the above + << + \new Voice = "1" { \voiceOne \shiftOff f'2 } + \new Voice = "2" { \voiceTwo \shiftOff g,2 } + \new Voice = "3" { \voiceThree \shiftOn d'2 } % shifts right + \new Voice = "4" { \voiceFour \shiftOn b2 } % shifts left + >> +} +@end lilypond + +Two additional commands, @code{\shiftOnn} and @code{\shiftOnnn} +provide further shift levels which may be specified temporarily to +resolve collisions in complex situations -- see +@rlearning{Real music example}. + +Notes are only merged if they have opposing stem directions (as +they have, for example, in voices one and two by default or when +the stems are explicitly set in opposite directions). + + +@predefined +@code{\mergeDifferentlyDottedOn}, +@code{\mergeDifferentlyDottedOff}, +@code{\mergeDifferentlyHeadedOn}, +@code{\mergeDifferentlyHeadedOff}. + +@code{\shiftOn}, +@code{\shiftOnn}, +@code{\shiftOnnn}, +@code{\shiftOff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{additional-voices-to-avoid-collisions.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{forcing-horizontal-shift-of-notes.ly} + + +@seealso +Music Glossary: +@rglos{polyphony}. + +Learning Manual: +@rlearning{Multiple notes at once}, +@rlearning{Voices contain music}, +@rlearning{Real music example}. + +Snippets: +@rlsr{Simultaneous notes}. + +Internals Reference: +@rinternals{NoteColumn}, +@rinternals{NoteCollision}, +@rinternals{RestCollision}. + + +@ignore +@knownissues +@c TODO investigate! Sometimes it works, sometimes not. --FV +The requirements for successfully merging different note heads that +are at the same time differently dotted are not clear. +@end ignore + +@node Automatic part combining +@unnumberedsubsubsec Automatic part combining + +@cindex automatic part combining +@cindex part combiner +@cindex combining parts +@cindex a due part +@cindex solo part +@funindex \partcombine +@funindex partcombine + +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 automatic part combining is: + +@example +\partcombine @var{musicexpr1} @var{musicexpr2} +@end example + +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 | +} + +instrumentTwo = \relative g' { + R1 | + g4 a b c | + d4 c b a | + g4 f( e) d | + e1 | +} + +<< + \new Staff \instrumentOne + \new Staff \instrumentTwo + \new Staff \partcombine \instrumentOne \instrumentTwo +>> +@end lilypond + +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 +\partcombine + \relative @dots{} @var{musicexpr1} + \relative @dots{} @var{musicexpr2} +@end example + +@noindent +A @code{\relative} section that encloses a @code{\partcombine} has no +effect on the pitches of @code{@var{musicexpr1}} or +@code{@var{musicexpr2}}. + +@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} and @code{\partcombineApartOnce} keep the +notes as two separate voices, even if they can be combined into a chord +or unison. + +@item +@code{\partcombineChords} and @code{\partcombineChordsOnce} combine the +notes into a chord. + +@item +@code{\partcombineUnisono} and @code{\partcombineUnisonoOnce} combine +both voices as @qq{unison}. + +@item +@code{\partcombineSoloI} and @code{\partcombineSoloIOnce} print only +voice one, and mark it as a @qq{Solo}. + +@item +@code{\partcombineSoloII} or @code{\partcombineSoloIIOnce} print only +voice two and mark it as a @qq{Solo}. + +@item +@code{\partcombineAutomatic} and @code{\partcombineAutomaticOnce} end +the functions of the commands above, and revert back to the standard +@code{\partcombine} functionality. +@end itemize + +@lilypond[quote,verbatim] +instrumentOne = \relative c' { + \partcombineApart c2^"apart" e | + \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 | + e2 e | + a,2 c | + c2 c' | + c2 c | + c2 c | +} + +<< + \new Staff { \instrumentOne } + \new Staff { \instrumentTwo } + \new Staff { \partcombine \instrumentOne \instrumentTwo } +>> +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{combining-two-parts-on-the-same-staff.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-partcombine-texts.ly} + + +@seealso +Music Glossary: +@rglos{a due}, +@rglos{part}. + +Notation Reference: +@ref{Writing parts}. + +Snippets: +@rlsr{Simultaneous notes}. + +Internals Reference: +@rinternals{PartCombineMusic}, +@rinternals{Voice}. + +@knownissues + +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 +@unnumberedsubsubsec Writing music in parallel + +@cindex writing music in parallel +@cindex interleaved music +@cindex parallel music +@funindex \parallelMusic +@funindex parallelMusic + +Music for multiple parts can be interleaved in input code. The +function @code{\parallelMusic} accepts a list with the names of a +number of variables to be created, and a musical expression. The +content of alternate measures from the expression become the value +of the respective variables, so you can use them afterwards to +print the music. + +@warning{Bar checks @code{|} must be used, and the measures must +be of the same length.} + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | + r16 e'8.~ e'4 r16 e'8.~ e'4 | + c'2 c'2 | + + % Bar 2 + r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | + r16 d'8.~ d'4 r16 d'8.~ d'4 | + c'2 c'2 | + +} +\new StaffGroup << + \new Staff << \voiceA \\ \voiceB >> + \new Staff { \clef bass \voiceC } +>> +@end lilypond + +Relative mode may be used. Note that the @code{\relative} command +is not used inside @code{\parallelMusic} itself. The notes are +relative to the preceding note in the voice, not to the previous +note in the input -- in other words, relative notes for +@code{voiceA} ignore the notes in @code{voiceB}. + +@lilypond[quote,verbatim] +\parallelMusic #'(voiceA voiceB voiceC) { + % Bar 1 + r8 g16 c e g, c e r8 g,16 c e g, c e | + r16 e8.~ e4 r16 e8.~ e4 | + c2 c | + + % Bar 2 + r8 a,16 d f a, d f r8 a,16 d f a, d f | + r16 d8.~ d4 r16 d8.~ d4 | + c2 c | + + } +\new StaffGroup << + \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> + \new Staff \relative c' { \clef bass \voiceC } +>> +@end lilypond + +This works quite well for piano music. This example maps four +consecutive measures to four variables: + +@lilypond[quote,verbatim] +global = { + \key g \major + \time 2/4 +} + +\parallelMusic #'(voiceA voiceB voiceC voiceD) { + % Bar 1 + a8 b c d | + d4 e | + c16 d e fis d e fis g | + a4 a | + + % Bar 2 + e8 fis g a | + fis4 g | + e16 fis g a fis g a b | + a4 a | + + % Bar 3 ... +} + +\score { + \new PianoStaff << + \new Staff { + \global + << + \relative c'' \voiceA + \\ + \relative c' \voiceB + >> + } + \new Staff { + \global \clef bass + << + \relative c \voiceC + \\ + \relative c \voiceD + >> + } + >> +} +@end lilypond + + +@seealso +Learning Manual: +@rlearning{Organizing pieces with variables}. + +Snippets: +@rlsr{Simultaneous notes}. diff --git a/Documentation/notation/spacing.itely b/Documentation/notation/spacing.itely new file mode 100644 index 0000000000..b07668b4f6 --- /dev/null +++ b/Documentation/notation/spacing.itely @@ -0,0 +1,3457 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@ignore +GDP TODO list + +Negative numbers are allowed: +> Are you sure? The following works well +> \paper{ +> first-page-number = -2 +> } +> and prints page number -1 on the second page, for example. + + +In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it +states: + +"@code{layout-set-staff-size} does not change the distance between +the +staff lines." + +Could we add a sentence: +"Use instead the pair fontSize = #@var{N} + \override StaffSymbol #'staff-space = #(magstep +@var{N}) +inside the Staff context to change the size of the font and the +distance between +staff lines accordingly." + +Actually I found, that the @internalsref{StaffSymbol} at line 481 +sends to an incomplete +documentation. The property staff-space is not explained here. I +thought Y-extent might be of +help, but it is in turn explained by x-space which again is +missing from the list. Who has the +knowledge to fix this? + + +Clarify +http://code.google.com/p/lilypond/issues/detail?id=68 + +@end ignore + + +@node Spacing issues +@chapter Spacing issues + +The global paper layout is determined by three factors: the page layout, the +line breaks, and the spacing. These all influence each other. The +choice of spacing determines how densely each system of music is set. +This influences where line breaks are chosen, and thus ultimately, how +many pages a piece of music takes. + +Globally speaking, this procedure happens in four steps: first, +flexible distances (@q{springs}) are chosen, based on durations. All +possible line breaking combinations are tried, and a @q{badness} score +is calculated for each. Then the height of each possible system is +estimated. Finally, a page breaking and line breaking combination is chosen +so that neither the horizontal nor the vertical spacing is too cramped +or stretched. + +Two types of blocks can contain layout settings: +@code{\paper @{@dots{}@}} and @code{\layout @{@dots{}@}}. The +@code{\paper} block contains page layout settings that are +expected to be the same for all scores in a book, such as the +paper height, or whether to print page numbers, etc. See +@ref{Page layout}. The @code{\layout} block contains score layout +settings, such as the number of systems to use, or the space +between staff-groups, etc. See @ref{Score layout}. + +@menu +* Page layout:: +* Score layout:: +* Breaks:: +* Vertical spacing:: +* Horizontal spacing:: +* Fitting music onto fewer pages:: +@end menu + + +@node Page layout +@section Page layout + +This section discusses page layout options for the @code{\paper} +block. + +@menu +* The \paper block:: +* Paper size and automatic scaling:: +* Fixed vertical spacing \paper variables:: +* Flexible vertical spacing \paper variables:: +* Horizontal spacing \paper variables:: +* Other \paper variables:: +@end menu + + +@node The \paper block +@subsection The @code{\paper} block + +The @code{\paper} block can appear within a @code{\book} block, +but not within a @code{\score} block. Settings in a @code{\paper} +block apply to the entire book, which may include multiple scores. +Settings that can appear in a @code{\paper} block include: + +@itemize + +@item +the @code{set-paper-size} scheme function, + +@item +@code{\paper} variables used for customizing page layout, and + +@item +markup definitions used for customizing the layout of headers, +footers, and titles. + +@end itemize + +The @code{set-paper-size} function is discussed in the next +section, @ref{Paper size and automatic scaling}. The +@code{\paper} variables that deal with page layout are discussed +in later sections. The markup definitions that deal with headers, +footers, and titles are discussed in +@ref{Custom headers footers and titles}. + +Most @code{\paper} variables will only work in a @code{\paper} +block. The few that will also work in a @code{\layout} block are +listed in @ref{The \layout block}. + +Except when specified otherwise, all @code{\paper} variables that +correspond to distances on the page are measured in millimeters, +unless a different unit is specified by the user. For example, +the following declaration sets @code{top-margin} to ten +millimeters: + +@example +\paper @{ + top-margin = 10 +@} +@end example + +To set it to @code{0.5} inches, use the @code{\in} unit suffix: + +@example +\paper @{ + top-margin = 0.5\in +@} +@end example + +The available unit suffixes are @code{\mm}, @code{\cm}, +@code{\in}, and @code{\pt}. These units are simple values for +converting from millimeters; they are defined in +@file{ly/paper-defaults-init.ly}. For the sake of clarity, when +using millimeters, the @code{\mm} is typically included in the +code, even though it is not technically necessary. + +It is also possible to define @code{\paper} values using Scheme. +The Scheme equivalent of the above example is: + +@example +\paper @{ + #(define top-margin (* 0.5 in)) +@} +@end example + +@seealso +Notation Reference: +@ref{Paper size and automatic scaling}, +@ref{Custom headers footers and titles}, +@ref{The \layout block}. + +Installed Files: +@file{ly/paper-defaults-init.ly}. + + +@node Paper size and automatic scaling +@subsection Paper size and automatic scaling + +@cindex paper size +@cindex page size + +@funindex \paper + +@menu +* Setting paper size:: +* Automatic scaling to paper size:: +@end menu + + +@node Setting paper size +@unnumberedsubsubsec Setting paper size + +Two functions are available for changing the paper size: +@code{set-default-paper-size} and @code{set-paper-size}. +@code{set-default-paper-size} must be placed in the toplevel +scope, and @code{set-paper-size} must be placed in a @code{\paper} +block: + +@example +#(set-default-paper-size "a4") +@end example + +@example +\paper @{ + #(set-paper-size "a4") +@} +@end example + +@noindent +In the toplevel scope, the @code{set-default-paper-size} function +can safely be called anywhere before the first @code{\paper} +block. Within a @code{\paper} block, the safest place to call +@code{set-paper-size} is at the top, above the list of variable +declarations. The reasons for this are discussed in +@ref{Automatic scaling to paper size}. + +@code{set-default-paper-size} sets the size of all pages, whereas +@code{set-paper-size} only sets the size of the pages that the +@code{\paper} block applies to. For example, if the @code{\paper} +block is at the top of the file, then it will apply the paper size +to all pages. If the @code{\paper} block is inside a +@code{\book}, then the paper size will only apply to that book. + +Common paper sizes are available, including @code{a4}, +@code{letter}, @code{legal}, and @code{11x17} (also known as +tabloid). Many more paper sizes are supported by default. For +details, see @file{scm/paper.scm}, and search for the +definition of @code{paper-alist}. + +@c TODO add a new appendix for paper sizes (auto-generated) -pm + +@warning{The default paper size is @code{a4}.} + +Extra sizes may be added by editing the definition of +@code{paper-alist} in the initialization file +@file{scm/paper.scm}, however they will be overridden on a +subsequent install. + +@cindex orientation +@cindex landscape + +If the symbol @code{'landscape} is supplied as an argument to +@code{set-default-paper-size}, pages will be rotated by 90 +degrees, and wider line widths will be set accordingly. + +@example +#(set-default-paper-size "a6" 'landscape) +@end example + +@seealso +Notation Reference: +@ref{Automatic scaling to paper size}. + +Installed Files: +@file{scm/paper.scm}. + + +@node Automatic scaling to paper size +@unnumberedsubsubsec Automatic scaling to paper size + +If the paper size is changed with one of the scheme functions +(@code{set-default-paper-size} or @code{set-paper-size}), the +values of several @code{\paper} variables are automatically scaled +to the new size. To bypass the automatic scaling for a particular +variable, set the variable after setting the paper size. Note +that the automatic scaling is not triggered by setting the +@code{paper-height} or @code{paper-width} variables, even though +@code{paper-width} can influence other values (this is separate +from scaling and is discussed below). The +@code{set-default-paper-size} and @code{set-paper-size} functions +are described in @ref{Setting paper size}. + +The vertical dimensions affected by automatic scaling are +@code{top-margin} and @code{bottom-margin} (see +@ref{Fixed vertical spacing \paper variables}). The horizontal +dimensions affected by automatic scaling are @code{left-margin}, +@code{right-margin}, @code{inner-margin}, @code{outer-margin}, +@code{binding-offset}, @code{indent}, and @code{short-indent} (see +@ref{Horizontal spacing \paper variables}). + +The default values for these dimensions are set in +@file{ly/paper-defaults-init.ly}, using internal variables named +@code{top-margin-default}, @code{bottom-margin-default}, etc. +These are the values that result at the default paper size +@code{a4}. For reference, with @code{a4} paper the +@code{paper-height} is @code{297\mm} and the @code{paper-width} is +@code{210\mm}. + +@seealso +Notation Reference: +@ref{Fixed vertical spacing \paper variables}, +@ref{Horizontal spacing \paper variables}. + +Installed Files: +@file{ly/paper-defaults-init.ly}, +@file{scm/paper.scm}. + + +@node Fixed vertical spacing \paper variables +@subsection Fixed vertical spacing @code{\paper} variables + +@warning{Some @code{@bs{}paper} dimensions are automatically +scaled to the paper size, which may lead to unexpected behavior. +See @ref{Automatic scaling to paper size}.} + +Default values (before scaling) are defined in +@file{ly/paper-defaults-init.ly}. + +@table @code +@item paper-height +@funindex paper-height + +The height of the page, unset by default. Note that the automatic +scaling of some vertical dimensions is not affected by this. + +@item top-margin +@funindex top-margin + +The margin between the top of the page and the top of the +printable area. If the paper size is modified, this dimension's +default value is scaled accordingly. + +@item bottom-margin +@funindex bottom-margin + +The margin between the bottom of the printable area and the bottom +of the page. If the paper size is modified, this dimension's +default value is scaled accordingly. + +@item ragged-bottom +@funindex ragged-bottom + +If set to true, systems will not spread vertically down the page. +This does not affect the last page. This should be set to true +for pieces that have only two or three systems per page, for +example orchestral scores. + +@item ragged-last-bottom +@funindex ragged-last-bottom + +If set to false, systems will spread vertically down the last +page. Pieces that amply fill two pages or more should have this +set to true. It also affects the last page of book parts, i.e. +parts of a book created with @code{\bookpart} blocks. + +@end table + +@seealso +Notation Reference: +@ref{Automatic scaling to paper size}. + +Installed Files: +@file{ly/paper-defaults-init.ly}. + +Snippets: +@rlsr{Spacing}. + +@knownissues + +The titles (from the @code{\header} block) are treated as a +system, so @code{ragged-bottom} and @code{ragged-last-bottom} will +add space between the titles and the first system of the score. + + +@node Flexible vertical spacing \paper variables +@subsection Flexible vertical spacing @code{\paper} variables + +In most cases, it is preferable for the vertical distances between +certain items (such as margins, titles, systems, and separate +scores) to be flexible, so that they stretch and compress nicely +according to each situation. A number of @code{\paper} variables +(listed below) are available to fine-tune the stretching behavior +of these dimensions. + +Note that the @code{\paper} variables discussed in this section do +not control the spacing of staves within individual systems. +Within-system spacing is controlled by grob properties, with +settings typically entered inside a @code{\score} or +@code{\layout} block, and not inside a @code{\paper} block. See +@ref{Flexible vertical spacing within systems}. + +@menu +* Structure of flexible vertical spacing alists:: +* List of flexible vertical spacing \paper variables:: +@end menu + + +@node Structure of flexible vertical spacing alists +@unnumberedsubsubsec Structure of flexible vertical spacing alists + +Each of the flexible vertical spacing @code{\paper} variables is +an alist (association list) containing four @emph{keys}: + +@itemize + +@item +@code{basic-distance} -- the vertical distance, measured in +staff-spaces, between the @emph{reference points} of the two +items, when no collisions would result, and no stretching or +compressing is in effect. The reference point of a (title or +top-level) markup is its highest point, and the reference point of +a system is the vertical center of the nearest @code{StaffSymbol} +-- even if a non-staff line (such as a @code{Lyrics} context) is +in the way. Values for @code{basic-distance} that are less than +either @code{padding} or @code{minimum-distance} are not +meaningful, since the resulting distance will never be less than +either @code{padding} or @code{minimum-distance}. + +@item +@code{minimum-distance} -- the smallest allowable vertical +distance, measured in staff-spaces, between the reference points +of the two items, when compressing is in effect. Values for +@code{minimum-distance} that are less than @code{padding} are not +meaningful, since the resulting distance will never be less than +@code{padding.} + +@c TODO: explain skylines somewhere and xref to it from here. + +@item +@code{padding} -- the minimum required amount of unobstructed +vertical whitespace between the bounding boxes (or skylines) of +the two items, measured in staff-spaces. + +@item +@code{stretchability} -- a unitless measure of the dimension's +relative propensity to stretch. If zero, the distance will not +stretch (unless collisions would result). When positive, the +significance of a particular dimension's @code{stretchability} +value lies only in its relation to the @code{stretchability} +values of the other dimensions. For example, if one dimension has +twice the @code{stretchability} of another, it will stretch twice +as easily. Values should be non-negative and finite. The value +@code{+inf.0} triggers a @code{programming_error} and is ignored, +but @code{1.0e7} can be used for an almost infinitely stretchable +spring. If unset, the default value is set to +@code{basic-distance}. Note that the dimension's propensity to +@emph{compress} cannot be directly set by the user and is equal to +(@code{basic-distance}@tie{}@minus{}@tie{}@code{minimum-distance}). + +@end itemize + +If a page has a ragged bottom, the resulting distance is the +largest of: + +@itemize + +@item +@code{basic-distance}, + +@item +@code{minimum-distance}, and + +@item +@code{padding} plus the smallest distance necessary to eliminate +collisions. + +@end itemize + +Specific methods for modifying alists are discussed in +@ref{Modifying alists}. The following example demonstrates the +two ways these alists can be modified. The first declaration +updates one key-value individually, and the second completely +redefines the variable: + +@example +\paper @{ + system-system-spacing #'basic-distance = #8 + score-system-spacing = + #'((basic-distance . 12) + (minimum-distance . 6) + (padding . 1) + (stretchability . 12)) +@} +@end example + + +@node List of flexible vertical spacing \paper variables +@unnumberedsubsubsec List of flexible vertical spacing @code{\paper} variables + +The names of these variables follow the format +@code{@var{upper}-@var{lower}-spacing}, where @code{@var{upper}} +and @code{@var{lower}} are the items to be spaced. Each distance +is measured between the reference points of the two items (see the +description of the alist structure above). Note that in these +variable names, the term @q{@code{markup}} refers to both +@emph{title markups} (@code{bookTitleMarkup} or +@code{scoreTitleMarkup}) and @emph{top-level markups} (see +@ref{File structure}). All distances are measured in +staff-spaces. + +Default settings are defined in @file{ly/paper-defaults-init.ly}. + +@c TODO: Where do headers/footers fit in? -mp + +@table @code +@item markup-system-spacing +@funindex markup-system-spacing + +the distance between a (title or top-level) markup and the system +that follows it. + +@item score-markup-spacing +@funindex score-markup-spacing + +the distance between the last system of a score and the (title or +top-level) markup that follows it. + +@item score-system-spacing +@funindex score-system-spacing + +the distance between the last system of a score and the first +system of the score that follows it, when no (title or top-level) +markup exists between them. + +@item system-system-spacing +@funindex system-system-spacing + +the distance between two systems in the same score. + +@item markup-markup-spacing +@funindex markup-markup-spacing + +the distance between two (title or top-level) markups. + +@item last-bottom-spacing +@funindex last-bottom-spacing + +the distance from the last system or top-level markup on a page to +the bottom of the printable area (i.e. the top of the bottom +margin). + +@item top-system-spacing +@funindex top-system-spacing + +the distance from the top of the printable area (i.e. the bottom +of the top margin) to the first system on a page, when there is no +(title or top-level) markup between the two. + +@item top-markup-spacing +@funindex top-markup-spacing + +the distance from the top of the printable area (i.e. the bottom +of the top margin) to the first (title or top-level) markup on a +page, when there is no system between the two. +@end table + +@seealso +Notation Reference: +@ref{Flexible vertical spacing within systems}. + +Installed Files: +@file{ly/paper-defaults-init.ly}. + +Snippets: +@rlsr{Spacing}. + + +@node Horizontal spacing \paper variables +@subsection Horizontal spacing @code{\paper} variables + +@warning{Some @code{@bs{}paper} dimensions are automatically +scaled to the paper size, which may lead to unexpected behavior. +See @ref{Automatic scaling to paper size}.} + +@menu +* \paper variables for widths and margins:: +* \paper variables for two-sided mode:: +* \paper variables for shifts and indents:: +@end menu + + +@node \paper variables for widths and margins +@unnumberedsubsubsec @code{\paper} variables for widths and margins + +Default values (before scaling) that are not listed here are +defined in @file{ly/paper-defaults-init.ly}. + +@table @code + +@item paper-width +@funindex paper-width + +The width of the page, unset by default. While @code{paper-width} +has no effect on the automatic scaling of some horizontal +dimensions, it does influence the @code{line-width} variable. If +both @code{paper-width} and @code{line-width} are set, then +@code{left-margin} and @code{right-margin} will also be updated. +Also see @code{check-consistency}. + +@item line-width +@funindex line-width + +The horizontal extent of the staff lines in unindented, non-ragged +systems, equal to +@code{(paper-width@tie{}@minus{}@tie{}left-margin@tie{}@minus{}@tie{}right-margin)} +when unset. If @code{line-width} is set, and both +@code{left-margin} and @code{right-margin} are unset, then the +margins will be updated to center the systems on the page +automatically. Also see @code{check-consistency}. This variable +can also be set in a @code{\layout} block. + +@item left-margin +@funindex left-margin + +The margin between the left edge of the page and the start of the +staff lines in unindented systems. If the paper size is modified, +this dimension's default value is scaled accordingly. If +@code{left-margin} is unset, and both @code{line-width} and +@code{right-margin} are set, then @code{left-margin} is set to +@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)}. +If only @code{line-width} is set, then both margins are set to +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}, +and the systems are consequently centered on the page. Also see +@code{check-consistency}. + +@item right-margin +@funindex right-margin + +The margin between the right edge of the page and the end of the +staff lines in non-ragged systems. If the paper size is modified, +this dimension's default value is scaled accordingly. If +@code{right-margin} is unset, and both @code{line-width} and +@code{left-margin} are set, then @code{right-margin} is set to +@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)}. +If only @code{line-width} is set, then both margins are set to +@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}, +and the systems are consequently centered on the page. Also see +@code{check-consistency}. + +@item check-consistency +@funindex check-consistency + +If set to true, print a warning if @code{left-margin}, +@code{line-width}, and @code{right-margin} do not exactly add up +to @code{paper-width}, and replace each of these (except +@code{paper-width}) with its default value (scaled to the paper +size if necessary). If set to false, ignore any inconsistencies +and allow systems to run off the edge of the page. + +@item ragged-right +@funindex ragged-right + +If set to true, systems will not fill the line width. Instead, +systems end at their natural horizontal length. Default: +@code{#t} for scores with only one system, and @code{#f} for +scores with two or more systems. This variable can also be set in +a @code{\layout} block. + +@item ragged-last +@funindex ragged-last + +If set to true, the last system in the score will not fill the +line width. Instead the last system ends at its natural +horizontal length. Default: @code{#f}. This variable can also be +set in a @code{\layout} block. + +@end table + +@seealso +Notation Reference: +@ref{Automatic scaling to paper size}. + +Installed Files: +@file{ly/paper-defaults-init.ly}. + + +@node \paper variables for two-sided mode +@unnumberedsubsubsec @code{\paper} variables for two-sided mode + +Default values (before scaling) are defined in +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item two-sided +@funindex two-sided + +@cindex gutter +@cindex binding gutter + +If set to true, use @code{inner-margin}, @code{outer-margin} and +@code{binding-offset} to determine margins depending on whether +the page number is odd or even. This overrides @code{left-margin} +and @code{right-margin}. + +@item inner-margin +@funindex inner-margin + +The margin all pages have at the inner side if they are part of a +book. If the paper size is modified, this dimension's default +value is scaled accordingly. Works only with @code{two-sided} set +to true. + +@item outer-margin +@funindex outer-margin + +The margin all pages have at the outer side if they are part of a +book. If the paper size is modified, this dimension's default +value is scaled accordingly. Works only with @code{two-sided} set +to true. + +@item binding-offset +@funindex binding-offset + +The amount @code{inner-margin} is increased to make sure nothing +will be hidden by the binding. If the paper size is modified, +this dimension's default value is scaled accordingly. Works only +with @code{two-sided} set to true. + +@end table + +@seealso +Notation Reference: +@ref{Automatic scaling to paper size}. + +Installed Files: +@file{ly/paper-defaults-init.ly}. + + +@node \paper variables for shifts and indents +@unnumberedsubsubsec @code{\paper} variables for shifts and indents + +Default values (before scaling) that are not listed here are +defined in @file{ly/paper-defaults-init.ly}. + +@table @code + +@item horizontal-shift +@funindex horizontal-shift + +@c This default value is buried in the middle of page.scm. -mp + +The amount that all systems (including titles and system +separators) are shifted to the right. Default: @code{0.0\mm}. + +@item indent +@funindex indent + +The level of indentation for the first system in a score. If the +paper size is modified, this dimension's default value is scaled +accordingly. This variable can also be set in a @code{\layout} +block. + +@item short-indent +@funindex short-indent + +The level of indentation for all systems in a score besides the +first system. If the paper size is modified, this dimension's +default value is scaled accordingly. This variable can also be +set in a @code{\layout} block. + +@end table + +@seealso +Notation Reference: +@ref{Automatic scaling to paper size}. + +Installed Files: +@file{ly/paper-defaults-init.ly}. + +Snippets: +@rlsr{Spacing}. + + +@node Other \paper variables +@subsection Other @code{\paper} variables + +@menu +* \paper variables for line breaking:: +* \paper variables for page breaking:: +* \paper variables for page numbering:: +* Miscellaneous \paper variables:: +@end menu + + +@node \paper variables for line breaking +@unnumberedsubsubsec @code{\paper} variables for line breaking + +@c TODO: Mention that ly:optimal-breaking is on by default? -mp + +@table @code + +@item max-systems-per-page +@funindex max-systems-per-page + +The maximum number of systems that will be placed on a page. This +is currently supported only by the @code{ly:optimal-breaking} algorithm. +Default: unset. + +@item min-systems-per-page +@funindex min-systems-per-page + +The minimum number of systems that will be placed on a page. This +may cause pages to be overfilled if it is made too large. This is +currently supported only by the @code{ly:optimal-breaking} algorithm. +Default: unset. + +@item systems-per-page +@funindex systems-per-page + +The number of systems that should be placed on each page. +This is currently supported only by the @code{ly:optimal-breaking} algorithm. +Default: unset. + +@item system-count +@funindex system-count + +The number of systems to be used for a score. Default: unset. +This variable can also be set in a @code{\layout} block. + +@end table + +@seealso +Notation Reference: +@ref{Line breaking}. + + +@node \paper variables for page breaking +@unnumberedsubsubsec @code{\paper} variables for page breaking + +Default values not listed here are defined in +@file{ly/paper-defaults-init.ly} + +@table @code + +@item blank-after-score-page-force +@funindex blank-after-score-page-force + +The penalty for having a blank page after the end of one score and +before the next. By default, this is smaller than +@code{blank-page-force}, so that we prefer blank pages after +scores to blank pages within a score. + +@item blank-last-page-force +@funindex blank-last-page-force + +The penalty for ending the score on an odd-numbered page. + +@item blank-page-force +@funindex blank-page-force + +The penalty for having a blank page in the middle of a +score. This is not used by @code{ly:optimal-breaking} since it will +never consider blank pages in the middle of a score. + +@item page-breaking +@funindex page-breaking + +The page-breaking algorithm to use. Choices are +@code{ly:minimal-breaking}, @code{ly:page-turn-breaking}, and +@code{ly:optimal-breaking}. + +@item page-breaking-system-system-spacing +@funindex page-breaking-system-system-spacing + +Tricks the page breaker into thinking that +@code{system-system-spacing} is set to something different than +it really is. For example, if +@code{page-breaking-system-system-spacing #'padding} is set to something +substantially larger than @code{system-system-spacing #'padding}, then the +page-breaker will put fewer systems on each page. Default: unset. + +@item page-count +@funindex page-count + +The number of pages to be used for a score, unset by default. + +@end table + +@seealso +Notation Reference: +@ref{Page breaking}, +@ref{Optimal page breaking}, +@ref{Optimal page turning}, +@ref{Minimal page breaking}. + +Installed Files: +@file{ly/paper-defaults-init.ly}. + + +@node \paper variables for page numbering +@unnumberedsubsubsec @code{\paper} variables for page numbering + +Default values not listed here are defined in +@file{ly/paper-defaults-init.ly} + +@table @code + +@cindex page numbers, auto-numbering +@item auto-first-page-number +@funindex auto-first-page-number + +The page breaking algorithm is affected by the first page number +being odd or even. If set to true, the page breaking algorithm +will decide whether to start with an odd or even number. This +will result in the first page number remaining as is or being +increased by one. Default: @code{#f}. + +@cindex page numbers, specify the first +@item first-page-number +@funindex first-page-number + +The value of the page number on the first page. + +@item print-first-page-number +@funindex print-first-page-number + +If set to true, a page number is printed on the first page. + +@cindex page numbers, suppress +@item print-page-number +@funindex print-page-number + +If set to false, page numbers are not printed. + +@end table + +@seealso +Installed Files: +@file{ly/paper-defaults-init.ly}. + +@knownissues +Odd page numbers are always on the right. If you want the +music to start on page 1 there must be a blank page on the back +of the cover page so that page 1 is on the right hand side. + + +@node Miscellaneous \paper variables +@unnumberedsubsubsec Miscellaneous @code{\paper} variables + +@table @code + +@item page-spacing-weight +@funindex page-spacing-weight + +The relative importance of page (vertical) spacing and line +(horizontal) spacing. High values will make page spacing more +important. Default: @code{#10}. + +@item print-all-headers +@funindex print-all-headers + +If set to true, this will print all headers for each @code{\score} +in the output. Normally only the @code{piece} and @code{opus} +header variables are printed. Default: @code{#f}. + +@item system-separator-markup +@funindex system-separator-markup + +A markup object that is inserted between systems, often used for +orchestral scores. Default: unset. The @code{\slashSeparator} +markup, defined in @file{ly/titling-init.ly}, is provided as a +sensible default, for example: + +@lilypond[quote,verbatim,noragged-right,line-width=30\mm] +#(set-default-paper-size "a8") + +\book { + \paper { + system-separator-markup = \slashSeparator + } + \header { + tagline = ##f + } + \score { + \relative c'' { c1 \break c1 \break c1 } + } +} +@end lilypond + +@end table + + +@seealso +Installed Files: +@file{ly/titling-init.ly}. + +Snippets: +@rlsr{Spacing}. + + +@knownissues + +The default page header puts the page number and the @code{instrument} +field from the @code{\header} block on a line. + + +@node Score layout +@section Score layout + +This section discusses score layout options for the @code{\layout} +block. + +@menu +* The \layout block:: +* Setting the staff size:: +@end menu + + +@node The \layout block +@subsection The @code{\layout} block + +@funindex \layout + +While the @code{\paper} block contains settings that relate to the +page formatting of the whole document, the @code{\layout} block +contains settings for score-specific layout. To set score layout +options globally, enter them in a toplevel @code{\layout} block. +To set layout options for an individual score, enter them in a +@code{\layout} block inside the @code{\score} block, after the +music. Settings that can appear in a @code{\layout} block +include: + +@itemize +@item the @code{layout-set-staff-size} scheme function, +@item context modifications in @code{\context} blocks, and +@item @code{\paper} variables that affect score layout. +@end itemize + +The @code{layout-set-staff-size} function is discussed in the next +section, @ref{Setting the staff size}. Context modifications are +discussed in a separate chapter; see +@ref{Modifying context plug-ins} and +@ref{Changing context default settings}. The @code{\paper} +variables that can appear in a @code{\layout} block are: + +@itemize + +@item +@code{line-width}, @code{ragged-right} and @code{ragged-last} +(see @ref{\paper variables for widths and margins}) + +@item +@code{indent} and @code{short-indent} +(see @ref{\paper variables for shifts and indents}) + +@item +@code{system-count} +(see @ref{\paper variables for line breaking}) + +@end itemize + +Here is an example @code{\layout} block: + +@example +\layout @{ + indent = 2\cm + \context @{ + \StaffGroup + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8 + @} + \context @{ + \Voice + \override TextScript #'padding = #1 + \override Glissando #'thickness = #3 + @} +@} +@end example + + +@seealso +Notation Reference: +@ref{Changing context default settings}. + +Snippets: +@rlsr{Spacing}. + + +@node Setting the staff size +@subsection Setting the staff size + +@cindex font size, setting +@cindex staff size, setting +@funindex layout file + +The default @strong{staff size} is set to 20 points. +This may be changed in two ways: + +To set the staff size globally for all scores in a file (or +in a @code{book} block, to be precise), use @code{set-global-staff-size}. + +@example +#(set-global-staff-size 14) +@end example + +@noindent +This sets the global default size to 14pt staff height and scales all +fonts accordingly. + +To set the staff size individually for each score, use +@example +\score@{ + @dots{} + \layout @{ + #(layout-set-staff-size 15) + @} +@} +@end example + +The Feta font provides musical symbols at eight different +sizes. Each font is tuned for a different staff size: at a smaller size +the font becomes heavier, to match the relatively heavier staff lines. +The recommended font sizes are listed in the following table: + +@quotation +@multitable @columnfractions .15 .2 .22 .2 + +@item @b{font name} +@tab @b{staff height (pt)} +@tab @b{staff height (mm)} +@tab @b{use} + +@item feta11 +@tab 11.22 +@tab 3.9 +@tab pocket scores + +@item feta13 +@tab 12.60 +@tab 4.4 +@tab + +@item feta14 +@tab 14.14 +@tab 5.0 +@tab + +@item feta16 +@tab 15.87 +@tab 5.6 +@tab + +@item feta18 +@tab 17.82 +@tab 6.3 +@tab song books + +@item feta20 +@tab 20 +@tab 7.0 +@tab standard parts + +@item feta23 +@tab 22.45 +@tab 7.9 +@tab + +@item feta26 +@tab 25.2 +@tab 8.9 +@tab +@c modern rental material? + +@end multitable +@end quotation + +These fonts are available in any sizes. The context property +@code{fontSize} and the layout property @code{staff-space} (in +@rinternals{StaffSymbol}) can be used to tune the size for individual +staves. The sizes of individual staves are relative to the global size. + + +@seealso +Notation Reference: +@ref{Selecting notation font size}. + +Snippets: +@rlsr{Spacing}. + + +@knownissues + +@code{layout-set-staff-size} does not change the distance between the +staff lines. + + +@node Breaks +@section Breaks + +@menu +* Line breaking:: +* Page breaking:: +* Optimal page breaking:: +* Optimal page turning:: +* Minimal page breaking:: +* Explicit breaks:: +* Using an extra voice for breaks:: +@end menu + + +@node Line breaking +@subsection Line breaking + +@cindex line breaks +@cindex breaking lines + +Line breaks are normally determined automatically. They are chosen +so that lines look neither cramped nor loose, and consecutive +lines have similar density. + +To manually force a line break at a bar line, use the +@code{\break} command: + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c c | \break +c4 c c c | +@end lilypond + +By default, a @code{\break} in the middle of a measure is ignored, +and a warning is printed. To force a line break in the middle of +a measure, add an invisible bar line with @w{@samp{\bar ""}}: + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c +\bar "" \break +c | +c4 c c c | +@end lilypond + +A @code{\break} occurring at a bar line is also ignored if the +previous measure ends in the middle of a note, such as when a +tuplet begins and ends in different measures. To allow +@code{\break} commands to work in these situations, remove the +@code{Forbid_line_break_engraver} from the @code{Voice} context. +Note that manually forced line breaks have to be added in parallel +with the music: + +@lilypond[quote,ragged-right,verbatim] +\new Voice \with { + \remove Forbid_line_break_engraver +} \relative c'' { + << + { c2. \times 2/3 { c4 c c } c2. | } + { s1 | \break s1 | } + >> +} +@end lilypond + +Similarly, line breaks are normally forbidden when beams cross bar +lines. This behavior can be changed by setting +@code{\override Beam #'breakable = ##t}: + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Beam #'breakable = ##t +c2. c8[ c | \break +c8 c] c2. | +@end lilypond + +The @code{\noBreak} command forbids a line break at the bar line +where it is inserted. + +The most basic settings influencing line spacing are @code{indent} +and @code{line-width}. They are set in the @code{\layout} block. +They control the indentation of the first line of music, and the +lengths of the lines. + +If @code{ragged-right} is set to true in the @code{\layout} block, +then systems end at their natural horizontal length, instead of +being spread horizontally to fill the whole line. This is useful +for short fragments, and for checking how tight the natural +spacing is. + +@c TODO Check and add para on default for ragged-right + +The option @code{ragged-last} is similar to @code{ragged-right}, +but affects only the last line of the piece. + +@example +\layout @{ + indent = 0\mm + line-width = 150\mm + ragged-last = ##t +@} +@end example + + + +@cindex regular line breaks +@cindex four bar music. + +For line breaks at regular intervals use @code{\break} separated by +skips and repeated with @code{\repeat}. For example, this would +cause the following 28 measures (assuming 4/4 time) to be broken +every 4 measures, and only there: + +@example +<< + \repeat unfold 7 @{ + s1 \noBreak s1 \noBreak + s1 \noBreak s1 \break + @} + @{ @var{the actual music@dots{}} @} +>> +@end example + +@c TODO Check this +A linebreaking configuration can be saved as a @file{.ly} file +automatically. This allows vertical alignments to be stretched to +fit pages in a second formatting run. This is fairly new and +complicated. More details are available in +@rlsr{Spacing}. + + +@predefined +@funindex \break +@code{\break}, +@funindex \noBreak +@code{\noBreak}. +@endpredefined + + +@seealso +Notation Reference: +@ref{\paper variables for line breaking}. + +Snippets: +@rlsr{Spacing}. + +Internals Reference: +@rinternals{LineBreakEvent}. + + +@node Page breaking +@subsection Page breaking + +The default page breaking may be overridden by inserting +@code{\pageBreak} or @code{\noPageBreak} commands. These commands are +analogous to @code{\break} and @code{\noBreak}. They should be +inserted at a bar line. These commands force and forbid a page-break +from happening. Of course, the @code{\pageBreak} command also forces +a line break. + +The @code{\pageBreak} and @code{\noPageBreak} commands may also be +inserted at top-level, between scores and top-level markups. + +There are also analogous settings to @code{ragged-right} and +@code{ragged-last} which have the same effect on vertical spacing: +@code{ragged-bottom} and @code{ragged-last-bottom}. If set to +@code{##t} the systems on all pages or just the last page +respectively will not be justified vertically. See +@ref{Fixed vertical spacing \paper variables}. + +Page breaks are computed by the @code{page-breaking} function. LilyPond +provides three algorithms for computing page breaks, +@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} and +@code{ly:minimal-breaking}. The default is @code{ly:optimal-breaking}, +but the value can be changed in the @code{\paper} block: + +@example +\paper @{ + page-breaking = #ly:page-turn-breaking +@} +@end example + +@funindex \bookpart + +When a book has many scores and pages, the page breaking problem may be +difficult to solve, requiring large processing time and memory. To ease +the page breaking process, @code{\bookpart} blocks are used to divide +the book into several parts: the page breaking occurs separately on each +part. Different page breaking functions may also be used in different +book parts. + +@example +\bookpart @{ + \header @{ + subtitle = "Preface" + @} + \paper @{ + %% In a part consisting mostly of text, + %% ly:minimal-breaking may be preferred + page-breaking = #ly:minimal-breaking + @} + \markup @{ @dots{} @} + @dots{} +@} +\bookpart @{ + %% In this part, consisting of music, the default optimal + %% page breaking function is used. + \header @{ + subtitle = "First movement" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + +@predefined +@funindex \pageBreak +@code{\pageBreak}, +@funindex \noPageBreak +@code{\noPageBreak}. +@endpredefined + + +@seealso +Notation Reference: +@ref{\paper variables for page breaking}. + +Snippets: +@rlsr{Spacing}. + + +@node Optimal page breaking +@subsection Optimal page breaking + +@funindex ly:optimal-breaking + +The @code{ly:optimal-breaking} function is LilyPond's default method of +determining page breaks. It attempts to find a page breaking that minimizes +cramping and stretching, both horizontally and vertically. Unlike +@code{ly:page-turn-breaking}, it has no concept of page turns. + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Optimal page turning +@subsection Optimal page turning + +@funindex ly:page-turn-breaking + +Often it is necessary to find a page breaking configuration so that there is +a rest at the end of every second page. This way, the musician can turn the +page without having to miss notes. The @code{ly:page-turn-breaking} function +attempts to find a page breaking minimizing cramping and stretching, but with +the additional restriction that it is only allowed to introduce page turns +in specified places. + +There are two steps to using this page breaking function. First, you +must enable it in the @code{\paper} block, as explained in @ref{Page +breaking}. Then you must tell the function where you would like to allow +page breaks. + +There are two ways to achieve the second step. First, you can specify each +potential page turn manually, by inserting @code{\allowPageTurn} into your +input file at the appropriate places. + +If this is too tedious, you can add a @code{Page_turn_engraver} to a Staff or +Voice context. The @code{Page_turn_engraver} will scan the context for +sections without notes (note that it does not scan for rests; it scans for +the absence of notes. This is so that single-staff polyphony with rests in one +of the parts does not throw off the @code{Page_turn_engraver}). When it finds +a sufficiently long section without notes, the @code{Page_turn_engraver} will +insert an @code{\allowPageTurn} at the final bar line in that section, unless +there is a @q{special} bar line (such as a double bar), in which case the +@code{\allowPageTurn} will be inserted at the final @q{special} bar line in +the section. + +@funindex minimumPageTurnLength +The @code{Page_turn_engraver} reads the context property +@code{minimumPageTurnLength} to determine how long a note-free section must +be before a page turn is considered. The default value for +@code{minimumPageTurnLength} is @code{#(ly:make-moment 1 1)}. If you want +to disable page turns, you can set it to something very large. + +@example +\new Staff \with @{ \consists "Page_turn_engraver" @} +@{ + a4 b c d | + R1 | % a page turn will be allowed here + a4 b c d | + \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) + R1 | % a page turn will not be allowed here + a4 b r2 | + R1*2 | % a page turn will be allowed here + a1 +@} +@end example + +@funindex minimumRepeatLengthForPageTurn +The @code{Page_turn_engraver} detects volta repeats. It will only allow a page +turn during the repeat if there is enough time at the beginning and end of the +repeat to turn the page back. The @code{Page_turn_engraver} can also disable +page turns if the repeat is very short. If you set the context property +@code{minimumRepeatLengthForPageTurn} then the @code{Page_turn_engraver} will +only allow turns in repeats whose duration is longer than this value. + +The page turning commands, @code{\pageTurn}, @code{\noPageTurn} and +@code{\allowPageTurn}, may also be used at top-level, between scores and +top-level markups. + + +@predefined +@funindex \pageTurn +@code{\pageTurn}, +@funindex \noPageTurn +@code{\noPageTurn}, +@funindex \allowPageTurn +@code{\allowPageTurn}. +@endpredefined + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@knownissues + +There should only be one @code{Page_turn_engraver} in a score. If there is more +than one, they will interfere with each other. + + +@node Minimal page breaking +@subsection Minimal page breaking + +@funindex ly:minimal-breaking + +The @code{ly:minimal-breaking} function performs minimal computations to +calculate the page breaking: it fills a page with as many systems as +possible before moving to the next one. Thus, it may be preferred for +scores with many pages, where the other page breaking functions could be +too slow or memory demanding, or a lot of texts. It is enabled using: + +@example +\paper @{ + page-breaking = #ly:minimal-breaking +@} +@end example + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Explicit breaks +@subsection Explicit breaks + +Lily sometimes rejects explicit @code{\break} and @code{\pageBreak} +commands. There are two commands to override this behavior: + +@example +\override NonMusicalPaperColumn #'line-break-permission = ##f +\override NonMusicalPaperColumn #'page-break-permission = ##f +@end example + +When @code{line-break-permission} is overridden to false, Lily will insert +line breaks at explicit @code{\break} commands and nowhere else. When +@code{page-break-permission} is overridden to false, Lily will insert +page breaks at explicit @code{\pageBreak} commands and nowhere else. + +@lilypond[quote,verbatim] +\paper { + indent = #0 + ragged-right = ##t + ragged-bottom = ##t +} + +music = \relative c'' { c8 c c c } + +\score { + \new Staff { + \repeat unfold 2 { \music } \break + \repeat unfold 4 { \music } \break + \repeat unfold 6 { \music } \break + \repeat unfold 8 { \music } \pageBreak + \repeat unfold 8 { \music } \break + \repeat unfold 6 { \music } \break + \repeat unfold 4 { \music } \break + \repeat unfold 2 { \music } + } + \layout { + \context { + \Score + \override NonMusicalPaperColumn #'line-break-permission = ##f + \override NonMusicalPaperColumn #'page-break-permission = ##f + } + } +} +@end lilypond + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Using an extra voice for breaks +@subsection Using an extra voice for breaks + +Line- and page-breaking information usually appears within note entry directly. + +@example +music = \relative c'' @{ c4 c c c @} + +\score @{ + \new Staff @{ + \repeat unfold 2 @{ \music @} \break + \repeat unfold 3 @{ \music @} + @} +@} +@end example + +This makes @code{\break} and @code{\pageBreak} commands easy to enter but mixes +music entry with information that specifies how music should lay out +on the page. You can keep music entry and line- and page-breaking +information in two separate places by introducing an extra voice to +contain the breaks. This extra voice +contains only skips together with @code{\break}, @code{pageBreak} and other +breaking layout information. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + s1 * 2 \break + s1 * 3 \break + s1 * 6 \break + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + +This pattern becomes especially helpful when overriding +@code{line-break-system-details} and the other useful but long properties of +@code{NonMusicalPaperColumnGrob}, as explained in @ref{Vertical spacing}. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1 * 2 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 35)) + s1 * 3 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 70)) + s1 * 6 \break + + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 105)) + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Vertical spacing}. + +Snippets: +@rlsr{Spacing}. + + +@node Vertical spacing +@section Vertical spacing + +@cindex vertical spacing +@cindex spacing, vertical + +Vertical spacing is controlled by three things: the amount of +space available (i.e., paper size and margins), the amount of +space between systems, and the amount of space between +staves inside a system. + +@menu +* Flexible vertical spacing within systems:: +* Explicit staff and system positioning:: +* Vertical collision avoidance:: +@end menu + + +@node Flexible vertical spacing within systems +@subsection Flexible vertical spacing within systems + +@cindex distance between staves +@cindex staff distance +@cindex space between staves +@cindex space inside systems + +Three separate mechanisms control the flexible vertical spacing +within systems, one for each of the following categories: + +@itemize + +@item +@emph{ungrouped staves}, + +@item +@emph{grouped staves} (staves within a staff-group such as +@code{ChoirStaff}, etc.), and + +@item +@emph{non-staff lines} (such as @code{Lyrics}, @code{ChordNames}, +etc.). + +@end itemize + +@c TODO: Clarify this. This almost implies that non-staff lines +@c have NO effect on the spacing between staves. -mp + +The height of each system is determined in two steps. First, all +of the staves are spaced according to the amount of space +available. Then, the non-staff lines are distributed between the +staves. + +Note that the spacing mechanisms discussed in this section only +control the vertical spacing of staves and non-staff lines within +individual systems. The vertical spacing between separate +systems, scores, markups, and margins is controlled by +@code{\paper} variables, which are discussed in +@ref{Flexible vertical spacing \paper variables}. + +@menu +* Within-system spacing properties:: +* Spacing of ungrouped staves:: +* Spacing of grouped staves:: +* Spacing of non-staff lines:: +@end menu + + +@node Within-system spacing properties +@unnumberedsubsubsec Within-system spacing properties + +@funindex staff-affinity +@funindex staffgroup-staff-spacing +@funindex staff-staff-spacing +@funindex nonstaff-unrelatedstaff-spacing +@funindex nonstaff-relatedstaff-spacing +@funindex nonstaff-nonstaff-spacing +@funindex default-staff-staff-spacing +@funindex minimum-Y-extent +@funindex extra-offset +@funindex self-alignment-X +@funindex X-offset +@funindex VerticalAxisGroup + +The within-system vertical spacing mechanisms are controlled by +two sets of grob properties. The first set is associated with the +@code{VerticalAxisGroup} grob, which is created by all staves and +non-staff lines. The second set is associated with the +@code{StaffGrouper} grob, which can be created by staff-groups, +but only if explicitly called. These properties are described +individually at the end of this section. + +The names of these properties (except for @code{staff-affinity}) +follow the format @code{@var{item1}-@var{item2}-spacing}, where +@code{@var{item1}} and @code{@var{item2}} are the items to be +spaced. Note that @code{@var{item2}} is not necessarily below +@code{@var{item1}}; for example, +@code{nonstaff-relatedstaff-spacing} will measure upwards from the +non-staff line if @code{staff-affinity} is @code{#UP}. + +Each distance is measured between the @emph{reference points} of +the two items. The reference point for a staff is the vertical +center of its @code{StaffSymbol} (i.e. the middle line if +@code{line-count} is odd; the middle space if @code{line-count} is +even). The reference points for individual non-staff lines are +given in the following table: + +@multitable {Non-staff line} {Reference point} +@headitem Non-staff line @tab Reference point +@item @code{ChordNames} @tab baseline +@item @code{NoteNames} @tab baseline +@item @code{Lyrics} @tab baseline +@item @code{Dynamics} @tab vertical center +@item @code{FiguredBass} @tab highest point +@item @code{FretBoards} @tab top line +@end multitable + +In the following image, horizontal lines indicate the positions +of these reference points: + +@lilypond[quote,noragged-right,line-width=110\mm] +#(define zero-space '((padding . -inf.0) (basic-distance . 0))) + +alignToZero = \with { + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space +} +lowerCaseChords = \with { + chordNameLowercaseMinor = ##t +} +staffAffinityDown = \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN +} +labelContext = +#(define-music-function + (parser location context) + (string?) + #{ s1*0^\markup { \typewriter $context } #}) + +\layout { + \context { \Dynamics \alignToZero } + \context { \FiguredBass \alignToZero } + \context { \Lyrics \alignToZero } + \context { \NoteNames \alignToZero \staffAffinityDown } + \context { \ChordNames \alignToZero + \staffAffinityDown + \lowerCaseChords } + \context { \FretBoards \alignToZero \staffAffinityDown } + \context { \Score + \override BarLine #'stencil = ##f + \override DynamicText #'self-alignment-X = #-1 + \override FretBoard #'X-offset = #1.75 + \override InstrumentName #'minimum-Y-extent = #'(-2 . 2) + \override InstrumentName #'extra-offset = #'(0 . -0.5) + \override TextScript #'minimum-Y-extent = #'(-2 . 3) + \override TimeSignature #'stencil = ##f + } +} + +%% These contexts have reference points at the baseline: +%% ChordNames, NoteNames, and Lyrics +<< + \new ChordNames { \chords { g1:m } } + \new NoteNames { s1 | g1 | } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"baseline " + \textLengthOn + \labelContext "ChordNames " s1 | + \labelContext "NoteNames " s1 | + \labelContext "Lyrics" s1 | + } + \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } } +>> + +%% The reference point for Dynamics is its vertical center +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"vertical center " + \labelContext "Dynamics" s1*3 + } + \new Dynamics { s1\mp s\fp } +>> + +%% The reference point for FiguredBass is its highest point +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"highest point " + \labelContext "FiguredBass" s1 + } + \new FiguredBass { \figuremode { <6 5>1 } } +>> + +%% The reference point for FretBoards is the top line +\include "predefined-guitar-fretboards.ly" +<< + \new FretBoards { \chordmode { e1 } } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"top line " + \labelContext "FretBoards " s1 + } +>> +@end lilypond + +Each of the vertical spacing grob properties (except +@code{staff-affinity}) uses the same alist structure as the +@code{\paper} spacing variables discussed in +@ref{Flexible vertical spacing \paper variables}. Specific methods +for modifying alists are discussed in @ref{Modifying alists}. +Grob properties should be adjusted with an @code{\override} inside +a @code{\score} or @code{\layout} block, and not inside a +@code{\paper} block. + +The following example demonstrates the two ways these alists can +be modified. The first declaration updates one key-value +individually, and the second completely re-defines the property: + +@example +\new Staff \with @{ + \override VerticalAxisGroup #'default-staff-staff-spacing + #'basic-distance = #10 +@} @{ @dots{} @} + +\new Staff \with @{ + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 10) + (minimum-distance . 9) + (padding . 1) + (stretchability . 10)) +@} @{ @dots{} @} +@end example + +To change any spacing settings globally, put them in the +@code{\layout} block: + +@example +\layout @{ + \context @{ + \Staff + \override VerticalAxisGroup #'default-staff-staff-spacing + #'basic-distance = #10 + @} +@} +@end example + +Standard settings for the vertical spacing grob properties are +listed in @rinternals{VerticalAxisGroup} and +@rinternals{StaffGrouper}. Default overrides for specific types +of non-staff lines are listed in the relevant context descriptions +in @rinternals{Contexts}. + + +@subsubheading Properties of the @code{VerticalAxisGroup} grob + +@code{VerticalAxisGroup} properties are typically adjusted with an +@code{\override} at the @code{Staff} level (or equivalent). + +@table @code +@item staff-staff-spacing + +Used to determine the distance between the current staff and the +staff just below it in the same system, even if one or more +non-staff lines (such as @code{Lyrics}) are placed between the two +staves. Does not apply to the bottom staff of a system. + +Initially, the @code{staff-staff-spacing} of a +@code{VerticalAxisGroup} is a Scheme function that applies the +properties of the @code{StaffGrouper} if the staff is part of a +group, or the @code{default-staff-staff-spacing} of the staff +otherwise. This allows staves to be spaced differently when they +are grouped. For uniform spacing regardless of grouping, this +function may be replaced by a flexible-spacing alist, using the +complete-redefinition form of override shown above. + +@item default-staff-staff-spacing +A flexible-spacing alist defining the @code{staff-staff-spacing} used for +ungrouped staves, unless @code{staff-staff-spacing} has been explicitly +set with an @code{\override}. + +@item staff-affinity +The direction of the staff to use for spacing the current +non-staff line. Choices are @code{UP}, @code{DOWN}, and +@code{CENTER}. If @code{CENTER}, the non-staff line will be +placed equidistant between the two nearest staves on either side, +unless collisions or other spacing constraints prevent this. +Adjacent non-staff lines should have non-increasing +@code{staff-affinity} from top to bottom, e.g. a non-staff line +set to @code{UP} should not immediately follow one that is set to +@code{DOWN}. Non-staff lines at the top of a system should use +@code{DOWN}; those at the bottom should use @code{UP}. Setting +@code{staff-affinity} for a staff causes it to be treated as a +non-staff line. Setting @code{staff-affinity} to @code{#f} causes +a non-staff line to be treated as a staff. Setting +@code{staff-affinity} to @code{UP}, @code{CENTER}, or @code{DOWN} +causes a staff to be spaced as a non-staff line. + +@item nonstaff-relatedstaff-spacing +The distance between the current non-staff line and the nearest +staff in the direction of @code{staff-affinity}, if there are no +non-staff lines between the two, and @code{staff-affinity} is +either @code{UP} or @code{DOWN}. If @code{staff-affinity} is +@code{CENTER}, then @code{nonstaff-relatedstaff-spacing} is used +for the nearest staves on @emph{both} sides, even if other +non-staff lines appear between the current one and either of the +staves. This means that the placement of a non-staff line depends +on both the surrounding staves and the surrounding non-staff lines. +Setting the @code{stretchability} of one of these types of spacing to +a small value will make that spacing dominate. Setting the +@code{stretchability} to a large value will make that spacing have +little effect. + +@item nonstaff-nonstaff-spacing +The distance between the current non-staff line and the next +non-staff line in the direction of @code{staff-affinity}, if both +are on the same side of the related staff, and +@code{staff-affinity} is either @code{UP} or @code{DOWN}. + +@item nonstaff-unrelatedstaff-spacing +The distance between the current non-staff line and the staff in +the opposite direction from @code{staff-affinity}, if there are no +other non-staff lines between the two, and @code{staff-affinity} +is either @code{UP} or @code{DOWN}. This can be used, for +example, to require a minimum amount of padding between a +@code{Lyrics} line and the staff to which it does not belong. +@end table + + +@subsubheading Properties of the @code{StaffGrouper} grob + +@code{StaffGrouper} properties are typically adjusted with an +@code{\override} at the @code{StaffGroup} level (or equivalent). + +@table @code +@item staff-staff-spacing +The distance between consecutive staves within the current +staff-group. The @code{staff-staff-spacing} property of an +individual staff's @code{VerticalAxisGroup} grob can be +overriden with different spacing settings for that staff. + +@item staffgroup-staff-spacing +The distance between the last staff of the current staff-group and +the staff just below it in the same system, even if one or more +non-staff lines (such as @code{Lyrics}) exist between the two +staves. Does not apply to the bottom staff of a system. The +@code{staff-staff-spacing} property of an individual staff's +@code{VerticalAxisGroup} grob can be overriden with different +spacing settings for that staff. +@end table + +@seealso +Notation Reference: +@ref{Flexible vertical spacing \paper variables}, +@ref{Modifying alists}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + +Installed Files: +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + + +@node Spacing of ungrouped staves +@unnumberedsubsubsec Spacing of ungrouped staves + +@emph{Staves} (such as @code{Staff}, @code{DrumStaff}, +@code{TabStaff}, etc.) are contexts that can contain one or more +voice contexts, but cannot contain any other staves. + +The following properties affect the spacing of @emph{ungrouped} +staves: + +@itemize +@item @code{VerticalAxisGroup} properties: +@itemize +@item @code{default-staff-staff-spacing} +@item @code{staff-staff-spacing} +@end itemize +@end itemize + +These grob properties are described individually above; see +@ref{Within-system spacing properties}. + +Additional properties are involved for staves that are part of a +staff-group; see @ref{Spacing of grouped staves}. + +The following example shows how the @code{default-staff-staff-spacing} +property can affect the spacing of ungrouped staves. +The same overrides applied to @code{staff-staff-spacing} would +have the same effect, but would also apply in cases where the staves +are combined in a group or groups. + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Staff + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 8) + (minimum-distance . 7) + (padding . 1)) + } +} + +<< + % The very low note here needs more room than 'basic-distance + % can provide, so the distance between this staff and the next + % is determined by 'padding. + \new Staff { b,2 r | } + + % Here, 'basic-distance provides enough room, and there is no + % need to compress the space (towards 'minimum-distance) to make + % room for anything else on the page, so the distance between + % this staff and the next is determined by 'basic-distance. + \new Staff { \clef bass g2 r | } + + % By setting 'padding to a negative value, staves can be made to + % collide. The lowest acceptable value for 'basic-distance is 0. + \new Staff \with { + \override VerticalAxisGroup #'default-staff-staff-spacing = + #'((basic-distance . 3.5) + (padding . -10)) + } { \clef bass g2 r | } + \new Staff { \clef bass g2 r | } +>> +@end lilypond + +@seealso +Installed Files: +@file{scm/define-grobs.scm}. + +Snippets: +@rlsr{Spacing}. + +Internals Reference: +@rinternals{VerticalAxisGroup}. + + +@node Spacing of grouped staves +@unnumberedsubsubsec Spacing of grouped staves + +In orchestral and other large scores, it is common to place staves +in groups. The space between groups is typically larger than the +space between staves of the same group. + +@emph{Staff-groups} (such as @code{StaffGroup}, @code{ChoirStaff}, +etc.) are contexts that can contain one or more staves +simultaneously. + +The following properties affect the spacing of staves inside +staff-groups: + +@itemize +@item @code{VerticalAxisGroup} properties: +@itemize +@item @code{staff-staff-spacing} +@end itemize +@item @code{StaffGrouper} properties: +@itemize +@item @code{staff-staff-spacing} +@item @code{staffgroup-staff-spacing} +@end itemize +@end itemize + +These grob properties are described individually above; see +@ref{Within-system spacing properties}. + +The following example shows how properties of the +@code{StaffGrouper} grob can affect the spacing of grouped staves: + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Score + \override StaffGrouper #'staff-staff-spacing #'padding = #0 + \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1 + } +} + +<< + \new PianoStaff \with { + \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20 + } << + \new Staff { c'1 } + \new Staff { c'1 } + >> + + \new StaffGroup << + \new Staff { c'1 } + \new Staff { c'1 } + >> +>> +@end lilypond + +@seealso +Installed Files: +@file{scm/define-grobs.scm}. + +Snippets: +@rlsr{Spacing}. + +Internals Reference: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Spacing of non-staff lines +@unnumberedsubsubsec Spacing of non-staff lines + +@emph{Non-staff lines} (such as @code{Lyrics}, @code{ChordNames}, +etc.) are contexts whose layout objects are engraved like staves +(i.e. in horizontal lines within systems). Specifically, +non-staff lines are non-staff contexts that create the +@code{VerticalAxisGroup} layout object. + +The following properties affect the spacing of non-staff lines: + +@itemize +@item @code{VerticalAxisGroup} properties: +@itemize +@item @code{staff-affinity} +@item @code{nonstaff-relatedstaff-spacing} +@item @code{nonstaff-nonstaff-spacing} +@item @code{nonstaff-unrelatedstaff-spacing} +@end itemize +@end itemize + +These grob properties are described individually above; see +@ref{Within-system spacing properties}. + +The following example shows how the +@code{nonstaff-nonstaff-spacing} property can affect the spacing +of consecutive non-staff lines. Here, by setting the +@code{stretchability} key to a very high value, the lyrics are +able to stretch much more than usual: + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Lyrics + \override VerticalAxisGroup + #'nonstaff-nonstaff-spacing #'stretchability = #1000 + } +} + +\new StaffGroup +<< + \new Staff \with { + \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30)) + } { c'1 } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #UP + } \lyricmode { up } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #CENTER + } \lyricmode { center } + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #DOWN + } \lyricmode { down } + \new Staff { c'1 } +>> +@end lilypond + + +@seealso +Installed Files: +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + +Snippets: +@rlsr{Spacing}. + +@c @lsr{spacing,page-spacing.ly}, +@c @lsr{spacing,alignment-vertical-spacing.ly}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}. + + +@node Explicit staff and system positioning +@subsection Explicit staff and system positioning + +One way to understand the flexible vertical spacing mechanisms +explained above is as a collection of settings that control the +amount of vertical padding between staves and systems. + +It is possible to approach vertical spacing in a different way +using @code{NonMusicalPaperColumn #'line-break-system-details}. +While the flexible vertical spacing mechanisms specify vertical +padding, @code{NonMusicalPaperColumn #'line-break-system-details} +can specify exact vertical positions on the page. + +@code{NonMusicalPaperColumn #'line-break-system-details} accepts +an associative list of three different settings: + +@itemize +@item @code{X-offset} +@item @code{Y-offset} +@item @code{alignment-distances} +@end itemize + +Grob overrides, including the overrides for @code{NonMusicalPaperColumn} +below, can occur in any of three different places in an input file: + +@itemize +@item in the middle of note entry directly +@item in a @code{\context} block +@item in the @code{\with} block +@end itemize + +When we override @code{NonMusicalPaperColumn}, we use the usual +@code{\override} command in @code{\context} blocks and in the +@code{\with} block. On the other hand, when we override +@code{NonMusicalPaperColumn} in the middle of note entry, +use the special @code{\overrideProperty} command. Here are some +example @code{NonMusicalPaperColumn} overrides with the special +@code{\overrideProperty} command: + +@example +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((alignment-distances . (15))) + +\overrideProperty NonMusicalPaperColumn + #'line-break-system-details #'((X-offset . 20) + (Y-offset . 40) + (alignment-distances . (15))) +@end example + +To understand how each of these different settings work, we begin +by looking at an example that includes no overrides at all. + +@c \book { } is required in these examples to ensure the spacing +@c overrides can be seen between systems. -np + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + s1*5 \break + s1*5 \break + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +This score isolates line- and page-breaking information in a dedicated +voice. This technique of creating a breaks voice will help keep layout +separate from music entry as our example becomes more complicated. +See @ref{Using an extra voice for breaks}. + +Explicit @code{\breaks} evenly divide the music into six measures per +line. Vertical spacing results from LilyPond's defaults. To set +the vertical startpoint of each system explicitly, we can set +the @code{Y-offset} pair in the @code{line-break-system-details} +attribute of the @code{NonMusicalPaperColumn} grob: + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 40)) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 80)) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Note that @code{line-break-system-details} takes an associative list of +potentially many values, but that we set only one value here. Note, +too, that the @code{Y-offset} property here determines the exact vertical +position on the page at which each new system will render. + +Now that we have set the vertical startpoint of each system +explicitly, we can also set the vertical distances between staves +within each system manually. We do this using the @code{alignment-distances} +subproperty of @code{line-break-system-details}. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 20) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (15))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Note that here we assign two different values to the +@code{line-break-system-details} attribute of the +@code{NonMusicalPaperColumn} grob. Though the +@code{line-break-system-details} attribute alist accepts many +additional spacing parameters (including, for example, a corresponding +@code{X-offset} pair), we need only set the @code{Y-offset} and +@code{alignment-distances} pairs to control the vertical startpoint of +every system and every staff. Finally, note that @code{alignment-distances} +specifies the vertical positioning of staves but not of staff groups. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 0) + (alignment-distances . (30 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 60) + (alignment-distances . (10 10))) + s1*5 \break + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details #'((Y-offset . 100) + (alignment-distances . (10 30))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new StaffGroup << + \new Staff { \repeat unfold 15 { d'4 d' d' d' } } + \new Staff { \repeat unfold 15 { e'4 e' e' e' } } + >> + >> + } +} +@end lilypond + +Some points to consider: + +@itemize +@item When using @code{alignment-distances}, lyrics and other non-staff lines +do not count as a staff. + +@item The units of the numbers passed to @code{X-offset}, +@code{Y-offset} and @code{alignment-distances} are interpreted as multiples +of the distance between adjacent staff lines. Positive values move staves +and lyrics up, negative values move staves and lyrics down. + +@item Because the @code{NonMusicalPaperColumn #'line-break-system-details} +settings given here allow the positioning of staves and systems anywhere +on the page, it is possible to violate paper or margin boundaries or even +to print staves or systems on top of one another. Reasonable values +passed to these different settings will avoid this. +@end itemize + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Vertical collision avoidance +@subsection Vertical collision avoidance + +@funindex outside-staff-priority +@funindex outside-staff-padding +@funindex outside-staff-horizontal-padding + +Intuitively, there are some objects in musical notation that belong +to the staff and there are other objects that should be placed outside +the staff. Objects belonging outside the staff include things such as +rehearsal marks, text and dynamic markings (from now on, these will +be called outside-staff objects). LilyPond's rule for the +vertical placement of outside-staff objects is to place them as close +to the staff as possible but not so close that they collide with +another object. + +LilyPond uses the @code{outside-staff-priority} property to determine +whether a grob is an outside-staff object: if @code{outside-staff-priority} +is a number, the grob is an outside-staff object. In addition, +@code{outside-staff-priority} tells LilyPond in which order the objects +should be placed. + +First, LilyPond places all the objects that do not belong outside +the staff. Then it sorts the outside-staff objects according to their +@code{outside-staff-priority} (in increasing order). One by one, LilyPond +takes the outside-staff objects and places them so that they do +not collide with any objects that have already been placed. That +is, if two outside-staff grobs are competing for the same space, the one +with the lower @code{outside-staff-priority} will be placed closer to +the staff. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4_"Text"\pp +r2. +\once \override TextScript #'outside-staff-priority = #1 +c4_"Text"\pp % this time the text will be closer to the staff +r2. +% by setting outside-staff-priority to a non-number, +% we disable the automatic collision avoidance +\once \override TextScript #'outside-staff-priority = ##f +\once \override DynamicLineSpanner #'outside-staff-priority = ##f +c4_"Text"\pp % now they will collide +@end lilypond + +The vertical padding between an outside-staff object and the +previously-positioned grobs can be controlled with +@code{outside-staff-padding}. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\once \override TextScript #'outside-staff-padding = #0 +a'^"This text is placed very close to the note" +\once \override TextScript #'outside-staff-padding = #3 +c^"This text is padded away from the previous text" +c^"This text is placed close to the previous text" +@end lilypond + + +By default, outside-staff objects are placed only to avoid +a horizontal collision with previously-positioned grobs. This +can lead to situations in which objects are placed very close to each +other horizontally. The vertical spacing between staves can +also be set so that outside staff objects are interleaved. +Setting @code{outside-staff-horizontal-padding} +causes an object to be offset vertically so that such a situation +doesn't occur. + +@lilypond[quote,ragged-right,relative=2,verbatim] +% the markup is too close to the following note +c4^"Text" +c4 +c''2 +% setting outside-staff-horizontal-padding fixes this +R1 +\once \override TextScript #'outside-staff-horizontal-padding = #1 +c,,4^"Text" +c4 +c''2 +@end lilypond + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Horizontal spacing +@section Horizontal spacing + +@cindex horizontal spacing +@cindex spacing, horizontal + +@menu +* Horizontal spacing overview:: +* New spacing area:: +* Changing horizontal spacing:: +* Line length:: +* Proportional notation:: +@end menu + + +@node Horizontal spacing overview +@subsection Horizontal spacing overview + +The spacing engine translates differences in durations into stretchable +distances (@q{springs}) of differing lengths. Longer durations get +more space, shorter durations get less. The shortest durations get a +fixed amount of space (which is controlled by +@code{shortest-duration-space} in the @rinternals{SpacingSpanner} +object). The longer the duration, the more space it gets: doubling a +duration adds a fixed amount (this amount is controlled by +@code{spacing-increment}) of space to the note. + +For example, the following piece contains lots of half, quarter, and +8th notes; the eighth note is followed by 1 note head width (NHW). +The quarter note is followed by 2 NHW, the half by 3 NHW, etc. + +@lilypond[quote,verbatim,relative=1] +c2 c4. c8 c4. c8 c4. c8 c8 +c8 c4 c4 c4 +@end lilypond + +Normally, @code{spacing-increment} is set to 1.2 staff space, which is +approximately the width of a note head, and +@code{shortest-duration-space} is set to 2.0, meaning that the +shortest note gets 2.4 staff space (2.0 times the +@code{spacing-increment}) of horizontal space. This space is counted +from the left edge of the symbol, so the shortest notes are generally +followed by one NHW of space. + +If one would follow the above procedure exactly, then adding a single +32nd note to a score that uses 8th and 16th notes, would widen up the +entire score a lot. The shortest note is no longer a 16th, but a 32nd, +thus adding 1 NHW to every note. To prevent this, the shortest +duration for spacing is not the shortest note in the score, but rather +the one which occurs most frequently. + + +The most common shortest duration is determined as follows: in every +measure, the shortest duration is determined. The most common shortest +duration is taken as the basis for the spacing, with the stipulation +that this shortest duration should always be equal to or shorter than +an 8th note. The shortest duration is printed when you run +@code{lilypond} with the @code{--verbose} option. + +These durations may also be customized. If you set the +@code{common-shortest-duration} in @rinternals{SpacingSpanner}, then +this sets the base duration for spacing. The maximum duration for this +base (normally an 8th), is set through @code{base-shortest-duration}. + +@funindex common-shortest-duration +@funindex base-shortest-duration +@funindex stem-spacing-correction +@funindex spacing + +Notes that are even shorter than the common shortest note are +followed by a space that is proportional to their duration relative to +the common shortest note. So if we were to add only a few 16th notes +to the example above, they would be followed by half a NHW: + +@lilypond[quote,verbatim,relative=2] +c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 +@end lilypond + + +In the @emph{Essay on automated music engraving}, it was explained +that stem directions influence spacing (see +@ressay{Optical spacing}). This is controlled with the +@code{stem-spacing-correction} property in the +@rinternals{NoteSpacing}, object. These are generated for every +@rinternals{Voice} context. The @code{StaffSpacing} object +(generated in @rinternals{Staff} context) contains the same +property for controlling the stem/bar line spacing. The following +example shows these corrections, once with default settings, and +once with exaggerated corrections: + +@lilypond[quote,ragged-right] +{ + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | + \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 + \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | +} +@end lilypond + +Proportional notation is supported; see @ref{Proportional notation}. + + +@seealso +Snippets: +@rlsr{Spacing}. + +Internals Reference: +@rinternals{SpacingSpanner}, +@rinternals{NoteSpacing}, +@rinternals{StaffSpacing}, +@rinternals{NonMusicalPaperColumn}. + +Essay on automated music engraving: +@ressay{Optical spacing}. + + +@knownissues + +There is no convenient mechanism to manually override spacing. The +following work-around may be used to insert extra space into a score, +adjusting the padding value as necessary. +@example + \override Score.NonMusicalPaperColumn #'padding = #10 +@end example + +No work-around exists for decreasing the amount of space. + + +@node New spacing area +@subsection New spacing area + +New sections with different spacing parameters can be started with +@code{newSpacingSection}. This is useful when there are +sections with a different notions of long and short notes. + +In the following example, the time signature change introduces a new +section, and hence the 16ths notes are spaced wider. + +@lilypond[relative=1,verbatim,quote] +\time 2/4 +c4 c8 c +c8 c c4 c16[ c c8] c4 +\newSpacingSection +\time 4/16 +c16[ c c8] +@end lilypond + +The @code{\newSpacingSection} command creates a new +@code{SpacingSpanner} object, and hence new @code{\override}s +may be used in that location. + + +@seealso +Snippets: +@rlsr{Spacing}. + +Internals Reference: +@rinternals{SpacingSpanner}. + + +@node Changing horizontal spacing +@subsection Changing horizontal spacing + +Horizontal spacing may be altered with the +@code{base-shortest-duration} property. Here +we compare the same music; once without altering +the property, and then altered. Larger values +of @code{ly:make-moment} will produce smaller +music. Note that @code{ly:make-moment} constructs +a duration, so @code{1 4} is a longer duration +than @code{1 16}. + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } +} +@end lilypond + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } +} +@end lilypond + + +@snippets + +By default, spacing in tuplets depends on various non-duration +factors (such as accidentals, clef changes, etc). To disregard +such symbols and force uniform equal-duration spacing, use +@code{Score.SpacingSpanner #'uniform-stretching}. This +property can only be changed at the beginning of a score, + +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new Staff { + \times 4/5 { + c8 c8 c8 c8 c8 + } + c8 c8 c8 c8 + } + \new Staff { + c8 c8 c8 c8 + \times 4/5 { + c8 c8 c8 c8 c8 + } + } + >> + \layout { + \context { + \Score + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +When @code{strict-note-spacing} is set, notes are spaced without +regard for clefs, bar lines, and grace notes, + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Score.SpacingSpanner #'strict-note-spacing = ##t +\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } +@end lilypond + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Line length +@subsection Line length + +@cindex page breaks +@cindex breaking pages + +@funindex indent +@funindex line-width +@funindex ragged-right +@funindex ragged-last + +@c Although line-width can be set in \layout, it should be set in paper +@c block, to get page layout right. +@c Setting indent in \paper block makes not much sense, but it works. + +@c Bit verbose and vague, use examples? +The most basic settings influencing the spacing are @code{indent} and +@code{line-width}. They are set in the @code{\layout} block. They +control the indentation of the first line of music, and the lengths of +the lines. + +If @code{ragged-right} is set to true in the @code{\layout} block, then +systems ends at their natural horizontal length, instead of being spread +horizontally to fill the whole line. This is useful for +short fragments, and for checking how tight the natural spacing is. +The normal default setting is false, but if the score has only one +system the default value is true. + +@cindex page layout +@cindex vertical spacing + +The option @code{ragged-last} is similar to @code{ragged-right}, but +only affects the last line of the piece. No restrictions are put on +that line. The result is similar to formatting text paragraphs. In a +paragraph, the last line simply takes its natural horizontal length. +@c Note that for text there are several options for the last line. +@c While Knuth TeX uses natural length, lead typesetters use the same +@c stretch as the previous line. eTeX uses \lastlinefit to +@c interpolate between both these solutions. + +@example +\layout @{ + indent = #0 + line-width = #150 + ragged-last = ##t +@} +@end example + + +@seealso +Snippets: +@rlsr{Spacing}. + + +@node Proportional notation +@subsection Proportional notation + +LilyPond supports proportional notation, a type of horizontal spacing +in which each note consumes an amount of horizontal space exactly +equivalent to its rhythmic duration. This type of proportional spacing +is comparable to horizontal spacing on top of graph paper. Some late +20th- and early 21st-century scores use proportional notation to +clarify complex rhythmic relationships or to facilitate the placement +of timelines or other graphics directly in the score. + +LilyPond supports five different settings for proportional notation, +which may be used together or alone: + +@itemize +@item @code{proportionalNotationDuration} +@item @code{uniform-stretching} +@item @code{strict-note-spacing} +@item @code{\remove Separating_line_group_engraver} +@item @code{\override PaperColumn #'used = ##t} +@end itemize + +In the examples that follow, we explore these five different +proportional notation settings and examine how these settings interact. + +We start with the following one-measure example, which uses classical +spacing with ragged-right turned on. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> +} +@end lilypond + +Notice that the half note which begins the measure takes up far less +than half of the horizontal space of the measure. Likewise, the +sixteenth notes and sixteenth-note quintuplets (or twentieth notes) +which end the measure together take up far more than half the +horizontal space of the measure. + +In classical engraving, this spacing may be exactly what we want +because we can borrow horizontal space from the half note and conserve +horizontal space across the measure as a whole. + +On the other hand, if we want to insert a measured timeline or other +graphic above or below our score, we need proportional notation. We +turn proportional notation on with the proportionalNotationDuration +setting. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + +The half note at the beginning of the measure and the faster notes in +the second half of the measure now occupy equal amounts of horizontal +space. We could place a measured timeline or graphic above or below +this example. + +The @code{proportionalNotationDuration} setting is a context setting +that lives in @code{Score}. Remember that context settings can appear +in one of three locations within our input file -- in a @code{\with} +block, in a @code{\context} block, or directly in music entry preceded +by the @code{\set} command. As with all context settings, users can +pick which of the three different locations they would like to +set @code{proportionalNotationDuration} in to. + +The @code{proportionalNotationDuration} setting takes a single argument, +which is the reference duration against that all music will be spaced. +The LilyPond Scheme function @code{make-moment} takes two arguments +-- a numerator and denominator which together express some fraction of +a whole note. The call @code{#(ly:make-moment 1 20)} therefore produces +a reference duration of a twentieth note. Values such as +@code{#(ly:make-moment 1 16)}, @code{#(ly:make-moment 1 8)}, and +@code{#(ly:make-moment 3 97)} are all possible as well. + +How do we select the right reference duration to pass to +@code{proportionalNotationDuration}? Usually by a process of trial +and error, beginning with a duration close to the fastest (or smallest) +duration in the piece. Smaller reference durations space music loosely; +larger reference durations space music tightly. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 8) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 16) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 32) + } + } +} +@end lilypond + +Note that too large a reference duration -- such as the eighth note, +above -- spaces music too tightly and can cause note head collisions. +Also that proportional notation in general takes up more horizontal +space than classical spacing. Proportional spacing provides rhythmic +clarity at the expense of horizontal space. + +Next we examine how to optimally space overlapping tuplets. + +We start by examining what happens to our original example, with +classical spacing, when we add a second staff with a different type of +tuplet. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> +} +@end lilypond + +The spacing is bad because the evenly spaced notes of the bottom staff +do not stretch uniformly. Classical engravings include very few complex +triplets and so classical engraving rules can generate this type of +result. Setting @code{proportionalNotationDuration} fixes this. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond + +But if we look very carefully we can see that notes of the second half +of the 9-tuplet space ever so slightly more widely than the notes +of the first half of the 9-tuplet. To ensure uniform stretching, we +turn on @code{uniform-stretching}, which is a property of +@code{SpacingSpanner}. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + \override SpacingSpanner #'uniform-stretching = ##t + } + } +} +@end lilypond + +Our two-staff example now spaces exactly, our rhythmic +relationships are visually clear, and we can include a measured +timeline or graphic if we want. + +Note that the LilyPond's proportional notation package expects +that all proportional scores set the SpacingSpanner's +'uniform-stretching attribute to ##t. Setting +proportionalNotationDuration without also setting the +SpacingSpanner's 'uniform-stretching attribute to ##t will, for +example, cause Skips to consume an incorrect amount of horizontal +space. + +The SpacingSpanner is an abstract grob that lives in the Score +context. As with our settings of proportionalNotationDuration, +overrides to the SpacingSpanner can occur in any of three +different places in our input file – in the Score \with block, in +a Score \context block, or in note entry directly. + +There is by default only one @code{SpacingSpanner} per @code{Score}. This +means that, by default, @code{uniform-stretching} is either turned on for the +entire score or turned off for the entire score. We can, however, +override this behavior and turn on different spacing features at +different places in the score. We do this with the command +@code{\newSpacingSection}. See @ref{New spacing area}, for more info. + +Next we examine the effects of the @code{Separating_line_group_engraver} and +see why proportional scores frequently remove this engraver. The following +example shows that there is a small amount of @qq{prefatory} space +just before the first note in each system. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff { + c'1 + \break + c'1 +} +@end lilypond + + +The amount of this prefatory space is the same whether after a time +signature, a key signature or a clef. @code{Separating_line_group_engraver} +is responsible for this space. Removing @code{Separating_line_group_engraver} +reduces this space to zero. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} + +\new Staff \with { + \remove Separating_line_group_engraver +} { + c'1 + \break + c'1 +} +@end lilypond + +non-musical elements like time signatures, key signatures, clefs and +accidentals are problematic in proportional notation. None of these +elements has rhythmic duration. But all of these elements consume +horizontal space. Different proportional scores approach these +problems differently. + +It may be possible to avoid spacing problems with key signatures +simply by not having any. This is a valid option since most +proportional scores are contemporary music. The same may be true +of time signatures, especially for those scores +that include a measured timeline or other graphic. But these scores +are exceptional and most proportional scores include at least some +time signatures. Clefs and accidentals are even more essential. + +So what strategies exist for spacing non-musical elements in a +proportional context? One good option is the @code{strict-note-spacing} +property of @code{SpacingSpanner}. Compare the two scores below: + +@lilypond[quote,verbatim,ragged-right] +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} + +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \override Score.SpacingSpanner #'strict-note-spacing = ##t + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} +@end lilypond + +Both scores are proportional, but the spacing in the first score +is too loose because of the clef change. The spacing of the second +score remains strict, however, because strict-note-spacing is +turned on. Turning on strict-note-spacing causes the width of +time signatures, key signatures, clefs and accidentals to play no +part in the spacing algorithm. + +In addition to the settings given here, there are other settings +that frequently appear in proportional scores. These include: + +@itemize +@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} +@item @code{tupletFullLength = ##t} +@item @code{\override Beam #'breakable = ##t} +@item @code{\override Glissando #'breakable = ##t} +@item @code{\override TextSpanner #'breakable = ##t} +@item @code{\remove Forbid_line_break_engraver in the Voice context} +@end itemize + +These settings space grace notes strictly, extend tuplet brackets to +mark both rhythmic start- and stop-points, and allow spanning elements +to break across systems and pages. See the respective parts of the manual +for these related settings. + + +@seealso +Notation Reference: +@ref{New spacing area}. + +Snippets: +@rlsr{Spacing}. + + +@node Fitting music onto fewer pages +@section Fitting music onto fewer pages + +Sometimes you can end up with one or two staves on a second +(or third, or fourth...) page. This is annoying, especially +if you look at previous pages and it looks like there is plenty +of room left on those. + +When investigating layout issues, @code{annotate-spacing} is an +invaluable tool. This command prints the values of various layout +spacing variables; for more details see the following section, +@ref{Displaying spacing}. + +@menu +* Displaying spacing:: +* Changing spacing:: +@end menu + + +@node Displaying spacing +@subsection Displaying spacing + +@funindex annotate-spacing +@cindex spacing, display of layout + +To graphically display the dimensions of vertical layout variables +that may be altered for page formatting, set +@code{annotate-spacing} in the @code{\paper} block: + +@c need to have \book{} otherwise we get the separate systems. -hwn +@lilypond[verbatim,quote] +#(set-default-paper-size "a6" 'landscape) +\book { + \score { { c4 } } + \paper { annotate-spacing = ##t } +} +@end lilypond + + +@noindent +All layout dimensions are displayed in staff-spaces, regardless +of the units specified in the @code{\paper} or @code{\layout} block. +In the above example, @code{paper-height} has a value of 59.75 +@code{staff-spaces}, and the @code{staff-size} is 20 points (the +default value). Note that: + +@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm} + +@item 1 point +@tab = (25.4/72.27) mm + +@item 1 staff-space +@tab = (@code{staff-size})/4 pts +@item +@tab = (@code{staff-size})/4 * (25.4/72.27) mm + +@end multitable + +@noindent +In this case, one @code{staff-space} is approximately equal to +1.757mm. Thus the @code{paper-height} measurement of 59.75 +@code{staff-spaces} is equivalent to 105 millimeters, the height +of @code{a6} paper in landscape orientation. The pairs +(@var{a},@var{b}) are intervals, where @var{a} is the lower +edge and @var{b} the upper edge of the interval. + + +@seealso +Notation Reference: +@ref{Setting the staff size}. + +Snippets: +@rlsr{Spacing}. + + +@node Changing spacing +@subsection Changing spacing + +The output of @code{annotate-spacing} reveals vertical dimensions +in great detail. For details about modifying margins and other +layout variables, see @ref{Page layout}. + +Other than margins, there are a few other options to save space: + +@itemize +@item +Force systems to move as close together as possible (to fit as +many systems as possible onto a page) while being spaced so that +there is no blank space at the bottom of the page. + +@example +\paper @{ + system-system-spacing = #'((basic-distance . 0.1) (padding . 0)) + ragged-last-bottom = ##f + ragged-bottom = ##f +@} +@end example + +@item +Force the number of systems. This can help in two ways. Just +setting a value, even the same value as the number of systems +being typeset by default, will sometimes cause more systems to +be fitted onto each page, as an estimation step is then bypassed, +giving a more accurate fit to each page. Also, forcing an actual +reduction in the number of systems may save a further page. For +example, if the default layout has 11 systems, the following +assignment will force a layout with 10 systems. + +@example +\paper @{ + system-count = #10 +@} +@end example + +@item +Avoid (or reduce) objects that increase the vertical size of a +system. For example, volta repeats (or alternate repeats) require +extra space. If these repeats are spread over two systems, they +will take up more space than one system with the volta repeats and +another system without. For example, dynamics that @q{stick out} of +a system can be moved closer to the staff: + +@lilypond[verbatim,quote,relative=1] +e4 c g\f c +e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c +@end lilypond + +@item +Alter the horizontal spacing via @code{SpacingSpanner}. For more +details, see @ref{Changing horizontal spacing}. The following +example illustrates the default spacing: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } +} +@end lilypond + +@noindent +The next example modifies @code{common-shortest-duration} from a +value of @code{1/4} to @code{1/2}. The quarter note is the most +common and shortest duration in this example, so by making this +duration longer, a @q{squeezing} effect occurs: + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } + \layout { + \context { + \Score + \override SpacingSpanner + #'common-shortest-duration = #(ly:make-moment 1 2) + } + } +} +@end lilypond + +@noindent +The @code{common-shortest-duration} property cannot be modified +dynamically, so it must always be placed in a @code{\context} +block so that it applies to the whole score. + +@end itemize + + +@seealso +Notation Reference: +@ref{Page layout}, +@ref{Changing horizontal spacing}. + +Snippets: +@rlsr{Spacing}. diff --git a/Documentation/notation/specialist.itely b/Documentation/notation/specialist.itely new file mode 100644 index 0000000000..d57f50fdfd --- /dev/null +++ b/Documentation/notation/specialist.itely @@ -0,0 +1,41 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Specialist notation +@chapter Specialist notation + +This chapter explains how to create musical notation for specific +types of instrument or in specific styles. + +@menu +* Vocal music:: +* Keyboard and other multi-staff instruments:: +* Unfretted string instruments:: +* Fretted string instruments:: +* Percussion:: +* Wind instruments:: +* Chord notation:: +* Contemporary music:: +* Ancient notation:: +* World music:: +@end menu + +@include notation/vocal.itely +@include notation/keyboards.itely +@include notation/unfretted-strings.itely +@include notation/fretted-strings.itely +@include notation/percussion.itely +@include notation/wind.itely +@include notation/chords.itely +@include notation/contemporary.itely +@include notation/ancient.itely +@include notation/world.itely + diff --git a/Documentation/notation/staff.itely b/Documentation/notation/staff.itely new file mode 100644 index 0000000000..514e18239f --- /dev/null +++ b/Documentation/notation/staff.itely @@ -0,0 +1,1527 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Staff notation +@section Staff notation + +@lilypondfile[quote]{staff-headword.ly} + +This section explains how to influence the appearance of staves, +how to print scores with more than one staff, and how to add tempo +indications and cue notes to staves. + +@menu +* Displaying staves:: +* Modifying single staves:: +* Writing parts:: +@end menu + + +@node Displaying staves +@subsection Displaying staves + +This section describes the different methods of creating and +grouping staves. + +@menu +* Instantiating new staves:: +* Grouping staves:: +* Nested staff groups:: +* Separating systems:: +@end menu + + +@node Instantiating new staves +@unnumberedsubsubsec Instantiating new staves + +@cindex new staff +@cindex staff initiation +@cindex staff instantiation +@cindex staff, new +@cindex staff, single +@cindex staff, drum +@cindex staff, percussion +@cindex drum staff +@cindex percussion staff +@cindex Gregorian transcription staff +@cindex rhythmic staff +@cindex tabstaff +@cindex tablature + +@funindex \drummode +@funindex drummode +@funindex DrumStaff +@funindex RhythmicStaff +@funindex TabStaff +@funindex MensuralStaff +@funindex VaticanaStaff +@funindex GregorianTranscriptionStaff + +@notation{Staves} (singular: @notation{staff}) are created with +the @code{\new} or @code{\context} commands. For details, see +@ref{Creating contexts}. + +The basic staff context is @code{Staff}: + +@lilypond[verbatim,quote,relative=2] +\new Staff { c4 d e f } +@end lilypond + +The @code{DrumStaff} context creates a five-line staff set up for +a typical drum set. Each instrument is shown with a different +symbol. The instruments are entered in drum mode following a +@code{\drummode} command, with each instrument specified by name. +For details, see @ref{Percussion staves}. + +@lilypond[verbatim,quote] +\new DrumStaff { + \drummode { cymc hh ss tomh } +} +@end lilypond + +@code{RhythmicStaff} creates a single-line staff that only +displays the rhythmic values of the input. Real durations are +preserved. For details, see @ref{Showing melody rhythms}. + +@lilypond[verbatim,quote,relative=2] +\new RhythmicStaff { c4 d e f } +@end lilypond + +@code{TabStaff} creates a tablature with six strings in standard +guitar tuning. For details, see @ref{Default tablatures}. + +@lilypond[verbatim,quote,relative=2] +\new TabStaff { c4 d e f } +@end lilypond + +There are two staff contexts specific for the notation of ancient +music: @code{MensuralStaff} and @code{VaticanaStaff}. They are +described in @ref{Pre-defined contexts}. + +The @code{GregorianTranscriptionStaff} context creates a staff to +notate modern Gregorian chant. It does not show bar lines. + +@lilypond[verbatim,quote,relative=2] +\new GregorianTranscriptionStaff { c4 d e f e d } +@end lilypond + +New single staff contexts may be defined. For details, see +@ref{Defining new contexts}. + + +@seealso +Music Glossary: +@rglos{staff}, +@rglos{staves}. + +Notation Reference: +@ref{Creating contexts}, +@ref{Percussion staves}, +@ref{Showing melody rhythms}, +@ref{Default tablatures}, +@ref{Pre-defined contexts}, +@ref{Staff symbol}, +@ref{Gregorian chant contexts}, +@ref{Mensural contexts}, +@ref{Defining new contexts}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{Staff}, +@rinternals{DrumStaff}, +@rinternals{GregorianTranscriptionStaff}, +@rinternals{RhythmicStaff}, +@rinternals{TabStaff}, +@rinternals{MensuralStaff}, +@rinternals{VaticanaStaff}, +@rinternals{StaffSymbol}. + + +@node Grouping staves +@unnumberedsubsubsec Grouping staves + +@cindex start of system +@cindex staff, multiple +@cindex staves, multiple +@cindex system start delimiters +@cindex bracket, vertical +@cindex brace, vertical +@cindex choir staff +@cindex grand staff +@cindex piano staff +@cindex staff group +@cindex staff, choir +@cindex staff, piano +@cindex staff, grand +@cindex system + +Various contexts exist to group single staves together in order to +form multi-stave systems. Each grouping context sets the style of +the system start delimiter and the behavior of bar lines. + +If no context is specified, the default properties will be used: +the group is started with a vertical line, and the bar lines are +not connected. + +@lilypond[verbatim,quote,relative=2] +<< + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In the @code{StaffGroup} context, the group is started with a +bracket and bar lines are drawn through all the staves. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In a @code{ChoirStaff}, the group starts with a bracket, but bar +lines are not connected. + +@lilypond[verbatim,quote,relative=2] +\new ChoirStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +In a @code{GrandStaff}, the group begins with a brace, and bar +lines are connected between the staves. + +@lilypond[verbatim,quote,relative=2] +\new GrandStaff << + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +The @code{PianoStaff} is identical to a @code{GrandStaff}, except +that it supports printing the instrument name directly. For +details, see @ref{Instrument names}. + +@lilypond[verbatim,quote,relative=2] +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { c1 c } + \new Staff { c1 c } +>> +@end lilypond + +Each staff group context sets the property +@code{systemStartDelimiter} to one of the following values: +@code{SystemStartBar}, @code{SystemStartBrace}, or +@code{SystemStartBracket}. A fourth delimiter, +@code{SystemStartSquare}, is also available, but it must be +explicitly specified. + +New staff group contexts may be defined. For details, see +@ref{Defining new contexts}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{use-square-bracket-at-the-start-of-a-staff-group.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{display-bracket-with-only-one-staff-in-a-system.ly} + +@cindex mensurstriche layout +@cindex renaissance music +@cindex transcription of mensural music +@cindex mensural music, transcription of + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{mensurstriche-layout-bar-lines-between-the-staves.ly} + + +@seealso +Music Glossary: +@rglos{brace}, +@rglos{bracket}, +@rglos{grand staff}. + +Notation Reference: +@ref{Instrument names}, +@ref{Defining new contexts}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{Staff}, +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{GrandStaff}, +@rinternals{PianoStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + +@knownissues +@code{PianoStaff} does not, by default, accept @code{ChordNames}. + + +@node Nested staff groups +@unnumberedsubsubsec Nested staff groups + +@cindex staff, nested +@cindex staves, nested +@cindex nesting of staves +@cindex system start delimiters, nested +@cindex nested staff brackets +@cindex brackets, nesting of +@cindex braces, nesting of + +Staff-group contexts can be nested to arbitrary depths. In this +case, each child context creates a new bracket adjacent to the +bracket of its parent group. + +@lilypond[verbatim,quote,relative=2] +\new StaffGroup << + \new Staff { c2 c | c2 c } + \new StaffGroup << + \new Staff { g2 g | g2 g } + \new StaffGroup \with { + systemStartDelimiter = #'SystemStartSquare + } + << + \new Staff { e2 e | e2 e } + \new Staff { c2 c | c2 c } + >> + >> +>> +@end lilypond + +New nested staff group contexts can be defined. For details, see +@ref{Defining new contexts}. + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{nesting-staves.ly} + + +@seealso +Notation Reference: +@ref{Grouping staves}, +@ref{Instrument names}, +@ref{Defining new contexts}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{StaffGroup}, +@rinternals{ChoirStaff}, +@rinternals{SystemStartBar}, +@rinternals{SystemStartBrace}, +@rinternals{SystemStartBracket}, +@rinternals{SystemStartSquare}. + +@node Separating systems +@unnumberedsubsubsec Separating systems + +@cindex system separator mark + +If the number of systems per page changes from page to page it is +customary to separate the systems by placing a system separator mark +between them. By default the system separator is blank, but can be +turned on with a @code{\paper} option. + +@c \book is required here to display the system separator +@c ragged-right is required as there are two systems +@lilypond[verbatim,quote,ragged-right] +\book { + \score { + \new StaffGroup << + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \relative c'' { + c4 c c c + \break + c4 c c c + } + } + >> + } + \paper { + system-separator-markup = \slashSeparator + % following commands are needed only to format this documentation + paper-width = 100\mm + paper-height = 100\mm + tagline = ##f + } +} +@end lilypond + +@seealso +Notation Reference: +@ref{Page layout}. + +Snippets: +@rlsr{Staff notation}. + + +@node Modifying single staves +@subsection Modifying single staves + +This section explains how to change specific attributes of one +staff: for example, modifying the number of staff lines or the +staff size. Methods to start and stop staves and set ossia +sections are also described. + +@menu +* Staff symbol:: +* Ossia staves:: +* Hiding staves:: +@end menu + + +@node Staff symbol +@unnumberedsubsubsec Staff symbol + +@cindex adjusting staff symbol +@cindex drawing staff symbol +@cindex staff symbol, setting of +@cindex staff symbol, drawing +@cindex stop staff lines +@cindex start staff lines +@cindex staff lines, amount of +@cindex staff lines, number of +@cindex staff line, thickness of +@cindex amount of staff lines +@cindex thickness of staff lines +@cindex ledger lines, setting +@cindex setting of ledger lines +@cindex spacing of ledger lines +@cindex number of staff lines + +The lines of a staff belong to the @code{StaffSymbol} grob. +@code{StaffSymbol} properties can be modified to change the +appearance of a staff, but they must be modified before the staff +is created. + +The number of staff lines may be changed. The clef position and +the position of middle C may need to be modified to fit the new +staff. For an explanation, refer to the snippet section in +@ref{Clef}. + +@lilypond[verbatim,quote,relative=2] +\new Staff \with { + \override StaffSymbol #'line-count = #3 +} +{ d4 d d d } +@end lilypond + +Staff line thickness can be modified. The thickness of ledger +lines and stems are also affected, since they depend on staff line +thickness. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'thickness = #3 +} +{ e4 d c b } +@end lilypond + +Ledger line thickness can be set independently of staff line +thickness. In the example the two numbers are factors multiplying +the staff line thickness and the staff line spacing. The two +contributions are added to give the ledger line thickness. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) +} +{ e4 d c b } +@end lilypond + +The distance between staff lines can be changed. This setting +affects the spacing of ledger lines as well. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'staff-space = #1.5 +} +{ a4 b c d } +@end lilypond + +Further details about the properties of @code{StaffSymbol} can be +found in @rinternals{staff-symbol-interface}. + +@cindex stopping a staff +@cindex starting a staff +@cindex staff, starting +@cindex staff, stopping + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +Modifications to staff properties in the middle of a score can be +placed between @code{\stopStaff} and @code{\startStaff}: + +@lilypond[verbatim,quote,relative=2] +c2 c +\stopStaff +\override Staff.StaffSymbol #'line-count = #2 +\startStaff +b2 b +\stopStaff +\revert Staff.StaffSymbol #'line-count +\startStaff +a2 a +@end lilypond + +@noindent +In general, @code{\startStaff} and @code{\stopStaff} can be used +to stop or start a staff in the middle of a score. + +@lilypond[verbatim,quote,relative=2] +c4 b a2 +\stopStaff +b4 c d2 +\startStaff +e4 d c2 +@end lilypond + + +@predefined +@code{\startStaff}, +@code{\stopStaff}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{making-some-staff-lines-thicker-than-the-others.ly} + + +@seealso +Music Glossary: +@rglos{line}, +@rglos{ledger line}, +@rglos{staff}. + +Notation Reference: +@ref{Clef}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{StaffSymbol}, +@rinternals{staff-symbol-interface}. + + +@node Ossia staves +@unnumberedsubsubsec Ossia staves + +@cindex staff, Frenched +@cindex ossia +@cindex Frenched staves +@cindex staff, resizing of +@cindex resizing of staves + +@funindex \startStaff +@funindex startStaff +@funindex \stopStaff +@funindex stopStaff + +@notation{Ossia} staves can be set by creating a new simultaneous +staff in the appropriate location: + +@lilypond[verbatim,quote] +\new Staff \relative c'' { + c4 b d c + << + { c4 b d c } + \new Staff { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +@noindent +However, the above example is not what is usually desired. To +create ossia staves that are above the original staff, have no +time signature or clef, and have a smaller font size, tweaks must +be used. The Learning Manual describes a specific technique to +achieve this goal, beginning with +@rlearning{Nesting music expressions}. + +The following example uses the @code{alignAboveContext} property +to align the ossia staff. This method is most appropriate when +only a few ossia staves are needed. + +@lilypond[verbatim,quote] +\new Staff = main \relative c'' { + c4 b d c + << + { c4 b d c } + + \new Staff \with { + \remove "Time_signature_engraver" + alignAboveContext = #"main" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + firstClef = ##f + } + { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +If many isolated ossia staves are needed, creating an empty +@code{Staff} context with a specific @emph{context id} may be more +appropriate; the ossia staves may then be created by +@emph{calling} this context and using @code{\startStaff} and +@code{\stopStaff} at the desired locations. The benefits of this +method are more apparent if the piece is longer than the following +example. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + { \stopStaff s1*6 } + + \new Staff \relative c' { + c4 b c2 + << + { e4 f e2 } + \context Staff = ossia { + \startStaff e4 g8 f e2 \stopStaff + } + >> + g4 a g2 \break + c4 b c2 + << + { g4 a g2 } + \context Staff = ossia { + \startStaff g4 e8 f g2 \stopStaff + } + >> + e4 d c2 + } +>> +@end lilypond + + +Using the @code{\Staff \RemoveEmptyStaves} command to create ossia +staves may be used as an alternative. This method is most +convenient when ossia staves occur immediately following a line +break. For more information about +@code{\Staff \RemoveEmptyStaves}, see @ref{Hiding staves}. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \override Clef #'transparent = ##t + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } \relative c'' { + R1*3 + c4 e8 d c2 + } + \new Staff \relative c' { + c4 b c2 + e4 f e2 + g4 a g2 \break + c4 b c2 + g4 a g2 + e4 d c2 + } +>> + +\layout { + \context { + \Staff \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } +} +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{vertically-aligning-ossias-and-lyrics.ly} + + +@seealso +Music Glossary: +@rglos{ossia}, +@rglos{staff}, +@rglos{Frenched staff}. + +Learning Manual: +@rlearning{Nesting music expressions}, +@rlearning{Size of objects}, +@rlearning{Length and thickness of objects}. + +Notation Reference: +@ref{Hiding staves}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{StaffSymbol}. + + +@node Hiding staves +@unnumberedsubsubsec Hiding staves + +@cindex Frenched score +@cindex Frenched staff +@cindex staff, hiding +@cindex staff, empty +@cindex hiding of staves +@cindex empty staves + +@funindex \RemoveEmptyStaves +@funindex Staff_symbol_engraver +@funindex \stopStaff +@funindex stopStaff + + +Staff lines can be hidden by removing the +@code{Staff_symbol_engraver} from the @code{Staff} context. As an +alternative, @code{\stopStaff} may be used. + +@lilypond[verbatim,quote] +\new Staff \with { + \remove "Staff_symbol_engraver" +} +\relative c''' { a8 f e16 d c b a2 } +@end lilypond + + +Empty staves can be hidden by setting the +@code{\Staff \RemoveEmptyStaves} command in the @code{\layout} +block. In orchestral scores, this style is known as @q{Frenched +Score}. By default, this command hides and removes all empty +staves in a score except for those in the first system. + +@warning{A staff is considered empty when it contains only +multi-measure rests, rests, skips, spacer rests, or a combination of these +elements.} + +@lilypond[verbatim,quote,ragged-right] +\layout { + \context { + \Staff \RemoveEmptyStaves + } +} + +\relative c' << + \new Staff { + e4 f g a \break + b1 \break + a4 b c2 + } + \new Staff { + c,4 d e f \break + R1 \break + f4 g c,2 + } +>> +@end lilypond + +@cindex ossia + +@noindent +@code{\Staff \RemoveEmptyStaves} can also be used to create ossia +sections for a staff. For details, see @ref{Ossia staves}. + +@cindex hiding ancient staves +@cindex hiding rhythmic staves + +@funindex \RemoveEmptyStaves + +The @code{\VaticanaStaff \RemoveEmptyStaves} command may be used to +hide empty staves in ancient music contexts. Similarly, +@code{\RhythmicStaff \RemoveEmptyStaves} may be used to hide empty +@code{RhythmicStaff} contexts. + + +@predefined +@code{\Staff \RemoveEmptyStaves}, +@code{\VaticanaStaff \RemoveEmptyStaves}, +@code{\RhythmicStaff \RemoveEmptyStaves}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{removing-the-first-empty-line.ly} + + +@seealso +Music Glossary: +@rglos{Frenched staff}. + +Learning Manual: +@rlearning{Visibility and color of objects}. + +Notation Reference: +@ref{Changing context default settings}, +@ref{Staff symbol}, +@ref{Ossia staves}, +@ref{Hidden notes}, +@ref{Invisible rests}, +@ref{Visibility of objects}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{ChordNames}, +@rinternals{FiguredBass}, +@rinternals{Lyrics}, +@rinternals{Staff}, +@rinternals{VerticalAxisGroup}, +@rinternals{Staff_symbol_engraver}. + + +@knownissues + +Removing @code{Staff_symbol_engraver} also hides bar lines. If +bar line visibility is forced, formatting errors may occur. In +this case, use the following overrides instead of removing the +engraver: + +@example +\override StaffSymbol #'stencil = ##f +\override NoteHead #'no-ledgers = ##t +@end example + +For the Known issues and warnings associated with +@code{\Staff \RemoveEmptyStaves} see +@ref{Changing context default settings}. + +@node Writing parts +@subsection Writing parts + +This section explains how to insert tempo indications and +instrument names into a score. Methods to quote other voices and +format cue notes are also described. + +@menu +* Instrument names:: +* Quoting other voices:: +* Formatting cue notes:: +@end menu + +@node Instrument names +@unnumberedsubsubsec Instrument names + +@cindex instrument names +@cindex instrument names, short + +Instrument names can be printed on the left side of staves in the +@code{Staff}, @code{PianoStaff}, @code{StaffGroup}, @code{GrandStaff} +and @code{ChoirStaff} contexts. The value of +@code{instrumentName} is used for the first staff, and the value +of @code{shortInstrumentName} is used for all succeeding staves. + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"Violin " +\set Staff.shortInstrumentName = #"Vln " +c4.. g'16 c4.. g'16 +\break +c1 +@end lilypond + +Markup mode can be used to create more complicated instrument +names: + +@lilypond[verbatim,quote,relative=2] +\set Staff.instrumentName = \markup { + \column { "Clarinetti" + \line { "in B" \smaller \flat } } } +c4 c,16 d e f g2 +@end lilypond + +@cindex instrument names, centering + +When two or more staff contexts are grouped together, the +instrument names and short instrument names are centered by +default. To center multi-line instrument names, +@code{\center-column} must be used: + +@lilypond[verbatim,quote,indent=1.5\cm,relative=2] +<< + \new Staff { + \set Staff.instrumentName = #"Flute" + f2 g4 f + } + \new Staff { + \set Staff.instrumentName = \markup \center-column { + Clarinet + \line { "in B" \smaller \flat } + } + c4 b c2 + } +>> +@end lilypond + +@funindex indent +@funindex short-indent + +However, if the instrument names are longer, the instrument names +in a staff group may not be centered unless the @code{indent} and +@code{short-indent} settings are increased. For details about +these settings, see @ref{\paper variables for shifts and indents}. + +@lilypond[verbatim,quote,ragged-right] +\layout { + indent = 3.0\cm + short-indent = 1.5\cm +} + +\relative c'' << + \new Staff { + \set Staff.instrumentName = #"Alto Flute in G" + \set Staff.shortInstrumentName = #"Fl." + f2 g4 f \break + g4 f g2 + } + \new Staff { + \set Staff.instrumentName = #"Clarinet" + \set Staff.shortInstrumentName = #"Clar." + c,4 b c2 \break + c2 b4 c + } +>> +@end lilypond + +@cindex instrument names, adding to other contexts + +To add instrument names to other contexts (such as +@code{ChordNames} or @code{FiguredBass}), +@code{Instrument_name_engraver} must be added to that context. +For details, see @ref{Modifying context plug-ins}. + +@cindex instrument names, changing +@cindex changing instrument names + +Instrument names may be changed in the middle of a piece. +However, remember that @code{instrumentName} will not be +displayed in the middle of the piece, as it only appears +on the first staff: + +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = #"First" +\set Staff.shortInstrumentName = #"one" +c1 c c c \break +c1 c c c \break +\set Staff.instrumentName = #"Second" +\set Staff.shortInstrumentName = #"two" +c1 c c c \break +c1 c c c \break +@end lilypond + +@cindex instrument switch +@cindex switching instruments + +@funindex \addInstrumentDefinition +@funindex addInstrumentDefinition +@funindex \instrumentSwitch +@funindex instrumentSwitch + +If an instrument @emph{switch} is needed, +@code{\addInstrumentDefinition} may be used in combination with +@code{\instrumentSwitch} to create a detailed list of the +necessary changes for the switch. The +@code{\addInstrumentDefinition} command has two arguments: an +identifying string, and an association list of context properties +and values to be used for the instrument. It must be placed in +the toplevel scope. @code{\instrumentSwitch} is used in the music +expression to declare the instrument switch: + +@lilypond[verbatim,quote,ragged-right] +\addInstrumentDefinition #"contrabassoon" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Cbsn.") + (clefGlyph . "clefs.F") + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(make-bold-markup "cbsn.")) + (midiInstrument . "bassoon")) + +\new Staff \with { + instrumentName = #"Bassoon" +} +\relative c' { + \clef tenor + \compressFullBarRests + c2 g' + R1*16 + \instrumentSwitch "contrabassoon" + c,,2 g \break + c,1 ~ | c1 +} +@end lilypond + + +@seealso +Notation Reference: +@ref{\paper variables for shifts and indents}, +@ref{Modifying context plug-ins}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{InstrumentName}, +@rinternals{PianoStaff}, +@rinternals{Staff}. + + +@node Quoting other voices +@unnumberedsubsubsec Quoting other voices + +@cindex quote, voices +@cindex voices, quoting +@cindex fragments, quoting +@cindex cue notes + +@funindex \addQuote +@funindex addQuote +@funindex \quoteDuring +@funindex quoteDuring +@funindex \transposition +@funindex transposition + +It is very common for one voice to use the same notes as those from +another voice. For example, first and second violins playing the same +phrase during a particular passage of the music. This is done by +letting one voice @emph{quote} the other, without having to re-enter the +music all over again for the second voice. + +The @code{\addQuote} command, used in the top level scope, defines a +stream of music from which fragments can be quoted. + +The @code{\quoteDuring} command is used to indicate the point where the +quotation begins. It is followed by two arguments: the name of the +quoted voice, as defined with @code{\addQuote}, and a music expression +for the duration of the quote. + +@lilypond[verbatim,quote] +fluteNotes = \relative c'' { + a4 gis g gis | b4^"quoted" r8 ais\p a4( f) +} + +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 + +If the music expression used in @code{\quoteDuring} contains notes +instead of spacer or multimeasure rests then the quote will appear as +polyphony and may produce unexpected results. + +@lilypond[verbatim,quote] +fluteNotes = \relative c'' { + a4 gis g gis | b4^"quoted" r8 ais\p a4( f) +} + +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 + +The @code{\quoteDuring} command uses the @code{\transposition} settings +of both quoted and quoting parts to produce notes for the quoting part +that have the same sounding pitch as those in the quoted part. + +@lilypond[verbatim,quote] +clarinetNotes = \relative c'' { + \transposition bes + \key d \major + b4 ais a ais | cis4^"quoted" r8 bis\p b4( f) +} + +oboeNotes = \relative c'' { + c4 cis c b \quoteDuring #"clarinet" { s1 } +} + +\addQuote "clarinet" { \clarinetNotes } + + +\score { + << + \new Staff \with { instrumentName = "Clarinet" } \clarinetNotes + \new Staff \with { instrumentName = "Oboe" } \oboeNotes + >> +} +@end lilypond + +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 +@code{quotedEventTypes} context property. + +@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 + +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}, +@ref{Using tags}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{Music classes}, +@rinternals{QuoteMusic}, +@rinternals{Voice}. + +Installed Files: +@file{scm/define-event-classes.scm}. + + +@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}. + + +@node Formatting cue notes +@unnumberedsubsubsec Formatting cue notes + +@cindex cue notes +@cindex fragments +@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 + +@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{quotename} #@var{direction} #@var{music} +@end example + +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 @code{CueVoice} context and occurs simultaneously with the +@code{@var{music}}, which creates a polyphonic situation. The +@code{@var{direction}} takes the argument @code{UP} or @code{DOWN}, and +corresponds to first and second voices respectively determining how +the cue notes are printed in relation to the other voice. + +@lilypond[verbatim,quote] +fluteNotes = \relative c'' { + r2. c4 | d8 c d e fis2 | g2 d | +} + +oboeNotes = \relative c'' { + R1 + s1*0^\markup { \tiny "flute" } + \cueDuring #"flute" #UP { R1 } + g2 c, +} + +\addQuote "flute" { \fluteNotes } + +\new Staff { + \oboeNotes +} +@end lilypond + +@noindent +In the above example, the @code{Voice} context had to be +explicitly declared, or else the entire music expression would +belong to the @code{CueVoice} context. + +It is possible to adjust which aspects of the music are quoted with +@code{\cueDuring} by setting the @code{quotedCueEventTypes} +property. Its default value is @code{#'(note-event rest-event +tie-event beam-event tuplet-span-event)}, which means that only +notes, rests, ties, beams and tuplets are quoted, but not +articulations, dynamic marks, markup etc. + +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16(\f f e g f a) + g8 g16 g g2. +} +\addQuote "oboe" { \oboe } + +\new Voice \relative c'' { + \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event + beam-event tuplet-span-event + dynamic-event slur-event) + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond + +Markup can be used to show the name of the quoted instrument. Also, +if the cue notes require a change in clef, the original clef should +be restored at the end of the cue notes. + +@lilypond[verbatim,quote] +fluteNotes = \relative c'' { + r2. c4 d8 c d e fis2 g2 d2 +} + +bassoonNotes = \relative c { + \clef bass + R1 + \clef treble + s1*0^\markup { \tiny "flute" } + \cueDuring #"flute" #UP { R1 } + \clef bass + g4. b8 d2 +} + +\addQuote "flute" { \fluteNotes } + +\new Staff { + \bassoonNotes +} +@end lilypond + +@cindex removing cues +@cindex removing cue notes +@cindex cue notes, removing + +@funindex \killCues +@funindex killCues + +The @code{\killCues} command removes cue notes from a music +expression, so the same music expression can be used to produce +the instrument part with cues and the score. The @code{\killCues} +command removes only the notes and events that were quoted by +@code{\cueDuring}. Other markup associated with cues, such as clef +changes and a label identifying the source instrument, can be +tagged for selective inclusion in the score; see @ref{Using tags}. + +@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 } } + } +>> +@end lilypond + +Alternatively, Clef changes and instrument labels can be +collected into an instrument definition for repeated use, using +@code{\addInstrumentDefinition} described in +@ref{Instrument names}. + +@funindex \transposedCueDuring +@funindex transposedCueDuring + +Like @code{\quoteDuring}, @code{\cueDuring} takes instrument +transpositions into account. Cue notes are produced at the +pitches that would be written for the instrument receiving the cue +to produce the sounding pitches of the source instrument. + +To transpose cue notes differently, use +@code{\transposedCueDuring}. This command takes an extra argument +to specify (in absolute mode) the printed pitch that you want to +represent the sound of a concert middle C. This is useful for +taking cues from an instrument in a completely different register. + +@lilypond[verbatim,quote] +piccolo = \relative c''' { + \clef "treble^8" + R1 + c8 c c e g2 + c4 g g2 +} + +bassClarinetNotes = \relative c' { + \key d \major + \transposition bes, + d4 r a r + \transposedCueDuring #"piccolo" #UP d { R1 } + d4 r a r +} + +\addQuote "piccolo" { \piccolo } + +<< + \new Staff \piccolo + \new Staff \bassClarinetNotes +>> +@end lilypond + +@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 +the instrument part with cues and the score. The @code{\killCues} +command removes only the notes and events that were quoted by +@code{\cueDuring}. Other markup associated with cues, such as clef +changes and a label identifying the source instrument, can be +tagged for selective inclusion in the score; see @ref{Using tags}. + +@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 } } + } +>> +@end lilypond + +Alternatively, Clef changes and instrument labels can be +collected into an instrument definition for repeated use, using +@code{\addInstrumentDefinition} described in @ref{Instrument names}. + + +@seealso +Notation Reference: +@ref{Quoting other voices}, +@ref{Instrument transpositions}, +@ref{Instrument names}, +@ref{Musical cues}, +@ref{Using tags}. + +Snippets: +@rlsr{Staff notation}. + +Internals Reference: +@rinternals{CueVoice}, +@rinternals{Voice}. + + +@knownissues + +Collisions can occur with rests, when using @code{\cueDuring}, +between @code{Voice} and @code{CueVoice} contexts. + diff --git a/Documentation/notation/text.itely b/Documentation/notation/text.itely new file mode 100644 index 0000000000..d9ee4c52e5 --- /dev/null +++ b/Documentation/notation/text.itely @@ -0,0 +1,1549 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Text +@section Text + +@lilypondfile[quote]{text-headword.ly} + +This section explains how to include text (with various +formatting) in music scores. + +@noindent +Some text elements that are not dealt with here are discussed in other +specific sections: @ref{Vocal music}, @ref{Titles and headers}. + +@menu +* Writing text:: +* Formatting text:: +* Fonts:: +@end menu + +@node Writing text +@subsection Writing text + +This section introduces different ways of adding text to a score. + +@cindex Text, other languages +@warning{To write accented and special text (such as characters +from other languages), simply insert the characters directly into +the LilyPond file. The file must be saved as UTF-8. For more +information, see @ref{Text encoding}.} + +@menu +* Text scripts:: +* Text spanners:: +* Text marks:: +* Separate text:: +@end menu + + +@node Text scripts +@unnumberedsubsubsec Text scripts + +@cindex Text scripts +@cindex text items, non-empty +@cindex non-empty texts +@cindex quoted text + +Simple @qq{quoted text} indications may be added to a score, as +demonstrated in the following example. Such indications may be +manually placed above or below the staff, using the syntax described +in @ref{Direction and placement}. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e a4-"scherz." f +@end lilypond + +This syntax is actually a shorthand; more complex text formatting may be +added to a note by explicitly using a @code{\markup} block, as described +in @ref{Formatting text}. + +@lilypond[quote,verbatim,relative=2] +a8^\markup { \italic pizz. } g f e +a4_\markup { \tiny scherz. \bold molto } f +@end lilypond + +By default, text indications do not influence the note spacing. However, +their widths can be taken into account: in the following example, the +first text string does not affect spacing, whereas the second one does. + +@lilypond[quote,verbatim,relative=2] +a8^"pizz." g f e +\textLengthOn +a4_"scherzando" f +@end lilypond + +In addition to text scripts, articulations can be attached to notes. +For more information, see @ref{Articulations and ornamentations}. + +For more information about the relative ordering of text scripts and +articulations, see @rlearning{Placement of objects}. + +@funindex \textLengthOn +@funindex textLengthOn +@funindex \textLengthOff +@funindex textLengthOff + +@predefined +@code{\textLengthOn}, +@code{\textLengthOff}. +@endpredefined + + +@seealso +Learning Manual: +@rlearning{Placement of objects}. + +Notation Reference: +@ref{Formatting text}, +@ref{Direction and placement}, +@ref{Articulations and ornamentations}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + + +@cindex text outside margin +@cindex margin, text running over +@cindex text, keeping inside margin +@cindex lyrics, keeping inside margin + + +@knownissues +Checking to make sure that text scripts and lyrics are within the +margins requires additonal calculations. In cases where slightly faster +performance is desired, use + +@example +\override Score.PaperColumn #'keep-inside-line = ##f +@end example + + +@node Text spanners +@unnumberedsubsubsec Text spanners + +@cindex text spanners + +Some performance indications, e.g., @notation{rallentando} or +@notation{accelerando}, are written as text and are extended over +multiple notes with dotted lines. Such objects, called +@qq{spanners}, may be created from one note to another using the +following syntax: + +@lilypond[verbatim,quote,relative=2] +\override TextSpanner #'(bound-details left text) = "rit." +b1\startTextSpan +e,\stopTextSpan +@end lilypond + +@cindex text spanners, formatting +@cindex formatting text spanners + +@noindent +The string to be printed is set through object properties. By default +it is printed in italic characters, but different formatting can be +obtained using @code{\markup} blocks, as described in +@ref{Formatting text}. + +@lilypond[quote,relative=2,verbatim] +\override TextSpanner #'(bound-details left text) = + \markup { \upright "rit." } +b1\startTextSpan c +e,\stopTextSpan +@end lilypond + +The line style, as well as the text string, can be defined as an +object property. This syntax is described in @ref{Line styles}. + +@funindex \textSpannerUp +@funindex textSpannerUp +@funindex \textSpannerDown +@funindex textSpannerDown +@funindex \textSpannerNeutral +@funindex textSpannerNeutral + + +@predefined +@code{\textSpannerUp}, +@code{\textSpannerDown}, +@code{\textSpannerNeutral}. +@endpredefined + +@knownissues +LilyPond is only able to handle one text spanner per voice. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-text-spanner-postfix.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{dynamics-custom-text-spanner-postfix.ly} + +@seealso +Notation Reference: +@ref{Line styles}, +@ref{Dynamics}, +@ref{Formatting text}. + +Snippets: +@rlsr{Text}, +@rlsr{Expressive marks}. + +Internals Reference: +@rinternals{TextSpanner}. + + +@node Text marks +@unnumberedsubsubsec Text marks + + +@cindex text marks +@cindex marks, text +@cindex text on bar line +@cindex coda on bar line +@cindex segno on bar line +@cindex fermata on bar line +@cindex bar lines, symbols on + +@funindex \mark +@funindex mark +@funindex \markup +@funindex markup + +Various text elements may be added to a score using the syntax described +in @ref{Rehearsal marks}: + +@c \mark needs to be placed on a separate line (it's not +@c attached to an object like \markup is). -vv + +@lilypond[verbatim,quote,relative=2] +c4 +\mark "Allegro" +c c c +@end lilypond + +This syntax makes it possible to put any text on a bar line; +more complex text formatting may be added using a @code{\markup} +block, as described in @ref{Formatting text}: + +@lilypond[quote,verbatim,relative=1] +1 +\mark \markup { \italic { colla parte } } +2 +1 +@end lilypond + +@noindent +This syntax also allows to print special signs, like coda, segno +or fermata, by specifying the appropriate symbol name as explained in +@ref{Music notation inside markup}: + +@lilypond[quote,verbatim,relative=2] +2 +\mark \markup { \musicglyph #"scripts.ufermata" } +1 +@end lilypond + +@noindent +Such objects are only typeset above the top staff of the score; +depending on whether they are specified at the end or the middle of a +bar, they can be placed above the bar line or between notes. When +specified at a line break, the mark will be printed at the beginning of +the next line. + +@lilypond[quote,verbatim,relative=2] +\mark "Allegro" +c1 c +\mark "assai" \break +c c +@end lilypond + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-at-the-end-of-a-line.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{aligning-marks-with-various-notation-objects.ly} + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{printing-marks-on-every-staff.ly} + + +@seealso +Notation Reference: +@ref{Rehearsal marks}, +@ref{Formatting text}, +@ref{Music notation inside markup}, +@ref{The Feta font}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{MarkEvent}, +@rinternals{Mark_engraver}, +@rinternals{RehearsalMark}. + + +@node Separate text +@unnumberedsubsubsec Separate text + +@cindex separate text +@cindex text, separate +@cindex standalone text +@cindex top-level text +@cindex text, top-level +@cindex text, standalone + +@funindex \markup +@funindex markup + +A @code{\markup} block can exist by itself, outside of any +@code{\score} block, as a @qq{top-level expression}. This syntax +is described in @ref{File structure}. + +@lilypond[verbatim,quote] +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +@end lilypond + +@noindent +This allows printing text separately from the music, which is +particularly useful when the input file contains several music pieces, +as described in @ref{Multiple scores in a book}. + +@lilypond[quote,verbatim] +\score { + c'1 +} +\markup { + Tomorrow, and tomorrow, and tomorrow... +} +\score { + c'1 +} +@end lilypond + +Separate text blocks can be spread over multiple pages, +making it possible to print text documents or books entirely +within LilyPond. This feature, and the specific syntax it +requires, are described in @ref{Multi-page markup}. + + +@funindex \markup +@funindex markup +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markup}, +@code{\markuplines}. +@endpredefined + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{stand-alone-two-column-markup.ly} + + +@seealso +Notation Reference: +@ref{Formatting text}, +@ref{File structure}, +@ref{Multiple scores in a book}, +@ref{Multi-page markup}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + + +@node Formatting text +@subsection Formatting text + +This section presents basic and advanced text formatting, +using the @code{\markup} mode specific syntax. + +@menu +* Text markup introduction:: +* Selecting font and font size:: +* Text alignment:: +* Graphic notation inside markup:: +* Music notation inside markup:: +* Multi-page markup:: +@end menu + +@node Text markup introduction +@unnumberedsubsubsec Text markup introduction + +@cindex markup +@cindex text markup +@cindex markup text +@cindex typeset text + +@funindex \markup +@funindex markup + +A @code{\markup} block is used to typeset text with an extensible +syntax called @qq{markup mode}. + +@cindex markup expressions +@cindex expressions, markup +@cindex markup syntax +@cindex syntax, markup + +The markup syntax is similar to LilyPond's usual syntax: a +@code{\markup} expression is enclosed in curly braces +@code{@{@dots{} @}}. A single word is regarded as a minimal expression, +and therefore does not need to be enclosed with braces. + +Unlike simple @qq{quoted text} indications, @code{\markup} blocks may +contain nested expressions or markup commands, entered using the +backslash @code{\} character. Such commands only affect the first +following expression. + +@lilypond[quote,verbatim,relative=2] +a1-\markup intenso +a2^\markup { poco \italic più forte } +c e1 +d2_\markup { \italic "string. assai" } +e +b1^\markup { \bold { molto \italic agitato } } +c +@end lilypond + +@cindex special characters in markup mode +@cindex markup mode, special characters +@cindex reserved characters, printing +@cindex printing reserved characters +@cindex printing special characters +@cindex quoted text in markup mode +@cindex markup mode, quoted text + +A @code{\markup} block may also contain quoted text strings. Such +strings are treated as minimal text expressions, and therefore any +markup command or special character (such as @code{\} and @code{#}) +will be printed verbatim without affecting the formatting of the text. +Double quotation marks themselves may be printed by preceding them +with backslashes. + +@lilypond[quote,verbatim,relative=2] +a1^"\italic markup..." +a_\markup { \italic "... prints \"italic\" letters!" } +a a +@end lilypond + +To be treated as a distinct expression, a list of words needs to be +enclosed with double quotes or preceded by a command. The way markup +expressions are defined affects how these expressions will be stacked, +centered and aligned; in the following example, the second +@code{\markup} expression is treated the same as the first one: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { \center-column { a bbb c } } +c1^\markup { \center-column { a { bbb c } } } +c1^\markup { \center-column { a \line { bbb c } } } +c1^\markup { \center-column { a "bbb c" } } +@end lilypond + +Markups can be stored in variables. Such variables may be +directly attached to notes: + +@lilypond[quote,verbatim] +allegro = \markup { \bold \large Allegro } + +{ + d''8.^\allegro + d'16 d'4 r2 +} +@end lilypond + + +@noindent +An exhaustive list of @code{\markup}-specific commands can be found in +@ref{Text markup commands}. + + +@seealso +Notation Reference: +@ref{Text markup commands}. + +Snippets: +@rlsr{Text}. + +Installed Files: +@file{scm/markup.scm}. + + +@knownissues +Syntax errors for markup mode can be confusing. + + +@node Selecting font and font size +@unnumberedsubsubsec Selecting font and font size + +@cindex font switching +@cindex changing fonts +@cindex switching fonts + +@funindex \italic +@funindex italic +@funindex \bold +@funindex bold +@funindex \underline +@funindex underline + +Basic font switching is supported in markup mode: + +@lilypond[quote,verbatim,relative=2] +d1^\markup { + \bold { Più mosso } + \italic { non troppo \underline Vivo } +} +r2 r4 r8 +d,_\markup { \italic quasi \smallCaps Tromba } +f1 d2 r +@end lilypond + +@cindex font size +@cindex text size + +@funindex \fontsize +@funindex fontsize +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger +@funindex \magnify +@funindex magnify + +The size of the characters can also be altered in different ways: +@itemize +@item +the font size can be set to predefined standard sizes, + +@item +the font size can be set to an absolute value, + +@item +the font size can also be changed relatively to its previous value. +@end itemize + +@noindent +The following example demonstrates these three methods: + +@lilypond[quote,verbatim,relative=1] +f1_\markup { + \tiny espressivo + \large e + \normalsize intenso +} +a^\markup { + \fontsize #5 Sinfonia + \fontsize #2 da + \fontsize #3 camera +} +bes^\markup { (con + \larger grande + \smaller emozione + \magnify #0.6 { e sentimento } ) +} +d c2 r8 c bes a g1 +@end lilypond + +@cindex subscript +@cindex superscript + +@funindex \super +@funindex super +@funindex \sub +@funindex sub + +Text may be printed as subscript or superscript. By default these are +printed in a smaller size, but a normal size can be used as well: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { 1 \super st movement } + \line { 1 \normal-size-super st movement + \sub { (part two) } } + } +} +@end lilypond + +@cindex font families + +The markup mode provides an easy way to select alternate font +families. The default serif font, of roman type, is automatically +selected unless specified otherwise; on the last line of the following +example, there is no difference between the first and the second word. + +@lilypond[quote,verbatim] +\markup { + \column { + \line { Act \number 1 } + \line { \sans { Scene I. } } + \line { \typewriter { Verona. An open place. } } + \line { Enter \roman Valentine and Proteus. } + } +} +@end lilypond + +@noindent +Some of these font families, used for specific items such as numbers +or dynamics, do not provide all characters, as mentioned in +@ref{New dynamic marks} and @ref{Manual repeat marks}. + +@c \concat is actually documented in Align (it is not +@c a font-switching command). But we need it here. -vv + +When used inside a word, some font-switching or formatting commands +may produce an unwanted blank space. This can easily be solved by +concatenating the text elements together: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \concat { 1 \super st } + movement + } + \line { + \concat { \dynamic p , } + \italic { con dolce espressione } + } + } +} +@end lilypond + +An exhaustive list of font switching commands and custom font usage +commands can be found in @ref{Font}. + +Defining custom font sets is also possible, as explained in +@ref{Fonts}. + +@funindex \teeny +@funindex teeny +@funindex \tiny +@funindex tiny +@funindex \small +@funindex small +@funindex \normalsize +@funindex normalsize +@funindex \large +@funindex large +@funindex \huge +@funindex huge +@funindex \smaller +@funindex smaller +@funindex \larger +@funindex larger + + +@predefined +@code{\teeny}, +@code{\tiny}, +@code{\small}, +@code{\normalsize}, +@code{\large}, +@code{\huge}, +@code{\smaller}, +@code{\larger}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Font}, +@ref{New dynamic marks}, +@ref{Manual repeat marks}, +@ref{Fonts}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + +Installed Files: +@file{scm/define-markup-commands.scm}. + +@knownissues +Using the font sizing commands @code{\teeny}, @code{\tiny}, +@code{\small}, @code{\normalsize}, @code{\large}, and +@code{\huge} will lead to inconsistent line spacing compared to +using @code{\fontsize}. + + +@node Text alignment +@unnumberedsubsubsec Text alignment + +@cindex text, aligning +@cindex aligning text +@cindex aligning markup text +@cindex aligning markups +@cindex markups, aligning +@cindex markup text, aligning + +This subsection discusses how to place text in markup mode. Markup +objects can also be moved as a whole, using the syntax described in +@rlearning{Moving objects}. + +@c Padding commands should be mentioned on this page, but +@c most of these require \box to be more clearly illustrated. -vv + +@cindex text, horizontal alignment +@cindex horizontal text alignment + +@funindex \left-align +@funindex left-align +@funindex \center-align +@funindex center-align +@funindex \right-align +@funindex right-align + +Markup objects may be aligned in different ways. By default, a text +indication is aligned on its left edge: in the following example, +there is no difference between the first and the second markup. + +@lilypond[quote,verbatim,relative=2] +d1-\markup { poco } +f +d-\markup { \left-align poco } +f +d-\markup { \center-align { poco } } +f +d-\markup { \right-align poco } +@end lilypond + +@funindex \halign +@funindex halign + +Horizontal alignment may be fine-tuned using a numeric value: + +@lilypond[quote,verbatim,relative=2] +a1-\markup { \halign #-1 poco } +e' +a,-\markup { \halign #0 poco } +e' +a,-\markup { \halign #0.5 poco } +e' +a,-\markup { \halign #2 poco } +@end lilypond + +@noindent +Some objects may have alignment procedures of their own, and therefore +are not affected by these commands. It is possible to move such +markup objects as a whole, as shown for instance in +@ref{Text marks}. + +@cindex text, vertical alignment +@cindex vertical text alignment + +@funindex \raise +@funindex raise +@funindex \lower +@funindex lower +@funindex \null +@funindex null + +@c QUERY Should the function of ``\null'' be clarified? rp + +Vertical alignment is a bit more complex. As stated above, markup +objects can be moved as a whole; however, it is also possible to move +specific elements inside a markup block. In this case, the element to +be moved needs to be preceded with an @emph{anchor point}, that can be +another markup element or an invisible object. The following example +demonstrates these two possibilities; the last markup in this example +has no anchor point, and therefore is not moved. + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \raise #2 { Scène 1 } +} +a' +g_\markup { + \null + \lower #4 \bold { Très modéré } +} +a +d,^\markup { + \raise #4 \italic { Une forêt. } +} +a'4 a g2 a +@end lilypond + +@funindex \general-align +@funindex general-align +@funindex \translate +@funindex translate +@funindex \translate-scaled +@funindex translate-scaled + +Some commands can affect both the horizontal and vertical alignment of +text objects in markup mode. Any object affected by these commands +must be preceded with an anchor point: + +@lilypond[quote,verbatim,relative=1] +d2^\markup { + Acte I + \translate #'(-1 . 2) "Scène 1" +} +a' +g_\markup { + \null + \general-align #Y #3.2 \bold "Très modéré" +} +a +d,^\markup { + \null + \translate-scaled #'(-1 . 2) \teeny "Une forêt." +} +a'4 a g2 a +@end lilypond + +@cindex multi-line markup +@cindex markup, multi-line +@cindex multi-line text +@cindex text, multi-line +@cindex text in columns +@cindex columns, text + +@funindex \column +@funindex column +@funindex \center-column +@funindex center-column + +A markup object may include several lines of text. In the following +example, each element or expression is placed on its own line, either +left-aligned or centered: + +@lilypond[quote,verbatim] +\markup { + \column { + a + "b c" + \line { d e f } + } + \hspace #10 + \center-column { + a + "b c" + \line { d e f } + } +} +@end lilypond + +@cindex centering text on the page +@cindex text, centering on the page +@cindex markup, centering on the page + +@funindex \fill-line +@funindex fill-line + +Similarly, a list of elements or expressions may be spread to fill the +entire horizontal line width (if there is only one element, it will be +centered on the page). These expressions can, in turn, include +multi-line text or any other markup expression: + +@lilypond[quote,verbatim] +\markup { + \fill-line { + \line { William S. Gilbert } + \center-column { + \huge \smallCaps "The Mikado" + or + \smallCaps "The Town of Titipu" + } + \line { Sir Arthur Sullivan } + } +} +\markup { + \fill-line { 1885 } +} +@end lilypond + +@cindex wordwrapped text +@cindex justified text +@cindex text, justified +@cindex text, wordwrapped +@cindex markup text, wordwrapped +@cindex markup text, justified + +@funindex \wordwrap +@funindex wordwrap +@funindex \justify +@funindex justify + +Long text indications can also be automatically wrapped accordingly to +the given line width. These will be either left-aligned or justified, +as shown in the following example. + +@lilypond[quote,verbatim] +\markup { + \column { + \line \smallCaps { La vida breve } + \line \bold { Acto I } + \wordwrap \italic { + (La escena representa el corral de una casa de + gitanos en el Albaicín de Granada. Al fondo una + puerta por la que se ve el negro interior de + una Fragua, iluminado por los rojos resplandores + del fuego.) + } + \hspace #0 + + \line \bold { Acto II } + \override #'(line-width . 50) + \justify \italic { + (Calle de Granada. Fachada de la casa de Carmela + y su hermano Manuel con grandes ventanas abiertas + a través de las que se ve el patio + donde se celebra una alegre fiesta) + } + } +} +@end lilypond + +@cindex text alignment commands +@cindex markup text alignment commands +@cindex alignment, text, commands + +An exhaustive list of text alignment commands can be found in +@ref{Align}. + + +@seealso +Learning Manual: +@rlearning{Moving objects}. + +Notation Reference: +@ref{Align}, +@ref{Text marks}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + +Installed Files: +@file{scm/define-markup-commands.scm}. + + +@node Graphic notation inside markup +@unnumberedsubsubsec Graphic notation inside markup + +@cindex graphics, embedding +@cindex drawing graphic objects +@cindex graphic objects, drawing +@cindex embedding graphic objects +@cindex graphic objects, embedding + +Various graphic objects may be added to a score, using markup +commands. + +@cindex decorating text +@cindex framing text +@cindex text, framing +@cindex text, decorating +@cindex markup text, decorating +@cindex markup text, framing + +@funindex \box +@funindex box +@funindex \circle +@funindex circle +@funindex \rounded-box +@funindex rounded-box +@funindex \bracket +@funindex bracket +@funindex \hbracket +@funindex hbracket + +Some markup commands allow decoration of text elements with graphics, +as demonstrated in the following example. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \circle Jack + \box "in the box" + \null + \line { + Erik Satie + \hspace #3 + \bracket "1866 - 1925" + } + \null + \rounded-box \bold Prelude + } +} +@end lilypond + +@cindex padding around text +@cindex text padding +@cindex markup text padding + +@funindex \pad-markup +@funindex pad-markup +@funindex \pad-x +@funindex pad-x +@funindex \pad-to-box +@funindex pad-to-box +@funindex \pad-around +@funindex pad-around + +Some commands may require an increase in the padding around the text; +this is achieved with some markup commands exhaustively described in +@ref{Align}. + +@lilypond[quote,verbatim] +\markup \fill-line { + \center-column { + \box "Charles Ives (1874 - 1954)" + \null + \box \pad-markup #2 "THE UNANSWERED QUESTION" + \box \pad-x #8 "A Cosmic Landscape" + \null + } +} +\markup \column { + \line { + \hspace #10 + \box \pad-to-box #'(-5 . 20) #'(0 . 5) + \bold "Largo to Presto" + } + \pad-around #3 + "String quartet keeps very even time, +Flute quartet keeps very uneven time." +} +@end lilypond + +@cindex graphic notation +@cindex symbols, non-musical +@cindex non-musical symbols +@cindex notation, graphic + +@funindex \combine +@funindex combine +@funindex \draw-circle +@funindex draw-circle +@funindex \filled-box +@funindex filled-box +@funindex \triangle +@funindex triangle +@funindex \draw-line +@funindex draw-line +@funindex \arrow-head +@funindex arrow-head + +Other graphic elements or symbols may be printed without requiring any +text. As with any markup expression, such objects can be combined. + +@lilypond[quote,verbatim] +\markup { + \combine + \draw-circle #4 #0.4 ##f + \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 + \hspace #5 + + \center-column { + \triangle ##t + \combine + \draw-line #'(0 . 4) + \arrow-head #Y #DOWN ##f + } +} +@end lilypond + +@cindex embedded graphics +@cindex images, embedding +@cindex graphics, embedding +@cindex postscript + +@funindex \epsfile +@funindex epsfile +@funindex \postscript +@funindex postscript + +Advanced graphic features include the ability to include external +image files converted to the Encapsulated PostScript format +(@emph{eps}), or to directly embed graphics into the input file, using +native PostScript code. In such a case, it may be useful to +explicitly specify the size of the drawing, as demonstrated below: + +@lilypond[quote,verbatim,relative=1] +c1^\markup { + \combine + \epsfile #X #10 #"./context-example.eps" + \with-dimensions #'(0 . 6) #'(0 . 10) + \postscript #" + -2 3 translate + 2.7 2 scale + newpath + 2 -1 moveto + 4 -2 4 1 1 arct + 4 2 3 3 1 arct + 0 4 0 3 1 arct + 0 0 1 -1 1 arct + closepath + stroke" + } +c +@end lilypond + +An exhaustive list of graphics-specific commands can be found in +@ref{Graphic}. + + +@seealso +Notation Reference: +@ref{Graphic}, +@ref{Editorial annotations}, +@ref{Align}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + +Installed Files: +@file{scm/define-markup-commands.scm}, +@file{scm/stencil.scm}. + + +@node Music notation inside markup +@unnumberedsubsubsec Music notation inside markup + +@cindex notation inside markup +@cindex music inside markup +@cindex markup, music notation inside + +Various musical notation elements may be added to a score, inside a +markup object. + +Notes and accidentals can be entered using markup commands: + +@lilypond[quote,verbatim,relative=2] +a2 a^\markup { + \note #"4" #1 + = + \note-by-number #1 #1 #1.5 +} +b1_\markup { + \natural \semiflat \flat + \sesquiflat \doubleflat +} +\glissando +a1_\markup { + \natural \semisharp \sharp + \sesquisharp \doublesharp +} +\glissando b +@end lilypond + +Other notation objects may also be printed +in markup mode: + +@lilypond[quote,verbatim,relative=1] +g1 bes +ees-\markup { + \finger 4 + \tied-lyric #"~" + \finger 1 +} +fis_\markup { \dynamic rf } +bes^\markup { + \beam #8 #0.1 #0.5 +} +cis +d-\markup { + \markalphabet #8 + \markletter #8 +} +@end lilypond + +More generally, any available musical symbol may be included +separately in a markup object, as demonstrated below; an exhaustive +list of these symbols and their names can be found in +@ref{The Feta font}. + +@lilypond[quote,verbatim,relative=2] +c2 +c'^\markup { \musicglyph #"eight" } +c,4 +c,8._\markup { \musicglyph #"clefs.G_change" } +c16 +c2^\markup { \musicglyph #"timesig.neomensural94" } +@end lilypond + +Another way of printing non-text glyphs is described in +@ref{Fonts explained}. This is useful for printing braces of various +sizes. + +The markup mode also supports diagrams for specific +instruments: + +@lilypond[quote,verbatim,relative=2] +c1^\markup { + \fret-diagram-terse #"x;x;o;2;3;2;" +} +c^\markup { + \harp-pedal #"^-v|--ov^" +} +c +c^\markup { + \combine + \musicglyph #"accordion.discant" + \combine + \raise #0.5 \musicglyph #"accordion.dot" + \raise #1.5 \musicglyph #"accordion.dot" +} +@end lilypond + +@c The accordion diagram is actually taken from a snippet. + +@noindent +Such diagrams are documented in @ref{Instrument Specific Markup}. + +@cindex score inside markup +@cindex markup, score inside + +A whole score can even be nested inside a markup object. In such a +case, the nested @code{\score} block must contain a @code{\layout} +block, as demonstrated here: + +@lilypond[quote,verbatim,relative=1] +c4 d^\markup { + \score { + \relative c' { c4 d e f } + \layout { } + } +} +e f | +c d e f +@end lilypond + +An exhaustive list of music notation related commands can be found in +@ref{Music}. + + +@seealso +Notation Reference: +@ref{Music}, +@ref{The Feta font}, +@ref{Fonts explained}. + +Snippets: +@rlsr{Text}. + +Internals Reference: +@rinternals{TextScript}. + +Installed Files: +@file{scm/define-markup-commands.scm}, +@file{scm/fret-diagrams.scm}, +@file{scm/harp-pedals.scm}. + + +@node Multi-page markup +@unnumberedsubsubsec Multi-page markup + +@cindex multi-page markup +@cindex markup, multi-page +@cindex markup text, multi-page +@cindex text spread over multiple pages + +@funindex \markuplines +@funindex markuplines +@funindex \justified-lines +@funindex justified-lines +@funindex \wordwrap-lines +@funindex wordwrap-lines + +Although standard markup objects are not breakable, a specific syntax +makes it possible to enter lines of text that can spread over multiple +pages: + +@lilypond[quote,verbatim] +\markuplines { + \justified-lines { + A very long text of justified lines. + ... + } + \wordwrap-lines { + Another very long paragraph. + ... + } + ... +} +@end lilypond + +This syntax accepts a list of markups, that can be +@itemize +@item +the result of a markup list command, +@item +a list of markups, +@item +a list of markup lists. +@end itemize + +An exhaustive list of markup list commands can be found in +@ref{Text markup list commands}. + + +@seealso +Notation Reference: +@ref{Text markup list commands}, + +Snippets: +@rlsr{Text}. + +Extending: +@rextend{New markup list command definition}. + +Internals Reference: +@rinternals{TextScript}. + +Installed Files: +@file{scm/define-markup-commands.scm}. + + +@funindex \markuplines +@funindex markuplines + +@predefined +@code{\markuplines}. +@endpredefined + + +@node Fonts +@subsection Fonts + +This section presents the way fonts are handled, and how they may be +changed in scores. + +@menu +* Fonts explained:: +* Single entry fonts:: +* Entire document fonts:: +@end menu + +@node Fonts explained +@unnumberedsubsubsec Fonts explained + +@cindex Pango +@cindex fonts, explained +@cindex braces, various sizes +@cindex fonts, non-text in markup +@cindex non-text fonts in markup + +@funindex font-interface + +Fonts are handled through several libraries. FontConfig is used to +detect available fonts on the system; the selected fonts are rendered +using Pango. + +Music notation fonts can be described as a set of specific glyphs, +ordered in several families. The following syntax allows various +LilyPond @code{feta} non-text fonts to be used directly in markup +mode: + +@lilypond[quote,verbatim,relative=2] +a1^\markup { + \vcenter { + \override #'(font-encoding . fetaBraces) + \lookup #"brace120" + \override #'(font-encoding . fetaText) + \column { 1 3 sf } + \override #'(font-encoding . fetaMusic) + \lookup #"noteheads.s0petrucci" + } +} +@end lilypond + +@noindent +However, all these glyphs except the braces of various sizes contained +in @code{fetaBraces} are available using the simpler syntax described +in @ref{Music notation inside markup}. + +When using the glyphs contained in @code{fetaBraces}, the size of the +brace is specified by the numerical part of the glyph name, in +arbitrary units. Any integer from @code{0} to @code{575} inclusive +may be specified, @code{0} giving the smallest brace. The optimum +value must be determined by trial and error. These glyphs are all +left braces; right braces may be obtained by rotation, see +@ref{Rotating objects}. + +Three families of text fonts are made available: the @emph{roman} +(serif) font, that defaults to New Century Schoolbook, the +@emph{sans} font and the monospaced @emph{typewriter} font -- these +last two families are determined by the Pango installation. + +Each family may include different shapes and series. The following +example demonstrates the ability to select alternate families, shapes, +series and sizes. The value supplied to @code{font-size} is the +required change from the default size. + +@lilypond[quote,verbatim,relative=2] +\override Score.RehearsalMark #'font-family = #'typewriter +\mark \markup "Ouverture" +\override Voice.TextScript #'font-shape = #'italic +\override Voice.TextScript #'font-series = #'bold +d2.^\markup "Allegro" +\override Voice.TextScript #'font-size = #-3 +c4^smaller +@end lilypond + +@noindent +A similar syntax may be used in markup mode; however in this case it +is preferable to use the simpler syntax explained in +@ref{Selecting font and font size}: + +@lilypond[quote,verbatim] +\markup { + \column { + \line { + \override #'(font-shape . italic) + \override #'(font-size . 4) + Idomeneo, + } + \line { + \override #'(font-family . typewriter) + { + \override #'(font-series . bold) + re + di + } + \override #'(font-family . sans) + Creta + } + } +} +@end lilypond + +Although it is easy to switch between preconfigured fonts, it is also +possible to use other fonts, as explained in the following sections: +@ref{Single entry fonts} and @ref{Entire document fonts}. + + +@seealso +Notation Reference: +@ref{The Feta font}, +@ref{Music notation inside markup}, +@ref{Rotating objects}, +@ref{Selecting font and font size}, +@ref{Font}. + + +@node Single entry fonts +@unnumberedsubsubsec Single entry fonts + +Any font that is installed on the operating system and recognized by +FontConfig may be used in a score, using the following syntax: + +@lilypond[quote,verbatim,relative=2] +\override Staff.TimeSignature #'font-name = #"Bitstream Charter" +\override Staff.TimeSignature #'font-size = #2 +\time 3/4 + +a1_\markup { + \override #'(font-name . "Vera Bold") + { Vera Bold } +} +@end lilypond + +@cindex fonts, finding available +@cindex finding available fonts +@cindex listing available fonts +@cindex available fonts, listing + +@funindex show-available-fonts + +The following command displays a list of all available fonts on the +operating system: + +@example +lilypond -dshow-available-fonts x +@end example + + +@seealso +Notation Reference: +@ref{Fonts explained}, +@ref{Entire document fonts}. + +Snippets: +@rlsr{Text}. + +@c A source file gets never installed... +@c Installed Files: +@c @file{lily/font-config-scheme.cc}. + + +@node Entire document fonts +@unnumberedsubsubsec Entire document fonts + +It is possible to change the fonts to be used as the default fonts in +the @emph{roman}, @emph{sans} and @emph{typewriter} font families by +specifying them, in that order, as shown in the example below. For an +explanation of fonts, see @ref{Fonts explained}. + +@cindex font families, setting +@cindex fonts, changing for entire document + +@funindex make-pango-font-tree + +@lilypond[verbatim,quote] +\paper { + myStaffSize = #20 + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" + (/ myStaffSize 20))) +} + +\relative c'{ + c1-\markup { + roman, + \sans sans, + \typewriter typewriter. } +} +@end lilypond + +@c we don't do Helvetica / Courier, since GS incorrectly loads +@c Apple TTF fonts + + +@seealso +Notation Reference: +@ref{Fonts explained}, +@ref{Single entry fonts}, +@ref{Selecting font and font size}, +@ref{Font}. + diff --git a/Documentation/notation/unfretted-strings.itely b/Documentation/notation/unfretted-strings.itely new file mode 100644 index 0000000000..76bf1ceb79 --- /dev/null +++ b/Documentation/notation/unfretted-strings.itely @@ -0,0 +1,221 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Unfretted string instruments +@section Unfretted string instruments + +@lilypondfile[quote] +{unfretted-headword.ly} + +@cindex orchestral strings +@cindex strings, orchestral +@cindex strings, writing for + +This section provides information and references which are helpful +when writing for unfretted string instruments, principally +orchestral strings. + +@menu +* Common notation for unfretted strings:: +@end menu + +@node Common notation for unfretted strings +@subsection Common notation for unfretted strings + +There is little specialist notation for unfretted string +instruments. The music is notated on a single staff, and +usually only a single voice is required. Two voices might +be required for some double-stopped or divisi passages. + +@menu +* References for unfretted strings:: +* Bowing indications:: +* Harmonics:: +* Snap (Bartok) pizzicato:: +@end menu + +@node References for unfretted strings +@unnumberedsubsubsec References for unfretted strings + +Most of the notation which is useful for orchestral strings +and other bowed instruments is covered elsewhere: + +@itemize + +@item Textual indications such as @qq{pizz.} and @qq{arco} are +added as simple text -- see @ref{Text scripts}. + +@item Fingerings, including the thumb indication, are described +in @ref{Fingering instructions}. + +@item Double stopping is normally indicated by writing a chord, +see @ref{Chorded notes}. Directives for playing chords may be +added, see @ref{Arpeggio}. + +@item A template for a string quartet can be found in +@rlearning{String quartet}. Others are shown in the snippets. + +@end itemize + + +@seealso +Learning Manual: +@rlearning{String quartet}. + +Notation Reference: +@ref{Text scripts}, +@ref{Fingering instructions}, +@ref{Chorded notes}, +@ref{Arpeggio}. + +Snippets: +@rlsr{Unfretted strings}. + + +@node Bowing indications +@unnumberedsubsubsec Bowing indications + +@funindex \upbow +@funindex \downbow +@funindex \open + +@cindex bowing indications +@cindex up bow indication +@cindex down bow indication +@cindex open string indication +@cindex string, indicating open + +Bowing indications are created as articulations, which are +described in @ref{Articulations and ornamentations}. + +The bowing commands, @code{\upbow} and @code{\downbow}, are used +with slurs as follows: + +@lilypond[verbatim,quote,relative=2] +c4(\downbow d) e(\upbow f) +@end lilypond + +@noindent +and the following example shows three ways in which an open A +string on a violin might be indicated: + +@lilypond[verbatim,quote,relative=2] +a4 \open +a^\markup { \teeny "II" } +a2^\markup { \small "sul A" } +@end lilypond + + +@predefined +@code{\downbow}, +@code{\upbow}, +@code{\open}. +@endpredefined + + +@seealso +Notation Reference: +@ref{Articulations and ornamentations}, +@ref{Slurs}. + + +@node Harmonics +@unnumberedsubsubsec Harmonics + +@funindex \harmonic + +@strong{@i{Natural harmonics}} + +@cindex note heads, diamond-shaped +@cindex diamond-shaped note heads +@cindex natural harmonics +@cindex harmonics, natural +@funindex \harmonicsOn +@funindex \harmonicsOff + +Natural harmonics can be notated in several ways. A diamond-shaped +note head generally means to touch the string where you would stop +the note if it were not a diamond. + +@lilypond[verbatim,quote,relative=2] +d4 e4. +\harmonicsOn +d8 e e +d4 e4. +\harmonicsOff +d8 e e +@end lilypond + +Alternatively a normal note head is shown at the pitch to be +sounded together with a small circle to indicate it should be +played as a harmonic: + +@lilypond[verbatim,quote,relative=2] +d2^\flageolet d_\flageolet +@end lilypond + +A smaller circle may be created, see the snippet list in +@ref{References for unfretted strings}. + +@strong{@i{Artificial harmonics}} + +@cindex artificial harmonics +@cindex harmonics, artificial + +Artificial harmonics are notated with two notes, one with a normal +note head indicating the stopped position and one with an open +diamond note head to indicate the harmonic position. + +@c TODO If the default for harmonicDots is changed, change this +Artificial harmonics indicated with @code{\harmonic} do not show the +dots. The context property @code{harmonicDots} should be set if +dots are required. + +@lilypond[verbatim,quote,relative=1] +2. 4 +\set harmonicDots = ##t +2. 4 +@end lilypond + +@warning{@code{@bs{}harmonic} @strong{must} be placed inside a +chord construct even if there is only a single note. Normally +@code{@bs{}harmonicsOn} would be used in this situation.} + + +@seealso +Music Glossary: +@rglos{harmonics}. + +Notation Reference: +@ref{Special note heads}, +@ref{References for unfretted strings}. + + +@node Snap (Bartok) pizzicato +@unnumberedsubsubsec Snap (Bartók) pizzicato + +@cindex pizzicato, Bartók +@cindex pizzicato, snap +@cindex Bartók pizzicato +@cindex snap pizzicato + +A @notation{snap pizzicato} (also known as @qq{Bartok pizz}) is a +type of pizzicato where the string is deliberately plucked upwards +(rather than sideways) such that it hits the fingerboard. + +@lilypond[verbatim,quote,relative=1] +c4\snappizzicato +4\snappizzicato +4^\snappizzicato +4_\snappizzicato +@end lilypond + + diff --git a/Documentation/notation/vocal.itely b/Documentation/notation/vocal.itely new file mode 100644 index 0000000000..b8f13106e3 --- /dev/null +++ b/Documentation/notation/vocal.itely @@ -0,0 +1,3243 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Vocal music +@section Vocal music + +@lilypondfile[quote]{vocal-headword.ly} + +This section explains how to typeset vocal music, and make sure +that the lyrics will be aligned with the notes of their melody. + +@menu +* Common notation for vocal music:: +* Techniques specific to lyrics:: +* Stanzas:: +* Songs:: +* Choral:: +* Opera and stage musicals:: +* Chants psalms and hymns:: +* Ancient vocal music:: + +@end menu + + +@node Common notation for vocal music +@subsection Common notation for vocal music + +This section discusses issues common to most types of vocal music. + +@menu +* References for vocal music:: +* Entering lyrics:: +* Aligning lyrics to a melody:: +* Automatic syllable durations:: +* Manual syllable durations:: +* Multiple syllables to one note:: +* Multiple notes to one syllable:: +* Extenders and hyphens:: +@end menu + + +@node References for vocal music +@unnumberedsubsubsec References for vocal music + +This section indicates where to find details of notation issues +that may arise in any type of vocal music. + +@itemize + +@item +Most styles of vocal music use written text as lyrics. An +introduction to this notation is to be found in +@rlearning{Setting simple songs}. + +@item +Vocal music is likely to require the use of @code{markup} mode, +either for lyrics or for other text elements (characters' names, +etc.) This syntax is described in @ref{Text markup introduction}. + +@item +@notation{Ambitus} may be added at the beginning of vocal staves, +as explained in @ref{Ambitus}. + +@item +Dynamic markings by default are placed below the staff, but in +choral music they are usually placed above the staff in order to +avoid the lyrics, as explained in @ref{Score layouts for choral}. + +@end itemize + +@seealso +Music Glossary: +@rglos{ambitus}. + +Learning Manual: +@rlearning{Setting simple songs}. + +Notation Reference: +@ref{Text markup introduction}, +@ref{Ambitus}, +@ref{Score layouts for choral}. + +Snippets: +@rlsr{Vocal music}. + +@node Entering lyrics +@unnumberedsubsubsec Entering lyrics + +@cindex lyrics, entering +@cindex entering lyrics +@cindex formatting in lyrics +@cindex lyrics, formatting +@cindex punctuation in lyrics +@cindex lyrics punctuation +@cindex spaces in lyrics +@cindex quotes in lyrics +@funindex \lyricmode + +@c TODO should we explain hyphens here + +Lyrics are entered in a special input mode, which can be introduced +by the keyword @code{\lyricmode}, or by using @code{\addlyrics} or +@code{\lyricsto}. In this special input mode, the input @code{d} +is not parsed as the pitch @notation{D}, but rather as a one-letter +syllable of text. In other words, syllables are entered like notes +but with pitches replaced by text. + +For example: + +@example +\lyricmode @{ Three4 blind mice,2 three4 blind mice2 @} +@end example + +There are two main methods for specifying the horizontal placement +of the syllables, either by specifying the duration of each syllable +explicitly, as in the example above, or by leaving the lyrics to be +aligned automatically to a melody or other voice of music, using +@code{\addlyrics} or @code{\lyricsto}. The former method is +described below in @ref{Manual syllable durations}. The latter +method is described in @ref{Automatic syllable durations}. + +A word or syllable of lyrics begins with an alphabetic character +(plus some other characters, see below) and is terminated by any +white space or a digit. Later characters in the syllable can be any +character that is not a digit or white space. + +Because any character that is not a digit or white space is regarded +as part of the syllable, a word is valid even if it ends with +@code{@}}, which often leads to the following mistake: + +@example +\lyricmode @{ lah lah lah@} +@end example + +In this example, the @code{@}} is included in the final syllable, so the +opening brace is not balanced and the input file will probably not +compile. Instead, braces should always be surrounded with white space: + +@example +\lyricmode @{ lah lah lah @} +@end example + +@cindex overrides in lyric mode +@funindex \override in \lyricmode + +Similarly, in lyric mode, a period will be included in the +alphabetic sequence that it follows. As a consequence, spaces +must be inserted around the period in @code{\override} commands. +Do @emph{not} write + +@example +\override Score.LyricText #'font-shape = #'italic +@end example + +@noindent +but instead use + +@example +\override Score . LyricText #'font-shape = #'italic +@end example + +Punctuation, lyrics with accented characters, characters from +non-English languages, or special characters (such as the heart +symbol or slanted quotes), may simply be inserted directly +into the input file, providing it is saved with UTF-8 encoding. +For more information, see @ref{Text encoding}. + +@lilypond[quote,verbatim] +\relative c'' { d8 c16 a bes8 f e' d c4 } +\addlyrics { „Schad’ um das schö -- ne grü -- ne Band, } +@end lilypond + +Normal quotes may be used in lyrics, but they have to be preceded +with a backslash character and the whole syllable has to be +enclosed between additional quotes. For example, + +@lilypond[quote,verbatim] +\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } +\addlyrics { "\"I" am so lone -- "ly,\"" said she } +@end lilypond + +The full definition of a word start in lyrics mode is somewhat more +complex. A word in lyrics mode is one that begins with an +alphabetic character, @code{_}, @code{?}, @code{!}, @code{:}, +@code{'}, the control characters @code{^A} through @code{^F}, +@code{^Q} through @code{^W}, @code{^Y}, @code{^^}, any 8-bit +character with an ASCII code over 127, or a two-character +combination of a backslash followed by one of @code{`}, @code{'}, +@code{"}, or @code{^}. + +@c " to balance double quotes for not-so-bright context-sensitive editors + +Great control over the appearance of lyrics comes from using +@code{\markup} inside the lyrics themselves. For explanation of many +options, see @ref{Formatting text}. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{formatting-lyrics-syllables.ly} + + +@seealso +Learning Manual: +@rlearning{Songs}. + +Notation Reference: +@ref{Automatic syllable durations}, +@ref{Fonts}, +@ref{Formatting text}, +@ref{Input modes}, +@ref{Manual syllable durations}, +@ref{Text encoding}. + +Internals Reference: +@rinternals{LyricText}. + +Snippets: +@rlsr{Text} + +@node Aligning lyrics to a melody +@unnumberedsubsubsec Aligning lyrics to a melody + +@cindex lyrics, aligning to a melody +@cindex @code{associatedVoice} +@funindex \lyricmode +@funindex \addlyrics +@funindex \lyricsto + +Lyrics are printed by interpreting them in the context called +@code{Lyrics}, see @ref{Contexts explained}. + +@example +\new Lyrics \lyricmode @{ @dots{} @} +@end example + +Lyrics can be aligned with melodies in two main ways: + +@itemize + +@item +Lyrics can be aligned automatically, with the durations of the +syllables being taken from another voice of music or (in special +circumstances) an associated melody, using @code{\addlyrics}, +@code{\lyricsto}, or by setting the @code{associatedVoice} property. +For more details, see @ref{Automatic syllable durations}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e4 d c2 + } + >> + +% takes durations and alignment from notes in "one" + \new Lyrics \lyricsto "one" { + Life is __ _ love, live __ life. + } + +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +The first stanza shows the normal way of entering lyrics. + +The second stanza shows how the voice from which the lyric +durations are taken can be changed. This is useful if the words to +different stanzas fit the notes in different ways and all the +durations are available in Voice contexts. For more details, see +@ref{Stanzas}. + +@item +Lyrics can be aligned independently of the duration of any notes +if the durations of the syllables are specified explicitly, +and entered with @code{\lyricmode}. + +@lilypond[quote,ragged-right,verbatim] +<< + \new Voice = "one" \relative c'' { + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + +% uses previous explicit duration of 2; + \new Lyrics \lyricmode { + Joy to the earth! + } + +% explicit durations, set to a different rhythm + \new Lyrics \lyricmode { + Life4 is love,2. live4 life.2 + } +>> +@end lilypond + +The first stanza is not aligned with the notes because the durations +were not specified, and the previous value of 2 is used for each +word. + +The second stanza shows how the words can be aligned quite +independently from the notes. This is useful if the words to +different stanzas fit the notes in different ways and the required +durations are not available in a music context. For more details +see @ref{Manual syllable durations}. This technique is also useful +when setting dialogue over music; for examples showing this, see +@ref{Dialogue over music}. + +When entered in this way the words are left-aligned to the notes +by default, but may be center-aligned to the notes of a melody by +specifying an associated voice, if one exists. For details, see +@ref{Manual syllable durations}. + +@end itemize + +@seealso +Learning Manual: +@rlearning{Aligning lyrics to a melody}. + +Notation Reference: +@ref{Contexts explained}, +@ref{Automatic syllable durations}. +@ref{Stanzas}, +@ref{Manual syllable durations}, +@ref{Dialogue over music}, +@ref{Manual syllable durations}. + +Internals Reference: +@rinternals{Lyrics}. + +@node Automatic syllable durations +@unnumberedsubsubsec Automatic syllable durations + +@cindex syllable durations, automatic +@cindex lyrics and melodies +@cindex associatedVoice +@funindex \addlyrics +@funindex \lyricsto + +Lyrics can be automatically aligned to the notes of a melody in +three ways: + +@itemize + +@item +by specifying the named Voice context containing the melody with +@code{\lyricsto}, + +@item +by introducing the lyrics with @code{\addlyrics} and placing them +immediately after the Voice context containing the melody, + +@item +by setting the @code{associatedVoice} property, the alignment of +the lyrics may be switched to a different named Voice context at +any musical moment. + +@end itemize + +In all three methods hyphens can be drawn between the syllables of +a word and extender lines can be drawn beyond the end of a word. For +details, see @ref{Extenders and hyphens}. + +The @code{Voice} context containing the melody to which the lyrics +are being aligned must not have @qq{died}, or the lyrics after that +point will be lost. This can happen if there are periods when that +voice has nothing to do. For methods of keeping contexts alive, see +@ref{Keeping contexts alive}. + +@subheading Using @code{\lyricsto} + +@cindex \lyricsto +@funindex \lyricsto + +Lyrics can be aligned under a melody automatically by specifying +the named Voice context containing the melody with +@code{\lyricsto}: + +@lilypond[quote,verbatim,relative=2] +<< + \new Voice = "melody" { + a4 a a a + } + \new Lyrics \lyricsto "melody" { + These are the words + } +>> +@end lilypond + +@noindent +This aligns the lyrics to the notes of the named @code{Voice} +context, which must already exist. Therefore normally the +@code{Voice} context is specified first, followed by the +@code{Lyrics} context. The lyrics themselves follow the +@code{\lyricsto} command. The @code{\lyricsto} command +invokes lyric mode automatically, so the @code{\lyricmode} keyword +may be omitted. By default, the lyrics are placed underneath the +notes. For other placements, see @ref{Placing lyrics vertically}. + +@subheading Using @code{\addlyrics} + +@cindex \addlyrics +@funindex \addlyrics + +The @code{\addlyrics} command is just a convenient shortcut that +can sometimes be used instead of having to set up the lyrics +through a more complicated LilyPond structure. + +@example +@{ MUSIC @} +\addlyrics @{ LYRICS @} +@end example + +@noindent +is the same as + +@example +\new Voice = "blah" @{ MUSIC @} +\new Lyrics \lyricsto "blah" @{ LYRICS @} +@end example + +Here is an example, + +@lilypond[verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } +} +@end lilypond + +More stanzas can be added by adding more +@code{\addlyrics} sections: + + +@lilypond[ragged-right,verbatim,quote] +{ + \time 3/4 + \relative c' { c2 e4 g2. } + \addlyrics { play the game } + \addlyrics { speel het spel } + \addlyrics { joue le jeu } +} +@end lilypond + +The command @code{\addlyrics} cannot handle polyphonic settings. +For these cases one should use @code{\lyricsto}. + +@subheading Using associatedVoice + +The melody to which the lyrics are being aligned can be changed by +setting the @code{associatedVoice} property, + +@example +\set associatedVoice = #"lala" +@end example + +@noindent + +The value of the property (here: @code{"lala"}) should be the name +of a @code{Voice} context. For technical reasons, the @code{\set} +command must be placed one syllable before the one to which the +change in voice is to apply. + +Here is an example demonstrating its use: + +@lilypond[quote,ragged-right,verbatim] +<< + \new Staff << + \time 2/4 + \new Voice = "one" \relative c'' { + \voiceOne + c4 b8. a16 g4. r8 a4 ( b ) c2 + } + \new Voice = "two" \relative c' { + \voiceTwo + s2 s4. f8 e8 d4. c2 + } + >> +% takes durations and alignment from notes in "one" initially +% then switches to "two" + \new Lyrics \lyricsto "one" { + No more let + \set associatedVoice = "two" % must be set one syllable early + sins and sor -- rows grow. + } +>> +@end lilypond + +@seealso +Notation Reference: +@ref{Extenders and hyphens}, +@ref{Keeping contexts alive}, +@ref{Placing lyrics vertically}. + +@node Manual syllable durations +@unnumberedsubsubsec Manual syllable durations + +In some complex vocal music, it may be desirable to place lyrics +completely independently of notes. In this case do not use +@code{\lyricsto} or @code{\addlyrics} and do not set +@code{associatedVoice}. Syllables are entered like notes -- +but with pitches replaced by text -- and the duration of each +syllable is entered explicitly after the syllable. + +By default, syllables will be left-aligned to the corresponding +musical moment. Hyphenated lines may be drawn between syllables +as usual, but extender lines cannot be drawn when there is no +associated voice. + +Here are two examples: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g2 f + } + \new Lyrics \lyricmode { + play1 the4 game4 + } +>> +@end lilypond + + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff { + \relative c'' { + c2 c2 + d1 + } + } + \new Lyrics { + \lyricmode { + I2 like4. my8 cat!1 + } + } + \new Staff { + \relative c' { + c8 c c c c c c c + c8 c c c c c c c + } + } +>> +@end lilypond + +This technique is useful when writing dialogue over music, see +@ref{Dialogue over music}. + +To center-align syllables on the notes at the corresponding musical +moments, set @code{associatedVoice} to the name of the Voice context +containing those notes. When @code{associatedVoice} is set, both +double hyphens and double underscores can be used to draw +hyphenated lines and extenders under melismata correctly. + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + c2 e4 g f g + } + \new Lyrics \lyricmode { + \set associatedVoice = #"melody" + play2 the4 game2. __ + } +>> +@end lilypond + +@c TODO see also feature request 707 - show how to do this with manual durations + +@seealso +Notation Reference: +@ref{Dialogue over music}. + +Internals Reference: +@rinternals{Lyrics}, +@rinternals{Voice}. + + +@node Multiple syllables to one note +@unnumberedsubsubsec Multiple syllables to one note + +@funindex _ +@cindex spaces, in lyrics +@cindex quotes, in lyrics +@cindex ties, in lyrics + +In order to assign more than one syllable to a single note with +spaces between the syllables, you can surround the phrase with +quotes or use a @code{_} character. Alternatively, you can use +code the tilde symbol (@code{~}) to get a lyric tie. The lyric +tie is implemented with the Unicode character U+203F, so be +sure to use a font for this glyph which actually contains it. +Freely available fonts with a lyric tie are, for example, +`FreeSerif' (a Times clone), `DejaVuSans' (but not +`DejaVuSerif'), or `TeXGyreSchola' (a Century Schoolbook +clone). + +@lilypond[quote,ragged-right,verbatim] +{ + \time 3/4 + \relative c' { c2 e4 g2 e4 } + \addlyrics { gran- de_a- mi- go } + \addlyrics { pu- "ro y ho-" nes- to } + \addlyrics { pu- ro~y~ho- nes- to } +} +@end lilypond + + +@seealso +Internals Reference: +@rinternals{LyricCombineMusic}. + + +@node Multiple notes to one syllable +@unnumberedsubsubsec Multiple notes to one syllable + +@cindex melisma +@cindex melismata +@cindex phrasing, in lyrics +@funindex \melisma +@funindex \melismaEnd + +Sometimes, particularly in Medieval music, several notes are to be +sung on one syllable; such vocalises are called melismata, or +@rglos{melisma}s. The syllable to a melisma is usually +left-aligned with the first note of the melisma. + +When a melisma occurs on a syllable other that the last one in a +word, that syllable is usually joined to the following one with a +hyphenated line. This is indicated by placing a double hyphen, +@code{--}, immediately after the syllable. + +Alternatively, when a melisma occurs on the last or only syllable in +a word an extender line is usually drawn from the end of the syllable +to the last note of the melisma. This is indicated by placing a +double underscore, @code{__}, immediately after the word. + +There are five ways in which melismata can be indicated: + +@itemize + +@item +Melismata are created automatically over notes which are tied +together: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g2 ~ | + g4 e2 ~ | + e8 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +Melismata can be created automatically from the music by placing +slurs over the notes of each melisma. This is the usual way of +entering lyrics: + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 ( f e f ) + e8 ( d e2 ) + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e __ + } +>> +@end lilypond + +@item +Notes are considered a melisma if they are manually beamed, +providing automatic beaming is switched off. See +@ref{Setting automatic beam behavior}. + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + \autoBeamOff + f4 g8[ f e f] + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond + +Clearly this is not suited to melismata over notes which are longer +than eighth notes. + +@item +An unslurred group of notes will be treated as a melisma if they +are bracketed between @code{\melisma} and @code{\melismaEnd}. + +@lilypond[quote,relative=2,verbatim] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 + \melisma + f e f + \melismaEnd + e2. + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e + } +>> +@end lilypond + +Note that this method cannot be used to indicate two melismata if +the first one is immediately followed by another. + +@item +A melisma can be defined entirely in the lyrics by entering a +single underscore character, @code{_}, for every extra note that has +to be added to the melisma. + +@lilypond[verbatim, quote, relative=2] +<< + \new Voice = "melody" { + \time 3/4 + f4 g8 f e f + e8 d e2 + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ _ _ e __ _ _ + } +>> +@end lilypond + +@end itemize + +It is possible to have ties, slurs and manual beams in the melody +without their indicating melismata. To do this, set +@code{melismaBusyProperties}: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- e e -- le -- i -- son + } +>> +@end lilypond + +Other settings for @code{melismaBusyProperties} can be used to +selectively include or exclude ties, slurs, and beams from the +automatic detection of melismata; see @code{melismaBusyProperties} +in @rinternals{Tunable context properties}. + +Alternatively, if all melismata indications are to be ignored, +@code{ignoreMelismata} may be set true; +see @ref{Stanzas with different rhythms}. + +If a melisma is required during a passage in which +@code{melismaBusyProperties} is active, it may be indicated by +placing a single underscore in the lyrics for each note which +should be included in the melisma: + +@lilypond[relative=1,verbatim,quote] +<< + \new Voice = "melody" { + \time 3/4 + \set melismaBusyProperties = #'() + c4 d ( e ) + g8 [ f ] ~ f4 ~ f + } + \new Lyrics \lyricsto "melody" { + Ky -- ri -- _ e __ _ _ _ + } +>> +@end lilypond + + +@predefined + +@code{\autoBeamOff}, +@code{\autoBeamOn}, +@code{\melisma}, +@code{\melismaEnd}. + +@seealso +Musical Glossary: +@rglos{melisma}. + +Learning Manual: +@rlearning{Aligning lyrics to a melody}. + +Notation Reference: +@ref{Aligning lyrics to a melody}, +@ref{Automatic syllable durations}, +@ref{Setting automatic beam behavior}, +@ref{Stanzas with different rhythms}. + +Internals Reference: +@rinternals{Tunable context properties}. + +@knownissues + +Extender lines under melismata are not created automatically; they +must be inserted manually with a double underscore. + + +@node Extenders and hyphens +@unnumberedsubsubsec Extenders and hyphens + +@cindex melisma +@cindex extender + +@c TODO cf Multiple notes to one syllable; should this be merged in? + +@c leave this as samp. -gp +In the last syllable of a word, melismata are sometimes indicated with +a long horizontal line starting in the melisma syllable, and ending in +the next one. Such a line is called an extender line, and it is +entered as @samp{ __ } (note the spaces before and after the two +underscore characters). + +@warning{Melismata are indicated in the score with extender lines, +which are entered as one double underscore; but short melismata can +also be entered by skipping individual notes, which are entered as +single underscore characters; these do not make an extender line to be +typeset by default.} + +@cindex hyphens + +@c leave this as samp. -gp +Centered hyphens are entered as @samp{ -- } between syllables of a +same word (note the spaces before and after the two hyphen +characters). The hyphen will be centered between the syllables, and +its length will be adjusted depending on the space between the +syllables. + +In tightly engraved music, hyphens can be removed. Whether this +happens can be controlled with the @code{minimum-distance} (minimum +distance between two syllables) and the @code{minimum-length} +(threshold below which hyphens are removed) properties of +@code{LyricHyphen}. + + +@seealso +Internals Reference: +@rinternals{LyricExtender}, +@rinternals{LyricHyphen}. + + +@node Techniques specific to lyrics +@subsection Techniques specific to lyrics + +@c TODO this whole section is to be reorganised + +@menu +* Working with lyrics and variables:: +* Placing lyrics vertically:: +* Placing syllables horizontally:: +* Lyrics and repeats:: +* Divisi lyrics:: +@end menu + + + +@node Working with lyrics and variables +@unnumberedsubsubsec Working with lyrics and variables + +@cindex lyrics, using variables + +Variables containing lyrics can be created, but the lyrics must be +entered in lyric mode: + +@lilypond[quote,verbatim] +musicOne = \relative c'' { + c4 b8. a16 g4. f8 e4 d c2 +} +verseOne = \lyricmode { + Joy to the world, the Lord is come. +} +\score { + << + \new Voice = "one" { + \time 2/4 + \musicOne + } + \new Lyrics \lyricsto "one" { + \verseOne + } + >> +} +@end lilypond + +Durations do not need to be added if the variable is to be invoked +with @code{\addlyrics} or @code{\lyricsto}. + +For different or more complex orderings, the best way is to define +the music and lyric variables first, then set up the hierarchy of +staves and lyrics, omitting the lyrics themselves, and then add the +lyrics using @code{\context} underneath. This ensures that the +voices referenced by @code{\lyricsto} have always been defined +earlier. For example: + +@lilypond[quote,verbatim] +sopranoMusic = \relative c'' { c4 c c c } +contraltoMusic = \relative c'' { a4 a a a } +sopranoWords = \lyricmode { Sop -- ra -- no words } +contraltoWords = \lyricmode { Con -- tral -- to words } + +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \sopranoMusic + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" + \new Staff { + \new Voice = "contraltos" { + \contraltoMusic + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + \sopranoWords + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + \contraltoWords + } + } + >> +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Placing lyrics vertically}. + +Internals Reference: +@rinternals{LyricCombineMusic}, +@rinternals{Lyrics}. + + +@node Placing lyrics vertically +@unnumberedsubsubsec Placing lyrics vertically + +@cindex placement of lyrics +@cindex lyrics, positioning + +Depending on the type of music, lyrics may be positioned +above the staff, below the staff, or between staves. Placing +lyrics below the associated staff is the easiest, and can be +achieved by simply defining the Lyrics context below the Staff +context: + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Lyrics may be positioned above the staff using one of +two methods. The simplest (and preferred) method +is to use the same syntax as above and explicitly +specify the position of the lyrics: + +@lilypond[quote,verbatim] +\score { + << + \new Staff = "staff" { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \new Lyrics \with { alignAboveContext = "staff" } { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +Alternatively, a two-step process may be used. First the Lyrics +context is declared (without any content) before the Staff and +Voice contexts, then the @code{\lyricsto} command is placed after +the Voice declaration it references by using @code{\context}, as +follows: + +@lilypond[quote,verbatim] +\score { + << + \new Lyrics = "lyrics" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "melody" { + \relative c'' { c4 c c c } + } + } + \context Lyrics = "lyrics" { + \lyricsto "melody" { + Here are the words + } + } + >> +} +@end lilypond + +When there are two voices on separate staves the lyrics may be +placed between the staves using either of these methods. Here +is an example of the second method: + +@lilypond[quote,verbatim] +\score { + \new ChoirStaff << + \new Staff { + \new Voice = "sopranos" { + \relative c'' { c4 c c c } + } + } + \new Lyrics = "sopranos" + \new Lyrics = "contraltos" \with { + % lyrics above a staff should have this override + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff { + \new Voice = "contraltos" { + \relative c'' { a4 a a a } + } + } + \context Lyrics = "sopranos" { + \lyricsto "sopranos" { + Sop -- ra -- no words + } + } + \context Lyrics = "contraltos" { + \lyricsto "contraltos" { + Con -- tral -- to words + } + } + >> +} +@end lilypond + +Other combinations of lyrics and staves may be generated by +elaborating these examples, or by examining the +@rlearning{Vocal ensembles} templates in the Learning Manual. + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{lyrics-old-spacing-settings.ly} + +@seealso +Learning Manual: +@rlearning{Vocal ensembles}. + +Notation Reference: +@ref{Aligning contexts}, +@ref{Creating contexts}. + +@node Placing syllables horizontally +@unnumberedsubsubsec Placing syllables horizontally + +@cindex Spacing lyrics +@cindex Lyrics, increasing space between + +To increase the spacing between lyrics, set the +@code{minimum-distance} property of @code{LyricSpace}. + +@lilypond[relative=1,verbatim,quote,ragged-right] +{ + c c c c + \override Lyrics.LyricSpace #'minimum-distance = #1.0 + c c c c +} +\addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext +} +@end lilypond + +@noindent +To make this change for all lyrics in the score, set the property in the +@code{\layout} block. + +@lilypond[verbatim,quote,ragged-right] +\score { + \relative c' { + c c c c + c c c c + } + \addlyrics { + longtext longtext longtext longtext + longtext longtext longtext longtext + } + \layout { + \context { + \Lyrics + \override LyricSpace #'minimum-distance = #1.0 + } + } +} +@end lilypond + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{lyrics-alignment.ly} + +@c TODO: move to LSR -vv + +Checking to make sure that text scripts and lyrics are within the margins +requires additional calculations. To speed up processing slightly, this +feature can be disabled: + +@example +\override Score.PaperColumn #'keep-inside-line = ##f +@end example + +To make lyrics avoid bar lines as well, use + +@example +\layout @{ + \context @{ + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + \override BarLine #'transparent = ##t + @} +@} +@end example + +@c TODO Create and add lsr example of lyricMelismaAlignment +@c It's used like this to center-align all lyric syllables, +@c even when notes are tied. -td + +@ignore +\layout +{ + \context { \Score lyricMelismaAlignment = #0 } +} +@end ignore + + +@node Lyrics and repeats +@unnumberedsubsubsec Lyrics and repeats + +@cindex repeats and lyrics +@cindex lyrics, repeating + +@subheading Simple repeats + +Repeats in @emph{music} are fully described elsewhere; see +@ref{Repeats}. This section explains how to add lyrics to repeated +sections of music. + +Lyrics to a section of music that is repeated should be surrounded +by exactly the same repeat construct as the music, if the words are +unchanged. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> +} +@end lilypond + +The words will then be correctly expanded if the repeats are +unfolded. + +@lilypond[verbatim,quote] +\score { + \unfoldRepeats { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- ed twice. } + } + } + >> + } +} +@end lilypond + +If the repeated section is to be unfolded and has different words, +simply enter all the words: + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat unfold 2 { b4 b b b } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + The first time words. + Sec -- ond time words. + } + } + >> +} +@end lilypond + +When the words to a repeated volta section are different, the words +to each repeat must be entered in separate @code{Lyrics} contexts, +correctly nested in parallel sections: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b b b } + } + } + } + \new Lyrics \lyricsto "melody" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "melody" + Sec -- ond time words. + } + >> + } + >> +} +@end lilypond + +More verses may be added in a similar way: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \new Voice = "singleVoice" { + \relative c'' { + a4 a a a + \repeat volta 3 { b4 b b b } + c4 c c c + } + } + } + \new Lyrics \lyricsto "singleVoice" { + Not re -- peat -- ed. + << + { The first time words. } + \new Lyrics { + \set associatedVoice = "singleVoice" + Sec -- ond time words. + } + \new Lyrics { + \set associatedVoice = "singleVoice" + The third time words. + } + >> + The end sec -- tion. + } + >> +} +@end lilypond + + +@c TODO positioning a common line of lyrics + +@subheading Repeats with alternative endings + +@cindex lyrics, repeats with alternative endings +@cindex repeating lyrics with alternative endings +@cindex alternative endings and lyrics + +If the words of the repeated section are the same, exactly the +same structure can be used for both the lyrics and music. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + a4 a a a + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + } + } + } + \new Lyrics { + \lyricsto "melody" { + Not re -- peat -- ed. + \repeat volta 2 { Re -- peat -- } + \alternative { { ed twice. } { ed twice. } } + } + } + >> +} +@end lilypond + +@funindex \skip +@cindex skipping notes in lyrics +@cindex lyrics, skipping notes + +But when the repeated section has different words, a repeat +construct cannot be used around the words and @code{\skip} commands +have to be inserted manually to skip over the notes in the +alternative sections which do not apply. + +Note: do not use an underscore, @code{_}, to skip notes -- an +underscore indicates a melisma, causing the preceding syllable +to be left-aligned. + +@warning{The @code{@bs{}skip} command must be followed by a number, +but this number is ignored in lyrics which derive their durations +from the notes in an associated melody through @code{\addlyrics} or +@code{\lyricsto}. Each @code{@bs{}skip} skips a single note of any +value, irrespective of the value of the following number.} + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b } + \alternative { { b b } { b c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + The first time words. + \repeat unfold 2 { \skip 1 } + End here. + } + } + \new Lyrics { + \lyricsto "melody" { + Sec -- ond + \repeat unfold 2 { \skip 1 } + time words. + } + } + >> +} +@end lilypond + +@cindex lyrics and tied notes +@funindex \repeatTie + +When a note is tied over into two or more alternative endings a +tie is used to carry the note into the first alternative ending and +a @code{\repeatTie} is used in the second and subsequent endings. +This structure causes difficult alignment problems when lyrics are +involved and increasing the length of the alternative sections so +the tied notes are contained wholly within them may give a more +acceptable result. + +The tie creates a melisma into the first alternative, but not into +the second and subsequent alternatives, so to align the lyrics +correctly it is necessary to disable the automatic creation of +melismata over the volta section and insert manual skips. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \set melismaBusyProperties = #'() + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + \unset melismaBusyProperties + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + \repeat volta 2 { Here's a __ } + \alternative { + { \skip 1 verse } + { \skip 1 sec } + } + ond one. + } + } + >> +} +@end lilypond + +Note that if @code{\unfoldRepeats} is used around a section +containing @code{\repeatTie}, the @code{\repeatTie} should be +removed to avoid both types of tie being printed. + +When the repeated section has different words a @code{\repeat} +cannot be used around the lyrics and @code{\skip} commands need to +be inserted manually, as before. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's one + \repeat unfold 2 { \skip 1 } + more to sing. + } + } + >> +} +@end lilypond + +If you wish to show extenders and hyphens into and out of +alternative sections these must be inserted manually. + +@lilypond[quote,verbatim] +\score { + << + \new Staff { + \time 2/4 + \new Voice = "melody" { + \relative c'' { + \repeat volta 2 { b4 b ~} + \alternative { { b b } { b \repeatTie c } } + c4 c + } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's a __ verse. + \repeat unfold 2 { \skip 1 } + } + } + \new Lyrics { + \lyricsto "melody" { + Here's "a_" + \skip 1 + "_" sec -- ond one. + } + } + >> +} +@end lilypond + +@seealso +Notation Reference: +@ref{Keeping contexts alive}, +@ref{Repeats}. + + +@node Divisi lyrics +@unnumberedsubsubsec Divisi lyrics + +@cindex divided lyrics +@cindex lyrics, divided + +When just the words and rhythms of the two parts differ with the +pitches remaining the same, temporarily turning off the automatic +detection of melismata and indicating the melisma in the lyrics +may be the appropriate method to use: + +@lilypond[quote,verbatim] +\score { + << + \new Voice = "melody" { + \relative c' { + \set melismaBusyProperties = #'() + \slurDown + \slurDashed + e4 e8 ( e ) c4 c | + \unset melismaBusyProperties + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "melody" { + We will _ + } + >> +} +@end lilypond + +When both music and words differ it may be better to display +the differing music and lyrics by naming voice contexts and +attaching lyrics to those specific contexts: + +@lilypond[verbatim,ragged-right,quote] +\score { + << + \new Voice = "melody" { + \relative c' { + << + { + \voiceOne + e4 e8 e + } + \new Voice = "splitpart" { + \voiceTwo + c4 c + } + >> + \oneVoice + c4 c | + c + } + } + \new Lyrics \lyricsto "melody" { + They shall not o -- ver -- come + } + \new Lyrics \lyricsto "splitpart" { + We will + } + >> +} +@end lilypond + + +@node Stanzas +@subsection Stanzas + +@menu +* Adding stanza numbers:: +* Adding dynamics marks to stanzas:: +* Adding singers' names to stanzas:: +* Stanzas with different rhythms:: +* Printing stanzas at the end:: +* Printing stanzas at the end in multiple columns:: +@end menu + + +@node Adding stanza numbers +@unnumberedsubsubsec Adding stanza numbers + +@cindex stanza number + +Stanza numbers can be added by setting @code{stanza}, e.g., + +@lilypond[quote,ragged-right,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set stanza = #"1. " + Hi, my name is Bert. +} \addlyrics { + \set stanza = #"2. " + Oh, ché -- ri, je t'aime +} +@end lilypond + + +@noindent +These numbers are put just before the start of the first syllable. + +@c TODO Create and add snippet to show how two lines of a +@c stanza can be grouped together, along these lines: +@c (might need improving a bit) -td + +@ignore +leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup +#"brace105" } + +stanzaOneOne = { + \set stanza = \markup { "1. " \leftbrace } + \lyricmode { Child, you're mine and I love you. + Lend thine ear to what I say. + + } +} + +stanzaOneThree = { +% \set stanza = \markup { " "} + \lyricmode { Child, I have no great -- er joy + Than to have you walk in truth. + + } +} + +\new Voice { + \repeat volta 2 { c'8 c' c' c' c' c' c'4 + c'8 c' c' c' c' c' c'4 } +} \addlyrics { \stanzaOneOne } + \addlyrics { \stanzaOneThree } + +@end ignore + +@node Adding dynamics marks to stanzas +@unnumberedsubsubsec Adding dynamics marks to stanzas + +Stanzas differing in loudness may be indicated by putting a +dynamics mark before each stanza. In LilyPond, everything coming in +front of a stanza goes into the @code{StanzaNumber} object; dynamics +marks are no different. For technical reasons, you have to set the +stanza outside @code{\lyricmode}: + +@lilypond[quote,ragged-right,verbatim] +text = { + \set stanza = \markup { \dynamic "ff" "1. " } + \lyricmode { + Big bang + } +} + +<< + \new Voice = "tune" { + \time 3/4 + g'4 c'2 + } +\new Lyrics \lyricsto "tune" \text +>> +@end lilypond + +@node Adding singers' names to stanzas +@unnumberedsubsubsec Adding singers' names to stanzas + +@cindex singer name +@cindex name of singer + +Names of singers can also be added. They are printed at the start of +the line, just like instrument names. They are created by setting +@code{vocalName}. A short version may be entered as +@code{shortVocalName}. + +@lilypond[ragged-right,quote,verbatim,relative=2] +\new Voice { + \time 3/4 g2 e4 a2 f4 g2. +} \addlyrics { + \set vocalName = #"Bert " + Hi, my name is Bert. +} \addlyrics { + \set vocalName = #"Ernie " + Oh, ché -- ri, je t'aime +} +@end lilypond + +@node Stanzas with different rhythms +@unnumberedsubsubsec Stanzas with different rhythms + +Often, different stanzas of one song are put to one melody in slightly +differing ways. Such variations can still be captured with +@code{\lyricsto}. + +@subsubheading Ignoring melismata + +One possibility is that the text has a melisma in one stanza, but +multiple syllables in another. One solution is to make the faster +voice ignore the melisma. This is done by setting +@code{ignoreMelismata} in the Lyrics context. + +@lilypond[verbatim,ragged-right,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + \slurDotted + f8.[( g16]) + a4 + } + \new Lyrics \lyricsto "lahlah" { + more slow -- ly + } + \new Lyrics \lyricsto "lahlah" { + go + \set ignoreMelismata = ##t + fas -- ter + \unset ignoreMelismata + still + } +>> +@end lilypond + +@knownissues +Unlike most @code{\set} commands, @code{\set ignoreMelismata} does +not work if prefixed with @code{\once}. It is necessary to use +@code{\set} and @code{\unset} to bracket the lyrics where melismata +are to be ignored. + +@subsubheading Adding syllables to grace notes + +@cindex grace notes and lyrics +@cindex lyrics on grace notes + +By default, grace notes (e.g. via @code{\grace}) do not get assigned +syllables when using @code{\lyricsto}, but this behavior can be +changed: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + f4 \appoggiatura a32 b4 + \grace { f16[ a16] } b2 + \afterGrace b2 { f16[ a16] } + \appoggiatura a32 b4 + \acciaccatura a8 b4 + } + \new Lyrics + \lyricsto melody { + normal + \set includeGraceNotes = ##t + case, + gra -- ce case, + after -- grace case, + \set ignoreMelismata = ##t + app. case, + acc. case. + } +>> +@end lilypond + +@knownissues +Like @code{associatedVoice}, @code{includeGraceNotes} needs to be +set at latest one syllable before the one which is to be put under a +grace note. For the case of a grace note at the very beginning of a +piece of music, consider using a @code{\with} or @code{\context} +block: + +@lilypond[verbatim,ragged-right,quote] +<< + \new Voice = melody \relative c' { + \grace { c16[( d e f] } + g1) f + } + \new Lyrics \with { includeGraceNotes = ##t } + \lyricsto melody { + Ah __ fa + } +>> +@end lilypond + +@subsubheading Switching to an alternative melody + +@cindex associatedVoice +@cindex alternative melody, switching to + +More complex variations in setting lyrics to music are possible. +The melody to which the lyrics are being set can be changed from +within the lyrics by setting the @code{associatedVoice} property: + +@lilypond[verbatim,quote] +<< + \relative c' \new Voice = "lahlah" { + \set Staff.autoBeaming = ##f + c4 + << + \new Voice = "alternative" { + \voiceOne + \times 2/3 { + % show associations clearly. + \override NoteColumn #'force-hshift = #-3 + f8 f g + } + } + { + \voiceTwo + f8.[ g16] + \oneVoice + } >> + a8( b) c + } + \new Lyrics \lyricsto "lahlah" { + Ju -- ras -- sic Park + } + \new Lyrics \lyricsto "lahlah" { + % Tricky: need to set associatedVoice + % one syllable too soon! + \set associatedVoice = "alternative" % applies to "ran" + Ty -- + ran -- + no -- + \set associatedVoice = "lahlah" % applies to "rus" + sau -- rus Rex + } >> +@end lilypond + +@noindent +The text for the first stanza is set to the melody called +@q{lahlah} in the usual way, but the second stanza is set initally +to the @code{lahlah} context and is then switched to the +@code{alternative} melody for the syllables @q{ran} to @q{sau} by +the lines: + +@example +\set associatedVoice = "alternative" % applies to "ran" +Ty -- +ran -- +no -- +\set associatedVoice = "lahlah" % applies to "rus" +sau -- rus Rex +@end example + +@noindent +Here, @code{alternative} is the name of the @code{Voice} context +containing the triplet. + +Note the placement of the @code{\set associatedVoice} command -- +it appears to be one syllable too early, but this is correct. + +@warning{The @code{\set associatedVoice} command must be placed +one syllable @emph{before} the one at which the switch to the new +voice is to occur. In other words, changing the associated Voice +happens one syllable later than expected. This is for technical +reasons, and it is not a bug.} + + +@node Printing stanzas at the end +@unnumberedsubsubsec Printing stanzas at the end + +Sometimes it is appropriate to have one stanza set +to the music, and the rest added in verse form at +the end of the piece. This can be accomplished by adding +the extra verses into a @code{\markup} section outside +of the main score block. Notice that there are two +different ways to force linebreaks when using +@code{\markup}. + +@lilypond[ragged-right,verbatim,quote] +melody = \relative c' { +e d c d | e e e e | +d d e d | c1 | +} + +text = \lyricmode { +\set stanza = #"1." Ma- ry had a lit- tle lamb, +its fleece was white as snow. +} + +\score{ << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text +>> + \layout { } +} +\markup { \column{ + \line{ Verse 2. } + \line{ All the children laughed and played } + \line{ To see a lamb at school. } + } +} +\markup{ + \wordwrap-string #" + Verse 3. + + Mary took it home again, + + It was against the rule." +} +@end lilypond + + +@node Printing stanzas at the end in multiple columns +@unnumberedsubsubsec Printing stanzas at the end in multiple columns + +When a piece of music has many verses, they are often printed in +multiple columns across the page. An outdented verse number often +introduces each verse. The following example shows how to produce such +output in LilyPond. + +@lilypond[ragged-right,quote,verbatim] +melody = \relative c' { + c c c c | d d d d +} + +text = \lyricmode { + \set stanza = #"1." This is verse one. + It has two lines. +} + +\score { + << + \new Voice = "one" { \melody } + \new Lyrics \lyricsto "one" \text + >> + \layout { } +} + +\markup { + \fill-line { + \hspace #0.1 % moves the column off the left margin; + % can be removed if space on the page is tight + \column { + \line { \bold "2." + \column { + "This is verse two." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "3." + \column { + "This is verse three." + "It has two lines." + } + } + } + \hspace #0.1 % adds horizontal spacing between columns; + % if they are still too close, add more " " pairs + % until the result looks good + \column { + \line { \bold "4." + \column { + "This is verse four." + "It has two lines." + } + } + \hspace #0.1 % adds vertical spacing between verses + \line { \bold "5." + \column { + "This is verse five." + "It has two lines." + } + } + } + \hspace #0.1 % gives some extra space on the right margin; + % can be removed if page space is tight + } +} +@end lilypond + + +@seealso +Internals Reference: +@rinternals{LyricText}, +@rinternals{StanzaNumber}. + + +@node Songs +@subsection Songs + +@menu +* References for songs:: +* Lead sheets:: +@end menu + +@node References for songs +@unnumberedsubsubsec References for songs + +Songs are usually written on three staves with the melody for the +singer on the top staff and two staves of piano accompaniment at +the bottom. The lyrics of the first stanza are printed immediately +underneath the top staff. If there are just a small number of +further stanzas these can be printed immediately under the first +one, but if there are more stanzas than can be easily accommodated +there the second and subsequent stanzas are printed after the music +as stand-alone text. + +All the notational elements needed to write songs are fully described +elsewhere: + +@itemize + +@item +For constructing the staff layout, see @ref{Displaying staves}. + +@item +For writing piano music, see +@ref{Keyboard and other multi-staff instruments}. + +@item +For writing the lyrics to a melody line, see +@ref{Common notation for vocal music}. + +@item +For placing the lyrics, see @ref{Placing lyrics vertically}. + +@item +For entering stanzas, see @ref{Stanzas}. + +@item +Songs are frequently printed with the chording indicated by chord +names above the staves. This is described in @ref{Displaying chords}. + +@item +To print fret diagrams of the chords for guitar accompaniment or +accompaniment by other fretted instruments, see @qq{Fret diagram +markups} in @ref{Common notation for fretted strings}. + +@end itemize + +@seealso +Learning Manual: +@rlearning{Songs}. + +Notation Reference: +@ref{Common notation for vocal music}, +@ref{Displaying chords}, +@ref{Displaying staves}, +@ref{Keyboard and other multi-staff instruments}, +@ref{Placing lyrics vertically}, +@ref{Stanzas}. + +Snippets: +@rlsr{Vocal music}. + +@node Lead sheets +@unnumberedsubsubsec Lead sheets + +Lead sheets may be printed by combining vocal parts and +@q{chord mode}; this syntax is explained in @ref{Chord notation}. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{simple-lead-sheet.ly} + +@seealso +Notation Reference: +@ref{Chord notation}. + + +@node Choral +@subsection Choral + +@cindex anthems +@cindex part songs +@cindex oratorio +@cindex SATB + +This section discusses notation issues that relate most directly +to choral music. This includes anthems, part songs, oratorio, +etc. + +@menu +* References for choral:: +* Score layouts for choral:: +* Divided voices:: +@end menu + +@node References for choral +@unnumberedsubsubsec References for choral + +Choral music is usually notated on two, three or four staves within +a @code{ChoirStaff} group. Accompaniment, if required, is placed +beneath in a @code{PianoStaff} group, which is usually reduced in +size for @emph{a capella} choral works. The notes for each vocal +part are placed in a @code{Voice} context, with each staff +being given either a single vocal part (i.e., one @code{Voice}) or +a pair of vocal parts (i.e., two @code{Voice}s). + +Words are placed in @code{Lyrics} contexts, either underneath each +corresponding music staff, or one above and one below the music +staff if this contains the music for two parts. + +Several common topics in choral music are described fully elsewhere: + +@itemize + +@item +An introduction to creating an SATB vocal score can be found in +the Learning Manual, see @rlearning{Four-part SATB vocal score}. + +@item +Several templates suitable for various styles of choral music can +also be found in the Learning Manual, see +@rlearning{Vocal ensembles}. + +@item +For information about @code{ChoirStaff} and @code{PianoStaff} see +@ref{Grouping staves}. + +@item +Shape note heads, as used in Sacred Harp and similar notation, are +described in @ref{Shape note heads}. + +@item +When two vocal parts share a staff the stems, ties, slurs, etc., of +the higher part will be directed up and those of the lower part +down. To do this, use @code{\voiceOne} and @code{\voiceTwo}. See +@ref{Single-staff polyphony}. + +@end itemize + +@predefined +@code{\oneVoice}, +@code{\voiceOne}, +@code{\voiceTwo}. + +@seealso +Learning Manual: +@rlearning{Four-part SATB vocal score}, +@rlearning{Vocal ensembles}. + +Notation Reference: +@ref{Context layout order}, +@ref{Grouping staves}, +@ref{Shape note heads}, +@ref{Single-staff polyphony}. + +Snippets: +@rlsr{Vocal music}. + +Internals Reference: +@rinternals{ChoirStaff}, +@rinternals{Lyrics}, +@rinternals{PianoStaff}. + +@node Score layouts for choral +@unnumberedsubsubsec Score layouts for choral + +Choral music containing four staves, with or without piano +accompaniment, is usually laid out with two systems per page. +Depending on the page size, achieving this may require changes +to several default settings. The following settings should be +considered: + +@itemize + +@item +The global staff size can be modified to change the overall size +of the elements of the score. See @ref{Setting the staff size}. + +@item +The distances between the systems, the staves and the lyrics can +all be adjusted independently. See @ref{Vertical spacing}. + +@item +The dimensions of the vertical layout variables can be displayed as +an aid to adjusting the vertical spacing. This and other +possibilities for fitting the music onto fewer pages are described +in @ref{Fitting music onto fewer pages}. + +@item +If the number of systems per page changes from one to two it is +customary to indicate this with a system separator mark between +the two systems. See @ref{Separating systems}. + +@item +For details of other page formatting properties, see +@ref{Page layout}. + +@end itemize + + +Dynamic markings by default are placed below the staff, but in +choral music they are usually placed above the staff in order to +avoid the lyrics. The predefined command @code{\dynamicUp} does +this for the dynamic markings in a single @code{Voice} context. +If there are many @code{Voice} contexts this predefined command +would have to be placed in every one. Alternatively its expanded +form can be used to place all dynamic markings in the entire score +above their respective staves, as shown here: + +@lilypond[verbatim,quote] +\score { + \new ChoirStaff << + \new Staff { + \new Voice { + \relative c'' { g4\f g g g } + } + } + \new Staff { + \new Voice { + \relative c' { d4 d d\p d } + } + } + >> + \layout { + \context { + \Score + \override DynamicText #'direction = #UP + \override DynamicLineSpanner #'direction = #UP + } + } +} +@end lilypond + +@predefined +@code{\dynamicUp}, @code{\dynamicDown}, @code{\dynamicNeutral}. + +@seealso +Notation Reference: +@ref{Changing spacing}, +@ref{Displaying spacing}, +@ref{Fitting music onto fewer pages}, +@ref{Page layout}, +@ref{Score layout}, +@ref{Separating systems}, +@ref{Setting the staff size}, +@ref{Using an extra voice for breaks}, +@ref{Vertical spacing}. + +Internals Reference: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Divided voices +@unnumberedsubsubsec Divided voices + +@cindex voices, divided + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{using-arpeggiobracket-to-make-divisi-more-visible.ly} + +@seealso +Notation Reference: +@ref{Expressive marks as lines}. + + +@node Opera and stage musicals +@subsection Opera and stage musicals + +The music, lyrics and dialogue to opera and stage musicals are +usually set out in one or more of the following forms: + +@itemize + +@item +A @emph{Conductors' Score} containing the full orchestral and vocal +parts, together with libretto cues if there are spoken passages. + +@item +@emph{Orchestral Parts} containing the music for the individual +instruments of the orchestra or band. + +@item +A @emph{Vocal Score} containing all vocal parts with piano +accompaniment. The accompaniment is usually an orchestral +reduction, and if so the name of the original orchestral instrument +is often indicated. Vocal scores sometimes includes stage +directions and libretto cues. + +@item +A @emph{Vocal Book} containing just the vocal parts +(no accompaniment), sometimes combined with the libretto. + +@item +A @emph{Libretto} containing the extended passages of spoken +dialogue usually found in musicals, together with the words to the +sung parts. Stage directions are usually included. LilyPond can +be used to typeset libretti but as they contain no music +alternative methods may be preferable. + +@end itemize + +The sections in the LilyPond documentation which cover the topics +needed to create scores in the styles commonly found in opera and +musicals are indicated in the References below. This is followed +by sections covering those techniques which are peculiar to +typesetting opera and musical scores. + +@menu +* References for opera and stage musicals:: +* Character names:: +* Musical cues:: +* Spoken music:: +* Dialogue over music:: +@end menu + +@node References for opera and stage musicals +@unnumberedsubsubsec References for opera and stage musicals + +@itemize + +@item +A conductors' score contains many grouped staves and lyrics. Ways +of grouping staves is shown in @ref{Grouping staves}. To nest +groups of staves see @ref{Nested staff groups}. + +@item +The printing of empty staves in conductors' scores and vocal scores +is often suppressed. To create such a @qq{Frenched score} see +@ref{Hiding staves}. + +@item +Writing orchestral parts is covered in @ref{Writing parts}. +Other sections in the Specialist notation chapter may be relevant, +depending on the orchestration used. Many instruments are +transposing instruments, see @ref{Instrument transpositions}. + +@item +If the number of systems per page changes from page to page it is +customary to separate the systems with a system separator mark. +See @ref{Separating systems}. + +@item +For details of other page formatting properties, see +@ref{Page layout}. + +@item +Dialogue cues and stage directions can be inserted with markup. +See @ref{Text}. Extensive stage directions can be inserted with +a section of stand-alone markup between two @code{\score} blocks. +See @ref{Separate text}. + +@end itemize + +@seealso +Musical Glossary: +@rglos{Frenched score}, +@rglos{Frenched staves}, +@rglos{transposing instrument}. + +Notation Reference: +@ref{Grouping staves}, +@ref{Hiding staves}, +@ref{Instrument transpositions}, +@ref{Nested staff groups}, +@ref{Page layout}, +@ref{Separating systems}, +@ref{Transpose}, +@ref{Writing parts}, +@ref{Writing text}. + +Snippets: +@rlsr{Vocal music}. + + +@node Character names +@unnumberedsubsubsec Character names + +@cindex character names +@cindex names, character + +Character names are usually shown to the left of the staff when the +staff is dedicated to that character alone: + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff { + \set Staff.vocalName = \markup \smallCaps Kaspar + \set Staff.shortVocalName = \markup \smallCaps Kas. + \relative c' { + \clef "G_8" + c4 c c c + \break + c4 c c c + } + } + \new Staff { + \set Staff.vocalName = \markup \smallCaps Melchior + \set Staff.shortVocalName = \markup \smallCaps Mel + \clef "bass" + \relative c' { + a4 a a a + a4 a a a + } + } + >> +} +@end lilypond + +When two or more characters share a staff the character's name is +usually printed above the staff at the start of every section +applying to that character. This can be done with markup. Often a +specific font is used for this purpose. + +@lilypond[quote,verbatim,relative=1] +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +\clef "bass" +a4^\markup \fontsize #1 \smallCaps Melchior +a a a +\clef "G_8" +c4^\markup \fontsize #1 \smallCaps Kaspar +c c c +@end lilypond + +Alternatively, if there are many character changes, it may be +easier to set up @qq{instrument} definitions for each character at +the top level so that @code{\instrumentSwitch} can be used to +indicate each change. + +@lilypond[quote,verbatim] +\addInstrumentDefinition #"kaspar" + #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) + (shortInstrumentName . "Kas.") + (clefGlyph . "clefs.G") + (clefOctavation . -7) + (middleCPosition . 1) + (clefPosition . -2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar")) + (midiInstrument . "voice oohs")) + +\addInstrumentDefinition #"melchior" + #`((instrumentTransposition . ,(ly:make-pitch 0 0 0)) + (shortInstrumentName . "Mel.") + (clefGlyph . "clefs.F") + (clefOctavation . 0) + (middleCPosition . 6) + (clefPosition . 2) + (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior")) + (midiInstrument . "voice aahs")) + +\relative c' { + \instrumentSwitch "kaspar" + c4 c c c + \instrumentSwitch "melchior" + a4 a a a + \instrumentSwitch "kaspar" + c4 c c c +} +@end lilypond + +@seealso +Notation Reference: +@ref{Instrument names}, +@ref{Scheme functions}, +@ref{Text}, +@ref{Text markup commands}. + +Extending LilyPond: +@rextend{Markup construction in Scheme}. + +@node Musical cues +@unnumberedsubsubsec Musical cues + +@cindex musical cues +@cindex cues, musical + +Musical cues can be inserted in Vocal Scores, Vocal Books and +Orchestral Parts to indicate what music in another part +immediately precedes an entry. Also, cues are often inserted in the +piano reduction in Vocal Scores to indicate what each orchestral +instrument is playing. This aids the conductor when a full +Conductors' Score is not available. + +The basic mechanism for inserting cues is fully explained in the +main text, see @ref{Quoting other voices} and +@ref{Formatting cue notes}. But when many cues have to be +inserted, for example, as an aid to a conductor in a vocal score, +the instrument name must be positioned carefully just before and +close to the start of the cue notes. The following example shows +how this is done. + +@lilypond[quote,verbatim] +flute = \relative c'' { + s4 s4 e g +} +\addQuote "flute" { \flute } + +pianoRH = \relative c'' { + c4. g8 + % position name of cue-ing instrument just before the cue notes, + % and above the staff + s1*0^\markup { \right-align { \tiny "Flute" } } + \cueDuring "flute" #UP { g4 bes4 } +} +pianoLH = \relative c { c4 e, } + +\score { + \new PianoStaff << + \new Staff { + \pianoRH + } + \new Staff { + \clef "bass" + \pianoLH + } + >> +} +@end lilypond + +If a transposing instrument is being quoted the instrument part should +specify its key so the conversion of its cue notes will be done +automatically. The example below shows this transposition for a +B-flat clarinet. The notes in this example are low on the staff so +@code{#DOWN} is specified in @code{\cueDuring} (so the stems are +down) and the instrument name is positioned below the staff. Note +also that the piano right-hand voice is explicitly declared. This +is because the cue notes in this example begin at the start of the +first bar and this would otherwise cause the entire piano right-hand +notes to be placed in a @code{CueVoice} context. + +@lilypond[quote,verbatim] +clarinet = \relative c' { + \transposition bes + fis4 d d c +} +\addQuote "clarinet" { \clarinet } + +pianoRH = \relative c'' { + \transposition c' + % position name of cue-ing instrument below the staff + s1*0_\markup { \right-align { \tiny "Clar." } } + \cueDuring "clarinet" #DOWN { c4. g8 } + g4 bes4 +} +pianoLH = \relative c { c4 e, } + +\score { + << + \new PianoStaff << + \new Staff { + \new Voice { + \pianoRH + } + } + \new Staff { + \clef "bass" + \pianoLH + } + >> + >> +} +@end lilypond + +From these two examples it is clear that inserting many cues in a +Vocal Score would be tedious, and the notes of the piano part would +become obscured. However, as the following snippet shows, it is +possible to define a music function to reduce the amount of typing +and to make the piano notes clearer. + +@snippets +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{adding-orchestral-cues-to-a-vocal-score.ly} + +@seealso +Musical Glossary: +@rglos{cue-notes}. + +Notation Reference: +@ref{Aligning objects}, +@ref{Direction and placement}, +@ref{Formatting cue notes}, +@ref{Quoting other voices}, +@ref{Using music functions}. + +Snippets: +@rlsr{Vocal music}. + +Internals Reference: +@rinternals{InstrumentSwitch}, +@rinternals{CueVoice}. + +@knownissues +@code{\cueDuring} automatically inserts a @code{CueVoice} context +and all cue notes are placed in that context. This means it is not +possible to have two overlapping sequences of cue notes by this +technique. Overlapping sequences could be entered by explicitly +declaring separate @code{CueVoice} contexts and using +@code{\quoteDuring} to extract and insert the cue notes. + + +@node Spoken music +@unnumberedsubsubsec Spoken music + +@cindex parlato +@cindex Sprechgesang +Such effects as @q{parlato} or @q{Sprechgesang} require performers to +speak without pitch but still with rhythm; these are notated by cross +note heads, as demonstrated in @ref{Special note heads}. + +@c TODO add "marking-notes-on-spoken-parts" snippet -vv +@c add "showing the rhythm of a melody" snip +@c add "one staff-line notation" +@c add "improvisation" ref +@c add "lyrics independents of notes" ref + +@node Dialogue over music +@unnumberedsubsubsec Dialogue over music + +Dialogue over music is usually printed over the staves in an italic +font, with the start of each phrase keyed in to a particular music +moment. + +For short interjections a simple markup suffices. + +@lilypond[quote,verbatim,relative=2] +a4^\markup { \smallCaps { Alex - } \italic { He's gone } } a a a +a4 a a^\markup { \smallCaps { Bethan - } \italic Where? } a +a4 a a a +@end lilypond + +For longer phrases it may be necessary to expand the music to make +the words fit neatly. There is no provision in LilyPond to do this +fully automatically, and some manual intervention to layout the +page will be necessary. + +For long phrases or for passages with a lot of closely packed +dialogue, using a Lyrics context will give better results. The +Lyrics context should not be associated with a music Voice; instead +each section of dialogue should be given an explicit duration. If +there is a gap in the dialogue, the final word should be separated +from the rest and the duration split between them so that the +underlying music spaces out smoothly. + +If the dialogue extends for more than one line it will be necessary +to manually insert @code{\break}s and adjust the placing of the +dialogue to avoid running into the right margin. The final word of +the last measure on a line should also be separated out, as above. + +Here is an example illustrating how this might be done. + +@c This should be a snippet, but it can't be as it needs to be +@c manually adjusted to suit the imposed line length. -td + +@lilypond[quote,verbatim,ragged-right] +music = \relative c'' { + \repeat unfold 3 { a4 a a a } +} + +dialogue = \lyricmode { + \markup { + \fontsize #1 \upright \smallCaps Abe: + "Say this over measures one and" + }4*7 + "two"4 | + \break + "and this over measure"4*3 + "three"4 | +} + +\score { + << + \new Lyrics \with { + \override LyricText #'font-shape = #'italic + \override LyricText #'self-alignment-X = #LEFT + } + { \dialogue } + \new Staff { + \new Voice { \music } + } + >> +} +@end lilypond + +@c TODO show use of \column to produce dialogue on two lines + +@seealso +Notation Reference: +@ref{Manual syllable durations}, +@ref{Text}. + +Internal Reference: +@rinternals{LyricText}. + + +@node Chants psalms and hymns +@subsection Chants psalms and hymns + +@cindex chants +@cindex psalms +@cindex hymns +@cindex religious music + +The music and words for chants, psalms and hymns usually follow a +well-established format in any particular church. Although the +formats may differ from church to church the type-setting problems +which arise are broadly similar, and are covered in this section. + +@menu +* References for chants and psalms:: +* Setting a chant:: +* Pointing a psalm:: +* Partial measures in hymn tunes:: +@end menu + +@node References for chants and psalms +@unnumberedsubsubsec References for chants and psalms + +Typesetting Gregorian chant in various styles of ancient notation +is described in @ref{Ancient notation}. + +@seealso +Notation reference: +@ref{Ancient notation}. + +Snippets: +@rlsr{Vocal music}. + + +@node Setting a chant +@unnumberedsubsubsec Setting a chant + +Modern chant settings use modern notation with varying numbers of +elements taken from ancient notation. Some of the elements and +methods to consider are shown here. + +Chants often use quarter notes without stems to indicate the pitch, +with the rhythm being taken from the spoken rhythm of the words. + +@lilypond[verbatim,quote] +stemOff = { \override Staff.Stem #'transparent = ##t } + +\relative c' { + \stemOff + a'4 b c2 | +} + +@end lilypond + +Chants often omit the bar lines or use shortened or dotted bar +lines to indicate pauses in the music. To omit all bar lines from +all staves remove the bar line engraver completely: + +@lilypond[verbatim,quote] +\score { + \new StaffGroup << + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +Bar lines can also be removed on a staff-by-staff basis: + +@lilypond[verbatim, quote] +\score { + \new ChoirStaff << + \new Staff + \with { \remove Bar_engraver } { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + >> +} +@end lilypond + +To remove bar lines from just a section of music treat it as a +cadenza. If the section is long you may need to insert dummy +bar lines with @code{\bar ""} to show where the line should break. + +@lilypond[verbatim,quote,relative=2] +a4 b c2 | +\cadenzaOn +a4 b c2 +a4 b c2 +\bar "" +a4 b c2 +a4 b c2 +\cadenzaOff +a4 b c2 | +a4 b c2 | +@end lilypond + +Rests or pauses in chants can be indicated by modified bar lines. + +@lilypond[verbatim, quote,relative=2] +a4 +\cadenzaOn +b c2 +a4 b c2 +\bar "'" +a4 b c2 +a4 b c2 +\bar ":" +a4 b c2 +\bar "dashed" +a4 b c2 +\bar "||" +@end lilypond + +Alternatively, the notation used in Gregorian chant for pauses or +rests is sometimes used even though the rest of the notation is +modern. This uses a modified @code{\breathe} mark: + +@lilypond[verbatim,quote] +divisioMinima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaior = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +divisioMaxima = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima + \once \override BreathingSign #'Y-offset = #0 + \breathe +} +finalis = { + \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis + \once \override BreathingSign #'Y-offset = #0 + \breathe +} + +\score { + \relative c'' { + g2 a4 g + \divisioMinima + g2 a4 g + \divisioMaior + g2 a4 g + \divisioMaxima + g2 a4 g + \finalis + } + \layout { + \context { + \Staff + \remove Bar_engraver + } + } +} +@end lilypond + +Chants usually omit the time signature and often omit the clef too. + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + a4 b c2 | + a4 b c2 | + a4 b c2 | + } + } + \layout { + \context { + \Staff + \remove Bar_engraver + \remove Time_signature_engraver + \remove Clef_engraver + } + } +} +@end lilypond + +Chants for psalms in the Anglican tradition are usually either +@emph{single}, with 7 bars of music, or @emph{double}, with two lots +of 7 bars. Each group of 7 bars is divided into two halves, +corresponding to the two halves of each verse, usually separated by +a double bar line. Only whole and half notes are used. The 1st bar +in each half always contains a single chord of whole notes. This is +the @qq{reciting note}. Chants are usually centered on the page. + +@lilypond[verbatim,quote] +SopranoMusic = \relative g' { + g1 | c2 b | a1 | \bar "||" + a1 | d2 c | c b | c1 | \bar "||" +} + +AltoMusic = \relative c' { + e1 | g2 g | f1 | + f1 | f2 e | d d | e1 | +} + +TenorMusic = \relative a { + c1 | c2 c | c1 | + d1 | g,2 g | g g | g1 | +} + +BassMusic = \relative c { + c1 | e2 e | f1 | + d1 | b2 c | g' g | c,1 | +} + +global = { + \time 2/2 +} + +% Use markup to center the chant on the page +\markup { + \fill-line { + \score { % centered + << + \new ChoirStaff << + \new Staff << + \global + \clef "treble" + \new Voice = "Soprano" << + \voiceOne + \SopranoMusic + >> + \new Voice = "Alto" << + \voiceTwo + \AltoMusic + >> + >> + \new Staff << + \clef "bass" + \global + \new Voice = "Tenor" << + \voiceOne + \TenorMusic + >> + \new Voice = "Bass" << + \voiceTwo + \BassMusic + >> + >> + >> + >> + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 2) + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } + } % End score + } +} % End markup +@end lilypond + +Some other approaches to setting such a chant are shown in the first +of the following snippets. + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{chant-or-psalms-notation.ly} + +Canticles and other liturgical texts may be set more freely, and +may use notational elements from ancient music. Often the words +are shown underneath and aligned with the notes. If so, the notes +are spaced in accordance with the syllables rather than the notes' +durations. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{ancient-notation-template----modern-transcription-of-gregorian-music.ly} + +@seealso +Learning Manual: +@rlearning{Visibility and color of objects}, +@rlearning{Vocal ensembles}. + +Notation Reference: +@ref{Ancient notation}, +@ref{Bar lines}, +@ref{Modifying context plug-ins}, +@ref{Typesetting Gregorian chant}, +@ref{Unmetered music}, +@ref{Visibility of objects}. + + +@node Pointing a psalm +@unnumberedsubsubsec Pointing a psalm + +The words to an Anglican psalm are usually printed in separate +verses centered underneath the chant. + +Single chants (with 7 bars) are repeated for every verse. Double +chants (with 14 bars) are repeated for every pair of verses. Marks +are inserted in the words to show how they should be fitted to the +chant. Each verse is divided into two halves. A colon is usually +used to indicate this division. This corresponds to the double bar +line in the music. The words before the colon are sung to the first +three bars of music; the words after the colon are sung to the last +four bars. + +Single bar lines (or in some psalters an inverted comma or similar +symbol) are inserted between words to indicate where the bar lines +in the music fall. In markup mode a single bar line can be entered +with the bar check symbol, @code{|}. + +@lilypond[verbatim,quote] +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing | unto the | Lord : let } + \line { us heartily rejoice in the | strength of | our } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +Other symbols may require glyphs from the @code{fetaMusic} fonts. +For details, see @ref{Fonts}. + +@lilypond[verbatim,quote] +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { O come let us sing \tick unto the \tick Lord : let } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +Where there is one whole note in a bar all the words corresponding +to that bar are recited on that one note in speech rhythm. Where +there are two notes in a bar there will usually be only one or two +corresponding syllables. If there are more that two syllables a +dot is usually inserted to indicate where the change in note occurs. + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us sing \tick unto \dot the \tick Lord : let + } + \line { + us heartily rejoice in the \tick strength of \tick our + } + \line { sal \tick vation. } + } + } + } +} +@end lilypond + +In some psalters an asterisk is used to indicate a break in a +recited section instead of a comma, and stressed or slightly +lengthened syllables are indicated in bold text. + +@lilypond[verbatim,quote] +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { Today if ye will hear his voice * } + \line { + \concat { \bold hard en } + | not your | hearts : as in the pro- + } + \line { vocation * and as in the \bold day of tempt- | } + \line { -ation | in the | wilderness. } + } + } + } +} +@end lilypond + +In other psalters an accent is placed over the syllable to indicate +stress. + +@lilypond[verbatim,quote] +tick = \markup { + \raise #2 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} +\markup { + \fill-line { + \column { + \left-align { + \line { + O come let us \concat { + si \combine \tick ng + } + | unto the | Lord : let + } + \line { + us heartily \concat { + rejo \combine \tick ice + } + in the | strength of | our + } + \line { sal- | -vation. } + } + } + } +} +@end lilypond + +The use of markup to center text, and arrange lines in columns is +described in @ref{Formatting text}. + +Most of these elements are shown in one or other of the two verses +in the template, see @qq{Psalms} in @rlearning{Vocal ensembles}. + +@seealso +Learning Manual: +@rlearning{Vocal ensembles}. + +Notation Reference: +@ref{Fonts}, +@ref{Formatting text}. + + +@node Partial measures in hymn tunes +@unnumberedsubsubsec Partial measures in hymn tunes + +Hymn tunes frequently start and end every line of music with +partial measures so that each line of music corresponds exactly +with a line of text. This requires a @code{\partial} command at +the start of the music and @code{\bar "|"} or @code{\bar "||"} +commands at the end of each line. + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{hymn-template.ly} + + +@node Ancient vocal music +@subsection Ancient vocal music + +Ancient vocal music is supported, as explained in +@ref{Ancient notation}. + +@c TODO + +@c Add "Printing both the ancient and the modern clef in vocal music" snippet, +@c and "Transcription of Ancient music with incipit" snippet. -vv + +@seealso +Notation Reference: +@ref{Ancient notation}. + + + + diff --git a/Documentation/notation/wind.itely b/Documentation/notation/wind.itely new file mode 100644 index 0000000000..9a86ca6d67 --- /dev/null +++ b/Documentation/notation/wind.itely @@ -0,0 +1,436 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Wind instruments +@section Wind instruments + +@lilypondfile[quote]{wind-headword.ly} + +This section includes elements of music notation that arise when +writing specifically for wind instruments. + +@menu +* Common notation for wind instruments:: +* Bagpipes:: +* Woodwinds:: +@end menu + +@node Common notation for wind instruments +@subsection Common notation for wind instruments + +This section discusses notation common to most wind instruments. + +@menu +* References for wind instruments:: +* Fingerings:: +@end menu + +@node References for wind instruments +@unnumberedsubsubsec References for wind instruments + +@cindex wind instruments + +Many notation issues for wind instruments pertain to breathing and +tonguing: + +@itemize +@item Breathing can be specified by rests or @ref{Breath marks}. +@item Legato playing is indicated by @ref{Slurs}. +@item Different types of tonguings, ranging from legato to non-legato to +staccato are usually shown by articulation marks, sometimes combined +with slurs, see @ref{Articulations and ornamentations} and +@ref{List of articulations}. +@item Flutter tonguing is usually indicated by placing a tremolo mark +and a text markup on the note. See @ref{Tremolo repeats}. +@end itemize + +Other aspects of musical notation that can apply to wind instruments: + +@itemize +@item Many wind instruments are transposing instruments, see +@ref{Instrument transpositions}. +@item The slide glissando are characteristic of the trombone, but other +winds may perform keyed or valved glissandi. See @ref{Glissando}. +@item Harmonic series glissandi, which are possible on all brass +instruments but common for French Horns, are usually written out as +@ref{Grace notes}. +@item Pitch inflections at the end of a note are discussed in +@ref{Falls and doits}. +@item Key slaps or valve slaps are often shown by the @code{cross} style +of @ref{Special note heads}. +@item Woodwinds can overblow low notes to sound harmonics. These are +shown by the @code{flageolet} articulation. +See @ref{List of articulations}. +@item The use of brass mutes is usually indicated by a text markup, but +where there are many rapid changes it is better to use the +@code{stopped} and @code{open} articulations. +See @ref{Articulations and ornamentations} and +@ref{List of articulations}. +@item Stopped horns are indicated by the @code{stopped} articulation. +See @ref{Articulations and ornamentations}. +@end itemize + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing--flageolet-mark-size.ly} + + +@seealso +Notation Reference: +@ref{Breath marks}, +@ref{Slurs}, +@ref{Articulations and ornamentations}, +@ref{List of articulations}, +@ref{Tremolo repeats}, +@ref{Instrument transpositions}, +@ref{Glissando}, +@ref{Grace notes}, +@ref{Falls and doits}, +@ref{Special note heads}, + +Snippets: +@rlsr{Winds}. + + +@node Fingerings +@unnumberedsubsubsec Fingerings + +All wind instruments other than the trombone require the use of several +fingers to produce each pitch. Some fingering examples are shown in +the snippets below. + +Woodwind diagrams can be produced and are described in +@ref{Woodwind diagrams}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fingering-symbols-for-wind-instruments.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{recorder-fingering-chart.ly} + +@seealso + +Notation Reference: +@ref{Woodwind diagrams}. + +Snippets: +@rlsr{Winds}. + + +@node Bagpipes +@subsection Bagpipes + +This section discusses notation common bagpipes. + +@menu +* Bagpipe definitions:: +* Bagpipe example:: +@end menu + +@node Bagpipe definitions +@unnumberedsubsubsec Bagpipe definitions + +@cindex bagpipe +@cindex Scottish highland bagpipe +@cindex grace notes +@funindex \taor +@funindex taor +@funindex \hideKeySignature +@funindex hideKeySignature +@funindex \showKeySignature +@funindex showKeySignature + +LilyPond contains special definitions for Scottish, Highland Bagpipe +music; to use them, add + +@example +\include "bagpipe.ly" +@end example + +@noindent +to the top of your input file. This lets you add the special grace notes +common to bagpipe music with short commands. For example, you could +write @code{\taor} instead of + +@example +\grace @{ \small G32[ d G e] @} +@end example + +@file{bagpipe.ly} also contains pitch definitions for the bagpipe +notes in the appropriate octaves, so you do not need to worry about +@code{\relative} or @code{\transpose}. + +@lilypond[ragged-right,verbatim,quote,notime] +\include "bagpipe.ly" +{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } +@end lilypond + +Bagpipe music nominally uses the key of D Major (even though that +isn't really true). However, since that is the only key that can be used, +the key signature is normally not written out. To set this up correctly, +always start your music with @code{\hideKeySignature}. If you for some +reason want to show the key signature, you can use @code{\showKeySignature} +instead. + +Some modern music use cross fingering on c and f to flatten those notes. +This can be indicated by @code{cflat} or @code{fflat}. Similarly, the +piobaireachd high g can be written @code{gflat} when it occurs in light +music. + + +@seealso +@rlsr{Winds}. + + +@node Bagpipe example +@unnumberedsubsubsec Bagpipe example + +@cindex bagpipe example +@cindex Amazing Grace bagpipe example + +This is what the well known tune Amazing Grace looks like in bagpipe +notation. + +@lilypond[verbatim,quote] +\include "bagpipe.ly" +\layout { + indent = 0.0\cm + \context { \Score \remove "Bar_number_engraver" } +} + +\header { + title = "Amazing Grace" + meter = "Hymn" + arranger = "Trad. arr." +} + +{ + \hideKeySignature + \time 3/4 + \grg \partial 4 a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 \grg e8. f16 + \dblA A2 \grg A4 + \grg A2 f8. A16 + \grg A2 \hdblf f8[ e32 d16.] + \grg f2 \grg f8 e + \thrwd d2 \grg b4 + \grG a2 \grg a8. d16 + \slurd d2 \grg f8[ e32 d16.] + \grg f2 e4 + \thrwd d2. + \slurd d2 + \bar "|." +} +@end lilypond + + +@seealso +@rlsr{Winds}. + +@node Woodwinds +@subsection Woodwinds + +This section discusses notation specifically for woodwind instruments. + +@menu +* Woodwind diagrams:: +@end menu + +@node Woodwind diagrams +@subsubsection Woodwind diagrams + +Woodwind diagrams can be used to indicate the fingering to be used +for specific notes and are available for the following instruments: + +@itemize +@item piccolo +@item flute +@item oboe +@item clarinet +@item bass clarinet +@item saxophone +@item bassoon +@item contrabassoon +@end itemize + +@noindent +Woodwind diagrams are created as markups: + + +@lilypond[verbatim,quote,relative=2] +c1^\markup { + \woodwind-diagram #'piccolo #'((lh . (gis)) + (cc . (one three)) + (rh . (ees))) +} +@end lilypond + +Keys can be open, partially-covered, ring-depressed, or fully covered: + +@lilypond[verbatim,quote,relative=2] +\textLengthOn +c1^\markup { + \center-column { + "one quarter" + \woodwind-diagram #'flute #'((cc . (one1q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "one half" + \woodwind-diagram #'flute #'((cc . (one1h)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "three quarter" + \woodwind-diagram #'flute #'((cc . (one3q)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ring" + \woodwind-diagram #'flute #'((cc . (oneR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "full" + \woodwind-diagram #'flute #'((cc . (oneF two)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +Trills are indicated as shaded keys: + +@lilypond[verbatim,quote,relative=2] +c1^\markup { + \woodwind-diagram #'bass-clarinet + #'((cc . (threeT four)) + (lh . ()) + (rh . (b fis))) +} +@end lilypond + +A variety of trills can be displayed: + +@lilypond[verbatim,quote,relative=2] +\textLengthOn +c1^\markup { + \center-column { + "one quarter to ring" + \woodwind-diagram #'flute #'((cc . (one1qTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ring to shut" + \woodwind-diagram #'flute #'((cc . (oneTR)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "ring to open" + \woodwind-diagram #'flute #'((cc . (oneRT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "open to shut" + \woodwind-diagram #'flute #'((cc . (oneT)) + (lh . ()) + (rh . ())) + } +} + +c1^\markup { + \center-column { + "one quarter to three quarters" + \woodwind-diagram #'flute #'((cc . (one1qT3q)) + (lh . ()) + (rh . ())) + } +} +@end lilypond + +The list of all possible keys and settings for a given instrument +can be displayed on the console or in the log file, although they +will not show up in the music output: + +@lilypond[verbatim,quote] + +#(print-keys-verbose 'flute) + +@end lilypond + +New diagrams can be created by following the patterns in +@file{scm/define-woodwind-diagrams.scm} and +@file{scm/display-woodwind-diagrams.scm}. However, this will +require Scheme ability and may not be accessible to all users. + +@predefined +@endpredefined + +@snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-listing.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{graphical-and-text-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-the-size-of-woodwind-diagrams.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{woodwind-diagrams-key-lists.ly} + +@seealso + +Installed Files: +@file{scm/define-woodwind-diagrams.scm}, +@file{scm/display-woodwind-diagrams.scm}. + +Snippets: @rlsr{Winds}. + +Internals Reference: +@rinternals{TextScript}, +@rinternals{instrument-specific-markup-interface}. diff --git a/Documentation/notation/world.itely b/Documentation/notation/world.itely new file mode 100644 index 0000000000..d8bbbd406b --- /dev/null +++ b/Documentation/notation/world.itely @@ -0,0 +1,588 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node World music +@section World music + +The purpose of this section is to highlight musical notation issues +that are relevant to traditions outside the Western tradition. + +@menu +* Common notation for non-Western music:: +* Arabic music:: +* Turkish classical music:: +@end menu + + +@node Common notation for non-Western music +@subsection Common notation for non-Western music + +This section discusses how to enter and print music scores +that do not belong to the Western classical tradition, +also referred to as @notation{Common Practice Period}. + +@menu +* Extending notation and tuning systems:: +@end menu + + +@node Extending notation and tuning systems +@unnumberedsubsubsec Extending notation and tuning systems + +Standard classical notation (also known as +@notation{Common Practice Period} notation) is commonly +used in all sorts of music, not limited to @q{classical} +Western music. This notation is discussed in +@ref{Writing pitches}, and the various note names +that may be used are explained in +@ref{Note names in other languages}. + +However, many types of non-Western music (and +some types of Western folk and traditional music) employ +alternative or extended tuning systems that do not fit +readily into standard classical notation. + +In some cases standard notation is still used, with the +pitch differences being implicit. For example, +@notation{Arabic music} is notated with standard +semitone and quarter-tone accidentals, with the precise +pitch alterations being determined by context. Italian +note names are typically used, while the init file +@file{arabic.ly} provides a suitable set of macros +and definitions extending the standard +notation. For more details, see +@ref{Arabic music}. + +@cindex tuning, non-Western + +Other types of music require extended or unique notations. +@notation{Turkish classical music} or Ottoman music, for +example, employs melodic forms known as @notation{makamlar}, +whose intervals are based on 1/9 divisions of the whole tone. +Standard Western staff notes are still used, but with special +accidentals unique to Turkish music, that are defined in the file +@file{makam.ly}. For further information on Turkish classical +music and makamlar, see +@ref{Turkish classical music}. + +To locate init files such as @file{arabic.ly} or +@file{makam.ly} on your system, see +@rlearning{Other sources of information}. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{makam-example.ly} + +@seealso +Music Glossary: +@rglos{Common Practice Period}, +@rglos{makamlar}. + +Learning Manual: +@rlearning{Other sources of information}. + +Notation Reference: +@ref{Writing pitches}, +@ref{Note names in other languages}, +@ref{Arabic music}, +@ref{Turkish classical music}. + + +@node Arabic music +@subsection Arabic music + +This section highlights issues that are relevant to notating Arabic +music. + +@menu +* References for Arabic music:: +* Arabic note names:: +* Arabic key signatures:: +* Arabic time signatures:: +* Arabic music example:: +* Further reading for Arabic music:: +@end menu + + +@node References for Arabic music +@unnumberedsubsubsec References for Arabic music + +@cindex Arabic music +@cindex medium intervals +@cindex maqam +@cindex maqams + +Arabic music so far has been mainly an oral tradition. When music +is transcribed, it is usually in a sketch format, on which +performers are expected to improvise significantly. Increasingly, +Western notation, with a few variations, is adopted in order to +communicate and preserve Arabic music. + +Some elements of Western musical notation such as the +transcription of chords or independent parts, are not required to +typeset the more traditional Arabic pieces. There are however +some different issues, such as the need to indicate medium +intervals that are somewhere between a semi-tone and a tone, in +addition to the minor and major intervals that are used in Western +music. There is also the need to group and indicate a large +number of different maqams (modes) that are part of Arabic music. + +In general, Arabic music notation does not attempt to precisely +indicate microtonal elements that are present in musical practice. + +Several issues that are relevant to Arabic music are covered +elsewhere: + +@itemize +@item Note names and accidentals (including quarter tones) can be +tailored as discussed in @ref{Common notation for non-Western music}. + +@item Additional key signatures can also be tailored as described +in @ref{Key signature}. + +@item Complex time signatures may require that notes be grouped +manually as described in @ref{Manual beams}. + +@item @notation{Takasim} which are rhythmically free +improvisations may be written down omitting bar lines as +described in @ref{Unmetered music}. + +@end itemize + + +@seealso +Notation Reference: +@ref{Common notation for non-Western music}, +@ref{Key signature}, +@ref{Manual beams}. + +Snippets: +@rlsr{World music}. + + +@node Arabic note names +@unnumberedsubsubsec Arabic note names + + +@cindex Arabic note names + +The more traditional Arabic note names can be quite long and are +not suitable for the purpose of music writing, so they are not +used. English note names are not very familiar in Arabic music +education, so Italian or Solfege note names (@code{do, re, mi, fa, +sol, la, si}) are used instead; modifiers (accidentals) can also +be used. Italian note names and accidentals are explained in +@ref{Note names in other languages}; the use of standard +Western notation to notate non-Western music is discussed in +@ref{Common notation for non-Western music}. + +For example, this is how the Arabic @notation{rast} scale can be +notated: + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + do re misb fa sol la sisb do sisb la sol fa misb re do +} +@end lilypond + + +@cindex Arabic semi-flat symbol +@cindex Semi-flat symbol appearance + +The symbol for semi-flat does not match the symbol which is used +in Arabic notation. The @code{\dwn} symbol defined in +@file{arabic.ly} may be used preceding a flat symbol as a work +around if it is important to use the specific Arabic semi-flat +symbol. The appearance of the semi-flat symbol in the key +signature cannot be altered by using this method. + + +@lilypond[quote,verbatim] +\include "arabic.ly" +\relative do' { + \set Staff.extraNatural = ##f + dod dob dosd \dwn dob dobsb dodsd do do +} +@end lilypond + + +@seealso +Notation Reference: +@ref{Note names in other languages}, +@ref{Common notation for non-Western music}. + +Snippets: +@rlsr{World music}. + + +@node Arabic key signatures +@unnumberedsubsubsec Arabic key signatures + +@cindex Arabic key signatures + +In addition to the minor and major key signatures, the following +key signatures are defined in @file{arabic.ly}: @notation{bayati}, +@notation{rast}, @notation{sikah}, @notation{iraq}, and +@notation{kurd}. These key signatures define a small number of +maqam groups rather than the large number of maqams that are in +common use. + +In general, a maqam uses the key signature of its group, or a +neighbouring group, and varying accidentals are marked throughout +the music. + +For example to indicate the key signature of a maqam muhayer piece: + +@example +\key re \bayati +@end example + +@noindent +Here @var{re} is the default pitch of the muhayer maqam, and +@var{bayati} is the name of the base maqam in the group. + +While the key signature indicates the group, it is common for the +title to indicate the more specific maqam, so in this example, the +name of maqam muhayer should appear in the title. + +Other maqams in the same bayati group, as shown in the table below: +(bayati, hussaini, saba, and ushaq) can be indicated in the same +way. These are all variations of the base and most common maqam +in the group, which is bayati. They usually differ from the base +maqam in their upper tetrachords, or certain flow details that +don't change their fundamental nature, as siblings. + +The other maqam in the same group (Nawa) is related to bayati by +modulation which is indicated in the table in parenthesis for +those maqams that are modulations of their base maqam. Arabic +maqams admit of only limited modulations, due to the nature of +Arabic musical instruments. Nawa can be indicated as follows: + +@example +\key sol \bayati +@end example + +In Arabic music, the same term such as bayati that is used to +indicate a maqam group, is also a maqam which is usually the most +important in the group, and can also be thought of as a base +maqam. + +Here is one suggested grouping that maps the more common maqams to +key signatures: + +@multitable @columnfractions 0.1 0.1 0.1 0.6 +@headitem maqam group + @tab key + @tab finalis + @tab Other maqmas in group (finalis) +@item ajam + @tab major + @tab sib + @tab jaharka (fa) +@item bayati + @tab bayati + @tab re + @tab hussaini, muhayer, saba, ushaq, nawa (sol) +@item hijaz + @tab kurd + @tab re + @tab shahnaz, shad arban (sol), hijazkar (do) +@item iraq + @tab iraq + @tab sisb + @tab - +@item kurd + @tab kurd + @tab re + @tab hijazkar kurd (do) +@item nahawand + @tab minor + @tab do + @tab busalik (re), farah faza (sol) +@item nakriz + @tab minor + @tab do + @tab nawa athar, hisar (re) +@item rast + @tab rast + @tab do + @tab mahur, yakah (sol) +@item sikah + @tab sikah + @tab misb + @tab huzam +@end multitable + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{non-traditional-key-signatures.ly} + + +@seealso +Music Glossary: +@rglos{maqam}, +@rglos{bayati}, +@rglos{rast}, +@rglos{sikah}, +@rglos{iraq}, +@rglos{kurd}. + +Notation Reference: +@ref{Key signature}. + +Learning Manual: +@rlearning{Accidentals and key signatures}. + +Internals Reference: +@rinternals{KeySignature}. + +Snippets: +@rlsr{World music}, +@rlsr{Pitches}. + + +@node Arabic time signatures +@unnumberedsubsubsec Arabic time signatures + +@cindex Arabic time signatures +@cindex Semai form +@cindex taqasim + +Some Arabic and Turkish music classical forms such as +@notation{Semai} use unusual time signatures such as 10/8. This +may lead to an automatic grouping of notes that is quite different +from existing typeset music, where notes may not be grouped on the +beat, but in a manner that is difficult to match by adjusting +automatic beaming. The alternative is to switch off automatic +beaming and beam the notes manually. Even if a match to existing +typeset music is not required, it may still be desirable to adjust +the automatic beaming behaviour and/or use compound time signatures. + +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{compound-time-signatures.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{arabic-improvisation.ly} + + +@seealso +Music Glossary: +@rglos{semai}, +@rglos{taqasim}. + +Notation Reference: +@ref{Manual beams}, +@ref{Automatic beams}, +@ref{Unmetered music}, +@ref{Automatic accidentals}, +@ref{Setting automatic beam behavior}, +@ref{Time signature}. + +Snippets: +@rlsr{World music}. + + +@node Arabic music example +@unnumberedsubsubsec Arabic music example + +@cindex Arabic music example +@cindex Arabic music template +@cindex Template Arabic music + +Here is a template that also uses the start of a Turkish @notation{Semai} +that is familiar in Arabic music education in order to illustrate +some of the peculiarities of Arabic music notation, such as medium +intervals and unusual modes that are discussed in this section. + +@lilypond[quote,verbatim] +\include "arabic.ly" +\score { + \relative re' { + \set Staff.extraNatural = ##f + \set Staff.autoBeaming = ##f + \key re \bayati + \time 10/8 + + re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 + re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb + fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb + do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 + } + \header { + title = "Semai Muhayer" + composer = "Jamil Bek" + } +} +@end lilypond + + +@seealso +Snippets: +@rlsr{World music}. + + +@node Further reading for Arabic music +@unnumberedsubsubsec Further reading for Arabic music + +@enumerate + +@item +@emph{The music of the Arabs} by Habib Hassan Touma [Amadeus Press, 1996], +contains a discussion of maqams and their method of groupings. + +There are also various web sites that explain maqams and some +provide audio examples such as : + +@itemize @bullet +@item +@uref{http://www.maqamworld.com/} +@item +@uref{http://www.turath.org/} +@end itemize + +There are some variations in the details of how maqams are grouped, +despite agreement on the criteria of grouping maqams that are +related through common lower tetra chords, or through modulation. + +@item +There is not a complete consistency, sometimes even in the same +text on how key signatures for particular maqams should be +specified. It is common, however, to use a key signature per +group, rather than a different key signature for each different +maqam. + +Method books by the following authors for the @dfn{Oud}, the Arabic lute, +contain examples of mainly Turkish and Arabic compositions. + +@itemize @bullet +@item +Charbel Rouhana +@item +George Farah +@item +Ibrahim Ali Darwish Al-masri +@end itemize +@end enumerate + + +@node Turkish classical music +@subsection Turkish classical music + +This section highlights issues that are relevant to notating Turkish +classical music. + +@menu +* References for Turkish classical music:: +* Turkish note names:: +@end menu + + +@node References for Turkish classical music +@unnumberedsubsubsec References for Turkish classical music + +@cindex Turkish music +@cindex Ottoman music +@cindex comma intervals +@cindex makam +@cindex makamlar + +Turkish classical music developed in the Ottoman Empire in a +period roughly contemporaneous with classical music in Europe, +and has continued on into the 20th and 21st centuries as a +vibrant and distinct tradition with its own compositional +forms, theory and performance styles. Among its striking +features is the use of microtonal intervals based on @q{commas} +of 1/9 of a tone, from which are constructed the melodic +forms known as @notation{makam} (plural @notation{makamlar}). + +Some issues relevant to Turkish classical music are covered +elsewhere: + +@itemize +@item Special note names and accidentals are explained in +@ref{Common notation for non-Western music}. + +@end itemize + + +@node Turkish note names +@unnumberedsubsubsec Turkish note names + +@cindex Turkish note names +@cindex makam +@cindex makamlar + +Pitches in Turkish classical music traditionally have unique +names, and the basis of pitch on 1/9-tone divisions means +makamlar employ a completely different set of intervals from +Western scales and modes: @notation{koma} (1/9 of a tone), +@notation{eksik bakiye} (3/9), @notation{bakiye} (4/9), +@notation{kücük mücenneb} (5/9), @notation{büyük mücenneb} +(8/9), @notation{tanîni} (a whole tone) and +@notation{artık ikili} (12/9 or 13/9 of a tone). + +From a modern notational point of view it is convenient to +use the standard Western staff notes (c, d, e, ...) with +special accidentals that raise or lower notes by intervals +of 1/9, 4/9, 5/9 and 8/9 of a tone. These accidentals are +defined in the file @file{makam.ly}. + +The following table lists: +@itemize +@item +the name of these special accidentals, +@item +the accidental suffix that must be added to notes, +@item +and their pitch alteration as a +fraction of one whole tone. +@end itemize + +@quotation +@multitable {@b{büyük mücenneb (sharp)}} {@b{suffix}} {@b{pitch alteration}} +@headitem Accidental name + @tab suffix @tab pitch alteration + +@item büyük mücenneb (sharp) + @tab -bm @tab +8/9 +@item kücük mücenneb (sharp) + @tab -k @tab +5/9 +@item bakiye (sharp) + @tab -b @tab +4/9 +@item koma (sharp) + @tab -c @tab +1/9 + +@item koma (flat) + @tab -fc @tab -1/9 +@item bakiye (flat) + @tab -fb @tab -4/9 +@item kücük mücenneb (flat) + @tab -fk @tab -5/9 +@item büyük mücenneb (flat) + @tab -fbm @tab -8/9 +@end multitable +@end quotation + +For a more general explanation of non-Western music notation, see +@ref{Common notation for non-Western music}. + +@seealso +Music Glossary: +@rglos{makam}, +@rglos{makamlar}. + +Notation Reference: +@ref{Common notation for non-Western music}. diff --git a/Documentation/pictures/GNUmakefile b/Documentation/pictures/GNUmakefile index 4a8f2eb72f..0254c26d0b 100644 --- a/Documentation/pictures/GNUmakefile +++ b/Documentation/pictures/GNUmakefile @@ -1,27 +1,49 @@ depth = ../.. -STEPMAKE_TEMPLATES=documentation -XPM_FILES=$(call src-wildcard,*.xpm) -EXTRA_DIST_FILES= $(XPM_FILES) +SUBDIRS = pdf -lilypond-icon = $(outdir)/lilypond.ico -ly-icon = $(outdir)/ly.ico +BITMAP_IMAGES = $(call src-wildcard,*.png) $(call src-wildcard,*.jpg) +EPS_ILLUSTRATIONS = $(call src-wildcard,*.eps) +SVG_FILES = $(call src-wildcard,*.svg) +PDF_DIR = $(call src-wildcard,pdf/*.pdf) -include $(depth)/make/stepmake.make +EXTRA_DIST_FILES = $(BITMAP_IMAGES) $(EPS_ILLUSTRATIONS) $(SVG_FILES) -ifeq ($(PLATFORM_WINDOWS),yes) +OUT_PDF_IMAGES = $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.pdf) +OUT_BITMAP_IMAGES = $(BITMAP_IMAGES:%=$(outdir)/%) +OUT_BITMAP_IMAGES += $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.png) -$(outdir)/%.ico: %.xpm - $(buildscript-dir)/genicon $< $@ +STEPMAKE_TEMPLATES = documentation -default: $(lilypond-icon) $(ly-icon) +include $(depth)/make/stepmake.make -endif # PLATFORM_WINDOWS +########### +### Targets -local-dist: $(icon) -xgifs: $(OUTGIF_FILES) -pngs: $(OUTPNG_FILES) +default: ifeq ($(out),www) -local-WWW-1: $(OUTPNG_FILES) +local-WWW-1: $(OUT_BITMAP_IMAGES) $(OUT_PDF_IMAGES) endif + +######### +### Rules + +$(outdir)/%-flat-gray.png: %-flat-gray.png + convert -depth 8 -geometry 50x50% $< $@ + +$(outdir)/%-flat-bw.png: %-flat-bw.png + convert -depth 8 -geometry 50x50% $< $@ + +$(outdir)/%.png: %.png + ln -f $< $@ + +$(outdir)/%.jpg: %.jpg + ln -f $< $@ + +$(outdir)/%.png: %.eps + gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit + +$(outdir)/%.pdf: %.eps + gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $< + diff --git a/Documentation/pictures/Gonville_after.png b/Documentation/pictures/Gonville_after.png new file mode 100644 index 0000000000000000000000000000000000000000..6bafc25a9d771b162ac80071e8e4de5ebb9af472 GIT binary patch literal 23632 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 Myt-VqjCtsP0Qatd7ytkO literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Gonville_before.png b/Documentation/pictures/Gonville_before.png new file mode 100644 index 0000000000000000000000000000000000000000..ef810fdda947b0bed727157ef555cde456b2fc28 GIT binary patch literal 52967 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Macos_New_menu.png b/Documentation/pictures/Learning_Macos_New_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfcbcb3315e6a60e0b4ae08f8931c6a12b8fe4c GIT binary patch literal 87955 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ö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 LX)0FBTLu3Q^nDUm literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Macos_Open_menu.png b/Documentation/pictures/Learning_Macos_Open_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..7da0f54ce25f309203a580eed316db861598786e GIT binary patch literal 86376 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 z zD1a9MYW~Ru@qK(<&!qrOs zWedgL-+J?{8*e(WT4J#E#-rbR{KXR|`(pR4pLqCl_uc%)!kJTD(U#K%^jDvIcIU*4ukYS_2Y}E-ym9=E zJNDnSxtJ`%SBX{<($Qt8@B_4PdI--1TOhSewLnCu%ORgkg|nY`x)QNyhYsz%aAD`% zx$R}|maQNmIWZ`^j0_}aM<>V}7)FwGm>h!r87qb(BpBMtWhPTerO?9K=35J`-qpHEq>)M^U0kO{b4ZTCzdY)UuMaI8B1&dVBB9hnj2BC^ch7q%shhA}i1? zp(lj2MVSuxknPxme@s%V29RqCxZboGv*)%A#IgDsjs)YRWUw`Y%v{M_F-!xnP^Pb| z&Z0*%fQ}o;0jy-vgOxoo-}?Wu_nytRT~~J47<27&!^;tP4*)>`BoYY*Fq7)+mfR(k ztnw#+bCrLJe}MmjtL)EKNoA>JnceD^x~XQ91e-YkAVCmBPA`Xh?_P8G!d^C^`1xX+X?n7FF*11Z{PW$&wb|c51l)@d+5mF z_8av2cUd^*&lJ*czVO{|efybG-rC;w_4J@gfvq(F5p|_9$!NhA9h#LRe7&fXwMi49-R)_$)d2Qh zm>>a$hGACcLcu6|PYW_4Q70A?*3U{l&>(D!0Z{3c{yGN7RWZwLY}@rWXpf=AD8p0G zW?ZyUgUB$0OASPr%_t|vGH&)1N@1+_+y{pl?NY%203ZNKL_t(sNTg%^%Oy&o{QPbL zAj{Mh1ZhzefJ4}|$VD7u5o)j{vyg=ICjcbZxWiZ^S9uetbWvuT(OXE_r9Lpn{jw&R zg*KAPg5>?COl5Ld=O~2Hj2ZzD{+~(RqYu#0pte+mfz5WTQP-f?Wff{cNyrCWOGdOR z$W1_8rfAJzzg3~6IP%yZ{=wrPxcAaezw@8}_Dj#aaw#(axj;t0+wu2*`jI>Ku3p~T z*CD3ngTv<@zWdOnA3S?0IKT1g1)e;2?(FJ?Cx0?+A3wPGvu9s?gNOR{OE2A+mzoJ+ zzH#ZL3$NXI{`78J-Tm18#EUh`_Mmm^ys$jMg`gg+QQOg=F~nm$|AS z2Spx&AWdjWW(v-GB+LnbshkgT?%GuQ1_BbD8W**2?-KZCWY9yf1ZoruxJ{q99%!T|Gcn8`P2_>c@4}9jcr(b{h2Ty$cJKz4v zoqzPP_S(0<{(~0}ow;YL?`I>W-j00afjj=k39O!Q{Vr} z-@Sat*|Q)2?B|Ze7{r*YTVD<;dAmXUPKqR;?Hs=6frnOY|I*V}m;INqy5rRO2OoNP z)$0s+?q7cLOHcgl`oaE~o*aeeCg*SMEFY zUu)1L^(G5OSrdS(zoj-$fu z$dRp`o$1QugKIbT%uwoti`3BZCEPFmpF7D2%Ix-Tol@AqO}<>z1Ke zC@2-j4`yboL<^3jLLY`DLBT-4(L*Ujw9MW!!%!+Ul8p)V*;fe4!4j&001yzWY?zdC zHtRZm9uklxColld1SF25IUIinIK%5>=K&G|s2sO%SzeXRTVmx{D3vSeXaEC|ps4WE zpcea)=L@uCBMGWle@L<@1R2*7a&Uf(lQ#yER5iQ~g)_wr{hutGng{5eFlwy26?EL! z>e_}$3mEeD0^A@$qd!P%+P`IyWZfb&PTcXn4?Xn4D__61zklVKCw|cH|J+9&zN=q& z=JiWIlc0_h4?Mj4oxlI4?X(ul^6c=wKs3(`;PuvgOR!fprv6$cXyDKXI)$&7MF2|xl&n5QI6t(`j2R$IJwZSK8WV^V2UKoM|)BYUU6 zCnZpYFH{*+3D9U|n}sQX;t&a!9VbSn1M7XNZJaLYgFeAjM}$q}N+E1_kY!c>w4UEAmFAx@POmK^G8tmht-!UvdHT`qh@ zJz@{eG6uk^vV6nRK&3S0_*dirO_L%$0s%j#6)xKAp!5JFc<01#UdZTIe)_dQKXUf9p28=Cj7y!7Jb(!ADNry!PXt zyngk<%g;RX+|6v;s}-O&HRjEyzxAbm_oZ)L-qXbEPyE||{qLXn8CO&5*S_)PzxaQ? z{-eG5T@|oyEdjlGbANxH=YzT5*gv?$aYO?Epnfo~;^^-7&HcVQcJj>GGl%kxOMUnF z(d~oW>mqNy_Kj~n{n~}A2mAZ4KL6ZP2Rp0Nhi*+J{R<22(~<}RR(&K$Qg>n%%RExE zIN&tDVeg#?Fd{RTjZ;w1oacTp=iWh2;K-5H>65$LJ5$Ly3y3U14poL*36%MlgL;8p zM2eyG0l;Ry6Pxhe2S+oYwoC>qiZx2p^1wmx;2?XZ>{}Ew;e0XxK*TsF*jhs%Ax20z z=v|~UTQEj2Hy4%znT{c?i7_Cc!rVcvTAASzAlO)#JGp=6Y)g-@>~C}?(|&t0N*wiQ z?Ukf5!7M9xMTUqG5G8PAH6BoqT0>A(9x8WUEvMvrI3{DW&pHsxw;(HMkf^UvLl8-y zehQ*OQ`3fjXL$vPTQr*>EAA{xSJiO4jww-rHy~U7WT`vUJ5rd4#9A}|O$(u?fAE!` zJk^x_(CK^s*{2^mw0-E2&wcpWFMs{dUp#c~{s$jA_uQAi_`OsA!{aB9tj>MllUo;_ zx%biYtKR2CJN3}N_~Z7azy8|4|IriZ{rrO;`sC>|)=(*2zx4XcJo1HmPBZ1G8}6KX z@S#)ReeJnxcisKmlmGD5ukAs3???Xdkvq2fd^45IG+prE;9zVNb7s?;?%$1~^_BoY z;K}XnfA~-T@oOZY%`_&5L8Q>X5I_`y4lNn4M8?vXG4)&Kqd z)uFpS{MnORX#4HupZ(zJAASQstad*3_!mBO_mRy08%T`BP-aw4(d>~2pwcbM8YH2? zCvmvs>T?PNCt%T#7E_e+VCJ;qYD;HM?q0n;dyimw8%ZJn9n9It$s!UU z$^QQ0hb$a{h_u2~)+>+0VGWxjGiEtaOr4t{qp|mlXc407+NzAG^VqQH4N2(ik*OX; zYb=HW+SDj(XdDx0DIrL;#!O)-M6p;`=`M>-h@MuR);zin( zB?!P+4vV{H&1hj!Mg&AU`ai)C=zv*PHWrMa&<2PoffgVE`HrrQwl>gYW2-UmkOESQ z0f2oNo?5LOghkjPy%hpu)56eo{gqpz%0JB-DVW;NT#yT;0F1H>*Or5D`k%?3kpT!+=tNS^S5v;T7gA(@aEUW-$-B1Yu#| zl%zIpnUV^?B@vt&(kX!{3+`4{ng|15D`#R!0bPs`txh`l9im`i6QrXFMZ{29W<*1( z?tixGEx~}eYAuxzyPcv0L`zsqWsH#wv?{ohKayEwW0740EGqgF|9H`(6qN>s^_H+u z4J9qMq4^+Unc5@(2?V^!Xqkl;;h49AdwExAOU3W>)yWmg(RTfXWUwr-gy5@ zwKie+wv;`iO@XvDt~^MqJplSLf>W)d;1;sR>O){l58z{(A_h_kSKk%tlmhe zF*pugS`s5kaD#|Nl0G*xKq~oLLC5; z64XjdGwp)(b+BkHGE?Ph5Ts~9doUAVb>EWYA zxz=MP0i=|`Lh3eM1wbI7*fe=d5LoA{15t;xwXmVY@X41NWl97c65*Vv7E;4Tl@0;X zqNfBAOgQAV+=)R7Yw6?`4$*p*{5e6A6hVh3NQ1Wr*Ng=t2nNaK(DuNBaTqMWo+YHb zf^H-NV9^+~JhjY%DP({sf)s}gXob;}&aw3kB#IKXVBqttsg|aSHt^arUmv4Lf>wP; z>scpIT@T*9;wikP#arGC?)q=4+}_=NtI}i?1nShBurYvQ3ef6A2t?XATs)G4y(pBV zUIm%lpL6bF@YKnjGbeTr@2>b)0lfM@&u%| z#O7r2A$$Tn5L6}b!$y&o@vou9577Xcs#QU;D*+4xQO%hI0xVGzaR0`3Qa_O+|A&l5 zxrLHp;h6?J^GjFUpY=zDn^KI<6H2*SgQDse>!HAi#JFYbqc%#VT5EaSK@=R$Takbd zaM8s3E)bDk`&X4A|Lf+gq`<;+1O$^DJe>RWK-%wS8ErUao3sO|nKV zY9Ii)-foLihC1aZ+HwpCAlbrCf^e+42-#K;pei*gL{XtsN0OKjZdy`GY$0fA&QpWh z<~1>9B2`H#j9g0eSc|ScAlISh;8J7z!k0CGio5YAeqHhSg^=#6inv%)1414dP_`@B z&lnWwODsHb0$I^gG}@__z@THH$^Q+^AmL*`1r~|)TSF4+U)5yEy%31n3f3zJz`M{W z7-dkWyoC_{7k$|E0f`lk1|T)+eHY4l5PreUH_P|$UVr`(3rFwQOL03C(H24iteBfD zW+I?e2BS#M1}D*`Zl`Oo2@FJl6}IS24-iXx@^M8;z00KArGpuJJ%c=XV(0Yf-NT1h znMms-S$q&ddlFl*25HraWgT<9u790~M$@jd_vOfQ~FHa2`3rfcTbO%o7UK9+>kqGej257MuH69;hxsoC<4anq)6YrMw?)|;{%wa=RiX^qBP`P_0|i^f1X}1Y za{!E%Ha|-c0u|;-Xo|>`oT31dY}c=0%UB>KB_PDTSrM8Sk~T@DuJ{7TcRz(DhF{pE zRr`Snf&sJO z1Ov(d98rZ4p59>3V~dy;p~$ohDJhi%DzIyiiHdmr39EIwD-t9b zM#k9fNR~mWB-@k#4~%3b@PT=ng~iKXH{ode>Hv{mDq#B^rmGLD3G9p^j_3wS-A6~vT4;#lX z@6Eejye37cw-;K$)Dwmc8(}q7flT@c?0B0RUMhav)(6Si)Adn4Z@>TShBu zCzA85B*}*I6##Jf79wDJ6xDko(SR5LWa&&ophe`Ilm$Ln?;{w27Jxv2R8Ui6u+DF% zVJnb8X7(8e}j(vO#nW*&OcSpTWkWW1H+^)SN= z)_`3By;iQAq*81u8G676Nfq!dUYY@;UOCIE@&km=VOmr{;R-1~PtXn?E>u%H0Nw2J zxt}CJr>R8^1)~fB{I@I-ZFS=Go#*d7f8y}Piz*^m zcMq<-_Ug6O`Ew^C#nAN&uU_Nf)5i}7_FsMOnb)qh6KBqyJ9|6`YJTJ8*H*_*99(?q z8g_T*%g;UklS|WyJa_8+`Lh#mH^f>~-ECMjO6>x6$_=a3uzPn)fSh7#9 z^fld*L-04N5E3%Q=#c1a^kxg;pd+(S6VY?Eiety7?VY%Cb-s4}p!Y6WOB=jH{|JR) zV~;X1b4VU2E(OPt>>6U3*&rxEhX{3a8~jo5EJWE)Fc?S0gXn-|7cIxFRcvFUjdGwH z3?oXFp}Pfh&RNb=Dzc7|*d8_2MlFC8WDB>)!=*-Y-SCi?5+WDza&4Kyf*_u2g2m#n z2BRC3hfW<5dm)0C#x(&=K0 zD2tND1|^yjl|wRfBi{eOLTTt7G8`Ge{{D@Fn>SDFP5|@Z+LK@T+RqMnH1dTPe)jn1 zfB)F^*S`F<7yszL|EG6sfqCP}?|xnPeDd`1)la_imG58LKXqjL#piyq|M;ixz2nS; zn?L!=-@keM6tkZ_cgObrHHojk`syxp`urW!JM8N3qAbh8jn}tLF*#Gp%m{~l%fV2A zq7e?L5{tXm3DnKzsYW_@+L)4=c2yyjv21__9!nblZJ`v2E-)jZe$ZQw)zpq3kDcx5 z(zU&tH|89tJ_cBU9EMf_BYZ(a`;i>nLzHOlp~Cm&Of7n!{pg6u2tX;P8ikL4s4L-b zpwfbsT|L#N2FF_oRyk7&7NiwZmDQ(a3d@iRDnN&P zE+9RK$>`GkzWdNq%?!bTWrRxb1R#N7Sfqi)Vvs}6J=Hb~jE;^c>=BkdFQ{H(ydaRU zuUWOzakvtI_2?mY2B4rE66`>~(JPN*S#j&g)l>>1&`5#fw%m1Je#@fVd-<8~{lg0{ zKlkH2b^izMJO<+GD^LF9;?2+f*}puuef8^K{L3G|@aAV8xa+Q~-}>Hjm(D+O^4bf} zzI0{xGLn%_tD25K6Pk?#BE+~GqkcuLcy*;0F)zKY_baT)tYFEj6p62Y%tMGz-&S(Ef^cB z8Dt=a$tlJTs)#a;xs6#GS#xu%akV=g-fdT|A6&Y;x3}M048g^m)Y^Gh6r|uuMY^qqXEb)2xA$fQEPm)Zz^k11wxpkq|eB zLc(g-fRC&*N?2EBNcY+Tz_Jq?0c|`(mgQao7Vo3VlTb!|Kx4eMivHH)wfDD3Q1#n2 z6s8CVH>iP5WHHA0+ZHKr-hAoJOV7S>Hqon1oy99I(lYL z?T&{&a_-B|JbB~cPe1eG8{2oBKY3)Qzi{IQ@WfyIyRUQS;Kr-l_nhwbRY%oOp#rwRBJ)7XKuAgP%1^VDU_gvCMpQ7D9fZn*IQ=NU_&r%9RdJz zxl|YH01k|GIEc`dQ^YjI+&jPu99^7c%P>k@tjZ**O|8-)x)ESa_?xZ=NU0_CL`Ybm z?E=t(kaObHDr=2gH6X4vOp^g6QR>d3AOS``dU6?|GANP;56W9v*tHl05D`)qosxYT;qu6v6D7jcTm4$0H=DB{I`|)t2bcQidF{rZ!niWN^r3q{YqQ z8S@V)JMS7#HUV;MI>4<6LrZA0U=Q_h9;!eTK4YAuFaKTYR(?f zBAv0bR2j2qPk|yB!|68rid1JoKuTDgNS%ZdX_q~^FjKAZ#Idd2?dkOkH?Q5?@4X8Z zlTg4IfuYspK!Sz$!%p-PAk-Y_nXvGaDDFUm9Od3|khz*7g7chhBx+%VwFYJjBr3zqf@l*xJt8UlN)v1OP^E9hBC2^$UcM@gSH`|r`yUKLaP4N_ zELn!u`;!cz0ilwt;nV7tq@&c%Or^#=V%V5uB9X@e0F$C&+1Mx*L;DF5grj%`pQ{8l zU}&H-1xj4}&}6V6v7T`smSK(dN|_}sWAUByS*8T3>*ReOe(=8gpZwC-e|%~0#66Fk z)Bacg=D+;tr_cZ7sqa7e{F{Ozw$Hx*Lm{3!d*axkEoDD^{-Fnt9s1f|{>2Y}^88PK z^wg8jzPxuJSGw*Or^DN;H(q?^x#wS*!FSx>-$A(zyEKXcg=CaOfE@Xbi2*u+MW2D` zaM)GK+yExj?4q}a%pldveG|b5n69Eu*!r{zyOf#g#bZiu;0jX7xkF$Idvos1+B?YY zZQgzE&>g3b>~2pa$BC7-JOLmUrD}A05Iij?nFBl4`Di8vvRJfs=!sJ!q|9s$(bxj? z^_?9N(Ms4C01%wmh+rABT5xJXVor5b+7{1-*{w@+8EE`X3TSsd{y%cf`xrwg09w|7 zqoA1C!>DB{krD16J^ZDT0Tu~JOroYFNS67(8e>(iWd_G5Y{O({`#Z*_Oj4*gJ%%sc zt0^Wcq^)|sv7Z0~e}VA{jGW5{^%KvyKdKc4Y%x>HX(!d+_gmeX0{~Fpzd4;afA;8B zS37g&sN%*29=-3(sdM+9)y>ymao6cS001BWNkl-uUxot_4?M)Q)f;dZK3(beB%6F$F@TN+V-i#tIKb`dExT@ zx%ZvF9leBaCAZt9w1{v2=%p_|`SQ-rjw8flHGzz9t`stiW(2_DS&or_7{Kx^%&X2( z1yP8yLzA>jQRdW?fYLBP`g~tq;*j>IQ4)qP+rPJX6RdEA!@KS9p%sYCHF_?jZdzv< z%za5cKp;WKNk@oq$4vS&AYcj~<_?gV0|p9%D9L?eC|aZ)ouJCtUGo7U6C`Zr%St;@ z-v%iV)M}i8kv$&36m81PCE+yS?N=phjB&c9wZtI^A{y3+ELhJg-X= zg1ZGEM}`>#in|R;xiP=6o(utWyeWd7odms!Ayu}?ta^gRM~z^;r9vok0k45gD&c*h zIgA;xXcrv0)Rcro7^l~E#oxF{YIi>J`Sa>?PXM`f>hVu~9@!7NV)xV|pZLQ^G8qB& zo|3RSa{95)-l0A_109rVhwuOBAKaf#!l9l$we!H|K8HR#F?0$?&wuc<=RW`-v#&w> zwkjN(-R)LPvhZKku`ePaf&th{1VFA5 zDO;8b+5q$fA{oW9=~TTGC3d7VwK#in`{<$7X?uM_8SZQ!q-_flW!U zqZhwbF~-b&-2u%`yGPVfT9`JM?x@!TUNA~o2}V3gB8i;mS{r~+_IYFa-?k_3b-6v! z3P5p-NYHWzkeSmIgH)@S#(lU%T4+x!oPkjBogpHkYX)x7C9`J)qeVxWNfs27kaT8U z8(R_K2xk~DDJan?YYx#dCtAxxJ8f%g=kTGeOP6k5xiPDEo2OF}H3A)o5;a892d62? zqDc@|JEO9R5)jlHl@P!vGyw|l7Iv+XI|LLE6i^XnP^fr=o)+6cU~2T<3?gMdcdZ04 zMMTzhI95&HhH5q$n5-9CGq}7|s@EG#PeEi!aD(f;IRS-}mHMlgiSQr?C}2G3ACK4G z-vo9+LfEwv(Cn{gM=T$?-2Y}X^Q%iTWDSDk4 zgOq_#Pn*~4SG5(FG_jyqDklcOVDz*cQ2Iiqf`Q~5qFq^Fc4kLwmDFWUI=Aex!_%Sd zLr1R97cTAZ?aiPXS-DdHr_9O0FoRLWR_61HlMtBFupg(yu>V1j==^uG?&9vV5W@;h zka7$ox-dlq*)!?j0kVysg@baV?zWFnm;8FEz3OL~qOrm1z4y1$`rud%n4=0EN_3Uw zJKvH-Sl}bc7_}P0IhrmYkTrYAmg(*o<;?XuueUQngU>r z#T?Bog@9!-E9?eVu1#;hGqm~*iUyy*wI>|kNgHOr+qC2_8pV5G0_7IZw2&0E@kPp^ zRS_FB4Mao<$Yi1*MzEaG=CXmxqJ-&C61kC67pCTdFq?o)__5e?7uHquWFM5!69*mp zJtg&?2M2wBzc=#a(e3x0J9O;m78t!Fp&<#z@r80`=fPbGAf-7qZL+RZRJ|CaH3SV`%w4lH z7+WbJT5G8;E$1!eog)JRBNg(hIN@QFz(RHyBFFMTL=5AXHiRHRkmd@P@b5wrM-Tmx zN&|xG@F$k=2K}7sH%4dCikpVgrFD|^YZy&SSh4HGJ+XcsSXcWV6ff)Bbb%PqFDxlW zZnMJi_ZN=hy)2{+)C53);g|%NBGl7?Ggc*d%T~O|=Oy2!?`K*lA4rw;m1G%?;Senj z0+iBmq-w!lAyjZHnLQ%ZS!Waph6G4F=yM>_mVPo5dzn+q?Nz($%6k(t9$2$C&mjv%aBsq`yF zu~N9tH6a8v91-0aS8H^&(GDSDM7m1?JiZ%aF@RTyx& zke%&*Ml1T2<>WGINDIBbM}*u{8nD=<7DMuY>vc2*N$dH@*cB#DdrbLkQRj0l6g)ukevsOYXSfiQWD zYelkfyjl^ofh!!XxX;k&|0da$*ySH^k*EBCHbmf2=|))DyIOuVw~xjAb)J2fOBhan z)no5PsaZo!n{^Y~DJ)F3CB@j##uye7+TfQ6Dk(A8y>lQUK#`H^AX;T21(OQn9mWn? z30oj>1STv;k1T2&MmJeB}A=Uy2mH>veGz1hj85S1Z4OL-*n-cP&z?4|uls=3R%D{Ek zE4YPZpkfH9vF}u8kfH!PU@4J-^xjb74=v7ajL5{~{`<3K?8}FeFhIQCvPKGkECjOx z-{*rj-gtBQIZK+W7B}kj68P^ePi}trOP{RmL~jucJqCDInHqa08VyliP|5g%$fV9KQai$NH9BR8Vjb zEYu}}t0^+`plbrqd#-VsLq{7gFp36;*93tWPokt|F+7g&coMe5rv$Ws#A>3CnO!fc z3)h52Nw{_4V|2@Xm7L|vt4Bcrk({NV0#q$5EHFn|wyN8kHE))M;M|S+wA?g)O;m=n z`kr8$Rws@h-{A89zigKOCZ}b4t3hMYjRX~_i6O8z0GR?2&icaQXWH8i5e$%wt~rNc zJBN>~gftUzrbt^e?C%FPKpWWDL`?W2=YU9NPYBT*t3WZkEY4ttrn;I`F?!#vk2Qz0 za%;s?N4F1cPp@CuzkKyTbMHcs4bd})nu-*bOm)SQ2@Y>w3utUvbD5saWJpysYzw5& zAv^AaoGaCUr(k^mMq&V&N{CPdrzvd1Lh-E8k4B>LA*yrHT6M9G5Ca-H@XzJtCPlmMd?I!pV2 z_t-)+?{Q|RlG+47J^R#}FG3fUBYMa58v#hZVkZGuIPHoSKH$;_kPC16BqKm4h?5iy zleJ_SFrzggIYQVSf8l$$TI1Z&2nKtXklQQt8J*nOYVSL{dvT{-yt;qodY^k{N(sZ@ z;DE3djS&%4S7t|qB|(xYAemh)B8aXrR4^!s1}6}Zx{#@@RrD-^Fe3s0M4~ZzYR+`# zh6w{`01c}-063tQ>%^P%1v9`p#?onGRFW*lg2_9Ie`rg&NPren1UoAOD7#$(mAM6l zjuwTCE-c%Wx}3|SbV+Nx>U}vDXd*xW>b5j=l#E7@!*hY4LE5XmVAFVA3KswgvQ@Dr zl1i(A78TKjK8$hiWf}WTz5ZqWQ7zOjdF0(G9Nork4qFs3XHIsWO@L)6Ku}|=_dx03 zdCTN(Qda|KgP_GAgPEc$LnLkI1sQ^3YNSb8-8cy##qtjdp!aS@o0U!Q))_$w2mAAC z)uuMA4aP#!7wiPvJpy#*D3*nF2nR)%*g zjR=NX;dsecNcGj!NOggR(Gjs$b}S1a4#92gi3A%Mv5rj}e23NK2hf0NnN~?9p^UPC z*XFzfVPr5Q1#9~uIn1XJ90^6Q%9z?gqvbpitvMFddF-PRLDeQL2o<;r8WtSSjE|ri z95EO%2}z9%Fzp;MLKO@ZiY)_NU`qz>p%TX8&lm$E5Vn9y8vE+)QZ`}h7ZwhA+AnSo zrzQbS>^;**9LX*zxtikKshz{S?aizE zm#@wH2MNjAL;|hR!je6Mg+y>{fMlMxE*y{)0hKAnpO@9Wtz-QGshhbHL2H+l=dR8b zq(Dw6F2!3As_NblK%$bbZ*CgZwR-I|GDgsXsR2e35T0<2x9$HrC5Pm`(OGthR0AcOvdgGizuBY}2`G=4H3PUFmg<=md@K`ErY3QCeGi40Mh8bNw(nO z-PMtu)un6G>sR(~-kghP#&)MvM3k0QeH}@(q;71K%u&XyRDr=5B~@oqNFwO0@M;m} zWd~seBZ8H26r+$M_+msq$$;$d!n&PTVm+xw9uTFRa&SUxYi9OO79Z#MPY7$b9M9!C zV84Et43I&}=bttNa!67rlq#`HBngL!E&Qn3#<0xlGR$%ytRc)Z2h|DZT(gsRJC@Mz z?zZ5;ZGu;WV{T>sTehU}W{pb?zvA+3+Ai9#URt2)F=&qyy($q{2 z+mV==h=i<=3aa=fx@##_Y@*DNQps6@qOpON0!xc8(2-U2Sz!Z>>vZr2a#uf!l5hMbbg#Zj9{@zeqlPZwNtd!GQqmn0L znc|JLmZbEu2o<&)izGr2au`8PsH|AIR_px)P>u}`Ku)e;2BLd{SVlB}G765pJ`f^p zK^yWNY6S#R!>;GY102ZZc5W$S)Ph4zA>1+pAe~i>l8_>7|D@c4r}ejoD@lkptya@& zHBHmhMl|iO`r$@-O9wVaC`n+Onu(P$O|dD%0-klecZI*!>`7uwy8O~hm-W^mm{6lh zU^q%o3>%0?)^Ul^R;&8AjahoEipS%N>-;rM7fsq$2Y$UHEsMBd1$=2W*Mz-(I2H{P7&a==fM~X-a$73|qD~}jsC!y+ z^=XV3gUBG2EbVW5Cc-Q25D^49|5{}Kiwep4$6x+`zy7nUgm#ady7!?EKm7i)t6S~0 zzoPs?o)^i$!Smn#(l?%Z>1Gc`Jo1Hq{*k-3`{ITG00Tf#kv7)%T`EPZw?OS?Dd4&B z^1uG#-^Oa^5B}_5o!;(?oF!88)u+Dv@4oqbJNLk&pMLzYBiqyUm%sbxfAd{zAHL^f zpa1;*r-OR+yMOn0Prf+!Y}3}c`yP4d!S|m$yk$G?+qb$Dk_-W1K#WL2QDQ>^5zR5{ z_UH*friwXWGM1EvA9C*9Xz?Pr==ZhfeLDJi7JT zr5hKo%=TGc%o zUWy1rYAnhIV3Bsdv6N6?n5gPu|1Z1=ut-giGFieTOAbjdR);#^`+$rAvg88*He)f} zgQW@g$=eTsh>#5fKq&AZS>(78wwsxl0scWUU(hNK35l&=}^Dq#+iJCO11krE3=4aOrL~?oJ)@I+X1Mj?O zpw-V;FHd~L%~$`;fB4%+fA63F$tUmq(qI1hoBQS3mqg&ko6kRa>GYrd%Rk+|dhxlJ zFEXxu>u zi40oq4|1aFr{<2XZeqwxrIhHsf^j;a9NU!TxDlwA_h#r=*O zU9tkq7QPa&(6jdNR9G-8L}SI4ftVcUhq5l6UtA!vk6{BAf{(h&Bjv?%gnw z*>eb*w%kpdE2e>5lI1$9qFg3!{iHOo4bX@Zam50N5(iO2E&=#l0PMMyO>d)q4P!vT zAON2MS8<}G0Av+Z!{m>RvUCS9+|a`@JHV5OA$e_}^FkRcoiqmzxh_OR2NvO8l9;r5 zi0Hmhbz^dV(-INe=kI?1eRsV7j#GdASO4YW^*sOwdpB<0*z1U`o!#B-mGLv@y=zx* zWSh3PRsy$HD+BTVjceDg@3-xp!$)@NCN%#*^OcJ?bmjvO+sPPc>|7l^c61eD9=!hI^Uu5%CypPBqldS*+I;gykL{hU2I%1Cjci+6(**UsoBM5R z+P`sqZ_eGrM|Zd0>bLnV%UJ1+PfE}{=txx?0|H5l$fGojV}3C@ZaioZNM026l0iJ>@|8Ll0Cr~_L8NCS+PXf6#+T!5^4;mvXM&v=uU0i zkjcH&LCo7zoH)95f{QU(YU><%A&^ zSzJWcsc-a@mHSEZY^rc^Ft8Ijj}c>&BqeQ-7s*;M8J{#hCBcBbuRa-M)PVuKOyt$S z`b$8ra8u4fN=R=hKL=HUv2es&1rUHG!x#^6X-HwUMB*?Iz-F>^7>PM|HRAJuiu>K?PK?R;!}^EI=rQWYfpXmAHM(0o5#)^ zJGwhvoKJk_@rO_DZtY$C(Ko;OgIBL}S{?e}M;?FR+=(S~qZm7fRtGFJ0N+zuM1z=&{Eiec<5ID?fYTxr)*g#QmpI0OPKQAHRC(YhVBJ4?g+%M~-a=fVQ=>+rIVpU%s^W z=9_u_#`QPbRo#60+u!V0FC3h@hUKsCfGdxx&J$V{b-< z_AEmv$XJTjMgcQM0?J%9v&mg04_X_Py&@EYgw6^26HsopV8u1PYK9b~piCoZ&k;?A&|pA$Ml}<|lvg{E_+c)f*`? zuYB#xUpzSdfj{_zKlsSqdyjqpiOV;7RVpaspSu?Cedt$y`!_$?fAq-1kH5U(l6SC>1oGyUAAaXsPhPsA%P(KOX@5dD zu3f!!bA9po$G`o(XKwZsu-d=#S3dEvlPe0*TExyoFs63$w)cMQp${Hy!`SZ!*RNlD z{^=*a@#v3Z@66s#ypHeRuq<{HxnVzhE`C4~2|?rY zTKO}RHe(?5)Z8UuifF_vr-L*oBuv|A6qn$n^uF%p=yQI0EY6q<)ZoW(_j0m=US|eJ@CI&Pd)bBk$ZpbL${ykGw-|iz9%kTgoqoj{_vHZGppym`1$ANYcIcc?cBlKy(1Tt zq_%hd{*V6p@pDf<_Kh!p`Gr?re()0?zb~#G+`M-6`EPvr>%q%6!53e>_QA8q_mA!# zzk-ve&g}0(nqvww7FsNnYkSA;fAGWi-F5_V`hmwE{n87U@oUVQfh51wvZ?M^w*41m!te*bfyeR4i%XYYRh1Mj`}*a~kd=neo2TN}BG zOO=%p<ggT0b;Fp&Nwt%a0wAUojR##VF^Be!w09pl zdU9{)wW~K?yV?(WPGKR1Y`qB>hKo5S0pB>wKsoquFdJQpAhV1gKq+j_!&=I=^lpE3 zSl~%Y0EtZ=69^P?LCKny0w^*df#qE`O-xv#df@A=@lQ~S?d2SCl&Zv^&N=;?*c8epn59zA{T_G8iW{B3Q2e|K@v zNJ^QpbL`H0A2@gWg~z}8g-5^l5AVDCQxx`&?O!;564<}({2hBIce*l_UCfctHi}aN zxFIAs5!q9SqemE5hCzp-EH~O^@XKM=IaEephnhH4RjhVToxg20-F)iEGYf^uwtwv8 zg$uW@d>#SNufOt@zxodH0ZC+_>?$M0#e zI(lqx)qLUSn}92VgSXQgVqnyQx5tsyb&pc@um@d<-Od*+z8yZDq?~;T4Hd#*LkGXv zY?=v864Vtdb7p07nE?$lmcV9c5S$*rkla1-ijk!dKoDW$OlS>5h@k;?&I^;xs}!NB zH4BiVybuWbxTBsTxE2sReSCHD`0C`f^{ba}zIN>(=fsj&D+y?1G|P2aeA7rBw=q0L z^i+2UfF$ILa)_ARdkquGFM4-=CSv6BdoY>HC6OY-^X6<)Q0cS;0VK=}&Zm>;$!j2o+M9+&MCjB{fh)!68aLssINAq&h%=%LFeh zh{9h$91m9w+aS$tWW1FU?a1*nr%&}c0WjjZN561m{_r1u>H|BMUwHP1FAB;rj4Id1SB$I^41nBT)T24{YMg2v2fSRC3}WY z!5Kg{P!5L1w&@Ys)ulik03tAfHem(;#zY%i9OhlsY>f{v*p;XqJctEoC(DQ68)DVl3~_5@pnhJ7f5R#7(^OF4H+Nad=9Kqe#L;|3z)%<<{O-gNfH z?h6-hynN{($TpFvg?ky4BUa=L07x()KvJ$+YeFYL_X;rOppd-E5QEAD5Z>;2I2))E z30RCruScXD+Lj8w3TlE33Z|fW-wTvJbIcgMm^>+DC^vvX8O;FotxWXlrsvqEkKhy! z2*Sc5Ttt@WTBYyalY|I<^K`p)X$oB!d@{>@)M(n;p}$?yFA|NfU> zc=1|aaPX&=pY?qNUcP+g^0lj1uU@@&@!Iv*HeleA(v=&RF1>W++Pu5FS{>Po7k}{M z%j@~(_2miwZ<$lRX|x*34a0*Ik#sOu0J7?)oTfEIX~~!&m{R&gV4JFB;nHBC%v|@` zf(+2xbmYxvPDTJiYOIq3Mp?!n^+GFX7)6;tB|K(k&KU@Twjp|@L2%B3Sy|#F06Aw4 zCO4MVp(y}>-qAZU%YV_@sY4c4(ZI8!GSVbT!_XK{N*aNDnuY|t87U$JP!;nd zQI|rR;RR~rXDxOVBn^k(;D@1=qf9)Kh^R{z!x%z}z;Gs0A{0wk0Y=DLX5ixjLsm0( z2{V(daar$;2%S4_k9`=;s1`FpFJb&lY5TclcW?jru{Js;rB2=Zv3nl>yRU!o3+HaX z_Y)s^&m)g~>-js+-F@MqKlnd_}TtzzxTll`?tOSQ&0ZgS04V-i|_mJNAEcD*rmO3ut%e=KL7R4K6|zI z_y6+0e9y_9RJPrtXZ8>F8dE%W{KU!QM+u3sI&%E%aqI-&2A(4k=TDvf)<1mVy8r-b z_pbXM;y`%;N6y^+!12HQtIs@h_TC5Yx^PmOKKQF2{p&CO&C{!+cYW}ePVYd{YWMj5 ziRovw@-qraN1i*9Og0wm^n$5$P@RmRQeD}iWu*nkp{v%s2~3?}q6K_CE{KN6NRW-u zg`}gpfO1a8Vjl@zqJ_951r&muQKlAv@B$`7QjQ~`N~oc-%m$X0-%-{9D|;Zpl#gUc zN|^vBhQQt{Lb`~m7^#%dBIb?;Z*I&697uDExv$9|l4ntU0KrZC0FdC0doe-2VjfUKk0HuV{ z1cbP;!vqj8nFh@aaSKF}Rz{mXR2bdr!Jj4&KFU4)yjhsAsU>o&(rpiOjBXi)yF6gg zAKIz$6|kOWL$rr0WbZjMGjm?AZ+_|n=l-Yv;lI6pbB(tKUXs{WQ&T^f)18w<#xxni zOhzg*Z(MrzmHEPj6I@??{7YZ_K5zfcU-{7fP6H6r6q(6rp?U7sn2-d<)Pm@9m$=%E ze$cIFTAOT_Muhr2r^skQz+o(qF*T+DiH+Lnxjn( z^SY-n?X)Hxth>k-tpzq+dIJIghmED5ct8T%sx@vXo2hy38uS7qrpWai(WFc%+SGDh zE2as3P607ZE9zi9e)ZC|lSu#VTTV)jIO>_4%bs z2d`YYSwUu{Y^MZ}&R_*WqB2lcQ)FuBCJLGeY%^2Jr}7<|)QIKH;mNl7332Q5LIqV7 z#vYK!MA#H^q%xp{jAy3x01Q%sEhu=lG)ysKlZ6!mM*wS}TLDl=!U!*V=H7r$J)=2} zoj}2opCroStJP5eQsy`-!ZggP2Lt!sY9Wc7=iH(!Nhs&pHEIX}v3~ViUwh)*ZTsu1 zS8mL^4}IjGW2?FmFCG0-W^QSks;H~pX}&pYOl_anev#Qr*(!TEPJ6r#@!yWX#EF0-b6U76AcX{;M!W zrUSy^L`2CZ1zLl@C&zT!su;NUB+!6$SBz-4pjC_Bg+wEQ zm3ahV8VP5{*`RC_s3Rzms+G_LAt}$XxhzUfAIz1NWS9o0nBruZR1ahoE zmD<5lYO1Ri`VEIn005&JD*F(uMFrc2wDE`*ghYgo%V2d*!l7&lY_PzECE^kp%b}|9 zcmb4u>X=hOR3m&kz3`5f4PllS!qGc^^;eHyyLPijJAUHy{@#u!<#jT6`0Y=9_meNT zKLJZoY`6db&~{IL;Nu@#9i5gvNwClR~TUq$Mbq zfb8gk`9B7ilImSvy?_AG`|PX*QfhT|gkrK#RD!n|wb;=qR0P3@p!>;ki8KlT))hF6 zMpd>21C_>U2?f2?Oay0@Fn|=K-UYTup=>(~r7YnB0QI^?rQ29E zuZfTo@5wg%j?=Fsj2_k`Z!rgk zoYSDF>c81ZWpKeTc1R*oytgnJ3Y!)&ps-oU_gd8u-haX(iLp9<>g@ihdb>d@EyI1s z3IU;}Xj8kywmN>|B*wh_tSbJ$QbY)nl*$;6+*p0G!IEqh){!I#0vS03Cq~352OLO< zi0nO6Q!4m04qYss0}1G1R}x@M_``SdoJuvyBe~mFQ9fQ z+dl9LRn|3vC>gQPIXdncry$nidsIJD6ttqHyE4BrH4_qr%;1jms+iGYotgsY_IFPn zUA=U5{mP}A7q8DZ=Y-G#DR%ovV`G!~QDUa1z8q`_nQZgiTN{?-_#35LEbxA@CDj}( zJ}i_vwc2lkAZ%Vqk`!Qbg~qw+5@7#AwqXz?Njq#oYAhETSQFp?5|uHf1iRSiuo_eF zxffPh{yBfb&dOy;gf(6anKafB)vMtJRv9Syjw8nF%L2{Y*jQ+__^9t>C%6o5Q}Gr; zy)$U_PY?8OzYq+vMI^ugfrNVYW@YbiRSm@=4H%Dn9og25c~4>&;TR?NOIrof+s83f@TX)P|Q}B+HJ9nJeed+4_{Ke~+ zudNSe5o$z|N|6Y11f7(E4LYsz)6_Dh z%!tZlZ9&_Q7S!fc44~T*?{m~liQA%VOYg$CsmR>*?c&vW-KFfit0^;QDGcotq)9#52yod{$l_2fsNrdK ze65^5zo_Zv_D{&@(6U}2n!;7H`Nz}|0HKBF1X({PKn`n@lXQr#*j74Sw6-AW;sp}u2vZWRvUdV5t1gmQiT%H`|x?$Kk% zj_i_DKe&A9@{DP3e}8WZ0{!5|jkVLNIjwefcBT;|`FYKo*Cpo&MKuXH>B)R)ek+be zW|q%Vrh(r<6&j}?1SQPb0im|aDgozf6QZ@KgzJp315eugLa zWA5$r9q;<^hdyxT=xT#mjOpOHKmYSbKmEtQe*VZCNS7_YgM*u#c6L?`?_@D%xhro* zxZiXcQ~5U03IK`qwU@s7x&Q0M^_e5b&;P>5fAPYpo#(&(@aG=8d~BCHcRl#&kGy9U zc>cSe|LbqRdTf7J^LlmS_6I-o{&(GW_6-%lPZj|jp&|j4U8+bTYWXN=vmNChn3>Jq z{>o{V@L7Ol&+I@DBoU}cv7LonOnzGz!GwQo@myAfM%)`BdQVqdfqbH8Z*(k2M5Hoj zmE#a#2;#aYfst|nsU~EM#mQW-krjc~IH%SL5(Glof?eu@lkG&ziK&%vIgsb{eG)0G zyH*otk?NBuFe3wG;#y*7#k0qE&K%!)<;u zli&XKGp_-R)`E;SwP3dWk9_1k$9#4f>j;20O{=N-BhA;J{LVi<{mQ}0fVBm>?@*D! z>*qc8*2_Cl<@(C2FZ750@Q?rHxe2elb~W0~$G-K_$A0_wKK)A{-h1weOKbD@wRZA> zU;p%P{fkfj!tTNI-+bhWi#Ok_A0MT^AwXu-pyOEts9|-Og$8D!7>_`O%Tt441OY9g zF_6qTyGPvuruW}!XcWq z{mu*MNDmO8*oHH02_T8YdQNYOws4V5VAUeXE_L6;BUrF92Zi0a;Xln?nVDi2B?TkB zJSokyZmj2d&a=mNKXm8*19u*~^UU7fk%q#@am^Q5f5|$);Ba9?EX#$XI8g1tR!xjU zKXA&Z(TxNu!@^ms1W;C!V6#)yKo)Ok@T_V}ySoR~n*}rpx*8$4c~^a@pOdsp4}hhX z=xU(4&I1KWDm!uTnRVG195e!xRs7xZ^{tg)v=jR$Pn|t=Z0FTyo_%fIp_@-X`qYsN z7p^}0=;hrzAGqht(bYr%()CL(y?k{#yLajPk3Dr|=Z=qj;J)J%EVz} z3(h29QwwFeSQU{H)ENz=4K$8?XV0_`AZ(Jz1NyN`YH?%Vbnu3vus;V*rE+TTBa`uOE1zWq5K{nroOKCk=1I?#~wVL*Ln z$|219c@O_Hl${f|f8fp^|J}d;j|UK*efqKQV6FKJ|LHTaI`O`beDuU*XKrZK)Q#&` z4}633&o1&GrPO=Y)fEeG3D!Q7 z-c}vtI0)0cI{r$)tYY#cM(X|GdgrVHsQ~Pp%1P*wvO`d14^s&COd43Z7zyZI5fqg@ zgOEj@Br&H*5(U0i>YuDAl2^JAO(|6UF1743k+n7~m zUkxybPGlF$e7ohM^^I4a{n54Wefyg~eDTC@{mN_hH)lQzi?Vfwj|ES&Zz7OBGe^{ryQ^lBNl;+zS>pNWp#Ln>t zKmMurf9&AO@mhpU-Ay6qhOTzDd>HFb7qUi?6Y!; zDcGF%WF(9R8vz!|*2)Gjeho<~n;?S05!zpvxzu-%7~3|K<#GzP^n$YZCZjokr3grt z>9L(Lp@5ptUx!cbvVXkp0u%%Vi2@_wtrwDFc+eQWGit*ii8#odNFV#bKo=+|F$I-5 zcT9~(cc-Jf)8rH22XQgNHpG;seCXc9U16#ZJ*x&x=$5%&g{};dW>3eQF*_^BM^EwbC^v0f3lIbtA;J-vumG@z9ccFKT2M-3P=mniotc=T7D~H%&)Nm# z1<9^VFyv$@UlwhT5_Is4is3u=KDViM?KRM$BQJVNT(xM>Jfo{mj7ieiaD@8*sMl1* zi0ovF5IDk2H3_vBZ$Sat=_1KMcGwa!K-G#YNobQkgtB~pB0^FuP0&uHIcz*b6t3Aa zwvCuJ*(+JKph|$G$y!k3=LSnd6@iMo=ONszUL7g~RQ-Yzv&h5gq;Ivvbo#;H`J+!< znCHwsuu)j&PlE=%9yH1iq+btS^-L^fp&M@5Omf4w^wXbG-ZuIXSYLVWbN}aOFP}Ju zdB#i6Km7x)HGlKrFXYTq=imRS-}t~00Gj9XpZITn=l&3S@5)?^lb>582-!PZa|$P0 zt2G@HL?};DTN-gwI|D*0S8bXzGjoJ*91B-Vq@>vVB*e^Y5$XM9C2Almj~vC@^%MV% zx-Wx1g@$3y764;h?|xpH-h*wSB**SQFOQ8)LK4vs5m3VUj1G`d9#fHr3?Rap4WyL5 zm#o${At}5_%Ic0Jbt(|u(YKDSoInJank6QJq1r_W5RsZglO)@*W?~l4J9PDH=Ii10$F2ZJHpHMr3n$9jq%axov+f+d*V{9L0O7-jUrtrr2xKKJZDvBURgm(fv@ z5zP7EYR?lSF<*P`#Y=lA ztC)A+ZY=ks1y!fN9ed#-w4<6jx zv*Xa`buaUVZ=(NN{s3YOl^j!O#1J5KWor#(_-`-^gW>4^a`+ppZT(~fG~(T465QM+ zBPn}20LvEYVl(Ff#jd0N@oE@yL%@VoXDQ|!&{W{(-$n$aRFX)ciR9+;x``oS_I)|Q zOv`wYCsEp*&MHfFR{plJV@^#Gbc8<80i;MJ9Kx{`f`kG@N2dSQES>E!bB`j}Ni(Z!QU00`GoN|%g@e_k zmuS~+9{>O#07*naR3HD=Uw!UtuUucV>Bs;07ytQlkKSx=a}Ckc{B}nC4wrW1=&^(E zKm4UHJ$30?>`ph6=P#@u{`^1u~?iB`SFJ0%z zy^wO`#V=fK-1EFjYC{A7rjV&dM3a#@NL2hjr0kjF=Mrg>H4uV)C5|-Ai1Ji65I`_9I5&(eJk>jV%o;z`5`*^uHa%}(Xxid$aY1H

    ZI47*IAaLPs@2MKn`5iO!`i~HKx=XNnDCnN%#d$LRkp0@UbqPq7Y zugy)8WV2(pE`r-Z%7;tF1d${|nGr#0iIE&61mW^GMubX+l&BcXZc;346Tx7Z8rf|V zQ9)JjBtZxw!gZrI@BqE9rF;zCb70~}V~vb=bwHAZ8m2ROlIiybG8-Uqco@ zLsAi8xnuw%Yd&W(h~5>^fK+kxBo$OW9+3n|bg7YcFN=#qMTMBmBF6@Xkv@kt84|9{ zpd=QrEbZx;uDvnm>Rv7ns!I^V+u6%EI@rffv$yg%#@2JjIeYP$tLESReW}I487X|? zDt+cQx@^XQ*-`74{`RZ9_)4$8?3rKX?N>kT)*WA=VI8;dzDxm$)v*Jyxw-j^zx2x| zpLF8Cd)#;b%In^9aGw1Lx|HiJhw?M&>L;MJmYHcKgm-Ht$#BX%6OxOm>HsiI#!GX8 zkG(87VvCAWvCbb!>*}5R4Y-mkM|27}mG0Qk z>GZ0(HEHG2eJ%nOx{J+xe?iOuHk}Y5}PjI0f6=O_07%Ay?ghbefHU}di866^Bce6x!-x;Uwr+0H?3a9 zst7BAldc(b(Y1LODfM6&yu__tHXBg|zfwX$ItDCfBEk02TztT(Rjoq+N+=Zco3aR% zd3x5;zbB+t4|OhQTwx;{==CHycTFIHnh~+LhQlQgkSY>lNr@zpy@URbZft;66;)a0 zAdx}t*FaK9Pel*~z7-}p>aFY&9I+e73-h_1#Vz3$C^6(5+-PSF3e1{WrHFp3{d)m`p`N~&Z za>*rcdefUedDRV{z2=6K_q6p%M`tnVd1R|x*lN@?mXRe>5bbBZc^ZkDwhE4P6^45= zqZs&Cxsj<+QIkC=Hp0p)q?Zu;Lx6@k5Dbn0g&YQ3bPNCk$oi0}3^m5YXzKH@^MXKf zm?SwaKxMXoL@>M;CVUe}VLiV+^)%<>Y;P#N=so(^%yH!zKERpkML zBc@(5gI1zsM9WH^itZ@Mnor?vj^F%^A3A)8(@z2ZNtpG&j(_rzH{Z0eXK#CH#?Suj z&p!Dn|MJkG!>@ehD_-~?UwZJk+rR8}e|OTU`%b;>={t6<3#DrS7|x1NfP}QtBq;$^ z=9k_arnG_)%tS2&uDlQlc4c;urEk4z2JQRn8F~RA>T!9ng3~4}*RuDqDwV^9b5uwG zXbO16jbjcLMhv=p3}8us$lx@!X6kI_!6-0+166yH z0xSlht$qzCta|b)A_2y78Uir+1}WttmLO$*YRwpz0x}%;ff5*kNCrch;Fb)z{9j}` zU^1m`{TmX?A!j>ZKqy6_vL`a6l(QIJeU?&vK62o?M_h9L&-~Cs_a3*lx%%36nb8=E ztq;U6`sgbhUp#nU^2wJT*0nFb)|y>VM6A}YC{5|QSjr1t@`c&1kiOz$%Xv{2_k2+Ob{crQ;8LN8MZJQWDBPxZNt=_ z363&GcUa@b3=SAJO)~b^Bf%Y24SQeu%puVFVOZp(uIb$mUJJ|DN|xLs$Sar!@e@Z)cJ|FsAD`gcA4`(OK?U-7Uc6p%fc9~V&kRv$gS;#_~;vijGNGEv#ct1=+<(0i^Lw@N+AAwcJR_ z`pWqOV~X)hAlT(pfF+^G6gazC#YTlj=8cWq;yJD-wW4HIM0lZD z-5g|6#I$2KvcKhB?|;YNe`viCn)}>IKs_bE6O)o;*tS+#+;C%t@#LIiXP#2QEj_?! z7X4RQKz+NNPir}?IRO(afYL4C_o`K=tF?srzD&vM6G_6sW1p? zSohYUvILk0JK-5N@@l;uLJin9%>q34UCpk(Ro};)Rd_dDhCr!f-rVeSOgmS}H@)+H zfBur6ef4ku*0rDc*qtBwO>g<=)jLB|BZW+~2C)LMAVs<+A<8BwC{_FYl4L-s>>@F( z#VkNh!fTWd%)NGh_WL^e&M z_R^+LWv>=nACxG*q@giD$(ci4JZk<-@<_ss_HM->=yb1jc-y7M3oR`lO(zEDVqHx& z#3Ynna&3tVV9JrUU^5xo@7opRa?ymk=K!hkcHECr&a0T#QT8E>5VC;Q#R_osD#mrP zyY)mk$urzgfE`j7N3EBK-EAr>@cu7ZKdPU{eJA6bldQ`p(wYX3eYKAth!=$}S|K>6X-}8N@cSa3ElcrI7Y(f zGv!TvmN}tvqKqbqkP)=}Ib=*HP&vqCB9|aYU`Uh_V<WSGZvHwnzeSeAk$@zZ$V^FqeT1P=I8TRo#UU0R~%Z8d3%j2mraQ+AGG>amvbl z9jTEW$PqtD;zdt>4b(ZVg@TtYDV9D7kT>xHC8Q9c0)DA`%5U`23dHc0JTxRomoM6i z0xFQ>7Bd=+CNndDaB`h>9(<;yBsWr^r}CLn^Qo@u$_$siB@Fu*dRcO@k__bXNYPVp z0Du-P#tcgd*Y{F6aFs)ryDMV@#8eKyNkAkq=I8to1XC)&5@AGDt3wtlAhZUE=|x+S zy$fiq^~|$5e^-qO`IACt>&8#+<5fJp|$nn_MUqB?&D9y zw4+VIXnr^rh-kqG31n1(dnz&ZR9GB^EVQEQt-PZ`h$*BYB`Jm0qEK6yyF^TlP}K}# z3yj=d(tUxYwPk}GR%XQxdU^^H1IQ>GoJ@Si2ph=>R)y(6Bn){DiHA2W@sy-*Njn3{ z+C;-SmLCanIVA`vv!Jgo>(d6yio$!Joq#LPXm%jT*N>&U?k^-3iO`}88VC$4ZDErY zc)8=&l?p{6A+wW2b2f4)TWK)1Zh`TSd^glZ%};1cgCGTC&L9;Ov8CB0pk@bGA5&1M zY7#*8-UCbA1PrV!*^LXq-h|0OCX^!32#tkI%U#`6j$Rmn%@%+pOVya+%3&nLV2Dbf z32Kd=JdFlOj4bh&s38n#H-HEt1+nU<{X<4`c&JnaB@7FPAdUrl^&a3regcbcLam;{ zh_SZ~PgI}FID*WC5)r7Zf|lOLL@aN&4-SUNU>hRJ@Y0v|RFq$#n!fG(z_y!Mfw$JL zb*0+{lxEh+7UFV$#*kaka1z1RfCjSdTsv{cjue7xvA$E$)*3-d?j;z(s=F454aj z6sLf;;%mzpgsKBdH(4MOfJEDjbwdg7LRGyg{kLUg0#GAJ5QCxkE~@5wI{?G;n4qYu zA;_c+Ho*$NVI>U_UCua!R6;M&2aq5jGNsD%kiNVS@070>K&K*BQq z67-_amX8XZpB@ zjDT=EQh?o%0AW!en}(L4H>yuc(LNa@gW1WU=D{XWP)m)qmr=b+PhJ$i3y(7ZD55Sk zl#T(!gq$;GV^;NxAcswty)SB0nxJa0mA05MW$O}vg)_i`S@oFoBQ6amLlwb*07+zs zG6fQ`WvB!}q`c{Ygceho0t=2{R}E)Fpr%F0a)fRZH?WEznu4XkA!JGj#-c$(I~i?c zRf7yfFoFy+#9#}uO>EIxw1!sCoFGRwX3Xc9N<`En2T-cdZK{CEZ9%A~*t;>ib|G0JtvWf*K?6ExV1ai6 zWV(NBY6?*b?`r6J!{DT4h9;AMytAFL*Y;K|6$sMX5t7T$Ln5cONiFBOBW*{5Euv7P zS{)E5$a`6ixpQ}j7>)&^C+4kc6%txA8O$!(r?D-KK+uU3Mg#*;HY+|vkyXJ|w<1}n zD^EF5uq4C!14@YIoJJ+=OVooi21=h)_UTU8KOh*n)OK1H9z2Gk2Aqz^*bpQeTZ>p@ z1lY=vJ6bB6Wf`lhWMU|NJt$RVDE(abNWnUYK|?SsLXNKzwfa%CGLe*=r6?_|sYyXB zyCbm}N6(BFp@5v2g`{CEr5#RdOf6KLm=hR)I1F^iPo?Xn)+is1(Vpe-nU%CcqPq_y z$Qs$vPmxHGP(--GH5NWWZsEqFgZ2d`;L8m?zS1`GZ_GdtnR3EYqv38r^=Jqk7^AT5 z6W`qs?_7$_LD|)bDN5eJ78Igj&(lvP7Gcwu5@gi1jX;8*d;a02?_0WG}Lg2T$> zrzH7Tbz6&yF{0y&+TgK~n?2A9eavlTf=sq3)j$=Iq@0rVOqpm!kQjcrQ#5&ki;j&I zLJttpGSO^QNH$U;A|)j|fMBZ>0f3R2W>5(Zm;ewF;FecgTT{-xwgk16G}EKyy&V=Q zup$Y9R3(Nz2@eDrf$V^`VlV$BNcC_!Aqp4EVP?1%1n}c9tsKT}Co?hJoqq_ZOr}Q3 zn#)#{kRWLQvN}1f<0?#l&P6Xt!*}T=8JPUG*_?cG3j+WcU^uWPBU)oLHU`3pv=~Ct zP;Mi!J<--dhSNqt_dYd>2!)Zur=5dX%zy}V`y52LK;B>IS2m;Qb12n z4p{@Gs^lhQI~}TAa3iCSdoL(m^bZIEoVzJWR1Zp@N=OkQWo8cI<#VdPKDnR`B_d;A z_8vhsIS3|1l=}}r5w6cggf-KbvI4OD0c$)k60SlL5wuhDN>R4})(Mb7beH+oz2M$h z|4MTJfCzYg83e&GyJRuc6Cz9G}T2PG4FN%OKzlUPlRt?G6bdO|1%4C^sSb;p%t z1kigh7_rJeDQ83GHl(VylB97&VitVBLnb)`>#xaSnyQ~OsB}XiNlM26wpl6dW=SqW zvW6QDXC z<7<|{i6|H1YpT4alz@}4sU&LNRyxMUjhUWB@9^X~dQU+?Hbzg=xtN@PQ#MFwguLUR zsT*mYP9{2piqw{7joS!R)gO{%qxw9r5}9oe%<*ErN6S1I} zBsRauwoRd&scWFikVutUjIc>UgA?QM5SR1!vu9u|2S|*eX_BC@_l1|lH!Q(|Jq{gt zYK##CST}?8Q==FhUWZLq5h}oF1R2hUG_t`WY%SQx#z0p#G@oHj&Y~qGj9FZprp(Md zW`laqAf_~JRYX8QDGEpss>dBf82e>gppfn+mwwfiCH2ho+`R-K{g}H5sM2@|2$;J( zdRbV~q@1M?Cqo87%8FVh>Vklg$B>+vkZLTpvS=Pr!SKsKA+Y@>Gi7v?Jm#sbrOw3^ zYEWAkLfp&6CWE$H+d?kimZq{mGf2S*0+g!Rx?M1k5*jFqK}nLF8C16ricu?@6r4E`oy4!Juo<0|;+ZLpXd6 zvW*;8&tzt_QNYKLAoU>0EoYhlWp*z{XgF#c29yz#l$8`_IoO~~7$J%1f;Eo}<4$W1 z8AKKAraDE4X?Tu?%n4vHOS_4{Bp`@wT&ct^0j77=`4+)xjcZ-2xvxaBCiwxcSsiN0 zp+;bEf^|7O{D1@n!kq#Thyhr=SF%ZDKpmca0|WGfLmOy!V?`F(LP|jc0R)WtTPT%7 z)lgXG%ek}D+5|!=J90O^oK#yh9RLDs3_p+3!!0Nn7(|T0J_3;hB3g?`ZwEAA&$LDkp(V>DS_k^63`_(r!DiT#$=FA4k+cxpPn5fhb0NaS{V$E zooyoI)Uza_HgwVdAnWb299eQLy>G)9d8+Gb>0PZ!s5KJx()?$k)wk;;9lIYkU}Tn9 zbs`xIr<)nD@eeb%=SRIx#an6A*PQA#OgQ(dyxM8(?+9PcJT1JUtv=wSm-+}}>L*N)nd8oOJk z4m@`iw(*ccvYiywChQ~)P>~0u8qu)P)V2+l>v47XCD`1~&@O6M3dTdDYqAM3i3VSKE1FFowt5LmB}| z^Q~aQUX|Xhu&&+dJQegKO&@Tmgi47UUc@wDTe(^7Q+OlzZO3Jk(sNKs7l9hwsVac% zvYMEMba=Mf18>W`G$VcyY^UU_75=2G&G`7U=KQr-x<~Pi%o?G_)9;>yqNh-uBI-t>G^WD9i`)ZH>V{<13F8J_HIwp4T4`$_5Y9_V z1c2QfjWdozPNuIRTeMt2P2Z5(Swv{73OT!gV5?*lC=zh#!CftkhkI0E+#0s>Pf7o*rg0y z@9=k#Gu8%QGpD@=5&lX*a&eMn*p?Mh*6Lf^pOL?G(|su~r*IaVY@X+7T(2KRr0L5m z!_{H#jt7FKMjK%=t8*nuNa?j|e;Hdl+Jh$LQtYUTgR!6PQ)g0X5IWSjaaw}c(9v!t z+dZH(O#g>GF-K@T&B!3O9_gN>7>3~Dp3gl6ZRG;jbTx# zRZ%~nAc6tYNQ05F%9SGoe5#)3!Akb3(w*#~c3#?_1}`HN7bAiwoiQLE>F|h8WK4jn z5@SvuTU~$;P*ph$3J(ED4anvb12aT7QMF^^Frz}0B_dOKW{QF`X{sE~w4V0)bCRnf zj?{o;`+* zYczmJ&j)^-@5iG-4=%=495PT&txAAn6}+l0yl{7?VmoSmII?1XHK$pKc;C+pV8s9c zAOJ~3K~%6@wasXZ)C31}qxZhNnWr~fw4Znq>N5<_Q$L4k>(_{n?b7rlMmq@dGk^tz zI{ZV^AHbQ|%}z zC8SY1aY)khfGa2aGpfu~$#&1?C#Nt+727%(fQBR4ol~W^oyYb@$!`8YKo2{^d*62f zLqsWq_x3TE`R?bk5*`@~VSVJsCC#(BMz(a|7|ctfT}K)f?H;o|iW&m`cq2PI&|Uj5prhS{l^jzd-pWZ_28{@X;;}|bT{e#4?(sISBmVjGdOz=fz0)Ez z;pIHodW7VRa_!LW=zw)pISXG)g zgMk381`3(bPYth%yAn3VzaF zS{$gX`fVx(lKBMcXm=SGQ$sD z!DSYgmn55$BKCYc$4Q})4+pY(%*&K z{m__-KVrFqYH0g)O0s1-Eq2FKA#{!N(P@bgYE;LJMzu9MHwt@t+b^7E zX|vP-g89vZa5$os^U9C&`6To&;;HRR&dLpR0&tP+2n^aN(%QO9oOSTr7i&8d20 zGeOgb1+%k1x}x2~UL`Y*UYr}IN0y@~?N;G-Y*nmi$Iyjd!!ZH6P8;OJxQDi>r1dQo zFGR`dl3+aesK)ed?ZogoAe1&3k2Ve?O7`dam zqJo$7q2CDe;M4G`dZd(7BX26GqFXikFJCFi$3(M?CqJ)JCBzhT)L&Os4!pCyib~bp z?H;^ELKk=u#VWb&&L**|9ArEZpON(Le)%Nh(QS&7x|0i;<+dARxqCO(bZ7no&)p^? zcEd?KIu1>*1|r48dVcq*>Kd=DRt3HI)>ayzdL58Ep)3>|Q#NLDBDzc=g%u%>Ie-uT zHjcHk+Nk9WYA*=pZqXsZkY;#cz$P$H>yvHRo}7GNF!Q=RSh26mGgb?94~vn*Hai4~ zs@1(daxG2G25|S&UGJw(WywhhJ@(zsF)no0P*vckqrIMJvbLn&tdmq0UBZkKwOKA? zl{M?EM_*Q1a-L75B{^Xml04140zAUvQ*^h=xVkZ_aOAP7JnU{mYI8_DB4VXNl(zDz z+c{K-tRAq)D$N{^6z-i}!%Qf!9x`!MaS(!=3A^nn)zdBObxujIr~iIz&C_&alWVue zc;+Bcb=*!#(h9Buut81|GCbV-%wN~5J z(URoniJ0DrDTxKA=L=8p%Sn_9M6^?IjXTsPoLnoco#j#)0%q{ak!{sfd^7?vl$NZj zkoIkKw=q0%TbIlNyWfMl*Hr}jQif7ot=yYP?r>n_W73Fmi$`baOFM|Tcf;417tOsO zyosx5EY&{AX0FJ$R(*T{fQEc?>SADPC3>n4wvVzx(F!omfi352hQKFaLU z8I1M$rrYngm}p!$Nyi7MJ*;Mb*zgPQB{+*E`#=C&{d7bw`z=o}EV$jZI&uiPjNq zJ1msf#gL?NdtzRCJ`B=k;#o$G&vL(be|3s|vqY7u$Ya!I(X}`u9=_JC(6|MTBTfV> zyBC#AF33n_wV9QJqA$pTfKoXc0{F_DGN#0XMw47*ul|OqCq%VXCAyrnS8sjOS7+_F zSa<|3_k(u>9MwIKbZB5J@YZOT7Nd>HRCn0}O)oe;OTP0`CTWlNz_?nPdQ(=IOJ5qU9v2<8JpJ8GSL1*=|MpUYX z@kNX`g9Kr8Mzx$tsW4$f6|3E%`iI!#%Ea@rBs>4<_3L$B=l!3*pU1>@CMj0ehdpHb z%&Q)6pde97b0+H8Q-rRQXj6$F$_?rzsTL=6KP#mJo0_am$`#)oGvupDVdW^Oo)wKx zu=-^X8@(W4_hln;qR&*G;+PeVU-`^FB#obA%&6i;b@G8gm5kbXm`mI=Jv{>&s@Qt| zAb*O$S#63Hv!y=Qj0Cmk;S}uw*2-E$!0TPKSv zdaWALXF|JFZb&j-Le}xg_DUA#adz?&M(HCwnYMG~4EyKsp|727Xc98bg$C62cW4wY z=O*)JrjvJVjC(q!)Fma1+OS$cO=Mn%D-V+SSnR}M!ewPXuXl^R6&oE%godGC?KCu$s$ zz^ud?2I<#-{QCP}@8|c5q(JM{*^bK_jcFUI)QP@9oG8KgGWJJqL5w~fcbMrg4C!jv zQ6+fn!Hu#sZxx8DdL|9mrE2q@tkd-aWSrHPa>G~@g?dU($C|XE#zNcUNpXxsl3Z&$ z0h_9T`mUbWsV7#bEe%h?&`5MV@tC(KCt(;92$z$n{qq&EO6u)mDaN(C`yml`T(dUu zJ=>ER?RJx5n<~Osb)emOhyl`ThsqDxzLh~QBy&j=wIlZ`-20{A*AYQvrs?{uN0E#m zXpZ;WAwTO1k!C1E%3&j0#cC4>;M9wkXaqy8Hwj*u%?Nmbmk(w=@O4ks1ZDbyoCX)+ zWRPoO2WKi-K;fsKZYd5z7|W?iMcYwW!{ZhiDdE6_WffD^O*gZrQ+0?kBLaN*qM$Mg z1VK*NOLjd8##~A}>6;~r@l2m(G#>1$@fp2g2TJ?;uwZP!+>NP&Upfm>XcJOV6?soL z#NbsTw*lyYWCj?PUp|C!nX5|pQ>E&r3RV5}kDuSX-*0!f44vu$iCy1ecR0E4YXA}F zY8?=XQP|rn-a|g)aRWTg=Vgq+$y8`4ci}a0yKR_`q05@&=)z3nh*fluU8*NDKEkLW zb~D^{kFIK~jPj?1gI`|siSR9J1&mCz5VLbf6l3 zW_+(~Xsmeb)p`S)%Cs=DXQm(_A!H@l;MIHMixk-HIkQ0Hl8A;WG)jYJ&GBGY1p%t+ z&$_TxGZ6N8E_q#=M^dU*c8G$tz}m+vT`GC-v3EgLRfSY%64U{)XHe%`XKymDpFmQg z%diS?P8=Qn=!1srx;5%vKvXLg zQ}?XB%$KaHOE(6=2201Km_HEd^_XQ$g64`99<154;z`Ydk@^xX&>zpM?5jPKkC)TL zaH@_5kH++?%8)%hRdM<%7z!*rElvSekCOD5de7fHuq{=|u(_Q8U<5KbouDBBXo@`PiR}?4!93Kfg5`1O*V-&!DbsS+G){Usz#{DSU5`*dR!6gGs~@v;SRF}8Ool85 zxS!d=ZjY|BRJF#;9-mf{BaPud4P*t2oiF)ZIB&t#P69G^3W3g0~Ou3D1XmU{h09 zo;l~kyNX)v5bH6l5eoq9bQ;VgrE)*d`+d%l#yT->1Q1g-(~vM*rx;@fq;ws*fK^on z1~1bVyE4T~qXG?@-6sxxc`Wgq=bUq1N2T9?zx$1oixce!NOzOvl6$%+v!=o}E*%d# zCDUVNyjn5QZssY&OY{86XQA~?&%o$WmHkuY=kYa!QfzPf2pY<+O7y3a9(YNuSkMX3 zV6z+H?Y>Ju3K)F#NSN7eIHxMd;euKLY=41WIgj=Y8ERK8CCK)Vl#x0!5c-lR{&RH?9g-Ev5#l9Jf7R^ zOCnEJ_wHz6hnv|mGQT!*hXOpM$!q?XM8hZNz0~b`KlK6->J>IR;z6y{$u@q3#1Xyj z)$HT~G)H$4ePjbwyK^lnSVP@p1Pq?%usVP(S)A^!sherC&e(}}E+M2r8244x z15lk4py9?|bEc}wk$ze;=Evi|EXDSXZB+J}-vk9L5S3zWGQt7gR<%+YlR(zCAlS~a zsIPPW`sc6b@8|d59S>O~sx14j!I`B2Qhb#^*qYajn5qUw^9+Y!E9qF$Imh6qF^$_U z^z*ao<>_dvr`t`X4KIW3c+rCna)($~0V)5Fpm`RP%WSVgG5Jf>&E!*<|IdBKU&5r{ z-Bv8e*Rn&Nt5+5oA)t*l$~S`PN@H8*zd`}dopO~uoVz&tx0kL$TG-kcd-}^~h5?1W8T%77~SO!UHzx+G!{>V`o5pmMe}`ri)l1F`S5`knbce598Zi0ti9t`;yl zN@n_70?qtOB@=qm&B$8EF(L}@AuNe(2=ODTDPp{mLg%YLm?duMt148e;S0Z}Z zs_+3ihu^n*>Jl6CzMWj;laS>CLp7U2^AO1%$*r5LxszBZe3T`_pg*V-H1r(1r4?r& zHJ8#y(sbvMQ4|9Tc7J*!Xxyn!LA1H=P3J=!E{Mkuz$nd!fHXT!hC9CN03t~{5lT}E zyz0jGaAFz5a8!yqwS&?x;{2i4fq>g~KX2Y|Wh2!M=r)wl(y(H`9@A~Xsgrdt1chqv zDy@J@Ql6B;NNzqXNjM#O1{t|Ga#3X9I{N=M^UNuGHNaFs(}|~pTB;79ghrFsP;t)N5VWfaNMpON4#RNjpl8^wlUd@?cmA7IJ~J4u2`)=K`W+r zGRim;fL=;_4QIHIXAWlMNR_!Iw7aO8+qx%5IeQVqm11Fn7}1`ud4G81NDSceaSybY zLhO{jgebhq1SD0ds?I$j>J&1fDm%`HpU&pz8E1#oXara< zgAnMFX+NI?B$Hdlwr3X>dyC;8DL|k^TWeyNMN6o0;5H7FmS8*X&3E1zD9PzeChMC! zKp5Xiq$p6iDnB?cr>`=Y$fG&g@`O!8ZW-od%6_MH4{9bs^CjvPnff^B_fZ7*~-IR@{LT|=_%RS+L(GB zcef|Hk!104k-S8^QDFDmT~(^d759|dLd}mzXY|yt*m2n=%t?%Kx46-EHZ9zp-<4aQ zQi>NRPf6;tB<&{|H~#vMAHDef_v1%r%vwRR;5#)b*?=FZ#e1vl;oLJV{_5`ReM5R| zF_~Fs+IwO_9NQz+UN#u2l6mY>gfp2d+u8%AJ1o}1B)8TpoNb#M+yEKT_UI&Ny3K1F zdVgN${Y-mMNj)bo2wNz^@+!5=oX23{QXLUh5a2}&(>8I=sgx1G?sk+?C_%DOr%s~4 zlAs?^$-%daYNsY`v8UKDukobUM=7e!^kLM#{uDWv1X5wX92D3b*OjDYiHtB|CLs>16Z2SC^M)lv32r?MxpH zs&RogsLJ#I_W~qrAb}oT$D67$ImJdI4W!j#+b3#f;2Aq8iFjd z+xGq!pm2tX^SnY2rKY&^e4h^zqNaijwlB zHxgz_1WiKtaNFe(GDV{zNqIorW1{kWX@;XgGKY!-7@#7lZAsnp*od~D=T2J9QShyTTatq{BFsA{a*jJR$` zx>%a?U;o>G@7ZVidFkJN&#R=>VnUc$O4sYqzRyIgAV5?117oYI3Lyuvj&U8Y18FSS z^f^kSO@`{=%?QMTjF}tXb7yF)A`W4wZ%b!Q)*i5SM~>4V6&YKmT&a^PB0#CC*6~iz zWFWG%G>J4N0R)%(P_|C>OVN80coQEpYhMT(tPv!3#=^O)Mbeuk$u}!+xs&*qFIvk| zIZ8}4bAF>f3U&xPV=+8|n3jNM^XKf147N0-EhMf^m&OxH^47KKTFPp-%J;$X5e7qe zEilAmi!m{1*yPKenP*lFZMUs*)n_|1Y1EF(BfZ~E4x)>519j^4>v&ey!i+M;_NZvh z{|xRvrP+9~T4^E`o3ssPNzl;QM*^y8q_5?vHLXcmaY?iv*O971?AEG=nE~chl}H9f zQVFPSMi1cYoCK<&fY3D1E{X;^hPJ2}LSaeMc$dXuq9gVxs#ZWd_&R3~2wj2NO$Rzz zuOyUYWWHlbwDM?Oj|-2d@Z6eI4f5VrVQ3pSRh9b3)Bbo^T0rD=-)oFmU^)=bl(@tr zUY!7qEbrZx#-H^m(;gDCx+$Zy}|@@oY!D9RFRaXR1xL}4t~DMLS9b3zm_9t7g`bLyOK zPkVtTrVH1GR09-o&8H-fgA;=RczYLMZj#X)T1#FJu{}o{!6YqbY@3V8FsVu>nhV*K;_m1YP0Q?SH;~EpC8vZKBpJGntr1jL|^prEu>s6l|*1x^-1+R&_zupgL@?sLa zr3h#yoPSGfQ1{tIXpotblgSOgm@W4oq{;ia#IYIMp_3Vf$Ik8dkkefMCw=d~wF1D` zOJa%cn%0twbKApkgSZ-Y%=ql7UJS5cbrp6$Prc>W0pgwozK=k&M0<4r03ZNKL_t)w zIluj9*0D2p#?B`y(X2#;EJGNCM9f-Nnw)DeTDrP)mq1weHRp_Y<4S;@Q1n7^EYyna z#HK3S-4mPER0{1PUTiGAtpiO3%XoT(W~C#y>YQk{a?Y|TJA;-5aYf_8$vm|wxlm3j zQpsqj$+oTC0#wrLrTQ;FzyI_7e(dC6&^eRiyXXj73{Go87`-a2q^CPU>tv}yNwD2< z6(y|& zij#%fJx#c(Z;4ZwL?2HPowQn<)ucqK@ z0`oq?Hq#09)JAp$aC5T*f->>W>FOhULIQJ4Q{73Z| z`}d>Yt@K;i?f`P`pc;YKpb;SUr}e>%)*=nKwwgJsRXy<`VVBm^P07d)*d#j|fgiqT ztx*^+Lx-jqwCM@bJwPdru{24S(KHBAn%R2b?e@TieiX$7CfDKob;wv+8wb~gnW5&| zAz?-druD@al=w;_Y0+J#vHjpqKDgVsUiIsL`}OOeuM(!EA^1p7e22EzGwLDY2RXfU z5=ZsejCY`_nOU6GQSId_#(FDGr7@0YTjQ2Ma9oZXn;*7J8ZPpfw|3L+DV{1bmziD7 z-SLtnj3u>`CjHD`Hrm>hMABgy-vi_O3M0PX=XL$5{5+N5sS|Iz$C$-Q|I> z2dtnQRF0h7xy5|lS^5sPh|ldMNH%2+U8FahE^so5vz7`s&T3nG5g)eC6f(UQbp=V^ zDm!KKD=?YVFy3Frxw{*S9E6nWk1cj{{}OpzCb-lu(Z*Qhde`_Tg+&?)gzr3NlFpQ> zKukyEB$8)_v+^Oe`NAm@DtT&Kr^qG%d%LvjZdD%!sECkiLe;10^K?bl%Ky|=jdPm*V*#>f#5UTTv@<2HTXvNIE8ZG;kTlmg-&D7Q z7~B02BQQ`_%iOLo$6)G;q*07QNDz7m%=d7r&{bI{%_xaTO=G8rOH14(QC^XeIOjVE z_L$sVioU)l@D2WRLGBEn5pubStS(zt@7(Vykdxex-(8LGNkUa^uA@|%W{x|<8Jo#x z5XIE?gg8UWpiZG}hpr&06oT6wtv7c43YszFQ>@~0^dc9YW)bT_5Bj1sT%d#;-6*X@ zF)awwc+M}@d|^>+TQQ;A0w$?F=;$~^0O+PQZEdtzQe%@8-f@rikE-ZQ2`D*1>lZTC zU$O0pbe?APU3d z6)eS9$uz%l&Ebr8Gk&3n^g;u2zSp8$GB*9UFypM z$&NQ-9o4A>n3lUAMSBLrr8bD4SLFd^Dq+#sdcU8P3!<#^@LiA!y{EgsyS+sm4Q2@@}k)|+fP-QRQns#TIxIE3zlaV#j)DUoj|L*T>g&_F{N!S^)x9=&* z0@hi&&R4;cQ@D)M)M#gYMxKsAX{&_X`p(Lx=2v_7=g%(z<;i5eL%?-9LMG{u z%`&&qda#lBEBMNXPj`(=AXV9qak!7c39@Rj{U_R&yfW|SU8nx>&wBql|M~y@OHWr# zs}>{Fn}pIFv6>Kd9`aV@?lY<2fJ2lQu1h?D~~99M2XVt^&>D!yoj z%FY=ZTBkD7YlO32E$6Tpsj_4CbY_ zi9Aav8fq2q(1#=HgSH_01MC}@sK{>g_H@{9tzZOZ=!kHv%2mTY=X5{v94^#%27`_0 zIQ0ZJMrQVeAju^mB~K@5f+Yf~?gkCZBG@9C`zWQ(xm|KsoXJG)J#7|Uq=7|0TKRlT>^5*dhuq{YYG z&u|UfBYcC~fXJyXr>|(Zq`4xUQT?=WHkJ=5=vSR*Fzat=ZUg$F2zV z=INqsgRE^&8<17iJY=C*xr*-Xrt;iCf{UnWEBk%KgfCKvxK>O^-Oe)-0jf~pYz%=a zN0F&4O^T!{s=jYmr>{{#C7tA2JjG6iOk)Ki7ochUC$WPhWm^U=Dc(hyt`uVoL>IuHu>JL4o?L2^)G|&6tX)|pzPE=bpHZ=Sh>56j{weM1$ zQR6~tD3lhVQOzDFYF3%nJXbq`bF}tndW!APN0v;cOjBbzZtt!R8hyu;5Ghe%HN}k*>+Gph&oJeMdMUqRdsWg$QWYT$6$#vX}jcqZB zg*H4BRuhF>Ls7Twe%{aP=lt`3|1UrPd~sIYq^i9Mrd}4ms%ahDwqSpyc<%Em2SVtig z)q>%wiR+?h$k=XI9G{SMdM{!tWC@m)jGxoJsN8okl_ z{cc-TvSY+aC+G2hQk8zFDi=C{-R5geC8u?UV zlFc1sKQ}Oe{|E^Y?=e9t2qT<1)Q&AU;!84>W}6YmQ7l=2W`f;b{iE@07)*~vlH$aP zE87WAq*Z3C3iI<)Yh2^~8{PbV*Ut;4^}xzvFWgtfE}5i6F455WGy>?3#KqCj&}$SC zWU2AHS<>#BgUt+Rsm2lhG!oB0BPqmz*8VjvZA`(4Br(*)N-40$X>%BU3`d>K-l6rS zwvwv@qSfxp_B*>_(!Kz8symM)2~D?^VLOuC?H(m0rie+%fbVx?a-D?cA<$p1!MK zEJQnF)v~{`swhP@xl@Qtf`2;Qb5Dt!%KPirdHNYljzR3ppwaaKh$Jby9Y%pt+-vj zqB_WD0(nbGC5$-^#^aP(3wBr?VvPdo$V{geHj6wr^J2iQ`; zxF$jsV1aO>(7H2GCbizqmQhfAd6L5#y-khuivdrYN#u>J%$UkWOPi5fgm>imlT=bw z%qS+YMh*}No|ng(dH~@va+iXEA&Z&Ytmz08GQY6CBwr?l!O?wEJBRB+(qo1=Z0?v* z$2}Yt1b-s_UXzs>C^~kk2RzF%+y4E2)BO6!&p-a-uU~)t$O1>1)+~AQM@Ne_$!VbR z5_mq(|C2Y5I8zF9P*vP8R-q3G7E4zkho&~`gJ(FQs(Sp`&4z4t^p9+x((6P4e6a20 z7EJd{V_3Hn{^$W_!t4|Sli?;64VFMc5T`3eUN>cRw42qB?=#L~8*JWrd_yXZ|=ebNHlE64Ong7!kJ}Nv@#Fji}TQki;a(=VLD2jVezSP#uuzY}Me~=`N zU}&!S@EL0Jm->n$8rKSgUC?-B%AQalQ&4yYgkAtY(ev!r?_Az8cU;Y!ddDEGaqs-gq1Ymk_GDh$2WBt79 zynfEn-+w>-o^FRuYrDq?9m$$adFrh&ve;lAfJ$-{g2fm9LEsh2k z6PR`$i(*$f(SRgIXeGJF1s0i05H)pJNp%P}GudLm%Ftj1X4m4K5D6xS5uvl8+da^@ z+DZ$Bz08bizgVB;MR3CCTL%dTXOz8_JM}4UD=j&4J{u}|!U;n%~`1Weh0R+n8b4a{aU)V@Gqe1f$z|>nt z@teh5(lQm-dTuUItcy~OLp8D(?OzeA#5$hn9?9C}*~FLMS5;*@`ho%U1!)9+odUm~ z=V`lXyT$9A5|ru)wGO%Z{XB2`qkb^T=@1Q$zV4<-G7C4aWz`6q{uE2CZm>peDARNx z5FQxHU@Whh6w!8bJ9iY>6Du${Tdg45O(Z2pp)?Bay~uQsQ&#*eudZ|5)7vb4914b6 z;a?!itTa%I&$CO;MI~Xo^Z0{%F$-$1Z|1q_&_Gw-y#sj%D$jg|ipj%2w%Yx4JWxr3 znkE8+k9pScqBuy3d!;eCNK~hZ5o_WNtq!!n#^MYHlkiQaWkhDnMg~+xw|fMO(dp%| zUf8PC+=c|i%d3*efg~U$hl*q5tx{`5B{L0)Bsn6nP8A-1;<{AqIWr|i#^^bq-caXE zrL~{3^s4mD)G5l()7?zUOTlN*WaAvjG)S2BV;lQby5%a-_6~{Qmnt z-^R~IDcYWiIDO5>eF*ch*|moY;|vlSL4WVmbBu`@`O)_k0~{L*4}Rqj2E3iIc$ zShl1o|4IpFqW~T{WxqBje5zxqqGQ4!)wNW^UOeoQvNHm^9ap!W(QxV*$tZ;>^7JKUIc^UAY@ zBSJ;0ZJKmR4OzxgY8osZ|FQQQxNKFRKJJ983b{$4di)zRRz*zePgR(?FOicHH3(qB zomFc&kgBR`WU;t*9!A1mPy$V;R-xcTrlF!{HXo`RXknO8%QniRx}F>?wR)i>!QcVw zCGz0XQtN-Ax2p=5KYH(k=}b=vT#RGtm$ z(zGQY$>mcL!hW1OH>@f-|L6bx|M(&X?l*(x%o`$M(|=%F%A?Vo1;>m?iU!G7?8l5c zIuP+bCl5Ur+73V@Rn%3+kutjw*Rl0&%cKxgSh!rWN@%4qf>v8a(qz!aVlXB}Qf5pJ zGYn8Nk6gJ5LSJYM!Y7?cRx0EqpY`GYQmlJY2n@vpd6;ET9q!6bnNLRwal6~_rKix^ zkBr$E4nxwM4v1XSiKw!$l1fNyrPry13AQl^WizdG0=U?E8By!!IjY7J=ebQ>n?+1_ zm+DAOWK2ZbjZUT6Ig}kka-^ula+R2x))XQ-^5)M&8yS6#7E}smCfi>j>?z?K>13mG z3cKI!$!N=D73C|#O@d)0cOT93cuEs}L{oiClr7Y)s`~kL&a1jpGD}{{fTga|<`IX~ zfOM)}=R65-@WSarE9IVt>*bybZfBk6v1HiW(DhDQ>JZ|>MnQo3_gPdZn3;B*beaeIUrP2MHAWeLs{2FhkbSLPOIqRm0}Ik96SKS2m7i36c<} zbOmEyJ(4+-4;qdlQWK@)p;5R$^VvBE-IU`@f=H}G8%lY-OYpq_K9pHliijTo zTP1M#f3F_=?fpyDo?^44-f{q-ZoS*TCdW{&gXTV+I`X2A#ttq|p|BG-hc^`wIM=f{VbK=?c5Yn7~j$8tavtc<;^C3Q(v$ zqQXMraoV9^4{RvNRk8NA8;*y&{lDmX(?m&<55R zkZg2UK3AC^qH6IH7zU~nFFf4MbP-)lZE<^ko`|p@bc5sOY*d3zsT$l}nF8vpkQ`Wh zyq6Jzj~^fB)YtE?bLyY}_wPS`JgFqRjUDy$np0o18Z;8=e+sFQN6+$>$iE{`t4=>1 zW6J>cbq>wscSq+-4R@OEB-ttY6io}&i1E{%lT1Z@s|D7;=abUm$Me(}Mfgy=4;cjX zaUH5NafCjeh8$m$_9{n{8Dmaf5Ig#wzCQN|4$Q0Mk9N6~jZ7IRpvlt%CL&hSRp9q8 zj8)RyyU~7vFEdXauw#s3CmBpr(sgaD@SGvx*tXUuCi@6)pBrgQE)OR8Y!gh_o6*m?&0_*i+Ims zQ_j$2Ixfw$n&yv?nvu?wwI|*|@Hx{Awi9_WkzrvKs#!u2RH!N}bcW&EjwDrLn*obL zuTlh?r#(||li;TJWKfZd9h(}LqfeRssfr-mK2=BcgzC6vjWtb0Q?&hHj*|3k-7eYU z1;_wn4Cw~-z$A(ahz#)Fnj?vI@qpq~)~McMppccp(2P=jb6V1J9`XcvnEzQSxpRoh zI00a=zDdo!IN`zzsc?lhi_wBUj_>-ZX~i?cI|bm_##JuB-U!@>R&zgv)|jKj=5j-b zP!)Ra=+D0W1HDsPebGRCi+*Yt;m581@u9CLG12S(G9nHK-7Sp)CodRjS*Yix@uJIP zW^Si`F}8uPzTOdkhzC`jumbqL&ocPVh$-%3-A;BaYB(cky#z$CZAYcx3b<^KFL1zS zH1!?86}@ZsSB0fplz^&wy3Z}oPU%OIKA!GOL2A9UhnViZb+-9o93716JZQFV}K*Dc95!AZciPCrPLl`>X$@3n~BRnD2mh2~%`a(W-A0T}8FU)*pH%m* zwBYeXZ({~>@B52WRy+%`d#g0JUdNmU)qL`y+tv)4>eH&F4QR2?$w<>;XPQlR(-V}3 z5nB$;c0@OSKz0Y~G9<}X;skK}b;`S@$>eJcd3lHm2y*H^8z_bh33srY?Qs+-TiWiH zuw;~Ygj-o)>aj3y7y1;{N02#5?o=r&3d1uu`qU~iZ#q~lU|?Tl9}Dpoh)JYsNeVz# zndbV^0J8@oYrr$P(9XoOreYdGc5KCXIx>BwQ{R8BFJI0-|MTx3fBBFLp|(nvQ{k!N zbI#%+W&^H`l=D%su~q;Y(V1xVsCwljiP-!kIKytBTeVciUZ>N{68NmCd9>`4mvW53 zkYZL6YOr^OV5p7N2l;^El#;)cbkIjPrMs${(mm)#%D4!i+f%(hH!90drlK{w6h`Gc zT9*{?E*ZX8#8}5AG`|R&Mn=}1Um%Ld(ze5RqL|+RT%);{QdSU z8k3cAPj!k*dA=}iWPXF8=RUqbp3ka8%ZrE+#;G_{^Ph-tF!1iza9bQvMX;aR_bOcD zl^ic=iAFyjcCB>%Omj)BLkXE8(OQ!sr1j1s_+nNJ9U!E8ND&xq(U^FrH)FXiOAREQ z*YOJET%(n#2}@4IFFT7xDQDCWgKy&Cf|FRtxsy4doF0cNM;#z{7HACea%as@V$;>C zJLc1;xuM>VZ&v3vjhY=8**J)@vNj)x)%*Ni7u{ zE1?V@gL`Xd$xrFc*+2Z}|K?A2tMNW-(!6n8`}%0M!3{*+26u%?%M9mTF z_>g#%Pg2k*G1qDV3w!U9lsHfzn}l=B1D+bligoW#GbI__k=p)vIUP{}S8jZgfQIHz zRBz)~udMVuDTm^ER)KGlMhsF+Q_A$7OHwK|GXW(#K!&6nFzY68I&^wtp@azdw=YHw zwUjSkNq{%5YCmM0>lNK65qYVG!13iGrmZ0>HG<6l74n9CBS$%(tn?OEdDAv-WRx*| z+sr^Ajvn2oz|P#it1@??&1fLLV^v1urfMP)OeKgwA@yDPy*jy=`}QzdaX%Jd!>GJTIv#Wtwzk zH=S_ZmL~!9P9?piadu8Nw$nR8oTa3)#OoZH_UySqsv1!2{=ZLhHfhHqq)glulDb<} zVWg7@3rYX~XS#cnj&vV2X1&N!)pR)y21}{<6`rz^DQHC2^O54E zp42RCdt9d%FYdFh1Cdc5SBw>eM8ArsGdcyvY&FIDK!x8MO-0WXRUu`QUQA-_%4_El zRu6C+(`>Gm@dfhw-+gw`=dfqkdXgP9-|h>mTB5!8eBDBtVB1z})3 z+ol6)>I4s^?x(7-y1Po>eyuOReE;j8fBfaoKfriiTo-vFb4i|P$I_e&JrX*Ao1}uPEv#K(t&_y5FQ>iHYHBg$MdYjiO=fpcBg8c z^%HCU(_Hh2%Im1n)8mr-s#!h(F1sI+$T+D}&g&BDSZS664^xIrEIbdk6J5F=CBwRw z6Cg{(LQD!oR|;0uC0B?PEY>eb#l&BXLvYe0Q$n{2J+>YPvBr;zBw_<9`kkapj3DOT zd^#w!7{e{}V3?Vhcno_Mlquq4+q2P5f&{^)e>6=103ZNKL_t&$x3NDtrSz?|WE77) znhzDZYk;sUj-Vt`Wf)>I2TW<1xjBJoI|f}sb>drAkyX^Ku$C=h#mEynS1+J-izQXf z{6_%l327C@A*B4P`E_;UG#76e6B>uP5V+z+qgmTYhR^vI^5ACUNb6nlxZ(>ku-hYL zBBfB{k%_v>@RHI?0|}`BRzRu0Bomnk+ICdg-Fe$p2p$2HaSp*uK2l^@P=djOZ8Fg~ zatOrUYV~As$~pYS;3V&L%vvp*kB?awij*ONP*n!OGP0ZsPIsHxgcY|e6E~K0qcYd_ zwCa=9KuM=+XMX6;!mHBc94KAajt(LVk+k2@(@dw1y2hb8Ac9~hW2q0(av}Q0d4)l;ZGx1~McN!Z9Dt)75uRN;UT_UI@*f#^Ql~s=K)3=&Q(i_xHhAhCiQrYE zKfhbGA!X58CkOIP_Txnu@VV`{R>Kr8YtWR3ec?{fuF8K_hN7NUJ*!3?ccSFV)MYlj zF#j`?zAXx)`nQa7Gn)=b(xj?>qjedIV+(yOfJUEwHyxq!et0>&eed{JQbr5?`wu;x znU<#?+~?k~qTFYvOG_Y+Eyv}7upQGoN0X_bpSiIl)y*#Fx`Zw7l5C>Ar)SCKQeLWw zTHUHOgK1wxF&VaxcN-zAWSE%cF&%?;W>D`OUdt-v(4_$Psx8LZ)<&lEE=^^9zNd}o zv+`BODU=3#-nO-Z2y-;H@A|u?uY1Sm zk0iUVO^mKZW(IsYjQHG!@|tJZjP?!Ks@ssAY-ou~VN^JCd@7N-62O%Tt3*p`Cndte zk8S0M0)Q9#VNNV1_=%Q8k?ESHF7X^d-qRE%;D%!CJARq5$OwB<@!>UCxZi7IqiyDn z>yjcs29GMpv4wdzRFaEMmYO7}pXZ$FWJpq$g@cP@vsm;vFip{F{a8tsG9w{nT_R1X zateP`pd|ZxE96Zw%N!)v2Wb~u02ydfWJD$;_ZV+l+K+8~s@@B?2PL4v2+1a**h_|V zCbNrH7gv%8r7>!0RYs=OXZFkxdg3Nw;t(TCgnftlq4W++CVWO4wsA6mrDZsTUidA>t^k9ER7fDxP-S zV!NNVIIm;;JUQk#&APjHfA`p(M*oAr&cGQYoxCB>eyz|)+4=ko*)>99W{lfdOJzVa zI1E-J=m9btCQAJ&m)PsG0K*rKA%P*RmXcH$ustLHwidVAAuq=dMA}Xxyl15YGztN#&0q z*m3CNV<*_0QhRE87-{0!`#xh_RJ%RSQI0npW0lRvkFKh(znt^s`#=BBzyAJvw`0tw zbN16ojww3@yy4VsV?8RRHc(mfglE?8}>s@qa=%*i^ys}UT{Pd%eEoVwPW15o0$May6O@gno{qb~t-Ysaa-&9YDiV6Sv^o_9R53n}usBAnYjH|j*TS@ChQb9^P)kC=(!KB#S7-YY{iLFrNDAx-iZgD{4tpC2D_CB+mXgr&jWr(SqcrK-CS5s0>@f)??F zIEmD`A(Ujsps(tOOnqX|n*XR8=reGKWJa2?P4vkcRecgz!_aMTqBQ$LZ;$(}FqMNh zMp{HP^;3+Yq>OXhj`5BGD-W1z|RfzaO5{13N1M3oZq2(TeTcLKs|iYZU*O zhv&m>KDzzkFGqj;n_qtY)7RHI%ou|)7fqL!>`*Z++c;+*JELu(=h~lAO$h^IrBlpW zS&izpE2KIZxbQ|Ms=LL)Gu$x9v-MTV1PTp}bJW>m8mH{=_(7eO+D`E%OH{IA0NYNX z%}zca*e_}FM1_q(5+_(+poGo(q^yC&E!P{gq29xHnyYMwAN64=Gp}uTREu&|Zrjf| zCSNBrdbU9)WsJc{iIVH&&J1hf=e}n0~Ezw5xyH8PRw(xB1+?fpKy+ z%-CwLf70t7pfswVwzrXN$$QGzga%gj z_>t1;BgU1m-{vMR7o7t<#>qr|02Iz`9>RA9ZDDFH^i8>oE8=5VG@2diU?3k z_E6eTiY+*Sf}jorWj8$b6Iz{sU1ZM7m#DSvISSE!uEj;b!}W|03QsM$Y$z2|6&ihY zr^eLwJMWj#{4*qnyQ<9hXWSZTKUR~F%k%KGA6w<$e*OBlfA`BTzkMMfPF6Y_ud-cc zT^`9+Br!*>FvkB3PpeY&bcAD-&Iw^i!||N(nfC)GJY1m}FF1NuqB)Xe*2?kFCTtIR zL!ni0N~*F9bS(|(@VcoN0*HE6NMH(AfqW0_9TI}z7UGfPKhHU%rGB6{Lj zHIiEODV*CqCcFN3!1A`i$$+$moPQ;$4pDJTFpZ~b*Bv+J%$qn(@i`&~3m_G(snthx zfT}t@j(gIKpe0nwwDe za?Bj8MuITa3q#dU?#+Lzz$mP+qqP>jIhBpzMhViGL zM4Rjo>TYKfbvqOGQX4<*AKlOMoG<5Z{`UKy{`9S0>c)@T7?amaYXDJegOS(b2aMY( zsbfdGZL1=pG+Y(^`OUNliDCspY|CUs=jvyOAFsloQsU)i*OVN=ny`=R$r^ zyNc}2e&A_io<|=|&IKtc3t3~wEQTXO!EYW1%f#t%to(v4jrIce=a%t}EjP4;rOmtkbOoc~Yk z7AJSg@zyn?k4bwv`A3BVl@2q%CW!S7*KHr2@lK2;q^xn9KD9H2=an;R&@6n*s?NFt z!|2OcO`Y>Rk2G$Xn@&z^7OD)n<))8ISe9v&iRI)`);;D$0%1v6$)qW=LYz*AvUjhz zTiNt4s!C zqe-xlww+ zn`X0dFG*Ns0V>PoCzjJoJcK0i#_jZ5gC*~SA5U9HuTkaWMnd=z_SaX{OERU>aVgKa zp9a^f=G|pDY5tx-GM4l_e!b>M9FN~}NiX`5Cc`3rWNm3k7nr6qHoMn9`K+2zRQ~75 z4>jaRe8v)f_EjZfMaVpfCv1WVI8A8^fh@KPo@p(rnT##v_H}nl8pMGjtN`_siuUu# zbH%PQC^qZMKD8IF%A>uZEuaj(Bb+QI@=O9!%YrAqVcR$+2X+z=Cdf zQO-8B$pGuhP$NLir120gozl~t$*9PVkz2o}otf86+$ix1>!TvT=NyZYnh!hBN!}E9 zuf(-ln}~)~b3nclA$qL2yCb4o8yO*+o{~K72TdWy&L&|4DxJcmAKij4-mA?uLgtXUpo3d{id;O5OB%RU&aP8+=K# zJms8YyW{t}2g7U3A<6h)(D{e|{NEy&NGF0CejE(d{+5(sK~3Ubjhxn3D3&}vXgU|p zbgn-2#hN)Wl96EWT71f5F9D&BVOo%ol#x&}jtzHvD+zrPSj=#bbsYPRPuz#=$*S&c z8dKV4hqNR<^Wen0=wrP0&}t7Oy=5K0hnemy7|aPdls~ciCaY%ze=-^cHSHxAL&=*h z4WS`kMzauDBJ)ZTf<$KG2;@)x`Rq|s((K1>&-((HM#67JA9a*6+ANZoA()v|sBk1W zq=|u!L}HB)%=(MmRKdWyuy7gzY7+3@CET4A4B_=ak5y38r@DRwP|iqgSbITUGky``6b|!^cA+icXGwrk}nk zxrWQIKB7>`re=fZB*$JFBxxqA^Ejh@Xu2k4EjC*ByO1x>EFO|FG3AAmqrtE&xx1i< zcj?D|sn{WH+o{gXiK*RgofCo49vj>d9grH_&=HSP%dt`8^B?~4zuRlZX(=ua7F!G9 z{WV`a8BG*Ezm04L5u<_q4Vc{CaBmydRrfFWM0CvCbB)myrG2kX`t&C(Yi?D{<=yw( zy=30I{`E&N($pe0GL>-BW(ceP>8gk;yu*!mlafX=S|KWVQBo1f>aV*<)FV zAcb)~+r<2KA$g`9X=6-X`js19B}+3aG7%LONGiGA&kcZ+bX3Oo(rV!1*;1@c72S=C+!JY{vQAW!l<64{61@28Y)45)8m5pe-nGUsqQOTzpJxAj{>x;q0cCYZ z+t9KcXNe#wk8f-b+bL~ngEkPO!pc0nY1~yW?G|fcxZ6hDT^Yz^ z#MCYH$KSsFo4@=1%l9v7uyWYBGfIuh@+~vU(x@RukhyrNKLa(E@mX=I^~4vVwM*?L zC+aC*a(#q%xxAcp>xLQEXNgqjL}Vz{D@*GN>bVYg?1OZCH9J~bC#stCy)CR%=wrQ) z`RJA%a~{$MbNjdl$DJ@U1{YC{dyjg89_QH=*pQJ%g59@K4fquXm^rhzW!u==(OlKU`KOax?QYuW zak_FzRq+55R{i!2qr^PXyA<*MbgB@y;_gfc!jF%-X;06E1q-QYy-n;9?rQ!|&NTtkeveH+KOqM8^@EAq5lkHEHy+M1>jfLIGj)=KP zNwB?43mUTMkRKn7c%8ErVl2%ReN985f1oK?=;EytNeXU)zwvhED|X9n&IrL^u*Wq$ z)yk-RIx$L{mdTEWu&$v4qvSX?%&--s?8G0o(@54dIBHmf>=7(kigm}`*5FIZA)T{} z<;i-7LMk$htYAV_`pDK-f#|34SpN(}nYl$NT4TfX1>IDC+`SSrw(E>A%o(RQer{VB zfUHlz=HqG5>!m;a@%8=t>wo;O-+%w>44(>d?amT@s3KUXz$C&wri}aS!FZW zjX)rCRmvVD+jzRgvNWrp?5oX@kfN8gL-4K3Y^i!ID-&e1m1l$>Gkg1b0lX@I&e*M@ z=S&`<%F={2T*Js>+>il9m8uPD^9cajOwWf?0EuDY= zAODLT9V50bAlXiGKIzM_GT2h0I0KqVz~a9l&amAtMa1Qek}63j`bUzFP{YV=dQ93i zQWznlH&qF)>rifej<+!AjKU<1zZmL`dux`-t0Em6+v_E#j&_|?D7c<#3~;~7)6;yF zuAyD;b_JVTN;59dP^c15?pyDUX&jOH8ah6z>~yyBrn01Ft;1w9&OBqCsKVR15hd5+hf10y|}ig4zWZ%vwK5uXC{TYK>DBZcfD#F~og% z;+}2S_)I*-iaW`xZVP$ScqtBDvJ$tHfiOB%$yx3===;|%-+%eq_VYN)ErL!PyUFBW zDT!fI_?iQ{41a>*%LZmGrca$cnZe)8us<&F6lVbP}Tk#0fZx0vNvmDnNAd z7vlg4(M?v-AXI1aqGqb{%7yk$HID#ol|YRKFH)Pcw*Tc_xp!2cwXJ6lB zI3>tAJY)R6PH1d0ZM4Fd7?hi(1z?qkSjBIj`eg7w=`7^NBag8y(Z(bxu6KiMXr4cX zD7hW5iN{Ax9j`;l(lBAkDr;k%i?9Hi`x)7Xe70Z*)H*yMU=QKz7?jbqYIbmk&)Y?JHu)EM z>Cf-|{R^*G{hPn}{+I91|M*{j`S=LOmXrKu>TnDp`x%BXN8eqlkH@W6mZU_^cVXi| zJyfiUV;8o`VzdEi>||aOKiN>)Q+eJglTzU1r|u_ya1Bk;mr+HKCL3pOb6Y|+5#kZu zK1V0Vf@%^PNss+{Q~BwSuyMIcFB*d^E8xh0^tvAJv#1Ju4z^Wmzz$o6*@usm8Cb7l z(0SK@rU)%rA{mVU+R6Fi&W7l@6Q15%9r)6npZ4HPloUhDRQw~3>^)%Q1AA(c0v;-3F*n={5!AxR_QC2D9XQS_1YuNtq=LOOsGFeL`5E!6H zq^5k^p0V47;%H>B5|-=fesN;3DM%si_~61X5B+G$T}QwE`sM4_`tzSZ{`a3hKAsQo z2<<@{L5=>f>ZjD{;Go7Lf0BiW>``%~h& zR=*I5l00B~%55^|yce z_U&8!&wt`Czkf7yXn~lj=x7S)tbh_YY$r^dDtm4kq^;RspyrP>Q>zg}Ri*KS*gO^= ztvZsdUMFrS+K+Yx%bWnr^LX7vN2ba<6S1$W5luRbhz{A zIyDm%!iD6rL{Xv&NAe3mhf^`Bar}`yd`MYQ?Qvcs&q&8^NEpv*z=*Whs7N5wdvdmI zkV+DzO=I^A16Isnl_r>e(vhUiLkEa^HKAn;*pjd+$S@lcf+O3V-NR%t9W+l{^3m*2 z(MYD5^FN}Ln6km$ejcZy^*sLTkN(m9+b^&G>)-wQr@#6BdYz9a5*s7HR4M0Gfnbys zk+*$SY25QZdSB3HaYMdT6;dQ00pT!9$u+Q5Y2GVQ@FlA)Y*1(0w2jC*Gi2y2r?qD? zs>YlrTEGlxW{Sy_VpfZDuq~zdsS)&BZ9iL@;y1!oZmZHz9-ZeIM^piY;?dn6I9^LC z2W$S+1B!{IE#NkuY$fE1$p})8QHU#a-7Yv)4@sybiMC%A(KEzl&O3(Go1(4?HAxmB zWP1mtCTZ+T{G~S(=9x)gx<7F!LcO^rX&v5rs2aqgz$iIZrC&*8ImwN05GqWa>~g)3A`rhcr=A@9mHT%nFUw#TVB| z&u3)h8iVur8A5}4VCHB!ulD_L_wOHm*jWl6u7M5t-I1;B_$@TtMCe{Yp^i`6CIcdKX|H|q}z@r369oYCX%5XN$$+)u_Eol4f_dwFI&tB=vHUN$AVtsOi zOofhHGEFLsUP?4#2Q;$rRekiH*wvp5!K=BxZue$F;P+tT+8zoF!o`AU1Z2~uoS0?P zPd|_C2^eW<-k>Dm9>Bmy^W*oH>-+aF|M$Q9{%`;8+xKsWpipXT8QD#OJfc*ccV#al zWHHSO+-u;rXZI+;uFW=2rg^Bd;lG4vaJQakN_XYt&hZ;+^L%tB0t`B33G0-qW+%I( zDmh`q`$x}u7?^NXr7!1XIjimS_y6g?aKZgHRHmS|<_erTJ!cDzs@X7-nGxcch;?p* zF+0snxH4WGZ#aY}ldojQ=~5z|k=aZinR3_r$dgPlI8X--W8)MDDY^8G%nY$dg`su>IP^-J9H|a9fd8!eX4h%2Xjlh7P_J zz5N^FT(Boi59e8V&>=WoS80+_G%g%xq3AT9--5ZZ9Js>KL?21#B(zXvG{Pn0H?>Vk z)&wW*=mMRT%*K1gj1)oj%Frvl&IUAK2Zl^@qp6G?3TTlF0<0vEQYv**(1KM0b<1)hV#+Tc2c?8f{oKtP;ybp324rVn@@SOOrHhJ%s z>Y&N!jx3e&uisz4e0zO7d_1X&P)XnlZ7Sf@&K}$efRaG;U-)(BaXFpkMQabQo@X4&DU~?? z@Q?pZ#2sFn)HS>zT>2!3XgSTNK+uvz*}V`I;9W$MLC4sCq_eSQJmlExiCME{(2|-bTbW%2{lq%?;t}$=<>pKRW?0 zYhQp<^{D09uh$-*d7-rz5E7O3Rv|lCRr+}%KlRhDs_);wyuOsEkLP)wI3OiL3cp1pEa|WZ%PE zX6@vgczaLjig>J-cne%VtBL_tuokb*+{;KhU%Q=SAQ7lM{rg}3`A0t;H`{iWhP)S!j#7R~O5VJJlk(5Zrc|nk-!7RWoDFuis3SGU z%Bem&!tM{BgG&8DH($PJ-eqgwkPw;JBgBz+6m=+DU=?N;&P~XE1;itpLCbLBYlL=~ zj;TyOV%c34S+}##m@%?xN|FZyKvFPNAvA$>%wk;C-83_ri@S{q%eIZyf%DTx;^3SG z{Qh6=o3CN$a_NogzR63P+K30N>&dU7C0$(FufFfC8@M8hf6?oy>R3qP62Ro`rfY3} zO`4d~El-A|l)<9r61F<_-}ci;6A7-}nRXf#%XVHmJS-rZh{aIyy5IKFZmZjFxydmLn>m&hLtWjEf49#3|#^7kx@MUv9#$idsl zghD2sa}mAIg-A(4u9{L4998m^$fYjmyv``X+C+x?hX*X#ASCHj-6?4tY5M6-!Wvsz z{@>#^Ef=9MPsK%p@@CU%${7#VAAfoM@~!^qpX#6f*N-0`t;+q8_N3D+qJl|(w$>bz zyCb_OsOc`fP-lshupjal7H3hZ+M#hgu_T=wX9!^H!>!3CU}50Lt`59~Z9grfBi)nD zB9f2pmvsLAKmAv&frajoEPUpKD9yt%(olCFQQYG^Ff`6lgM-}hHV7|tRiVdHiW$<9 zG3n2=skE~BIi3y5n5lwn5|s84F=542wtW^5Fe+m@jmi1*+~x8?`pFab*ZJ4u_`EF+ zv!DC;1dDM}Z!ulT1^;F$=2r`ErPYgdiNrMvNbPbjgi*;!ie6zo~C>vYJficpl z13f2FM^vStD6?h}aOCL*gH5W=kb-=DT5TWr^mMJ8Lb2Y?2_(`4mqd$UC8GNm=XT@~ zd9PSx`lH|RcUqpWw(W*grWInxh0W5Mp~qlZd^A7YuhOsIUw`=JW&7j9A8qjyG3#DO z@1FUkPk2~ITskQbW)q+bNp5=1lFxQ)fCs?u*idDsJnshAm<1fw7YP3CD) z-f|6F77(1j|4;w*Qfzx9Lb}vjNh^9u+QG~U7mwSCWs0o|;K7&ha#5x7;3-0%>VU2@ znvN>L?z0Dpu(P;Jt7mBvi6F_Dny;Em;#>(L-dMbCCW?ngOC^=J?f@v|hSh^Ko4u2c zq_#b(xKjJv{(kj_{Uj7;t1_Jhm?;pcN;2JUO|WBXFpD$e=+D^7D45g{*`~Uf(`KQu zN^WX+P?RW*(?L7l*H82cNA@4xRplqIs-9usFbLS9@@n2$7@8S?5f^CjQ@W*AdkSPo zB|X<)>`)QAb{H(r(v~Kb%yf)IRXvYodOdEI9W>L$wgyb((I*oXV)d(VP}#+X(}8l! zogG^H$Z$W~m}{jE=BJpqJ^SKAQhQ#(y)bL7SIQdR30&jLXu}w$lJviIH-{8~a9ie7 zefg?C{QC9FIe+=<^E@r#n`% z{n5<5qT#wlfP*XPi=@j|a~U zDz4RQs-~f0cab}ylH)65uv zfUy=WW8%~yi`_ISOG&EPlrB_fq~skMzD`+gyHqx+_&Z|!5kr*_Jz}rUyF}BwY1-B~ zI{)Dx|GPdJ=SU%D@yP}2^QS7xuN-J%q|y04_GVQvrYtiV@7h9zYhzJb^`~s^v*n-J zdpH(XH^AL{i0`K)syws)IsFTRGs=3i`7?|LVV)u6*dtekp7c;75=&N90zKFrMk2r^ z9*uLkjATju>-CC|V^ET2EIj1KB+CZ-tO=BDk0;98+Ct&b;?XSItL9#izeZ}A6_q1x`%iwgq2jxJ71tw#+_A2 z8bv$GkLoq}$dyy;>!m$MP4`pl0$7p7l|;RkkMyFPB6@Q&&69DK`+~nsgxAE>jXCGE zvy@*kgHwWP=6#4D)04awfAhz$-@l!|{^*{UO(i#CKGJ|*lJu&KqZ5(wjG;y08O}Sa zzFy<`3u%&pnHVMK&_hld?sF=1mg3VgSu{@5R@+}rN&4uX!L=LJD@ev!Hri6R&%ghV z|3y)QVU}f5=de7DItI|uBhH%7!M}(m7Whog;e9q(=^68r3EGY1jECFyuZ54v=Z;ZO zdXgLvNmvdjHL@YL!5EKi=Id=EqG{_B;M1^ioYM)0x?U4j^y!B^J~No%S=3{ z-#YCJ#dR@~$g$bRRvc?T0U)+ilcAKVD3#jzOG!a5p;d81={)GX(y2tI2u~WcNqMe^ zTBf$p&^-z1D4(=3s1d3(5Iup4_iEW(w~VUXtySD86sHz@58ng0<^u`_bP=B(RZ^RCDkF`nqh8}L5-8?8uaA#F+~2;QKmPhk?f-cO z1b5t85=A*S*g4j!L9*#A4t=SxpRA8cPnFqI>Bvn#ri}G^4cB2Msct*Fk&=H5@Sf$C zMRH18C8-2-+}olwdmeJ)Xc#2Jws=Qj->Hq2;~06(?Ivz#Cr!0&=l@HQGbEoKz{Md? z5~9M+N-ow5-gnkme$A0<-N{v2+O^GUfu3>rqW1ZHZ)hC{rSX{7D!b zm3s&eC^LWrX-#QOUV^S`DjHIBRlZmpT!lpsg=AXPmc8)SauP2ae~~sb*3sqbem=9z zpl3qm`(B0T$Qu0Fyca$kKpX^{q2w+Rd%_mR zQu(OTvf#_B{^qxDU%#A2A0JP88$3!L`d5yqB8R5VyeC2H=AOq=otg<;h`OV|P6x=J4tiCCP!yf%^4Rj8GO3SLj=RVdDVII6|U(ASpXxJTkV^ zY>-$|$z|eX_9ug6O}xkR$=`a@F#1}mU>jNZd9y_MlVvd^A&xt2?8fv26hV1p&~}z_@8DgF zkFv@mrp^p*8}ph0iRZ_0`ntx#CWHChGbfxjX_km2i>3k1Jmnew^_yD z0Q6xV<5t`K&?dE^-yi?=_ow^$;~&2K{lEM5|M|DSe*Jo$K}sf7GrlBS<^9l4W=2Nf zZRUuEotMm;D%|!Ou|S(pdkvbjP=&j*y?MfmUv)4AZQC>beTq}nnL-&SB_Z3dG^dH5 z=Kt{d*Osgc#5$(!uJs~}kH1Oh4n@c2>Ow88uJGf~#ajDM4q-$$r2c%&w;-DqDN*?DREB>k0(09^yjK2^*jz(z(Lx)LGTQnzEx@jF)^IfF|D9gAi%kGGXBE z*CnKmA(%jCnE*%`VtG()L{Am`!@N2Fgt;bor{&Z0FC7PomY3N6wB4`9AJQfpHK zKp93&udb^DIPkkZ!^2Za5k;@!R?-d2q1B~=(3HHcxCCO0+S}8TM#bx;&3-KY_``>f zAL`%!vj6nwpWj~lStKbnJwTBvv$0wa2CZb+0jj{fcgJkoF61R1DccMlMjk>E@VOWR z?jzN7qE?Ow6+A#Di7Gxgeu1Rq<-(V_0u3XM<|jhbF;RGc3JMu_;0kU;NuW0TwJi$P zwoaMgwCtHL!@Os%E`4!agCyGDcfQ9IDMrage8CA=8q`?MpaJByCfhW~dYa-LiTFfK zEIl3E9FqyV)H3qC$?0+{=dvCZ^k+3q2)=GX166?7u=Ap%0(Z-zHW2_Q5R@A3xr*NQ zC*k!Xiw}ncNdm#9Aab%Lre;AJLUIq;SAqCx5bBniT+aRwsCtzK1|^)$Ht7@)kr|TX z>qF_dB#hSV{YH2}pn}7?e4oHs!{wKH@kqHKw6@1|OY+)1r}(jxXy_f_jl;>&=4j>s z!ujIsg3C7mm8yx*@ZiYWK+P*>IDv`-A*riaRT=<9qvTYa$LH72^?(2T_LslDsj;|n)D1s&U%@#N8WW{ z#gMe$maV8J$Cm>?YL>JKgha4U#TAJCU!ct-`)I{W6NuwaW8m{FVWB!3Wza)-A~r$sXt*Oifl`@Km{q+0YbmA`RkhzaTPVi7A-F{15kF-eI$ZWTqT z+XKU%$A|KeY(Gk}z@}L4f?>v_Lfe6T(S}ZQRf`H@4v%-C5v(H1=L{UFDm@YeSY9WE zSO!Vg6Uig;5b9x=XXh0+;HH$WJ&}JjG9O6Gs`Jrjb#Xlxgx-zmyvVu<*`Tp~kg}6u z%|QLo##mJ4;2!`vG2Ju*D4v>H{8W3*+o?7ds*0GvnVX3#aUf=>kzBU`5K6kV2+z7Y zy&&l2w+t)*kYEvKQEuKHXstL*WUGM}pvHS04ZpepRbdif)#B%m&+orJo=^V#(kr`z zJtwa62dUNy<3T40+Z%a-Vp6^YAIHz|D zM~_Y4P5Q`vbZH?Vz!xY_&>o}<1U)f56LDscT-Yw^kd*WgWZuQ3mcgW?=vIdWWJzgc;`AB41tcqV ztYDdpCTb)=$0%n=4j=Gil~jZ%x*}#$aU4fT%%1?RRUlg`z(ABlRs*6Z@3>n_M(Tvs9m?1cfRrG$0`fkX{Q%h zm6Pa|)V@ep(~Nlp#^B(`b+0wTlXRw)J*I(xVig6Is`C`!R{;Q07(!i&JKMLa&UI({a_wyrG(XOeUI-snjUXLLYeNre2S#Kw+R`?FDD5E z1RMoSBS9x__Bvlqzw=c~AZALdRA{L*)h>)(3nIuk_f{8YRC8klaL$dp;Y%PuB52DS zE1t+ka>27aiIpTV^{8z-?ba%^O8u%b%FOzt_<-gl0CCRfld90IJc2oYu-H(6GM-7@ z#6{B86MCkPRQHyiq^@VI*iFML?l;+kd zn>H{B1UO?EMc`FQfdd;O3m2Zr9FwwTHzQ${Z-(ko-CjKqv&SMl`9Ol$y9ri7z{^D& z!;i37SYE>fK_?z8uwlWtGJxlzpx29!hxXR?Dukt<^;+cTPwUgi&!3*_Pk(v)w|{@5 zjYj}0ZYmB+L=^|Xt1x9#Z!UbW&WSq0xG+lIvu))d&R97M8xkG`5L+NrRj=JeCQ)&B z!usiVfAnbiXmQjq-^_=17xRA^YUlGrSAeV&XC=tZFu(a`o(_g90P%3Zg)raB>6w61 zO`scS-(&oq^w1q8IJ-XvxJb|Mxy$Fe71v-+c=`tklA7L!M;vNT@qQln2OW;qtd?ZC z` zui;q$T1_jXd3Ba%9U%=2M`L0}SZ?&BPB>DwU>(Bq*WBQt89?e}qVF>Kqm+n4lilHbTvxRm4OBhb@+;$!?;i)2SkzgE@36Ft*277Ukw%HyHqa)Sj6uBCPjOUD`rrbLQ&iU%-u zC{5TL!0~l1H zI{qsbb}Wqqy`q3+mB+%X%8P==s5o7a&Po_)0#+hGp`fi%4iy;r9|0u1@0}dAk_2i} ze5(x{{`^O+nR#I1qM4lX;Gi&shA(q8*>GAPl1HAdTRXlc%uUG^c&sT7Z2{~F^2)g+ z4s}EIu#5qttl2OM&e)2iAS4`k77Uq3y*d|m{)_4aDRRW>1)?W}J> z?zEW1(hbi`$mQ7~@tKpFVUmlPax?p@?8jN4VI^V20k|O)i3fnZVb$LowSZ)YkOw4n zXF!JNiWj^9j8ia0IG>fk;Xmwu0bKLh{&#`;LHOear-ZXevi>DD$@RJSUF9OH?Zt=$Zg9rV(da;&x?V3S*KKxM$$C z;ej4Kq5%od>78;-001BWNklqou_vzZ#8WBHm{QQP2yHR>I($RSB}NIx%jE^T|V0f$}t$V*R}Za4oJC zt(v(e8hWrW2|>41THtO-y~xiW*2n+y=|8@E{^{So{rNw>eS7NyYr!BF;1EG0fRun2 zNmfzaRo?j7E(m%~|1c%0l^7blq(vt%_A>)F$QmOUSLL6>&6pDda7dbAPOuw2FyiJw zo{mGu_m2Q>K#{*jM2WTq0kZuIP-^p(bOl{C(1?#f$a5Lr>PZ18#L+!^^b{iV$4LnM z&mk>xv$R6I3Dx;9l9>=Y9UjL+|Sr*nmsN1BH+w`l1uOa0N1O^<6L)U z&1Eb{GRV6IJ2BTPS_guVRmha4J}7~$?$=9@jZPh>1Tcc;brr2BtJ(%)5!l(OAP{y( zmP1vEP`}hWYbx<&T3%o8}eICA2gO8i6o_-grire5glAD(23j@ij6e;^1s?cCN7GXQC6d%Rq z`H`}B7>r3uoElekq`YYLbq^ZAr0!7Ul0M==ZSZ0MnAUgafc@3v|i^k zNUr5p=yE_wbaF#FQKmF8|8`l~_Fwka5;B`a0@tD&02opDdlajdG34yPaLJcU%3yh( zWD`fE5>|ibVsczwgGdt;>IfR^MThHbbv02ZuyGmb`{aN%qc9b?K2 zLXH^5If%z9lFlHjriNt!9Z7K}HGc6W0GqwhRpf!0B%ovFg58YC1{qI7g77Ry=$lYu zbmCoim+d3blo{5}un45x`#Wk$8Ys~>oK5gbHR3^h|6yO!APhG1A;Z&pvtc^$nYnM@SjzU$#C6Ndpc=k z)KW2fS%#f7yVju<$P6E@vAy(-c?Y9^)| z!0}cvioGOOo*$c*2=e(@kepKxP>WNfo2M@azcbpU_Y83=m{nDPbkcM0QJ%*u)pW>X zYzSDactrs47#Thh;1`8a-{R%_ZQNElSrgG}b(U*NKGFwrNGAbFTH{!GD`TsqJxYXy zO`vMkeswfBc%#R31EKhr_A4N*H34+WEaBzzWEQ^r^!W1m3FvK0QY{kQEo(|sIL92C z7(EmL?C$Qo4u-|EzmhBu4TBvfYa#Ghi@34s;%d{q--D^6LwMXXpH)dt& zTuF?L2Y5JYv2m;s=Qy; zPf-$@aSMfM11#Y4~#7>4$q_yCUI58 zFBJ&0SU7Xl9E3Q~Se13lY{IE-Xd-W{xWu%WJ0gs8jCg#IR{G8t6$JRALO%faE#&gw` z0f8;qO|PGR_Xi-N93jH}xlQ0^434op3aBG^hEg15XjNum;2~MLT|jo6SHnb*e;miq zV+G5}gaaU{7@gxg$U;O3CXN8gyl!zIA09Bo51nCLo@X%^XAPaHNWr+6sAIKJLQ9XTQ4kRO2xtY|f@6^5^Wd@fkTANV&=PP zzg8r;e)HSk^B^XD92of@cOB86&k>Fg>vF6rRK&6mCok zDX2k7>$Y_RF{IHJBV#x%BR%xI6aSu((O<@!i$NGLh>^qz|3`)wt2kzIH6Ex9zjeEz zs>18A+>Q^Pv1dZCCY8qNDN>0UTiNjoAnb;U;wT>heTp5E7J9JY3PNg%vyF}fr}liO zIWk!nr-(+vza;t1$yMnbAU({WdT>-HpraW5y7jc^-v%TWV|2}tZepL`sq^^1Sa|COLi z1cNG;y1D4{g-HUDtwm+`b9`b-qEj(8I(DbJZ=`B^^vsE+X^@s(NsB3RUh3K{A`VEf zE2e&NwA{rt9HTYv-EK-5vQNWupxnHdv*>Qj#*h%JJCB|Qiaz`gHU z9s{(re)?^OguM9$0OiB*CEYSFUnBzyvw(5-c?;69O?oP@Dl&kaB!RjiBAqqr z^lA(-<8#$WlLj%^Fv<{pf+yYvmqV6yB>}fY{rpajNvBDJ#di^`N;a3<0Z`|7!nAfg z{&CGGTKY>M79moueM|);EKOBjDZ23_4+>0$0bODN+3;&GGCnis;nBpn5^usukc(dH zVtal7imaXM*o4RTL8CV~a1=OsrpaLh?kbcB>cI&&q?IXY{MH0buHC0*f*>Yy45qEVl|?;5uc;5$N!NlLltg82KxrE@t?Ia}fZ$Nbgwe-Nbkku;DkG5%$g&E18VKm)npL1A?x3Bo|-yb#WV&@d1Q! z+EP@S9g&VFMlRf{e;y`&d5swXQZ1s`(3;h!*A|70(?OFE9N-7fQHRDgq<5mo z%ZME3nEXm>mOCY?kmZwayK9lzuMPm^XN|q&h_liH+-gCK_2uK^yU**($H%Mt)m|4G zJxl47iQITpfv75jz7~}+an_O8ZyP%r^sHLzAOGc#IF|Z1AI!KS!zkbvALy)sUO_yU zsi8p(yQ!Ij7aTZ4k6U(kl?HF$*ILBjoV@)fU%^TRY?MKSpyVkju3I|ehvQgqc(gaE zs#Gy*1XZjgo4_qd9_Rzk1?kX%D2YsJej-d%Jbl|TL4qY>A&n43GJj(O@mfgRfFDIXK*<+y;wQ61^r^(sJz`h_));$}hME;*nXIOBM*AyFC*MLglm1?g?pm zmP0@Tz4ci9^l|;_^Yi2L@t<$~^J{wuxH$Gn5?EDL-nIeR6@V=i*uZWrduUKOWUY)e zlIy46{qbn%=&4pbvv9w(8I2b^(D9!= zZ@BZ9?xN!T(}^)9=)oKgN8I?UdK5`ENQ$$1g-BVHV=qn)tDNK{$eZX`5VJ;OASAbuaSR zse+RcS~6w~cmSA3+51~}T*bAjye)wBsM@V8TaWO@+T$thMyXkGR#tW3N&wdgHRbyt zP`d1kWU7l2!SZVmD{kV!BMHi{*2Wz~I=`Ah5H0NP=d-^1xPJWd{P0-+`R(fMv)lerja@o>zQvl&Du-YN=<6HLLfk@sy*%6#_AN~U0EB*j*kW7 z#e+8AYIrJEjLIY?bu6FYtOLTh4~?@h3NbptU=dMVk3R!QyCnh6mU$noqMwE++m98}F)Rc6v_e&h_X@*HzNHNqn8J=@AS3n>aX|!8I6>0m70vrmR6xeI z(+pbjXw|)HEOb4!34|WcS*8&ECdAnTj3uciztqa>Gkh z(A|~rf-ZrcBd3+jOY;CjW{;4ZINOLWu7N7DyaxbB3ovdNY9%q_H591UF2Nz8)o65i z2T|Kx<8QTyw?!M{1Sv}zNRSZY4~#b2E0&28t|rpKu+#nlgU`DgGC~U!h^RR% zk;J<@FEI1Y0f5j2+7U(;NYUB(3F6t)4`iPXrdDHk=mKR#ECQ)LCe^+A?Ib%HJ4* zF*5-1v5+7y8zv8nFt9Aih-<_+(y+BlO8)G2o1)gLq%&FXW>5;na@0hI%qF?dkb-8K zh@{a7v}hH1q~de_++ex1S4y>al@LokEk3JW3>O{hy9ViIp&PW53 z_`9R?rSttUkI}4X%s9Ul4m>^fmof&38nA*GgujKCEb3yRaxLHKu7{_34013Bq{VTAdE{N z{w6tyD}i*R;syX9g8+yuAxo$Io3&+q3LxWIxm@@yPY^SM)fqIN;4=~cPp78e|8`zL z(iiNGHsT1YHSq~H$0~y~JC`DDIT2`o>ktxH!wd%`r z{p$MH^tjJfz(Ih}vAB8MW+ZdA55LXc7zlXlbou_ zlFrWxUJI7xR2h%t8|`!nW62Gb)VsM>`R%06NP2UvG0a$e0rNIatB*jSvdTQB>3B+W zV9bn&JdfpDuVefGNnY^)+LMczyifG`N-cq0%nSZ%dG%oS`khQ}stNqE@AXLO-cfZ2dx>H!#HJR8sUPKpXshze!Ap04x>1C3Ggl{giQuAJK;nG|F zg#nvGNm4RQF=+g?q!Dl)32Sw}0f9M01ORu(ISyhe43I?;FZJ%%gNyLkOGrK zknD*B^xg%ms(<+Prysxj@UMUV`CtF?_LslD(J|R)t~!-&A=xBH5m*nGV{b2^2#h)k z@g<2Dn`Lzwaf%kJ$48&hV&F@Xh^50~70Cqm@|F&p0MED*L#4k)GJKp#C?Ux_A=FeB z5O|WH73y~3d`(Alyn=0%J#4ynjb25FE{ny@@u(aV%ys_?!10FU<Y@N?j31Ax3BNE|I9v7PWrD@F)?Bt`-v3vfy=PX0+&QU$x>o4-?L&R_>|%~eRG z7niWkPHYqCpn?&p@spuuNS$aIfhR*6S=FfA3MitSDhwmEQ?u(`mMtZ(^WhrJElxQG z2pWtlOHwlLpnZ#b9XEtHw`){kk&;NhHi?SwN|q~IujmPl%f>XIw_*%{P_`03$}3NW zwJ5TYL8?;>iype<27xeM%n?k&cq@WQOdgEes~K3O1%wjN?hn$K94UfPtY=mzX%(^x z5Gc&()oemJmqC`Bqm4+gDB#ow8&q}_YJ(ph^~0ABKYV%;+Tz=GCJ2EA6l;6t-435> z#}op3zpSBK4b^4a9*2iV07w0_9;_3GO=#q3K^7%?HxO$0QQ#5>LK^TCktt93X;N%T zM!h0lpx9+Vz_$wVgFsAVEZKOIH+c5N&T&ta_Z`Ohl4gfENFBzNAM$MEpoqXS7-C2s zSAdC1A;#nMd?gHskQE81KND276k$8z2bo#?JV?r`oQ?*S9NkieBV-kTasYte;N&}^ zT*KF@^*dw4DAbed0A`Roc4(EbVyA*!bn(x2fgqe+SyspJY6KM#U4vYaM(xptI`6WI z4SHocT`iw6BLVn@Q4x*X4}5%AqzE*NLws5W zK#=Xjr{{5pt5>&xHFHE+ObZf-7bGMt*76&G`byqd?8fr`@RZ`glul8oEflc@03TQV z`2EN4KQ2kT_qP||EjR+aUIRYix&#!tYVF?Zr+@wfZ!6tv#6&U@7(U7CkgUrNr5t17 z?+yO(+rXTJJA(6q3?QRO7Dal%=yxU|jTQFxR3fKtwnH#Y@<7D_B(X}M_c15TI5}-kD_Xc9 znBie^C{AQSJIS65vfYPDRm-znIZzP*nPh^=r-m_4u#PH=^y`1Bs%B%B9e8jT3<5~b zbGrhsqCk*EzFwP!MX*6|)dJugS3o&kp8Z_NK#D&+W~(0J+dS`JxygPso89Wv~kK#g(Mx1AZa&ISTsaY#ob=~1qxq3 zKmYEBkDs4x=+$_8;niAPRf$x~jvBBu9(FOFLG*Q;QNRGn(7CH&ejsxw5gla{S_){C zkk_ba)1y-+0>~TiMt`<*YZ?MEPAO+d0=U({GG8QnwTUApsOWQM@qH4iJIhupbkX_PiMDz;pVH0I!kqK-oXyc9B3kA;!jp=W**6Ngf==YY09R zhLcNiftnSksnJRq|_g4Xt;>L!UyBwJ1 zfu_&;C=ypDM1q}Z`kw6D{W^9FH^)KH<=w;`_iS@8D(pOUFeg4rFR7Kn$@UzFT>~UN zh`mC;9aCj`hx1Kx!z61EF|{Z39&O0md|^jP&;xb=@cv1wu48CE3WsuYf`Hxq$lidg zKZmq8e8-3dYOKX3{`zfyDE!?IpTGb5@lXH$_P_u9?f?As?d`3X=*>ef#C2PT>+k>R z_h(pSmG0d)AmM051$f9laR0>(3~wT8oQ6sF^4UD%@5gUmz6mi>e{0W93;N`og5pX@ z9cROo3Jc?=fJi6}+N6*{!L3VNIM#S-kG(_KaC-Pn;Ff6M`+Jjw`K(*J=kk|Mh(ZR5 zlWdY87A=-4fX=lUGV-7#@Zm#_u1M=dHDdu2;Z9AAltc`5R4{I(@=z5!n_S^MMMC=( z4;cJHl8!}kcp(ADp>hFW#AW+-ZxNy{sUhky1@F9^naVn>czmWnA;&ZUl^#&!T1&Fm zk30*AKd?xOB;iag)LoOo7+}yRz>G`fFiGO-FDy{CNh%MvByfY697``%+UL?qFC-*HfcxV{k>>tGzad(n)b@pO`mPFJ4MlWy#&zE&fLo_)B$jM zz{^|RkwO&6yuC(HorGpgBJJ4NWe3{=*7D>HNQY?~jw)yGxhfj1Ru$)LDF9XUVXA7C zSHROD5SmH$#iXWwC9z+Zy=0!m41&4GsW5(iYdx*~bif?aKJ5WRBdW`N}Q0=Bdp zMSlJC`0?w9?>|4DYrR@;uO?8%4GCDk`KRAo!>+F*{$dn-L~CJ>CIpP#k)*|SZcYls zLf+sdr|f=s?&MKxEJ?zIAh&Bnx+s}X(S z>(;fl>$ZwbV_;;ig+nR^VPrB11OzF28MQU=ohS(S>;z5^kkW4k9*TJd6A`0WXBr4l zBp>-6ask1ij$@V-eH^XCJXWr5qDIT6%R~xQ#kJHPaElhPDIuY_c>AON<%(6JqeF)hG;qhU$u3Hn zyE#8q#O#EHk;c_@E|RlqBxUc(1L*&=GKbqxRi-@SDY^^E&Oogq#Dd@dW1(|AqyM?+ z*CsjIdCS2MJ#PK+g;=fJx< z6o1b#j(j%BEo@+K5&Zi3@#B~04_`if{J?L!-(E7f&s%f+Pwe3^e=d)b(u4ocMZ_vc za288U>-bmJiW22G3`ou=V2>RopT+&esL!NpO=Evb4yH8D!3G%lM)0}9Sq$C z9-X++^XH-Cl1p3$fjX9z>AeX<;~)UL4*+IUXPF1GVjY~>Mc8SWq;R)7AR5`0r@JE^keH1Bv;sK%o1?_1YgcK_E_dr%Q~G#-^ae?&YEeucs}r%{M?m0u zc~?cj(Q%CKi1D$=qBt5RfUNdp%&}Ntj`N7v=;e6G^iMGp%{r_8zyiETouuFwSgFPrtBy6aNkB|D*mk&RF_u=D*^=iHCUjOjhKX4!o+)OCQ z8$q8s!rTW)t?RG3I8XYsH{3cJMa1zFpi-U72pc%ga!Q5(2|322&TZ)kyaswC*p&Ub zhtw6mCI=y$KMR0BqP#;M{{CVXz?e_|vMVI7seLo*coJ^Ux9??m{#;Y12#%}b5CJeb zkY-c)wBr^G0s={ZB;X`n0MB%+Q&b7#3+hII)7&ECvX!aHQ#r%PJog9|k0%4=VIn!P zixdqr);XJ{r>_%TG?+j_@6aR3+dpIU)4S0R?~EJI=Xeqi^4hQ#2lYjfH4}vhc}Iws zcRx8%P$7UI=Zs)epw1N7K??v9t4gz2S77D4+m?VpmXBD$XtYDjrhjI_y$lEALg6vMw1_NW9p%-X~wO{n=r+^1bvS>-61;6Lw z^KspTpm@1!6NkYmQ26*izY9UKS9Df$n-OVu`L|iXm zrP>D|suFbhF%JX%bGRVvxB(AI#?B>e3B*(Gml)J$V z5hzM}b#QJ?G$&q3AeJW-g(9l>Y85eH9jH;#c{kTRQqn2U-g~PTw79I!s)B42dOjA$ z7zRpBay__(YP9gSU(Z^-1XrmN_Sj*T5}Yr+x-DMV#qfINgfpeJhClm#lHlI$^{WN6 z0OCRHY`n){4FUwLqJ(~-id3~EpGRn6ODwc{RyJ#`0?^$eD`CTHXcks&p!a@M5%soT zy_Q-Ja!EhGURCS!x8H(dW(|ZV`w|Dt;7!I(&f4gTV0=#u`mgGrkw@IqpGb2LBdnBKCK~C zlF7J%(fR=!d_u8dmrOJXAZUk}Vp0SyugolhrAD_jj<0*B?*t%I67ri?;S9hYz_tJq zduv|l3>N5#Adqxb!PQBWjUwPon8tW>2x9Hs?P4AWrc$fMo*-#M1RjFaIG$qKl_W&W zHiw7?D9JnCBy19NA}0{eW*t0iQ!H<^$ngY5gzr_?yqHNA;uTXx3fVpN|Lc|@Dgyg*|{zf(L0UnyI zOZx?bW^yZ?ENi3O1`&VK$Xh6ARY_7yA0o{HrI`sQO-*P6(K zM26f53&0nH;aGKUo<|H%jm7|SJ(m5DC1@2+W@+FyNgJ1X6S|TYv*lh6gYA%S|0tn> z78~eFS|Rcn1Vq8*MjDp}mtBg7v7tXsK#4hFIA5A&w_@vO{$wUcKq{FIv=-RqtS3jwM@p5j$dYa3tsemn5P?65>={J2#7f>#oZ{9R$3xGKoFr za3NN)T>&J>a^2nQibx{6wL5xkC|(l{VO6aKdRr1%lTjb75vF=A&jN(;mV{I-cegsu znREe*1O;~I6jAFRT zgwi?;vW6Bc_n|>%CXNb#XOg6*BK(U;kT&4CdUtX2`Eb{g@_G%7U%nfoU}Lb6y)T30^os? zMyT1>nJ6QI@y~?o;SEu75E}FzE_^D6gb{gp z8MWv@OF%J`8z#UmX|xZ?^{irer3PVS77tha7XWl-6KYfgL(|9QXQzuogLisTSS+bs zK6oX*3P3j^hGc~j1g;3Gfz;R_Qd@!+=~XY@^N?#qZFM@-0>?cf6Ex=@Gc(SL=QiI$ ziK)b=K;Wxcq@-p>*KptfnPfD{*K~2&Nz$AVBalBRpuzTjyRxk8SQ!8`OEnRlXIPx$#@jWsPa-Bmo6b-LOU;drdf^L z2oWehD+!Q23jjcLc)+2y&rr94IV+K;LKnd#o@&I2RY|2xLV)q)exi|tv$cMOt z6B`HuqLg8Ufl~Ae<7h30BO*smmfEM;5>*yf50O{YVM~<9FC{1A&QnN=z{;S&-bGNq z+Tm>?H!<)jupuLdNzhI}4Jgl~g}t+ddD@Aj=^2>dO1VuW=@ipmPoVV578{OWZ6frl z7D@70DWxTKgQS1znf~35or17k7>-7Yq$e3?k0A>gc0hvKMuC=mJD~22D9ROgNKHH3 zmSh&XnXJeJxixEp+xwnpKrrnEhLQlfGWxdrTlY(NwQOOp-EUhD-WG}6FWtf{Vr)3? zubIm1^b#MTps|nRpqxyHh=hD6Aj~|}vEqQxtne{ENu4H^O0D`mw&LWIy z`xb17VmVtfG{{*F5R;b|Oga5@-qrc9P0yUh^Giw**od|)cpV-$IgWo4iY2xo+79g~ z7UEvm)Fa{B&qGovxu)4KVz&p4n9Kvq?p^}Wq9A$_7_P!jUgF7(9z&3zV0)aaW~$8R zYH>F8s@s)&69WOg8qf`9hk(}d+KZ%FPC{)!BwM6hcU6ey zzG4{v<{Fd4NKS}7`!keSp{Ru6HD*H~`tu15f<#K-SZiT)4+oY6^;n7TyXY~#VT2tL zjcgASG!)y+yN?-hh#F3T(N=n?JQxl*T!$g!_@6dqkD9Pk8&FQcLkd!D@a*Yi&Eo0?gV_8V$00f-aN5GH-qSXW> z3fg;b9~?;lZNgAgl`sY%Xlg6uBoP6L|0OW%#oUeQwVqnZCSH4YnrT&eI>yVjG}}k2 zQbuf-hjIkB5oXlDbG1{!A$XlQOcERgRpP69HckqZp;B_SM6?Rh)`W0LY7umnF|e>B zpuCDDb8@$uDJ3rjB?S4MKrQXQh8k+^H_t0nN{TQgjcx2Dxpzw~tbh3J|0F3{izB|dtVQRg1{^1Yr~+BWopA_|3EBsam)oLf z{v1z480tm_9pw?wxY5%i$PEnia8@=2UN@9m%BN;OzT8h`WizL=FS)dpcCH4me;;XN z(b<@u36oiM!B3N#`IP14n9o34}vbS|pV=m#JnatV7D z?L;jcO%&jDWCSpa8AMgVui{hduu|kuXD;)c`;|uW5gkB~sI_+QVo^}by;#$x(bZ-0 zmtkg*ZyE>e~vC$t7mz$sFj;}oszlzLln^k4^MYbZxXL;rk1&zI;*AAb{(a3gSOQ?#Gfpcs zFJ!bRQ3O1@ix@n~0x7ThQ6CyOp3xjFPj(W7RnGi`xunhdpS-y_INtF zdc6KUO#pHZck}^BF~d8o<#=L0J9qlC|GYj=%e+e3s+a-6q*Z30`G7K*kEQ@j{v|}Q zdQYeVI7pH+92bncS9{$++N*1}kqFuyt`x8U-IF)~C2D(>FwMIEBSA&307Ia?ihyJ+ z9MMXeqLuZr$(Hus=vW_T?@rkZ_N9sKd8LR4quEQ~)=n}cdD0eYQ51wKPIV)|1^~SF z-Yw3H5i$A5swxs~Sk9u2iW&rXMyN>5AOIJa7fJrEr4wdeV@txU?OEkX4a|e?+Ji3EFhsaE0(}+S0 zB?!!8=g@2QNZRwC$yE{Ij{q`D z*LBX4N?DnF0D&h#COP9MBtsnLe=7OH|-I#PVi%w*G}l$zxpW8Y z40I;5?t75)=(Y3{hl3wI`Tn{sOgs8l@jW->ik@C~7D4S?QKn;wY`d3a(T^53N=<AQ|*^c6q z#yxz2AX2jG@sDCr7B*p(ZRX60ZZM^K8j%$E4(T2kNRpyTW)?Z^{n~w7Zn|g8nUU}H zy;hZqL*RzS4vp)b??JoPskQmhjaIozlx%0+!ggPWyj4m`dU%XAzFUAPck>-p*zW$U z1rj8#6DsN6?t9~3U3c66aeoaFXiyD|LEUuIeX%PW!e`PBCYe=pf4Y6nD`2ZAW*U+L zXw%|6SG?z+z9Mh4n!~v~gEKTLT;%YEjK#@ZM74+&-Fy-DlUW!P7G~lHG}xX&%%=iw zQNjMq2`_MCRu}WwXhQ)HvSB=V7+^heG_3^*)7X0Y5t&!*{EX_IGU#=t1ZhAf@iE3)+It0=(qmAEhkbp>~wLr9v0as)?{>kZngM zN1+l?R0+55_j^81Xc(O7F0Dbx4V5ZignegD(i267;8i?&GkDOpA-X45U6Z<^Le?Qe zShleAFf8Lyg-uf@nMvjFx2|(s)vWSqt`bYV7ox;f=+MpVB`a$1N&Qs3Ws^R!~D@+gT)=VWqz` zHD)7y=9gHYxyN>jV3YUAfctyj?&b7KN1Da%9(B@~U#v5kriCa< z7z>gTI@kUbs3*v4+iuo1D^ygxtJ_&Q@*`&sRnJHe)84pjiuc_SsTql9Kn7Mvb+`ga z{Nv0Yx}A!Ih=$|nmC(#lxZspa6|NEL3X=p}-;{2(`o@8FDaRh)dmD4j-y2mG$2oS& zsZd=Tg>gFpB1YYOUI}uvG|>(}M9+^ia|zQ~d6p#Sbck&MV7BTa8QDKC3q)X{J1d=$ z1w$MR5vw)UFh*_}vI+9J9}Rd%KEQGl4r=w-NW^HIj6Y5dj7oWQqMm6!asESr%zna3 z#-cHR_RMYb9c)wjS7*H;&-@TSqDyLADMwop8O;kz24`t=@>)uL!Vg%d3rUX+50xCa z&&?wBfA7o#!e;oM<-?kL6El(#Vm)&z6{vmfDVyl8&!Kb21f?OCkb9(qyBj3E95j4W z(nTaZT9uEK&0J{%&8q)%9H^EbHd&jh7+R1Y4m!-9kx3zig-Xt*ZRvVa$U4dsLvTp^ zI2aI^s`YxUhQmnMTII~nPhiM`VQhcq*xk;t>-PA|R7GoFsSfqsjWv=G_cqcw<=Zsp z$SJm1X2NTWB^n>iD-kk!Qd39*GVl zH+)+)mZ?5+58>K|>{+OjO=3N2J{pigK5hDT6&vV;WiyKrqA^adU<`A+y^Noq!j1_p zY~mkU4{rvI0qz)D;|O8=7FDkL&L;e!ryN7FZdPa)1XdQyGX!NVb^tiRci1;$%%qqB z4QBKB$Z00J7!JGE=NN3x{|mxb%=f~Kg&dZ!MEfDs`$^LC`KKY3NfvoEP0*ZJrSm&- ztSCh!0;iYg@}7xg%_;uF0?-KyBExu^(121SvAmWggUk@^VPXCXZMtz@^Q-_SX9;AX zGk5-NI*!j6VhV+uVWy#jof8>@t9y$*?<&|5AL5k{+>5cIk zs7&%~pizr<^vNNf*S0@Z3N^ZSw{TVs92E2@y$mVWv~bf)XTLIaR)6(Ep_z2ynT!9#E=c?H_LgFSfrb%u&{WeW~saHl);Jd^p|3^A%!-{9u!;Y%qScZC3#yzKNC=ArV zbD@xal9CLH>|GWd$jsML#h$+Iw`&~s+ZrowfC<+L)UdMyZRX@FZZHtFpdN_i291j( zaQj-$`x+iow&IXkAc3v6Ed0_v`Z1$l{D(UFjRc`#A~I>XySMN6;cDVI{oC3J!p=8_U)GAs-?HZPJr3=@X5uni3_}fOEeRQcP&`xi@%8ldx z1d7Lz5kLn{3IVel&hxe%o0icW!y=*TcKh4+g7OA-PARoD3N>xk9~4vN`1M|i>tWMf zn+QKu5*1%cJu*FqTc$;qt>(IOHdE9TG9;E+=CyI6RPMdqt){#0ZJQfQWXREU;&Ucd z6wb6Bsz(0c=l3(3nQUaKEuCSI`MOsD%&GbycVGFM+wN{L8-4Qrt#hh7KB<>E>YnNi zf9>1;w(kZMS=vBtwiUpsKI+pXS@l3tUtYyK}H7c&xl(z`pIqLf5|Cc?rc#DOxEr?2ewx zG#G3zuvnuNhVW*yg-nXiH!tSdMb!_*7;z9P?DVSG>PL`B+HriqJR9st8gGV`^A&?# zh;hi|F(cDsLOoBsU~d#BiCuN7I*-~)A0DMCNg9_&j-la4nK9(HowmK7dD1@Tn1PdW zf0g$b3)85qQ%H_U!ESJsQe-13p@byksI*Z3D9{K=+>Q!BI+wAk?+v3qLcsjSc)qi6 z4?vGwIJI4}hqg|{w8ZgRfS5QtS@$#q8Y7Lp#00(3 z=kpm1K*CU!C>od4CPi3L%1u}0{navd>Ma?ytJ3GFpFn-|rQ$tJ{H16I5N8$TDP{F- zB{&L9?QE?tOC=kh&#`kXM9Ac-Sk=y2Rw1WIkbynKW2erPCYLtHT5_w+r&L=_2_T(4 zXSWF+Y6Z>4*TLxoU$&(p&Trhy+P`|sYJa{vlTh0nG|{RX z%TV2pZyMX!?wTTkp?~yFcb}1Uv%rkq>*dk1n(w#Ik*itJwQX5e)WpO6upThn>#B(9 z(mez$+I9|l>b`BAk8oISxl~o$Ysq*sf>af!P+pG7M2|6GZm0MXCY9ds=ftl?Qg;GX z+jh_Ca=zi?or->y*VB&^)40%|Bimn7?D@|3{{8yTygYFr=GHkFz7a7eZ?YqMse1xi4K!WYRR4qpCf*=KIowG=M#(?&mmuW zD6;OGz4u^mFArs=pyp?&wYu`TjX{UwLZnx>PgU=AX%f9&%k9;PHmhVsfNss;)_Ka< zyxwGbFYs#TLNgADU9cYpgyhmQntmQ{zw-^>Y}Gs>CLmH`qLA0OLN-M(0&c{ zgo;w-z-Z6%%8uDRo*lm3_eyoU8>*@jA^M@gfFV{3z(|{B&U;h!^t?Ccd#3);vtmvF zBenZXQYIti?U9WEycGQLu#&FQ4`MZoW$jn#DEz(SPG-P3nasqA=OB7qMURfjsL`HU zGqPT%j9)a&Op)r(52o*&ix2ykP25sXju_z7l&9En>E<=4@n(fFf3KzfXx0#N#E~9`gpt$G1}mf!vu+$>LT?={MZK` zPQXNKnflzh@K{ALPJTL+nbVGJh%`z?Kz^SVr!^gzlVMG|4SH$*+nQD3$XQ&|OFE8T`&&{k=!- z`ed9A+@llfrCaax&kx1WRIfadTM3md(_tT%vn^t(73N{wNoHA20OQ>Q^E^jDDl}jXo)M^HdZ9gHJJZ2WxR=~%K!fKX$BCiss4CC~NHP}22m`+&&4>udo; zWu7Jg=+^A=8&U-lpzbcJYSz~z6>8JCDwZ$*>2{w@Aw`%3fwTATpq53V#B~?N;8X3} z_8Bz=rqGR!Xx(z-bB-=qLW|%ye2apsoGhrF_G_&pz^nK3it^!8OjxFdTc}PgEdwO4 z#LW~Es`@#I25pwmnv2evqLPeHvaXCzfyV`jJ5VazcL30ZN+a6dLp`F1&XFCr*KU7S z%zj0S;PSb$-#ysYkU)$_FgMs*bpYA2Z%L${!d7fOD$(QqW*TbeE!n>#8KWIIkG^AE zFMEPVqygjnj6(6rRgEO@#3A!ZBTskJQ*ahZl$fXn9Mu`Q-btp@NBcx$tvPx+;<@#= zvu#tFR1}TCQzhU`Lc!aUW8Ft#ZM7L;1R9Ntw%uzTt@wK0JC$ZMe^Zj6Qbq9UL5!0m zvmpr*4Hl9DCI=`_W6^kH5X=7ChoaUlWY)==hbBv|w$ExV=T9kqL6UhjzK|?fx_Jp( z((MN(#QX8X&*jC6vg@1>&T%nqOsTpYrDvwv%TJoA7$v&FR=m+^y8x^N&dd_w+@N|w zNI_erT5)vFIfyt#lNc3|^+r`nrKL*l)gjTgFUpJqlGmF%;}hsGU&6-5S-`llG%+)x zH1#wq>4pc<62r@X1T1)1iP}%FG<1$1Zs zP3tMxtg?9qy2E-wJ`MP}9&N=UOU4FL08Q3u*`d6*i6@KqjA^FJ4sQ6oBN-htgZ7T` zZJe1$-s_cTW!(0u69)vy8a-stNg`QTL;P;zSypA{X)D>fnfmZUaaicorq%J5+d_Ms z_{is-1k$vE&`y&wY;pcJ|kF3Re8WochYWyAHZ~dbWXLqjwZJyJWD2xTh#5o?MB`0_BG$e zlCskXce@+a5y#E9^8$?&yZJxg?@hpUJK}N4Hd6iV6k&|YIsfbb{r?~O@_w6-y(kDK zHn{k`G1sF47k3NyC^$Ro9|5gV>Za`|koO@!?LGoIFa}=jIlW5lGzUS8Bvqi0b~S3n z#6ixV+g;nQQfQe;d0RaGVRO?ot&nr5WHTOh+IN57cV#S&``73af413yXYaNef-YR<+1$i&+= zL%KFqb#l0ObRT7#gFy437WFdyzsH!B_IXl;A*q!zG z56R{D^BE158A&;^qCi#-&IeRei?P&UuBXjYVNukafvS@Rd&>#_oI2BmTHLPq)8}z^ zB#93{G8rJ+j*_tnVr`-#V|jeA9M9pgtuGsPP$Gb=S93hnxoXA~yLk0?DT1VbBS=_smu+jn%(Z@2q}9fE)?2+j{beJ}vs zm4S6Rb8|ha4Klu&`;!T>p*0~=sCrf*r|a>pEG0klvQVnmYp+es!!} z_gz2Bo-p=ER#DWh(^OnY_@ktgh%T1h-8vQJCIrfquAOuV%8kZ)uywoRai~z<@wFe3 zgpn#yVQGT)X#G;&p1`yXjHbZI>%ag55ZO{z{*0u{R0|vGx!K)$?UQuXxX3iJ(I;+3 z9MEsb)a+VQ%*G&8>b7Jv#hKCHr;csAC2n6?qD;U%;8bu}DZZgcp=KhM)HO5AZP6k+oED4n|*%HI4@& zh6YjhJ?@-9vcxVInbolj!S(!^e%>x)&@!PJd7$K*U}S0f1J&HO4@?MCGg9`t*LtAn z;hci0Rv{(L^Qg@D3tIJ9LN#7VOqd{1N7!H-O6);RmWI%2a>Iq8O`$H?*_#^kjZdaVm@S)4AWI!CCr5&oac&Lv1|0mCdf(6v%#zz+(#X zwGGm`0MR~(_^4TXajB*h(E62s$1{%n-0K{zYjl5C9Yamgs58l|$X z0sC3w{wntliQCq8ncibNbM*zQ{)}9AGplL2MvorSu&*9 zBA9vrFk=8|%LveDea}uPLB4d_v4gRAfbRqnRYA;PjR!WLIAkSUxWv&FXvRNO!p}eR z8OrT+vz&)zu;uRlwmiN~F_jjIbIy=;=`gm#_MXucAs#}wyGdj6E-b=Cy8y!YRFD|8 z6CO{qorG8JE@gJC$avl7#^9dF!%S``)6c{-{#q`LNmR)D+?=^p)o02Avb!T+CWUvT z>BgJb5w18zbH<2jD69z1vobQne7blhzGC%!2%I$W&Ei7i+JIQeO@j}`p20J; zb+3EE*w5%&gTw4HnLeW~JqlM4%gPJ@=p;lmT2Jrfsn|N>ew`ZoO^2uJhxfxRl36tr{%sER_iQ`k=?x2%MG-xUi$l@|NZqb0)e`$qY%VXP-lo>lw{11TiC@ z>o%RiClT*{a!}!vBubLw9XrZDBN!x)+>3TM_uG@K7vrMX*x!2vM*!y>mCOwu;?@uT zOP_P1v;L7N+g1MrVZSLYjV^oTaA&xm2gD<|akC6m?3UQ7gPFckxhFAsI3q2J{%L=E z+`xN#(eKa0beo~da52B-Cr=*nY5cz^kSn1SKOenuS={?|1NZTm^pHE``fZT6J)t8z zIW=HWzC)7mtJOpn{&P`L@09`(&951Qau*L#uw+r~#A}LNu;XfYcGz{QwoYL(*dn7InNNlZz?NJXQ zS|kNVN89dp9aNHs@>0;a6+<26JGQ916a0!%IzywXQ?f<{^lUS-9gvK3#lT}84=-+C ztvXnKxGK>o*EupOFCYmgCEVSv@$3pBE;WhT2TnYSwT?Xp2#5di^} z-QE63=bYxjD9plr^rO9G9HDwCyZ?N!u^0al@Ao4mfyv4qywt-XFpf~!o^(}yc^ujx z-=pMKhP|xvQpij!w$eF6+BRmwzjJ(kwOum{v2*7I)_={;p#)FdF<%tPk@Pr)L%<*R zEbZ4)GT^Q#1`WJAnd6WaAw~T}Lgs3`WMlJ+#43f{nan}#w07u7B1V=DHemi(uC5A0 zqji$MwuL8-pY!LY*&*2zh|Q=a*_*qHplK%JzkNF^9)9#D4_O}IPkUneM;dcBzKVp@ zS_BV)L-47e3RlMitk7co;-OloS5>t?XBaU@B}C2G$r5Z|3E=s~Da(T=%snKLslFRLeqlS?(tJ>>6$kICoB-g#m38JNZ+L5Ytu85q)uP zTLPn^PW=K$-%$@ z5YjWs+y2<2x_VOjBYrc{e?|R)#_tU*G=&n(BE6^N$Zx`Sgol>yby<9ZpB_^bYVj^jRfm8107Z352;pYyMkZhIF5Ca4(t z{1RtcxT*oQ>qe!6|}|{mv#zG%Qb?~2VIBb zPju-->2YL2P_=yY8upA>I!tNG%BqP1^@3qsJfldP3g~w0&-uJql)ibN$`S!v_C<9d znQL&FRndXH2Zyx0H;1mJw5i`Z-8h7XhoA z&!@V%7iE(+wAD==OXcpKv>ivZu-Via_v@*S!A5Sk`x8Co`2+y=y6Ervy&n*~TI~H2 zpU=iuW^5w+8CGg^8G71O*2sfyk<8xPm$#W!qx%%)YOXX*CArWR=464P>ffMoY?Q{| zi+}_IxgoS?J9=a@5@gNtX=t?pg^kp^xS|y~zm2|XYrhMuy~X zLhTUH&e52RXwK8!;abI=*RiF{l*&^F}7k4 z6s-z$509(bU4`*&5eFS7nES^D?=Rf$-FPrie9nZ5l9uu=bvkbh5&NsNuW>5iq9H0L zmMDXan&`IOAJwv5iaBM>EVj%?^`%2owKOSZx7OHP4YFo>Y5YK%>d^kpIjIq$(Vi^J ziQi%O6%sknl~id^s?RC}o!N!L50oRZk4V2NVvo}st0{^;DI-VRO)37ptEiyDl z9s!--w&@?L{rg$L0GtuXM#qlwrEx4d%b00-Ig$=)wUx(C;?1VnQS-~J?e$ExI(91s zO8_+Bt;WKAB3RBl3!}@XqxfS0d1qSGS1P$F)f3+dTWt!jlApC5?$_?W{LepiDqzYW zB~^~BVBde}yr?2v#T{o^Xb#3eYB=ZQP#Q+XwGE8v{aAPzk`)EDll8gRTNhof;ln4hiLw~Kc_Ikc;w)m z(nt5MYROcHJd@OL#e^K3O1+IL{++Jko@zLE<)>U+`&HYS`C#8XCL#04$zcT8>7 zEISY8Y?J?{IgFw^G59i3OWt8MH#ziL=?dP%1En-vvyEei39RI6Q1Xn6dP-5 zRe>GvZyuacZnF|pKCVOoDo2!m!jtez#9D^N1h6}HrW{gHoKX9os4UZTY+NP$R%py?8kc{Q2 zR&V0S^prnedh4}n4Zb9)FkGvq#&-&?m+N?Zpo~&XqL-iu*oDQaYB%mv6*`BULdZ&K zm4~u^qq8BOH1)B5sOOfpd{hD5gigVXO}pzeFQ^K#qY*T7osX7J0;#a??LyjoW$uF1 zM%blm%Q@%34K(3GCQ?St74=clp52z=q)1AQuj8$3!b`I_P{UGs_X#M#kOVE8-Z>7v zB-Ih|0Tt5}_YB+DeN?t3DtWhVi9a=^NH&7nD6buXrb=yk_DIuioMZp&?oXBJZ_i3j zT&TWjO|8ZWb0Ul3NAvUXqoH0N454xNLNM@powB{XMlPgrp@*+O&5pL>*_zKAI&^%0O-Zs`8O& zk19c``b`9}aMfq!>*r?2c+A3(9wB8&vWA=|cD_spXEd+*;Clbdf%bP1E`d_vj) zJ#$P8L+XgVMifiYy&^Mt_^+9C6}WwSvrR%OO*|e*^oN2y=^y0bxsnD&RY(hF{%%Iil4&KtfcxCJPrKbPe`9h4WL)Wcoo*(8ks>LH*FYM zk{D;`p>TIap!VbS`*y{#B#oAr7!(>!Iik>xc>dXr5)?7s1acWsSn%kP;a$28K`OPq zJnF!E!w^J+Qafx;QvnNT#nem5o!4|~TX0rdsA`!CO+;JntOy#~fU9WX@wKV#@cj&9 z63ccQ0%omJ8IH6>c(BV)t9O$BGQX{o6x%b@e&4%eHjzASq#@i<2l-(Qe#OI>lT7+% zJ95S(JxdUq^{*;flj5>FC(1KPt^uMox>Navvy z30Xr5jIzQ2&m6HwONEdO41$Dq2OAm@m;t8ks&N|ALsr;?UhaErzA|?+Xe>R0cWlF$ zVZS7rX|{7dx{Z};(+vJL4QGd%2XDuD1-m;m2_KThPY>l3<&Bu6BTK3}w(^d$?; zjAld2qi1%OjtLqNfSq-!Nd53i`>?7swBm(JaH+Q}TatO+Pl=E>&Dt*$;OS+P5hd9> zh&cA^6kL-`JYtf)+Gax~!>YfquV1Y_to6n?gSu6V8e5nNd&%W98o zjaYRz*c_2CuWwf!3$cZMo*ZG@*ts*^R$gyqS5+_S@@W$VexEbK#xIOySxH$5zy%4W zgl85ydBKddS1?YQZAr>HL!2W)G7Mw+)* z&b3qUl)#_ajjriGsUoRr>gnbu1(1ONwmXjSx^=@QEwAm8&N}k`v8E&KlA`lJBfV>c6C` zN6Td7V_@PC{?3Ywdl{n@MWQNJB)0u&YHa;N84xD!aC}{@wD6$8d2inK|2u%^ zm>!mB*g0|QbASG-heK;9#`9P>J~zL-e6YAgor&+m{9KV?2syVFLnn5am{$T&i@P@>?kcU zV7-$qmTQ|ChiBmO?fzaT#}Tr?@7MrBB|}71ns6pn0>j@KukCg_c^9e*ZO?jQg0|g5 zS26CMXBq36DP}ZH;=Aq}nUmryh4Rj8gc?bC*?h+R&^D7ubfstMlj zknRNP5lpP{-8{C)p4>L$%7cI1idUb`wFE$6+#+hYx?f}`*7QXW(=!uE?tW1_!?ON8 zZ$5;L9r-*NoLQ;vrlnKXp+P+=J`yrx{v5z&3g510tIb`RDaKbqiWSmMdpucBK74$( z_<;5YUE8A8T|Dc&2s)_P)wBrM90{NVPJr8^%kU5ayP_Z(Ih=y)yzC|uYc_io?jvV? zCPcSq{&JD6c)`I~v&w*Eu8d;`ne!&1vn&VA>b{zEOvlEGU5W$SWmoC%_X3~uCVCEv zAH`FZlX8c9J)VxutYO@H!#m(vckq5@z3d}3cSei*o|48h>ew%#_+|GFTxlEEsd$wt z+THEA*EeS(&N`hky|araNS4|@uki!)wV$Q>)Q)zyjl?12r9A)u06$4YK~$grak_oK zEva@F^kifV#eu)K4JoZU>9v)E#$tB_!d3G1ZGZku<~|~Es;)a?^5>juqV07*qoM6N<$f>tU^P5=M^ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Macos_pdf_output.png b/Documentation/pictures/Learning_Macos_pdf_output.png new file mode 100644 index 0000000000000000000000000000000000000000..cba71447f477c85aab9e96edabb84d7d2b517348 GIT binary patch literal 18870 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 YtOyTXNT3)2-z>>EK%ML=FWq?XKiWyfl>h($ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Macos_welcome.png b/Documentation/pictures/Learning_Macos_welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6dc27184fb8fd6d206f6653538031f60b45896 GIT binary patch literal 51699 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 g2<- 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 i**I;{fMHoo1pXI>kacA5Vp^F10000>F7C literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Win7_Log_File.png b/Documentation/pictures/Learning_Win7_Log_File.png new file mode 100644 index 0000000000000000000000000000000000000000..642ac78a98e8112db4aa6ad3e8a416e158b82950 GIT binary patch literal 76164 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�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 V$3TZ~nFPQOSt&)y3UQ;r{{cn|FBAX( literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Win7_New_Menu.png b/Documentation/pictures/Learning_Win7_New_Menu.png new file mode 100644 index 0000000000000000000000000000000000000000..8946ec10fec1771fbd120f5a2b3b4b5710cfade3 GIT binary patch literal 42837 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

    S;s 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%0AZjtG;uyiA3h+IJ-U&bnDVcB>uCeU`bKv45}Zp= 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 fz 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 b?nVB8v!4^s7vd>h00000NkvXXu0mjfL23Ue literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Win7_Open_Dragndrop.png b/Documentation/pictures/Learning_Win7_Open_Dragndrop.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7fc8e04ae81583c224787cf678abc372788b7a GIT binary patch literal 52799 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Win7_Open_Menu.png b/Documentation/pictures/Learning_Win7_Open_Menu.png new file mode 100644 index 0000000000000000000000000000000000000000..c81dee5c7ed224909e98cf4e39251b7793822379 GIT binary patch literal 44304 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 G#(x2v4GiP} literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Win7_Pdf_Output.png b/Documentation/pictures/Learning_Win7_Pdf_Output.png new file mode 100644 index 0000000000000000000000000000000000000000..c007685b2f56a99eee057da3be76b1127e0d8da3 GIT binary patch literal 43223 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 mBKy83TFJ!(@YV+qSJY-`~u;GdpL_{;_k; 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 JRX}mN_#X|}Ggklr literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Win7_Welcome_File_Whole.png b/Documentation/pictures/Learning_Win7_Welcome_File_Whole.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd588d63768a1c8ff74db044d0497f90c7e6328 GIT binary patch literal 101733 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 TLh9te;e$*JEvOF-PKN#ukGKCS literal 0 HcmV?d00001 diff --git a/Documentation/pictures/OpusAndFeta.png b/Documentation/pictures/OpusAndFeta.png new file mode 100644 index 0000000000000000000000000000000000000000..f766063fa5aff4db4f9fe017e41c426cd61b22cc GIT binary patch literal 13234 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 s8Kevh4r=)j1dx!D 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/VTlogo_ITF.png b/Documentation/pictures/VTlogo_ITF.png new file mode 100644 index 0000000000000000000000000000000000000000..bb45adfbb419414ede82b8a1a33e05459839968c GIT binary patch literal 4216 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/background-image.png b/Documentation/pictures/background-image.png new file mode 100644 index 0000000000000000000000000000000000000000..dac7f63eb79dd9c2d787b8dee0df435b89070b89 GIT binary patch literal 57961 zcmV*hKu*7jP)00Hy}0ssI2M6^iV00001b5ch_0Itp) z=>Px#32;bRa{vGf6951U69E94oEQKAAOJ~3K~#9!?7i8tBsY>Js0T1JU+xkc$z(EX zD!XeIk)CgzPnoZomVRiF>6*@}ELL%eVBFQ+7C`3#wi{Fd50aT&?v*NLEFSLWW`IKV z=+SfVfB%pFi(Y;%`2m56K_FoGlj(mk{*H(iufY6ei&p}(H;KJq@$a{PJN$b7VbUvs z&8KXx9LtN3U(E8ik@ptQ?Shx@6Mdz0!P{FGf6%dKz5U{`|E$*`4^MOPKE+G0{itOu+1MS@+zgsUC zM4xLUvddd^yI!TwUmrH{S8ifx?CVCu%5*(UtQ``Yqex!&kS+<3E+UQ-2 zJZcDU2W>Gx2#)K>PFiG#^a!+29y$CVu9^AyAw4NMvPZ904sg+wL%W%PkjKbJ5%RYG z{Hr4p92U1OzN5nrFK!%^kRU{MqL66D7TQa2zc8lDS=HwB&UrAA#TwmU^S_z}#P#k{ zqOiUt^4|v#uTA*d_;<%Lz16ck^(azeE-5)X;%^Zzo3>e=64@c$e?VOfP|^V5Jt3S$ zkPiF!>8-32BwwN&V3azfmB_yNYOw+r>B>Nfkja!nNThN?#QIQ#5F55@CK_ARHM6P= zhrfLZ?w=g!mAx0MV&jirkL=i#c2T&1Qs~h9P3Eha7cY)QcBsiL68A*DMNnQSh4sxP zK>%vsMD?^*ktsR7EQT4b^!G?mr@JmlEyF%|ieu4vA>}E#iRl zU+`G0ZB7vd>x_jMsQDL!1P(nAxV`ubD`IG6F|zidRtl4fHLEAU9P3PP)I<=0l5WO9 zC#FdAAo|4x=wCzd*6T$BW-dTuC>xF0ED7e>8zFCTQufW1t~Rzxlezo)<{}CF#Y)e} zWyU{SMtom_`z4V*g~n*jI<12m-<%50u9V(Wzc*GKAdwGlu}+S5P-6jJ$>79xS@?id zg+b9SmK3vMh`89Nx&)0`y)nmNx)>|~Ks=Zs=E<>T0~JqDfi*yVfs!cbm1P3@k3Y?A zN&)pi)QZSY?w~?@AHA+h;_SJnxB$R%vYOCy_Lty(dCs25@(|l#Dk87E0HlR=A{kUA zDYBE8v$Gt+pp}i0e}QCiAYqF@UTJ&@&aQl1BC8_i6RPNn087?ib#O;bwAIVjRjhgPPi_RC9fzW|Lv zP6`7RYS3|(G^8->VOBHo)Sl_PvRLHiV$?_!s#;{%C}P?!k491@$4nhyBp-lkWS2-d za^AG6wiM6_$xKf{0x6DfKwNWTbla3BNF7UBZzf&msl{$Gvga^mW92oVpkqo_0Tl@p z3J$TUF5~QSlR#QvNVj=kf_qlNuHx(xrU?Dki#Q;(0&tF$kc`HVinCLk`j$^dgo4Jz z*Y{>)uu8y>(}^?y8v;;ZM zxE0?=OKTwWU$w<4ZNxYrmdlONa(1X`TYT*yN=pT)75_FNz)R--Bf~t9P8H*9Uql%k za>1o!_Nxh-)g|TQ>@l7L<#EDDn%YV9MIqO@smQLt-x*Mho)*Ptn&jCQeRl!!oykkv z<9v1kGA|y90w{sACs>cd387~LLeEJ#P+6#Pk-?3L9biZxLCI4#8c9_k3&~G}T&E$4 z+hA6FzrZq|p0?|=BqC)viN>V)?DP{%Dy92odAoEAjI86AmZGMBR%pRXO8nQ=I&++7 z5UZ@yC`e+LUl1FzxXD^%S94?uBpI7>%7C^`4}T#v~>!(&uy* z&dyorqLPqFX;323iG3(8Sg$X^{Q^KH6T|&c>H_Okt0Ou2kzGJ$DSP5+&i0e?IzX#1 z5;(gsG`j_KJs9e#N@yArt&Ulr2H1R_{d z-&99xK_OWHi3f=MG*cZ^q;Ynrq%0DT$yn|}nS@|{O711NUliGqRiMi8CA)(Pq^>81 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 NwMW`YWe=^<{{!zHd*uKC literal 0 HcmV?d00001 diff --git a/Documentation/user/baer-flat-bw.png b/Documentation/pictures/baer-flat-bw.png similarity index 100% rename from Documentation/user/baer-flat-bw.png rename to Documentation/pictures/baer-flat-bw.png diff --git a/Documentation/pictures/baer-flat-gray.png b/Documentation/pictures/baer-flat-gray.png new file mode 100644 index 0000000000000000000000000000000000000000..47e97d42e9c34296be0043760b63a0777cc7736a GIT binary patch literal 29101 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

    QD!2m;@JPsj>ZOn%ma=QS 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ⅈ@&})a3#hOJPfj!4@d6hoBUdSjUEYY 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

    *Cd}3mDb{0^DBsKVcPSLs3HtHkBL%^<#tOt9k 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
    |9ejPAY-Z_Dlo%#{9kM49 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�-BRLOWPIuLBZ5dilPG zt9ATMAs5P<%Y%!wQuLc~+o_f<*R`v=D9B;E+k)?FolBJ|NZOHHg&)K8D$MEVb` zkbRYnFxGI3$h3ezbyw?XQ@Ihq_x;B{U=u$KFFS1;+JBW)1J~v zb=usxe?s;99119zT>s(=2?8w1L1E!XtmK&J|0OdkPxx`Mz<&dLPBKLp9kABl-=@~l q7I_l53b4}uj^q^h-<|(g^pB1bbwuYBkni#by{jy*AqSPQjQT$|h)zua literal 0 HcmV?d00001 diff --git a/Documentation/pictures/baer-sarabande-hires.png b/Documentation/pictures/baer-sarabande-hires.png new file mode 100644 index 0000000000000000000000000000000000000000..06be5138ad7b065b1bc7db01d1b46e8e7f33acf5 GIT binary patch literal 33864 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

    )Kgz^MZrp9jc1VySEk3W!RGSs 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 m1-RRFl5`luLA2wJ90g05ibG{b=2# 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÷&X^ai+$!q6)W;~I$HR5{eR*n&?}=d~((Vmao}@iLVJ4__>A?yW0}=#9E} zU}e+-NzeLF34H?RlJEOgZ(-R?FQ+Ajl_a18U_Mo|1-0s#Aw&$Ml0Z^%wN_NSjTKc18S&wK zLkEhyo#M<^A%Nf=x^qMpgh+e@Dcy-3e7?OZ()XwZwY*>}aj7%XoPyZ|2T~|6;m+9} zzw7>)?`CE#7+qmF>&G1`%V@FNl>nE|QO6#h`mM#DnL;Ez=B2?n2S2463wa{8%LFTc zR66bkIQ{8Urb%#B6C@qBINu)ww>6@4J*z~lq!E#m@BZ|=+{0liw1G6Z%I6u+P5OD( zcW9(n4AX~F8Baf7S+9yd_;zh)?L;!Fp6+<^8>YvK`R@jzy1KfggN)QyS65W}*Vn&u zXwY^jmCA+h2*K;_udsVQ;>H_j@}L8-Bm?@x@CAuW6Ona-XndRUvr_Mmn%>K1lzY6j+4(g!^-~qmT@kq-fB+RPHP@Djx z8}aa~!zMJegUF0y%8&S>Vk)C^gOE3&M|jrg(8%GD#xPq2eLuxobxGYMC0Rhm+YD1{ z-Q^Wo0~4g@{XIWgA+$jzl7yXtkT(6lTFtzUSmBa1$SOwz1XquDHxq2|yAoJ<)Sui_ zU7aIZunw#PW8JlN+P`RAvqyws!9VFjd&z9BOcEg0%gG;KtwRW;b0h9wI1AVG+phGp zE6pL$bVivZ5NqVGzC5}vY^~VpEvd4818VupvH(4)0=B@&0r}VH$JpF)4`!_)mOQooQZl_xeLB@5xL7T4WB`T-ZayZqBD{iIG?yVr8|3l+DS5780p^4q zK#b!DY?`awM#oYilTZPH!6KKqynA_-QCU?_g>jFrXlXUw&Dd|Smp=90R)=sxZGVkx)Ozf$=KqU zw0Pu+UKdty#5PAfgSZrHrtaf8U0ZF1&(|~v#8Sc}D2y;U89B#Ku9UpCVq#c=gb}CV z@S&3&GZdJx7#rm2-``qH@P!x=x}eku8Q-N=AsKNcc)3d;mXwD9!ocumi6oc^OB$6>=Ft|ULuO8}gT1G^TWHOMs zIl(8K@Ab_gCumI^j}%~dazh>g^RFL-_Lb*oO*<<0VqGJ^Mn>D?%Cy!S$Zkcvx=NMg z`?`L#TU(1;6gKG-w320fLspW1rxg8-lr1OXC(@&HxBwIKru(!dv81AsLCyf*^y^3& zmLo8jjS+4ejIXKq)&Bq;q(;zbB47zCwiltLZaZeqZq-X;t2%cpj&}b5H5V$u$}E|U zxjMJ_)nIp4ATg6-0)w70*A(;?@?1zxgM<91I!C7!d%n(gm=wqXwjqCAscFUJF49F4 z!mdC$2cYN5vpaI-uFwF%kvuxF`k#(#;IF-nski$8~cU`waG;RKbMC-F2h?0MkxG_6yo)9rf%{wlk;14nOkOti81CDLVtU z=Ir+e_(vO#N61%`eSyl+{h`?qV@2E&M*jd0TKy3AILH3Yh4rxkc5nE0{YEQtRe9v@ zhiI~<(gb*l?!6S@~g2PaV{2d6cAK$vJ)7A$eU2i=~u5_H`V z`i6D{bG2!$vWY;GK};RM>+-3V(gv7>1zYnIq+>q2R%PA0CFAKD(c{4gH|O2!O0B?=HHGjuzArdnf4}+~p82*%2mt3Px z>z_T2+#YI7v9mNrT$kv)iVSiDx@81tIR{oVzWMi2jAlf0k*p1yKA-7XjI$$#b#wro zz{Ym<9#s9L;yYgv#*lCc-0w*Cq*oU#vLfgi#y}@O0q&-(CX~eHSV|1;G06V30W8mO zL5=ia=mB;E%cre#g=PVaaj*PGAfJs(v#Gfii{{R%+ z5HW|xfu0oc!OzCJ-%NKdBoV6Q?td^obn2?RG^kJpVYnOvSpB5$7|Oc$o1Y2W9#!(+ z-!#Gg#kX?n-kCVhzP>|+!rUW){M*;v{{Uh)cEi~o%zIfB%CRW|BY-R2y`6IMK^(Ja z2hSf~f|!@Tc0&tojF5U9(~(B~%FC!0ZTvf9Jt*+n#~g-sI?go%o_|VLv?q0yS}yHC zAdtNWyXEt&`K>M`CgGT_eM#H;`>UcRC-I{)lfd6T`f?eXRZu(wj3~#~6nk}sFkCsn zBoM=ot*Kkj`%Jpkw5I1t>&KSW&?CI*B#5e*#~zsKDeI+Xwpfu>8&TDOM&Cw}GF+0u z5gB7#6)T^W6x^6}7FN_(W%4}#07_%CZ;jo&qUq8$4S+h6_50Cgv+s24xDg;+C|1Vf z-_O?68;D{^(PY)H03058-- zofh3kcb)hAr*n_5O4EjGH-#2S`?<6NPM`tD>UI>rdMzesZhNUCBz{mg9QFF*lkM$a zi0>`C$BQ|@;1SOPgM805xKhfExdE7to|HJGyMYxHthoRU0OLNUo$TZhUV{4*j|O(@ z^8Wxer8Jh&M<5cZc3hF4>C%_9dtnE3>_(LYHro!l@~4cj&R6iy7BS){1NEaw!4*PG zvg#U1R_W*EK$>`_lSsiTcRc6NRb+7`!o>2T01m7$=gWF(d+S>Q%GqpkR0E3f^zB5y zxzv$5Mp%K9$FI9;*0s5Y8*rvbnU%0q?nw7~Q7^A;je@;D4G*=d`X7 z{{RfK#f%>iQ?SQ5=}lX9g`q=h_?Xf^__d6kw>6_5Xj_#=Rx(GY^YRCwK6RgQacOsO zQW-!e1xaCrBaC2uVvBZdW0h1h$lSXr8(?wiRF|~vVi-aS4NXQ7oBRvnu z)nWG6vn6S)qr9_H!*Q%<_oQvTrm?k21bwLkq;7R7lorP%b4W$@o7hb9DeV}gD!^&) z)sAzva(yZ2zS8?FD#VwTrOp8i;~;0>O8)@s53sJ7S|@4QAdHZ4DuPdz#+SeL_Q;*C zZIM9$9b*mp;;Y&J0BC)Hpgq@U+dB;E(=viF@v5J+Z)RFEG<~yfFisKYLyv}htF8Xj zJ)Tg@H*DD84M6@ObEl?v^Q`XO`(*ZJ7LpjdX4Dn~COd=*2bbohTkW^mPX(~;>qaU@ zqxgh8f9+N$Z~eG?H)lL@L4OR9ze6&%F}Fsc+I_lvJ93@d_MNI_h6j4N108%`RO5ZG zdpiVeA?;f!9k)=@sUw~|RTh73p31x~^LE9uuoxf5LHo5Te&79;?-mhv2>_CG$e73e zYP)^Edm{zHm@ch?yl=De+?1W&L}$Xt zPy#d4$5pud%JvP`U=g|@AnVHHf6w)rwb$NPu_KAiyc4io4-rkzr;5C8>+d#%w6NI_ zp`@wd_%%V>c2K>M=7&*>IinV=~ z`^R>Th0L#eX0s-ZF|M5BZg+lbMlZb0;XB#rQMd$u_jQeb_l)g(sR?^{mN0UmROg<) zIyYwhXRRqZxZ}@<4 zPyF?uKJlK@CZ=fMc4gd^V~h{{bhrNiEN`{vB@)>KE}fOf{{SaR$@cf{oR=NwFpUEl z()~970FI}$e&2nwx(Lxv5)5IN$MgL4n%`|c+ZjW(%8)Wh%l`n?S{5H~zS>058Dxr4 z8|Om@Adhysr?ek#{?_)T#<-a+(;Ed22>$?{ynKDGdt{-cZqa5Wl`37&{{SURr`n&j z{F#+uycdY^SyspNsC)?pii*$K$H9fAxv&V=DvN_nBeV;!VHiqIPfEC$$!ncgfmU zQZ}3sB(BPT=Af^)9@8|>IKR6LR`4lu-GwZGc_(9Ejqb9M@-0IR-mIO|Q?_J_4H$fhUl7Ai0>&z-4z{{a0YZC{Hw z=O;LF`2A>cFSIu3RV3{Q!5d+mWK>+o+nHyc8^kO%63W>=w5wb8ld^=0;mO?LTQo!2 z{i_;=FD z{#s7o?8n=8XLa^>wG3!CZ^Frs+M1K>&)ZAeoiX+W`T(G3@a_h2ze>H=*+;has1f@I zv|m@{BHBZod3b3_{>}ZdhD=Y`U81e0IQ%<}zEoRZvkz>gwMkd7yGIfq4sG89^!HF? z`!)8>WD%ag?JYURe+>Ts+P17d#J#ncroPRY8bOo~6O8`=%SXEV4))?VR2`Q&2RUx# z@CW`{%DMX^_R`hcz3f}i0meiR{{T%*r`b2R6WqsczR&iDi-K)r!5{f+$n3uFe%jr_ z?cJmdH_-9Q3ETew1x?4;7q#}X_hugS=o!+I5uYL9q!a8f+g)NIVK!Ox5#7nQ*~#$H zu0FxNvWTlJ3g(?V80L%^E65GBT14KK}p(F%R9_+LS{`T?}EGdtrgWSq6XPq<{Hc{jW*Y07oz6l7G=!y{Y$V_KMcZ-cI@lch0l{ z$y5ITlB?ODb}wqKFl4;7iHHRe#JO*GgVMC_KI~n-B<{uJI<#;V@;&|vOSC@hKGNAj zmu6Hk=OpNpVgCS?*26~{nooBVk&O#!x76k z#y|IUW&5l4G++~Tco??KTwsiJ{vS2B?C;&@+0Mjv)iuo0PZ>!PNfeA7_|eTTefM4V zdgeJU5wGGpv9l;&{>Mvpf8B%G*&V+TJ^qwzWJtSv{{V+t_Mdg{Ws*jC?k098Dz74( z4>SBd>sBAT_p&kAG*4sWV}k7(WFLNwtHiyl`@VZWEKYoO$chvc(lU4d0J-z8M0>JrcwK1Dz zl;9m~h{O}qIxBm!KEr*Uwt`6}?6_W12>`&PdSfY`DlWdleVXkv6t{LFC5-WIihyMQ z05(%`TXKDi`!g-NB;Ai?9BHz!wu}}WbEA6E?BB6(WuTm&_C1keHpR4LufM@Z?Ju#e z!J1Sp*}a}43y=f}f%8hwxcembN-}OAu`MJKAvjB9!90J#TUMWCp2taQE`QjT8u$zN zSjIN%;Qq9w{{Y!vvw}B~dlRyYAsRrnjIsX!lApEqC)v`v4`kUYDA;}(bGJ-s_w7hu zdjah6h8UvkPR|I#E#6uui+(>ZN>(qkPQXjaSvwBL0AUZ|W5DzNTHJ%|`>+<=Guc}y z&X5)){YIKvq2Pkq_q&q3`hs$Isn{o zIIP6BhXr9oCsr608-t%Anmkr8z)6Av>coNq@%mB{+T7gVF`mK|wnKx6cW;kcEw5$T zK*Ye->Ot`%0k@_wK81NNXGdvwY23L*kw@iF00-A@Yag|2U}EWRr3nNafC%Glhq|Y- zy`5-X9#d|tcgrp~K6tH|E!GL;ghdm(jbE3-cJjq9ci5&#&BEXvBRF0?+fo*=fqtpo zNaaphO6Mcbiq^TYw7jrO3E)DQI*Uh-hT@g9_I)jFSqzLBN$$xwBz&oB8!L5Y?*h9{ zO89U>k<{()t6KJOQu#5YN@jUeT_ysl4`3A+mN84_o7a5?}< zAE(wUNuh!Zb2oPwaB#x|Kea{Fmlr+Vzi_a?>Q3r#xbw!IxZDc8vfjlTo2bNv&M~Bs@874b zIF_JDE+(~+n5a?_MpKTMsj)GM^>;2rY;|RNW~n!7f7)Gb;EHAEWy#-vpZKQbGTo?u z9C<;ZG?9(!6)aL63u?JhshUI@iSo`X4(~+0?2yEz3t?0!)IPtZTF%xW1YOFpkYjWV z7u0QA5m-d0_=vd+getoxM?6(+`y;#zCSvQJRPXxqr(CU&NRm8ZbE{4VsMuC>LhxO! z!`n$LZNA%%yzNT%qT4m2T-<3xkV#+$J^Oz3^Jm-V+V^L63=&z{OAY1VItG^vQ{UqE zSH}If+BZF`+B06=NMx2)$t08e)%ydn@B3%8BeU%LS*|5^z*vy6KPvi9?5pne7)X0d z+EFV=+pGvNgZ}_{GFQ|7&U-au*&UM<7Lvyp(zrzfUZ&myET~hH&M>>+iS+HL0A%7Z`QUTi&eCJWn62G zxgQKvyr}Z4Dv-m&qaA(}TWHt-WK@ie@)sNVQulV?$=$@+I61)14Jjq4w~WSAvlP!i zlh9^^+L6m0m@xp)tDIyg z-;XLrA=}@FRW6}?UM(z1&lF2bE0vx}rJ0K{14z!;QtT_ z+Z2_7&PM+4)`wv8!2tZ&KP;YV@T?6hJW&IyfjHtkD0k_vm z@mv1gvbRR>Zmomhla?RezD4`ceW;mco3Q&TZMA8450Q@{hOd~|mSV(`Pg;uV>gv0r z2$9Y(*~gtyx~I~m30DVkgVMg>`s^@Oj) z(5TJ_B-3)dX^fddIpFlqm-nHxAO&=BCyT`&J$>9(rMznr1$f<|a@h>cf(;SU9_U+6x|px# zz&YEYuO9Y-%Gx_w*6MXBC?F!R)DOgM*1tLa@{kBV)9+(P4gek@URC!*zP0S{ZFSC7 znrtd@$ltAf)!Ekza*@j%M@eol2|YZ$_2jm$vjt{B7*Iyoz^Ft9(Ha6V) ze@bE2D~vd8T6V{gs>1cat9m#0Gdtb zHup^wfr9E9N#Ff{&1>7BNWz1jq|{1KDP{x9rcb3W9OywqDKPYnDkSj|#jE$UQ2k?f53wv;I}oyJOR8Gf5#vK^tZ9hDA6V z(=die(K1UOOB~Sd*%M9`M1CT zx}0TBahgg?ku-)dhhkM&57c~xE82aSbfYZNXkRm(@y%d7(;nK5B|sYmMx`S)w%wN) zca~ROmmp(o`>|ApXf2_Q&C4@Kl~q>f(EGo=9azYyvjG}9=Op7BP$3A8LX_sMyOv{rWQ6opk- ztFZpH^XUW}9jiyMB#tiDww1sjNT(R}uhMU_WP5P4ER@TwtL%3B8 z8M)^eKdoHE@+?l8PRA{$Bbo$=Ae|=-7X4~0E0-0jSe1L-;I?+qXF$`l01`m0T ze^0IJ$Nj!(7qOj{hU#^YHau_chN@ zkURy5Am=zZ#&Mb=_i;dtG957po;!)kCozru%Ip(7E(U?Z@zaWCWPm%f2 zps+VMd2p(OIp}^ks&=)zTan$!#O>fs@zd+$LRc8vlM<2v0a?aK>zvc`{uQm`l~+>? zVK6*j3gr`+WESd(tbZtvjl8i{hQxPRNSqb`u_t4meQ{Kd&IxDPr3;J@pbVUkPu`yv zF#@c)R8j~T!TqX}-GGF}Hb~n@+>Ucbx4E~N00xp91Rj_>RHej?DPH7^jOz+;)Sr29 zm-0!ZDjZ`gxgSE9x0wkBSppq<2HLNA3QmX{QjT`?{{UK>W|BA+LNj3FIOKWPel9rB zyMw5l5C-**%3`^BgB4aGw?Cj2shK6V49bjfLh49!{{Zn4M7Pq!rg`c;)F>s9Bv{>I-A9Ni!0V1Z zMO@y9i=OXL2W_*r`d266qykuFQv8I~fxnQUO3xyqs4hbjgV6nRS>3HSa}$;XX;N~# z3P;$`mqo5F3yn<03uJBYBD}71ZKQ>f3uI~;0GdicE=Cj)ry0k}t8Wa!jIQD}UCv1u z>+zuWr)u}<_;DL+2X+II=xMtU(Z!Gn0CEOK-Dt9z90q_QIBX2$b;rE#`_<)&;TOMP zf%x!_e5p5Ls?)xncOZUI&p4%6#Vo<$I)-vtdY-sA^{sHOER~T920UYNzxbj;)5di) zWwzNs>Feu7*0RPXI=YMlwL~(+&R`slb#iO26C|K?BN@RtJn>4svhMf`gZ#i?ew=Mq zmf%~UpH`-{hNC3c01I98xwHYB?D2-UApO)j&knIS2wrPe+J89F-Hs~wH zeY3e#>?@w(C2182U9tz)^smi7w3!-zZ97ezc#X^FZTYV!`@DdkXOklp9^uhD+P zvoqQ$F29p~{vw}<+knA*8b)-Tx%Yf%<>E2_01foE2vD>co4(XF8`Aa{%*&YdA~`fcS^?k&>uQ3p<}3=9FCk4jqp#9ZAhmgYx}J-O>gDSO}q z>Iyo7bFtjkV?f$`YpjETk?GA+&N+iCM&STI&BkkAw554s3Sv52Y=z|Qy;MrJu`5Xv zVEL~8?frjqNSlc67(5ZXE_NTA9{hFw^k$kie8`NUPB3=&boKbvt~*VmRfz)y-z58v zKYxV=-u3&oQcw_lB(QZ+r^qB!6lE9TM7 zeUtY?o;dxKQHBS+VtsZM^qsU~Yhc8M0e0!NHQAG0t7(p1QEJG>cC9A5Nn;_R)>LZz zxgJOQ(AM_eIE;^OLgN?;D~yS}kbnWsLEvw-P2}P^l?-Yf_x!l>{{R$;l0h@~Y^qU) zN{>G(c*19jCzB<&EDyh$Zb=7xNNpHg05%+XP}1V$$g1jDTNqq$J|pXDaW2voDJ~VU zkO0Pfuqg1%Bv5!H>^k#E-^(mIr6_a<2Rnm+H|yjY9@t-6pioO%BMnjBX! zvz57#0-z%#P$NWnkKx!V1>3I70E_%2dfMkHe|&*@s7of)10@)58bu-}Sm zXqh7)htrO~LX%rzEyJpo8nco%ri>B9BT{s6md-Okkgwv-oU*9RN=y7rE3#~$VyM~$ z*kj`a?~pv|MXS$prGZ%RPaJ2<4dih=f<$gd z$o#mh_^ve*7*nZO4Tk>!U*4LEB)V{0X8_|XkWU_5(=P%=8Z(@!J|XWEyGaD94}dzh z*z@|u0`m3bjU$W2p!MH1MVjH988#qe1QEV#NAV4q(?|e~j+~Ew?^cE=oaRRgtTt?q zmT^h;nxs(%iM0&jagF_G5MFm=tYcFhn>fiILat`-$yiATJB)09Pn{1$k;Nvnr%(fY z`TM=~FeG{~92{qVfU4cd@*=8%r#>PDO`uipOA(!c7!{rE1ks2cV@1fx3PHMfOSar&>*roiZpu)} zwvuszcB93XZBi1Xk&OP;(nlPU<(Odd2T!b2-6KN-6w8DBxX;V)lgxe#;rsz!kEM$)f2LSK$ zrQO;;7$jsI;BIJQWq3{-89U(Pp!n21#L&YU$G)tR6rOti;+wF!Gmh@!A*7Lz7o{40 z&$cqU=uDHJ%0IT%mvLnYye%7!Mh36(O+^gq0BFl5oRoG+Q$l9}~7fW@hJ`^8c?OK-7TN`O0atS$QBO8(Rn#qFU&B2Jvr2)amT+!r= zs{$lkaJbrl&oZ_npTmsoPDNfxfnO{L1?SoZ}xF@PD++gdLA^R2@Ya z@#)sTI{mF|`$u}f=lHGr*Sdb^(xUrWC~_CUwtCmwU6C|p0BG>a4=0_utpsQzy+-eX zhS+%%iZ|op#F|EsGBtUBnnvx!%)w5QcH7tIK(b*B<~djp4o-REv{p-aqA0GQ9rwZK znxxlIIy6O#d&tc%XDewf-htBuk%R87HSUBe{v79Rx%1=WNy#ed2U3O3HuK)Hb=#ZO z*CLF0d_KOhSGOkBO!;eZO*KBt-#4D}=^TjI{Ysi*tL!khZoQ^3tyIvVC zLOsHGa0cUTxaN&7ZQBFf$WejV9FGkr_}g1a(qF_3l5z|4M!D^%;kZUgQ%h%2&t9i$ zXZ^AQtdThYjDlNwrQd7B-x9Qyp} zsePfgRw1Wc*qAlM*^9ano1`ES!*9J2yH3S-?~vpU2&~5T zm$U7s4jwG;jlrf9+M64s?{&fgjBH0W&FwXdz+Bu!a(5w={dJ(v?RRIbxKnosJLkqT z?&s?isP?n7o?Sxf6+%X%-VSNY&=>T~ZE zpV}VTc6g8~-5?_w1%`imyuQ}Mh4(8oqh^O1LK zk{7NrPDk7WS;R?8_cxvw-CZq95TMoj=huU7Fmw}+BL5Z|KN~ja9+lyYxy;6tdcQ~< zc-ZhqbZg}=|B`XV+uwKeXd2js$!0qMBE&33=^g^ql_#!5AAyNNLXL_JQ~<;;H}^)DR#e z^5U#+%gSo3_e%E<+5+X5tJJD_m%my%S$GsI5Sms3e%Ha}_prMdn7jI9LS8?{Bha4VC_^-By>P4*} znh6Dw%0xBLjw_#z57HqR%W8`gU@I0}-3w!-Dr+&k7@fTYSgD11dAlxN*d{MVw}=8mRqI%rY7YHz_0X>*DzP-^|!b`CBc&WKme~x1E{J)`!pe~TKpp8 z?yP&eeU0mFxJFrWv)54)P~#IDw8EL5i;^F;%xpA@ycOo-qQDop?`rnrLTeB0i5w?M z-NGLI19&{LJ7iiJ*09u7`YynLU|8bX1MBp+Z20x8C}c^?5x{g4kyLP++XgxS2Q&#O z)52)av$xzxE*(4g|KBb^8=?w@=Xq8ET6ix;=k>!PrZ|a8__tN8?Z=QM)nQZ;lEt;$ z)tVt3m;_fenWOblc`Q^N7D0x9+a)`-8~p*5e!_9>L3AqtoPxquW&!#zeU|Htlth1@ zILu#f=_PMW)};Ol$bSsJ*~IfOD^=9iN+NYsL`MR)y{;O^lq1Je-odAp{{y{uJyBiv zZoc33X%%Q$-2fWrVo23BgvpPd)t}hq)Jv!-$z(A2J~SiM7ttEs?GVeRGcVgUGN^h_KY7X>WWe&EG);O)LOGs&&U&7i-lh5)QUb;x)bN)nC%pp`y zs*!cUarSrOlj*?LQcHWoZ@;7*>##LsIko)?GCC5&OO*COR!c`bNnTr4esqEM{qFRW zw(lJz8)w??W}llp*?fNpSAhkc?VXlI|K;0|N8rUx8I!d1oZ7QEx9}f4*l`nCK2DIZ zrS*JhYW2GR;D4%PWsBO$YW0?|1f71l{1dr=H~F5ppnqS+;HSyN6bM&V7L-P3xp$Qv zBN4^+ZKPu886mmpFu|WSgcXlrgWMgoEOCN|I!w&D5Buv?!g7>Qm^(Frci+IhG@1I1 zah>_kevw`BX0LQOxb5U2O#O{`pY`LAp zLYc(NwYq0y@5(~LLzAC~;{`q}S=5Hp*)J^aJ5=|2S7%7mApt5m4X>T~dU5@uClW4# zNvE4J0Y00`9ToN3A`eY*v9SX>&P*v5!Ms>Srg zov$JX#QyOg9H>dwb9E3DCAyV{wb&``JSnD*33hu-p-SpCX&)PwPt2#tDLEimX^syA znvJh@oq537=Cl&=8X86x0YOqa;i8vp+jk+^7Xf9*d)B@%b3RzgitA>AHSH)>DhIXb zD)Cp0-Q3v1dJ-3n92HKf(NpAZ`Yp+j60u`#gtWoSZ* zzo@z%C{{R3^EtC3T!X5ztG@Kl=X|bNmtQU?H*X!NBwX{W=1nipg?=+3#&QGgJNbp; zSyPdvAd6V4C}XZi7u~PDuSq+f^fI>yV97LVcy6-1PX^}534uX@cJogtr2h)p0?);$ zlEjzc3MBJ#EZ9BX=a15q@-!2eK^5hS#T zqSEBkQ2NyK_sJnR~0f(ahyNJI=MhQOG`MOD)5Y=4xA$ zyq8vBb)0{myUUp7y#DSsSs)aB2DvUSw4|R;=PeC{^kW0jwVSHVMI>8Jb6gkycrkqf z)8&-W#GRM(lW!#LebRx;1E@Gec_JS;w3LO>w}iE;y%YaMhROcq{{G&F)lrhjbZagF z16zQfqc`%0HAb+>ZU}_yH?ou!8FZVV-V?%6@*SsmTb9K-{4+~UL(uInj+MVlL&D6Ok1!2`owy5kbKx6QCIdKU4=C3PNy;KOrEjz->5~UV<9lm92lDxCumy%Z4 ze#f0$of_rvjZX^K@1PEVn9=pU>W%{O!`T++=Z)8)@2@$gr(Vfq=4v5rJ7crFI2+CH z{eW2Q#_or5QS2bjx|wPl?<6YfnHZKt{*}*n%V6X7&&3Wn;X^J#{vVN#kL*~LJu-K{ z_Z{ZRs2Ooqmbu6#Yg$hGu%zTJZ^TU!eNpSzaZOgbzyBxE)+Z=`H|U}Q#}+>?fJH7_ z9k27VOV;6E78)r^X1r1jxy{Z!3PO|$bwi_Q4OpHFoh*LA{C#d08#<9WXdSsax6R4d ze?0ay7Lj|kllM*}d!tzYL)0om8?1EsN<{MwtjYtcDrMq7ko&%_$Vi{cSsf1*Noh)o zI@HvsLo;zIx6{Ra*Ul&QyB7`U&RBSM-!;hnLFSd2yEUc05+yb^)KYG{yjPjKp9N*5n~iHE5lMu~rBbiS6?UXF`9@t=n< zu}p6Xo8K3UAA@}+Um?9}$CIh!PyA+lj|IQOE+uxp29SZf(vko>ynGl2Z@S+0shc5r zbYUBZXME1tSuNAiYIXW}x@r{L<5a#WUER2Uk@cli_~WzzWh*#}&NKoMVr*}4FNI&C zO9=GM@$ddLnZQP@ zI526hZXVv#`G59N)d2z4O2j%=@x(VkyZ58Nr}5uz{T3yZ)Mr8~XEA=7f0R<*Dcw+w z!}Ak?UcKK;^GA{jY;Hcc^9Rs(HzPz-8!5TTd_}H5=8C$Pin&;1+dTq}J@X?74D$ZD z4d_e{>+3Th%U%sE&sn!;sMVc;RKzi2C7sfjV>Tp@aJyS)#LsW^HcI+(h=#t;^Ro3>0Apx2&hz!cKM@#uu{xKlK)(}In+S#vKbD}GU6+h~K{Zp` z8$H$WT_m&kbv}g%Hu_`woFbXxE4#jZTHCl8vbx6R69&GRs$+a?=`Y=r?+7X^ZKwb! zrG&n*(a*@oUPPs!yTIEa8Je6?zAGNE5!tA$%kE z?w59b1%Bvth%C{5aHmaDy=De)S={63u)8b95)GFjqtz}BY;qRoo*?)APhdZxdX#5Q zWZfOUNjW2lSw5rl<9t}pysh@Lz}2x4CC33x2WzcyvD)CE+@Sc7CJAQg*=~KVF?tZ) z5wWQ0;SBo4(ax|Qr@MtxI!=A0)m^X=YNl~>0A*n~qBke}jfME{i&)DCn)BdclxIUh zvoCa>Z`X;)QXi=)fx~seEFT@h^N-IDF?d>S7r@HBO?(@~4uHr`pwUxQTopeZOdcb| z51X~uUghh!1T=G~ul4;Lbvb)q3|R%{s%9MC$jBJ&pG>ZK&w8T^`Dd%EJ^W@?(jJ39 zv+b>h4}v{>s;zxQwzc`c!#~%JJp9vdEHvOD$iOyaN%p-)o>YH?@~^R-Uh?}4(w)sm zxbxda&GA+DMq0hl3p&=F7qA=!$P^3F@9gKoz;Aq4bJ0C!^2w2vD*ZyQmB4s3alBuw z!#{=-`^X9=+fh`zzZmrc!QZqF zN><8ddot;f9gn_gRVa_Ip5&(o$Gvw`U@@l{xh3#nyDSqA_*nteM(ufHZ%^sjD|U3) zYac9>ljl6`g8V!hWeN*}gzeAg9}T5TY0X5K2g*pb{<4TRWLw5JqtJQXhk4^wy0n{m zy!CulOzaYNRZ@d^rK6vuAc7ql|1NdTOccoN!=p#L<57P$*zAf0b~%!N2>l1LE{s2xNMrB!W3p9@4rheCn(D=`iB)1G$^m&UD( z-)S1uRk#;6t}q9L?ayJve`^E;6D})Ed4p&Y$J(4(Na92M=a2ptkYqw-wcNMIC6GPr zlntZKl%AzsHlN$p6ZjYAJ6i~;S9ltQ zCw<2}9@wflk=!=1r!Kf3?P70=SRpvj{Fz(6bf>v&m@e?LZ;%LiDycIN@q28N94_83 zrGe~bZ1QO!?F;K5)!)vZ3~dtd@kg<=|CPJeE47`r3X1`oJ7G~%ZI=9r-n7xDkpsm; zf)-gK!nvS}MY&F%VW-!cnaYAq9%T(^-GN8$eVu+_dUlb5`~abK?o#> zrLHLS1xD$hTY&{sEc8DzI zg8$p?QsV0KL~E#l5H`657J-{DG~sE8x|{sR?uCDivE zV=AcLLDkP-`$3ruJ@(NT>ci+RZ~t|!M*QMWj}n1Q&sMEffFO$VXkCk|v~g!3*yWsM z1db;EqXqcATQZAc8o3dg9bYrS3wfb8K@QH{sYh?)G7XLYh;Wd-&95_Bsy_<;-82U_ z8X!D*I8efu!j+cLsyUL7${eMW(+tM~a0~NY@0u`qVG>*UbngLZ-`N zNUE!Y12j>i#OJAofh)G7?qEGQiNugm;X9HezmIEwjX8wEd#v=+2I(sgl3%CRvzXV( z@Xu%Y@DEpZ%8IZ_(x@SuTI1#wJ@99JZ|*s>?Z9CJ=X?s@&}1bk^VnAxJ+n&6Ys$CVY*Zji8jToR9QMITlPzSvl?#i} zq#jvgo7r0q<8r^DYRTneQyr;QXgzpKJQ>iZ&L5iJJ6jfgIAA!(41TGeE86qJQE=n+ zGH$aTPTBq7uRopL6nE&=FpE|BK}(<#^FGck)cnXHzdae<31pU=b#Z{TFCtY zjGK}*E%UVtNCN#=pN8u=QH416*fSP;W}w=`JpChUQ&77gev#QLx+ES2jaVFKq_!vL5k0%u6&>$@3N<$ zqN!AQKj@}ht+*ZTWmsfQ1!(^j6*{UcA61Ff4`=hde{LwvDSc@WOiJuaIWCES+0FI| zroBWMHvl2YgR_jc5z;a5A>Z(HZCmJ+ij?RjU?sX`H^a=ciC|1*2DwNMTJ zWHy!z94B$|a~U{+s>{pzHk?e4->uXK*|+h`!ub4djoNoTbhQ_)|(z*lQ zW4=)~2krR>E7n&TU3f!o9&iF*?<#GTm#Vs6M8`_&1Pv@7CHNr_ti=vvH>puLdUm@# z)`WCEf+V)$--z94vvZNM-eNIw=U>Q(l*4D=V{19G8*GoNL9)H8OFgY5F+Hq?Z`v#L z?L-w*B(jK$*OJ7gmo+WOw;~ntxlGa`hnP`R!3HX>^X;?>w$`)?3juvq-Pm}=wmcR@ z_JGY{R;rY?k6B;uxPLSz|3u}JcN3>aEz9`k(-B%=;t}%33Ux^o`?QZpNv9D(XSo7Y zY1$9dS)3crveT6_a32KB*df4!MXoO2&Z{$*<^6#4rS+#}hewEtVYSO%unAXt?& z_D>XN*FRyok+;*nb5$!#izP5o9XF)ekJ8e+uH|%n@+FPxxRd3Ir@9G%>afl9il1xM z-Z0X9bG2Ew3kWBK<4=c=-o$^&Tz77}LrizbI68mw1GR_Ji&G`i-OiW7K8>fpPGgDu zKGtVFfo?5!k}5n(oJ4Y|A<`BF>|0R14KJ|@+Z)EUiZjeUiQWxA?(R7XP!TpWGrT1; zq;x-K%brR=a@OI*BAT4l&c1Sdxw%~~&VzdkuUKd0G&zxq^-;xJ1VO8r1pu6j^L zNa!s^)A61y;3c4!ERnqyk{&rRXko0V3AM29zTNvu5sjvvp_UU?AP#JJEo=Yym&w}Hx4@7=*fD|n?LCT0U)l5fM(8EGdPRC?5 z6jd>?`Qj#(3U9{W^kF%GV5QSAKpSdLJTYKpIhy6*0E6UrnOw7 zRmQqVIUiGE`;x;NCCmt(fIf+|wH$vz1$Fm*5ug0wI;*VIe`SzQSdvAy z*X`q9CF5JOl+vWj)*3D0ScDJ5SU^Sr+H=PYGV!pU^acR%nux_ zzU$;sF0IB~2+jY~y|S*YaHnZGhyqEdTnc#Q&0!(h8?~vb9Nnm=OxCK*^YI|l{XyBv* zoW0##kV+(u%RJ%lEd^VB-&+~F6%({Fl6A;J1{L>!ZEK&8UQvJsbscUrBljip&dx)O za5B2vYD;Qr2CnE4(Od$k^=o>l$tQX%9_*e6`ATS__f!}1>5xxSM^c%XIlP*6!#gF| z;24X|33oFmd9-;cGNf zB#~=%Uj322)gI^R`iHO;1>NnV&E>?j_+{iqYhPSc5u5>@)~=mL6XW9u@A)YSnq!BhbS7-b)jZ{A&N91NV%%AJ~}Z+h`xN&EgZ zMn6Sb|0YJ%1$-FA{5AxVvS4FK4$z(3{1;2&MN?7#&O3WNVC4sRP+Wj3nKS>9@dA}( zjJ;dXCJmc4u+BE1B&CsuyH4=ljz#M~(4cWkh!5PUM$4mq=*UM|)k6xQTrJ490f&xt zPG9Xj=A$KiC3C}WT5#=!>fqFJOIF~iN>emc1?LHAqu}NY%Tkr9EDo`~6PAfUsxu{9 zxOC$XMp&k8fKH-za+u@U%$hTrxwb~NtySV9v+h6*fO=WKyA4uo7rsmt7LJbpN4SblhEVM!srRA|B& zAH9!mN9(op7pFhAxvzNp^FPq3Rsp&_;GLvPo$3n#*V6ajfK_@k0ME&Xb6kNK>X^9{ zM!2!(Lyh+)xht&ah`-eu@B1|l-#TO_pJdJwT??y{+D5(-Xn0X-#$fnB|Jv``sQnR% zv+rS879nY{L42W1$Hq{-0zjNAW4K@iE(M2P?|3^R5Wg!B%@$VDyx4rO75;^TYonu^ zkG$?dueq>hJ@^6CdUcFUr)}dYEVJa^(3%C86$rf^dWqzF^NiUj<$8zz67~R%KAezO zQf?sD?5e*Jl3mnW=tj!B0e?ID*R=WC3gu#uu1L9j_|uPlQ5}KVu$sCyMEMIr&(X%^ z>tm0;F8l||(lZKLcBW8FL}jHqtaBa*!3Rsxg2z*<0vZ)Nj`QUaZZ!f_Xhb!Pw^O;{ zy^XG8J1$78oX{5daFjzjdmB(=+<+a|V{%perFzQY{Tma^x&)MM|{O2IW9iZ1PajqKy@zt4NXaLl{g73pUGbA-{+;BowSJHTO!G? zx?b_qX*cjB&C(2r<0U#m8GUA~(VWl_$KeEr;)D|62pHWJ4$WQ1%F*cBqM`Hl(K|jY z5aR$)_Xcc?D@taqw{doeL_%ahTq7bjk&Pjbu}beq#yW3uih!#-?K4ZX@4ck0{(a7U zMG__lEe^8Ds6z|LW??B7zPPKo6z}6+^2_$_bYFsHE6)3XcU{4aSIl!caZ5*}Sme^PXD(EJ|wQm``h z+5}Ji)u+!|`#OC4p@V`J*^}O=crqoEy$MI^i3m+d3?}jlP@=N3;Ecq?xpO@ zknfMM4w~&ujH=hUN#E8{gYcP5#o&|A)btnzjs3uuTp!y$SLHvyao#fqWC-h>mbQY3 z6!U&^b>Ds3Sr@6i2)$3o?9&?G(x@5ffGgM90eOQm7m2`0E}K~fnSOnJRuS%$&Wo^L ze8ke9QXMM|$mLbZ5AQlBCg*IguCbcpw)WOu(SBb1(_-HgPmAL zgG2k@goHgJo!weldy`p!|CHg*V{_JI!YZ9AT~X`n##Yk#W}N5R4sz}lN#sHhNAGN` zrn5z3lSQ48egAy#Ahzc@G(pD3cue8~_$dC3goOvKRvmDC5*KPH(DpK~t&!}uL)8tl zs5Df)Txx!d?RghuQB6l7N_q5Fj#7gLRFmHTJA1l8hIKn8GvC-L(NOcVCmDatPI-?h zCH9t--)Mf-xJpSB2aybduS63KtT&MMk3Uw%V`yVecNv_5Z8*m5I1fCXmJ+$DQSNGO zHy|?l$r)D9#CW3DVSt3t0IEnBFXVfWfQ%8%`Wk-B@C&Zbd{405_gaT$yMK0mJzb5b z_BzD}BHvek8C!XqrDu+ar}Gxq-}18j=zq>Z3$(B};4SyOMApo=Bh_c~{_X523-DW3 zM^*g?3i9&uGNh^mD3N}PA`e_~cf@H!<`>yVbhda5Uif$ubntOW`Sa&cjTomBLk!|K?`h`Ae(tk{XlzAy&o2S1)VLz=Ev0)N z?CLW~w+l(A34LYfpDjNo=hD05R();|wr~r)bj50mCgn)9L8&Z<0&i3va^?b<#sZWa zzc0Q`4AsTc+G~Y4u*W%%rwW9wy{>e!x;WI!o;GDxx#zdk6U_B&*}R(q-oU!M$I>Zh zkG*a1K(-t2*GJ($BmXJ`2nEKR%bl8**y z;KqApZ_U?)jX-IeaH~5(eT1Bei@IR17;O3L4Zo0*T_mmhpWsjb^xzH1t)BZYiR&r> z-7BfmXYr1;6uOTBOqA58W@a3G8n>T}7|wY;$LGPKrpH}h{`QnA@jHPKB*wGnk~1;j zDxLd1U8n)k)qXUKhQxcVuTQ>oKc=T04!A_6-FRvGPl9XSjmU~O_5le-r zB@D@KaSFuw5m1HoP1(k<4`n&}yj1t7yzNz&7Fy~qW_92AO+7snmU~}Wjr=5@E##xS zFYPx|Dzt82#GxAKWtpOCDo;<>5aG0owU<};b*-F(n#RZQxwM?qel2xTl+n)4%Z<+; z-$Z@rUXm)n2^z{=q)rgKtb#p`*wK9HS)j^};PUVmyIuaVeatLxkt~ekWOl2OMnYA_ zydM^RV8t?j%9knA3=6zWlTy(7?auLsolstvae)ooRfQC0la;Mq%egi$!Ibf;bZ(RFj4}(`n#)Nl(CK`N zI~Ce|Zw@uVCw;GYem?ynWSec!^z_LKiIyiIT|}F_3W01N6M}k**Q4Q0av!_4Mhr%} zwQ!Wgt_k#$DE46Y789b@r5TwNYCgSAad)k+;7a6Vz;Wn2JrGx-1Oj38k#!DJ+i+|- zj3w^c(qaPtdVYP{_Pl_NfnwyrD+~T<5JBkf$%`e+m31LQ;L!ip@g{3iH(lY@1i?tq zecwPu0r*E$#Bp4YtKOM6s80j#m|aNJwV#%b9L+mUQ{Pi1VJE>|DRzw@mpQxNnd1^Q zSYYyeTRZLJx2(xrdtNTVL5?ap{Ev1HWKFwVix=EKkPmQ-3iJtlNroyfFHXfS^TAXM z6knR8bNu|188U#1$R3OSYP5?x;&3K^HoQ@(3K=QN-KoWS@~yG#O)mmYE-LRV!6B^< znh}0!D{t^zN#^yzag8-c|3&T=xzpCO+RcoP^o@_F^Gc0%TOj-yN!_EuC|awz(okH= zkO*!4IqD$}0wGW<{>{f}4yNx_p%)nn*fUKWxEGZ zwf8&dezg-+KJ;@|CLT7Ihi@$ty0VW)dck>-{j`XWNTB^8m z>N~|Zm48>IvKM$8>5XHaQa?ks6KB7bh=`4U%~>h0;FHX7bgUxHDtPW4QY%CJTlUTs!|CKH-$%D=|+2B}Db!M`k$c>%1Gdf#VO7h|)EhARP zDy_bHPW{#DM)lg(Upj5NVf1tKC)F+Eh#35`lcad|7axSH+9}SO-lo&&>?dqCbjmc> z)*kPL|C>;;cow<-5)^yybEDO1+$gaI&R(|;>+3sn9~Zm+sQ1oI_iZKBpd}IUmc9ve zjic(~ZI#Y`sE22-MwKr0%S;lo?1oNUrvt|M^3TE*Q}^}%%v-;97`j47yq zNdFh=s=eeV8*=)l(@HX*m2Fc;aGY?W`oSQ?{ErtJJUv%`A}d`hIi7U_L083l_7j|; ze{4*-v6fW-I2m^C_I?>W;`JuW{mWuGnV0JIO@qdPB`&_u8>753kRy^^)c;1D4RkOq z-cRo+X{@&W{{8S=D^`p6Lk^8X6Zy7bbGiMavr-qJ^j-%2r@3=@Z9a}U$lBOF>0sYX zASET`gSY0?y*QKa$UfYxB*e1K)e`;2$}W?;p(Zg%{5r%RrC~Ee6kRQX-QJH!g{YQt zC$oIVT-cB(Seg*Lt_!r8$i*_=toh#Ul+9H)_Xg1N<1vupeQGLC-Z8+MwGwAcWss?M zbG&k+;Ibb(Er1DUL0k1j8d-i#>%HHLibNh`?Ag%$_f?jIV80h)= z;9WNSs9xq25jHbYFZJ^b6$msmv&)BzP}j~pYgHfp4`hY*@!J$<_7T8Z!9iEb92tHK zu?tF{EXnB63Oh6_+Q_o>aC&Jq(Pa0Nj(#Kv*HLMCtY(UKTp)ZDJ7GRo3a$K0(LJR& zxi{4{&(5>D%MGI0kUA!=`6iY@%3-!inIy4a>8_>!noh^?ccH?Q$5^9(V822BTGoa( z8QN4I2a_N-e}h80-(HJq8s+`X62MjaI#Zf)w{(=O6xvd_UvaDs%)_PZl9Qj~>B9y9 z0_~Y8_DHgiC$BeXj61Bgcl&Kl(~c*Lw>w_ns9)*8AcI9AVL2^F88md>jdO4M-B9gW2c zp@u9=8cS+1=`3hblS@GqWhY@39sM=!eu;%+w(8PVL!4P^{o$QnK}Qw|d5L_9ENi2Y z=4L^hk?ivqVdoX_VX~~npV9p5^sO!Dt9|7rgY7ty4f<$^@z-9!Yf7C5m8dxv`M^6+HkuAxwE1z8ic7SX z2p_qPVlOyQI&n4%JQU+NP}ReaJ8% zq%ACPPs2f6-Y&t~J6oLo%_Dx{F4k^4$COj+D#Sh)P|hb`$#4hK0=5a7?`<{3@JcVw zYwFSksr3f=oWk40;niw0?yOt!o&`#{FsyFDFWlC3j$Y~f;F{GDPc_uzWJ6f!UI|O0 z9Q^L%q1&02&)c_rWD#PIYFYd3u)su~Y12F9q~vjf0*{Q(>m~e`zy{xH-bZ)E#Uop@ zDkdAa`itVmQY_r-sIP-;s)<6!H^go5B%VL}crg4r$d*5&E8$t$MY!i-CI?;W`v`@PP6;*(fs^3!4(Ro#vR#7TRpGBtpl;?XkCsXps zc{FPb+xYmm?R zB-rT~Gt^3Qlax1R#8qGt#Q4`3uhQMt=#$}%IOTF|1kiM}XKdHs4-PZDUV*H??~54k z!#UemTZ4Y6F4C3N=5eSMVTJ5oJ>h zC+YdxPU5Sse-eq_n6|3Cb(M5Urx)T*Eo+R=jBddvpJAS=!p+ejW{V&gaoWZFg_$X4 z(JI``hC;Ya(JS>IO&@rqz9GiRUWYX7L?>=bm(Ng3PQS|Ux z{`1}2z(b{3d=@>oxwL~kMPavoiw#ODSa~tBCMt`GpVQY{x_80pqo)ydjzAiMp*XNY zFCgH(0ytE5Oq|R~sI0-tqD&(j^3?XVZ3pz=^Om!}DPbDv8`FIg(A6^Xt#zFWD z8E1@24p;PX)hZA1+O{1f_r9<-eYCe z@0)!Hnsko!$w-MC{H%`aZe}s+gKezzs4fw~^%EP?Dzr4?v0N&Kb5;q#@E<5e9}T;J zz=H?f3f_?8ULw_>>C;N^H#US#DoZ*eGjY?NxeF^E3O727XW#q!S%?BTNdgpUtl!R4 zo+pOn{Bmf``1PdDTG5)p7Z1I}wQpa-AXs)5st)M8W^u_+)WfV8Tx_Lr0sdl!uGwr-| z?Zk#NL^8;i9BH?5mcZ=rgfiJ1FQ3;aZx-S-fJ>md%3$~B^n-J$?X5K~bNE zWOagLMH+4wd1P52sDJ-(xtfTd3$pb%lTH-4d83CFinMlf^SMzNj!G}OW1QqimY9Jhv7sPF4BoH<3yLt;3m<|DWU~ zxbn9QX>*Y$ho_ZNW67)^U#U=m^@6S-I2G|Gjilm?^VRhIhRM3_#mVZs#KAqf6&Z6v zxUX4b6FsO%Fu^Sa%3^lw?%{G+t(a~*4Yuv2ex`IdQE<)Ws9miA@*j$Qo@@nHcJy#XDHwA7v$!H?q&rtHuPoID8a^0rfWYx z$hu~ubenf&zG=6CK{p9Cich@r3PGn4Fe2c=ztA!Ggk!4*>gK8CE~xydUYg=B;G=%m zhAur*Qrmrck(-y=_3_6Ed8Em6eC~whY(wPM@i(6MqGUIpDWl_aabp91C%(W#5!5lc z8w3F`M~5z5Mv=x|OJvDq&V6u5Piuwu-?mj20-__w|NO1}TFSQyc6}pcqUqPEJQQ^WWSCW=s zYO$FN8AfQ~r^OZ$3T~>^P%K*QC_kL2R0tUoGO`|$P1IfDEQEn|WZPmY9m(vf zSq!yhu|hBIZkO1Q1|iQjX(Ri!`rUgo%rxdBEMb}|2uc!P!Ac%}!|R9nQ371!h>6@S zQM0^x$pVlClni&YKlBYA#WX<7n_arr~IA)ra-ioJccHYU|N#%*S*hBL*n{~kF)oOH5^Z(zPjmGJQ2+)R^e(UY8o<$k-G-*U3E8pbFKp-?g!3Ti|U*Y}KVf+4ak} zFGEqM4-U7rNKfcDR7T6t*;Yj?HsEhDI;*vD1%{uHR_B0ZiB>$qpie9E5=wwu}u9H~G-pq&89@;smegTUVZat%JM_rWsP8>c-663H`at3g}Kx+EI3 zkBEnIgF6l~A5OU{WW`5K%`h7_-ldxiS7RhK1!rS2w|_Sv*Iyw>Yr}>reL#BetYwsO zft0m+s1uj4Iqg4m6rlZ)$?N9CxEdH8LU^k*)DMe_iMXV4l1Fl(8y(-T#{iuXMe#poKlw&dF_a4e7tCcYDa zUua*4IOQ#jx$(eNVKnfEikWuwM^v8G;3t(36tEZ*(#&hm9G7T1-irY&6csV{s3Ihd zq3VlI6Fy_VTQR!1aJ!y)iM`riqf{r14;2SJv)zROA1QbCunS0KFgpCGuSkadvjwY* zdq8WcfHb2OQ5hZ9lpgsqv_PI)^%FV-Nj6VGx$x|v40!n0M0R(h;;DyXLPTJe-6417 z<2`ej;_S~ayE01u0||xPm3>6}A&HX0ZpOp#oPZOf_Z@o)#6547kd85pG511})JW7j>47QLte-Kcu9;Qoal z5a4>dwHa2B#d^9O9rJ@Bv?2aQaPOSapHprsGH1dn8OlZqMit{w zfsrRK5(Arc_25mZd)iw8U$qKbkhWlw^_2V@qe`g^2cHNA+T4_Wy-MN7rN0KEaw}^hlqdLw<>l)W#3S$o(jc28_fR=7ksZ8WDO)s|Jj7m<(d~pCP5{o5% zx~os>a|lv4e{Fj6+@x!|3_vsUe?MTDn+X#WB{e8np31hW5)^m` z2c}Fn^+bAAL{-_9ll4bDa0aHtenQg0FGoX^ia{s-fN)2_ZVX8Xr;8e}mDK6^TV(jK z(GdV)j%P2``QNj%%sR@Pm0wZC^7=jj5Cb(?o#+;1qkD7a8Yv*KD$F?9>_9n;tACxO zbo=}ZSWGz4>K!F_-;I>h7xy-=wE($@H}~3cRP&qek>xS2i-%1Er+zShl7}1cmy`xx zsWZL$;SYl5*SMk&RQlbgs53kL4_|PG=`b-P$jFm7jeakNjWSd9br$&PT<^H&P|4Kn zK1#G{TfZT1x_mQX>Xt2z$n%ybgJj)!j)z91^+w8rn!RyGIJyHj=Szr0ST?NOTdS4v znW^-C^)a7Cm35=t2U>0SEgb2~`=t>J^h@VYWKRe==0>6+)mYqA)}s{G0xuAW1cplG@6MMqJ&omkjRNAj=0K@#z~_*WHjcq5UX z(~3eaqGVwcDLqo8T287OZ>Ox=WDZuS3lUBPBE=3uCPrt3=e@qN z-bPub2Dc!ue>R0_iZig;?_s4TrYkHK8gWGpYoDsYKZ3_t^B-W)OsKSeQMf>B@^cN# zB#{+AOiQ7vpwdy5N1xX;zXC2iomTG4D6{$QSIujJ74As38yw3fZpsPzc75}`-GPM0 z@v(|AlVP>ziSx%XEbV6>f|5gfhcx>+V#Lx;yg_97tA$6*+u5vTO4MU;hfcR*Bx~2` zXs?9%zY3eC)8}1@#K}7n$@kil-M`?6?9?;2ly=Xs3ru>V=h;ZPI^J-5yLjdVj~4S% zmdu>E3cU)k?`IkxDCJi_)Jrj7{rLac*0fcBQxMF?ZnxJ!1GOoUcA$P+5gZs} zBjW6oFgf@&VDaSGK3Hk@34}EE%W6h-Ihv%B9 z3o&Mmt~G@LryTvSAOsMaLj7JunLxyH$Y4-^p2!Y_q)&xvkN9WiM}gnj{RJz${E~2u zZ5_M*NWCNXgPdhSdrkGu>`K9jtnHUZ;N&Kf9T>x`uqAzH-&MhoyURSAbt?0gWeODP zQ)*xd;aLqljiAqNO`@FivG6{>`9Zz%;qhXb)7ebPGXia}F{B)^QPTJ-llC!P+V{)u|d4OZL%(OcpkuKcSM zUBwJ`A=G*^D8F?Kuglp=-0j4lxZ0?~9+HWR;~q{_LWUB)-o;#6M=J@woezx*9qDlW zVvbx~ob)aP@mHw{3hYDTSs&@Yh{hA0?NLvV>O6i=V4m_qm|&kfCrD7ehY}3-*&!zV z%CI>Q)E5z8dhdEZ2p={EQ3hDf98Wza?BjoeB@yzR6=+gk(3@74zx3?gmBx~FOmU%Q zk2P1Lqm~MNmBH|Xz8%u*T5P%f+potE*IuaCw(~&qJ`QpAvp@6Msr-Jrd?amTu31Y> zSx8?tPQ@)XgMu{@-&x{k-TPrtj>nIpHp{@vsqi)(xftxzFXlR~ywA3OE5v8H;5|Mb z62%r8clr2N_Fs44{CMGJBinO9qpAQrrtft5)fno+j>fR+er#DOsI-f{U&d+Ua5Cu0 z)~)|vk&8*br2P;P$UmIRY9mJ{3HuG!)E#z7@9U!B->?Rp))}?${+xdBsN(b#3OcL3 z&~CJ@hq_RN{v?mKYx~Jpo2p;pBPGQbqEUWV$1{eek4u70`5zN0U8A&(l?*<74FWwP zk_MPZR*bxd%%S>xABU)bxe>@8jvCZZE{9K7tV}+-K?H`@% zSXrf@zNJO>S^TfJF9yH*51Ea*23B8yD3hpqHxvKvpBiVouCDOh_v_sg zEO74V$Z&Qp4`SDD+lmLaVt#njdsA#3DKA?9*~}q2aNrT(79>bj985)n*J(&gAn(*}s;ZVM311bHT46%bH@ z=Gt$4;gV1VqE5jKnS;mm$qA9`khY~49|@K~qheA`c3=$&f$?IpAdl{JYZ;d0-LPjk zPNZhC2DvpT$fzJMb;37lOqYY7$i1T9bF0tnM_I36a#P5On)dneuc10K;DHmt_RrG_T) zZv*xs#~tLaEv@IPtWrF4{L3E)k{d{9mM`q3v%5(37>2NNOtuad-H`+&GKmZ6jyG?= zWUi4GV4ch>jKY1p)J^0bB1(N-><8G^XCtN?%Hs|KM9Z5_mXZfk#S`D9=3I1hRoML9 z#yQl(4f={nn+iL2gudV>`GHMMDtn-Y%-lY;jNfJL_m?3aEh+U$gHS##%DCEf;aHk& z>X#^Zax8U1nr`^G#+fGla@=PnMa>@eGQv-g@Q~dp2j{?Gd8mQDhzQ)p4!#4f`;)Cu zr<9Q$^Uy&&@3Pm``+_6jXP_E2AK?-z!2H-sM;xW8JY=I}!mukIOV&2R5J2~v&mvog zpAuX?5;=*ksF`jI86WEyT#F+Hf*&LmuS<7N2OZ+DoSe5Aje&fjuf)`O4d8ylYPO;9f{3W^;7e4 z=@?y>glL~gRE(nKz)_+6bGLn32M6y=SAB{}sJ@ZF=KE0pDsB+ei{BXZyV-QLs@z_-E$HX6*S4RY@~mD55nPs(A(WR+hAHXy-P8mh zaj~?;1Ux7$AmaEB$|#rJ4xyASB%i4!aDL(M$CMx%)C*Ny33T5A+|r;aJiEOtnJ<3{ zcbqR`${S8IvYL`qch>!oy}{au5CVw8*dzjt)FPCO71qqi zBRNL=a}JhcY^ZZd{Z%~g)F1-$F^v|m?^2J(cs%1HmmKqyHrS~lr8JQ((f*~8ZPaCy%);cDLs><+85RxV|;2}>>I{)l?bq=6?2UZNY8ffAsLyh$SEyCy`B`$jS8o{n_#G6ES|$w~a) zS3{qd>N*u>!th3VmJ_QqBYJ6c(jjXgK|D;F+FXmJa|xam9oFyQ-WpkfILLr3z8fAX zBBl{(+iojYl63@PKo-O**cDn3@=k?_-mm7hwMKTRe3s$I8}udV^2ccFyUzYm%B2+K zizQqtRVs=fM4tBPr%ngp(|@#yYI!ImUroC@I3FU{*M2d>c@fbEpFx(Ky&`mbw(@L& zA8r+}X*B0P!{)sX=kLQ0e6xSA+hRL~OP29D5mFt5lmA8@@jX3>poIWW4bRg+bBb2& zS5g~i$jY?Xt^?$TJy^ajgPHy*USJuWmPxAMlr#I+Y`GA;=WmP8z+%co+Lh#ZbU5tU zH%uFRFjC}Zoi}gj?b49}c8E9qe<04A+OS##TZpYP7Eu{4S!)T+``x8BxRxz-B|q=L z6AuR=k-}E75vngO=@GMSQXx4lCu;Mppdo9wyIrz6OnR;DiF%``T3wm-hAq>-ZD3F6 z?4<`YYh1phhBusAa*z2K2VM&CIR#9jU18l*e#fl|;pPOtcbSB#woDw4NZaXA0$!3Z zmN>Z&EMm;=`S0&N#w}m=JqaHc2zoQ+D?uh?sjbnzjV0u#V$Yr&edJNnI?^8L?aXt< z+MKl7OtbZ`3!^=im+HDMAsb6EdLDnVpMPD!r4eoQuL!g|BbDpWT+P12s28K4bq8Rh z=syn$)5l8GE5#NqMt~S~1dIY+ZL2`|r3I}2v>GPaL@-k*ul(4AqTXT_CZBn5MXAsX>erruDGu)dRGx1MhP&GV6#=~Qfo?)h}+SFj7k6TiH^o?S5tk9jLd>@dEimKN}uWvDt)r>t2@_~WhVO-TE{y$H0pO}!**h38+HfsHEO zFn?6B`ux8V|0T+FRNwK7zg!XZ7~SWY>8=J>zekg$OB|LK-eNfO6M$f^@?{?uD;6FW zVP2Qlb!lLvEA5m}*1OzLHxK_Km(|Bx%M=cy)6eP96?8s0@kBBoCGIxYZ<;9Kcrh|% zN?`ZpWd~fOrepkKDTI{=i>#f#^bQl?&n4g=g8-S*32;l2V z!X5n~N{b~5)O}-XH(O9z^@lDA!6+aF#|xC)a(rI)qt!l?XSRI6JgF6BE9CR%Ll!yn zxa@@`+idkLXkn6iFNYx-wWk4S1vj2+glv!<$UH+1E8-3+_a~|O-|uc-7Q2?F%spyp z#(7D&chQmynqJO0SCxpPf!s=&UZ@(3Ul~2Z2$q|J#PIXKFf2r|;X2?r%Xld7S#By% z_#oYh(>mhEXdc`zO7{^|YBQpY*ptF8;&Ce zIg|h1=7{k^o`*yTphV!@LtPc0vbp_b(NpS`AeBU3QtGI9M3wiZw6Q&flBzHN)7i%m zR?V~r$0c7L#!#U2JRU*tKeFP`nDi_qCyc#V`Vf|K+b4l;E>QjQQw!IDLUwrN!ukHX zT54*U@kLgBia==J-Q2Q!y$O{iwW%PaQ1Z=(tk;MIwaMyYTl%d#_m=L4y{?vgqCS3U zjv3Gct?qFPYtY|_XUQZ}Wr6C)dhMM`MX!Y1)cjgEGdOh5>wYzSRYQ@UnjBAI zEyewTdwZs9ydAB_D5z1iK>Dud{WZJEPYnk6dv1YC9N{AS6==0*FsZHas2W^;1hAN6 zM*U=2IKVH?Z)UbP(K=g5_Ek<>GLp%5nj>@n!1Lu)FIyOs>pF{|{H#b$_-FV0JI9Hx zd^8B*mo;HLM(ZNIOO4v+9(R^HMJjzZHp%o5lS!7UG{?d?uwE2QpKe|Vn>qG znsmR{bkEoCXY)fQ44P*V2mfJDHwZHJ+>coifo9cJG{;$cvvG_{l`-Dek2oM75EF7# zQ5-)Z2g^cT>x&KIu|{DUm4F~Fmb+18G`n|URf*^^_)a%>XsD^H(GCCOHYE9%lgA^g zDdG0c+{53I^kh3T%ZHGR`&q;bD-M2$6xe;g2=R|f3-qvHM#{B{&cAz0yjwO{J5L5 z`{-3DeTilTsqT*dbSA>oThwiM3!YnGa8sF1(bu?s|Gu=iBS%ga_i$BLb<1yuRr>*n z$q`NmA zWVyAGw%7vCY}kr7sdac$H`V{i7m%uaSbu2oW2MWxYO2l=++rGpxF6m%7aBmT{D3Oy zC85h=1B3_MlK)XbZrh4QdTQLXG9*1>sca=Soc}B&HO$f2Rv<7-6?4~%#I%LKM%uvzAoQ#Y9 zE=`Ul~Ztf|mneN|UJ=kjj*!cQ{h>5avS(IKEkJRN;qXCyvaH+VuZwkpnU|z-Z z4NZ=-mFnUyIO!i8;4K-1dVIMFqv?8@zCEevqlNqjx9>mSIrss4 z*yF{mVQUhnb2jv5-MJP(#iZe|u8y)TCYJ#;(Gk@t)VEgsT{0uG;2m0E9*)yzq5CfB z#$y(7h#fN$nY%7_c)rg>TX^TvFES2%!}RlmHO5NVrZ35gf!+l{R561g7JlNt&jBmw zp$%0B+Lt-4w85UhF8peV4Bdy8J3rLlp*w2;TF*0($TL=ikZv_u1S~6#SL1(H$8`KN zD#V*%UAyg3O*|?TKpk!XK7={6nnlm>5!3ncUBK6m51nWStC!X~V~4f-cZX3@8^a6>^teJ-!&K*v^JIRHk9!W>q97D)BB;0973cIQ`LM| z62sR9`g?z_DPN*Zk+UY>&JI$!<0Mj^0_Jl=*Ctn|(hqcp5gr79Gz-|3H&DQP>?en2 z>^AoD{0;$kUUp30rk}3OC<5Fo^A;oY9nfIOHX~WaE_KHX?PXn81Ujr`EEyoU&}PEE|^0&6wH8e_k2 z@}Uy1{xrTutFK11*zL9=p2cCz6JL=66*H~XAsdkkWTA*C7aJxGXo2Ki4EF0Fst~zQ zsw6Z6H}U-_0SrN7-z7C-_nzB2{NRIA56W}n}5LrpEsZ_+stlv zGMSpJ1idD;aI?XC_~`?om%>$bURA#oD4#8R3b6eVvKVj?Io5IMN48F_#quu6CWi}* zO0ENK%zGNd{@M9_ou7r7h@-EOYr3I2VEGCjZ?QmT*PrylfsEeAl9|W?D}FvpWPvN- zTS`TLTwbYle8odi*P)c8#Pz!Pp!WTOS%b854{i(b3bYu9Y24X*Wrvw(?5p)mdA0?eoH9R=+hWq)*CwmEBk0`%Yu~(DcFLn-?fOfjk zbmbtdi2?;0GBMegB$H@T>_X4rC!`8dKDK)b%{1PHTBFq6!N{q$fQxdBcWiALS! zPY>(RUkGZ8RI;I3+T@gv6Zz8H^DRtX`Hs5Ik3AjSM_;M-+^>U0*CXMSbqQO>1`#%W zGB5Gx0o(2p4s-)rFIxYOI%>B<+0FZKt4JCE7tey&`fHEsfji`m!rJvRI1}E>W}eNg zU|y{MK;{a_7YSOsR%gztWP95n+B#Q#Zb>~%=|AAx~9S3Wr5GHN49Wj`xVqELMsK9?F z&zL&&oMQ8iR9dM*LcINL12K_?ZV$_@hAV2Qzavg4r$HRx&`LWjPd7hV+a)Qis-f^+ zdjPdc#!e!|oH-FDuU;M1p$oZ=oVqn%((N-t%hP3|jkl?dIdv->qYtd8rNy508Q2P~ z*r|&PWzJEeVQ5Q1LT6WZ|3d_VP-z^l@;F{7rIMO``O?$C9_5I9|2L$5BdP7YDmu02 zKafg^pVsNjNikXNb}`~bU#EJ72mqAwZql4M-CogKrg<(|=;20_WBF^*_S>oXWv^QQNv#iu$* zYD4v8*1|!1ocVvC)4#g^fhfJp8cL;z7T6tgWkW% z#>Z4hX0-^kope0o5T+dy+PbzKWBV_&w(%a7TP4VYj z2TTpeRKlLIS-LrEVPa+zPv&7O{bNj@RwLCaoN_*6)W3*5hy4e#f%R2Be6tY))?dQE zUbN8bJ;pwyO7DDAct#oc4@}OI>DJy8>3mY0B0jaUR7J4h*Wq)Wn0=w$h$Mvlwe@8= zG5XB$CfOnA3RoDLw~*>}gD%ge7s$PI;yp;m(=uTlZzTwcNS}_)uE$CLSj|g>@lIy+ z={kN1H}Xsah3?0F^aI0G=p2Vr2szk3O0WPOD3O2N_lpfDcFq&^M(?V<2`o3Ewk8h2;vPopxQU{^gK>2>4qqv5 zKf;Ybnpu3_EVPwtUyDm^(olM6q(`0XI>&#Ca9~`##ZNd9kI-4 zXkhg_PdhAjtL_sYcRVMmC)rNKfYzaam`(;q25z+O_5>y66=Z%Rqs^g@r_7?CwC zbE$$14ktd{ml0FPfrlSmZQaj*s}m_D%l?#n@9lgw72t{vWK~A!*|mKPuc1F27HB)v zf9wp7SD{P(gH`MLutaY5@QE95Zi!h>c9MZ{=$0Z6} zOwEJOx_?&9q3!*I*?c;T9;5@;s7%@#)A@D4h z1;I=>juR8~5u!I&c!X84*iwHQhSHjS{{$~)QIAW8Ho#yt=%V;+Lxlp*&5HoE`%hb$ z$%j8wF76SR*i1T0AS}beZqM7=e84I0D}86uZ$*3HdIvmR4v{Ra~hLI&G8LP~CE`g*HyR9>!~BXii`51t|o+JwWak?yPv zmY0)mLtH2}7a%bpFuFHwH zMwsh(NhVWE$(!{W6)GB5yh5Md6v3L{$P5lU)@H5DVTiw?r$%Q@J!Auq=F{?VwkC2h zJ^0;*g9`yrTU*VI5hH(1%3FFRbwsy1yp?we5!-8azc^GJbFvN<^It< zH9=fwFFj9Kj`Gnic05dv&vEtXbeyanKI^7g@umezIv%OgaJHLVc2)qftkl9u5ZQ7z z9j!;`yL^n==BBh&Q=-2CjE=tzlpWpX6rYtQ zE4>w0lrE9an5>El^YMTuKE4LKeq1jh`dUP=e~}w8c>ghDVUlPX+-w}W!T0Xw{^Oq( zr6T?6BHrl%9>quowRP_T(?ZpMLSa?WZF3?xTOw?~wYuYr2mhmzz8Ws(88;S!SdLsyl-TVpm%}%Xjs#13DT)M# zJ#oah*E`XyS+8mBis(dU!w#0|G`kLbRGPZ0Scoe`X7Z_GojH7|0qsqP`ONxR_gBlg zL`oEe8CCisv-W^x66`p)Qg^eZsw@aDGb(iJOTU}oTTJ#R<)DWpr1H@$%fY(Q(-)IE zKTJ=Z>t}i*_pj4 zZO(mqK-?`T0R%2J#&V=~zRdD*$K*Bj*+lG8e~YFj@{oNH=`B*r-81VC=YQ+u6PYI< zZxk_I0m*T~lQ84z4DTpCecwSbCI%qoz;Dkq>O5b(JuH*1ruri*5I-IqcQ$scqiDdy zNgJ0#zP8g~adJR07Mo#NshfAc?K!+sIL5F*NQ;Ux7+Z{wWIPr5fef<5%gE3Q@8g0~ z^f4Y~?Vc7;aD#^2M`Gzy(et`$)&n#&i+UEKS{Mfxm#yGg@XF`Z9T^DZ-)wR6prOS_ zk8TE5I>siI2w5^dX7LD0Tj6A(H^cE_Dv_2zP|pP?gWaF)nv&BnO~`EAQL-5L=2oYN zX-zE_qPX~sSo zN)2a`VgLH4H32!_=JGd?LCr@ufxe43? zYua52*>uyXTg!!q4{>uZfPU4R-1Kp6DnB{dZ0LA}HaW(wUjNmPK8H>Dr@ISJt<9+l z)tn5b7(}xR@0;1?^?IE(p(^ohS7z8)>MyH!brip`sBt3_>uT$}r;wI)pY(U5OqBTN z1^IkPO|C;@kWKj($~M}q2_HUro^od%2l_MD)En8mJzqyQuhVmUz++`XZrG~$Ktby$*6MKRN! z(b^%OOTw`EBhJcl`9M*B54WK?`Hz}<$5)1aRRM7Os{;?k{`3^^R;kinjDkt8jIt9T zC40>~&i+vHdDk*Oh<qn zHvMo)co6W7&RK=e)v$jUT%swL3*0a;wn?QQ_c%%|cV(YQ{dV*{d(Gdrkb7js==0jN z8L`=!Z;5o?e8^^RrCCud2x3$mF$Ke!zCKTSv$AT8$L7qAGjGq8k^j}Gbz3L1VW8U$ zmdMJ49!Hw}>T$+Qpk>*lqcw6k8bkhnz zB2}U1fKb=zZ|sWYq--}1O|pKZ3E)#sm>S)LSmaw&5~ zuU$|0bFb;4)(0JNA!;Xx3Nb0|GwUIDY`J5R)*Esa5sa<$la;ns`ST<^H!S0Td=n0c zev4kfU#wiD*_CFcQw+6OrUvdI^SpFa??jP#Gv%X=n8^fb0VY&ug?-+l?8nhT7Y~m> zpf{G=edEA}#JhVv_u5*?THzvK@tm^qpH{+~v07L3bEGt1BW94@!9YoMVz0(SZ@r$v zloTQTD{mIbFrnxP6a9e`4;?sUpC8a?I+_06_iB6#YwUDd+94R$GH83AYDptK01ik) z+4>2W<;QTOzT!gQLeSnD?lB*yj3j{Rw+hPq%Ki ze4n)&jb}b91C($jH<&6nTExq(IJq3luOPk)RE-8lR~H&gXE=k)@o6^E^EI&^4|^`{ z7pX-_U#|g{N{$3^hL16*gEz&$wQ}_JzS6K2UpyPI%JnoUgv~;Tyq{7+-%_iN&b-J@ zmZp3rOj1Ob(vjPF)RkYwZ6vT9m+~+9qLfvZ2*=q_|6oGOR!A5~{BFd3Qbl){`E~?V zxVENB%bCEumGe~4UL*<3=S9W@M#N)G3k(0){RaXWF5o9ii%96->BS(Y;A^ldcOODx zL!Xg}n14WU__&v!!9$7Zb928bc9;ATNtESTwPa@t0#|(Zxp=>zuh) z7O9t<{dGs&;q%pS>@Nz`_=`$qE1OSSlT z^~rxY&^c#Q9R)L1e~43B_X3g{guwQvkBxi##6cZciuU?#aRUPQ{=qF$O^S_iA|yq*J56 z&Di=aK4m}4X@6x7=kfAas{IZ+6GH9~5|785TO87nPxH=0*%ISy%W~;Q(md{D%W&SZ zD3<8buyC!fLSD+=$@CUXvl)QLtdthw#eH9evYoe{4iHg{Z|&~h4B6uFcYk@I7Y`X9 zU`~7=X*6PD!Mnc>`CM^-D3={LFc9Kz=q9^~PdQ@gm6g58(*;`)WhVaDW9YJ^0xMyd z?GGU_dV3IGS(>8Q(LWMlhHj;~5!y>h*tYbfo7}~B?s~Hn>6G$=;T{i%?a-uKUK6_B zImHu8@k5unlA~{PRL{7odc8^`GOnCeX7~DjiY6@cN!^i~@}}iILizPvQR``#L+tjF zh=Y2QjllqDytsmGw-#9&*L{av+S%zt{29|_8Sv}Er@E39hB+ACzhuzYJ0x9MY=`?% z!H|b;?MrM-St)p;Ol8NWLoK#S?;sT^?p2p!cY!gE^>Zi06yp4g9dE&jEQaLVRUbZM zSC8U+HQZ0venwtj!18%FFso$uJA^g#NpT4E*ZajD#tSuF8=hj1GS`4>Pn(yi-5J~K zbQa+amp@fqVa@tBO?s@*G*1n0Y!h*M>LO$Q`E5xtxQoNp4WJ1_@Y6W+RX5nCWHus_RpUlabtTWl2XOx}sud60a7!`QbgBTLW!#%Rg zlxa;KCEQV$T6FTT#mJx6z<~?vc%;iA^BJTdIBu7HS1z*AhN18xjFfCmVC?o@=d3tH zUrFKO;C1q^2QDN^gNK{G^wnr@AHG8ycQuV%R9!mrbxBzx5JpYAcQZ=&&s{&@_lw34 z;WYHTo^k%tz#1HmxqZqO09#d|<-j8b^9p+Ab6w1I=rrZdtSZE;r#*=?#v9%vZma!W zGt{G`@hQ3YUCBFv71x;G&v!eQs6SnFyJH%aTnkwCv*HCp?*hw(`IQ+4U+ziKW6K^N zBx?R~ATd_6;+5epXkx4(~aiVs5;(Q=|}2%kfhO z{F=+tvgkg1#m<-(Lmg03|IwL1C6B+k)5FL0AVnx|jJnhi$;x31)^mvA#E%{-B(O5H zwj?NUk$fRNKt1I=ogs8dX>)e*{&1F9wftdD)vH(hCrIcQoc<*6YjNG%mU$N25Ah4B zq01$2oCVo%Q{s!ULc~UHeolC#l+VqANVY5k#5G*p$#)nQBdCclFk)3|^BFH=FChAh zI>D@Z{mBN*@$$4H+&k(;@P9SOf1l%5`N5AWGZSeAg-F~Y1?=^uGPG`;xy82d26 zzPIs9V!@^mOx8_#I$L_E$fqaX)FX^$MvI@CWWwX8>vCg1i=nhc;^|-i^rCf7d6a_A9c8vqfyooT*U1XQ%y~?fNvVgG}o|!QRTYeDx%mO zPm)$YR;V}lkUgI1)jRxnyK7G0#OQy1TmTk zoQutD?Dg?*Ev=uql43JuR8>(K=R$K75%8h2o%S6=DR!E&NLPt(TgaS2yk^5hG>P0>*K9q(#M?XWJWs0WVO7kj$Wfw-T!~T$qgIiD%@B&kS@c=-y*_ zE3$v#OXQP=vcpA8254Bm_d^Is4@aoB^A;6&a=&r)i5!KIm1D9{%LitwZ{ADRA*Al! zx3xmwB{a1mX*gmLg!Owo1-cqJ*$>ZWh&&d>~ndcjsIM2K0o5FqbE%~ zRM%Hx_+TA+mK$+BnNptgUv+dL4IcCIFG*ym=|Y2(d)_ZJyplHWv5bx(4Ccx$WSNEhxT zxI1xtyj06Zu2%V?o|VYbgLLUe|MbHln^kyP1YP{?1E!O2N9iq~ za@;$_{qIvho7Go#MzW*-dWmd0)%0C#kjb?}vwm8PRPPuAU5^dPOw6VI#FIMA8KFuK zoX2XbEiElLnyGQvS-q%)bQR2k$~-_kIASBJIiR^Jz;A7|c>&dE#-o#7E_rrzM_jl3 z!gq__{2}1_C4yW3hvZsarDB{T>rCQO6I!~Zx+MB@yAoc~keVB(8my;DkU73k7r);_ zCMqwT2J?-P@*+<4}v?n=hueYkGZ?}zrWz8?j4;GBJ_*8Q5kRnMx0%e zQ)&(Iyjc_6584EsaI@BjuX6zqW(`taN!00dU{(_Zkxz(xY=0u64 z#L`l;V4I8V++)xk)SsJ+5!P%mI3DyA@|YUFs}tJzy7!E6=QUQ{U1WPDW*AKV=`tCywSWatM6Az`xhe7ltZDo+4SeUp{XJ38RU+fagsV6N)nt*Q z3?6S~rH!Wd_y3uK?6Ix2`iXfhyepmKK$QjdSgRl7E-iLq=)*Lk(I)l+`q}cV(piEB z2iZ{%KkCDYAlqN!mwCm1k2E%y?hzb>WA#oqVXpHX{j^-MQWf@msC5Q|4wh+ZnF8&Z z9hU?*2y$7~eUshIA5f2M@YY=R~;YY6YRT8j~Gl+PR+h+@`| z&MB!3H{CfPP%_kaBNV@7J*t82Z1q{M6}h3+<#DP}3bY8x;?5&k5~uoW^8x3!>{x6O)b3V6ZLr0TqUDYGT`mI zt4K!ft|Vpr2WlQ^Tii|t%&bEO>piIOlfjPYIk)3@)dz$(2&(}#BCXNtTdbGf}F1|{jM zxuP?Co4>ob3?6A16`3xLzKyN7H&!lB0w*5L_YTHvBfuwponR_g8SQJrpE4b zvQg^7U1(k6{V^jPagX5b`zVJ7ZP zw3E+4L2RL$p%akb6nZUhkT$Xte2T&b;frlzzK)x)a%h>Z{92b&zNr_iWS4X z4PMK?KZabL;jEG?Go~>EnJs`Ss;m*fWvlj{2CtDQV-f+D^WEyjqhZ0vSHK(nLVrfc z{rQmOKK(E7pbCE05@^Tf1i?J@z%#F6vHX5;Qm=fT$p~sx<%xElbc0dg&xudE;daVsR;0G2(Rj&A{ z!bQBfCG;8`@TJe_&`XnmP5k%Ri=LevvIQ^^pzks0YC_mLA`9*Fjx-7S7WbG!02$YH*fq_ zrFr*-A6^7>oB9x$jZtBQ@Z4eP4QW()2eP51hGlL!lLm+Bj4m^Tv4r)`psCQ2@!xj;vG%YF%Uy12pgoz~5t-jsQmDdZ5a~R7+{pJINENFq44LcAkm=*T5B!UH`OuSt)##*pr1b{=e;}Du zOm7h7Sp7?NgPNX-dz3G{C{J>L#9e zuG-TdHe@;hlDz+&!_l@#c7(~8InN(WI=Ufdz!}ah0}b}m2T6x#2IQ{g^Nj%%X)I*6 zHi@};Tc7y<;9`0If%g3n%l+{U%PI&UuikX|^ad_4+W$AGm0jG3>8B3<3aOK~({?7r zcOY<9*%%s)%zkenThT?8_#cSHa6J+A6;U}l44~KUj4&~Ct>_l7Fact|^5nV!OMv!p zzu@J)eu*~wd6J@&NI5=U2U9J|#!+;nUi%!4DDygSmQ~h7sNuXukOw~|k!!~#B75V=L)m|2< zb+SPA4d2!%h0cAgW*7J!wQ>{SO58J6`_} z^aW55Z6PBYOS4a@d}bpEc>~=X53kYUCsElVYSW=KIM`IcsnX1hWUc2XIQbj&Y2^FVf{wIyZ?D=G99#Yinr;|CImCeh|8UR*jfW|sOb93n%#hprr zlgF4hPd zu{ogeAl2}GU}Zh2eZjDw$sKd(EzS3y4k;POF@z{mAk0UZ+cFU!FPb?>EqO6n7)}Nw z1`CuxR0n^!_x_KhvyN->ec%2FB_sp^>5k<>28sf zP?}LnO7}np`#kse_v{b;;l*ATSKM))$8o%Spk38%ha;N^W|iE$J+;u1;9yM#=?Q*; z$_nMa331!M*m_ua*MA^i#W4IjCVZ1fPpnkEd~P$H`w!3dkKTk%H>8fN;}1m!+F9SY zZ|6u#o|ZY0{{Fg(cUSSKzWUP38Cl=WUL5ILGgks(1b=sxMm=&=w$&J|#Em7%{19Xy z3Vg#Fu?N%f3NfV`h>iY9`L&UrQ`MXQ3^dF{`7Ys)sJ7+Z*+y5F)!~KL@&^B)=dC z`awM#S5>&Fgz6X8p``u3l$QgciY=AgLypU_tOYBmsKV|Cm3XPX3DJ7WTFeF2w$866QAijfq z&Pe2l)__EtG>B>I;7w+s5|Q8gpjf?WJORb2-L^4Pggvw1 zL6NA-DsK?n{CdJaSuPR?h=KuUV-C!6heHy2wZPK;V$M)Kx?h@ncqT$-9Z3^-HC9YO zC&!hnxIaWIld(X}!b1NWl?|^LP%V~5DKD{>ZtdO}_nRPoHq%EVTgL59DxbX2vi1h< z0kl>+8VL*pd}}cjfoGM)&&B*e@?vdkTk1L=OP_;QV36}|l9Ke`_Ndo9-cBWEp^OhT z64ImC!i)oW0s|^~`6Ve{W2$vNUJhiJFR>x~PiT|nC{o+^C$xGQz)jDf_=C~$_R2U1 z94~O=qf@h&Nb&#k`x0zfY4E5KCsrVuss33~TCpzd%z1LWTW>eL)2*#fm~ zN?}Fjr?Ov(z$K|T}r^V;gk2g#>o#!6L0>-99;c!%8;Nq3dl8w-rPY=Gw#2pN~w6=BRoX=IpEMM z=-E>cB$a|_Zsta_;oAfyL1akJhV?|(^|vxEXr=e;{mC(l>B2@gwM4r66Qt)-dU za-HIIQ%hx1jqM@*(!^qF%{PxSF9#Pc(Vv7r(IOnwmxb-BUIW5D#JO%!yI*NQ5X;>T zn9=d*erf=~#mz=V4;^c2xd_kWtyMzQWZXyQ!gUk^U_vfR+uA{C?U>IHfUVrN=NRM zrKNhvFy~5gdf;MJYGr~HsWJl-HD7Rx+J{kVBE#2$GIA6j5O<{^Uv%+Ca`~3%**muQl4;-O1{&KM1XcXlE4>K99StJ{mkga()T_)^bsA zg?ktS8nJ$&zhn$N4P01Sn!IJ`r3W_hLgj#5^8sgeOw?hS8(6_}pwMl!K8`2n9kZYO zT1g0u+x?UCY}&DGH|x#OuS5&>MB4+p5kbG^0K!4A1vQYH*Ad?w(!;{BtfEjiiSZz&EnbWl#`I3CzJ^qRQ(F%b$L8bb_?f|3o z?+!*nL`P`SSE5X&sTZ(7jet7Ao58B|34I0AdAbRjYv)l(@zSfMxeQb+ZNld1rqh>j zDb~HF;z6b~VpW&vsD)vI4XX@2!tzx?Pv#R4VeHUF{>P8wm4r0Qo(z+_r(bj3=lGb_ z%CnthLw845KeVe}(a&TlF)TaX1nSwr>~(_Kb_huEM%MmZV)d#&J|y8vNq*5bD8E=} z>;C3SJAfsy7N{8TkGD4)7Jqn9wr58{aecA$>SHzbhfx_wyjf=QCk_0uAIL92ywr$5 z`mXHHe9zQxkkW)`>~3p?ASsWSCv<|CC~tbr93D#(p!q(7Ek=oZ~AlO6B578mW*m?|UH&&`q(qAjD@oy`gP4t>2#3f8{kF3O%MZ&Tug zDrFq<-tA^JB1XTbsE~QDM%qoGk{^pVmVQ(5m`3=>HRSBBVV3>H(Djmq9jTIXr(L3g z3I6|zjK6+n#wWSHtEl>erS9)R0X*m`UKFn3~;V@t0cVAJf_q%y?(T)LNY6 zOw4#~JYVFHFIRL%$&y5*NAAQE?R5m_=I_h1_lMs1)0gW!eR1pHL70lSO3;l*z_gKb z7eOHu4O(Rlm3KGV&nnP|U+k218Y;+Hx- z@1QuDjP6)5S$0$6C z@QcP&o>y;UHQz8J+@M{&$FR8Z7ntlb)#lNP#3t6JX#ZO3Kuh49MGKDQ@>qLf|Ik1|x*DvlJ7-Kx#j zY2oP}43-yr)5*e-SNR6j=|QTGjSnRLh5gi#xW~m~rp2wbq;LS8%1)fJ(PJ#Eea$ks zL9bvMwxTo0c`AEGA-Xd_QyRJ}=YwbcPyuo{nNG*+5?1$=GBtftH@K`LVNgF#>AMp_ zY@+ssR73-pOAG=^#Ry}<%`9fAPP4_=ngY`D+i=n%8~JNjcWjqXhaVBk>$?lJ4);HB zHKk%v83Ou|yE5T+nhz&2-(S$ahnmN1X@y~g2u4RRGnhJ9OVho z@d#vi#se#bk>(_ks;UHpQ%>cC1W8m-JOI@E0Bn%FfMn*estTG%M+BwMgm@o{qDFTi z%+RFQZ5P!K%$jdydtOypNfR;f(0YYsSjOxgoo@HE%xhO2K^Yp6O4+>oli()aBg-Fb z{8h5d&KHGznHsO66CC0o7aJuus$-->PsIO4dE;ihs7drVDc`j&v z#~1N4OTBICPZV-co>C52+`L0*defR)NiB+0vs);dM=tqm)9KEV;=-Dj73^TXE8UB$ z`HZ^H_=(~zU*d_5L4A#fk9Qx-XTPepi88R_t;BfgLSB=&W)xZ<50blW^A4wd?lXez zw%cOd%25}4Ez~k0d#3*l+qGyQ%aoAE<>n2%dF};o)rH5xxZj?s+K0SAqMvaBMS%Iw zu*Zub4j4}X)`>T}GI;qfDp!8fZqcz0V4ihc^+d-L#NxJK;D4b7m{P}=gJYPCUxVT? zs`jrgX!jypR>xB98gM^Re{NBpJo^4U?cLnzq5^zuzCcFzFF1!A=BXC_J@b^^h2t$` z)?>L$Z;E_&~mk=>z6R zQIch1Z|AC{L=SpjttU7hWUOoqa|sr&R|`#n==Z=^CdavvT@F%SBVccOGhqUX{6oMv z^{h_lfb1j6zbYC53Oud){Q0Be!y8L$*86y@ZIi8rKBd$2RBs7!t`2P+4Q_|{_4xFB zL|jKAf!4kysg8_>U+-7#E0(`f!ZWZh5xjx#l|i$HB2tW%`lH97luK zY~dQg(<$nU+ua7(Wmr{6c#)SUymqvtmSO{IKG|GPlf#_8aPn$?&CY&$DbEG+3_0V# zNIRQJ;2jpciAz8Hm^;N(_;Wb#I+`9B@{@l}4MTj0(-eaz^(#kabXp}I5+lF$R1X4& z747DA8oqYqJQU|3l3xB@Gp|S*AW-S(>RnFd?4vGuhR$p`EWw*I<>dMxy|LB>5%%hn zW7+gC=j#q4FBe~W%IT6pGt=+=bm2>fVq?$aw*jaCdh)vDke9`oC=w@fu_!4rtLU6F zPv7vOCa;*fQIS>+uGnJ;vk~XvdsRnclh;w&dqhsSFK@a^yji7?iJ7k-q3UokS!s<0 zZwJc>-}nWS-|jtXI^66h=VuA{Uc0pKDG~8=p)7QzPo5$_u;qHY!3Uy0`$b@t7Evy1 z8a17Kp0!-pR%-%U5qw84V;>RGnCW4;F!3+RBE8n{896{1uQHQzhZWP+hX~6#WO@_C zgp&tg8qMZB1Pmw+R6IEyawF$b>oAFuhdjqmO-&?AaKbXXXe-Bpi zLs`4LihEk5*oyZ)t#J>@^VY*kl3@&AIsNnb7&AE)Y@eqA=0;d}!=7c~(J;@w!NK%o zG!rE3u@tc~_s7SVOV!#~r^V4dweL*XB4WIN_oHS>Qi_Y;MqP{PtwZzd$CVyuM6LWF zF~~!V3>+8HT*{7lSD(t&EcMVnHg)WC_Ql%Gi{`F62araR`?9w5FdJB?>tfy=Znd}@ zP^bA*-2|Fx{YWJiJu%T{Og`RfZNG~Ox$|_w#5N#`)xrQ0M%9nLrO3IOutS>Wk}qw;A8d#HPHayEIW`X-CvONSfI3&8b-)y1UP6 zQDcLhyS*yj|9CAi6Z3Us8)@MF@~!tZqTlIwoE->1g&AwDJixj^HRwO-6HPSK;HEpk z4Zk?k8V^DkwHfAPch-xmyQk!H(;0}oEMt22#=nt)a{!NN^1&@dFs3BhWaYj7yT~w4 zAoJ7L?RbL{>|v?!K{jUWU1^b-HQ3`W<|;tuP(aWBpy-rj66Yz6H9rur|9e;JRSA^! zuAjdaT}RhqRSwe@H^~5tdeuO^#l*YIdE*{$+wrF6$R$blUv+E|?Dv5t%zzeP$HXc) zI<6FXC4nA2kvsoaxoy`O(gdW7g1wb_Tt{dU7}L2)QIiGFcK-~o(QdD~PGiVBi!p@- z(6D1J0H2~}LYiDKIv$Xl(0YaB`~ zN*D=hQPlO??knD!bd{n@oqqT~>P$?G4J_A~9I!eMZ-sH^Ga zY~;nBF6F=7CB+upVACvbjzN}SLQm-qLlx^Z_M62rCfkJ_3d#^92CUkRk)b~z)`eD? zDtY6@K+i+o4RgFI`OM-^eUmHE`6I-uQ|{0cY` zGYNtgfYPeGfYd5Mi*vI~BAdDfa71mKF+EF>KC5U6O=?M(!GbDqZu_OV$C_Rw>`ELW z-Zmnrb+-rS$3={HC!Q@Qok^0lO)8RNLY(fJV0Rxpt57+Rm}fixYvfs(<%Jq}&;WpcN>rZt6*eR(M)!&*&TNDb6zKpm$K&|dg?@%7 zuk?$$IgACU$9Y$k;g;^|pMTdaGEdX`-`tofwt&5-Y)`+K@yIon0zI;_b|6JzYMq06 z*U$|jQACt{z3Y4D2Y3C7@IfWUh`qGA!^yT`tuUR+@uiBNd9>0ZBa;*L?Er&%F$~uE zfjWRF?8(}>xgMtNFm|!Zb!#R&rf+lPdcVXCtB3ijIjhJZ4f27H0QI!2bg+BGET42w z+p>Mq4PZ|fIGk);aJt4euW?>afpOXmzIPRv#C6AW7;>khJM!3K{;}A^-DbU9()SF( z@2Ri%PHe4}bB{Fa0;%-+(cz^cqz$@5@(ev)o+|J|(kFy1Xr(2x+u-tdja_9^rzMl_ zv_v==#V$I5JkKpZC;2Z{5oGBatTUZ$qL}wG=hUth-r*&vk6kV9=}g(hpTX(!z6-Vs zBkucPS4;!jU}Q8O!9~TuL2`3oA!<>+N_hh}DU2!qyfEoqVC;MlF}qRS*@JG_H~@Ph zx+bxZ#@M{ABj?G(mk9?U%^@HS+`yqVUXD82?(pR=IMLxE;n6=ebF&OZS>g)#Yh!3Qv~ z$J1+uCcq&sk>{d-zS7-a2+#k`a_Yr5bemqc5b4-Gk9i}+-WVEF&SNch4(y1DLf<;D zH?`T5ktNMtvf{`SGrhG%;iglNdA-jPPqZ)4U)$t+klYaI>5yp2bMSf7qD64-jO=!< z^Z6bF+owVl1A{)XL##eV$_bX~*=i*q@E&=3%ez>2M!R)#_W^4q_dFCXyY(}hMMTpt z{PnYHC!lcz9evuN@ecAIh??Q?f1s4=1%+Pue38_%Ck2}|Kw>ew;(}u1uEHBrPU+j! z$X{x)2Sn(4$RNUl{?Gp!N$-Rg+?uGhov8A`qq+gUz?_Ih9CuGORkXUFDN54)&(AKu zm=_}K@suDE?ZC!Nl|Ta2aDvpa9dJ!&Q#@4_*MORTJ!fW_u6Ikqn`t&X?%#~UEEZ!U z>gLA&1Hl@-%-p|p+%qTaA>8oAxjhHNWQtXfeC=#eRoUs2-(>r{v5imoKly`h@Z$r6}DLu#rM<-?H9gY1`&0p2Dh;82i?bMw7Ejk)0L1}y}Z~+Q_*#Zv6jn1Vi!-Ff;OMf6c>u&jnJ|F$@@C{9E znq7KMGCT<^Sv9<-Bd?*Wz>_P+YBsz_fQ{9L6UYcSxcivembHEOL2?w)HmG=G<59ZO zP|F!>QiEpvu=&`fpYm?4tdt#?g=fCt(DlH&lkWe~xl5)E0o?hABgpTx9;RAEvLY_z zsOn$$F>Y+!&;FO3ZX}db z!Pxdppv~pXy2qrdF=+9Fk%b4i;)t(jq#Zn1)cR!fJ6m7>4n6pg@@_@m34?b4t=J89 zL9O|(5>FTmDtH-149I`*xYvVyN*8aRX~8+XleTi&M6Fmm=}a{+)68qyiceoFIvaOU3vVrK~ zq?2<8i_J1sQY6Mh@s0!&u42{VWHs`L@?+w0J5IL+bWUKB<7{!`E;dTS zCm#-Xn;3lt>ROdKt2DoYzS(;y@*85s7af9a27KzCKL7LBAK8$;kJ7Wi3LRA0H+7YK z7#_N(>MwmqSB{pCUYM3uBP7m8G9*b1udP@j4;m$P8KqS`p==-M2h~NRn}9^+0!#QO zI_j#BVFoa@B+bCF)6$TFst)gq+5~m|SIiWObJftrdOG)_ra0Q^vIeyn`5oqIN%?di z9=D8H26ML5_c02bdBWk+&1QZ&44Pz`8l+LL?|3N}jpV9j;wuCEh%!4az96ex6ZCqO z@=u!scTq|m2OWC&?n2ojkkI?Ya%oM*J`?r152+=NRR~H!ss2X=Hj5f$Y*p0a8GYYy z3*ho11MhoT>TJUk!6GBfuMDe;;z*cjkVLYdl)x==hKvl#DD_XuGL*MP7nO=G`N6G1 z_qBRM);9gMTU@_$iPyd1)su~hP5bMwYYh`@r1m`RAa&1M&x3_qVtQgnt&#|CEb=S#e1kb0|Qap36?lesWdlX<{*rJ_cb2=aq@ zc9@N$2w#p!cehWbYO1o}bfsUuSR>dlw|weDRgm!fD)Q5WXPqkvoxHC0h6_vJ(P|?H za?>nBkLrtv=%0U6$Y+~L!`9+45*2R#JEj(THF2yVtWr}oopnRCevrNP_o;CS52)HEE;swyHP) zbhdw7p+P(Heau384DUIG{N{^8FTr{e!siMEp+P&WR;KS4vqc=wsRc`m*8eS;ib@qw;J#^B^@CA^S3zEsrP ze!|Jmcslhu%ua0y&sw;iDo!P_$8YdH^A3#8n#^6<HtbW;9Z!`G_r@Ya=pp;;U=2r7DUd9Z=k7%ekrNWSldhO$4dgy-6lC_#QWE($UM!dsYdY*GcKF3W=Y8t2)6D-svBsBw^;gry zTV6eXA2ijvroSWVYTiU`HR2@G zfI8!phAE>z6B)vt(1RG&u_P70s?IK~vsyEVY+7Fb0 zuN#t|w$*fZ<+PQEmB=exZlXXDuC+5opkVbm~|T2$nwkqE_>#zY$NTZtIGE zvP5spSY4&};g+9K+|X}6!rI*JW9uv<8A38q2?NYabU~^NHzmF zV6SC~K!zT68jnPv2D$vC7E()d8g_7A!_W>99ePXaLLPyj7D@89M zBeXEaN&?cW&)@Kk${+C(P0>aJ*T7Y4i*oE9IPjO?XY{F}Jp0uhqZ#f_-? zQb7(NxMf2_$GuQ?DD+twh*kUF2JcU0}<)c z1Jqj35?Px7OaE;D)51bE>dlAUZXnmMLpj{y$Oi3?Tp^=B*a$achQOpkRr0-}F=G_} zc%(1ZD}zoss>Yx8GW$qmaS5_WkxDHwGcr$Uk*(4<@iBah&8m&#P^s|X39Mzh`N<70 zkw;(YzwX`mX==ISzSv(UDAKMxCAY^WrbGQX3QbA6yj>4bA2L0&(GUOySdrJ#n28M0 zB;v&T?DG*xo&L6sK;YQdp+(#8pPNeKjF^@EsFaoun>Ekx1U7t|?V3jJnwqU7)Dx)} zp;n@U{r}=?3@^)1b`?L%ERE);hH=f9o12@aC&m$!4e08uYL?l&;9>lDz+Y^S(!)Hf zT!p1~H99@fqE%mY?a{#<%V(^-JAhUvuxuLfnhBCP{gLyQtZ|H>SkQK9vgkwAj{>pa z%TP1H6P*M(6-Gaq%Rx`hmN#0}T!L*xGR$X0OxUuYD0v;biGLrm6XK?dzk-^i~5??^pvI8x5C-j%4-V%N4GLn{@87>O@j$UkPST_;Jbd; z(&gMVxb57Gw2q=+2&`Od za@8a4f9+=RoW*{ZG=e7)UDwjm*+@w^<#o!O$&_qUPVaMc=#bu236P8NWWZJ?i_2OZ zkxbgPG7j7R-Px7(B4Igk)p@=Iu!sBZt~|W6udc=Ay`QMcp-(_jjOV zcDaAb>vMBW?r35%+L%rCHpWiOzGcA?wf-g4J}hL0%o(+<$GVRDTQQ8BCpeOSQ+|vBvCv@a;>`3v( z!-PPw%WVY~PhE#c^)LpHepmt`unRF%eD(IZ!n3FT$zrd|lYZ(%ZoS~d`vU-F^Jo&& zon7KpE7|&Yt-IA1SWS5UDEodfGf>z$3O&Co|E$Fw%^7B&<5z6YlgBij z%tw{`Cwedpay!81<;8Dx6=(Kzh;Secd7d1uNXGT8JcWxWq;Cg1`y`Q=tsfx!&20Ym z1iE^mxdO<1YG&W{+ah27t+<^|ODL3FCTHjMcvF+b1yO;(MFilkSA2uJkCs@0@-)UAw1%h zFL_q%jS`KAG%pUg4W3XB+VI9Yn;1JZw=my%m-mk$NX-?^a3CC`eY&ro_MpxtJ?r{|sGjf9OflK(HTKfV89ZcN9$jMs|K^ z$a8=j&(U8U>06rYB*pb8y7F{+pJ(N7w-?Wt2Mzom{whpyG1*aPse2I8omj>v=8XLszi|l{D4!>-Tn}axq!oLyE zW=Bb#p{v(=*-SrcKdqum14T4?xkFu%kZ*5xN52knB!8KG#>bx}rSOnK^r&FOpX`mk z7NZm)GWmL3$CeMluMs9V{@=!^{0bw9B;zpWxn)(pb<-(B8=0)0lup3j}}vh?DwH(L^!?jW9Pg0gHZca zxb5WoZ>JDjnzOUqS-7 zEk=gzi5UuQUaC48v7(B85U^q2&0VlF_8#>896{`YN9E#ah1{cmBu3d+||phV-XL zTp1*>S=)XSbSeVs|CT8a6dKgbOxRx%fAnj$2ESxx-#D2-I|&2-cM0K> z6#RwLM|-b+D)er*MS4_M3pEOih`7$8Qe>E3nXf4fJ;zJpRSM`AR64np7Z@w5|5cE? zp-s^9or$*BwwiNsQ)n_9oC z#&*Usx#hgod-L;okU(d&5;@zlYb9F9H<+KxxG@P3t;rCqnbzi=7|Gbu7Q;{Q5n1~1 zC^x+2?*(xrP}$~je2r9ByZ!=i7Vel$<}j45n)EGPsgA{p`g#cn$<=oKjbEx=$tpcL zIhCG7GN>B&?CFBfF(>OG07tV$k9?r|s1o{qvyL@gQdpt^GQ#&OC5)5Fk1tyywfUtu zV_L~Owma7kElFWMZ@z2@WP1pPYtRfF=%dNo%Tf-QpZ2fWFe^jf1k~&CO=!vNtXWPs zXuyd-8EW*?NH3FJvZm*szx?47N#Q^yxkQ+#t(86UMb0TU{o>+gwQwCR3d-H3d%paz zNb_ntv#BX@UGCe727eC&Nb=5)@ALcI*#`c5O*Js$86zwD0r4j;rk{f8z$Zd%KSCtF zn6Uh06|#_-{5rEaDbc(^O%R*tm`W*`2Ghx{|wLnl#LeKR^;XOS-WJp9Hu#LZ|zOPURM9C(`j1&HvdmxBb}RcsD$ zoqjFR98^9gW}02|TimR>51oWmK&1qtsQ0n2ZCIiF>1YqE-6G(9HXKI_|6Kn@&S7)n zCVqkl$TrmmM-($#^L+rp>y`JX+AW+j);fm;J5b#btl7VuG}Y>C&m>%|B{gYyjS0=B z#k6V${`B=RQ}9kc%L`c>XB^^)Z3azdRtrNt(|97+>Ia922AcUZGw34w-JPlFCrLLP zl6v@yTl`1<1G$)@OqjhmYrfpG_1Wg4`cyohL?LdG(f}s^RMZ~vb(g`+6}PasjKj^&0WSz5sA*Ek&JZX)4|lDfLFutYS2>B7If13wT2dSRu6e}p zG1O7G>@WMgf$s5^y6t3)#q$wX3O_jrye`QrK%8DJ=^1bD+a-|yyeHqUd*2|UglEbV zBs*CejXtp{v^l231VV^J!wL2rnqh6`jWX7Eo{jTqL_tTG2@t>k;DwHi&Q}JpvL!N{ z!*t2xM(&o6bWq+z;vu`5LyPq-@;xrU4)xz;yF{zq zlON86tjjp2s0SFlIXtQkg*@lu#^ZXvfEWBfp~YLgQaqQicpf?S^Zmry(3tcvME0Iscb&7jv-JONO)sD68IzUa;_i_J$GCiGFE9m+qcwa)={Z@+hZIjO9I5Oen1= zEM`a{ey}Ng0+k}0D?c;jj_Jw_suK?hTL~cm%MzN`QCBmM#?o`u_R)MgwAcul_9NXJ z)Qv4a9~YZ9Lp!%7hHlDB5wWIkOfHSfpMSEh3fup)f4thMv-ET(%F;T5@i*r^N0QfW zld*RAcO_#!^38`bT14Wk(q&k=HY)?qswXhsLKm(bCf6S2j{AG7OLd21Qn3^?yK`d7 zSFiU+*fVCngS(TBPMxXJCS=XtIm4>!?;9)mg%Lu>p9LP0JybyYQ7=26UgoW)q%{(> zymmtj7hjt;Ov;pHHhT9ERQuRl_AcLNxFaW>L^I)eI>L*oTVzt~$xN%m3lBc&-0KEv z30&K1Ot(0R^qr=N$q1GruTAdAe>3HG|AD4zmzI)7>5XL5^-iXq1`g%iUjlL|(7Q9M zR)x)Dgoz|qzAqmfhPY19mmHQ;Ls9%YSC^$#5bbYbY4YExvNxM+NoeQgTRgjpKXo7m z^&_Qa_N`jNt6ikrt|kK?@&<^EDnyoq=6T)~FJNHyNqZwN44H-jMj}UaFeZHw^*qjY zu3>gY2w;XL)A9(T-!)7e^&Gy}-93$Dky41v`a;>%<6^e1IewX@dH-Jq(9s=nt?RHm zbgShC^0U#fS0StnDgFSTNagdP?;-@Q@*il;D+I~|9!dt^nkM^VRt|>Nf&6FprTrIw z#(+zr4YhAGka3LOR)5@luqEm9j~IM@ZU6wB4_dI&AzdYo;G8eX3LEQH5kG<6zmJUe zP`EcktqNE9&fxffKi2yo#GJ~`3KX(x3h;*kkI-Re9Wvjnt67jj;}kF+M>MSm0*VFQ zDLE*tvX1a75g27|RF4;KqCJvs(~~pDqi*eM#cc9n?850HJN%kaNs8hp5d&^72rkF>5zJ7(W>X07H0&*gny-dgy22+jc~KiH>4>~8$y=1 zcdiXAc{2`yVty@<71|B-mKdOlzGy z4JZ98#i+K~Z2V8a_sIwMtb!NMoVk(RZTY(juHp`8+C}(?^wF_TD2Hrk_##de#s?mVq$ltp*?$HN-9}ne zS$3avAr9Jq{To!_{lC#XZor+gq_HfK`_RS(R)<~fSL;M}+Bq@hpUKh^z(%ioc8cNV z$FvJ)Hfhu@RxBpRz(S?HJEn4hF7C7vws!|nQ>-4H)pi6Pb4rxbW&EL(8N#GCJU%8z zbH_?3KZZo-^z4+v6^~hhz5G|{X=j!A(g6|wzx{yoW6|rfMFfGNb#ybZUvoQQJI74u z7s_0YY}MVV4}h6UYA^@BW{C9kiD>sTpdl~s2{T_6!+h6yq#Cfn-t?#k_iFesuhXsZ z@e8j6qsa4}i`2RjEF4o9Mp6HflX)Z=CwsEyb=Py)-QRa(l4B`4MN2 z@t8Vd$<)_g?(+b)`0x_HV){NAoP8+3k5IAe1iKgJClQiWsCWaVfZTHMDpS*&0W^Er zF{%>S8UlHplu*c3V!J+UrBx9dT;g;U*Q46M6vyP29eFyNcl;QwZvO*6{=D@xa(-V& zY8Bk%)Go&VG-esVQ)rYDt*SJ+v;?8F?EN~L6|vlo%Xi(dq&^l~GPF*A9FeWIKb6#3b!4au_kD z1o&4)o&`nx0GQw%?p#_$8l!(Ar2rg>!W8y3CT{&l2cnQ1b8iS3a}=Nk!p+umRNXw! zsRc9xHUZ%ca6^-;hU;iT7URfy!!_^RX|K5kd@)JDpMUwY7;A^AJ|Y|sT0DDt4Fm?1 zlwi#<psmj1b%0vT`cgXAT^+N0p?)VDzl|%9V7He$RD8&i+?s z1J^Xbl%` z)c&OSK$PHX9BwANu2bJw&Bfs-!j!K=2eLRVc`~+v+e^cmy^(*rR6dATe|q5@dHxP?0Vm;l;kxBa!frOH8^ywa9UlB2$XsE@%^a(6fQUT*q_|tqk8wIQ znRdEM4~uQZ5$0XY3M-6T9UN|#P;aM476|kQ;+vfz{)^BWB6prTDRXV49f7<(Q zbq39VL%K)MQXbK+z0!bVUaw}Qzh2b^yZemwBXDXCf=#f*2ed6eRWitwK|FUf-|k{D z6frcK7G%k!fZ2ZG?hSyQe{7+jAK1T!Ygo+y1O^U9^@*G(4)_SjVCBaJ+Z{L0Ev|8#AcE0;q`{4%^T1MU}dVI8CKDLU6 z%_0x65!7=M`XUvIC85>-S3C?3_JBWgyFOZMY3`NXB!~@Q z*t6`=_a`Xku))^5%4B<(7b`|5w2xuXD025^fNrO@+7_g%+0RT%w9~|Y_uhvpot?m^ z62~iol|zcAwFx7ybWt~9X6Zc*KQj$E46EzDfke-~tYcu`NFYB^**?l@XB&x*Lk)2G zjuC2_2Q&PX^Z1|SKf4=B#xJANrCDD2YXiNe^#?1(y!ZWRgiG@;%A4!ovJ{Ix=82-Q z&r4@V!#udu5N!CN4~$$E@HI#4@T|)0LYPbj4q9BR7WulD%QkQ2_SJ{#^P6mlKeI$} z`ro`TR`wxgSrAlL=BK>KS9Tz1OJ@UZ;PCF+%9I$r?-{Cpr>w3xVly*Il9&1fp8dWVXtq{*R+fe&>D9M>@D}3Ja>9+^ zO=!1QL36axL@Ihx8OIy>7FiPDWX5HmD&8Hwy0;6bdcz*$#+g51p#LHB4|we73%!Gzw-F{?RkcH2sRS(lfih!vwOh3u939y|>GrA?r-}&v z2L%M4t64SQ7#-l(a&odpeBhdDac8Nk_~3fqRWTz+W|E@QH94*@pB0=Q8D$4m}a>q_4n$p76d=y7Z2M?T5Rv z77=pYi50nV;U~GL{lYv1oSd{;>zXMI4~f_wJx4y)p*8fMxPQH?CiF$lQ#N^S26^i_ z@#g=rbk=cAevjK9f&&pjQo06`BHgXR2B*HYelU z?K8G`CdmvlXhUbBm}Do?Y5aCmPpwG=6`Wq;5X=4}th9!D0H6PBvNg4aZBtr>6 zd|yTqH|%(M=1Panr)8Zefmu{t>%}N5TRjC0EQHuu)iv*Q3vw8BoYmt)ah?2jlk@b_ zwFcYifKJqEP0p2+%*u!|74hfA8f zJ%L!B{urD6>egSkO&Z_6I`3{KfY^SX?Vfz_es~w67)6tu=Y4mp?_+nv^u4_A@E9H7 z(9ZX~Dl90g?egxbsIqe`G&U?mAkO)$q~?lFGejTfFI&xCEP?wBewr_(0-@aR3K!Gw zO7lc4_S>38?+6izIWGRCa z^b>a9zSZCt#TH|{nld{VbzxoMdhFJAUxfBQO8OJa57Gk#X?ZGjwk4aq?sN+6E$hfm z%G9BFH|;lamF)%2e3QI0gFAEZ{)ZAHz7-7tUEj>>K29*FV20?G8tKZ9d$0(d6#Y|LHlQXIUc8 zH+Pp^FyXe?IKu*ZAt`Z?$%dtU2Mds?6u9_P+408vOha$yh5u#NSmg{rC5XU5#(_b< z3G%O-jPLE-o0=&6$w$Da-7f*7U~rFkrt#JtCE&j$uX(xGn%JvM>_{ka^) zVv>vFW6mK`p7UAGcnQMh?Rc1Ahp~*wn~W1`u;fl`?r1fMv3?eN4HWnjI9gCd$MlKJ zDMg9ePhts~5qu*OendkrGOA3OwF}eNojkM|fzsSps4X~V8@&7VaU&zdJ*7ydnSNfc zEykJ!lG~V&7hFw!ZM;zPsf04ru!B#7NeE1y zVnvK`8>hWj7wUB7_IayB z!*5$a!%%fQ7yh|99nQunkmG#kX}H2(TMj<{JUgv7Ta*Y<3DY z2Rh*)xP;!H{0th`k?X-LkT@T-b>PCGQNY9TLY2~y`O55K)J5+y5$HT1e6TqvZm)H76 zf0BOqXeQV9jomH*dDZK`DH~`!TSRVkB}!j4J_Zq_)=46VA2}LQY?=A2EU69At3{BplMUcbGPl5Q>QMZj=ATe=|JThK^DpMK98 zUP~=6b7T(bz7$7W@q&|WqMRrj5aoSDWN#ucOvCwjDRPnssZ4%ynbP*y&6slQk7muZ z<-$v1wLz->Dzxu+Zen9?-jTc~myeoWS)Q5_vkbELQ%Qy`hrxs!qkqkQEdKbVkCxyH z7D}TU;gtvmF}lep3%+(`9y7My=EcrWBUH+U-V5ZE!zEAUTd7^>l?1-uYFjV4SP-{H zB!I^D=)WE8^Sla=z4KmA{UWtnh-a(fHp7@CjK#*{eo`rzzCV%5U%@R%8V}!7?w$r@ zS`cX@=VL0_6C(qNVxm(rhL=~m>j(#W{ZjsiglBxr&EA$?7MH=dH0lkVT2MZG`Ws?6 zR@lZ*I0$48g5|3nQHE;J5Nv?qc>xuUf6Xk(vVT^LiwBnoF+U3Vl2{BrT=-wkvkM8C zIZTeLW$jUiV|iJ8VLEgP4~MRmtYk4+QnvrLfv_*oPfy)Z^~)mkn7T2v!r)oUjM0tE zsYYF5lM*_8B8|aB|EC147*fJ5Jn|IGcUn7}*x(;ifb#w|rkiW2A)dl3yxIM&HI76$ zoQIcRYW-{lJ@@s;Q|=5K%kScz32lNDDU&@X)*rA;S>h}yuQh7-V=3n;`JrOtjD(UQ z#qV!pebJ+M!;w&UqOxD7re&v{a#chNPKbi=R&a#;1h5d`O+PwUOkY$n&dAql3K8~Z ziX`euAka`af1*=o5%88YA)s6;8}^ip`yxnd2-%bS=epH_a) zOr63LXZF+E#POAC5`TCeJ=YU{pAi;<1uq+kY~_1HD$w7p>c7Aw$x>S;+Q5hiu3N#Ipa$W+Qi5lz;4 zNgd)-i(?rDOm-k`0n<~j1jXbEU=z#c0*eM`apA;(^f|{4KW*wRF6B+2MFf%S8vi?% zRO8Nsh;O@@VX&uMF&kK_kH_W*)#>kOH=1$cVAhdR>`5hFWP|J*KvJw?97)SRY*z$ zbuq_(f)fLl`TW(@*aT?h@0n0Y zSwzKG4k;Rbrvr9vC1l`clOF$?H!Aw~y3BI@t`|{>EtoVQ)4HkJa(tTLIM4f7bq#I3 z_CjV@s>Dgo#94Ip&Q)#Q-*Qc3iX@0XFh-9yS?<2)lua`bp3~x;SUkU-d01k3yMA!~yQt;2cl}R9pFuEj;VR zzg+>zo8JiGXx}=usYkdm#Sm(bvV6~#>3nfl?`=%eNxYoS$T}{(Sk~ewC;>FT}kIPP_*ZuKXRH9D`IpzMvXy@Nw zrNLx;gC>%=IBOK6*e7#49)j4lG22zP@!8@~Y}sY8s|QvA`|B@tDZ)yo8kQ2`argU0 za;U3SZIZ+ig?-^BhWlLKQG3i@Nu=JFdAvBII`xbjrS|}?O!8@J(E(3fRtp5#W7Rr6 zr9`D~!{Xo8Gi0;nD@k321z*P_4dcGj;#H=A&TIk5S*tE^8?DNdKRBW!o*C`b`X9)o zQtmnuDSGl0ugGbeE;|u(;3{|hExX-HSRS&)QhBiQ9UO}*=b zJ(Kw?$Dk9QW$T9rdtLP|*5d-(n75$~owS}nYAPp>^ch|GFP!HiPo@j8{emwi07Z_i zrJ9LTOGIo!*Z^QWGu3CVzayz6UdbC5uGfBeVG?|)x)SX@1K(#=fl~Am2;| z_Mi=PTq$Xv6J*@_q$ve$V9LF?-zpu%1F~6a6@06u*OBM@TMwL7qNh-qTk)Axq$8}M z;~6|I!G9bO+eT%-BHzFQ4gJR{v0BdnfvKj&9BmF1z&}$FvvH5#d;>@`^Zb}L8Hg{Am(yEH}-lQEjA_XApD~;gDuW-s89a1_@u%rjDubj}?)U$x8M>6tQ zr(5I8q?LdY?-z+t1xTa5xvw!gelaY2|AAzx-{r$`o6}=;ZEU7Re3F2W-NPd9eAsn! z?vHTpND)RJ&0^qmurLMU0}MUfFhxG)&&~vMf`9*b-SV*5k@jN6-|G|@^Uq?mJ<{A_ z_u*e^{m}e>pe3!q4ph5xYM`%RKHjM{@PP2ZpQtQDYMb^>8<#>QVT}FL={4kJg~7V1 zsiS7{z2ZaZH??JC^SE*64=I-5Q~jU?WO|fR)@d+$2J>f`t{M5P-75CzN{%*$g(lz+ z2aK+@BGj6|n*w``Ne{yPkwxK#P7 zwxJpG>hy(6`EEl^%8r_i-V83|{NGYG*kMn}u!OB}wVMv{Ffi+CwAe3hC z<=}zb2kXExFL(o5Q6>1UE9btvY_--t4SRBpuIQ`<5G(}HL`Y~TtJ(;Xq}Wy_GBxqO zSq>r7EcW5y(mO$&>VFRrLrbGd3QlEKF+cFuf5YAb8^bkU5qq#hX`Ue@?Vjj8ckkuW zE?NRr)$8>ziX>mZaAy49hO=j5&$v`|u2sW`k9|)W(*Wso{7na%64fK7 zoG{(S=$yA}68ul2x@T0XG0&3(^=?~NqIaicbmpCuJBk76B$fbV+Tq@FCasYi%mjqr=>*zm-}$xLVAgqzReeaO(p@y@rTLcE&@HIk>V6#? zyMRk!_tTRzWB$N(Cs$`Jp|&iJG+A?~h5-@JsbJ0rZ}!Xjl%qohBD1!?85Jrsoltoy zwsx-HSfl@eEXtgEkeEyopH{7nx+Ah0#lg;M6^72&jr_8$ul@Wf)DLXcJP$UsJuz!i z89LmpFNSEH@NIYQIiIy|tkk_4_^lF&3#udot{ulZ0~i=4uPtpqxfY@aQI5x^KikkS zK3PG)C)bsPHou86;Xew#TM`6Fa=_(Qn5&2>Nb9{b?7IM{aD5r?eCtCkjg82sIUI3` zNnf{g6HoRK$j*o~wx^3}@1uGn1GPYhNXz7(sc`Vn#m-kKq^iBJ{HhI%S z1W^shZ;wEaHeb!8fAarXv?^m$l$?YTN{ytN*|CH$+}dBF*cymGy|Z+smT+Uz-E+Nh zaFU8{QA~OYjjf~&#(Ng^FeUc7ej}Tm?y8t2?TjMceWqMOEBFq3^_9mIk+o6!q5jS+ zU{W@%7?Z$mSTG^+cJAmsm~s1&(5;w8y;3J3%B$^?@s8S9J~TgwOH%^3ktHS^nh0Q= z1A}Fyi$oY|1iF;~HCC1+{~9A`%wU6TwlL5L9kio$10QR`=x0`|xGO=5{UhNfMDr5c?3Ct%{O`SBpFv4Ts$|6=UL)7TG~ zcvqmLof0xXA&VE5FBPGV#uE(BKpk4cT`_qa62~gSHu{J^VdYrz14VZ>-7?oYg#Qf|*gZv7#;G654a$rCwSiy{5R58e#6+=-2|n=1CSrvmBYaUw_W0-4q} zr`8m0-VzsD9a}OJNd^xN+vQEwVRxjE+l=(F_syg)u5U!yeM+UdcHB)WwsheYD7!5F z(BQnAyr$F9yZ>+B_F(j;v@=`9E_TwnK=CW9?2lH<)#?6AZo4uYQ;Dnd@U6(6swt7#{V=>m_HV}qp@bnVJl`39}!YB?_^5KD* zMt9Z^E^y2W&b9eP=s`THq%?AwjK85C^lz0Vuj$%$wVydN*OE9nPCP_b20sHWyyjvA zEmQ!}O~m>4(JuW5T3cSx6gx>aN$pg?HOtmD8kmFVSo>%Yfr#VKT}RG)jno#c7DRH3 zpWPMOQ#M)YE;(xyM0B^%w;C|mR=fEth!;e20z2&ZPAjURFj_2LE|Ddd(cG&K9&3uk z@yy&+uvx^1luP*Kwm!;iPoPOU3;%@I4yw(^6-t8%YlZ*fndcP)3Z13%baJDSBAM8I z6?i5OdRS2%Ew3O=r+c}`v}jPs^G_FJg{T;ngd>AZL9GB^Ml3x8XY=H>^<#6vM&j7W z`i3W)QggOToep&Bpj^x)UNu4&J^alx5|_ptFq9i*+gWtBamS9z{o8R1+;gp3{$enh zciYTE1fqRdn&n9Mkiqva8Tev3cJ&uiuJ2t!vEw-&MEP^(5j>sAD$=Vg5Ob(t&Rz0eD_R~uT1^-JJH9H{Fh>9V#oAw$h_<& z&{XHVlK>NHF<|}1ct70^DCGJ`6=)5@jQi&!fgHlmpQ;k35q}Ub@mCmM26IV6uXdY1 z3fC94@!crsi*7kQ&io%5%B&6+9Z zYJNijHEn6PG(HG&Z}E}Tc!idK{?@2YjLH3=@2XPCErmZjW14S=Gc4{lU;S9MUhP!% zRdJ3viHu9v{L4*07F!O;b2*$Z*p@qQV|NXBUYuc@`1XskTr|J-@_SY?>Q7oqe6>Y#o526`^-j>v4U&vhJ?v_ph zixFrQ!kZ~)T3e>h0kD+c^-2_K3--NH?~8#AGH5FNxqMW695IlaW`p_}HZPl2+LC$)?(0J*%LTQ-A2Qhf=qInMvNq|H;Eg-qzY(L&H@fNt zes$Xg#v`(>bF1A6_$d}cI+&b0z>F&uXxr1rt6&|Q9ueyHr~Ja;;In0iz#e~L<^}<>vOB>UwV6-683>nhTRXU7APG%hU!`Wur}o?RM_j zKI7NS*bvab{-d>->9AJ|8zb~u%o-lV{K8wwC)LtZOHzdsjjC;;^P}dt%5}cT!(?0Q z$8g5{zgefl@3=xq|IXu?QSq zm5IWgBP2*;>3$`dNm?k(61ypYF1A0{1K%!N7qjgHMtNwpW%<#;+l_76G^znzOXV=@lUwG*D?PYcH1>&_lHM4 zz<59)LFbN|(sO?&rTL3o zga2xKl1>5;qh=!aCc~

    6VQw{<`3qK*XxmbLfq$Vx4v55KG-rn#W|d$P8u+7XE9Y zCp(qkW2CHvNT>TrHP2)WvnfP{AeU7^ebm*9TIC1Jy!MTyjm@e)#ITU6@FYVRZ!R9Q z_@m9{fh;u5!)v=q1qo~xQMaw8U!GUTRq>5V@~fJI*zzJk}_BYSg0b!6}3`wUjK zyl1%1XO?$Yf++L_on&9w5_E>hbQ8|A#?(PA(5=3mH5H5ijShZUR7knaRjR0luw?^LqVk6( z3Hi-cL1_7jWMoi>mhgq)ua75)CI1F5Yw+PjcGs5)y}_!pMuw@70tZa?3qKm>7_x$q z2Jer5?2-yu;wT+N*LnYrGDsa4hiYA#;P8~;%g04L%5M9(-UzXEu7hi#P&L!@DlZLA z9_8f=P#KK?KlC{;k!)TDk zT0NS_{hYygL^qaOwLurR_h}aFjLur$uXrENA#U>5Qy(hS3KVMb!}u3Lk*?@Ye$Sy{WW@D zV2Ra)O!y2yIy0M8uYSL$0@x*yt!ha?$X5D=bpDwebAAx z3~e2$6dLM>>MSbtJ%--Su30IPH2zq`4gVJ~L+-m9_iLd;S`-xDUI?9&{5f_sto@0A zC~8AxoZ#cHlM=FLjBf6Klc&geAbxp5(G5Sw2Ey`{GfKj{l7kc%Qi?$!=}+C~Z!P=1 z#%axI0sEpJjdg2Mlr^r}e*9>!i(e5dT7g_+uo$S>xMaYu?i}T@h~qJFAOL!u73>a>NU$rG5E8oBV{QDI1DNUh#SpA5A+b5li|uUth0kB z9&)3}dk#TEqqJ)Dmz+$G-EMGZJLNefRDIGLncg~2r1lKvSlN7i+&$HVr~f!+Quqeb zQranf2ca(ZD46^hD)S8>S+2@hdH>)*D@*F!6r=^?=H(-b-o?B3^(~GjzWM`J^h&U| zHZbE?{wYkR?M?WztcS6Ha+xUn-Y#{6#br+6M+)!HF!%GViH_}x*mobM6%OOYFrT&3 zfA0@?QLfW|gi7RlDY%fZ+9N|gw*K3bINbWHgzD~Me%U6qn`ZLI346hfFH2$IM0zax zYo&1*ZF|4&7TZCq3@75V1dQ{a!686A;iA{FoFBTj{2ZxEunwq zcdcr74jl6@hm=27G?|kMD5nMHyL#7x9cwYU9nD?!J(;?!lW(?oalFQG^kKo49~@hx zSG-x=9lnSy+S`3CcayoubA$&*3FRU?Ci%sGh|2R8-7nv38M70HQ;t$W0s^EQ>NZC4 zC9vq{HvZ?uzVLaB&9kpwry*R)WrQXtaH=FCMrp=(48wWaq6^uQjr@T z>ly#kZSFm99If>LEa|Db}*||XWg$nK1Sf}NIis?I>Gftz1$y%{#%JR$6p3K-y zn1l^JtG;$40d_Okpg4V(9lN2D$4ht%u*4oI+Dtlg4ieiYQpen04Qp*$I*a1}d~$$#G6i0(DCV~l%)hAae{B7lDU!WQq__JTbifZoCc-%`6dK` zuDS>=G+9&^)0oZE^bt8a``e~TH(me2vZQTV|6XOShxw`LrwUO_N=&j`hdCNmMI4** zF*F4BFZt@P*k~`Hvi+47T*K8D(FBLAfx0_-23t5lcAc$#5= zsF+6J=h+hB`Eu@~a(+2IdRh$i)ghd%&duK$fxsj+{Gw&g5H;79Rvd6#%D36_w&O;> z!IZ&Yvm}q~?5O%0d_GDH4y_G_`%73`yW$AP5^G1qfh5}=wZ1Zsk*D$9^O?St%Sm** ztd_`jw9`%J4b2XO(B9*Ae20siGH{O{@KNQ*1PGw3cxZhn{)r~XO7E*bqDuosAtx_U;p^|>+gty6CX!Re9r zZgYxNnw-AI=k4VWj-t@ax#;iaG&G-251W1O1ytw;g$_TK0)(tG7mfg7^th$72YnPat4$!Fl1 zbh+gN-2iB^IeYaW}bD;Jo^FWHtx`;!ct~Lb_o+wD~^MISF=;JKmCYVl84P zA1}`BG@h*4yrMGkZS2|1*7B*usTm++k~?sp5jyH^&7i+t^*^?fb$|L-hYE*yhIZvp zwVr<~V+<74kK^7Q6dJf9A!v-r@wV#7EXJe!`S~zFzb*K=YHZveShQHG2Y8)YXt?8X z;t0dW_za7)vKecbcR;;LS@*}#r1q`S`&kKonL&6EAv=!yPv4C4$BC2I)svL_31aj+ zErBh#Aa^A*@o^D<`@NV*8mGU9?xA`uA+S-JN2feKIOl<@r7ZS&!rU;j2bMya@Io0-}bvPLM?HthJjVr|^(^}-!lqU+X z1p)jjmtuEhJmZc22G%6&LzT(J0+uo*4)23TpMAp)F3b?3 zr2lKTR}S;VxU~6;QgnQYhMOEUQ8K3T7tU<{wqSiEr_UmP=k8bQl3hNZlA^Om23LDo zUkkG$+P(0=SS(ig-vw!OS{j{In8qI7^--&5R3P!@wM=CfZ*YijB~cdzD0%M3<4YT< z?biEyZiJ!_i^nQoeR_&tj?3r>yy zA4oX3%xD5x>Gv|mG&d|xIC*?@Wh4UukLRsY?a=ksKD^Vsq-gtPRmn>*S|jj>Bc`^x z0OvYnFPDW_F7opIQ)NN$IG);eek~_XtH-!=d9jnwb~zP`>*2owQ{rcx+@FX1SbQwq zKI4;Dsgp6EE3FS57ne5HU%Q``Ra<{yuE5cPmNahij%|&_vSRLx;66nvwA-OG6OE-^ z@q2`{QP! zWch0_%vC7s8NT}t-;Y}$^KtdVx+H7xBa8SC;uC)@aLcPvA73@hyjsB8S(V0u*H+_p zrz|^-oGY7bM@o~=d^pz0I@;^Cn^cH~?;pBKY9b+N7AJ%KlplMlW3CuVUb7CleYDhl z)$#YRRJwOL)Y;FKzSx^7VaMR3;xgy6A(A5-XQKFK;&@aahO>LoA**cJWc!g)6?&C+ zkogH2vPEFIM;QIvq*w$c?4Xi6?SV&r;aW|-F_!z3uTMHae>2!?bCCr7;^P)YhK~_+ zDUWNDbYqqB%#~*3?=JPXXFUwmQq4?U6$Lv)-w>hA>2L#5=nrr%G!kwvE#;(S%1j%|=y(gk@aI!1PLcqHo&8 z=Xa4}hl2j_a->oWy|5k?L0RDK)}7{$uGZ(z8#w0rM8z05#kyLPam>%!#Y`{aD{$^< z^&KT7`1TJe8O&^_qq__1rd?#7(o$i1)fEC}G;isPRaRTF(_=Gy z0m%`Tok7@5!X4dep2rpRvw1TpUY8=#n#^q{zs|TBt@ZV2whr`P)b;W6K&Zq9MW-Kf z?etAcXbmY7yIe$$7sx76UsZTamjp{iM8)X6;*n9VgSKltQ@rvoC|}jVv+mJob7TZE z*twQ1)&(UL2pDCY&ji)${U~Hy(H!d$529NWy>HMo%}#~&&*^ZYR|w?MC_zU+05Yj^ z0v17Z;mQiGO!zW~^4Zq*^1IAm!?g|7+!4!h4 zazNcTe=|y^B{1Q6-}e?jrzA677Rx=Lb@==0F-25wqaLM6)nt4x>gOD$5G7fKhm?5F z<3(Y(FnG4qYBa0v;{TZGG|C=UliYf?uz0&1@WC$k+aIfx2a*?GUTR7E?SAV(%OeyQ z$S?(VlytH&3xVD5bua~J5dt=;Y9~DH2oa9d-t_9J_q6~Ro)Res)05hbyQv|CJUH06 zHr4buH*@>zjX}M!dsTsw(kU}Q4|IB%8izf#e^_XUZ)`iAC3+ASd1&oUZf~Wiko?gYA&K+u{~p#8)cZ$ z6oCgf2-@rTfvoD2LzR6yw#D z_c0`@VV5gLy?2Kw>!HNg_6A8`%Z3H5=w(hl4Z0gqdx(w(A;7xhWueBR3T#a03uOS^ z$ZGwu79HvD#zv?BEPYwT6|;-Layd|Oa{D=19Du$2+9q%>6D>zD`z_A5@u5NQTfQHc z(g_wXZKbdeHlz&jVODc7bUhAl)l#Z$*A5Ae2769RdL8g#I{eusMAcc3d|*v!NtM1*QR2-H_9P5X2Q7Ar*xb_mm(DLR4RIwIbwjd96j;%w5xG_8rn=y?5idd zysO9k!B=IejbD%{Qt|gV0FO(NOP?XWzirOb41Nhuy#3P{c);Vb<_~9l?p_Rh%p;nJ zhYO$Nj?q_zX|%k!G6JkZuQy*lNwZFQ$@@rx_1DW>WV=Wo)>TiSfB^tHbfo5!L=EHHKcn$|8% zB9FtB!WYj!G29$`Fm&NIt1!OaAfH!|iRlH*HKnAdSjgAm1rdZq`iH zsHRpvOjxC2KYU(nK?kAoHm3>+8@WliLj{V zly!w_SW0wg|1-%D%avg>dw9OX3U=Kq>jcz?;evjhjGLDIn?^GkAJhU;1*N}3vLA9w z0F2WwSjt!5&R-w-c*i!isV1N1KTwYc?y*v9Q(()Hkaxs5_Oz|c@)rru<~J1gR_Oc( z->uD3p4DCw$#_Xv^r7K6#vumweaQZ_#8rOiKaf%JiqHJ(SVQ-?AWIdlsgyT8fxoj` zQx5R!ZN)@sQWbg}lZ%Jg4AyM}<`F#EL#mndciar|!Gsn3;PpinsT+v#gt}^aiIs8K zOWA;Y?j-|NVJ6_HyQv9@y*-gf6RYNOSL8-ra#!(GW9MZ&y;OqTzcZB>Z9%)`)!tzM z7Hytrbl^X{rrJxe2z6z7&rcOS-Iw|X>LP@wkp{3FvgmwO z9wTs8DYN^Ah#>qfO!bW;jQ_`{FW%bwkueX`NPFuEV^fmKIU3jb7+h=bZ&B*oCkDB7 z5K9c_7D8<;-XI8!bg%oRjw!GAmw>O3esp?GukeT2Gk?C+)vCK#aVR$}sO!RI?@lAJ zp}R*G()b#Bal(KGu)W$Q!ag=@Gr%o$*9oA;5Pt}gTA3WpgHdt83LObnt{!dJ=*G8E z`_*mYnL!)0TWycXZ%S1PM^vJ;#3;^#9fW4;Hs|3@J(VBgrw{4I5np6sqQB;W!X4&1~j8i45;`Mn!0glZXm#b&vc6i~enV8;=zC?BK= zu$6lKy$K5+aNBpv9C#hR~a0Pm#=7SdiU|0fGvn&6i-gWwh?cY4W-<>a< zqEwJ};n42yK1VV{FN1Hm64zv!W7}OOJ1GH2-#HOYeYUw<@oi`sJ$?dA=MGE2Y7QH$uuN7>}Sq; zJCEZ(nelvi^B-unbOtD2_<2;h<`btTgV}uFyI*M%n1VJ*0T@&34dH?|igViFaU+U+ zi_Jx~*kD{v0eWfP{c{G@nni{YPMe&c^2bNbn>Va8mR_(cT1 zC@`wdpHnC-B+2*&;~CfUO)5TMoJXmFA!s$wN79c`_avSGEgf%@H2tR&^qMU{3J^Na&8wlP5^{Jdd#!!iW8TBy=^~#v}|&oPU4BJ$?TEKhVjs z!rsXqj1^+ApK1n{dj_PMV0co#p6tPEZa2PbPLp3GVm2rkI-?vWx%icJ$@Ye-|NRI0 z{fP@0V5@!KD9@*wQJWbV3{QmX^(SN`Yr09f1g$V|5SLod>i{IB@^395$e?5EQX6^g z+9f3Nqc4tDjCpf|9%w0HfI{2uq)tNP`&9%N2lBfhBb1V=*I&;*1V%r#PWNiX6ij?DT zwt(X;As-8o(ov4 zjZ15TPUyaTP2%BQg`D37Uy8FPZp_sAr>7NWr0{~%fSeXDK1_%=Co^xP-WH1;Kx`Wc z1V;Odf5dmX;MjX!3cT^vqHz>C;#UP(=`05oK{w3L_CHYW^81-p+r|d79|>zqo?+2@ zAYe3b^}18*0T%fwgP$kWJe;;Jy(;a5*XPW^sFR^ATUywvWY8&MnPUqi)%!hlR~Ft2~4L zYJZ)o(e*6^9Kh8lvP&Bl+(2ZrpZIj`Ec8nN?~nc9?W%`gXj%jwvd^EzGC|_odTxC# znJ$_VfoBCwILc@?r=h(3YmR0#J<4s!QYxQ*Dg}pQ^g($VDbrAEYpECclwF0ud4ml@ zejc@nyO!;0+g%XDnAo{o#t6dw^Z4`pJVfZ1JJD}*E<|EI0N&7#(@z+WyW7*I@<%St zRftKKIIcc@VV9*8hiE2M)5t)8>+Dr(v^n;qsdjZG1gLJ zb|tprr$7RNgAzi-5^u?>Ipi-8nxJ%d6S(vi^`>6VFZe0RH+tH)`O+Lrh+x~UO6IjU z1=*qa+rg9XKA3k3EB%UJ`xocJhX<^0&CGzEYPinb5$rSbZ-p)RUXUs<72%=FS{DNH zVP=8A^^%#G&!tz|u9SDpJ3ZOG1&pA#9dhv-x52K-(2DYFh-M5tQ$= z>}0rHPDbh1zkao1+9Vg#_shW}&>L7lFJCtzjCCmL%OS<)whu z!IKKDD34(XVbW+GlwI^TsL5X9(J%F%?4%uqWsx7iHy5^+mE9vFHx%=+Tv z8suYj@-#1DNU(_}Bg%VxpNotya?eUb{qK8~)%5KSZugqx{0UygiIkM-O|DQ^YOoFb ze4jzPnHpZd*YwJJHmvnv9#_q`f#eYO4N# z{X{d-LLVja{`b;;jPA$!#vb8#(`1(>_nytqs#YiX%bq01v(@4_pO)k|5;QniVXK(m zc&=3~Bay&*@*;t5VuW%}Nfa~X%dx({0)%+~ z-z_CDE8c7k<#F-Ti*n@i%Ac8rlnj5KO~zPn&=-E$VL$3|0g-=Q65H|r!~;0K+MWzm zGE*=`Vliws6(xuNiT&Bf>y({`MvAZD|6DJl@sWPpVxT&d6r> zAa21Qa_wQpocz3?3O4s%bxCJclgf8pj{AyH@%2~eC2D>4M0RX7UJ)uB_xFOwG)K|T zSlnkHa#2MT`aSqPj`U?|2xgHi1SKn@F;{~ zH{w~n7)c{1Eq1x(HMu=wYbt!qlZS7$_HQS2DDa=GTVCxJ z(64hSEZjEcM!L(nZ>nlS)_mcvuqG0=_e@@{_2&%K*V!J%^&qAGO-Oqo( zeuiiyiIbMyS$y?+)KA0z{6&&1naq%k2R2XczzJWomTW^Lt9)`!j>c{*Ip_~Ic4{K> z%_$wY7?dE2aW`Cf#b@=DUSIUScrU0)46bDM_fhKa-exVa+!#Y}4y{XPVglzfsRGMM z7T=FUTyk#%Z41x{ero(5Zy(dk4taAh7L@iA@T(%L*KUhNjY3%7z@z8Gd^gs08lnm5 zYWtG?xEfsDvKqj(I~jgb3atF$yFG>I0yI#+yxhPH3ZWbQkQ?af=t(e}4qcWqaK(>1 zoc^*E?I%a`EQ9VWvFL5evR2hh2~;91`EEC-wZ(OiLYEP%Uu@WFgKFMb+`VT0zd7)yE=j{+BsUpBcOy)_~5&u!Jiiy4I1K>kBh-WXYwTaHING1pbq? zkf{I})DE&_#U6E^^oH+b&xwF<^pE4xwFr^eWW>^McA@`UE(Wtwc-B+gkg#ErM?@bbieUywOcPsPVjW*uyJuM_(o;s zE1hv>cq+hyz+78I55Dj$2wC)@la}e`L^-_BaV?P@2VGtJ&6dhfL-e$|1yV2IpDPu& zgkvJ51X|>NnvuW5V$uq@+zaYCGW@6)*M6L&kSFv0rb@=)lzyf0P`)}|`nfvIC-Pei zs@9`bdTn#8h+#;IYnWUmH6eSYuIKb(2Dh~Z`FtWbKacA)-|8Sy{t1Y+4@W=Aq+!?z zrsz9_a3fkVdZ(F1VG~}M+G*c^J?ku}2m!pNq7v~J=T}9_hX&CVlYXxchDo>#`7PGz z-Fs(ZE$rwwx3ozV_@TIE0}+lAEm1t5{vS{89Szs}MtzSEEkX#1-bIZBA$kj=6TSB` zM2lX>5FvD6ysO9$)kf4eMj+P9$bHCuut{Ey(a4OJ$%sL{nR%2Ontg&qR{HyLKqlD*x5yLzqZaylU)s{u?{>mYHhg_GP z1Z5aupx4jLemcTAPVX-F^RqlSPJ#Xa#@`VzQ>CYDtPpxN>6IW2Cw@F%DyQ}6MU`|R zlYA$fC7JvE2%YR+HLRwuU~eOY^4t6e*uIrd;F%sfouEBSsf+E>RL+@Pi(|1tjB@P( zZ3i31L+km!H*y2A)th|olQJK|ec6dN66F!r_dLwL=Ct!^_PF%_oC02!BqQ`}`xAp@ zvjTA_$qDCZ8@lPS4qqxd-<6C1mD)s=6U}@+7aR&^%Z707>os)*Wm=j<%+zv-ZGHvl zMUlBGo^qr5%$Jg=lRR_$R@=xP?L<$|!BxSJk!BsIg)Pw@*Wt^{inaca>7PdijoS`j zb9d9qNfyE*)^NguEuG)Wh5TL{N7Pq<*I#TmS+wuaaQV>8E+Nh2x7+S-W`Vfqot{;W+cn1SCi~u%C5D;SlwN928d)|b5`%<*54Ds&u0uG?w&P>z0oC~p(N7wl zol((jjfJl`ob2@7OgP;}kq}s3Xui>vuhe~1?&))|1wVe5z8EsC;O(^mp#g#ZZsFy!-t0%5wQHuuaL*sFfa5~g`m4{(lb%uwFSvKoa`ilkFU^7O$y5Ha0eeB} zIMseDt^Q--@#kNEjtx-(Nj)?brb?dJf>PB{T=()YHg^->Kj5g^A2&aDys$FGLiX$) zt32BjOw{MsvkcX-?lwKA_;Ry_(x-Ej6Yu>de@;@R(m(JzJSiBX0)#P9Z1V09-^kRzx9raP0DEb_zaw}T8U(HO%pN( z15R!or*A5>ImVOySqm*m9Ey-k{Y!)!G~maExwVoAS8 ztoHGVi1WX``Rh~cM-}9((wfU}20Lc`j*5$j;)&MW{D#xWnvzA=N2p}2gsnZv#(vVZ zs%ut1fmq4M+DbWpCZ;L2JM*vGp@U0vC6_e%L<=<|l$NR>Cg`B?GK!v*8@ZK)Bi!CfP5tlY{+!?DUw{kue6kmO5}JhQp}E`4ZFg)^^30&C;Vpy0s?^O3DQzsUUg4py-%96p z%#N=fQr3=9!J;ETWM7v0zU89zW({@n{td?$&AvV3__c&k&+-`lDmqmH(B)7>EH(^b zIIo3{jd2?@&WMu_RNP4sF;<(Be5?_A<-^f)F1heSmDX0x>A3h3f<($Bpb+)ohh!G3 z5Wb%vzSzIJFn5$oDx?h8-jCLp`%l zkQ7SYck z5}is2pDoawb+jb8UFcGSAf^^CjWF8LI7Rw^t>@}M*JG7?y(U^^v{&?D=%G2oY-gRm zr`Nx{gUgbaMJJ|8eu-cp%zb!AgS~>?gc9GiUY39{Rigd7qpq%?9rwzl)O=N1Uo*{y z?Ck4DxbIRLr^opo@x;bgg;k8RFEHoy(>qzWjcn0K%r~90eoj4ot%O5(orFAgar9id8HmYesPyl z-!V+=y$b!mKX8=v)D!BgBMwimPe)|wm*lI7eezWULAKf?A|(W_#!~4iZ{&LZj8D}p zsSehnZVEf2P5ubPgPAh{`Dj%D3p%~mW_E7CP}5Y96wc%$MAq0$VI0NU8ugh57}s=9 zFKT`8tt#46xhZR)3%~81>S3x}_`b?NY&ekdeq=E4CoIr}$ps^_VfT4s4FRMG`FC6$ z|I*QNYiH3WY7aLkEX&M*g^=a&zG^Z5N?)^yj>WTO_B#rpYrf>hRwEZ4@%YAd<;tDv zA+8Emf&x}3s*_-Dt3pXzr5W8@3gK(j!^ztP=(sjKyA&SRyJ^@}#L6RUh(yj?@W}R9yt$|Vw8}&-+;TEw8Nuy0oY;FNvSPH0jbrSuXZe% zEOYxK1xU|U4pKu$EVDJlqE?@Uo&AiqovN19KQmm*a9c&6HXA-SsOL-C2FVeKUK@t{ zdIMWdSL8>6u-?tCQOqmMJ7gM?j_Y^(XYstpnR>SO?wg%o$X1ma?u1`re^5;l1jDcN ztEK0H9@Dbi&ot5`ynnF+nv^-yF@QOB#=RLBhdR7D7=UQBtlf61l<-T>VBsPM9Vj}% z+e1l6sd|(B79epHp)#?UX>h%pVuTr7l$fIER+f>wZO<3uWe){`z~uA~+CNT`~yfRSKZKp}y3%of7e6{eEUnYZl)Mv5a9Zp&ch7&3Wh!$OIx;5%{2l{!D$ut=-cHCjSZ=d=B*6D zys3ZpNBt-u^kz_HxoS@#)Fb+RF6?Yc4!9|KXzW@b-}+wz|N8CdRm^xR#vfUB%JJx< zcfGYr5*Zxew^okaZv{ye`xi;PA~9FKfl>VE28?t1O({7>y*$83%H;Tz2-NK=fJ0-J zZ3T4jJBsWvu-F`8;S$-iC$N9^kacJmY}G!Al0Njc%zYp+v}?2|9W3bzJe%7@D&;z& zSJ$I5!ho(t+H6#=4b%I3l?$i?Tv>v-<|j0R-~BI|mwy@4>pRf=(bP2Q{+K|# z?HG7xc?Gvn2djk4TzMbnCN2L1H5+J5t+_V|2|WI|ql&=p!LMdN0u~tMZxhJzE*yv? zu#hiiI6&)z)ZA3OY7Fr*fu7xzni(+S(^;x|V@R4gsV5ogepp>s0)%cSeXCd>k2C%c z6u^nqM|8HMl$?FLbbkMK(DBnjDvhKVd2-8(FyAf0ZG5+!eC>Ks{0{2$H+I$-atjl< zQ`e&W58JNRQ9M{@#{EwlnI;)$inmO$Ip1>C>wzK2#cT?;Ajn)&y|D4sgVt>get^t7 zgRw@vvya&S{UAGu9e!m9JA^k8cWxnSz%}=AFMv+}pjqxLMsH%k+_Dx|?39D;x}X;Y zX%b-YShqNskc4kmak^s6gK?XtoZh}yNIt!r^X+Uv4R+v=WAs><<9;8X6{w)zHaA#5 zbDOilPsY{29vaWBRbXY~7k%&;Ux=2vcBZ5If)u{DqaFrOmp^nkpUNoaydiUQy>Mej z*<=xd_?CNb3>XfqF$zCX$H4M6kt13NTfP3MJT@iJS= zh77tKUfb>w1%O>oUKl0o#hy=6j{-*AqQ;S!fc(yLK)3=SxG4aVVb$ZZ=t( zmSYe%iiBuW#$n45SM0S6x`r|RZCuRH`lM#U&2kGxKzWRSJ7To!T z_HUgn>+i>)6&+9{KRI}9kQrE~N43ncaY5G43U7F05u#7V0e?0V1e=7>_Yx{x(_qY1 z8{{ImR}Bd1!v<|LpwDIWe0WSa+!%_LSgF|rMw z%Li>4_c1HTsrKu}xi$O3lRY+Ru01-~$)Em{3)JhmpA-Xojv21NOu^jI6uaK;T4)R4 z@OnV{cff#G{A32x?0eOe+3H6uD2t~ItS*b?&NA(%&OErhPd8m2R3Nqf1L>CLV_JNB z8(vE85W16A*}B31jWwY{kSBFS{QO0|GGiOk0tQNM*sbEmR)tT7+-%lfDJ^~Cv&hqS zjfpVRGltz(>RA=wbDNa7bRqYCvHtRU;T0;kCWEQr@kE>qoYFWlLbx=w<}FQiHLk6i z|4~G9W;%c<1f^yEjSGjb!hOFNd9tK+b2GbXm6Ge4r(Hvq811sGWP3%|r0(rE@9lB;&tA6R(A-(Tcw*gyTN-LoMJAX{<-kxDoJTb~=0;z#8tD>=-XFc0Hy zmUP7+U)i=(&4uF~VI;^tj~c1e{V67DcG^rk-SD?Klta|N)G^mkJ^ zyF<2H6dpU!2(*!(!qc3MFv2!0XYZbJZ-B$Hf#(e8c=`l*kY;FQ^>gzF^-$S}obDYaegO+1R7SmsRMiSYzP$%U5}zWD9vy|0-qOL+ zs#5)R?gU28%U+UVD1Y+P2)KB1_@lT1XM^u6*qU#8bX&5%dFRy~9ol0>eyX;Ld1jlO zOH4agYBLSlP8S4j(J2$I?n#{#cW)8?LAAIXPH&yC&!0_pDks7-lFaj9nR>e8UxXt^ z>?`-;CAlK7l-=_$p4*T((_lGuyFjMYRe%$jQPT zB7dkq=E{AoW276>S)Ed6{`xh|wa>4RkG?4%+Ed)xbz%gaQ8H~<)CyXja7E}r8?hNf zl$4OA<|=29%a7X6^B)g13GNJ{TjIGs$=Vvu?Sf*%mx2SQA;#07716y|H~>_P%2SaI zAPfEUam{@y&3ku#jy{S-A*;-vNGt_6V~NKCpEz96?Ptq2<~ zPJj*m^ULe|re3PhlR_PwA%qzAU$=>>zb#4MvmtzsT#>F5PSPF4-n+n#BbejH})xfXhQ| zyMAEWPfnMQZIPA^^*j&#!wk6Rv4W+909Ve?l76l_=O)IK8ROY#Bbx z@h$QFC{&RQOXU8PRPb2&QEcd&Phc&XDq?5J8mKoLkDt+(-&mz$HV>=of9ai zORR?edrOc+U3JjpbXN@5SR6|cF+t{Lr#<=$`fBBwRQ*OK#KYM$R*)lJ&t5mDg_L)x zdCPyzkzdu!wBgCXv-e~cnaQ2qXlr!SiuBybS9?A+3Hocz<3w>}rSp1chOb#;G9Jgg zEy3|0-IR9^2iVN&+BiADM7K6k&nSHil-`3?_h4=xyx2XT6UTJ9y?!02H-O4feyW)) zOLufI7ig_94(@MD5FI*_70WA5&01A3nu*^|)Ju>HtF2gHX)OOTt!#efMs|33s7nIg zFjT{(v92*5xp6&`)(_za|Mb?6J>Z0=fltlB^Gx|jmNworR}{-_HKg=Xs-5qHr+ofYwT!lw>6&pH?-QN@ zm~{5z&h-VVKiJmQaDAgof`2X zk->t>fbMD6Zi$*a!nAFnR%&@<3f@)vQ$V(7m@>5Gi%TxdWTH#Zw5Vv9C;Leyeh-s> z-ddxFa-1haF&m*gM43U;Z&1gG`IAHDDtJ=eX%t&`Mm40&`V};kOr8jkrab}Jd8M*( zrb=H*j)K?xKkn}#dt%=d$UK)t<=|-wQpLn0+BQkX=bE6NYaQr6NF#-c#N4yj`i8Cw zA3X)M>KcMZJ_jb54ix_dF}~X|nM>>wjyl5eG-9YbrEKlYtXDrVoQ%optXyXrYD0!%+Y`} z#$#X+@pD)l#C!>Ka9_T4HgzVtDa-c8mvus{X^+#^{LP7cF2L_A6|md5hoVLy221P?jW(S(1Em!&VO`O4@U z-4XgYlkgDR^Q)S;`^%8&AjRd)8KvdsmX;@S)UTq7lfW2n)~=8)0I}DW^7gscSnwv; zeSNyHt1Xes$xsgb0 z)i~vh`fb2a6Wj}a(=^cv96)MbAYm;sE_@{hP6!_Y4)bC$0H2h0^<~*_m1=nPxwYT! zGRFX?Lg=e6oO6868wS2VlEA4R|_v+Gtq0MM%NtMAMM_)B_e{HQDyNz2pc`=P#AXSYdHW8IE)8^eNR z())MPcap_ybM_QJ52g8HUC2;MF;^UEL5p#E5W=nRvl$tH5#Y1-|g|9ysVG z!Zd(3fo~W|&O{iyq4X1#Hv&=l`uJ%_p#azhLmQ)iKM|2aId; zT9eFzR}7e->21T@v+Z@~eNkpKk)HqZC8ot;Jo>p>Tq@8>cq2#ua%=_F1Q6 zB3o~?M=}n`7NOskEE?ZH2Did^4*TwV!YY!&!s=~amwo(cwz#-?)jqp5tmqA?W6fd|mF zkgMA^^lZ`^HqUoJJHz^>gvV=6cn3Gx$B8*$sU_q%ecTJ3<66~M0G?b%xbdD^OvWs3 zzR@O3t>5N;?{OR(T%ohNyjcc`NPIB}UV})REnX5)b#N34;>CgcafROr)*3J?PY6E0 zAbE-vlJksn=Ja^MMDKGO@E*f(r6$CzU?9o^+!xfA{F)WYHJ(g_tJR&LDrrce;#p_P z=Q&)eE3l!Ii06|(4ph6-@q2wc9X9$yO6-Ai0z)6aB_5h3?6hcRmS?@4oruuX6!r=` z$*Z(~xvF8GqwFHEwb5k2d*HPA3}gi{ARW$P)2#7kA!4CbBVgMckbQnArC~6MpEOWeCX>2t zg&0o|cR+&AC?!r);zqWzRBYphu^BvL9^qkd^B>kNiDM3}v&F%DD$5CGF<*bTBq)^8 zM6vT{TivIAH#OU8%`#9_lx8MEAh3ta80m+hAEJp9g+ht8c66Or`c|^QiGlQg3**yX zy15k^wgvOh=RNM-ntD^b(a00cl5Q@#5XoG2H6(gH$5Z!c>Z#F47^@6sK)_w9e`sxQa4wUDqw|76g=I2n&c#g*L^|*IFwr;aaO#wkfsR=-k zamsg;Rg4)=!1yx!{>7X*5<^C|X}#3cW??NQ|MXrKJzzZB9hb)cLz*&uW^CSKw-xUA z5^nbSggX7bP_`8@RVw+KvEVOfnpVz-jV}HOHsOomtrspqB(A?IJ;-^|xEYBUysj3z zI1;Vn41N~f%^Mo(h1H2sjb|f;TGAAa@k<|d9TY=@t`#v-&pN+hJAGB97K!gHvMjkFzgBQTPKgZz|5k& z2o1#DNI|aeXjLxr*Lz(!3`y$+tKV(Y5DZf}qFmR9kSsp-J@YuTP~YD*t}B1nu0I$2 zB#&eB+6Mw=8r(1~ITCf`a<@CU!2uxAD(Q)M;pWqHkuc3WeeX}flUu~>hDj49>;m5+ zeJFd6XTv0)CH*$i4#!`p=bFTdl*!j+jD6TXWVV$dSKC}w^bi+p9}4x))C4gapO<|$ zmJIJmOf%@6eAB$e6KKSqK3`=2psX(z@gVizn<=MF*K!rUVKFvo|DxiMnYe-62i}Lw z;jNP^tIaNWGeZfI9$do-eM-X~hFt>6M3D&H^2uxz#^9|}yO}8shj=J;k6Fr}kUAA~ zR1)(NyV^$C8ZW%iq7kEjQAVEHOR&O*Hx<+!)wO9r4wwC}e+3(&;pm(-0J~6B&oQvL z7?;RuOe4owsEyx&vy$^wfIU}5*yJc%&rmN}xrQD6Xf=Ko?bU3ZHMBiYxh=XlRs^Xg ztm(#vp<}ihJHNNI#q3Sc;9A?w3pIP3{R+Zua0~hyv&|kThZomv^79uDy6hX6BPy0s zf&DSCql!66etmPk9zjII%6bHre(}XseAM%_!k}dq-^Y$r=&;j`uQtxu{*-VJAtOFy zTwVPt8A!%e?+LLzIH^+McrxLdLxq?Ys0f~>G*+axYx2}onW0U;UC57roeYM`}GXtE@sZ74}~bE1|34<@vlw>w_fKb>sDWni4-j3T2D41SX!r z<_7OyLk<(RNy&IJRjD6} z5VyMO`ux{ECr}~7km>kUkyIWDGEz-4nb`;?n5TWZse_^=MSVVAu86c==fV$FFX|*& z>6a28q|My8D|o3(BdB6Mz72UNkQTQ5Uc1Z}t~|20lch{bo&BhkSD+Xeqr)4W00X1WSIN{el(+?ubcB5;8LM@p*xUn1~Y}NuCpX zSlu!DJcccOr_Y1FpLfY3&P771h#>Df+BcIiXH5wnbQA=}ci!d~N z<$cCOA%B|q+Hm%ZaNn^&KVh8ara(+l^I5;!dC|paQkR+F*^q#$$|}RunYz6>HF@zz zsWpa(hZqI*A~U6kwMW$SxA$ooFK7RFa5*z39?Fa^b#hs^hxNZb|!91ICha9gk+oma=N#DmNDuZx~vxcsN#_ zozCfDfx`TRCT|9*t=6HJoaASg<>lm9U!Rg`zW*e7UDGO+ij1Yf($zH);{ z@mbAOv~dwi9!aX6DI<aZy!ZxvNq%vI@<=HU@R=J_F4?^P??`qHGmFEbvK z`IfL%KEWCCnA{EXSgGyfwpy2qlo+y< z^d7{qdF1tjAdamUWCs%828J*nJa--E8YZg2-Q!79)x6R}a;xO(zdRC4H4_7578`bB zcB*${pBsHmT%OcAjFB3K&;=|h4C=+!PHAcU&{O|YH+1f3z^BX($FyA)uCW{9tx1g< z$Yo2Mw4V(vs2#ig-e+(yrW4~Sm0{$rpz=$gC^0I3v~!Qx&}Q<(E9Ed&MTF$OOIXc{ z(I9-}XxrT5aXhHqAe6}v%-glj&PPb zV75bRHOSerU$P(o@7ugEd3X!RcCuTdYlYnpqlnUFJ|mjabRM}M*+;fQ%aP8#A8WPX z&zj#Cot^%I?jT*qUq&>Zk4cmb1?&a5pVqLpI#$y-gfi=<6y4k2N5)(z>;8OHC^k>P zzOa|59Qr(#S@dN#Fr-`j7Ez@djmVOWEn8HiQ2Xi|w>CikK+hF!xf*60TxYs_Kp>O) zxZ~g5Oh#+WFN0064}mz*!r#^O_>a|Qd?xk5Qc6-{#ntU53+xQYm!CdvjNr;t3D|qM zvlFy~`WAMFRVQfz zBj^5N6Aon?x@LrUC*r02q~T45ji=0=4aw8LNF?xStO(i0b2E$h+KpdUY1FqRi7uMT zEaozl;x;-7?$W#XvZplfq4pJX?a$y9fuzK3Kaf0E`l}V4#xDAPwN?(>TlDfI zi~ph{om*wO;%yX=F7y^!MU~3C*(NJD;1W>MnTr}1L)lT7o8W#5Ru{${&1YQxWK1*r z`^CeU?OK_aw|N#@Y~cmUGV>Bx`PeSNH47-yrac(bH_rOx8Nr&RV2Gt4M#-%ghYW?v4ms`PPS*TTReh zs{ol*?U66%5jo0CHSJq!rWoil5kEQOVu0nQtipS$zYJ%*#}zXB+|muNvyNM@oLC$OK5sm zBUo`ZXjGSziK(h$5Q0%dl6y|CZ>|heoUx6COMX<-DMYE&a-^wuHmsb*{RetE29bGo zS;8;XjSf7S$z5wi4*c*JdO^_hw%DGjQN|WkZ0)gnb~FFPUhP004cErOD^a> zkViM=7-X{|A%@7bp%LWerN{INAD-o=^(1a87|wKCF*##1kyBQrliepX1?)$jh0M41 zLszId^geRz9g9?{GaCd~edcHj2+$TSsl4BSriD^#Ihi&$^*H1TC3r09wPGBRBHzqv zT>981>FGYNxz>Ft<^VFBeTwYfHm^*gwn`9NHH!^J7%1B31SjY>@%MwygpGtLFp8|> zd4tH`Ay@mS&gKh@f?%mBqa|1X+hlGo(4_Bn`CvyGMma6z?lt18z$gZQz6J@?NtnHfWnh%1kCMg5qdRLh!F$G)hQ4(fY`)Q&h$TT?G|az3_D2QfpFH&beu+QPd|P*1pK8Mn!GucP3JKtkvN< zZ^d`W%_n!p5Op&O?!XME#YJ>h#wGP40A0yQ2d3Zm>#M&geU^D5T1~*T=rx<30%U5( z7KPBfsaxl=f?+uP9I!hQni7$=4-Q@9e*vKq+(66)47K7ef$<>*t*FUhLyqX6fQ{b) zZdz-F(<*=b<^u#<6d=)_MMG4=~@C2cUaV5&hvequPcAqs)NoUG)?tv^xGJ*#M>1G`|}4 zbVS;MhZb9a(Ou7BDD{2^y9|&yD$78Tt(L@=VpLCMu+kdczl-zH2dfdZ-KD4hZ^rt!|c| zb0My&)ItVP6=exKl{M^hlTq1-J?;^yRCN9mQDoPQS!~$4O823XmIJiH$vgfRiZ7YS zVpnU8QqA4Ev!*rkIW}Qct>QerIRkdO^? zl7g#6AG`8v{cD6^*wBM)@)E57fd)Qm0eJ&}DODN6f^IU^H8SJ(qlpCGuMxdhEAXbV zGC1=4PI=?O-*ZnHv~zXH1hyg02v#p4yPXU}&Ta$mp&qik!P5D};on;f;~B1qaA!v- zS$viotX}H_g-(N!*=GXHLXvMXZ!W8X$m-mk*<-|>&Ay?3?4be&6sqYccwLP%TYyA6 zO|iY0)V$ym=qB-S0usLVU}6gyG{M~~6A5HS&$IxU2|vy7YjY_GF5dl5r$dZQz?dw> zQJ}q->7N3RKiAGcTCVQUB&*Ryj8kpW01fa_9q9q7suYHWb{ewtsC~};g3PZ-rnQG3 z?V7BU;FO-Xu*;uR*UN^@PSWr`iG-VUZsprQ`Rmx|p!Z=42D7RMo)z?8Z~@P`op1L_ zOJh!kt<(TokO!O@tOz*UoqO!?1PGGe=QTWhuOh{}%J>WTMDNz5VsZ*8$`&*ASgx2N z!%ciGtvBaKH%1miL86X(TlcEgA*c6?(gm!5zm8n(e=-l_CAf|BLe*g$UojW{1WO9j zKPo}!XN-||YIxcdrVWNMclOmm5qvB`*}yS zYz)cXq)ryfd?SI~{5K?R(ZAXS{5Q)H<<`?pKEs{;nn~hIGY4-YY9;F z^j`-cm8+N9jq#H`>0c1iY+*MjFi6}Lgm(fvAGz;rU5({^=}B1!raMT2GH|;oX|%VW zl|mG8<6Q)|V*J%bJ;+K?c)?1R@%OekNEfNL(%3}ulE(Nck2hEt@QUAJP~*#G(C

    n%fU*IhyPhz{0JE<9VyWs#kVyi_&(62u9RK_W^l!Rb61Vj3ux!K@k(;_<( z2J$@45ZJ~X8g9+_Yf##*mgLO=b|S>0?(}cz|DLA&>2T$bQ8_!c?b=4vp*{u&9kP=) zJN7!9Iq3lt{O^5($;;~?w6WVKr4@vx--LEH@HOhOn^GCAKWSa_%{j$`T8ChF8v%X} z&@VyUPJ{}`if6K)(_o#dgFg{z;tp5!)jo}@Zuz)-#@e` zzv&4FM2|qM&0Q^$H$Xkb*Svv^{?p=!oOGKyDX(9B*CaF>_lybI&cXbI#CHajfQ|c+ zao>v;`c;IMs$HY`C+Oaio0Wj;Nk2dkKYIW2f`5o z#5?+oy}qvpl701ydf)yB^89jbGS-ceK?ZHk>V-@;8J*=+E$#eks)s{1Leu}SApcN> z_ApFX9c+{eJ11DT^X$rPqFwkYA5Rd6Fr_zPWL7MO)hrNypB=K2gspS2d&{K9LbH** z^vN2|_`~iy{P+K2#^Eb&<6R%OKE+Mjvi;PB-+qWjZaMtoVVBAvai%>{ASSwfC2ZPl zUqyS!#*p!Z#(V&Tdo~xt7cy*Qn)LP2$8UH^ga?u#mU0)x#YpEDIp6>KZa=PNGrw4h z=RSr*B*ZEkzdL&>PtH^aTn9pJI;F0|kVedC!JA_jSW_-+#YuieV}_e_hTnCCWU_1L=b!r8rrgAj1Bfl+-`wiz0Qu}~FR41z;J;6n z;;I8{B8GWu zDMrwjA$&7zW1tOJRFVF4UlGOFSL=f(pQ)Yp&=BLLV(J?V{sUViMJk66^K3h%qX?bsC`#>N&Ws32x>e^lHt*@n20y6D$wig!GVgS7K`~F7yK+>VPpQ33nM!;C$KA8OyI$@ zlpz(m^BS}__YD?OuoZ}x**-r1v9j9h`bK+{kQs9On(!tD($p^4cOo@{g*CpUgkHq`&0`F>5I$u*d^zU-WN<$F z$=iz(OuIHkhew$Wz6j05c|{|U7fAEBAij^)<1(^hCS}@lk55A3=LO@B)NL77BZlZ7 zPFecOEXI)tl<_3)fC+KD;E^H~_s>L^KP&c*PD&2vUC+Mdbt?ub`qITQ2hN*5nC)PiO+cNF9^?Rkxqg5Ab;Lx^z|0Qhh3({ig@)|}>Dvc?LdDwFj9=Gq zM@n!dndhhwj8C7%JRYpnVy#a#Z)Sdcq~Dl-N)S#hMt2wN6wEVRu6oFhlqr#>GKk=R z8JTS-GH{u%xDroQTMVvhNYuPPYBaz+IsB(c8;O5#d9CC6QPn$GTPOW!u6df-%S&CY16clAGaE%R-pFfrnX;nBA@30>#-d z7&h-IMmKlDhx%zY1e(cGpdpX@MwNEWrykS}T2F9VK)au3*Mtk} z5=l~WdWNN8ri&4!I~F5;)+!cnnO1X}6dn8P4@q#=U3F#@3MC$j4Q&J(1fMCfxH#(+ z9RT#?t~#aW<^^IZ9-~~sA#tymmsi;(PgZ@nMVamP{*@7tHc*W8SXsrt_Btu7jh`u0 z5F<#rjXLf|7noZNzL6J>eI`%54Pmrw;>6Ptx{l9#%>E3pfP9cDqIO6!q8b7Uwqjb& z7~Vn80h}(<6&a%f^k?*cpf7(Px}4*`mbP44thY^mGG^SvBgq`rNoAMNK1Uxxk7}Lt zxLererfPye%E1VoQwzZy0C(iSDd&z;o5bgiJ3=V2j{G=C*q=^Q`hr7C!u+dTD zE6wM1e<=y(;+@AUbq(4;@Ae~>G0kQFQm#Gy>w_)AvlGPUBLzb9a=u#y-sx=QZ_v~8 z7fU~lhpGN$YP9^YjfOR_xB8L)AR$SV(Q!u9G)^_gFLt5Co;OshGK)^Q^-GCM1r8mo zX*s$P3HrwM;{AV&umufYSWDNmso?JYc388-0Z{ByK?AN`&}YyBq(AE9H&fJChqFES zciKDoiNPB^E+0@E-o=4>KfTbvJNKd|`15q*9_-fg&C2Ux*-3wkJ=Z*19rRnVqBfMUgU1<-+0bQ$7yLvNYg&np+}vn00jGpvfXFYdH|J4YLV zeOjXIPKRKcGJ%c?)^RaP2rH$%i}ktY8onq4|496`7dQ85#*mojb8cg%K0KwzS;p4s z3jD8&Y$yq1`h7E5+THzf<|#CoU!5xMGQCLC&aNYF>7*|r31{?&-kJeA#g}E=K2hMqTQu zuu`bs`qSaDT6bt^UCS4;AmUc`PiC)Zt}2~t8bd}Kng=$DUCRL1N_@A}YDOK#2<<_c z-_30*siaP)$r=DPA#UX{J#^w#uw zJhak7<Q0gxb7;8@~A!%%rn|4j31RQeG}^NbMmmfC z-f*Q_fc(uq-zpB|JY_@C`5IcO)~z2V%MEovWSF4A#;ebD%r_)w>64uTkN)qKsxv_a zR;j6!KC~Em6a+z;PLHtR!t%w(a4pa=X5ub%O=H85Lyt@tnF*OBafGS zdq1+}UO6YVrV5gO?NuQKQ`I?Ztfo$Lla$^$FTvX-oD~e`5~^SlH~5#Sc^YTx8jGl* zq~rB?bhJ=`=anq;VLt0`hjqF@+QFmyrW_9+zCJ*V2wJzg#2w4x+kNm;d6LwBxQfO$ zPIi*?Un0;J=v?jH7}|cJxiT|#Tg*hEQZ__5H)_!dolh+-orbz32#yb7G2}!IUAEzJ?q7CSfVq z6MP&J56@h*e^Y&lkp0FU#d`8E-X7;9_p(hmSFyPz^|6*f^#_cBEPClSn}$f^vY)nN>O8Kp#%%(d@;{vX&)tZNFcYZlwQffn*Ga~tq@Vs>5&TR=7|b`mYFO1Svp?>u zXTdK$s!5SU9nGba9iNgEAnt1OThC8fbQ160eWl#=`I-)v@~q0`z1|1+e?qj0d?^dn z&R|tqX10Pc-%F`rM_eNC$xK{qK6+^X@I@PNc^q^e%U5##QdB?@wzOFYRSjqgDQBg%e+#zTSfM(QLw?qP}31fRG(Ig+yG+-35kgB{J~$l{CM1Xn>rreCm5>?MpX%QE9z zf+&uZ;8%1@e=(-_3Ph+LMpa~*#|}i!_N)Q|XzC!;maNTK6If2@_7XU3>X}%<>l0~M zVl3?s+L11%e|?g6JeQ>spG%K}iEg+4t$0lMk0(HwZlfQsgNA=Zvz>a|A7~N7sY~#5 zte7Iewn349@|2AcQ7+-gkkj#Uo*GsDZcJkA@7M36tC^E=m<}|zU6+I?soX@%}-G~f*ux;k4n^V>2gOO$Cp*acYI5rK*8)^02Yf8 zr3V24URReudb?H4k)vwNy-*A%=S%YIPW>z*xn!{-!{e%5JD6Ic=wWPG-3zE3X?gUJ z)X}a>3g^TDYfxk$MIQLs#!U)x01Mck9qaJ==>8$2;zt+_H!}RwB6&~l9+mc^Mi~sk zxHuf;X?ThJdr~Nr#02buTnp@tV!%ELXCLX?56|i5dFpknbrZIjljz>CO>ewIQrRRf zTk5x6i66MuJ-AUZ(WGZz^aMM@ccVp#ZNpDY%U(2k9XXQrVN;Pg#Zuq{#UZGwvezu$I<$|!W2 zzbWbEYW4bM(HrjLIO@{%f~-F}0>(gQKSO1( zA1rh0l9gs>P4wL;bsvk&Hov)+ohmV=gM?@oJWZMvE8Y?q%$COI7Ybh-U(~z&%%COd z4i8}3omr&BRw6QHAN$%ru+rl4%9Xs937nv)4!J?@8_aKPzs=v<+hdf8FgqlWopvp4_NIRE^#D_Wz!38Z(dk!Nn<) zW%7+oM)r9RT}q*H`OkHh?I{B)du;F7ai_0UD-VrTP2;51+|wBSPce|5sz(f^kO}v}BTuS?xBCq^JRDP>ZDKkvHpos?*53+c1_W z?y#wX?{sUOk(1t4RTYeA@_4mj(Xgb&)?(Cw=&1 zezHgfh7y0(lJuqP2RJ}jsn;+(Zs9cQPn8}FWJm%5fF?<< zOwn6L$->4Hy#S6#nPCctC(aaHWI>MNIu6Vh2@h2_(OTB8VuHwAYV+H{W>IF>4>P{Kc4`2s;?kk4Ym*fP~)B zB;>P}%(Dn2yD8Vf!;vN9U6WBWz@usz)eR<%-?mbvPGwCpj8IyTp=5FoMtKrW3=y!a};AnKKmHo&%*X@py*HO8yKZIBzRt2 zWgeUH-yMc1fDgwxOcWuB8<~hqAK{wq7^i8jch%8>zj_FfmYM2{E!gp|PZwDqoeu{d zY|(=DO#gv84CxZUtyS(#M}{d`NDXKX&r*ZEVHJUbG|3A9G=tqN>jBS>bbBX0{_L3z zN}vW^e|#WwkoltZ;pEekfn_q zmZ|CsF>)j+TUFRa9|CncVA9SEGw=j^*b8JeU+ekxVap25L%Y8;ri$SsE`L1M=C`#V zB)VEvql3|Qw`)Y$?LLJC3uyP2Ll$*x4t8kKY04kR->sKx^5;?)!k zG0=-=W2&NSFppUr)b~+iR>j7wqkps|AK#@EoZm=V&2V~?vAfZC6Wc^-_5Ppy;sod1 z4;97#K$)+eTW}28uenIOT%`7+e~g1Sevg-XUrRGS`e`us=70P#mEs_Q1$>m|g)B4Q zjxA1EG5~`yb>9CA_~)n#HhG6s-7|N0UNW{kp3#@OQfqd- zR5}K_Ko&V!(8$vcqVI=p8Zu`0%4)+m;mDEZXB(Bi(s|=WkCVB&W*tDG<@Z;*-fDN& zbN_+jOU(lMAp1-2sVS9>Eyw4I&{LyP$VwP~D^YOT^najLB}fz;uXU9&(!0}&dgAE? zh!}{$4nyX_UNbFL7pft=m6U-j^S8Z0j)lJtIqS26ZubrVR`KZ;QUmsUMzwvM$pNS& z0I*s|hDDXRe+oER>OX;#aPKcr?B2gHSS}y0SH;ct;B6qaDhccw;y=7Hh=K0GAHOKL zwiemvy~~UF$C?KC=rt)Bw$PurHg-3S2`=QDgO+9T;BV~9NpZTmolWFZf&7P%H?2|& z88|1WzQ^Faz*hafDpXm>^R7Op@3`P}KqhZ7-62`maVi}bltYP~nT1|uv=69^l=pmj z6f(K|3ZPKl5IdpO5unW5)0E%Iz#lmGSi&7Ud%|57*p=3Nwl-699;z3n*^%^$`8OGM zZ~AIPl;Ev^tqyS6eQ9tEI(&z#yxRKK(oH_QfuuLlD*a|>7%<0RGp>Y+);~_Awfon> zo|TlD`v9j?xmYR8TWz-$1Wf4izoWqYzoy=$ef4q%7<59?jet_S^@iQaF}{B)y~$|p z5!|F!Nuksb?x@z;8Up%a=((kQWGho6s$EsCZ_X}VlehfkIKxqyWE4`nxjoNiUId6s z^#G8dCX^>^JOFdLwap9nbx<2Aqjg`iKnX3;0yeT&GwIMUOKQ;HaycC2r&(a4wha5%V*a^DyrnQ!uOxZ=j7g@8b}QT^b=&p`pdLtv)4JySR!1SYJQ#@zj}-ioUmv5yS%0C ziqZA~02^jIgknaDXtB!ek^KTtGNhMX;IQO3w%Zy@dT*|<@Be}R%@(wvv5|SvYh1;^ z5#0rp9`%bTGaxMRq%6|MI{EQk!1pOU0-&cRdOAZmk)CN|()T)!5VMU6qWup`7ruV;ir2C2Cyyr^ z33Pm*1$NG4k1p58wm#eO8?RRX83k*m>bY?9pzE4BWKd5$=98BRe>7_|uo|W~uA^XV zP~*aJ6h9>XzCe7i^7|G!#Zllw0b8ey{8N!#ia(5&kK-L}eSPaf^NL~2k2ymWR{Ntcev~ijYVodD@WPA$%zV(y(TIpsDn_c}K)n{fqd!gn@?f|do z`DH$B&CCY5`;5&B;t!l*QAtj=kNZT^h?}*$Q${^2_(*ZuPJ6V~U7&`y1N@-~LQXX5 zFNRqkZ-YHF{`m9#R?|lIHisd+_))WoeFz}9Ps;21q7Z+UZ}U_=hV3R|yovAZB&$)M z*HVWw+9I-(2f37i_kGF92pzDLtQ8!$fhDk6pbiTQ?b~qrf>9nDBg)VhCuSHb@G+lj zF$e#5h{fguydFeV=&t3h7aPD@<+h;35S)(M_ToZNlQE*Ik0~9DsR@n<>CZ-`5|TwO zIcoGme*vfcpA;nEk0%YBOtEZ=eODHRi!Eh#^WiHSYI=>WF`%WtRVi2G`shq4d8SwwV%)eWN1;{s=^j`4$^Pge`yk5h)Too+<<;o_xqGXhA6bPGCtP(;Z0`e(0wtWwbHq z;UF!=-rgob>+o=~CS+1+GWQpV1xVruP+EX<>@8)eK)kq;>z~Y;xJvS5W85a(FyBb! zX=Y)Q#ZDr_T zwOJQUjOfRr3cf=VA6J5Td~gThybZ6LhN(ym(Qp$BZ&T>b#XFoUAPxQKbu|}rA!`l$ z?AlrJAaEiOKcvy2?$uO!%#(x3{tDI6&W^VT^RbRtS~(@2Va#8)FE>Gj8VyFYN8&-# z_Mbu$d;P0~UNmaJE^t3qSEYo6YD~3f6em(+^Eq-BEaL`z(X4i4RkzM%no!`YOoG6J zV&6iZlxn?ajKcmbuz#ou34gU-TE?#V?)TH)uTd*kef^mUC5c>g=Itp>V}EkmBKe%A z`59k4l01rhlZC$cb!@9tqWOf09dEI+o{+V}sOpoPdD5)R`f1qMlH;h6T&PHxDD@hE zQ)`mF7hFP1H0|9+&q}TbShO;?yiXvAV*8pZaB!$f#R7`db3u^G&^;Ex8XSI2GQ1!K zQxUcgUsbT2{(5F)II<=(tT;ZE-4(lOt;I4@H;`v843~&sD47znsPV2^r|-DhJ)X^0 zPNm0SR&$Z&K|chx)|RY~-KXIBEyY^~LAHL^TXVUSxzJ!F?TO=zm%k9##yCjfh4q3l zQYHC0n(#|PMD4MSK+btG-qL9MB3n#!L<_)lP^qgdLOP zmqvWE%KyubagLET!1ReJeuOBJkm%skR=}-X~rNKu%K5&6nl+=R@JwffweGrk3m+zX37eXrG#fwxcOBQVNVur$pzrr}_WllcQX9-mwD=N7L1xVT{b){Oa z`-rY>I=nlhd9@}$2%ifIqwO0EYK@dhQ*|6uM|*I%Pu#0-385GE_AB}(rAj7km?{w> z2cqNG57kubsj!k?wIXLueDk?RZO$v&xYTbCF50h=Us+mvmC`)jiXOp2a&Gdp}vR)9c}4 z+5a#iJN~IG)$V;owmsjg8KNUV0QftBrl!L$gfYr}ERe!JE}1}9-)|3TuoCjEC&N04 z={C#x0shayU+$$7&{A1F#64a~5l7K>+-x+=;`6?Fn7dt~Tle3KBPI^S&sP$nY-~HS zJz}`xr59jbq#TVJ#)sAZZfl0+9bk6wm9F`XgwMYUV$u_Zm{YCw& zsK+-9qg`ok@WHDps@ozQlW!h`8z59N=@!TS)I)hl5?8eL4;Z_E$+Lfn<(H$>%N2np zCfj3*Jh!H{p%1Ea7Z(DmN-ZH=NpIo^KSpw|>Ge)lE?6(Xe1a&5j zBYUT(V|IW12)`|s({=oDUzP6DDenvuIAp>dA{;kfAog_5Bo!fjvGmrQq#f<`C(UJ{ zsUv*ycDO-gV@UL3i-HtVoYq4!fiFrJd3ZcfU4F{e5=*wJ#D9n7o_nRS8M(Q6vnF0Z z_JWTh#Y4gGMsLJ}jDDW=E8Xcz|0TKuE%#7~kPMaVRkD;RRWT>{vbWl^o%@9RRb3Xg z1D0jcw?~I0ni4)e(BY4xqpwwvByVy#QElpc*OuqP2O;Y631yDXo-fuJ3eRKvR{ccc zt!fkUlD{e5)0_`Dl*P65@F>_X%iGNwckBZ}g15rRFyxyyv=L0XH1dBtRI&^cQmIVp z*&rd#wq9Zn>PsMKm$4`j~xR2Q&_Hb%ABKOr%cFm+Ff;+K{7wj<|25` z`FXBrdRL`wsMDN4M!wXI63dm}zQf;fBGpcTiU2EV9%1iaxX{_5{mW@4tRgJb=U_HJ zUJzNvgNkWj)vZF^5@q1djC!Op>+BtlhcohU${SaNQa?>8ct>|V%aKyX2Ij2ol6p;U z8=IX+CdU3FWa9SnqMYIP*0~|hgf^>s{b!#!hR9mqrl4DJs!#kn>EP*}G9%6V2G#_y zYSnLC?y!vGQ$ey`Ijj62YS52(E5ao84B(pkzHHr@!7?u}<$6{k`=Z_IgM#30k0_g~ z55p-(p17#e1YF^sDxYMDB;j9Gs^MCbT%E20Hj&VSP+c|CFY-9B2PRd9w@ISN`rSOT zoCj06Oxh=cM|k})vdv%0kG13EX%C+iBQe#XLTBP-E3N8Ss325HQ(*k6DhH>?%lr9r zU(0ypIiv9>aCgpcztZ54go$?t1N3(MsMvRyWqf04?HJhZ9j0x(8_=nZk!A&Jynyi; z8WDDi_xZVzbuH8VvT!F?CCIqb2k6RuE1ri+yX@iq09AurKv_T^in8VAgFQ{_DoGPj zb#bs__6p$_|Bk?mz9z^Fw=;8eShzD6EyMXsUu>X9ZF5a>Sm{mKMu*1-IIk9X3C zN`OiIn&d9B=U4fKb55$CkNh{|__uJgD^;9n@`=sZQEfhPl;GVm>L(bGJ3G`hO{RG~ z5Gg#i?YyxRz$!Nj7?Z6J97Jh#^mtgs4g(z|*6>@QldVQU)XhfLns|^^Ko;+2697mU z3sryIrkEJl!49hTuX|UH?cN&6-w7rhJkBTVXvprrl(ybzL9#hBEFsp)3tA7Y@n_Zx zd7~VzH7o+w`)YbPx&H%sJA~Wb{*V_rsPjIc&%3b-FA02g+ghHU@@&r>{k!3t)NKDO zqAwodjet`Xd`iX*z|!K|62+Hx$=J^{$!{u4;Oc&wkbwgK>-f`)g|tQ3w)FLAXKuIp z@P$(B=up#o{^NJwH*L}ANoq+}V(AqAKIL9THT(50u>;MD5QfIR<}FC?00l`TD?lYK zSQ~8oUn7!iARN(7+(_=<@LP9so*t`l-FecCqDJ-@=W3B1qYZr; zlGw3ryGhyF>SWI0b;cLhlYgD zg4M13H1)gw?J&v={~#!_l{rGcr*N(<7RpNXkp-Vv^DBpRxeF@d(uZYA`=89`yI6<2 z)tMq^M)Rz~Uyv|JhYh~-@)j4qIqgP;K$>YT(zTJ%5&13C-!Ap=ol^?<`-ts?qAV&1 z7^kPFQ*QHwJ9MOYP}F*WqHlF&z{jj*6(!xo@Z9PR=L_dV012An=Y&1fyK{ffC?Gi# zS^#`HjyuGCdaWBxKFGGw#M)@*9Vt-xs#NE!l+GbAJu@RSSeSNyHe#zT+9#@@E|We$&O^P|vS*S-;+)dT)go%|T6d>f zce|Bd#gil(nX9Yg!?$#!+UJdFA+g@;yG+hNhqG=s@)@6#7e}OJ7ufleAi`opKH!&} znEBx~5U3+rn5LHWU4N3mhszxR1!C7?W`qV6H*Ui1y~je+ZVN&CO1e!qx9T%9Pz z((S?jOQ680aL?gUdOhiciC4JUru3)NG3$Ml(tA9WZ`AMy4u($x(Lb#9eJ80|kI~E1 zMq~b+aqr54*A{v#QGZhSW*5qeVtJc|cxf>P)KUzEE+@&N3;Aab*kq0i3)5x2MZMFM z=W&V1Gub9S@wnf5+izg;%~GxlmHp`k3V1x85sGYkm7juhePMz!@OV1L=W~U^g8Dsg zZdHs`Z1BuQx4yyI$d^YvWa(0Gnw9p0m@JdOHYsy8i<;goSu*V=bB+hJA_Z=hKkFtu z|Hi-^D$#V=FdNi%D1h8@c+DK$={)Kitl*TPsVIm5Mqr(-oxoqn%h&I{In?WH`q7AI zWk6k`Mb6^R>rhGPjb5rEcwWv!$J=WAysHvp(4Cs||J^`|LG|iO6VoI{sX$_M;i|;iyB|kj#g;pdUee4Bo1} zIJQ*t#iXFI004ip>YMSD)1m_l(S-gWtPnH8@0({Y?}Gv@OWE@j-R-IzFDwq7i0frNhYvYR*Vv?HS#3eZ{F z*$9W9*!EadR33t9MZSlze9N@Ew{f&@MDNHt)B_oGNY`saFjdOQ@O0}6r3O^WTs=Ad z`e(3(ew&p5f|%uP?Anx0sF2&n$qEv^z!M}RofJKe{(DUR;NUEAAtL9uy8!*8OP_@uKDe22%z3zOh` z?-FJzrnLFX@s;IIVleg&nZ1-9?gQ=iT=VV%s?JGv|}^$>Y&wU@ly`SS{S0K zNK(#rH_X5fm#(L~2uFWEN=`1IQJ$CIaZh2kB*38!=$B#JX?w3kOP12+26l6d5?^hV zI+YrpLn^jEUpLmz=@DByO7DH2l9V!)a@Nonkl%=BQPYq-_`s(g z7c`gX*XU1favkPS8z&R&vhEyq)y~{JvzXk# zizY~=^a!{ed+m1;R+HmBHYE$p(dsBCcjIxYQx#53bpDHpi z1RN*>M4nZd;S`n{X%tEW)8F@8USy*dtade@emZgQEi}`4Jx=u})4oniC?z}lXg?GY zh~>Z~oMN<&Z<#|yF*uD$Of||l;LG}i{53Nz0m1HrPuZVzrIWOp5s3Bdu#|j}AFP^i zbS|jkx2~POy>612;F$eYWqzbp5h!}U#JNM<#^`+d(1eQojWQ^Eu|E*?qT(rD&nJqV{~fLWJ(!YZ z>0<9yPYM9rnX$C_hOq#l?C#14a*uzjf)n9LZIKA0AU%3Cca!M8(=AA`o8DlgdRD;X zJl7ou^KpZOvKTdD(Ai>p&SAYJkLyZSqEH?K(Ti+-Zu2f5>g*-yZe&*HFQxvgc&IVX zG4i*i3{Ra%>kcAm58M>kzxSxBX(~ogIgu0rBD}X7^*`hnRL(Zyxf(KYZ~IHYI>m?TG|w zS;_k;Y9)T+#n`X!SVHGj9o{v>=oh?ObjdC+>1rq1?IYoFPaUKXJ^JEqNGZ$#~lfb-0LbyJZ4vkErOel98;# zS3SOd?`eh!$EoZIc?jKV3AcP8Q#c?4x!qzH)oDQl z-qCr8MQ6lWz5dkiz7XT-)kG05M`Q%5IX_t3(d+13g4!rLhiD2jc$v;B^4H8_Rt4eH zx_ogxsW>5FP)BY&r(dfWKBmy;s$Y8>vByN%n!n57uT$d7z5j7inD)qA=H}ngjexv` z5=wsE-c1dVM4fE-LAfi_>jn<~Lsdy=j9P3Seh{Iwd$9Q=d???pU zQIN_?YbOG(k8bNWAQ{5qf6Y*+V-U|T!TjgFK@5n~`5czu?!ImxW&s+qJdo+>%Ain* z{_V8=8k=Xs5!XNZ#Fc!KMxd1Lh}ulu&WAE({7rmKchcVA!%c&7z#iJ*yJTcjZEcOB;J9UMY^&XZ*jO0XI7qLzf24mBcG>zF$!Mp` zUO#y@&W{+*PoC^-sO`&)YwBScF*4}uea;q)!%>WG3W>c;Lao}a$<@%2F%NR+VSPTi ze{0aA!pxF=!hCWSf9Qsfec@2qhO|;lvE{(aO8^?_bQfWEOa&jCn?Mdv6+8!6C4vkK zSCM~TettGh#ahC4K8dR<3GEFrJ|&u&vg~ z$*5&GOWvb9F0~k=NLp+ztgT1VN{4?`BAWlJ$~)J|vL2209!X}umv-rqW0_364YCjW z0ey(hhqO*ao+Df#ClO>o-Y-RHMoT?x>H~u;=j;6fz;o9Z;wz0vo`qQQ7)77W50x&( z4z7o0IuOOSf;fMhpl7fbWaMIy93m;E#Y0$MfjcWJq@aZYJGF(tHmCuq5_A~L)VGyi>IZ)t1(R)$llc7aog2hO_Aup? za^{Rbx8LciJk&r)XD&2g5Bbdr;THRN9~uRnjfDC)QSbMQQ+ixR_7XU6GnOP;ewUzJ z+Y2)2(QEGxyPQB7bD?NB&}59TXhR`&+IdnQZ&RRpQDR zuEj2Vq_m$UwepO%WtSCHS`&Lca}X%m#yY5JwngiqY*Z`8ouC4I%o#4MA~(0Ssx6Pd z#7XxFYGJy}I?AjA9|i$g%b#z73uw|;PsJTuHeU@B7+1jE6O2AGB0Zs(Zcz{Q=8SH# zo$yo6rn z-o1gDE~d4Mn+DEj|546w65XtXPM<>yS{xxrKyN7}P)H2i-8!IVy~HiQhn&BY1MxpI z9|@8kt4)oZZ$ePk%OSmyLSvMqV|YCe`_hc?gJ!x8d&4N!Pb~WX2F~ZRkh@SV?_yL! z%Xs389pV2#g{5tQ=TZ}f!==56dRQEv?GiQAZtwoI{0F+T2*}BV<|@y~u!C5OodL&P zxd0TXAknZcd|vS=sLhybZwY8V7!8A3q|O*-BnV!h7Maxrxcnvofo6^IL!ZAOxyt~O z*7Ph?JEoK^$izE=7{1kF!Lp!~xc36wYI_stSRZ&%I8#2tq4`m1Xeb^BV8knQ-aK9f zL}9%ZI$!4-quBjb6ho?Ok6wlZ?G!$7uC&LpG|dpjTkWeceAq{`sk4RdToXi?ml5_^ zH83CtdUxa69XWYfX$g3w^ixwi(NjqyPX?eDqMW~RAQQWcBh`7QJd1mkwm16J7+Pt^ z|5UIZ_D)SH-Z^LC1wHwnz(>0kJq77&Yfa&z2@BMGM-Q;9e&cVK2R3!DMxd<${tU!Y z10!{g1HDnLZ@{_S^}i<1_-m7j&N=Zqq|QuNQ02KWaj-+3Qi@t`ROd}b0yM~}a818% z>J9yhNl2=)vKH`_=d`13QM25PsQDoxH>)f*Km(Hpl*K!4RC+aXIdo!#=jD4pzO;dC z!KK?NWjcJxq|b6N0d2wxL6Jj0Os!lRCcrLz_LKd8!j})I1Z2Pn3nkJB@N;SKlt|v! za=dX64}1-_0(|bLjA>i_8ppbTnCFfCvR6=BkIa`q7LEIAT~t!XUJ5;0^EN}2x&S3D z<`U%aP}a!~9IwSPOUbK3piD0dl?UUD9`S@!+KGJ^as+}&#avqg+E9sec4&oj9V&{M z3tJcI+-&4l>l+8O%1!}V0ZB2CVw+5ySu@^+bhUGNM%~a*pm1>eUGA|pysr{Abg`Oc z4#=NY9rQN zD8o$Se>iS7ySx>R)cwHXSb`@rV{eprWu->@X>0T+W*Nbs1Xp`c(UIqquYz_o?Tb)8 z4rQ^@Paw}+q$9Ur`ScO+GJ!|T>kI`C=70f}-henHZAA#QuSAx5-1F7$T$OOQlbB;>dc)&cEx}nuEZr z87Rg^sYOV0DHQTyuj)8?+Lf8HWHrn1Aq;KrZpR}Y@o6?S^=Q1Orx=p8R@sJ92PIfd zOpw%70-#(21@hGVp&C)~>bUv)1mg_%-eV2t=!OAZX|*mMHc2RFGNzlOC$zx|?Ff4! zhjLE8eC_-)mCam=iRNMeFvdD=ysd?1f!}~+d5ku;%ZZ_`?eBi{rFf|zLtFvJemWM= z$ZqANjbgKNz@s$;F3k^;t|$#;E2=^VA->&*w`2Vus3flg(8;WL&G+Sblwm5_Sz`xH zs=rw?Yfl}jGw5P9?_2Ns542sJ)WqnV`uB&^E3Kt$>v6#OuO@9#2vyAv!dKq1r0XM= zPHn4yJS|+!PNsLrPei@au%zZ92Y(X!gXT58sq4f^c~;2GbDdj?v|cvoMf z42=Nd#OrQ%sT2Bv?@Tsw;nuNFq|qjJ@Bk>W$ik7?$z%W>+v7@wu~RqjDs77!c{jG^PJY;hI4fY z=L%$;e-rT|aQTZ5#j6f03 zQ4HlqEwpXn>D2B=?2LDZbKVDPj6FbigVAf9uX0cGSsbJv9GbOGcGmbNLiKr~|CPt` zND`@;X83RQ%(b{$a(9pJg2KJE=f-cn;}C2cc`erx1=U=$Kkwv%wf(Q(ADS9buHm)( zG6pn2Sme35Tf=gm$N!`T7CM{*M(~6MmsHH82VthfC@+xLtqV2iyt^I z#)747OtPFd4iVGp$n58Y-3fg#sU|sOP>Y5w&w+sz!rz8_-bitLltWw?u?T(qsi|lK zuTfp?{1_-=_{HpV4{u4(P4l`v8{;5We$d7Pdo?1+TB7e4;@JE1zn@OM{#T35Xm04y z`Jg|~OLotcr^vCv!~364dT3@QERA$%)bC3fVR6JQ?e#3GFZ1oR3s!jf1(LY$SF+G} zEj+A_pIxh$j&#^NZvqWfTOSHqGGE0M>u@Mw$fk<@2ja13@5?t}BN=jf87)1SEIZW&G0t-ulnuT?{+4XKr=ZP5)`Yh^t3eSUz=?( zZ=nk&@PS5zvZCfuu^9#)m3x;XUd`svAzf>Q4(f}R9FVoef*Ke1n|V8jl#q^ zj>Ln5i3@=|B~z4jX$wy}8*?xdU10u$S4kk|>e<7(kYSz(_J}}IR=F-58Yk*Kl`N0H zW~~4$Ox#~?fI2T_k zS_~c@#TC1fzSs3y_T=X;2X>S{_fLo(FK(Ig!5%UQ2kd)YiG%ke$>Q&Sw;}v_mPX=B z_{q&VK|yM|>5^%-62rHa7(P#96_JO=+`-vK?_EML)(?*q#I#M`)3Lm@)8mlde*7Ip z5vES#Yl-2;SLPOoS)i(D!@R7*zfIa>o9KRk)_Mk=AFt6pr?ZY8!|S!&FlKEumkD>= z_SM6itE8Q;Pv}c^5Q2qpy@>rzA5c$EFy+smq5CSoa$ zEczns1zx=~oIT5lFPe=8iD&O17&sn6yMLtGzimMT)0_Af$w2%nArAu@0bjjuh7miC zgpC?ECWk|;L9l+y@i=P0!guh?$0Wt=C-qYsYV)3d$44$RZX~5T*u3zBF@dIfPFY~( z@uQ)zOzu|DSiP=*`b*B(Stbq7>Ub(w+8lTJu|!8`1*=@azhbDV;#Oy}TST;r+uyq3 zZv774$l^t^UvpwxsFQn+{nITNu%Ti#r}PkVBI~*u70E@R}D3U$FB1duyh|hyN)JF_e_gQ~ikFX5f2dcdo?7u?$v*TL^zMoG6jRcEC#( z*^Q0+TdMrcJH~HFENE0dhDO+zQWIF;`bB0ie= zDnO=F`4Ytf(;v&Ux)I~k#|x3=V2D=Nm|{JNxrykYE}J+(kczsIL57i9&Ky?I8}HX( z6F9cDdon-h>L3=f8F;i7PjE+ksN!H_0gDk?(it%HlT*sh5}P;+7Os(CdC&FNf+AsIof%ITbCeJFe z&aowMBB5fhsO{c!A*rt)7goFDWRh!|;M1%3^B?lv%WC$TxOa{`lRhck*i&wuuQYm0Y6L0}PiS=5NO2}lYjnb81Klm^wI^83PW9x2 zAd&%_MSWjuZ)P$T5X^;GAwxgE#=LJcZ}}$WeZ#gPgko4hsk3WG@OEi+Ue47AJi}?R zKP*E8f8i=gLKIL_EhQu`>b0OcVwa!{oGzV#b`w|-T-LAJj7 zAJ+QjP;&l$3OOQDEKpm^(HG;V7agabD;f)Bjj>>tW=Xh^ojW{otbf`{r0^A--=VRP zK!KKJ^vX5p!in7C(DbwZr(5wd?5r&-&?dh(zL2D2fA33Btei5I3_ncOR&)<(#`SP! zp)bzAoU&G{`nw_Tp$Ho_+6dx3eKDZeKc$=mMe_%^jO+{=(V&zUt>@~&QChqR}o7V*IEJ1uCzy#Rgk9UgUDx%%H#;b zNdL5J{8q4ZV{j#gLs%_ijQH^SvK({dtR)g-(XBYX&@)NQ@ap9ZJLVyiRX$N+TZW$_ zQJeWToom&$_f><*L!H0&=B&T4kF>8~6_{?f^26v?VWgSM1_UsECtLE z$gW}KV-%fV)T-|o3s`#ae=vo2r^Gwqy0DqFwwgc_w6G*1c3pfc>Pa%qXK}-+ zM2=NWm2d_{KGx6Tt=1DcMtPqVFe@q?UNk5L{O)U3A3=H88c-VT>k&S_|0)3UN!{8~ z^%fvq;1ka^{QqKs|M#Q)Atus3ptSj9*XEJqjJO~$)gJ?^$hQ7>^5<~JMf7z8H)4%~ z#j0T1mJ35<5NKoSTj+vQGwq6#baZz`zh~8pk(ph)DX0~0eI?6~zEJ1(gcXP_slFLQ zg*vMLOdJ!{I5+Yjmgcx4iLp=?eO1!kH+Q3tY#8$Qcea-pwa95rHp9AUm{)c5#L17xZce;suGfhfnj_D$+pIN89#x)&2Mb9X=>Up1i&R`} z%qLjo_QrVFIV?_O!HOEE%H7f1wya#p-*A`o92>GGaSzB`2Ez;GE={G~kMv)wl`Wor znz3RB7j)5{$0kpaOeqj0EAAi82?~`P3_5d(IypZ`9Dg9wuA72<>ZB!xuXLLeCVJh* zFdbAp@UlN2#A#Z1vgJxlFHw^`jV0_~tBe=2ul4fcZBhCi*5STk(}zqY%LF5ddoMxL z1;tD(QohN#!hZ?1G+2Jm?9&}Igs@W*`n5&5Eiz574v8QjjMGC^_)X)w!_wRT`DyaM zR_}F3t9*T`L@iZ`x~Oiq?&9)J{+N#gKdv_v_Y2!kM8}(NTkdGNoYjR)Rhe(TTPVt? zkN*}%uzfHcB=MD9!{_@us%U;5_;)}@dO%(WY1qu60#ULtS$Y6d>fx~Qs!H1(HuQ6HN&qm_XCl@@W_C(M&^pB~!|Tl#t|#|?5Y$CxF)mgX@0BP_SDO_CofIg)l#d{Y9($q5bX++`%rcnMFW z*;?+H+`0jZer|j&5?4Zh8vh+r!ppt;^ZzcXR>{IP|5<2zhis+~NN)q!Rj+tJf|_+9 zi{s^?yUcEZeVow7q59|YU6+FuNMuftjCedrO4#Y{RXvE6uTImRM|ce*Nh(m#fais< z{#E=zT z%k8Jb(@3h>VPpC^Y7o)?)sdfP)wI;?VJr9LY+kfSO*#QDu1$=Sa+4?QlQF~aJmrQ3y5 zS&wkvtx7tMa;{5zL*@K!H#%udzQo6({aaSp>zV%v5y1~UPv9Hs;MA&@Viz9D7gb$; zdo(Gb@vcqq8J!o@;Be-DYjg(^=$fYb8Q|9Ne`tE^xF+BC{hyK&5ecP3KvINZKH2A>&hHcWzos=I>6U9VnaW9Gquupej6)T!T+?z49B{NBfj3&gz-hp6!`j zNL+t;*UXwkAZs@B^GGCCp8hXGQrO<^TtI;GNl$wGo@DB;7>X})WPH@0)M#WS4*XT$ z(0>h2j)@Lpep5gz7v9+W4&m)4ooSjelf&L>C-J3=8pgR} zTUT{6i`)*h{(e+nQA-faoLpKkHJg6?D%J?Q?R5u1o-m09rGN6V$5igs&-ZnWh2Glw zxc6-jX|aPgX?&G9-sJ=|!lMaK<0TnAi}St?XGLr$)Zsl^WOexppNhpw3Fm8ePWno> zxqda9+Dak45kU$7{QPb)E;>|gL#%4F_#B?Z1+qR$qk`&%)%uCbn|B5qjl2bY;At#L zrbS0<9MF>zx`gZ`^}SMFqaL5lAW{#**nO$>G$(?HcBf8C&{!V(B#tP}JkvKy&5;a0^`1ljY3e7?*ahX2w-N8lCHI|Ej(;z4D)sUI zDr%ANzqy@w{hTe!X;3nZsUVcHzbAWQ&sA&}&ud#lqU951GoiaCHkSY8uR>!|VpX=O zIp&E{yA;g`q~`osz~=pAw7adZYGhOwBH2sN$%i+ARg2yu+3UAv!AcGIK)P8kEU0T- zJEZMQ{_xw;w8-*2heTpQ^i?^pt#!!1gyV}CY^fbt zndYi!7qr7)lI+vdyPPxnn8DH)QsfP^gA~Ojy(|CnZksMJ^NR6;Wb!T3jvC(n^2C2^ zQ_UYC&2Pk6X{lx+M;AtjkkJ>Us&FL9D{{O9v8uz7^mH)oNn%Y*HA8fCfPJw=qKrkI*$IccrcbXs@m zH!u5Xdjg}I?Zx@?vs~I&xl0|&6fOph!$kDvWH;*gcA^in($i%(#Sua6Ti_okD{?<^EA;X@e?+v-}Src1~spX3R1Jvm3I>zM%)|@ zErN{dKw!O9EWw%A zvEd~`=VqZse&JGn;FWs~OK65)Q)YanOTE9H64uNqDThStBEzr%# zZ{3)4RRZX5$5(YA&;!eIUGJ;9@qpGWYS_14=Bz%FzvaF~0-J4D=2ix((1PwQ8e7*+ z=l0YT2TB(sW6b)`n8)?>8C{Huo9z5P*Rfyz&~cMXBy^%}UBGWv_$E~zB(6c@%=Cey z-*w<#C(jmQhm$E-CZ*)l?g5$h)~a9VX01|}tkwN_6;jsk)6#DR(nfQjcfHN?{Art! z!x#3SiY->C;%y!=yH;;bFd)xKDCVFg8EXO4pGs&A!hEy?3qE9w55USN&urG}Ns5 z!v;Rx0w2%ea~*ZGY4dvemDIgI0BO!|bR9;A92p<=EWJxyRwD`Z=e+K8!~C3}O2Em_ zngIreoX-pVNRdr6%!2vFK=1G@jRV~U-ZYQqqM>v4`QH~p4;UjbZT-VkG|roP;lO!` z%P(Z9z3|BftN5&p!&d)M`5ygtW?$~tyVLjKn`z;5kl677~7JV;lNcQJ|NZGc@)z)pya z&+8+m2JJGdzU5=A<*kRS+5Ep~MeI-Is3nd9 z|3;b;RIDw{i4*(V_S&t@3>d4V7NnDF_MjltLU9^Li~nKe4Q(I)urdLkBY*hSc$baGSmD&Up71qh zE$4a1e@x9Gc_CO7Q7;pEM*A|mnuzy!AYn*oyVDw+KGY}DL@GuL0-=em4;B&^-%Fx` zSGqzkUTkiwu7E$>Q~STRGmw7oEO@8OJ4#tZ;x=1B)VbwcXYQI872yR2_YN{)?{MBBm#u=6N{fZPx>l}Tzd8&>SiN@m)~SRE*=l_7-0f( z^Yq=|HJ=HE1&2B|dwMryqYOgf+dYW=dZ@@-Q4T=P_>+A8AY=9u!S6l*O;BuB{r)7N!dmIGb zn?wA7Z?;ZXFnA?`fukLZpDt+%GxNsx+N+tcN1TmA$_-c>roYfk$45dG8^=b9xnTmN z(mN7Ujp%kj;>D8HvU;BMFazK@>VQ;edf4aC_{k16T0Pc+ho~Im;6=DFT(vAihx}Q2 zZ8Na2_05vtp*D{Q+0#;+yR4>e49woZwd}5Y#BEbuoB!WcYO!pJpx0D z0?Z5xveTDzv@xEq6jaJV3@r9Teamh%;b9h`NmX84Zp2x&ESkX;^>zLYH1%aa6`W6g zNjZ|v-fi7r^^j))O~)c&#wrwakRV&^-3K^1!uDUBlDP^9bu(#Ul7c_KnQy8$5~(iu z5@)=MnN}HR1xWSU!SQH*N>yEi2)8`5(zBs+rrs)9dzq2oyqHxhyLTp}Zzl#KFVuy1 z7u=vPM6qh@7vnP?y?X|@d*^rRj~<55_;k^sUA?8+%nd{X4TN7O?A6%y0$y+<_M~-YOMUzp0`dQ_TCQSAI&GFC;+9k#9>Z4rgVaHP{PAEXc;Q%ExAbQam+9eCKt@6$7x0gEO|@W;J^*uMJYL7VlJTk=ag_?Tk_yxy<=?Mn!5S1Yg8OAMybX!~9$v{m- zLi)f`F{{$WikdzYpC-2rCaX={wEl)X-OtjI>#n{1^LdsxOM`7 z^d?p6p!F64u}oE6vf7_>v&QrwZ$oXthpyUE~4ojmp zf5r^$M?m+t4vd6Ro=CN6HqI~D9YAX6b&$j28~b$;T6lQ+QWU^MKmS{D*h~B9`KDsc z*P9@Jmn0w6+J*!n!kMr4>yYd^l zkO|^*h3ERzjM#TaS2-mE(6dUdG(+btD$7vyH}=NwDr;CBpA?J|XhqQm`mLvQl47aY zbx(>c-C1WHK8)WBNxXe5gDv5eG<6_6oAGjcMZ}xK5{n?e!{i^2yfuUdi68NrTPS?_ ztWzpvCeTS*b;meIYU|Wps;+6SBUyyPeEE4Yl|G##^+Vc$yz7f+{XdnkLgYwqHgONA z%*tMy5N53l7OzEK4A$g6TrFp*)Lt|6M8~jG11%<*hz_oF@4=DCWT$^8txR@(PiCf@ z*|#RKu=1s6P%ms2<7^+X#+Sd}WXhDu6T>)+O*UvWQ~Cz(;ic0(otSmAL(03_Fnu+* z@AGygeaOF?Y^sMvTiysHkx|csLcZ%&S*O|>2z<2`ioe*7jSCr7olf8uUFDf_Q=bSV zoWQ9oj&BP;y*wYg)ap^Dk8(+OFY(9)s`e~iwtFY3K`IqoI+8>PEmX6F|&1>)BeJxrSAlAeHBV8=CG*5!knS6blLy zW$|UUtazK-{cm2^rtotbGUut}!B&&1{)s*(+ZuPnva|RPi&M6cZZac|XLwYVMA=;# z>wK~FZW@(jm#uKE)DXSs6*)j>q+(;;$e#C@K1}TLywbbTcr8VhWW0la&x#`Wq>?of zSyr8fH94?><(3>g^Dj{Nse9O2nO&!R$T9f&^N^u=v#`3veF!UndV*5qK`W$pI)e|)flI1D(8~pi(VqLp!MW$ zThj~l7)kMOWUL#zqkfQcl2j0B%V8e$b0I>N2}S1-0LoE1v}QObaaoxSTb_f1HI~59 zr1Ee5S8b%4xO9N`Mderz{CEhK{g{g5qhKcjmi^pTOqbL%7%cqkvwSugcMAL&M609d z)DbtV3kSRiDC3M`Qi*6`zlP>I+=D|K8SUQoOmasSlL!4_2?Ra;OnS?Za@I_Z$7Ip6 zlhFqQ@BF1~J9pN6>~fVuj-(4Y*5hN6XxRn!V#dZ6*Sbm&{8{SIB!QKW>WTtgyfc5} z`}lAZGkSZ1vdVswU*X9=CKJ+6b5nApa~69Pqyj94nA32jKSP!j2@O9l@_OIsGsxU2 zuUBoiPC<&}`5_!H>_bSH+(lmkFHIZ zY|y*zG>nv>7p=Y79BY@38)eIwJ)rqz+HCKeG9)1&#=IKCujfT8)J?XBXU{?RG@ZsJ zgL<0#clrDtjTE|0L)QMAE3Nx?22{5=LaKa-VF#7~dJj>qjNm_|QWOH0-}{}yA?oKL z!nx-X9aIWMDaqIy1yKuBRICDTt)34MT$Z)Pa*VXuKS^ocy!^d5gww@hYh8x5gd@}0 zXu3bfPvh4;le_tmU~kXlOi_w6u&+yo46BRg8snzlnWN}TR{mt*mr6Pim@4l)i7Bwu zlAtdet}a-0ym_^*ueq4$bojKTePrkmijS=@I9y6~IcEnBH$kVl7~iihUIBDxwI4@> z!0Dzk$16%#z<)I)t?jLyIMvYG6Zk7tjOY(@Q?mx<-+rH5vOex#A6+G>SN&G<29XGD zGDk^W>}i?tESi5}Fp%%I9}AxD?Z$)n22k<|FyYcHI?p^`D2kP*BcP@xNQ#~Y&K2Cy z`WPbu#*qAAo?mU=?n-c~xnc$a8Tia@o{f?P7KCWolc2OCf-RrsF{Kw1^<=1)`ay&% z$0^rhu9tz;`Y_Q%F^=5pcv7jBUsvx?{f}9(JO+0%$yy;>$uVI#M;IBXMsfSk@7VMs zzx&gzJyMmMqwNytxyU)khSjb;)P)-aza|=}ZtIlMV;5wtB)3ASKe}-K2xD6#!FczF z1PAX1esFvE`vzXlq#%;V=l8OW=dk)w!Q#qD!grAS)2o`vaqIP1zP@l*D$-(V;0gpW%8Kdf&!1X>b4C7SB{%=W$QSgS8$;-8;ydD|cyzfD1ge#5>$?n~{)uV&7<2O)zUp_4dP-xL#lS; zWDa6y1%ymLhR+^P^n}JGQo(>ANl=ErOOD#6MAzV8mrSJa!PB-!eLRO8jyBCN@p%dl z1+8+WE9Bdf_t`RpYC)xVTcp@ERUz9`8c%ICLAbAivm&>64jD(y+?Q(YBq3PWvuWTm zD@iK4qlBTI-@)JHY;>_!i93Bo9APh{e{o@YveG{;KXxW(b z(RfGui$x~C>LFN5GBTBWExa}5PR)|X|2jz}g^E}Iltb%3o-d^fE^DRGJf>t(=m{8chH5%mY+e)<9Dd> zS$_0@d5XI~ z)gdOU$%ZOsAX6ke`|_sV({Ha)lp#hyupugz9zs`?M1&U_ue8Mew@r|K%Ensd}#ZB4pTtRKDs=IQVF_4rel1ftNW%l3mQoMM( zj#YGN(`O*0DN)z#&*6oi=ZZiKj3U$o+Z>e%eZe|c!O*QqX^&f`T8u@bDj6))!F)1828 zl@0#xFe3H>$~eKYIoB5?0&76m$Zqh1kn~oprObOjHn(Yg`Gt%VsgkYFnbZc>_|ltH zx}O?zBn2s%lNDOx17WXff)_5FPFUdb;myiRcV{QXPwlcdAK{%-InyVYF!~RqJ9gt` z6ePbeq;XMKqq)&JVont4^X02V@7c|Rrb>9g7izfF**58(q~R^MUa@%3uPypK)$8GF znUB@4hO?8?TnsX~S34IYV+sfs&Wib)!vfEryOD5&N>AGrB! zx?%LDkRp0Dz<7y>#@1jeYVo6hmL)vcO+Vw<&w85tRhnOnt+HTP-XpWeufZ!#+2fqbP46&x#7xsO%RZ4m5_99!xVlX-`ZN&7@=0ZLwYlQCX_5LX}@U+ zKVoXMvVRR%c5=#JsEubC2RCs(l~IZc$UI^_A)1%Y_5>ZqeAv-c&THiQG(vnX1g)@@r+dMIIo8D;%uARnw7xf(9z+-3{ zye7V1LcfQs1zI32Q1u^rcbRuD0_Nh)6xk{je)DrUlgy=oMQdfI!4GUMyA!KVyQ9zAC~=c`n;i? z%%8fZghm#kKMaOeVWoTl5tm+sYGZEoX z)|KPWXzSveBn?fueUGmLzJMNiiprRy+j*2%FsecE6bWpnf(R{j)13v2zF)#Yd8crf z)9OSduFEpwPk9$J3pD}VpxH|~`NfZG zmhxDpUhOaJXYl+=a<)rhhO&>fK=E4x8Ou;BiLzLt!ecoX8p*eKfziQNals2Hl;OF$ ze(fr8+r3EHp|P{8b)pW_soJzjvW?p;%(^+|u?lE89YOUC8%&QQF~b4T==ZaY=d!3b zA`rW%(F*<*92Y2g^kwH^-z+U(D%#15dR+E9f5A$-?Ge**KsSpZ%ILFshsqbp$Rt1G z-`!fvP-IrMP6K!J&NqbB2)Dh2n!%en`g3vRbeJ1!W(h+TIw;E@{+M3|qv}d&K*9C*#~CCXSidr(FeH2hCCi2at)lf{Z=GnqR3Zrj^I9D>APND zXZ|VrB}_nS?D9{m!koY|ucwe#*_fO-BRtsd%Y;CSH#TL22=zge7P87ky4$-cCB?|c zec@5!sueLn29SF5Fh0pgmQFA}_o?9WH(Kgi*HkLgwTgc}J{QCw*iNh?*39xgxo-{1 zaIU4L#SO{Gn2Xk-;PObVj~pmrv}^QJZ_V=`%O%-=xJnHqnKDO!)JCv3xW!hN-`#_* zU#(a(;ZnQIGriv9IxO^!RWVAy*>2^Myl5I&SH_p5Uijo8Sj*w|%#uIxsp)j%TOkju zeTFVjn1EI~shM%@C~D$&>KZ$~=EKjDzbwgWFDt)BGg_`E`c-PqEAqzqP*1ds@TrQG zsjjy~rQ`xF;lY+}8Iwh?CM}5&1S+k{4sc#6n9jU{k+ z>{~#R9|R_vxTG^|GxFlFr!i$`wWAI10z^WNmYVa4-Ujpg%h!XrHLXccX4)n~o-aKy z)x^b4mH<)8jKjWnL-z`PRWodmgGP)WYt^j z{t=s?0K2viCedAaxBdP#^T-hn*sS)VDkyK2&@17AZf@1GOA+}N~Sna^Ap-gpm;Kt+*??<%n^ze_>meL((fsMpr8>L(L#}#RDsXCwkc&@MK5oCZ0SHQ z^MjOsZ%^Ul@`cjsAS*66?yPUHFpO5MdIrw*(IV)(25*)M%+CWEB6W+|qey$!oUfO~e*##P|%F zg@og*cSe#!ubZRTzJ(ECpKE1}moT?4DeAT!VAaiqm4-xas=Z$MUhGjxL|vy7hPCRN z=W$WxSCqe4$Scc;Ul^G)};)p*OOzX)aX6x>RkFKP1m%$&l6%knP_0ChbMV# z{M?yUuJ5atsc$vV*xJlP{h%9iaWQ50p?%6KdDf(*PS4SBvUL)JO^T0SDC-PDPoZ|i zY{#MXi|;l$X(^dbWxN_ec}FIV6^QPkQ4DO0N##c=BzEz<9SzRENt#G6d! zbHlPh=$p+$9v**IMV^sl?*w%$X{W7diL9ImPpmE~su|YYTYV!V{Y1Y%{-FzVwRzB^ zOh;bBjIoTnHZSTW=F34{o};Atq>ojY1eBT!bAr439~Nyk&tUKPGt1Bg5kV>GjjEA- zskOD#9l0t_Yb6lZabLDXBxC+}dyJEUs;-i*z2T#72jQgTMQN_Gcw)rc<5&t>Ft*mn zfpDOpix;ju+nKU~*6CH5i!`Zp(1FY;kMgO=p|U}d#TX`p=BMe>0G`fs-9JyiYB8Sp zJxpsZ<+)bPwN3g6B$xRP41~+6zAkwdLssNkF^L@>Ih^a#d1MH=z~ud!(dTE|J0Vs1 z#W}lN_+@~8)WG~)q+i%gN_U5BI0`(KOMiP`{@o^miro$d2HhVDGj>W8&&7^{PViL+ zb-{>W9@33JhU?jCeP0T2HVar|Jq|aNRHt#``o0`%VjOGjdn+uGZ&YP4Wh0>rzAbX2 zHs;PbV6n9;;RTp#7F&+W4l@~+G{1T??3hfb0`hjOvaIV$R^qhArM>2GWvCvqWA>X9 z9>x5{hX&Up?-oEpF*&b(HtLuQ)Nns|gGn*|$q9-O%zd!tnKPJ~LHz$Jr}orqzfLEn zhQQ~?3p0rsST?j6;zQwB)Ux`vdr?Z#-un+8^qSA?^m-sw;bC6wK3`x?ywOAv2v5&L zteKNvNECZ-9X^?wM6)a!la zlY*pY_kp$4dr7hqQ}@n9uCH>|1v|rwX$G!V>S{O|n_J{@uRm)gEHXS1yg_Stj^nk~ zD(qR4dWs^%_uezkKyDY|w%xh{m0n42)V-jRmUJpSD+DmDLMJTlpUh zr}`=Q#n{gfoWXgE9yB_~+p0y{$jI8qEmxBFpQlz92i|NHwnVLJebtK~yzDn+TukD| zT&kORc4s~Mxgu&m;yS6~P~<^!#qXZ995D~eEj5+9}$|Sj_ZHauNyL1>;De6T;e7fb>Dvav6By=?Hs+Z?dOkn z8hMm_9@sy4B{`RZvUftuy6*|M9~I#x*{P+KU2j&|fKQqp#*I~%uP_kRr{{mDah*L1 zs(v#7{Ba@Z2am<)GHTzy)q=0wd|2Nged~|ebdackuV1^R{8@iV>DOb5&^)eE!3`Nl zzimZz%4IKrA)b0er;~INJsh=b|0z)|V_hO(|86B;tKk@tt+F0yNf+~Vmw$GAeYNo_{;Q*S?f zE)BDSg|WNn`86jD;io%`eOh?TcAQvd`D<2C@7Ow&8cjcdLF1hhp9ck zWRQoG_vEfWsRx00|C7p*Bv^s19Co1L6jvR{g9a~jcXt*Ncht0C*z~#hD2{wJjj2xs zA_hnSfS9(!0>0fpfIaiF9}pg^B9y(7)Q{>8bSx}EDEp)K)w-tC4|vw9+laarz)1Yrs0~hW z@)oNx7PT-CM@}YUu*oXm73&7%VgEi}O*_HF2{hbb?nUTSiRbow_L|7C(ssjoR6 zUk_wIa0qQTtyD|;vz`RXsIe*!Vgs$bv$Q$D+QeRUSlC`NYVWp|ijZR)JTCA4DQwD|8poc}{tteYlCR{WM80AeZJRDDkQ;mPTei{4(dG4K zw7B(4>9maGT>p>&ZcG*0n8~<}wLkf%iO|J%b;AzY12v|Rc((lkD+0?QAoNO0z0%56 z2Kn=&#liFn^SL@8;2wWJggQD(Nm2XV4+3cgM^ngKKJ>gz^jrS58BV&;D|I0zR~djh%03O?4Z_Y7?ty>a z8^H5)ti*Y_F|4T$DEUW+-fi121j7RD-2(XDub;miw6x$@5e68;sLrFj%ld}QF}$yA zy!F7(mDolB3k1ZF4adlhhkb`FP>VlJr>BFV$MP2gx^s_q^4Xn@zh7$A|1A^O;RXE; zti#l!GVAq)OC6RAIoOD{n4rXSjc9FD{Y?Dd)!}Ufadt7c4DD|T^y0YV39D_$bSthz zB1h^&#kiY;q{sFN`w`C^uW#RRXchSz;4E)>$?hAGn$;QV~rI zB7~-t4KM9%9X~L9pV<=+apwtyVp32U|9D}TIHZ8G zvd`;=FQB!CzK(%F9ojnS1Y}I9^LGcV@ds1krrM7Aky3_mBoJ{~(>;=upA+~WmXQq7 z^$bPeL{@b1x)>gKFFf06m%n6A4|E<+oIa93oVS6rfhZ3^>=9dEgMQp-#+uZlkr;Y9 z`R9-TCf^|X5nRi*hHd`_BV;*_!d=wknwpocEF`b|P+S;#I@?&Y;0v1zXh40qnd+cj zv6MZZ&8wMjLO%IZ(Fztu{${vv6H)2xRv$r0AGH~^kLD#I>FsqFHNu-7h(nkjevBqm@#FcCp%*B@*dVC;?4MssG7qm8B+ooq> zmD$La`Wi(ZuO69ri&7v9-L<~9(+1xr7Sy8~&?-W|>CEL6U1>Bnsdq8U4rZ7+v?aS; zb9=(V+>HYrY`Sg;orbI74ZMddcIKMy@Cdr}5$r=7tR z(2&EtBF{6rxWAO*y(G0B#}8DlTG!?c=AqY!bv>=9>@L87zU*OY@%{QE%D+?va?y|@ zL&Tdkw#2yKmN;;{c{nO^a+77Ls@4TI9>Q2xUR;}@wDgu z(6?~=vqH$zZ!B0o1E=Nw9mn~DmF1!vHH2USRlj;^+2t9xkYky_0ZzZ;8Y?_UVo*21 z$c<&=Z-V8o^Z(FqwHUUiCuQDN{!Q%!9MomaXee5eu87C{Sz+e!@Tbtb8S>TR^}}hr z@t+&-`SN&KB>|RsSzf`lKT1=>K32n*^iP?i>UmKxbouYVGJN4N++8KG;#u;`<9Z;4 z(kY-=_S4F!(CAkv-!l`5ZtBhP8=pL+EU@|6=e+Z0Y2nJnkD;Ku{SS+{;qc+)VQ^j{ znY}P8H^bp$!ngBPcoEoYUKHv8zTmLqjrX0LU@_kxcalsP@nwOOKB8ovbKmKR2|ln;3e99h7+avy6B?kydFu`= z35gg1BLG#Og2_O0N&S`p8x)aXQ6dML%1`}gb3^Sd!Z(x-zw5Rp>YKeHUA^HxIeY>A zThD~@scx50sN{!8Y|=V#$qZw1PvF3Y?-EJB?d3)z^Yz?c&;D?8!E(cRvHmb}_ap2K z5I$wbp31sC47cZsKpUHESYL{&vT6LQwE9%rnR9b{ldp`hTEFPqVRpO@l5f%mLX{%=^f?3)DD zL(TC=yJno`FjCWH|1l9}1BwMWGr(EO7#5P;e&z)TIbf?*K0AMM-Z; zK(6VHZ{;E>@b+1wX4}bZr;_AT=t~Vk8dhZkZT+7SL<8_dF5uSibC~H<{h@03$Zv7^ z;JpRdQ_XdV9AV2E27icLR%(PrJW|~TC7U6)KOY)nPAYYU7!0CnO0Sou8t?}8$xnxol`3Q9Qm{p9< zfmmdBYBoE+Te6Omu*BUMR63j%ElnYkLdQIaApH-^q>6(6S(%B#Bd;!Mwjd=N3nd@n zzB;!0ETQ;l4&3!v#B;ZsE7j?!Zpp|au-~7!om(uALDuzvUSQp#L`fWy&9MvkV%h1K~}d!Vz?Jw6fzZ5$)fQfTEA3;&71^T>{4(d zJS&6RxAZlf&oWp>1j6KJ25*A64{+3C=xd1}W)Q!vzmjU{ue)@|iX+~F@BX~1XLHmL zfM_Z@dngJjvFNedlrQqc+nmIs_s3Z^N2~ADL3p*Rmsiyd`7ak(JAB0K9_L{`HyM$S z#+MVB!*KTyawSiG%NZ<$J@RS+2)JC$UzSgeJkl30|4Gc0n!H~6;6wrK&~*2^v5u~_ zlCpEknujwD7aodS&>6f+yc2$d7d*AU;I8a(TqS81SG|qfx3y-ocJB~4l5LcpTz8K5 z^i12;2Es->7Np3Gqxv5f%`ZE+DvPncQ;7NE$>Q4@)a1X)MT+Z%XEbLuaSk%Q4TNOu1p~3<}8y|=@^?r!S8dnr| zese>=SLQE^vd$VD$o?rf-@~Y6-EEw^t}4c;PgnjjU8(11En=$>BT{Sxvu-*m(f1q{ zT-WI=A>KEUG#nF$%*RB(P&K!oqAR#6GAk~3qs39&;%8cQTvbj{-@z)<+95hSzkWz_ z3RJZv@y>mFU;MvS!4{m2m16l`=0`*&HuV5qEH988w=evdX^Wa##-u!YVMCFwKAkzy z)8o9bzM)Ie}WpuJspA{!YYI1M|zfA#EasHvzrp;kmg_wN|nZ*O~QJUy*{l zBm?*NYkPUrUUGuR?vz!_S{44NIi6kF zRrA~4sdYoL?d0!O82|ptn9q~kox3WT6iPJoAoJl##=?sbFTISxVop|he`bEh7AA%W z>H;pL_BxDgfly5P^9$k&a|F^HyJgWez-4@PX7;?F`Qrl_m^O?Oa{cn?C#!mWhzsj> zzfpVa>^x$S#v|Dymz-w`2+I8wInT56`Z0b2Ol+K>B*a&}x82#}xA0}?Qr`fFi>1Qf zrY!=V?HsfQR6CkvSe^dSq$pE~)4QY_Fc$xf*H!y-@hxt$a>J>0EPw07UY!qSSp40{ z7-E)`IL;@(x#cjh->U2Ntq@$&bhPo)HI z0I>C7+p0r2i*ejOnuHYNd)^-uY!t^HhRc=*tEqq3mM%bQqYOr*ba^SnxV@VO7M=w+?eL0>{n=WZPSFuW0s#H&@&%mp`8NVsXSIw~gI_m6^(6TsADfzox z*J2?MIvrX%%iaDj{~hsqmM3^As4UYaE1nJbeYxF(AG{-$Rgc2p$FgsPXezg9B(`Yl zdqJ2E%Fi|#$SIPcve5qAfQPh7OzCT=ZzcB3I9t#Y`z2Hk0y)C@OO zyU+~HZbQ+k|7#+1vIr-C1#}do zDWDIFlC)=_uw{jD#CZ+IXUF3Ek*Ga5DzR)Q>b!;8M|OH{TsF|D1aLbU7cNZ0Z)?42hNT?zPSgA{*>aqu;uAL*W z5g%ThDt$Ws{vVde(^(!;6#MgfC~-5sJ+a4M{+htiJko{KxT`CrvXa|EY|3TL$Mr zwHl@45=Bx5|4F6hg5BXiRZq`=v%L164gvIBpxVvYtmSAzjGPZh9Eg*QsQ$lKk%`=# zs7_Zw_B^(g872x7zo_!4$!P`0*dd5aCca$5KV4?QB!a)G z0Y{y=U9sgi_u-Q6c?X(t*{AB25W&(7>b-sOarJ?Yv>~2HQhDFwgLt;wI%Msv+9oWn zT_?)LSu_dutoVW4*t(9BS%?MZhw-&d1O%UrG5zk%{KbbGPF6OmsbbiFSjJU6JowYa znY>zYte+0FhU_r&YSi>1g8AU{e$eV7B8+ESS?#`Mv8E^M@H{Fsnn33JY}%X^%A?A2 zVVp(?KWi{H=|yBvvJ9Q>R2M0UT$A33)aB~E&QIea!;vyx0kK_~lVC3QzzGAD40o~a zJ$Xbbvo@i#t8dp$>_MO>HJS1QDCk~E?EDWAais2Mf0)-m;ekQ4eX7V>m;mAV-9~=> zXHCQR4g`!B=f%~BM?Z4+LLZB$Nij{WT8P@_+KGxu?y@DlcQG{i4-0>!B>h&BVW6NR z+jS~Y%{|g151RXz@7eK7(z^J&-QDiW!0nLT*7)X6b-G1jKg#5}zsVX|}ghEOH8x^;PNI0(@1=PcBcB;K<5ABHGS{u0Y) z7w@9mXK@eau3s)DiICdoAeflS5XITykK#7-I=NekM`3ng%JQYo1&eM~<@R2WAH_TF ztFYzzKTY6apN=-LJGDtNrMm3b{1PE zFEX(sEy*#3DlNPRmRmr$Iov^v9!8aSpjM2b4Q56aJiq_%^+#q9{`{f=QwfEvyzohs zQzKTzJPO`D-2Rf$p6Uu!9>Aqb;>#MCed2Ef8s`9SDpY&KKWV=zqD(AQ{Z}kXK;Rzw zhxAZwRY~Agl_kA(!Vj8Ai3q`bS#^GB;=4(CTG*O%P;<$jw$H}O1X7?MHwO9S-W_j? zFG`c9hO2y>NcyNI{vhTzQ*-*;8&Wt1?P$ahq=c(ecYmKB?@V)ZZ$H&SwipzTKraSo z25xVrGDdMbET_NgN+{-0xyIUwAb9Dd@9z$B8^gthO7S z_DG4)v_`xT$8gVHM{V-oG*Toee}_Wer@Q-NaUI0koykjl$EyX}swJ9_$pnfM!5bOP zAR4~XBvOy7J;lcKOy+7&?9(l;tE+y&g_sydZ7r!s^Dat90?{+JF`6n`ukXtVk&?+e zgUXM`nWj*MzT}E8p(Cs{STS$0}|HNB@UqHiH)7 zanSh^4>T86Sa;hQ51>^vfkzxwD}fqBSHAu>XMjXp9p$#3BH$I7+G zJ57A8d&!-+1vLf)WE8vWavl@XD9UZ9tOvnAh-?~5CoNAc)uTV>8c~jaH~F@g9vH9# zk3>pIjON0VGTau6Q<*wBg;CWBY;zEA0LYcI?(OWml;><9i6Ddn^Ca8&`b!aUyhQ#f zz}%!Wlp$ae2#t?F0<4dF&$)cUL}(EC;4#0-Zoh&A?5s^^T!j3=)oeLZ^jY?c^KDO+ z=o))(%U3FvZ5{>c)DxN5p?tSAtc?F*)o{C+yBM}r_GAl(R3($X#6(j|>_mox|hjusH4q>=6z z9bYQx zForC>?8$0?sYB#7r|tQ&UYKnGCS zhV~}Ivp*38FYKVRo$fFWRob1&h~)Efu+S-!!rH%^BB&Fsl<3KcWi1}PEcuGbT8lA1 z(5e9*s%|nP_cBFUglQSXje_J*WM*zs6k8-Pu*}byodS16;1cUSqpQ#rECrMaZ=& zpJv-BKrtY5O_%#eRqY9QLfo0Lce7q>E=&wN14Q{);I)GWAAct18^4|4OE~bnN`d-) zEfKQNpDv^>O*#b;qp@>(R6F^#XC)1a=^MrjBx!)AfwJ)((0GzZvtVkW+^4Co_>f>N`lkF>#5-(qTlr4ztmZdNvOwU!{&ylfm;r=G5I@yh_2$m?N|)EfjB9znIeq_ zyQ}0HwpRu0KKWj~vP)!TR;TZv3Z9Y}W>AecN0e;PnpB#9Buk6)AU4FRa;5x?IKA`6 z>zQHYU9-Tj-6X#mkcfIk;;Y#|jRDirbnaq%vj#&UHU<7^WYh8t(uYh4##K$?>Fm$~ z9x5T~d?Ne#ip*?ysesC7~=|}x4>ef!6 zZDAisEZTovMt6WW@>Gych5aK)F6e9K? zpwAV3F6LQfi6rBf44%0z?wO;{NgtPWSjc|ukEgeDOSI7cJTOd=fLQh6)z8|aD2|_L z7}JI*`Qa*_7~!dRfx5X>^);+5jYc?$%NQ0^kFkii%=qp{KjcnE_U??^QX8$ItKtN( zrCfBfJa*B=+}jUMPxC4pku6@-r)@p`7lvk+(vS6MnZWzfjYBqcQ2J^T3jD^uf)3qSQ6KV~}T8{f#QZqEiRv4W_{>?qU)lLdytjZCfteONba$|jpe>8or&6Beh z;&CNSskSw>%AVFY7@h85*fz7eMAk>^$P-&Y7kS0aG5M1r;nusng_eq;f~1x4W66%@FqDaVhS-$lr3oHMS8)+<7#G zy1Xvy{{fne`<=trLIvFSg)zP5;w%4$WS8fx9yhI1$HnrmA1z%S)%Z2{9m^zp;taM4 zy{1{?Kv(fEe|a)B>N*#~hGD;?9IB7(5p%)+YOXkum$iTh48q8Z@8jrIc+risv^>@_ zh1q=d$xZHuc25Z23fmM5=kga@;bJ#RaYkPGAM_+oUrf-{cV&z5A0aw_C-%$-uJa?N z;oAL(VGy}QETPZ@x)eR6D1jdCm#Q;GKf@d#Z~tcpydKApr~ zi)p(c<0>(%ex2H>G-X<8xGXdQG71_uRWY`j|me3yn_L(EVlGl+o;hFamu*IbQ=&0^9Ei&}N z9^kS2(2_C~{5$i?lI0m-tW&$sCH1m_9<|;~;w+^yz7-E9rBugOqGo&2xP6OiK(^n* zH2-$Stl57YNn1tOgehWJSK1hE0BJV}>J1G4b}}5U$pxa71t^{$iS^1}teqI9nDW=8 zZb&9)nL^|tPr!#Em7NNJK?YmQjyvN_IQWI;2>!qz)`O9D zT~FZWI4g(e@j`OCwR1IY9wJJH5cYo*QGUsH2B}UZtmPPKM}jk;q`Fk6PAfkuB8p%& z>5wC?W7zA!KSKNfW_o@SRPS47n7%UfC)a(j|8bFQVd+JQ(nk--3I3qOY9Ld&=#8Nu zjXXO32Wb~fxD4> zsvX3i&bM)YO&I*GyHOd(f^9w|wZ8R1ETOh`2f49voH_^1K@qCIN(Ch+CL<;@`=vfX zjb$>+FD2W9mVsD@V|Btluw*Y*NRoYD&Gr7)!SSNnfUmCk2WBZ2Sl$BQV7 zz-4E&8X{ELNeC;Mt>P^j=2KrYZ!W=K&UX;RnwfEhproi;+l2}^Jxr(79%Y+8&_15l z&fEu1>|)?UOvJ&r*CsRgKqtZ!HOlMCWscA7g`-#gu1Zdn65vn7Ziqi4=?EIiFjWs0 z-7l3{0dZfc)E(?=nI^(|Ixp+^4|?d5D%iTcq^qg3$KwH5A?jHr!5l6|!g=93(=I;bCN>je4vUUP@riV0RD2V1PT zxEOe&v&IRSo3UH6=Zq{sdvpgag zKMY$?#!Hj6`}^N|nVq$s4&^GlH(_xF$`J)T?%PnWRC#MgcyKaRxH(wD2VGxa{GcW* z^Ew;@XNJasjOL564Fm+|Xe6G##p>|=_19}Cm>#CvE;qV2xU4*)VrSk~=MLxQwF8AN zrKrr&e?JY5nqF}T-A5#VzOd<~VKh!hNE>^%CAp9X&ep!=jGoc1n!B#T zCZ-TqKu&8mfSP|hX@!Q6i!tnhtImb@&AM{ARR@a#fF!Dpdc=(-do##}Sj1kolx^?0 z41T*n4>1I&=}BDw{p#NE^D9|dvU2o{me;%P?CEJlpQ9>E%z?bbz@a{09dKuIeY88X zto!_|;eB{#V0adKZ|SXcrzB?efEcKQSHwT3m^u2VTERIpyBe9WX)x85_tpBO!5F18c4E zEBk__$H;ej`sn)ji+VgER;=NT96$PiBkG1%Xkp_7AnQi@Mzoh`lIwDp?deP4P0~F& zHSdM+I`W`5Ga`OmN!ssHPFuTD6$upxQUSGJN2*sj&es8_9SHIB)YE7DRp@haWM#D%F)=Tp>_ulBN*F40H8z%7OlKa z29-~!J;Du!XwE4itI&SXkV>1}!ym=GiHk@TLU zHHFC`ROSW#U$R}W^rx=c{(~J8!uG6oAWaQSQeBO_3aO=7!KjX>_ImtCzQXt8MS)-y zJElaLlsF z`!v(sXUY|h-lf!%?Ryp6TgrH#p_pJgFSQlRk#e(>a*H7q>8GBq8eNXo1l(I+02XE8 zV)_$@gR}ilbpS(C^z?#CA&ni^=hh^^3NZBGiZmTo>-)KKCN*&7kCg0h@*MK4a4Z%D z#8u@RXa8_AFya36F!gr+!j85+`;f>&^6=|H$YHyy8I?Naa@D}f^D}PDnns@T1jGzy z_)U3P4Dofer6v$`lxQsM`GBZV zL7`a4rZ_!+!OYC6vI~)qTOuCTaBP2Z?Grr9F;NtgSeIL2Uwt?@Ucrl%8Ig|>y=Rez z4={egZ|alYw-S=qGen~o`-R=N^Hs}M691)MA0C_DSbw<`&u|%FGw7e-MPOM!DN?GD z0H>)_;x>-~$#B5>3qX119qtB|3wfGNK_Jgtp<6h^uSgr|GLIW(YM>Q?+=9K~KG))} zbe%BS6F#f?(yi}*cyDUKdRi4X=*t9Y2DH-7TVI~p!1w!7EpPNc@(piDyq%yv=J`xP9RK zJqja*P|v?cm<6Kuwqcs2g8;bxG5i;@wtvh9i^w~y1`m0#cM<^$bQ}~n>a;B4JG}U^ zY*yBbT+XMG1(?u3Z?O)sJ6HP$#f6so4jjq#5-WR+F>da1`QqbMR^Up$PXlM*y`%5= zN=KgpLMIk0P^oQkDQ?6@KS|fL9`ew0VWkl;+dMppe0*g%F|B5Y@apL2ysi#S*zy19 zJ&ac|vZNwE*&Ot)eFp22B6(`OEx$hP4vgvpoKMj%kedjVfK8^*;?L44Kg#xRit$<) zG4GsvdpdmCtE&WHxxT_3#ibU5lzr?U1Dqx7#Ks^Y3k^wSUS2C`0bPL0z`%`3B|6lN zF0y59-jBGXeQyXiP$sxxdUEl(aIkj(eIDi+4^plx@Y~fV10xKV1ROBzY${xLIY;Z& z0{4MIBp1#4>g?jW>pLm)xVFH=AHE9Qks9b<$7~9pucgRFDpk7^SO)(WV$`=;1X%Ss zLcSPf?x*OW&9i0?Nc)sNi!y1)Pj^Y<_Efd_&==s(t=$VGWZ8AMC9L z|FS+x4+I2qVxPFU#EsNW=RTtrFd#-xIt!~!ccn<+Dl7njOuE)C5}s`D1pnC(W1Iks zA{&O9D{U!)I|8+sNVn0P*{XVArRx|`HQ&zaZyQW2gzf=)^v(P-2ks2-x4D zWaFQx=5-&7C}g>C+dcM_T>}NRIi>Sj)or^c=MIhy9xn7Ypj6$j5*)hvyZr65jdLM# znA&zNf)ea`NgHZXPN`m@L7qxVKD-XzMv%v1^KTB|U}yu4%MrwmFt*ubKr_HV>Nw;i^!k4D>u@zgoPyLgM_gx#kMU5O319HpD9l|J)-Jq?@o#R+wV zud@?VRv(y)P-oo2<+dSerl_(zXA z?ddrEv^}pVre|+lt?GKTJT{yPUf3MAM7}o-ui+bkDj%j0>=95$iJ280&oADMw^i@=A^3IT1Y5!HAB8 z*X}EESwfKU$>+mrX(Q;bfAd7(z{jnEchf}=XEgjMOL z$cyOtZ6?}Ed-iKLo?p-TCi0WJQG4d$Nf|ITn}U>VJWWrM{v=nriWI8Zn0GrZz%&WS zSp(tydrA)&;s?=ZuP`$$-H!z@$d(GUn(WP{|b{|^wyEsuo$(REfX6M}AOHFfYzC(xJDWNVRS5 z;#UEo`wheU(Pf=U62S-^wMU6s&)E+CjiKL(>EMCA3c)FN*!SPgr^HE>wzEEmMmeog zvh&ya)T>QR+MKe5cRHqjyX{4Sj|m2-rIOL!QqP%`*9A@9W4Du$Z?xMhiO`;CGGD-Q zLf6gRpGYRY`6gbnVyGHUH0NyQamD?$dI0|YaQ=(r6jdx&fhF(9opRx!qME(xxQ}UhbqVBMb|^zYd;d7V-M1k9iI`CW)BtMyOHWdKAU^ z1v;OY77#(7OMrE)#m*YCW!IjDj_yCSJE97Qja@h-3We$HW$m?`moh(yhrUDVdR>XG zWM9kVd@7OEwCKcJ3ZRV7e(52kx}shqjVhr8x%j#yU8W2}9 zlI!tsT^4H1ID|Cra@MB>kNyy!>nL0}HG#_^iag$W_Q>R){4m|+P)vPw#>2&vS(LM zw^YQP&g-Z0vm6}Hxp`Xd@L5$n7;Z+-FaPa;J8&I+N_n}IJ;7l*;o$i!-!At{+cxPK zws)f)hJ7WqY}QZCQ?_KsaTOZKu8y3Jq#^52ljN$(W?BJzy;;j{djD;ChI*cAHizX# zzCEw1PFBQY4h`emah4qK*HQ=}hbI42|eM zyQ69OguDEZ`DQprGy9)m7K9FfbE4%9JMyd9?+O|fQWv|LvKNEJSB`)B0^^R9$*`)j z!X@J){o3BQavZ_g6So7Fnii7pfT?l*O-}cHKKVp9(co~g>t{V)K|XSu%6ax4Fipy_ zLg`;uGO^g293vgV-!ENvZ&|@tDj2J+Q%OlehWx(%~f_M;n zroV~ajHbU2lse9_GH_S6Ctd&kPOkx+;tcZEly!_v-Wv#6I>O%;nPaLk{8cSn=ca%2 z%fkTI(MBZ-9xqtP&A)y8Ml~@*Y??IR|7=t4_565J7@`j(=JQ=1CI}06%(02N_7nSwMH43V`j0Yr|<}+&dlp zSQMHxw5*mx%3t)3hBgWw`Z_D#kgkD6w8-Xh1Jbtbmr}m9PJ~7i+l8G?NL+3&mdsiq zYU^t=1h6nP-6i#GP&CWAw748}OyAN|btQe_2QF3>A;UNlf?ptP9tqM()(_(Wg5BT$ z$p;eL8rsJe)s1o>3?evNCM~&eNcXwB*cl5;`X!%M?NSivJQVv>ahFN^+2b9a0s3Tz z3i*BOperWA2Dq+0s3y+Ew-Sg9YWO2NXd@-VB(upSBtX2r*tUiG9H&5aLWC*w-o77i z30lDq=Mz>=qKW*zzb(i3@oMQgy+PCWjFrtc`|zrqw=Y$MPDg+yUZm_{-ZBeRlFs%w zO%xuJ&R7!LewU*dD=IL;TJmASVf#tfPsD$cx8=VCy3^Z`O813x{VYzOpOA;(@e1}& zQlz^4{`aECyNM{uUPjdBZ?ane{jW{$?w3OYCa$kPTh?@9e0@H)KlSY6f=Y)F z#3D^+y-m)I{M|FqE+JVmx{kU6)fM6LMY}D25#wK88@8sejQ$i%&+t#v9eYSB9jE7~ zugE3S$q)IP7xSRa8>~+=w?z$pKpAzTLReN=taxGvr9vXUEu*-c;vAB<`The;!y4DQ z&F#GcTQn24GqEYfi6Z-#z&Y*Zd^)+xyoL@Asr#eP*2Ih3oeIOXk_h?xUlzhj(VRR} zqG^T#3pEjzz;>QR>u6b~COh{GEAtb*4b$!av^9&SM>`fl9f?j_q?oo4>9Crgpw1+u z5<#%X%X3nly(`(fg%G5W*#h4~_QwC-C>|196z57ClCXKTIBX zS+?y*cqFZ9%LpVOpS+Azwxc0C;#^Fr{S6=XHCbP7AV!mnZT71+G~>m4CQFR|q25v#_-Y0l!{yX>D{3wWh274X0$Q(+KT~i*CF~sVXze`) zF9&P)!+*BpTc9)g%me}iz_KmxbUz|tki0Fft&MNqB*#h8;r+0Lv+N!f1TC;8bAP7% z-E|v7mY2|!9iNjB7aoV{Q+%BdivG2G?Gh>P=jT}i0KdI_16`D3{%Nh=%J5Bco1jnX zY-XOpA$*xkE65~Jv&>dEvq2F7z%-%8BlQaKO%l%N?NOHxkCpd=q{ogZ1U`gABSJ`EAhb=-s}B~Q z*`nqc0Yjcu3C49NWMAK0S9(Uw%Vb4>J9=a~oYKa#Kipe}qOqV*I$DK@rQXyyYe9re z-k&rJ{qBSl;(^05_rAs6uhD6vh(MWbh*>&+$>Cqoxoal3h>3(hsjjfswyFOC@PUBH z^G_yULv61bU{q^#o{O!{rsL1}DLVdLp2@*EJ02Sly*0k%ciShw_juOYsU0rnRd@!i zzBajI6kJi7qk-5opHVZmz~r50qc3TgeeynIq!3`u|Ia)A0mi@Bg|tR|Y2_<33{Ghv zL&vQrH2e(ZJQnd_PIPSRKBhEMS3vW|hu?IcOm7@q9K;N6+Kr%ssUNoVQ_=TQZf; z6xuol5ssPYnc+3#un%5+O9u|td*=>RLg=<{v!Cwr<5q8dQ;Nb00u+LtctM}*AKx#= zxm|z0Y8L|g$J^Yp$!reF-inohoKZ^%9++LB>=rTdi1pYg^5$;QaSvhAZo;9o!i}?z ze}QDx+-U5aQL>px?RJGkZW@%RQD&qvaSE0eYL}|Kwxqo%8zB{VScoz zqi@OVBU#|g$1(B*EiLSOIMX0AdSs>ekny{F0s$L#2DyRi$!awehx|aC!YbK zj%)Py;S!if`fe9msBlcpv{v)hHSjaEHp6~4Xs)$2Ryl3(L=P+HNUY6q%* zv7I`$m4EAePMGK+nc!aK7Gbfbbrdw7mLX?ut^PM{cPCJ`)-{(MWA|Os)|TA0A0(C@ zk2R&Y8qT3ecb^d({>o|W*r4MYo*LvMF*rRP*(>2}i=w8~whLhq5d0i>Ln%V!kiAvO`}DDQ`u2@ih41EW zBIcM2zLkCFoVEWH9-ecxxNkJ$a5WAD;MTY_oxtoD zbLbnSGyL%AchZrR0d`Hb;TV5I(9Yi)G}nb1IfeWQ)E+1J4{&hqb#$V)aZh`-Sud3< zMRi4vKdJ5})FAtbC$brB7H;Vw-?aUzvmEfv^*WLysjNTf*ke0SpnYQV2O!}u^L=WN zx!8xGA~&G#kCcN~Qp`Ne>q|EQMQHtTo3F+n)m16x>7n;UK_~zI13WaW!M{uGcIdsd ze~^g0x8mxzVT7rTsIc(9Wv&IG#{s%ejy)r09*eKuQRytUI;co0@p`_LE&pbc@O&C4 zq@!`&IlKww(UdnN25l(2q261K6aBj=hsO3l{!J@w_1Qqxs-b5Y7XLvXSHml`pWoET z&-iqJUcrHpAIU7<3JTCu9?RVu3Bu5K_}2=h zwY{SXX#zG=gG`WqMFMyFpj~9a1=6xv- z9HXbC&oB9F(~}c^hc4#J1=NI)X7z#~QVu|SbfBI2Rb&wVK%+4bU3e9Fg^r&<4WeZ0I5i?q4d zbpG|fzr8VTA0zJ2weS^-$WMuyNoE^fRpf*oW$aSSi}4ctTB#!6o)gPuv}$BuD#5k2r9m zK}dQ^j*GG~K*d-1rDy>nGH~6&smHM`vz0zqK&pw1G4^rYd=~xc3Oa7?&2*T&dF{#Q zUhPtnJiu5qybL{kgoAL6T{58WtZXvK1kuE6JLQfElMUmff-SvJpt7&pK-zzRFTmp+ zKL!quD;^}}N}_WBOfJ3?==wYGq}XpaBUcVya*iZ~1*B2e@zy;B_xocwlwK-t*ZQ4SRhR4dYoZT)g_?#G00- zW#lW^0f|^(99SNWM162Z=oEv`iWzo{6j^_Ike_->7 zXsB{Np^T4Vnx4BQ7MhNbalxUtH~aO-X)v-iot5eX7_1q@Q-(VF+Y{~1M^5?m%kRnYzJCLo z6`fFh%_6dEYGd=zG^?M}>{0U7nA+b?eg<`1^+5EdjMu9cQ%KKcuaLVvn=B~$uc0N= zUo3Um&?He*7HDJ}q?(zAnJO2!>c$r;0mq=wEG4XNBkq5rk+LW7!(l!EXs3O;6Z}(& zn%LMRA#P>6QtMQES`m(`kNr6n-!?NfQsXxWIiC#O>s(})WjBK0$sQQ*wPcGvr($OZ zOl-5EYv)>~B95e7*u;U;B;~HE#C&UNL>cXERzgJiVG_kU6X^%WmMu~5>8fX}dOsRp zIjG+xZuzPpn=0fHRbz{nVlJX_oBA)K!G@4Ndgs+CSBQsa-SQ;8+8%c&;Ke_&wTh4O z?biERi3^Im(bx8=rS+|Ss^^D)8kvHfR*wc?K-X)HIB~4Ud%g@5!~Nc zK51igKqd|BL_+0eO6LHUQ~*f;?sbn?d9-no@?5-xO=MeG)AcxV`PG%3L}{`@+jj;9 z6$buTAOkLq;7v>XCdOk*GjIY~2so*kz;883p4diiJ zk(Fy%(b<~e3xMFwEf$Z~Z(HhgLO40?B)1pyQ>L_1xu-Iv-2t8` z6^dWyr(@kcstAkh2uQ&cwK{=mwJVHEb$>Qzv%;?GPr zPP(M~C0JE1o0%zQ=b)V!_VXFaT`HMef^XJA$QL?|Wc~GA9d1$rIAwx;hg~d@TF*vM zASoYM#&_rB0v(MU>htTRy?(@s7Zcp%BNedN?%A$SLDyviZrk&lZ-h;d|COOBL0 zs3C)?!8>XA>tRn>1&BN((9!o+0-Gpye+>Mi<-PQTLsZrdd0&{bm&T`CTTOJk7*k$= zQtjsMqJiM5dAA=&BoFH&o^km~k;cR2y?35eQ7iwSbOr22PG+opy{C~)^}gAAQ95HH zkX^s3Ozsyd(os5oN)-xc>GLS@x{uo=zZ6SHK_RI8iwb?VB%uu!7r@wO=V+7m&(hXh zCE=W$!?%8ODcm+O_&au;$qfj}!b;D+V0fZ8Et<9_o`|Z@#m8O4CC?^!pZ8k`?1I`4HG zQCy)aYEqJ9)g|O=*oB_~3JqTHVPW~&HA*%~z}SBB!MmP%ifrhM5{4%!Bj6{>Z&`Me z86oFC>#8zrplTb8xN8x|8XplBHl#1H0pcqLbLL9LDp+C-+D(N&j7rruK1=HZ{IVt@ zlRN@?B1c|VcL010v$A34CU$-uB5|FmZ*ppkDZr%&7RAh3^&fVO~)Lt_bt z(wng+z2XjMG$#LWZcb_kcz$1rx#5gxUHIJY*QZIN(T+#$b!;BQiU%z7!BpI1Q5oAc zL?Qxc{l$8(`Nqav7fp*zQ@SXK((}>asKMVgi5-EOia7o9=zSH77as0F2O-JG5#Q&u z7%a2MPD`vo$SAp6Rf#uL0E_yP$+Suc*I@e3znPxYxM!Nf_;z{h@Ah>5mLIu0$3jxvV! zyT*;i`X>sJOY&nU+Mn5t;0o+)!7gHJ;Az{)n;u37Vy zc!ndkudfcSEQ*n;$1P>O`^9mBoOEjS?4>^YaZ|&LR}X#WB>~yB~_%4rInK3~dLdxLr@+Dd)Vxs>dd;Qa3s`7yOo*2W(on%9c_g8tkjl@VhEOJe)6wBokR+D!;(HTef6wI5JzU4 zNb}a|bg*e*@R&%}N=BL6s_p>$&c*fZf*hI8jqe80>v3^5IkOs5O&%Vt-Lh!`P+|WE zZei=pXnL(N8C=(D?}DpLIyd)7uD=a@-@NLQ>PrX5n96yGNHAHWbiBh?rK@53#^esq zRD6Aflgz;)>21|^^60H=_oM>box_P=rAW4~Erc_fxFAG&!(PWVH|{I%&i8UmgLH8hv_Heq56C0p>XW2E?~yk(zY z<3JeS6O&}oE;ncNF=ztm&r?3V*RyhX^V$BkSqyL0^7r|{QKA9$jn2sJ0D+VQyWiKbM>m z<`49WZr{F(nAZ%+$~08&!=QWK*FU8j@mq(H)gM__@bE9aua4!4Zzs~VPuVtAMu$t= zjlhRrWV;yr{8>mzC&@GMA)uHxyK~;Sk=CcunS_1W5Boai3SjM%_K#FRz>dYbK zTi;q!MoKHIuzlf|pDe%d0>%erBMw}IS8=!r@T#UsCZVxGbcwhz!+;avUffU*y~yVl z=16bB$Jh20(F=~L#>3dLSvTn>ou(e>h?z+urfk8KtSm2h6XYzH-AXgfTP1L&fE-rp zhWe-hR^1hst1P;zto$}6;NEha#kV_0SpestxyX5jkLOP0ylMRcwbaItyX-Adct!q_ zJr-@)vBGcg7mcRLkQ+48}q00iTBc}gzHKW3N`dCTpF z;z9gD$vKpRNEnO94)q&wk$fLe7U9g9wf2;Ea#xa!y7oxrff#1}3;~_Bwmrp#JUJ}q zu>YZlvdl@QcG^U0V*t`f4U<+6144IjH^$y@N`D)sMR|LNFnM{{nCO}6x`x@2l+dD0 zCFnRooX%uIbYY>08A&U z*`295y#kDgfE8kvm}<{cUL&LeQ{<7q*T}^0s7btiwyZe=3~u4?<%00 z0X}w~p4H@QkGA+}T)9y>vUkyRg#^=qzosyITM`CX#^mvaGLcnz3rWJh-m2MZ@VuTZ z4eA9$DsjlnlBFJJl2NvhFqkCm_F3;Yp|Lk%@O+010iU9r#g8VvWgbQEe=ct)_tcE` zHuv}}L#Ob$j0gyyvQARry)e`f9Mmm$Tw+&7+}U77sxU|`O1bcVuldpBf>GoUPjI0M zC$$mhRYT|_TqXgfd^HWf3w1FN8J|=cj!arwvC45xm#3L`(chv*w>U@NQaqQo+Dhij z$LI@OtM+%&s}=!}h73-RO-GY#j(&$0OQzyK6GE53MA}A@#;FsC&by}lj&6)&th(X9 zet%61!IJA$7J3s=7e{wm$n}<-hW$ihd50vmJovc%Jx!>rU0DX{rNsZ{tzbtxT~}L| zR*Cq#CVq_#1pkkSuWyjNr$SPp8rTE){#J&7G&?p`vHe=_Sb(h^XZu;f*PVgL5*JbQmvfvnr2a|Y_G(a zpv@YM;@k??`gOJS^$vfCgrq{aGw)5H>jC{O2#8lsdp*jE<}K}feT3Tw=TI3h`bB^c z4jY^Jz)XLgYzKk+SWM*B{v(&rhoF%x_TXj`tUb*Vg49!u_Q)1JifQq_tnj0#2H{eZz!A`@rdCunJyLIXx3*us&QzLT!Rb*2OII#bJc^zEh+@IhU8@;QFsm)^ z6n(F-OQKc@q`TBV>|ngJ^PEi*Q(I8MU-$aQBk36O%FLh0l`}$@@!P`6CuWwpQDAH_ z?TloFk(0QAfbg6vwEe3F4lk}?lp?!jf{7tTydT3cmkqS$~K_y-iWiGaE&=fP=M{+x#4gz=cP`V zd&&Ut2*l8HkVDi`!%9|zCFS+RBWmxE$*U3PaY9V8uNgSH&_gPiKJ=L`{mE_bO@~)o zG)!L;_E;eFQes?nPpZ3zUQlZc;+*f!asJ1)+DS+FU_vcCqKRLED_b@573I=1+k{OPRev) z1LSvr5e2RpL0?%+ut^1^lj(Yv_t0@d$Cr=Q7GImu0qnqSY4rA|&D#|5Qb|CIu`iNa z%}O!4RlUffP zn2EfmcJzGBJjz7BnkbAzv$fq)3peVIMezG--` z2Xk{)#Q?3igp7>a=7)BQIGMH{(kR@P{AVZdE0Sfc(?QfXzE^3|Q{kyzh{n1+R;@aq zn5fU)?R)S0cP{kWiD|9jSXjr0W;ul`@Zk{RL{gCc{cSEqtOo5s2rC0*BtS>}?6L1gCF1VHy|UI> zWNPHf#)_tAg0Z8F$0v{DLd-Z#nU&OXir*}>ZSXIE3<)cz|HMnCp^ZmLF~bn_1b5yz z3LpBK&7aoPT}9v%bdnshrH(O3GtLCfO<65;)WfHbiiBqLlJg#Ptl4uOJ}H=+#Vye zT*_nMVqZ1g1ay?HnD5ap2{oZY(ijW2tK-p;Kx;F!Q0mHlGC-z_{)br5f4tO3*rP zA%^Muhp?&^@faC-j81yJtqchh%c@ek;HJ}>NfGZ?+d4WF_I1udRddhHi1E&nzs$Je zjJCd)rJxwQEM^>Y%5orQ!$rTh_#DBb;k~&l4I%V=Z0;hTXa3>1qQ$W?-vmT#Enn#v zI(QA%Kp>|s0mC-?%K_U3|C&Zi25M|AsK@tlz)1N}2xRAzN=_DP7fBIDdFS|PiI_Gu+W2b%p0QXg~ z2i>o;(kR`flY9oq2Y>z5d52*A-~F5H!}y6{X!tx=vR|-^TRyp`quVQ;S z+Fh+ETRTbS#y=!X->^09Ut@m4dvml^X1;=0kl^VtxIe6By}RtE*bifjo0ytR>@}j` zeB-YxxBC$Gc_Q&x#8_@~0vvz!x*utMhjs*(j26WZx8(v92aibW)*jXU-M{QDKW3LQ z1Cli3^buyg4ef`peYfoN#cnMp(VSk~=te7)s5^|+X!bJq7fC4q zg*m~mrGCRbp!RRHm0-V$%_UXaTE;s1n)(mfj>POs)@fpf*ajqcQ80G&736aJGh?q< zw6|mA(61hz8d7g&EOnC|v?G$kx&tSF`?Taei)V)Z3|k=p6&oCL$Db8%_GP>)g@Q7y zg9OGux2-b`wS(E}mfAHWoyw@k=|Ps?vi|@V7ltKm_tK*uA^TI-aP~`pozz%yg4$P~ zm!&Z$V%uBIn9@GzjGQRn^a70bHc8_UMB`3Q5qSAkCG3k?m9C(IHPUqBMlyW>6d5}p z83d6-oB~D$KVkY+;_QfB5$Az&bCIWgx9TXJq1m=J_RN;*jgig=yP&1}AF|?~3ffdB zIoltlY{y{(0TgK&Cu}nR0AarrIU*!1 z3P2zN$;STgb!X4shmmB1QU=&)Bzv=rQ{9ynq^sP#NE24s10Z$Z6f54zSGx^r5m%@< z$FBmJTS)tyONV|p0G@olG{W|2f(MOZ?>6Kna(eWoZ0*`IuE?qxh`~=!QCdqQ1~6m< z#>9+jpw3zJDhS<2ATCcFQxRDUjG02PQ-E*}^q_yUVoBK_#y^yP{U}#f&@^bG9WF+A zn0w{*LSW_mCkd4jC`r?<^gc9ykUvJViO1kk(|4eyA#*c)^0YS?o78RjO^pYagaV@zN+?5?Q_|?gp3Q@c*`IdX=4O@HCMI0nC;j*MlmYQ3!(94 zUsibQoEqQl3#YlWSS{isTW40B^%$zz+R1HgnIQqXfXIMDdi6t{F)Ez^tHZE34aoc8=fw0A>4Y6|~M4Daae1 zzY;6&zQ&On+9Rb%!i<0jHRKUJw6Um09uv68&2_w~Zc7eG!6anojp~?%91kI0$4=(s2%&YZPB1s$8OA8Lkp#DlMyd#GU=B9-Q#Q7-_iXt91!IB$ z$D#RsZ$gMP5xnuCb$sBicKK75mf_<`B|0!PfHuMP828cDt)eWd03_oi44vs{6g0+J z7_JY99f2Hwf7i;JlnJIWh9NKj$DhN}vu=AnNG{F9ZU`WaIpc44rC!;jh6wH>Z_ksv z6Orx}rm?Uc?5d~3xa8;EimdUg+5SZ*bCq20n#{C~;+wo-Hnr$f?lVkYyw?!rVkMM+ z!f~JUHPBqVHsmr9;mH^|KiY>MYa-8~*CCW@APnd08&KL?XyIvJ8kxDAOb67N z1TXG>IjqjnS-YT^T4 zx4w9TnNEet{KON^Gq=_&!9Lb}KF0Qph1@d2<&Jms>0h2*uGzeh^)5|)8}~MeoZjFc z6oV%l4Xf-pRy$P-Bu-gC$P1lcr7v|HMU0U}-E4ON0zXRCut1OpE#er%H^1FR{5fkz ze)SNY&Xc+N#XDo3=m~~KqkzL0>!0yW;z!nH!2snzJREVwXDkv$bu7drh!_L|#CIF~ zcc&zgQB`43(>5@6`s4PXN#V4SoE(PS9nZt9b+)zAvI0zu2q$nnsMGg-=XoI0umd9) z_iah`g{d=%0|t%Qk&VY5?}b(i7$PTI0x~qP#!YBjM*_q$q_zObQII-*-=!;c0C|f? zAjcf+Hrw^9+`!OA&K#A;Anq_fO3zo481)besnnqEPrTB-rpV~8Zpix*LY#s&^7#E` zjcs&o;zj_5D}~f>GyRTe-K5QN7)?m32qR;*J{9rz-*(Tum$R;s^{0sl17Labua&Iz zE!0@s3_p7P82cBNJKtoxI#6`!g>qMp0X6LVK>#|`0u*`m&eeEe(=+cFM+cryzos{- zk}l>o(u&cj(mXn_eqUSDeVmdtr;Z`#kT>V0O~h#~i4~4lI3#h;r>#s-yBAjR0x_s< z{VCLmB1I@NqZ+aY&tXJk6rK~LoZx31&}DeiMU7O0{{RpjYoLT+_l>BKPW=A>e!s1B zsLlb^&OrqIdRBg38L+yT0m(l;l+rF!GH#^o0X|)7w-6=DjH;@r=P{Rp;Q~6GK8ycjjP1-A=%!Sk_HoWMzOnZ{HTleOxG#0Qz>a2@8kVtG~`D1EY-sqy1 z&`2bL6m-e`Y3qB{WG#r%K^Oqw@@Vi)5sOoJ^PdqJBzpdWqG=LLFw|73Au+i40Yiuf zoI&{k9uhV`Tzu)c;4z{{l1>OG8QbMUo-_`^L{=np_yz`%~Y1W!KEXe_5 zY-P0!41Hq0a{JhWaqKT>J1T`;Bw%cJ+Z%e@({}rkl=w| zT6S7MBMh>rQQ-ugv7bRu(uZ~#F`}I6QP+OITvFF4oyhK`<+U+haqH`~E80Du71B8~ zYSk7AXYnc9kA*eaJ&yK}#*cH}CY)pwzfJb_6vEoNT?t)^=N&ou)zz*9%!vxBHV5S( zf%WH2B+muF0}O=toq@pg$o{m{jURT*sxqfeK;naJ78&=GEKW0@U)G4Xp{D#g#jQ!k zM+fLtq*aMVf`>>a57$1QI>}42-Jrm*3VJBmd_2FsSz(*;Od(KI07)ZbxZsND;nQ%= zO9$Cbk+D1aZ(1dSV6zgZBxi6>%W5pL+vQbWFvMgXfb^`^vX19eQp(c1-Uh~NU$lPJX(H0H%w$}GHaq!O zhI=I1dwR{Zs}VA6cO2L0SJ`}xFSFKcsi2}LY<2Yd^RGLzl47(h|}WF`hS`ez1!v>ODIiBcgR0p zUix9u?cySKUB(vxf<7nRUa0%TO27I6+K@{dJ0-gSNCe}i{{UQ9=RaryE}Rj8sM6z_ z`t$B~--z~jz?m#2ISP2Mt@{xz;g3_{Sx)-)80pBZYivk@Spg-#m5xB$*US6V+)Es4 z@q{|Dfq_Zf-7-Y1A}+dyN{>G;-j0{iCao&^RN$8CKTum&rzAZH+bW|@ZeMu$i6 z&g2umapz0+ypcvoOm0R==Q;BqTi1}>jbINx%A$zb=opa;@%lbw11q2^W+odMplqRCwS}LWSvUKS3Z2> z(vrLHE~1k$DO3b5l_Yb&zP(xYt@cl4?PNhOB2<}%py;Dg`fi6G;=XY9lkVf~6gP}J zISX578l+h^_=vGec4yt|w`RJ9Cy^Bk`2PStKmKfEO^35P)xOLLGz{8Wd81p|G&b6FhGs!EZyT;oU@Rk|l*QG~jU-xPX z$0fw0DV-XD2g}y7t}Q~7ENwcMr z`@nbD{I>Vdp_Q3l$~oFI8jlklDtE@%sfJ+&B4+RK+qgLd{{W>L?R&)&Dn|m0f88hh z{{V`XS1|^THH|T`RUrH^SoeTKb0f=nEV*2TcN%kzx^bSKd90}eU*#on-mXYQ*b(KA z@md|1Avz(N2{dz-Tm|dYb4*{{wX9}KiJc>F$|7!~fs?oTRy6(WDJ#V*68kTR?mmSB zu)DS`-$LY;7&?ELZVvrFwRt_A_0{dGM?6T9uaMk~=hxDOb97SVs=%R}eOf#q`ug$u z)`XMZMu^f$Zjfhkgz6{ykKU5Gx|P`_b1JdeXwJjeYJ^5+c-}$-5sgITd;ICRU$d<( zWR5uin;5|=H}va6x>+u)RzyLpZMJZK&%T%JiOeagSY?$6!3esyr9GjxwCyOJ3^FN_ zG6*U>Ao+}Qn)xHzzq_AmU3*D%*0(S`Z7VR{$sZ{3)K=fKKX!i141d~Jw+2u_!m{Z; z?NQgaeTw@e><+_dMV*DNw8!xpB-C;05PH|JpzP+dyb**rUP0p?yA7$?JNe`SKI=-b z7~JVTl$_R<>ST^+BbGo2Bp@sgq4)mONDPom6rwaZ7*JPnjP1od$nr3iN+zMJImYMD zYMUO=avn1jOCUQExXJ5ROL(qj5?!*!>-kG~GBchCs=LCHutbr}eCZk0?xHl80s!&G z%7*}k9S@(be|i(#JQ|ir)eduzHvsYbRW4FF;$&1Z7UMw4Kc@7ZwWY!~v=hWnga%R+ z4m_(~8)uo_ZiY{XZigPERL>2&!rIfiI3N}PG4$e6!;=y2u5zWJH_=8x|km zYRR=&Ev`Gp%OYb!$amjzc&$nMK_Qwr)rzh)&xyuJ^vI>VS~(I_{5uhhVC49R9S2$rX*_x^ zSxXds#!gQd_-3A-<=zk?j0re9Wq0R}D-=g{Ca5HeA{oz#GIQx!_ddh+M`&C)zwFyP zg>=Igg&DnfE9+i8clImnQ_8nCotbH`Ibg6vK*zc~*RegH?3;ehuuFAC2^xP7LXC&W zSBZV9+1*_GFMDefKAB={5?dKQn6J+N0Bb#(?OP7ko-4~6v}HUP7=GfgA&*RWleaoWu~%2OvE%t#)7rU~F8Xv~vxO|Hx19<}q?$4wc>zFhHJw<& z^fcdQ$dDpSG@zY1AfJsNv~FzU(JBUM9QiK8KkG}}$k(tWz2=yZjO#m}T3$=&z>3f)Sh!-OF+N%P;+K2qu4W)X2YV9|a=s=9_x}J&Uf9m}9n3co z#<|@?k%5YK&f!u!i+h>#q=n9{v**7RpW0VachQJu(lN6hJ;xrkQ+8Sgwz*imK=_92 z1~$%VYnhQ1OiF=H@-mDC$LuQBaNFF>g>Q_K1_cyK2+v<%jcYCJR>hf`-bna$kb|B# z12xiirL4^99B{;4a2%)@_Z<7_%Qyc3vxw)rSt9)UV~}N!IQ8j7x4mS)@75;nuymDE z?m6jJ?LO2F!(>pSBO;O)p@wC<(5$5F*bTP>Jda8bZgz}P+bkB>svjG;ljpeiQZe3J zLu(W$&eI*soMRao^`_zNJ3C}DPGQQ7;1Qj@{`yASw&0%WCw7b|$qGov!+vXiCa{ua zB68t(Vy-mf(y{wrwyc}AShJ%;0&JUj&e#~v=M^$`w`Wfnc>9}qRdUEefsMHw&|vKz z%V@jlnR+NYXahBpDv<{cH2<+m6tewY{jly^=#QX_$s%sN*|Vk2d6-0lyXH-)G*@LD?SF zc17%ftah!3K6xk9dDq*X$bF;sB=+{jdrriw0pahH!;z2pw&`9{zSnjPg%B@ii-aLYQD)EMY&ICdonObgeBZS1OEV@-B~wZY<|qaFqOM;BsueiL;$sB*{(RLx_1EmP$Rv}utu(1BsxKqs)N8KoKeq2-?4S~- zY1&ThfIzs2wm~eO& zlG5)=oDk0}K~Ks4vqqQi7wmnq%QIXgx_81nM6vY#C3xlk0N#hOF7JvUyeYSf!Gpj5 z08PbI{p5QXM=-ejRFA^CvK_uMe$^I#d49@*>N!t-%A)~Ul#YM;Wp4Ht-apv?0QRdT z#IwSa5?$Hi032<(lDvDje({}*J*wB)rbbBQ)86V$E;{bAV2>&s{{VTO$d2c@jwz&5 zAn_2V-hbY4OkaKEI~Ggm)uK8hP)h)rC*R&vv3=zG20KY^ODnqLL}ieYeDU5=qwhJ` z5z6k-T{4~UnlKJO`eh;7KY8xUGfI%#-n1-oGp9eKn5Hd0^qrJrR$CeMvg347kN&w? zC+|eY?q_Qq3m!ygPV6@8-gEAt_NU%z&Fze^THO96n<6CR=UVG8y#2IO>$|hMk%{U70DNSu-rW1qc8t&6 z_J3z3tV403Sqb;zN<+1N^j^@*U@fh!VpFFEM%Sz6B&F>B^BuTiCVMC(mp_=J6OTRQ zrw86&w3)#@n`@D$^CM?qfBGc?f4rw`2YD@GXD1krV#O4B03@im`_KDOVMUJG&@tJV z2?58D{wEc&Z}*y>3m9Bkw|t~`ipqRmzwa_@$9qffFYO)YYrV`CwsAn7B}Wc5d5j4$ zMY;RScFUj^R%suD##lHx^u(N27ij(AeWEbFcjTMkNzsqvinf>${`#>wl4IJPvT|Y-{Pb8*VLH_{BRr^2fC)*1=743`J z2pb75Bsl*7nx^mVAKMFp#P;84E=GJ8G7tVrf!Uth`&n&w_<`FO(ziNZ;zB?8sXM=G z{i>bbNqcLwhNGMdnJ_pWoJSL} zKI|#4BeeS*_S)vuNP8mY4M$-$ysF;+0Leu^V;79Zlce>)OY-3t=^^=z1r3NIqB* z(?{;(?P^;0qFYv#hS8~zwtTVO)|X;^*?p&x(Ds2?&dkW7O<4CBx#F^J{_bAbt>dO3 z8k@s~mtmg2!>4Wj?EcqCRlgT%xEXaVE}`)5t5@0o0J|S)Pcs|q_|XGnz*|1N$5GlJ zcFxncx?~rSn|FLhShh&c+5R3gT6Vv6%fivToue8lU_!Aw4!W})Yp2~_&%AjqJ6h== zL6-{ZH4jY3xZ<%pd+x<6qe=Z%E^0t(f~J72tIiJ6&thu z>|K(QGF)6=zHyJsl|LBkVo$o?U{BzR=IopdV@CMr{{Wd#ZoceZ&&GcUB<&Y@6ky>F zJ>SBj54%5L_ENIQCzaW7JHV&^0L24I+kM^rnVYmyJM`@c$MY%()PAwn&uD#sdm#x{ z7BYoJ!2T3|FH`(F$n9^jPh+g@Oy<{4+P{dg?}5_^UX}Y=?B8O07zp8n3!u1Ipb>5A z!x^tl%vGgkL4_wEc~vW`tEy|5f_B(fZJPFP*cF##cAvDrf$b=)oXPnG$WjlW&szIq z*zaOJorkl;5O!Z?MnKy{2nVh(y!H9k+EhPv;p?Re6RBVAgy$4dBZh8Th8QC(eKU0q#WU0q)K`>y?)N9_-3f41*nk>j;- zp$cVK{8Z+?)9jyT?1i!iwrIj*03ZM#m-Mas9>=ywiGdU_UCul?_zIc(4$@^0DyS|F zuoP!F5@-unrEb#WAHEG?~k13MgTx2`MVxQ1VSv0rEX&wCZ`y^S{#KmgXk zd$io+eDG`NH0%bFM2y>l2JGy+WuELOO(>0zM_n@)7o9xE=;@#o@ z0C&6~oZw@S2Q~Tq;uDk`9OAyl`%}i6 zt3=BHwKI?BIx+_P?~0|&ky_kEn`8AFGGn}Z#ar@L-_xCQk zl*14lM5H5c^5U3a(@WfhCOsQ7j=Oq%D=O;B(DsCm%F7@aBp}H6_@hPyS|&e)W8h~k9i|B<3nt$$QXl+9n|9;II2%)m(>!4W&p0+1LwtN zcGu#d?xkp%v^H{zagur7yR)w4o=F$*(L~!ZDwrht{drd9y}N|QmDJ1PC3fSc)U?pU zZ*W7hEKR-_82MCQ7-P0r(b%au$id(1_OBZDmBihe>VpLV+zppwpLb7{es%r6g#Q56 zPiY9pED75i;3UR99o`Cli~diJt%TP_^Xg65+RReD!5kp=7?>i zMUxoPM}z~o_ia`;0D!8jr-dhB$DTcDpvdd_gDKlSbP27LX?RsbA;=tO8 z(z(?t=?0WrU2?lA$!82Sd3*83=B!cLQvwpeHq1%XHy`4(%zeaRisi(lef5? z;Sxrr!#U1J1JfO8ONp*!n8vWn99!Yd(vT8H$^yXWZO(S2domdzaJoQ@;DEr4AFS5H z#OWAN3vYtmN$b;kq?Z2x!;`!UtW<1A13c~pXWZmlvTMpH#zy=5z^|OX_3}VHkdbi& zc_TgM2ClvxtK!GTrpFnsP&PZ)*k5whF!lw^@-cOiU=$OOFgM!1tFpF9Pr%r#xCEB-BBS#!D0Gjh7Alw{(Vk~rtMetmtkz?RGcItY8hXn)T(U z{{V!h{cH3W?&BW6v(C$oX;B-w2b^ucoqKlH+6bf87zsR^uHNm|b! zSGgk~6Sstq-2VWI+q$=o^3@z^NeIq(#@>Hi)m<3@Rd&==9Bwjto;<31IL>4*a${7| zM;qtfXqPaf?LoDb=>C4c_)Vkq*c8#bL=`t3!rX!Jt`h04kx*MFa)U1+xg^r)(5mu+RJ5iAy&%eh8Mzi_gCk4+x&5-+D~W*(NRlk zDh3Fqe(xWKA88$&E=T~r6t*@!EA&U%WEVE8+{g!nWtV~1V~X6i?$8ZA23X?&bFt&y zOhau8p#B(sfwbgfr%Du-(x$khbi*(5f=<~3flD&E%AHB5ZMUDojJ8&b`J~Y7bvEF0 zw)q})0^VzL-l2|QyWoP`U~~eQmQx@SG;=Nh8gY$}l|+{f7j`1#jFJe(JiYYG$!{|w zw1^*Zr){y%uS&1sqgcW;tf7u_4%qouExud9qr$~WJen%UqA}hv40hP`sAPs_5$YP3 zJqB0Zx4N^PZS8Iuolaefh9GQyBi~&V(!KtXGrn_$$5;c$0N?ynW)~{hb~(-&M_OP6hBD2hDDiRE(vz38?OZabW1a{ewb8`d8YX>A zOKH?jK+n5+o7K3rhh3|yx_>N;aDG+Mk=hU_n5wuqDi1qRL@5fCPyspIsKrz*sDmzJ zAQCsn*OgmTamEP_LD@o#f%{N|hziUbZV1gT*5tWnk%HqOd5VF1ZwV>fz5ydvfxl0c zdcW=C?F9Q9?DXBBiVgr!s-q`6XOUkd-u>bIr;>RDItm~Dc+OA%03C1p6ZeemRGu4q z_#Wse9QbYn(7(odTYj=Bm-WE0#vw_;b#FL(Y^~ZXQxD zBV3>Oasl~@Z7w^83*F@Ez#T`s=T)+TNT!nZB}b9Rhr&+Y{AQtS?-q2LTb4xp#Z-_- z!xZ+bg^Nlqt;dPAZ_lMGEORWS!mFtn<2gMD+l<$a%QHvYk~>9%fP71x#@{O0iaUF# zgWR}C+~9$Lc=D{i*pku|m+-MZ!2V@Xk6pb5etdo8oc{pp8t^b-oD~FOykqR1;!AIC zJ2q4=wZd+>&o%lt?5vADjAf)HbPZaLNUtEZws|Misu~sFDl!kqQ^rW)P~>2am>U{G z@3ri$pX^7Hmb`G)~0mfH5F7);EfD|F( zR@jhw=VSX)*NBP%gkXSoP%w7m>&m($c~r?EB$I+R->&%-6KZ?X8Wv_4+^_hqlGv)2 zez_zMEFVgG-WJ*p$#AL4oL$U+#LC1{O?wdO>*}}Fm#O|V3AKm&I+)K zRwQmT<4qdsAH;-`C&3)&ZN5~aLv?8rPa7FDXJ#alK2%#S(2`hHr9iGu2;6-d1>7>o z;z)5MY&It((^1Uu5e34to`eEH_?pe_ctzyNDwfD^4&MqKL%4{xk&-|sPd^+{e-k#1 zN>sLSl^G|}tRik17(9e$S=&DBezcwHejZR6*|Gre{eH9+iZ=21nIfC$JQ>i8CSCR|_*I}8f?lkPssZ*O9h;WEEl*V#63#{M)#5&8~K%AFZ9 zBF3nsFFWLne!uHiNnQi|O$R%woca5x(a!e~l`5#m^5pu}$0v_|D$>2mT!R`r z41Xe=AFR_b#`7>~T&oS#;DS8H^k2ls-4&B0<0m-Z(uFO;N&qo}0plBwby02B=5YCy zR~=73S*Fq$$~=3OC!ac!E$!5tDvWWp2ulQ#cvnsi?Saya(ILYXP(b7^^;u=^n?5E7 zVYPOg$c_lc4_Y0}k{0fOP)|ABVxlW<=mm=bj`_yf>(Z?}Z0M<^DI)}r?~16lK&k;& zY-7X+823<@ScD*qcZfg(N#N&hHmGOR`Kd z2aPn88y&xYuCzYZw+S8~K&noBBd5T7>(c)KZxcd2jK5h#XciXB5C%>>@n4>Ep=+lL z{{RuMrGDlY65IBj>aMpcfao1}ud;1BL8OdI(KZ+mRg)WHj{wyA$Sg)i!}|);bZFH{ zDoGh)MtS&B(vusN3d%FKcm9;swxU&nDaqSoo;}pT2qaW+QCwsXGwYf=q(N5;fH=S# z(w(0OGfS-(d~8<-_NS2oU;qFdU{L0WJ_!dP>fb!QdCEgS8qgOC8@;Z|E@jv$Cg z$0uR)+kPt==Gs;5HZi*h&x<~1ukTty2_7-Bt1Dz@oP532Xwu||M{I-nNhJQbp|rF2 zh89&T#&_e^u$8|B+V0XeP@O;yhs&p>XdB3HV=$sBqU7ehf3qgOw(Z%K42-LS17`$$ zE6Zh-F6~1o!}GYLo^I|8NCq%B8ydozU&K48*#m5L+v{q2;hJbw5EUvn=g3m#DH26; z6uKWGcB)*-98odu!<|_GE^uq+55ArBv->{+cVsA(XCsXM)$#%7BDp^}-y7HH58X~A zA7+*l%;lKw2Cez8c-u^8yCM*(px^*=igUFihT7dEdPEE*Mau5H_&#pEoiK5rNCeT z=i&SM*Ou6b;)o+-zAKQV{)cJ@X?C1e_Uw%+VRs~+pGLhI_O15EXYB2>LuVvXTw??W z2L~N+z>aI>A8vlqJA2w&r)jR`SjpK$kBoojHQ_Ql$i{cuWc+?UGdRLU%_pK2OdTeq|dU;b2nIlxg0s+TS(ywyjNSRwB zZ!G6NRgHLyC6KpOY#p{E=jp|ISMLSvQ~OKooUkIZO%c?G89RHF*Ta3W+4mipeI>2T zPaC6S45WVIlc`ab0=)C=quB1y?f(F1?PE)Md!ryF`?ez<{2KiW`#-jR$?VvzkBFj$ z103|PGVK!;#8IdyA7Vhq_S>2YLXm)yzMuwp!l&j+s*-G&qa$OFZ< z_^QhcPR%BEQIIk}wE`frOR3m^8?PXF{{XEKjOODSMgiy!KEJhE)+X;UuTBBzPJXzg zucNfNb-)CWHDvA$c<;6r=sPZ0zyVBTant2r0DEpf*Nlw2JUt9Yr*!I1dEN0#) zqGF>P1>fafa$Ls-9O(oMpE@sP&LY*Mf^o4sk>y67>`b_I*oNOo&V2Xd{8oB?A3BgI z4U$7+A6wTe*pdQ(t-jb9qX=Oa)AJV!=qFZq(Y!EO8Fg{ecSk~ODNEGj| z#{QgFiu+Ip`zqreBczW{(!V^u)RJWO+q8S&K{A|Vde@8BS65e8S65e4eUoE1XkI0} zD9+4r;ZkespRjMUh3r1e9iej(S>#Si;IGYV-&R)7_)^{50u%so{wv6#h>Ha!amH6W ze$?z&N4p3k93L@{ht8r%#LRT6##C?Se@eBr!H-cHI{TJ)`?6_H(tw=1VBM$0UNVrb+(*$a7w!?XSDFk-sksFpTE_ z0nh&L73AK-eTw!MX3kn@qm{A4#)tPx_Xo4xnGa;Zme9blMnE1F9z^_bLkhY>W(ko^;|E#9@NzZOO<3;l&!=gm(#r8e4(RL{JiBsm!W0EcbK`V@uCF~>VhFm;{)AFsnTOY5|SVwnyVh}e6_=|)S2 zc#+;Qg4hEY&s@}oiQstlQVz#R^7nC53zt$_Oyq!iXL@Sdc-7NW0g^#HL0cIl3?Dx#N)py{gk!Hszy(46*y6O0YDaewNWe)q zIoM><@J`N3_oqD~_v`gEF z(gJlMBcVC0<-S}UMN0$0^*quy9jo22jby9#k!iF5^GHttTz*gsiM?Vn!o43+nb2@IQ-*}tW}3> zT3slOh zAL(BQeWKicBig&i1QD#`730f-z#c2fJ&wHm2W`bHWUsDqUiR$YY4yPycljh^cK!GD zqtDw;E~P!{m37C3{Ka^^&uLsptno@q2mb(w{Odx`w{9j2Yj8@w${6SS@m^2a&2+1k zl3AG!Ac%Ey4aXN|>YO&@hIK;Oe0W6p^85+ZkGii_x}J+Xr1)RftVZ+JV15G{Whz2rbzEeRhsLQbgP4g)n|*-a8|TPxL9(+UN=YZUF#h76mIYQT z-Y!Vs9u7U;>PBcC=R{`8YQg7xb>fKTeddbD>ygQEkrI$M~s8KZeZ9 zkf&g1(Z?GD;7|zPNE>-{sW&ska-V#VB%l4zsGRT3vB!4g>s?w}+fE7aNBmg)6 z02G6=$sltH0FHxf@$TzPXg~rf!uk1~ze-w2(XKozq=U&`MtuHtH!%34bzsDtXCD3N z>LX~>osKus2cNouc;i3`7M~6QAY{_W-}Z6|3QFt;km<(MCk_+nAMQ4Bp z!6Wkd`^|e)v~j`=YNYHq-{bnyGdfQ@+p?jM4Oj!+)`V7Nj4GYC<0K6GuzJ%L_cFv$ zBv2G`PJenY;zW$%Ce@NOkV(h(=}akRky)3i-+$^WrdV7Q3Yj_E0Pk6kWbJfZ_lg)C z0CwlyOv0~f;fU4zpkVF4O|wnPWLR1BsnWX)devIt2=2y1V`eMY`kGGeM^-Td83*!^ zde%&E$=(+#!BcU8oc@(B9KVS!*<{jAakev_qmBOndOu`nXf7SftZH$FAExxTYQkb@ zWV1o3m}RlPeqQ>$g!dOSN+l1E%a#P>dDF4S_;OHZRt8Ah9XZ7o!6!s`j-_4jNFcYb z6nGj%nM90018kp#7>VT~Hwpmc;P3IPyivxPD8H8+ZSna~RwJJFP&_9DV`?4Mx{Y(8 z0OL3qAF%bQlGWwQ2>~Y~AoTftX0H;rbil6acg8{E-9veezJkz_0XnuP>-bp>`NK!PtLlQscdIBZlydDvq0V#y+!ETL>hHG>^7sCgryNntRo_eL*lD}tj3hV$w0 zt|(-;*B}IukVxa*n&|K2R53VZa4<4HjYt8a4*3p76amJ1)?8hmKjK5`a5KgT_;Ixs zlUN z<>kfXtu@TgBa_Q9KfPAc-dW`f6l~`_1tz_#_GR`<+aA)~q_htSqv)CnE$NG1I5kYQ`+NUhIHL%8}>qrC+mDOQR9$e3A&qxN*Mbyf52-v!2N9 zi+=9v($%s_2fIQ+=WM5~d~x>g_E&N2_3PePK+OTkAtO6{kP7spDOM^*2(CE5$31E( z{>SZ0&ds_>tmk-`byg$xHTA#Uv)j>s*+Sa(=n3N(A*9{DY)yS1+4s@@5oRPl*#x#t z8pW1rfzrTd8NlD@(XTAgpc{6v=b7YEL1lB9x>C8bu$H%IPU=f6~_Dj z07^7(+~XuD3UlYz`q83^Wg=dnU}qTr05rYLv%6tQ!jCUscfO+Gd$E-nY;)zu*UFSz zbt+_R9CCE=(ZQx8+)G;_hL-$aya-3 zUQnV&kyz>=__zYOo?{ZoH*9G*1f1>f#aVAVyTy)VA}}+ZJbGrh$dP7cg_xHZ+dp68 zlWxtry1J3nGVjLtKMYcLQKWIr774=TN{?T4e4Y2g?I|rS;Owy>3n?x@Zb#Abua;}7 zMn@FQt@YKj28wwX9!^DlG52BnLcG20So;?4b|fYv)a2y(Zr{?rz3f?xhr1E0r~||X zeiZfW+SDUqPz-oZ2VLtgx2;0PuZF==2yfS=d>i+uvaz%FwHD48<1d$!N`Ofx&=1zV zF;iVy{>R_R*}llY^bdzZDl6#oS|1aPn{E@%<}R+cBhJ zH4t*%4YAMnrQTPT=fN2RIAM(A%8d?Z4~51_8}s$G7?|P<0V|^(EaN$)u5F`b?{*{| zK!MKQc%s=bfM#45T#@0=yQNb3R#l7-2{~b%zo#_+0A`GWBvalDkVxMfR##{%-ds2m z<8h}aeZ4X1Muj7{kydsj1HQw252Hi7F~>Se2BqYB;Cc$JrQD~s5=lq!fFLhHky^4C zW?2kuh{?`K82AcOEeRSaMp91RS*B-G1SVLcB%BY+(0Of2&i?@RKKr}U18uiHeJMGc zyi_UA*d`*p6$LWtvsB)PMQaU!Uch#Ja z@kqMOD){iAZonKIdhO+!ZDd=s6b&YU7Uwts`3kl4%@9L5B>dNe;yC z*Nu;zO{JNN;pUM`lBaXI$0MaRD?rYw#Gz4~oDbYqZ)x7aB9R=VDEzo1Vl!VMee<4m z?E6+}3qI8mu^zU+)|oOAM~VvY!GyQe4u>~coj(z9KSIwC@IpUN}v zA6;n|z0j>0i05Vp11BSj8r`(^+RCzoe0AQmi^&8L$`{1I@$TEEXcJz|D@g;c=WSt5 zG4bh|8eBAXvD^1#vhFq~9~$F*cc6wXB9r0@3C7<2t8NL^U?7z&IZ}5OT;|}j1QEZ7 zgTL1Fc_c`X2OpbY0LVK~A~3MbnhEF+uHu0**@*+RU=ngLi_h2ZK)AQFlG&umIXFxZ zemr~YF%sP_N9K5x>COSiI|?+RE-r#BdKLKCV2-1YtX1Re`)f}M6*)O2KtHt-1Ys(w zsxTSbPIJ)K&8(3sU?@*Kt~aVlC9q=iXk91yvHfXz?I1G=VUtSaVNi^Il%3oi%!T92 zF6BrY6Ys~@&a)y?WtYBYPzcgW<0B)Cif-xf(Y`YlHeDxgQ?@Fw-f56Z_*Gys2>Q=j zy^YD1>gTaGpgu1a#$Q3`I>vP&~?(mmWz zmt9TNDxA>oB$)(j5YmT`s&o2vuMqoB?CCFkhV4jo>34y^z&T@&b$)X8(lmGTqhnIJ zAFX{S_d$+$tfsh)U2`BgAmd@_?ys?IA~zP%Jj>$%WRb!D09vizXa4}&46!m8LT)qq zaYB~jLm)xD#mqSjXC7`Z%x5{2De#X zN*sP>$Q3ZS0g5n{PX_@0!yJkYy!xaU8dp+nPAQJ_Qs8%bhH-WZRN== zx{@*HwM1jQftLiZC&WjcMWxf-M9|3>`=ibY&$^g~-W5gfbm6iJupARv*Y;4wGME_m zC&F}*h0mVY9~xfX0@Aujcp8v=X-JUz!Q1X`6 zdS`AZ?{vN;jA5h5IbMFYtW=)n^<;}n;xm9Z#y*W|_IZ-t*+ivPM(SC1ALgEpK_f5@ z4i7`psUk=pAgPVEAn$?wC>`Qw!cMSGG@bY0QvI8GB)9Ie8A7S*PCh*=RVIp5EgP(W zf5LN0%*-Nk$~+z=+kw`yrB;?VmN=LJu<)Jwb4}aC>Pr!@JTT|zI zJgI2!ZY2Sq@{xi^LBQ+Jr2yQCExWTA@0V^mb4Ye{5B}1SOeIA->S2H=m-p@2ldIU1 zDg(NY5Is6$)~4{wdvO%${4&d_aga0gY5O}x3c_cNNI3`BZ#qiG!J)cfW_et456Ce?uJqMThru#6)tKG~r`5rzS)Xi}% zz0i+K7+7FugP(TQS$jcW5rCSpoj{BR{{S??BD8v=2+l^}jsE~a=|TKaGbOWx2+O$6 zG4rC_q6I`pR|+(e{Y7(MEwpHwd%#AJao4Xr(zo5Pl0>m0m1Z6+ZP)gs-HC@%DJ&EQ z$mzD@9+e}sQsLUtN&B$-vF|Vj{eHZwXR}0N)kCyO6^H~8{eCo+_06cf5f^Pla0>2z zy4R&X^Iw6u`#Zn4Xe9+BEEuQG^JnVf;9xUJr*YpW3Tuf338H11I^@j+y zvWOl`F>Oalq1@XP4RFltnbWb(H}_(JG}7Cto-i3%f~fNN4mwn#GeRy1)2y~Z*fHe& zA1Y4$6Y$bxl2~MEQI1Kkgg*9h0qyj~U@8nsP7|$qzwF}OE`71=_~hA4pq;$8uhBnZ zT-*CQZ!Nf-1XajhyyqC?*PQlaNq7sdgfPI!E1mE>_pM1SR6?;kv1i<{JO0!G9C1iX zOqxjifyX>?kKU{Wym&Fln+|rxEqvA&>`0Bf$o!RXemu}o9Dt%G$Z&F3t~%}Yn!K<{ z3?1x(PVgPJBLELPP;4f7Z{A5AOke|tJDS;&Ovm0p7Iq+l7-w&QrR@|MV`qfK6zXiQ zk?!)RCcQ_ z74>qm+(uVaaj9&0jtTXm!P*IJE?t?=3ZUm7I%IZ|OyJ0h1ZVSU{N8^GdI{~Fw0BX0 zNGJk~ng!LOJgXvpLUVz}ecWQYTXuCn#KFc1&I$D6)`10_(E%#T0}+_fO8P^!<3H|B&c_U@<=qF${{WspTyI4XKRjQ~s+<|~P^cCX$ zz1lKaLnN{;a=)3f6-U3}UmtzqzSd{Bo?gN1+m;Z5_7rD z4cN05JerE?>gw-G>gpsY?&Cno&3(o9W}4-FjIwL9DzHGf!*T1MOnj@~c5=GRk1*1u zd;@`uZMT*wn?(}LB%L(6ZZVB5<({UVmgx(GNWx=c_#6Cjw-lde+e012%(F%nL!7Z2 z9G(Hj{{ZHjxsK1kVIy3e0)Jhome8UAptPheTThElf6}XXZLX9@3n-Cr4ziCOgu-=O7d%& zMEYWjPLZ($`SN$`PE1kkT2I8TTls_dz1&jv?(mTMgoFP8p65~EZIQ)2dD_s%RwWIr zaSoGKJS84oC!N9_;y6NVj#3S4c0XATI~cr8N}xh#EP9mIF{{#(ehAQ%oX3 zEWPAt zZ$i4agd-|TD>)ehJK%NWiVdRo1(stQC{ezVocz510D5=*rPyNGJduy03Q&rS%_ylQC4*BPC>q5LiJS?$D6ez-j;rVUO)lSQ6Xrl%|3g-;X zjgLRpwgW77toHsVag6h);s-RLkX#mNS~N`OEHR&cY9P4RBxtfLfWVX|AfHc_Xt}nz zi${Ecw44It-?v`0wX(9@e;37!5?68ie_GGFg34>DBWdPV-%p5Oj=d=GwD#f?--bpf zVB~@C^#0XriCmSABP2&8lfXIh$2`*4NXQJYJ9mY5@!%Q^W+;J|SYp5o_XS5c{1wkIPzj%q&;@QCu$AuX^wZ;a>s{YQuFbE{xKfAymam4Q6YBAp_ zr_H#z?(|8fF_3b3>&`0eePd;G*9#g?mGK=Q@5iTFwa2s*$euA01{n*}9^+9DZCk-A zO(g28sO3vw4~Bg|N~dUhMQIsl7r`}dG{^#<)Mw*Wvi6R~C<;k35=J#KQ`5|ve%rUK zrEJ^Gz<@9{j2^q-rlD*(yiLPoTaXk`YAdlBvYOC&i=Hl-q&_qNYHoov9h-0x`I79 zp~vlCVXP>vePBa)iD^`}aqp~eX#KkOcG}Q~yM_h?g^;=`k8vla^_yk(f!R$2cL%j? zB?*lKzf;qX&An;bduwUh6KJ=VD8@i-ETaJQ=b9zIww;+2vPAdR%ZAg2l?Hkb<`rf3 zzp||v&G}!irG&j(&W;qKw=l82k?SEj#?L2qZu`U29EXbgG zfu1RQf3zOPx}A`Aou;%I9o*@H2>$@YX@1}Kzq2oG&AZ=P1k;oq>T~n2673ZGKkXjP zoc4-#Jd**Q_E7^iJ?&nL_V3tFVLMLtaoN48+4kTM2XizkfcoKU8`yucuV<~DyGOVC zZo!~g0F4&rG8=xnmlf}?X1%obOR{2)%Gb5~F(Qa)Q60oVPz4@4k;oI2}9BO3Qz| zAG06r11X&MdU2;*dQZc=t!4Xc_Dbus-R4SR7}Q~lt5pUiHz2+@F` zhLJOj`bmt_9@724dogd=;cUA`IW;a>QfSK)@RGb=v3~H~jV1hctrX!7-q{xAG|-Z@m`UWtA8651D>b6%_AS)7qTJkIc_8Gn6M*O zRF8M(rf+`oeS{E^Z6SVJQm2Uj0PiaYwf^$96SOAU##SKsfkC&f1eKJ2@$Aw%%V~(@ zZM2Qld2b~+pLm-CZ!#EVEX3hRTpx#dOLiCDA`2!db#HPb$tvojIOqZI1rp=$8*1iE zM|jJ=?x5%Y0IpH{Gw%~+_$7^?pH|r{pkv+qO4P9X$M$PmOZb(zSBQpO74dJt%#=I- z0KD^sjwr2UjW9K81Rv5$TeW`i@U&7Vb2GL)Bmss#U+*by&-=@faS*-i^CT&dL60MS zv%HwBj?w$U%MY}7CL3_}2O3v$-=pG}PrO%Xr-|Wz3uOn3ef9_VoKn}{cwX4LmEEnO z2v-0oZ~Eym_W9duY?y_6zz*kLGv+*XtJwblc%I&hNF#XDxg!!V*PX%R_?Y?DRsR6n z?{9anBydLi_U~TuyN^}1JJuBK@ZNAm^g_L%^Z;u<|}C@dlDY#mgL?wN6HJzpX_-Y1;j(Zd6-e-9}eoqE;WVtw?>Q z_K_qK4%EI`0LG(nAaCA}Kej&Bh_E|%wDHIP0EJ2Y=x}>s?J~%9_Rndar~cI@cmDv| zuDJHE+9?4t_O$9&22L}+pKPs8~7q>wYH)r1yxWR${ z0JSZ3*}mpVF*-llFyIGWJFKubbOA{*(y2 z2ezY>M7^7I3R%R&Cb?Goc+rqWE0hMLlY?9bZk zmDe9(c8~;e){_4K(@(?pMeVZ)&-)_mv+zF+Hh=gj`;W1&ZLPwqc3s?(5t0SGq>uSN zvqHD~7xv0zM?Ie^GaeopMm_!t-Gl4{+VF}ei37+9#+i2OzGJ1^><`-~xe!Nc7@XyV za_Jp^`Q0~V_jLB!Nm>Aw;n#9;E)V|zTc%g;*X_A(?4%vxTS z1(wIY$K@tWXBqzh=Xs=m`CGlT{4-1c0AvgtDO28#e7}WGr`@;OLt`78yG6Mt#;)>d z1OEVbn#unF<#YDVNthwBAOhQWxX1qPt!MXf_S##tLM>Gr87I9RfBIcDarbEUx+&Bf zi#9{UDVHDpioI?2qwFtgdlB2F!ukn2yk#Zs*eiR9QJV1e1)l(NepT)_M5Wp zdq=dVxsKj+)D5`ZbH;LnSCq^5TACi#bseUcHfp5*00qlQ=s(?KJWww_>~|gFeirUx zgzg(4<2>yhEhpWNw84M-QsnI!EZF0(@aiqT>;18DjW=o-o%d{ehw%N>^#1^L+lW#; z-@d>8X_g^I+kf*q=KHYA5=B9oKw?zpJ!54x?@t;AqK`cits6hE z?_m5fN!jsar-S$~^Zx*QG5S+a_7Uuz`aQdLZJa3>QmqxdYQ*~g01VcxhuBB4%h`)* zFJ{_}2P8ZZYRUfq>U1;qKkQwM$}T;eu+h$;XBOmp(vL6MAF@zctg-e7XDO7GRQw!z z$@gg9n}h6=*@m^YSbdr7vOw{PY@^7@{{X?7Z9dAqnvOS#`wy{*lkKqkfz<2` zee?EF_FrS{_hMNX9RjQ%NV4NO-TZt+PWw1P%Fwm3BG-ISt8gAt5pIL7@mx4Nr!*>gn{k0gq~gM|&@3ywDw#igCJ z7HcuKjQ5H8LX2nS@BM1mJ)ITMjI3&!PIR6<+)*0B#step9-qoEs&xCd+NL`o<3mFb z!8q`bj&|pN-m5oe1b*>KD8~8Q`cUm``=HG#7gthqr#uflZ9}#RyTYxWOE%}-#`Me) zTg5q)u4D_~Vm&xCJKF{AEfO?<$&BGn2hSer$L%XIW{T2A&g76BAt&dy)Pr6@6bHSF zyefa;1f9KW(jRZ1XjVSXb|mQL6LT_^iZ#YY$8t3TUlMk|Xx#Rl>)l;S@;e;mn4jL0 zuCA`BQIm{;@2IY>6|L;AX-(N(vu}L?!^I$Bf=BE{evAE%cAxuS*{e(V!pdZYPlV*D zBYfjK?_SOkh~gLKQdv-}ipMKKhS@Gcs)+)~S&pD9O(IKpV~sJ9!vWLY2GqOT#%Bgb zAThvI#(qB!p-ruv5yz!tM?=n3AL&;S!yG{)Qy3g+8h4>AfWBBU4mJdDwH4-$JxQmK zNyw~g!!C&!_eDzSIBov`Z(8}U?}Y?y>@~y0RhbwPF~;N4z8`K*YAdU&tE;Q4tEjKwp=5UFJ1EV2 zF>O=u0!7er6mAAb*Xd3{3dJ4}Sy#HzR${`{KwFaRg>-oEVn zqF#u8%`M=whg^*#caEdPq@OWgNLWvp)+u5tSZDI!(*(yW1e9q5b;!p503Nkqfu=Z( z6-V>qeA4nPV^hQd$iU7pa%e>+j_NE%F{ougAbOEc{{RfA5=M)kFbSX)QEj#(5tKE+$POR1!Zo zg!AZpsYbiGhU7&Wh6S)e1dub+=T2T*Tiqw|NE=}1A1&)CEbJHfD+0s-#;qV^dFLC~ ziT$Q~H*I;?lfiQ$%Ns&LM!_X<{{RUU`KRq?XQyWSRoWJ7l9608u17$A754uC-7Y&@ z&tWZOvbByQ-Gp)w4NbT?#eD;15FtDA$m3-zkU$>)0Iq0rO(d6TYYOL4J>wN8J9*-X zaoLObj`zA!02m6RlkonucxE=S1$G5jBCRaORUra|Dtshw@1*a1l5sv)>daZIM|giQ>c=_hqVsYli-Vz)tYiFA_O1RMNvDc4}@ z;48rQjp=)s;Fc3II6k z0CKqgp0xZHx*3d`2qOSkn10ZDaUqhm{VliX)dgDbIIxGP4P?G5J-F zJ_8kSiEIq>46#l0@t-`Nw4&e5cBi>ViXopAp@8`PaZGkwN{V~_=@X+aKs__%MY@J} zm46J-s*#rs&rd2+2wFS&AZEfa1#`CiV>qXjpkC^BjgEXcIi#+N+7@CRkmouMNc9_f z^I3O&treo8TSip75M-4WW3 z1M~BsT>DpIEaHkwyJAvI1}?cidEX!DOxX6XXIvo=_Jy*#kVt7)o|^-`Z(C0l%M#KB z1nnZ=1J1IvpbhX91_Xc9&A?HFi6hozAO!me0+J%D)E*trF!j(`zP*Q*>^wsH*;}!s6f+V6*=7Fd~NlL z`gY&FNy^16cq9!aw#GcGLMf(#*TgmVhZ=@X208dvebwc}dz?DwRyQJ;vYjp>Ohw{8 zCILVgK6O2#Z4>_hyH$@Hvk)_nJ~sLJSBm!Jc9K|1tc|FqRH}{G`I`Lj`*c#jX+5Y& zz%pzxj+K@6Ya^$&U7FG8$ej)wuZUOZf3mG_6_S-1Z3D!(#&Mngzk2d3PVVa4T#}S* z<0o!D98$Bmc4!!f(!^(0p;=wKZ7H>4k+=(a-#!@* z#Qy+qojjK|&2)R1)Zl485%Txs(V7sfd!Ve$_-t@G`Ex@=B6mp&glqs9?04z4RyYwg zqN(=``&5yrZmltu>SS2)_2{A#7Nc*)duBxL7)qlz4N3Q6H(-L~62e`;gC zjNxL*WBHSenl;nJ>dB`KlZ*~Jb?Zsn%n^u`qeegg9=^U+StHN_$17`dxDBx9(y`=g z*{>csnS>fn+mb16+LdOuWeC{7)kdUKR05}7D(-I>%@3Iw2@6>X38&a~{q>+O(jH6@WZw(m9-AY)6l?KN+ zJwK%|@`(rpWDqikr#y=1g<^j6=?Hkp*m-oMW|jq?5h`objljlFyW{esG*d}0=E9zQ zziMDPiZ($SvnkG4=Q~y5N1a5HV^KbM&%laW@jr&nxmivyRDgZdouqQlj`c>9)y6#i zJ=J7}Xm5j&saON3vXTasut6jpM@ZWz&m)?0X*8=K)uj0hNsVMOeDDgWGDuMJd-LNu_BHR!xW3ZduZ!1{vkQj`(x6+V*BS?-p}mJR~D}AY$VLM z&JNpfFn%@hqa!MY&T?t4$Zb8L5ItCN@2}Fou{sbG`OndKz5 zd`pAy=Amr6%c4$nlaapJ&$_f#mIn~CDDe1LYM%%Eg8|yy) z7s*v2d`dd{SHZt}>s5!_?)gd*$-bX|y1ZxX8pHje_Kn$)1F@M-4_)i@Q?hLY7E1wL z!i->V^Tl}wXIxv@+30m*$*VjN+()fsk0g2Tyo!2slR>C<|1 zvh8AmP_a6&j1qkhzfD9GR zLC@FeSC!H?EUJs2$_U0!l>x3~iP&f^7>tk!{e1pZ7^fEwP_ae81mge^&efq2?xPW| zGp9K`bRJa}+8~wMNdqa)qn)bK67q%xPMi^y*z$S}{{YsadyOdn0EZcTh1;PS_~ZLh z&|S_D3&zsQGOQP${NA6nD|K=BrDiFhMBmOgJkvHk+?PH4M=g&MjxoJ#Drn2d-~)<9 zq=r-f0B4zoJU$(U+-xfM5;KV6VA{Hn4hZ$D3t<#3At6cMkLij^3FdpQ?=KQCfaiq1?1{z}l1rBw&CJDM?D&x|LE@POXN+Y83ZV zT}qA@3a5N>5BgOun=7_uRlzKG_4@hMVsjuWLaJjcsC4@MYt&zP02A0A)K-A5h>qob z4;A_U05lHSl}CqGnxAFz({%%fDapIdetzUA&N(+DF++wejiz?9`V^qY1wcI9R7#a zm`oy)+5>t}o@I1oMnLC{^Xa#(0_;mQwj*USsqredKc;t}t;~^vB}O^jgZ@x`=8J67 zNPFQTgeq{rZSFf$lAwGQD!Al@-`z<^X3s0REIHVYeEL$?k}OWDRE*#aw)N(kvRQS8 zA<qENIfW4 zmr_X_ZrCT2M4IIx%&s%29kHG%XS&s?$QsJ*xZKquFEy~5SbMheU`BYVUWS&)#*l-) zHRl~lB#iC#y)-B9 z(07Ff_{sSB)3VKA&6DS(K#wGi z#`GJfk$g#*-y4na!#?cOmUEdC4i2pOQKW4sN{o@vP>Qt6{_(&VI0G5$)~Mb5Q0X2f z!Q*^ZWsH(EuKEZd>hY=Eb>H7w4SNds7-f#ehc)D}N2wxGpd4ugG# z*-mq|YA>w8i!-{jHo?dn@9z4=VL=tetn#89tFdiBlYo97rD|Hk8s4PtMoeU9K3r2! zcW{TnQb3<0sG zFYQWNckt){>`Bi4M~cdj6o(R=xgZah*B({#f8PqsN$hjXrE-!3&#$_^I0L|2JA+dQ z22}^nzWDpF{{a3z?DdJxl9(gN=jGD9;bR_{(UU51l6c3aYA+w` zYf-0Mh?+()4#XO6GX!1$IVHa+-m~7#Ae_kxg_2C_Z_A(3g@+Q2d#i3o(DJ5r$HwI8 z!OlLqQtVJJT<1%2G5x7q>-4k>JftdTBP0XwrR2XIrERHK5rMNW86(n`OHA3g?#moy zOD0Ic=QynWMBKERopLxmcjGnbf45JxyH97~XrY}=*as*aZSd3yuZ=yZ?aQ9o?OE=n zk;r!}0b+ltta|F|>gww1>d^Liw06z2V?V?ny?%{-oE?76*%6%gYC&P?UVRLS90x9Y z#sh46`TOghRxv5Y7#+c`mf|4*$<=}h2kVMX>Eg+jGKW`?85?`67qpt%eG$l@nMQCx zB=oPI{@OmqQ?{<&_p;$w<;f*gFb;jlYtcQS_C@VIwadf!8-t|md#N}70Ft)7koy$v z>-)IB6>TJFTYX65_e%QD?7Qsuv%Q+Lg<`gkzC{I}KnMQ-gdEqjtZh|bXCZLA0ta0C zshd?XPv)lUVBlcd$4rpf;#5hD0sX63vwM?ts+B2?$s2(@p<@K7(7cC+vV~-c0+dVo~ zyQphao-l!#cNoXQsRZa_RDA&8XUNs9lr!tbz%e<&#?_dxW@#QW6MXJ@{VOZlTSb=H zi@pd1AD5MU6ZeVi#_aEIjpk&^q)v*kk&8t8VV<2`-FY z9An52Ge}KwG+GR4&xD*+`!;!BTFi2^dzj*(90f~Wz-4l^7QvsPi;jTTg%=SIT;yT^v!%L_lxW+ ziyv%cy6#HFF9%5j_ODdeS65e8S65MOpptn+aicLOfHPl0ecyh~-g}kpEBkY$a6oka z>t9#(8w?k7>UpVw;F41sNHdIMBcP?FCMb1j zBc?y4CwDYn60w4JKc@7Zt*egGjzGa-(sHEl`(mG(L{A7+@Qt?Sj3!2fCCY(~x*m9{ zJ-`eaGBgYW?;UYgM@2vp*Hb=D2&0*`J{hvO#-r!-DQnw@Dx+5iV~PXbyb>^3K>!1T z_3rsp8T;FqCB~7CF@cOz?{gH3w1a+pTW^k)5BPrL3or!iFnRUbrrJ*JpMT{z-#F*| zR&2LYHP#W%4#a9S#ii?`=*Vn&WRZ{aN0wglO>#+vZ18sHo#<_O7kCmfIpl$wYR>me zn}Smr8)SWdYC3kRNcva8tDbN^hm}FQNfZE3usjkrIR5}N342N;0be?YT#O#P{c}cx zwjfqs@>En&z+sL)RZ06vWY+MwbT}YwSaSA&H+{>>GB*b~&iq#IXI_VG3bqFe+9~$RB6JHR0sC!#+?JsOf z?gww1>gtriVXKOY_NU$7w=H`g+BsypnIlr07hnhKYwI6ozRo#w-PQilPz8BWu=Q!_E{;JQp`&sN;zRZ_J{kpR*Ki;oCm~VA> zEw9=wynU(O9?(rXiO+mF{{YQfmj3{2-H)b7=DCYkPvWLO_^ZNx(EiXn548I#WNVnD z$iN!Z{{UL~p7oLL3pS65fJKEeH^>`uhF2ecM3C~cXv{{T`e=~4EL z*y-6O>N}{`Ffp`?pU~C?=i2XK$%gz?XMM+bzpsvylkKOngf0I7XpG?OJH`J1u9A!G zyRj|UO6(-hOt1ZQsVCd#VKu(7gT4qlKkKC1?+w{5;WL0oi^RY6)W`Py*(UiTS#-pI zn3dc9dS|zO-Mc0$LEX*XHl9N%&;0e^*B^L7ZWzTIV4c3T)-P%Ox!?ErL^#e)?Z5og zZqNI|_LLgC$V8s~NB;nmtnSnMdF`8<(IiEce6=wBo{+rzZSBUGGLqQ;0KESI_0Vp9 z+B)@J^=x0II!LcRZIj4>Y8f zW0FasR{sF9P_55sq(_s~^si}l4`Y^rqg#N|DaZl3e5$9ux4--}n%uDiIO8;H`$e;j zWY(awWUg^qeTfC7_h?(B(giL?NXIqo{>M(s?5B}QNzsR0Ez-P$vb~|RF@lINyJTZK zd~3^npY4%7s|1fBy4JU6+?UQk3=TlWc?GoCw$75ruG<~_>asIQAXEIqp!&sL(isbv zMNp#{+iV)%glPId>rG2N!hs_pBOO8Mno`*$Gqafr>Ll%)ft~tOw)e6@DS+j} z0lNZmwgnRNybIT`chQ!i%S)0EOq`N7DgmPWP;j0Q$?l_S^7)~K%YczdvN*vV2czwO0KS}d}t zJ01oH9_^@iFwBkJ2GmBwB%JT=u0;h7q|>)SOSqUxq=wQq2OHz%>r1Jb9LcW^F^q$^ z!n8!ds+Y$FK?7m>eQ!(6gn+b)1Bcii52voxS6g}G@0oYx;0@@_C=ufgsAGI_^_ry0 zhFxqigMv!(X>#4(v7=BM9F4O^Dy*u}>Q^drf;_z`S-@$)?;A-t;|KjHb6d# z2sy?GAEtPzxV2d1B|!l4F^%)?uVcu9)A*A)1M;e?4f^#J(KWlvB<3YtoEIs+2dz>` z43C71kIZ)dp9+Hpn`tJLHg#kv9~@wcYqM?9JW=Y?u-^kaQ!)h^!xb!d->IeIU2l_WRHJbP|Rs0 znw;Z(&UXE_{{Tu(_BXZ~u-qo%{s)(XBgHa?(W6rd3Xm0pAs+3$?@nqyP@1ilCLQ5s*ix z8v~8O2mDp#K`d?FV{W+4Hl*z@*`bjK3fRs`IR2D-i?|}UM)0#7ZR?67%M{kiucSK+ z09VX(s>R(~X^T>}w!jDWpZMCc*4o4amfPnQx9Xmp~lqJDxo&${O4lOk+S$ISbdVQb%|pT{=MHCv5#-nuUoj6fkTu zk&toDJ=D^~q9GccmyFWW!2?Jgh9A*J2kAse%duAci}`XnBhI5=@X1vNe1Jzh`BIV1 zCCNeqsVB<^nlmU_hkGKTpxFB2mp1w$Gb{D(LRj z#-;q>urP7`=mbWx00c4ZKU>n*5u{{>Q6UGX$Lr@_oBP3gZ6C8; zgDH7?xf(y=uCNKn^2pl1KYgX`TaMT5Np9{Xc?&Thvl4OfCX%$an(B3i1ZQ?Q0YN0! z(tly!W50-o+q8R15?TB~8a(6P3V&Mqi?IEkx9rZ%SncADBtgc2I&L_xEbO(4O$!-} zlE7tmI2E~hZWbtnTph4Sr#ySAm*~k7Mv4wj0V8^>(5xxm%E(z405<;szt+@>-NkWn z{4E5WWe^WOaq*`A00Sc_k;WX106ES%<9f)vl6cYKl`;vyV!MN$IQ6d%_S@MzPTA}! zqIlL;AnMFvj{gArCcXpvTlPkOW&Na@291PFxXgud%+xe$wszpzNizx|IaFa1o>g{;W?*_fKVkC9H0fE=b73bm>~LW-CHv z#(mrDJ!{kd0B;`GN9@nDliaMKU6)L1PWi`{MSLCG-K}-nouMt%^1GQFw(L*tYc!Hh zX^zgjn$G2CiP>3BK?I8XGw!eUhTXB*;>zK>$!(Yesf!Xia>l-xihF4ebEKW{0M2$9 z_itKDrXm7@%Yb;u9(k%wezCrLumfiY8=p!I+>uI*O68OQFaY}CR705I&|ENakT=Nr z@kF#e--2PRFXqDJ5#(wvgm)@dCDNmPz~A&WjeTS!oq~mPfJO#!>#*Z*(u>(et?t>_ z94{beo(GquY|GlJQdF4?YmdxG@~mj5gR~_66OEV+NsOElJ!#*=HlVmh8{m2K#@}D9 zF?kf0sv0e6)Q|`tJW;zlyqx!>w}fMJoc@%fYD>3q;Ksyp{V0z*lp4-7omkA%m1Tx4*4dbjyU+!5J#yA;aeC5cgM@tknKBn zC1W6wlbj5E_Nzl2k=;uY>I;rYAQAHQrlp4nBVw!5Q8_2{qFcc6YEbXSrBj`;>yM3b zw@p3fqDX9DjP&+7AAxQ*ctk@>$acL4tYdQY~bMz zD6sf+>{nOI-e~K5V-h40F9$npJ#)<|Ec57afU6cNcRO^d_i`hlnSgkQ=JFjne%^G# zTukt1Np?S*1COn#-p-0dF7qiF0OzRvD?_vUwPwf*l6Sxv{XVlw-oPYrzQBSC@3wv4 zU$|$uGC-)_5C)JpT#r6I^eN}=5b0yY5Pcv-^0YJ z20TX|Bk8p+(X*})CIA9{y42iTGeGGa ziJ-AMeEI2*I><7=e37T+Q~7$0{VPfvsIZa98%a_8pVQC#REd+iC4g;1NF&|lRk8*# zAup*mDj4VV>&;WPE=+OjP`U=*5m@sr?{nTnF{@@fl70UGtv_kr2omCA&yF>Fz2532 zuW0v^m5VGgPTdE?e1D~F+el%BG@WHsTWuSqLySa5yCdeWo7O z<>)qUkScfE2JQQZ=0h+No^iLu4H7WZ2WXOfk7z9k3`^kNKJO0dzmw@?Kjq8QQlUJo z15$h4Q2I1{OHQeFL*GB1#i}9AW|xw6)l2N7JoDR(b)#p9lK2mB-$r>ocXFWT^G=m1 zgLkg@a%aW+D9OtNVs5(^KZ@N+nLH?xKbw^XS@cVkLPrI%Cg$=NLY(HXyW0@jiO47A?&tl2K}gBt$;RTcA2J}nvB$v=6rl-Xbzq!5#g`Hx zhm3<+KqnHLSW{T)A{XK=BW{nR^dwqli#r+rl1&dpSYRt2YTRROH(b6GBCn&)>K(2<2LiFr4RoBq-zNh`9~>e z)IV<+O!9o(QnE;C5DQc*)@p8!?c7~niSiHZzSXM(<#C*n^lfQFx3b?^uT8FgY_L?T z8j-zS%DCpJazED7L6=;E-&WDf(c8Z!8Q2F1h?m-ZNKaiK`d4`>PbvaS^5Y#&sP^Ii zE6JpwO5XMi=_|9uA~usi4_$|~KLiGAHa92iaamnN^>3+B+K>*5lIEfXZKKsfnN)A? z7G-KdFlH+)?>A}Tc(6+nUo@goZB2Bg97~)4$nE6YzsS~$bS#a@mO4!6ufFTzB5&Ov zs-)zSs9b0MiE{b3b(jcc80J!atvN?$(HZXj2oiL6U9^fv<7o78ugl_bXq`Tyt)2cDx*PZuscM zO%=M2msz)HtHa;W_Z!5GzkY@*22oy}po+HXYzoUsb=9?*ZJ;yA+SF;|mM!_l{2$=k zgvTTq?RRP1)Jg@Rc}%qZ8JN>w8_w^vL^+l(KZ>%A^L+@;W6 zFrC_}lK)kj>+vPys;t~h>MwqTK-yVK{BN%-$GDrUJX3MqTI7LcM@f+!7R;z8$)@Mi zC7c4GQSZM|wNTk=7)kxANWzfJV6XrNCFKTo-~DckG9GN|j{C?3vLRg)+c~RC4G@*~ zjz@_~*~AsSMIthUwVpE|vb5&!0cr8uUVppuDLzr^nFx2wj@Yy+O?BL5B$k8Sw z{bRXY{-L*qo`^zW;|5hcnXt3`YR9DKjorh4?}yvW#XivYmQM&3%uG`^aa$=rp2;>G z+mQmU%0K!@_iSbmLcI<5+ z)QRkOzF3RJkTb7a_v)ydbCux72i*2Pvgu^fo98Mn?K3^Z zjUlwkom+?6bg{{Mrk}b+R(Nb`1!QrgEHX1@KQjUzK}B`^bLxbnej5itWlDMJ=>=uH@dmEv13KI8=kedvAI|6lqL{8Jt+;95CaogRK3w z^dtYV8*5@i=#W%Z$451JG9lDBobDnt*e`xkM+uO#zgk3xp{q159^lC? zYdD;|2pT{asO_~3|7n9Z>0*5KJ79ndv3Ek8{#;WnfF(SF^Yst~L#~s) zo9iyk*8(91Q{W){_?P>gi;4czLx<@SHw|LpwrqpMqz=}k zu#Hf@oLEqLCHd^msz_Q8#m$g_jnYo*^r*&|xUw5RQbHDWZ_X z-EBK^$<5Z0*3CL1yYF#(RuVsivWdC=Sv(m;%mxk^2OxzI(X_GHgpwJ<;rx1HV+vhiINE&gp z=qKw9-7y@M3g$&_&G_?wOjOCgV=FafW5bru$I1@c>=+k_HQN0g ziYqyKn08e#Mj5r8_5fh8+k56OV}CVC&Df8N8*&!-2IIDl=*1Z}-Bf5tYk0+vYDCelm03!piU=+12YXI3KrW}s&+J_fTGkvr_jT?ZfDz@@D zSsq_zodiVpQysKXJflXhfxrlTl!9z0!Hbqd)P$D1kZgOV*Qq8r#TWhrpXJjAj%n4} zM+_^_0ws_?3jxc>v@0>m2($v)xh0pf?b=92_?BY3-Y`E&ak{&WTQQ|i3ANp7|8``- zpl2a(ftcmk?4h%N7dk^?fPL*JGE4aFJ544<%G}b^{Km%Ej+_K7ZH99@jY-XirCp&_ zvZ8TLlfkZsqZadt+4X;ov_P?izo$G_24(z_f<{Kf4e$U{nk4ngu1B;53?^` zsJX|#xf1%P5Lyn%-Yd7>^iKjSnI>P`b-0S-CqjRL6HzTkSc&wf^0embTko~d+b&7UvbT^#z4Vr#Hoa*op<-aL9V9U;_PZQ@ zMR5Y=bqI*n+v_K9#JoN^F?#0!4{Vvl;g%~S#eJREtvV3l;9ctpmg9|dds4+GWqkUQ z#L^^ve_T_Xz~UDEMnmb~Q+)Mkzqc8Y%_HK7V=kSPEL(n*A}5E(S(N3%yRp&7l0`t4 zf)jZXn5=ZFET4tifDq>Sm>USv$c;= zI9>1NMKo3Cz12#QMoD$=^j~~4ZNDS_ zS=m#tV;{;wr7frR|HAEEXFU?9FZ13Td5^wFajliq+9}@2!2t@4w`|<^C!gwpm1?!w zaungAHJlV^U6?vOD!Pyp-=e%nm~~rz-sl7o(&SH1Ei?)!16F;;Vy@hvRMMz{hKy)BgZ=0fG`^dLT6#`wYYbfa2C`6yDw(Zw^c^UK9k8fWS;o?++QBGUDo ztfF`*1e(x$y(fDpz z&vZGtYZ;h*AK~A-Pd8pfj3W3Kcd>2v!6=znY3DER{UOL`qzU|YTWl!-N58bA7|O{2 zSRD2i98kd4(8n6_EU@L^dItM5}!>(t&3i)EV%_ zJ3eRe=Zxkpi0YO+FWQI>@F{7I*32uzffAX zy4G4AWl304bH&6ZFl0+%daCen)x@s$8&-f) zlZXT!&Xwo=yaD1fOtkHl*dmNJqHLGp<(4Pl3rw`%^zQD8$z>^qe$7m3 z;@nM1#L~;Lxh))ni8rN|tFLw!Pxk!>Xp#@9`Hbu*Kgt@OJhUC}kY{=Ck)O5u-3Mkl z0qoLpTJwHY#eV4g)2c}a6?J#WE=xb4UUsx!HN1XW<1R?t`jH+hv!A@4Zz7`qxKzz{ZY(h$% zRQrzY4{_DZ-j=rPix$IZdNd7nJ``VDzW)cfA~E2E zh&xzsJ;w&dQK0=)kVP&l{W`FGh^lRk(@wj}@6PmGC1E+Vgd%ERqjJ#%xDG7IZk-;w zoOw|cBGS@WnUol}3FB;_adNt;(&KF>dnI__=$(~oC?-zw+f=*Lgt2EPg9l$iw_nmz_DTFgnyAF$qw|)FE-^=o4Yajrqs(m z+>n9p?H$jFH00*-M2xcm&#^QmwCSlRJk>d{_r3C#84~+-DSI)LeJ_}Xy0u*sJcZ~% z*m#m?Fd6P2(o3}=BPa8da6DK|$%KCJ+m-Kiv2lu0Ng+PXV8)H<)oA6H4>OX6+gZp9 z{KP9y?A&-ERl2!c%h74mCjTWtO6XIe?Q-d}(Jh!~hZHuMZc>1(t zA2_F9&eD?3_FzH@41T8Xqds;YiX%FBX}qWH-|lj;wfw6NG#G=HU7Ust=_^<$5un7HrX&SqeS z?r2#s6R;I{05~*ktVFYs!K(Y^GPe*$H&Q?_YLerXzh>gY?BqmkTL<34^4t=-0un4u zb@#4Zdz(0{FDt(8;wCl=7XYp^;{#mYx*dJ?cFN!5ENCTfV2wlzI60cOd^yj};(mw*+MD1 z+}_5+jLzBZX=xGIfbiFjClr|#dUo*#J%rH>8qEDInyWnGb18)UTB z8}FvtPDq3%jXj^JaMn*-y*E;av&W=@itBbP`u9jL)H!;FgEAnN??jVUqFE~fI_1ZJ z;6tvN=oL8#p<<@GH_$ohW>I1NmJGwDk6r zU$1Zd1UR3L&P%uJ{t9>Zjgwx1`zd2M|K++87Ai?vxr5xN>LJLdbg&~|Es%y?s#a?! z*#uCX?sL(KrVzW^3BS^(-TDu}iLAFNgNH0jg$%tAZsdzmsg;Te>AyK_5KZ#|oOg21 z6NHP0{t)r2v0DkCSnJuJ$}DxX=K1^r#7Z~AufZ6P0A*D+1#oQ{`0D*IWCQ9|d*j?m!5oBCr#@?R zg*qv5_w)g)70EiH7N_A!kQFn2CF#W0!<%`)Xyd)akBI(mRtDhcd z=9_|7D!jD~^Lvhgm4gj*@isC9{{(R*C<9qkAt@l}hhLItJ;XL4Mj~HAPC0%jJjo}d zCCtd1%xxLHuX9UXY^iM@k@2q=GoT6ju#rP+n<`(Z<*xhvOI0n@nN{*FsnrLtt=cP; z_gpFSm+Iuho1$ZcK8;jdsj`??)0ua*R9Q8%L1MJBGf9|tuum}D3A-JtLs!!MZA#0) za_r?~^aZA`VgS=V%Yc^J#?uqs7knO@H~ZWmM>o8*CMtct+QO7!y)c?bZ>7QoAW7v_}K;KsDxnlQV*Es!J&$WbCC2<5~7xi`mq zO7#<;kU^a%V}x4$L1)fI-+ytOLi>&I08efo+1|#Hk_p_LB7&Ydg~FA@BR?49)~hMZ ze0Gd~54S@$_xUE(`*SI^lVbFP`!9k=N2bNCsMa)WJDkX<;WWmw(pz0^)(ZLbxE6Oz z>bx_%28-9LA_-2|CqdtkHCef@4bXiD4cg9Q$JCMgL#WlSZ`O&*wJM&6po62?iV$;- zpURef?(St)438)g7sVx~V5Y>MiGRKyPZ2Vr5$vn5z%OiLQ)vrEFBAt&MV}7i-cJ_K zuCd5ky~dj0msK@{b$e1}u%BtmZ%pY(qM8Cl%zt(_+x9cCjy$y)CX2+5u<|skvw#1o zx7$Yh#_XrI{9)K^gl)1Egx7^GWi(mFt=J-D;<5&eW)P$8=fqy{1L>Rf&6ZscF;o_8!|BbBlk(hGvT?7;~QArP;41C`w56|Nj)s}=>ACiB#pTW z_Ld*T-1lwx=cbIULvVysBs4a)x6zC-vcR6A)j6iu(HoP;tx$q6?h|epk|BD5MWK2v zTX-1vz;D=lA+1V$l`LJBIB%x>siJFw9S~|A0p8b+xX%}2A0Q}veJQz3Es+3YG!4V?hLNACz^^(>AztDT*2J+;_@RSL`I0S;;Ux4NuUQGeI5q0DDUtlFg^vR>EaL zB7ic-!wvmWI;M-LvqB?A{cWPl@^G@`MvOT^r zWS~!CJ2`QzaumUqUk;L)G-}OlH!va^`ljS+aDJpq-GP7rI#k7*d-eSb-=BqPv^A|#vg&dy~g6J=@~NO7s1sre_K1>eUMD)`Jq*Yw-z09{*kR3{QO&|imw z6ht2N3*!`{579^5(bVd)9WLLu#?65uG@Y^F*^=d?D9MpAk5M?3)@|wiyc3xrkSZGe zmoYHWuMPm;YK0+K8#$cGZJWy3^trJ}seE>OfCwY_fU3iDMOzmhAA zGcFG4=gX(l*pW8#NYby-=k5-xGEauGIdDhX%V$|T zw$yUFimp@{l3tMHqiW07l7su{#%pu00F)04#ZlN_*>_9_uQ~8e^jcl-K8B(tMN|zZ ziF1oVOvImIi?cM4#940X@-|W{^(nXPdtAwAP_X|zf%=#KRfTI{sIZO)CBSJ~MN7L9 zIi~B|Qm|0+JKT$QiI>)U%|ooI@=vGD*9PBz|Db`AE&J8pBH=;J&G@XPr8x%Mm9j7) zY-I01Hfqx*Ny*aABGh+lM;{4hP&ssTnJpjxwNIZ~CIoWROzQd$?ipA8>P1>^5K|nO zAT4<;G|9;8YHXBojt$^SNW{A->c?jd-BCNftEnor+P zvA0S7*Ei1xKn+emHtCACg8IOUQ!}t~8ulD*1na6g-)A^}7P>qVlv#Ib*_)fKVVI2T*siE}GaAT^bL zN5%pa*DJQ*292MPy(T?9N%Y54Y@YA?Y4_Gz+gx64`6$kLW#|$D8JXfo^N>zm+M)mUsyIenejZsu^QfLFk)(^M0I)zk(DG5IuSjs^$;YGAdT*sMA^>o72htd5 zWIEnyFz!V0Qr&^n9s(+2q^lkBE|TS+xL-_qK#30)JH%&QITN|IUR{KHOJ3PkDl zoo;S4F!UxFwQ_R@nRk4*NCcX&JPjeF5_dTr17r;G=lBLQK!S%${*QBKZmWc&!B`K+8VRW(UK{dE@3SH$cjfuQpiaUlB?NZ<^*0-yEB^8k=?*`rVcYR_b|;fYx0svvTfBMCF;hz`+wUut!)#dzp|tmL+xf;k zmxaR~3=rNgBP7yPQ)`}OTJHuX>JOdYu#0Y8c9v(UthHv2#BfNl#CpbJjU?N0ugjOO zVyxCn0@bEVD9vp{-_VYZ1SX(fTxKk7g1J+|qZvH6Zc8z-Q(uv}dLl!lDpR|E)dp;} zxJGjJ{OWI9u?!$xjVI!ld& zv$(=qY05~r?=+aW(a~-M8J>=;Vhhjq^ms=xG?|tkU~x^^$|C}@HjYQ^1J_3~DcT>a z-~T!0D$|DEY{oLT3N3=%`A3G56enVSTRZQ|QBp>ZQ3WlRZm#qCgFKn|&7mQ)-xF`a zqNyNCh=ce!<`@)S>76j-K2l0lqx<6V@cq&MT#74Y!?0;*3Yq*GETLQ5fH*if4(Ju) z@H5np)+q&e!CRMeGqEdR*kV^~JD_xIkArd-6ETG9T_{XJ2L7D!m5vb)#2+G8_XbAO zjHLc?jC}1(1^BR~j#3;})^mtwFp57^8Lad+OU>YH+L+j5&ngQlrLzUAFtc?4S{n{p?P4yVJKExqGmZyvvTCm@wa z%QXGogwT=rhA}#Alo9?z%DBkrZu39m6S?DI&**}S6{78g>yrc&8F-OmMyw+)Owd#tQYf zfB(vBzB}AdSsy+n`4P6$Zx~Sp{LsB(XFIMuHD1IBq(HXW22^x@D`&GHVAiq1=`a8? zylm0js_+L4=gCFA*8!qctZkgXs<9!LCdK}swuhGRG(FV;m*j3DkU;&nk=XY@`Rr9k z0?%WO>10$h`lK+{e>Dbv{q%tFi;_Xez<};!GrT7x(-Q zu1)&+yDaywj$=?+ir_HVjVbO3WTadK0@whjshBc(Rx5|--{%B-ghf36qpDfOyZ6@M zrIp|f3*X?0yZ?Ev8iMmOCygeFi!wp!u>7b~ae=3diqZ_Kw24-Nc*!Nv zdBMc<0-RVw$f(f-mEoH^iamQLFXNE6a*2H3NQF+$hqca}%!fOHHv1_NN$0~>8@!N@ zFK^8)TG9ofxpw_4@GB`#rCqX%2GR%fFh(oczTUv`y$1~5{JBJ??s4erNy3N^9wQ!5 zunjR^YxeF(OiY9K-(F!s2jU!ghZqP!+_g1#ym1)XgfVMhB3ig^7o*YlR8ArKznJT- zO%&fbV9ImJ5k}5E#bE4}QF~oPZ>}=!!B;3qKk(F3d7RZ5J*O&B8n46cT!(_`ME#fk zj`jlKE+&)D^6vB-jNy&HWwbf3D zPjiC7=U&2cnVt3`)iZ0u)SADpg2)R|Ji395n4XQ- z3sG25A7{w8&(iEv#;0PSRCMT$ACtODQiRGuQ4?)LBK+vIv}cEiQtB!F)y_e_Fhsk& z;P#==v*>)~07N)kPf~h{D+e~4Z6Hxm^P~&(n18C6P$!ht`{B}n7S8|pT!FnzGOy(H zRc=2l>F5h!{#DID+S9m+OHFwsY&ZD9OA*y>4S4u@)Z(+SnoqpM3iqcsPQM+=KN`Fo ziTL|#DzR1WSZIrZa+tTo0@Ti$Q_;jQs6k;3H@jJ$+OphCq|~C~;_OEfN5uLySA*2F z>o4gJZM$s=@@XZkU_`TM7L59L-Ur7jABkV! zhcnh~JbN&A@Gz`1Z}R7lV%DCJa++p3%L8P543OLxW>QRJ>OQebJ?Jg+Lw?0nLz7An zwUl)&Kh_fKZBD1na6-#%0n}fK1X=E@FpUvy%{R$*wY|S%K(=I$ z5e_I9Fh!3N?4$FD+MmO`j#v{&n#W7N*}iPpSY2?Wvrn z*sa{oInASm;n3N>_Hx>}LpiaCA#8pxx3Xj3Hr_U#DiduFEmYVd_xaYAHj!4j5hVW~ zAd|DL!VX*m>UJc=CYjnQ5v8E}?B7qj->{c|sW^U_MJ`Q&PDb}5keQnUl&S2lIIfCR zaLRHu{t8XVybZ)(0Z?aM71bO!jbM>B9<9fl&T4GXuamScR#l;guKg9`eb;ebiy{Lg z8%ZB~2+=oa24!PQ3rcmYp$_;^QZ<-hKA*GaaW>I)qT5D;P_r*xIw$`$BjityFg4I3 zknzAjo6|ow^|3=GoIqEmE=f0~mg(UP8n6-x=##-0wF#=B+}Q)JVtfE9@xgD`zTN?r zq3hy^unWqkf8L8NgL+Ynh6$t8-TZ}X(h=|5O;uFR1lHy#cVk*4#|VCVv=kgXY6s34 z8f@$`nW(?lZA=w2|3>UX)b$yBVCmG3O zBldJ~h*fr@VgS6_M#;-7OnBdjZH7zymUK#BdOR8zq-A4*>nb872+a_k?=!I7*TMYN zw$HRY`_2{X!=jc&f+Tv=^-*?FzY7EHn&rOzz+RxK&5}Pd&FE0>{9di!ZM$E5@5FwA zXpEbU90kqYBkb7jYf~H^ISJUAAN+(akx3}Wtnu-qtVnMShRRG!TUv)@Q2TpX@sOKZ z0%+%8uDv%I*)#fkuMjU=Qc|yz7oD-b+E{6WyKrFtmgjn)Ew@p-XTpLyO26PpP>8=< zaYU!JuqD|vs>Pw+l05;h>?ApV-{n$WIy0{iw&NpNhlRYzBkYTVyJ_U_m|tN%vfKW_ z=|?VIb8@YKBIs#cw z9at0LsLT=vasYdfxCxTLF|(Lm*}?U3VhUKS5Ck$9d0 zvBUW0?E3J}+)hj!R{F_gbQ0X+2?3(O5?ckw8baCPa>}$ner_$dP5@cWx^Hw*Yw|T?npBc2DYrPm#pvhY~RCsvn2CbLc;4Fv%WI zbaZ=9?S)t z=GSOW#cxT)TNfRW-jSP2#>Ue1#yVe#i5`=D+SYOpDDN};L^5~}$YYs$auH71I?BFgm6ha42MgDU}~ zHqfD1PH0H4*DYN>>7_Al&J~?7wEhU_7ZTd4%RE=m{R!c4D<=x~xjKvsoLHwD9Yfoz z@zrVm@OZYvUTA&x%@qrTO05N1PNp!>Y~4;4qJ&M_t4umM*HZe9u5=)(mbUEk7U3a~ zpt!3s*RU8tv~tFLb(2@mrHC(XNP)2RUE+R$IbiJNZ+D!E8{p7XR zlr%%>Mava}^TIf4bzna0w#dR+-W;xf{C8R<5SG4jw1}}im&o_xHpN%SZzYKqC$;Mq zO5$K!v+Y|Hw?U$L$PzKVVJ!E~o#z36kCp&g(&WbhqdUE(v?6l7*`G1I$ru99;`SmMq=kd{eU8{} z5$C0E|MF^|GZ->4yy~-Y0qNeoi?ez~l&mUQU$|iek}u{c1WW;Eiq8&GB=O}*8-Pw% zJ~xMmnNHz@ZHZZVs;5{!ht4d9MY!Xiy4 z^!$<#_-pIO-c;fLJt>o{oSmID@cX?eEtk5)#<~+vF%eZg^Btj$XX;tF!RFnF<(FCS zH(%}SY($IQj+Ub(^SZ_OdTn4!<}z{ORIm0>#>YeV4kra%VE+Nkl*@GN4Z_P%HOG+A zR2_uOsqS9v+pG18t8}0Hzp-BMv}J8qaGkA$q~XyyQO_ z^|6Ydvw3qc+gzLin+e&X<^MBe(pX{TWfRWOqA^Kz!-DIZ;)YoCie9xb(^q_-*0jy0 zl8Q5y^toB%xeN|nR^W}{WS0XZcfKL)<= zZN2!P|6K-k!QGYK+OTyJdLexi*juerzvC`Q^RfS6poLsM{()}3 z8X+?nPIufsCPUq%P5`cLS;=$HQt2I^v_9Qn_qLu*HK%DRLx=NplAdmB-fg~X$VSNk zIrDL-KHa8!+=ZWBB$TN+^$XG5E?6K2R(>jA+2Q@+MP;f8gu1UCKqaGiA$fsqM|Z_|G*VhFJu?aocFd z-R6*KZ=I%|%fi!o-5)3;s^ZtP{Jnk@qlHWjT&CU(DM=6i2%mSrvI<^}xl?$ty(dLT zTgy3pY|+_Ak3ZB%t7u|cFJjQRqt5GXs^3O$(IU-D4 zc5R%h)e&0x3FkCg?ezs8m6#_thN~bF^Y2ffU{%;)OD(PKF1iB4;TPmcg)$Rnv1-lu zd64NSI^?kmZ#BdTY||>s;e5a%yVvD%{MmPGegFSu!;zQ;b=quQ6HS%Tbzc=$V`wYF zcym@B)Rr%OySTNP?mPqYagyErm;dxRn^zRFX3JZ$u=L{da_fgMXe~)nn)cNx)w@K@ zHg3R+Ue)pSQ&K{-=-Xfn^4itliTmSs!tAn40cZ?m?E4Z>LDq#?)RKR|&1ykK}asEUq`%^B-Iz!CDXF+q8- z?mRF>ZW2A?%fbPHw@tIjsRgRRhL6*n%+EkBT@CMdP3rr>gr_IS7gy~)`joVcG|yRm zRx0fTvN>EGdN)(ofDjF-zk@4?S7wb;%Gr{Zf zw;K@-_lW{^T=0P9ygzXpvr-}y5fQyl&3|7ez0JM-Ne?u9kUTB=uBcg3LaX^~9fm^{ zF^Iuv3N|;1R3+?1u%v(n9=a2rzJ7hX_#;mvKPSBX#W?SgGYHQ!5kOmuMTr-3qSfXQ z^y!AB#XsJrZYqAx05d+8o(p;~TJq*MPvmT8!bM>gzeShM>?Z9;#T%pq@U7G6qa7O- zLy+59u`yVx*(5vuP?@)iub%#pO)$5>GP+jXpzT1wXf_&7cnVP%4$5(qR>Z; zq|pw+uZ?d>tZ*r`)57Z4ZVC)z@uQZvkI`&?J+pqjnkGU8MXK)}rJPl+9sMEMLP6r_ zW)rr2Vk01>uA+No9d+1iu~PLceU>=REE(rSoie{=*IR}H-LmmQDA^14-=z8=s~nK` z*@B4@ic=DEQ1!Tyc-(QMp3be}F|0hpj|Disvk22j#SSktD|5t245?E@vi`})_*gQH z1ovE4GZF)Q=|6d7(oCc@+xdDX{e@*gz{o-XGrO@gMM3H_-$(rGsXL`pz`yi;t5@sqJE5iv%`QVnv_XmP$pFb zNJn+=JX&o$duxXiaUbdK?jBM?{)Y?@lZq=SD5fc!kg3s>W`oGgwH zoMLjms+qDxm5zS{-kT5Z6^<>9+N7*zGtkydr|>&hl6I~3+{sq9%qz~nEua}vseF}z z7S`hd?esr!&}?oq^21SBs2>rvTd|D5t*2u1W?+I2x+u0<_7f{ld3M^3lKWG7+`bt0 z%n>V4N+j6076B0p1?tsjm0qUDBdWwo&BI+k7`?Wf9p3iq3&mK?Chc0Qw@nWc8#L2= zlfXw4<7&-VgPlAxFE!aQ5WW#^sNW6_ud*%Si1sf6II2DdytI}eva5MA%_4k|t4D8_mV7*ymf%*P)8ywt>9<*A+#V^BldMed{6Ms(_-(|xJJ_!V z4gu#mxWYF@p;^qynr9fI;w`M8CZda0+!;#VPyiNatFI!Sq+i3^kVeYqahPhTL7(SS z3hf&EKi_JOO_(4;Y)Zk}V$(E1IY?wO5cMt>er949RFgW({9|p6Fw}v8=x~hWDEm%z zBWW37yaj7_;q<(7O~NffBf7-snSh(Ifkl3*Z!j?d)=mA8OZ_m->e*}}?zB(K4@lle zcb?XC)fFFm7034(cXSqMs0@!T?MH{k{YlMEe;XabWgoOCsF16_??%4Mn9pjRi#z7o z)L_u%l81p&*_-vn19}iJ$N(vqsMb3sd^1$+4_j(Ae913y7z`n=600KwygmlfEJm-g za5y1`WEW*0Oy(-8OXK;&=o_P#!!dxPn2sJV?k$(OSV|3nxVTWUVr3E7QSS$#} zMukMU9;3z#6N(p3PVjQwhvq!yf@$)oK{DuPxC`PcwcdSZmEw&+@!R=h2#3p zHM}%WqP|s-{8PzW?gZ)W+%UqZaUPcddI4R13Rg#TMa)I;+l7qzdBIlrqq?<9uCHIZ z)XpsuOw_fcRDcu@H`PgYi+%z82TnuTOQsTIjDr8Tg?=HZ?4R>pD7mTOazYGevi_GR z#%6e)4b1FWd~cC1ap$a(0DHSl$^(p)9;_;F%1C@xjx*Py__*$Iv{q{kwAGf;>6=MT z7Xo4B86Yr~_z8Jm&mUTk-}WUBSERD#di}Gnc|z)olD?$TDDJL76DHJ#bPB6T>=TJxpG8?* zjba4@im?@3(v0uC)hH)L)}S-js09r0nC+ED;FAT2t+F-x$`&Macn&)Tldc&sld|;@ zcKE(5>}@U>cj)n2qFXbdw1Jm~X#50!1lX`8>S#wI{|$2eGdha33N>b#P(SpnBOnSM zc#Yo7yfShdu!if~I)6PbOO6x_G+*x#)y(tHYqI7T(#)e%K3jEVB|_FDGi6-$fDAH| z%iB1hEt>}hK~5H_Wm;m-vG(|t0Yfgsr@%d>^XW1QAF+i@5%jT!M4J7==ppj^rLf>o&q; zk94l*8HF-1u*#w{PIp$DrLstHZ7@lnIF2D5+@v9ZmJ88rJAHQL0n6@aCR4Z^oyfz3 z_Qq;)_v?*6c6xk*0e!RRGwHcqg~LV4`SFV}v}OC9t^j@1Pg>jUZPsR>RN{SB%e)}F zsXs#*4Leg6LfiJplml@pyfo&07^Ie40`>91tM13kZ6$|je)D2=S+`@_vFO6(^D$b7 zCy%@xcXQRcJh(uvcy;N#=Iv(& zJ!tz#Ff-4=FgB#7RAaU$HPM%BYoi7D_+?Ho&UUIFuuvWz(tmxw_?574u~f^I>u7qs z@zZ)djHrlMJtA$c?1qH-ogX#_CT)&|ql=X93TaEVCxic1-I21f zQR6^^0t#DT)aLc$qRjP2-_iMB{Hoxk514UvfXSUkhLalN~%IX#d9FD-3p#RNU9{!cRj?Uz^GQq_G?^C z{g~k6ZSk+R3?2MX4!H)wKvhc``T#YzI~;zCEWW zA|2oHHt#}8YSl}eJok#pz!=o_J7l0zN6UJp<*6(P(lexONYLb7u0|mwh&nyDXW$+5 z++}U4MiRxFEC-F(@VQdtK>O7c_gjRPI@sV3kvcPZ!)2m@s~kzdM983Be)77f%=*|1cSn#IZ9-k^0yY&jNiT2|m zrq}1sVqU&)-_7yHma`zYCEaKuYKA`9;?c`%DmPx-Ew1+;{zT3;k8F_d#A70 zk#SLh&s$he6K7gf2ZK4-xGnI0IbD`j?=&lE@}KgtSmuZPAC|5%=`XI!b_Kh z!`NH}?P8bQ`7S`0e1f`P?~jf@R*Fc;o}cC1_;NUPl9IT;%VUcPDSiASlK^J0Tzyww zhoJd1P>)gHmTF;GR)vXD-|J-3R=iB@BTg>2rSjRRKa^?iaLP*bD~b#q6rp5xd+*8_ z6KH;_fadMzN%&-*T)y{uyN?(3-FP1nv9ip=;w8_!L4X~qEtZ5vSQ3Nqk%<;ZiDPt2DZsOm{ zUBactvo(olB0oFG(%WXAwqwj zR!Ao%V#Q$g$@cz0>WBuXHa@RddO?k!@MgcK-bt$McV(?I2r7`8xItFyvZlnAq;4WQ zgSJR>F(mQoX&6q4uCZ=d`2kOsjftpe+Gzw~B=vqh*N22SDLmDWGL@{_| zCR(6|gS05PVUemcQPn^#L#GJrY<+Zn|JX8a%9ZkoIXBG6?$u{>mK0LoRo?F~e#zl) zM#TcO1l1jQXdwTCn~D?_<}h~W1k#fzBOzo^)M*ytrvz3YLogg9%3# zWn!atGs^Re%hEc7rCmkr91~kHS&+wGE5pkNYD#X6iU}f_gWPlB>H#mJ*srk~D&hbt zYSDwPx@y`q2%%)w@EaA`1soRR_$rzG(J$IzOUL)xr(YFgK4B0NN)vKyZKr?JeyDO+ zvdFmBcEYHwa**S3uN_0DJNoJr80b~PDMlxZu^UYFbiP{>$tLE*0BRpz6Gl~v6zf?| z<3EkX;cKJ|?K{-(1iQVm#@id~hbfT2{>oLpRaR23Ur2X&kBDmH%OVk0Ne@y;i~o3d zQPVpE?M`M<%rU=u4a(R2(Hxx91SjjHj|+Bz$YVNtk1&5Q*WL0&uaS)%*1K5P({|7M zS*8HGZDq%zC%jNk+)@0Y6Sv6v;kfa8&4N-|H!ic~fy!e?d7$vB2{Vs($HPc&NO~{^ zX)0%A-dD=WKGM{0bhCE(1~@O!Y24Z}GuV0NTC97bi!Yei2j~hI-$T8YOPiE;v0Pfh z`&8fW%bO#tElXu*3Li~BmcUP4U#p~lDP+cbLl5Nmdhw^>i<*Om4JXFah!tpV71{16 zsoBJ5kC(lQ1%n41^jQrE&`{mLn&JTd4F<*Z+b%}NU1_e*9EpU$>PdyIee_r-gNK6X z#r-~m+;%yS{((Bm9s2XK*E9smbh@9&NL{uGUH93Vu0&|J*n6LYFdfOU=e>tx>pIqC z)ZU!6lc`O} zq9<@%z==>`FI21u5?NVms5zeCG9U3OO>0vC{4}(^s7-1bRX(Hb3S(c=o7-mQpC}N; zapMiCSkW_FhUc`Fd|!}FRRPBz)FW(-)pZ7tvhJI&FJj#k5I6a6spj-=nCNRfg@pR89#(#7U|%!Zv{ z)GhCdtkbopXh3KyTh~L%eRk|@R>^-$;A6mU@8HHwPOdW}&`cuuq30jS{OBE0r98TJ zAbD)Y|3-&=!3Hg{4_3yQY48~OyN%FSQ11Ni>rbBE`0@eCs=q#-M@yc_zm5v?z0+oe z>)Wd{3LaiwAH1seUUq(=+R4Ds%v1ZR6x`;tGD00LsP>9LLMFg2cRmoejY%nZfF|Bi z+-{~#$;GJIid~CPM?wkZ2&F9|+zv9-&Pv-EV4&F8Xr*rrv}-PAw9?1x5M@*hk<$M& z*=^Wr@a2Tw!T2WprC%Jx8uU!^&FXe9PVP~5Vz&6a*sfu3?@|7gkFTAD=`vsk*WAF6 zO{PNs+`69gTyp;}H_zRJRJ{TrTHY*&Nnsoo-&)7w*fUo@$`x z5%~{P;P@pGs%c}5)!EyMKf#y5Sdcmee_RUA%Go(T^ChPY<;{?izC`|d*1Lkrc}_uc z&kzT2Qu*4{{r(6S_(|Js^$e&{T2ttlVbjxHZoJnC?hIsga$RV9PPv=zm2v^Czq`CX zG#9YB`HToSYsIi)FN%kv^U8p3j_-%WgAxBgC#OwGi!C?D&Mv%YUFH_R8Li;9}1so7Oc$<=N`{F@r8-XkWykbi@JZ1-kY|!R;SJfj_~N z07J?Y(~ioA3L;5De_6P6cYzxvIkhsFkwC(Emv|~y#n?C0PuhOhek@{j^Xxx?YHB(C z8SRSGQVw_Rw*(&%HyEZEn8dc*;0E5joZ0@;X2!yYY8OQRaHagX)>BWu{UU9Y@3%@o zD17Q0(jCz$P1njo6JDq81z;OF0ARHInG}!d?n4RS9-I6XUcY?6EMMd?N&NX1KL0?$uTlC1^lgv7ePLLR<{yR$ zQQy=FedAK3<^omLGiYl=1YkV$$Z0U5ZCRvtnFWqJgtz?l7Djj`o4H)z$dkp2RBOo& zcrNkje(qi9%4uYGM^A8bjIT76!A6U?gAFFJ zj!3<}S4yyF#MLKl>c-0qh6E2W)345iLfUaiMOWtLbMAe05(R6b+>LT|P`hDZ6Yz$q zO)ALAnIQX{f`>@5W)L!TL(nOIw)?A0%Dy2sZ)a{UVIH3iKKz*Q$AFhOZ9|;VV|ver z6N}c=G(I0q2Yx!~lNkUG<#uRW8iA_0&V)7v%28W~P?_%JKEBsSMIwGIW+XNt)v)`r zUG@M}A}W6fY2t+wxkOtwlo-|8(swndazY4w#`-aku$AolhHy$eP$9-d^bR7mdBC)g zWt(uop0{ZfX!B3J>uaE!qd@xy0-F~AmMW>z4}#5s&)^Q(+JW>f8oj_s0F-gUB%==u zgqBc^i!&Xl-K|U{pPd`}EG%I`^YTdDUfYn7f@Q@b^tIh9#%oCN-2EkFu( zg^nF+haxQCL2}wBfwLJiAZVua1DTpd)0uO5(l;M^d(O)5m^0e{K%)lzKq%|7eN5eC zrWQt?w%Y9EcV#)mJGkABckT90`LO4b-Yuu$j=`|uj2*~IQe#J-;vB1e=TFKXIv(WUf9a&;KA9h3l?2(}0 z#I5Ufi?2r6wv&BYlEBUp5UTpTHRKr8^L+dFKD(jx&DgCKM@^`Y#v-H-{sKD-l$wDa z0u1AKdi`4L&;ECzOm>trD|S+ivxhf^ewnvxRlL8V^{og;__VtOPDiYJabeSWrfvIg z1$QQ1Njd4f?z{n4I=t-bwm%0kD_tjaNWpt2IX*c}G{v_YJkkRq+W^fj>1OF@+}rAS zM@r_d`8Mf?@$5EaOCSeyTcNw%ssmP*NOAp0D=c-o{xdS_bBVYs3I8+Jf1uLewS8;A zg4MohYtKD@5&hGlcQv$YKLaqF_d%$eRro2VK?2A{t`g-Qq#Uvz`%yV^I1@`gjj7Q5 zEfDi0YK`Rh6m^m#lQIN$#F5(R&?G_+VgAL+x@g!$qFROU`SWK$i&znuCPSOW%cz(@ zGS{usKv6m+3gQvB=jg+?rLQFH6k;M0l85+!2_@ggb< z-A>Hq+x(;^7L8$|3gY=mfgS7y$Z)w&E5qPR2Uh+oDW?H(lhgU7OpjGH8xKML)LOl& z=#ivB@AQ*`HP~;BDb8hq(UY1Ns^J~iKSR>t$I?w2Lni>2c1hR<{GEi_X8uBqb8oVH z!`Z03g|+d-*)n#8ra3lEIC#6~&4=X|1jLd5z9ss9#rUwQkd+~jnFpZWvNM9g08e!Yr6^bf_e_K zo=j-|Vn_HBc-W{A;e$DyZ_Q^US!6fS((v=23XQknau&AYC7wwugh4k(jhC*w&gM zHOBD;iSVXX#)*1h|vx~NcpT=oHH zJbhSs=n?{P9_wP%U_D^>RQ8rYvlgGLwyQAZFt%=77?k9<6M9`{)%qaAG0o#Cm?xfk zQO*R7dj?9LpR?Yf#Mr5u`-*VsYVm{>c@quDP*QAQx#GLMwp;o|LCp1`|1Uj|_L|(@ z+SVMg#Uc;Fi#QTEBm06!-u9Z|^c9YD?l7-L(1r2i)bjGkQaz)6F+`TCpz>k3oaHFvlBV9d8XzGqz}}Ar`WRWsOM0p;(YoCTx=V&{*ovd1-!E zkx+@_UxDP~!+HxI&-qxQ6=h_o51d_ox9}83tj$o{w}|_*;b7IVdGt@XPV?IjxF0v$ zr4FOm72xC@U(YkiD@IE|<6S{F)d)y?g3P)6mdboM9j_m3AP#>dkUxrchh2J*!J1xG z#}yW{G|#B7^%JDm4+|cMTWo`x_$Zuiv0;KZ1PU@smF$hVj%<>_e#4vbc6pr!YCozy zvgVV~U@6_XUhjETKl0%)9rZ^LCXF1vHSzNB)C`!cAyN?wqrMNeZE>kRflmz=DN~-I zqb0_yf7JLpiTX{1XKjgxci^VcWgwqo4`<(@Qdf|`pH8@=+!?R;a-$x6Nvt>{MbYAr zOPDdQm|&py4ue6IvmCwd!R< z!JItB!9=3(KuUv}91#~!@oO%B>M}j#7|ofXiGkd0MikrFc=F%FVU%Mhv7JL(yn`fP z%weJ`F<{FSKR)O%1F$H_2*JM32i^o+RKZI~Ff~h=PmV@2QB@U`i>BxO*9xn6hNLoD zi;0xr$H!+;KSC3GYmJ`ocU>1@%zE~+T~Rxat>O(mVdk;opl*>YoiVn}?;a1?Z1+O+ zb+m0yOpPGu6{*T=7ckCA^b%+lt>Z9Nr3UeL?^!%1tLhQu>II7ZOW+sdESb%c7Spp&2C&izMCOOgW6x~&%XOcVGBK%4+WI8B~`ZuIdoeN{q!LGyEUBU}3BuhK? z)@(mtxUd$k#NC-RTAw1#rnHzj<(tHIJ-lhe9ri2TV8>%fY-WwPPey@mTc2}y~slO`zDoEVS>lO9_zhR_o z6@WTwcyT|IIx2TT89m)Y=(ju7_(+$pa`QVq3KAsQqv5#ht_pF*^2JulI34%&wHPbo zsj2pR!-ePvA~%~M>*;ECT_l2Ul*e~>mB&BkXU*B)kT;E*+po*L!XBVOn|0}JD^jq# z)hYTdYBL$tFiMB2$Yc`tB*%tlZ~XZ4X7+rD9D7Tdbduf7l#_^8N}5WoW$$ymatz$l z9RrMeHe`orK^5PoMZZw@80If|^JQHuM?x4{7k5-8_d0gd4q$LZHjM7+^i^ zdB!|jN@nh7!wYMC*ZTsU`FdCP_mt9F;m4>bAi9huz{Nn;hUR+#TR+XolU%p!0x|BQ zMwJ}A-X+De^o*QQ%}dFWYL5|=X)Th%65xam@AOGF;J9~Y06{NJm+`Di)A z_V{kBL{80@ss>WD5Cx7uLoR#{48%3_F`Y7vUHbUJdNw~;V_pBQ9+APFy23LRvw&LF z<-a;$l`w<=6N>C7P9s+GF9mPlP$o4oF|M;d-BPsu3(C2Fa|%Z=`!B!X^*Lza^)(n@ zQUlQJwjN`V`g*QFiIr|)twmBO4lc#cu$ZL_q*_%2<_T+jwv3qw0^*B_|E^Gs42QW` zM`6z!|5V0ileie3FLuB`Dk%*AX2Z-w@M0nvb*$Tnsck1`;=D*crRRV(cPisKz3l!Z%F6s9|0@7ttIjTzE$H#eRc4Cn zpFhq~lBqv6awo*1mtK#@BN}2lHnz5r^wb=VwE9Ki>rpEE5k@zj&Vdn<>%vcs|nD%tz(ZH0?gW?lEf2VTC~! zyjPO}Q&~Fi)=0fLQj(9a-@m`Du1J!%agE~9q&sRY550BW|4``A&p<1Gu(l^3tNOM$ zYa%@5K$Lkyog-_O^HmK&xhp$orQK)waO=5UKy(oRxHCUF-M7i?(q40Z zcKDeiswiSzW3nS=K{Umf(OXM$Pr1G`WKs$SSeTrSe|Fy1^M1!2rH@6iy5+my4a9R6 z<*Kc!kg5zrI20Fa8L=@w6FrT$GZcTQjHi(6rA)(%rhbUwNM2JsAr-cuWC(R^`L1ST z{n3pPTJ?7S-cK7$#5c!REqk?|-PTGw9)Y>TvQtn{tM8J*icc*<;JK${A;n%1QS(8u zk~iS2hmk9WT`=}9#W|)&ij&y(su?CE%mBw7v}k$aOG$rh9*vwq42{?XQZ5sT%Ue#b zjg(6?jCA(m*@-RYtJIf->;V+HwlkWscKv?JU%`D=c<$xy^wQ@?mm_8Ns7B5)=PF$l zyk``Tz>XQieKssM~0k}x5prxx)Cl8)z9*{aNrYtk#tBUd7+}+O5@E;_b6KODqhoF4ns>IWd{&Mm6O@DB(OY)Dc3~? zkBUfvT_7KPx_wofHsw`xYO5K72p5Dhm!QGL%LEOojq=P?+A&3Woj^?C-!5v!llJqO zj-ZtF*UzqZU^SV0Q`^EWe}@#67HUnNXW_x!uvtCQRtdR>1ev_1lC2NUuLWE zf%4|Uf$z#ma@(?!1F1dC2#-g21yViI3#%hvSzez^Z;Z}+Hu-KSBr}ju(5{Iw_h}+$ zcwYGNNS?n+r^EJxJpETGrVjMuI6B*&b~~8_s4Vf!5#6A zj3CO9PnExPpVN$nDB#o%kq-LO_q*TRqWFbDb8IiIWH*#Qv4-$Jwd?YQnbD&&&<26)q{!3)BWuw=lReo? zhRWQ`mv;E=Xf;Ut7(I~@`!wnzGiUuFobhS9$ASc;$FXSuznhg`@!1AO7!f?xybh_1 zR5{tO<=%f`*jQ6UK-x|zmCv|m!HlX1?(kV~YhFRAcV9ZBd)S<+6coGzU!PE~9HJ5sO-tqNS;necHu_#81^Z8WuMlsRW5xBY@@Eu1 ziWyRPl`>?n?-tTaj(uI$o1kUP6x2EXWxV}()|C?V7>OMHh~!tV3_oj0C{rrlN|_K^ z)Y+S5d)#J|TQ#k)Q}8vVW9&@S-y0?^4}l;y8Fu<2AUwQ+#0A0m&Pcqvd$VWf1U`3e zvK`S@kOuyVUcMy4elO$m0rwe_`smpVEYa&j3og`^yzp8S)0t4$C}?by?kqjX-|!Ra z2zh*_+1VBp0^`~>=2ey=W0fcf4uq8TBx^HgRY%C;tptuNfB6J zCfj{Z5yiwNo?3oMktiPQVvxc%RMn(J&2HMj>>hM`RdZYZOiEklUBe4Ni)ysKWLj}@ zXZg|FM;FSM2)8H*^|Rk{bK5`7ZDep{fm9Flq^5|!b~rKDfzWsrlmGF(uJ1#I!;R{> z7~3=C=PNyeG0X~o+J3o>q2skCu+ zgI?wB%{)@Bi@wCeJTj>-EU6J!WoMn{?)offNs?v3c-?Am+)ey;?Mk!iT|(LpD`{p6 zk80JAy40l6VtRg6s7?$HK|RgV27M&x@d$zcK^LZA(-JPoTSFE#sOX_cSA zbC+Y3MFt+A>lkA6u>HkL0?itEkbo})%o7igDo>|q(T@{qYDvy@XU_Z*P3-75yE;qV zyFOGaohyjRkmPxmsl{Sxd6`qABA7|w-ruko-iYE% z7_uU+ihJ5ZihF{uZqo^m|5hYWG8?FeQ_!SB?HinwTQ&3)i@~Y+Z*FvYio7wR^;AD; z_*#i>M>6vdlMCvzgm_(`*gRJ^wRCr@IV%aNU8UM9IvfNjBT)iYfu4<u-I}ad!1sdod+O z!9}ONih#EW)jwbbnQ!KWfkY$ zNT_iCI^=1b>8Drku$V*m?)8`180Bip3U)mr3qs}#aOLoS@GC`2WKi4`WH=ByxDB(s z9M0-Xqk#Y&Bpw&&Z}9GzBVGlR~T?_9Ii_iZ3B+2t%r6$8=F#x0m}5wgWlR&RWVmA z5iRTmt@Kz4{AHN(vklJbBI#q(YR=J_B0iAMqb{W4i-)6U8>SL-1_Mb5pnq%$u6{az zy{SCt)G&u>0%Yc_8Q&P_j&5ris)#bPQrpdv2HIQ4adVZ%I`85ohFtj{L@#vmqK79f z`_g#VQ1ZAM_-Ge>;O?z?OzZhM`NnUZAseQAa9|;h+V6VD9h}q+QTf1l`f&FTBy_QW ze_H=7WIr=_vNbgo@`}5EzxQ_ooM6j%KE}uuM6sUZx}2dFP6SnVdKm9E_=J=fRH3RW zbdDGVmkZW@;TpoWq$Idc;Jc0!M3r(8-Pmk#_rA@Y;h$vYhi2n|gBg;Ka}01te{HxQ zR#R6xqrseXwjU3=>^C7A!WfX|tB_7m&#&+FLwG8j5rYpglEG|VO01rA>^Nx}-3OBt z-+Zi36<>Wwywwz?EH}&9BvrR`2zS7n(~jEZY(f@f{P zMov%EpURrCV#-DMS!G|Z@ki_gJ>uMtx7y^Jny%9;{duQ8EOt0j(FU6@tFb3|Yf+Db>C1*dLBzca_H8Wwl1`yoH`p(qMSql!Jb5X)}p;%coEv&3c7$i!a&$tuc>7api1wLm%3iZf$w#NFbdHzn(la z?Wttp&Qq18`gpWLi_d4{k4-4ROSzgKDd|Y}cU@)1^_u3@pmXqc9Atx!4?2=}p|&O+ zg;tUrj~?EabUO=eS{`uTH$Rlc$Qxec9I2;_zQ}(;WddPkiXz)ucoQHv);bNK^*)+#dJe{Q-X^k zyf4;O;E_X||1Z&uv|kAjuPOAxw=w&gC9aqz;C^SF?FFjQ?e>-Pu%<*95WIWmb>{1R z3mc4Z@wm;kwhOqE|Lf_cOHJneVN?{TyN`p*U8I+;8~r`?$e4{rnakhbSlC%8(8&8% z-C{XM7SvY3SF|6QJGqLqyk?oASJpbHG~K>!@#;BJ9$zObbi(~Gz}kk1l!uLluU+03 zPO1Lc&0wwzx~($txv}FOrkn)=h9*V;lZs`!-$qOQ9xSrHtL+=tHA9H}WuvGRO>CW& z{ByAQ{e?j&V7Wvy+D0_mAE8((={x)nWTIoZzJ&1gqoU5j#QfHoNncdcXWu*J3@Q4x z%1Eq;GumtZ4^%(XtAq?f%7@yETQ9wb{c@wf#DayWD+C0$vHaIR`M;xyqy~ry{}t?j zKu3fxO`Nm{FBlTnO!MT5zt;4x_c9JHMCkc6PTsbsfhkDvCt(@wh?~a!&o7-uLB~}J z8;_3o2W_b6Xm2>KCFU(j`SEsX;&OqN2{fuVx{cNFKZ&g#6lrq8l1c)!rZ-SW2me5E zX^1cI%!aM$)%C#DguPGQ}K&ov&rw*%f3?S|+$IeO!>&~Rk&7@Gxv z^i}lG{C>+lo?(rjtN_3_sP<)=P~e)sOX zzJqUwo0T`sNkh+Hu4+Q>U%q>MXD+==?@F5}Ve>89(2@cRfTYJ}rh?lL91d|Rk#?SP zt;2;@b$f5RF{cpmW+q(~bOL%-tEK!mlXI{Mb3! zgZ#b{LVs(&*PZweG-*x=4_zVgnY5d*pK?^9Rr&||=rq&J>u=WI&nl$)zq2B_@t1#Q zllh9;A~CU>8$~L`eBxiuUr0`PUrVia8{8Bc2lcmD@M9LLi|0CbhA zMsdxyE|V4}zBM!TKN{|^ksF~DvP2xsALRfSrGJAXqDDIHp*o^b1bC^0lYUQ{Bbhq& zPIJ6U{}YGOk9zcOPb~EavACH}%LH?=#I&p9k}Mxk_OSL_^aBKmrCT z$oKN2fsqGYTHjJzNd=fq2_=_XY66{>vA@}qZ=W#J3H9BSmUqBYdGIn{CZhIB%fGhb zm6kX`%sk(JVp#yV-4dGxx;kw=C1`^;=*}UwRe<+fWY}znRLT5K6Pz|6uyW*kMWaus z{pgC4sH6lpsG{svqz;)j0y}e1OtcY9vrj5T9eoj2A0(OBzvPi|~T(Py~u60WD(u zzE*R3yFjNq=Tl{A6mUi^Z6ogEp!)daPx5SMC|uD3+*33MYUrfi4E;}DT&BAyZNH}# zx^yEK6#AcP_MOy(WSM2fxq_^`HCk4xedFiTV*v4Z(|`YxZ{9Y_`>EqG3qdtM4Usi^p@)w15hjJatN;I~X#6htrIOhPy+X%nG1Nxd?oG(tYV~M* zBPQi}!Tq~nw52}Z$B|@h3X)yBzx61xE_#4F(onld$vqH%;J4uM50nDfzX0?g+tttD zNa}Oux0(-W1oOz}Cm7B8aq~h4&WgR}0i5U!kAs22fnTytYXzg-fXRvPOHW#R+dCkc z6G6n%_VlZzD(kgs?BlRx9yIF^3W*UY?|d72%U+5kLs%IjH-4~v7|%+5j1yW|+^~d= zgBxQl&l%qVH=@WC1@Xa%13%!Y@=LsZc^9G@G7IoKzB>{veUF67vll!Ps%{}fPp(v_ zzfj}|%*kZ`18r87FK#r$aX1hkSz`Wy4%ml7&keezZGs~~=;!34fY|(iGp`Tfc(5on z7Oj{MYXfxXKQrAlC)9o+9G3X&n!(OXFzKi+V3CQ5#9HdJk;&U$Tp@F53lBZ44Sd~P zH*7RUF1#oreX4hvFCp0H5J(Ni@%4BwLo5sMrksF@7?aVAkZatf6!tk8@l;o9E8qKD zYlm=Z`UYV#VMC{ZukoNnp0seIl23-(3?BqJ2Jwv)9#`jC5lW4xWMC&JUy-eEI?}iH z+Q?^%)74`yqn;|EcVPVkC6~}I5&Y`xz{@MZsSsg!+jlklH;{1&;>;-QVM#;6Y;o@p zxB>1G!_~%a2#-;r{H%ecxmUOtNV`N8E37?8sBvf*`p_bG(q?^=_nHx+{f?)NbP)$x#y$z%qM*mqGe0DdX=Gs%=DLn{{sYJeh!=lyrNRPuA<*)u1RH`GL7XNeDjN(hUlV$FXb z%xDdfsp2xs+ZsaWp4^iTB%SwzWN*W#tPy&STQxZOFD_I?cN}k#!CTDaaHJu`V59N3 zC*qS+X&Pr`>2lA?qBQu;3y)$`0cINd@zBG18>A%S^-`m3oe$wFEQTQIjP7qEi=3RV z(cePIL2EKs)DE>@LT$OY=exexr-g^T7yBt zI^>+M{cz|#4-Dc-`otYDXr2?@w6j$h2YmD|;-Wh;-ki4lR0N5;N^2gzd(}a4W2`$u z@qIZzV#3&H&)rj44CsRInRzXpxyq36q>D8lCc0muI3re??bAOdhq;4xYT2gV@5L$% zYj`ClE|ik5&j@)i@uWzfo`;y|m%v{n2-zttx*Hr&tI-zp8=F*v3fh zN}=b{tJb!5;d&;>y;>Uf#F}uVS+HH|s?a(*031A6K5l=eOfor69X4`q-`O(Y5iCxU zex0#%e_gy1D<2_8b(@7pgJ#g740k09Y@HyIMXyiC*+K1Bgn?Y*Eoqze+nUb=s7L$5 zhgSnHdc21k@z?T1nCsyx>q^Y~Y?r-@=*NF_E`Cg@JiNV67+G-hRt&36y2bGLT~DLS zQzq(8$mP48(UF9^s|SLvT8FB-`mOPgwx?3V{|Ikadb_@Y7>6lRw^59YSAE7+C{?^; z$#qs*815W)0MCUz4^Md}k-T?36Zea8Op%T&za3RAwb}e`YxMi@n|cQ>SVKE8?}qyT zC4H|GsY%y{M2#$#Sc8moTW|NL=5Iv(om2HPf)|&hcF8R72)a~~N0>4)|C8k0J@=fs<&ZnBUrFE7Lc3QO$Qi7KSiNiS# z)E&4bmH05}Qlb&OB)@p)Wu^V^H^21|Gt|-cx^6;P;Mr19Fz(kN=Tei20^L^5P~7pg z?X5`fdr}kg$@Ai*!Q{xTyN_k??FiZlNA4svhMk0%T2Yyv10T;~+he3oHMOc5GpSA} z8&>M9qv!Rad_yr>-sciK<(;>-1^C}FcIf(g_#6`ssT;;vsq1AVE)Fy_-}sa;VLHmVo(Pkm1GtjBQ%U=~* z%8-}o#OjDCk4AIbRA{#^TFd!oC*r39k@?j{iCg4x90rMEBQ|l6T_^!&Ffu^bV~wZu ziwbvmIZb#kpFvZyCI2%5vlSfW{n%|zWDx&tV=kInx{3F6Wh9YDTfLBz-!9Df3;Eqn zK=!Wt&l8Ooe`D_VQ(iON zBOLNa60k8=s#HCqm|Y0zEBw}9*q_oIAD{cYeFcKL_IG>M(k{b zLpV^C;QZy8M+U*4d%mAmevAE`OWLj+$qHXL4&?jRhtaFZt4T@cX1Bv0-vqLo(eS@~(%sh- zC|f5kENoedV99_59kyroh`O8ed*!FAebtM9{;;&+1}J@5JeZgGAXj|On=XCh(H;)B z)%Mqy)jqO`hvw|?a;w@KE3@}z4t%5S?!GAOp^%Tk4M>sTuL#)RQFf#2lt>NXJ2dkb zW@ZYl>6>{hZ)J6p{OX}0N9(`)Tmm`rvIWCbo-vCx1&gvG>I>gf8qAX$5STDmjvQJD z1)re4WVVP)zIM^=_Jb)Vr^w#$gucJSZK)}3&Hk25X{@nXNm@h=*QFwNFC@_{1@x|p z2y@p7gtJf7g}qbEd?%3%Kxwv6S8yS1fBJ%TC>KQ7$CUpd_MI`73_l(X(s{zqkvHkf zp}dk#%`O=PCHuv%$*HVbfi5OFV6O*rS;gAG*hCh+&bPeQjT{ez z#3`lodOW+MVxc%IhykHp8h%50YxM;4RHxJ!N&}#=QC+0k)&HP!+F<44qc@w2F3%H zWUIu7s7sx^iwgnkO4g}6ea5uxmj*h#K7g6|0dnS&y31diG;Ndxy5oEo=d+BJf=MDS z<%1r|cVLkJQh2c1@5e5Wuk^8Tov|!v@1hseBQe@QD65cR3*CX0l2-KaF`Yyi;gz9+ z1`4XIpd*-}I!C8DVgXCb#nm7nWIy;W*wKSUAJeULo+TK8v9$Up$G=!7w@Z#k#Pg*H zMxOPTy^1Xfpr{-h`>|7=$71aQ?u?Bd?)TS0eLE)dN#UiibSJpGzdrz!?ybUW-{Uh> zMEh5!X5a90IYZE>)bM3OJ^|%)sbAaj3+sWE41N=3;^HI+hC(TLL$K3Ued}bi`Sc0F zN@oVOKh;#D^#^LO=69KTqpvv~mcJPCwvLaUgG171r8hgxc|F>9ql{W0wpd}LTn$h8h5 zKofsVzmQ(>{s%&Wm%mK31eItIJqfB_5MnOiIB{$BCv13}TtjR)E8y{on#r-MFc7AP zga>CLrC-=0g`5b|&5wA?Ipgy>mb;JEv48zgEM#M*oDEN2h^KO8gC{SQ@&qj~;N^dv z{x!~DRaK!S(hp-p{PsDCpW&4q{f_RoYVg`#1w&V;sjg28t4~6ATV$DHKR$w##Lxxy zm}}eV&yvCt!*6JQpP4TZ$NY|C*-ph*yZ!r^_zaU2DuQ>VPHBJjZl+C9!EgI%%{Mc>7`Zv>q*CZp?~C4y4N&|P|-65K1Fu$U#qP;e*s-`@+e z)sk4X;V9>J8pmrj05qF_e-6m z>M*8EI>mI>jgOnZJ$#0=u&D)XCeIWP#yU^vv29CyY z<0c#E?cFeTePW5&smf-+!cu{^Xpz+Lij)lYAPwH**M(_|cuj==cdH^y#YJ>PvCq@~ zY@N5cB+3+jLTB3GV71tNLoEPc$N%)3Q}p*f(P(Kbe#7^beGUk&uRQt7j|UnWAZY@T z3e)e-`AiszMgBXIihOalY9c9Hiqan#BDp z5@2d%cc(TS{&t9h13f-D8U)_cc>go!_nXh-(80seP45ahn&fWRXIhGqk6i}d4PtZM z^6@F&i8U7n`Pw^Zn7JoUwxbv!3ycz)={s&K#~bEvBs<#RS-T0&)t;JJLc7!JQQ0nC z4L=tt|6;cCyoy<9C_s7P<%k3=zzyLBP?$@tJWx)(La9YUPsqgK3% zZ$@`=UfaML*+aIJnN{XQNUxe}*o#2HGNAGHyT>%j5`X7R_ho@uX`Io%GiMj?N_`i9 zMo&%kkB7%va1YN2^#%sF2-(TA)(<|&30AunH@d>6r z>rHS7C; zO~}o53lj6<;PXEaNvAsa$Fj_1**lR1@_26%O#U}>UVX#S61E0B2~h-Zt~N@oCtrQN zIg3czxbYdu0tiQ|Z-{u=1~EWH0uh9nrIfY?G5Y7ir3`2z^yPwry$f4xFeUiaJG|8= z5h@l~$rYQ4V%4ikzSR6p#3czb+o>JdDT^gK>>O(v{r=9J2cbYK^L67cu>KDjV$60dRYPzc>ju04tbDlOq+eUZ^6Ng?3Hz85+b2b0Cq!lJGG#Ju{(zedPlmVis! zK#-orJN=TBZQSrR*A7z#6;zWMC$vtFP6H zMT>?eatkAJPu~gok*}q&8og3+kpbX;mcDs8hwsEZJX$v~%$N7rr#dpV1c}c+un~Ps zLp4TBKRA+BtmfL$dMS4H7^ccw>EHli1RRnmF#}zTA=>ZS3>+icuztH-{mq;i5y4_+ zXs9SCNUHmfWNAP&ZY1S&lBdVzljcv3+w4!m>WZ1sF|I}gfdD z5cQRDO?{95Ly#5(0qI5>38i5O(hAZoE#1;FLXqx}21%uJbV!VlkcQDIu+fYdCxKN8bt zf0oULs;+okWcy)1RPF#u@w!`I4{J7Jmj2wKEl_?LKSL@yt9Sf(IW)A?d-8>(Fu>Vi7X_PgWusB??j^s5MJ*NFEwf!IHIiL@0KCzD%W8-NRy6p5Jzi`jOGQ_^_<0V+g9^<5F-HT4re>{3Xm-i6#uP zJwzDiJ!TL$iTaD!N#$<}E_S1qcE|%UaV`VaNo3{{TohMeI=bI^F;CVSW|RqJ;F8*H zH28)eluW-0TjS>3T+?TOt|>R#m}cZlU=4W-$OiASEt~tBa75Z~CK!FsCGVxbFZqQA zTp0~IvBR1^CMpUE;Oq3#pV2J-6-Lx z4mO;9#_MlP6tyR>z=n&rYOaZ916s|j7xj}T&iO_|8E~-v1HnE5jK&z*q6fQ^$NC>- zj+mBp8ZM~0pSfLmX#cZ6vGsV|$^U^Ccm>cW43;a@NaPMliS1=vL0VeZ!kR#zHSQXB z#Ewf?;@=~JkTa5(%9wmPqMN8mjCY&mbuzT+9i6|12{Epq(mLkZx{*xtb!uDS+QU39 z=(BSiaAy72shwm;DGThWm3f`@+f_A-=s{F7%>TylGrhHsC0g|(*aLNhB))LsrT)E< zWWIlUI1}7~eoHRo`e?&%#2;(2h*Yr!9e_&V{lrJPCqA>4$_S8C<0MSb9!GL#G2ha} zSW*C+!+7SSGLh@hC*z$hiB-M|hIYa58uzOsHy2C~a^2CE_0ETEpM`Rrsgm~WIY?9_ zyRlV>=NA{u)YTDX;7eujDA3`f1RmhKJosp|wC*4~XKeCH$mh$>v)rtbiFLH@9WaJW z{}{bIe!9&_Q^ItgE@FpjL*_M296>zqA_<$$foljedcL+2sO8I&qA}eLXm8d>5+8W< znOuTPVl0l9eFIuK&qxc_3c&Vjv#$%>7Z%=m-F6(1{s-dFaYIEQb@`U1v@i4psZCX( z_p>yZR#d~DsH&7nldY-spa%yk|M5N5%!eBri1TNm$nK?X!=PfBtx?a?Z{g=*HOvY`DLvakgXoU-4RYOg?uk zQDAKBS9QM~pGm@!g6U=?nh467%jW|v{l;PqK^lYaSdjX_5eA}_RaZU{Kn`jc|DaVF zA!ztAHTdieC#pQ~`Qo}mO|72dH~TV@lpz{i5kPRR+lpdauBf3V8AU$Fio!7&iHO)Q zOVPCMs<4wlBuo)&fbVHF?;J*CVo<*g-?}ZWmdJ;gZ;XY?NWW?iBtyzg88p6J-~>f+ zPy>i@v^TIl!peAzh&`7-DO*!0xV4W)c_1SczaV6%tW<{hZ2|Xkb~9QKHS}SygYnj* z1^k5T=E3+AX#>RBPM=^&>>GBno51?H{^xZ&#yOL<<_;gdZE+fQlTl@WZIF4s^sV{N zzlesH*eai`Pp1=2AJiNkU^2BF-iB&l&VJD-1z4YJdj=LKiDe;iWky#;f6Bu&bdfQ{Km`;-k6(Gt)iAzJ2glv=Nyy5k=^O3#$Tv zl2^~7+!n#jna>)iwMco4Y(M}SqghZ#>Ns|g**@#lZ4MaWXY|*76V|eE`Mn4Q>Ff+g zfUe%ZY-lK2UI3JG2qI;F4)o3DVBjymoYihkq~1`<9kPiY(46kaR7`Fw|2?aDQJ z-__(PQh$HWZezE}py?F68b~Ykv?9)^K3A!Al7^|j1Q~K7JN{#HCtG=FgD;Q?vkG=W zJw{Y%IpM!ZLKd>SgdM*6z>X$GIj?L6ibwQEh6zfaZB$ok*1OrV^~09tOMV?#%%5#Q zM#deKQ3i;nKhY2UEmmWVL|m7^Nprl1EyrdcRUAjgAY+d16M#9CLz*`h*uArzY2=G#7;>2b-QDoc zGda|upCDGF8LF+9^3ZWYiL7uW7B|*IZNZXOujg6-HlRb@LH54hO$*%=rpu8gl z*iMS6e(g2u{K^X~t<~BLk(kxgx~fNI%q<^032d>YW4qj=y$)^a1cuHeKvX>nH*dGCi4MZ9vFCV7}nwFdbs-6fa}pesUdN3 zxRkb+kqVoR7cJA?#mG&J@iNz5g6PwcJVVIl3A8`)Olz4;0_q|d3EC$Ffcf_o+%8@o zxB~ngrJOu^Dr|0A#>vJ_RPFS5ABrVbw(0eQk#$tv%%$GskILL7kuhD>(e{rTe{f43 ziNg+{89X-77-G4w#sxwN7`>idhKUmX4OS>4Nb|C0&imEB=};^FmO4+dqvluFDua9R zWUB;3Uni6^C#tdX58+*HiVL~vH0%K&zaqS30W+yDUU^2|%#VD_Chg$V%SUhdZfNxS z;Hzkc$Fa-)SG@Nt2JmPntIwf+e|OaT}Z+ zspi6y4zIk@KHKySsj!B>c^|fZU0V^dR|ywx9wRV>5A`b5jF;qH9GF}5IVZEEFLQ8V zc_hi~CpfZqH7@=5@H$=&fps;mSUp$a{3}uq$RJzUuAOMMK)%YRdJ3bh$&KSY(&!_U zETCcfqvTm~mm+rX21(|eEL>B{gc8Bh_nk*2*EF4B@HJ+h@i?<%{*##RY$OhyQ?!`ggTNzgK z+-zkTI-@nD1sySJP9k2^Ns|9~@O4^b8ND-|mfWkyeD~xBl7DgFr5@L`BP5u^j;*q? zWz05JNi;jCuU=h+kGd>8ZHPbBa`(B>QD|J-qDKj6@ZMHucbxjm8WNip`~Z$%$oI9S7{)D9{# zT0%UeGUUsf-x<~#wOmpc5)#9VJrv3xf z+r}V2ipi;foI|X7#AK(~7m$kgF%xfEy|(tV&$hd-b|JRzM76Gg!VLB60>Uy*myL^l z9kT0#1D2qs$wrkaP+BK%20qPd(PeKoT=?daeZZb?z~>Y{wpx z2gjv@r31%}sZ@2|Jj8dG*sB*c=_j-xS4-V>&=Bd7Qp~(ve6Cu_Hm-~^Hl0nJmws!^ zG`_A`M=dpTeDrmUy!!_D%&70QkdxExs^@Y!$5M{g0M?^ALwjQ z%hjsA2~f$tua#r=N@y!KgugF@@mTgsez${sFK5?!G^C>%OA7?)GPWKmw-OLWPYWKk zNk+;Sn0_elR%{uNQ|6ldijU3snIf@=W6aLLNHQe7$d1?}Tm{EYvQ9|#yIpECqp~j5 z2383+pqY=et_h(~A4{@Y$z)?ByN$53j2VL>akKSRi(S~Co8vLwBi|&P+aK>}t&&n< zDTMdzPuGe$y=RE~fn0cJSzvA&6asx!-q3QbPX6&7hmjjWCJ%`LoAZvpb#0z&Q$um+ zjOq(qe0^~SFGa(mE(2ldGeS zdNuE6EH@n}tStzrUs3bhDm`oLoEX5W^%T9<%5q6joK_Ahu@J=tYjCX|3B3K)F2{bb z!u0-7ukeEztFAQe^m8!nhfal!02Zg#9@Y1!`;-o=JR6nvxbuSV|B;YXTq z)Zu1F1SH96u{>cdd;MbDO_(dMfGY*AT~F?c&sN~~^HV-o)V8YAVwK4)Jeu(Eb6sI4_r8SiwBsuCtwBW+J3 z%B@?_TV+%!I8LA5vqX9K4w3e+zBd*5X!2uVtaZZEqrxAlx;oC^j+3>^Hty+lQUc8I zJ@Jy82|@hdu!|^NC!I{}udrW5&nvI`9BOJ#x4TY-?HS?xcxz6T3Tw}5O*X}Y5@b++ zD5i#Izg=9}waeZ!Ju7^cFSeW?v$T;;EAGu}&5j)!@+h8Fh24W^NdDo2Y|D-|^Q+8H zSd0J|om_%vIpJ^_V_3-TQP`Ne75A(psP*WgWFE^W@MjI-8#=?bNL@!ik{t1;wJ%LGiFIRm$?)yPD_!FO{fdG4q zG5?PLsC`dm>kYd#v;E@Le)g$b6Ww`UJdflj{gq#F70d>EP^eAXY9xtOH(c8~0Ed~xQO<6IYm;{rp|XGtV$&3m%2;QT;EBpGghW4Vnh zyPvtTtmXS)UK9t4uq)e6-KV zqCZ(w$lkVexl@oQ^)xQw_${7gcy9nE$l>FR(T@FAf})=Ff;b$)qdoUlM3B!c;f+?S z)-kNTDMOqhj1?<4iAD*pbMAt$Bpyd7ngY^4Ia++WS)({X=)Dg~Jks^2_1cEUg$lP1 zd2~zv`m1E6BRByB+%oatZIuMZmDs6aZ4!FQc4D}PcT}|s)KYLs0;anTo>htDVz*99 zf2)3toz;vRXQ=`BJ0|MUKKA@<`nEn?KGV1&hwp>ht|z+Z5T9DH71!Uj_kIxRDW9J^ zvt-Zx|BCEGu-)&AHATWlMvEZOcu0KkiWJXGLvU0*V#p`lJ4(dyw|@Z-YNI8FBW)-s z@QIod{`q8k9@IM@i@wAeS7}znQGmguOB{qK|1I6FJ-wvL-i7}1NF-0Ph4;Mt$!=Gt z2PnlM>E?4aqq3ZLI`fl}nF&d4Bk%Mw8&7Kbc+T@%Yl;B}2Udr#>7HJt?&1eA!$>Dl zjmuZp!m1K0+!M)DPg*Z(3%V~e&P;-{))cveXOeHDXN9J_Nr!CvwqIW|E!i!?Y=Pn> zT638N-$33x4z&$Zb1WI@BUtcH^dnSpLuq>TXEXUKIWC4M##XgcjVTn~a;$LR+E6!4 zp1%axm_7joQX+-4`|E4Z{sWy(LuL%>0pLL@r>CD}xO?6m50kHX=d>I$h*^~>LMlh9 zFR{gNlVTf+-@xi?OJpL@cqo&l{0Y6DhRE~HI(^lR_=#ZQbfoMsLUt0dt5S_bBGnjK z72kQZ_0r9++bQxEe_t7)ma2S~G452Q)$f)uAt=(ay=tmaA)gjZJ*!IN>SZ9pOUyk2 zPiU)x;$bSE;lH9HB+)sqeSbFYDD5Hr>zpUUEV4H_`|;p(7BK-?aJzv0znUq*g)LW7 z>Y|~q>dY*C>o^Fo+O8fnkxbZ;(+X}A#2Z8OU4>vZgL*FRX)rI0H2Cq(IAbZ62C_xz z!E|AgDNx<8Mkc&n;169V=_Z}CR|4v51n(m+1;FQ*jFByl*q<9gVgmO=$o$$O!Kc+)Ev07bNF=B$upQJ%z>F&U}glOM~7OgqbU7DSDa_BIHKOxu`pJ?stOS4IxT{aOe4jKw`#__ehOW)SY+5WiT$nu}0k^9APw@IyB_VvARz$=$Y^gpB z$hj7dePy^6%ZJQUu+^3fm)xpd4sLX{j1(#}iEg9{eFJPo)bs-n0;QE1x_4Wwe6eek zYn(inZ|ImWdpF z&d{~)z1kF8%(v{R39BaDZ(?Z=9jAErst((DTQ&qxjlWYGJ(d1R@2|B%*b1-M2Ke~k z@lG`LThFVJTCVoVPP>jQ5{nyUwKG^%w(;;+I~mR3e}kfI+%4crm2rD zB0H)1ZWc-Mb-R8MG)=NtA=`^F0dvKQoHx^cqC}}^z_~{>A7cniuhrDl>y~Xd+Ia=e zHeV+S+fDl8qh*yHEp2#dp5eYJmehp=Od!?6C_G=iqxcHP!%Im2HwmOgH1nFnpKUF?idF08`z|olk^W(OC@|LM{7u2J;V-n#9R8>I`ho$Z{~$cq(a-TFD@} zV@{S|0u(VxnSd#Fcl|9>|J{L}#UiNwqB@IM%!4n*xQb6q&xTOLBffr+KGwHI(W5;< z5TB{+Ue`ous$MB&h^$8le)VJQMTL#6bMBK~+{TwFJG^zHH6+{OD_(;^_18crEhgiu z!gVS^D2cm<@6m3|4KT8r#K{5Ycu4SE;YrA3hpeGm1cgmQa))b(_puWiE(PAIZl{uY z6<6Co$r@%EEVFaO-K?ib!*_J&T|La#&ugj8d~2%*>tNK)UU|Q+>iBoV9@L#8wBN^eE@Yb1&z#!0gX#08lze;C7=8R2~}#btLH528cudeESbPfpLHpG)u12N;C;POe2` z_2Ds-@UG>L2e$%o9Wq(ri;8S33e@lUTZhlj_BySbAC@pBNCJg#$91ZY&H8|XG{;U6 zs7w{Id!gOoxVC&m0;G1sh{zsl%~vhZsh7Qwuc;{yq&PrwQG--GLY*!X5j97$<0$uR zp^DxT2h*DE{g19KweCjg!}R}V-AUQ7DTbm=sh_^p4f(`G3{j)dKX7HYAhLgO(@a-W zzlkIZub^o>0V`$4c92x*5hnaxm_@#Wn?E{#@g^};X-S&tz(}U9Ypn4(n~A45{HKgR zljQNA6u>0=x#>%C;vPHT!H^jUe{&Naog@tUsCqFu^tH77U3%h8Aqhd>q>eUbHHSGH ze=(6`@?#SL+OT?L0Kb>~k;BHkx$BzRX{4>Lb~*F?(Kczikb!P;dX}n0~vmS+P3_Xfbd>aw#n>K)jRi|m5$lBR0bz5r7OU)bSk$btn z`{w)Tzz^1;=TbXycV`nLtTKaUJ)7bDr-98xCqfyd zJ;KBOk|O?R~t!HXPlMbk{FWeSTmHm8Efb>U+iJHz? zwx?Reb~$`w4NdmfF^c0=JSPMoXj&m{&;FH74J z_#YdKw3;4R=5x0R*t7%uN7?u55g^^;&_M!`R3E>jr{E~Q=+eE)bxn@H6{ASF3p$M- zxx)Mlz7$S5t|(?o52e*C3wf&zDu(w@Tibj%(;;oP#Cbe7L2O)1W=uAD zokswExRI;H*4FVAA0){=uJ?Y}aE6%Y1=g(?zqiNHeyr6}9kyTU zw=>SPbtb^BC*$sWb5*>k`3&2Y<#@*Bcc{dmuf194LfJFVAFo^zs&-ro;-!{q>Xl4~ zX<0>&@|!Lj6kmOhF2)v@Y#H?aqrWBCwbw%im+{?eq|%j4YT$ksKZHdY#_2S%`h&_y z@Xcbx%=R>t-}OhfsLBejbwpf}bOols?q-ae;h5M+b2h{8J{!~r&9-%B%ghVQ<- z{rC9u!6J!B%ph{i&L-_Ab9=7M1KMT2n+rW{`UMrUHp28mMlsT7t;-CNGo069e|o$n z2QkJlpk>3kyRxDApS}vvGHXWJCGuS0q)R27^n4@4MXcN(vgWVu9q$Syk>I9C{~YLQ zRF=pS{H1|KZ;cw{3j8FY*F)-B8cXlzP&fU$)AQ9|=AawTH`_7#M@{-eOLchux6NGZ z89jDEj|0al^{?Z6Q8noIZ?Amy2_R_$UWM;WtFH_ltL7`ri z^S@k6ZFT4dMj=8YXIeevLvuOZqusDlpy{c6HlAg_?#Yn z3<iGPxk{2Y0=Fm|lcAn;pBrWnR}P_dtSKyq7Z^C`3%mS(RV|QiC+N z{(l8z>KfI9`Tc3wBbp*4))yQ*yH|aJg0szDBJ<@J*}8QS=j&X%r>int+#ruKSv1(S zfy&khxW;H(s+ic{Cx#;@&z~HPn?QqW5#NiCx7(xkq*EBY&c}l~uG3K2%O{OgLu-DE zqjypIc!?gh`R@Z^$88WdyJhGTzWRY>LFy#1j=2d+xoMtk2|~MtC#keNgz*}G4N!G? zIfT4K!`?zG*D=cd5Vf9%Jd|8?SUXfHQR+Ind-0;g8vUlpJ1In9?X|vCwA|#;+j>+- zL$-6yqRPv>UGtLz6ICS4+A`w(Qwuf3$o`?zYncWFO-;6r^c#coqyx-hR}r$@#)SJb z(ok?b&i7~&qa;!4jOj)+V=XkXdRB+O`vtK!p#s}uzD$5x!=fhK$1wjgyBAQx!YkDX zLL2839vgqe6HX6Q?2?C){Mz!jA(9vG66b%qAouN5?Pt0W%)&t9=-ipLZ1YRNRg5Lo z(j9FWigl7ix*l+XkwOKq{L+|)Iwv%~fK3*d&o>5YB1xBq89r&uK)L%KecoTKoKE_N zRH&m>$oVH#`;c33rFZ-=6P&x$!{7!eqLN90=;G`~vXY|HPolo1&Rz2K=Jh`Z^53B_%^+6c;<{ zXlfDQR7;1f?etXrG;T)`wd+w2LtGs|n!rtK^QfOvSu0Uqx37hm?v*-mmFEZRo=+Ln zJ@jL0no*j|*xsKfi!xQGmBg--%@x#9S4(7J^yESs-5h|s_=hG`cHmx3#fEMpw*i?C z$!~EDSw)jbFzdF);nD#yh3=AokU;@C3C)MaQ~B*F~p+S%SrH8KpT=;~4}0p;H3_ zJsz#^aBmpCGr=Yy)x7sET7vjJOfY{Ntqd_IM_vT@hpY#Z^<@cQd-It21F{e!v-0b2 zh@Z478=vSm4$bclt5KMxa|NOJ)3>%!d_u{)+f@!BXYR4)!+&~j{{vlrjzW*BG&rby zXTFjF-vJEh39r{W^;XMc!rY7V`}+?kvS(h+g=GDa;&a0zNB38&nb%2qmVO`k{77=^ z7tvSKd3o0nt+D0-iMcy|iB|!Vm`#SK4MXbKLlAWPcsqJvz1~dF!Vyox?e2iL779Pg zq9|b}c30g85;g$N9LWpMS$AYsu@hHx4ok(T);_AKwGI9rT)u{8v*k||JA zv|=!Mv6))d4gu4{uMe0K^t*cMj5~Ls#B0E5I$MZ-i^^5%#}v6QE$-O?HtDeEP{zMm zq?qoVh?%b79%BF>T%K6Tq800Io!U;g>gn=BB%Dk5TK(~7->dw8F^vEFqfHq#tgYPM z)WM2+80gu|x0#ewWomYW96WdHG#gztbGQULiales=nh~?Fm|0qrbxB4 z0?Vt3In6;-BWTDZ>?ot=UelqYU`xYiNY$}Orie9}B`ZNPW~l_KuD5f`sxDeqmc=%0&k?9D(8s;z$LeXxq5h8j&pws^ zekD3V=82vKlEaNqL#D5y^0`w3~Q-C;r)EGj#x5sx4^*`V~%#xza9r6Y{(YI_6M;1iQ0$=&*H78J2-qXy0 zW@|=Ig%gFFJZwW8`9A*f`IAGW9~ZlUyULm&I%JUqO>2i1!r$2eaaTpjoIJyT-JDVB2QTzbb2#5t6Ln ztxrSi1z8*HzPb57&`(VVs<}^8=Z;d_9gsV2u8?7w@|1r{d^?Q(%Kw3Wbf(rn{FVx_ z|B}L@J8`SebpI95p<0@iuLFWN0@}LrhnS=Fx|$gyJWnDZZ>N3zQXgi630+eM2~$yv zZ_oS(dQ6Bu-e2ZV*s~p>!HGzGfax;%GR_(fBr+2vr$(+nsQra>e7%fagAWs8ZJp-z z>=crAtZwMX?-5mcBtia_^LO_$YmED*=mXC|ETG{zr{E>65)7AFaLooWMax*#Yv3xopJ-4L(cAqz-wQ` z^r+Rzqn&WI+Wx42Lcwc+vM(R(Rl(Q)n`bBkAsx+MzH#jITYq7?)FNF4tjfC@XN%z^ zcS_Pd8>N8;$4CeM`jn;IHav^s%>nOk4%gl}q*(UWqM&HW2VeS3@ug zfwD^FVIZ15!_@tDeLpk~;u$w94q!{A1@5YHD#Bpt#+rxE3XmFIq+ikbaT9^-^9RKQ z;_axl{f{#r5**NObvW!#G^L}L+e3yPm2Hno#R<>nh!%8$-K~`*2&XMJctaKa2~O4 z5nK?XWP|vp0oud4eK4*nuMiuYb_AC?Dj>Ww z)UU}X*)Dvo(b}t(i0VxAj2n?HbT$T3-ksNkaQ&kq}-m4B+JFJesde5p(sj}b(^bj7lyc$7}XRCpn)7%9ybbo9L3>iioFw_2slQ1Qx^g{bj z)mf2gUsI%jyDc}!C_5P`DtyhO3e-DdUzV0N z-kXT<#1ZdUd+knFGg%KsbPK#DYgrufKiGj7Gi`nzDT#|@Gf2X4kNJIu{fwHKN>0`b z^llZf#@2u_$$wiHjf5U2;^594SHx9!ev(LK(;tX)gO-x`I5~Yi{y=$f1)ZwV_qTDN zi^SH)T{^!7L}Pyvg{&!Tb%JhG`vwWL#wc`BNPKJBp#E$t^!tFYb~>kyMVFv=v|x1A z{ty2#yTyhzJyrpDJ~Lz@n%yT_sf_L`$nLVJ&k0ye^9z7X6Mg^a#`+sADF|xr_Oa&& zbDgmjSE?!HZWO$nE_3*6gWnO!Src&o6Rxkqx=g_l#%URG=dXSGyrYeoi!sn8@j%Ci zP4$ELlW;kB;>@~2XA3T9>Oeqj1!z8HV77cwW@aP>EMC-R1lco|;+4NxcwpjR)T_0n zupY{dFq1(?vj)C@*sW6)AAvLAt~CvCG(F}H_Y~ha8wVQFqH%wy`(q^uomBSw5b?6V zN%PbMn@(T*`I$8pvLz`We0+k8r9|X>n+UCMkz_hE$42`K9B zgWC6Amto$Aw5ku+B%^u-KRGS;ca<{if5bIBmY@dm=Jm~Xe)xw!?Ph6Fl5Ok~ZW$qG z<+EJzXbCv!Inak@8!nJHg_7ka=YvD+lchAis#`o2`$6{}`?n~zv^99Ep@!B<8vH$P zQp&?1xrThn1}E+uH|Rf5(2V~1u&#<%c(>nVwO%c?E^422cv-C$g_rT#yJUY9HZyw8Hgd^*$twY|SkZLg|`?mvmigL_hxf^rS zXI|Cn_3NB;XQ#gi%CgDq_nL~6RX9!y3-CD$@^JsDm@$g9tnppl zYEAKt>TOR*%W@236bbF9ZiEtXNzXSzR$TPLZEWHyfQtCxGWJwMdkG%^&x5o#(PnMGRL-uyb;z?S^nBYNnsp$1>nsnj zbYJ08mjF2@=1JEaNzy;!UxmDm@JFH3L%88sG!rU!Ybi*n&-p3?cKo>rPoW)$R`l?` zN>(I=yD*Scxd_W-IBcw6588HHjNj8tUctS zZ9iE{k#uqb)`#{a+dgjM zV}}KURp#b@8} zB7>O1f$=2LN%TP~s)ovN+kQbp>M7l28Ir%iFzR=^;f|1L-b4KRKASedLY=47w^!pF zE+iRg9fIO;kN6&q=JWk^18DiTdS=ANais_Xo8AJFeRGqW3na=L=))|0npV?aZWZUh zd4d0dIxeL71Y8epVVp{ACLe36F`Gj@-Vw(bcekNTnira?dR>GGo_lJPVpCQwMV&gv zQ~VN=!a6&zWo^vU2KQH-Im4tbdKUp#_Fb3_M~MU;9@~0Mb=PlYtLW+!xu79UV=F1& zr`v|6?y8fQB^|no9u91Pvd}_ex%)YK#Ya$MEuv|Tj=0_Q;84cHT(%X2)T^nK!ezsz z1{t(u1pL$h}4X)O3=fnrT8yXE7VS zS$x70N_`zzxj*Ul@Y@A#Y}eJOfy@cQ@5Ll7RFf_~cYI)uXox7;5yJor>ISf-FE5h9 zDF}=>OB(nh?v`!U-HLiy$AYNj;;Y`$iw6;X1-Znd7=LswIlrYEGE$+HgVWu*L91D$ zOP9)EJ7DmeX3U)-?VtOhpOYc9s$~WK09$^6*wrtz`DV=m} zTq?o+CV9j+b1lm;{$kqW_Zby1djD(=PlEBr9|>GH6ddI7VPH(1ni; zQLC!APkL6eE58xa#Z46ZDL&h9XTJOs=FE(8DazNe0(PD+)Kk0g+VD8V>V=^o`sW9{ zOD0<5V{TQ8%F^LsAc15$t7ZNdOOOb|MUuO$Iian#3WfB|;s#dUeT7`o>SiKQil_3} z<{+;2j41=wrA0k8oMye8LcQiM)kwM`4VFiFsg~=&dC}AxS7~rH*&_=67O&jUC$t<< zBs*kup7?N#ljOtNn`aDs8YCb*$jqvmVO4+I(?;TyKe$RVXq|cJb1hcBQG!%)JkINb zL4Cb9!m6op$t8)??Z+Cs3Q9j1PtG@jzP=Tk=?t)a91(9EC8JsJJC0K^_fb(a9v*f? z{7vbO-(J*Lxj%GX3Cg9mkj7+=6df|jOy{zFmv;R$QD+NsDL;Kd`B2FF3h+0hUYRv4 z({!S~^)j*A=ct^;he@P~5%Q#ZEBW)jeyI8*Jk0WK0a6OVZ<%6JGlumvHx2tCtyX6V zlk1b})3BsT5u-ZsSrFLD@&}GBzO3)yCCcG;wKk%oVJ-x>8}tN{Hf|&8Z@eBU)4u#F zzrEYSJ#tJXWy;K(H>7lPbzZWYtS{rKUN3diay}jqf&2zvn?$${XN#~(!@u-%%Ro-B z&FN74_9KvGF_A+T@?mqDs=LE;bBo}tc2r`^WEc$vjCW#dKMemoV>;E>g(pR$T z$0JBlo}VjBTz@QAqza??{g7s_UJ7LY?OeMS?+*zLnw7LX7vcda)38|tpnt`Gs{TCm zjz`4CWfw@giC(Q7njd&ZB}hUFNFtY{^-FOH!wDX1VBKn!Anfg8JCoDZ3(q#_gJA8A zReX=54T+)+KI&FFUR=WNw5ZjITNn59qTrL;Z`;z|S<4$nY)bv*pQbP)D=WaCOWu!} zf;L4+e&->Ha0~IfJdz`3?)1A#KoIBkUc!*_9e#H2AA6!vDPQH{t+xUSP^$dc6y( z%_OUwH?k5Oaz(_FExywpuXmOTt!3L+%&=y~w`c(+2!6->47|F3ovO(8^p7T^RiiU| ztBKAtHM8g9G@KP>QXJ&!{$bi}&IfQSS&Bp#9EW5jyl>WZlh?J`vbW2SMSUA+Vi%i+ zR}1fswr8*Vo7(#BBf+TPn7Bioio^Y)JIc$~C4{TlrMozSm(=^yErE}yXOyJzBuv8! z;FiWDHL3QYDV~B#tCDj9#9gO)79vS-f4!=msE)UrZ(yd@5b%6*Th#TYXD_dxphsK~ z?^`o&GuO(WxMDyMgg4f4;OQ94?})fKo7F<$*ej-5@iHe3r{AwJ;j~R7(4woaMS;92;@sB2vcU zPuuRcsvX>MpX2wsN@5@}p7_iuj|}6rU2$^g0Zwd{0-XGB*B+lL+HW>3_KvP44GQ9{ywGM}7BN z$V|S4Cxzlk+_qFm53Tx{i#NAkw)h8kqV3ln;&?jZES@CAJ<>bqL+A@p?{_Jqs>9m} z+$7UTM&uu|Pzo;Q3MSfe8=ojA*<*h!f|eh?7@$e3-o?&&uv8z9j@UUE()AdvKe{DN zqt$5~ZAHR`Ty9C>R#|!$gph+%WH##<#-Kuux72dwHd0cZKY2%yl`9nSkYKxDUwow{qT+S zA$GYr&y#EC<=3sPF`E?O(ku&Z#-peRxQWIDVxg@yn^MvA+b3*r#d2MT2vVWmtxSsn z*_4Z&1+;+bL0>lKW&8{0u1+Y*Th#!YSN-Kcbu=QY!(#l>WD%4LV7__ZhpeUVVfSzC zMM9Z(W8B}!Y$1Yg58i>Hd9kj`nN9pTY;4a70FckgaUv6`UYFX*A8c2`006(C1-F%K z&9VzJ`3e6j*ME;nJknhsyX|t4=!VPWI}c^nhm*3trCI;`Z@$N|E76N*kjbGxlbvb1 z@cMs%z50m)viY0yqJo2+XI(J@j;=XYp|&>t zg>`NFHE=e#GEl}tP`^9$r72Lav9)e8SAevxLykPUTg}uES}V_AA8*!%wA9*>zb0EV zv7_62dkul9mBW=SN4Sqq3b9p2uSX(|&jR$VF)cpCPuSlF(>*yW(}k5^Ocx`^miAg> z^xA36qJ#mC>|*{e+6O@q+nv~?*BPJ|Ju~z0ALz(vp}=kR%Znub-*GITcv(Xs`o2GPaiW~!lsubvc9Rzi@$12xQk1)@6y%4Vtvt&Aff&?+x6l&&e~E;wG(UJ8+#Zfx z#~{*Yy@kLzRy~-;Z1w^_4Op78C*ueF`>@O_+5<}TFv{lLREa0$TpP0s;3($eJfT}U ze}|PIU-5&?l&=MsO7SzWYM-733r$NOfrccUMw1UM(z%>5)|L?O&i1P zIx}wOzs>C64R51|?8DStUv?JQ9+ITI`=yIahd%_Ih5SVi$XzdQlK=bLzGGc*?^pEZ zI_)E(7~V#EE_bw5dsZu%O3#PCXcu%+aC1bpenR9E_$F^lW>K4Dza0BwzKY3j z=|`y5)51J)nr-0FUix0gq!mYCi{=XxO!mN3de$WGC8LUmR@EU3Dyx_+wBJfSG+w86 z&jWyOr>Y;$WdF*{|4ilmH*Eu%)J*JDJb-euYZzr>6R%%Q`xN*w&ZtJ&YlzZ}0q332 zY<@x$Okdm))dHf+SYO{RG6ycMnxT4>Qs+(_6yse0IJEJWH(&E9XstXlcT1ho2b|>H z%Z8WVFIq^{t^Wfh&VLCxlW9HFg%6b~;SvE?SBrD)`LZrffBNWCIbR0I*;I$-$rB|1 z>|-rmZfrJ_ZSd_83=jUi`K1UH@&Z73-=;qNBJOcon;8)o*0|9Li)MeQHpoFjmhBo< z;?A8lqefl;XO{i#|7d#afGD~@UU&%!K@bG#P*57_?hd7-ySrl%kq!ZAX-P??8|hve zX?B+m5!eN(C6?uR=Xc+G=U+H;nBmNc@26Z)5Tu?vFRP;=F5|gY5nBJg$m3xt^tHO7 zk=}S&1ZxgHFwFcy8iK7}*shoQ3Nw5TdA)gI80Lnl2sVM?vRIiH&vJ1CrQP&ulaTUY zT@Tln4CP=Gzo<=hz>By10LXv7m@x@<{STx@XS*Yxa$6OTDnjx_v!NAEnUjWRfnU-K zYkA{Z76`;^mqU$cAUmw^^__BN)Fw>7!$`XF<0^wwXb~-&GujI&H4RuvZSaTV&f8tr zGa@aaNX9u?)MW1dtSVUSHgD#WJ=R&ZJZs|^Bb$Rwum09bni(M5ryZf!Ma95sg6m%S zU|gWmHK?`|-a{Y|x+P{XLMR7wEQOkF$%X8`NwK<4!TjBYk-Cg?-5evXq<0Ule|R}d zm$}*D@7Bj3$6JZr{@&_DB`sM~Q6aQ$man+jTJ|rqk*`6!xgw=&VTW(u#-zB!cs<@z zPoT)!ScrVCk0fq9YI6K8sqH*t`*iarg_a4e<7BxW-TI5F|KNOkgmLhVD+5$Pz1rF9|gN%ARF z$P=ay{`)b7MtFDy8$9avg?}$EA+0A!wE1BS09;*FXlF(bm%6|Ep&!Fi5VNrA?3Xgr zUGAY?Tk1faTbcS+E$Y~GYm_HV5-fGRhMj2?6t;;@D{(FfmCa1}Mmx`7_q z89GXFjsZjF6{`%Sr#=}RkGN*Lp#1dd^1XLR9NLDNmuK{AJGmb)5UToYdzZ2tM2?K< zoiw-pr*~FG;UlAl&C3)YYstp<0Y>Ge?dzwok(Nb6nah;P`?r7KWIxM&IYA=bB)tem;nx6iaB{2#Kbc0dz^@mk z$x}b*p#eAOPM*{C<~A1D)2PaOMZ+*O!v`jq6%^kc@FfL4tDLgbsH7rh{KB_YDwLI|nBTgn5 zSQqCGvgk}OXE3pjiun?7fAv2PS?_vI@nKP&gUwc##Ao*0u*e<*ML!*7&CwcKdhhkn zZra9V-8&8c`2w+OuYI$@IwSD$Z^b?kd2Pye!iwmkQ~@;;`7iwk8UT`KP*jMis*|jj zQvS)fe}nFeEHnRlwbwWIPNNj&2|a>;n-}Ep$|_SH;!Fc2aCKZe=EO5|QGhSo30#$a z33qNMeF&ZyAkrHkmwLI+JAozMreT9dSgbC52Ptar7V$=buw!O!hEpVnMbk1UV#Dq0en29L8tj4`Cp#3-U~et0=} zn6gfHGUG`2Cjm?B(8*7E1jI3ZHpDq%!X7~KKAh7zR{J3K%W!Mj;*4SpqU{sWKY)x< zMAu(CLTCh4BArj#DeQ|4BG9S8r?&i82LHp0#3!*5hu_tqh9cJR@}Fb!pq;1w2lW(z z2u;W3V_e`GjxiPkQe5vN#{54#E^ z8G3j%1#Q%&7GPI6@8>wJRj9@u=|VZ4%vcnU^dMPOzB3I@LE8_J*PipwRM&bsE0P!j zobrRatJ-zTdwwdDtK`ykNFJ8`kzsDfyRczB^g5r0HhV)%u3tI0f|Df45>4BYjyug(u>o zDDacs-Vd^JtYt#5)8_VTf`;n6>V6mm?$9x#j<)n5q+37ke(ajUu#@rl5f1#mE?cE z$o!%8>u9m)L51M&`M~9-aUZEzZKB@N-l6T30PJO$eMds@_gUID3U*enKm2zKm`2w~ zd2U~>ru^{D1=p)SIBC0~<#;eZ&+tM?P71MUw)iCtUhh+Y8!>SWtAhta_k7C`H1Uuw zR-`3sP#tjnppnGND-he;TEw!HN8o#yqo`Vz1D8+qYf2?k`BxG!&(WetA*9SedqKX+ zR78{5W>vj-`>$C4r{m;}x{VH(hsUNO&l6ZpaPz{~envz9OwyS-3w~N7h5R2l;<78- z8sBIFy2G2=nfd##ebiv^v7YaaS&9*-G{+rxe~J=O_S*}(lMJH}L!j7bVcjwycLEw4 z0?8i$xtl}J6pp?Ne-Q@|V$lkTrJ62zk7DU5Jv_0;*uH+IC@LQR?;JWD-daLi4=pebJ(i zV)_a>wY_m1Q)aoLEN++^-CcW6GGuP9Vuiq zlx@VH{;rq5EOWMZ(Kw*CSfzcESf-|=T&A~*t%YC7WK!vv5SW2g+Cd+2U%B8FqF|~_ znAG|ipE-8m*24(kBA-Tr$`GHa*RH6`Pb&SmAlyDV*%-JIA+?nKKawTGEE?`y&8-TU zJe^*(kP$x?uIp#U*DSamSLfx^Ek!Y!#(!R=I+=*G?Haa6?pYpX#*z%@AIN-r--pO@ znLDw!z_G?!yR%MkbW`H~Zm4f4Ej~LrU(MvmsYIsm<4F==9WJF8$glpaF(QgzY-t5& zcHf9B_mx0f>Xr*kKoKJo?SZY9`( zxHd`iR@LJ03w!Wq&f(1ddHz(cu52n&f#yc5eY^I;)$ghj>OVbjLEZsR9vCxv7IImV zWe&67gbSsma06!@R_`?iZ1sW1K54&X&2;N1DWjwD7F8g3I;DBy6_1YznQydw zeA2uZ@|$8UaJM4gZ%^{5@8oRJ>@7n)HqbSPe56EM~U@clh9A5J@b{`E{TigJX}q)9QwbE!f63~ zaP(XW5{KdmQO!VOILxQI{_>|f&-ySo3m1J5!=LXeF7i%fF%@ljR(K*}I6{lh-&@8| z38>OrM+(!^J0%_KG0vVWs#AO=*Ba1L{mXe?&Bf{{^63q_{};3W_=qCRN@eoKWhph> zWHldogx?z<2*m*KaJS=*l6#W77N0y_RDy;<0ulQ>Vb_S&bk?}tI2|dcg{Nas0IM6d z)Ft)Z$dfL0r?mGA#9j1XR}M@Ia^?u^nblN49$bC&kLi;=c;7!Ze2wd}clt-<_+Vd` z%AxG~_4d5DFvq+WiP+_zxZiX}zK8>xN{`;Y@<)iJ8b%X2AfBE?MTR2bT328=t@%jI z_lQK<-K<95@3lS1i5i!EBeMr7Nfc|)?jdM@Kr1ih(JqvKUCeU*m&BW*YKv6xtd{Ok ztL5RM+FpB1+##lF`3SQM@1jYYk-P5?@zV8=eEs~NO3YWBVg4AY-I<~UJvf9AhX$8d z092kd(B(&@aA(p2NXrZUDmD>|zStu07U31V=)W7Wbm7@mRx${Z+w7vj!C467{8#Vk zkagPhC*z0&%YyYO3BK@cAF9Z;ZDSQ2%~$ofnUC3Dyq==A-rn;>Qnuaw)Y^lTqWFN- zY2T`>$YIc=r>HH@=#=`8mOFSi;o{p5U5_+kaiWO~II|xnNP5d{HhHGaz*Z$>ib2EREUK%ELiPY@djc%2^NN`V`3`zTN~lVzaXo6^rqC zs{V#4zF3>u+68>L&(DO1dc%jf!SH%vQikro-^Dd?B5Blw$-52Xs8i|inXO%~SCUXg z&aaTm1)S4W9B>wfCydJZfqDA?J#4uFkdm z5HC^c^_1=`p>^rnaa;@#gC)^1fS!JQOgWZRcA6ff9W*N82Uvf*1w-1~`OSqCSZRjn zoqj(y+=byAaCwoKNoK$AAB8eW^wbWgk9yMb1*8&b$nxG!E3Fp@PksJ1X7u20R}{<9 zWjWiX&&4H2ZNEqMwOwrF17;}(Ia#Ls)U>of!CFy<&VhxlHi)5YegIn9ZLImc-+=A1 zuDdy~jY{NWx?jq6QbuwqD9GTs!w39NxO%)W!K6{>z>UXSGkN;P!&mCFly4k)zPvSH zo&96(BwPNZ{`pd(cU8cDpy)*OVT@ZcN_6au-eu8SV*WZ6;`36IJ7jHb|D#9S&F;$_ z<3&^Ieiu5Ld6lrr0!t`c240cE_Xqv={a3g;Z>SYno*RN4n790I4ZcTGBLl{Y8UBHO zprCbnAR!?5!HXb^JU@Q)xIrSDE2_Pm z{Nz!vcf(=eliS$6PaS1{((O|;hASMlnhJ|O($02zl&_N=y{sjTg&Ts%mr#J;q5tK> z((M6V7<`2V$8yiz?NamP4Ej&BNrcG#n6{@geL|s79CN(JSc9+ z_y^mV$m`@aYvk#9CC>{oCEUirXk;`s1y{AElmC=YBmw>)A_g1NjDm*xq6bv(HKL#J zlp)|-c2d8~8d^;#OQg4L%3HT{LNnb?W{L2(TMrF&%(@t#_2Jqj%$ON3Eo%aN2$%7QWLj@Z32&^7u}A3z3UQ7)G#{Vdv?Nd{oNQ`6zr(C#(2p-xCPW| zoQ}(RuP3O5YPODk--YAmEhi2(erwYyb}z;%(#l8w&;?%zDmL1i$3kQe@^XXA5!WA< zOjejr2nS>kOOgVH{7Pk%G~yGK51BPnM+$^g-R`?%MW%GC*du9|PN^a^r8aDe&p37; z#bM-2+PAld_4v8*rr`NT^}Ta?3z*Mg-X@>eN91)Ia6TFR@oJryhO`(pi!+KFUmRO% zqNEWqm96W|uVU5*6=J|1a!>t^o&>eG^aY;4o7#T;LZIWk4C$L*3JNw{<8JgghQy%q zo2wAP>l!0!_d-RN^HdB`uz$ZI-RLs>9~7TON_#7lNoS)X9Y`cO&pu;Clla{km)B%VHYT9 zUfnH`JK=pmN2_HV=-mVz?CQIzh^n)y(&E*=8)B5I61-lXFA&dM-3ljUDy~ztow*pD zYOM00mWY_u&J;RY;lEA=Q8xGnjY`Y9c8~{}X5cxvM;|a|7D(4LXkDwP&rVnaK!Kpn zLT-j)R=VnF4X@mcn|AZ>xFt>E=pj%DxRNB_dUsb&>r_3Z3yc%%Fa{{WNbCYiHiTnT zKv?G-T#{UIv^!=$7PDV9q!fk2Q#78zEY-HZ2U3e;#SdKXFrpOm4&^s zhK6U0!?+j=5r#%yfgv;TEP-|%SiTaTzEbzqd-c76&MJjdBX-32Z=0|++5e@XjUYW- z|1Wx{x*Ap#$Ygf{*!`W)ZLF%hc&;O2GBV*212nS*p;5u&tEty4<~Dqt1}eiIC-p2X z(&NTuXDsaOPN5Q4f>IfX~ht?B*pXiaRfq}9^px0*#(&3TXrP7sr_K6EU z_}ceCQ#rsmZuCBZSAVz$#9wz{^sZBn!#{X2+pyytJkG`#dgmz8oJKVGg9xXraxiavXJPE;C<|zLOW!>_H znw|oS1fL>(s@w%Eil-)15t^?MjsMTZQ7zc zdOrDM$h*vyg@ONS+N`%dQg)agPl_GF*lVDEx;Xlr(r{Gv^<7x2Su@-;CiKcIE%V~W zOTQ^YhuY-S{)c>>RXOep{$cUI= zMuu`(_j|!>b-Y4-geb)XPomC`Wu+$#2$;g}aM=uq3Dt(r@9h+IBV9k*j?t zAFtXi^!8J7(|emH8 z+}(Vyg!?~87s-v^Ih=b`Y=F3VEeinGPX2bLdt*OeOO>iVW|6KDiA2hs>c={GlBjTX z3AX(QqLEbKSxReCJRBcj;4;;GsS|nEHh^otE4!z+UN|Uu`0`|F_kAK+df2Sctub+O zQ0zIZoA(acwZ3RNrCek0z%)IRC5S`&*vb`z{k6vM!M z_ju?8K+P@9$i(xbM>^;Cw|6F87EtJ`(1TCkb|VwL8Z-ZsS(1M=~hi`xh#_4 zOMS9By2;zZE{VtCXco8p3aj1gkF-<|d$x26_C)7uuPTV+Ayf0q0M0k#e=%knWRS_3 z6gQf9;<~)O18X(O;O6DT=0G3na^4v;aVfjJ8MUp#>+Yg%!a_A_I&>AVu2=rkX0=%g zyv6t!%PiujPw(bTY;pV^_JFJ`yInv|@#*`l|`WI9j zky@ZNqr>cm3ROgh;@?2f^RaOj*Yh-<^UeZ!yUnPkL?dm#03jRJlVw>F8sj6LJX&zd zcD~&2YPH&k@<5NOV{oLR;BZW`kjF~m+!T>dc{qrfwn1F%+Dkds#P{W6N=27ZQ5CGpFRjn=kyYofWWFOs|GjioIuEn9wz+zz z;bzWU>Z9E-UC5jeq3ko)VHLO&S5#Aqj%bCuAGn^yIYouD?Mw;XA3gOV+jzXWq4j~_IV-6-h!{(%q*)P`(r8g z+77rhzNzqV1$fH4HzEuqmVn5!?Go_2oWxBPd;(2*(OHq&QeT2r1gq9#ZZnl}S5_P&oiAxB1><;kd|iMlZHu#itZt*M)pGtzx7?gk zmpvdF5q^AC%={GZ4a?CObJWcJ!=hR8f;>$E%e_)RTU`jdhwpdxI1gq!9Y+7mQ|J5- zb@chW3T-~^V)eN)w*>`2IeV%0FvD4p6eJVvWA)brrL{syzU(fBahgqOX%+| zfmxzs;)v$dk9ME#tJ1+W;D(yH*G+y^>_A!;sT=pr)Z3Eey*fUAr4A%lusaTKHrp%p z1InRx>p}+VFT{l0lRFgBe1oG~1Zh6u8h~2X4H8n?=kx3dfAW{gx{o12M&nE$837K~ zQ*bDbTA&nz7^Zr8(@r20wKGhZOQcauzFPmg$icSIax~(x!fqEei{!I|1Jk19EEqq9 zbJ};2eR=#96cACk-qt*9_>Qwbq6+jxkagm;y4&2FPN)BRS$b)|Ki9s!APQTaW^gCv zVI_m#@a&O!!)92G{!kc>Y!ItENqPWCKpS%G`V0Aj^-FnUs@m)y@r#=3FVlV_6n?zL zP@W=F&(jv6(X{cGso~a6G}kE-46VrWMnS@C@l`tv> z?W^)Kq^8zig4M)=QLKK(Bce@H&7}8=sUT~D&EKDn=23|p&vT|8cZ+OUFFU!QVt%rd zsnZG4N0yO`Uj9^ti&zubd$Zb%vs@mVwpso*hV^EjO#BOY8pU6X^Ep+B*u~`iRd4a5lTI z?`2yoa;2trHQ9o0ucC^0yKW6U(RR%(c?oYz+sUQ+c$Y@44 zDt*IQdwVbOCrOPI<|+!w)@D&a>M%_=OaI~Rlebby*K4dA4D*I=iBKv#JcF;+Xj zfA!>TwqIGi!hPLNiW>d{xpVV|#5F`)!C4e(t4lH!$whXB5%JR1EiFn*L7uknQzhrd z4`=vI+GW;I^dy6BtE~*EG?jx5HyJ>`7~J5lr*-0{PLw2jYQ(%7_UBp;^A%OFDmrN5 z(ASpo*7~4VM+6WBZdCiA`Vf~-2rXBDz)c$g08~o&{-)i^sU#QBtqxXzp>6U?3t*m z=}VSJ;~m;})gLgWXmRL8`4DQPtaHqO(ED@c17{D={k07=D^g~qRZo4@oL41iyZYrW zG75V5n!Io!N@vX0!5ok`3G0!zzi~?Z^CFm0us}hddUMu*Ulguw%leYNOX0OgveIAh zf1qg-ObH-+1@o)b`Zi^PuvrZORneh8+6(3ALhjfR%bF8vd4@+?|7E#}_u-5o-b*O$ zQINtvBP|k%hmd2yVI6;UnzzN|s~WDS=zpNXT!d^lm8}+{`E%m4h|Z+mH&;D^0oQQ| zHxq)SFT|&S)^Ww;y2xvp3M{I}@>Xy8m`&Ll-Hy&<7t)$LK{ z&M1^YzJ|;PU|a^b5!CJKp`+ue(6?Tld? zLQYj>me6uzeVBipoZ%qJm4_=Aph3Fs4pOp?|KavOP>(G*#o1zWg0-_y-PqeA9&@M> z+=SMG|I35DzdqwEqo;{7I zSYIfTsHRXA_<4n_TbJLzlX@6ccoD}p^pX)EDRzEJa@uk#C5Z&a$H!*0A5unLx;(HK zJ_P`UounR^(s(eEsF*|*z4CC`vayKTD?3KgwJnVa@;|hG==p(M)gSID@u!+Me7KzM zYhCXlX}*D{58Gjmf!pPVG@&w)%i@wM7k2sA^+g+LVJ?y(;+ zwFd$3Qhx0g^gis5f^0d9QY6RgR8|d>6wu?Ps7ADYUo31lRO$)lrvpL;>Oye;YHr>; zEOrz2lZI4$)LFc_c|yETxlWV06#~Vd zpn6!GK+_=k+zY3>A^(BY0b-vJN6$A@tSABZDGs*C$);>84j{=4DM<&|9vkR37QcI- zjRQ&(#ukbUmbnP!e+F~`Z2U-FhpirFdd$xybAjnEtAZ4e7o!J+3ch{NXE-A|0HTP2 zVPM@;YL?D}miae~P+;7@0hmz$8*Ry|wc=4KIAG?$Yik@Jsu;d$Dsm<6v>e=WqJ9AG zzMva`GC&$M&?49-J@NhT!}fmwjZ#`)uZkhiQAH1c+V*n(43mvEdZAa4>o0#Et9|D@ zkI6zCHi5XEWd8150PKUe@Q~DCec0YTMH$F1Zu228KxVY3JTvlv=JUfO(1-jlG&Slw z?8Tey^$0O)BiZ|y4^FM2GvI6+0iH|V;(Tm_&nJ(p^^<0}rZDknN#v<3^SyFXP0~}b zrILnF4Y%0|#hO|CeWFX)9hVAeBk!iBp;;sqtBqFu9j8ZVKc*O{mn@WJEpz~B z&H8{Fmop0zH&UUKra}7)&VvR_yQ|$ZaNsFETsE`s?|G#Sx)c0;{n~Sb-p)ble+dyt zfRW;=%wfYBGkQCVp@{Aa+*r1zF|&pv!v5CQjiWoprSN+)qoY3A{Rir(*g|&=xUVA? z8qK{yviF~bkF?votW%nPrdQPBDRiYg>>1T?{ZyZoqQ>5S%?OEA_!E$b zWXA5wkUDr4O4WQ(cqPe8nXVveOc8c2RC~H=WF0sBeV!%a7a5Q?a;}ROML0pXgf*da zo`Fk`pY)wCS3Z>YEgf;VI>?UukTHOoXVX{zhND_U!!yyF|dEb!NT{t zRzw>n)iV7KvM#RtOI)y&bPs~+A-4ABzj-fuM_52ic^jUkyY%ih_z-^Hr_ zTST7MB+sK1n~-E#k_3?jO*S}ev*+^`K)7{{5u~dzZWQ>7|FEF#%7bjdqz+Oc!)=W* z)>?nNoVE`X5cQ4-kJouxJHo6E-ldc4s@+Yk^CKniSi-LD!oa}v<2!$}A^x0wRHeUo zjOLOu1u5Fx2qE=jXv%UNRq($Jz0?{;sf<$Nhq>p?kZ2Hp0$&?eqVZO^nEdlpV3AKC z6ZKw**0@wPJ!ZMJ7#aXt8`*SNt;i{jH)tFU7rgV5Ye$)qBfV{P2u8;Qq~Rfs-=t$) z=v|SIu}kp@NWwH&Lt>}`YVA^Rylcb5fNTSSiKlu7^4nv~PtHT2C2KG;kVU8=*phx4_)9D8Dbmf~bCUQCAUAYq{u;k^7#Z!|jdZ}Hi$ zL&Kit_79iW)_ey;ka~*L2Dyn6AY{<9u#{rEHID3FpeE>_Utecb0Q3v{_{k`NHNk%% z3a(&f6=#iVY!D7z=u%LZjBrM#TqV#qPG8qVWE;1BcQ^wIKLr*MV!wHkXdU}LqOxfI zJES>_fKtg-z%La`=0O@bExW0Eju+PiyW>Zpb!_7EvmQ0z?=wjACv(gk>swcYitW5) ztvI#R=$O;;hWqZhK>^L^Z6x2Qp;M^H79&HfPvd}sB;(x}? z6I6Ycs=e<3L|&dq>NWmyiy~*&otbP~3S#|Gx_t1;uT4T1&G{mryg=U8S3ttBxYao) zGQo&$yU(MeVlQ^hEOHE|U^d$0POm2&G5;+v&H)cJir<->CB3(^+oenl*6G0b9N)di zZ`PUK{!JHhwvxgbDx|OSXvXg!5Hx*8_6LjpDIz3fopTzBxpZe?=CFvPh8!MTO>??i z!bk!d_uAx{DlRb@dLvICs}PK$nP3G8`YfHi!b!=iY};yCCq-{f($xDQ?~O9ly(8?H z$$qV!fG^8xxE-m;2?>3AN&K#+0RvF>hAB0iDo8)=SWkRGU$lx}<8J-RL^TwaBQR05 z%9e?FC;c!>0vH}MGku=i)TQ97OP}}&r4N5(4@PjkYALJY*~1Gnz41D=S`{=!D`k(< zQOG=(&_>lO0b0fXUHVnr{aER4YehCd(%ec3Ns zVjYkL&K0aXKCNb5O?jU5i>FMZ)};45$+@rse`Mga)4NZoY?@@j^=8j15t+M>hdgyQ z^Hij_u}fMrO}|yDa>9LD1%qjYDnTCtUxdy7@SKZicuc^8>-Q%_!pPMTmt6;I(`$3z zg5GDc2f?OI$P8hQ}LR#1f*}v$yF1c6GhC3jIePvtMSLsw$I+_ z&P!FlZcv-?_RF(WV&A5%EArl~o+KNn~8S9`8A%rSs3z8N5v%xal2{grz5A&E z^U(mN(&9r$DGk2)T^75u^Y$}{k>mqLd?yJszt5H$j?ZKs+M>Rd;D9GAc?Dt2;HzVs z*T)Wm;7`hy^FOLcE3V6wJR6mvF83s}Ny{YB0eq0EV(bkUC*;_~>6sQ7Gq}cV3a;{b zv94yzv7qlYet?cP_b;mP62vCj`kjbU{aQbyw4w%&o9lE+EYJ9F!K2bk|EOT9PNI%z zlVBVt7ZSmT%w5;Ayo<0#6H_M78e`s)4UmeURVesbZq0UF%zdf&!LjQ?)}v(0Gj&_l zFYZN2PG1VBoVs7>0P>Ma56?Um1AId`vdVBNRW2d{fyN#xXl&(??vCBh73`DaNb~l% zjMq=^vIg=nb`A41<3H*0;(6mqb^dlrs!&#OPvt-PQ>M(eJ?t9gEjBHe0KgK?w58JO zW5RA=Qg&_%a>4YjJOA@q0-AhEZ#sN&@iEw!SDmvowoy{{LHE_X&UD@Xm=_XVB=_!n zIQ*bZcqFVc;YDYMriS2?*BqIoiKkI*Zk6E;)Nkv=xrz=A5NIFbh_!kakXH&=m2yRI z7~enK$!mh+5pKO)rLSrxKTRAvvlC8K%AsK|*!ca8tNy>r%E2fX+8lGcPm#3|?X}ns zG|$O(un+RF@z}%S2ogGT_Po+gFH50iz6I`7)YRfMz{Kvt^vqWJHGg8EPr{Q4wFxS9 z7EnRYW$M4#O5JhyaFNmxH<2uFpR}1>KzAz8ocX)yrjMVf0MbQCP>mN?rdXBohX0{Y z!WBPm+s-C&SM0D5{Bve5Ui0Nm)F%;mxjBp|$9Qy=Eo}1c=_6(j^`&Q=ZK8A@D@i~2 z-R&~RXmki{W=31MmkRJQbyS&g_TPU0DNasGW)X2A+sZ|;?`bH)_DF4}p!o`|n|SOw zMeUI;VCE<`4Qc&*P*tefV#CUwZzAR6wXKAY~K@|2#(X) ztpihh``!T!{8R7`1%C!r@2-4gLYXIJYbQueTHqbO1FZ2{n}&t?fJydPv7=Db!6Vn3 zzX~u?L`i8dlo@!iUJ)%U?BBhA)KIJ$OVp;_nay`Z#3zwMfB5&;^?Nc`s4fN8>4@ca zB(w6rY^ez2_I6S1ziB#u7;6?%oK0@ z92`5&qJJs?k`Amk8;j=W#G(twzbVm#`CwCZaf`BUdGtK_*5^nPrE8wVmHOn}n8RmX zuQ8!?6{$PBJgp58xAwFpDoJ95)Lp`2VoP*)rJfV$zN6~-i2%7Az7EO5PFT6c`pYAqI;pIr4ve>iy0=a^IDLb2Y-6}ipCSOK+_l99hUumX) zAtU2Mb#r)v@bhD-u}E0+}>FI%2#=qlW(FNCvu%Ml~C4uSs=okyRBbxC4f zF7;>T0ydg!kCYg_6Fj%eG;jS>z7LqHukY}K>51{Q_MZH6b%+%tk9M$NOI4LsDKF4q z$Csqvt=DKwrb&yGG5f@iBYyi)4{yrjsZXl9IV1kW7a>#Zn&j!Iq_|m#kdjVy>9Ecb zSK9H){0|RW?(e>!3kILFYAe?FuT{w89&~?Q9O}o4uzr}qKE1+J8Kn(IsQuQo{@S*N z`Dp0nTwqOIDhA4;1rV7XFW^Knj(k;~#z?)`KGW;@e|W&QL>?pj&=oz{I%^}p;rmqi zf%?YK<51W*+%U-_;6>mUYvFXCq}kWKU)!_9YWu!C7be?Ycn6y-!4aW&7W?9(eaI*F zYF1Ky+s-(th?!7&jEA8!GI-QMH@z4uVrHnaH^q*cFPAL{kK%x*SK_jqmq5W_F~*|< zo_E`P>a)6hEi*PNB?5DZj{;zS8i-|XeLUR-lg5q+CFRl|CcA4MHy|HQtUUn|i55~0qE23Y^ul*Q{Bn15+G}79HchNlCFgB?_RzOLaqVpW<0}s{ ze<8(F704c!w12b2n-ma&Dkalbot5;vO$y;mAm)JrSvz5_KpE+(Cx#Y{x# zqxaNM!DKcmz{MO9+UMFa5xY!jrA2)%dZX7)CUqK*oz_1C|C6IO!NIM`x9PLsr4djl zb7&GK_*DC|*d6@X)$nige;`_(2JetX^@C-;ux%FR(;n+JbLn;$2(9=DJYZmE9n55I zxKwuhGWp7Ya7+gb-ygARS*&TCC=>8Vq)#}xql>XVX8J-sc7A`6Dlapd8xPTY|yru zolEpJW8tqw@2;2M?H_5))cLS}pq%^wT`IABAxUydDB-u0hslH3T7A$Z~BH&JYBmc`wF@ zswYCGw0RDj2$fH`t64Jy0=4c2AB>ogItO#1QI%ylC2+q3^blrI8dGw{_V{d~bR-p^>sBiV5r2gD8usHRM&vm% zuEobiQxfB?J$dN+cwCuaT(&rt%Th0O!mjS;o=UpIJl_ve+cHRTHxnojV56BS_FGA* zbFqU>kg-w`l-Y-dw)AAT%&n(q3o4frP%rYSRrh)J+nZ}82KC!uNKrmv`go|3I-Q3G z9K7Nq!>pYZ@2h#$tR$k}A%%P#SmNn+m06|wRA?VFdhTBK*7hgL&W-nbmN>+{Ih9UIIs z0DHkgXOk^_Hk5MB(^+v)0J$F7(}Xy*v%cor9^Is!Ldv$dshz&$2*FNO8^{2ufB}`W3plJjB=rU$5JjLOzn zH;L>w*>cAr)K}=KAj_tLIyFo;(c}328yK6z=y|DySzR$`xOztVl3iw@#-_tKy9GIk zlPY=EcfX-Oy$LI_6ZN(4X;UbReGqV>xpJ+&hEp{k(!wWUe3HFe*K_%P|A9hdLI76{ zZC4h{xwcI<=_97>gzmuB-rtf~%)yzxpL>|T2>_+73nQQeikgM~27i4uJ*C1vZg5s7 z!zgjCj5bGoQs1CkHOcqNedcxhGmFU$6U~6to#Y=0&g5?g>ev9#1{bwa7%AyYP~cCL z00guNpP_vo(%}sa_o`=7iSa2*ht>6Mg~RVizCv=Th=nULp)EORbA-+=RoY45!^_>> zol5u674(ZgX^dBRR64`)`$tRJfvA0`PIlPHeju&VmyT<CGg=#YK34fLx>vBRJ`i&^Vbx99 z?H!~1>FRF9*m6Fk$6}-3u1$|n{LJ3kfBSf}4DEtSvzz~#Ds|O|F=&R$dP$cvG(o^b zsU0&Ffct7KfTws-wM%F6bUP1xlL!K&&6h>48{;sl`Sr=$ecS2NT5a2ql3%F6HoKmf z)kpjCEV3`T)}C8=_594*d96(%x(+NA5QVVz!UY$Sve$gRAfDO!gzEo5^;)a*gY37s zX<0x`Rr>vZAj^$8ZU>!wCehSgz#aDMDHhx{PKj&aNje~roHeHE^LSX)CR5JLW={N^ zYA0hUAqNP24c3Li;!-2|Tbja_OnQFx%Wa%QqTcJKyD#BYCEbymeqNqy{Hv?t77}j&*d5-*QfFBB}gY zk`P!1pzD2U_mW#5vFkBasbH%Xy$-UWPil1AOlYI9M#+Gp*Yjt|fe&;5xFJvXsB#CC8|*E=8&J-rVj2hmc1!d!n4Dym#_tUfUF%}2f#hKe7D1>0+ zO$_$i|3w}(ph=NRja8O2J>zR6e}J?j1=;2|uDYcw(Cko|3PRb#;E7iG}mc0CzWJ--Ew51U!mIgXlmFtQ?>z6Mp-!Xojo~#ry}$`)Nd?~YtAM^$Ku{|1X!=W4Dl%vDAz?Wi;LEkdm~|`) z9oVP-&*d}<)(7O>m^K(SW`21Ro}eXrt}7{uaD#PKBt8(%89R;8M=_lnMumJ1)^EE0 zzDhBwLir!)?|0GF&#k(L+5fhxy>9JCWzP-XBNSmFZ%5a)(o#FE!fx4@Wo={@weMBK zRVv*x0jPS+@RBJ|3u-TM^3rH&=^N8Mr7HSYuu|Pb5?$4Uwef$Tn@-2glS3HtxqT{^ zoz2&Mz#j215Z#5kk9-xsvk1X|^|>e`V2|P3wS7-ore|Ga!3B+&j5$PW4Fl(AZjas3 zg9W;W$uqpQ0>7sT2>zu;Ep>G~70?LX1P8xxA1E(a?+`N&LrK&-g{;)@3KQ0sD^w;{ z9Un6QYKZmV=GsgMTEm2ziR5uw3TB-R8V0Ur_hjlTbR;1GXk~yf_gWteS?`>9`KV`j zW~%sLQ1y@jzu^J-`&&KQyeS6XT5j`Ck#Q}2whLl2sK2w-XpJAi7q(YI+U4b7K88#F zuJUW9MX&Ch9l8a~?Gf+T!RkN%?SF#lZ}V0YArkZss>3VZVG8<(#f z%?dfN@fk1$99x4qJY3etp@vX4te9^5-OY*=XqbKBs6~ZYQ*9KN&y6$WKM;$?CMFHd z<7$%K#6umGPvpOwAF9#r1T>}%Zw3oD3yN{RYY7G<#oN;!a7+eT_?aLatX!O}g+u2L z4-MmS2RlIlUnx_H>?TB+__&SdXPL0cx0{%6U|iI81;WihEsiscxFq?0SBw2T_z@!M zf>)AunPUgX$Afw?5Aj2bp0&swIfy2$; zH6rR=d$C2^QLX=vq_2)^>U;bif;1@Ip$zHn?w0OGx?950NJ=B6q%=r(qtY$SMyJR| zGr$3#=YD_B{^f43anISg=e#p?sfod9kjcndhj)A?jW0cw>!cnfHW0_JP#QwOZp@U* z{t=EtyyHkYCzI>dG-?5_nopT3MA$znXF^+}2TVv3+tdzLFFkILxvIIXbSRJ9FK z=U~IK(fU;{42>ZulZj1d8T`|=9`>zI=r*S%vVXSWlrdh_NHSwjh7~y-p*W=K0v3pL2kVng3{3S{86hboDB!U~f8u z4VoMoN%Gw}$~B2e$3*|K6DX-|8|dq;S`NGCyzpWl`45zp`0~ZEMop6hdSMo_V}tAH z)0zgW{X#PM;>cRVL}63$3vR|9wO^X>AD=U_Ag+D$1iH_!v)7X%I|{cp%I4US`;nLK&5^bxY?8CW!yS(gL=az}GN(X%d(@wUCAvj( zpMH9;Pp+}4uAxj8Id+DLBVG9UA4dH1R5gtJ{iT=j6M1|OTIMUuksRMF$c1-u3v%C# zZo2j85lM9>+vGLb*Li!*~f*JD7;5SBEtl|AZ6WPmbtIhjkR4z zZAXXTewxqyabNEGc&QU>A_IX_U@&4DDKOq=Mb5tLYj ztvf!*0BvcwKCpF;unEQ+oK-k5m8x?S>TBY)aMD@LUJr@EB?#~$(V|zg}hx`?;_At2{?1h)^Ih)v~HR^4l+RXT)ei)1z>u z-lj-5KaOSW5HaT3ok2j7dU2^@%_TRE;r?FzhFCd@f798{(Uht?b4K`<@LQ{dkmX3T zWy*(CnYiWax{dr~Z+!kHFsn^Zxb}A)Pf8UI&TpFI=q9UPCpT>p9<+|@=uGvcJ7ACF zcBw^*Lr+iII|73XX>rERP{{pQN=EnqCl&b>ms-XTmVx(@P(l%7DA1)dfKLJ z2$e^#53|x(mD9Hkz_cl673(*{%ybiE1YRy4X$ry=g@p$5;7jtKXmK=qN+Jxds>X;;Z}Zvm)73<( z5gQV7yq3}Z#r2>TyaP-k;sj= zw9e&5qjf6hAr(*(H4ji4+%WfO=~^|kM;Inev?x`R_zrr=#zMjtI!qx=Q~_X6>7ncI zfDqyh!K89rp0tsWyZWxSczY$D_~^(cta_AjDt1N2Hg`msFkdC;MV1!~`Tq0UlF3+x z3$({R4*6Y}fz$b+P+AfNIu`vodphSyIRoyecHI>1w?$@^PJe>;Wx<26A+ejyJP3!c zLi4M6!UMU{V>xWBi&7U-Ure#1YoPigoqxScxl3p73M8w0HnJpxpmAZszDPh5M|-y` z{jaX%3wXXLtCMmzi-AOTV_S!oC!RY1fNiVoZG!gB3^!V07rU717frJ%x_M!o)lA$P zBOo2AYq9z%l3u=H4$&t|a7hhgT1ig70h2et;j>BS)~Yf04L8LX5VJAqg1r9SFPrve z2suauYc3d#ds4EMP(2QUw#XFMa+Al zjc-rzv;9%B`jf_I=d!FRM@HpQpZxdG#Ecowti!^!+w+f^9H(`r^I{glhKUygWZ943 z=ni6H^BD-Eo9OrqV=r;+ewS)QkVf%k&V=>;rI+3fkTQ;vn=N#y4GrWjPy8c>A!6o9 zBl^u(cD~U3#j&D!5UOQk+bMSNpAa{-s8$*w+PLHrm&td}p;ubIguWlH%LnL4K(7^E z+Nd&1Cd`E1a6m{@wsI}o$IycA4B95t@H9w?+5V{eDYm7bF}_hUw7B=bTgq6{5hmx~ zcUMoO<)ech3NC*+AGUJx1!7|Iq*UGs@X09bs(-qI0zhQrx2b)*`~V%U-8Sf-zfVX z@>#{8W|2HDmJkvj1}7EH6b6GYWS{sS&>G^rJSsX0_OeVZND5>ZO*S`7rrxx6W>AsB z$M%UX8_L7rMXnT?0p9{-JU2AiLV&5Mrz&mgcn@TmW*;2HZjcdg$6qE>vTO{Kue3RI z>UuDLm%G}XpcmKIK^i+tSD2PW(Cc(r^_x_dz)PM_NFB_xyNErHO+Sg&{Po=;7eU#p z6wbGIP5N0N;G^q_52S@89=*jh*AsPFXnxdfrey=}$C>FciKwvzY=N=#Ao z12wDep^}nBW`&Hdw+xz1kH_+Oug9rt-Nx*hyaLHGX+L2(dwABseOEPm+oA1KSLG96 z-Jc{^_Rr*4q^&LHBm#o-pTFvv+azGzJ9>*(+t#kES|FJG0|WDFhIKNOYpLst-^NG% z=6%=W<)&{v2vcrwhAKrTJyE&2%?oY7SMNjF!2SNG8B?+=vn9B2U^$tSGuxfo0e>{g z?|iof0ik9+rGD?Y2llIdNkvjt7&K-=AzL{4V|- z1MwJKou}NEsx00n zC<;_p-Z9#NV%q`Myq|lt7acPn3v!sh1|~^d4&*RB=zc+PO>nTy!9ifVaHeA|6?AR; z5mP3zZ6m}SihUZ-PoCgcspWGtc(VKz4k;Y#X&FN6 zIS&Cp2N&iE>fK)K;>c%>vM`=4&Ox+}dn6d51u#P}XAkc7zVy}YFTe!7oTxa5_FsX$ zF3PoSk>$g`#gBMJ(Y5ZZ7tqT+pePyqm(i?x`c!`RsmEHk!jms!*GFFRZZZ8qRR?=) z8+4A3>?cJ~3QHbKxcrLg_`=GNq%Pvo4ea^VeQA`=u;Vz__t4!RB>!~KeIA)>8Ly_l}rj17g)Z-_zxt&9+@h+Fd0aqj4ewUAv+>%P){VNzLVe= z74zZ6HQ83Y$(dR#IVkL1<#4K;a`qGDp47fVKf6|v{TCXI?}Ew19DA>R`}$oReTW|_ zy;Q08*)`fftn+;wA`rm-%*r`I6V~%#B?b9;)`z$Pya+p%yH`o0yqgcr0@m)gmAVef zFkLaGF*wI~-EQK~-=}19S*7D(-z|1!F@U$w2+SxYW737uBl;E(VhTT*QuODw2IrqW zx~@=2t;g%%We`QZwD&qvRr~NNcN9OhZZ3&!^+W#qY4V>gkSG@YEhq7g87!b7Qu|B> z@fyj}bhWNVm0r)p`-fwsIPkbF1b=_rSIgT3k%;GSYU`}_hE!q?zr0{5U3^Vixlf&edc{=|ULES1 zj6K-rPmE3YxW~3yKAkeufVSF}e*#iX!J>ihDt7B-fWgfYj+=)5Iw>Eh^rhGs{?*)i znz{d+wu-($WZHSHjDWn=ot29H2;&~19Y#2DikUnweT|+E5@E^@*7G(UCDhk(2If}E zhVtsP!eDmu^C%%~(*DLZu|L8mrWvbWkL);q3e<8=`8*Q16f1UUxDfi&U3075OiQ_Q z+A372Zd^s#GdA9On9c_VbTnXms$sdPr*POxEpU-k<8+rV2D##5F_g1BLw=lpYbBVf zb1p{E(Qu+AV4>hjlvk*PPB~6+l$m@SllLlBKX(bV?QT4u)oIwD@a7X}5A5lY?t)Ur-)Qu+k$k9~^BzomWg?@UuB2P8vn8|<00SBC|OMh@bQ4S!sV z)s$*@y)yo&`XiRgSakNEQQcw`hQ-gM8Lh@o=}BQ(UwCW_sHn>2zY+{m0xNz-%tYRf{)X8v(Un^+AWaN$4y0b?sVdalHUK!NkPzO_VtX3 zu&K9SpWntnDCHL+d<|CZ*bk^``}Tm&&$93ICU?YEU%VygC)GKeXQSrK!&!uR6oP2* zugg8^CFI?E=sB8FJ@fJzcFSs%2RgNe%L$FJ_wRPrclCp&nErE>y4vv%1AE z-$ZQLn8m$IR*EEzCuBlONKi7gO|PDpSx-rcdsx5v@;7}}J6Y-fI$hoit+nfKSq^(W z6X;EjASDi0M-7}Vz%@|J@O@3G&a=v26Y!qo-gAyWG_O3DFLJm@t|E6Bj^Aq8WVL>@ z(a&DUPeo{0br;CQ+3S4TJwJZr_~r;v%qjy%SJIzpX9;nrkTrUszv|UUo?TvKvsZfG ztp;Y*ZLOCZmkufo@EiB>1P4XMGU48XKH%Dbb>Z#jAF0N0E*cmRmd2b>8%b=NPQP|; z?OZEeVM@=xl(o3}bZ4x2@(Z+u?A_)fOm~swj}=j3(FM3*{f@Ulynl$PJGzz-eXsEr zLxA+G5lROBr>=RP%vijG=4hhtyy@-lGIi1_P*m`Y$jJJ93oO2gm$lie0gV3Rit5B5 zWkMxQUE%ZK58ac6n>vJzReamPHgF z>5h*U5I^oSGquT*GLWEk)VnYsLj*n-pb`WN7z;tOMOLmW?b{=BRo1u%*U2d`v`D#j zOh$U<^skW-%CcfVD!A)EraALT``sI=J^MaC7-@eBcA%G9@JYV^cRQcMzs|1$#`?vB zt2Q`WC~h$F2zWVW(Z<9BEx3!=$y!OwCd)kPA~oZ0saHCBx(G26`!-*shKKqN8R>#Q z(U|9_byBw!y*JV&jr_Tfmd{E#6H-NOCgCgbYga$UZ}1*y0O08}u=@`rd+K1sk%uY# zgXZkKA=Y#MjN3FZW{U>jcy7yY&5V1s*JM$Q{VPN8X8%0g^FiLAejsQjy|B=5zy=ge z_s8ys&YCB?BB7<~>2>zb%yvkBixR{ZKK;VKM4R4;*2ge6o({bu9zSB>^M9a9L5Zx! z!nwXiC3pN|+!t0py3ZHnB|cNPM)9>1-W0dUz0Ssx#YMB>OVx&EesyL^f6gHjt0))eC3KV9m86g1lTD$t)roUvP{I?Xni zU|9lUNdoZ^1!7J+juZ0`-^^6TX!68rK*yd_BrFHDk%amHpR z5`sy+m6?*C{biw+#ggvPYf%fvR!X#J$JEjizYk%f80e1rlQ7R>Y$;~zzc(u#+@K%2 zP3;mIi;!?W%#oUGWXxv>z#_Z9;0V+gWfBv*QCXjDc1YPgYNfY(u)zLp4s174-2R>j zCLoeT_|!6Y*!SE?7Spx4GSB`;Q3^PqD{@cHA-BUpRdi3v&CMBkQOXB&f%zP{nE+3Hn^4C^|WL%`BLY$mXhYL z=0)n2S)~7dm0qzO`lLtaXck*&sF#D+rZiYeFj)~YTC~zLf}&_+>B|~ACrd74HjJDR zM?W@;5>A>1H|HvJd~~8ojVphK7wpLm>;9t2tc)%^8gj2MpyuO+Cx_9(v`<0o-YK?s zpd9PlSXK_zzgN52rmK10qsi@{sYkw)CVKhE_SGqE7W~$nz1tXXn+EU&o0+#_g>vc) zdy|gH269EFhCVY{Z3fpL3d`j2d&{`Ka1DqyQ+{W7#-u!AV4oJQ+3_8Qnt#j^XjO;T zXeaqB{98Gy+HF9$pFufsLVYrgTB#9`hckzYixS*HmfxFmND6gal=yv%f)4#iHvO;A=(6{v0 zkiIs(ak^NJ=uF7cuj5Aca~H`h;z3{^`BX>K`0dX_csA8fhsK`9UUS>y~B{yT%)YK7QM0o(HDB$}0t7H#%eZOdX*YWGvHLl7oaB-P&RvsPGZl6N!f1zOst zf|h@WF%&M0Z(qL6@YzJ9hAm-l#pU#osIaB|6?2c!d}+a$9+j11XbU7oF6UXzHOGAA zzl%CjWBMW=HXrEVT=wddeXJy!X+h06?;@=4QzJl`$n# z-H_OSLBG=Bg)-#I7r{riAE9gPlb;k^Sk<5lkuClI7uc>!r~#gkB@wo)n*T}--E}F+ z=6>am_1ZwI@Ku02-NwGWQj8k$*t7OESm?=2J;Z3nfjB#wSy@?GAm!__Epoug+=BD@ zH*Cz(k{tTI6U~&ZwvP1pLf*J!PMKjQp4N>VUqj6yqJHm6v*`Ton{O~=k>f8amx`n& z7DtEiEx{^eX>&MKD4qU3#uWJ+w;3gJd)|aTIlhpud?vAc?W)f zTAGzq5>@L&dD7KT$nIw?8@edf9^F)b#>wM=TP{Fe!9cGWY6tkjI>@;&bhy^>h^uBV zu&jLg=x<>&zxGn#g05W6+zDHmu!M0+3!E7MJVxF>|l62a}Yn_*y>~M+96LHNrgP)Lw^|a&;4XuZ8HdGMKcl>g4{30C^ zmzV-Lf;XpNBZ#Mkc1lZyyWfCE^C~p#i5VL1ML!!ge7ZC^Hqo6CepC#796(~skv+&+ zf|Igk%{{eKvf~hEYv~`}W{$}oscDWjq+}t&I~tt)15=C?{jvsuBi+M15}?x)xSG3I zeg>*6{7ViqFt_gIu~Ebhiu~nKZg6}XbR2yf0jF_Ei91sf69?=tELJkGfgtYbjO~e< zdGt9u^!=rDx7)am6r`fF134lIKm0bR&it&`u(~BybZQEhY#w-1pb1?y^2xEqIE7rG zSlr;qE2S5(MSReJZMkxX)*!q_*GHIq`6Bbf%9g!a9xGYwki8V=$(kgX&-zo40%t^I z<;`3>d4lOXwBZ*k>6W2;5aL7h*D9}_so3R{&VVH24>P@}QKSXY=O~T@oc(RT^ADs9 z!Hnt8iKYy-d{PSg#raTEX43lSmriMe;kW+GsB!a*V%Qj__p0{OY4`0J^Ybnrg4X(v z`}V+JKZggubXtD(8Q*{Q@jcINa?AmzO)f7b1~=d7#j>_n=x&eJ;ktqg2?s$lG-C9} z3C3eTL`SP=$HnT)7IH-?6LHi&;gF@a^aI#^8&UvPKa!5+#bHwQ+T=zPB0&8`Jql!% z(@KlIR7+3Z03zy3!!L&*3LLiY^~&x-ynxiaXESnlN_+Fo#VyDv^%}&MTgP>X#!g0xZHW4GTnI9c|6EBVfGD{8+%I=r5t&4v_P& z)g)li9GO{*rvU3K#1V{KLcG07=-Hr@cpeA}pEmA6xgqNVG)bISU4M=DOFkHK09QmT zRv;#LnJ`Uxv7TIUAAuHWhW#$lzY^mj4EI$?z*|YbT7q@qIhlXVKc4!;K8>($({@G4 zA5^$?l}(S{pNZcC+Na7mHGSKY6bZV$~~voL2(Oq3g7LQ z`EW71xaMT5ZSkcF?Cmzzmy4KLhL0?{Nbb>cw~vld&-Wq+ppz@}IV;6}<={-zJjF&W zLh$m%ki{0UEEC{jTaK!1&wD?%;*r_@ZHOAJ6Je;VnDK{=l99Z)H?-cs&Ac>uWV%hZ z1)--{Fg-rAHov&e1@l$A^SNuc5k@yObCcfqM8Fx?bJjh;z+M%$ma+P);zYeb1+4~z zsK6EQU)>1j8>Xh8M#kPGeew!ra`Gjby{;@l>O%utf|YWdY2kdNU!OjALxd1u9X<%& z&G_JJilYPd4hM(|zWrD819YIqw)5n)rf?F`^={eybRz`S{ZztH2paAVCCkvXQDOx#-1_JO_rkr!%u7Vo9TXZ$!mXn0M^-ctf#$j*)cY#P{c}s4eO@FsL~P1 z;AS;iKR>Z+_*d@@(>19Ne8p4z4#Izhp1CfAtV&(0U;CW9JaUl#68kha{hv`mWfT3v zM5Kzt=1X8iMZ*zBok$93(1x8<76c&Gw=V%bhXb6Vje-fig$GkhB=SGdac$+=Y}@O7 zMF{(O<_KdZ){~j*EPMs}sdnp^%398=h*?w)!$UGP(2&{!g&DqMaol)WmxNs=^N?)a z@-*?-+}-X%(Of^z*EGeCkLs0Ju?o$ASYxEK!h14i=M>%m0T_gf0VqafTPXul+nOebLrJPC#6ZMH2^H-Ws=Y0&N44CO37C^a0mb?4!CNS~h2d z1(vcefa@#&194Qgp%WrrZechK{HZWLJw{MD7-xVe!#82G_Z%86(m?2$cQjB^omqBu zaL?91hw9pZDdcy(8(&xe_7YU=|DV4-BDXXxqM>|ESrG&&Lkv?%)xubWV9 zK|aiT^yhZ((g&V~If8E;gGz({1Ce~TGHw8>f-&DEk7$w8Cp;tcw`6&pwYZ^d9OECJR{^3QBilZD3RpX=yvV^O-iY*9GC|B@Um=q2zt;sRz>GK8JndDIEYr{8g&_CJ*) zfy~;Lec{w98{S$#Jq;*3l3!|*I_NPEB|%%rJ<(!UZ1)zgDnxK;4@uK>5PfHv=T&YF z668n+K8^!|^jl*hVR14~GiO%hNPVKdxrN@YHP~B0M1q#vb-+LQCw~7dKC0ktyHI-U zfo`bbN8^8&qZ~E68ff$!PHlheZEnvN3c5Ln#!oU{r~8WZg8y*_O1PY$1z`I?Ho*NW z^B<^oz-g{+GQhHj+b`0ya}W5&XLY#gV=| zcMwgaXFt!qvr)KHK{Tye9)z|p9$NPxJga#j zCcjwT-f{rm-N`n4p2oh^K#n{K>F2g`lrey&JI9s92|}}4aV@*?)vNeG1Dj&u2_fVI zXR%fAtKpD%SLQ@F0j$AuscT`AUpT|4nSGK!xz~Wn^?s@&HE47sa#oLl7@$9G#LC`>|#ce&hsWQ*25iRL)fn_gZf8lq!T@uxBOm z;{`P*@|_P`LfA)GLwHrPB@X#UtDYrpPB0axztd!)L0dRDEt9ZoESY1PD}cT0~pO#yNk+LXKCz)5K1?BK-2cdRp>g z(7$>{{`wwrvQPcL1hW6V(!8+;#TrBb8KB-Cl))KMN+h5NrcTLF2Gm?gB*)qiya)ST zq97ggBbxDpah|COD`$NfLHnLeWp}EVeGNRZxN(Fg@*i$_nN~H}w?3nD#Cd97wZ!5X z=04Hv@v(Ay41?^P%t94R%9$UQ;E6-?{K!-6x<-kz!^yTBCdQ;mk7LvIIhrDQR*}Jy zJ?Amg%`aP3xlzoJ7IAEvW?EzMU7*%UGG=6N$Bf6*)~=eLHq6sI%wk2!xl;btEk<-u zx3D*?h#lM%PM}fCe(o(SdNS;PVLnY2ltZ~{6O4)*Jt6)4_irR7W}5lb;WrU(CId=$ zuQb01(P3h2(-){dEzBYOy}d-PDGGr>@SM)xPyaOI>vG038`~U=9i-TS_C%c@agA#C z4N2n~4Y^;YXVS4AC$4#H}cThu2Vq^zx zN&!cChuQ(!;Goz)Xq(;)3rP7SIb!5)H>0mL?2dm=;{NPZ^tzNCjhseHIgm;0k(H8P z6;GJN7<7GaY{`iqGxW7VM`oBcNA(on>J7R({+a1*-{V+@UL2E+;AvP_o%CRn>UX2y zJ70 zb}g#db$nl!wzK_im5D!0?vJ64t;`SRwN>_b$t*<(Ln4bDPP=uR=RfwO&l<8``SWP} zNwj3w^2PxLKixdrbg}>ODxc^+q~)|!!F3Y1X`=e*S0ikal+A;QeF6Iy(ZS+!c!1TK zY154ALQ>f0Q7027c{26n<~1wrBGSd_JGGBCtdwIi7Qg2)^VBk#jP*nT2lEUOsm4Yz z6XiqiQ-Mq!kBl?+>8f~|;9b+`%55>nr-Z0#_Yd5v-!`LhaCImo^PMIimf8yB@(j?M z2KVYPPi2mX`3MeuQv5Eyt-+{@3FGwbZSL)MwB9C^s#?=yp+DHq)s>K7P|jDaN(KHK z=7P@gd`Ngng`Pc#bzK65j(z{w1@fQS{OhKXrc9a=5uMz5tR62vc8Z2=aL)J0em+gh z$4@48B-eCua#0Jb3{xP(t91v=>>F|jR#NdQPLMUZ)ML1rvit;*?NYXQ_$;Y&orOC7 z7%znwI*{lx^v;G7x1V18=s?Y4mLT|H@oC)ft^Ho zw_D;;<&SI_$Dkux|BCPR>AQ4)?{beM-kT~Xq3rrAJKpPLa?-;?mbZ<>=hn zMQ`I9CTR$fhrQ@GKp$T%%-hX2VayNoRV~Rq%MiF6{$PDZ0>=$Fva#Ug``*mTS@y;! z)l%r(*c0jhmiU2 zwKfBp5VEMTaB?+(`J?dfpEdCy7TNm?D~Rp#h0+EiV5)mv3su`%qrg|bXQF*{%x>`` zC?)pw79Rg`wD84B`o8jOe-iB;73sFTOhRN~IJaEI>uwXohI;-r*FYti2~^Euf1CUS zIA$-na=>ogiU{|&31f@L!Ea>HU{7afZXy_kp)I9|mU|v7WMN^^KDCC;8XBG9#j-@bF#9xvROIfC$GR+%3=L~b z8|UN62NV%ST5Yk;*n5;tAzSm`~HB*VnZy~;Qe3Df4?|iL_ICf$lKd{5==z|mVV{KHo z?LN>NgIuup^bk=hMb_#^S*BT;BdTMJ9tynUf+dlD$DPyEScMx|s?;Xid==~9FW9oH zVxsi#gP@dq;97idpVRA7i_brPP@;>SoRufFPzmc4?}2qnPrn$Osx2iq3*X=C>+!$A zBveIf6cLJq-ujdtU}BGGiQZIt)a~`ei*5ZHr@Zr0LnghUKuhDVUbXXi;=t>OcVl}` zjHBPtuySVo?6FB}9_1B+!}9i{{Y?V_X73i7&K?}Nl zM~5-$gf03rZVp?VQcaVQph2wAzO6RgV7u%ctoP}&2ahgC8Cz<`7Quvh{~oJupAliI zj>}XIxXzqC>+e@N#CUO`{K?`nV+^yTU4;hH$L_gifT5(b<6Wr*x;Nm|OPly!T!54) zILT0RUs5ifEI1cGD%YI)w3!p5oWUQ+lzOF0t;yfWQMPS={201!h)!9_Q5C(CuS>0F z^~U)#kQ;utH6Pn|Swoegko=?^_xg2r+P|9!<&99+ap!Nsi{^3?_2E9L-{*=mC^sUs zCj!O8hlSqL^$oq+^F6Zbq?0DaS%Q3Pq644pP_Bn3mZbHX;5FYrNDF3;(5aKH(lr9k zS%P)nKlqVZT7l@P?}?Xv$meT`feg&|mHXi0_x7(kD31&C4fsokH_>wRlS0^(GL+QF zy+9*=U*sngiOFAizqktZG2^TjwAI4`F@#T4)AeF1Iftk#Yr*!m*}+8ly8=~L5hB;S zwVr3V$MM9S>n^+18=801ie!Yr3r|uvc56T0IN55|-R>bDT^oC|=Sg+cGn9W-{;tJL zF|W|cBREB8+BvPU3Uv6vu}e=3I{xG0@|N%iVLmYysaoBu_V_?%%cd+wzvBotrq?5X zVpPGNAR%6?7&RRzO@+AA4G;vdl;jowA2CSIiO>RIwQ@a_9{;UglrM#652{LO=lNG$ zd(Sx9CF{HR3|6Y+lmNf7MWD&%}+X7KIfxC z%4y@T$KEC9dix*AnAW!`7s|)TqT8z9hp^AflN(w6;hphS4w#kvV4M4vDIHr=(J#p^ zv2I;% zIc0@sa(A{l&4nfhL1pgw`|UodxfP216Chu$g3(;s_p}J5F8dfF`DZ@kW<%L8hOFJ# zCkL2=H{0x}?S3q6lGG;I{ksp#a&$7Jgh@77gw*6nUF&8i@=iwt%}9w(JIy$G+hLT_ z^`alm=f`Yw8r&(`WZ=G+!EM$3lyV+tqh-M1ceH45tH%n8@*br&xWCHRoy^_Q`73n# z(yoE(d;k2I(r8fC`ZHxw8G_@l*z=(t;1q1Jk$}fg_7(O>v{w5?!o4X}+?fV6jRarO zA%RK4DNJ;?hThLN-rG3oYT&v~z*B3VHWT&0I=#_K5Zy?Jd0)0|vpR7N^L#PUAmdw` zCyB*~UeF(OdHWl*^x}Nc#YXktuoE(0k3fWOxv})Q+Lq|$-b@P=n17edvZ+=7ff#2* z8$Lauq;fWp(*=K@jP-Cvt%8R`#{Z8@&?}2hx4K6aOGZQ2()dOqMnljB?i*S?JQY&* zvwjNW%&shRyyN~hmYkb5N<%cdVmAL-0sj>d+RQ=XrFZypR@8=ZPoD2!yH6pO+-Ny5 z@>=;Bn+^@=2r1aQ;;33G4-3xV`*Iz(>DS7Ic>IK5%hM0~55zOzddJl<85yBXrvCTu zB|}R!q{zL8?;p;JjQAr3Qi>EAT9)>l-9TFY-Jq!7_CCC(e5O#o-vZ% zA8Ee){4#a#hxZHq%%CaG_!NlMAj6#%cwg&NH`+W<}Suaa%Pre znVe}ULDWxw`J359RLRZj~$-_>ZP<9R;-NQ%q9dBR4?SISg zf?CIHqDFgS-aRHjgeP)xT2|+&&=GQp=(K+8ab6|W;^^7aRjKSxwGk`OA1FxmSO#BR z<q0+mM+pnzhx1ZeBd~etmK)Yq{m{`jfN;>sh7adkM^!39H9aZ`|9MJtX>qGv18J312 z3GL&p%@0Q8&UBtXhO6I<0tIwP9h6wG+q-b0tkU!2ynwB_f7cC}4pOC1eGPEV^wDnG zvV^vO2KIlTmwQ+Rj$gwT2i)u#P4X{3md1SbZd2p6tW3EJlx`%&DxAfVMbVVSNkq(9z`g&K+#A!vdaHP z3aE@N3~!qm?vM|sA+dLd?9-nemP7P`c-=c2wc!Wmrd=HV@Ff#t!225ihA1#%1e5Zw z{{I?u4^h6zunASi4s?kO{(+n2RHx9c0I4Z=`%Y|Ag`hH^De%hZv$ZGvYn3b2anHY7@w$J!Nd<5xg0+f&%9%QP zof|7f4^N+g)LHJiZc+XMCiEehlNymt^<{}*+!6Q@2*4~Y$!E_v-uaL=t^ZT^)KjqNage&qO&rWR zNTV{JtJeb%(2W9gU{*Nt5n4w%M?>w6Spj=;osC1BbYy*^)7*U?86d`RUybtWrEnby zA@a&EfQ8@J%4_#JxvIT+t2rPIIH&7BZUxcYlWSdyEJY`^05Fx*JAiQX`d*T0Br=-N z38WA!AYOFHI6EY9x=(0l4$NK|xih#I&i^7|E!1>qsqGDo%Q>v*kwMf#IrOHc;76Ak zXB`hqZf6|~&IjpgwgFp100eBv)xREErJNR6uK*8EV0knQn?{);div)~z20QmjYx9C z7^GlZW_0DqCfHo5ri&jd$nJ43_^QP?Dg49_8qgh_JXK>}39OJex}MT2q1D-B&w|k~ ze3*dTO%tH2Ee1ii-<5IbGXQkqh5vQKYeR*%o+6-l)#dgQJ9(+6ZkQd9xyYQh9wHw* z!9=t%+$p|Gq591&l-4cX$>w@SfXr~1WLM?DO&&rq;Bl;{6Ci^sq{Bb_dHUT~OTIDK z+clyFRe6f7m4WiK`3}9@+DP&z?%$C7V~4GB?LvZQea z9DXL-jjV+#=ZafddCJ@asOblOh&96cW7wOU>r+Wzh7;LdWE_;^(_wl&H&P7Lau4~t zTsV)?^mxT*VFg+n!~YL7_uES%9BO)6=%0N~{2oMwEEQ>`U$dzCErr4!;jK_morXOv zfu}cT!@4LLTOxHmpkeb==-+cjX9K@&1mv_{sqWJp{@8armT&tCO}2e+ei?Fp11U!~ zE9`0g7KcSO)6RKH2tb3u%0WEQd$x9A(gsTdju4yEmkLnD^L`xh2lkbMbc9*qu8D+# zFWM7r5j3KI9HPRq-`X=1eh*;vt}#esX!Ad%a-{4GhOf_M@i;*Gw_bp#XRaBZvRIHc zsSbVR&Zw=y%_1wn)!HWW4ldK$!47W^lx+}80GOych;<8(n`6Y7#}N!o&Q#{OgrOze zZOD{7hlV!12QVk&7Y;#;v2Bon?0<8|Q#3~z&gYF~oHmzk-yV+ar}%BC0T{Iz0H;Dt zfBU$-w(+W_1yVHoZX5gR9MF3Y3?sKQUi{@4KI1BnTr>UUA_}H9*SDiik!&%nug!VG z`;nk~35XnptcE+)hn6GC;3$W2$%1nk1*-?(AL;oz=|G$6zq9IZ0q{8)g&n9i3gdvz z5Vk>Jbv|VsJv|||r~$X|-~3Gd$Dzg3qg0hd(d(cW%r4Au&nghQ&c)nk9^{m_FvSYY z)u>iGRFkRT<4&P2z0W;RhqKS8lykbaMy}iMlwo_sR!;gL!;E=ydazajCX#rD&2;CM zK?v|T`j%O@UhpRW5xvvi?V8Miid3_e|3C-fNHdAS3`PzHc00|h|Ir*Wt4=Mre$gKj z{axPu^F&OR!mGuL`5%aVs(O4xpiN12)NEV8a?bb}Z$MQ;$Pus4%)6UmQK`b#NUC?uAIT*M|AY+il>4HjTpdi` zv_zYysj5b7LuyS?&t{I<`YoPg*-oUU;C zjWi1z>4?H4AhpR%dMRUB<%_i7B7PN#o5Ej6Uzq>{Cr4?ZexqP88poNn7#6@LHp(#?iCrFEx8)347L9SkB=CgPw*9OJ+=SNrvr^Oa9=9recmN&F%TC$A6`9?AxmV!RNSVP)F6uk=WWvCaL-yAXrfXFRB zy*SZQTT2{DONbS3rvkzYY3iqw3q_;u;zTKDM#JZG3bFSVE0`BjWPdRPo>(=ZeBm(j zA{&UFWl%cT7CL$*omj)n8j*s9WQuw}1~EJasP;~T+9lZcY%kF=Fp0XZcXJ^wS?5i)>?PyuenmN=HMW0) z{U>IrV;G&WKz5nwi6>U0K`bOxlJ36hDOfqAQ_JTw^YY){HtpF8Ob4yB8lRg%qZt`b z%Tfw~O-0+~>?Q@m?c8U2%`%7mP*%<%ocOFT*_tgNd9fph$A>cse#F8eSZ5j)(J2P@ zvdCT9-7Pi%@;8k}o0=u9=2z7th+C>bsNt|A$O{Mqihi~~mG~pjV!{YHnONgGQtCET zN^*aXc6>Z-Jz!dvK+L}?5cO^T5#nJn<2v;Y9z>k?kPjJ26uPg(Fk+QJ(<+=z3IhDJ`+Wmzktl zS~zXWi8sGb^yO}XM4Ur`!8m*U@0c+ORPU96Ewj9p5TQ1f4IwJ5?Rd7=oE#;EP@NY- z?_^@Mu^o{1(pUO*N~l&``x5)Aq4McaB;)6b(PRM!qg`g>*eDs2#~$249F1Eu8l_bn zKyR*pOIL9Y8>t!+9rXU-u|TRp6Uq3*>%hq?gdZXT%}rcZEcofdxLvPuKqu~_Kw<$t zxo`a|Mw`mMm{o518l37^094xHD{b*y$Z5{V!(U7ph5j5`0V2Hq1L427d?MXv!`H*X znb$%CvOeRS1FU!P#yM+>FJiGgdWS#YoyoxiQGu&#P#W(Q^80LIgK-vG_paT3g8sIQ zO(!*jTDEnfL=%5X`hTav_lquKKVVzBdTNqi5(_TcT@BS}jdLH1AXw1N#egK;UtWwK z8y62~7^L3x?H~t`p->i`FxH<4MPU+WtKDZSkeOHo6N)C-EKqM(B zRdJIfhBNsd_-I<*(8pqF%2DL7`igCr}V@=K^ z-Ssou%LI_b;|pkZ>nFvO1?3}3cHH+@68h(ss<=N76=G-n(xk3orQg6AV?!Wc%H;UV zX)bc%21nKS)P#WnN zpmcY4cXvx8q0%8B-7!*WWOQwGiZD_~4ER3h_w0}Tv)6XccFsO=-`DlNH2orase{c(eSl`%wkj-}s!yp`tz%vEGH;!i4rZ`+2YM0x4mWt%w&yPw;Q z?Hq7~Ndq>X-NI^NcHPd}sopjCEyGk#oZnR9*)nAUw-*4z%IFCu#8_w@NZZZ7 zP~SE&H5t=cVzd$*K;8dWVWKLgZ}5XZt3D?-Q-ao}J@m5dB_l?J15dVei<+eZZxy?- zMy`}&^(kPYlyNZyB&ah!vqS}-@`fg{8-354K1DzyU=1Fj61S~L2}kG8??ZAEG9}Jw zgs*>{FRCqwADoBG0rxw%3s2qm@Z}-L1|{k_@otR^whjWDK?Uj2(t*Ua##v+9L=u%+ z<0MS)(a_iye$$@$QYY*}51FzCflLCBgTMHMIJz(?D6b_Cqc>Y!dSq_B-abk>C9aDF z1bGJpGE>?{DfSQZ4ta>sJh*>gZTX3A1$MzM#ywTvqricoQ*H#O7e71U*cemjAKr^$ zyM!oZ^j;{_NTwN~hcvWb%l6=8(5tc*J=17`<(=)rWZO6yNzxLjAmQ9seJhc}nOIr* zHw0PdlD;`Asum~u!Ug}K>@5iD94L4ue~~3CVkv1l0c~z5u&U!Jt7TO|if&SL_MgV)>609=i2%DRojB{ zs}MtJ##vz03b}+VBMr_pAQ#r)z9^~i_cgx9EiQjmx-5fmD&UhPEv01anYg|!@09hs z>yrj9S5NI(gu5>?@UsEwXi7Zx)|;-aJrY(IM%`?5k>lAL!;(;$+uXCyUnC`$dQ)YN z#xhHfv(;Doq-Voh&-gc$LZ#;t%(yUFa%r$PaGRt$yM-ojaXhHOL^*+@r|zQmv9~Ksl3B zRNIVBoi^YXW&Fa+17evHxK8UX1}O}+Fas}a_Cgn*RUpcNZknvh=;C@*Ezpq=6$5Jw zp8)-M{JyTc+bx1YZncfVHhLDWQ-6lxrmmKF!zuPo{Co1}1`ANql}4;@ph_ynKUDM#0b-|y!3%8SZb_F^1^Xc;h&|CLflMwA?kO*ovDR}7 zgidI!Dog_6SK@Dts45JM(e_2_X6hi6wB3`cI~we~Xf6O7oFEm}*Y;x^W`l7)@Bn)d z!(S2eNIK|KVu*VaA4giWWczzm^l3)JmVx1S`6V5m<;6kv@qAUrb*PERTWA9mtA-IR0I(!Nxt=muoQ5M(3dAsPP7Fver-? znvBAet2VzCc*M}{TJ#!hl^Jq8VGxIN$;|mxzUEkL0(-Ga>6eXx5YNP#xWpYq!ae<4 zB86o3>6X;DZQR9VQsuOi50Y$I;M^9F|tFjAEuAY{j8wK!t%`2 zGqyfMWC}Xh5iv|*Ok~kUmwx)bqfBMXNp;l~@R=Skj_?&~w|#!ExI^yV3qMic{O~S* zO1L_Z^}~Jiq}UDg+n*zixg_Dv7Rt58$HzAsN_>s+Y2`y}FLZ6Yz>!z-{rxFFl)4f) z+%ml?JWa5j13r}t*rb`81@)|j@qnd&x2e1P+yzT1l)dBtjhJ{;*`OVu`1lqN6dD-1 zTB^9Z!C$1Nu?qQP(_uyggzwWk4=hM32Ww|e+-u2U(;7C&anz6>mN;mGL$%ji!A{8@ zpYkAYVlB%fMn3rUf8HJ!>$ZwwbeKTjwJ=(snXt}NwD*x9>|grVw;dn9WiEsq7rRYK zpM|3eWU(^Mr77^`q&mJFQAf+|Q^|UJHW9S_#JNv4Tcai-#;GAk|K}GXp4zBD?xmBi zjnRwJ`zug@oi+~X$~D61aO~~KzJ?Se_~@$#;Na_~{ziFin~f2(UQfzExN{(H$+1t;B9E}xT6AVpb#$Bj?3j=AeOilG@q9Y zjye-zwK|?E-{Vta4NY2jPjGj2`CTb|Q-xa~4pRNIwr3xEb|u~yCa6eG!dI2s>64Zz z%>w9IHq@r21bgkHuBNTN z|2kpySkvE#R=RjE_PNLlG=%Q`fEU5y_NPsSng>047adUsLf@dW>r}R1H&0|~eCH~l zUcReu6fMA%f$Dwybkf6~6>mXBNCJ)YzU{6jLw>8e)PH10Zo za_s{7lm&Tyf&d59yLp28l~-iH4I(Y~Ae*J*rz)yA_nDkjh)$R2HB_0zI-LKR0T;!f z{?!_2S8F(hAb$VYFiMu0r)H8xa8f2WqN`lamayj)DazF{UI9MOqsm1n2^txhr@Z`qTiJ2t#q2n__RXIetZE_n3Ku{sY z=^#2&9?2TZ47}AJg;*O!5@j%17sjXzx>$Jbg4ogpaKus4hVR0hbS>UrP27?U`IIU| z`Mdm^McMYv68XQ>4GOQ^*4>ImoE3>`$PsV5btH&eG&=vj^Lh z1#nlV4V~IZN)HF+KBR`96w2hg$vPpsWEwCQS!MA6o!Vt7ekJ&s_C;L=)xS~9Zwb!G zp46iMQ3B1A|4AD+;Mg*6GOy5#?kx^@KX=%Qr-(Qt zd?Cj!k0(eqJ5P5>tq~N19^3deUyB`N!KBB)%GNmF&#?qXjXad1Q}_hi+5cu@7F@ty zt$lvr-+48rw1r<55%psAp`lhjTcFUPCo}%rd=g zycl3d3h8Q|W_9L-3ezGlMJw2PNLv30R?BNp7E5)1|0?c2r@|Yfq}z$hGV5Nm`5g-X zViXsCU8y8^*p+ZVu=6L)GE(}QvI^&F zpkipg`+A1xVUIjlN1RGqrby3@fvKo>e^*29mA5->|3NmcDASnfBDqSIb@E|x!~pI6 zJ#9+45fn0Za4VbD%ZUkMz{7S{E>{OJC*7*4vUwL53HDPPnb_m7_vL52I|#jkr@&v2Gok zX1u`44upl=V;oB^>7}InPcHk%y(%0vqF2ca*7o9 zn;JPGrCkY>g%jfTR5ZcSdS820bIbj4unJLd7=S38B7|RRF65Ccg*ALg!bF&nsGBh( z*YDMEBgKX+$`JP}RF{08jGr=l`1TpNtJ}ueHFlU)5^`%E_IB_+`X^>;q@msLjUUyZ@_UX2vz=l`0htpiy zxG#D~Z`&Nl*x+qc^;fz($g--1>~EmO^vVKW6Ct-+rA~f9w=Y!-DNCiE?CnqAWy|`e zXQf6MYU}2BY>|r$IlBWZtXs?(Ln(}G0%+icq5aF3!oT%Yp&ej9ljaey8k$S8|sJj{dWf3o}qJ75=(O$x%Cr(6-uWI@z}~C2l6FIPM-Vv-LnI z3!H}LWu!AKpGoD0F%AIZx@8AgdEH9cep{T1lBx z6-TPsbYC}xSaX8z>tzh2Mpdlj=H2U>{Ph3)B4Ip;cx6c})PpVS7|gt{ldEV+LT^cT zavA|U+iO)}F7KvwFIf#4dnGdYGVOIBbMCOJfP4`I7Hn7>u?f~#3*~?^Ai8%hY^?8x zq}+IRLObv!(_GeU2Yf9*JVB7|HhHeb9EwgjPX9;-!jG%M9qnN+W^jcjfTEBpM$XkY z-Hwi&&0q1f&M2L~-Z}GZL1WvHmL%=L^R?|V*wQ7Y^9P9X6)oJ)3tHU}*<1gIQQv@G zQ?;^lK6_S2X0wBE>i!ZBbgt|@5crdAwf2GE_OTvZ)9DN)O~+_XG(Lv>`QJ3`dzeX* zlDRl7$tde)-TM5L%08pS^%{To^-(*LryVTJk3uRB+0Qn_`+(o+5h`VN>bka{S{Nr3 zqY<(aR@D9dYT8AcZ;qtNLO3jBX$G$1FzvzG4aVg!6@pZ=%>G)agWJam#dQ^#kpHgo z3EWQcAa+ACeqaaxM%@Kv`H0-E7`8`jk8Y3U83welxE)NO()bP6wji2X=jshbS6UA! z94-`W-4l*o-Zga=eFb2_WzNi~l@tZuh3@@|K!_)90`pUy6VBuI*!zr?K9&DrtHCsF z_53FMOYNUt;FAg2ri(xE>^601EO){O-I^rTR;k(Cr}i<@%lkaW0=xQB{B7{WJi_V# z-)3t@$N6wC!etD9YaxM(Z3Glaxyn)u_c!MZZ z#wlX5LIhLF-)+|X@>V^ z?3#n4pjkxL*;!8D9OAG|D3xG?Y23We!aua6V{0sBi#MPnH4~dUaqk5{T>QIK;<`1t zu}0Aa2Wiy~TfenMUnK+?KQ$sH)R__epQ!_RyuRAb5^BK0+d~C0+v_ED+mL@J+zm-C zuH7z-$--NZ0xY4?(16;SKX$5_1P?)VA~IbvcF<$(K_&Z1jEMqzBZ=BXq!WT~InQGu z5rnSSe`Y^;*OKxh=YsG|KX+0+;B!K~<6V##z&@{G2qv~GJ_DIpJ?_K}-<_5LcGE4g z^>u6zKV zNxAHjV-?TSj;hIzEM~(ikm_r_ilW!O+$XXNgNgr|*mB@7*lUD$yYUNAKoqd@&~jL$ zAI||D>=fc5M#TM5g%}vlUTA(m%)(uvDkue9O2grvHHEe^Uz!`9=fmq#bh+TJ-`q`F z9U?DGe4iRa&85n|JX^;Pp&8ykyG(j|K7Ds>@#b)~pu45J*=LZT9oPtczpA78%4JL0 zyj34~mr;KmG;p(8G(21?N9JpbOh23Udt>tr6ZI`qwJX*6%$=3Z>Q3oJQ}oS%suMc7 z&l55Yiq9*d>R!~MaGutB0lD14ejZ|vfDK<<1H>7v53A>exi_r8?GFfq6T2hf9|FQN+6|lq)zuF$@iJMw zh&8!2_#yBsju^;a+P^^4zJp$43K0)e%nPiL_LjyzQ7;~Y8`I!B`gwVI)7Z*zyU5r* zRa|DRcMV9(#2}wPu_J7um^~zstrrS{V+60CYAxo@B37C)HrLEb38MhR$UpM0wV$r# zY6yPDsEl>LA)?Fx;5w?TH|Ag9liMLYu!%Na^+X4hG!CiNPsUHh$Pd9b{BWem;Zo|3 z{K4}_!!CgTU%MQ2_H}5)%NxnJr3p(Sf*vqPJD)bSX1Lk38>`rxdAzAqV2`|WPM-yQtB|8L za6sso=5?PBn#^HsCz1})&`3wU#-xxz+C2;YX%aAKJ+M5pH%~9@ylwgPa_T8M)SBnS zXn*K*|4E9xC=$T}_a87bO%@$mXbb`1(AD5KXT&g?71T1L$A8!ikMYhkw?2qgNzpHF zFj5DngmVCgqpETE_EURNd%JdOgxe_~Imqsayf=SWO~jIwLt_9K|!`o`pE3|1Ax0-FHkx7F*T1$3NUG^$!s=t{_J}C zzK#7oZ~Iy8<2KmRb(9rAiPWD5uAKqDOw32yTYI>3d;Kb?nuV1M$e(pB>0Mrwd@Fho zN6)AXsG%l}^GgCemLKICI@bKTvT?*2uJvF~Ye>CjV}2p!nRwth2MwmgU`j@|(WOb| zgKRR}^Gm~=HNYN9Z6qsd$TrTQM!@ixn*n18ki@C_5fFD({N>TuBDU#(En^Z!uR zNY+}??3SX6=7k~;n{wavot3Q(ENuta#E??qP*K(!Wll0`r_F?CAjlAgXQSgSBCFv| zwwN=UBOyQEs;x1QSop4&*bPjZs+m4zxPAZSceE)tbldduaCY6WO$b5!&9T5XBF$L-TY6V9VVuf->XJNUN3BxoeefqTqm)| zwpv+7SLHEko|u})o@KO%cG^f8F z|3!9)7P)8&d`tf|k=;1+uP#02<9?;+r@IZdh)63N!Kq#Naaq`v`hP zio7bLV>Dq55{O9s`txikvsl50^}K5?CcU?K%9_tJL^9Uz3cH-(nzp7pg*&E=IY5go zFN0xywXN#kR~mQL)YpFC&_}6x{{Eyh9;}5tlF5P5Qp?C(3K@q`$!-iI7$E-=GoCTK(9wvS!u(<+o9=w1aK7eq~CI;}6z0^-E8OC!Sf% zoJp#`9v*roX+V}`gSI6NKTn>CS|5zleWI5-W44qQ`wo5jf{@Zt6>E(Sd&i_@`fTB< zHolfVZ8wkc;(%nI^DTf<>v#ium$!z?Yurv?^oPN%Wk|8t*N5m+w+c-jy1KBTXcusRoIFq~KCD z>?GyEKpJAOlo0;WD7i+{ppn8tWtp1qM88t8=RK-!GDkx^S807!+S&+rf-tb+-wj>`Zr9J9P5qvC0N5rfeFR6mR z-Bo{gmWHyK-x#NDYXiK}IJ7Nxsrmu08p*tHbZDP6)<71Nj`Ez)z~T7wrSjH3flz=p z;BY%#CE@ngoA4G`|IUr#KDzg{x6DD!1RAADf*$6Iv--ZV~4bSPjsPa zySOAm{0~VR5wXSM05xh4%+2sb0H$w@ zV;QN2p34Wmq|EdEfR0l~*J;#ygh%u{uYpOq=p4B+RUst9e7x`E*D#k3ky zL{R#%$v91q_98Nad%nHJxOEj&kGgIg*{|E~R-QpfoG4ZPO>X~D%e{euH+k=MT`3I# zao|8ZSzCQ6!6bE~@}2fmZ6w0IZi-*Hj#R=n{Aufti^In!nALuf!s6^pn)U>-d2;_+ z81{6@g*NFAt0kK>kmOy!_a!R zT=#rQ=dxN<D;n@O_ zi9KuHf1Sk+xa;dswF_HN&bf}$ahWeDxyue{J-c#)u%UFL@zoBS9~yAZCw`Ko?hQ&j zbregMID6X1>oI+9kEijqSU^@8CqK{GI=Eq`=A2lDBZMne-D%_33#w`S?hG3Gyv){H z#fQxcNKz~`#@~#kvT01RxExF$)cY1Q}=-i!Ha%gH+~u`7Inj%!xAn$+Cax7y1(a@dJQF8RobSd%#h3+9 zB;7we^E>7A8lu?o5Y7ZWZFDifIg%&w?#B*}R|Z^=`0zh7Yhk1yacq5FX(SNm++HTHa~K5Phq2{ke{u-cETZyQ4W*LIySx)!8+P#dxHWb zv%y=w{N3JSX{7+Ba-KW+KXY-K>a$f zEjl%;N9kjn&+h|v~bsG`$Fkk?v?U>c#xa!5b0 zJ>^KCjT>|91K(1Ou*tEVv4uME13g_6 z`a@*Yv?gX*##B*TT6V&1x@8&VKJnIXVlzH+Ua8ZH^dHH({T=@a{5hUiyL)rm3Wh$` zqzewh)m3n_7g!j%?>3zGkGReut#}poLUy!S1Je3$pyiQd4%;m5J-6;EvNcmc6wtZs znE0rx={Q{*`>q081??7mV}{(3q2Ku`lX02y-LA1f zv$?N*p;_OP9=WRmPBH}5$livZHnR(%j!T9Ow18B-0bGM6$^_+_@2U*-LiS!LzQ(=4 z0lbhT_4rZGX!PAF->*N=07}Ly)4*Yhd6r}!m2XHbgWovIidLOPleAY$TJ|wKeLe3< zg$bKwW`!vXo_^UE8ESFR)7ny=q=<%mq;k}PJ)1eYSRAzUpz3SLN}=W)DyFaY=McyE z1krh)*S&Jp5<#b>4R<%_vRXWnN2l1xIvsf8X(~|KQ#y{W^prn44gR*uTBI=^A>s3G zIc%E7$&%!EMdXP>jt(h2ZfqwUk6NIR{;ViMrAn#VF#&%|`dHfdX)r`kIk^B68_*c` zZ?y}gjGL{qq+S!3yc2EgJ3~AZ%rmD~0@yuS(y1<9R*cSKEY)qmGx)T8?zT0;o$)fqxO@`^$V_klrU_X=*#j5ew;b(_%JJY z8shk0;}_Lf3Un@ZA32WOvU)54%p z4K}qNeT8Q(scMQ!f-JgwCXhqDQhynkRi8ATxR)1p+Q@5X&!((H?u!~KaqKeIrxu1l)%sQ) zR|gzqh=7*U;F9iquR~8Qj1ieJFoJScD!a>ytk1p+tXiBJ5@A!uTdZEVEB|MbQiiBd+ruqSnO#&L#Y<)(YV$Z=NT33Jw_g#? z9{*wTnri#+C>DFrBww3%jHV3niJ?KEq~LAr;o-wPW_PYaVC;y`kk6ZAeTrI!)E;~H z^o{$uMglhTWMz9w?8oQ!LPJbedNK%%_IVr6BQ#mE{Ipt*k_8B(ym~|BS7>)hEdP!x zp*M}0^JJf~Xb9aiv57u6*Xu^WL6H$1@*M6ouPP;SklNNsq!CbSYM^AA;Feih{Q2(; z32yS@kfAnYT6wwr0JOecDw%avZobhz>^FitgmID6L8$RXvP|+-F$ztUvC#IV&NRx@ZyTZm0xws|cBEWY(EN*3M=vp8tJ%m+YFZN;1fdIl zdEqEI=`oxuBOs1na?&AQNr5iTF&q1V>*Hm)V1f+}w(WWS>G}fMX1$#NB~L1;@2JD< zyG645I6L%J;l$ATZ7dGP)PvN>nkL5P&&z1vUNRi*pOUMt3B9p?Ul@fe-b4qlRB0`u zO*7Ga{}|L1GXQN^*@o3E>z2?3DFu73E0tS>+B?$hQx9*G->$aWFShNa$Pj&kiSPA+ z+d_|IX~KL|Pp`{A#y0iNeTSv)<$-(f{NhpNs9?ppq5h<`o3C`yl!0)(q^Xu>!yHPn zHR6f^=j1pWL1s)zH(3aAE~ONwsY#pozT2^TSDA2on<9Y++6(WJzh$PzGk5|vs@ek^ z502zz)U2*Fecy4k1c=Q-yJ`ly_;-iRZgP5_>fRk?izoSj;gjO`DOt4FOmjZLx~t)R zgK7>x)|ZoVjR+jWQunt%6koH%qekD}FZhCD%uQY%hh6%P!3_CeqOoAD#2SVU>c6}b zdUk^7jI>sdbwUA7XxVXh1CDe~SJSMSe;E0(3av8V{B?F_&Q|TPic!{BI`-@QEo;w| zk4cshNUj%685k#^QOuy*LGX%?)tO#)Lx2kV@2&pZ-r2+qwY&r6aK6 zJv5uQtkjCOX$a!Q{>Xy8TKzJp0_fyZ<-5PrENOb_q^>^JPrRI0F! zIM-a{zd!hP4?hjG8H*O}HKoXUz3E|n9`K9pw$dmvJs=1Pt)0LXs5n=JpziqI)NRTh z3G$GdV$(AeKbL=WvUi&OSbofLESs`k{8!LHVR-yOS9B##CjRrAgbn{u{LA@*6=j?8 z8^_br5R6}CpHQGGVzlrXy>U_yC~P-yn1P?m@Phh)rE%O#St&HUVQjL_K=Y%8^g#cz zfINj8m)IY{XXzHDT>a)L1xg69Wz!94gDOWznL$h3yXUD!`!o;(>#BxYR_b}_Jim*H zg3abMX1uuHWwF=fyIZ*`5h^-)XgD85=|Lea67Y$E7S8npWPXX=X;T?0V`0-+Y4IQE z6ipo#7Ii|r`_*z^CsP?W0}G%A?8{LYar`j0q?@!Q-kUz{@iGm;p_?ZzE_af@6AvGq zhfo}wdaD{(7FrK|ltUu6j|y6nIN2tb0%*K})STc|{rhaeJc|&5us-0T&KaSio3L-# zB#^TdFecIWj6;&86DVy^#La*uE@nFcs{vuIS=QBEh~5UQ4%CpaTI~H4qLc7o2R34f z%M-_Fo&`s82j_8V-A?p&iNVnKRe{JYbK0m4Ti->QD#=&L({vv_Br>IbzamN&jS+$d zkBk3(*}mGaXP=y_7Qfx-`*bp$HoG=?SDn}XH*S!E}KGHkB(*1T_ zXHGpd+DCEB8MXMqei6HaW`u>!vTdTf&VzNCrs7=@=0AgGjguUiG`fnClVQot*W^sK zOrDP|nMzyqr>#9}t0~}4Wi3kM-LqbaTR^2j(L#M~R?H39Wf)}k>nk9~v9KhD8n!JA>1{$|dN|0w zX`VjdP2|H9o0+iI8+Tv;A@Q5oT51PZFrsY@Cz*L`D3IZCUO?uk6c*kP`u4X!B2Mx9 z)iygaa<54-d|!HAQl=A0b#``a?B9htJn?V1snCZ&(I2v`R@8E;trw$PtSTCS5AVbLDT_&n}*=(wEbO$*(A&N5F<5VElR6 z;P&E`cTDq;*EokbP2_PC1-z-Naih1}+r#9ob=Ef(%6nlZTf{M(@OvxxO->qe9Ps8| zOGfswT_aq^--<{0*7g7w(Hto6VnW^YDp}v$?AyrP)n&jgoC-(Q~3|&d-FEj5XxRKd6x{h(iUluOPk@fNOfOc z&%4@$LO1rv3*{WRCDa@>^hE5qKk}hw#nN?P;U|^GgYHr2`13zf;9gMKh$jQR3J0$; ztbCh=J3{p`u$(DLl?ecEv%bkb+!rb`#+Hu~c{2_i?jteuqTO4i%=q@;H1eTN+Oqw^ z+5QtS&vHk%ygK1EM#q2%9%;mJXXDqq3%{YiY-zl)?IbD8 z?@|9s&J|DHNORh4M^3rWv|XS~cIE$v!c_A}xbB7@474PNT)+H)M+)~%sgp5Y zY(?I2%lu=4WB9a^50B?W&YK4!sNhnZX{AA5sTPpO|Do8_msk%h{h4EOv$OjRoRn?= zgHr^o{XRmb^!#55{*uQ>TF=TZt~n!PTEAPVjP97UdB$L@I-V zXS2kb!Tu6yxZV)zH;(ll1!aHlTmLZj=5`y4pY!LGthyg5azHz;0m=|~K3!x8rbbI^ zp+3%de7o%!9veVwu*TSy@ymp5&HX6XN&4a`?Jh4jUq^f&Y(99<7<)$CLe844H!eoE zP)PjP;cD4J^b<$l%0PUWUHEt+D6rb?`3D$}&yyEV-;}XkeekiP9=N*2vsK@xF^j-& z-1J5U&YmsRFf6T$;(gx+b;iq~rrXM;ms~FDgntYb#3+4NZ%P~414KNB$h3IclZsWE z(gfgv|3krg)Aejp_mqV|%VDc_{859Xcu|U8{U}}1&*P5}K6|aG)mgB|dY}(#U6^S6co75x!;ukrW}-^WES=|NG4j!O&tox?w=VpUYV7 z_j&f&WCo1TZROuIF{Q+vWGw)a!v4K%L5K`(V4I4~@gD?QIWpk60=dz=@G3GIr-Gb4 zx-|g&XYw_}3e0?nym2QgjFCy`X1Jc;L&&ts;Mur>Vnr#FH8uUIXV)OJ`a_*@L4njL zz=Ra|O|wmKagn^4kz_5w>J%X;p5)hYbIaYCv`{@B^VTpy*U=_M#>g%n+ayHV8ND+^m4TYVDnv zA6x&Cz-W7H!NHn-kZ0q2s@K?9%ktxY`IKgk5j;_oqoF0|Khl%e6gR{wMK@m=s@Q{nw1kIQPS`yd{x9=|EUK4_LcrcF}uRd@D= z+jr$`GV3R)-~AHZ#T=KXUxTN{lQieCaP76$)= z_ToFGcv9L+{;?hiUwfFLhe8E@S7MrD-+N)7WJrv|O+l=MziPe*Qh##v%&&SKDkPs& zq0twm&VRg^vDL4Mn1MIsw{FI*CRa`=>kGXpx;=3357R~@!^d4hjiH2m8x5syHIzGH zxWaq?lQaD9!F3-Wet&D2LUu;%C^Yu88^`(M-<@HPgXW=;JUP|uTtlGKL3_HvLbdXt zD90&sK9pPbk2P*-jF2V=z20Vj`N-RB&CH?atxxz9JNksV(oBWKu)p=NWcNYh3WJxv zmBd@kNI+f2J|(p9)^19c!xr#;8;p1Gk{j>$#Qs2~@-7a7cDhTNP|e& zb_s6$pnru&d0rY5fey*+>&m>Kp3ayqw0+Qai;9bUS(>F$k(K_{GsV8L}_a?e6WrZ|j}eo*?fU&=y7?>Cb94Mkro#IJtXYV0={eHbIUhw4^WXNY1` zt3`|vHG1`QA%4?2Xqj;%gY4!0-|yQBTN6pzzBSL5@j4f6`Im>b&f?pYu!a1RHY1I} z_uT3-e>nBZPxB&5i?S$0kg$`TZ;1a52cviu~{iyfw<3H6Itn?ee6Run)pIc z2CBY!0v7I8vX}fsHZI5p1!X5TJ+f=;OGgpAVY(vsX24edV5{;ovsG$NDSWVW^!4UT zU#=9*7wFf8#4MV(xNJjjUZ6aJ)B0iBHeJbKKJjjXl1(pZl2)8^6B<~=hNuI!ry=F0 z|2h;=(f_!SN~FA;rTev$Adb#i8L=D+I?#^utrNpcxVzUI_n>F40{7tmS+jj7HcI3w zkR?1|sQ8t3-*a)LCBr_+&LNLafs)3GIGJAWsh$Kn-j_5zVdnPcvI4px=t~yW5<^rf zc1z9SEHv>3BP3Z8kkLOHgl~lJVWmwh2yB&b1Gtv(zAlR?M9FUYC)dE)J~YuLNcy7r ztA*+u>IcJfZ^?#+1)(>X`8-jYnirNvN@73yf8m`JJ&McF4YZkb2D-9ZuWP<16hkKu zX6<%j&E`zNcZLwbj;l>9ew;w{oN1jkyaLBUjyl}zQk>Ki=1^e2!qJ=yjzN2z=uxT? zEkhIA(w}tw>QQh@(G#R1HF@=|;FM|8qh-kxSI(#DPGh_4Y^Xl6|F#!eNe>%de`D=S ztuVkQ|6|!F(`hg;8}PD=)Y{H^CnMvPMaLy}`%{ys8=~?yN1Ts0K3yYNI0s;5>7XnL zJN{31Bn~4lJ3IJBztQ%|@h5jt|Gx+PGdB40xRojB(q*a<7X#UKVi8X8X2xYcD3a5? zTZSNHu@l;`XRa+U7b#%oJNS0c)p%o;w6i(T{UpkkhZT2RWH*Tx$V=1ZEI%j#!n5Q*gejRdS(TI#tXF&u*hqL?x3A|)k zAEHwp58wp&Jpv+2-s*-+|DpKes|c7uwr4qIHIS&!uBV})lMUzPAo2>LwJ~cREmE7Fx6OD%?nhF zkjE3FV$hG%)YfcSx58+ocgae-eR`m|DsyZh5bDt_Y>>-jTkG?rN_lc@EM%s>HBo<0 zwwz=BftKcMu&$VSihuBS~)ph}|>=k*fQ<(|A z6)d@&mP{X7@F32zfE)!&m!Fif{fjP;A^7>;0B-gq^jyAJs42VDksML78L%ili3rUr z1cb*GZhxD~b=z27tr;_&S<)!P|2YR{4|JY=A0@)qbMOj`qNDRkcj!u7H8az(g}ttjY`2=XQG;A z0gXZmX-5|ar}z==R_?Kr%pZa+`;4jn&$%T~kz2IMZ)quS9Z{mZu%`;nOq~zn?RpCZ zP_kkGJi*_iqU_&e&OpXM4K(%w{C72uVcU$&U5 zCVA8eA}IRoF{q4~S$33Ex;=OM02tj)vEL{Lo25}iY?k9trPCiwce^WJ02@K`*v4a< z8NGHoFGJah&h(xwQj@y%N;-d8tJ{KZ6CwUEBgf;3?&3I~N-DFsQY+l3QI7sXilg>; z;UiF6 zJ+%l#@SRN}KEl-11I@K6Tr>B@(045(LrK=jpvIW~BXVeQKqghnjm2b_Oai-z-NJ^% z&I>8T-ba6@V?LTjWg%$GMI9?kH;E*cwBz>hOrRs|Q!oZZ$UD*e>Z!AQgG)uRGYe1j z$ltASe#F6weDiILC`U&0cQYkCXC)i;J9R5(><67iS^0Q55-nUv!?PvzTj#Id1aZxf zD)j0qoooHHJWOhVfT0`6{n!)NNG@tx6~qX&8^)mgsdu<{j;LVhfB@?`7e5?>z}SY{ zcNs|8Ha+SvYJ%jO6e zV!So~)Z5nYls?S+HkEt;B|`!!dZr8iUoKKB&du-c1>p*@=WKEy;gL^|C&_Zj)0C zy9`@8CWY9i|6HM4%CYD>M}btt3k8AYssxex-|)QPCD1}Pmg$gyCY|%a+1f!WW^jeR zbql(%x^do2<${S8WF6hND_1C6F8|YM>I>yRs5HwKWbD*jF<^oOI+cNMgxvAx?b#JS zG_|iP_xsg9*4n0!XP~2ARWF95FGoCMx64)L4Y`Z4tmJfd=@q~>+CZW#=pNv(crhz3 ze2KOfI6q!%{vStY9TnC0cJYBhLK;CjbU-AfrAr#5ySuwX7($Rv36Y^eknZjj6p)6Y zQ(|a_7~uQf-+TW&Yt3DYGs8L0InUmot;z!Juju2!jM0zZ7VNuPu60kWt}nCIopu+! zU-%MacdTaRTjs!t5?DSGqAHFwqDGa`{SJEPuz1K&ciiD$)eppLReGI})-2~aDj&Dh zx6qdT-1tCjj_J`ur*rnB>1h_(#^BR|5(p)glYFCIJm(8Q`HnQw08Ov;|v zbI7-M`0mJHYfqEU!YYX|hx;)^r-%mQS$nL0Y#59+U^3m@bfxXoQr}nsnuXsDeJ)`$ zLX$C;${H^5HCIAOxv}eeZQL?8%29}K&CdjmAMJCH7QdtAd!`0DC4{ndZ#Xa#iXtA% zk)5GN7~JB8OHZ#i^0Y2XDG?jAn+XwQW5+h6#@q`*$J^eci3l$J0#GEpAzlQNtH&#)6q zr2G(bF<+&EX(5nof~WXE5WId_9b@rwP~ekMI2OghfmFuAdqsCfOFiKjIK)lqExykh zaRyfE7mmElgOeI6?*$kT=3Q0ioXb3F&$&T9VBTkh+3&@GcDVgCc?cr-hWRaI*WZrjD|m{7z=GH>Ul z`!%*CxuAazGwPzozq_bh``y!?`$s0Zl7yv~I~DsLKGsrsf;W0@O%#E#?R&_3LAqdP zEZM+yYNZRg*g@wV#+u~UH7)}TGlHeBReZUC(t0`X$0J7qAq}NTHDaLmAujl01W{pZ?VbG-j`c)UA=x}ZWgvxN z?Wl3DBSK;n_pN&HlJ_H?UBt=Kvmi+uY&G&@-kxKb8~&RE(m+%ZK9tT?TD5p1`Fl!P&}ZcHODsO| zIRi!u23c&uY2N*wBgyb}livxv5hUqn4K8`SDGEUbzU-Dk(Hxo%*sO;9<3YW2m-->U zNwV#-xn4@^zoKB=A1?{WVZ9i%)m4Omwcfh)UR;&TG&-N~(%4gGT2^Cv4MYFX`GF|W z)7J&HdjGv8mxylDc#bav<;L24wAY;;qmdGEVz^=qyN>-^-Hl-wg)x&U!$t;9yCfmp1WSwI8~2|~#~@moc%b4~ zas6IgX5^eH0#W-Wu zBnixt9I)55Ysqx7E4KI-CK4_=sc|qQZ$H{xsi`*yi;soA8~)zh)?#bqGgqPRMzC9F zR8Wxpr#?&r$}2c5Z>%YnW*KXpRp0*dw>6hwk?+?9TvqsNxw`t}fmaPl?7B<~cEj_U zg7PVsseOJFw}I1Bt1C!XbV}(=P((_S(mc7=>R0=SA@uknn)s^;tl>O?^Zu8*mK)$r zL1wY#V_6=j-)r5T@GW!OBIY~ z8K$N$4bibLCFgW0j*CrH_#(!yHpOY-=Wuv&o>eMIdF+ zM1ffqhmNDOyOoqWKohrsI3<*oI06JfQzqdehT9JwYGDO?emW zX831qh|(cL{9G0NRoxDYcMJBxl&FsrwlQ6F= z=J?h`9`5i^%o{sLog$}&XTRdvT#KS;c@1@a?+aeNi69Oo^EseznRf`|6Fa&&@8|Mk zJYM@g@1$7m_k2Xs`OXD6Caky{T53^xv79Bm>V}p)_qWDhxMXa5=GU36r-~K^DREP@feXEgz~-`1W;^m9g1! zW$O3Lq_)2~m>}?h8E^0r`%I(Qx9kht

    *ZH8B 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/baer-sarabande.png b/Documentation/pictures/baer-sarabande.png new file mode 100644 index 0000000000000000000000000000000000000000..fa14958da304381b696601299350a6e0eeee153e GIT binary patch literal 12780 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/baer-suite1-fullpage-hires.png b/Documentation/pictures/baer-suite1-fullpage-hires.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ccd60b48d785f4580423b33ab5da192bca42e4 GIT binary patch literal 169227 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

    98sJmmeTA^C#;ty!@ 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 z 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%0D5;ks`q3BizeT>> zi!-io7idjB!otEnU-Ew(M*exv3a%5$-U<4)wIwAf`Svc9BbMT+77`W~77|hbyDxMT z1xzg^n^;&3)!4u6<9W3lAFVX^I8`>syrP+TJ!4t;NzdU=#(D8+Pc#D^?w+^zs3w|GEPoTx)aZ#+ap5yi+bH(`CdO__2H?O z)4yV8XSaO_3rh@by#zo-NkfdAA!{N=R+1^khLo_axl0fTt8UDLgTtQ{4fHD8>fFRZ z@1K2rJR)Ur<$i!PSIO&CX)Zf`hvw-gh|*!-oh2$MTJHmMmn=&g84*fGoFSa&0w*LS z9HczhnAUh&VnTjR!yrmul`E}>vTW=`v`6bnL->im_K=T0sqx9022^lT20_&k;gj_) z(tfB&S668f9zn1w9PZ+%3x^NZGu74Ab!LgW2I(W-JKu245Bw|_2f^WWlo|yB6ITdon2hK#ON4JC;X_LsgsjLx60t)AQ1R{ zfkLO#n|y{G>+Fh#eBL@V2Jj;}$Goi?c+d(GG52 zk{>rhpSx_0=#U@gS|E{^;{aC=4|YHSKcGQ-2i?A?4D?{l}TRwVm%g zF__xYQjeiR_%8qcVs|2)?)`4Y1=sD42UgeDYiq`jjv~}@47o1d46U6Le4dr18+Alr znU9bV6_=0@o`8vx{;6&OlboNLN>wPezJc;ODa&?@Udwa0k~SruW;j4a^9B)QSyQrz z(HS;S6AhA#U}XU(DH7UCcnNhk$RQDTUn-B@_47+<+Z07y`$AW@YP*kou2#AqZ(8{28MvtsG^Jr>mVKwtU zd;0tPPq&7>oY~l1TU%RS-wB5;&4DP_rG@19&c?^|udo4yT56me98(+RtF+9Ci3u9b zA?R06DUrpLscH6W$8((yj#xn7IiQO*_k)89nCK@pb*X#%}5F)_Y4=k zc{anBTr)0)ZG9rpf@gfmy46BFJ=vP?baHgO=F$QNCSRiGPXgKWxW*wzAEMcdZV~ID ztVhw9(IuX=H7fPTa-KV2Lbo?(Tkpu(9Jbxg(WJyg+cZ7u&oHkzpa0b#E1m$df_{;F zt*qDkzsHfz(%44%h}AKzkT3e_S8*}(S(mmoGnKaV~qt%1eH$`5g`v`=BL1}e=1^|86s z0g_pie9Afg#L{iEY6w5)?bV%cqfbqi5Fs(FWg70&@D~M?z(useW7cWg%I4?}J%QLX pwqpx!)r*`?kkX(A>i;Pi=m5$6a2423cGfopFf}qatiSCV^KVuxJ4^ro literal 0 HcmV?d00001 diff --git a/Documentation/pictures/bench-morgenlied.png b/Documentation/pictures/bench-morgenlied.png new file mode 100644 index 0000000000000000000000000000000000000000..cfe0bcfaf2425d9f0d00a5440c0b958ca41ba5ff GIT binary patch literal 63616 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

    7joeK8Z0y8AirPX;5tNV91U! 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 z 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/bwv861-baer-alt.png b/Documentation/pictures/bwv861-baer-alt.png new file mode 100644 index 0000000000000000000000000000000000000000..b13577a72d3b3aee6e18c26d5e49864c72a5756d GIT binary patch literal 66207 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/bwv861-baer-small.png b/Documentation/pictures/bwv861-baer-small.png new file mode 100644 index 0000000000000000000000000000000000000000..1ceea362861473e9e58ef24c4d4b27440dad735b GIT binary patch literal 47320 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

    |4F-nri69 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

    Sbm-Y+*NnyJcc^_BZYkp4I8 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
    KLD7TJ2m}v?9o*hiR>=se1%K|M}dEO% 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/bwv861-finale2008a.png b/Documentation/pictures/bwv861-finale2008a.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf4da71f00184800c39f0f0e4cb99b61ace8f71 GIT binary patch literal 18780 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/bwv861-gessellschaft-small.png b/Documentation/pictures/bwv861-gessellschaft-small.png new file mode 100644 index 0000000000000000000000000000000000000000..848e260b8ed01e2b979296fa9fd40dd84c4047ab GIT binary patch literal 52239 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�&#zQ?$QwElHilpZFX8HQ;e|yUX2qGNAxZC# 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⋘AT zYDk|AsDs#d17Oy63P7gjsN3p>2yyFo+~|jRa*dMnY^AJ&6T<*&LlVO{WDu@%f^Uk| z`PhFvol2h;#XJU%mBcZ#Vs|Bnlm@FX7+bQS)6=MBHDZiAj+>}A4q@aQzvnkm)9&~=I2 zo&8#Gl*P|W6xnmoo;tMBc4fbE%PqZXrO5SHJKX$utv%4= z%{(+#{NmQwxXu=~A%degolMfsUd=|93!aiF(Y68%JdE#@9Cp?n3|wa?+7pITpNe^* zQdZIuvhT@n1mRX^Mkf`gzE2_Ls*c+zXorPhVo?lHJQQq4JIG92Uf`dLbgf2 zPZ^=tKkPL zA1BSCOxUo{fxYfNC%~GS!$xPGDIjXz1P(y$N-y;D&{qul0F{{KTNa}m6M{32pF)$m zMK7?S_nPb{MbfM>4Youz@R_Qn@Hh4P_#nauFL2RlUvl8GJ^49R=lel5rtx!7#$`R{ z9iXM@?fiT7c1o~ke@|dgYd>n=DHg<2fG=~%n{xqNTvLcstt$0BYfgwSuCc7Ku$s3hp6n8xR1IU>}o-j%nBl`?merEtB!_soOO9dho^-u5G%ZA zkr~pE>2uqh=S>wWde*Xn*Wr&yBKmc2@fW+O%0W^E)+xawhtR9LPJD95%@m+ zlGnw0elMhfk)56+-cNYQ(ELgE`{g+P2@{=mvgq4W%Hk8B!nfM+7s(Y35mJSJ1kviB z6D@e@D+a16cU5OmtLo)HKD6fg;g96%Bp&NV8RX0o*W81^@!sY?D<8}VH2H%+_LWEk z!59$nGP6?yKh)#Z8*rY$OP!9G`#;q4@rLn!lK&x@Y1*U=qwEE}F9Bdj=^Q0{0!E*N z0h#(Vy5T0M;Kh5q=Nq$qhP!NIy|B<^oq@kuW_>BbI|4pPJn!bQipy07fKnHjgwdV% z&?d*c|3T_OF8m3-e}^pOTT#t^-3K~|)8o^x$UGQ-p7{&naGtb=clF09d9$;OrxA?u z1VycEju3|(C7lZ@Y>h`jjym5Wi>T+}`Sy=9t5tdcSmevcjV2h{;2=?5_zh%)mz`&8 zA@x#V^uCrdgMoe%J^KM=|>lT)mq#&4t&sNJ^5U?CxW4R!DH3+n?_ z16DtPVBdg90;K0K9_52-;cg`ulOss2Jcg2W+KI?gUeiv8glZFYC}uK-WT7SY9>}?2 zHW;cl)hoUEyb|EK4hi%@_j~NetEBk zUq|!iXJ?6bBYT$VXA))SLHSW|>pS5Ps(%nU5WQ?9gcQmecHzNyMosRjmDgBLG3df0 zY)nl+gGcXLQpFM<`q}3;9%=fvmPJB8y76Yq$TWRCA&~aHA%OCyMzvE5fT!S=cEU|f VMp1#85C6jx0IZ>}UaMvs{eOBo#jOAU literal 0 HcmV?d00001 diff --git a/Documentation/pictures/bwv861mm33-34-annotate.svg b/Documentation/pictures/bwv861mm33-34-annotate.svg new file mode 100644 index 0000000000..e0b80cc584 --- /dev/null +++ b/Documentation/pictures/bwv861mm33-34-annotate.svg @@ -0,0 +1,744 @@ + + + +image/svg+xmlœ +œ +œ# +œ +œ +œ +œ +œ +œ +œ +œ +. +œJ +œœnœœ +‰œœ +‰‰ +œ +œ +œ +œ# +œœ +œ +œ +œ +œ +œ +œ +œ +˙ +˙ +U +œœ +œœ# +˙‰œ +œ +œ +œ +œ +˙n +u +œ +œ +œ +œ +˙ + \ No newline at end of file diff --git a/Documentation/pictures/bwv861mm33-34.png b/Documentation/pictures/bwv861mm33-34.png new file mode 100644 index 0000000000000000000000000000000000000000..f1bffb449535740b97f956388ddc63f6cf8b6225 GIT binary patch literal 12404 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/carter-brey.jpg b/Documentation/pictures/carter-brey.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34b970821abc1bef84b21ae42bd6d9b60ceb5e82 GIT binary patch literal 7629 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 Bvh)A| literal 0 HcmV?d00001 diff --git a/Documentation/pictures/color1-active.png b/Documentation/pictures/color1-active.png new file mode 100644 index 0000000000000000000000000000000000000000..e91e80dc6797cafa17ea06f1ae5ec1f4d89707be GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTu!3HFMRzCr87>k44ofy`glX(f`uqAoByD-dQ zIKxn*vspP7D8gCb5n0T@z%2~Ij105pNB{-dOFVsD*>7^P3295Y>aBbZ6p}1)jVN)> z&&^HED`9XhN=+X%h`U+f4t@^rq=@6tH;&oj7G^=CX>z}0Y5als*V-k$a6rY`w=d9A*5>+X5>Jz2AN fv%Qdg$7?S8knOAL`4^%k44ofy`glX(f`uqAoByD-dQ zIKxn*vspP7D8gCb5n0T@z%2~Ij105pNB{-dOFVsD*>7^P39}gm78@P~3Q3l@MwB?` z=jNv7l`uFLr6!i7rYMwWmSiZnd-?{1H}Z)C6@_`aIEHAPPu}zO;g@>0ln?V88=t=4 zzn|wt!_)iqI!*Qe{~lE02tC*)Cn$TNi2IGT%E|1=|Z~$#!@O1TaS?83{1OUaBRE7Wm literal 0 HcmV?d00001 diff --git a/Documentation/pictures/color1-hover.png b/Documentation/pictures/color1-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..23f29cec91493e32d6adc7de75da8a26b0b4974c GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTu!2~4BB#S`;jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfO%7>ZekGB$n-YLR6`n4RArhBsCmiHGYQW)~YmoAC-6!)` z9-%KAoln_M@$h%L;qc(S%?GZDc14kWHad+=H>T8FyZh+;`n7B#XOto`yzIWd+gu-& zSMK=gpUdX2#rN(^uViL35#46@^^@r{>#vpk-y`Fk44ofy`glX(f`a29w(7Bet# z3xhBt!>lk44ofy`glX(f`a29w(7Bet# z3xhBt!>l+aJvrMdqf4%KCSUk}R>)oHSh$3rQ=sJu_hTN7 U>6IJULGEPmboFyt=akR{00)6o^Z)<= literal 0 HcmV?d00001 diff --git a/Documentation/pictures/color3-active.png b/Documentation/pictures/color3-active.png new file mode 100644 index 0000000000000000000000000000000000000000..ceefd4b18c9d937abc5667e8c7574df8c3bf1a95 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTu!3HFMRzCr87>k44ofy`glX(f`a29w(7Bet# z3xhBt!>lg<*wPtpPc`m#!xll`TA=7`)&2uf}|NcMEz|gGC&bY}+aUsw=22WQ%mvv4FO#mqg BE-e56 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/color3-bg.png b/Documentation/pictures/color3-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..2fcc56be068b06ec9e6ec336c9fccaceb6d4c6b7 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTu!3HFMRzCr87>k44ofy`glX(f`a29w(7Bet# z3xhBt!>l54Knhvy#!PC{xWt~$(69DooKvw_& literal 0 HcmV?d00001 diff --git a/Documentation/pictures/color3-hover.png b/Documentation/pictures/color3-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..c692715efdccc6323fd648c12dd56e66f2ee2d77 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTu!2~4BB#S`;jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pkS}3i(`ny<=EbXyoVfkSjzX7G1<$BI3||3i)%JXRRk~uosi{cZ+S1L z+`DJj!`z*Z-d8T~I=$@R-W{3i?C!PyZz@jSer}2P#O5WzhwrIPcwzhU7z2aS%aAF1 z`D+cO5*#ia-TCF1ttgAtgge#uW#+80E!M7kurd4bvL$o<#q%%s*Vw$5dtKc-SD({Y bV3K@doZ70hRWJVo9me44>gTe~DWM4f=RH+8 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/color4-active.png b/Documentation/pictures/color4-active.png new file mode 100644 index 0000000000000000000000000000000000000000..0046c0e18a3686366715cf27ee6351e0854ac59e GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTu!3HFMRzCr87>k44ofy`glX(f`a29w(7Bet# z3xhBt!>l`7sn8d^Ghcf@*ObXVBV;>|J?gs&-_zfipX@X>Y0{Wd~9>ttwP5g zp%VjLHI{FmtKcfwmX&TC{O{*v535+=ug0nucdTy-_i$~=KP|q<=k~OB>>Sl8QWJqj OGkCiCxvXk44ofy`glX(f`a29w(7Bet# z3xhBt!>l&* Xc;wS}X3HTSpdAdJu6{1-oD!MHar#b8W6T|LUgl^wyQG4R0^WHA&XAj<=4lSN_z`;N>a_#%S9ZQm4*z@Mix!1t# zDH*MoQ9Ca&E=x_oA*g|gLBLl2{lcpC$JpN9xcakV?dhVwlfFMK%eY;f?YZ{d>$(=@ apNuzbtVGp!6zT!p#o+1c=d#Wzp$Py&j#sk) literal 0 HcmV?d00001 diff --git a/Documentation/user/context-example.eps b/Documentation/pictures/context-example.eps similarity index 100% rename from Documentation/user/context-example.eps rename to Documentation/pictures/context-example.eps diff --git a/Documentation/pictures/darius-blasband.jpg b/Documentation/pictures/darius-blasband.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c679bfe89cfbe28c1adaed837237e46a5b3487d2 GIT binary patch literal 10375 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 Umf-{7w>pTTtSbD6v~ke?0kG@Db^rhX literal 0 HcmV?d00001 diff --git a/Documentation/pictures/engraver-staff.png b/Documentation/pictures/engraver-staff.png new file mode 100644 index 0000000000000000000000000000000000000000..f59d3620b43eaa334d12eb404ce5edf246773d6d GIT binary patch literal 1290 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 XUi8xV<2Cr-SAl|zs&tK%S=fI7xaJU) literal 0 HcmV?d00001 diff --git a/Documentation/pictures/finale-beam-detail.png b/Documentation/pictures/finale-beam-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..32fae4269736fd8694f8fed1556ef86e7894995d GIT binary patch literal 5455 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/finale-sarabande-full.png b/Documentation/pictures/finale-sarabande-full.png new file mode 100644 index 0000000000000000000000000000000000000000..36707ddf93bec51f699e62078bd6b157d22030f4 GIT binary patch literal 21408 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/flat-design.png b/Documentation/pictures/flat-design.png new file mode 100644 index 0000000000000000000000000000000000000000..80507a4224d9beb516e7289163211da5fb293cb0 GIT binary patch literal 19144 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

    &bfYjp3pb*rfRBl()G3KFZSJBF`s4f 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 z

    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 z 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

    R+@6}Oe@RC^*l-VY(zAfNJU{o!C7|n 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Ð9!h4H`wn5geC=PN5y2A!LsCK;k8v9gO3 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�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

    fb996MiFK*6ONxj@UF&w%m}kd6PN;FbF2NV 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

    hDk&mS> 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

    BXF^+*i%P|!88nAkBLCOafKt6u=tcl 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%0AWp@e>{aFL zU$bRV3#iX!MdY4tWVbi#d(05~6jE=}`5ZnU1xTV29qsLg6~EA{y4IHL_y)e6#c-A%&%TJHt4Rf+*s=s6SmRw=_&R-z zs5L~n#~Jso(m~kia@95$7Ue^a&S}j$6?w}#HRZ7>X{^yj2yvt3|ERRP?DBzf#F<>H zwUWe%8BuIKJ=8$np;)58&xRgB{=I(xrt`1y)!A9;_t8>mGOsM#40~MZm1QV1^)ddG z2nyO?W3v?6!k)2MgKUQK{*lEa{(i8mUrEiP`sCFM5}W7kVsdsrbmrW=sd9KyFL^-D z%6-~>czRmAWF9x7IX}7cXOMBB@gw&4#SOV@r+Dyv?vI{J89mKhCc2BBK5EgK2s%#k z=K;mYKI*eET-z51zrgSjpkB+1_y7EP&U66=(KW$=>OBN6ik_FKr4khGl(T%zwHCR0 zc!;3`#LBB5<4Zhm>?%A%2&&@D;OOY3dyJW<=4FX1%gd@v@n9mF%x~NUlP0?in4@$T zh2DY;9X>V6=z)JkBVdFkHS!6pM&vP-e*Pn%68%kvI0_2z99in3((M8UZ27?i?IlPw z!v`7Q=#DfJem?&GPe5E3`tOByf)8S|oXI7t5Xf7vU@U;bFPJfo8;ZQkZhV+|iB3Z3 zL#-l2iJYqdlPJ|QHbqUJ1+zZtE!tmOlR|D*vzv_IMz>>{5f?R~?mz zp-b&VW?xg&SWM$b_gK>}t!%_loClUh%0GM(6WD

    8Nkd0<7MDkg52v_cq10TLI}d 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

    ZjDgS?fi9J02b$ z^@bJxXQ`{5v;X2|=0NZ(Bq@@F^IHzEs{z51>vKay!cUQ0v~fr|3Q^}^1_@wf!SB*) zia)&^Cs1vQ9}0r=r{V~fVtTz83{mc^McqP2jNfZ^5KjMW_}P2JiWg`cqV{qRHxybMeH@KTdE!5*eB4J+PPKbj5cjTPLew-=!q5;l!z z?=2QefVbkZ$^i`fd5{cC2RuJ z7fnr9SJ#?GuWLZQ=tWmpCECc~QzVvsJ6M=AXSbzMF-y1%AQ-n#mD5brUmk2I19)GT^aw z`Tx*Mu)k*`5fBiVkZo>m27#vk?7M~?e(5_mKH>xLAD}`xVFSlKu+O9lID%h@Do59U zQOU>aen7?3rqc29!#fWDd>&PN^I_v^QNW$uQvOfE<-u6d+y~L~bCWii6laPPll|gX zdHQd>G0ccR5qWW=v)jn0afbq@Wv6(--@Mk%PJ$KG3>eTrO0%&dc}ClyAUm-%n~cMv z+w;ptydaXhmVHwse&{z~6tYYm9hH6lctRt{NF^3k-7%)V=+FQ(A0UgXKdE^yC12_1 z{rUO%M6GT@#7U2fyYGXAXW{nQ4OczrWEo$R!gfrVp>|WPD&d?d;Sh>o++jIv%E3P+ zGRbqi!+p)PcJLNOgWdgN=P^cpMqAT!N?6+a=9nD~WL^JbpTl z{XlvcHW&BICFE}{i@cDWL+b7P)En*8(dAKl_)k=uu)anE(pFVj=%+VP&c9*bAV|Sh z1cWe3RpxQ=8{St697YD(n&y!gQo_fCJ<@h%&STHQpeDlU2|1JPgdAMx%(`PEzX@m< zZ>=ct^-QztX30~{$!_N6*?A34CKZ@0=toAzAgRJ(U7^Oos=1Obho7kf*!PK7YN`gH ztuabGG&#|RY07b>5$oH3*0&l~>qBqBOnqvI%_IHl$c-PYFf|sh^H0H^mp67wvK*r< zsPk_Qe78-TEZ?va{Wv^)dDE3h+az^O=-Ue#w6k2^%h33VoL^;~SnClw;?}apqOe#5*^5BR2LXu_2u0ij_dqxb|@D3F9@1t4z z;Z0L;mcU9np^4Vf=e@_0S5WBjL&noh#%3B<*9JK0*#ke-vr-oDYm^*j)_Dl0!)6J0 zQ6WRdWfxf;g$xEOOR5D^qkm39cZ~jA5$CGc-~G_}6^xf#qx7S{DvC%Bes*fMU!9xw zA(1-8;vJvnqMT{!Z1h>Tx!3Z|t-340ybuTFoKRw3pP;hcuFpBuV$h+6er~beC6o!n zOrWLbKtMoR|65KCa9`It@bjFOrwkk|ro*P5LU&1N$sxZig&4LO@LWM=Y)ABFvTSUP8_GejiRp$CQh5UG0qOda6LB_DG z`f^kBeqHEg7Zz4c)-jjt-#=?;tt%i)ve?A-3~Ha#+T8T8eK9=aas%>B(DVcOxL*!~ zZ($A7-G!syYAhC0loGz(PYv5N)}OxzT(Nr&0`nww3fv`nI~1|LeaNA!q}mlp@ynd4 zTr#^&j>yUgHoH3w5;b0sd?iUSTbQwfa`T2t{DPSS^VW^-S)`W3;w5Rvbsva`0^9wC ztSUkkN>dBokI@6BQ@G~O3aAmD+n~}KS#y+o^R=m%j(E3eNf*RfwO!E~eI~}tz#KUF zJw$jSt2wfC`SM;CbU%PyA_Aet3`$qX0n*rLb(Pt0ENK@X`??QO2NY)diZ7+&5G6@; zl!|%a{VbdGNW2|jbP+Rqq?tmO~{~H&N`llJgXMb)K z=bQph2!YhTP?U$qh5+0LOB=xWhgWopsLdCN@UT;(32&~ZYAKQ;Jq&89B9uNY{=UV=Q?S%CG(Tbt5cjIp zzvqwok+y6D)}EKNIQeE!_k>@2B5UENT>*+<-^jEA{$XuTPb1%lQJcE&qdOhfHU1h5 z$tGh{xe;9reDS$nvsI@`vy6LVp%$dYGVzR*M-pwOkhs@XI9qtDLRtOx%Hlg>dF7o~h&D1)HYoy&hKnR6;4aGsBtSy;S}>wnz?%99_} ztt~CcCIAu~ARZ)0<;ukQf;`Wl&}nsL#bxz(R%h%{U1HrUbVNQkvpTs5c&CpTkbFx> zDAZ{cOcZ|UGIH0!i{xATw03d*->hPYeL!P_b&9zE<2_IZHvwy_Cc+h`Qrx)26D9TY zH|oU6>U)gY>+j!NfLufcdTNh|B3U_&`#z(4ln;scB(yhkfQ=4-{)=?@f!YDSfpN4~ zXSh!FF$H}n-4#}=e`y|1(DptZugl*3*`-HXsRs)wt>06p)A>qq7XD|R9W6#||M<1O z=NJ}wRqm6X;;3PErr6?#B^E{v_TTPE9rY9D+1~u^R(N*@fiEbkK(M;X!JitH zl_V&V8aZB&x0MqQR~a6?J$`%?N|jC8Z~n7zYsUY{#a&A{(LCAoFPH4jbNdDzhd&7= zY9D#O?`#3c->O)QY`D0y8#h_{IP<24b$SkarD|kVXuY1@xEg^Ig#g?*EN%}n;7$M75&Km0Li~8QW@sigW`dGpg z3`n6(TbC!PtB-yStE&=A`D5QzTJbpgcMV5J56jCvzOh?0zJG_ninIQcMf}c-JGJcIi7jLSVs_m=8^y+9L^V`kDeq>z;`N`QtJmNd7t?Vrqj3TI8(E4u6vRd9#(Hqpdm~ye6 z4?gVS8~-d1`hinn?0E23ww_f-1CyDBnXK=EL*VG?&!&gb*3+_dYjxQE8TA2Cl!a-? z_&wIP077JU&E1isf5}M|lRy$1ZYg#WBp)F#%G<>SiRouwA4)Z2`VyKbCf^y*soK6u z;Q>RWb!or?DxPK8E}13#8;92oM)I0SSnvdK?P*Nm{WM}&MH^ltOJ`MbbiK6B$DYW)S|9M~Jk zt$tN7hvBFW7Z-n!sj^m?Do+4U^JcJT=q*s&%rOlAWqXwtJHbaFO)4t1_;xAS!(EW_ zLkA9*PCP1&Vh zn0QAk+c5Mx0hR2&5=V7i*NIX#H{L3uHLuay_PMx2!*IR<)pI6Q0fR-#%dR_vcXjQ) zZeCoku(ZwW>}TAho)7p44;e#SXj_&|T9!%VoW1>$6E|VJ{HnI|-*l51lIw zLD^Nad9xu5N`*BcLy(Y(5_P=nL{9;ZKMoyUr++=F{7eo!a-Gh@UbeTi{IdIX5V;iw%kr#&+Yg(hFyhjO!yU><* zHfz#|U;kx}+!UC7yv}!H)h4CL5J0Zym!DQKJcz~`%kTaWN1a#fMk5EmpMU+&jQ8&& z{!c@h^xsNDHcM@H1va~z;Ja0#GFxiY2Ov!3Pc<+!1R2=T5|5A&>Yoz`b%t%;#J5G= zEC!i}VBl)E2HH`8u8V&o9ysohvJDXUz^%2wRbUX`*k(1^Dd1ePPG9tOzEFtx0_N+uI=XtJ7!>y`+*^<>ZvT*8c;@K=sVLKdSdf^^gSfb z{@a>J$I9U!(gOp{ot)En%YOpZTHD3u@;{ENONJeWj#pmaL7-(Ti(T9TULU8(fZfnD z=+`k1chhgn5^sof2qmXEbnOd z14b!J8vpb2zmo$r{;kV@5XF%(9TsN?PR=r(KqNQta8^Wd>Cne?d`og`4{xubWbp3s zap$KQ7Z*R|Z@B>2`QF=3Ivp9&)PjCDdj;?e_wsY`(-Hnl=2EeXa-J0??IUNh6&gQl zwr0+`VW#m-`>#fIxx4|*ZK#nAKZESKU0Al|@QBK+*wc33!QEDmccNvV0*yq9>Kj;O zsLaFY8HYlXJ*AM0ZUTcB(l$$&$=R}Lxj83e?GjZDhOq-kC%OW}Sm3#P=p7>K z(JP}LYlWUOzM~|4Wi5Gck~I+?87M(}owF9^s>enGG(MmqAF|@@rbS%J2EAaxn+#}o zUr)&an0!87US0w@(f&u^fGS)9BK90}(xC}JtY&l9AeyMv7{3CmtA8-4MaK@`(+w1} z_$rDig|Ykk`7WXi4G;Z3Ut(aN4!vQS=PwC5 zYQKyt@NDTx?K2^r+WmcR<|jUCX%3ThNQ@A;T6_)D8X2BUim&~zzNqD3F?7Zv(QIpI z@8)SM@hSN#%OM3~%}Y&TYSbRta8=^naI?E%q#7QiXAKic|F7ekRKl_K{;{MYHQytF z+Gvbj&GP3=l`SQPyB=nlW6rR`&pNrd--)E@m38$C$0_~saPv(?f<%Vd(uO;qI8RM? zE)gt)^9y^uBf|K5FoP%`EB9HfcfUw&3FSYr@VdUvnKbj$Ji6lVPjxKERVAI**BAS) zVp(#OuUNw{%3e+l1hC~p#hw1w+wMZ?QFgGm+6`s3bgVyiRTfc93D{r1neG{^hfkHfC z%H0xU$L$$d4?K=`STA~uQdcyjMw}^g-S67;_WN9n{<35)IJl@DnF0&rZ6&;TOABEo zkJJ{(ro_|E)BXNwJTNx5w4~11TwHZLq(fXg3{!c$1wzw>0A9Or_!MZynNXGkfj>@ zuqNNC8PJw^09zotpEE5THwQ*fIp)}_JK8D|xt|o7QBJb83vCq9@9XSPM3iM|N%#Fi z5kE;e+OG<7g7kn3jJE4-? zo1@sSv^95jN*cf+qtMmkiJxuszft`=7#$3`1q#FTJFvpo)}X-=vclB`;ZHyg){dTr z&OsKN*W&LH=z`zFD*I8dKvKCIdv7}3u1D0|$!QB#6^IFeOBSGazyx-z834V2Y#%t# zjgYAvfN_-r&8(aI0=QjQPwWp)6AoSYj4!Di%gX-5;gK&)#2gH5a-?!B+ulSUPC3-- zGP{{1>c-l>Sc|8zq(!;wn4hIW(=?V@1ep3aQY#A*Yno zqO(MrPa60Arr%eYZCa~_|9UkptF^YZOosBuVy2$-H^1IJ<><&Q(hQIP>oZvEf zL8$(3lPR=YzKZY#tTx1dn^J#x%okmDAwN>}MG`oz!gI-tzBLH2FzEAz`Gy`_tK+(l z)2@Lj4N>$r6zOhss;)sn*cC9L+5nJk5dXrKIcj5TizN(Vh}kY|8sW;FIfzQ*vRtf6 zh=(s8=|PPL%rhZ2R8$BIFQ0rbJ_#x4OXR^mU(M1` zv~^;uwMyyu18E%N7%QJt+clX)j1<*={}At3C1-;g?*0ubt%TN1CYDDU@3)Dlnl4+fQjKU|M>|VHb|6i3 z8O-~s&nM}>D-=6IMx1zKsgyJLWeuTwyEr33~R`L200 zbRej7cXRV&ePxo5jVpBYAOE42l19><@GY8n(wy$Six7rnNxkM6(0#rr@Bm|{klk^zeh5gQldf|BbreMY}2Ua<;%tslMlY?zXzwe8Gx$*ZR)-T?LUJ&x!{2QSErFY2pr+a zx?LBwdZii#kvts^?#22S%Dy+piS;f5-z`PLp)qd{dXKqTnit5$eqfct#nzr*k2=3k zP@m#ZWt3iQXq|BlU7jC8z3J1~M8#R;AC1TlV?|2u`ggCyX|2P_nORm^-Y~?d$0?80 z&6|j4o{}o9{7Oc|V2H<*iFm_&pmn+X+rxsSf+Q)ABA0{MJ;7?q?(a~kjtd<}wj9T} zu7N?N2WAO#5%tPORaLBh(W!=R{P5^XTg~q@Az_jEKR*w{`5ELuH?54)8_P-chkpDH zH)G4WGa6q^qnmI@txNnu^#!+o<9Yq?zZAvnyuKDDXY-8v238XFfVwQcgCU}I%y$Mv zQ1b*DZ0ln=mV}ldS|=T7f*7hKHdjjY8*J(?IYm0e8AXdTtrK?>{V@wxE*5h<(BF2L zTyiU(A1B>ni%G=iXj#MFlN?Ioi%bo)Acrd4nV-VyqvY|x zy*AY@9eD67)=#CB&ubKMuQ?@bng;VzI|msQn4fAXV0Y>B(CGWn7`6(?m7p@4;*kH( zi$?mq z45>(=aE}>$)tVBdS>OJYJtZfbqBw=c=K$oC^+`t zuWaeR1dyGIKBb*fTl5(Bq@51)`NDdP`kP4y;$Dwd!LOrRMu%2Q9HHMn>JdTy@Y~*m z*6s1v%xKW3#1c?L9s`YcFvZ;8OYxoma~9TCP73839xkfP82eO79xXv%Y#u31Ln*OZ z7@i3NPBVUWRAwv?e2FQpBEe5I2TK&1(#7k`4gQZ2H1h18hVS~;h;y5Qzh)a1Y#eSx zrAbU76VkXR+7|O-;VC~tZEi)$jLA* z6YAw~ePLejc=H{Ka!`rHT?B8l4GM^{_UO#gXjo`_%#r?W3$sd-n{rxQ_VIFe@p0c~ zSXu438+1iIN&go7rs;cMuC}VR&yH>snTs$2b+EsDuj8Cc#>&_%Fw|6+Z@5$(@x-k#=m;bFV1p4yco7?~o4-XW%&a$%q)b(7MpS|yK zZ7aDT1^zq(NNCD5@S(lyU_M3R5pZB0<*(CQu~TI3mrfxIB7C6e8E6?ShMt>S%{+Q2cjT6N> zQ&>1*#O0i#lX1(S6W4O|<6vOZJVhKb;?np9ID|m9G|LBxF#VrKFiVwhZ~o5YS>7zl z(^O@siJ_-Hv@s2AO9fP4^YJmRwE0{e&FblZPtNG0%Kyi>(zIc4R{;c(_A(WBRre?Lx>y9mig)}y7q<>yxKcUQA zZXYp^!Dzd7@^=%5nlr8fd*kA_-KQUzj;81Q$tj{ZWn+sR z?v9?b_j69&lBY?$Cr>7dSI-kihViDQ1~EN`%*<8im(v~dobnfscNgF z4IgrR??P8!o^QsQ|3gAw-0=rZSn9vPahFMAAbR)`ZS1W<3 z(qd)ZT_gXQ>8}sd!~VC`iwTINqMEpvWcF+R54aWPLb+DAdQ$(H0OoTWoy&g?=60{U zT63bPpf5IfMP1ZieSr@@0p{lqfrmqOyNGjsUqJJfxMVqAij>Z+s@g`Q_^|5<6OT;Z zgHtey)(?bad4K&GyQAL#kq_=^2ZRv zMmGU@pvVa|l~4Gwa`Gutb+O^l$^v);kgP(#dU9x8Q8ibtYG@@W zs5Y+Gte;kBX&6~5h>YAb;t?|=>P1&Yu^{^ape|xu#bRQZ@8$k0pVC>^;KY4$< ze}8o}dS%c#8qqcaJ8{v(q}%B={q;dI62}gT8$C$EXBmi}N+-!%ADg~8h7-^7 zh8+<*^M|=w949M0IgtJsczf#6%v&^ubH(*3>tcd^(&mjjjHhf7li) z=lj&?+rE5!qe^S|7NA%jD@Gz;&R(7b-)hKoWR4fTY?$itdwV5EOKjd9Mve>0SK9(& zi%0z}NGc!Qv$8;wT&+?oe^|`icDMtKz>2{qA0UXaxDB1tUCye{4!ZM7F{#=UiL$TP zO?4NMi=T@-6K;#EKKM3UJsUbxgJt+T!}{$TQ(Df)^XW)mIkf~EnTI@|fod*M^kyg# zEahWRq7a(?Tpw^n1kw5t{~gwm608sG%{MKh#s3tX`8kf5(9D+0naGq7w;j^^#)H_0#czZDI#df7*v`W}u zoDqacG%R=av%DdXeSk(I$2eFFM}+?G(f-k{llE46k=o*sOTAZ@tO_wTHmw-MoR?@^ z!aWB%WltD{Vcn!vkV%U5VBN3{`TSN`uMsbW`%o@Mqag=>}~OshSiftdqep9i(e$$nNRE2 zCJ$}`jFIyN!*2{6xeps2M76$ch_)}M76jx=%_h0uPi_t?3f`40ljrcaoa@wSTBEBb zYC;mku%!~Qln)JoZj$$~&GurXHa>KlDt(m2fnw;dv`UNFCyX0`kJq6`1pvQb^;SGb z(DRWyq^dlVM)5Dr=gjY3+gbH(9_l~1bZi@OH?6n`$4ywB9-fZZnRTPgb)BAK}Q1@%5LEhWlCqv!Q-rmQBw;H__ME(u5H@BCfM-O3F$n4?^VVJaQ z+q}J@PduBF{AT3#P1W}J7*yt&lSVTf(X7{xhfMNQy)J_zdklIf=tl-O^NEt{j}=!s zEXU)|{o~rYkJk0JJOC?JwsPXKD6f$sU$1zvVJg`AIE4TGX{&BLcD>WFqw1Mbjk`#i zPFSM#d=)2S>dol6OJxG_hBmZ!(Q{7ZQi&er~_4 z``(g=oC&-XU$K_Js``ggqJzru)i|lQsvpJIy!F_uaZj-#1HbW;1|qYm^P6nw#QlMw zcQIUDU}=9YnL*qeY^<+XF-a%Ua$J>~%nDFU5#-JDA zxaP8>$0;Y!{I{X01}G_mABs`-U~#FVlSdC}*G)CP1IUcwZUW^rhiox1Z$8Sbh=w$& zYIL@?Mh_^U8v?0HDA=GFnNt{2%6G#c%asQ5s8QPVow!v{0sSe+1m^E z$c!D(VEvun-ND&8Sc=@jyUZy_8#dUIr4P zhr7GGhsVD5edwwnaK#Og5Q<`yhgSTKJbN^0HmCBv*uVc-{qf@%S@sx@OGEhulXQaE zZ=~iFIs9ge#j>i_hEl)*1aXeVP<*3gM5lRstua>xgQQf0z<+UL8vD;pvGO!P(mLB`edPu@eS@L?4?;>BYy`Z`uRxe4`F zb?%lmv`(RqAs;PnuA{S8ZaQc=dj6?tGt>H^%&?Swv)1kYaxZc4TX@aG^8Ms|TiNyE zQAgP#K|$PJOO-|D-Q&LmmO8PMc6wxq{JCG-`LYSsWHv9S8<`wKzV~Ov>&tnb+)f*y~%hfc?72UUx+qocisHR^8U(X4U<1e+CT)~0Bt;e6@x;L6F) z8A;ok;1GDH$pwrHqvfgpCA1uKO(Ig=A120v$92exmk3`xrFh0g=i4_RhB#i()M|pk zM3YPz5<&+V=$~{nlPc$`^>kiFPjYM|V`hnT8Hqv~c=yYnn7 z26`c_!F9EMeeF`GOB61i^FqysfW|Y;x+~>jZT%%6f;Z&kYs<5L%zC?R8Dyd(_NL=n zS0wj4wHMiQ;yue(wr(=zP}nUZmSHdw(>dST66>rmeYHg5-AVC}>JnkeKMD$Bj(D^4 zZwL(j!>a!gB7^|liiJ1$N#({R33vb4t@glk8g>B=mD<2*l5JEiP?=wI&g zi|AcH1rZr9Tl9kd3KCKFKtHJxh$d1>C{JlO0?51$OI1^1v{H4Gzc6ir?pb zgq93;rzzo4M*$qdUYL~hA);X;R^b(!eMF}7VLuhVb2c0=EO(Ugev~sBHPDNciZ>q7 zKEfz<-c*i{n`g$?$VuZkV=~N^#qMPikfJ9sj8djT6rCij8K_nIQaC_kzF#{+fDu`W@Ed5CJ8fI_qiVPeAU*bMC|esHlguQv z5}=LM-#fk1jpxUG&!-d>$>zr%TJ~rLl62Ow=?=V=U%yST--)iDLCI{fDQ{_*F*a5{ z!5EyGeIa*$nWoi9$woGOD0zRF!R1K0PRYhrSIa1ys{~`gB7{-o+0y*G{=V?RAH!=6 zW52UUqg>j~zJ$VrGj#Wr%r`ofpmU^HJ9C@+ed^oOyU*^_Y&f;Q%WM`znJ`>&X2(98 zMuOy##W55K8RTyDBL>2li-r9bT#-J1!zeuW6lke_RN@;rLK*YQ%JKk5GI*>+gF<;# z;=y#(B$Yq+Hf-fQH43@B_5?EK(WUk1o=+7eKWomEMBs&$@Cvs?91^m`g)yb}Dn9Hl zAYftqa7=<4Youg-!4y+DZ(*V}?W>s9#QbuevY%}|tEzl2I$KqFK0^aJAxNV>lDg1O z$BX@*-QjiBvUs%8>3Vr|vufYMVLX(rs?5|hVyX3yw_1KKJU)I_+~!w`N}uqpC9{C% zVLv{`LSZnMMJyJp4@z`s;OkM@v5o@JEi+%lyyqc$SwuaS4<7Vo_Qr9MXiNex_pIPZfHf-5O2A>@gIh-_PF5; zB^5*EjN>vw-F#;GEL3X_8Sh?_G4LCG2EoCFo zTnmK#$tVFzuOqI?f1bZWtLS(3dLKeZRjVMaYw}u}>-grF3E^Q@|VW5`{jZ? z5fFL6LDa`F>lCsD22(67D#IU0h=_>)7#?#q4>VMf?pV1H=ixXxD1-J_b^Sa&$yV*yC_?aiWLKoYdy2Y zCKFFFLAa94TO}QHNVffq=J1fz*bmGsaTP)~6$Ja@-XDhAmk&?tMoj5Zn@aDDqZ^!! z!7;I{NA8_qg-u=EbE1gUGU2fkk3HiZ{zXf5zl+}~SE)6}Hid`vS;Lxnlzn^Gwez99 z1bt(KR8D>3$27jHM`Ta-1@Ox{iaz29Grp zB*KwWETwqNf+`^)RHhr77XtS#3o;X5US3<(M6nUYZW6t{1#j9%V2(CV%Pg+BlkjR| z1gp8l!MQX%i@BK^Kh%IAALS3vYc`{$ei?3s0iq)gjj{^n+P10#8tGhzDjNJKWC^3_ z`hmd$G5El#28gv5G|O=$j%&nhkWt~xZem$5&Ekty!@!{B19RZ%>4`zc52J@9^0O-jP!G1M zCtH8Ew#ouwe1%$hT^&0JEpc1D)zY6h?Rw0E|~uVp7Eg*i)0>Bp?&oy<@Zv zM$K{@n2D-kP|CxOvii6OR_t$`Rg+>Y=)`GM=~3h=!|jiMYs!aU)kQdtl`fL!MtmXE z`WDPJrdduZO~;{8ZoT)b>V1E@KGUAq4>ZRu0&^-$(s-OPwgTGt`WUVEO=#RWA_E3n z6%*o`sp97K#$qb0-ObbvG3<1&@l_n&r6n-M$w@OaIEXQS6~^rkPf7?nyz+RmNyWiW zU>|6r9c|{6_~y+1PwdMSTr3U7;t(7{Nh*##p`Ffb(Tw(-5B*yiWNYy<4OQDuZwB9w zQBzS9An*Oy?omFrpruLu%WX+oC#Hh3!L(eFz>U(&f?G3*2Z>2Eh}mEnAWga;a6|BeQ_6~@i;x1QQ?0Hrp--lPFhwZ(Id=h+!I|ny#M~WLkw-eFcTU6B`DTrHvc7tDDdU3k|@xOuJ2CQ zvI)N0ZC`IJbFYtuxdcZDo|s5j44wp8hzpfOqFG$o$;l~*kXv73)1sRsdb5d1mO;G@ zuvP&VHAECW&Rf|kOG&5LXB2ZS^z^0V#-Tg+!~?p z%2r-rOJK$7T3g?+k^dPc8))`@@#$QZ%>0C_;{Ve>HyH0U=oLSI*0ym=H;;tKp5~WN zN?%XELcH+f48aoLuHHO@>Zpq^cgzd?Kanw9Vh3RTJD#xd&~{VC4RF-SEc*>dTcGfp zu=>4@xxAQ4f59X}LOwH_pME<9wg|((@97`5v;NYBxP;KGO-c+}df}AxgbLYj!&=(9 zmYct)mykXL5k!ZK#8X3@E6ekLPs!Iz8uJi{dMSN#*3mL$B7{U0`gDFAB627y`{gLX zQkaBYTV>H7j4Og<@_K59SBJQ~FiDMAbS!}(Qp8Srf%l7ez%TX$k~c|lJ(%nR+y@CI zH~^g|LWn?`)mbNoFMx2idKP(jg56IYvtO zYP9lbyr?&nQg%8?StO1rSy)jtwubR+7f*E+%KGI_pGi*$1~VzY)~iI|K%(|qTv7-i zaxC2hdo5)$md+H(ue(!NyPJ%%*d<2Hb@)V^>y5H8MPzJ-G-}5zEGt|>SS97S>3=bo zw{*Q`XAXZOnxekOL=EAFj#)rH;E(Xg&LBx>BUzJT^=fqB-BdBcPdt}2ylIcJDiM*O zD(C!W!A~MJ_NsqOA?Kj1qAZuuvA~)BSeE&>W`Uy(LE>M{+LVg=D0rMs0funj=`|!< zyG2dEj)ax#xBoJwO?pmFj?eiJ zedZ_v84?O6xz8=-!YU>owKz=8;0=O@O+vL*oy0j(UQ2cDZ5;e6zN(qiP@c%d$xZ!C z-TX+enSKV9G6*3Opn&Ow;fK(u=yJY6C&*W1Sa|Tc;va8Z{6O>sJmenj*Y~t*YH_V*ESc z5B8>TNq~LlU_}fMMgYYzS`cPJ#bhwEl}_>)(O;S$jKe*e5t}TSJ^zv`Q5;5i!A}9V z9}8lvk?I^=>3hA;NxhNvYKYc!Nx2IirnI`${2sG!)S z)s1OdM^#2Sz20WU6wB(Q5xk2#bwP3 z)ntCHo>}0PNRS?*fj(-HdnpmMH%!l%L9?jH%vA=Y-n}n>Z^DhA#a?jGGLt|6NyxGf z;elkcYO^^QS$^KVB1vyytf)%H5mgMkb2BH3*&^ko2Zndq2FV@VY*lDCxc@3DC4?3@b1&@=xG{ z22eD4-Z1N@seWxYC8|I4Oy__nsD%w@3VvW#>2P( z&uFFEgp3Ek67J>!CRo?}Bqb^)g4CO~ejotEqC7fHPUfO`^D-lDm7`7$!7I$2NI-el|uw4Q174YjC8&1qmvyYDWb`RjC zLI6aBOu);{%L|nQ!zV05#WAC(#LiDCx82xRD+4VLSt1m zXM*3t)#Ql&?;<(mFZh#HLPX+N$9OiPu;~AJR@ToTl;Magk4DiBHjkjd<=E(^XaF!w zAVbuqx}C17xK1ihJhryfKn44Nx{hU~rFS`>>_!TAF4`-Vx9~MvJ(^l-&83GwXW2&| z9S74@WP)K`VyKCKbH_ktySdNiGE`X0E4jo{YWP1|RQ6Krim~GV!D3I7co&?MkB^W= z-%^2#zsSE>@#Qz%=8Cv-C@Vd;=?E6vA%(sQ)3<|s2BQL%O?KN|L)B!LF@ppI&?0Iu z?I{1V%ZkZWTH+io`T$rEFAgAm|#xi7W&4~r=QI{Q1AIqxiB2JIfw0svlqrj3N z9M_kZ#5UfLIm)#!*4J#*6X&?VJr;!Nk2$715hYP9fs3fs$P`&yLFlMVf>cODPiLF? zSy-oXxQwUg56XZ>*U-$2X1Q={izM?-XX>24P3;-&Aq1^)j3%SfCrbYd|8IlYUbI+49>Y4wV>;J7 za{qMbxl9OA^?t(u(XE*M*qmHqNJ7h8T}Pz}5CC>NHlIsoGQ!w*61bhR@-}gmFnY#^ z%vyA-vHsYNMV8S}t$oi!Nn0D^IW+Yv(NLq1>VJm4ND=zi$xzh3sI(*Br2HM7+QrIp&wZM>4? z`CqIyOA2k%S|2>;5Oc;iGu*StuwJ#*&0E=tbS-v!0kap-G(;%`gS-&HAb<8xk%#;9_kK z##YvYCUNzCrjaG&x1_Zj<^A6M)AQuyWa~+Xr=8s?pngS0Mz&M|fkpAu9w-W!-Zl~Z zlIu|^IJ0IUxRrMQZ-;e>M5$H|NM+R%Wzmt~!sly!(0|(LckW#Ez1*F2X}xlktE@M6 zZ`~1BHkz-rldb#!v8tOlnaBGo#FgpPzOvDW0DD5yp3kr|96VRiPUES?GI`RXHAqqD zTwl|`U}@_|00DoF9fH|r*Y_w^j1~8=A=fomKTnCQJ*~LD^-e}q8$P*A37o!X%tVTf z0S)G0ntu3Vi5s$Qa;n-w@zL+BA-VpJYyKl;Z=A1|(Nw(s8Mf zeqb)~K?Li54jR%8MZ}QuFsmpD&PATG2pmzb5UA+G939Z#M>^m;>H*NJ ziHAL(;d6B_>+R2f@IPsJlhi9vi(mIZd(M0}&-oo85@=87El1 zZ_-b0b*g9mc34HaZZ3JDeiQ~_J!TyHPP_o(Fyq*|430|f%9^Ez&^4^ex|~a^4od|v zj?pDbrx@Flz*$I2zVdT(vV>%y<-{T!-mG|zvy&@*K;%9AM!XEOMhAdJVrNL~HD*Yt zlQ|(Qj&<{(1IuvqadLvcG-n~mWuz!v0w!+&WIx}M&M1;no0vac>kd>Xz5qmG%cJdW zTDCv{k^nkUv(M(0tM1V3ZhgN?Gu~{#WY@+RVXnabSp>pH3+9fe@Vz2bPzqKb_x7(m ze4MZYlqxy1XqUJSGrog>RnZHb&ec%gLJ96ZThug4D}n)nrM8d8^Ph@qUKw5BeeAn( z`*6&s&2~KL&>WO}^I2$4gn{kOt`_YO26Cy)qCVDCnLkN0&>kXrBl>Fs*P$HgL6w_Q zn{5Uj3;Vo*1vOr<+qI|p70qRLv}Ng<(wE?SHtaQaIEzuA!7G^bK3RU!F~x%X8Eu1? za9cv0r8h5=x|xI2@I{0lV?&{)jd}sD5-k3$OI%q0s6KgE+^%YAUC}DqE>Vn~Xt-2y zB9AsW$?nOs?0mS)ssGbr`}wZZZE$TI!`9?iz3i)_wA>}zs#*qaiIy1dm>4p zc3n8+_DE-%zEDi<%`Dteh^Z-JkcaQQ099mu$>PzuNgUfo$F#-kI*?-*hUBq4ArH9g z2a109k$*2&R>*#B2@wZVgqk6niOK;}QEgdSdwctt8)_AnCWHQa*a^4{GtqPbnlpGc zs(>Qb9Pm#d2vkzwaccv8aq-k0h#fKb(|I>)+X0Tmnv9ONHibhUZ`Ura_!-!Yf!qi$ zS66&GKo$X@Xh~(Kla+RWNq^ebdoG+In*5Bl-0AzW-Ww`-+l{d%IavrB^;!Xm({#=w zY0r*raFdmU>sLa<;)ey&i2S+b<=~l5MPxu*{CJ+)>2}3WQ!OGzjlbf>r8W3Y;tsKr;5PAuPuMTK3Vj^;I-g>WU}7)- zZAHY7w|&MOagfaQF%i^B=wJmF-RYLYA%hsQI^jyj$a;16iS-heg%=ISlpkUMh2Jae zFh}big5z(C&kgY~zH_Vh(Rvm$f9tv%Pe10R*qUXEKOVx8w-pO+s^fgTIIQF$L)u$- z#s3`mm~D}GzQ~Bt^p*U*SE2WXT8DK;oFcW*Ru%*;b0(`X9^3ZVYhy$6-+Hy^;Y*|| zs_o~;=(Bvcf9EJjLr?6Tf2G@!EpCSlecst;+RJ(|?%Vc$P++8`qRWcA^Fj}UOK^k< z#`N@XO5^MuJ6+gw@&K4TZD!VA?p&EX(3sd*kRlW;gsLvc6$++Df@Z}+E+82UNTPGC zBBJu9_Hq>$c|Ls~cP~G{G)CsYxvgS-#MgSO{~F3aTnp@^K%WYETr#O^1|w{9(xX48 zj@)=aEaC|ybR%cr^$C;UmUYvTL)>?11p=Y7Z05O*gR7RQy~j!NC*|TP;b;SXGEv4} zK7ytifW8}fkxqbDv*jlfbUTF!Ct8A=a9`a0AR^)gt_mi5pn>fSCOZTt5mfdcmkusy zV0N1nD%gGAis<8FA6FE|`AdjIqq3;Hclyzb3BgzH73)&Hizpc+6p}m5i^b0$G@@?{ zB#&IAv%j@Nbdjg zgbB7#Y-}CRH=b4Y9c*B(9<*UxO=i5mZ}u_~cCXxU+~r2i>`qDnha-YPgfd27;9j?la#zHKYU{uP<)m8*#Tf&et`+4!ImI?)0qTiaNpM z{Y|wdvNYJSeL78!ec2!lTt(D{iTOl2Y<=QgMu2iHcm0! z_qy);9fRt-*YvPqODAv@*vy`6>0P`J+(>t5hnlLYxuMLdvXK9PhoC{aA^91`A)m+V z10Bl-fAL6uIFmrTk{0;IpSwI7?(pOUqCk)Pvw)$e)DtY=T9%Ik5i!7u1nMR59iWO( zKL{Vet245ZaafN)FF535V`5g^p`>Fx10b{Lh!Vf_z@v4Us#fj4JL1+jXt=GZ3FNK= zZvcZ>uWkWT&|1c)r!*;fe$M$oxFZ5I&o0H);o1?+NE^I=F#3+L4_{SZ3)824_(*_? zL`KO)({PGq_WQJ#-fmbwCceKR`1h$SMx7fw{2)k@jLEBP*TwMY0wu!i?5thB07bt} zFJ42SjpE#eWS1jK+{PNMPgNPz&mD~*NK*Ht{YZHMVHnZi=*u3pciWGrqY~l3&zKSI z3&+{m(M`3kA6ASSEB!58+3iS<%#bPrkl{KmXFQq)!}LZgr&`TRFHYntI3d zv1J-0#P3SPt%05D>f_EQtiI+Hek>NV?`OZZKl?EW&)|Mj$L$B^xA}RE1R8vNeDKW6 zVN-eBEW5TYGs{qO$4x|nG1L;cR#E?%aReAHgC;wRs&@IzOA2WVj19jeZRi4Io(+6riNotC#BQ5lwnY#RXUs4vm|59s%j z->~l+@TUEkw?ZgKaU=<${Fw^wo`%H+duhL`N2&Kq9&3=24|Q+Z(0kV%WquNbAsuq& zFKRMmkw2o1pa~#xV{-<1{MNnmdWBAK32#KN8$+gr-kcQc)5DS_M<+<*^-z^0bUxG}US^x7J!}KzRPN;_t3rl#O){6G_Ba;3|9iR%&^n zXlN15BHa1D`p&gA=p(T!|D)%Itba1*AS>JXb>b>x#4j|`dMVz+&RQZk%RPK$*~;;b z`GLn7^oQDSW`Q;poc&X#aAI4T53rY>qo`uA4a)8pUX=O*bFiwa08tUpALT_j4$Nw1 zrTtF8VjpE^@(zScR4@?mtH~Ptkyw6V0U#w=>71uKxHOS;&ezZz~JqX{pySv-o zHvXU0K7@x)Q1Iotu@kMyt8U&eHVE$)_>sMC#|hxBW_WHush?&=g6DNZfpq^QU{Z4R z0LV5vUz4!}?}h%_+Q3hWASG2u7GQ;Jpdkd_tor)4>js|eE)o$yq~0B`w7=;hVy$;P z{twOv59`eakK+q+dSwwYG5jr*ad(;fmI1}xu&Sh~XWv}~jg5Z-g k9W+Lgag2pA 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

  • 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

    SRH-h}l7_?E?cX|enTC&Gwr3ji( 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/hader-slaan.jpg b/Documentation/pictures/hader-slaan.jpg new file mode 100644 index 0000000000000000000000000000000000000000..893d6eb3707e4131ad273b558c83efd2ebeb71bb GIT binary patch literal 26170 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/hader-slaan.png b/Documentation/pictures/hader-slaan.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d66503d4131e1025b1c23b725d02980e5663ba GIT binary patch literal 120505 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%0DFLlgCM>ELndR%6ap}$ z%%-N=hU<4am;_2)ZC&eKK3@=Q*dGY+& z>%qR>cP}45{<>@U?LfGwBe*<$1g4!tWiTmt6e61XuK)qwI^@{p5(qzf8Y;bQR%x(` z4PYxGito60r(SS1@@)USC9OR2bx&93D@i(Wz{qMA+|lXx7)c8i&UhFh}-J ziXo3jt2Zk(I&UbP-z{ddi6Dp;v`UrE;BvW~CXL=E+MHyuwK}ie=5X6}av6VhVVxs@ zRzbEp(*5KiQf`jBC>n(sk1s<>zodd0@ z0)c#cdt;NgGPAZax4ynOJ}@*jJ3TkQyt*{IurV<{JvBDFFgia22CsEUr+bz-aiZo$oT^_3i!$#a9l-9oyMf%s;f}HUyG?SN*Z5j)xskqrT+m5XcD7e zX)q`ZR;S%$usBs5&N@%8b2!|Qu-)OYvP2rbSfr5~%&;H`1b$YJQKeO|bvi9D29ZE4 zmGJ6SMwitejQTTxXVNKzTMKg=VueQQ^T*w`b&gQL;|uuP8*C`% zty`aYbE}SoMI)@>qK6adGQI@DWdv~1gj#7g!s9OdKRh>vT__mHr5Fr4jYy-D=`C$n zZ{2(J=<$<>NKIkqwX4k!AHRJ2=Eci5gCI;?nH`^5rl*&;x%2Z&(?e79qbrkRGgE^@Al&Wm z?i=WS{_^FUzW$!x!9NZN7ik0}D+cv-A!P){ok6D{X7TsGPUS?p(y|Auoc|FC1UmV( z+GI2t&1SV=dz&rgsf_-l!z@x7WLs>`!jjNvv^YGDkk_VHE2N?oh1F<_#+=Dyz+&+_ z)M{6%n2k8}j*!Evu`9$zl}O@9C!DdU-)>ZKm$p||*fOoj>W06sld?9%Dv3ZW<_iT9 zg>a$oWlJ3eQ&o+rczhfh_2qtC00DPl3ht zfhGXw`c?ysxKt*W$rLKBOkxkFgw4qc+a`EJte#WQ_)^FW}TG)mjyoC*-ZL^**27 zAlY0Td-LcW1p=4i1V}=WfJa6l!y`3l5nzg;GQ0-PM{loh zef9MD-A6Cqyng=V$&1I2UJi~8^}OgEpX_`70>pm3!}D{q8%xV;8!L0O3+%a#)fItI zA{MChGOu5Ne83W(RLR zfA-xo-pm50*#4!@8D7u%gZ}JMdi`C={!$n}<9O62nfhn6Gx4)w@@{ z=6$zQ?9?g`4=;cG<>&YBzkmPk;ig-NmwOKnZ~yYYfBxy0pT2+h_Bxj?0~Eb`_v-q- zmrLiHoriMu?JuvNzJCI4A{|Xoo!d9}?_Ry?(8W?V;?iC0u1xp2YWV#DvhTi~7#0D4 z3xpvr!I1uAaxk>opFtJ$N7gtcI=*mDIK8kT+S^%O*xr!u9U9Ly3YEcPR4Y|i8a0Ru zJ$AF%=5bq%Mz`AuClF6Cnkf~4kD_j}6ow>#mmtbFz%_OoL=kKTx|~XonRtSTK``ub z`9fjXZ_`yq{=NE)uLFGF-_U?CTPmPc;dUsB+8Ytz8scxr{Pp7B?nJkn$Prw`8-gk?oQo01f zhwAIc`^US7H}76Oy`b`qyVu`;|NV;}etQ4@mp}jX-#^sR5DDVM`&ad9j`U^OY&=zD7}zkdB5IQ_@#PPdnDT{oJK@7~o~H|cWqsnck+Z+`g8FE5&n zM(6gnQzPj1yPw|Nw9;gaE&HsB?K$xH@5Y90M7-xCm~y?F9B1M00%39p1a6GIKej9o zfRuQalS7_eTwdKhQE4wP&Q4BF&o5L5HoXZ_*aCrY)Ne7`OjZ{#>qr>n`yQ@u9}D{; zSt6E>7E6ddn9kP7d>TRVQZmlAo3#>EA{sQ-tQVVcqC|lBAd|*|UdV0p2VltQ0ePg` z6ZHE*25EOYO;0ep^G)rk+@^}rB${azI{*3b{*fu)yldXR`}wCgx2@Z|r|V*=S&iVe7Y`*W z7mPFYcC*B?Vg2#?G=FM(*gH7t8|d@b{`y-OQrU8ioc#j?j;3OYKR%3b_#9IKCvwTv zS~zPmwmxcp}Xy z5;08Jx)poN|#F8YAF}VbjO_5nDjb||ww%A}`1)@PW6wf6=C<$9_ zKDX5_H)<@ZONY;C_rp$~L1QwUoqTy6;d6m7I6@m6`{o&EAB4h{<;B@)-t%w176`o2 zy!`O`W_(&ovb|cRj=2J{bhE_JOd4lSwVLr3=aBE=}M1%uZ zz>!o92q>mU>?6MgLVs{)vR_c@4{q>BY(QKhJT07CTU+5;6qnbwB(l>pmC0%{`mGAR zT5k1P)K?ap%I5YWkzl~%1mPYW%NA)Y+iI|E5KCbZUzqLY@Ms7lqrONuN*8naVxd&8 zGDI>MNn#1MLL>1sn*$e#rBcyw1cs4lh|3?N!B8aV@*q}|L*sIUppe(3F+pyl(qvX? z9kzcR5I)NPPK);^$+|O2m=8M-UM$jZouOW zb*d&Nh4Tx*9qjGxtSu~VN)8WXmwLTUuToz@R+U9}?(`cjj9$Od>G425pO;8Pf-pkl z2_l}V0e=^Xl2js^qUscx3~;5vP?Rj?Gi)gj5(hGyk0nyT)D<#hvD*VbGM*-we44<+ zkROSlah!}t!eO7y26;gK;PW5>FXS+2^sbP{Y_M4Mddt5I2xG&(0xr^<-BH?3<>JZz zH#YIbrRD(;Mw!D9T;R250-*>Aq1G5xU~{E1wN9Yu|S3MTUsQ31B@5 zj40o=Zad8iTft%&Q>s*(4^_HWq-cV^yMK6m0{KLTBFT_H-E3Ej`IJwm+*+IO%ZJU) z3PJum96RRP zp*89?YRKb8VS_;?clymbm)~i#T69XS#T*PmR+AG+1|p#_nWd}gV2q(yHp<{B++*>_ zKo&`tvq=URg;FtJsIciYk;pJfjBQ`HiY&uqb1ar1ahE?5i=nYZJQ@azZgRLGzsqTL zIL%JK*L>xSrCbKP<>J!uF9Slqy2O2P;7gm^y|gp$$< zX98(Fm`XBK29E>$N6=)J%2I5)*ld>QERBW&kpz)pJ0&7PH#_xM93jcdEkn>Oh%nRD zdZpK>)=KweDg~lVEE;kmY@V&QaKBErGe7aHe<%Qa+92;2d|)jdDd6;RFg_&r_!SWP zW4*wG3HXB!@6jyd;_BuOxOQjP#QS2g^i-`>s?^F$t=+7LgOFdVakz|Tzt5z&w7U#u zht3K7x7{Dd(Nr>;h{rRO9|r51LCT3R8Vn|IB1L3#AZ1|bLaSTN;^j;#ohg>cG+nGz z@>wFsmUB@ACxh`6jzAtL6bc1>E)T3TTU}P0jf0%i?XcQhUWZ0)v3&ld(^mn3Q){2( z_eH#CmKFu$d;#z8Sdc$>&hTlYV#09HVQzX(hPqLVh(sbtl8oe8rckXGXf_oCK_iYb znQW=qtd?&&rA(S((v3obj^*poWE!J$?Db=XWk{BS(RQuC(iuE<+qizw#O&uA3zK79 zgTT<&k8|>;ys0Vv$CknY68dq#*w{zLmytyn7MOSw16C^`h$aL=5EE={?`&^vZ7*!> zA0HhapD5(#it}@|StUQxyI|b!beObeuh(Wag;19->TyQ#XoSq=LIe)Ba}2Cz2!TU* zn#K|+1e1BXK&R7KvXCQ_nL;t2YjXCYT+Xy=#XSH7*&|ihreR=->72vjMxqcl_D8Y2NSlJbnrYLre|A#Suj> zSPF4Cl)=j=FrjD_Y=|VDp~yrfn@E*9&2pz+Yk{PJ$}*L9Em!K%WVDcIy)4|ke*EeC zS|ycA5}Erq%_o{>%dK|3ltWCimHCCK0jIfuClm^2XSqM-X8Q6%(<8#F;RNdBh}Qf! zK$slpR}RETxCtcTjBtM76?QnLn)Pjo^oZ*hmCF?uO0C)DGy}gKad>Tdz18jY#{Fp6 z;3gvGND7T`P)((iL^7U4qLC;Ti&GepL2d3-E>$c5pNCO-PVzV3xGpn=a=utC2x8R-;}8Nkg?<%#dle zSZ?$x7*=b7w>!>g^(l5{r-g!N{Mr5-A-Bw2 z3&G@+aBgCfKgI(<5R9gdhZ9HqzZyyX2!uYR38!_=4L5Ui>9g}os~cN8yCTu<&W>nr zdwW}SaH`a3FBF#=wN@`a(?A|q#O31rH!$5nM<}Ru;E129(3x_xLN%L(TpEqK0{%oT zhlKNF4E7~6Q8&mS(-fW0(B&3b^+E#6RY7QcS1IOl#Y(l(%rOi}k|-LDM4}NS=nEp; zffeHO*-($~%Ha0euS_1>h1c(~*&*+z=Ndi*gwMFMKc~RwbVcR_W0QU7@a)@XeUbOi z?`iy&>r?5E(hPhse|CDy9rO9@Zim^G$PitoQEe4!IO%s{OeB8&@Ty(C?|?m#M8k2q zb@$Y+)SIO=mM`_%WSp&6^AuC*-rmuHi;dao>FJSP#Avv5G>6bH4-d!+`xqGU9P$Sf zI6MyJg9Gz^V*&R8g88-e)s5Nt)uolKjk%ru&6UlajrDD*WJ7c$**G{?DAgL((Vp`7 zSaWW^I6c)tA=ndi#0ZPgXHy$3W{U?wZARej>UXUg+bSgSa8P3-s3=iP$H^p`K#_Qi zEmL@kOs1)9wt8JB)1@YG3gt?%UP)uAESbpCbS4ZZ!@wyZUdV5AL?RH1Ss_orYc$v_ zKBviGve|7g?Dx8z_Aftu{8EcBvg+UqoSvJV;z};hzlQId(}m`bq|L#9=gkT>oUuSK zfdo*x*1frHSI7>Np`tj`d2AM1MJDP;DXua7WgECtB3>%vWbdK&RL|l55L17=>ow?r zO0vo&2V>8^ogAp34Z249K4>t9Ff%+O7>=F|)N1>)iGwzii9Vsnki3L@cV=#Go~s(J zZEmluAIQX~7qUIk&W2cYAl^JsoXHPldi|+Pbs;yaFU_Xlg1~~%J zAmocAa%eOjrMvAa)2f#n6ow#aHe0S@I7wvkS)49p(ICd8U@wf7I;~>1bJJi7?Q%R{ zDYKajMPn%(CnAAF5+_p;j}!8`{5}VQ!{I>CYxko;pOZV+ba}lVx61{7{hNRQOeb$j zI1B9UWdCa$Q1AX-fsQ};oDX`1vy*F1JdQmSh%8Iu=~{&=&ntIJEXR%Lde5vRcsLXkko;!Q;3NgqlOA(s!&m$P6?*YA3-TQ~JmgYYwS zsaolE=`4w}6*8PmQt5yLLUFq*UhkIJ64Pyyc%`1Dm}0e@%a=h2f#GN{h9-PNJUHVA(fRz;sw+cg@Gz33a;3(rm%Y-D?Q$=|&{(=quD!Z``MO?e7Q?`J zmap%xd!>A%S-t+#|Gn+7ewAo?Wp0wIea~@Aea{KO@ zA+UTc2_f0I$L2***pCqTT!t#gas@2L)T?ofs#Q7ERI>>TjS^@imda+STnd4Mp$G=z zMm*%jGKkY*H5zUHDCBm!AdmgaPanSu2;8aU1UK<3oL!im>L1|tXC=SDK@3T@_@h$u z)bh-#gT(O^lS`+VVlf%au=O;XDfjN5-oAWz{i;%`WOLp2-F=%Ol8A%IS89(xzpG=` zvt6M;IQ{MT^uqGOG$(S!9g_{thko5mIy|sIAu)8Z!9Y~I)2a=6_nNn}kU!ExrkI!W1>I>1O)o^9d$}Q$At=8y) zqYi_^>*VUp7N^^XAntG~O(w&>a;uTg)oxyO>i4bcU8|5O6)CpX?vg zIev$ag9iMM$HrWj`SAQ0q^YwUrOn79a7`r~68fPf@CVbg3yVuDYa5&ED+}{W8@s?C z93M;ej=-v)Zf+c_q-RQ%&Z0k89Ue%`=6&ppiSV*@D zY_(Y}mNHDGRi#Oisuoj;C`vMkU^tOLBcWJ0nu@t>4quW$kciLW_Q5{L?Q%jeS84h; z0b#7)_09uZYZ`1Kuzwa8gj4+SFUcB)Y#HMpBx#oC*PUc6=n5t96kF@QeR$RDB(imu zPBGoP$M9>(CWT;{q*|%t47r+m2C3HmzIHt8Xub$a&-3`hgpBnXmaeEk;nf4 ziqRYb*Hkz=J$zj-9AKTA>i;F2Uz%H5+uY|Frb+lR)?m7~?tN z)YybzZh3WOX}M3R@x>!?&xfp%6W=V%Z~1cRc(2~*wM*sB^;0`l599BC{L{+;=MWh0 z``0g86^crvYUT2)w?Evo@t{t;w6ZwG5&8+nXBMaVf+4{N2oom8_(HJb2VBO3!zF%y zmU9#*446$n1dCiY$)%fI{dr+!V`*)Bcb9{~u2?ME741n6PZiQF$)#L+qEeh5iw-Xp zl2eD{{O~|&R4Fu9mscve2}SL4huM00428XRH{#P?Tv^Q;V;~yO>b+Qsz>|qYKAmjd zR?G1?i^VEs2Fc~-BtGb(3f~3y9B%75bMzAY52j z-jQ9b%q&d(9cGn3EM1TH^R{u2qpd;@-O_F4u2n9g8LHN5-2V8(?R~4>?G)%-r&g?8 zKi+l7fLgpXs16P41l*uKh!O>Z!$V%5&Xf~F8i|yT*sO;WXdg%oxu^1nBS_$S4lK&T z>gv+k?%vjh=-}XBXMIDoFWy!j?uewv$1>T$`IYKYtClM-l^T;t>(Ct^>kP_^E2YO_ zL;@zeT;n$B?bcuf4W^Q2x6NgO&3+$lLn3Z3o!MYDyMhE7dI~$%F zRSNn2@si1jzXif*7IAiPC6NY{)M)8okw`lgVYr=NAgq>At~Y42JxKO{qB3z$ueE=n27BE<9jOWpYR$ zo{D>*RJ9RGk$2rjCz}rW;NsisT)otJ`&25wz|yS>%~FjD36h5h+pN~gg>w74TYh-D z>9E<(P3IOQlO#z3Ab=bpmyJMycmgCMkw`ck_B$d*XC#;;osbWPy)K)@WYfEiZsXS< zLw_w0xUmPprXDTomZw0{#{1Og{@y#>b7tn3mdq6zqw-I$U)&aJ&04+FtTZ2gc)ICv z@?KQva+9;){4o%ma5@LW0>D56Ws*PQGo2i^nGXgJKLTNd0^Trq6!hDTXJ!`WXJ5Vo^yp#%(IDw|1Z~{e;a2Q9xMvmok&0e|My?@zCrdzMt z7*=gC1-4XAVVu%%79%q)mdF+=TwC5 z=&?pEj$k03bcO<_By#Pk&SpP6w7Fpzbtu(}6Rq-8uhp6~I+q{P+hItBhyB5DG?~SGS@yQo zrc*Vh(ag1T44t9s58YgmF4Gw%#gwjF8G^~v_ka5F_SOIVRL!w0Q)*X20}oLPkQ>Z_aAaj|etu(TeR*YbV{LV1Wp#CRV{?52 z1PB}366xONrU)bsyQ1B#_3f>l-EHvV`H@_8dU&uSJ3Km*%cKVi(Y{Q4tlYPF>=KDu zp;bCOR+H*bd?l5ioai)agWIc6n;@gd<$(i!uP^0GF|A&i%#;d+Y^u_%l5sMFlZ6%v zxrkPt?$z_vcBS=m^X9sB^QxP^xp{G4E)+9t2IP(m&bA05l`CR+B9=%I@hF-Idz`*- z2y#Jw7={BOJOufC4vW=hwyCdFHut~ZHB5m0ELhx@tSrnt`*!@3pZoi7f@PXp$8>sjZjL)c<|=|5RXBG}II0s2Pp&3M>EU=E2z7J+W9U0oU%bfGvkS&UYj`|SM0 zjbw>{;nEb&7JX5ME+y$?Dvt+4@lv6Vrjfs zPZKOfqA8r9sn)A<5hR?EL>i056R~(Q;P<#7*z52IK7e3V|A&G=bA4c zi~mP~08GFnN3uK*Rsn=@&p!3Jzxxh&&U4|?)CrNRU%xCDQZAENy1h6vF(%yPaiKzJqs$TcjQ}wGn_`_fO6aP7n4D zWydE9rC8&UOSM;;lamY6*_zs9hO7#cSAV)^@j1O_h4`Gi)Qmw4vhpc7K>N%@npS1)m}VS6KFPzHo3`tGJ|GQwN|r)ChiLb zI*o@20`a&ZID+|Muia|5Tb%*e9|BLb`+`1~%V~$K9zCQp{!@U^kE_N8LrG&J-N8P; zL4PWGDE-47KaYPD|M~!+;eEdX)R5V=zw>#&`$+DlDZ#9QtkM}oFI}6P;`2dJKfkg( z2d-JJwP+T21F+gtoE8c~c6xMjytlU}I@Rm0w1<*Y ziRelvlgJcjM@NT8`!b#G;zF*mIWo}Qa5cC|QzpxKASV94*aSzTtE-R`jKzrI!NulMI40D;#B z!eD*J`x3*y4+P$q1K~MX!cE1wczZ?I7nJ3Wf#;SMg+lI(6Ig;-exI~J@Bs+JhWH^f z%|I8CiwFdh9LvS{u(Zrc9)ORSTUc0JT3!Z`;mR^F2%8)0%d5a0tb+hRD&Cgt?Mg); zKv>_AN+kOS(nD|^97{yUM<8C{&Ybq;XJ==7Vwps&RvZE#oXZu*O69rYOm0x?ELNTB z%4SvQA-g*Sfn45dcYFP?%WiS|jq)oWl({chv&ffVFufrkVde*=Wy-Z$!3{}d2F z>M$`gKmDAW8kq+>mun*tF3k1y4Y;IVIN9eZ1AqaEM0zYa z+CMluIXK>zoGGOH$I^oX(LM+kFHdAAXL7kxD>{+wOOF&*y+N!ot7 z*U8h>3eDVha-mEnlf*0Od_EV5MUW`s4daPq0*yux*c%E!PP@bDf&&geZ1-4wHoe*9 zae&0ppfi~DpU=+zDVy*S2m}5gZf!@zA>57~vMxUVtN%CttNVU0xcECj;5~oFb%V?T z7%VP=JdqPd~4!AjC!3uH&`yW8DJt} z_r{S#D&$Wv*-W7fGD(maGHmPiRkKpbRBp=|JbV56=IQm@7uWRy(`q-G*WCiy>XvY} zz*5Olx>U-Ch(rWKJxDrPps;W-6hWh57=rwM4;*p@5MRXaciXH^kIQPe8njo2tA7R% z21pnIfurB#`UU!3MEr^IQIlbxzJ21ah%*NZI=b%*fiTT+aXgz4a$06{T(M6$Jt+{* z@P#u|gA>95$$fv!pkE*8i{Ei}W58oH=ro(02IfLAv$(vpGCw^%2OzZwe84JL@GZ_C zfNO1YbA4N~zYAX50QutX+RlzxDi+K4Hh1?W$LF%EbFlx<02)r@YKvZDu_zS4+Ume7 zCzooqT6u1AT%De2j5d#1b!9YIjb@$v^ip$Sb76!(g!vs>BNDZnAWtlaK(_CX>@2HRA^-&M@dakIfOYS0000bbVXQn zV{&C-bY(4MVRU5xGB7YXEigDOF*8&!Fgh?ZIx#sbFfuwYFq4_M?*IS*5p+dZbZT&A zXF6kVY;SUNaA9L*05P?E1SJ3f02p*dSafP|WoJ5bVQp}1X>MmNW?^G=Z*l-KcruOQ zY&ZY_03~!qSafY~WNBu3Eo5PIWdJfTFgYzSH!U(TR536*Ff=+aIV&(SIxsNk^xR_r O0000rg|0eDY;^~;Mh{c(>q)=1>BsfAH}ATwXTEkX-fHYY zAG#%k1&HTsD{qY81=|E=lo7RqfY|Q^{-Q$(Xz^%z?!&{w2ac^Ov|LBKoR7S=C-u$^Z2+&(keAAh-luDQ{U3v_uW}tMZ zm^JK3G24;q1akO5;+VY?XT0GXZ+?_O|8_Y_jIQHX-$t!!71|JC5-Ic}opP0o=_9Fx z>%kXqUE1V8Vroo;sa7VW(s>$n`O^7OV`YZaL~^NwB1LK_A*S5v$iafESDmj=y~Zpw zmr9 z#mJa6jRRKbwTq}INGx~K6gB)oI>DGfch~``FxY@Ib21I=elK#O2pGEqFD_C;%Y;zU z_J=*K)i2uQ=Ncz@>s|tViLIw>Cn419e-qUj-}|ybD@aqnA4njrRlZ{nZY7Qm+;uP^ zI_>!CVl(VJJa}eP?25Ipzy)Sz;%`#G1*%n29A-|M+9T=xRnffj?G_-6ZH;ov znm$UF4#6r@q0Kph{(PJML|SS52kg8KgUHCJF$-RF0rjp8g@-J1hUViw@-C0BBe2;q z6ZN`@qrr5otj>XU&uaOK{_Kj`E0J6+@Z?8MltXN3Y0Du3K3hj;_WyusPnr%IqQUQ- zWw2sklik8|9BJBv^`ZVI;SD%M3XjFbzw+-{@5u=bZyzl&g?GSJumK#Xjx>S1lc}<& zja36#7fZ|1r#RbPs@w$kr?ap~4^gplxgvF*or~WBv2q{*=$>ibn_q&8i}g8ia93e6 zT77%AG6lDcC{MXq;Nji zr$h8UmJJ6klDi&xPI&}_Y?lfxbZBU(Bxs~$FraHEOz*)%fsRODra_-cEY~0pm1IW3|R0a`zn~=->zI{t^9hoeL3e;Gh_teX(xMEfe~bD)`G1tbM0@`sR=|azPf{YQ6$`MU3AlX$fgymf@Rf zC}K*%*}Xqd;V&TcPFt_*H3$v{+HSq{T zcEuRBFXE(RNn0LEJ?cnFVS|}zB1g2I+GitCVN>n|B>xci3d$I^~qJy3XeL` zU7YRRXfz>PhBHbVdsr=x;C*?VGQb@hLp&e1sxR6aO7`U+afk@wb@eKZ6=WE%d?0= zy!;Y*6oBmp{r2_6=!*Ly`BP*jgq2*4#GzDOwY{ON^{Z?Tmf)0ql4=w#}+Oh?$b60Y$m5 zMyvK5^bSLmu?3O{QZQ9b!Vct&F`lTSjVM}~g=&>jF5xa!@CA&!q%!zIasxqpG0li- z>gp6wvVES#EDXjxVHi6+vl`+Nm?e#w4N&aYq+dwpF~1RqikjkesSU0Ep@bn&qfK7+ zx94rJkg{>aa4t+jpsXa&v!#~Fv8c=Y)6j~Qg(s#|tlV3_AanDx-Jn_x1PtcJWCz1jl~%W3q%p9Ofp(l?vPf^ek#O(lK?sVmZ@TqRz4MKe08bZpMZeElyU(pDhm`h1w8EpGK8}V_My$jje9^9jTu>;u)d&4|}i-WC+xtWuq1< zRI)VmPkC^buwgfo0ekHl_lZ%xWEXq(XBm&Ft-oP~Q7y{l7pd{nyCvQ2{BOoE`i zd&zp$PeKa>vSL_jlT!h=R6^9S(GdZTAY}R3iuI78kmMmyt$?u?&gw(Ef9s;qR{v=@ zu3r(sm+!Lty_!PdIVCxG2o8ok0LdKAiZ6P2@5Ou5vay9V9`*aRZY>7^GF`HC`-UwW z-uX||~K)8J};p*57-u7qh_^Qxa7z{;sBlg!0Tsw^{7lL|w?s(I%#CM{L((|dw_eZwh z-a6JU*fS@Ki;Hm>bvchPp?5Ff0)cuyklem#`9mS|>kif+u?eMyM`Jw3*Gd+a)}A4e zwA>C#D-NkVc*s_T-!9Wd*3VL9a34X_qDWDc7gZTi=L)~0T=_#^tj(u~465eFo`A>TRpZ$ zA>Ex&2#nJ`wJwr%rH#K|L<-#JOvg?{-h}P=z0hOtoy0ePMNE$D!m{8VRF%z=oK&49*&c3|7TwK_6ZyiC&NjWrX zMc-Arwr`v`hv6{{iAa1H6UGixQBg@qNTjBwcIqmGuTQm-Pg2(WJp(Rs>m$A`GcHHU zJ7;b_0fEo?+>iSWx2^1)oXyQmS|2e@ib2DA-P)`3^I!vw@7U^UYPY%#M;wlntVjDB zwoiwLzcIv3GT+#`*%G0AKF+?ezBLX1B)NNdcvxIi?cP#vOPNF?!@0b_Z`itGWMn+* zG@rKHmo>eW9VI1o5~1;Cn1o#{Z;DC5*~=$8QYG^eZv`s?H$i@sDMlYf&RRa|G@N$a zXPk6bWN*~w(j1E!DlMp@zQXcKA@j2UW&lh!i8}RAav4HgwR(kMa?pKdWGla~tqB^N zmde2b0& zy(#oy701$J8xaab76DrzK4!2&ZcZkK&Sg2H_R4SEs|dj(Z}Q^1;Z5l>H-1fUr{XPJ zPe7PXxlK(w?0=t>ZV8RxE=3n-35UrQOVx{djeUDJ6;z~XL~!yfnFPnt=GOqW=`GUA zfA>K)mB7jyot^~Oi2b79wLrg1-dwYX)!Yb z^I6~cqW9x?fpiPdL&l;R&3{AL zlUlAh)x^&9J#K0dkM_UIIdS@?U}#tJNBrTOv|6S(eKQ`;=l@QaN~O#yQ;0ZE;EZ~$ zX*lv`=7yYr7SC7zkG~;acq@Bt*ncVOucrLwph+ zl(_FRta+HOMy^9wV;Yu`4%6{|?!hy#_#iD;Gf)3BYfFdCw-#WnNa|$7)TE%K8AkMZ z7;YPgnE4e<2dN1$4I6&n_%I;%$6@1O>Rxk_8glmthC(iTI5{~vILuzS3e9}pJ4|r> z#Ls?0_`K!r>B7$4tBmb|*j`N}rTAIV4+VW#;af*BVmu9UbKEt4Cq3}y`uRDMKWNT| z7ds4c_C^pZfTiITPX1Dw_-Ck*TM2VEMqX1w2sMl<_= ztScsn_-=-_$gsXF2U+<2X;QI|MWyZrQVfjVJ0*?qyqNeo-20J0fxM1}qnGIOSpr*l zgVLFMfQnr53}Wjkz+i8XTKMlbbJQU}m*_4TxSz+-_f=d#2EN|uUtC;t=SA+Hx$Hs+ z1X!eR_vcQ3sNZX|9}gE-`QJ096s_z!?VhOh+ijm02Hf67%j7EDXMIkB2s`n@_&T+*gIjO@E7$h4Z>Y73 z)D2qnlPh-}j;%>IL8kzwaB|jRAJT9>q)tJ)BLT z426gS9=f~)0dwKlfg>eKszt9S@D#rggXOb_nwlEU#1ZGbKZX)ZzO{ebJ39717#cT{ zOb4#YzWkd$LB5XADv>Sysi8Z(jL_1z%g#p+2VtXojbRtD(1z)QjsU={oR~iVPfi?# zs<5ACLYj>^a9nwM2N?Np1Ki*2OiZ{)(#7a{JHsyE|W+9f$(!IcV#V`aOpSsv4Ki6t_)WPLv*xz z4oA8yFmTGm(VH9QO5zEL$Z|%s0V#~ju13~-L^^7$LFtnwExli4HUa$pS?kiTcvaRS zeCCC~vV{}{(?gPYbcl88{=MvZ;T}Ij;;nCjVJkDaU$I^?XOk{YxFAQp_vCy1L8F1M z`rF_^#XN2u`flzpI*ypwdj&}8nIvTWOtWdySMn%lD^NK*VHYk-VlG$QtIWeJ8u*Ak~O=?It8zm&57hC z0EQH=82G{^3ME4UGXI-of}F-ss7woxEqV_Qibtw^HVZT&YfVOs)zp$^+6uk5c@UZP zJ^KEM8Cv2a)kC>jgagoE@v($I;a>q1+@N`QQERw7ivp$z259xjl-O>jL5pD8xjRUv z0WD18fz&z?TTKkVjx`@bEh-zD1qBAO+_^ncJEVfDpwcFw<;WwT?PH{2YDQtH5DVHW zi_U1%)NX|UyfT`Ct}V7xFcAb{e6Ysq4}DDi)sTgAry9^z7*Z)x`|vSOS3+j1~`?Ng+;e)6+yNfx-X3CB59j~`2U0#AI+rB+# zu)(6NWLL}5l#CG#!-XCz0di=6J~zi2ad?Apv9bjl9w0Xz5x`}o!Z29B764L8y6gbP zZHE1X;k+`qQV$0OM9|t~uG#^uFcpIkg>+TrBCT!0n{uO|$~j2{sYXC+J>H;Ue1~cd z9Nh?Kv*mBZs;$V>b#pe_dzxcs?j@!maV#*v}K`_iXteES(wC3xfnZj z?bz^s>FQ3IvMN_CEiE-QHKnl=NIe4C8{kWS&!F4e+t&l1sHpoPNH|1uJUsf`SuBA~ zd4ylKDAK+?iY^<*r zLd2{jOhXFJnl$ayy?T6Pk0@|#otTVgO)UuSQ#b|Rv}X6&l9)+vO>Gi2lsTj?f}a_x zLktWs=D>?CE~W_7;|*!Sb=sy2>dn)wrBfTREsO3}s~oKmG(&Yxm}O0uRZ~;5wX*}r zu{*E0MQu%ut*!09t}Sc!cnm3POfdso7#otqp`7wNyr0{@B-ptflvb!3B7LL_sfm;=;&y*N)s~r^j9jW zKlSw_q(UHtPIx)-6i}n13*D>CZxhy-vPqLfs_;`&4y9nh6wre(>yp=DYZq6(P{~%O z7tZhe%dCLBp^mspbmPlci;`p=oKM2^Id0yML9|lT6?3i^na2-DUQAfqMy*NHJDfY7 z^dP+S_jPDj??;xa`gGcYhy})|SEsYRPuY_uH;!{7Ibp-Uxjs0*-qc_3KN3IMAp487 zs%fWcBx?hAEDsT*mBOFw+-}TCeX2=NB>a2_y$4}8=>5#qFtg=tKDk+)J}R2Eid^_@ z_w}B~a+1>c19E>4nX3bI8Cwn&K%L^~|5WZq?DYpMCf5siW>cfG?iy|ep81&ja{|dN zU@M~3{)e0^8ImIVsB&|R$LX}KCt?X-`b+4B2RXu5Mvr<-cEv^qjR3-Qj;{hy*_^Gk zcT)h_mm2+6FTp81+hsK!bDoZ8Fet{gzbF2oio>0>Kmwk-whonQJ29H5Q0tcguna;Z z7;bANm~Qxbo?hgmXfTtxy3It z56v-S?f>qlP*%n~x}Rk{SAk}7W=lU5G?eI{R__Jc$jN5zwRWBQk83d!6gX3APHZ%e zgay*yKLT?wc7?eWl=|&mQ)PtST7EX^^=I0V7amGCRjryUaooJw41Gp*u^He%FWRg7 zV{2iiB@?4EN<1T%Q~#qjTNn?rm3Z0IYyRvh?0f2C-xWWcN?hlP#l$@r=Tc*`My)Z{ zZHimvd{oos+av4Vv5xXQsiYNDOobN9#>#GgRWg262%MMFXg+~)XW zUA*6?sU-|oE^1i-v^4s{W6+4K$(lY>OJ`?iOG}>k?cpJeqEOL_OypBJQPKUEZCD!1 zt*7z;KFMbBr~7|bYwOE>?9^>;F7ns!&iH#6*CHOZpyFM5{Cnv}y zI=0^vfU>i7HNPV19*NB&7NY~xB$2!){11F6e$F7`IC9YNfAW||?Ji@~8-_a{r2F9| z<%K7WKdKTY!Xm4iU?8B?tgNhrq7Y31*Yq^Wg+1r_(<>n7*+bN63>ZgqHoy1G7+to#60hHW8`urQWL zASXK;C<2e3d`;T^KaCH&{#oG15gG={TC@b6d?VLdaG`J-I>_wLv7#0XKf;62!IwjX!`MF5P@`R%PEFCj(* z9&#vfOR)TWq(h4>MXw=~@ExR{*a_xoFiGvk??+>-&#Ac)?g_$z$e|*Ewz&RWHK%3( z=T6gF)M)TZ*AJXMdwK=hJY82o<)%DYEo|A;QuSP&nCv*s_?7fhLVvPIa^&=+kWwrt zNe`7D@>sEU>RZ`-eSLg<+})Q?oY^@zdK1UpY%WH+qkbuyCs)hi8h#QYhlYK3pnj07 zCt*FxN)Qc+qZV}9L6m9MZdsG{7SGi;lM*3^>E8@QlTZroYHew0>FPSvC);XlBs0T^ zf*$;-%(j+pED$DigvU)>mK}igV~4;=nz}=6Dzzo8v<1^rp`*{ZDiRC7$GJYfxSswb zQ9+U{hsgJNXD|{+TU#5E<&(|%BTZ_m(LZ6z*;~~L|6TpHEY&pz5YU0`R;%nKCBS;^ zQXtMS%SXu?MR0^!CYLfOr9X!+T6{d0b*z6TLlTj-MIHcVmmAZWjh_xQZNG%V1PKkH zIl|y<^>Jy}{w-FF&H9Gs00r5+VXI!L8p91V1&*6>`?r(k@-6}KGpw1nUg76lmJneh z-w4zo!zkqj*rYR%SzKKocLyU~+p`&6e%z9?Ubl};Gy=s0Ey@Tcb0oWHI~7-_SXs*K zV|;uZ$VM_UGGkW&v(IBpgb)5@ zu)?Zwm*4ZEsQw4tMSaI4qqc6vQsE>@}oJGlH4#p{k3U^ioP2iK5p<9G<8zp^x} zU`&xKvg_v@YG8uEf3e;EGEU`5XLe!gp<) z`S~3CcOWjv)1BLYk=2A1z)w&&A2<{`z=v_P6%w>8YC+5)s3|$qBJ$?b z646hk08_Evd^U>>`rTKktLdnyu#5m+#w)^^1W@%mU;SO7rLs zzlXD+pdet`YF(gIs4-JgQ=c9mb-TP<+uACyh0^V#At<31FAl4n2gonPBueTEDq3UT zMrCW!J*LwqHGXNCYlDE1w6*;^et$kXRHRK_`uo?-)fKqUV(pqOX+izFSSaU?_F)o)3$TBr#B;zK{WP4`0dDi^R)7CtJyf3NYgkovZ>30fg zE1slwg;Q_sKoWp6so>++1|5p3gGEZRod&WpCn@nB{$_?(P_wjgC(c~SIw$6XzBD-* za?<_pQYeBW^TR;O93({N#IW1N+tsu5da;Tc@TcU2)Hji%PZdA5-ih55R{CZL#+KlN zK*9t>r~p2x8mpJJ`akjU?Du5TKwY5>n}#2WLsouf3F%Rg$bC|V9;A3{2lA#W>!n{v zlW)q$S%kuC`4butIhbvro6ghS4)?YBin7D|&zQt*7IOMV^fG?6HIH(|&*;By%K>#$ z3Gu~B7836#Ry7;C_SnHjb-r*Q#(YG7I+^^!4?OCvgT;|<_`te+OqD-N(f3W!?tTwK z2=Q^jVKQsvB4)B@%WQNHNbX-hO`7y&`9jD>a#NUx&8VaR^9P{b^)W51N|`rs7){Oe z>Tq@FIUobpla_=X`!dV1DBme#4&y))?0agsK&|Q}+vc-}HfcUbB9DZx>py4{Y&L?# z7MoJ&!-$?%a<0Dm?tTRI`rlHqcr$|u_(T*p@EVy#T(Eh_&y2pm{&>DcgORp(a@w1- zL`yKRS*K#A_HGhX!JD9*K|Pa{g{L#6!c=}!24%@o0v)(Kq&(JxX^kwL8UXYi9UTET zK2{#e&X%QYVO}EIlZCLcD=qa!$T<>Ia`y7_a&d8SbaZreb@lR!oNMaAZ6hJEI>U6Q zR9KUt>w*aa)VqU|6AM%*92^{SL@yfW@FR~&)1Sv7iKC)$RAV?P;Cg@)hZhc_2GcS9 zxk`rtQc#m2wUByO#Ic|rif+{1a^_0N{$H799S_(anIE+3L>=8HAl49o!kY&Z* zl1)mFVO_s7a;3}4D=5Uq#?n|P$?{-8|D@j^jwR}6!qlma&bYxC&X6X!?7_bwsT!&$ zX0LlAW#I$RE$||^}C#ar)K^n$-HAslh`SNyw~q-*pHk>S-w^0 z(0+(jb&Xt#D>3DK?w`=WU{~EKmAez=w_)a}-MIvEnx0;LdtYB)2M1=tSb^&FL~1=f zy>6fao}NYok!70E)CWOI?hC3~K9F#o@YHq7L6dCNZe2mbP|M7?)-;$+&-`#oBdPF@ zcl7Y!%9aNP9Y_q68T(A#h=1VD?RCe-*=1m0s=)e}5-ZFgF9Ezvk@qX2qKFm)uJjAFT;l%pPY;Tic&fhN2M-jDFj6 z>BEGeY2DwLw{b!4R0m0O-XiC{P{O8Ob4>6{Jg)R7YNRth2 zVl5xVJ;l5fBOrIT7Qhw>y}{^-GFEpK_f4yA)lK!47SWty=vm$N9xa+ua|DGB*v&g~ZR$=zH099f*U&GQYmGnpjHhrxdj--e#f18$ajR__l>{r#S*_5w?)B*M|QZ%5h zN4neEs`!Ke(|`BcZJ?CVISqZN^hAqqUM=lC%;Dvl$q{`#`jUnN9=q;*@^;_~%kYs7 z;rkj&cSzFV#+Zjc`|N%T3@G5TrEFZl7&Bwuw=a>%uW__2gd+H3C0|NkHpw<=F-Yad z+$df+1e$O-gfHhF-54%#uB;h;nEQ5Fxb{re=PEg~Y&R-5nJ#X~&7)--+i2zz%6uVU zHoHb!-*93LuT^DdZ=m^t)X^lWho?#l{v^9V*98+09h6*oOC=9TGejd!A;RE#E5#JbUuAU9YbF@$9TS#@l)TJh`!#i-IR;iD zrZs*HLC@(@S41^V2cnM7d>Gn1LBfkD8 z(sH7IVcX!Glsj^g+hE-Ry?D#x#yB&1aSx2&tpa&Qw>FUq3e&D!<nk6_dk)vJpU<&5NAX1c`_65F-=zaE zs0>JYfS#TrcopEoqYxES!Fa;d+biljcOZ~Za&~r3D!L9+6NwnA+8Y~_2CYCPORxMgScy=yYf>#zyGQ&YIe-V_IQdD?9bH^Z3iBoNp^+LG{5PUVyvtQA*)y%ItQKD1-nTyA z4-XIdSjE#s63DZ-;p&EpNhnnohK9tO*RX`GJ9R(5i|_mVLHNvAIoaUT@R@O+X}-^M zY>mRZo@ba+3;RWz1W?aKO90@26M;H9ka#%oz7&81m?_ibNwWr;Brb?%dkD&jtXDN@ znRQTQZaGO4;CD(!odDZuYxDd(=O1mJ5P4-Zsr|DN*4#zD!7OvwJ&9U8>H;V`rl6-Q zY|yiX7oc$?5FG8$lUc1H^BSf>ym(oZ!kGFa|72<{U0A2=x?f|8m!*28Z z;(`w|@_}C~@!^FQF~@Han#4-X`@Ypxvx7$deqc5SUW5PM0Z{Yb-Uz@*V(1bub>*20 z_HA*|Au1>E@VY(jOaWGDWp!4*bK%Pk&>)_I_O1{>CHxiX8Y0@+-riF z!G?bh!e+soOXKT57(_kS;$5AxGoS~aot?e0u>mNJ0MhxNc<6T?Ke02t-jF!Sivkr#UUAmNgGV5bxIUV3ybi>fF26o_<{&Mf|tU*`8;6<_!Twj zjX^%(ki<4gB(VA10snU20&dNW5z%}k@2y0I5FE97!5)%6QvaER3i|wv7Z{MORwIj` zYjtqDsMV@|43Xp5u z0u0&7>F#9PVbd!6&c{0eJEpDuMXib@j;vZO@_2fWP{{uI{yxdq7=VJumJpb${;cI1 z13c+4vr7QGe1G?;Iy?G9VFkFK7A;keD4=$K;k}XW%Vb?S7@O(|@bSIZe*UZNemh_U zlpR2Iaz0%`i;G!I7xZqfNE-WpyAmj%{`Y(XtRRu!^G;}CAsI_ZKhyrmBI{S1iU!3De_=a-6$5%Mqh1%3 z{bjhmJ-_q*`dJ`>1qHEW#)VMk9L1G_h0cCtWF(+m`aWOp?C(S6iGPbZsgmlo1n-E) z{aLQUDF)N=vc0WuW_ENU(e7)zFLk(L4WnGrgYnSHa$i`mZUJEOH-H#}!+05f{mLdWWeiAH`sj!|%3qapx!Ipu zsVqMMS~yJPCmI8QytWO7U!yEP?CWXzlXxUJK^wML7Z>2~e@~oqkcy0<>>azEdI%(3;~Kz4RW;!%@>sA;HTjA%*DCr4qxG48jww^96_`+?3J zMgae3LcG(R;FLEUj*LAT%cJCag&rFyu>oUca&i(d^2G{#xVyVc=9`p^yIDufC$jnE z=Hav1Hm{Mt`!BrX=hcs=P8fg2Et}lcW6c~|r>T*DDu{r~a!KPUC@2W{zCG{73gqPG z&O@gurt;8<39DfBpXY^xqQbecYz*?d{n%%V1Sn*6h2|(UT`qiXTM*CmMMA*5}6)7?%JI zK^`N~ODR^_^=69Qjb7jCi1Y8E<2CAt5lAjRKER0x_);t%D(f=jR{jQ%1+iM|&jS?> z85y|?VfO=r;3csYu%u?nDawXh(Cw`j?-zCSmtakpf`AtXPvd zi@mdd{TC#CZaJyiQhe~#64H)(SSy#XcEPfXyUn;^rGB!5m6s5jpwtq#xEw>`KP<#NfaD)OA zWZMk%Jb=_sFznF0#>d6Q#n1n7y#rbODS6(-@k+EjlIaen#5oR)fU&psimvCxxT)>xw#3{(T$B_ z7xT@AXDo>iFQ-PWWQF1kg?Is^{>;owfMG>|1B?RTYq2pg01ca-nzAo%Bw8Z?r$~+e zCism;?wp;SUANP-5zv&oyA`DWvPwUBth=MnRqgp)bS)?eQ*n33hXKwiNPip>S(3lr z*hmAb*9%JQcwd}%#kCJDgw84S5EvmLz;6jo{mVqWJ4ow*U_hAT zZ+S6(w-q77g%g&Rw3Uk$2`qsAvf1e+VWPcx_Q`?wV&_Sk3U*Owy;M9|N{Sl z^LmEoUp+>&FM(S zs=-gJ>>pc^DB4>#Cg*6O%O3~sZw&aPiHB?d>&pLo0J5;%_kc6HnDvqGh${u&&laK3 zHT7w!W8@?$bLMP-=vPj+wY+TJyw<%q5L?RvAd#}_z}3Vc%*+(#q%pK74J|D#ZEZ+c zTcBb9qAC!nfU>^jc)Z6?rodw6&kuETnI(gS$L^WQwg%K#;Bsx3ep>IG4zO+lWW zQ|f{w^q2^MSiflL!k;_u6-!xCI4jxnW&Wf=8FnGg;uFY74Q1d3BY(^u)y!4S7 z=J^Im?RleXGR`h8MZ^JB5XL<=EhC=ldL@y`B4!~*XjB)4gIG7XmqQM0pa#Vr3X;BNeqqcXkaD=hMtEfaBE&hU@o<>h6+7C*w?D`7Fr8|0)pk;y5h5XqXoAFLR3Ld+uqHBZHG zVMfi50c(De22&(vG+GhY)ws9@QP|LwaA8SJhfC9pr}Q?)*aY|GJs7H=z#Cn%SF6L( zN}otTYFP|gBxVI}!OnY#4=&sw0x*@F~^ z^tceNizIqH8?2eu=7`;>yL3i=%3uXGA46f8V)r%2->`=tHj}VzWByooqbLary-))6 zk@hXTK~h(;Upcak|avZn-VSVYTTmB%NRSTGqO$)qWqn{P#+)MxE5NeuyKI3!Q3Zeoyw z7t>P)1rc8)B5A6R^L^10>ofFqCKeYGp+j<0<^tE9fi2~?QNlXL&GxSahQz<26T3>f z!8{tFYWUc4D|z+z6mOWn^Pd<$Zy5(D>R9PPl6lpc}Y&r|@d%|oflAgJ51 zcLzNAXAdRw7JxOeQS0=lelk++q+8>Uuyl8#B7`3yJJRz|ZJIr>P}IOndOkG^oD@=C zU3o6~0x+-~AdI(m9^_Cn{eX+wa6^{sCpKP$2B8#`W#6Q-D` zT~E)QPxp$ou(~kZ^OgZFHUc!$H_OJ1K-&eJTixKHKw`jG>OcUr?%yhj;rf`~1Y*WV W88_O_8-Ul+!KB3GMQeoh1OE@6TycW{ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/henle-ledger.png b/Documentation/pictures/henle-ledger.png new file mode 100644 index 0000000000000000000000000000000000000000..184b2f03977bc858a0103f6369cc111fffe64934 GIT binary patch literal 16286 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

    l@$zra7hFP- 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

    gx$HLVu?CAMZq&4@U9e%W$@NxVK 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 LV@3srC!zlU9mbMo literal 0 HcmV?d00001 diff --git a/Documentation/pictures/henle-suite1-fullpage.png b/Documentation/pictures/henle-suite1-fullpage.png new file mode 100644 index 0000000000000000000000000000000000000000..75ffa117910a1578d7029457b0fb5f914a5f374b GIT binary patch literal 82185 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⩝zQ^4RD8ZJI8Xz2v*^W_pG6?bzsFZ!a580# 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/henle-suite1-line.png b/Documentation/pictures/henle-suite1-line.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6a2647857c7bd3e40fe2a9b85a72a0c7ca483b GIT binary patch literal 29694 zcmd>lWmg={^EM6}oW)%ix5eFkae}+MYXSs!*98`Lf=dE{z+#KL6B67Bo&*v?9`4^c z|4;F}n3frLPA2qRZ~^eLqbA@zsMt4XfOBQH4#NG4-{Js z6-6YZhEyi-%NxL3)x-}8$z0*T3t5Z@^zo$-(_c+f33CaPkd%e^B;+m|35gy_O;OGu z7AO-#mZ8HpI!c$~9tq5#@DTCyw^^3qY68D}2*ysiI0>-OPzK?AKfEF;y`UIP z>?o14^aK~8P@stP@pVj-$;IHboM+lg85WuZh8mM~V!a?oi;O+vKEEBOYR604GzBD; zAvYvUBHE2&`W1ndUHi;Uy3m5zY)y8C;!tgRbb4TH$#Mli+$J2w3Lo4>_f!rBbeXn zqf^90fE7nug#8t1rjz6oGD;-gZyID&*hoj{On>wWX{0P4vyZ)uBA;S`W;KF|`(g;h zyrW@{XX_Q^zoZbOyNomsN#OsRXEiEdp1)DWyla3sHeyI*cMbrx9q)81&=cU845jQc z{?y*!+@03D6mEcKA3}{qE(~T_cMohfyGu+9>qa9}Xn1*Wzi*ih^GlF|zRlYZ**)PD zj0NPIPRE;9_Y#|D|B$BaVGa`kgTWwc5+VVY9X3>}5?Ok369c`m9~hI|Rk{1PIe+3t zFYp0cWt+;Xf753J&A+WUe|y8v&d*C|xVM82Q(b0cK-QuT9ae12S&+pybgeU@h5nvx zEe^rpQdSH~%v4xhaXmEuz=z!GN7f;lQ2A<^>qUQm=RK;+DooBVK1->9^xL%9)5a

    SS)_hr8D-+e6@khPZbdrVvQwN80z>cx~Y^VYIJA~&2zaA!1?Ot9oLzJ&If zxHO`kORXp{z_qa#8(57L3|OjGHG$TZrRsgc?W&bA1T)nh194=iF**mIplzsUL0v_B z$m;A)z`&Y4-Je49a7!qFO?t`Hq^viLDW1VCf=N@()L0I( zDR#AH{_`fzc*aQ;WBMvGh6U8opf}0%YLwGY4 z(QyHF$<)yIlr@Wne31?;M#oAak8}vt!TQq?5$9W^%g*f_?1Hb?I~bDP`r+LF28Y~H zyTa7)RYpEmq$l!}#ZdMI^XpF;Hn6F4u=pfLeo__&ZRS3bO2M=;8F){CkLstHKgtG1 z#%;zacPwYQ{eiy^?_$=bx)(E$pA`xJPD4uX)MOtex{rdYfHhwukn=E|!{h1jYOcE? zeLv1mf5n*mIwk*XQ?{j#F`43jUu4C0xz@xZKp1@(XddJH7@=1Bfkq8Sangd%c%A4O zT|y~GPwTS(Gh^W7LIK(^GB^L4YYz4VX)(?QVXG`%nARzK|E2Azp|EX8Y>fUoMli#byhY$b9&402-m`-YB&= zWr@-s>zuj54f6dr=D&5XNAm8Q`{bKuTD&9f*FBN_T{Z&x*MwCCw(2K?iN!6V#SS@y zh{SaDD5zlAkN0BwcgJc+Z$quimg$VAfEbe=HYj&EId5lW3)qgygIBL?89MZSx=e@& zV-%J5+4mH&iAYZ|DJu>GGe>N^$rmvmuu-S(@Nam2QPrJGG<0vs_NX`u>%7`w#uL<; z90@nDmuevQW_8zQiP2y;!YS;K{M9P&g-RmaQNSO}UXeg6pVLM{C#-($#E0W{(`q=p z!E(4e5sl3op2u+as?udt1u1`zu<1}z`H`EnOv`6<3Gu3b$BARRgpBOVdJ2$CtE@!V z7)aeEyioba2N7TFSm=9zZsFQ(-##Zl#+Rt^b)g=7g14TTvtg1^%-|lO;k>xqw;DX2 z6z%0~&wb~!>wp3_V{??WP|c{;x70?x>sVff2w4c~LD-Ad$&9B(;=bZt+M90n*X?<* z;(e-@cN7AXbQ>%AFLuWB)#|B1X*)6dWd)@1Y}(sdb_Y|lNiTx2_RzS{vKRZ60N~kq zr|1C4pb`PLVU(ix4oeKh`@Na3GN(pL*i#{^I%1VuZmqEJ?M1dyCmF?9b4|Hp(AYec zB>(t!7MvU}Iw;K;b#*F32yXcXYTbH)kDK>)Scko`7`AXa_wr&kTo}_7K&e5YjUcQM zuz9btkza&%iQ?ftwScu=r>_Mbtdfu~OUH7wXEcuBvo0rVWdJf_MX-EdTS0Z_n^)jg z)C%rS=l=bJJF{y(hAJ^pa6uKFh(wjkmdZ;%5zV+@GRT>VSut4Nj}jNZ(%FHSYJ)@o z%(?%|k&AeioF>QGNV+~Asgm!mcrTLZ@0uuxS#sH0en>5YmU>wr`n?#q6yqUiOE_Y& z=WzlbgXwLTVz3;()AM@{r;1Ya&|wrsis}KMLL8?k)OW$}d60m-=a;(1pTZ{%kC9;H}oem`y2~T(O zM=Q%u+9m|TjLD-5K=Ptk0(p*;nS$hMbfaiD`mg+%^bvvf4S=QQX`L!Jw3tk>%);Oj z_6QDfAGUA2mRq7H6{v})qAo^^@5zwK&M%`y2o97iK-G8xW|@z$rX0RJuSiPJQf%dR zn?L@1O136a&PcJgTS7zwn(A#(>juf(tX3j(@6l`Obki(Z33DOgx>=`_niK z#W#bqfkeKe;+brWsw4|-T0ng^kRm3JG-53OZ(yQXMBqwL(y7+To1q+L_a6btZANzN zwIr;S4=Gq<6$4aH89*SKq%|YYDiGcj`hEwYCPbTbQU?5J8&^@IY&JO@X*Z;Z#>Zf1 zcnRX>2mC&*io(zClk4QiEM;IwE4_}m)bqxFw>{WdHipC^J4Eb{Pn1c`9QP(syBp|S zk;&mX`9Q_13^ZrIPd1VMc{bVwJ&Y%knATWJLHTos1^M zT5mm0j8Qf&(*qF=l|_I>`D%5Q69c_C5{6wwV!V3ax=(wqEogp(jJi>u9uyGLE*?RUg;XV~F~an2#&BM#;Kcof}yZUTwa;vtT5R2hF(m zi^?P-9W6BiG=o3lz@GybrX6mYjOvU&m~OzsDJH{`3!-tBj~xd(egD)^i(nAJb|>|o z@h}#);}Sy)zDd9MEAkl(g@D+E1h|032<~-sU#4xu+XwLB&J6?|VK=0XOTSP_z9jve zoZlO1*(aIJ4;xb?5iVRu2Vm(Bf&&K?CA2ozF`h^<50`aYh#oiST5dh!rmI;dP3-}W zuGhLTiJ(ARns?T=dBz$-7u1LVYFK9r5%2tzGxMiNb#*N3QFX7a_h05jwq|a|V_Hvx zZ!fE3axud7&Ns5x1fVI;>xlG_*Fo%}S)ARovOPTN-9xfHU&Y3CNMVe4j`&}zQQ)F9 zm!LyM&1VRLqLAnVIjpWw_<+>c)nz}dWS9HrmvWK_OdwNseU~_HYdW8j;^(qdHZK>} zap6^gLJN$+d65pN7r#$jIX&F{LQV>R@!-p&{iZh(NIvXxF&xfysA(xzk!|IzmABMC zzP9xWer~R&8h;8w%qcuA$c`<=mC~K^bP3Sy@EzQDQAyP1CV#y?yeUgQsj{=uc}-}@ zA*UAE^tq_h4kFe?`VsjKTW;75jxa>H?N6}Y+gv%l@^`jzI;UTQa@xSnn-V@F%>0qg zw76~ZS~CgakE@#91#d``Gao4g?ktT2TCVxspd&3}%vW73*;Z<)ftR~sqtIcP=OrD>IWCHIDv}H&=nL40TB$J0*#T^g4wH?KNr#5N6 z({K9_8y796{rQjXcHn%!{N0)#2iEeTeB^j%waD^ulVZ4T+Ejlw$fyM2(qGRTV#@;N zYmeKj1s2qsl^5H_+V8#IXUBJ&nFP1D^Dg-rRElf#z|wQAE~TCdIPZ+}^UWTMZZ)|M zx+DXST*tX4MK@&lXm>V)6E;D#HL!^G5B2G9aNXc@zHPVH7}x0e*UgcIoj$;ipkPk4 z2Y{JxzbxSoW25hcZ^WYibc>(59C=Gu;B+e{9+<)1pAoto`XpZ7(%GW8UXn(c{OWNN zu0!6}QI}N`C9`t)KjH@D>@bYMqI~!~US&Z=GKg4v>qYjRI+Zs`~RNMF` z{PyNc_qIwxi?5#9yRBK|&>U}%X2+0kXQmU)TP4@@#5;?9E4fDGh;#A&2ZD zf^BzYt0EceqxM{4pQi8+2V`A4k2GMJ!V1|fr%DAf-gcAySY{hiyj@MZY#(Yb&L=fA z&+co;xtp9%Ls|}FJHrHUdverF_J?Km5S`@5&@nx%41VBHg}o-e?T|c@Nn*+e0>i}2 z%k=ce%E@nCf;tdxi%xyT492fg=7M8AG1+*Gg10P7xhoIR* zIn#m>8#NWl#*yQhz4)gI>-M|dSf_EZPj&m1Q*h=advEpihrWn5-=bV%JO!%CujRVF zK~C!IOemFgGqvsqlDX(aKiE%FAxUmS8>U_4q_zbmF4vtl!8`2m%O&G{%6j~#urE@?V=bDjuSGMABTI|cNn}1h z)UQaUy`>VH+HvV<0De86cI2XMd;nNi#QSmy?u?M6lWVh%Omx$ihZ#2J5RRZcWUN>C z{(J4q;2=xp7)89G$!|!nC}Ei7460C6CfnDask}sJWYo#@WxuJJSHLW->-3i7Jq`_! z*z9N^-%(z@#nE1vMx#}~<?yw4bEexj&LyXm+ESj{GZNu_Kq=i7sABj*@x=s< zIp~YoDcZ$)BuPbXj=DRy$jt?~2nwm)^Zf9N>S|d^_u14Tt25!e+lVlu2_BQnZ+vZ|cIsvNAbR*lrr6=Pc-S(A{zKXo5z2QC{(ZDf z9~%WdYBdpLyVi~*VFX8MNTpuI)pL@ja1g47ah={5bQ4f)@i_DbOo{2CNUljz#6Fr7 z&N@vYIeYW>;k0fISF7-PahL^KAPaDV#$aMfFmyz@2m;Gew(BGXHSIEM;`>Lb3vaFe zX{Rw!l6_Ti=i*+fBSOF0S?YTLbn**(w0R0%9jNN^WHK6-xkea8-fpeJPr0=9P^BYf zkfKC>N_%EIzwh#z2H6bb-P>woA)T?v(?9EXjHUl{zSh+&_4GW} z$Fm3XpGKJ$@-3tmc?vsSr1U;QJt$?e$;gV>oQS6~da{YAQ-+2>D57kue9fCfq|MWO z02-iI260!p>j%c&>fA$W&3DCq7iYPIBPxJVv?SN83;7HGxu7$LvOXHC(&SS2d|IlOZdzY=xxXjxsyLj(ut)T{cm1 zK9uG2QzIWbltfR=r;0kD}1Hc=0OcjbC_LYHxlg6e<;1)hH?#@Dn0XLRAFLTX*be zWZ;RKKU65;DY$f+-N?LV5ta=F@Hg@~j0-q7RJB9`;Od;E*ko_{{47tRZA41~{=HYk z-y6Cn8Y&`C;6Co;I@~jfw65sQnX^11F=t_LYz|XgAbuIeqO&6l&$Zq`Y^fDgWqOgF znj9v~3I-wfA=HJ)S+8NdJvl8o~ld?UOfv+_!C|J;z zU14Nm5iU99N1tI78k2_ZUtl}d1)DNC-szw_PQPgN=k{kAURjOJ;WKi}sq9CV=LEvx zp_Q$|pxso(DF3s(Fl26?oCy>j$FyU1P5#T|2b0b95dS=fXhhEU%5IT4%UgbT*hJ~= z!45?#Un12`*dAeTd>j2P(ahdcj6BgFCe(NzpT!Ak1kwL;kx{+K0<-fOX?(d&=40$h6Y~P~eIg{EZW%`R ziroO@NfO_fzK_+U-V6_s%u1a!Q5W{_%8|0V&m4XPm|gE4a15+faCLa~R~bN+ zV52nApr~M^AS%6Ilvp75kWa_qBh<9R_{O3ocS5Z2$K1)~AA=@;9&av2#^AHl2kvPi z_d4YyR0Bu2ux`;v;GOeHWi-4SnHKmi5H`EeSKTMfFLIcdHoJ5+>R*;By9qoNJS)&L z$Z_Y95xnr1q3$z9HV+lTS&jJnfa`cBcm{ERM6kGD`*>vUb|(Hlu`U|)Pejrxrfn_l zAT`({?9A%*Y!FpJHXxe2;qh98(i4c~3)3QoOD@I$u!cwTfA8D90#}7p$=)3TqAsRs zVcEYhbM(dH=J*7XO)hedKP~f#Z_ZveI_%SJDWbN1Ji6GsPMv%emKoRc-leZpkQFKu zY78Cg>stf<322C8keYT0#UQ>JBfk4m(h7MNB_rA`>^z?L>^}mO3`eU}E?#&$_RZcn zOGxG5(hv4X7e2!H^x3M{Gk|$FvZR$shMODH$z0YXB(PW+ucZWjNlAFe^1f53p-}g8 zh9GN@`@Uz1fng#C`7nFjSqGKYY@U|qr+!{BCXdo+v!2L^*=@yW^^0Z;1tZU0$=RjX zOR{wiTISt#1ncZ;Hne}{K}x5qf042;d2RL_Uw2*lV>ta}6Z!URnh?(0fDz0^cS|UB zk@<7^gCalNE^>eX>GGfU2oqbBT1>l#_ibB z(n(Az$Hz4-2KTqhk%^~Mt}RxoR@e%~Y+&DnPJI_;Z?ebMY_v~M;T*k^s?f)n?jovv zd?qu4eYCC}`}&&wl7n_M){($XT*{rT)QHb6=LO0MsamWY_4~hD&n?~6=hPgIHzZx9 zDVV;#cJT(x^Vj)|ZLG75E^Uk!o9nc$*6{}e#Pn*)vfBjA0{+=n&s)OL@=z|T5@+bf zjDmjdOOWC&>h%zs_9U_H&q=&flyXxKl%y=3raivxMpY$Cr)8#&Q`n#1xob;bGw$24R)r4?II7>+RwP+6zsd9l zI-+xj){FY!3DSgtd)pap&izp&eyf(as*wiUkhTSejJDa=i9 z!4KT(WWD!mLVNI$@h#LXNGA{DX#`aqbw*AI>JNh(jY+&vjRw}5BTeqzBL3`aBGrH~ z9>_lK9*ekeCOepqC_!ux1i}N`zLakIKPjeyceQ-aby&w?g4t#;mD7ZoP?;H7ia-85 zrZ^uM{=C*zn8FVOZl{k~{mdK)KAd`u=Agx&Q##%vXY!Wa@3r{;!lYHAr}F-=3X8O? zBa;rr)k*dt#_9spzADQFEw8?@M?_acu;pW;;{B(`h?zKZDw%Q#%UR4PVzMdYVJi1s zqh*F&8=2|xMr)2QHwgWlPdD~z0i}(8QUxjk(yQvCH*J)>DmpKDCR64pcPB>9aq59$ zRj!&XIV3VirXjMlP;ebSmfUG7ymX(CcyCz~vtRUPa`Gdu=B#*Egj zWcAj$0uO6ZlbzOZKOrbxj?sk7fzlx5p6z**Ni>p=fm#vEjtOP_A;GaatzFdNY`YxG z2Wg#;Gm$vVxXy;@no)yTMEwW!zyYbTwjd#?MxR4VsoWK1g{wS`-q4&FXrFRRGeW)Y zcuOLqP6^aPE0!;wxHRQC>~Dn2(-4_K8~6OXp}>%E*+dE3wM_^bHX+NmEqN#(C<$Pz zP(y~v;AtoDk2z-zN3P)1MiBoj4K?o1L)N>)elZM+DPbOdW5Zr7HDW5#Q9)O+?aPc- zND=L?%!wVNd5tLK%bDN)-)21~CsT9hpd*H$MdEi_O~cV6f`!2r6M74XeaN)$tiNr) z=Xdy>Xe%ROS%C|by*zp4=HRYgJ7M88E8Td^!{iLwBHs0e7SCFeC=k?Uk~xtudQii( z6rD|ax$D7#A^zcvbTEgntJ5^#uRFIuU0J-(J)1?*ORhontW${$Oi)o^$`~V-U|Q3W zl6aHwZREI-ue5=jP2j6};ZLz7_Vjn^tUPD+4%l?8GYG{rRekNeN(a`1kX|wK~cXGf@J7h~+e~E(AY75I6+e11*ls>G!8@ zI~8<44ODeMu>HA3Hmvxiyrc5YxI)Or0TY3IE-VadU8PMBXV zG+1aeIEzZ?lbYuNMe~BceaZ=uq0|hl`L?+rA4f^pZFD95tqzT$lEIMZSsPkg+A;>z z8_AG*osVq(DJpu>CbP-ogfIC0PlwJ7>jhy3PW&_WaxB}p*}lIH8loW6v!Ox)&Gz`k*%YkYyp_eQ3G zSMUwNb29e+evz{`e9dHaUrU!CPUZ^JaaF(5`#Pp0KQY%MKk=$K5$m0nzUANWyaain z>QyoG_h6-5o{83sZ2i5I8H#ES+3ysAbe8HF)T)9#6GtDT|EYy^(^zU^>2_@&jN~zcgur$R1xx-vx-%Ozl$zuW)+P`Y?DN#&Y3%%BIMb@*pK+<5q=%c z?PA%u*XivwZU2PmkOM7e$rpYyYTt?=ecKyEhWvc!$?Fi5l#+%Duk>&_IdPQ>|Nbjx z`)&54-3$b@1Pc5ti>}WzE9|Y+Og!HL2XhgpnY_uM%(Lj zBci#8%Mf1R7(T(luRGH7#A5S@{Bj9Ob|U1d`o$<~m<=t=Qxvyxc_4bSw~*7TI~Ha!r=3`?!xA{f2_kqFA_Lh>id#)wBCn+ku zxMN|m8Ad&ZCMx7*Xn_qAOmrX-~))Z=fKW$Zg3 zlke`@a{%K@*=a!&_~SO39;Q4-)hmX~A063W^OCXVikkg&ZqUqY(Rh#h7|~cwI`tuD zzjkuYwUL|tszz^ng;Im{t{~KZ)lORH@iJpz*7VY0qni3Wk2lxI*vejPuG6n`8BmUSGSw*Cit}@^|nCmGsdkLhU*j=@01E9&mUFwD>H^5C&_P2+F)b- zmZ$xk?NWtrg}V=8w?6G$Zh~;RN51MmbB@Fk2XlhLq5`Hk*COm>BEPp)Oy>TEY-MQW zwq%_PeLQ83ws?4VVBuijE2$){{Veb2aely<``dF>=N9!bI3y_KgQQBh#!t6q?HPOM z0eayS>utf)QsWqPx!yK|ug>ts+Qi%x@3__YXK~X`^&d;0>+9W%`ZT}Q?5j_#8k7GyAQq*`VD&@xLKe!7Xqt^wrT-bC zuZd_jy(m06@B2fNahq7f08{67s}Gutgs<$ zO|D$J)h*9L;#&(=l2`d0R+0Gu41!D!rQ;}GyK3ndj>kXAIe1BF8W8@Fbsf~A z&i`)6f(Dm;F6{&EhS# znZ4bx&W4NLT%b^H7r73B)>;t*V+U<>*46y$+5NcK!R7(WhMO zJ433AF$uLVV|VVfuLJRHu9&Ybhl3ee)#Uz+_k+6QuwUtj@#IDy&l)N}PU4YI7%qmGBwW!#w;*<%-i?R_J?x zeoCpUPPIjI26SY{cQn?6&HL&x8zTXbiQwtuM!k)plUyY_rzr2Wu)XPe*6Z5^)*Gc(TyklrL8>1{dW7c0x6k#Vu|s{TDR&wfaYu1*32J)%fcMoFu)dM7@XsGKaTdry`iQ~!gCG__c0aDY#+UJG$@-IMH};3=jyeU^hiU( zfy#_ajl233`>0wr(ZrUP3I_gGUASfoxJx3>H`L!-4nbcW_=X*!m0@i-=+CO74&@sa z&G6BA1sPT6_GBr&SAH#q&#kDL7HumZT+b}e`e&aZr5J>;8w7~vIPER#^wx3w5)s2>G(W4H6!E>y5iXscA8H##=F})Yc4uZ}iY9oT`G6#`owSu&5Rq!Y0`4c3 zkk^_LN^s`0f|Ohm$Z&em^L?zXVrhe&JjjE6m)nzedb5Jk^?Jtv=j$?I5dvH&a=@!* zR(YeZ$hse?We+JN@>F@Gx~gwx$G&f;noytbF+*!d0`4#Eg<06MpSn=HL)*E&L)p~| zC6zG&hw@aIUaecVY&g| zwcdmyOQJ$xlNQmf?YKI_UJtp5*0zUSX;8_E@Q2&BEU|l?!SB?A24$I959HPHdoaoP zU)r22eP%i&6ms>qGU5=goWB78-B)ok!n6BnG2j0_zWtWX)afmie(iL0)Kg;r_0(7E zFeo~YcAq}HsevW0;4pMlInYosTHp@pJohFH*U2xu#9*Z;q+lDkW4a$Y}8xgiZ;&NRJ9FU$e)K zqusvcFf$%Trmo*Tk+D5=*{s{qnceH|3kg-(n6=oN!|4|+^KYapaI1HuaG2i1q{z4R z9me=p9nC&%-##0eHodu3p%T5aMQ76m($&`l9WFhOm9uj+#gsd zs5vqO@t1-<585R)^J*3+GEInce5Zn=O?*FkTW0UzjC!#aq3vH_p>Qt~rFMS#4PPwd-+BEE(4iO&s5**)a z5*5qY?Me{M7(HyOTpL}Pl%(y9_OT5}NlzU3jzO^RWkxE_o!bH`x4KE>kbTGx*nGO|U#ir>S73fP& z*K6K8>pSPGy)Az6ViD!*4s`RC;3t>rq!U+vz`O!reiX#vv#7x7tx))gZt$zRV$4V2 zaXk>W?oys;`hsmCpE0%E``XR9F##J7GKmcV-w3R3xWJFr_F2qIL?HL5L`t0VONFIJTQ!c=pENla0_E{?YVki90A z$JNC~Aoq#3_%Q-KOz}D~;4Iu_=_Hr(NWF&NX}-CtG^nT43P;bQAmQj3rCP~7=-?QD8B^#(K_n~gi3 zvp6x!HLM2U&e?T>sT-a_s+4i=iBf5B7d2U1Mk`aM9<%gywTTPGeo~uF*mH>R)>Snc8x;P&0!;C^|))$Yips!f#fi|2!c$zL8zg-oVR=max)N(=WG;BC6Zra*n+hVb;NLYvkpAdN%CVLM)7x8@ffC)eZbqOX zOXmkNAZcTS8g0cX<6mOn{7amQLgaM3amtj*m)uh@aP<0&H-ZLe$%4_7V%P|6WwK#) zSA}xZsOciPR^;()vLn=_K#Vay8I9;wxrZ_9MYRvGFZ(nNn5^@1B;XmeYeIPW$Z4RT z%x74|TU>R$#gNCg-I@|CVHP|S#u#i9T^@}~YNPhZ&*a+tf%1x~L9F+LXHK7lTo+9N zJHzS;wjXq&O0jfOQf--sMA;n$c>0!itH?8M7;2?##}yYZjb$9GUyu4n+Om196ZLsp z$a4RHH+Lt@XV{H$23tCG>dm}PK@ifh9ynHPs8e`EzZ!dCGUT|cQu2?uHQce{zNR7)eoDMv(0QI3_RpOt&sRQ4@do^5x}2R5{|3# zPqMD!B9NT!u*(W(Y0&kX9ZTuxAs6Q(@|d?e9$kagZV4J8O_RG5>(|d@g8UQkJ|*n^ zc6I!EARTg0+w?r(ccnHbt2jsu^hFTw*6)Wz`^$ooNTGo;4Ja*r6}^OQ`fgr#<0w*r+S^gE7TPLOS>K+NU_x*B9O z#4K3jqZ!6E%;hQk#nw*~Yg!p60<0YRZb7KrTcgVMjyKrUvO;ow(^Vwr5k}kcp_8bg ziOKrGK&r}`P-VZ2>swS;#s2=jTRS?&L?Bsa*D3Q>_F0{`~CM>qu$D z$T{n(yrky~BAg4qCf(;{)*YRr7Svtk^*yR&h-rrX3TLj?xDMYIhBgn!n2d86wiSBq zIj$*^2o#LoT(H-?4j>pXyt3B~@ZCd9lfsq>%U>WKfO?2xK${=XycYxth0E^O4-; zE*jnuvtxTNBYIv#c*UB`$HYUfBZ@rTS#ut$}=maUgti+-27|V z-X&CD%-N(&TtjNlH3{&U?;q}8s^p^hP zVq)~ov@Ow6ftr|-_-fN8pd)sr(U!r?SP6->){mw3$mH5H_?Bis-)D2<>wFKw2arEM z)63806QWYJAz70J7?9c=^_!we3WXu0DOk&%inDv++TjJ{U*HpSv z)#Z=${>0X=FDLaBHn&SH!nKElJuI1ffVD4XgXF~Z+Q0#Y%R%bg1R_w}Sd)##P#F0! zD^0|1aKyiXVhqg@oJkSq`|zrQ*l!kTjxW=!CzpiFjw1OnLz!M)H8G|W`K>Ob2i)7n zYj?-9O~{mDC8_K*sE8|MTi~HXPK5Emy>f7|;hSn-k-#LDMRjV!ooq5qy4tGlXFQ^a zXl0cUNS4AB`geJK@U>G4&vJUAfaao!Bo$zPF9a3Gs2$1+IkE6JgPt z%4idgPQjNK*U9>a;V&OE&UKN?Tdu8KmPrjNmWxr#C!&l~2b%A2SMl5+2U0K-tv@)) zBBB7=mPn#NlTyj=(wlXxZ!YSq5`xHyjVgzX5ezEBHy=rJw!AWeluD~opwlWk$)qy%38ojKeAsOoP9z$^L2F( zn$=`LVdl+xJNAHXB0+p3zqUbbVdk1Lbd*T?fA`>$5R;gn7JwcfTlKwsU$7IB#k$Yl zhzg7Df)SnO#g{qJBVp+ssjnXHHlLtTTDI}?QKVRCQJJYJvHLh&zTXig4X0QFoQZ3; z{AEHsLsg59X&-aj+<`*S3_ik|I0M;Wf_$3sNsi+#41 zAhnTCnnXWr(O@I0fkQ+X#xL9|dNlIds(R{8EL7OIsxVyMNB)0>ukH2G6^b*t`k81u zUuac$QOQKR=u#K!#V+nONdzqZJC)P|9-`#94_LaxhBfnY>^x;;t@|$|DlJ&tYecas z!0j`sdjt)D%IPSDF*q)m?)8DNLZ*` zFLhAlkO}@%=YO^T8{|bomnDC(%Zv0Xf)D;*a{^){oBy9WYWzFEf=Vz5R@Ef@k5)I& zBCiEFnwsOg}k%&6wfCIy77^t1QB2)ju)r*;*vVy9x28IvP7?6DuL(%lVmY^Ng7W;^Ilj%jK zBaHPU=F}R%fHze+CZB|y2eib*N+916w3k)Jm>!SePj;&s5-zEx$-l+n-W{29gsf-O zRRef=8XsxHUG4h!2iwL9RP2g~4jyKzu7^4z)lCmCxJr)erJy zaRaTJI${9Uo#7ZoAlS34#FV*;y0Zb3LI#;}nSMc@eeU)zH7v-Uzm$&jg-2&HNgL}q zgjJDhbtlS~hAArNv>_5wDB^;NcdQ#Ysc`-q>lPezgN`(6K74ieoBS{OU9gaJcTXhM z3m%z}vL{0%qW&qH$v@Y8tR0lzd+Jm$gUufu>B%DncjzH(A}Pj$%#ETr zzfce7dS1@a$dKd{VPP=L?>`FP*mif{yykoYAG~Luf~OK)LgbpNSRbnK7z^G^0O!4- z?(r~3aeJgFW&IwKaCd89l<~et!o_g`fq^)z7iN+i_1Z`)#_ox>wP4xa;rf*I^I~ex zT$nquMKqV2{ST>ku;rQQi2J7g&(DRm3x6|Kfalfa|8qQ)E_+TeC2Y)VmVqUgaGBj} z<~!_Et{I2@EaO3b_9HUsNiz?!JEN>IQ9071CgIQbeEELsv%emr-uf4Aw}>*0KFJ4N z7Un4eooWlVLzh?OvClhBzrDdM7Mqu6Cy06`6T?(&O_oAVoQ^L(Ajca!|LjE1{!OF@47Qr7An|!! zsFYovKx4IVZ4Wtos-`pO>@nuE-_Ea$i>x+(z(sojTe7|^}^kbC} zss|khH7};xHq13QQI!Z0V|d`Cs8HprP4P7JP1D@pUv5`ETzw!aTaa3%8*M#rPp zW;TUYBs20+3Lh(x+FOS!IjJteU9?YiiZ$TD#F|7?!#kuqoX|!xmqYojmwZTC-F_NP z9p)K0r&l&eQvzemFF#Tb8R63u>5DH=q>r1^i+IrrEPc7-ICL?DebM~>APHyb-^y`Kq{y6yWEoXD3+KPM5Eynefq*j~Te(5yJNN~x% zbumjao1IBkkzI-gboRdS5Or%xvM{#^vnQGJw^Sh4$JX5U2H$#;>Qg4#(*LS6YnAbP z{Ij4&4oS49YsVnpF+^=9*9gf>#$E2pb7(*aeo>-xD{H1f=Kb-vk7>6mp0C<{ENO(T z@dYxAZLGmLM_K0~bw$7|%W3FpGV)FEg+3$I6&hbm`JpDKt~!za3+^(DYE`7wH8SbZ zt;$!Xaf=6DZ~M)<;b{+Qb#x(LC#}I|f zS0*7#7k#VKDood4Is|JuLMvz|=tCaz>?ZQNiX8kg=6 zEpZ+>G-)g&XwO!GsU>p`Ta7mP4WDhqE;22jaVcE%%A59O#iL=4Wu2+R>$KY5WW&>6 zDf2N(4q-U~J!D`?YpSXhj9Oo>5@y!b>hJZ3GYr<@A8)b0jSiJQblF^8{b2ucDA}m? zVSVn@Wr3UK!51 zrW^tkEP-Lh0M1K?!>1%GHv@@3OrjiYZ{fA}S=Byin90w>37YGeBZc6)qQHN}oUm1Y$9FS2m7C7PP7T z>6}ksdPciMdjZz(*b^I4LKD%6-<>K(^?@Vi+L)GR%}Wr78FMLXP=&z2|6u`E8eF9- zfPjz9nJ4)iHtcvj%R09lKN(^Ibow$_!9l7ao7;1*RjKEa#TC+)3#!fP>WkAl!~Wb2 z6i!~&cQo$~W(dKp7h%79w1ekk6|rB7A}6+`*a3mpgx~WRYO-@@IVgoRC%UiqFrISu z9r>+XU3b&Q{#~oeTp0s)Q5ezq_>**oG=rsq4?+$v8t@g}i4MzhvQn`zUHge&+3cTE zyNnjq&vSEji+N}hrjOng{L;n*O^c(zl!<0b>U!b8bYt*=TfKp`-Ey13{#_%Qc&rgbxo+ni4wU8n$x@3xV4xPcwpg zsmIONbn`IdaI*+A`?3P*|J%Fs__)sM{^M`$%gBqoNM2++b{5-7oPB{pfRvUcgaU!` zqqHGFfffpsQV0#DErn3_ltO4&N|The0RjP%W+9L!DbOZ%7ANtRc$F8)mSkBPNu%}m z$6SqO)y!O3vK{90dfA$}bDz0)X6}8?^PJ~=&rzWfL%Io4tz?$ycr5MtyKMK>yhrS^ z*AHyg=uzv`+OEf34fa@+G^f76(^*`l#k0)@Z_r@WQ_dv#Bn^6$>oiNJ#iF8mEfBTB zdh^ZGYuG~Vdc;B94VZp*}ssz<*%t)e38^r}J!>MV6Y zpH*2Rx$E>}o3fNF&~YN7nzdP{(`=hWG%GVKs!4->532B7XJ}QgM!jf3num5V-^ej* zU!cR7xN#k@+IEfhYqBD3ztrFJNaF8=2&)#gDhaN?Od8OO1-gu2g~LYlYS1KNhn04S zSQ|_t;=gwULqSf7RQ}OBZJrJTJP-tB{EI)Bq5;k?!!L1sFo14V`phz{-$6ZzTX#-c zG-z(3wiPwQ-#T-tG zpdA%chc-ktd&V5glJ6w@0=sEVa%v9qe=6)z3#_a z=lF$RB<)?LJYg=zyQz8$ji@nao@GqTV&r5TFR~bq~ zV|Q4pL$jFv6iH&I1}$DpFbmEVY*YApW1RuB4Txchxpt{G<}f1e_k{OYV*qmun62Mf zjwP_8M};xv;)1I(<%X2|ybq~zop%MVlw)j4tM^x{@`<8b{m>15UUaK{?s0R`t-{gg z*#`CLQ=w8!xo%a4%ra)wP|k#36O3rHz95l! z%rpAU*C&Es=nv&e{=S`lrdNX_suH8EwxH8%b67XQ+H#zDH@(?^*cRe=pSX3HDom&0sl&Lgo(2!Zd_Z?F;NjS-Xm|0@#>@`0a^KRE{vpTHM>qwCI zv{_rCt8OsIAu-LGwVRKKUS(-rNAha=Fk;FLsWD>Mqq_Z7@LKI8uBx~zXp!YQ9nfo= zJ^Di^CHovm8>>e|M4e`jh)yS~(qW+iRY_;PP`Nq5O*5WQWwNw*@lP|~UNl&xOpWnt zWTNgeagaJP2MHwRX!8DB?wPuL~9l>B)7N~gc);62G+AIs)XSaJ)s?x9AAvIzejTtd0 zhLeq&r`KNf8tihuUJVJ8*R9=mbEb~VPDIoW1Bvy5CLFO&d+@kNrxmgXVs#nSuR^~n z6Jze#!K2w3LxE;dO``6!#yXs%8i(z(@~DJ3jIX}L|IQN8W0o@2MhqA*KZq3WQ*&Ge zF~s?zN8A{q-Md4kqI|%cLnTC+<24~hyQwYaCH;SNN&a0ckNGP1h}U@7`R+QZpLOAk zU%fLa2I`&SJo9L<-D~yxbi(}pb~5CUea@YM*!N+NyWgzRPRoGuSaG-O{n{a{^Vz&UuBmXuXWSIX zXFuYjlM1Zjsd{q`tH0&LzU0-34*p5+@k<}`ly3))lo9t>n6o}ahc?&vlugBchJdmY zBrNLKXSOL}im4!eTPen+{aH7;z}*GNg?9Q^x7&)7ebGzu>|L*~Xw^3?&xoikl&Q!} z9`sSa3_OL)+?Gf7)Naib%x|X;`FLl&o+9sjZ=(F%FTV=kQ6l%bB$L_;$MqLR^*tGKjf1h^2Vh3)fs;3_wfUN z891h|^l}&bZbsVyH+qv5er11_%&Wz4tetL!FqJT!5=V;@W3YC-QMk(BP9M?aTY1fI z%->n#vz{_+*cPwyV4fDk>O!rIE(+0RYV>=n7rHmmr|rpG2`y4^_+cjZIm^E#wLcgt zQ~gIg;17H(&t9WG;Ifn|#YcQ9#LZKXhV6v*#@u^!@8#m;w zuFII)Mcn8#eZJ!NU17IdFp^fp>wpj0Y+Jp@U%2jP^dg$@u6cdHK^~$4;gmgjQ@0A(StKxl$KlOQQ zeLwF2=kq?Fv2D8UsHsiKilg5j*_p9*GH+STh%qt!;xp9oNSyM#=Y81Qvgj~k`jURf zz3R;~YQ$bqPa%f^zQ>lVp7N#M>U#X0D=c@8^|&}?kN@%?!K2GP>FT0lEHl}YXBqqW zpyY%u@oZ+yA3E%o0xFaJQJVQJglfGB;bJkghs@#}%`xxK49x6Mtz5)GUFv)?!~8OA z{iMg*Dr$X*u%A9xWl=u2xmmqBT~=sw#E^)nbv9aVI53z|t8BL_7@S;d#Kk!?(v7p< zKV?1luLO_MQ@9QrveCo(?b968nd=QQ1a3DW;>*S^43L4_(!+AS2ZN4*Y>_S1MOZe3O> zTry8&i7lx1ul_a5zVUA;o=P>V0sf&8@9+d(lU9lGuYB2;eH5RShY>>=2^S`e!LUvP1~4~cugopk$d&dqe(b|)#bNFcQY|L2j3q&0;SDBbOi0LrPo{ ziSttb<4?R9#f5krO-2%F)(WFn%>1m{i=TgIW{7{7(?v%{5W zce*b7MMTY2rphb_Qa($SVdX}|b#ady_K?~XMeR`1v#5wMn=G->?kRdxJkIy4AgYFJs%;?#p8oo^+;fhL{2G$f&leA(f7(3_7d$`oKmTZ82mdFmU~r=}_rZeU9i0G60R( z;+H9g=YpK2A2RD@W@92tQ>F79GGwt{eF>HJy>3X^|6f$A4h(wyZ#;rCcO2(<=YEpi zPEn=bkaFXr*U4vQgXUy)Y-LhySh->GBn4Mn?3%Q&oWU$>SkHKchf}tEDO9|{Nq$g( z4tU64qzz3j^WhLjE0pj0bjtHyFZ9A`IL>ojkV7^%o=#%aFP-5V!Mt#8)_uq6$k=kR zoAR__t}1haZm6sXO>kw%HQ;cn9Lpgj=T30N?B_8Sdi$nHB?_-;Mrn9`Hbc3e?p4L}mWW zXA7FQ)Pz(!%%q2{E9Kc-*Z9iApTfNSyYC^6dR~7K#_qjB~X^@`2yHN6<<&di~0|!Ja|(XH z3p`>3%UtH|1)p=Q=;D)c!Y;~$;}RFSL&O>{^NPIl`l<3hO`fvQN|z^1aSCOhe{h4A zg7^QXJ~5o{xyL+j*U{yRR;iq!+RtzEr6LzU$*~6f3Lg#}h|NBk_FCMDxkR~MZ*q^b z-I+Gd9o6jt-|+)OR)sjF>1V*@8Rl2f#ia}9lUdZ#(d+?gxEHoc6xGE3Kc zQ4x~0jlSdmtarM1W~5rp;ZoCisG7 zwz)v0D1%yY9QF{IoaJ*qH)BV;qCf{`c0TX?BG$RjH#fwp_=&>IW(q9+O3r$xl)2W+ z-Qg6MWeDCM1+$g;Z$HBS_=dksygKSP_G?KPfQXS9zP;)SINl9e3aQl=5mK<*f4I*U zygo;$dol;JrpCN{+QypS%Cb6E=Z({Jw3%j4mdc>z{;t5*+k7w~#Q$~H$kudzkR`0^ zd4Z2-I>`3vZVoBA$;ad&cZXc>r$q{cmWL1y?$HrCVePY%bEcFZ`=GD6r-)v6W(&}l z7$-jX&oNXj^ZXnF`i+REqaR->NRC*&B@qf!rNNtgGDL-#snK76)H~ap=Iu@{=>0of z_dI_}^RPl$IHTneP6W2tIE9K$-}3*8ST;yq z11_B2AcEkDr1<*eDEV$j)T&i3s$YY4z3S|+Es&)Zqqum|kOxwRf~oQNN9?s$mv)UR zRB6{G;;;_iODhkYO!Y^C-@y|~n~AJ*#c3s_?wwcfg* z7IfT_7P^xpjy4X>Qe@}lXdPJ z9rC{gomnz>h(x{WHc&XX2pc$^}E=*;!@2eDaPV{ zon9w0NhHg}D`U!nxQ0#k`BKK7HEM&Z(Gampdr-(ezOeLwAwSC#)EWOxC&CJQj3)li zMnr`{1E@19qRJwj8XPuep-WOeRlBA<5e>ucbXm^Y+S$3y*A#7l<8#NVK>7M^?@oLD zbno^p-wPekG&8&^#VK6l{XSlh%jQs4^P4Z&BwZc(7S~Vf%0%i-*6h|vN7Heceg!JD z8#Nl}o5QDoVA!wiwnv4iei0Q~Ew)3s8s#cg*qta#KTemZ7Tb0E@ucrPVquB_eu-B9 zB;t@7{UV42Hk@hlNZy)Rbt*Grv}2wOR^h8O1~=Wf zW;$xSM!km3vJ(rF=GO;<6$$^$xDandMUqZEJGZ&3NPTpj8*-{ua`Pem zzF2gtTYV~#E3t5{a7QT3$QQgltNwj*KJ4uwN|es_oFW53310b@ux{4I+Wod9GQ39HZQP9mb3$wJAfyfOn>(dl*g;+C;@1 zbXw3EL_KXJ<$P=NxIY`Tizr9A8Y@+}&Q~YdKiL4c8PVy9q}(}WekaE&U_`AUN3d2| zkjF`)gMP|RpDxI?`13S9?*+kFwn|wd59{fUSfodVG5n2qY{5{p^2i(T)7c|LJAF=CgeLWmUkk~0fxmwNS_ zVsFmmIk`Cnb3(+x^t&)cLp7L7gZ_@?|fJ2)Zt@VMBJKX7E%mD*4u}L=Gf^pJ2Yh-gC6$RDS@0O}R^@IX9Q1~i)OF>)Zf%J7`JzW$U%-AhW$blD z)^B<0WG)2oN$<dB-eg-tkLViB+$$qD$C>{r1D1Xyh7KH8$KjLc{+YW_%ul(%KFuzmb zXGN#X56?bbCqNYR%&LyVnyGsyEdigMQ42yHD_o>@KIz+U8%6j>uGNKxETyYbSrkae zFPH)C=^mGQENxrZ*|j{Q%8<*mq~@Q#>@l}z z%_dcN`hem%#b*o4bt|33AGOR~~f`hPr<6ppM^LCNr8AzwEvl(a1A7{zZI$Z|1+&BDQ zFo$XMYF8I{r1Z$vLK*OmEHQlfQxb+PsPLsAFg}^8tYs;W4j;?%=`NZiH}zEcfETz! zqw}0ogzzPQs*dd3oF#r?QQm|HWg*q!Bfg(y>)+(f*p+LEsO4Ff5oxMKX4G|hYUufP z7SUs}O#kW!sh0<`O=b;klr}4b$53U*w``eD_p-ld)yCALYGj8bZ!} zjwD4hkMqZQ#b?`d=zI^(i2nE35Vnf&%(_m)>deC^#UAY00bcX`P) z9%mr*(XS7hnWQ6jx3p%ds*=CE32`kbUguYMe`wSXGP>9pHCNvo(HF+)z# ztKFbF5!*G}jsHlLxr>*|%%)LJ-*&fwEG0;$#tth9%5GNLrCH1~h#2w}cdFMXBB~a3 z1w<44%AqU;T(dDzJFVAt54lL(q2FYoUI$bvcOapN$wrr6>k7;%F(H-PV8n~{i8)!P zVGHbal1)jaS#upPoCUdFqxrfE&J+Ix3NpYWKI-fEUH^WZCDus4NXz|c7Mb_4rZwcv zl)lEY!l(Vesh>^``qRpi)%uKghOARl2n)R;r4s22eETS`|MnVDqZS8@g?1$m+LhQwT$qhA>}Ocjzoy0x$uw*S2$hNh{3>|MV+2d zw@3u`ZyH@ch#wv`KUdCrZlQU zuf8A+Tf{?pLb*QEXEkpy-_LE=q(QrK+cg`t&^Ggo=nPg=BYIsIBJpJUn0J+XJ!sUB ziQ2>Y)5n!5H>Sb{-L6m(l%ya3-cwV1Y)=u~v<1ms3L##Rc$IAl!F;wZCu&5sTC^8w zfa9NYo-vJf_?(Aq*I=$Cc}mhJv(KATR>{)mPjS&+wSAgJRjJU7e&tSfDEOZ00>iYJ zq;RTixw|%L@|C2B%D4b41N`NzX}j+6Q_$pUD-B_bGaXhTro+j0<{e3l``uGrj>)&@_y{Q~V$>!li#cek z*PCaSdG@H+iyHMoB=)#lcOdw2SJ~(kx4O;5{AB$7$4e$oluqn(P_?KkVCuCcAT?W0kkoQQt6E`EM%uRdju^r!b5-iM*HLu04FCWWYe_^wRG7mqOxoiK{O6R5 z`jx3MqQ(t2`HWhM6su7;x*2PH z%*rH#R(N+5ABUf8*e($#7v+i_wc4krvFgms@eOx{NZQ5|s#5Z77s}swW8V1e%+<&i zymm@eSdwY7x4_~S&sM^^yl0Y%knyi2rkkmUDn0EHH7+e6-aniQScr6uQ{iMaMYb5W z)e>_p)gMGwjJw4f)Ed-huBcTWcUDrX!*2HijYSTDhTKx**^QHAfK%(??(i8uvdDY= z)f8qh<8y%G-45mIp4G0063=dWwS|}g&n#_u65R}X$Oap%^rmM`H7(Y9o$)N(IR6NvyNib#AfGD3~p=F5-Zo&xjj^#=i`wNhbTW^r_+auZq@6{t`3n4y70>6 z>5RG2hmykd_W5HwLuPHB9>QiR=qWJfdV+&uHd-z|(Aup+g_wvAOYK%|EbBWC>2{9; zIo~y&AwE7}8xT{0POYKSl4Ka*J6tK^g?{QK$3Tof=sp`fX{pzr5F@j~nAuMQA zu_oMA(qD9j>o~;^wcxKqwJMf)WK@O$zSL94Z0!Cy-woszLY1GIIga?Yw-oG}pV_WB z>=-jV!>;v@DO(Qb*z@?{4*#2WzPSk-`Ck`e=0nv{*MEkg)r&Hcz~s+jePZ~^ntZ`G zL$wT-gZ1j8`n;ETc})2EU4JL(OyrB=u{^@*B_@YC>oPZly=CT z44p#r<8T(O#qr&njPpiyfnH=XP4fh;&XvUg z*Bv9RZkO*1-kA<-Gf%guVINbkPE1`9L)9%FDZnYbJ18UHX_lDX znobB25}(Q;4~uv3tAaJ+S~a?@QYNNPr|nsUo3mW++eTGj)F_5kiC2am!a;|9#l0#5 z&2)K^V|Kjy@Wg`Bcopvkzt-;`oTO8oHW%TDswCSnY$OpjHExEZ_Gxp_?UR1?gBe>+ zj8MV9a=BT?>p#A#P8xb?A3PXDA3*p0P$A%P*X|ho4h#F%ynypHQ7VQQTuCtA9$nt)z?#_9v zQ3L9O*0*YKi8>M8hD3E~wkJ^fPGv417153+QBk#8)#}pfQS;rGM|d`e+|g<=UcK-KxXYMYkID9|a79c?2trfSSgy>{GMOX;TwLHxhXG52ZnE7f zyY*P4JCP8gIBv|^C4SZE2GF3}uo}&1GaxF}(K_Ote%FhNI%2&0FExmk%MI`99 zv$MmmvDOd#(5Nz*=@iFl(=2MYF-?Az5O+;(QpR6xuu8l6{ztDJ1jE`v!=Fh!F%%i`Q5=)0nr@9rZ(>#q(X8H>YoHS`mfUd50?ZZyH`5xmfIAflX%os?kT!ec7Eww8QWgr=DZTMPkB`cEizYmX$Y0X zW=&br+bqi4?&Tpp8p(|7_{XU$Pp&n7boQ-k}N zjGiojQK7;dwc=Io!&cj#E|LuJpLxSR`TuEjbnHze9>KboG#f3H^yYC?}aFV81+Lx z4y6OmOyDxtU3o`-$^5Yg{DrT0v9}%Nbd>Gx@gomvbBSxbG{m}Wt<`3mO=1RFm|tQn zWavv-s4;q2EoU||SN8tMR|>i^PK2<@H+%E3K7|?Lavv|)hd5I-XK^qWLYNS&_)@>%LSpK!C={Ham%o$EYnv^YmTM@vi}9yegUR+~Mg%OL8V z?<4+T+RDTqUyOvB0e{L>i8#qc{?fZc8J`L-_i|7Aj__9( zvQ5;J4%^~k?Z!~yB!A-dUO1(&!b;l@}RX zXyL@#{E%)mX!B6fXE+&GxyT*robTn<6?`8yp8&$EXE$@*c&tw$504#pbMj-&abbWL z`e)r3}gnRT9EY8T0OsA)DBxU8dOoQh--^*Q4pu=%; zdVG9)BA7q4 z)b~;C1zu1@srzi4;S)Y?qdVMhgL{&ycdiTu2hGaVneRYQ0jNJ?OkLqjFR<1tk4h%0 zIj+f3S12Fv_x@1r!lhp=KI2br>b=Xmif%QtSp&jEnv^&;j2Q5kUQf9#EyAM2abbY@ zptIfUkn_Fps8qaNRV=(I0= z?6%J)ty(=~+p{J!*NMvH%J5BEb=suW278kBJ)W|19S1 z*F3Du5^b6t(qfl*Jat`=L;-pn%7`}}^svQ6MIpxnf@-s-Unnu(XM$DPn!p^yCH_@v z#Wd;GZB7<>!&?9BWknyY-E!?AR^lJ@7e%)@+7v(I88YgABmQ2ugLde*ZyL_4#N-qf zIyYj_Ry*wUh%QgrZY-!2UkGI?ovg)(^y&d-1VwX0tqP!Zl7CGG-ORTiOd8#u! zIr}EbGWgp{$pFs)Kk-tX$~1|0!wvQY+R}10#&YBfKCH~mlfLh8upTM+pLlhV5BLD$ zg*A#vBXN9%U>zTn+nJV+Eg$1$`*z!n_%A;GD-2$;f~zwBJL1?bDOiL&~H=g+b4Au?umo`57T*gQA|cUcW6`ZL%*hhu9A)8+pRdDQL#{B6aT-FS9WGQiW$ z%u8pAW40rxQ$NGGj7|*xBxgi|H*ib-pL7EZkiJ<8OJs<2wSc(tAE z^_-^fw`;f44v!e}q*hNGD$-H8QnhoevqFnC8dYT^x7_W2#5}CkUQgFKYj1KP3Y^?L4Q* zT1eRfb>iD*8`3YLK~FG}Y}Tnyi+J73aQU|4CA_LsABV}?k3AQ=_*kDpz~=s;QA-nbB9=SZBCD;mL`#NKIjY~&T0LotZaWMXS!V`2Y_ri}k9%5ITBWmmlsm~% z3!P-Oxh~L9TGq-#$pDuqQKBeLGsiiat#F<>36=C#&v$O{_(@$h*{szTtwFK+VpwCT zRnF03g+--8hf|>5sT!SXmDN@`J;O`Z@37zK(rUX$b=y|-5za8z=~}F|M&oh6;C8%G zGQcHDl$eAvE6sC?leIY05-qCIRtAT(ds3U*Y_!!A`V1ANAZ^s>Bu&m$m3OSB^1LP^R2bqd6rt}WV1>}<0w-4E=!ask;0oYvP=!=w$&51*l(i&yNZg0 zE>mNjTIXA%#px>5vzB)dn-(wEgZM{Jo>?=~=Ut^Bd&M?=xB2KsHsFwFEkxIz` zmncypg&OSlv`u2x+bU{f(WMqnSM35VT3o0qsjOs)>7&(aY}Z;;_B*Js&O&E8Rf`qQ zEU6)8kdgr|QKCc&U-fTBi>$rdtigp^EODk5r>HEg49+-%eq7Lg^%e(F(2Fd$)~t{M z#u8JfWPnSQD3QWw0S@MR&CW2_8t1FE&a4nc6idtuRpwaaB&)5q%yP@jI@YIDBA{e| zOOz;)mr9M+T4u3k=UZt`Mwx^X$Ci3!iG_k%i!8TBqw}q>Op}UZdTu3hQ8K_KN|Z=q zJas~YQ!Tg1S=Lynsiej|&RO8k%yycER$5!?*iR73#)^%uC{d!svzS&JEU?<#(yXaO niD{-}fJ>ApQKCeNW5E9hp`DK_r#yyJ00000NkvXXu0mjfLfF#c literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lao_banner_06_on_white_demo.png b/Documentation/pictures/lao_banner_06_on_white_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..397c6c81209800036ac525e22d82b900c69e5b89 GIT binary patch literal 5433 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily-flat-bw.png b/Documentation/pictures/lily-flat-bw.png new file mode 100644 index 0000000000000000000000000000000000000000..45cf450c897b33ff5f50bebfd9c9ea13ae92367f GIT binary patch literal 4168 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily-home-nav-active.png b/Documentation/pictures/lily-home-nav-active.png new file mode 100644 index 0000000000000000000000000000000000000000..e9400ed92f7423eab3913beffebd1ca5b6af65b4 GIT binary patch literal 2704 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 KnbS}gWBvif9R~^k literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily-home-nav-bg.png b/Documentation/pictures/lily-home-nav-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9032c8384a38b7858cc7f0dbd73d471243fd1e93 GIT binary patch literal 2626 zcma);XE+<|8pk8mQlwUSYj2g;ND(7Ojn_(Q=2dD$sfyLAicq0OjYh2+)e<8uFCtn}bAQpZW0001jn;0NZ`-9WG z%?v!P9bB$%r;P!FG}Z@{4G6BCe$L&xW^4fX^*e~og{i0HyswEJ1^{5?{+$ef%&beN zkjWozX2?WgV`W#6hUpu72XUVxeR&D zAv45MlL9Q&l^sH`)BsEKPlta4@aga`@Xw8|>~HWtq{p1Q>HaAqLm8D0(j{=Q0Et!C z?J=vPmoJ3F@=hkU0U)tJp(SncV7VU^E|=Kn<_ODYTi3RLL$74@{x+wf25tL|z|Al( znkQoA-NYC9QRm#GY`jq(@&g+VQyC$UUDy?(2U{=e+wO ze#HJ>Uqqb3Cm?8sA#*)VQQjzz-!;lg;G2OmgD6+5zwR05c)Rqo&hB)9WxMGFghhc+ zBbl1&(S4~f4GEa+{xUx1XnO-nyD+Kfk`!j7)!ruBF6kQY8LVP9dS`k9Du2Zt0q(}e zb0!N#T-X_X#I7vPZCEUp47BLdy*(Hl08Grz*3jKx>!!_K8uGA+L);gF z{6Hd+(A8^(KfS6Zq~5SPKAr{b;!Q9vK5kG4e*6I(Ec*;0omziAv0nd^igh^u5HKVh zAkBgC+)0WFo!EnL`;8_A=h!MduU}kQE_6spS0s{S98jEWB$1Pxo@kWlkyF@GZCvv1 z?5~|bzh(-8lww|pMKJ-2U090%*NF@d0B7WgAizi>N5`X2?_q%`vZYMP_>*eo>KvNe zR7S`9Rh5HI1ru7+Q?llh)#l;I2J~&ejJ;=jqksJR7P*pRQ8+TK-6aJL=dU<_he3hJ za6cTt*_J7u26SW|_J9J_j^~=$+34ud(P283fr za!=8&=7?O!Ia6JxTj6It3t*apbW=&Lh>g{vEpqvtfpcnPdCi$sNQ1YSy}yT@F=Ego zlj=Ehckesgp$t{ld$DM1>%c$SOJ*UR<*wKD! zqh0wK7w%VPGDDIQH?>%SuG~j;uL%~3BBL2CRaHni-qhaPs)VhLjW`4G%mU6740mf9 z^00*+tRWnO5pMeS@E640JX_;{OrYe@AOjG8T>&FTLH(F&r~ZQu*|WY?)o%95g#}l6 zR%|#%nZ*bMLV}TNXlSU1hfHd3*TT2CJYv{mKcao9O{vXFdKpvNd9fdrKO>IVw*~d< z<|VTBVuGCS3mvGQ39P~A-Tx3-l9w860`6P#tEP-$wVxpS{8D1{i!ZbXqGtEVD6An00KS6=r?h2wPprL!@XbsVXW_E9q}AB5mAH zr+eS^e>SJi_`IbJ%J<`Mc*Knx;0>kTK~T8M$}dQ1A8+QiLXWq%Du*}w=bsY=P{*q0fw|jY(2w$Jh$tri^f@8>T2j$HQ zJ6nPUTOt9+7(UjUop`SY;2 zbu#|Cp26EbHVT$es-D-OHDpP@*+xeT+savg#BNaiSA9hLX11mtbN#*b3Qt3{!XR5B z+ZJ7Qw;Drh!j={PA*J3CnrN^MgFRAsnl>^Q;3%T59&|-V6(RHE9?cSLi$iL+N00k0 zjdUN_*zyYHF;4MVwD(4ov%mBeY z;~>GQ*;(!Fu-A93+uNH=YF~0+VL`M3Oqk(OPk~<_sw)-s!im#zK}T&>0$uZdZvz=E vH^qy?-2Q81SR#H~pa0kC{6|WU-I(RM7xuWF*>?KW-~r%<<_2Z@&X4{9BL4Xk literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily-home-nav-hover.png b/Documentation/pictures/lily-home-nav-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..954a8074f6f7271d1fe73ddc700c1d42fc6d4b84 GIT binary patch literal 2652 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 X@k}QOt!+>H;sC}5=K6JdZs`92yIDcu literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily14-sarabande-annotated-hires.png b/Documentation/pictures/lily14-sarabande-annotated-hires.png new file mode 100644 index 0000000000000000000000000000000000000000..8879ccf8dc1b89335beb4ee8047fe0dc8ea8b359 GIT binary patch literal 140674 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily14-sarabande-correct.png b/Documentation/pictures/lily14-sarabande-correct.png new file mode 100644 index 0000000000000000000000000000000000000000..f114f12d07650c25ac9a3287fa0b85c8a2f10f13 GIT binary patch literal 33698 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 OFI5#y;DIP2AuZ* literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily14-sarabande-hires.png b/Documentation/pictures/lily14-sarabande-hires.png new file mode 100644 index 0000000000000000000000000000000000000000..755f9bce653e00fc6b617e864611e3829a1ec120 GIT binary patch literal 22005 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 H#H#-Z-w2m> literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily14-sarabande.png b/Documentation/pictures/lily14-sarabande.png new file mode 100644 index 0000000000000000000000000000000000000000..8d54f3fe84680eeb741c6418064f1c4c89431f52 GIT binary patch literal 7394 zcmV<893A6{P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV0u2-xF+VYln*abDbV)=(RCwC$ zU3Yv{MfU&BeLX!P38|C-Nob)Xf+$jUDHf2nBKQMETu}s3bU|iJ z>IWx11VjmLb&@nX8|HrTUp&a~ma`Wh3L>k#J4+mp&Ha*!vAsblarWawK-y0CCjZd* zZ0?&>JcAB!BJrW1>IyuK2N;S6(8<|}564uosu0gU$WT0mp6uL!a(_;GP^XGl;OkP` zl@0I9`vFA?AQR|K{`)xdSPq#bok5&fY;=p>zk-jT4KXZr@mWR^y7-@K@T}{8fMC;c z@~Fp5tUvPXfWr&XYtTmByfscZHG*_I&u_Xf^KPn};;LI7RWdA6|DwypJ3WG{P9oR8 zftg90mvya1uiKZk55G==B;gmpccJu9tF1b3yAl%s(AQ|Zo!}Fa3}c!Ji9DN!L8H-m zcaB$9K3{^=)lro6zB6Fsnv*iA{n@CiRLW+7VjbJ1`B@oRg{kS;I;~Exef2X+o@$pc zU@ay11@b`BL$cT|0bX$RYFtd2Iylw|J^`f@`q$=~7a})1H#IFkGqc2?)oMnpP{Q?@ z!}uH4=O$KEl$4bggz5s zNpZlY>Y+d?+R(lfR*l8wmvS>xl9N-k+`U$S(k3B`a3KVA=`E@U?!`Vs^*&f_JF{S6 z4jrkJ1hflMYM_)-1NY}p`ll5Ux$pO#dO8W6>98C0H;^)$nf+;!#kah;CX$NPCigzA zTYCir`T4rJ$;RUY-~yD&p1+__ji>6N<@-lQM0RZTvr`TV=@0Y;!6Cna1m_jK9KD2P znw`?Ob%?jGe`_xnkJ}gyAQ=O&GQP_(_`2Jl850>15fPL_n_g{E`YBWjSzw^AU#P!d zh>LKJ4WJ78vK#Y|Ta8Y(n@--&-LreQu3b3qiRgy}K?bb>0H9#ZbppGm`c@9n@rjItxM08jTe-MV$@ z%w}^vrs<(L_kAK^7{OGvAU7u?Ek8R^4*-ur+tWP@cMZMlSp9o^z0A1UekCR*w(PwJ z*Z@cXq+CqA6Q84@1_}U#Axu!4u*k^Xp7qb|UHv2P`y^oFwauUC2VVTk?X7d8t6dz+ zGLxZ}FcN+ZD9K9C$+(l3pSTeK!r~4q-wmm(#xy%bY>cmz>+r1Dn3%JlH$4<(N>j1C zZ6P!+)}bK(lgT1GYUmos7Yw4S;$UffgyDhY&)meK|+qh9z4auK&h_c@L<5j zf5O)n_~E=Jh~G1(hldhyed?~*RFp9Ehxx7_VX4J@%U>!?U0SHPV^iwDeQXNpb7h!IC!}bOl=;=J2&5eP=CJ? zwNM?2?^d5Yg1dHAG=th=PBUKSF4hXeH!rlARL^*NdwaL-91$K40Lvdd!{3Ha+m6`P z!=h5k8~*%!I}crP1hv>=I{6F>q` z`S|g=>J3Zgcii32Y9ayvx*GTb3=ZS*X7g>~xH4J0Ahun(Nwzn`kXk?WYNT_;OF6_8vwwTSqp$8x#te zgs~*7oYbV^W7CvfKX+@`J2YrL9W=RPs;y~TKipn;h9pQa?7?m;Cls3&iF21_jB11? zv8m{V_H%7aNq*Y9Cs#_t?1`-4oGm5GIY2wf0=24W z-7rD5ASxX|;bH)Uemf_q`hQ@@g%gTRO0M;IR$EYEoE2_a#s2D8srTMXuQYz>)z?;5e+OAz_Xi!j4Ye`FkBGsF|pAN7iOAQ8tg(!p2 zNH3*2#wLq8K1ULRsg=K(QPTu@kz+5g7YRcQb@E}={Mw2J2is9+z23@0k}~chJ^c)O z;nKTLk3JoEzI>KC%u=q5-XMrFSnhQTEb4igOGx%Jb^8?<*MbtFm3hfrt8CU=BFWb( z6mHOnDs?#l7Uv{4yYs;>iSKN)q|{Jh-hsvn8}xF=PJOi2^CPZBs8Yyejwn=0DrvP! z!QRMkm9rP^Jt+W5j2wV>sMZ3P5{W1WH4>Q>-qXtgn0J?}w;KTfsS%MxEf+kH8)yk% zq*5z%u`Ft3t7R&c0$E&LW3+`5%`SnHSfYR5cuM!W;7!}ULs_27l0FxD`S9pd%L&^H zZ|&Hr^1AT0Za2)gL5}r@Dzd>$N;?2Rjw8xCBm)31_NIXAnwPl9c~+D5IUpXMWOZ-J z8usVjkySGX_iW$FbY`}>_Car9y3Z_U8ULH`{s)`2juE<%-QHK{coxf-&bbl37rIh9 z@dDP417`SKwubL{rO{z;zl#5>6pgL1ETT=`F`F_SPz&F+x_vWMR4}oi0P+HR>l!Sy zO0Dyf5S9u6IOPDLxaL_c0FWHZqZ*!EFT1!^Vwo;ps^S7M7d@KFE zyT?~fj;M>S8waVuLUWrJC}hM?1srgD-I|hKUScr=fxluDPBN5$b{lo%;O;5kVE$<< zHH*WMBA>yVkkSn;fo|+eah>)kCChViPBqn9>=RrY_ce?8^^fchZ~NGq7yf)QFZ^wG zFJ#VqHk3O_LDx4kJ7B=ePc^x-Au-ObAouAo3_wL@Mn*A_dk| zu3r?~Xbt*Y9{eZ&KnbDaj^NWNf%#UChuS)Jybma#XbC{9p1v2rhUh^Uy}Wm! zJbyov2*wV9SbHmcSW7K6gB4!50!ejy*81cJe73;HY6^)(CWy3byHTNy0f7B&0b~Ki ztGUfJRAJDH=FNPjt**qB&&48{=+z<<21WtEQ2G_8#StX{W$9zEV6YHOC|YGuzLIjs;hK{NzA121_R9jX;I z!Y++oE2hXR7=R?_rT_r5jo@~Y zx*F0kT*E4-bo+;>!3Ix5@$&Bnw}^F~^xjzWu4iH=82|)~=Vr)>Usng8$?(8UR~|*rCj1?wn9zIrgUSBryxyQR7TFn;r*%;zeBOQk!jjDS|sUM80wz0IW1J z<^G0*XUwVa0`MuNlqLf1<+s+eiucIH;)ai}&QiJ+_|D=sv0vhaVawP;dvUkxIUXpb zH}+e#0KCHea+_v{)kbU#6zo8|DVF$aHg1YN29|qPHxtH+8?Lx5@S{w3yZyut!l63W zB*H#5*|;OJSn%wvkA!Jov&v@A@41VTNJ=B?!s9ZnrCM&XCsWA5j^nkLUcv`IqLk)+ zFAOW}$Vp5}DW&=B0P2%wyM<4ea2HQN_N$Sho#jB`c30^A#@ToOz>R-t#h*j}WDM>|ZHct2?`~H!yR`zB0>LmZf2DagEBa@n_ zN(7)}2e1s=FT8Ip>qjnp{0dG3Zwk5pW(ELt>_pJH1wmu^EuX^v%nf4$IqkZm&g9hF+Z9`-m#;FwR1JMpf+{di4@hG!r>} zn>$s7x(>Ig8e69LM=JoRXCF1einL@?;;66Qu#_yXQT3{PA_joE0tj9A-vxZt_Xhjp zX|(mryLYz<>t_xF(EQ1c!l_*FCVqoR&7?XcALih>DE*5sLJvR!YPMk%0Jij$=(hcc zIgNP!o zRM7*FP`$;K3HImnx3~+*U=AXD-fCY11E9CE%3%5W z!Wx)XD23~3ot_(@xzl#?96} zF}sG)F~&u2FRmq>+3!Uu*<$*z1A9z+J&#wC_jglWz4|!tR4rO1XT7?J;Y3oAlmd`J zg42i%zjMm=6CwvJW)ncxx>k+L0U!&|TCqW$E@m(Kvx=dnkN_$_o;rUoaijr&>`IhH z_*`jg0Hnd3nom-%u@|9zxJFQ(*U}1i|1doORR4FR6@E&~+KM$qo|~(f;p(o60MZ~M zw@IA@X>Yd|crH|Ag$oQ2u>vVWE^)@2&aAd@szWFRK<*>}ko5IbQbqP%RH|rip-GiF z`6MGVF6fcl5!N_JR~o-^Cq2v#J4xIq9N5pidPN!lLDc@CCI38U1NsZgS#cEs^-~HNf-jrdV2clI4-)m4;L|MO?HF!oDK!Sn zHp*8@Db2O&4w0}&H26feXz(`S?ONgOCpALVeT6W3j_|f0H#OsKdvi_%Q$Ys**@IF_ zIa5&)rBuyJ*F9m=)Y_ZRt#YvIjHw1anR{0g9MP3qIm8{e_=M0Mf>m_FZzH-b5ASj% zu4Ic1|5t&?Q+I^|mGv)L@S{VfVk{KLpRkyj(NDs%n_jg}Y`|`v#0hP~P|l>py2ex) ztSOn*;^yxfaeo1|uw)a{tXAlSS7j1y!Zj@88GOzo{mun_RPQT+xMj>9l4~en|Yjecy2b~^1Q{_6heGWXW5tb z->4b7u!VetuwT1q_bx9^FzvgKst>bM1nyLQH#g{xSMMwJG_6eb?sK`l>nj~r*BsS% z82`FscAWg}>i+T$qvxxv>1{$NlKAeD+3QRox9wjiPHr%VBBEvIPaJzo7}jSo9JiCF z#|b#vM?k+(!Z$M-Puly#^fjBg4Z!iz6)ggZ2-zssssw5Py0@kn<=Yf*NFP5il840p z&+Pyun_mSG-EM6?4M-auSOdDkc2f#LKfU|Fo9j$_Z^M%Rc*)IE{*-ZO`HK+x4a=pC zuvmy#(`;lW6RiZF6eb%uOqS!>3{+=1r9o~iY~VK5m?V5yd>@cZF8+>7t-SJ($VJ*s zp!=F7t~+0oG1gn5{I%EJFRpSHy|tSFvb+2s-{AIM03q+Z%4%I!IgrUrG2zew!H&#` zwD==#VnQUE9}6N!d~K%3w!5LNYW1d>E$@p?#|{H)4++M<*j&5yd&o4PI=zx1YsuOxw$SLbg2r9Ss0daE{aa1c~ztE{SQ-_q@Es zH0ZcE!3z?bDrlIC_XJ0|7T*!f#^t936=E*r@C&AC+t0EW>Pt@p*psNNA)rsDo3;Xz z@)o)MrjA=vP|q`FBGm%8EaV`;&3I6hylM_HB0`J0gU1ohD$ZOeR{wqNT&V8N&U|!q@z_r5SJ|x+Ii)8Tc zvvzSDa0grxZRaci$noG8`F-${#=^Za+4?i-{YwCh{lT_$$?9K>$Q{RT?$k82D_uy8 zlrj1Womn$Pe57$5?Vcq!9fkfle;l3?z{^Fj-X@dSc_=wmKXMVXmiwT6UPyzXC?o8+ zB6YDW^@YArjEi7KAyo-tm4yGabPgAIsXzNGtei|yn+;Jh04O;!npFvG`+p|% zQY+WJgaPfOjoHgwm)6p^xs*?Sve0Y4p6e;)7%=F?3igfqX)uNnUI4dewoJ*vsxwO z)$M1=>!-AH)Ng<1r_eQul3eBs8eiL?z1jST4=%+x2Zy7Pw#fRC)C zt5#yLDIe3;0Klw`MlE>`x8qA~S{(a-(K6drRb5Ftv_Ori-!-zu3f^nzu^-iP27sD> zB!TW`FFTDn(vv+HB}3gBby^!|{+6A7)Y23B^H1=rC;4rJz?gG6TzJ$MD=DNuP8MsE zqM~pyV@0NihnO)ZAzT208&QIWNw{bMY}7xXbzs1eA$o(p*5il7^)#4s2|%CO&LFkg zeUe{IUFswT13+Djc9TlZbI@&y+9dlkLnYs+0d%nGP*+{-DUlQETHUDW#$v~QLP)#Z z?nh^699OJm|9jm`;r(zEulgK&4zS?p`uC#2$I?ZEH;bOlQ0pDx@8_wsEDJq)Onmdp z1Lu>|^Gd4ql&)xa(>!h?o^!v!A+wmNlwH$pZ?lZTlMd-c$DSmnv0uXKH8O`4Yq?a7 z=~)z7L8&^e1!*f5s1rBfTF67E6Ev;KU{QS4O{dYTbCS~TC8yst8%fII;#d(TlgcGB zS&xP{jn;-0fZc?lINQhUIaT{q0JR5LSnGAIW9H9z2EI(50;|`!b zH?z39^ZC5|oWlHyg7U($Vjh55kcKwApm%LOaAsvn#GqH)%n@76A`v5-s}~;%D2{1r z7*g%td4-r>uT(-&Z6f$Qy8_;AI<;#X9@2p_MCR3(ubUK3d;V5>VtNt#;k-tvQ)6vC zFz6QxT9z^7qvo=%I*d~iTLjXw$Q7_oSYCa*Kk8vgSNpIZ(GPcA}cq=pMUUG`rcahb1?*bP9hLJE5hO`Zi zXq$6Cnohla6{He0-{R-P4n3zky$31elR)SL5v*Oca!=9c9b7Uq@Yl=Hm74D9K`*RCDG!28p93abNnONXMo zg+Z~_LA2~9YeDlxSXA%cQEoD+RBE-IYi`eBap?N!7hSEMP%a+fK1u+^1dFNUet!J$ zyv(H3dv~(asa~(wbLXJ`Z+u3=u~1aaX=zgNKSfFLHxl@p!IF~?0#bK(H;+!eZWt_p zD`v?R_H?XK3wro~TKi&|{yC+{U`%qp72GGyw{u+g_wNM&&{fq`*Ql!s?iAcE2y#NP z{_2>jrPVJS0|21vR$^jeUQtmocUpw5xEMJ99hS5aOH>fX9%a$;A(dn7CeDxWI;n+_6N*l9LeWW1azfEbPAEF*fuUx%a1iQjbSH^Xv)knVAHTCQ UZAmKFK>z>%07*qoM6N<$f^KjN9RL6T literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lily17-sarabande.png b/Documentation/pictures/lily17-sarabande.png new file mode 100644 index 0000000000000000000000000000000000000000..64813732daa6e4df9fad2dddcf202613f39689e5 GIT binary patch literal 21695 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lilykde-screenshot-small.png b/Documentation/pictures/lilykde-screenshot-small.png new file mode 100644 index 0000000000000000000000000000000000000000..5e31316b885fc8b39bfee9f5973f5e425d572585 GIT binary patch literal 104976 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

    N3h!bBdAgC-3Jia&{7q994ShO~~sQU2xaN$IFp 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lilykde-screenshot.png b/Documentation/pictures/lilykde-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..33fdbb3d3ecb887bb6540a7d593b7371f11e4227 GIT binary patch literal 223563 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

    s4_P1neysE;%%s$pxFZy*ZO<>Xg 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 z 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 VgFyMmI7I#+%8F_VMe;_0{|_DlZZiM? literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lilypond-book.png b/Documentation/pictures/lilypond-book.png new file mode 100644 index 0000000000000000000000000000000000000000..cd05bd912f3d7005f5e063bd2df777df0df4f00b GIT binary patch literal 81677 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png b/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png new file mode 100644 index 0000000000000000000000000000000000000000..b15aaffc16abefcd79f562cb19fdd02901deede9 GIT binary patch literal 105572 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뎄Z>hJuJ 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 Xd=i^UCMoas00000NkvXXu0mjfqT%Xb literal 0 HcmV?d00001 diff --git a/Documentation/pictures/lilypondtool-2.12-screenshot.png b/Documentation/pictures/lilypondtool-2.12-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2cb0e65562b915ead91b4b25be392f5959b8e6 GIT binary patch literal 120058 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%0Dd_`WbU05o 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�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%0AM+ppnHkvJ2u43U6^TXcyD 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/logo-fedora.png b/Documentation/pictures/logo-fedora.png new file mode 100644 index 0000000000000000000000000000000000000000..5e0b437dfd09ad185142b0db1172aa1a062997f3 GIT binary patch literal 5824 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/logo-freebsd.png b/Documentation/pictures/logo-freebsd.png new file mode 100644 index 0000000000000000000000000000000000000000..df203a116a45e68d71974e08fd397f972fbde3cc GIT binary patch literal 5708 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/logo-lilypond_Snell-Roundhead-Heaven.png b/Documentation/pictures/logo-lilypond_Snell-Roundhead-Heaven.png new file mode 100644 index 0000000000000000000000000000000000000000..4c01f90fcd8f1675b0d5708ff1db1f7bcc6f97a1 GIT binary patch literal 4805 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 b$6Rswn|NKr(~JLJOdwN3D}!1+%-#P1OJ(Ba literal 0 HcmV?d00001 diff --git a/Documentation/pictures/logo-linux.png b/Documentation/pictures/logo-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..b30937c581508a58bd8b0a2bb23f1509d7c56f28 GIT binary patch literal 2951 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 B6ukfd literal 0 HcmV?d00001 diff --git a/Documentation/pictures/logo-slackware.png b/Documentation/pictures/logo-slackware.png new file mode 100644 index 0000000000000000000000000000000000000000..01765f8b68bf83fde64280292b22f4ba5ab9a0d7 GIT binary patch literal 1061 zcmV+=1ls$FP)$pni_pga000McNliru(+C?B5&(?NBmn>b1F}g( zK~#90?N%{J<6sniJ^sNK3O3N88B$1~LM5{dj(R`C4%d~ZILn+wFF|s8*|!laq#OdwUzp2ZwJo8c$D8t6R7#!@`I^WmV z*E2IS4u`{LvrSJ=Z)|J?0)fGfda$*%<@I_Af(VDhfk1#Dh>MGh9-F(nyV==UyWQ?^ zI0%B+-`^()Vt049-`md44#O}L6B7)>Fbo5h`L0wdi;IgCMa5znUM3kwT&yM29qou+A3RrmJxn$4!AH>cC7s_OguJ5AGW zw;RB!FO$h60A#b-9!bAttJMO40e$)U`dY8oRaH%=(+HvS^K(NL3KjMvV z4Oy14O)8bbnKRcn{sU&8r>Cd5?aaK5v#qVI;S$GLx8SX+s?o*4V2~t90C2nAwOY-5 zjDAoQg$*Q08XFtK)rA)>m&-82Hnm#K=ksCDQ&Us8CP|XS^FR;;+#3e(?ic~Uhv`=E z+}zyl?JZtcDixp4cXD!ac6N4ufA8^lHa9nUo~I}Z8;~R!kH;-}<3%VGk|gQi;6Rq; za5&6y97R!hTp0H&MNy?vDU-=uU0pSs&1f{byu8fwJk~}c5gfv}>|(K4qtWLP*#3F7J`U fsMhxv?~lcIxTx=+Zy(Ce00000NkvXXu0mjf*ud*O literal 0 HcmV?d00001 diff --git a/Documentation/pictures/logo-suse.png b/Documentation/pictures/logo-suse.png new file mode 100644 index 0000000000000000000000000000000000000000..dba0cd17109a0a54ef0a22a85aa21d89fd64a836 GIT binary patch literal 1361 zcmV-X1+MyuP)h=2Zq|$wexwHBF_8f3!Tdf-3?(M(a+3)xEWU(cDzDEB4`~Uy{zsl0Z00001VoOIv z0Eh)0NB{r;32;bRa{vGf6951U69E94oEQKA00(qQO+^RP3LO#?4?{{wX8-^McS%G+ zR0!AQm)n}7APj&7Dj>8lDAjtvy#HHn08j1KPA~Ru)A_0x_{oXbDd68r@!vD&Pm(4y zm1c|Rs+seucD*@H{ep?wrs7^&Ary*GB3S8p0(0v*tLk>&gr z6R)NALVv7Jm{~A;#9n+~{Z@H9WLl}TfACLC0Ir^@XZ3vZdD$vR%%QKt;~{JNknK4W zW<;*b)b9C`7axrbZ=Y$_Tj~8RBhFjw~msq5vIc0(l8|+OT zWvkb81ya{ch9Ioh^||kjH2DNBF;%PM;-!xAtl)KZ)4HyRtj?G~A^{JyMZu%JYdDS$U`|wvxmrQMUc%2@P$&%)*=7FHc22XDm%A{F6R|o5s z?zBkkO*c3_M<8*n)j+wAeX@lbt7Hu)=3;YM5T-RJC>-1L278Jpw)(a&t%aw zJWA-aW-XNl7gLY9XWJ~aRHOiX%f#};Q;aNyNoF%Q(RmgobMO^rf|2ImGUrIc>Drpf zOdPnGkm)KC$Z@U17Hli{j!9#ZOkhxXDM{<1?{h3>tzVXFEZ*Ok>%ob^Lul$TZOldt zBwf|p-ncuS#g9w?N0UITdL&8C8TUp^vPoxdOj@^YPjPxG_ERRn{ZeMRkAS^frG^yS zU3$gNySk09)O~n^Gv@75tkPZ4QXk(Pc+BzSqvzBe)Hf`peOQz|oG^ciBQs`%*!aW6 z@+Nkh`$645%`S>NJz>U;FZV1XoyY67ZR<+kTD-$dlt=YE@3WKP@Scf_I=5w(;@rD~ zn6P+9p+g_XRh=TyR7H*qoTa+>TzSH$+u6;=uNjK7RGHVEmIcC zUHy}-EApuOz#O_m(C3{AnK>MD@|5XE`V>ibd5Pz|sIO5?A*pX!#-~RA_J5gJ9eo>@j%)Iexk<`6-SYnTuc8C9zh)UW zJByz*?h>;f4(c{BfAWL=oO$mSi9sJ}IycKOGA~EY7YA9}K*vHhfPN|$#C9+=tTqh*kKJza|tD+u-b_=))k&|pN> T+|=Uf00000NkvXXu0mjfvK*-K literal 0 HcmV?d00001 diff --git a/Documentation/pictures/logo-ubuntu.png b/Documentation/pictures/logo-ubuntu.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9d0de4ffd848f60fbebdab579d9c716a6398aa GIT binary patch literal 1725 zcmc(fi&K+V8pgj|zz~9_6hcfX1OpT(#ss$&ws!g@TqDS4xkwaB5+p#eq6Vm;)o#K? zu45q*wZax~AfzNkiK3v?4VMH^2ne_!lyWB!6ah_(7V_=KU$JNAoOj-HW}f$X&-u+M zWQPaaU`bd20Bl$x0TFQY*qImhb0BKbI$$$H!;ty#{{FGA-(Q zJKI-RSFaOXN7MaYT}ywuV*g?48=OkiavviL(JXv8&5>W@%sxsMH_={ z#<|I-ZoaRcD_-Uu`OEYMYWWa)L^HRR{Z{Q{9ys;bf;4sJySv9v8g=JicB@Af{xAPi z3-xm+(r6=m=k@8?H(lI6riQn-xBLDX|Mu1DQvcx4(9rJ_Bd;DsZ|Y)~p6G}5T1Znl zHL82JG5zMJ)BkqfuYXu-DCI&LUxQv|Ff1;%@m{}v{i3aEOZELil?aj?T3cO#ASgGM z-U2_EI3prF5>Ef01Msy7O@>)I#0p?UiN+HY-MgZ?iUVw2!o)y=rk)x>-Ph3)V$)}d zAz#1_YwIk~=#mAEqZsIrvzr@gyB>M9#=FTF;;JgfE^iDTBw{bdxqfY}R9c&CjnO3* z?_m*0jDO9~KLr=KUXevNhpKOcqjP|qN({%5EN0tbt)7i4-9$9{ae6w(K zK?_q5bWvMPjt@T2Vt=WU1j>ATc01aFP9Q+n*x*p4lrlR?i5)IMPF?l!@o`)SApngJ ztGWN-V3PJWn_E73O*Rd9scdfFx&_Nsci1`qm0}QHbuA`a2YcQX&7MP%mNn?RACSdF zx;-LVHkfWc?-K8K5qJhZ#Sq1(F?g%h$3HLuq7m>UhF+PNb` z?%|}}=jEG;2d>b9(r|e)HBS@02M^*J(pyvyHM`q?LoycPGj7Q&(?Vj>pTe)-n^xiyq=?_!hzm-%WuJ^!95Dp492=Dlo zL6>iM7)LVD9i9Eed697iK9b+2mXBtSg6)MC&xQB)A?~c5{i6NmgB?5B^-ina@hB9E zBKTMC1IP4}UsU%ab!Fgg5NNkg&G+&k5Go3@~fg5`rlx zN*1pH7^vYZ^&46H`(0FDI?S5Ms14oPI)E^184ho>rY6-pT>xE04 zoJcGPxGXT~X#&%QYT4ot4yREEkedtge^sk1BMIKtc(CW~iHeHY>!F-*HeL}fuBr)9 zHtzddxdn;0!(&R1R;%}v_fvL#isuxq_ud%O=H>l-iX;c>5Xb^VV;F}M78`pnF5ohQ zv=r2iN#F08X{{adjVJJ_JUtAoWy?7*Q>}jS;sj_|xn5kcQjjj3u=v=Biag>L;b_0FAiVQOKvgpk}+_&tq=;AGn)(Rk@I8J^-NNp&HQO6k-v7waW|*cBR&l5)W# zl2nNPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m)L_t(&-tC!7Zo)7ShJS2RUSip6v|YC9iktLky-8OUEUR3DWd(&m zOc&Udn>fx)N+kkg35D1r=ga(l%)~%PO3z&n=gw(jwK{kMPT7|$46_68uAbx!a+g;*JCieYd)A*y`~g$?gVQz7 zlVh~+{_X(00eEVWjNJYtF-if;B`_hRB1Hjc4b11q``HZW_krE6;Y$fHWX^>65Fd|u zUL6iEcMG+p)tItk7g0$m#oJkX{7FzEpaLqO0xF=L4fAZUjaov;7vJ|%TVmO+*Gt>h zfKCEuQ=C4H*G`GDx<{l!LK6?wvH*~CF7mr97Ql#bD&phOEUO05myv~@Bd4kVbn*Ao mP{TY6^>WAJSV@5^D-L1LGO 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/morgenlied-crop-2.jpg b/Documentation/pictures/morgenlied-crop-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dad03944cc7add7405de1531830feec52847316c GIT binary patch literal 40543 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/morgenlied-crop-2.png b/Documentation/pictures/morgenlied-crop-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f71d7924b7ee4797a68c2c2998573345349df769 GIT binary patch literal 90947 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%0DZYvVxTfzNgTb`f%>^zK4g$F}g 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 V0<*Tw>whnR3(gH&=Jflye*<6aqCfxu literal 0 HcmV?d00001 diff --git a/Documentation/pictures/naive-notation.png b/Documentation/pictures/naive-notation.png new file mode 100644 index 0000000000000000000000000000000000000000..112c406a7a10af874ef7d56bddda038f806271e5 GIT binary patch literal 9700 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 G(f| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfO&)H34Uy&NH>?E;#e2FqhFF|_ zJ8`3ELjVV}y}$)QnFFZRU3<*Hh`N8BTB!)L2^U!`{Dl+L)guy^65cJpLmP3|ey z8jDZt6)F-E*?FAJOTYK<| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfO&)H3ErCf>#LR#~MV>B>As)xy zPTDPcz<`5!qssdUj7I+7?yJ3gtS!NCs#>8g>U;6tuiZM=1p`YCEoC)e%h1rjw8ioA z%W2)av>A8YZP^jHZB{Rr`>o7%CyUd9)4t0dvs^jx?K^9Y;A7Q`re7(Ud!n>8jOFZP h9vO>*2M756Fx-`3UU}naoe0o&22WQ%mvv4FO#s^ARYm{+ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/nav-bg-2.png b/Documentation/pictures/nav-bg-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f368e918697cae4e60e96a969d206a7478ae16dd GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqU!2~3wi`te0DaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#79)$8nXLUG&IF)Ps;7%%h{pN5 z6CL>)95|RS{_x%ZAikDAV9%);8_K_%E!@Jpd+ztt_2pBp+z9D)UtO_&&hM+Q>Sy06+Z_Lyd5d7O U30qa(9iW8_p00i_>zopr0K~Ue6aWAK literal 0 HcmV?d00001 diff --git a/Documentation/pictures/nav-bg.png b/Documentation/pictures/nav-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..6f05e45f768caeadaff445dfc329f3dd2fa8494b GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^tU#Q?!2~1^F3t4?QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfO&)H3b<-TXJvKn0EKe855R21q zCm!T&FyLWkPVx;)2!H1J_=9Tu6h4RF)<-w4EwO%oI_|y4$_<*_-8NU=sXyyl@$W%{ z-HP&8?4Mr6oZHt|IbVPMKezfP{MVP9Z+WQxM*98do#ESl_3Vp3_iy`&T=VEX6(9Y7 ZGG=Hc&xkF0whL%0gQu&X%Q~loCIF1vSdst$ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/nav-hover-2.png b/Documentation/pictures/nav-hover-2.png new file mode 100644 index 0000000000000000000000000000000000000000..09f1cb69d22a5eeeff771c4007db41ef667ed4f8 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqU!2~3wi`te0DaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#79)$8DN8}ir(~c|iKmNWh{pN5 z6E6xj81Oi)yzV*oVC`IIVWE1~_f`#mtHl?X$o{T;P?{FXxmeLB=()(jobTytKkN1{ zyp#JY`g!KR#JXF5=iZuL%I&`VY5Xd8jqN`V|C;tpF(=;V_4L!| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfO&)H3O>0rsJzIf7Rh}-6Ar`0K zPQ1u_#DK@ibE;>4+wJYeTg=Mpxz$q}z5mVQX|Z@*T=&sx^QxAM0%|LZyArnj-hA!n zwBrHq%>J(ZZ1Ug0{_Q`%x2JctF24Lp|Elto+kX;ky*~?V(_i-W^wZzV-s;zVn$rHV r`&9e?^shnuE8CfG?5X@b{}b~Et*A3K0eo+Pu3+$V^>bP0l+XkKJUC;y literal 0 HcmV?d00001 diff --git a/Documentation/pictures/nereid-shot-small.png b/Documentation/pictures/nereid-shot-small.png new file mode 100644 index 0000000000000000000000000000000000000000..1e09a8e91b533bf7633fea8ef8656b33adaa9b5f GIT binary patch literal 65518 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/nereid-shot.png b/Documentation/pictures/nereid-shot.png new file mode 100644 index 0000000000000000000000000000000000000000..138c2db9e12b07c44abfc1fa53b67d5cb2e5b481 GIT binary patch literal 47944 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 GCj39P7dff` literal 0 HcmV?d00001 diff --git a/Documentation/pictures/nestedboxes.png b/Documentation/pictures/nestedboxes.png new file mode 100644 index 0000000000000000000000000000000000000000..ea382faa46d95b1ec0feba83e90d554482c8eadb GIT binary patch literal 1523 zcmeAS@N?(olHy`uVBq!ia0y~yU^EA^PjavUNw>45?|~Fcv6E*A2N2Y7q;vrJoCO|{ z#X$AfL734=V|E2lP_o1|q9iy!t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~yqm2G#;k z7srr_IdAV8W=VU?9RC<8Y+!XjNZ|CYn`W)nq3?>C?F1ZrmHjh1EWZBYgS?FqHgbIJ{j3T{k~aRhIyI>8_~VUVbr?3k z+_f%diyYGfkt4hvDtQhnh0IEw(gL1$8ay7cxd@pnTx!478Xg}0^x?yYQ#Lc$WXc>b zs;`gVy6sn+)AiES{rC45nKb-g|NeK-ZSD0-F||+H!8j3Ua!9T7!fRi@mfpPM&}v3Z|{QcL*Pn#Ji&Pu&`2dUJbO?Ae-m-_3%~oxT(F z%(`{mlp-6s{`2~8c5S--S7!0tGELS6_N# zF4C5$aoObT--vT(40x`-o+F-h{rNd$d{{G`vEq_N-_w8p_GRUM z{U7jR*Sa^~e~0(6efa;iHa@HR=~fY}J_4DvDqrKuu6_ITZoe%9r4yhBf%)eAy5cyE zrT_NqIr66PcHZ{X%{R}0{A}VI3iPwrN_&0%hj@%k`!AHg)_=a;)WZ)iWc@DB-WV}u zzJ0yj?sw0gEqhb8+kD20`_oRRMy|h}zb}9F`O~krSm`e{>AC%|Kx6y%?Q6HyZw~_{ ztGjvEpF9t@zJDjGHZE@Y)k@8y*_r}g@GOKYfU?TAfBE!jQ_as$ORs)=f9>hh)YpOv zPMdf9{r7iw&EH>JL4w=!???4B2+lgXc1n<4{l7a!zso)EB*^`H2F{$gOa|uLpv$kr z?d$$z?6ehF6M08ZPw&*@$H}YT-e23zz2E1s%&ent&(F7i`uqEPs4sw4H^mFXay>qS zH}770`spRxQ~x)_=&ioK^~cYv=gPZk=T858`PH5&mkjb=f8BNUn&7`}^Y7pPR#|CF zAPcu+Nv0)Br#${xQB#+Aed^yj``-)zopr0CTyytpET3 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/nestedboxes.svg b/Documentation/pictures/nestedboxes.svg new file mode 100644 index 0000000000..97e4c8db5c --- /dev/null +++ b/Documentation/pictures/nestedboxes.svg @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/pictures/nonnaive-notation.png b/Documentation/pictures/nonnaive-notation.png new file mode 100644 index 0000000000000000000000000000000000000000..1026928ccb243b25b0073484d42acf082a661fcf GIT binary patch literal 8934 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 Yat$c;7i6r1IVxBxiW&+9a1+#j0f&!TZU6uP literal 0 HcmV?d00001 diff --git a/Documentation/pictures/orm-finnendahl.jpg b/Documentation/pictures/orm-finnendahl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1cb456eb07292494ab9862acb254dbd20c17f13 GIT binary patch literal 3246 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 + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/pictures/pdf/GNUmakefile b/Documentation/pictures/pdf/GNUmakefile new file mode 100644 index 0000000000..72ac2bcc88 --- /dev/null +++ b/Documentation/pictures/pdf/GNUmakefile @@ -0,0 +1,12 @@ +depth = ../../.. + +PDF_FILES = $(call src-wildcard,*.pdf) + +EXTRA_DIST_FILES = $(PDF_FILES) + +STEPMAKE_TEMPLATES = documentation + +include $(depth)/make/stepmake.make + +default: + diff --git a/Documentation/pictures/pdf/OpusAndFeta.pdf b/Documentation/pictures/pdf/OpusAndFeta.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bfb0d7deaac43574424772f2765df36eae4a5e01 GIT binary patch literal 9912 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

    ez_o($2c=&3Rc=MyGgeAk-aUXSQFDnIXw2Z9 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 CPdje_ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/pdf/bwv861mm33-34-annotate.pdf b/Documentation/pictures/pdf/bwv861mm33-34-annotate.pdf new file mode 100644 index 0000000000000000000000000000000000000000..50461e21a9135228ee930ec65c7a28b63d6fcc66 GIT binary patch literal 9270 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

    f{$O{ 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 TQk11BN>Y@iDN0h5r7Qp0@_nW7 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/screenshot-denemo-small.png b/Documentation/pictures/screenshot-denemo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc8d8480d69f2886ca13906618edf1193c29bdc GIT binary patch literal 43746 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/simple-notation.png b/Documentation/pictures/simple-notation.png new file mode 100644 index 0000000000000000000000000000000000000000..f7110941cae8ad739f33555b0203b98300652da0 GIT binary patch literal 2221 zcmV;e2vYZnP)G$iYfqsyWH;XW`ttSnrAB$Xs_tUe3IO?`kdC(3jOl1RdMsSTc*0x*># zopGd+Fn$9uuRHAmU12mNpTlSNcN*oj`k`n_&iJg$u+->AqAe+7Oorq0dnnfvMnh7@ zfl-dn^E!g~k%Vy^_c#puH~O+@Nx~S7GmLw$LY%%hQb`zlc5@m9z$iUoG-PV-P`Y9x z+8O|Ed=ANB4f-=F6vg!0jSx^phI2Pm&KLjpr2(!#&;lQiyA4nZ4VLX6*HABncne6p zq4!=Dme8t_u2&M}ip#+Vv$l#V49NLs8rk4!Sg__W=uJOHe`Bf=;>&xmDl zTf%_3R=st8y6-#w}~iT!LrC%}?` zqwUmqNI%jd?3EwJCw>>QK|Jzm>-;`xMkYyJ_h*tq#2@#?gJ5A+MGOjfO_qF{H{(=9dJ_7io5JEW8Er~6mV(e9` zbSdVZ)64D9ufUu%sK{^6wr>Q;1lZgLaOq5-!SMT8fv#|K8 zww1t~WdM`Hcl&L}W6n(n_*F_M@Bk1mE6z}+!b_gQkxC$A0|4C$diZIl2!Nf}03N&0 zK+44Rfo^@F{*zz`YoU7CWN*(yhQ|+hN|gfoMgr|sE>}X7w54m;!Fg@4x@-;V4M0^p z&@0xwq~+@y|>4ku?XUS4z<5&@^W^3xKsi;Sm~%Z5gI}uZtD=S zqTb8l&3FbDg~NO2A$HIJtH&5NpQf4dsN<1;u{Rw`Qfc!}Hk746sWG zOB^H?3$d0fLX^z`5}Q@M#y%V1-|lil!og7W$A^Uw`R0fUX@9f|x@W?nTEYvb!X!!{ zWAkFD%2j<;!*2mRQ^MMxgl-N87A$RjM;gcdFkT3;8eSJd2y5)~LI`2K7bdB{u5}iW z(cvtWNB$>ZfI1UL(U_WWO%_MMId?t^U`jg*U|M71V72O-nsUd$G3Q!za^}L>p$sF$ zthnNNrQyYx(H%3;9})lIUzqUV`-adml0C4(066weu5+c$@?HxM z8PjY+h_btST^2$J(R-;7LWm038B})<;g}I(d$$JJm>DZ!C44PuH@8=s=Rdl(A+xK;7R)^b9?axEAvvH-eChE zrSysP*8E3wM04xYL8INaVTEd)yRsi*5>uf1m=&h=4AEUnZ%hy7vf_vd0DGd`8>u%< z{ack+rA!7cR=|Lf8)m15h!9R${T^?NT|Y00O9AK;<=z2ANOSfson%uN78Zs4t}}Jd zxI3LXZ>IJ8M*vb2_H-d|ozUfJYwa#uoo-b#R+PHa1V)4HR#ExLI@fDZ^jB3Y8Fyt2 zpU`jdRcC3`@z6jVEX5}_WYnAU^ zAKyd|OZPde2RKSQ&dbw}!KmTgYy8tIoz-W7fx*v79wk6)6OlbM&%eINC1Ds2yIxxt zo8P+mFbW}r@Y;Bqx7~Cr%Jq6VjC7m|MMcsm%gy5nA%yVkBFr1@H{FVo(VhdzTZItK ztHM)$=n|lCz5)XnSJs7A)cc+-Lm~P8iAJ8R=|Z~>Szn9>%s>68OK-s>zf};0`}cJ) v^A|%qF+eocw96Ke*{f^WAdUZh+)?^J{)15IL>`A700000NkvXXu0mjf{K+zw literal 0 HcmV?d00001 diff --git a/Documentation/pictures/simultaneous-0.png b/Documentation/pictures/simultaneous-0.png new file mode 100644 index 0000000000000000000000000000000000000000..731b22a31543f6016aea82a97ef39431ce92b4ea GIT binary patch literal 4715 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 Of+#CImoJqy4f!9kCjs{W literal 0 HcmV?d00001 diff --git a/Documentation/pictures/simultaneous-1.png b/Documentation/pictures/simultaneous-1.png new file mode 100644 index 0000000000000000000000000000000000000000..edecbe798060f265f72ab33c47164fcd2939b3a6 GIT binary patch literal 4365 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 E0A7l0%K!iX literal 0 HcmV?d00001 diff --git a/Documentation/pictures/simultaneous-2.png b/Documentation/pictures/simultaneous-2.png new file mode 100644 index 0000000000000000000000000000000000000000..70990460cc50f2dd326a9f485c0649ec5ea00afd GIT binary patch literal 4850 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 Gjrbq@*-;|^ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/simultaneous-3.png b/Documentation/pictures/simultaneous-3.png new file mode 100644 index 0000000000000000000000000000000000000000..df0811c9836e9456f223116ec1c6e9b6fa23023d GIT binary patch literal 5450 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 Vaa7iN|6ZB^O;z0&6(EbS{{bt_n1lcT literal 0 HcmV?d00001 diff --git a/Documentation/pictures/size26.png b/Documentation/pictures/size26.png new file mode 100644 index 0000000000000000000000000000000000000000..0684d2ad885627be3727d3203bda45247639d0b7 GIT binary patch literal 5273 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 Msq3rNsMtsR4`!+~n*aa+ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/slur-esthetics-annotate-3.png b/Documentation/pictures/slur-esthetics-annotate-3.png new file mode 100644 index 0000000000000000000000000000000000000000..7f06186255a573642f07be0ae1c54c0b7c9cf09c GIT binary patch literal 5434 zcmaiYcQ{;M)b2?lhyK_St*wcfEV9cds~IZFNct7773WC=nW}`T%gH27LA+ zzY6|(jzYG<+YJv5GcN$3yZCoqA$ubi3BDxrMj+M5CayCu-nto;`B)JE=%*2?%7*?k z#2gD(y2**|1}+&|a^^8uu@PL9#QdG1y)MFtibh|by-zdBg93hTUWVi0=NeJPp2N>Z zV~W^DH+S?4u?!{O(N+v`Sn4!filHvd`5I1DIr2tRStqJ`EK(CCx!9q&CBdH9(7jx} z+<$rWW-9QTgv;>7u(?asv|VOa77u9K?HYg=y!CJcfD-fy0Mw8JK$02&gb9MHvZnz6 zPBi$p8Oi_FCCQF{Wi#$1NHK3%{c?M2OI2rBBwXps^6tC)Kugz2N%_AfP)JqQ*4Bo@ z4Z2EaY4O%h&rM8BEG`Z&b}sL_F0@SBi{s4e;^Q>ol(tLW@<`{5!Cw;-#=h2wTn(7` z?|B+>k^#qB#hV1w@QGf%fPq4`_S5}4AD!|1r$nq#IlW18LU5l*9QcXRL!JP>XiKhY zts=W3rU@x8Ib?B8;o@&bwGpE4Sm->e0q@K}(*FCXd#01oMG)$ zOMy9;ddLnaI-yX!ksnkBH@A1r&Z%NlAS8Heo$;_6b&P7sp?y>_5fIxt^RlvzB~b#} zLsqNJN0zOkwSSd6@@^&fslb*f?K~e38)=()0?4ypH_hq%}*p&9lk!Ar;*HmS=VDXth8&ym}n;aS9xBufRljqO9eSMu> zlV0WDYFJS4CHs>>TlZo6aJ+ql8y%ltIR&oX;D%jpCf2d~xiBK-F!<4Z-FWr*zy4A$h_TDBIQ|U zi5irFuY3x|Mm3frv1C9An|7CDqavOeZiRbU`Q9f==+U3NrNWDe#25TcdCzat zFe@j{GC#KUGj>*K@jXJ~zPTqlDB{DpDb5)GA&Mn31XVk|o|GN~N3d8f?~I|8UK7nk z2#{pcEK!wR8G1Fny!2_JFMpJz3L_yQ;wvW!7(oJ%E=+yM+)etFD9uC*i9x8w9jV6By5$Ir-sh8qE zHe$nZl1pbHZzp!jha@PkyS)t&KDq zRULkCs&9We%4BeGHTIK$%ITevWLwus`vyUN$4(FtYv{(8R2}!;ZZ0>$M0R@0by3Hx zG11i2YZC?c{`S^M_7^Dp`HE;3@D@r}HpB@%6b%T(EczJwjNOeWQHO4{h~6)AP3{^R z(teRRrjUaz8_Rn>Ar3k?v*HN40r)mqVtEbNW8z5#O?7b!N%xobq1Xr0`CY?5b(n`u zAjms{mEwDp1_j~6fqrf z#?el4(y#v!v-fn4TT?+V+#t4aQ+AyA;toA$H(s@Ay_3SkDcvAMS=UKdtI309{j+2p zIb@MD$fcX2VAWBq???6pay;zsp_nk$VCZ`g5@AOmV4iPkrQiB zhUN6%xv)$NL#>bzGxsP|&DpDOS`t~mQ~gT*N)wLG>P%c*?mfZl&#-HLSkJY4aV03? zySo|LJx}zK$CPv3-s&tQ;!jLC^cwFtPg!c0+~Dfm4Pq)5hs_wZC`=Dbn-hG5Y=TMt z=M;>ZGGt{~L5)%VUX2M>V#HIz3}-B#()w7$WuQ46i5n%{J4F>cByh9%PVFb~=}`9) zjt%pk{*-x_x6>hm=WAY}PU^zqf3QYI`;3RBz^e868)k(NDVr~8;%T#2D2JMuXvJ;d z4`|&?hyIqOe~wi&zvu{^IqKynF>H9>@TeTmAIfj|{Lzv}27A~y!SM8u5i$K+TbWzw zYFUGi#<)iuqA6;{U9b~EeGVgpgHc5&30E^}Nd;T6DaFqBY#P@Lv$q9LPk+~E@AE(;f+{~R!9!Q0Ocy3Kq*Vjv1rrPAb2QW56 z{oF=*S{ADwe|`;yD=9r8YQSn<{BeZ-07OM>e6}wsHM%&OlsO?gCqaKVBVUA9=B#zFhlfB?CzLge&D;s zB((SC`VENcH2`S&e+gE}SQnrRt1eVOq2#Ax3rhntWt*6&=uQt$Vun_67n(6o;RUU6 zzW}nx?W5#1PMPnLt9zrGBCUrrE=VMDSmBSBwe=!L=-(?Ht8tuPy-1SOe4rwagVu&} zE>SjLS9~sJ-@JMAiIfKaE5MTpX&~&kJ-0z5x;Z<~eDeE!#h;=qQZZVK z{07NYjEFUFq-9%3PRRT7{9k)}dp?8-8hAZwzS);(UXI6_1~NC3D%B|OFLlH$1`vec z8fIp1`&VZg+&ONQWGQh%;#9eldnTpJvhN4W_IXUdi%yFOG5C{YkIhb-s^LWtl z=~I>b@9XQOwif6vIJuLn>qn$^rD=6RO-)Tp3tPS<5MZAievgs8GH;U5>bcsNCSXEJ zN@`o@`s^8JACdSH z=TbZvH(+33(8LH!=^lG4-Ej{JvP>yT{;&1@*Geu9s+ybSUoT19)2#4kdZL4agZHTu z+EVkDJUAh;Uca^bH%gf82G;<%Gbd2ddv@$VKU$jUMM@zlIVBBXuI*k=04GauY zV8I?|hnlQ1(vp%2M{{0hN54zRET8`XXp@1O(xQfjqg9M`apv*gKf{yb<10-M{r6US zz1D`REv`E(e|t@stg6D{+)$_?Et(ZwOUoA2y!=u4wMa-}x7X%)nbjxX967J(7g4&8 z0JFcWAZK`Zc+}L?BqSvI(}k8R_;NcQFU4?#_%D5pa+$0gX>2SiDk>}cXWMBE$;#$?%_&yw1d_df@p?YSK`wY6O?CqBIRmE~UfxK&<4LWTUEkkEX+8*4B% zf*-o8!|HJkh$=z0QBWS1n#}7`*qz2dN8oTaf)v+`tYrZTpFxU1684obT4uP|p2%l;2(YfXnkE2_&6`g$0s2 zuG~9bgLzUCv=h0V-?0QCd2)701l_Bic$+e&BQIzVLCQN*%Grk>T;6@A_e}#fIy2Mf zZg+h0^@t>?tHK^MZr>rRs%0-8hG@GuEuTjX4|uu+J1J9G`NdSlRol~)sQ@dTy+Son zq&3NTp%+c%4=po)zdwlCo36ao}}c8+&?(D9-(~d=i?(~ zMd}#RZPPqzg4dW|*A9Yf zmYbch7f(w|tHxLWNv*IniwYc$xV?>XcjrhElaWz3^7QwgvKRO9_AdGp#75P<&>HAR zoblNheZTKguziD0afU-TUtabI(!_fe&=*GYraJliH@3E(_ayVgS4BrhXIxIr&s$ko zlzWI82NM_Yb)EDPfuCArgY~R0LmUc9evGj1#X{@yy6b_;Y&L^ z9_s33Ze|u1{RLa5vzyEN8)JcoTXOz8KU${55SR~GEI&QPMr=+h+1Pi0X<10$iIs)r z=W#HRNZk4juHhsaA+L*NQ}7pkfy}Ow-y9tsWqjv1#V{HKO9dUZE%MPUJM%* zJ@@wW^Q#~!_{v=5X6ljSbnUU9xhRC3NngFympJpL_dxBS;cWQ5>{7}FMOh@HV!N zbtHxdeZ9Q!7e~j+%F2%)HsaFxt8>{8b_msV5I<`FBjz5;{Wo6a39Tt9DL9J;eno}A z!wO604Z^l~{0gDeeXcRzzn3Eduh+dg*W?Ap>2i~*iD2%J*;#f^@Bv$wu)Frz1*kV( z5kbjnMk}?wxA2Xo3*vbE{3*0h`*Xs~hIh!xD&}|V(e081d0_#Q%AnmY#?&%_0?>+u z6-GOkNCQZMCn`x|y;lg^*QxM}!oW}!sjE&2*z57AC$J?mE{>0ncY5j@)+T*R_bMrk z&3u=@5*DQPRPHF5N1fJ(x@^|LRjz?cIREpM+{5P1u=H&ka~VFAy)+Z~P1mmi5T z1szU5O_jqKV!XOR;s%-pR@8X>Up(21aFG`DU216PgVXiGW_0NdF5c8$!U6A}V@jd5 z&tNhZUrX8a+-|I!W9gsK8={1$KCR@f$@`aCM$l!^yv}-=*Y-$wo)(N%#BsW1#@6@( zW?IH{8?#n6bAsH)(i7lG5xLSBZ@S3J8T-qLJG)abN|^ewsVP%VsoK`9A40s3z&#N> z$&lUYs{UEQe`WDf@h~y;75f7g6S^h-tN!RsZQEj8J>^GEOiKb5i|^?0xOIiIxxdLu zc+$i=SdDxd+`twVtZx(X^?ba%FWYVQ+OmdM=Uz=uPshc@CHoK3zpDQTnHDL?W?dl- z=xcJSJB()#*d!3vcE5{QHtL$2H$Ul!w)ah013$88K&7Rp3tKfCo{8`qA3l0vZ` z#rr@<(nXoROUh*eX4a4aj_#?QEn6LMu=(xVBVt==5C6ZxH6iSjp0U%hO9Ys0@pZ5) z@`lEl9IS)%k>3L)RuXkz>FG)G_BLaK`z0SeBE`1$$rx8vhuPd|7Q}2szglHCVXXb*G0y zg)Qn|LG*QXA-70{pqdCo+_dZC&p{`k2o;2)yKJANU`7#Xpvc|Wa5^*=ng2e`)dvQ? zsi~$mQ)!#L8E#t>1Iua4~6z+BS^UQ z^>r|Yf@&G`==%CIJv|z_nw8r3<`5EP8r)*Dk4tv~dx>@q{OJ|IY=GW0?)~r@$P;jq z$tvr-jEs!8Z<(2xY~a425TR#Rva?%0`Li}c1N>NO)8az0ydm8vLr;K5gXjBKfut^1 zIE17)1FW`i;K;6qkBsQC;9}tUpxEp$JRqaKeb@2Z4K6TVi;9DNEhCUc9*zZ5g@W}v1$`zO-urq*A(^jp7+r0cgQ5udc literal 0 HcmV?d00001 diff --git a/Documentation/pictures/slur-esthetics.png b/Documentation/pictures/slur-esthetics.png new file mode 100644 index 0000000000000000000000000000000000000000..41467980d83a708ca724cf80a866612c97da7339 GIT binary patch literal 4681 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 YiSd`~Oo>>Hq)$ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/spacing-with-corr.png b/Documentation/pictures/spacing-with-corr.png new file mode 100644 index 0000000000000000000000000000000000000000..b62ed8af0328eafc3a68a76262ec113b69e6c80d GIT binary patch literal 5618 zcmW+)1z1#V6J3#5K@_AEX({QhrE8_7q@)c{KDtvv0RfQ~DQN-OC8S$AL;(fq29bsp zB>l&KVV8UFv)ud6yl2iiGm&?-(WJz*#0Ug}RPBzk9s+Tp7>*5)c<^~2Z^`UQg4I*w6=&{n+tamLgWGDQcm$=TVK{Col@8U*4Q!3yrNqoekctfIE|tJv79 zGkg#%N&1@8-}5t4Qqsh(*4EapF4gEJxJ)fEG7FF6`V4ZKe&m>W(!_CQ*;rBT?A!O3*C)YgqAr}6)!WLNL`@*Y; z*NWc5voA<*+KHGpIGNWv2YZ)0PD|O~UxqthRM|7s)QlD=w5PkmAt(12+j73(*yyrI z=(B8QYD!B%acgH6f=KC2;Lv$1a>=DRq>vi%jNwyvcX<2!sn@~b#<;Ncl^Xw}y_qII zG#bs#$w|f=7Z(>C9Ne+KyV%Xa%6gZ*{X(F5qqiUv)4Ss0m&46o+ZGjF_;c2u--?cp zkL&8{0z#7AdHijKQrp_ve0+QoJ^lRr)SL1hORK7WFZCvzpPwgss;G2^h2hJ{$XH() zoOf1@WjOmRMy;$?Qc%EN@$g5P^#lHnBvG;-{VDv92i^<~k=_#(tqKXjQ|tagO4h!o zudmNWj|>7_r0|**U@$XVEzLPO3rG8_Z1lGn>gwud0}jp6y;0hQBtHIPXG9-b#po=8n(*VofJ#r_~{{$Nu1LN!-KS(z#96@v^d1H<6aG1J5DSM-~M zgcr`IZR1N@cVlnpr8<3 zQzM>w;_l%Qbbj>seiKd}9m^2#XD9oCZLRBaU)9qw)|*OS5|fgW5))b1IF&I~Ro}

    ~3!N=a9j9t{e-7ocv9T>ZeLW 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/squiggle.jpg b/Documentation/pictures/squiggle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68adf60223d58e0b227abcbe92e45dcaa8c46ea9 GIT binary patch literal 3052 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 K#GJUcGyX6Bt7;_x literal 0 HcmV?d00001 diff --git a/Documentation/pictures/stone-distance.png b/Documentation/pictures/stone-distance.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7fa542435ae9bb26292b67c9b27b19b1a2d4f8 GIT binary patch literal 8419 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 FV1gh}>Dd4P literal 0 HcmV?d00001 diff --git a/Documentation/pictures/summary-gradient.png b/Documentation/pictures/summary-gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..bb723265cbbacdf23862f57d9bd1ea770add4795 GIT binary patch literal 504 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 a9{rL39w<0>ga0h>X*r&*elF{r5}E*-$mGZX literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-1-annotate-de.svg b/Documentation/pictures/text-input-1-annotate-de.svg new file mode 100644 index 0000000000..3e6cb724e8 --- /dev/null +++ b/Documentation/pictures/text-input-1-annotate-de.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + { \time 2/4 \clef bass c4 c g g a a g2} + Befehle beginnen mit \ + Buchstaben sind Noten + Zahlen sind Dauern + + + + + + diff --git a/Documentation/pictures/text-input-1-annotate-es.png b/Documentation/pictures/text-input-1-annotate-es.png new file mode 100644 index 0000000000000000000000000000000000000000..8599dd75e4fa3c60f8608197b372bd2d22d38bd6 GIT binary patch literal 15052 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℘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 aISlqSS%qS50so1LASb0PSuSoI@c#ft=+DFe literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-1-annotate-es.svg b/Documentation/pictures/text-input-1-annotate-es.svg new file mode 100644 index 0000000000..d5d65abeda --- /dev/null +++ b/Documentation/pictures/text-input-1-annotate-es.svg @@ -0,0 +1,214 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + { \time 2/4 \clef bass c4 c g g a a g2} + Las instrucciones comienzan por \ + Las letras son notas + Los números son duraciones + + + + + + diff --git a/Documentation/pictures/text-input-1-annotate-fr.png b/Documentation/pictures/text-input-1-annotate-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..485a332f3dc91edf52872850110c1ad47ce20eb7 GIT binary patch literal 18772 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + { \time 2/4 \clef bass c4 c g g a a g2} + Les commandes sont précédées d'un \ + Les lettres représentent les notes + Les chiffres annoncent la durée + + + + + + diff --git a/Documentation/pictures/text-input-1-annotate-hu.png b/Documentation/pictures/text-input-1-annotate-hu.png new file mode 100644 index 0000000000000000000000000000000000000000..ce17d3867183218e5b19fbc53e7942bafbee330d GIT binary patch literal 27966 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�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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-1-annotate-hu.svg b/Documentation/pictures/text-input-1-annotate-hu.svg new file mode 100644 index 0000000000..cb579a779b --- /dev/null +++ b/Documentation/pictures/text-input-1-annotate-hu.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + { \time 2/4 \clef bass c4 c g g a a g2} + A parancsok \ karakterrel kezdődnek + A betűk hangokat jelölnek + A számok jelzik a ritmusértéket + + + + + + diff --git a/Documentation/pictures/text-input-1-annotate-it.png b/Documentation/pictures/text-input-1-annotate-it.png new file mode 100644 index 0000000000000000000000000000000000000000..9c5583cea309ddca0b66f414dfc3b6ea88bd6c76 GIT binary patch literal 24960 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-1-annotate-it.svg b/Documentation/pictures/text-input-1-annotate-it.svg new file mode 100644 index 0000000000..952d9f2f71 --- /dev/null +++ b/Documentation/pictures/text-input-1-annotate-it.svg @@ -0,0 +1,211 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + { \time 2/4 \clef bass c4 c g g a a g2} + I comandi iniziano con \ + Le lettere sono note + I numeri sono durate + + + + + + diff --git a/Documentation/pictures/text-input-1-annotate-nl.png b/Documentation/pictures/text-input-1-annotate-nl.png new file mode 100644 index 0000000000000000000000000000000000000000..3a8c3d81461d5fca631fca2658e5ac5f745c0171 GIT binary patch literal 27053 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-1-annotate.png b/Documentation/pictures/text-input-1-annotate.png new file mode 100644 index 0000000000000000000000000000000000000000..e730c32c2fab4782350704abf478d11bfa02aec3 GIT binary patch literal 21267 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-1-annotate.svg b/Documentation/pictures/text-input-1-annotate.svg new file mode 100644 index 0000000000..aeedac6acf --- /dev/null +++ b/Documentation/pictures/text-input-1-annotate.svg @@ -0,0 +1,211 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + { \time 2/4 \clef bass c4 c g g a a g2} + Commands start with \ + Letters are notes + Numbers are durations + + + + + + diff --git a/Documentation/pictures/text-input-1-output.png b/Documentation/pictures/text-input-1-output.png new file mode 100644 index 0000000000000000000000000000000000000000..7a375252053e37ef0a8226252efb8e919ab434e8 GIT binary patch literal 1631 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

    -YyAEyp8GzgKiaa+j^IV)? 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-2-annotate-de.svg b/Documentation/pictures/text-input-2-annotate-de.svg new file mode 100644 index 0000000000..6dc5cd3b4a --- /dev/null +++ b/Documentation/pictures/text-input-2-annotate-de.svg @@ -0,0 +1,276 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + \relative c'' { \key c \minor g( <ees c'>) <d f gis b>-. <ees g bes>-.} + Artikulationszeichenhinzufügen + -es für b, -is für Kreuzhinzufügen + Für Akkorde Tonhöhen mit < > umgeben + + + + + + + diff --git a/Documentation/pictures/text-input-2-annotate-es.png b/Documentation/pictures/text-input-2-annotate-es.png new file mode 100644 index 0000000000000000000000000000000000000000..3fef226fbd5788ce1efdf377ae776aa37b4f6a07 GIT binary patch literal 25612 zcmaI8bzGET+byahr63KG11eq8jdV9krywDc(hMM7(%m2-jdXW+h;$C!jC7wH-|ySM zeZF({{zGAgd7kIa>sr@Z>z*Jb1xfU0M9&^QdW0@5C8qM|(US@A`(KnN;C~opR}T1r zY9poj75tR?_fMkFLh#{DM;l?&|NitNMl)NgM~{s1rNxBbJJ0T=qUwas5chnb!@4c5 zFz6;L7c3vH|JWj zt7mI0OFD^KAtkS%pgkU481w1nmi_WO3kwU_o0Qa4KHr~W@G*+cfZAGa>57bujF1+S z$7P61MNT^v^LL}My#+h7FuPpezX*4@aH#f9>kb;aA33Qs^u4;e=kXBN@*9((BtIBJ z7xGf6p1S%J?a(f1B68YZ$cOL(i_djEDRon;-M_O}os1}&^K~0fD{xU(8ce(X`!0_* zhf`mBw2zF0H^=||`&X;h#xPybJtLIw>xLXMGV)}CxVShH5>hmkd{j(KOhiOPT-@a7 zsFb|?`pmswK)~+K&TyK*^#F4VE)I@Qh{x^eR0sicv%@ZavfFNVY;MWGI#Ty{LQ#*a z+w&#Ojul1h7j+i$i{>h-szyde70^q&UT%#H(~&e*R@R-Jol?CfY-9MCrheMc&nLb_ zDT!I0ROboU{TMQI2_ODcAu~&!XN0LBcKMLB#PH*W#i#^0jnrT%4N4Uxk2_6cR*4#H2(K_}FAji|Lu}rPA)lr`#2> zNP^zmV|Zt^9b?L!l6>=)+94Q^*}1(@DlZ_h)7A%aB{|lNp4S->Z>ySYHUpT z+n;i>KgY$#m)rtFsQtRBFc%aa&#bS~lADtg**Y=to^G_K=O>4YH9l1|kL4`;RpQlN zOl)ib9l@u3~zBPDsd3tra z`{ro2%Hoaja;q0+CTMlsKs>W*P0go)xY5zkbM(%h9{oDIPaA`Y-e(4N4Gqx^hz$@FC>bcHE~^K)foW;OxHOsRX(PE= zSXhcy$cdzCQ&M#3{ho-+%cJw`&RMru^1&Z}nXL@EsW_uXqIF+ zCm!VN>}+kS%?CL;qO|2M$(J8`@hcWA$$}+HT3YFhbZY#J?{N&8QIU~jmwLoa7Lm)& zy)DAt--t7A%v7=0HnTi18h^J{WpAhrE*v6KET_%<@bY#cJPm6rqAkvIe9`+vlBRA# z@Wc|!g8ffNbNjnVr%K$|4|wrxj3n3_<}MsLWVPJOmZsiqW$XAX{Yz|4Y0uZ01kDzS zQ#GkpttOLM>OU+4;djU3mQ?(|MI82o4UL*=Pnn`o?nU#Wy5@ zEn;j6CZ>ba-Kn)DY;0_>w~7bdDwO){SQ;{dFl=pY@$h0(Qc@JohJ|ELl1~-Jq$%H{ zpkU?A+;bBQcKu9R@a&ki^NX<6)|vj%l^yeoqo3la$A>u&lQ^6mW$Z16VQB7G%3x%8 zTT*YsM~Mnp){I+LBDXtyh4}VG;~w4Xvr8xcN#z?n$dF0sCLcU(5JB@-(yAC9f=*!)R<4^nD(kCF@y)X42pt~=mA3vs3f|5UB6#S8uCCzpVCLY!% zij!fxRLsLY@}nM^NEiR(*bj03?7pS-KbfS8uQar@v@|p#JehUtD^DL*hbScvk7g@` zR>@pXPtSNp$6$Z9Ds?Z_1wVz&Xo|WbuGLL=Xwhk1)a)1Mx@z>-yWPG3d`{m$#`>kA zelN4pXFo++UyJk>PNlP>2_eDB1>13+Yv;F4AB38~PPzhi4D~Ofk9|ZwTOmTakW-7` zP-=Q~D3QRJ00Tk0uy^GN4~0`ZPZhBks;@N%`Ww&op^o&OO_AV%#I3c6FbctMASgxJ zdKaNz;ny8+|Na@xt*NPbVlA$s5@pFNoz;@YZTpIesid+pX3sZ1HC0}6baaNZbf!qR z-abf7qw4b?#do)2ckY*e*C#idG(kucjrub&v4@EfS5w2qK~xjn#I_sOT<&@k$B4Ox z^8TEY%v}ER{iI*7knUI4wulSwQ>xNt&BLd|{+0%vo<#4v9^XAp?{s}dLq^sqnZ=t= zyERWd)VUoJE{qPT2<}hPPiWzQ`6x^}H%I3xFfbH)+gw!TjG#)tO*i`dLG#ls+gpi! z)XU?Mft9t+G+DAD&c6*yN2JJ2q_4JM9aB^BwV_`(hv8I$Xz1wD5BW<`aU?1#YIb(^ z$B!SatwIqm%FD|`)5NP{xvb_d4i*}6J9|Qjxt=|HM&8!m-cGHU_Dex%U9LhgU2yHE zc8wKB;k%?EA{5deCRbcS&6&U4)s`6#hdzG#B)+g%Z8_K8(Lsp*=FJoo9#^;ER%yVlFqxG;KE2uzdpqc1QpF@&?X<5oW(6l zR|r55b3Paw-o?#Eqgm#bQh;qXc+jFezp5~Pxo?ko#V?l86%ZYbV@u3sy|^}%B^z7;x%aYXeUFel*)n& z+3x^JAQge=KBM|zi#~5D)Vk;Ia&{&bnkVZ!2fERZCLxns3E{qjtjARIl*@Ca9g&BJM_O9?^NplMC$bs&r2dMc z$9n1uIVzmBjPmlo@%kRLbacyp`lc*MdECZON4&pg zctGmf5|I(foBI5IH#M0}*M@OuWmV{gEe4sZ!iA3)&8QaL5(Uf~qBH4K=*c)8O4P+} z-$&|hWETBI?jjILp`A-FLke5a@eC-MTThtnIv(3QIm{lLVJZl4pRw{8bOdRvB*zcY z1y|FcX71H@#w1Cfq)UZW9tSnoMe5gQy&0I!u49`N-b{j43-#jsJ*z$8V{#}MfgvH$ zk~HsHqKmBTmp^v44MfV{YH6!;*)JI7!P?ZTCi1@(JhEnosc-)Dnu-0M^!I!)K#)+B zNX3XRzUbJ{@m}7Rr=s%5Re$sw9)}t*hbM=j3b5xyyw3XIfW}4jh*i!($v8b)S@%sfh4?yAX;{`%zrXc!8h_YC=q0 zh}5Q6o59xZu42O5O!ZPd<5u)p@cvU_xEJ|Dp&5+v?-j_e53jr*!0y8vUC0lw{{4CT zsn{F*-!t0TInzy2kSciJyMuf)!>7XF5-6RnjzN|xW}3#d(|SifUmDz9U8UmMx_+pp zX*beeLgL?zU13!wH3IiXj7vC6pNV>_>7RL%OG)BEz-C)M@<%6DQ&shO z5yh+qiWv@6MTR#Gd0(v%$6a@J1fdm+(ju3_lvzmfq2y8l1Q1Xwb#5*+yAzYX(J%6a zWj%*Mj!O>v12Xu-W*V(RPWsgHQrt>jp?KR%!IeRs@cK1^p!ImR^cMN$N6PHN6`~l% zx(U6!A;(w6h1VICQwW^_0I+Hi3r7r-3qAta{uM1KeU+h=i!xI2u)opS2haD!2xb@T zWzDl>HF&AM{nf}k^qG{v%svhb2X&!!^Ci;!PLXDX(!WaxGOJ4tK>8zpo~_1jkN&w( zV06hO?o`j@z6B41P4mo967%Wy5e$Lb>3~ET55yrxYzQbVcYgoGK)qSIzuR0r)?Y2k z%j<1zH2|#!$q|6I@$qpYBBK2K^dgnFE`N>fn35&axva@h)886C8A&Y2&o3)0(`<%b zPU(9xQc+D-m?{zy5;{0I)NWQ+V1N1%7>LrV3myV0$w%#B|)sauFGNs<5aKh&!mqu`}$OvH}gN$ z@twqfRmT@7&!6wk)i7TkgL=;W`mDtdy?Wxxs6Km-}M~wbDH_Y=o=&HBNZ2bV?o}eovXIYvY$Iz=}4|;x_OF4BwwxH z;sLExq0TKi=(r59c4KJ9NHSPjTKU6KWoe(8y=RwLthhp#tcchujs@EH^P+cTO&(~fk|0HW>wsnmJTU{;Hsbl@RG59dPy6Woc zYItDC*I+Oa^C}a!*rY3mtVtPSf4Zqqs#h#`>7W}T9GniKw8TW|cF?js zp?*d)R2x4w_c7zZp zcCeq+2m5}zGZG+WnAw^pqSLgrw1l?RejQ>NKap=JcA6@L!2e~ z+jbepHaAdvlJmWZfuz)**H;fUd#~ZMsBK-h`du;9cy2{|#Ytjj%LZZ?tagWHn-9C& zJ;lObgUr=fn}$p_xj7y9kO>9;>RxK`e203!5&+3lhhIrl>T3e6sHhXapaUl9{M2zI+(a4PU_Vq=2 z-UDKdf75&Ck(7dhl_|Zu9=z@A2y(M-O6^nQ@Y#!}6RnRvAQ$#n&y{q%=BV*LDFRiO z=Z)1D#xQ1a%FDHyftEHO zq*nm=(9rm8VZKF044dN2I<>8Ig80mO^GOUEnwn(_qUabH)T;tG*w`idEsIGrOha1R z$H5qrGfW@_Gg>~n8{7Lr0By)q2u$4+>B9drl8tza6|FKZK~PX!SOJ%MEkLhdYzrz0 zylXy?D#l?5-_BSPvHCf2zx`G(Q~2y)Z~w-tuC8uEOebmJ3obr>a7c(Mmepe8Owx5} zLBWqnh4n*T$dFdPILzm+hc*d@klhWKWM_>{gryQL!WK>eZ_Z@wN5!s>(_c5fP%MS5?*1p#1HOXLy?^7lGK{->>g+nUj~7=j+>B zRdLyU@^_V@u?LvcHe9S-6R7Qab79M;6V_&+r2iSL3|^VY%8FRbW~KLP4hO}P zvD@f;xY(pQHHK|7`&&k87ZsY?vi@Fagc74S00R$U$+V5fl6|})+uLQ9(?g>ptrGCf zj%m;3hiN-r0kqZ?V6e8M>bN)UMHzY&Upa55+ThINz%~Ad#d&|VW0J*^Yw;CD#g`g! zjl)l8HpRk)WQ025!?c}cqz`Zp^F4g5##+BxU*UTU3B_1#lXqjOr4I{jsQ%5{(+^OPCKVG|Dapwng%FxkYF@?? zq+)wcA4*gGYGpB+I{sY^-*&;XwC@_ck;zIPTVjVAdWDpXp4&d}YjXhW`vHrlChjE7 z5=6Sps=v(vz*X4beb@ogbryIt={%BSA;fi z{0Heqj7aM)1Wd<7g(w6OhapDuH#6aN};s#54W?#ro*j?XgzI?cGa@D1>&<0sK@MsWuZoENcEm=D#q*n0;E z6b^rcFt2w4DlA6=U*9p2S7+4c4!L{U@*MwAg@GQf?Et_v-h!1H5j5cNuw8+|GTxTs z50dJDV$_+oALE#N-xUjD7+_$&9p10%9C5_2aguho$yn-==A{Fkt~{(gu4Cx#=PUCm`cNi(}gUe+?E%lNbio7cpmPy zlXz|G#^hT(dY;%gR5fDf#+fRNPn=r1UNyi!(N57Oz`#X+e_ZrbOG&Hi%w-)YOpd!| z|0)(?b!d^woaiJn-`TklE=2b!AUGV`uJhJjl?L)R5NyYVp-OONIcfXeeuUk3c#HtL zvNs8q5^w>#HkwFd;J)~HJ(B^1rbE|k#O7hG4c8^EfjPWl9|c`6CSA{FZc7 zJ*SgDtPAnvv}+R!5|+@v>z{jaeGzw0aJJ={WZVQ={VcTnML*xy{uH?ad%=5S$Y%-n zb3y=`)`$BsNwa3g`QvqJ=?fP`VNAff^dt>kOV#v{`8?N^fqt8#LbhF83zVmQY%1~M zu$SMAH@f5Q6B4&WH3IZT{HIv;>S0e%&tZ2tspmp4k26oy>GUVEXXW2cFD~;S?DKu_ z)i#3Tsz#H;!uaPl-(I|g7akw!r(TypQIKc)V{2AD>B(Mbo;&ZE#2>P!G5>L|+ZJ2) zD12MnQOFb&e#7eiW3ej-=uP(DA6Tr68+uCV#?#NHUN`9T8UGKb!ax|D(Jhu=C^Qw;~{D0crxNrhakl z55~1X+u@6wZRK;%8p14308uc)o)O(HH~u_u<^&P$5NMHTM7DRqn;Y)t7Q8YsI>%4%~5oRN@r1aEIm_xMR4qq=4)t#%;$p*-o*N ztKBr^Nt7U;bgkTXdca>3_?Q<7QX3{KVv-1=RwQvs9|HN$1INibbX6;)1&ZY`nfvom(Q1~7~jOqMsLU>FIHNQ`en zLIMEN0I-Al@$z^RD80$p5QG*Ik#=SQG|T63;R*jgt2Ns42tPr_;DmqF^_B6MI+mw? z6227LbeQ^ri3OnjSpE*R1eKZ+^yu+UvaG8suZ1(vB2;0bQW^=qbJxZ-deFww z0=D`Mho#G{HBq5B|@r?tqZ~G-o zR7}j5CTM3zv0LJ8;$UtkvZmhmZ~+KTP2CHwr|G?(JvZ_u1o1P;8@o6TyvK`h<2Mh^ebb`5ZiGOWF;*5GUI_kb(Mx?R?_!1|+Yt^-k6AOR8av~{fm{=@Tcm50(m#-3#!l#8o>z8ot=vw0S6%Z zjQ^o%>RX>^nwtItD5-JjPDx;R07QjWyzsH&wXUucm&rm7efBOKo1$lKxpMGo5i!7x)UhG+ zlAsv6s#Jy>uBP!Xhm=yZi`69pbd+?_)2Ll?D5^#ktLg*_i^7sNQVkHXm7u?Dwnizc zd)a^1fV@8qMkl#+9WhDNthu;6tVZ&sARd@VT@9$OuP+I=jlpcCIhaTQzCj%eh$t{a zpbAKdRECl>uA3X26*Z9=^XG#QGg?!N`mb*U5XL7U@uvgu%H}A5JVR05YSq+NxRs4v ziTaOM1k7ae(T+pg{Ou`3v!3~vDj#9s@BcLINa6iwLJVYly(tQ+9OE3XaHWpvu=E$# z-MI$V54>bBMz(t&bFpi*p73Tby@}&iipjdV6%U@6N%`Q^-)GR&@SO06^}gB>aB_kn zD9BGnORGD36M#{3VMflB<-O69pAZvvW%;9^esY4T`JB})f>gEoof}z_PbvMw{lh(7 zE~5yjWnOS`;X-HxxouBINUGqdyV{5EWZ%wr*-vUbOea1hz7hs4;k5o!mnK*BCoiR&*WIE(NMJZkAw%0U+jg}KfEafrx1dz zKDZ;=(mj9gJcYe(SQeN`SqE;MJ$;kq=RptS=5r78$^2o4S|I=*QX)K)!6W1Xz}1uYD9xc@(a;E9FbIybb5xlQ5lt6P zNtzD65(E@48X6jve9{|0{ZUX*FftZrW=19@_0tNXb)awVr=71)Gk3WL2c2P(a(~S5 zPHGoU_epUT*^C|DBdus5x{q~cwl&0BA#-;{OXYvR?L>(#89Esl4vZwk#L0lh@&v}7 zj~_n@xShpBMgqpy^K|EfY!@;rvd`9F5@L7eySYzrSl8OTk>|UE3|Llf^}+JGRHnb* zI7k&;iIxA|?D;kXz`>6_T96&PJ+1cUZ;wH(&alwTjt>%RhZ)WC7NJ3NiU7}K|Oa|`4Xar^G z3kbO6a!IQf``&GkHv9hP!Bm3%_Vx^M4217&$P455DXDU)=y#i3*n(8=F5tlLlWeyM z*vFyaVJZSzX6D0t`TN|DGE&l8Pq&mlew;orTuAcgg0~s7{*+JdrksgO8k(CUmV1n3 zC@*F*N{>{>tk|9%43S6kG z7<0TS3c``DOh|Y+`G$>+O&WN0NKlnQK%+=1Nh+!rp3_hEttfcbcNg`>=45c}_{=dMUW;wn{$RfDjXe73(;M$DT!SCC&z>1D_1hbCOLR$o`a~HtD*D3|85;t4 zjixvda;+`w*@$|aL0d8|mMbnY<~PI4f7gy|Y+aX@;+YF+XlUd;rb7f9!7kF{_9_z7 zFp%;U!wCz_lf~`iKsX3BXDOEZUC7Da+}GJ8b5Ga%zT}ISz|04@8cYTaNRJg$yb1I)M2Uj}?A z^V()#TW|Xw8XOKT_UwT|=`Ucbe|Deb<6#K9=y(RZlY#vrl^lfexq1Nc)2Hegre(F7 zzP?NA1sRxJbR5+R@J-A!v$|i|W2Ee? z2dwy`uPOe23=6F|)C#@*{VD`3?Cft?T2im}tNG?$NRpMLcVJu9{x;l%`GkNFhF6&I zlHGNbN6=l+)$P`WwH4j|(oC5H&Tmi6QH`YDRwklrbR@k#^wN zaY@*3uO1HQueCimnY`roxZ&opIHi&o#)kmMVKBN|*R2CR(h@t!NZGnw$UG_>92i3> zebw#eVX3{w*tQY$fDnCqIGOD0liTgb9*sY%_a&(V3~t)W;(>d5D; zy~6(bwa);r5hKUk$@cGJ?dBR;b9366xt#mf(mnTbL^bHmYTC1YQP*f$Tb^iURHQeE ztsMfly(dYtLbPO>!VQVjQHIgOF86?_3jmH5aOGl!LB8%S9k76N& z3y}|UxGVT-UzoZbXC_ES`T;tc{rceZfD`<2d65T?OHdkDiqTUwXc5cVA?MN=u!(t4 zYUq6sye#db8m2meTGuRw#bSXRuAiq>(C&qS5gb0rPevoiTX%7^*qCVVc2l-VPPz`) z?Cc5YoRCAy)ZRl=P)*`N9PX0rX`;l106*`|+eVMq z$(f=7{#~1>MHi1|DA<=Kse{w!{*+w0g<4e7-xwvIayoaGHa7-a3j#h$SP{VHE=jjQ z4Awcsz=1qWIXImCZNnUN4yfXn2_`Zg&;B_b`C%c0_#CGv(LTyU+;=Cn?JRy{yjiAX z=`MGdm$UVXXJsK$A#b6^7psYooYU+ahn!diI?_tMgd3(r#-W|0o#zJxF$%PyW2DDT zediKk5;@<;CG^>nP^$w+W0X#{cOsm6yVzIFK?kp>uPVCAP%Aaf%j_EOoNGH=er~o2 zw5E>cQ}srw$Nl{DlVf!YjhnO_HSrVih%B{!5vq48b8{_<6RV6VZegaDIfOTNSr{s0 zE|S>(b^QI=woVeq^&nC1Hk&HgB@wrpJ*L2%h#IFJODw?ob^EEBvl$Z`1|h@I6SI!flMhG;=n6&hhFuvQT@vy@n&JwoJoyr%=1RA zMDfI3reYt=yvAu@ZbX%N@$oI;r|+!c+!%Rv#%RVrShF;;EL-Z_ea`|5nM>munQ7hi zT?Y;)nd3doPdKs?$=$6k7Qe|JHde5)Fk>yARkpL|`A@sL56%ygKm8u9ABPbaG!k@w z2^(Sj+uUy&n_2EtkHG5Oca81aisv#wAbm7?E2`wzcKfY|!`WD9LC#`NvT3ZE_l7jtfVZM+`Cq0QDC>UHl!*r!wMX!f@}C+L3- zk=*YK`2`hOwm)A4X11!frh?}y=J!Q=GI4@2^!n&c#B$=sc=`DF3R$C@}_fR*Za^@pWhx1CK;aKSS=5jADC zkQ?8e07?sT4ZJ6*uTx!m38W+b=pe2m7I}DcU5~OOTEh@zqGiuqYT0*v2x76i2&L?r zM!!&4{Qk8la9^h&7WzEpk=hpDpT_GYDEJ9Q zqlk2Gg_*0Z3$dGVDpM%=2}_x2(O9rY2(yzuGW9<3sus_R4$kzTKo|Z?{YG!;m(8f( z8L~AKHRU_M;@9;v^$q#Z$frhZM%x22yl0u_&lWq83-i_o1u^1H+>e$o*U*ZL)kFd- zOHMoqD@$6QnFh4zdqaFh&j;Yt0LsMd?W#+VFNqU0zhXe938;B3l~LJxvjfaR{3HE0lB#-uN4r`Acq|PbqiY zW`+@D6Zn^?)!}fZb>ZdrS^4~HAy>ikTkFo%81kw|RDv(%kmC1_ZOl2{>`;vd4Eo&8 z@N9$WLnuf*)^S*LF{9~R<}31JuVtJ+o{ z`eN#Zt(S$lvnuwB5HphRD z?C^%YO4dvycE4Mh!o4u?tTFJMvc{M{@pfCE#LaHn=IGM{TJtUl0|LqFVc0+E8h@tu-kTlyD>Fi(~|OOgnc*st#VlKhRvhh~Z* z{Ta_cK-Co2RCg~aDc2G&aUMM&*H5}*>?epHtnLXOXT9?7`K=#vSFC9@6PRPT^LNHaLz z+yHGNuU}DgHsn5auF&UF{j18&EX*c+^=%DC5-EhtO7aE7?xZS=Ip?P334=+d9Q^eV zSrcuebo|60IWQkf`zP9G+MedTUdA`6)<2lFD@Qmsz+!A>rOI%}MLaaybCO7F zkx}Bq^psbe8y>;TlxP|1ZkFT?3N}t=pZ}UsR$7B=`7?P0sRhy)l8OJZbv(V>o{skk zBWcUArc79c)8A^9%`iMK0rGauw4$$#{1C8wP|GEdQ&6uRgLGu^*a8 zog(+_gzDOuJVq&>kGhv5h{S)4p4w$f5IzOL2qoh&s*|7Ma_MpzbK)5-@s>b)KVyTM z*E5u!TybjjyN@8g?fXr+VnuGoSBw;vO!lh1%3iyOP?Pjc*_ti$o7Qs7H`B;>Eeo!0 zS@ckwG+EciDLtKmiai5aoQJSUmn30P9b=vw9TWeQlBt+lK*4i9Zdd!S%<=5;!~V7# zv7;t{fR5iZ!m?74Qyg>CFtX*_bVYcP4Rn2e$PDVmPyI3Aw;B~L`_*S7 zn%}>F*8yi0TD=ff1c8&=)XM4wdYDA?dZU@@$NxLUqZW+u_Vr5~D?GI48>c5HYu`~_ z#%5}0oN12kJth0v8`=cY%HDyM6|HH=O+sU7|=3rYW(~V=Z*iPjA+Kg@wJcjXr*CC$jqTWu6F5F{2-K!|S@Sb?LTgec{&O5q?V*L{$v2as9g{ zJ$VGk?#QEj)t}|*zuzw7J~M0aeu9g?Yf6L*8H&=6J3OAGzSLz^qXZ>>x+YZV#h0E+ zb2I?~CijabHxCkcMB-)N3qxRO1jJmPHPiNXI)ig8IP6CR&pc_s-t37?b9YnFX4_Xh ze5d_du=QK$tg4JmfihfpNZk9C5hT7txv0qA7H&xJk?UskXzs42j4o5!OeW9sho@@c z#_I>#^PK=hG$;EcCI;K_(CR%D<({}AcO$w#ufAR@qcZ>)D5a6DzH_AX8COd{NnE}f zgL7yTJp^j5CkJIcpD;#XKKp{SZXyyycn~F_dKnqftCN-SV=tHwP6R2r;1?fD@Wj3m z0#Brnu1`IgwEsA_t_RNTzgU#CFaL{0AuZd?0%jM>v18#Ew@SATn^Qw`Y}VuB(g^ZQ(5vSoscX6Q+1H)-|cj;o2V^wCQ5j#pz{I=Lb z67Tqv*|P^XizgTm$GVK7LC!fuk~vNup8I0$nQmwb&sTpAme1e4zXgWVs^&r`Fnhwv z{A=t6C9`_MuK5IC5baYASAZo{?hlS%Ci#j=NCmdE+=Js4SHJ8X9w}+ybI;{an$21G zaE0~x5W#Y_(Fh+8dRwMU^k76iP33vj!a6W zAcw6kxA}m-$;!&I()Y~IH^x@zB88H%OS%u|S|s0{-2J|&DwFmOvWhtP+cD5byUU0{DY3$qV95BS2YsiXP*gLK8j#3T)w zYRqJ`#8(QGaS!^G+|QrMl6aym{eI_8US_1^fWCucj@6VbwMEBc#XK~WZ344OGnxD$ zAXun;%U@kx)ieTroug6amddVYKXt{Ra_?AmR}!8~zP2a#`FcKgAgKz3TEa8Ox-vV; z-9@I2jg1tmD2EwUVN6IXID$~`WC|gyw_WY##D;tn=yIIiU)F@CfP)8Y@^4Q)^}b%& zTUY?Y%Ulk9V0cj!!%^;BQH`O%I75{~)mQn=uu-zeg!sToAt1&&R=HoDY&W_b1EQ>V zk!gA39m-m_U0YilVCxW&&@i#E2nC@RhNCKINL6_R7%C2trf&st-q-e+Y>A z`TBKIc0DlbFnn=F=3=#jeY?$J((;<;FYyP#soB{J9vVUCb>->Tm=JY6y*5|h++xSM zJqggkS2VD!Rctacg`3?73Q=xP%X?i*m&Z<3>#;tL$ZeV3COsbo+EbHell)Ac+xjy; zC<0o86Zxw0^704>2+yBCxA^=SIG^U{=Z%d40~KCU5Dd$b4Z<)%SDln{T-dA zZUSWs5VAm)$j#l@-(Q%Z1%(#$9X7p9dF$rSj7Ed+2MJXKQ$J{HSL2tF`;9;&|8V>< zL;vT3M>!<%bR~fnxaSEZc|Z4C_ghMazEg2Cwy}Gw1*ml(KDP5+e!65uVwItewXsk; z_|j5G`X(tcnK0?ezdw)Dh4D=}xlJR^WzyCf;20pNfr>yp$p4@H-W<>6lMA@^tHO|Q zdcWUj<*4n|Dix7}9HW%D1&Gvfu-5{&KH-WX;W4-j2-ygkhFQu>`&ix!Wb#oTVkk`+ zkk#yh9EBe~+6~LfvH0K+jHeLEYsCOMjQq+F zdxTSb>4u(%$^K6Xc`zZF;gyV)7?&|1MSE3AWc7<4r%@%CUHYx(9LkRUy+}WDeMwXa)32aBTNCd=16o8f^=OS4ZT2MSOAK~1K2745v7SLh{wMRK&*zoO?#2y zL30D~9^3uN%}qJ<;i=v@fBfinHzQ(T;V3SOH|Aw&*8A3grr{bxEy>yyct}DJgYeLaQefw@dyG^Qc@a_VMFaE_Zi?tv4b*24AZ^L1Nydxh|{LG zU8gx{B%5C3f!~5KoIo3GSH*n&G;1<{rfAyRpMa3ebDn?r`{xKaC#6~XYs$eoo%!0P z8#f+z$<>X%@chqz096CWV{6zdI8p-WyBY6BT6%bj z)1(j$(I4AY{)q`7KikdSb2?8R$~P-A%k?CAhhC&y@ci8P=6+Xuiu|Ho98>IDr(|MS zSXUI~D)I~C)2~gPofF2Nnz*c~Z2N%}#balznpSST)C`Vzy}1P63~;w}VojIp8{@0+ z?ZvugfIMWf*xVTt0?yFg0=csrFRd#8$Uml^F)ucTi0KY>iaNCyYnJ8&Pk-kBPi*!R zauU|AwOiTb?1Al*Bp4n~}_)dme01UH% z$-)kt{v;D{jW_~AVc9xqQD;wMhq9KI>-IP$O_JhON@thTz(9|MnY|`_C3=}n!fBBE z*0z>_pBS7F0jZjtFWVu<(#P^)hoMAVU}9tc;GZFgibBT4{pfV?rIJ#>0w#tH&XxFc zlnoBbVKY%vONxLmT#yRPEu<>Eo;aJLS}98VP~P$el|`a7YH@&DG=F5f?BYc1UWo3`e2kx`PCcGtIg56%EihJ-&Hq_DZD z$ZwoV4)k={O!@rW4^g~ZkSQQbLv!00)HEP;?vz(4zZ@^JxweW&zGt!ZKFO`4 ztos)a>Nkz@Vq(&wRN4;~LW41?mGe?2YFdc5fI+2#g*M%FZ74EP+e8IIuJQO?Q_m+w zK%Y3f+qpV8a9D6h_kC%)00rP(cD6+FM(PKs(Bo}7TJ-JT0kR{KKM5db6lZ{HklB@X zYdmW$@bYdmCUM|>R&EqCoOe7jvPuq)ay@+y?F46=ExOSrSs=@OCK$vf#XnRs3kP;a zuKwwAQhz~M8tOK-nA{E6DdlUiT1<0^j#D6d`{fay<=`F*BOU|*6|0&wjGbtlKgVMd zE&*BKODJY%iGuweZK_A0d8 zc#^FECbYtQ{-36*Rl7Eka5V&7P5~W3R&4BAtQV5J#vt} zH^$BdU_xp1aw;jZ^6KpE+1S)MD9Ikb%q6CJ2WXic} zYLcHWgP^W#^rwDk(MG#~_S6MVvoNVppNTXEz6|1dS)!u6*b^TPiiVPZQ_eQ2$pZpS zq}JRh5H#Glxu-%?6=8v`rR(lxuF$AWpp1~@$W{D zi}%c6Zv+ET-^13Z`3q@;DhHjQ`25y%-r!)my1Ro!6i6}1$;hyP6+Cln_GBYs*Wm{6^=2buq`0HS5~S4N!A@F`$-EoTZyx z35xqlS{veI_Y)=Hx<|)1-7z%uV5h9QdSYfKnX3%ueza~6Y*MzYy!`0TXdY-FL4w9C zElY1rwy3_W;4qEbHd)AE{OtR%5W`($#*yd7FDvRz-IMI-2M#2~(sY>2IK6x+cxJEu z$yz54f~0|P?Su5E`I(p)WY%W_dTX71h2A&UAISTG#CUtMinVu_V5UhGKZbTnZU2^X zQOSf20e^l3n}f~@NPd3SJ61g)bj#Kh7#$n44Ixt&`iPS4Qc3W3hgMIda$ScCr4s|w z`vCa^@=x@j7Dj(=X-Xg=j39Ud%{e3eZ?muG9G0&&;bkY(>!eWQYEbgcNNCG>uefys zoF@SsFCbDXIYutc)Ho)eS^zp2RYF~iE8-$TPC_%O(6+7thG_tItv`u3;>C*YOuGom zwaP8w%=uYRbAIrLsZGwrTj%ml0MG~#L%s->ZEabDz^1J|3Ct?w(8} z$FM>Cs*o97P~>tSqrwW;oY=hEac3g^Own;LHRM+x?X-)z!Qi8G@m6tU6!LxS-{kk{ zw^L`_|FFQ&W|nVBVE(a2&vF7yY6DWBll6tqEc#Daly+j2dURt2aXcvd#&lcz4u51 zpkEn+VvVs(?#kCqnUS03zRB^4OL2me7e-@Ano8R=Rwn%Z0eTf&`OW<*e@Xfe_n!kl zsjfcU+}sQ#@QI0urKQ~b{QQ)Z3E@@=dAaE*BKZE|gB5Pj23#<&nxD}>X#5e#!S@PK$`ri_w!dRgMw1OkHSgQ%UU7btD>8kg5!>jCs(oye0eDpFA6qs6} zh;`XN@l?}~icJ}NIQ!h>_2a^oU^-bG3P?%{7|a857saF(N?>G>q@*NpLLf0xQo3cT zd|@muc6QZ!-!u@@`3h7IJC&2dY935)j59mriA+FzLIL{gZ9fr(?W#FVH~mu@C>(-t zCR)}C`m;8Z5EEe_HFxjK(EC?zx|fvmn@vMOW3K{a&7ec<)Js4p&DX{f&iL7iT$V3SMz(!@!?;k2j7J%moG!gKQOaWU2pV z`ZfykUcrt(9Bt)n$Gf=80^LT}*!QdP`kt)&B@K^_j8#k5*)~?XeLT5aO1M25r)4i8 z@V7$P#&o59F9I+*7=0P2<$xdO3GZjZ`)~`5ew5W3PR#08TnX>~YO3opGqXsxhGo`5 zfqq*WY>Rab!QcJs6cXCVmh2)|5+jmCv4ua3;rlfnxo(S* z%R@4GEEX`R*!eM{Fpq;j0Le27u3f1lZG@?gqLW+vhi5@L&^H=pe zL=g3sfG!UYKhMndeX$5-W~dK9Zix2*%WY7{ZgCa6d#M6w64zLPRq1HyEXIqAxrtG5 zP1V*4zSkOZAEK@Gpkv`#_1Q+}u0{_Y9qK79uIJf3BbY*V_i%_9TqZoxxD#}sZ8|_> z=P>uy=GFz0LMkdMM&jbem~_-N$V!bmIIse`y-(?_R1opQG2|Tky48+9c;dyk6Lo@; zt}#qqKy#P-(6k-Bs8nZ#ba6zRg1wik$D8y-wnuZ*;| z2|$-2Z?L_~Sq8T}PW8KbSX2Hv(=Ns2l)s7<99cM2?r%Fm)+%f^lTyrZefU&YP>^?D z7JtISW%o@(iHZG@#3`ZF519{*4u-FJ>X#anl9dn$Z3h6C+`e@>Nzhy?u@widNJatf zt)YP!%0!o!|Lw91)hdkVQ)~!wS4{#a`@Ct@35pF

    !p5rJ2;3-uaHlSKtm>ezt%n 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 D1zt*q literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-2-annotate-es.svg b/Documentation/pictures/text-input-2-annotate-es.svg new file mode 100644 index 0000000000..a2cd593b0c --- /dev/null +++ b/Documentation/pictures/text-input-2-annotate-es.svg @@ -0,0 +1,263 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + \relative c'' { \key c \minor g( <ees c'>) <d f gis b>-. <ees g bes>-.} + Añadir articulaciones + Añada -es para el bemol, -is para el sostenido + Encierre las notas dentro de < > para obtener acordes + + + + + + + diff --git a/Documentation/pictures/text-input-2-annotate-fr.png b/Documentation/pictures/text-input-2-annotate-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c5bb51b06747e099dd5c3c91ac891a495549eb GIT binary patch literal 28081 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + \relative c'' { \key c \minor g( <ees c'>) <d f gis b>-. <ees g bes>-.} + Ajouter des articulations + Ajouter -es pour un bémol, -is pour un dièse + Inclure les notes entre < > pour des accords + + + + + + + diff --git a/Documentation/pictures/text-input-2-annotate-hu.png b/Documentation/pictures/text-input-2-annotate-hu.png new file mode 100644 index 0000000000000000000000000000000000000000..600c5e5c942df9c4785270a6894b931328566e4f GIT binary patch literal 36182 zcmcG$g;!MX7d|?)NOuXyARtnMba$t~(47Jj(jC&N^nj%F0McEfNJvXJNOyPMsqrs%$)Pi8_(YR+0Wh(rLHQ6^PKWI2n51WkeAi~fsmC!ASCQ(=)gO?6FYB# z|4>~e6||lK|NNd=Mgl)$I?L<10{2h!#^s?dECbVg>T_^klbn zw0E^IbGBl4a+miXP`NYBB0=HN)Abo4aqzHSTYFZ{FZU+Y(3ZwZ3Fhz|I~%mgVj2WFJ!a z6h-XZiK>b4Xu5ap?5cMPUM;xFK&y3GNn^Urt6woPjidjcYc2P3)0+QXD|{kR{_k^L zR)wlhzs>)=~cz7k$pP|J%l^F<>mOL7K8LUBvG3jlpiWaq{wywYX$t&= zdhtbA*9Fwwf#KYrB?!KxKYaUy(t^ZSwoAQJ`(av6njJ)g!mcwJ(XXo$>cDpuV~1L?;kO-dW7`PF z)fzf$6H?yP+NELVpvFLHXkgiTM=hnmcLY{Am>Fw^HhuY|bd%+m~AThVEF#@9El292>bF3~FLxyCFy= zyCdLJLFbl8!wR^PMg=0y)xGJ2P zz~o{TP=l^LM859zjyyx#eO;8nk2qc+!WLSSoYVsEcvf{Wy0hgnZ3R0pg7AfPMLYXQo ztQ5_&VBXYl;ip)qR4%s>{}D$BX87otw9?Dy}=X|so(T6}8s`#7jKThPQ2HL&xN!yEET zJMT|AgP&L;E>c-v<$wCUX0}2+_+`AaU)>4WIWlq`r4eZwWj^~P>#nUrpAt<|*dvu&+QcivzUls6tL&6uk!jklo!ZdPy>sj|!VwO~$*Wl?^)lEpKK|QMVzZ6 z7mRQ@Mg(BwS<}I#;`XsKULp;-WbZ|Z-lGVk3Wqh{WPT>#If|0+^Lzj4(vf=qA2UU_t&#v%{nC;a^=%=Hkg zkI;oK5*9xik^d2-YC>Bx+6`|W)|6hChd#WH!m*N+{@!Ewl?UOxA~Kk?xg0DNQ~*|i zKH(?aaT4M8_j8F`;l)fApSJ5mzb+I$1dB-ADgD4=bDN_GJk;`yqg=!@r19@NGo-FL zc(Q#+MH=`;b{m|CCn*#bem6p5@>lNV)+^TJ+6}Mh^q&bPCK$y>(k72%?JVwveA}$r z-^uk4RS7RdF3x*7KbBjST^*LP1gmwE-Ny6dIVtRQiX5}-Q2TsN>?|f#Dz!9(l)|I? zbXOz>zs!|ceK6;C{tg$-lAJYz<$V*k zisTn}T6w<`2lG*a7;{Un;~vd~65kopl3>Juhz=iIXGAzC?SD9J855_n88U<8boS;tp{p2&rD$I6>FSt=)|MW!F$G|zIyP_Ai+U>0JZkvd*p|>c?&C<#wI4l&z}v%i@#5@9 z{=MB-P|`71Nw$+P${>oKq--t?AM&*9JRg_)uhlmP9(5wY4yA^^J2#T!UctBTKXyM? zQL2BnM#DI>x#)%4BrbiaIe9do?r-=etPQc^&ne~nWFzUQs2+;h|6RSUsjTS3=Vm+I zKmJ91+$%b{osrlv&-X=9=)V&!D$n`eWrN2=hj04!>@irClPWO0?+8EIP2v#P#z&pC zqHv+Y#%x4cMps$-68?m$;c4P$e6A5=5lH9H!P+6R8`5qL5*A4t;-O9cq_F&@^7ClP zJCzfa7Tj~*!B<~UevxG$i4T1X`0(3Fvf5ZaUsme%SZfdlVY-EROhas!vbgTETlQlC z$g={WekZ}9<$)PZFTyuzx%?#ox#Q@Du>Fl_jtP{ew3bt%ZJJfAderQ(s;6P<{)@~6 zxkr=6+&Mfmx;RQ|wvN&Hbtf9QCVFLR0==tOrvW0uPTBS^sQ-k0014mVG`prk`&rE`p_j@$|t9Fy3&gjwHLcE{Rh ziIWq66Lc-ff$S-Nq>!^cFA!KQray!9ip`z`Kx13o z?V}4CAx#_CTORa{JxH(R2$QgNQS(d>++NvyQWbfyJL18`ILu?e2&&a=lC2He3W$gE zD%TWhvhpBMB|9S(SdJMPwReeQA*FW8$Cn{U(gi4^6kbrM&Z`ol<^~Lg=I&MSh?2;K8FF@&)axfxYe1KM#}yh;8%?babp%lsk?B16%7Yt*}WKOyq{ z<{}>XQo_w~;t!q*M$2*oJz7$D?h7PALldDtetcmH2#w?pkf8sHWY%sD$WP~64x9aV zWI;`3)2|Olw@>019;O^KJ|hh^Z`y-M=O6v=Xgh<1_2vdfnL~7Z{YPGZ9GmH2lJjeC zkCTo4>Gd>{Xv|U1T;XuKYm8MM9mxQS-Y~A*+AHX_zgUANE#(Egr0?63XGvv^Dp90i zgcuiXaq{h**gD?XC@20vk(M4K@ykT^G(+t@LwLhm4&){V(zFWIC()KP-t>AilMkP( zs=O|o^UGynbed2jvH#24f$n2!Ej(OVAjkJo%Jd<(w^U}$Gn zKAfc*6X(<}X_wXmEqDkj-ZCkBVth&`7A7C0{wvB$r&_(PM<@VD-|D|3GrFOPl}a1Z zruC{6@900}n1H|z>L9zraz~lWQWgqu^2&`h@5I<=7P1N$-Ua7}u zPdpSXx_e!4o?Tb*vIJ{F(&dFB?G$aK25UQ$%8bV=om^cqx@Yy#`Y0y*rs0*x!e1oT zoes-1(dUz?Q$w|Qew@EOX0q00ulV%)YupuuGpaL9N~3Zg!BT*9o$e|Bs|IIe;u#fb z7Y+GeFx+h978DdnS7fJ|2Jb6#Tt@dFlZfQ!jl&Qudf4}F)GQtQwvnSwPG-oh=H+a` zWXwWgF_^oE-!t}Fa{et7@3#_esRtLTb4TggA7sg?1| zlM!dKv}ZC!7ihl9?KTQ}T>toqIJDR3V~WBCrXm2>a86hh~`V$+JnrQhs_6LfV#1k#4d61b8`zB96d zqGxF=bA}A#-zK+J=p0mSI8sMKsAl5)D%wV5a2t`;4ex7++eW{g|J;!CAu}G-UZRsT znJ9h4Qs+ppUT;e$(EfTlEI(8>|Dv`={N9W0#{l~G0g#*B6B_rby7Up!DgJlMweZ<7 zrim8A2PuDPC0Y-qAU>ihQpOGW=#+DmP(BHa$Vvz_!RogLJlXWLr0QZr%bk&t$X#=V zp1@mP8a<{j4E$D6x+td4*6RJK1cCR&JYmHR@d=9<9at^8?>&KDB!N;w!N=c;l`@2) zs>BHcBEG$m@?l;STJAiM^aHUB%wm1t4L*yv^_9qnqzR28LKx9~4&b+X(ljcyaRZ!5 zsJ!Oi2Lh$npA%55T-?wSFf$-rr@M$M2J$i~;>$3{t_nl&GdLGbN}L`o-tD8?r4qhl zR?A3qsrg9yMhD~z_Reb>-wgv3K5QzUE}QRAQ-12Fk2EfKx)Y1jktOM7ZJp5YQF&8c z(tIt+Bwwk%y8PAl(FDR7g;TJ#uFW8nOH&nV`&bDoSSfs{8|~C9#=U0BaD4_LDx^0k zG;AKi4-gkn_Gx!>j?!$G3QRN33&o2Qw0Td^KZ5vpGPOcvVitVOc=Y-eG`jR1H@UOK zVd7GfPs)I!lD7H=Y7+brxh*_>F8h*+2ilIwkIUu%sG*F0cmnf^P=)EamAZ&BT3pGz z%9e2DV4S~jgze9#Ssn*Z1qe?CLb{`~5wGI6hyxf7|PU?t_?6JO(d zyd%R3!VRSng*|D1YvrFbIIF>O`9SIc4&r?u7`a#E_`xMgQ# zT1fgMP^(qjSo7>rQuM_ zTCyt%Jvg}VR#(n}ek5HTu0ej!2(}`)oJ41Sy^nd$#K&i*oJCefbkZ+c)n#|7vCp88 zEG?xihICM9I+ifjdaSX-<4s#R**DaBf?F77z4_VCRk-sIVk)}by~@(&BiD6JieIq( zW(QD3o-;n6{E1|0&pP+s5#OP*+pnkEVSv^ZO#w0D*-DZ5&!n-bu7B_H!$jR;6m`M|I6gp&ifjv>^ z)haJppLG4aaqIK$X_vk!1^h^p=9F*Q;&#*Y)sZVOhT_qv|2kWiTJ^o0n6USdhYdb zOWS^%lg3!t5G3rt+LRaj!9isx8u%^fX8ct`$4Gr^l%oC-7%yrQA8zOIn_&mpP0cSo zgLu2wz4n4A`u)EcK2|v0q&Xc~jLAgCqovXrmT5i^wZD+%GZk*@e0j^!mleOOK3c|E z%4Uq_5A#cxBS_*TA{5`ylkT;hdCEJ_T!?O~s0~gH0xu}OdwhQytqo$|rhoa_tgVn9 zf+yb@EZSFxboEiW1g*I()S0*nGsOU(IwBp(P&q!k!U^xX(z60r{F&Kl2NJ7XlVb5L zljN()L_;*e7iTN?l>J76Lt;eYJ}OHQnH6-oJl{A%_=%I098XeiFA)y2kKJS$Q75MX zNczvlQ2NZMLlPO%iI)pn#h(;ZRj0R66UO)^QY+f}E)_VtUwb;Q^U=HiiZtgEaz1m` zLV-o>mPW>pm7)~EJWLL;yE%NO@mwp;eX@8>>uk={mDxLn5hjsKN)>_@x}8g(`%o)~ z)goi_N_I-d5{>k0umBA-)#w=kMYuv|^$V_h?{>Jg)akIIlwTftxo&j_cuEb(_D=h5 z_MD?*I;K5Gu9a}9bJW&k7cuXa)%bsr&-Z-fI2?d4h|z!gg)PFfMC?SGd2PHKByTa* zZ&PadoBdtqN*L+-dc7R)@SnyJeVx_&s1d%^I0+VJ*aBq(|CcRCCA;+UgGf_wqe`3L z>eu~TgG)NKO_`XvV3~&J2Z6h7)oBiL)MbZ8G1U!W3>spY!WN#YW1Z zq)M{{CVx?0>Li*}dVEU8AXQ5F2JZpH-&FpRU2AB&D)dTw@&&;7TA#mlu^h(beD?+? z_({Loau!-*7sbK`NXHt~H&tte>!hDkm%=!}&3IrpNhK4iVe?YO|LMi4(Q+}*6YksJ zT}s8MnPV~Swmyozbx7?_e8U_5|LV>EpGyzp}zqRk0Uy zF?~khvDR-N2DGIuYa$1U6Jn!02?R8yjY$&x-&%!OO?MM1(Z%X!pb)>G>HJ1`=NUvF zJWF|L0I1|z_<9Vmpy}X;V5KCI*gUplwUv@O150m=?dO?^5>(%>ZjaI=s90NHu3}As z7|le*azLUucRJcN6l6f*p=3RPEwvn62E?|2m}ZF_W^k+391Rv|1Z2g zofK~<^x_TlfraS7z(eF0nc%avce_Z+-I0Y*3W$}kItICMdRGvjizmiOELS3RB6S6E z?z~r*7DV9*&e6KKLbb931!CZ$O`*`1?RsMNH-Pj}I?L=9V5kJMWL#X>ar|o&y}v~ zO?>-vLv4wp-@e8?9_rgL8>n0|4{FZyX zfIa8JgBGSJ@mGzQxS{{NzWVE8joCmCod875LS|ojAr=sjN04-U?})VA9Wq@UI8Siy zKwZI+5r0WyA>M)w@$g|3QH&PfrQ{jjc@zwkr+@m<9px&(B~3#Y?35w4Or~Ohwzo`< zXC!kBsiJb$rr3?`dNx_s{uBb6Rh%|kN}~Kl>+?Xv&u8~lPu8H=yiGsNd})L#CY(+*8xUrfK-mzpKoHJcRARpDktg1!O9M3Lw>=K(Y z-16Zv*9yYj6E|3;4y%T2kSB8=!>-<``MVE()QdXaDY9#1(qk~8)Gb% zH3+;>_@UB*WxIwTf}PD-&UZuDwRJDS01H9(<~GCC?&@8I7(n&j*S zf2sth7Dtk;P*G4;Pyp%Ku4%Z1k&3Y2Eu*ujGXVD9lx}&Y8v>IO7RIVp>SGk=hVTa~ z>K2tWwh+jXzsR6eHwlo34~DVG?*s!q`GWe3KF+2yzoLeFN=}!A}NhNCtMuc;*2@Qx?+mzxo@x%&W<3yybC~ z_xs;y;5|N~)ly#f!q(Fo8JIhl=EdM}9HrS7h7vI}-RGHfV1cDmI+S1;7-HFt(A&Hs zWz%DzzYFG7^cE*Y+YCI-)0zC1pfdS_((>6!n9DD+7JS{Hbm=Pc?J~2cD(tAjY#3cr zOt4dMR|Qb-d#j|4#RxTuNH3g{l738;OtG0*zYsv9*LNgMI8$U6Tb}P7xJiokmx1XP zi3DZCa`%f6<58rBG7Ibx?gYZ>mr0;dMc^dHI{6&l zg36DymPN?~?m(5D_2<_QxRu0)xQS|C8zB{kVb8~iXi3=`I)=H92xGkdxnvoBsu?ODZ& z`{}2xioR)96M;7z8ZlsAo&0JKEh*!}{5Yr72j-CyjY+4V@%BKbDEVT3D_+w?%S~jp zDER@GnJag7tu~-n>yC5Wjldr-x=ufG(#-uIS1=D)7pO|206~{s54BuJUn&07jq;NceI9o6Z zC)YT78C=Pn(KOXG=p4h>NebFYm;iFdJC2VO4vCu9kNBPY;JLyH#epW{kRG){|8Flq zHnqL9B^aVCEoj%x+N)t(vRei|rR;G%79&UxQV1DEX?m7qvhy5TalXM*g9gAVcpSn^ z)8Z4+`J>>{OHfMbYi9V(_xc}xy|SPy?FLU^FAKs+l*6YXwXpE0K3L5!jMCjT@EC3r zjhB>k{6tCYGQ0&UeQTab77ucawq3=@<(#)s>|PU4PCdYZedr~aLR78rBa&hy=?*6sijqpBlLbRn3bo_j_$??`4$|L8OcMFTX&@mqq3OaecjL}wT z7N~E5q*=v8yEfT^OO&q_`o-wnfu3T3#YrFc{olF+-|Jfc04R{qI(_PE;5~mdpYKJY5C(F$N*YDhppmu^Zl~d zz)uI7W;Ih_7j-RpXBytbj$m!BrJ%n&nyv~oM&B>}oPOg?VqI+wxoLD9ty+$@im@U? zJTEc=5u}GwsLm`8U^`UnuDdQ$+C*rbSHLe5T1nDSxou15%T{Ox<>&93B}%c zCy39r&-*MX#Gb_ZwMTOJLuZQiw0X6bN_j--b1<0C+}tyo(?00|)lGYngo0<#yc8VC zF+onBsET%LS~G#-7a67Iqtf-biaN>C&-g=`rWu`oSm+)L@|?WV>?xzat`|6GvOP0+ z#vn?OIU!{S(t>$+BEvioAUI;h1xfg$4?0ac&8!nuN2{KauxBQTxdhB#&!;t}V=Q2` zm6!ziCp=9MocUKi^S1{e&vHQz9+`f zF<6BGzo{I9a67EJX zB5W}7%PSf8829Oyhf|^oH$eRfJmlHYjI)|wvB6I#9ETXF4|G{uk%3V9K%s?@)Ig zEFXRd?t-kA5HWgNhNi$~b86chfDos|GCM)&wF8R(<&}638(cA+%J8N1;!Wxb2GC>o zU%!k3rqivTkdr;tg{M$MOzblmgkghkyfxCYjXAFY_!pTA1ibShx8Bo>!urR4G0%QZ z67xK;_{pw+%{VnU9CVi8cM}lR6!XEKlR2g}_JI)ua;`l4%eoZ2X@Gn1=<-S!M)CoD zBJh0r;gz&BS{3NJ$y%q&3MFBIc_daCM0-6}`yS&pXXw}Oy{a^=)_S|7bxkVn>O|Y# zO%roPr>)$xI}(JpbQ#jSQ6Uu;6?){he356)*5D_ zpVL6htxzCSd|JIKH6d1Bq+CHcD+VcYpsYjSulpyaV;gsha6*$3OlNf2*VMbzOV8RO zDO|AZXF7SLHUa1vk+Z=1f0vDX-WX65Tc4Zn89xjfPUmH^@am#=Z>w;eSawf*F>=;m z=%m!UyiuC=Im)8ct{i2`bTwqk^pvPVp{4>g)l~WqAOo3mOWtb>91<5DOA_)l;2w}zRgasReDSE?Cy zzo|JxvEKwH+fIlZ#LK}g!ojx;BcKr=4TVS*0jso=pTcA$I6?W09G8zvW+se7aEpYA zHonIZXQA|tAS8TAol~}m;w0=e$Um5u(?F>qCU?g6Z`91Ebe{*ZO-6w8^q*d#H^f9p zuNDmk8YH}X0755{?8~fP;EZ?>nlQS?t1^vUWFYzX?|bv(6_`3W3f2^-6bu=qZNj66 z-C8(q=P=k=oE63SaX;`-@;b`4qTqh_%GU&P@|K{G^yf4zv6p7OsGkUkb%QB>-aM!O zMChQ@{_w_Esz!^^*!*`s=TgBV494DF&UJ-q&AD`uUOQ@DZHWS8wU8gVJi!>y3z?%C zF9Lz*Fw=tAK$3IIt z1M88hQsL3plD;4*$Wj6C(%kTP_|DG+${0w6&x^V{ zVawZ_t&NI}4w%3`kT|2tzMu}S=DKY+K=)HtkT?$kZ2rxVdW;p*338L#FR!FqbK!g$ zgeBlM99T{PcFWku`{SI`nj&-w(N?nN-{wE|@=syl{d4iIo}n=Zsw#);JT9T<1?}IW ziBU{Yo?<>wUOuVQ_2{yugkDQhL$V8MIh*ql+uLaug(HHl;TEmXyK6uoiMsz z;Z`EiU}OVvVNH1!SU797Ws0fBq=|F^pKOpYiMt&;L>HQ5&E+_@@Cw_w-bJr_hWyfr z#AMq9@g`RMb_`cS7f!T_<=*R+gkJOTV}(AJuT;J3(LKFp2p~>`2~dDez8tKY@`ssj zI|Zvj-Id;?&{r#!X=^QvX;NNdu#|s{VL$<*-3zV-51P>*LibD%QX+(im}Uded8qUT zmJX+0Ub~_vzgl567vQJ24b4LIg=I7Ffq7z((WX+-dr# z|7%lJPJ({IBq~F7&W^0>VU2o+awe4>lU{S53U`#B2&y$<(r*;{Qn?xM>(<@AM6)p< zjLM;UUon!Sj>#F*nSGwD-3TNcrFVXL^}l`DV3`X}KGA^FRw9yL9A{}6lxR#7S(m@Isl~DDpK1qvoXpToA0WHJPsD(IjsW9o=*&Ok1YSzLrNOTHx4@&V1o- z*SHD&n4l9=xZu_0_yCdId3JQnfsjIY0g91zKQGXoslcSSVMdsM0XZR-E47Q-P?NUg zJ*J!|JB?K`4iME@I>qlAIT}dHcl>+$RTdiigH(y6+hF_vdBtULObEmkj1l~smlx3D zwD@XdAyM+wD_~PQ;p+82f93;|%iE_8a4om%C1~1h_*F9M7pzEE>vcWQPr~MqbxgzS z_RMOWJ3+!FW>5RdbN_%uqA>N0(KNsDf*=7Ge(SIv8aeR`wR8#B@6*X!hQcdmn*@`5 zM!ZFDl0~0v`8^K|?a)P1r5?bUy0h*3hfezTyH!L^#7L7Byxps*g`Z2a>E=DvJXD z*9icRa4J1|7)Z-KG14y_06*$w7ixeQhOj}ux=|_rox5UA0N)M z5(^h=MidlFO?ekM9>FG9K#DgB`i|jCUH)!L0R-t-VQl+C061cCX`x zfte;VqxAU__DBwHY%j7I>L#k|uSUbafTJCgo5JuP(QAVZ6e*icRd$XwIvC9HI2zh{ z6WF4^h^IJ&;oYl2lZJWc^y^Z(msvL(IRfcBwMBhBm%ds%WE5Ji9W6f&|9fRH*q6)~ zun%QgbGv6~G`?F*-c7?GD8;+Ssg?gIwW4Mk4-d$aya0M*F?XimByo0=s|8y*TfZJI zEhawp{^hnyuF1N&;c4=^7Flrd4$P($`K0vd?bPpHh5{TOG7VBV$UevwXr5unm;L8^ zd0yG0jn`c4VJhbg6Xp2#&|K_s*&;xD2 ztl845G5w9(i+9&+mgzR2us+@Y*}!RIHHFyNpzm|7;%L@|PyR+w1pFdE^*PV=2)N%PR4SJ8 z8U35ft{k`~gO1Z4j2@R!q~)XoP_Xvk-v~N{r??o-UFQH$)Bt#i$Zx?PTIKys01gUznZkN z()^;%!Uw+fHUm9u%CuZrYR31Wab^_y%cs< zo2t<5%{hB|#nfmnt0}XNxgxxxvqEV~TJ_tv0t2P8aC9(D95N~DD&4eR)wLanK*G)u zOqpNy{Ty|+c_O~tkvZ4lujue1z|y26i!X-4DU5$3R!QT)=byn?1g8ZRA}m)jhT zvJa;}pW%tZ%$(XJI>}55oaP&1g?3(DI*#T}v}CoOukS?2o|;`x+Ht@Dd5n~(_!Z&_ z>8WNQM#gNT0 zxSQ7R@LN;T_junNqKk}A5Z|^U59;uGh#{ojoP_8%ytg1Q;7xHN)e~qMnm3`KPkob; ze>oe`OlA~XsY11M`xm2#-4Ir%I!@{fs=C%`{5CW|zKXTs&5Ux0rj5e%ekQP(MCl)# zPApR*c4ATRUbQ*XefGa)w&!(NU0Q0Nb!{Xx6FiA5$vOm&y&1lV94Myl5kf(jh&_hE zYupF4ms++e2verm_-b2H+4Qwn4F_=9W`X_HgVQ%KV)HOJS#HvrA$XzT zW8z5x)Wp!TG45fZ$q(H7l^wePS=NP<18lja&aQil%w%v|ua^8~$+zwC;cCI}{Ey*c zJP9sp{aDc9OnZ8)@(lxq3|>qkSE&{|rduccS2 zR;urDkA%<`fE1vV}9}eEfA*s>k8*jrrT0U18aen&SmB6NvB&>zx*N!#{;s zjWn*<7xqPub9GHH_dRWT0Re7DeNIl}bOezSQE)KgMQ-E&P;g@j#n$BZov0jfeYoSY z=)*sCb=l_n2!1f}i6Ws|-PF%KIuJ@N{A?ZnyS8rquAp{LsnB{csZP5) zNkwbjW}0^=G~4e3 z_f`yRQ4qCDkWQ3*Ka#XcR?$ScK~fkO*=eumj$YO`@7B%h@0Unb*L&Tzwp`JAR+EfE&UJiU~TZHvd<*eXBTy#Te9< z`QrQTT*^(FN%rf3b7|$rLPtbJX>`%O{>}CGlXq?Pu+a;;DOSBCQeQFO8!ppU43;=U z3}PgDne`GkKAO+;mvb>UX-3*bx`keYj|kMsE5X09Zm<-f{44mv>seC!ofghrl66w! zf4(8Xom086+PB^3& z@tak_5r1l=lz>Te(Jnvz06eti3JQvCo9Ax^y`CovVO73}#jEA4xz@?e#>#-TVzt24 zug84c?`MOg9wLfPCPUx>3}B=cniXmSZ}e+&U5po~_taj>P^q2WT6c<62?gmtn<|5T zSMHR2i&-J9)L+rd-o{)@4h5$LQzFEHkTg`KfcX(wl|DC&%FQACBLb8EB6x8zw>3BR zf)d%cN#g3O%jNuwk|XrRbpd|D#y?29>*$LG_Tttost8-m36GHPS$P?ZnL*>&eIG*( zbJ80aD6}Dkk?>)Hgm{>Ht17aOY}OL8a+D4S6JLZYQ|7>6vCUimbGIe`>qY8ezS&~T zJ)MeTPNC;TIAy$59<%yIpXWY4Ok^&+z!lti={J2n<8XC8f~q-rC%sOujDAK3d!a?3 z{l)yWzu)ro7bmO1tx(sIS8QgchKOpT%<5hSRz=K`)gmJpO>>EyNm05Ma}B_Efy(V6K}x|t5VbJ6 znVR$Y#j-#_M!o$$ek*HJ>mM}FGsC@Kw)Ek&aLA+xAYbFxPN+WB%zVM&N7|BKd7De? z%(5XrXkg@wJUk7P>9}i^@a$1-NWt<$TNgyKQRCZoR1AqC0rYPx#DJ-PM&ty-E7b!d z6@&%l`CCH_mb{`{+z~AhDhn{_P7G5jc~^{%qtBiDHydYds&p}zcRIAvthlg6Tm)-JD>9cNlLb*Qt}JCVFU9P+6Gq^) zm;h_TToGAW7BBsTc~({bENLuXxEw9jye;A6!vI;2t3 ziE`vrq)9tj1>ww~Bmh3&P`7Y@E)ad6)2l{ZL0_y;MWjDp*Kw~#)rO>CK^J2c)CD;7 zW_2m+K8S~;7IK^ssN`$My`Qk#im2!hfq(B>e<)4#6Y;cO^L3)=H@-XU9o;+ZuM-f8 zyOyknd{pX2Kmgf`C2#%_ku4s`v{ENO$##go$kA?AK(MiW_R2Jq%8mB5+#yqGm-Gqd7IHYPiePRmn<08nYbxy|eA)XfuQ&g(6QU~AX%?EofV<=#KwC1k z$1Z?WjJqk6_1@|#DM)T1SLltAe~ZLbxm!K-5716BYvsLuXs@=ApVFoBl&xz-2weiz zA@$hJJlQf_cnes^Nn^Oux94NKPp8z5;K2UI?Mm91x}Fo&P`PcT<^}v7thdUqyJZW) zTFj+VXu1RDyOpM~lnBf6&+$O}j;8okr7r$0Zl?~@KC8e0`#{($sfAc~=OjctWor+om*+$hrUgZVfdv{LiHT z64UoGUXssozzx7tj?XtJnS4cHbkX$+bEWBh#<6mo>D2C-K}3Ptip&>_xp&{G+&Vpx zRdJYBCIC}!di9W;>7ST^BNRsDoRNGv>x!&e(RXq7xKtY9f8@i>Y*Fvx?Uxmlw51X+ z@79q`e>b-PhjE5<0wLbvg7STyRnFuiH?wPk79DnMnY z2hibLSuv;s&P~!A=;E+{{Hk6sh`LGr4w6MN8+0CfMEpjuSUL1z@*f1BAP5j|m{u0B zQ1gYU62AWEpiVxP}k|w)1Ldk%*-|C=XF8ZostShIWW?>4rR9j1X8Fo$`j! z-nVB4ol!XZ?c?VYIjjEgI!#3p0p0?KLLK2R5i}T3hFcrxMfxe1rz!p1j6mS~)*49ydWGs3L9%_?K~7 zatd{yUYUY=${KT+2oC}1#k{l10BxCmKVdyOs+(1hcDRAPyr2&kRI+2`^yB2a=>t7sXefA!m4UMv30fsDIYDNj- zB(EII1KitgdxK8f*&^rk0^W-a)J&qFy{sTEyzRf}M()VNG%$si-r~M$UW=>fixK%B zwt=QQ6V$p>Yh_1Ji|vq|QFZjq^yToW+^AE@_ zGB|pkN#;eoU2e-{OvXL#lmdJ4XW2X@La1zU{zT+F*CN69_I?hH{uVq<@4)-&FVCROCixMU7r~~8eJDY%>8kA% zu#qoDvfCkiSEp}rx%_;-O)s&*mJ6IXr{U$SC=JLqfPWe2lVDnTflX{~JYSi;a*gjb zi^<<>ZXI5a;$upajPB#$AAZxe<(-o@OaAvM>`K57%?mJ!uM4?UQA${5p#xOL%Ud-T z*kd$^A;;0hRNNj;A`WXa)ZZc5ab~7;$3;|bBQbBjVzuE318!NV-GUyne4tOxsZAq@ ztP*U&i3j-;i?-w%a`<2zC1{-!7VHN*6mk{I9i z_lvpgBh<_%WE*pHxU83y2p`ZT6+GG`(Kv(2uV&_0GQN;|r(YBE*IP{%=}IOPM&*_U z91rp)x<3)5B>A@0EPHzdSejksBN&)nEauxz^rZK^?;g;NpNP!OQyip#3W<8J$#6B4ZXt?kQN`=csApKLgA%gK(F3bFw}eMBBk+SsopVWd_* z$4LJS!gv+hu z?C84yR+>vJt}K4-s~@!*Y%a4MJ!I{nW_mGG`VeeL07oDP#9Zwu(XluZWs+Yw6;ATr zm?TP5TvS9KZr)kBZAN{{Lo|Fi%)T-OZ}xs9x5C=LX9uUYMSsy0|G&Ke4NK>Sx4ovw z--^w%b7O*wf#_i5N!P=*4k~xxFy+tn9SZH1YM}#c@McJs;vQcPc$$ z&CY5iaBW}6HCV@tH-H#7MKXbnv8RUT)G1LoV=_K}z7f7h21@X88G8<7fQb`2r&GB- zA)d{>Wtu*3do6Ne&F3p6N!>P%Y0y5oBb1 zyVh(0H2&^$dp3J6>X%Y)Le|3lonY@u{k1vRZG3~ASUHd)EW%3_AM#WsElKwJl5G6{ zAGY2yDvmB_7sUzg?!kh)22F5%ad&qHcMUMOTd)Ke2n5%`2X{z-;1)DUaM#=U&N+9j zbJtxkKc;88d-vY8tLk}5X5z=kvTw;~_AZIpTor^hsD+3x(`dq}q~AkeDic3!Dxbss zCwK8weqN6g7_W`33>!^~@(vLBLeBY@Ql@?CDOIhrOq7aHh5m55t29imaGNf&g#p?p ze<#bzAD^q{SaB0y=+F8AQhxB*GRlyZ;iq%m5WqCn^X!+@8u9jKfd2?84Pv#Y7ld7+ zF)ir2ZK5%662jR561AeD%jN38|2ne)IOr95QGUZ24gV zUPjLbtIEJo4_?n@_A_@?u@fwxNS07~PQ8m!5C}9P7^FW0OHR3zm6zL<0e=B~ z!A0eTg%w`v-g?5`Z>!*@SU;o$D%Py6jRsOP46*IfflZZUCCIunLmuS^3(Zu#C_DCn=E0piM z-q8|u+|fe;!oez*<`h{4uizbg7y6Y5rHZt#gCqSdw@Q+V*(w3P@G_vg*zbeN4b#KV zR6unutx&hhKEsP`%B{LZ*yEn6B?r5abl~|qZ+U0+x#83;CV19RfaDoLj|Hfmt}ia+ zGLdFsR;%DZCU;49Vh^fN^Z5-d(Bm(JDZ!e_#qLUyVzFniwY(2DegIWF-U8xF!k_^o zzDy*Zg05pK_;GDos0KES`~3hnjwHW`*qMq6NRR;Woo!f;rTrFQD1>}xbC{AH5>vrJ zU603j_l(rGA$BnI%NRuO%CW=I&=k)S5?%4-L~eB(Kg;B!aU#_vcO|tXaSN_1u5aG+5r zEmfovul;=*J66U0?a2&v@Tb3buK1tnmNZfSbj)7R{R`^(u16DuW5v9vA8f-n&#ixN6e zoE7cvTg&G+fxE}4uWwy%4IRdQpNlVNlw^!O}PPg!yzFH(vcN@X1B1<)0 zX*DKt+G-f-gK3;{$<(sv%b~~1i1hMF0gvOEB})DHz8&~aSRVdJyXWT+Uw91+QT>RBzrYt5N?;iHN)SeHjk$O`M!1ier@|el|x7) zX;r1QBxNGB)q-8zI}InzuWz^NfBROcmv#q!5iyqPkXpzz{gZlxecht|V~rg3$TptS zTJK&CHoNuX>Ez8T(n}=N!YYb|3+V*7fI6WRp3OT}96DsJTUms>4Vj2gbp%t4V(H`7 z<23WsCGZn=QSNp{I1;E8*c7tT#)m=p-MmE$&>5)~97`4icazZoBS6w>(_9O*n7^S( z;bN7w;R!_y&~)$1t#$*WqmhaH>pIXy?S}^)gbtU{qL0(<=;l}|l`F3cYA+y=qxqZw z`{XwD^x5xHd=NU92%Sa}$*r#6xb|GsVLLRIk?s}`fwNjm6yP_Bd#4%0F>VVVjI&BfTqpUg3&O>agR{^l4N`Ngjo?w)OG!m-YSFiL*Cub&XTev?(Xvj#V zsBMO{gc?_R-SChWgy-4Et#VbAjZr2h7NsLuvz76O#rhYEjKyDbty?Kg0?`hD+o=CVC5}~JW<1~Xe zVbBQrl9)J@Ua~#1>87qDtYieQv-^wAH+LIy_XEd zyWNoH&xs!BaTZ)Duq>NSojbg%+Wwbi`GP_qWv4(Vnz% zatkea&|kUL7lpGR629t>hHC>tV>Pxz)XDGk?Py(xS%%1oI=ac>35*r5+*6#I2{b)1 zOa3HEpCs4PyB?~-%AiiZp&m7BsjwP^&$5G=maTf}mot~2C_twIiufxjBze;*_>9a5 z>RNK%K-m~tzgN^_2K|_D^e8C*^&{uQg9T|8L*utEJY}@5NgN}IZf=|7+?bDTq zrv`oZ9=d&N8(pz7>@g4ZK<$NftM#4b!9L0?}&EXZP zWNpF9k&p?YPg}Zl=`7BeexOPrEnkwWf2Wmz?*n&cgo|}SC=G0|0)=0D1`4cxRs-!n zh)18kljNX}uq5e`)W54n-6Nt~6l@7bY<%`Gmxe!?duo~HU8z;|>9j2nR5({@eMqsr>#hSX$@+vvz~-JN99ki$n16}6?;-xL zBWDR5m8gRuvd{wW8EK!wPElVMJSS!O(+AOZ(8y}Cxs{@L?j$lJAcsmO@&n>`3{p2= zb5#kRBpZ*vpErULi$_kPjD>7;N;u7`qF9o=jaurg_SJl9jatt#$8m>2qHo7$g1)$s zMmtdsgGT%tIrOw^H44I8advJ8duFGcvK>G(L+u`du$c@71zOb-Mb$t2TN~ilZ z0^AlIqS#Vb%1ihOgvI2IGh`!!Y^&5V^;WN8V_gx{2|;^xV=NbwHRO3z%StrN2zDNx zOHyiZMlA*-GGKLb4*A{Ns%QObrnv10RbMA}BI`#9MzkQk=rL&gBW#O_u|R0V!=<|X zdD_8(v?mv;c>p>&VaqehpUMnGGZTUM2k{4kG|pXCsykFMN!6>=$pubWl# zh^%o~z)*wNOe_UxrCkI|m4fc1HqAQO21#g(I&t7$EZ@O^Ju{Eh&Ej*n7fZH!PT1>F z?bYdz@UFZav$J2I{IwJx43kuLY^rFBY*l{hXR{|-{AD~OU=LfG4%G+J57;@Fu% z*Bob{N0MSRe-ZWEKQvAFWat-#!KJ6EO{4eiTmYl%MtcEG&t0mw^1}JTUe99J3#k;moeE8sg658jk31nit=5SqxE$jkI z>}0=nOXp`0gtlI2E(E*a4~BnXLpi`GQ8w9`fhw4jI4}>PEz_i?>^9(_GB2w>9thIz zO;Eb`UuxdIA-n9?F;@ z|9E=8KM?zkxo9WiWUcM;TZz5l)G9P<3r{AJ#Mt48m-J6Usdue>&2x5QV09mXOr)yo zz%!~l<;>Q0B5kuE*)BQ(m!3_U5PL3Uj78;rf68#V`o5V~SzXAHZq3PBUTO@LT-WDV zh?0jpWw}J!6ckkx^H`c;d{cYC&2*<*j^&Jpd+uqCLLCrd z55si%oqwieO4e8pMi3o)E=o8EHqRRKma8XUGGy0DWrc80>bGaa z1A;N%U_&`mhLwy>DwS?HKiTLf(QE{2Chx`u==KOb*=jXKcK549 zcGs(fmEFYVD1mzEeqmr%*(wlewj71iIrR2h%@>(4Y)Oa@xY=p^`cX?KOR9{j!e7%G8ST0A6Q1H!Ii=Y7yuDjQGw-U@}H#dUW*Q{i+l$A^m+7D~!fGHsFIV&UhrY0gFJ@|KDgPHldFI;ofMrQ?A}`g; zVCAMjBZlZZM(m(Dx-d|SfK%Lir!sDZw+hbF$zT3Rtn6Q^#G}6(n~b3z(@{#*5#La$+Eaje4jm3<(7DkQdDZ$-+KF2lkS74aTve6~h+Ck!QM3eK z2HHWjz1}T-q?~@9;+TG3@ZCX<$6T+0TD-q;)M=ML1_XibE{e497B1jUDcSY>myN;~^h3A%sj}RfoUY z%G7D5fOzPU!~>XuNp&l<(f0gD{qRg}aN!JFiWXrNLn0F!k_9QJ7v;V%L*3IoR93=W zjWil^QMTCa8(8Cai>}LIIM}Ip`Gd=TPrY#ZY4lPA*f84#=~a3*2b;obRjG#!PxJTI z=a!sB+~NM;bwRe-oGb>ckCY*O>QwK2)!VB;vwMtqOK*=|CB|*&nk&H+Ad0tK#uQ;h zWW>XkEIc}D7IF1<&kvp4_P8Xs$D_LhOzsmJl`xJjzv z3fnDXR=%|qUIbsd=CVCRzOgN62gHZdB^Y(&8hPCbrLi z4CxEnLe-4_DHl#^$wIyE=PY39Rj7GC(Jw=YbJi_^lwiKQZ+Uw#(KkRM=zSif?({87^)SYI!lX+&U|WM+8U^t>rZz55t1UB zo%}<45l#*kl9&3UAyw=KW1sXg<+6HyiSA4)8;`}24}gT$1%_9vAqCrgl}ex;nnT0~->YN92UinC}z976sHYu{$iMEK4<__NcrJJ-OC zev*yoEOuLXnl7_$ns1zhc5RtW6bCLi%)(Y_=&Zx- z{Pb5&HAU;iY(mjp$k?s(8Z@(;%G}TWLgk`|-rrh$n+pfU6Qb}J4s~3y%AknOn;vjQCRUCbWL06ojsA^2 z40?cfgO5S%!qvKzhvAlfv5C^l>EnKaf%5HAq$c-)mt;7Hl=7zY7x6RS%|fq)Hk)T+ z;*jo?Q;8?eg{No^a^B4{c*>yO-UCu5GK`ds6Go3D8;Tj&Wf4TcUeSK3U7WAyv; zRaHYqp1y9_)Hgz6H~@L(O=kZ-#o=-$k~-w}mV^M&V&lQG<~;XG z5q`%d@DK-uR&~HbW&}58kL+qZ4>n*nMT*acUdwiqzV^HA{;*PmxWqgKQtN6|^=Ws5 zO`dRUw9(@kC-tK$z@IFj`1-jHA~T8G!m44H;d*H-%F)jg`y>aH9deW8O@H#+xa+tv zvk}Mnn55!_lRiGGIdHX@k_n?7c<0Pt&S-i8j0>CxjRAURp@9Q?)|Dj@lX5~LSox4) z7_`cb8M%m%uIj^x3ojvWoT?L5;jq-bJXLYr6NUpLRF4EaZp0rbRJ(;K2xZp>Ej^2eh36QS5=T%{v_ z5Xp$kD?LSu*}LpA8I^5@Sb_EdkhdP_Kal<2gHam!I8<~76QO^@-iJwsDf6-?4Qf_u zPmuxzHkuAR^N>8eqnU3LN?P6kkwcuu&_LmCfs2)8tIrS*(XJ={_pP78s0UQHwg5R| zZJ1LD)-WuB$Cfn)y^dGO5Gx;OiEseyVDblEL8VUSJdj;|1`QyUh&;{7BINvVO#j*JcFKpIpOq zU?0o@E@RB)JzYFw0U%8oP|x!M8^c-)nGQU)-%dLC`AzybS{8(GCGsSEq^fhibBghqzHPu2Y}ym)w+Rrx6q7#!g+NbY@- zr%TyxU4|PVYq-U*8l-4j-OrT(K1fC`{D2-s4Xnc;8S$tki&j;i^(g-WTt6?zC&<%3 zhAE5$Fa9nH5VBN@)JjU%f$Ok^umYHr(O9o0Q9ZgAjv!EH#2CTr$ef%`O!TtzYi+C*iP1DXPs*T5^@qe+w*EhfaVSP4}875T9f{$sK zyOG`HTqa|H+1q@5V0(V=Wq!(}if+6C%6I-kQipSfcxD4&LJSJK;T9_Pg4T?Uy%#y% zzwCy-ZmK?y#~Ieff}v#Ndt6riV_3&6kFEeh;rGsKFxpG|dF0Bvczn(<*^#otKQ?pErW-5)?D(!T*ygF5# z1o8faU5_tBA}+ZK0{@AIf_)WPLebqWC308mPF$R1l7;nrwr3+@@K=sY4S!G_71033 z4Yd&N1z`%iI9%W~la7hvM9rM-9|LMS{y+0p(SSaCIGGo#QaGW-XV>u0^oKkgU>>fv z!CWYZ+bE$V--v_)3$}$n_H$3P8a>2CvH6`}kQlVN+tl2n7Wm^buX-RDG&iQXwz?jO zns)8!5I_1`u~Gb80#m%4MkDNUU?**3q72cZYbLlzb*9K8D$j_y;%rix*Fu+$sD?!t zG5beHTb6G21=q>$vH47kQk`C?sctv(<)=pV=&*dFgWUH~g9J|4THMwO?e6OqVt$s% z=ZRfX{HmF}YnEj#8W z>ZC#Bl!-W2M=uVas?sJ_-mCCHpPk~~IX{@aU&vso+Gx-G9(ZfJV-cfKYdeY1>Pfk8 zyQw>{>_NayQXegb-nlD0#bZGlk^x;iEYiIk8BN|4#vYbUDw$0!SnRfWpFXT&yF5O- z*bstYCmG~Zc>FSGeFzJ&+}HvUAOP%&&y$L zBO)MQ(rC9F|777LPkwj&I#$e&J%mGRSWp4X{<{YyA<-l)L@4%XX@_t~q(9B1)%imF zL5PR1TF>c~$tBMHBc1ki<<#BJ?fbjlWD(F@tUpTLdkanj?*`$cuZ{L|4L@t{vGRmU zw>Lz~7~I#Y*iVEn6i|GRh9IXs(>B0sk&MspVu0YFZNE@f*h^UqAgrR^DZ7L{M%cRt zN6S|7Lh%-4BRby0(;$`u`YU-t$p%pOm2*dDK>m47vojgV_3^0P$C$EGcCzTVIMm?47R;Nwh|qgGf+v!cgj4}QtU={jGT8DOI+~6PYwN-&ZSd2|580gw$oe5zH2n1 zynk8lHOqTtjhz6x)-7kSe2jMYuQi=8?al{zIy*IP0UA4Nq-_D)j~k4#V69)u8c6|q zM35+EPn11mH?SGCj4e?z$eB8viBgOw=J6TA6m(u2>w13p*&rR+CzO%*Mv4XyU8M#w z+lwWNJ0`(PfITCKrhDIVYQD8baOvFSkmyCI-^Ji&>=_?y^y3EB@^9Tc9@b@R8w2W3 zH6CXgl*dcqM;$&Omcu=#kVgLxz=ZI-Y9?}H_Cu1kkzngd+x$s5HD*LreHDA$&({aS zYU`);-*t)e=3OnvA2{Y*|9ijCu)cq7`&7N{e+ET82r$-bFZhvo6TGa|=-TVLWX-+- zP5lST_V*{gdin?gxHrwK%Z!+7GoIy?!DPNA*lx}OF;2|K2H>(eaBV6O&)jjbY9{Iw zbN~`*9?2D`e&qTg1niQN|5;r1%8b69zs)3#F<9Gl8+KRaMHlN4$g4qrz8XUa4Sr!v zR34g3pu*knroY1P@ETOVC=z}ZkgV+urE6pU4tUwlOLdIXLFJ$OH|rzs|EwqHyexbD zBl}r!)Ok(qo&HZQz}IurM2&scPERq%zq)Lr)XD=Zuu0f;(sq?RyK-bWed=QMH2Pvo z(;bn9%q`M<1X5tFSv@sy*#)kUg45{cqXpaNxNCpHGKu|Ly6gTh3Pr~u zYBUiVNIRw}zgbU9Zv4-@Be@RzMG=eFPs&CN1+e>LZswRJOOG~76dLXK0PmWE*_g(5 zpWXIkiLGeG^t+8J12M1T`YWdmiJnPISEvM_YqKx(nI0$K4{zUvQkhvB9PwB6E51s^ zzR*83o?S*w1UM02N)}F|`i8(-X@bV1wmD06yRKMN|2KvwXfh9VxU{7DXah@xF2Sq^;vR+F z4Qv@JpP+cHqLv!uvDQ7^2*$(!4Xx}4R9WY;mU9m-HiiV7lJbM&18;UN&NNr-v! zlQMGo=Z{C!)edVV0`jIHh9Zdg=xc+qSO%KWyHt>`*1A+Hg>l^e!tu zlSpXm1fw%*?lu7bP97J_S@wq};4Bv4e%IvM^xf1nG8?s2Ok^dxDoFUa(qc1TXR*4` zBT0h_FIlDbkS4GeWO~4Wkuw@o=Bfn>&#XmVe~m-i^d!!;lN+WPZ7 zxlH;Jg*~q)!QF0s->1%phi}&T)K(Gk$Vk8*b_?Xv zI~GeV-+PaKknp>72%zy1GYPmF1!FP}LL*P$YUEk{aDd?6c5Y^+hZVbjGGYvE&0l38 ztYT~nY0zh-*0qQ$@$U*y+>fz<_Ji`{Qx*%2!ah20(5`o1gR2S6iq5D)9!FM7V$y9yWV(q^*!R#K`!M{;1;!QsH zyVWgpyPQmt$8AQ8yv2S5*jPD3C8!LEJviJGDx>;4!c)=}O_3}Jh#m=5`W>O{!~56TZs< zc&#jFylFCL6x{E?C=iW>aRgwGl5vwm-+W8TkZc2tT#t=5cRVD*lBkRj&>HRA!jE(Z zH_UM7$YCvr1ZggM)d2$k2*cXK=eSWE)xC6iiP7euTfvUT`{YS}y4Jp{eVWh)(6tI=alLKD&y$}(ao>WSj^kGzzzKCZX2 ztWLB`;Pf!9er^>*?$P(dR@0n;7xRg3|2Wh(!_v7*J&c9%?OjCk%jL-lzhIPE)7&hl zmqL>p>rE=erPG|}8IX!Yxy{kd#FHa0hmr3$@Yqba0`kE;OuJObU^L>9T@gU6RGW^a zi>|??9-$0Cz|&5XGagcGMO5|{;AGG@31=C6%t|4{O6D4*(MOjnQy|KR{EZmEM*L2; z39a+^spL3ct=KP4zE{alrCt#24Goz2RrT!65z77=39v?*k{uF&w)qO!F~wFEmj9bO z!Gn}Jv=3qSbFWtk0W8mh6ppzmY4msWm2RC@UChu>VIv_|n|qw`B_Kd~C{Qgw>!Vs> zO79={s@PgMz_UQzf2tf}2R!@SYBf{ht)oi+9@ebqe~^J6zgs>2@RZNAeC!p+8K(du z_qcvY2fcnYnn&dmmG!zrt6(E62No}inRF19CQGOaF4oLnxmNv3N`SRR8QMC>0?D#! zK`i2<`JGcABHIAV>d>jTU5u?|4X{E8`8b_vDh9j*DqIJ#O==%VqbX9TePoMuy9|-D z5EM#%BA1VwLmS9TcS(jp_8S#Vaneadi`Ba4XZfH=MbW(ZuG z&I9e4n-MF_Qjtd2qG4bWylSuRK{<@o&kg1PxFT$K#u?08Pg?bKi+DzAAZ{+DgzN?M zu_y;TjFkx`oqNC!w;K=-$iXpMsqg0U~H#zI%f$wW_s1fi1Tq(*6q{OWxo=YT;i6Hb82v;Z#ru zb8CKgLOP={;{37$C;()9L_th@BxmG8sqPKr+>A-fiZT7{e4un5xSXIg`diZ|ulAx( zO+skst3NbphyDt}LE(gn{c}y?3CDr~O~S_eu5i$@*D!}&2Ot;QQ(K>9(7n|Gk{3+e8q%E0Hj@riXfF=R0yzOBiI=~S;D zr=F>u69jpHGYd4#&hx_nqO%Eewf@3j6gOMLLZy+nmrD{Qn%cN3k`2muw?=}Ri&xm2 z>$K#hjprVjFr*QhB>i+0c<+>u*dq8>L{nht$|e-;>-Et~fT&=%<|AAYtx#nNK(C3R zw|!kk$%TAWv8dEfTpS|>#wo+w=!#?rmj`flz5pk6t1_nhlUr#<8XVyz`eUB`0ojk( zj|q$tpXLU%R2rio)5)P6K0w1nB1UwJvVfLhMh9blLle_Ou_B5(+4J;~gM2GR`f1)p z0qQ{sXv1rD0q8Yr!?KG{XrdA{P%`@{Yg_R*t3Y1ME*W9<2MhAe8`+G~@DX3MGmw41cPKUxcNtsm?T?|G*i5m6TIcPo z6a!M27%|_R#~jz>1Xhh=pxBG94s}NTjA!$Pmi#G8afucEA1Au1hXT(`zd^6i7S)>i z;=1h;NE#2ZOh0cxNZR)LKy6wMzwpVz&&(lVo9!3r9d(7%%;fCD;|ysz6xe;Cn-rUQ zwB(d24*sn4fG|?&qdcJ>10h)#GGZ2bQZ|LqQsgO+0#^eT>=I@IB$%*7Zt1)Mv=;{G z00%)$CV(R%DEX9LX$Do0bJVgz%-Yxj@FMp8%*D>ENux~9QUs|p=n#ei7Ctm!_WlN@FZw@}( zGp_6b?w3M?CKNvsjWj0YpXN@s3_yz@h@!tn&dmn|x(%%Uvr@0q4ZX_u+=y?&I1A^E z(3cqKfy=R-@n|OR!k12|?uC9)`oz*HOyjUyAFA^$|5$GIBd*g7EknpD*QWPBknm*2 zWWzR1ihTLbBcoJ&oA@=lbEgYlrI~1oBWp|@xYZ%zQ8-RN_i@q5^P^JNr#W$v$=P;e z5)LnV*TBt>4A0L3=1{D5RW3lYQlY_su9Sc_9Oq@%Tn4NhDnsF3khvsZAll5-P6aJ_ z)mVb{F3Gm-QT#iF=P=hWD`Gch6bs%V$Sa$BEhB zHQQ!pR)HE8ijW;>D48}DoXxc7a*JL{t!8B|!cAVWrpaj%M}#G`CGja}SQ3#0;1ae0 zQicH#4l4ge9GNObmxeFy_io#63B*pL^8ujIbrLJ$!tPDoUZz;8PYx1R{nkuUwDe2jj(@x~w{{|!M(zzX+FG6z*?9>ce%=9Rx9?XX%?2s}9W6hoUDrU@wzZh!Esq z!}%!dd-H(M3AYefn{7ujiArb(GRmodP(`*ysuER6X$ON|oMHNcCX!`12JWsn=%KB0 z&<+sm3)Qy&0CQH6H~m!w>6oandq)?x{ZS5wb?w_X_ybR#1&3nDVUESHw;5DwUCYK7>+vqjpQn=$>% zgLz}U+&4!gOg%akP+B^c_BH+fi4N)oON+;SxW)nqG|#urOu3;^=^b-=CFe z;yDqo@Rn%)OZ)lPJ5gIM$|31~Rr3Ejav)z?DivNW{6F8R*Vly1u&5NyzYq79dT&+{ zkedaxn*5&<{Bq!Uw1`4helzd?zB^B*j>W@7P+^(|%l|rA8y&zFSE6-j!V7wp0cBDD zP6XDpz9IuXz5H5E#=#N$YPwGNe+`#aI8)PtSIkNx##-~u|9Uv0qOmIOV00vylo<=f z6W~k&r$ZLC4WmY9MUiR{9pRE6m6p~${@3|&vJjmdII-#tq;5_(~e83&N2@TS4%O>Djb22XF0UW z&NChN*_!RjcHd#k-88l2Ut~IF9Q)p6Rvxka;wZ4n6zJA$4uafFHBn|=X;cs~_3y%L zX%E?ciOu#|BbZej0ls+#qR7LYQrDX&%zUGf_Lv8yE);fnH8#X^^fX9E?VJ|O4Q4aA z*j-&aw`Ti@8do38VOG)Gt!W1D8Ga+XCU3CK=1r%G^LO6zWJ_=pnES?AW}UsWOi{q4 z4K5|<)nIX*h3QrLPKdgiQn!~X7Cr_+=I@o(3j5lJfqTV_gm`@(I^AQtM)FX7;&Xjj z@7Bc0xo?G7RWVrI@(fE%>QzcRBv_E5vY%yMD1k7Q$utj$nADGoQu2K0H;K$DM9GLN zRL(Oi!&g%{r<>SeDCR^dnSJd}liDTPj7o_vFfJ+3bipA^<%=Ru>oh_);vuo;qY5{w zh^@)Q-{8h)Uw`6vnPc}_>-zA{U+r&K_rtluwGwBp1kMs`we$E#JXz0(+?COfYNVD` zA(#I3RQ_a2V&znuMmr%UhWSXxNK@BMre<;5Dza1CMgQ*r`-5Squ#K?RAc&)_eqn<( z?hky@9kyn9Cgk&`!g!?Z@`e-2&C8k0cLHM7J;)L)y*KeGm$lFpx2vW?_#my-;0%Gn z`F{o>z%ZF>@8&e;Z#vawFe9NGNw?;85agoS=RpbUDsznUK)7(84-XmgE(nDkA%vSJ zS1Z-iTu0IRJW~`-A1D8}Lsv=Nbv#R;#p6>F!$L;+HG;XO=&;g>MdjZ0W?}3)*_D;tOD}q$5=My^pW^UR;&;?qfJpuvx|D`n`$0)6#_qw5yub zIQDK$tjiU3)|GOp!eBxl>^!TLt`zUjOiw*V77;lcP}qc)S;gVMFB#}EM{Rsds?}bD zzP?9rqjk-*{LSVKt({x3mE3?g5wCtN*mx+Mw+dGS+*k**isWEO5|{0~OZ^nQ84GjI zX}z$YVGl~xb!Mf`r^z_Bz-k2RX}6*SsP4tKulWb*TWQbrUp%1;YCxc;mf17tz8$Pe zX{d8yukBd*DT*b!{2Ilq;sr)H5VJ9>=U7*M{c5A%G-D}zhHJU?0>6mrUlPK$H1^LI z5iV$knc4ba?QpzDnwl7v#b0?*GJnU7C_JF&DDLiJ;pW+`85vG7nL`l1AXZ(z+jznV z(-|@PBeQ9vezat3Aio(ve{{kmbwfpq-^lckw(En(O$zPRb7b4vx*yl8%qzbpZ(RSS z@N?D;@L5kUQ_HhbyQn-$B!B1~>X`#S8khDV=}~Iag28kf!@Sr(hbXRg&H|?YC9-zT zYtv8thzK$Wx#KXM3mS`~eyXqysv z^k36cqLXe?1+u@l5Z%Mez5g5W)fpZMBC8{XZp?}@E^vdR$YYrU*7Xi?cb+;H^bRdH z$z~0{=-(-=f%D^!!jr@H6O7Q!DyTEtohBbhX!l=fq|D4%XzsD&Debn|h=5WVELaQ-nv*yFWO_?`n+E7Br|@|3>T+W5 z{14VpthQ`7UXOuAs@Uhiq1gvD&y#gT%A|n>s^4ta1nw5Aw`*7;r&I9JIj1*1=9#r~ zsW7q;U!j$tWE}W%#ILn;@6?YTw|5TXt!<0qtR1G+_CZFxA2T)oS&W6dG#(!sj}M`T zY~Cc?GpnR*$U~0q{O%Ry-hbGx-<{E3{7|UmrgJ+9wiME9EaCwlZJmF}fULuwVP6a9 zi^#rD7;XagWDNrp`jRB(jyjxCgrFb!PS-Bba5|o%haTVDKM@eXiOxv8aaee_=5vaa z7V?!;28?<{^@fkZvqGY7NbC*KkLlTfsCo|-RgVd5%@#{k_x$o}wM#*9W@22wW zst-vWXzual*W*!?zGCHhJk#=3kOc(aT%dIgw)1(D#QKORJ}L5q{8VJ{q^~OhTfc0gcHI-l zNw~@UeBvP9`_4l=Tmr^9{;9kf1TAN?^6Fnhei?&QV7IP5C19GL1y)8W&J z%5K8k(|U(G<|?2JY#9whtb78lyjpFp9Wl|_*#~jHQyEW6R9YO%lrIM~sX6)8wq1_k zi(UBs?F>jLVl^(ZJ z#Z{g(+wHN8twXXG?_%I-=$D|c0*%x1X=aAGo~=~)m1p=DTgDh|G*=&{I{L%C6^?be zc7mLfJH0ri3u%hzd2)T>d>@s9Hyxh4xLkW~Y-xa>)vU_G)Uq-5IQKJjyJ@11);H2c z#M^=Q4UjHdR@qb*PumWHP+w%SDk+`Hj!>8#Gu>fc5c`xCg>rn&#?OFg;n_G4yW7xh z7sQAS?8A{FkIEZI+-G@mTdlsi;!rWT$P~r#hoi=?WhbLX&>hTRr0*wz#ltK{R$Tr# zJY$~K7(lwpy$5C=_|1I*`x_LS+J*_`w5>mHT32x$q#FX-47an`#-2C5^ixisz;Y0h zAOywGLM<5^H1n_J*8uV`^D{JyL4v0tZavlAd-b#7u$BF5zmvc1@ceD5MewYw{93$l zo**TnmKG;=QKB*B$U3R~nzu2T3N~w-smQaCResGT)nIiPufK(!<^*W0*%8FrMbdHA zW4e&A^6O?sovf|%CevewV4@$$Z81;grb=;dw{@f>H@`77h+|L0u_)V4_~Ly(r1e}2 z>)a6|(#pboMMy$2y=|hl8d|2fH*rg@K5}?wOp96w|1cKBkosH%tB2vCjcF1Wi%9~8 za4eybyzO-k$(40XnB~kQqG1lRZO<33JkYR~FMbL!Yq+2zJ{+=>?`t&afBV%ya%DCE zFu8E%IO<1w;mnf_;wg{)jfL~uVdc2n{nEB(-^HqnWE;piGQq5N7IDL~0i9efTGaBI zs%G#Z7ZB_bt-^T<^i^pV3uDFSRJiMpVft0l#4Oe+q(@VO3c9p#h4V+jkRkYfT!@w5 zmQUfl@9^J#Sy$YnR0?&A@ErPZ5-Xv1X6RZ&Tk4vrMR(+QdB|nz=D;No{kGoj=|&MI0C6Nzu}tWp1HI3?AZz9L zk-6IZiTth7snQOX5LFfO;hoa2xJGJ~>rBT(wreg1dyz6YrWfK+#;0Te-gvIhCFI>U zf?~Xt{9prBnHcy!>BC(v?3(F8kmWlilW6_l#Jlthx=LZpWahVzO5)&7%r%>-Bh)Y< z&8Oh>EjDjlOVHn>cS>tr#WwlRR3b%gqciE zp5Bh+CSc$$osP)g=p(-x#ohD%hwm!WhiiJ-GzI*AUK4hZ;s?@C8HTx0(A$-?$5pmJ z>nZz&JOd|YvAt`IqA?u1$*i^9gJ%p9c6B_vIP&cL{S$-_N|Vx-=w)!1xR)n;+P7}& zAw*Mug|+`6;sp7rs0%V56_KQLZv86Fb*_ zAx~WZ%1iI?96|6NsR9<#QacB@D-o>b!|d`Tx!wdDowvM2llVecO{Ra@u9>%z*w5$y z$c6->v%OamDMYK9v|C%265IslTg@^&-e3-&=&xi7H1>TMs9Tenh+hqF$$R^jvF$et z!`+jhr1)Q(8hOn#H{Nq@Z@lqA62kn?Js4IxooN1F)Y*#j+D1r^U`7hh&D7vx&kin~ zvf-hQFBpBDixA`TQ%KQ% znvQ#)8q%gUMe5MC5DMpe5EdSl66MxQvH7&r2hhEAoK4Isu)st%ZMlN^wRxWsc_qAC>(AdLLMDpfRo)NR=vH}eqT7f^Nt~QelHIf<2t@@zQa^I z2vSKgZaSe9gmzYRhZW314{9jC#$XxgCR2QqgDrN%b{!nS$Raq!%|Q1SKyf4hrJmX+ z%wiQ$WhPV8YMdoNkls#EU-xq0@SMC82n4yxl~97qBg(GRJEPcK$YbRp-*p7wms z>e2szHOdcoiPe~LuAk)T4Rj0eTKffeem~YMy->>BF9R`&#`5cf!ui$!!%#zfn^AY5 zO94VgHIPpDqBS8{ z`;gX_MyOu7JA`1eapfrlUyua-bfX5&gY%!QmbJwJQzp%N}Zg~SjFX7M6p{LH!r{6BISBQzEbA{J3XyW^t3+1 z)A~$L0>x8NkU?Clq$pQ@Y$q-jr8sz6FZZ;*1#u_NKoSP><8H)F)7#Vfk~AnwF&TbD z0+H(>nWXWtJs%@4VtxI*&0Ayt?>e7-$qE~ZoKJ~O#$zvdvCOm>J#tT4Ns4$< zx&9m@`#Z)m8)GIC_c*{;YFPYszET4b7g*XbFLKW#8JWYqxJ+JS6}%kz&N`9z7z;Z0 zlHD7MUH{8cIj|O{6ftJ(SS(R4d`U@dhM1~1BMQmJqPXnRfr%d)gk;Gi#gla6FOXQN z`+cP*d0PKv;yYeJj^QLPZ`RI0@`<7Hq^{32;9$f$Hxal2NoxiPem=s}I*M4ozy$ev zTF>&8x(*4_ea}~_Z=9PXaow+crEW%2=*Rm?9qMVl!Hj|>+3VP1v2$;Yy} zASa04B`-H1fyu*sr4}HyjP^y${Q&#>O6`YaVEqRP_`S$i>SfQ=^D=IxPKeSRBk@=^ z_)49Iq~*V0jwL=wH5pA3K4Zjs+%-c|sbg&{uJM(chh)2*Y38-}l{(AFKMhICt{oqj zWZaD)*+B8!18g)8sny7XaXnHVVUm|SQ!5!?A(q0?=Jz@ki7x`^>??ICFu|OAv9S}6 z^(WvkUsCLw05d&lqf=yzy#F&(e(PMA-?Czmcn-YhD|J6`HBxKpSWoM}JgqnTN{ujb zJ>e_W&$y6kA>jfa#4Lw?PFC1f#JaM}-DcK547k_RdWtX2e+K|leWl(&;>Y>{YdozB zOD0K_eS)vle-JD58@^KgJ;^j%=Sxudy})C}V*MpzmF$YdeG$Je^8Uv8%}>US<``Z` z;;KImQFa$0%Fo4(o$?qJtR8X8SOjr1X zC6oA4Xz@BEhT(JINl)wN64t4UG$I~Gj-_N4(k`V3V%Fb4ZZ}db&!Dr6ZQIyBJZPb|R$_IwLo@2h4OS5t#Ig{_I1MtD-z0AFfA{R0Wc-)WBf3B+nSA#R-ek$P9LIF*<@br41F zTI6^83bBg#h(+OgiGW$5ieBYap+Gzz@hsp)U0(&iT4zxk6p$~gnkMWhd9eL=3{BDnWT0d#FI~B>` z{RMFc9*Q(GzS=X%557`wA?MXHOi2&JZb$(3R!{4;X5D(oxqDvRdhY^5jkPyF*{?CO zw?(eGhdr$yN;n^88`;Mih5BkFPA?XQFdwNYHOK7tD8wq(7diLuG_rL-+|syh<`{FVU6B`uyO2>~?NA~z%PWetJ7^NYPPZi%kIY)@)2WgK5B z6>o~kV=NA}ykd4}_m#REQMBeD-*02Y^3WD3>rl(ndZ1Z1rZD~8)B34|{j>pA#y#}w z1KYg9OIO6UuZI+`tn|J0jPlVLaU0DnEDkTleP$yGCxKVIq>@y}sf$>Y)&uj3do89> zp4vcjFL!~^W}en5yCW@C8>=u`ES5s?l^P117*mLnEN_EY9!@a-$Es2v<7xd-*-2`# zSS+Q34f?iNEU9o4&?i}7zOh_Ah{Uq|e|vXqgD?;T0q{zI5~u>v3`I~11rQJrxeNk3 zb}1x;1S{fmfP@S)6@0k=zo&b5KsJ?cx?kPX2>cl@Oh9YOTAEAcl69|)k3TBYNxMpS z>|E)GoGLxBVLy(yuN)ZQ!vrQ^ktxe;kCmyxZKb?CS4!B=O8NXyDREyHO#K0@hQI^> z(9mH50B8tI000ev2>_rWFaZEG1SSB0hQI^>&=8ma02%@l06;@v0sv^d0Ng{eQ@%s? QN&o-=07*qoM6N<$f=Hpdl>h($ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-2-annotate-hu.svg b/Documentation/pictures/text-input-2-annotate-hu.svg new file mode 100644 index 0000000000..747200d63e --- /dev/null +++ b/Documentation/pictures/text-input-2-annotate-hu.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + \relative c'' { \key c \minor g( <ees c'>) <d f gis b>-. <ees g bes>-.} + Artikulációs jelek + A bé megfelelője -es, a kereszté -is + Az akkordok hangjait < > közé kell zárni + + + + + + + diff --git a/Documentation/pictures/text-input-2-annotate-it.png b/Documentation/pictures/text-input-2-annotate-it.png new file mode 100644 index 0000000000000000000000000000000000000000..6966dfd677b4a789ac3b8b5ec472ae8c8ef5aece GIT binary patch literal 42740 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

    @-q)1P}rk?GHj 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-2-annotate-it.svg b/Documentation/pictures/text-input-2-annotate-it.svg new file mode 100644 index 0000000000..3773f1f0a1 --- /dev/null +++ b/Documentation/pictures/text-input-2-annotate-it.svg @@ -0,0 +1,266 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + \relative c'' { \key c \minor g( <ees c'>) <d f gis b>-. <ees g bes>-.} + Aggiungi articolazioni + Aggiungi -es per il bemolle, -is per il diesis + Racchiudi le note tra < > per formare gli accordi + + + + + + + diff --git a/Documentation/pictures/text-input-2-annotate-nl.png b/Documentation/pictures/text-input-2-annotate-nl.png new file mode 100644 index 0000000000000000000000000000000000000000..2d9dcf148b9caede957a88013c8b46d9cd867ce2 GIT binary patch literal 41138 zcmYIv1z3~+7w_n9l&*n|@~W;Nx%YWe@Q8_vdqRbN05i z_OR!3_j1fT2GIfl%m58#g;xRK!+ie$`t8O?xwi6EUeh}JQ5~;d1{XqXMUHbT<}^%o z=pDJDBL1*W2Up2*-m2Sss62TF0FTor1Hkgi)@9RTi`{fQyK=R0`)V*Z-9fFs{PoI5 zAK6La$z$oW328?Mqa`?45-!P?buz%tyf`C^^ENe;H}NYc>bXg7)J{Zg{SDncv999@ za-Moo=#38rU!-?uiZ2Th(8gMIa+1TQr~YPsVkd*}h1tZpdWYNEI;Z?2 zoy=!I#_xptRjf*59cBJ_@01cQ$E$j8ba>{2U4 z(K0b}Nn%@p-_y$y*-NeUvZ5U$$IWRTodht6ZZ2;QO4dhRC2QJ&IK*OrmRYoOCmGj| z-@F~vExvS!bOs;3=y|EdAi+k96sbnI`Bp+%g5*mk-xHL=HIiRLI%K2okAN-o3)*(w zrv%W4Gcr9po}QCO>>7IsAo7CR6&DR&f0V}wM20kV>Wb4d7p6C^fuNV@TMq2mXGkr| zAk|2Mv@!yWMY8?<$R|&_*Fo`#Rw$|LGptDB0C+D0$RtRNqd;>^x)BLj*;i<6B}Hh% zI%a!Qk8MM2GMUf&xP#I0v|2vOP9Ee#m?Gw5t=Hral_$E;hts7<@b+6~W_GzDg?rp= zQs)A+TmV4JHZ*+?_*v-cf~MU%lja>bPpGSk9pv?Sgm z14ze^V?Aa9lb&Ex2N6=HIMZ1QkL=XXvxyw8dNhrg8$fPa(lFUy@iqRBNhtR-uEV2~w#GH&|F zy3S;HSUBthmdmt5owROE&)ThMD*Z;g{L$9TNL!d9 z1#%vuvyuDhc^omPm^ebk=eAwR2IzirNDw7_U`!@jOA)dF$#jz*OS*rB@9fe;jdfq6 z`wO=m2&4@Le5YI*m><089dw%6X6<`uuKK6C&8PlZuA#8o?9fNiK3j?HQePlVuDlrK zXWMNE^9%B+g1BUjb~PUD&IEld)|^`c~{v zr(6%fwCU6EO@oNNHpyt$H?`TbSy==L(kgi7sSiG(TlPyH{sWAc>_nE|;4k;ZZTH}> zcvuY!>W`cYOGJ&oEe?49Ja*XCzL5j^C0^bCsGRiwnj9Ea2{(>Y3SZ{Txph%yzc#6t zy%XsPy+p^SBKdP5WdDpb#38)1_XM+0wWVy9 zB=|Gpu7_{yB{Cm^){~?!Q9J4|IjU{}1+q=}NTu2DTiP8kp|3j8oly{nd<~4$qQ414 zYc+Hj5iRRsiOD|NnX#pFj8J0Ym|MIoZ)mUP@OnGO(<2kjQW6k*?_kXiQ>oKBOc0p! zXpMZBKT#-w;S5Pu06NtUYxgvnNCX?o2>**Q*10-`5|wEB#petuxY&5DH3a!?Y>fUK z8J)wwT$#!4tm94&M~zTHq1n}4?dMzwd9DmxL{)?goct;;$suZ1x!QOHLz?%}$DUc7 zB;BP&Jn@Kn*L7_$wQt`I=Zz~=RSPppd&x^Gj=khn-QsbgNH{rJ&|cDi@TsB@opHU1 zjNrVF<&G5If3&4{rBTN$o9-Iwkp~9wuAkIhmSW`cP?h6iYivH%BO@eV+V~yT3uxkC z$z+QXWDFBg@gTdm9n63Fq&sTx!T%G5r8mlOD4z)$s}|xu=kNlZc&OA2Z>#_LrQUNu ziNLW*8oyxXS}jn~&m&@sM4Q7fWw>FKS0p%YsAN({@wxSjY8Yy&(=x?KKo(r9v?j(Z zgAG;aQ5Pe#04^SX=wND*9XN?iBtYVNje`#ZFt~6k2~*@KLK#G>-k{7Ww}w!x`G{4W z@nssm7fDKmWQrXiDdO1>$(bjcj;SONs74{KFJVPSj$TKG$CYzf!ZL4%xACkgl)bj3 zflebajjkbA9el>ZR+%Rh&`Gjv@6<(sv<18Tv(&8Uo;TKq7ZT8~oFhYCROPo&kM zeA8O7+^BUNDS?%%t2A1YS}Z8O%sLrIXUmq-&-q}`>GGc|QL4~f1t$;H?mdtE7ZdS% zt!z;ra*I}RJtnqA3?Oq${~-%1XQJ#YYK&zQNKx9H-lMgwGr=T^o=ZdvWA?L z*uTXW{*RFj?XL+iZ5YnLZBqEb#@i$zFYRKuw>eQeN9eczk!E9bD}gEE{-A93!L_9% zl`X#Si#I7F{3ueAql(M*EnVFN`yo2u+xT`5GWQ>=oFjHSem9thGD-`UDjqhcCO5K~ zOoUTL|JbIqpGn96E#OmKlnCo%qk5|-n`y`__rJ)KD3q(wkYknRLM(^giN=OeC_mDg z!bT7w+T@#;{(?~Yhx$^*pMe>oLrg!wBlaEftyxl^cwRg1E7h89)h&=t0Y-{iV`u;+ z#zBNV#A)cF3Lpl|B+H+0WP7XllQ5LFRm>mw2gkOEQerlsi$VfxId2i%y9O9$vYLZ9T%A)+^yS1u@t$(d z@na<6_tDV%moU>N-%v1z;X}gEE)#kcJtUid=_c&Sb@0)q585i)z%L52Qe8h0=C4w; zm+(n6E5;1?g438Ki9o@B{NRPZ{vGT@daFXwtpZ_zUaFC~SLZjgD6)UH66&9LjmqsB zFMcSn-!EP#R<1E&dlp1>6Wv8cO!iY|6%SYQ4Bn_G-x{mb%sP_qd*8(M8ng07TE+_* zN~h1Bt;mHl?3`9|HZ7;GjLo>$nlJ7p z$#t!^#hYXcn_VAETyNc7p+*Z$MiTV4Y(q*_5f{d(({g=mbaicx~m^Ku(|pZiR4DU^oscOR|H?z*V^6b;OP&z!4 zHY9C&%#^xU=8*(PI^OGaL~;g$;oO_UMMkBta$L9Ciso2gP7#|*bRm2LZGf=~_ragi zR4Mj@;i?_fLgUf7K&#Mk)eKx$B9Q=_B(m!IkFvzz4|eixh|<7qD+C%RFhB{z*J`5) z;7_k-))u}Ll#Hk_0&6zX-!ntU@ z?F*yXyvHvw^Q-u6x?1RC?7l)gjrFKrGdj2G;JmxEMBs81w;wj1m!{2Nh)sURyf#?a zKlNV@z%G-(7s(QAGv!DfIwYSWsLOWv)sy`+V980N?xKE>7iufuE@)x2m~sXbst*&X zDV$t=DK%kL8&*{uBg11=Qk!(#gmwc}L8Rl}rz|ej#=}&V<^O?lq7YzH0n@Z2c67fm zfyM9_4_r=bD`QMJR-!Y>gG5N(FA}wb6^+Mj4vK)&YzW$R7v#fAY^!T`3(vQwLnu5Z zI2jy8HYzHku@}1_b8g8~lgE{*S@u1ex6H2pp|XY+@ad?>M&7x-E|N!|)JouviTu{Y zp}`;x{9||8vhUTx5=UCjhH*_&8uNzWL*2A4MimF>(OFt3_gw=@j^&r2IjifZp7Q*-~rcKh~tSQrae$sBXf1w9*7i3hBhs2m>Pu;$V( zhtm@EAeeRe)6-R*5b@%gK`3|R{8t#>4?>4i()G*^)z48)mr{ckC+pSmA*JdcJ4zwP zEpJ3_7J4nRRrdTpS9XL^{x7^~j0WJw3Dgdxh5C`+V)4S|bdh#V?tpri`#e1UJn7WV zjE?l7(y+ry4J_b>j;0F~PGfbrUN<-wN_UTytwDQlYp9mVj9}R8AmI7|nyw9FoS&9U zb`T^7+K@AQ+O(qL9;LmaK!Gx1ZSU->xsn~p8<9(ZTy2AQc%jt!ZOV2B!LV~sWu+c| z#v&?JVq?Gc<4#Ycq*v(?QO)GQn>2OM1d-+8iR3xWaW_EieALHR33zcJlIBcyyBS{0F~& z2@Y9j$p;epCR1>&LM} zNvry_mOtd!Mz6loAv=0+rbmcec2!C?EaF@{@*X~JZgfxXkH#WG$$P&|+mRq-Z^{ft z>l^iet+f=-isSzIw>I@a9_}%E=-YNZ_Fq?`v|XkAGE_r^_wLXe7aU!+x~Iw%EVt>1 zgf0?~u{f8b=`o_iKE1TFzzBqdQ>Nio?QOB`+e{4#1i@wqyN4sa3$=4-s`hzs?n7Z5 z)5)7^%mPN+wttwfqVd9uY?@Lr8fqL!M36SD30Iu~=POy#JMt{+Ad3&KKGcLnu@I5< zH8aSHxQgvCY z*&Rb>>8hvC*t@>MX+zj1n*O(t5j6aPkwmxGTtMygS# zisf5*LlDtFMWdeBsc}QO*q_5Ukh%Xi(cvssVk29|GNV!ZpA0W4$;Gp*)bEZyjbjn= z`7VBGJ-GxgMFf!n+vQcbYbcPiZypT)yV|p3ZBDY}E#ip}4T6;TzeY&9ENJm#%mB~4 zjhJ+GH80fuGDR5Un_;FW6a34Mz93357!gea>kGM%Qpg|3vv893N8#APNsJ{3RM>Cu zRo3vRGDY{x#kw;l=TQ>(&Zo?*GG$(#`zG5bO&Tw=0ye!d4#3TUmcDz1(Is{D^(OtJ z9w#5s^TOE>`6R320}J8RK=c;eA!}`py_?nKt-NZSH6esp%1Z4MdoLj;We@LzA7e^t z&F1f#s3uI$fs#EC-oT>^IBQ1dJ*_B`Q+q@{fwZKGQ!y%bh#rBDI`uS$bKEP z)Z=~G4`o+*Nsi_&{Q|eMJbduO$L8>Pi|y&dH9%H492@2i3F;1-q^6dlK}ze(2t7f1 zgI#HyLy5BhAJy&kP{qDn4VK7*zo|NsCYFnI#nR3L8#*TqYN#Z9O9Lh#z|@lRP&#pB z7F7be8|8$GMj-OBmI14i67E+`82-tnDzv>k0_JlulQQ zSbmn&dkz{|68-)2^8iyJOxcJ&4epU>)^wR}?zF|$15)^yH>4|FqTQSK{%8E@-uL=) z-fiSCt7Fa)xZ(#+y--<0YAh=KNDewy(X4eucgH$Tn1a8t+xQJ&|#_yCI>T8<~w}o)SJ_seue@em~RgtG7*ZLI%+f;5W!n~G~rcf6<4C6Vq<6WbP z9VgLjiFZfyC|~Hdg&hIbVj!;}1Du08ViWf40jy@Gg>3Za%07@-8KO6jhNZx7yBJvq(${h_2Qn6O=!CeBSwk)a?-$b#L21_pO`cP|v# zYM+$vES9#@b~lQCcs3+CftJGhL)!nm%aF|V4Img0Z{1VIkJZXp#`?s(nI%(2kGRIN zu6B(^9fZ_{t-)NA##L2lq!OM-!U3V$0TXMJ7-8}@mld@(siZ2HOce`nXbG{$hPf%V z^NR!DKT$~tzrsa65Sd}N#|;6IVp}_R{SSG;ix86VE3|FM(=EX(As7=Zh(Dm5;Zh5u z6C-$GVV4>~X7wD|NgUkRRddn7gv8G1hfT%>Th;;Xr;iy%YYUn|z%|bplh{DYs?m3Tf#WKIE!py`a z+C>ly2f%f;EU6G-L+(z`GCXZ%1PEGbq@&PI?r9M~y=0}P$%?1#T09|>saw@bVB*8@vQ ztu66^#hSh1{kRf^BwKLEM0cayWdlg!+%LB=jF>$${9b;J4PgHSSOdU!d7-l5@%2YA zX@>Se9%u$B$+4ytMgWuG+%B^X+^vr;sM@}eJHirZ6NnYyoP1FT=#0aCZh&M=K3Qf` z!rWPb-6slKup^{l?8-joF8hzP8)zLQWLiedsgq3DLgCGH_nmky*s^%^09iMhV#eXh zhaBtOPhg$1N^A>7A^&!o_D8WfOAHYHaze0Q8>w|D72;`J#6u$Pco&PJ7b(&!ZITP8 zg}hyl=AaB?5?w3eQ4uW0jD9^EE90&L>XvIDG)8M+T~yUYhkx)`KH%}|>dgV;A>FVZ za6v95uMfohkOE#Z59k(J;99tB?|^X&Rcp4KfJ<uc%=6Wl@!4!9UcIu|)24 zr+q{>{SEI6(czY9kK@b*3rUb5>43Ea+;wwU2yLJb$<*6JN4{!}P4#rC#Ad(Ph z+H+YZhB2$67ejv*|IFpx3X4ALSl!ehPL3{O9b9u%TomLCVi;kJ6Jp8=p%^)itTX*` zsLyGNM)IU*CE+rVYXq|oiVb=zvT6@{)8s{m5DFlPuD-Nqwvdaz6FGQHo~I+4WRGQT zff_%m#f6MDxYiS<77st)yl~39|DY~`rLOIg9MG1gcISxERqGnO5-=`oBgc9ohIlih z_dY0=DsOpIG(PUvlh*W_Q%c~C;l-o2D)`g31emDZ2I^o@yr0bD&umSoca>UwfxUNo zSBYgd7O>O|y;&n#tyi6Dxo1rDd!$S^J1B_IV8A1hi(VNRx97455= z<*Vu1`jU?P43C0IaaJpAie8hN&5~}*Ckl06o07Fi!*0^QH(W@wF?z{*$dYG-3oag+ zfoB7F6$%^_3UM3PSMWNCnHjDl!Z1!Y>{%>o;fbu`ga^yz0hB!6R5qmtiRS{FP9{DWQlnQ%( zFr!|kwOb&Pm|3m|USx#n&3!6y9U7NkQJX!z!}y9hGO%=7c08a`vHi1dPJv*#dw&=vq_j3`N2|x_6;qYY^vZfwyoquPQqAx&U_QF%J6(+RGyv0BDGJU3;Va~iv3>B zTIz1PhO6HgJo(vO@2$J7;t~~UL?=UV7g{Gd<9h*@vB_skSNHKJpJVL=7M0c{JCZlI zW-R{3*@C|kDx>Ool1+Xel?rW%59skQ-&ZhFnz{K$#whmntSD@~G{_PWCb3h{=L*nd zX#p&kl1dRMHb**(!D74o6&9_x)XqsgsF&lIeT-Kv#osW}tI)8AamU&zA!6qM&ddS~ zxfN&F(H1z2m{$&a%hHiJoj6D-gdt+ZDOzJ0A4JRYI_KgsY0$bYVV_InHgC~cpDk3} z;UT<)qKz>)mBobAkTrAS4#E)Y=ue8|6Cdzp)!SI**M_^?dh$ z6e?8MejYK^PYRAJDM1_2O=R|?L0=4Jk|N|t={XYIN_dsEt}oW6xA#kD+7wqo2~kI5 zMiPGDOV%!)y7S=(9#IV}!WWNp$Jw~PafyCtpZR%b2Qoo-Ky`Ljlm$`Hiw#ATr{MP(Aj~w^n39I`Y#DgCxSpkD zWi9``y0Sw%_wnB$ZkXKKjHQ6!(U(iC9L0+EPuY?US6xH4f!Qmp$YL(}UC^0Mz(<2Y{Ls%COL{6TL&HZpMKsWO>%I#QaPBuENji!euDHMnoPp5X;f zCmVFU67mR8+i=Pb`~Z&jZE&_Lxc$i)0z9E$6Q1GOs(Lq| zsOK|anE^9}cJ%DNSuPzv-}@FcT%^A>Xw4-+p{PQt{^_x}{QiX>y<)6{-=Fi2vNx-@ zDI1lQAQyvM zc91^PW<(*z-?OXuz~L|z#CjkdzjeW@r2nG-{n<5ohW>#IB7{(5zUk@k$Kaw;%jfI; z$MOCl*5FxgXU190chRo=%!Sjgupm4n)oE^fQs*5+cOC+| zx`y2fWrUPas2`ursY-pjiWVF`a)gvYj1o(hf-p3=ei3si&ZLx3ib_%hlTa^G%j5fP zVO(8I){vz$s8cIRAw&@&6vHWkN;dr+E2?BUWn_YFlNm}9B-e}%fG+gvZSg)RerH=6 z{eo)0!di3sq%hO7vDE7T67|HuJ|p3ANXR2J~ZzJyTU9qnNoGo!pH<>n^j9Q%Vxz{zR{X(lP>XBSKR}H z4TyVQ_Xa8#0+6A2!GHy#RcfJGq<&g^SD~sKOdLq#s+ry+$CL=`A5&@{6qhEvq1ETv zoJO>_b#jx|-cS#$u-AZPSq!nv2v?~``fow%mkiDy8^!Ew{#=orCAE|$U9kvCx*tg{3<3TaYJT3z49V^MWT2!ZxZz;%a?~O_bPvz2`UG!sKwFc#P z)_h=q6xw;wQvaD1Bjelqn~oox3S|5(dVYWDiWW+;%49OJP1_gsMqa{o=xQejRw?%L zX%mY$9nsJ@#OtOr>`_noZ3QwkW(z|s-@#nHz(q^bV2!-?lW4qzTtwd;c0?Nl$`3EB zU5kk?E?;OWB4~YyG>iuIBnko9KI38|vC}yU!aG8!t9K5jMS1^g}*99o@}g&3ULU1-Mm9Ka^^aSt}A%PNO(}y4uP2o3OwES42Ty z7&DJ$iqPQm`d5XWmkg<(G~(P=*kp_qUyC1l{hbKnl(I0b+A8N4E zZqO2=BXWnO$CV_2p(hr2{3#C9X_**J;F`cI^U6Uz8SNB}38l1CN+J zUMY7>vhGf&?jWAqb=Z!nfT|_cT@F%)YU?^L)I~e7VIMp3qB<|mSAuUpGz4hj@-J+8 z$aYe0{n*l0Mz~VBmruq7Gw#6u;vtTSnFhp3aygrt;cc){mWmNGe$ji|`jGvhM$?!8 z$Q7&Pd)LyK5GVCzxYNM(D-7sOSgK9`rzqTIO;}ogo6FIrV)W&{`f_uiD>jnpKubaS z*E1@SHr(puGR|T}V4@Y3zT+y(aYE(LCZ99o)OR2??8Gtb*x;vRPg!=_~CdBqki4zNb7^V^XW!jHJiE}YPC;f`g z)_llSa?MOq?jY#XG<#ep9Zn|WCYY9Y)iNMN`~Y{ zfCBjGxkph|*8u|52AD8|vA+r8u_L~dAo4m68l^Ne{k~^`IMp$TxV-PM~IZ*SA_GxC$?Q<&owy|a)>5+d0=437Mmza4VTOPl|Kp>7b zc2~*y;b{ksW#z%&cl-be{nj&|C*7H3Mz|;8VkEzX{R*@qiAgX)FpbDBI7^w#vl#gr z@i!OYqXBST^iNvt{RNB&I-vLuoL}#m8*zT!y_gavX8*u-(tG#lD~t?i-8NI#!DlXF*I5-PO`|e(05&E;}Z|)BR zhy7v;`y8_^M^Y>^O8aOet5A6;Lk&eRKXZ|_%+PEdK^i)3A&uR0A=Ko7MwIj_wnPmf zUJR$2LtH49#>dkTJM`#AV^s!VHjdr;U1QwoS)v~xT9IY4NoG<~rw28mMuQUoO&>O4 zQq})4t{}u?mZZ%ih0_jCaRs9K%p+TDWHR0Cr32(2CRzVvXg_y75-{Xxg^54DKUwvU zQDiZ?IKk+isA~G#@LQV~r-E}tq7Ry~m2z)#c$@VEO&k*2ZCLuRb3734&tgqFoz2cB z8324=hiV0or`5gU40_aP^?q**G0%}Fk~uQxwF zGX!;fGu@K)S^8u&(aMRKDyqi4%4SnwWgqErc)O-IIWpAZ#Cf~3y}P#i>w2dq`jF)Q z>vrrw(=U~{RM$d+v@MNelcv3Pj3}Dvi93nDMvQ3@QE z2fmN|*td&b@|;wjL;tj%>Bo;BjEY6AN>V+?E5zb&yDP>Tz~@nM&C4^J@DVii%aS{5 z&;3O~BLz)-UnqeZ=Llxmp(dO8Qrjy4s!4fXB-l9eqJS;iE2S;ux;=${tbILJ4n0hVpRxyVDN7j0HYn_ zuY6p6Q)tgWL}rBET~*u}>E4XewX*fajFv_9_oWN=t}f}e@;27TMpr#>(8TA1!qjH- z#0=vsbM!2Af@>DO-Trdl4qO|}w%Qwa?*UK>kYdIOY zi?ZaKPjxIkfHJ%X0cws1KH;{aK@%2j8;LqCX12ZzPoAN1-BKdtAVJo>Oq;GBPy?4h z;bUdQ!_v}z9to3$sflIR2ovEqnsQ6;Jt?{tDlXo?ePpl@NPT+BpBDJ<a;A6d`yR7Z;a&MJ2 z{@h)A?rr(ID?OaOzwZhSL)zOtc9K<63S+)%yNuL@7h;H`&-ca-Zn~tQB3f@sBR0sM}F;UOn@pA`p@x+6&-V@LCf;?f#=}{-m@tV6C+%4q^^H>34YN^@1moy zQtxO~t(wo++-E3rXP@ZV+j6&ISDCqn0hhLAzOdt-AN=-|4s!weAQ=V@XqhkArEt+= zw$5eGh|^(JEey>pHCp~RKr7;-ylV31J%31R1je+~Q#;4ztfx;qeJVOb?VHyMU8~@G z#}jL>U;8c||NX0lUsr#{%g?vkUR6@EEQ1S2jL{HqH^cA!-EUthT?E7a7+)D>o#-v9 zMZf_h0Dnj<%gT%AsE)8Ixh|%-uTM#bnMLQ%JLE~DYkvNHoob6&6{Mk}0wXCgv8j@q zYcVey?2>AI9~S>b_!`H9*J_*|!3Bd3-0~>nc0reoPwcK^x(lqTna2w9nw?H~xtZ$w zj%2&8NT6al78YS;VVeC0+q+pV#;1j=XA-{!M&G@fxZ|qkZSmX}&VIcOVDLTCD_pi{ z6Ic?ZVGmSK{_=4!!kg@559C7P`JAIMy}FC(*;1_tcAUwkh#Z>6D8)56DZ zDt!Ismv{K^Yj|y=oK6b>8!3yxVjg@O7pP&HB37^p^&sPEbsLsDq?q3^dvkMmyym)3 zg(kCdP&fB`8Lw0I;R8 zoV)Z_k@ZJk^Y@w~KLTgJxta=xJv1#|UlR!uHx8Z30>BEE36|XB=Ls-iAM5fjXtSu? z9?7LH{TW-((mQcOK3`Bq(ih3~@wHV3Lj-G(t_9Jn=(IF~JBA0YpyQSIMt`#!62aHk z(q~V%n1;>Mm@>tEb9m|+;YD45CUVhsYqlX&m%r6xID>(T&!leC&e?g#8Hc1w;+0YJ z&(`AJ^Mba>qNyk9!CtS(P;qd1b!Ao%ig$hYeEn)P_c8l;ELE^_ZvEFU7v{CP5sbdizSd|6)r+pw ztgSIP9dL?aNVc=~^d`cO*axfb{^((=B)Nn!{IIq4!lYl)y}?k-6sx7YyvWvQ_xXk>nHvNkwmVULtp?LH65g`Jv#EP&1yJI zN9(fn*N(C>ZViL@&GhrJi3Me)NL^%0vgn0;4MEKbG}b;Ip3c1C#rux`h^;4W28KrQQ z&8nv9Z}hrSYIV82&w9famm0CdLAtkpvDD^)B|Pgbt+r&SlE7r|uF}&Cg0xxn-g}Cv zqtx7!CIFP+XD!~0qO!cp|1>gc!~_Zr{;*F*7^7H_$;+Fh+tk3b6o9b0I$vIv(Q=$v z_8Vvqi~}7b6rX4%B^|i*`T;*?+7w|k*K@Xw{F=!>bQa(hFZ~@D*zUFxpkXE@{Pr(q{B(P3 zd~w$qQrU0t?a){<=<>3(-r+Tx_T=!se4k6YpdCI!L78x{uicr7p$cjSh57}Vt!S-w z+!U>Yjg}gcn_7+dmT_GO{cu2omem#kUZzKq=0pr> z9ywiFYUIt&|JG7E2%nTPGirYDFkiXJtgIvfcLkj2+Rj?sDA&-npdk&iluCgVHBA^} zVWS(_Hw?bK5y$dk;a#(ZMqTA@h7Wa-Kh-gO#QjTs=ltz<#zv+8vJNQX;DbYUz)CZr&eZ~+s}jpb*XCB1uaU_Y^+6oPm~9vZJBb5M z9AZX=)B4jsst+@fVY_3aLBq?dJ~f?RHuf>*b<8c0@1|S5{aQ17l*B(1|C#I|g#a{Y zhKslRgUJ`Lb8^K&kgf=5`iKVu#0Lg~SrNe_&r6aDBoqXZ1|f7yQ1!F%cW;)$8D-B`TpHOrY=2)vucezg7Up=_f zQ2{aO-udopS%2i*&qw-wT}`cb_*hCB54vGhvv%U#D?0i0&K6Qqx5$AJ=Zt#&zZt>? zf6W>F^^6R5lMAw|fX-{lJr$_=8p2Ef@Z7Sdf?K&=N8t-4(nt&Z=*!+sCFCr4|PceOEcK9OV8{jbx( z@pu&}ezgAkrT6$>j}DZln6%;V4#Bg37M!RK0VP`{hU1+T=Z)Pd(zq6wvXQTb>vc!G zg-6gO_=W3_e!eabZF@ffCVTRoA)oh$4zF*=$IEXzT&vliKRfZG00U3iM9>2V5xT{G z=MUknvF__hMX{Q-K=TQ>py^~?B*Tg+|HK1LpBCvHUW^pEk%_#cj!AER`}YKVZ4hdK zN}z6HLwt8lMmbG2M$~0LN(u)}HhdKBv2mIG=Fs3UIULflX?Kg-rA&&Hg_tuM`Co$D z$LsldL%K8nCX||;cp&i*da!v&>(pe@3jQ(KSjPJeG+`rF z+yXv1w)3}oFn!u3QP|J#SMYbpMP^Q<^6b?urQSPzBQM=|rZ)}A-^Owmb#!mP>1sGz z219?U0i^Vr9Gm_$?D#kP*xx{dW-^5{p$2EOd3A~22dK}3GeNB+Cn;rUWi(pS9+(Sy zgn@w+F(XU&<>Ob2CI%!E;7$*opKvbCH@gl* z)ixoqOm;ydyWCRrTe8!>owk<$lD)hTzR(b-hY#DJ@^@*GnQH~V+k*p+rzo0 z*lPgaC+>iOy3vBG~qPLfLqek%iGYiUA=cMr9!b;`3eEwd)e9MEMlrr z%OIhM`tv)=-+vnCpHSYt=e+%O+$lYy-2Dc2Q)F7osZ`{`8^X9ou8e#jf6|H4#U|>G zo00Hki^uD{ni50l%dzg5CwdG4pB8mT_2k+wy?1X9Z$r}D*w6+^Q?64cNq%qFTJAi$ z-=|?SVPD8SUcU~vZAyLHkk)nLd-YK~HBzJ39*Qc|gUH=k$y4isOTx!uhIHmZD0=As z(W8hQejYgwsOLSJkC=XLxUMX#Ul72a@uPd|Wl4+5S3$ZV5jw8LAKs|N4w{`P)zu&Y zc<1}ktLVqpOzuZRC9@_&umzlJa4unMk{S^-#HPc1hFHCU>Ug3`gA4>dmkh&!b0ozDQwcSP9=fco`AI08Gnr&MyYRd z;tvT6udHDqbJs)_jJniAX)#%9ytLnoQQ=)9m%v!JrK}k@;mv{E+{DZU7}ilq@kq`Z_HrM3Jk|mm+1Af;w6Vl zV@ZU^uS}xxLt>Rq>hw_;NRWFTIhaCjddo4idF`pzy|1E%ugiZEiZUN|VS7F+S)k9S zX^!`w06*keYX|}`kj%jM&KtJnD0|C@*TyBICyX(3`@}uXWINH+XqlMwWW>W`5E?$L zvFLKsS9Sf1atQE-w6=|)WjdQE;Kc1eJ206c*QUK zxw(1$U^S)9fBCu6R1CokjMQ003&t6~m3(Rzou&7oZ;)Y5W?;`QPJ$#i>yx|56^j*} zmw5#ZIc-e>EPG^!>kmIu2iFYD$zX(Yd0e>pHYX-l74&{E#di`8HL}!yQL_z>A!w$wb9C1B z;kV~wJF<+erQG207{8>n9VC4bw_IXKGinGsh=<91&7Aue71Hg@;$clyRau`#M~x1v zE6ryUUU}pFzgd9g>6i4qe0nU5deVy!3P?AZs6ed=&Rr%VxR1S@w0h~gL35>_+xV!O zJ7Ek$`G5+49q$tJ>m`kX8+KJv&Cx-;z^!H3hy0b5>$dWrd@Ba#A)X3;mz~@F{dtq9 z9yb$?wWLzXVOzY1PMID|ig!PJw8@(e_)aI{7W>rS*xtkvgKppkFC1l$LJ1mg$=b_* z{tR$d>HqvUHugz`RgI-5=KrsfOua$CfHwrNO^E7N?G?S%&3Bp=HKJ4F6+5mMR!(qL zkfot2t8^a~9u*`MMx&f#MyyQeEuf*RcdR?AC2iA$A=7#>E{~W9j4!=!*ThA+ z5473X{}7Sl$1HPv&eIF>yE>k=c+T(sS=@CgyPk??K}eXt+Q~)NdQ4sM|1kEJVNrh3 z9w-A0T|;*a-6bV09fE=&NS8==*HDtuA}XPj(%m(52}s8fLxa>1(s2j>=bU>#-sgGw zGQ97Owbx#It>22Bt&@qez|2EOu&34aKE|8(aY3-r13=zYum_&ixu(;IoI~;37*qbuD|92aqzp!(6xFz~2FZ1>NK+@3#iSHD>Mi*9_T? zP9|pyo#EVs)6->+yE{8&^t02GsVxUqMou`p z@4I-49Vl!_zXSzKp(4xO&^-ZMBJygiM=Q9J~(`7E^A~bU%^N*9E-qheV+S z;2oJ^Q*^$x`n^p-nwe?#0-?!4>hF!jPCdN!^~+109gPnO(I)`@xA&z;^PD^DJm_Sl zqdBjog?Yt}M((Y$X>Z-9;LC=pETl|BKH*Fjij`Su`T6OrN=g-_+`LPl8J13A!$`}d zs9vv5E>U4NPg4tIy!*S~ZYf&W>TchbJA3X3-%x7uzFf|EJ@opNns6$|XaBQ8)@R`w zpOH4pRpH%9p*}8Hn65wXO|t=;<(hlbvl66HIH0BB5ORlDJyh`W+Ee(Rv_+=>$Oq`G z7K*MZFgnjB(t)Una%Zr(9yT8AaMeY63uk-d^(6Cx}YZ1wpe_T!Cc;ssOQBlz`v|g?q zwZ1ZKzlI;LJ1jIe;{cw0PujND7|wkJ7DVZ#=A@;?e8wg|3pZp5x-2s#!su!fR*8gO zLWGlNw4dyoj(jEv%AEOtGdVl@)S$9?=LTt>eG*O2d9&bG9HgZkpgm^`+99xJxZ4gb zdA%6CC2eJ%GI;@QKa7}6KpMYA6?9K)&!ETa+33x@5_g+Ey*aNV*Zy2>wYfhJ`!xDR59qq^>odOU7eQgN*Gy}J4z;v>_&n4t zHL={@pg>N9FsymFZ-5+SQSA^OUlTiQo2h3^@Z0lSJECXikKS|4KV!lQtWWnO)scX@ zj&8MXi}HLXt6*u3KBZ=`_1+8;HhjY;Grrg=PKm<`^U+dMxBvW4I;v|lkQzA;Whx?! z_*zb96@*)4rKPhhLWZ5Sb$+jF;VA#9cx2bqtO(*xeSK022BVk8fu#jCr!kMhG98KY zJ5@>9A0FS-5X?@O$v(mb)((4U+x(`j!mON}5SEo3E6-CDF@S!R8|Uw%-Q*w1gn3}V3TytCp!*$co8Y4u;y9eq+-#MGo0p1Zb{C5jXn8?d(2 zZfx{j0fAq~Oe@Xz;ujaU#-F_UC&80hSCuM1A_a$tMrSn+Gkiv!24@TrVV(iIB=kF&!_^{h3 zDdRP*2a7vB&0Bi%$i=Zj1eE_{k?V4m@uT5G#db)77sgC~8IM&AE6ZYCTvc~M*ct-1AQpd5!m2bfWAHnUcw?Z?GK{&s}S_{l{*##dz8 zjxf}<|Lj0DW^W9f{tzhVeE7~XVDukv+hNuQfM~;8k~Og~nX=mnL1XOEL^2H@4kT(m zTu=;J-tebbf!iw*F7L zoXRYZ-1Yk$FmYpD?`?e0dv3X*Cwc zv3u}pJ&13TBqkt;J|@5`MRQ3$0;S~5WCqfND$aZ<-B7nBbDsL~Jm=pbm<37T3nPn( zyythNKoAfMw~-CvxKX=)vzjMDIHo!AFdkzN_vxt{Ju*EhD>YY`Bw^DN8A^njx${O( zl)FoChaQi8PAlG%Os+h@iFA-g66J;>bM;W}W9yzcuh6*}_0H)r?&0-JFyKdSm5n z_`>)rN$H7}-QL~%6i#39n=KcZf5#)s=hpIZg?;o66-!Ig%ObT;XZH?4L>LhM#QLWL z5WJstLVKhx@+l~L2`c?J?Oe~N3tr+qTVY}Q{I4srg?_3e{?&~lFj<0H4nir-iFN)u zGF4K}Q5*#q4;QE6&Teg!xp4hiS3A+SJ=?2ic6c{B`ncY{GlW2e?6A$2>+}Pz!Ez3+ zqr>ON`i0h>oLYMylXIl2`w65X*6IpA<6*u9Z>GwkdV}%5OZ5xMo2$^wqX`g;6RS<1 zlf57vQ|}xy*BSp3W_lw^c8(p1u>RMJ>S)5o*~U=gIdxZ!ZSUc7K})R15bkhuKx*ss zAeBjM%eg8nRk(OtR6B*8vT4ZSbbCxwO}#i%!hPdnso9%1@qy^y&QW`^kcCxVTCR2N z{`b$ghNw$+bHGabD&&XC+b!Ie;=X|WNE1olyW;O2JIH~A=e03fzy7G06cUM#(;C{e^Ah6`SQ!R=g zv;^9jV8@i7d6ENpp0Ep4^=g`7qwvKYw4i0fx+QC@`u?$axFmJ9we@T+R|JR|_3V3o z^!)c<_lCIdN9b>qKOGj?;5%9EZPWA}W;AU6910=}${o323m8UjRz5n9&in_79~7h% z+fKj6a)d&<-;-S1*z$jQ^6q!*F&d_`%fLqh0^u@)*tavVEjF?O;PG}BhKmRUS8v=b%}(eTcxlPQk=+JCBYvR~?> z2#@XS4KU5Jsfbg5E3Yz-Lioqdvx%%;1xwyZO$-zUv~F-=00cL5N`KKuA)g8Ov`|U& z0#yv9EtDJldZDFVz-NS8Bji<6MXnDT?C(Cz_=(*y^9mkA-~>m=VWa8aAySts&pUvT zj7f;7`|V3?ePB!aAy15ynaC^5a1+t3ZSDDt9NEqA0u7(|ouz=~U&+kd+xb5}iPrur zI>!;Cgmm{;4-IWJmFUw|dhX2>1;pmz_Lg&U0;Pq7FBCP~6Pr;R@h+)3l)J!P^w4am z71SVr3gy`})6sQt(n z7ik3tx88e$qjp8}CbK`@{%}J2O1ZgXhaLs%MHyd({Xu3`$hUTs%%+B zso39OMsCad%>kFjDG9eFnqgZ>U?uyY?l^17-rK}kU6YruX7~-LG%8Nge|a`Ev{3CemW@^% z*7+qna_!`#6-XnRS?jvqw|?z;)NbANP5zXPkh*qs{kT>yI_{rTzL9?x3;zgfxX5ns zK9Hw5J!RL|dp%oH{xLJ{)r2g&?RY2}Mxd+(9EuOBNyK<7*KzhmEg{vn6K5aCc+Ngjq~oJ<@N>{rU#)ws z-!KT~7oNGU4&4Ti9$v?{FOh#}dv|i`#e=^(f8Ejj3J_)P7)E9|A=tdS1%e}^El^Blx35w?*w5&R@3T|pZD0e!gn?XbE^k3{ zo9(evWcNp7TuXXF6Zgvj-LR5ELK(k}Ma0v{lGD>?)1A~~KC_FpBAEA%3+u^!2bccC zh}!~5HbpI2x7*8#1Zv51SjB89Rh{GBOpN5kAsyNMhw$$&PST|V*c|6;Y`gl0(+}vg zKV2NegP7a*rpt^LtG54>!*tlpVI|@6M^PG|wBEFP?M>xQOaPKk+vv6RO!a3@1n;hS zGoE_x3?YreKNzBaZ=#Pn^7T>B(okg;BHRs#OdtyA+x+ux86Ic~AIAA3fdX>Kfu;cZ z2?CtF%+;QMy35{dVUtjD?Ok@a{cK*$T|D`$GpT>w%NI*J;(C;}vGnLy=rFZ-`j#bQ zuIw)^IM+|AXdhWuR9AcM16gued31pRNaG6Qhg1PsC{x%)>B8OQB6i(NBD6%Rb9)06 zw0vuCP6q#ljMwS6+c1Z&Nu1dYZFGA@S0#(36&3?BO?>@V?0zj%ZRsb4e~q%l%FL!h z(~AZN^`bsd*KJh3%uC45M{|M}+G>N0j)Wd|N=k`JUq$H}d{4LXPOGca zwP~O1loTnvFO4~E{qGRQV2Q`#<3N7vKk{WBl&T;>MdhG!e%NMyjab!KqfHKhtUuVZ z>_L+_hMmxr=N{mZDuyQ|rxg)RNnt21=0$Y*LWTwKD8 z8cU@_Bq?r%-S5O?{Vx||V^c7?Ercd&8t4P&A|D*ywg0zcwULO9YBLM_k#ykM&ckyW zQAfRX4cwNC0}bG{BpWN>*w-*Msd0X@#MD6QiFAe0Nc^9Z;=|$WjEB8G(HDC9pGlCi zq-}7SQSNZg)JQa>(OW^>8kHru(fq2M88`jt>BQHRSDEu2u-w+7yN*HnX{&(DsJT}d z%7KYnOYt|i^^DxfnnYT$$vkAM?_)5pcxO@X6u!Uk_w9V)CEzumdRpP^$lh6OK3lz1 zKxM%ntlZ%oY3D~ZtnNdah|RBSVmci(Hndc8Ub-kf{B@sK;|S)YRxudVvFm2OT=>4h zI488J35e$5AzMy>Asgg$f7_kzIPdPsK^prxs-@P^r6M+V0z=r1#V=I^|6diIT4HSO zFz({w=C%gkW1z?Die=H-*A>7=C1&nNz(t0HHHGuy+*iuHdz$YIm4PdLx$;^dS}~?p zn-&e>i2&PuAXMSq+;OKy8+zx)HfhJA&48VfMYZ!Raq%`x9>%b=Wu#EuBdZnBd2UgppxEnu(8~K(t{N#Jp!z) z(`db*0BzpoTDxLt_yBHYMQQ0+*9V##p2f!F%gp%rI%fZi`{3(J3ytcDi9eg62RW%E zoIAxuU(v+KH&Kx1l8+?2e`_|E%cuNC3^6}&^MvrV4@~&pc9MSSscm_swjuxLnvy2>)Y$GeyF_2zEsyFy1yzy3evbm1{Li$0Ova{#f*O+Y0R z*qe}>>ugr~M#OI?;F5t3S36ICe*gEE<9kCNzDNeZ$W=4G#A+F#%$vTBUpy#mFq8 zn;WOe8+swQ$#yZYw|Cd9+|UF5WuepcFH%md2sFE_xV%lEZ4&2YE$Dp4Ra2OCwerVY z&$=^_S|>$!y(IXbwW6Mij3U}+;pcWZ+SM%#B*ux9x%0le{=VX}DDD+tv1(xZwD=%0 z64Q~NN6LJ3=wm^D0?oz#MrZi!LP9BzF_zn&o}=TuW;4fj9GkoDU6?bm&J zvPOM2SJMA2tnZV3<_nG;zk{|A(?6Lr>@IT`lWf@&)J&p}`)7hFTEey8Ns3;3=Nps4 zjPVnPnbS{nUQ-5}-XUOnx*P4|^{b3vrI#Yl8 zepy#?QRmk+rw{TkDs;qXS#Sr3T*2=9060{C&P8f5>WPe;)J22RuaL2;0te@XlF_5R z(oI`(mw6hIQp^5Xqxby&J6~~U+S+ebx6e+bZS1(SO?)So@grYi=J`owC-ocA$gDm; zp22S7{R}CaLNc9#(qGg7#7L1P}LywVE zdG^ddEHC+M@=N!jd^Hb<#3Q4;yTAUc+dxj9fQu2%35r{eB8{eW31J9-MSnxIt53+3 z>-(f`=_pZLOkgAJQ3Zd08GQbdTF)!e;?OSEYoynl*ErVxTxs1EZ%t$5 z`O33lUBDv2;z5Qe6{jYMt>>PQ&5@ucX=U93PV|Rxt!4IV69Ln@-EJnF&1BFrdtKGg zx>Efx+QB6v=H#UQ_7mzeCYRpjSo)8>WYXbe)1Og_B!!J3RUySvuYZ|qW3v;W!oB!O(RvkH{rqab%-AZAS4hZ%^AXZN?wzle{ z#r{<@Osg+giZ*9Q^3S5cqb{seP~h^*u*v;(V$BN*`TS5b*$KbLKTEfM=(x_46U_c*UCUl z_sEBXF(D&L5i3?x`~;vu9YxRS?<=d}6p1oET|suzldnaqgMVu1|Jg#CqFz!>gS(uY z$Ui|VefgmW0vWf64z{{C!@59YfH7)oT+ci?*aEbTI;O<4Le4pf6FLdGT0WEc97he4N3PewXSC`+X;bIkYQcpBlZVMw0P7Zh?DAdWnyxu=gUFbxi<4f8{Hfp z@be+Ut?VAD$|1Z#%0^ z6ozorJ&H9-gpfw~L~1kJr$@#2*Uqey15zcKt?Q~%S(iOGYg{EEcaKu!p{O%<6~4j~ zA36@gbYI3qQ(-o}c7oCd%oo2GOlQAP{rE*ks_gbvLJrm~Jrq*dkqUD{Q$yQ=SD0U+I=rvbw`OX{%7jW3`czy1J zwxqIgxFZAh>Ax@in*OPZpO-)H<(Lh33g8TNW`2daEkic;a+wpi`R}VQC1*_7?lX{~=#7o5?zF!s(zcp;W5#8&dhIO2A5h zK^!TbUo>0VCuavK6CEz;&5t)^Xp60M4Qlmx|MrD(KDSO&$yeBW#qKaOL)Su>_kXAu z#{q+FHk<~6%97|vwZLDK=eZgl$3dXAmAxBF?J%q2i14jSZg_5Nx| znnfii%LuQgdn6fhX)vKwB)7?T5?DoZ(@TO!Y>Ok*u55@VfDyF`GJ+&6aHr;fV*&n+ z<~)_uTv*3cG$Nl~!>gMJSBl)R68_0~zeBHbpmR;k`RhOYHFm<#j)OLrIAif%)ry!=%kOi zF$TqimKba_J3R(!<#HSnYoJ%eT;Ag@2t5D7`ke@E=jV5#WJ)P~+L(=Z!Gv+9htyM@ z0$5DpAPopb<)4j#NAQ!hAQhy69)ic?6_|s=12|Mxr_^>*YWe07@ocKsoKJvmu;-YJ zT-c=kr*M5bI2YzcS1hNjTRG6Pwqo$g!Y%H- zO058Sl-0}7UYq};0kW>y`)kxjJ*7(EB=67qZ)Oe$c_!v=T;xVo29RF#hLPPD2FCWd ztKCbY|HzQm1IDMK-6n0UaI9bC5My zjO!)fd5sbD=!A?-`If0{0=Ts_LVi(~B}$sh#1m++VRbA)&b%o4L%}>bqPL~~hjh1- z$3NuPPSVnkj9CGc?eJWo%V5ohUeR_C2gHvN443laFR?DnIS5A zSpUS*HscKL3dwO>E%GB*T7*8$K}nD$LO=lLlGK+bj-rZkqgwBPBHRWl2mweXD5VUO z{}VJ5Lo8{t!(sGLYj{wDlbSD{w}mT}&Z~UcO42x4i#ikeRD#IPK=?a23mluQ>)-II zVpzkNxzi)xOcH&~OU{_BfSH@op@q9ZK10WnJ0s$%#CuKh7C13h&{P2ZsM-#C5|32h zZR{cL)CIR6**{lsOaRIVeQU-)pLP?#vOtIvgO8~ZLgeJ+-HRfnbe5G^pe_~Ev7bc$ zfb;~lC!l?Kp(o->u4I*U`1=wBz7_cAlY)XAJ#a2_;-t_B)x|g^mruM7W|Tbgiiq#f z(=U<#+yhVPwLpPD0g6G?W3r^p3^59<`a&jhJhb<@;KnOTo<8_Hmb=-PP61!iE~;)&B3 zg!eMk2`FY#mdfe;cn&a~kdOLDBsbSW`5Q7Fvw{Rt%mBPH}}D5fBX&vf}Yq(?sliw7e(TK@C@E{-PH1JLpwC<$@E^X+mndisRi zPL(ajA=DCH0bTe0`=o%0=RFDoN(+D_9RH9S8Ip|@f*z_^AjeKQb2I_{Zl(pSI3AW? zoA%bf*B=05mM=DoO=9AewDSWm(czAGGOqJr)^RLXMprBZ!COgt4&Y9BM1EPPbpmXQ zgDwfhlx4#m74d}a#<*V9jtel6^s3%4Lu$QVf>%D5bXXi~4i|ZXBx!}qgD_^9(TL5^ z=+X5pj=6azmPGjE1?PaYgtrt$Q$8P%)45UjMn?Sra7M<+nKL1>g1kFA*IZOHdU7Bg=5DgC9nxml%ofbE z=EwL54)RHehQL%wawWPr{jqxjun$E6yAt2P`JoJDx!d}s@cD@Zg3gsNX;v!S=tD~= zNoX9_Z<0}5j@Ca~?rp>I?aX2u?USPKm%zoC_dpl}l z^oN8INcB1$EnWqqwqGgNH|z(>>7r<^u2oWE=K~--bT1Sa^4B|iweyhr6NFMK&NDz8 zgWR$RqAHGh#te;v!Un$mW<=nn5S(~@BTSLl!$Grt54Ydbc@KO4wnDs&7xXcWK?4=-QnLP6h-R-?`zbc^@{| zopDQ=>IPLRUzktNFviye7Mc^gBhM5&63wBci+L8!`_+00^%6l6&a?B$!qN?Y@d#GG zn1DR6cvX_~gKg48Cp$_9Cb{`Bn=3a4LyNsxuK5d`Tk1H9(0)j-f${s!uY5)`e%Qb1 zu6U~3<#VVF(7uzg|Tfw87! zBqk>mN=XopV)DiYVdgOT>g$qB-`!G(h8ZDmTULF0A4yDtJMHt%GArkI9RQtuO)!4h zY-_F_=*H^~vjL6)=g7kj{S`ZG5RYDtI*L||OvH@Z$8m`5?NrU&CADTbTM>BE0gp#T zr^G0&?=XoP9O11T(FkP#ci3W7VqLPcX)7Cgi=?=1&Z@3{&r7m3;?zmFC)aFu=Q)zM z9JWRKfof*q4gwIMEGuH1+~PKpiPK>pi7zidh$I}uql{K=YXjd}oP3t%r{V<2&`?oc zV6inQ&)qRjeDH0c69oVgDlhgnL^Pf4Z}WTAAez3Y$dAC?@cDx0S#@#8bkd^CpUb>w z0-!wiHwnE`*uC&54TrHr znnO$n{Bk~Iwoql1CK_zL+6bnLqV31oxbXY7MQ`tWlfyV0n(8BP6({|`2+skXR&;L! z1q9=y6rcHST=y?uNJ8nnOC4(O*kGbL<`vs@vjG%MZ@HP%bL0+0^r8pH(RZTo3}~@i zBL=So6ZPsna8l?jMcA14?M#1u(sv_dV<-N`EyUqhf9HqGMhJo`R*#dSyatc;Ax<4I z1ZYxU)7@lQjNLE^pieTTpjiXh=WjBAnQ>I(-4y0*2+R$tWg04?Ruo?@kW^=0(vYWm zK&Lq?hOA1f(=3>O&c>iMs+Y>(FlxRrw(}F^FZ5A)dS{2qMo^qHavxA->|b{Hg^QzF zlfcO~SkKAo2p4eR*rqV=Jxk)g@lE8O@x2Q4MvhC!)Z(f8p%!!dFY*wjec8GD04zK6i1~P|6!&lJ6DU|> zEZ5AllhOkynUe=Wqe}iXTOf1eG^_o%=#85sK#Z&$wQ>&H?EKybAD$IlUnn0!iw!iU+;4o!BOnaW*n2(QIJVkbYMii@ZK;HryO8} zlGRHO4hXvwxl*|^AWJ`coRjAt>puhzw99@(&7wCqmK4`U#My8sfI(wYH|)fdlB9zyu_Lx!1`QEd+Yf$?9%nkB;L4zk zmuLo|N!n*a@yi%NKrwyst`0`~HvIa}q|9lEPzz^cYRdki=Y$Q?BLGfT$1wd{yX>xAS;=g9&d8|F#+cvY(lriCHK|#3){% zvjZv^vvUnI_M`pUzl8Y$DbS=LZlLY8z8bj){DOO zoVH_7qGn{Yk_xWGVRf|#HVq5j@havoh7an2_HJ=N{TiV$UahWcK{8~=iw|JSwqX#c zy-TJLr@u81)Y(B;ROsIlr1chMQlN=7!Rp|H@ef96AAYOqWf@Fca2I8M|LR*fu4b_l z;p$#=)G@E7R_xqi+Y4s;5XkONQEE7gBIy=do**5k=n?{bI5_qDmKas2-395O9|!7$ zV}PjSOtJ_4m|Qc8Nz!R18f_@m_+@%P2(D|vy39HFnKw0J+rNz)a3A}myd8z0jB0>O zG$g?oQ_Rv`p~pW&8GUCK%2Y3hKPHKLHR8jR`@pZ-m#_}`p0P;MUo~@qK75wL{9!{^ z(2sw}zk=B^h-!`K5;$Sy147j0&Du+>QA)QZup4ZBP@*mT{xloDaJ9PKjh)fDp3#m1 zx{9(mX|lSefOaAIf-ubcm7!WpLgy@{aairXv%D0&LzORCTxumT_`dZ(@Mj+!Spau2 z)^}gj>X?#z5~*T^R_#RfN*G8%dMy>Pq{4jdEkWn+NJVu~#uTNDS7ty^2rov5ax>#t zfp8AQwJ651LLF%jkXZJ?YPYVjC?r_!D*Hye+kVsiZ)2y36SmvwGS+bUh zHf$IY&}hxa663LNX~d~%tB3?aGCA8yhHK*aEw!RKP7nr0q+>t#eb_B-%NnORdbRI2 zEhT?~Trvt@EYL>YyG#EaRO5s}vy zY;{~5@MkD!{Dw^#NNnkiQq(VlD`Ho(aQpzyVim>gvph7-Evjc`F4z|6(2Rs&i{Q@rF5PZ-zFP?PacCu zHg0g}&Y%Mm{EgZ0!{Co|^KX?tTVucBF0FJ|PF;&J@v<4%JYZy-F!5oJAIW8m#~3%$-Zv94lSH*`M|t z5?VGDP22-p79Ps{u_pDYfeCzwZcYVoR($q)=&NtY;3Rb2H=!SS(09y ztEx3M89=o<=1Q?=&r-2I0_~@KUUD{xGU_4n`$(e@X(sSU|54=*B2G4q7kK$eR+mTFdCMOCQ}L`k>pz912n`H8((07h#dZhKwJ z*^lndTe~H=BzI=|k%Ex`r7ayA6|L(u%Q7CUxwB;rK#4si(f8etGW>L;l+x0fvIQ2?ZnVi9Wgb;9B zuOcgCW6G2L45J_`KEIY*am_D;rm7=JI@&?}*hH6xHk@}BJR2yr9pb=^Z4Tkh&{WZZ z1_3g)Az}hX0s)#Dmeu6qBLqG-k||2t^o;Bv#me{3Je3tU+JUW+O4MM3;D~%ouC6tp zB2h>?gUQ+fMIM{}kp_Is08eh>-E;YB=3AVB9xwx_7newT_-+4+emuFO!5eFo`2pM@ zjyg-R+Xr(+PmF`R3grlA6gAA+TBU=S$U$e+R*0_^9~1OIB(L*ppHM!Hhke|_YZ{EI zCtErnNFSK?8}R&^&6N)zqgcNE&h&v*^}56WKiA@X+tOY`hhHAuN@|a{NNj*d5c{IG$3yeV zONg%)gRP?OxA!yXk2j!TbF=f?q z#+^Zhm%wM+sHDY+9=(v|XRG{Wr-8zLaVSTOV?RzqDZE;3AL`JP5<{feHV|NXv})2s*-Sunl|1JuYrzcP!uCrE3Ty|`}AlF%UQ$_^OqajZ6} zU^?z%CxIuCQ>hZ0GoHBf6mo`@@kO57S{Vv`iOL^(%3xj^R@HXGO=cF&~iPP25V>(H9lexy_Wj2GqpK<+-3;o0myLx!c2*jB%40t}69t z8-`G!Q)=FU@zti@QmAPXz6ml_?s{_i&4EXS@p&>@?2Ku zriv$!F~#hxajR+8Uu!{%?;Zq)h(n&y66L@(lR0*&SCkJ=-+gw!k6vUqBPtOqWKE`z z$4z?ijhQhaa0#CzxIIhxTVEdCs9(@+up>W}L?Sb|Fbb0`_^_T`{IhS^?8niVPH&`3 z!<6Sen0H$jq7iD(Bco_3vjUBl7^?R$e}Pw8`|y;WJdfyTKa?_)$it8dPms)y^Er@w z&gA0?lS!;Jk-P|3pMG#ybPknjL4(BkbMoNz#iTn7ov$O6(1cboP^Qm1F7h1;WgcKjWK{2=j$wEnA78be4C(1?Gz4=Y)iDugdK%>oBqbd{WPhy4^y%*(;+8njBb)1EQi9mY{@t~WuLq4 zo$x^oq+@eJYb|G7+SyLQh`+uv{{dP#C(W?ycR6=2n}Q2UJe@vwxiVuRJuuz~M*4LV z7f@;JqM4a9t89pL>V3IWQmWkW*?{r{-)AJ3VC^B>meqjNY47mAp#09)5UhodsxF(M z=l=af=1j!fv-x0Dai34IA-O8v36*Oi=A4j4qsfaCZK0(qL7H(4Rt-)<~4# z{FCi*RTm3@Yh4N1I?tt8lD*=?cQV$e#CiUB6B9C2RF1U~m5k})mUNEuph{Kw=8NF> zp2H#Gq;9@EbI0t2r`LPz$V3pUq)t-3XrDU`crf_11H+g4 z7$@w^-AT^$CwCI<=Z~Oa2IVtUyv+=JtRT*@016?9yV%;_CRoB)02Q_sfRobwDPUAt z(U|2yuA1r=Jk-i9XlQ>){W;#p^Lwe(G9V}MBf(DOG*M5l`miCjOMr}xI|Iw z-z*iF4PW?$nruw#Lm1X0sgiD&lQ^h{E)I~`PBw-NzR%d3S?WKIMtljwN&>2C>nzoJ zt?@el99kdrj=xk?yrjcE>nd%E`V#djC|=+G;$07oFO|FW2c=B+z2p~J0bQK6=T5^8?Xj%N*B=h%?A!#*ihFLeHO|0Cn} zGfIep(5)gdpRv2h$xVWM`5wM1+Pc1GJyNM-z zQlvoP<9S%GdCz(X_6gh{!6PT|wqMQP*>Lxa9maL?gV-veJo|6pPw5l#kh zNGFGiSiF?N^;Kj6#b1fmnIO8(F#Q$)J% zUJ|1=C?T?-=6RxYak-6gJq4rR^hvc<+$GB8lx6vqieq?z>99x{Qg*Pvtq!+;Kcm`j zS!LxOq&G`v^|8)s<72ZYaRV0St0%UMoL+qkA#I^VDLU*tu?|3Y+hbZI zyk}gq&)shS%DaCLRxjJR8|B0P=ZeD)MYiAw=Tj)g;8eenm+G^k3t2TzRY=PG&=Nz6 zytQgMp;Lx}XIYk~I;ph*jW*{l2}epdDVIb^b$QZ-E@${j{bOvAnl;jRiUKd^@>P?# zp`b84s42?7dWALuEAm9KMl5ms!P%%%ovw6^85hbgeHR#_{9O8PdhI0I#!EB!Q`sBc zuTMH~iUexs?~P)jms~S`oODd zyeWrFvZABH#y3!Doo!O$8t--Y35a2IKZ>AzPze@&QbyWzp}0X!DtZL}&(|zO?$}`O zAob`Beslwttb4&wtQki%8$LWrwt*E%i{Bva^U-_EE0rstBWgh>Rw1V{7 zPphGWq!X@u6$ zm-3*V>3_QJXJ=BZWMVa-0DNltzu1jqHKbe8g91TP;@o8LU+YSCZp3QnviNBLikAP0 zqKKWSLWWv8%1I#j;p*I>`^bt*|AtNcK@^u$VI{_*$m(YQ`dJ{r<*W3-?y#26hMoTpd16$eXf@w<0-%#nSNIXs1S754 z;p2Yu>i{p^o~K1bGTqC=!*Sw8=-t=%3^}q-GxR$J0PF%V;KI2SDy-G>7z$g!5QJm6j(U`0t*oh_-Z1e`S|G@N?AM%Ex=n; zpDS}y+P!>K6;yUKpiJX;5hqU)*?hEq6m~#K(1b^+=ZmLp$R6YgQl785n{yzz5d3J% zK9l9?eeInpXq-?ShJCkxBrL#3bQ?jj6V!fOLG7)xCO5+I0w!!_GN#qpnqwJ)@uaXk z>)6}&!xXi;-A8smUIv^}u1C%a6dO!#9l&m#eC>t%p%{P#L%p zT;m&*5O#-%VYoktV)5bCdmMc7DWo0xg{}0IPXM*CP>)BQ$5b)XTnxEgCPZ0UoaAyX zwn4!ZzO!KfsCK9l`fhY7k=mg+>Us-_aZIa?|=o!yhD*L zt`m@!{pCQl3#KZHqA0D54|W0goA8|XNujAyKNPl_VF`i{ih*Lkyf2kbfQsN47_bTW zvjx`!GmvhfOM%-h$tdxv{r80dLH8`Jk1c?|2l@eD0O$I|6YS(u;O~C;8kpL~CMpSr zAEp86KKR&eTN=X;U4WnY;9j?F=}h>+ds$zZzokQc^x22`}A zeSV2)KF|JooewG-S>=DoK)I;iY`?@v<@@aJFu#ORZ1pt|S7v*m#{g@6u%!uhhu7QS zgN-qk%K-ZM?2r_Du-|ywrVVlKD;qcfv2T4mUMjzY#|%aW6z+_%Tqe-hVP9_~rfz{x zVzT40uM2YCSNrU=eSYZg*#E9LwvmK1*wTSTJ}8T^>^m?RkOU#j)H7V2}?!XkZ)Dfqgz$)WG_Efgy<9%X|%_PqeSc zp~!J9@ky4MSazi$=dK7?*~qyY2JG_5viKp(UU!oZ*2mgUOW>DqsVjil$onF&pPR}@ z?u*BOJN)oC@Sv}S!^-^f9E%*=5b{B}W0^=1UKRP<`eo4gFy#5Zs0sJ22e}sV;#tqm zx-bN}4ubY`X*{s7se_jNVrze78=HYOv97Hs>nBrR6IA#b>E(=aK7+mn-g(VDT=5CU7FK3K+GY-ItS)SmM)> zhxBEL_xnNMC-!1L@kzmv@H!VFsdEMc+kig64&YAUwuT<2emEQWJ1`It9NEaj>O!A* z+QWkGBIIR!3=*d{-rlxJ?Tc>%aIvp}tR8;(ZSF!IT!lzhkS+GHycuQru;BVNB0#DT z(eov6flnGlk@g)6l=&dr4-=5>_Crz&#T;Pi7fckaq=!bLdZH%=iz2cZ%X7BS4$Tcw@X}tAttUnSt zm$Q-c^dBEw60wgXkhDk#A&rfmh=`i!llwZnTzBAB>kp2Hw`?wFIwg>NB;2fU_%of8wt{($GL(cPVM7%!elb)sK zZ2NFz?7!~ZA=lfuC z#QrV>ZbYu<@Vj9<^8CI%#=GHs;IGI#XghMx?nHVzZ*{KcmwjG{+&6=f`}zssA>d+r zv5S1t01K}(9=IPk1UcsgwrydeW{0pFvbQ77CNJW&=z=(uE_1|Qcem}BjXXQPK;C!1 zw{7iaZ*nJae&jPlX?-*tq6IOa%z)PnxZDu&lZ|+Z-$Y&}4+EPl*l5A?7F=z?46E(~ zxg{8He}3PLIJ|L)s1Mtgj@;m&FisKRk!LC|4j}+P+Au`XfZ(z8|d{)Gsgp zXMq=hT%WuM4n!OsCySVSDWnZ{MH}+;XK_wFQ+3Srn`NPPC>50Z~XFt50im-oL1Q1^O1P>@L!F` z+kOeoK?KG8yTPqa&0?p zU4b-4JV=~-G%{`bS4ErYm+Ss@kr!(Cez_gFzqTRgZh<}hIN<*pIL;>Hhbev$Ia`2xY+KI< z`upIw%@x1^KKR5Z*WW*wcf&Gj-wl0`XXC9j{BH2u$FT;v2K(6Sy^lQ0Kl0c0*dB;Hd&Aqx zK+esn$bfKgJcIpmtluE__lfrL_O*}apA8+e-6Qu6;;gs;Ip>+kZ~Oz>u5hEECol>T z>t5t{UWr^A_aTk=QsjDh%3s@nQQ8Rg1h*lUobS;{i+!g3ITrDNd<(o`H1nnAmltu^ zGjxkjUNp_w-X}<_zZhvT|H%hcez}Ra`e2jY%6|-bNsf!?dh{Zq^9bNZpCie-U%Wv9 z;J-fEhI7AnAmVmTg!gR*^0L?q40DDB*j>dhBH~~(Fw!Rvn6M!I5O~c8M#R3ZLtc8z ze6=1%{9^0%z;Arwv2d>QF5>Zh&?la)@brU$xkxwUM&O4&_|CR%T0j63< z>s)4zO(r`Wi^<=Q!3n zo?yrPe;|UUjwjeJUZ+0;fAdKUYQCRHw9aKoQ(*$>9!qD0T1}< z_6W2J_VeLH^^Ik!m1NHXh7lE}BY1B;f)jANI*APg3c zOgYd{~Wphi;?@}di$L<9oX!H&3+N;Um@>_ z@sT}Ie(|i|LKIK1U*0h$aDorsiLh%k^1J@R=Md6ST}T!j^A3K zQ$COGdyy}HzUfXmF+pc7cUdUnbo5Ssnm2%}!E2&14#j&fiO*TR!niNf3-1=_t!K${ zBl0pmp`DQuKjqCg&oCL;ykWoGu8Ns342Fg8PL9mq> zbY)nBjNlLp7(yK0v)`}wTfuu0%6y1~bG0%ZWkn^d0<5oc%{u$s)5G?zhOBol<2Hm8 z>|%d;1VvmA+e3%rjdifX%e!?p3e`BlLL{aac)%|M?n8Zfsh6kl^4J*i^6>6vUw0-m z3SxxBrD`;WZHW(2y-&oJqP>zG+ax)yH82DH2PoFM4@#_^Tkn0Gm=a`ef=nLOGIkn~f%jZgu9VFtD%Ty!l{TlOw9tZs(d1zalDD-ORJ)=6y*n+l2nF=? z3j4SMg#&$9a$POD;Um)xyCT`#lq*;GJ}kUpz14d##YS)$Le9)9waC95;<^>-g-@(5 zrR+fo9Sg|_?qqP<3VAJJ6)2sJn%CuJTS^T^@I9{nopQpm@aL2ZL&$_pU`Gfu{SB_U zLTW97(H!V%LbmTGb^KN+^K?7Zue}i7MYTyoc)wlj`dXAgoGm>$zwFuB;NXW|9^u=N zg1r?u&nwP%X>{GgUdGV1Xbd^v`(DfGm)P=X9IyK$SKY|kA}~+nXrSEC%BMs(FHB%lp(}z zg(a#GDzJMy#DfM8a7YXZzqMl>@r9wx-fdQ^_D6UZ)!sum_ih~q*^6Xe+kVw9>@0Bb z7Zl%oCTgdCz&xKR_Hf+>2a}PpybyT_FGhwXD3&yMS36W+a^fGp35}PLC{gHgWI)aL zFv_>1j_}aS!`WWpBg;{u>|H2<>N^f*x55C%Y5cE1M)g=bJP{fBc}lK&#tvk1ER?Gj z%UM*e)iAla1TD+YM#-+%xcXKUZg-jpO+_;NZr`#|xyEVIHwGE0qkJVZOhBv~s>LPe zb;GLYTrKTdZ<_`$?Vfd(gKbkUBve5%f;%VfLSY77P*P5NVrBIIzC{;U3|5Ho4Y7Tx1MvA39d)m@lVJ$mFY-r zw+T+0Ni1>7g5LwU4o#jH0c$;6>RZ7;k%x!lpR+E+GrRzpWkQ?vS z_rFcVXB{Dooqm?=TZAxnUUgY~cqq45l?265?oB89v$n!e6wdMiqOfaCc+n-O-TRQe zld5oHy$CECH~HrBzZTuF2N}&-&14YDU; z8$dFGJ0YCn=+3aO!%G7A+v>O8BHK*itdh$@xW$uL0*;dc3>oe><}n3t(@u0(qKWG`^z7FGuXvc_BO0!H;Gw}Q1mkgJv`j#`0Ye=e=;WP!zxrJ^ z3$xKgB&})b93H` z3(#`sx6sBIdqw3My;0Fn<80lMHLgNJ>fGGvpP<;he!%0g*TNL^F^I!+I4GIV>Id>7 z&GMByk8SVuTx-Y-=dB7Sk7MAOz9nAPw58MAkZ@k?6ayL~csLFyGN2Ki)=TJFpY)Mo z>E)3f=9S5PPC?nW#yYYL`_p`J`@c+Ph+gjHx#?rSRQl~}m$9kTYn#y97!z8ZP{pGDlWq1=09+`w1)=F8+) zl5zGH(KEINA#7krV50S<1`ngXxNNJ1b~J-i-wqqsOf7hpGMt6l`2d zNSSW9$nH7HXA}2OZWwCw&#YY4ZJqNlgFkQ!4+j?73Q!mOyn+(r+a^%g+1Km6`pPB> zPY=Dl`pRGHsZ+w%L)t8(lfyhWGm%jL92rVaVdVTs!R>-P06T_kS+5wuktkWECldbi zfxkKJ!ju1bR4nw>v}lxwrNI4^26PsaT4I`SBXZA$M%8+ydMq@8Sa_=;Wgf}Pq2c{+ZE z_(8iNL;FZFIz^Znc+zJ{(QtdZ0eu1Wa*aS~=a?E|B;?U~Sior?xF&D<~sfZg?&lWc7z@D!c8V{GD{&N_T#lJ@hn@6GWo^z1QS`I95X4sim zbOmxutU{|Di%`EFi&ly@S{vQ(j7`W4)%)!EXQJIoe_`ih-7wecGZ>Al^}rb=x?yiC zcQ9)EWk{!-g5>ELF7g6<@jQ<}GN%Vxad;5%124$ky9?SB=SnhX;6~KPpFm@CJd&Na z1GAikzE~Swgd7eHDCU0^(h+^p`@6=;ak4AMGGouY5ji8~I5E-ek2X9y7ft5ZAeNa~ z_4I>;%|}OB#!YA^I8it4g$%P}k+Ina8IXTM!t6Q3j~P?sG$H|TWA2uD&sX@J7tHH> z3^KNcAwe<$Q7;u{`8s&Q%Y!f$efC9$)h)ohDE2Oo_YtS%S5Zva?~u^@XIX5VgMWDO zLykiR@t!Dg=?-LQzFtsfjxFIHYh`vohR<_Wzm2eo;Jq7S4_F%AA{?(3jYyzg6&(xX zv^ZrO;81Hm0rd` z%zzNu_++G*2BALu1{wo1T*fv6*>=j} z0b%S-iH>z8b6PZ@z8=Ry*3)*I1?%f|8^BifEw+LIY*>h7#fp}^h7RU>$;G45*f|if zC0yew$92A3lh^w{#>x#r&wE3O;U9K)j8_)AQvZ8A0m;}y(1dOo3iZAnvz$%i(urDb3YB3-q2D!8xq=ki506nPvo>)dN4nuy)Sib>n{HTZ-r`uNyo4su z4;F;aG$3cml-%)VvAZTGulAZ8j6%lsI%ELPw>ri=@7<%apP>-G2a&w|hMixH-shsI zpM|!aXMb^B!+kf>d;*(nvn_<=2~OCi5P5<(xHhI6N=QgZNJvQd;vmHYCnO{!BqSsx zBz)nJjNpWXgoK2IgoK1I9Fh^7u&p650W|n>Ue1JsgoK2IgoLU{F~JGj1UzhyGJ*FY tqojEYB{v=3P8_2N2?+@a2??DP{|5*tZjN1bIBoy{002ovPDHLkV1g{C$5j9T literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-2-annotate.png b/Documentation/pictures/text-input-2-annotate.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0b96baaa12860cd3502ae7d2e30c6cf96bf873 GIT binary patch literal 31305 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

    @>0G&%)2KD~IvRx}|0GP~ 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 + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + \relative c'' { \key c \minor g( <ees c'>) <d f gis b>-. <ees g bes>-.} + Add articulations + Add -es for flat, -is for sharp + Enclose pitches in < > for chords + + + + + + + diff --git a/Documentation/pictures/text-input-2-output.png b/Documentation/pictures/text-input-2-output.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc2c752956a46d718cea9fd17fa6590d340b6f6 GIT binary patch literal 8826 zcmW++2RM~)8$b5S-p5GxijwT@*gJ&mKSdeINcPGe*+R(5o`sO?jO?AgN6D6%zT5X+ z7l*?+@B2Q_egD>d!nHM(2=S5l2n2#qMH%$~fk3+hKkMP5!}o~DOA~m&b5b^PK_K{; zufNcWm*?UUh+C&BC|SK%)4wx3OvqLKw3N6YmPk-2G|>(^CrnKKCy%2d#O7b!E#xWR z@C?}W?5kGP9wXIp-J>GzkR>JQ#6Za^C}3gAqGVB6^}8~1Wbv0*g*ARnqGH0b{U^jy zD)|i!#ha7*$3MrtaI*$+oQLPkz-pnGP=4%B?1l^U&Q`(DrmaPKjw{Wo4r;HAsV2 z#A&g_pu*MFb!?6vUgv;YZ8kJJ`^EdrIiMpaCx=BTrm*ogQqcRbn>RK)J3Bf$x^1h` zeb>>^@u9nmV0U|wZh?^FY~ju$TZGKR0DDJAA_4+(WqR?Kr3ne-8Jf~Bx8D|*T&#Uh zDJ(4HH~;GTAGOav3E#`pZ_#u=%Y(5I)|B1d-O6GaF&g`ahiWP+KWgl#5ln)DdgJ4! z_0DVYY-$h7O@7oj<;lu(+)9`E*3n_njE#v&FXAMlre@ch$o2R9xTK=uO?0&WQ#Vn1 zqBmVDP9hl#x=2A+^lH4-NNWC}!H+hBABJsF%%lhzCX)B_$Gu5B++}>J>JQ~Po(>He zbu+~l6&2YF(fJD9y({XzLmz(h?mvcIL#74l^aaZV(byHMdnowpz^AyC}IigkV%>W@i3$%+4;U za{D!L&t{;okt)8YzklxY3oA#*a^_$-d7)TWM@L6j7f!*WV#l+gYJv}<^xv;|z zgCp$ksxW~G+`IogxJF+BM2 z;lrPfiP(e-+^kFO(IOPha@z6X~m=sph9EUASOG_&rIHfCRy!ZdZ z>(BO&iHUC(cclET-le9BdK_5m>grO?)$zO+EAfOq**I)0?UBkF{Ku|I0d3RL?5ua6 zhbOXq>5JD1(cWXr!Awbne}=ew4%dqpFK`3juVG_j_v*dBGd?~Jr2q%~(AJzO<%68J zUHKLbo564PWoUd{f1<2W0O8*mNnKL72j6F=r;8iI|EsF0(KnrWKKr@q)&4S_up_6L zo~kN7f{BeyA;vEI*3X@}#>X?Eu5NBvZy91HCLa3v`CUye=@=W+b>(TQMnpzJr^68$ z8QHluJUK~BL{wW@>Ez~ST4{l%9u*m>yElRKl_@uC^4wqU1SBYKWd5fh6yWOaJ~=x2 zy{G4?g98>~d#Y+>v_NaKLP|<1BX{_&fIy(v9fbeY--~u)?)%C^@3UQEHJEy=1(H

    BnY?Vf-@ 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + HornNoten =\relative c { \time 2/4 R2*3 r4 f8 a cis4 f e d}FagottNoteb =\relative c { \clef bass r4 d,8 f gis4 g b bes a8 e f4 g d gis f} + Mehrtaktpauseeingeben + Noten in einer Variablespeichern + + + + diff --git a/Documentation/pictures/text-input-parts-both-annotate-es.png b/Documentation/pictures/text-input-parts-both-annotate-es.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b5be8ce80f962c843d7398821506e2a64a31f1 GIT binary patch literal 23841 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 XKbsiSzxp2H_(19F8tW7sv%mF!AsnM8 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-both-annotate-es.svg b/Documentation/pictures/text-input-parts-both-annotate-es.svg new file mode 100644 index 0000000000..d5ed81ca0c --- /dev/null +++ b/Documentation/pictures/text-input-parts-both-annotate-es.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + notasTrompa =\relative c { \time 2/4 R2*3 r4 f8 a cis4 f e d}notasFagot =\relative c { \clef bass r4 d,8 f gis4 g b bes a8 e f4 g d gis f} + Escribir un silencio multi-compás + Almacenar notas en una variable + + + + diff --git a/Documentation/pictures/text-input-parts-both-annotate-fr.png b/Documentation/pictures/text-input-parts-both-annotate-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..7af392fdd50b2aa8fab0a57a56390b03b77ce3da GIT binary patch literal 28383 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�V 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 MGJi=INZx<>UkyV+5C8xG literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-both-annotate-fr.svg b/Documentation/pictures/text-input-parts-both-annotate-fr.svg new file mode 100644 index 0000000000..b62be7ebe5 --- /dev/null +++ b/Documentation/pictures/text-input-parts-both-annotate-fr.svg @@ -0,0 +1,176 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + notesCor =\relative c { \time 2/4 R2*3 r4 f8 a cis4 f e d}notesBasson =\relative c { \clef bass r4 d,8 f gis4 g b bes a8 e f4 g d gis f} + Entrer des mesures à compter + Stocker des notes sous forme de variable + + + + diff --git a/Documentation/pictures/text-input-parts-both-annotate-hu.png b/Documentation/pictures/text-input-parts-both-annotate-hu.png new file mode 100644 index 0000000000000000000000000000000000000000..a734abaaae420f8264ac15675c112ff4c4c696eb GIT binary patch literal 33830 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + Kürt =\relative c { \time 2/4 R2*3 r4 f8 a cis4 f e d}Fagott =\relative c { \clef bass r4 d,8 f gis4 g b bes a8 e f4 g d gis f} + Többütemes szünet + Hangok eltárolása egy változóban + + + + diff --git a/Documentation/pictures/text-input-parts-both-annotate-it.png b/Documentation/pictures/text-input-parts-both-annotate-it.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8de6f8909644b9ba523f077dc8eaa62c8e5e60 GIT binary patch literal 40272 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 SxqUGVKtt#n!%OZsMEwsXJy}=) literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-both-annotate-it.svg b/Documentation/pictures/text-input-parts-both-annotate-it.svg new file mode 100644 index 0000000000..668aacdb7a --- /dev/null +++ b/Documentation/pictures/text-input-parts-both-annotate-it.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + hornNotes =\relative c { \time 2/4 R2*3 r4 f8 a cis4 f e d}bassoonNotes =\relative c { \clef bass r4 d,8 f gis4 g b bes a8 e f4 g d gis f} + Inserisci pause multiple + Metti le note in variabili + + + + diff --git a/Documentation/pictures/text-input-parts-both-annotate-nl.png b/Documentation/pictures/text-input-parts-both-annotate-nl.png new file mode 100644 index 0000000000000000000000000000000000000000..82e0fc00b15a572d92615ece4d0d41db50d63e25 GIT binary patch literal 39800 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-both-annotate.png b/Documentation/pictures/text-input-parts-both-annotate.png new file mode 100644 index 0000000000000000000000000000000000000000..47cb514d4356699d7e8186aea7e5810e0750fdee GIT binary patch literal 31507 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 z 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-both-annotate.svg b/Documentation/pictures/text-input-parts-both-annotate.svg new file mode 100644 index 0000000000..0a2bbc10e6 --- /dev/null +++ b/Documentation/pictures/text-input-parts-both-annotate.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + hornNotes =\relative c { \time 2/4 R2*3 r4 f8 a cis4 f e d}bassoonNotes =\relative c { \clef bass r4 d,8 f gis4 g b bes a8 e f4 g d gis f} + Enter multi-rest + Store notes in variable + + + + diff --git a/Documentation/pictures/text-input-parts-single-annotate-de.png b/Documentation/pictures/text-input-parts-single-annotate-de.png new file mode 100644 index 0000000000000000000000000000000000000000..66c683bbfddf12a0707da7cebffc53cc5fc2c4c3 GIT binary patch literal 23876 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 Q$8*5+rln!o4UZ@P2TfGRmjD0& literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-single-annotate-de.svg b/Documentation/pictures/text-input-parts-single-annotate-de.svg new file mode 100644 index 0000000000..74a308fe75 --- /dev/null +++ b/Documentation/pictures/text-input-parts-single-annotate-de.svg @@ -0,0 +1,177 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + { \set Score.skipBars = ##t \transpose f c' \HornNoten} + Mehrtaktpausenkomprimieren + Variablenwiederbenutzen + Transposition für F-Instrumen + + + + + diff --git a/Documentation/pictures/text-input-parts-single-annotate-es.png b/Documentation/pictures/text-input-parts-single-annotate-es.png new file mode 100644 index 0000000000000000000000000000000000000000..804a2d3a087910c4f654b8bb991d8d85bba0a701 GIT binary patch literal 16311 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

    Mu`mG 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 DJC@4M literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-single-annotate-es.svg b/Documentation/pictures/text-input-parts-single-annotate-es.svg new file mode 100644 index 0000000000..15b8702104 --- /dev/null +++ b/Documentation/pictures/text-input-parts-single-annotate-es.svg @@ -0,0 +1,163 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + { \set Score.skipBars = ##t \transpose f c' \notasTrompa} + Condensar silencios multi-compás + Reutilizar variable + Transportar para instrumento en Fa + + + + + diff --git a/Documentation/pictures/text-input-parts-single-annotate-fr.png b/Documentation/pictures/text-input-parts-single-annotate-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..1d1cf10b571f2cb03de44624d3c825ae8ed2bfb4 GIT binary patch literal 18721 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

    C^eSnDR{ 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-single-annotate-fr.svg b/Documentation/pictures/text-input-parts-single-annotate-fr.svg new file mode 100644 index 0000000000..ccd2402df6 --- /dev/null +++ b/Documentation/pictures/text-input-parts-single-annotate-fr.svg @@ -0,0 +1,165 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + { \set Score.skipBars = ##t \transpose f c' \notesCor} + Condenser les mesures à compter + Réutiliser une variable + Transposer pour un instrument en fa + + + + + diff --git a/Documentation/pictures/text-input-parts-single-annotate-hu.png b/Documentation/pictures/text-input-parts-single-annotate-hu.png new file mode 100644 index 0000000000000000000000000000000000000000..6608579a08972533149c525543b3e01ff58d38b0 GIT binary patch literal 30541 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-single-annotate-hu.svg b/Documentation/pictures/text-input-parts-single-annotate-hu.svg new file mode 100644 index 0000000000..b6189f4942 --- /dev/null +++ b/Documentation/pictures/text-input-parts-single-annotate-hu.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + { \set Score.skipBars = ##t \transpose f c' \Kürt} + Többütemes szünetek összevonása + Egy változó újrafelhasználása + Transzpozíció az F-kürt számára + + + + + diff --git a/Documentation/pictures/text-input-parts-single-annotate-it.png b/Documentation/pictures/text-input-parts-single-annotate-it.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec32414c9b1161f9455a847a0aaceb6072e696d GIT binary patch literal 32371 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + + { \set Score.skipBars = ##t \transpose f c' \hornNotes} + Condensa le pause multiple + Richiama la variabile + Trasponi per uno strumento in Fa + + + + + diff --git a/Documentation/pictures/text-input-parts-single-annotate-nl.png b/Documentation/pictures/text-input-parts-single-annotate-nl.png new file mode 100644 index 0000000000000000000000000000000000000000..650417083295e210076b5d7203dd0e66d1cfa323 GIT binary patch literal 38200 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-parts-single-annotate.png b/Documentation/pictures/text-input-parts-single-annotate.png new file mode 100644 index 0000000000000000000000000000000000000000..4220e770187d32f2cd779da377a0b9eb80ec659e GIT binary patch literal 21980 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 + + + + + + + + + + image/svg+xml + + + + + + + + + + { \set Score.skipBars = ##t \transpose f c' \hornNotes} + Condense multi-rests + Reuse variable + Transpose for F instrument + + + + + diff --git a/Documentation/pictures/text-input-parts-single-output.png b/Documentation/pictures/text-input-parts-single-output.png new file mode 100644 index 0000000000000000000000000000000000000000..c1bd22f0787536b0c9275c37bc2545b0ee747264 GIT binary patch literal 3447 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 Z156kp9U?L51{vKdqc&gy0@5-V6GjaL zhSVK?fA`+k{o{UKukEwXInPc!=Q+=LKkF}FyWcZSJNVZKtFT!A$}s18%ii-2~;x=H1=@`46*lj zCJG4&0l0a41UTCJIs<(CU2}I7?-CKE#%QT3n}p77<&%7%ADoW4Bw@5*46$2SBwY4> zAtBe^-Xh~BBO^1sMSG3=iFKTy?9R?k_^Q?==Fg)?CNsgue{MhOY;5EVTN3QF*`z5J89V8#GhIZ2K#PYktrr^il~dF7@BtsopBep#Hb1xj9_6miyr(p2hde9 zu5!71=}zbM)^ZlFurECGl|E@TK##kMRvc|jv0_7*U`p}7#gd^ImBO{P(#80C$n-=@ zXJDUq46eur3vf)1rEh?hya}Di>w(h1GbKEVWH>D`Twyc`IGMeK^s0X@*WjS>-oR2x z&+9lXA)H%%{<3xv+eHO|&1+6LEmKPp?-)E^20qbnY&(R9>f+N?1^$=I-&R$T!RWXS z!yR5KADu)VMrswg57YH{%~oAI2Qi9w$ki#q0XkmQCu!e2jX!A8RS6*yhEMeQ?uG}l zHuDP5P4Uoh{>{$*%{3zv%Pf2fXIjN5n8~+daD%rA<3%0xl1pad^+kp}ihdTnL(^rO zr^N;mPxNcR(6Y|6N(&3MB@M3_qvS$poEl=Bxn^3)b;&29{&|rFklCSaMuiJY!Y?^@#!wDg zF|C_}E_fs3k;K`N*5#hYcIlFtr`<4(w>!)CFcDla$Uxw~MTHHvr-`YZiDa(nL*{=l zz4|ONqXb5PEqH_kOHjwOoa?SAF%F9|@!s#;W$OmD?_60L3_Vg$@~j%Zfs;veX2fAK zD1TIt9;hxbCBGS#PI)@fkKxwa3vV>>-z3_QjNltUHLA&9bmJYb6cet&ETgkD?d+Y< zj^nviGh;>;CDzwdC;uL5Qdju&iA7Xr%OZDaqFQ;P(X=WSYPqWdTH>zqz^=9U-_@Gv zU2gL3T+kjtBJ5!r-C1bB@#nzXkn)ecuACPi2y6Nnw8g;hdUS3j0)G#jz7+Ww|BMde z^W&3~TO?U?+Kc(_@{Ii5&&v-p_aB152D|q#m4kbUN8my~S_mdnGHaNk%OT}jXjD7j zk~`r;HK=~}?oF(*;@)Pfs3Du-J5nbwh9Wfsqc`Z5-ZYb2?3w_}Nl9HY|(HPeOY{U}Pn{vBAgSEe^s81u8(+I}pcBzVN%GOYU^DqX`N_QIcrYv-dC+h_b) zA^WOC>g=`uVX0r;<61y5)k4~mpGTbO*RiAq{Mz)j+;aJ?W9!nhQQzVYP@b#n_FYyv zn8eBOs&U!}Wj5|8f9mv)#7ez9Y3Z8Xb_sj`N$je%U$CLb2pI=9vaBXVEDOc!>?7=) zEw^>7T%Y*e5Nr^nXC&|foxn4?Af`N?-fX|q=xp ztXvcb9o66dd%1o1Li>~%5%5D z))?g$yTK9)sCq+LTv)`&SxT{SXWRTz`&*AC2Zp5qKNK9qKU=6EKCtAQo}q0vi2zKR znitoK4D6kZ?%!RyQmj|=n zwc}faK461k_#oCoHe0ag@fnA2ocJdA^h#x;uG8v)$Pd0pp*T=#8y#mnzc(cR4Tx2>uUSKZSb)uBYy!TYk2@PMV-YXr#1tc66|BemZD}w&N zItjp3go-PUJqB?B$@-OYWmq5*cHW9g5iK~_pACUs3ERYo>;EVXf~h&{hT3U++w7Da zjk5vVJyy*k-eb6Si$+h(dVgvvuVXNWYv8s!z35XemG$*@ajUuMQ?K*z)txxH_nF)C zth}33QgfzNPJb#5`##K6W%|9q`yLdKhS`caMC~H$fRWI%u#0ZLV&O!P(x9~Gi@++Q z{@<3(Rrk9sqz)dPId5BDjTChqM^?Zxn#-zofC>5d`fF&&cu^Y-M3nT7q;*;R&=+6Y z_vU$hL47gp9L7u#BNB@60>?$8(nMFS_16lrjAp&Zg0(Nk#i9$uUfE*IKkh8QFV?s^ zaH%=L2A_WvlmD#Ue}(_a^0eCYH?x{1<4n+|(-zCUFKell#$H&)v20|pK1o`-RGurE zM=jCEv~DC7HOVh7zI8qf5ljxVxjK&t9H(o;XK3k3E11-=wW1Ez{%i~s$#}7?)X^Sx zAvb2F1Tfz}1#W!5FCgu`)ecB7jHWHM8cdSzEWB838t#foJ;V;KSu0s|{5ZT2d$Bk- zl$k-Vur8z!8%hmfL?c*FV=1MVijNa_k+~F%A8g)io|ECNxqV?XK6z9^o*Q&HTOfT_|K@Q){L`|8G4GKKBc4m-2H5e#b)z6y!idQ={G~P?v=E@?^ zPF94C9Ylaibry~{iKVQ^yBmEA{e1Dh#<$zfjt{Z#BLwv%DQ~kf8h+l(S?r7*la~+i zUe)Qi_~ZboIdFzEh|nug4i;57FT3NOdLJht-y_H8kVCpDDV+kkpC6g^3^piCYv^P# zha__PSpRITXF>cK8Oce)wl8uKVQCUbC`zsQ@O zAFnohvCQ_R3J!OiESt5=Ga@WqAZPot3~Tv;qTB@M0iWYkj@4DQNq_W{`8##Sg8?=@ zuG5k4WrT8e<3wmLZ?c(>cIhFleeO3^DD(7*+eIDs8@YK|HTc?t4Ytq%N`}eIs$w+4 z?Fpf=c!Zim6fcm^mNB*cjhwEv{uWm-joA>?DvlIf4mMyrI;6rW_yNXmAa7i4x1L|# zuP5xUxsy)UvD4vl%1lf~yjBO^F+jSst79j3M{aS_1}v9owRp7!@fP%BFwGub;y_k~ zkRxlmZVAPYViO+Utv<8`iTw^qwn{N#a|kps4f_2nBKj~Bptb{ei@(7m+aBkxYUgmj zLBnay(Jjs|Ef)gD#1+FVV1Y#xhPc3v+7hdpT+L}9iUehVZmXwZ1>dc>M@$gkRqf@E z(q0UDx$z9|w@rrqer>Z=WwiGT7QkYW$yV_{c8Zk)qh#N+(2)m<=cLgd{VZmEaLdcC z^u_q&*tp9M?|d)jw!5E4`X;BK^Bb0DTLBiG!G)1)i1fikpSV(d-h89$i&MpRe-?Z7#$o=AwZv+M4XOUO({ncn*!U15<4R3XWgrwS|k0A-MMX_4G`mL`*h zyndJV*$$8FGVLWdC5;tWOZ8!qt^g#&-a*n&7T4+@1@bO_>UWKx-3AA)rwh)DP}F$_ z665U;-B)Aoop?zagKDy3xq~*}W?7ts+|3epyeP=XSeq5^vx%r;_S~40E^Cm?jHf4K z_i&qUF>Frc6ILEj6cJmHA)H;!^ujE(Wme*MgGFt!MrI#{JDFovOLZcfVSY6kA1zKfu~a$Y!k~G|$$K#eo?2*8k2~K!nMsD}^>p zy?|gqGtr8%36IAk*8w((1I~z;U*~V>ARaNd?`MmbP)U2tu1=QaAi_oEZKEt32M*gX z$2;tn5+QZg>qBLs44nF3Dq5KRDA-%G-p_J@HyKNI%s@_SG_4=jhKtA{$#%->Du=0crBdMPxClPVb=Txy zD+Z;f?#Y3!hv{F|7G}-&?`n0W2ECUpqPTq}#_QkRtH1qP*%;puoG$J#!L6iPh0i2Q zU#sX%lNhY_D630*BV;XWYZ^~AXje&gM_%Q=YjD!x$)?f1!R^-{!!*PB?px^ldX(JV zvuQSOFxT>w!&%grd{(sF2tes=c()sfEPC+yW_P~J(#eBMI*>HPo9omF%FyOIcYDEt zQP)zLy~Elep;@8X_yJz9Il9*$*tOlvqqYiOS1r7;`wc7p>PHOhx{W5i$~$r{pu7nv z+@zYZ>H!|3O3T?wo}vM&#M~XOC>){Z+*z-z@f>VWRvL6sxXG%xcuSC|DGA}H*&wGM z#;=}WwObTdylGyl{eqK$oQab4m|g|PB2b*pk*R&8!V-0Ea6_f#y--X@G#7CX6|HO> zTZ7oBz+WBjJe2%-fbq2^S8&Q*|K*RxMkLe_HX)#U;++ttwHvscg_5{h=-E8Kf#DUC zxTb_HB%Aaa{m~=S??*JLhhFth`^kr`#Oh?h*5t(e#|NnWyoC=5{(%eD1I*weU#a5j zIL%D&ijK6roO3p@54@?|L*yq~AY^*1%J5Xb{EN6;RJuwPOKaG?8GovPiz_LR zBceJ+il{3N{f zL~n1cG_U1&LMGl9y{xs-v(hHoLwRUx`If>r$;Bl50?0-c1w~SuQE_-aWDE(}sP#Fs zrb=eEx02~pqnHnRq=%JTguHYtNG@72LrW?ILM}!+D4hZsVB{Cb*pCt7i8Ke<^Wgkq>>D_O%`lM)-HN65AaPs9< z;i0@m(R`Pi^1&!PbKt|xJ8b0~E8a@dt#mL_*wd)LnqLlfU!43mq)k}9^-9A_U)s)* z_*cX)JE!C{PqG>uN8?=I6!2U}T?Y*rM7tfX#F<2(3a%LU57-FCB9L5KfkSaZovVb> z|Injm;0cQeON0Ds5YyF2|HGDX03}}MmSa0`Qk&qFiX*-PvNllz;4@!nU&sGbR;E+H zS+Lf8YlrL#rVxA+FIBT4I;v6nduJY3gz4?5bp5;=L{1`7IO4qGe!-kjlQqoktG);j zHs$xeaTY!UpUs>YaqS8%O+zq8oAi2|&&AtNP>TI@d# zoOCmn@@_A)uYkhYcS>)mpGLnB$^`yj@=Zo&z@cPAb%yY;VgVREe)gFdi}x6+hJ7 zuDNq(lLc&$1xDJ$Z*{3P@$Rpx5fKS7nEIhYDrNjQse~od?_rld<@b!6J?mb1vVI?;cPD`Qr0Ah zAS!)oB3%Q!RP~05i0Ic-!$$^rYIzytSV{sFE#&1c>lKMJ>dnX~(M#V<6XVJfcUn3$ zrZU?3qK6eb@_av9E?XQEw&A|-08d>F8q^^bOyALXC0!h?5 zO?=J@ zLjcmTmIi@==JlB^^>+antCyM>=6jUxf&lcXrpX;apnqbm|8A??BCDm0o_y>uw1%xP*}1kAx=xSNMm;v zJ2L_t+`>$D4vn=(<|(s#Ujg@9_hS{2Hn2(mk#p#_j(_4!c(9wl-X;H7DyG+Jsh8B^ z%LCzVos--S^R-I~`57Ol6NH#CHRLkR;G+Pr6sJr@^gZTYv}?GO80Ug)T{S6I-=ugm_*AZ^Rqi&S_?j+joG55`B7cE9@;?77!z zW2smkeorBw8G2%L^om0Wz@V6|H-QHqW>Zu6BM5Cmhq;eE=@K6D_h>75&BGIguhF&5V#=9q6(s>oXb9E<2CQ$?DkJ@Lr{J91$Pn1knq6D#mz%6(`(S$cxcTV zyf2ffck)34Do4E|!)`?dG~MpmIkEY~Fw3Gr7pYZRbx@JfyUCrG+&P>+A>sgjs=(eC z?`A=x5BiNUagN?DVxBro8I-YFJ7(gR4F-!`D90O_|b5R z4s4Ym8pAB$KK?YEVAaiXQoqLTd^nE;7E9L5W8#qD)W3j9Zy4aV?R`eh1^0LbgI=dk& z5i%QGz_3;$7NMNAC^)k_@bO-)CbBb;$fIZ>`QRH{aXl5TvSzDZnYwSbv|l6-4?;ti zeH?{=-R$sSd9VQux}dGOYCD7mV&{C4dJpMRmVme3@~z>JwYKF<1hekoS&`HSE8*Q~ci+?iJ{@?nD6k{y*EGSrY6MavJ@XgDn{ z^2Ipsu0MkOo_MDy`pxwUF1?(jhwMx|dN$ygf1%B9iPZ27@Gh-h|8`3~sMbVXkRfmb z5dOnCy12%E4{#s20>c1iFLbl_H6p=CnrttsjfsKc%DfKA2i!KAxBY%koEo;UuisPb zY1luFg)TkMcHG;$m{JrOb4^U1(w1IyG(YYVW8|#=f;qZR%~{>)mx%z{1=2wJpl58^ z+eUm62Ci4mw;Q5B()<{bhqt@WM>b_}@_F6yw6XWUl;in?>7s1WPb;JO#TDE*z79$i z(L-KA&owBC8>KVr?n&TI)Hq`#FkV3(6=8{Rp>{iXJD*(>$te7{WOeED@;({G^s`*} zZllwpl}+6VP#*IH*zZ~*7X6c73zhu0GlPWST30PtPS*wy!Q?dm>}2I^CEyte3K!&iAsVc?&V(!|QyK!F?Q!Xx&0l_JtZ$vH0-s2}l`XSZRzifUt<&PWoIk3!Q+&&-HF-3yJq z{J96Z+41J(wF1V~e4*zN{ONn5?yZSzGj4W>k~4<#5N(8gG1M;oZe}){Wg3SW{F2&D ztjz1Uq^5Un!#Z>4VLA2%A=s=~)h#Pl=Y`&d(Sx!vO8QGH%Y0AInP?gVrn0z_d;2ad z;WsmbuB;nPHow)nB5%dlqSo;jLPs{{``4Z+y?=@8m>4zwj*&sDe*XBd^vN&PT05F%fZHH#qcR7wt>;TE|DF&JXyrFmY7W z)T(nY`5YRbNG%X>>d<{!AguWGj~)#~($Cm+rLg~<96irm+fymlyl8K6<+VV?nYT1^ zC{>#x>2dmF5~5FWdH~TQL}3kNo}QT+@)PtT`SkUU;~)4N6T`S*!0BuL%V$7$0AGK{j!Fxp^d^^BvR zJ>Wn`J;87~21j9FS9B56eM8Hno3wi7L^d7e6Z8e9Nnx?318d_g20`Y7JX7eicu}m$ zpOhOO`Pv*amhYHVbyKV9+)mXo%t7+mii5onHI=;!%krK zL0)OiL3Vo0_uf^w0@cHe#-VPMuWl42#-GbCafz2w^5WY{o7j(IItE%zP{GqAc~;I0 zLg>ZdC>>I}&wWw8Y|2E63j>EDON%(GJdNSXNr6$kb0k7QL?jrYv|yRqk1{qL>$CLv zY+4YDR~EJ_%1q|FxD`-$^B|j%5I_&NX*>* zC{C9>Bi@n$g2)Vt&J1dA{slq>lx|t@n7u?DNcrUqDF+lK1zwM=+QNQ->e-8Po$xw$ zn>9<8eFz>Y)1GCC(g<>EP|befyxn|WBJBLGi81>)?hZ`IjsLF{%f*|B7JO;hKytgdQxz_7jqm_XQc$7M$TvY`}HaBVeKl@;heRG`_ za#u{!-XZUUfy09;(U2RcMiYx&uUcJ(3QRL})Uwr-zt);zjB}wxGX8iyN-zAbLe1p+ ziY%^ZLFuNDHd3Haqf_XfCJRU6cp#y-qKn7%A`AkT(EH@L6Tm`>EtyEmGzO3}VNIOC z%%{WiP+EB5@2A(fXu0!}LyRKIeM6w#0J{UvCGhu|Rcn=w=dik0X9NK}JKu@~Y;foV z4?QyGe;Fd6r8+x@DJA>cYG`<^pUHi(3F62cpxPVPN$P-{&M}9~v^(0yupi&8Ochbp3%^-X zs4Gs{az8~gHL_jnr*ewjFoIU%*=Q26yIn>=8Or|hSHY0BPWO7~*1|pFR)fE7t>V{0&EPl1js4C-zAnaO#$g|X0dn7v zl)CUqX-{_aga59e{9n^^&S}udyIcshh-*IJ7ir57q?wA-Hr&c>tyRf*tVThw^Dl{) z)lQy6s6XR%ryW3P#fpQxo4-r%VGF)Hgu1^#dw}ARDydE01oz;OjE^w3m5!!4$_M-T zqFejqLKkEgb$doS=Xo?INpoA7G8sU2A^*?2C%hXje;=>C4U6F)a^#eXql)W|L&o)j zFR8_w4h0bRqteeWKCyRF-#4^s`GWq?2M$4-L*SQoTncX3J3o$EUsdQSs-IO_uX;M? zeuFi`kg!&mfq$LZp1k{Mug!e4utWC(smJm$9s23YHL$^SRGX48=cYsek;hAvu>mVh zpfOUUcq3mgUr0A9PGm7Z#)i|d#OP7=NMnf+az6DUR%cv`{m?TIz*X>{4Te6oPideKz((7 z*5nm4v@ghhWTwWq=27&5{_ALN9!$fs2p$k>z-k?;Ud1@8T{Flka`Ue?UC-D?ivl`x%4|9Y#m8?asbj&hDrD z+S?-~s{(>%;z#_1I_=lwpc8F|irP2mDbvnh>o_sA$16lcR)8l?>5W8`Q z>q8|U#wSnoAARbps0&bI{1%@~8`x#nG1!w(iXVysOi!Nzt*tY3^}`cJ4of*>vmZS! z86;>2@q@ziYW7L^n2pG*3z;8}kEIA#~|oY-=liT{JuD5j`FS> zCI`A3;@tv`w}p0fsmK_|Ait0j7BTx&DO#4S9nSTX__lXWGWb`LUK;M#mgXJf@e65v zu<~}5Sz=+zz-yvLkmg_a70* zCr^1jkhqDOw4FX-M_ng)pI_z)C@D(r8EKWBl#R?EK7b9joGDoJAnbGbSQrZmgJPnT zgb;#4h)r6CNO1C0d>{<1(4k%M>5mYs{F9_ucP2tXmX4Edn1DyGY`{EzAlm8eq-^++ zs~AMZ z|HOj_nt6bSV8H(Af$8(6vn5Le`rxCJ=@QrAT1iZOJh<6#x>jUfsgmu$vfNq`E`vp% zS(um6Im!_ivhBVVQB^#%J33C-x(o+0IcNNAP8-ibc=OhMjUc^p&!+^TCUrWJO-zMe zH_Q@8&c)E?RcnZxYw)$W#us4K=Uv(YSs!t?hbav2uLA}>e|_I?G>6J6=`U#3OkoC! zmJyv>KKdU{C!WwUE(u?Qu|Q50YGl9JFE^Idyiu7I=n5eq$x%6McjE*YK=iWhhSvU- z2mWQhtCT$fWTrLZ0>DIsT*c2OsfsEnOWXyM$0V0dNtL94!uii#Yx&d!?RV7nE3p zPPp6dkC9CC=g(1^*)$O?6bW)!*`|2kv539<4#6msmX?+Xsys;~zazrjhh*{AhAf{4 z7A(qVScLxly5Sc&iZB4kRy9|;n0VPtm0;2e>ab&S4|oG@Y%sxk=Ce5=2*u*y>^b$q ziFYF&qjo~QhLwK&jz7i>2aZBo|K+k=MI2=4=HBL`yKIr+G+N4C-!kte{>_#+naJSSDqj^i}qX?abmV149lO0CL& z{qV#a#JaI3GV)q6C+t`|S@rx*Qj;+hvMhYjQnzP9tO-c*6l;%&YX=?Z0mSJ${# zR~4LEob17$dMIl*WV9v4S{_4!)L-$C@Gx>Fg*CLSdf1$Nhrgxa+?j6PxgO%va0|Du zC*djS9$dpBvg&>BUuseM9hmFpMWxG`R{B@H5rOkVWSy)iA=;62s{!3C-tyd~HL{s) za>CT!JJeg{7sGfSD~9>HEad}qf)(VZ4~wT*mzVv|ZN}y1pTFCi%E#S3MT-qD)z@3P zvyLSlO&Gh#Z62rOt_J&!5^oDo4m2OS}AdW+jo{XiPNi=x#IV> z%UfjC^OfMYKOfE2+4sh*he5xXx*H9*;(sFx&~no=a@ZJ)ftQEZ6W4h^vU&+NOIumv zSz_nCzs8ZMC-*-}%qq6J`~Kzw$vJ&bkDIPY1xduuzv=_WFCjTWHeK&)OR@XL;x_yu z*;l#1TtJ){kS%4_-aYpA@{Z0k3Fq5O3O`#sN9jC3kspq2#~(J`8Em@o;4lA=iHSf> z<3VN$N`-YeveLoTa21|9)Zvr%Wde3?J*SX@?HL;VXM zQQgeP`sYB$;YT`ooz)p0o4q}~!X&9+3S1lje`_RQQ2q zYYIzo%}WX2YBs2QUy0w-tnod5v7;BjUYe#+>lfA^!!UZvUWu=X0yS^TfwqApMOOz(gs?$aNL`sHsdQ!EB(}ec73GvxAFe%pzXESx z{uou)0B~2UCiTF!TgN{WS(krZxteH9JR$w?M`F$&-0cUYS#`KgPco=_q(eY8`6{t}sfnsAH+>n!@h0s*V=t)OeW- zOhI43Vy}01qn!0g8S^xku6wf^wPL)LT7z_EguIgI1L0prc4PmxN^aHI53Fa)=GK-y z`}j;gbNW-zvwxbAt{zoM}yT^O&{fPwKtBsd1LvGsWm}uX^8~%+Z)ug4Kk-a^BnA307 zG)wFa1i^M+^&}6Q>C3=>h^=-2lP?h8BTY9U3kn6xioW@ z)yp4syp(^(xYV^tHW`Pimt4Ck0Gj4craV}}*T0L=K+@dGEiceX-Z(+kL-8 zv>ku(vJ(^Pdel1c8)ub=(TGG&`4{w!h}H>xt6BKpJ3zxnZDl<|y6jbKL}wgT@~zb` zw$iRTVljYfi&xLI43UR{zfu+RQfF(6Or@BylQg~|1tRJT+bbWOc8A2Qn5;9DKhu!D zJlzgnsgvViN52h6p19ghd;32;W_!X%w%O&PYyg8VCT>1t`B8B{iz`Z|@Yv(@UM^9! zafYwAV31W3)^L|j$>+bdO75FoZlZFjl`-)G``7h@{}?@|jiclJr>!E-8Ho-r+M0tK z_^QGj5&g12a0y52@eKbj~ZsnV?JUKtMVgCmNmmq zM}-aHOhI|nndL?+HA@T7asZ|zQGfRiMXvO!LSJ#K=LU7gjx{B?rL5*B{%l}!)P(Zi z9+s4PRj5Fkngk>+76H18YRT1{)V{v8^sF~C;P|>=^6Kp#MJ@MKf3+tzwB1>U{`AZo zQ+>vie{2?K*jj3DmVGqx9|7?5B3W}*!b3U#9v++RZrz}quUP!Ydry&ac?>8=e$5|r zgYqi^K-&lGb3bq&^lnPy7Lpp-V_64A{5YroS`QCMW+O-Xq`WeFmq$hk=8b~2;?P>A z!opPL`kG !Syg!$5Oz-dw3|eR#pVAA;NUZ_K});0FLsx4tO&oo=Pv_6=3X79{sD zy4uv09<%nAO$9|dR>$^dYlZDOVwk8Fz~@c;%YJ|@#7PfYCFrqc&RB<+Q)!;-9z@7d z{}jankoNsHVv3C&Q+EgYAYnh!Aa#mKbcPx?@;v3{6IbwhTS`Ji_>UM>^Gu`m?7$mL1~+?Iz_bIt-td>a70bU9M%OE7|z);D?|) zk7|~X_t%w(;vNi(q@$hUG+VPvf0SPW6=~bSP`7WK823Mv$p%g~Lzk3YV$9=5J{T&_ z?c{5US|mMMF??$Hz92j-z$86?&v!qLUr zA3=@oUO5(=SXI8t?S>FyTa^B2Q{uV|d3<&+cR&h2(BF7f2+tbW6>kvyiUbzVzrq+V z)S-rA^tNxbv}sf0BjO$szOtXFAtQ_s-}_WzkCg{D)|}*qxso+k?J=Z%9}y>;QHSGer42 z$d9KDrKbatzrztUkq<=FK1WJ>%@>sW0UpIIGXRos&As((Se@*kaJpuH2OEtUn>W8H zaK!fgu>oDaI}98#BPW`nasVnS3^RRzZ55MDq5n0mfPU8pg#6bBI7%ElE}2IqMnFA; z#v|@Xb?HX^!c7`ZYKZXhuew_;(dsQH#zzN#-STv}i^v+3kHRbx>$`#D%1MXCDq&2* zr((*bWp@m}l`3k533gni;p7^&6Qy)Jg4W)2S2UUX>L7Jd3T}6d)P9?x?iT64rg&<+ z-C=e5vkU^g@E|Tgtc_4}ma_iP1Bp=k;386AB2UBHcg8ue)}nUwB2NhI5!5EFTw4zC zwh+QvWh7S&wZ!ls!2>lRp^VARml& zkq^5F2}k5NKV#U5Dsgh;1Fj<) z32HmKWNHkpTGL_p(ES>~;$X95IrU(k&JGOcHNY-{Kj^H>~ zqV+jg&hCrw&28%F5k-2w?hErAKSJ94Tts6ez}e`?;p_k9)y3)4-qe2C#LZb(NhSb% zlxYePpv3x@?o*ig5+)|H7ET4x^RiCK7P&V&?_C}K5sV+F;de|oC(mHG-I1(m z9nJxzsAfdj=BZ?$UiL_s7wb-E4BmB~Ux#<-t(i-}fmFl0)6pku3Z^;;f%?X2w9hY6 z6ocD&weWFf>3%>_E!5jK zxOEHnH`hIIkc9l`OK2A@jtM7gs6Ag+D0can$+rgs?KS)J;12LjuB==f739reqldt} zuc!`yR9Q;(!@4MfLbE!VA6V_wt;0UH@hL+uNXy{4Cc=TnIZOx3V)gAt&hQP~O8e(f zZxN2MF|DKU`Yo?NcFRgz!HN%n(+5)gO<;1-qw_$>wYW&6egEC zSu;UDT}(<)ync2Nd9wTrGc%F73?V{5KxMYrXj-_{Y%Z0 zTTHkx<6ZI$49v!)U$r8%dz12X=SBB*4wO`X;nsEG>RUL%G&WkxAo94Pf}s>azrc)= z@)?%effh+^6M(%-Xj0(*Sf2LmoU_Vt%jjE~HbI)t_?`Z;d!`;%qj?{)1iz2w3$_{- zX_FNzLv9XqS*)Ns+S6cbc#JzDItBg6=BV8Y zUQhNERAbuZ#?kky{meQW6Zw7hgXvDmt_@sAXz{bNHLN@*HnI6F9%c>-4fYC(s`Ewl zO`2CoAKo-^3bix4q^t}?1tZnh2;}n!Q0t8#yTL8tJnFO`)^Cq z5%SE#mNc!<_n-F>8GC0fb^gfUiInkd-gk+ACgxI-rP(ZAJzoqE@cDEN`)4QR%um1F(S3B z(Z3nOm~joSmXO@F;jPC`hhFd?c+#mMZZmpP>Uj^pmFTxBwA6`v$V-LKyqFJ8 zKhlQ=xmBh$os^EY$Z=$Dw23|h;a;(V>W()jq%(R=S;DPnY$zI}a)xul8LEe`=+6N+p_c$8+RY0K8%RjMe z)x!A%_h!j$l90R3Xnvqn=@wbGf|*IkhYf2 z-TLfx=$OCTIf4QgM~7SS>0d$d=Q)5(A3--wNQ`-=WU69B?~9rWMX#K_N@}yObXO>; zT$LB#=Vu|fqJnCEwnIIEMeXfL^V0iKZ)$$X4P}Yi9Wt}MeTbeDCfNDn_1^dA4BU3Z zYtO{Qi4#c8tBm8zQKeE4GU@qj_~vl zCl+n5iZC0toyq4A0yp?lwy;lKp6y?^5jnA;?AzW=_LuAA4;o}^5$5#+P`N%yFbJS| zSYRw>A?m?1-&H)AkLyl>GH9EL3z9EvsenW@^NKs(I$@J zlw!wG=|rf$z2D;1c^YpTd~2eEyDd_!5MgDLN9 zy_>RRCP1Tjd9(E}n z$xU(ZS?Dp}`j$UW#_9R@=%9}sfG)@SX6oLNBE3{I(;nO^z3n8PANU@vk%v_iB7mj+ zH6@}pPE_#SJIy;a$NbMfTD^?d`E{tA42M>w-SBPYd$E>PK$qtG{bQocVz_NuhJ;NW zBE`HgQ14@nqb&gQ>`Ba?68Ee5W)ScVqraHPl2jdjP^eaLBmRdCPj9)?2 z-5nAuASDgbrLc4?-MMtLZ@u7C`aK2ySxrQ5tn+l`BPRuqkd$o zLg*k02j~Ie^*nuTsHU6zynaG=AYD&ju)p%)#$YRB`R62hmH}Vsa!K7!TL6CZ_>c_! zKJ-=MdXqT+FtUl9o!Z#O^8qc>*V}D$=@($3W?SRpA||Lk|2co-DBXPK`8jKEgg10< zIP|Hr6;-y4C;5rL`oI@LNEJzR?Lo6Em4&0mqeIVX;m*)|(efBE!(awy3tTVq(kYHm-R} zSKay_iVnvi3yCHly%B_*Pn{G}{bSr@0~!qQW$qXkm2sMs%D$s5(Z+ukV;JDpiF;OS zZp6BGRd~4EsKLvYP%XAv0!nk+xu$X~&muUC6m^%NW~5Q~A1?X^@aRa$V?_4t6CPe#*8s z!ss=&Ar#~Bmj5GD$e*E1zn-6h=)|wKUlsNnMN&4idI#ymjdd0+N>iXFSr7aP0Dyaps@M0*{J)>Bo24Z57>q-qA; zU+}39(KRpU&DC&B=Fd&0mlZ{d2iV2t`-j*vzI1TPE#!9abXBRpiyp3y=`u7v@;elIA!X8c?9m1 zVT{JWPY5D^VCU(ux1W`a8%=ZS)&5|8_fEM!C&qTK`KMFJ2>=MAaDf)G@{OmV15AJC z%5C>F)O*Xkz(*~I4ytgCg3aP7R&4ng{>Yj+crUlz{L-NI4#99t4RMT;V-@p*NhXGv z`pu_C-}znACguqm4M#P>Mf45@!-bJ%pMpb(ZBmKBu!n!l?TeoqQVzH9N5=kH2{w#R zNvLBQ)hj{`I&bWCY9y6-jUz&r3}CTq@%k|~>9pK5J)g_`Z5?Q~25fMZx2T*iGkpUn zCRza_NLtC>ncFp(jvKueL5luhKU;h48s^sZ5jPJ}2n`DaEux$4_$xRNz25R(CB}NS z&?MYo5#+X~>7*knd6}t!>%~XNX2kLfR({%K$+CqK|1J^-=Uk^E_-W~_ef{bzmZ?Dk zV2&K0IbH}6XZLTr&sjNAuBDqx*-$u8E*&eC_sk+c-1oj7R1L9${I+6wh}(`;t*~m< zD0}pk2b)~mKwFT1-JKonuuYZGVn(m?NwK$frlDy!U2wsUt{6?+t+u`Hs5a~T$@PNB zE6YDawzvXbrd@9N75&^^Smi!u(G>^$p!U%e)MD51{s%17-1A}u$}HEny+BWn%Csd- z2_TSw&;pe)5)cZkCbhQrINf#&h;IAfPLuq8DCUjiHHYTUIH6n)$$^npg`p2-t$xwX z8JRr7HL3_Sz6!@;>yglDl^NbYhHdB3WuzzjD6F6Zruv$L41YdpcH7yJE{hRU+GRYELVs!gipoy0(K3P_2!hVfsR@G_*kY&H z(+C$sG4blPiXN<*aDp`Cu{Fz^Pt%zA%Ir4i;Z0HIuaV@ws(+eoS2$6%bO3XbVuEg- zKNhbg6usfFwlvjY{ui;$<_Tb#O#3tKuXFjPY4FgjuDfVUcxxt8eAwfvZ=;Tw4fKji zuKRM5jGG7pF?-fgFv30IGwtoJjp*-^yks`Uf9YzNoIU$Z#yh#f1aww9DFU+Xb`}!{ zD=W}lc<29(t#NbUxUvpV-`s7&_xNXxeL^`rTqWuo73Co4cefH!V{rVjDASPJFn9}q z&E5-F_o_&U5@D0YY$Op;q?N{yMQ#laiL|~@C;;`$z5toXDvFuofi9-Ker!A6PcdTo99c8wU5 z_FWp zmwrh@ZD@_M+cy-uU+L%jW!IaiVKAEkDRRJgkSJSy-HpuL?O#w@X6-oruBZ@40=a$& zpqtIqqlSwl39`EuIbSOO5b_pG6a8*utAi&=>1#59Jor7I zcBCQrrK4@w%WO#(n?<4G-r;&4t*0T2Ps4C}$pE;LAsZRyZBIOl1bmj`w*|Grf}u|n zbb9f#dp^1j-5{d?Z-)mb1UP}+)oM6hYFDm-+?ON)wwf-377ku5f!|wi0ayk=oB@C= z0dm!kIZJ^Q;h5{=@}ZMSckmZ+$r-eC2*-xa+`g_N{M`Qt{x#!YbBW0(8W9bOU$XVo z?-UkZalSDMbAA6Tmq#tRE4YZU@pHr8u5Dk$ZFsFwt_mH~+!61$$ zWwtbl(v8ERRDl=D=-uSxDW8P)pB=x~6rLxiDrJ`W3uW;=1#=9ZOgMSiUcRs$+bG57 zKEN^r7?&Rqz5m4{0+jdY{=e8lC?oHGjsXt=b&nXDkR$CEP+PMX+}Ydj*So(0W`3ae za260brDfV(oOQ_m0{xW0Oa#o~6>qM5aB&_oF?~WZ{Cu>*#Lo&pH4%B}3J}+OPsZi# z&RM?zUcdhpKoU+s3n`2r{sOOy;E5y;-qyg-Tz?`pyZ;v?s26aj3N7UPU$I{JX$&1m z2mb7#7BChLklU}r@_SrAw85kQYU8U1gy2D}pPbpcNvi*TngRJKdu;laOf#EGeFM{gjQ^5H3 z{X|oJ+HyGPA-3|N<|x!k&_%Q=cIF)iL;uR3hq*jhRe;}vH3Rtl>k*ia+uzI?`w5!A zj~>zG5`$)dRq%^|S#~^n^d35k`~cK@pv8xpxYTjAgZq9tqcmkTa+gdy4a^UZflq_J zr4%@pwy?&LxYO$Ocj<6S={~5=oGbg(tjHb_XXjwSCNq6Uae4Xi!``!;^@L>kNd;@x z)h+Lfq|j)hP8`zlYr_wqJcq=?fBDOxTW4KX%hf8;AvQ*XDM3W^*gaBR0{L5wIr44d zZ4zzu%{HBoy8UqsR1+e$61BF*)wry=^|^cqV4@7duo81h;?igAhEbGjF@dcb};w*`;|%9>W100tMJ1eUCtIyZl~>9N^~H7_kTV0ASXDM zJ4)?;rrM>%!SkwpCr0g=K|-JD?E-#@roM!p|F=&P)t=WWw=m~Ayvn-#HXFh7<3K%6 zArB#4-<=qxmNk_QcX2;>RX&fX_W>P_cn(D0m2Hw{^emflozjDvx7zF#4{AHNmp)d{ zVs%u>SK&fx##G26Lk-QV?PnhMc$Dk?b+M+DUZzI1GqA9eUbf~EZaA^4@hEeOoRx-b z@FUfkMqnH;BZJFRS3>gdfkNk%^|+stUEHa^eV<2U55 zIg;xB&L0_teJ(>PngM9{9)@;H^-tN`BGRMwP40Xw(ODms+O-<#Y_D>K|7HliP;Jt& zt=`VaFV1csQ=>)I$9%1UfV9q>)>f}1Fy!2iKg;&VrAUtkSUaX+Np?69R%aCdC138h zF_s~i7_+IP?yy`BW~m$6{IT?;#plEd_hkxJNsA$3w}8cUKO*3OBXZXhe4uIK*y4zgm`22hsTPkX>3`U47;NkZ-AW z%Z*{c_uwhjsMD=g_33$@$D33F@4S={gXxCh)Cc*z*tv%{I#$LOeLJTJS9g8x!f9Nz zz*?oih09CY=-U@sXHKn)VEm6Ps|X-#dx1Dwt_QnVm$g{+*e;BIhrfCx7WEhAe!pvI zblZ5LWo8S?mSk_|W>?jE-ar&;{?v=US_N=JYp#vA&w$BP588+i|rj$hE( z+=2?#OAbPn=MucXuM4mOq3^|!q*cx?3JJdZHm$HwfTxHn<5J^ieuGLudxCPDRVVk+>$5vgY*X!D3wHc8z^H-wJBN@G1ghboFTt$APqi|nP zsv&EAGs|Z2T-Usu3y8pRM$lFj%kDGYsejz!gj3{l)<3dHK^||D*-a4Qyzw%qFd1kh zW$RU!V#}a!ZI~~X=$p&gu(2Quu3Mu$nmW-Z(zlp-)w3rU4tvH6siKTD_d6@k)dk#9 z5Su_on9GG3gTd8nN1U0 z&J~pY6b~meaPBkk<%eZKkLZMN?lHoA(ZNOQMKL|OJ%3;eS_QFO=BpTg{e|le+v{e2L@@3>@MW4&Xz02n z3L*~;whWzozfnpyna|v|_QZi-sCqLg(MKg$1yvPl9;V2^k;Z68Q>y{Oz0~>5L%7YhQYacjXkY zwKo;`u}{1qjUgk(Z*B1zY9mDnDb!n0 zGqBC3G6JVHCC^)hQLc(x*{vsLAh!`h6gcWN5(@NzOJC{^I=brlil;icAJYwJY>b^7 z)n_cMm1532kOlg!z&j<+uM9aR4w+)w)dpS?i+K$59I}n^a=9tszN*(RITHb8+V%Mo zXOTs5ce^iHEAF-}D)txE{c_Ry#|VI2Z?R{;7~1f5d?10bg(xA)x<(Wh5n4kd_`erT zZHFm|s3?DUHf{s`z_JRYSL8Em=z$f2NJf6UrHB3)KnoyT0$lG zzh6*y4$)9WBX!3^ky1+hy@n!NQZ+uJN}gA_vAk$Ck{lPt>%gG;5% ziXY=C=PeRhn{PybaP*Ska2cdezJQ<+cG=%4kgd~h-h)ur8v~b2(10NIfpo5PULwkR ztJ3GLLp_SS*NAB) zsrs^3I}vY0fx%xiM8~U3^}s3shYSWG#_-tpzK8A^PV7rv%!QqKMH6`T#6o&c%)3&; zy+RYLejc;%Jse8Vc4Q{*j*uK-SXcNvuvx4I?%DALyNi<TJigk(Z+CEyw)Vc&st>HJBJ=*Z*hr; zSVb8GIpWnQg#h+L0YKG2{ZVTb*kUrG6dS1bbsH$QGVr!&`%#!GSk_ZtRsmM=zRMo) z5&*IeKKh;7tUCG_w-G7AP$p_n)A{USQvw>7xF%e(dfezoXkmeDFtVY>e!w^{VBC|| z^RRi@rM2dA$!Gpt{Ggnl+$)| zO?K8<9a53xp+|u@)WiQoe?3kRgRoY3;72~47hx*i(kcdy8DS^6Ut?$by$n6-9el&& z+yqv>0*Or!k7<;lR-wNx43o3CSlGL^Rz#i1i-RLVpamKgrgbOUl-Dd}qKr|Um+i4Q zKqg8k>Zej->VzypxG)}s377glDx>i&g8*>S@^iJW%DG)VyQbzd_*`0j_AJBb(&eu9 zl9V?!%i@fJZ)sZ?{FB@3T-h8pT4*?J(y(e~{-+5;iAw}oS!O?ZQ6g!vW$0q{ecE@j z?A5m|e)kS=o?ZK>bWgVA5X6dO(b3Q!&NzL5y?E)koteh&6tL8Q7=;ZY3lY52FSC4c z1f-RWESFFV4=$+!r*s?c=*&mb^rWZT@}k1srbzc-V%8LaXKtDg(Q%K$59mt#(6wm8&_*c~;Q&^?C%4Qmmo>ixO zghznZdb|-*sQ8+GjHD+RdE7Q}%9f@N#hlVkMZ9rS&=EuwYd6QQ)$YPOr>PF_oORaP zgpFl_Q6JRAK!C(Fq`!Ouo9wa#zLFFpVOQ&JSY4MPtrJ?yHLpX@ zWZZ5kIpVG}@~u(Jb0jbrfNcnX5;x%Ef$NxgKJ!%FO_ZpEcn(u1kvO8ZNi0Tpnwc6$ ztEOE&gee_TLx-GHOR(#8t_pPvcD8vD2jk}2fIVgZXx_^OGefs|c1s1_cr!*xi`Gy@ ziT}p74ChtQ_jBxzAt8MA0#i>sQ=g&WmC(4$tu*J`kf~zT#t_m|d@{Dc=?u&1c&(+t z^)n6<2szc?8J$dm`pqB$>J(yPrb0)_y{#olX7)wvXATy=cDTzphy3sJ|4m*D?v@$` zdmpB9M&WZTnP(k7R)^m9zSy5Laio}@=as4>Rt9m{ze;k^3?5v9PJyC(&neZGSNfLj<1_>CjH-r z6F#WgpSVP&!o`9C%j>xL9NeL(lo}+O%@x18^2tWi_kk|am_YecvG%KonndwY#m10y5Tor!&20>!@(v zO;4|W40U|hp3Vt6oi>hp$0t}2ZeZq%m2Ev?GtsZ@xgW10+GTYAD2Q3y0-K zH>>SDe%R-wND6#J`U^y#2*PyYW%exlum>hnU4NrNA0Xb_kMvMqcThMG{X#l_sPZ*B zojy3B*rieiPi6ZV&6sN|mXPYVJET4?;P7$jQiA1;J$>L~x`-h zakXYX%`S5te(@uPNLCIj*<(+P=~reV>CYY@Op8sk*oHj6AX4f2@at0&ND8HI@RZY3 zoiH08pzuG+%tprTYZC5Uu?d@~dJ;jZ#&zbT8H;(o$Ko2eY$n$^uu( z2_4*X5quY}(z!`#-?=xrx}RzKR>jqI1FD zHvw~t&uQq{W-r@084$dg9rNWVw289kRqgJ~eCE?K^+|o&RaY_zoQFO4JrX8G2O6LS zrN07UGPAqmqek{m?!HVly!Q?{5FE|i}&=kg7V>lk79h0abXp= z*$G`w6pWZ0(9OCZS3PoR`=0%kDeX%KFVvvND`StHtidnxX}Lmj@rPl~6!pqDp`Ve= zWE(4H=S}CU`y!3S`or@`Q7(mvq+o-nze;o8+_H<)A$C)Cww|QM-Yc}4-VapiOad@` zO}GI2mNS3Zs8rh@>vQVu}AxUw#CY z29HUBvHvA%2M8uN5~fE7+I#SAd?3lut}P}!$m)NP6p+3Qe%chKBKmM}i-Yefda!)L z`rlLLa;e1@sqo>F;YWvczh|U-#ikX<2@UFuxZZ~F+^^Q5R$ityXudXDRQ~gQnhZYrM#I>=_F}r+iNb zij)F-0;KnKtGsCwIzZdP^wNU=sOiszX+Liovspg3ZNK_FG`C3hwv(r{jeekRzsvtK za=l0dG)4zS$O>2+nN#C!;c==}Jr#r3$U&{1LYW0G77^bLI$Z!>2w189^G|%C{6#%1 zp65i7Qm*^mm=%GNTHjLv#4Ibk1{VPNKLe28CxPoDaOX_Zbpfsn^nCmg+x$SA}I&} z8y!MORB*=qLF#xoZ?xsksd!j5yGwer%2Qz zpLtz?|8)1BF-jLMbt?6(^dnYUkD&YCUWpvXaXW6>=1s4JO9MPDx~;R|<(gI5oAwvN zU2lBCVXN26yu{`0Ebg(yPEAn3i(_WXm3rT!@}_gC9yh&TE?(AIHC*kSBX*h9&XL^K zgB*E)%q2Y?kTdo`mEb}v}x3ePCYq9>TzJnMS zVjmR0HUANr+D{gavUBufWP*40R1GIqSPcI>9kgn^SlAmpiNpq(VP-UpYztX`srtKb zCpm8f2vhUCjr%j>G1n$-9!}O-oXxSQ7mEA`Z}I1jNJ%JpQx95qgv{@njHEB`%%cH8 zC%tD1g41pero0g_YpuDJQ5Il=Eq~1PIu|YPS-aG0HBR26M*glbQ1oZM@?Y})bKd=X zly|5-Ip50gIU>9aMJvUz!b$3rAo)4xdjT}@VPc4%6u9XfSQ*F2v!zJAwY(7N%$N=^ zDF?kj6Lj4%C5N83AGq`iTGp!MlenDh1@Bc?{>(4_jpYV{1`R8!+>Y=7-LDygtbU)6 zZ6HfHR?o$SROjzavlc&{ze~vNiN9JbrDpJ0k(3Nk(zdvJ~kD}|6pG(n$tsmbWkv~&c zcQC6s%Gg+JYv+CHcTdKDggfUnfZeKyH+Gc1G}d&GkP)@M-ck-rShgTGpb{;lt^m%= z@_C;wClG^c zG#N7X9OzXRh6ZlL=O(zLt8W>xhY+l(Lvv}J3wLKb!b?LP@YK9fWF5*}LBX%GnPkidFM1i#W=p z{mr}T*ascsEewDt&`DeC#4>W~TaGxpGVNwH>-Ghs@BEi;B$Osj_wl^o@YuhcY3;QY zZ}+}o&bve=`{E2Y!ecbbRAT*2>soXz3~5o%73~D9-(8cd^fdFjM_YOYGi5AD0gjfK z_rpR_(u&3(4Tg<)c0D;F0nshondC*i>rS%83Mc5chwMS`VojOi;o2&fQn+Y%)~ht8 z%VB>Mc5+zN@cgR2AR>0Inja7pET^XzCWVLm$|G^^u?CG@%CG8eJ>IxBz0fMfAmNO! zYCc`*%xPbIQ8O*g2-+k`)y|4O@N<0gJUYw40A$|*Bv07HP}PDx4gU5D=0C zx8WjKfrW*vY|^f6hV)xMaGxV_inm%9q&iM8+rXvYQyZAD>JTHwc7t zg4)B8>!C zgGO72n!SiVKm*%uC=)*SAc6n_*-Sq`ZR!_N}Gm9%ai} zh>$*Fb!`@^7jEOW+Yy5N*!1WPGnFcnk_D-JXRDkd;z|L^j00r`uK8)_4s8>q_UX_9 zH)QlV8OARqxW6qGyZ^q&-LF&bC?BU`@gpJ@+iS;Xdx`fY`5-t6$Jv>w+r^Wp+d< zg5aYJ34I>!P(*|?gOgw5Dbh4=7I1lv0!dI)b1VI!qN#W9e_&8h9i z@biEZc`qw0d1P`W>{l z9h04K;dwn>&XFmiTf<*nSV1B@O8x~D6Xl+tyWvL))WcMc{xK%%M~nCMUYiJhty^jV z4Hm`-LR$HBb%_MjWWt0oLxCMuwlSL6i08?o3=C<~+KggM-5wy799T4)E$q=Hq z*O40u)bLYmXyKbKX8-L$_G@PfzMH0~Fj${e%)&=`#HKOG1UBE@c1GH;w&l?If>3fk!^x5<;_Bg2VzM2wOe&ykxJx;ESOTYo4XzO!xdD~bM7xT9OsJMH%a zZZXa7LQ;mo`Jo8G$v>m#7bme?<|2QHn{;va!|s4e>S>{as(0R^zGFgpf9(k|EJa?Vi6G3hpjKdI7)+cwO!QFDlXBId4S|fos5@ zOvoXhwTf+3E4r$HnZ&`v1;`)N{^@ybOYfHL@@rInz0+K{Jl$@hRr_XU0xcG$=09j^ zHaQDOZPQf`ov5p5KJ6C7I5-&nZiOYNWg2mAHu!O**1>(!)ZwPAbX%XRNogA6q>J2! zL&}}f69F=5f)CrDywJ?@1#HT9e9i{sXJxkb&8y9I#f`TiUiJ<}(~mp(vkTjt#}0xc z$9~-{>Iem$NMRh<%_&a_9<_=k&SWnjTu2omb;7}dz-^>bfx@0@(g7uXhSl>tBP|0z@;q7|b@2Y2 z)?sc6A*3`8BHba;3wr}p#D(19LgoRxoxy0jA(`fG+h*=H-ZKu!P*7W`h6yFSeDTM- za}EgKx#Ez~FT}GdzuKdI4{)_k02vwvjaX{6VzmkQuLPJX2N`GI#ieOY(!<`jDpJjQ z@vMe_X?JN$%vI7jd%zCBN^NM{g z@B8D1M*O_^icJ4eXtYPJMrkc7OILULN9+idzJ8TgXMe%aOFxTxSmKEei12Q@ReDQD#2qe(1uH597r=F~MkSw34xDsf6-;w)Y^^Cl#MS!O2 zJ|jzU`!|YjO8MdA*#eJfgW@nFV0yTa&m6HFgw(w-vtE@v5h6%MG;-k&`6pZn+2>tb zoM9@wDKZxkut;3Uk`Ei`Y1V4FPY1*5atkRim>+7s`tN*=O?^JrBcno*QT_86TpF8b zrt$RRuTCv#fVGlFG?K&JCkX5kl(u z`SIX?6XA=5y@|_4)un2r2X)ebyf)L%G~MC8WGB!64Ps{pXGf1=!Yq9~2FVwSyh*cy zcP3}Npbh#c@7wgkE?6u$g(HyyA6NsrUX@c3dRHBb*{O0L1LhN85d{|?lTYU7Qe|ICQ|9vb%N#ExfdqK$( zuTtb3BVkh=`lhw2oS_z5A56b+sj`&v!aD^v@PReZ^0r0uqK)%OFQ4yp?Q=nVzG;av zh8PQRfatSUIW3Y$vXWKMXc?aE?6BUT?Of^4eBDS8gY#0rd09id3M-B)onv2XzvQro zMLZDbkK+l#!_edH<0%wVg%qWLa2572SUm>|Fr|E5-@oVzG@>SG*Hwlms$d$iNLn!^ zJ>3VIOFy0xIuSVjf=l zumc+k(RhcB0sH~>0zMI>02d+_yvrdXA474Usxpe>gXX=1r26G0%?Nc@O{&Ca6`;D zmL@xdJB&K$J5Y6pyz-BKjl^1{r0^`OSu;<}4{oUuZB<#l2-r$*D74)C(E5f@f0feG z7fb0>2^lt1jV*GQynF(c-4^v;BpPG{`C_x=_>r<<6_gp0Nn!9zs9o*F7BX} zXcTXg?|7@S^ePA=Xb$`VU~M;#0#R^|GuHMC+g+zs!N55Y3#_Y~5OnJ^1GJDMr120p z#qYgk&TILZzCkKRnP$|`hNS@*TmfK2ZDk-C{VNooG;3lGnohR+q&+KUL*#;%{Iru zqvGeozrZ^rCVl~VF^ypWZJ0`Yje@K>{^?wM_{wmF!jCzzuG5+nt;dUYPHvGCM z)4BY$r0$m!f6eW~S+DA=7{AP4FNTG-UHoz|1K(vq=##KAWqelYRy`&%jOT@9Gd{-n zL70yo3tB}l>P6X&Hq=KTpfZAlqJK2Y&BRSG6F-G`d&jbD zR(VR9Uy7}M1W%=ZsK^o6!L+*n)*;Xl+wlmiw2K4M;{v+(xM(MxKaw&3PB)JF1rd5( zVgS07&O7Hkp^SXK!(>W9#>bB)6423mD=}mA zk^vlci~2I0JSL7c;^PIm%+cp=X=)8!jwFWi?&Nxp@vh#M@ zcdb?aMb1wz?ni}Um0wKV*5OXQiIZqO#72Td4+X96Yg}%y9-k`D?Z_H@J(E-mn9jYq z|9#;mx~0~YRGh8yc-QFZNri+E@w?Yt&L_6%rC&eTqzioQ-6<`*YMZr^28Y0xpQ;_z zn>J6)9%h3J;SFxI21->9LWf%gmdpOCRIk?3I%z#LoGG2muT$B=cZeb7xDZB(NwaF&s@0q$rK3}k+vEbjkYT(ISVnOsm!)nwFws#6^S0j7uojWpGTF64%s5P7I=&p zHR;(9?a(S}-(Sm|wyLv|^|PU2{Z?O>Sjc-~EvYvkC%hciWvV=8LIbzxAh1S7`~zQg!3c5OI@O!DepyW>f6gFB8#4yw#4scd+4m$f^p{SMyz<=Ff~8%QUB9;Z#E*yLecaG3b}xxXzNq)yc37?ccDOS} zU2?({KG~Px=~~%wYGTU43;DS0z?%ai1Atf8(29}dvxxX%tZBK5bZYa$&+xOj28pJG zuL1}zwj=>!lK46aM7`FVQ532$kbFL~TUfEV(Vujf_PJOV+l_xcPZm_*pSP-aARkW; z2sJhpG-a(aAKb5rvPBHO7j`j&ARn&pvcb;|-4Q525Uj~js$Ag0^!4Z3v?a+oshNwo za1Zfh;JEwi$oBws@sO&#}2d% zjmF|&uH*F*3*WNRA`znV1@9B<^qZiwy2l8g;Y6p>BboP2P~a8>tHw%)FV*9+FT?fp zq^NAtS@MMdAiI}($8E3yZt}k zsI6Vr6;^RV<7DSiU_udvf=Z#V-vHF^#$3@mMV`IGfaX_C@A@UG8Tt_9Jq@THXd zt7&xT9bpsvX;rxImv1P;8+Jb~(ZgV$KZDgUr)Mqa$8^Q`qTC@wxR4T2A1?8^S{oAJ z%;AlL*ul|Mm{*lz_ur4Xma6E##^jemb|zlRtjg!mQqKj&@r9{ijq746se%K#?+SgN z{0NlETgTtHS|r#*L<)sE(L9}eB8s7w+3Cyo)=iv&ZOAN4MObC7RaUtFMMKOmGhx!L zp*WatYD2qM8qZgPkL7PKVb_+%k9#tf>E*aPW14%LP5r+g&9qZ@h73prd!#lgcJpaK zM4~ooFnxL$uC6J|RM$eNhe&6fRM_>2QKzj5ECvrE`ea#vU}rkxI!6DuwCK{dIQ2>`^@vHYu(Lr<1TIMLt!!3>mIenT_t^#&shHp|EbFlbbGYYQQq zKu+ORj>H#9^LQkfJ_>jDWL5D&em0B<-NebUX$Bl{2or_S1ZjRR>&g&V z(?9gU{ohO$QJ)Q;9_Yf?pmR6#gB;C_atNR2J9!!`3av3)c=H5uYc`}nRFlrmSHj^} zS@4?X_=s07qEbOx_pzL6%5%u1sBhH{&EJ36X%+2UYpI6j;iXe%(VYd z09W2ljt~Z-jNTEy+$Ez_qP{G}$-BN^PnS5r%Jm$B#BggCcSaSWhA_8_$Lb67{bheL zUSiNg#uMo#_FhsdFvQrb1gpC3lCu-8K|1~?@`)Yln{d2^8`3&zO2O1@-Hz{a;^60~ zyO#OFc|)b??(bHbFS@)u2H61dRZ*e>xaV2q1+5U57;28`L{9osvwa<+y`BcR#_-t} z3PN4Q%H9ZUVs8UmtIf3M9QscA<>?zlZ}k0yuP-CcBSobUvw{|L(E=T~QflJhGv7n3 zLG}696olKH>2Q>KkbTJGK=D#l0+W71+?6(ajfS)QHwJ{t|& zD5mSg)_k5tq?fu50hmUcX>u+^4y@{y_xTcd73tklx|cr`ZTpX}@zQ-uh?y{E!axIk95DA_VKmdS2AjsU*#hbI8;_mRv(|I_akxOJs!mE*~jzx zPtG_}qOh*g`Z9#TF4~C&JK#B zNQLZr8$k_gBo1u{>%K+nW{biH@iT%x?MPsjwL}W0Mhv%Mjbb2D!u@o^slp#;2cwtd zRoy?Xu0-K}jWtp!#oJO~dOto?7iJZ;K7>%6k1sP#OE3&Gx$#;fgPbaP$>a&VXf&Dn;^#^E0^}-Y`4Z9%*aNYwK)Ef#ET@WtbB63Y0a=}8_a?lnGK3> zQ-Lhy*E&h3vD-r@&&cN8W?m@pw?z5gV@bwEnztL5lM zO}}{l9HFvMk6;RIFNhyVNGBmXjA5d6=IB7MO?3U#IXr&< zXMMr82OGKh<{W!|wf&gCI9_%MAefo}_hrQ4O1L&XE+Z|2tjUp+qw_H8;r+Oey&R_f za3_Rm;_(CdLk3)j3*^WOK|E&&ipz8qx1#~sP=3kiS3)_K=e;wg1KB<}IlCIoG8Dz2>KIz-_9iNt< zh}8op9?N4H@qg%1H{wcvTZsm<*gn_$t!E5qrf7X$2-a6EPp*8zf|VXL$QB~tL>=zn z>4g<@I6r8D>tz5c0H9miXw5YvfL@QAP!E54m5zCJm4*QQ-xfw$51k|fEYXN`k^i13 z0BmZXh9l@^;ZFykHA~1YMc}L#HXfs{Z;6#Y`hTr9VFY*hu3Bq9c|ed(v;isX>F8dK z{5CWKfENC%wB_3iGm)^;e*Uira3G-9O9p78qgFpOf}4;EH(%ef?1e2$;Ao@&E20jL zdK4XcQ%dYxWA?Ae!)P0ypVWlZwEp`){qX&ugU^Z75gTm^k6>AF86=K{HxYkwz}m-t@dlBJ}GNjFXf3VS$Pez|(Hdz5@Y__ z{W7sJg*hSax5{9|v~Q+YgbSAeMp;ma^WYv2_+aS#)*e|-ExHp*d$0$<5O35_ao}^P z%xOoWZubnGLX7T4lfj-6H4LX(5r&(F%=d+Kt?jH}gd*J)9qqWm5x7mmk+6Zno z+CO^H#VkM`K@iln`3|H4IBvJZ+z!3jhDQ$(^p3-fy~tn|s&ZjCZ6%JF2pa}4{eu47 z9m~cy<^mc}s&8HU=e5jLx$9y;YM~!qOC~(6ACN+DZ{7P=!@q)YFig;E$Gy3>_Leh7 z(y?fAkn4{0YEtBAH{3FG$I4u-rvqUy668I-%f+rAS+zKW z2Ws&oKArS*Je8OiL`VwIO_|1bbH7_^fzv}|@-oECN?vyQt6*T@t(}#=rs=DOd~Dm2 zWsYKh6o^(JxQkrXFH0p4((j8X~&yT_wgO zx{pW`;!O1&4oDT8E_D~5+Zew1JX3zzt(e)PZUq4qN8lWGhKkxBtRFV`ttr3vZ2e z{_yY|i}@|;#yPy^w<>qplO5oBf`yg2r`@4D_^GAbtD$Gw2;^IX7Sk;v#X+BpQfIDdkg==11hHY$o9SPkkDa`qlCt2Y(EnI z(rw9zk8Il$53Ij118H|W$mihwY8M6q(LcvAAHaDG5Z=Q2Og{0^p0DA!<I)0fF6j zA?-#y6qRcrxziGzwSrlKV{oj6PTEm8kLcbhYtjxt+I*x9LL+gza5aQbx4#ki-g8jL zOVIn$3xVaYLzqfLd~h8Fkd5gm?aRS}*UAE3;yG0&74Y{&`4Cp-++7Z2vu&dipTc)(qYhf$r)EIwt; zERcIW`)Wfw3jYp@4`zjYiu5*~DXlBeu+>OJd~ja#kk-Q!XZ0BxnRZUvL&$Tpvt3u^ zem~Yw7o^Q6K4*k_#Y|%|G|5?l{}3OOzTOodlNL23OYHEZHo)e6b9;LNx7T8d^RAv@ z%=IN9J~+okIG0AA9)d#rYOn01O~!GbkIDqSm3plHB{9^6`|&!Q-)^2feUV3{yqsrf zP}83DE{kMra^)F(dpG4U?aI(m9+wLJdNo*pNyy*ZCNY+0k{@Gktjo0)-I);Y$xzGno| z9!J^__8!%8#Q7BY>YtEOFFu~3p91`n`_wctmf!G8;|2WM8x0}Q-kAL$DqXS8%;6Yv z(HUm_lby2biVr>?iO<^bGikr$Ryb=@uVI{S=hbPJuiNkf%>zLd0)K-!C9OvpxBu_iZBCR(Yb3*Y+UW8O&t`KIK#Sv5G%ruBkSu<2}x7kmJhen&vvBc+oq>T%F z=Y>drHbL>ZAzCpzaJ;r=O`-DGc3d2xXp@5Yv^L*UF%aXm4*N7ILGkf5PGgaFzOy}Q z1O^4Z@39gRpJ=$`!a(|1_a1b5IaZ+_Zo)8DjZBLVq~&RdORd2Eb1QK-RzQ3{k5PYH znfhoL*yp=IZ*n9)0|N1RabwsBq4*^BpxqYZ&j%vj7X&>1X@h0sh|k+dTZV^i`7&JQku zSzYg7=qjq;Qv&;UHs@6-uumj0cLv1ACpXa$Ux6p>X`~$#LwxoQoXayliAhj=e9IUd z>&Dk4AU-c+`~L#>!cwF!3W(2~81=W0sgH$$C_W^Mf}5Q& z_h`uDc04@CIQe3UPc&XX84W>*jtPp-%sApx*F4;sI*rJiabzhO@j2c+pgYH*P6>+7 zF`l$hZX=4`yp^G080>Rn35n15CSW&KIqn;y{?>$s`Z6FsMVR4p2;}E4U#}j9p`-mP z2ab8KuQ$uwv%_MD&q*nYPn*EGM0qEtAU-40BtB74^prUF!T|yCc_~Ky?Q80zN1Wp~ z42aL66dywI$#d~BGi9Rb_$xetg|WmZ3Mw9-j&*!Y(C|Zne0!T7stV5ee;dftItB6B z+st~akf!pF1Z-)b_pc~j;)CrU#}Sf8N=STOMEZynj$IBzPxqR&vyRWO_`Dwl&tm3W z)C*K8M(<;Tz%geA>L!!ob6DV9-bDI;Hlz65iS4&0SvQG@PYqKayC!*jiVvaqlrr%t zkM%0Nu{v?YCtBQaX5c%kVW@6Mg5pyUC%8G9Df6~7{XLSQ9b!D7lM$b4W;RF5K)!(( zimaBz+E43op5>ji{W2gv_xgreO!@~UBtBQgk=a@(N8ixS#h3t41;5nSp;4GDx0Iy#oDpYOvkKPV8kVg1V85^8 z4DTL}n6pL{A42gd#o}XvhR^T?a>fy#Dp*8sy-yI#L$zyy;#1zd46{>=v@U@L;Yv@Q zH&UF=er}AJR6C(}?71ZCV4>S^;T)%CKz#NvLpAO!mM-S|GA%weAOLFuv+i#92_{5F z8|yth_tQMj;((3ap+pGAB43#%x^gpO-x`CF_<}t?gyNI`!czx5DbWM&Onj~$C*N+^ zFKTob;B#+JZ^bWIz_2HVZQ9`bbVkk%X5acaM${WI9iQ!bC9N>5u@n!oZLsLs6KH&{ z_MB@|^B%S95r1(wf~Bu8@j3<3FJ3&H3rqm^U}y2P3PwmK;yY?#di;ERUxOs;;sO&4 zJ{k+Fy^8aQVtfjs9t4do!RJ?^z*Ky$gmsb%ux?Zl0^kd5ua}CTX$((-{0_m;%|m9v z$AZw5?HJc`IP!fR2_il>3#=Z!9QV+Hkf9E!t97EC{ixh5!nMA)waWmL& z3)84BMmg%RS2HxS&n9p!1?E2a44?NhODseUb49FDZ0q4l$Y?(-s5lb6jKAAy^;j6R04tFf z;eIHUS~zzK_5$TcP~*$HeUk z)J=iAZj#x5g86%BfwJv~Ay=Kav5)iPpukMh7?00o&2#hlXr?JX*JQgwC_dRQK5Z~d z#ieeXe0>7>e82E^K*RT?8IE`ZLBe(=;!c5M_VL8LOvZz*5OOlh{l)DGe0~g#(<&^7 ze+C}L_PcH}(^TE_m>%fydJWeU&GMQUn!+5XOe>%vT8MI*7yXjNRORSA?!&g8f%2+` zhRc`M%CmOLeDt_1LSx$iy#O{}ha|7%p1}7X8Q8x8f`%7BPL^Yqk6ZU=I>)=k^s@QB z&j#yv!#%SO_khlf+&O`3@g4UxvyO|Kc8!z2AFkzpkc^Me09W$_;QGF+A*9roRs*YC z`_iIUyVz~JqBmwX + + + + + + + + + + + image/svg+xml + + + + + + + + + + + << \chords { c1:m7 f2:7 c2 } \relative c'' { g2 es8( c4) es8 f8 es d c~ c2 } \addlyrics { You are the sky and my rain, }>> + Akkordbezeichnungennotieren + Melodie notieren + Gesangstext eingeben + Melodie und Text kombinieren + + + + + + diff --git a/Documentation/pictures/text-input-pop-annotate-es.png b/Documentation/pictures/text-input-pop-annotate-es.png new file mode 100644 index 0000000000000000000000000000000000000000..e516bb49ee75e31751d67f1aa390dde0e406a716 GIT binary patch literal 28303 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

    A~a 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 + + + + + + + + + + image/svg+xml + + + + + + + + + + << \chords { c1:m7 f2:7 c2 } \relative c'' { g2 es8( c4) es8 f8 es d c~ c2 } \addlyrics { You are the sky and my rain, }>> + Escribir nombres de acorde + Escribir melodía + Escribir la letra + Combinar melodía y letra + + + + + + diff --git a/Documentation/pictures/text-input-pop-annotate-fr.png b/Documentation/pictures/text-input-pop-annotate-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..690e7bc1c5f2cb87270fbcc580b8b17331faf3ce GIT binary patch literal 31518 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 XS4xshuC6-o9+a0+c~|-N + + + + + + + + + + + image/svg+xml + + + + + + + + + + << \chords { c1:m7 f2:7 c2 } \relative c'' { g2 es8( c4) es8 f8 es d c~ c2 } \addlyrics { You are the sky and my rain, }>> + Entrer le nom des accords + Entrer la mélodie + Entrer les paroles + Combiner mélodie et paroles + + + + + + diff --git a/Documentation/pictures/text-input-pop-annotate-hu.png b/Documentation/pictures/text-input-pop-annotate-hu.png new file mode 100644 index 0000000000000000000000000000000000000000..51e5140c9c10710abf8c90d5d51132b28c8778fc GIT binary patch literal 51061 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-pop-annotate-hu.svg b/Documentation/pictures/text-input-pop-annotate-hu.svg new file mode 100644 index 0000000000..96920c7546 --- /dev/null +++ b/Documentation/pictures/text-input-pop-annotate-hu.svg @@ -0,0 +1,232 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + << \chords { c1:m7 f2:7 c2 } \relative c'' { g2 es8( c4) es8 f8 es d c~ c2 } \addlyrics { You are the sky and my rain, }>> + Akkordnevek megadása + Dallam megadása + Dalszöveg megadása + Dallam és dalszöveg összekapcsolása + + + + + + diff --git a/Documentation/pictures/text-input-pop-annotate-it.png b/Documentation/pictures/text-input-pop-annotate-it.png new file mode 100644 index 0000000000000000000000000000000000000000..1e051271aff3aed244c22f6cf5741a089601c475 GIT binary patch literal 52483 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 T{hJg@00000NkvXXu0mjf?yzl| literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-pop-annotate-it.svg b/Documentation/pictures/text-input-pop-annotate-it.svg new file mode 100644 index 0000000000..74cfe71ca4 --- /dev/null +++ b/Documentation/pictures/text-input-pop-annotate-it.svg @@ -0,0 +1,233 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + << \chords { c1:m7 f2:7 c2 } \relative c'' { g2 es8( c4) es8 f8 es d c~ c2 } \addlyrics { You are the sky and my rain, }>> + Inserisci i nomi degli accordi + Inserisci la melodia + Inserisci il testo + Combina melodia e testo + + + + + + diff --git a/Documentation/pictures/text-input-pop-annotate-nl.png b/Documentation/pictures/text-input-pop-annotate-nl.png new file mode 100644 index 0000000000000000000000000000000000000000..a418c5f41ef3e8882bdc71383ae2bb8b669ecbf4 GIT binary patch literal 44977 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 RSwKL$ZgTT#g%KkD{{dX>xupOA literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-pop-annotate.png b/Documentation/pictures/text-input-pop-annotate.png new file mode 100644 index 0000000000000000000000000000000000000000..35aba3a289d59f347a54347db0c63090e3849c64 GIT binary patch literal 36897 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-pop-annotate.svg b/Documentation/pictures/text-input-pop-annotate.svg new file mode 100644 index 0000000000..39126eb518 --- /dev/null +++ b/Documentation/pictures/text-input-pop-annotate.svg @@ -0,0 +1,226 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + << \chords { c1:m7 f2:7 c2 } \relative c'' { g2 es8( c4) es8 f8 es d c~ c2 } \addlyrics { You are the sky and my rain, }>> + Enter chord names + Enter melody + Enter lyrics + Combine melody and lyrics + + + + + + diff --git a/Documentation/pictures/text-input-pop-output.png b/Documentation/pictures/text-input-pop-output.png new file mode 100644 index 0000000000000000000000000000000000000000..0754084111ade55d3cb06f96164ac5b040656bf3 GIT binary patch literal 7910 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 W=1)H-F(X_60000 + + + + + + + + + + + image/svg+xml + + + + + + + + + + << \new Staff \HornNoten \new Staff \FagottNoten>> + Notensystem erstellen + Notensysteme parallel anordnen + + + + diff --git a/Documentation/pictures/text-input-score-annotate-es.png b/Documentation/pictures/text-input-score-annotate-es.png new file mode 100644 index 0000000000000000000000000000000000000000..7db5cb79dd8ac8c53dec771e2d6bdf2e33babc6b GIT binary patch literal 11744 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 + + + + + + + + + + image/svg+xml + + + + + + + + + << \new Staff \notasTrompa \new Staff \notasFagot>> + Crear pentagrama + Combinar pentagramas en paralelo + + + + diff --git a/Documentation/pictures/text-input-score-annotate-fr.png b/Documentation/pictures/text-input-score-annotate-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..653a9d21e972df64e5a0a5982805ae74ea5cc373 GIT binary patch literal 13882 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-score-annotate-fr.svg b/Documentation/pictures/text-input-score-annotate-fr.svg new file mode 100644 index 0000000000..6228cc4bbd --- /dev/null +++ b/Documentation/pictures/text-input-score-annotate-fr.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + << \new Staff \notesCor \new Staff \notesBasson>> + Créer une portée + Regrouper les portées dans un système + + + + diff --git a/Documentation/pictures/text-input-score-annotate-hu.png b/Documentation/pictures/text-input-score-annotate-hu.png new file mode 100644 index 0000000000000000000000000000000000000000..b599e1f8d1129528f37578febdcf12962159a60f GIT binary patch literal 22141 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-score-annotate-hu.svg b/Documentation/pictures/text-input-score-annotate-hu.svg new file mode 100644 index 0000000000..8bb91d5488 --- /dev/null +++ b/Documentation/pictures/text-input-score-annotate-hu.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + << \new Staff \Kürt \new Staff \Fagott>> + Kottasor létrehozása + Kottasorok egymás alá írása + + + + diff --git a/Documentation/pictures/text-input-score-annotate-it.png b/Documentation/pictures/text-input-score-annotate-it.png new file mode 100644 index 0000000000000000000000000000000000000000..a43c8b362eb30187a8395e8a7a094b44730234bc GIT binary patch literal 24725 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 EUu@n$cmMzZ literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-score-annotate-it.svg b/Documentation/pictures/text-input-score-annotate-it.svg new file mode 100644 index 0000000000..af94a9f39d --- /dev/null +++ b/Documentation/pictures/text-input-score-annotate-it.svg @@ -0,0 +1,143 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + << \new Staff \hornNotes \new Staff \bassoonNotes>> + Crea il rigo musicale + Combina i righi in parallelo + + + + diff --git a/Documentation/pictures/text-input-score-annotate-nl.png b/Documentation/pictures/text-input-score-annotate-nl.png new file mode 100644 index 0000000000000000000000000000000000000000..b5415b414be8c5bf571fb13cc8c630ab1647a9b5 GIT binary patch literal 28423 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-score-annotate.png b/Documentation/pictures/text-input-score-annotate.png new file mode 100644 index 0000000000000000000000000000000000000000..07c34be54efed5426acc7e1849baf28d2417b28f GIT binary patch literal 16478 zcmZX*1yoyI&^AhNr)Y6n+zD2^6e$|qJ-8Nk_hQANf#Pn3;#MHILveSP;;uJ+zwf{I zU+b={fZdOw!oz;cwczVu7l4bZ zv^ZSl82JJ00nJfH#|2h+?%x+6&iKOHkH%0EULd803Z}lNy+)FUd?Pk@oV=vSDR&V@LC;Q``!Oyl^(yVK}@w(ZE zenp!6E34re^Wl%rt{a!*;{g|gbgz$VWk&uB4c_%`@`_eV>AWsfUS{I87N$0{847^7Qzbo3V z`CG(MCfWaX+U|XuRJ7{8G#U4CX#TfA$64ZPGWu-Sh%0EA5?j)^@i8%&uA6b zeRm&hHbHtoe}8s;Xy(TUzS=-diz9Qw1w=KhfX{C z=|@=&?z%8Avi!YQx8k;*(=MS10ar(SN2@;7hNdGHd0dyAHHz&AMUkUFXy8XkfKU#s zgvqP+FFG~b<64GkGqntHBZo5>RQN7GPEDBN4p@~$DXMm2MNc}iMN0=Ctf%7n&(5E9 zi!gVYwY+rBmR&eyf4W$b)>wB26LyDlc1vqiG}%uUbd=vNSXP^u4@HRgI80ttwW~U& ztu#6uOCTUuWPi-$Ij!zDIX#|Fh?SF0&7GQ!p=kBL*hW$k;cc;*(H8CDg!iDO>WZW1 z_aV@q+K?)MU;n^iIHJDRU^8>$c63K>^Sy)AWpnE878$Ds z0J8d2$wEQ%FuOC{sfo)|67x7vV2PHc2b-_l20so9#)lx=*`5?4wly_;h?@nMZ>JOp~UO++Z$nlwfW!K!Vsd zqKHhdwV{N;Ui_U2R`$eCvZ(RNI8kJKpjRMAwNAQS=HO>>jA(_eVfJBUpt0`7>s;Sm z28!HoCnXXRZ4Hx4-(3(NnVq>{NN9ha({fdK4#Q{ z_Yb~ouiKRpoPDHFTv?v86NVmkm2-EqUN<(VB z5kWc+Gg@jXV);GFfBW!5;gTSpGV>u4?ZYpaOuJ)$SpoPj?REp+opKA4h4aT!y}SyI zX+h9Bw;ASA0e6v(`mw;lKqkCe@9TktroQTl60^{xh+f~N#d@Sd!r}HiY74YVHHMVZ zFk-6R*S>|?DFD6Q65h*JHNF_J$r+k`-0euzogtQ-_q)g2^2!T@Bu0g-M7ZoGrn$$4 ziQJF)0`-2~;pz%~ig5@Nm*QQ?o@D1l0SIdPMVEF{TS_FhZ-#J6kwM6yd)X4SQ0Thp zqIp4y=9gKK+nl%CTZ(fT@sbF}eCP61q5Ky{1TtzVArWp7Iyv4qphUUNTsYzv4>U~^ z8V-YWgNlG?6?}S`A{0oEZ-_$F+5i(I6fwpzulI1a)noE25rAas7 z?0sj<6*+kU#%l1YjyN|MgM)j6#Awiz>y~H@HG?LLh8Cxlh&us0^#YbXsLtKe!Y@A? z5gI)8k&Re(;X1}|To$E`=xt+jI+r_k*3p8j$3k!t<7~6n>^@z0D0I~`g?}d56GZm! zVc(YP!mTH$BHTL9doQ8wcxjO#>2Fnq9mMJ z36L7|`u%S7_d5jKCunGIW*@xSbQBd26;&7u3R}$Az)AFx;0g&yUcn2-W~Y(lXJxnu zNxT@O^qF!7RK?NA@lVhKuBpvG$ibI-*dI2G>K^A!G@H57XtfA1 zwk#^+ml#>W>0j<&D6i&+&)Y|jXW3@S%!h!R-e!1#5$Xf}1Y@DOL7{$XbUl1O1#r#y zu|z27a(_w&`CNPtxcmll`0iHS6*_o@;$82Cq(TQsYhC06<;)$1S}5$Li#E+#F6isg znbP{cs*<2{f3ahJ^giws#^8jxGW0E(2CGP+w9jNeM<03y1_GIk+!|$*fD#eBoh#Ya zW@fOlrYalR9lb=xN<1U+)$rLXC6JOr2H{eR$NyUF6ZbisH85}ak&pmTYsVLZW}p)Y z)x&mX;?yvg9)k&S$H&E>dF1Bbu*11+B_SaJ5~5OGlD1iz zmGs}gJ5+z?-|M09=Z*??|6>O4%JS)g!=!bz@*gJzXu3k~tgVIfZ_~$`O{D&@;RW-g z)wS8fsn>QIyj-vbhxj%JVzuo&E(XQ^D{#-j9%fW*{I7alYi}X6{NsOoU3@i>9;IQw zXaCFjUoEQ5Iw=8@!IrLny)yTpO{J|mI{a5jFEZrH^sU3w^>??h1eF)KDL!(KEK6%O zsZOEzfTJivyXdV%dsA$hd|!m3$0k$8@yWw4JH{LMq# z9O12@)AB+;p)z=LcGd}tl-QD(+z-6 zz-J~Mt2J>XJc#>oJciph?wFW7RM5{=`$EQi^-?#wfWedembu^My8%(p{cO!^qPHv& z(Bx`!3@A_OXN)aOntW7%+U>-Ot^0Z2h-mcF<#Nm3hk#PAjUy8)lMgj|Vu(e5ZRZv(2>xqe_&u8lV~C);O`%$q*LJ!O!^#nELfNY3 z^_ukSQg6OQoKT(I5;H~nfpX5bHNEc~C=mYbCI0RKMm(si**OiNInZFPz4ZeeLCFqp zQ&mtZt7;vp)Vbzq-JxjfE9H91(r+u36_5>?W-Lv`7sA6~wN&Rm_)dioFU9*b3XI6+UbIT}f;! zzOuhl?lyT#cV}Hnqc=CX zT#-m`gVl6KwYMt)Yi9$e#Hr8Ag^Pb@qA1ns z0^#v}JWRDdT%UZ&Fg7Ew22W0JHBuf!jrOz{>|RcSZQ3xt^gVugrb3o82go7 z(U+$GDkLQ&But#Z7h!GruiP)%rn2fpX_AWiS0NXTuK71#X8Ew{)DZmSv4a4T&V%UW z|1Eg1GXFLdHD-gb1$Z#=e~1T#6m8x+4oD5FezzWTMz3;;o{zmmS1-+Sqh0MZj z2CcVM%@&TM>8ck=u-SHW*yc5(aq-iG>;sP#5IkfF_WmgrBCjM+XmP&Da?)ZuPPQIn z*k)Lw*Eku;KT+!mNJR=5_?VIBIp%n<>PIq-xenqDtp`?Fe94 z(L;E4zZ`u@T=Ks8eG$Wbv%qjb04>_fNctAHs@BXEvb3GyG6~ozW5}dkEAu-n#ig2M zu$jp-NTmNI%9PO2W~nr~*3)^m;P<*qDH4jM>2Y8JTUDVvx3NMuEb6H4#|DK%l;Lt@ zEgl`~5Yv~0V1Emv=+gw<;wjh{1quGLQVic=6l92|MbX2})(%;DB2fh9- zS)NW=QjxUk?`^(5c8Cx{u%G8TJ}`vB#$N;-Lf>Fb6NO-VO&KCb?E2DtS~)Cco8ik9 zoC`^_SaH{@8cM-o*Z1^*$6uR7;}(>WbDj!AW2%yED4a&yXqSe^4|N*} zv>xa29}X4HwNeTHP|%^>Vhlei?KA@?*{$i_-MshF_n`1d^{n%F$swTHenn^~SxmL5 zLzg!>8nb^j==dFnep**o80bAx_==-MYItfHbDaOFkNbV52m99S2qNDwgUlX&F&Jm$?=^fm zj>44Hx*3($xI&~2dffP1UbU-)$w$RwGhOLw?H$+uodMZIs?~kbkQr_dv*nm;9+~oy zWkG%&P;|(Uoxub=@2dL28-nm7g>}&L9IZp;y4+%P`$%C^Q1aO7$?wK#Au!yNa>4m_ z<&N&b&>77}de3>suu{vx_$zj)_ubM_RY#*7;qGv~W%g){=kdibL%p>rlmHpjjW7RD zetq=y%)URGW7X|o_x)EOCA&+;{n~5gg$_DyC-%I9Xk2pvY=<~5=lE-EUR^3afp3Kt z3A|~C!8ATwim!?%^DJ$#O&VgAti2)n)-WWM9to_XY5kR*AKadwo5vSx1Z#7ky^=7LQzUpj=Dg%2Tfxby` zU4nK~9U6LzU%D_=Xf-5J)jIamGUBtU75Ez|C3GeQgl0@0b8`iq9LwYoyqSl3)Yy>$ z!@@AY;qeLB=j)8X=f^;VU$R~;O-dJaW^D?*P+^uXc=?j;bupYLYWa8q;*8I{Np4Nb zCW~;fjo+D)hWN5Iz|Or?Mbrixsjj>|5peiL5+tldhpvHWoeOclvpkV_L+>MBWRXBI z1NZG|^wGA1_C!e2a*DM~ryBFw1`D)f6A4{dusc zF??I1U40SBKs`@Whpk1(1cbQ0hHsP(gK=F`DtN9uR0U9`_0EB$T@OvP3f zO}~S$>A+jHb@{Y=83FvV7J7A;716+1G)o?_YUpuZ+{6z|N-Y1w5 zTOO~{ZZv~F9PQDlQgz&w;R4(pG%YfO_|Z! zaUFeK;q(Z$x9)u=1vamUDc88JoxO`o8KxtC%X3pvWg4gafz4&vNw8Z-k@K;Wk2Mj; zz`K-)NG*>)7n?&hbWL07I-qxPRQRn@K*Jub`$LTr+YH?%8-n>)o;K%cd<5nk*&Uto z1Sj?C-bn&6Fm*kLUaCh8CgXkqJUvu~yGpJ?FqFcIzKtO*Yo2d5AnZjQ%G01x4*Fso zAFfcQg`1v9%=H#h*MBB{7lanlvfJb@yS_dj%1UnoP7Or!(qVvaLiWM=R?Fw9B|KKG ze1yTFuHpR}dIQDrjEQU**kk4d%b|f-Ir6^E$!!2N!NI%;_p(7~2@Go8-ym$dv^^Hf zX6$cG+`77$`(kwk+`*=xupbygsdu(xf-FAJ(7z+5SJ&~Px*Q3VG)jN6coc~K zYi2AqbDSdg7mOw3WxgvpMg=Rr(m*C!%`tOYZ51v9s^|xhFqF2Of|+(P2?fH_L!cXf z%z+?6*O3s1&xJ&39H#?@0?OUoOwj z$-^peLQ9;cRG)e)lfVSrkRMELODHk`V2vu$DSXeW&=?M6asiw0<3wW!1x@%_!{Z-p zhjJ48zPF+S4x$&Os*j)-ZX!=tZ9RxG^u#;$6%{?lW5?lZ#(k?@J4!q#zOg7?4qUBqC-&0 zmd&~;N&H*+=mUf#MQeTM6Eelu@c`P6jWo*>3-H6T%EGeBy9Py@mW>N`9FOV@*&L8Mh_0`$9xr%3eoIZd5Fz4I!;S4eO z0c|_je8xg-q>*eA&m3&hd(+eg3pe8VzH2M!q^s21%JdAqJwc==;>Kby zMZa5)Dg;~CpfLD>gH@Itd1>Fx+AM3+#qx`9{?NzLCuBs`h$e3kvl>HE9ISv(!i(j` z%9W#o`m|$o`ZDxn+S@p}{B2UltTcDK4&{<2fyfXl@{4tm3X>_o6oEN^I0>I~fD*1j zwvWTNfCZ&JHxJ4Wq*6Ax`^7UVx>$XUn9gy&L+JcO*5imy)})8ZbERcsGA|k`6xKkM zbvABO^79VeTIdGQgpFAIVsiwR#nAS^g23xYj*Fjr{?m1}Rg+*qg!P|qxZmMqJVay( zeMqvF*KtL26Oh7bIwkh#uaco}zVN&Y$lqttFv!ON9hO``DyLBB@hWdWsj>Gykqx=y z0C8V8yyaI^z|w}sYqN}~_k1&y<9bPrTlb=0;S>?2B9i(MK&AUgONohv_^dmu1X!-> zNLUOk2R8i?fy*puwBytx@xMN*3vYzd;0VgBXosTKrc4kTP0a5&rBaBjVHj(3)qc6} z8|nG_>61>+y6$e`Zy?Qe1KD9rYdnow{7q@xbSH1p)O$ou;~$nPDTRr^)GB<1clU9O z2y<5fYQ63@)P1^g$mu06bb~sKZ|S4+D27r~PFutgXC+_K^9bA%oSNre zYJ>V~CpIn;%W@}-gJMEYO4G`)jM)-18k5|l4wGyM;=M?e7sg|Z65%@|;(Z&a%0xO5 z)rHPnXk!rOS2!yp_2T{Ci4&hPe3?kWL6xYn5YOe4;jacEZmK_@ry_&W;F7Y!xPae_ zP~?-=)?1eFj`nuR$*qYY;AcDHj=Xpt!;#u(-laVedlvrZ_#?}tviD4*TkMgp<4>*% z2u1O$owT8FAo8=>CjmO$P!`E=A{20O0&j+E2?K9I??|H zg`u?xIosLe8EBowOt#Qljs~;A#KJ(cvJ5);RO;^yU%3C_xW|UFp7Bh5jB!oQ zlGWz3!%rC3xdWVZ{iMS;gfmh*+U*0{WF!>Soa7#yE4`^um%Y#lb?$2H`daX`{1p-h zEnvv-wEsPifY*;4rf*!b=h@6Os;64hY577%t_Db=%!astC-D`B&%4;2OjeK*C*xZ zChxL}BC+cgGZ?!)q1AZ8ir=n6>&ft71r6jYe{bg+pS)d!fv;+qM6Qo(L)$OxCj$x^VKP0AQovDZ-!ha@*j5giz&&UR5%-)!+w0I;lg%mgj z)Y~w=tz3?VAu5pD1Upw40dZxI^3FL!^>PSB)!y9%LOshVp3({2z*nXLt<#AW2Xu^?M7Fny*qQRgHlUS=vjKhiDq_CGQ9Uv6NU3s_2c#*JV#8 zT29i6-=K6=UQi@|=A&2_noRb2xr$NGtS*gtM}t3iS~svMP+J*)VOQfdnG`q;Iz@H) zCdOmak%OSo+!-`@(7qt@PWY*QqqxdqsgG7Ru7ZNfRV#-I;z%0hUWG{IGxnjC(SIT} zn}66TblkI_@kpbN-KnlLK!7Q=DS27qg~hj1?6s{-eI@`*wyM-NtBZP+oDPr%TMiZzX8L4;f(Sb+t|s>a6GM?^2?C_i4fVmbv{!E%J4g$RCueu z-XR#j)rWuszYBbk`HG=W-XTrqi}nv+Ie8@*M*W;-@X~Ez@bZbU{H(oRp_+*qWHe2) zhGMBQDoHZk(H&CYT`hlDEb#``mW3i;xM;2BC)|*_;U-7krE3l=x4eeqUsK+cSD>w z&CqQR%_a{+Cg22OGym88O^Lt*sXak)oMsPPb2JE~n9Gv84aL*)Y1*Z6CgY{Vm&{!o zOc02cMyG}o3!fB2-gqUfQm#26iQ#4^GazZRX`fOocz1-=Zr=%q=I>Sqe)~O~ z`}|!{SL`X;Nhl)Kz%%)KO7gdmcG-wdXSA}43|&=@z#iOPxs(+=69QY-8*5MTSj)LM zqG;1*!{8jdHm)OM&EH}o`s`uLsPVDqLdpzU`EWIUO+R^z>}5OQsrlCKPtjo(ng#eg z(wN~xvZD7MUPz1sazND)GMsdv8-XBUNVupR_1q}a61Jj;VK6Y;YU8+3jw4z1olT~Ea@&0 zjGBRYq7mpz@HZv80YT}`Aqf>x;B`NL<;ept6(GZ!wfv@7pwcK2z2rmG^g0SX){zUZ zU(*~8sAah(Jy^&eEJ)*YKzaKIv7t+YcM_5Q_==fig9;pF%#p7NSILaNo|9d@vu=HE*no3%V zxp2I__@dXNOzrfz?wM zXiTr!O|-#`AHB_CjQcSs(7Ku>DMf6KkVSXga%^V9+oeXj)jD|{@hwDOWPnO$13CXwy%OiZw-fZqZS5EYn+O+`x{G~G)D1ArQ1UN*=o4oR)X2YrIkr~Oohb>m_44( z{duGVZkGeX-UVuJoHIoD{rUEmDKoxbESvHu#HrqKg=J(gK2 zJpDh#aRC8W!Pr4s)`wS@`dO9iY;{^n+ssk9WNn4Jv^YTPJ0V=z{SN#6PhbLS4CG&v z&H4g!qWgy9kv=M421|>|OAhn#Ht6FS>`Tn@8WvYGV8`lt2Zkwh_0~4U9tsWxhG^wa z=O5)i7eTi*36DI>n07m$vG#yBohDkYG9=w3rBg@+9dA0Gi8il-WJlxER`tUTbNtn` zQ)loF8ahuBiy&LyUbA6Y)_h`22?||0gmRbu#_+jg7rt>rBsU?%SY7gsXMjHlb zRP3|tkvLtG1@#o$th6AzFC0Zz83_0z$~-!M)WE8l)y_33x?Y0_RaqjSpmMGuaK)?zq7tA56F4XS!2zm11CWI^-EL1V%@u(c}Oo3pR~#R*G($vAgl;Qpn4p|5Xh z=1fwLIS>CEs}#Ey%>_(g&TtG4 z@Iq*NFETZ{4+F}TdDMH1slul1GhwTDgp#4^opAIb7`7`{{h+o z>)7^q<{K{IuvWJ93#bgaCNpm`Vz^a4;GXQWQRyM6A6Qj-#%HjsQc+ZD0srY+;$~%| zWaDEd*+?56+G{2i1U_;!kiFY;7VkS8#kf6h>Iidecjq^5&#B_aH@EupjlAgMFK)b@ zkzy(qB*px7=EE(LO#?sN0gxEP0R@FN#d9Sy1v6+5*)#nIf5XzY zA3_c&25G&BjCTccsq7*JFLFYrzkPP)72lP#^fx(3?l(O)zs1WhSX^Q^7<^AM(~NB|xU(yUX#dlP=Al0hlQ)h&ecU;J6L;+SrPt0BE~JE~IYV9Jql!-As|qbAl@aNhbuKP9Wa*0MT8AD zT_biU*!qG@-$O4Lq03#xk_GT->GIsQbD1B5&attDY%bLrVa|M~M2Q%zp$s*9x3BDM z>y0U~aTSL*d|fMBo4z0V(~BE-zdD8|mf4)TLeYVM+IyFeixM9A_}s8dm7_fr9jYF& z+q*tH=CoZ#Cv>^QPV?&@8iqmYR7_Y-6YMP143=U8Bhewy%cruE07-x_(*Jh~3OgEI zybQG7+Rt|Xc>51hvmzDzUAjbpXgcV%O$`hTFh;|w|4Ux@_w#>l|2-u8K-KefBS|xD zT%QYViyWuUHp1zSlI`xjhhJ(R$$+p!+@1G83LRnhLvXGiMoNk9W{YLj5nrtlbCb2> zTBRuzTlB^8SH)7*3M|PqCguVW63g!7I=RsID$*qPgE_PPbo=X%a>}M5Hj?fd8@fs# zcDUjHN;)HgZb40ZLjbKT^_v1e^uJrHA>PglNn}{|)0VnaZ=LMDPE)xQh6x0C4stFe zVucY|kDmN25$I`X@|OYh3I`#eMhyORnV_;ssB-KE7?#veP(UlYaIq)d~B-jF>99DBdB_plXfr49o0- zsp>W;a@s|I+}rPv!gD@o11i}i;c=92af8(%uG}eoYm_FHZ z?`3Chh;#Ywd+dLEsRSKyJuUEI(}%)1p9_?QXAO%Lef1Pa5oX-N`4x&Sdpzw{+DZo%Vks-9o;l8MeXonEy!(DlL^s0utNnsY#xCQ+aWcW=7v z7y5!<1xr84LP*MF2mc?#`M=HQ|94;42sibMu=|4j%h0@;fgQ}i%)vu-J;5m$lrIk( zr^NvdndW9@1cYEx5lh!<_TC5I#eTtISl7%@9`gx;z|!GIgNj<1A?3k?E>p)5AohM+ znn$d#F)x9es&N~JE86AYZ5)G*W)wQ`%X|$0-12Zx{_}rp2)Q5gmmbOTqRiC&ZxOM# zYaUL6K61L2FiZZ73ejz!#QSnGt`VRc@Q;85LH&gY30EYsdHx@^9-Jq?!%gL{ef&R! z^hRo;A=lw}y^4ZiAw2b^G$kq8N6#~dl^slXf z#ecFcHo0x3iHx(ZR9)S~{GGLhr6DE2(eKALo_w-;aO#WukD>x7GM)+tfEqj8TCdY# zT2~K5qpR!+L@#y~GVe3uuGoV056d+9!>}bPX4SIMOZFcHrl&tCN`}^{|K^1iU~1mW zQ~+tGM(lf<&)9$5Ag?RmbVlugw6nmCx{y9EW0mALqFw`D?b`1%%nS|7HAuDoZN2_19@w$N1|?%OtED zJSd`*H~GA4--@NL$i3~60*o0MIQ*-Lra0h-+}XCL%i-DF|EXczk0d*H(u6{8xA*!=?bn#1J*$I7Q+o}t&B;h)xH?+;5tDzp;gHKy!YiI?SuDgv$gs@xH#1nPCypwjSV+_+Yo7{HH&}wqodpBU)zu=DK10>1^bv zqaB-BgG4**gR_prW8)HsQKK)P*1JMFTaM-J z4rDrn($;y7nz%ou9vDekR8dc#eCKechI1CDbbn4E(?lk+y0$5gKv3)X7w~QShAs?5 zGqyHqmdaHQrPlB(vH5=6`s8r@N>r&!yu%6AmikiaTL!lLflPa{PpGTXDYl&|P!% z1t??T@iIMAq_&yhdD#J*1gosTAM+%u-=4RCQrsQt zk~%BT9kB$O0rXo^q6c&pA=wIdtc1W^-jFQc&(t5F%IEf|Ne5qlDIeCtoK&@$$#B7o z_EmNAIX}n2y^2zY0F`|{=8wklBR|SlRVri_irx&_U_k8Lq#&gvP35cP^Pa!2;y0sd zG0f~=_3EVumkJsPz3lW##_Rdo_m9I<0)kZSkh`#kSoOz=#l-OsOngSwaKc@-L0&;f zi2=i_T10xe#a$hv&kCt|mya17Gg5u8#t%5}znDR;^w7~UODs$Pp8j{2zKWg)i+h#k zso}SJUmJz?x8NSO)P zk?G@jf>L=r_t)vic@y3!@b!A0x7XZtKs-v zz}2pE8#ATyqjcpsAO}hFwK?Or0jfMD z2?6xpI42~6=8T`hr)Q7DEX)jFH?LcwUbr5=EAEd3v^{pWsx+qg zP{lld3Vmyl@c3R+J%boX^rLYna~d6cD{Ny0UX5$8Q~&`>(tf2qg+6+kRd_Tx-y1~e z%-@=}Mw=pH^mOp~g6io|Oyvnz*cjQ_@Zp~Bv&c~Qi5ZuwYpJg9faPY8)6*NKL>=i& zfnCSWA*3$xU()_V6UiRiZUA>36ckIQ6s(j7W?TB7_cyNWs;{+stn zqk4QD-rT|?yKLI&%OYF~zYq*gdG`$7}tG_K*{?11867 zQtFQ$4eBw&Q6GxO8TSOQ60@9g_(XH~E^@j!*x6fQ&CmfcnM$F9{+eJ%-&e zk;Kgg%cq||B5#u{4^VbU41-;C(nmh|*o&JeC;uWS3^nmLLpD;B?~EEOU{t9B zwdky(Tyqcs zm(9BJQfJj{QikOyZLhiZ%tpXp~etZ`Ln>&>?4Q^Ix zkqIi06Ad?r>h1zCO%fhQ8+HI{Bran~i)r7@K{N*3`2^kn`uZ-mn9wS0n}*L?Io|ikz&BIM4+r2=(~h}`n_5@G_;6lKiWFdyd?)OiqOXVpd-WoKr@sd?skb?uE3Od52m$J$boO1L#GQu(CPzU3q3a!~@a7)-IcXdFkVyNpWPS*$Vjn zZ~%8?_{ky{F#dQF3&Iv2|J<>vq^Bc&cd9t^Kxb!)9f=Av#3N~T0PyGc$0`) z)KG9}z(WBn zggGyt&?t=g{P!*K33TAR#RHB*WRMO$rrw4V2xL(4qikgDq3>t1G|Cl0exRg- zmwGcfJidI(o{v`?2{s3(ZM85IC0>A_ z)jNy^?7ZDX_3#TgycH`EtCO8^YkH@`D2#*}6EXUY<0Xr1Q;oq@&5X)Bu*H~<05Elp z3B)&hc??4Hc@sv0>Kd;bV(aztmV-@6MeoaZ?@Wkd=IQ}$z~(Jt7yKTmNXucH0@&kS8ikDVG(oRovKn9Kbf5g_#CTKc?H z8Il09UeWzd%)MU{_xJ$+H!MTq;`i#92CVsvN*f zIZ(ho6(oq38}OU?o_OpHoxWsT+|D%6`H`B7%3pvcS1-fo{5uLtZdRydBRGpjIT{z& z1+U&&BpkxgD;(MwdtPXH7kY+isPfVihE9Ga&_EK8rhh^9HfzttS6m#4H&|JO z`9emy4X{~BqmJjDHiJw69&rqSB9=Dj2cZt=oH3qt^3V%Ts3iuyt@>JUTI4TH&*94b zncu@j<~S{I@JcDKx|Dcb#tsoGW>sa&@+~tU{)xX6k-D)pZL{ffloPjzGs;J<^_YfB z!lr)H37OC8DG_oILLy7mAdeT6QrhZW$rhUX{Gces;v)bvaGaVg`1jTOCFQzsN;vrA zvsiAa_tzT%VpN7Q5kp5Zi- zxSHT7B(zuFkggsQWzGWPj?QSvy9z|cvFS8p@vgl04}>po_uBTRUXa`@efQ8qdW(=C zMD)g1pB$Mu@>p0xAMxfPARc7CBwUZR$RR0uUQ1t{xdrv@O3Qbis=eXZ|K1mm;$Z^* z)%f{ebPM)s1S~2d7xzbXLXXZq>(AF^!HeGi0$Pu>tA>1k0efo2vadK=ZP;6cBTq)K QcmLsJKPyUBii3myAN@0Hh5!Hn literal 0 HcmV?d00001 diff --git a/Documentation/pictures/text-input-score-annotate.svg b/Documentation/pictures/text-input-score-annotate.svg new file mode 100644 index 0000000000..d318e94de3 --- /dev/null +++ b/Documentation/pictures/text-input-score-annotate.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + << \new Staff \hornNotes \new Staff \bassoonNotes>> + Create staff + Combine staves in parallel + + + + diff --git a/Documentation/pictures/text-input-score-output.png b/Documentation/pictures/text-input-score-output.png new file mode 100644 index 0000000000000000000000000000000000000000..b06658dbf3d6f95f5424213cc6bba0b5c02eb1d2 GIT binary patch literal 5420 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 AkpKVy literal 0 HcmV?d00001 diff --git a/Documentation/pictures/thickness-tweaks.png b/Documentation/pictures/thickness-tweaks.png new file mode 100644 index 0000000000000000000000000000000000000000..4495a6cb5bf744ebf2a5da5cffe6618638d5e4c2 GIT binary patch literal 6556 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 literal 0 HcmV?d00001 diff --git a/Documentation/po/GNUmakefile b/Documentation/po/GNUmakefile index eea2f247d1..9849b93546 100644 --- a/Documentation/po/GNUmakefile +++ b/Documentation/po/GNUmakefile @@ -8,10 +8,11 @@ include $(depth)/make/stepmake.make doc-localedir=$(outdir) LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py) DOMAIN=lilypond-doc -DOC_PO_SOURCES = postprocess_html.py texi-gettext.py translations-status.py -TELY_FILES = $(shell ls $(depth)/Documentation/user/lilypond*.tely) -TELY_FILES += $(foreach l, $(LANGS), $(shell ls $(depth)/Documentation/$(l)/user/lilypond*.tely)) -LSR_LYS := $(shell ls $(depth)/input/lsr/*.ly) +DOC_PO_SOURCES = python/auxiliar/postprocess_html.py \ + scripts/auxiliar/tely-gettext.py scripts/auxiliar/translations-status.py +TELY_FILES = $(shell ls $(depth)/Documentation/*.tely) +TELY_FILES += $(foreach l, $(LANGS), $(shell ls $(depth)/Documentation/$(l)/*.tely)) +LSR_LYS := $(shell ls $(depth)/Documentation/snippets/*.ly) TELY_FILES += $(LSR_LYS:%.ly=../%.ly) messages: $(outdir)/messages @@ -24,12 +25,15 @@ $(outdir)/messages: $(MO_FILES) touch $@ po-update: - $(PYTHON) $(buildscript-dir)/texi-langutils.py -d $(outdir) -o texi.pot --gettext $(TELY_FILES:%.tely=../%.tely) - $(foreach i, $(DOC_PO_SOURCES), cp $(buildscript-dir)/$(i) $(outdir) &&) true - cd $(outdir) && sed -i -e s/_doc/_/g $(DOC_PO_SOURCES) - cd $(outdir) && xgettext -cjn -L Python -o buildscripts.pot $(DOC_PO_SOURCES) + $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -o texi.pot --gettext $(TELY_FILES:%.tely=../%.tely) + $(foreach i, $(DOC_PO_SOURCES), cp $(top-src-dir)/$(i) $(outdir) &&) true + cd $(outdir) && xgettext --keyword=_doc -cjn -L Python -o buildscripts.pot $(foreach i, $(DOC_PO_SOURCES), $(notdir $(i))) msgcat -o $(outdir)/doc.pot $(outdir)/buildscripts.pot $(outdir)/texi.pot msgmerge -U lilypond-doc.pot $(outdir)/doc.pot for i in $(CATALOGS); do \ msgmerge -U $$i.po lilypond-doc.pot; \ done + +ifeq ($(out),www) +local-WWW-1: messages +endif diff --git a/Documentation/po/cs.po b/Documentation/po/cs.po new file mode 100644 index 0000000000..0522617a06 --- /dev/null +++ b/Documentation/po/cs.po @@ -0,0 +1,11530 @@ +# translation of de.po to German +# translation of LilyPond documentation +# Copyright (C) 2006 Han-Wen Nienhuys, Jan Nieuwenhuizen +# This file is distributed under the same license as the lilypond package. +# +# +# Till Paala , 2007,2008,2009,2010, 2010. +# Pavel Fric , 2010. +msgid "" +msgstr "" +"Project-Id-Version: de\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-13 12:25+0200\n" +"PO-Revision-Date: 2010-09-13 16:59+0200\n" +"Last-Translator: Pavel Fric \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: postprocess_html.py:55 +#, python-format +msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." +msgstr "" +"Tato stránka je pro %(package_name)s-%(package_version)s (%(branch_str)s)." + +#: postprocess_html.py:57 +#, python-format +msgid "" +"Your suggestions for the documentation " +"are welcome, please report errors to our bug list." +msgstr "" +"Vaše návrhy týkající se dokumentace " +"jsou vítány. Potíže a chyby hlašte, prosím, na našem Seznamu chyb." + +#: postprocess_html.py:69 +#, python-format +msgid "Other languages: %s." +msgstr "Jiné jazyky: %s." + +#: postprocess_html.py:70 +#, python-format +msgid "About automatic language selection." +msgstr "O automatickém výběru řeči." + +#: postprocess_html.py:318 +msgid "stable-branch" +msgstr "Stálá větev" + +#: postprocess_html.py:320 +msgid "development-branch" +msgstr "Vývojářská větev" + +#: translations-status.py:72 +msgid "Section titles" +msgstr "Nadpisy" + +#: translations-status.py:73 +#, python-format +msgid "Last updated %s" +msgstr "Naposledy obnoveno %s" + +#: translations-status.py:74 +msgid "Translators" +msgstr "Překladatelé" + +#: translations-status.py:74 +msgid "Translation checkers" +msgstr "Zkoušeči překladu" + +#: translations-status.py:75 +msgid "Translated" +msgstr "Přeloženo" + +#: translations-status.py:75 +msgid "Up to date" +msgstr "Současné" + +#: translations-status.py:76 +msgid "Other info" +msgstr "Více informací" + +#: translations-status.py:78 +msgid "no" +msgstr "ne" + +#: translations-status.py:79 +msgid "not translated" +msgstr "nepřeloženo" + +#: translations-status.py:81 +#, python-format +msgid "partially (%(p)d %%)" +msgstr "částečně (%(p)d %%)" + +#: translations-status.py:83 +#, python-format +msgid "partially translated (%(p)d %%)" +msgstr "částečně přeloženo (%(p)d·%%)" + +#: translations-status.py:84 translations-status.py:86 +msgid "yes" +msgstr "ano" + +#: translations-status.py:85 +msgid "translated" +msgstr "přeloženo" + +#: translations-status.py:86 translations-status.py:87 +msgid "up to date" +msgstr "současné" + +#: translations-status.py:88 +msgid "partially" +msgstr "částečně" + +#: translations-status.py:89 +msgid "partially up to date" +msgstr "částečně současné" + +#: translations-status.py:90 +msgid "N/A" +msgstr "N/A" + +#: translations-status.py:91 +msgid "pre-GDP" +msgstr "před-GDP" + +#: translations-status.py:92 +msgid "post-GDP" +msgstr "po-GDP" + +#. -*- coding: utf-8 -*- +#. Documentation/changes.tely:69 (variable) +msgid "coloredheads" +msgstr "Hlavičky barev" + +#. Documentation/changes.tely:70 (variable) +msgid "noclef" +msgstr "Neklíč" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi +msgid "Top" +msgstr "Začátek" + +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "Nové vlastnosti v 2.13 od té doby, co byla vydána verze 2.12" + +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "Rejstřík k LilyPondu" + +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "LilyPond -- \\\\TITLE\\\\" + +#. @subsubheading in Documentation/macros.itexi +msgid "Predefined commands" +msgstr "Předem určené příkazy" + +#. @subsubheading in Documentation/macros.itexi +msgid "Selected Snippets" +msgstr "Vybráné úryvky" + +#. @subsubheading in Documentation/macros.itexi +msgid "See also" +msgstr "Podívejte se i na" + +#. @subsubheading in Documentation/macros.itexi +msgid "Known issues and warnings" +msgstr "Známé potíže a varování" + +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +msgid "Music engraving" +msgstr "Notová sazba" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "Dějiny LilyPondu" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraving details" +msgstr "Podrobnosti k notové sazbě" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "Notová písma" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "Zrakové vyrovnání" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Ledger lines" +msgstr "Pomocné čáry" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "Zrakové uspořádání" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "Proč tolik snahy?" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Automated engraving" +msgstr "Automatická notová sazba" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Beauty contests" +msgstr "Soutěž krásy" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "Zlepšení s pomocí srovnání jakosti" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "Dělat vše správně" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "Sestavit program" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music representation" +msgstr "Zachycení hudby" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "Které symboly sázet?" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "Pružná stavba" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Putting LilyPond to work" +msgstr "Přenechat práci LilyPondu" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "Příklady notové sazby (BWV 861)" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "Literatura" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "Krátký seznam literatury" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "Dlouhý seznam literatury" + +#. @subheading in Documentation/essay/literature.itely +msgid "Colorado" +msgstr "Colorado" + +#. @subheading in Documentation/essay/literature.itely +msgid "Computer notation" +msgstr "Sazba not s pomocí počítače" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "Notová sazba" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "GNU Free Documentation License" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "" +"Dodatek: Jakým způsobem lze povolení používat pro své vlastní dokumenty" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "traLaLa" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "Nepodstatný krok pro vyrovnání se s odhadem parseru" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/extending/programming-interface.itely:127 (variable) +#. Documentation/learning/fundamental.itely:3103 (variable) +#. Documentation/learning/fundamental.itely:3153 (variable) +#. Documentation/notation/changing-defaults.itely:3677 (variable) +msgid "padText" +msgstr "OdstupText" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3712 (variable) +msgid "tempoPadded" +msgstr "tempoPosunuto" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "Vzor" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "Cvičení v Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Introduction to Scheme" +msgstr "Úvod do Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "Pískoviště pro Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme variables" +msgstr "Proměnné v Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "Jednoduché datové typy ve Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "Složené datové typy ve Scheme" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "Dvojice" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Lists" +msgstr "Seznamy" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "Seznamy spojení (alist)" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "Rozptylovací (hašové) tabulky" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "Výpočty ve Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "Procedury Scheme" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "Stanovit procedury" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "Přísudky" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "Vrácené hodnoty" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "Podmínky Scheme" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "if" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "cond" +msgstr "cond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "Scheme v LilyPondu" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond Scheme syntax" +msgstr "Skladba Scheme pro LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond variables" +msgstr "Proměnné v LilyPondu" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "Vstupní proměnné a Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Object properties" +msgstr "Vlastnosti předmětů" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "Složené proměnné v LilyPondu" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "Posuny" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "Rozsahy" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "Seznamy spojených vlastností" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "Řetězce seznamů spojení" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "Vnitřní znázornění hudby" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "Vytvoření složitých funkcí" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "Zobrazení hudebních výrazů" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "Vlastnosti hudebních předmětů" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "Zdvojnásobení noty legatovým obloučkem (příklad)" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "Přidat artikulaci k notám (příklad)" + +#. Documentation/extending/programming-interface.itely:145 (variable) +#. Documentation/notation/changing-defaults.itely:3695 (variable) +msgid "custosNote" +msgstr "StrážceNota" + +#. Documentation/extending/programming-interface.itely:192 (variable) +msgid "manualBeam" +msgstr "RučníTrámec" + +#. Documentation/extending/programming-interface.itely:212 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "AltZapnuto" + +#. Documentation/extending/programming-interface.itely:217 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "AltVypnuto" + +#. Documentation/extending/programming-interface.itely:230 (variable) +msgid "withAlt" +msgstr "s Alt" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "Rozhraní pro programátory" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "Hudební funkce" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "Skladba hudební funkce" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "Jednoduché nahrazovací funkce" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "Pokročilé nahrazovací funkce" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "Matematika ve funkcích" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "Prázdné funkce" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "Funkce bez argumentů" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "Popisné funkce" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "Popisné vazby ve Scheme" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "Jak popisy pracují vnitřně" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "Nové vymezení popisných příkazů" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "Skladba vymezení popisných příkazů" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "On properties" +msgstr "O vlastnostech" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "A complete example" +msgstr "Úplný příklad" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Adapting builtin commands" +msgstr "Přizpůsobit vestavěné příkazy" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "Nové vymezení popisných příkazů pro seznamy" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "Souvislosti pro programátory" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "Posouzení souvislostí" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "Funkci použít na všechny předměty rozvržení" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "Funkce opětovného volání" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "Začleněný kód Scheme" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "Složité úpravy" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "LilyPond Scheme interfaces" +msgstr "Rozhraní Scheme pro LilyPond" + +#. Documentation/learning/tutorial.itely:209 (comment) +msgid "set the starting point to middle C" +msgstr "počáteční bod nastavit na jednočárkované C (C1)" + +#. Documentation/learning/tutorial.itely:240 (comment) +msgid "one octave above middle C" +msgstr "jednu oktávu nad na jednočárkovaným C (C1)" + +#. Documentation/learning/tutorial.itely:256 (comment) +msgid "c is 1 staff space up, so is the c above" +msgstr "c je 1 řádek nahoru, čili c nad b" + +#. Documentation/learning/tutorial.itely:257 (comment) +msgid "d is 2 up or 5 down, so is the d above" +msgstr "d je 2 řádky nahoru, nebo 5 dolů, čili d nad b" + +#. Documentation/learning/tutorial.itely:258 (comment) +msgid "e is 3 up or 4 down, so is the e above" +msgstr "e % e je 3 nahoru, nebo 4 dolů, čili e nad b" + +#. Documentation/learning/tutorial.itely:259 (comment) +msgid "a is 6 up or 1 down, so is the a below" +msgstr "a % a je 6 nahoru, nebo 1 dolů, čili a pod b" + +#. Documentation/learning/tutorial.itely:260 (comment) +msgid "g is 5 up or 2 down, so is the g below" +msgstr "g je 5 nahoru, nebo 2 dolů, čili g pod b" + +#. Documentation/learning/tutorial.itely:261 (comment) +msgid "f is 4 up or 3 down, so is the f below" +msgstr "f je 4 nahoru, nebo 3 dolů, čili f pod b" + +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely +msgid "Tutorial" +msgstr "Cvičení" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Compiling a file" +msgstr "Přeložit zdrojový soubor" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "Zadat noty" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Producing output" +msgstr "Pohled na výsledky" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "MacOS X" +msgstr "MacOS X" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Windows" +msgstr "Windows" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "Příkazový řádek" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to write input files" +msgstr "Jak se zapisují vstupní data" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Simple notation" +msgstr "Jednoduchý notový zápis" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Pitches" +msgstr "Výšky tónů" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pitch" +msgstr "Výška tónu" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "interval" +msgstr "Intervaly" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale" +msgstr "Stupnice" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "middle C" +msgstr "Jednočárkované C" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave" +msgstr "Oktáva" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accidental" +msgstr "Předznamenání" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Durations (rhythms)" +msgstr "Délky tónů (rytmy)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beam" +msgstr "Trámec" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duration" +msgstr "Délka tónu" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole note" +msgstr "Celá nota" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half note" +msgstr "Půlová nota" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter note" +msgstr "Čtvrťová nota" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dotted note" +msgstr "Prodloužená nota" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Rests" +msgstr "Pomlky" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rest" +msgstr "Pomlka" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Time signature" +msgstr "Taktové označení" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time signature" +msgstr "Taktové označení" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Clef" +msgstr "Notový klíč" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "clef" +msgstr "Notový klíč" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "All together" +msgstr "Vše dohromady" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Working on input files" +msgstr "Pracovat na vstupních datech" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to read the manuals" +msgstr "Jak se mají číst příručky" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "Vypuštěný materiál" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Clickable examples" +msgstr "Klepatelné příklady" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "Přehled příruček" + +#. Documentation/learning/common-notation.itely:1185 (variable) +#. Documentation/learning/fundamental.itely:3084 (variable) +#. Documentation/learning/fundamental.itely:3105 (variable) +msgid "violin" +msgstr "Housle" + +#. Documentation/learning/common-notation.itely:1190 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:80 (variable) +msgid "cello" +msgstr "Violoncello" + +#. Documentation/learning/common-notation.itely:1215 (variable) +msgid "tripletA" +msgstr "TriolaA" + +#. Documentation/learning/common-notation.itely:1216 (variable) +msgid "barA" +msgstr "TaktA" + +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "foo" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +msgid "Common notation" +msgstr "Běžný notový zápis" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Single staff notation" +msgstr "Jednoduchá notová osnova" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Accidentals and key signatures" +msgstr "Předznamenání (posuvky) a označení tóniny (předznamenání)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Accidentals" +msgstr "Předznamenání" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sharp" +msgstr "Křížek" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flat" +msgstr "B" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double sharp" +msgstr "Dvojitý křížek" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double flat" +msgstr "Dvojité béčko" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Key signatures" +msgstr "Označení tóniny (předznamenání)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key signature" +msgstr "Označení tóniny" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major" +msgstr "Dur" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor" +msgstr "Moll" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warning: key signatures and pitches" +msgstr "Varování: označení tóniny a výšky tónů" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "natural" +msgstr "Bez předznamenání" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposition" +msgstr "Převedení do jiné tóniny" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Pitch names" +msgstr "Označení výšek tónů" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Ties and slurs" +msgstr "Ligatury a legatové obloučky" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Ties" +msgstr "Ligatury" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tie" +msgstr "Ligatura" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Slurs" +msgstr "Legatové obloučky" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slur" +msgstr "Legatový oblouček" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Phrasing slurs" +msgstr "Legatové obloučky frázování" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrasing" +msgstr "Frázování" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warnings: slurs vs. ties" +msgstr "Varování: Legatové obloučky nejsou ligatury" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "articulation" +msgstr "Artikulace" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Articulation and dynamics" +msgstr "Artikulace a síla hlasu" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Articulations" +msgstr "Artikulace" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Fingerings" +msgstr "Prstoklady" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fingering" +msgstr "Prstoklad" + +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "Dynamics" +msgstr "Hudební značky určující hlasitost (dynamika)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) +msgid "dynamics" +msgstr "Hudební značky určující hlasitost" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "crescendo" +msgstr "Crescendo" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "decrescendo" +msgstr "Decrescendo" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding text" +msgstr "Přidat text" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Automatic and manual beams" +msgstr "Automatické a ruční trámce" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Advanced rhythmic commands" +msgstr "Dodatečné rytmické příkazy" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Partial measure" +msgstr "Předtaktí" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "anacrusis" +msgstr "Předtaktí" + +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) +msgid "Tuplets" +msgstr "Rytmické notové skupiny" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note value" +msgstr "Hodnota noty" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triplet" +msgstr "Triola" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Grace notes" +msgstr "Ozdoby" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grace notes" +msgstr "Ozdoby" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "acciaccatura" +msgstr "Příraz" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "appoggiatura" +msgstr "Dlouhý příraz" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Multiple notes at once" +msgstr "Více not najednou" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Music expressions explained" +msgstr "Hudební výrazy vysvětleny" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Analogy: mathematical expressions" +msgstr "Podobnost: matematické výrazy" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: multiple staves" +msgstr "Souběžné hudební výrazy: více notových osnov" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polyphony" +msgstr "Vícehlasost" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: single staff" +msgstr "Souběžné hudební výrazy: jedna notová osnova" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Multiple staves" +msgstr "Více notových osnov" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Staff groups" +msgstr "Seskupit notové osnovy" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brace" +msgstr "Svorka" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Combining notes into chords" +msgstr "Spojit noty do akordů" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chord" +msgstr "Akord" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Single staff polyphony" +msgstr "Vícehlasost v jednoduché notové osnově" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Songs" +msgstr "Písně" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Setting simple songs" +msgstr "Nastavit jednoduché písně" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyrics" +msgstr "Text písně" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Aligning lyrics to a melody" +msgstr "Zarovnat text k melodii" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma" +msgstr "melodická ozdoba" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "extender line" +msgstr "Čára dolního/horního dotahu" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Lyrics to multiple staves" +msgstr "Text pro více notových osnov" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Final touches" +msgstr "Poslední úpravy" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Organizing pieces with variables" +msgstr "Uspořádat skladby pomocí proměnných" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding titles" +msgstr "Přidat název" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Absolute note names" +msgstr "Úplné názvy not" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "After the tutorial" +msgstr "Po cvičení" + +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:67 (context id) +msgid "singer" +msgstr "Pěvec" + +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) +msgid "vocal" +msgstr "Zpěv" + +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:231 (variable) +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) +msgid "piano" +msgstr "Klavír" + +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2764 (variable) +#. Documentation/learning/fundamental.itely:2826 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:145 (context id) +#. Documentation/snippets/jazz-combo-template.ly:234 (context id) +#. Documentation/snippets/piano-template-simple.ly:37 (variable) +#. Documentation/snippets/piano-template-simple.ly:56 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:45 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:67 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:57 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:42 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:64 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) +msgid "upper" +msgstr "nahoře" + +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2771 (variable) +#. Documentation/learning/fundamental.itely:2827 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:146 (context id) +#. Documentation/snippets/jazz-combo-template.ly:235 (context id) +#. Documentation/snippets/piano-template-simple.ly:45 (variable) +#. Documentation/snippets/piano-template-simple.ly:57 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:69 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:79 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:49 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:61 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) +msgid "lower" +msgstr "dole" + +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:497 (context id) +#. Documentation/notation/changing-defaults.itely:507 (context id) +#. Documentation/notation/changing-defaults.itely:512 (context id) +#. Documentation/notation/changing-defaults.itely:529 (variable) +#. Documentation/notation/changing-defaults.itely:547 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:64 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:66 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:45 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:45 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:47 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:63 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:53 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) +msgid "melody" +msgstr "Melodie" + +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:61 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:53 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:53 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:71 (variable) +msgid "text" +msgstr "Text" + +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:84 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:136 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:172 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:208 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:240 (comment) +msgid "main" +msgstr "hlavní" + +#. Documentation/learning/fundamental.itely:629 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "Hlas \\\"1\\\" Hlas \\\"2\\\"" + +#. Documentation/learning/fundamental.itely:639 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "Hlas \\\"1\\\" Hlas \\\"2\\\"" + +#. Documentation/learning/fundamental.itely:654 (comment) +msgid "Voice \\\"1\\\"" +msgstr "Hlas \\\"1\\\"" + +#. Documentation/learning/fundamental.itely:659 (comment) +msgid "Voice \\\"2\\\"" +msgstr "Hlas \\\"2\\\"" + +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) +msgid "Main voice" +msgstr "Hlavní hlas" + +#. Documentation/learning/fundamental.itely:684 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +msgstr "Hlas·\\\"1\\\"··············Hlas·\\\"2\\\" Hlas \\\"3\\\"" + +#. Documentation/learning/fundamental.itely:708 (comment) +msgid "Bar 1" +msgstr "Takt 1" + +#. Documentation/learning/fundamental.itely:719 (comment) +msgid "Bar 2" +msgstr "Takt 2" + +#. Documentation/learning/fundamental.itely:720 (comment) +msgid "Voice 1 continues" +msgstr "Hlas 1 pokračuje" + +#. Documentation/learning/fundamental.itely:723 (comment) +msgid "Voice 2 continues" +msgstr "Hlas 2 pokračuje" + +#. Documentation/learning/fundamental.itely:898 (comment) +msgid "Voice one" +msgstr "První hlas" + +#. Documentation/learning/fundamental.itely:900 (comment) +msgid "Voice two" +msgstr "Druhý hlas" + +#. Documentation/learning/fundamental.itely:902 (comment) +msgid "Omit Voice three" +msgstr "Vynechat třetí hlas" + +#. Documentation/learning/fundamental.itely:903 (comment) +msgid "Voice four" +msgstr "Čtvrtý hlas" + +#. Documentation/learning/fundamental.itely:1002 (comment) +msgid "Default behavior or behavior after \\oneVoice" +msgstr "Výchozí chování nebo chování po \\oneVoice" + +#. Documentation/learning/fundamental.itely:1040 (comment) +msgid "The following notes are monophonic" +msgstr "Následující noty jsou monofonní" + +#. Documentation/learning/fundamental.itely:1042 (comment) +msgid "Start simultaneous section of three voices" +msgstr "Začít souběžnou část složenou ze tří hlasů" + +#. Documentation/learning/fundamental.itely:1044 (comment) +msgid "Continue the main voice in parallel" +msgstr "Hlavní hlas nechat jít dál" + +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) +msgid "Initiate second voice" +msgstr "Započít druhý hlas" + +#. Documentation/learning/fundamental.itely:1048 (comment) +msgid "Set stems, etc., down" +msgstr "Nastavit nožičky, atd., dolů" + +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) +msgid "Initiate third voice" +msgstr "Započít třetí hlas" + +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) +msgid "Set stems, etc, up" +msgstr "Nastavit nožičky, atd., nahoru" + +#. Documentation/learning/fundamental.itely:1103 (comment) +msgid "Initiate first voice" +msgstr "Započít první hlas" + +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "Nastavit nožičky, atd., dolů" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2478 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:25 (variable) +#. Documentation/snippets/jazz-combo-template.ly:217 (context id) +#. Documentation/snippets/jazz-combo-template.ly:226 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:67 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:77 (context id) +msgid "one" +msgstr "jeden" + +#. Documentation/learning/fundamental.itely:1240 (variable) +#. Documentation/learning/fundamental.itely:2738 (variable) +#. Documentation/learning/tweaks.itely:3537 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:64 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:87 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:51 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:47 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:61 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:51 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:60 (variable) +msgid "global" +msgstr "celkový" + +#. Documentation/learning/fundamental.itely:1241 (variable) +msgid "SopOneMusic" +msgstr "SoprJedenNoty" + +#. Documentation/learning/fundamental.itely:1243 (variable) +msgid "SopTwoMusic" +msgstr "SoprDvaNoty" + +#. Documentation/learning/fundamental.itely:1245 (variable) +msgid "SopOneLyrics" +msgstr "SoprJedenText" + +#. Documentation/learning/fundamental.itely:1247 (variable) +msgid "SopTwoLyrics" +msgstr "SoprDvaText" + +#. Documentation/learning/fundamental.itely:1253 (context id) +msgid "SopOne" +msgstr "SoprJeden" + +#. Documentation/learning/fundamental.itely:1262 (context id) +msgid "SopTwo" +msgstr "SoprDva" + +#. Documentation/learning/fundamental.itely:1294 (variable) +#. Documentation/learning/fundamental.itely:3006 (variable) +msgid "TimeKey" +msgstr "Udání času" + +#. Documentation/learning/fundamental.itely:1295 (variable) +msgid "SopMusic" +msgstr "SoprNoty" + +#. Documentation/learning/fundamental.itely:1296 (variable) +#. Documentation/learning/tweaks.itely:3539 (variable) +msgid "AltoMusic" +msgstr "AltNoty" + +#. Documentation/learning/fundamental.itely:1297 (variable) +#. Documentation/learning/tweaks.itely:3540 (variable) +msgid "TenorMusic" +msgstr "TenorNoty" + +#. Documentation/learning/fundamental.itely:1298 (variable) +#. Documentation/learning/tweaks.itely:3541 (variable) +msgid "BassMusic" +msgstr "BasNoty" + +#. Documentation/learning/fundamental.itely:1299 (variable) +#. Documentation/learning/tweaks.itely:3542 (variable) +msgid "VerseOne" +msgstr "SlokaJedna" + +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/tweaks.itely:3543 (variable) +msgid "VerseTwo" +msgstr "SlokaDvě" + +#. Documentation/learning/fundamental.itely:1303 (variable) +#. Documentation/learning/tweaks.itely:3544 (variable) +msgid "VerseThree" +msgstr "SlokaTři" + +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3545 (variable) +msgid "VerseFour" +msgstr "SlokaČtyři" + +#. Documentation/learning/fundamental.itely:1312 (context id) +msgid "Sop" +msgstr "Sopr" + +#. Documentation/learning/fundamental.itely:1313 (context id) +#. Documentation/learning/tweaks.itely:3552 (context id) +#. Documentation/notation/input.itely:984 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +msgid "Alto" +msgstr "Alt" + +#. Documentation/learning/fundamental.itely:1321 (context id) +#. Documentation/learning/tweaks.itely:3560 (context id) +#. Documentation/notation/input.itely:986 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +msgid "Tenor" +msgstr "Tenor" + +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3561 (context id) +#. Documentation/notation/input.itely:991 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:240 (variable) +msgid "Bass" +msgstr "Bas" + +#. Documentation/learning/fundamental.itely:1347 (variable) +#. Documentation/learning/fundamental.itely:1400 (variable) +#. Documentation/learning/fundamental.itely:1463 (variable) +msgid "versenotes" +msgstr "SlokyNoty" + +#. Documentation/learning/fundamental.itely:1353 (variable) +#. Documentation/learning/fundamental.itely:1415 (variable) +#. Documentation/learning/fundamental.itely:1478 (variable) +msgid "versewords" +msgstr "SlokyText" + +#. Documentation/learning/fundamental.itely:1359 (context id) +#. Documentation/learning/fundamental.itely:1427 (context id) +#. Documentation/learning/fundamental.itely:1489 (context id) +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +msgid "verse" +msgstr "Sloka" + +#. Documentation/learning/fundamental.itely:1406 (variable) +#. Documentation/learning/fundamental.itely:1469 (variable) +msgid "refrainnotesA" +msgstr "RefrénNotyA" + +#. Documentation/learning/fundamental.itely:1410 (variable) +#. Documentation/learning/fundamental.itely:1473 (variable) +msgid "refrainnotesB" +msgstr "RefrénNotyB" + +#. Documentation/learning/fundamental.itely:1418 (variable) +#. Documentation/learning/fundamental.itely:1481 (variable) +msgid "refrainwordsA" +msgstr "RefrénTextA" + +#. Documentation/learning/fundamental.itely:1421 (variable) +#. Documentation/learning/fundamental.itely:1484 (variable) +msgid "refrainwordsB" +msgstr "RefrénTextB" + +#. Documentation/learning/fundamental.itely:1435 (context id) +#. Documentation/learning/fundamental.itely:1509 (context id) +msgid "refrainB" +msgstr "RefrénB" + +#. Documentation/learning/fundamental.itely:1501 (context id) +msgid "refrainA" +msgstr "RefrénA" + +#. Documentation/learning/fundamental.itely:1663 (comment) +msgid "start of single compound music expression" +msgstr "Začátek jednoho složeného hudebního výrazu" + +#. Documentation/learning/fundamental.itely:1664 (comment) +msgid "start of simultaneous staves section" +msgstr "Začátek části souběžných notových osnov" + +#. Documentation/learning/fundamental.itely:1666 (comment) +msgid "create RH staff" +msgstr "Vytvořit notovou osnovu RH" + +#. Documentation/learning/fundamental.itely:1669 (comment) +msgid "create voice for RH notes" +msgstr "Vytvořit hlas pro noty RH" + +#. Documentation/learning/fundamental.itely:1670 (comment) +msgid "start of RH notes" +msgstr "Začátek not RH" + +#. Documentation/learning/fundamental.itely:1673 (comment) +msgid "end of RH notes" +msgstr "Konec not RH" + +#. Documentation/learning/fundamental.itely:1674 (comment) +msgid "end of RH voice" +msgstr "Konec hlasu RH" + +#. Documentation/learning/fundamental.itely:1675 (comment) +msgid "end of RH staff" +msgstr "Konec notové osnovy RH" + +#. Documentation/learning/fundamental.itely:1676 (comment) +msgid "create LH staff; needs two simultaneous voices" +msgstr "Vytvořit notovou osnovu LH; potřebuje dva souběžné hlasy" + +#. Documentation/learning/fundamental.itely:1679 (comment) +msgid "create LH voice one" +msgstr "Vytvořit hlas LH jedna" + +#. Documentation/learning/fundamental.itely:1681 (comment) +msgid "start of LH voice one notes" +msgstr "Začátek not hlasu LH jedna" + +#. Documentation/learning/fundamental.itely:1684 (comment) +msgid "end of LH voice one notes" +msgstr "Konec not hlasu LH jedna" + +#. Documentation/learning/fundamental.itely:1685 (comment) +msgid "end of LH voice one" +msgstr "Konec hlasu LH jedna" + +#. Documentation/learning/fundamental.itely:1686 (comment) +msgid "create LH voice two" +msgstr "Vytvořit hlas LH dvě" + +#. Documentation/learning/fundamental.itely:1688 (comment) +msgid "start of LH voice two notes" +msgstr "Začátek not hlasu LH dvě" + +#. Documentation/learning/fundamental.itely:1691 (comment) +msgid "end of LH voice two notes" +msgstr "Konec not hlasu LH dvě" + +#. Documentation/learning/fundamental.itely:1692 (comment) +msgid "end of LH voice two" +msgstr "Konec hlasu LH dvě" + +#. Documentation/learning/fundamental.itely:1693 (comment) +msgid "end of LH staff" +msgstr "Konec notové osnovy LH" + +#. Documentation/learning/fundamental.itely:1694 (comment) +msgid "end of simultaneous staves section" +msgstr "Konec části souběžných notových osnov" + +#. Documentation/learning/fundamental.itely:1695 (comment) +msgid "end of single compound music expression" +msgstr "Konec jednoho složeného hudebního výrazu" + +#. Documentation/learning/fundamental.itely:1914 (comment) +msgid "Wrong!" +msgstr "Špatně!" + +#. Documentation/learning/fundamental.itely:2000 (comment) +#. Documentation/learning/fundamental.itely:2171 (comment) +msgid "make note heads smaller" +msgstr "Zmenšit hlavičky not" + +#. Documentation/learning/fundamental.itely:2003 (comment) +#. Documentation/learning/fundamental.itely:2173 (comment) +msgid "make note heads larger" +msgstr "Zvětšit hlavičky not" + +#. Documentation/learning/fundamental.itely:2006 (comment) +#. Documentation/learning/fundamental.itely:2175 (comment) +msgid "return to default size" +msgstr "Vrátit se k výchozí velikosti" + +#. Documentation/learning/fundamental.itely:2457 (variable) +#. Documentation/learning/fundamental.itely:2742 (variable) +#. Documentation/notation/input.itely:976 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:63 (variable) +msgid "sopranoMusic" +msgstr "SopránNoty" + +#. Documentation/learning/fundamental.itely:2464 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) +msgid "sopranoLyrics" +msgstr "SopránText" + +#. Documentation/learning/fundamental.itely:2468 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) +msgid "celloMusic" +msgstr "CelloNoty" + +#. Documentation/learning/fundamental.itely:2746 (variable) +msgid "sopranoWords" +msgstr "SopránText" + +#. Documentation/learning/fundamental.itely:2749 (variable) +#. Documentation/notation/input.itely:977 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:63 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:72 (variable) +msgid "altoMusic" +msgstr "AltNoty" + +#. Documentation/learning/fundamental.itely:2753 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) +msgid "altoWords" +msgstr "AltText" + +#. Documentation/learning/fundamental.itely:2754 (variable) +#. Documentation/notation/input.itely:978 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:70 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:79 (variable) +msgid "tenorMusic" +msgstr "TenorNoty" + +#. Documentation/learning/fundamental.itely:2758 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) +msgid "tenorWords" +msgstr "TenorText" + +#. Documentation/learning/fundamental.itely:2759 (variable) +#. Documentation/notation/input.itely:979 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:87 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:77 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:86 (variable) +msgid "bassMusic" +msgstr "BasNoty" + +#. Documentation/learning/fundamental.itely:2763 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) +msgid "bassWords" +msgstr "BasText" + +#. Documentation/learning/fundamental.itely:2780 (comment) +msgid "combine ChoirStaff and PianoStaff in parallel" +msgstr "Dávat dohromady souběžně SborOsnova a PianoOsnova" + +#. Documentation/learning/fundamental.itely:2782 (context id) +#. Documentation/learning/fundamental.itely:2784 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:87 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:97 (context id) +msgid "sopranos" +msgstr "Soprány" + +#. Documentation/learning/fundamental.itely:2792 (context id) +#. Documentation/learning/fundamental.itely:2794 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:100 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:88 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:101 (context id) +msgid "altos" +msgstr "Alty" + +#. Documentation/learning/fundamental.itely:2802 (context id) +#. Documentation/learning/fundamental.itely:2804 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:106 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:98 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:110 (context id) +msgid "tenors" +msgstr "Tenory" + +#. Documentation/learning/fundamental.itely:2812 (context id) +#. Documentation/learning/fundamental.itely:2814 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:114 (context id) +msgid "basses" +msgstr "Basy" + +#. Documentation/learning/fundamental.itely:2822 (comment) +msgid "end ChoirStaff" +msgstr "Ukončit SborOsnova" + +#. Documentation/learning/fundamental.itely:3010 (variable) +msgid "ManualOneVoiceOneMusic" +msgstr "ManuálJedenHlasJednyNoty" + +#. Documentation/learning/fundamental.itely:3014 (variable) +msgid "ManualOneVoiceTwoMusic" +msgstr "ManuálJedenHlasDvojeNoty" + +#. Documentation/learning/fundamental.itely:3018 (variable) +msgid "ManualTwoMusic" +msgstr "ManuálDvojeNoty" + +#. Documentation/learning/fundamental.itely:3022 (variable) +msgid "PedalOrganMusic" +msgstr "PedálVarhanyNoty" + +#. Documentation/learning/fundamental.itely:3028 (comment) +msgid "PianoStaff and Pedal Staff must be simultaneous" +msgstr "PianoOsnova a PedálOsnova musí být souběžné" + +#. Documentation/learning/fundamental.itely:3030 (context id) +msgid "ManualOne" +msgstr "ManuálJeden" + +#. Documentation/learning/fundamental.itely:3031 (comment) +msgid "set time signature and key" +msgstr "Nastavit taktové označení a tóninu" + +#. Documentation/learning/fundamental.itely:3041 (comment) +msgid "end ManualOne Staff context" +msgstr "Ukončit souvislost notové osnovy ManuálJeden" + +#. Documentation/learning/fundamental.itely:3042 (context id) +msgid "ManualTwo" +msgstr "ManuálDva" + +#. Documentation/learning/fundamental.itely:3048 (comment) +msgid "end ManualTwo Staff context" +msgstr "Ukončit ManuálDva" + +#. Documentation/learning/fundamental.itely:3049 (comment) +msgid "end PianoStaff context" +msgstr "Ukončit klavírní notovou osnovu" + +#. Documentation/learning/fundamental.itely:3050 (context id) +msgid "PedalOrgan" +msgstr "VarhanyPedál" + +#. Documentation/learning/fundamental.itely:3056 (comment) +msgid "end PedalOrgan Staff context" +msgstr "Ukončit varhanní notovou osnovu" + +#. Documentation/learning/fundamental.itely:3058 (comment) +msgid "end Score context" +msgstr "Ukončit notový zápis" + +#. Documentation/learning/fundamental.itely:3071 (variable) +msgid "hornNotes" +msgstr "TrubkaNoty" + +#. Documentation/learning/fundamental.itely:3082 (variable) +msgid "fragmentA" +msgstr "ČástA" + +#. Documentation/learning/fundamental.itely:3083 (variable) +msgid "fragmentB" +msgstr "ČástB" + +#. Documentation/learning/fundamental.itely:3102 (variable) +msgid "dolce" +msgstr "dolce" + +#. Documentation/learning/fundamental.itely:3104 (variable) +msgid "fthenp" +msgstr "FpotomP" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely +msgid "Fundamental concepts" +msgstr "Základní pojmy" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "How LilyPond input files work" +msgstr "Jak pracuje vstupní soubor pro LilyPond" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Introduction to the LilyPond file structure" +msgstr "Úvod do stavby souboru LilyPond" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Score is a (single) compound musical expression" +msgstr "Notový zápis je (jeden jediný) složený hudební výraz" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Nesting music expressions" +msgstr "Naskládat hudební výrazy jeden do druhého" + +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ossia" +msgstr "Ossia" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "On the un-nestedness of brackets and ties" +msgstr "O ne-vkládání svorek a ligatur do sebe" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Voices contain music" +msgstr "Hlas obsahuje noty" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "I'm hearing Voices" +msgstr "Slyším hlasy" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Explicitly instantiating voices" +msgstr "Začít hlasy přesně" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Note columns" +msgstr "Notové sloupce" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Voices and vocals" +msgstr "Hlasy a zpívané části" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Contexts and engravers" +msgstr "Prostředí a rytci" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Contexts explained" +msgstr "Co je to prostředí?" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Creating contexts" +msgstr "Vytvořit prostředí" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Engravers explained" +msgstr "Kdo jsou to rytci?" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Modifying context properties" +msgstr "Změnit vlastnosti prostředí" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\with}" +msgstr "Nastavit vlastnosti prostředí @code{\\\\with}" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\context}" +msgstr "Nastavit vlastnosti prostředí @code{\\\\context}" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Adding and removing engravers" +msgstr "Přidat a odstranit rytce" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing a single context" +msgstr "Změnit jednotlivé prostředí" + +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ambitus" +msgstr "Rozsah tónů" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing all contexts of the same type" +msgstr "Změnit všechna prostředí téhož typu" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Extending the templates" +msgstr "Rozšíření příkladů" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Soprano and cello" +msgstr "Soprán a violoncello" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Four-part SATB vocal score" +msgstr "Čtyřhlasý notový zápis SATB" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Building a score from scratch" +msgstr "Vytvořit notový zápis od základu" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "Uložit psaní na stroji pomocí proměnných a funkcí" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "Notové zápisy a hlasy" + +#. Documentation/learning/tweaks.itely:598 (comment) +#. Documentation/learning/tweaks.itely:733 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "Zvětšit tloušťku všech následujících obloučků z 1.2 na 5.0" + +#. Documentation/learning/tweaks.itely:667 (comment) +#. Documentation/learning/tweaks.itely:706 (comment) +#. Documentation/learning/tweaks.itely:709 (comment) +msgid "Increase thickness of immediately following slur only" +msgstr "Zvětšit tloušťku jen u bezprostředně následujících obloučků" + +#. Documentation/learning/tweaks.itely:737 (comment) +msgid "Revert thickness of all following slurs to default of 1.2" +msgstr "Vrátit tloušťku všech následujících obloučků na výchozích 1.2" + +#. Documentation/learning/tweaks.itely:1413 (comment) +msgid "Don't print clefs in this staff" +msgstr "Žádné notové klíče v této notové osnově" + +#. Documentation/learning/tweaks.itely:1415 (comment) +msgid "Don't print time signatures in this staff" +msgstr "Žádná taktová označení v této notové osnově" + +#. Documentation/learning/tweaks.itely:1479 (comment) +msgid "Reduce all font sizes by ~24%" +msgstr "Zmenšit všechny velikosti písma o ~24%" + +#. Documentation/learning/tweaks.itely:1546 (comment) +msgid "Reduce stem length and line spacing to match" +msgstr "Přizpůsobit délku nožiček a vzdálenost mezi linkami notové osnovy" + +#. Documentation/learning/tweaks.itely:1990 (comment) +#. Documentation/learning/tweaks.itely:2059 (comment) +msgid "Set details for later Text Spanner" +msgstr "Nastavit podrobnosti pro pozdější natahovač textu" + +#. Documentation/learning/tweaks.itely:1993 (comment) +#. Documentation/learning/tweaks.itely:2062 (comment) +msgid "Place dynamics above staff" +msgstr "Hudební značky určující hlasitost umístit nad notovou osnovu" + +#. Documentation/learning/tweaks.itely:1995 (comment) +#. Documentation/learning/tweaks.itely:2066 (comment) +msgid "Start Ottava Bracket" +msgstr "Začít oktávovou svorku" + +#. Documentation/learning/tweaks.itely:1998 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "" +"Přidat text hudební značky určující hlasitost a sponku pro " +"crescendo/decrescendo" + +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2073 (comment) +msgid "Add Text Script" +msgstr "Přidat textový popis" + +#. Documentation/learning/tweaks.itely:2004 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "Přidat text hudební značky určující hlasitost a ukončit sponku" + +#. Documentation/learning/tweaks.itely:2006 (comment) +#. Documentation/learning/tweaks.itely:2078 (comment) +msgid "Stop Ottava Bracket" +msgstr "Ukončit oktávovou svorku" + +#. Documentation/learning/tweaks.itely:2064 (comment) +msgid "Place following Ottava Bracket below Text Spanners" +msgstr "Další oktávovou svorku umístit pod natahovače textu" + +#. Documentation/learning/tweaks.itely:2069 (comment) +#. Documentation/learning/tweaks.itely:2076 (comment) +msgid "Add Dynamic Text" +msgstr "Přidat text hudební značky určující hlasitost" + +#. Documentation/learning/tweaks.itely:2071 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "Přidat dynamický natahovač linky" + +#. Documentation/learning/tweaks.itely:2153 (comment) +msgid "Cause notes to space out to accommodate text" +msgstr "Roztáhnout noty tak, aby se udělalo místo pro text" + +#. Documentation/learning/tweaks.itely:2176 (comment) +msgid "This markup is short enough to fit without collision" +msgstr "Tento text je dostatečně krátký na to, aby zapadl bez srážky" + +#. Documentation/learning/tweaks.itely:2180 (comment) +msgid "This is too long to fit, so it is displaced upwards" +msgstr "" +"Tento text je na to, aby zapadl, příliš dlouhý, proto je odsunut nahoru" + +#. Documentation/learning/tweaks.itely:2184 (comment) +#. Documentation/learning/tweaks.itely:2189 (comment) +msgid "Turn off collision avoidance" +msgstr "Vypnout automatické vyhnutí se srážce" + +#. Documentation/learning/tweaks.itely:2191 (comment) +msgid "and turn on textLengthOn" +msgstr "a přihlédnout k délce textu" + +#. Documentation/learning/tweaks.itely:2192 (comment) +msgid "Spaces at end are honored" +msgstr "Mezery na konci jsou dodrženy" + +#. Documentation/learning/tweaks.itely:2299 (comment) +msgid "Extend width by 1 staff space" +msgstr "Zvětšit šířku o jednu mezeru mezi linkami hudební osnovy" + +#. Documentation/learning/tweaks.itely:2582 (comment) +msgid "This will not work, see below" +msgstr "To nepůjde, podívejte se dolů" + +#. Documentation/learning/tweaks.itely:2586 (comment) +msgid "This works" +msgstr "Jde to" + +#. Documentation/learning/tweaks.itely:2623 (variable) +msgid "sesquisharp" +msgstr "sesquisharp" + +#. Documentation/learning/tweaks.itely:2626 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "Zde se nastavuje znak sesquisharp, ale mezera je příliš malá" + +#. Documentation/learning/tweaks.itely:2631 (comment) +msgid "This improves the spacing" +msgstr "Toto mezery zlepší" + +#. Documentation/learning/tweaks.itely:2671 (comment) +msgid "Extend width by 1 unit" +msgstr "Zvětšit šířku o jednu jednotku" + +#. Documentation/learning/tweaks.itely:2673 (comment) +msgid "Align dynamics to a base line 2 units above staff" +msgstr "" +"Hudební značky určující hlasitost zarovnat k základní lince, která je dvě " +"jednotky nad notovou osnovou" + +#. Documentation/learning/tweaks.itely:2980 (variable) +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3091 (variable) +#. Documentation/learning/tweaks.itely:3228 (variable) +#. Documentation/learning/tweaks.itely:3289 (variable) +msgid "rhMusic" +msgstr "rhNoty" + +#. Documentation/learning/tweaks.itely:2985 (comment) +#. Documentation/learning/tweaks.itely:3034 (comment) +#. Documentation/learning/tweaks.itely:3098 (comment) +#. Documentation/learning/tweaks.itely:3237 (comment) +msgid "Start polyphonic section of four voices" +msgstr "Začít vícehlasou část se čtyřmi hlasy" + +#. Documentation/learning/tweaks.itely:2998 (variable) +#. Documentation/learning/tweaks.itely:3047 (variable) +#. Documentation/learning/tweaks.itely:3111 (variable) +#. Documentation/learning/tweaks.itely:3254 (variable) +#. Documentation/learning/tweaks.itely:3320 (variable) +msgid "lhMusic" +msgstr "lhNoty" + +#. Documentation/learning/tweaks.itely:3007 (context id) +#. Documentation/learning/tweaks.itely:3056 (context id) +#. Documentation/learning/tweaks.itely:3120 (context id) +#. Documentation/learning/tweaks.itely:3263 (context id) +#. Documentation/learning/tweaks.itely:3329 (context id) +#. Documentation/notation/input.itely:997 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) +msgid "RH" +msgstr "RH" + +#. Documentation/learning/tweaks.itely:3011 (context id) +#. Documentation/learning/tweaks.itely:3060 (context id) +#. Documentation/learning/tweaks.itely:3124 (context id) +#. Documentation/learning/tweaks.itely:3267 (context id) +#. Documentation/learning/tweaks.itely:3333 (context id) +#. Documentation/notation/input.itely:1003 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) +msgid "LH" +msgstr "LH" + +#. Documentation/learning/tweaks.itely:3241 (comment) +#. Documentation/learning/tweaks.itely:3304 (comment) +msgid "Move the c2 out of the main note column so the merge will work" +msgstr "Přesunout c2 z hlavního notového sloupce, aby šlo sloučení" + +#. Documentation/learning/tweaks.itely:3244 (comment) +#. Documentation/learning/tweaks.itely:3307 (comment) +msgid "Stem on the d2 must be down to permit merging" +msgstr "Nožička u d2 musí být dolů, aby umožnila sloučení" + +#. Documentation/learning/tweaks.itely:3302 (comment) +msgid "Reposition the c2 to the right of the merged note" +msgstr "c2 přesunout napravo od sloučené noty" + +#. Documentation/learning/tweaks.itely:3442 (comment) +#. Documentation/learning/tweaks.itely:3464 (comment) +msgid "Visible tempo marking" +msgstr "Viditelné označení tempa" + +#. Documentation/learning/tweaks.itely:3446 (comment) +#. Documentation/learning/tweaks.itely:3468 (comment) +msgid "Invisible tempo marking to lengthen fermata in MIDI" +msgstr "Neviditelné označení tempa pro prodloužení koruny (fermaty) v MIDI" + +#. Documentation/learning/tweaks.itely:3449 (comment) +#. Documentation/learning/tweaks.itely:3471 (comment) +msgid "New tempo for next section" +msgstr "Nové tempo v další části" + +#. Documentation/learning/tweaks.itely:3528 (variable) +msgid "emphasize" +msgstr "zdůraznit" + +#. Documentation/learning/tweaks.itely:3532 (variable) +msgid "normal" +msgstr "normální" + +#. Documentation/learning/tweaks.itely:3538 (variable) +msgid "SopranoMusic" +msgstr "SopránNoty" + +#. Documentation/learning/tweaks.itely:3551 (context id) +#. Documentation/notation/input.itely:982 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +msgid "Soprano" +msgstr "Soprán" + +#. Documentation/learning/tweaks.itely:3582 (variable) +msgid "mpdolce" +msgstr "mpdolce" + +#. Documentation/learning/tweaks.itely:3585 (variable) +msgid "inst" +msgstr "nástroj" + +#. Documentation/learning/tweaks.itely:4029 (comment) +msgid "Arrange to obtain color from color-notehead procedure" +msgstr "Nařízení pro obdržení barvy z procedury color-notehead" + +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely +msgid "Tweaking output" +msgstr "Doladit výstup" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Tweaking basics" +msgstr "Základy pro doladění" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Introduction to tweaks" +msgstr "Úvod do ladění" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Objects and interfaces" +msgstr "Předměty a rozhraní" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Naming conventions of objects and properties" +msgstr "Pravidla pro pojmenovávání předmětů a vlastností" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Tweaking methods" +msgstr "Postupy při ladění" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "The Internals Reference manual" +msgstr "Doporučení vnitřní části programu" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties of layout objects" +msgstr "Vlastnosti předmětů v rozvržení" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Finding the context" +msgstr "Najít souvislost" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Overriding once only" +msgstr "Změnit jen jednou s \\override" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Reverting" +msgstr "Vrátit" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties found in interfaces" +msgstr "Vlastnosti, které mohou mít rozhraní" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Specifying the context in lyric mode" +msgstr "Určit prostředí v režimu textu písně" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Types of properties" +msgstr "Typy vlastností" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Appearance of objects" +msgstr "Vzhled předmětů" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Visibility and color of objects" +msgstr "Viditelnost a barva předmětů" + +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "stencil" +msgstr "stencil (lisovnice)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "break-visibility" +msgstr "break-visibility (udělat neviditelným)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "transparent" +msgstr "transparent (průhledný)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "color" +msgstr "color (barva)" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Size of objects" +msgstr "Velikost předmětů" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Length and thickness of objects" +msgstr "Délka a tloušťka předmětů" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Placement of objects" +msgstr "Umístění předmětů" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Automatic behavior" +msgstr "Automatické chování" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Within-staff objects" +msgstr "Předměty v notové osnově" + +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely +msgid "Fingering" +msgstr "Prstoklad" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Outside-staff objects" +msgstr "Předměty mimo notovou osnovu" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "\\\\textLengthOn" +msgstr "\\\\textLengthOn (přihlédnout k délce textu)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Grob sizing" +msgstr "Změna velikosti kreslených předmětů (grob)" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Collisions of objects" +msgstr "Střet předmětů" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Moving objects" +msgstr "Přesunutí předmětů" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Fixing overlapping notation" +msgstr "Dostat překrývající se notový zápis do pořádku" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "padding property" +msgstr "padding (vlastnost posunutí)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "left-padding and right-padding" +msgstr "left-padding (posunutí doprava) a right-padding (posunutí doleva)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-padding property" +msgstr "staff-padding (vlastnost posunutí notové osnovy)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "self-alignment-X property" +msgstr "self-alignment-X (vlastnost samovyrovnání X)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-position property" +msgstr "staff-position (místo v notové osnově)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "extra-offset property" +msgstr "extra-offset (vlasttnost přesného umístění)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "positions property" +msgstr "Vlastnost vyrovnání" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "force-hshift property" +msgstr "force-hshift (vlastnost svislého posunutí)" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Real music example" +msgstr "Příklady ze života" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Further tweaking" +msgstr "Další vyladění" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other uses for tweaks" +msgstr "Jiná použití drobných úprav" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Tying notes across voices" +msgstr "Propojit noty mezi různými hlasy" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Simulating a fermata in MIDI" +msgstr "Napodobit korunu (fermatu) v MIDI" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Using variables for tweaks" +msgstr "Použít proměnné pro drobné úpravy" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "Stylové listy" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other sources of information" +msgstr "Další zdroje informací" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Avoiding tweaks with slower processing" +msgstr "Vyhnout se drobným úpravám pomocí pomalejšího zpracování" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Advanced tweaks with Scheme" +msgstr "Pokročílé drobné úpravy se Scheme" + +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely +msgid "Templates" +msgstr "Předlohy" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Single staff" +msgstr "Jednoduchá notová osnova" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes only" +msgstr "Pouze noty" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and lyrics" +msgstr "Noty a text" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and chords" +msgstr "Noty a označení akordů" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes, lyrics, and chords." +msgstr "Noty, text a označení akordů" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Piano templates" +msgstr "Klavírní předlohy" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo piano" +msgstr "Samostatný klavír" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano and melody with lyrics" +msgstr "Klavír a skladba s textem" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered lyrics" +msgstr "Klavír se středěným textem" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered dynamics" +msgstr "Klavír se středěným označením pro hlasitost" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet" +msgstr "Smyčcový kvartet" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet parts" +msgstr "Hlasy smyčcového kvartetu" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Vocal ensembles" +msgstr "Hlasový soubor" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score" +msgstr "Notový zápis SATB" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score and automatic piano reduction" +msgstr "Notový zápis SATB a automatický klavírní výtah" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB with aligned contexts" +msgstr "SATB s příslušnými prostředími" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Orchestral templates" +msgstr "Orchestrální předloha" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Orchestra, choir and piano" +msgstr "Orchestr, sbor a klavír" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Ancient notation templates" +msgstr "Předlohy pro staré notové zápisy" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Transcription of mensural music" +msgstr "Přepis menzurální hudby" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Gregorian transcription template" +msgstr "Předloha pro přepis gregorianik (gregoriánského zpěvu)" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Other templates" +msgstr "Jiné předlohy" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Jazz combo" +msgstr "Džezová skupina" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "Hudební pojmy A-Z" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:455 (context id) +#. Documentation/notation/changing-defaults.itely:461 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +#. Documentation/notation/changing-defaults.itely:471 (context id) +msgid "A" +msgstr "A" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "A due" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accelerando" +msgstr "Accelerando" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "Přízvuk" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "Příslušenství" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "Adagio" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" +msgstr "Al niente" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "Alla Breve" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "Allegro" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alteration" +msgstr "Alterace" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:111 (variable) +msgid "alto" +msgstr "Alt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alto clef" +msgstr "Altový/Violový klíč" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "Stará mollová stupnice" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "Andante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "Arpeggio" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ascending interval" +msgstr "Vzestupný interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmented interval" +msgstr "Zvětšený interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmentation" +msgstr "Zvýšení" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "Rukopis" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:456 (context id) +#. Documentation/notation/changing-defaults.itely:465 (context id) +#. Documentation/notation/changing-defaults.itely:470 (context id) +msgid "B" +msgstr "B" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "Příraz dolů" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "Takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "Taktová čára" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone" +msgstr "Baryton" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "Barytonový klíč" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:44 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:244 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +msgid "bass" +msgstr "Bas" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bass clef" +msgstr "Basový klíč" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat" +msgstr "Doba" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "Opakování doby" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "Ligatura" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" +msgstr "Závorka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brass" +msgstr "Žestě (plechy)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "Značku pro nádech" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" +msgstr "Breve" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "C" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C clef" +msgstr "Barytonový klíč (C klíč)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "Kadence" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "Kadence" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "Přerušení (césura)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "Vícehlasá píseň (kánon)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "Čárka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "central C" +msgstr "dvoučárkované C" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "Chromatická stupnice" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "Chromatičnost" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "Středověká (modální/církevní) stupnice" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "Klastr" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "Čárka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "Čtyřčtvrťový takt (takt 4/4)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "Čtyřčtvrťový druh taktu (takt 4/4)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "Doplňkový interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound interval" +msgstr "Složený interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "Třídobý takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "Složený druh taktu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "Koncertní ladění" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "Postupný pohyb" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "Souzvuk" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "contralto" +msgstr "Kontraalt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "copying music" +msgstr "Kopírovat noty" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "Kontrapunkt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "Kontratenor (vysoký tenor/alt)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cue-notes" +msgstr "Vložené noty" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "Správce" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "Půlová nota jako základní rytmus" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "D" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "Da Capo (ještě jednou od začátku)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal niente" +msgstr "Dal niente (z ničeho)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "Dal Segno (znovu od znamení)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "Sestupný Intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "Diatonická stupnice" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "didymic comma" +msgstr "Didymická čárka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "Zmenšený interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "Diminuendo (postupně zeslabovaný)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminution" +msgstr "Snížení o půltón" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "direct" +msgstr "Ukazatel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "Prudký pohyb" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "Nesouzvuk" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonant interval" +msgstr "Nelibozvučný interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "Divisio" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "doit" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "Pátý stupeň diatonické stupnice (dominanta)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant ninth chord" +msgstr "Dominantní nonenakord" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant seventh chord" +msgstr "Dominantní septakord" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "Dórský způsob" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "Tečka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double appoggiatura" +msgstr "Dvojnásobný dlouhý příraz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double bar line" +msgstr "Dvojitá taktová čára" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double dotted note" +msgstr "Nota se dvěma tečkami" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double time signature" +msgstr "Složený druh taktu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double trill" +msgstr "Dvojitý trylek" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "Metrum se dvěma dobami v jednom taktu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duplet" +msgstr "Duola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "E" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "Církevní způsob" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth note" +msgstr "Osminová nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "Osminová pomlka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "Elize" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "embellishment" +msgstr "Výzdoba" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "engraving" +msgstr "Notová sazba" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "Enharmonický" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "Rovnoměrně temperované ladění" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "expression mark" +msgstr "Přednesové označení" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "F" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F clef" +msgstr "Barytonový klíč (F klíč)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "Glissando dolů" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "Roztažený trámec" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "Koruna (fermata)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "Pátý stupeň stupnice (pátý tón, kvinta)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "Číslovaný/Generální bas" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flag" +msgstr "Praporek" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flageolet" +msgstr "Flažolet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "Ozdoba" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "Forte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "Čtvrtý stupeň stupnice (čtvrtý tón, kvarta)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "Orchestrální notový zápis bez prázdné notové osnovy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "Dočasná notová osnova" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "Dočasné notové osnovy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "Fuga" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "Nauka o harmonii" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "G" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G clef" +msgstr "Houslový klíč (G klíč)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "Glissando" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "Velká notová osnova" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grave" +msgstr "Grave" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "Obal" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "H" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "Sponka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half rest" +msgstr "Půlová pomlka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "Závěrečná kadence" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "Flažoletové zvuky" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "Souzvuk" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "Hemiola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "homophony" +msgstr "Homofonie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "Praporek" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "Počet slabik" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inversion" +msgstr "Převrat" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inverted interval" +msgstr "Převrácený interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "čisté naladění" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "Tónina" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "Obloučky laissez vibrer" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "Largo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leading note" +msgstr "Citlivý tón (appogiatura)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "Pomocná linka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato" +msgstr "Legato" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "Legatový oblouček" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leger line" +msgstr "Pomocná linka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ligature" +msgstr "Ligatura" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "Rybník s leknínem" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "Linka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "Loco" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "Prodleva" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" +msgstr "Longa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyric tie" +msgstr "Textové spojení" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major interval" +msgstr "Velký interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maxima" +msgstr "Maxima" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "Středotónové temperované ladění" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure" +msgstr "Takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "Opakování taktu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "Medianta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma line" +msgstr "Linka melismy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "Melodický spád (kadence)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensural notation" +msgstr "Menzurální notový zápis" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "Menzurální označení druhu taktu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "Metrum" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "Údaj metronomu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "Označení metronomu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "Označení metronomu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "Mezzo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "Mezzosoprán" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor interval" +msgstr "Malý interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "Mixolydický způsob" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "Způsob" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "modulation" +msgstr "Modulace (změna)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "Mordent" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "Motiv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motive" +msgstr "Motiv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "Věta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "Pomlky přes více taktů" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "Sousední tóny" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ninth" +msgstr "Nona" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "non-legato" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note" +msgstr "Nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "Notová hlavička" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note names" +msgstr "Označení not" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "Přechod do oktávy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave mark" +msgstr "Označení oktávy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave marking" +msgstr "Označování oktávy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave sign" +msgstr "Značka pro oktávu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ornament" +msgstr "Ozdoba" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:144 (variable) +#. Documentation/snippets/flamenco-notation.ly:241 (context id) +msgid "part" +msgstr "Hlas" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "Koruna (fermata)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "Praporek" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "Procentní opakování" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "Bicí" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "perfect interval" +msgstr "Čistý interval" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrase" +msgstr "Fráze" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "Předtaktí" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "Pizzicato" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "Polymetrie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric" +msgstr "Polymetrický" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric time signature" +msgstr "Polymetrické taktové označení" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "portato" +msgstr "Portato" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "presto" +msgstr "Presto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "proportion" +msgstr "Poměr" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "Pythagorovská čárka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "Kvartola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "Barva (dur nebo moll)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter rest" +msgstr "Čtvrťová pomlka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "Čtvrttón" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "Kvintola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "Rallentando" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "Paralelní stupnice" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "repeat" +msgstr "Opakování" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:288 (context id) +msgid "rhythm" +msgstr "Rytmus" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "Ritardando" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "Ritenuto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "Stupeň stupnice" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "Skordatura" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "score" +msgstr "Notový zápis" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "Druhý stupeň stupnice (druhý tón, sekunda)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "Celá nota (semibreve)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "Půltón" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "Sedmý stupeň stupnice (sedmý tón, septima)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "Sextola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextuplet" +msgstr "Sextola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "shake" +msgstr "Trylek" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" +msgstr "Podobně" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "Jednoduché metrum" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "Šestnáctinová nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "Šestnáctinová pomlka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixth" +msgstr "Šestý stupeň stupnice (šestý tón, sexta)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "Čtyřiašedesátinová nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "Čtyřiašedesátinová pomlka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "Opakování lomítka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "Solmizace" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata" +msgstr "Sonáta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "Sonátová věta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "song texts" +msgstr "Text písně" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "soprano" +msgstr "Soprán" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "Staccato (krátce)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "Notová osnova" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staves" +msgstr "Notové osnovy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "Nožička" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "Stringendo (zrychlovaně)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "Smyčcové nástroje" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "Zdůrazněná část taktu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "Čtvrtý stupeň diatonické stupnice (subdominanta)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "Šestý stupeň diatonické stupnice (submedianta)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "Sedmý stupeň diatonické stupnice (subtonika)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "na struně G" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "Superdominanta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "Supertonika" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "symphony" +msgstr "Symfonie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "Synkopa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "Srovnaná čárka (syntonická)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "Notový systém" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "Temperované ladění" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "Označení tempa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenor" +msgstr "Tenor" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "Desátý stupeň stupnice (desátý tón, decima)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "Tenuto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "third" +msgstr "Třetí stupeň stupnice (třetí tón, tercie)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second note" +msgstr "Dvaatřicetinová nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "Dvaatřicetinová pomlka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "Generální bas" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time" +msgstr "Druh taktu" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "Tón" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "První stupeň tóniny (tónika)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" +msgstr "Transponující nástroj" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "Houslový klíč" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "Tremolo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triad" +msgstr "Trojzvuk (kvintakord)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "trill" +msgstr "Trylek" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triple meter" +msgstr "Třídobý takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tritone" +msgstr "Tritón (tritonus)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "Ladicí vidlice (ladička)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" +msgstr "Rytmická notová skupina (n-tola, tuplet)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "Dvojitý příraz (obal)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "Interval primy" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "upbeat" +msgstr "Předtaktí (lehká doba)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" +msgstr "Hlas" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "Volta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "Nezdůrazněná část taktu (slabá doba)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole rest" +msgstr "Celá pomlka" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole tone" +msgstr "Celý tón" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "Dřevěný dechový nástroj" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "Označení dob trvání not a pomlk" + +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "Použitá literatura" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond grammar" +msgstr "Mluvnice LilyPondu" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "Rejstřík příkazů pro LilyPond" + +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "Hudební notový zápis" + +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +msgid "Specialist notation" +msgstr "Zvláštní notový zápis" + +#. Documentation/notation/input.itely:548 (comment) +msgid "not printed" +msgstr "netištěno" + +#. Documentation/notation/input.itely:980 (variable) +msgid "allLyrics" +msgstr "všeText" + +#. Documentation/notation/input.itely:1066 (variable) +#. Documentation/notation/input.itely:1085 (variable) +#. Documentation/notation/input.itely:1122 (variable) +#. Documentation/notation/input.itely:1137 (variable) +#. Documentation/notation/changing-defaults.itely:460 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:21 (variable) +#. Documentation/snippets/guitar-slides.ly:30 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:18 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:138 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:168 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:66 (variable) +msgid "music" +msgstr "Noty" + +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely +msgid "General input and output" +msgstr "Všeobecný vstup a výstup" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Input structure" +msgstr "Skladba vstupu" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Structure of a score" +msgstr "Skladba notového zápisu" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple scores in a book" +msgstr "Více notových zápisů v knize" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "File structure" +msgstr "Stavba souboru" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Titles and headers" +msgstr "Názvy a záhlaví" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating titles" +msgstr "Vytvořit názvy" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Custom titles" +msgstr "Vlastní názvy" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Reference to page numbers" +msgstr "Odkazy na čísla stran" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Table of contents" +msgstr "Obsah" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Working with input files" +msgstr "Pracovat se vstupními soubory" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Including LilyPond files" +msgstr "Vložit soubory LilyPond" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Different editions from one source" +msgstr "Různá vydání z jednoho zdrojového souboru" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using variables" +msgstr "Použít proměnné" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using tags" +msgstr "Použít značky" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Text encoding" +msgstr "Kódování znaků" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Displaying LilyPond notation" +msgstr "Zobrazit notový zápis LilyPond" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Controlling output" +msgstr "Řídit výstup" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Extracting fragments of music" +msgstr "Vytáhnout části notového zápisu" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Skipping corrected music" +msgstr "Přeskočit opravené noty" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "Náhradní výstupní formáty" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "Změnit písmo notového zápisu" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "MIDI output" +msgstr "Výstup MIDI" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating MIDI files" +msgstr "Vytvořit soubory MIDI" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" +msgstr "Názvy nástrojů" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "MIDI block" +msgstr "Blok MIDI" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "What goes into the MIDI output?" +msgstr "Co jde do výstupu MIDI" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Supported in MIDI" +msgstr "Podporováno v MIDI" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Unsupported in MIDI" +msgstr "Nepodporováno v MIDI" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Repeats in MIDI" +msgstr "Opakování v MIDI" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Controlling MIDI dynamics" +msgstr "Řídit hlasitost MIDI" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Dynamic marks" +msgstr "Značky určující hlasitost" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Overall MIDI volume" +msgstr "Celková hlasitost MIDI" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (i)" +msgstr "Vyrovnání různých nástrojů (i)" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (ii)" +msgstr "Vyrovnání různých nástrojů (ii)" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Percussion in MIDI" +msgstr "Bicí v MIDI" + +#. Documentation/notation/spacing.itely:1009 (comment) +msgid "this does nothing" +msgstr "To nedělá vůbec nic" + +#. Documentation/notation/spacing.itely:1010 (comment) +msgid "a break here would work" +msgstr "Zalomení by zde účinkovalo" + +#. Documentation/notation/spacing.itely:1011 (comment) +msgid "as does this break" +msgstr "jako to dělá toto zalomení" + +#. Documentation/notation/spacing.itely:1023 (comment) +msgid "now the break is allowed" +msgstr "nyní je zalomení dovoleno" + +#. Documentation/notation/spacing.itely:1441 (comment) +msgid "Since space is small and there is no minimum-distance, the distance" +msgstr "Protože místa je málo a není tu ani nejmenší mezera, odstup," + +#. Documentation/notation/spacing.itely:1442 (comment) +msgid "between this staff and the next will be determined by padding." +msgstr "mezi notovou osnovou a dalším předmětem se rozhodne pomocí posunutí." + +#. Documentation/notation/spacing.itely:1448 (comment) +msgid "Since space is small and nothing sticks out very far, the distance" +msgstr "Protože místa je málo a nic nepřečnívá, odstup" + +#. Documentation/notation/spacing.itely:1449 (comment) +msgid "between this staff and the next will be determined by minimum-distance." +msgstr "" +"mezi touto notovou osnovou a dalším předmětem se určí podle nejmenší možné " +"vzdálenosti." + +#. Documentation/notation/spacing.itely:1455 (comment) +msgid "By setting padding to a negative value, staves can be made to collide." +msgstr "nastavením posunutí na zápornou hodnotu se notové osnovy mohou srazit" + +#. Documentation/notation/spacing.itely:1551 (comment) +msgid "By default, Lyrics are placed close together. Here, we allow them to" +msgstr "" +"Ve výchozím nastavení jsou písňové texty umístěny úzce pohromadě. Zde smějí" + +#. Documentation/notation/spacing.itely:1552 (comment) +msgid "be stretched more widely." +msgstr "zabrat o něco více místa." + +#. Documentation/notation/spacing.itely:1905 (comment) +msgid "this time the text will be closer to the staff" +msgstr "Tentokrát je text blíže k notové osnově" + +#. Documentation/notation/spacing.itely:1907 (comment) +msgid "by setting outside-staff-priority to a non-number," +msgstr "Nastavením outside-staff-priority na nečíselnou hodnotu," + +#. Documentation/notation/spacing.itely:1908 (comment) +msgid "we disable the automatic collision avoidance" +msgstr " zakážeme samočinné vyhnutí se srážce" + +#. Documentation/notation/spacing.itely:1911 (comment) +msgid "now they will collide" +msgstr "Nyní se srazí" + +#. Documentation/notation/spacing.itely:1937 (comment) +msgid "the markup is too close to the following note" +msgstr "Popis je příliš blízko k následující notě" + +#. Documentation/notation/spacing.itely:1941 (comment) +msgid "setting outside-staff-horizontal-padding fixes this" +msgstr "Nastavení outside-staff-horizontal-padding pomáhá" + +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely +msgid "Spacing issues" +msgstr "Odstupy" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Paper and pages" +msgstr "Papír a strany" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size" +msgstr "Velikost papíru" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Page formatting" +msgstr "Formátování stran" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Vertical dimensions" +msgstr "Svislé rozměry" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Horizontal dimensions" +msgstr "Vodorovné rozměry" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Other layout variables" +msgstr "Další proměnné rozvržení" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Music layout" +msgstr "Rozvržení not" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" +msgstr "Nastavit velikost notové osnovy" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Score layout" +msgstr "Rozvržení notového zápisu" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Breaks" +msgstr "Zalomení" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line breaking" +msgstr "Zalomení řádků" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Page breaking" +msgstr "Zalomení stran" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page breaking" +msgstr "Nejlepší zalomení stran" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page turning" +msgstr "Nejlepší obracení stran" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Minimal page breaking" +msgstr "Co nejmenší zalomení stran" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit breaks" +msgstr "Výslovné zalomení" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Using an extra voice for breaks" +msgstr "Použít pro zalomení dodatečný hlas" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Vertical spacing" +msgstr "Svislé odstupy" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical spacing inside a system" +msgstr "Svislé odstupy uvnitř notové osnovy" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing between staves" +msgstr "Odstup mezi notovými osnovami" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "Odstup mezi linkami nejsoucími v notové osnově" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical spacing between systems" +msgstr "Svislé odstupy mezi notovými osnovami" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit staff and system positioning" +msgstr "Výslovní umísťování notových osnov" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical collision avoidance" +msgstr "Vyhnutí se svislým srážkám" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Horizontal spacing" +msgstr "Vodorovné odstupy" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing overview" +msgstr "Přehled vodorovných odstupů" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "New spacing area" +msgstr "Nová oblast s jinými odstupy" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing horizontal spacing" +msgstr "Změnit vodorovné odstupy" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line length" +msgstr "Délka řádků" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Proportional notation" +msgstr "Poměrný notový zápis" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Fitting music onto fewer pages" +msgstr "Umístit hudbu na menší počet stran" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Displaying spacing" +msgstr "Zobrazit odstupy" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing spacing" +msgstr "Změnit odstupy" + +#. Documentation/notation/changing-defaults.itely:451 (variable) +msgid "musicA" +msgstr "NotyA" + +#. Documentation/notation/changing-defaults.itely:452 (variable) +msgid "musicB" +msgstr "NotyB" + +#. Documentation/notation/changing-defaults.itely:453 (variable) +msgid "keepVoicesAlive" +msgstr "nechHlasŽít" + +#. Documentation/notation/changing-defaults.itely:455 (comment) +msgid "Keep Voice \\\"A\\\" alive for 5 bars" +msgstr "Nech hlas \\\"A\\\" žít po 5 taktů" + +#. Documentation/notation/changing-defaults.itely:456 (comment) +msgid "Keep Voice \\\"B\\\" alive for 5 bars" +msgstr "Nech hlas \\\"B\\\" žít po 5 taktů" + +#. Documentation/notation/changing-defaults.itely:491 (variable) +#. Documentation/notation/changing-defaults.itely:502 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:513 (context id) +#. Documentation/notation/changing-defaults.itely:535 (variable) +#. Documentation/notation/changing-defaults.itely:551 (context id) +msgid "accompaniment" +msgstr "Doprovod" + +#. Documentation/notation/changing-defaults.itely:492 (variable) +#. Documentation/notation/changing-defaults.itely:541 (variable) +msgid "words" +msgstr "Slova" + +#. Documentation/notation/changing-defaults.itely:499 (comment) +msgid "Keep Voice \\\"melody\\\" alive for 4 bars" +msgstr "Nech hlas \\\"melodie\\\" žít po 4 takty" + +#. Documentation/notation/changing-defaults.itely:530 (comment) +#. Documentation/notation/changing-defaults.itely:532 (comment) +msgid "skip a bar" +msgstr "Přeskočit takt" + +#. Documentation/notation/changing-defaults.itely:2364 (comment) +msgid "increase the length of the tie" +msgstr "Zvětšit délku ligatury" + +#. Documentation/notation/changing-defaults.itely:2373 (comment) +msgid "increase the length of the rest bar" +msgstr "Zvětšit délku pomlkového taktu" + +#. Documentation/notation/changing-defaults.itely:2381 (comment) +msgid "increase the length of the hairpin" +msgstr "Zvětšit délku sponky pro crescendo/decrescendo" + +#. Documentation/notation/changing-defaults.itely:2409 (comment) +msgid "default" +msgstr "Výchozí" + +#. Documentation/notation/changing-defaults.itely:2412 (comment) +#. Documentation/notation/changing-defaults.itely:2425 (comment) +msgid "not effective alone" +msgstr "samotné bez účinku" + +#. Documentation/notation/changing-defaults.itely:2416 (comment) +#. Documentation/notation/changing-defaults.itely:2429 (comment) +msgid "effective only when both overrides are present" +msgstr "platí jen tehdy, když jsou přítomna obě \"override\"" + +#. Documentation/notation/changing-defaults.itely:2806 (comment) +msgid "Remove bar line at the end of the current line" +msgstr "Odstranit taktovou čáru na konci řádku" + +#. Documentation/notation/changing-defaults.itely:2852 (comment) +msgid "Try to remove all key signatures" +msgstr "Pokusit se o odstranění všech předznamenání (tónin)" + +#. Documentation/notation/changing-defaults.itely:3274 (comment) +msgid "move horizontally left" +msgstr "Posunout vodorovně doleva" + +#. Documentation/notation/changing-defaults.itely:3276 (comment) +msgid "move vertically up" +msgstr "Posunout svisle nahoru" + +#. Documentation/notation/changing-defaults.itely:3277 (comment) +msgid "third finger" +msgstr "třetí prst" + +#. Documentation/notation/changing-defaults.itely:3326 (comment) +#. Documentation/notation/changing-defaults.itely:3358 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:88 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "Umístit cvičnou značku do středu nad klíč" + +#. Documentation/notation/changing-defaults.itely:3332 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:95 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "Umístit cvičnou značku do středu nad taktové označení" + +#. Documentation/notation/changing-defaults.itely:3352 (comment) +msgid "the RehearsalMark will be centered above the Key Signature" +msgstr "Umístit cvičnou značku do středu nad předznamenání (tóninu)" + +#. Documentation/notation/changing-defaults.itely:3372 (comment) +msgid "The RehearsalMark will be centered above the KeySignature" +msgstr "Umístit cvičnou značku do středu nad předznamenání (tóninu)" + +#. Documentation/notation/changing-defaults.itely:3379 (comment) +#. Documentation/notation/changing-defaults.itely:3395 (comment) +#. Documentation/notation/changing-defaults.itely:3402 (comment) +msgid "" +"The RehearsalMark will be aligned with the left edge of the KeySignature" +msgstr "Zarovnat cvičnou značku s levým okrajem předznamenání (tóniny)" + +#. Documentation/notation/changing-defaults.itely:3384 (comment) +msgid "" +"The RehearsalMark will be aligned with the right edge of the KeySignature" +msgstr "Zarovnat cvičnou značku s pravým okrajem předznamenání (tóniny)" + +#. Documentation/notation/changing-defaults.itely:3396 (comment) +msgid "and then shifted right by 3.5 staff-spaces" +msgstr "Posunout doprava o 3,5 linkových odstupů" + +#. Documentation/notation/changing-defaults.itely:3403 (comment) +msgid "and then shifted left by 2 staff-spaces" +msgstr "Posunout doleva o 2 linkové odstupy" + +#. Documentation/notation/changing-defaults.itely:3451 (variable) +msgid "XinO" +msgstr "XinO" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely +msgid "Changing defaults" +msgstr "Změnit výchozí nastavení" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Interpretation contexts" +msgstr "Prostředí pro ztvárnění" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Score - the master of all contexts" +msgstr "Notový zápis - otec všech prostředí" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Top-level contexts - staff containers" +msgstr "Nejvrchnější prostředí - Schránky na notové osnovy" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Intermediate-level contexts - staves" +msgstr "Prostřední prostředí - Notové osnovy" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Bottom-level contexts - voices" +msgstr "Nejspodnější prostředí - Hlasy" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Keeping contexts alive" +msgstr "Udržet prostředí na živu" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying context plug-ins" +msgstr "Změnit přídavné moduly prostředí" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Changing context default settings" +msgstr "Změnit výchozí nastavení prostředí" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Defining new contexts" +msgstr "Stanovit nová prostředí" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning contexts" +msgstr "Zarovnat prostředí vedle sebe" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Explaining the Internals Reference" +msgstr "Vysvětlit doporučení vnitřní části programu" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Navigating the program reference" +msgstr "Vyznat se v doporučení vnitřní části programu" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Layout interfaces" +msgstr "Rozhraní rozvržení" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Determining the grob property" +msgstr "Určit vlastnost kreslených předmětů (grob)" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Naming conventions" +msgstr "Pravidla pro pojmenovávání" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Modifying properties" +msgstr "Změnit vlastnosti" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Overview of modifying properties" +msgstr "Přehled změněných vlastností" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The set command" +msgstr "Příkaz set" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "Příkaz @code{@bs{}set}" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The override command" +msgstr "Příkaz override" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "Příkaz @code{\\\\override}" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The tweak command" +msgstr "Příkaz tweak" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "Příkaz @code{\\\\tweak}" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "set versus override" +msgstr "Příkaz set oproti override" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "@code{\\\\set} versus @code{\\\\override}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Useful concepts and properties" +msgstr "Užitečné pojmy a vlastnosti" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Input modes" +msgstr "Vstupní režimy" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Direction and placement" +msgstr "Směr a umístění" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Context layout order" +msgstr "Pořadí rozvržení prostředí" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Distances and measurements" +msgstr "Odstupy a míry" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Staff symbol properties" +msgstr "Vlastnosti symbolů notové osnovy" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Spanners" +msgstr "Natahovače" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{spanner-interface}" +msgstr "Použít @code{spanner-interface}" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{line-spanner-interface}" +msgstr "Použít @code{line-spanner-interface}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Visibility of objects" +msgstr "Viditelnost předmětů" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Removing the stencil" +msgstr "Odstranit stencil (lisovnici)" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Making objects transparent" +msgstr "Udělat předměty neviditelné" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Painting objects white" +msgstr "Malovat předměty bílé" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using break-visibility" +msgstr "Použít break-visibility (udělat neviditelné)" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Special considerations" +msgstr "Zvláštnosti" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Line styles" +msgstr "Styly linek" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Rotating objects" +msgstr "Otáčení předmětů" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating layout objects" +msgstr "Otáčení předmětů rozvržení" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating markup" +msgstr "Otáčení textového popisu" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Advanced tweaks" +msgstr "Pokročílé drobné úpravy" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning objects" +msgstr "Zarovnat předměty" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Setting @code{X-offset} and @code{Y-offset} directly" +msgstr "Nastavit přímo @code{X-offset} a @code{Y-offset}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{side-position-interface}" +msgstr "Použít @code{side-position-interface}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{self-alignment-interface}" +msgstr "Použít @code{self-alignment-interface}" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{aligned-on-parent} procedures" +msgstr "Použít procedury @code{aligned-on-parent}" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{centered-on-parent} procedures" +msgstr "Použít procedury @code{centered-on-parent}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{break-alignable-interface}" +msgstr "Použít @code{break-aligned-interface}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Vertical grouping of grobs" +msgstr "Svislé seskupení kreslených předmětů („grob“)" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying stencils" +msgstr "Změnit lisovnice" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying shapes" +msgstr "Změnit tvary" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Modifying ties and slurs" +msgstr "Změnit ligatury a legatové obloučky" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Using music functions" +msgstr "Použít hudební funkce" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "Skladba nahrazovací funkce" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Common argument types" +msgstr "Běžné druhy agumentů" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "Příklady nahrazovací funkce" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +msgid "Notation manual tables" +msgstr "Přehled notového zápisu" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" +msgstr "Seznam názvů akordů" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" +msgstr "Běžné proměnné akordů" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined fretboard diagrams" +msgstr "Předem určené nákresy hmatníku" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" +msgstr "Nástroje MIDI" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" +msgstr "Seznam barev" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" +msgstr "Obvyklé barvy" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" +msgstr "Názvy barev X" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" +msgstr "Barvy bez číselného koncového označení:" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" +msgstr "Barvy s číselným koncovým označením:" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" +msgstr "Stupnice šedi" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" +msgstr "Písmo Feta" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "Obrázky notových klíčů" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Time Signature glyphs" +msgstr "Obrázky taktových označení" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "Obrázky čísel" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accidental glyphs" +msgstr "Obrázky předznamenání" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "Obrázky výchozích notových hlaviček" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "Obrázky zvláštních notových hlaviček" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "" +"Obrázky tvarovaných notových hlaviček (znázorňujících výšku tónu na hudební " +"stupnici tvarem hlavičky dané noty)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Rest glyphs" +msgstr "Obrázky pomlk" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "Obrázky praporků" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "Obrázky teček" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dynamic glyphs" +msgstr "Obrázky hudebních značek určujících hlasitost" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "Obrázky písem" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "Obrázky šipek" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "Obrázky špiček svorek" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "Obrázky pedálů" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "Obrázky tahacích harmonik" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "Vatikánské obrázky" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "Medicejské obrázky" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "Hufnagelské obrázky" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "Menzurální obrázky" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "Neomenzurální obrázky" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "Petrucciovské obrázky" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "Solesmeské obrázky" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Note head styles" +msgstr "Styly notových hlaviček" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of articulations" +msgstr "Seznam značek pro artikulaci" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Articulation scripts" +msgstr "Artikulační písma" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ornament scripts" +msgstr "Ozdobná písma" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "Korunní písma (fermátová)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "Písma nástrojům vlastní" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "Písma se znaménky pro opakování" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "Písma pro starý notový zápis" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Percussion notes" +msgstr "Noty pro bicí" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "Odborný slovníček" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "Seznam spojení (alist)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "Opětovné volání (callback)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "closure" +msgstr "Uzavření (closure)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "Obrázek (glyph)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "Kreslený předmět (grob)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "Neměnný (immutable)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "interface" +msgstr "Rozhraní (infterface)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "lexer" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "Měnitelný (mutable)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "Stanovení výstupu (output-def)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "Zpracovatel skladby (parser)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "Proměnná pro zpracovatele skladby (parser variable)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "prob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "Jednoduché uzavření (simple closure)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "smob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "All context properties" +msgstr "Všechny vlastnosti prostředí" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Layout properties" +msgstr "Vlastnosti rozvržení" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "Dostupné hudební funkce" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Scheme functions" +msgstr "Funkce v Scheme" + +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +msgid "Cheat sheet" +msgstr "Přehled příkazů" + +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "\\\\TEXT\\\\" + +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "Spustit lilypond" + +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "Spustit @command{lilypond}" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "Běžné používání programu" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "Používání v příkazovém řádku" + +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "Vyvolat lilypond" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "Vyvolat @command{lilypond}" + +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "Volby příkazového řádku pro lilypond" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "Volby příkazového řádku pro @command{lilypond}" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "Proměnné prostředí" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "Chybová hlášení" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "Běžné chyby" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "Noty přečnívají přes okraj strany" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "Objevuje se dodatečná notová osnova" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "Zjevná chyba v ../ly/init.ly" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "Zjevná chyba v @code{../ly/init.ly}" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "Chybové hlášení nesvázaná proměnná %" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "Chybové hlášení FT_Get_Glyph_Name" + +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "Obnovit soubory s convert-ly" + +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "Obnovit soubory s @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "Proč se mění skladba?" + +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "Vyvolat convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "Vyvolat @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "Volby příkazového řádku pro convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "Volby příkazového řádku pro @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "Potíže se spuštěním convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "Potíže se spuštěním @code{convert-ly}" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "Ruční převod" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" +msgstr "lilypond-book" + +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "Vyvolat @command{lilypond-book}" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "Hudebněvědný text jako příklad" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "Vstup" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "Zpracovávání" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "Výstup" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" +msgstr "Začlenění not do textu" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "LaTeX" + +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" +msgstr "@LaTeX{}" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "Texinfo" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "HTML" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "DocBook" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "Běžná pravidla" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "Zařadit soubor LilyPondu" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "Zařadit kód LilyPondu" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "Přeložit dokument DocBook" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" +msgstr "Volby pro hudební části" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "Vyvolat lilypond-book" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "Vyvolat @command{lilypond-book}" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "Příkazy odvisející od formátu" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "Volby příkazového řádku" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "Souborové přípony" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "Předlohy lilypond-book" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "html" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "xelatex" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "Náhradní způsoby míchání textu a not" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "Náhradní způsoby míchání textu a not" + +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "Vnější programy" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "Ukázat a klepnout" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "Podpora textových editorů" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "Režim Emacs" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "Režim Vim" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "Jiné editory" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "Převést z jiných formátů" + +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "Vyvolat midi2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "Vyvolat @command{midi2ly}" + +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "Vyvolat muscxml2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "Vyvolat @command{muscxml2ly}" + +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "Vyvolat abc2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "Vyvolat @command{abc2ly}" + +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "Vyvolat etf2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "Vyvolat @command{etf2ly}" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "Other formats" +msgstr "Jiné formáty" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "Výstup LilyPondu v jiných programech" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "Mnoho uvozovek z dlouhého notového zápisu" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "Vložit noty z LilyPondu do OpenOffice.org" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "Vložit noty z LilyPondu do jiných programů" + +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "Nezávislá zahrnutí úryvků" + +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "Nezávislá zahrnutí úryvků @code{include}" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "MIDI articulation" +msgstr "Artikulace MIDI" + +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +msgid "Suggestions for writing files" +msgstr "Návrhy, jak se mají zapsat soubory LilyPond" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "Obecné návrhy" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "Sazba stávající hudby" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "Velké projekty" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "Hledání chyb" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "Make a Makefiles" + +#. Documentation/snippets/accordion-discant-symbols.ly:37 (variable) +msgid "discant" +msgstr "Diskant" + +#. Documentation/snippets/accordion-discant-symbols.ly:40 (variable) +msgid "dot" +msgstr "Tečka" + +#. Documentation/snippets/accordion-discant-symbols.ly:46 (comment) +msgid "16 voets register" +msgstr "16 voets register" + +#. Documentation/snippets/accordion-discant-symbols.ly:47 (variable) +msgid "accBasson" +msgstr "accBasson" + +#. Documentation/snippets/accordion-discant-symbols.ly:53 (comment) +msgid "een korig 8 en 16 voets register" +msgstr "een·korig·8·en·16·voets·register" + +#. Documentation/snippets/accordion-discant-symbols.ly:54 (variable) +msgid "accBandon" +msgstr "accBandon" + +#. Documentation/snippets/accordion-discant-symbols.ly:62 (variable) +msgid "accVCello" +msgstr "accVCello" + +#. Documentation/snippets/accordion-discant-symbols.ly:72 (comment) +msgid "4-8-16 voets register" +msgstr "4-8-16·voets·register" + +#. Documentation/snippets/accordion-discant-symbols.ly:73 (variable) +msgid "accHarmon" +msgstr "accHarmon" + +#. Documentation/snippets/accordion-discant-symbols.ly:83 (variable) +msgid "accTrombon" +msgstr "accPozoun" + +#. Documentation/snippets/accordion-discant-symbols.ly:95 (comment) +msgid "eenkorig 4 en 16 voets register" +msgstr "eenkorig·4·en·16·voets·register" + +#. Documentation/snippets/accordion-discant-symbols.ly:96 (variable) +msgid "accOrgan" +msgstr "accVarhany" + +#. Documentation/snippets/accordion-discant-symbols.ly:104 (variable) +msgid "accMaster" +msgstr "accHlavní" + +#. Documentation/snippets/accordion-discant-symbols.ly:118 (variable) +msgid "accAccord" +msgstr "accAkord" + +#. Documentation/snippets/accordion-discant-symbols.ly:130 (variable) +msgid "accMusette" +msgstr "accMusette" + +#. Documentation/snippets/accordion-discant-symbols.ly:140 (variable) +msgid "accCeleste" +msgstr "accCelesta" + +#. Documentation/snippets/accordion-discant-symbols.ly:148 (variable) +msgid "accOboe" +msgstr "accHoboj" + +#. Documentation/snippets/accordion-discant-symbols.ly:156 (variable) +msgid "accClarin" +msgstr "accKlarina" + +#. Documentation/snippets/accordion-discant-symbols.ly:162 (variable) +msgid "accPiccolo" +msgstr "accPikola" + +#. Documentation/snippets/accordion-discant-symbols.ly:168 (variable) +msgid "accViolin" +msgstr "accHousle" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:49 (variable) +msgid "continuo" +msgstr "Continuo" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:61 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +msgid "bassStaff" +msgstr "BasováNotováOsnova" + +#. Documentation/snippets/adding-drum-parts.ly:49 (variable) +msgid "drh" +msgstr "drh" + +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) +msgid "drl" +msgstr "drl" + +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) +msgid "timb" +msgstr "timb" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:26 (variable) +#. Documentation/snippets/jazz-combo-template.ly:218 (context id) +#. Documentation/snippets/jazz-combo-template.ly:227 (context id) +msgid "two" +msgstr "dvě" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:27 (variable) +msgid "threeTwo" +msgstr "třiDvě" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +msgid "threeFour" +msgstr "třiČtyři" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "ZnačkaTaktováČáraRozděleníNotovéOsnovy" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "TaktováČáraRozděleníNotovéOsnovy" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:32 (comment) +msgid "first, define a variable to hold the formatted date:" +msgstr "Nejprve stanovte proměnnou pro formátované datum:" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (variable) +msgid "date" +msgstr "Datum" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) +msgid "d-%m-%Y\\\" (localtime (current-time)))" +msgstr "d-%m-%Y\\\" (localtime (current-time)))" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:35 (comment) +msgid "use it in the title block:" +msgstr "Použít pro název:" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:46 (comment) +msgid "and use it in a \\markup block:" +msgstr "a použít v prostředí \\markup" + +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:50 (variable) +msgid "voiceFive" +msgstr "HlasPět" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:33 (comment) +msgid "Default layout:" +msgstr "Výchozí rozvržení:" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:42 (comment) +msgid "Reducing the minimum space below the staff and above the lyrics:" +msgstr "Nejmenší velikost místa pod notovou osnovou a nad textem zpěvu:" + +#. Documentation/snippets/aligning-bar-numbers.ly:59 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:45 (comment) +msgid "Increase the size of the bar number by 2" +msgstr "Zvětšit číslo taktu o činitele 2" + +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Print a bar number every second measure" +msgstr "Číslo taktu nastavit každý druhý takt" + +#. Documentation/snippets/aligning-bar-numbers.ly:64 (comment) +msgid "Center-align bar numbers" +msgstr "Čísla taktů zarovnat na střed" + +#. Documentation/snippets/aligning-bar-numbers.ly:67 (comment) +msgid "Left-align bar numbers" +msgstr "Čísla taktů zarovnat vlevo" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:103 (comment) +msgid "the RehearsalMark will be centered above the KeySignature" +msgstr "Umístit cvičnou značku do středu nad předznamenání (tóninu)" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:114 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:126 (comment) +msgid "" +"the RehearsalMark will be aligned with the left edge of the KeySignature" +msgstr "Zarovnat cvičnou značku s levým okrajem předznamenání (tóniny)" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:120 (comment) +msgid "" +"the RehearsalMark will be aligned with the right edge of the KeySignature" +msgstr "Zarovnat cvičnou značku s pravým okrajem předznamenání (tóniny)" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:127 (comment) +msgid "and then shifted right by one unit." +msgstr "Posunout doprava o jednu jednotku." + +#. Documentation/snippets/ancient-fonts.ly:36 (variable) +#. Documentation/snippets/ancient-fonts.ly:36 (context id) +msgid "upperStaff" +msgstr "NotováOsnovaNahoře" + +#. Documentation/snippets/ancient-fonts.ly:48 (comment) +msgid "\\break % 1 (8*1)" +msgstr "\\break % 1 (8*1)" + +#. Documentation/snippets/ancient-fonts.ly:59 (comment) +msgid "\\break %2 (8*1)" +msgstr "\\break·%2·(8*1)" + +#. Documentation/snippets/ancient-fonts.ly:71 (comment) +msgid "\\break % 3 (8*1)" +msgstr "\\break·%·3·(8*1)" + +#. Documentation/snippets/ancient-fonts.ly:86 (comment) +msgid "\\break % 4 (8*1)" +msgstr "\\break·%·4·(8*1)" + +#. Documentation/snippets/ancient-fonts.ly:95 (comment) +#. Documentation/snippets/ancient-fonts.ly:157 (comment) +msgid "\\break % 5 (8*1)" +msgstr "\\break·%·5·(8*1)" + +#. Documentation/snippets/ancient-fonts.ly:109 (comment) +#. Documentation/snippets/ancient-fonts.ly:172 (comment) +msgid "\\break % 6 (8*1)" +msgstr "\\break·%·6·(8*1" + +#. Documentation/snippets/ancient-fonts.ly:118 (comment) +#. Documentation/snippets/ancient-fonts.ly:182 (comment) +msgid "\\break % 7 (8*1)" +msgstr "\\break·%·7·(8*1)" + +#. Documentation/snippets/ancient-fonts.ly:125 (comment) +msgid "\\break % 8 (8*1)" +msgstr "\\break·%·8·(8*1)" + +#. Documentation/snippets/ancient-fonts.ly:128 (comment) +msgid "\\break % 12 (32*1)" +msgstr "\\break·%·12·(32*1)" + +#. Documentation/snippets/ancient-fonts.ly:133 (variable) +#. Documentation/snippets/ancient-fonts.ly:133 (context id) +msgid "lowerStaff" +msgstr "NotováOsnovaDole" + +#. Documentation/snippets/ancient-fonts.ly:143 (comment) +msgid "\\break % 2 (16*1)" +msgstr "\\break·%·2·(16*1)" + +#. Documentation/snippets/ancient-fonts.ly:148 (comment) +msgid "\\break % 4 (16*1)" +msgstr "\\break·%·4·(16*1)" + +#. Documentation/snippets/ancient-fonts.ly:187 (comment) +msgid "\\break % 9 (16*1)" +msgstr "\\break·%·9·(16*1)" + +#. Documentation/snippets/ancient-fonts.ly:189 (comment) +msgid "lig" +msgstr "lig" + +#. Documentation/snippets/ancient-fonts.ly:193 (comment) +msgid "\\break % 11 (16*1)" +msgstr "\\break·%·11·(16*1)" + +#. Documentation/snippets/ancient-fonts.ly:204 (comment) +msgid "\\break % 12 (8*1)" +msgstr "\\break·%·12·(8*1)" + +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" +msgstr "Nápěv" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "Sloka 1 — Salve, Regína" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "Sloka 2 — Vita, dulcédo" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "\\divisioMinima" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "\\[ a\\melisma \\flexa g\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "\\[ e\\melisma \\flexa d\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "\\divisioMaior" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "\\finalis" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "Sloka 3 — Ad te clamámus" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "Sloka 4 — Ad te suspirámus" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "Sloka 5 — Eia ergo, Advocáta nostra" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "Sloka 6 — Et Jesum" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "Sloka 7 ad finem — O clemens: O pia: O dulcis Virgo María" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:51 (variable) +msgid "chant" +msgstr "Zpěv" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:58 (variable) +msgid "verba" +msgstr "Verba" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:67 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:114 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:133 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:150 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:169 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:184 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:205 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:218 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:237 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) +msgid "incipit" +msgstr "Incipit" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +msgid "tight spacing" +msgstr "Hustá sazba" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:76 (comment) +msgid "turn off bar lines" +msgstr "Vypnout taktové čáry" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:80 (comment) +msgid "need this extra \\skip such that clef change comes" +msgstr "Nezbytný dodatečný \\skip, aby nastala změna klíče" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:81 (comment) +msgid "after bar line" +msgstr "Po taktové čáře" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:85 (comment) +msgid "CHECK: no effect?" +msgstr "CHECK: žádný účinek?" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +msgid "turn bar lines on again" +msgstr "Znovu zapnout taktové čáry" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:94 (comment) +msgid "FIXME: setting printKeyCancellation back to #t must not" +msgstr "FIXME: nastavení printKeyCancellation opět naf #t se nesmí" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:95 (comment) +msgid "occur in the first bar after the incipit. Dto. for forceClef." +msgstr "Objevuje se v prvním taktu po incipit. Právě tak pro forceClef." + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) +msgid "Therefore, we need an extra \\skip." +msgstr "Proto je potřeba dodatečné \\skip" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:101 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) +msgid "the actual music" +msgstr "Vlastní noty" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) +msgid "let finis bar go through all staves" +msgstr "Nastavit taktovou čáru finis (konec) přes všechny notové osnovy" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:106 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) +msgid "finis bar" +msgstr "Taktová čára finis (konec)" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:110 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) +msgid "discantusNotes" +msgstr "DiskantNoty" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:153 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:173 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:187 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:198 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:209 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:221 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) +msgid "two bars" +msgstr "Dva takty" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:117 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) +msgid "eight bars" +msgstr "Osm taktů" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) +msgid "one bar" +msgstr "Jeden takt" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:132 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) +msgid "discantusLyrics" +msgstr "DiskantText" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:146 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) +msgid "altusNotes" +msgstr "AltNoty" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) +msgid "seven bars" +msgstr "Sedm taktů" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:168 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) +msgid "altusLyrics" +msgstr "AltText" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:180 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) +msgid "tenorNotes" +msgstr "TenorNoty" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) +msgid "four bars" +msgstr "Čtyři takty" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:204 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) +msgid "tenorLyrics" +msgstr "TenorText" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:214 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) +msgid "bassusNotes" +msgstr "BasNoty" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:236 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) +msgid "bassusLyrics" +msgstr "BasText" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:247 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) +msgid "choirStaff" +msgstr "SborOsnova" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:269 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) +msgid "no bars in staves" +msgstr "Žádné taktové čáry v notových osnovách" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:272 (comment) +msgid "incipit should not start with a start delimiter" +msgstr "Incipit nemá začínat počátečním oddělovačem (svorkou notové osnovy)" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:278 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) +msgid "no slurs" +msgstr "Žádné legatové obloučky" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:281 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) +msgid "Comment in the below \\\"\\remove\\\" command to allow line" +msgstr "Opatřit poznámkou příkaz níže \\\"\\remove\\\", aby bylo povoleno" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) +msgid "breaking also at those barlines where a note overlaps" +msgstr "" +"zalomení řádků i na těch taktových čarách, kde noty taktovou čáru přesahují" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) +msgid "into the next bar. The command is commented out in this" +msgstr "do dalšího taktu. Příkaz v tomto malém příkladu notového zápisu" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) +msgid "short example score, but especially for large scores, you" +msgstr "opatřen poznámkou není, ale obzvláště u rozsáhlejších notových zápisů" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) +msgid "will typically yield better line breaking and thus improve" +msgstr "se vyplatí lepší zalamování řádků a" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) +msgid "overall spacing if you comment in the following command." +msgstr "zlepší se i celkové rozdělení not, použije-li se následující příkaz:" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) +msgid "\\remove \\\"Forbid_line_break_engraver\\\"" +msgstr "\\remove·\\\"Forbid_line_break_engraver\\\"" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:96 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) +msgid "fragment" +msgstr "Část" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:25 (comment) +msgid "Default behavior" +msgstr "Výchozí chování" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:31 (comment) +msgid "Corrected to avoid collisions" +msgstr "Opraveno kvůli vyhnutí se střetům" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "Zde vyjmout: Začít od 'bbarred.ly'" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "PostScript -------------------------------" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "pScript" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "Změnit s B, pokud tomu dáváte přednost" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "(B)show %%změnit s C, pokud tomu dáváte přednost" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "Natahovač -----------------------------------" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" +"Skladba: \\bbarre #\\\"Text\\\" { Noty } - Text = jakékoli číslo schránky" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "bbarre" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "Zrušit poznámku u tohoto řádku k obdržení plného barré" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "Zde vyjmout --- Ukončit 'bbarred.ly' " + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "" +"Kopírovat a změnit poslední řádek pro plné barré. Přejmenujte je v 'fbarred." +"ly'" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" +"Skladba: \\bbarre #\\\"Text\\\" { Noty } - Text = jakékoli číslo schránky" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) +msgid "Set default beaming for all staves" +msgstr "Nastavit automatické trámce pro všechny notové osnovy" + +#. Documentation/snippets/beam-endings-in-score-context.ly:61 (comment) +msgid "Modify beaming for just this staff" +msgstr "Změnit trámce jen pro tuto notovou osnovu" + +#. Documentation/snippets/beam-endings-in-score-context.ly:67 (comment) +msgid "Inherit beaming from Score context" +msgstr "Převzít trámce z prostředí notového zápisu" + +#. Documentation/snippets/beam-endings-in-score-context.ly:73 (comment) +msgid "Modify beaming for this voice only" +msgstr "Změnit trámce jen pro tento hlas" + +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) +msgid "rhythm 2-3-2" +msgstr "Rytmus 2-3-2" + +#. Documentation/snippets/book-parts.ly:22 (comment) +msgid "book paper, which is inherited by all children bookparts" +msgstr "Papír knihy, je převzat všemi podřízenými částmi knihy" + +#. Documentation/snippets/book-parts.ly:25 (comment) +msgid "Page footer: add a different part-tagline at part last page" +msgstr "" +"Zápatí strany: přidat jiné heslo (tagline) pro poslední stranu této části" + +#. Documentation/snippets/book-parts.ly:29 (comment) +msgid "Copyright header field only on book first page." +msgstr "Pole hlavičky s autorským právem pouze na první straně knihy" + +#. Documentation/snippets/book-parts.ly:33 (comment) +msgid "Part tagline header field only on each part last page." +msgstr "Pole s heslem k části jen na poslední straně každé části" + +#. Documentation/snippets/book-parts.ly:37 (comment) +msgid "Tagline header field only on book last page." +msgstr "Pole s heslem jen na poslední straně každé části" + +#. Documentation/snippets/book-parts.ly:44 (comment) +msgid "book header, which is inherited by the first bookpart" +msgstr "Záhlaví knihy převzaté první částí knihy" + +#. Documentation/snippets/book-parts.ly:53 (comment) +msgid "a different page breaking function may be used on each part" +msgstr "Pro každou z částí je možné použít jinou funkci zalomení strany" + +#. Documentation/snippets/breathing-signs.ly:20 (comment) +msgid "this bar contains no \\breathe" +msgstr "Tento takt neobsahuje žádný \\breathe" + +#. Documentation/snippets/breathing-signs.ly:22 (comment) +msgid "Modern notation:" +msgstr "Novodobý notový zápis:" + +#. Documentation/snippets/breathing-signs.ly:23 (comment) +msgid "by default, \\breathe uses the rcomma, just as if saying:" +msgstr "" +"ve výchozím nastavení, \\breathe používá rcomma, jako kdyby člověk napsal:" + +#. Documentation/snippets/breathing-signs.ly:24 (comment) +msgid "" +"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" +"\\\")" +msgstr "" +"\\override·BreathingSign·#'text·=·#(make-musicglyph-markup·\\\"scripts.rcomma" +"\\\")" + +#. Documentation/snippets/breathing-signs.ly:27 (comment) +msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" +msgstr "rvarcomma·a·lvarcomma jsou obměnami rcomma a lcomma" + +#. Documentation/snippets/breathing-signs.ly:28 (comment) +msgid "N.B.: must use Staff context here, since we start a Voice below" +msgstr "" +"Dobře si všemněte, že: zde je potřeba použít prostředí notové osnovy, " +"protože dole začíná prostředí hlasu" + +#. Documentation/snippets/breathing-signs.ly:32 (comment) +msgid "vee" +msgstr "véčko" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) +msgid "construct the symbol" +msgstr "Vytvořit symbol" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) +msgid "set the breathe mark back to normal" +msgstr "Nastavit značku pro dech znovu na výchozí" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) +msgid "hairpinWithCenteredText" +msgstr "SponkaSVystředěnýmTextem" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) +msgid "hairpinMolto" +msgstr "SponkaMolto" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) +msgid "hairpinMore" +msgstr "SponkaVíce" + +#. Documentation/snippets/centering-markup-on-note-heads-automatically.ly:23 (variable) +msgid "textScriptCenterOnNote" +msgstr "PopisTextuNaStředNoty" + +#. Documentation/snippets/changing--flageolet-mark-size.ly:42 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:29 (variable) +msgid "smallFlageolet" +msgstr "MalýFlažolet" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +msgid "The following is only here to print the names of the" +msgstr "Následující je zde jen proto, aby byly nastaveny značky" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +msgid "chords styles; it can be removed if you do not need to" +msgstr "pro styly akordů. Lze odstranit, pokud je" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) +msgid "print them." +msgstr "nepotřebujete používat." + +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "Zde změnit pro jinou výchozí celkovou velikost notové osnovy." + +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:183 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) +msgid "{" +msgstr "{" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:185 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:203 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) +msgid "}" +msgstr "}" + +#. Documentation/snippets/chant-or-psalms-notation.ly:25 (variable) +msgid "stemOn" +msgstr "NožičkaZapnuta" + +#. Documentation/snippets/chant-or-psalms-notation.ly:26 (variable) +msgid "stemOff" +msgstr "NožičkaVypnuta" + +#. Documentation/snippets/chord-name-exceptions.ly:34 (comment) +msgid "modify maj9 and 6(add9)" +msgstr "Změnit maj9 a 6(add9)" + +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) +msgid "Exception music is chords with markups" +msgstr "Výjimečnými notami jsou akordy s textovými popisy" + +#. Documentation/snippets/chord-name-exceptions.ly:36 (variable) +msgid "chExceptionMusic" +msgstr "chVýjimečnéNoty" + +#. Documentation/snippets/chord-name-exceptions.ly:41 (comment) +msgid "Convert music to list and prepend to existing exceptions." +msgstr "Převést noty na seznam a připojit ke stávajícím výjimkám." + +#. Documentation/snippets/chord-name-exceptions.ly:42 (variable) +msgid "chExceptions" +msgstr "chVýjimky" + +#. Documentation/snippets/chord-name-exceptions.ly:46 (variable) +msgid "theMusic" +msgstr "Noty" + +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" +msgstr "MojeAkordy" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "Akordy" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +msgid "\\break" +msgstr "\\break" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "SlokaJedna" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "SlokaDvě" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +msgid "sop" +msgstr "Sop" + +#. Documentation/snippets/clip-systems.ly:38 (variable) +msgid "origScore" +msgstr "PůvodníNotovýZápis" + +#. Documentation/snippets/clip-systems.ly:56 (comment) +msgid "Each clip-region is a (START . END) pair" +msgstr "Každý výstřižek-oblast je dvojicí (START . END)" + +#. Documentation/snippets/clip-systems.ly:57 (comment) +msgid "where both are rhythmic-locations." +msgstr "přičemž oba jsou rytmickými místy" + +#. Documentation/snippets/clip-systems.ly:59 (comment) +msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" +msgstr "(make-rhythmic-locations TAKT-ČÍSLO ČITATEL JMENOVATEL)" + +#. Documentation/snippets/clip-systems.ly:60 (comment) +msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" +msgstr "znamená ČITATEL/JMENOVATEL celé noty v taktu s číslem TAKT-ČÍSLO" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) +msgid "Association list of pitches to colors." +msgstr "Přidělit výšky tónů určité barvě." + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) +msgid "Compare pitch and alteration (not octave)." +msgstr "Porovnat výšky tónů a alterace (ne oktávy)." + +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) +msgid "piuF" +msgstr "piuF" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:92 (variable) +msgid "musicUp" +msgstr "NotyNahoru" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:99 (variable) +msgid "musicDown" +msgstr "NotyDolů" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:30 (comment) +msgid "show hairpin" +msgstr "Ukázat svorku" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:32 (comment) +msgid "hide text span" +msgstr "Skrýt natahovač textu" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:36 (comment) +msgid "show glissando" +msgstr "Ukázat glissando" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) +msgid "parenF" +msgstr "SvorkaF" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) +msgid "the hidden measure and bar line" +msgstr "skrytý takt a taktová čára" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "\\cadenzaOn vypíná automatický výpočet čísel taktů" + +#. Documentation/snippets/cross-staff-tremolos.ly:31 (context id) +#. Documentation/snippets/jazz-combo-template.ly:254 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "Nahoře" + +#. Documentation/snippets/cross-staff-tremolos.ly:36 (context id) +#. Documentation/snippets/jazz-combo-template.ly:260 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "Dole" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:54 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) +msgid "Set global properties of fret diagram" +msgstr "Určit obecné vlastnosti nákresu pražce" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:54 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:75 (context id) +msgid "mel" +msgstr "Melodie" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:63 (comment) +msgid "C major for guitar, no barre, using defaults" +msgstr "C dur pro kytaru, žádné barré, výchozí nastavení" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:64 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:114 (comment) +msgid "terse style" +msgstr "Strohý styl" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:67 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:89 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" +msgstr "C dur pro kytaru, barré na třetím pražci" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:68 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:90 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" +msgstr "Podrobný styl" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +msgid "size 1.0" +msgstr "Velikost 1.0" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" +msgstr "Římské číslo pražce, prstoklad pod strunou, přímé barré" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +msgid "standard size" +msgstr "Obvyklá velikost" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" +msgstr "Ležící napříč, arabská čísla, M (ztlumit) pro němé struny" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +msgid "no barre, fret label down or left, small mute label font" +msgstr "Žádné barré, číslo pražce dole nebo vlevo, malé písmo pro němé struny" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:113 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" +msgstr "Jednoduchý D akord" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +msgid "larger dots, centered dots, fewer frets" +msgstr "Větší tečky, tečky na střed, méně pražců" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) +msgid "label below string" +msgstr "Označení pod" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:82 (comment) +msgid "add FretBoards for the Cuatro" +msgstr "Přidat hmatníky pro Cuatro" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:83 (comment) +msgid "Note: This section could be put into a separate file" +msgstr "Pozor: Tato část patří do vlastního souboru" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +msgid "predefined-cuatro-fretboards.ly" +msgstr "predefined-cuatro-fretboards.ly" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) +msgid "and \\included into each of your compositions" +msgstr "" +"a je pomocí \\include začleněna do každé vaší skladby, do každého zdrojového " +"souboru" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (variable) +msgid "cuatroTuning" +msgstr "CuatroLadění" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +msgid "dSix" +msgstr "dSexta" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:90 (variable) +msgid "dMajor" +msgstr "dDur" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +msgid "aMajSeven" +msgstr "aDurovýSeptakord" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +msgid "dMajSeven" +msgstr "dDurovýSeptakord" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) +msgid "gMajor" +msgstr "gDur" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:111 (comment) +msgid "end of potential include file /predefined-cuatro-fretboards.ly" +msgstr "Konec samostatného souboru /predefined-cuatro-fretboards.ly" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:116 (variable) +msgid "primerosNames" +msgstr "PrimerosNázvy" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:120 (variable) +msgid "primeros" +msgstr "Primeros" + +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) +msgid "baseMelody" +msgstr "ZákladníMelodie" + +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:71 (comment) +msgid "Must be lower than the actual number of staff lines" +msgstr "Musí být menší, než je současný počet linek notové osnovy" + +#. Documentation/snippets/displaying-complex-chords.ly:17 (variable) +msgid "fixA" +msgstr "fixA" + +#. Documentation/snippets/displaying-complex-chords.ly:20 (variable) +msgid "fixB" +msgstr "fixB" + +#. Documentation/snippets/displaying-grob-ancestry.ly:127 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "\\\" (make-string 36 #\\-))" + +#. Documentation/snippets/double-glissando.ly:21 (comment) +msgid "new voice ( = \\voiceOne), hidden" +msgstr "Nový hlas ( = \\voiceOne), skryt" + +#. Documentation/snippets/double-glissando.ly:23 (comment) +msgid "attach glissando to note heads" +msgstr "Glissando připojeno k notovým hlavičkám" + +#. Documentation/snippets/double-glissando.ly:28 (comment) +msgid "original voice with chords rearranged so that" +msgstr "původní hlas s akordy přeřazen do jiné skupiny," + +#. Documentation/snippets/double-glissando.ly:29 (comment) +msgid "glissando is attached to a & c" +msgstr "takže glissando je připojeno k a & c" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:17 (comment) +msgid "" +"Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "Dvě funkce pro natahovače (de)crescendo-, kde můžete výslovně uvést" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:18 (comment) +msgid "spanner text." +msgstr "text natahovače." + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:19 (variable) +msgid "mycresc" +msgstr "MojeCresc" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:25 (variable) +msgid "mydecresc" +msgstr "MojeDecresc" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:18 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "" +"Nějaké dynamické natahovače textu jako příklad, které mohou být použity jako " +"připojené operátory." + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:19 (variable) +msgid "crpoco" +msgstr "crpoco" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:24 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" +msgstr "" +"Nově vymezit stávající příkazy \\cresc, \\dim a \\decresc, aby se mohla " +"použít připojená skladba" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:25 (variable) +msgid "cresc" +msgstr "Cresc" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:30 (variable) +#. Documentation/snippets/fretted-headword.ly:56 (variable) +msgid "dim" +msgstr "Dim" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:35 (variable) +msgid "decresc" +msgstr "Decresc" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "NR 1.7 vydavatelské poznámky" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "Beethoven, Op. 31, No. 3" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "Klavírní sonáta 18, 2. věta, scherzo" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "Takty 9 - 14" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "Notová osnova RH" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "Notová osnova LH" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) +msgid "PostScript is a registered trademark of Adobe Systems Inc." +msgstr "PostScript je zapsanou obchodní značkou Adobe Systems Inc." + +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) +msgid "sample music" +msgstr "Příkladové noty" + +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) +msgid "topVoice" +msgstr "HorníHlas" + +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) +msgid "botVoice" +msgstr "DolníHlas" + +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) +msgid "hoom" +msgstr "hoom" + +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) +msgid "pah" +msgstr "pah" + +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) +msgid "setup for Request->Element conversion. Guru-only" +msgstr "setup·for·Request->Element·conversion.·Pouze pro odborníky" + +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:210 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:223 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:279 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:293 (variable) +msgid "MyStaff" +msgstr "MojeNotováOsnova" + +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "explicitly set instrumentName, so we don't get" +msgstr "Zadat výslovné NázvyNástrojů, aby se nevyskytly" + +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +msgid "weird effects when doing instrument names for" +msgstr "žádné podivné účinky, když jsou vytvářena označení nástrojů" + +#. Documentation/snippets/engravers-one-by-one.ly:142 (comment) +msgid "piano staves" +msgstr "pro klavírní notové osnovy" + +#. Documentation/snippets/engravers-one-by-one.ly:151 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:237 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:250 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:263 (variable) +msgid "MyVoice" +msgstr "MůjHlas" + +#. Documentation/snippets/engravers-one-by-one.ly:166 (comment) +msgid "must come before all" +msgstr "musí přijít přede všemi ostatními" + +#. Documentation/snippets/engravers-one-by-one.ly:176 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "\\consists·\\\"Rest_engraver\\\"" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "L. v. Beethoven, Op. 49 no. 1" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "Klavírní sonáta 19 - \\\"Leichte Sonate\\\"" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "Takty 1 - 12" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "\\layout {" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "\\context {" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "\\Score" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" +msgstr "\\override SpacingSpanner #'base-shortest-duration =" + +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "#(ly:make-moment 1 20)" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" + +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "Sonáta II, Allemanda" + +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "Takty 1 - 88" + +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "Kódováno Neil Puttock; upraveno Carl Sorensen" + +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +msgid "extendOn" +msgstr "extendOn" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "extendOff" + +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "violinoI" + +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "violinoII" + +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "violon" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:17 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:19 (variable) +msgid "centermarkup" +msgstr "VystředěnýPopis" + +#. Documentation/snippets/flamenco-notation.ly:54 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" +msgstr "Zde vyjmout ------- Začít od 'flamenco.ly'" + +#. Documentation/snippets/flamenco-notation.ly:56 (comment) +msgid "Text indicators" +msgstr "Ukazatelé textu" + +#. Documentation/snippets/flamenco-notation.ly:57 (variable) +msgid "abanico" +msgstr "abanico" + +#. Documentation/snippets/flamenco-notation.ly:58 (variable) +msgid "rasgueaso" +msgstr "rasgueaso" + +#. Documentation/snippets/flamenco-notation.ly:59 (variable) +msgid "alzapua" +msgstr "alzapua" + +#. Documentation/snippets/flamenco-notation.ly:61 (comment) +msgid "Finger stroke symbols" +msgstr "Symboly pro úder prsty" + +#. Documentation/snippets/flamenco-notation.ly:62 (variable) +msgid "strokeUp" +msgstr "ÚderNahoru" + +#. Documentation/snippets/flamenco-notation.ly:72 (variable) +msgid "strokeDown" +msgstr "ÚderDolů" + +#. Documentation/snippets/flamenco-notation.ly:82 (comment) +msgid "Golpe symbol" +msgstr "Symbol golpe" + +#. Documentation/snippets/flamenco-notation.ly:83 (variable) +msgid "golpe" +msgstr "golpe" + +#. Documentation/snippets/flamenco-notation.ly:97 (variable) +msgid "strokeUpGolpe" +msgstr "ÚderNahoruGolpe" + +#. Documentation/snippets/flamenco-notation.ly:98 (variable) +msgid "iUpGolpe" +msgstr "iNahoruGolpe" + +#. Documentation/snippets/flamenco-notation.ly:100 (comment) +msgid "Strokes for all fingers" +msgstr "Údery pro všechny prsty" + +#. Documentation/snippets/flamenco-notation.ly:101 (variable) +msgid "pUp" +msgstr "pNahoru" + +#. Documentation/snippets/flamenco-notation.ly:102 (variable) +msgid "pDown" +msgstr "pDolů" + +#. Documentation/snippets/flamenco-notation.ly:103 (variable) +msgid "iUp" +msgstr "iNahoru" + +#. Documentation/snippets/flamenco-notation.ly:104 (variable) +msgid "iDown" +msgstr "iDolů" + +#. Documentation/snippets/flamenco-notation.ly:105 (variable) +msgid "mUp" +msgstr "mNahoru" + +#. Documentation/snippets/flamenco-notation.ly:106 (variable) +msgid "mDown" +msgstr "mDolů" + +#. Documentation/snippets/flamenco-notation.ly:107 (variable) +msgid "aUp" +msgstr "aNahoru" + +#. Documentation/snippets/flamenco-notation.ly:108 (variable) +msgid "aDown" +msgstr "aDolů" + +#. Documentation/snippets/flamenco-notation.ly:109 (variable) +msgid "xUp" +msgstr "xNahoru" + +#. Documentation/snippets/flamenco-notation.ly:110 (variable) +msgid "xDown" +msgstr "xDolů" + +#. Documentation/snippets/flamenco-notation.ly:113 (comment) +msgid "Just handy :)" +msgstr "Velmi obratné :-)" + +#. Documentation/snippets/flamenco-notation.ly:114 (variable) +msgid "tupletOff" +msgstr "NtolaVypnuta" + +#. Documentation/snippets/flamenco-notation.ly:119 (variable) +msgid "tupletsOff" +msgstr "NtolyVypnuty" + +#. Documentation/snippets/flamenco-notation.ly:124 (variable) +msgid "tupletsOn" +msgstr "NtolyZapnuty" + +#. Documentation/snippets/flamenco-notation.ly:129 (variable) +msgid "headsOff" +msgstr "HlavičkyVypnuty" + +#. Documentation/snippets/flamenco-notation.ly:135 (variable) +msgid "headsOn" +msgstr "HlavičkyZapnuty" + +#. Documentation/snippets/flamenco-notation.ly:141 (comment) +msgid "Cut here ----- End 'flamenco.ly'" +msgstr "Zde vyjmout ----- Ukončit 'flamenco.ly' " + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:155 (comment) +msgid "Example 1" +msgstr "Příklad 1" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:161 (comment) +msgid "Example 2" +msgstr "Příklad 2" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:167 (comment) +msgid "Example 3" +msgstr "Příklad 3" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:175 (comment) +msgid "Example 4" +msgstr "Příklad 4" + +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) +msgid "slap" +msgstr "Úder" + +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +msgid "example" +msgstr "Příklad" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) +msgid "" +"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" +"msg00215.html" +msgstr "" +"Rady z http://lists.gnu.org/archive/html/lilypond-user/2007-12/msg00215." +"html" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +msgid "lyr" +msgstr "Text" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "Akord pro ukulele" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" +msgstr "Akord pro ukulele, s formátováním obsaženým v řetězci s vymezením" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) +msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" +msgstr "1.2 * velikost, 4 struny, čtyři pražce, prstoklad dole" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) +msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" +msgstr "" +"Velikost tečky .35 mezery mezi pražci, poloha tečky .55 mezery mezi pražci" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) +msgid "These chords will be in normal orientation" +msgstr "Tyto akordy jsou v obvyklém natočení" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) +#, python-format +msgid "110% of default size" +msgstr "110% výchozí velikosti" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) +msgid "Double barre used to test barre function" +msgstr "Zdvojené barré pro vyzkoušení funkce barré" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) +msgid "C major for guitar, with capo on third fret" +msgstr "C dur pro kytaru, s capo na třetím pražci" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) +msgid "simple D chord, large top fret thickness" +msgstr "Jednoduchý D akord, tloušťka pražců nahoře velká" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) +msgid "These chords will be in landscape orientation" +msgstr "Tyto akordy budou natočeny napříč" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) +msgid "These chords will be in opposing-landscape orientation" +msgstr "Tyto akordy budou natočeny napříč na hlavě" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "Zkratky" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +msgid "fingering orientations" +msgstr "Natočení prstokladu" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "sfol" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "sfor" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "sfod" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "sfou" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "Natočení čísel strun" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "ssnol" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "(dolů vpravo nahoru)" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "ssnou" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "ssnoud" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +msgid "ssnor" +msgstr "ssnor" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "Vymezit posun prstokladu" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "FO" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "Popisy" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +msgid "rit" +msgstr "Rit" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "Andantino" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "BenMarcato" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "pdolce" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "NOTY %%%" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "T. 1" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "T. 2" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "T. 3" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "T. 4" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "m. 5" +msgstr "T. 5" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "Konec taktu 6" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 7" +msgstr "T. 7" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "Začátek taktu 8" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "Konec taktu 8" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "Konec T. 9" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 10" +msgstr "T. 10" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "Začátek taktu 11" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "Konec taktu 11" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "Začátek taktu 2" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "Konec taktu 2" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "Nová část začíná zde v a moll" + +#. Documentation/snippets/fretted-headword.ly:128 (comment) +msgid "beg m. 6" +msgstr "Začátek taktu 6" + +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "end m. 6" +msgstr "Konec taktu 6" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "m. 8" +msgstr "T. 8" + +#. Documentation/snippets/fretted-headword.ly:135 (comment) +msgid "beg m. 9" +msgstr "Začátek taktu 9" + +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "end m. 9" +msgstr "Konec taktu 9" + +#. Documentation/snippets/fretted-headword.ly:140 (comment) +msgid "m. 11" +msgstr "T. 11" + +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:180 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:58 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +msgid "guitar" +msgstr "Kytara" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:51 (comment) +msgid "this moves them up one staff space from the default position" +msgstr "" +"Tím budou posunuty o jednu mezeru mezi linkami notové osnovy nahoru od " +"výchozí polohy" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:69 (comment) +msgid "set up grids" +msgstr "Nastavit mřížky" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) +msgid "set the grid interval to one quarter note" +msgstr "Odstup mřížky nastavit na jednu čtvrťovou notu" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:77 (comment) +msgid "this moves them to the right half a staff space" +msgstr "" +"Tím budou posunuty doprava o polovinu mezery mezi linkami notové osnovy" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) +msgid "hides staff and notes so that only the grid lines are visible" +msgstr "Skryje notovou osnovu a noty, tudíž jsou viditelné pouze čáry mřížky" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) +msgid "dummy notes to force regular note spacing" +msgstr "Slepé noty, aby noty byly rozděleny pravidelně" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) +msgid "center grid lines horizontally below note heads" +msgstr "Vystředit čáry mřížky vodorovně pod notovými hlavičkami" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +msgid "set line length and positioning:" +msgstr "Nastavit délku a polohu čar:" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +msgid "two staff spaces above center line on hidden staff" +msgstr "" +"Dvě mezery mezi linkami notové osnovy nad středovou čárou na skryté notové " +"osnově" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) +msgid "to four spaces below center line on visible staff" +msgstr "" +"Až čtyři mezery mezi linkami notové osnovy pod středovou čárou na viditelné " +"notové osnově" + +#. Documentation/snippets/guitar-slides.ly:20 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "Skrýt čísla pražců: užitečné pro zapsání pohybu z/k jakéhokoli" + +#. Documentation/snippets/guitar-slides.ly:21 (comment) +msgid "the fretboard." +msgstr "bodu hmatníku." + +#. Documentation/snippets/guitar-slides.ly:22 (variable) +msgid "hideFretNumber" +msgstr "SkrýtČíslaPražců" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) +msgid "drum" +msgstr "Buben" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +msgid "Solution 1: Using a simple markup with a particular halign value" +msgstr "Řešení 1: Používání jednoduchého popisu s vodorovným posunutím" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" +msgstr "Nevýhoda: Je to jen popis, ne dynamický příkaz, takže \\dynamicDown" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) +msgid "etc. will have no effect" +msgstr "atd. nebude účinkovat" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) +msgid "semppMarkup" +msgstr "semppPopis" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +msgid "Solution 2: Using a dynamic script & shifting with" +msgstr "Řešení 2: Používání dynamického skriptu a posunutí" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +msgid "\\once \\override ... #'X-offset = .." +msgstr "·\\once\\override ... #'X-offset = .." + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) +msgid "Drawback: \\once \\override needed for every invocation" +msgstr "Nevýhoda: \\once \\override se musí napsat pokaždé" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) +msgid "semppK" +msgstr "semppK" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +msgid "Solution 3: Padding the dynamic script so the center-alignment" +msgstr "Řešení 3: Dynamický skript posunout tak, že" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +msgid "puts it at the correct position" +msgstr "přijde přes zarovnání na střed do správné polohy" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) +msgid "" +"Drawback: the padding really reserves the space, nothing else can be there" +msgstr "Nevýhoda: Posunutí ponechá volné místo, kde nemůže stát nic jiného" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) +msgid "semppT" +msgstr "semppT" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" +msgstr "Řešení 4: Dynamika, nastavení rozměrů dodatečného textu na 0" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" +msgstr "Nevýhoda: LilyPond věří, že \\\"sempre\\\" nezaujímá žádné místo" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +msgid "other stuff there => collisions" +msgstr "a může sem postavit jiné věci·-->·Střety" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" +msgstr "Nevýhoda: Zdá se, že jsou tu ještě nějaké okraje, takže to není" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) +msgid "same alignment as without the additional text" +msgstr "přesně to samé umístění, jako je bez dodatečného textu" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) +msgid "semppM" +msgstr "semppM" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) +msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" +msgstr "Řešení 5: Dynamika s výslovným posunutím ve funkci Scheme" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) +msgid "semppG" +msgstr "semppG" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "Řešení 6: Dynamika s výslovným zarovnáním. Projeví se jen tehdy," + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "když je nastaven i X-offset!" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) +msgid "Drawback: One needs to set DynamicText #'X-offset!" +msgstr "Nevýhoda: Musí se nastavit DynamicText #'X-offset" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "Nevýhoda: Zarovnáno při pravém okraji dodatečného textu," + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "ne na střed pp" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) +msgid "semppMII" +msgstr "semppMII" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) +msgid "s" +msgstr "s" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) +msgid "sMarkup" +msgstr "sPopis" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) +msgid "sK" +msgstr "sK" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) +msgid "sT" +msgstr "sT" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) +msgid "sM" +msgstr "sM" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) +msgid "sG" +msgstr "sG" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) +msgid "sMII" +msgstr "sMII" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) +msgid "Setting to ##f (false) gives the same result" +msgstr "Nastaveno na chybně (##f) dává stejný výsledek" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:33 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:57 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:56 (variable) +msgid "harmonies" +msgstr "Harmonie" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" +msgstr "TOTO JE PŘÍKAZ PRO POSUNUTÍ NÁZVU AKORDU" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) +msgid "THIS LINE IS THE SECOND METHOD" +msgstr "TENTO ŘÁDEK JE DRUHÝM ZPŮSOBEM" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" +msgstr "TOTO JE PŘÍKAZ PRO POSUNUTÍ NÁKRESU PRAŽCE" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) +msgid "HERE IS THE SECOND METHOD" +msgstr "ZDE JE DRUHÝ ZPŮSOB" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) +msgid "discantusIncipit" +msgstr "discantusIncipit" + +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) +msgid "altusIncipit" +msgstr "altusIncipit" + +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) +msgid "two measures" +msgstr "dva takty" + +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) +msgid "tenorIncipit" +msgstr "tenorIncipit" + +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) +msgid "bassusIncipit" +msgstr "bassusIncipit" + +#. Documentation/snippets/incipit.ly:265 (comment) +msgid "no bar lines in staves or lyrics" +msgstr "Žádné taktové čáry u notových osnov nebo u textu písně" + +#. Documentation/snippets/incipit.ly:268 (comment) +msgid "the next two instructions keep the lyrics between the bar lines" +msgstr "Dva další příkazy drží text písně mezi taktovými čarami" + +#. Documentation/snippets/incipit.ly:279 (comment) +msgid "breaking also at those bar lines where a note overlaps" +msgstr "Zalomit také na těch taktových čarách, kde nota z taktu vyčnívá" + +#. Documentation/snippets/incipit.ly:280 (comment) +msgid "into the next measure. The command is commented out in this" +msgstr "do dalšího taktu. Příkazu je" + +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) +msgid "tuning" +msgstr "v tomto ladění vypnuta poznámka" + +#. Documentation/snippets/jazz-combo-template.ly:65 (comment) +msgid "#(set-global-staff-size 16)" +msgstr "#(set-global-staff-size·16)" + +#. Documentation/snippets/jazz-combo-template.ly:68 (comment) +msgid "Some macros %%%%%%%%%%%%%%%%%%%" +msgstr "Některá makra %%%%%%%%%%%%%%%%%%%" + +#. Documentation/snippets/jazz-combo-template.ly:70 (variable) +msgid "sl" +msgstr "sl" + +#. Documentation/snippets/jazz-combo-template.ly:74 (variable) +msgid "nsl" +msgstr "nsl" + +#. Documentation/snippets/jazz-combo-template.ly:78 (variable) +msgid "crOn" +msgstr "crOn" + +#. Documentation/snippets/jazz-combo-template.ly:79 (variable) +msgid "crOff" +msgstr "crOff" + +#. Documentation/snippets/jazz-combo-template.ly:81 (comment) +msgid "insert chord name style stuff here." +msgstr "Sem vložit název akordu." + +#. Documentation/snippets/jazz-combo-template.ly:83 (variable) +msgid "jazzChords" +msgstr "jazzAkordy" + +#. Documentation/snippets/jazz-combo-template.ly:85 (comment) +msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" +msgstr "Druh taktu/Tónina %%%%%%%%%%%%%%%%%" + +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +msgid "Key" +msgstr "Tónina" + +#. Documentation/snippets/jazz-combo-template.ly:91 (comment) +msgid "############ Horns ############" +msgstr "############·Hörner·############" + +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) +msgid "------ Trumpet ------" +msgstr "------·Trubka·------" + +#. Documentation/snippets/jazz-combo-template.ly:94 (variable) +msgid "trpt" +msgstr "trpt" + +#. Documentation/snippets/jazz-combo-template.ly:98 (variable) +msgid "trpHarmony" +msgstr "trpHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:101 (variable) +#. Documentation/snippets/jazz-combo-template.ly:281 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) +msgid "trumpet" +msgstr "Trubka" + +#. Documentation/snippets/jazz-combo-template.ly:110 (comment) +msgid "------ Alto Saxophone ------" +msgstr "------·Altsaxophon·------" + +#. Documentation/snippets/jazz-combo-template.ly:115 (variable) +msgid "altoHarmony" +msgstr "altHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:118 (variable) +msgid "altoSax" +msgstr "altSax" + +#. Documentation/snippets/jazz-combo-template.ly:127 (comment) +msgid "------ Baritone Saxophone ------" +msgstr "------ Barytonový saxofon ------" + +#. Documentation/snippets/jazz-combo-template.ly:128 (variable) +msgid "bari" +msgstr "bari" + +#. Documentation/snippets/jazz-combo-template.ly:136 (variable) +msgid "bariHarmony" +msgstr "bariHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:139 (variable) +msgid "bariSax" +msgstr "bariSax" + +#. Documentation/snippets/jazz-combo-template.ly:148 (comment) +msgid "------ Trombone ------" +msgstr "------ Pozoun (trombón) ------" + +#. Documentation/snippets/jazz-combo-template.ly:149 (variable) +msgid "tbone" +msgstr "pos" + +#. Documentation/snippets/jazz-combo-template.ly:153 (variable) +msgid "tboneHarmony" +msgstr "PosHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:156 (variable) +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) +msgid "trombone" +msgstr "Pozoun" + +#. Documentation/snippets/jazz-combo-template.ly:165 (comment) +msgid "############ Rhythm Section #############" +msgstr "############·Rhythmus-Abschnitt·#############" + +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) +msgid "------ Guitar ------" +msgstr "------ Kytara ------" + +#. Documentation/snippets/jazz-combo-template.ly:168 (variable) +msgid "gtr" +msgstr "gtr" + +#. Documentation/snippets/jazz-combo-template.ly:176 (variable) +msgid "gtrHarmony" +msgstr "gtrHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:189 (comment) +msgid "------ Piano ------" +msgstr "------ Klavír ------" + +#. Documentation/snippets/jazz-combo-template.ly:190 (variable) +msgid "rhUpper" +msgstr "rhNahoře" + +#. Documentation/snippets/jazz-combo-template.ly:195 (variable) +msgid "rhLower" +msgstr "rhDole" + +#. Documentation/snippets/jazz-combo-template.ly:201 (variable) +msgid "lhUpper" +msgstr "lhNahoře" + +#. Documentation/snippets/jazz-combo-template.ly:206 (variable) +msgid "lhLower" +msgstr "lhDole" + +#. Documentation/snippets/jazz-combo-template.ly:212 (variable) +msgid "PianoRH" +msgstr "KlavírRH" + +#. Documentation/snippets/jazz-combo-template.ly:221 (variable) +msgid "PianoLH" +msgstr "KlavíerLH" + +#. Documentation/snippets/jazz-combo-template.ly:239 (comment) +msgid "------ Bass Guitar ------" +msgstr "------ Basová kytara ------" + +#. Documentation/snippets/jazz-combo-template.ly:253 (comment) +msgid "------ Drums ------" +msgstr "------ Bubny ------" + +#. Documentation/snippets/jazz-combo-template.ly:267 (variable) +msgid "drumContents" +msgstr "BubnyObsah" + +#. Documentation/snippets/jazz-combo-template.ly:276 (comment) +#, python-format +msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" +msgstr "Vše spojeno: %%%%%%%%%%%%%%%%%%%%%%" + +#. Documentation/snippets/jazz-combo-template.ly:280 (context id) +msgid "horns" +msgstr "Roh" + +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) +msgid "altosax" +msgstr "altsax" + +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +msgid "barichords" +msgstr "bariakk" + +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) +msgid "barisax" +msgstr "barsisax" + +#. Documentation/snippets/jazz-combo-template.ly:289 (context id) +msgid "chords" +msgstr "Akordy" + +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "M. Ravel, Sonatine (1905)" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "První věta" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "DlouháFermáta" + +#. Documentation/snippets/makam-example.ly:55 (comment) +msgid "Initialize makam settings" +msgstr "Zapnout nastavení makam" + +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) +msgid "bassfigures" +msgstr "Basové figury" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) +msgid "from upper staff-line (position 2) to center (position 0)" +msgstr "Z horní notové linky (Poloha 2) po střed (Poloha 0)" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) +msgid "from center to one above center (position 1)" +msgstr "Ze středu po jednu nad středem (Poloha 1)" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) +msgid "speakOn" +msgstr "MluvitZapnuto" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:34 (variable) +msgid "speakOff" +msgstr "MluvitVypnuto" + +#. Documentation/snippets/markup-lines.ly:23 (comment) +msgid "Candide, Voltaire" +msgstr "Candide, Voltaire" + +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:54 (comment) +msgid "the final bar line is not interrupted" +msgstr "Poslední taktová čára není přerušena" + +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) +msgid "normalPos" +msgstr "normalPos" + +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:69 (variable) +msgid "dashPlus" +msgstr "dashPlus" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) +msgid "Set tuplets to be extendable..." +msgstr "Rytmické notové skupiny (n-toly) vymezit tak, aby byly rozšiřitelné..." + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) +msgid "...to cover all items up to the next note" +msgstr "aby přemostily všechny předměty po další notu," + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) +msgid "...or to cover just whitespace" +msgstr "nebo aby přemostily jen prázdná místa" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:54 (variable) +msgid "fluteMusic" +msgstr "FlétnaNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:55 (variable) +msgid "oboeMusic" +msgstr "HobojNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:56 (variable) +msgid "clarinetMusic" +msgstr "KlarinetNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:57 (variable) +msgid "bassoonMusic" +msgstr "FagotNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:58 (variable) +msgid "trumpetMusic" +msgstr "TrubkaNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:59 (variable) +msgid "tromboneMusic" +msgstr "PozounNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (variable) +msgid "hornIMusic" +msgstr "RohNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (variable) +msgid "hornIIMusic" +msgstr "RohDruhýNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:62 (variable) +msgid "percussionMusic" +msgstr "BicíNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (variable) +msgid "altoIMusic" +msgstr "AltPrvníNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (variable) +msgid "altoILyrics" +msgstr "AltPrvnísText" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) +msgid "altoIIMusic" +msgstr "AltDruhýNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:68 (variable) +msgid "altoIILyrics" +msgstr "AltDruhýText" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +msgid "pianoRHMusic" +msgstr "KlavírRHNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:72 (variable) +msgid "pianoLHMusic" +msgstr "KlavírLHNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) +msgid "violinIMusic" +msgstr "HouslePrvníNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) +msgid "violinIIMusic" +msgstr "HousleDruhéNoty" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) +msgid "violaMusic" +msgstr "ViolaNoty" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) +msgid "stick" +msgstr "Palička" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:51 (comment) +msgid "Permit line breaks within tuplets" +msgstr "Povolit v rytmických notových skupinách zalomení řádků" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) +msgid "Allow beams to be broken at line breaks" +msgstr "Povolit zalomení trámců na zalomeních řádků" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:60 (comment) +msgid "Insert a manual line break within a tuplet" +msgstr "Vložit do rytmické notové skupiny ruční zalomení řádku" + +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) +msgid "pedal" +msgstr "Pedál" + +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "L. v. Beethoven" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "Klavírní sonáta 21 - Dem Grafen von Waldstein gewidmet" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "Chorál na taktech 34--40+" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "RH Hlas 1" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "(" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr ")" + +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "RH Hlas 2" + +#. Documentation/snippets/polyphony-in-tablature.ly:57 (context id) +msgid "tab" +msgstr "tab" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:58 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "MMR - Vícetaktová pomlka (Multi Mesure Rest)" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:59 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "" +"Vícetaktové pomlky jsou ve výchozím nastavení zapsány pod čtvrtou linkou" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "They can be moved with an override" +msgstr "Mohou být posunuty pomocí override" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:64 (comment) +msgid "A value of 0 is the default position;" +msgstr "Výchozí polohou je hodnota O" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:65 (comment) +msgid "the following trick moves the rest to the center line" +msgstr "Tímto se pomlka posune k střední lince" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:68 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "" +"Vícetaktové pomlky v hlasech očíslovaných lichými čísly jsou pod " +"nejvrchnější linkou" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" +msgstr "" +"Vícetaktové pomlky v hlasech očíslovaných sudými čísly jsou pod nejspodnější " +"linkou" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "They remain separated even in empty measures" +msgstr "Zůstávají odděleny i v prázdných taktech" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) +msgid "This brings them together even though there are two voices" +msgstr "Tímto jsou spojeny, i když jsou dvěma hlasy" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) +msgid "Set segno sign as rehearsal mark and adjust size if needed" +msgstr "" +"Nastavit značku pro Segno jako cvičnou značku a případně přizpůsobit velikost" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) +msgid "\\once \\override Score.RehearsalMark #'font-size = #3" +msgstr "\\once·\\override·Score.RehearsalMark·#'font-size·=·#3" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) +msgid "Set coda sign as rehearsal mark and adjust size if needed" +msgstr "" +"Nastavit značku pro Codu jako cvičnou značku a případně přizpůsobit velikost" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) +msgid "Should Coda be on anew line?" +msgstr "Má být Coda na novém řádku?" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) +msgid "Coda NOT on new line: use \\nobreak" +msgstr "Coda NE na novém řádku: použít \\nobreak" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) +msgid "Coda on new line: DON'T use \\nobreak" +msgstr "Coda na novém řádku: NEPOUŽÍVAT \\nobreak" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) +msgid "\\noBreak" +msgstr "\\noBreak" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" +msgstr "Zde začíná ta lest!" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) +msgid "" +"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " +"lines." +msgstr "" +"\\cadenzaOn potlačí počítání taktů a \\stopStaff odstraní notové linky." + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" +msgstr "Několik příkladů možného zobrazení textu" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) +msgid "text line-aligned" +msgstr "Text vyrovnán na řádku" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) +msgid "==================" +msgstr "==================" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) +msgid "Move text to the desired position" +msgstr "Posunout text na požadované místo" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" +msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·2·.·-3.5·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) +msgid "| s1*0^\\markup { D.S. al Coda } }" +msgstr "|·s1*0^\\markup·{·D.S.·al·Coda·}·}" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) +msgid "text center-aligned" +msgstr "Text vystředěn" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) +msgid "====================" +msgstr "====================" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" +msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·6·.·-5.0·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) +msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" +msgstr "|·s1*0^\\markup·{·\\center-column·{·D.S.·\\\"al·Coda\\\"·}·}" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) +msgid "text and symbols center-aligned" +msgstr "Text a symboly vystředěny" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) +msgid "===============================" +msgstr "===============================" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) +msgid "" +"Move text to the desired position and tweak spacing for optimum text " +"alignment" +msgstr "" +"Posunout text na požadované místo a potřebu místa změnit tak, aby " +"při zarovnání textu bylo dosaženo těch nejlepších výsledků" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" +msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·8·.·-5.5·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) +msgid "Increasing the unfold counter will expand the staff-free space" +msgstr "" +"Při nastavení počítadla unfold (rozprostřít) na vyšší hodnotu dojde ke " +"zvětšení místa bez notové osnovy" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) +msgid "Resume bar count and show staff lines again" +msgstr "Pokračovat v počítání taktů a ukázat linky notové osnovy" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) +msgid "Should Coda be on new line?" +msgstr "Má být Coda na novém řádku?" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) +msgid "Coda NOT on new line: DON'T use \\break" +msgstr "Coda NE na novém řádku: NEPOUŽÍVAT \\break" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) +msgid "Coda on new line: use \\break" +msgstr "Coda na novém řádku: použít \\break" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) +msgid "Show up, you clef and key!" +msgstr "Klíč/Tónina" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) +msgid "Set coda sign as rehearsal mark and adjust size and position" +msgstr "" +"Nastavit značku pro Codu jako cvičnou značku a přizpůsobit velikost a " +"umístění" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) +msgid "" +"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" +"position" +msgstr "" +"Dát značku pro Codu nad (houslový) klíč v závislosti na poloze Cody na řádku" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) +msgid "Coda NOT on new line, use this:" +msgstr "Coda NE na novém řádku: použít:" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) +msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" +msgstr "\\once·\\override·Score.RehearsalMark·#'extra-offset·=·#'(·-2·.·1.75·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) +msgid "Coda on new line, use this:" +msgstr "Coda na novém řádku: použít:" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) +msgid "The coda" +msgstr "Coda" + +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:55 (comment) +msgid "Permit first bar number to be printed" +msgstr "Povolit sázení čísla prvního taktu" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:41 (comment) +msgid "Prevent bar numbers at the end of a line and permit them elsewhere" +msgstr "Zakázat čísla taktů na koncích řádků a jinde je povolit" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:48 (comment) +msgid "Draw a box round the following bar number(s)" +msgstr "Kreslit rámeček okolo následujících čísel taktů" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:53 (comment) +msgid "Draw a circle round the following bar number(s)" +msgstr "Kreslit kroužek okolo následujících čísel taktů" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:53 (comment) +msgid "Metronome marks below the staff" +msgstr "Údaje pro metronom pod notovou osnovou" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:58 (comment) +msgid "Rehearsal marks below the staff" +msgstr "Cvičné značky pod notovou osnovou" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) +msgid "Bassklarinette" +msgstr "Basový klarinet" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) +msgid "Perkussion" +msgstr "Bicí souprava" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:67 (variable) +msgid "quoteTest" +msgstr "citaceTest" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:68 (comment) +msgid "french horn" +msgstr "Lesní roh" + +#. Documentation/snippets/quoting-another-voice.ly:74 (variable) +msgid "quoteMe" +msgstr "citovatMě" + +#. Documentation/snippets/quoting-another-voice.ly:79 (variable) +msgid "original" +msgstr "Původní" + +#. Documentation/snippets/recorder-fingering-chart.ly:17 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "Rozsah pro Paetzoldovu kontrabasovou zobcovou flétnu" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:62 (variable) +msgid "startAcciaccaturaMusic" +msgstr "ZačátekPřírazNoty" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:68 (variable) +msgid "stopAcciaccaturaMusic" +msgstr "KonecPřírazNoty" + +#. Documentation/snippets/removing-the-first-empty-line.ly:79 (comment) +msgid "To use the setting globally, uncomment the following line:" +msgstr "" +"Aby se nastavení používalo všeobecně, používat tento řádek (zrušit opatření " +"poznámkou):" + +#. Documentation/snippets/removing-the-first-empty-line.ly:80 (comment) +msgid "\\override VerticalAxisGroup #'remove-first = ##t" +msgstr "\\override·VerticalAxisGroup·#'remove-first·=·##t" + +#. Documentation/snippets/removing-the-first-empty-line.ly:89 (comment) +msgid "To use the setting globally, comment this line," +msgstr "Aby se nastavení používalo všeobecně, opatřit tento řádek poznámkou, " + +#. Documentation/snippets/removing-the-first-empty-line.ly:90 (comment) +msgid "uncomment the line in the \\layout block above" +msgstr "a používat řádek v bloku nahoře \\layout (zrušit opatření poznámkou)" + +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) +msgid "Default beaming" +msgstr "Výchozí trámce" + +#. Documentation/snippets/reverting-default-beam-endings.ly:56 (comment) +msgid "Set new values for beam endings" +msgstr "Nastavit nové hodnoty pro konce trámců" + +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) +msgid "Macro to print single slash" +msgstr "Makro pro sázení jednotlivých tahů" + +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) +msgid "rs" +msgstr "rs" + +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) +msgid "Function to print a specified number of slashes" +msgstr "Funkce pro sázení určitého počtu tahů" + +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) +msgid "comp" +msgstr "comp" + +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "Beethoven, Op. 81a" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "Klavírní sonáta 26 - Das Lebewohl" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "2. věta - Abwesenheit" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "Takty 31 - 34" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "\\override SpacingSpanner #'strict-grace-spacing = ##t" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:26 (comment) +msgid "Grob utilities" +msgstr "Grob - nástroje" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:28 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "" +"Toto jsou doslovné přepisy některých postupů (metod) C++, které používá " +"rytec ambitus." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:63 (comment) +msgid "Ambitus data structure" +msgstr "Stavba dat ambitus" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:66 (comment) +msgid "The class holds the various grobs that are created" +msgstr "Třída obsahuje různé kreslené předměty (grob)," + +#. Documentation/snippets/scheme-engraver-ambitus.ly:67 (comment) +msgid "to print an ambitus:" +msgstr "které jsou vytvořeny pro to, aby sázely ambit (oblast):" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:68 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "" +"- ambitus-group: Kreslený předmět (grob), který seskupuje všechny součásti " +"jednoho ambitu (oblasti)" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:69 (comment) +msgid "(Ambitus grob);" +msgstr "(Ambitus grob - kreslený předmět ambitu);" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:70 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "- ambitus-line: Svislá čára mezi horním a dolním ambitem" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:71 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "Noty (AmbitusLine grob);" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:72 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "- ambitus-up-note a ambitus-down-note: Hlavičky not a předznamenání" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:73 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "pro horní a dolní noty ambitu (podívejte se na třídu" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:74 (comment) +msgid "below)." +msgstr " dole)." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:75 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "Jiná místa vymezují tóninu a prostředí klíče rytce:" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:76 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "- start-c0: poloha jednočárkovaného C na začátku díla." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:77 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "Používá se pro sázení not ambitu podle jejich výšky tónu" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:78 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "- start-key-sig: Předznamenání (tónina) na začátku díla." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:79 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "Používá se pro určení toho, zda se má předznamenání sázet vedle" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:80 (comment) +msgid "notes." +msgstr "not ambitu." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:94 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "Přístup pro data dolní a horní noty ambitu" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:102 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "" +"Třída obsahuje kreslené předměty (grob), které jsou zvláštní " +"pro " +"sind" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:103 (comment) +msgid "(lower and upper) notes:" +msgstr "pro horní a dolní noty ambitu:" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:104 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "- head: AmbitusNoteHead-Grob" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:105 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "- accidental: AmbitusAccidental-Grob, který se třeba sází" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:106 (comment) +msgid "to the ambitus note head." +msgstr "vedle hlavičky noty ambitu." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:107 (comment) +msgid "Moreover:" +msgstr "Navíc:" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:108 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "- pitch - pitch je naprostou výškou tónu noty" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:109 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "- cause je událostí noty, která je příčinou této noty ambitu, takže" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:110 (comment) +msgid "or upper note of the considered music sequence." +msgstr "dolní nebo horní noty pozorované notové sekvence." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:123 (comment) +msgid "Ambitus engraving logics" +msgstr "Logika rytce (funkce) ambitus" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:125 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." +msgstr "Přepis kódu @file{lily/ambitus-engraver.cc}." + +#. Documentation/snippets/scheme-engraver-ambitus.ly:294 (comment) +msgid "Ambitus engraver definition" +msgstr "Vymezení rytce ambitus" + +#. Documentation/snippets/scheme-engraver-ambitus.ly:319 (comment) +msgid "Example" +msgstr "Příklad" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) +msgid "NoStem" +msgstr "ŽádnáNožička" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) +msgid "NoNoteHead" +msgstr "ŽádnoNotováHlavička" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) +msgid "ZeroBeam" +msgstr "NulovýTrámec" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) +msgid "staffTabLine" +msgstr "ŘádekTabOsnovy" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated with a gridline" +msgstr "" +"Ukazuje vodorovný řádek. Svislé čáry (jako taktová čára) jsou napodobovány " +"čarou mřížky" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) +msgid "" +"disable the following line to see the the noteheads while writing the song" +msgstr "" +"Zakázat následující řádky (opatřit je #), aby byly během zápisu písně viděny " +"hlavičky not" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) +msgid "The beam between 8th-notes is used to draw the push-line" +msgstr "" +"Trámce mezi osminovými notami jsou používány pro kreslení čáry posunutí" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" +msgstr "Jak psát rychle čáry posunutí:" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) +msgid "" +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" +msgstr "1. píše opakovaně 'c·c·c·c·c·c·c·c·|' přes celou délku písně" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) +msgid "2. uncomment the line \\NoNoteHead" +msgstr "2. zrušit opatření řádku \\NoNoteHead poznámkou" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) +msgid "3. compile" +msgstr "3. sestavit" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." +msgstr "4. Označit polohy změnou směru posunutí/táhnutí." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) +msgid "" +"In the score-picture click on the position the push- or pull-part starts" +msgstr "V obrázku notového zápisu klepnout na místo začátku tahu nebo posunutí" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) +msgid "(on the noteHead, the cursor will change to a hand-icon)." +msgstr "(nad notovou hlavičkou se ukazovátko myši změní na obrázek ručičky)." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) +msgid "The cursor in the source code will jump just at this position." +msgstr "" +"Ukazatel ve zdrojovém kódu se potom bude nacházet na požadovaném místě." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) +msgid "a) If a push-part starts there, replace the 'c' by an 'e['" +msgstr "a) Pokud zde začíná posunutí, nahradit 'c' za 'e['" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) +msgid "b) If a pull-part starts there, replace the 'c' by an 's'" +msgstr "b) Pokud zde začíná táhnutí, nahradit 'c' za 's'" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." +msgstr "5. Přepnout do režimu přepisování stisknutím klávesy \"Insert\"." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" +msgstr "6. Pro táhnutí přepsat 'c' 's'" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" +msgstr "7. Pro každé posunutí nahradit poslední 'c' za 'e]'" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" +msgstr "8. Přepnout do režimu vkládání" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) +msgid "" +"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " +"e] s s)" +msgstr "" +"9. Nyní by to mělo vypadat jako např. " +"(s·s·e[·c·|·c·c·c·c·c·c·c·c·|·c·c·c·c·c·c·e]" +"·s·s)" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) +msgid "10. re-enable the line \\NoNoteHead" +msgstr "10 Povolit řádek \\NoNoteHead znovu (zrušit jeho opatření křížkem: #)" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" +msgstr "Melodie tahací harmoniky v tabulatorovém notovém zápisu" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) +msgid "1. Place a copy of the piano melody below" +msgstr "1. Použít kopii klavírní melodie dole" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) +msgid "" +"2. Separate piano melody into pull- and push-parts according to the " +"staffTabLine you've already made" +msgstr "" +"2. Rozdělit klavírní melodii do částí táhnutí a posunutí podle " +"ŘádkuTabOsnovy (systemTabZeile), " +"který jste už udělal" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then change the second line using the transformation paper" +msgstr "" +"3. Pro každý řádek: Zdvojit řádek. První řádek zůstává označen nezměněn jako " +"doporučení, druhý " +"řádek bude změněn pomocí změnového papíru" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" +msgstr "nebo makra 'conv2diaton·push.bsh'·a·'conv2diaton·pull.bsh'·" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) +msgid "Tips:" +msgstr "Rady:" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) +msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" +msgstr "- V jEdit Hledat a nahradit vybrat volbu: 'Keep Dialog'" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) +msgid "AccordionTabTwoCBesDur" +msgstr "AccordionTabTwoCBesDur" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) +msgid "pull 1" +msgstr "Táhnutí 1" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" +msgstr "8·8·8·|" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) +msgid "push 2" +msgstr "Posunutí 2" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" +msgstr "4····|" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) +msgid "pull 3" +msgstr "Táhnutí 3" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) +msgid "2 r8 }" +msgstr "2·r8·}" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "AkkordionTab" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) +msgid "1. Place a copy of the piano melody above" +msgstr "1. Použít kopii klavírní melodie nahoře" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then" +msgstr "" +"3. Pro každý řádek: Zdvojit řádek. První řádek zůstává označen nezměněn jako " +"doporučení, a potom" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) +msgid "change the second line using the transformation paper" +msgstr "druhý řádek bude změněn pomocí změnového papíru" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "-" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "Svislá čára·(jako taktová čára) v" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" +msgstr "" +"rytmu basové notové osnovy (staffBassRhytm)·je napodobována čarou mřížky" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) +msgid "4/4 - tact. How many beats per bar" +msgstr "Takt 4/4. Kolik dob v taktu" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) +msgid "The following line has to be adjusted O-F-T-E-N." +msgstr "Následující řádek musí být přizpůsobován velmi ČASTO." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) +msgid "staffVoice" +msgstr "OsnovaHlas" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" +msgstr "aOsnovaHlas" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) +msgid "staffAccordionMel" +msgstr "OsnovaHarmonikaMel" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," +msgstr "Předznamenání (posuvky) pro každou notu," + +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." +msgstr "ve zbytku taktu je nepřipomínat." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) +msgid "BassRhytm" +msgstr "BasovýRytmus" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) +msgid "LyricBassRhythmI" +msgstr "TextBasovýRytmus" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) +msgid "staffBassRhytm" +msgstr "RytmusBasováNotováOsnova" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "BasováNotováOsnova" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) +msgid "" +"This is not a RhythmicStaff because it must be possible to append lyrics." +msgstr "" +"Toto není rytmická notová osnova, protože je potřeba, aby bylo možné " +"připojit text písně." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) +msgid "x.y" +msgstr "x.y" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated by a grid" +msgstr "" +"Ukazuje vodorovný řádek. Svislá čára (jako taktová čára) je napodobována " +"čarou mřížky" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" +msgstr "" +"Hledat 'grid' (mřížka) na této straně kvůli nalezení všech důležitých funkcí" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:28 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "Stejně tak \\flageolet, jen o něco menší" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:38 (comment) +msgid "The second fermata is ignored!" +msgstr "Druhá koruna (fermáta) se přehlíží!" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:41 (comment) +msgid "it works only if you wrap the note inside a chord. By default," +msgstr "Jde to jen tehdy, když je nota vsazena do akordu." + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:42 (comment) +msgid "all articulations will be printed above, so you have to tweak" +msgstr "Ve výchozím nastavení jsou všechny artikulace sázeny nad notou," + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:43 (comment) +msgid "the direction." +msgstr "takže musíte opravovat směr." + +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "NR 1.5 Současně se objevující noty" + +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "L. v. Beethoven, Op. 111" + +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "Klavírní sonáta 32" + +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "2. věta: Arietta - Adagio molto semplice e cantabile" + +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "Takty 108 - 118" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +msgid "trillFlat" +msgstr "TrylekB" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "RH Hlas 1" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "RH Hlas 2" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +msgid "LH staff" +msgstr "Notová osnova LH" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) +msgid "verseI" +msgstr "SlokaI" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) +msgid "verseII" +msgstr "SlokaII" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "Sem vložit akordy pro názvy akordů a hmatníky" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) +msgid "staffMelody" +msgstr "OsnovaMelodie" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "Zde zadejte noty pro melodii" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) +msgid "voiceMelody" +msgstr "HlasMelodie" + +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "title = \\\"Le Lac des Cygnes\\\"" + +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "subtitle = \\\"Danse Napolitaine\\\"" + +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" + +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "arranger = \\\"arr. Laurence Sardain\\\"" + +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "footer = \\\"Mutopia-2006/12/22-896\\\"" + +#. Documentation/snippets/staff-headword.ly:38 (variable) +msgid "trompette" +msgstr "Trubka" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "Tamburína" + +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "TamburínaMidi" + +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "Prima" + +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "NahořeA" + +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "DoleA" + +#. Documentation/snippets/stemlets.ly:36 (comment) +msgid "N.B. use Score.Stem to set for the whole score." +msgstr "" +"Upozornění: použijte Score.Stem, abyste provedl nastavení pro celý notový " +"zápis." + +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "ZávorkaČísloStruny" + +#. Documentation/snippets/string-quartet-template-simple.ly:52 (variable) +msgid "violinOne" +msgstr "HouslePrvní" + +#. Documentation/snippets/string-quartet-template-simple.ly:61 (variable) +msgid "violinTwo" +msgstr "HousleDruhé" + +#. Documentation/snippets/string-quartet-template-simple.ly:70 (variable) +msgid "viola" +msgstr "Viola" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:103 (comment) +msgid "piece.ly" +msgstr "piece.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:104 (comment) +msgid "(This is the global definitions file)" +msgstr "(Toto je soubor se všeobecným vymezením)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:111 (variable) +msgid "Violinone" +msgstr "HouslePrvní" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:116 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:122 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:129 (comment) +msgid "*********************************" +msgstr "**********************************" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:117 (variable) +msgid "Violintwo" +msgstr "HousleDruhé" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:123 (variable) +msgid "Viola" +msgstr "Viola" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:130 (variable) +msgid "Cello" +msgstr "Violoncello" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:136 (comment) +msgid "**********************************" +msgstr "**********************************" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:147 (comment) +msgid "These are the other files you need to save on your computer" +msgstr "Toto jsou další soubory, které musíte mít uloženy ve svém počítači" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:149 (comment) +msgid "score.ly" +msgstr "score.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) +msgid "(This is the main file)" +msgstr "(Toto je hlavní soubor)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) +#, python-format +msgid "" +"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " +"separate file" +msgstr "" +"\\include \\\"piece.ly\\\" %%% Zrušit opatření tohoto řádku " +"poznámkou, když " +"se používá samostatný soubor" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:162 (comment) +msgid "{ Uncomment this block when using separate files" +msgstr "" +"{ Zrušit opatření tohoto bloku poznámkou, když se používají samostatné " +"soubory" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:164 (comment) +msgid "vn1.ly" +msgstr "vn1.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) +msgid "(This is the Violin 1 part file)" +msgstr "(Toto je soubor s hlasem prvních houslí)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:174 (comment) +msgid "vn2.ly" +msgstr "vn2.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:175 (comment) +msgid "(This is the Violin 2 part file)" +msgstr "(Toto je soubor s hlasem druhých houslí)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:184 (comment) +msgid "vla.ly" +msgstr "vla.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:185 (comment) +msgid "(This is the Viola part file)" +msgstr "(Toto je soubor s hlasem violy)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:194 (comment) +msgid "vlc.ly" +msgstr "vlc.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:195 (comment) +msgid "(This is the Cello part file)" +msgstr "(Toto je soubor s hlasem violoncella)" + +#. Documentation/snippets/sub-dividing-beams.ly:84 (comment) +msgid "Set beam sub-group length to an eighth note" +msgstr "Nastavit délku podskupiny trámce jako osminovou notu" + +#. Documentation/snippets/sub-dividing-beams.ly:88 (comment) +msgid "Set beam sub-group length to a sixteenth note" +msgstr "Nastavit délku podskupiny trámce jako šestnáctinovou notu" + +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) +msgid "ignore" +msgstr "Přehlížet" + +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "NR 1.8 Text" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "L. v. Beethoven, Op. 110" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "Klavírní sonáta 31" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "Takty 1 - 7" + +#. Documentation/snippets/text-headword.ly:45 (comment) +msgid "RH staff" +msgstr "Notová osnova RH" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) +msgid "New command to add a three sided box, with sides north, west and south" +msgstr "" +"Nový příkaz pro přidání rámečku se třemi stranami (severní, západní a jižní " +"strana)" + +#. Documentation/snippets/three-sided-box.ly:18 (comment) +msgid "Based on the box-stencil command defined in scm/stencil.scm" +msgstr "Založeno na příkazu pro lisovnici rámečku, vymezeno v scm/stencil.scm" + +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" +msgstr "Pozor: \\\";\\\" se používá ve Scheme pro opatření řádku poznámkou." + +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" +msgstr "" +"Odpovídající příkaz pro popis, založený na příkzu \\box, " +"vymezený" + +#. Documentation/snippets/three-sided-box.ly:34 (comment) +msgid "in scm/define-markup-commands.scm" +msgstr "v scm/define-markup-commands.scm" + +#. Documentation/snippets/three-sided-box.ly:46 (comment) +msgid "Test it:" +msgstr "Vyzkoušet:" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:25 (comment) +msgid "Change the style permanently" +msgstr "Změnit trvale styl" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:31 (comment) +msgid "Revert to default style:" +msgstr "Vrátit zpět na výchozí styl:" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:35 (comment) +msgid "single-digit style only for the next time signature" +msgstr "Styl single-digit (jednoduché číslo) pro další taktové označení" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) +msgid "make the staff lines invisible on staves" +msgstr "Učinit taktové čáry notových osnov neviditelnými" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) +msgid "incipitDiscantus" +msgstr "incipitDiskant" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) +msgid "incipitAltus" +msgstr "IncipitAlt" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) +msgid "incipitTenor" +msgstr "IncipitTenor" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) +msgid "incipitBassus" +msgstr "IncipitBas" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) +msgid "" +"StaffGroup is used instead of ChoirStaff to get bar lines between systems" +msgstr "" +"StaffGroup se používá namísto ChoirStaff pro získání taktových čar mezi " +"notovými osnovami" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) +msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" +msgstr "" +"Text písně basů držet mimo StaffGroup, kvůli vyvarování se taktových čar" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) +msgid "between the lyrics." +msgstr "mezi textem." + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" +msgstr "Následující tři příkazy text udržují mezi taktovými čarami" + +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:163 (variable) +msgid "naturalizeMusic" +msgstr "OdrážkaNoty" + +#. Documentation/snippets/tweaking-clef-properties.ly:150 (comment) +msgid "The default treble clef" +msgstr "Výchozí houslový klíč" + +#. Documentation/snippets/tweaking-clef-properties.ly:152 (comment) +msgid "The standard bass clef" +msgstr "Výchozí basový klíč" + +#. Documentation/snippets/tweaking-clef-properties.ly:157 (comment) +msgid "The baritone clef" +msgstr "Výchozí barytonový klíč" + +#. Documentation/snippets/tweaking-clef-properties.ly:162 (comment) +msgid "The standard choral tenor clef" +msgstr "Výchozí sborový tenorový klíč" + +#. Documentation/snippets/tweaking-clef-properties.ly:168 (comment) +msgid "A non-standard clef" +msgstr "Neobvyklý klíč" + +#. Documentation/snippets/tweaking-clef-properties.ly:174 (comment) +msgid "The following clef changes do not preserve" +msgstr "Následující změny klíče nezachovávat" + +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) +msgid "the normal relationship between notes and clefs:" +msgstr "Obvyklý vztah mezi klíči a notami:" + +#. Documentation/snippets/tweaking-clef-properties.ly:190 (comment) +msgid "Return to the normal clef:" +msgstr "Návrat k obvyklému klíči:" + +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +msgid "Abreviations" +msgstr "Zkratky" + +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "db" + +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "dub" + +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "dubetc" + +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "ub" + +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "udb" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "udbetc" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "fermaTa" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +msgid "accel" +msgstr "accel" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "ritar" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +msgid "Strings" +msgstr "Struny" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "svib" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "pvib" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "mvib" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "sulp" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +msgid "norm" +msgstr "norm" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +msgid "quatre" +msgstr "quatre" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "Posunutí not" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "shift" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "shifta" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "shiftb" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "Sponka" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "aniente = \\\"a niente\\\"" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "aniente" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +msgid "tupletbp" +msgstr "tupletbp" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "Praporek [Hlavička noty - Nožička]" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +msgid "noflag" +msgstr "ŽádnýPraporek" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "Funkce" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "Nástroje" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "HousleSólo" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "Takt 1" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "Takt 2" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "Takt 3" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "Takt 4" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "Takt 5" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "Takt 6" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "\\featherDurations #(ly:make-moment 2 3)" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "Takt 7" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "Takt 8" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "Takt 9" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +msgid "Score" +msgstr "Notový zápis" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:73 (comment) +msgid "display grobs for each note head:" +msgstr "Ukázat kreslené předměty (grobs) pro každou notovou hlavičku:" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:74 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "\\override NoteHead #'before-line-breaking = #display-grobs" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:76 (comment) +msgid "or just for one:" +msgstr "nebo jen pro jeden:" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) +msgid "parallelogram" +msgstr "Rovnoběžník" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +msgid "myNoteHeads" +msgstr "MojeNotovéHlavičky" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) +msgid "normalNoteHeads" +msgstr "ObvykléNotovéHlavičky" + +#. Documentation/snippets/utf-8.ly:19 (comment) +msgid "end verbatim - this comment is a hack to prevent texinfo.tex" +msgstr "Konec verbatim -- Tato poznámka je lstí k zabránění texinfo.tex" + +#. Documentation/snippets/utf-8.ly:20 (comment) +msgid "from choking on non-European UTF-8 subsets" +msgstr "v přeplnění se neevropskými podskupinami UTF-8" + +#. Documentation/snippets/utf-8.ly:22 (comment) +msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" +msgstr "" +"Tento soubor upravit pomocí editoru, který dokáže ukládat v Unicode, jakým " +"jsou " +"například GVIM, GEDIT, Emacs" + +#. Documentation/snippets/utf-8.ly:40 (comment) +msgid "Cyrillic font" +msgstr "Cyrilické písmo" + +#. Documentation/snippets/utf-8.ly:41 (variable) +msgid "bulgarian" +msgstr "Bulharské" + +#. Documentation/snippets/utf-8.ly:45 (variable) +msgid "hebrew" +msgstr "Hebrejské" + +#. Documentation/snippets/utf-8.ly:49 (variable) +msgid "japanese" +msgstr "Japonské" + +#. Documentation/snippets/utf-8.ly:56 (comment) +msgid "\\\"a legal song to you\\\"" +msgstr "\\\"a·legal·song·to·you\\\"" + +#. Documentation/snippets/utf-8.ly:57 (variable) +msgid "portuguese" +msgstr "Portugalské" + +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +msgid "upline" +msgstr "upline" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) +msgid "leftbrace" +msgstr "LeváZávorka" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) +msgid "rightbrace" +msgstr "PraváZávorka" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) +msgid "dropLyrics" +msgstr "TextDolů" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) +msgid "raiseLyrics" +msgstr "TextNahoru" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) +msgid "skipFour" +msgstr "PřeskočitČtyři" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) +msgid "lyricsA" +msgstr "TextA" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) +msgid "lyricsB" +msgstr "TextB" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) +msgid "lyricsC" +msgstr "TextC" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) +msgid "lyricsD" +msgstr "TextD" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) +msgid "m" +msgstr "m" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:65 (variable) +msgid "sopMusic" +msgstr "SopránNoty" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) +msgid "sopWords" +msgstr "SopránText" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:98 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:86 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:96 (context id) +msgid "women" +msgstr "Ženy" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:104 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:108 (context id) +msgid "men" +msgstr "Muži" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:133 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:108 (comment) +#. Documentation/snippets/vocal-ensemble-template.ly:126 (comment) +msgid "a little smaller so lyrics" +msgstr "o něco menší, aby text" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:134 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:109 (comment) +#. Documentation/snippets/vocal-ensemble-template.ly:127 (comment) +msgid "can be closer to the staff" +msgstr "mohl být blíže k notové osnově" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:92 (comment) +msgid "we could remove the line about this with the line below, since we want" +msgstr "Podařilo se odstranit řádek nad řádkem pod, protože" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:93 (comment) +msgid "the alto lyrics to be below the alto Voice anyway." +msgstr "text pro alt má být tak jako tak pod altovým hlasem." + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:94 (comment) +msgid "\\new Lyrics \\lyricsto altos \\altoWords" +msgstr "\\new·Lyrics·\\lyricsto·altos·\\altoWords" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:103 (comment) +msgid "again, we could replace the line above this with the line below." +msgstr "Podařilo se nahradit řádek nad řádkem pod." + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:104 (comment) +msgid "\\new Lyrics \\lyricsto basses \\bassWords" +msgstr "\\new·Lyrics·\\lyricsto·basses·\\bassWords" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) +msgid "voltaMusic" +msgstr "VoltaNoty" + +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:24 (variable) +msgid "voltaAdLib" +msgstr "VoltaAdLib" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "Tschaikowsky" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "Suita louskáček: VII: Tanec Panových fléten" + +msgid "Up:" +msgstr "Nahoru:" + +msgid "Next:" +msgstr "Další:" + +msgid "Previous:" +msgstr "Předchozí:" + +msgid "Appendix " +msgstr "Dodatky " + +msgid "Footnotes" +msgstr "Poznámky pod čarou" + +msgid "Table of Contents" +msgstr "Obsah" + +#~ msgid "" +#~ "This section has not been translated yet; please refer to the manual in " +#~ "English." +#~ msgstr "" +#~ "Dieser Abschnitt wurde noch nicht übersetzt, bitte lesen Sie den " +#~ "Abschnitt in der englischen Notationsreferenz." + +#~ msgid "GNU LilyPond --- Learning Manual" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" + +#~ msgid "Preface" +#~ msgstr "Vorwort" + +#~ msgid "Introduction" +#~ msgstr "Einleitung" + +#~ msgid "Background" +#~ msgstr "Hintergrund" + +#~ msgid "Example applications" +#~ msgstr "Beispielanwendung" + +#~ msgid "About the documentation" +#~ msgstr "Über die Dokumentation" + +#~ msgid "About the Learning Manual" +#~ msgstr "Über das Handbuch zum Lernen (LM)" + +#~ msgid "About the Music Glossary" +#~ msgstr "Über das Glossar (MG)" + +#~ msgid "About the Notation Reference" +#~ msgstr "Über die Notationsreferenz (NR)" + +#~ msgid "About the Application Usage" +#~ msgstr "Über die Anwendungsbenutzung (AU)" + +#~ msgid "About the Snippet List" +#~ msgstr "Über die Schnipselliste" + +#~ msgid "About the Internals Reference" +#~ msgstr "Über die Referenz der Iterna (IR)" + +#~ msgid "Other documentation" +#~ msgstr "Andere Dokumentation" + +#~ msgid "First steps" +#~ msgstr "Erste Schritte" + +#~ msgid "Entering music and viewing output" +#~ msgstr "Eingabe von Noten und Ansicht des Ergebnisses" + +#~ msgid "UNIX" +#~ msgstr "UNIX" + +#~ msgid "Version number" +#~ msgstr "Versionsnummer" + +#~ msgid "naturalplusflat" +#~ msgstr "AuflösungB" + +#~ msgid "Working on LilyPond projects" +#~ msgstr "An LilyPond-Projekten arbeiten" + +#~ msgid "Suggestions for writing LilyPond input files" +#~ msgstr "Vorschläge, wie LilyPond-Eingabe-Dateien geschrieben werden sollen" + +#~ msgid "When things don't work" +#~ msgstr "Wenn etwas nicht funktioniert" + +#~ msgid "Updating old input files" +#~ msgstr "Alte Eingabe-Dateien aktualisieren" + +#~ msgid "Troubleshooting (taking it all apart)" +#~ msgstr "Fehlersuche (alles auseinandernehmen)" + +#~ msgid "Minimal examples" +#~ msgstr "Minimalbeispiele" + +#~ msgid "Tweaking with Scheme" +#~ msgstr "Optimierungen mit Scheme" + +#~ msgid "GNU LilyPond --- Application Usage" +#~ msgstr "GNU LilyPond -- Die Programmbenutzung" + +#~ msgid "Install" +#~ msgstr "Installieren" + +#~ msgid "Precompiled binaries" +#~ msgstr "Vorkompilierte Binär-Pakete" + +#~ msgid "Downloading" +#~ msgstr "Herunterladen" + +#~ msgid "Compiling from source" +#~ msgstr "Aus den Quellen übersetzen" + +#~ msgid "Downloading source code" +#~ msgstr "Den Quellcode herunterladen" + +#~ msgid "Requirements" +#~ msgstr "Voraussetzungen" + +#~ msgid "Running requirements" +#~ msgstr "Voraussetzungen zur Programmbenutzung" + +#~ msgid "Requirements for building documentation" +#~ msgstr "Anforderungen, um die Dokumentation zu übersetzen" + +#~ msgid "Building LilyPond" +#~ msgstr "LilyPond übersetzen" + +#~ msgid "Compiling" +#~ msgstr "Kompilieren" + +#~ msgid "Compiling for multiple platforms" +#~ msgstr "Für mehrere Plattformen kompilieren" + +#~ msgid "Compiling outside the source tree" +#~ msgstr "Außerhalb des Quellbaums übersetzen" + +#~ msgid "Useful @command{make} variables" +#~ msgstr "Nützliche @command{make}-Variablen" + +#~ msgid "Building documentation" +#~ msgstr "Die Dokumentation übersetzen" + +#~ msgid "Commands for building documentation" +#~ msgstr "Befehle um die Dokumentation zu übersetzen" + +#~ msgid "Building documentation without compiling LilyPond" +#~ msgstr "Die Dokumentation übersetzen ohne LilyPond zu kompilieren" + +#~ msgid "Problems" +#~ msgstr "Probleme" + +#~ msgid "Bison 1.875" +#~ msgstr "Bison 1.875" + +#~ msgid "Solaris" +#~ msgstr "Solaris" + +#~ msgid "FreeBSD" +#~ msgstr "FreeBSD" + +#~ msgid "International fonts" +#~ msgstr "Internationale Schriftarten" + +#~ msgid "Setup" +#~ msgstr "Setup" + +#~ msgid "Setup for specific Operating Systems" +#~ msgstr "Setup für bestimmte Betriebssysteme" + +#~ msgid "Setup for MacOS X" +#~ msgstr "Einrichtung für MacOS X" + +#~ msgid "Using Python scripts on MacOS 10.3 or 10.4" +#~ msgstr "Benutzung von Python-Skripten unter MacOS 10.3 oder 10.4" + +#~ msgid "MacOS X on the command line" +#~ msgstr "MacOS X auf der Kommandozeile" + +#~ msgid "jEdit" +#~ msgstr "jEdit" + +#~ msgid "TexShop" +#~ msgstr "TexShop" + +#~ msgid "TextMate" +#~ msgstr "TextMate" + +#~ msgid "LilyKDE" +#~ msgstr "LilyKDE" + +#~ msgid "Reporting bugs" +#~ msgstr "Fehler melden" + +#~ msgid "@command{lilypond-book}: Integrating text and music" +#~ msgstr "@command{lilypond-book}: Noten in den Text integrieren" + +#~ msgid "Generating LilyPond files" +#~ msgstr "LilyPond-Dateien erstellen" + +#~ msgid "GNU LilyPond --- Notation Reference" +#~ msgstr "GNU LilyPond -- Notationsreferenz" + +#~ msgid "The music typesetter" +#~ msgstr "Das Notensatzprogramm" + +#~ msgid "not strictly necessary, but a good reminder" +#~ msgstr "nicht unbdingt nötig, aber gut zu erinnern" + +#~ msgid "clarinet" +#~ msgstr "Klarinette" + +#~ msgid "Writing pitches" +#~ msgstr "Tonhöhen setzen" + +#~ msgid "Absolute octave entry" +#~ msgstr "Absolute Oktavenbezeichnung" + +#~ msgid "Relative octave entry" +#~ msgstr "Relative Oktavenbezeichnung" + +#~ msgid "Note names in other languages" +#~ msgstr "Notenbezeichnungen in anderen Sprachen" + +#~ msgid "Changing multiple pitches" +#~ msgstr "Viele Tonhöhen gleichzeitig verändern" + +#~ msgid "Octave checks" +#~ msgstr "Oktavenüberprüfung" + +#~ msgid "Transpose" +#~ msgstr "Transposition" + +#~ msgid "Displaying pitches" +#~ msgstr "Tonhöhen anzeigen lassen" + +#~ msgid "Key signature" +#~ msgstr "Tonartbezeichnung" + +#~ msgid "Ottava brackets" +#~ msgstr "Oktavierungsklammern" + +#~ msgid "Instrument transpositions" +#~ msgstr "Transposition von Instrumenten" + +#~ msgid "Automatic accidentals" +#~ msgstr "Automatische Versetzungszeichen" + +#~ msgid "Special note heads" +#~ msgstr "Besondere Notenköpfe" + +#~ msgid "Easy notation note heads" +#~ msgstr "Easy-Notation-Notenköpfe" + +#~ msgid "Improvisation" +#~ msgstr "Improvisation" + +#~ msgid "Alter durations to triplets" +#~ msgstr "Dauern zu Triolen verändern" + +#~ msgid "Normal durations" +#~ msgstr "Normale Tondauern" + +#~ msgid "Double the duration of chord" +#~ msgstr "Dauer der Akkorde verdoppeln" + +#~ msgid "Duration of quarter, appears like sixteenth" +#~ msgstr "Dauer einer Vietel, erscheint vie eine Sechszehntel" + +#~ msgid "Scale music by *2/3" +#~ msgstr "Noten mit 2/3 skalieren" + +#~ msgid "Scale music by *2" +#~ msgstr "Noten *2 skalieren" + +#~ msgid "First alternative: following note is tied normally" +#~ msgstr "Erste Weiche: nächste Note ist normal gebunden" + +#~ msgid "Second alternative: following note has a repeated tie" +#~ msgstr "Zweite Weiche: folgende Note hat einen Wiederholten Bindebogen" + +#~ msgid "These two lines are just to prettify this example" +#~ msgstr "Die zwei Linien sind nur zur Verschönerung" + +#~ msgid "Print a maxima rest, equal to four breves" +#~ msgstr "Setze Maxima-Pause, gleich vier Breven" + +#~ msgid "Print a longa rest, equal to two breves" +#~ msgstr "Setze Longa-Pause, gleich zwei Breven" + +#~ msgid "Print a breve rest" +#~ msgstr "Setze Breve-Pause" + +#~ msgid "This is valid input, but does nothing" +#~ msgstr "Gültiger Eingabecode, aber tut nichts" + +#~ msgid "Rest measures contracted to single measure" +#~ msgstr "Pausentakte zu einem einzelnen Takt zusammegezogen" + +#~ msgid "Rest measures expanded" +#~ msgstr "Pausentakte \tausklappen" + +#~ msgid "This fails, as the wrong object name is specified" +#~ msgstr "" +#~ "Das funktioniert nicht, weil die falsche Objektbezeichnung angegeben ist" + +#~ msgid "This is correct and works" +#~ msgstr "Das stimmt und funktioniert" + +#~ msgid "Default style" +#~ msgstr "Standardstil" + +#~ msgid "Change to numeric style" +#~ msgstr "Wechsel zum nummerierten Stil" + +#~ msgid "Show all bar numbers" +#~ msgstr "Alle Taknummern anzeigen" + +#~ msgid "Now each staff has its own time signature." +#~ msgstr "Jetzt hat jedes System eine eigene Taktart" + +#~ msgid "myRhythm" +#~ msgstr "meinRhythmus" + +#~ msgid "end 1/16 beams for all time signatures at the 1/16 moment" +#~ msgstr "1/16-Balken für alle Taktarten beim 1/16-Moment beenden" + +#~ msgid "end 1/32 beams for all time signatures at the 1/16 moment" +#~ msgstr "1/23-Balken für alle Taktarten beim 1/16-Moment beenden" + +#~ msgid "end beams of all durations in 5/8 time signature at the 2/8 moment" +#~ msgstr "Balken aller Längen im 5/8-Takt am 2/8-Moment beenden" + +#~ msgid "rhythm 3-1-1-2" +#~ msgstr "Rhythmus 3-1-1-2" + +#~ msgid "Context not specified - does not work correctly" +#~ msgstr "Kontext nicht angegeben - funktioniert nicht richtig" + +#~ msgid "Works correctly with context specified" +#~ msgstr "Funktioniert richtig mit angegebenem Kontext" + +#~ msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" +#~ msgstr "Regel annullieren, dass 1/16-Balken im 4/4-Takt am 1/4-Moment enden" + +#~ msgid "this won't revert it!" +#~ msgstr "Das macht es nicth rückgängig" + +#~ msgid "this will" +#~ msgstr "Das schon" + +#~ msgid "revert to non-feathered beams" +#~ msgstr "in nichtgespreizte Balken zurückverwandeln" + +#~ msgid "pipeSymbol" +#~ msgstr "pipeSymbol" + +#~ msgid "MyCadenza" +#~ msgstr "MeineKadenz" + +#~ msgid "Rhythms" +#~ msgstr "Rhythmus" + +#~ msgid "Writing rhythms" +#~ msgstr "Rhythmen eingeben" + +#~ msgid "Durations" +#~ msgstr "Tondauern" + +#~ msgid "Scaling durations" +#~ msgstr "Tondauern skalieren" + +#~ msgid "Writing rests" +#~ msgstr "Pausen eingeben" + +#~ msgid "Invisible rests" +#~ msgstr "Unsichtbare Pausen" + +#~ msgid "Full measure rests" +#~ msgstr "Ganztaktige Pausen" + +#~ msgid "Displaying rhythms" +#~ msgstr "Rhythmen anzeigen lassen" + +#~ msgid "Unmetered music" +#~ msgstr "Musik ohne Metrum" + +#~ msgid "Polymetric notation" +#~ msgstr "Polymetrische Notation" + +#~ msgid "Automatic note splitting" +#~ msgstr "Automatische Aufteilung von Noten" + +#~ msgid "Showing melody rhythms" +#~ msgstr "Melodierhythmus anzeigen" + +#~ msgid "Beams" +#~ msgstr "Balken" + +#~ msgid "Automatic beams" +#~ msgstr "Automatische Balken" + +#~ msgid "Setting automatic beam behavior" +#~ msgstr "Einstellung von automatischen Balken" + +#~ msgid "Manual beams" +#~ msgstr "Manuelle Balken" + +#~ msgid "Bar numbers" +#~ msgstr "Taktzahlen" + +#~ msgid "Bar and bar number checks" +#~ msgstr "Takt- und Taktzahlüberprüfung" + +#~ msgid "Rehearsal marks" +#~ msgstr "Übungszeichen" + +#~ msgid "Special rhythmic concerns" +#~ msgstr "Besondere rhythmische Fragen" + +#~ msgid "Aligning to cadenzas" +#~ msgstr "An Kadenzen ausrichten" + +#~ msgid "Time administration" +#~ msgstr "Verwaltung der Zeiteinheiten" + +#~ msgid "roundF" +#~ msgstr "rundF" + +#~ msgid "boxF" +#~ msgstr "KastenF" + +#~ msgid "sfzp" +#~ msgstr "sfzp" + +#~ msgid "mfEspress" +#~ msgstr "mfEspress" + +#~ msgid "roundFdynamic" +#~ msgstr "rundFDynamik" + +#~ msgid "boxFdynamic" +#~ msgstr "KastenFDynamik" + +#~ msgid "mfEspressDynamic" +#~ msgstr "mfEspressDynamic" + +#~ msgid "Attached to notes" +#~ msgstr "An Noten angehängt" + +#~ msgid "Articulations and ornamentations" +#~ msgstr "Artikulationszeichen und Verzierungen" + +#~ msgid "New dynamic marks" +#~ msgstr "Neue Lautstärkezeichen" + +#~ msgid "Curves" +#~ msgstr "Bögen" + +#~ msgid "Falls and doits" +#~ msgstr "Glissando zu unbestimmter Tonhöhe" + +#~ msgid "Lines" +#~ msgstr "Linien" + +#~ msgid "Glissando" +#~ msgstr "Glissando" + +#~ msgid "Arpeggio" +#~ msgstr "Arpeggio" + +#~ msgid "Trills" +#~ msgstr "Triller" + +#~ msgid "Repeats" +#~ msgstr "Wiederholungszeichen" + +#~ msgid "Normal repeats" +#~ msgstr "Normale Wiederholungen" + +#~ msgid "Manual repeat marks" +#~ msgstr "Manuelle Wiederholungszeichen" + +#~ msgid "Written-out repeats" +#~ msgstr "Ausgeschriebene Wiederholungen" + +#~ msgid "Short repeats" +#~ msgstr "Kurze Wiederholungen" + +#~ msgid "Percent repeats" +#~ msgstr "Prozent-Wiederholungen" + +#~ msgid "Tremolo repeats" +#~ msgstr "Tremolo-Wiederholung" + +#~ msgid "explicit single voice" +#~ msgstr "explizit eine Stimme" + +#~ msgid "single first note" +#~ msgstr "einzelne erste Note" + +#~ msgid "no single first note" +#~ msgstr "keine einzelne erste Note" + +#~ msgid "instrumentOne" +#~ msgstr "InstrumentEins" + +#~ msgid "instrumentTwo" +#~ msgstr "InstrumentZwei" + +#~ msgid "Bar 3 ..." +#~ msgstr "Takt 3 ..." + +#~ msgid "Single voice" +#~ msgstr "Eine einzelne Stimme" + +#~ msgid "Simultaneous expressions" +#~ msgstr "Gleichzeitige Ausdrücke" + +#~ msgid "Clusters" +#~ msgstr "Cluster" + +#~ msgid "Multiple voices" +#~ msgstr "Mehrere Stimmen" + +#~ msgid "Single-staff polyphony" +#~ msgstr "Mehrstimmigkeit in einem System" + +#~ msgid "Voice styles" +#~ msgstr "Stimmenstile" + +#~ msgid "Collision resolution" +#~ msgstr "Auflösung von Zusammenstößen" + +#~ msgid "Automatic part combining" +#~ msgstr "Automatische Kombination von Stimmen" + +#~ msgid "Writing music in parallel" +#~ msgstr "Musik parallel notieren" + +#~ msgid "oboe" +#~ msgstr "Oboe" + +#~ msgid "piccolo" +#~ msgstr "Piccolo" + +#~ msgid "cbassoon" +#~ msgstr "Ktrfgt" + +#~ msgid "Staff notation" +#~ msgstr "Notation auf Systemen" + +#~ msgid "Displaying staves" +#~ msgstr "Systeme anzeigen lassen" + +#~ msgid "Instantiating new staves" +#~ msgstr "Neue Notensysteme erstellen" + +#~ msgid "Grouping staves" +#~ msgstr "Systeme gruppieren" + +#~ msgid "Nested staff groups" +#~ msgstr "Verschachtelte Notensysteme" + +#~ msgid "Modifying single staves" +#~ msgstr "Einzelne Systeme verändern" + +#~ msgid "Staff symbol" +#~ msgstr "Das Notensystem" + +#~ msgid "Ossia staves" +#~ msgstr "Ossia-Systeme" + +#~ msgid "Hiding staves" +#~ msgstr "Systeme verstecken" + +#~ msgid "Writing parts" +#~ msgstr "Orchesterstimmen erstellen" + +#~ msgid "Metronome marks" +#~ msgstr "Metronomangabe" + +#~ msgid "Quoting other voices" +#~ msgstr "Stichnoten" + +#~ msgid "Formatting cue notes" +#~ msgstr "Stichnoten formatieren" + +#~ msgid "this is deliberate nonsense; note that the stems remain black" +#~ msgstr "Das ist Unsinn, die Hälsen bleiben schwarz" + +#~ msgid "Coloring objects" +#~ msgstr "Farbige Objekte" + +#~ msgid "Parentheses" +#~ msgstr "Klammern" + +#~ msgid "Stems" +#~ msgstr "Hälse" + +#~ msgid "Outside the staff" +#~ msgstr "Außerhalb des Notensystems" + +#~ msgid "Balloon help" +#~ msgstr "Erklärungen in Ballonform" + +#~ msgid "Grid lines" +#~ msgstr "Gitternetzlinien" + +#~ msgid "Analysis brackets" +#~ msgstr "Analyseklammern" + +#~ msgid "Text" +#~ msgstr "Text" + +#~ msgid "Writing text" +#~ msgstr "Text eingeben" + +#~ msgid "Text spanners" +#~ msgstr "Text mit Verbindungslinien" + +#~ msgid "Text marks" +#~ msgstr "Textartige Zeichen" + +#~ msgid "Formatting text" +#~ msgstr "Text formatieren" + +#~ msgid "Text markup introduction" +#~ msgstr "Textbeschriftung (Einleitung)" + +#~ msgid "Selecting font and font size" +#~ msgstr "Überblick über die wichtigsten Textbeschriftungsbefehle" + +#~ msgid "Text alignment" +#~ msgstr "Textausrichtung" + +#~ msgid "Graphic notation inside markup" +#~ msgstr "Graphische Notation innerhalb einer Textbeschriftung" + +#~ msgid "Music notation inside markup" +#~ msgstr "Musikalische Notation innerhalb einer Textbeschriftung" + +#~ msgid "Multi-page markup" +#~ msgstr "Textbeschriftung über mehrere Seiten" + +#~ msgid "Fonts" +#~ msgstr "Schriftarten" + +#~ msgid "Fonts explained" +#~ msgstr "Was sind Schriftarten" + +#~ msgid "Single entry fonts" +#~ msgstr "Schriftarten für einen Eintrag" + +#~ msgid "Entire document fonts" +#~ msgstr "Schriftart des gesamten Dokuments" + +#~ msgid "not recommended: left aligns syllables" +#~ msgstr "nicht empfohlen: Silben links ausrichten" + +#~ msgid "wrong: durations needed" +#~ msgstr "Falsch: brache Dauern" + +#~ msgid "lala" +#~ msgstr "lala" + +#~ msgid "splitpart" +#~ msgstr "StimmeTeilen" + +#~ msgid "lahlah" +#~ msgstr "Lalala" + +#~ msgid "moves the column off the left margin;" +#~ msgstr "Spalte vom linken Rand wegbewegen" + +#~ msgid "can be removed if space on the page is tight" +#~ msgstr "Kann entfernt werden, wenn wenig Platz auf der Seite ist" + +#~ msgid "adds vertical spacing between verses" +#~ msgstr "Vertikaler Abstand zwischen Strophen" + +#~ msgid "adds horizontal spacing between columns;" +#~ msgstr "Horizontalen Abstand zwischen Spalten hinzufügen;" + +#~ msgid "if they are still too close, add more \\\" \\\" pairs" +#~ msgstr "Wenn sie immer noch zu eng sind, mehr \\\" \\\"-Paare hinzufügen" + +#~ msgid "until the result looks good" +#~ msgstr "bis das Resultat gut aussieht" + +#~ msgid "gives some extra space on the right margin;" +#~ msgstr "zusätzlichen Platz für den rechten Rand" + +#~ msgid "can be removed if page space is tight" +#~ msgstr "kann entfernt werden, wenn wenig Platz auf der Seite ist" + +#~ msgid "Vocal music" +#~ msgstr "Notation von Gesang" + +#~ msgid "Common notation for vocal music" +#~ msgstr "Übliche Notation für Vokalmusik" + +#~ msgid "References for vocal music and lyrics" +#~ msgstr "Referenz für Vokalmusik und Gesangstext" + +#~ msgid "Opera" +#~ msgstr "Oper" + +#~ msgid "Song books" +#~ msgstr "Liederhefte" + +#~ msgid "Spoken music" +#~ msgstr "Gesprochene Musik" + +#~ msgid "Chants" +#~ msgstr "Hymnen" + +#~ msgid "Ancient vocal music" +#~ msgstr "Alte Vokalmusik" + +#~ msgid "Lyrics explained" +#~ msgstr "Was ist Gesangtext" + +#~ msgid "Working with lyrics and variables" +#~ msgstr "Mit Gesangtexten und Bezeichnern arbeiten" + +#~ msgid "Automatic syllable durations" +#~ msgstr "Automatische Silbendauer" + +#~ msgid "Manual syllable durations" +#~ msgstr "Manuelle Silbendauer" + +#~ msgid "Multiple syllables to one note" +#~ msgstr "Mehrere Silben zu einer Note" + +#~ msgid "Multiple notes to one syllable" +#~ msgstr "Mehrere Noten zu einer Silbe" + +#~ msgid "Extenders and hyphens" +#~ msgstr "Fülllinien und Trennstriche" + +#~ msgid "Lyrics and repeats" +#~ msgstr "Gesangtext und Wiederholungen" + +#~ msgid "Specific uses of lyrics" +#~ msgstr "Besonderheiten der Gesangtextnotation" + +#~ msgid "Divisi lyrics" +#~ msgstr "Getrennte Texte" + +#~ msgid "Lyrics independent of notes" +#~ msgstr "Text unabhängig von den Noten" + +#~ msgid "Centering lyrics between staves" +#~ msgstr "Gesangtext zwischen Systemen zentrieren" + +#~ msgid "Stanzas" +#~ msgstr "Strophen" + +#~ msgid "Adding stanza numbers" +#~ msgstr "Strophennummern hinzufügen" + +#~ msgid "Adding dynamics marks to stanzas" +#~ msgstr "Lautstärkebezeichnung zu Strophen hinzufügen" + +#~ msgid "Adding singers' names to stanzas" +#~ msgstr "Sängernamen zu Strophen hinzufügen" + +#~ msgid "Stanzas with different rhythms" +#~ msgstr "Strophen mit unterschiedlichem Rhythmus" + +#~ msgid "Ignoring melismata" +#~ msgstr "Melismen ignorieren" + +#~ msgid "Switching to an alternative melody" +#~ msgstr "Zu einer alternativen Melodie umschalten" + +#~ msgid "Printing stanzas at the end" +#~ msgstr "Die Strophen am Ende ausdrucken" + +#~ msgid "Printing stanzas at the end in multiple columns" +#~ msgstr "Die Strophen am Ende in mehreren Spalten drucken" + +#~ msgid "keep staff alive" +#~ msgstr "System aufrecht erhalten" + +#~ msgid "melOne" +#~ msgstr "melEins" + +#~ msgid "stems may overlap the other staff" +#~ msgstr "Hals kann das andere System überschneiden" + +#~ msgid "extend the stems to reach other other staff" +#~ msgstr "Hälse verlängern um anderes System zu erreichen" + +#~ msgid "do not print extra flags" +#~ msgstr "keine doppelten Fähnchen" + +#~ msgid "prevent beaming as needed" +#~ msgstr "Balken verhindern" + +#~ msgid "Keyboard and other multi-staff instruments" +#~ msgstr "Tasteninstrumente und andere Instrumente mit mehreren Systemen" + +#~ msgid "Common notation for keyboards" +#~ msgstr "Übliche Notation für Tasteninstrumente" + +#~ msgid "References for keyboards" +#~ msgstr "Referenz für Tasteninstrumente" + +#~ msgid "Changing staff manually" +#~ msgstr "Notensysteme manuell verändern" + +#~ msgid "Changing staff automatically" +#~ msgstr "Automatischer Systemwechsel" + +#~ msgid "Staff-change lines" +#~ msgstr "Stimmführungslinien" + +#~ msgid "Cross-staff stems" +#~ msgstr "Hälse über beide Systeme" + +#~ msgid "Piano" +#~ msgstr "Klavier" + +#~ msgid "Piano pedals" +#~ msgstr "Klavierpedal" + +#~ msgid "Discant symbols" +#~ msgstr "Diskant-Symbole" + +#~ msgid "Harp" +#~ msgstr "Harfe" + +#~ msgid "References for harps" +#~ msgstr "Referenzen für Harfe" + +#~ msgid "Harp pedals" +#~ msgstr "Harfenpedal" + +#~ msgid "Unfretted string instruments" +#~ msgstr "Bundlose Saiteninstrumente" + +#~ msgid "Common notation for unfretted strings" +#~ msgstr "Übliche Notation für nichtgebundene Saiteninstrumente" + +#~ msgid "References for unfretted strings" +#~ msgstr "Hinweise für ungebundene Saiteninstrumente" + +#~ msgid "Bowing indications" +#~ msgstr "Bezeichnung des Bogens" + +#~ msgid "Harmonics" +#~ msgstr "Flageolett" + +#~ msgid "Snap (Bartok) pizzicato" +#~ msgstr "Bartók-Pizzicato" + +#~ msgid "Snap (Bartók) pizzicato" +#~ msgstr "Bartók-Pizzicato" + +#~ msgid "mychordlist" +#~ msgstr "meineAkkordliste" + +#~ msgid "add a new chord shape" +#~ msgstr "Neues Akkordmuster hinzufügen" + +#~ msgid "add some new chords based on the power chord shape" +#~ msgstr "neue Akkorde basierend auf dem power-chord-Muster hinzufügen" + +#~ msgid "Fretted string instruments" +#~ msgstr "Saiteninstrumente mit Bünden" + +#~ msgid "Common notation for fretted strings" +#~ msgstr "Übliche Notation für gebundene Saiteninstrumente" + +#~ msgid "References for fretted strings" +#~ msgstr "Referenz für gebundene Saiteninstrumente" + +#~ msgid "Default tablatures" +#~ msgstr "Standardtabulaturen" + +#~ msgid "Custom tablatures" +#~ msgstr "Angepasste Tabulaturen" + +#~ msgid "Fret diagram markups" +#~ msgstr "Bund-Diagramm-Beschriftung" + +#~ msgid "Predefined fret diagrams" +#~ msgstr "Vordefinierte Bund-Diagramme" + +#~ msgid "Automatic fret diagrams" +#~ msgstr "Automatische Bund-Diagramme" + +#~ msgid "Right-hand fingerings" +#~ msgstr "Fingersatz der rechten Hand" + +#~ msgid "Indicating position and barring" +#~ msgstr "Position und Barret anzeigen" + +#~ msgid "Indicating harmonics and dampened notes" +#~ msgstr "Flageolett und gedämpfte Noten" + +#~ msgid "Banjo" +#~ msgstr "Banjo" + +#~ msgid "Banjo tablatures" +#~ msgstr "Banjo-Tabulaturen" + +#~ msgid "These lines define the position of the woodblocks in the stave;" +#~ msgstr "Diese Zeilen definieren die Position der Holzblöcke auf dem System" + +#~ msgid "if you like, you can change it or you can use special note heads" +#~ msgstr "" +#~ "Wenn Sie wollen, können Sie das ändern oder besondere Notenköpfe benutzen" + +#~ msgid "for the woodblocks." +#~ msgstr "für die Holzblöcke" + +#~ msgid "woodstaff" +#~ msgstr "System für Holz" + +#~ msgid "This defines a staff with only two lines." +#~ msgstr "Definiert ein System mit zwei Linien." + +#~ msgid "It also defines the positions of the two lines." +#~ msgstr "Auch die Position der zwei Linien wird festgelegt" + +#~ msgid "This is neccessary; if not entered, the barline would be too short!" +#~ msgstr "" +#~ "Das ist notwendig. Wenn nicht angegeben, wird die Taktlinie zu kurz!" + +#~ msgid "with this you load your new drum style table" +#~ msgstr "jetzt neue Trommelstil-Tabelle laden" + +#~ msgid "tambustaff" +#~ msgstr "Tambu-System" + +#~ msgid "the trick with the scaled duration and the shorter rest" +#~ msgstr "Trick mit der skalierten Dauer und der kürzeren Pause" + +#~ msgid "is neccessary for the correct ending of the trill-span!" +#~ msgstr "ist·nötig,damit·die·Trillerspannweite·richtig·endet" + +#~ msgid "tamtamstaff" +#~ msgstr "tamtam-System" + +#~ msgid "bellstaff" +#~ msgstr "Glocken-System" + +#~ msgid "drumsA" +#~ msgstr "TrommelA" + +#~ msgid "drumsB" +#~ msgstr "TrommelB" + +#~ msgid "Common notation for percussion" +#~ msgstr "Übliche Notation für Schlagzeug" + +#~ msgid "References for percussion" +#~ msgstr "Referenz für Schlagzeug" + +#~ msgid "Basic percussion notation" +#~ msgstr "Grundlagen der Schlagzeugnotation" + +#~ msgid "Drum rolls" +#~ msgstr "Trommelwirbel" + +#~ msgid "Pitched percussion" +#~ msgstr "Schlagzeug mit Tonhöhe" + +#~ msgid "Percussion staves" +#~ msgstr "Schlagzeugsysteme" + +#~ msgid "Custom percussion staves" +#~ msgstr "Eigene Schlagzeugsysteme" + +#~ msgid "Wind instruments" +#~ msgstr "Blasinstrumente" + +#~ msgid "Common notation for wind instruments" +#~ msgstr "Übliche Notation für Bläser" + +#~ msgid "References for wind instruments" +#~ msgstr "Referenz für Blasinstrumente" + +#~ msgid "Bagpipes" +#~ msgstr "Dudelsack" + +#~ msgid "Bagpipe definitions" +#~ msgstr "Dudelsack-Defintionen" + +#~ msgid "Bagpipe example" +#~ msgstr "Dudelsack-Beispiele" + +#~ msgid "Put notes on same Staff as figures" +#~ msgstr "Noten auf dem gleichen System wie die Symbole" + +#~ msgid "The extenders are correct here, with the same rhythm as the bass" +#~ msgstr "Linien stimmen hier, mit dem gleichen Rhythmus wie im Bass" + +#~ msgid "The extenders are incorrect here, even though the timing is the same" +#~ msgstr "Linien stimmen nicht, obwohl der Rhythmus der gleiche ist" + +#~ msgid "Chord mode overview" +#~ msgstr "Überblick über den Akkord-Modus" + +#~ msgid "Common chords" +#~ msgstr "Übliche Akkorde" + +#~ msgid "Extended and altered chords" +#~ msgstr "Erweiterte und modifizierte Akkorde" + +#~ msgid "Displaying chords" +#~ msgstr "Akkorde anzeigen" + +#~ msgid "Printing chord names" +#~ msgstr "Akkordbezeichnungen drucken" + +#~ msgid "Customizing chord names" +#~ msgstr "Akkordbezeichnungen anpassen" + +#~ msgid "Figured bass" +#~ msgstr "Generalbass" + +#~ msgid "Introduction to figured bass" +#~ msgstr "Grundlagen des Bezifferten Basses" + +#~ msgid "Entering figured bass" +#~ msgstr "Eingabe des Generalbass'" + +#~ msgid "Displaying figured bass" +#~ msgstr "Generalbass anzeigen" + +#~ msgid "ficta" +#~ msgstr "ficta" + +#~ msgid "spiritus" +#~ msgstr "spiritus" + +#~ msgid "spirLyr" +#~ msgstr "spirText" + +#~ msgid "Ancient notation" +#~ msgstr "Notation von alter Musik" + +#~ msgid "Overview of the supported styles" +#~ msgstr "Überblick über die unterstützten Stile" + +#~ msgid "Ancient notation---common features" +#~ msgstr "Alte Notation -- Allgemeines" + +#~ msgid "Pre-defined contexts" +#~ msgstr "Vordefinierte Umgebungen" + +#~ msgid "Custodes" +#~ msgstr "Custodes" + +#~ msgid "Figured bass support" +#~ msgstr "Unterstützung für Generalbass" + +#~ msgid "Typesetting mensural music" +#~ msgstr "Mesurale Musik setzen" + +#~ msgid "Mensural contexts" +#~ msgstr "Mensural-Kontexte" + +#~ msgid "Mensural note heads" +#~ msgstr "Mensurale Notenköpfe" + +#~ msgid "Mensural flags" +#~ msgstr "Mensurale Fähnchen" + +#~ msgid "Mensural rests" +#~ msgstr "Mensurale Pausen" + +#~ msgid "Mensural accidentals and key signatures" +#~ msgstr "Mensurale Versetzungszeichen und Tonartbezeichnung" + +#~ msgid "Annotational accidentals (musica ficta)" +#~ msgstr "Vorgeschlagene Versetzungszeichen (musica ficta)" + +#~ msgid "Annotational accidentals (@emph{musica ficta})" +#~ msgstr "Vorgeschlagene Versetzungszeichen (@emph{musica ficta})" + +#~ msgid "White mensural ligatures" +#~ msgstr "Weiße Mensuralligaturen" + +#~ msgid "Typesetting Gregorian chant" +#~ msgstr "Gregorianischen Choral setzen" + +#~ msgid "Gregorian chant contexts" +#~ msgstr "Gregorianische Gesangs-Kontexte" + +#~ msgid "Gregorian clefs" +#~ msgstr "Gregorianische Schlüssel" + +#~ msgid "Gregorian accidentals and key signatures" +#~ msgstr "Gregorianische Versetzungszeichen und Tonartbezeichnung" + +#~ msgid "Gregorian articulation signs" +#~ msgstr "Artikulationszeichen des Gregorianischen Chorals" + +#~ msgid "Augmentum dots (@emph{morae})" +#~ msgstr "Augmentationspunkte (@emph{morae})" + +#~ msgid "Gregorian square neume ligatures" +#~ msgstr "Ligaturen der gregorianischen Quadratnotation" + +#~ msgid "Working with ancient music---scenarios and solutions" +#~ msgstr "Musiksatz Alter Musik in der Praxis -- Szenarien und Lösungen" + +#~ msgid "Incipits" +#~ msgstr "Incipite" + +#~ msgid "Mensurstriche layout" +#~ msgstr "Mensurstriche" + +#~ msgid "Transcribing Gregorian chant" +#~ msgstr "Gregorianischen Choral transkribieren" + +#~ msgid "Ancient and modern from one source" +#~ msgstr "Alte und moderne Edition aus einer Quelldatei" + +#~ msgid "Editorial markings" +#~ msgstr "Herausgeberische Anmerkungen" + +#~ msgid "World music" +#~ msgstr "Weltmusik" + +#~ msgid "Arabic music" +#~ msgstr "Arabische Musik" + +#~ msgid "References for Arabic music" +#~ msgstr "Referenz für arabische Musik" + +#~ msgid "Arabic key signatures" +#~ msgstr "Arabische Tonarten" + +#~ msgid "Arabic time signatures" +#~ msgstr "Arabische Taktarten" + +#~ msgid "Arabic music example" +#~ msgstr "Arabische Notenbeispiele" + +#~ msgid "Further reading" +#~ msgstr "Weitere Literatur" + +#~ msgid "Two-pass vertical spacing" +#~ msgstr "Vertikale Abstände mit zwei Durchgängen" + +#~ msgid "Overview of music functions" +#~ msgstr "Überblick über musikalische Funktionen" + +#~ msgid "Programmer interfaces" +#~ msgstr "Schnittstelle für Programmierer" + +#~ msgid "Markup programmer interface" +#~ msgstr "Programmierungsschnittstelle für Textbeschriftungen" + +#~ msgid "Using Scheme code instead of \\tweak" +#~ msgstr "Scheme-Code anstelle von \\tweak verwenden" + +#~ msgid "Using Scheme code instead of @code{\\tweak}" +#~ msgstr "Scheme-Code anstelle von @code{\tweak} verwenden" + +#~ msgid "Identifiers" +#~ msgstr "Bezeichner" + +#~ msgid "GNU LilyPond --- Manuel d'initiation" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" + +#~ msgid "Commonly tweaked properties" +#~ msgstr "Übliche Veränderungen der Einstellungen" + +#~ msgid "Hauteurs" +#~ msgstr "Hauteurs" + +#~ msgid "Durées et rythme" +#~ msgstr "Durées·et·rythme" + +#~ msgid "Silences" +#~ msgstr "Silences" + +#~ msgid "Métrique" +#~ msgstr "Métrique" + +#~ msgid "Tout ensemble" +#~ msgstr "Tout·ensemble" + +#~ msgid "Exemples cliquables" +#~ msgstr "Exemples·cliquables" + +#~ msgid "Outside staff objects" +#~ msgstr "Objekte außerhalb des Notensystems" + +#~ msgid "GNU LilyPond --- Utilisation des programmes" +#~ msgstr "GNU LilyPond -- Die Programmbenutzung" + +#~ msgid "Updating with @command{convert-ly}" +#~ msgstr "Dateien mit @command{convert-ly} aktualisieren" + +#~ msgid "GNU LilyPond --- Manuel de notation" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" + +#~ msgid "Repeat syntax" +#~ msgstr "Die Syntax der Wiederholungen" + +#~ msgid "Manual repeat commands" +#~ msgstr "Manuelle Wiederholungsbefehle" + +#~ msgid "Other repeats" +#~ msgstr "Andere Wiederholungen" + +#~ msgid "Tremolo subdivisions" +#~ msgstr "Tremolo-Unterteilung" + +#~ msgid "Basic polyphony" +#~ msgstr "Einfache Mehrstimmigkeit" + +#~ msgid "Blank music sheet" +#~ msgstr "Ein leeres Notenblatt" + +#~ msgid "Text and line spanners" +#~ msgstr "Text und Linien" + +#~ msgid "Nested scores" +#~ msgstr "Geschachtelte Systeme" + +#~ msgid "Page wrapping text" +#~ msgstr "Text über mehrere Seiten" + +#~ msgid "Mélismes dans certaines strophes seulement" +#~ msgstr "Mélismes·dans·certaines·strophes·seulement" + +#~ msgid "Basculer vers une mélodie alternative" +#~ msgstr "Basculer·vers·une·mélodie·alternative" + +#~ msgid "Introduction to ancient notation" +#~ msgstr "Einführung in die Notation Alter Musik" + +#~ msgid "Ancient notation supported" +#~ msgstr "Notation von Alter Musik, die unterstützt wird" + +#~ msgid "Ancient note heads" +#~ msgstr "Notenköpfe Alter Musik" + +#~ msgid "Ancient accidentals" +#~ msgstr "Versetzungszeichen Alter Musik" + +#~ msgid "Ancient flags" +#~ msgstr "Fähnchen Alter Musik" + +#~ msgid "Ancient time signatures" +#~ msgstr "Taktangaben Alter Musik" + +#~ msgid "Additional note signs" +#~ msgstr "Zusätzliche Notenzeichen" + +#~ msgid "Ancient articulations" +#~ msgstr "Artikulationszeichen Alter Musik" + +#~ msgid "Gregorian square neumes ligatures" +#~ msgstr "Ligaturen der gregorianischen Quadratnotation" + +#~ msgid "Transcribing ancient music" +#~ msgstr "Transkription Alter Musik" + +#~ msgid "Annotational accidentals" +#~ msgstr "Vorgeschlagene Versetzungszeichen" + +#~ msgid "Baroque rhythmic notation" +#~ msgstr "Notation barocker Rhythmen" + +#~ msgid "Horizontal Spacing" +#~ msgstr "Horizontale Abstände" + +#~ msgid "Layout tunings within contexts" +#~ msgstr "Layouteinstellungen mit Umgebungen" + +#~ msgid "Constructing a tweak" +#~ msgstr "Eine Korrektur konstruieren" + +#~ msgid "Using Scheme code instead of tweak" +#~ msgstr "Using·Scheme·code·instead·of·tweak" + +#~ msgid "GNU LilyPond: Manual de aprendizaje" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" + +#~ msgid "Instrucciones predefinidas" +#~ msgstr "Instrucciones·predefinidas" + +#~ msgid "Fragmentos de código seleccionados" +#~ msgstr "Fragmentos·de·código·seleccionados" + +#~ msgid "Propiedades trucadas frecuentemente" +#~ msgstr "Propiedades·trucadas·frecuentemente" + +#~ msgid "Véase también" +#~ msgstr "Véase·también" + +#~ msgid "Advertencias y problemas conocidos" +#~ msgstr "Advertencias·y·problemas·conocido" + +#~ msgid "Automatic behaviour" +#~ msgstr "Automatisches Verhalten" + +#~ msgid "Updating old files" +#~ msgstr "Alte Dateien aktualisieren" + +#~ msgid "GNU LilyPond: Manual de utilización del programa" +#~ msgstr "GNU LilyPond -- Die Programmbenutzung" + +#~ msgid "GNU LilyPond: Manual de referencia de la notación" +#~ msgstr "GNU LilyPond -- Die Notationsreferenz" + +#~ msgid "El tipografiador de música" +#~ msgstr "GNU LilyPond -- Das Notensatzprogramm" + +#~ msgid "GNU LilyPond -- Handbuch zum Lernen" +#~ msgstr "GNU LilyPond -- Handbuch zum Lernen" + +#~ msgid "Lilypond-book templates" +#~ msgstr "Lilypond-book-Vorlagen" + +#~ msgid "GNU LilyPond -- Programmbenutzung" +#~ msgstr "GNU LilyPond -- Programmbenutzung" + +#~ msgid "Das Notensatzprogramm" +#~ msgstr "Das Notensatzprogramm" + +#~ msgid "Ignorieren von Melismen" +#~ msgstr "Melismen ignorieren" + +#~ msgid "The next line is not needed in 2.11.x or later:" +#~ msgstr "Die nächste Zeile braucht man nicht in 2.11.x oder später" + +#~ msgid "Automatic beams two per two in 4/4 or 2/2 time signature" +#~ msgstr "Automatische Balken zwei und zwei in 4/4 oder 2/2-Takten" + +#~ msgid "_____" +#~ msgstr "_____" + +#~ msgid "Default | | | |" +#~ msgstr "Standard····|·|·|·|" + +#~ msgid "_ _" +#~ msgstr "_..._" + +#~ msgid "Required | | | |" +#~ msgstr "Benötigt····|·|·|·|" + +#~ msgid "macro for beamed two per two in 2/2 and 4/4 time signature" +#~ msgstr "Makro für bebalkte zwei und zwei in 2/2 und 4/4 Takten" + +#~ msgid "qBeam" +#~ msgstr "qBalken" + +#~ msgid "Use the macro" +#~ msgstr "Makro benutzen" + +#~ msgid "Change time signature symbol but keep 3/4 beaming" +#~ msgstr "Taktartsymbol ändern, aber 3/4-Balken" + +#~ msgid "due to unchanged underlying time signature" +#~ msgstr "wegen unveränderter Taktartaufteilung behalten" + +#~ msgid "Lose 3/4 beaming now \\time has been changed" +#~ msgstr "3/4-Balken lösen, da \\time geändert wurde" + +#~ msgid "TAB" +#~ msgstr "TAB" + +#~ msgid "define Dynamics context" +#~ msgstr "Dynamik-Kontext definieren" + +#~ msgid "modify PianoStaff context to accept Dynamics context" +#~ msgstr "PianoStaff-Kontext verändern, dass er Dynamics-Kontext akzeptiert" + +#~ msgid "Revert default values in scm/auto-beam.scm for 12/8 time" +#~ msgstr "Standardwerte von scm/auto-beam.scm für 12/8-Takt herstellen" + +#~ msgid "melodyVoi" +#~ msgstr "MelodieStimme" + +#~ msgid "VoiceBassRhytm" +#~ msgstr "StimmeBassRhythmus" + +#~ msgid "Define the fret diagrams to be used" +#~ msgstr "Die benutzten Bund-Diagramme definieren" + +#~ msgid "cFretDiagram" +#~ msgstr "cBundDiagramm" + +#~ msgid "gFretDiagram" +#~ msgstr "gBundDiagramm" + +#~ msgid "now it can be used as \\snappizzicato after the note/chord" +#~ msgstr "" +#~ "jetzt kann es als \\schlagPizzicato nach einer Note/Akkord benutzt werden" + +#~ msgid "Note that a direction (-, ^ or _) is required." +#~ msgstr "Eine Richtung (-, ^ oder _) wird benötigt" + +#~ msgid "This does NOT work:" +#~ msgstr "Das funktioniert NICHT:" + +#~ msgid "\\snapPizzicato" +#~ msgstr "\\schlagPizzicato" + +#~ msgid "The default in 3/4 time is to beam in three groups" +#~ msgstr "Standard in 3/4-Takt sind drei bebalkte Gruppen" + +#~ msgid "each of a quarter note length" +#~ msgstr "jede mit der Dauer einer Viertel" + +#~ msgid "No auto-beaming is defined for 12/16" +#~ msgstr "Keine autom. Bebalkung definiert für 12/16" + +#~ msgid "Change time signature symbol, but retain underlying 3/4 beaming" +#~ msgstr "Taktart-Symbol ändern, aber 3/4-Bebalkung beibehalten" + +#~ msgid "The 3/4 time default grouping of (1 1 1) and beatLength of 1/8" +#~ msgstr "3/4-Taktart Standardgruppen (1 1 1) und beatLenght von 1/8" + +#~ msgid "are not consistent with a measureLength of 3/4, so the beams" +#~ msgstr "stimme nicht überein mit measureLenght von 3/4, sodass die Balken" + +#~ msgid "are grouped at beatLength intervals" +#~ msgstr "anhand von beatLength-Intervallen gruppiert werden" + +#~ msgid "Specify beams in groups of (3 3 2 3) 1/16th notes" +#~ msgstr "Definition von Balken in Gruppen von (3 3 2 3) 1/16-Noten" + +#~ msgid "3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply," +#~ msgstr "3+3+2+3=11, und 11*16<>3/4, also trifft beatGrouping nicht zu," + +#~ msgid "and beams are grouped at beatLength (1/16) intervals" +#~ msgstr "" +#~ "und Balken werden gruppiert anhand von beatLength (1/16)-Intervallen" + +#~ msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" +#~ msgstr "Definition von Balkengruppen für (3 4 2 3) 1/16-Noten" + +#~ msgid "3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies" +#~ msgstr "3+4+2+3=12, und 12*1/16=3/4, also beatGrouping wird verwendet" + +#~ msgid "Right-align bar numbers" +#~ msgstr "Taktnummern rechtsbündig" + +#~ msgid "Using the @code{break-aligned-interface}" +#~ msgstr "Das @code{break-aligned-interface} benutzen" + +#~ msgid "How LilyPond files work" +#~ msgstr "Wie eine LilyPond-Datei funktioniert" + +#~ msgid "MacOS X on the command-line" +#~ msgstr "MacOS X auf der Kommandozeile" + +#~ msgid "Harp notation" +#~ msgstr "Harfennotation" + +#~ msgid "GNU LilyPond -- Notationsreferenz" +#~ msgstr "GNU LilyPond -- Notationsreferenz" + +#~ msgid "Controlling visibility of objects" +#~ msgstr "Die Sichtbarkeit von Objekten kontrollieren" + +#~ msgid "Modifying ends of spanners" +#~ msgstr "Enden von Streckern verändern" + +#~ msgid "Discussion of specific tweaks" +#~ msgstr "Erklärung von speziellen Optimierungen" + +#~ msgid "old Contexts explained" +#~ msgstr "Alte Kontexte" + +#~ msgid "TODO moved into scheme" +#~ msgstr "TODO nach Scheme verschoben" + +#~ msgid "Use 'bar-size to control the height of the tick," +#~ msgstr "'bar-size benutzen um die Höhe des Häkchens zu bestimmen," + +#~ msgid "and 'extra-offset to determine its position." +#~ msgstr "'extra-offset, umd seine Position zu bestimmen." + +#~ msgid "With 'extra-offset set to zero, the tick will be" +#~ msgstr "Mit 'extra-offset auf Null gesetzt, wird das Häkchen" + +#~ msgid "centered around the middle line of the staff." +#~ msgstr "um die Mittellinie des Systems zentriert" + +#~ msgid "Replace Staff.BarLine with Score.BarLine to" +#~ msgstr "Staff.BarLine mit Score.BarLine ersetzen" + +#~ msgid "apply the method to the whole score." +#~ msgstr "um die Methode auf die gesamte Partitur anzuwenden" + +#~ msgid "Revert the overrides to get back a normal" +#~ msgstr "alles rückgängig machen und eine normale" + +#~ msgid "bar line at the end." +#~ msgstr "Taktlinie am Ende setzen" + +#~ msgid "applies to \\\"fas\\\"" +#~ msgstr "gehört zu \\\"fas\\\"" + +#~ msgid "GNU LilyPond -- Das Notationsprogramm" +#~ msgstr "GNU LilyPond -- Das Notationsprogramm" + +#~ msgid "System start delimiters" +#~ msgstr "Klammern am Systemanfang" + +#, fuzzy +#~ msgid "lines length" +#~ msgstr "Zeilenlänge" + +#, fuzzy +#~ msgid "making sure the lines will be placed outside the Staff" +#~ msgstr "jetzt ist der Text näher am System" + +#, fuzzy +#~ msgid "auto beam on 1/4 note groups" +#~ msgstr "autom. Balken für 1/4-Notengruppen\t" + +#, fuzzy +#~ msgid "keep 3/4 beaming" +#~ msgstr "3/4-Balken behalten" + +#~ msgid "due to beatLength" +#~ msgstr "aufgrund von beatLength" + +#~ msgid "beam on 1/8 notes" +#~ msgstr "Balken für 1/8-Noten" + +#~ msgid "beam on 3/16, 7/16, 9/16, 12/16" +#~ msgstr "Balken für 3/16, 7/16, 9/16, 12/16" + +#~ msgid "\\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)" +#~ msgstr "\\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)" + +#~ msgid "force-hshift-Eigenschaft" +#~ msgstr "force-hshift-Eigenschaft" + +#~ msgid "Laissez vibrer ties" +#~ msgstr "Laissez-vibrer-Bögen" + +#~ msgid "Create 9/8 split into 2/4 + 5/8" +#~ msgstr "Erstelle 9/8 als 2/4 + 5/8" + +#~ msgid "Keyboard instruments" +#~ msgstr "Tasteninstrumente" + +#~ msgid "Bowed instruments" +#~ msgstr "Streichinstrumente" + +#~ msgid "References for bowed strings" +#~ msgstr "Referenz für Streicher" + +#~ msgid "Plucked instruments" +#~ msgstr "Zupfinstrumente" + +#~ msgid "Writing long repeats" +#~ msgstr "Lange Wiederholungen eingeben" + +#~ msgid "Placement of lyrics" +#~ msgstr "Positionierung von Gesangtext" + +#, fuzzy +#~ msgid "Keyboard and other many-stringed instruments" +#~ msgstr "Saiteninstrumente mit Bünden" + +#~ msgid "" +#~ "Report errors to %(mail_address)s." +#~ msgstr "" +#~ "Fehler bitte an %(mail_address)s " +#~ "melden." + +#~ msgid "Writing repeats" +#~ msgstr "Wiederholungen eingeben" + +#~ msgid "doits" +#~ msgstr "doits" + +#~ msgid "or You can use special note heads for the woodblocks." +#~ msgstr "" +#~ "oder spezielle Notenköpfe können für die Holzblöcke definiert werden" + +#~ msgid "tambourine-music is entered with \\\"tamb\\\"" +#~ msgstr "Taburin-Noten eingegeben mit \\\"tamb\\\"" + +#~ msgid "bells are enterd with:" +#~ msgstr "Glocken eingeben:" + +#~ msgid "\\\"cb\\\" (cowbell) and \\\"rb\\\" (ridebell)\\\" " +#~ msgstr "\\\"cb\\\" (Kuhglocke) und \\\"rb\\\" (Reitglocke)\\\" " + +#~ msgid "Collision Resolution" +#~ msgstr "Auflösung von Zusammenstößen" + +#~ msgid "The piano staff" +#~ msgstr "Das Klaviersystem" + +#~ msgid "Right hand fingerings" +#~ msgstr "Fingersatz der rechten Hand" + +#~ msgid "Simulating a fermata" +#~ msgstr "Eine Fermate simulieren" + +#~ msgid "Ancient TODO" +#~ msgstr "Alte Musik" + +#~ msgid "Gregorian Chant contexts" +#~ msgstr "Gregorianische Gesangs-Kontexte" + +#~ msgid "Musica ficta accidentals" +#~ msgstr "Musica-ficta-Versetzungszeichen" + +#~ msgid "User manual" +#~ msgstr "Benutzerhandbuch" + +#~ msgid "Learning manual" +#~ msgstr "Handbuch zum Lernen (LH)" + +#~ msgid "Notation reference" +#~ msgstr "Notationsreferenz (NR)" + +#~ msgid "Appendices" +#~ msgstr "Anhang" + +#~ msgid "Program usage" +#~ msgstr "Programmbenutzung" + +#~ msgid "Unix" +#~ msgstr "Unix" + +#~ msgid "Working on text files" +#~ msgstr "Arbeiten an Text-Dateien" + +#~ msgid "Guitar tablatures" +#~ msgstr "Gitarren-Tabulaturen" + +#~ msgid "smaller" +#~ msgstr "kleiner" + +#~ msgid "Half-holes" +#~ msgstr "Halbgeschlossene Löcher" + +#~ msgid "Objects connected to the input" +#~ msgstr "Objekte, die mit der Eingabe verbunden sind" + +#~ msgid "Default files" +#~ msgstr "Standarddateien" + +#~ msgid "Normal pitches" +#~ msgstr "Normale Tonhöhen" + +#~ msgid "Cautionary accidentals" +#~ msgstr "Warnungsversetzungszeichen" + +#~ msgid "Micro tones" +#~ msgstr "Mikrotöne" + +#~ msgid "Octave check" +#~ msgstr "Oktavenüberprüfung" + +#~ msgid "Skips" +#~ msgstr "Überspringen von Zeichen" + +#~ msgid "Multi measure rests" +#~ msgstr "Mehrtaktige Pausen" + +#~ msgid "Bar check" +#~ msgstr "Taktüberprüfung" + +# +# +#~ msgid "Barnumber check" +#~ msgstr "Taktzahlüberprüfung" + +#~ msgid "Proportional notation (introduction)" +#~ msgstr "Proportionale Notation (Einleitung)" + +#~ msgid "Automatic notation" +#~ msgstr "Automatische Notation" + +#, fuzzy +#~ msgid "Microtones in MIDI" +#~ msgstr "Mikrotöne" + +#~ msgid "Input files" +#~ msgstr "Quelldateien" + +#~ msgid "A single music expression" +#~ msgstr "Ein einzelner musikalischer Ausdruck" + +#~ msgid "Extracting fragments of notation" +#~ msgstr "Notationsfragmente extrahieren" + +#~ msgid "Common syntax issues TODO name?" +#~ msgstr "Übliche Syntax-Probleme" + +#~ msgid "Controlling direction" +#~ msgstr "Richtungskontrolle" + +#~ msgid "Distances and measurements MAYBE MOVE" +#~ msgstr "Abstände und Maßeinheiten" + +#~ msgid "Non-musical notation" +#~ msgstr "Nichtmusikalische Notation" + +#~ msgid "MIDI instrument names" +#~ msgstr "MIDI-Instrumentenbezeichnungen" + +#~ msgid "Repeats and MIDI" +#~ msgstr "Wiederholungen und MIDI" + +#~ msgid "other midi" +#~ msgstr "Weiter Midi-Probleme" + +#~ msgid "Page layout MOVED FROM LM" +#~ msgstr "Seitenlayout" + +#~ msgid "Introduction to layout" +#~ msgstr "Einfürung in das Layout" + +#~ msgid "Global sizes" +#~ msgstr "Globale Größenangabe" + +#~ msgid "Line breaks" +#~ msgstr "Zeilenumbrüche" + +#~ msgid "Page breaks" +#~ msgstr "Seitenumbrüche" + +#~ msgid "Input syntax" +#~ msgstr "Die Eingabe-Syntax" + +#~ msgid "Controlling direction and placement" +#~ msgstr "Richtung und Platzierung kontrollieren" + +#~ msgid "When to add a -" +#~ msgstr "Wann ein - hinzugefügt wird" + +#, fuzzy +#~ msgid "old The \\override command" +#~ msgstr "Der \\override-Befehl" + +#, fuzzy +#~ msgid "old The @code{\\override} command" +#~ msgstr "Der \\override-Befehl" + +#~ msgid "Simple lyrics" +#~ msgstr "Einfache Gesangstexte" + +#~ msgid "Another way of entering lyrics" +#~ msgstr "Eine andere Art, den Text einzugeben" + +#~ msgid "Assigning more than one syllable to a single note" +#~ msgstr "Mehr als eine Strophe an einer Note ausrichten" + +#~ msgid "More than one note on a single syllable" +#~ msgstr "Mehr als eine Note für eine einzelne Silbe" + +#~ msgid "Vocals and variables" +#~ msgstr "Gesangstexte und Bezeichner" + +#~ msgid "Flexibility in placement" +#~ msgstr "Flexibilität bei der Positionierung" + +#~ msgid "Lyrics to multiple notes of a melisma" +#~ msgstr "Text zu mehreren Noten eines Melismas" + +#~ msgid "Switching the melody associated with a lyrics line" +#~ msgstr "Die Melodie, die mit einer Textzeile verbunden ist, umschalten" + +#~ msgid "Spacing vocals" +#~ msgstr "Abstände im Gesangstext" + +#~ msgid "Spacing lyrics" +#~ msgstr "Textabstände" + +#~ msgid "More about stanzas" +#~ msgstr "Mehr über Strophen" + +#~ msgid "Adding dynamics marks" +#~ msgstr "Lautstärkebezeichnung hinzufügen" + +#~ msgid "Adding singer names" +#~ msgstr "Sängernamen hinzufügen" + +#~ msgid "mus" +#~ msgstr "Noten" + +#~ msgid "Autre documentation" +#~ msgstr "Andere Dokumentation" + +#~ msgid "How to read the tutorial" +#~ msgstr "Wie soll man die Übung lesen" + +#~ msgid "Relative note names" +#~ msgstr "Relative Notenbezeichnungen" + +#~ msgid "Printing lyrics" +#~ msgstr "Eingabe von Gesangtext" + +#~ msgid "A lead sheet" +#~ msgstr "Ein Song-Blatt" + +#~ msgid "Organizing pieces with identifiers" +#~ msgstr "Stücke durch Bezeichner organisieren" + +#~ msgid "GNU LilyPond --- le système de gravure musicale" +#~ msgstr "GNU LilyPond -- Das Notensatzprogramm" + +#~ msgid "Orchestral strings sections" +#~ msgstr "Notation von Orchestermusik" + +#~ msgid "Artificial harmonics (strings)" +#~ msgstr "Flageolett" + +#~ msgid "Guitar sections" +#~ msgstr "Notation für Guitarre" + +#~ msgid "Tablatures basic" +#~ msgstr "Grundlagen der Tabulatur" + +#~ msgid "Non-guitar tablatures" +#~ msgstr "Nicht-Gitarren-Tabulaturen" + +#~ msgid "Percussion sections" +#~ msgstr "Notation für Schlagzeug" + +#~ msgid "Entering percussion" +#~ msgstr "Schlagzeugnotation" + +#~ msgid "Bagpipe" +#~ msgstr "Dudelsack" + +#~ msgid "Chords sections" +#~ msgstr "Notation von Akkorden" + +#~ msgid "Chords mode" +#~ msgstr "Akkord-Modus" + +#~ msgid "Learning Manual (LM)" +#~ msgstr "Handbuch zum Lernen (LH)" + +#~ msgid "Notation Reference (NR)" +#~ msgstr "Notationsreferenz (NR)" + +#~ msgid "Orchestral strings TODO" +#~ msgstr "Streicher" + +#~ msgid "Guitar TODO" +#~ msgstr "Gitarre" + +#, fuzzy +#~ msgid "Chords notation" +#~ msgstr "Notation von Akkorden" + +#~ msgid "church rests" +#~ msgstr "Kirchenpausen" + +#, fuzzy +#~ msgid "negra" +#~ msgstr "Intervalle" + +#~ msgid "staccatissimo" +#~ msgstr "Staccatissimo" + +#~ msgid "Modern chords" +#~ msgstr "Moderne Akkorde" + +#~ msgid "About this manual" +#~ msgstr "Über das Handbuch" + +#, fuzzy +#~ msgid "FGGChordNames" +#~ msgstr "Akkord-Modus" + +#~ msgid "Lead sheets" +#~ msgstr "Ein Song-Blatt" + +#~ msgid "Repeated figures" +#~ msgstr "Wiederholungfiguren" + +#, fuzzy +#~ msgid "Text markup commands" +#~ msgstr "Überblick über Textbeschriftungsbefehle" + +#~ msgid "Text markup list commands" +#~ msgstr "Überblick über Textbeschriftungsbefehle für Listen" + +#~ msgid "Working with lyrics and identifiers" +#~ msgstr "Mit Gesangtexten und Bezeichnern arbeiten" + +#~ msgid "Other vocal issues" +#~ msgstr "Weitere Vokalmusikprobleme" + +#~ msgid "Automatic staff changes" +#~ msgstr "Automatische Notensystemwechsel" + +#~ msgid "Manual staff switches" +#~ msgstr "Manuelle Notensystemwechsel" + +#~ msgid "Staff switch lines" +#~ msgstr "Stimmführungslinien" + +#~ msgid "Cross staff stems" +#~ msgstr "Hälse über beide Systeme" + +#~ msgid "Overview of text markup list commands" +#~ msgstr "Überblick über Textbeschriftungsbefehle für Listen" + +#~ msgid "quarter-tone" +#~ msgstr "Viertelton" + +#~ msgid "Chords Blah" +#~ msgstr "Akkorde" + +#~ msgid "acciacccatura" +#~ msgstr "Vorschlag" + +#~ msgid "TODO piano node fix" +#~ msgstr "Klaviernotation" + +#~ msgid "Introducing chord names" +#~ msgstr "Einführung in Akkordbezeichungen" + +#~ msgid "Bagpipe sections" +#~ msgstr "Notation von Musik für Dudelsack" + +#~ msgid "Saving typing with identifiers and functions" +#~ msgstr "Tipparbeit sparen durch Bezeichner und Funktionen" + +#~ msgid "Putting it all together" +#~ msgstr "Alles zusammenfügen" + +#~ msgid "Score is a single musical expression" +#~ msgstr "Score ist ein einziger musikalischer Ausdruck" + +#~ msgid "An orchestral part" +#~ msgstr "Eine Orchesterstimme" + +#~ msgid "Easy Notation note heads" +#~ msgstr "Easy-Notation-Notenköpfe" + +#, fuzzy +#~ msgid "Modifying tuplet bracket length" +#~ msgstr "Umgebungs-Eignschaften verändern" + +#~ msgid "Bugs" +#~ msgstr "Fehler" + +#~ msgid "Educational use" +#~ msgstr "Pädagogische Verwendung" + +#~ msgid "The three methods of tweaking" +#~ msgstr "Die drei Korrektur-Methoden" + +#~ msgid "Up and down" +#~ msgstr "Auf und nieder" + +#~ msgid "More information" +#~ msgstr "Mehr Information" + +#~ msgid "Advanced notation" +#~ msgstr "Fortgeschrittene Notationstechniken" + +#~ msgid "LilyPondTool" +#~ msgstr "LilyPondTool" + +#~ msgid "Integrating LaTeX and music" +#~ msgstr "Noten in LaTeX integrieren" + +#, fuzzy +#~ msgid "Integrating @LaTeX{} and music" +#~ msgstr "Noten in La@TeX{} integrieren" + +#~ msgid "Integrating Texinfo and music" +#~ msgstr "Noten in Texinfo integrieren" + +#~ msgid "Integrating HTML and music" +#~ msgstr "Noten in HTML integrieren" + +#~ msgid "Integrating DocBook and music" +#~ msgstr "Noten in DocBook integrieren" + +#~ msgid "Hyphens and extenders" +#~ msgstr "Trennstriche und Fülllinien" + +#~ msgid "English" +#~ msgstr "Englisch" + +#~ msgid "French" +#~ msgstr "Französisch" diff --git a/Documentation/po/de.po b/Documentation/po/de.po index 3d8aac91d8..39082a6a25 100644 --- a/Documentation/po/de.po +++ b/Documentation/po/de.po @@ -4,26 +4,27 @@ # This file is distributed under the same license as the lilypond package. # # -# Till Rettig , 2007,2008, 2009. +# Till Paala , 2007,2008,2009,2010, 2010. msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-25 12:33+0100\n" -"PO-Revision-Date: 2008-12-27 17:09+0200\n" -"Last-Translator: Till Rettig \n" +"POT-Creation-Date: 2010-12-06 22:26+0100\n" +"PO-Revision-Date: 2010-08-31 16:13+0300\n" +"Last-Translator: Till Paala \n" "Language-Team: German \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: postprocess_html.py:45 +#: postprocess_html.py:55 #, python-format msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." msgstr "" "Diese Seite ist für %(package_name)s-%(package_version)s (%(branch_str)s)." -#: postprocess_html.py:47 +#: postprocess_html.py:57 #, python-format msgid "" "Your suggestions for the documentation " @@ -31,12557 +32,11750 @@ msgid "" "\">bug list." msgstr "" "Ihre Vorschläge für die Dokumentation " -"sind willkommen. Bitte melden Sie Probleme und Fehler an unsere Fehler-Liste." +"sind willkommen. Bitte melden Sie Probleme und Fehler an unsere Fehler-Liste." -#: postprocess_html.py:59 +#: postprocess_html.py:69 #, python-format msgid "Other languages: %s." msgstr "Andere Sprachen: %s." -#: postprocess_html.py:60 +#: postprocess_html.py:70 #, python-format msgid "About automatic language selection." msgstr "Über die automatische Sprachauswahl." -#: postprocess_html.py:315 +#: postprocess_html.py:326 msgid "stable-branch" msgstr "stabiler Zweig" -#: postprocess_html.py:317 +#: postprocess_html.py:328 msgid "development-branch" msgstr "Entwicklungszweig" -#: texi-gettext.py:63 -msgid "" -"This section has not been translated yet; please refer to the manual in " -"English." -msgstr "" -"Dieser Abschnitt wurde noch nicht übersetzt, bitte lesen Sie den Abschnitt " -"in der englischen Notationsreferenz." - -#: translations-status.py:52 +#: translations-status.py:72 msgid "Section titles" msgstr "Überschriften" -#: translations-status.py:53 +#: translations-status.py:73 #, python-format -msgid "

    Last updated %s

    \n" -msgstr "·

    Zuletzt aktualisiert am·%s

    \n" +msgid "Last updated %s" +msgstr "Zuletzt aktualisiert am %s" -#: translations-status.py:54 +#: translations-status.py:74 msgid "Translators" msgstr "Übersetzer" -#: translations-status.py:54 +#: translations-status.py:74 msgid "Translation checkers" msgstr "Übersetzungsüberprüfer" -#: translations-status.py:55 +#: translations-status.py:75 msgid "Translated" msgstr "Übersetzt" -#: translations-status.py:55 +#: translations-status.py:75 msgid "Up to date" msgstr "Aktuell" -#: translations-status.py:56 +#: translations-status.py:76 msgid "Other info" msgstr "Mehr Information" -#: translations-status.py:58 +#: translations-status.py:78 msgid "no" msgstr "nein" -#: translations-status.py:59 +#: translations-status.py:79 msgid "not translated" msgstr "nicht übersetzt" -#: translations-status.py:61 +#: translations-status.py:81 #, python-format msgid "partially (%(p)d %%)" msgstr "teilweise (%(p)d %%)" -#: translations-status.py:63 +#: translations-status.py:83 #, python-format msgid "partially translated (%(p)d %%)" msgstr "teilweise übersetzt (%(p)d·%%)" -#: translations-status.py:64 translations-status.py:66 +#: translations-status.py:84 translations-status.py:86 msgid "yes" msgstr "ja" -#: translations-status.py:65 +#: translations-status.py:85 msgid "translated" msgstr "übersetzt" -#: translations-status.py:66 translations-status.py:67 +#: translations-status.py:86 translations-status.py:87 msgid "up to date" msgstr "aktuell" -#: translations-status.py:68 +#: translations-status.py:88 msgid "partially" msgstr "teilweise" -#: translations-status.py:69 +#: translations-status.py:89 msgid "partially up to date" msgstr "teilweise aktuell" -#: translations-status.py:70 +#: translations-status.py:90 msgid "N/A" msgstr "K/A" -#: translations-status.py:71 +#: translations-status.py:91 msgid "pre-GDP" msgstr "vor-GDP" -#: translations-status.py:72 +#: translations-status.py:92 msgid "post-GDP" msgstr "nach-GDP" #. -*- coding: utf-8 -*- -#. @node in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely +#. Documentation/changes.tely:183 (variable) +msgid "coloredheads" +msgstr "Farbenköpfe" + +#. Documentation/changes.tely:184 (variable) +msgid "noclef" +msgstr "Nichtschlüssel" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi msgid "Top" msgstr "Top" -#. @top in Documentation/user/lilypond-learning.tely -msgid "GNU LilyPond --- Learning Manual" -msgstr "GNU LilyPond -- Das Handbuch zum Lernen" - -#. @node in Documentation/user/lilypond-learning.tely -#. @appendix in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @appendix in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @appendix in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @appendix in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @appendix in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @appendix in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @appendix in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @appendix in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond index" -msgstr "LilyPond-Index" +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "Neue Eigenschaften in 2.13 seit 2.12" + +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "LilyPond -- \\\\TITLE\\\\" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Predefined commands" msgstr "Vordefinierte Befehle" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Selected Snippets" msgstr "Ausgewählte Schnipsel" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "See also" msgstr "Siehe auch" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Known issues and warnings" msgstr "Bekannte Probleme und Warnungen" -#. @node in Documentation/user/preface.itely -#. @unnumbered in Documentation/user/preface.itely -#. @node in Documentation/fr/user/preface.itely -#. @unnumbered in Documentation/fr/user/preface.itely -#. @node in Documentation/es/user/preface.itely -#. @unnumbered in Documentation/es/user/preface.itely -#. @node in Documentation/de/user/preface.itely -#. @unnumbered in Documentation/de/user/preface.itely -msgid "Preface" -msgstr "Vorwort" - -#. @node in Documentation/user/introduction.itely -#. @chapter in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @chapter in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @chapter in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @chapter in Documentation/de/user/introduction.itely -msgid "Introduction" -msgstr "Einleitung" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -msgid "Background" -msgstr "Hintergrund" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Engraving" +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "LilyPond-Index" + +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +msgid "Music engraving" msgstr "Notensatz" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "Die Geschichte von LilyPond" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraving details" +msgstr "Details des Notensetzens" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "Notenschriftarten" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "Optischer Ausgleich" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Ledger lines" +msgstr "Hilfslinien" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "Optische Größen" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "Warum der große Aufwand" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely msgid "Automated engraving" msgstr "Automatisierter Notensatz" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "What symbols to engrave?" -msgstr "Welche Symbole?" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Beauty contests" +msgstr "Schönheitswettbewerb" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "Verbessern durch Benchmarking" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "Alles richtig machen" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "Ein Programm bauen" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely msgid "Music representation" msgstr "Die Darstellung der Musik" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Example applications" -msgstr "Beispielanwendung" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -msgid "About the documentation" -msgstr "Über die Dokumentation" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Learning Manual" -msgstr "Über das Handbuch zum Lernen (LM)" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Music Glossary" -msgstr "Über das Glossar (MG)" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Notation Reference" -msgstr "Über die Notationsreferenz (NR)" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Application Usage" -msgstr "Über die Anwendungsbenutzung (AU)" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Snippet List" -msgstr "Über die Schnipselliste" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Internals Reference" -msgstr "Über die Referenz der Iterna (IR)" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Other documentation" -msgstr "Andere Dokumentation" - -#. Documentation/user/tutorial.itely:251 (comment) +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "Welche Symbole?" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "Flexible Architektur" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Putting LilyPond to work" +msgstr "LilyPond die Arbeit überlassen" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "Notensatzbeispiele (BWV 861)" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "Literatur" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "Kurze Literaturliste" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "Lange Literaturliste" + +#. @subheading in Documentation/essay/literature.itely +msgid "Colorado" +msgstr "Colorado" + +#. @subheading in Documentation/essay/literature.itely +msgid "Computer notation" +msgstr "Computernotation" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "Notensatz" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "GNU Free Documentation License" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "Anhang: Wie kann die Lizenz für eigene Dokumente verwendet werden" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "traLaLa" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "Belanglose Aktion um Vorausschau des Parsers zu umgehen" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3003 (variable) +#. Documentation/learning/fundamental.itely:3058 (variable) +#. Documentation/notation/changing-defaults.itely:3802 (variable) +msgid "padText" +msgstr "AbstandText" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3844 (variable) +msgid "tempoPadded" +msgstr "tempoVerschoben" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "Muster" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "Scheme-Übung" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Introduction to Scheme" +msgstr "Einleitung in Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "Scheme-Sandbox" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme variables" +msgstr "Scheme-Variablen" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "Einfache Datentypen in Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "Zusammengesetzte Datentypen in Scheme" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "Paare" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Lists" +msgstr "Listen" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "Assoziationslisten (alist)" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "Hash-Tabellen" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "Berechnungen in Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "Scheme-Prozeduren" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "Prozeduren definieren" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "Prädikate" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "Rückgabewerte" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "Scheme-Bedinungen" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "if" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "cond" +msgstr "cond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "Scheme in LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond Scheme syntax" +msgstr "LilyPond-Scheme-Syntax" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond variables" +msgstr "LilyPond-Variablen" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "Eingabevariablen und Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Object properties" +msgstr "Objekteigenschaften" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "Zusammengesetzte LilyPond-Variablen" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "Offset" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "Extent" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "Eigenschafts-Alisten" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "Alisten-Ketten" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "Interne Repräsentation der Musik" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "Komplizierte Funktionen erstellen" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "Musikalische Funktionen darstellen" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "Eigenschaften von Musikobjekten" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "Verdoppelung einer Note mit Bindebögen (Beispiel)" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "Artikulationszeichen zu Noten hinzufügen (Beispiel)" + +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "ManuellerBalken" + +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "AltOn" + +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "AltOff" + +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "with Alt" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "Schnittstellen für Programmierer" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "Musikalische Funktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "Syntax der musikalischen Funktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "Einfache Ersetzungsfunktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "Vermittelnde Ersetzungsfunktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "Mathematik in Funktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "Funktionen ohne Argumente" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "Leere Funktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "Beschriftungsfunktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "Beschriftungskonstruktionen in Scheme" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "Wie Beschriftungen intern funktionieren" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "Neue Definitionen von Beschriftungsbefehlen" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "Syntax der Definition von Beschriftungsbefehlen" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "On properties" +msgstr "Über Eigenschaften" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "A complete example" +msgstr "Ein vollständiges Beispiel" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Adapting builtin commands" +msgstr "Eingebaute Befehle anpassen" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "Neue Definitionen von Beschriftungsbefehlen für Listen" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "Kontexte für Programmierer" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "Kontextauswertung" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "Eine Funktion auf alle Layout-Objekte anwenden" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "Callback-Funktionen" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "Integrierter Scheme-Code" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "Schwierige Korrekturen" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "LilyPond Scheme interfaces" +msgstr "LilyPond-Scheme-Schnittstellen" + +#. Documentation/learning/tutorial.itely:210 (comment) msgid "set the starting point to middle C" msgstr "setze den Startpunkt auf das mittlere C" -#. Documentation/user/tutorial.itely:282 (comment) +#. Documentation/learning/tutorial.itely:241 (comment) msgid "one octave above middle C" msgstr "eine Oktave über dem mittleren C" -#. Documentation/user/tutorial.itely:298 (comment) +#. Documentation/learning/tutorial.itely:257 (comment) msgid "c is 1 staff space up, so is the c above" msgstr "c ist 1 Zeile aufwärts, also c über dem b" -#. Documentation/user/tutorial.itely:299 (comment) +#. Documentation/learning/tutorial.itely:258 (comment) msgid "d is 2 up or 5 down, so is the d above" msgstr "d ist 2 Zeilen aufwärts, oder 5 runter, also d über dem b" -#. Documentation/user/tutorial.itely:300 (comment) +#. Documentation/learning/tutorial.itely:259 (comment) msgid "e is 3 up or 4 down, so is the e above" msgstr "e % e ist 3 aufwärts oder 4 runter, also e über dem b" -#. Documentation/user/tutorial.itely:301 (comment) +#. Documentation/learning/tutorial.itely:260 (comment) msgid "a is 6 up or 1 down, so is the a below" msgstr "a % a ist 6 aufwärts oder 1 runter, also a unter dem b" -#. Documentation/user/tutorial.itely:302 (comment) +#. Documentation/learning/tutorial.itely:261 (comment) msgid "g is 5 up or 2 down, so is the g below" msgstr "g ist 5 aufwärts oder 2 runter, also g unter dem b" -#. Documentation/user/tutorial.itely:303 (comment) +#. Documentation/learning/tutorial.itely:262 (comment) msgid "f is 4 up or 3 down, so is the f below" msgstr "f ist 4 aufwärts oder 3 runter, also f unter dem b" -#. Documentation/user/tutorial.itely:1791 (variable) -#. Documentation/user/working.itely:214 (variable) -#. Documentation/user/working.itely:229 (variable) -#. Documentation/user/pitches.itely:1078 (context id) -msgid "violin" -msgstr "Geige" - -#. Documentation/user/tutorial.itely:1796 (variable) -#. input/lsr/string-quartet-template-simple.ly:62 (variable) -msgid "cello" -msgstr "Cello" - -#. Documentation/user/tutorial.itely:1821 (variable) -msgid "tripletA" -msgstr "TrioleA" - -#. Documentation/user/tutorial.itely:1822 (variable) -msgid "barA" -msgstr "barA" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. input/lsr/measure-counter.ly:25 (context id) -#. input/lsr/measure-counter.ly:32 (context id) -msgid "foo" -msgstr "foo" - -#. @node in Documentation/user/tutorial.itely -#. @chapter in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @chapter in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @chapter in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @chapter in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely msgid "Tutorial" msgstr "Übung" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -msgid "First steps" -msgstr "Erste Schritte" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely msgid "Compiling a file" msgstr "Eine Quelldatei übersetzen" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Entering music and viewing output" -msgstr "Eingabe von Noten und Ansicht des Ergebnisses" - -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "Noten eingeben" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Producing output" +msgstr "Ansicht des Ergebnisses" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "MacOS X" msgstr "MacOS X" -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Windows" msgstr "Windows" -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -msgid "UNIX" -msgstr "UNIX" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "Kommandozeile" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to write input files" +msgstr "Wie werden Eingabe-Dateien geschrieben" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Simple notation" msgstr "Einfache Notation" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @section in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @section in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @section in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @section in Documentation/de/user/pitches.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Pitches" msgstr "Tonhöhen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "pitch" msgstr "Tonhöhe" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "interval" msgstr "Intervalle" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) msgid "scale" msgstr "Tonleiter" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "middle C" msgstr "eingestrichenes C" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "octave" msgstr "Oktave" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "accidental" msgstr "Versetzungszeichen" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Durations (rhythms)" msgstr "Tondauern (Rhythmen)" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "beam" msgstr "Balken" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "duration" msgstr "Tondauer" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "whole note" msgstr "ganze Note" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "half note" msgstr "halbe Note" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "quarter note" msgstr "Viertelnote" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "dotted note" msgstr "punktierte Note" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Rests" msgstr "Pausen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "rest" msgstr "Pause" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Time signature" msgstr "Taktangabe" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "time signature" msgstr "Taktangabe" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely +#. @subheading in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Tempo marks" +msgstr "Textartige Zeichen" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "Tempobezeichnung" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "Metronomangabe" + +#. @subheading in Documentation/learning/tutorial.itely msgid "Clef" msgstr "Notenschlüssel" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "clef" msgstr "Notenschlüssel" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "All together" msgstr "Alles zusammen" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Working on input files" msgstr "Arbeiten an Eingabe-Dateien" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "How to read the manual" -msgstr "Wie soll das Handbuch gelesen werden" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Dealing with errors" +msgstr "Optimierungen mit Scheme" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +#, fuzzy +msgid "General troubleshooting tips" +msgstr "Fehlersuche" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Some common errors" +msgstr "Übliche Fehler" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to read the manuals" +msgstr "Wie die Handbücher gelesen werden sollen" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "Ausgelassenes Material" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Clickable examples" msgstr "Anklickbare Beispiele" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "Überblick über die Handbücher" + +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/learning/fundamental.itely:3008 (variable) +msgid "violin" +msgstr "Geige" + +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +msgid "cello" +msgstr "Cello" + +#. Documentation/learning/common-notation.itely:1255 (variable) +msgid "tripletA" +msgstr "TrioleA" + +#. Documentation/learning/common-notation.itely:1256 (variable) +msgid "barA" +msgstr "barA" + +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "foo" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +msgid "Common notation" +msgstr "Übliche Notation" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Single staff notation" msgstr "Notation auf einem System" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +#, fuzzy +msgid "Bar checks" +msgstr "Taktüberprüfung" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Accidentals and key signatures" msgstr "Versetzungszeichen und Tonartbezeichnung (Vorzeichen)" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Accidentals" msgstr "Versetzungszeichen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "sharp" msgstr "Kreuz" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "flat" msgstr "B" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "double sharp" msgstr "Doppelkreuz" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "double flat" msgstr "Doppel-B" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Key signatures" msgstr "Tonartbezeichnungen (Vorzeichen)" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "key signature" msgstr "Tonartbezeichnung" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "major" msgstr "Dur" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "minor" msgstr "Moll" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Warning: key signatures and pitches" msgstr "Warnung: Tonartbezeichnungen und Tonhöhen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "natural" msgstr "Auflösungszeichen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "transposition" msgstr "Transposition" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely msgid "Pitch names" msgstr "Tonhöhenbezeichnungen" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Ties and slurs" msgstr "Bindebögen und Legatobögen" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Ties" msgstr "Bindebögen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "tie" msgstr "Bindebogen" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Slurs" msgstr "Legatobögen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "slur" msgstr "Legatobogen" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Phrasing slurs" msgstr "Phrasierungsbögen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "phrasing" msgstr "Phrasierung" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Warnings: slurs vs. ties" msgstr "Warnung: Bindebögen sind nicht Legatobögen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "articulation" msgstr "Artikulationszeichen" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Articulation and dynamics" msgstr "Artikulationszeichen und Lautstärke" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Articulations" msgstr "Artikulationszeichen" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Fingerings" msgstr "Fingersatz" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "fingering" msgstr "Fingersatz" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/user/tweaks.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Dynamics" msgstr "Dynamik" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. input/lsr/piano-template-with-centered-dynamics.ly:47 (variable) +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) msgid "dynamics" msgstr "Dynamik" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "crescendo" msgstr "Crescendo" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "decrescendo" msgstr "Decrescendo" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Adding text" msgstr "Text hinzufügen" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Automatic and manual beams" msgstr "Automatische und manuelle Balken" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Advanced rhythmic commands" msgstr "Zusätzliche rhythmische Befehle" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Partial measure" msgstr "Auftakt" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "anacrusis" msgstr "Auftakt" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) msgid "Tuplets" msgstr "Andere rhythmische Aufteilungen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "note value" msgstr "Notenwert" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "triplet" msgstr "Triole" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Grace notes" msgstr "Verzierungen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "grace notes" msgstr "Verzierungen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "acciaccatura" msgstr "Vorschlag" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "appoggiatura" msgstr "Vorhalt" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Multiple notes at once" msgstr "Mehrere Noten auf einmal" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Music expressions explained" msgstr "Musikalische Ausdrücke erklärt" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Analogy: mathematical expressions" msgstr "Analogie: mathematische Ausdrücke" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Simultaneous music expressions: multiple staves" msgstr "Gleichzeitige musikalische Ausdrücke: mehrere Notensysteme" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "polyphony" msgstr "Polyphonie" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Simultaneous music expressions: single staff" msgstr "Gleichzeitige musikalische Ausdrücke: ein Notensystem" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Multiple staves" msgstr "Mehrere Notensysteme" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Staff groups" msgstr "Notensysteme gruppieren" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/staff.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "brace" msgstr "Klammer" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "System" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "Notensystem" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Combining notes into chords" msgstr "Noten zu Akkorden verbinden" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/de/user/chords.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "chord" msgstr "Akkord" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Single staff polyphony" msgstr "Mehrstimmigkeit in einem System" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Songs" msgstr "Lieder" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Setting simple songs" msgstr "Einfache Lieder setzen" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "lyrics" msgstr "Gesangtext" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Aligning lyrics to a melody" msgstr "Text an einer Melodie ausrichten" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "melisma" msgstr "Melisma" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "extender line" msgstr "Fülllinie" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Lyrics to multiple staves" msgstr "Text zu mehreren Systemen" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Final touches" msgstr "Letzter Schliff" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Organizing pieces with variables" msgstr "Stücke durch Bezeichner organisieren" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Version number" -msgstr "Versionsnummer" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Adding titles" msgstr "Titel hinzufügen" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Absolute note names" msgstr "Absolute Notenbezeichnungen" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "After the tutorial" msgstr "Nach der Übung" -#. Documentation/user/fundamental.itely:324 (context id) -#. Documentation/user/fundamental.itely:367 (context id) -#. input/lsr/piano-template-with-centered-lyrics.ly:51 (context id) +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:73 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:86 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) msgid "singer" msgstr "Sänger" -#. Documentation/user/fundamental.itely:325 (context id) -#. Documentation/user/fundamental.itely:368 (context id) +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) msgid "vocal" msgstr "Gesang" -#. Documentation/user/fundamental.itely:328 (context id) -#. Documentation/user/fundamental.itely:371 (context id) -#. input/lsr/jazz-combo-template.ly:218 (variable) -#. input/lsr/jazz-combo-template.ly:278 (context id) +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) msgid "piano" msgstr "Klavier" -#. Documentation/user/fundamental.itely:329 (context id) -#. Documentation/user/fundamental.itely:362 (variable) -#. Documentation/user/fundamental.itely:372 (context id) -#. Documentation/user/fundamental.itely:2669 (variable) -#. Documentation/user/fundamental.itely:2711 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:19 (variable) -#. input/lsr/jazz-combo-template.ly:221 (context id) -#. input/lsr/piano-template-simple.ly:28 (variable) -#. input/lsr/piano-template-simple.ly:47 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:37 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:29 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:51 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:40 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:61 (context id) -#. input/lsr/polyphony-in-tablature.ly:23 (variable) -#. input/lsr/polyphony-in-tablature.ly:41 (context id) -#. input/lsr/polyphony-in-tablature.ly:45 (context id) +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2592 (variable) +#. Documentation/learning/fundamental.itely:2654 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) msgid "upper" msgstr "oben" -#. Documentation/user/fundamental.itely:330 (context id) -#. Documentation/user/fundamental.itely:363 (variable) -#. Documentation/user/fundamental.itely:373 (context id) -#. Documentation/user/fundamental.itely:2676 (variable) -#. Documentation/user/fundamental.itely:2712 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:23 (variable) -#. input/lsr/jazz-combo-template.ly:222 (context id) -#. input/lsr/piano-template-simple.ly:36 (variable) -#. input/lsr/piano-template-simple.ly:48 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:42 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:37 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:53 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:48 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:62 (context id) -#. input/lsr/polyphony-in-tablature.ly:30 (variable) -#. input/lsr/polyphony-in-tablature.ly:42 (context id) -#. input/lsr/polyphony-in-tablature.ly:46 (context id) +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2599 (variable) +#. Documentation/learning/fundamental.itely:2655 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) msgid "lower" msgstr "unten" -#. Documentation/user/fundamental.itely:360 (variable) -#. Documentation/user/simultaneous.itely:241 (context id) -#. Documentation/user/vocal.itely:571 (context id) -#. Documentation/user/vocal.itely:803 (context id) -#. Documentation/user/vocal.itely:824 (context id) -#. Documentation/user/vocal.itely:1224 (variable) -#. Documentation/user/vocal.itely:1266 (variable) -#. Documentation/user/ancient.itely:2413 (context id) -#. Documentation/user/ancient.itely:2452 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:24 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:35 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:50 (context id) -#. input/lsr/demo-midiinstruments.ly:28 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:28 (context id) -#. input/lsr/guitar-strum-rhythms.ly:56 (context id) -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:37 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:28 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:28 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:29 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:38 (variable) -#. input/lsr/single-staff-template-with-only-notes.ly:32 (variable) -#. input/lsr/vertically-centered-common-lyrics.ly:44 (variable) +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) msgid "melody" msgstr "Melodie" -#. Documentation/user/fundamental.itely:361 (variable) -#. Documentation/user/vocal.itely:1051 (variable) -#. Documentation/user/vocal.itely:1229 (variable) -#. Documentation/user/vocal.itely:1270 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:45 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:36 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:36 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:46 (variable) +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) msgid "text" msgstr "Text" -#. Documentation/user/fundamental.itely:443 (context id) -#. Documentation/user/staff.itely:514 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:102 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:139 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) msgid "main" msgstr "haupt" -#. Documentation/user/fundamental.itely:632 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\"" -msgstr "Stimme \\\"1\\\" Stimme \\\"2\\\"" +#. Documentation/learning/fundamental.itely:629 (comment) +#, fuzzy +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "Stimme \\\"1\\\" Stimme \\\"2\\\"" -#. Documentation/user/fundamental.itely:642 (comment) +#. Documentation/learning/fundamental.itely:639 (comment) msgid "Voice \\\"1\\\" Voice \\\"2\\\"" msgstr "Stimme \\\"1\\\" Stimme \\\"2\\\"" -#. Documentation/user/fundamental.itely:657 (comment) +#. Documentation/learning/fundamental.itely:654 (comment) msgid "Voice \\\"1\\\"" msgstr "Stimme·\\\"1\\\"" -#. Documentation/user/fundamental.itely:662 (comment) +#. Documentation/learning/fundamental.itely:659 (comment) msgid "Voice \\\"2\\\"" msgstr "Stimme·\\\"2\\\"" -#. Documentation/user/fundamental.itely:685 (comment) -#. Documentation/user/fundamental.itely:709 (comment) +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) msgid "Main voice" msgstr "Hauptstimme" -#. Documentation/user/fundamental.itely:687 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +#. Documentation/learning/fundamental.itely:684 (comment) +#, fuzzy +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" msgstr "" "Stimme·\\\"1\\\"··············Stimme·\\\"2\\\" Stimme \\\"3\\\"" -#. Documentation/user/fundamental.itely:711 (comment) -#. Documentation/user/simultaneous.itely:742 (comment) -#. Documentation/user/simultaneous.itely:767 (comment) -#. Documentation/user/simultaneous.itely:794 (comment) +#. Documentation/learning/fundamental.itely:708 (comment) msgid "Bar 1" msgstr "Takt 1" -#. Documentation/user/fundamental.itely:722 (comment) -#. Documentation/user/simultaneous.itely:747 (comment) -#. Documentation/user/simultaneous.itely:772 (comment) -#. Documentation/user/simultaneous.itely:800 (comment) +#. Documentation/learning/fundamental.itely:719 (comment) msgid "Bar 2" msgstr "Takt 2" -#. Documentation/user/fundamental.itely:723 (comment) +#. Documentation/learning/fundamental.itely:720 (comment) msgid "Voice 1 continues" msgstr "Stimme 1 geht weiter" -#. Documentation/user/fundamental.itely:726 (comment) +#. Documentation/learning/fundamental.itely:723 (comment) msgid "Voice 2 continues" msgstr "Stimme 2 geht weiter" -#. Documentation/user/fundamental.itely:900 (comment) +#. Documentation/learning/fundamental.itely:898 (comment) msgid "Voice one" msgstr "Stimme 1" -#. Documentation/user/fundamental.itely:902 (comment) +#. Documentation/learning/fundamental.itely:900 (comment) msgid "Voice two" msgstr "Stimme zwei" -#. Documentation/user/fundamental.itely:904 (comment) +#. Documentation/learning/fundamental.itely:902 (comment) msgid "Omit Voice three" msgstr "Stimme drei auslassen" -#. Documentation/user/fundamental.itely:905 (comment) +#. Documentation/learning/fundamental.itely:903 (comment) msgid "Voice four" msgstr "Stimme vier" -#. Documentation/user/fundamental.itely:1004 (comment) +#. Documentation/learning/fundamental.itely:1002 (comment) msgid "Default behavior or behavior after \\oneVoice" msgstr "Standard oder Verhalten nach \\oneVoice" -#. Documentation/user/fundamental.itely:1042 (comment) +#. Documentation/learning/fundamental.itely:1040 (comment) msgid "The following notes are monophonic" msgstr "Folgende Noten sind monophon" -#. Documentation/user/fundamental.itely:1044 (comment) +#. Documentation/learning/fundamental.itely:1042 (comment) msgid "Start simultaneous section of three voices" msgstr "Beginn von drei Stimmen gleichzeitig" -#. Documentation/user/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1044 (comment) msgid "Continue the main voice in parallel" msgstr "Die Hauptstimme weiterlaufen lassen" -#. Documentation/user/fundamental.itely:1048 (comment) -#. Documentation/user/fundamental.itely:1110 (comment) +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) msgid "Initiate second voice" msgstr "Zweite Stimme einsetzen" -#. Documentation/user/fundamental.itely:1050 (comment) -#. Documentation/user/fundamental.itely:1112 (comment) -msgid "Set stems, etc, down" +#. Documentation/learning/fundamental.itely:1048 (comment) +msgid "Set stems, etc., down" msgstr "Hälse usw. nach unten ausrichten" -#. Documentation/user/fundamental.itely:1054 (comment) -#. Documentation/user/fundamental.itely:1116 (comment) +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) msgid "Initiate third voice" msgstr "Die dritte Stimme beginnen" -#. Documentation/user/fundamental.itely:1056 (comment) -#. Documentation/user/fundamental.itely:1118 (comment) +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) msgid "Set stems, etc, up" msgstr "Hälse usw. nach oben ausrichten" -#. Documentation/user/fundamental.itely:1105 (comment) +#. Documentation/learning/fundamental.itely:1103 (comment) msgid "Initiate first voice" msgstr "Erste Stimme einrichten" -#. Documentation/user/fundamental.itely:1199 (context id) -#. Documentation/user/fundamental.itely:2441 (context id) -#. Documentation/user/vocal.itely:506 (context id) -#. Documentation/user/vocal.itely:1235 (context id) -#. Documentation/user/vocal.itely:1276 (context id) -#. Documentation/user/keyboards.itely:338 (context id) -#. Documentation/user/fretted-strings.itely:243 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:16 (variable) -#. input/lsr/jazz-combo-template.ly:204 (context id) -#. input/lsr/jazz-combo-template.ly:213 (context id) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:50 (context id) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:52 (context id) +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "Hälse usw. nach unten ausrichten" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2303 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) msgid "one" msgstr "eins" -#. Documentation/user/fundamental.itely:1242 (variable) -#. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3475 (variable) -#. Documentation/user/simultaneous.itely:788 (variable) -#. Documentation/user/percussion.itely:497 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:46 (variable) -#. input/lsr/incipit.ly:57 (variable) -#. input/lsr/jazz-combo-template.ly:74 (variable) -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:29 (variable) -#. input/lsr/piano-template-with-centered-dynamics.ly:32 (variable) -#. input/lsr/printing-music-with-different-time-signatures.ly:24 (variable) -#. input/lsr/string-quartet-template-simple.ly:29 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:66 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:30 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:39 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:32 (variable) -#. input/lsr/vocal-ensemble-template.ly:36 (variable) +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/learning/fundamental.itely:2569 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:64 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:63 (variable) msgid "global" msgstr "global" -#. Documentation/user/fundamental.itely:1243 (variable) +#. Documentation/learning/fundamental.itely:1244 (variable) msgid "SopOneMusic" msgstr "SoprEinsNoten" -#. Documentation/user/fundamental.itely:1245 (variable) -msgid "SopTwoMusic" -msgstr "SoprZweiNoten" - -#. Documentation/user/fundamental.itely:1247 (variable) +#. Documentation/learning/fundamental.itely:1247 (variable) msgid "SopOneLyrics" msgstr "SopEinsText" -#. Documentation/user/fundamental.itely:1249 (variable) +#. Documentation/learning/fundamental.itely:1250 (variable) +msgid "SopTwoMusic" +msgstr "SoprZweiNoten" + +#. Documentation/learning/fundamental.itely:1253 (variable) msgid "SopTwoLyrics" msgstr "SoprZweiText" -#. Documentation/user/fundamental.itely:1255 (context id) +#. Documentation/learning/fundamental.itely:1260 (context id) msgid "SopOne" msgstr "SoprEins" -#. Documentation/user/fundamental.itely:1264 (context id) +#. Documentation/learning/fundamental.itely:1269 (context id) msgid "SopTwo" msgstr "SoprZwei" -#. Documentation/user/fundamental.itely:1296 (variable) -#. Documentation/user/fundamental.itely:2864 (variable) -msgid "TimeKey" -msgstr "Zeitangabe" +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/fundamental.itely:2901 (variable) +msgid "keyTime" +msgstr "" -#. Documentation/user/fundamental.itely:1297 (variable) +#. Documentation/learning/fundamental.itely:1303 (variable) msgid "SopMusic" msgstr "SoprNoten" -#. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3477 (variable) +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) msgid "AltoMusic" msgstr "AltNoten" -#. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3478 (variable) +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) msgid "TenorMusic" msgstr "TenorNoten" -#. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3479 (variable) +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) msgid "BassMusic" msgstr "BassNoten" -#. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3480 (variable) +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) msgid "VerseOne" msgstr "StropheEins" -#. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3481 (variable) +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) msgid "VerseTwo" msgstr "StropheZwei" -#. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3482 (variable) +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) msgid "VerseThree" msgstr "StropheDrei" -#. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3483 (variable) +#. Documentation/learning/fundamental.itely:1314 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) msgid "VerseFour" msgstr "StropheVier" -#. Documentation/user/fundamental.itely:1314 (context id) +#. Documentation/learning/fundamental.itely:1321 (context id) msgid "Sop" msgstr "Sopr" -#. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3490 (context id) -#. Documentation/user/input.itely:951 (context id) +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1141 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) msgid "Alto" msgstr "Alt" -#. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3498 (context id) -#. Documentation/user/input.itely:953 (context id) +#. Documentation/learning/fundamental.itely:1330 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1143 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) msgid "Tenor" msgstr "Tenor" -#. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3499 (context id) -#. Documentation/user/input.itely:958 (context id) -#. input/lsr/jazz-combo-template.ly:227 (variable) +#. Documentation/learning/fundamental.itely:1331 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1148 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) msgid "Bass" msgstr "Bass" -#. Documentation/user/fundamental.itely:1350 (variable) -#. Documentation/user/fundamental.itely:1402 (variable) -#. Documentation/user/fundamental.itely:1464 (variable) -msgid "versenotes" -msgstr "StrophenNoten" - -#. Documentation/user/fundamental.itely:1355 (variable) -#. Documentation/user/fundamental.itely:1416 (variable) -#. Documentation/user/fundamental.itely:1478 (variable) -msgid "versewords" -msgstr "StrophenText" - -#. Documentation/user/fundamental.itely:1361 (context id) -#. Documentation/user/fundamental.itely:1428 (context id) -#. Documentation/user/fundamental.itely:1489 (context id) -#. Documentation/user/vocal.itely:826 (context id) -#. input/lsr/score-for-diatonic-accordion.ly:59 (variable) -msgid "verse" -msgstr "Strophe" - -#. Documentation/user/fundamental.itely:1407 (variable) -#. Documentation/user/fundamental.itely:1469 (variable) -msgid "refrainnotesA" -msgstr "RefrainNotenA" - -#. Documentation/user/fundamental.itely:1411 (variable) -#. Documentation/user/fundamental.itely:1473 (variable) -msgid "refrainnotesB" -msgstr "RefrainNotenB" - -#. Documentation/user/fundamental.itely:1419 (variable) -#. Documentation/user/fundamental.itely:1481 (variable) -msgid "refrainwordsA" -msgstr "RefrainTextA" - -#. Documentation/user/fundamental.itely:1422 (variable) -#. Documentation/user/fundamental.itely:1484 (variable) -msgid "refrainwordsB" -msgstr "RefrainTextB" - -#. Documentation/user/fundamental.itely:1436 (context id) -#. Documentation/user/fundamental.itely:1509 (context id) -msgid "refrainB" -msgstr "RefrainB" - -#. Documentation/user/fundamental.itely:1501 (context id) -msgid "refrainA" -msgstr "RefrainA" - -#. Documentation/user/fundamental.itely:1655 (comment) +#. Documentation/learning/fundamental.itely:1475 (comment) msgid "start of single compound music expression" msgstr "Beginn des einen musikalischen Ausdrucks" -#. Documentation/user/fundamental.itely:1656 (comment) +#. Documentation/learning/fundamental.itely:1476 (comment) msgid "start of simultaneous staves section" msgstr "Beginn von gleichzeitigen Systemen" -#. Documentation/user/fundamental.itely:1658 (comment) +#. Documentation/learning/fundamental.itely:1478 (comment) msgid "create RH staff" msgstr "RH-System erstellen" -#. Documentation/user/fundamental.itely:1661 (comment) +#. Documentation/learning/fundamental.itely:1481 (comment) msgid "create voice for RH notes" msgstr "Stimme für RH Noten erstellen" -#. Documentation/user/fundamental.itely:1662 (comment) +#. Documentation/learning/fundamental.itely:1482 (comment) msgid "start of RH notes" msgstr "Beginn von RH Noten" -#. Documentation/user/fundamental.itely:1665 (comment) +#. Documentation/learning/fundamental.itely:1485 (comment) msgid "end of RH notes" msgstr "Ende RH-Noten" -#. Documentation/user/fundamental.itely:1666 (comment) +#. Documentation/learning/fundamental.itely:1486 (comment) msgid "end of RH voice" msgstr "Ende der RH Stimme" -#. Documentation/user/fundamental.itely:1667 (comment) +#. Documentation/learning/fundamental.itely:1487 (comment) msgid "end of RH staff" msgstr "Ende RH-System" -#. Documentation/user/fundamental.itely:1668 (comment) +#. Documentation/learning/fundamental.itely:1488 (comment) msgid "create LH staff; needs two simultaneous voices" msgstr "LH System erstellen, braucht zwei gleichzeitige Stimmen" -#. Documentation/user/fundamental.itely:1671 (comment) +#. Documentation/learning/fundamental.itely:1491 (comment) msgid "create LH voice one" msgstr "LH Stimme eins erstellen" -#. Documentation/user/fundamental.itely:1673 (comment) +#. Documentation/learning/fundamental.itely:1493 (comment) msgid "start of LH voice one notes" msgstr "Beginn von LH Stimme eins Noten" -#. Documentation/user/fundamental.itely:1676 (comment) +#. Documentation/learning/fundamental.itely:1496 (comment) msgid "end of LH voice one notes" msgstr "Ende von LH Stimme eins Noten" -#. Documentation/user/fundamental.itely:1677 (comment) +#. Documentation/learning/fundamental.itely:1497 (comment) msgid "end of LH voice one" msgstr "Ende LH Stimme eins" -#. Documentation/user/fundamental.itely:1678 (comment) +#. Documentation/learning/fundamental.itely:1498 (comment) msgid "create LH voice two" msgstr "LH Stimme zwei erstellen" -#. Documentation/user/fundamental.itely:1680 (comment) +#. Documentation/learning/fundamental.itely:1500 (comment) msgid "start of LH voice two notes" msgstr "Beginn von LH Stimme zwei Noten" -#. Documentation/user/fundamental.itely:1683 (comment) +#. Documentation/learning/fundamental.itely:1503 (comment) msgid "end of LH voice two notes" msgstr "Ende der LH Stimme zwei Noten" -#. Documentation/user/fundamental.itely:1684 (comment) +#. Documentation/learning/fundamental.itely:1504 (comment) msgid "end of LH voice two" msgstr "Ende der LH Stimme zwei" -#. Documentation/user/fundamental.itely:1685 (comment) +#. Documentation/learning/fundamental.itely:1505 (comment) msgid "end of LH staff" msgstr "Ende LH System" -#. Documentation/user/fundamental.itely:1686 (comment) +#. Documentation/learning/fundamental.itely:1506 (comment) msgid "end of simultaneous staves section" msgstr "Ende der gleichzeitigen Systeme" -#. Documentation/user/fundamental.itely:1687 (comment) +#. Documentation/learning/fundamental.itely:1507 (comment) msgid "end of single compound music expression" msgstr "Ende des einen zusammengesetzten Musikausdrucks" -#. Documentation/user/fundamental.itely:1906 (comment) +#. Documentation/learning/fundamental.itely:1726 (comment) msgid "Wrong!" msgstr "Falsch!" -#. Documentation/user/fundamental.itely:1992 (comment) -#. Documentation/user/fundamental.itely:2144 (comment) +#. Documentation/learning/fundamental.itely:1812 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) msgid "make note heads smaller" msgstr "Notenköpfe verkleinern" -#. Documentation/user/fundamental.itely:1995 (comment) -#. Documentation/user/fundamental.itely:2146 (comment) +#. Documentation/learning/fundamental.itely:1815 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) msgid "make note heads larger" msgstr "Notenköpfe vergrößern" -#. Documentation/user/fundamental.itely:1998 (comment) -#. Documentation/user/fundamental.itely:2148 (comment) +#. Documentation/learning/fundamental.itely:1818 (comment) +#. Documentation/learning/fundamental.itely:1993 (comment) msgid "return to default size" msgstr "zur Standardgröße zurückgehen" -#. Documentation/user/fundamental.itely:2420 (variable) -#. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:943 (variable) +#. Documentation/learning/fundamental.itely:2282 (variable) +#. Documentation/learning/fundamental.itely:2570 (variable) +#. Documentation/notation/input.itely:1133 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) msgid "sopranoMusic" msgstr "SopranNoten" -#. Documentation/user/fundamental.itely:2427 (variable) +#. Documentation/learning/fundamental.itely:2289 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) msgid "sopranoLyrics" msgstr "SoprText" -#. Documentation/user/fundamental.itely:2431 (variable) +#. Documentation/learning/fundamental.itely:2293 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) msgid "celloMusic" msgstr "CelloNoten" -#. Documentation/user/fundamental.itely:2651 (variable) +#. Documentation/learning/fundamental.itely:2574 (variable) msgid "sopranoWords" msgstr "SopranText" -#. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:944 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:51 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:44 (variable) -#. input/lsr/vocal-ensemble-template.ly:48 (variable) +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) msgid "altoMusic" msgstr "AltNoten" -#. Documentation/user/fundamental.itely:2658 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:54 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:47 (variable) -#. input/lsr/vocal-ensemble-template.ly:51 (variable) +#. Documentation/learning/fundamental.itely:2581 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:79 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:78 (variable) msgid "altoWords" msgstr "AltText" -#. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:945 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:58 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:51 (variable) -#. input/lsr/vocal-ensemble-template.ly:55 (variable) +#. Documentation/learning/fundamental.itely:2582 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) msgid "tenorMusic" msgstr "TenorNoten" -#. Documentation/user/fundamental.itely:2663 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:61 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) -#. input/lsr/vocal-ensemble-template.ly:58 (variable) +#. Documentation/learning/fundamental.itely:2586 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:85 (variable) msgid "tenorWords" msgstr "TenorText" -#. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:946 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:65 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:58 (variable) -#. input/lsr/vocal-ensemble-template.ly:62 (variable) +#. Documentation/learning/fundamental.itely:2587 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) msgid "bassMusic" msgstr "BassNoten" -#. Documentation/user/fundamental.itely:2668 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:68 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:61 (variable) -#. input/lsr/vocal-ensemble-template.ly:65 (variable) +#. Documentation/learning/fundamental.itely:2591 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:92 (variable) msgid "bassWords" msgstr "BassText" -#. Documentation/user/fundamental.itely:2685 (comment) +#. Documentation/learning/fundamental.itely:2608 (comment) msgid "combine ChoirStaff and PianoStaff in parallel" msgstr "ChoirStaff und PianoStaff parallel kombinieren" -#. Documentation/user/fundamental.itely:2687 (context id) -#. Documentation/user/fundamental.itely:2689 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:77 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:68 (context id) -#. input/lsr/vocal-ensemble-template.ly:73 (context id) +#. Documentation/learning/fundamental.itely:2610 (context id) +#. Documentation/learning/fundamental.itely:2612 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (context id) msgid "sopranos" msgstr "Sopran" -#. Documentation/user/fundamental.itely:2692 (context id) -#. Documentation/user/fundamental.itely:2694 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:78 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (context id) -#. input/lsr/vocal-ensemble-template.ly:77 (context id) +#. Documentation/learning/fundamental.itely:2620 (context id) +#. Documentation/learning/fundamental.itely:2622 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:103 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:104 (context id) msgid "altos" msgstr "Alt" -#. Documentation/user/fundamental.itely:2697 (context id) -#. Documentation/user/fundamental.itely:2699 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:84 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:79 (context id) -#. input/lsr/vocal-ensemble-template.ly:86 (context id) +#. Documentation/learning/fundamental.itely:2630 (context id) +#. Documentation/learning/fundamental.itely:2632 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:113 (context id) msgid "tenors" msgstr "Tenor" -#. Documentation/user/fundamental.itely:2702 (context id) -#. Documentation/user/fundamental.itely:2704 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:85 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (context id) -#. input/lsr/vocal-ensemble-template.ly:90 (context id) +#. Documentation/learning/fundamental.itely:2640 (context id) +#. Documentation/learning/fundamental.itely:2642 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:110 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:117 (context id) msgid "basses" msgstr "Bass" -#. Documentation/user/fundamental.itely:2707 (comment) +#. Documentation/learning/fundamental.itely:2650 (comment) msgid "end ChoirStaff" msgstr "Ende ChoirStaff" -#. Documentation/user/fundamental.itely:2865 (variable) +#. Documentation/learning/fundamental.itely:2902 (variable) msgid "ManualOneVoiceOneMusic" msgstr "ManualEinsStimmeEinsNoten" -#. Documentation/user/fundamental.itely:2868 (variable) +#. Documentation/learning/fundamental.itely:2906 (variable) msgid "ManualOneVoiceTwoMusic" msgstr "ManualEinsStimmeZweiNoten" -#. Documentation/user/fundamental.itely:2872 (variable) +#. Documentation/learning/fundamental.itely:2910 (variable) msgid "ManualTwoMusic" msgstr "ManualZweiNoten" -#. Documentation/user/fundamental.itely:2876 (variable) +#. Documentation/learning/fundamental.itely:2914 (variable) msgid "PedalOrganMusic" msgstr "PedalOrgelNoten" -#. Documentation/user/fundamental.itely:2882 (comment) +#. Documentation/learning/fundamental.itely:2920 (comment) msgid "PianoStaff and Pedal Staff must be simultaneous" msgstr "PianoStaff und Pedal-System müssen gleichzeitig sein" -#. Documentation/user/fundamental.itely:2884 (context id) +#. Documentation/learning/fundamental.itely:2922 (context id) msgid "ManualOne" msgstr "ManualEins" -#. Documentation/user/fundamental.itely:2885 (comment) -msgid "set time signature and key" -msgstr "Taktangabe und Tonart setzen" +#. Documentation/learning/fundamental.itely:2923 (comment) +#, fuzzy +msgid "set key and time signature" +msgstr "Taktangabe" -#. Documentation/user/fundamental.itely:2889 (comment) +#. Documentation/learning/fundamental.itely:2933 (comment) msgid "end ManualOne Staff context" msgstr "Ende ManualEins Staff-Kontext" -#. Documentation/user/fundamental.itely:2890 (context id) +#. Documentation/learning/fundamental.itely:2934 (context id) msgid "ManualTwo" msgstr "ManualZwei" -#. Documentation/user/fundamental.itely:2894 (comment) +#. Documentation/learning/fundamental.itely:2943 (comment) msgid "end ManualTwo Staff context" msgstr "Ende ManualZwei Staff-Kontext" -#. Documentation/user/fundamental.itely:2895 (comment) +#. Documentation/learning/fundamental.itely:2944 (comment) msgid "end PianoStaff context" msgstr "Klaviersystem beenden" -#. Documentation/user/fundamental.itely:2896 (context id) +#. Documentation/learning/fundamental.itely:2945 (context id) msgid "PedalOrgan" msgstr "OrgelPedal" -#. Documentation/user/fundamental.itely:2900 (comment) +#. Documentation/learning/fundamental.itely:2951 (comment) msgid "end PedalOrgan Staff context" msgstr "Orgelsystem beenden" -#. Documentation/user/fundamental.itely:2902 (comment) +#. Documentation/learning/fundamental.itely:2953 (comment) msgid "end Score context" msgstr "Partitur-Kontext beenden" -#. @node in Documentation/user/fundamental.itely -#. @chapter in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @chapter in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @chapter in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @chapter in Documentation/de/user/fundamental.itely +#. Documentation/learning/fundamental.itely:2969 (variable) +msgid "hornNotes" +msgstr "HornNoten" + +#. Documentation/learning/fundamental.itely:2981 (variable) +msgid "fragmentA" +msgstr "FramentA" + +#. Documentation/learning/fundamental.itely:2982 (variable) +msgid "fragmentB" +msgstr "FragmentB" + +#. Documentation/learning/fundamental.itely:3001 (variable) +msgid "dolce" +msgstr "dolce" + +#. Documentation/learning/fundamental.itely:3004 (variable) +msgid "fthenp" +msgstr "FdannP" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely msgid "Fundamental concepts" msgstr "Grundbegriffe" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "How LilyPond input files work" msgstr "Wie eine LilyPond-Eingabe-Datei funktioniert" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Introduction to the LilyPond file structure" msgstr "Einführung in die Dateistruktur von LilyPond" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Score is a (single) compound musical expression" msgstr "Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Nesting music expressions" msgstr "Musikalische Ausdrücke ineinander verschachteln" -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/tweaks.itely -#. Documentation/user/staff.itely:543 (context id) -#. Documentation/user/staff.itely:556 (context id) -#. Documentation/user/staff.itely:564 (context id) -#. Documentation/user/staff.itely:583 (context id) -#. Documentation/user/staff.itely:596 (context id) -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/fr/user/tweaks.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/tweaks.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tweaks.itely -#. @rglos in Documentation/de/user/staff.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "ossia" msgstr "Ossia" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "On the un-nestedness of brackets and ties" msgstr "Über die Nicht-Schachtelung von Klammern und Bindebögen" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Voices contain music" msgstr "Voice enthält Noten" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "I'm hearing Voices" msgstr "Ich höre Stimmen" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Explicitly instantiating voices" msgstr "Stimmen explizit beginnen" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Note columns" msgstr "Notenkolumnen" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Voices and vocals" msgstr "Stimmen und Text" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Contexts and engravers" msgstr "Kontexte und Engraver" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Contexts explained" -msgstr "Was sind Umgebungen?" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +msgstr "Was sind Kontexte?" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Creating contexts" -msgstr "Umgebungen erstellen" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +msgstr "Kontexte erstellen" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Engravers explained" msgstr "Was sind Engraver?" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Modifying context properties" msgstr "Kontexteigenschaften verändern" -#. @unnumberedsubsubsec in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/es/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/de/user/fundamental.itely -msgid "Setting context properties with @code{\\with}" -msgstr "Kontexteigenschaften mit @code{\\with} setzen" - -#. @unnumberedsubsubsec in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/es/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/de/user/fundamental.itely -msgid "Setting context properties with @code{\\context}" -msgstr "Kontexteigenschaften mit @code{\\context} setzen" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\with}" +msgstr "Kontexteigenschaften mit @code{\\\\with} setzen" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\context}" +msgstr "Kontexteigenschaften mit @code{\\\\context} setzen" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Adding and removing engravers" msgstr "Engraver hinzufügen und entfernen" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Changing a single context" msgstr "Einen einzelnen Kontext verändern" -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/fundamental.itely -#. @rglos in Documentation/de/user/pitches.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "ambitus" msgstr "Tonumfang" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Changing all contexts of the same type" msgstr "Alle Kontexte des gleichen Typs verändern" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Extending the templates" msgstr "Erweiterung der Beispiele" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Soprano and cello" msgstr "Sopran und Cello" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Four-part SATB vocal score" msgstr "Vierstimmige SATB-Partitur" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Building a score from scratch" msgstr "Eine Partitur von Grund auf erstellen" -#. Documentation/user/tweaks.itely:597 (comment) -#. Documentation/user/tweaks.itely:732 (comment) -msgid "Increase thickness of all following slurs from 1.2 to 5.0" -msgstr "Dicke aller folgenden Bögen von 1.2 zu 5.0 vergrößern" +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "Tipparbeit sparen durch Bezeichner und Funktionen" -#. Documentation/user/tweaks.itely:666 (comment) -#. Documentation/user/tweaks.itely:705 (comment) -#. Documentation/user/tweaks.itely:708 (comment) +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "Partituren und Stimmen" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "Dicke aller folgenden Bögen von 1.2 zu 5.0 vergrößern" + +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) msgid "Increase thickness of immediately following slur only" msgstr "Nur die Dicke des direkt folgenden Bogens vergrößern" -#. Documentation/user/tweaks.itely:736 (comment) +#. Documentation/learning/tweaks.itely:744 (comment) msgid "Revert thickness of all following slurs to default of 1.2" msgstr "Die Dicke aller folgenden Bögen zurücksezten auf 1.2" -#. Documentation/user/tweaks.itely:1396 (comment) +#. Documentation/learning/tweaks.itely:1421 (comment) msgid "Don't print clefs in this staff" msgstr "Keine Schlüssel in diesem System" -#. Documentation/user/tweaks.itely:1398 (comment) +#. Documentation/learning/tweaks.itely:1423 (comment) msgid "Don't print time signatures in this staff" msgstr "Keine Taktangabe in diesem System" -#. Documentation/user/tweaks.itely:1462 (comment) +#. Documentation/learning/tweaks.itely:1487 (comment) msgid "Reduce all font sizes by ~24%" msgstr "Alle Schriftgrößen um ~24% verkleinern" -#. Documentation/user/tweaks.itely:1528 (comment) +#. Documentation/learning/tweaks.itely:1554 (comment) msgid "Reduce stem length and line spacing to match" msgstr "Die Halslänge und Linienabstand anpassen" -#. Documentation/user/tweaks.itely:1958 (comment) -#. Documentation/user/tweaks.itely:2028 (comment) +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) msgid "Set details for later Text Spanner" msgstr "Details für späteren Text-Spanner setzen" -#. Documentation/user/tweaks.itely:1961 (comment) -#. Documentation/user/tweaks.itely:2031 (comment) +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) msgid "Place dynamics above staff" msgstr "Dynamik-Zeichen über System setzen" -#. Documentation/user/tweaks.itely:1963 (comment) -#. Documentation/user/tweaks.itely:2035 (comment) +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) msgid "Start Ottava Bracket" msgstr "Beginn der Oktavierungsklammer" -#. Documentation/user/tweaks.itely:1966 (comment) -#. Documentation/user/tweaks.itely:1973 (comment) -#. Documentation/user/tweaks.itely:2038 (comment) -#. Documentation/user/tweaks.itely:2045 (comment) -msgid "Add Dynamic Text" -msgstr "Dynamik-Text hinzufügen" - -#. Documentation/user/tweaks.itely:1968 (comment) -#. Documentation/user/tweaks.itely:2040 (comment) -msgid "Add Dynamic Line Spanner" -msgstr "Dynamic Line Spanner hinzufügen" +#. Documentation/learning/tweaks.itely:2006 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "Dynamik-Text und Cresc.-Klammer hinzufügen" -#. Documentation/user/tweaks.itely:1970 (comment) -#. Documentation/user/tweaks.itely:2042 (comment) +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) msgid "Add Text Script" msgstr "Textbeschriftung hinzufügen" -#. Documentation/user/tweaks.itely:1975 (comment) -#. Documentation/user/tweaks.itely:2047 (comment) +#. Documentation/learning/tweaks.itely:2012 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "Dynamik-Text hinzufügen und Klammer beenden" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) msgid "Stop Ottava Bracket" msgstr "Ende der Oktavierungsklammer" -#. Documentation/user/tweaks.itely:2033 (comment) +#. Documentation/learning/tweaks.itely:2072 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "Nächste Ottava-Klammer unter Text-Spanner setzen" -#. Documentation/user/tweaks.itely:2095 (comment) +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +msgid "Add Dynamic Text" +msgstr "Dynamik-Text hinzufügen" + +#. Documentation/learning/tweaks.itely:2079 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "Dynamic Line Spanner hinzufügen" + +#. Documentation/learning/tweaks.itely:2161 (comment) msgid "Cause notes to space out to accommodate text" msgstr "Noten spreizen um dem Text Platz zu machen" -#. Documentation/user/tweaks.itely:2118 (comment) +#. Documentation/learning/tweaks.itely:2184 (comment) msgid "This markup is short enough to fit without collision" msgstr "Dieser Text ist kurz genug um ohne Kollision zu passen" -#. Documentation/user/tweaks.itely:2122 (comment) +#. Documentation/learning/tweaks.itely:2188 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "Dieser ist zu lang, darum wird der nach oben verschoben" -#. Documentation/user/tweaks.itely:2126 (comment) -#. Documentation/user/tweaks.itely:2131 (comment) +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) msgid "Turn off collision avoidance" msgstr "Abschalten der automatischen Vermeidung von Zusammenstößen" -#. Documentation/user/tweaks.itely:2133 (comment) +#. Documentation/learning/tweaks.itely:2199 (comment) msgid "and turn on textLengthOn" msgstr "und Textlänge berücksichtigen" -#. Documentation/user/tweaks.itely:2134 (comment) +#. Documentation/learning/tweaks.itely:2200 (comment) msgid "Spaces at end are honored" msgstr "Leerzeichen am Ende werden beachtet" -#. Documentation/user/tweaks.itely:2241 (comment) +#. Documentation/learning/tweaks.itely:2307 (comment) msgid "Extend width by 1 staff space" msgstr "Breite um einen Linienabstand vergrößern" -#. Documentation/user/tweaks.itely:2524 (comment) -msgid "This will not work, see below:" +#. Documentation/learning/tweaks.itely:2587 (comment) +msgid "This will not work, see below" msgstr "Das funktioniert nicht, siehe unten" -#. Documentation/user/tweaks.itely:2528 (comment) -msgid "This works:" -msgstr "Das funktioniert:" +#. Documentation/learning/tweaks.itely:2591 (comment) +msgid "This works" +msgstr "Das funktioniert" + +#. Documentation/learning/tweaks.itely:2627 (variable) +msgid "sesquisharp" +msgstr "sesquisharp" + +#. Documentation/learning/tweaks.itely:2630 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "" +"Hier wird das sesquisharp-Zeichen gesetzt, aber der Abstand ist zu klein" -#. Documentation/user/tweaks.itely:2579 (variable) -msgid "naturalplusflat" -msgstr "AuflösungB" +#. Documentation/learning/tweaks.itely:2635 (comment) +msgid "This improves the spacing" +msgstr "Das verbessert den Abstand" -#. Documentation/user/tweaks.itely:2620 (comment) +#. Documentation/learning/tweaks.itely:2675 (comment) msgid "Extend width by 1 unit" msgstr "Breite um eine Einheit vergrößern" -#. Documentation/user/tweaks.itely:2622 (comment) +#. Documentation/learning/tweaks.itely:2677 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "" "Dynamik-Zeichen an einer Linie ausrichten, die 2 Einheiten über dem System " "ist" -#. Documentation/user/tweaks.itely:2926 (variable) -#. Documentation/user/tweaks.itely:2975 (variable) -#. Documentation/user/tweaks.itely:3036 (variable) -#. Documentation/user/tweaks.itely:3106 (variable) -#. Documentation/user/tweaks.itely:3171 (variable) -#. Documentation/user/tweaks.itely:3231 (variable) +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) msgid "rhMusic" msgstr "rhNoten" -#. Documentation/user/tweaks.itely:2931 (comment) -#. Documentation/user/tweaks.itely:2980 (comment) -#. Documentation/user/tweaks.itely:3043 (comment) -#. Documentation/user/tweaks.itely:3115 (comment) -#. Documentation/user/tweaks.itely:3180 (comment) +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) msgid "Start polyphonic section of four voices" msgstr "Beginn des polyphonen Abschnitts mit vier Stimmen" -#. Documentation/user/tweaks.itely:2944 (variable) -#. Documentation/user/tweaks.itely:2993 (variable) -#. Documentation/user/tweaks.itely:3056 (variable) -#. Documentation/user/tweaks.itely:3130 (variable) -#. Documentation/user/tweaks.itely:3197 (variable) -#. Documentation/user/tweaks.itely:3259 (variable) +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +#, fuzzy +msgid "continuation of main voice" +msgstr "Erste Stimme einrichten" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) msgid "lhMusic" msgstr "lhNoten" -#. Documentation/user/tweaks.itely:2953 (context id) -#. Documentation/user/tweaks.itely:3002 (context id) -#. Documentation/user/tweaks.itely:3065 (context id) -#. Documentation/user/tweaks.itely:3139 (context id) -#. Documentation/user/tweaks.itely:3206 (context id) -#. Documentation/user/tweaks.itely:3268 (context id) -#. Documentation/user/input.itely:964 (context id) +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1154 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) msgid "RH" msgstr "RH" -#. Documentation/user/tweaks.itely:2957 (context id) -#. Documentation/user/tweaks.itely:3006 (context id) -#. Documentation/user/tweaks.itely:3069 (context id) -#. Documentation/user/tweaks.itely:3143 (context id) -#. Documentation/user/tweaks.itely:3210 (context id) -#. Documentation/user/tweaks.itely:3272 (context id) -#. Documentation/user/input.itely:970 (context id) +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1160 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) msgid "LH" msgstr "LH" -#. Documentation/user/tweaks.itely:3184 (comment) -#. Documentation/user/tweaks.itely:3246 (comment) +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "" "Verschiebe das c2 aus der Hauptnotenkolumne, damit Verschmelzung funktioniert" -#. Documentation/user/tweaks.itely:3187 (comment) -#. Documentation/user/tweaks.itely:3249 (comment) +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "Hals vom d2 muss nach unten, damit Verschmelzung gelingt" -#. Documentation/user/tweaks.itely:3244 (comment) +#. Documentation/learning/tweaks.itely:3368 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "c2 neu positionieren rechts von der verschmolzenen Note" -#. Documentation/user/tweaks.itely:3380 (comment) -#. Documentation/user/tweaks.itely:3402 (comment) +#. Documentation/learning/tweaks.itely:3379 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) msgid "Visible tempo marking" msgstr "Sichtbare Tempo-Bezeichnung" -#. Documentation/user/tweaks.itely:3384 (comment) -#. Documentation/user/tweaks.itely:3406 (comment) +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "Unsichtbare Tempo-Bezeichnung um Fermate im MIDI zu verlängern" -#. Documentation/user/tweaks.itely:3387 (comment) -#. Documentation/user/tweaks.itely:3409 (comment) +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) msgid "New tempo for next section" msgstr "Neues Tempo im nächsten Abschnitt" -#. Documentation/user/tweaks.itely:3466 (variable) +#. Documentation/learning/tweaks.itely:3604 (variable) msgid "emphasize" msgstr "emphasize" -#. Documentation/user/tweaks.itely:3470 (variable) +#. Documentation/learning/tweaks.itely:3609 (variable) msgid "normal" msgstr "normal" -#. Documentation/user/tweaks.itely:3476 (variable) +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) msgid "SopranoMusic" msgstr "SopranNoten" -#. Documentation/user/tweaks.itely:3489 (context id) -#. Documentation/user/input.itely:949 (context id) +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1139 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) msgid "Soprano" msgstr "Sopran" -#. Documentation/user/tweaks.itely:3698 (comment) +#. Documentation/learning/tweaks.itely:3672 (variable) +msgid "mpdolce" +msgstr "mpdolce" + +#. Documentation/learning/tweaks.itely:3679 (variable) +msgid "inst" +msgstr "Instrument" + +#. Documentation/learning/tweaks.itely:4184 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "Anordnungen um Farbe von der color-notehead-Prozedur zu erhalten" -#. @node in Documentation/user/tweaks.itely -#. @chapter in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @chapter in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @chapter in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @chapter in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely msgid "Tweaking output" msgstr "Die Ausgabe verändern" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Tweaking basics" msgstr "Grundlagen für die Optimierung" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Introduction to tweaks" msgstr "Grundlagen zur Optimierung" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Objects and interfaces" msgstr "Objekte und Schnittstellen" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Naming conventions of objects and properties" msgstr "Regeln zur Benennung von Objekten und Eigenschaften" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Tweaking methods" msgstr "Optimierungsmethoden" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "The Internals Reference manual" msgstr "Die Referenz der Programminterna" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Properties of layout objects" msgstr "Eigenschaften von Layoutobjekten" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Finding the context" msgstr "Den Kontext finden" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Overriding once only" msgstr "Nur einmal mit \\override verändern" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Reverting" msgstr "Rückgängig machen" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Properties found in interfaces" msgstr "Eigenschaften, die Schnittstellen besitzen können" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Specifying the context in lyric mode" msgstr "Den Kontext im Liedtextmodus bestimmen" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Types of properties" msgstr "Typen von Eigenschaften" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Appearance of objects" msgstr "Erscheinung von Objekten" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Visibility and color of objects" msgstr "Sichtbarkeit und Farbe von Objekten" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely msgid "stencil" msgstr "stencil (Matrize)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "break-visibility" msgstr "break-visibility (unsichtbar machen)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "transparent" msgstr "transparent (durchsichtig)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "color" msgstr "color (Farbe)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Size of objects" msgstr "Größe von Objekten" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Length and thickness of objects" msgstr "Länge und Dicke von Objekten" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Placement of objects" msgstr "Positionierung von Objekten" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Automatic behavior" msgstr "Automatisches Verhalten" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Within-staff objects" msgstr "within-staff (Objekte innerhalb des Notensystems)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely msgid "Fingering" msgstr "Fingersatz" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Outside-staff objects" msgstr "Objekte außerhalb des Notensystems" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "\\textLengthOn" -msgstr "\\textLengthOn (Textlänge berücksichtigen)" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "\\\\textLengthOn" +msgstr "\\\\textLengthOn (Textlänge berücksichtigen)" + +#. @subheading in Documentation/learning/tweaks.itely msgid "Grob sizing" msgstr "Verändern der Größe von grobs" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Collisions of objects" msgstr "Kollision von Objekten" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Moving objects" msgstr "Verschieben von Objekten" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Fixing overlapping notation" msgstr "Überlappende Notation in Ordnung bringen" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "padding property" msgstr "padding (Fülleigenschafte)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "left-padding and right-padding" -msgstr "" -"left-padding (Verschieben nach rechts) und right-padding (Verschieben nach " -"links)" +#. @subheading in Documentation/learning/tweaks.itely +#, fuzzy +msgid "right-padding" +msgstr "dichter Satz" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "staff-padding property" msgstr "staff-padding (Systemfüllungseigenschaft)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "self-alignment-X property" msgstr "self-alignment-X (Selbstausrichtung-X-Eigenschaft)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "staff-position property" msgstr "staff-position (Position innerhalb des Systems)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "extra-offset property" msgstr "extra-offset (Genaues Positionieren)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "positions property" msgstr "Ausrichtungseigenschaft" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "force-hshift property" msgstr "force-hshift (vertikale Verschiebunseigenschaft)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Real music example" msgstr "Beispiele aus dem Leben" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Further tweaking" msgstr "Weitere Optimierungen" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Other uses for tweaks" msgstr "Andere Benutzung von Optimierungen" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Tying notes across voices" msgstr "Noten zwischen unterschiedlichen Stimmen überbinden" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Simulating a fermata in MIDI" msgstr "Eine Fermate in MIDI simulieren" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Using variables for tweaks" msgstr "Variablen für Optimierungen einsetzen" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "Stil-Dateien" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Other sources of information" msgstr "Mehr Information" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Avoiding tweaks with slower processing" msgstr "Vermeiden von Optimierungen durch langsamere Übersetzung" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Advanced tweaks with Scheme" msgstr "Fortgeschrittene Optimierungen mit Scheme" -#. Documentation/user/working.itely:201 (variable) -msgid "hornNotes" -msgstr "HornNoten" - -#. Documentation/user/working.itely:212 (variable) -msgid "fragmentA" -msgstr "FramentA" - -#. Documentation/user/working.itely:213 (variable) -msgid "fragmentB" -msgstr "FragmentB" - -#. Documentation/user/working.itely:226 (variable) -msgid "dolce" -msgstr "dolce" - -#. Documentation/user/working.itely:227 (variable) -#. Documentation/user/working.itely:276 (variable) -#. Documentation/user/scheme-tutorial.itely:235 (variable) -#. Documentation/user/programming-interface.itely:101 (variable) -msgid "padText" -msgstr "AbstandText" - -#. Documentation/user/working.itely:228 (variable) -msgid "fthenp" -msgstr "FdannP" - -#. Documentation/user/working.itely:313 (variable) -msgid "mpdolce" -msgstr "mpdolce" - -#. Documentation/user/working.itely:315 (variable) -#. Documentation/user/scheme-tutorial.itely:256 (variable) -#. Documentation/user/programming-interface.itely:135 (variable) -msgid "tempoMark" -msgstr "tempoZeichen" - -#. @node in Documentation/user/working.itely -#. @chapter in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @chapter in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @chapter in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @chapter in Documentation/de/user/working.itely -msgid "Working on LilyPond projects" -msgstr "An LilyPond-Projekten arbeiten" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "Suggestions for writing LilyPond input files" -msgstr "Vorschläge, wie LilyPond-Eingabe-Dateien geschrieben werden sollen" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "General suggestions" -msgstr "Allgemeine Vorschläge" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Typesetting existing music" -msgstr "Das Kopieren von existierender Musik" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Large projects" -msgstr "Große Projekte" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Saving typing with variables and functions" -msgstr "Tipparbeit sparen durch Bezeichner und Funktionen" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Style sheets" -msgstr "Stil-Dateien" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "When things don't work" -msgstr "Wenn etwas nicht funktioniert" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -msgid "Updating old input files" -msgstr "Alte Eingabe-Dateien aktualisieren" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Troubleshooting (taking it all apart)" -msgstr "Fehlersuche (alles auseinandernehmen)" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Minimal examples" -msgstr "Minimalbeispiele" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "Scores and parts" -msgstr "Partituren und Stimmen" - -#. @node in Documentation/user/templates.itely -#. @appendix in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendix in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendix in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendix in Documentation/de/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely msgid "Templates" msgstr "Vorlagen" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Single staff" msgstr "Ein einzelnes System" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes only" msgstr "Nur Noten" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes and lyrics" msgstr "Noten und Text" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes and chords" msgstr "Noten und Akkordbezeichnungen" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes, lyrics, and chords." msgstr "Noten, Text und Akkordbezeichnungen" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Piano templates" msgstr "Klaviervorlagen" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Solo piano" msgstr "Piano Solo" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano and melody with lyrics" msgstr "Klavier und Gesangstimme" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano centered lyrics" msgstr "Klavier mit zentriertem Text" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano centered dynamics" msgstr "Klavier mit zentrierten Lautstärkebezeichnungen" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "String quartet" msgstr "Streichquartett" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "String quartet parts" msgstr "Streichquartettstimmen" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Vocal ensembles" msgstr "Vokalensemble" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB vocal score" msgstr "SATB-Partitur" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB vocal score and automatic piano reduction" msgstr "SATB-Partitur und automatischer Klavierauszug" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB with aligned contexts" msgstr "SATB mit zugehörigen Kontexten" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +#, fuzzy +msgid "Hymn tunes" +msgstr "Silbenanzahl" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Orchestral templates" +msgstr "Orchestervorlage" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Orchestra, choir and piano" +msgstr "Orchester, Chor und Klavier" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Ancient notation templates" msgstr "Vorlagen für alte Notation" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Transcription of mensural music" msgstr "Transkription mensuraler Musik" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Gregorian transcription template" msgstr "Vorlage zur Transkription von Gregorianik" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Other templates" +msgstr "Andere Vorlagen" + +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Jazz combo" msgstr "Jazz-Combo" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -msgid "lilypond-book templates" -msgstr "lilypond-book-Vorlagen" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "LaTeX" -msgstr "LaTeX" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "Musikbegriffen A--Z" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" +msgstr "A" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "a due" -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -msgid "Texinfo" -msgstr "Texinfo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accelerando" +msgstr "Accelerando" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "xelatex" -msgstr "xelatex" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "Akzent" -#. Documentation/user/scheme-tutorial.itely:274 (variable) -msgid "pattern" -msgstr "Muster" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "Zubehör" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendix in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendix in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendix in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendix in Documentation/de/user/scheme-tutorial.itely -msgid "Scheme tutorial" -msgstr "Scheme-Übung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "Adagio" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendixsec in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendixsec in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendixsec in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendixsec in Documentation/de/user/scheme-tutorial.itely -msgid "Tweaking with Scheme" -msgstr "Optimierungen mit Scheme" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" +msgstr "al niente" -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -msgid "GNU Free Documentation License" -msgstr "GNU Free Documentation License" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "Alla Breve" -#. @subheading in Documentation/user/fdl.itexi -msgid "ADDENDUM: How to use this License for your documents" -msgstr "Anhang: Wie kann die Lizenz für eigene Dokumente verwendet werden" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "Allegro" -#. @top in Documentation/user/lilypond-program.tely -msgid "GNU LilyPond --- Application Usage" -msgstr "GNU LilyPond -- Die Programmbenutzung" - -#. @node in Documentation/user/install.itely -#. @chapter in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @chapter in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @chapter in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @chapter in Documentation/de/user/install.itely -msgid "Install" -msgstr "Installieren" - -#. @node in Documentation/user/install.itely -#. @section in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @section in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -msgid "Precompiled binaries" -msgstr "Vorkompilierte Binär-Pakete" - -#. @unnumberedsubsec in Documentation/user/install.itely -#. @unnumberedsubsec in Documentation/fr/user/install.itely -#. @unnumberedsubsec in Documentation/es/user/install.itely -#. @unnumberedsubsec in Documentation/de/user/install.itely -msgid "Downloading" -msgstr "Herunterladen" - -#. @node in Documentation/user/install.itely -#. @section in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @section in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -msgid "Compiling from source" -msgstr "Aus den Quellen übersetzen" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Downloading source code" -msgstr "Den Quellcode herunterladen" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Requirements" -msgstr "Voraussetzungen" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compilation" -msgstr "Übersetzen" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Running requirements" -msgstr "Voraussetzungen zur Programmbenutzung" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Requirements for building documentation" -msgstr "Anforderungen, um die Dokumentation zu übersetzen" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Building LilyPond" -msgstr "LilyPond übersetzen" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compiling" -msgstr "Kompilieren" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compiling for multiple platforms" -msgstr "Für mehrere Plattformen kompilieren" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compiling outside the source tree" -msgstr "Außerhalb des Quellbaums übersetzen" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Useful @command{make} variables" -msgstr "Nützliche @command{make}-Variablen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alteration" +msgstr "Alteration" -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Building documentation" -msgstr "Die Dokumentation übersetzen" - -#. @node in Documentation/user/install.itely -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Commands for building documentation" -msgstr "Befehle um die Dokumentation zu übersetzen" - -#. @node in Documentation/user/install.itely -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Building documentation without compiling LilyPond" -msgstr "Die Dokumentation übersetzen ohne LilyPond zu kompilieren" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Testing LilyPond" -msgstr "LilyPond testen" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Problems" -msgstr "Probleme" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Bison 1.875" -msgstr "Bison 1.875" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Solaris" -msgstr "Solaris" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "FreeBSD" -msgstr "FreeBSD" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "International fonts" -msgstr "Internationale Schriftarten" - -#. @node in Documentation/user/setup.itely -#. @chapter in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @chapter in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @chapter in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @chapter in Documentation/de/user/setup.itely -msgid "Setup" -msgstr "Setup" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -msgid "Setup for specific Operating Systems" -msgstr "Setup für bestimmte Betriebssysteme" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "Setup for MacOS X" -msgstr "Einrichtung für MacOS X" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -msgid "Using Python scripts on MacOS 10.3 or 10.4" -msgstr "Benutzung von Python-Skripten unter MacOS 10.3 oder 10.4" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -msgid "MacOS X on the command line" -msgstr "MacOS X auf der Kommandozeile" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -msgid "Text editor support" -msgstr "Unterstützung von Texteditoren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "alt" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "Emacs mode" -msgstr "Emacs-Modus" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alto clef" +msgstr "Altschlüssel" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "Vim mode" -msgstr "Vim-Modus" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "Alte Moll-Skala" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "jEdit" -msgstr "jEdit" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "TexShop" -msgstr "TexShop" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "TextMate" -msgstr "TextMate" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "LilyKDE" -msgstr "LilyKDE" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -msgid "Point and click" -msgstr "Point and click" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "Andante" -#. @node in Documentation/user/running.itely -#. @chapter in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @chapter in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @chapter in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @chapter in Documentation/de/user/running.itely -msgid "Running LilyPond" -msgstr "LilyPond starten" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Normal usage" -msgstr "Übliche Programmbenutzung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "Arpeggio" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Command-line usage" -msgstr "Benutzung auf der Kommandozeile" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ascending interval" +msgstr "Absteigendes Inervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmentation" +msgstr "Augmentation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmented interval" +msgstr "Übermäßiges Intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "Autograph" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" +msgstr "B" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Invoking lilypond" -msgstr "lilypond aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "Vorschlag nach unten" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Invoking @command{lilypond}" -msgstr "@command{lilypond} aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "Takt" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Command line options for lilypond" -msgstr "Optionen von lilypond auf der Kommandozeile" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "Taktstrich" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Command line options for @command{lilypond}" -msgstr "Optionen auf der Kommandozeile für @command{lilypond}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone" +msgstr "Bariton" -#. @node in Documentation/user/running.itely -#. @subsection in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Environment variables" -msgstr "Umgebungsvariablen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "Baritonschlüssel" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Error messages" -msgstr "Fehlermeldungen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" +msgstr "Bass" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Updating files with convert-ly" -msgstr "Dateien mit convert-ly aktualisieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bass clef" +msgstr "Bassschlüssel" -#. @section in Documentation/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Updating files with @command{convert-ly}" -msgstr "Dateien mit @command{convert-ly} aktualisieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat" +msgstr "Taktschlag" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Command line options for convert-ly" -msgstr "Optionen von convert-ly auf der Kommandozeile" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "Schlagwiederholung" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Command line options for @command{convert-ly}" -msgstr "Optionen von @command{convert-ly} auf der Kommandozeile" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "Bindebogen" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Problems with convert-ly" -msgstr "Probleme mit convert-ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" +msgstr "Klammer" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Problems with @code{convert-ly}" -msgstr "Probleme mit @code{convert-ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brass" +msgstr "Blech" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Reporting bugs" -msgstr "Fehler melden" - -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "LilyPond-book" -msgstr "LilyPond-book" - -#. @chapter in Documentation/user/lilypond-book.itely -#. @chapter in Documentation/fr/user/lilypond-book.itely -#. @chapter in Documentation/es/user/lilypond-book.itely -#. @chapter in Documentation/de/user/lilypond-book.itely -msgid "@command{lilypond-book}: Integrating text and music" -msgstr "@command{lilypond-book}: Noten in den Text integrieren" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "An example of a musicological document" -msgstr "Ein musikwissenschaftlicher Text als Beispiel" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "Atemzeichen" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Input" -msgstr "Eingabe" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" +msgstr "Brevis" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Processing" -msgstr "Verarbeitung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "C" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Output" -msgstr "Ausgabe" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C clef" +msgstr "C-Schlüssel" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Integrating music and text" -msgstr "Noten in Text integrieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "Kadenz" -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -msgid "@LaTeX{}" -msgstr "@LaTeX{}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "Kadenz" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "HTML" -msgstr "HTML" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "Zäsur" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "DocBook" -msgstr "DocBook" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "Kanon" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "Komma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "central C" +msgstr "zweigestrichenes C" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "Chromatische Skala" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "Chromatizismus" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "Kirchentonart" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Common conventions" -msgstr "Definitionen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "Cluster" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Including a LilyPond file" -msgstr "Eine LilyPond-Datei einfügen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "Komma" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Including LilyPond code" -msgstr "LilyPond-Code einfügen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "4/4-Takt" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Processing the DocBook document" -msgstr "Ein DocBook-Dokument übersetzen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" +msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Music fragment options" -msgstr "Die Musikfragment-Optionen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "4/4-Takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "Komplementärintervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound interval" +msgstr "weites Intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "Dreiertakt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "zusammengestzte Taktart" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "Kammerton" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "Invoking lilypond-book" -msgstr "lilypond-book aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "stufenweise Bewegung" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Invoking @command{lilypond-book}" -msgstr "@command{lilypond-book} aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "Konsonanz" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Format-specific instructions" -msgstr "Formatabhängige Anweisungen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "contralto" +msgstr "Alt" -#. @subheading in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Command line options" -msgstr "Optionen auf der Kommandozeile" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "copying music" +msgstr "Noten kopieren" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Filename extensions" -msgstr "Dateiendungen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "Kontrapunkt" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "Alternate methods of mixing text and music" -msgstr "Alternative Methoden, Text und Musik zu kombinieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "Kontratenor" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Alternative methods of mixing text and music" -msgstr "Alternative Methoden, Text mit Musik zu kombinieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cue-notes" +msgstr "Stichnoten" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "Many quotes from a large score" -msgstr "Viele Zitate aus einer langen Partitur" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "Custos" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "Halbe Zeit" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "D" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "da capo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal niente" +msgstr "aus dem Nichts" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "dal segno" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "fallendes Intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "diatonische Skala" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "didymic comma" +msgstr "Didymisches Komma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "vermindertes intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "Diminuendo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminution" +msgstr "Diminution" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "direct" +msgstr "Weiser" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "sprunghafte Bewegung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "Dissonanz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonant interval" +msgstr "Dissonanz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "Divisio" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "doit" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "Inserting LilyPond output into OpenOffice.org" -msgstr "LilyPond-Noten in OpenOffice.org integrieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "Dominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant ninth chord" +msgstr "Dominantnonenakkord" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant seventh chord" +msgstr "Dominantseptakkord" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "dorisch" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "Punkt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double appoggiatura" +msgstr "doppelter Vorschlag" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double bar line" +msgstr "Doppelstrich" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double dotted note" +msgstr "doppelt punktierte Note" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double time signature" +msgstr "zusammengesetzte Taktart" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double trill" +msgstr "Doppeltriller" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "grader Takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duplet" +msgstr "Duole" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "E" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "Kirchentonart" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "Inserting LilyPond output into other programs" -msgstr "LilyPond-Noten in andere Programme integrieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth note" +msgstr "Achtelnote" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "Achtelpause" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "Elision" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "embellishment" +msgstr "Verzierung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "engraving" +msgstr "Notenstich" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "enharmonisch" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "gleichschwebende Stimmung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "expression mark" +msgstr "Vortragszeichen" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "F" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F clef" +msgstr "F-Schlüssel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "Glissando nach unten" -#. @node in Documentation/user/converters.itely -#. @chapter in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @chapter in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @chapter in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @chapter in Documentation/de/user/converters.itely -msgid "Converting from other formats" -msgstr "Von anderen Formaten konvertieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "gespreizter Balken" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking midi2ly" -msgstr "midi2ly aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "Fermate" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @command{midi2ly}" -msgstr "@command{midi2ly} aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "Quinte" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking musicxml2ly" -msgstr "muscxml2ly aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "Generalbass" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @code{musicxml2ly}" -msgstr "@command{muscxml2ly} aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flag" +msgstr "Fähnchen" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking abc2ly" -msgstr "abc2ly aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flageolet" +msgstr "Flageolett" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @code{abc2ly}" -msgstr "@command{abc2ly} aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "Verzierung" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking etf2ly" -msgstr "etf2ly aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "Forte" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @command{etf2ly}" -msgstr "@command{etf2ly} aufrufen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "Quarte" -#. @node in Documentation/user/converters.itely -#. @section in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Generating LilyPond files" -msgstr "LilyPond-Dateien erstellen" - -#. @top in Documentation/user/lilypond.tely -#. @top in Documentation/de/user/lilypond.tely -msgid "GNU LilyPond --- Notation Reference" -msgstr "GNU LilyPond -- Notationsreferenz" - -#. @chapheading in Documentation/user/lilypond.tely -msgid "The music typesetter" -msgstr "Das Notensatzprogramm" - -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond command index" -msgstr "Index der LilyPond-Befehle" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "Orchesterpartitur ohne leere Systeme" -#. @node in Documentation/user/notation.itely -#. @chapter in Documentation/user/notation.itely -#. @node in Documentation/fr/user/notation.itely -#. @chapter in Documentation/fr/user/notation.itely -#. @node in Documentation/es/user/notation.itely -#. @chapter in Documentation/es/user/notation.itely -#. @node in Documentation/de/user/notation.itely -#. @chapter in Documentation/de/user/notation.itely -msgid "Musical notation" -msgstr "Musikalische Notation" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "zeitweiliges Notensystem" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "Zeitweilige Notensysteme" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "Fuge" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "Funktionslehre" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "G" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G clef" +msgstr "G-Schlüssel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "Glissando" -#. Documentation/user/pitches.itely:688 (variable) -#. Documentation/user/input.itely:1033 (variable) -#. Documentation/user/input.itely:1052 (variable) -#. Documentation/user/input.itely:1089 (variable) -#. Documentation/user/input.itely:1104 (variable) -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:29 (variable) -#. input/lsr/controlling-tuplet-bracket-visibility.ly:20 (variable) -#. input/lsr/letter-tablature-formatting.ly:25 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:98 (variable) -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:136 (variable) -#. input/lsr/vertically-aligned-dynamics-and-textscripts.ly:50 (variable) -msgid "music" -msgstr "Noten" - -#. Documentation/user/pitches.itely:1082 (comment) -msgid "not strictly necessary, but a good reminder" -msgstr "nicht unbdingt nötig, aber gut zu erinnern" - -#. Documentation/user/pitches.itely:1089 (context id) -#. Documentation/user/staff.itely:1076 (variable) -msgid "clarinet" -msgstr "Klarinette" - -#. Documentation/user/pitches.itely:1174 (variable) -msgid "musicA" -msgstr "NotenA" - -#. Documentation/user/pitches.itely:1188 (variable) -msgid "musicB" -msgstr "NotenB" - -#. Documentation/user/pitches.itely:1207 (context id) -#. Documentation/user/keyboards.itely:175 (context id) -#. Documentation/user/keyboards.itely:274 (context id) -#. Documentation/user/percussion.itely:175 (variable) -#. Documentation/user/percussion.itely:365 (variable) -#. input/lsr/jazz-combo-template.ly:241 (variable) -msgid "up" -msgstr "oben" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "Akkolade" -#. Documentation/user/pitches.itely:1211 (context id) -#. Documentation/user/keyboards.itely:185 (context id) -#. Documentation/user/keyboards.itely:283 (context id) -#. Documentation/user/percussion.itely:178 (variable) -#. Documentation/user/percussion.itely:366 (variable) -#. input/lsr/jazz-combo-template.ly:247 (variable) -msgid "down" -msgstr "unten" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grave" +msgstr "Grave" -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Writing pitches" -msgstr "Tonhöhen setzen" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Absolute octave entry" -msgstr "Absolute Oktavenbezeichnung" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Relative octave entry" -msgstr "Relative Oktavenbezeichnung" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "fifth" -msgstr "Quinte" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "Verzierung" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "quarter tone" -msgstr "Viertelton" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "H" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Note names in other languages" -msgstr "Notenbezeichnungen in anderen Sprachen" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Changing multiple pitches" -msgstr "Viele Tonhöhen gleichzeitig verändern" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Octave checks" -msgstr "Oktavenüberprüfung" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Transpose" -msgstr "Transposition" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "Gabel" -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Displaying pitches" -msgstr "Tonhöhen anzeigen lassen" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Key signature" -msgstr "Tonartbezeichnung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half rest" +msgstr "halbe Pause" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "church mode" -msgstr "Kirchentonart" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "Schlusskadenz" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "scordatura" -msgstr "Skordatur" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "Flageolett-Töne" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "Harmonie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "Hemiole" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "homophony" +msgstr "Homophonie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "Fähnchen" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "Silbenanzahl" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inversion" +msgstr "Umkehrung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inverted interval" +msgstr "umgekehrtes Intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "reine Stimmung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "Tonart" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ottava brackets" -msgstr "Oktavierungsklammern" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "octavation" -msgstr "Oktavierung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "Laissez-vibrer-Bögen" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Instrument transpositions" -msgstr "Transposition von Instrumenten" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "concert pitch" -msgstr "Kammerton" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "Largo" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "transposing instrument" -msgstr "Transponierende Instrumente" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leading note" +msgstr "Leitton" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Automatic accidentals" -msgstr "Automatische Versetzungszeichen" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ambitus" -msgstr "Tonumfang" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "Hilfslinie" -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Note heads" -msgstr "Notenköpfe" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Special note heads" -msgstr "Besondere Notenköpfe" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Easy notation note heads" -msgstr "Easy-Notation-Notenköpfe" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Shape note heads" -msgstr "Notenköpfe mit besonderen Formen" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Improvisation" -msgstr "Improvisation" - -#. Documentation/user/rhythms.itely:287 (comment) -msgid "Alter durations to triplets" -msgstr "Dauern zu Triolen verändern" - -#. Documentation/user/rhythms.itely:289 (comment) -#. Documentation/user/rhythms.itely:314 (comment) -msgid "Normal durations" -msgstr "Normale Tondauern" - -#. Documentation/user/rhythms.itely:291 (comment) -msgid "Double the duration of chord" -msgstr "Dauer der Akkorde verdoppeln" - -#. Documentation/user/rhythms.itely:293 (comment) -msgid "Duration of quarter, appears like sixteenth" -msgstr "Dauer einer Vietel, erscheint vie eine Sechszehntel" - -#. Documentation/user/rhythms.itely:316 (comment) -msgid "Scale music by *2/3" -msgstr "Noten mit 2/3 skalieren" - -#. Documentation/user/rhythms.itely:320 (comment) -msgid "Scale music by *2" -msgstr "Noten *2 skalieren" - -#. Documentation/user/rhythms.itely:404 (comment) -msgid "First alternative: following note is tied normally" -msgstr "Erste Weiche: nächste Note ist normal gebunden" - -#. Documentation/user/rhythms.itely:406 (comment) -msgid "Second alternative: following note has a repeated tie" -msgstr "Zweite Weiche: folgende Note hat einen Wiederholten Bindebogen" - -#. Documentation/user/rhythms.itely:522 (comment) -msgid "These two lines are just to prettify this example" -msgstr "Die zwei Linien sind nur zur Verschönerung" - -#. Documentation/user/rhythms.itely:525 (comment) -msgid "Print a maxima rest, equal to four breves" -msgstr "Setze Maxima-Pause, gleich vier Breven" - -#. Documentation/user/rhythms.itely:527 (comment) -msgid "Print a longa rest, equal to two breves" -msgstr "Setze Longa-Pause, gleich zwei Breven" - -#. Documentation/user/rhythms.itely:529 (comment) -msgid "Print a breve rest" -msgstr "Setze Breve-Pause" - -#. Documentation/user/rhythms.itely:630 (comment) -msgid "This is valid input, but does nothing" -msgstr "Gültiger Eingabecode, aber tut nichts" - -#. Documentation/user/rhythms.itely:656 (comment) -#. Documentation/user/rhythms.itely:709 (comment) -msgid "Rest measures contracted to single measure" -msgstr "Pausentakte zu einem einzelnen Takt zusammegezogen" - -#. Documentation/user/rhythms.itely:705 (comment) -#. input/lsr/avoiding-collisions-of-chord-fingering-with-beams.ly:35 (comment) -msgid "Default behavior" -msgstr "Standart" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato" +msgstr "Legato" -#. Documentation/user/rhythms.itely:712 (comment) -msgid "Rest measures expanded" -msgstr "Pausentakte \tausklappen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "Legatobogen" -#. Documentation/user/rhythms.itely:745 (comment) -msgid "This fails, as the wrong object name is specified" -msgstr "" -"Das funktioniert nicht, weil die falsche Objektbezeichnung angegeben ist" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leger line" +msgstr "Hilfslinie" -#. Documentation/user/rhythms.itely:748 (comment) -msgid "This is correct and works" -msgstr "Das stimmt und funktioniert" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ligature" +msgstr "Ligatur" -#. Documentation/user/rhythms.itely:873 (comment) -msgid "Default style" -msgstr "Standardstil" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "Seerosenteich" -#. Documentation/user/rhythms.itely:876 (comment) -msgid "Change to numeric style" -msgstr "Wechsel zum nummerierten Stil" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "Linie" -#. Documentation/user/rhythms.itely:880 (comment) -msgid "Revert to default style" -msgstr "Zurück zum Standard" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "loco" -#. Documentation/user/rhythms.itely:1021 (comment) -msgid "Show all bar numbers" -msgstr "Alle Taknummern anzeigen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "Vorhalt" -#. Documentation/user/rhythms.itely:1140 (comment) -msgid "Now each staff has its own time signature." -msgstr "Jetzt hat jedes System eine eigene Taktart" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" +msgstr "Longa" -#. Documentation/user/rhythms.itely:1262 (context id) -msgid "myRhythm" -msgstr "meinRhythmus" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyric tie" +msgstr "Textbindung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major interval" +msgstr "großes Intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maxima" +msgstr "Maxima" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "mitteltönige Stimmung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure" +msgstr "Takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "Taktwiederholung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "Mediante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma line" +msgstr "Fülllinie" -#. Documentation/user/rhythms.itely:1598 (comment) -msgid "end 1/16 beams for all time signatures at the 1/16 moment" -msgstr "1/16-Balken für alle Taktarten beim 1/16-Moment beenden" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "melodische Kadenz" -#. Documentation/user/rhythms.itely:1602 (comment) -msgid "end 1/32 beams for all time signatures at the 1/16 moment" -msgstr "1/23-Balken für alle Taktarten beim 1/16-Moment beenden" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensural notation" +msgstr "Mensuralnotation" -#. Documentation/user/rhythms.itely:1612 (comment) -msgid "end beams of all durations in 5/8 time signature at the 2/8 moment" -msgstr "Balken aller Längen im 5/8-Takt am 2/8-Moment beenden" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "Mensurale Taktartenbezeichnung" -#. Documentation/user/rhythms.itely:1627 (comment) -msgid "rhythm 3-1-1-2" -msgstr "Rhythmus 3-1-1-2" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "Metrum" -#. Documentation/user/rhythms.itely:1628 (comment) -msgid "Context not specified - does not work correctly" -msgstr "Kontext nicht angegeben - funktioniert nicht richtig" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "Metronombezeichnung" -#. Documentation/user/rhythms.itely:1634 (comment) -msgid "Works correctly with context specified" -msgstr "Funktioniert richtig mit angegebenem Kontext" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "Metronombezeichnung" -#. Documentation/user/rhythms.itely:1667 (comment) -msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" -msgstr "Regel annullieren, dass 1/16-Balken im 4/4-Takt am 1/4-Moment enden" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "mezzo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "Mezzosopran" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor interval" +msgstr "kleines Intervall" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "Mixolydisch" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "Kirchentonart" -#. Documentation/user/rhythms.itely:1680 (comment) -msgid "this won't revert it!" -msgstr "Das macht es nicth rückgängig" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "modulation" +msgstr "Modulation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "Mordent" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "Motiv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motive" +msgstr "Motiv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "Satz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "Pausen über mehrere Takte" -#. Documentation/user/rhythms.itely:1682 (comment) -msgid "this will" -msgstr "Das schon" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "Nachbartöne" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ninth" +msgstr "None" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "non-legato" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note" +msgstr "Note" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "Notenkopf" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note names" +msgstr "Notenbezeichnung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "Oktavierung" -#. Documentation/user/rhythms.itely:1815 (comment) -msgid "revert to non-feathered beams" -msgstr "in nichtgespreizte Balken zurückverwandeln" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave mark" +msgstr "Oktavierungszeichen" -#. Documentation/user/rhythms.itely:2037 (comment) -#. Documentation/user/rhythms.itely:2053 (comment) -msgid "Permit first bar number to be printed" -msgstr "Erste Taktnummer soll auch gesetzt werden" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave marking" +msgstr "Oktavierung" -#. Documentation/user/rhythms.itely:2054 (comment) -#. Documentation/user/rhythms.itely:2102 (comment) -msgid "Print a bar number every second measure" -msgstr "Jeden zweiten Takt eine Taktnummer setzen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave sign" +msgstr "Oktavierungszeichen" -#. Documentation/user/rhythms.itely:2070 (comment) -msgid "Prevent bar numbers at the end of a line and permit them elsewhere" -msgstr "Taktnummern am Zeilenende verbieten und woanders erlauben" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ornament" +msgstr "Verzierung" -#. Documentation/user/rhythms.itely:2074 (comment) -#. Documentation/user/rhythms.itely:2100 (comment) -msgid "Increase the size of the bar number by 2" -msgstr "Taktnummer um Faktor zwei vergrößern" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "Stimme" -#. Documentation/user/rhythms.itely:2078 (comment) -msgid "Draw a box round the following bar number(s)" -msgstr "Einen Kasten um die folgenden Taktnummern zeichnen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "Fermate" -#. Documentation/user/rhythms.itely:2083 (comment) -msgid "Draw a circle round the following bar number(s)" -msgstr "Einen Kreis um die folgenden Taktnummern zeichnen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "Fähnchen" -#. Documentation/user/rhythms.itely:2105 (comment) -msgid "Center-align bar numbers" -msgstr "Taktnummern zentrieren" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "Prozent-Wiederholung" -#. Documentation/user/rhythms.itely:2108 (comment) -msgid "Right-align bar numbers" -msgstr "Taktnummern rechtsbündig" - -#. Documentation/user/rhythms.itely:2210 (variable) -msgid "pipeSymbol" -msgstr "pipeSymbol" - -#. Documentation/user/rhythms.itely:2598 (variable) -msgid "MyCadenza" -msgstr "MeineKadenz" - -#. @node in Documentation/user/rhythms.itely -#. @section in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @section in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @section in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @section in Documentation/de/user/rhythms.itely -msgid "Rhythms" -msgstr "Rhythmus" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "Schlagzeug" -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rhythms" -msgstr "Rhythmen eingeben" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Durations" -msgstr "Tondauern" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "breve" -msgstr "Brevis" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "perfect interval" +msgstr "reines Intervall" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "longa" -msgstr "Longa" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrase" +msgstr "Phrase" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "Duration names notes and rests" -msgstr "Dauerbezeichnungen für Noten und Pausen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "Auftakt" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "tuplet" -msgstr "N-tole" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "Pizzicato" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "polymetric" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" msgstr "Polymetrie" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Scaling durations" -msgstr "Tondauern skalieren" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "laissez vibrer" -msgstr "Laissez-vibrer-Bögen" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rests" -msgstr "Pausen eingeben" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Invisible rests" -msgstr "Unsichtbare Pausen" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Full measure rests" -msgstr "Ganztaktige Pausen" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "multi-measure rest" -msgstr "Pausen über mehrere Takte" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Displaying rhythms" -msgstr "Rhythmen anzeigen lassen" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Upbeats" -msgstr "Auftakte" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Unmetered music" -msgstr "Musik ohne Metrum" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "cadenza" -msgstr "Kadenz" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric" +msgstr "polymetrisch" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Polymetric notation" -msgstr "Polymetrische Notation" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "polymetric time signature" msgstr "Polymetrische Taktangabe" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "meter" -msgstr "Metrum" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic note splitting" -msgstr "Automatische Aufteilung von Noten" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Showing melody rhythms" -msgstr "Melodierhythmus anzeigen" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Beams" -msgstr "Balken" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic beams" -msgstr "Automatische Balken" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Setting automatic beam behavior" -msgstr "Einstellung von automatischen Balken" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Manual beams" -msgstr "Manuelle Balken" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Feathered beams" -msgstr "Gespreizte Balken" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Bars" -msgstr "Takte" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar lines" -msgstr "Taktstriche" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar numbers" -msgstr "Taktzahlen" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar and bar number checks" -msgstr "Takt- und Taktzahlüberprüfung" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Rehearsal marks" -msgstr "Übungszeichen" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Special rhythmic concerns" -msgstr "Besondere rhythmische Fragen" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Aligning to cadenzas" -msgstr "An Kadenzen ausrichten" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Time administration" -msgstr "Verwaltung der Zeiteinheiten" - -#. Documentation/user/expressive.itely:386 (variable) -#. Documentation/user/expressive.itely:454 (variable) -msgid "moltoF" -msgstr "moltoF" - -#. Documentation/user/expressive.itely:407 (variable) -#. Documentation/user/expressive.itely:437 (variable) -msgid "roundF" -msgstr "rundF" - -#. Documentation/user/expressive.itely:409 (variable) -#. Documentation/user/expressive.itely:441 (variable) -msgid "boxF" -msgstr "KastenF" - -#. Documentation/user/expressive.itely:424 (variable) -msgid "sfzp" -msgstr "sfzp" - -#. Documentation/user/expressive.itely:442 (variable) -msgid "roundFdynamic" -msgstr "rundFDynamik" - -#. Documentation/user/expressive.itely:443 (variable) -msgid "boxFdynamic" -msgstr "KastenFDynamik" - -#. @node in Documentation/user/expressive.itely -#. @section in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @section in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @section in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @section in Documentation/de/user/expressive.itely -msgid "Expressive marks" -msgstr "Ausdrucksbezeichnungen" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Attached to notes" -msgstr "An Noten angehängt" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Articulations and ornamentations" -msgstr "Artikulationszeichen und Verzierungen" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "tenuto" -msgstr "Tenuto" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "accent" -msgstr "Akzent" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "staccato" -msgstr "Staccato" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "portato" msgstr "Portato" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "al niente" -msgstr "al niente" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "hairpin" -msgstr "Gabel" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "New dynamic marks" -msgstr "Neue Lautstärkezeichen" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Curves" -msgstr "Bögen" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Breath marks" -msgstr "Atemzeichen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "power chord" +msgstr "Moderne Akkorde" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "presto" +msgstr "Presto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "proportion" +msgstr "Proportio" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "pythagoräisches Komma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "Quartole" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "Modus (Dur oder Moll)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter rest" +msgstr "Viertelpause" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "Viertelton" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -#. input/lsr/breathing-signs.ly:35 (comment) -msgid "caesura" -msgstr "Zäsur" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "Quintole" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Falls and doits" -msgstr "Glissando zu unbestimmter Tonhöhe" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "fall" -msgstr "Glissando nach unten" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "rallantando" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "doit" -msgstr "doit" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "Paralleltonart" -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Lines" -msgstr "Linien" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Glissando" -msgstr "Glissando" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "repeat" +msgstr "Wiederholungen" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "glissando" -msgstr "Glissando" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "Rhythmus" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Arpeggio" -msgstr "Arpeggio" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "Ritardando" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "arpeggio" -msgstr "Arpeggio" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "ritenuto" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Trills" -msgstr "Triller" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "Tonleiterstufe" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "trill" -msgstr "Triller" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "Skordatur" -#. Documentation/user/repeats.itely:299 (variable) -#. input/lsr/volta-text-markup-using-repeatcommands.ly:21 (variable) -msgid "voltaAdLib" -msgstr "VoltaAdLib" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "score" +msgstr "Partitur" -#. @node in Documentation/user/repeats.itely -#. @section in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @section in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @section in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @section in Documentation/de/user/repeats.itely -msgid "Repeats" -msgstr "Wiederholungszeichen" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Long repeats" -msgstr "Lange Wiederholungen" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Normal repeats" -msgstr "Normale Wiederholungen" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "repeat" -msgstr "Wiederholungen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "Sekunde" -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "volta" -msgstr "Volta-Klammer" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "Semibrevis" -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Manual repeat marks" -msgstr "Manuelle Wiederholungszeichen" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Written-out repeats" -msgstr "Ausgeschriebene Wiederholungen" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Short repeats" -msgstr "Kurze Wiederholungen" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Percent repeats" -msgstr "Prozent-Wiederholungen" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "percent repeat" -msgstr "Prozent-Wiederholung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "Halbton" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "Septime" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "Sextole" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextuplet" +msgstr "Sextole" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "shake" +msgstr "Triller" -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "simile" msgstr "gleichartig" -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Tremolo repeats" -msgstr "Tremolo-Wiederholung" - -#. Documentation/user/simultaneous.itely:94 (comment) -msgid "explicit single voice" -msgstr "explizit eine Stimme" - -#. Documentation/user/simultaneous.itely:100 (comment) -msgid "single first note" -msgstr "einzelne erste Note" - -#. Documentation/user/simultaneous.itely:112 (comment) -msgid "no single first note" -msgstr "keine einzelne erste Note" - -#. Documentation/user/simultaneous.itely:621 (variable) -msgid "instrumentOne" -msgstr "InstrumentEins" - -#. Documentation/user/simultaneous.itely:629 (variable) -msgid "instrumentTwo" -msgstr "InstrumentZwei" - -#. Documentation/user/simultaneous.itely:806 (comment) -msgid "Bar 3 ..." -msgstr "Takt 3 ..." - -#. @node in Documentation/user/simultaneous.itely -#. @section in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @section in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @section in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @section in Documentation/de/user/simultaneous.itely -msgid "Simultaneous notes" -msgstr "Gleichzeitig erscheinende Noten" - -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Single voice" -msgstr "Eine einzelne Stimme" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Chorded notes" -msgstr "Noten mit Akkorden" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Simultaneous expressions" -msgstr "Gleichzeitige Ausdrücke" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Clusters" -msgstr "Cluster" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "cluster" -msgstr "Cluster" - -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Multiple voices" -msgstr "Mehrere Stimmen" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Single-staff polyphony" -msgstr "Mehrstimmigkeit in einem System" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Voice styles" -msgstr "Stimmenstile" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Collision resolution" -msgstr "Auflösung von Zusammenstößen" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Automatic part combining" -msgstr "Automatische Kombination von Stimmen" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "a due" -msgstr "a due" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. input/lsr/flamenco-notation.ly:136 (variable) -#. input/lsr/flamenco-notation.ly:233 (context id) -msgid "part" -msgstr "Stimme" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "grader Takt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "Sechzehntelnote" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "Sechzehntelpause" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixth" +msgstr "Sexte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "Virundsechzigstel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "Vierundsechzigstelpause" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "Strich-Wiederholung" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "Solmisation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata" +msgstr "Sonate" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "Sonatenform" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "song texts" +msgstr "Gesangstext" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" +msgstr "Sopran" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Writing music in parallel" -msgstr "Musik parallel notieren" - -#. Documentation/user/staff.itely:1045 (variable) -#. Documentation/user/staff.itely:1060 (variable) -#. Documentation/user/staff.itely:1213 (variable) -msgid "flute" -msgstr "Flöte" - -#. Documentation/user/staff.itely:1164 (variable) -#. Documentation/user/staff.itely:1185 (variable) -msgid "oboe" -msgstr "Oboe" - -#. Documentation/user/staff.itely:1234 (variable) -#. Documentation/user/staff.itely:1250 (context id) -msgid "piccolo" -msgstr "Piccolo" - -#. Documentation/user/staff.itely:1242 (variable) -#. Documentation/user/staff.itely:1251 (context id) -msgid "cbassoon" -msgstr "Ktrfgt" - -#. @node in Documentation/user/staff.itely -#. @section in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @section in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @section in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @section in Documentation/de/user/staff.itely -msgid "Staff notation" -msgstr "Notation auf Systemen" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Displaying staves" -msgstr "Systeme anzeigen lassen" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Instantiating new staves" -msgstr "Neue Notensysteme erstellen" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staff" -msgstr "System" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "Staccato" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "staves" msgstr "Systeme" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Grouping staves" -msgstr "Systeme gruppieren" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "bracket" -msgstr "Klammer" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "grand staff" -msgstr "Akkolade" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Nested staff groups" -msgstr "Verschachtelte Notensysteme" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Modifying single staves" -msgstr "Einzelne Systeme verändern" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Staff symbol" -msgstr "Das Notensystem" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "line" -msgstr "Linie" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "ledger line" -msgstr "Hilfslinie" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Ossia staves" -msgstr "Ossia-Systeme" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "Frenched staff" -msgstr "Verkleinerte Systeme" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Hiding staves" -msgstr "Systeme verstecken" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Writing parts" -msgstr "Orchesterstimmen erstellen" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Metronome marks" -msgstr "Metronomangabe" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome" -msgstr "Metronomangabe" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "Hals" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "stringendo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "Streicher" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "betonter Taktteil" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "Subdominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "Submediante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "Subtonika" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "auf der G-Saite" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "Superdominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "Supertonika" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "symphony" +msgstr "Symphonie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "Synkope" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "syntonisches Komma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "Temperatur" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +msgid "tenor" +msgstr "Tenor" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronomic indication" -msgstr "Metronombezeichnung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "Dezime" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "tempo indication" -msgstr "Tempobezeichnung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "Tenuto" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome mark" -msgstr "Metronombezeichnung" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "third" +msgstr "Terz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second note" +msgstr "Zweiunddreissigstel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "Zweiunddreissigstelpause" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "Bezifferter Bass" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time" +msgstr "Taktart" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "Ton" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "Tonika" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" +msgstr "Transponierende Instrumente" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Instrument names" -msgstr "Instrumentenbezeichnungn" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "Violinschlüssel" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Quoting other voices" -msgstr "Stichnoten" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "Tremolo" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Formatting cue notes" -msgstr "Stichnoten formatieren" - -#. Documentation/user/editorial.itely:326 (comment) -msgid "this is deliberate nonsense; note that the stems remain black" -msgstr "Das ist Unsinn, die Hälsen bleiben schwarz" - -#. @node in Documentation/user/editorial.itely -#. @section in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @section in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @section in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @section in Documentation/de/user/editorial.itely -msgid "Editorial annotations" -msgstr "Anmerkungen" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Inside the staff" -msgstr "Innerhalb des Systems" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Selecting notation font size" -msgstr "Auswahl der Notations-Schriftgröße" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Fingering instructions" -msgstr "Fingersatzanweisungen" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Hidden notes" -msgstr "Unsichtbare Noten" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Coloring objects" -msgstr "Farbige Objekte" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Parentheses" -msgstr "Klammern" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Stems" -msgstr "Hälse" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Outside the staff" -msgstr "Außerhalb des Notensystems" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Balloon help" -msgstr "Erklärungen in Ballonform" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Grid lines" -msgstr "Gitternetzlinien" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Analysis brackets" -msgstr "Analyseklammern" - -#. Documentation/user/text.itely:421 (variable) -msgid "allegro" -msgstr "Allegro" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triad" +msgstr "Dreiklang" -#. @node in Documentation/user/text.itely -#. @section in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @section in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @section in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @section in Documentation/de/user/text.itely -msgid "Text" -msgstr "Text" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "trill" +msgstr "Triller" -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Writing text" -msgstr "Text eingeben" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text scripts" -msgstr "Textarten" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text spanners" -msgstr "Text mit Verbindungslinien" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text marks" -msgstr "Textartige Zeichen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triple meter" +msgstr "Dreiertakt" -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Separate text" -msgstr "Separater Text" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Formatting text" -msgstr "Text formatieren" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text markup introduction" -msgstr "Textbeschriftung (Einleitung)" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Selecting font and font size" -msgstr "Überblick über die wichtigsten Textbeschriftungsbefehle" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text alignment" -msgstr "Textausrichtung" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Graphic notation inside markup" -msgstr "Graphische Notation innerhalb einer Textbeschriftung" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Music notation inside markup" -msgstr "Musikalische Notation innerhalb einer Textbeschriftung" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Multi-page markup" -msgstr "Textbeschriftung über mehrere Seiten" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Fonts" -msgstr "Schriftarten" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Fonts explained" -msgstr "Was sind Schriftarten" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Single entry fonts" -msgstr "Schriftarten für einen Eintrag" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Entire document fonts" -msgstr "Schriftart des gesamten Dokuments" - -#. @node in Documentation/user/specialist.itely -#. @chapter in Documentation/user/specialist.itely -#. @node in Documentation/fr/user/specialist.itely -#. @chapter in Documentation/fr/user/specialist.itely -#. @node in Documentation/es/user/specialist.itely -#. @chapter in Documentation/es/user/specialist.itely -#. @node in Documentation/de/user/specialist.itely -#. @chapter in Documentation/de/user/specialist.itely -msgid "Specialist notation" -msgstr "Spezielle Notation" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tritone" +msgstr "Tritonus" -#. Documentation/user/vocal.itely:512 (comment) -msgid "not recommended: left aligns syllables" -msgstr "nicht empfohlen: Silben links ausrichten" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "Stimmgabel" -#. Documentation/user/vocal.itely:515 (comment) -msgid "wrong: durations needed" -msgstr "Falsch: brache Dauern" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" +msgstr "N-tole" -#. Documentation/user/vocal.itely:518 (comment) -msgid "correct" -msgstr "richtig" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "Doppelschalg" -#. Documentation/user/vocal.itely:667 (context id) -msgid "lala" -msgstr "lala" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "Unisono" -#. Documentation/user/vocal.itely:808 (context id) -msgid "splitpart" -msgstr "StimmeTeilen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "upbeat" +msgstr "Auftakt" -#. Documentation/user/vocal.itely:853 (variable) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "voice" msgstr "Stimme" -#. Documentation/user/vocal.itely:860 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:22 (variable) -msgid "lyr" -msgstr "Text" - -#. Documentation/user/vocal.itely:1059 (context id) -msgid "tune" -msgstr "Melodie" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "Volta-Klammer" -#. Documentation/user/vocal.itely:1101 (context id) -msgid "lahlah" -msgstr "Lalala" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "unbetonter Taktteil" -#. Documentation/user/vocal.itely:1284 (comment) -msgid "moves the column off the left margin;" -msgstr "Spalte vom linken Rand wegbewegen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole rest" +msgstr "ganze Pause" -#. Documentation/user/vocal.itely:1285 (comment) -msgid "can be removed if space on the page is tight" -msgstr "Kann entfernt werden, wenn wenig Platz auf der Seite ist" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole tone" +msgstr "Ganzton" -#. Documentation/user/vocal.itely:1293 (comment) -#. Documentation/user/vocal.itely:1311 (comment) -msgid "adds vertical spacing between verses" -msgstr "Vertikaler Abstand zwischen Strophen" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "Holzblasinstrumente" -#. Documentation/user/vocal.itely:1301 (comment) -msgid "adds horizontal spacing between columns;" -msgstr "Horizontalen Abstand zwischen Spalten hinzufügen;" - -#. Documentation/user/vocal.itely:1302 (comment) -msgid "if they are still too close, add more \\\" \\\" pairs" -msgstr "Wenn sie immer noch zu eng sind, mehr \\\" \\\"-Paare hinzufügen" - -#. Documentation/user/vocal.itely:1303 (comment) -msgid "until the result looks good" -msgstr "bis das Resultat gut aussieht" - -#. Documentation/user/vocal.itely:1319 (comment) -msgid "gives some extra space on the right margin;" -msgstr "zusätzlichen Platz für den rechten Rand" - -#. Documentation/user/vocal.itely:1320 (comment) -msgid "can be removed if page space is tight" -msgstr "kann entfernt werden, wenn wenig Platz auf der Seite ist" - -#. @node in Documentation/user/vocal.itely -#. @section in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @section in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @section in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @section in Documentation/de/user/vocal.itely -msgid "Vocal music" -msgstr "Notation von Gesang" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Common notation for vocal music" -msgstr "Übliche Notation für Vokalmusik" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "References for vocal music and lyrics" -msgstr "Referenz für Vokalmusik und Gesangstext" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Opera" -msgstr "Oper" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Song books" -msgstr "Liederhefte" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spoken music" -msgstr "Gesprochene Musik" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Chants" -msgstr "Hymnen" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Ancient vocal music" -msgstr "Alte Vokalmusik" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Entering lyrics" -msgstr "Eingabe von Text" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics explained" -msgstr "Was ist Gesangtext" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Working with lyrics and variables" -msgstr "Mit Gesangtexten und Bezeichnern arbeiten" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Automatic syllable durations" -msgstr "Automatische Silbendauer" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Manual syllable durations" -msgstr "Manuelle Silbendauer" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple syllables to one note" -msgstr "Mehrere Silben zu einer Note" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "Dauerbezeichnungen für Noten und Pausen" -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple notes to one syllable" -msgstr "Mehrere Noten zu einer Silbe" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Skipping notes" -msgstr "Noten überspringen" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Extenders and hyphens" -msgstr "Fülllinien und Trennstriche" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics and repeats" -msgstr "Gesangtext und Wiederholungen" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Specific uses of lyrics" -msgstr "Besonderheiten der Gesangtextnotation" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Divisi lyrics" -msgstr "Getrennte Texte" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics independent of notes" -msgstr "Text unabhängig von den Noten" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spacing out syllables" -msgstr "Silben platzieren" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Centering lyrics between staves" -msgstr "Gesangtext zwischen Systemen zentrieren" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Stanzas" -msgstr "Strophen" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding stanza numbers" -msgstr "Strophennummern hinzufügen" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding dynamics marks to stanzas" -msgstr "Lautstärkebezeichnung zu Strophen hinzufügen" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding singers' names to stanzas" -msgstr "Sängernamen zu Strophen hinzufügen" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Stanzas with different rhythms" -msgstr "Strophen mit unterschiedlichem Rhythmus" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -msgid "Ignoring melismata" -msgstr "Melismen ignorieren" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Switching to an alternative melody" -msgstr "Zu einer alternativen Melodie umschalten" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end" -msgstr "Die Strophen am Ende ausdrucken" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end in multiple columns" -msgstr "Die Strophen am Ende in mehreren Spalten drucken" - -#. Documentation/user/keyboards.itely:187 (comment) -msgid "keep staff alive" -msgstr "System aufrecht erhalten" - -#. Documentation/user/keyboards.itely:275 (context id) -msgid "melOne" -msgstr "melEins" - -#. Documentation/user/keyboards.itely:344 (context id) -#. Documentation/user/fretted-strings.itely:244 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:17 (variable) -#. input/lsr/jazz-combo-template.ly:205 (context id) -#. input/lsr/jazz-combo-template.ly:214 (context id) -msgid "two" -msgstr "zwei" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" +msgstr "" -#. Documentation/user/keyboards.itely:398 (comment) -msgid "stems may overlap the other staff" -msgstr "Hals kann das andere System überschneiden" - -#. Documentation/user/keyboards.itely:400 (comment) -msgid "extend the stems to reach other other staff" -msgstr "Hälse verlängern um anderes System zu erreichen" - -#. Documentation/user/keyboards.itely:402 (comment) -msgid "do not print extra flags" -msgstr "keine doppelten Fähnchen" - -#. Documentation/user/keyboards.itely:404 (comment) -msgid "prevent beaming as needed" -msgstr "Balken verhindern" - -#. @node in Documentation/user/keyboards.itely -#. @section in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @section in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @section in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @section in Documentation/de/user/keyboards.itely -msgid "Keyboard and other multi-staff instruments" -msgstr "Tasteninstrumente und andere Instrumente mit mehreren Systemen" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Common notation for keyboards" -msgstr "Übliche Notation für Tasteninstrumente" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for keyboards" -msgstr "Referenz für Tasteninstrumente" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff manually" -msgstr "Notensysteme manuell verändern" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff automatically" -msgstr "Automatischer Systemwechsel" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Staff-change lines" -msgstr "Stimmführungslinien" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Cross-staff stems" -msgstr "Hälse über beide Systeme" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Piano" -msgstr "Klavier" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" +msgstr "" -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Piano pedals" -msgstr "Klavierpedal" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Accordion" -msgstr "Akkordion" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Discant symbols" -msgstr "Diskant-Symbole" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Harp" -msgstr "Harfe" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for harps" -msgstr "Referenzen für Harfe" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Harp pedals" -msgstr "Harfenpedal" - -#. @node in Documentation/user/unfretted-strings.itely -#. @section in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @section in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @section in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @section in Documentation/de/user/unfretted-strings.itely -msgid "Unfretted string instruments" -msgstr "Bundlose Saiteninstrumente" - -#. @node in Documentation/user/unfretted-strings.itely -#. @subsection in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @subsection in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @subsection in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @subsection in Documentation/de/user/unfretted-strings.itely -msgid "Common notation for unfretted strings" -msgstr "Übliche Notation für nichtgebundene Saiteninstrumente" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "References for unfretted strings" -msgstr "Hinweise für ungebundene Saiteninstrumente" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Bowing indications" -msgstr "Bezeichnung des Bogens" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Harmonics" -msgstr "Flageolett" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" +msgstr "" -#. @rglos in Documentation/user/unfretted-strings.itely -#. @rglos in Documentation/es/user/unfretted-strings.itely -#. @rglos in Documentation/de/user/unfretted-strings.itely -msgid "harmonics" -msgstr "Flageolett" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" +msgstr "" -#. @node in Documentation/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Snap (Bartok) pizzicato" -msgstr "Bartók-Pizzicato" - -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -msgid "Snap (Bartók) pizzicato" -msgstr "Bartók-Pizzicato" - -#. Documentation/user/fretted-strings.itely:240 (variable) -msgid "melodia" -msgstr "Melodie" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" +msgstr "" -#. Documentation/user/fretted-strings.itely:245 (context id) -msgid "shared" -msgstr "gemeinsam" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "" -#. Documentation/user/fretted-strings.itely:246 (context id) -msgid "solo" -msgstr "solo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "" -#. Documentation/user/fretted-strings.itely:323 (variable) -msgid "mynotes" -msgstr "meineNoten" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "" -#. Documentation/user/fretted-strings.itely:450 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:27 (comment) -msgid "A chord for ukelele" -msgstr "Akkord für Ukulele" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "" -#. Documentation/user/fretted-strings.itely:782 (variable) -#. Documentation/user/fretted-strings.itely:805 (variable) -#. Documentation/user/fretted-strings.itely:834 (variable) -#. Documentation/user/fretted-strings.itely:865 (variable) -#. Documentation/user/fretted-strings.itely:889 (variable) -#. Documentation/user/fretted-strings.itely:937 (variable) -msgid "mychords" -msgstr "meineAkkorde" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" +msgstr "" -#. Documentation/user/fretted-strings.itely:809 (variable) -msgid "mychordlist" -msgstr "meineAkkordliste" - -#. Documentation/user/fretted-strings.itely:924 (comment) -msgid "add a new chord shape" -msgstr "Neues Akkordmuster hinzufügen" - -#. Documentation/user/fretted-strings.itely:928 (comment) -msgid "add some new chords based on the power chord shape" -msgstr "neue Akkorde basierend auf dem power-chord-Muster hinzufügen" - -#. @node in Documentation/user/fretted-strings.itely -#. @section in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @section in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @section in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @section in Documentation/de/user/fretted-strings.itely -msgid "Fretted string instruments" -msgstr "Saiteninstrumente mit Bünden" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Common notation for fretted strings" -msgstr "Übliche Notation für gebundene Saiteninstrumente" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "References for fretted strings" -msgstr "Referenz für gebundene Saiteninstrumente" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "String number indications" -msgstr "Seitennummerbezeichnung" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Default tablatures" -msgstr "Standardtabulaturen" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Custom tablatures" -msgstr "Angepasste Tabulaturen" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Fret diagram markups" -msgstr "Bund-Diagramm-Beschriftung" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Predefined fret diagrams" -msgstr "Vordefinierte Bund-Diagramme" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "" -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Automatic fret diagrams" -msgstr "Automatische Bund-Diagramme" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Right-hand fingerings" -msgstr "Fingersatz der rechten Hand" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Guitar" -msgstr "Gitarre" +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "Benutzte Literatur" -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating position and barring" -msgstr "Position und Barret anzeigen" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating harmonics and dampened notes" -msgstr "Flageolett und gedämpfte Noten" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Banjo" -msgstr "Banjo" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Banjo tablatures" -msgstr "Banjo-Tabulaturen" - -#. Documentation/user/percussion.itely:385 (comment) -msgid "These lines define the position of the woodblocks in the stave;" -msgstr "Diese Zeilen definieren die Position der Holzblöcke auf dem System" - -#. Documentation/user/percussion.itely:386 (comment) -msgid "if you like, you can change it or you can use special note heads" -msgstr "" -"Wenn Sie wollen, können Sie das ändern oder besondere Notenköpfe benutzen" - -#. Documentation/user/percussion.itely:387 (comment) -msgid "for the woodblocks." -msgstr "für die Holzblöcke" - -#. Documentation/user/percussion.itely:391 (variable) -msgid "woodstaff" -msgstr "System für Holz" - -#. Documentation/user/percussion.itely:392 (comment) -msgid "This defines a staff with only two lines." -msgstr "Definiert ein System mit zwei Linien." - -#. Documentation/user/percussion.itely:393 (comment) -msgid "It also defines the positions of the two lines." -msgstr "Auch die Position der zwei Linien wird festgelegt" - -#. Documentation/user/percussion.itely:396 (comment) -msgid "This is neccessary; if not entered, the barline would be too short!" -msgstr "Das ist notwendig. Wenn nicht angegeben, wird die Taktlinie zu kurz!" - -#. Documentation/user/percussion.itely:403 (comment) -msgid "with this you load your new drum style table" -msgstr "jetzt neue Trommelstil-Tabelle laden" - -#. Documentation/user/percussion.itely:425 (variable) -msgid "tambustaff" -msgstr "Tambu-System" - -#. Documentation/user/percussion.itely:439 (comment) -msgid "the trick with the scaled duration and the shorter rest" -msgstr "Trick mit der skalierten Dauer und der kürzeren Pause" - -#. Documentation/user/percussion.itely:440 (comment) -msgid "is neccessary for the correct ending of the trill-span!" -msgstr "ist·nötig,damit·die·Trillerspannweite·richtig·endet" - -#. Documentation/user/percussion.itely:451 (variable) -msgid "tamtamstaff" -msgstr "tamtam-System" - -#. Documentation/user/percussion.itely:473 (variable) -msgid "bellstaff" -msgstr "Glocken-System" - -#. Documentation/user/percussion.itely:504 (variable) -msgid "drumsA" -msgstr "TrommelA" - -#. Documentation/user/percussion.itely:519 (variable) -msgid "drumsB" -msgstr "TrommelB" - -#. @node in Documentation/user/percussion.itely -#. @section in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @section in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @section in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @section in Documentation/de/user/percussion.itely -msgid "Percussion" -msgstr "Schlagzeug" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond grammar" +msgstr "LilyPond-Grammatik" -#. @node in Documentation/user/percussion.itely -#. @subsection in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @subsection in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @subsection in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @subsection in Documentation/de/user/percussion.itely -msgid "Common notation for percussion" -msgstr "Übliche Notation für Schlagzeug" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "References for percussion" -msgstr "Referenz für Schlagzeug" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Basic percussion notation" -msgstr "Grundlagen der Schlagzeugnotation" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Drum rolls" -msgstr "Trommelwirbel" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Pitched percussion" -msgstr "Schlagzeug mit Tonhöhe" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Percussion staves" -msgstr "Schlagzeugsysteme" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Custom percussion staves" -msgstr "Eigene Schlagzeugsysteme" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Ghost notes" -msgstr "Geisternoten" - -#. @node in Documentation/user/wind.itely -#. @section in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @section in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @section in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @section in Documentation/de/user/wind.itely -msgid "Wind instruments" -msgstr "Blasinstrumente" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Common notation for wind instruments" -msgstr "Übliche Notation für Bläser" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "References for wind instruments" -msgstr "Referenz für Blasinstrumente" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Bagpipes" -msgstr "Dudelsack" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe definitions" -msgstr "Dudelsack-Defintionen" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe example" -msgstr "Dudelsack-Beispiele" - -#. Documentation/user/chords.itely:669 (variable) -msgid "myChords" -msgstr "meineAkkorde" - -#. Documentation/user/chords.itely:999 (comment) -#. Documentation/user/chords.itely:1020 (comment) -msgid "Put notes on same Staff as figures" -msgstr "Noten auf dem gleichen System wie die Symbole" - -#. Documentation/user/chords.itely:1083 (comment) -msgid "The extenders are correct here, with the same rhythm as the bass" -msgstr "Linien stimmen hier, mit dem gleichen Rhythmus wie im Bass" - -#. Documentation/user/chords.itely:1095 (comment) -msgid "The extenders are incorrect here, even though the timing is the same" -msgstr "Linien stimmen nicht, obwohl der Rhythmus der gleiche ist" - -#. @node in Documentation/user/chords.itely -#. @section in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @section in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @section in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @section in Documentation/de/user/chords.itely -msgid "Chord notation" -msgstr "Notation von Akkorden" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Chord mode" -msgstr "Akkord-Modus" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Chord mode overview" -msgstr "Überblick über den Akkord-Modus" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Common chords" -msgstr "Übliche Akkorde" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Extended and altered chords" -msgstr "Erweiterte und modifizierte Akkorde" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Displaying chords" -msgstr "Akkorde anzeigen" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Printing chord names" -msgstr "Akkordbezeichnungen drucken" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Customizing chord names" -msgstr "Akkordbezeichnungen anpassen" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Figured bass" -msgstr "Generalbass" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Introduction to figured bass" -msgstr "Grundlagen des Bezifferten Basses" - -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/chords.itely -msgid "figured bass" -msgstr "Generalbass" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Entering figured bass" -msgstr "Eingabe des Generalbass'" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Displaying figured bass" -msgstr "Generalbass anzeigen" - -#. Documentation/user/ancient.itely:357 (context id) -msgid "discantus" -msgstr "Discantus" - -#. Documentation/user/ancient.itely:823 (variable) -msgid "ficta" -msgstr "ficta" - -#. Documentation/user/ancient.itely:976 (context id) -msgid "cantus" -msgstr "cantus" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "Index der LilyPond-Befehle" -#. Documentation/user/ancient.itely:2399 (variable) -#. Documentation/user/ancient.itely:2434 (variable) -#. Documentation/user/ancient.itely:2502 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:37 (variable) -msgid "chant" -msgstr "Hymnus" +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "Musikalische Notation" -#. Documentation/user/ancient.itely:2405 (variable) -#. Documentation/user/ancient.itely:2445 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:44 (variable) -msgid "verba" -msgstr "verba" +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +msgid "Specialist notation" +msgstr "Spezielle Notation" -#. Documentation/user/ancient.itely:2487 (variable) -msgid "spiritus" -msgstr "spiritus" - -#. Documentation/user/ancient.itely:2495 (variable) -msgid "spirLyr" -msgstr "spirText" - -#. @node in Documentation/user/ancient.itely -#. @section in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @section in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @section in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @section in Documentation/de/user/ancient.itely -msgid "Ancient notation" -msgstr "Notation von alter Musik" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Overview of the supported styles" -msgstr "Überblick über die unterstützten Stile" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Ancient notation---common features" -msgstr "Alte Notation -- Allgemeines" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Pre-defined contexts" -msgstr "Vordefinierte Umgebungen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ligatures" -msgstr "Ligaturen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Custodes" -msgstr "Custodes" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Figured bass support" -msgstr "Unterstützung für Generalbass" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Typesetting mensural music" -msgstr "Mesurale Musik setzen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural contexts" -msgstr "Mensural-Kontexte" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural clefs" -msgstr "Mensurale Schlüssel" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural time signatures" -msgstr "Mensurale Taktartenbezeichnungen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural note heads" -msgstr "Mensurale Notenköpfe" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural flags" -msgstr "Mensurale Fähnchen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural rests" -msgstr "Mensurale Pausen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural accidentals and key signatures" -msgstr "Mensurale Versetzungszeichen und Tonartbezeichnung" - -#. @node in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -msgid "Annotational accidentals (musica ficta)" -msgstr "Vorgeschlagene Versetzungszeichen (musica ficta)" - -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Annotational accidentals (@emph{musica ficta})" -msgstr "Vorgeschlagene Versetzungszeichen (@emph{musica ficta})" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "White mensural ligatures" -msgstr "Weiße Mensuralligaturen" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Typesetting Gregorian chant" -msgstr "Gregorianischen Choral setzen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian chant contexts" -msgstr "Gregorianische Gesangs-Kontexte" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian clefs" -msgstr "Gregorianische Schlüssel" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian accidentals and key signatures" -msgstr "Gregorianische Versetzungszeichen und Tonartbezeichnung" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Divisiones" -msgstr "Divisiones" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian articulation signs" -msgstr "Artikulationszeichen des Gregorianischen Chorals" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Augmentum dots (@emph{morae})" -msgstr "Augmentationspunkte (@emph{morae})" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian square neume ligatures" -msgstr "Ligaturen der gregorianischen Quadratnotation" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Working with ancient music---scenarios and solutions" -msgstr "Musiksatz Alter Musik in der Praxis -- Szenarien und Lösungen" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Incipits" -msgstr "Incipite" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensurstriche layout" -msgstr "Mensurstriche" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Transcribing Gregorian chant" -msgstr "Gregorianischen Choral transkribieren" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient and modern from one source" -msgstr "Alte und moderne Edition aus einer Quelldatei" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Editorial markings" -msgstr "Herausgeberische Anmerkungen" - -#. @node in Documentation/user/world.itely -#. @section in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @section in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @section in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @section in Documentation/de/user/world.itely -msgid "World music" -msgstr "Weltmusik" - -#. @node in Documentation/user/world.itely -#. @subsection in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @subsection in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @subsection in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @subsection in Documentation/de/user/world.itely -msgid "Arabic music" -msgstr "Arabische Musik" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "References for Arabic music" -msgstr "Referenz für arabische Musik" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic note names" -msgstr "Arabische Notenbezeichnungen" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic key signatures" -msgstr "Arabische Tonarten" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic time signatures" -msgstr "Arabische Taktarten" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic music example" -msgstr "Arabische Notenbeispiele" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Further reading" -msgstr "Weitere Literatur" - -#. Documentation/user/input.itely:525 (comment) +#. Documentation/notation/input.itely:673 (comment) msgid "not printed" msgstr "nicht gedruckt" -#. Documentation/user/input.itely:947 (variable) +#. Documentation/notation/input.itely:1137 (variable) msgid "allLyrics" msgstr "alleText" -#. @node in Documentation/user/input.itely -#. @chapter in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @chapter in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @chapter in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @chapter in Documentation/de/user/input.itely +#. Documentation/notation/input.itely:1223 (variable) +#. Documentation/notation/input.itely:1242 (variable) +#. Documentation/notation/input.itely:1279 (variable) +#. Documentation/notation/input.itely:1294 (variable) +#. Documentation/notation/spacing.itely:1555 (variable) +#. Documentation/notation/spacing.itely:1609 (variable) +#. Documentation/notation/spacing.itely:1634 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:53 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "Noten" + +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely msgid "General input and output" msgstr "Allgemeine Eingabe und Ausgabe" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Input structure" msgstr "Eingabestruktur" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Structure of a score" msgstr "Struktur einer Partitur" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Multiple scores in a book" msgstr "Mehrere Partituren in einem Buch" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Multiple output files from one input file" +msgstr "Mehrere Silben zu einer Note" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Output file names" +msgstr "Quelldateien" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "File structure" msgstr "Die Dateistruktur" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Titles and headers" msgstr "Titel" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Creating titles" msgstr "Titel erstellen" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Custom titles" -msgstr "Eigene Titel" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#, fuzzy +msgid "Custom headers footers and titles" +msgstr "Dauerbezeichnungen für Noten und Pausen" + +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Reference to page numbers" msgstr "Verweis auf die Seitenzahlen" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Table of contents" msgstr "Inhaltsverzeichnis" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Working with input files" msgstr "Arbeiten an Eingabe-Dateien" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Including LilyPond files" msgstr "LilyPond-Dateien einfügen" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Different editions from one source" msgstr "Verschiedene Editionen aus einer Quelldatei" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Using variables" msgstr "Variablen benutzen" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Using tags" msgstr "Marken benutzen" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Text encoding" msgstr "Zeichenkodierung" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Displaying LilyPond notation" msgstr "LilyPond-Notation anzeigen" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Controlling output" msgstr "Ausgabe kontrollieren" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Extracting fragments of music" msgstr "Notationsfragmente extrahieren" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Skipping corrected music" msgstr "Korrigierte Musik überspringen" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "Alternative Ausgabeformate" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "Die Notationsschriftart verändern" + +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "MIDI output" msgstr "MIDI-Ausgabe" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Creating MIDI files" msgstr "MIDI-Dateien erstellen" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" +msgstr "Instrumentenbezeichnungn" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "MIDI block" msgstr "Der MIDI-Block" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "What goes into the MIDI output?" msgstr "Was geht in die MIDI-Ausgabe" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Supported in MIDI" msgstr "In MIDI unterstützt" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Unsupported in MIDI" msgstr "In MIDI nicht unterstützt" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Repeats in MIDI" msgstr "Wiederholungen im MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Controlling MIDI dynamics" msgstr "MIDI-Lautstärke kontrollieren" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Dynamic marks" msgstr "Dynamik-Zeichen" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Overall MIDI volume" msgstr "MIDI-Lautstärke" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Equalizing different instruments (i)" msgstr "Verschiedene Instrumente angleichen (i)" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Equalizing different instruments (ii)" msgstr "Verschidene Instrumente angleichen (ii)" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Percussion in MIDI" msgstr "Schlagzeug in MIDI" -#. Documentation/user/spacing.itely:864 (comment) -msgid "this does nothing" -msgstr "Das macht gar nichts" +#. Documentation/notation/spacing.itely:2045 (comment) +msgid "The very low note here needs more room than 'space can" +msgstr "" + +#. Documentation/notation/spacing.itely:2046 (comment) +msgid "provide, so the distance between this staff and the next is" +msgstr "" + +#. Documentation/notation/spacing.itely:2047 (comment) +msgid "determined by 'padding." +msgstr "" + +#. Documentation/notation/spacing.itely:2050 (comment) +msgid "Here, 'space provides enough room, and there is no need to" +msgstr "" + +#. Documentation/notation/spacing.itely:2051 (comment) +msgid "compress the space (towards 'minimum-distance) to make room" +msgstr "" + +#. Documentation/notation/spacing.itely:2052 (comment) +msgid "for anything else on the page, so the distance between this" +msgstr "" -#. Documentation/user/spacing.itely:865 (comment) -msgid "a break here would work" -msgstr "ein Umbruch hier würde funktionieren" +#. Documentation/notation/spacing.itely:2053 (comment) +#, fuzzy +msgid "staff and the next is determined by 'space." +msgstr "" +"wird der Abstand zwischen dem System und dem nächsten durch Verschiebung " +"(padding) entschieden." -#. Documentation/user/spacing.itely:866 (comment) -msgid "as does this break" -msgstr "wie dieser Umbruch" +#. Documentation/notation/spacing.itely:2056 (comment) +#, fuzzy +msgid "By setting 'padding to a negative value, staves can be made to" +msgstr "" +"Indem man die Verschiebung auf einen negativen Wert setzt, können Systeme " +"zusammengeklappt werden." -#. Documentation/user/spacing.itely:878 (comment) -msgid "now the break is allowed" -msgstr "jetzt ist der Umbruch erlaubt" +#. Documentation/notation/spacing.itely:2057 (comment) +msgid "collide. The lowest acceptable value for 'space is 0." +msgstr "" -#. Documentation/user/spacing.itely:1757 (comment) +#. Documentation/notation/spacing.itely:2489 (comment) msgid "this time the text will be closer to the staff" msgstr "jetzt ist der Text näher am System" -#. Documentation/user/spacing.itely:1759 (comment) +#. Documentation/notation/spacing.itely:2491 (comment) msgid "by setting outside-staff-priority to a non-number," msgstr "indem outside-staff-priority auf Nicht-Zahl gesetzt wird," -#. Documentation/user/spacing.itely:1760 (comment) +#. Documentation/notation/spacing.itely:2492 (comment) msgid "we disable the automatic collision avoidance" msgstr " werden vertikale Zusammenstöße vermieden" -#. Documentation/user/spacing.itely:1763 (comment) +#. Documentation/notation/spacing.itely:2495 (comment) msgid "now they will collide" msgstr "jetzt kollidieren sie" -#. Documentation/user/spacing.itely:1789 (comment) +#. Documentation/notation/spacing.itely:2521 (comment) msgid "the markup is too close to the following note" msgstr "Beschriftung zu nah an der folgenden Note" -#. Documentation/user/spacing.itely:1793 (comment) +#. Documentation/notation/spacing.itely:2525 (comment) msgid "setting outside-staff-horizontal-padding fixes this" msgstr "Setzen von outside-staff-horizontal-padding hilft" -#. @node in Documentation/user/spacing.itely -#. @chapter in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @chapter in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @chapter in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @chapter in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely msgid "Spacing issues" msgstr "Abstände" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Paper and pages" -msgstr "Papier und Seiten" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Paper size" -msgstr "Papierformat" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Page formatting" -msgstr "Seitenformatierung" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Vertical dimensions" -msgstr "Vertikale Dimensionen" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Horizontal dimensions" -msgstr "Horizontale Dimensionen" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Other layout variables" -msgstr "Weitere Layout-Variablen" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +#, fuzzy +msgid "Page layout" +msgstr "Partiturlayout" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Music layout" -msgstr "Notenlayout" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Setting the staff size" +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "The @code{\\\\paper} block" +msgstr "Der @code{\\\\override}-Befehl" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Setting paper size" msgstr "Die Notensystemgröße einstellen" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Automatic scaling to paper size" +msgstr "Automatische Notensystemwechsel" + +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "Fixed vertical spacing \\\\paper variables" +msgstr "Vertikaler Abstand zwischen Strophen" + +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Fixed vertical spacing @code{\\\\paper} variables" +msgstr "Vertikaler Abstand zwischen Strophen" + +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "Flexible vertical spacing \\\\paper variables" +msgstr "Vertikaler Abstand zwischen Strophen" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "Horizontal spacing \\\\paper variables" +msgstr "Überblick über horizontale Abstände" + +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Horizontal spacing @code{\\\\paper} variables" +msgstr "Überblick über horizontale Abstände" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "Other \\\\paper variables" +msgstr "Weitere Layout-Variablen" + +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Other @code{\\\\paper} variables" +msgstr "Nützliche @command{make}-Variablen" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "\\\\paper variables for page breaking" +msgstr "Optimale Seitenumbrüche" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Miscellaneous @code{\\\\paper} variables" +msgstr "Nützliche @command{make}-Variablen" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Score layout" msgstr "Partiturlayout" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "The \\\\layout block" +msgstr "Weitere Layout-Variablen" + +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "The @code{\\\\layout} block" +msgstr "Der @code{\\\\tweak}-Befehl" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" +msgstr "Die Notensystemgröße einstellen" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Breaks" msgstr "Umbrüche" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Line breaking" msgstr "Zeilenumbrüche" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Page breaking" msgstr "Seitenumbrüche" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Optimal page breaking" msgstr "Optimale Seitenumbrüche" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Optimal page turning" msgstr "Optimale Umbrüche zum Blättern" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Minimal page breaking" msgstr "Minimale Seitenumbrüche" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Explicit breaks" msgstr "Ausdrückliche Umbrüche" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Using an extra voice for breaks" msgstr "Eine zusätzliche Stimme für Umbrüche benutzen" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Vertical spacing" msgstr "Vertikale Abstände" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing inside a system" -msgstr "Vertikale Abstände innerhalb eines Systems" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing between systems" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Flexible vertical spacing within systems" msgstr "Vertikale Abstände zwischen Systemen" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Within-system spacing properties" +msgstr "Eignschaften verändern" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Spacing of ungrouped staves" +msgstr "Abstand von Nicht-Notensystem-Zeilen" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Spacing of grouped staves" +msgstr "Abstand zwischen Notensystemen" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "Abstand von Nicht-Notensystem-Zeilen" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Explicit staff and system positioning" msgstr "Explizite Positionierung von Systemen" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Two-pass vertical spacing" -msgstr "Vertikale Abstände mit zwei Durchgängen" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Vertical collision avoidance" msgstr "Vermeidung von vertikalen Zusammenstößen" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Horizontal spacing" msgstr "Horizontale Abstände" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Horizontal spacing overview" msgstr "Überblick über horizontale Abstände" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "New spacing area" msgstr "Eine neuer Bereich mit anderen Abständen" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Changing horizontal spacing" msgstr "Horizontale Abstände verändern" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Line length" msgstr "Zeilenlänge" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Proportional notation" msgstr "Proportionale Notation" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Fitting music onto fewer pages" msgstr "Die Musik auf weniger Seiten zwingen" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Displaying spacing" msgstr "Abstände anzeigen lassen" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Changing spacing" msgstr "Abstände verändern" -#. Documentation/user/changing-defaults.itely:1990 (comment) +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" +msgstr "NotenA" + +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" +msgstr "NotenB" + +#. Documentation/notation/changing-defaults.itely:451 (variable) +msgid "keepVoicesAlive" +msgstr "lassStimmeLeben" + +#. Documentation/notation/changing-defaults.itely:453 (comment) +msgid "Keep Voice \\\"A\\\" alive for 5 bars" +msgstr "Lass die Stimme \\\"A\\\" für 5 Takte leben" + +#. Documentation/notation/changing-defaults.itely:454 (comment) +msgid "Keep Voice \\\"B\\\" alive for 5 bars" +msgstr "Lass die Stimme \\\"B\\\" für 5 Takte leben" + +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) +msgid "accompaniment" +msgstr "Begleitung" + +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:74 (variable) +msgid "words" +msgstr "Worte" + +#. Documentation/notation/changing-defaults.itely:497 (comment) +msgid "Keep Voice \\\"melody\\\" alive for 4 bars" +msgstr "Lass die Stimme \\\"melodie\\\" für 4 Takte leben" + +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) +msgid "skip a bar" +msgstr "einen Takt überspringen" + +#. Documentation/notation/changing-defaults.itely:2017 (comment) +#, fuzzy +msgid "default space between staves" +msgstr "Abstand zwischen Notensystemen" + +#. Documentation/notation/changing-defaults.itely:2023 (comment) +#, fuzzy +msgid "reduced space between staves" +msgstr "Abstand zwischen Notensystemen" + +#. Documentation/notation/changing-defaults.itely:2025 (comment) +msgid "this is the nested declaration" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2480 (comment) msgid "increase the length of the tie" msgstr "Länge des Bindebogens vergrößern" -#. Documentation/user/changing-defaults.itely:1999 (comment) +#. Documentation/notation/changing-defaults.itely:2489 (comment) msgid "increase the length of the rest bar" msgstr "Länge des Pausentaktes vergrößern" -#. Documentation/user/changing-defaults.itely:2007 (comment) +#. Documentation/notation/changing-defaults.itely:2497 (comment) msgid "increase the length of the hairpin" msgstr "Länge der Crescendo-Klammer vergrößern" -#. Documentation/user/changing-defaults.itely:2035 (comment) +#. Documentation/notation/changing-defaults.itely:2525 (comment) msgid "default" msgstr "Standard" -#. Documentation/user/changing-defaults.itely:2038 (comment) -#. Documentation/user/changing-defaults.itely:2051 (comment) +#. Documentation/notation/changing-defaults.itely:2528 (comment) +#. Documentation/notation/changing-defaults.itely:2541 (comment) msgid "not effective alone" msgstr "allein keine Wirkung" -#. Documentation/user/changing-defaults.itely:2042 (comment) -#. Documentation/user/changing-defaults.itely:2055 (comment) +#. Documentation/notation/changing-defaults.itely:2532 (comment) +#. Documentation/notation/changing-defaults.itely:2545 (comment) msgid "effective only when both overrides are present" msgstr "gilt nur, wenn beide \"override\" vorhanden sind" -#. Documentation/user/changing-defaults.itely:2430 (comment) +#. Documentation/notation/changing-defaults.itely:2922 (comment) msgid "Remove bar line at the end of the current line" msgstr "Taktlinie am Ende der Zeile entfernen" -#. Documentation/user/changing-defaults.itely:2476 (comment) +#. Documentation/notation/changing-defaults.itely:2968 (comment) msgid "Try to remove all key signatures" msgstr "Versuche alle Tonarten zu entfernen" -#. Documentation/user/changing-defaults.itely:2896 (comment) +#. Documentation/notation/changing-defaults.itely:3392 (comment) msgid "move horizontally left" msgstr "horizontal nach links verschieben" -#. Documentation/user/changing-defaults.itely:2898 (comment) +#. Documentation/notation/changing-defaults.itely:3394 (comment) msgid "move vertically up" msgstr "vertikal hochschieben" -#. Documentation/user/changing-defaults.itely:2899 (comment) +#. Documentation/notation/changing-defaults.itely:3395 (comment) msgid "third finger" msgstr "dritter Finger" -#. Documentation/user/changing-defaults.itely:2948 (comment) -#. Documentation/user/changing-defaults.itely:2980 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:39 (comment) -msgid "the RehearsalMark will be centered above the Clef" +#. Documentation/notation/changing-defaults.itely:3443 (comment) +#. Documentation/notation/changing-defaults.itely:3482 (comment) +#, fuzzy +msgid "The rehearsal mark will be centered above the Clef" msgstr "RehearsalMark zentrieren über dem Schlüssel" -#. Documentation/user/changing-defaults.itely:2954 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:46 (comment) -msgid "the RehearsalMark will be centered above the TimeSignature" +#. Documentation/notation/changing-defaults.itely:3449 (comment) +#, fuzzy +msgid "The rehearsal mark will be centered above the Time Signature" msgstr "RehearsalMark zentrieren über der Taktart (TimeSignature)" -#. Documentation/user/changing-defaults.itely:2974 (comment) -msgid "the RehearsalMark will be centered above the Key Signature" -msgstr "RehearsalMark wird über der Tonart (KeySignature) zentriert" +#. Documentation/notation/changing-defaults.itely:3456 (comment) +#, fuzzy +msgid "The rehearsal mark will be centered above the Breath Mark" +msgstr "RehearsalMark zentrieren über der Tonart (KeySignature)" + +#. Documentation/notation/changing-defaults.itely:3476 (comment) +#, fuzzy +msgid "The rehearsal mark will be centered above the Key Signature" +msgstr "RehearsalMark zentrieren über der Tonart (KeySignature)" + +#. Documentation/notation/changing-defaults.itely:3489 (comment) +#, fuzzy +msgid "The rehearsal mark will be centered above the Bar Line" +msgstr "RehearsalMark zentrieren über dem Schlüssel" -#. Documentation/user/changing-defaults.itely:2994 (comment) -msgid "The RehearsalMark will be centered above the KeySignature" +#. Documentation/notation/changing-defaults.itely:3504 (comment) +#, fuzzy +msgid "The RehearsalMark will be centered above the Key Signature" msgstr "RehearsalMark zentrieren über der Tonart (KeySignature)" -#. Documentation/user/changing-defaults.itely:3001 (comment) -#. Documentation/user/changing-defaults.itely:3017 (comment) -#. Documentation/user/changing-defaults.itely:3024 (comment) +#. Documentation/notation/changing-defaults.itely:3511 (comment) +#. Documentation/notation/changing-defaults.itely:3527 (comment) +#. Documentation/notation/changing-defaults.itely:3534 (comment) +#, fuzzy msgid "" -"The RehearsalMark will be aligned with the left edge of the KeySignature" +"The RehearsalMark will be aligned with the left edge of the Key Signature" msgstr "RehearsalMark mit der linken Ecke von KeySignature ausrichten" -#. Documentation/user/changing-defaults.itely:3006 (comment) +#. Documentation/notation/changing-defaults.itely:3516 (comment) +#, fuzzy msgid "" -"The RehearsalMark will be aligned with the right edge of the KeySignature" +"The RehearsalMark will be aligned with the right edge of the Key Signature" msgstr "RehearsalMark mit der rechten Ecke von KeySignature ausrichten" -#. Documentation/user/changing-defaults.itely:3018 (comment) +#. Documentation/notation/changing-defaults.itely:3528 (comment) msgid "and then shifted right by 3.5 staff-spaces" msgstr "nach rechts um 3,5 Linienabstände verschieben" -#. Documentation/user/changing-defaults.itely:3025 (comment) +#. Documentation/notation/changing-defaults.itely:3535 (comment) msgid "and then shifted left by 2 staff-spaces" msgstr "nach links um 2 Linienabstände verschieben" -#. Documentation/user/changing-defaults.itely:3073 (variable) +#. Documentation/notation/changing-defaults.itely:3583 (variable) msgid "XinO" msgstr "XinO" -#. @node in Documentation/user/changing-defaults.itely -#. @chapter in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @chapter in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @chapter in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @chapter in Documentation/de/user/changing-defaults.itely +#. Documentation/notation/changing-defaults.itely:3825 (variable) +msgid "custosNote" +msgstr "custosNote" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely msgid "Changing defaults" msgstr "Standardeinstellungen verändern" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Interpretation contexts" -msgstr "Interpretationsumgebungen" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +msgstr "Interpretationskontexte" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Score - the master of all contexts" -msgstr "Score - Meister aller Kontexte" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +msgstr "Score - der Vater aller Kontexte" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Top-level contexts - staff containers" msgstr "Oberste Kontexte -- Container für Systeme" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Intermediate-level contexts - staves" msgstr "Mittlere Kontexte -- Systeme" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Bottom-level contexts - voices" msgstr "Unterste Kontexte -- Stimmen" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Keeping contexts alive" +msgstr "Kontexte am Leben halten" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying context plug-ins" msgstr "Umgebungs-Plugins verändern" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Changing context default settings" -msgstr "Die Standardeinstellungen von Umgebungen ändern" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +msgstr "Die Standardeinstellungen von Kontexten ändern" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Defining new contexts" -msgstr "Neue Umgebungen definieren" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +msgstr "Neue Kontexte definieren" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Aligning contexts" -msgstr "Umgebungen aneinander ausrichten" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +msgstr "Kontexte aneinander ausrichten" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Explaining the Internals Reference" msgstr "Die Referenz der Programminterna erklärt" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Navigating the program reference" msgstr "Zurechtfinden in der Programmreferenz" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Layout interfaces" msgstr "Layout-Schnittstellen" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Determining the grob property" msgstr "Die Grob-Eigenschaften" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Naming conventions" -msgstr "Benennungsübereinkommen" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +msgstr "Benennungskonventionen" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Modifying properties" msgstr "Eignschaften verändern" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Overview of modifying properties" msgstr "Überblick über verändernde Eigenschaften" -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely msgid "The set command" msgstr "Der set-Befehl" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\set} command" -msgstr "Der @code{\\set}-Befehl" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "Der @code{@bs{}set}-Befehl" + +#. @node in Documentation/notation/changing-defaults.itely msgid "The override command" msgstr "Der override-Befehl" -#. @subsection in Documentation/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\override} command" -msgstr "Der \\override-Befehl" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "Der @code{\\\\override}-Befehl" + +#. @node in Documentation/notation/changing-defaults.itely msgid "The tweak command" msgstr "Der tweak-Befehl" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\tweak} command" -msgstr "Der @code{\\tweak}-Befehl" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "Der @code{\\\\tweak}-Befehl" + +#. @node in Documentation/notation/changing-defaults.itely msgid "set versus override" msgstr "set versus override" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "@code{\\set} vs. @code{\\override}" -msgstr "@code{\\set} versus @code{\\override}" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "@code{\\\\set} versus @code{\\\\override}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Modifying alists" +msgstr "stencils verändern" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Useful concepts and properties" msgstr "Nützliche Konzepte und Eigenschaften" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Input modes" msgstr "Eingabe-Modi" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Direction and placement" msgstr "Richtung und Platzierung" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Context layout order" +msgstr "Reihenfolge des Kontextlayouts" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Distances and measurements" msgstr "Abstände und Maße" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Staff symbol properties" -msgstr "Eigenschaften von Staff (Notensystem)-Symbol" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +msgstr "Eigenschaften des Staff-Symbols" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Spanners" msgstr "Strecker" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{spanner-interface}" msgstr "Das @code{spanner-interface} benutzen" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{line-spanner-interface}" msgstr "Das @code{line-spanner-interface} benutzen" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Visibility of objects" msgstr "Sichtbarkeit von Objekten" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Removing the stencil" msgstr "Einen stencil entfernen" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Making objects transparent" msgstr "Objekten unsichtbar machen" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Painting objects white" msgstr "Objekte weiß malen" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using break-visibility" msgstr "break-visibility (unsichtbar machen) benutzen" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Special considerations" msgstr "Besonderheiten" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Line styles" msgstr "Zeilenstile" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Rotating objects" msgstr "Drehen von Objekten" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Rotating layout objects" msgstr "Drehen von Objekten" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Rotating markup" msgstr "Textbeschriftung drehen" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Advanced tweaks" msgstr "Fortgeschrittene Optimierungen" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Aligning objects" -msgstr "Umgebungen ausrichten" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +msgstr "Objekte ausrichten" + +#. @node in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Setting X-offset and Y-offset directly" +msgstr "@code{X-offset} und @code{Y-offset} direkt setzen" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Setting @code{X-offset} and @code{Y-offset} directly" msgstr "@code{X-offset} und @code{Y-offset} direkt setzen" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Using the side-position-interface" +msgstr "Das @code{side-position-interface} benutzen" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{side-position-interface}" msgstr "Das @code{side-position-interface} benutzen" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Using the self-alignment-interface" +msgstr "Das @code{self-alignment-interface} benutzen" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{self-alignment-interface}" msgstr "Das @code{self-alignment-interface} benutzen" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{aligned-on-parent} procedures" msgstr "Die @code{aligned-on-parent}-Prozeduren benutzen" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{centered-on-parent} procedures" msgstr "Die @code{centered-on-parent}-Prozeduren benutzen" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Using the break-alignable-interface" +msgstr "Benutzung des @code{break-aligned-interface}" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{break-alignable-interface}" msgstr "Benutzung des @code{break-aligned-interface}" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Vertical grouping of grobs" msgstr "Vertikale Gruppierung der grafischen Objekte („grob“s)" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying stencils" msgstr "stencils verändern" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying shapes" msgstr "Formen verändern" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Modifying ties and slurs" msgstr "Bögen verändern" -#. Documentation/user/programming-interface.itely:118 (variable) -msgid "custosNote" -msgstr "custosNote" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Using music functions" +msgstr "Musikfunktionen benutzen" -#. Documentation/user/programming-interface.itely:178 (variable) -msgid "manualBeam" -msgstr "ManuellerBalken" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "Syntax der Ersetzungsfunktionen" -#. Documentation/user/programming-interface.itely:198 (variable) -msgid "AltOn" -msgstr "AltOn" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "Beispiele der Ersetzungsfunktionen" -#. Documentation/user/programming-interface.itely:203 (variable) -msgid "AltOff" -msgstr "AltOff" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +msgid "Notation manual tables" +msgstr "Notationsübersicht" -#. Documentation/user/programming-interface.itely:216 (variable) -msgid "withAlt" -msgstr "with Alt" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" +msgstr "Liste der Akkordbezeichnungen" -#. Documentation/user/programming-interface.itely:350 (variable) -msgid "traLaLa" -msgstr "traLaLa" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" +msgstr "Übliche Akkord-Variablen" -#. Documentation/user/programming-interface.itely:352 (comment) -msgid "dummy action to deal with parser lookahead" -msgstr "Belanglose Aktion um Vorausschau des Parsers zu umgehen" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined fretboard diagrams" +msgstr "Vordefinierte Bund-Diagramme" -#. @node in Documentation/user/programming-interface.itely -#. @chapter in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @chapter in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @chapter in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @chapter in Documentation/de/user/programming-interface.itely -msgid "Interfaces for programmers" -msgstr "Schnittstellen für Programmierer" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" +msgstr "MIDI-Instrumente" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Music functions" -msgstr "Musikalische Funktionen" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" +msgstr "Liste der Farben" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of music functions" -msgstr "Überblick über musikalische Funktionen" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Simple substitution functions" -msgstr "Einfache Ersetzungsfunktionen" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" +msgstr "Normale Farben" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Paired substitution functions" -msgstr "Paarige Ersetzungsfunktionen" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Mathematics in functions" -msgstr "Mathematik in Funktionen" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" +msgstr "X-Farbbezeichnungen" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Void functions" -msgstr "Leere Funktionen" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" +msgstr "Farben ohne eine numerale Endung" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Functions without arguments" -msgstr "Funktionen ohne Argumente" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" +msgstr "Farben mit einer numeralen Endung" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of available music functions" -msgstr "Überblick über vorhandene musikalische Funktionen" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Programmer interfaces" -msgstr "Schnittstelle für Programmierer" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Input variables and Scheme" -msgstr "Eingabevariablen und Scheme" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" +msgstr "Grauskala" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Internal music representation" -msgstr "Interne Repräsentation der Musik" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" +msgstr "Die Feta-Schriftart" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Building complicated functions" -msgstr "Komplizierte Funktionen erstellen" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "Notenschlüssel-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Time Signature glyphs" +msgstr "Taktart-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "Zahlen-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accidental glyphs" +msgstr "Versetzungszeichen-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "Standard-Notenkopf-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "Spezielle Notenkopf-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "Geformte Notenkopf-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Rest glyphs" +msgstr "Pausen-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "Fähnchen-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "Punkt-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dynamic glyphs" +msgstr "Dynamik-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "Schrift-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "Pfeilkopf-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "Klammerspitzen-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "Pedal-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "Akkordeon-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "Vaticana-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "Medicaea-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "Hufnagel-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "Mensural-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "Neomensural-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "Petrucci-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "Solesmes-Glyphen" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Note head styles" +msgstr "Notenkopfstile" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Displaying music expressions" -msgstr "Musikalische Funktionen darstellen" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Text markup commands" +msgstr "Überblick über Textbeschriftungsbefehle" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Music properties" -msgstr "Eigenschaften von Musikobjekten" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" +msgstr "Überblick über Textbeschriftungsbefehle für Listen" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Doubling a note with slurs (example)" -msgstr "Verdoppelung einer Note mit Bindebögen (Beispiel)" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of articulations" +msgstr "Liste der Arktikulationszeichen" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Adding articulation to notes (example)" -msgstr "Artikulationszeichen zu Noten hinzufügen (Beispiel)" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Articulation scripts" +msgstr "Artikulationsskripte" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ornament scripts" +msgstr "Ornamentale Skripte" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "Fermatenskripte" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "Instrumentenspezifische Skripte" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "Wiederholungszeichensrkipte" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "Skripte der alten Notation" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Percussion notes" +msgstr "Schlagzeugnoten" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Markup programmer interface" -msgstr "Programmierungsschnittstelle für Textbeschriftungen" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Markup construction in Scheme" -msgstr "Beschriftungskonstruktionen in Scheme" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "Technisches Glossar" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "alist" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "callback" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "closure" +msgstr "closure" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "glyph" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "grob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "immutable" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "interface" +msgstr "infterface" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "lexer" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "mutable" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "output-def" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "parser" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "parser variable" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "prob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "simple closure" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "smob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "All context properties" +msgstr "Alle Kontexteigenschaften" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "How markups work internally" -msgstr "Wie Beschriftungen intern funktionieren" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Layout properties" +msgstr "Eigenschaften des Layouts" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup command definition" -msgstr "Neue Definitionen von Beschriftungsbefehlen" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "Erhältliche Musikfunktionen" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup list command definition" -msgstr "Neue Definitionen von Beschriftungsbefehlen für Listen" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Predefined type predicates" +msgstr "Vordefinierte Bund-Diagramme" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Contexts for programmers" -msgstr "Kontexte für Programmierer" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Scheme functions" +msgstr "Scheme-Funktionen" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Context evaluation" -msgstr "Kontextauswertung" +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +msgid "Cheat sheet" +msgstr "Befehlsübersicht" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Running a function on all layout objects" -msgstr "Eine Funktion auf alle Layout-Objekte anwenden" +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "\\\\TEXT\\\\" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Scheme procedures as properties" -msgstr "Scheme-Vorgänge als Eigenschaften" - -#. @node in Documentation/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of \\tweak" -msgstr "Scheme-Code anstelle von \\tweak verwenden" - -#. @section in Documentation/user/programming-interface.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of @code{\\tweak}" -msgstr "Scheme-Code anstelle von @code{\tweak} verwenden" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Difficult tweaks" -msgstr "Schwierige Korrekturen" +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "lilypond starten" -#. @node in Documentation/user/literature.itely -#. @appendix in Documentation/user/literature.itely -#. @node in Documentation/fr/user/literature.itely -#. @appendix in Documentation/fr/user/literature.itely -#. @node in Documentation/es/user/literature.itely -#. @appendix in Documentation/es/user/literature.itely -#. @node in Documentation/de/user/literature.itely -#. @appendix in Documentation/de/user/literature.itely -msgid "Literature list" -msgstr "Literatur" +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "@command{lilypond} starten" -#. @node in Documentation/user/notation-appendices.itely -#. @appendix in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendix in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendix in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendix in Documentation/de/user/notation-appendices.itely -msgid "Notation manual tables" -msgstr "Notationsübersicht" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "Übliche Programmbenutzung" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Chord name chart" -msgstr "Liste der Akkordbezeichnungen" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "Benutzung auf der Kommandozeile" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Common chord modifiers" -msgstr "Übliche Akkord-Variablen" +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "lilypond aufrufen" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Predefined fretboard diagrams" -msgstr "Vordefinierte Bund-Diagramme" +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "@command{lilypond} aufrufen" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "MIDI instruments" -msgstr "MIDI-Instrumente" +#. @unnumberedsubsubsec in Documentation/usage/running.itely +#, fuzzy +msgid "Standard shell commands" +msgstr "Manuelle Wiederholungsbefehle" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of colors" -msgstr "Liste der Farben" +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "Optionen von lilypond auf der Kommandozeile" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Normal colors" -msgstr "Normale Farben" +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "Optionen auf der Kommandozeile für @command{lilypond}" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "X color names" -msgstr "X-Farbbezeichnungen" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "Umgebungsvariablen" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color Names without a numerical suffix:" -msgstr "Farben ohne eine numerale Endung" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +#, fuzzy +msgid "LilyPond in chroot jail" +msgstr "Zusammengesetzte LilyPond-Variablen" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color names with a numerical suffix" -msgstr "Farben mit einer numeralen Endung" +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" +msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Grey Scale" -msgstr "Grauskala" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "Fehlermeldungen" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "The Feta font" -msgstr "Die Feta-Schriftart" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "Übliche Fehler" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "Die Musik steht über den Seitenrand hinaus" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "Ein zusätzliches System erscheint" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "Offensichtlicher Fehler in ../ly/init.ly" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "Offensichtlicher Fehler in @code{../ly/init.ly}" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "Fehlermeldung Ungebundene Variable %" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "Fehlermeldung FT_Get_Glyph_Name" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Note head styles" -msgstr "Notenkopfstile" +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "Dateien mit convert-ly aktualisieren" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of articulations" -msgstr "Liste der Arktikulationszeichen" +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "Dateien mit @command{convert-ly} aktualisieren" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Percussion notes" -msgstr "Schlagzeugnoten" +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "Warum verändert sich die Syntax?" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "All context properties" -msgstr "Alle Kontexteigenschaften" +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "convert-ly aufrufen" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Layout properties" -msgstr "Eigenschaften des Layouts" +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "@command{convert-ly} aufrufen" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Identifiers" -msgstr "Bezeichner" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Scheme functions" -msgstr "Scheme-Funktionen" +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "Optionen von convert-ly auf der Kommandozeile" -#. @node in Documentation/user/cheatsheet.itely -#. @appendix in Documentation/user/cheatsheet.itely -#. @node in Documentation/fr/user/cheatsheet.itely -#. @appendix in Documentation/fr/user/cheatsheet.itely -#. @node in Documentation/es/user/cheatsheet.itely -#. @appendix in Documentation/es/user/cheatsheet.itely -#. @node in Documentation/de/user/cheatsheet.itely -#. @appendix in Documentation/de/user/cheatsheet.itely -msgid "Cheat sheet" -msgstr "Befehlsübersicht" +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "Optionen von @command{convert-ly} auf der Kommandozeile" -#. @top in Documentation/fr/user/lilypond-learning.tely -msgid "GNU LilyPond --- Manuel d'initiation" -msgstr "GNU LilyPond -- Das Handbuch zum Lernen" +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "Probleme mit convert-ly" -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Commonly tweaked properties" -msgstr "Übliche Veränderungen der Einstellungen" +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "Probleme mit @code{convert-ly}" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Hauteurs" -msgstr "Hauteurs" +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "Manuelle Konversion" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Durées et rythme" -msgstr "Durées·et·rythme" +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" +msgstr "lilypond-book" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Silences" -msgstr "Silences" +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "@command{lilypond-book} aufrufen" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Métrique" -msgstr "Métrique" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "Ein musikwissenschaftlicher Text als Beispiel" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Tout ensemble" -msgstr "Tout·ensemble" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "Eingabe" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Exemples cliquables" -msgstr "Exemples·cliquables" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "Verarbeitung" -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -msgid "Outside staff objects" -msgstr "Objekte außerhalb des Notensystems" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "Ausgabe" -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Updating old files" -msgstr "Alte Dateien aktualisieren" - -#. @top in Documentation/fr/user/lilypond-program.tely -msgid "GNU LilyPond --- Utilisation des programmes" -msgstr "GNU LilyPond -- Die Programmbenutzung" - -#. @section in Documentation/fr/user/running.itely -msgid "Updating with @command{convert-ly}" -msgstr "Dateien mit @command{convert-ly} aktualisieren" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" +msgstr "Noten in Text integrieren" -#. @top in Documentation/fr/user/lilypond.tely -msgid "GNU LilyPond --- Manuel de notation" -msgstr "GNU LilyPond -- Das Handbuch zum Lernen" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "LaTeX" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat types" -msgstr "Wiederholungtypen" +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" +msgstr "@LaTeX{}" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat syntax" -msgstr "Die Syntax der Wiederholungen" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "Texinfo" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Manual repeat commands" -msgstr "Manuelle Wiederholungsbefehle" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "HTML" -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -msgid "Other repeats" -msgstr "Andere Wiederholungen" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Tremolo subdivisions" -msgstr "Tremolo-Unterteilung" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Measure repeats" -msgstr "Taktwiederholungen" - -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -msgid "Basic polyphony" -msgstr "Einfache Mehrstimmigkeit" - -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -msgid "Blank music sheet" -msgstr "Ein leeres Notenblatt" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Text and line spanners" -msgstr "Text und Linien" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Nested scores" -msgstr "Geschachtelte Systeme" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Page wrapping text" -msgstr "Text über mehrere Seiten" - -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Mélismes dans certaines strophes seulement" -msgstr "Mélismes·dans·certaines·strophes·seulement" - -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Basculer vers une mélodie alternative" -msgstr "Basculer·vers·une·mélodie·alternative" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Introduction to ancient notation" -msgstr "Einführung in die Notation Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient notation supported" -msgstr "Notation von Alter Musik, die unterstützt wird" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Alternative note signs" -msgstr "Alternative Notenzeichen" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient note heads" -msgstr "Notenköpfe Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient accidentals" -msgstr "Versetzungszeichen Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient rests" -msgstr "Pausen Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient clefs" -msgstr "Schlüssel Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient flags" -msgstr "Fähnchen Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient time signatures" -msgstr "Taktangaben Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Additional note signs" -msgstr "Zusätzliche Notenzeichen" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient articulations" -msgstr "Artikulationszeichen Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian square neumes ligatures" -msgstr "Ligaturen der gregorianischen Quadratnotation" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Transcribing ancient music" -msgstr "Transkription Alter Musik" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Annotational accidentals" -msgstr "Vorgeschlagene Versetzungszeichen" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Baroque rhythmic notation" -msgstr "Notation barocker Rhythmen" - -#. @section in Documentation/fr/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Horizontal Spacing" -msgstr "Horizontale Abstände" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "DocBook" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "Definitionen" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "Eine LilyPond-Datei einfügen" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "LilyPond-Code einfügen" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "Ein DocBook-Dokument übersetzen" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" +msgstr "Die Musikfragment-Optionen" -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Layout tunings within contexts" -msgstr "Layouteinstellungen mit Umgebungen" +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "lilypond-book aufrufen" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "@command{lilypond-book} aufrufen" -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Constructing a tweak" -msgstr "Eine Korrektur konstruieren" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "Formatabhängige Anweisungen" -#. @node in Documentation/fr/user/changing-defaults.itely -msgid "Using Scheme code instead of tweak" -msgstr "Using·Scheme·code·instead·of·tweak" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "Optionen auf der Kommandozeile" -#. @top in Documentation/es/user/lilypond-learning.tely -msgid "GNU LilyPond: Manual de aprendizaje" -msgstr "GNU LilyPond -- Das Handbuch zum Lernen" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "Dateiendungen" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Instrucciones predefinidas" -msgstr "Instrucciones·predefinidas" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "lilypond-book-Vorlagen" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Fragmentos de código seleccionados" -msgstr "Fragmentos·de·código·seleccionados" +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "html" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Propiedades trucadas frecuentemente" -msgstr "Propiedades·trucadas·frecuentemente" +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "xelatex" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Véase también" -msgstr "Véase·también" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "Sharing the table of contents" +msgstr "Inhaltsverzeichnis" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Advertencias y problemas conocidos" -msgstr "Advertencias·y·problemas·conocido" +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" +msgstr "" -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -msgid "Automatic behaviour" -msgstr "Automatisches Verhalten" +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" +msgstr "" -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -msgid "Suggestions for writing LilyPond files" -msgstr "Vorschläge, wie LilyPond-Dateien geschrieben werden sollen" +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "Alternative Methoden, Text und Musik zu kombinieren" -#. @rglos in Documentation/es/user/working.itely -msgid "baritone" -msgstr "baritone" +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "Alternative Methoden, Text mit Musik zu kombinieren" -#. @top in Documentation/es/user/lilypond-program.tely -msgid "GNU LilyPond: Manual de utilización del programa" -msgstr "GNU LilyPond -- Die Programmbenutzung" +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "Externe Programme" -#. @top in Documentation/es/user/lilypond.tely -msgid "GNU LilyPond: Manual de referencia de la notación" -msgstr "GNU LilyPond -- Die Notationsreferenz" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "Point and click" -#. @chapheading in Documentation/es/user/lilypond.tely -msgid "El tipografiador de música" -msgstr "GNU LilyPond -- Das Notensatzprogramm" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "Unterstützung von Texteditoren" -#. @rglos in Documentation/es/user/pitches.itely -msgid "semitone" -msgstr "semitone" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "Emacs-Modus" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "Vim-Modus" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "Andere Editoren" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "Von anderen Formaten konvertieren" + +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "midi2ly aufrufen" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "@command{midi2ly} aufrufen" + +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "muscxml2ly aufrufen" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "@command{muscxml2ly} aufrufen" + +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "abc2ly aufrufen" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "@command{abc2ly} aufrufen" + +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "etf2ly aufrufen" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "@command{etf2ly} aufrufen" -#. @top in Documentation/de/user/lilypond-learning.tely -msgid "GNU LilyPond -- Handbuch zum Lernen" -msgstr "GNU LilyPond -- Handbuch zum Lernen" +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "Other formats" +msgstr "Andere Formate" -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -msgid "How LilyPond files work" -msgstr "Wie eine LilyPond-Datei funktioniert" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "LilyPond-Ausgabe in anderen Programmen" -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Lilypond-book templates" -msgstr "Lilypond-book-Vorlagen" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "Viele Zitate aus einer langen Partitur" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "LilyPond-Noten in OpenOffice.org integrieren" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "LilyPond-Noten in andere Programme integrieren" + +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "Unabhängige include-Abschnitte" + +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "Unabhängige @code{include}-Abschnitte" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "MIDI articulation" +msgstr "MIDI-Artikulation" + +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +msgid "Suggestions for writing files" +msgstr "Vorschläge, wie LilyPond-Dateien geschrieben werden sollen" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "Allgemeine Vorschläge" -#. @top in Documentation/de/user/lilypond-program.tely -msgid "GNU LilyPond -- Programmbenutzung" -msgstr "GNU LilyPond -- Programmbenutzung" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "Das Kopieren von bereits vorhandener Musik" -#. @chapheading in Documentation/de/user/lilypond.tely -msgid "Das Notensatzprogramm" -msgstr "Das Notensatzprogramm" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "Große Projekte" -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Ignorieren von Melismen" -msgstr "Melismen ignorieren" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "Fehlersuche" -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{break-aligned-interface}" -msgstr "Das @code{break-aligned-interface} benutzen" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "Make und Makefiles" -#. input/lsr/accordion-discant-symbols.ly:34 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) msgid "discant" msgstr "Diskant" -#. input/lsr/accordion-discant-symbols.ly:37 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) msgid "dot" msgstr "punkt" -#. input/lsr/accordion-discant-symbols.ly:43 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) msgid "16 voets register" msgstr "16 voets Register" -#. input/lsr/accordion-discant-symbols.ly:44 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) msgid "accBasson" msgstr "accBasson" -#. input/lsr/accordion-discant-symbols.ly:50 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) msgid "een korig 8 en 16 voets register" msgstr "een·korig·8·en·16·voets·register" -#. input/lsr/accordion-discant-symbols.ly:51 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) msgid "accBandon" msgstr "accBandon" -#. input/lsr/accordion-discant-symbols.ly:59 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) msgid "accVCello" msgstr "accVCello" -#. input/lsr/accordion-discant-symbols.ly:69 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) msgid "4-8-16 voets register" msgstr "4-8-16·voets·register" -#. input/lsr/accordion-discant-symbols.ly:70 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) msgid "accHarmon" msgstr "accHarmon" -#. input/lsr/accordion-discant-symbols.ly:80 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) msgid "accTrombon" msgstr "accPosaune" -#. input/lsr/accordion-discant-symbols.ly:92 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) msgid "eenkorig 4 en 16 voets register" msgstr "eenkorig·4·en·16·voets·register" -#. input/lsr/accordion-discant-symbols.ly:93 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) msgid "accOrgan" msgstr "accOrgel" -#. input/lsr/accordion-discant-symbols.ly:101 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) msgid "accMaster" msgstr "accHaupt" -#. input/lsr/accordion-discant-symbols.ly:115 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) msgid "accAccord" msgstr "accAkkord" -#. input/lsr/accordion-discant-symbols.ly:127 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) msgid "accMusette" msgstr "accMusette" -#. input/lsr/accordion-discant-symbols.ly:137 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) msgid "accCeleste" msgstr "accCelesta" -#. input/lsr/accordion-discant-symbols.ly:145 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) msgid "accOboe" msgstr "accOboe" -#. input/lsr/accordion-discant-symbols.ly:153 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) msgid "accClarin" msgstr "accClarin" -#. input/lsr/accordion-discant-symbols.ly:159 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) msgid "accPiccolo" msgstr "accPiccolo" -#. input/lsr/accordion-discant-symbols.ly:165 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) msgid "accViolin" msgstr "accGeige" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:39 (variable) -#. input/lsr/jazz-combo-template.ly:231 (variable) -#. input/lsr/jazz-combo-template.ly:279 (context id) -msgid "bass" -msgstr "Bass" - -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:40 (variable) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) msgid "continuo" msgstr "Continuo" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:51 (context id) -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:52 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) msgid "bassStaff" msgstr "BassSystem" -#. input/lsr/adding-an-extra-staff-at-a-line-break.ly:52 (comment) -msgid "The next line is not needed in 2.11.x or later:" -msgstr "Die nächste Zeile braucht man nicht in 2.11.x oder später" - -#. input/lsr/adding-drum-parts.ly:32 (variable) +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) msgid "drh" msgstr "drh" -#. input/lsr/adding-drum-parts.ly:33 (variable) +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) msgid "drl" msgstr "drl" -#. input/lsr/adding-drum-parts.ly:34 (variable) +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) msgid "timb" msgstr "timb" -#. input/lsr/adding-fingerings-to-tablatures.ly:18 (variable) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" +msgstr "zwei" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) msgid "threeTwo" msgstr "dreiZwei" -#. input/lsr/adding-fingerings-to-tablatures.ly:25 (variable) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) msgid "threeFour" msgstr "dreiVier" -#. input/lsr/adding-the-current-date-to-a-score.ly:23 (comment) -msgid "first, define a variable to hold the formatted date:" -msgstr "zuerst eine Variable für das formatierte Datum definieren:" +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "splitStaffBarLineMarkup" -#. input/lsr/adding-the-current-date-to-a-score.ly:24 (variable) -msgid "date" -msgstr "Datum" +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "splitStaffBarLine" -#. input/lsr/adding-the-current-date-to-a-score.ly:24 (comment) -msgid "d-%m-%Y\\\" (localtime (current-time)))" -msgstr "d-%m-%Y\\\" (localtime (current-time)))" +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:48 (variable) +msgid "cueWhile" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:61 (variable) +#, fuzzy +msgid "flute" +msgstr "FlötenNoten" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:67 (variable) +msgid "clarinet" +msgstr "Klarinette" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:76 (variable) +#, fuzzy +msgid "pianoRH" +msgstr "KlavierRH" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:81 (variable) +#, fuzzy +msgid "pianoLH" +msgstr "KlavierLH" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) +msgid "first, define a variable to hold the formatted date:" +msgstr "zuerst eine Variable für das formatierte Datum definieren:" -#. input/lsr/adding-the-current-date-to-a-score.ly:26 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) +msgid "date" +msgstr "Datum" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) +msgid "d-%m-%Y\\\" (localtime (current-time)))" +msgstr "d-%m-%Y\\\" (localtime (current-time)))" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) msgid "use it in the title block:" msgstr "das für den Titel benutzen" -#. input/lsr/adding-the-current-date-to-a-score.ly:37 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) msgid "and use it in a \\markup block:" msgstr "und in einer \\markup-Umgebung benutzen" -#. input/lsr/additional-voices-to-avoid-collisions.ly:27 (variable) +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) msgid "voiceFive" msgstr "StimmeFünf" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:22 (comment) +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +#, fuzzy +msgid "graceNotes" +msgstr "Verzierungen" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) msgid "Default layout:" msgstr "Standardlayout:" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:31 (comment) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) msgid "Reducing the minimum space below the staff and above the lyrics:" msgstr "Mindestplatz unter dem System und über dem Gesangstext:" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:54 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) +msgid "Increase the size of the bar number by 2" +msgstr "Taktnummer um Faktor zwei vergrößern" + +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) +msgid "Print a bar number every second measure" +msgstr "Jeden zweiten Takt eine Taktnummer setzen" + +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) +msgid "Center-align bar numbers" +msgstr "Taktnummern zentrieren" + +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) +msgid "Left-align bar numbers" +msgstr "Taktnummern linksbündig setzen" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "RehearsalMark zentrieren über dem Schlüssel" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "RehearsalMark zentrieren über der Taktart (TimeSignature)" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) msgid "the RehearsalMark will be centered above the KeySignature" msgstr "RehearsalMark über der Tonart (KeySignature) zentrieren" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:65 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:77 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) msgid "" "the RehearsalMark will be aligned with the left edge of the KeySignature" msgstr "RehearsalMark mit der linken Ecke von KeySignature ausrichten" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:71 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) msgid "" "the RehearsalMark will be aligned with the right edge of the KeySignature" msgstr "RehearsalMark mit der rechten Ecke von KeySignature ausrichten" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:78 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) msgid "and then shifted right by one unit." msgstr "nach rechts um eine Einheit verschieben" -#. input/lsr/ancient-fonts.ly:26 (variable) -#. input/lsr/ancient-fonts.ly:26 (context id) +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) msgid "upperStaff" msgstr "SystemOben" -#. input/lsr/ancient-fonts.ly:38 (comment) +#. Documentation/snippets/ancient-fonts.ly:49 (comment) msgid "\\break % 1 (8*1)" msgstr "\\break % 1 (8*1)" -#. input/lsr/ancient-fonts.ly:49 (comment) +#. Documentation/snippets/ancient-fonts.ly:60 (comment) msgid "\\break %2 (8*1)" msgstr "\\break·%2·(8*1)" -#. input/lsr/ancient-fonts.ly:61 (comment) +#. Documentation/snippets/ancient-fonts.ly:72 (comment) msgid "\\break % 3 (8*1)" msgstr "\\break·%·3·(8*1)" -#. input/lsr/ancient-fonts.ly:76 (comment) +#. Documentation/snippets/ancient-fonts.ly:87 (comment) msgid "\\break % 4 (8*1)" msgstr "\\break·%·4·(8*1)" -#. input/lsr/ancient-fonts.ly:85 (comment) -#. input/lsr/ancient-fonts.ly:147 (comment) +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) msgid "\\break % 5 (8*1)" msgstr "\\break·%·5·(8*1)" -#. input/lsr/ancient-fonts.ly:99 (comment) -#. input/lsr/ancient-fonts.ly:162 (comment) +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) msgid "\\break % 6 (8*1)" msgstr "\\break·%·6·(8*1" -#. input/lsr/ancient-fonts.ly:108 (comment) -#. input/lsr/ancient-fonts.ly:172 (comment) +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) msgid "\\break % 7 (8*1)" msgstr "\\break·%·7·(8*1)" -#. input/lsr/ancient-fonts.ly:115 (comment) +#. Documentation/snippets/ancient-fonts.ly:126 (comment) msgid "\\break % 8 (8*1)" msgstr "\\break·%·8·(8*1)" -#. input/lsr/ancient-fonts.ly:118 (comment) +#. Documentation/snippets/ancient-fonts.ly:129 (comment) msgid "\\break % 12 (32*1)" msgstr "\\break·%·12·(32*1)" -#. input/lsr/ancient-fonts.ly:123 (variable) -#. input/lsr/ancient-fonts.ly:123 (context id) +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) msgid "lowerStaff" msgstr "SystemUnten" -#. input/lsr/ancient-fonts.ly:133 (comment) +#. Documentation/snippets/ancient-fonts.ly:144 (comment) msgid "\\break % 2 (16*1)" msgstr "\\break·%·2·(16*1)" -#. input/lsr/ancient-fonts.ly:138 (comment) +#. Documentation/snippets/ancient-fonts.ly:149 (comment) msgid "\\break % 4 (16*1)" msgstr "\\break·%·4·(16*1)" -#. input/lsr/ancient-fonts.ly:177 (comment) +#. Documentation/snippets/ancient-fonts.ly:188 (comment) msgid "\\break % 9 (16*1)" msgstr "\\break·%·9·(16*1)" -#. input/lsr/ancient-fonts.ly:179 (comment) +#. Documentation/snippets/ancient-fonts.ly:190 (comment) msgid "lig" msgstr "lig" -#. input/lsr/ancient-fonts.ly:183 (comment) +#. Documentation/snippets/ancient-fonts.ly:194 (comment) msgid "\\break % 11 (16*1)" msgstr "\\break·%·11·(16*1)" -#. input/lsr/ancient-fonts.ly:194 (comment) +#. Documentation/snippets/ancient-fonts.ly:205 (comment) msgid "\\break % 12 (8*1)" msgstr "\\break·%·12·(8*1)" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:49 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:115 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:132 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:151 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:166 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:187 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:219 (comment) -#. input/lsr/incipit.ly:19 (variable) -#. input/lsr/incipit.ly:191 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:212 (comment) +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" +msgstr "cantus" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "Strophe 1 — Salve, Regína" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "Strophe 2 — Vita, dulcédo" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "\\divisioMinima" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "\\[ a\\melisma \\flexa g\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "\\[ e\\melisma \\flexa d\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "\\divisioMaior" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "\\finalis" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "Strophe 3 — Ad te clamámus" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "Strophe 4 — Ad te suspirámus" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "Strophe 5 — Eia ergo, Advocáta nostra" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "Strophe 6 — Et Jesum" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "Strophe 7 ad finem — O clemens: O pia: O dulcis Virgo María" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" +msgstr "Hymnus" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" +msgstr "verba" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) msgid "incipit" msgstr "Incipit" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:51 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) msgid "tight spacing" msgstr "dichter Satz" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:58 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) msgid "turn off bar lines" msgstr "Taktstriche ausschalten" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) msgid "need this extra \\skip such that clef change comes" msgstr "zusätzliches \\skip nötig, damit Schlüsselwechsel gedruckt wird" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:63 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) msgid "after bar line" msgstr "nach der Taktlinie" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:67 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) msgid "CHECK: no effect?" msgstr "CHECK: keine Auswirkung?" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:68 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) msgid "turn bar lines on again" msgstr "Taktstriche wieder anschalten" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:76 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) msgid "FIXME: setting printKeyCancellation back to #t must not" msgstr "FIXME: printKeyCancellation wieder auf #t setzen darf nicht" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:77 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) msgid "occur in the first bar after the incipit. Dto. for forceClef." msgstr "im ersten Takt nach dem Incipit auftauchen. Genauso für forceClef." -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) msgid "Therefore, we need an extra \\skip." msgstr "Darum ein zusätzlicher \\skip" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) -#. input/lsr/incipit.ly:64 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:37 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) msgid "the actual music" msgstr "die eigentlichen Noten" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:85 (comment) -#. input/lsr/incipit.ly:67 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:39 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) msgid "let finis bar go through all staves" msgstr "Finis Taktlinie durch alle Systeme setzen" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) -#. input/lsr/incipit.ly:70 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:42 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) msgid "finis bar" msgstr "Finis-Taktstrich" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:92 (variable) -#. input/lsr/incipit.ly:87 (variable) -#. input/lsr/incipit.ly:222 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:47 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) msgid "discantusNotes" msgstr "DiskantusNoten" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:141 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:169 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:180 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:203 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:73 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:83 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:96 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:103 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:138 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:163 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:187 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:189 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:214 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) msgid "two bars" msgstr "zwei Takte" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:99 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:202 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:139 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:213 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) msgid "eight bars" msgstr "acht Takte" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:100 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:137 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:172 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:173 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:204 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:162 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:188 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) msgid "one bar" msgstr "Ein Takt" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:114 (variable) -#. input/lsr/incipit.ly:101 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:60 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) msgid "discantusLyrics" msgstr "DiskantusText" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:128 (variable) -#. input/lsr/incipit.ly:124 (variable) -#. input/lsr/incipit.ly:229 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:70 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) msgid "altusNotes" msgstr "AltNoten" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:136 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:164 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) msgid "seven bars" msgstr "Sieben Takte" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:150 (variable) -#. input/lsr/incipit.ly:138 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:82 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) msgid "altusLyrics" msgstr "AltText" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:162 (variable) -#. input/lsr/incipit.ly:162 (variable) -#. input/lsr/incipit.ly:236 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:90 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) msgid "tenorNotes" msgstr "TenorNoten" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:168 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) msgid "four bars" msgstr "vier Takte" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (variable) -#. input/lsr/incipit.ly:177 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:102 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) msgid "tenorLyrics" msgstr "TenorText" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:196 (variable) -#. input/lsr/incipit.ly:199 (variable) -#. input/lsr/incipit.ly:243 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:108 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) msgid "bassusNotes" msgstr "BassNoten" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:218 (variable) -#. input/lsr/incipit.ly:213 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:121 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) msgid "bassusLyrics" msgstr "BassText" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:229 (context id) -#. input/lsr/incipit.ly:221 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:229 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) msgid "choirStaff" msgstr "choirStaff" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:251 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:266 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) msgid "no bars in staves" msgstr "keine Taktstriche in den Systemen" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:254 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) msgid "incipit should not start with a start delimiter" msgstr "Incipit nicht mit einer Systemklammer beginnen" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:260 (comment) -#. input/lsr/incipit.ly:272 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:277 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) msgid "no slurs" msgstr "keine Legatobögen" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:263 (comment) -#. input/lsr/incipit.ly:274 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:280 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) msgid "Comment in the below \\\"\\remove\\\" command to allow line" msgstr "Den \\\"\\remove\\\"-Befehl einkommentieren, um" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:264 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:281 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) msgid "breaking also at those barlines where a note overlaps" msgstr "Zeilenumbrauch auch zu erlauben, wenn Noten über Taktlinie reichen" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:265 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:282 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) msgid "into the next bar. The command is commented out in this" msgstr "Der Befehl ist auskommentiert in" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:266 (comment) -#. input/lsr/incipit.ly:277 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:283 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) msgid "short example score, but especially for large scores, you" msgstr "diesem kleinen Beispiel, aber für größere Partituren" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:267 (comment) -#. input/lsr/incipit.ly:278 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:284 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) msgid "will typically yield better line breaking and thus improve" msgstr "ergeben sich bessere Zeilenumbrüche und" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:268 (comment) -#. input/lsr/incipit.ly:279 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:285 (comment) -msgid "overall spacing if you comment in the following command." -msgstr "" -"auch die Aufteilung der Noten verbessert sich, wenn der folgende Befehl " -"benutzt wird:" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) +msgid "overall spacing if you comment in the following command." +msgstr "" +"auch die Aufteilung der Noten verbessert sich, wenn der folgende Befehl " +"benutzt wird:" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) +msgid "\\remove \\\"Forbid_line_break_engraver\\\"" +msgstr "\\remove·\\\"Forbid_line_break_engraver\\\"" + +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +#, fuzzy +msgid "tick" +msgstr "Stock" + +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +#, fuzzy +msgid "Use markup to center the chant on the page" +msgstr "'bar-size benutzen um die Höhe des Häkchens zu bestimmen," + +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +#, fuzzy +msgid "centered" +msgstr "Komma" + +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) +#, fuzzy +msgid "End score" +msgstr "Partitur" + +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) +#, fuzzy +msgid "End markup" +msgstr "Beschriftungen" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) +msgid "fragment" +msgstr "Frament" + +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) +#, fuzzy +msgid "slurNotes" +msgstr "AltNoten" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +msgid "Default behavior" +msgstr "Standart" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" +msgstr "Korrigiert, um Zusammenstöße zu vermeiden" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "Hier ausschneiden: Beginn von 'bbarred.ly'" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "PostScript -------------------------------" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "pScript" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "Mit B ändern, wenn lieber" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "(B)show %%mit C ändern, wenn lieber" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "Strecker -----------------------------------" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" +"Syntax: \\bbarre #\\\"Text\\\" { Noten } - Text = irgendeine Anzahl von " +"Kästen" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "bbarre" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "Diese Zeile einkommentieren, um vollständiges Barre zu erhalten" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "Hier ausschneiden --- Ende 'bbarred.ly' " + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "" +"Kopieren und ändern Sie die letzte Zeile für vollständiges Baaré. Benennen " +"Sie es in 'fbarred.ly'" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" +"Syntax: \\bbarre #\\\"Text\\\" { Noten } - Text = beliebige Anzahl von Kästen" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) +msgid "Set default beaming for all staves" +msgstr "Automatische Bebalkung für alle Systeme" + +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) +msgid "Modify beaming for just this staff" +msgstr "Balken nur für dieses System verändern" + +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) +msgid "Inherit beaming from Score context" +msgstr "Bebalkung vom Score-Kontext geerbt" + +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) +msgid "Modify beaming for this voice only" +msgstr "Balken nur für diese Stimme ändern" + +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) +msgid "rhythm 2-3-2" +msgstr "Rhythmus 2-3-2" + +#. Documentation/snippets/book-parts.ly:22 (comment) +msgid "book paper, which is inherited by all children bookparts" +msgstr "book-Papier, wird von allen untergeordneten book-Abschnitten geerbt" + +#. Documentation/snippets/book-parts.ly:25 (comment) +msgid "Page footer: add a different part-tagline at part last page" +msgstr "Seitenfuß: eine andere tagline für letzte Seite des Abschnitts" + +#. Documentation/snippets/book-parts.ly:29 (comment) +msgid "Copyright header field only on book first page." +msgstr "Copyright-Feld nur auf erster Seite von book" + +#. Documentation/snippets/book-parts.ly:33 (comment) +msgid "Part tagline header field only on each part last page." +msgstr "Abschnitt-tagline-Feld nur auf letzter Seite jedes Abschnitts" + +#. Documentation/snippets/book-parts.ly:37 (comment) +msgid "Tagline header field only on book last page." +msgstr "Tagline-Feld nur auf letzter Seite von book" + +#. Documentation/snippets/book-parts.ly:44 (comment) +msgid "book header, which is inherited by the first bookpart" +msgstr "Kopf von book, wird vom ersten Abschnitt in book geerbt" + +#. Documentation/snippets/book-parts.ly:53 (comment) +msgid "a different page breaking function may be used on each part" +msgstr "" +"andere Seitenumbruchfunktionen können für jeden Abschnitt benutzt werden" + +#. Documentation/snippets/breathing-signs.ly:20 (comment) +msgid "this bar contains no \\breathe" +msgstr "Dieser Takt hat kein \\breathe" + +#. Documentation/snippets/breathing-signs.ly:22 (comment) +msgid "Modern notation:" +msgstr "Moderne Notation:" + +#. Documentation/snippets/breathing-signs.ly:23 (comment) +msgid "by default, \\breathe uses the rcomma, just as if saying:" +msgstr "von sich aus, \\breathe benutzt rcomma, also ob man schreibt:" + +#. Documentation/snippets/breathing-signs.ly:24 (comment) +msgid "" +"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" +"\\\")" +msgstr "" +"\\override·BreathingSign·#'text·=·#(make-musicglyph-markup·\\\"scripts.rcomma" +"\\\")" + +#. Documentation/snippets/breathing-signs.ly:27 (comment) +msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" +msgstr "rvarcomma·und·lvarcomma sind Variationen von rcomma und lcomma" + +#. Documentation/snippets/breathing-signs.ly:28 (comment) +msgid "N.B.: must use Staff context here, since we start a Voice below" +msgstr "Staff-Kontext benötigt, weil ein Voice-Kontext begonnen wird" + +#. Documentation/snippets/breathing-signs.ly:32 (comment) +msgid "vee" +msgstr "vau" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) +msgid "construct the symbol" +msgstr "Das Symbol konstruieren" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) +msgid "set the breathe mark back to normal" +msgstr "Atemzeichen auf Standard zurücksetzen" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) +msgid "hairpinWithCenteredText" +msgstr "GabelmitzentriertemText" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) +msgid "hairpinMolto" +msgstr "GabelMolto" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) +msgid "hairpinMore" +msgstr "GabelMehr" + +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) +msgid "smallFlageolet" +msgstr "kleinFlageolett" + +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +#, fuzzy +msgid "Default setting" +msgstr "Standartbebalkung" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +msgid "The following is only here to print the names of the" +msgstr "Das hier nur, damit die Bezeichnungen der Akkordstile" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +msgid "chords styles; it can be removed if you do not need to" +msgstr "gesetzt werden, kann entfernt werden, wenn nicht" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) +msgid "print them." +msgstr "gebraucht wird." + +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "Hier ändern für andere globale Systemgröße" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:182 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) +msgid "{" +msgstr "{" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:184 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) +msgid "}" +msgstr "}" + +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +#, fuzzy +msgid "sustainNotes" +msgstr "BassNoten" + +#. Documentation/snippets/chant-or-psalms-notation.ly:35 (variable) +msgid "stemOn" +msgstr "halsAn" + +#. Documentation/snippets/chant-or-psalms-notation.ly:36 (variable) +msgid "stemOff" +msgstr "halsAus" + +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) +msgid "modify maj9 and 6(add9)" +msgstr "maj9 und 6(add9) verändern" + +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) +msgid "Exception music is chords with markups" +msgstr "Ausnahmemusik sind Akkorde mit Textbeschriftung" + +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) +msgid "chExceptionMusic" +msgstr "chExceptionMusic" + +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) +msgid "Convert music to list and prepend to existing exceptions." +msgstr "Noten zu Liste konvertieren und an existierende Ausnahmen anhängen" + +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) +msgid "chExceptions" +msgstr "chAusnahmen" + +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) +msgid "theMusic" +msgstr "Noten" + +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" +msgstr "meineAkkorde" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "Akkorde" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +msgid "\\break" +msgstr "\\break" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "StropheEins" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "StropheZwei" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +msgid "sop" +msgstr "Sop" + +#. Documentation/snippets/clip-systems.ly:65 (variable) +msgid "origScore" +msgstr "origPartitur" + +#. Documentation/snippets/clip-systems.ly:83 (comment) +msgid "Each clip-region is a (START . END) pair" +msgstr "Jede Clip-Region ist ein (START . END) Paar" + +#. Documentation/snippets/clip-systems.ly:84 (comment) +msgid "where both are rhythmic-locations." +msgstr "wobei beide rhythmische Plätze sind" + +#. Documentation/snippets/clip-systems.ly:86 (comment) +msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" +msgstr "(make-rhythmic-locations TAKT-NUMMER ZÄHLER NENNER)" + +#. Documentation/snippets/clip-systems.ly:87 (comment) +msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" +msgstr "bedeutet ZÄHLER/NENNER ganze Noten in den Takt mit Nummer TAKT-NUMMER" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) +msgid "Association list of pitches to colors." +msgstr "Tonhöhen bestimmten Farben zuweisen." + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) +msgid "Compare pitch and alteration (not octave)." +msgstr "Tonhöhen und Alteration vergleichen (nicht Oktaven)." + +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) +msgid "piuF" +msgstr "piuF" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) +msgid "musicUp" +msgstr "NotenHoch" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) +msgid "musicDown" +msgstr "NotenRunter" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" +msgstr "Zeige Klammer" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" +msgstr "Verstecke Text-Strecker" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" +msgstr "Zeige Glissando" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) +msgid "parenF" +msgstr "KlammerF" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) +msgid "the hidden measure and bar line" +msgstr "versteckter Takt und Taktlinie" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "\\cadenzaOn schaltet automatische Taktzahlberechnung aus" + +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "oben" + +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "unten" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) +msgid "Set global properties of fret diagram" +msgstr "Allgemeine Eigenschaften von Bund-Diagramme bestimmen" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) +msgid "mel" +msgstr "Melodie" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) +msgid "C major for guitar, no barre, using defaults" +msgstr "C-Dur für Gitarre, kein Barre, Standardeinstellungen" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) +msgid "terse style" +msgstr "knapper Stil" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" +msgstr "C-Dur für Gitarre, Barre auf dem dritten Bund" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" +msgstr "ausführlicher Stil" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) +msgid "size 1.0" +msgstr "Größe 1.0" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" +msgstr "römische Bundnummer, Fingersatz unter der Saite, grades Barre" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) +msgid "standard size" +msgstr "Standardgröße" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" +msgstr "quer liegend, arabische Nummern, M (mute) für stumme Saite" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) +msgid "no barre, fret label down or left, small mute label font" +msgstr "" +"kein Barre, Bundbezeichnung unten oder links, kleine Schrift für stumme Saite" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" +msgstr "einfacher D-Akkord" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) +msgid "larger dots, centered dots, fewer frets" +msgstr "größere Punkte, zentrierte Punkte, weniger Bünde" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) +msgid "label below string" +msgstr "Bezeichnung darunter" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" +msgstr "Grob-Werkzeuge" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "" +"Das sind wörtliche Neufassungen einiger C++-Methoden, die der Ambitus-" +"Engraver benutzt." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" +msgstr "Ambitus-Datenstruktur" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" +msgstr "Die -Klasse enthält die verschiedenen Grobs," + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" +msgstr "die erstellt werden, um den Ambitus zu setzen:" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "" +"- ambitus-group: Der Grob, der alle Komponenten eines Ambitus gruppiert" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" +msgstr "(Ambitus grob);" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "" +"- ambitus-line: Die vertikale Linie zwischen oberem und unterem Ambitus" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "Noten (AmbitusLine grob);" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "" +"- ambitus-up-note und ambitus-down-note: Notenköpfe und Versetzungszeichen" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "für die obere und untere Note des Ambitus (siehe die" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." +msgstr "-Klasse unten)." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "" +"Die anderen Stellen definieren den Tonart- und Schlüsselkontext des " +"Engravers:" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "- start-c0: Position des zweigestr. Cs zu Begin des Stücks." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "Das wird benutzt, um die Ambitus-Noten nach ihren Tonhöhen zu setzen" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "- start-key-sig: Die Tonart am Anfang des Stückes." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "Sie wird benutzt, um zu bestimmen, ob Versetzungszeichen neben" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +msgid "notes." +msgstr "den Ambitusnoten gesetzt werden müssen." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "Akzessor für die Daten der obersten und untersten Note eines Ambitus" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "" +"Die -Klasse enthält die Grobs, die spezifisch für den Ambitus " +"sind" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" +msgstr "(obere und untere) Noten" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "- head: ein AmbitusNoteHead-Grob" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "- accidental: ein AmbitusAccidental-Grob, der möglicherweise neben" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." +msgstr "einem Ambitus-Notenkopf gesetzt wird." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" +msgstr "Weiter:" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "- pitch ist die absolute Tonhöhe der Note" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "- cause ist das Notenereignis, das die Ambitusnote hervorrauf, also" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." +msgstr "die untere oder obere Note der betrachteten Musiksequenz." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +msgid "Ambitus engraving logics" +msgstr "Logik der Ambitusfunktion" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." +msgstr "Neufassung des Codes von @file{lily/ambitus-engraver.cc}." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" +msgstr "Definition des Ambitus-Engravers" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" +msgstr "Beispiel" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +msgid "add FretBoards for the Cuatro" +msgstr "Bunddiagramme für Cuatro hinzufügen" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) +msgid "Note: This section could be put into a separate file" +msgstr "Achtung: dieser Abschnitt gehört in eine eigene Datei" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:86 (comment) +msgid "predefined-cuatro-fretboards.ly" +msgstr "predefined-cuatro-fretboards.ly" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (comment) +msgid "and \\included into each of your compositions" +msgstr "und wird mit \\include in jede Quelldatei eingefügt" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +msgid "cuatroTuning" +msgstr "cuatroStimmung" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +msgid "dSix" +msgstr "dSexte" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +msgid "dMajor" +msgstr "dDur" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) +msgid "aMajSeven" +msgstr "aGrSept" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:94 (variable) +msgid "dMajSeven" +msgstr "dGrSept" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:95 (variable) +msgid "gMajor" +msgstr "gDur" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:113 (comment) +msgid "end of potential include file /predefined-cuatro-fretboards.ly" +msgstr "Ende der eigenständigen Datei /predefined-cuatro-fretboards.ly" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:118 (variable) +msgid "primerosNames" +msgstr "primerosBezeichnungen" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:122 (variable) +msgid "primeros" +msgstr "primeros" + +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) +msgid "baseMelody" +msgstr "basisMelodie" + +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) +msgid "Must be lower than the actual number of staff lines" +msgstr "Muss geringer sein als die aktuelle Zahl der Notenlinien" + +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) +msgid "fixA" +msgstr "fixA" + +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) +msgid "fixB" +msgstr "fixB" + +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "\\\" (make-string 36 #\\-))" + +#. Documentation/snippets/double-glissando.ly:21 (comment) +msgid "new voice ( = \\voiceOne), hidden" +msgstr "neue Stimme ( = \\voiceOne), versteckt" + +#. Documentation/snippets/double-glissando.ly:23 (comment) +msgid "attach glissando to note heads" +msgstr "Glissando an Notenkopf angehängt" + +#. Documentation/snippets/double-glissando.ly:28 (comment) +msgid "original voice with chords rearranged so that" +msgstr "originale Stimme mit Akkorden umgruppiert," + +#. Documentation/snippets/double-glissando.ly:29 (comment) +msgid "glissando is attached to a & c" +msgstr "so dass Glissando an a & c gefügt wird" + +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) +msgid "" +"Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "Zwei Funktionen für (De)Crescendo-Strecker, für die man explizit den" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." +msgstr "Streckertext angeben kann." + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +msgid "mycresc" +msgstr "meinCresc" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +msgid "mydecresc" +msgstr "meinDecresc" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:61 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "" +"Einige Dynamiktextstrecker als Beispiel, die als nachgestellte Operatoren " +"eingesetzt werden können." + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:62 (variable) +msgid "crpoco" +msgstr "crpoco" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:67 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" +msgstr "" +"Bestehenden \\cresc. \\dim und \\decresc umdefinieren, sodass sie " +"nachgestellt werden können" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:68 (variable) +msgid "cresc" +msgstr "Cresc" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:73 (variable) +msgid "dim" +msgstr "Dim" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:78 (variable) +msgid "decresc" +msgstr "Decresc" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "NR 1.7 Editorische Anmerkungen" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "Beethoven, Op. 31, No. 3" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "Klaviersonate 18, 2. Satz, Scherzo" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "Takte 9--14" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "RH-System" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "LH-System" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) +msgid "PostScript is a registered trademark of Adobe Systems Inc." +msgstr "PostScript ist eine registrierte Handelsmarke von Adobe Systems Inc." + +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) +msgid "sample music" +msgstr "Beispielnoten" + +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) +msgid "topVoice" +msgstr "topStimme" + +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) +msgid "botVoice" +msgstr "bottomStimme" + +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) +msgid "hoom" +msgstr "hoom" + +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) +msgid "pah" +msgstr "pah" + +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) +msgid "setup for Request->Element conversion. Guru-only" +msgstr "setup·for·Request->Element·conversion.·Guru-only" + +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:209 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:222 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:278 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:292 (variable) +msgid "MyStaff" +msgstr "DasSystem" + +#. Documentation/snippets/engravers-one-by-one.ly:139 (comment) +msgid "explicitly set instrumentName, so we don't get" +msgstr "explizit instrumentName angeben, damit keine" + +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "weird effects when doing instrument names for" +msgstr "seltsamen Effekte auftreten, wenn die Instrumentbezeichnungen" + +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +msgid "piano staves" +msgstr "Klaviersysteme erstellt werden" + +#. Documentation/snippets/engravers-one-by-one.ly:150 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:236 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:249 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:262 (variable) +msgid "MyVoice" +msgstr "MeineStimme" + +#. Documentation/snippets/engravers-one-by-one.ly:165 (comment) +msgid "must come before all" +msgstr "muss vor allem anderen kommen" + +#. Documentation/snippets/engravers-one-by-one.ly:175 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "\\consists·\\\"Rest_engraver\\\"" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "L. v. Beethoven, Op. 49 no. 1" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "Klaviersonate 19 - \\\"Leichte Sonate\\\"" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "Takte 1--12" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "\\layout {" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "\\context {" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "\\Score" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" +msgstr "\\override SpacingSpanner #'base-shortest-duration =" + +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "#(ly:make-moment 1 20)" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" + +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "Sonata II, Allemanda" + +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "Takte 1 - 88" + +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "Coded by Neil Puttock; modified by Carl Sorensen" + +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +msgid "extendOn" +msgstr "extendOn" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "extendOff" + +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "violinoI" + +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "violinoII" + +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "violone" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:40 (variable) +msgid "centermarkup" +msgstr "zentrierteBeschriftung" + +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" +msgstr "Hier ausschneiden ------- Beginn von 'flamenco.ly'" + +#. Documentation/snippets/flamenco-notation.ly:96 (comment) +msgid "Text indicators" +msgstr "Textanweisungen" + +#. Documentation/snippets/flamenco-notation.ly:97 (variable) +msgid "abanico" +msgstr "abanico" + +#. Documentation/snippets/flamenco-notation.ly:98 (variable) +msgid "rasgueaso" +msgstr "rasgueaso" + +#. Documentation/snippets/flamenco-notation.ly:99 (variable) +msgid "alzapua" +msgstr "alzapua" + +#. Documentation/snippets/flamenco-notation.ly:101 (comment) +msgid "Finger stroke symbols" +msgstr "Schlag-Symbole" + +#. Documentation/snippets/flamenco-notation.ly:102 (variable) +msgid "strokeUp" +msgstr "SchlagHoch" + +#. Documentation/snippets/flamenco-notation.ly:112 (variable) +msgid "strokeDown" +msgstr "schlagRunter" + +#. Documentation/snippets/flamenco-notation.ly:122 (comment) +msgid "Golpe symbol" +msgstr "Golpe-Symbol" + +#. Documentation/snippets/flamenco-notation.ly:123 (variable) +msgid "golpe" +msgstr "golpe" + +#. Documentation/snippets/flamenco-notation.ly:137 (variable) +msgid "strokeUpGolpe" +msgstr "SchlagHochGolpe" + +#. Documentation/snippets/flamenco-notation.ly:138 (variable) +msgid "iUpGolpe" +msgstr "iHochGolpe" + +#. Documentation/snippets/flamenco-notation.ly:140 (comment) +msgid "Strokes for all fingers" +msgstr "Schläge für alle Finger" + +#. Documentation/snippets/flamenco-notation.ly:141 (variable) +msgid "pUp" +msgstr "pHoch" + +#. Documentation/snippets/flamenco-notation.ly:142 (variable) +msgid "pDown" +msgstr "pRunter" + +#. Documentation/snippets/flamenco-notation.ly:143 (variable) +msgid "iUp" +msgstr "iHoch" + +#. Documentation/snippets/flamenco-notation.ly:144 (variable) +msgid "iDown" +msgstr "iRunter" + +#. Documentation/snippets/flamenco-notation.ly:145 (variable) +msgid "mUp" +msgstr "mHoch" + +#. Documentation/snippets/flamenco-notation.ly:146 (variable) +msgid "mDown" +msgstr "mRunter" + +#. Documentation/snippets/flamenco-notation.ly:147 (variable) +msgid "aUp" +msgstr "aHoch" + +#. Documentation/snippets/flamenco-notation.ly:148 (variable) +msgid "aDown" +msgstr "aRunter" + +#. Documentation/snippets/flamenco-notation.ly:149 (variable) +msgid "xUp" +msgstr "xHoch" + +#. Documentation/snippets/flamenco-notation.ly:150 (variable) +msgid "xDown" +msgstr "xRunter" + +#. Documentation/snippets/flamenco-notation.ly:153 (comment) +msgid "Just handy :)" +msgstr "Sehr geschickt :)" + +#. Documentation/snippets/flamenco-notation.ly:154 (variable) +msgid "tupletOff" +msgstr "NtoleAus" + +#. Documentation/snippets/flamenco-notation.ly:159 (variable) +msgid "tupletsOff" +msgstr "NtoleAus" + +#. Documentation/snippets/flamenco-notation.ly:164 (variable) +msgid "tupletsOn" +msgstr "NtolenAn" + +#. Documentation/snippets/flamenco-notation.ly:169 (variable) +msgid "headsOff" +msgstr "köpfeAus" + +#. Documentation/snippets/flamenco-notation.ly:175 (variable) +msgid "headsOn" +msgstr "köpfeEin" + +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" +msgstr "Hier ausschneiden ---- Ende 'flamenco.ly' " + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) +msgid "Example 1" +msgstr "Beispiel 1" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) +msgid "Example 2" +msgstr "Beispiel 2" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) +msgid "Example 3" +msgstr "Beispiel 3" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) +msgid "Example 4" +msgstr "Beispiel 4" + +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) +msgid "slap" +msgstr "schlag" + +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +msgid "example" +msgstr "Beispiel" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) +msgid "" +"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" +"msg00215.html" +msgstr "" +"Tipp von http://lists.gnu.org/archive/html/lilypond-user/2007-12/msg00215." +"html" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +msgid "lyr" +msgstr "Text" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "Akkord für Ukulele" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" +msgstr "Ein Akkord für Ukulele, mit Formatierung in der Definition enthalten" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) +msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" +msgstr "1.2 * Größe, 4 Saiten, vier Bünde, Fingersatz unterhalb" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) +msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" +msgstr "" +"Punktgröße .35 von Bundzwischenraum, Punktposition .55 von Bundzwischenraum" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) +msgid "These chords will be in normal orientation" +msgstr "Diese Akkorde sind in normaler Ausrichtung" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) +#, python-format +msgid "110% of default size" +msgstr "110% der Standardgröße" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) +msgid "Double barre used to test barre function" +msgstr "Doppel-Barré um die Barré-Funktion zu testen" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) +msgid "C major for guitar, with capo on third fret" +msgstr "C-Dur für Gitarre, mit Barré auf dem dritten Bund" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) +msgid "simple D chord, large top fret thickness" +msgstr "einfacher D-Durakkord, Dicke des Bundes oben groß" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) +msgid "These chords will be in landscape orientation" +msgstr "Diese Akkorde werden quer ausgerichtet" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) +msgid "These chords will be in opposing-landscape orientation" +msgstr "Diese Akkorde werden quer auf dem Kopf ausgerichtet" + +#. Documentation/snippets/fretboards-alternate-tables.ly:49 (comment) +msgid "Make a blank new fretboard table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:52 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:55 (comment) +msgid "Add a chord to custom-fretboard-table-one" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:61 (comment) +msgid "Add a chord to custom-fretboard-table-two" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "Abkürzungen" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +msgid "fingering orientations" +msgstr "Fingersatzrichtung" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "sfol" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "sfor" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "sfod" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "sfou" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "Seitennummerrichtung" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "ssnol" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "(runter rechts hoch)" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "ssnou" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "ssnoud" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +msgid "ssnor" +msgstr "ssnor" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "Fingersatz-Verschiebung definieren" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "FO" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "Beschriftungen" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +msgid "rit" +msgstr "Rit" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +#, fuzzy +msgid "dimin" +msgstr "Diminuendo" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "Andantino" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "BenMarcato" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "pdolce" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "DIE NOTEN %%%" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "T. 1" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "T. 2" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "T. 3" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "T. 4" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" +msgstr "T. 5" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "Ende T. 6" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" +msgstr "T. 7" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "Beginn T. 8" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "Ende T. 8" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "Ende T. 9" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" +msgstr "T. 10" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "Beginn T. 11" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "Ende T. 11" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "Beginn T. 2" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "Ende T. 2" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "Neuer Abschnitt in A-Moll" + +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" +msgstr "Beginn T. 6" + +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" +msgstr "Ende T. 6" + +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" +msgstr "T. 8" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" +msgstr "Beginn T. 9" + +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" +msgstr "Ende T. 9" + +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" +msgstr "T. 11" + +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" +msgstr "Gitarre" + +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) +msgid "this moves them up one staff space from the default position" +msgstr "damit werden sie einen Notenlinienzwischenraum hochgeschoben" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) +msgid "set up grids" +msgstr "Gitter einstellen" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) +msgid "set the grid interval to one quarter note" +msgstr "den Gitter-Abstand auf eine Viertelnote setzen" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) +msgid "this moves them to the right half a staff space" +msgstr "" +"damit werden sie nach rechts um einen halben Notenlinienabstand verschoben" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) +msgid "hides staff and notes so that only the grid lines are visible" +msgstr "versteckt System und Noten so dass nur die Gitterlinien sichtbar sind" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) +msgid "dummy notes to force regular note spacing" +msgstr "Blindnoten damit die Noten regelmäßig verteilt sind" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) +msgid "center grid lines horizontally below note heads" +msgstr "Gitterlinien horizontal unter Notenköpfen zentrieren" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +msgid "set line length and positioning:" +msgstr "Länge und Position von Linien setzen:" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +msgid "two staff spaces above center line on hidden staff" +msgstr "" +"zwei Notenlinienzwischenräume über der Mittellinie auf dem versteckten System" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) +msgid "to four spaces below center line on visible staff" +msgstr "bis vier Zwischenräume unter der Mittellinie des sichtbaren Systems" + +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "Bundzahlen verstecken: nützlich, um Bewegung von/zu beliebigem" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "Punkt des Griffbretts zu notieren." + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "versteckeBundZahl" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) +msgid "drum" +msgstr "Trommel" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +msgid "Solution 1: Using a simple markup with a particular halign value" +msgstr "" +"Lösung 1: Benutzung von einfacher Beschriftung mit horizontaler Verschiebung" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" +msgstr "" +"Nachteil: nur Beschriftung, keine Dynamik, also wirkt sich \\dynamicDown" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) +msgid "etc. will have no effect" +msgstr "usw. nicht aus" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) +msgid "semppMarkup" +msgstr "semppBeschriftung" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +msgid "Solution 2: Using a dynamic script & shifting with" +msgstr "Lösung 2: Dynamik-Skript benutzen und mit" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +msgid "\\once \\override ... #'X-offset = .." +msgstr "·\\once\\override ... #'X-offset = ..·verschieben" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) +msgid "Drawback: \\once \\override needed for every invocation" +msgstr "Nachteil: \\once \\override muss jedes Mal geschrieben werden" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) +msgid "semppK" +msgstr "semppK" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +msgid "Solution 3: Padding the dynamic script so the center-alignment" +msgstr "Lösung 3: Dynamik-Skript so verschieben mit padding, dass es" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +msgid "puts it at the correct position" +msgstr "automatisch durch·center-alignment·an·die·richtige·Position·kommt" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) +msgid "" +"Drawback: the padding really reserves the space, nothing else can be there" +msgstr "" +"Nachteil: Die Verschiebung lässt den Platz frei, dort kann nichts anderes " +"stehen" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) +msgid "semppT" +msgstr "semppT" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" +msgstr "Lösung 4: Dynamik, Dimensionen des zusätzlichen Textes auf 0 setzen" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" +msgstr "Nachteil: LilyPond glaubt, dass \\\"sempre\\\" keinen Platz einnimmt" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +msgid "other stuff there => collisions" +msgstr "und kann·andere·Elemente·hier·hintun·-->·Kollisionen" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" +msgstr "" +"Nachteil: Es gibt offensichtlich noch Ränder, so dass es nicht genau die" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) +msgid "same alignment as without the additional text" +msgstr "gleiche Postionierung ist wie ohne den zusätzlichen Text" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) +msgid "semppM" +msgstr "semppM" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) +msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" +msgstr "" +"Lösung 5: Dynamik mit ausdrücklicher Verschiebung innerhalb von Scheme-" +"Funktion" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) +msgid "semppG" +msgstr "semppG" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "" +"Lösung 6: Dynamik mit expliziter Ausrichtung. Das wirkt sich nur dann aus," + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "wenn X-offset auch gesetzt wird!" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) +msgid "Drawback: One needs to set DynamicText #'X-offset!" +msgstr "Nachteil: DynamicText #'X-offset muss gesetzt werden" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "Nachteil: An der rechten Ecke des zusätzlichen Textes ausgerichtet," + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "nicht an der Mitte von pp" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) +msgid "semppMII" +msgstr "semppMII" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) +msgid "s" +msgstr "s" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) +msgid "sMarkup" +msgstr "sBeschriftung" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) +msgid "sK" +msgstr "sK" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) +msgid "sT" +msgstr "sT" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) +msgid "sM" +msgstr "sM" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) +msgid "sG" +msgstr "sG" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) +msgid "sMII" +msgstr "sMII" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) +msgid "Setting to ##f (false) gives the same result" +msgstr "Auf falsch (##f) setzen ergibt gleiches Ergebnis" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) +msgid "harmonies" +msgstr "Harmonien" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" +msgstr "DAS IST DER BEFEHL UM AKKORDBEZEICHNUNG ZU VERSCHIEBEN" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) +msgid "THIS LINE IS THE SECOND METHOD" +msgstr "DIESE ZEILE IST DIE ZWEITE METHODE" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" +msgstr "DAS IST DER BEFEHL UM DAS BUNDDIAGRAMM ZU VERSCHIEBEN" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) +msgid "HERE IS THE SECOND METHOD" +msgstr "HIER DIE ZWEITE METHODE" + +#. Documentation/snippets/hymn-template.ly:50 (variable) +#, fuzzy +msgid "Timeline" +msgstr "Zeitangabe" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +#, fuzzy +msgid "Start score" +msgstr "Struktur einer Partitur" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +#, fuzzy +msgid "Start pianostaff" +msgstr "Das Klaviersystem" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +#, fuzzy +msgid "Start Voice = \\\"Alto\\\"" +msgstr "Stimme·\\\"1\\\"" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +#, fuzzy +msgid "End Voice = \\\"Alto\\\"" +msgstr "Stimme·\\\"1\\\"" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +#, fuzzy +msgid "End Voice = \\\"Tenor\\\"" +msgstr "Stimme·\\\"1\\\"" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +#, fuzzy +msgid "Start Voice = \\\"Bass\\\"" +msgstr "Stimme·\\\"1\\\"" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +#, fuzzy +msgid "End Voice = \\\"Bass\\\"" +msgstr "Stimme·\\\"1\\\"" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +#, fuzzy +msgid "End pianostaff" +msgstr "Das Klaviersystem" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +#, fuzzy +msgid "don't indent first system" +msgstr "keine einzelne erste Note" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +#, fuzzy +msgid "shorten line length to suit music" +msgstr "Länge und Position von Linien setzen:" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) +msgid "discantusIncipit" +msgstr "discantusIncipit" + +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) +msgid "altusIncipit" +msgstr "altusIncipit" + +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) +msgid "two measures" +msgstr "zwei Takte" + +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) +msgid "tenorIncipit" +msgstr "tenorIncipit" + +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) +msgid "bassusIncipit" +msgstr "bassusIncipit" + +#. Documentation/snippets/incipit.ly:265 (comment) +msgid "no bar lines in staves or lyrics" +msgstr "keine Taktstriche auf Systemen oder Gesangstext" + +#. Documentation/snippets/incipit.ly:268 (comment) +msgid "the next two instructions keep the lyrics between the bar lines" +msgstr "" +"mit den zwei nächsten Befehlen wird der Text zwischen den Taktstrichen " +"gehalten" + +#. Documentation/snippets/incipit.ly:279 (comment) +msgid "breaking also at those bar lines where a note overlaps" +msgstr "auch an den Takten umbrechen, wo eine Note aus dem Takt heraussteht" + +#. Documentation/snippets/incipit.ly:280 (comment) +msgid "into the next measure. The command is commented out in this" +msgstr "Der Befehl ist hier auskommentiert" + +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) +msgid "tuning" +msgstr "Stimmung" + +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) +msgid "#(set-global-staff-size 16)" +msgstr "#(set-global-staff-size·16)" + +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) +msgid "Some macros %%%%%%%%%%%%%%%%%%%" +msgstr "Einige Makros %%%%%%%%%%%%%%%%%%%" + +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) +msgid "sl" +msgstr "sl" + +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) +msgid "nsl" +msgstr "nsl" + +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) +msgid "crOn" +msgstr "crOn" + +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) +msgid "crOff" +msgstr "crOff" + +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) +msgid "insert chord name style stuff here." +msgstr "Akkordbezeichnungen hierher" + +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) +msgid "jazzChords" +msgstr "jazzAkkorde" + +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) +msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" +msgstr "Taktart/Tonart %%%%%%%%%%%%%%%%%" + +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) +msgid "Key" +msgstr "Tonart" + +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) +msgid "############ Horns ############" +msgstr "############·Hörner·############" + +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) +msgid "------ Trumpet ------" +msgstr "------·Trompete·------" + +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) +msgid "trpt" +msgstr "trpt" + +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) +msgid "trpHarmony" +msgstr "trpHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) +msgid "trumpet" +msgstr "trompete" + +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) +msgid "------ Alto Saxophone ------" +msgstr "------·Altsaxophon·------" + +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) +msgid "altoHarmony" +msgstr "altHarmonien" + +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) +msgid "altoSax" +msgstr "altSax" + +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) +msgid "------ Baritone Saxophone ------" +msgstr "------·Baritonsaxophon·------" + +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) +msgid "bari" +msgstr "bari" + +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) +msgid "bariHarmony" +msgstr "bariHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) +msgid "bariSax" +msgstr "bariSax" + +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) +msgid "------ Trombone ------" +msgstr "------ Posaune ------" + +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) +msgid "tbone" +msgstr "pos" + +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) +msgid "tboneHarmony" +msgstr "PosHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) +msgid "trombone" +msgstr "posaune" + +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) +msgid "############ Rhythm Section #############" +msgstr "############·Rhythmus-Abschnitt·#############" + +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) +msgid "------ Guitar ------" +msgstr "------ Gitarre ------" + +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) +msgid "gtr" +msgstr "gtr" + +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) +msgid "gtrHarmony" +msgstr "gtrHarmonie" + +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) +msgid "------ Piano ------" +msgstr "------ Klavier ------" + +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) +msgid "rhUpper" +msgstr "rhOben" + +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) +msgid "rhLower" +msgstr "rhUnten" + +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) +msgid "lhUpper" +msgstr "lhOben" + +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) +msgid "lhLower" +msgstr "lhUnten" + +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) +msgid "PianoRH" +msgstr "KlavierRH" + +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) +msgid "PianoLH" +msgstr "KlavierLH" + +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) +msgid "------ Bass Guitar ------" +msgstr "------ Bassgitarre ------" + +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) +msgid "------ Drums ------" +msgstr "------ Schlagzeugt ------" + +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) +msgid "drumContents" +msgstr "SchlagInhalt" + +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) +#, python-format +msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" +msgstr "Alles zusammengefügt: %%%%%%%%%%%%%%%%%%%%%%" + +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) +msgid "horns" +msgstr "Horn" + +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) +msgid "altosax" +msgstr "altsax" + +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) +msgid "barichords" +msgstr "bariakk" + +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) +msgid "barisax" +msgstr "barsisax" + +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) +msgid "chords" +msgstr "Akkorde" + +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "M. Ravel, Sonatine (1905)" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "Erster Satz" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "LangeFermate" + +#. Documentation/snippets/makam-example.ly:55 (comment) +msgid "Initialize makam settings" +msgstr "Makam-Einstellungen initialisieren" + +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) +msgid "bassfigures" +msgstr "Bassfiguren" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) +msgid "from upper staff-line (position 2) to center (position 0)" +msgstr "von oberer Notenlinie (Position 2) bis Mitte (Position 0)" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) +msgid "from center to one above center (position 1)" +msgstr "von Mitte bis eins über der Mitte (Position 1)" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) +msgid "speakOn" +msgstr "sprechAn" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) +msgid "speakOff" +msgstr "sprechAus" + +#. Documentation/snippets/markup-lines.ly:23 (comment) +msgid "Candide, Voltaire" +msgstr "Candide, Voltaire" + +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) +msgid "the final bar line is not interrupted" +msgstr "Letze Taktlinie ist nicht unterbrochen" + +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) +msgid "normalPos" +msgstr "normalPos" + +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) +msgid "dashPlus" +msgstr "dashPlus" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) +msgid "Set tuplets to be extendable..." +msgstr "Ntolen so definieren, dass sie erweiterbar sind" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) +msgid "...to cover all items up to the next note" +msgstr "um alle Objekte bis zu nächsten Note" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) +msgid "...or to cover just whitespace" +msgstr "oder auch nur Leerzeichen zu überbrücken" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +#, fuzzy +msgid "space for instrumentName" +msgstr "Tasteninstrumente" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) +msgid "fluteMusic" +msgstr "FlötenNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) +msgid "clarinetMusic" +msgstr "KlarinetteNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) +msgid "trumpetMusic" +msgstr "TrompteNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +#, fuzzy +msgid "hornMusic" +msgstr "HornNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) +msgid "percussionMusic" +msgstr "SchlagzeugNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) +msgid "altoIMusic" +msgstr "AlteinsNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) +msgid "altoIIMusic" +msgstr "AltzweiNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) +msgid "altoILyrics" +msgstr "AlteinsText" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) +msgid "altoIILyrics" +msgstr "AltzweiText" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) +msgid "pianoRHMusic" +msgstr "KlavierRHNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) +msgid "pianoLHMusic" +msgstr "KlavierLHNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) +msgid "violinIMusic" +msgstr "ViolineeinsNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) +msgid "violinIIMusic" +msgstr "ViolinezweiNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) +msgid "violaMusic" +msgstr "BratscheNoten" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:146 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:149 (comment) +msgid "applies to split up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:156 (comment) +#, fuzzy +msgid "applies to down stems" +msgstr "gehört zu \\\"fas\\\"" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) +msgid "stick" +msgstr "Stock" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) +msgid "Permit line breaks within tuplets" +msgstr "Zeilenumbrüche innerhalb von N-tolen zulassen" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) +msgid "Allow beams to be broken at line breaks" +msgstr "Balken können an Umbrüchen gebrochen werden" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) +msgid "Insert a manual line break within a tuplet" +msgstr "Manuellen Zeilenumbruch in N-tole" + +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) +msgid "pedal" +msgstr "Pedal" + +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "L. v. Beethoven" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "Klaviersonate 21 - Dem Grafen von Waldstein gewidmet" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "Choral Takte 34--40+" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "RH Stimme 1" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "(" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr ")" + +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "RH Stimme 2" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) +msgid "tab" +msgstr "tab" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "MMR -- Mehrtaktige Pause (Multi Mesure Rest)" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "Mehrtaktpausen werden unter die vierte Linie gesetzt" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) +msgid "They can be moved with an override" +msgstr "Sie können mit override verschoben werden" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) +msgid "A value of 0 is the default position;" +msgstr "Ein Wert von O ist die Standardposition" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) +msgid "the following trick moves the rest to the center line" +msgstr "hiermit wird die Pause zur Mittellinie verschoben" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "" +"Mehrtaktpausen in Stimmen mit ungerader Zahl sind unter der obersten Linie" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" +msgstr "Mehrtaktpausen in geraden Stimmen sind unter der untersten Linie" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) +msgid "They remain separated even in empty measures" +msgstr "auch in leeren Takten bleichen sie getrennt" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) +msgid "This brings them together even though there are two voices" +msgstr "Hiermit werden sie zusammegefügt, auch wenn sie zwei Stimmen sind" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) +msgid "Set segno sign as rehearsal mark and adjust size if needed" +msgstr "Segno-Zeichen als Übungszeichen definieren und Größe evtl. anpassen" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) +msgid "\\once \\override Score.RehearsalMark #'font-size = #3" +msgstr "\\once·\\override·Score.RehearsalMark·#'font-size·=·#3" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) +msgid "Set coda sign as rehearsal mark and adjust size if needed" +msgstr "Coda-Zeichen als Übungszeichen definieren und Größe evtl. anpassen" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) +msgid "Should Coda be on anew line?" +msgstr "Soll Coda auf einer neuen Zeile sein?" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) +msgid "Coda NOT on new line: use \\nobreak" +msgstr "Coda NICHT auf neuer Zeile: benutze \\nobreak" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) +msgid "Coda on new line: DON'T use \\nobreak" +msgstr "Coda auf neuer Zeile: NICHT \\nobreak benutzen" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) +msgid "\\noBreak" +msgstr "\\noBreak" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" +msgstr "Her beginnt der Trick!" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) +msgid "" +"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " +"lines." +msgstr "" +"\\cadenzaOn unterdrückt die Taktzählung und \\stopStaff entfernt Notenlinien" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" +msgstr "Einige Beispiele für mögliche Textanzeige" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) +msgid "text line-aligned" +msgstr "Text an Zeile ausgerichtet" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) +msgid "==================" +msgstr "==================" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) +msgid "Move text to the desired position" +msgstr "Text zur gewünschten Position verschieben" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" +msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·2·.·-3.5·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) +msgid "| s1*0^\\markup { D.S. al Coda } }" +msgstr "|·s1*0^\\markup·{·D.S.·al·Coda·}·}" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) +msgid "text center-aligned" +msgstr "Text zentriert" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) +msgid "====================" +msgstr "====================" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" +msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·6·.·-5.0·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) +msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" +msgstr "|·s1*0^\\markup·{·\\center-column·{·D.S.·\\\"al·Coda\\\"·}·}" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) +msgid "text and symbols center-aligned" +msgstr "Text und Symbole zentriert" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) +msgid "===============================" +msgstr "===============================" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) +msgid "" +"Move text to the desired position and tweak spacing for optimum text " +"alignment" +msgstr "" +"Text zur gewünschten Position verschieben und Platzbedarf für " +"optimalesErgebnis verändern." + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" +msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·8·.·-5.5·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) +msgid "Increasing the unfold counter will expand the staff-free space" +msgstr "" +"wenn der unfold-Zähler höher gesetzt wird, vergrößert sich der Platz ohne " +"System" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) +msgid "Resume bar count and show staff lines again" +msgstr "Taktzählung aufnehmen und Notenlinien anzeigen" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) +msgid "Should Coda be on new line?" +msgstr "Soll Coda auf einer neuen Zeile sein?" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) +msgid "Coda NOT on new line: DON'T use \\break" +msgstr "Coda NICHT auf neuer Zeile: NICHT \\break benutzen" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) +msgid "Coda on new line: use \\break" +msgstr "Coda auf neuer Zeile: \\break benutzen" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) +msgid "Show up, you clef and key!" +msgstr "Schlüssel/Tonart" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) +msgid "Set coda sign as rehearsal mark and adjust size and position" +msgstr "Coda-Zeichen als Übungszeichen setzen und Position/Größe anpassen" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) +msgid "" +"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" +"position" +msgstr "" +"Coda-Zeichen über den Schlüssel setzen abhängig von Zeilenpositionvon Coda" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) +msgid "Coda NOT on new line, use this:" +msgstr "Coda NICHT auf neuer Zeile:" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) +msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" +msgstr "\\once·\\override·Score.RehearsalMark·#'extra-offset·=·#'(·-2·.·1.75·)" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) +msgid "Coda on new line, use this:" +msgstr "Coda auf neuer Zeile:" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) +msgid "The coda" +msgstr "Die Coda" + +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "Erste Taktnummer soll auch gesetzt werden" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) +msgid "Prevent bar numbers at the end of a line and permit them elsewhere" +msgstr "Taktnummern am Zeilenende verbieten und woanders erlauben" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) +msgid "Draw a box round the following bar number(s)" +msgstr "Einen Kasten um die folgenden Taktnummern zeichnen" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) +msgid "Draw a circle round the following bar number(s)" +msgstr "Einen Kreis um die folgenden Taktnummern zeichnen" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" +msgstr "Metronomangabe unter dem System" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) +msgid "Rehearsal marks below the staff" +msgstr "Übungszeichen unter dem System" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) +msgid "Bassklarinette" +msgstr "Bassklarinette" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) +msgid "Perkussion" +msgstr "Schlagzeug" + +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:24 (context id) +#, fuzzy +msgid "voc" +msgstr "Gesang" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) +msgid "quoteTest" +msgstr "zitatTest" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) +msgid "french horn" +msgstr "Waldhorn" + +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) +msgid "quoteMe" +msgstr "zitiereMich" + +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) +msgid "original" +msgstr "Original" + +#. Documentation/snippets/recorder-fingering-chart.ly:38 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "Umfang für Paetzold-Kontrabassblockflöte" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) +msgid "startAcciaccaturaMusic" +msgstr "BeginVorschlagNoten" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) +msgid "stopAcciaccaturaMusic" +msgstr "EndVorschlagNoten" + +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) +msgid "To use the setting globally, uncomment the following line:" +msgstr "Um die Einstellung global zu benutzen, diese Zeile benutzen:" + +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) +msgid "\\override VerticalAxisGroup #'remove-first = ##t" +msgstr "\\override·VerticalAxisGroup·#'remove-first·=·##t" + +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) +msgid "To use the setting globally, comment this line," +msgstr "Um Einstellung global zu benutzen, folgende Zeile auskommentieren" + +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) +msgid "uncomment the line in the \\layout block above" +msgstr "und die Zeile im \\layout-Block oben benutzen" + +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) +msgid "Default beaming" +msgstr "Standartbebalkung" + +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) +msgid "Set new values for beam endings" +msgstr "Neue Werte für Balkenenden" + +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) +msgid "Macro to print single slash" +msgstr "Makro um einzelnen Strich zu setzen" + +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) +msgid "rs" +msgstr "rs" + +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) +msgid "Function to print a specified number of slashes" +msgstr "Funktoin, um eine bestimmte Anzahl an Strichen zu setzen" + +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) +msgid "comp" +msgstr "comp" + +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "Beethoven, Op. 81a" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "Klaviersonate 26 - Das Lebewohl" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "2. Satz - Abwesenheit" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "Takte 31--34" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "\\override SpacingSpanner #'strict-grace-spacing = ##t" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +#, fuzzy +msgid "sopranonotes" +msgstr "Sopran" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +#, fuzzy +msgid "sopranowords" +msgstr "SopranText" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +#, fuzzy +msgid "altonotes" +msgstr "AltNoten" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +#, fuzzy +msgid "altowords" +msgstr "AltText" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +#, fuzzy +msgid "tenornotes" +msgstr "TenorNoten" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +#, fuzzy +msgid "tenorwords" +msgstr "TenorText" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +#, fuzzy +msgid "bassnotes" +msgstr "BassNoten" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +#, fuzzy +msgid "basswords" +msgstr "BassText" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "Strophe" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) +msgid "NoStem" +msgstr "KeinHals" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) +msgid "NoNoteHead" +msgstr "KeinNotenkopf" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) +msgid "ZeroBeam" +msgstr "NullBalken" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) +msgid "staffTabLine" +msgstr "systemTabZeile" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated with a gridline" +msgstr "" +"Zeigt eine horizontale Zeile. Vertikale Linie (wie eine Taktlinie) wirdmit " +"einer Gitterlinie simuliert" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) +msgid "" +"disable the following line to see the the noteheads while writing the song" +msgstr "" +"nächste Zeile auskommentieren, um Notenköpfe während des Schreibens zu sehen" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) +msgid "The beam between 8th-notes is used to draw the push-line" +msgstr "Balken zwischen Achteln wird benutzt um Zug-Linie zu zeichnen" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" +msgstr "Zug-Linie schnell schreiben:" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) +msgid "" +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" +msgstr "" +"1. wiederholt 'c·c·c·c·c·c·c·c·|' über die gesamte Länge des Stückes " +"schreiben" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) +msgid "2. uncomment the line \\NoNoteHead" +msgstr "2. \\NoNoteHead auskommentieren" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) +msgid "3. compile" +msgstr "3. kompilieren" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." +msgstr "4. Positionen mit Zugrichtungsänderung markieren." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) +msgid "" +"In the score-picture click on the position the push- or pull-part starts" +msgstr "im Partiturbild auf die Position der Zug- oder Schub-Anfänge klicken" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) +msgid "(on the noteHead, the cursor will change to a hand-icon)." +msgstr "(über dem Notenkopf ändert sich die Maus in eine Hand)." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) +msgid "The cursor in the source code will jump just at this position." +msgstr "" +"Die Maus in der Quelldatei befindet sich dann an der gewünschten Position" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) +msgid "a) If a push-part starts there, replace the 'c' by an 'e['" +msgstr "a) wenn ein Schub hier beginng, 'c' mit 'e[' ersetzen" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) +msgid "b) If a pull-part starts there, replace the 'c' by an 's'" +msgstr "b) wenn ein Zug hier beginnt, 'c' mit 's' ersetzen" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." +msgstr "5. in den Überschreibmodus wechseln mit der \"Einfg\"-Taste." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" +msgstr "6. Für Zug 'c' mit 's' überschreiben." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" +msgstr "7. Für jeden Schub das letzte 'c' mit 'e]' ersetzen." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" +msgstr "8. In den Einfügen-Modus wechseln." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) +msgid "" +"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " +"e] s s)" +msgstr "" +"9. Es sollte jetzt aussehen wie (s·s·e[·c·|·c·c·c·c·c·c·c·c·|·c·c·c·c·c·c·e]" +"·s·s)" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) +msgid "10. re-enable the line \\NoNoteHead" +msgstr "10 \\NoNoteHead wieder einkommentieren" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" +msgstr "Akkordeonmelodie in Tabulaturen-Partitur" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) +msgid "1. Place a copy of the piano melody below" +msgstr "1. Eine Kopie der Klaviermelodie unten benutzen" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) +msgid "" +"2. Separate piano melody into pull- and push-parts according to the " +"staffTabLine you've already made" +msgstr "" +"2. Klaviermelodie in Zug- und Schubteile teilen entsprechend systemTabZeile, " +"was schon fertig ist" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then change the second line using the transformation paper" +msgstr "" +"3. Für jede Zeile: verdoppele die Zeile. die erste bleibt als Referenz, die " +"zweite wirdmit dem Transformationspapier verändert" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" +msgstr "oder den Makros 'conv2diaton·push.bsh'·und·'conv2diaton·pull.bsh'·" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) +msgid "Tips:" +msgstr "Tipps:" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) +msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" +msgstr "- In jEdit Suchen und Ersetzen die Option wählen: 'Keep Dialog'" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) +msgid "AccordionTabTwoCBesDur" +msgstr "AccordionTabTwoCBesDur" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) +msgid "pull 1" +msgstr "Zug 1" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" +msgstr "8·8·8·|" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) +msgid "push 2" +msgstr "Schub 2" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" +msgstr "4····|" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) +msgid "pull 3" +msgstr "Zug 3" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) +msgid "2 r8 }" +msgstr "2·r8·}" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "AkkordionTab" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) +msgid "1. Place a copy of the piano melody above" +msgstr "1. Eine Kopie der Klaviermelodie oben machen" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then" +msgstr "" +"3. Für jede Zeile: Zeile verdoppeln. Erste bleibt unverändert (Referenz), " +"dann" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) +msgid "change the second line using the transformation paper" +msgstr "wird die zweite anhand des Transformationspapiers verändert" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "-" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "Die·vertikale·Linie·(wie·eine·Taktlinie) im" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" +msgstr "System BassRhythmus·ist von·einer·Gitterlinie·simuliert" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) +msgid "4/4 - tact. How many beats per bar" +msgstr "4/4-Takt. Wie viele Takzeiten im Takt" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) +msgid "The following line has to be adjusted O-F-T-E-N." +msgstr "Die nächste Zeile muss sehr oft angepasst werden" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) +msgid "staffVoice" +msgstr "systemStimme" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" +msgstr "asystemStimme" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) +msgid "staffAccordionMel" +msgstr "systemAkkordionMel" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," +msgstr "Versetzungszeichen für jede Note," + +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." +msgstr "im Rest des Taktes nicht erinnern." + +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) +msgid "BassRhytm" +msgstr "BassRhythmus" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) +msgid "LyricBassRhythmI" +msgstr "LyricBassRhythmI" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) +msgid "staffBassRhytm" +msgstr "systemBassRhythmus" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "SystemBass" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) +msgid "" +"This is not a RhythmicStaff because it must be possible to append lyrics." +msgstr "Das ist kein RhythmicStaff weil hier Text hinzugefügt werden muss" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) +msgid "x.y" +msgstr "x.y" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated by a grid" +msgstr "" +"Zeigt eine horizontale Linie. Die vertikale Linie (wie eine Taktlinie) " +"istvon einer Gitterlinie simuliert" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" +msgstr "" +"Suche 'grid' (Gitter) in dieser Seite um alle wichtigen Funktionen zu finden" + +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +#, fuzzy +msgid "notes" +msgstr "den Ambitusnoten gesetzt werden müssen." + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "Genauso wie \\flageolet, nur etwas kleiner" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" +msgstr "Die zweite Fermate wird ignoriert!" + +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "NR 1.5 Gleichzeitig erscheinende Noten" + +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "L. v. Beethoven, Op. 111" + +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "Klaviersonate 32" + +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "2. Satz: Arietta - Adagio molto semplice e cantabile" + +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "Takte 208--118" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +msgid "trillFlat" +msgstr "TrillerB" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "RH Stimme 1" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "RH Stimme 2" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +msgid "LH staff" +msgstr "LH-System" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) +msgid "verseI" +msgstr "StropheI" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) +msgid "verseII" +msgstr "StropheII" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "Akkorde für die Akkordbezeichnung und Bunddiagramme hierher" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) +msgid "staffMelody" +msgstr "systemMelodie" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "Noten hierher" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) +msgid "voiceMelody" +msgstr "stimmeMelodie" + +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "title = \\\"Le Lac des Cygnes\\\"" + +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "subtitle = \\\"Danse Napolitaine\\\"" + +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" + +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "arranger = \\\"arr. Laurence Sardain\\\"" + +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "footer = \\\"Mutopia-2006/12/22-896\\\"" + +#. Documentation/snippets/staff-headword.ly:38 (variable) +msgid "trompette" +msgstr "trompete" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "tambourin" + +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "tambourinMidi" + +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "prima" + +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "obenA" + +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "untenA" + +#. Documentation/snippets/stemlets.ly:36 (comment) +msgid "N.B. use Score.Stem to set for the whole score." +msgstr "Score.Stem benutzen, um es für die gesamte Partitur zu setzen." + +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "stringNumberSpanner" + +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) +msgid "violinOne" +msgstr "GeigeEins" + +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) +msgid "violinTwo" +msgstr "GeigeZwei" + +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) +msgid "viola" +msgstr "Bratsche" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) +msgid "piece.ly" +msgstr "piece.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) +msgid "(This is the global definitions file)" +msgstr "(Globale Definitionen)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) +msgid "Violinone" +msgstr "Geigeeins" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) +msgid "*********************************" +msgstr "**********************************" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) +msgid "Violintwo" +msgstr "Geigezwei" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) +msgid "Viola" +msgstr "Bratsche" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) +msgid "Cello" +msgstr "Cello" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) +msgid "**********************************" +msgstr "**********************************" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) +msgid "These are the other files you need to save on your computer" +msgstr "Das sind die anderen Dateien, die gespeichert werden müssen" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) +msgid "score.ly" +msgstr "score.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) +msgid "(This is the main file)" +msgstr "(Das ist die Hauptdatei)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) +#, python-format +msgid "" +"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " +"separate file" +msgstr "" +"\\include \\\"piece.ly\\\" %%% Zeile einkommentieren, wenn eine " +"extra Datei benutzt wird" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) +msgid "{ Uncomment this block when using separate files" +msgstr "{ Diesen Block einkommentieren, wenn extra Dateien benutzt werden" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) +msgid "vn1.ly" +msgstr "vn1.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) +msgid "(This is the Violin 1 part file)" +msgstr "(Stimme der ersten Geige)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) +msgid "vn2.ly" +msgstr "vn2.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) +msgid "(This is the Violin 2 part file)" +msgstr "(Stimme der zweiten Geige)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) +msgid "vla.ly" +msgstr "vla.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) +msgid "(This is the Viola part file)" +msgstr "(Stimme der Bratsche)" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) +msgid "vlc.ly" +msgstr "vlc.ly" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) +msgid "(This is the Cello part file)" +msgstr "(Stimme des Cellos)" + +#. Documentation/snippets/subdividing-beams.ly:78 (comment) +msgid "Set beam sub-group length to an eighth note" +msgstr "Balkenuntergruppenlänge als Achtel definieren" + +#. Documentation/snippets/subdividing-beams.ly:83 (comment) +msgid "Set beam sub-group length to a sixteenth note" +msgstr "Balkenuntergruppenlänge als Sechszehntel definieren" + +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) +msgid "ignore" +msgstr "ignorieren" + +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "NR 1.8 Text" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "L. v. Beethoven, Op. 110" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "Klaviersonate 31" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "Takte 1--7" + +#. Documentation/snippets/text-headword.ly:45 (comment) +msgid "RH staff" +msgstr "RH-System" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) +msgid "New command to add a three sided box, with sides north, west and south" +msgstr "" +"Neuer Befehl um einen Kasten mit drei Seiten (Nord, West und Süd) zu " +"erstellen" + +#. Documentation/snippets/three-sided-box.ly:18 (comment) +msgid "Based on the box-stencil command defined in scm/stencil.scm" +msgstr "Basierend auf dem box-stencil-Befehl, definiert in scm/stencil.scm" + +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" +msgstr "" +"Achtung: \\\";\\\" wird benutzt, um eine Zeile in Scheme auszukommentieren." + +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" +msgstr "" +"Der entsprechende Beschriftungbefehl, basierend auf dem \\box-Befehl, " +"definiert" + +#. Documentation/snippets/three-sided-box.ly:34 (comment) +msgid "in scm/define-markup-commands.scm" +msgstr "in scm/define-markup-commands.scm" + +#. Documentation/snippets/three-sided-box.ly:46 (comment) +msgid "Test it:" +msgstr "testen:" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "Den Stil permanent ändern" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +msgid "Revert to default style:" +msgstr "Zurück zum Standard:" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "single-digit (einfache Zahl)-Stil für die nächste Taktangabe" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) +msgid "make the staff lines invisible on staves" +msgstr "Taktstriche auf dem System unsichtbar machen" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) +msgid "incipitDiscantus" +msgstr "incipitDiscantus" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) +msgid "incipitAltus" +msgstr "IncipitAltus" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) +msgid "incipitTenor" +msgstr "IncipitTenor" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) +msgid "incipitBassus" +msgstr "IncipitBassus" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) +msgid "" +"StaffGroup is used instead of ChoirStaff to get bar lines between systems" +msgstr "" +"StaffGroup wird anstelle von ChoirStaff benutzt, um Taktstriche zwischen " +"Systemen zu haben" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) +msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" +msgstr "Gesangstext von Bass außerhalb der StaffGroup, um Taktstriche" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) +msgid "between the lyrics." +msgstr "zwischen dem Text ·zu·vermeiden" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" +msgstr "" +"die nächsten drei Anweisungen sind, um den Text zwischen den Taktstriche zu " +"halten" + +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) +msgid "naturalizeMusic" +msgstr "AuflösungszeichenNoten" + +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) +msgid "The default treble clef" +msgstr "Standard-Sopranschlüssel" + +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) +msgid "The standard bass clef" +msgstr "Standard-Bassschlüssel" + +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) +msgid "The baritone clef" +msgstr "Baritonschlüssel" + +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) +msgid "The standard choral tenor clef" +msgstr "Standard-Chortenorschlüssel" + +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) +msgid "A non-standard clef" +msgstr "Nicht-Standard-Schlüssel" + +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) +msgid "The following clef changes do not preserve" +msgstr "Folgende Schlüsselwechsel erhalten nicht" + +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) +msgid "the normal relationship between notes and clefs:" +msgstr "das normale Verhältnis zwischen Noten und Schlüsseln" + +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) +msgid "Return to the normal clef:" +msgstr "Wieder der normale Schlüssel:" + +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +msgid "Abreviations" +msgstr "Abkürzungen" + +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "db" + +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "dub" + +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "dubetc" + +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "ub" + +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "udb" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "udbetc" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "fermaTa" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +msgid "accel" +msgstr "accel" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "ritar" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +msgid "Strings" +msgstr "Saiten" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "svib" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "pvib" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "mvib" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "sulp" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +msgid "norm" +msgstr "norm" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +msgid "quatre" +msgstr "quatre" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "Noten verschieben" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "shift" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "shifta" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "shiftb" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "Klammer" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "aniente = \\\"a niente\\\"" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "aniente" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +msgid "tupletbp" +msgstr "tupletbp" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "Fähnchen [Notenkopf - Hals]" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +msgid "noflag" +msgstr "keinFähnchen" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "Funktionen" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "Instrumente" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "GeigeSolo" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "Takt 1" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "Takt 2" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "Takt 3" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "Takt 4" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "Takt 5" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "Takt 6" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "\\featherDurations #(ly:make-moment 2 3)" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "Takt 7" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "Takt 8" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "Takt 9" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +msgid "Score" +msgstr "Partitur" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +#, fuzzy +msgid "testnotes" +msgstr "StrophenNoten" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" +msgstr "Grobs für jeden Notenkopf anzeigen:" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "\\override NoteHead #'before-line-breaking = #display-grobs" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" +msgstr "oder nur für einen:" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) +msgid "parallelogram" +msgstr "Parallelogramm" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +msgid "myNoteHeads" +msgstr "meineNotenköpfe" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) +msgid "normalNoteHeads" +msgstr "normaleNotenköpfe" + +#. Documentation/snippets/utf-8.ly:19 (comment) +msgid "end verbatim - this comment is a hack to prevent texinfo.tex" +msgstr "Ende von verbatim -- Dieser Kommentar ist ein Trick um texinfo.tex" + +#. Documentation/snippets/utf-8.ly:20 (comment) +msgid "from choking on non-European UTF-8 subsets" +msgstr "" +"daran zu hindern, sich an nicht-europäische UTF-8-Untergruppen zu stören" + +#. Documentation/snippets/utf-8.ly:22 (comment) +msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" +msgstr "" +"Diese Datei mit einem Editor bearbeiten, der in Unicode speichern kann, wie " +"etwa GVIM, GEDIT, Emacs" + +#. Documentation/snippets/utf-8.ly:40 (comment) +msgid "Cyrillic font" +msgstr "Kyrillische Schrift" + +#. Documentation/snippets/utf-8.ly:41 (variable) +msgid "bulgarian" +msgstr "Bulgarisch" + +#. Documentation/snippets/utf-8.ly:45 (variable) +msgid "hebrew" +msgstr "Hebräisch" + +#. Documentation/snippets/utf-8.ly:49 (variable) +msgid "japanese" +msgstr "Japanisch" + +#. Documentation/snippets/utf-8.ly:56 (comment) +msgid "\\\"a legal song to you\\\"" +msgstr "\\\"a·legal·song·to·you\\\"" + +#. Documentation/snippets/utf-8.ly:57 (variable) +msgid "portuguese" +msgstr "Portugiesisch" + +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +msgid "upline" +msgstr "upline" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) +msgid "leftbrace" +msgstr "linkeKlammer" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) +msgid "rightbrace" +msgstr "rechteKlammer" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) +msgid "dropLyrics" +msgstr "Textnachunten" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) +msgid "raiseLyrics" +msgstr "Textnachoben" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) +msgid "skipFour" +msgstr "überspringeVier" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) +msgid "lyricsA" +msgstr "TextA" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) +msgid "lyricsB" +msgstr "TextB" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) +msgid "lyricsC" +msgstr "TextC" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) +msgid "lyricsD" +msgstr "TextD" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) +msgid "m" +msgstr "m" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) +msgid "sopMusic" +msgstr "SoprNoten" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) +msgid "sopWords" +msgstr "SopranText" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:99 (context id) +msgid "women" +msgstr "frauen" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) +msgid "men" +msgstr "Männer" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) +msgid "we could remove the line about this with the line below, since we want" +msgstr "" +"die Zeile oberhalb könnte mir der Zeile unterhalb entfernt werden, weil" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) +msgid "the alto lyrics to be below the alto Voice anyway." +msgstr "der Alt-Text sowieso unter der Altstimme sein soll" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +#, fuzzy +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" +msgstr "\\new·Lyrics·\\lyricsto·altos·\\altoWords" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) +msgid "again, we could replace the line above this with the line below." +msgstr "die Zeile oberhalb könnte mit der Zeile unterhalb ersetzt werden" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +#, fuzzy +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" +msgstr "\\new·Lyrics·\\lyricsto·basses·\\bassWords" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +#, fuzzy +msgid "refrain" +msgstr "RefrainB" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +#, fuzzy +msgid "SoloNotes" +msgstr "HornNoten" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +#, fuzzy +msgid "SoloLyrics" +msgstr "SoprZweiText" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +#, fuzzy +msgid "SopranoNotes" +msgstr "HornNoten" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +#, fuzzy +msgid "SopranoLyrics" +msgstr "SoprText" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +#, fuzzy +msgid "BassNotes" +msgstr "BassNoten" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +#, fuzzy +msgid "BassLyrics" +msgstr "BassText" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +#, fuzzy +msgid "SoloVoice" +msgstr "topStimme" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +#, fuzzy +msgid "SopranoVoice" +msgstr "SopranNoten" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +#, fuzzy +msgid "BassVoice" +msgstr "BassNoten" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" +msgstr "" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) +msgid "voltaMusic" +msgstr "KlammerNoten" + +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "VoltaAdLib" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "Tschaikowsky" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "Nussknackersuite: VII: Danse des mirlitons (Tanz der Rohrflöten)" + +msgid "Up:" +msgstr "NachOben:" + +msgid "Next:" +msgstr "Weiter:" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:269 (comment) -#. input/lsr/incipit.ly:280 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:286 (comment) -msgid "\\remove \\\"Forbid_line_break_engraver\\\"" -msgstr "\\remove·\\\"Forbid_line_break_engraver\\\"" +msgid "Previous:" +msgstr "Zurück:" -#. input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:75 (variable) -#. input/lsr/clusters.ly:27 (variable) -msgid "fragment" -msgstr "Frament" +msgid "Appendix " +msgstr "Anhang " -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:29 (comment) -msgid "Automatic beams two per two in 4/4 or 2/2 time signature" -msgstr "Automatische Balken zwei und zwei in 4/4 oder 2/2-Takten" +msgid "Footnotes" +msgstr "Fußnoten" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:30 (comment) -msgid "_____" -msgstr "_____" +msgid "Table of Contents" +msgstr "Inhaltsverzeichnis" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:31 (comment) -msgid "Default | | | |" -msgstr "Standard····|·|·|·|" +#~ msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +#~ msgstr "Stimme \\\"1\\\" Stimme \\\"2\\\"" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:32 (comment) -msgid "_ _" -msgstr "_..._" +#~ msgid "versewords" +#~ msgstr "StrophenText" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:33 (comment) -msgid "Required | | | |" -msgstr "Benötigt····|·|·|·|" +#~ msgid "refrainnotesA" +#~ msgstr "RefrainNotenA" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:35 (comment) -msgid "macro for beamed two per two in 2/2 and 4/4 time signature" -msgstr "Makro für bebalkte zwei und zwei in 2/2 und 4/4 Takten" +#~ msgid "refrainnotesB" +#~ msgstr "RefrainNotenB" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:36 (variable) -msgid "qBeam" -msgstr "qBalken" +#~ msgid "refrainwordsA" +#~ msgstr "RefrainTextA" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:49 (comment) -msgid "Use the macro" -msgstr "Makro benutzen" +#~ msgid "refrainwordsB" +#~ msgstr "RefrainTextB" -#. input/lsr/avoiding-collisions-of-chord-fingering-with-beams.ly:41 (comment) -msgid "Corrected to avoid collisions" -msgstr "Korrigiert, um Zusammenstöße zu vermeiden" +#~ msgid "refrainA" +#~ msgstr "RefrainA" -#. input/lsr/beam-endings-in-score-context.ly:28 (comment) -msgid "Set default beaming for all staves" -msgstr "Automatische Bebalkung für alle Systeme" +#~ msgid "set time signature and key" +#~ msgstr "Taktangabe und Tonart setzen" -#. input/lsr/beam-endings-in-score-context.ly:36 (comment) -msgid "Modify beaming for just this staff" -msgstr "Balken nur für dieses System verändern" +#~ msgid "left-padding and right-padding" +#~ msgstr "" +#~ "left-padding (Verschieben nach rechts) und right-padding (Verschieben " +#~ "nach links)" -#. input/lsr/beam-endings-in-score-context.ly:42 (comment) -msgid "Inherit beaming from Score context" -msgstr "Bebalkung vom Score-Kontext geerbt" +#~ msgid "Custom titles" +#~ msgstr "Eigene Titel" -#. input/lsr/beam-endings-in-score-context.ly:48 (comment) -msgid "Modify beaming for this voice only" -msgstr "Balken nur für diese Stimme ändern" +#~ msgid "this does nothing" +#~ msgstr "Das macht gar nichts" -#. input/lsr/beam-grouping-in-7-8-time.ly:40 (comment) -msgid "rhythm 2-3-2" -msgstr "Rhythmus 2-3-2" +#~ msgid "a break here would work" +#~ msgstr "ein Umbruch hier würde funktionieren" -#. input/lsr/book-parts.ly:21 (comment) -msgid "book paper, which is inherited by all children bookparts" -msgstr "book-Papier, wird von allen untergeordneten book-Abschnitten geerbt" +#~ msgid "as does this break" +#~ msgstr "wie dieser Umbruch" -#. input/lsr/book-parts.ly:24 (comment) -msgid "Page footer: add a different part-tagline at part last page" -msgstr "Seitenfuß: eine andere tagline für letzte Seite des Abschnitts" +#~ msgid "now the break is allowed" +#~ msgstr "jetzt ist der Umbruch erlaubt" -#. input/lsr/book-parts.ly:28 (comment) -msgid "Copyright header field only on book first page." -msgstr "Copyright-Feld nur auf erster Seite von book" +#~ msgid "Since space is small and there is no minimum-distance, the distance" +#~ msgstr "Da der Platz gering ist und minimum-distance nicht vorhanden ist," -#. input/lsr/book-parts.ly:32 (comment) -msgid "Part tagline header field only on each part last page." -msgstr "Abschnitt-tagline-Feld nur auf letzter Seite jedes Abschnitts" +#~ msgid "Since space is small and nothing sticks out very far, the distance" +#~ msgstr "Da der Platz gering ist und nichts übersteht, wird der" -#. input/lsr/book-parts.ly:36 (comment) -msgid "Tagline header field only on book last page." -msgstr "Tagline-Feld nur auf letzter Seite von book" +#~ msgid "" +#~ "between this staff and the next will be determined by minimum-distance." +#~ msgstr "" +#~ "Abstand zwischen dem System und dem nächsten von minimum-distance " +#~ "bestimmt." -#. input/lsr/book-parts.ly:43 (comment) -msgid "book header, which is inherited by the first bookpart" -msgstr "Kopf von book, wird vom ersten Abschnitt in book geerbt" +#~ msgid "By default, Lyrics are placed close together. Here, we allow them to" +#~ msgstr "Standardmäßig wird Gesangstext eng beeinander gesetzt. Hier darf" -#. input/lsr/book-parts.ly:52 (comment) -msgid "a different page breaking function may be used on each part" -msgstr "" -"andere Seitenumbruchfunktionen können für jeden Abschnitt benutzt werden" +#~ msgid "be stretched more widely." +#~ msgstr "er etwas mehr Platz einnehmen." -#. input/lsr/breathing-signs.ly:19 (comment) -msgid "this bar contains no \\breathe" -msgstr "Dieser Takt hat kein \\breathe" +#~ msgid "Paper and pages" +#~ msgstr "Papier und Seiten" -#. input/lsr/breathing-signs.ly:21 (comment) -msgid "Modern notation:" -msgstr "Moderne Notation:" +#~ msgid "Paper size" +#~ msgstr "Papierformat" -#. input/lsr/breathing-signs.ly:22 (comment) -msgid "by default, \\breathe uses the rcomma, just as if saying:" -msgstr "von sich aus, \\breathe benutzt rcomma, also ob man schreibt:" +#~ msgid "Page formatting" +#~ msgstr "Seitenformatierung" -#. input/lsr/breathing-signs.ly:23 (comment) -msgid "" -"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" -"\\\")" -msgstr "" -"\\override·BreathingSign·#'text·=·#(make-musicglyph-markup·\\\"scripts.rcomma" -"\\\")" +#~ msgid "Vertical dimensions" +#~ msgstr "Vertikale Dimensionen" -#. input/lsr/breathing-signs.ly:26 (comment) -msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" -msgstr "rvarcomma·und·lvarcomma sind Variationen von rcomma und lcomma" +#~ msgid "Horizontal dimensions" +#~ msgstr "Horizontale Dimensionen" -#. input/lsr/breathing-signs.ly:27 (comment) -msgid "N.B.: must use Staff context here, since we start a Voice below" -msgstr "Staff-Kontext benötigt, weil ein Voice-Kontext begonnen wird" +#~ msgid "Music layout" +#~ msgstr "Notenlayout" -#. input/lsr/breathing-signs.ly:31 (comment) -msgid "vee" -msgstr "vau" +#~ msgid "Vertical spacing inside a system" +#~ msgstr "Vertikale Abstände innerhalb eines Systems" -#. input/lsr/caesura-railtracks-with-fermata.ly:28 (comment) -msgid "construct the symbol" -msgstr "Das Symbol konstruieren" +#~ msgid "the RehearsalMark will be centered above the Key Signature" +#~ msgstr "RehearsalMark wird über der Tonart (KeySignature) zentriert" -#. input/lsr/caesura-railtracks-with-fermata.ly:37 (comment) -msgid "set the breathe mark back to normal" -msgstr "Atemzeichen auf Standard zurücksetzen" +#~ msgid "Common argument types" +#~ msgstr "Übliche Argumenttypen" -#. input/lsr/center-text-below-hairpin-dynamics.ly:27 (variable) -msgid "hairpinWithCenteredText" -msgstr "GabelmitzentriertemText" +#~ msgid "textScriptCenterOnNote" +#~ msgstr "TextBeschriftungAufMitteDerNote" -#. input/lsr/center-text-below-hairpin-dynamics.ly:39 (variable) -msgid "hairpinMolto" -msgstr "GabelMolto" +#~ msgid "oboeMusic" +#~ msgstr "OboeNoten" -#. input/lsr/center-text-below-hairpin-dynamics.ly:40 (variable) -msgid "hairpinMore" -msgstr "GabelMehr" +#~ msgid "bassoonMusic" +#~ msgstr "FagottNoten" -#. input/lsr/changing--flageolet-mark-size.ly:23 (variable) -msgid "smallFlageolet" -msgstr "kleinFlageolett" +#~ msgid "tromboneMusic" +#~ msgstr "PosauneNoten" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:34 (comment) -msgid "The following is only here to print the names of the" -msgstr "Das hier nur, damit die Bezeichnungen der Akkordstile" +#~ msgid "hornIIMusic" +#~ msgstr "HornzweiNoten" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:35 (comment) -msgid "chords styles; it can be removed if you do not need to" -msgstr "gesetzt werden, kann entfernt werden, wenn nicht" +#~ msgid "it works only if you wrap the note inside a chord. By default," +#~ msgstr "es funktioniert, wenn die Note in einen Akkord gesetzt wird." -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) -msgid "print them." -msgstr "gebraucht wird." +#~ msgid "all articulations will be printed above, so you have to tweak" +#~ msgstr "Standardmäßig werden alle Artikulation über der Note gesetzt," -#. input/lsr/changing-the-default-text-font-family.ly:17 (comment) -msgid "change for other default global staff size. " -msgstr "Änderung für andere globale Systemgröße" +#~ msgid "the direction." +#~ msgstr "also muss die Richtung korrigiert werden." -#. input/lsr/changing-the-default-text-font-family.ly:19 (comment) -#. input/lsr/engravers-one-by-one.ly:191 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:110 (comment) -msgid "{" -msgstr "{" +#~ msgid "a little smaller so lyrics" +#~ msgstr "etwas kleiner, damit der Text" -#. input/lsr/changing-the-default-text-font-family.ly:23 (comment) -#. input/lsr/engravers-one-by-one.ly:194 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:111 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:233 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:163 (comment) -msgid "}" -msgstr "}" +#~ msgid "can be closer to the staff" +#~ msgstr "näher am System sein kann" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:35 (comment) -msgid "Change time signature symbol but keep 3/4 beaming" -msgstr "Taktartsymbol ändern, aber 3/4-Balken" +#~ msgid "" +#~ "This section has not been translated yet; please refer to the manual in " +#~ "English." +#~ msgstr "" +#~ "Dieser Abschnitt wurde noch nicht übersetzt, bitte lesen Sie den " +#~ "Abschnitt in der englischen Notationsreferenz." -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:36 (comment) -msgid "due to unchanged underlying time signature" -msgstr "wegen unveränderter Taktartaufteilung behalten" +#~ msgid "GNU LilyPond --- Learning Manual" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:41 (comment) -msgid "Lose 3/4 beaming now \\time has been changed" -msgstr "3/4-Balken lösen, da \\time geändert wurde" +#~ msgid "Preface" +#~ msgstr "Vorwort" -#. input/lsr/chant-or-psalms-notation.ly:23 (variable) -msgid "stemOn" -msgstr "halsAn" +#~ msgid "Introduction" +#~ msgstr "Einleitung" -#. input/lsr/chant-or-psalms-notation.ly:24 (variable) -msgid "stemOff" -msgstr "halsAus" +#~ msgid "Background" +#~ msgstr "Hintergrund" -#. input/lsr/chord-name-exceptions.ly:24 (comment) -msgid "modify maj9 and 6(add9)" -msgstr "maj9 und 6(add9) verändern" +#~ msgid "Example applications" +#~ msgstr "Beispielanwendung" -#. input/lsr/chord-name-exceptions.ly:25 (comment) -msgid "Exception music is chords with markups" -msgstr "Ausnahmemusik sind Akkorde mit Textbeschriftung" +#~ msgid "About the documentation" +#~ msgstr "Über die Dokumentation" -#. input/lsr/chord-name-exceptions.ly:26 (variable) -msgid "chExceptionMusic" -msgstr "chExceptionMusic" +#~ msgid "About the Learning Manual" +#~ msgstr "Über das Handbuch zum Lernen (LM)" -#. input/lsr/chord-name-exceptions.ly:31 (comment) -msgid "Convert music to list and prepend to existing exceptions." -msgstr "Noten zu Liste konvertieren und an existierende Ausnahmen anhängen" +#~ msgid "About the Music Glossary" +#~ msgstr "Über das Glossar (MG)" -#. input/lsr/chord-name-exceptions.ly:32 (variable) -msgid "chExceptions" -msgstr "chAusnahmen" +#~ msgid "About the Notation Reference" +#~ msgstr "Über die Notationsreferenz (NR)" -#. input/lsr/chord-name-exceptions.ly:36 (variable) -msgid "theMusic" -msgstr "Noten" +#~ msgid "About the Application Usage" +#~ msgstr "Über die Anwendungsbenutzung (AU)" -#. input/lsr/clip-systems.ly:37 (variable) -msgid "origScore" -msgstr "origPartitur" +#~ msgid "About the Snippet List" +#~ msgstr "Über die Schnipselliste" -#. input/lsr/clip-systems.ly:55 (comment) -msgid "Each clip-region is a (START . END) pair" -msgstr "Jede Clip-Region ist ein (START . END) Paar" +#~ msgid "About the Internals Reference" +#~ msgstr "Über die Referenz der Iterna (IR)" -#. input/lsr/clip-systems.ly:56 (comment) -msgid "where both are rhythmic-locations." -msgstr "wobei beide rhythmische Plätze sind" +#~ msgid "Other documentation" +#~ msgstr "Andere Dokumentation" -#. input/lsr/clip-systems.ly:58 (comment) -msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" -msgstr "(make-rhythmic-locations TAKT-NUMMER ZÄHLER NENNER)" +#~ msgid "First steps" +#~ msgstr "Erste Schritte" -#. input/lsr/clip-systems.ly:59 (comment) -msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" -msgstr "bedeutet ZÄHLER/NENNER ganze Noten in den Takt mit Nummer TAKT-NUMMER" +#~ msgid "Entering music and viewing output" +#~ msgstr "Eingabe von Noten und Ansicht des Ergebnisses" -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:13 (comment) -msgid "Association list of pitches to colors." -msgstr "Tonhöhen bestimmten Farben zuweisen." +#~ msgid "UNIX" +#~ msgstr "UNIX" -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:34 (comment) -msgid "Compare pitch and alteration (not octave)." -msgstr "Tonhöhen und Alteration vergleichen (nicht Oktaven)." +#~ msgid "Version number" +#~ msgstr "Versionsnummer" -#. input/lsr/combining-dynamics-with-markup-texts.ly:24 (variable) -msgid "piuF" -msgstr "piuF" +#~ msgid "naturalplusflat" +#~ msgstr "AuflösungB" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:51 (variable) -msgid "musicUp" -msgstr "NotenHoch" +#~ msgid "Working on LilyPond projects" +#~ msgstr "An LilyPond-Projekten arbeiten" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:58 (variable) -msgid "musicDown" -msgstr "NotenRunter" +#~ msgid "Suggestions for writing LilyPond input files" +#~ msgstr "Vorschläge, wie LilyPond-Eingabe-Dateien geschrieben werden sollen" -#. input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly:53 (variable) -#. input/lsr/jazz-combo-template.ly:275 (context id) -msgid "rhythm" -msgstr "Rhythmus" +#~ msgid "When things don't work" +#~ msgstr "Wenn etwas nicht funktioniert" -#. input/lsr/creating-real-parenthesized-dynamics.ly:45 (variable) -msgid "parenF" -msgstr "KlammerF" +#~ msgid "Updating old input files" +#~ msgstr "Alte Eingabe-Dateien aktualisieren" -#. input/lsr/creating-simultaneous-rehearsal-marks.ly:40 (comment) -msgid "the hidden measure and bar line" -msgstr "versteckter Takt und Taktlinie" +#~ msgid "Troubleshooting (taking it all apart)" +#~ msgstr "Fehlersuche (alles auseinandernehmen)" -#. input/lsr/customizing-fretboard-fret-diagrams.ly:40 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:31 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:22 (comment) -msgid "Set global properties of fret diagram" -msgstr "Allgemeine Eigenschaften von Bund-Diagramme bestimmen" +#~ msgid "Minimal examples" +#~ msgstr "Minimalbeispiele" -#. input/lsr/customizing-markup-fret-diagrams.ly:29 (context id) -#. input/lsr/formatting-lyrics-syllables.ly:21 (variable) -#. input/lsr/fret-diagrams-explained-and-developed.ly:20 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:58 (context id) -msgid "mel" -msgstr "Melodie" +#~ msgid "GNU LilyPond --- Application Usage" +#~ msgstr "GNU LilyPond -- Die Programmbenutzung" -#. input/lsr/customizing-markup-fret-diagrams.ly:38 (comment) -msgid "C major for guitar, no barre, using defaults" -msgstr "C-Dur für Gitarre, kein Barre, Standardeinstellungen" +#~ msgid "Install" +#~ msgstr "Installieren" -#. input/lsr/customizing-markup-fret-diagrams.ly:39 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:89 (comment) -msgid "terse style" -msgstr "knapper Stil" +#~ msgid "Precompiled binaries" +#~ msgstr "Vorkompilierte Binär-Pakete" -#. input/lsr/customizing-markup-fret-diagrams.ly:42 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:64 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:48 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:69 (comment) -msgid "C major for guitar, barred on third fret" -msgstr "C-Dur für Gitarre, Barre auf dem dritten Bund" +#~ msgid "Downloading" +#~ msgstr "Herunterladen" -#. input/lsr/customizing-markup-fret-diagrams.ly:43 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:65 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:49 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:70 (comment) -msgid "verbose style" -msgstr "ausführlicher Stil" +#~ msgid "Compiling from source" +#~ msgstr "Aus den Quellen übersetzen" -#. input/lsr/customizing-markup-fret-diagrams.ly:44 (comment) -msgid "size 1.0" -msgstr "Größe 1.0" +#~ msgid "Downloading source code" +#~ msgstr "Den Quellcode herunterladen" -#. input/lsr/customizing-markup-fret-diagrams.ly:45 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:50 (comment) -msgid "roman fret label, finger labels below string, straight barre" -msgstr "römische Bundnummer, Fingersatz unter der Saite, grades Barre" +#~ msgid "Requirements" +#~ msgstr "Voraussetzungen" -#. input/lsr/customizing-markup-fret-diagrams.ly:47 (comment) -msgid "standard size" -msgstr "Standardgröße" +#~ msgid "Running requirements" +#~ msgstr "Voraussetzungen zur Programmbenutzung" -#. input/lsr/customizing-markup-fret-diagrams.ly:66 (comment) -msgid "landscape orientation, arabic numbers, M for mute string" -msgstr "quer liegend, arabische Nummern, M (mute) für stumme Saite" +#~ msgid "Requirements for building documentation" +#~ msgstr "Anforderungen, um die Dokumentation zu übersetzen" -#. input/lsr/customizing-markup-fret-diagrams.ly:67 (comment) -msgid "no barre, fret label down or left, small mute label font" -msgstr "" -"kein Barre, Bundbezeichnung unten oder links, kleine Schrift für stumme Saite" +#~ msgid "Building LilyPond" +#~ msgstr "LilyPond übersetzen" -#. input/lsr/customizing-markup-fret-diagrams.ly:88 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:96 (comment) -msgid "simple D chord" -msgstr "einfacher D-Akkord" +#~ msgid "Compiling" +#~ msgstr "Kompilieren" -#. input/lsr/customizing-markup-fret-diagrams.ly:90 (comment) -msgid "larger dots, centered dots, fewer frets" -msgstr "größere Punkte, zentrierte Punkte, weniger Bünde" +#~ msgid "Compiling for multiple platforms" +#~ msgstr "Für mehrere Plattformen kompilieren" -#. input/lsr/customizing-markup-fret-diagrams.ly:91 (comment) -msgid "label below string" -msgstr "Bezeichnung darunter" +#~ msgid "Compiling outside the source tree" +#~ msgstr "Außerhalb des Quellbaums übersetzen" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:40 (comment) -msgid "add FretBoards for the Cuatro" -msgstr "Bunddiagramme für Cuatro hinzufügen" +#~ msgid "Building documentation" +#~ msgstr "Die Dokumentation übersetzen" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:41 (comment) -msgid "Note: This section could be put into a separate file" -msgstr "Achtung: dieser Abschnitt gehört in eine eigene Datei" +#~ msgid "Commands for building documentation" +#~ msgstr "Befehle um die Dokumentation zu übersetzen" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:42 (comment) -msgid "predefined-cuatro-fretboards.ly" -msgstr "predefined-cuatro-fretboards.ly" +#~ msgid "Building documentation without compiling LilyPond" +#~ msgstr "Die Dokumentation übersetzen ohne LilyPond zu kompilieren" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:43 (comment) -msgid "and \\included into each of your compositions" -msgstr "und wird mit \\include in jede Quelldatei eingefügt" +#~ msgid "Problems" +#~ msgstr "Probleme" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:45 (variable) -msgid "cuatroTuning" -msgstr "cuatroStimmung" +#~ msgid "Bison 1.875" +#~ msgstr "Bison 1.875" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:47 (variable) -msgid "dSix" -msgstr "dSexte" +#~ msgid "Solaris" +#~ msgstr "Solaris" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:48 (variable) -msgid "dMajor" -msgstr "dDur" +#~ msgid "FreeBSD" +#~ msgstr "FreeBSD" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:49 (variable) -msgid "aMajSeven" -msgstr "aGrSept" +#~ msgid "International fonts" +#~ msgstr "Internationale Schriftarten" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:50 (variable) -msgid "dMajSeven" -msgstr "dGrSept" +#~ msgid "Setup" +#~ msgstr "Setup" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:51 (variable) -msgid "gMajor" -msgstr "gDur" +#~ msgid "Setup for specific Operating Systems" +#~ msgstr "Setup für bestimmte Betriebssysteme" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:69 (comment) -msgid "end of potential include file /predefined-cuatro-fretboards.ly" -msgstr "Ende der eigenständigen Datei /predefined-cuatro-fretboards.ly" +#~ msgid "Setup for MacOS X" +#~ msgstr "Einrichtung für MacOS X" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:74 (variable) -msgid "primerosNames" -msgstr "primerosBezeichnungen" +#~ msgid "Using Python scripts on MacOS 10.3 or 10.4" +#~ msgstr "Benutzung von Python-Skripten unter MacOS 10.3 oder 10.4" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:78 (variable) -msgid "primeros" -msgstr "primeros" +#~ msgid "MacOS X on the command line" +#~ msgstr "MacOS X auf der Kommandozeile" -#. input/lsr/demo-midiinstruments.ly:23 (variable) -msgid "baseMelody" -msgstr "basisMelodie" +#~ msgid "jEdit" +#~ msgstr "jEdit" -#. input/lsr/display-bracket-with-only-one-staff-in-a-system.ly:37 (comment) -msgid "Must be lower than the actual number of staff lines" -msgstr "Muss geringer sein als die aktuelle Zahl der Notenlinien" +#~ msgid "TexShop" +#~ msgstr "TexShop" -#. input/lsr/displaying-complex-chords.ly:16 (variable) -msgid "fixA" -msgstr "fixA" +#~ msgid "TextMate" +#~ msgstr "TextMate" -#. input/lsr/displaying-complex-chords.ly:20 (variable) -msgid "fixB" -msgstr "fixB" +#~ msgid "LilyKDE" +#~ msgstr "LilyKDE" -#. input/lsr/double-glissando.ly:20 (comment) -msgid "new voice ( = \\voiceOne), hidden" -msgstr "neue Stimme ( = \\voiceOne), versteckt" +#~ msgid "Reporting bugs" +#~ msgstr "Fehler melden" -#. input/lsr/double-glissando.ly:22 (comment) -msgid "attach glissando to note heads" -msgstr "Glissando an Notenkopf angehängt" +#~ msgid "@command{lilypond-book}: Integrating text and music" +#~ msgstr "@command{lilypond-book}: Noten in den Text integrieren" -#. input/lsr/double-glissando.ly:27 (comment) -msgid "original voice with chords rearranged so that" -msgstr "originale Stimme mit Akkorden umgruppiert," +#~ msgid "Generating LilyPond files" +#~ msgstr "LilyPond-Dateien erstellen" -#. input/lsr/double-glissando.ly:28 (comment) -msgid "glissando is attached to a & c" -msgstr "so dass Glissando an a & c gefügt wird" +#~ msgid "GNU LilyPond --- Notation Reference" +#~ msgstr "GNU LilyPond -- Notationsreferenz" -#. input/lsr/embedding-native-postscript-in-a--markup-block.ly:23 (comment) -msgid "PostScript is a registered trademark of Adobe Systems Inc." -msgstr "PostScript ist eine registrierte Handelsmarke von Adobe Systems Inc." +#~ msgid "The music typesetter" +#~ msgstr "Das Notensatzprogramm" -#. input/lsr/engravers-one-by-one.ly:75 (comment) -msgid "sample music" -msgstr "Beispielnoten" +#~ msgid "not strictly necessary, but a good reminder" +#~ msgstr "nicht unbdingt nötig, aber gut zu erinnern" -#. input/lsr/engravers-one-by-one.ly:76 (variable) -msgid "topVoice" -msgstr "topStimme" +#~ msgid "Writing pitches" +#~ msgstr "Tonhöhen setzen" -#. input/lsr/engravers-one-by-one.ly:84 (variable) -msgid "botVoice" -msgstr "bottomStimme" +#~ msgid "Absolute octave entry" +#~ msgstr "Absolute Oktavenbezeichnung" -#. input/lsr/engravers-one-by-one.ly:92 (variable) -msgid "hoom" -msgstr "hoom" +#~ msgid "Relative octave entry" +#~ msgstr "Relative Oktavenbezeichnung" -#. input/lsr/engravers-one-by-one.ly:103 (variable) -msgid "pah" -msgstr "pah" +#~ msgid "Note names in other languages" +#~ msgstr "Notenbezeichnungen in anderen Sprachen" -#. input/lsr/engravers-one-by-one.ly:113 (comment) -msgid "setup for Request->Element conversion. Guru-only" -msgstr "setup·for·Request->Element·conversion.·Guru-only" +#~ msgid "Changing multiple pitches" +#~ msgstr "Viele Tonhöhen gleichzeitig verändern" -#. input/lsr/engravers-one-by-one.ly:116 (variable) -#. input/lsr/engravers-one-by-one.ly:221 (variable) -#. input/lsr/engravers-one-by-one.ly:234 (variable) -#. input/lsr/engravers-one-by-one.ly:290 (variable) -#. input/lsr/engravers-one-by-one.ly:304 (variable) -msgid "MyStaff" -msgstr "DasSystem" +#~ msgid "Octave checks" +#~ msgstr "Oktavenüberprüfung" -#. input/lsr/engravers-one-by-one.ly:148 (comment) -msgid "explicitly set instrument, so we don't get " -msgstr "explizit Instrument angeben, damit keine" +#~ msgid "Transpose" +#~ msgstr "Transposition" -#. input/lsr/engravers-one-by-one.ly:149 (comment) -msgid "weird effects when doing instrument names for" -msgstr "seltsamen Effekte auftreten, wenn die Instrumentbezeichnungen" +#~ msgid "Displaying pitches" +#~ msgstr "Tonhöhen anzeigen lassen" -#. input/lsr/engravers-one-by-one.ly:150 (comment) -msgid "piano staves" -msgstr "Klaviersysteme erstellt werden" +#~ msgid "Key signature" +#~ msgstr "Tonartbezeichnung" -#. input/lsr/engravers-one-by-one.ly:159 (variable) -#. input/lsr/engravers-one-by-one.ly:248 (variable) -#. input/lsr/engravers-one-by-one.ly:261 (variable) -#. input/lsr/engravers-one-by-one.ly:274 (variable) -msgid "MyVoice" -msgstr "MeineStimme" +#~ msgid "Ottava brackets" +#~ msgstr "Oktavierungsklammern" -#. input/lsr/engravers-one-by-one.ly:174 (comment) -msgid "must come before all" -msgstr "muss vor allem anderen kommen" +#~ msgid "Instrument transpositions" +#~ msgstr "Transposition von Instrumenten" -#. input/lsr/engravers-one-by-one.ly:184 (comment) -msgid "\\consists \\\"Rest_engraver\\\"" -msgstr "\\consists·\\\"Rest_engraver\\\"" +#~ msgid "Automatic accidentals" +#~ msgstr "Automatische Versetzungszeichen" -#. input/lsr/flamenco-notation.ly:46 (comment) -msgid "Cut here ----- Start 'flamenco.ly' " -msgstr "Hier ausschneiden: Beginn von 'flamenco.ly'" +#~ msgid "Special note heads" +#~ msgstr "Besondere Notenköpfe" -#. input/lsr/flamenco-notation.ly:48 (comment) -msgid "Text indicators" -msgstr "Textanweisungen" +#~ msgid "Easy notation note heads" +#~ msgstr "Easy-Notation-Notenköpfe" -#. input/lsr/flamenco-notation.ly:49 (variable) -msgid "abanico" -msgstr "abanico" +#~ msgid "Improvisation" +#~ msgstr "Improvisation" -#. input/lsr/flamenco-notation.ly:50 (variable) -msgid "rasgueaso" -msgstr "rasgueaso" +#~ msgid "Alter durations to triplets" +#~ msgstr "Dauern zu Triolen verändern" -#. input/lsr/flamenco-notation.ly:51 (variable) -msgid "alzapua" -msgstr "alzapua" +#~ msgid "Normal durations" +#~ msgstr "Normale Tondauern" -#. input/lsr/flamenco-notation.ly:53 (comment) -msgid "Finger stroke symbols" -msgstr "Schlag-Symbole" +#~ msgid "Double the duration of chord" +#~ msgstr "Dauer der Akkorde verdoppeln" -#. input/lsr/flamenco-notation.ly:54 (variable) -msgid "strokeUp" -msgstr "SchlagHoch" +#~ msgid "Duration of quarter, appears like sixteenth" +#~ msgstr "Dauer einer Vietel, erscheint vie eine Sechszehntel" -#. input/lsr/flamenco-notation.ly:64 (variable) -msgid "strokeDown" -msgstr "schlagRunter" +#~ msgid "Scale music by *2/3" +#~ msgstr "Noten mit 2/3 skalieren" -#. input/lsr/flamenco-notation.ly:74 (comment) -msgid "Golpe symbol" -msgstr "Golpe-Symbol" +#~ msgid "Scale music by *2" +#~ msgstr "Noten *2 skalieren" -#. input/lsr/flamenco-notation.ly:75 (variable) -msgid "golpe" -msgstr "golpe" +#~ msgid "First alternative: following note is tied normally" +#~ msgstr "Erste Weiche: nächste Note ist normal gebunden" -#. input/lsr/flamenco-notation.ly:89 (variable) -msgid "strokeUpGolpe" -msgstr "SchlagHochGolpe" +#~ msgid "Second alternative: following note has a repeated tie" +#~ msgstr "Zweite Weiche: folgende Note hat einen Wiederholten Bindebogen" -#. input/lsr/flamenco-notation.ly:90 (variable) -msgid "iUpGolpe" -msgstr "iHochGolpe" +#~ msgid "These two lines are just to prettify this example" +#~ msgstr "Die zwei Linien sind nur zur Verschönerung" -#. input/lsr/flamenco-notation.ly:92 (comment) -msgid "Strokes for all fingers" -msgstr "Schläge für alle Finger" +#~ msgid "Print a maxima rest, equal to four breves" +#~ msgstr "Setze Maxima-Pause, gleich vier Breven" -#. input/lsr/flamenco-notation.ly:93 (variable) -msgid "pUp" -msgstr "pHoch" +#~ msgid "Print a longa rest, equal to two breves" +#~ msgstr "Setze Longa-Pause, gleich zwei Breven" -#. input/lsr/flamenco-notation.ly:94 (variable) -msgid "pDown" -msgstr "pRunter" +#~ msgid "Print a breve rest" +#~ msgstr "Setze Breve-Pause" -#. input/lsr/flamenco-notation.ly:95 (variable) -msgid "iUp" -msgstr "iHoch" +#~ msgid "This is valid input, but does nothing" +#~ msgstr "Gültiger Eingabecode, aber tut nichts" -#. input/lsr/flamenco-notation.ly:96 (variable) -msgid "iDown" -msgstr "iRunter" +#~ msgid "Rest measures contracted to single measure" +#~ msgstr "Pausentakte zu einem einzelnen Takt zusammegezogen" -#. input/lsr/flamenco-notation.ly:97 (variable) -msgid "mUp" -msgstr "mHoch" +#~ msgid "Rest measures expanded" +#~ msgstr "Pausentakte \tausklappen" -#. input/lsr/flamenco-notation.ly:98 (variable) -msgid "mDown" -msgstr "mRunter" +#~ msgid "This fails, as the wrong object name is specified" +#~ msgstr "" +#~ "Das funktioniert nicht, weil die falsche Objektbezeichnung angegeben ist" -#. input/lsr/flamenco-notation.ly:99 (variable) -msgid "aUp" -msgstr "aHoch" +#~ msgid "This is correct and works" +#~ msgstr "Das stimmt und funktioniert" -#. input/lsr/flamenco-notation.ly:100 (variable) -msgid "aDown" -msgstr "aRunter" +#~ msgid "Default style" +#~ msgstr "Standardstil" -#. input/lsr/flamenco-notation.ly:101 (variable) -msgid "xUp" -msgstr "xHoch" +#~ msgid "Change to numeric style" +#~ msgstr "Wechsel zum nummerierten Stil" -#. input/lsr/flamenco-notation.ly:102 (variable) -msgid "xDown" -msgstr "xRunter" +#~ msgid "Show all bar numbers" +#~ msgstr "Alle Taknummern anzeigen" -#. input/lsr/flamenco-notation.ly:105 (comment) -msgid "Just handy :)" -msgstr "Sehr geschickt :)" +#~ msgid "Now each staff has its own time signature." +#~ msgstr "Jetzt hat jedes System eine eigene Taktart" -#. input/lsr/flamenco-notation.ly:106 (variable) -msgid "tupletOff" -msgstr "NtoleAus" +#~ msgid "myRhythm" +#~ msgstr "meinRhythmus" -#. input/lsr/flamenco-notation.ly:111 (variable) -msgid "tupletsOff" -msgstr "NtoleAus" +#~ msgid "end 1/16 beams for all time signatures at the 1/16 moment" +#~ msgstr "1/16-Balken für alle Taktarten beim 1/16-Moment beenden" -#. input/lsr/flamenco-notation.ly:116 (variable) -msgid "tupletsOn" -msgstr "NtolenAn" +#~ msgid "end 1/32 beams for all time signatures at the 1/16 moment" +#~ msgstr "1/23-Balken für alle Taktarten beim 1/16-Moment beenden" -#. input/lsr/flamenco-notation.ly:121 (variable) -msgid "headsOff" -msgstr "köpfeAus" +#~ msgid "end beams of all durations in 5/8 time signature at the 2/8 moment" +#~ msgstr "Balken aller Längen im 5/8-Takt am 2/8-Moment beenden" -#. input/lsr/flamenco-notation.ly:127 (variable) -msgid "headsOn" -msgstr "köpfeEin" +#~ msgid "rhythm 3-1-1-2" +#~ msgstr "Rhythmus 3-1-1-2" -#. input/lsr/flamenco-notation.ly:133 (comment) -msgid "Cut here ----- End 'flamenco.ly' " -msgstr "Hier ausschneiden --- Ende 'flamenco.ly' " +#~ msgid "Context not specified - does not work correctly" +#~ msgstr "Kontext nicht angegeben - funktioniert nicht richtig" -#. input/lsr/flat-flags-and-beam-nibs.ly:109 (comment) -msgid "Example 1" -msgstr "Beispiel 1" +#~ msgid "Works correctly with context specified" +#~ msgstr "Funktioniert richtig mit angegebenem Kontext" -#. input/lsr/flat-flags-and-beam-nibs.ly:116 (comment) -msgid "Example 2" -msgstr "Beispiel 2" +#~ msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" +#~ msgstr "Regel annullieren, dass 1/16-Balken im 4/4-Takt am 1/4-Moment enden" -#. input/lsr/flat-flags-and-beam-nibs.ly:123 (comment) -msgid "Example 3" -msgstr "Beispiel 3" +#~ msgid "this won't revert it!" +#~ msgstr "Das macht es nicth rückgängig" -#. input/lsr/flat-flags-and-beam-nibs.ly:137 (comment) -msgid "Example 4" -msgstr "Beispiel 4" +#~ msgid "this will" +#~ msgstr "Das schon" -#. input/lsr/flute-slap-notation.ly:18 (variable) -msgid "slap" -msgstr "schlag" +#~ msgid "revert to non-feathered beams" +#~ msgstr "in nichtgespreizte Balken zurückverwandeln" -#. input/lsr/formatting-lyrics-syllables.ly:16 (comment) -msgid "" -"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" -"msg00215.html" -msgstr "" -"Tipp von http://lists.gnu.org/archive/html/lilypond-user/2007-12/msg00215." -"html" +#~ msgid "pipeSymbol" +#~ msgstr "pipeSymbol" -#. input/lsr/fret-diagrams-explained-and-developed.ly:37 (comment) -msgid "A chord for ukelele, with formatting defined in definition string" -msgstr "Ein Akkord für Ukulele, mit Formatierung in der Definition enthalten" +#~ msgid "MyCadenza" +#~ msgstr "MeineKadenz" -#. input/lsr/fret-diagrams-explained-and-developed.ly:38 (comment) -msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" -msgstr "1.2 * Größe, 4 Saiten, vier Bünde, Fingersatz unterhalb" +#~ msgid "Rhythms" +#~ msgstr "Rhythmus" -#. input/lsr/fret-diagrams-explained-and-developed.ly:39 (comment) -msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" -msgstr "" -"Punktgröße .35 von Bundzwischenraum, Punktposition .55 von Bundzwischenraum" +#~ msgid "Writing rhythms" +#~ msgstr "Rhythmen eingeben" -#. input/lsr/fret-diagrams-explained-and-developed.ly:52 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:72 (comment) -#, python-format -msgid "110% of default size" -msgstr "110% der Standardgröße" +#~ msgid "Durations" +#~ msgstr "Tondauern" -#. input/lsr/grid-lines--changing-their-appearance.ly:33 (comment) -msgid "this moves them up one staff space from the default position" -msgstr "damit werden sie einen Notenlinienzwischenraum hochgeschoben" +#~ msgid "Scaling durations" +#~ msgstr "Tondauern skalieren" -#. input/lsr/grid-lines--changing-their-appearance.ly:51 (comment) -msgid "set up grids" -msgstr "Gitter einstellen" +#~ msgid "Writing rests" +#~ msgstr "Pausen eingeben" -#. input/lsr/grid-lines--changing-their-appearance.ly:53 (comment) -msgid "set the grid interval to one quarter note" -msgstr "den Gitter-Abstand auf eine Viertelnote setzen" +#~ msgid "Invisible rests" +#~ msgstr "Unsichtbare Pausen" -#. input/lsr/grid-lines--changing-their-appearance.ly:59 (comment) -msgid "this moves them to the right half a staff space" -msgstr "" -"damit werden sie nach rechts um einen halben Notenlinienabstand verschoben" +#~ msgid "Full measure rests" +#~ msgstr "Ganztaktige Pausen" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:36 (comment) -msgid "hides staff and notes so that only the grid lines are visible" -msgstr "versteckt System und Noten so dass nur die Gitterlinien sichtbar sind" +#~ msgid "Displaying rhythms" +#~ msgstr "Rhythmen anzeigen lassen" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:43 (comment) -msgid "dummy notes to force regular note spacing" -msgstr "Blindnoten damit die Noten regelmäßig verteilt sind" +#~ msgid "Unmetered music" +#~ msgstr "Musik ohne Metrum" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:59 (comment) -msgid "center grid lines horizontally below note heads" -msgstr "Gitterlinien horizontal unter Notenköpfen zentrieren" +#~ msgid "Polymetric notation" +#~ msgstr "Polymetrische Notation" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:66 (comment) -msgid "set line length and positioning:" -msgstr "Länge und Position von Linien setzen:" +#~ msgid "Automatic note splitting" +#~ msgstr "Automatische Aufteilung von Noten" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:67 (comment) -msgid "two staff spaces above center line on hidden staff" -msgstr "" -"zwei Notenlinienzwischenräume über der Mittellinie auf dem versteckten System" +#~ msgid "Showing melody rhythms" +#~ msgstr "Melodierhythmus anzeigen" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) -msgid "to four spaces below center line on visible staff" -msgstr "bis vier Zwischenräume unter der Mittellinie des sichtbaren Systems" +#~ msgid "Beams" +#~ msgstr "Balken" -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:51 (variable) -msgid "drum" -msgstr "Trommel" +#~ msgid "Automatic beams" +#~ msgstr "Automatische Balken" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:54 (comment) -msgid "Solution 1: Using a simple markup with a particular halign value" -msgstr "" -"Lösung 1: Benutzung von einfacher Beschriftung mit horizontaler Verschiebung" +#~ msgid "Setting automatic beam behavior" +#~ msgstr "Einstellung von automatischen Balken" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:55 (comment) -msgid "" -"Drawback: It's a markup, not a dynamic command, so \\dynamicDown etc. will " -"have no effect" -msgstr "" -"Nachteil: nur Beschriftung, keine Dynamik, also wirkt sich \\dynamicDown usw." -"nicht aus" +#~ msgid "Manual beams" +#~ msgstr "Manuelle Balken" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (variable) -msgid "semppMarkup" -msgstr "semppBeschriftung" +#~ msgid "Bar numbers" +#~ msgstr "Taktzahlen" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) -msgid "" -"Solution 2: Using a dynamic script and shifting with \\once\\override ... " -"#'X-offset = .." -msgstr "" -"Lösung 2: Dynamik-Skript benutzen und mit \\once\\override·...·#'X-" -"offset·=·.. verschieben" +#~ msgid "Bar and bar number checks" +#~ msgstr "Takt- und Taktzahlüberprüfung" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (comment) -msgid "Drawback: \\once\\override needed for every invocation" -msgstr "Nachteil: \\once\\override muss jedes Mal geschrieben werden" +#~ msgid "Rehearsal marks" +#~ msgstr "Übungszeichen" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:60 (variable) -msgid "semppK" -msgstr "semppK" +#~ msgid "Special rhythmic concerns" +#~ msgstr "Besondere rhythmische Fragen" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) -msgid "" -"Solution 3: Padding the dynamic script so the center-alignment puts it to " -"the correct position" -msgstr "" -"Lösung 3: Dynamik-Skript so verschieben mit padding, dass es " -"automatischdurch center-alignment an die richtige Position kommt" +#~ msgid "Aligning to cadenzas" +#~ msgstr "An Kadenzen ausrichten" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) -msgid "" -"Drawback: the padding really reserves the space, nothing else can be there" -msgstr "" -"Nachteil: Die Verschiebung lässt den Platz frei, dort kann nichts anderes " -"stehen" +#~ msgid "Time administration" +#~ msgstr "Verwaltung der Zeiteinheiten" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) -msgid "semppT" -msgstr "semppT" +#~ msgid "roundF" +#~ msgstr "rundF" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) -msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" -msgstr "Lösung 4: Dynamik, Dimensionen des zusätzlichen Textes auf 0 setzen" +#~ msgid "boxF" +#~ msgstr "KastenF" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) -msgid "" -"Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put other " -"stuff there => collisions" -msgstr "" -"Nachteil: LilyPond glaubt, dass \\\"sempre\\\" keinen Platz einnimmt undkann " -"andere Elemente hier hintun --> Kollisionen" +#~ msgid "sfzp" +#~ msgstr "sfzp" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (comment) -msgid "" -"Drawback: Also, there seems to be some spacing, so it's not exactly the " -msgstr "" -"Nachteil: Es gibt offensichtlich noch Ränder, so dass es nicht genau die" +#~ msgid "mfEspress" +#~ msgstr "mfEspress" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:75 (comment) -msgid "same alignment as without the additional text" -msgstr "gleiche Postionierung ist wie ohne den zusätzlichen Text" +#~ msgid "roundFdynamic" +#~ msgstr "rundFDynamik" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:76 (variable) -msgid "semppM" -msgstr "semppM" +#~ msgid "boxFdynamic" +#~ msgstr "KastenFDynamik" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:78 (comment) -msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" -msgstr "" -"Lösung 5: Dynamik mit ausdrücklicher Verschiebung innerhalb von Scheme-" -"Funktion" +#~ msgid "mfEspressDynamic" +#~ msgstr "mfEspressDynamic" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:79 (variable) -msgid "semppG" -msgstr "semppG" +#~ msgid "Attached to notes" +#~ msgstr "An Noten angehängt" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) -msgid "" -"Solution 6: Dynamic with explicit alignment. This has only effect, if one " -"sets X-offset!" -msgstr "" -"Lösung 6: Dynamik mit expliziter Ausrichtung. Das wirkt sich nur dann aus," -"wenn X-offset auch gesetzt wird!" +#~ msgid "Articulations and ornamentations" +#~ msgstr "Artikulationszeichen und Verzierungen" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) -msgid "Drawback: One needs to set DynamicText #'X-offset!" -msgstr "Nachteil: #'X-offset von DynamicText muss gesetzt werden" +#~ msgid "New dynamic marks" +#~ msgstr "Neue Lautstärkezeichen" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (comment) -msgid "" -"Drawback: Aligned at the right edge of the additional text, not at the " -"center of pp" -msgstr "" -"Nachteil: An der rechten Ecke des zusätzlichen Textes ausgerichtet, nichtan " -"der Mitte von pp" +#~ msgid "Curves" +#~ msgstr "Bögen" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:88 (variable) -msgid "semppMII" -msgstr "semppMII" +#~ msgid "Falls and doits" +#~ msgstr "Glissando zu unbestimmter Tonhöhe" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:114 (comment) -msgid "Setting to ##f (false) gives the same resul" -msgstr "Auf falsch (##f) setzen ergibt gleiches Ergebnis" +#~ msgid "Lines" +#~ msgstr "Linien" -#. input/lsr/how-to-change-fret-diagram-position.ly:28 (variable) -#. input/lsr/score-for-diatonic-accordion.ly:61 (variable) -#. input/lsr/showing-chords-at-changes.ly:23 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:40 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:38 (variable) -msgid "harmonies" -msgstr "Harmonien" +#~ msgid "Glissando" +#~ msgstr "Glissando" -#. input/lsr/how-to-change-fret-diagram-position.ly:31 (comment) -msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" -msgstr "DAS IST DER BEFEHL UM AKKORDBEZEICHNUNG ZU VERSCHIEBEN" +#~ msgid "Arpeggio" +#~ msgstr "Arpeggio" -#. input/lsr/how-to-change-fret-diagram-position.ly:34 (comment) -msgid "THIS LINE IS THE SECOND METHOD" -msgstr "DIESE ZEILE IST DIE ZWEITE METHODE" +#~ msgid "Trills" +#~ msgstr "Triller" -#. input/lsr/how-to-change-fret-diagram-position.ly:44 (comment) -msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" -msgstr "DAS IST DER BEFEHL UM DAS BUNDDIAGRAMM ZU VERSCHIEBEN" +#~ msgid "Repeats" +#~ msgstr "Wiederholungszeichen" -#. input/lsr/how-to-change-fret-diagram-position.ly:47 (comment) -msgid "HERE IS THE SECOND METHOD" -msgstr "HIER DIE ZWEITE METHODE" +#~ msgid "Normal repeats" +#~ msgstr "Normale Wiederholungen" -#. input/lsr/incipit.ly:62 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:35 (comment) -msgid "make the staff lines invisible on staves" -msgstr "Taktstriche auf dem System unsichtbar machen" +#~ msgid "Manual repeat marks" +#~ msgstr "Manuelle Wiederholungszeichen" -#. input/lsr/incipit.ly:74 (variable) -#. input/lsr/incipit.ly:75 (context id) -msgid "discantusIncipit" -msgstr "discantusIncipit" +#~ msgid "Written-out repeats" +#~ msgstr "Ausgeschriebene Wiederholungen" -#. input/lsr/incipit.ly:111 (variable) -#. input/lsr/incipit.ly:112 (context id) -msgid "altusIncipit" -msgstr "altusIncipit" +#~ msgid "Short repeats" +#~ msgstr "Kurze Wiederholungen" -#. input/lsr/incipit.ly:127 (comment) -#. input/lsr/incipit.ly:139 (comment) -#. input/lsr/incipit.ly:169 (comment) -#. input/lsr/incipit.ly:178 (comment) -msgid "two measures" -msgstr "zwei Takte" +#~ msgid "Percent repeats" +#~ msgstr "Prozent-Wiederholungen" -#. input/lsr/incipit.ly:147 (variable) -#. input/lsr/incipit.ly:148 (context id) -msgid "tenorIncipit" -msgstr "tenorIncipit" +#~ msgid "Tremolo repeats" +#~ msgstr "Tremolo-Wiederholung" -#. input/lsr/incipit.ly:184 (variable) -#. input/lsr/incipit.ly:185 (context id) -msgid "bassusIncipit" -msgstr "bassusIncipit" +#~ msgid "explicit single voice" +#~ msgstr "explizit eine Stimme" -#. input/lsr/incipit.ly:251 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:258 (comment) -msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" -msgstr "Gesangstext von Bass außerhalb der StaffGroup, um Taktstriche" +#~ msgid "single first note" +#~ msgstr "einzelne erste Note" -#. input/lsr/incipit.ly:252 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:259 (comment) -msgid "between the lyrics." -msgstr "zwischen dem Text ·zu·vermeiden" +#~ msgid "instrumentOne" +#~ msgstr "InstrumentEins" -#. input/lsr/incipit.ly:257 (comment) -msgid "no bar lines in staves" -msgstr "keine Taktstriche auf Systemen" +#~ msgid "instrumentTwo" +#~ msgstr "InstrumentZwei" -#. input/lsr/incipit.ly:260 (comment) -msgid "the next three instructions keep the lyrics between the bar lines" -msgstr "" -"mit den drei nächsten Befehlen wird der Text zwischen den Taktstriche gehalten" +#~ msgid "Bar 3 ..." +#~ msgstr "Takt 3 ..." -#. input/lsr/incipit.ly:275 (comment) -msgid "breaking also at those bar lines where a note overlaps" -msgstr "auch an den Takten umbrechen, wo eine Note aus dem Takt heraussteht" +#~ msgid "Single voice" +#~ msgstr "Eine einzelne Stimme" -#. input/lsr/incipit.ly:276 (comment) -msgid "into the next measure. The command is commented out in this" -msgstr "Der Befehl ist hier auskommentiert" +#~ msgid "Simultaneous expressions" +#~ msgstr "Gleichzeitige Ausdrücke" -#. input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly:16 (variable) -msgid "tuning" -msgstr "Stimmung" +#~ msgid "Clusters" +#~ msgstr "Cluster" -#. input/lsr/jazz-combo-template.ly:52 (comment) -msgid "#(set-global-staff-size 16)" -msgstr "#(set-global-staff-size·16)" +#~ msgid "Multiple voices" +#~ msgstr "Mehrere Stimmen" -#. input/lsr/jazz-combo-template.ly:55 (comment) -msgid "Some macros %%%%%%%%%%%%%%%%%%%" -msgstr "Einige Makros %%%%%%%%%%%%%%%%%%%" +#~ msgid "Single-staff polyphony" +#~ msgstr "Mehrstimmigkeit in einem System" -#. input/lsr/jazz-combo-template.ly:57 (variable) -msgid "sl" -msgstr "sl" +#~ msgid "Voice styles" +#~ msgstr "Stimmenstile" -#. input/lsr/jazz-combo-template.ly:61 (variable) -msgid "nsl" -msgstr "nsl" +#~ msgid "Collision resolution" +#~ msgstr "Auflösung von Zusammenstößen" -#. input/lsr/jazz-combo-template.ly:65 (variable) -msgid "crOn" -msgstr "crOn" +#~ msgid "Automatic part combining" +#~ msgstr "Automatische Kombination von Stimmen" -#. input/lsr/jazz-combo-template.ly:66 (variable) -msgid "crOff" -msgstr "crOff" +#~ msgid "Writing music in parallel" +#~ msgstr "Musik parallel notieren" -#. input/lsr/jazz-combo-template.ly:68 (comment) -msgid "insert chord name style stuff here." -msgstr "Akkordbezeichnungen hierher" +#~ msgid "oboe" +#~ msgstr "Oboe" -#. input/lsr/jazz-combo-template.ly:70 (variable) -msgid "jazzChords" -msgstr "jazzAkkorde" +#~ msgid "piccolo" +#~ msgstr "Piccolo" -#. input/lsr/jazz-combo-template.ly:72 (comment) -msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" -msgstr "Taktart/Tonart %%%%%%%%%%%%%%%%%" +#~ msgid "cbassoon" +#~ msgstr "Ktrfgt" -#. input/lsr/jazz-combo-template.ly:76 (variable) -msgid "Key" -msgstr "Tonart" +#~ msgid "Staff notation" +#~ msgstr "Notation auf Systemen" -#. input/lsr/jazz-combo-template.ly:78 (comment) -msgid "############ Horns ############" -msgstr "############·Hörner·############" +#~ msgid "Displaying staves" +#~ msgstr "Systeme anzeigen lassen" -#. input/lsr/jazz-combo-template.ly:80 (comment) -msgid "------ Trumpet ------" -msgstr "------·Trompete·------" +#~ msgid "Instantiating new staves" +#~ msgstr "Neue Notensysteme erstellen" -#. input/lsr/jazz-combo-template.ly:81 (variable) -msgid "trpt" -msgstr "trpt" +#~ msgid "Grouping staves" +#~ msgstr "Systeme gruppieren" -#. input/lsr/jazz-combo-template.ly:85 (variable) -msgid "trpHarmony" -msgstr "trpHarmonie" +#~ msgid "Nested staff groups" +#~ msgstr "Verschachtelte Notensysteme" -#. input/lsr/jazz-combo-template.ly:88 (variable) -#. input/lsr/jazz-combo-template.ly:268 (context id) -msgid "trumpet" -msgstr "trompete" +#~ msgid "Modifying single staves" +#~ msgstr "Einzelne Systeme verändern" -#. input/lsr/jazz-combo-template.ly:97 (comment) -msgid "------ Alto Saxophone ------" -msgstr "------·Altsaxophon·------" +#~ msgid "Staff symbol" +#~ msgstr "Das Notensystem" -#. input/lsr/jazz-combo-template.ly:98 (variable) -msgid "alto" -msgstr "alt" +#~ msgid "Ossia staves" +#~ msgstr "Ossia-Systeme" -#. input/lsr/jazz-combo-template.ly:102 (variable) -msgid "altoHarmony" -msgstr "altHarmonien" +#~ msgid "Hiding staves" +#~ msgstr "Systeme verstecken" -#. input/lsr/jazz-combo-template.ly:105 (variable) -msgid "altoSax" -msgstr "altSax" +#~ msgid "Writing parts" +#~ msgstr "Orchesterstimmen erstellen" -#. input/lsr/jazz-combo-template.ly:114 (comment) -msgid "------ Baritone Saxophone ------" -msgstr "------·Baritonsaxophon·------" +#~ msgid "Metronome marks" +#~ msgstr "Metronomangabe" -#. input/lsr/jazz-combo-template.ly:115 (variable) -msgid "bari" -msgstr "bari" +#~ msgid "Quoting other voices" +#~ msgstr "Stichnoten" -#. input/lsr/jazz-combo-template.ly:123 (variable) -msgid "bariHarmony" -msgstr "bariHarmonie" +#~ msgid "Formatting cue notes" +#~ msgstr "Stichnoten formatieren" -#. input/lsr/jazz-combo-template.ly:126 (variable) -msgid "bariSax" -msgstr "bariSax" +#~ msgid "this is deliberate nonsense; note that the stems remain black" +#~ msgstr "Das ist Unsinn, die Hälsen bleiben schwarz" -#. input/lsr/jazz-combo-template.ly:135 (comment) -msgid "------ Trombone ------" -msgstr "------ Posaune ------" +#~ msgid "Coloring objects" +#~ msgstr "Farbige Objekte" -#. input/lsr/jazz-combo-template.ly:136 (variable) -msgid "tbone" -msgstr "pos" +#~ msgid "Parentheses" +#~ msgstr "Klammern" -#. input/lsr/jazz-combo-template.ly:140 (variable) -msgid "tboneHarmony" -msgstr "PosHarmonie" +#~ msgid "Stems" +#~ msgstr "Hälse" -#. input/lsr/jazz-combo-template.ly:143 (variable) -#. input/lsr/jazz-combo-template.ly:272 (context id) -msgid "trombone" -msgstr "posaune" +#~ msgid "Outside the staff" +#~ msgstr "Außerhalb des Notensystems" -#. input/lsr/jazz-combo-template.ly:152 (comment) -msgid "############ Rhythm Section #############" -msgstr "############·Rhythmus-Abschnitt·#############" +#~ msgid "Balloon help" +#~ msgstr "Erklärungen in Ballonform" -#. input/lsr/jazz-combo-template.ly:154 (comment) -msgid "------ Guitar ------" -msgstr "------ Gitarre ------" +#~ msgid "Grid lines" +#~ msgstr "Gitternetzlinien" -#. input/lsr/jazz-combo-template.ly:155 (variable) -msgid "gtr" -msgstr "gtr" +#~ msgid "Analysis brackets" +#~ msgstr "Analyseklammern" -#. input/lsr/jazz-combo-template.ly:163 (variable) -msgid "gtrHarmony" -msgstr "gtrHarmonie" +#~ msgid "Text" +#~ msgstr "Text" -#. input/lsr/jazz-combo-template.ly:167 (variable) -#. input/lsr/jazz-combo-template.ly:277 (context id) -#. input/lsr/polyphony-in-tablature.ly:39 (context id) -#. input/lsr/polyphony-in-tablature.ly:44 (context id) -msgid "guitar" -msgstr "Gitarre" +#~ msgid "Writing text" +#~ msgstr "Text eingeben" -#. input/lsr/jazz-combo-template.ly:176 (comment) -msgid "------ Piano ------" -msgstr "------ Klavier ------" +#~ msgid "Text spanners" +#~ msgstr "Text mit Verbindungslinien" -#. input/lsr/jazz-combo-template.ly:177 (variable) -msgid "rhUpper" -msgstr "rhOben" +#~ msgid "Formatting text" +#~ msgstr "Text formatieren" -#. input/lsr/jazz-combo-template.ly:182 (variable) -msgid "rhLower" -msgstr "rhUnten" +#~ msgid "Text markup introduction" +#~ msgstr "Textbeschriftung (Einleitung)" -#. input/lsr/jazz-combo-template.ly:188 (variable) -msgid "lhUpper" -msgstr "lhOben" +#~ msgid "Selecting font and font size" +#~ msgstr "Überblick über die wichtigsten Textbeschriftungsbefehle" -#. input/lsr/jazz-combo-template.ly:193 (variable) -msgid "lhLower" -msgstr "lhUnten" +#~ msgid "Text alignment" +#~ msgstr "Textausrichtung" -#. input/lsr/jazz-combo-template.ly:199 (variable) -msgid "PianoRH" -msgstr "KlavierRH" +#~ msgid "Graphic notation inside markup" +#~ msgstr "Graphische Notation innerhalb einer Textbeschriftung" -#. input/lsr/jazz-combo-template.ly:208 (variable) -msgid "PianoLH" -msgstr "KlavierLH" +#~ msgid "Music notation inside markup" +#~ msgstr "Musikalische Notation innerhalb einer Textbeschriftung" -#. input/lsr/jazz-combo-template.ly:226 (comment) -msgid "------ Bass Guitar ------" -msgstr "------ Bassgitarre ------" +#~ msgid "Multi-page markup" +#~ msgstr "Textbeschriftung über mehrere Seiten" -#. input/lsr/jazz-combo-template.ly:240 (comment) -msgid "------ Drums ------" -msgstr "------ Schlagzeugt ------" +#~ msgid "Fonts" +#~ msgstr "Schriftarten" -#. input/lsr/jazz-combo-template.ly:254 (variable) -msgid "drumContents" -msgstr "SchlagInhalt" +#~ msgid "Fonts explained" +#~ msgstr "Was sind Schriftarten" -#. input/lsr/jazz-combo-template.ly:263 (comment) -#, python-format -msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" -msgstr "Alles zusammengefügt: %%%%%%%%%%%%%%%%%%%%%%" +#~ msgid "Single entry fonts" +#~ msgstr "Schriftarten für einen Eintrag" -#. input/lsr/jazz-combo-template.ly:267 (context id) -msgid "horns" -msgstr "Horn" +#~ msgid "Entire document fonts" +#~ msgstr "Schriftart des gesamten Dokuments" -#. input/lsr/jazz-combo-template.ly:269 (context id) -msgid "altosax" -msgstr "altsax" +#~ msgid "not recommended: left aligns syllables" +#~ msgstr "nicht empfohlen: Silben links ausrichten" -#. input/lsr/jazz-combo-template.ly:270 (context id) -msgid "barichords" -msgstr "bariakk" +#~ msgid "wrong: durations needed" +#~ msgstr "Falsch: brache Dauern" -#. input/lsr/jazz-combo-template.ly:271 (context id) -msgid "barisax" -msgstr "barsisax" +#~ msgid "lala" +#~ msgstr "lala" -#. input/lsr/jazz-combo-template.ly:276 (context id) -msgid "chords" -msgstr "Akkorde" +#~ msgid "splitpart" +#~ msgstr "StimmeTeilen" -#. input/lsr/makam-example.ly:26 (comment) -msgid "Initialize makam settings" -msgstr "Makam-Einstellungen initialisieren" +#~ msgid "lahlah" +#~ msgstr "Lalala" -#. input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly:19 (variable) -msgid "bassfigures" -msgstr "Bassfiguren" +#~ msgid "moves the column off the left margin;" +#~ msgstr "Spalte vom linken Rand wegbewegen" -#. input/lsr/manually-controlling-beam-positions.ly:21 (comment) -msgid "from upper staffline (position 4) to center (position 0)" -msgstr "von oberer Notenlinie (Position 4) bis Mitte (Position 0)" +#~ msgid "can be removed if space on the page is tight" +#~ msgstr "Kann entfernt werden, wenn wenig Platz auf der Seite ist" -#. input/lsr/manually-controlling-beam-positions.ly:24 (comment) -msgid "from center to one above center (position 2)" -msgstr "von Mitte bis eins über der Mitte (Position 2)" +#~ msgid "adds horizontal spacing between columns;" +#~ msgstr "Horizontalen Abstand zwischen Spalten hinzufügen;" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:19 (variable) -msgid "speakOn" -msgstr "sprechAn" +#~ msgid "if they are still too close, add more \\\" \\\" pairs" +#~ msgstr "Wenn sie immer noch zu eng sind, mehr \\\" \\\"-Paare hinzufügen" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:31 (variable) -msgid "speakOff" -msgstr "sprechAus" +#~ msgid "until the result looks good" +#~ msgstr "bis das Resultat gut aussieht" -#. input/lsr/markup-lines.ly:19 (comment) -msgid "Candide, Voltaire" -msgstr "Candide, Voltaire" +#~ msgid "gives some extra space on the right margin;" +#~ msgstr "zusätzlichen Platz für den rechten Rand" -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:32 (comment) -msgid "the final bar line is not interrupted" -msgstr "Letze Taktlinie ist nicht unterbrochen" +#~ msgid "can be removed if page space is tight" +#~ msgstr "kann entfernt werden, wenn wenig Platz auf der Seite ist" -#. input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly:17 (variable) -msgid "normalPos" -msgstr "normalPos" +#~ msgid "Vocal music" +#~ msgstr "Notation von Gesang" -#. input/lsr/modern-tab-text-clef.ly:16 (variable) -msgid "TAB" -msgstr "TAB" +#~ msgid "Common notation for vocal music" +#~ msgstr "Übliche Notation für Vokalmusik" -#. input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly:51 (variable) -msgid "dashPlus" -msgstr "dashPlus" +#~ msgid "References for vocal music and lyrics" +#~ msgstr "Referenz für Vokalmusik und Gesangstext" -#. input/lsr/modifying-tuplet-bracket-length.ly:23 (comment) -msgid "Set tuplets to be extendable..." -msgstr "Ntolen so definieren, dass sie erweiterbar sind" +#~ msgid "Opera" +#~ msgstr "Oper" -#. input/lsr/modifying-tuplet-bracket-length.ly:25 (comment) -msgid "...to cover all items up to the next note" -msgstr "um alle Objekte bis zu nächsten Note" +#~ msgid "Song books" +#~ msgstr "Liederhefte" -#. input/lsr/modifying-tuplet-bracket-length.ly:29 (comment) -msgid "...or to cover just whitespace" -msgstr "oder auch nur Leerzeichen zu überbrücken" +#~ msgid "Spoken music" +#~ msgstr "Gesprochene Musik" -#. input/lsr/percussion-beaters.ly:18 (variable) -msgid "stick" -msgstr "Stock" +#~ msgid "Chants" +#~ msgstr "Hymnen" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:39 (comment) -msgid "Permit line breaks within tuplets" -msgstr "Zeilenumbrüche innerhalb von N-tolen zulassen" +#~ msgid "Ancient vocal music" +#~ msgstr "Alte Vokalmusik" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:41 (comment) -msgid "Allow beams to be broken at line breaks" -msgstr "Balken können an Umbrüchen gebrochen werden" +#~ msgid "Lyrics explained" +#~ msgstr "Was ist Gesangtext" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:48 (comment) -msgid "Insert a manual line break within a tuplet" -msgstr "Manuellen Zeilenumbruch in N-tole" +#~ msgid "Working with lyrics and variables" +#~ msgstr "Mit Gesangtexten und Bezeichnern arbeiten" -#. input/lsr/piano-template-with-centered-dynamics.ly:51 (variable) -msgid "pedal" -msgstr "Pedal" +#~ msgid "Automatic syllable durations" +#~ msgstr "Automatische Silbendauer" -#. input/lsr/piano-template-with-centered-dynamics.ly:64 (comment) -msgid "define Dynamics context" -msgstr "Dynamik-Kontext definieren" +#~ msgid "Manual syllable durations" +#~ msgstr "Manuelle Silbendauer" -#. input/lsr/piano-template-with-centered-dynamics.ly:85 (comment) -msgid "modify PianoStaff context to accept Dynamics context" -msgstr "PianoStaff-Kontext verändern, dass er Dynamics-Kontext akzeptiert" +#~ msgid "Multiple notes to one syllable" +#~ msgstr "Mehrere Noten zu einer Silbe" -#. input/lsr/polyphony-in-tablature.ly:38 (context id) -msgid "tab" -msgstr "tab" +#~ msgid "Extenders and hyphens" +#~ msgstr "Fülllinien und Trennstriche" -#. input/lsr/positioning-multi--measure-rests.ly:41 (comment) -msgid "Multi-measure rests by default are set under the second line" -msgstr "Ganztaktpausen werden unter die zweite Linie gesetzt" +#~ msgid "Lyrics and repeats" +#~ msgstr "Gesangtext und Wiederholungen" -#. input/lsr/positioning-multi--measure-rests.ly:43 (comment) -msgid "They can be moved with an override" -msgstr "Sie können mit override verschoben werden" +#~ msgid "Specific uses of lyrics" +#~ msgstr "Besonderheiten der Gesangtextnotation" -#. input/lsr/positioning-multi--measure-rests.ly:46 (comment) -msgid "A value of 0 is the default position;" -msgstr "Ein Wert von O ist die Standardposition" +#~ msgid "Divisi lyrics" +#~ msgstr "Getrennte Texte" -#. input/lsr/positioning-multi--measure-rests.ly:47 (comment) -msgid "the following trick moves the rest to the center line" -msgstr "hiermit wird die Pause zur Mittellinie verschoben" +#~ msgid "Lyrics independent of notes" +#~ msgstr "Text unabhängig von den Noten" -#. input/lsr/positioning-multi--measure-rests.ly:50 (comment) -msgid "Multi-measure rests in odd-numbered voices are under the top line" -msgstr "" -"Ganztaktpausen in Stimmen mit ungerader Zahl sind unter der obersten Linie" +#~ msgid "Centering lyrics between staves" +#~ msgstr "Gesangtext zwischen Systemen zentrieren" -#. input/lsr/positioning-multi--measure-rests.ly:52 (comment) -msgid "Multi-measure rests in even-numbered voices are under the bottom line" -msgstr "Ganztaktpausen in geraden Stimmen sind unter der untersten Linie" +#~ msgid "Stanzas" +#~ msgstr "Strophen" -#. input/lsr/positioning-multi--measure-rests.ly:54 (comment) -msgid "They remain separated even in empty measures" -msgstr "auch in leeren Takten bleichen sie getrennt" +#~ msgid "Adding stanza numbers" +#~ msgstr "Strophennummern hinzufügen" -#. input/lsr/positioning-multi--measure-rests.ly:56 (comment) -msgid "This brings them together even though there are two voices" -msgstr "Hiermit werden sie zusammegefügt, auch wenn sie zwei Stimmen sind" +#~ msgid "Adding dynamics marks to stanzas" +#~ msgstr "Lautstärkebezeichnung zu Strophen hinzufügen" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:28 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:49 (comment) -msgid "Set segno sign as rehearsal mark and adjust size if needed" -msgstr "Segno-Zeichen als Übungszeichen definieren und Größe evtl. anpassen" +#~ msgid "Adding singers' names to stanzas" +#~ msgstr "Sängernamen zu Strophen hinzufügen" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:29 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:51 (comment) -msgid "\\once \\override Score.RehearsalMark #'font-size = #3" -msgstr "\\once·\\override·Score.RehearsalMark·#'font-size·=·#3" +#~ msgid "Stanzas with different rhythms" +#~ msgstr "Strophen mit unterschiedlichem Rhythmus" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:35 (comment) -msgid "Set coda sign as rehearsal mark and adjust size if needed" -msgstr "Coda-Zeichen als Übungszeichen definieren und Größe evtl. anpassen" +#~ msgid "Ignoring melismata" +#~ msgstr "Melismen ignorieren" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:42 (comment) -msgid "Should Coda be on anew line?" -msgstr "Soll Coda auf einer neuen Zeile sein?" +#~ msgid "Switching to an alternative melody" +#~ msgstr "Zu einer alternativen Melodie umschalten" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:43 (comment) -msgid "Coda NOT on new line: use \\nobreak" -msgstr "Coda NICHT auf neuer Zeile: benutze \\nobreak" +#~ msgid "Printing stanzas at the end" +#~ msgstr "Die Strophen am Ende ausdrucken" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:44 (comment) -msgid "Coda on new line: DON'T use \\nobreak" -msgstr "Coda auf neuer Zeile: NICHT \\nobreak benutzen" +#~ msgid "Printing stanzas at the end in multiple columns" +#~ msgstr "Die Strophen am Ende in mehreren Spalten drucken" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:45 (comment) -msgid "\\noBreak" -msgstr "\\noBreak" +#~ msgid "keep staff alive" +#~ msgstr "System aufrecht erhalten" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:54 (comment) -msgid "Here begins the trickery! " -msgstr "Her beginnt der Trick" +#~ msgid "melOne" +#~ msgstr "melEins" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:55 (comment) -msgid "" -"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " -"lines." -msgstr "" -"\\cadenzaOn unterdrückt die Taktzählung und \\stopStaff entfernt Notenlinien" +#~ msgid "stems may overlap the other staff" +#~ msgstr "Hals kann das andere System überschneiden" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:58 (comment) -msgid "Some examples of possible text-displays " -msgstr "Eine Beispiel für mögliche Textanzeige" +#~ msgid "extend the stems to reach other other staff" +#~ msgstr "Hälse verlängern um anderes System zu erreichen" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:60 (comment) -msgid "text line-aligned" -msgstr "Text an Zeile ausgerichtet" +#~ msgid "do not print extra flags" +#~ msgstr "keine doppelten Fähnchen" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:61 (comment) -msgid "==================" -msgstr "==================" +#~ msgid "prevent beaming as needed" +#~ msgstr "Balken verhindern" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:62 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:68 (comment) -msgid "Move text to the desired position" -msgstr "Text zur gewünschten Position verschieben" +#~ msgid "Keyboard and other multi-staff instruments" +#~ msgstr "Tasteninstrumente und andere Instrumente mit mehreren Systemen" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:63 (comment) -msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" -msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·2·.·-3.5·)" +#~ msgid "Common notation for keyboards" +#~ msgstr "Übliche Notation für Tasteninstrumente" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:64 (comment) -msgid "| s1*0^\\markup { D.S. al Coda } }" -msgstr "|·s1*0^\\markup·{·D.S.·al·Coda·}·}" +#~ msgid "References for keyboards" +#~ msgstr "Referenz für Tasteninstrumente" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:66 (comment) -msgid "text center-aligned" -msgstr "Text zentriert" +#~ msgid "Changing staff manually" +#~ msgstr "Notensysteme manuell verändern" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:67 (comment) -msgid "====================" -msgstr "====================" +#~ msgid "Changing staff automatically" +#~ msgstr "Automatischer Systemwechsel" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:69 (comment) -msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" -msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·6·.·-5.0·)" +#~ msgid "Staff-change lines" +#~ msgstr "Stimmführungslinien" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:70 (comment) -msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" -msgstr "|·s1*0^\\markup·{·\\center-column·{·D.S.·\\\"al·Coda\\\"·}·}" +#~ msgid "Cross-staff stems" +#~ msgstr "Hälse über beide Systeme" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:72 (comment) -msgid "text and symbols center-aligned" -msgstr "Text und Symbole zentriert" +#~ msgid "Piano" +#~ msgstr "Klavier" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:73 (comment) -msgid "===============================" -msgstr "===============================" +#~ msgid "Piano pedals" +#~ msgstr "Klavierpedal" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:74 (comment) -msgid "" -"Move text to the desired position and tweak spacing for optimum text " -"alignment" -msgstr "" -"Text zur gewünschten Position verschieben und Platzbedarf für " -"optimalesErgebnis verändern." +#~ msgid "Discant symbols" +#~ msgstr "Diskant-Symbole" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:75 (comment) -msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" -msgstr "\\once·\\override·TextScript·#'extra-offset·=·#'(·8·.·-5.5·)" +#~ msgid "Harp" +#~ msgstr "Harfe" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:81 (comment) -msgid "Increasing the unfold counter will expand the staff-free space" -msgstr "" -"wenn der unfold-Zähler höher gesetzt wird, vergrößert sich der Platz ohne " -"System" +#~ msgid "References for harps" +#~ msgstr "Referenzen für Harfe" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:86 (comment) -msgid "Resume bar count and show staff lines again" -msgstr "Taktzählung aufnehmen und Notenlinien anzeigen" +#~ msgid "Harp pedals" +#~ msgstr "Harfenpedal" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:90 (comment) -msgid "Should Coda be on new line?" -msgstr "Soll Coda auf einer neuen Zeile sein?" +#~ msgid "Unfretted string instruments" +#~ msgstr "Bundlose Saiteninstrumente" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:91 (comment) -msgid "Coda NOT on new line: DON'T use \\break" -msgstr "Coda NICHT auf neuer Zeile: NICHT \\break benutzen" +#~ msgid "Common notation for unfretted strings" +#~ msgstr "Übliche Notation für nichtgebundene Saiteninstrumente" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:92 (comment) -msgid "Coda on new line: use \\break" -msgstr "Coda auf neuer Zeile: \\break benutzen" +#~ msgid "References for unfretted strings" +#~ msgstr "Hinweise für ungebundene Saiteninstrumente" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:95 (comment) -msgid "Show up, you clef and key!" -msgstr "Schlüssel/Tonart" +#~ msgid "Bowing indications" +#~ msgstr "Bezeichnung des Bogens" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:99 (comment) -msgid "Set coda sign as rehearsal mark and adjust size and position" -msgstr "Coda-Zeichen als Übungszeichen setzen und Position/Größe anpassen" +#~ msgid "Harmonics" +#~ msgstr "Flageolett" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:101 (comment) -msgid "" -"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" -"position" -msgstr "" -"Coda-Zeichen über den Schlüssel setzen abhängig von Zeilenpositionvon Coda" +#~ msgid "Snap (Bartok) pizzicato" +#~ msgstr "Bartók-Pizzicato" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:103 (comment) -msgid "Coda NOT on new line, use this:" -msgstr "Coda NICHT auf neuer Zeile:" +#~ msgid "Snap (Bartók) pizzicato" +#~ msgstr "Bartók-Pizzicato" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:104 (comment) -msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" -msgstr "\\once·\\override·Score.RehearsalMark·#'extra-offset·=·#'(·-2·.·1.75·)" +#~ msgid "mychordlist" +#~ msgstr "meineAkkordliste" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:106 (comment) -msgid "Coda on new line, use this:" -msgstr "Coda auf neuer Zeile:" +#~ msgid "add a new chord shape" +#~ msgstr "Neues Akkordmuster hinzufügen" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:112 (comment) -msgid "The coda" -msgstr "Die Coda" +#~ msgid "add some new chords based on the power chord shape" +#~ msgstr "neue Akkorde basierend auf dem power-chord-Muster hinzufügen" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:31 (comment) -msgid "Metronome marks below the staff " -msgstr "Metronomangabe unter dem System" +#~ msgid "Fretted string instruments" +#~ msgstr "Saiteninstrumente mit Bünden" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:36 (comment) -msgid "Rehearsal marks below the staff" -msgstr "Übungszeichen unter dem System" +#~ msgid "Common notation for fretted strings" +#~ msgstr "Übliche Notation für gebundene Saiteninstrumente" -#. input/lsr/printing-music-with-different-time-signatures.ly:49 (variable) -msgid "Bassklarinette" -msgstr "Bassklarinette" +#~ msgid "References for fretted strings" +#~ msgstr "Referenz für gebundene Saiteninstrumente" -#. input/lsr/printing-music-with-different-time-signatures.ly:89 (variable) -msgid "Perkussion" -msgstr "Schlagzeug" +#~ msgid "Default tablatures" +#~ msgstr "Standardtabulaturen" -#. input/lsr/quoting-another-voice-with-transposition.ly:37 (variable) -msgid "quoteTest" -msgstr "zitatTest" +#~ msgid "Custom tablatures" +#~ msgstr "Angepasste Tabulaturen" -#. input/lsr/quoting-another-voice-with-transposition.ly:38 (comment) -msgid "french horn" -msgstr "Waldhorn" +#~ msgid "Fret diagram markups" +#~ msgstr "Bund-Diagramm-Beschriftung" -#. input/lsr/quoting-another-voice.ly:27 (variable) -msgid "quoteMe" -msgstr "zitiereMich" +#~ msgid "Automatic fret diagrams" +#~ msgstr "Automatische Bund-Diagramme" -#. input/lsr/quoting-another-voice.ly:32 (variable) -msgid "original" -msgstr "Original" +#~ msgid "Right-hand fingerings" +#~ msgstr "Fingersatz der rechten Hand" -#. input/lsr/removing-the-first-empty-line.ly:43 (comment) -msgid "To use the setting globally, uncomment the following line:" -msgstr "Um die Einstellung global zu benutzen, diese Zeile benutzen:" +#~ msgid "Indicating position and barring" +#~ msgstr "Position und Barret anzeigen" -#. input/lsr/removing-the-first-empty-line.ly:44 (comment) -msgid "\\override VerticalAxisGroup #'remove-first = ##t" -msgstr "\\override·VerticalAxisGroup·#'remove-first·=·##t" +#~ msgid "Indicating harmonics and dampened notes" +#~ msgstr "Flageolett und gedämpfte Noten" -#. input/lsr/removing-the-first-empty-line.ly:53 (comment) -msgid "To use the setting globally, comment this line," -msgstr "Um Einstellung global zu benutzen, folgende Zeile auskommentieren" +#~ msgid "Banjo" +#~ msgstr "Banjo" -#. input/lsr/removing-the-first-empty-line.ly:54 (comment) -msgid "uncomment the line in the \\layout block above" -msgstr "und die Zeile im \\layout-Block oben benutzen" +#~ msgid "Banjo tablatures" +#~ msgstr "Banjo-Tabulaturen" -#. input/lsr/reverting-default-beam-endings.ly:29 (comment) -msgid "Default beaming" -msgstr "Standartbebalkung" +#~ msgid "These lines define the position of the woodblocks in the stave;" +#~ msgstr "Diese Zeilen definieren die Position der Holzblöcke auf dem System" -#. input/lsr/reverting-default-beam-endings.ly:32 (comment) -msgid "Revert default values in scm/auto-beam.scm for 12/8 time" -msgstr "Standardwerte von scm/auto-beam.scm für 12/8-Takt herstellen" +#~ msgid "if you like, you can change it or you can use special note heads" +#~ msgstr "" +#~ "Wenn Sie wollen, können Sie das ändern oder besondere Notenköpfe benutzen" -#. input/lsr/reverting-default-beam-endings.ly:38 (comment) -msgid "Set new values for beam endings" -msgstr "Neue Werte für Balkenenden" +#~ msgid "for the woodblocks." +#~ msgstr "für die Holzblöcke" -#. input/lsr/rhythmic-slashes.ly:25 (comment) -msgid "Macro to print single slash" -msgstr "Makro um einzelnen Strich zu setzen" +#~ msgid "woodstaff" +#~ msgstr "System für Holz" -#. input/lsr/rhythmic-slashes.ly:26 (variable) -msgid "rs" -msgstr "rs" +#~ msgid "This defines a staff with only two lines." +#~ msgstr "Definiert ein System mit zwei Linien." -#. input/lsr/rhythmic-slashes.ly:33 (comment) -msgid "Function to print a specified number of slashes" -msgstr "Funktoin, um eine bestimmte Anzahl an Strichen zu setzen" +#~ msgid "It also defines the positions of the two lines." +#~ msgstr "Auch die Position der zwei Linien wird festgelegt" -#. input/lsr/rhythmic-slashes.ly:34 (variable) -msgid "comp" -msgstr "comp" +#~ msgid "This is neccessary; if not entered, the barline would be too short!" +#~ msgstr "" +#~ "Das ist notwendig. Wenn nicht angegeben, wird die Taktlinie zu kurz!" -#. input/lsr/score-for-diatonic-accordion.ly:69 (variable) -msgid "NoStem" -msgstr "KeinHals" +#~ msgid "with this you load your new drum style table" +#~ msgstr "jetzt neue Trommelstil-Tabelle laden" -#. input/lsr/score-for-diatonic-accordion.ly:70 (variable) -msgid "NoNoteHead" -msgstr "KeinNotenkopf" +#~ msgid "tambustaff" +#~ msgstr "Tambu-System" -#. input/lsr/score-for-diatonic-accordion.ly:71 (variable) -msgid "ZeroBeam" -msgstr "NullBalken" +#~ msgid "the trick with the scaled duration and the shorter rest" +#~ msgstr "Trick mit der skalierten Dauer und der kürzeren Pause" -#. input/lsr/score-for-diatonic-accordion.ly:73 (variable) -msgid "staffTabLine" -msgstr "systemTabZeile" +#~ msgid "is neccessary for the correct ending of the trill-span!" +#~ msgstr "ist·nötig,damit·die·Trillerspannweite·richtig·endet" -#. input/lsr/score-for-diatonic-accordion.ly:78 (comment) -msgid "" -"Shows one horizontal line. The vertical line (simulating a bar-line) is " -"simulated with a gridline" -msgstr "" -"Zeigt eine horizontale Zeile. Vertikale Linie (wie eine Taktlinie) wirdmit " -"einer Gitterlinie simuliert" +#~ msgid "tamtamstaff" +#~ msgstr "tamtam-System" -#. input/lsr/score-for-diatonic-accordion.ly:83 (comment) -msgid "" -"disable the following line to see the the noteheads while writing the song " -msgstr "" -"nächste Zeile auskommentieren, um Noten während des Schreibens zu sehen" +#~ msgid "bellstaff" +#~ msgstr "Glocken-System" -#. input/lsr/score-for-diatonic-accordion.ly:87 (comment) -msgid "The beam between 8th-notes is used to draw the push-line" -msgstr "Balken zwischen Achteln wird benutzt um Zug-Linie zu zeichnen" +#~ msgid "drumsA" +#~ msgstr "TrommelA" -#. input/lsr/score-for-diatonic-accordion.ly:88 (comment) -msgid "How to fast write the push-lines: " -msgstr "Zug-Linie schnell schreiben:" +#~ msgid "drumsB" +#~ msgstr "TrommelB" -#. input/lsr/score-for-diatonic-accordion.ly:89 (comment) -msgid "" -"1. write repeatedly 'c c c c c c c c |' for the whole length of the song " -msgstr "" -"1. wiederholt 'c·c·c·c·c·c·c·c·|' über die gesamte Länge des Stückes " -"schreiben" +#~ msgid "Common notation for percussion" +#~ msgstr "Übliche Notation für Schlagzeug" -#. input/lsr/score-for-diatonic-accordion.ly:90 (comment) -msgid "2. uncomment the line \\NoNoteHead" -msgstr "2. \\NoNoteHead auskommentieren" +#~ msgid "References for percussion" +#~ msgstr "Referenz für Schlagzeug" -#. input/lsr/score-for-diatonic-accordion.ly:91 (comment) -msgid "3. compile" -msgstr "3. kompilieren" +#~ msgid "Basic percussion notation" +#~ msgstr "Grundlagen der Schlagzeugnotation" -#. input/lsr/score-for-diatonic-accordion.ly:92 (comment) -msgid "4. Mark the positions on which push/pull changes. " -msgstr "4. Positionen mit Zugrichtungsänderung markieren" +#~ msgid "Drum rolls" +#~ msgstr "Trommelwirbel" -#. input/lsr/score-for-diatonic-accordion.ly:93 (comment) -msgid "" -"In the score-picture click on the position the push- or pull-part starts " -msgstr "im Partiturbild auf die Position der Zug-Anfänge klicken" +#~ msgid "Pitched percussion" +#~ msgstr "Schlagzeug mit Tonhöhe" -#. input/lsr/score-for-diatonic-accordion.ly:94 (comment) -msgid "(on the noteHead, the cursor will change to a hand-icon)." -msgstr "(über dem Notenkopf ändert sich die Maus in eine Hand)" +#~ msgid "Percussion staves" +#~ msgstr "Schlagzeugsysteme" -#. input/lsr/score-for-diatonic-accordion.ly:95 (comment) -msgid "The cursor in the source code will jump just at this position." -msgstr "Die Maus in der Quelldatei geht zur gewünschten Position" +#~ msgid "Custom percussion staves" +#~ msgstr "Eigene Schlagzeugsysteme" -#. input/lsr/score-for-diatonic-accordion.ly:96 (comment) -msgid "a) If a push-part starts there, replace the 'c' by an 'e['" -msgstr "a) wenn ein Schub hier beginng, 'c' mit 'e[' ersetzen" +#~ msgid "Wind instruments" +#~ msgstr "Blasinstrumente" -#. input/lsr/score-for-diatonic-accordion.ly:97 (comment) -msgid "b) If a pull-part starts there, replace the 'c' by an 's'" -msgstr "b) wenn ein Zug hier beginnt, 'c' mit 's' ersetzen" +#~ msgid "Common notation for wind instruments" +#~ msgstr "Übliche Notation für Bläser" -#. input/lsr/score-for-diatonic-accordion.ly:98 (comment) -msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key. " -msgstr "5. in den Überschreibmodus wechseln mit der \"Einfg\"-Taste" +#~ msgid "References for wind instruments" +#~ msgstr "Referenz für Blasinstrumente" -#. input/lsr/score-for-diatonic-accordion.ly:99 (comment) -msgid "6. For the pull-parts overwrite the 'c' with 's' " -msgstr "6. Für Zug 'c' mit 's' überschreiben" +#~ msgid "Bagpipes" +#~ msgstr "Dudelsack" -#. input/lsr/score-for-diatonic-accordion.ly:100 (comment) -msgid "7. For every push-part replace the last 'c' with 'e]' " -msgstr "7. für jeden Schub das letzte 'c' mit 'e]' ersetzen" +#~ msgid "Bagpipe definitions" +#~ msgstr "Dudelsack-Defintionen" -#. input/lsr/score-for-diatonic-accordion.ly:101 (comment) -msgid "8. Switch into 'insert-mode' again " -msgstr "8. In den Einfügen-Modus wechseln" +#~ msgid "Bagpipe example" +#~ msgstr "Dudelsack-Beispiele" -#. input/lsr/score-for-diatonic-accordion.ly:102 (comment) -msgid "" -"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " -"e] s s)" -msgstr "" -"9. Es sollte jetzt aussehen wie (s·s·e[·c·|·c·c·c·c·c·c·c·c·|·c·c·c·c·c·c·e]" -"·s·s)" +#~ msgid "Put notes on same Staff as figures" +#~ msgstr "Noten auf dem gleichen System wie die Symbole" -#. input/lsr/score-for-diatonic-accordion.ly:103 (comment) -msgid "10. re-enable the line \\NoNoteHead" -msgstr "10 \\NoNoteHead wieder einkommentieren" +#~ msgid "The extenders are correct here, with the same rhythm as the bass" +#~ msgstr "Linien stimmen hier, mit dem gleichen Rhythmus wie im Bass" -#. input/lsr/score-for-diatonic-accordion.ly:113 (comment) -msgid "Accordion melody in tabulator score\t\t" -msgstr "Akkordeonmelodie in Tabulaturen-Partitur\t\t" +#~ msgid "The extenders are incorrect here, even though the timing is the same" +#~ msgstr "Linien stimmen nicht, obwohl der Rhythmus der gleiche ist" -#. input/lsr/score-for-diatonic-accordion.ly:114 (comment) -msgid "1. Place a copy of the piano melody below" -msgstr "1. Eine Kopie der Klaviermelodie unten benutzen" +#~ msgid "Chord mode overview" +#~ msgstr "Überblick über den Akkord-Modus" -#. input/lsr/score-for-diatonic-accordion.ly:115 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:134 (comment) -msgid "" -"2. Separate piano melody into pull- and push-parts according to the " -"staffTabLine you've already made " -msgstr "" -"2. Klaviermelodie in Zug- und Schubteile teilen, wie schon mitsystemTabLinie " -"gemacht" +#~ msgid "Common chords" +#~ msgstr "Übliche Akkorde" -#. input/lsr/score-for-diatonic-accordion.ly:116 (comment) -msgid "" -"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " -"reference) and then change the second line using the transformation paper" -msgstr "" -"3. Für jede Zeile: verdoppele die Zeile. die erste bleibt als Referenz, die " -"zweite wirdmit dem Transformationspapier verändert" +#~ msgid "Extended and altered chords" +#~ msgstr "Erweiterte und modifizierte Akkorde" -#. input/lsr/score-for-diatonic-accordion.ly:117 (comment) -msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' " -msgstr "oder den Makros 'conv2diaton·push.bsh'·and·'conv2diaton·pull.bsh'·" +#~ msgid "Displaying chords" +#~ msgstr "Akkorde anzeigen" -#. input/lsr/score-for-diatonic-accordion.ly:118 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:137 (comment) -msgid "Tips:" -msgstr "Tipps:" +#~ msgid "Printing chord names" +#~ msgstr "Akkordbezeichnungen drucken" -#. input/lsr/score-for-diatonic-accordion.ly:119 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:138 (comment) -msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" -msgstr "- In jEdit Suchen und Ersetzen die Option wählen: 'Keep Dialog'" +#~ msgid "Customizing chord names" +#~ msgstr "Akkordbezeichnungen anpassen" -#. input/lsr/score-for-diatonic-accordion.ly:121 (variable) -msgid "AccordionTabTwoCBesDur" -msgstr "AccordionTabTwoCBesDur" +#~ msgid "Figured bass" +#~ msgstr "Generalbass" -#. input/lsr/score-for-diatonic-accordion.ly:122 (comment) -msgid "pull 1" -msgstr "Zug 1" +#~ msgid "Introduction to figured bass" +#~ msgstr "Grundlagen des Bezifferten Basses" -#. input/lsr/score-for-diatonic-accordion.ly:123 (comment) -msgid "8 8 8 | " -msgstr "8·8·8·|·" +#~ msgid "Entering figured bass" +#~ msgstr "Eingabe des Generalbass'" -#. input/lsr/score-for-diatonic-accordion.ly:125 (comment) -msgid "push 2" -msgstr "Schub 2" +#~ msgid "Displaying figured bass" +#~ msgstr "Generalbass anzeigen" -#. input/lsr/score-for-diatonic-accordion.ly:126 (comment) -msgid "4 | " -msgstr "4····|·" +#~ msgid "ficta" +#~ msgstr "ficta" -#. input/lsr/score-for-diatonic-accordion.ly:128 (comment) -msgid "pull 3" -msgstr "Zug 3" +#~ msgid "spiritus" +#~ msgstr "spiritus" -#. input/lsr/score-for-diatonic-accordion.ly:129 (comment) -msgid "2 r8 }" -msgstr "2·r8·}" +#~ msgid "spirLyr" +#~ msgstr "spirText" -#. input/lsr/score-for-diatonic-accordion.ly:133 (comment) -msgid "1. Place a copy of the piano melody above" -msgstr "1. Eine Kopie der Klaviermelodie oben machen" +#~ msgid "Ancient notation" +#~ msgstr "Notation von alter Musik" -#. input/lsr/score-for-diatonic-accordion.ly:135 (comment) -msgid "" -"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " -"reference) and then " -msgstr "" -"3. Für jede Zeile: Zeile verdoppeln. Erste bleibt unverändert (Referenz), " -"dann" +#~ msgid "Overview of the supported styles" +#~ msgstr "Überblick über die unterstützten Stile" -#. input/lsr/score-for-diatonic-accordion.ly:136 (comment) -msgid "change the second line using the transformation paper" -msgstr "wird die zweite anhand des Transformationspapiers verändert" +#~ msgid "Ancient notation---common features" +#~ msgstr "Alte Notation -- Allgemeines" -#. input/lsr/score-for-diatonic-accordion.ly:139 (comment) -msgid "- " -msgstr "- " +#~ msgid "Pre-defined contexts" +#~ msgstr "Vordefinierte Umgebungen" -#. input/lsr/score-for-diatonic-accordion.ly:150 (comment) -msgid "4/4 - tact. How many beats per bar" -msgstr "4/4-Takt. Wie viele Takzeiten im Takt" +#~ msgid "Custodes" +#~ msgstr "Custodes" + +#~ msgid "Figured bass support" +#~ msgstr "Unterstützung für Generalbass" -#. input/lsr/score-for-diatonic-accordion.ly:152 (comment) -msgid "The following line has to be adjusted O-F-T-E-N." -msgstr "Die nächste Zeile muss sehr oft angepasst werden" +#~ msgid "Typesetting mensural music" +#~ msgstr "Mesurale Musik setzen" -#. input/lsr/score-for-diatonic-accordion.ly:161 (variable) -msgid "staffVoice" -msgstr "systemStimme" +#~ msgid "Mensural contexts" +#~ msgstr "Mensural-Kontexte" -#. input/lsr/score-for-diatonic-accordion.ly:169 (context id) -msgid "melodyVoi" -msgstr "MelodieStimme" +#~ msgid "Mensural note heads" +#~ msgstr "Mensurale Notenköpfe" -#. input/lsr/score-for-diatonic-accordion.ly:175 (variable) -msgid "staffAccordionMel" -msgstr "systemAkkordionMel" +#~ msgid "Mensural flags" +#~ msgstr "Mensurale Fähnchen" -#. input/lsr/score-for-diatonic-accordion.ly:176 (comment) -msgid "Set the accidentals (Vorzeichen) for each note, " -msgstr "Versetzungszeichen für jede Note" +#~ msgid "Mensural rests" +#~ msgstr "Mensurale Pausen" -#. input/lsr/score-for-diatonic-accordion.ly:177 (comment) -msgid "do not remember them for the rest of the measure. " -msgstr "im Rest des Taktes nicht erinnern" +#~ msgid "Mensural accidentals and key signatures" +#~ msgstr "Mensurale Versetzungszeichen und Tonartbezeichnung" -#. input/lsr/score-for-diatonic-accordion.ly:196 (variable) -msgid "BassRhytm" -msgstr "BassRhythmus" +#~ msgid "Annotational accidentals (musica ficta)" +#~ msgstr "Vorgeschlagene Versetzungszeichen (musica ficta)" -#. input/lsr/score-for-diatonic-accordion.ly:197 (variable) -msgid "LyricBassRhythmI" -msgstr "LyricBassRhythmI" +#~ msgid "Annotational accidentals (@emph{musica ficta})" +#~ msgstr "Vorgeschlagene Versetzungszeichen (@emph{musica ficta})" -#. input/lsr/score-for-diatonic-accordion.ly:199 (variable) -msgid "staffBassRhytm" -msgstr "systemBassRhythmus" +#~ msgid "White mensural ligatures" +#~ msgstr "Weiße Mensuralligaturen" -#. input/lsr/score-for-diatonic-accordion.ly:200 (comment) -msgid "" -"This is not a RhythmicStaff because it must be possible to append lyrics." -msgstr "Das ist kein RhythmicStaff weil hier Text hinzugefügt werden muss" +#~ msgid "Typesetting Gregorian chant" +#~ msgstr "Gregorianischen Choral setzen" -#. input/lsr/score-for-diatonic-accordion.ly:202 (comment) -msgid "x.y" -msgstr "x.y" +#~ msgid "Gregorian chant contexts" +#~ msgstr "Gregorianische Gesangs-Kontexte" -#. input/lsr/score-for-diatonic-accordion.ly:204 (comment) -msgid "" -"Shows one horizontal line. The vertical line (simulating a bar-line) is " -"simulated by a grid" -msgstr "" -"Zeigt eine horizontale Linie. Die vertikale Linie (wie eine Taktlinie) " -"istvon einer Gitterlinie simuliert" +#~ msgid "Gregorian clefs" +#~ msgstr "Gregorianische Schlüssel" -#. input/lsr/score-for-diatonic-accordion.ly:205 (comment) -msgid "Search for 'grid' in this page to find all related functions " -msgstr "" -"Suche 'grid' (Gitter) in dieser Seite um alle wichtigen Funktionen zu finden" +#~ msgid "Gregorian accidentals and key signatures" +#~ msgstr "Gregorianische Versetzungszeichen und Tonartbezeichnung" -#. input/lsr/score-for-diatonic-accordion.ly:208 (context id) -msgid "VoiceBassRhytm" -msgstr "StimmeBassRhythmus" +#~ msgid "Gregorian articulation signs" +#~ msgstr "Artikulationszeichen des Gregorianischen Chorals" -#. input/lsr/score-for-diatonic-accordion.ly:221 (comment) -msgid "" -"The vertical line (simulating a bar-line) in the staffBassRhytm is a " -"gridline " -msgstr "" -"Die·vertikale·Linie·(wie·eine·Taktlinie) im " -"systemBassRhythmus·istvon·einer·Gitterlinie·simuliert " +#~ msgid "Augmentum dots (@emph{morae})" +#~ msgstr "Augmentationspunkte (@emph{morae})" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:24 (comment) -msgid "Define the fret diagrams to be used" -msgstr "Die benutzten Bund-Diagramme definieren" +#~ msgid "Gregorian square neume ligatures" +#~ msgstr "Ligaturen der gregorianischen Quadratnotation" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:25 (variable) -msgid "cFretDiagram" -msgstr "cBundDiagramm" +#~ msgid "Working with ancient music---scenarios and solutions" +#~ msgstr "Musiksatz Alter Musik in der Praxis -- Szenarien und Lösungen" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:29 (variable) -msgid "gFretDiagram" -msgstr "gBundDiagramm" +#~ msgid "Incipits" +#~ msgstr "Incipite" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:33 (variable) -msgid "verseI" -msgstr "StropheI" +#~ msgid "Mensurstriche layout" +#~ msgstr "Mensurstriche" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:38 (variable) -msgid "verseII" -msgstr "StropheII" +#~ msgid "Transcribing Gregorian chant" +#~ msgstr "Gregorianischen Choral transkribieren" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:43 (variable) -msgid "theChords" -msgstr "Akkorde" +#~ msgid "Ancient and modern from one source" +#~ msgstr "Alte und moderne Edition aus einer Quelldatei" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:45 (comment) -msgid "insert the chords for chordnames here" -msgstr "Akkorde für die Akkordbezeichnung hierher" +#~ msgid "Editorial markings" +#~ msgstr "Herausgeberische Anmerkungen" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:50 (variable) -msgid "staffMelody" -msgstr "systemMelodie" +#~ msgid "World music" +#~ msgstr "Weltmusik" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:51 (context id) -msgid "voiceMelody" -msgstr "stimmeMelodie" +#~ msgid "Arabic music" +#~ msgstr "Arabische Musik" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:55 (comment) -msgid "Type notes and fret diagram markups here" -msgstr "Noten und Bund-Diagramm-Text hierher" +#~ msgid "References for Arabic music" +#~ msgstr "Referenz für arabische Musik" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:54 (variable) -msgid "snapPizzicato" -msgstr "schlagPizzicato" +#~ msgid "Arabic key signatures" +#~ msgstr "Arabische Tonarten" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:56 (comment) -msgid "now it can be used as \\snappizzicato after the note/chord" -msgstr "" -"jetzt kann es als \\schlagPizzicato nach einer Note/Akkord benutzt werden" +#~ msgid "Arabic time signatures" +#~ msgstr "Arabische Taktarten" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:57 (comment) -msgid "Note that a direction (-, ^ or _) is required." -msgstr "Eine Richtung (-, ^ oder _) wird benötigt" +#~ msgid "Arabic music example" +#~ msgstr "Arabische Notenbeispiele" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:60 (comment) -msgid "This does NOT work:" -msgstr "Das funktioniert NICHT:" +#~ msgid "Further reading" +#~ msgstr "Weitere Literatur" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:61 (comment) -msgid "\\snapPizzicato" -msgstr "\\schlagPizzicato" +#~ msgid "Two-pass vertical spacing" +#~ msgstr "Vertikale Abstände mit zwei Durchgängen" -#. input/lsr/stemlets.ly:35 (comment) -msgid "N.B. use Score.Stem to set for the whole score." -msgstr "Score.Stem benutzen, um es für die gesamte Partitur zu setzen" +#~ msgid "Overview of music functions" +#~ msgstr "Überblick über musikalische Funktionen" -#. input/lsr/string-quartet-template-simple.ly:34 (variable) -msgid "violinOne" -msgstr "GeigeEins" +#~ msgid "Programmer interfaces" +#~ msgstr "Schnittstelle für Programmierer" -#. input/lsr/string-quartet-template-simple.ly:43 (variable) -msgid "violinTwo" -msgstr "GeigeZwei" +#~ msgid "Markup programmer interface" +#~ msgstr "Programmierungsschnittstelle für Textbeschriftungen" -#. input/lsr/string-quartet-template-simple.ly:52 (variable) -msgid "viola" -msgstr "Bratsche" +#~ msgid "Using Scheme code instead of \\tweak" +#~ msgstr "Scheme-Code anstelle von \\tweak verwenden" -#. input/lsr/string-quartet-template-with-separate-parts.ly:63 (comment) -msgid "piece.ly" -msgstr "piece.ly" +#~ msgid "Using Scheme code instead of @code{\\tweak}" +#~ msgstr "Scheme-Code anstelle von @code{\tweak} verwenden" -#. input/lsr/string-quartet-template-with-separate-parts.ly:64 (comment) -msgid "(This is the global definitions file)" -msgstr "(Globale Definitionen)" +#~ msgid "Identifiers" +#~ msgstr "Bezeichner" -#. input/lsr/string-quartet-template-with-separate-parts.ly:71 (variable) -msgid "Violinone" -msgstr "Geigeeins" +#~ msgid "GNU LilyPond --- Manuel d'initiation" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" -#. input/lsr/string-quartet-template-with-separate-parts.ly:76 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:82 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:89 (comment) -msgid "*********************************" -msgstr "**********************************" +#~ msgid "Commonly tweaked properties" +#~ msgstr "Übliche Veränderungen der Einstellungen" -#. input/lsr/string-quartet-template-with-separate-parts.ly:77 (variable) -msgid "Violintwo" -msgstr "Geigezwei" +#~ msgid "Hauteurs" +#~ msgstr "Hauteurs" -#. input/lsr/string-quartet-template-with-separate-parts.ly:83 (variable) -msgid "Viola" -msgstr "Bratsche" +#~ msgid "Durées et rythme" +#~ msgstr "Durées·et·rythme" -#. input/lsr/string-quartet-template-with-separate-parts.ly:90 (variable) -msgid "Cello" -msgstr "Cello" +#~ msgid "Silences" +#~ msgstr "Silences" -#. input/lsr/string-quartet-template-with-separate-parts.ly:96 (comment) -msgid "**********************************" -msgstr "**********************************" +#~ msgid "Métrique" +#~ msgstr "Métrique" -#. input/lsr/string-quartet-template-with-separate-parts.ly:107 (comment) -msgid "These are the other files you need to save on your computer" -msgstr "Das sind die anderen Dateien, die gespeichert werden müssen" +#~ msgid "Tout ensemble" +#~ msgstr "Tout·ensemble" -#. input/lsr/string-quartet-template-with-separate-parts.ly:109 (comment) -msgid "score.ly" -msgstr "score.ly" +#~ msgid "Exemples cliquables" +#~ msgstr "Exemples·cliquables" -#. input/lsr/string-quartet-template-with-separate-parts.ly:110 (comment) -msgid "(This is the main file)" -msgstr "(Das ist die Hauptdatei)" +#~ msgid "Outside staff objects" +#~ msgstr "Objekte außerhalb des Notensystems" -#. input/lsr/string-quartet-template-with-separate-parts.ly:113 (comment) -#, python-format -msgid "" -"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " -"separate file" -msgstr "" -"\\include \\\"piece.ly\\\" %%% Zeile einkommentieren, wenn eine " -"extra Datei benutzt wird" +#~ msgid "GNU LilyPond --- Utilisation des programmes" +#~ msgstr "GNU LilyPond -- Die Programmbenutzung" -#. input/lsr/string-quartet-template-with-separate-parts.ly:122 (comment) -msgid "{ Uncomment this block when using separate files" -msgstr "{ Diesen Block einkommentieren, wenn extra Dateien benutzt werden" +#~ msgid "Updating with @command{convert-ly}" +#~ msgstr "Dateien mit @command{convert-ly} aktualisieren" -#. input/lsr/string-quartet-template-with-separate-parts.ly:124 (comment) -msgid "vn1.ly" -msgstr "vn1.ly" +#~ msgid "GNU LilyPond --- Manuel de notation" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" -#. input/lsr/string-quartet-template-with-separate-parts.ly:125 (comment) -msgid "(This is the Violin 1 part file)" -msgstr "(Stimme der ersten Geige)" +#~ msgid "Repeat syntax" +#~ msgstr "Die Syntax der Wiederholungen" -#. input/lsr/string-quartet-template-with-separate-parts.ly:134 (comment) -msgid "vn2.ly" -msgstr "vn2.ly" +#~ msgid "Other repeats" +#~ msgstr "Andere Wiederholungen" -#. input/lsr/string-quartet-template-with-separate-parts.ly:135 (comment) -msgid "(This is the Violin 2 part file)" -msgstr "(Stimme der zweiten Geige)" +#~ msgid "Tremolo subdivisions" +#~ msgstr "Tremolo-Unterteilung" -#. input/lsr/string-quartet-template-with-separate-parts.ly:144 (comment) -msgid "vla.ly" -msgstr "vla.ly" +#~ msgid "Basic polyphony" +#~ msgstr "Einfache Mehrstimmigkeit" -#. input/lsr/string-quartet-template-with-separate-parts.ly:145 (comment) -msgid "(This is the Viola part file)" -msgstr "(Stimme der Bratsche)" +#~ msgid "Blank music sheet" +#~ msgstr "Ein leeres Notenblatt" -#. input/lsr/string-quartet-template-with-separate-parts.ly:154 (comment) -msgid "vlc.ly" -msgstr "vlc.ly" +#~ msgid "Text and line spanners" +#~ msgstr "Text und Linien" -#. input/lsr/string-quartet-template-with-separate-parts.ly:155 (comment) -msgid "(This is the Cello part file)" -msgstr "(Stimme des Cellos)" +#~ msgid "Nested scores" +#~ msgstr "Geschachtelte Systeme" -#. input/lsr/sub-dividing-beams.ly:50 (comment) -msgid "Set beam sub-group length to an eighth note" -msgstr "Balkenuntergruppenlänge als Achtel definieren" +#~ msgid "Page wrapping text" +#~ msgstr "Text über mehrere Seiten" -#. input/lsr/sub-dividing-beams.ly:54 (comment) -msgid "Set beam sub-group length to a sixteenth note" -msgstr "Balkenuntergruppenlänge als Sechszehntel definieren" +#~ msgid "Mélismes dans certaines strophes seulement" +#~ msgstr "Mélismes·dans·certaines·strophes·seulement" -#. input/lsr/suppressing-warnings-for-clashing-note-columns.ly:19 (variable) -msgid "ignore" -msgstr "ignorieren" +#~ msgid "Basculer vers une mélodie alternative" +#~ msgstr "Basculer·vers·une·mélodie·alternative" -#. input/lsr/three-sided-box.ly:16 (comment) -msgid "New command to add a three sided box, with sides north, west and south" -msgstr "" -"Neuer Befehl um einen Kasten mit drei Seiten (Nord, West und Süd) zu " -"erstellen" +#~ msgid "Introduction to ancient notation" +#~ msgstr "Einführung in die Notation Alter Musik" -#. input/lsr/three-sided-box.ly:17 (comment) -msgid "Based on the box-stencil command defined in scm/stencil.scm" -msgstr "Basierend auf dem box-stencil-Befehl, definiert in scm/stencil.scm" +#~ msgid "Ancient notation supported" +#~ msgstr "Notation von Alter Musik, die unterstützt wird" -#. input/lsr/three-sided-box.ly:18 (comment) -msgid "Note that you use \\\";\\\" to comment a line in Scheme" -msgstr "" -"Achtung: \\\";\\\" wird benutzt um eine Zeile in Scheme auszukommentieren" +#~ msgid "Ancient note heads" +#~ msgstr "Notenköpfe Alter Musik" -#. input/lsr/three-sided-box.ly:32 (comment) -msgid "The corresponding markup command, based on the \\box command defined " -msgstr "" -"Der entsprechende Beschriftungbefehl, basierend auf dem \\box-Befehl " -"definiert" +#~ msgid "Ancient accidentals" +#~ msgstr "Versetzungszeichen Alter Musik" -#. input/lsr/three-sided-box.ly:33 (comment) -msgid "in scm/define-markup-commands.scm" -msgstr "in scm/define-markup-commands.scm" +#~ msgid "Ancient flags" +#~ msgstr "Fähnchen Alter Musik" -#. input/lsr/three-sided-box.ly:47 (comment) -msgid "Test it:" -msgstr "testen:" +#~ msgid "Ancient time signatures" +#~ msgstr "Taktangaben Alter Musik" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:127 (variable) -msgid "incipitDiscantus" -msgstr "incipitDiscantus" +#~ msgid "Additional note signs" +#~ msgstr "Zusätzliche Notenzeichen" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:151 (variable) -msgid "incipitAltus" -msgstr "IncipitAltus" +#~ msgid "Ancient articulations" +#~ msgstr "Artikulationszeichen Alter Musik" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:176 (variable) -msgid "incipitTenor" -msgstr "IncipitTenor" +#~ msgid "Gregorian square neumes ligatures" +#~ msgstr "Ligaturen der gregorianischen Quadratnotation" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:202 (variable) -msgid "incipitBassus" -msgstr "IncipitBassus" +#~ msgid "Transcribing ancient music" +#~ msgstr "Transkription Alter Musik" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:226 (comment) -msgid "" -"StaffGroup is used instead of ChoirStaff to get bar lines between systems" -msgstr "" -"StaffGroup wird anstelle von ChoirStaff benutzt, um Taktstriche zwischen " -"Systemen zu haben" +#~ msgid "Annotational accidentals" +#~ msgstr "Vorgeschlagene Versetzungszeichen" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:269 (comment) -msgid "the next three instructions keep the lyrics between the barlines" -msgstr "" -"die nächsten drei Anweisungen, um den Text zwischen den Taktstriche zu halten" +#~ msgid "Baroque rhythmic notation" +#~ msgstr "Notation barocker Rhythmen" -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:131 (variable) -msgid "naturalizeMusic" -msgstr "AuflösungszeichenNoten" +#~ msgid "Horizontal Spacing" +#~ msgstr "Horizontale Abstände" -#. input/lsr/tweaking-clef-properties.ly:111 (comment) -msgid "The default treble clef" -msgstr "Standard-Sopranschlüssel" +#~ msgid "Layout tunings within contexts" +#~ msgstr "Layouteinstellungen mit Umgebungen" -#. input/lsr/tweaking-clef-properties.ly:113 (comment) -msgid "The standard bass clef" -msgstr "Standard-Bassschlüssel" +#~ msgid "Constructing a tweak" +#~ msgstr "Eine Korrektur konstruieren" -#. input/lsr/tweaking-clef-properties.ly:118 (comment) -msgid "The baritone clef" -msgstr "Baritonschlüssel" +#~ msgid "Using Scheme code instead of tweak" +#~ msgstr "Using·Scheme·code·instead·of·tweak" -#. input/lsr/tweaking-clef-properties.ly:123 (comment) -msgid "The standard choral tenor clef" -msgstr "Standard-Chortenorschlüssel" +#~ msgid "GNU LilyPond: Manual de aprendizaje" +#~ msgstr "GNU LilyPond -- Das Handbuch zum Lernen" -#. input/lsr/tweaking-clef-properties.ly:129 (comment) -msgid "A non-standard clef" -msgstr "Nicht-Standard-Schlüssel" +#~ msgid "Instrucciones predefinidas" +#~ msgstr "Instrucciones·predefinidas" -#. input/lsr/tweaking-clef-properties.ly:135 (comment) -msgid "The following clef changes do not preserve" -msgstr "Folgende Schlüsselwechsel erhalten nicht" +#~ msgid "Fragmentos de código seleccionados" +#~ msgstr "Fragmentos·de·código·seleccionados" -#. input/lsr/tweaking-clef-properties.ly:136 (comment) -msgid "the normal relationship between notes and clefs:" -msgstr "das normale Verhältnis zwischen Noten und Schlüsseln" +#~ msgid "Propiedades trucadas frecuentemente" +#~ msgstr "Propiedades·trucadas·frecuentemente" -#. input/lsr/tweaking-clef-properties.ly:151 (comment) -msgid "Here we go back to the normal clef:" -msgstr "Wieder der normale Schlüssel:" +#~ msgid "Véase también" +#~ msgstr "Véase·también" -#. input/lsr/using-beatlength-and-beatgrouping.ly:34 (comment) -msgid "The default in 3/4 time is to beam in three groups" -msgstr "Standard in 3/4-Takt sind drei bebalkte Gruppen" +#~ msgid "Advertencias y problemas conocidos" +#~ msgstr "Advertencias·y·problemas·conocido" -#. input/lsr/using-beatlength-and-beatgrouping.ly:35 (comment) -msgid "each of a quarter note length" -msgstr "jede mit der Dauer einer Viertel" +#~ msgid "Automatic behaviour" +#~ msgstr "Automatisches Verhalten" -#. input/lsr/using-beatlength-and-beatgrouping.ly:39 (comment) -msgid "No auto-beaming is defined for 12/16" -msgstr "Keine autom. Bebalkung definiert für 12/16" +#~ msgid "Updating old files" +#~ msgstr "Alte Dateien aktualisieren" -#. input/lsr/using-beatlength-and-beatgrouping.ly:43 (comment) -msgid "Change time signature symbol, but retain underlying 3/4 beaming" -msgstr "Taktart-Symbol ändern, aber 3/4-Bebalkung beibehalten" +#~ msgid "GNU LilyPond: Manual de utilización del programa" +#~ msgstr "GNU LilyPond -- Die Programmbenutzung" -#. input/lsr/using-beatlength-and-beatgrouping.ly:47 (comment) -msgid "The 3/4 time default grouping of (1 1 1) and beatLength of 1/8" -msgstr "3/4-Taktart Standardgruppen (1 1 1) und beatLenght von 1/8" +#~ msgid "GNU LilyPond: Manual de referencia de la notación" +#~ msgstr "GNU LilyPond -- Die Notationsreferenz" -#. input/lsr/using-beatlength-and-beatgrouping.ly:48 (comment) -msgid "are not consistent with a measureLength of 3/4, so the beams" -msgstr "stimme nicht überein mit measureLenght von 3/4, sodass die Balken" +#~ msgid "El tipografiador de música" +#~ msgstr "GNU LilyPond -- Das Notensatzprogramm" -#. input/lsr/using-beatlength-and-beatgrouping.ly:49 (comment) -msgid "are grouped at beatLength intervals" -msgstr "anhand von beatLength-Intervallen gruppiert werden" +#~ msgid "GNU LilyPond -- Handbuch zum Lernen" +#~ msgstr "GNU LilyPond -- Handbuch zum Lernen" -#. input/lsr/using-beatlength-and-beatgrouping.ly:53 (comment) -msgid "Specify beams in groups of (3 3 2 3) 1/16th notes" -msgstr "Definition von Balken in Gruppen von (3 3 2 3) 1/16-Noten" +#~ msgid "Lilypond-book templates" +#~ msgstr "Lilypond-book-Vorlagen" -#. input/lsr/using-beatlength-and-beatgrouping.ly:54 (comment) -msgid "3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply," -msgstr "3+3+2+3=11, und 11*16<>3/4, also trifft beatGrouping nicht zu," +#~ msgid "GNU LilyPond -- Programmbenutzung" +#~ msgstr "GNU LilyPond -- Programmbenutzung" -#. input/lsr/using-beatlength-and-beatgrouping.ly:55 (comment) -msgid "and beams are grouped at beatLength (1/16) intervals" -msgstr "und Balken werden gruppiert anhand von beatLength (1/16)-Intervallen" +#~ msgid "Das Notensatzprogramm" +#~ msgstr "Das Notensatzprogramm" -#. input/lsr/using-beatlength-and-beatgrouping.ly:60 (comment) -msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" -msgstr "Definition von Balkengruppen für (3 4 2 3) 1/16-Noten" +#~ msgid "Ignorieren von Melismen" +#~ msgstr "Melismen ignorieren" -#. input/lsr/using-beatlength-and-beatgrouping.ly:61 (comment) -msgid "3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies" -msgstr "3+4+2+3=12, und 12*1/16=3/4, also beatGrouping wird verwendet" +#~ msgid "The next line is not needed in 2.11.x or later:" +#~ msgstr "Die nächste Zeile braucht man nicht in 2.11.x oder später" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:17 (variable) -msgid "parallelogram" -msgstr "Parallelogramm" +#~ msgid "Automatic beams two per two in 4/4 or 2/2 time signature" +#~ msgstr "Automatische Balken zwei und zwei in 4/4 oder 2/2-Takten" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:32 (variable) -msgid "myNoteHeads" -msgstr "meineNotenköpfe" +#~ msgid "_____" +#~ msgstr "_____" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:33 (variable) -msgid "normalNoteHeads" -msgstr "normaleNotenköpfe" +#~ msgid "Default | | | |" +#~ msgstr "Standard····|·|·|·|" -#. input/lsr/utf-8.ly:34 (comment) -msgid "end verbatim - this comment is a hack to prevent texinfo.tex" -msgstr "Ende von verbatim -- Dieser Kommentar ist ein Trick um texinfo.tex" +#~ msgid "_ _" +#~ msgstr "_..._" -#. input/lsr/utf-8.ly:35 (comment) -msgid "from choking on non-European UTF-8 subsets" -msgstr "" -"daran zu hindern, sich an nicht-europäische UTF-8-Untergruppen zu stören" +#~ msgid "Required | | | |" +#~ msgstr "Benötigt····|·|·|·|" -#. input/lsr/utf-8.ly:36 (comment) -msgid "Cyrillic font" -msgstr "Kyrillische Schrift" +#~ msgid "macro for beamed two per two in 2/2 and 4/4 time signature" +#~ msgstr "Makro für bebalkte zwei und zwei in 2/2 und 4/4 Takten" -#. input/lsr/utf-8.ly:37 (variable) -msgid "bulgarian" -msgstr "Bulgarisch" +#~ msgid "qBeam" +#~ msgstr "qBalken" -#. input/lsr/utf-8.ly:41 (variable) -msgid "hebrew" -msgstr "Hebräisch" +#~ msgid "Use the macro" +#~ msgstr "Makro benutzen" -#. input/lsr/utf-8.ly:45 (variable) -msgid "japanese" -msgstr "Japanisch" +#~ msgid "Change time signature symbol but keep 3/4 beaming" +#~ msgstr "Taktartsymbol ändern, aber 3/4-Balken" -#. input/lsr/utf-8.ly:52 (comment) -msgid "\\\"a legal song to you\\\"" -msgstr "\\\"a·legal·song·to·you\\\"" +#~ msgid "due to unchanged underlying time signature" +#~ msgstr "wegen unveränderter Taktartaufteilung behalten" -#. input/lsr/utf-8.ly:53 (variable) -msgid "portuguese" -msgstr "Portugiesisch" +#~ msgid "Lose 3/4 beaming now \\time has been changed" +#~ msgstr "3/4-Balken lösen, da \\time geändert wurde" -#. input/lsr/vertically-centered-common-lyrics.ly:19 (variable) -msgid "leftbrace" -msgstr "linkeKlammer" +#~ msgid "TAB" +#~ msgstr "TAB" -#. input/lsr/vertically-centered-common-lyrics.ly:20 (variable) -msgid "rightbrace" -msgstr "rechteKlammer" +#~ msgid "define Dynamics context" +#~ msgstr "Dynamik-Kontext definieren" -#. input/lsr/vertically-centered-common-lyrics.ly:22 (variable) -msgid "dropLyrics" -msgstr "Textnachunten" +#~ msgid "modify PianoStaff context to accept Dynamics context" +#~ msgstr "PianoStaff-Kontext verändern, dass er Dynamics-Kontext akzeptiert" -#. input/lsr/vertically-centered-common-lyrics.ly:29 (variable) -msgid "raiseLyrics" -msgstr "Textnachoben" +#~ msgid "Revert default values in scm/auto-beam.scm for 12/8 time" +#~ msgstr "Standardwerte von scm/auto-beam.scm für 12/8-Takt herstellen" -#. input/lsr/vertically-centered-common-lyrics.ly:36 (variable) -msgid "skipFour" -msgstr "überspringeVier" +#~ msgid "melodyVoi" +#~ msgstr "MelodieStimme" -#. input/lsr/vertically-centered-common-lyrics.ly:38 (variable) -msgid "lyricsA" -msgstr "TextA" +#~ msgid "VoiceBassRhytm" +#~ msgstr "StimmeBassRhythmus" -#. input/lsr/vertically-centered-common-lyrics.ly:40 (variable) -msgid "lyricsB" -msgstr "TextB" +#~ msgid "Define the fret diagrams to be used" +#~ msgstr "Die benutzten Bund-Diagramme definieren" -#. input/lsr/vertically-centered-common-lyrics.ly:41 (variable) -msgid "lyricsC" -msgstr "TextC" +#~ msgid "cFretDiagram" +#~ msgstr "cBundDiagramm" -#. input/lsr/vertically-centered-common-lyrics.ly:42 (variable) -msgid "lyricsD" -msgstr "TextD" +#~ msgid "gFretDiagram" +#~ msgstr "gBundDiagramm" -#. input/lsr/vertically-centered-common-lyrics.ly:49 (context id) -msgid "m" -msgstr "m" +#~ msgid "now it can be used as \\snappizzicato after the note/chord" +#~ msgstr "" +#~ "jetzt kann es als \\schlagPizzicato nach einer Note/Akkord benutzt werden" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:44 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:37 (variable) -#. input/lsr/vocal-ensemble-template.ly:41 (variable) -msgid "sopMusic" -msgstr "SoprNoten" +#~ msgid "Note that a direction (-, ^ or _) is required." +#~ msgstr "Eine Richtung (-, ^ oder _) wird benötigt" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:47 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:40 (variable) -#. input/lsr/vocal-ensemble-template.ly:44 (variable) -msgid "sopWords" -msgstr "SopranText" +#~ msgid "This does NOT work:" +#~ msgstr "Das funktioniert NICHT:" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:67 (context id) -#. input/lsr/vocal-ensemble-template.ly:72 (context id) -msgid "women" -msgstr "frauen" +#~ msgid "\\snapPizzicato" +#~ msgstr "\\schlagPizzicato" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:82 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:77 (context id) -#. input/lsr/vocal-ensemble-template.ly:84 (context id) -msgid "men" -msgstr "Männer" +#~ msgid "The default in 3/4 time is to beam in three groups" +#~ msgstr "Standard in 3/4-Takt sind drei bebalkte Gruppen" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:111 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (comment) -#. input/lsr/vocal-ensemble-template.ly:102 (comment) -msgid "a little smaller so lyrics" -msgstr "etwas kleiner, damit der Text" +#~ msgid "each of a quarter note length" +#~ msgstr "jede mit der Dauer einer Viertel" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:112 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (comment) -#. input/lsr/vocal-ensemble-template.ly:103 (comment) -msgid "can be closer to the staff" -msgstr "näher am System sein kann" +#~ msgid "No auto-beaming is defined for 12/16" +#~ msgstr "Keine autom. Bebalkung definiert für 12/16" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (comment) -msgid "we could remove the line about this with the line below, since we want" -msgstr "" -"die Zeile oberhalb könnte mir der Zeile unterhalb entfernt werden, weil" +#~ msgid "Change time signature symbol, but retain underlying 3/4 beaming" +#~ msgstr "Taktart-Symbol ändern, aber 3/4-Bebalkung beibehalten" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:74 (comment) -msgid "the alto lyrics to be below the alto Voice anyway." -msgstr "der Alt-Text sowieso unter der Altstimme sein soll" +#~ msgid "The 3/4 time default grouping of (1 1 1) and beatLength of 1/8" +#~ msgstr "3/4-Taktart Standardgruppen (1 1 1) und beatLenght von 1/8" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:75 (comment) -msgid "\\new Lyrics \\lyricsto altos \\altoWords" -msgstr "\\new·Lyrics·\\lyricsto·altos·\\altoWords" +#~ msgid "are not consistent with a measureLength of 3/4, so the beams" +#~ msgstr "stimme nicht überein mit measureLenght von 3/4, sodass die Balken" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:84 (comment) -msgid "again, we could replace the line above this with the line below." -msgstr "die Zeile oberhalb könnte mit der Zeile unterhalb ersetzt werden" +#~ msgid "are grouped at beatLength intervals" +#~ msgstr "anhand von beatLength-Intervallen gruppiert werden" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:85 (comment) -msgid "\\new Lyrics \\lyricsto basses \\bassWords" -msgstr "\\new·Lyrics·\\lyricsto·basses·\\bassWords" +#~ msgid "Specify beams in groups of (3 3 2 3) 1/16th notes" +#~ msgstr "Definition von Balken in Gruppen von (3 3 2 3) 1/16-Noten" -#. input/lsr/volta-multi-staff.ly:13 (variable) -msgid "voltaMusic" -msgstr "KlammerNoten" +#~ msgid "3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply," +#~ msgstr "3+3+2+3=11, und 11*16<>3/4, also trifft beatGrouping nicht zu," -msgid "Up:" -msgstr "NachOben:" +#~ msgid "and beams are grouped at beatLength (1/16) intervals" +#~ msgstr "" +#~ "und Balken werden gruppiert anhand von beatLength (1/16)-Intervallen" -msgid "Next:" -msgstr "Weiter:" +#~ msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" +#~ msgstr "Definition von Balkengruppen für (3 4 2 3) 1/16-Noten" -msgid "Previous:" -msgstr "Zurück:" +#~ msgid "3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies" +#~ msgstr "3+4+2+3=12, und 12*1/16=3/4, also beatGrouping wird verwendet" -msgid "Appendix " -msgstr "Anhang " +#~ msgid "Right-align bar numbers" +#~ msgstr "Taktnummern rechtsbündig" -msgid "Footnotes" -msgstr "Fußnoten" +#~ msgid "Using the @code{break-aligned-interface}" +#~ msgstr "Das @code{break-aligned-interface} benutzen" -msgid "Table of Contents" -msgstr "Inhaltsverzeichnis" +#~ msgid "How LilyPond files work" +#~ msgstr "Wie eine LilyPond-Datei funktioniert" #~ msgid "MacOS X on the command-line" #~ msgstr "MacOS X auf der Kommandozeile" @@ -12592,9 +11786,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "GNU LilyPond -- Notationsreferenz" #~ msgstr "GNU LilyPond -- Notationsreferenz" -#~ msgid "Common properties" -#~ msgstr "Übliche Eigenschaften" - #~ msgid "Controlling visibility of objects" #~ msgstr "Die Sichtbarkeit von Objekten kontrollieren" @@ -12610,9 +11801,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "TODO moved into scheme" #~ msgstr "TODO nach Scheme verschoben" -#~ msgid "Use 'bar-size to control the height of the tick," -#~ msgstr "'bar-size benutzen um die Höhe des Häkchens zu bestimmen," - #~ msgid "and 'extra-offset to determine its position." #~ msgstr "'extra-offset, umd seine Position zu bestimmen." @@ -12634,12 +11822,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "bar line at the end." #~ msgstr "Taktlinie am Ende setzen" -#~ msgid "applies to \\\"fas\\\"" -#~ msgstr "gehört zu \\\"fas\\\"" - -#~ msgid "Common tweaks" -#~ msgstr "Übliche Optimierungen" - #~ msgid "GNU LilyPond -- Das Notationsprogramm" #~ msgstr "GNU LilyPond -- Das Notationsprogramm" @@ -12683,9 +11865,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Create 9/8 split into 2/4 + 5/8" #~ msgstr "Erstelle 9/8 als 2/4 + 5/8" -#~ msgid "Keyboard instruments" -#~ msgstr "Tasteninstrumente" - #~ msgid "Bowed instruments" #~ msgstr "Streichinstrumente" @@ -12733,9 +11912,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Collision Resolution" #~ msgstr "Auflösung von Zusammenstößen" -#~ msgid "The piano staff" -#~ msgstr "Das Klaviersystem" - #~ msgid "Right hand fingerings" #~ msgstr "Fingersatz der rechten Hand" @@ -12766,18 +11942,12 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Program usage" #~ msgstr "Programmbenutzung" -#~ msgid "Other information" -#~ msgstr "Mehr Information" - #~ msgid "Unix" #~ msgstr "Unix" #~ msgid "Working on text files" #~ msgstr "Arbeiten an Text-Dateien" -#~ msgid "legato" -#~ msgstr "Legato" - #~ msgid "Guitar tablatures" #~ msgstr "Gitarren-Tabulaturen" @@ -12802,24 +11972,15 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Micro tones" #~ msgstr "Mikrotöne" -#~ msgid "Relative octaves" -#~ msgstr "Relative Oktavenbezeichnung" - #~ msgid "Octave check" #~ msgstr "Oktavenüberprüfung" -#~ msgid "Augmentation dots" -#~ msgstr "Punktierung" - #~ msgid "Skips" #~ msgstr "Überspringen von Zeichen" #~ msgid "Multi measure rests" #~ msgstr "Mehrtaktige Pausen" -#~ msgid "Bar check" -#~ msgstr "Taktüberprüfung" - # # #~ msgid "Barnumber check" @@ -12835,9 +11996,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Microtones in MIDI" #~ msgstr "Mikrotöne" -#~ msgid "Input files" -#~ msgstr "Quelldateien" - #~ msgid "A single music expression" #~ msgstr "Ein einzelner musikalischer Ausdruck" @@ -12942,9 +12100,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Autre documentation" #~ msgstr "Andere Dokumentation" -#~ msgid "fourth" -#~ msgstr "Quarte" - #~ msgid "How to read the tutorial" #~ msgstr "Wie soll man die Übung lesen" @@ -12990,9 +12145,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Chords sections" #~ msgstr "Notation von Akkorden" -#~ msgid "Entering chord names" -#~ msgstr "Akkordbezeichnungen eingeben" - #~ msgid "Chords mode" #~ msgstr "Akkord-Modus" @@ -13019,59 +12171,28 @@ msgstr "Inhaltsverzeichnis" #~ msgid "negra" #~ msgstr "Intervalle" -#~ msgid "marcato" -#~ msgstr "Marcato" - #~ msgid "staccatissimo" #~ msgstr "Staccatissimo" -#~ msgid "Modern chords" -#~ msgstr "Moderne Akkorde" - #~ msgid "About this manual" #~ msgstr "Über das Handbuch" -#~ msgid "Common notation" -#~ msgstr "Übliche Notation" - #, fuzzy #~ msgid "FGGChordNames" #~ msgstr "Akkord-Modus" -#~ msgid "Building chords" -#~ msgstr "Akkorde aufbauen" - #~ msgid "Lead sheets" #~ msgstr "Ein Song-Blatt" #~ msgid "Repeated figures" #~ msgstr "Wiederholungfiguren" -#, fuzzy -#~ msgid "Text markup commands" -#~ msgstr "Überblick über Textbeschriftungsbefehle" - -#~ msgid "Text markup list commands" -#~ msgstr "Überblick über Textbeschriftungsbefehle für Listen" - -#~ msgid "Text markup" -#~ msgstr "Textbeschriftung" - #~ msgid "Working with lyrics and identifiers" #~ msgstr "Mit Gesangtexten und Bezeichnern arbeiten" #~ msgid "Other vocal issues" #~ msgstr "Weitere Vokalmusikprobleme" -#~ msgid "Piano music" -#~ msgstr "Notation für Klavier" - -#~ msgid "Piano sections" -#~ msgstr "Notation von Musik für Klavier" - -#~ msgid "Automatic staff changes" -#~ msgstr "Automatische Notensystemwechsel" - #~ msgid "Manual staff switches" #~ msgstr "Manuelle Notensystemwechsel" @@ -13081,12 +12202,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Cross staff stems" #~ msgstr "Hälse über beide Systeme" -#~ msgid "Orchestral strings" -#~ msgstr "Orchesterstreicher" - -#~ msgid "Overview of text markup commands" -#~ msgstr "Überblick über Textbeschriftungsbefehle" - #~ msgid "Overview of text markup list commands" #~ msgstr "Überblick über Textbeschriftungsbefehle für Listen" @@ -13123,9 +12238,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Easy Notation note heads" #~ msgstr "Easy-Notation-Notenköpfe" -#~ msgid "Special noteheads" -#~ msgstr "Besondere Notenköpfe" - #, fuzzy #~ msgid "Modifying tuplet bracket length" #~ msgstr "Umgebungs-Eignschaften verändern" @@ -13145,12 +12257,6 @@ msgstr "Inhaltsverzeichnis" #~ msgid "More information" #~ msgstr "Mehr Information" -#~ msgid "Connecting notes" -#~ msgstr "Noten verbinden" - -#~ msgid "Other instrument specific notation" -#~ msgstr "Notation für verschiedene Instrumente" - #~ msgid "Advanced notation" #~ msgstr "Fortgeschrittene Notationstechniken" @@ -13176,14 +12282,8 @@ msgstr "Inhaltsverzeichnis" #~ msgid "Hyphens and extenders" #~ msgstr "Trennstriche und Fülllinien" -#~ msgid "Melismata" -#~ msgstr "Melismen" - #~ msgid "English" #~ msgstr "Englisch" #~ msgid "French" #~ msgstr "Französisch" - -#~ msgid "German" -#~ msgstr "Deutsch" diff --git a/Documentation/po/es.po b/Documentation/po/es.po index d9267de57d..16926a936f 100644 --- a/Documentation/po/es.po +++ b/Documentation/po/es.po @@ -3,29 +3,30 @@ # Copyright (C) 2006 Han-Wen Nienhuys, Jan Nieuwenhuizen # This file is distributed under the same license as the lilypond package. # -# Francisco Vila , 2007, 2008, 2009. +# Francisco Vila , 2007, 2008, 2009, 2011. msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-06 23:05+0200\n" -"PO-Revision-Date: 2009-07-14 18:12+0200\n" +"POT-Creation-Date: 2011-02-26 17:04+0100\n" +"PO-Revision-Date: 2011-02-27 18:14+0100\n" "Last-Translator: Francisco Vila \n" -"Language-Team: Español\n" +"Language-Team: Español" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: postprocess_html.py:45 +#: postprocess_html.py:55 #, python-format msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." msgstr "" "Esta página corresponde a %(package_name)s-%(package_version)s (%(branch_str)" "s)." -#: postprocess_html.py:47 +#: postprocess_html.py:57 #, python-format msgid "" "Your suggestions for the documentation " @@ -34,11207 +35,7912 @@ msgid "" msgstr "" "Se agradecen las sugerencias para la " "documentación. Informe de los fallos a través de la lista en español lilypond-es, o en " -"inglés a través de la lista oficial de " +"href=\"http://lists.gnu.org/mailman/listinfo/lilypond-es\">lilypond-es, " +"o en inglés a través de la lista oficial de " "fallos." -#: postprocess_html.py:59 +#: postprocess_html.py:69 #, python-format msgid "Other languages: %s." msgstr "Otros idiomas: %s." -#: postprocess_html.py:60 +#: postprocess_html.py:70 #, python-format msgid "About automatic language selection." msgstr "Acerca de la selección automática del idioma." -#: postprocess_html.py:316 +#: postprocess_html.py:324 msgid "stable-branch" msgstr "rama estable" -#: postprocess_html.py:318 +#: postprocess_html.py:326 msgid "development-branch" msgstr "rama de desarrollo" -#: texi-gettext.py:63 -msgid "" -"This section has not been translated yet; please refer to the manual in " -"English." -msgstr "Esta sección aún no está traducida; consulte el manual en inglés." - -#: translations-status.py:59 +#: translations-status.py:72 msgid "Section titles" msgstr "Títulos de sección" -#: translations-status.py:60 +#: translations-status.py:73 #, python-format -msgid "

    Last updated %s

    \n" -msgstr "

    Actualizado en %s

    \n" +msgid "Last updated %s" +msgstr "Actualizado en %s" -#: translations-status.py:61 +#: translations-status.py:74 msgid "Translators" msgstr "Traductores" -#: translations-status.py:61 +#: translations-status.py:74 msgid "Translation checkers" msgstr "Revisores" -#: translations-status.py:62 +#: translations-status.py:75 msgid "Translated" msgstr "Traducido" -#: translations-status.py:62 +#: translations-status.py:75 msgid "Up to date" msgstr "Actualizado" -#: translations-status.py:63 +#: translations-status.py:76 msgid "Other info" msgstr "Más inf." -#: translations-status.py:65 +#: translations-status.py:78 msgid "no" msgstr "no" -#: translations-status.py:66 +#: translations-status.py:79 msgid "not translated" msgstr "no traducido" -#: translations-status.py:68 +#: translations-status.py:81 #, python-format msgid "partially (%(p)d %%)" msgstr "parcialmente (%(p)d %%)" -#: translations-status.py:70 +#: translations-status.py:83 #, python-format msgid "partially translated (%(p)d %%)" msgstr "parlte. traducido (%(p)d %%)" -#: translations-status.py:71 translations-status.py:73 +#: translations-status.py:84 translations-status.py:86 msgid "yes" msgstr "sí" -#: translations-status.py:72 +#: translations-status.py:85 msgid "translated" msgstr "traducido" -#: translations-status.py:73 translations-status.py:74 +#: translations-status.py:86 translations-status.py:87 msgid "up to date" msgstr "actualizado" -#: translations-status.py:75 +#: translations-status.py:88 msgid "partially" msgstr "parcialmente" -#: translations-status.py:76 +#: translations-status.py:89 msgid "partially up to date" msgstr "parlte. actualizado" -#: translations-status.py:77 +#: translations-status.py:90 msgid "N/A" msgstr "N/D" -#: translations-status.py:78 +#: translations-status.py:91 msgid "pre-GDP" msgstr "pre-GDP" -#: translations-status.py:79 +#: translations-status.py:92 msgid "post-GDP" msgstr "post-GDP" #. -*- coding: utf-8 -*- -#. @node in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @node in Documentation/ja/user/lilypond-learning.tely -#. @node in Documentation/ja/user/lilypond-program.tely +#. Documentation/changes.tely:294 (variable) +msgid "coloredheads" +msgstr "cabezasColoreadas" + +#. Documentation/changes.tely:295 (variable) +msgid "noclef" +msgstr "sinclave" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi msgid "Top" -msgstr "" +msgstr "Arriba" -#. @top in Documentation/user/lilypond-learning.tely -msgid "GNU LilyPond --- Learning Manual" -msgstr "GNU LilyPond: Manual de aprendizaje" - -#. @node in Documentation/user/lilypond-learning.tely -#. @appendix in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @appendix in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @appendix in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @appendix in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @appendix in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @appendix in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @appendix in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @appendix in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -#. @node in Documentation/ja/user/lilypond-learning.tely -#. @appendix in Documentation/ja/user/lilypond-learning.tely -#. @node in Documentation/ja/user/lilypond-program.tely -#. @appendix in Documentation/ja/user/lilypond-program.tely -msgid "LilyPond index" -msgstr "Índice de LilyPond" +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "Nuevas funcionalidades en 2.13 repecto a 2.12" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "LilyPond: \\\\TITLE\\\\" + +#. @subsubheading in Documentation/macros.itexi msgid "Predefined commands" msgstr "Instrucciones predefinidas" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Selected Snippets" msgstr "Fragmentos de código seleccionados" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "See also" msgstr "Véase también" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Known issues and warnings" msgstr "Fallos y problemas conocidos" -#. @node in Documentation/user/preface.itely -#. @unnumbered in Documentation/user/preface.itely -#. @node in Documentation/fr/user/preface.itely -#. @unnumbered in Documentation/fr/user/preface.itely -#. @node in Documentation/es/user/preface.itely -#. @unnumbered in Documentation/es/user/preface.itely -#. @node in Documentation/de/user/preface.itely -#. @unnumbered in Documentation/de/user/preface.itely -#. @node in Documentation/ja/user/preface.itely -#. @unnumbered in Documentation/ja/user/preface.itely -msgid "Preface" -msgstr "Preámbulo" - -#. @node in Documentation/user/introduction.itely -#. @chapter in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @chapter in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @chapter in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @chapter in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @chapter in Documentation/ja/user/introduction.itely -msgid "Introduction" -msgstr "Introducción" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @section in Documentation/ja/user/introduction.itely -msgid "Background" -msgstr "Antecedentes" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Engraving" -msgstr "Grabado" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "Índice de LilyPond" + +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +msgid "Music engraving" +msgstr "Grabado musical" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "Historia de LilyPond" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraving details" +msgstr "Detalles del grabado musical" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "Fuentes tipográficas de música" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "Espaciado óptico" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Ledger lines" +msgstr "Líneas adicionales" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "Ajuste óptico del tamaño" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "¿Para qué trabajar tan duramente?" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely msgid "Automated engraving" msgstr "Grabado automático" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "What symbols to engrave?" -msgstr "¿Qué símbolos grabar?" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Beauty contests" +msgstr "Concursos de belleza" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "Mejoras mediante pruebas" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "Hacer las cosas bien" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "Construcción del software" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely msgid "Music representation" msgstr "Representación musical" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Example applications" -msgstr "Aplicaciones de ejemplo" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @section in Documentation/ja/user/introduction.itely -msgid "About the documentation" -msgstr "Sobre la documentación" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Learning Manual" -msgstr "Sobre el Manual de aprendizaje" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Music Glossary" -msgstr "Sobre el Glosario Musical" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Notation Reference" -msgstr "Sobre la Referencia de la notación" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Application Usage" -msgstr "Sobre el manual de Utilización del programa" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Snippet List" -msgstr "Sobre la lista de fragmentos de código" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Internals Reference" -msgstr "Sobre el Manual de Referencia de Funcionamiento Interno" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Other documentation" -msgstr "Otros documentos" - -#. Documentation/user/tutorial.itely:251 (comment) +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "¿Qué símbolos grabar?" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "Arquitectura flexible" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Putting LilyPond to work" +msgstr "Poner a LilyPond a trabajar" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "Ejemplos tipografiados (BWV 861)" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "Lista bibliográfica" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "Breve lista bibliográfica" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "Lista bibliográfica extensa" + +#. @subheading in Documentation/essay/literature.itely +msgid "University of Colorado Engraving music bibliography" +msgstr "Bibliografía sobre tipografía musical de la Universidad de Colorado" + +#. @subheading in Documentation/essay/literature.itely +msgid "Computer notation bibliography" +msgstr "Bibliografía sobre notación por ordenador" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving bibliography" +msgstr "Bibliografía sobre tipografía musical" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "GNU Free Documentation License" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "ADDENDUM: How to use this License for your documents" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "traLaLa" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "acción vacía para la predicción del analizador sintáctico" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3006 (variable) +#. Documentation/learning/fundamental.itely:3061 (variable) +#. Documentation/notation/changing-defaults.itely:3803 (variable) +#. Documentation/cs/learning/fundamental.itely:3259 (variable) +#. Documentation/cs/learning/fundamental.itely:3313 (variable) +msgid "padText" +msgstr "textoRelleno" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3845 (variable) +msgid "tempoPadded" +msgstr "tempoConRelleno" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "patron" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "Tutorial de Scheme" + +# ?? FVD +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Introduction to Scheme" +msgstr "Introducción a Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "Caja de arena de Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme variables" +msgstr "Variables de Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "Tipos de datos simples de Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "Tipos de datos compuestos de Scheme" + +# También Líneas divisorias. FVD +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "Pares" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Lists" +msgstr "Listas" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "Listas asociativas (listas-A)" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "Tablas de hash" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "Cálculos en Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "Procedimientos de Scheme" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "Definición de procedimientos" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "Predicados" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "Valores de retorno" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "Condicionales de Scheme" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "if" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "cond" +msgstr "cond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "Scheme en LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond Scheme syntax" +msgstr "Sintaxis del Scheme de LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond variables" +msgstr "Variables de LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "Variables de entrada y Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Object properties" +msgstr "Propiedades de los objetos" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "Variables compuestas de LilyPond" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "Desplazamientos" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "Dimensiones" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "Listas-A de propiedades" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "Cadenas de listas-A" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "Representación interna de la música" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "Construcción de funciones complejas" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "Presentación de expresiones musicales" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "Propiedades de la música" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "Doblar una nota con ligaduras (ejemplo)" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "Añadir articulación a las notas (ejemplo)" + +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "barraManual" + +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "varSi" + +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "varNo" + +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "variante" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "Interfaces para programadores" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "Funciones musicales" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "Sintaxis de las funciones musicales" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "Funciones de sustitución sencillas" + +# fuzzy. FVD +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "Funciones de sustitución inmediata" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "Matemáticas dentro de las funciones" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "Funciones sin argumentos" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "Funciones vacías" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "Funciones de marcado" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "Construcción del marcado en Scheme" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "Cómo funciona internamente el marcado" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "Definición de una instrucción de marcado nueva" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "Sintaxis de la definición de instrucciones de marcado" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "On properties" +msgstr "Sobre las propiedades" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "A complete example" +msgstr "Un ejemplo completo" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Adapting builtin commands" +msgstr "Adaptación de instrucciones predefinidas" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "Definición de nuevas instrucciones de lista de marcado" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "Contextos para programadores" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "Evaluación de contextos" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "Ejecutar una función sobre todos los objetos de la presentación" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "Funciones de callback" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "Código de Scheme en línea" + +# ??FVD +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "Trucos difíciles" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "LilyPond Scheme interfaces" +msgstr "Interfaces de Scheme en LilyPond" + +#. Documentation/learning/tutorial.itely:210 (comment) msgid "set the starting point to middle C" msgstr "fijar el punto de inicio en Do central" -#. Documentation/user/tutorial.itely:282 (comment) +#. Documentation/learning/tutorial.itely:241 (comment) msgid "one octave above middle C" msgstr "una octava por encima del Do central" -#. Documentation/user/tutorial.itely:298 (comment) +#. Documentation/learning/tutorial.itely:257 (comment) msgid "c is 1 staff space up, so is the c above" msgstr "el Do está un espacio por encima, es el Do agudo" -#. Documentation/user/tutorial.itely:299 (comment) +#. Documentation/learning/tutorial.itely:258 (comment) msgid "d is 2 up or 5 down, so is the d above" msgstr "el Re está 2 por encima ó 5 por debajo, es el Re agudo" -#. Documentation/user/tutorial.itely:300 (comment) +#. Documentation/learning/tutorial.itely:259 (comment) msgid "e is 3 up or 4 down, so is the e above" msgstr "el Mi está 3 por encima ó 4 por debajo, es el Mi agudo" -#. Documentation/user/tutorial.itely:301 (comment) +#. Documentation/learning/tutorial.itely:260 (comment) msgid "a is 6 up or 1 down, so is the a below" msgstr "el La está 6 por encima ó 1 por debajo, es el La grave" -#. Documentation/user/tutorial.itely:302 (comment) +#. Documentation/learning/tutorial.itely:261 (comment) msgid "g is 5 up or 2 down, so is the g below" msgstr "el Sol está 5 por encima ó 2 por debajo, es el Sol grave" -#. Documentation/user/tutorial.itely:303 (comment) +#. Documentation/learning/tutorial.itely:262 (comment) msgid "f is 4 up or 3 down, so is the f below" msgstr "el Fa está 4 por encima ó 3 por debajo, es el Fa grave" -#. Documentation/user/tutorial.itely:1757 (variable) -#. Documentation/user/working.itely:234 (variable) -#. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1132 (context id) -msgid "violin" -msgstr "violin" - -#. Documentation/user/tutorial.itely:1762 (variable) -#. input/lsr/string-quartet-template-simple.ly:70 (variable) -msgid "cello" -msgstr "cello" - -#. Documentation/user/tutorial.itely:1787 (variable) -msgid "tripletA" -msgstr "tresilloA" - -#. Documentation/user/tutorial.itely:1788 (variable) -msgid "barA" -msgstr "compasA" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -#. input/lsr/measure-counter.ly:26 (context id) -#. input/lsr/measure-counter.ly:33 (context id) -msgid "foo" -msgstr "bla" - -#. @node in Documentation/user/tutorial.itely -#. @chapter in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @chapter in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @chapter in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @chapter in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @chapter in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely msgid "Tutorial" msgstr "Tutorial" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely -msgid "First steps" -msgstr "Primeros pasos" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely msgid "Compiling a file" msgstr "Compilar un archivo" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Entering music and viewing output" -msgstr "Introducir música y ver la salida" - -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "Introducir código de entrada" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Producing output" +msgstr "Producción de un resultado de salida" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely msgid "MacOS X" msgstr "MacOS X" -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely msgid "Windows" msgstr "Windows" -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely -msgid "UNIX" -msgstr "UNIX" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "Línea de órdenes" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to write input files" +msgstr "Cómo escribir archivos de entrada" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Simple notation" msgstr "Notación sencilla" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @section in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @section in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @section in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @section in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Pitches" msgstr "Alturas" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "pitch" msgstr "altura" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "interval" msgstr "intervalo" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) msgid "scale" msgstr "escala" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "middle C" msgstr "Do central" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "octave" msgstr "octava" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "accidental" msgstr "alteración accidental" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Durations (rhythms)" msgstr "Duraciones (valores rítmicos)" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "beam" msgstr "barra" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "duration" msgstr "duración" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "whole note" msgstr "redonda" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "half note" msgstr "blanca" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "quarter note" msgstr "negra" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "dotted note" msgstr "figura con puntillo" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Rests" msgstr "Silencios" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "rest" msgstr "silencio" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Time signature" msgstr "Indicación de compás" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "time signature" msgstr "indicación de compás" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely +msgid "Tempo marks" +msgstr "Indicaciones de tempo" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely +msgid "tempo indication" +msgstr "indicación del tempo" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely +msgid "metronome" +msgstr "metrónomo" + +#. @subheading in Documentation/learning/tutorial.itely msgid "Clef" msgstr "Clave" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tutorial.itely msgid "clef" msgstr "clave" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "All together" msgstr "Todo junto" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Working on input files" msgstr "Trabajar sobre los archivos de entrada" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "How to read the manual" -msgstr "Cómo leer el manual" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Dealing with errors" +msgstr "Manejo de situaciones de error" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "General troubleshooting tips" +msgstr "Consejos generales sobre solución de problemas" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Some common errors" +msgstr "Errores usuales" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to read the manuals" +msgstr "Cómo leer los manuales" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "Material omitido" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Clickable examples" msgstr "Ejemplos con enlace" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "Panorámica de los manuales" + +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2987 (variable) +#. Documentation/learning/fundamental.itely:3011 (variable) +#. Documentation/cs/learning/common-notation.itely:1314 (variable) +#. Documentation/cs/learning/fundamental.itely:3240 (variable) +#. Documentation/cs/learning/fundamental.itely:3264 (variable) +msgid "violin" +msgstr "violin" + +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/cs/learning/common-notation.itely:1320 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +msgid "cello" +msgstr "cello" + +#. Documentation/learning/common-notation.itely:1255 (variable) +#. Documentation/cs/learning/common-notation.itely:1346 (variable) +msgid "tripletA" +msgstr "tresilloA" + +#. Documentation/learning/common-notation.itely:1256 (variable) +#. Documentation/cs/learning/common-notation.itely:1347 (variable) +msgid "barA" +msgstr "compasA" + +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "bla" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +msgid "Common notation" +msgstr "Notación común" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Single staff notation" msgstr "Notación en un solo pentagrama" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Bar checks" +msgstr "Comprobación de compás" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Accidentals and key signatures" msgstr "Alteraciones accidentales y armaduras" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Accidentals" msgstr "Alteraciones accidentales" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "sharp" msgstr "sostenido" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "flat" msgstr "bemol" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "double sharp" msgstr "doble sostenido" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "double flat" msgstr "doble bemol" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Key signatures" msgstr "Armaduras" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "key signature" msgstr "armadura de la tonalidad" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "major" msgstr "mayor" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "minor" msgstr "menor" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Warning: key signatures and pitches" msgstr "Advertencia: armaduras y alturas" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "natural" msgstr "becuadro" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "transposition" msgstr "transposición" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "Pitch names" msgstr "Nombres de las notas" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Ties and slurs" msgstr "Ligaduras de unión y de expresión" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Ties" msgstr "Ligaduras de unión" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "tie" msgstr "ligadura de unión" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Slurs" msgstr "Ligaduras de expresión" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "slur" msgstr "ligadura de expresión" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Phrasing slurs" msgstr "Ligaduras de fraseo" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "phrasing" msgstr "fraseo" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Warnings: slurs vs. ties" msgstr "Advertencias: ligaduras de expresión frente a ligaduras de unión" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "articulation" msgstr "articulación" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Articulation and dynamics" msgstr "Articulaciones y matices dinámicos" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Articulations" msgstr "Articulaciones" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Fingerings" msgstr "Digitaciones" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "fingering" msgstr "digitaciones" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/user/tweaks.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Dynamics" msgstr "Matices dinámicos" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -#. input/lsr/piano-template-with-centered-dynamics.ly:57 (variable) +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) msgid "dynamics" msgstr "matices dinámicos" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "crescendo" msgstr "crescendo" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "decrescendo" msgstr "decrescendo" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Adding text" msgstr "Añadir texto" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Automatic and manual beams" msgstr "Barras automáticas y manuales" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Advanced rhythmic commands" msgstr "Instrucciones rítmicas avanzadas" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Partial measure" msgstr "Compás parcial" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "anacrusis" msgstr "anacrusa" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) msgid "Tuplets" msgstr "Grupos especiales" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "note value" msgstr "figura" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "triplet" msgstr "tresillo" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Grace notes" msgstr "Notas de adorno" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "grace notes" msgstr "notas de adorno" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "acciaccatura" msgstr "acciaccatura" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "appoggiatura" msgstr "appoggiatura" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Multiple notes at once" msgstr "Varias notas a la vez" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Music expressions explained" msgstr "Explicación de las expresiones musicales" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Analogy: mathematical expressions" msgstr "Analogía: expresiones matemáticas" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Simultaneous music expressions: multiple staves" msgstr "Expresiones musicales simultáneas: varios pentagramas" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "polyphony" msgstr "polifonía" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Simultaneous music expressions: single staff" msgstr "Expresiones musicales simultáneas: un solo pentagrama" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Multiple staves" msgstr "Varios pentagramas" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Staff groups" msgstr "Grupos de pentagramas" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/staff.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "brace" msgstr "llave" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "pantagrama" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/fundamental.itely +#. @rglos in Documentation/cs/learning/tweaks.itely +msgid "system" +msgstr "sistema" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Combining notes into chords" msgstr "Combinar notas para formar acordes" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/de/user/chords.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "chord" msgstr "acorde" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Single staff polyphony" msgstr "Polifonía en un solo pentagrama" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Songs" msgstr "Canciones" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Setting simple songs" msgstr "Elaborar canciones sencillas" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "lyrics" msgstr "letra" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Aligning lyrics to a melody" msgstr "Alineación de la letra a una melodía" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "melisma" msgstr "melisma" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/common-notation.itely msgid "extender line" msgstr "línea extensora" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Lyrics to multiple staves" msgstr "Letra en varios pentagramas" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Final touches" msgstr "Retoques finales" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Organizing pieces with variables" msgstr "Organizar las piezas mediante variables" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Version number" -msgstr "Número de la versión" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Adding titles" msgstr "Añadir títulos" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Absolute note names" msgstr "Nombres de nota absolutos" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "After the tutorial" msgstr "Más allá del tutorial" -#. Documentation/user/fundamental.itely:324 (context id) -#. Documentation/user/fundamental.itely:367 (context id) -#. input/lsr/piano-template-with-centered-lyrics.ly:58 (context id) +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/cs/learning/fundamental.itely:383 (context id) +#. Documentation/cs/learning/fundamental.itely:443 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:94 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:107 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) msgid "singer" msgstr "cantante" -#. Documentation/user/fundamental.itely:325 (context id) -#. Documentation/user/fundamental.itely:368 (context id) +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) +#. Documentation/cs/learning/fundamental.itely:384 (context id) +#. Documentation/cs/learning/fundamental.itely:444 (context id) msgid "vocal" msgstr "voz" -#. Documentation/user/fundamental.itely:328 (context id) -#. Documentation/user/fundamental.itely:371 (context id) -#. input/lsr/jazz-combo-template.ly:220 (variable) -#. input/lsr/jazz-combo-template.ly:280 (context id) +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/cs/learning/fundamental.itely:387 (context id) +#. Documentation/cs/learning/fundamental.itely:447 (context id) +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) msgid "piano" msgstr "piano" -#. Documentation/user/fundamental.itely:329 (context id) -#. Documentation/user/fundamental.itely:362 (variable) -#. Documentation/user/fundamental.itely:372 (context id) -#. Documentation/user/fundamental.itely:2669 (variable) -#. Documentation/user/fundamental.itely:2711 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:19 (variable) -#. input/lsr/jazz-combo-template.ly:223 (context id) -#. input/lsr/piano-template-simple.ly:30 (variable) -#. input/lsr/piano-template-simple.ly:49 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:47 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:36 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:58 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:47 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:68 (context id) -#. input/lsr/polyphony-in-tablature.ly:41 (variable) -#. input/lsr/polyphony-in-tablature.ly:59 (context id) -#. input/lsr/polyphony-in-tablature.ly:63 (context id) +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2595 (variable) +#. Documentation/learning/fundamental.itely:2657 (context id) +#. Documentation/cs/learning/fundamental.itely:388 (context id) +#. Documentation/cs/learning/fundamental.itely:438 (variable) +#. Documentation/cs/learning/fundamental.itely:448 (context id) +#. Documentation/cs/learning/fundamental.itely:2823 (variable) +#. Documentation/cs/learning/fundamental.itely:2885 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) msgid "upper" msgstr "superior" -#. Documentation/user/fundamental.itely:330 (context id) -#. Documentation/user/fundamental.itely:363 (variable) -#. Documentation/user/fundamental.itely:373 (context id) -#. Documentation/user/fundamental.itely:2676 (variable) -#. Documentation/user/fundamental.itely:2712 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:23 (variable) -#. input/lsr/jazz-combo-template.ly:224 (context id) -#. input/lsr/piano-template-simple.ly:38 (variable) -#. input/lsr/piano-template-simple.ly:50 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:52 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:44 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:60 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:55 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:69 (context id) -#. input/lsr/polyphony-in-tablature.ly:48 (variable) -#. input/lsr/polyphony-in-tablature.ly:60 (context id) -#. input/lsr/polyphony-in-tablature.ly:64 (context id) +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2602 (variable) +#. Documentation/learning/fundamental.itely:2658 (context id) +#. Documentation/cs/learning/fundamental.itely:389 (context id) +#. Documentation/cs/learning/fundamental.itely:439 (variable) +#. Documentation/cs/learning/fundamental.itely:449 (context id) +#. Documentation/cs/learning/fundamental.itely:2830 (variable) +#. Documentation/cs/learning/fundamental.itely:2886 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) msgid "lower" msgstr "inferior" -#. Documentation/user/fundamental.itely:360 (variable) -#. Documentation/user/simultaneous.itely:241 (context id) -#. Documentation/user/vocal.itely:578 (context id) -#. Documentation/user/vocal.itely:813 (context id) -#. Documentation/user/vocal.itely:834 (context id) -#. Documentation/user/vocal.itely:1234 (variable) -#. Documentation/user/vocal.itely:1276 (variable) -#. Documentation/user/ancient.itely:2413 (context id) -#. Documentation/user/ancient.itely:2452 (context id) -#. Documentation/user/changing-defaults.itely:483 (variable) -#. Documentation/user/changing-defaults.itely:490 (context id) -#. Documentation/user/changing-defaults.itely:500 (context id) -#. Documentation/user/changing-defaults.itely:505 (context id) -#. Documentation/user/changing-defaults.itely:522 (variable) -#. Documentation/user/changing-defaults.itely:540 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:34 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:45 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:52 (context id) -#. input/lsr/demo-midiinstruments.ly:28 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:28 (context id) -#. input/lsr/guitar-strum-rhythms.ly:65 (context id) -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:35 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:35 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:35 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:36 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:49 (variable) -#. input/lsr/single-staff-template-with-only-notes.ly:41 (variable) -#. input/lsr/vertically-centered-common-lyrics.ly:44 (variable) +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/cs/learning/fundamental.itely:436 (variable) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) msgid "melody" msgstr "melodia" -#. Documentation/user/fundamental.itely:361 (variable) -#. Documentation/user/vocal.itely:1061 (variable) -#. Documentation/user/vocal.itely:1239 (variable) -#. Documentation/user/vocal.itely:1280 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:52 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:43 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:43 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:57 (variable) +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/cs/learning/fundamental.itely:437 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) msgid "text" msgstr "texto" -#. Documentation/user/fundamental.itely:443 (context id) -#. Documentation/user/staff.itely:530 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (comment) +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/cs/learning/fundamental.itely:515 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) msgid "main" msgstr "principal" -#. Documentation/user/fundamental.itely:632 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\"" -msgstr "Voz \\\"1\\\" Voz \\\"2\\\"" +#. Documentation/learning/fundamental.itely:627 (comment) +#. Documentation/cs/learning/fundamental.itely:719 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "Voz \\\"1\\\" Voz \\\"2\\\"" -#. Documentation/user/fundamental.itely:642 (comment) +#. Documentation/learning/fundamental.itely:637 (comment) +#. Documentation/cs/learning/fundamental.itely:729 (comment) msgid "Voice \\\"1\\\" Voice \\\"2\\\"" msgstr "Voz \\\"1\\\" Voz \\\"2\\\"" -#. Documentation/user/fundamental.itely:657 (comment) +#. Documentation/learning/fundamental.itely:652 (comment) +#. Documentation/cs/learning/fundamental.itely:744 (comment) msgid "Voice \\\"1\\\"" msgstr "Voz \\\"1\\\"" -#. Documentation/user/fundamental.itely:662 (comment) +#. Documentation/learning/fundamental.itely:657 (comment) +#. Documentation/cs/learning/fundamental.itely:749 (comment) msgid "Voice \\\"2\\\"" msgstr "Voz \\\"2\\\"" -#. Documentation/user/fundamental.itely:685 (comment) -#. Documentation/user/fundamental.itely:709 (comment) +#. Documentation/learning/fundamental.itely:680 (comment) +#. Documentation/learning/fundamental.itely:704 (comment) +#. Documentation/cs/learning/fundamental.itely:766 (comment) +#. Documentation/cs/learning/fundamental.itely:790 (comment) msgid "Main voice" msgstr "Voz principal" -#. Documentation/user/fundamental.itely:687 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/cs/learning/fundamental.itely:768 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" msgstr "Voz \\\"1\\\" Voz \\\"2\\\" Voz \\\"3\\\"" -#. Documentation/user/fundamental.itely:711 (comment) -#. Documentation/user/simultaneous.itely:738 (comment) -#. Documentation/user/simultaneous.itely:763 (comment) -#. Documentation/user/simultaneous.itely:790 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) +#. Documentation/cs/learning/fundamental.itely:792 (comment) msgid "Bar 1" msgstr "Compás 1" # También Líneas divisorias. FVD -#. Documentation/user/fundamental.itely:722 (comment) -#. Documentation/user/simultaneous.itely:743 (comment) -#. Documentation/user/simultaneous.itely:768 (comment) -#. Documentation/user/simultaneous.itely:796 (comment) +#. Documentation/learning/fundamental.itely:717 (comment) +#. Documentation/cs/learning/fundamental.itely:803 (comment) msgid "Bar 2" msgstr "Compás 2" -#. Documentation/user/fundamental.itely:723 (comment) +#. Documentation/learning/fundamental.itely:718 (comment) +#. Documentation/cs/learning/fundamental.itely:804 (comment) msgid "Voice 1 continues" msgstr "Continúa la voz 1" -#. Documentation/user/fundamental.itely:726 (comment) +#. Documentation/learning/fundamental.itely:721 (comment) +#. Documentation/cs/learning/fundamental.itely:807 (comment) msgid "Voice 2 continues" msgstr "Continúa la voz 2" -#. Documentation/user/fundamental.itely:900 (comment) +#. Documentation/learning/fundamental.itely:896 (comment) +#. Documentation/cs/learning/fundamental.itely:985 (comment) msgid "Voice one" msgstr "Voz uno" -#. Documentation/user/fundamental.itely:902 (comment) +#. Documentation/learning/fundamental.itely:898 (comment) +#. Documentation/cs/learning/fundamental.itely:987 (comment) msgid "Voice two" msgstr "Voz dos" -#. Documentation/user/fundamental.itely:904 (comment) +#. Documentation/learning/fundamental.itely:900 (comment) +#. Documentation/cs/learning/fundamental.itely:989 (comment) msgid "Omit Voice three" msgstr "Omitir la voz tres" -#. Documentation/user/fundamental.itely:905 (comment) +#. Documentation/learning/fundamental.itely:901 (comment) +#. Documentation/cs/learning/fundamental.itely:990 (comment) msgid "Voice four" msgstr "Voz cuatro" -#. Documentation/user/fundamental.itely:1004 (comment) +#. Documentation/learning/fundamental.itely:1000 (comment) +#. Documentation/cs/learning/fundamental.itely:1092 (comment) msgid "Default behavior or behavior after \\oneVoice" msgstr "Comportamiento predeterminado o comportamiento después de \\oneVoice" -#. Documentation/user/fundamental.itely:1042 (comment) +#. Documentation/learning/fundamental.itely:1038 (comment) +#. Documentation/cs/learning/fundamental.itely:1131 (comment) msgid "The following notes are monophonic" msgstr "Las notas siguientes son monofónicas" -#. Documentation/user/fundamental.itely:1044 (comment) +#. Documentation/learning/fundamental.itely:1040 (comment) +#. Documentation/cs/learning/fundamental.itely:1133 (comment) msgid "Start simultaneous section of three voices" msgstr "Inicio de la sección de tres voces simultáneas" -#. Documentation/user/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1042 (comment) +#. Documentation/cs/learning/fundamental.itely:1135 (comment) msgid "Continue the main voice in parallel" msgstr "Continuar la voz principal en paralelo" -#. Documentation/user/fundamental.itely:1048 (comment) -#. Documentation/user/fundamental.itely:1110 (comment) +#. Documentation/learning/fundamental.itely:1044 (comment) +#. Documentation/learning/fundamental.itely:1106 (comment) +#. Documentation/cs/learning/fundamental.itely:1137 (comment) +#. Documentation/cs/learning/fundamental.itely:1203 (comment) msgid "Initiate second voice" msgstr "Iniciar la segunda voz" -#. Documentation/user/fundamental.itely:1050 (comment) -#. Documentation/user/fundamental.itely:1112 (comment) -msgid "Set stems, etc, down" +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/cs/learning/fundamental.itely:1139 (comment) +msgid "Set stems, etc., down" msgstr "Poner plicas, etc. hacia abajo" -#. Documentation/user/fundamental.itely:1054 (comment) -#. Documentation/user/fundamental.itely:1116 (comment) +#. Documentation/learning/fundamental.itely:1050 (comment) +#. Documentation/learning/fundamental.itely:1112 (comment) +#. Documentation/cs/learning/fundamental.itely:1143 (comment) +#. Documentation/cs/learning/fundamental.itely:1209 (comment) msgid "Initiate third voice" msgstr "Iniciar la tercera voz" -#. Documentation/user/fundamental.itely:1056 (comment) -#. Documentation/user/fundamental.itely:1118 (comment) +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) +#. Documentation/cs/learning/fundamental.itely:1145 (comment) +#. Documentation/cs/learning/fundamental.itely:1211 (comment) msgid "Set stems, etc, up" msgstr "Poner las plicas, etc. hacia arriba" -#. Documentation/user/fundamental.itely:1105 (comment) +#. Documentation/learning/fundamental.itely:1101 (comment) +#. Documentation/cs/learning/fundamental.itely:1198 (comment) msgid "Initiate first voice" msgstr "Iniciar la primera voz" -#. Documentation/user/fundamental.itely:1199 (context id) -#. Documentation/user/fundamental.itely:2441 (context id) -#. Documentation/user/vocal.itely:513 (context id) -#. Documentation/user/vocal.itely:1245 (context id) -#. Documentation/user/vocal.itely:1286 (context id) -#. Documentation/user/keyboards.itely:343 (context id) -#. Documentation/user/fretted-strings.itely:246 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:24 (variable) -#. input/lsr/jazz-combo-template.ly:206 (context id) -#. input/lsr/jazz-combo-template.ly:215 (context id) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:57 (context id) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:63 (context id) +#. Documentation/learning/fundamental.itely:1108 (comment) +#. Documentation/cs/learning/fundamental.itely:1205 (comment) +msgid "Set stems, etc, down" +msgstr "Poner plicas, etc. hacia abajo" + +#. Documentation/learning/fundamental.itely:1195 (context id) +#. Documentation/learning/fundamental.itely:2306 (context id) +#. Documentation/cs/learning/fundamental.itely:1304 (context id) +#. Documentation/cs/learning/fundamental.itely:2523 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) msgid "one" msgstr "uno" -#. Documentation/user/fundamental.itely:1242 (variable) -#. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3518 (variable) -#. Documentation/user/simultaneous.itely:784 (variable) -#. Documentation/user/percussion.itely:497 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) -#. input/lsr/incipit.ly:62 (variable) -#. input/lsr/jazz-combo-template.ly:76 (variable) -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:40 (variable) -#. input/lsr/piano-template-with-centered-dynamics.ly:42 (variable) -#. input/lsr/printing-music-with-different-time-signatures.ly:25 (variable) -#. input/lsr/string-quartet-template-simple.ly:37 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:83 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:31 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:48 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:40 (variable) -#. input/lsr/vocal-ensemble-template.ly:45 (variable) +#. Documentation/learning/fundamental.itely:1240 (variable) +#. Documentation/learning/fundamental.itely:2572 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/cs/learning/fundamental.itely:1353 (variable) +#. Documentation/cs/learning/fundamental.itely:2797 (variable) +#. Documentation/cs/learning/tweaks.itely:3960 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:34 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) msgid "global" msgstr "global" -#. Documentation/user/fundamental.itely:1243 (variable) +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/cs/learning/fundamental.itely:1355 (variable) msgid "SopOneMusic" msgstr "MusicaSopranoUno" -#. Documentation/user/fundamental.itely:1245 (variable) -msgid "SopTwoMusic" -msgstr "MusicaSopranoDos" - -#. Documentation/user/fundamental.itely:1247 (variable) +#. Documentation/learning/fundamental.itely:1245 (variable) +#. Documentation/cs/learning/fundamental.itely:1358 (variable) msgid "SopOneLyrics" msgstr "LetraSopranoUno" -#. Documentation/user/fundamental.itely:1249 (variable) +#. Documentation/learning/fundamental.itely:1248 (variable) +#. Documentation/cs/learning/fundamental.itely:1361 (variable) +msgid "SopTwoMusic" +msgstr "MusicaSopranoDos" + +#. Documentation/learning/fundamental.itely:1251 (variable) +#. Documentation/cs/learning/fundamental.itely:1364 (variable) msgid "SopTwoLyrics" msgstr "LetraSopranoDos" -#. Documentation/user/fundamental.itely:1255 (context id) +#. Documentation/learning/fundamental.itely:1258 (context id) +#. Documentation/cs/learning/fundamental.itely:1371 (context id) msgid "SopOne" msgstr "SopranoUno" -#. Documentation/user/fundamental.itely:1264 (context id) +#. Documentation/learning/fundamental.itely:1267 (context id) +#. Documentation/cs/learning/fundamental.itely:1380 (context id) msgid "SopTwo" msgstr "SopranoDos" -#. Documentation/user/fundamental.itely:1296 (variable) -#. Documentation/user/fundamental.itely:2864 (variable) -msgid "TimeKey" -msgstr "CompasTono" +#. Documentation/learning/fundamental.itely:1299 (variable) +#. Documentation/learning/fundamental.itely:2904 (variable) +#. Documentation/cs/learning/fundamental.itely:1416 (variable) +#. Documentation/cs/learning/fundamental.itely:3156 (variable) +msgid "keyTime" +msgstr "tonalidadCompas" -#. Documentation/user/fundamental.itely:1297 (variable) +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/cs/learning/fundamental.itely:1418 (variable) msgid "SopMusic" msgstr "MusicaSoprano" -#. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3520 (variable) +#. Documentation/learning/fundamental.itely:1302 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/cs/learning/fundamental.itely:1419 (variable) +#. Documentation/cs/learning/tweaks.itely:3963 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) msgid "AltoMusic" msgstr "MusicaAlto" -#. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3521 (variable) +#. Documentation/learning/fundamental.itely:1303 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/cs/learning/fundamental.itely:1420 (variable) +#. Documentation/cs/learning/tweaks.itely:3964 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) msgid "TenorMusic" msgstr "MusicaTenor" -#. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3522 (variable) +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/cs/learning/fundamental.itely:1421 (variable) +#. Documentation/cs/learning/tweaks.itely:3965 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) msgid "BassMusic" msgstr "MusicaBajo" -#. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3523 (variable) +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) +#. Documentation/cs/learning/fundamental.itely:1423 (variable) +#. Documentation/cs/learning/tweaks.itely:3967 (variable) msgid "VerseOne" msgstr "EstrofaUno" -#. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3524 (variable) +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) +#. Documentation/cs/learning/fundamental.itely:1425 (variable) +#. Documentation/cs/learning/tweaks.itely:3971 (variable) msgid "VerseTwo" msgstr "EstrofaDos" -#. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3525 (variable) +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) +#. Documentation/cs/learning/fundamental.itely:1427 (variable) +#. Documentation/cs/learning/tweaks.itely:3975 (variable) msgid "VerseThree" msgstr "EstrofaTres" -#. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3526 (variable) +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) +#. Documentation/cs/learning/fundamental.itely:1429 (variable) +#. Documentation/cs/learning/tweaks.itely:3979 (variable) msgid "VerseFour" msgstr "EstrofaCuatro" -#. Documentation/user/fundamental.itely:1314 (context id) +#. Documentation/learning/fundamental.itely:1319 (context id) +#. Documentation/cs/learning/fundamental.itely:1436 (context id) msgid "Sop" msgstr "Soprano" -#. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3533 (context id) -#. Documentation/user/input.itely:982 (context id) +#. Documentation/learning/fundamental.itely:1320 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1142 (context id) +#. Documentation/cs/learning/fundamental.itely:1437 (context id) +#. Documentation/cs/learning/tweaks.itely:3988 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) msgid "Alto" msgstr "Alto" -#. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3541 (context id) -#. Documentation/user/input.itely:984 (context id) +#. Documentation/learning/fundamental.itely:1328 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1144 (context id) +#. Documentation/cs/learning/fundamental.itely:1445 (context id) +#. Documentation/cs/learning/tweaks.itely:3996 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) msgid "Tenor" msgstr "Tenor" # También Líneas divisorias. FVD -#. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3542 (context id) -#. Documentation/user/input.itely:989 (context id) -#. input/lsr/jazz-combo-template.ly:229 (variable) +#. Documentation/learning/fundamental.itely:1329 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1149 (context id) +#. Documentation/cs/learning/fundamental.itely:1446 (context id) +#. Documentation/cs/learning/tweaks.itely:3997 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) msgid "Bass" msgstr "Bajo" -#. Documentation/user/fundamental.itely:1350 (variable) -#. Documentation/user/fundamental.itely:1402 (variable) -#. Documentation/user/fundamental.itely:1464 (variable) -msgid "versenotes" -msgstr "notas_estrofa" - -#. Documentation/user/fundamental.itely:1355 (variable) -#. Documentation/user/fundamental.itely:1416 (variable) -#. Documentation/user/fundamental.itely:1478 (variable) -msgid "versewords" -msgstr "letra_estrofa" - -#. Documentation/user/fundamental.itely:1361 (context id) -#. Documentation/user/fundamental.itely:1428 (context id) -#. Documentation/user/fundamental.itely:1489 (context id) -#. Documentation/user/vocal.itely:836 (context id) -#. input/lsr/score-for-diatonic-accordion.ly:59 (variable) -msgid "verse" -msgstr "estrofa" - -#. Documentation/user/fundamental.itely:1407 (variable) -#. Documentation/user/fundamental.itely:1469 (variable) -msgid "refrainnotesA" -msgstr "notas_estribilloA" - -#. Documentation/user/fundamental.itely:1411 (variable) -#. Documentation/user/fundamental.itely:1473 (variable) -msgid "refrainnotesB" -msgstr "notas_estribilloB" - -#. Documentation/user/fundamental.itely:1419 (variable) -#. Documentation/user/fundamental.itely:1481 (variable) -msgid "refrainwordsA" -msgstr "letra_estribilloA" - -#. Documentation/user/fundamental.itely:1422 (variable) -#. Documentation/user/fundamental.itely:1484 (variable) -msgid "refrainwordsB" -msgstr "letra_estribilloB" - -#. Documentation/user/fundamental.itely:1436 (context id) -#. Documentation/user/fundamental.itely:1509 (context id) -msgid "refrainB" -msgstr "estribilloB" - -#. Documentation/user/fundamental.itely:1501 (context id) -msgid "refrainA" -msgstr "estribilloA" - -#. Documentation/user/fundamental.itely:1655 (comment) +#. Documentation/learning/fundamental.itely:1473 (comment) +#. Documentation/cs/learning/fundamental.itely:1614 (comment) msgid "start of single compound music expression" msgstr "inicio de la expresión musical compuesta única" -#. Documentation/user/fundamental.itely:1656 (comment) +#. Documentation/learning/fundamental.itely:1474 (comment) +#. Documentation/cs/learning/fundamental.itely:1615 (comment) msgid "start of simultaneous staves section" msgstr "inicio de la sección de pentagramas simultáneos" -#. Documentation/user/fundamental.itely:1658 (comment) +#. Documentation/learning/fundamental.itely:1476 (comment) +#. Documentation/cs/learning/fundamental.itely:1617 (comment) msgid "create RH staff" msgstr "crear pentagrama de la M.D." -#. Documentation/user/fundamental.itely:1661 (comment) +#. Documentation/learning/fundamental.itely:1479 (comment) +#. Documentation/cs/learning/fundamental.itely:1620 (comment) msgid "create voice for RH notes" msgstr "crear voz para las notas de la M.D." -#. Documentation/user/fundamental.itely:1662 (comment) +#. Documentation/learning/fundamental.itely:1480 (comment) +#. Documentation/cs/learning/fundamental.itely:1621 (comment) msgid "start of RH notes" msgstr "inicio de las notas de la M.D." -#. Documentation/user/fundamental.itely:1665 (comment) +#. Documentation/learning/fundamental.itely:1483 (comment) +#. Documentation/cs/learning/fundamental.itely:1624 (comment) msgid "end of RH notes" msgstr "fin de las notas de la M.D." -#. Documentation/user/fundamental.itely:1666 (comment) +#. Documentation/learning/fundamental.itely:1484 (comment) +#. Documentation/cs/learning/fundamental.itely:1625 (comment) msgid "end of RH voice" msgstr "fin de la voz de la M.D." -#. Documentation/user/fundamental.itely:1667 (comment) +#. Documentation/learning/fundamental.itely:1485 (comment) +#. Documentation/cs/learning/fundamental.itely:1626 (comment) msgid "end of RH staff" msgstr "fin del pentagrama de la M.D." -#. Documentation/user/fundamental.itely:1668 (comment) +#. Documentation/learning/fundamental.itely:1486 (comment) +#. Documentation/cs/learning/fundamental.itely:1627 (comment) msgid "create LH staff; needs two simultaneous voices" msgstr "crear el pentagrama de la M.I.; necesita dos voces" -#. Documentation/user/fundamental.itely:1671 (comment) +#. Documentation/learning/fundamental.itely:1489 (comment) +#. Documentation/cs/learning/fundamental.itely:1630 (comment) msgid "create LH voice one" msgstr "crear la voz uno de la M.I." -#. Documentation/user/fundamental.itely:1673 (comment) +#. Documentation/learning/fundamental.itely:1491 (comment) +#. Documentation/cs/learning/fundamental.itely:1632 (comment) msgid "start of LH voice one notes" msgstr "inicio de las notas de la voz uno de la M.I." -#. Documentation/user/fundamental.itely:1676 (comment) +#. Documentation/learning/fundamental.itely:1494 (comment) +#. Documentation/cs/learning/fundamental.itely:1635 (comment) msgid "end of LH voice one notes" msgstr "fin de las notas de la voz uno de la M.I." -#. Documentation/user/fundamental.itely:1677 (comment) +#. Documentation/learning/fundamental.itely:1495 (comment) +#. Documentation/cs/learning/fundamental.itely:1636 (comment) msgid "end of LH voice one" msgstr "fin de la voz uno de la M.I." -#. Documentation/user/fundamental.itely:1678 (comment) +#. Documentation/learning/fundamental.itely:1496 (comment) +#. Documentation/cs/learning/fundamental.itely:1637 (comment) msgid "create LH voice two" msgstr "crear voz dos de la M.I." -#. Documentation/user/fundamental.itely:1680 (comment) +#. Documentation/learning/fundamental.itely:1498 (comment) +#. Documentation/cs/learning/fundamental.itely:1639 (comment) msgid "start of LH voice two notes" msgstr "inicio de las notas de la voz dos de la M.I." -#. Documentation/user/fundamental.itely:1683 (comment) +#. Documentation/learning/fundamental.itely:1501 (comment) +#. Documentation/cs/learning/fundamental.itely:1642 (comment) msgid "end of LH voice two notes" msgstr "fin de las notas de la voz dos de la M.I." -#. Documentation/user/fundamental.itely:1684 (comment) +#. Documentation/learning/fundamental.itely:1502 (comment) +#. Documentation/cs/learning/fundamental.itely:1643 (comment) msgid "end of LH voice two" msgstr "fin de la voz dos de la M.I." -#. Documentation/user/fundamental.itely:1685 (comment) +#. Documentation/learning/fundamental.itely:1503 (comment) +#. Documentation/cs/learning/fundamental.itely:1644 (comment) msgid "end of LH staff" msgstr "fin del pentagrama de la M.I." -#. Documentation/user/fundamental.itely:1686 (comment) +#. Documentation/learning/fundamental.itely:1504 (comment) +#. Documentation/cs/learning/fundamental.itely:1645 (comment) msgid "end of simultaneous staves section" msgstr "fin de la sección de pentagramas simultáneos" -#. Documentation/user/fundamental.itely:1687 (comment) +#. Documentation/learning/fundamental.itely:1505 (comment) +#. Documentation/cs/learning/fundamental.itely:1646 (comment) msgid "end of single compound music expression" msgstr "fin de la expresión musical compuesta única" -#. Documentation/user/fundamental.itely:1906 (comment) +#. Documentation/learning/fundamental.itely:1724 (comment) +#. Documentation/cs/learning/fundamental.itely:1895 (comment) msgid "Wrong!" msgstr "¡Mal!" # Fuzzy.FVD -#. Documentation/user/fundamental.itely:1992 (comment) -#. Documentation/user/fundamental.itely:2144 (comment) +#. Documentation/learning/fundamental.itely:1810 (comment) +#. Documentation/learning/fundamental.itely:1987 (comment) +#. Documentation/cs/learning/fundamental.itely:1984 (comment) +#. Documentation/cs/learning/fundamental.itely:2177 (comment) msgid "make note heads smaller" msgstr "cabezas más pequeñas" # Fuzzy.FVD -#. Documentation/user/fundamental.itely:1995 (comment) -#. Documentation/user/fundamental.itely:2146 (comment) +#. Documentation/learning/fundamental.itely:1813 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) +#. Documentation/cs/learning/fundamental.itely:1987 (comment) +#. Documentation/cs/learning/fundamental.itely:2179 (comment) msgid "make note heads larger" msgstr "cabezas más grandes" -#. Documentation/user/fundamental.itely:1998 (comment) -#. Documentation/user/fundamental.itely:2148 (comment) +#. Documentation/learning/fundamental.itely:1816 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) +#. Documentation/cs/learning/fundamental.itely:1990 (comment) +#. Documentation/cs/learning/fundamental.itely:2181 (comment) msgid "return to default size" msgstr "tamaño predeterminado" -#. Documentation/user/fundamental.itely:2420 (variable) -#. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:974 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) +#. Documentation/learning/fundamental.itely:2285 (variable) +#. Documentation/learning/fundamental.itely:2573 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/cs/learning/fundamental.itely:2502 (variable) +#. Documentation/cs/learning/fundamental.itely:2801 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) msgid "sopranoMusic" msgstr "musicaSoprano" -#. Documentation/user/fundamental.itely:2427 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:51 (variable) +#. Documentation/learning/fundamental.itely:2292 (variable) +#. Documentation/cs/learning/fundamental.itely:2509 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) msgid "sopranoLyrics" msgstr "letraSoprano" -#. Documentation/user/fundamental.itely:2431 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:63 (variable) +#. Documentation/learning/fundamental.itely:2296 (variable) +#. Documentation/cs/learning/fundamental.itely:2513 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) msgid "celloMusic" msgstr "musicaCello" -#. Documentation/user/fundamental.itely:2651 (variable) +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/cs/learning/fundamental.itely:2805 (variable) msgid "sopranoWords" msgstr "letraSoprano" -#. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:975 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) -#. input/lsr/vocal-ensemble-template.ly:57 (variable) +#. Documentation/learning/fundamental.itely:2580 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/cs/learning/fundamental.itely:2808 (variable) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:45 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:84 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:83 (variable) msgid "altoMusic" msgstr "musicaContralto" -#. Documentation/user/fundamental.itely:2658 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:63 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:55 (variable) -#. input/lsr/vocal-ensemble-template.ly:60 (variable) +#. Documentation/learning/fundamental.itely:2584 (variable) +#. Documentation/cs/learning/fundamental.itely:2812 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:87 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:86 (variable) msgid "altoWords" msgstr "letraContralto" -#. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:976 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) -#. input/lsr/vocal-ensemble-template.ly:64 (variable) +#. Documentation/learning/fundamental.itely:2585 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/cs/learning/fundamental.itely:2813 (variable) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:51 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:91 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:90 (variable) msgid "tenorMusic" msgstr "musicaTenor" -#. Documentation/user/fundamental.itely:2663 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:70 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) -#. input/lsr/vocal-ensemble-template.ly:67 (variable) +#. Documentation/learning/fundamental.itely:2589 (variable) +#. Documentation/cs/learning/fundamental.itely:2817 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:94 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:93 (variable) msgid "tenorWords" msgstr "letraTenor" -#. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:977 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) -#. input/lsr/vocal-ensemble-template.ly:71 (variable) +#. Documentation/learning/fundamental.itely:2590 (variable) +#. Documentation/notation/input.itely:1137 (variable) +#. Documentation/cs/learning/fundamental.itely:2818 (variable) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:56 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:98 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:97 (variable) msgid "bassMusic" msgstr "musicaBajo" -#. Documentation/user/fundamental.itely:2668 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:77 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) -#. input/lsr/vocal-ensemble-template.ly:74 (variable) +#. Documentation/learning/fundamental.itely:2594 (variable) +#. Documentation/cs/learning/fundamental.itely:2822 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (variable) msgid "bassWords" msgstr "letraBajo" -#. Documentation/user/fundamental.itely:2685 (comment) +#. Documentation/learning/fundamental.itely:2611 (comment) +#. Documentation/cs/learning/fundamental.itely:2839 (comment) msgid "combine ChoirStaff and PianoStaff in parallel" msgstr "combinar ChoirStaff y PianoStaff en paralelo" -#. Documentation/user/fundamental.itely:2687 (context id) -#. Documentation/user/fundamental.itely:2689 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (context id) -#. input/lsr/vocal-ensemble-template.ly:82 (context id) +#. Documentation/learning/fundamental.itely:2613 (context id) +#. Documentation/learning/fundamental.itely:2615 (context id) +#. Documentation/cs/learning/fundamental.itely:2841 (context id) +#. Documentation/cs/learning/fundamental.itely:2843 (context id) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:69 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:113 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) msgid "sopranos" msgstr "sopranos" -#. Documentation/user/fundamental.itely:2692 (context id) -#. Documentation/user/fundamental.itely:2694 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:87 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:77 (context id) -#. input/lsr/vocal-ensemble-template.ly:86 (context id) +#. Documentation/learning/fundamental.itely:2623 (context id) +#. Documentation/learning/fundamental.itely:2625 (context id) +#. Documentation/cs/learning/fundamental.itely:2851 (context id) +#. Documentation/cs/learning/fundamental.itely:2853 (context id) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:73 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:114 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:115 (context id) msgid "altos" msgstr "altos" -#. Documentation/user/fundamental.itely:2697 (context id) -#. Documentation/user/fundamental.itely:2699 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:87 (context id) -#. input/lsr/vocal-ensemble-template.ly:95 (context id) +#. Documentation/learning/fundamental.itely:2633 (context id) +#. Documentation/learning/fundamental.itely:2635 (context id) +#. Documentation/cs/learning/fundamental.itely:2861 (context id) +#. Documentation/cs/learning/fundamental.itely:2863 (context id) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:82 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:124 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:127 (context id) msgid "tenors" msgstr "tenores" -#. Documentation/user/fundamental.itely:2702 (context id) -#. Documentation/user/fundamental.itely:2704 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:94 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:88 (context id) -#. input/lsr/vocal-ensemble-template.ly:99 (context id) +#. Documentation/learning/fundamental.itely:2643 (context id) +#. Documentation/learning/fundamental.itely:2645 (context id) +#. Documentation/cs/learning/fundamental.itely:2871 (context id) +#. Documentation/cs/learning/fundamental.itely:2873 (context id) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:86 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:125 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:131 (context id) msgid "basses" msgstr "bajos" -#. Documentation/user/fundamental.itely:2707 (comment) +#. Documentation/learning/fundamental.itely:2653 (comment) +#. Documentation/cs/learning/fundamental.itely:2881 (comment) msgid "end ChoirStaff" msgstr "fin del ChoirStaff" -#. Documentation/user/fundamental.itely:2865 (variable) +#. Documentation/learning/fundamental.itely:2905 (variable) +#. Documentation/cs/learning/fundamental.itely:3157 (variable) msgid "ManualOneVoiceOneMusic" msgstr "MusicaManualUnoVozUno" -#. Documentation/user/fundamental.itely:2868 (variable) +#. Documentation/learning/fundamental.itely:2909 (variable) +#. Documentation/cs/learning/fundamental.itely:3161 (variable) msgid "ManualOneVoiceTwoMusic" msgstr "MusicaManualUnoVozDos" -#. Documentation/user/fundamental.itely:2872 (variable) +#. Documentation/learning/fundamental.itely:2913 (variable) +#. Documentation/cs/learning/fundamental.itely:3165 (variable) msgid "ManualTwoMusic" msgstr "MusicaManualDos" -#. Documentation/user/fundamental.itely:2876 (variable) +#. Documentation/learning/fundamental.itely:2917 (variable) +#. Documentation/cs/learning/fundamental.itely:3169 (variable) msgid "PedalOrganMusic" msgstr "MusicaPedales" -#. Documentation/user/fundamental.itely:2882 (comment) +#. Documentation/learning/fundamental.itely:2923 (comment) +#. Documentation/cs/learning/fundamental.itely:3175 (comment) msgid "PianoStaff and Pedal Staff must be simultaneous" msgstr "El PianoStaff y el pentagrama del Pedal son simultáneos" -#. Documentation/user/fundamental.itely:2884 (context id) +#. Documentation/learning/fundamental.itely:2925 (context id) +#. Documentation/cs/learning/fundamental.itely:3177 (context id) msgid "ManualOne" msgstr "ManualUno" -#. Documentation/user/fundamental.itely:2885 (comment) -msgid "set time signature and key" -msgstr "indicación de compás y armadura" +#. Documentation/learning/fundamental.itely:2926 (comment) +msgid "set key and time signature" +msgstr "Fijar la armadura y el compás" -#. Documentation/user/fundamental.itely:2889 (comment) +#. Documentation/learning/fundamental.itely:2936 (comment) +#. Documentation/cs/learning/fundamental.itely:3188 (comment) msgid "end ManualOne Staff context" msgstr "fin del contexto de pentagrama del ManualUno" -#. Documentation/user/fundamental.itely:2890 (context id) +#. Documentation/learning/fundamental.itely:2937 (context id) +#. Documentation/cs/learning/fundamental.itely:3189 (context id) msgid "ManualTwo" msgstr "ManualDos" -#. Documentation/user/fundamental.itely:2894 (comment) +#. Documentation/learning/fundamental.itely:2946 (comment) +#. Documentation/cs/learning/fundamental.itely:3198 (comment) msgid "end ManualTwo Staff context" msgstr "fin del contexto de pentagrama del ManualDos" -#. Documentation/user/fundamental.itely:2895 (comment) +#. Documentation/learning/fundamental.itely:2947 (comment) +#. Documentation/cs/learning/fundamental.itely:3199 (comment) msgid "end PianoStaff context" msgstr "fin del contexto PianoStaff" -#. Documentation/user/fundamental.itely:2896 (context id) +#. Documentation/learning/fundamental.itely:2948 (context id) +#. Documentation/cs/learning/fundamental.itely:3200 (context id) msgid "PedalOrgan" msgstr "Pedales" -#. Documentation/user/fundamental.itely:2900 (comment) +#. Documentation/learning/fundamental.itely:2954 (comment) +#. Documentation/cs/learning/fundamental.itely:3206 (comment) msgid "end PedalOrgan Staff context" msgstr "fin del contexto de pentagrama del Pedal" -#. Documentation/user/fundamental.itely:2902 (comment) +#. Documentation/learning/fundamental.itely:2956 (comment) +#. Documentation/cs/learning/fundamental.itely:3208 (comment) msgid "end Score context" msgstr "fin del contexto de Score (partitura)" -#. @node in Documentation/user/fundamental.itely -#. @chapter in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @chapter in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @chapter in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @chapter in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @chapter in Documentation/ja/user/fundamental.itely +#. Documentation/learning/fundamental.itely:2972 (variable) +#. Documentation/cs/learning/fundamental.itely:3225 (variable) +msgid "hornNotes" +msgstr "notasTrompa" + +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/cs/learning/fundamental.itely:3238 (variable) +msgid "fragmentA" +msgstr "fragmentoA" + +#. Documentation/learning/fundamental.itely:2985 (variable) +#. Documentation/cs/learning/fundamental.itely:3239 (variable) +msgid "fragmentB" +msgstr "fragmentoB" + +#. Documentation/learning/fundamental.itely:3004 (variable) +#. Documentation/cs/learning/fundamental.itely:3258 (variable) +msgid "dolce" +msgstr "dolce" + +#. Documentation/learning/fundamental.itely:3007 (variable) +#. Documentation/cs/learning/fundamental.itely:3260 (variable) +msgid "fthenp" +msgstr "f_luego_p" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely msgid "Fundamental concepts" msgstr "Conceptos fundamentales" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "How LilyPond input files work" msgstr "Cómo funcionan los archivos de entrada de LilyPond" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Introduction to the LilyPond file structure" msgstr "Introducción a la estructura de los archivos de LilyPond" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Score is a (single) compound musical expression" msgstr "La partitura es una (única) expresión musical compuesta" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Nesting music expressions" msgstr "Anidado de expresiones musicales" -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/tweaks.itely -#. Documentation/user/staff.itely:559 (context id) -#. Documentation/user/staff.itely:572 (context id) -#. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:598 (context id) -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/fr/user/tweaks.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/tweaks.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tweaks.itely -#. @rglos in Documentation/de/user/staff.itely -#. @rglos in Documentation/ja/user/fundamental.itely -#. @rglos in Documentation/ja/user/tweaks.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/tweaks.itely msgid "ossia" msgstr "ossia" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "On the un-nestedness of brackets and ties" msgstr "Acerca de la no anidabilidad de llaves y ligaduras" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Voices contain music" msgstr "Las voces contienen música" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "I'm hearing Voices" msgstr "Oigo voces" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Explicitly instantiating voices" msgstr "Voces explícitas" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Note columns" msgstr "Columnas de notas" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Voices and vocals" msgstr "Voces y música vocal" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Contexts and engravers" msgstr "Contextos y grabadores" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Contexts explained" msgstr "Explicación de los contextos" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Creating contexts" msgstr "Crear contextos" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Engravers explained" msgstr "Explicación de los grabadores" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Modifying context properties" msgstr "Modificar las propiedades de los contextos" -#. @subsubheading in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Setting context properties with @code{\\with}" -msgstr "Cambiar las propiedades de un contexto con @code{\\with}" - -#. @subsubheading in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Setting context properties with @code{\\context}" -msgstr "Cambiar las propiedades de un contexto con @code{\\context}" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\with}" +msgstr "Establecer propiedades de contexto con @code{\\\\with}" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\context}" +msgstr "Establecer propiedades de contexto con @code{\\\\context}" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Adding and removing engravers" msgstr "Añadir y eliminar grabadores" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Changing a single context" msgstr "Cambiar un solo contexto" -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/fundamental.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/fundamental.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. @rglos in Documentation/cs/learning/fundamental.itely msgid "ambitus" msgstr "tesitura" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Changing all contexts of the same type" msgstr "Cambiar todos los contextos del mismo tipo" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Extending the templates" msgstr "Extender las plantillas" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Soprano and cello" msgstr "Soprano y violoncello" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Four-part SATB vocal score" msgstr "Partitura vocal a cuatro voces SATB" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Building a score from scratch" msgstr "Crear una partitura partiendo de cero" -#. Documentation/user/tweaks.itely:597 (comment) -#. Documentation/user/tweaks.itely:732 (comment) +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "Ahorrar tecleo mediante variables y funciones" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "Partituras y particellas" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +#. Documentation/cs/learning/tweaks.itely:680 (comment) +#. Documentation/cs/learning/tweaks.itely:825 (comment) msgid "Increase thickness of all following slurs from 1.2 to 5.0" msgstr "Aumentar el grosor de todas las ligaduras siguientes de 1.2 a 5.0" -#. Documentation/user/tweaks.itely:666 (comment) -#. Documentation/user/tweaks.itely:705 (comment) -#. Documentation/user/tweaks.itely:708 (comment) +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) +#. Documentation/cs/learning/tweaks.itely:755 (comment) +#. Documentation/cs/learning/tweaks.itely:797 (comment) +#. Documentation/cs/learning/tweaks.itely:800 (comment) msgid "Increase thickness of immediately following slur only" msgstr "Aumentar solamente el grosor de la ligadura siguiente" -#. Documentation/user/tweaks.itely:736 (comment) +#. Documentation/learning/tweaks.itely:744 (comment) +#. Documentation/cs/learning/tweaks.itely:829 (comment) msgid "Revert thickness of all following slurs to default of 1.2" msgstr "Devolver el grosor de las ligaduras siguientes al valor predeterminado 1.2" -#. Documentation/user/tweaks.itely:1412 (comment) +#. Documentation/learning/tweaks.itely:1421 (comment) +#. Documentation/cs/learning/tweaks.itely:1584 (comment) msgid "Don't print clefs in this staff" msgstr "No imprimir la clave en este pentagrama" -#. Documentation/user/tweaks.itely:1414 (comment) +#. Documentation/learning/tweaks.itely:1423 (comment) +#. Documentation/cs/learning/tweaks.itely:1586 (comment) msgid "Don't print time signatures in this staff" msgstr "No imprimir el compás en este pentagrama" -#. Documentation/user/tweaks.itely:1478 (comment) +#. Documentation/learning/tweaks.itely:1487 (comment) +#. Documentation/cs/learning/tweaks.itely:1657 (comment) msgid "Reduce all font sizes by ~24%" msgstr "Reducir el tamaño de la fuente en un 24% aprox." -#. Documentation/user/tweaks.itely:1544 (comment) +#. Documentation/learning/tweaks.itely:1554 (comment) +#. Documentation/cs/learning/tweaks.itely:1731 (comment) msgid "Reduce stem length and line spacing to match" msgstr "Reducir la longitud de la plica y el espaciado de la línea en coincidencia" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) +#. Documentation/cs/learning/tweaks.itely:2207 (comment) +#. Documentation/cs/learning/tweaks.itely:2285 (comment) msgid "Set details for later Text Spanner" msgstr "Establecer ajustes para el extensor de texto ulterior" -#. Documentation/user/tweaks.itely:1977 (comment) -#. Documentation/user/tweaks.itely:2047 (comment) +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) +#. Documentation/cs/learning/tweaks.itely:2210 (comment) +#. Documentation/cs/learning/tweaks.itely:2288 (comment) msgid "Place dynamics above staff" msgstr "Situar la dinámica por encima" # fuzzy. FVD -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) +#. Documentation/cs/learning/tweaks.itely:2212 (comment) +#. Documentation/cs/learning/tweaks.itely:2292 (comment) msgid "Start Ottava Bracket" msgstr "Inicio del corchete de octava" -#. Documentation/user/tweaks.itely:1982 (comment) -#. Documentation/user/tweaks.itely:1989 (comment) -#. Documentation/user/tweaks.itely:2054 (comment) -#. Documentation/user/tweaks.itely:2061 (comment) -msgid "Add Dynamic Text" -msgstr "Añadir indicación dinámica textual" - -#. Documentation/user/tweaks.itely:1984 (comment) -#. Documentation/user/tweaks.itely:2056 (comment) -msgid "Add Dynamic Line Spanner" -msgstr "Añadir indicación dinámica de extensión de línea" +#. Documentation/learning/tweaks.itely:2006 (comment) +#. Documentation/cs/learning/tweaks.itely:2215 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "Añadir indicación dinámica textual y regulador" -#. Documentation/user/tweaks.itely:1986 (comment) -#. Documentation/user/tweaks.itely:2058 (comment) +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) +#. Documentation/cs/learning/tweaks.itely:2218 (comment) +#. Documentation/cs/learning/tweaks.itely:2299 (comment) msgid "Add Text Script" -msgstr "Guiones de texto" +msgstr "Añadir inscripción de texto" -#. Documentation/user/tweaks.itely:1991 (comment) -#. Documentation/user/tweaks.itely:2063 (comment) +#. Documentation/learning/tweaks.itely:2012 (comment) +#. Documentation/cs/learning/tweaks.itely:2221 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "Añadir indicación dinámica textual y terminar regulador" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) +#. Documentation/cs/learning/tweaks.itely:2223 (comment) +#. Documentation/cs/learning/tweaks.itely:2304 (comment) msgid "Stop Ottava Bracket" msgstr "Detener el corchete de octava" -#. Documentation/user/tweaks.itely:2049 (comment) +#. Documentation/learning/tweaks.itely:2072 (comment) +#. Documentation/cs/learning/tweaks.itely:2290 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "Situar el corchete de octava ulterior por debajo de los extensores de texto" -#. Documentation/user/tweaks.itely:2138 (comment) -msgid "Cause notes to space out to accommodate text" -msgstr "Ocasionar que las notas se espacíen para adecuarse al texto" +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +#. Documentation/cs/learning/tweaks.itely:2295 (comment) +#. Documentation/cs/learning/tweaks.itely:2302 (comment) +msgid "Add Dynamic Text" +msgstr "Añadir indicación dinámica textual" -#. Documentation/user/tweaks.itely:2161 (comment) -msgid "This markup is short enough to fit without collision" +#. Documentation/learning/tweaks.itely:2079 (comment) +#. Documentation/cs/learning/tweaks.itely:2297 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "Añadir indicación dinámica de extensión de línea" + +#. Documentation/learning/tweaks.itely:2161 (comment) +#. Documentation/cs/learning/tweaks.itely:2380 (comment) +msgid "Cause notes to space out to accommodate text" +msgstr "Ocasionar que las notas se espacíen para adecuarse al texto" + +#. Documentation/learning/tweaks.itely:2184 (comment) +#. Documentation/cs/learning/tweaks.itely:2406 (comment) +msgid "This markup is short enough to fit without collision" msgstr "Este marcado es corto y cabe sin colisionar" -#. Documentation/user/tweaks.itely:2165 (comment) +#. Documentation/learning/tweaks.itely:2188 (comment) +#. Documentation/cs/learning/tweaks.itely:2410 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "Este es muy largo y se desplaza hacia arriba" -#. Documentation/user/tweaks.itely:2169 (comment) -#. Documentation/user/tweaks.itely:2174 (comment) +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) +#. Documentation/cs/learning/tweaks.itely:2414 (comment) +#. Documentation/cs/learning/tweaks.itely:2419 (comment) msgid "Turn off collision avoidance" msgstr "Desactivar el detector de colisiones" -#. Documentation/user/tweaks.itely:2176 (comment) +#. Documentation/learning/tweaks.itely:2199 (comment) +#. Documentation/cs/learning/tweaks.itely:2421 (comment) msgid "and turn on textLengthOn" msgstr "y activar textLengthOn" -#. Documentation/user/tweaks.itely:2177 (comment) +#. Documentation/learning/tweaks.itely:2200 (comment) +#. Documentation/cs/learning/tweaks.itely:2422 (comment) msgid "Spaces at end are honored" msgstr "Los espacios al final se respetan" -#. Documentation/user/tweaks.itely:2284 (comment) +#. Documentation/learning/tweaks.itely:2307 (comment) +#. Documentation/cs/learning/tweaks.itely:2537 (comment) msgid "Extend width by 1 staff space" msgstr "Aumentar la anchura en un espacio de pentagrama" -#. Documentation/user/tweaks.itely:2567 (comment) -msgid "This will not work, see below:" -msgstr "Esto no va a funcionar, véase más abajo:" - -#. Documentation/user/tweaks.itely:2571 (comment) -msgid "This works:" -msgstr "Esto sí funciona:" - -#. Documentation/user/tweaks.itely:2622 (variable) -msgid "naturalplusflat" -msgstr "becuadro_y_bemol" - -#. Documentation/user/tweaks.itely:2663 (comment) +#. Documentation/learning/tweaks.itely:2587 (comment) +#. Documentation/cs/learning/tweaks.itely:2863 (comment) +msgid "This will not work, see below" +msgstr "Esto no va a funcionar, véase más abajo" + +#. Documentation/learning/tweaks.itely:2591 (comment) +#. Documentation/cs/learning/tweaks.itely:2867 (comment) +msgid "This works" +msgstr "Esto sí funciona" + +#. Documentation/learning/tweaks.itely:2627 (variable) +#. Documentation/cs/learning/tweaks.itely:2909 (variable) +msgid "sesquisharp" +msgstr "sesquisostenido" + +#. Documentation/learning/tweaks.itely:2630 (comment) +#. Documentation/cs/learning/tweaks.itely:2912 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "Imprime un sesquisostenido pero el espaciado es muy pequeño" + +#. Documentation/learning/tweaks.itely:2635 (comment) +#. Documentation/cs/learning/tweaks.itely:2917 (comment) +msgid "This improves the spacing" +msgstr "Mejora el espaciado" + +#. Documentation/learning/tweaks.itely:2675 (comment) +#. Documentation/cs/learning/tweaks.itely:2961 (comment) msgid "Extend width by 1 unit" msgstr "Aumentar la anchura en una unidad" -#. Documentation/user/tweaks.itely:2665 (comment) +#. Documentation/learning/tweaks.itely:2677 (comment) +#. Documentation/cs/learning/tweaks.itely:2963 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "Alinear los matices a dos unidades por encima del pentagrama" -#. Documentation/user/tweaks.itely:2969 (variable) -#. Documentation/user/tweaks.itely:3018 (variable) -#. Documentation/user/tweaks.itely:3079 (variable) -#. Documentation/user/tweaks.itely:3149 (variable) -#. Documentation/user/tweaks.itely:3214 (variable) -#. Documentation/user/tweaks.itely:3274 (variable) +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) +#. Documentation/cs/learning/tweaks.itely:3318 (variable) +#. Documentation/cs/learning/tweaks.itely:3378 (variable) +#. Documentation/cs/learning/tweaks.itely:3452 (variable) +#. Documentation/cs/learning/tweaks.itely:3536 (variable) +#. Documentation/cs/learning/tweaks.itely:3610 (variable) +#. Documentation/cs/learning/tweaks.itely:3680 (variable) msgid "rhMusic" msgstr "Musica_m_der" -#. Documentation/user/tweaks.itely:2974 (comment) -#. Documentation/user/tweaks.itely:3023 (comment) -#. Documentation/user/tweaks.itely:3086 (comment) -#. Documentation/user/tweaks.itely:3158 (comment) -#. Documentation/user/tweaks.itely:3223 (comment) +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) +#. Documentation/cs/learning/tweaks.itely:3323 (comment) +#. Documentation/cs/learning/tweaks.itely:3384 (comment) +#. Documentation/cs/learning/tweaks.itely:3460 (comment) +#. Documentation/cs/learning/tweaks.itely:3546 (comment) +#. Documentation/cs/learning/tweaks.itely:3620 (comment) +#. Documentation/cs/learning/tweaks.itely:3690 (comment) msgid "Start polyphonic section of four voices" msgstr "Inicio de la sección polifónica de cuatro voces" -#. Documentation/user/tweaks.itely:2987 (variable) -#. Documentation/user/tweaks.itely:3036 (variable) -#. Documentation/user/tweaks.itely:3099 (variable) -#. Documentation/user/tweaks.itely:3173 (variable) -#. Documentation/user/tweaks.itely:3240 (variable) -#. Documentation/user/tweaks.itely:3302 (variable) +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +#. Documentation/cs/learning/tweaks.itely:3325 (comment) +#. Documentation/cs/learning/tweaks.itely:3339 (comment) +#. Documentation/cs/learning/tweaks.itely:3386 (comment) +#. Documentation/cs/learning/tweaks.itely:3400 (comment) +#. Documentation/cs/learning/tweaks.itely:3462 (comment) +#. Documentation/cs/learning/tweaks.itely:3476 (comment) +#. Documentation/cs/learning/tweaks.itely:3548 (comment) +#. Documentation/cs/learning/tweaks.itely:3564 (comment) +#. Documentation/cs/learning/tweaks.itely:3622 (comment) +#. Documentation/cs/learning/tweaks.itely:3640 (comment) +#. Documentation/cs/learning/tweaks.itely:3692 (comment) +#. Documentation/cs/learning/tweaks.itely:3718 (comment) +msgid "continuation of main voice" +msgstr "continuación de la voz principal" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) +#. Documentation/cs/learning/tweaks.itely:3343 (variable) +#. Documentation/cs/learning/tweaks.itely:3404 (variable) +#. Documentation/cs/learning/tweaks.itely:3480 (variable) +#. Documentation/cs/learning/tweaks.itely:3568 (variable) +#. Documentation/cs/learning/tweaks.itely:3644 (variable) +#. Documentation/cs/learning/tweaks.itely:3722 (variable) msgid "lhMusic" msgstr "Muslca_m_izq" -#. Documentation/user/tweaks.itely:2996 (context id) -#. Documentation/user/tweaks.itely:3045 (context id) -#. Documentation/user/tweaks.itely:3108 (context id) -#. Documentation/user/tweaks.itely:3182 (context id) -#. Documentation/user/tweaks.itely:3249 (context id) -#. Documentation/user/tweaks.itely:3311 (context id) -#. Documentation/user/input.itely:995 (context id) +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1155 (context id) +#. Documentation/cs/learning/tweaks.itely:3352 (context id) +#. Documentation/cs/learning/tweaks.itely:3413 (context id) +#. Documentation/cs/learning/tweaks.itely:3489 (context id) +#. Documentation/cs/learning/tweaks.itely:3577 (context id) +#. Documentation/cs/learning/tweaks.itely:3653 (context id) +#. Documentation/cs/learning/tweaks.itely:3731 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) msgid "RH" msgstr "MD" -#. Documentation/user/tweaks.itely:3000 (context id) -#. Documentation/user/tweaks.itely:3049 (context id) -#. Documentation/user/tweaks.itely:3112 (context id) -#. Documentation/user/tweaks.itely:3186 (context id) -#. Documentation/user/tweaks.itely:3253 (context id) -#. Documentation/user/tweaks.itely:3315 (context id) -#. Documentation/user/input.itely:1001 (context id) +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1161 (context id) +#. Documentation/cs/learning/tweaks.itely:3356 (context id) +#. Documentation/cs/learning/tweaks.itely:3417 (context id) +#. Documentation/cs/learning/tweaks.itely:3493 (context id) +#. Documentation/cs/learning/tweaks.itely:3581 (context id) +#. Documentation/cs/learning/tweaks.itely:3657 (context id) +#. Documentation/cs/learning/tweaks.itely:3735 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) msgid "LH" msgstr "MI" -#. Documentation/user/tweaks.itely:3227 (comment) -#. Documentation/user/tweaks.itely:3289 (comment) +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) +#. Documentation/cs/learning/tweaks.itely:3625 (comment) +#. Documentation/cs/learning/tweaks.itely:3698 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "" "Sacar el Do blanca de la columna principal de notas para que la fusión " "funcione" -#. Documentation/user/tweaks.itely:3230 (comment) -#. Documentation/user/tweaks.itely:3292 (comment) +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) +#. Documentation/cs/learning/tweaks.itely:3630 (comment) +#. Documentation/cs/learning/tweaks.itely:3705 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "La plica del Re blanca debe estar hacia abajo para permitir la fusión" -#. Documentation/user/tweaks.itely:3287 (comment) +#. Documentation/learning/tweaks.itely:3368 (comment) +#. Documentation/cs/learning/tweaks.itely:3696 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "Recolocar el Do blanca a la derecha de la nota fundida" -#. Documentation/user/tweaks.itely:3423 (comment) -#. Documentation/user/tweaks.itely:3445 (comment) +#. Documentation/learning/tweaks.itely:3379 (comment) +#. Documentation/cs/learning/tweaks.itely:3707 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "La plica del Re2 debería ser invisible" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) +#. Documentation/cs/learning/tweaks.itely:3855 (comment) +#. Documentation/cs/learning/tweaks.itely:3874 (comment) msgid "Visible tempo marking" msgstr "Indicación metronómica visible" -#. Documentation/user/tweaks.itely:3427 (comment) -#. Documentation/user/tweaks.itely:3449 (comment) +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) +#. Documentation/cs/learning/tweaks.itely:3859 (comment) +#. Documentation/cs/learning/tweaks.itely:3878 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "Indicación metronómica invisible para prolongar el calderón en el MIDI" -#. Documentation/user/tweaks.itely:3430 (comment) -#. Documentation/user/tweaks.itely:3452 (comment) +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) +#. Documentation/cs/learning/tweaks.itely:3862 (comment) +#. Documentation/cs/learning/tweaks.itely:3881 (comment) msgid "New tempo for next section" msgstr "Tempo nuevo para la sección siguiente" -#. Documentation/user/tweaks.itely:3509 (variable) +#. Documentation/learning/tweaks.itely:3604 (variable) +#. Documentation/cs/learning/tweaks.itely:3951 (variable) msgid "emphasize" msgstr "enfatizar" -#. Documentation/user/tweaks.itely:3513 (variable) +#. Documentation/learning/tweaks.itely:3609 (variable) +#. Documentation/cs/learning/tweaks.itely:3955 (variable) msgid "normal" msgstr "normal" -#. Documentation/user/tweaks.itely:3519 (variable) +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/cs/learning/tweaks.itely:3962 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) msgid "SopranoMusic" msgstr "musicaSoprano" -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:980 (context id) +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1140 (context id) +#. Documentation/cs/learning/tweaks.itely:3987 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) msgid "Soprano" msgstr "Soprano" -#. Documentation/user/tweaks.itely:3741 (comment) +#. Documentation/learning/tweaks.itely:3672 (variable) +#. Documentation/cs/learning/tweaks.itely:4020 (variable) +msgid "mpdolce" +msgstr "mpdolce" + +#. Documentation/learning/tweaks.itely:3679 (variable) +#. Documentation/cs/learning/tweaks.itely:4027 (variable) +msgid "inst" +msgstr "inst" + +#. Documentation/learning/tweaks.itely:4184 (comment) +#. Documentation/cs/learning/tweaks.itely:4551 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "Truco para obtener color a partir del procedimiento color-notehead" -#. @node in Documentation/user/tweaks.itely -#. @chapter in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @chapter in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @chapter in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @chapter in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @chapter in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely msgid "Tweaking output" msgstr "Trucar la salida" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Tweaking basics" msgstr "Elementos de trucaje" # ?? FVD -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Introduction to tweaks" msgstr "Introducción al trucaje" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Objects and interfaces" msgstr "Objetos e interfaces" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Naming conventions of objects and properties" msgstr "Convenciones de nombres de objetos y propiedades" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Tweaking methods" msgstr "Métodos de trucaje" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "The Internals Reference manual" msgstr "Manual de referencia de funcionamiento interno" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Properties of layout objects" msgstr "Propiedades de los objetos de presentación" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Finding the context" msgstr "Búsqueda del contexto" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Overriding once only" msgstr "Sobreescritura por una sola vez" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Reverting" msgstr "Recuperación del ajuste" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Properties found in interfaces" msgstr "Propiedades de los interfaces" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Specifying the context in lyric mode" msgstr "Especificación del contexto en modo letra" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Types of properties" msgstr "Tipos de propiedades" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Appearance of objects" msgstr "Apariencia de los objetos" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Visibility and color of objects" msgstr "Visibilidad y color de los objetos" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely msgid "stencil" msgstr "stencil (sello)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "break-visibility" msgstr "break-visibility (visibilidad en el salto)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "transparent" msgstr "transparent (transparente)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "color" msgstr "color" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Size of objects" msgstr "Tamaño de los objetos" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Length and thickness of objects" msgstr "Longitud y grosor de los objetos" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Placement of objects" msgstr "Colocación de los objetos" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Automatic behavior" msgstr "Comportamiento automático" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Within-staff objects" msgstr "Objetos interiores al pentagrama" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely msgid "Fingering" msgstr "Digitaciones" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Outside-staff objects" msgstr "Objetos fuera del pentagrama" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "\\textLengthOn" -msgstr "\\textLengthOn" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "\\\\textLengthOn" +msgstr "\\\\textLengthOn" + +#. @subheading in Documentation/learning/tweaks.itely msgid "Grob sizing" msgstr "Escalado de un «Grob»" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Collisions of objects" msgstr "Colisiones de objetos" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Moving objects" msgstr "Mover objetos" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Fixing overlapping notation" msgstr "Arreglar notación con superposiciones" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "padding property" msgstr "la propiedad padding (relleno)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "left-padding and right-padding" -msgstr "left-padding y right-padding (relleno por la izquierda y por la derecha)" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "right-padding" +msgstr "right-padding (relleno por la derecha)" + +#. @subheading in Documentation/learning/tweaks.itely msgid "staff-padding property" msgstr "la propiedad staff-padding (relleno de pentagrama)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "self-alignment-X property" msgstr "la propiedad self-alignment-X (auto-alineación en X)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "staff-position property" msgstr "la propiedad staff-position (posición en el pentagrama)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "extra-offset property" msgstr "la propiedad extra-offset (desplazamiento adicional)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "positions property" msgstr "la propiedad positions (posiciones)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "force-hshift property" msgstr "la propiedad force-hshift (forzar desplazamiento horizontal)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Real music example" msgstr "Ejemplos reales de música" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Further tweaking" msgstr "Trucajes adicionales" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Other uses for tweaks" msgstr "Otras aplicaciones de los trucos" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Tying notes across voices" msgstr "Ligar notas entre voces distintas" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Simulating a fermata in MIDI" msgstr "Simulación de un calderón en el MIDI" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Using variables for tweaks" msgstr "Uso de variables para los trucos" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "Hojas de estilo" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Other sources of information" msgstr "Otras fuentes de información" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Avoiding tweaks with slower processing" msgstr "Evitar los trucos con un proceso ralentizado" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Advanced tweaks with Scheme" msgstr "Trucos avanzados con Scheme" -#. Documentation/user/working.itely:221 (variable) -msgid "hornNotes" -msgstr "notasTrompa" - -#. Documentation/user/working.itely:232 (variable) -msgid "fragmentA" -msgstr "fragmentoA" - -#. Documentation/user/working.itely:233 (variable) -msgid "fragmentB" -msgstr "fragmentoB" - -#. Documentation/user/working.itely:246 (variable) -msgid "dolce" -msgstr "dolce" - -#. Documentation/user/working.itely:247 (variable) -#. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:282 (variable) -#. Documentation/user/programming-interface.itely:101 (variable) -msgid "padText" -msgstr "textoRelleno" - -#. Documentation/user/working.itely:248 (variable) -msgid "fthenp" -msgstr "f_luego_p" - -#. Documentation/user/working.itely:333 (variable) -msgid "mpdolce" -msgstr "mpdolce" - -#. Documentation/user/working.itely:336 (variable) -msgid "inst" -msgstr "inst" - -#. @node in Documentation/user/working.itely -#. @chapter in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @chapter in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @chapter in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @chapter in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @chapter in Documentation/ja/user/working.itely -msgid "Working on LilyPond projects" -msgstr "Trabajar en proyectos de LilyPond" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "Suggestions for writing LilyPond input files" -msgstr "Sugerencias para escribir archivos de entrada de LilyPond" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "General suggestions" -msgstr "Sugerencias de tipo general" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Typesetting existing music" -msgstr "Tipografiar música existente" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Large projects" -msgstr "Proyectos grandes" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Saving typing with variables and functions" -msgstr "Ahorrar tecleo mediante variables y funciones" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Style sheets" -msgstr "Hojas de estilo" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "When things don't work" -msgstr "Cuando las cosas no van" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Updating old input files" -msgstr "Actualizar archivos de entrada antiguos" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -msgid "Common errors" -msgstr "Errores más usuales" - -#. @node in Documentation/user/working.itely -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Music runs off the page" -msgstr "La música se sale de la página" - -#. @node in Documentation/user/working.itely -msgid "Apparent error in ../ly/init.ly" -msgstr "Error aparente en ../ly/init.ly" - -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Apparent error in @code{../ly/init.ly}" -msgstr "Error aparente en @code{../ly/init.ly}" - -#. @node in Documentation/user/working.itely -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Error message Unbound variable %" -msgstr "Mensaje de error Unbound variable %" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Troubleshooting (taking it all apart)" -msgstr "Resolución de problemas (tomar cada parte por separado)" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Minimal examples" -msgstr "Ejemplos mínimos" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "Scores and parts" -msgstr "Partituras y particellas" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "Make and Makefiles" -msgstr "Make y los Makefiles" - -#. @node in Documentation/user/templates.itely -#. @appendix in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendix in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendix in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendix in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendix in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely msgid "Templates" msgstr "Plantillas" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Single staff" msgstr "Pentagrama único" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes only" msgstr "Sólo notas" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes and lyrics" msgstr "Notas y letra" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes and chords" msgstr "Notas y acordes" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes, lyrics, and chords." msgstr "Notas, letra y acordes." -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Piano templates" msgstr "Plantillas de piano" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Solo piano" msgstr "Piano solo" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano and melody with lyrics" msgstr "Piano y melodía con letra" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano centered lyrics" msgstr "Piano con letra centrada" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano centered dynamics" msgstr "Piano con dinámicas centradas" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "String quartet" msgstr "Cuarteto de cuerda" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "String quartet parts" msgstr "Particellas de cuarteto de cuerda" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Vocal ensembles" msgstr "Conjuntos vocales" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB vocal score" msgstr "Partitura vocal SATB" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB vocal score and automatic piano reduction" msgstr "Partitura vocal SATB y reducción para piano automática" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB with aligned contexts" msgstr "SATB con contextos alineados" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" +msgstr "SATB sobre cuatro pentagramas" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" +msgstr "Estrofa para solista y estribillo a dos voces" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Hymn tunes" +msgstr "Melodías de himnos" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" +msgstr "Salmos" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Orchestral templates" msgstr "Plantillas orquestales" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Orchestra, choir and piano" msgstr "Orquesta, coro y piano" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Ancient notation templates" msgstr "Plantillas para notación antigua" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Transcription of mensural music" msgstr "Transcripción de música mensural" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Gregorian transcription template" msgstr "Plantilla para transcripción de canto gregoriano" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Other templates" +msgstr "Otras plantillas" + +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Jazz combo" msgstr "Combo de jazz" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "lilypond-book templates" -msgstr "Plantillas de lilypond-book" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "LaTeX" -msgstr "LaTeX" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "Términos musicales de la A a la Z" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" +msgstr "A" -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -#. @subsubheading in Documentation/ja/user/lilypond-book.itely -msgid "Texinfo" -msgstr "Texinfo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "a due" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "xelatex" -msgstr "xelatex" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accelerando" +msgstr "accelerando" -#. Documentation/user/scheme-tutorial.itely:304 (variable) -#. Documentation/user/programming-interface.itely:135 (variable) -msgid "tempoPadded" -msgstr "tempoConRelleno" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "acento" -#. Documentation/user/scheme-tutorial.itely:323 (variable) -msgid "pattern" -msgstr "patron" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "accesorio" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendix in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendix in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendix in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendix in Documentation/de/user/scheme-tutorial.itely -#. @node in Documentation/ja/user/scheme-tutorial.itely -#. @appendix in Documentation/ja/user/scheme-tutorial.itely -msgid "Scheme tutorial" -msgstr "Tutorial de Scheme" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "adagio" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendixsec in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendixsec in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendixsec in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendixsec in Documentation/de/user/scheme-tutorial.itely -#. @node in Documentation/ja/user/scheme-tutorial.itely -#. @appendixsec in Documentation/ja/user/scheme-tutorial.itely -msgid "Tweaking with Scheme" -msgstr "Trucos con Scheme" - -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -msgid "GNU Free Documentation License" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" +msgstr "al niente" -#. @subheading in Documentation/user/fdl.itexi -msgid "ADDENDUM: How to use this License for your documents" -msgstr "ADDENDUM: How to use this License for your documents" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "alla breve" -#. @top in Documentation/user/lilypond-program.tely -msgid "GNU LilyPond --- Application Usage" -msgstr "GNU LilyPond: Manual de utilización del programa" - -#. @node in Documentation/user/install.itely -#. @chapter in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @chapter in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @chapter in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @chapter in Documentation/de/user/install.itely -#. @node in Documentation/ja/user/install.itely -#. @chapter in Documentation/ja/user/install.itely -msgid "Install" -msgstr "Instalación" - -#. @node in Documentation/user/install.itely -#. @section in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @section in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -#. @node in Documentation/ja/user/install.itely -#. @section in Documentation/ja/user/install.itely -msgid "Precompiled binaries" -msgstr "Archivos binarios pre-compilados" - -#. @unnumberedsubsec in Documentation/user/install.itely -#. @unnumberedsubsec in Documentation/fr/user/install.itely -#. @unnumberedsubsec in Documentation/es/user/install.itely -#. @unnumberedsubsec in Documentation/de/user/install.itely -#. @unnumberedsubsec in Documentation/ja/user/install.itely -msgid "Downloading" -msgstr "Descarga" - -#. @node in Documentation/user/compile.itely -#. @section in Documentation/user/compile.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -#. @node in Documentation/de/user/compile.itely -#. @section in Documentation/de/user/compile.itely -#. @node in Documentation/ja/user/install.itely -#. @section in Documentation/ja/user/install.itely -msgid "Compiling from source" -msgstr "Compilar a partir del código fuente" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Downloading source code" -msgstr "Descargar el código fuente" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Requirements" -msgstr "Requisitos" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compilation" -msgstr "Compilación" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Running requirements" -msgstr "Requisitos para la ejecución" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Requirements for building documentation" -msgstr "Requisitos para construir la documentación" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Building LilyPond" -msgstr "Compilar LilyPond" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling" -msgstr "Compilación" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling for multiple platforms" -msgstr "Compilar para distintas plataformas" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling outside the source tree" -msgstr "Compilar fuera del árbol del código fuente" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Useful @command{make} variables" -msgstr "Variables útiles de @command{make}" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Building documentation" -msgstr "Construir la documentación" - -#. @node in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Commands for building documentation" -msgstr "Instrucciones para construir la documentación" - -#. @node in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Building documentation without compiling LilyPond" -msgstr "Construir la documentación sin compilar LilyPond" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Testing LilyPond" -msgstr "Pruebas de LilyPond" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Problems" -msgstr "Problemas" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Bison 1.875" -msgstr "Bison 1.875" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Solaris" -msgstr "Solaris" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "FreeBSD" -msgstr "FreeBSD" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "International fonts" -msgstr "Tipografías internacionales" - -#. @node in Documentation/user/setup.itely -#. @chapter in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @chapter in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @chapter in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @chapter in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @chapter in Documentation/ja/user/setup.itely -msgid "Setup" -msgstr "Configuración" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Setup for specific Operating Systems" -msgstr "Ajustes para sistemas operativos específicos" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Setup for MacOS X" -msgstr "Configuración para MacOS X" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -#. @subsubheading in Documentation/ja/user/setup.itely -msgid "Using Python scripts on MacOS 10.3 or 10.4" -msgstr "Uso de guiones Python en MacOS 10.3 o 10.4" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -#. @subsubheading in Documentation/ja/user/setup.itely -msgid "MacOS X on the command line" -msgstr "MacOS X sobre línea de órdenes" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Text editor support" -msgstr "Apoyo respecto de los editores de texto" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "allegro" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Emacs mode" -msgstr "Modo de Emacs" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alteration" +msgstr "alteración" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Vim mode" -msgstr "Modo de Vim" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "alto" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "jEdit" -msgstr "jEdit" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "TexShop" -msgstr "TexShop" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "TextMate" -msgstr "TextMate" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "LilyKDE" -msgstr "LilyKDE" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Point and click" -msgstr "Apuntar y pulsar" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alto clef" +msgstr "clave de viola" -#. @node in Documentation/user/running.itely -#. @chapter in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @chapter in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @chapter in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @chapter in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @chapter in Documentation/ja/user/running.itely -msgid "Running LilyPond" -msgstr "Ejecutar LilyPond" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Normal usage" -msgstr "Utilización normal" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "escala menor antigua" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Command-line usage" -msgstr "Utilización desde la línea de órdenes" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "andante" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Invoking lilypond" -msgstr "Invocar a LilyPond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "arpegio" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Invoking @command{lilypond}" -msgstr "Invocar @command{lilypond}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ascending interval" +msgstr "intervalo ascendente" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmentation" +msgstr "aumentación" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmented interval" +msgstr "intervalo aumentado" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "autógrafo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" +msgstr "B" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Command line options for lilypond" -msgstr "Opciones de la línea de órdenes para lilypond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "apoyatura de caída" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Command line options for @command{lilypond}" -msgstr "Opciones de la línea de órdenes para @command{lilypond}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "compás" -#. @node in Documentation/user/running.itely -#. @subsection in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Environment variables" -msgstr "Variables de entorno" +# También Líneas divisorias. FVD +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "barra de compás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone" +msgstr "barítono" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "clave de barítono (do en quinta)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" +msgstr "bajo" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Error messages" -msgstr "Mensajes de error" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bass clef" +msgstr "clave de bajo (fa en 4ª)" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Updating files with convert-ly" -msgstr "Actualizar ficheros con convert-ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat" +msgstr "pulso" -#. @section in Documentation/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Updating files with @command{convert-ly}" -msgstr "Actualizar ficheros con @command{convert-ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "repetición de pulsos" -#. @node in Documentation/user/running.itely -msgid "Invoking convert-ly" -msgstr "Invocar convert-ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "ligadura de unión" -#. @subsection in Documentation/user/running.itely -msgid "Invoking @command{convert-ly}" -msgstr "Invocar @command{convert-ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" +msgstr "llave o corchete" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Command line options for convert-ly" -msgstr "Opciones de la línea de órdenes para convert-ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brass" +msgstr "metales" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Command line options for @command{convert-ly}" -msgstr "Opciones de la línea de órdenes para @command{convert-ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "marca de respiración" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Problems with convert-ly" -msgstr "Problemas con convert-ly" - -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Problems with @code{convert-ly}" -msgstr "Problemas con @code{convert-ly}" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Reporting bugs" -msgstr "Informar de fallos" - -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "LilyPond-book" -msgstr "LilyPond-book" - -#. @chapter in Documentation/user/lilypond-book.itely -#. @chapter in Documentation/fr/user/lilypond-book.itely -#. @chapter in Documentation/es/user/lilypond-book.itely -#. @chapter in Documentation/de/user/lilypond-book.itely -#. @chapter in Documentation/ja/user/lilypond-book.itely -msgid "@command{lilypond-book}: Integrating text and music" -msgstr "@command{lilypond-book}: integrar texto y música" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "An example of a musicological document" -msgstr "Un ejemplo de documento musicológico" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" +msgstr "breve" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Input" -msgstr "Entrada" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "Do" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Processing" -msgstr "Procesado" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C clef" +msgstr "Clave de do" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Output" -msgstr "Salida" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "cadencia" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Integrating music and text" -msgstr "Integrar música y texto" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "cadenza" -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -#. @subsubheading in Documentation/ja/user/lilypond-book.itely -msgid "@LaTeX{}" -msgstr "@LaTeX{}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "cesura" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -msgid "HTML" -msgstr "HTML" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "cánon" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "cent" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "central C" +msgstr "do central" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "escala cromática" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "cromatismo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "modo eclesiástico" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -msgid "DocBook" -msgstr "DocBook" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "racimo (cluster)" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Common conventions" -msgstr "Convenciones usuales" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "coma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "compás común" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" +msgstr "Período de la Práctica Común" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "tiempo común" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "complemento" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound interval" +msgstr "intervalo compuesto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "compás compuesto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "tiempo compuesto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "altura de concierto" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Including a LilyPond file" -msgstr "Incluir un archivo de LilyPond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "movimiento conjunto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "consonancia" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "contralto" +msgstr "contralto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "copying music" +msgstr "copiar música" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "contrapunto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "contratenor" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cue-notes" +msgstr "notas guía" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "custos (custodias)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "compás binario" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "Re" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "da capo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal niente" +msgstr "dal niente" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "dal segno" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "intervalo descendente" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "escala diatónica" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "didymic comma" +msgstr "coma de Dídimo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "intervalo disminuido" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "diminuendo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminution" +msgstr "disminución" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "direct" +msgstr "directo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "movimiento disjunto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "disonancia" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonant interval" +msgstr "intervalo disonante" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Including LilyPond code" -msgstr "Incluir código de LilyPond" +# ? FVD +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "divisio" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Processing the DocBook document" -msgstr "Procesar el documento de DocBook" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "elevación" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Music fragment options" -msgstr "Opciones de fragmentos de música" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "dominante" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "Invoking lilypond-book" -msgstr "Invocar lilypond-book" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant ninth chord" +msgstr "acorde de novena dominante" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Invoking @command{lilypond-book}" -msgstr "Invocar @command{lilypond-book}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant seventh chord" +msgstr "acorde de séptima dominante" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Format-specific instructions" -msgstr "Instrucciones específicas de formato" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "modo dórico" -#. @subheading in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Command line options" -msgstr "Opciones de la línea de órdenes" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "puntillo" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Filename extensions" -msgstr "Extensiones de nombres de archivo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double appoggiatura" +msgstr "doble apoyatura" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "Alternate methods of mixing text and music" -msgstr "Métodos alternativos para mezclar texto y música" +# También Líneas divisorias. FVD +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double bar line" +msgstr "doble líne divisoria" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double dotted note" +msgstr "figura con doble puntillo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double time signature" +msgstr "compás polimétrico" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Alternative methods of mixing text and music" -msgstr "Otros métodos para mezclar texto y música" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double trill" +msgstr "trino doble" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "tiempo binario" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duplet" +msgstr "dosillo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "Mi" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "modo eclesiástico" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Many quotes from a large score" -msgstr "Muchas citas de una partitura extensa" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth note" +msgstr "corchea" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "silencio de corchea" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "elisión" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "embellishment" +msgstr "adorno" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "engraving" +msgstr "grabado musical" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "enarmónico" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "temperamento igual" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "expression mark" +msgstr "marca de expresión" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "Fa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F clef" +msgstr "clave de Fa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "caída" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Inserting LilyPond output into OpenOffice.org" -msgstr "Insertar la salida de LilyPond dentro de OpenOffice.org" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "barra progresiva" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Inserting LilyPond output into other programs" -msgstr "Insertar la salida de LilyPond dentro de otros programas" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "calderón" -#. @node in Documentation/user/converters.itely -#. @chapter in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @chapter in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @chapter in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @chapter in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -#. @chapter in Documentation/ja/user/converters.itely -msgid "Converting from other formats" -msgstr "Conversión desde otros formatos" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "quinta" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking midi2ly" -msgstr "Invocar midi2ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "bajo cifrado" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @command{midi2ly}" -msgstr "Invocar @command{midi2ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flag" +msgstr "corchete" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flageolet" +msgstr "armónico" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "apoyatura de caída" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "forte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "cuarta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "Partitura a la francesa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "Sistema a la francesa" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking musicxml2ly" -msgstr "Invocar musicxml2ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "Sistemas a la francesa" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @code{musicxml2ly}" -msgstr "Invocar @command{musicxml2ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "fuga" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking abc2ly" -msgstr "Invocar abc2ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "armonía funcional" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @code{abc2ly}" -msgstr "Invocar @code{abc2ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "Sol" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking etf2ly" -msgstr "Invocar etf2ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G clef" +msgstr "clave de sol" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @command{etf2ly}" -msgstr "Invocar @command{etf2ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "glissando" -#. @node in Documentation/user/converters.itely -#. @section in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Generating LilyPond files" -msgstr "Generar archivos de LilyPond" - -#. @top in Documentation/user/lilypond.tely -#. @top in Documentation/de/user/lilypond.tely -msgid "GNU LilyPond --- Notation Reference" -msgstr "GNU LilyPond: Referencia de la notación" - -#. @chapheading in Documentation/user/lilypond.tely -msgid "The music typesetter" -msgstr "El tipografiador de música" - -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond grammar" -msgstr "Gramática de LilyPond" - -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond command index" -msgstr "Índice de instrucciones de LilyPond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "sistema de piano" -#. @node in Documentation/user/notation.itely -#. @chapter in Documentation/user/notation.itely -#. @node in Documentation/fr/user/notation.itely -#. @chapter in Documentation/fr/user/notation.itely -#. @node in Documentation/es/user/notation.itely -#. @chapter in Documentation/es/user/notation.itely -#. @node in Documentation/de/user/notation.itely -#. @chapter in Documentation/de/user/notation.itely -msgid "Musical notation" -msgstr "Notación musical" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grave" +msgstr "grave" -#. Documentation/user/pitches.itely:732 (variable) -#. Documentation/user/input.itely:1064 (variable) -#. Documentation/user/input.itely:1083 (variable) -#. Documentation/user/input.itely:1120 (variable) -#. Documentation/user/input.itely:1135 (variable) -#. Documentation/user/changing-defaults.itely:453 (variable) -#. Documentation/user/changing-defaults.itely:488 (context id) -#. Documentation/user/changing-defaults.itely:538 (context id) -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:30 (variable) -#. input/lsr/controlling-tuplet-bracket-visibility.ly:20 (variable) -#. input/lsr/letter-tablature-formatting.ly:25 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:115 (variable) -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:138 (variable) -#. input/lsr/vertically-aligned-dynamics-and-textscripts.ly:51 (variable) -msgid "music" -msgstr "musica" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "grupeto" -#. Documentation/user/pitches.itely:1136 (comment) -msgid "not strictly necessary, but a good reminder" -msgstr "no es imprescindible pero es bueno recordarlo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "Si" -#. Documentation/user/pitches.itely:1143 (context id) -#. Documentation/user/staff.itely:1117 (variable) -msgid "clarinet" -msgstr "clarinete" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "regulador" -#. Documentation/user/pitches.itely:1228 (variable) -#. Documentation/user/changing-defaults.itely:444 (variable) -msgid "musicA" -msgstr "musicaA" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half rest" +msgstr "silencio de blanca" -#. Documentation/user/pitches.itely:1242 (variable) -#. Documentation/user/changing-defaults.itely:445 (variable) -msgid "musicB" -msgstr "musicaB" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "cadencia armónica" -#. Documentation/user/pitches.itely:1261 (context id) -#. Documentation/user/keyboards.itely:179 (context id) -#. Documentation/user/keyboards.itely:279 (context id) -#. Documentation/user/percussion.itely:175 (variable) -#. Documentation/user/percussion.itely:365 (variable) -#. input/lsr/jazz-combo-template.ly:243 (variable) -msgid "up" -msgstr "arriba" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "armónicos" -#. Documentation/user/pitches.itely:1265 (context id) -#. Documentation/user/keyboards.itely:189 (context id) -#. Documentation/user/keyboards.itely:288 (context id) -#. Documentation/user/percussion.itely:178 (variable) -#. Documentation/user/percussion.itely:366 (variable) -#. input/lsr/jazz-combo-template.ly:249 (variable) -msgid "down" -msgstr "abajo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "armonía" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "hemiolia" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "homophony" +msgstr "homofonía" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "corchete" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "compás de himno" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inversion" +msgstr "inversión" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inverted interval" +msgstr "intervalo invertido" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "justa entonación" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "tonalidad" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "laissez vibrer" -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Writing pitches" -msgstr "Escritura de notas" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Absolute octave entry" -msgstr "Escritura de octava absoluta" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Relative octave entry" -msgstr "Escritura de octava relativa" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "fifth" -msgstr "quinta" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "largo" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "quarter tone" -msgstr "cuarto de tono" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leading note" +msgstr "sensible" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Note names in other languages" -msgstr "Nombres de las notas en otros idiomas" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Changing multiple pitches" -msgstr "Modificación de varias notas a la vez" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Octave checks" -msgstr "Comprobación de octava" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Transpose" -msgstr "Transposición" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Displaying pitches" -msgstr "Imprimir las alturas" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Key signature" -msgstr "Armadura de la tonalidad" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "church mode" -msgstr "modo eclesiástico" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "línea adicional" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "scordatura" -msgstr "scordatura" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato" +msgstr "legato" -# fuzzy. FVD -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ottava brackets" -msgstr "Corchetes de octava" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "octavation" -msgstr "octavación" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "curva de legato" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Instrument transpositions" -msgstr "Transposición de los instrumentos" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "concert pitch" -msgstr "altura de concierto" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leger line" +msgstr "línea adicional" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "transposing instrument" -msgstr "instrumento transpositor" +# de neuma? FVD +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ligature" +msgstr "ligadura" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "lilypond" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "línea" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Automatic accidentals" -msgstr "Alteraciones accidentales automáticas" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ambitus" -msgstr "Tesitura" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Note heads" -msgstr "Cabeza de las notas" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Special note heads" -msgstr "Cabezas de nota especiales" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "loco" -# Fuzzy.FVD -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Easy notation note heads" -msgstr "Cabezas de notas de Notación Fácil" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "apoyatura larga" -# Fuzzy.FVD -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Shape note heads" -msgstr "Cabezas de notas con formas diversas" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Improvisation" -msgstr "Improvisación" - -#. Documentation/user/rhythms.itely:314 (comment) -msgid "Alter durations to triplets" -msgstr "Alterar la duración de los tresillos" - -#. Documentation/user/rhythms.itely:316 (comment) -#. Documentation/user/rhythms.itely:344 (comment) -msgid "Normal durations" -msgstr "Duraciones normales" - -#. Documentation/user/rhythms.itely:318 (comment) -msgid "Double the duration of chord" -msgstr "Duplicar la duración del acorde" - -#. Documentation/user/rhythms.itely:320 (comment) -msgid "Duration of quarter, appears like sixteenth" -msgstr "Duración de negra, aparece como semicorchea" - -#. Documentation/user/rhythms.itely:346 (comment) -msgid "Scale music by *2/3" -msgstr "Escalar la música en un factor 2/3" - -#. Documentation/user/rhythms.itely:350 (comment) -msgid "Scale music by *2" -msgstr "Escalar la música en un factor de 2" - -#. Documentation/user/rhythms.itely:437 (comment) -msgid "First alternative: following note is tied normally" -msgstr "Primera alternativa: la nota siguiente se liga normalmente" - -#. Documentation/user/rhythms.itely:439 (comment) -msgid "Second alternative: following note has a repeated tie" -msgstr "Segunda alternativa, la nota siguiente lleva una ligadura repetida" - -#. Documentation/user/rhythms.itely:605 (comment) -msgid "These two lines are just to prettify this example" -msgstr "Estas dos líneas son solamente para embellecer el ejemplo" - -#. Documentation/user/rhythms.itely:608 (comment) -msgid "Print a maxima rest, equal to four breves" -msgstr "Imprimir un silencio de máxima, equivalente a cuatro breves" - -#. Documentation/user/rhythms.itely:610 (comment) -msgid "Print a longa rest, equal to two breves" -msgstr "Imprimir un silencio de longa, igual a dos breves" - -#. Documentation/user/rhythms.itely:612 (comment) -msgid "Print a breve rest" -msgstr "Imprimir un silencio de breve" - -#. Documentation/user/rhythms.itely:721 (comment) -msgid "This is valid input, but does nothing" -msgstr "Esto es una entrada válida, pero no hace nada" - -#. Documentation/user/rhythms.itely:749 (comment) -#. Documentation/user/rhythms.itely:804 (comment) -msgid "Rest measures contracted to single measure" -msgstr "Compases en silencio contraídos a un solo compás" - -#. Documentation/user/rhythms.itely:800 (comment) -#. input/lsr/avoiding-collisions-with-chord-fingerings.ly:24 (comment) -msgid "Default behavior" -msgstr "Comportamiento predeterminado" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" +msgstr "longa" -#. Documentation/user/rhythms.itely:807 (comment) -msgid "Rest measures expanded" -msgstr "Compases de silencio expandidos" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyric tie" +msgstr "ligadura de letra" -#. Documentation/user/rhythms.itely:846 (comment) -msgid "This fails, as the wrong object name is specified" -msgstr "Esto no funciona, se ha especificado un nombre de objeto equivocado" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major interval" +msgstr "intervalo mayor" -#. Documentation/user/rhythms.itely:849 (comment) -msgid "This is correct and works" -msgstr "Esto es correcto y funciona" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maxima" +msgstr "maxima" -#. Documentation/user/rhythms.itely:994 (comment) -msgid "Default style" -msgstr "Estilo predeterminado" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "temperamento mesotónico" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure" +msgstr "compás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "repetción de compás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "mediante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma line" +msgstr "línea de melisma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "cadencia melódica" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensural notation" +msgstr "notación mensural" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "signo de mensuración" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "metro" -#. Documentation/user/rhythms.itely:997 (comment) -msgid "Change to numeric style" -msgstr "Cambiar al estilo numérico" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "indicación metronómica" -#. Documentation/user/rhythms.itely:1001 (comment) -msgid "Revert to default style" -msgstr "Retornar al estilo predeterminado" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "indicación metronómica" -#. Documentation/user/rhythms.itely:1147 (comment) -msgid "Show all bar numbers" -msgstr "Mostrar todos los números de compás" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "mezzo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "mezzosoprano" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor interval" +msgstr "intervalo menor" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "modo mixolidio" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "modo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "modulation" +msgstr "modulación" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "mordente" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "motivo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motive" +msgstr "motivo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "movimiento" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "silencios multicompás" -#. Documentation/user/rhythms.itely:1287 (comment) -msgid "Now each staff has its own time signature." -msgstr "Ahora cada pentagrama tiene un compás distinto" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "tonos vecinos" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ninth" +msgstr "novena" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "non-legato" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note" +msgstr "nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "cabeza de nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note names" +msgstr "nombres de nota" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "octavación" -#. Documentation/user/rhythms.itely:1415 (context id) -msgid "myRhythm" -msgstr "misDuraciones" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave mark" +msgstr "indicación de octava" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave marking" +msgstr "marcas de octava" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave sign" +msgstr "signo de octava" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ornament" +msgstr "ornamento" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "parte" -#. Documentation/user/rhythms.itely:1786 (comment) -msgid "end 1/16 beams for all time signatures at the 1/16 moment" -msgstr "finalizar barras de semicorchea para todos los compases en el momento 1/16" +# fuzzy. FVD +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "pausa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "corchete" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "repetición de estilo porcentaje" -#. Documentation/user/rhythms.itely:1790 (comment) -msgid "end 1/32 beams for all time signatures at the 1/16 moment" -msgstr "finalizar barras de fusa para todos los compases en el momento 1/16" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "percusión" -#. Documentation/user/rhythms.itely:1800 (comment) -msgid "end beams of all durations in 5/8 time signature at the 2/8 moment" -msgstr "" -"finalizar barras para cualquier duración en el compás de 5/8, en el momento " -"2/8" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "perfect interval" +msgstr "intervalo perfecto" -#. Documentation/user/rhythms.itely:1815 (comment) -msgid "rhythm 3-1-1-2" -msgstr "ritmo 3-1-1-2" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrase" +msgstr "frase" -#. Documentation/user/rhythms.itely:1816 (comment) -msgid "Context not specified - does not work correctly" -msgstr "Contexto sin especificar: no funciona correctamente" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "anacrusa" -#. Documentation/user/rhythms.itely:1822 (comment) -msgid "Works correctly with context specified" -msgstr "Funciona correctamente con el contexto especificado" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "pizzicato" -#. Documentation/user/rhythms.itely:1857 (comment) -msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" -msgstr "" -"deshacer regla de finalizar barras de semicorchea en compás 4/4 en el " -"momento 1/4" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "polimetría" -#. Documentation/user/rhythms.itely:1870 (comment) -msgid "this won't revert it!" -msgstr "¡esto no lo devuelve a su valor anterior!" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric" +msgstr "polimétrica" -#. Documentation/user/rhythms.itely:1872 (comment) -msgid "this will" -msgstr "esto sí" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric time signature" +msgstr "compás polimétrico" -#. Documentation/user/rhythms.itely:2018 (comment) -msgid "revert to non-feathered beams" -msgstr "volver a usar barras continuas" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "portato" +msgstr "portato" -#. Documentation/user/rhythms.itely:2268 (comment) -#. input/lsr/printing-bar-numbers-at-regular-intervals.ly:43 (comment) -msgid "Permit first bar number to be printed" -msgstr "Habilitar la impresión del número del primer compás" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "power chord" +msgstr "acorde de quinta vacía" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "presto" +msgstr "presto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "proportion" +msgstr "proporción" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "coma pitagórica" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "cuatrillo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "calidad" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter rest" +msgstr "silencio de negra" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "cuarto de tono" -#. Documentation/user/rhythms.itely:2371 (variable) -msgid "pipeSymbol" -msgstr "simboloTubo" - -#. Documentation/user/rhythms.itely:2746 (variable) -msgid "MyCadenza" -msgstr "miCadencia" - -#. @node in Documentation/user/rhythms.itely -#. @section in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @section in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @section in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @section in Documentation/de/user/rhythms.itely -msgid "Rhythms" -msgstr "Duraciones" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rhythms" -msgstr "Escritura de las duraciones (valores rítmicos)" - -# También Valores rimicos. FVD -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Durations" -msgstr "Duraciones" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "breve" -msgstr "breve" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "cinquillo o quintillo" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "longa" -msgstr "longa" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "rallentando" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "maxima" -msgstr "maxima" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "tono relativo" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "Duration names notes and rests" -msgstr "Nombre de las duraciones de notas y silencios" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "repeat" +msgstr "repetición" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "tuplet" -msgstr "grupo especial" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "duraciones" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "polymetric" -msgstr "polimétrica" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "ritardando" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Scaling durations" -msgstr "Escalar las duraciones" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "laissez vibrer" -msgstr "laissez vibrer" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "ritenuto" -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rests" -msgstr "Escritura de silencios" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Invisible rests" -msgstr "Silencios invisibles" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Full measure rests" -msgstr "Silencios de compás completo" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "multi-measure rest" -msgstr "silencios multicompás" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "grado de la escala" -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Displaying rhythms" -msgstr "Impresión de las duraciones" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Upbeats" -msgstr "Anacrusas" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Unmetered music" -msgstr "Música sin compasear" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "cadenza" -msgstr "cadenza" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "scordatura" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Polymetric notation" -msgstr "Notación polimétrica" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "polymetric time signature" -msgstr "compás polimétrico" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "score" +msgstr "partitura" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "segunda" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "semibreve" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "semitono" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "séptima" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "seisillo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextuplet" +msgstr "seisillo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "shake" +msgstr "trino" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "meter" -msgstr "metro" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" +msgstr "simile" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic note splitting" -msgstr "División automática de las notas" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Showing melody rhythms" -msgstr "Mostrar los ritmos de la melodía" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Beams" -msgstr "Barras" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic beams" -msgstr "Barras automáticas" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Setting automatic beam behavior" -msgstr "Establecer el comportamiento de las barras automáticas" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Manual beams" -msgstr "Barras manuales" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Feathered beams" -msgstr "Barras progresivas" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "compás sencillo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "semicorchea" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "silencio de semicorchea" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixth" +msgstr "sexta" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "semifusa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "silencio de semifusa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "repetición de tipo porcentaje" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "solmisación" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata" +msgstr "sonata" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "forma sonata" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "song texts" +msgstr "textos de canciones" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" +msgstr "soprano" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "staccato" -# También Líneas divisorias. FVD -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Bars" -msgstr "Barras de compás" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staves" +msgstr "pentagramas" -# También Líneas divisorias. FVD -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar lines" -msgstr "Barras de compás" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar numbers" -msgstr "Numeración de compases" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar and bar number checks" -msgstr "Comprobación de compás y de número de compás" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Rehearsal marks" -msgstr "Llamadas de ensayo" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Special rhythmic concerns" -msgstr "Asuntos rítmicos especiales" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Aligning to cadenzas" -msgstr "Alinear con una cadenza" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Time administration" -msgstr "Gestión del tiempo" - -#. Documentation/user/expressive.itely:388 (variable) -#. Documentation/user/expressive.itely:465 (variable) -msgid "moltoF" -msgstr "moltoF" - -#. Documentation/user/expressive.itely:409 (variable) -#. Documentation/user/expressive.itely:442 (variable) -msgid "roundF" -msgstr "f_redondo" - -#. Documentation/user/expressive.itely:411 (variable) -#. Documentation/user/expressive.itely:446 (variable) -msgid "boxF" -msgstr "f_rectangulo" - -#. Documentation/user/expressive.itely:425 (variable) -msgid "sfzp" -msgstr "sfzp" - -#. Documentation/user/expressive.itely:447 (variable) -msgid "mfEspress" -msgstr "mfEspress" - -#. Documentation/user/expressive.itely:449 (variable) -msgid "roundFdynamic" -msgstr "dinamicas_f_redondo" - -#. Documentation/user/expressive.itely:450 (variable) -msgid "boxFdynamic" -msgstr "dinamicas_f_rectangulo" - -#. Documentation/user/expressive.itely:451 (variable) -msgid "mfEspressDynamic" -msgstr "mfEspressDynamic" - -#. @node in Documentation/user/expressive.itely -#. @section in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @section in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @section in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @section in Documentation/de/user/expressive.itely -msgid "Expressive marks" -msgstr "Expresiones" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Attached to notes" -msgstr "Adosado a las notas" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Articulations and ornamentations" -msgstr "Articulaciones y ornamentos" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "plica" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "stringendo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "cuerdas" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "parte fuerte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "subdominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "submediante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "subtónica" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "sul G" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "superdominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "supertónica" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "symphony" +msgstr "sinfonía" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "síncopa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "coma sintónica" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "temperamento" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +msgid "tenor" +msgstr "tenor" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "décima" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "tenuto" msgstr "tenuto" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "accent" -msgstr "acento" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "third" +msgstr "tercera" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "staccato" -msgstr "staccato" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second note" +msgstr "fusa" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "portato" -msgstr "portato" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "silencio de fusa" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "al niente" -msgstr "al niente" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "bajo cifrado" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "hairpin" -msgstr "regulador" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time" +msgstr "compás" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "New dynamic marks" -msgstr "Indicaciones dinámicas contemporáneas" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Curves" -msgstr "Curvas" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Breath marks" -msgstr "Marcas de respiración" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -#. input/lsr/breathing-signs.ly:35 (comment) -msgid "caesura" -msgstr "cesura" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "tonalidad" -# FUZZY. FVD -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Falls and doits" -msgstr "Caídas y elevaciones" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "fall" -msgstr "caída" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "tónica" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "doit" -msgstr "elevación" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" +msgstr "instrumento transpositor" -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Lines" -msgstr "Líneas" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Glissando" -msgstr "Glissando" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "glissando" -msgstr "glissando" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "clave de sol" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Arpeggio" -msgstr "Arpegio" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "arpeggio" -msgstr "arpegio" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "trémolo" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Trills" -msgstr "Trinos" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triad" +msgstr "tríada" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "trill" msgstr "trino" -#. Documentation/user/repeats.itely:299 (variable) -#. input/lsr/volta-text-markup-using-repeatcommands.ly:23 (variable) -msgid "voltaAdLib" -msgstr "voltaAdLib" - -#. @node in Documentation/user/repeats.itely -#. @section in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @section in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @section in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @section in Documentation/de/user/repeats.itely -msgid "Repeats" -msgstr "Repeticiones" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Long repeats" -msgstr "Repeticiones largas" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Normal repeats" -msgstr "Repeticiones normales" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "repeat" -msgstr "repetición" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "volta" -msgstr "primera y segunda vez" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Manual repeat marks" -msgstr "Marcas de repetición manual" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Written-out repeats" -msgstr "Repeticiones explícitas" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Short repeats" -msgstr "Repeticiones cortas" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Percent repeats" -msgstr "Repeticiones de compás o parte de ellos" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "percent repeat" -msgstr "repetición de estilo porcentaje" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "simile" -msgstr "simile" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Tremolo repeats" -msgstr "Repeticiones de trémolo" - -#. Documentation/user/simultaneous.itely:94 (comment) -msgid "explicit single voice" -msgstr "una voz explícita" - -#. Documentation/user/simultaneous.itely:100 (comment) -msgid "single first note" -msgstr "primera nota única" - -#. Documentation/user/simultaneous.itely:112 (comment) -msgid "no single first note" -msgstr "primera nota no única" - -#. Documentation/user/simultaneous.itely:617 (variable) -msgid "instrumentOne" -msgstr "instrumentoUno" - -#. Documentation/user/simultaneous.itely:625 (variable) -msgid "instrumentTwo" -msgstr "instrumentoDos" - -#. Documentation/user/simultaneous.itely:802 (comment) -msgid "Bar 3 ..." -msgstr "Compás 3 ..." - -#. @node in Documentation/user/simultaneous.itely -#. @section in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @section in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @section in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @section in Documentation/de/user/simultaneous.itely -msgid "Simultaneous notes" -msgstr "Notas simultáneas" - -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Single voice" -msgstr "Una voz única" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Chorded notes" -msgstr "Notas en acorde" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Simultaneous expressions" -msgstr "Expresiones simultáneas" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Clusters" -msgstr "Racimos (clusters)" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "cluster" -msgstr "racimo (cluster)" - -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Multiple voices" -msgstr "Varias voces" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Single-staff polyphony" -msgstr "Polifonía en un solo pentagrama" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triple meter" +msgstr "compás de tres partes" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Voice styles" -msgstr "Estilos de voz" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Collision resolution" -msgstr "Resolución de las colisiones" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Automatic part combining" -msgstr "Combinación automática de las partes" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "a due" -msgstr "a due" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. input/lsr/flamenco-notation.ly:136 (variable) -#. input/lsr/flamenco-notation.ly:233 (context id) -msgid "part" -msgstr "parte" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tritone" +msgstr "tritono" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Writing music in parallel" -msgstr "Escribir música en paralelo" - -#. Documentation/user/staff.itely:1086 (variable) -#. Documentation/user/staff.itely:1101 (variable) -#. Documentation/user/staff.itely:1269 (variable) -msgid "flute" -msgstr "flauta" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "diapasón de horquilla" -#. Documentation/user/staff.itely:1211 (variable) -#. Documentation/user/staff.itely:1232 (variable) -msgid "oboe" -msgstr "oboe" - -#. Documentation/user/staff.itely:1290 (variable) -#. Documentation/user/staff.itely:1306 (context id) -msgid "piccolo" -msgstr "flautin" - -#. Documentation/user/staff.itely:1298 (variable) -#. Documentation/user/staff.itely:1307 (context id) -msgid "cbassoon" -msgstr "cfagot" - -#. @node in Documentation/user/staff.itely -#. @section in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @section in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @section in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @section in Documentation/de/user/staff.itely -msgid "Staff notation" -msgstr "Notación de los pentagramas" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Displaying staves" -msgstr "Impresión de los pentagramas" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Instantiating new staves" -msgstr "Crear instancias de pentagramas nuevos" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staff" -msgstr "pantagrama" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" +msgstr "grupo especial" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staves" -msgstr "pentagramas" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "mordente circular" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Grouping staves" -msgstr "Agrupar pentagramas" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "bracket" -msgstr "llave o corchete" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "unísono" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "grand staff" -msgstr "sistema de piano" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "upbeat" +msgstr "anacrusa" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Nested staff groups" -msgstr "Grupos de pentagramas anidados" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Modifying single staves" -msgstr "Modificación de pentagramas sueltos" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Staff symbol" -msgstr "El símbolo del pentagrama" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "line" -msgstr "línea" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" +msgstr "voz" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "ledger line" -msgstr "línea adicional" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "primera y segunda vez" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Ossia staves" -msgstr "Pentagramas de Ossia" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "Frenched staff" -msgstr "Sistemas a la francesa" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "parte débil" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Hiding staves" -msgstr "Ocultar pentagramas" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Writing parts" -msgstr "Escritura de las particellas" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Metronome marks" -msgstr "Indicaciones metronómicas" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome" -msgstr "metrónomo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole rest" +msgstr "silencio de redonda" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronomic indication" -msgstr "indicación metronómica" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole tone" +msgstr "tono entero" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "tempo indication" -msgstr "indicación del tempo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "viento madera" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome mark" -msgstr "indicación metronómica" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "Nombre de las duraciones de notas y silencios" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Instrument names" -msgstr "Nombres de instrumentos" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" +msgstr "Términos de la música no occidental de la A a la Z" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" +msgstr "bayati" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" +msgstr "irac" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" +msgstr "kurdo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" +msgstr "makam" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "makamlar" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "maqam" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "rast" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "semai" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" +msgstr "sikah" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "taqasim" + +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "Lista bibliográfica" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Quoting other voices" -msgstr "Citar otras voces" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Formatting cue notes" -msgstr "Formateo de las notas de aviso" - -#. Documentation/user/editorial.itely:326 (comment) -msgid "this is deliberate nonsense; note that the stems remain black" -msgstr "esto no tiene sentido, intencionalmente. Observe que las plicas siguen negras" - -#. @node in Documentation/user/editorial.itely -#. @section in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @section in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @section in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @section in Documentation/de/user/editorial.itely -msgid "Editorial annotations" -msgstr "Anotaciones editoriales" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Inside the staff" -msgstr "Dentro del pentagrama" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Selecting notation font size" -msgstr "Seleccionar el tamaño de la tipografía para la notación" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Fingering instructions" -msgstr "Indicaciones de digitación" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Hidden notes" -msgstr "Notas ocultas" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Coloring objects" -msgstr "Colorear objetos" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Parentheses" -msgstr "Paréntesis" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Stems" -msgstr "Plicas" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Outside the staff" -msgstr "Fuera del pentagrama" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Balloon help" -msgstr "Globos de ayuda" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Grid lines" -msgstr "Líneas de rejilla" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Analysis brackets" -msgstr "Corchetes de análisis" - -#. Documentation/user/text.itely:421 (variable) -msgid "allegro" -msgstr "allegro" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond grammar" +msgstr "Gramática de LilyPond" -#. @node in Documentation/user/text.itely -#. @section in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @section in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @section in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @section in Documentation/de/user/text.itely -msgid "Text" -msgstr "Texto" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Writing text" -msgstr "Escritura del texto" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text scripts" -msgstr "Guiones de texto" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "Índice de instrucciones de LilyPond" -# fuzzy. FVD -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text spanners" -msgstr "Extensiones de texto" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text marks" -msgstr "Indicaciones de texto" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Separate text" -msgstr "Texto separado" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Formatting text" -msgstr "Formatear el texto" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text markup introduction" -msgstr "Introducción al marcado de texto" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Selecting font and font size" -msgstr "Instrucciones de marcado de texto más usuales" +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "Notación musical" -# fuzzy. FVD -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text alignment" -msgstr "Alineación de texto" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Graphic notation inside markup" -msgstr "Notación gráfica dentro de elementos de marcado" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Music notation inside markup" -msgstr "Notación musical dentro de elementos de marcado" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Multi-page markup" -msgstr "Elementos de marcado de varias páginas" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Fonts" -msgstr "Tipografías" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Fonts explained" -msgstr "Explicación de las fuentes tipográficas" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Single entry fonts" -msgstr "Fuentes de un solo elemento" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Entire document fonts" -msgstr "Fuentes tipográficas del documento completo" - -#. @node in Documentation/user/specialist.itely -#. @chapter in Documentation/user/specialist.itely -#. @node in Documentation/fr/user/specialist.itely -#. @chapter in Documentation/fr/user/specialist.itely -#. @node in Documentation/es/user/specialist.itely -#. @chapter in Documentation/es/user/specialist.itely -#. @node in Documentation/de/user/specialist.itely -#. @chapter in Documentation/de/user/specialist.itely +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely msgid "Specialist notation" msgstr "Notación especializada" -#. Documentation/user/vocal.itely:519 (comment) -msgid "not recommended: left aligns syllables" -msgstr "no recomendado: alinea las sílabas a la izquierda" +#. Documentation/notation/input.itely:673 (comment) +msgid "not printed" +msgstr "no impreso" -#. Documentation/user/vocal.itely:522 (comment) -msgid "wrong: durations needed" -msgstr "incorrecto: se necesitan las duraciones" +#. Documentation/notation/input.itely:1138 (variable) +msgid "allLyrics" +msgstr "letraCompleta" -#. Documentation/user/vocal.itely:525 (comment) -msgid "correct" -msgstr "correcto" +#. Documentation/notation/input.itely:1224 (variable) +#. Documentation/notation/input.itely:1243 (variable) +#. Documentation/notation/input.itely:1280 (variable) +#. Documentation/notation/input.itely:1295 (variable) +#. Documentation/notation/spacing.itely:1560 (variable) +#. Documentation/notation/spacing.itely:1614 (variable) +#. Documentation/notation/spacing.itely:1639 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:51 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "musica" -#. Documentation/user/vocal.itely:677 (context id) -msgid "lala" -msgstr "lala" +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely +msgid "General input and output" +msgstr "Entrada y salida generales" -#. Documentation/user/vocal.itely:818 (context id) -msgid "splitpart" -msgstr "partedividida" +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Input structure" +msgstr "Estructura del código de entrada" -#. Documentation/user/vocal.itely:863 (variable) -msgid "voice" -msgstr "voz" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Structure of a score" +msgstr "Estructura de una partitura" -#. Documentation/user/vocal.itely:870 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:22 (variable) -msgid "lyr" -msgstr "letra" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple scores in a book" +msgstr "Varias partituras en un libro" -#. Documentation/user/vocal.itely:1069 (context id) -msgid "tune" -msgstr "melodia" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple output files from one input file" +msgstr "Varios archivos de salida a partir de un solo archivo de entrada" -#. Documentation/user/vocal.itely:1111 (context id) -msgid "lahlah" -msgstr "lala" - -#. Documentation/user/vocal.itely:1294 (comment) -msgid "moves the column off the left margin;" -msgstr "aleja la columna del margen izquierdo;" - -#. Documentation/user/vocal.itely:1295 (comment) -msgid "can be removed if space on the page is tight" -msgstr "se puede quitar si el espaciado de la página es apretado" - -#. Documentation/user/vocal.itely:1303 (comment) -#. Documentation/user/vocal.itely:1321 (comment) -msgid "adds vertical spacing between verses" -msgstr "añade espaciado vertical entre estrofas" - -#. Documentation/user/vocal.itely:1311 (comment) -msgid "adds horizontal spacing between columns;" -msgstr "añade espaciado horizontal entre columnas;" - -#. Documentation/user/vocal.itely:1312 (comment) -msgid "if they are still too close, add more \\\" \\\" pairs" -msgstr "si aún están muy juntas, añada más parejas \\\" \\\"" - -#. Documentation/user/vocal.itely:1313 (comment) -msgid "until the result looks good" -msgstr "hasta que el resultado resulte adecuado" - -#. Documentation/user/vocal.itely:1329 (comment) -msgid "gives some extra space on the right margin;" -msgstr "aplica más separación en el margen derecho;" - -#. Documentation/user/vocal.itely:1330 (comment) -msgid "can be removed if page space is tight" -msgstr "se puede quitar si el espaciado de la página es apretado" - -#. @node in Documentation/user/vocal.itely -#. @section in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @section in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @section in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @section in Documentation/de/user/vocal.itely -msgid "Vocal music" -msgstr "Música vocal" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Common notation for vocal music" -msgstr "Notación común para música vocal" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "References for vocal music and lyrics" -msgstr "Referencias para música vocal y letra" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Opera" -msgstr "Ópera" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Song books" -msgstr "Cancioneros" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spoken music" -msgstr "Música hablada" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Chants" -msgstr "Cantos" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Ancient vocal music" -msgstr "Música vocal antigua" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Entering lyrics" -msgstr "Introducir la letra" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics explained" -msgstr "Explicación de la letra" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Working with lyrics and variables" -msgstr "Trabajar con el texto y las variables" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Automatic syllable durations" -msgstr "Duración automática de las sílabas" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Manual syllable durations" -msgstr "Duración manual de las sílabas" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple syllables to one note" -msgstr "Varias sílabas sobre una nota" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple notes to one syllable" -msgstr "Varias notas sobre una sílaba" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Skipping notes" -msgstr "Saltar notas" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Output file names" +msgstr "Nombres de los archivos de salida" -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Extenders and hyphens" -msgstr "Líneas de extensión y guiones" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics and repeats" -msgstr "Letras y repeticiones" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Specific uses of lyrics" -msgstr "Usos específicos de la letra" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Divisi lyrics" -msgstr "Letras en divisi" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics independent of notes" -msgstr "Letra independiente de las notas" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spacing out syllables" -msgstr "Espaciado de las sílabas" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Centering lyrics between staves" -msgstr "Centrado de la letra entre pentagramas" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Stanzas" -msgstr "Versos" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding stanza numbers" -msgstr "Añadir números de verso" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding dynamics marks to stanzas" -msgstr "Añadir expresiones dinámicas a los versos" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding singers' names to stanzas" -msgstr "Añadir el nombre de los cantantes a los versos" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Stanzas with different rhythms" -msgstr "Versos con ritmos distintos" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -msgid "Ignoring melismata" -msgstr "Ignorar los melismas" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Switching to an alternative melody" -msgstr "Cambio a una melodía alternativa" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end" -msgstr "Imprimir los versos al final" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end in multiple columns" -msgstr "Imprimir los versos al final en varias columnas" - -#. Documentation/user/keyboards.itely:191 (comment) -msgid "keep staff alive" -msgstr "mantener vivo el pentagrama" - -#. Documentation/user/keyboards.itely:280 (context id) -msgid "melOne" -msgstr "melodiaUno" - -#. Documentation/user/keyboards.itely:349 (context id) -#. Documentation/user/fretted-strings.itely:247 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:25 (variable) -#. input/lsr/jazz-combo-template.ly:207 (context id) -#. input/lsr/jazz-combo-template.ly:216 (context id) -msgid "two" -msgstr "dos" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "File structure" +msgstr "Estructura del archivo" -#. Documentation/user/keyboards.itely:403 (comment) -msgid "stems may overlap the other staff" -msgstr "las plicas pueden superponerse al otro pentagrama" - -#. Documentation/user/keyboards.itely:405 (comment) -msgid "extend the stems to reach other other staff" -msgstr "extender las plicas para que lleguen hasta el otro pentagrama" - -#. Documentation/user/keyboards.itely:407 (comment) -msgid "do not print extra flags" -msgstr "no imprimir corchetes adicionales" - -#. Documentation/user/keyboards.itely:409 (comment) -msgid "prevent beaming as needed" -msgstr "evitar el barrado según necesidades" - -#. @node in Documentation/user/keyboards.itely -#. @section in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @section in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @section in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @section in Documentation/de/user/keyboards.itely -msgid "Keyboard and other multi-staff instruments" -msgstr "Teclados y otros instrumentos de varios pentagramas" +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Titles and headers" +msgstr "Títulos y cabeceras" -# Fuzzy.FVD -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Common notation for keyboards" -msgstr "Notación común para instrumentos de teclado" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for keyboards" -msgstr "Referencias para teclados" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff manually" -msgstr "Cambiar de pentagrama manualmente" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff automatically" -msgstr "Cambiar de pentagrama automáticamente" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Staff-change lines" -msgstr "Líneas de cambio de pentagrama" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Cross-staff stems" -msgstr "Plicas de pentagrama cruzado" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Piano" -msgstr "Piano" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Piano pedals" -msgstr "Pedales de piano" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Accordion" -msgstr "Acordeón" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Discant symbols" -msgstr "Símbolos de Discanto" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Harp" -msgstr "Arpa" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for harps" -msgstr "Referencias para notación de arpa" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Harp pedals" -msgstr "Pedales de arpa" - -#. @node in Documentation/user/unfretted-strings.itely -#. @section in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @section in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @section in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @section in Documentation/de/user/unfretted-strings.itely -msgid "Unfretted string instruments" -msgstr "Instrumentos de cuerda sin trastes" - -#. @node in Documentation/user/unfretted-strings.itely -#. @subsection in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @subsection in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @subsection in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @subsection in Documentation/de/user/unfretted-strings.itely -msgid "Common notation for unfretted strings" -msgstr "Notación común para cuerdas sin trastes" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "References for unfretted strings" -msgstr "Referencias para cuerdas sin trastes" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Bowing indications" -msgstr "Indicaciones de arco" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Harmonics" -msgstr "Armónicos" - -#. @rglos in Documentation/user/unfretted-strings.itely -#. @rglos in Documentation/es/user/unfretted-strings.itely -#. @rglos in Documentation/de/user/unfretted-strings.itely -msgid "harmonics" -msgstr "armónicos" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating titles" +msgstr "Crear títulos" -#. @node in Documentation/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Snap (Bartok) pizzicato" -msgstr "Pizzicato de Bartok (Snap)" - -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -msgid "Snap (Bartók) pizzicato" -msgstr "Pizzicato de Bartók (Snap)" - -#. Documentation/user/fretted-strings.itely:243 (variable) -msgid "melodia" -msgstr "melodia" +#. @node in Documentation/notation/input.itely +msgid "Custom headers footers and titles" +msgstr "Cabeceras Pies y Títulos personalizados" -#. Documentation/user/fretted-strings.itely:248 (context id) -msgid "shared" -msgstr "comun" +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" +msgstr "Cabeceras, Pies y Títulos personalizados" -#. Documentation/user/fretted-strings.itely:249 (context id) -msgid "solo" -msgstr "solo" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Reference to page numbers" +msgstr "Referencias a números de página" -#. Documentation/user/fretted-strings.itely:326 (variable) -msgid "mynotes" -msgstr "misNotas" +# this is the same translation that babel LaTex package uses . FVD +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Table of contents" +msgstr "Índice general" -#. Documentation/user/fretted-strings.itely:453 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:32 (comment) -msgid "A chord for ukelele" -msgstr "Un acorde de ukelele" +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Working with input files" +msgstr "Trabajar sobre los archivos de entrada" -#. Documentation/user/fretted-strings.itely:785 (variable) -#. Documentation/user/fretted-strings.itely:808 (variable) -#. Documentation/user/fretted-strings.itely:837 (variable) -#. Documentation/user/fretted-strings.itely:868 (variable) -#. Documentation/user/fretted-strings.itely:894 (variable) -#. Documentation/user/fretted-strings.itely:942 (variable) -msgid "mychords" -msgstr "misAcordes" - -#. Documentation/user/fretted-strings.itely:812 (variable) -msgid "mychordlist" -msgstr "miListaDeAcordes" - -#. Documentation/user/fretted-strings.itely:929 (comment) -msgid "add a new chord shape" -msgstr "añadir una forma de acorde nueva" - -#. Documentation/user/fretted-strings.itely:933 (comment) -msgid "add some new chords based on the power chord shape" -msgstr "añadir acordes nuevos basados en la forma de acorde principal" - -#. @node in Documentation/user/fretted-strings.itely -#. @section in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @section in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @section in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @section in Documentation/de/user/fretted-strings.itely -msgid "Fretted string instruments" -msgstr "Instrumentos de cuerda con trastes" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Common notation for fretted strings" -msgstr "Notación común para cuerdas con trastes" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "References for fretted strings" -msgstr "Referencias para cuerdas con trastes" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "String number indications" -msgstr "Indicación de los números de cuerda" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Default tablatures" -msgstr "Tablaturas predeterminadas" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Custom tablatures" -msgstr "Tablaturas personalizadas" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Fret diagram markups" -msgstr "Marcas de diagramas de trastes" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Predefined fret diagrams" -msgstr "Diagramas predefinidos de trastes" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Automatic fret diagrams" -msgstr "Diagramas de traste automáticos" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Right-hand fingerings" -msgstr "Digitaciones de la mano derecha" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Guitar" -msgstr "Guitarra" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating position and barring" -msgstr "Indicar la posición y la cejilla" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating harmonics and dampened notes" -msgstr "Indicar armónicos y notas tapadas" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Banjo" -msgstr "Banjo" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Banjo tablatures" -msgstr "Tablaturas de banjo" - -#. Documentation/user/percussion.itely:385 (comment) -msgid "These lines define the position of the woodblocks in the stave;" -msgstr "Estas líneas definen la posición de los bloques en la pauta;" - -#. Documentation/user/percussion.itely:386 (comment) -msgid "if you like, you can change it or you can use special note heads" -msgstr "si quiere, puede cambiarlo o usar cabezas especiales" - -#. Documentation/user/percussion.itely:387 (comment) -msgid "for the woodblocks." -msgstr "para los bloques." - -#. Documentation/user/percussion.itely:391 (variable) -msgid "woodstaff" -msgstr "pautaBloques" - -#. Documentation/user/percussion.itely:392 (comment) -msgid "This defines a staff with only two lines." -msgstr "Esto define una pauta con sólo dos líneas." - -#. Documentation/user/percussion.itely:393 (comment) -msgid "It also defines the positions of the two lines." -msgstr "También define las posiciones de las dos líneas." - -#. Documentation/user/percussion.itely:396 (comment) -msgid "This is neccessary; if not entered, the barline would be too short!" -msgstr "Esto es necesario; si no se pone, la línea divisoria sería demasiado corta." - -#. Documentation/user/percussion.itely:403 (comment) -msgid "with this you load your new drum style table" -msgstr "con esto cargamos la nueva tabla de estilos de percusión" - -#. Documentation/user/percussion.itely:425 (variable) -msgid "tambustaff" -msgstr "pautaPandereta" - -#. Documentation/user/percussion.itely:439 (comment) -msgid "the trick with the scaled duration and the shorter rest" -msgstr "el truco con la duración escalada y el silencio más corto" - -#. Documentation/user/percussion.itely:440 (comment) -msgid "is neccessary for the correct ending of the trill-span!" -msgstr "es necesario para la correcta finalización del trino." - -#. Documentation/user/percussion.itely:451 (variable) -msgid "tamtamstaff" -msgstr "pautaGong" - -#. Documentation/user/percussion.itely:473 (variable) -msgid "bellstaff" -msgstr "pautaCampana" - -#. Documentation/user/percussion.itely:504 (variable) -msgid "drumsA" -msgstr "percusionA" - -#. Documentation/user/percussion.itely:519 (variable) -msgid "drumsB" -msgstr "percusionB" - -#. @node in Documentation/user/percussion.itely -#. @section in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @section in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @section in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @section in Documentation/de/user/percussion.itely -msgid "Percussion" -msgstr "Percusión" - -#. @node in Documentation/user/percussion.itely -#. @subsection in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @subsection in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @subsection in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @subsection in Documentation/de/user/percussion.itely -msgid "Common notation for percussion" -msgstr "Notación común para percusión" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "References for percussion" -msgstr "Referencias para percusión" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Basic percussion notation" -msgstr "Notación básica de percusión" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Drum rolls" -msgstr "Redobles" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Pitched percussion" -msgstr "Percusión afinada" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Percussion staves" -msgstr "Pautas de percusión" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Custom percussion staves" -msgstr "Pautas de percusión personalizadas" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Ghost notes" -msgstr "Notas fantasma" - -#. @node in Documentation/user/wind.itely -#. @section in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @section in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @section in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @section in Documentation/de/user/wind.itely -msgid "Wind instruments" -msgstr "Instrumentos de viento" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Common notation for wind instruments" -msgstr "Notación común para instrumentos de viento" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "References for wind instruments" -msgstr "Referencias para instrumentos de viento" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Bagpipes" -msgstr "Gaita" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe definitions" -msgstr "Definiciones para la gaita" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe example" -msgstr "Ejemplo de música de gaita" - -#. Documentation/user/chords.itely:696 (variable) -#. input/lsr/chordchanges-for-fretboards.ly:35 (variable) -msgid "myChords" -msgstr "misAcordes" - -#. Documentation/user/chords.itely:1026 (comment) -#. Documentation/user/chords.itely:1047 (comment) -msgid "Put notes on same Staff as figures" -msgstr "Poner las notas en el mismo pentagrama que los números" - -#. Documentation/user/chords.itely:1110 (comment) -msgid "The extenders are correct here, with the same rhythm as the bass" -msgstr "Los extensores aquí son correctos, con el mismo ritmo que el bajo" - -#. Documentation/user/chords.itely:1122 (comment) -msgid "The extenders are incorrect here, even though the timing is the same" -msgstr "Los extensores aquí son incorrectos, aunque la medida es la misma" - -#. @node in Documentation/user/chords.itely -#. @section in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @section in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @section in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @section in Documentation/de/user/chords.itely -msgid "Chord notation" -msgstr "Notación de acordes" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Chord mode" -msgstr "Modo de acordes" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Chord mode overview" -msgstr "Panorámica del modo de acordes" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Common chords" -msgstr "Acordes más usuales" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Extended and altered chords" -msgstr "Acordes extendidos y alterados" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Displaying chords" -msgstr "Imprimir los acordes" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Printing chord names" -msgstr "Impresión de los nombres de acorde" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Customizing chord names" -msgstr "Nombres de acorde personalizados" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Figured bass" -msgstr "Bajo cifrado" - -# ?? FVD -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Introduction to figured bass" -msgstr "Introducción al bajo cifrado" - -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/chords.itely -msgid "figured bass" -msgstr "bajo cifrado" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Entering figured bass" -msgstr "Introducir el bajo cifrado" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Displaying figured bass" -msgstr "Imprimir el bajo cifrado" - -#. Documentation/user/ancient.itely:357 (context id) -msgid "discantus" -msgstr "discantus" - -#. Documentation/user/ancient.itely:823 (variable) -msgid "ficta" -msgstr "ficta" - -#. Documentation/user/ancient.itely:976 (context id) -msgid "cantus" -msgstr "cantus" - -#. Documentation/user/ancient.itely:2399 (variable) -#. Documentation/user/ancient.itely:2434 (variable) -#. Documentation/user/ancient.itely:2502 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:39 (variable) -msgid "chant" -msgstr "canto" - -#. Documentation/user/ancient.itely:2405 (variable) -#. Documentation/user/ancient.itely:2445 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:46 (variable) -msgid "verba" -msgstr "verba" - -#. Documentation/user/ancient.itely:2487 (variable) -msgid "spiritus" -msgstr "spiritus" - -#. Documentation/user/ancient.itely:2495 (variable) -msgid "spirLyr" -msgstr "letraSpir" - -#. @node in Documentation/user/ancient.itely -#. @section in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @section in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @section in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @section in Documentation/de/user/ancient.itely -msgid "Ancient notation" -msgstr "Notación antigua" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Overview of the supported styles" -msgstr "Panorámica de los estilos contemplados" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Ancient notation---common features" -msgstr "Notación antigua: funcionalidades comunes" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Pre-defined contexts" -msgstr "Contextos predefinidos" - -# de neuma? FVD -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ligatures" -msgstr "Ligaduras" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Custodes" -msgstr "Custos" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Figured bass support" -msgstr "Soporte para bajo cifrado" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Typesetting mensural music" -msgstr "Tipografiar música mensural" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural contexts" -msgstr "Contextos de la música mensural" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural clefs" -msgstr "Claves de la música mensural" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural time signatures" -msgstr "Indicaciones de compás de la música mensural" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural note heads" -msgstr "Cabezas de nota de la música mensural" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural flags" -msgstr "Corchetes de la música mensural" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural rests" -msgstr "Silencios de la música mensural" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural accidentals and key signatures" -msgstr "Alteraciones y armaduras de la música mensural" - -#. @node in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -msgid "Annotational accidentals (musica ficta)" -msgstr "Alteraciones de anotación (musica ficta)" - -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Annotational accidentals (@emph{musica ficta})" -msgstr "Alteraciones de anotación (@emph{musica ficta})" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "White mensural ligatures" -msgstr "Ligaduras mensurales blancas" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Typesetting Gregorian chant" -msgstr "Tipografiado del canto gregoriano" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian chant contexts" -msgstr "Contextos del canto gregoriano" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian clefs" -msgstr "Claves de canto gregoriano" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian accidentals and key signatures" -msgstr "Alteraciones y armaduras de canto gregoriano" - -# ? FVD -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Divisiones" -msgstr "Divisiones" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian articulation signs" -msgstr "Articulaciones del canto gregoriano" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Augmentum dots (@emph{morae})" -msgstr "Puntos de aumentación (@emph{morae})" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian square neume ligatures" -msgstr "Ligaduras de neumas cuadrados gregorianos" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Working with ancient music---scenarios and solutions" -msgstr "Trabajar con música antigua: escenarios y soluciones" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Incipits" -msgstr "Incipits" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensurstriche layout" -msgstr "Disposición tipo «Mensurstriche»" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Transcribing Gregorian chant" -msgstr "Transcripción de canto gregoriano" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient and modern from one source" -msgstr "Antigua y moderna desde la misma fuente" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Editorial markings" -msgstr "Anotaciones editoriales" - -#. @node in Documentation/user/world.itely -#. @section in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @section in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @section in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @section in Documentation/de/user/world.itely -msgid "World music" -msgstr "Músicas del mundo" - -#. @node in Documentation/user/world.itely -#. @subsection in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @subsection in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @subsection in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @subsection in Documentation/de/user/world.itely -msgid "Arabic music" -msgstr "Música árabe" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "References for Arabic music" -msgstr "Referencias para música árabe" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic note names" -msgstr "Nombres de nota árabes" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic key signatures" -msgstr "Armaduras de tonalidad árabes" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic time signatures" -msgstr "Indicaciones de compás árabes" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic music example" -msgstr "Ejemplo de música árabe" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Further reading" -msgstr "Lecturas adicionales" - -#. Documentation/user/input.itely:546 (comment) -msgid "not printed" -msgstr "no impreso" - -#. Documentation/user/input.itely:978 (variable) -msgid "allLyrics" -msgstr "letraCompleta" - -#. @node in Documentation/user/input.itely -#. @chapter in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @chapter in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @chapter in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @chapter in Documentation/de/user/input.itely -msgid "General input and output" -msgstr "Entrada y salida generales" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Input structure" -msgstr "Estructura del código de entrada" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Structure of a score" -msgstr "Estructura de una partitura" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Multiple scores in a book" -msgstr "Varias partituras en un libro" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "File structure" -msgstr "Estructura del archivo" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Titles and headers" -msgstr "Títulos y cabeceras" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Creating titles" -msgstr "Crear títulos" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Custom titles" -msgstr "Títulos personalizados" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Reference to page numbers" -msgstr "Referencias a números de página" - -# this is the same translation that babel LaTex package uses . FVD -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Table of contents" -msgstr "Índice general" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Working with input files" -msgstr "Trabajar sobre los archivos de entrada" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Including LilyPond files" msgstr "Inclusión de archivos de LilyPond" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Different editions from one source" msgstr "Distintas ediciones a partir de una misma fuente" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Using variables" msgstr "Uso de las variables" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Using tags" msgstr "Uso de etiquetas" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using global settings" +msgstr "Usar ajustes globales" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Text encoding" msgstr "Codificación del texto" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Displaying LilyPond notation" msgstr "Presentar la notación de LilyPond" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Controlling output" msgstr "Controlar la salida" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Extracting fragments of music" msgstr "Extracción de fragmentos de música" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Skipping corrected music" msgstr "Saltar la música corregida" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "Formatos de salida alternativos" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "Sustitución de la tipografía para la notación" + +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" +msgstr "Instrucciones de instalación para MacOS" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "MIDI output" msgstr "Salida MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Creating MIDI files" msgstr "Crear archivos MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" +msgstr "Nombres de instrumentos" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "MIDI block" msgstr "El bloque MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "What goes into the MIDI output?" msgstr "¿Qué sale por el MIDI?" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Supported in MIDI" msgstr "Contemplado en el MIDI" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Unsupported in MIDI" msgstr "No contemplado en el MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Repeats in MIDI" msgstr "Repeticiones y MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Controlling MIDI dynamics" msgstr "Control de los matices en el MIDI" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Dynamic marks" msgstr "Indicaciones dinámicas" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Overall MIDI volume" msgstr "Volumen maestro MIDI" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Equalizing different instruments (i)" msgstr "Balance entre instrumentos (i)" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Equalizing different instruments (ii)" msgstr "Balance entre instrumentos (i)" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Percussion in MIDI" msgstr "Percusión en MIDI" -#. Documentation/user/spacing.itely:882 (comment) -msgid "this does nothing" -msgstr "esto no hace nada" +#. Documentation/notation/spacing.itely:2059 (comment) +msgid "The very low note here needs more room than 'basic-distance" +msgstr "Esta nota tan grave requiere más espacio de que 'basic-distance" + +#. Documentation/notation/spacing.itely:2060 (comment) +msgid "can provide, so the distance between this staff and the next" +msgstr "puede ofrecer, por lo que la distancia entre este pentagrama y el siguiente" + +#. Documentation/notation/spacing.itely:2061 (comment) +msgid "is determined by 'padding." +msgstr "viene determinado por 'padding." + +#. Documentation/notation/spacing.itely:2064 (comment) +msgid "Here, 'basic-distance provides enough room, and there is no" +msgstr "Aquí, 'basic-distance da espacio suficiente, y no hay" + +#. Documentation/notation/spacing.itely:2065 (comment) +msgid "need to compress the space (towards 'minimum-distance) to make" +msgstr "necesidad de comprimir el espacio (mediante 'minimum-distance) para hacer" -#. Documentation/user/spacing.itely:883 (comment) -msgid "a break here would work" -msgstr "un salto aquí funcionaría" +#. Documentation/notation/spacing.itely:2066 (comment) +msgid "room for anything else on the page, so the distance between" +msgstr "sitio para cualquier otra cosa en la página, por lo que la distancia entre" -#. Documentation/user/spacing.itely:884 (comment) -msgid "as does this break" -msgstr "como por ejemplo este salto" +#. Documentation/notation/spacing.itely:2067 (comment) +msgid "this staff and the next is determined by 'basic-distance." +msgstr "este pentagrama y el siguiente viene determinado por 'basic-distance" -#. Documentation/user/spacing.itely:896 (comment) -msgid "now the break is allowed" -msgstr "ahora se permite el salto de línea" +#. Documentation/notation/spacing.itely:2070 (comment) +msgid "By setting 'padding to a negative value, staves can be made to" +msgstr "Estableciendo 'padding a un valor negativo, se puede hacer que los pentagramas" -#. Documentation/user/spacing.itely:1775 (comment) +#. Documentation/notation/spacing.itely:2071 (comment) +msgid "collide. The lowest acceptable value for 'basic-distance is 0." +msgstr "colisionen. El valor más bajo aceptable para 'basic-distance es cero." + +#. Documentation/notation/spacing.itely:2502 (comment) msgid "this time the text will be closer to the staff" msgstr "esta vez el texto estará más cerca del pentagrama" -#. Documentation/user/spacing.itely:1777 (comment) +#. Documentation/notation/spacing.itely:2504 (comment) msgid "by setting outside-staff-priority to a non-number," msgstr "ajustando el valor de outside-staff-priority a algo que no sea un número," -#. Documentation/user/spacing.itely:1778 (comment) +#. Documentation/notation/spacing.itely:2505 (comment) msgid "we disable the automatic collision avoidance" msgstr "desactivamos la evitación automática de colisiones" -#. Documentation/user/spacing.itely:1781 (comment) +#. Documentation/notation/spacing.itely:2508 (comment) msgid "now they will collide" msgstr "ahora se producirá la colisión" -#. Documentation/user/spacing.itely:1807 (comment) +#. Documentation/notation/spacing.itely:2534 (comment) msgid "the markup is too close to the following note" msgstr "el marcado está demasiado cerca de la nota siguiente" -#. Documentation/user/spacing.itely:1811 (comment) +#. Documentation/notation/spacing.itely:2538 (comment) msgid "setting outside-staff-horizontal-padding fixes this" msgstr "ajustar outside-staff-horizontal-padding corrige esto" -#. @node in Documentation/user/spacing.itely -#. @chapter in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @chapter in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @chapter in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @chapter in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely msgid "Spacing issues" msgstr "Problemas de espaciado" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Paper and pages" -msgstr "El papel y las páginas" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Paper size" -msgstr "Tamaño del papel" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Page formatting" -msgstr "Formateo de las páginas" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Vertical dimensions" -msgstr "Dimensiones verticales" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Horizontal dimensions" -msgstr "Dimensiones horizontales" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Other layout variables" -msgstr "Otras variables de diseño de página" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Music layout" -msgstr "Disposición de la música" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Setting the staff size" -msgstr "Establecer el tamaño del pentagrama" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Page layout" +msgstr "Disposición de la página" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" +msgstr "El bloque \\\\paper" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\paper} block" +msgstr "El bloque @code{\\\\override}" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" +msgstr "Tamaño del papel y escalado automático" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Setting paper size" +msgstr "Establecer el tamaño de la página" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Automatic scaling to paper size" +msgstr "Escalado automático al tamaño de la página" + +#. @node in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing \\\\paper variables" +msgstr "Variables de \\\\paper de espaciado vertical fijo" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing @code{\\\\paper} variables" +msgstr "Variables de @code{\\\\paper} de espaciado vertical fijo" + +#. @node in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing \\\\paper variables" +msgstr "Variables de \\\\paper de espaciado vertical flexible" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" +msgstr "Variables de @code{\\\\paper} de espaciado vertical flexible" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" +msgstr "Estructura de las listas-A de espaciado vertical flexible" + +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" +msgstr "Lista de variables de \\\\paper de espaciado vertical flexibe" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" +msgstr "Lista de variables de @code{\\\\paper} de espaciado vertical flexibe" + +#. @node in Documentation/notation/spacing.itely +msgid "Horizontal spacing \\\\paper variables" +msgstr "Variables de \\\\paper de espaciado horizontal" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing @code{\\\\paper} variables" +msgstr "Variables de @code{\\\\paper} de espaciado horizontal" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" +msgstr "Variables de \\\\paper para anchos y márgenes" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" +msgstr "Variables de @code{\\\\paper} para anchos y márgenes" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" +msgstr "variables de \\\\paper para el modo de doble cara" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" +msgstr "variables de @code{\\\\paper} para el modo de doble cara" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" +msgstr "variables de \\\\paper para desplazamientos y sangrados" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" +msgstr "variables de @code{\\\\paper} para desplazamientos y sangrados" + +#. @node in Documentation/notation/spacing.itely +msgid "Other \\\\paper variables" +msgstr "Otras variables de \\\\paper" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Other @code{\\\\paper} variables" +msgstr "Otras variables de @code{\\\\paper}" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" +msgstr "variables de \\\\paper para saltos de línea" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" +msgstr "variables de @code{\\\\paper} para saltos de línea" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page breaking" +msgstr "variables de \\\\paper para saltos de página" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" +msgstr "variables de @code{\\\\paper} para saltos de página" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" +msgstr "variables de \\\\paper para la numeración de páginas" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" +msgstr "variables de @code{\\\\paper} para la numeración de páginas" + +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" +msgstr "Variables de \\\\paper diversas" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Miscellaneous @code{\\\\paper} variables" +msgstr "Variables de @code{\\\\paper} diversas" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Score layout" msgstr "Disposición de la partitura" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\layout block" +msgstr "El bloque \\\\layout" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\layout} block" +msgstr "El bloque @code{\\\\layout}" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" +msgstr "Establecer el tamaño del pentagrama" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Breaks" msgstr "Saltos" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Line breaking" msgstr "Saltos de línea" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Page breaking" msgstr "Saltos de página" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Optimal page breaking" msgstr "Saltos de página óptimos" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Optimal page turning" msgstr "Paso de página óptimo" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Minimal page breaking" msgstr "Saltos de página mínimos" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Explicit breaks" msgstr "Saltos de línea explícitos" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Using an extra voice for breaks" msgstr "Utilizar una voz adicional para los saltos de línea" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Vertical spacing" msgstr "Espaciado vertical" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing inside a system" -msgstr "Espaciado vertical dentro de un sistema" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing between systems" -msgstr "Espaciado vertical entre sistemas" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing within systems" +msgstr "Espaciado vertical flexible entre sistemas" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Within-system spacing properties" +msgstr "Propiedades de espaciado dentro de los sistemas" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" +msgstr "Propiedades del grob @code{VerticalAxisGroup}" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" +msgstr "Propiedades del grob @code{StaffGrouper}" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of ungrouped staves" +msgstr "Espaciado de pentagramas no agrupados" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of grouped staves" +msgstr "Espaciado de pentagramas agrupados" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "Espaciado de líneas que no son pautas" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Explicit staff and system positioning" msgstr "Posicionamiento explícito de los pentagramas y los sistemas" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Two-pass vertical spacing" -msgstr "Espaciado vertical en dos fases" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Vertical collision avoidance" msgstr "Evitar las colisiones verticales" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Horizontal spacing" msgstr "Espaciado horizontal" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Horizontal spacing overview" msgstr "Panorámica del espaciado horizontal" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "New spacing area" msgstr "Área de espaciado nueva" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Changing horizontal spacing" msgstr "Cambiar el espaciado horizontal" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Line length" msgstr "Longitud de la línea" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Proportional notation" msgstr "Notación proporcional" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Fitting music onto fewer pages" msgstr "Encajar la música en menos páginas" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Displaying spacing" msgstr "Mostrar el espaciado" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Changing spacing" msgstr "Cambiar el espaciado" -#. Documentation/user/changing-defaults.itely:446 (variable) +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" +msgstr "musicaA" + +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" +msgstr "musicaB" + +#. Documentation/notation/changing-defaults.itely:451 (variable) msgid "keepVoicesAlive" msgstr "mantenVocesVivas" -#. Documentation/user/changing-defaults.itely:448 (context id) -#. Documentation/user/changing-defaults.itely:454 (context id) -#. Documentation/user/changing-defaults.itely:462 (context id) -#. Documentation/user/changing-defaults.itely:464 (context id) -msgid "A" -msgstr "A" - -#. Documentation/user/changing-defaults.itely:448 (comment) +#. Documentation/notation/changing-defaults.itely:453 (comment) msgid "Keep Voice \\\"A\\\" alive for 5 bars" msgstr "Mantener viva la voz \\\"A\\\" durante 5 compases" -#. Documentation/user/changing-defaults.itely:449 (context id) -#. Documentation/user/changing-defaults.itely:458 (context id) -#. Documentation/user/changing-defaults.itely:463 (context id) -msgid "B" -msgstr "B" - -#. Documentation/user/changing-defaults.itely:449 (comment) +#. Documentation/notation/changing-defaults.itely:454 (comment) msgid "Keep Voice \\\"B\\\" alive for 5 bars" msgstr "Mantener viva la voz \\\"B\\\" durante 5 compases" -#. Documentation/user/changing-defaults.itely:484 (variable) -#. Documentation/user/changing-defaults.itely:495 (context id) -#. Documentation/user/changing-defaults.itely:501 (context id) -#. Documentation/user/changing-defaults.itely:503 (context id) -#. Documentation/user/changing-defaults.itely:506 (context id) -#. Documentation/user/changing-defaults.itely:528 (variable) -#. Documentation/user/changing-defaults.itely:544 (context id) +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) msgid "accompaniment" msgstr "acompanamiento" -#. Documentation/user/changing-defaults.itely:485 (variable) -#. Documentation/user/changing-defaults.itely:534 (variable) +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:95 (variable) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:61 (variable) msgid "words" msgstr "letra" -#. Documentation/user/changing-defaults.itely:492 (comment) +#. Documentation/notation/changing-defaults.itely:497 (comment) msgid "Keep Voice \\\"melody\\\" alive for 4 bars" msgstr "Mantener con vida la voz \\\"melodia\\\" durante 4 compases" -#. Documentation/user/changing-defaults.itely:523 (comment) -#. Documentation/user/changing-defaults.itely:525 (comment) +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) msgid "skip a bar" msgstr "saltar un compás" -#. Documentation/user/changing-defaults.itely:2142 (comment) +#. Documentation/notation/changing-defaults.itely:2020 (comment) +msgid "default space between staves" +msgstr "espacio predeterminado entre pentagramas" + +#. Documentation/notation/changing-defaults.itely:2026 (comment) +msgid "reduced space between staves" +msgstr "espacio reducido entre pentagramas" + +#. Documentation/notation/changing-defaults.itely:2028 (comment) +msgid "this is the nested declaration" +msgstr "esta es la declaración anidada" + +#. Documentation/notation/changing-defaults.itely:2482 (comment) msgid "increase the length of the tie" msgstr "aumentar la longitud de la ligadura" -#. Documentation/user/changing-defaults.itely:2151 (comment) +#. Documentation/notation/changing-defaults.itely:2491 (comment) msgid "increase the length of the rest bar" msgstr "aumentar la longitud del compás en silencio" -#. Documentation/user/changing-defaults.itely:2159 (comment) +#. Documentation/notation/changing-defaults.itely:2499 (comment) msgid "increase the length of the hairpin" msgstr "aumentar la longitud del regulador" -#. Documentation/user/changing-defaults.itely:2187 (comment) +#. Documentation/notation/changing-defaults.itely:2527 (comment) msgid "default" msgstr "predeterminado" -#. Documentation/user/changing-defaults.itely:2190 (comment) -#. Documentation/user/changing-defaults.itely:2203 (comment) +#. Documentation/notation/changing-defaults.itely:2530 (comment) +#. Documentation/notation/changing-defaults.itely:2543 (comment) msgid "not effective alone" msgstr "no es efectivo por sí solo" -#. Documentation/user/changing-defaults.itely:2194 (comment) -#. Documentation/user/changing-defaults.itely:2207 (comment) +#. Documentation/notation/changing-defaults.itely:2534 (comment) +#. Documentation/notation/changing-defaults.itely:2547 (comment) msgid "effective only when both overrides are present" msgstr "es efectivo sólo cuando las dos sobreescrituras están presentes" -#. Documentation/user/changing-defaults.itely:2582 (comment) +#. Documentation/notation/changing-defaults.itely:2924 (comment) msgid "Remove bar line at the end of the current line" msgstr "Quitar la barra de compás al final de la línea en curso" -#. Documentation/user/changing-defaults.itely:2628 (comment) +#. Documentation/notation/changing-defaults.itely:2970 (comment) msgid "Try to remove all key signatures" msgstr "Intentar quitar todas las armaduras" -#. Documentation/user/changing-defaults.itely:3048 (comment) +#. Documentation/notation/changing-defaults.itely:3393 (comment) msgid "move horizontally left" msgstr "desplazar a la izquierda" -#. Documentation/user/changing-defaults.itely:3050 (comment) +#. Documentation/notation/changing-defaults.itely:3395 (comment) msgid "move vertically up" msgstr "desplazar hacia arriba" -#. Documentation/user/changing-defaults.itely:3051 (comment) +#. Documentation/notation/changing-defaults.itely:3396 (comment) msgid "third finger" msgstr "dedo tercero" -#. Documentation/user/changing-defaults.itely:3100 (comment) -#. Documentation/user/changing-defaults.itely:3132 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:64 (comment) -msgid "the RehearsalMark will be centered above the Clef" -msgstr "la RehearsalMark se centra sobre la clave" +#. Documentation/notation/changing-defaults.itely:3444 (comment) +#. Documentation/notation/changing-defaults.itely:3483 (comment) +msgid "The rehearsal mark will be centered above the Clef" +msgstr "La marca de ensayo se centrará sobre la clave" -#. Documentation/user/changing-defaults.itely:3106 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:71 (comment) -msgid "the RehearsalMark will be centered above the TimeSignature" -msgstr "la RehearsalMark se centra sobre el compás" +#. Documentation/notation/changing-defaults.itely:3450 (comment) +msgid "The rehearsal mark will be centered above the Time Signature" +msgstr "La marca de ensayo se centrará sobre la indicación de compás" -#. Documentation/user/changing-defaults.itely:3126 (comment) -msgid "the RehearsalMark will be centered above the Key Signature" -msgstr "la RehearsalMark se centra sobre la armadura" +#. Documentation/notation/changing-defaults.itely:3457 (comment) +msgid "The rehearsal mark will be centered above the Breath Mark" +msgstr "La marca de ensayo se centrará sobre la respiración" -#. Documentation/user/changing-defaults.itely:3146 (comment) -msgid "The RehearsalMark will be centered above the KeySignature" -msgstr "la RehearsalMark se centra sobre la armadura" +#. Documentation/notation/changing-defaults.itely:3477 (comment) +msgid "The rehearsal mark will be centered above the Key Signature" +msgstr "La marca de ensayo se centrará sobre la armadura de tonalidad" -#. Documentation/user/changing-defaults.itely:3153 (comment) -#. Documentation/user/changing-defaults.itely:3169 (comment) -#. Documentation/user/changing-defaults.itely:3176 (comment) -msgid "The RehearsalMark will be aligned with the left edge of the KeySignature" -msgstr "la RehearsalMark se alinea por la izquierda con la armadura" +#. Documentation/notation/changing-defaults.itely:3490 (comment) +msgid "The rehearsal mark will be centered above the Bar Line" +msgstr "La marca de ensayo se centrará sobre la línea divisoria" -#. Documentation/user/changing-defaults.itely:3158 (comment) -msgid "The RehearsalMark will be aligned with the right edge of the KeySignature" -msgstr "la RehearsalMark se alinea por la derecha con la armadura" +#. Documentation/notation/changing-defaults.itely:3505 (comment) +msgid "The RehearsalMark will be centered above the Key Signature" +msgstr "La marca de ensayo se centrará sobre la armadura de tonalidad" + +#. Documentation/notation/changing-defaults.itely:3512 (comment) +#. Documentation/notation/changing-defaults.itely:3528 (comment) +#. Documentation/notation/changing-defaults.itely:3535 (comment) +msgid "The RehearsalMark will be aligned with the left edge of the Key Signature" +msgstr "La marca de ensayo se alineará con el borde izquierdo de la armadura de tonalidad" -#. Documentation/user/changing-defaults.itely:3170 (comment) +#. Documentation/notation/changing-defaults.itely:3517 (comment) +msgid "The RehearsalMark will be aligned with the right edge of the Key Signature" +msgstr "La marca de ensayo se alineará con el borde derecho de la armadura de tonalidad" + +#. Documentation/notation/changing-defaults.itely:3529 (comment) msgid "and then shifted right by 3.5 staff-spaces" msgstr "y se desplaza 3.5 espacios a la derecha" -#. Documentation/user/changing-defaults.itely:3177 (comment) +#. Documentation/notation/changing-defaults.itely:3536 (comment) msgid "and then shifted left by 2 staff-spaces" msgstr "y se desplaza 2 espacios a la izquierda" -#. Documentation/user/changing-defaults.itely:3225 (variable) +#. Documentation/notation/changing-defaults.itely:3584 (variable) msgid "XinO" msgstr "X_O" -#. @node in Documentation/user/changing-defaults.itely -#. @chapter in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @chapter in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @chapter in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @chapter in Documentation/de/user/changing-defaults.itely +#. Documentation/notation/changing-defaults.itely:3826 (variable) +msgid "custosNote" +msgstr "notaCustos" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely msgid "Changing defaults" msgstr "Cambiar los valores por omisión" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Interpretation contexts" msgstr "Contextos de interpretación" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Score - the master of all contexts" msgstr "Score: el contexto maestro" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Top-level contexts - staff containers" msgstr "Contextos del nivel superior: contenedores de pentagramas" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Intermediate-level contexts - staves" msgstr "Contextos de nivel intermedio: pentagramas" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Bottom-level contexts - voices" msgstr "Contextos del nivel más bajo: voces" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Keeping contexts alive" msgstr "Mantener vivos los contextos" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying context plug-ins" msgstr "Modificar los complementos (plug-ins) de contexto" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Changing context default settings" msgstr "Cambiar los valores por omisión de los contextos" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Defining new contexts" msgstr "Definir contextos nuevos" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Aligning contexts" msgstr "Alinear los contextos" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Explaining the Internals Reference" msgstr "Explicación del Manual de referencia de funcionamiento interno" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Navigating the program reference" msgstr "Navegar por la referencia del programa" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Layout interfaces" msgstr "Interfaces de la presentación" # grob??? FVD -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Determining the grob property" msgstr "Determinar la propiedad del grob" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Naming conventions" msgstr "Convenciones de nombres" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Modifying properties" msgstr "Modificar las propiedades" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Overview of modifying properties" msgstr "Panorámica de la modificación de las propiedades" -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely msgid "The set command" msgstr "La instrucción set" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\set} command" -msgstr "La instrucción @code{\\set}" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "La instrucción @code{@bs{}set}" + +#. @node in Documentation/notation/changing-defaults.itely msgid "The override command" msgstr "La instrucción override" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\override} command" -msgstr "La instrucción @code{\\override}" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "La instrucción @code{\\\\override}" + +#. @node in Documentation/notation/changing-defaults.itely msgid "The tweak command" msgstr "La instrucción tweak" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\tweak} command" -msgstr "La instrucción @code{\\tweak}" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "La instrucción @code{\\\\tweak}" + +#. @node in Documentation/notation/changing-defaults.itely msgid "set versus override" msgstr "set frente a override" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "@code{\\set} vs. @code{\\override}" -msgstr "@code{\\set} frente a @code{\\override}" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "@code{\\\\set} frente a @code{\\\\override}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying alists" +msgstr "Modificación de listas-A" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Useful concepts and properties" msgstr "Conceptos y propiedades útiles" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Input modes" msgstr "Modos de entrada" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Direction and placement" msgstr "Dirección y posición" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Context layout order" +msgstr "Orden de disposición de los contextos" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Distances and measurements" msgstr "Distancias y medidas" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Staff symbol properties" msgstr "Propiedades del símbolo del pentagrama" # fuzzy. FVD -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Spanners" msgstr "Objetos de extensión" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{spanner-interface}" msgstr "Uso del @code{spanner-interface}" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{line-spanner-interface}" msgstr "Uso del @code{line-spanner-interface}" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Visibility of objects" msgstr "Visibilidad de los objetos" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Removing the stencil" msgstr "Eliminar el sello" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Making objects transparent" msgstr "Hacer transparentes los objetos" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Painting objects white" msgstr "Pintar los objetos de blanco" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using break-visibility" msgstr "Uso de break-visibility (visibilidad en el salto)" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Special considerations" msgstr "Consideraciones especiales" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Line styles" msgstr "Estilos de línea" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Rotating objects" msgstr "Rotación de objetos" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Rotating layout objects" msgstr "Rotación de objetos de presentación" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Rotating markup" msgstr "Rotación de elementos de marcado" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Advanced tweaks" msgstr "Trucos avanzados" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Aligning objects" msgstr "Alineación de objetos" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Setting X-offset and Y-offset directly" +msgstr "Establecer X-offset e Y-offset directamente" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Setting @code{X-offset} and @code{Y-offset} directly" msgstr "Establecer directamente @code{X-offset} y @code{Y-offset}" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the side-position-interface" +msgstr "Uso del side-position-interface" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{side-position-interface}" msgstr "Uso del @code{side-position-interface}" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the self-alignment-interface" +msgstr "Uso del self-alignment-interface" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{self-alignment-interface}" msgstr "Uso del @code{self-alignment-interface}" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{aligned-on-parent} procedures" msgstr "Uso de los procedimientos @code{aligned-on-parent}" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{centered-on-parent} procedures" msgstr "Uso de los procedimientos @code{centered-on-parent}" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the break-alignable-interface" +msgstr "Uso del break-alignable-interface" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{break-alignable-interface}" msgstr "Uso del @code{break-alignable-interface}" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Vertical grouping of grobs" msgstr "Agrupación vertical de objetos gráficos" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying stencils" msgstr "Modificación de los sellos" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying shapes" msgstr "Modificación de las formas" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Modifying ties and slurs" msgstr "Modificación de ligaduras de unión y de expresión" -#. Documentation/user/programming-interface.itely:118 (variable) -msgid "custosNote" -msgstr "notaCustos" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Using music functions" +msgstr "Uso de funciones musicales" -#. Documentation/user/programming-interface.itely:178 (variable) -msgid "manualBeam" -msgstr "barraManual" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "Sintaxis de las funciones de sustitución" -#. Documentation/user/programming-interface.itely:198 (variable) -msgid "AltOn" -msgstr "varSi" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "Ejemplos de funciones de sustitución" -#. Documentation/user/programming-interface.itely:203 (variable) -msgid "AltOff" -msgstr "varNo" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +msgid "Notation manual tables" +msgstr "Tablas del manual sobre notación" -#. Documentation/user/programming-interface.itely:216 (variable) -msgid "withAlt" -msgstr "variante" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" +msgstr "Carta de nombres de acordes" -#. Documentation/user/programming-interface.itely:350 (variable) -msgid "traLaLa" -msgstr "traLaLa" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" +msgstr "Modificadores de acorde más usuales" -#. Documentation/user/programming-interface.itely:352 (comment) -msgid "dummy action to deal with parser lookahead" -msgstr "acción vacía para la predicción del analizador sintáctico" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined string tunings" +msgstr "Afinaciones de cuerdas predeterminadas" -#. @node in Documentation/user/programming-interface.itely -#. @chapter in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @chapter in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @chapter in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @chapter in Documentation/de/user/programming-interface.itely -msgid "Interfaces for programmers" -msgstr "Interfaces para programadores" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined fretboard diagrams" +msgstr "Diagramas predefinidos de trastes" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Music functions" -msgstr "Funciones musicales" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" +msgstr "Instrumentos MIDI" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of music functions" -msgstr "Panorámica de las funciones musicales" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Simple substitution functions" -msgstr "Funciones de sustitución sencillas" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" +msgstr "Lista de colores" -# fuzzy. FVD -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Paired substitution functions" -msgstr "Funciones de sustitutión en parejas" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Mathematics in functions" -msgstr "Matemáticas dentro de las funciones" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" +msgstr "Colores normales" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Void functions" -msgstr "Funciones vacías" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" +msgstr "Nombres de los colores de X" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Functions without arguments" -msgstr "Funciones sin argumentos" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" +msgstr "Nombres de los colores sin sufijo numérico:" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of available music functions" -msgstr "Pranorámica de las funciones musicales disponibles" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Programmer interfaces" -msgstr "Interfaces para el programador" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Input variables and Scheme" -msgstr "Variables de entrada y Scheme" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" +msgstr "Nombres de los colores con sufijo numérico" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Internal music representation" -msgstr "Representación interna de la música" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" +msgstr "Escala de grises" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Building complicated functions" -msgstr "Construcción de funciones complejas" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" +msgstr "La tipografía Feta" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Displaying music expressions" -msgstr "Presentación de expresiones musicales" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "Glifos de clave" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Music properties" -msgstr "Propiedades de la música" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Time Signature glyphs" +msgstr "Glifos de compases" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Doubling a note with slurs (example)" -msgstr "Doblar una nota con ligaduras (ejemplo)" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "Glifos de números" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Adding articulation to notes (example)" -msgstr "Añadir articulación a las notas (ejemplo)" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accidental glyphs" +msgstr "Glifos de alteraciones accidentales" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Markup programmer interface" -msgstr "Interfaz de marcado para el programador" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Markup construction in Scheme" -msgstr "Construcción del marcado en Scheme" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "Glifos predeterminados para la cabeza de las notas" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "How markups work internally" -msgstr "Cómo funciona internamente el marcado" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "Glifos de cabezas de figura especiales" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup command definition" -msgstr "Definición de una instrucción de marcado nueva" +# Fuzzy.FVD +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "Glifos de cabezas de nota con formas" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Rest glyphs" +msgstr "Glifos de silencios" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "Glifos de corchetes" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "Glifos de puntillo" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dynamic glyphs" +msgstr "Glifos de matices dinámicos" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "Glifos de inscripciones" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "Glifos de puntas de flecha" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "Glifos de extremos de corchetes" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "Glifos de pedal" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "Glidos de acordeón" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "Glifos de notación estilo Vaticana" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "Glifos de notación estilo Medicaea" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "Glifos de notación estilo Hufnagel" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "Glifos de notación estilo Mensural" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "Glifos de notación estilo Neomensural" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "Glifos de notación estilo Petrucci" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "Glifos de notación estilo Solesmes" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Note head styles" +msgstr "Estilos de cabezas de nota" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup list command definition" -msgstr "Definición de nuevas instrucciones de lista de marcado" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup commands" +msgstr "Instrucciones de marcado de texto" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Contexts for programmers" -msgstr "Contextos para programadores" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" +msgstr "Instrucciones de listas de marcado de texto" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Context evaluation" -msgstr "Evaluación de contextos" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of articulations" +msgstr "Lista de articulaciones" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Running a function on all layout objects" -msgstr "Ejecutar una función sobre todos los objetos de la presentación" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Articulation scripts" +msgstr "Inscripciones de articulación" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ornament scripts" +msgstr "Inscripciones de adornos" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "Inscripciones de calderón" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "Inscripciones específicas de instrumentos" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "Inscripciones de signos de repetición" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "Inscripciones de música antigua" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Percussion notes" +msgstr "Notas de percusión" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Scheme procedures as properties" -msgstr "Procedimientos de Scheme como propiedades" - -#. @node in Documentation/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of \\tweak" -msgstr "Usar código de Scheme en lugar de \\tweak" - -#. @section in Documentation/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of @code{\\tweak}" -msgstr "Usar código de Scheme en lugar de @code{\\tweak}" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "Glosario técnico" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "lista-A" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "callback" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "closure" +msgstr "cerradura" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "glifo" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "grob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "inmutable" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "interface" +msgstr "interfaz" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "analizador léxico" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "mutable" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "output-def" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "analizador sintáctico" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "variable del analizador sintáctico" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "prob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "cerradura simple" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "smob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "All context properties" +msgstr "Todas las propiedades de contexto" -# ??FVD -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Difficult tweaks" -msgstr "Trucos difíciles" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Layout properties" +msgstr "Propiedades de disposición" -#. @node in Documentation/user/literature.itely -#. @appendix in Documentation/user/literature.itely -#. @node in Documentation/fr/user/literature.itely -#. @appendix in Documentation/fr/user/literature.itely -#. @node in Documentation/es/user/literature.itely -#. @appendix in Documentation/es/user/literature.itely -#. @node in Documentation/de/user/literature.itely -#. @appendix in Documentation/de/user/literature.itely -msgid "Literature list" -msgstr "Lista bibliográfica" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "Funciones musicales disponibles" -#. @node in Documentation/user/notation-appendices.itely -#. @appendix in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendix in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendix in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendix in Documentation/de/user/notation-appendices.itely -msgid "Notation manual tables" -msgstr "Tablas del manual sobre notación" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined type predicates" +msgstr "Predicados de tipo predefinidos" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Chord name chart" -msgstr "Carta de nombres de acordes" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Scheme functions" +msgstr "Funciones de Scheme" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Common chord modifiers" -msgstr "Modificadores de acorde más usuales" +# Hoja para copiar en un examen. Chuleta?? FVD +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +msgid "Cheat sheet" +msgstr "Hoja de referencia rápida" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Predefined fretboard diagrams" -msgstr "Diagramas predefinidos de trastes" +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "\\\\TEXT\\\\" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "MIDI instruments" -msgstr "Instrumentos MIDI" +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "Ejecutar lilypond" + +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "Ejecutar @command{lilypond}" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "Utilización normal" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "Utilización desde la línea de órdenes" + +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "Invocar a LilyPond" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "Invocar @command{lilypond}" + +#. @unnumberedsubsubsec in Documentation/usage/running.itely +msgid "Standard shell commands" +msgstr "Instrucciones de shell estándar" + +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "Opciones de la línea de órdenes para lilypond" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "Opciones de la línea de órdenes para @command{lilypond}" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "Variables de entorno" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "LilyPond in chroot jail" +msgstr "LilyPond dentro de una jaula chroot" + +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" +msgstr "Guión de ejemplo para Ubuntu 8.04 de 32 bits" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "Mensajes de error" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "Errores más usuales" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "La música se sale de la página" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "Aparece un pentagrama de más" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "Error aparente en ../ly/init.ly" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "Error aparente en @code{../ly/init.ly}" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "Mensaje de error Unbound variable %" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "Mensaje de error FT_Get_Glyph_Name" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" +msgstr "Advertencia las staff affinities deben solamente disminuir" + +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "Actualizar ficheros con convert-ly" + +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "Actualizar ficheros con @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "¿Por qué cambia la sintaxis?" + +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "Invocar convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "Invocar @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "Opciones de la línea de órdenes para convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "Opciones de la línea de órdenes para @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "Problemas al ejecutar convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "Problemas al ejecutar @code{convert-ly}" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "Conversiones manuales" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" +msgstr "lilypond-book" + +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "Ejecutar @command{lilypond-book}" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "Un ejemplo de documento musicológico" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "Entrada" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "Procesado" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "Salida" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" +msgstr "Integrar música y texto" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "LaTeX" + +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" +msgstr "@LaTeX{}" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "Texinfo" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "HTML" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "DocBook" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "Convenciones usuales" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "Incluir un archivo de LilyPond" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "Incluir código de LilyPond" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "Procesar el documento de DocBook" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" +msgstr "Opciones de fragmentos de música" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "Invocar lilypond-book" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "Invocar @command{lilypond-book}" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "Instrucciones específicas de formato" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "Opciones de la línea de órdenes" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "Extensiones de nombres de archivo" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "Plantillas de lilypond-book" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "html" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "xelatex" + +# this is the same translation that babel LaTex package uses . FVD +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Sharing the table of contents" +msgstr "Compartir el índice general" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" +msgstr "Exportar el índice general desde LilyPond" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" +msgstr "Importar el índice general dentro de LaTeX" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "Métodos alternativos para mezclar texto y música" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "Otros métodos para mezclar texto y música" + +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "Programas externos" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "Apuntar y pulsar" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "Apoyo respecto de los editores de texto" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "Modo de Emacs" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "Modo de Vim" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "Otros editores" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "Conversión desde otros formatos" + +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "Invocar midi2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "Invocar @command{midi2ly}" + +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "Invocar musicxml2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "Invocar @command{musicxml2ly}" + +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "Invocar abc2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "Invocar @code{abc2ly}" + +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "Invocar etf2ly" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "Invocar @command{etf2ly}" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "Other formats" +msgstr "Otros formatos" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "Salida de LilyPond dentro de otros programas" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "Muchas citas de una partitura extensa" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "Insertar la salida de LilyPond dentro de OpenOffice.org" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "Insertar la salida de LilyPond dentro de otros programas" + +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "Archivos de inclusión independientes" + +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "Archivos de @code{include} independientes" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "MIDI articulation" +msgstr "Articulación MIDI" + +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +msgid "Suggestions for writing files" +msgstr "Sugerencias para escribir archivos" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "Sugerencias de tipo general" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "Tipografiar música existente" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "Proyectos grandes" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "Solución de problemas" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "Make y los Makefiles" + +#. @node in Documentation/cs/learning.tely +#. @appendix in Documentation/cs/learning.tely +msgid "Rejstřík k LilyPondu" +msgstr "" + +#. @node in Documentation/cs/macros.itexi +msgid "Začátek" +msgstr "" + +#. @top in Documentation/cs/macros.itexi +msgid "LilyPond -- \\\\TITLE\\\\" +msgstr "" + +#. @subsubheading in Documentation/cs/macros.itexi +msgid "Předem stanovené příkazy" +msgstr "" + +#. @subsubheading in Documentation/cs/macros.itexi +msgid "Vybrané úryvky" +msgstr "" + +#. @subsubheading in Documentation/cs/macros.itexi +msgid "Podívejte se také na" +msgstr "" + +#. @subsubheading in Documentation/cs/macros.itexi +msgid "Známé potíže a upozornění" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:250 (comment) +msgid "Počáteční bod napsat na jednočárkovaném C" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:284 (comment) +msgid "dvoučárkované C" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:301 (comment) +msgid "c je 1 řádek nahoru, tedy c nad b" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:302 (comment) +msgid "d je 2 řádky nahoru, nebo 5 dolů, tedy d nad b" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:303 (comment) +msgid "e je 3 nahoru, nebo 4 dolů, tedy e pod b" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:304 (comment) +msgid "a je 6 nahoru, nebo 1 dolů, tedy a pod b" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:305 (comment) +msgid "g je 5 nahoru, nebo 2 dolů, tedy g pod b" +msgstr "" + +#. Documentation/cs/learning/tutorial.itely:306 (comment) +msgid "f je 4 nahoru, nebo 3 dolů, tedy f pod b" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @chapter in Documentation/cs/learning/tutorial.itely +msgid "Cvičení" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Přeložení zdrojového souboru" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Zadání not" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "Pohled na výsledky" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Příkazový řádek" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @section in Documentation/cs/learning/tutorial.itely +msgid "Jak se píší vstupní soubory" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Jednoduchý notový zápis" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "Výšky tónů" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "Délky tónů (rytmy)" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "Pomlky" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "Taktové označení" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "Vyznačení tempa" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "Notový klíč" +msgstr "" + +#. @subheading in Documentation/cs/learning/tutorial.itely +msgid "VÅ¡e dohromady" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Práce na vstupních souborech" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @section in Documentation/cs/learning/tutorial.itely +msgid "Vypořádání se s chybami" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Obecné rady k řeÅ¡ení chyb" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Některé časté chyby" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @section in Documentation/cs/learning/tutorial.itely +msgid "Jak se mají příručky číst" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "VypuÅ¡těný materiál" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Klepnutelné příklady" +msgstr "" + +#. @node in Documentation/cs/learning/tutorial.itely +#. @subsection in Documentation/cs/learning/tutorial.itely +msgid "Přehled o příručkách" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @chapter in Documentation/cs/learning/common-notation.itely +msgid "Běžný notový zápis" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @section in Documentation/cs/learning/common-notation.itely +msgid "Notový zápis v jedné notové osnově" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "PřezkouÅ¡ení taktů" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Předznamenání a označení tóniny (předznamenání)" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Předznamenání" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Označení tóniny (předznamenání)" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Varování: označení tóniny a výšky tónů" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Ligatury a legatové obloučky" +msgstr "" + +# de neuma? FVD +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Ligatury" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Legatové obloučky" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Frázovací obloučky" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Varování: ligatury nejsou legatovými obloučky" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Artikulační znaménka a hlasitost" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Artikulační znaménka" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Prstoklad" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Dynamika" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Přidání textu" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Automatické a ruční trámce" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Dodatečné rytmické příkazy" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Předtaktí" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Jiná rytmická rozdělení" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Ozdoby" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @section in Documentation/cs/learning/common-notation.itely +msgid "Více not najednou" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Vysvětlení hudebních výrazů" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Obdoba: matematické výrazy" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Souběžné hudební výrazy: více notových osnov" +msgstr "" + +#. @subheading in Documentation/cs/learning/common-notation.itely +msgid "Souběžné hudební výrazy: jedna notová osnova" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Více notových osnov" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Seskupení notových osnov" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Spojení not do akordů" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Vícehlasost v jedné notové osnově" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @section in Documentation/cs/learning/common-notation.itely +msgid "Písničky" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Zápis jednoduchých písní" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Vyrovnání textu s melodií" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Text pro více osnov" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @section in Documentation/cs/learning/common-notation.itely +msgid "Poslední úpravy" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Pořádání děl pomocí proměnných" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Přidání názvu" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Absolutní označení not" +msgstr "" + +#. @node in Documentation/cs/learning/common-notation.itely +#. @subsection in Documentation/cs/learning/common-notation.itely +msgid "Po cvičení" +msgstr "" + +#. Documentation/cs/learning/fundamental.itely:3178 (comment) +msgid "set time signature and key" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @chapter in Documentation/cs/learning/fundamental.itely +msgid "Základní pojmy" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @section in Documentation/cs/learning/fundamental.itely +msgid "Jak pracují vstupní soubory LilyPondu" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Uvedení do stavby souboru v LilyPondu" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Notový zápis je jedním (jediným) složeným hudebním výrazem" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Naskládání hudebních výrazů do sebe" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "O ne-naskládatelnosti závorek a ligatur" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @section in Documentation/cs/learning/fundamental.itely +msgid "Hlasy obsahují noty" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Slyším hlasy" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Přímo vyjádřené začátky hlasů" +msgstr "" + +#. @subsubheading in Documentation/cs/learning/fundamental.itely +msgid "Notenkolumnen" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Hlasy a zpěvy" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @section in Documentation/cs/learning/fundamental.itely +msgid "Prostředí a rytci" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Vysvětlení prostředí" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Vytvoření prostředí" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Vysvětlení rytců" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Změna vlastností prostředí" +msgstr "" + +#. @subsubheading in Documentation/cs/learning/fundamental.itely +msgid "Kontexteigenschaften mit @code{\\\\with} setzen" +msgstr "" + +#. @subsubheading in Documentation/cs/learning/fundamental.itely +msgid "Kontexteigenschaften mit @code{\\\\context} setzen" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Přidání a odstranění rytců" +msgstr "" + +#. @subsubheading in Documentation/cs/learning/fundamental.itely +msgid "Einen einzelnen Kontext verändern" +msgstr "" + +#. @subsubheading in Documentation/cs/learning/fundamental.itely +msgid "Alle Kontexte des gleichen Typs verändern" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @section in Documentation/cs/learning/fundamental.itely +msgid "Rozšíření příkladů" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Soprán a violoncello" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Čtyřhlasý notový zápis SATB" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Vytvoření notového zápisu od základu" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Úspora psaní na stroji pomocí proměnných a funkcí" +msgstr "" + +#. @node in Documentation/cs/learning/fundamental.itely +#. @subsection in Documentation/cs/learning/fundamental.itely +msgid "Notové zápisy a hlasy" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @chapter in Documentation/cs/learning/tweaks.itely +msgid "Ladění výstupu" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @section in Documentation/cs/learning/tweaks.itely +msgid "Základy pro ladění" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Úvod do ladění" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Předměty a rozhraní" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Pravidla pro pojmenovávání předmětů a vlastností" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Postupy při ladění" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @section in Documentation/cs/learning/tweaks.itely +msgid "Vnitřní referenční příručka" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Vlastnosti předmětů v rozvržení" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Den Kontext finden" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Nur einmal mit \\\\override verändern" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Rückgängig machen" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Vlastnosti nacházející se v rozhraních" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Den Kontext im Liedtextmodus bestimmen" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Typy vlastností" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @section in Documentation/cs/learning/tweaks.itely +msgid "Vzhled předmětů" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Viditelnost a barva předmětů" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "stencil (Matrize)" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "break-visibility (unsichtbar machen)" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "transparent (durchsichtig)" +msgstr "" + +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "color (Farbe)" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Velikost předmětů" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Délka a tlouÅ¡Å¥ka předmětů" +msgstr "" + +#. @node in Documentation/cs/learning/tweaks.itely +#. @section in Documentation/cs/learning/tweaks.itely +msgid "Umístění předmětů" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of colors" -msgstr "Lista de colores" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Automatické chování" +msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Normal colors" -msgstr "Colores normales" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Předměty uvnitř notové osnovy" +msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "X color names" -msgstr "Nombres de los colores de X" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Fingersatz" +msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color Names without a numerical suffix:" -msgstr "Nombres de los colores sin sufijo numérico:" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Předměty vně notové osnovy" +msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color names with a numerical suffix" -msgstr "Nombres de los colores con sufijo numérico" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "\\\\textLengthOn (Textlänge berücksichtigen)" +msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Grey Scale" -msgstr "Escala de grises" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Dynamik" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "The Feta font" -msgstr "La tipografía Feta" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Verändern der Größe von grobs" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Note head styles" -msgstr "Estilos de cabezas de nota" +#. @node in Documentation/cs/learning/tweaks.itely +#. @section in Documentation/cs/learning/tweaks.itely +msgid "Střety předmětů" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of articulations" -msgstr "Lista de articulaciones" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Přesouvání předmětů" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Percussion notes" -msgstr "Notas de percusión" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Oprava překrývajících se not" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "All context properties" -msgstr "Todas las propiedades de contexto" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "padding (Fülleigenschafte)" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Layout properties" -msgstr "Propiedades de disposición" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "right-padding (Verschieben nach links)" +msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Identifiers" -msgstr "Identificadores" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Scheme functions" -msgstr "Funciones de Scheme" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "staff-padding (Systemfüllungseigenschaft)" +msgstr "" -# Hoja para copiar en un examen. Chuleta?? FVD -#. @node in Documentation/user/cheatsheet.itely -#. @appendix in Documentation/user/cheatsheet.itely -#. @node in Documentation/fr/user/cheatsheet.itely -#. @appendix in Documentation/fr/user/cheatsheet.itely -#. @node in Documentation/es/user/cheatsheet.itely -#. @appendix in Documentation/es/user/cheatsheet.itely -#. @node in Documentation/de/user/cheatsheet.itely -#. @appendix in Documentation/de/user/cheatsheet.itely -msgid "Cheat sheet" -msgstr "Hoja de referencia rápida" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "self-alignment-X (Selbstausrichtung-X-Eigenschaft)" +msgstr "" -#. @top in Documentation/fr/user/lilypond-learning.tely -msgid "GNU LilyPond --- Manuel d'initiation" -msgstr "GNU LilyPond --- Manuel d'initiation" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "staff-position (Position innerhalb des Systems)" +msgstr "" -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Commonly tweaked properties" -msgstr "Commonly tweaked properties" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "extra-offset (Genaues Positionieren)" +msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Hauteurs" -msgstr "Hauteurs" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Ausrichtungseigenschaft" +msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Durées et rythme" -msgstr "Durées et rythme" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "force-hshift (vertikale Verschiebunseigenschaft)" +msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Silences" -msgstr "Silences" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Příklady ze života" +msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Métrique" -msgstr "Métrique" +#. @node in Documentation/cs/learning/tweaks.itely +#. @section in Documentation/cs/learning/tweaks.itely +msgid "Další ladění" +msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Tout ensemble" -msgstr "Tout ensemble" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Jiné využití ladění" +msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Exemples cliquables" -msgstr "Exemples cliquables" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Noten zwischen unterschiedlichen Stimmen überbinden" +msgstr "" -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -msgid "Outside staff objects" -msgstr "Objetos fuera del pentagrama" +#. @subheading in Documentation/cs/learning/tweaks.itely +msgid "Eine Fermate in MIDI simulieren" +msgstr "" -#. @top in Documentation/fr/user/lilypond-program.tely -msgid "GNU LilyPond --- Utilisation des programmes" -msgstr "GNU LilyPond --- Utilisation des programmes" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Použití proměnných pro ladění" +msgstr "" -#. @section in Documentation/fr/user/running.itely -msgid "Updating with @command{convert-ly}" -msgstr "Actualizar ficheros con @command{convert-ly}" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Celkové formátování" +msgstr "" -#. @top in Documentation/fr/user/lilypond.tely -msgid "GNU LilyPond --- Manuel de notation" -msgstr "GNU LilyPond --- Manuel de notation" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat types" -msgstr "Tipos de repetición" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat syntax" -msgstr "Sintaxis de las repeticiones" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Manual repeat commands" -msgstr "Instrucciones de repetición manual" - -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -msgid "Other repeats" -msgstr "Otras repeticiones" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Tremolo subdivisions" -msgstr "Subdivisiones del trémolo" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Measure repeats" -msgstr "Repeticiones de compás" - -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -msgid "Basic polyphony" -msgstr "Polifonía básica" - -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -msgid "Blank music sheet" -msgstr "Papel de música en blanco" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Více informací" +msgstr "" -# fuzzy. FVD -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Text and line spanners" -msgstr "Extensiones de texto y de línea" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Vyhnutí se ladění s pomalejším překladem" +msgstr "" -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Nested scores" -msgstr "Partituras anidadas" +#. @node in Documentation/cs/learning/tweaks.itely +#. @subsection in Documentation/cs/learning/tweaks.itely +msgid "Pokročilá ladění se Scheme" +msgstr "" -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Page wrapping text" -msgstr "Textos que saltan de página" +#. @node in Documentation/cs/learning/templates.itely +#. @appendix in Documentation/cs/learning/templates.itely +msgid "Předlohy" +msgstr "" -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Mélismes dans certaines strophes seulement" -msgstr "Mélismes dans certaines strophes seulement" +#. @node in Documentation/cs/learning/templates.itely +#. @appendixsec in Documentation/cs/learning/templates.itely +msgid "Jednotlivá notová osnova" +msgstr "" -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Basculer vers une mélodie alternative" -msgstr "Basculer vers une mélodie alternative" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Pouze noty" +msgstr "" -# ?? FVD -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Introduction to ancient notation" -msgstr "Introducción a la notación antigua" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient notation supported" -msgstr "Notación antigua contemplada" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Alternative note signs" -msgstr "Símbolos de nota alternativos" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient note heads" -msgstr "Cabezas de nota antiguas" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient accidentals" -msgstr "Alteraciones accidentales antiguos" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient rests" -msgstr "Silencios antiguos" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient clefs" -msgstr "Claves antiguas" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient flags" -msgstr "Corchetes antiguos" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient time signatures" -msgstr "Indicaciones antiguas de compás" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Additional note signs" -msgstr "Símbolos de nota adicionales" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient articulations" -msgstr "Articulaciones antiguas" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Gregorian square neumes ligatures" -msgstr "Ligaduras de neumas cuadrados gregorianos" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Transcribing ancient music" -msgstr "Transcripción de música antigua" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Annotational accidentals" -msgstr "Alteraciones de anotación" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Baroque rhythmic notation" -msgstr "Notación rítmica barroca" - -#. @section in Documentation/fr/user/spacing.itely -msgid "Horizontal Spacing" -msgstr "Espaciado horizontal" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Noty a text" +msgstr "" -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Layout tunings within contexts" -msgstr "Ajuste fino de la presentación dentro de los contextos" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Noty a názvy akordů" +msgstr "" -# ?? FVD -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Constructing a tweak" -msgstr "Construir un truco" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Noty, text a názvy akordů" +msgstr "" -#. @node in Documentation/fr/user/programming-interface.itely -msgid "Using Scheme code instead of tweak" -msgstr "Using Scheme code instead of tweak" +#. @node in Documentation/cs/learning/templates.itely +#. @appendixsec in Documentation/cs/learning/templates.itely +msgid "Klavírní předlohy" +msgstr "" -#. @top in Documentation/es/user/lilypond-learning.tely -msgid "GNU LilyPond: Manual de aprendizaje" -msgstr "GNU LilyPond: Manual de aprendizaje" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Klavírní sólo" +msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Instrucciones predefinidas" -msgstr "Instrucciones predefinidas" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Klavír a hlas zpěvu" +msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Fragmentos de código seleccionados" -msgstr "Fragmentos de código seleccionados" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Klavír s vystředěným textem" +msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Propiedades trucadas frecuentemente" -msgstr "Propiedades trucadas frecuentemente" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Klavír s vystředěným označením hlasitosti" +msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Véase también" -msgstr "Véase también" +#. @node in Documentation/cs/learning/templates.itely +#. @appendixsec in Documentation/cs/learning/templates.itely +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Smyčcový kvartet" +msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Advertencias y problemas conocidos" -msgstr "Advertencias y problemas conocidos" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Hlasy smyčcového kvartetu" +msgstr "" -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -msgid "Automatic behaviour" -msgstr "Comportamiento automático" +#. @node in Documentation/cs/learning/templates.itely +#. @appendixsec in Documentation/cs/learning/templates.itely +msgid "Vokální soubor" +msgstr "" -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Updating old files" -msgstr "Actualizar archivos antiguos" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Notový zápis SATB" +msgstr "" -#. @top in Documentation/es/user/lilypond-program.tely -msgid "GNU LilyPond: Manual de utilización del programa" -msgstr "GNU LilyPond: Manual de utilización del programa" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Notový zápis SATB a automatický klavírní výtah" +msgstr "" -#. @top in Documentation/es/user/lilypond.tely -msgid "GNU LilyPond: Manual de referencia de la notación" -msgstr "GNU LilyPond: Manual de referencia de la notación" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "SATB s přísluÅ¡nými prostředími" +msgstr "" -#. @chapheading in Documentation/es/user/lilypond.tely -msgid "El tipografiador de música" -msgstr "El tipografiador de música" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Sólový zpěv a dvojhlasný refrén" +msgstr "" -#. @top in Documentation/de/user/lilypond-learning.tely -msgid "GNU LilyPond -- Handbuch zum Lernen" -msgstr "GNU LilyPond -- Handbuch zum Lernen" +#. @node in Documentation/cs/learning/templates.itely +#. @appendixsec in Documentation/cs/learning/templates.itely +msgid "Orchestrální předloha" +msgstr "" -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Lilypond-book templates" -msgstr "Lilypond-book templates" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Orchestr, sbor a klavír" +msgstr "" -#. @top in Documentation/de/user/lilypond-program.tely -msgid "GNU LilyPond -- Programmbenutzung" -msgstr "GNU LilyPond -- Programmbenutzung" +#. @node in Documentation/cs/learning/templates.itely +#. @appendixsec in Documentation/cs/learning/templates.itely +msgid "Předlohy pro starý notový zápis" +msgstr "" -#. @chapheading in Documentation/de/user/lilypond.tely -msgid "Das Notensatzprogramm" -msgstr "Das Notensatzprogramm" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Přepis menzurální hudby" +msgstr "" -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Ignorieren von Melismen" -msgstr "Ignorieren von Melismen" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Předlohy pro přepis gregorianik" +msgstr "" -#. @top in Documentation/ja/user/lilypond-learning.tely -msgid "GNU LilyPond --- 学習マニュアル" -msgstr "GNU LilyPond --- 学習マニュアル" +#. @node in Documentation/cs/learning/templates.itely +#. @appendixsec in Documentation/cs/learning/templates.itely +msgid "Jiné předlohy" +msgstr "" -#. @top in Documentation/ja/user/lilypond-program.tely -msgid "GNU LilyPond --- アプリケーション使用方法" -msgstr "GNU LilyPond --- アプリケーション使用方法" +#. @appendixsubsec in Documentation/cs/learning/templates.itely +msgid "Džezová skupina" +msgstr "" -#. input/lsr/accordion-discant-symbols.ly:36 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) msgid "discant" msgstr "discanto" -#. input/lsr/accordion-discant-symbols.ly:39 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) msgid "dot" msgstr "punto" -#. input/lsr/accordion-discant-symbols.ly:45 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) msgid "16 voets register" msgstr "registro de 16 pies" -#. input/lsr/accordion-discant-symbols.ly:46 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) msgid "accBasson" msgstr "acordFagot" -#. input/lsr/accordion-discant-symbols.ly:52 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) msgid "een korig 8 en 16 voets register" msgstr "registro de een korig 8 en 16 pies" -#. input/lsr/accordion-discant-symbols.ly:53 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) msgid "accBandon" msgstr "acordBandon" -#. input/lsr/accordion-discant-symbols.ly:61 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) msgid "accVCello" msgstr "acordVCello" -#. input/lsr/accordion-discant-symbols.ly:71 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) msgid "4-8-16 voets register" msgstr "registro de 4-8-16 pies" -#. input/lsr/accordion-discant-symbols.ly:72 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) msgid "accHarmon" msgstr "acordArmon" -#. input/lsr/accordion-discant-symbols.ly:82 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) msgid "accTrombon" msgstr "acordTrombon" -#. input/lsr/accordion-discant-symbols.ly:94 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) msgid "eenkorig 4 en 16 voets register" msgstr "registro de eenkorig 4 y 16 pies" -#. input/lsr/accordion-discant-symbols.ly:95 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) msgid "accOrgan" msgstr "acordOrgano" -#. input/lsr/accordion-discant-symbols.ly:103 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) msgid "accMaster" msgstr "acordMaestro" -#. input/lsr/accordion-discant-symbols.ly:117 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) msgid "accAccord" msgstr "acordAcordeon" -#. input/lsr/accordion-discant-symbols.ly:129 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) msgid "accMusette" msgstr "accordMusette" -#. input/lsr/accordion-discant-symbols.ly:139 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) msgid "accCeleste" msgstr "acordCeleste" -#. input/lsr/accordion-discant-symbols.ly:147 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) msgid "accOboe" msgstr "acordOboe" -#. input/lsr/accordion-discant-symbols.ly:155 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) msgid "accClarin" msgstr "acordClarin" -#. input/lsr/accordion-discant-symbols.ly:161 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) msgid "accPiccolo" msgstr "acordPiccolo" -#. input/lsr/accordion-discant-symbols.ly:167 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) msgid "accViolin" msgstr "acordViolin" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:43 (variable) -#. input/lsr/jazz-combo-template.ly:233 (variable) -#. input/lsr/jazz-combo-template.ly:281 (context id) -msgid "bass" -msgstr "bajo" - -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:48 (variable) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) msgid "continuo" msgstr "continuo" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:60 (context id) -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:61 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) msgid "bassStaff" msgstr "pentagramaBajo" -#. input/lsr/adding-an-extra-staff-at-a-line-break.ly:53 (comment) -msgid "The next line is not needed in 2.11.x or later:" -msgstr "La línea siguiente no es necesaria en versiones 2.11.x o posteriores:" - -#. input/lsr/adding-drum-parts.ly:48 (variable) +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) msgid "drh" msgstr "drh" -#. input/lsr/adding-drum-parts.ly:49 (variable) +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) msgid "drl" msgstr "drl" -#. input/lsr/adding-drum-parts.ly:50 (variable) +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) msgid "timb" msgstr "timb" -#. input/lsr/adding-fingerings-to-tablatures.ly:26 (variable) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" +msgstr "dos" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) msgid "threeTwo" msgstr "tresDos" -#. input/lsr/adding-fingerings-to-tablatures.ly:33 (variable) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) msgid "threeFour" msgstr "tresCuatro" -#. input/lsr/adding-the-current-date-to-a-score.ly:31 (comment) +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "marcadoDivisoriaPentagramaDividido" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "divisoriaPentagramaDividido" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:69 (variable) +msgid "cueWhile" +msgstr "cueWhile" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:82 (variable) +msgid "flute" +msgstr "flauta" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:88 (variable) +msgid "clarinet" +msgstr "clarinete" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:97 (variable) +msgid "pianoRH" +msgstr "pianoMD" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:102 (variable) +msgid "pianoLH" +msgstr "pianoMI" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) msgid "first, define a variable to hold the formatted date:" msgstr "primero definimos una variable para almacenar la fecha con formato:" -#. input/lsr/adding-the-current-date-to-a-score.ly:32 (variable) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) msgid "date" msgstr "fecha" -#. input/lsr/adding-the-current-date-to-a-score.ly:32 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) msgid "d-%m-%Y\\\" (localtime (current-time)))" msgstr "d-%m-%Y\\\" (localtime (current-time)))" -#. input/lsr/adding-the-current-date-to-a-score.ly:34 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) msgid "use it in the title block:" msgstr "usarla en el bloque de título:" -#. input/lsr/adding-the-current-date-to-a-score.ly:45 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) msgid "and use it in a \\markup block:" msgstr "y usarla en un bloque \\markup:" -#. input/lsr/additional-voices-to-avoid-collisions.ly:39 (variable) +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) msgid "voiceFive" msgstr "vozCinco" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:32 (comment) +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +msgid "graceNotes" +msgstr "notasDeAdorno" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) msgid "Default layout:" msgstr "Diseño predeterminado:" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:41 (comment) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) msgid "Reducing the minimum space below the staff and above the lyrics:" msgstr "Reducir el espacio mínimo bajo el pentagrama y sobre la letra:" -#. input/lsr/aligning-bar-numbers.ly:47 (comment) -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:36 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) msgid "Increase the size of the bar number by 2" msgstr "Aumentar en 2 el tamaño del número de compás" -#. input/lsr/aligning-bar-numbers.ly:49 (comment) -#. input/lsr/printing-bar-numbers-at-regular-intervals.ly:45 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) msgid "Print a bar number every second measure" msgstr "Imprimir el número de compás cada dos compases" -#. input/lsr/aligning-bar-numbers.ly:52 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) msgid "Center-align bar numbers" msgstr "Alinear números de compás al centro" -#. input/lsr/aligning-bar-numbers.ly:55 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) msgid "Left-align bar numbers" msgstr "Alinear números de compás a la izquierda" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:79 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "la RehearsalMark se centra sobre la clave" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "la RehearsalMark se centra sobre el compás" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) msgid "the RehearsalMark will be centered above the KeySignature" msgstr "la RehearsalMark se centra sobre la armadura" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:90 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:102 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) msgid "the RehearsalMark will be aligned with the left edge of the KeySignature" msgstr "la RehearsalMark se alinea por la izquierda con la armadura" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:96 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) msgid "the RehearsalMark will be aligned with the right edge of the KeySignature" msgstr "la RehearsalMark se alinea por la derecha con la armadura" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:103 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) msgid "and then shifted right by one unit." msgstr "y se desplaza una unidad a la derecha." -#. input/lsr/ancient-fonts.ly:35 (variable) -#. input/lsr/ancient-fonts.ly:35 (context id) +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) msgid "upperStaff" msgstr "pentagramaSuperior" -#. input/lsr/ancient-fonts.ly:47 (comment) +#. Documentation/snippets/ancient-fonts.ly:49 (comment) msgid "\\break % 1 (8*1)" msgstr "\\break % 1 (8*1)" -#. input/lsr/ancient-fonts.ly:58 (comment) +#. Documentation/snippets/ancient-fonts.ly:60 (comment) msgid "\\break %2 (8*1)" msgstr "\\break %2 (8*1)" -#. input/lsr/ancient-fonts.ly:70 (comment) +#. Documentation/snippets/ancient-fonts.ly:72 (comment) msgid "\\break % 3 (8*1)" msgstr "\\break % 3 (8*1)" -#. input/lsr/ancient-fonts.ly:85 (comment) +#. Documentation/snippets/ancient-fonts.ly:87 (comment) msgid "\\break % 4 (8*1)" msgstr "\\break % 4 (8*1)" -#. input/lsr/ancient-fonts.ly:94 (comment) -#. input/lsr/ancient-fonts.ly:156 (comment) +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) msgid "\\break % 5 (8*1)" msgstr "\\break % 5 (8*1)" -#. input/lsr/ancient-fonts.ly:108 (comment) -#. input/lsr/ancient-fonts.ly:171 (comment) +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) msgid "\\break % 6 (8*1)" msgstr "\\break % 6 (8*1)" -#. input/lsr/ancient-fonts.ly:117 (comment) -#. input/lsr/ancient-fonts.ly:181 (comment) +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) msgid "\\break % 7 (8*1)" msgstr "\\break % 7 (8*1)" -#. input/lsr/ancient-fonts.ly:124 (comment) +#. Documentation/snippets/ancient-fonts.ly:126 (comment) msgid "\\break % 8 (8*1)" msgstr "\\break % 8 (8*1)" -#. input/lsr/ancient-fonts.ly:127 (comment) +#. Documentation/snippets/ancient-fonts.ly:129 (comment) msgid "\\break % 12 (32*1)" msgstr "\\break % 12 (32*1)" -#. input/lsr/ancient-fonts.ly:132 (variable) -#. input/lsr/ancient-fonts.ly:132 (context id) +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) msgid "lowerStaff" msgstr "pentagramaInferior" -#. input/lsr/ancient-fonts.ly:142 (comment) +#. Documentation/snippets/ancient-fonts.ly:144 (comment) msgid "\\break % 2 (16*1)" msgstr "\\break % 2 (16*1)" -#. input/lsr/ancient-fonts.ly:147 (comment) +#. Documentation/snippets/ancient-fonts.ly:149 (comment) msgid "\\break % 4 (16*1)" msgstr "\\break % 4 (16*1)" -#. input/lsr/ancient-fonts.ly:186 (comment) +#. Documentation/snippets/ancient-fonts.ly:188 (comment) msgid "\\break % 9 (16*1)" msgstr "\\break % 9 (16*1)" -#. input/lsr/ancient-fonts.ly:188 (comment) +#. Documentation/snippets/ancient-fonts.ly:190 (comment) msgid "lig" msgstr "lig" -#. input/lsr/ancient-fonts.ly:192 (comment) +#. Documentation/snippets/ancient-fonts.ly:194 (comment) msgid "\\break % 11 (16*1)" msgstr "\\break % 11 (16*1)" -#. input/lsr/ancient-fonts.ly:203 (comment) +#. Documentation/snippets/ancient-fonts.ly:205 (comment) msgid "\\break % 12 (8*1)" msgstr "\\break % 12 (8*1)" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:65 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:131 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:167 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:203 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:235 (comment) -#. input/lsr/incipit.ly:24 (variable) -#. input/lsr/incipit.ly:194 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:213 (comment) +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" +msgstr "cantus" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "Verso 1 — Salve, Regína" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "Verso 2 — Vita, dulcédo" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "\\divisioMinima" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "\\[ a\\melisma \\flexa g\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "\\[ e\\melisma \\flexa d\\melismaEnd \\]" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "\\divisioMaior" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "\\finalis" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "Verso 3 — Ad te clamámus" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "Verso 4 — Ad te suspirámus" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "Verso 5 — Eia ergo, Advocáta nostra" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "Verso 6 — Et Jesum" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "Verso 7 ad finem — O clemens: O pia: O dulcis Virgo María" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" +msgstr "canto" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" +msgstr "verba" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) msgid "incipit" msgstr "incipit" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:67 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) msgid "tight spacing" msgstr "espaciado apretado" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:74 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) msgid "turn off bar lines" msgstr "oculter líneas divisorias" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) msgid "need this extra \\skip such that clef change comes" msgstr "se necesita este \\skip adicional tal que el cambio de clave aparezca" # También Líneas divisorias. FVD -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:79 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) msgid "after bar line" msgstr "después de la barra de compás" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) msgid "CHECK: no effect?" msgstr "COMPROBAR: ¿no hace efecto?" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:84 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) msgid "turn bar lines on again" msgstr "activar de nuevo las barras de compás" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:92 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) msgid "FIXME: setting printKeyCancellation back to #t must not" msgstr "ARREGLAR: esablecer de nuevo printKeyCancellation a #t no debe" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:93 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) msgid "occur in the first bar after the incipit. Dto. for forceClef." msgstr "ocurrir en el primer compás después del incipit. Lo mismo para forceClef." -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:94 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) msgid "Therefore, we need an extra \\skip." msgstr "Por tanto, necesitamos un \\skip adicional." -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:99 (comment) -#. input/lsr/incipit.ly:67 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:38 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) msgid "the actual music" msgstr "la música en sí" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:101 (comment) -#. input/lsr/incipit.ly:70 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:40 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) msgid "let finis bar go through all staves" msgstr "hacer que la línea de finis cruce todas las pautas" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:104 (comment) -#. input/lsr/incipit.ly:73 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:43 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) msgid "finis bar" msgstr "línea de finis" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (variable) -#. input/lsr/incipit.ly:90 (variable) -#. input/lsr/incipit.ly:225 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:48 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) msgid "discantusNotes" msgstr "notasDiscanto" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:114 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:151 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:185 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:187 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:196 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:219 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:74 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:84 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:97 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:104 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:139 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:164 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:188 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:190 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:215 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) msgid "two bars" msgstr "dos compases" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:115 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:218 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:140 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:214 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) msgid "eight bars" msgstr "ocho compases" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:150 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:153 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:163 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:189 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) msgid "one bar" msgstr "un compás" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:130 (variable) -#. input/lsr/incipit.ly:104 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:61 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) msgid "discantusLyrics" msgstr "letraDiscanto" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:144 (variable) -#. input/lsr/incipit.ly:127 (variable) -#. input/lsr/incipit.ly:232 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:71 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) msgid "altusNotes" msgstr "notasAlto" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:165 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) msgid "seven bars" msgstr "siete compases" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:166 (variable) -#. input/lsr/incipit.ly:141 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:83 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) msgid "altusLyrics" msgstr "letraAltus" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:178 (variable) -#. input/lsr/incipit.ly:165 (variable) -#. input/lsr/incipit.ly:239 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:91 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) msgid "tenorNotes" msgstr "notasTenor" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:184 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:187 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) msgid "four bars" msgstr "cuatro compases" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:202 (variable) -#. input/lsr/incipit.ly:180 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:57 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:103 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) msgid "tenorLyrics" msgstr "letraTenor" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:212 (variable) -#. input/lsr/incipit.ly:202 (variable) -#. input/lsr/incipit.ly:246 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:109 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) msgid "bassusNotes" msgstr "notasBajo" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:234 (variable) -#. input/lsr/incipit.ly:216 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:122 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) msgid "bassusLyrics" msgstr "letraBajo" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:245 (context id) -#. input/lsr/incipit.ly:224 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:230 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) msgid "choirStaff" msgstr "pautaCoro" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:267 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:267 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) msgid "no bars in staves" msgstr "no poner barras dentro de los pentagramas" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:270 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) msgid "incipit should not start with a start delimiter" msgstr "el incipit no empieza con un delimitador de comienzo" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:276 (comment) -#. input/lsr/incipit.ly:269 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:278 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) msgid "no slurs" msgstr "sin ligaduras de expresión" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:279 (comment) -#. input/lsr/incipit.ly:271 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:281 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) msgid "Comment in the below \\\"\\remove\\\" command to allow line" msgstr "Quite el comentario de la instrucción \\\"\\remove\\\" de abajo para permitir" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:282 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) msgid "breaking also at those barlines where a note overlaps" msgstr "los saltos de línea también en aquellas barras donde" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:281 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:283 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) msgid "into the next bar. The command is commented out in this" msgstr "" "se superpone una nota con el siguiente compás. La instrucción es un " "comentario en esta" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:282 (comment) -#. input/lsr/incipit.ly:274 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:284 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) msgid "short example score, but especially for large scores, you" msgstr "partitura corta de ejemplo, pero especialmente para partituras extensas," -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) -#. input/lsr/incipit.ly:275 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:285 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) msgid "will typically yield better line breaking and thus improve" msgstr "probablemente consiga unos saltos de línea mejores y así mejorar" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) -#. input/lsr/incipit.ly:276 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:286 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) msgid "overall spacing if you comment in the following command." msgstr "el espaciado general si elimina el comentario de la instrucción siguiente." -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) -#. input/lsr/incipit.ly:277 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:287 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) msgid "\\remove \\\"Forbid_line_break_engraver\\\"" msgstr "\\remove \\\"Forbid_line_break_engraver\\\"" -#. input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:75 (variable) -#. input/lsr/clusters.ly:28 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +msgid "tick" +msgstr "pulso" + +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +msgid "Use markup to center the chant on the page" +msgstr "Usar marcado para centrar el canto sobre la página" + +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +msgid "centered" +msgstr "centrado" + +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) +msgid "End score" +msgstr "Fin de la partitura" + +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) +msgid "End markup" +msgstr "Fin del marcado" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) msgid "fragment" msgstr "fragmento" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:42 (comment) -msgid "Automatic beams two per two in 4/4 or 2/2 time signature" -msgstr "Barras automáticas dos a dos en 4/4 y 2/2" +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) +msgid "slurNotes" +msgstr "notasLigadura" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +msgid "Default behavior" +msgstr "Comportamiento predeterminado" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" +msgstr "Corregido para evitar colisiones" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "%%%%%%% Cortar por aquí ----- Inicio de 'bbarred.ly'" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:43 (comment) -msgid "_____" -msgstr "_____" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "PostScript -------------------------------" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:44 (comment) -msgid "Default | | | |" -msgstr "Predeterminado | | | |" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "pScript" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:45 (comment) -msgid "_ _" -msgstr "_ _" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "cambie por Si si lo prefiere" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:46 (comment) -msgid "Required | | | |" -msgstr "Necesario | | | |" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "(B)show %% cambie por Do si lo prefiere" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:48 (comment) -msgid "macro for beamed two per two in 2/2 and 4/4 time signature" -msgstr "macro para barras dos a dos en 2/2 y 4/4" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "Extensión -----------------------------------" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:49 (variable) -msgid "qBeam" -msgstr "barraNegras" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "Sintaxis: \\bbarre #\\\"text\\\" { notas } - texto = cualquier número de caja" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:64 (comment) -msgid "Use the macro" -msgstr "Usar el macro" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "bbarre" -#. input/lsr/avoiding-collisions-with-chord-fingerings.ly:30 (comment) -msgid "Corrected to avoid collisions" -msgstr "Corregido para evitar colisiones" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "quite el comentario de esta línea para hacer cejilla completa" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "%%%%%%% Cortar por aquí ----- Final de 'bbarred.ly'" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "Copie y cambie la última línea para cejilla completa. Cambie el nombre a 'fbarred.ly'" -#. input/lsr/beam-endings-in-score-context.ly:38 (comment) +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "Sintaxis: \\bbarre #\\\"text\\\" { notas } - texto = cualquier número de caja" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) msgid "Set default beaming for all staves" msgstr "Establecer el barrado predeterminado para todos los pentagramas" -#. input/lsr/beam-endings-in-score-context.ly:46 (comment) +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) msgid "Modify beaming for just this staff" msgstr "Modificar el barrado sólo para este pentagrama" -#. input/lsr/beam-endings-in-score-context.ly:52 (comment) +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) msgid "Inherit beaming from Score context" msgstr "Heredar el barrado del contexto Score" -#. input/lsr/beam-endings-in-score-context.ly:58 (comment) +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) msgid "Modify beaming for this voice only" msgstr "Modificar el barrado sólo para esta voz" -#. input/lsr/beam-grouping-in-7-8-time.ly:41 (comment) +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) msgid "rhythm 2-3-2" msgstr "ritmo 2-3-2" -#. input/lsr/book-parts.ly:22 (comment) +#. Documentation/snippets/book-parts.ly:22 (comment) msgid "book paper, which is inherited by all children bookparts" msgstr "bloque paper del book, que se hereda por todas las bookparts" -#. input/lsr/book-parts.ly:25 (comment) +#. Documentation/snippets/book-parts.ly:25 (comment) msgid "Page footer: add a different part-tagline at part last page" msgstr "" "Pie de la página: añadir una línea de pie diferente para la parte en la " "última página de la parte" -#. input/lsr/book-parts.ly:29 (comment) +#. Documentation/snippets/book-parts.ly:29 (comment) msgid "Copyright header field only on book first page." msgstr "Campo de cabecera Copyright sólo en la primera página del libro" -#. input/lsr/book-parts.ly:33 (comment) +#. Documentation/snippets/book-parts.ly:33 (comment) msgid "Part tagline header field only on each part last page." msgstr "Cebecera de lína de pie de la parte sólo en la última página de cada parte" -#. input/lsr/book-parts.ly:37 (comment) +#. Documentation/snippets/book-parts.ly:37 (comment) msgid "Tagline header field only on book last page." msgstr "Campo de cabecera Tagline sólo en la última página del libro" -#. input/lsr/book-parts.ly:44 (comment) +#. Documentation/snippets/book-parts.ly:44 (comment) msgid "book header, which is inherited by the first bookpart" msgstr "Cabecera del libro, que se hereda por la primera bookpart" -#. input/lsr/book-parts.ly:53 (comment) +#. Documentation/snippets/book-parts.ly:53 (comment) msgid "a different page breaking function may be used on each part" msgstr "Se puede usar una función de salto de página diferente en cada parte" -#. input/lsr/breathing-signs.ly:19 (comment) +#. Documentation/snippets/breathing-signs.ly:20 (comment) msgid "this bar contains no \\breathe" msgstr "este compás no tiene ningún \\breathe" -#. input/lsr/breathing-signs.ly:21 (comment) +#. Documentation/snippets/breathing-signs.ly:22 (comment) msgid "Modern notation:" msgstr "Notación moderna:" -#. input/lsr/breathing-signs.ly:22 (comment) +#. Documentation/snippets/breathing-signs.ly:23 (comment) msgid "by default, \\breathe uses the rcomma, just as if saying:" msgstr "de forma predeterminada, \\breathe usa la rcomma, como si dijésemos:" -#. input/lsr/breathing-signs.ly:23 (comment) +#. Documentation/snippets/breathing-signs.ly:24 (comment) msgid "" "\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" "\\\")" @@ -11242,1360 +7948,2080 @@ msgstr "" "\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" "\\\")" -#. input/lsr/breathing-signs.ly:26 (comment) +#. Documentation/snippets/breathing-signs.ly:27 (comment) msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" msgstr "rvarcomma y lvarcomma son variantes de las rcomma y lcomma predeterminadas" -#. input/lsr/breathing-signs.ly:27 (comment) +#. Documentation/snippets/breathing-signs.ly:28 (comment) msgid "N.B.: must use Staff context here, since we start a Voice below" msgstr "" "Nota: aquí hay que usar el contexto de Staff pues iniciamos una Voice más " "abajo" -#. input/lsr/breathing-signs.ly:31 (comment) +#. Documentation/snippets/breathing-signs.ly:32 (comment) msgid "vee" msgstr "uve" -#. input/lsr/caesura-railtracks-with-fermata.ly:30 (comment) +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) msgid "construct the symbol" msgstr "construir el símbolo" -#. input/lsr/caesura-railtracks-with-fermata.ly:39 (comment) +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) msgid "set the breathe mark back to normal" msgstr "volver a poner la respiración normal" -#. input/lsr/center-text-below-hairpin-dynamics.ly:28 (variable) +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) msgid "hairpinWithCenteredText" msgstr "reguladorConTextoCentrado" -#. input/lsr/center-text-below-hairpin-dynamics.ly:40 (variable) +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) msgid "hairpinMolto" msgstr "reguladorMolto" -#. input/lsr/center-text-below-hairpin-dynamics.ly:41 (variable) +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) msgid "hairpinMore" msgstr "reguladorMas" -#. input/lsr/changing--flageolet-mark-size.ly:41 (variable) +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) msgid "smallFlageolet" msgstr "flageoletPequeño" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:35 (comment) +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +msgid "Default setting" +msgstr "Ajuste predeterminado" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) msgid "The following is only here to print the names of the" msgstr "Lo que sigue está solamente para poder imprimir los nombres de los" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) msgid "chords styles; it can be removed if you do not need to" msgstr "estilos de acorde; quítelos si no los quiere" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) msgid "print them." msgstr "imprimir." -#. input/lsr/changing-the-default-text-font-family.ly:17 (comment) -msgid "change for other default global staff size. " -msgstr "cambiar a otro tamaño global predeterminado. " +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "cambiar para otro tamaño de pentagrama global predeterminado." -#. input/lsr/changing-the-default-text-font-family.ly:19 (comment) -#. input/lsr/engravers-one-by-one.ly:192 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:110 (comment) -#. input/lsr/utf-8.ly:23 (comment) +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:183 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) msgid "{" msgstr "{" -#. input/lsr/changing-the-default-text-font-family.ly:23 (comment) -#. input/lsr/engravers-one-by-one.ly:195 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:111 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:233 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:180 (comment) -#. input/lsr/utf-8.ly:37 (comment) +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:185 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) msgid "}" msgstr "}" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:63 (comment) -msgid "Change time signature symbol but keep 3/4 beaming" -msgstr "Cambio de compás manterniendo el barrado de 3/4" - -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:64 (comment) -msgid "due to unchanged underlying time signature" -msgstr "a causa de que el compás subyacente no ha cambiado" - -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:69 (comment) -msgid "Lose 3/4 beaming now \\time has been changed" -msgstr "Perder el barrado de 3/4 ahora que se ha cambiado el \\time" +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +msgid "sustainNotes" +msgstr "notasSostenuto" -#. input/lsr/chant-or-psalms-notation.ly:24 (variable) +#. Documentation/snippets/chant-or-psalms-notation.ly:45 (variable) msgid "stemOn" msgstr "plicaSi" -#. input/lsr/chant-or-psalms-notation.ly:25 (variable) +#. Documentation/snippets/chant-or-psalms-notation.ly:46 (variable) msgid "stemOff" msgstr "plicaNo" -#. input/lsr/chord-name-exceptions.ly:33 (comment) +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) msgid "modify maj9 and 6(add9)" msgstr "cambiar maj9 y 6(add9)" -#. input/lsr/chord-name-exceptions.ly:34 (comment) +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) msgid "Exception music is chords with markups" msgstr "la Música de Excepciones son acordes con marcados" -#. input/lsr/chord-name-exceptions.ly:35 (variable) +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) msgid "chExceptionMusic" msgstr "cambiaMusicaExcepciones" -#. input/lsr/chord-name-exceptions.ly:40 (comment) +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) msgid "Convert music to list and prepend to existing exceptions." msgstr "Convertir la música en una lista y añadirla a las excepciones existentes." -#. input/lsr/chord-name-exceptions.ly:41 (variable) +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) msgid "chExceptions" msgstr "cambiaExcepciones" -#. input/lsr/chord-name-exceptions.ly:45 (variable) +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) msgid "theMusic" msgstr "laMusica" -#. input/lsr/clip-systems.ly:35 (variable) +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" +msgstr "misAcordes" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "losAcordes" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +msgid "\\break" +msgstr "\\break" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "estrofaUno" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "estrofaDos" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +msgid "sop" +msgstr "sop" + +#. Documentation/snippets/clip-systems.ly:65 (variable) msgid "origScore" msgstr "partituraOriginal" -#. input/lsr/clip-systems.ly:53 (comment) +#. Documentation/snippets/clip-systems.ly:83 (comment) msgid "Each clip-region is a (START . END) pair" msgstr "cada zona clip-region es un par (INICIO . FIN)" -#. input/lsr/clip-systems.ly:54 (comment) +#. Documentation/snippets/clip-systems.ly:84 (comment) msgid "where both are rhythmic-locations." msgstr "donde ambas son rhythmic-locations." -#. input/lsr/clip-systems.ly:56 (comment) +#. Documentation/snippets/clip-systems.ly:86 (comment) msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" msgstr "(make-rhythmic-locations NUM-COMPAS NUMERADOR DENOMINADOR)" -#. input/lsr/clip-systems.ly:57 (comment) +#. Documentation/snippets/clip-systems.ly:87 (comment) msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" msgstr "significa NUMERADOR/DENOMINADOR redondas en el compás número NUM-COMPAS" -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:17 (comment) +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) msgid "Association list of pitches to colors." msgstr "Lista asociativa de alturas a colores." -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:37 (comment) +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) msgid "Compare pitch and alteration (not octave)." msgstr "Comparar la altura y la alteración (no la octava)." -#. input/lsr/combining-dynamics-with-markup-texts.ly:25 (variable) +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) msgid "piuF" msgstr "piuF" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:72 (variable) +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) msgid "musicUp" msgstr "musicaArriba" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:79 (variable) +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) msgid "musicDown" msgstr "musicaAbajo" -#. input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly:53 (variable) -#. input/lsr/jazz-combo-template.ly:277 (context id) -msgid "rhythm" -msgstr "duraciones" +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" +msgstr "mostrar regulador" -#. input/lsr/creating-real-parenthesized-dynamics.ly:46 (variable) +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" +msgstr "ocultar extensión de texto" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" +msgstr "mostrar glissando" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) msgid "parenF" msgstr "forteParen" -#. input/lsr/creating-simultaneous-rehearsal-marks.ly:43 (comment) +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) msgid "the hidden measure and bar line" msgstr "el compás y barra ocultos" -#. input/lsr/customizing-fretboard-fret-diagrams.ly:53 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:55 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:26 (comment) +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "\\cadenzaOn desactiva el cálculo automático de números de compás" + +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "arriba" + +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "abajo" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) msgid "Set global properties of fret diagram" msgstr "Fijar propiedades globales del diagrama de posición" -#. input/lsr/customizing-markup-fret-diagrams.ly:53 (context id) -#. input/lsr/formatting-lyrics-syllables.ly:21 (variable) -#. input/lsr/fret-diagrams-explained-and-developed.ly:24 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:65 (context id) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:16 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) msgid "mel" msgstr "melo" -#. input/lsr/customizing-markup-fret-diagrams.ly:62 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) msgid "C major for guitar, no barre, using defaults" msgstr "Do mayor para guitarra, sin cejilla, usar predeterminados" -#. input/lsr/customizing-markup-fret-diagrams.ly:63 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:113 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) msgid "terse style" msgstr "estilo escueto" -#. input/lsr/customizing-markup-fret-diagrams.ly:66 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:88 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:55 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:76 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:155 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:176 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:254 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:275 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) msgid "C major for guitar, barred on third fret" msgstr "Do mayor para guitarra, cejilla en el tercer traste" -#. input/lsr/customizing-markup-fret-diagrams.ly:67 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:89 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:56 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:78 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:105 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:156 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:178 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:205 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:255 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:277 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:304 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) msgid "verbose style" msgstr "estilo prolijo" -#. input/lsr/customizing-markup-fret-diagrams.ly:68 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) msgid "size 1.0" msgstr "tamaño 1.0" -#. input/lsr/customizing-markup-fret-diagrams.ly:69 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:57 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:157 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) msgid "roman fret label, finger labels below string, straight barre" msgstr "" "leyenda de posición en romana, leyendas de dedos debajo de las cuerdas, " "cejilla recta" -#. input/lsr/customizing-markup-fret-diagrams.ly:71 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) msgid "standard size" msgstr "tamaño estándar" -#. input/lsr/customizing-markup-fret-diagrams.ly:90 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) msgid "landscape orientation, arabic numbers, M for mute string" msgstr "orientación apaisada, números arábigos, M para cuerda muda" -#. input/lsr/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) msgid "no barre, fret label down or left, small mute label font" msgstr "" "sin cejilla, leyenda de posición abajo o izquierda, fuente pequeña de " "indicación de cuerda muda" -#. input/lsr/customizing-markup-fret-diagrams.ly:112 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:127 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:227 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:326 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) msgid "simple D chord" msgstr "acorde de Re sencillo" -#. input/lsr/customizing-markup-fret-diagrams.ly:114 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) msgid "larger dots, centered dots, fewer frets" msgstr "puntos mayores, centrados, menos trastes" -#. input/lsr/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) msgid "label below string" msgstr "leyenda debajo de la cuerda" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:81 (comment) +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" +msgstr "Utilidades de Grob" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "Esto son reescrituras literales de algunos métodos en C++ utilizados por el grabador de tesitura." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" +msgstr "Estructura de datos de la tesitura" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" +msgstr "La clase guarda los distintos grobs que se crean" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" +msgstr "para imprimir una tesitura:" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "- ambitus-group: el grob que agrupa todos los componentes de una tesitura" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" +msgstr "(grob de la tesitura);" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "- ambitus-line: la línea vertical entre las notas alta y baja de la tesitura" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "notas (grob AmbitusLine);" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "- ambitus-up-note y ambitus-down-note: la cabeza y su alteración" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "para las notas inferior y superior de la tesitura (véase la clase " + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." +msgstr "más abajo)." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "Las otras ranuras definen los contextos de tonalidad y clave del grabador:" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "- start-c0: posición del Do central al principio de la pieza." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "Se usa para colocar las notas de tesitura de acuerdo con su altura;" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "- start-key-sig: armadura al principio de la pieza." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "Se usa para determinar si se deben imprimir alteraciones junto a las " + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +msgid "notes." +msgstr "notas de tesitura." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "Accesor para los datos de notas inferior y superior de la tesitura" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "La clase guarda los grobs que son específicos de las" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" +msgstr "notas (inferior y superior):" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "- head: un grob AmbitusNoteHead;" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "- accidental: un grob AmbitusAccidental a imprimir posiblemente junto a" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." +msgstr "la cabeza de la nota de tesitura." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" +msgstr "Además:" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "- pitch es la altura absoluta de la nota" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "- cause es el evento de nota que produce esta nota de tesitura, es decir, la nota" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." +msgstr "inferior o superior de la secuencia musical considerada." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +msgid "Ambitus engraving logics" +msgstr "Lógica del grabado de la tesitura" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." +msgstr "Reescritura del código de @file{lily/ambitus-engraver.cc}." + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" +msgstr "Definición del grabador de tesitura" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" +msgstr "Ejemplo" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:143 (comment) msgid "add FretBoards for the Cuatro" msgstr "añadir FretBoards para el cuatro venezolano" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:82 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:144 (comment) msgid "Note: This section could be put into a separate file" msgstr "Nota: esta sección se puede poner en un archivo aparte" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:83 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:145 (comment) msgid "predefined-cuatro-fretboards.ly" msgstr "posiciones-predefinidas-del-cuatro.ly" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:146 (comment) msgid "and \\included into each of your compositions" msgstr "e incluirse en todas sus composiciones con \\include" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:86 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:148 (variable) msgid "cuatroTuning" msgstr "afinacionCuatro" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:88 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:153 (variable) msgid "dSix" msgstr "sextaRe" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:154 (variable) msgid "dMajor" msgstr "reMayor" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:90 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:155 (variable) msgid "aMajSeven" msgstr "laSeptMayor" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:156 (variable) msgid "dMajSeven" msgstr "reSeptMayor" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:157 (variable) msgid "gMajor" msgstr "solMayor" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:110 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:175 (comment) msgid "end of potential include file /predefined-cuatro-fretboards.ly" msgstr "fin del potencial archivo de inclusión /posiciones-predefinidas-del-cuatro.ly" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:115 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:180 (variable) msgid "primerosNames" msgstr "nombresPrimeros" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:119 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:184 (variable) msgid "primeros" msgstr "primeros" -#. input/lsr/demo-midiinstruments.ly:23 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:207 (comment) +msgid "\\override FretBoard" +msgstr "\\override FretBoard" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:208 (comment) +msgid "#'(fret-diagram-details string-count) = #'4" +msgstr "#'(fret-diagram-details string-count) = #'4" + +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) msgid "baseMelody" msgstr "melodiaBase" -#. input/lsr/display-bracket-with-only-one-staff-in-a-system.ly:55 (comment) +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) msgid "Must be lower than the actual number of staff lines" msgstr "debe ser menor que el número real de líneas de la pauta" -#. input/lsr/displaying-complex-chords.ly:16 (variable) +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) msgid "fixA" msgstr "fixA" -#. input/lsr/displaying-complex-chords.ly:20 (variable) +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) msgid "fixB" msgstr "fixB" -#. input/lsr/double-glissando.ly:20 (comment) +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "\\\" (make-string 36 #\\-))" + +#. Documentation/snippets/double-glissando.ly:21 (comment) msgid "new voice ( = \\voiceOne), hidden" msgstr "new voice ( = \\voiceOne), oculta" -#. input/lsr/double-glissando.ly:22 (comment) +#. Documentation/snippets/double-glissando.ly:23 (comment) msgid "attach glissando to note heads" msgstr "aplicar glissando a la cabeza de las notas" -#. input/lsr/double-glissando.ly:27 (comment) +#. Documentation/snippets/double-glissando.ly:28 (comment) msgid "original voice with chords rearranged so that" msgstr "voz original con acordes rehecha de forma que" -#. input/lsr/double-glissando.ly:28 (comment) +#. Documentation/snippets/double-glissando.ly:29 (comment) msgid "glissando is attached to a & c" msgstr "el glissando se aplica al La y al Do" -#. input/lsr/embedding-native-postscript-in-a--markup-block.ly:24 (comment) +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" +msgstr "círculo" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) +msgid "Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "Dos funciones para extensores de (de)crescendo donde podemos dar el" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." +msgstr "texto de la extensión explícitamente." + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +msgid "mycresc" +msgstr "miCresc" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +msgid "mydecresc" +msgstr "miDecresc" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:59 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "Algunos extensores de texto de muestra, para usar como operadores posfijos" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:60 (variable) +msgid "crpoco" +msgstr "crpoco" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "NR 1.7 Anotaciones editoriales" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "Beethoven, Op. 31, No. 3" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "Sonata para piano núm. 18, Mov. II, Scherzo" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "Compases 9 a 14" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "Pentagrama MD" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "Pentagrama MI" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) msgid "PostScript is a registered trademark of Adobe Systems Inc." msgstr "PostScript is a registered trademark of Adobe Systems Inc." -#. input/lsr/engravers-one-by-one.ly:76 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:71 (comment) msgid "sample music" msgstr "música de ejemplo" -#. input/lsr/engravers-one-by-one.ly:77 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:72 (variable) msgid "topVoice" msgstr "vozSuperior" -#. input/lsr/engravers-one-by-one.ly:85 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:80 (variable) msgid "botVoice" msgstr "vozInferior" -#. input/lsr/engravers-one-by-one.ly:93 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:88 (variable) msgid "hoom" msgstr "hum" -#. input/lsr/engravers-one-by-one.ly:104 (variable) -msgid "pah" -msgstr "pa" +#. Documentation/snippets/engravers-one-by-one.ly:99 (variable) +msgid "pah" +msgstr "pa" + +#. Documentation/snippets/engravers-one-by-one.ly:109 (comment) +msgid "setup for Request->Element conversion. Guru-only" +msgstr "Sólo para gurús: tinglado para la conversión Request->Element" + +#. Documentation/snippets/engravers-one-by-one.ly:112 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:210 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:223 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:279 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:293 (variable) +msgid "MyStaff" +msgstr "miPentagrama" + +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "explicitly set instrumentName, so we don't get" +msgstr "fijar instrumentName específicamente, para no obtener" + +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +msgid "weird effects when doing instrument names for" +msgstr "efectos extraños al hacer nombres de instrumento para" + +#. Documentation/snippets/engravers-one-by-one.ly:142 (comment) +msgid "piano staves" +msgstr "sistemas de piano" + +#. Documentation/snippets/engravers-one-by-one.ly:151 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:237 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:250 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:263 (variable) +msgid "MyVoice" +msgstr "miVoz" + +#. Documentation/snippets/engravers-one-by-one.ly:166 (comment) +msgid "must come before all" +msgstr "ha de ir antes de todo" + +#. Documentation/snippets/engravers-one-by-one.ly:176 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "\\consists \\\"Rest_engraver\\\"" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "L. v. Beethoven, Op. 49 no. 1" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "Sonata para piano núm. 19 - \\\"Leichte Sonate\\\"" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "Compases 1 a 12" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "\\layout {" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "\\context {" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "\\Score" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" +msgstr "\\override SpacingSpanner #'base-shortest-duration =" + +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "#(ly:make-moment 1 20)" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" -#. input/lsr/engravers-one-by-one.ly:114 (comment) -msgid "setup for Request->Element conversion. Guru-only" -msgstr "Sólo para gurús: tinglado para la conversión Request->Element" +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "Sonata II, Allemanda" -#. input/lsr/engravers-one-by-one.ly:117 (variable) -#. input/lsr/engravers-one-by-one.ly:222 (variable) -#. input/lsr/engravers-one-by-one.ly:235 (variable) -#. input/lsr/engravers-one-by-one.ly:291 (variable) -#. input/lsr/engravers-one-by-one.ly:305 (variable) -msgid "MyStaff" -msgstr "miPentagrama" +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "compases 1 a 88" -#. input/lsr/engravers-one-by-one.ly:149 (comment) -msgid "explicitly set instrument, so we don't get " -msgstr "especificar el instrumento para evitar efectos no deseados" +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "Codificado por Neil Puttock; modificado por Carl Sorensen" -#. input/lsr/engravers-one-by-one.ly:150 (comment) -msgid "weird effects when doing instrument names for" -msgstr "si se hacen nombres de instrumentos para pentagramas de piano" +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +msgid "extendOn" +msgstr "extendOn" -#. input/lsr/engravers-one-by-one.ly:151 (comment) -msgid "piano staves" -msgstr "sistemas de piano" +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "extendOff" -#. input/lsr/engravers-one-by-one.ly:160 (variable) -#. input/lsr/engravers-one-by-one.ly:249 (variable) -#. input/lsr/engravers-one-by-one.ly:262 (variable) -#. input/lsr/engravers-one-by-one.ly:275 (variable) -msgid "MyVoice" -msgstr "miVoz" +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "violinI" -#. input/lsr/engravers-one-by-one.ly:175 (comment) -msgid "must come before all" -msgstr "ha de ir antes de todo" +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "violinII" -#. input/lsr/engravers-one-by-one.ly:185 (comment) -msgid "\\consists \\\"Rest_engraver\\\"" -msgstr "\\consists \\\"Rest_engraver\\\"" +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "violone" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:38 (variable) +msgid "centermarkup" +msgstr "marcadoCentro" -#. input/lsr/flamenco-notation.ly:46 (comment) -msgid "Cut here ----- Start 'flamenco.ly' " -msgstr "Cortar por aquí ----- Inicio 'flamenco.ly' " +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" +msgstr "Cortar por aquí ----- Inicio 'flamenco.ly'" -#. input/lsr/flamenco-notation.ly:48 (comment) +#. Documentation/snippets/flamenco-notation.ly:96 (comment) msgid "Text indicators" msgstr "Indicadores de texto" -#. input/lsr/flamenco-notation.ly:49 (variable) +#. Documentation/snippets/flamenco-notation.ly:97 (variable) msgid "abanico" msgstr "abanico" -#. input/lsr/flamenco-notation.ly:50 (variable) +#. Documentation/snippets/flamenco-notation.ly:98 (variable) msgid "rasgueaso" msgstr "rasgueo" -#. input/lsr/flamenco-notation.ly:51 (variable) +#. Documentation/snippets/flamenco-notation.ly:99 (variable) msgid "alzapua" msgstr "alzapua" -#. input/lsr/flamenco-notation.ly:53 (comment) +#. Documentation/snippets/flamenco-notation.ly:101 (comment) msgid "Finger stroke symbols" msgstr "Símbolos de golpes de dedo" -#. input/lsr/flamenco-notation.ly:54 (variable) +#. Documentation/snippets/flamenco-notation.ly:102 (variable) msgid "strokeUp" msgstr "golpeArriba" -#. input/lsr/flamenco-notation.ly:64 (variable) +#. Documentation/snippets/flamenco-notation.ly:112 (variable) msgid "strokeDown" msgstr "golpeAbajo" -#. input/lsr/flamenco-notation.ly:74 (comment) +#. Documentation/snippets/flamenco-notation.ly:122 (comment) msgid "Golpe symbol" msgstr "Símbolo de golpe" -#. input/lsr/flamenco-notation.ly:75 (variable) +#. Documentation/snippets/flamenco-notation.ly:123 (variable) msgid "golpe" msgstr "golpe" -#. input/lsr/flamenco-notation.ly:89 (variable) +#. Documentation/snippets/flamenco-notation.ly:137 (variable) msgid "strokeUpGolpe" msgstr "golpearArriba" -#. input/lsr/flamenco-notation.ly:90 (variable) +#. Documentation/snippets/flamenco-notation.ly:138 (variable) msgid "iUpGolpe" msgstr "iGolpeArriba" -#. input/lsr/flamenco-notation.ly:92 (comment) +#. Documentation/snippets/flamenco-notation.ly:140 (comment) msgid "Strokes for all fingers" msgstr "Golpes para todos los dedos" -#. input/lsr/flamenco-notation.ly:93 (variable) +#. Documentation/snippets/flamenco-notation.ly:141 (variable) msgid "pUp" msgstr "pArriba" -#. input/lsr/flamenco-notation.ly:94 (variable) +#. Documentation/snippets/flamenco-notation.ly:142 (variable) msgid "pDown" msgstr "pAbajo" -#. input/lsr/flamenco-notation.ly:95 (variable) +#. Documentation/snippets/flamenco-notation.ly:143 (variable) msgid "iUp" msgstr "iArriba" -#. input/lsr/flamenco-notation.ly:96 (variable) +#. Documentation/snippets/flamenco-notation.ly:144 (variable) msgid "iDown" msgstr "iAbajo" -#. input/lsr/flamenco-notation.ly:97 (variable) +#. Documentation/snippets/flamenco-notation.ly:145 (variable) msgid "mUp" msgstr "mArriba" -#. input/lsr/flamenco-notation.ly:98 (variable) +#. Documentation/snippets/flamenco-notation.ly:146 (variable) msgid "mDown" msgstr "mAbajo" -#. input/lsr/flamenco-notation.ly:99 (variable) +#. Documentation/snippets/flamenco-notation.ly:147 (variable) msgid "aUp" msgstr "aArriba" -#. input/lsr/flamenco-notation.ly:100 (variable) +#. Documentation/snippets/flamenco-notation.ly:148 (variable) msgid "aDown" msgstr "aAbajo" -#. input/lsr/flamenco-notation.ly:101 (variable) +#. Documentation/snippets/flamenco-notation.ly:149 (variable) msgid "xUp" msgstr "xArriba" -#. input/lsr/flamenco-notation.ly:102 (variable) +#. Documentation/snippets/flamenco-notation.ly:150 (variable) msgid "xDown" msgstr "xAbajo" -#. input/lsr/flamenco-notation.ly:105 (comment) +#. Documentation/snippets/flamenco-notation.ly:153 (comment) msgid "Just handy :)" msgstr "Muy cómodo :)" -#. input/lsr/flamenco-notation.ly:106 (variable) +#. Documentation/snippets/flamenco-notation.ly:154 (variable) msgid "tupletOff" msgstr "grupoNo" -#. input/lsr/flamenco-notation.ly:111 (variable) +#. Documentation/snippets/flamenco-notation.ly:159 (variable) msgid "tupletsOff" msgstr "gruposNo" -#. input/lsr/flamenco-notation.ly:116 (variable) +#. Documentation/snippets/flamenco-notation.ly:164 (variable) msgid "tupletsOn" msgstr "gruposSi" -#. input/lsr/flamenco-notation.ly:121 (variable) +#. Documentation/snippets/flamenco-notation.ly:169 (variable) msgid "headsOff" msgstr "cabezasNo" -#. input/lsr/flamenco-notation.ly:127 (variable) +#. Documentation/snippets/flamenco-notation.ly:175 (variable) msgid "headsOn" msgstr "cabezasSi" -#. input/lsr/flamenco-notation.ly:133 (comment) -msgid "Cut here ----- End 'flamenco.ly' " -msgstr "Cortar por aquí ----- Final 'flamenco.ly' " +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" +msgstr "Cortar por aquí ----- Final 'flamenco.ly'" -#. input/lsr/flat-flags-and-beam-nibs.ly:122 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) msgid "Example 1" msgstr "Ejemplo 1" -#. input/lsr/flat-flags-and-beam-nibs.ly:129 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) msgid "Example 2" msgstr "Ejemplo 2" -#. input/lsr/flat-flags-and-beam-nibs.ly:136 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) msgid "Example 3" msgstr "Ejemplo 3" -#. input/lsr/flat-flags-and-beam-nibs.ly:145 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) msgid "Example 4" msgstr "Ejemplo 4" -#. input/lsr/flute-slap-notation.ly:17 (variable) +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) msgid "slap" msgstr "slap" -#. input/lsr/formatting-lyrics-syllables.ly:16 (comment) -msgid "" -"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" -"msg00215.html" -msgstr "" -"Truco sacado de http://lists.gnu.org/archive/html/lilypond-user/2007-12/" -"msg00215.html" +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +msgid "example" +msgstr "ejemplo" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (variable) +msgid "lyr" +msgstr "letra" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "Un acorde de ukelele" -#. input/lsr/fret-diagrams-explained-and-developed.ly:42 (comment) -msgid "A chord for ukelele, with formatting defined in definition string" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" msgstr "Acorde para el ukelele, con el formato definido en la cadena de definición" -#. input/lsr/fret-diagrams-explained-and-developed.ly:43 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" msgstr "1.2 * tamaño, 4 cuerdas, 4 trastes, digitación debajo de las cuerdas" -#. input/lsr/fret-diagrams-explained-and-developed.ly:44 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" msgstr "" "redio del punto .35 del espacio de traste, posición del punto 0.55 del " "espacio de traste" -#. input/lsr/fret-diagrams-explained-and-developed.ly:53 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) msgid "These chords will be in normal orientation" msgstr "Estos acordes estarán en la orientación normal" -#. input/lsr/fret-diagrams-explained-and-developed.ly:59 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:80 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:107 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:159 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:180 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:207 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:258 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:279 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:306 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) #, python-format msgid "110% of default size" msgstr "110% del tamaño predeterminado" -#. input/lsr/fret-diagrams-explained-and-developed.ly:77 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:177 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:276 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) msgid "Double barre used to test barre function" msgstr "Doble barra utilizada para probar la función de barra" -#. input/lsr/fret-diagrams-explained-and-developed.ly:104 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:204 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:303 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) msgid "C major for guitar, with capo on third fret" msgstr "Do mayor para guitarra, cejilla en el tercer traste" -#. input/lsr/fret-diagrams-explained-and-developed.ly:139 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:238 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:337 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) msgid "simple D chord, large top fret thickness" msgstr "acorde sencillo de Re, grosor del traste grande superior" -#. input/lsr/fret-diagrams-explained-and-developed.ly:151 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) msgid "These chords will be in landscape orientation" msgstr "Eestos acordes estarán en orientación horizontal" -#. input/lsr/fret-diagrams-explained-and-developed.ly:250 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) msgid "These chords will be in opposing-landscape orientation" msgstr "Estos acordes estarán en orientación horizontal opuesta" -#. input/lsr/grid-lines--changing-their-appearance.ly:42 (comment) +#. Documentation/snippets/fretboards-alternate-tables.ly:69 (comment) +msgid "Make a blank new fretboard table" +msgstr "Hacer una tabla de trastes en blanco" + +#. Documentation/snippets/fretboards-alternate-tables.ly:72 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" +msgstr "Hacer una tabla de trastes nueva como copia de default-fret-table" + +#. Documentation/snippets/fretboards-alternate-tables.ly:75 (comment) +msgid "Add a chord to custom-fretboard-table-one" +msgstr "Añadir un acorde a custom-fretboard-table-one" + +#. Documentation/snippets/fretboards-alternate-tables.ly:81 (comment) +msgid "Add a chord to custom-fretboard-table-two" +msgstr "Añadir un acorde a custom-fretboard-table-two" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "atajos" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +msgid "fingering orientations" +msgstr "orientaciones de digitación" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "sfoiz" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "sfor" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "sfoder" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "sfou" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "orientaciones de los números de cuerda" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "ssnol" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "(abajo derecha arriba)" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "ssnoarriba" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "ssnoabajo" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +msgid "ssnor" +msgstr "ssnor" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "definir desplazamiento de la digitación" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "FO" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "marcados" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +msgid "rit" +msgstr "rit" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +msgid "dimin" +msgstr "dimin" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "andantino" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "benmarcato" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "pdolce" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "LA MÚSICA %%%" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "c. 1" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "c. 2" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "c. 3" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "c. 4" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" +msgstr "c. 5" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "fin del c. 6" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" +msgstr "c. 7" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "comienzo del c. 8" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "fin del c. 8" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "fin del c. 9" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" +msgstr "c. 10" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "comienzo del c. 11" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "final del c. 11" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "comienzo del c. 2" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "final del c. 2" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "la nueva sección comienza aquí en La menor" + +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" +msgstr "comienzo del c. 6" + +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" +msgstr "final del c. 6" + +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" +msgstr "c. 8" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" +msgstr "comienzo del c. 9" + +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" +msgstr "final del c. 9" + +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" +msgstr "c. 11" + +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" +msgstr "guitarra" + +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" +msgstr "Crear un sello de corchete buscando el glifo en la fuente tipográfica" + +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" +msgstr "notasdeejemplo" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) msgid "this moves them up one staff space from the default position" msgstr "moverlas hacia arriba un espacio de pentagrama desde la posición de" -#. input/lsr/grid-lines--changing-their-appearance.ly:60 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) msgid "set up grids" msgstr "establecer rejillas" -#. input/lsr/grid-lines--changing-their-appearance.ly:62 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) msgid "set the grid interval to one quarter note" msgstr "establecer intervalo de rejilla a una negra" -#. input/lsr/grid-lines--changing-their-appearance.ly:68 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) msgid "this moves them to the right half a staff space" msgstr "moverlas a la derecha medio espacio de pentagrama" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:37 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) msgid "hides staff and notes so that only the grid lines are visible" msgstr "ocultar pentagrama y notas para que sólo se vea la rejilla" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:44 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) msgid "dummy notes to force regular note spacing" msgstr "notas falsas para forzar el espaciado regular de las notas" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:60 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) msgid "center grid lines horizontally below note heads" msgstr "centrar las líneas de rejilla horizontalmente bajo las cabezas" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:67 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) msgid "set line length and positioning:" msgstr "fijar la longitud y la posición de la línea:" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) msgid "two staff spaces above center line on hidden staff" msgstr "dos espacios por encima de la línea central sobre el pentagrama oculto" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) msgid "to four spaces below center line on visible staff" msgstr "" "hasta cuatro espacios por debajo de la línea central sobre el pentagrama " "visible" -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:49 (variable) +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "Ocultar el número de traste: útil para trazar un slide dentro de" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "o a partir de un punto casual del mástil." + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "ocultarTraste" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) msgid "drum" msgstr "percusion" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:55 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) msgid "Solution 1: Using a simple markup with a particular halign value" msgstr "Solución 1: usar un marcado sencillo con un valor concreto de halign" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" msgstr "Inconveniente: es un marcado, no una instrucción de matiz dinámico," -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) msgid "etc. will have no effect" msgstr "por lo que \\dynamicDown etc. no funcionan" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) msgid "semppMarkup" msgstr "semppMarcado" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:60 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) msgid "Solution 2: Using a dynamic script & shifting with" msgstr "Solución 2: usar una indicación de dinámica y desplazarla con" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) msgid "\\once \\override ... #'X-offset = .." msgstr "\\once \\override ... #'X-offset = .." -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) msgid "Drawback: \\once \\override needed for every invocation" msgstr "Inconveniente: se necesita \\once\\override para cada invocación" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) msgid "semppK" msgstr "semppK" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:70 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) msgid "Solution 3: Padding the dynamic script so the center-alignment" msgstr "" "Solución 3: aplicar relleno a la indicación dinámica para que el center-" "alignment" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) msgid "puts it at the correct position" msgstr "lo ponga en la posición correcta" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) msgid "Drawback: the padding really reserves the space, nothing else can be there" msgstr "" "Inconveniente: el relleno reserva el espacio realmente, no puede haber nada " "más aquí" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) msgid "semppT" msgstr "semppT" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:81 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" msgstr "" "Solución 4: indicación dinámica, fijando a 0 las dimensiones del texto " "adicional" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" msgstr "Inconveniente: para lilypond \\\"sempre\\\" no tiene dimensiones," -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) msgid "other stuff there => collisions" msgstr "lo que podría dar lugar a colisiones" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" msgstr "Inconveniente: asimismo, parece haber algo de espacio, por lo que" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) msgid "same alignment as without the additional text" msgstr "no es exactamente la misma alnieación que sin el texto adicional" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) msgid "semppM" msgstr "semppM" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:91 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" msgstr "" "Solución 5: indicación dinámica con desplazamiento explícito dentro de la " "función de Scheme" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:92 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) msgid "semppG" msgstr "semppG" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:98 (comment) -msgid "" -"Solution 6: Dynamic with explicit alignment. This has only effect, if one " -"sets X-offset!" -msgstr "" -"Solución 6: indicación dinámica con alineación explícita. ¡Sólo tiene efecto " -"si se fija X-offset!" +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "Solución 6: indicación dinámica con alineación explícita. ¡Sólo tiene efecto " -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:99 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "si se fija X-offset!" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) msgid "Drawback: One needs to set DynamicText #'X-offset!" msgstr "Inconveniente: ¡Hay que fijar DynamicText #'X-offset!" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:100 (comment) -msgid "" -"Drawback: Aligned at the right edge of the additional text, not at the " -"center of pp" -msgstr "" -"Inconveniente: alineado con el borde derecho del texto adicional, no con el " -"centro del pp" +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "Inconveniente: alineado con el borde derecho del texto adicional," + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "no con el centro del pp" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:101 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) msgid "semppMII" msgstr "semppMII" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) msgid "s" msgstr "s" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:113 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) msgid "sMarkup" msgstr "sMarkup" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:120 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) msgid "sK" msgstr "sK" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:131 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) msgid "sT" msgstr "sT" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:138 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) msgid "sM" msgstr "sM" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:145 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) msgid "sG" msgstr "sG" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:152 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) msgid "sMII" msgstr "sMII" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:156 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) msgid "Setting to ##f (false) gives the same result" msgstr "Al fijarlo a ##f (falso) obtenemos el mismo resultado" -#. input/lsr/how-to-change-fret-diagram-position.ly:28 (variable) -#. input/lsr/score-for-diatonic-accordion.ly:61 (variable) -#. input/lsr/showing-chords-at-changes.ly:32 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:47 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:45 (variable) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) msgid "harmonies" msgstr "armonias" -#. input/lsr/how-to-change-fret-diagram-position.ly:31 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" msgstr "a continuación la instrucción para mover el nombre del acorde" -#. input/lsr/how-to-change-fret-diagram-position.ly:34 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) msgid "THIS LINE IS THE SECOND METHOD" msgstr "esta línea es el segundo método" -#. input/lsr/how-to-change-fret-diagram-position.ly:44 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" msgstr "a continuación la instrucción para mover el diagrama de posición" -#. input/lsr/how-to-change-fret-diagram-position.ly:47 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) msgid "HERE IS THE SECOND METHOD" msgstr "aquí el segundo método" -#. input/lsr/incipit.ly:77 (variable) -#. input/lsr/incipit.ly:78 (context id) +#. Documentation/snippets/hymn-template.ly:50 (variable) +msgid "Timeline" +msgstr "LineaDeTiempo" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +msgid "Start score" +msgstr "Inicio de la partitura" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +msgid "Start pianostaff" +msgstr "Iniciar sistema de piano" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "inicio de pentagrama MD" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "Inicio de voz = \\\"Soprano\\\"" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "Final de voz = \\\"Soprano\\\"" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +msgid "Start Voice = \\\"Alto\\\"" +msgstr "Inicio de voz = \\\"Alto\\\"" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +msgid "End Voice = \\\"Alto\\\"" +msgstr "Final de voz = \\\"Alto\\\"" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "Final de pentagrama MD" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "Inicio de pentagrama MI" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "Inicio de voz = \\\"Tenor\\\"" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +msgid "End Voice = \\\"Tenor\\\"" +msgstr "Final de voz = \\\"Tenor\\\"" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +msgid "Start Voice = \\\"Bass\\\"" +msgstr "Inicio de voz = \\\"Bass\\\"" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +msgid "End Voice = \\\"Bass\\\"" +msgstr "Final de voz = \\\"Bass\\\"" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "Final de pentagrama MI" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +msgid "End pianostaff" +msgstr "Final del sistema de piano" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "Inicio del bloque paper" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +msgid "don't indent first system" +msgstr "no sangrar el primer sistema" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +msgid "shorten line length to suit music" +msgstr "acortar la longitur de la línea para adecuarse a la música" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "Final del boque paper" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) msgid "discantusIncipit" msgstr "discantusIncipit" -#. input/lsr/incipit.ly:114 (variable) -#. input/lsr/incipit.ly:115 (context id) +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) msgid "altusIncipit" msgstr "altusIncipit" -#. input/lsr/incipit.ly:130 (comment) -#. input/lsr/incipit.ly:142 (comment) -#. input/lsr/incipit.ly:172 (comment) -#. input/lsr/incipit.ly:181 (comment) +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) msgid "two measures" msgstr "dos compases" -#. input/lsr/incipit.ly:150 (variable) -#. input/lsr/incipit.ly:151 (context id) +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) msgid "tenorIncipit" msgstr "tenorIncipit" -#. input/lsr/incipit.ly:187 (variable) -#. input/lsr/incipit.ly:188 (context id) +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) msgid "bassusIncipit" msgstr "bassusIncipit" -#. input/lsr/incipit.ly:258 (comment) +#. Documentation/snippets/incipit.ly:265 (comment) msgid "no bar lines in staves or lyrics" msgstr "sin líneas divisorias en los pentagramas ni en la letra" -#. input/lsr/incipit.ly:261 (comment) +#. Documentation/snippets/incipit.ly:268 (comment) msgid "the next two instructions keep the lyrics between the bar lines" msgstr "" "las dos instrucciones siguientes mantienen la letra entre las barras de " "compás" -#. input/lsr/incipit.ly:272 (comment) +#. Documentation/snippets/incipit.ly:279 (comment) msgid "breaking also at those bar lines where a note overlaps" msgstr "saltar también en las barras en que se superpone una nota" -#. input/lsr/incipit.ly:273 (comment) +#. Documentation/snippets/incipit.ly:280 (comment) msgid "into the next measure. The command is commented out in this" msgstr "sobre el siguiente compás. La instrucción es un comentario en este" -#. input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly:16 (variable) +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) msgid "tuning" msgstr "afinacion" -#. input/lsr/jazz-combo-template.ly:54 (comment) +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "hacerPorcentaje" + +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) msgid "#(set-global-staff-size 16)" msgstr "#(set-global-staff-size 16)" -#. input/lsr/jazz-combo-template.ly:57 (comment) +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) msgid "Some macros %%%%%%%%%%%%%%%%%%%" msgstr "Algunos macros %%%%%%%%%%%%%%%%%%%" -#. input/lsr/jazz-combo-template.ly:59 (variable) +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) msgid "sl" msgstr "sl" -#. input/lsr/jazz-combo-template.ly:63 (variable) +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) msgid "nsl" msgstr "nsl" -#. input/lsr/jazz-combo-template.ly:67 (variable) +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) msgid "crOn" msgstr "crSi" -#. input/lsr/jazz-combo-template.ly:68 (variable) +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) msgid "crOff" msgstr "crNo" -#. input/lsr/jazz-combo-template.ly:70 (comment) +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) msgid "insert chord name style stuff here." msgstr "insertar aquí el código para el estilo de nombres de acorde" -#. input/lsr/jazz-combo-template.ly:72 (variable) +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) msgid "jazzChords" msgstr "acordesJazz" -#. input/lsr/jazz-combo-template.ly:74 (comment) +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" msgstr "Keys'n'thangs %%%%%%%%%%%%%%%%%" -#. input/lsr/jazz-combo-template.ly:78 (variable) +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) msgid "Key" msgstr "Tono" -#. input/lsr/jazz-combo-template.ly:80 (comment) +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) msgid "############ Horns ############" msgstr "############ Trompas ############" -#. input/lsr/jazz-combo-template.ly:82 (comment) +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) msgid "------ Trumpet ------" msgstr "------ Trompeta ------" -#. input/lsr/jazz-combo-template.ly:83 (variable) +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) msgid "trpt" msgstr "trpt" -#. input/lsr/jazz-combo-template.ly:87 (variable) +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) msgid "trpHarmony" msgstr "acordesTrp" -#. input/lsr/jazz-combo-template.ly:90 (variable) -#. input/lsr/jazz-combo-template.ly:270 (context id) +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) msgid "trumpet" msgstr "trompeta" -#. input/lsr/jazz-combo-template.ly:99 (comment) +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) msgid "------ Alto Saxophone ------" msgstr "------ Saxofón alto ------" -#. input/lsr/jazz-combo-template.ly:100 (variable) -msgid "alto" -msgstr "alto" - -#. input/lsr/jazz-combo-template.ly:104 (variable) +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) msgid "altoHarmony" msgstr "acordesAlto" -#. input/lsr/jazz-combo-template.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) msgid "altoSax" msgstr "saxoAlto" -#. input/lsr/jazz-combo-template.ly:116 (comment) +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) msgid "------ Baritone Saxophone ------" msgstr "------ Saxofón barítono ------" -#. input/lsr/jazz-combo-template.ly:117 (variable) +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) msgid "bari" msgstr "bari" -#. input/lsr/jazz-combo-template.ly:125 (variable) +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) msgid "bariHarmony" msgstr "acordesBari" -#. input/lsr/jazz-combo-template.ly:128 (variable) +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) msgid "bariSax" msgstr "saxoBari" -#. input/lsr/jazz-combo-template.ly:137 (comment) +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) msgid "------ Trombone ------" msgstr "------ Trombón ------" -#. input/lsr/jazz-combo-template.ly:138 (variable) +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) msgid "tbone" msgstr "tbon" -#. input/lsr/jazz-combo-template.ly:142 (variable) +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) msgid "tboneHarmony" msgstr "acordesTbon" -#. input/lsr/jazz-combo-template.ly:145 (variable) -#. input/lsr/jazz-combo-template.ly:274 (context id) +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) msgid "trombone" msgstr "trombon" -#. input/lsr/jazz-combo-template.ly:154 (comment) +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) msgid "############ Rhythm Section #############" msgstr "############ Sección rítmica #############" -#. input/lsr/jazz-combo-template.ly:156 (comment) +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) msgid "------ Guitar ------" msgstr "------ Guitarra ------" -#. input/lsr/jazz-combo-template.ly:157 (variable) +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) msgid "gtr" msgstr "guit" -#. input/lsr/jazz-combo-template.ly:165 (variable) +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) msgid "gtrHarmony" msgstr "acordesGuit" -#. input/lsr/jazz-combo-template.ly:169 (variable) -#. input/lsr/jazz-combo-template.ly:279 (context id) -#. input/lsr/polyphony-in-tablature.ly:57 (context id) -#. input/lsr/polyphony-in-tablature.ly:62 (context id) -msgid "guitar" -msgstr "guitarra" - -#. input/lsr/jazz-combo-template.ly:178 (comment) +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) msgid "------ Piano ------" msgstr "------ Piano ------" -#. input/lsr/jazz-combo-template.ly:179 (variable) +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) msgid "rhUpper" msgstr "mdArriba" -#. input/lsr/jazz-combo-template.ly:184 (variable) +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) msgid "rhLower" msgstr "mdAbajo" -#. input/lsr/jazz-combo-template.ly:190 (variable) +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) msgid "lhUpper" msgstr "miArriba" -#. input/lsr/jazz-combo-template.ly:195 (variable) +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) msgid "lhLower" msgstr "miAbajo" -#. input/lsr/jazz-combo-template.ly:201 (variable) +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) msgid "PianoRH" msgstr "PianoMD" -#. input/lsr/jazz-combo-template.ly:210 (variable) +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) msgid "PianoLH" msgstr "PianoMI" -#. input/lsr/jazz-combo-template.ly:228 (comment) +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) msgid "------ Bass Guitar ------" msgstr "------ Guitarra bajo ------" -#. input/lsr/jazz-combo-template.ly:242 (comment) +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) msgid "------ Drums ------" msgstr "------ Percusión ------" -#. input/lsr/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) msgid "drumContents" msgstr "contenidoPercusion" -#. input/lsr/jazz-combo-template.ly:265 (comment) +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) #, python-format msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" msgstr "Aquí va todo junto %%%%%%%%%%%%%%%%%%%%%%" -#. input/lsr/jazz-combo-template.ly:269 (context id) +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) msgid "horns" msgstr "trompas" -#. input/lsr/jazz-combo-template.ly:271 (context id) +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) msgid "altosax" msgstr "saxoalto" -#. input/lsr/jazz-combo-template.ly:272 (context id) +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) msgid "barichords" msgstr "acordesbari" -#. input/lsr/jazz-combo-template.ly:273 (context id) +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) msgid "barisax" msgstr "saxobari" -#. input/lsr/jazz-combo-template.ly:278 (context id) +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) msgid "chords" msgstr "acordes" -#. input/lsr/makam-example.ly:41 (comment) +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "M. Ravel, Sonatine (1905)" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "Primer movimiento" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "calderonLargo" + +#. Documentation/snippets/lyrics-old-spacing-settings.ly:39 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:77 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:76 (variable) +msgid "sopMusic" +msgstr "musicaSoprano" + +#. Documentation/snippets/lyrics-old-spacing-settings.ly:40 (comment) +#. Documentation/snippets/lyrics-old-spacing-settings.ly:46 (comment) +msgid "VERSE ONE" +msgstr "ESTROFA UNO" + +#. Documentation/snippets/lyrics-old-spacing-settings.ly:68 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:112 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:110 (context id) +msgid "women" +msgstr "mujeres" + +#. Documentation/snippets/lyrics-old-spacing-settings.ly:80 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:122 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:125 (context id) +msgid "men" +msgstr "hombres" + +#. Documentation/snippets/makam-example.ly:55 (comment) msgid "Initialize makam settings" msgstr "Iniciar ajustes de makam" -#. input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly:19 (variable) +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) msgid "bassfigures" msgstr "cifrasbajo" -#. input/lsr/manually-controlling-beam-positions.ly:21 (comment) +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) msgid "from upper staff-line (position 2) to center (position 0)" msgstr "desde la quinta línea (posición 2) hasta la tercera (posición 0)" -#. input/lsr/manually-controlling-beam-positions.ly:24 (comment) +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) msgid "from center to one above center (position 1)" msgstr "desde tercera línea hasta la cuarta (posición 1)" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:17 (variable) +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) msgid "speakOn" msgstr "hablarSi" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:33 (variable) +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) msgid "speakOff" msgstr "hablarNo" -#. input/lsr/markup-lines.ly:22 (comment) +#. Documentation/snippets/markup-lines.ly:23 (comment) msgid "Candide, Voltaire" msgstr "Candide, Voltaire" -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:43 (comment) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) msgid "the final bar line is not interrupted" msgstr "la barra final no se interrumpe" -#. input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly:17 (variable) +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) msgid "normalPos" msgstr "posNormal" -#. input/lsr/modern-tab-text-clef.ly:15 (variable) -msgid "TAB" -msgstr "TAB" - -#. input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly:52 (variable) +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) msgid "dashPlus" msgstr "dashPlus" -#. input/lsr/modifying-tuplet-bracket-length.ly:23 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) msgid "Set tuplets to be extendable..." msgstr "Hacer los grupos especiales extensibles..." -#. input/lsr/modifying-tuplet-bracket-length.ly:25 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) msgid "...to cover all items up to the next note" msgstr "... para que cubran todos los elementos hasta la nota siguiente" -#. input/lsr/modifying-tuplet-bracket-length.ly:29 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) msgid "...or to cover just whitespace" msgstr "... o para cubrir sólo el espacio vacio" -#. input/lsr/orchestra,-choir-and-piano-template.ly:41 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +msgid "space for instrumentName" +msgstr "espacio para instrumentName" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" +msgstr "espacio para shortInstrumentName" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) msgid "fluteMusic" msgstr "musicaFlauta" -#. input/lsr/orchestra,-choir-and-piano-template.ly:42 (variable) -msgid "oboeMusic" -msgstr "musicaOboe" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" +msgstr "Las notas tal como están escritas en un manuscrito para clarinete en La" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "se transcriben al tono de concierto." -#. input/lsr/orchestra,-choir-and-piano-template.ly:43 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) msgid "clarinetMusic" msgstr "musicaClarinete" -#. input/lsr/orchestra,-choir-and-piano-template.ly:44 (variable) -msgid "bassoonMusic" -msgstr "musicaFagot" - -#. input/lsr/orchestra,-choir-and-piano-template.ly:45 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) msgid "trumpetMusic" msgstr "musicaTrompeta" -#. input/lsr/orchestra,-choir-and-piano-template.ly:46 (variable) -msgid "tromboneMusic" -msgstr "musicaTrombon" - -#. input/lsr/orchestra,-choir-and-piano-template.ly:47 (variable) -msgid "hornIMusic" -msgstr "musicaTrompaI" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" +msgstr "La armadura se suele omitir para las trompas" -#. input/lsr/orchestra,-choir-and-piano-template.ly:48 (variable) -msgid "hornIIMusic" -msgstr "musicaTrompaII" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +msgid "hornMusic" +msgstr "musicaTrompa" -#. input/lsr/orchestra,-choir-and-piano-template.ly:49 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) msgid "percussionMusic" msgstr "musicaPercusion" -#. input/lsr/orchestra,-choir-and-piano-template.ly:52 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) msgid "altoIMusic" msgstr "musicaContraltoI" -#. input/lsr/orchestra,-choir-and-piano-template.ly:53 (variable) -msgid "altoILyrics" -msgstr "letraContraltoI" - -#. input/lsr/orchestra,-choir-and-piano-template.ly:54 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) msgid "altoIIMusic" msgstr "musicaContraltoII" -#. input/lsr/orchestra,-choir-and-piano-template.ly:55 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) +msgid "altoILyrics" +msgstr "letraContraltoI" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) msgid "altoIILyrics" msgstr "letraContraltoII" -#. input/lsr/orchestra,-choir-and-piano-template.ly:58 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) msgid "pianoRHMusic" msgstr "musicaPianoMD" -#. input/lsr/orchestra,-choir-and-piano-template.ly:59 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) msgid "pianoLHMusic" msgstr "musicaPianoMI" -#. input/lsr/orchestra,-choir-and-piano-template.ly:60 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) msgid "violinIMusic" msgstr "musicaViolinI" -#. input/lsr/orchestra,-choir-and-piano-template.ly:61 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) msgid "violinIIMusic" msgstr "musicaViolinII" -#. input/lsr/orchestra,-choir-and-piano-template.ly:62 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) msgid "violaMusic" msgstr "musicaViola" -#. input/lsr/percussion-beaters.ly:18 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "shortInstrumentName, midiInstrument, etc." + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "se pueden fijar aquí también" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "Declarar que el Do central escrito en la música" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "que sigue suena un Si bemol de concierto, para" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "la salida que utiliza alturas sonoras como el MIDI." + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "Imprimir la música para un clarinete en Si bemol" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:148 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "\\set Staff.autoBeaming = ##f % desactiva todo el barrado automático" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "applies to split up stems" +msgstr "se aplica a las plicas divididas hacia arriba" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:153 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "\\autoBeamOff % se aplica a las plicas hacia arriba combinadas" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:158 (comment) +msgid "applies to down stems" +msgstr "se aplica a las plicas hacia abajo" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) msgid "stick" msgstr "baqueta" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:50 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) msgid "Permit line breaks within tuplets" msgstr "Permitir saltos de línea dentro de grupos especiales" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:52 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) msgid "Allow beams to be broken at line breaks" msgstr "Permitir romper barras en saltos de línea" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:59 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) msgid "Insert a manual line break within a tuplet" msgstr "Insertar salto de línea manual dentro de un grupo especial" -#. input/lsr/piano-template-with-centered-dynamics.ly:61 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) msgid "pedal" msgstr "pedal" -#. input/lsr/piano-template-with-centered-dynamics.ly:74 (comment) -msgid "define Dynamics context" -msgstr "definir el contexto Dynamics" +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "L. van Beethoven" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "Sonata para piano núm. 21 - Dem Grafen von Waldstein Gewidmet" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "coral de los compases 34 a 40 y siguientes" -#. input/lsr/piano-template-with-centered-dynamics.ly:95 (comment) -msgid "modify PianoStaff context to accept Dynamics context" -msgstr "modificar el contexto PianoStaff para que acepte el contexto Dynamics" +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "Voz 1 de la MD" -#. input/lsr/polyphony-in-tablature.ly:56 (context id) +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "(" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr ")" + +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "Voz 2 de la MD" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) msgid "tab" msgstr "tab" -#. input/lsr/positioning-multi-measure-rests.ly:57 (comment) -msgid "Multi-measure rests by default are set under the second line" -msgstr "" -"Los silencios multicompás se sitúan de forma predeterminada bajo la segunda " -"línea" +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "MMR - Silencio multicompás" -#. input/lsr/positioning-multi-measure-rests.ly:59 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "Los silencios multicompás se establecen por omisión debajo de la cuarta línea line" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) msgid "They can be moved with an override" msgstr "Se pueden mover con un override" -#. input/lsr/positioning-multi-measure-rests.ly:62 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) msgid "A value of 0 is the default position;" msgstr "Un valor de cero es la posición predeterminada;" -#. input/lsr/positioning-multi-measure-rests.ly:63 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) msgid "the following trick moves the rest to the center line" msgstr "el truco siguiente mueve el silencio a la línea central" -#. input/lsr/positioning-multi-measure-rests.ly:66 (comment) -msgid "Multi-measure rests in odd-numbered voices are under the top line" -msgstr "Los silencios multicompás de las voces impares están bajo la línea superior" +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "Los silencios multicompás de las voces de impares van bajo la línea superior" -#. input/lsr/positioning-multi-measure-rests.ly:68 (comment) -msgid "Multi-measure rests in even-numbered voices are under the bottom line" +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" msgstr "Los silencios multicompás de las voces pares están bajo la línea inferior" -#. input/lsr/positioning-multi-measure-rests.ly:70 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) msgid "They remain separated even in empty measures" msgstr "Siguen estando separados incluso en compases vacíos" -#. input/lsr/positioning-multi-measure-rests.ly:72 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) msgid "This brings them together even though there are two voices" msgstr "Así los juntamos incluso si hay dos voces" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:28 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:49 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) msgid "Set segno sign as rehearsal mark and adjust size if needed" msgstr "Fijar llamada como letra de ensayo y ajustar su tamaño si es necesario" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:29 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:51 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) msgid "\\once \\override Score.RehearsalMark #'font-size = #3" msgstr "\\once \\override Score.RehearsalMark #'font-size = #3" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:35 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) msgid "Set coda sign as rehearsal mark and adjust size if needed" msgstr "Fijar llamada de coda como letra de ensayo y ajustar tamaño si es necesario" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:42 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) msgid "Should Coda be on anew line?" msgstr "¿Debe ir la Coda sobre una línea nueva?" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:43 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) msgid "Coda NOT on new line: use \\nobreak" msgstr "Coda NO en línea nueva: usar \\nobreak" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:44 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) msgid "Coda on new line: DON'T use \\nobreak" msgstr "Coda en línea nueva: NO USAR \\nobreak" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:45 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) msgid "\\noBreak" msgstr "\\noBreak" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:54 (comment) -msgid "Here begins the trickery! " +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" msgstr "¡Aquí comienzan los trucos!" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:55 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) msgid "" "\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " "lines." msgstr "\\cadenzaOn suprime la cuenta de compases y \\stopStaff quita el pentagrama" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:58 (comment) -msgid "Some examples of possible text-displays " +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" msgstr "Algunos ejemplos de text-displays posibles" # fuzzy. FVD -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:60 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) msgid "text line-aligned" msgstr "texto line-aligned" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:61 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) msgid "==================" msgstr "==================" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:62 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:68 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) msgid "Move text to the desired position" msgstr "Mover el texto a la posición deseada" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" msgstr "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:64 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) msgid "| s1*0^\\markup { D.S. al Coda } }" msgstr "| s1*0^\\markup { D.S. al Coda } }" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:66 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) msgid "text center-aligned" msgstr "texto center-aligned" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:67 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) msgid "====================" msgstr "====================" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:69 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" msgstr "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:70 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" msgstr "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:72 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) msgid "text and symbols center-aligned" msgstr "texto y símbolos center-aligned" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:73 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) msgid "===============================" msgstr "===============================" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:74 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) msgid "" "Move text to the desired position and tweak spacing for optimum text " "alignment" @@ -12603,39 +10029,39 @@ msgstr "" "Mover el texto a la posición deseada y ajustar el espacio para una " "alineación óptima" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:75 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" msgstr "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:81 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) msgid "Increasing the unfold counter will expand the staff-free space" msgstr "El aumento del contador de despliegue expande el espacio de staff-free" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:86 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) msgid "Resume bar count and show staff lines again" msgstr "Reanudar la cuenta de compases y mostrar el pentagrama de nuevo" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:90 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) msgid "Should Coda be on new line?" msgstr "¿La Coda va en una línea nueva?" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:91 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) msgid "Coda NOT on new line: DON'T use \\break" msgstr "Coda NO en nueva línea: NO USAR \\break" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:92 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) msgid "Coda on new line: use \\break" msgstr "Coda en nueva línea: usar \\break" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:95 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) msgid "Show up, you clef and key!" msgstr "¡Mostraos, clave y armadura!" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:99 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) msgid "Set coda sign as rehearsal mark and adjust size and position" msgstr "Fijar el signo de coda como letra de enzayo y ajustar el tamaño y posición" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:101 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) msgid "" "Put the coda sign ontop of the (treble-)clef dependend on coda's line-" "position" @@ -12643,137 +10069,205 @@ msgstr "" "Poner el signo de coda encima de la clave dependiendo de la line-position de " "la coda" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:103 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) msgid "Coda NOT on new line, use this:" msgstr "Coda NO en nueva línea, hacer esto:" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:104 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" msgstr "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:106 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) msgid "Coda on new line, use this:" msgstr "Coda en nueva línea, hacer esto:" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:112 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) msgid "The coda" msgstr "La coda" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:32 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "Habilitar la impresión del número del primer compás" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) msgid "Prevent bar numbers at the end of a line and permit them elsewhere" msgstr "No poner números de compás al final de la línea, pero sí en otros lugares" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:39 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) msgid "Draw a box round the following bar number(s)" msgstr "Pintar una caja rodeando al siguiente(s) número de compás" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:44 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) msgid "Draw a circle round the following bar number(s)" msgstr "Rodear con un círculo el siguiente(s) número de compás" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:42 (comment) -msgid "Metronome marks below the staff " -msgstr "las marcas de metrónomo debajo del pentagrama" +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" +msgstr "Las marcas de metrónomo debajo del pentagrama" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:47 (comment) +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) msgid "Rehearsal marks below the staff" msgstr "Letras de ensayo debajo del pentagrama" -#. input/lsr/printing-music-with-different-time-signatures.ly:50 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) msgid "Bassklarinette" msgstr "ClarineteBajo" -#. input/lsr/printing-music-with-different-time-signatures.ly:90 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) msgid "Perkussion" msgstr "Percusion" -#. input/lsr/quoting-another-voice-with-transposition.ly:53 (variable) +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:21 (context id) +msgid "voc" +msgstr "voc" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) msgid "quoteTest" msgstr "pruebaDeCita" -#. input/lsr/quoting-another-voice-with-transposition.ly:54 (comment) +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) msgid "french horn" msgstr "trompa" -#. input/lsr/quoting-another-voice.ly:47 (variable) +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) msgid "quoteMe" msgstr "citaMe" -#. input/lsr/quoting-another-voice.ly:52 (variable) +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) msgid "original" msgstr "original" -#. input/lsr/redefining-grace-note-global-defaults.ly:49 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:36 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "cuadro de rangos para la flauta dulce contabaja paetzold" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) msgid "startAcciaccaturaMusic" msgstr "inicioMusicaAcciaccatura" -#. input/lsr/redefining-grace-note-global-defaults.ly:55 (variable) +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) msgid "stopAcciaccaturaMusic" msgstr "finMusicaAcciaccatura" -#. input/lsr/removing-the-first-empty-line.ly:60 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) msgid "To use the setting globally, uncomment the following line:" msgstr "" "Para usar el ajuste de forma global, quite el comentario de la líne " "siguiente:" -#. input/lsr/removing-the-first-empty-line.ly:61 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) msgid "\\override VerticalAxisGroup #'remove-first = ##t" msgstr "\\override VerticalAxisGroup #'remove-first = ##t" -#. input/lsr/removing-the-first-empty-line.ly:70 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) msgid "To use the setting globally, comment this line," msgstr "Para usar el ajuste globalmente, haga un comentario de la línea siguiente:" -#. input/lsr/removing-the-first-empty-line.ly:71 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) msgid "uncomment the line in the \\layout block above" msgstr "quite el comentario de la línea del bloque \\layout de arriba" -#. input/lsr/reverting-default-beam-endings.ly:40 (comment) +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) msgid "Default beaming" msgstr "Barrado predeterminado" -#. input/lsr/reverting-default-beam-endings.ly:43 (comment) -msgid "Revert default values in scm/auto-beam.scm for 12/8 time" -msgstr "Revertir los valores predeterminados en scm/auto-beam.scm para el 12/8" - -#. input/lsr/reverting-default-beam-endings.ly:49 (comment) +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) msgid "Set new values for beam endings" msgstr "establecer valores nuevos para finales de barra" -#. input/lsr/rhythmic-slashes.ly:25 (comment) +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) msgid "Macro to print single slash" msgstr "Macro para imprimir una barra inclinada única" -#. input/lsr/rhythmic-slashes.ly:26 (variable) +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) msgid "rs" msgstr "rs" -#. input/lsr/rhythmic-slashes.ly:33 (comment) +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) msgid "Function to print a specified number of slashes" msgstr "Función para imprimir un número especificado de barras inclinadas" -#. input/lsr/rhythmic-slashes.ly:34 (variable) +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) msgid "comp" msgstr "comp" -#. input/lsr/score-for-diatonic-accordion.ly:69 (variable) +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "Beethoven, Op. 81a" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "Sonata para piano núm. 26 - Das Lebewohl" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "Mov. II - Abwesenheit" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "Compases 31 a 34" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "\\override SpacingSpanner #'strict-grace-spacing = ##t" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +msgid "sopranonotes" +msgstr "notasSoprano" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +msgid "sopranowords" +msgstr "letraSoprano" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +msgid "altonotes" +msgstr "notasAlto" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +msgid "altowords" +msgstr "letraContralto" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +msgid "tenornotes" +msgstr "notasTenor" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +msgid "tenorwords" +msgstr "letraTenor" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +msgid "bassnotes" +msgstr "notasBajo" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +msgid "basswords" +msgstr "letraBajo" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "estrofa" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) msgid "NoStem" msgstr "sinPlica" -#. input/lsr/score-for-diatonic-accordion.ly:70 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) msgid "NoNoteHead" msgstr "sinCabezas" -#. input/lsr/score-for-diatonic-accordion.ly:71 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) msgid "ZeroBeam" msgstr "sinBarras" -#. input/lsr/score-for-diatonic-accordion.ly:73 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) msgid "staffTabLine" msgstr "lineaTablatura" -#. input/lsr/score-for-diatonic-accordion.ly:78 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) msgid "" "Shows one horizontal line. The vertical line (simulating a bar-line) is " "simulated with a gridline" @@ -12781,75 +10275,73 @@ msgstr "" "Muestra una línea horizontal. La línea horizontal (que simula una divisoria) " "se simula con una línea de rejilla" -#. input/lsr/score-for-diatonic-accordion.ly:83 (comment) -msgid "disable the following line to see the the noteheads while writing the song " -msgstr "" -"Deshabilite la línea siguiente para ver las cabezas mientras escribe la " -"canción" +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) +msgid "disable the following line to see the the noteheads while writing the song" +msgstr "Deshabilite la línea siguiente para ver las cabezas mientras escribe la canción" -#. input/lsr/score-for-diatonic-accordion.ly:87 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) msgid "The beam between 8th-notes is used to draw the push-line" msgstr "La barra entre las corcheas se usa para trazar la línea de cerrar" -#. input/lsr/score-for-diatonic-accordion.ly:88 (comment) -msgid "How to fast write the push-lines: " +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" msgstr "Cuán rápido escribir las líneas de cerrar:" -#. input/lsr/score-for-diatonic-accordion.ly:89 (comment) -msgid "1. write repeatedly 'c c c c c c c c |' for the whole length of the song " -msgstr "1. escribir repetidamente 'c c c c c c c c |' en toda la canción" +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) +msgid "1. write repeatedly 'c c c c c c c c |' for the whole length of the song" +msgstr "1. escriba repetidamente 'c c c c c c c c |' en toda la canción" -#. input/lsr/score-for-diatonic-accordion.ly:90 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) msgid "2. uncomment the line \\NoNoteHead" -msgstr "2. quitar el comentario de la línea \\NoNoteHead" +msgstr "2. quite el comentario de la línea \\NoNoteHead" -#. input/lsr/score-for-diatonic-accordion.ly:91 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) msgid "3. compile" -msgstr "3. compilar" +msgstr "3. compile" -#. input/lsr/score-for-diatonic-accordion.ly:92 (comment) -msgid "4. Mark the positions on which push/pull changes. " -msgstr "4. Marcar las posiciones en las que cambia el abrir o cerrar" +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." +msgstr "4. Marque las posiciones en las que cambia el abrir o cerrar" -#. input/lsr/score-for-diatonic-accordion.ly:93 (comment) -msgid "In the score-picture click on the position the push- or pull-part starts " +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) +msgid "In the score-picture click on the position the push- or pull-part starts" msgstr "" "En la imagen de la partitura pulse sobre la posición en que inician las " "partes de abrir o cerrar" -#. input/lsr/score-for-diatonic-accordion.ly:94 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) msgid "(on the noteHead, the cursor will change to a hand-icon)." msgstr "(sobre la cabeza, el cursor cambia a una mano)." -#. input/lsr/score-for-diatonic-accordion.ly:95 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) msgid "The cursor in the source code will jump just at this position." msgstr "El cursor sobre la fuente salta a esta posición." -#. input/lsr/score-for-diatonic-accordion.ly:96 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) msgid "a) If a push-part starts there, replace the 'c' by an 'e['" msgstr "a) Si en ese lugar empieza una parte de cerrar, cambie la 'c' por 'e['" -#. input/lsr/score-for-diatonic-accordion.ly:97 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) msgid "b) If a pull-part starts there, replace the 'c' by an 's'" msgstr "b) Si en ese lugar empieza una parte de abrir, cambie la 'c' por una 's'" -#. input/lsr/score-for-diatonic-accordion.ly:98 (comment) -msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." msgstr "5. Cambie al modo de sobreescritura de texto pulsando la tecla 'ins'." -#. input/lsr/score-for-diatonic-accordion.ly:99 (comment) -msgid "6. For the pull-parts overwrite the 'c' with 's' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" msgstr "6. Para las partes de abrir sobreescriba la 'c' con 's' " -#. input/lsr/score-for-diatonic-accordion.ly:100 (comment) -msgid "7. For every push-part replace the last 'c' with 'e]' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" msgstr "7. Para cada parte de cerrar cambie la última 'c' por una 'e]' " -#. input/lsr/score-for-diatonic-accordion.ly:101 (comment) -msgid "8. Switch into 'insert-mode' again " +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" msgstr "8. Pase de nuevo al modo de inserción" -#. input/lsr/score-for-diatonic-accordion.ly:102 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) msgid "" "9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " "e] s s)" @@ -12857,28 +10349,28 @@ msgstr "" "9. Al final se verá como p.ej. (s s e[ c | c c c c c c c c | c c c c c c e] " "s s)" -#. input/lsr/score-for-diatonic-accordion.ly:103 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) msgid "10. re-enable the line \\NoNoteHead" msgstr "10. rehabilite la línea \\NoNoteHead" -#. input/lsr/score-for-diatonic-accordion.ly:113 (comment) -msgid "Accordion melody in tabulator score\t\t" -msgstr "Melodía de acordeón en partitura de tablatura\t\t" +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" +msgstr "Melodía de acordeón en partitura de tablatura" -#. input/lsr/score-for-diatonic-accordion.ly:114 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) msgid "1. Place a copy of the piano melody below" msgstr "1. Ponga debajo una copia de la melodía de piano" -#. input/lsr/score-for-diatonic-accordion.ly:115 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:134 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) msgid "" "2. Separate piano melody into pull- and push-parts according to the " -"staffTabLine you've already made " +"staffTabLine you've already made" msgstr "" "2. Separe la melodía de piano en partes de abrir y de cerrar de acuerdo con " "la staffTabLine que ha preparado" -#. input/lsr/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) msgid "" "3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " "reference) and then change the second line using the transformation paper" @@ -12887,117 +10379,133 @@ msgstr "" "conserva intacta como referencia) y luego cambie la segunda línea usando el " "papel de transformación" -#. input/lsr/score-for-diatonic-accordion.ly:117 (comment) -msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" msgstr "o los macros 'conv2diaton push.bsh' y 'conv2diaton pull.bsh' " -#. input/lsr/score-for-diatonic-accordion.ly:118 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:137 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) msgid "Tips:" msgstr "Consejos:" -#. input/lsr/score-for-diatonic-accordion.ly:119 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:138 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" msgstr "- En la búsqueda y sustitución de jEdit marque la opción 'Keep Dialog'" -#. input/lsr/score-for-diatonic-accordion.ly:121 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) msgid "AccordionTabTwoCBesDur" msgstr "AcordeonTabDosCSibM" -#. input/lsr/score-for-diatonic-accordion.ly:122 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) msgid "pull 1" msgstr "abrir 1" -#. input/lsr/score-for-diatonic-accordion.ly:123 (comment) -msgid "8 8 8 | " -msgstr "8 8 8 | " +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" +msgstr "8 8 8 |" -#. input/lsr/score-for-diatonic-accordion.ly:125 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) msgid "push 2" msgstr "cerrar 2" -#. input/lsr/score-for-diatonic-accordion.ly:126 (comment) -msgid "4 | " -msgstr "4 | " +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" +msgstr "4 |" -#. input/lsr/score-for-diatonic-accordion.ly:128 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) msgid "pull 3" msgstr "abrir 3" -#. input/lsr/score-for-diatonic-accordion.ly:129 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) msgid "2 r8 }" msgstr "2 r8 }" -#. input/lsr/score-for-diatonic-accordion.ly:133 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "TablaturaAcordeón" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) msgid "1. Place a copy of the piano melody above" msgstr "1. Haga una copia de la melodía de piano de arriba" -#. input/lsr/score-for-diatonic-accordion.ly:135 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) msgid "" "3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " -"reference) and then " +"reference) and then" msgstr "" "3. Para cada línea: duplique la línea. marque la primera como comentario (la " "conserva intacta como referencia) y después" -#. input/lsr/score-for-diatonic-accordion.ly:136 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) msgid "change the second line using the transformation paper" msgstr "cambie la segunda línea usando el papel de transformación" -#. input/lsr/score-for-diatonic-accordion.ly:139 (comment) -msgid "- " -msgstr "- " +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "-" -#. input/lsr/score-for-diatonic-accordion.ly:150 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "La línea vertical (que simula una divisoria) en" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" +msgstr "el duracionesPentagramaBajo es una línea de rejilla" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) msgid "4/4 - tact. How many beats per bar" msgstr "4/4 - tact. Cuántos pulsos por compás" -#. input/lsr/score-for-diatonic-accordion.ly:152 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) msgid "The following line has to be adjusted O-F-T-E-N." msgstr "La línea siguiente se tiene que ajustar A M-E-N-U-D-O." -#. input/lsr/score-for-diatonic-accordion.ly:161 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) msgid "staffVoice" msgstr "vozPentagrama" -#. input/lsr/score-for-diatonic-accordion.ly:169 (context id) -msgid "melodyVoi" -msgstr "melodiaVoi" +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" +msgstr "vozPentagrama" -#. input/lsr/score-for-diatonic-accordion.ly:175 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) msgid "staffAccordionMel" msgstr "pentagramaAcordMelodia" -#. input/lsr/score-for-diatonic-accordion.ly:176 (comment) -msgid "Set the accidentals (Vorzeichen) for each note, " +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," msgstr "Fijar las alteraciones (Vorzeichen) para cada nota," -#. input/lsr/score-for-diatonic-accordion.ly:177 (comment) -msgid "do not remember them for the rest of the measure. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." msgstr "no recordarlas para el resto del compás." -#. input/lsr/score-for-diatonic-accordion.ly:196 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) msgid "BassRhytm" msgstr "DuracionesBajo" -#. input/lsr/score-for-diatonic-accordion.ly:197 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) msgid "LyricBassRhythmI" msgstr "DuracionesLetraBajoI" -#. input/lsr/score-for-diatonic-accordion.ly:199 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) msgid "staffBassRhytm" msgstr "duracionesPentagramaBajo" -#. input/lsr/score-for-diatonic-accordion.ly:200 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "bajoPentagrama" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) msgid "This is not a RhythmicStaff because it must be possible to append lyrics." msgstr "Esto no es un RhythmicStaff porque se debe poder aplicar letra." -#. input/lsr/score-for-diatonic-accordion.ly:202 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) msgid "x.y" msgstr "x.y" -#. input/lsr/score-for-diatonic-accordion.ly:204 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) msgid "" "Shows one horizontal line. The vertical line (simulating a bar-line) is " "simulated by a grid" @@ -13005,147 +10513,197 @@ msgstr "" "Muestra una línea horizontal. La línea vertical (que simula una divisoria) " "está simulada por una rejilla" -#. input/lsr/score-for-diatonic-accordion.ly:205 (comment) -msgid "Search for 'grid' in this page to find all related functions " +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" msgstr "" "Busque por el término 'grid' en esta página para hallar todas las funciones " "relacionadas" -#. input/lsr/score-for-diatonic-accordion.ly:208 (context id) -msgid "VoiceBassRhytm" -msgstr "DuracionesVozBajo" +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +msgid "notes" +msgstr "notas" -#. input/lsr/score-for-diatonic-accordion.ly:221 (comment) -msgid "" -"The vertical line (simulating a bar-line) in the staffBassRhytm is a " -"gridline " -msgstr "" -"La línea vertical (que simula una divisoria) en el duracionesPentagramaBajo " -"es una línea de rejilla" +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "Igual que \\flageolet, pero más pequeño" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" +msgstr "¡El segundo calderón se ignora!" + +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "NR 1.5 Notas simultáneas" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:25 (comment) -msgid "Define the fret diagrams to be used" -msgstr "Definir los diagramas de posiciones que se van a usar" +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "L. v. Beethoven, Op. 111" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) -msgid "cFretDiagram" -msgstr "diagramaPosicionDo" +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "Sonata para piano núm. 32" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:30 (variable) -msgid "gFretDiagram" -msgstr "diagramaPosicionSol" +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "Movto. II - Arietta - Adagio molto semplice e cantabile" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:34 (variable) +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "compases 108 a 118" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +msgid "trillFlat" +msgstr "trinoBemol" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "Voz MD 1" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "Voz MD 2" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +msgid "LH staff" +msgstr "pentragrama MI" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) msgid "verseI" msgstr "estrofaI" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:39 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) msgid "verseII" msgstr "estrofaII" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (variable) -msgid "theChords" -msgstr "losAcordes" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:46 (comment) -msgid "insert the chords for chordnames here" -msgstr "inserte aquí los acordes para chordnames" +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "inserte aquí los acordes para chordnames y fretboards" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:51 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) msgid "staffMelody" msgstr "melodiaPentagrama" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:52 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "Teclee aquí las notas de la melodía" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) msgid "voiceMelody" msgstr "melodiaVoz" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:56 (comment) -msgid "Type notes and fret diagram markups here" -msgstr "Teclee aquí las notas y los marcados de diagramas de posiciones" +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "title = \\\"Le Lac des Cygnes\\\"" + +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "subtitle = \\\"Danse Napolitaine\\\"" + +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" + +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "arranger = \\\"arr. Laurence Sardain\\\"" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:56 (variable) -msgid "snapPizzicato" -msgstr "pizzicatoSnap" +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "footer = \\\"Mutopia-2006/12/22-896\\\"" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:58 (comment) -msgid "now it can be used as \\snappizzicato after the note/chord" -msgstr "ahora se puede usar como pizzicatoSnap después de la nota o acorde" +#. Documentation/snippets/staff-headword.ly:38 (variable) +msgid "trompette" +msgstr "trompeta" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "pandereta" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:59 (comment) -msgid "Note that a direction (-, ^ or _) is required." -msgstr "Observe que se requiere una dirección (-, ^ ó _)." +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "panderetaMidi" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:62 (comment) -msgid "This does NOT work:" -msgstr "Esto NO funciona:" +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "prima" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:63 (comment) -msgid "\\snapPizzicato" -msgstr "\\snapPizzicato" +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "superiorA" -#. input/lsr/stemlets.ly:35 (comment) +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "inferiorA" + +#. Documentation/snippets/stemlets.ly:36 (comment) msgid "N.B. use Score.Stem to set for the whole score." msgstr "Nota: use Score.Stem para establecerlo para la partitura entera." -#. input/lsr/string-quartet-template-simple.ly:42 (variable) +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "extensorNumeroCuerda" + +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) msgid "violinOne" msgstr "violinUno" -#. input/lsr/string-quartet-template-simple.ly:51 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) msgid "violinTwo" msgstr "violinDos" -#. input/lsr/string-quartet-template-simple.ly:60 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) msgid "viola" msgstr "viola" -#. input/lsr/string-quartet-template-with-separate-parts.ly:80 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) msgid "piece.ly" msgstr "pieza.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:81 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) msgid "(This is the global definitions file)" msgstr "(Este es el archivo de definiciones globales)" -#. input/lsr/string-quartet-template-with-separate-parts.ly:88 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) msgid "Violinone" msgstr "violinuno" -#. input/lsr/string-quartet-template-with-separate-parts.ly:93 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:99 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:106 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) msgid "*********************************" msgstr "*********************************" -#. input/lsr/string-quartet-template-with-separate-parts.ly:94 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) msgid "Violintwo" msgstr "ViolinDos" -#. input/lsr/string-quartet-template-with-separate-parts.ly:100 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) msgid "Viola" msgstr "Viola" -#. input/lsr/string-quartet-template-with-separate-parts.ly:107 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) msgid "Cello" msgstr "Cello" -#. input/lsr/string-quartet-template-with-separate-parts.ly:113 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) msgid "**********************************" msgstr "**********************************" -#. input/lsr/string-quartet-template-with-separate-parts.ly:124 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) msgid "These are the other files you need to save on your computer" msgstr "Estos son los tros archivos que debe guardar en su sistema" -#. input/lsr/string-quartet-template-with-separate-parts.ly:126 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) msgid "score.ly" msgstr "partitura.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:127 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) msgid "(This is the main file)" msgstr "(Este es el archivo principal)" -#. input/lsr/string-quartet-template-with-separate-parts.ly:130 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) #, python-format msgid "" "\\include \\\"piece.ly\\\" %%% uncomment this line when using a " @@ -13154,367 +10712,622 @@ msgstr "" "\\include \\\"piece.ly\\\" %%% quite la marca de comentario de " "esta línea si está usando un archivo aparte" -#. input/lsr/string-quartet-template-with-separate-parts.ly:139 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) msgid "{ Uncomment this block when using separate files" msgstr "{ Quite la marca de comentario de este bloque si está usando archivos aparte" -#. input/lsr/string-quartet-template-with-separate-parts.ly:141 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) msgid "vn1.ly" msgstr "vn1.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:142 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) msgid "(This is the Violin 1 part file)" msgstr "(Este es el archivo de particella del violín 1)" -#. input/lsr/string-quartet-template-with-separate-parts.ly:151 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) msgid "vn2.ly" msgstr "vn2.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:152 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) msgid "(This is the Violin 2 part file)" msgstr "(Este es el archivo de particella del violín 2)" -#. input/lsr/string-quartet-template-with-separate-parts.ly:161 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) msgid "vla.ly" msgstr "vla.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:162 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) msgid "(This is the Viola part file)" msgstr "(Este es el archivo de particella de la viola)" -#. input/lsr/string-quartet-template-with-separate-parts.ly:171 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) msgid "vlc.ly" msgstr "vlc.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:172 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) msgid "(This is the Cello part file)" msgstr "(Este es el archivo de particella del cello)" -#. input/lsr/sub-dividing-beams.ly:82 (comment) +#. Documentation/snippets/subdividing-beams.ly:78 (comment) msgid "Set beam sub-group length to an eighth note" msgstr "Fijar la longitud del subgrupo de barras a una corchea" -#. input/lsr/sub-dividing-beams.ly:86 (comment) +#. Documentation/snippets/subdividing-beams.ly:83 (comment) msgid "Set beam sub-group length to a sixteenth note" msgstr "Fijar la longitud del subgrupo de barras a una semicorchea" -#. input/lsr/suppressing-warnings-for-clashing-note-columns.ly:20 (variable) +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) msgid "ignore" msgstr "ignorar" -#. input/lsr/three-sided-box.ly:16 (comment) +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "NR 1.8 Texto" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "L. v. Beethoven, Op. 110" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "Sonata para piano núm. 31" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "compases 1 a 7" + +#. Documentation/snippets/text-headword.ly:45 (comment) +msgid "RH staff" +msgstr "pentagrama MD" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) msgid "New command to add a three sided box, with sides north, west and south" msgstr "" "Instrucción nueva para añadir una caja con tres lados apuntando al norte, " "oeste y sur" -#. input/lsr/three-sided-box.ly:17 (comment) +#. Documentation/snippets/three-sided-box.ly:18 (comment) msgid "Based on the box-stencil command defined in scm/stencil.scm" msgstr "Basado en la instrucción box-stencil definida en scm/stencil.scm" -#. input/lsr/three-sided-box.ly:18 (comment) -msgid "Note that \\\";\\\" is used to comment a line in Scheme" +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" msgstr "Observe que utilizamos \\\";\\\" para comentar una línea en Scheme" -#. input/lsr/three-sided-box.ly:32 (comment) -msgid "The corresponding markup command, based on the \\box command defined " +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" msgstr "" "La instrucción de marcado correspondiente, basada en la instrucción \\box " "definida" -#. input/lsr/three-sided-box.ly:33 (comment) +#. Documentation/snippets/three-sided-box.ly:34 (comment) msgid "in scm/define-markup-commands.scm" msgstr "en scm/define-markup-commands.scm" -#. input/lsr/three-sided-box.ly:45 (comment) +#. Documentation/snippets/three-sided-box.ly:46 (comment) msgid "Test it:" msgstr "Probarla:" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:36 (comment) +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "Cambiar el estilo permanentemente" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +msgid "Revert to default style:" +msgstr "Retornar al estilo predeterminado:" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "estilo de un solo dígito para el siguiente compás únicamente" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) msgid "make the staff lines invisible on staves" msgstr "hacer invisibles las líneas de los pentagramas" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:128 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) msgid "incipitDiscantus" msgstr "incipitDiscantus" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:152 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) msgid "incipitAltus" msgstr "incipitAltus" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:177 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) msgid "incipitTenor" msgstr "incipitTenor" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:203 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) msgid "incipitBassus" msgstr "incipitBassus" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:227 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) msgid "StaffGroup is used instead of ChoirStaff to get bar lines between systems" msgstr "" "StaffGroup se usa en lugar de ChoirStaff para tener líneas divisorias entre " "los sistemas" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:259 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" msgstr "" "Mantener la letra del bajo fuera del grupo de pentagrama para evitar las " "barras de compás" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:260 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) msgid "between the lyrics." msgstr "entre las sílabas del texto" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:270 (comment) -msgid "the next three instructions keep the lyrics between the barlines" +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" msgstr "" "las tres instrucciones siguientes hacen que la letra no choque con las " "divisorias" -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:133 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) msgid "naturalizeMusic" msgstr "naturalizarMusica" -#. input/lsr/tweaking-clef-properties.ly:113 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) msgid "The default treble clef" msgstr "Clave de sol predeterminada" -#. input/lsr/tweaking-clef-properties.ly:115 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) msgid "The standard bass clef" msgstr "Clave de Fa estándar" -#. input/lsr/tweaking-clef-properties.ly:120 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) msgid "The baritone clef" msgstr "Clave de barítono (do en quinta)" -#. input/lsr/tweaking-clef-properties.ly:125 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) msgid "The standard choral tenor clef" msgstr "Clave estándar de tenor coral" -#. input/lsr/tweaking-clef-properties.ly:131 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) msgid "A non-standard clef" msgstr "Clave no estándar" -#. input/lsr/tweaking-clef-properties.ly:137 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) msgid "The following clef changes do not preserve" msgstr "Los siguientes cambios de clave no preservan" -#. input/lsr/tweaking-clef-properties.ly:138 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) msgid "the normal relationship between notes and clefs:" msgstr "la relación normal entre notas y claves:" -#. input/lsr/tweaking-clef-properties.ly:153 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) msgid "Return to the normal clef:" msgstr "Volver a la clave normal:" -#. input/lsr/using-beatlength-and-beatgrouping.ly:59 (comment) -msgid "The default in 3/4 time is to beam in three groups" -msgstr "De forma predeterminada, en 3/4 el barrado se hace en tres grupos" +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +msgid "Abreviations" +msgstr "Abreviaturas" -#. input/lsr/using-beatlength-and-beatgrouping.ly:60 (comment) -msgid "each of a quarter note length" -msgstr "de una negra de longitud cada uno" +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "db" -#. input/lsr/using-beatlength-and-beatgrouping.ly:64 (comment) -msgid "No auto-beaming is defined for 12/16" -msgstr "No hay ningún barrado automático definido para 12/16" +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "dub" -#. input/lsr/using-beatlength-and-beatgrouping.ly:68 (comment) -msgid "Change time signature symbol, but retain underlying 3/4 beaming" -msgstr "Cambiar el símbolo de compás, manteniendo el barrado subyacente de 3/4" +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "dubetc" -#. input/lsr/using-beatlength-and-beatgrouping.ly:72 (comment) -msgid "The 3/4 time default grouping of (1 1 1) and beatLength of 1/8" -msgstr "El agrupamiento predeterminado de (1 1 1) y beatLength de 1/8 del compás 3/4" +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "ub" -#. input/lsr/using-beatlength-and-beatgrouping.ly:73 (comment) -msgid "are not consistent with a measureLength of 3/4, so the beams" -msgstr "" -"no son consistentes con una longitud de compás measureLength de 3/4, por " -"ello las barras" +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "udb" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "udbetc" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "fermaTa" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +msgid "accel" +msgstr "accel" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "ritar" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +msgid "Strings" +msgstr "Cuerdas" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "svib" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "pvib" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "mvib" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "sulp" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +msgid "norm" +msgstr "norm" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +msgid "quatre" +msgstr "quatre" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "Saltar notas" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "shift" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "shifta" -#. input/lsr/using-beatlength-and-beatgrouping.ly:74 (comment) -msgid "are grouped at beatLength intervals" -msgstr "se agrupan a intervalos de beatLength" +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "shiftb" -#. input/lsr/using-beatlength-and-beatgrouping.ly:78 (comment) -msgid "Specify beams in groups of (3 3 2 3) 1/16th notes" -msgstr "Especificar barras en grupos de (3 3 2 3) semicorcheas" +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "Regulador" -#. input/lsr/using-beatlength-and-beatgrouping.ly:79 (comment) -msgid "3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply," -msgstr "3+3+2+3=11, y 11*1/16<>3/4, así que no es de aplicación beatGrouping" +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "aniente = \\\"a niente\\\"" -#. input/lsr/using-beatlength-and-beatgrouping.ly:80 (comment) -msgid "and beams are grouped at beatLength (1/16) intervals" -msgstr "y las barras se agrupan a intervalos de beatLength (semicorcheas)" +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "aniente" -#. input/lsr/using-beatlength-and-beatgrouping.ly:85 (comment) -msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" -msgstr "Especificat barras en grupos de (3 4 2 3) semicorcheas" +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +msgid "tupletbp" +msgstr "tupletbp" -#. input/lsr/using-beatlength-and-beatgrouping.ly:86 (comment) -msgid "3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies" -msgstr "3+4+2+3=12, y 12*1/16=3/4, así pues beatGrouping es de aplicación" +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "Corchete [Cabeza - Plica]" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:27 (variable) +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +msgid "noflag" +msgstr "sinCorchete" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "Funciones" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "Instrumentos" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "SoloViolin" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "Compás 1" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "Compás 2" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "Compás 3" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "Compás 4" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "Compás 5" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "Compás 6" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "\\featherDurations #(ly:make-moment 2 3)" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "Compás 7" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "Compás 8" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "Compás 9" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +msgid "Score" +msgstr "Partitura" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +msgid "testnotes" +msgstr "notasPrueba" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" +msgstr "imprimir grobs para todas las cabezas:" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "\\override NoteHead #'before-line-breaking = #display-grobs" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" +msgstr "o sólo para una:" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) msgid "parallelogram" msgstr "paralelogramo" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:42 (variable) +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) msgid "myNoteHeads" msgstr "misCabezas" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) msgid "normalNoteHeads" msgstr "cabezasNormales" -#. input/lsr/utf-8.ly:18 (comment) +#. Documentation/snippets/utf-8.ly:19 (comment) msgid "end verbatim - this comment is a hack to prevent texinfo.tex" msgstr "" "final del bloque literal. Este comentario es un truco para evitar que " "texinfo.tex" -#. input/lsr/utf-8.ly:19 (comment) +#. Documentation/snippets/utf-8.ly:20 (comment) msgid "from choking on non-European UTF-8 subsets" msgstr "proteste respecto a los subconjuntos de UTF-8 no europeos" -#. input/lsr/utf-8.ly:21 (comment) +#. Documentation/snippets/utf-8.ly:22 (comment) msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" msgstr "" "Edite este archivo con un editor preparado para Unicode, como GVIM, GEDIT o " "Emacs" -#. input/lsr/utf-8.ly:39 (comment) +#. Documentation/snippets/utf-8.ly:40 (comment) msgid "Cyrillic font" msgstr "Fuente cirílica" -#. input/lsr/utf-8.ly:40 (variable) +#. Documentation/snippets/utf-8.ly:41 (variable) msgid "bulgarian" msgstr "bulgaro" -#. input/lsr/utf-8.ly:44 (variable) +#. Documentation/snippets/utf-8.ly:45 (variable) msgid "hebrew" msgstr "hebreo" # fuzzy. FVD -#. input/lsr/utf-8.ly:48 (variable) +#. Documentation/snippets/utf-8.ly:49 (variable) msgid "japanese" msgstr "japones" -#. input/lsr/utf-8.ly:55 (comment) +#. Documentation/snippets/utf-8.ly:56 (comment) msgid "\\\"a legal song to you\\\"" msgstr "\\\"una canción legal para ti\\\"" -#. input/lsr/utf-8.ly:56 (variable) +#. Documentation/snippets/utf-8.ly:57 (variable) msgid "portuguese" msgstr "portugues" -#. input/lsr/vertically-centered-common-lyrics.ly:19 (variable) +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +msgid "upline" +msgstr "lineaArriba" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) msgid "leftbrace" msgstr "llaveizquierda" -#. input/lsr/vertically-centered-common-lyrics.ly:20 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) msgid "rightbrace" msgstr "llavederecha" -#. input/lsr/vertically-centered-common-lyrics.ly:22 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) msgid "dropLyrics" msgstr "bajarLetra" -#. input/lsr/vertically-centered-common-lyrics.ly:29 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) msgid "raiseLyrics" msgstr "elevarLetra" -#. input/lsr/vertically-centered-common-lyrics.ly:36 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) msgid "skipFour" msgstr "saltoCuatro" -#. input/lsr/vertically-centered-common-lyrics.ly:38 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) msgid "lyricsA" msgstr "letraA" -#. input/lsr/vertically-centered-common-lyrics.ly:40 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) msgid "lyricsB" msgstr "letraB" -#. input/lsr/vertically-centered-common-lyrics.ly:41 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) msgid "lyricsC" msgstr "letraC" -#. input/lsr/vertically-centered-common-lyrics.ly:42 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) msgid "lyricsD" msgstr "letraD" -#. input/lsr/vertically-centered-common-lyrics.ly:49 (context id) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) msgid "m" msgstr "m" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:53 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:45 (variable) -#. input/lsr/vocal-ensemble-template.ly:50 (variable) -msgid "sopMusic" -msgstr "musicaSoprano" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:56 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:48 (variable) -#. input/lsr/vocal-ensemble-template.ly:53 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:79 (variable) msgid "sopWords" msgstr "letraSoprano" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:85 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:75 (context id) -#. input/lsr/vocal-ensemble-template.ly:81 (context id) -msgid "women" -msgstr "mujeres" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:91 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:85 (context id) -#. input/lsr/vocal-ensemble-template.ly:93 (context id) -msgid "men" -msgstr "hombres" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:120 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) -#. input/lsr/vocal-ensemble-template.ly:111 (comment) -msgid "a little smaller so lyrics" -msgstr "algo más pequeño de forma que la letra" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:121 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:98 (comment) -#. input/lsr/vocal-ensemble-template.ly:112 (comment) -msgid "can be closer to the staff" -msgstr "esté más cerca del pentagrama" +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:118 (comment) +msgid "This is needed for lyrics above a staff" +msgstr "Necesario para la letra por encima del pentagrama" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:81 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) msgid "we could remove the line about this with the line below, since we want" msgstr "" "podríamos quitar la línea anterior y sustituirla por la siguiente, pues " "queremos" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:82 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) msgid "the alto lyrics to be below the alto Voice anyway." msgstr "" "que la letra de la contralto esté debajo de la voz de contralto de todas " "formas." -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (comment) -msgid "\\new Lyrics \\lyricsto altos \\altoWords" -msgstr "\\new Lyrics \\lyricsto altos \\altoWords" +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" +msgstr "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) msgid "again, we could replace the line above this with the line below." msgstr "de nuevo podríamos sustituir la línea anterior con la línea siguiente." -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:93 (comment) -msgid "\\new Lyrics \\lyricsto basses \\bassWords" -msgstr "\\new Lyrics \\lyricsto basses \\bassWords" +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" +msgstr "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" -#. input/lsr/volta-multi-staff.ly:16 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +msgid "refrain" +msgstr "estribillo" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +msgid "SoloNotes" +msgstr "notasSolista" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +msgid "SoloLyrics" +msgstr "letraSolista" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +msgid "SopranoNotes" +msgstr "notasSoprano" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +msgid "SopranoLyrics" +msgstr "letraSoprano" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +msgid "BassNotes" +msgstr "notasBajo" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +msgid "BassLyrics" +msgstr "letraBajo" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +msgid "SoloVoice" +msgstr "vozSolista" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +msgid "SopranoVoice" +msgstr "vozSoprano" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +msgid "BassVoice" +msgstr "vozBajo" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" +msgstr "estas líneas evitan que se impriman los pentagramas vacíos" + +#. Documentation/snippets/vocal-ensemble-template.ly:107 (comment) +#. Documentation/snippets/vocal-ensemble-template.ly:122 (comment) +msgid "this is needed for lyrics above a staff" +msgstr "es necesario para la letra por encima del pentagrama" + +#. Documentation/snippets/vocal-headword.ly:29 (comment) +msgid "L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale" +msgstr "L. van Beethoven. Sinfonía Núm. 9 en Re menor, op.125; Finale" + +#. Documentation/snippets/vocal-headword.ly:30 (comment) +msgid "mm. 216 -- 236" +msgstr "cc. 216 a 236" + +#. Documentation/snippets/vocal-headword.ly:31 (comment) +msgid "Text: F. von Schiller" +msgstr "Texto: F. von Schiller" + +#. Documentation/snippets/vocal-headword.ly:36 (comment) +msgid "make first bar number be shown" +msgstr "habilitar la impresión del número del primer compás" + +#. Documentation/snippets/vocal-headword.ly:38 (comment) +msgid "\\tempo \\\"Presto\\\"" +msgstr "\\tempo \\\"Presto\\\"" + +#. Documentation/snippets/vocal-headword.ly:39 (comment) +msgid "\\compressFullBarRests R2.*8" +msgstr "\\compressFullBarRests R2.*8" + +#. Documentation/snippets/vocal-headword.ly:61 (comment) +msgid "put fermata closer to staff" +msgstr "poner calderón más cerca del pentagrama" + +#. Documentation/snippets/vocal-headword.ly:65 (comment) +msgid "\\time 4/4 \\tempo \\\"Allegro assai\\\"" +msgstr "\\time 4/4 \\tempo \\\"Allegro assai\\\"" + +#. Documentation/snippets/vocal-headword.ly:66 (comment) +#. Documentation/snippets/vocal-headword.ly:68 (comment) +msgid "R1" +msgstr "R1" + +#. Documentation/snippets/vocal-headword.ly:67 (comment) +msgid "e''4^\\f d r2" +msgstr "e''4^\\f d r2" + +#. Documentation/snippets/vocal-headword.ly:69 (comment) +msgid "e4( ^\\f d2) a8([ g)]" +msgstr "e4( ^\\f d2) a8([ g)]" + +#. Documentation/snippets/vocal-headword.ly:75 (comment) +msgid "Freu -- de, Freu -- de,__" +msgstr "Freu -- de, Freu -- de,__" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) msgid "voltaMusic" msgstr "musicaRepeticion" +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "voltaAdLib" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "Tchaikovsky" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "Nutcracker Suite, VII Dance of the Merlitons" + msgid "Up:" msgstr "Arriba:" diff --git a/Documentation/po/fr.po b/Documentation/po/fr.po index 8080df0336..917528951e 100644 --- a/Documentation/po/fr.po +++ b/Documentation/po/fr.po @@ -3,27 +3,28 @@ # This file is distributed under the same license as the lilypond package. # # John Mandereau , 2006-2008, -# Jean-Charles Malahieude , 2006-2009. +# Jean-Charles Malahieude , 2006-2011. msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-06 23:05+0200\n" -"PO-Revision-Date: 2009-07-16 16:27+0200\n" +"POT-Creation-Date: 2010-12-06 22:26+0100\n" +"PO-Revision-Date: 2011-03-01 19:01+0100\n" "Last-Translator: Jean-Charles Malahieude \n" "Language-Team: Français \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -#: postprocess_html.py:45 +#: postprocess_html.py:55 #, python-format msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." msgstr "" "Cette page documente %(package_name)s-%(package_version)s (%(branch_str)s)." -#: postprocess_html.py:47 +#: postprocess_html.py:57 #, python-format msgid "" "Your suggestions for the documentation " @@ -34,11199 +35,6745 @@ msgstr "" "documentation sont les bienvenues ;\n" "signalez tout bogue en français à la liste\n" -"francophone des utilisateurs ou en anglais à la liste des\n" +"francophone des utilisateurs ou en anglais à la liste des\n" "utilisateurs." -#: postprocess_html.py:59 +#: postprocess_html.py:69 #, python-format msgid "Other languages: %s." msgstr "Autres langues : %s." -#: postprocess_html.py:60 +#: postprocess_html.py:70 #, python-format msgid "About automatic language selection." msgstr "À propos de la sélection automatique de la langue." -#: postprocess_html.py:316 +#: postprocess_html.py:326 msgid "stable-branch" msgstr "branche stable" -#: postprocess_html.py:318 +#: postprocess_html.py:328 msgid "development-branch" msgstr "branche de développement" -#: texi-gettext.py:63 -msgid "" -"This section has not been translated yet; please refer to the manual in " -"English." -msgstr "" -"Cette section n'est pas encore traduite ; reportez-vous à l'édition de ce " -"manuel en anglais." - -#: translations-status.py:59 +#: translations-status.py:72 msgid "Section titles" msgstr "Titre des chapitres" -#: translations-status.py:60 +#: translations-status.py:73 #, python-format -msgid "

    Last updated %s

    \n" -msgstr "

    Dernière mise à jour %s

    \n" +msgid "Last updated %s" +msgstr "Dernière mise à jour %s" -#: translations-status.py:61 +#: translations-status.py:74 msgid "Translators" msgstr "Traducteurs" -#: translations-status.py:61 +#: translations-status.py:74 msgid "Translation checkers" msgstr "Relecteurs" -#: translations-status.py:62 +#: translations-status.py:75 msgid "Translated" msgstr "Traduit" -#: translations-status.py:62 +#: translations-status.py:75 msgid "Up to date" msgstr "À jour" -#: translations-status.py:63 +#: translations-status.py:76 msgid "Other info" msgstr "Autres informations" -#: translations-status.py:65 +#: translations-status.py:78 msgid "no" msgstr "non" -#: translations-status.py:66 +#: translations-status.py:79 msgid "not translated" msgstr "non traduit" -#: translations-status.py:68 +#: translations-status.py:81 #, python-format msgid "partially (%(p)d %%)" msgstr "partiellement (%(p)d %%)" -#: translations-status.py:70 +#: translations-status.py:83 #, python-format msgid "partially translated (%(p)d %%)" msgstr "partiellement traduit (%(p)d %%)" -#: translations-status.py:71 translations-status.py:73 +#: translations-status.py:84 translations-status.py:86 msgid "yes" msgstr "oui" -#: translations-status.py:72 +#: translations-status.py:85 msgid "translated" msgstr "traduit" -#: translations-status.py:73 translations-status.py:74 +#: translations-status.py:86 translations-status.py:87 msgid "up to date" msgstr "à jour" -#: translations-status.py:75 +#: translations-status.py:88 msgid "partially" msgstr "partiellement" -#: translations-status.py:76 +#: translations-status.py:89 msgid "partially up to date" msgstr "partiellement à jour" -#: translations-status.py:77 +#: translations-status.py:90 msgid "N/A" msgstr "N/A" -#: translations-status.py:78 +#: translations-status.py:91 msgid "pre-GDP" msgstr "pré-GDP" -#: translations-status.py:79 +#: translations-status.py:92 msgid "post-GDP" msgstr "post-GDP" #. -*- coding: utf-8 -*- -#. @node in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @node in Documentation/ja/user/lilypond-learning.tely -#. @node in Documentation/ja/user/lilypond-program.tely +#. Documentation/changes.tely:183 (variable) +msgid "coloredheads" +msgstr "tetescolorisees" + +#. Documentation/changes.tely:184 (variable) +msgid "noclef" +msgstr "sansclef" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi msgid "Top" -msgstr "" +msgstr "Accueil" -#. @top in Documentation/user/lilypond-learning.tely -msgid "GNU LilyPond --- Learning Manual" -msgstr "GNU LilyPond --- Manuel d'initiation" - -#. @node in Documentation/user/lilypond-learning.tely -#. @appendix in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @appendix in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @appendix in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @appendix in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @appendix in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @appendix in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @appendix in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @appendix in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -#. @node in Documentation/ja/user/lilypond-learning.tely -#. @appendix in Documentation/ja/user/lilypond-learning.tely -#. @node in Documentation/ja/user/lilypond-program.tely -#. @appendix in Documentation/ja/user/lilypond-program.tely -msgid "LilyPond index" -msgstr "Index de LilyPond" +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "Modifications depuis la version 2.12" + +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "LilyPond -- \\\\TITLE\\\\" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Predefined commands" msgstr "Commandes prédéfinies" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Selected Snippets" msgstr "Morceaux choisis" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "See also" msgstr "Voir aussi" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Known issues and warnings" msgstr "Problèmes connus et avertissements" -#. @node in Documentation/user/preface.itely -#. @unnumbered in Documentation/user/preface.itely -#. @node in Documentation/fr/user/preface.itely -#. @unnumbered in Documentation/fr/user/preface.itely -#. @node in Documentation/es/user/preface.itely -#. @unnumbered in Documentation/es/user/preface.itely -#. @node in Documentation/de/user/preface.itely -#. @unnumbered in Documentation/de/user/preface.itely -#. @node in Documentation/ja/user/preface.itely -#. @unnumbered in Documentation/ja/user/preface.itely -msgid "Preface" -msgstr "Préface" - -#. @node in Documentation/user/introduction.itely -#. @chapter in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @chapter in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @chapter in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @chapter in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @chapter in Documentation/ja/user/introduction.itely -msgid "Introduction" -msgstr "Introduction" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @section in Documentation/ja/user/introduction.itely -msgid "Background" -msgstr "Contexte" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Engraving" -msgstr "Gravure" +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "Index de LilyPond" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +msgid "Music engraving" +msgstr "La gravure musicale" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "L'histoire de LilyPond" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraving details" +msgstr "La gravure en détails" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "Fontes et polices" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "Espacement" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Ledger lines" +msgstr "Lignes supplémentaires" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "Tailles" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "La raison de tous ces efforts" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely msgid "Automated engraving" -msgstr "Gravure automatisée" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "What symbols to engrave?" -msgstr "Gravure des symboles musicaux" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely +msgstr "La gravure automatisée" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Beauty contests" +msgstr "Concours de beauté" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "Modélisation et banc d'essai" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "Règles de formatage" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "De la théorie à la pratique" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely msgid "Music representation" msgstr "Représentation de la musique" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Example applications" -msgstr "Exemples d'application" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @section in Documentation/ja/user/introduction.itely -msgid "About the documentation" -msgstr "À propos de la documentation" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Learning Manual" -msgstr "À propos du manuel d'initiation" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Music Glossary" -msgstr "À propos du glossaire musicologique" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Notation Reference" -msgstr "À propos du manuel de notation" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Application Usage" -msgstr "À propos du manuel d'utilisation" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Snippet List" -msgstr "À propos des morceaux choisis" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Internals Reference" -msgstr "À propos des références du programme" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Other documentation" -msgstr "Autres sources de documentation" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "Les constituants de la gravure" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "Flexibilité architecturale" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Putting LilyPond to work" +msgstr "Démonstration par l'exemple" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "Comparatif (BWV 861)" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "Références bibliographiques" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "Bibliographie succinte" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "Bibliographie développée" + +#. @subheading in Documentation/essay/literature.itely +msgid "Colorado" +msgstr "Colorado" + +#. @subheading in Documentation/essay/literature.itely +msgid "Computer notation" +msgstr "Notation informatisée" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "Gravure" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "Licence GNU de documentation libre" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "SUPPLÉMENT : comment utiliser cette licence pour vos documents" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "traLaLa" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "leurre pour prise en charge par l'analyseur lookahead" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3003 (variable) +#. Documentation/learning/fundamental.itely:3058 (variable) +#. Documentation/notation/changing-defaults.itely:3802 (variable) +msgid "padText" +msgstr "decallageTexte" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3844 (variable) +msgid "tempoPadded" +msgstr "tempoDecale" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "motif" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "Tutoriel Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Introduction to Scheme" +msgstr "Introduction à Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "Scheme : le bac à sable" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme variables" +msgstr "Scheme et les variables" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "Types de données simples" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "Types de données composites" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "Paires" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Lists" +msgstr "Listes" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "Liste associatives (alists)" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "Tables de hachage" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "Scheme et les calculs" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "Scheme et les procédures" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "Définition d'une procédure" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "Prédicats" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "Valeurs de retour" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "Scheme et les conditions" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "if" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "cond" +msgstr "cond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "Scheme et LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond Scheme syntax" +msgstr "Syntaxe Scheme dans du code LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond variables" +msgstr "Variables LilyPond" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "Variables d'entrée et Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Object properties" +msgstr "Propriétés des objets" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "LilyPond et les variables composites" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "Représentation interne de la musique" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "Construction de fonctions complexes" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "Affichage d'expressions musicales" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "Propriétés de la musique" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "Exemple : redoubler une note avec liaison" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "Exemple : ajouter une articulation à plusieurs notes" + +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "LigatureManuelle" + +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "AltOui" + +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "AltNon" + +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "avecAlt" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "Interfaces pour les programmeurs" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "Fonctions musicales" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "Syntaxe des fonctions musicales" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "Fonctions de substitution simple" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "Fonctions de substitution intermédiaires" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "De l'usage des mathématiques dans les fonctions" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "Fonctions dépourvues d'argument" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "Fonctions fantômes" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "Fonctions « Markup »" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "Construction Scheme d'un marqueur" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "Fonctionnement interne des marqueurs" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "Définition d'une nouvelle commande de marqueur" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "Syntaxe de définition d'une commande de marqueur" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "On properties" +msgstr "Les propriétés « On »" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "A complete example" +msgstr "Exemple exhaustif" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Adapting builtin commands" +msgstr "Adaptation des commandes préétablies" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "Définition d'une nouvelle commande de liste de marqueurs" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "Contextes pour programmeurs" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "Évaluation d'un contexte" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "Application d'une fonction à tous les objets de mise en forme" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "Fonctions « callback »" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "Code Scheme au sein d'un fichier LilyPond" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "Retouches complexes" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "LilyPond Scheme interfaces" +msgstr "Interfaces entre LilyPond et Scheme" -#. Documentation/user/tutorial.itely:251 (comment) +#. Documentation/learning/tutorial.itely:210 (comment) msgid "set the starting point to middle C" msgstr "définit le point de départ en référence au do central" -#. Documentation/user/tutorial.itely:282 (comment) +#. Documentation/learning/tutorial.itely:241 (comment) msgid "one octave above middle C" msgstr "une octave au dessus du do central" -#. Documentation/user/tutorial.itely:298 (comment) +#. Documentation/learning/tutorial.itely:257 (comment) msgid "c is 1 staff space up, so is the c above" msgstr "do est à un cran de plus, il sera donc au-dessus" -#. Documentation/user/tutorial.itely:299 (comment) +#. Documentation/learning/tutorial.itely:258 (comment) msgid "d is 2 up or 5 down, so is the d above" msgstr "ré est à 2 crans de plus ou 5 de moins, il sera donc au-dessus" -#. Documentation/user/tutorial.itely:300 (comment) +#. Documentation/learning/tutorial.itely:259 (comment) msgid "e is 3 up or 4 down, so is the e above" msgstr "mi est à 3 crans de plus ou 4 de moins, il sera donc au-dessus" -#. Documentation/user/tutorial.itely:301 (comment) +#. Documentation/learning/tutorial.itely:260 (comment) msgid "a is 6 up or 1 down, so is the a below" msgstr "la est à 6 crans de plus ou 1 de moins, il sera donc en dessous" -#. Documentation/user/tutorial.itely:302 (comment) +#. Documentation/learning/tutorial.itely:261 (comment) msgid "g is 5 up or 2 down, so is the g below" msgstr "sol est à 5 crans de plus ou 2 de moins, il sera donc en dessous" -#. Documentation/user/tutorial.itely:303 (comment) +#. Documentation/learning/tutorial.itely:262 (comment) msgid "f is 4 up or 3 down, so is the f below" msgstr "fa est à 4 crans de plus ou 3 de moins, il sera donc en dessous" -#. Documentation/user/tutorial.itely:1757 (variable) -#. Documentation/user/working.itely:234 (variable) -#. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1132 (context id) -msgid "violin" -msgstr "violon" - -#. Documentation/user/tutorial.itely:1762 (variable) -#. input/lsr/string-quartet-template-simple.ly:70 (variable) -msgid "cello" -msgstr "cello" - -#. Documentation/user/tutorial.itely:1787 (variable) -msgid "tripletA" -msgstr "trioletA" - -#. Documentation/user/tutorial.itely:1788 (variable) -msgid "barA" -msgstr "mesureA" - -# utiliser peut-être le terme anglais, surtout -# s'il est massivement utilisé dans les ly -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -#. input/lsr/measure-counter.ly:26 (context id) -#. input/lsr/measure-counter.ly:33 (context id) -msgid "foo" -msgstr "toto" - -#. @node in Documentation/user/tutorial.itely -#. @chapter in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @chapter in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @chapter in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @chapter in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @chapter in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely msgid "Tutorial" msgstr "Tutoriel" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely -msgid "First steps" -msgstr "Premiers pas" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely msgid "Compiling a file" msgstr "Compilation d'un fichier" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Entering music and viewing output" -msgstr "Saisie de la musique et visualisation de la partition produite" - -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "Saisie de la musique" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Producing output" +msgstr "Génération de la sortie" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "MacOS X" msgstr "MacOS X" -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Windows" msgstr "Windows" -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely -msgid "UNIX" -msgstr "UNIX" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "Ligne de commande" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to write input files" +msgstr "Composition d'un fichier source" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Simple notation" msgstr "Notation simple" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @section in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @section in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @section in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @section in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Pitches" msgstr "Hauteurs" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "pitch" msgstr "hauteur" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "interval" msgstr "intervalle" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) msgid "scale" msgstr "gamme" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "middle C" msgstr "do central" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "octave" msgstr "octave" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "accidental" msgstr "altération" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Durations (rhythms)" msgstr "Durées (rythme)" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "beam" msgstr "barre de ligature" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "duration" msgstr "durée" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "whole note" msgstr "ronde" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "half note" msgstr "blanche" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "quarter note" msgstr "noire" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "dotted note" msgstr "note pointée" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Rests" msgstr "Silences" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "rest" msgstr "silence" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "Time signature" msgstr "Métrique" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "time signature" msgstr "métrique" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely +msgid "Tempo marks" +msgstr "Indications de tempo" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "indication du tempo" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "métronome" + +#. @subheading in Documentation/learning/tutorial.itely msgid "Clef" msgstr "Clefs" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "clef" msgstr "clef" -# bof -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/tutorial.itely msgid "All together" -msgstr "Assemblage" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Working on input files" msgstr "Travail sur les fichiers d'entrée" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "How to read the manual" -msgstr "Bien lire le manuel" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Dealing with errors" +msgstr "Gestion des erreurs" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "General troubleshooting tips" +msgstr "Quand ça ne fonctionne pas" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Some common errors" +msgstr "Erreurs courantes" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to read the manuals" +msgstr "Bien lire les manuels" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "Matériel incomplet" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely msgid "Clickable examples" msgstr "Exemples cliquables" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "Vue d'ensemble des manuels" + +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/learning/fundamental.itely:3008 (variable) +msgid "violin" +msgstr "violon" + +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +msgid "cello" +msgstr "cello" + +#. Documentation/learning/common-notation.itely:1255 (variable) +msgid "tripletA" +msgstr "trioletA" + +#. Documentation/learning/common-notation.itely:1256 (variable) +msgid "barA" +msgstr "mesureA" + +# utiliser peut-être le terme anglais, surtout +# s'il est massivement utilisé dans les ly +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "toto" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +msgid "Common notation" +msgstr "Bases de notation" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Single staff notation" msgstr "Notation sur une seule portée" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Bar checks" +msgstr "Vérifications de mesure" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Accidentals and key signatures" msgstr "Altérations et armure" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Accidentals" msgstr "Altérations" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "sharp" msgstr "dièse" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "flat" msgstr "bémol" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "double sharp" msgstr "double dièse" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "double flat" msgstr "double bémol" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Key signatures" msgstr "Armures" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "key signature" msgstr "armure" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "major" msgstr "majeur" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "minor" msgstr "mineur" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Warning: key signatures and pitches" msgstr "Attention aux armures et aux hauteurs" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "natural" msgstr "bécarre" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "transposition" msgstr "transposition" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely msgid "Pitch names" msgstr "Noms de note" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Ties and slurs" msgstr "Liaisons" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Ties" msgstr "Liaisons de prolongation" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "tie" msgstr "liaison de prolongation" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Slurs" msgstr "Liaisons d'articulation" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "slur" msgstr "liaison d'articulation" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Phrasing slurs" msgstr "Liaisons de phrasé" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "phrasing" msgstr "phrasé" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Warnings: slurs vs. ties" msgstr "Attention aux types de liaison" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "articulation" msgstr "articulation" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Articulation and dynamics" msgstr "Articulations et nuances" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Articulations" msgstr "Articulations" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Fingerings" msgstr "Doigtés" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "fingering" msgstr "doigté" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/user/tweaks.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Dynamics" msgstr "Nuances" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -#. input/lsr/piano-template-with-centered-dynamics.ly:57 (variable) +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) msgid "dynamics" msgstr "nuances" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "crescendo" msgstr "crescendo" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "decrescendo" msgstr "decrescendo" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Adding text" msgstr "Ajout de texte" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Automatic and manual beams" msgstr "Barres de ligature automatiques et manuelles" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Advanced rhythmic commands" msgstr "Commandes rythmiques avancées" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Partial measure" msgstr "Mesure incomplète" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "anacrusis" msgstr "anacrouse" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) msgid "Tuplets" msgstr "Nolets" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "note value" msgstr "valeur d'une note" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "triplet" msgstr "triolet" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Grace notes" msgstr "Notes d'ornement" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "grace notes" msgstr "notes d'ornement" # ça existe ce terme en français ? # ça vient directement de l'italien comme appogiature # ça c'est ben vrai ! -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "acciaccatura" msgstr "acciaccature" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "appoggiatura" msgstr "appoggiature" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Multiple notes at once" msgstr "Notes simultanées" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Music expressions explained" msgstr "Les expressions musicales en clair" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Analogy: mathematical expressions" msgstr "Analogie avec les expressions mathématiques" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Simultaneous music expressions: multiple staves" msgstr "Expressions musicales simultanées -- plusieurs portées" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "polyphony" msgstr "polyphonie" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely +#. @subheading in Documentation/learning/common-notation.itely msgid "Simultaneous music expressions: single staff" msgstr "Expressions musicales simultanées -- une seule portée" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Multiple staves" msgstr "Plusieurs portées" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Staff groups" msgstr "Regroupements de portées" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/staff.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "brace" msgstr "accolade" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "portée" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "système" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Combining notes into chords" msgstr "Combinaison de notes en accords" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/de/user/chords.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "chord" msgstr "accord" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Single staff polyphony" msgstr "Polyphonie sur une portée" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Songs" msgstr "Chansons" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Setting simple songs" msgstr "Écriture de chants simples" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "lyrics" msgstr "paroles" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Aligning lyrics to a melody" msgstr "Alignement des paroles sur une mélodie" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "melisma" msgstr "mélisme" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "extender line" msgstr "ligne de prolongation" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Lyrics to multiple staves" msgstr "Paroles pour plusieurs portées" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely msgid "Final touches" msgstr "Dernières précisions" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Organizing pieces with variables" msgstr "Organisation du code source avec des variables" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Version number" -msgstr "Numéro de version" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Adding titles" msgstr "Ajout de titres" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "Absolute note names" msgstr "Noms de note absolus" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely msgid "After the tutorial" msgstr "Après le tutoriel" -#. Documentation/user/fundamental.itely:324 (context id) -#. Documentation/user/fundamental.itely:367 (context id) -#. input/lsr/piano-template-with-centered-lyrics.ly:58 (context id) +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:73 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:86 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) msgid "singer" msgstr "chanteur" -#. Documentation/user/fundamental.itely:325 (context id) -#. Documentation/user/fundamental.itely:368 (context id) +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) msgid "vocal" msgstr "vocal" -#. Documentation/user/fundamental.itely:328 (context id) -#. Documentation/user/fundamental.itely:371 (context id) -#. input/lsr/jazz-combo-template.ly:220 (variable) -#. input/lsr/jazz-combo-template.ly:280 (context id) +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) msgid "piano" msgstr "piano" -#. Documentation/user/fundamental.itely:329 (context id) -#. Documentation/user/fundamental.itely:362 (variable) -#. Documentation/user/fundamental.itely:372 (context id) -#. Documentation/user/fundamental.itely:2669 (variable) -#. Documentation/user/fundamental.itely:2711 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:19 (variable) -#. input/lsr/jazz-combo-template.ly:223 (context id) -#. input/lsr/piano-template-simple.ly:30 (variable) -#. input/lsr/piano-template-simple.ly:49 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:47 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:36 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:58 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:47 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:68 (context id) -#. input/lsr/polyphony-in-tablature.ly:41 (variable) -#. input/lsr/polyphony-in-tablature.ly:59 (context id) -#. input/lsr/polyphony-in-tablature.ly:63 (context id) +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2592 (variable) +#. Documentation/learning/fundamental.itely:2654 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) msgid "upper" msgstr "superieur" -#. Documentation/user/fundamental.itely:330 (context id) -#. Documentation/user/fundamental.itely:363 (variable) -#. Documentation/user/fundamental.itely:373 (context id) -#. Documentation/user/fundamental.itely:2676 (variable) -#. Documentation/user/fundamental.itely:2712 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:23 (variable) -#. input/lsr/jazz-combo-template.ly:224 (context id) -#. input/lsr/piano-template-simple.ly:38 (variable) -#. input/lsr/piano-template-simple.ly:50 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:52 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:44 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:60 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:55 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:69 (context id) -#. input/lsr/polyphony-in-tablature.ly:48 (variable) -#. input/lsr/polyphony-in-tablature.ly:60 (context id) -#. input/lsr/polyphony-in-tablature.ly:64 (context id) +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2599 (variable) +#. Documentation/learning/fundamental.itely:2655 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) msgid "lower" msgstr "inferieur" -#. Documentation/user/fundamental.itely:360 (variable) -#. Documentation/user/simultaneous.itely:241 (context id) -#. Documentation/user/vocal.itely:578 (context id) -#. Documentation/user/vocal.itely:813 (context id) -#. Documentation/user/vocal.itely:834 (context id) -#. Documentation/user/vocal.itely:1234 (variable) -#. Documentation/user/vocal.itely:1276 (variable) -#. Documentation/user/ancient.itely:2413 (context id) -#. Documentation/user/ancient.itely:2452 (context id) -#. Documentation/user/changing-defaults.itely:483 (variable) -#. Documentation/user/changing-defaults.itely:490 (context id) -#. Documentation/user/changing-defaults.itely:500 (context id) -#. Documentation/user/changing-defaults.itely:505 (context id) -#. Documentation/user/changing-defaults.itely:522 (variable) -#. Documentation/user/changing-defaults.itely:540 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:34 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:45 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:52 (context id) -#. input/lsr/demo-midiinstruments.ly:28 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:28 (context id) -#. input/lsr/guitar-strum-rhythms.ly:65 (context id) -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:35 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:35 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:35 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:36 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:49 (variable) -#. input/lsr/single-staff-template-with-only-notes.ly:41 (variable) -#. input/lsr/vertically-centered-common-lyrics.ly:44 (variable) +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) msgid "melody" msgstr "melodie" -#. Documentation/user/fundamental.itely:361 (variable) -#. Documentation/user/vocal.itely:1061 (variable) -#. Documentation/user/vocal.itely:1239 (variable) -#. Documentation/user/vocal.itely:1280 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:52 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:43 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:43 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:57 (variable) +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) msgid "text" msgstr "texte" -#. Documentation/user/fundamental.itely:443 (context id) -#. Documentation/user/staff.itely:530 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (comment) +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) msgid "main" msgstr "principal" -#. Documentation/user/fundamental.itely:632 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\"" -msgstr "Voix \\\"1\\\" Voix \\\"2\\\"" +#. Documentation/learning/fundamental.itely:629 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "Voix \\\"1\\\" Voix \\\"2\\\"" -#. Documentation/user/fundamental.itely:642 (comment) +#. Documentation/learning/fundamental.itely:639 (comment) msgid "Voice \\\"1\\\" Voice \\\"2\\\"" -msgstr "Voix \\\"1\\\" Voix \\\"2\\\"" +msgstr "Voix \\\"1\\\" Voix \\\"2\\\"" -#. Documentation/user/fundamental.itely:657 (comment) +#. Documentation/learning/fundamental.itely:654 (comment) msgid "Voice \\\"1\\\"" -msgstr "Voix \\\"1\\\"" +msgstr "Voix \\\"1\\\"" -#. Documentation/user/fundamental.itely:662 (comment) +#. Documentation/learning/fundamental.itely:659 (comment) msgid "Voice \\\"2\\\"" -msgstr "Voix \\\"2\\\"" +msgstr "Voix \\\"2\\\"" -#. Documentation/user/fundamental.itely:685 (comment) -#. Documentation/user/fundamental.itely:709 (comment) +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) msgid "Main voice" msgstr "Voix principale" -#. Documentation/user/fundamental.itely:687 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" -msgstr "Voix \\\"1\\\" Voix \\\"2\\\" Voix \\\"3\\\"" +#. Documentation/learning/fundamental.itely:684 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +msgstr "Voix \\\"1\\\" Voix \\\"2\\\" Voix \\\"3\\\"" -#. Documentation/user/fundamental.itely:711 (comment) -#. Documentation/user/simultaneous.itely:738 (comment) -#. Documentation/user/simultaneous.itely:763 (comment) -#. Documentation/user/simultaneous.itely:790 (comment) +#. Documentation/learning/fundamental.itely:708 (comment) msgid "Bar 1" msgstr "Mesure 1" -#. Documentation/user/fundamental.itely:722 (comment) -#. Documentation/user/simultaneous.itely:743 (comment) -#. Documentation/user/simultaneous.itely:768 (comment) -#. Documentation/user/simultaneous.itely:796 (comment) +#. Documentation/learning/fundamental.itely:719 (comment) msgid "Bar 2" msgstr "Mesure 2" -#. Documentation/user/fundamental.itely:723 (comment) +#. Documentation/learning/fundamental.itely:720 (comment) msgid "Voice 1 continues" msgstr "Suite de la voix 1" -#. Documentation/user/fundamental.itely:726 (comment) +#. Documentation/learning/fundamental.itely:723 (comment) msgid "Voice 2 continues" msgstr "Suite de la voix 2" -#. Documentation/user/fundamental.itely:900 (comment) +#. Documentation/learning/fundamental.itely:898 (comment) msgid "Voice one" msgstr "Voix un" -#. Documentation/user/fundamental.itely:902 (comment) +#. Documentation/learning/fundamental.itely:900 (comment) msgid "Voice two" msgstr "Voix deux" -#. Documentation/user/fundamental.itely:904 (comment) +#. Documentation/learning/fundamental.itely:902 (comment) msgid "Omit Voice three" -msgstr "Pas de Voix trois" +msgstr "Pas de voix trois" -#. Documentation/user/fundamental.itely:905 (comment) +#. Documentation/learning/fundamental.itely:903 (comment) msgid "Voice four" msgstr "Voix quatre" -#. Documentation/user/fundamental.itely:1004 (comment) +#. Documentation/learning/fundamental.itely:1002 (comment) msgid "Default behavior or behavior after \\oneVoice" msgstr "Comportement par défaut ou après \\oneVoice" -#. Documentation/user/fundamental.itely:1042 (comment) +#. Documentation/learning/fundamental.itely:1040 (comment) msgid "The following notes are monophonic" msgstr "Les notes qui suivent sont monophoniques" -#. Documentation/user/fundamental.itely:1044 (comment) +#. Documentation/learning/fundamental.itely:1042 (comment) msgid "Start simultaneous section of three voices" msgstr "Début d'une section de trois voix simultanées" -#. Documentation/user/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1044 (comment) msgid "Continue the main voice in parallel" msgstr "Poursuite de la voix principale en parallèle" -#. Documentation/user/fundamental.itely:1048 (comment) -#. Documentation/user/fundamental.itely:1110 (comment) +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) msgid "Initiate second voice" msgstr "Initialisation de la seconde voix" -#. Documentation/user/fundamental.itely:1050 (comment) -#. Documentation/user/fundamental.itely:1112 (comment) -msgid "Set stems, etc, down" +#. Documentation/learning/fundamental.itely:1048 (comment) +msgid "Set stems, etc., down" msgstr "Hampes et autres attributs iront vers le bas" -#. Documentation/user/fundamental.itely:1054 (comment) -#. Documentation/user/fundamental.itely:1116 (comment) +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) msgid "Initiate third voice" msgstr "Initialisation de la troisième voix" -#. Documentation/user/fundamental.itely:1056 (comment) -#. Documentation/user/fundamental.itely:1118 (comment) +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) msgid "Set stems, etc, up" msgstr "Hampes et autres attributs iront vers le haut" -#. Documentation/user/fundamental.itely:1105 (comment) +#. Documentation/learning/fundamental.itely:1103 (comment) msgid "Initiate first voice" msgstr "Initialisation de la première voix" -#. Documentation/user/fundamental.itely:1199 (context id) -#. Documentation/user/fundamental.itely:2441 (context id) -#. Documentation/user/vocal.itely:513 (context id) -#. Documentation/user/vocal.itely:1245 (context id) -#. Documentation/user/vocal.itely:1286 (context id) -#. Documentation/user/keyboards.itely:343 (context id) -#. Documentation/user/fretted-strings.itely:246 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:24 (variable) -#. input/lsr/jazz-combo-template.ly:206 (context id) -#. input/lsr/jazz-combo-template.ly:215 (context id) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:57 (context id) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:63 (context id) +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "Hampes et autres attributs iront vers le bas" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2303 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) msgid "one" msgstr "un" -#. Documentation/user/fundamental.itely:1242 (variable) -#. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3518 (variable) -#. Documentation/user/simultaneous.itely:784 (variable) -#. Documentation/user/percussion.itely:497 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) -#. input/lsr/incipit.ly:62 (variable) -#. input/lsr/jazz-combo-template.ly:76 (variable) -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:40 (variable) -#. input/lsr/piano-template-with-centered-dynamics.ly:42 (variable) -#. input/lsr/printing-music-with-different-time-signatures.ly:25 (variable) -#. input/lsr/string-quartet-template-simple.ly:37 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:83 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:31 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:48 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:40 (variable) -#. input/lsr/vocal-ensemble-template.ly:45 (variable) +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/learning/fundamental.itely:2569 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:64 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:63 (variable) msgid "global" msgstr "global" -#. Documentation/user/fundamental.itely:1243 (variable) +#. Documentation/learning/fundamental.itely:1244 (variable) msgid "SopOneMusic" msgstr "SopUnMusique" -#. Documentation/user/fundamental.itely:1245 (variable) -msgid "SopTwoMusic" -msgstr "SopDeuxMusique" - -#. Documentation/user/fundamental.itely:1247 (variable) +#. Documentation/learning/fundamental.itely:1247 (variable) msgid "SopOneLyrics" msgstr "SopUnParoles" -#. Documentation/user/fundamental.itely:1249 (variable) +#. Documentation/learning/fundamental.itely:1250 (variable) +msgid "SopTwoMusic" +msgstr "SopDeuxMusique" + +#. Documentation/learning/fundamental.itely:1253 (variable) msgid "SopTwoLyrics" msgstr "SopDeuxParoles" -#. Documentation/user/fundamental.itely:1255 (context id) +#. Documentation/learning/fundamental.itely:1260 (context id) msgid "SopOne" msgstr "SopUn" -#. Documentation/user/fundamental.itely:1264 (context id) +#. Documentation/learning/fundamental.itely:1269 (context id) msgid "SopTwo" msgstr "SopDeux" -#. Documentation/user/fundamental.itely:1296 (variable) -#. Documentation/user/fundamental.itely:2864 (variable) -msgid "TimeKey" -msgstr "MetriqueArmure" +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/fundamental.itely:2901 (variable) +msgid "keyTime" +msgstr "armureMetrique" -#. Documentation/user/fundamental.itely:1297 (variable) +#. Documentation/learning/fundamental.itely:1303 (variable) msgid "SopMusic" msgstr "SopMusique" -#. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3520 (variable) +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) msgid "AltoMusic" msgstr "AltoMusique" -#. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3521 (variable) +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) msgid "TenorMusic" msgstr "TenorMusique" -#. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3522 (variable) +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) msgid "BassMusic" msgstr "BasseMusique" -#. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3523 (variable) +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) msgid "VerseOne" msgstr "CoupletUn" -#. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3524 (variable) +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) msgid "VerseTwo" msgstr "CoupletDeux" -#. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3525 (variable) +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) msgid "VerseThree" msgstr "CoupletTrois" -#. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3526 (variable) +#. Documentation/learning/fundamental.itely:1314 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) msgid "VerseFour" msgstr "CoupletQuatre" -#. Documentation/user/fundamental.itely:1314 (context id) +#. Documentation/learning/fundamental.itely:1321 (context id) msgid "Sop" msgstr "Sop" -#. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3533 (context id) -#. Documentation/user/input.itely:982 (context id) +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1141 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) msgid "Alto" msgstr "Alto" -#. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3541 (context id) -#. Documentation/user/input.itely:984 (context id) +#. Documentation/learning/fundamental.itely:1330 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1143 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) msgid "Tenor" msgstr "Tenor" -#. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3542 (context id) -#. Documentation/user/input.itely:989 (context id) -#. input/lsr/jazz-combo-template.ly:229 (variable) +#. Documentation/learning/fundamental.itely:1331 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1148 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) msgid "Bass" msgstr "Basse" -#. Documentation/user/fundamental.itely:1350 (variable) -#. Documentation/user/fundamental.itely:1402 (variable) -#. Documentation/user/fundamental.itely:1464 (variable) -msgid "versenotes" -msgstr "coupletnotes" - -#. Documentation/user/fundamental.itely:1355 (variable) -#. Documentation/user/fundamental.itely:1416 (variable) -#. Documentation/user/fundamental.itely:1478 (variable) -msgid "versewords" -msgstr "coupletparoles" - -#. Documentation/user/fundamental.itely:1361 (context id) -#. Documentation/user/fundamental.itely:1428 (context id) -#. Documentation/user/fundamental.itely:1489 (context id) -#. Documentation/user/vocal.itely:836 (context id) -#. input/lsr/score-for-diatonic-accordion.ly:59 (variable) -msgid "verse" -msgstr "couplet" - -#. Documentation/user/fundamental.itely:1407 (variable) -#. Documentation/user/fundamental.itely:1469 (variable) -msgid "refrainnotesA" -msgstr "refrainnotesA" - -#. Documentation/user/fundamental.itely:1411 (variable) -#. Documentation/user/fundamental.itely:1473 (variable) -msgid "refrainnotesB" -msgstr "refrainnotesB" - -#. Documentation/user/fundamental.itely:1419 (variable) -#. Documentation/user/fundamental.itely:1481 (variable) -msgid "refrainwordsA" -msgstr "refrainparolesA" - -#. Documentation/user/fundamental.itely:1422 (variable) -#. Documentation/user/fundamental.itely:1484 (variable) -msgid "refrainwordsB" -msgstr "refrainparolesB" - -#. Documentation/user/fundamental.itely:1436 (context id) -#. Documentation/user/fundamental.itely:1509 (context id) -msgid "refrainB" -msgstr "refrainB" - -#. Documentation/user/fundamental.itely:1501 (context id) -msgid "refrainA" -msgstr "refrainA" - -#. Documentation/user/fundamental.itely:1655 (comment) +#. Documentation/learning/fundamental.itely:1475 (comment) msgid "start of single compound music expression" msgstr "début de l'unique expression musicale composée" -#. Documentation/user/fundamental.itely:1656 (comment) +#. Documentation/learning/fundamental.itely:1476 (comment) msgid "start of simultaneous staves section" msgstr "début d'une section de portées simultanées" -#. Documentation/user/fundamental.itely:1658 (comment) +#. Documentation/learning/fundamental.itely:1478 (comment) msgid "create RH staff" msgstr "création de la portée MD" -#. Documentation/user/fundamental.itely:1661 (comment) +#. Documentation/learning/fundamental.itely:1481 (comment) msgid "create voice for RH notes" msgstr "création d'une voix pour les notes de MD" -#. Documentation/user/fundamental.itely:1662 (comment) +#. Documentation/learning/fundamental.itely:1482 (comment) msgid "start of RH notes" msgstr "début des notes de MD" -#. Documentation/user/fundamental.itely:1665 (comment) +#. Documentation/learning/fundamental.itely:1485 (comment) msgid "end of RH notes" msgstr "fin des notes de MD" -#. Documentation/user/fundamental.itely:1666 (comment) +#. Documentation/learning/fundamental.itely:1486 (comment) msgid "end of RH voice" msgstr "fin de la voix MD" -#. Documentation/user/fundamental.itely:1667 (comment) +#. Documentation/learning/fundamental.itely:1487 (comment) msgid "end of RH staff" msgstr "fin de la portée MD" -#. Documentation/user/fundamental.itely:1668 (comment) +#. Documentation/learning/fundamental.itely:1488 (comment) msgid "create LH staff; needs two simultaneous voices" msgstr "création de la portée MG ; nécessite deux voix simultanées" -#. Documentation/user/fundamental.itely:1671 (comment) +#. Documentation/learning/fundamental.itely:1491 (comment) msgid "create LH voice one" msgstr "création de la voix un de MG" -#. Documentation/user/fundamental.itely:1673 (comment) +#. Documentation/learning/fundamental.itely:1493 (comment) msgid "start of LH voice one notes" msgstr "début des notes de la voix un de MG" -#. Documentation/user/fundamental.itely:1676 (comment) +#. Documentation/learning/fundamental.itely:1496 (comment) msgid "end of LH voice one notes" msgstr "fin des notes de la voix un de MG" -#. Documentation/user/fundamental.itely:1677 (comment) +#. Documentation/learning/fundamental.itely:1497 (comment) msgid "end of LH voice one" msgstr "fin de la voix un de MG" -#. Documentation/user/fundamental.itely:1678 (comment) +#. Documentation/learning/fundamental.itely:1498 (comment) msgid "create LH voice two" msgstr "création de la voix deux de MG" -#. Documentation/user/fundamental.itely:1680 (comment) +#. Documentation/learning/fundamental.itely:1500 (comment) msgid "start of LH voice two notes" msgstr "début des notes de la voix deux de MG" -#. Documentation/user/fundamental.itely:1683 (comment) +#. Documentation/learning/fundamental.itely:1503 (comment) msgid "end of LH voice two notes" msgstr "fin des notes de la voix deux de MG" -#. Documentation/user/fundamental.itely:1684 (comment) +#. Documentation/learning/fundamental.itely:1504 (comment) msgid "end of LH voice two" msgstr "fin de la voix deux de MG" -#. Documentation/user/fundamental.itely:1685 (comment) +#. Documentation/learning/fundamental.itely:1505 (comment) msgid "end of LH staff" msgstr "fin de la portée MG" -#. Documentation/user/fundamental.itely:1686 (comment) +#. Documentation/learning/fundamental.itely:1506 (comment) msgid "end of simultaneous staves section" msgstr "fin de la section de portées simultanées" -#. Documentation/user/fundamental.itely:1687 (comment) +#. Documentation/learning/fundamental.itely:1507 (comment) msgid "end of single compound music expression" msgstr "fin de l'unique expression musicale composée" -#. Documentation/user/fundamental.itely:1906 (comment) +#. Documentation/learning/fundamental.itely:1726 (comment) msgid "Wrong!" msgstr "Mauvais !" -#. Documentation/user/fundamental.itely:1992 (comment) -#. Documentation/user/fundamental.itely:2144 (comment) +#. Documentation/learning/fundamental.itely:1812 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) msgid "make note heads smaller" msgstr "pour obtenir des têtes de note plus petites" -#. Documentation/user/fundamental.itely:1995 (comment) -#. Documentation/user/fundamental.itely:2146 (comment) +#. Documentation/learning/fundamental.itely:1815 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) msgid "make note heads larger" msgstr "pour obtenir des têtes de note plus grosses" -#. Documentation/user/fundamental.itely:1998 (comment) -#. Documentation/user/fundamental.itely:2148 (comment) +#. Documentation/learning/fundamental.itely:1818 (comment) +#. Documentation/learning/fundamental.itely:1993 (comment) msgid "return to default size" msgstr "retour à la taille par défaut" -#. Documentation/user/fundamental.itely:2420 (variable) -#. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:974 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) +#. Documentation/learning/fundamental.itely:2282 (variable) +#. Documentation/learning/fundamental.itely:2570 (variable) +#. Documentation/notation/input.itely:1133 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) msgid "sopranoMusic" msgstr "sopranoMusique" -#. Documentation/user/fundamental.itely:2427 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:51 (variable) +#. Documentation/learning/fundamental.itely:2289 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) msgid "sopranoLyrics" msgstr "sopranoParoles" -#. Documentation/user/fundamental.itely:2431 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:63 (variable) +#. Documentation/learning/fundamental.itely:2293 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) msgid "celloMusic" msgstr "violoncelleMusique" -#. Documentation/user/fundamental.itely:2651 (variable) +#. Documentation/learning/fundamental.itely:2574 (variable) msgid "sopranoWords" msgstr "sopranoParoles" -#. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:975 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) -#. input/lsr/vocal-ensemble-template.ly:57 (variable) +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) msgid "altoMusic" msgstr "altoMusique" -#. Documentation/user/fundamental.itely:2658 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:63 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:55 (variable) -#. input/lsr/vocal-ensemble-template.ly:60 (variable) +#. Documentation/learning/fundamental.itely:2581 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:79 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:78 (variable) msgid "altoWords" msgstr "altoParoles" -#. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:976 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) -#. input/lsr/vocal-ensemble-template.ly:64 (variable) +#. Documentation/learning/fundamental.itely:2582 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) msgid "tenorMusic" msgstr "tenorMusique" -#. Documentation/user/fundamental.itely:2663 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:70 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) -#. input/lsr/vocal-ensemble-template.ly:67 (variable) +#. Documentation/learning/fundamental.itely:2586 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:85 (variable) msgid "tenorWords" msgstr "tenorParoles" -#. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:977 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) -#. input/lsr/vocal-ensemble-template.ly:71 (variable) +#. Documentation/learning/fundamental.itely:2587 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) msgid "bassMusic" msgstr "basseMusique" -#. Documentation/user/fundamental.itely:2668 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:77 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) -#. input/lsr/vocal-ensemble-template.ly:74 (variable) +#. Documentation/learning/fundamental.itely:2591 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:92 (variable) msgid "bassWords" msgstr "basseParoles" -#. Documentation/user/fundamental.itely:2685 (comment) +#. Documentation/learning/fundamental.itely:2608 (comment) msgid "combine ChoirStaff and PianoStaff in parallel" msgstr "combinaison en parallèle du ChoirStaff et du PianoStaff" -#. Documentation/user/fundamental.itely:2687 (context id) -#. Documentation/user/fundamental.itely:2689 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (context id) -#. input/lsr/vocal-ensemble-template.ly:82 (context id) +#. Documentation/learning/fundamental.itely:2610 (context id) +#. Documentation/learning/fundamental.itely:2612 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (context id) msgid "sopranos" msgstr "soprani" -#. Documentation/user/fundamental.itely:2692 (context id) -#. Documentation/user/fundamental.itely:2694 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:87 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:77 (context id) -#. input/lsr/vocal-ensemble-template.ly:86 (context id) +#. Documentation/learning/fundamental.itely:2620 (context id) +#. Documentation/learning/fundamental.itely:2622 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:103 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:104 (context id) msgid "altos" msgstr "alti" -#. Documentation/user/fundamental.itely:2697 (context id) -#. Documentation/user/fundamental.itely:2699 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:87 (context id) -#. input/lsr/vocal-ensemble-template.ly:95 (context id) +#. Documentation/learning/fundamental.itely:2630 (context id) +#. Documentation/learning/fundamental.itely:2632 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:113 (context id) msgid "tenors" msgstr "tenors" -#. Documentation/user/fundamental.itely:2702 (context id) -#. Documentation/user/fundamental.itely:2704 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:94 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:88 (context id) -#. input/lsr/vocal-ensemble-template.ly:99 (context id) +#. Documentation/learning/fundamental.itely:2640 (context id) +#. Documentation/learning/fundamental.itely:2642 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:110 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:117 (context id) msgid "basses" msgstr "basses" -#. Documentation/user/fundamental.itely:2707 (comment) +#. Documentation/learning/fundamental.itely:2650 (comment) msgid "end ChoirStaff" -msgstr "fin du ChoirStaff (système pour chÅ“ur)" +msgstr "fin du ChoirStaff (système pour chœur)" -#. Documentation/user/fundamental.itely:2865 (variable) +#. Documentation/learning/fundamental.itely:2902 (variable) msgid "ManualOneVoiceOneMusic" -msgstr "MusiqueManuelUnVoixUn" +msgstr "MusiqueClavierUnVoixUn" -#. Documentation/user/fundamental.itely:2868 (variable) +#. Documentation/learning/fundamental.itely:2906 (variable) msgid "ManualOneVoiceTwoMusic" -msgstr "MusiqueManuelUnVoixDeux" +msgstr "MusiqueclavierUnVoixDeux" -#. Documentation/user/fundamental.itely:2872 (variable) +#. Documentation/learning/fundamental.itely:2910 (variable) msgid "ManualTwoMusic" -msgstr "MusiqueManuelDeux" +msgstr "MusiqueClavierDeux" -#. Documentation/user/fundamental.itely:2876 (variable) +#. Documentation/learning/fundamental.itely:2914 (variable) msgid "PedalOrganMusic" msgstr "MusiquePedalierOrgue" -#. Documentation/user/fundamental.itely:2882 (comment) +#. Documentation/learning/fundamental.itely:2920 (comment) msgid "PianoStaff and Pedal Staff must be simultaneous" msgstr "système pianistique et portée de pédalier simultanés" -#. Documentation/user/fundamental.itely:2884 (context id) +#. Documentation/learning/fundamental.itely:2922 (context id) msgid "ManualOne" -msgstr "ManuelUn" +msgstr "ClavierUn" -#. Documentation/user/fundamental.itely:2885 (comment) -msgid "set time signature and key" -msgstr "définition de la métrique et de l'armure" +#. Documentation/learning/fundamental.itely:2923 (comment) +msgid "set key and time signature" +msgstr "définition de l'armure et de la métrique" -#. Documentation/user/fundamental.itely:2889 (comment) +#. Documentation/learning/fundamental.itely:2933 (comment) msgid "end ManualOne Staff context" -msgstr "fin du contexte de portée ManuelUn" +msgstr "fin du contexte de portée ClavierUn" -#. Documentation/user/fundamental.itely:2890 (context id) +#. Documentation/learning/fundamental.itely:2934 (context id) msgid "ManualTwo" -msgstr "ManuelDeux" +msgstr "ClavierDeux" -#. Documentation/user/fundamental.itely:2894 (comment) +#. Documentation/learning/fundamental.itely:2943 (comment) msgid "end ManualTwo Staff context" -msgstr "fin du contexte de portée ManuelDeux" +msgstr "fin du contexte de portée ClavierDeux" -#. Documentation/user/fundamental.itely:2895 (comment) +#. Documentation/learning/fundamental.itely:2944 (comment) msgid "end PianoStaff context" msgstr "fin du contexte PianoStaff" -#. Documentation/user/fundamental.itely:2896 (context id) +#. Documentation/learning/fundamental.itely:2945 (context id) msgid "PedalOrgan" msgstr "PedalierOrgue" -#. Documentation/user/fundamental.itely:2900 (comment) +#. Documentation/learning/fundamental.itely:2951 (comment) msgid "end PedalOrgan Staff context" msgstr "fin du contexte de portée PedalierOrgue" -#. Documentation/user/fundamental.itely:2902 (comment) +#. Documentation/learning/fundamental.itely:2953 (comment) msgid "end Score context" msgstr "fin du contexte Score" -#. @node in Documentation/user/fundamental.itely -#. @chapter in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @chapter in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @chapter in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @chapter in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @chapter in Documentation/ja/user/fundamental.itely +#. Documentation/learning/fundamental.itely:2969 (variable) +msgid "hornNotes" +msgstr "corNotes" + +#. Documentation/learning/fundamental.itely:2981 (variable) +msgid "fragmentA" +msgstr "fragmentA" + +#. Documentation/learning/fundamental.itely:2982 (variable) +msgid "fragmentB" +msgstr "fragmentB" + +#. Documentation/learning/fundamental.itely:3001 (variable) +msgid "dolce" +msgstr "dolce" + +#. Documentation/learning/fundamental.itely:3004 (variable) +msgid "fthenp" +msgstr "fpuisp" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely msgid "Fundamental concepts" msgstr "Concepts fondamentaux" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "How LilyPond input files work" msgstr "Organisation des fichiers LilyPond" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Introduction to the LilyPond file structure" msgstr "Introduction à la structure de fichier LilyPond" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Score is a (single) compound musical expression" msgstr "La partition est une (unique) expression musicale composée" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Nesting music expressions" msgstr "Expressions musicales imbriquées" -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/tweaks.itely -#. Documentation/user/staff.itely:559 (context id) -#. Documentation/user/staff.itely:572 (context id) -#. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:598 (context id) -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/fr/user/tweaks.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/tweaks.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tweaks.itely -#. @rglos in Documentation/de/user/staff.itely -#. @rglos in Documentation/ja/user/fundamental.itely -#. @rglos in Documentation/ja/user/tweaks.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "ossia" msgstr "ossia" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "On the un-nestedness of brackets and ties" msgstr "Non-imbrication des crochets et liaisons" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Voices contain music" msgstr "Les voix contiennent la musique" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "I'm hearing Voices" msgstr "J'entends des Voix" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Explicitly instantiating voices" msgstr "Instanciation explicite des voix" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Note columns" msgstr "Empilement des notes" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Voices and vocals" msgstr "Voix et paroles" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Contexts and engravers" msgstr "Contextes et graveurs" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Contexts explained" msgstr "Tout savoir sur les contextes" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Creating contexts" msgstr "Création d'un contexte" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Engravers explained" msgstr "Tout savoir sur les graveurs" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Modifying context properties" msgstr "Modification des propriétés d'un contexte" -#. @subsubheading in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Setting context properties with @code{\\with}" -msgstr "Définition des propriétés de contexte avec @code{\\with}" - -#. @subsubheading in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Setting context properties with @code{\\context}" -msgstr "Définition des propriétés de contexte avec @code{\\context}" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\with}" +msgstr "Définition des propriétés de contexte avec @code{\\\\with}" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\context}" +msgstr "Définition des propriétés de contexte avec @code{\\\\context}" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Adding and removing engravers" msgstr "Ajout et suppression de graveurs" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Changing a single context" msgstr "Modification d'un seul contexte" -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/fundamental.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/fundamental.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "ambitus" msgstr "ambitus" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely +#. @subsubheading in Documentation/learning/fundamental.itely msgid "Changing all contexts of the same type" msgstr "Modification de tous les contextes d'un même type" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely msgid "Extending the templates" msgstr "Extension des modèles" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Soprano and cello" msgstr "Soprano et violoncelle" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Four-part SATB vocal score" msgstr "Partition pour chœur à quatre voix mixtes" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely msgid "Building a score from scratch" msgstr "Écriture d'une partition à partir de zéro" -#. Documentation/user/tweaks.itely:597 (comment) -#. Documentation/user/tweaks.itely:732 (comment) -msgid "Increase thickness of all following slurs from 1.2 to 5.0" -msgstr "L'épaisseur de toutes les liaisons à venir passe de 1,2 à 5,0" +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "Économie de saisie grâce aux identificateurs et fonctions" -#. Documentation/user/tweaks.itely:666 (comment) -#. Documentation/user/tweaks.itely:705 (comment) -#. Documentation/user/tweaks.itely:708 (comment) -msgid "Increase thickness of immediately following slur only" +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "Conducteurs et parties" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "L'épaisseur de toutes les liaisons à venir passe de 1,2 à 5,0" + +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) +msgid "Increase thickness of immediately following slur only" msgstr "Épaississement de la prochaine liaison seulement" -#. Documentation/user/tweaks.itely:736 (comment) +#. Documentation/learning/tweaks.itely:744 (comment) msgid "Revert thickness of all following slurs to default of 1.2" msgstr "Retour à l'épaisseur par défaut de 1,2 pour les prochaines liaisons" -#. Documentation/user/tweaks.itely:1412 (comment) +#. Documentation/learning/tweaks.itely:1421 (comment) msgid "Don't print clefs in this staff" msgstr "pas de clef pour cette portée" -#. Documentation/user/tweaks.itely:1414 (comment) +#. Documentation/learning/tweaks.itely:1423 (comment) msgid "Don't print time signatures in this staff" msgstr "pas de métrique pour cette portée" -#. Documentation/user/tweaks.itely:1478 (comment) +#. Documentation/learning/tweaks.itely:1487 (comment) msgid "Reduce all font sizes by ~24%" msgstr "Réduction d'environ 24 % de toutes les tailles de fonte" -#. Documentation/user/tweaks.itely:1544 (comment) +#. Documentation/learning/tweaks.itely:1554 (comment) msgid "Reduce stem length and line spacing to match" msgstr "" "Réduction de la taille des hampes et de l'interligne pour ne pas déborder" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) msgid "Set details for later Text Spanner" msgstr "Réglage des détails du texte avec extension" -#. Documentation/user/tweaks.itely:1977 (comment) -#. Documentation/user/tweaks.itely:2047 (comment) +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) msgid "Place dynamics above staff" msgstr "Positionnement des nuances au-dessus de la portée" -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) msgid "Start Ottava Bracket" msgstr "Début du crochet d'octaviation" -#. Documentation/user/tweaks.itely:1982 (comment) -#. Documentation/user/tweaks.itely:1989 (comment) -#. Documentation/user/tweaks.itely:2054 (comment) -#. Documentation/user/tweaks.itely:2061 (comment) -msgid "Add Dynamic Text" -msgstr "Ajout d'une nuance textuelle" - -#. Documentation/user/tweaks.itely:1984 (comment) -#. Documentation/user/tweaks.itely:2056 (comment) -msgid "Add Dynamic Line Spanner" -msgstr "Ajout d'une nuance graphique" +#. Documentation/learning/tweaks.itely:2006 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "Ajout d'une nuance textuelle au soufflet" -#. Documentation/user/tweaks.itely:1986 (comment) -#. Documentation/user/tweaks.itely:2058 (comment) +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) msgid "Add Text Script" msgstr "Ajout d'un commentaire textuel" -#. Documentation/user/tweaks.itely:1991 (comment) -#. Documentation/user/tweaks.itely:2063 (comment) +#. Documentation/learning/tweaks.itely:2012 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "Ajout d'une nuance textuelle et terminaison du soufflet" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) msgid "Stop Ottava Bracket" msgstr "Fin du crochet d'octaviation" -#. Documentation/user/tweaks.itely:2049 (comment) +#. Documentation/learning/tweaks.itely:2072 (comment) msgid "Place following Ottava Bracket below Text Spanners" msgstr "Positionnement du crochet d'octaviation sous le texte avec extension" -#. Documentation/user/tweaks.itely:2138 (comment) +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +msgid "Add Dynamic Text" +msgstr "Ajout d'une nuance textuelle" + +#. Documentation/learning/tweaks.itely:2079 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "Ajout d'une ligne d'extension pour la nuance" + +#. Documentation/learning/tweaks.itely:2161 (comment) msgid "Cause notes to space out to accommodate text" msgstr "Force les notes à s'espacer selon le texte" -#. Documentation/user/tweaks.itely:2161 (comment) +#. Documentation/learning/tweaks.itely:2184 (comment) msgid "This markup is short enough to fit without collision" msgstr "Ce morceau de texte est assez court pour ne pas risquer de collision" -#. Documentation/user/tweaks.itely:2165 (comment) +#. Documentation/learning/tweaks.itely:2188 (comment) msgid "This is too long to fit, so it is displaced upwards" msgstr "Celui-ci est trop long pour tenir, il est déplacé vers le haut" -#. Documentation/user/tweaks.itely:2169 (comment) -#. Documentation/user/tweaks.itely:2174 (comment) +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) msgid "Turn off collision avoidance" msgstr "Désactivation du processus d'évitement de collision" -#. Documentation/user/tweaks.itely:2176 (comment) +#. Documentation/learning/tweaks.itely:2199 (comment) msgid "and turn on textLengthOn" msgstr "activation de textLengthOn" -#. Documentation/user/tweaks.itely:2177 (comment) +#. Documentation/learning/tweaks.itely:2200 (comment) msgid "Spaces at end are honored" msgstr "Les espaces de la fin sont pris en compte" -#. Documentation/user/tweaks.itely:2284 (comment) +#. Documentation/learning/tweaks.itely:2307 (comment) msgid "Extend width by 1 staff space" msgstr "Élargissement d'un espace" -#. Documentation/user/tweaks.itely:2567 (comment) -msgid "This will not work, see below:" +#. Documentation/learning/tweaks.itely:2587 (comment) +msgid "This will not work, see below" msgstr "La commande suivante est sans résultat ; voir plus loin." -#. Documentation/user/tweaks.itely:2571 (comment) -msgid "This works:" +#. Documentation/learning/tweaks.itely:2591 (comment) +msgid "This works" msgstr "Celle-ci produit le résultat escompté" -#. Documentation/user/tweaks.itely:2622 (variable) -msgid "naturalplusflat" -msgstr "becarreplusbemol" +#. Documentation/learning/tweaks.itely:2627 (variable) +msgid "sesquisharp" +msgstr "dieseetdemi" + +#. Documentation/learning/tweaks.itely:2630 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "Le dièse et demi s'imprime, mais l'espace est rop resserré" -#. Documentation/user/tweaks.itely:2663 (comment) +#. Documentation/learning/tweaks.itely:2635 (comment) +msgid "This improves the spacing" +msgstr "Amélioration des espacements" + +#. Documentation/learning/tweaks.itely:2675 (comment) msgid "Extend width by 1 unit" msgstr "Élargissement d'une unité" -#. Documentation/user/tweaks.itely:2665 (comment) +#. Documentation/learning/tweaks.itely:2677 (comment) msgid "Align dynamics to a base line 2 units above staff" msgstr "" "Alignement des nuances sur une ligne de base à 2 unités au-dessus de la " "portée" -#. Documentation/user/tweaks.itely:2969 (variable) -#. Documentation/user/tweaks.itely:3018 (variable) -#. Documentation/user/tweaks.itely:3079 (variable) -#. Documentation/user/tweaks.itely:3149 (variable) -#. Documentation/user/tweaks.itely:3214 (variable) -#. Documentation/user/tweaks.itely:3274 (variable) +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) msgid "rhMusic" msgstr "mdMusique" -#. Documentation/user/tweaks.itely:2974 (comment) -#. Documentation/user/tweaks.itely:3023 (comment) -#. Documentation/user/tweaks.itely:3086 (comment) -#. Documentation/user/tweaks.itely:3158 (comment) -#. Documentation/user/tweaks.itely:3223 (comment) +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) msgid "Start polyphonic section of four voices" msgstr "Début d'une section polyphonique de quatre voix" -#. Documentation/user/tweaks.itely:2987 (variable) -#. Documentation/user/tweaks.itely:3036 (variable) -#. Documentation/user/tweaks.itely:3099 (variable) -#. Documentation/user/tweaks.itely:3173 (variable) -#. Documentation/user/tweaks.itely:3240 (variable) -#. Documentation/user/tweaks.itely:3302 (variable) +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +msgid "continuation of main voice" +msgstr "poursuite de la voix principale" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) msgid "lhMusic" msgstr "mgMusique" -#. Documentation/user/tweaks.itely:2996 (context id) -#. Documentation/user/tweaks.itely:3045 (context id) -#. Documentation/user/tweaks.itely:3108 (context id) -#. Documentation/user/tweaks.itely:3182 (context id) -#. Documentation/user/tweaks.itely:3249 (context id) -#. Documentation/user/tweaks.itely:3311 (context id) -#. Documentation/user/input.itely:995 (context id) +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1154 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) msgid "RH" msgstr "MD" -#. Documentation/user/tweaks.itely:3000 (context id) -#. Documentation/user/tweaks.itely:3049 (context id) -#. Documentation/user/tweaks.itely:3112 (context id) -#. Documentation/user/tweaks.itely:3186 (context id) -#. Documentation/user/tweaks.itely:3253 (context id) -#. Documentation/user/tweaks.itely:3315 (context id) -#. Documentation/user/input.itely:1001 (context id) +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1160 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) msgid "LH" msgstr "MG" -#. Documentation/user/tweaks.itely:3227 (comment) -#. Documentation/user/tweaks.itely:3289 (comment) +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) msgid "Move the c2 out of the main note column so the merge will work" msgstr "Déplace le do2 pour que la fusion puisse fonctionner" -#. Documentation/user/tweaks.itely:3230 (comment) -#. Documentation/user/tweaks.itely:3292 (comment) +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) msgid "Stem on the d2 must be down to permit merging" msgstr "La hampe du ré2 ira vers le bas pour permettre la fusion" -#. Documentation/user/tweaks.itely:3287 (comment) +#. Documentation/learning/tweaks.itely:3368 (comment) msgid "Reposition the c2 to the right of the merged note" msgstr "Repositionnement du do2 à droite de la note fusionnée" -#. Documentation/user/tweaks.itely:3423 (comment) -#. Documentation/user/tweaks.itely:3445 (comment) +#. Documentation/learning/tweaks.itely:3379 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "La hampe du re2 devrait être invisible" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) msgid "Visible tempo marking" msgstr "Indication de tempo visible" -#. Documentation/user/tweaks.itely:3427 (comment) -#. Documentation/user/tweaks.itely:3449 (comment) +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) msgid "Invisible tempo marking to lengthen fermata in MIDI" msgstr "Indication de tempo invisible ; utilisée pour le MIDI" -#. Documentation/user/tweaks.itely:3430 (comment) -#. Documentation/user/tweaks.itely:3452 (comment) +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) msgid "New tempo for next section" msgstr "Nouveau tempo pour la section suivante" -#. Documentation/user/tweaks.itely:3509 (variable) +#. Documentation/learning/tweaks.itely:3604 (variable) msgid "emphasize" msgstr "emphase" -#. Documentation/user/tweaks.itely:3513 (variable) +#. Documentation/learning/tweaks.itely:3609 (variable) msgid "normal" msgstr "normal" -#. Documentation/user/tweaks.itely:3519 (variable) +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) msgid "SopranoMusic" msgstr "SopranoMusique" -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:980 (context id) +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1139 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) msgid "Soprano" msgstr "Soprano" -#. Documentation/user/tweaks.itely:3741 (comment) +#. Documentation/learning/tweaks.itely:3672 (variable) +msgid "mpdolce" +msgstr "mpdolce" + +#. Documentation/learning/tweaks.itely:3679 (variable) +msgid "inst" +msgstr "instr" + +#. Documentation/learning/tweaks.itely:4184 (comment) msgid "Arrange to obtain color from color-notehead procedure" msgstr "Arranger pour obtenir une couleur par la procédure color-notehead" -#. @node in Documentation/user/tweaks.itely -#. @chapter in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @chapter in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @chapter in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @chapter in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @chapter in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely msgid "Tweaking output" msgstr "Retouche de partition" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Tweaking basics" msgstr "Retouches élémentaires" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Introduction to tweaks" msgstr "Introduction aux retouches" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Objects and interfaces" msgstr "Objets et interfaces" -# jcm - Journal officiel de la République française du 19/11/2008 +# jcm - Journal officiel de la République française du 19/11/2008 # jcm - (NOR : CTNX0825937X) traduction de naming -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Naming conventions of objects and properties" msgstr "Conventions de nommage des objets et propriétés" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Tweaking methods" msgstr "Méthodes de retouche" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "The Internals Reference manual" -msgstr "Le manuel des références internes" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +msgstr "Le manuel de référence ds propriétés internes" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Properties of layout objects" msgstr "Propriétés des objets de rendu" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Finding the context" msgstr "Détermination du contexte adéquat" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Overriding once only" msgstr "Redéfinition pour une seule occurence" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Reverting" msgstr "Rétablissement" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Properties found in interfaces" msgstr "Propriétés listées par interface" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Specifying the context in lyric mode" msgstr "Spécification du contexte en mode lyrique" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Types of properties" msgstr "Types de propriétés" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Appearance of objects" msgstr "Apparence des objets" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Visibility and color of objects" msgstr "Visibilité et couleur des objets" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely msgid "stencil" msgstr "stencil" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "break-visibility" msgstr "visibilité des barres (break-visibility)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "transparent" msgstr "transparence" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "color" msgstr "couleur" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Size of objects" msgstr "Taille des objets" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Length and thickness of objects" msgstr "Longueur et épaisseur des objets" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Placement of objects" msgstr "Positionnement des objets" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Automatic behavior" msgstr "Comportement automatique" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Within-staff objects" msgstr "Objets inclus dans la portée" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely msgid "Fingering" msgstr "Doigtés" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Outside-staff objects" msgstr "Objets hors de la portée" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "\\textLengthOn" -msgstr "\\textLengthOn" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "\\\\textLengthOn" +msgstr "\\\\textLengthOn" + +#. @subheading in Documentation/learning/tweaks.itely msgid "Grob sizing" msgstr "Dimensionnement des objets graphiques" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Collisions of objects" msgstr "Collisions d'objets" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Moving objects" msgstr "Déplacement d'objets" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Fixing overlapping notation" msgstr "Correction des collisions d'objets" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "padding property" msgstr "la propriété padding" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "left-padding and right-padding" -msgstr "left-padding et right-padding" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "right-padding" +msgstr "décalage à droite" + +#. @subheading in Documentation/learning/tweaks.itely msgid "staff-padding property" msgstr "la propriété staff-padding" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "self-alignment-X property" msgstr "la propriété self-alignment-X" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "staff-position property" msgstr "la propriété staff-position" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "extra-offset property" msgstr "la propriété extra-offset" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "positions property" msgstr "la propriété positions" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "force-hshift property" msgstr "la propriété force-hshift" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Real music example" msgstr "Exemple concret" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely msgid "Further tweaking" msgstr "Autres retouches" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Other uses for tweaks" msgstr "Autres utilisations des retouches" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Tying notes across voices" msgstr "Liaison entre plusieurs voix" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely +#. @subheading in Documentation/learning/tweaks.itely msgid "Simulating a fermata in MIDI" msgstr "Rendu MIDI d'un point d'orgue" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Using variables for tweaks" msgstr "Utilisation de variables dans les retouches" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "Feuilles de style" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Other sources of information" msgstr "Autres sources de documentation" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Avoiding tweaks with slower processing" msgstr "Options ralentissant le traitement" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely msgid "Advanced tweaks with Scheme" msgstr "Retouches avancées avec Scheme" -#. Documentation/user/working.itely:221 (variable) -msgid "hornNotes" -msgstr "corNotes" - -#. Documentation/user/working.itely:232 (variable) -msgid "fragmentA" -msgstr "fragmentA" - -#. Documentation/user/working.itely:233 (variable) -msgid "fragmentB" -msgstr "fragmentB" - -#. Documentation/user/working.itely:246 (variable) -msgid "dolce" -msgstr "dolce" - -#. Documentation/user/working.itely:247 (variable) -#. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:282 (variable) -#. Documentation/user/programming-interface.itely:101 (variable) -msgid "padText" -msgstr "decallageTexte" - -#. Documentation/user/working.itely:248 (variable) -msgid "fthenp" -msgstr "fpuisp" - -#. Documentation/user/working.itely:333 (variable) -msgid "mpdolce" -msgstr "mpdolce" - -#. Documentation/user/working.itely:336 (variable) -msgid "inst" -msgstr "instr" - -#. @node in Documentation/user/working.itely -#. @chapter in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @chapter in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @chapter in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @chapter in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @chapter in Documentation/ja/user/working.itely -msgid "Working on LilyPond projects" -msgstr "Travail sur des projets LilyPond" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "Suggestions for writing LilyPond input files" -msgstr "Suggestions pour la saisie de fichiers LilyPond" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "General suggestions" -msgstr "Suggestions générales" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Typesetting existing music" -msgstr "Gravure de musique existante" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Large projects" -msgstr "Projets d'envergure" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Saving typing with variables and functions" -msgstr "Économie de saisie grâce aux identificateurs et fonctions" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Style sheets" -msgstr "Feuilles de style" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "When things don't work" -msgstr "Quand ça ne fonctionne pas" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Updating old input files" -msgstr "Mise à jour d'anciens fichiers" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -msgid "Common errors" -msgstr "Quelques erreurs des plus courantes" - -#. @node in Documentation/user/working.itely -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Music runs off the page" -msgstr "La musique déborde de la page" - -#. @node in Documentation/user/working.itely -msgid "Apparent error in ../ly/init.ly" -msgstr "Erreur renvoyant à ../ly/init.ly" - -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Apparent error in @code{../ly/init.ly}" -msgstr "Erreur renvoyant à @code{../ly/init.ly}" - -#. @node in Documentation/user/working.itely -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Error message Unbound variable %" -msgstr "Message d'erreur « Unbound variable % »" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Troubleshooting (taking it all apart)" -msgstr "Résolution de problèmes -- tout remettre à plat" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Minimal examples" -msgstr "Exemples minimalistes" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "Scores and parts" -msgstr "Conducteurs et parties" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "Make and Makefiles" -msgstr "De la commande @command{make} et des fichiers @code{Makefile}" - -#. @node in Documentation/user/templates.itely -#. @appendix in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendix in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendix in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendix in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendix in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely msgid "Templates" msgstr "Modèles" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Single staff" msgstr "Portée unique" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes only" msgstr "Notes seules" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes and lyrics" msgstr "Notes et paroles" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes and chords" msgstr "Notes et accords" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Notes, lyrics, and chords." msgstr "Notes, paroles et accords" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Piano templates" msgstr "Modèles pour claviers" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Solo piano" msgstr "Piano seul" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano and melody with lyrics" msgstr "Chant et accompagnement" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano centered lyrics" msgstr "Piano et paroles entre les portées" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Piano centered dynamics" msgstr "Piano et nuances entre les portées" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "String quartet" msgstr "Quatuor à cordes" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "String quartet parts" msgstr "Parties pour quatuor à cordes" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Vocal ensembles" msgstr "Ensemble vocal" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB vocal score" -msgstr "Partition pour chÅ“ur à quatre voix mixtes" +msgstr "Partition pour chœur à quatre voix mixtes" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB vocal score and automatic piano reduction" -msgstr "Partition pour chÅ“ur SATB avec réduction pour piano" +msgstr "Partition pour chœur SATB avec réduction pour piano" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "SATB with aligned contexts" -msgstr "Partition pour chÅ“ur SATB avec alignement des contextes" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +msgstr "Partition pour chœur SATB avec alignement des contextes" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" +msgstr "Chœur à quatre voix mixtes sur quatre portées" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" +msgstr "Couplet en solo et refrain sur deux voix" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Hymn tunes" +msgstr "Hymnes" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" +msgstr "Psaumes" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Orchestral templates" msgstr "Modèles pour orchestre" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Orchestra, choir and piano" -msgstr "Orchestre, chÅ“ur et piano" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +msgstr "Orchestre, chœur et piano" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely msgid "Ancient notation templates" msgstr "Exemples de notation ancienne" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Transcription of mensural music" msgstr "Transcription de musique mensurale" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Gregorian transcription template" msgstr "Transcription du grégorien" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Other templates" +msgstr "Autre modèles" + +#. @appendixsubsec in Documentation/learning/templates.itely msgid "Jazz combo" msgstr "Symboles de jazz" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "lilypond-book templates" -msgstr "Squelettes pour lilypond-book" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "Termes musicaux -- ordre alphabétique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" +msgstr "A" -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "LaTeX" -msgstr "LaTeX" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "a due" -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -#. @subsubheading in Documentation/ja/user/lilypond-book.itely -msgid "Texinfo" -msgstr "Texinfo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accelerando" +msgstr "accelerando" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "xelatex" -msgstr "xelatex" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "accent" -#. Documentation/user/scheme-tutorial.itely:304 (variable) -#. Documentation/user/programming-interface.itely:135 (variable) -msgid "tempoPadded" -msgstr "tempoDecale" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "accessoire" -#. Documentation/user/scheme-tutorial.itely:323 (variable) -msgid "pattern" -msgstr "motif" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "adagio" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendix in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendix in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendix in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendix in Documentation/de/user/scheme-tutorial.itely -#. @node in Documentation/ja/user/scheme-tutorial.itely -#. @appendix in Documentation/ja/user/scheme-tutorial.itely -msgid "Scheme tutorial" -msgstr "Tutoriel Scheme" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" +msgstr "al niente" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendixsec in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendixsec in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendixsec in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendixsec in Documentation/de/user/scheme-tutorial.itely -#. @node in Documentation/ja/user/scheme-tutorial.itely -#. @appendixsec in Documentation/ja/user/scheme-tutorial.itely -msgid "Tweaking with Scheme" -msgstr "Scheme et les retouches" - -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -msgid "GNU Free Documentation License" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "à la brève" -#. @subheading in Documentation/user/fdl.itexi -msgid "ADDENDUM: How to use this License for your documents" -msgstr "SUPPLÉMENT : comment utiliser cette licence pour vos documents" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "allegro" -#. @top in Documentation/user/lilypond-program.tely -msgid "GNU LilyPond --- Application Usage" -msgstr "GNU LilyPond --- Utilisation du programme" - -#. @node in Documentation/user/install.itely -#. @chapter in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @chapter in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @chapter in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @chapter in Documentation/de/user/install.itely -#. @node in Documentation/ja/user/install.itely -#. @chapter in Documentation/ja/user/install.itely -msgid "Install" -msgstr "Installation" - -#. @node in Documentation/user/install.itely -#. @section in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @section in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -#. @node in Documentation/ja/user/install.itely -#. @section in Documentation/ja/user/install.itely -msgid "Precompiled binaries" -msgstr "Paquets précompilés" - -#. @unnumberedsubsec in Documentation/user/install.itely -#. @unnumberedsubsec in Documentation/fr/user/install.itely -#. @unnumberedsubsec in Documentation/es/user/install.itely -#. @unnumberedsubsec in Documentation/de/user/install.itely -#. @unnumberedsubsec in Documentation/ja/user/install.itely -msgid "Downloading" -msgstr "Téléchargement" - -#. @node in Documentation/user/compile.itely -#. @section in Documentation/user/compile.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -#. @node in Documentation/de/user/compile.itely -#. @section in Documentation/de/user/compile.itely -#. @node in Documentation/ja/user/install.itely -#. @section in Documentation/ja/user/install.itely -msgid "Compiling from source" -msgstr "Compilation à partir du code source" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Downloading source code" -msgstr "Téléchargement du code source" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Requirements" -msgstr "Logiciels prérequis" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compilation" -msgstr "Compilation" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Running requirements" -msgstr "Logiciels nécessaires à l'exécution" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Requirements for building documentation" -msgstr "Prérequis pour générer la documentation" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Building LilyPond" -msgstr "Compilation de LilyPond" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling" -msgstr "Compilation" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling for multiple platforms" -msgstr "Compilation pour plusieurs plateformes" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling outside the source tree" -msgstr "Compilation en dehors de l'arborescence des sources" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Useful @command{make} variables" -msgstr "Variables utiles pour @command{make}" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Building documentation" -msgstr "Compilation de la documentation" - -#. @node in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Commands for building documentation" -msgstr "Commandes pour générer la documentation" - -#. @node in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Building documentation without compiling LilyPond" -msgstr "Compilation de la documentation sans compiler LilyPond" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Testing LilyPond" -msgstr "Test de LilyPond" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Problems" -msgstr "Problèmes" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Bison 1.875" -msgstr "Bison 1.875" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Solaris" -msgstr "Solaris" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "FreeBSD" -msgstr "FreeBSD" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "International fonts" -msgstr "Polices de caractères non européens" - -#. @node in Documentation/user/setup.itely -#. @chapter in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @chapter in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @chapter in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @chapter in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @chapter in Documentation/ja/user/setup.itely -msgid "Setup" -msgstr "Environnement de travail" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Setup for specific Operating Systems" -msgstr "Spécificités pour certains systèmes" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Setup for MacOS X" -msgstr "Spécificités pour MacOS X" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -#. @subsubheading in Documentation/ja/user/setup.itely -msgid "Using Python scripts on MacOS 10.3 or 10.4" -msgstr "Utilisation de scripts Python sur MacOS 10.3 ou 10.4" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -#. @subsubheading in Documentation/ja/user/setup.itely -msgid "MacOS X on the command line" -msgstr "MacOS X et la ligne de commande" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Text editor support" -msgstr "LilyPond et les éditeurs de texte" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alteration" +msgstr "altération" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Emacs mode" -msgstr "Mode Emacs" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "alto" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Vim mode" -msgstr "Mode Vim" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alto clef" +msgstr "clef d'alto" -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "jEdit" -msgstr "jEdit" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "TexShop" -msgstr "TexShop" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "TextMate" -msgstr "TextMate" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "LilyKDE" -msgstr "LilyKDE" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Point and click" -msgstr "Pointer-cliquer" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "gamme mineure ancienne" -#. @node in Documentation/user/running.itely -#. @chapter in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @chapter in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @chapter in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @chapter in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @chapter in Documentation/ja/user/running.itely -msgid "Running LilyPond" -msgstr "Exécution de LilyPond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "andante" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Normal usage" -msgstr "Utilisation habituelle" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "arpège" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Command-line usage" -msgstr "Utilisation en ligne de commande" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ascending interval" +msgstr "intervalle ascendant" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmentation" +msgstr "augmentation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmented interval" +msgstr "intervalle augmenté" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "manuscript" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" +msgstr "B" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Invoking lilypond" -msgstr "Lancement de lilypond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "appoggiature descendante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "mesure" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "barre de mesure" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone" +msgstr "baryton" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "clef de baryton" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" +msgstr "basse" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Invoking @command{lilypond}" -msgstr "Lancement de @command{lilypond}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bass clef" +msgstr "clef de basse" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Command line options for lilypond" -msgstr "Options en ligne de commande pour lilypond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat" +msgstr "battement (temps)" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Command line options for @command{lilypond}" -msgstr "Options en ligne de commande pour @command{lilypond}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "répétition de temps" -#. @node in Documentation/user/running.itely -#. @subsection in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Environment variables" -msgstr "Variables d'environnement" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "liaison" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Error messages" -msgstr "Messages d'erreur" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" +msgstr "crochet" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Updating files with convert-ly" -msgstr "Mise à jour des fichiers avec convert-ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brass" +msgstr "cuivre" -#. @section in Documentation/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Updating files with @command{convert-ly}" -msgstr "Mise à jour des fichiers avec @command{convert-ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "signe de respiration" -#. @node in Documentation/user/running.itely -msgid "Invoking convert-ly" -msgstr "Utilisation de convert-ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" +msgstr "brève" -#. @subsection in Documentation/user/running.itely -msgid "Invoking @command{convert-ly}" -msgstr "Utilisation de @command{convert-ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "do" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Command line options for convert-ly" -msgstr "Options en ligne de commande pour convert-ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C clef" +msgstr "clef d'ut" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Command line options for @command{convert-ly}" -msgstr "Options en ligne de commande pour @command{convert-ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "cadence" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Problems with convert-ly" -msgstr "Limitations de convert-ly" - -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Problems with @code{convert-ly}" -msgstr "Limitations de @command{convert-ly}" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Reporting bugs" -msgstr "Rapport de bogue" - -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "LilyPond-book" -msgstr "LilyPond-book" - -#. @chapter in Documentation/user/lilypond-book.itely -#. @chapter in Documentation/fr/user/lilypond-book.itely -#. @chapter in Documentation/es/user/lilypond-book.itely -#. @chapter in Documentation/de/user/lilypond-book.itely -#. @chapter in Documentation/ja/user/lilypond-book.itely -msgid "@command{lilypond-book}: Integrating text and music" -msgstr "@command{lilypond-book} : association musique-texte" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "An example of a musicological document" -msgstr "Exemple de document musicologique" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "cadence" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Input" -msgstr "Fichier d'entrée" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "césure" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Processing" -msgstr "Traitement" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "canon" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "centième" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "central C" +msgstr "do médium" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "gamme chromatique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "chromatisme" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "mode ancien" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Output" -msgstr "Résultat" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "cluster" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Integrating music and text" -msgstr "Association musique-texte" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "comma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "mesure à 4/4" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" +msgstr "Tempérament occidental" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "mesure à 4/4" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "complément" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound interval" +msgstr "intervalle composé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "métrique composée" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "temps composé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "tonalité de concert" -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -#. @subsubheading in Documentation/ja/user/lilypond-book.itely -msgid "@LaTeX{}" -msgstr "@LaTeX{}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "mouvement conjoint" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "consonnance" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "contralto" +msgstr "contralto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "copying music" +msgstr "copie de musique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "contrepoint" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "haute contre" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cue-notes" +msgstr "notes d'ornement" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -msgid "HTML" -msgstr "HTML" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "guidon" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "temps décomposé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "ré" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "da capo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal niente" +msgstr "dal niente" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "dal segno" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "intervalle descendant" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "gamme diatonique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "didymic comma" +msgstr "comma didymique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "intervalle diminué" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "diminuendo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminution" +msgstr "diminution" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "direct" +msgstr "direct" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "mouvement disjoint" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "dissonnance" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonant interval" +msgstr "intervalle dissonnant" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "division" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "saut" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -msgid "DocBook" -msgstr "DocBook" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "dominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant ninth chord" +msgstr "accord de neuvième de dominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant seventh chord" +msgstr "accord de septième de dominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "mode dorien" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "point (d'augmentation)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double appoggiatura" +msgstr "appoggiature double" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double bar line" +msgstr "double barre" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double dotted note" +msgstr "note doublement pointée" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double time signature" +msgstr "métrique double" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double trill" +msgstr "double trille" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "métrique binaire" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duplet" +msgstr "duolet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "mi" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "mode d'église" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth note" +msgstr "croche" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "demi-soupir" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "élision" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "embellishment" +msgstr "ornementation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "engraving" +msgstr "gravure" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "enharmonique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "tempérament égal" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "expression mark" +msgstr "signe d'interprétation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "fa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F clef" +msgstr "clef de fa" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "chute" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Common conventions" -msgstr "Conventions communes" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "ligature en soufflet" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Including a LilyPond file" -msgstr "Inclusion d'un fichier LilyPond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "point d'arrêt" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Including LilyPond code" -msgstr "Inclusion de code LilyPond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "quinte" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Processing the DocBook document" -msgstr "Génération du document DocBook" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "basse chiffrée" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Music fragment options" -msgstr "Options applicables aux fragments de musique" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flag" +msgstr "crochet" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "Invoking lilypond-book" -msgstr "Utilisation de lilypond-book" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flageolet" +msgstr "flageolet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "appoggiature ascendante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "forte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "quarte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "Partition à la française" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "Portée à la française" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Invoking @command{lilypond-book}" -msgstr "Utilisation de @command{lilypond-book}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "Portées à la française" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "fugue" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "harmonie fonctionnelle" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "sol" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G clef" +msgstr "clef de sol" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "glissando" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Format-specific instructions" -msgstr "Instructions spécifiques à certains formats" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "système" -#. @subheading in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Command line options" -msgstr "Options en ligne de commande" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grave" +msgstr "grave" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Filename extensions" -msgstr "Extensions de nom de fichier" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "gruppetto" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "Alternate methods of mixing text and music" -msgstr "Autres méthodes d'association texte-musique" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "si" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Alternative methods of mixing text and music" -msgstr "Autres méthodes d'association texte-musique" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "soufflet" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Many quotes from a large score" -msgstr "Extraction de plusieurs fragments d'une grande partition" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half rest" +msgstr "demi-pause" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Inserting LilyPond output into OpenOffice.org" -msgstr "Insertion du résultat de LilyPond dans OpenOffice.org" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "cadence harmonique" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Inserting LilyPond output into other programs" -msgstr "Insertion du résultat de LilyPond dans d'autres programmes" - -#. @node in Documentation/user/converters.itely -#. @chapter in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @chapter in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @chapter in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @chapter in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -#. @chapter in Documentation/ja/user/converters.itely -msgid "Converting from other formats" -msgstr "Conversion à partir d'autres formats" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking midi2ly" -msgstr "Utilisation de midi2ly" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @command{midi2ly}" -msgstr "Utilisation de @command{midi2ly}" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking musicxml2ly" -msgstr "Utilisation de musicxml2ly" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @code{musicxml2ly}" -msgstr "Utilisation de @command{musicxml2ly}" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking abc2ly" -msgstr "Utilisation d'abc2ly" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @code{abc2ly}" -msgstr "Utilisation de @command{abc2ly}" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking etf2ly" -msgstr "Utilisation d'etf2ly" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @command{etf2ly}" -msgstr "Utilisation de @command{etf2ly}" - -#. @node in Documentation/user/converters.itely -#. @section in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Generating LilyPond files" -msgstr "Génération de fichiers LilyPond" - -#. @top in Documentation/user/lilypond.tely -#. @top in Documentation/de/user/lilypond.tely -msgid "GNU LilyPond --- Notation Reference" -msgstr "GNU LilyPond --- Manuel de notation" - -#. @chapheading in Documentation/user/lilypond.tely -msgid "The music typesetter" -msgstr "Le système de gravure musicale" - -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond grammar" -msgstr "La grammaire de LilyPond" - -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond command index" -msgstr "Index des commandes LilyPond" - -#. @node in Documentation/user/notation.itely -#. @chapter in Documentation/user/notation.itely -#. @node in Documentation/fr/user/notation.itely -#. @chapter in Documentation/fr/user/notation.itely -#. @node in Documentation/es/user/notation.itely -#. @chapter in Documentation/es/user/notation.itely -#. @node in Documentation/de/user/notation.itely -#. @chapter in Documentation/de/user/notation.itely -msgid "Musical notation" -msgstr "Notation musicale générale" - -#. Documentation/user/pitches.itely:732 (variable) -#. Documentation/user/input.itely:1064 (variable) -#. Documentation/user/input.itely:1083 (variable) -#. Documentation/user/input.itely:1120 (variable) -#. Documentation/user/input.itely:1135 (variable) -#. Documentation/user/changing-defaults.itely:453 (variable) -#. Documentation/user/changing-defaults.itely:488 (context id) -#. Documentation/user/changing-defaults.itely:538 (context id) -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:30 (variable) -#. input/lsr/controlling-tuplet-bracket-visibility.ly:20 (variable) -#. input/lsr/letter-tablature-formatting.ly:25 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:115 (variable) -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:138 (variable) -#. input/lsr/vertically-aligned-dynamics-and-textscripts.ly:51 (variable) -msgid "music" -msgstr "musique" - -#. Documentation/user/pitches.itely:1136 (comment) -msgid "not strictly necessary, but a good reminder" -msgstr "pas strictement nécessaire, mais en pense-bête" - -#. Documentation/user/pitches.itely:1143 (context id) -#. Documentation/user/staff.itely:1117 (variable) -msgid "clarinet" -msgstr "clarinette" - -#. Documentation/user/pitches.itely:1228 (variable) -#. Documentation/user/changing-defaults.itely:444 (variable) -msgid "musicA" -msgstr "musiqueA" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "harmoniques" -#. Documentation/user/pitches.itely:1242 (variable) -#. Documentation/user/changing-defaults.itely:445 (variable) -msgid "musicB" -msgstr "musiqueB" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "harmonie" -#. Documentation/user/pitches.itely:1261 (context id) -#. Documentation/user/keyboards.itely:179 (context id) -#. Documentation/user/keyboards.itely:279 (context id) -#. Documentation/user/percussion.itely:175 (variable) -#. Documentation/user/percussion.itely:365 (variable) -#. input/lsr/jazz-combo-template.ly:243 (variable) -msgid "up" -msgstr "haut" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "hémiole" -#. Documentation/user/pitches.itely:1265 (context id) -#. Documentation/user/keyboards.itely:189 (context id) -#. Documentation/user/keyboards.itely:288 (context id) -#. Documentation/user/percussion.itely:178 (variable) -#. Documentation/user/percussion.itely:366 (variable) -#. input/lsr/jazz-combo-template.ly:249 (variable) -msgid "down" -msgstr "bas" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Writing pitches" -msgstr "Écriture des hauteurs de note" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Absolute octave entry" -msgstr "Hauteurs avec octave absolue" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Relative octave entry" -msgstr "Octaves relatives" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "fifth" -msgstr "quinte" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "homophony" +msgstr "homophonie" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "quarter tone" -msgstr "quart de ton" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "crochet" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Note names in other languages" -msgstr "Noms de note dans d'autres langues" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Changing multiple pitches" -msgstr "Modification de plusieurs hauteurs" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Octave checks" -msgstr "Vérifications d'octave" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Transpose" -msgstr "Transposition" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Displaying pitches" -msgstr "Gravure des hauteurs" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Key signature" -msgstr "Armure" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "church mode" -msgstr "mode ancien" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "métrique hymnale anglaise" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inversion" +msgstr "inversion" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inverted interval" +msgstr "intervalle renversé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "intonation juste" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "tonalité" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "laissez vibrer" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "scordatura" -msgstr "scordatura" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "largo" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ottava brackets" -msgstr "Marques d'octaviation" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "octavation" -msgstr "octaviation" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leading note" +msgstr "sensible" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Instrument transpositions" -msgstr "Instruments transpositeurs" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "concert pitch" -msgstr "tonalité de concert" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "ligne supplémentaire" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "transposing instrument" -msgstr "instrument transpositeur" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato" +msgstr "legato" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Automatic accidentals" -msgstr "Altérations accidentelles automatiques" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ambitus" -msgstr "Ambitus" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Note heads" -msgstr "Têtes de note" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Special note heads" -msgstr "Têtes de note spécifiques" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Easy notation note heads" -msgstr "Têtes de note avec nom de note" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Shape note heads" -msgstr "Têtes de note à forme variable" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Improvisation" -msgstr "Improvisation" - -#. Documentation/user/rhythms.itely:314 (comment) -msgid "Alter durations to triplets" -msgstr "Modification des durées pour obtenir un triolet" - -#. Documentation/user/rhythms.itely:316 (comment) -#. Documentation/user/rhythms.itely:344 (comment) -msgid "Normal durations" -msgstr "Durées normales" - -#. Documentation/user/rhythms.itely:318 (comment) -msgid "Double the duration of chord" -msgstr "Doublement de la durée de l'accord" - -#. Documentation/user/rhythms.itely:320 (comment) -msgid "Duration of quarter, appears like sixteenth" -msgstr "Bien que durant une noire, apparaît comme une double croche" - -#. Documentation/user/rhythms.itely:346 (comment) -msgid "Scale music by *2/3" -msgstr "Échelonnement de la musique par 2/3" - -#. Documentation/user/rhythms.itely:350 (comment) -msgid "Scale music by *2" -msgstr "Échelonnement de la musique au double" - -#. Documentation/user/rhythms.itely:437 (comment) -msgid "First alternative: following note is tied normally" -msgstr "Première alternative : la note qui suit est liée normalement" - -#. Documentation/user/rhythms.itely:439 (comment) -msgid "Second alternative: following note has a repeated tie" -msgstr "Seconde alternative : la liaison est rappelée" - -#. Documentation/user/rhythms.itely:605 (comment) -msgid "These two lines are just to prettify this example" -msgstr "Les deux lignes qui suivent ne sont là que pour illustrer le propos" - -#. Documentation/user/rhythms.itely:608 (comment) -msgid "Print a maxima rest, equal to four breves" -msgstr "Affiche une maxima, équivalant à quatre double-pauses" - -#. Documentation/user/rhythms.itely:610 (comment) -msgid "Print a longa rest, equal to two breves" -msgstr "Affiche une longa, équivalant à deux double-pauses" - -#. Documentation/user/rhythms.itely:612 (comment) -msgid "Print a breve rest" -msgstr "Affiche une double-pause" - -#. Documentation/user/rhythms.itely:721 (comment) -msgid "This is valid input, but does nothing" -msgstr "Cette entrée est tout à fait valide, mais ne fait rien" - -#. Documentation/user/rhythms.itely:749 (comment) -#. Documentation/user/rhythms.itely:804 (comment) -msgid "Rest measures contracted to single measure" -msgstr "Contraction des mesures de silence consécutives en une seule" - -#. Documentation/user/rhythms.itely:800 (comment) -#. input/lsr/avoiding-collisions-with-chord-fingerings.ly:24 (comment) -msgid "Default behavior" -msgstr "Comportement par défaut" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "courbe de legato" -#. Documentation/user/rhythms.itely:807 (comment) -msgid "Rest measures expanded" -msgstr "Expansion des mesures de silence" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leger line" +msgstr "ligne supplémentaire" -#. Documentation/user/rhythms.itely:846 (comment) -msgid "This fails, as the wrong object name is specified" -msgstr "Ceci échouera, il y a erreur sur l'objet spécifié" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ligature" +msgstr "ligature" -#. Documentation/user/rhythms.itely:849 (comment) -msgid "This is correct and works" -msgstr "Formulation correcte, qui fonctionnera" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "lilypond" -#. Documentation/user/rhythms.itely:994 (comment) -msgid "Default style" -msgstr "Style par défaut" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "ligne" -#. Documentation/user/rhythms.itely:997 (comment) -msgid "Change to numeric style" -msgstr "Adoption du style numérique" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "loco" -#. Documentation/user/rhythms.itely:1001 (comment) -msgid "Revert to default style" -msgstr "Retour au style par défaut" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "appoggiature longue" -#. Documentation/user/rhythms.itely:1147 (comment) -msgid "Show all bar numbers" -msgstr "Affichage de tous les numéros de mesure" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" +msgstr "longue" -#. Documentation/user/rhythms.itely:1287 (comment) -msgid "Now each staff has its own time signature." -msgstr "Chaque portée dispose désormais de sa propre métrique." +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyric tie" +msgstr "liaison de paroles" -#. Documentation/user/rhythms.itely:1415 (context id) -msgid "myRhythm" -msgstr "monRythme" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major interval" +msgstr "intervalle majeur" -#. Documentation/user/rhythms.itely:1786 (comment) -msgid "end 1/16 beams for all time signatures at the 1/16 moment" -msgstr "" -"fin des ligatures de doubles croches, quelle que soit la métrique, au moment " -"1/16" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maxima" +msgstr "maxima" -#. Documentation/user/rhythms.itely:1790 (comment) -msgid "end 1/32 beams for all time signatures at the 1/16 moment" -msgstr "" -"fin des ligatures de triples croches, quelle que soit la métrique, au moment " -"1/16" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "tempérament mésotonique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure" +msgstr "mesure" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "répétition de mesure" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "médiante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma line" +msgstr "trait d'union" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "cadence mélodique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensural notation" +msgstr "notation ancienne" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "indicateur de mensuration" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "métrique" -#. Documentation/user/rhythms.itely:1800 (comment) -msgid "end beams of all durations in 5/8 time signature at the 2/8 moment" -msgstr "" -"fin de ligature, pour une métrique à 5/8, sur la deuxième croche de la mesure" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "marque métronomique" -#. Documentation/user/rhythms.itely:1815 (comment) -msgid "rhythm 3-1-1-2" -msgstr "subdivision 3-1-1-2" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "indication métronomique" -#. Documentation/user/rhythms.itely:1816 (comment) -msgid "Context not specified - does not work correctly" -msgstr "Contexte non spécifié -- cela ne fonctionne pas" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "mezzo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "mezzo-soprano" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor interval" +msgstr "intervalle mineur" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "mode mixolydien" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "mode" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "modulation" +msgstr "modulation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "mordant" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "motif" -#. Documentation/user/rhythms.itely:1822 (comment) -msgid "Works correctly with context specified" -msgstr "Fonctionne car le contexte est spécifié" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motive" +msgstr "motif" -#. Documentation/user/rhythms.itely:1857 (comment) -msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" -msgstr "annulation de la règle de fin de ligature des doubles croches, dans un 4/4, sur la première noire" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "mouvement" -#. Documentation/user/rhythms.itely:1870 (comment) -msgid "this won't revert it!" -msgstr "ceci n'est pas en concordance" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "silence multimesures" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "tons voisins" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ninth" +msgstr "neuvième" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "détaché" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note" +msgstr "note" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "tête de note" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note names" +msgstr "noms de note" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "octaviation" -#. Documentation/user/rhythms.itely:1872 (comment) -msgid "this will" -msgstr "ceci est conforme" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave mark" +msgstr "marque d'octave" -#. Documentation/user/rhythms.itely:2018 (comment) -msgid "revert to non-feathered beams" -msgstr "retour à des liens de croches rectilignes" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave marking" +msgstr "octaviation" -#. Documentation/user/rhythms.itely:2268 (comment) -#. input/lsr/printing-bar-numbers-at-regular-intervals.ly:43 (comment) -msgid "Permit first bar number to be printed" -msgstr "Le numéro de la première mesure est imprimé" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave sign" +msgstr "signe d'octave" -#. Documentation/user/rhythms.itely:2371 (variable) -msgid "pipeSymbol" -msgstr "pipeSymbole" - -#. Documentation/user/rhythms.itely:2746 (variable) -msgid "MyCadenza" -msgstr "MaCadence" - -#. @node in Documentation/user/rhythms.itely -#. @section in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @section in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @section in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @section in Documentation/de/user/rhythms.itely -msgid "Rhythms" -msgstr "Rythme" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rhythms" -msgstr "Écriture du rythme" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Durations" -msgstr "Durées" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "breve" -msgstr "brève" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ornament" +msgstr "ornement" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "longa" -msgstr "longue" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "partie" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "maxima" -msgstr "maxima" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "pause" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "Duration names notes and rests" -msgstr "Noms des notes et silences selon leur durée" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "crochet" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "tuplet" -msgstr "nolet" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "répétition en pourcent" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "percussions" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "perfect interval" +msgstr "intervalle juste" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrase" +msgstr "phrase" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "levée" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "pizzicato" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "polymétrie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "polymetric" msgstr "polymétrique" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Scaling durations" -msgstr "Changement d'échelle des durées" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "laissez vibrer" -msgstr "laissez vibrer" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rests" -msgstr "Écriture des silences" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Invisible rests" -msgstr "Silences invisibles" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Full measure rests" -msgstr "Silences valant une mesure" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "multi-measure rest" -msgstr "silence multi-mesures" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Displaying rhythms" -msgstr "Gravure du rythme" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Upbeats" -msgstr "Levées" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Unmetered music" -msgstr "Musique sans métrique" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "cadenza" -msgstr "cadence" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Polymetric notation" -msgstr "Notation polymétrique" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "polymetric time signature" msgstr "métrique composite" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "meter" -msgstr "métrique" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic note splitting" -msgstr "Découpage automatique des notes" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Showing melody rhythms" -msgstr "Gravure de lignes rythmiques" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Beams" -msgstr "Barres de ligature" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic beams" -msgstr "Barres de ligature automatiques" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Setting automatic beam behavior" -msgstr "Définition des règles de ligature automatique" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Manual beams" -msgstr "Barres de ligature manuelles" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Feathered beams" -msgstr "Liens de croches en soufflet" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Bars" -msgstr "Barres de mesure" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar lines" -msgstr "Barres de mesure" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar numbers" -msgstr "Numéros de mesure" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar and bar number checks" -msgstr "Vérification des limites et numéros de mesure" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Rehearsal marks" -msgstr "Indications de repère" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Special rhythmic concerns" -msgstr "Fonctionnalités rythmiques particulières" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Aligning to cadenzas" -msgstr "Alignement et cadences" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Time administration" -msgstr "Gestion du temps" - -#. Documentation/user/expressive.itely:388 (variable) -#. Documentation/user/expressive.itely:465 (variable) -msgid "moltoF" -msgstr "moltoF" - -#. Documentation/user/expressive.itely:409 (variable) -#. Documentation/user/expressive.itely:442 (variable) -msgid "roundF" -msgstr "suggereF" - -#. Documentation/user/expressive.itely:411 (variable) -#. Documentation/user/expressive.itely:446 (variable) -msgid "boxF" -msgstr "cadreF" - -#. Documentation/user/expressive.itely:425 (variable) -msgid "sfzp" -msgstr "sfzp" - -#. Documentation/user/expressive.itely:447 (variable) -msgid "mfEspress" -msgstr "mfEspress" - -#. Documentation/user/expressive.itely:449 (variable) -msgid "roundFdynamic" -msgstr "nuanceFcercle" - -#. Documentation/user/expressive.itely:450 (variable) -msgid "boxFdynamic" -msgstr "nuanceFcadre" - -#. Documentation/user/expressive.itely:451 (variable) -msgid "mfEspressDynamic" -msgstr "mfEspressNuance" - -#. @node in Documentation/user/expressive.itely -#. @section in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @section in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @section in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @section in Documentation/de/user/expressive.itely -msgid "Expressive marks" -msgstr "Signes d'interprétation" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Attached to notes" -msgstr "Indications attachées à des notes" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Articulations and ornamentations" -msgstr "Articulations et ornements" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "tenuto" -msgstr "tenuto" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "accent" -msgstr "accent" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "staccato" -msgstr "staccato" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "portato" msgstr "portato" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "al niente" -msgstr "al niente" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "hairpin" -msgstr "soufflet" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "New dynamic marks" -msgstr "Personnalisation des indications de nuance" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Curves" -msgstr "Courbes" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Breath marks" -msgstr "Signes de respiration" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -#. input/lsr/breathing-signs.ly:35 (comment) -msgid "caesura" -msgstr "césure" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Falls and doits" -msgstr "Chutes et sauts" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "fall" -msgstr "chute" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "doit" -msgstr "saut" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Lines" -msgstr "Lignes" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Glissando" -msgstr "Glissando" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "glissando" -msgstr "glissando" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "power chord" +msgstr "accord de quinte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "presto" +msgstr "presto" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "proportion" +msgstr "proportion" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "comma pytagoricien" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "quartolet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "qualité" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter rest" +msgstr "soupir" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "quart de ton" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Arpeggio" -msgstr "Arpèges" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "arpeggio" -msgstr "arpège" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "quintolet" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Trills" -msgstr "Trilles" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "trill" -msgstr "trille" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "rallentando" -#. Documentation/user/repeats.itely:299 (variable) -#. input/lsr/volta-text-markup-using-repeatcommands.ly:23 (variable) -msgid "voltaAdLib" -msgstr "voltaAdLib" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "tonalité relative" -#. @node in Documentation/user/repeats.itely -#. @section in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @section in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @section in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @section in Documentation/de/user/repeats.itely -msgid "Repeats" -msgstr "Répétitions et reprises" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Long repeats" -msgstr "Répétition d'un long passage" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Normal repeats" -msgstr "Répétitions courantes" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "repeat" msgstr "répétition" -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "volta" -msgstr "volta" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Manual repeat marks" -msgstr "Indications de reprise manuelles" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Written-out repeats" -msgstr "Répétitions explicites" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Short repeats" -msgstr "Répétition d'un fragment court" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Percent repeats" -msgstr "Répétition en pourcent" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "percent repeat" -msgstr "répétition en pourcent" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "simile" -msgstr "simile" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "rythme" -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Tremolo repeats" -msgstr "Répétition en trémolo" - -#. Documentation/user/simultaneous.itely:94 (comment) -msgid "explicit single voice" -msgstr "voix unique explicite" - -#. Documentation/user/simultaneous.itely:100 (comment) -msgid "single first note" -msgstr "première note unique" - -#. Documentation/user/simultaneous.itely:112 (comment) -msgid "no single first note" -msgstr "pas de première note unique" - -#. Documentation/user/simultaneous.itely:617 (variable) -msgid "instrumentOne" -msgstr "instrumentUn" - -#. Documentation/user/simultaneous.itely:625 (variable) -msgid "instrumentTwo" -msgstr "instrumentDeux" - -#. Documentation/user/simultaneous.itely:802 (comment) -msgid "Bar 3 ..." -msgstr "Mesure 3..." - -#. @node in Documentation/user/simultaneous.itely -#. @section in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @section in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @section in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @section in Documentation/de/user/simultaneous.itely -msgid "Simultaneous notes" -msgstr "Notes simultanées" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "ritardando" -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Single voice" -msgstr "Monophonie" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Chorded notes" -msgstr "Notes en accords" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Simultaneous expressions" -msgstr "Expressions simultanées" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Clusters" -msgstr "Clusters" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "cluster" -msgstr "cluster" - -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Multiple voices" -msgstr "Plusieurs voix" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Single-staff polyphony" -msgstr "Polyphonie sur une portée" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "ritenuto" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Voice styles" -msgstr "Styles de voix" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Collision resolution" -msgstr "Résolution des collisions" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Automatic part combining" -msgstr "Regroupement automatique de parties" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "a due" -msgstr "a due" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "degré de la gamme" -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. input/lsr/flamenco-notation.ly:136 (variable) -#. input/lsr/flamenco-notation.ly:233 (context id) -msgid "part" -msgstr "partie" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "scordatura" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Writing music in parallel" -msgstr "Saisie de musique en parallèle" - -#. Documentation/user/staff.itely:1086 (variable) -#. Documentation/user/staff.itely:1101 (variable) -#. Documentation/user/staff.itely:1269 (variable) -msgid "flute" -msgstr "flute" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "score" +msgstr "partition" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "seconde" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "semibrève" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "demi-ton" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "septième" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "sextolet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextuplet" +msgstr "sextolet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "shake" +msgstr "tremblement" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" +msgstr "simile" -#. Documentation/user/staff.itely:1211 (variable) -#. Documentation/user/staff.itely:1232 (variable) -msgid "oboe" -msgstr "hautbois" - -#. Documentation/user/staff.itely:1290 (variable) -#. Documentation/user/staff.itely:1306 (context id) -msgid "piccolo" -msgstr "piccolo" - -#. Documentation/user/staff.itely:1298 (variable) -#. Documentation/user/staff.itely:1307 (context id) -msgid "cbassoon" -msgstr "cbasson" - -#. @node in Documentation/user/staff.itely -#. @section in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @section in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @section in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @section in Documentation/de/user/staff.itely -msgid "Staff notation" -msgstr "Notation sur la portée" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Displaying staves" -msgstr "Gravure des portées" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Instantiating new staves" -msgstr "Initialisation de nouvelles portées" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staff" -msgstr "portée" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "métrique simple" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "double croche" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "quart de soupir" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixth" +msgstr "sixte" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "quadruple croche" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "seizième de soupir" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "barre de répétition" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "solmisation" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata" +msgstr "sonate" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "forme sonate" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "song texts" +msgstr "texte et chanson" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" +msgstr "soprano" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "staccato" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely msgid "staves" msgstr "portées" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Grouping staves" -msgstr "Regroupement de portées" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "bracket" -msgstr "crochet" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "grand staff" -msgstr "système" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Nested staff groups" -msgstr "Imbrication de regroupements de portées" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Modifying single staves" -msgstr "Modification de portées individuelles" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Staff symbol" -msgstr "Symbole de la portée" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "line" -msgstr "ligne" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "ledger line" -msgstr "ligne supplémentaire" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "hampe" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "stringendo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "cordes" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "temps fort" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "sous-dominanate" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "sous-médiante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "sous-tonique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "sul G" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "sus-dominante" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "sus-tonique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "symphony" +msgstr "symphonie" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "syncope" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "comma syntonique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "tempérament" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +msgid "tenor" +msgstr "tenor" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "dixième" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "tenuto" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Ossia staves" -msgstr "Portées d'ossia" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "Frenched staff" -msgstr "Portée à la française" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "third" +msgstr "tierce" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second note" +msgstr "triple croche" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "huitième de soupir" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "basse continue" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time" +msgstr "temps" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "ton" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "tonique" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" +msgstr "instrument transpositeur" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Hiding staves" -msgstr "Masquage de portées" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Writing parts" -msgstr "Écriture de parties séparées" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Metronome marks" -msgstr "Indications métronomiques" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome" -msgstr "métronome" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "clé de sol" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronomic indication" -msgstr "indication métronomique" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "tremolo" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "tempo indication" -msgstr "indication du tempo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triad" +msgstr "triade" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome mark" -msgstr "marque métronomique" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "trill" +msgstr "trille" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Instrument names" -msgstr "Noms d'instrument" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triple meter" +msgstr "mesure ternaire" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Quoting other voices" -msgstr "Citation d'autres voix" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Formatting cue notes" -msgstr "Mise en forme d'une citation" - -#. Documentation/user/editorial.itely:326 (comment) -msgid "this is deliberate nonsense; note that the stems remain black" -msgstr "pour cette erreur manifeste, notez que les hampes restent en noir" - -#. @node in Documentation/user/editorial.itely -#. @section in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @section in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @section in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @section in Documentation/de/user/editorial.itely -msgid "Editorial annotations" -msgstr "Notation éditoriale" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Inside the staff" -msgstr "Dans la portée" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Selecting notation font size" -msgstr "Indication de la taille de fonte musicale" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Fingering instructions" -msgstr "Doigtés" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tritone" +msgstr "triton" -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Hidden notes" -msgstr "Dictée à trous" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Coloring objects" -msgstr "Coloration d'objets" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Parentheses" -msgstr "Parenthèses" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Stems" -msgstr "Hampes" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Outside the staff" -msgstr "Hors de la portée" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Balloon help" -msgstr "Info-bulle" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Grid lines" -msgstr "Quadrillage temporel" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Analysis brackets" -msgstr "Crochets d'analyse" - -#. Documentation/user/text.itely:421 (variable) -msgid "allegro" -msgstr "allegro" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "diapason" -#. @node in Documentation/user/text.itely -#. @section in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @section in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @section in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @section in Documentation/de/user/text.itely -msgid "Text" -msgstr "Texte" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Writing text" -msgstr "Ajout de texte" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" +msgstr "nolet" -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text scripts" -msgstr "Commentaires textuels" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text spanners" -msgstr "Extensions de texte" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text marks" -msgstr "Indications textuelles" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Separate text" -msgstr "Texte indépendant" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Formatting text" -msgstr "Mise en forme du texte" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text markup introduction" -msgstr "Introduction au formatage de texte" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Selecting font and font size" -msgstr "Sélection de la fonte et de la taille" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text alignment" -msgstr "Alignement du texte" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Graphic notation inside markup" -msgstr "Inclusion de graphique dans une étiquette de texte" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Music notation inside markup" -msgstr "Inclusion de musique dans une étiquette de texte" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Multi-page markup" -msgstr "Bloc de texte étendu" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Fonts" -msgstr "Fontes" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Fonts explained" -msgstr "Tout savoir sur les fontes" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Single entry fonts" -msgstr "Attribution d'une fonte en particulier" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Entire document fonts" -msgstr "Choix des fontes par défaut" - -#. @node in Documentation/user/specialist.itely -#. @chapter in Documentation/user/specialist.itely -#. @node in Documentation/fr/user/specialist.itely -#. @chapter in Documentation/fr/user/specialist.itely -#. @node in Documentation/es/user/specialist.itely -#. @chapter in Documentation/es/user/specialist.itely -#. @node in Documentation/de/user/specialist.itely -#. @chapter in Documentation/de/user/specialist.itely -msgid "Specialist notation" -msgstr "Notation spécialisée" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "gruppetto" -#. Documentation/user/vocal.itely:519 (comment) -msgid "not recommended: left aligns syllables" -msgstr "peu recommandable : les syllabes sont alignées à gauche" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "unisson" -#. Documentation/user/vocal.itely:522 (comment) -msgid "wrong: durations needed" -msgstr "mauvais : il manque les durées" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "upbeat" +msgstr "levée" -#. Documentation/user/vocal.itely:525 (comment) -msgid "correct" -msgstr "correct" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" +msgstr "voix" -#. Documentation/user/vocal.itely:677 (context id) -msgid "lala" -msgstr "global" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "volta" -#. Documentation/user/vocal.itely:818 (context id) -msgid "splitpart" -msgstr "partieSeparee" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "temps faible" -#. Documentation/user/vocal.itely:863 (variable) -msgid "voice" -msgstr "voix" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole rest" +msgstr "pause" -#. Documentation/user/vocal.itely:870 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:22 (variable) -msgid "lyr" -msgstr "paroles" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole tone" +msgstr "ton" -#. Documentation/user/vocal.itely:1069 (context id) -msgid "tune" -msgstr "melodie" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "bois" -#. Documentation/user/vocal.itely:1111 (context id) -msgid "lahlah" -msgstr "lala" - -#. Documentation/user/vocal.itely:1294 (comment) -msgid "moves the column off the left margin;" -msgstr "décalage par rapport à la marge de gauche" - -#. Documentation/user/vocal.itely:1295 (comment) -msgid "can be removed if space on the page is tight" -msgstr "peut être supprimé si l'espace sur la page est réduit" - -#. Documentation/user/vocal.itely:1303 (comment) -#. Documentation/user/vocal.itely:1321 (comment) -msgid "adds vertical spacing between verses" -msgstr "ajout d'espace vertical entre les couplets" - -#. Documentation/user/vocal.itely:1311 (comment) -msgid "adds horizontal spacing between columns;" -msgstr "ajout d'espace horizontal entre les colonnes" - -#. Documentation/user/vocal.itely:1312 (comment) -msgid "if they are still too close, add more \\\" \\\" pairs" -msgstr "" -"si elles sont toujours trop proches, ajouter d'autres paires de \\\" \\\"" - -#. Documentation/user/vocal.itely:1313 (comment) -msgid "until the result looks good" -msgstr "jusqu'à ce que le résultat soit acceptable." - -#. Documentation/user/vocal.itely:1329 (comment) -msgid "gives some extra space on the right margin;" -msgstr "décalage par rapport à la marge de droite" - -#. Documentation/user/vocal.itely:1330 (comment) -msgid "can be removed if page space is tight" -msgstr "peut être supprimé si l'espace sur la page est réduit" - -#. @node in Documentation/user/vocal.itely -#. @section in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @section in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @section in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @section in Documentation/de/user/vocal.itely -msgid "Vocal music" -msgstr "Musique vocale" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Common notation for vocal music" -msgstr "Vue d'ensemble de la musique vocale" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "References for vocal music and lyrics" -msgstr "Références en matière de musique vocale" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Opera" -msgstr "Opéra" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Song books" -msgstr "Cahier de chants" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spoken music" -msgstr "Musique parlée" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Chants" -msgstr "Chants" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Ancient vocal music" -msgstr "Musique vocale ancienne" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Entering lyrics" -msgstr "Saisie des paroles" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics explained" -msgstr "Tout savoir sur les paroles" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Working with lyrics and variables" -msgstr "Travail avec des paroles et variables" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Automatic syllable durations" -msgstr "Durée automatique des syllabes" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Manual syllable durations" -msgstr "Durée explicite des syllabes" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple syllables to one note" -msgstr "Plusieurs syllabes sur une note" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple notes to one syllable" -msgstr "Plusieurs notes pour une même syllabe" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Skipping notes" -msgstr "Saut de notes" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Extenders and hyphens" -msgstr "Traits d'union et de prolongation" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics and repeats" -msgstr "Paroles et reprises" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Specific uses of lyrics" -msgstr "Situations particulères en matière de paroles" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Divisi lyrics" -msgstr "Paroles alternatives" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics independent of notes" -msgstr "Paroles indépendantes des notes" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spacing out syllables" -msgstr "Espacement des syllabes" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Centering lyrics between staves" -msgstr "Centrage des paroles entre les portées" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Stanzas" -msgstr "Couplets" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding stanza numbers" -msgstr "Numérotation des couplets" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding dynamics marks to stanzas" -msgstr "Indication de nuance et couplets" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding singers' names to stanzas" -msgstr "Indication du personnage et couplets" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Stanzas with different rhythms" -msgstr "Rythme différent selon le couplet" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -msgid "Ignoring melismata" -msgstr "Désactivation du traitement des mélismes" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Switching to an alternative melody" -msgstr "Passage à une mélodie alternative" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end" -msgstr "Paroles en fin de partition" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end in multiple columns" -msgstr "Paroles sur plusieurs colonnes en fin de partition" - -#. Documentation/user/keyboards.itely:191 (comment) -msgid "keep staff alive" -msgstr "maintient la portée active" - -#. Documentation/user/keyboards.itely:280 (context id) -msgid "melOne" -msgstr "melodieUn" - -#. Documentation/user/keyboards.itely:349 (context id) -#. Documentation/user/fretted-strings.itely:247 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:25 (variable) -#. input/lsr/jazz-combo-template.ly:207 (context id) -#. input/lsr/jazz-combo-template.ly:216 (context id) -msgid "two" -msgstr "deux" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "Noms des notes et silences selon leur durée" -#. Documentation/user/keyboards.itely:403 (comment) -msgid "stems may overlap the other staff" -msgstr "autorise les hampes à déborder sur l'autre portée" - -#. Documentation/user/keyboards.itely:405 (comment) -msgid "extend the stems to reach other other staff" -msgstr "étend les hampes pour qu'elles atteignent l'autre portée" - -#. Documentation/user/keyboards.itely:407 (comment) -msgid "do not print extra flags" -msgstr "pas de crochet superflu" - -#. Documentation/user/keyboards.itely:409 (comment) -msgid "prevent beaming as needed" -msgstr "on empêche la formation de la ligature automatique" - -#. @node in Documentation/user/keyboards.itely -#. @section in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @section in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @section in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @section in Documentation/de/user/keyboards.itely -msgid "Keyboard and other multi-staff instruments" -msgstr "Instruments utilisant des portées multiples" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Common notation for keyboards" -msgstr "Vue d'ensemble des claviers" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for keyboards" -msgstr "Généralités sur les instruments à clavier" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff manually" -msgstr "Changement de portée manuel" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff automatically" -msgstr "Changement de portée automatique" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Staff-change lines" -msgstr "Lignes de changement de portée" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Cross-staff stems" -msgstr "Hampes et changements de portée" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Piano" -msgstr "Piano" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Piano pedals" -msgstr "Pédales de piano" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Accordion" -msgstr "Accordéon" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Discant symbols" -msgstr "Symboles de jeux" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Harp" -msgstr "Harpe" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for harps" -msgstr "Généralités sur la harpe" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Harp pedals" -msgstr "Pédales de harpe" - -#. @node in Documentation/user/unfretted-strings.itely -#. @section in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @section in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @section in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @section in Documentation/de/user/unfretted-strings.itely -msgid "Unfretted string instruments" -msgstr "Cordes non frettées" - -#. @node in Documentation/user/unfretted-strings.itely -#. @subsection in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @subsection in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @subsection in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @subsection in Documentation/de/user/unfretted-strings.itely -msgid "Common notation for unfretted strings" -msgstr "Vue d'ensemble de la notation pour cordes non frettées" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "References for unfretted strings" -msgstr "Références en matière de cordes non frettées" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Bowing indications" -msgstr "Indications d'archet" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Harmonics" -msgstr "Harmoniques" - -#. @rglos in Documentation/user/unfretted-strings.itely -#. @rglos in Documentation/es/user/unfretted-strings.itely -#. @rglos in Documentation/de/user/unfretted-strings.itely -msgid "harmonics" -msgstr "harmoniques" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" +msgstr "Liste alphabétique des termes non occidentaux" -#. @node in Documentation/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Snap (Bartok) pizzicato" -msgstr "Pizzicato Bartok" - -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -msgid "Snap (Bartók) pizzicato" -msgstr "Pizzicato Bartók" - -#. Documentation/user/fretted-strings.itely:243 (variable) -msgid "melodia" -msgstr "melodie" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" +msgstr "" -#. Documentation/user/fretted-strings.itely:248 (context id) -msgid "shared" -msgstr "partage" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" +msgstr "" -#. Documentation/user/fretted-strings.itely:249 (context id) -msgid "solo" -msgstr "solo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" +msgstr "" -#. Documentation/user/fretted-strings.itely:326 (variable) -msgid "mynotes" -msgstr "mesnotes" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" +msgstr "" -#. Documentation/user/fretted-strings.itely:453 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:32 (comment) -msgid "A chord for ukelele" -msgstr "Un accord pour ukulele" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "" -#. Documentation/user/fretted-strings.itely:785 (variable) -#. Documentation/user/fretted-strings.itely:808 (variable) -#. Documentation/user/fretted-strings.itely:837 (variable) -#. Documentation/user/fretted-strings.itely:868 (variable) -#. Documentation/user/fretted-strings.itely:894 (variable) -#. Documentation/user/fretted-strings.itely:942 (variable) -msgid "mychords" -msgstr "mesaccords" - -#. Documentation/user/fretted-strings.itely:812 (variable) -msgid "mychordlist" -msgstr "malistedaccords" - -#. Documentation/user/fretted-strings.itely:929 (comment) -msgid "add a new chord shape" -msgstr "ajout d'un nouveau canevas d'accord" - -#. Documentation/user/fretted-strings.itely:933 (comment) -msgid "add some new chords based on the power chord shape" -msgstr "ajout de nouveaux accords basés sur le nouveau canevas" - -#. @node in Documentation/user/fretted-strings.itely -#. @section in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @section in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @section in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @section in Documentation/de/user/fretted-strings.itely -msgid "Fretted string instruments" -msgstr "Instruments à cordes frettées" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Common notation for fretted strings" -msgstr "Vue d'ensemble des cordes frettées" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "References for fretted strings" -msgstr "Références en matière de cordes frettées" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "String number indications" -msgstr "Indications du numéro de corde" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Default tablatures" -msgstr "Tablatures par défaut" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Custom tablatures" -msgstr "Tablatures personnalisées" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Fret diagram markups" -msgstr "Tablatures sous forme d'étiquette" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Predefined fret diagrams" -msgstr "Tablatures prédéfinies" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "" -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Automatic fret diagrams" -msgstr "Tablatures automatiques" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Right-hand fingerings" -msgstr "Doigtés pour la main droite" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Guitar" -msgstr "Guitare" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating position and barring" -msgstr "Indication de la position et du barré" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating harmonics and dampened notes" -msgstr "Indication des harmoniques et notes étouffées" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Banjo" -msgstr "Banjo" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Banjo tablatures" -msgstr "Tablatures pour banjo" - -#. Documentation/user/percussion.itely:385 (comment) -msgid "These lines define the position of the woodblocks in the stave;" -msgstr "" -"Les lignes qui suivent définissent la position des woodblocks sur la portée ;" - -#. Documentation/user/percussion.itely:386 (comment) -msgid "if you like, you can change it or you can use special note heads" -msgstr "" -"si cela vous chante, vous pouvez la modifier ou bien utiliser des têtes de " -"note " - -#. Documentation/user/percussion.itely:387 (comment) -msgid "for the woodblocks." -msgstr "spécifiques selon le woodblock." - -#. Documentation/user/percussion.itely:391 (variable) -msgid "woodstaff" -msgstr "porteewoodblocks" - -#. Documentation/user/percussion.itely:392 (comment) -msgid "This defines a staff with only two lines." -msgstr "Ceci définit une portée ne comportant que deux lignes." - -#. Documentation/user/percussion.itely:393 (comment) -msgid "It also defines the positions of the two lines." -msgstr "Nous définissons aussi la position de ces deux lignes." - -#. Documentation/user/percussion.itely:396 (comment) -msgid "This is neccessary; if not entered, the barline would be too short!" -msgstr "nécessaire afin d'obtenir des barres de mesure assez longues" - -#. Documentation/user/percussion.itely:403 (comment) -msgid "with this you load your new drum style table" -msgstr "chargement du nouveau style" - -#. Documentation/user/percussion.itely:425 (variable) -msgid "tambustaff" -msgstr "porteetambourin" - -#. Documentation/user/percussion.itely:439 (comment) -msgid "the trick with the scaled duration and the shorter rest" -msgstr "le truc concernant le raccourcissement de la durée et le court silence" - -#. Documentation/user/percussion.itely:440 (comment) -msgid "is neccessary for the correct ending of the trill-span!" -msgstr "permet d'obtenir une extension correcte du trille" - -#. Documentation/user/percussion.itely:451 (variable) -msgid "tamtamstaff" -msgstr "porteetamtam" - -#. Documentation/user/percussion.itely:473 (variable) -msgid "bellstaff" -msgstr "porteecloche" - -#. Documentation/user/percussion.itely:504 (variable) -msgid "drumsA" -msgstr "percuA" - -#. Documentation/user/percussion.itely:519 (variable) -msgid "drumsB" -msgstr "percuB" - -#. @node in Documentation/user/percussion.itely -#. @section in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @section in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @section in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @section in Documentation/de/user/percussion.itely -msgid "Percussion" -msgstr "Percussions" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "" -#. @node in Documentation/user/percussion.itely -#. @subsection in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @subsection in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @subsection in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @subsection in Documentation/de/user/percussion.itely -msgid "Common notation for percussion" -msgstr "Vue d'ensemble des percussions" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "References for percussion" -msgstr "Références en matière de notation pour percussions" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Basic percussion notation" -msgstr "Notation de base pour percussions" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Drum rolls" -msgstr "Roulements de tambour" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Pitched percussion" -msgstr "Percussions avec hauteurs" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Percussion staves" -msgstr "Portées de percussion" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Custom percussion staves" -msgstr "Portées de percussion personnalisées" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Ghost notes" -msgstr "Notes fantômes" - -#. @node in Documentation/user/wind.itely -#. @section in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @section in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @section in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @section in Documentation/de/user/wind.itely -msgid "Wind instruments" -msgstr "Instruments à vent" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Common notation for wind instruments" -msgstr "Vue d'ensemble des instruments à vent" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "References for wind instruments" -msgstr "Références en matière d'instruments à vent" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Bagpipes" -msgstr "Cornemuse" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe definitions" -msgstr "Définitions pour la cornemuse" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe example" -msgstr "Exemple pour la cornemuse" - -#. Documentation/user/chords.itely:696 (variable) -#. input/lsr/chordchanges-for-fretboards.ly:35 (variable) -msgid "myChords" -msgstr "mesAccords" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "" -#. Documentation/user/chords.itely:1026 (comment) -#. Documentation/user/chords.itely:1047 (comment) -msgid "Put notes on same Staff as figures" -msgstr "Assemblage des notes et de la basse chiffrée sur une même portée" - -#. Documentation/user/chords.itely:1110 (comment) -msgid "The extenders are correct here, with the same rhythm as the bass" -msgstr "" -"Les prolongateurs sont corrects, ils suivent bien le rythme de la basse" - -#. Documentation/user/chords.itely:1122 (comment) -msgid "The extenders are incorrect here, even though the timing is the same" -msgstr "Les prolongateurs sont erronés, bien que le rythme soit le même" - -#. @node in Documentation/user/chords.itely -#. @section in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @section in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @section in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @section in Documentation/de/user/chords.itely -msgid "Chord notation" -msgstr "Notation des accords" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Chord mode" -msgstr "Mode accords" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Chord mode overview" -msgstr "Généralités sur le mode accords" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Common chords" -msgstr "Accords courants" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Extended and altered chords" -msgstr "Extensions et altération d'accords" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Displaying chords" -msgstr "Gravure des accords" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Printing chord names" -msgstr "Impression des noms d'accord" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Customizing chord names" -msgstr "Personnalisation des noms d'accord" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Figured bass" -msgstr "Basse chiffrée" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Introduction to figured bass" -msgstr "Introduction à la basse chiffrée" - -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/chords.itely -msgid "figured bass" -msgstr "basse chiffrée" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" +msgstr "" -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Entering figured bass" -msgstr "Saisie de la basse chiffrée" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Displaying figured bass" -msgstr "Gravure de la basse chiffrée" - -#. Documentation/user/ancient.itely:357 (context id) -msgid "discantus" -msgstr "discantus" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "" -#. Documentation/user/ancient.itely:823 (variable) -msgid "ficta" -msgstr "ficta" +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "Sources" -#. Documentation/user/ancient.itely:976 (context id) -msgid "cantus" -msgstr "cantus" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond grammar" +msgstr "La grammaire de LilyPond" -#. Documentation/user/ancient.itely:2399 (variable) -#. Documentation/user/ancient.itely:2434 (variable) -#. Documentation/user/ancient.itely:2502 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:39 (variable) -msgid "chant" -msgstr "Chant" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "Index des commandes LilyPond" -#. Documentation/user/ancient.itely:2405 (variable) -#. Documentation/user/ancient.itely:2445 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:46 (variable) -msgid "verba" -msgstr "verba" +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "Notation musicale générale" -#. Documentation/user/ancient.itely:2487 (variable) -msgid "spiritus" -msgstr "spiritus" - -#. Documentation/user/ancient.itely:2495 (variable) -msgid "spirLyr" -msgstr "spiritusParoles" - -#. @node in Documentation/user/ancient.itely -#. @section in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @section in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @section in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @section in Documentation/de/user/ancient.itely -msgid "Ancient notation" -msgstr "Notations anciennes" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Overview of the supported styles" -msgstr "Les différents styles pris en charge" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Ancient notation---common features" -msgstr "Vue d'ensemble de la notation ancienne" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Pre-defined contexts" -msgstr "Contextes prédéfinis" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ligatures" -msgstr "Ligatures" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Custodes" -msgstr "Guidons" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Figured bass support" -msgstr "Prise en charge de la basse chiffrée" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Typesetting mensural music" -msgstr "Gravure de musique mensurale" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural contexts" -msgstr "Les contextes de la musique mensurale" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural clefs" -msgstr "Clefs mensurales" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural time signatures" -msgstr "Métriques mensurales" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural note heads" -msgstr "Têtes de note mensurales" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural flags" -msgstr "Crochets en musique mensurale" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural rests" -msgstr "Silences en musique mensurale" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural accidentals and key signatures" -msgstr "Altérations et armures mensurales" - -#. @node in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -msgid "Annotational accidentals (musica ficta)" -msgstr "Altérations éditoriales (musica ficta)" - -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Annotational accidentals (@emph{musica ficta})" -msgstr "Altérations éditoriales (@emph{musica ficta})" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "White mensural ligatures" -msgstr "Ligatures mensurales" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Typesetting Gregorian chant" -msgstr "Transcription de chant grégorien" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian chant contexts" -msgstr "Contextes du chant grégorien" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian clefs" -msgstr "Clefs grégoriennes" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian accidentals and key signatures" -msgstr "Altérations et armures grégoriennes" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Divisiones" -msgstr "Divisions" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian articulation signs" -msgstr "Articulations grégoriennes" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Augmentum dots (@emph{morae})" -msgstr "Points d'augmentation (@emph{morae})" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian square neume ligatures" -msgstr "Neumes ligaturés grégoriens" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Working with ancient music---scenarios and solutions" -msgstr "Gestion de la musique ancienne --- questionnements et solutions" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Incipits" -msgstr "Des incipits" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensurstriche layout" -msgstr "Mise en forme de la musique mensurale" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Transcribing Gregorian chant" -msgstr "Transcription de chant grégorien" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient and modern from one source" -msgstr "Différentes éditions à partir d'une même source" +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +msgid "Specialist notation" +msgstr "Notation spécialisée" -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Editorial markings" -msgstr "Notation éditoriale" - -#. @node in Documentation/user/world.itely -#. @section in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @section in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @section in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @section in Documentation/de/user/world.itely -msgid "World music" -msgstr "Musiques du monde" - -#. @node in Documentation/user/world.itely -#. @subsection in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @subsection in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @subsection in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @subsection in Documentation/de/user/world.itely -msgid "Arabic music" -msgstr "Musique arabe" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "References for Arabic music" -msgstr "Références en matière de musique arabe" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic note names" -msgstr "Noms de note arabes" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic key signatures" -msgstr "Tonalités arabes" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic time signatures" -msgstr "Métriques arabes" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic music example" -msgstr "Exemple concret de musique arabe" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Further reading" -msgstr "Autres sources d'information" - -#. Documentation/user/input.itely:546 (comment) +#. Documentation/notation/input.itely:673 (comment) msgid "not printed" msgstr "non imprimé" -#. Documentation/user/input.itely:978 (variable) +#. Documentation/notation/input.itely:1137 (variable) msgid "allLyrics" msgstr "tuttiParoles" -#. @node in Documentation/user/input.itely -#. @chapter in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @chapter in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @chapter in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @chapter in Documentation/de/user/input.itely +#. Documentation/notation/input.itely:1223 (variable) +#. Documentation/notation/input.itely:1242 (variable) +#. Documentation/notation/input.itely:1279 (variable) +#. Documentation/notation/input.itely:1294 (variable) +#. Documentation/notation/spacing.itely:1555 (variable) +#. Documentation/notation/spacing.itely:1609 (variable) +#. Documentation/notation/spacing.itely:1634 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:53 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "musique" + +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely msgid "General input and output" msgstr "Généralités en matière d'entrée et sortie" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Input structure" msgstr "Structure de fichier" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Structure of a score" msgstr "Structure d'une partition" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Multiple scores in a book" msgstr "Plusieurs partitions dans un même ouvrage" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple output files from one input file" +msgstr "Plusieurs éditions pour une même source" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Output file names" +msgstr "Nom des fichiers de sortie" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "File structure" msgstr "Structure de fichier" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Titles and headers" msgstr "Titres et entêtes" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Creating titles" msgstr "Création de titres" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Custom titles" -msgstr "Titres personnalisés" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +msgid "Custom headers footers and titles" +msgstr "Titrages personnalisés" + +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" +msgstr "Titrages personnalisés" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Reference to page numbers" msgstr "Référencement des numéros de page" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Table of contents" msgstr "Table des matières" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Working with input files" msgstr "Travail sur des fichiers texte" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Including LilyPond files" msgstr "Insertion de fichiers LilyPond" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Different editions from one source" msgstr "Différentes éditions à partir d'une même source" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Using variables" msgstr "Utilisation de variables" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Using tags" msgstr "Utilisation de balises" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Text encoding" msgstr "Codage du texte" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Displaying LilyPond notation" msgstr "Affichage de notation au format LilyPond" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "Controlling output" msgstr "Contrôle des sorties" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Extracting fragments of music" msgstr "Extraction de fragments musicaux" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Skipping corrected music" msgstr "Ignorer des passages de la partition" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "Autres formats de sortie" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "Changement de fonte musicale" + +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" +msgstr "Instructions d'installation pour MacOS" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely msgid "MIDI output" msgstr "Sortie MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Creating MIDI files" msgstr "Création de fichiers MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" +msgstr "Noms d'instrument" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "MIDI block" msgstr "Le bloc MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "What goes into the MIDI output?" msgstr "Contenu de la sortie MIDI" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Supported in MIDI" msgstr "Éléments pris en compte dans le MIDI" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Unsupported in MIDI" msgstr "Éléments non pris en compte dans le MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Repeats in MIDI" msgstr "Répétitions et MIDI" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Controlling MIDI dynamics" msgstr "Gestion des nuances en MIDI" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Dynamic marks" msgstr "Indications de nuance" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Overall MIDI volume" msgstr "Amplitude du volume en MIDI" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Equalizing different instruments (i)" msgstr "Égalisation de plusieurs instruments (i)" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely msgid "Equalizing different instruments (ii)" msgstr "Égalisation de plusieurs instruments (ii)" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely msgid "Percussion in MIDI" msgstr "MIDI et percussions" -#. Documentation/user/spacing.itely:882 (comment) -msgid "this does nothing" -msgstr "ceci est sans effet" +#. Documentation/notation/spacing.itely:2045 (comment) +msgid "The very low note here needs more room than 'space can" +msgstr "La note la plus basse nécessite plus de place que n'en fournit" + +#. Documentation/notation/spacing.itely:2046 (comment) +msgid "provide, so the distance between this staff and the next is" +msgstr "'space ; la distance entre cette portée et la suivante sera" + +#. Documentation/notation/spacing.itely:2047 (comment) +msgid "determined by 'padding." +msgstr "déterminée par 'padding." + +#. Documentation/notation/spacing.itely:2050 (comment) +msgid "Here, 'space provides enough room, and there is no need to" +msgstr "Ici, 'space procure assez de place, et il n'est pas nécessaire de" + +#. Documentation/notation/spacing.itely:2051 (comment) +msgid "compress the space (towards 'minimum-distance) to make room" +msgstr "de comprimer l'espace (jusqu'à 'minimum-distance) pour faire tenir" + +#. Documentation/notation/spacing.itely:2052 (comment) +msgid "for anything else on the page, so the distance between this" +msgstr "chose sur la âge. La distance entre cette portée et la suivante" -#. Documentation/user/spacing.itely:883 (comment) -msgid "a break here would work" -msgstr "une rupture serait ici acceptée" +#. Documentation/notation/spacing.itely:2053 (comment) +msgid "staff and the next is determined by 'space." +msgstr "est donc déterminée par 'space." -#. Documentation/user/spacing.itely:884 (comment) -msgid "as does this break" -msgstr "à l'instar de celle-ci" +#. Documentation/notation/spacing.itely:2056 (comment) +msgid "By setting 'padding to a negative value, staves can be made to" +msgstr "Définir 'spacing à une valeur négative peut engendrer un chevauchement" -#. Documentation/user/spacing.itely:896 (comment) -msgid "now the break is allowed" -msgstr "le saut de ligne est maintenant autorisé" +#. Documentation/notation/spacing.itely:2057 (comment) +msgid "collide. The lowest acceptable value for 'space is 0." +msgstr "des portées. La valeur minimale autorisée pour 'space est 0." -#. Documentation/user/spacing.itely:1775 (comment) +#. Documentation/notation/spacing.itely:2489 (comment) msgid "this time the text will be closer to the staff" msgstr "cette fois, le texte est plus proche de la portée" -#. Documentation/user/spacing.itely:1777 (comment) +#. Documentation/notation/spacing.itely:2491 (comment) msgid "by setting outside-staff-priority to a non-number," msgstr "definir outside-staff-priority à autre chose qu'un nombre" -#. Documentation/user/spacing.itely:1778 (comment) +#. Documentation/notation/spacing.itely:2492 (comment) msgid "we disable the automatic collision avoidance" msgstr "désactive l'évitement automatique de collision" -#. Documentation/user/spacing.itely:1781 (comment) +#. Documentation/notation/spacing.itely:2495 (comment) msgid "now they will collide" msgstr "il y a maintenant chevauchement" -#. Documentation/user/spacing.itely:1807 (comment) +#. Documentation/notation/spacing.itely:2521 (comment) msgid "the markup is too close to the following note" msgstr "le texte est trop proche de la note qui suit" -#. Documentation/user/spacing.itely:1811 (comment) +#. Documentation/notation/spacing.itely:2525 (comment) msgid "setting outside-staff-horizontal-padding fixes this" msgstr "définir outside-staff-horizontal-padding règle le problème" -#. @node in Documentation/user/spacing.itely -#. @chapter in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @chapter in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @chapter in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @chapter in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely msgid "Spacing issues" msgstr "Gestion de l'espace" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Paper and pages" -msgstr "Du papier et des pages" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Paper size" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Page layout" +msgstr "Mise en forme de la page" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" +msgstr "Le bloc \\\\paper" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\paper} block" +msgstr "Le bloc @code{\\\\paper}" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" +msgstr "Format du papier et adaptation automatique" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Setting paper size" msgstr "Format du papier" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Page formatting" -msgstr "Mise en forme de la page" +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Automatic scaling to paper size" +msgstr "Adaptation automatique au format" -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Vertical dimensions" -msgstr "Dimensionnement vertical" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Horizontal dimensions" -msgstr "Dimensionnement horizontal" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Other layout variables" -msgstr "Autres variables de mise en forme" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Music layout" -msgstr "Mise en forme de la musique" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Setting the staff size" -msgstr "Définition de la taille de portée" +#. @node in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing \\\\paper variables" +msgstr "Variables d'espacement vertical fixe" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing @code{\\\\paper} variables" +msgstr "Variables d'espacement vertical fixe" + +#. @node in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing \\\\paper variables" +msgstr "Variables d'espacement vertical fluctuant" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" +msgstr "Variables d'espacement vertical fluctuant" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" +msgstr "Structure des variables d'espacement vertical fluctuant" + +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" +msgstr "Liste des variables d'espacement fluctuant" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" +msgstr "Liste des variables d'espacement fluctuant" + +#. @node in Documentation/notation/spacing.itely +msgid "Horizontal spacing \\\\paper variables" +msgstr "Variables d'espacement horizontal" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing @code{\\\\paper} variables" +msgstr "Variables d'espacement horizontal" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" +msgstr "Variables de marge et de largeur" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" +msgstr "Variables de marge et de largeur" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" +msgstr "Variables spécifiques pour l'impression recto-verso" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" +msgstr "Variables spécifiques pour l'impression recto-verso" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" +msgstr "Variables d'indentation et de décalage" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" +msgstr "Variables d'indentation et de décalage" + +#. @node in Documentation/notation/spacing.itely +msgid "Other \\\\paper variables" +msgstr "Autres variables du bloc \\\\paper" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Other @code{\\\\paper} variables" +msgstr "Autres variables du bloc @code{\\\\paper}" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" +msgstr "Variables de gestion des sauts de ligne" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" +msgstr "Variables de gestion des sauts de ligne" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page breaking" +msgstr "Variables de gestion des sauts de page" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" +msgstr "Variables de gestion des sauts de page" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" +msgstr "Variables de gestion des numéros de page" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" +msgstr "Variables de gestion des numéros de page" + +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" +msgstr "Variables supplémentaires" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Miscellaneous @code{\\\\paper} variables" +msgstr "Variables supplémentaires" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Score layout" msgstr "Mise en forme de la partition" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\layout block" +msgstr "Le bloc \\\\layout" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\layout} block" +msgstr "Le bloc @code{\\\\layout}" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" +msgstr "Définition de la taille de portée" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Breaks" msgstr "Sauts" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Line breaking" msgstr "Sauts de ligne" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Page breaking" msgstr "Sauts de page" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Optimal page breaking" msgstr "Optimisation des sauts de page" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Optimal page turning" msgstr "Optimisation des tournes" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Minimal page breaking" msgstr "Minimisation des sauts de page" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Explicit breaks" msgstr "Sauts explicites" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Using an extra voice for breaks" msgstr "Recours à une voix supplémentaire pour gérer les sauts" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Vertical spacing" msgstr "Espacement vertical" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing inside a system" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing within systems" msgstr "Espacement vertical au sein d'un système" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing between systems" -msgstr "Espacement vertical entre les systèmes" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Within-system spacing properties" +msgstr "Propriétés d'espacement au sein d'un système" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" +msgstr "Propriétés de l'objet @code{VerticalAxisGroup}" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" +msgstr "Propriétés de l'objet @code{StaffGrouper}" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of ungrouped staves" +msgstr "Espacement de portées isolées" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of grouped staves" +msgstr "Espacement de portées regroupées" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "Espacement des lignes rattachées à des portées" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Explicit staff and system positioning" msgstr "Positionnement explicite des portées et systèmes" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Two-pass vertical spacing" -msgstr "Optimisation du remplissage avec un deuxième passage" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Vertical collision avoidance" msgstr "Résolution des collisions verticales" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Horizontal spacing" msgstr "Espacement horizontal" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Horizontal spacing overview" msgstr "Généralités sur l'espacement horizontal" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "New spacing area" msgstr "Changement d'espacement au cours de la partition" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Changing horizontal spacing" msgstr "Modification de l'espacement horizontal" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Line length" msgstr "Longueur de ligne" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Proportional notation" msgstr "Notation proportionnelle" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely msgid "Fitting music onto fewer pages" msgstr "Réduction du nombre de pages de la partition" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Displaying spacing" msgstr "Mise en évidence de l'espacement" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely msgid "Changing spacing" msgstr "Modification de l'espacement" -#. Documentation/user/changing-defaults.itely:446 (variable) +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" +msgstr "musiqueA" + +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" +msgstr "musiqueB" + +#. Documentation/notation/changing-defaults.itely:451 (variable) msgid "keepVoicesAlive" msgstr "maintienVoixActives" -#. Documentation/user/changing-defaults.itely:448 (context id) -#. Documentation/user/changing-defaults.itely:454 (context id) -#. Documentation/user/changing-defaults.itely:462 (context id) -#. Documentation/user/changing-defaults.itely:464 (context id) -msgid "A" -msgstr "A" - -#. Documentation/user/changing-defaults.itely:448 (comment) +#. Documentation/notation/changing-defaults.itely:453 (comment) msgid "Keep Voice \\\"A\\\" alive for 5 bars" msgstr "Maintient la Voix \\\"A\\\" active sur 5 mesures" -#. Documentation/user/changing-defaults.itely:449 (context id) -#. Documentation/user/changing-defaults.itely:458 (context id) -#. Documentation/user/changing-defaults.itely:463 (context id) -msgid "B" -msgstr "B" - -#. Documentation/user/changing-defaults.itely:449 (comment) +#. Documentation/notation/changing-defaults.itely:454 (comment) msgid "Keep Voice \\\"B\\\" alive for 5 bars" msgstr "Maintient la Voix \\\"B\\\" active sur 5 mesures" -#. Documentation/user/changing-defaults.itely:484 (variable) -#. Documentation/user/changing-defaults.itely:495 (context id) -#. Documentation/user/changing-defaults.itely:501 (context id) -#. Documentation/user/changing-defaults.itely:503 (context id) -#. Documentation/user/changing-defaults.itely:506 (context id) -#. Documentation/user/changing-defaults.itely:528 (variable) -#. Documentation/user/changing-defaults.itely:544 (context id) +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) msgid "accompaniment" msgstr "accompagnement" -#. Documentation/user/changing-defaults.itely:485 (variable) -#. Documentation/user/changing-defaults.itely:534 (variable) +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:74 (variable) msgid "words" msgstr "mots" -#. Documentation/user/changing-defaults.itely:492 (comment) +#. Documentation/notation/changing-defaults.itely:497 (comment) msgid "Keep Voice \\\"melody\\\" alive for 4 bars" msgstr "Maintient la Voix \\\"melodie\\\" active sur 4 mesures" -#. Documentation/user/changing-defaults.itely:523 (comment) -#. Documentation/user/changing-defaults.itely:525 (comment) +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) msgid "skip a bar" msgstr "saute une mesure" -#. Documentation/user/changing-defaults.itely:2142 (comment) +#. Documentation/notation/changing-defaults.itely:2017 (comment) +msgid "default space between staves" +msgstr "espacement par défaut entre les portées" + +#. Documentation/notation/changing-defaults.itely:2023 (comment) +msgid "reduced space between staves" +msgstr "espacement réduit entre les portées" + +#. Documentation/notation/changing-defaults.itely:2025 (comment) +msgid "this is the nested declaration" +msgstr "et voici la déclaration en cascade :" + +#. Documentation/notation/changing-defaults.itely:2480 (comment) msgid "increase the length of the tie" msgstr "augmentation de la longueur de la liaison" -#. Documentation/user/changing-defaults.itely:2151 (comment) +#. Documentation/notation/changing-defaults.itely:2489 (comment) msgid "increase the length of the rest bar" msgstr "augmentation de la longueur de la mesure de silence" -#. Documentation/user/changing-defaults.itely:2159 (comment) +#. Documentation/notation/changing-defaults.itely:2497 (comment) msgid "increase the length of the hairpin" msgstr "augmentation de la longueur du soufflet" -#. Documentation/user/changing-defaults.itely:2187 (comment) +#. Documentation/notation/changing-defaults.itely:2525 (comment) msgid "default" msgstr "comportement par défaut" -#. Documentation/user/changing-defaults.itely:2190 (comment) -#. Documentation/user/changing-defaults.itely:2203 (comment) +#. Documentation/notation/changing-defaults.itely:2528 (comment) +#. Documentation/notation/changing-defaults.itely:2541 (comment) msgid "not effective alone" msgstr "ne fonctionne pas tout seul" -#. Documentation/user/changing-defaults.itely:2194 (comment) -#. Documentation/user/changing-defaults.itely:2207 (comment) +#. Documentation/notation/changing-defaults.itely:2532 (comment) +#. Documentation/notation/changing-defaults.itely:2545 (comment) msgid "effective only when both overrides are present" msgstr "effectivité si les deux modifications sont explicitées" -#. Documentation/user/changing-defaults.itely:2582 (comment) +#. Documentation/notation/changing-defaults.itely:2922 (comment) msgid "Remove bar line at the end of the current line" msgstr "Suppression de la barre de mesure à la fin de la ligne en cours" -#. Documentation/user/changing-defaults.itely:2628 (comment) +#. Documentation/notation/changing-defaults.itely:2968 (comment) msgid "Try to remove all key signatures" msgstr "Tentative de suppression de toutes les armures" -#. Documentation/user/changing-defaults.itely:3048 (comment) +#. Documentation/notation/changing-defaults.itely:3392 (comment) msgid "move horizontally left" msgstr "déplacement vers la gauche" -#. Documentation/user/changing-defaults.itely:3050 (comment) +#. Documentation/notation/changing-defaults.itely:3394 (comment) msgid "move vertically up" msgstr "déplacement vers le haut" -#. Documentation/user/changing-defaults.itely:3051 (comment) +#. Documentation/notation/changing-defaults.itely:3395 (comment) msgid "third finger" msgstr "troisième doigt" -#. Documentation/user/changing-defaults.itely:3100 (comment) -#. Documentation/user/changing-defaults.itely:3132 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:64 (comment) -msgid "the RehearsalMark will be centered above the Clef" +#. Documentation/notation/changing-defaults.itely:3443 (comment) +#. Documentation/notation/changing-defaults.itely:3482 (comment) +msgid "The rehearsal mark will be centered above the Clef" msgstr "Pour centrer le repère au-dessus de la clef" -#. Documentation/user/changing-defaults.itely:3106 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:71 (comment) -msgid "the RehearsalMark will be centered above the TimeSignature" +#. Documentation/notation/changing-defaults.itely:3449 (comment) +msgid "The rehearsal mark will be centered above the Time Signature" msgstr "Pour centrer le repère au-dessus de la métrique" -#. Documentation/user/changing-defaults.itely:3126 (comment) -msgid "the RehearsalMark will be centered above the Key Signature" +#. Documentation/notation/changing-defaults.itely:3456 (comment) +msgid "The rehearsal mark will be centered above the Breath Mark" +msgstr "Pour centrer le repère au-dessus du signe de respiration" + +#. Documentation/notation/changing-defaults.itely:3476 (comment) +msgid "The rehearsal mark will be centered above the Key Signature" msgstr "Pour centrer le repère au-dessus de l'armure" -#. Documentation/user/changing-defaults.itely:3146 (comment) -msgid "The RehearsalMark will be centered above the KeySignature" +#. Documentation/notation/changing-defaults.itely:3489 (comment) +msgid "The rehearsal mark will be centered above the Bar Line" +msgstr "Pour centrer le repère au-dessus de la barre de mesure" + +#. Documentation/notation/changing-defaults.itely:3504 (comment) +msgid "The RehearsalMark will be centered above the Key Signature" msgstr "Pour centrer le repère au-dessus de l'armure" -#. Documentation/user/changing-defaults.itely:3153 (comment) -#. Documentation/user/changing-defaults.itely:3169 (comment) -#. Documentation/user/changing-defaults.itely:3176 (comment) +#. Documentation/notation/changing-defaults.itely:3511 (comment) +#. Documentation/notation/changing-defaults.itely:3527 (comment) +#. Documentation/notation/changing-defaults.itely:3534 (comment) msgid "" -"The RehearsalMark will be aligned with the left edge of the KeySignature" +"The RehearsalMark will be aligned with the left edge of the Key Signature" msgstr "Pour aligner le repère sur le coin gauche de l'armure" -#. Documentation/user/changing-defaults.itely:3158 (comment) +#. Documentation/notation/changing-defaults.itely:3516 (comment) msgid "" -"The RehearsalMark will be aligned with the right edge of the KeySignature" +"The RehearsalMark will be aligned with the right edge of the Key Signature" msgstr "Pour aligner le repère sur le coin droit de l'armure" -#. Documentation/user/changing-defaults.itely:3170 (comment) +#. Documentation/notation/changing-defaults.itely:3528 (comment) msgid "and then shifted right by 3.5 staff-spaces" msgstr "puis décaler vers la droite de 3,5 espaces" -#. Documentation/user/changing-defaults.itely:3177 (comment) +#. Documentation/notation/changing-defaults.itely:3535 (comment) msgid "and then shifted left by 2 staff-spaces" msgstr "puis décaler vers la gauche de 2 espaces" -#. Documentation/user/changing-defaults.itely:3225 (variable) +#. Documentation/notation/changing-defaults.itely:3583 (variable) msgid "XinO" msgstr "XdansO" -#. @node in Documentation/user/changing-defaults.itely -#. @chapter in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @chapter in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @chapter in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @chapter in Documentation/de/user/changing-defaults.itely +#. Documentation/notation/changing-defaults.itely:3825 (variable) +msgid "custosNote" +msgstr "guidonNote" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely msgid "Changing defaults" msgstr "Modification des réglages prédéfinis" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Interpretation contexts" msgstr "Contextes d'interprétation" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Score - the master of all contexts" msgstr "Score - le père de tous les contextes" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Top-level contexts - staff containers" msgstr "Contextes de haut niveau - les systèmes" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Intermediate-level contexts - staves" msgstr "Contextes de niveau intermédiaire - les portées" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Bottom-level contexts - voices" msgstr "Contextes de bas niveau - les voix" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Keeping contexts alive" msgstr "Conservation d'un contexte" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying context plug-ins" msgstr "Modification des greffons de contexte" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Changing context default settings" msgstr "Modification des réglages par défaut d'un contexte" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Defining new contexts" msgstr "Définition de nouveaux contextes" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Aligning contexts" msgstr "Alignement des contextes" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Explaining the Internals Reference" msgstr "En quoi consiste la référence du programme" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Navigating the program reference" msgstr "Navigation dans la référence du programme" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Layout interfaces" msgstr "Interfaces de rendu" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Determining the grob property" msgstr "Détermination de la propriété d'un objet graphique (grob)" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Naming conventions" msgstr "Conventions de nommage" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Modifying properties" msgstr "Modification de propriétés" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Overview of modifying properties" msgstr "Vue d'ensemble de la modification des propriétés" -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely msgid "The set command" -msgstr "La commande de fixation (@emph{set})" - -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\set} command" -msgstr "La commande @code{\\set}" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +msgstr "La commande de fixation (set)" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "La commande @code{@bs{}set}" + +#. @node in Documentation/notation/changing-defaults.itely msgid "The override command" msgstr "La commande de dérogation (@emph{override})" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\override} command" -msgstr "La commande @code{\\override}" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "La commande @code{\\\\override}" + +#. @node in Documentation/notation/changing-defaults.itely msgid "The tweak command" msgstr "La commande d'affinage (@emph{tweak})" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\tweak} command" -msgstr "La commande @code{\\tweak}" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "La commande @code{\\\\tweak}" + +#. @node in Documentation/notation/changing-defaults.itely msgid "set versus override" msgstr "set ou override" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "@code{\\set} vs. @code{\\override}" -msgstr "@code{\\set} ou @code{\\override}" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "@code{\\\\set} ou @code{\\\\override}" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying alists" +msgstr "Modification de listes associatives" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Useful concepts and properties" msgstr "Propriétés et contextes utiles" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Input modes" msgstr "Modes de saisie" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Direction and placement" msgstr "Direction et positionnement" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Context layout order" +msgstr "Ordre des contextes de mise en forme" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Distances and measurements" msgstr "Distances et unités de mesure" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Staff symbol properties" msgstr "Propriétés des lignes de portée" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Spanners" msgstr "Extenseurs et prolongateurs" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{spanner-interface}" msgstr "Utilisation de @code{spanner-interface}" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{line-spanner-interface}" msgstr "Utilisation de @code{line-spanner-interface}" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Visibility of objects" msgstr "Visibilité des objets" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Removing the stencil" msgstr "Suppression des stencils" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Making objects transparent" msgstr "Transparence des objets" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Painting objects white" msgstr "Blanchiment des objets" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using break-visibility" msgstr "Utilisation de break-visibility" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Special considerations" msgstr "Considérations spécifiques" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Line styles" msgstr "Styles de ligne" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Rotating objects" msgstr "Rotation des objets" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Rotating layout objects" msgstr "Rotation des objets de mise en forme" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Rotating markup" msgstr "Rotation des étiquettes" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely msgid "Advanced tweaks" msgstr "Retouches avancées" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Aligning objects" msgstr "Alignement des objets" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Setting X-offset and Y-offset directly" +msgstr "Détermination directe de X-offset et Y-offset" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Setting @code{X-offset} and @code{Y-offset} directly" msgstr "Détermination directe de @code{X-offset} et @code{Y-offset}" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the side-position-interface" +msgstr "Utilisation de side-position-interface" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{side-position-interface}" msgstr "Utilisation de @code{side-position-interface}" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the self-alignment-interface" +msgstr "Utilisation de self-alignment-interface" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{self-alignment-interface}" msgstr "Utilisation de @code{self-alignment-interface}" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{aligned-on-parent} procedures" msgstr "Utilisation des procédures @code{aligned-on-parent}" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{centered-on-parent} procedures" msgstr "Utilisation des procédures @code{centered-on-parent}" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the break-alignable-interface" +msgstr "Utilisation de break-aligned-interface" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Using the @code{break-alignable-interface}" msgstr "Utilisation de @code{break-aligned-interface}" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Vertical grouping of grobs" msgstr "Regroupement vertical d'objets graphiques" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying stencils" msgstr "Modification des stencils" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely msgid "Modifying shapes" msgstr "Modification de l'allure des éléments" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely msgid "Modifying ties and slurs" msgstr "Modification des liaisons" -#. Documentation/user/programming-interface.itely:118 (variable) -msgid "custosNote" -msgstr "guidonNote" - -#. Documentation/user/programming-interface.itely:178 (variable) -msgid "manualBeam" -msgstr "LigatureManuelle" - -#. Documentation/user/programming-interface.itely:198 (variable) -msgid "AltOn" -msgstr "ZoomOui" - -#. Documentation/user/programming-interface.itely:203 (variable) -msgid "AltOff" -msgstr "ZoomNon" - -#. Documentation/user/programming-interface.itely:216 (variable) -msgid "withAlt" -msgstr "Zoome" - -#. Documentation/user/programming-interface.itely:350 (variable) -msgid "traLaLa" -msgstr "traLaLa" - -#. Documentation/user/programming-interface.itely:352 (comment) -msgid "dummy action to deal with parser lookahead" -msgstr "leurre pour prise en charge par l'analyseur lookahead" - -#. @node in Documentation/user/programming-interface.itely -#. @chapter in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @chapter in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @chapter in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @chapter in Documentation/de/user/programming-interface.itely -msgid "Interfaces for programmers" -msgstr "Interfaces pour les programmeurs" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Music functions" -msgstr "Fonctions musicales" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of music functions" -msgstr "Aperçu des fonctions musicales" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Simple substitution functions" -msgstr "Fonctions de substitution simple" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Paired substitution functions" -msgstr "Fonctions de substitution par paire" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Mathematics in functions" -msgstr "De l'usage des mathématiques dans les fonctions" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Void functions" -msgstr "Fonctions fantômes" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Functions without arguments" -msgstr "Fonctions dépourvues d'argument" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of available music functions" -msgstr "Liste des fonctions musicales prédéfinies" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Programmer interfaces" -msgstr "Interfaces de programmation" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Input variables and Scheme" -msgstr "Variables d'entrée et Scheme" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Internal music representation" -msgstr "Représentation interne de la musique" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Building complicated functions" -msgstr "Construction de fonctions complexes" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Displaying music expressions" -msgstr "Affichage d'expressions musicales" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Music properties" -msgstr "Propriétés de la musique" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Doubling a note with slurs (example)" -msgstr "Exemple : redoubler une note avec liaison" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Adding articulation to notes (example)" -msgstr "Exemple : ajouter une articulation à plusieurs notes" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Markup programmer interface" -msgstr "Interface de programmation des marqueurs de texte" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Markup construction in Scheme" -msgstr "Construction Scheme d'un marqueur" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "How markups work internally" -msgstr "Fonctionnement interne des marqueurs" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup command definition" -msgstr "Définition d'une nouvelle commande de marqueur" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup list command definition" -msgstr "Définition d'une nouvelle commande de liste de marqueurs" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Contexts for programmers" -msgstr "Contextes pour programmeurs" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Context evaluation" -msgstr "Évaluation d'un contexte" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Using music functions" +msgstr "Utilisation de fonctions musicales" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Running a function on all layout objects" -msgstr "Application d'une fonction à tous les objets de mise en forme" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "Syntaxe des fonctions de substitution" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Scheme procedures as properties" -msgstr "Utilisation de procédures Scheme en tant que propriétés" - -#. @node in Documentation/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of \\tweak" -msgstr "Utilisation de code Scheme au lieu de \\tweak" - -#. @section in Documentation/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of @code{\\tweak}" -msgstr "Utilisation de code Scheme au lieu de @code{\\tweak}" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Difficult tweaks" -msgstr "Retouches complexes" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "Exemples de fonctions de substitution" -#. @node in Documentation/user/literature.itely -#. @appendix in Documentation/user/literature.itely -#. @node in Documentation/fr/user/literature.itely -#. @appendix in Documentation/fr/user/literature.itely -#. @node in Documentation/es/user/literature.itely -#. @appendix in Documentation/es/user/literature.itely -#. @node in Documentation/de/user/literature.itely -#. @appendix in Documentation/de/user/literature.itely -msgid "Literature list" -msgstr "Bibliographie" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendix in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendix in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendix in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendix in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely msgid "Notation manual tables" msgstr "Tables du manuel de notation" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "Chord name chart" msgstr "Table des noms d'accord" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "Common chord modifiers" msgstr "Modificateurs d'accord usuels" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "Predefined fretboard diagrams" msgstr "Tablatures prédéfinies" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "MIDI instruments" msgstr "Instruments MIDI" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "List of colors" msgstr "Liste des couleurs" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely +#. @subsubheading in Documentation/notation/notation-appendices.itely msgid "Normal colors" msgstr "Couleurs de base" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely +#. @subsubheading in Documentation/notation/notation-appendices.itely msgid "X color names" msgstr "Noms de couleur X" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely +#. @subsubheading in Documentation/notation/notation-appendices.itely msgid "Color Names without a numerical suffix:" msgstr "Noms de couleur sans suffixe numérique" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely +#. @subsubheading in Documentation/notation/notation-appendices.itely msgid "Color names with a numerical suffix" msgstr "Noms de couleur avec suffixe numérique" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely +#. @subsubheading in Documentation/notation/notation-appendices.itely msgid "Grey Scale" msgstr "Échelle de gris" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "The Feta font" msgstr "La fonte Feta" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "Glyphes de clef" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Time Signature glyphs" +msgstr "Glyphes de métrique" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "Glyphes numériques" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accidental glyphs" +msgstr "Glyphes d'altération" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "Glyphes de tête de note par défaut" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "Glyphes de têtes de note spécifiques" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "Glyphes de têtes de note à forme variable" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Rest glyphs" +msgstr "Glyphes de silence" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "Glyphes de crochet" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "Glyphes de point" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dynamic glyphs" +msgstr "Glyphes de nuance" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "Glyphes de script" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "Glyphes de flêche" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "Glyphes d'extrémité d'accolade" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "Glyphes de pédale" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "Glyphes d'accordéon" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "Glyphes vaticana" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "Glyphes medicaea" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "Glyphes Hufnagel" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "Glyphes mensurales" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "Glyphes néomensurales" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "Glyphes Petrucci" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "Glyphes Solesmes" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "Note head styles" msgstr "Styles de tête de note" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup commands" +msgstr "Commandes de markup" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" +msgstr "Commandes pour liste de marqueurs" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "List of articulations" msgstr "Liste des signes d'articulation" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Articulation scripts" +msgstr "Scripts d'articulation" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ornament scripts" +msgstr "Scripts d'ornement" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "Scripts de point d'arrêt" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "Scripts spécifiques à certains instruments" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "Scripts de répétition" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "Scripts de musique ancienne" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "Percussion notes" msgstr "Notes utilisées en percussion" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "Glossaire technique" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "alist" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "callback" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "closure" +msgstr "fermeture" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "glyphe" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "grob" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "immuable" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "interface" +msgstr "interface" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "lexer (analyseur lexical)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "changeant" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "output-def (définition de sortie)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "parser (analyseur syntaxique)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "variables d'analyseur syntaxique" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "prob (objet de propriété)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "closure simple" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "smob (objet Scheme)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "All context properties" msgstr "Liste des propriétés de contexte" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "Layout properties" msgstr "Propriétés de mise en forme" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Identifiers" -msgstr "Variables" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "Fonctions musicales prédéfinies" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined type predicates" +msgstr "Types de prédicat prédéfinis" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely msgid "Scheme functions" msgstr "Fonctions Scheme" -#. @node in Documentation/user/cheatsheet.itely -#. @appendix in Documentation/user/cheatsheet.itely -#. @node in Documentation/fr/user/cheatsheet.itely -#. @appendix in Documentation/fr/user/cheatsheet.itely -#. @node in Documentation/es/user/cheatsheet.itely -#. @appendix in Documentation/es/user/cheatsheet.itely -#. @node in Documentation/de/user/cheatsheet.itely -#. @appendix in Documentation/de/user/cheatsheet.itely +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely msgid "Cheat sheet" msgstr "Aide-mémoire" -#. @top in Documentation/fr/user/lilypond-learning.tely -msgid "GNU LilyPond --- Manuel d'initiation" -msgstr "GNU LilyPond --- Manuel d'initiation" +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "\\\\TEXT\\\\" -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Commonly tweaked properties" -msgstr "Propriétés couramment modifiées" +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "Exécution de LilyPond" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Hauteurs" -msgstr "Hauteurs" +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "Lancement de @command{lilypond}" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Durées et rythme" -msgstr "Durées et rythme" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "Utilisation habituelle" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Silences" -msgstr "" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "Utilisation en ligne de commande" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Métrique" -msgstr "" +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "Lancement de lilypond" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Tout ensemble" -msgstr "" +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "Lancement de @command{lilypond}" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Exemples cliquables" -msgstr "" +#. @unnumberedsubsubsec in Documentation/usage/running.itely +msgid "Standard shell commands" +msgstr "Commandes standard de l'interpréteur" -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -msgid "Outside staff objects" -msgstr "Objets hors de la portée" +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "Options en ligne de commande pour lilypond" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "Options en ligne de commande pour @command{lilypond}" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "Variables d'environnement" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "LilyPond in chroot jail" +msgstr "Exécution de LilyPond en mode protégé" + +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" +msgstr "Exemple de script fonctionnel en 32-bit sur Ubuntu 8.04" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "Messages d'erreur" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "Quelques erreurs des plus courantes" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "La musique déborde de la page" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "Apparition intempestive d'une portée" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "Erreur renvoyant à ../ly/init.ly" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "Erreur renvoyant à @code{../ly/init.ly}" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "Message d'erreur « Unbound variable % »" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "Messag d'erreur « FT_Get_Glyph_Name »" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" +msgstr "staff-affinities devraient aller en ordre décroissant" + +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "Mise à jour des fichiers avec convert-ly" + +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "Mise à jour des fichiers avec @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "LilyPond, une langue vivante" + +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "Utilisation de convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "Utilisation de @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "Options en ligne de commande pour convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "Options en ligne de commande pour @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "Problèmes d'exécution de convert-ly" + +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "Problèmes d'exécution de @command{convert-ly}" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "Conversions manuelles" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" +msgstr "lilypond-book" + +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "Utilisation de @command{lilypond-book}" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "Exemple de document musicologique" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "Fichier d'entrée" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "Traitement" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "Résultat" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" +msgstr "Association musique-texte" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "LaTeX" + +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" +msgstr "@LaTeX{}" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "Texinfo" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "HTML" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "DocBook" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "Conventions communes" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "Inclusion d'un fichier LilyPond" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "Inclusion de code LilyPond" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "Génération du document DocBook" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" +msgstr "Options applicables aux fragments de musique" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "Utilisation de lilypond-book" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "Utilisation de @command{lilypond-book}" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "Instructions spécifiques à certains formats" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "Options en ligne de commande" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "Extensions de nom de fichier" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "Squelettes pour lilypond-book" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "html" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "xelatex" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Sharing the table of contents" +msgstr "Gestion de la table des matières" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" +msgstr "Export de la table à partir de LilyPond" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" +msgstr "Import de la table dans LaTeX" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "Autres méthodes d'association texte-musique" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "Autres méthodes d'association texte-musique" + +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "Programmes externes" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "Pointer-cliquer" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "LilyPond et les éditeurs de texte" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "Mode Emacs" -#. @top in Documentation/fr/user/lilypond-program.tely -msgid "GNU LilyPond --- Utilisation des programmes" -msgstr "GNU LilyPond --- Utilisation du programme" - -#. @section in Documentation/fr/user/running.itely -msgid "Updating with @command{convert-ly}" -msgstr "Mise à jour avec @command{convert-ly}" - -#. @top in Documentation/fr/user/lilypond.tely -msgid "GNU LilyPond --- Manuel de notation" -msgstr "GNU LilyPond --- Manuel d'initiation" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat types" -msgstr "Types de répétitions" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat syntax" -msgstr "Syntaxe des répétitions" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Manual repeat commands" -msgstr "Commandes de reprise manuelles" - -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -msgid "Other repeats" -msgstr "Autres types de répétition" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Tremolo subdivisions" -msgstr "Subdivision de trémolos" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Measure repeats" -msgstr "Répétitions de mesure" - -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -msgid "Basic polyphony" -msgstr "Polyphonie basique" - -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -msgid "Blank music sheet" -msgstr "Papier à musique" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Text and line spanners" -msgstr "Indications textuelles et lignes d'extension" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Nested scores" -msgstr "Partitions emboîtées" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Page wrapping text" -msgstr "Texte avec sauts de page" - -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Mélismes dans certaines strophes seulement" -msgstr "" - -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Basculer vers une mélodie alternative" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Introduction to ancient notation" -msgstr "Introduction aux notations anciennes" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient notation supported" -msgstr "Formes de notation ancienne prises en charge" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Alternative note signs" -msgstr "Signes de note alternatifs" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient note heads" -msgstr "Têtes de note anciennes" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient accidentals" -msgstr "Altérations anciennes" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient rests" -msgstr "Silences anciens" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient clefs" -msgstr "Clefs anciennes" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient flags" -msgstr "Crochets anciens" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient time signatures" -msgstr "Métriques anciennes" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Additional note signs" -msgstr "Signes de note supplémentaires" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient articulations" -msgstr "Articulations anciennes" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Gregorian square neumes ligatures" -msgstr "Neumes ligaturés grégoriens" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Transcribing ancient music" -msgstr "Transcription de musique mensurale" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "Mode Vim" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Annotational accidentals" -msgstr "Altérations accidentelles suggérées" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "Autres éditeurs" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Baroque rhythmic notation" -msgstr "Notation du rythme dans la musique baroque" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "Conversion à partir d'autres formats" -#. @section in Documentation/fr/user/spacing.itely -msgid "Horizontal Spacing" -msgstr "Espacement horizontal" +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "Utilisation de midi2ly" -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Layout tunings within contexts" -msgstr "Retouches de mise en forme au sein des contextes" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "Utilisation de @command{midi2ly}" -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Constructing a tweak" -msgstr "Élaboration d'une retouche" +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "Utilisation de musicxml2ly" -#. @node in Documentation/fr/user/programming-interface.itely -msgid "Using Scheme code instead of tweak" -msgstr "Utilisation de code Scheme au lieu de \\\"tweak\\\"" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "Utilisation de @command{musicxml2ly}" -#. @top in Documentation/es/user/lilypond-learning.tely -msgid "GNU LilyPond: Manual de aprendizaje" -msgstr "GNU LilyPond --- manuel d'initiation" +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "Utilisation d'abc2ly" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Instrucciones predefinidas" -msgstr "" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "Utilisation de @command{abc2ly}" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Fragmentos de código seleccionados" -msgstr "" +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "Utilisation d'etf2ly" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Propiedades trucadas frecuentemente" -msgstr "" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "Utilisation de @command{etf2ly}" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Véase también" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "Other formats" +msgstr "Autres formats" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Advertencias y problemas conocidos" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "Insertion de partition LilyPond dans d'autres programmes" -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -msgid "Automatic behaviour" -msgstr "Comportement automatique" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "Extraction de plusieurs fragments d'une grande partition" -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Updating old files" -msgstr "Mise à jour d'anciens fichiers" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "Insertion du résultat de LilyPond dans OpenOffice.org" -#. @top in Documentation/es/user/lilypond-program.tely -msgid "GNU LilyPond: Manual de utilización del programa" -msgstr "GNU LilyPond --- utilisation du programme" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "Insertion du résultat de LilyPond dans d'autres programmes" -#. @top in Documentation/es/user/lilypond.tely -msgid "GNU LilyPond: Manual de referencia de la notación" -msgstr "" +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "Inclusion du travail des autres" -#. @chapheading in Documentation/es/user/lilypond.tely -msgid "El tipografiador de música" -msgstr "" +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "Inclusion du travail des autres" -#. @top in Documentation/de/user/lilypond-learning.tely -msgid "GNU LilyPond -- Handbuch zum Lernen" -msgstr "GNU LilyPond --- manuel d'initiation" +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "MIDI articulation" +msgstr "MIDI et articulations" -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Lilypond-book templates" -msgstr "Squelettes pour lilypond-book" +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +msgid "Suggestions for writing files" +msgstr "Suggestions pour la saisie de fichiers LilyPond" -#. @top in Documentation/de/user/lilypond-program.tely -msgid "GNU LilyPond -- Programmbenutzung" -msgstr "GNU LilyPond --- utilisation du programme" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "Suggestions générales" -#. @chapheading in Documentation/de/user/lilypond.tely -msgid "Das Notensatzprogramm" -msgstr "" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "Gravure de musique existante" -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Ignorieren von Melismen" -msgstr "Désactivation du traitement des mélismes" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "Projets d'envergure" -#. @top in Documentation/ja/user/lilypond-learning.tely -msgid "GNU LilyPond --- 孊習マニãï¿œã˘ãĞ" -msgstr "" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "Résolution de problèmes" -#. @top in Documentation/ja/user/lilypond-program.tely -msgid "GNU LilyPond --- ã˘プãŞãąãĵãˇã§ã³䜿çᅵᅵ³Â•" -msgstr "" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "De la commande @command{make} et des fichiers @code{Makefile}" -#. input/lsr/accordion-discant-symbols.ly:36 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) msgid "discant" msgstr "discantus" -#. input/lsr/accordion-discant-symbols.ly:39 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) msgid "dot" msgstr "point" -#. input/lsr/accordion-discant-symbols.ly:45 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) msgid "16 voets register" msgstr "registre de 16 pieds" -#. input/lsr/accordion-discant-symbols.ly:46 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) msgid "accBasson" msgstr "accBasson" -#. input/lsr/accordion-discant-symbols.ly:52 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) msgid "een korig 8 en 16 voets register" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:53 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) msgid "accBandon" msgstr "accBandon" -#. input/lsr/accordion-discant-symbols.ly:61 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) msgid "accVCello" msgstr "accVCelle" -#. input/lsr/accordion-discant-symbols.ly:71 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) msgid "4-8-16 voets register" -msgstr "ergistre 4-8-16 pieds" +msgstr "registre 4-8-16 pieds" -#. input/lsr/accordion-discant-symbols.ly:72 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) msgid "accHarmon" msgstr "accHarmonica" -#. input/lsr/accordion-discant-symbols.ly:82 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) msgid "accTrombon" msgstr "accTrombonne" -#. input/lsr/accordion-discant-symbols.ly:94 (comment) +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) msgid "eenkorig 4 en 16 voets register" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:95 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) msgid "accOrgan" msgstr "accOrgue" -#. input/lsr/accordion-discant-symbols.ly:103 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) msgid "accMaster" msgstr "accMaitre" -#. input/lsr/accordion-discant-symbols.ly:117 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) msgid "accAccord" msgstr "accAccordeon" -#. input/lsr/accordion-discant-symbols.ly:129 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) msgid "accMusette" msgstr "accMusette" -#. input/lsr/accordion-discant-symbols.ly:139 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) msgid "accCeleste" msgstr "accCeleste" -#. input/lsr/accordion-discant-symbols.ly:147 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) msgid "accOboe" msgstr "accHautbois" -#. input/lsr/accordion-discant-symbols.ly:155 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) msgid "accClarin" msgstr "accClarinette" -#. input/lsr/accordion-discant-symbols.ly:161 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) msgid "accPiccolo" msgstr "accPiccolo" -#. input/lsr/accordion-discant-symbols.ly:167 (variable) +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) msgid "accViolin" msgstr "accViolon" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:43 (variable) -#. input/lsr/jazz-combo-template.ly:233 (variable) -#. input/lsr/jazz-combo-template.ly:281 (context id) -msgid "bass" -msgstr "basse" - -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:48 (variable) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) msgid "continuo" msgstr "continuo" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:60 (context id) -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:61 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) msgid "bassStaff" msgstr "bassePortee" -#. input/lsr/adding-an-extra-staff-at-a-line-break.ly:53 (comment) -msgid "The next line is not needed in 2.11.x or later:" -msgstr "la ligne suivante n'est plus nécessaire à partir de la version 2.11.x" - -#. input/lsr/adding-drum-parts.ly:48 (variable) +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) msgid "drh" msgstr "tomh" -#. input/lsr/adding-drum-parts.ly:49 (variable) +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) msgid "drl" msgstr "tomb" -#. input/lsr/adding-drum-parts.ly:50 (variable) +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) msgid "timb" msgstr "timb" -#. input/lsr/adding-fingerings-to-tablatures.ly:26 (variable) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" +msgstr "deux" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) msgid "threeTwo" msgstr "troisDeux" -#. input/lsr/adding-fingerings-to-tablatures.ly:33 (variable) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) msgid "threeFour" msgstr "troisQuatre" -#. input/lsr/adding-the-current-date-to-a-score.ly:31 (comment) +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "divisionapresBarreMarque" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "divisionapresBarre" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:48 (variable) +msgid "cueWhile" +msgstr "citePendant" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:61 (variable) +msgid "flute" +msgstr "flute" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:67 (variable) +msgid "clarinet" +msgstr "clarinette" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:76 (variable) +msgid "pianoRH" +msgstr "pianoMD" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:81 (variable) +msgid "pianoLH" +msgstr "pianoMG" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) msgid "first, define a variable to hold the formatted date:" -msgstr "tout d'abord, définir une variable qui contiendra la date formattée" +msgstr "tout d'abord, définir une variable qui contiendra la date formatée" -#. input/lsr/adding-the-current-date-to-a-score.ly:32 (variable) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) msgid "date" msgstr "date" -#. input/lsr/adding-the-current-date-to-a-score.ly:32 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) msgid "d-%m-%Y\\\" (localtime (current-time)))" msgstr "d-%m-%Y\\\" (localtime (current-time)))" -#. input/lsr/adding-the-current-date-to-a-score.ly:34 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) msgid "use it in the title block:" msgstr "utilisation dans le bloc de titre :" -#. input/lsr/adding-the-current-date-to-a-score.ly:45 (comment) +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) msgid "and use it in a \\markup block:" msgstr "et utilisation dans un bloc \\markup :" -#. input/lsr/additional-voices-to-avoid-collisions.ly:39 (variable) +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) msgid "voiceFive" msgstr "voixCinq" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:32 (comment) +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +msgid "graceNotes" +msgstr "ornementNotes" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) msgid "Default layout:" msgstr "Mise en forme par défaut :" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:41 (comment) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) msgid "Reducing the minimum space below the staff and above the lyrics:" msgstr "" "Réduction au minimum de l'espace au-dessous de la portée et au-dessus des " "paroles :" -#. input/lsr/aligning-bar-numbers.ly:47 (comment) -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:36 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) msgid "Increase the size of the bar number by 2" msgstr "Augmentation de la taille des numéros de mesure au double" -#. input/lsr/aligning-bar-numbers.ly:49 (comment) -#. input/lsr/printing-bar-numbers-at-regular-intervals.ly:45 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) msgid "Print a bar number every second measure" msgstr "Affichage du numéro toutes les deux mesures" -#. input/lsr/aligning-bar-numbers.ly:52 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) msgid "Center-align bar numbers" msgstr "Alignement au centre des numéros de mesure" -#. input/lsr/aligning-bar-numbers.ly:55 (comment) +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) msgid "Left-align bar numbers" msgstr "Alignement à gauche des numéros de mesure" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:79 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "Pour centrer le repère au-dessus de la clef" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "Pour centrer le repère au-dessus de la métrique" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) msgid "the RehearsalMark will be centered above the KeySignature" msgstr "Pour centrer le repère au-dessus de l'armure" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:90 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:102 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) msgid "" "the RehearsalMark will be aligned with the left edge of the KeySignature" msgstr "Pour aligner le repère sur le coin gauche de l'armure" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:96 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) msgid "" "the RehearsalMark will be aligned with the right edge of the KeySignature" msgstr "Pour aligner le repère sur le coin droit de l'armure" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:103 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) msgid "and then shifted right by one unit." msgstr "puis décaler vers la droite d'une unité." -#. input/lsr/ancient-fonts.ly:35 (variable) -#. input/lsr/ancient-fonts.ly:35 (context id) +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) msgid "upperStaff" msgstr "porteeSuperieure" -#. input/lsr/ancient-fonts.ly:47 (comment) +#. Documentation/snippets/ancient-fonts.ly:49 (comment) msgid "\\break % 1 (8*1)" msgstr "\\break % 1 (8*1)" -#. input/lsr/ancient-fonts.ly:58 (comment) +#. Documentation/snippets/ancient-fonts.ly:60 (comment) msgid "\\break %2 (8*1)" msgstr "\\break %2 (8*1)" -#. input/lsr/ancient-fonts.ly:70 (comment) +#. Documentation/snippets/ancient-fonts.ly:72 (comment) msgid "\\break % 3 (8*1)" msgstr "\\break % 3 (8*1)" -#. input/lsr/ancient-fonts.ly:85 (comment) +#. Documentation/snippets/ancient-fonts.ly:87 (comment) msgid "\\break % 4 (8*1)" msgstr "\\break % 4 (8*1)" -#. input/lsr/ancient-fonts.ly:94 (comment) -#. input/lsr/ancient-fonts.ly:156 (comment) +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) msgid "\\break % 5 (8*1)" msgstr "\\break % 5 (8*1)" -#. input/lsr/ancient-fonts.ly:108 (comment) -#. input/lsr/ancient-fonts.ly:171 (comment) +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) msgid "\\break % 6 (8*1)" msgstr "\\break % 6 (8*1)" -#. input/lsr/ancient-fonts.ly:117 (comment) -#. input/lsr/ancient-fonts.ly:181 (comment) +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) msgid "\\break % 7 (8*1)" msgstr "\\break % 7 (8*1)" -#. input/lsr/ancient-fonts.ly:124 (comment) +#. Documentation/snippets/ancient-fonts.ly:126 (comment) msgid "\\break % 8 (8*1)" msgstr "\\break % 8 (8*1)" -#. input/lsr/ancient-fonts.ly:127 (comment) +#. Documentation/snippets/ancient-fonts.ly:129 (comment) msgid "\\break % 12 (32*1)" msgstr "\\break % 12 (32*1)" -#. input/lsr/ancient-fonts.ly:132 (variable) -#. input/lsr/ancient-fonts.ly:132 (context id) +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) msgid "lowerStaff" -msgstr "PorteeInferieure" +msgstr "porteeInferieure" -#. input/lsr/ancient-fonts.ly:142 (comment) +#. Documentation/snippets/ancient-fonts.ly:144 (comment) msgid "\\break % 2 (16*1)" msgstr "\\break % 2 (16*1)" -#. input/lsr/ancient-fonts.ly:147 (comment) +#. Documentation/snippets/ancient-fonts.ly:149 (comment) msgid "\\break % 4 (16*1)" msgstr "\\break % 4 (16*1)" -#. input/lsr/ancient-fonts.ly:186 (comment) +#. Documentation/snippets/ancient-fonts.ly:188 (comment) msgid "\\break % 9 (16*1)" msgstr "\\break % 9 (16*1)" -#. input/lsr/ancient-fonts.ly:188 (comment) +#. Documentation/snippets/ancient-fonts.ly:190 (comment) msgid "lig" msgstr "lig" -#. input/lsr/ancient-fonts.ly:192 (comment) +#. Documentation/snippets/ancient-fonts.ly:194 (comment) msgid "\\break % 11 (16*1)" msgstr "\\break % 11 (16*1)" -#. input/lsr/ancient-fonts.ly:203 (comment) +#. Documentation/snippets/ancient-fonts.ly:205 (comment) msgid "\\break % 12 (8*1)" msgstr "\\break % 12 (8*1)" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:65 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:131 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:167 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:203 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:235 (comment) -#. input/lsr/incipit.ly:24 (variable) -#. input/lsr/incipit.ly:194 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:213 (comment) +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" +msgstr "cantus" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "Vers 1 — Salve, Regína" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "Vers 2 — Vita, dulcédo" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "Vers 3 — Ad te clamámus" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "Vers 4 — Ad te suspirámus" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "Vers 5 — Eia ergo, Advocáta nostra" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "Vers 6 — Et Jesum" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "Vers 7 ad finem — O clemens: O pia: O dulcis Virgo María" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" +msgstr "chant" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" +msgstr "verba" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) msgid "incipit" msgstr "incipit" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:67 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) msgid "tight spacing" msgstr "espacement resserré" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:74 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) msgid "turn off bar lines" msgstr "désactivation des barres de mesure" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) msgid "need this extra \\skip such that clef change comes" msgstr "ce \\skip supplémentaire permet d'afficher le changement de clef" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:79 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) msgid "after bar line" msgstr "après la barre de mesure" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) msgid "CHECK: no effect?" msgstr "À VÉRIFIER : sans effet ?" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:84 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) msgid "turn bar lines on again" msgstr "réactive les barres de mesure" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:92 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) msgid "FIXME: setting printKeyCancellation back to #t must not" msgstr "À CORRIGER : remettre printKeyCancellation à #t ne doit intervenir" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:93 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) msgid "occur in the first bar after the incipit. Dto. for forceClef." msgstr "à la première mesure suivant l'incipit. Idem pour forceClef." -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:94 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) msgid "Therefore, we need an extra \\skip." -msgstr "C'est pourquoi nous ajooutons un \\skip." +msgstr "C'est pourquoi nous ajoutons un \\skip." -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:99 (comment) -#. input/lsr/incipit.ly:67 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:38 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) msgid "the actual music" msgstr "la vraie musique" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:101 (comment) -#. input/lsr/incipit.ly:70 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:40 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) msgid "let finis bar go through all staves" msgstr "pour que la barre de mesure finale traverse toutes les portées" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:104 (comment) -#. input/lsr/incipit.ly:73 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:43 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) msgid "finis bar" msgstr "la barre finale" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (variable) -#. input/lsr/incipit.ly:90 (variable) -#. input/lsr/incipit.ly:225 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:48 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) msgid "discantusNotes" msgstr "discantusNotes" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:114 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:151 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:185 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:187 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:196 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:219 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:74 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:84 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:97 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:104 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:139 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:164 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:188 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:190 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:215 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) msgid "two bars" msgstr "deux mesures" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:115 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:218 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:140 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:214 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) msgid "eight bars" msgstr "huit mesures" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:150 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:153 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:163 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:189 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) msgid "one bar" msgstr "une mesure" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:130 (variable) -#. input/lsr/incipit.ly:104 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:61 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) msgid "discantusLyrics" msgstr "discantusParoles" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:144 (variable) -#. input/lsr/incipit.ly:127 (variable) -#. input/lsr/incipit.ly:232 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:71 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) msgid "altusNotes" msgstr "altusNotes" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:165 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) msgid "seven bars" msgstr "sept mesures" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:166 (variable) -#. input/lsr/incipit.ly:141 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:83 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) msgid "altusLyrics" msgstr "altusParoles" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:178 (variable) -#. input/lsr/incipit.ly:165 (variable) -#. input/lsr/incipit.ly:239 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:91 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) msgid "tenorNotes" msgstr "tenorNotes" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:184 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:187 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) msgid "four bars" msgstr "quatre mesures" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:202 (variable) -#. input/lsr/incipit.ly:180 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:57 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:103 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) msgid "tenorLyrics" msgstr "tenorParoles" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:212 (variable) -#. input/lsr/incipit.ly:202 (variable) -#. input/lsr/incipit.ly:246 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:109 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) msgid "bassusNotes" msgstr "bassusNotes" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:234 (variable) -#. input/lsr/incipit.ly:216 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:122 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) msgid "bassusLyrics" msgstr "bassusParoles" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:245 (context id) -#. input/lsr/incipit.ly:224 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:230 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) msgid "choirStaff" msgstr "choirStaff" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:267 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:267 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) msgid "no bars in staves" msgstr "pas de barre sur les portées" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:270 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) msgid "incipit should not start with a start delimiter" msgstr "l'incipit ne doit pas commencer par une marque de regroupement" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:276 (comment) -#. input/lsr/incipit.ly:269 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:278 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) msgid "no slurs" msgstr "pas de liaison" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:279 (comment) -#. input/lsr/incipit.ly:271 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:281 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) msgid "Comment in the below \\\"\\remove\\\" command to allow line" -msgstr "Décommenter la commande \"\\remove\" qui suit permet d'insérer" +msgstr "Décommenter la commande \\\"\\remove\\\" qui suit permet d'insérer" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:282 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) msgid "breaking also at those barlines where a note overlaps" msgstr "des sauts de ligne y compris lorsqu'une note viendrait à déborder " -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:281 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:283 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) msgid "into the next bar. The command is commented out in this" msgstr "sur la mesure suivante. Cette commande est commentée pour ce court" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:282 (comment) -#. input/lsr/incipit.ly:274 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:284 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) msgid "short example score, but especially for large scores, you" msgstr "exemple, mais dans le cas d'une partition conséquente, " -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) -#. input/lsr/incipit.ly:275 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:285 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) msgid "will typically yield better line breaking and thus improve" msgstr "vous parviendrez à une meilleure gestion des sauts de ligne " -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) -#. input/lsr/incipit.ly:276 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:286 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) msgid "overall spacing if you comment in the following command." msgstr "et donc de l'espacement général en la décommentant." -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) -#. input/lsr/incipit.ly:277 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:287 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) msgid "\\remove \\\"Forbid_line_break_engraver\\\"" msgstr "\\remove \\\"Forbid_line_break_engraver\\\"" -#. input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:75 (variable) -#. input/lsr/clusters.ly:28 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +msgid "tick" +msgstr "tick" + +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +msgid "Use markup to center the chant on the page" +msgstr "Utilisation d'un markup pour centrer le chant sur la page" + +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +msgid "centered" +msgstr "centré" + +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) +msgid "End score" +msgstr "Fin de la partition" + +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) +msgid "End markup" +msgstr "Fin du markup" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) msgid "fragment" msgstr "fragment" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:42 (comment) -msgid "Automatic beams two per two in 4/4 or 2/2 time signature" -msgstr "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) +msgid "slurNotes" +msgstr "liaisonNotes" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +msgid "Default behavior" +msgstr "Comportement par défaut" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:43 (comment) -msgid "_____" -msgstr "_____" +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" +msgstr "Correction pour éviter les collisions" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:44 (comment) -msgid "Default | | | |" -msgstr "Par défaut | | | |" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:45 (comment) -msgid "_ _" -msgstr "_ _" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:46 (comment) -msgid "Required | | | |" -msgstr "Requis | | | |" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:48 (comment) -msgid "macro for beamed two per two in 2/2 and 4/4 time signature" -msgstr "macro pour ligaturer deux par deux, aussi bien en 4/4 qu'en 2/2" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:49 (variable) -msgid "qBeam" -msgstr "LigatureNoire" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:64 (comment) -msgid "Use the macro" -msgstr "Utilisation de la macro" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "" -#. input/lsr/avoiding-collisions-with-chord-fingerings.ly:30 (comment) -msgid "Corrected to avoid collisions" -msgstr "Correction pour éviter les collisions" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" -#. input/lsr/beam-endings-in-score-context.ly:38 (comment) +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) msgid "Set default beaming for all staves" msgstr "Définition des règles de ligature pour toutes les portées" -#. input/lsr/beam-endings-in-score-context.ly:46 (comment) +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) msgid "Modify beaming for just this staff" msgstr "Changement des règles de ligature seulement pour cette portée" -#. input/lsr/beam-endings-in-score-context.ly:52 (comment) +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) msgid "Inherit beaming from Score context" msgstr "Héritage des règles de ligature du contexte Score" -#. input/lsr/beam-endings-in-score-context.ly:58 (comment) +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) msgid "Modify beaming for this voice only" msgstr "Changement des règles de ligature seulement pour cette voix" -#. input/lsr/beam-grouping-in-7-8-time.ly:41 (comment) +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) msgid "rhythm 2-3-2" msgstr "subdivision 2-3-2" -#. input/lsr/book-parts.ly:22 (comment) +#. Documentation/snippets/book-parts.ly:22 (comment) msgid "book paper, which is inherited by all children bookparts" msgstr "" +"Section paper de l'ouvrage ; elle est répercutée sur toutes les parties" -#. input/lsr/book-parts.ly:25 (comment) +#. Documentation/snippets/book-parts.ly:25 (comment) msgid "Page footer: add a different part-tagline at part last page" msgstr "" +"Pied de page : création d'un part-tagline pour la dernière page d'une partie" -#. input/lsr/book-parts.ly:29 (comment) +#. Documentation/snippets/book-parts.ly:29 (comment) msgid "Copyright header field only on book first page." -msgstr "" +msgstr "Champ copyright seulement sur la première page de l'ouvrage" -#. input/lsr/book-parts.ly:33 (comment) +#. Documentation/snippets/book-parts.ly:33 (comment) msgid "Part tagline header field only on each part last page." -msgstr "" +msgstr "Champ part-tagline seulement en dernière page des parties" -#. input/lsr/book-parts.ly:37 (comment) +#. Documentation/snippets/book-parts.ly:37 (comment) msgid "Tagline header field only on book last page." -msgstr "" +msgstr "Champ tagline seulement sur la dernière page de l'ouvrage" -#. input/lsr/book-parts.ly:44 (comment) +#. Documentation/snippets/book-parts.ly:44 (comment) msgid "book header, which is inherited by the first bookpart" -msgstr "" +msgstr "Entête de l'ouvrage, transmise à la première partie" -#. input/lsr/book-parts.ly:53 (comment) +#. Documentation/snippets/book-parts.ly:53 (comment) msgid "a different page breaking function may be used on each part" msgstr "" +"on peut opter pour une gestion des sauts de page différente selon la partie" -#. input/lsr/breathing-signs.ly:19 (comment) +#. Documentation/snippets/breathing-signs.ly:20 (comment) msgid "this bar contains no \\breathe" msgstr "mesure sans \\breathe :" -#. input/lsr/breathing-signs.ly:21 (comment) +#. Documentation/snippets/breathing-signs.ly:22 (comment) msgid "Modern notation:" msgstr "Notation moderne :" -#. input/lsr/breathing-signs.ly:22 (comment) +#. Documentation/snippets/breathing-signs.ly:23 (comment) msgid "by default, \\breathe uses the rcomma, just as if saying:" -msgstr "" -"par défaut, \\breathe produit un @code{rcomma} (virgule vers la droite) " -"comme si l'on avait : " +msgstr "par défaut, \\breathe produit un rcomma (virgule vers la droite) comme si l'on avait : " -#. input/lsr/breathing-signs.ly:23 (comment) +#. Documentation/snippets/breathing-signs.ly:24 (comment) msgid "" "\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" "\\\")" @@ -11234,547 +6781,885 @@ msgstr "" "\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" "\\\")" -#. input/lsr/breathing-signs.ly:26 (comment) +#. Documentation/snippets/breathing-signs.ly:27 (comment) msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" -msgstr "rvarcomma et lvarcomma sont des variantes de rcomma and lcomma" +msgstr "rvarcomma et lvarcomma sont des variantes de rcomma et lcomma" -#. input/lsr/breathing-signs.ly:27 (comment) +#. Documentation/snippets/breathing-signs.ly:28 (comment) msgid "N.B.: must use Staff context here, since we start a Voice below" msgstr "N.B. : affectation au niveau portée, puisqu'il y a une nouvelle voix" -#. input/lsr/breathing-signs.ly:31 (comment) +#. Documentation/snippets/breathing-signs.ly:32 (comment) msgid "vee" msgstr "en V" -#. input/lsr/caesura-railtracks-with-fermata.ly:30 (comment) +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) msgid "construct the symbol" msgstr "construction du symbole" -#. input/lsr/caesura-railtracks-with-fermata.ly:39 (comment) +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) msgid "set the breathe mark back to normal" msgstr "retour à la normale pour les marques de respiration" -#. input/lsr/center-text-below-hairpin-dynamics.ly:28 (variable) +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) msgid "hairpinWithCenteredText" msgstr "souffletAvecTexteCentre" -#. input/lsr/center-text-below-hairpin-dynamics.ly:40 (variable) +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) msgid "hairpinMolto" msgstr "souffletMolto" -#. input/lsr/center-text-below-hairpin-dynamics.ly:41 (variable) +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) msgid "hairpinMore" msgstr "souffletPlus" -#. input/lsr/changing--flageolet-mark-size.ly:41 (variable) +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) msgid "smallFlageolet" msgstr "petitFlageolet" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:35 (comment) +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +msgid "Default setting" +msgstr "Réglage par défaut" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) msgid "The following is only here to print the names of the" msgstr "Ce qui suit n'est là que pour permettre l'impression des noms" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) msgid "chords styles; it can be removed if you do not need to" msgstr "de style d'accord ; vous pouvez supprimer ce bloc \\layout" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) msgid "print them." msgstr "si vous ne voulez pas les imprimer." -#. input/lsr/changing-the-default-text-font-family.ly:17 (comment) -msgid "change for other default global staff size. " -msgstr "" +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "définition de la taille par défaut des portées" -#. input/lsr/changing-the-default-text-font-family.ly:19 (comment) -#. input/lsr/engravers-one-by-one.ly:192 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:110 (comment) -#. input/lsr/utf-8.ly:23 (comment) +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:182 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) msgid "{" msgstr "{" -#. input/lsr/changing-the-default-text-font-family.ly:23 (comment) -#. input/lsr/engravers-one-by-one.ly:195 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:111 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:233 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:180 (comment) -#. input/lsr/utf-8.ly:37 (comment) +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:184 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) msgid "}" msgstr "}" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:63 (comment) -msgid "Change time signature symbol but keep 3/4 beaming" -msgstr "La métrique change mais on garde les règles de ligatures en 3/4" - -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:64 (comment) -msgid "due to unchanged underlying time signature" -msgstr "car la durée de pulsation n'a pas changée" +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +msgid "sustainNotes" +msgstr "sustainNotes" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:69 (comment) -msgid "Lose 3/4 beaming now \\time has been changed" -msgstr "\\time a été modifié, on abandonne les règles de ligature en 3/4" - -#. input/lsr/chant-or-psalms-notation.ly:24 (variable) +#. Documentation/snippets/chant-or-psalms-notation.ly:35 (variable) msgid "stemOn" msgstr "hampeOui" -#. input/lsr/chant-or-psalms-notation.ly:25 (variable) +#. Documentation/snippets/chant-or-psalms-notation.ly:36 (variable) msgid "stemOff" msgstr "hampeNon" -#. input/lsr/chord-name-exceptions.ly:33 (comment) +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) msgid "modify maj9 and 6(add9)" -msgstr "" +msgstr "modification de maj9 et 6 (ajoute 9)" -#. input/lsr/chord-name-exceptions.ly:34 (comment) +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) msgid "Exception music is chords with markups" msgstr "" -#. input/lsr/chord-name-exceptions.ly:35 (variable) +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) msgid "chExceptionMusic" msgstr "" -#. input/lsr/chord-name-exceptions.ly:40 (comment) +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) msgid "Convert music to list and prepend to existing exceptions." msgstr "" -#. input/lsr/chord-name-exceptions.ly:41 (variable) +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) msgid "chExceptions" msgstr "" -#. input/lsr/chord-name-exceptions.ly:45 (variable) +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) msgid "theMusic" msgstr "laMusique" -#. input/lsr/clip-systems.ly:35 (variable) +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" +msgstr "mesAccords" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "lesAccords" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +msgid "\\break" +msgstr "\\break" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "CoupletUn" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "CoupletDeux" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +msgid "sop" +msgstr "Sop" + +#. Documentation/snippets/clip-systems.ly:65 (variable) msgid "origScore" -msgstr "" +msgstr "partocheOriginale" -#. input/lsr/clip-systems.ly:53 (comment) +#. Documentation/snippets/clip-systems.ly:83 (comment) msgid "Each clip-region is a (START . END) pair" -msgstr "" +msgstr "Chaque coupure est contituée d'un couple (DÉBUT . FIN)" -#. input/lsr/clip-systems.ly:54 (comment) +#. Documentation/snippets/clip-systems.ly:84 (comment) msgid "where both are rhythmic-locations." -msgstr "" +msgstr "dont les membres sont des instants rythmiques (rythmic-locations)." -#. input/lsr/clip-systems.ly:56 (comment) +#. Documentation/snippets/clip-systems.ly:86 (comment) msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" -msgstr "" +msgstr "(make-rhythmic-locations NUMÉRO_MES NUM DÉN)" -#. input/lsr/clip-systems.ly:57 (comment) +#. Documentation/snippets/clip-systems.ly:87 (comment) msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" -msgstr "" +msgstr "signifie NUM/DÉN rondes dans la mesure numéro NUMÉRO_MES" -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:17 (comment) +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) msgid "Association list of pitches to colors." msgstr "Liste des associations de hauteur à une couleur" -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:37 (comment) +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) msgid "Compare pitch and alteration (not octave)." -msgstr "" +msgstr "Comparaison hauteur et altération (sans tenir compte de l'octave)" -#. input/lsr/combining-dynamics-with-markup-texts.ly:25 (variable) +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) msgid "piuF" msgstr "piuF" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:72 (variable) +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) msgid "musicUp" msgstr "musiqueHaut" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:79 (variable) +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) msgid "musicDown" msgstr "musiqueBas" -#. input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly:53 (variable) -#. input/lsr/jazz-combo-template.ly:277 (context id) -msgid "rhythm" -msgstr "rythme" +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" +msgstr "soufflet visible" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" +msgstr "extension de texte invisible" -#. input/lsr/creating-real-parenthesized-dynamics.ly:46 (variable) +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" +msgstr "glissando visible" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) msgid "parenF" msgstr "parentF" -#. input/lsr/creating-simultaneous-rehearsal-marks.ly:43 (comment) +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) msgid "the hidden measure and bar line" -msgstr "" +msgstr "la mesure vide et sa barre" -#. input/lsr/customizing-fretboard-fret-diagrams.ly:53 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:55 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:26 (comment) +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "\\cadenzaOn désactive le calcul automatique des numéros de mesure" + +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "haut" + +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "bas" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) msgid "Set global properties of fret diagram" msgstr "Définition des propriétés globales de diagramme de fret" -#. input/lsr/customizing-markup-fret-diagrams.ly:53 (context id) -#. input/lsr/formatting-lyrics-syllables.ly:21 (variable) -#. input/lsr/fret-diagrams-explained-and-developed.ly:24 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:65 (context id) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) msgid "mel" msgstr "melodie" -#. input/lsr/customizing-markup-fret-diagrams.ly:62 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) msgid "C major for guitar, no barre, using defaults" msgstr "Do majeur pour la guitare, sans barré, réglages par défaut" -#. input/lsr/customizing-markup-fret-diagrams.ly:63 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:113 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) msgid "terse style" msgstr "style terse" -#. input/lsr/customizing-markup-fret-diagrams.ly:66 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:88 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:55 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:76 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:155 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:176 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:254 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:275 (comment) -msgid "C major for guitar, barred on third fret" -msgstr "Do majeur pour la guitare, barré sur le troisième fret" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" +msgstr "Do majeur pour la guitare, barré sur le troisième fret" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" +msgstr "style verbeux" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) +msgid "size 1.0" +msgstr "taille 1,0" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" +msgstr "" +"indication de fret en chiffre romain, doigté sous la corde, barré rectiligne" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) +msgid "standard size" +msgstr "taille standard" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" +msgstr "orientation à l'italienne, chiffres arabes, M pour corde étoufée" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) +msgid "no barre, fret label down or left, small mute label font" +msgstr "" +"sans barré, indication de fret en bas ou à gauche, petite indication " +"d'étouffé" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" +msgstr "accord de ré simple" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) +msgid "larger dots, centered dots, fewer frets" +msgstr "points plus gros et centrés, moins de frets" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) +msgid "label below string" +msgstr "étiquette sous la corde" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +msgid "notes." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:67 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:89 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:56 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:78 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:105 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:156 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:178 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:205 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:255 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:277 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:304 (comment) -msgid "verbose style" -msgstr "style verbeux" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:68 (comment) -msgid "size 1.0" -msgstr "taille 1,0" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." +msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:69 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:57 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:157 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:256 (comment) -msgid "roman fret label, finger labels below string, straight barre" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" msgstr "" -"indication de fret en chiffre romain, doigté sous la corde, barré rectiligne" -#. input/lsr/customizing-markup-fret-diagrams.ly:71 (comment) -msgid "standard size" -msgstr "taille standard" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:90 (comment) -msgid "landscape orientation, arabic numbers, M for mute string" -msgstr "orientation à l'italienne, chiffres arabes, M pour corde étoufée" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:91 (comment) -msgid "no barre, fret label down or left, small mute label font" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." msgstr "" -"sans barré, indication de fret en bas ou à gauche, petite indication " -"d'étouffé" -#. input/lsr/customizing-markup-fret-diagrams.ly:112 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:127 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:227 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:326 (comment) -msgid "simple D chord" -msgstr "accord de ré simple" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +msgid "Ambitus engraving logics" +msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:114 (comment) -msgid "larger dots, centered dots, fewer frets" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:115 (comment) -msgid "label below string" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:81 (comment) +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" +msgstr "Exemple" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) msgid "add FretBoards for the Cuatro" -msgstr "" +msgstr "ajout de FretBoards pour le cuatro" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:82 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) msgid "Note: This section could be put into a separate file" msgstr "NB : Cette partie pourrait faire l'objet d'un fichier séparé" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:83 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:86 (comment) msgid "predefined-cuatro-fretboards.ly" msgstr "predefined-cuatro-fretboards.ly" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (comment) msgid "and \\included into each of your compositions" -msgstr "" +msgstr "récupéré par \\include dans chacune de vos compositions" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:86 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) msgid "cuatroTuning" -msgstr "" +msgstr "cuatroTuning" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:88 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) msgid "dSix" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) msgid "dMajor" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:90 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) msgid "aMajSeven" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:94 (variable) msgid "dMajSeven" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:95 (variable) msgid "gMajor" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:110 (comment) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:113 (comment) msgid "end of potential include file /predefined-cuatro-fretboards.ly" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:115 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:118 (variable) msgid "primerosNames" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:119 (variable) +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:122 (variable) msgid "primeros" msgstr "" -#. input/lsr/demo-midiinstruments.ly:23 (variable) +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) msgid "baseMelody" msgstr "baseMelodique" -#. input/lsr/display-bracket-with-only-one-staff-in-a-system.ly:55 (comment) +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) msgid "Must be lower than the actual number of staff lines" -msgstr "" +msgstr "doit être inférieur au nombre réel de lignes de la portée" -#. input/lsr/displaying-complex-chords.ly:16 (variable) +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) msgid "fixA" -msgstr "" +msgstr "fixA" -#. input/lsr/displaying-complex-chords.ly:20 (variable) +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) msgid "fixB" -msgstr "" +msgstr "fixB" + +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "\\\" (make-string 36 #\\-))" -#. input/lsr/double-glissando.ly:20 (comment) +#. Documentation/snippets/double-glissando.ly:21 (comment) msgid "new voice ( = \\voiceOne), hidden" msgstr "nouvelle voix ( = \\voiceOne), masquée" -#. input/lsr/double-glissando.ly:22 (comment) +#. Documentation/snippets/double-glissando.ly:23 (comment) msgid "attach glissando to note heads" msgstr "rattachement du glissando aux têtes de note" -#. input/lsr/double-glissando.ly:27 (comment) +#. Documentation/snippets/double-glissando.ly:28 (comment) msgid "original voice with chords rearranged so that" msgstr "voix originale avec les accords réagencés pour pouvoir" -#. input/lsr/double-glissando.ly:28 (comment) +#. Documentation/snippets/double-glissando.ly:29 (comment) msgid "glissando is attached to a & c" msgstr "attacher le glissando au la et au do" -#. input/lsr/embedding-native-postscript-in-a--markup-block.ly:24 (comment) +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" +msgstr "cercle" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) +msgid "" +"Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "Ces fonctions pour (de)crescendo permettent de composer librement" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." +msgstr "le texte à prolonger" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +msgid "mycresc" +msgstr "moncresc" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +msgid "mydecresc" +msgstr "mondecresc" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:61 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "" +"Exemples de nuance textuelle avec extension, à utiliser en postposition" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:62 (variable) +msgid "crpoco" +msgstr "crpoco" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:67 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" +msgstr "" +"Redéfinition des commandes \\cresc, \\dim et \\decresc pour pouvoir les " +"mettre en postposition" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:68 (variable) +msgid "cresc" +msgstr "cresc" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:73 (variable) +msgid "dim" +msgstr "dim" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:78 (variable) +msgid "decresc" +msgstr "decresc" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "Manuel de notation - 1.7 : Annotations éditoriales" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "Beethoven, Op. 31, No 3" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "Sonate pour piano No 18, 2e mouvement, Scherzo" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "Mesures 9 à 14" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "Portée MD" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "Portée MG" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) msgid "PostScript is a registered trademark of Adobe Systems Inc." msgstr "PostScript est une marque déposée par Adobe Systems Inc." -#. input/lsr/engravers-one-by-one.ly:76 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) msgid "sample music" msgstr "exemple de musique" -#. input/lsr/engravers-one-by-one.ly:77 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) msgid "topVoice" msgstr "voixSuperieur" -#. input/lsr/engravers-one-by-one.ly:85 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) msgid "botVoice" msgstr "voixInferieur" -#. input/lsr/engravers-one-by-one.ly:93 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) msgid "hoom" msgstr "houm" -#. input/lsr/engravers-one-by-one.ly:104 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) msgid "pah" msgstr "pah" -#. input/lsr/engravers-one-by-one.ly:114 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) msgid "setup for Request->Element conversion. Guru-only" msgstr "Réservé aux gurus : réglage pour la conversion Request->Element" -#. input/lsr/engravers-one-by-one.ly:117 (variable) -#. input/lsr/engravers-one-by-one.ly:222 (variable) -#. input/lsr/engravers-one-by-one.ly:235 (variable) -#. input/lsr/engravers-one-by-one.ly:291 (variable) -#. input/lsr/engravers-one-by-one.ly:305 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:209 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:222 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:278 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:292 (variable) msgid "MyStaff" msgstr "MaPortee" -#. input/lsr/engravers-one-by-one.ly:149 (comment) -msgid "explicitly set instrument, so we don't get " +#. Documentation/snippets/engravers-one-by-one.ly:139 (comment) +msgid "explicitly set instrumentName, so we don't get" msgstr "définition explicite de l'instrument, pour éviter" -#. input/lsr/engravers-one-by-one.ly:150 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) msgid "weird effects when doing instrument names for" msgstr "les effets indésirables en créant un nom pour des" -#. input/lsr/engravers-one-by-one.ly:151 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) msgid "piano staves" msgstr "portées de piano" -#. input/lsr/engravers-one-by-one.ly:160 (variable) -#. input/lsr/engravers-one-by-one.ly:249 (variable) -#. input/lsr/engravers-one-by-one.ly:262 (variable) -#. input/lsr/engravers-one-by-one.ly:275 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:150 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:236 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:249 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:262 (variable) msgid "MyVoice" msgstr "MaVoix" -#. input/lsr/engravers-one-by-one.ly:175 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:165 (comment) msgid "must come before all" -msgstr "" +msgstr "doit venir avant tous les autres" -#. input/lsr/engravers-one-by-one.ly:185 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:175 (comment) msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "\\consists \\\"Rest_engraver\\\"" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "L. v. Beethoven, Op. 49 No 1" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "Sonate pou piano 19 « Leichte Sonate »" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "mesures 1 à 12" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "\\layout {" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "\\context {" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "\\Score" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" msgstr "" -#. input/lsr/flamenco-notation.ly:46 (comment) -msgid "Cut here ----- Start 'flamenco.ly' " +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "Arcangelo Corelli, 12 sonates de chambre, Op. 2" + +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "Sonata II, Allemande" + +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "mesures 1 à 88" + +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "Code de Neil Puttock, modifié par Carl Sorensen" + +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +msgid "extendOn" +msgstr "prolongeOui" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "prolongeNon" + +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "violonI" + +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "violonII" + +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "violons" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:40 (variable) +msgid "centermarkup" +msgstr "markupcentre" + +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" msgstr "" -#. input/lsr/flamenco-notation.ly:48 (comment) +#. Documentation/snippets/flamenco-notation.ly:96 (comment) msgid "Text indicators" msgstr "" -#. input/lsr/flamenco-notation.ly:49 (variable) +#. Documentation/snippets/flamenco-notation.ly:97 (variable) msgid "abanico" msgstr "" -#. input/lsr/flamenco-notation.ly:50 (variable) +#. Documentation/snippets/flamenco-notation.ly:98 (variable) msgid "rasgueaso" msgstr "" -#. input/lsr/flamenco-notation.ly:51 (variable) +#. Documentation/snippets/flamenco-notation.ly:99 (variable) msgid "alzapua" msgstr "" -#. input/lsr/flamenco-notation.ly:53 (comment) +#. Documentation/snippets/flamenco-notation.ly:101 (comment) msgid "Finger stroke symbols" msgstr "" -#. input/lsr/flamenco-notation.ly:54 (variable) +#. Documentation/snippets/flamenco-notation.ly:102 (variable) msgid "strokeUp" msgstr "" -#. input/lsr/flamenco-notation.ly:64 (variable) +#. Documentation/snippets/flamenco-notation.ly:112 (variable) msgid "strokeDown" msgstr "" -#. input/lsr/flamenco-notation.ly:74 (comment) +#. Documentation/snippets/flamenco-notation.ly:122 (comment) msgid "Golpe symbol" msgstr "" -#. input/lsr/flamenco-notation.ly:75 (variable) +#. Documentation/snippets/flamenco-notation.ly:123 (variable) msgid "golpe" msgstr "" -#. input/lsr/flamenco-notation.ly:89 (variable) +#. Documentation/snippets/flamenco-notation.ly:137 (variable) msgid "strokeUpGolpe" msgstr "" -#. input/lsr/flamenco-notation.ly:90 (variable) +#. Documentation/snippets/flamenco-notation.ly:138 (variable) msgid "iUpGolpe" msgstr "" -#. input/lsr/flamenco-notation.ly:92 (comment) +#. Documentation/snippets/flamenco-notation.ly:140 (comment) msgid "Strokes for all fingers" msgstr "" -#. input/lsr/flamenco-notation.ly:93 (variable) +#. Documentation/snippets/flamenco-notation.ly:141 (variable) msgid "pUp" msgstr "" -#. input/lsr/flamenco-notation.ly:94 (variable) +#. Documentation/snippets/flamenco-notation.ly:142 (variable) msgid "pDown" msgstr "" -#. input/lsr/flamenco-notation.ly:95 (variable) +#. Documentation/snippets/flamenco-notation.ly:143 (variable) msgid "iUp" msgstr "" -#. input/lsr/flamenco-notation.ly:96 (variable) +#. Documentation/snippets/flamenco-notation.ly:144 (variable) msgid "iDown" msgstr "" -#. input/lsr/flamenco-notation.ly:97 (variable) +#. Documentation/snippets/flamenco-notation.ly:145 (variable) msgid "mUp" msgstr "" -#. input/lsr/flamenco-notation.ly:98 (variable) +#. Documentation/snippets/flamenco-notation.ly:146 (variable) msgid "mDown" msgstr "" -#. input/lsr/flamenco-notation.ly:99 (variable) +#. Documentation/snippets/flamenco-notation.ly:147 (variable) msgid "aUp" msgstr "" -#. input/lsr/flamenco-notation.ly:100 (variable) +#. Documentation/snippets/flamenco-notation.ly:148 (variable) msgid "aDown" msgstr "" -#. input/lsr/flamenco-notation.ly:101 (variable) +#. Documentation/snippets/flamenco-notation.ly:149 (variable) msgid "xUp" msgstr "" -#. input/lsr/flamenco-notation.ly:102 (variable) +#. Documentation/snippets/flamenco-notation.ly:150 (variable) msgid "xDown" msgstr "" -#. input/lsr/flamenco-notation.ly:105 (comment) +#. Documentation/snippets/flamenco-notation.ly:153 (comment) msgid "Just handy :)" msgstr "" -#. input/lsr/flamenco-notation.ly:106 (variable) +#. Documentation/snippets/flamenco-notation.ly:154 (variable) msgid "tupletOff" msgstr "noletNon" -#. input/lsr/flamenco-notation.ly:111 (variable) +#. Documentation/snippets/flamenco-notation.ly:159 (variable) msgid "tupletsOff" msgstr "noletsNon" -#. input/lsr/flamenco-notation.ly:116 (variable) +#. Documentation/snippets/flamenco-notation.ly:164 (variable) msgid "tupletsOn" msgstr "noletsOui" -#. input/lsr/flamenco-notation.ly:121 (variable) +#. Documentation/snippets/flamenco-notation.ly:169 (variable) msgid "headsOff" msgstr "tetesNon" -#. input/lsr/flamenco-notation.ly:127 (variable) +#. Documentation/snippets/flamenco-notation.ly:175 (variable) msgid "headsOn" msgstr "tetesOui" -#. input/lsr/flamenco-notation.ly:133 (comment) -msgid "Cut here ----- End 'flamenco.ly' " +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" msgstr "" -#. input/lsr/flat-flags-and-beam-nibs.ly:122 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) msgid "Example 1" msgstr "Exemple 1" -#. input/lsr/flat-flags-and-beam-nibs.ly:129 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) msgid "Example 2" msgstr "Exemple 2" -#. input/lsr/flat-flags-and-beam-nibs.ly:136 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) msgid "Example 3" msgstr "Exemple 3" -#. input/lsr/flat-flags-and-beam-nibs.ly:145 (comment) +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) msgid "Example 4" msgstr "Exemple 4" -#. input/lsr/flute-slap-notation.ly:17 (variable) +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) msgid "slap" msgstr "slap" -#. input/lsr/formatting-lyrics-syllables.ly:16 (comment) +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +msgid "example" +msgstr "exemple" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) msgid "" "Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" "msg00215.html" @@ -11782,1673 +7667,2407 @@ msgstr "" "Truc extrait de http://lists.gnu.org/archive/html/lilypond-user/2007-12/" "msg00215.html" -#. input/lsr/fret-diagrams-explained-and-developed.ly:42 (comment) -msgid "A chord for ukelele, with formatting defined in definition string" +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +msgid "lyr" +msgstr "paroles" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "Un accord pour ukulele" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:43 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:44 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:53 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) msgid "These chords will be in normal orientation" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:59 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:80 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:107 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:159 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:180 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:207 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:258 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:279 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:306 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) #, python-format msgid "110% of default size" msgstr "110 % de la taille par défaut" -#. input/lsr/fret-diagrams-explained-and-developed.ly:77 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:177 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:276 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) msgid "Double barre used to test barre function" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:104 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:204 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:303 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) msgid "C major for guitar, with capo on third fret" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:139 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:238 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:337 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) msgid "simple D chord, large top fret thickness" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:151 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) msgid "These chords will be in landscape orientation" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:250 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) msgid "These chords will be in opposing-landscape orientation" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:42 (comment) +#. Documentation/snippets/fretboards-alternate-tables.ly:49 (comment) +msgid "Make a blank new fretboard table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:52 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:55 (comment) +msgid "Add a chord to custom-fretboard-table-one" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:61 (comment) +msgid "Add a chord to custom-fretboard-table-two" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "raccourcis" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +msgid "fingering orientations" +msgstr "positionnement des doigtés" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "positionnement du numéro de corde" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "(bas droite haut)" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +msgid "ssnor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +msgid "rit" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +msgid "dimin" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "pdolce" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "LA MUSIQUE %%%" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "m. 1" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "m. 2" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "m. 3" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "m. 4" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" +msgstr "m. 5" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "fin de la mesure 6" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" +msgstr "m. 7" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "début de mesure 8" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "fin de mesure 9" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" +msgstr "m. 10" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "début de mesure 11" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "fin de mesure 11" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "début mesure 2" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "fin mesure 2" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "début d'une nouvelle section, en la mineur" + +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" +msgstr "début mesure 6" + +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" +msgstr "fin mesure 6" + +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" +msgstr "mesure 8" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" +msgstr "début mesure 9" + +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" +msgstr "fin mesure 9" + +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" +msgstr "mesure 11" + +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" +msgstr "guitare" + +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) msgid "this moves them up one staff space from the default position" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:60 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) msgid "set up grids" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:62 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) msgid "set the grid interval to one quarter note" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:68 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) msgid "this moves them to the right half a staff space" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:37 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) msgid "hides staff and notes so that only the grid lines are visible" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:44 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) msgid "dummy notes to force regular note spacing" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:60 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) msgid "center grid lines horizontally below note heads" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:67 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) msgid "set line length and positioning:" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) msgid "two staff spaces above center line on hidden staff" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) msgid "to four spaces below center line on visible staff" msgstr "" -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:49 (variable) +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) msgid "drum" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:55 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) msgid "Solution 1: Using a simple markup with a particular halign value" -msgstr "" +msgstr "Solution 1 : utilisation d'un simple markup avec valeur halign particulière" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" -msgstr "" +msgstr "Inconvénient : c'est un markup, pas une commande de nuance, donc" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) msgid "etc. will have no effect" -msgstr "" +msgstr "\\dynamicDown et autres seront sans effet." -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) msgid "semppMarkup" msgstr "semppMarque" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:60 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) msgid "Solution 2: Using a dynamic script & shifting with" -msgstr "" +msgstr "Solution 2 : utilisation d'un script de nuance, puis déplacement" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) msgid "\\once \\override ... #'X-offset = .." -msgstr "" +msgstr "avec un \\once \\override ... #'X-offset = .." -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) msgid "Drawback: \\once \\override needed for every invocation" -msgstr "" +msgstr "Inconvénient : il faut un \\once \\override à chaque fois" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) msgid "semppK" -msgstr "" +msgstr "semppK" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:70 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) msgid "Solution 3: Padding the dynamic script so the center-alignment" -msgstr "" +msgstr "Solution 3 : décalage du script de nuance pour que « center-alignment »" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) msgid "puts it at the correct position" -msgstr "" +msgstr "le positionne là où il faut" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) msgid "" "Drawback: the padding really reserves the space, nothing else can be there" -msgstr "" +msgstr "Inconvénient : le décalage réserve de l'espace où rien ne pourra se placer" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) msgid "semppT" -msgstr "" +msgstr "semppT" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:81 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" -msgstr "" +msgstr "Solution 4 : nuance avec dimensionnement à 0 du texte ajouté" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" -msgstr "" +msgstr "Inconvénient : lilypond considère que « sempre » n'a pas d'extension, ce" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) msgid "other stuff there => collisions" -msgstr "" +msgstr "qui l'autorise à y placer d'autres éléments => collisions" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" -msgstr "" +msgstr "Inconvénient : Il y a apparemment de l'espacement, d'où un alignement légèrement" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) msgid "same alignment as without the additional text" -msgstr "" +msgstr "différent que s'il n'y avait pas de texte additionnel" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) msgid "semppM" -msgstr "" +msgstr "semppM" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:91 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" -msgstr "" +msgstr "Solution 5 : nuance avec décalage explicite dans la fonction Scheme" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:92 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) msgid "semppG" -msgstr "" +msgstr "semppG" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:98 (comment) -msgid "" -"Solution 6: Dynamic with explicit alignment. This has only effect, if one " -"sets X-offset!" -msgstr "" +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "Solution 6 : nuance avec alignement explicite. Ceci ne sera effectif" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "que si l'on définit X-offset" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:99 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) msgid "Drawback: One needs to set DynamicText #'X-offset!" -msgstr "" +msgstr "Inconvénient : il faut définir DynamicText #'X-offset" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:100 (comment) -msgid "" -"Drawback: Aligned at the right edge of the additional text, not at the " -"center of pp" -msgstr "" +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "Inconvénient : alignement sur le coin droit du texte additionnel" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "et non sur le centre du pp" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:101 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) msgid "semppMII" -msgstr "" +msgstr "semppMII" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) msgid "s" -msgstr "" +msgstr "s" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:113 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) msgid "sMarkup" msgstr "sMarque" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:120 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) msgid "sK" -msgstr "" +msgstr "sK" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:131 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) msgid "sT" -msgstr "" +msgstr "sT" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:138 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) msgid "sM" -msgstr "" +msgstr "sM" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:145 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) msgid "sG" -msgstr "" +msgstr "sG" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:152 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) msgid "sMII" -msgstr "" +msgstr "sMII" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:156 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) msgid "Setting to ##f (false) gives the same result" -msgstr "" +msgstr "défini à ##f (faux) produirait le même résultat" -#. input/lsr/how-to-change-fret-diagram-position.ly:28 (variable) -#. input/lsr/score-for-diatonic-accordion.ly:61 (variable) -#. input/lsr/showing-chords-at-changes.ly:32 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:47 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:45 (variable) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) msgid "harmonies" -msgstr "" +msgstr "harmonies" -#. input/lsr/how-to-change-fret-diagram-position.ly:31 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:34 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) msgid "THIS LINE IS THE SECOND METHOD" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:44 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:47 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) msgid "HERE IS THE SECOND METHOD" msgstr "" -#. input/lsr/incipit.ly:77 (variable) -#. input/lsr/incipit.ly:78 (context id) +#. Documentation/snippets/hymn-template.ly:50 (variable) +msgid "Timeline" +msgstr "Phrase" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +msgid "Start score" +msgstr "Début de la partition" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +msgid "Start pianostaff" +msgstr "Début du pianostaff" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "Debut de la portée MD" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "Début de la voix « Soprano »" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "Fin de la voix « Soprano »" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +msgid "Start Voice = \\\"Alto\\\"" +msgstr "Début de la voix « Alto »" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +msgid "End Voice = \\\"Alto\\\"" +msgstr "Fin de la voix « Alto »" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "Fin de la portée MD" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "Début de la portée MG" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "Début de la voix « Tenor »" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +msgid "End Voice = \\\"Tenor\\\"" +msgstr "Fin de la voix « Tenor »" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +msgid "Start Voice = \\\"Bass\\\"" +msgstr "Début de la voix « Basse »" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +msgid "End Voice = \\\"Bass\\\"" +msgstr "Fin de la voix « Basse »" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "Fin de la portée MG" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +msgid "End pianostaff" +msgstr "Fin du pianostaff" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "Début du bloc « paper »" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +msgid "don't indent first system" +msgstr "pas d'indentation du premier système" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +msgid "shorten line length to suit music" +msgstr "raccourcissement de la longueur de ligne" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "Fin du bloc « paper »" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) msgid "discantusIncipit" msgstr "discantusIncipit" -#. input/lsr/incipit.ly:114 (variable) -#. input/lsr/incipit.ly:115 (context id) +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) msgid "altusIncipit" msgstr "altusIncipit" -#. input/lsr/incipit.ly:130 (comment) -#. input/lsr/incipit.ly:142 (comment) -#. input/lsr/incipit.ly:172 (comment) -#. input/lsr/incipit.ly:181 (comment) +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) msgid "two measures" msgstr "deux mesures" -#. input/lsr/incipit.ly:150 (variable) -#. input/lsr/incipit.ly:151 (context id) +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) msgid "tenorIncipit" msgstr "tenorIncipit" -#. input/lsr/incipit.ly:187 (variable) -#. input/lsr/incipit.ly:188 (context id) +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) msgid "bassusIncipit" msgstr "bassusIncipit" -#. input/lsr/incipit.ly:258 (comment) +#. Documentation/snippets/incipit.ly:265 (comment) msgid "no bar lines in staves or lyrics" msgstr "pas de barre sur les portées ni dans les paroles" -#. input/lsr/incipit.ly:261 (comment) +#. Documentation/snippets/incipit.ly:268 (comment) msgid "the next two instructions keep the lyrics between the bar lines" -msgstr "" +msgstr "les deux instructions qui suivent maintiennent les paroles entre les barres" -#. input/lsr/incipit.ly:272 (comment) +#. Documentation/snippets/incipit.ly:279 (comment) msgid "breaking also at those bar lines where a note overlaps" -msgstr "" +msgstr "des sauts de ligne y compris lorsqu'une barre de mesure apparaît sur une" -#. input/lsr/incipit.ly:273 (comment) +#. Documentation/snippets/incipit.ly:280 (comment) msgid "into the next measure. The command is commented out in this" -msgstr "" +msgstr "note qui se prolonge dans la mesure suivante. Cette commande est ici commentée" -#. input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly:16 (variable) +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) msgid "tuning" -msgstr "" +msgstr "tuning" + +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "fabriquePourcent" -#. input/lsr/jazz-combo-template.ly:54 (comment) +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) msgid "#(set-global-staff-size 16)" -msgstr "" +msgstr "#(set-global-staff-size 16)" -#. input/lsr/jazz-combo-template.ly:57 (comment) +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) msgid "Some macros %%%%%%%%%%%%%%%%%%%" -msgstr "" +msgstr "Quelques macros %%%%%%%%%%%%%%%%%%%" -#. input/lsr/jazz-combo-template.ly:59 (variable) +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) msgid "sl" -msgstr "" +msgstr "sl" -#. input/lsr/jazz-combo-template.ly:63 (variable) +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) msgid "nsl" -msgstr "" +msgstr "nsl" -#. input/lsr/jazz-combo-template.ly:67 (variable) +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) msgid "crOn" -msgstr "" +msgstr "crOn" -#. input/lsr/jazz-combo-template.ly:68 (variable) +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) msgid "crOff" -msgstr "" +msgstr "crOff" -#. input/lsr/jazz-combo-template.ly:70 (comment) +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) msgid "insert chord name style stuff here." msgstr "" -#. input/lsr/jazz-combo-template.ly:72 (variable) +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) msgid "jazzChords" msgstr "jazzAccords" -#. input/lsr/jazz-combo-template.ly:74 (comment) +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" msgstr "" -#. input/lsr/jazz-combo-template.ly:78 (variable) +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) msgid "Key" -msgstr "" +msgstr "Tonalite" -#. input/lsr/jazz-combo-template.ly:80 (comment) +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) msgid "############ Horns ############" msgstr "" -#. input/lsr/jazz-combo-template.ly:82 (comment) +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) msgid "------ Trumpet ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:83 (variable) +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) msgid "trpt" -msgstr "" +msgstr "trpt" -#. input/lsr/jazz-combo-template.ly:87 (variable) +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) msgid "trpHarmony" -msgstr "" +msgstr "trpHarmonie" -#. input/lsr/jazz-combo-template.ly:90 (variable) -#. input/lsr/jazz-combo-template.ly:270 (context id) +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) msgid "trumpet" -msgstr "" +msgstr "trompette" -#. input/lsr/jazz-combo-template.ly:99 (comment) +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) msgid "------ Alto Saxophone ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:100 (variable) -msgid "alto" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:104 (variable) +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) msgid "altoHarmony" -msgstr "" +msgstr "altoHarmonie" -#. input/lsr/jazz-combo-template.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) msgid "altoSax" -msgstr "" +msgstr "altoSax" -#. input/lsr/jazz-combo-template.ly:116 (comment) +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) msgid "------ Baritone Saxophone ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:117 (variable) +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) msgid "bari" -msgstr "" +msgstr "bari" -#. input/lsr/jazz-combo-template.ly:125 (variable) +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) msgid "bariHarmony" -msgstr "" +msgstr "bariHarmonie" -#. input/lsr/jazz-combo-template.ly:128 (variable) +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) msgid "bariSax" -msgstr "" +msgstr "bariSax" -#. input/lsr/jazz-combo-template.ly:137 (comment) +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) msgid "------ Trombone ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:138 (variable) +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) msgid "tbone" -msgstr "" +msgstr "tbone" -#. input/lsr/jazz-combo-template.ly:142 (variable) +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) msgid "tboneHarmony" -msgstr "" +msgstr "tboneHarmonie" -#. input/lsr/jazz-combo-template.ly:145 (variable) -#. input/lsr/jazz-combo-template.ly:274 (context id) +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) msgid "trombone" -msgstr "" +msgstr "trombone" -#. input/lsr/jazz-combo-template.ly:154 (comment) +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) msgid "############ Rhythm Section #############" msgstr "" -#. input/lsr/jazz-combo-template.ly:156 (comment) +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) msgid "------ Guitar ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:157 (variable) +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) msgid "gtr" -msgstr "" +msgstr "gtr" -#. input/lsr/jazz-combo-template.ly:165 (variable) +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) msgid "gtrHarmony" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:169 (variable) -#. input/lsr/jazz-combo-template.ly:279 (context id) -#. input/lsr/polyphony-in-tablature.ly:57 (context id) -#. input/lsr/polyphony-in-tablature.ly:62 (context id) -msgid "guitar" -msgstr "" +msgstr "gtrHarmonie" -#. input/lsr/jazz-combo-template.ly:178 (comment) +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) msgid "------ Piano ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:179 (variable) +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) msgid "rhUpper" -msgstr "" +msgstr "mdHaut" -#. input/lsr/jazz-combo-template.ly:184 (variable) +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) msgid "rhLower" -msgstr "" +msgstr "mdBas" -#. input/lsr/jazz-combo-template.ly:190 (variable) +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) msgid "lhUpper" -msgstr "" +msgstr "mgHaut" -#. input/lsr/jazz-combo-template.ly:195 (variable) +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) msgid "lhLower" -msgstr "" +msgstr "mgBas" -#. input/lsr/jazz-combo-template.ly:201 (variable) +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) msgid "PianoRH" msgstr "PianoMD" -#. input/lsr/jazz-combo-template.ly:210 (variable) +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) msgid "PianoLH" msgstr "PianoMG" -#. input/lsr/jazz-combo-template.ly:228 (comment) +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) msgid "------ Bass Guitar ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:242 (comment) +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) msgid "------ Drums ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) msgid "drumContents" -msgstr "" +msgstr "percuContenu" -#. input/lsr/jazz-combo-template.ly:265 (comment) +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) #, python-format msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" msgstr "" -#. input/lsr/jazz-combo-template.ly:269 (context id) +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) msgid "horns" -msgstr "" +msgstr "cuivres" -#. input/lsr/jazz-combo-template.ly:271 (context id) +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) msgid "altosax" -msgstr "" +msgstr "altosax" -#. input/lsr/jazz-combo-template.ly:272 (context id) +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) msgid "barichords" -msgstr "" +msgstr "bariaccords" -#. input/lsr/jazz-combo-template.ly:273 (context id) +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) msgid "barisax" -msgstr "" +msgstr "barisax" -#. input/lsr/jazz-combo-template.ly:278 (context id) +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) msgid "chords" -msgstr "" +msgstr "accords" -#. input/lsr/makam-example.ly:41 (comment) +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "Maurice Ravel, Sonatine (1905)" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "Premier mouvement" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "pointdOrgue" + +#. Documentation/snippets/makam-example.ly:55 (comment) msgid "Initialize makam settings" -msgstr "" +msgstr "Initialisation des réglages de makam" -#. input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly:19 (variable) +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) msgid "bassfigures" -msgstr "" +msgstr "bassechiffrages" -#. input/lsr/manually-controlling-beam-positions.ly:21 (comment) +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) msgid "from upper staff-line (position 2) to center (position 0)" msgstr "" -#. input/lsr/manually-controlling-beam-positions.ly:24 (comment) +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) msgid "from center to one above center (position 1)" msgstr "" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:17 (variable) +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) msgid "speakOn" -msgstr "" +msgstr "parlatoO" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:33 (variable) +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) msgid "speakOff" -msgstr "" +msgstr "parlatoN" -#. input/lsr/markup-lines.ly:22 (comment) +#. Documentation/snippets/markup-lines.ly:23 (comment) msgid "Candide, Voltaire" -msgstr "" +msgstr "Candide, Voltaire" -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:43 (comment) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) msgid "the final bar line is not interrupted" -msgstr "" +msgstr "la barre finale n'est pas coupée" -#. input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly:17 (variable) +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) msgid "normalPos" -msgstr "" - -#. input/lsr/modern-tab-text-clef.ly:15 (variable) -msgid "TAB" -msgstr "" +msgstr "rectifPos" -#. input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly:52 (variable) +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) msgid "dashPlus" -msgstr "" +msgstr "tiretPlus" -#. input/lsr/modifying-tuplet-bracket-length.ly:23 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) msgid "Set tuplets to be extendable..." -msgstr "" +msgstr "Autorise l'indicateur de nolet à s'étendre..." -#. input/lsr/modifying-tuplet-bracket-length.ly:25 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) msgid "...to cover all items up to the next note" -msgstr "" +msgstr "...pour tout englober jusqu'à la note qui le suit" -#. input/lsr/modifying-tuplet-bracket-length.ly:29 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) msgid "...or to cover just whitespace" -msgstr "" +msgstr "...ou seulement sur le blanc qui le suit" -#. input/lsr/orchestra,-choir-and-piano-template.ly:41 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +msgid "space for instrumentName" +msgstr "espace pour instrumentName" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" +msgstr "espace pour shortInstrumentName" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) msgid "fluteMusic" msgstr "fluteMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:42 (variable) -msgid "oboeMusic" -msgstr "hautboisMusique" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" +msgstr "Hauteurs recopiées d'un manuscript pour clarinette en la" -#. input/lsr/orchestra,-choir-and-piano-template.ly:43 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "et que l'on transpose en ut." + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) msgid "clarinetMusic" msgstr "clarinetteMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:44 (variable) -msgid "bassoonMusic" -msgstr "bassonMusique" - -#. input/lsr/orchestra,-choir-and-piano-template.ly:45 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) msgid "trumpetMusic" msgstr "trompetteMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:46 (variable) -msgid "tromboneMusic" -msgstr "tromboneMusique" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" +msgstr "La partie de cor ne comporte habituellement pas de tonalité" -#. input/lsr/orchestra,-choir-and-piano-template.ly:47 (variable) -msgid "hornIMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +msgid "hornMusic" msgstr "corMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:48 (variable) -msgid "hornIIMusic" -msgstr "corIIMusique" - -#. input/lsr/orchestra,-choir-and-piano-template.ly:49 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) msgid "percussionMusic" msgstr "percussionMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:52 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) msgid "altoIMusic" msgstr "altoIMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:53 (variable) -msgid "altoILyrics" -msgstr "altoIParoles" - -#. input/lsr/orchestra,-choir-and-piano-template.ly:54 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) msgid "altoIIMusic" msgstr "altoIIMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:55 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) +msgid "altoILyrics" +msgstr "altoIParoles" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) msgid "altoIILyrics" msgstr "altoIIParoles" -#. input/lsr/orchestra,-choir-and-piano-template.ly:58 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) msgid "pianoRHMusic" msgstr "pianoMDMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:59 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) msgid "pianoLHMusic" msgstr "pianoMGMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:60 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) msgid "violinIMusic" msgstr "violonIMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:61 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) msgid "violinIIMusic" msgstr "violonIIMusique" -#. input/lsr/orchestra,-choir-and-piano-template.ly:62 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) msgid "violaMusic" msgstr "violaMusique" -#. input/lsr/percussion-beaters.ly:18 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "shortInstrumentName, midiInstrument, etc." + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "peuvent aussi se définir ici" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "On stipule qu'un do médium dans la musique qui suit" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "sonnera comme un si bémol, à toutes fins utiles" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "pour une sortie exacte (MIDI p. ex.)." + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "Imprime la musique d'une clarinette en si bémol" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:146 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "\\\\set Staff.autoBeaming = ##f % désactive la ligature automatique" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:149 (comment) +msgid "applies to split up stems" +msgstr "s'applique aux hampes opposées" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "\\\\autoBeamOff % s'applique aux hampes ascendantes solidaires" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:156 (comment) +msgid "applies to down stems" +msgstr "s'applique aux hampes descendantes" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) msgid "stick" -msgstr "" +msgstr "baguette" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:50 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) msgid "Permit line breaks within tuplets" msgstr "Autorise la présence d'une barre de mesure dans les triolets" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:52 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) msgid "Allow beams to be broken at line breaks" msgstr "Autorise le saut de ligne dans une ligature" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:59 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) msgid "Insert a manual line break within a tuplet" msgstr "Insertion d'un saut de ligne manuel au milieu du triolet" -#. input/lsr/piano-template-with-centered-dynamics.ly:61 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) msgid "pedal" msgstr "pedale" -#. input/lsr/piano-template-with-centered-dynamics.ly:74 (comment) -msgid "define Dynamics context" -msgstr "" +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "L. van Beethoven" -#. input/lsr/piano-template-with-centered-dynamics.ly:95 (comment) -msgid "modify PianoStaff context to accept Dynamics context" -msgstr "" +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "Sonate pour piano No 21 - Dem Grafen von Waldstein Gewidmet" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "choral des mesures 34 à 40" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "MD Voix 1" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "(" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr ")" -#. input/lsr/polyphony-in-tablature.ly:56 (context id) +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "MD Voix 2" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) msgid "tab" -msgstr "" +msgstr "tab" -#. input/lsr/positioning-multi-measure-rests.ly:57 (comment) -msgid "Multi-measure rests by default are set under the second line" -msgstr "Les silences multi-mesures se placent sous la quatrième ligne" +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "SMM : silence multimesures" -#. input/lsr/positioning-multi-measure-rests.ly:59 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "Les SMM se placent par défaut sous la quatrième ligne" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) msgid "They can be moved with an override" msgstr "On peut les déplacer par dérogation" -#. input/lsr/positioning-multi-measure-rests.ly:62 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) msgid "A value of 0 is the default position;" msgstr "Une valeur à 0 correspond à la position par défaut ;" -#. input/lsr/positioning-multi-measure-rests.ly:63 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) msgid "the following trick moves the rest to the center line" msgstr "la dérogation qui suit repositionne le silence sur la ligne médiane" -#. input/lsr/positioning-multi-measure-rests.ly:66 (comment) -msgid "Multi-measure rests in odd-numbered voices are under the top line" -msgstr "" -"Les silences multi-mesures des voix impaires sont attachés à la ligne du haut" +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "Les SMM des voix impaires sont attachés à la ligne du haut" -#. input/lsr/positioning-multi-measure-rests.ly:68 (comment) -msgid "Multi-measure rests in even-numbered voices are under the bottom line" -msgstr "" -"Les silences multi-mesures des voix paires sont attachés à la ligne du bas" +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" +msgstr "Les SMM des voix paires sont attachés à la ligne du bas" -#. input/lsr/positioning-multi-measure-rests.ly:70 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) msgid "They remain separated even in empty measures" msgstr "Il y en aura deux, même si la mesure est absolument vide" -#. input/lsr/positioning-multi-measure-rests.ly:72 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) msgid "This brings them together even though there are two voices" msgstr "" "Voici ce qui les fusionnera même s'ils appartiennent à deux voix différentes" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:28 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:49 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) msgid "Set segno sign as rehearsal mark and adjust size if needed" -msgstr "" +msgstr "Autorise un segno en tant que repère et ajustement de sa taille au besoin" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:29 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:51 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) msgid "\\once \\override Score.RehearsalMark #'font-size = #3" -msgstr "" +msgstr "\\once \\override Score.RehearsalMark #'font-size = #3" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:35 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) msgid "Set coda sign as rehearsal mark and adjust size if needed" -msgstr "" +msgstr "Autorise un coda en tant que repère et ajustement de sa taille au besoin" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:42 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) msgid "Should Coda be on anew line?" -msgstr "" +msgstr "Coda sur une nouvelle ligne ?" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:43 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) msgid "Coda NOT on new line: use \\nobreak" -msgstr "" +msgstr "NON : utiliser \\noBreak" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:44 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) msgid "Coda on new line: DON'T use \\nobreak" -msgstr "" +msgstr "OUI : \\noBreak INTERDIT" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:45 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) msgid "\\noBreak" -msgstr "" +msgstr "\\noBreak" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:54 (comment) -msgid "Here begins the trickery! " -msgstr "" +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" +msgstr "Entrons maintenant dans le vif du sujet." -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:55 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) msgid "" "\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " "lines." -msgstr "" +msgstr "\\cadenzaOn interrompt la numérotation et \\stopStaff suprime les lignes de la portée" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:58 (comment) -msgid "Some examples of possible text-displays " -msgstr "" +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" +msgstr "Quelques exemples de présentation du texte" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:60 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) msgid "text line-aligned" -msgstr "" +msgstr "texte aligné sur la ligne" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:61 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) msgid "==================" -msgstr "" +msgstr "=========================" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:62 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:68 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) msgid "Move text to the desired position" -msgstr "" +msgstr "Positionnement du texte au bon endroit" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" -msgstr "" +msgstr "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:64 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) msgid "| s1*0^\\markup { D.S. al Coda } }" -msgstr "" +msgstr "| s1*0^\\markup { D.S. al Coda } }" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:66 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) msgid "text center-aligned" -msgstr "" +msgstr "texte centré" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:67 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) msgid "====================" -msgstr "" +msgstr "============" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:69 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" -msgstr "" +msgstr "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:70 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" -msgstr "" +msgstr "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:72 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) msgid "text and symbols center-aligned" -msgstr "" +msgstr "texte et symboles centrés" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:73 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) msgid "===============================" -msgstr "" +msgstr "=========================" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:74 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) msgid "" "Move text to the desired position and tweak spacing for optimum text " "alignment" -msgstr "" +msgstr "Positionnement du texte au bon endroit et ajustement de l'espace au mieux" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:75 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" -msgstr "" +msgstr "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:81 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) msgid "Increasing the unfold counter will expand the staff-free space" -msgstr "" +msgstr "augmenter le nombre de répétitions pour accroître l'espace libre" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:86 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) msgid "Resume bar count and show staff lines again" -msgstr "" +msgstr "Reprise de la numérotation et réapparition des lignes de portée" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:90 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) msgid "Should Coda be on new line?" -msgstr "" +msgstr "Coda sur une nouvelle ligne ?" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:91 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) msgid "Coda NOT on new line: DON'T use \\break" -msgstr "" +msgstr "NON : \\break INTERDIT" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:92 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) msgid "Coda on new line: use \\break" -msgstr "" +msgstr "OUI : \\breal OBLIGATOIRE" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:95 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) msgid "Show up, you clef and key!" -msgstr "" +msgstr "Merci pour la clef et l'armure !" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:99 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) msgid "Set coda sign as rehearsal mark and adjust size and position" -msgstr "" +msgstr "Utilisation d'un coda comme repère et ajustement de sa taille et du positionnement" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:101 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) msgid "" "Put the coda sign ontop of the (treble-)clef dependend on coda's line-" "position" -msgstr "" +msgstr "Le symbole coda se place au-dessus de la clef (de sol) selon la ligne de la coda" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:103 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) msgid "Coda NOT on new line, use this:" -msgstr "" +msgstr "Si la coda ne vient pas sur une nouvelle ligne, utilisez :" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:104 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" -msgstr "" +msgstr "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:106 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) msgid "Coda on new line, use this:" -msgstr "" +msgstr "Si la coda necessite un nouvelle ligne, utilisez plutôt :" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:112 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) msgid "The coda" msgstr "La coda" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:32 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "Le numéro de la première mesure est imprimé" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) msgid "Prevent bar numbers at the end of a line and permit them elsewhere" msgstr "Affichage du numéro à chaque mesure, hormis en fin de ligne" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:39 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) msgid "Draw a box round the following bar number(s)" msgstr "Numéros de mesure encadrés dans un rectangle" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:44 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) msgid "Draw a circle round the following bar number(s)" msgstr "Numéros de mesure encadrés dans un cercle" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:42 (comment) -msgid "Metronome marks below the staff " -msgstr "Indications métronimiques sous la portée" +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" +msgstr "Indications métronomiques sous la portée" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:47 (comment) +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) msgid "Rehearsal marks below the staff" msgstr "Indications de repère sous la portée" -#. input/lsr/printing-music-with-different-time-signatures.ly:50 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) msgid "Bassklarinette" msgstr "ClarinetteBasse" -#. input/lsr/printing-music-with-different-time-signatures.ly:90 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) msgid "Perkussion" msgstr "Percussions" -#. input/lsr/quoting-another-voice-with-transposition.ly:53 (variable) +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:24 (context id) +msgid "voc" +msgstr "vocal" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) msgid "quoteTest" -msgstr "" +msgstr "testeQuote" -#. input/lsr/quoting-another-voice-with-transposition.ly:54 (comment) +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) msgid "french horn" msgstr "cor anglais" -#. input/lsr/quoting-another-voice.ly:47 (variable) +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) msgid "quoteMe" -msgstr "" +msgstr "quoteMe" -#. input/lsr/quoting-another-voice.ly:52 (variable) +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) msgid "original" msgstr "original" +#. Documentation/snippets/recorder-fingering-chart.ly:38 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "" + # ça existe ce terme en français ? # ça vient directement de l'italien comme appogiature # ça c'est ben vrai ! -#. input/lsr/redefining-grace-note-global-defaults.ly:49 (variable) +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) msgid "startAcciaccaturaMusic" -msgstr "" +msgstr "ouvreAcciacature" # ça existe ce terme en français ? # ça vient directement de l'italien comme appogiature # ça c'est ben vrai ! -#. input/lsr/redefining-grace-note-global-defaults.ly:55 (variable) +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) msgid "stopAcciaccaturaMusic" -msgstr "" +msgstr "fermeAcciacature" -#. input/lsr/removing-the-first-empty-line.ly:60 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) msgid "To use the setting globally, uncomment the following line:" -msgstr "" +msgstr "Pour une application à toutes les portées, décommenter la ligne qui suit." -#. input/lsr/removing-the-first-empty-line.ly:61 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) msgid "\\override VerticalAxisGroup #'remove-first = ##t" -msgstr "" +msgstr "\\\\override VerticalAxisGroup #'remove-first = ##t" -#. input/lsr/removing-the-first-empty-line.ly:70 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) msgid "To use the setting globally, comment this line," -msgstr "" +msgstr "Pour une application à toutes les portées, commenter la ligne qui suit" -#. input/lsr/removing-the-first-empty-line.ly:71 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) msgid "uncomment the line in the \\layout block above" -msgstr "" +msgstr "et décommenter la ligne du bloc \\layout." -#. input/lsr/reverting-default-beam-endings.ly:40 (comment) +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) msgid "Default beaming" msgstr "Ligatures par défaut" -#. input/lsr/reverting-default-beam-endings.ly:43 (comment) -msgid "Revert default values in scm/auto-beam.scm for 12/8 time" -msgstr "On annule les réglages par défaut de scm/autobeam.scm pour 12/8" - -#. input/lsr/reverting-default-beam-endings.ly:49 (comment) +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) msgid "Set new values for beam endings" msgstr "puis on ajoute des règles de fin de ligature" -#. input/lsr/rhythmic-slashes.ly:25 (comment) +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) msgid "Macro to print single slash" -msgstr "" +msgstr "Macro pour imprimer une oblique" -#. input/lsr/rhythmic-slashes.ly:26 (variable) +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) msgid "rs" -msgstr "" +msgstr "rs" -#. input/lsr/rhythmic-slashes.ly:33 (comment) +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) msgid "Function to print a specified number of slashes" -msgstr "" +msgstr "Fonction chargée d'imprimer un nombre spécifié d'obliques" -#. input/lsr/rhythmic-slashes.ly:34 (variable) +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) msgid "comp" -msgstr "" +msgstr "comp" + +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "Beethoven, Op. 81a" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "Sonate pour piano No 26 - Das Lebewohl" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "2e mouvement - Abwesenheit" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "Mesures 31 à 34" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "\\override SpacingSpanner #'strict-grace-spacing = ##t" -#. input/lsr/score-for-diatonic-accordion.ly:69 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +msgid "sopranonotes" +msgstr "sopranonotes" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +msgid "sopranowords" +msgstr "sopranoparoles" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +msgid "altonotes" +msgstr "altonotes" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +msgid "altowords" +msgstr "altoparoles" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +msgid "tenornotes" +msgstr "tenornotes" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +msgid "tenorwords" +msgstr "tenorparoles" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +msgid "bassnotes" +msgstr "bassenotes" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +msgid "basswords" +msgstr "basseparoles" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "couplet" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) msgid "NoStem" msgstr "SansHampe" -#. input/lsr/score-for-diatonic-accordion.ly:70 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) msgid "NoNoteHead" msgstr "SansTetedeNote" -#. input/lsr/score-for-diatonic-accordion.ly:71 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) msgid "ZeroBeam" msgstr "ZeroLigature" -#. input/lsr/score-for-diatonic-accordion.ly:73 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) msgid "staffTabLine" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:78 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) msgid "" "Shows one horizontal line. The vertical line (simulating a bar-line) is " "simulated with a gridline" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:83 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) msgid "" -"disable the following line to see the the noteheads while writing the song " +"disable the following line to see the the noteheads while writing the song" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:87 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) msgid "The beam between 8th-notes is used to draw the push-line" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:88 (comment) -msgid "How to fast write the push-lines: " +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:89 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) msgid "" -"1. write repeatedly 'c c c c c c c c |' for the whole length of the song " +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:90 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) msgid "2. uncomment the line \\NoNoteHead" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:91 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) msgid "3. compile" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:92 (comment) -msgid "4. Mark the positions on which push/pull changes. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:93 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) msgid "" -"In the score-picture click on the position the push- or pull-part starts " +"In the score-picture click on the position the push- or pull-part starts" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:94 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) msgid "(on the noteHead, the cursor will change to a hand-icon)." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:95 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) msgid "The cursor in the source code will jump just at this position." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:96 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) msgid "a) If a push-part starts there, replace the 'c' by an 'e['" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:97 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) msgid "b) If a pull-part starts there, replace the 'c' by an 's'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:98 (comment) -msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:99 (comment) -msgid "6. For the pull-parts overwrite the 'c' with 's' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:100 (comment) -msgid "7. For every push-part replace the last 'c' with 'e]' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:101 (comment) -msgid "8. Switch into 'insert-mode' again " +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:102 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) msgid "" "9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " "e] s s)" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:103 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) msgid "10. re-enable the line \\NoNoteHead" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:113 (comment) -msgid "Accordion melody in tabulator score\t\t" +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:114 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) msgid "1. Place a copy of the piano melody below" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:115 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:134 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) msgid "" "2. Separate piano melody into pull- and push-parts according to the " -"staffTabLine you've already made " +"staffTabLine you've already made" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) msgid "" "3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " "reference) and then change the second line using the transformation paper" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:117 (comment) -msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:118 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:137 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) msgid "Tips:" msgstr "Astuces :" -#. input/lsr/score-for-diatonic-accordion.ly:119 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:138 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:121 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) msgid "AccordionTabTwoCBesDur" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:122 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) msgid "pull 1" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:123 (comment) -msgid "8 8 8 | " +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:125 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) msgid "push 2" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:126 (comment) -msgid "4 | " +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:128 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) msgid "pull 3" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:129 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) msgid "2 r8 }" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:133 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "AccordeonTab" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) msgid "1. Place a copy of the piano melody above" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:135 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) msgid "" "3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " -"reference) and then " +"reference) and then" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:136 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) msgid "change the second line using the transformation paper" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:139 (comment) -msgid "- " +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:150 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) msgid "4/4 - tact. How many beats per bar" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:152 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) msgid "The following line has to be adjusted O-F-T-E-N." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:161 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) msgid "staffVoice" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:169 (context id) -msgid "melodyVoi" +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:175 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) msgid "staffAccordionMel" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:176 (comment) -msgid "Set the accidentals (Vorzeichen) for each note, " +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:177 (comment) -msgid "do not remember them for the rest of the measure. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:196 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) msgid "BassRhytm" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:197 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) msgid "LyricBassRhythmI" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:199 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) msgid "staffBassRhytm" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:200 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) msgid "" "This is not a RhythmicStaff because it must be possible to append lyrics." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:202 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) msgid "x.y" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:204 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) msgid "" "Shows one horizontal line. The vertical line (simulating a bar-line) is " "simulated by a grid" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:205 (comment) -msgid "Search for 'grid' in this page to find all related functions " +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:208 (context id) -msgid "VoiceBassRhytm" -msgstr "" +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +msgid "notes" +msgstr "notes" -#. input/lsr/score-for-diatonic-accordion.ly:221 (comment) -msgid "" -"The vertical line (simulating a bar-line) in the staffBassRhytm is a " -"gridline " -msgstr "" +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "La même chose qu'un \\flageolet, un peu plus petit" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:25 (comment) -msgid "Define the fret diagrams to be used" -msgstr "Définition du diagramme de fret à utiliser" +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" +msgstr "Le second point d'orgue est ignoré" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) -msgid "cFretDiagram" -msgstr "" +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "NR 1.5 Notes simultanées" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:30 (variable) -msgid "gFretDiagram" -msgstr "" +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "L. van Beethoven, Op. 111" + +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "Sonate pour piano No 32" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:34 (variable) +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "2e mouvement - Arietta - Adagio molto semplice e cantabile" + +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "mesures 108 à 118" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +msgid "trillFlat" +msgstr "trilleBemol" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "MD voix 1" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "MD voix 2" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +msgid "LH staff" +msgstr "portée MG" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) msgid "verseI" msgstr "coupletI" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:39 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) msgid "verseII" msgstr "coupletII" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (variable) -msgid "theChords" -msgstr "lesAccords" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:46 (comment) -msgid "insert the chords for chordnames here" -msgstr "" +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "insérez les accords pour que leur nom et leur diagramme apparaisse" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:51 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) msgid "staffMelody" -msgstr "" +msgstr "porteeMelodie" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "insérez les notes de la mélodie" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:52 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) msgid "voiceMelody" -msgstr "" +msgstr "voixMelodie" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:56 (comment) -msgid "Type notes and fret diagram markups here" -msgstr "" +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "title = \\\"Le Lac des Cygnes\\\"" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:56 (variable) -msgid "snapPizzicato" -msgstr "" +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "subtitle = \\\"Danse Napolitaine\\\"" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:58 (comment) -msgid "now it can be used as \\snappizzicato after the note/chord" -msgstr "" +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:59 (comment) -msgid "Note that a direction (-, ^ or _) is required." -msgstr "" +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "arranger = \\\"arr. Laurence Sardain\\\"" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:62 (comment) -msgid "This does NOT work:" -msgstr "" +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "footer = \\\"Mutopia-2006/12/22-896\\\"" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:63 (comment) -msgid "\\snapPizzicato" -msgstr "" +#. Documentation/snippets/staff-headword.ly:38 (variable) +msgid "trompette" +msgstr "trompette" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "tambourin" + +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "tambourinMidi" + +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "prima" + +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "hauta" + +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "basa" -#. input/lsr/stemlets.ly:35 (comment) +#. Documentation/snippets/stemlets.ly:36 (comment) msgid "N.B. use Score.Stem to set for the whole score." -msgstr "" +msgstr "Utiliser Score.Stem pour une application à toutes les portées" + +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "cordeNumeroExtenseur" -#. input/lsr/string-quartet-template-simple.ly:42 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) msgid "violinOne" msgstr "violonUn" -#. input/lsr/string-quartet-template-simple.ly:51 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) msgid "violinTwo" msgstr "violonDeux" -#. input/lsr/string-quartet-template-simple.ly:60 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) msgid "viola" msgstr "viola" -#. input/lsr/string-quartet-template-with-separate-parts.ly:80 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) msgid "piece.ly" msgstr "piece.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:81 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) msgid "(This is the global definitions file)" -msgstr "" +msgstr "(Fichier regroupant les définitions communes à tous)" -#. input/lsr/string-quartet-template-with-separate-parts.ly:88 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) msgid "Violinone" msgstr "Violonun" -#. input/lsr/string-quartet-template-with-separate-parts.ly:93 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:99 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:106 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) msgid "*********************************" -msgstr "" +msgstr "*********************************" -#. input/lsr/string-quartet-template-with-separate-parts.ly:94 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) msgid "Violintwo" msgstr "Violondeux" -#. input/lsr/string-quartet-template-with-separate-parts.ly:100 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) msgid "Viola" msgstr "Viola" -#. input/lsr/string-quartet-template-with-separate-parts.ly:107 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) msgid "Cello" msgstr "Cello" -#. input/lsr/string-quartet-template-with-separate-parts.ly:113 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) msgid "**********************************" -msgstr "" +msgstr "**********************************" -#. input/lsr/string-quartet-template-with-separate-parts.ly:124 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) msgid "These are the other files you need to save on your computer" -msgstr "" +msgstr "Voici les autres fichiers que vous devrez enregistrer sur votre machine" -#. input/lsr/string-quartet-template-with-separate-parts.ly:126 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) msgid "score.ly" msgstr "score.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:127 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) msgid "(This is the main file)" -msgstr "" +msgstr "(Il s'agit du fhichier principal)" -#. input/lsr/string-quartet-template-with-separate-parts.ly:130 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) #, python-format msgid "" "\\include \\\"piece.ly\\\" %%% uncomment this line when using a " "separate file" -msgstr "" +msgstr "\\include \\\"piece.ly\\\" %%% décommenter cette ligne si utilisation d'un fichier séparé" -#. input/lsr/string-quartet-template-with-separate-parts.ly:139 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) msgid "{ Uncomment this block when using separate files" -msgstr "" +msgstr "{ décommenter ce bloc si chaque pupitre fait l'objet d'un fichier séparé" -#. input/lsr/string-quartet-template-with-separate-parts.ly:141 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) msgid "vn1.ly" msgstr "vn1.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:142 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) msgid "(This is the Violin 1 part file)" -msgstr "" +msgstr "La partition pour le premier violon" -#. input/lsr/string-quartet-template-with-separate-parts.ly:151 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) msgid "vn2.ly" msgstr "vn2.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:152 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) msgid "(This is the Violin 2 part file)" -msgstr "" +msgstr "La partition pour le second violon" -#. input/lsr/string-quartet-template-with-separate-parts.ly:161 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) msgid "vla.ly" msgstr "vla.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:162 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) msgid "(This is the Viola part file)" -msgstr "" +msgstr "La partition pour l'alto" -#. input/lsr/string-quartet-template-with-separate-parts.ly:171 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) msgid "vlc.ly" msgstr "vcl.ly" -#. input/lsr/string-quartet-template-with-separate-parts.ly:172 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) msgid "(This is the Cello part file)" -msgstr "" +msgstr "La partition pour le violoncelle" -#. input/lsr/sub-dividing-beams.ly:82 (comment) +#. Documentation/snippets/subdividing-beams.ly:78 (comment) msgid "Set beam sub-group length to an eighth note" msgstr "Subdivision des ligatures à la croche" -#. input/lsr/sub-dividing-beams.ly:86 (comment) +#. Documentation/snippets/subdividing-beams.ly:83 (comment) msgid "Set beam sub-group length to a sixteenth note" msgstr "Subdivision des ligatures à la double-croche" -#. input/lsr/suppressing-warnings-for-clashing-note-columns.ly:20 (variable) +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) msgid "ignore" -msgstr "" +msgstr "ignore" + +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "NR 1.8 Texte" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "L. van Beethoven, Op. 110" -#. input/lsr/three-sided-box.ly:16 (comment) +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "Sonate pour piano No 31" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "mesures 1 à 7" + +#. Documentation/snippets/text-headword.ly:45 (comment) +msgid "RH staff" +msgstr "portée MD" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) msgid "New command to add a three sided box, with sides north, west and south" -msgstr "" +msgstr "Création d'une commande ajoutant un encadrement sur trois côtés (haut, gauche, bas)." -#. input/lsr/three-sided-box.ly:17 (comment) +#. Documentation/snippets/three-sided-box.ly:18 (comment) msgid "Based on the box-stencil command defined in scm/stencil.scm" -msgstr "" +msgstr "Basé sur la commande box-stencil définie dans le fichier scm/stencil.scm" -#. input/lsr/three-sided-box.ly:18 (comment) -msgid "Note that \\\";\\\" is used to comment a line in Scheme" -msgstr "" +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" +msgstr "Notez l'utilisation de \";;\" pour mettre une ligne en commentaire dans Scheme" -#. input/lsr/three-sided-box.ly:32 (comment) -msgid "The corresponding markup command, based on the \\box command defined " -msgstr "" +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" +msgstr "La commande markup correspondante, basée sur la définition de la" -#. input/lsr/three-sided-box.ly:33 (comment) +#. Documentation/snippets/three-sided-box.ly:34 (comment) msgid "in scm/define-markup-commands.scm" -msgstr "" +msgstr "commande \\box du fichier scm/define-markup-commands.scm" -#. input/lsr/three-sided-box.ly:45 (comment) +#. Documentation/snippets/three-sided-box.ly:46 (comment) msgid "Test it:" -msgstr "" +msgstr "Passons à la phase de test :" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "Modification définitive du style" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +msgid "Revert to default style:" +msgstr "Retour au style par défaut" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:36 (comment) +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "un seul chiifre pour la prochaine métrique" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) msgid "make the staff lines invisible on staves" -msgstr "" +msgstr "rend les barres de mesure invisibles" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:128 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) msgid "incipitDiscantus" msgstr "incipitDiscantus" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:152 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) msgid "incipitAltus" msgstr "incipitAltus" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:177 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) msgid "incipitTenor" msgstr "incipitTenor" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:203 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) msgid "incipitBassus" msgstr "incipitBassus" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:227 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) msgid "" "StaffGroup is used instead of ChoirStaff to get bar lines between systems" -msgstr "" +msgstr "Un StaffGroup au lieu d'un ChoirStaff, pour avoir les barres entre les portées" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:259 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" -msgstr "" +msgstr "Place les paroles de la basse en dehors du groupe, pour éviter que les barres" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:260 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) msgid "between the lyrics." -msgstr "" +msgstr "ne coupent le texte" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:270 (comment) -msgid "the next three instructions keep the lyrics between the barlines" -msgstr "" +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" +msgstr "les trois instructions qui suivent maintiennent les paroles entre les barres de mesure" -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:133 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) msgid "naturalizeMusic" -msgstr "" +msgstr "musiqueNaturelle" -#. input/lsr/tweaking-clef-properties.ly:113 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) msgid "The default treble clef" -msgstr "" +msgstr "La clef de sol par défaut" -#. input/lsr/tweaking-clef-properties.ly:115 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) msgid "The standard bass clef" -msgstr "" +msgstr "La clef de fa standard" -#. input/lsr/tweaking-clef-properties.ly:120 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) msgid "The baritone clef" -msgstr "" +msgstr "Clef de baryton" -#. input/lsr/tweaking-clef-properties.ly:125 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) msgid "The standard choral tenor clef" -msgstr "" +msgstr "Clef standard en musique chorale pour les ténors" -#. input/lsr/tweaking-clef-properties.ly:131 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) msgid "A non-standard clef" -msgstr "" +msgstr "Une clef hors du commun" -#. input/lsr/tweaking-clef-properties.ly:137 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) msgid "The following clef changes do not preserve" -msgstr "" +msgstr "Les modifications qui suivent ne préservent pas" -#. input/lsr/tweaking-clef-properties.ly:138 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) msgid "the normal relationship between notes and clefs:" -msgstr "" +msgstr "la relation normale entre hauteur et clef :" -#. input/lsr/tweaking-clef-properties.ly:153 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) msgid "Return to the normal clef:" -msgstr "" +msgstr "Revenons sur Terre" -#. input/lsr/using-beatlength-and-beatgrouping.ly:59 (comment) -msgid "The default in 3/4 time is to beam in three groups" -msgstr "L'usage veut que, dans une mesure à 3/4, il y ait trois regroupements" +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +msgid "Abreviations" +msgstr "Abréviations" -#. input/lsr/using-beatlength-and-beatgrouping.ly:60 (comment) -msgid "each of a quarter note length" -msgstr "sur la base de la durée d'une noire" +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "db" -#. input/lsr/using-beatlength-and-beatgrouping.ly:64 (comment) -msgid "No auto-beaming is defined for 12/16" -msgstr "Aucune règle de ligature automatique n'est définie pour 12/16" +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "dub" -#. input/lsr/using-beatlength-and-beatgrouping.ly:68 (comment) -msgid "Change time signature symbol, but retain underlying 3/4 beaming" -msgstr "La métrique change mais on garde les règles de ligatures du 3/4" +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "dubetc" -#. input/lsr/using-beatlength-and-beatgrouping.ly:72 (comment) -msgid "The 3/4 time default grouping of (1 1 1) and beatLength of 1/8" -msgstr "Regroupement par défaut du 3/4 (1 1 1) et beatLength à la croche" +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "ub" -#. input/lsr/using-beatlength-and-beatgrouping.ly:73 (comment) -msgid "are not consistent with a measureLength of 3/4, so the beams" -msgstr "ne concordent pas avec un measureLength de 3/4 ; les ligatures" +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "udb" -#. input/lsr/using-beatlength-and-beatgrouping.ly:74 (comment) -msgid "are grouped at beatLength intervals" -msgstr "sont donc générées selon le beatLength" +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "udbetc" -#. input/lsr/using-beatlength-and-beatgrouping.ly:78 (comment) -msgid "Specify beams in groups of (3 3 2 3) 1/16th notes" -msgstr "Spécification de regroupement en (3 3 2 3) doubles croches" +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "fermaTa" -#. input/lsr/using-beatlength-and-beatgrouping.ly:79 (comment) -msgid "3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply," -msgstr "3+3+2+3=11, mais 11*1/16<>3/4, beatGrouping ne peut donc s'appliquer," +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +msgid "accel" +msgstr "accelaccel" -#. input/lsr/using-beatlength-and-beatgrouping.ly:80 (comment) -msgid "and beams are grouped at beatLength (1/16) intervals" -msgstr "" -"et les ligatures sont générées sur la base de beatLength (double croche)" +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "ritar" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +msgid "Strings" +msgstr "Cordes" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "svib" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "pvib" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "mvib" -#. input/lsr/using-beatlength-and-beatgrouping.ly:85 (comment) -msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" -msgstr "Spécification de regroupement en (3 4 2 3) doubles croches" +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "sulp" -#. input/lsr/using-beatlength-and-beatgrouping.ly:86 (comment) -msgid "3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies" -msgstr "3+4+2+3=12, et 12*1/16=3/4, beatGrouping peut donc s'appliquer" +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +msgid "norm" +msgstr "norm" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:27 (variable) +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +msgid "quatre" +msgstr "quatre" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "Décalage des notes" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "shift" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "shifta" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "shiftb" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "Soufflet" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "aniente = \\\"a niente\\\"" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "aniente" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +msgid "tupletbp" +msgstr "tupletbp" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "Flag [Tête de note - Hampe]" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +msgid "noflag" +msgstr "noflag" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "Fonctions" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "Instruments" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "ViolonSolo" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "Mesure 1" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "Mesure 2" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "Mesure 3" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "Mesure 4" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "Mesure 5" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "Mesure 6" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "\\featherDurations #(ly:make-moment 2 3)" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "Mesure 7" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "Mesure 8" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "Mesure 9" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +msgid "Score" +msgstr "Partition" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +msgid "testnotes" +msgstr "testnotes" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" +msgstr "affichage du grob pour chaque tête de note :" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "\\override NoteHead #'before-line-breaking = #display-grobs" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" +msgstr "ou bien d'une seule :" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) msgid "parallelogram" msgstr "parallelogramme" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:42 (variable) +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) msgid "myNoteHeads" msgstr "tetePersonnalisee" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) msgid "normalNoteHeads" msgstr "teteNormale" -#. input/lsr/utf-8.ly:18 (comment) +#. Documentation/snippets/utf-8.ly:19 (comment) msgid "end verbatim - this comment is a hack to prevent texinfo.tex" -msgstr "" +msgstr "end verbatim - this comment is a hack to prevent texinfo.tex" -#. input/lsr/utf-8.ly:19 (comment) +#. Documentation/snippets/utf-8.ly:20 (comment) msgid "from choking on non-European UTF-8 subsets" -msgstr "" +msgstr "from choking on non-European UTF-8 subsets" -#. input/lsr/utf-8.ly:21 (comment) +#. Documentation/snippets/utf-8.ly:22 (comment) msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" -msgstr "" +msgstr "Si vous modifiez ce fichier, utilisez un éditeur supportant l'unicode, tel GVIM, GEDIT ou Emacs" -#. input/lsr/utf-8.ly:39 (comment) +#. Documentation/snippets/utf-8.ly:40 (comment) msgid "Cyrillic font" msgstr "Caractères cyrilliques" -#. input/lsr/utf-8.ly:40 (variable) +#. Documentation/snippets/utf-8.ly:41 (variable) msgid "bulgarian" msgstr "bulgare" -#. input/lsr/utf-8.ly:44 (variable) +#. Documentation/snippets/utf-8.ly:45 (variable) msgid "hebrew" -msgstr "hébreux" +msgstr "hebreux" -#. input/lsr/utf-8.ly:48 (variable) +#. Documentation/snippets/utf-8.ly:49 (variable) msgid "japanese" msgstr "japonais" -#. input/lsr/utf-8.ly:55 (comment) +#. Documentation/snippets/utf-8.ly:56 (comment) msgid "\\\"a legal song to you\\\"" -msgstr "\\\"a legal song to you\\\"" +msgstr "« bien à vous »" -#. input/lsr/utf-8.ly:56 (variable) +#. Documentation/snippets/utf-8.ly:57 (variable) msgid "portuguese" msgstr "portugais" -#. input/lsr/vertically-centered-common-lyrics.ly:19 (variable) +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +msgid "upline" +msgstr "upline" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) msgid "leftbrace" msgstr "accoladegauche" -#. input/lsr/vertically-centered-common-lyrics.ly:20 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) msgid "rightbrace" msgstr "accoladedroite" -#. input/lsr/vertically-centered-common-lyrics.ly:22 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) msgid "dropLyrics" -msgstr "" +msgstr "abaisseParoles" -#. input/lsr/vertically-centered-common-lyrics.ly:29 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) msgid "raiseLyrics" -msgstr "" +msgstr "remonteParoles" -#. input/lsr/vertically-centered-common-lyrics.ly:36 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) msgid "skipFour" -msgstr "" +msgstr "sauteQuatre" -#. input/lsr/vertically-centered-common-lyrics.ly:38 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) msgid "lyricsA" msgstr "parolesA" -#. input/lsr/vertically-centered-common-lyrics.ly:40 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) msgid "lyricsB" msgstr "parolesB" -#. input/lsr/vertically-centered-common-lyrics.ly:41 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) msgid "lyricsC" msgstr "parolesC" -#. input/lsr/vertically-centered-common-lyrics.ly:42 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) msgid "lyricsD" msgstr "parolesD" -#. input/lsr/vertically-centered-common-lyrics.ly:49 (context id) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) msgid "m" msgstr "m" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:53 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:45 (variable) -#. input/lsr/vocal-ensemble-template.ly:50 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) msgid "sopMusic" msgstr "sopranoMusique" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:56 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:48 (variable) -#. input/lsr/vocal-ensemble-template.ly:53 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) msgid "sopWords" msgstr "sopranoParoles" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:85 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:75 (context id) -#. input/lsr/vocal-ensemble-template.ly:81 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:99 (context id) msgid "women" msgstr "femmes" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:91 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:85 (context id) -#. input/lsr/vocal-ensemble-template.ly:93 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) msgid "men" msgstr "hommes" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:120 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) -#. input/lsr/vocal-ensemble-template.ly:111 (comment) -msgid "a little smaller so lyrics" -msgstr "un peu plus petit de telle sorte que les paroles" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:121 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:98 (comment) -#. input/lsr/vocal-ensemble-template.ly:112 (comment) -msgid "can be closer to the staff" -msgstr "soient plus proches de la portée" - -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:81 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) msgid "we could remove the line about this with the line below, since we want" -msgstr "" +msgstr "nous pourrions remplacer la ligne précédent par la suivante, puisque nous" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:82 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) msgid "the alto lyrics to be below the alto Voice anyway." -msgstr "" +msgstr "voulons aligner les paroles des altos sur leur mélodie" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (comment) -msgid "\\new Lyrics \\lyricsto altos \\altoWords" -msgstr "\\new Lyrics \\lyricsto altos \\altoWords" +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" +msgstr "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoParoles" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) msgid "again, we could replace the line above this with the line below." -msgstr "" +msgstr "nous pourrions aussi remplacer la ligne précédente par la suivante" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" +msgstr "\\new Lyrics \\lyricsto \\\"basses\\\" \\basseParoles" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +msgid "refrain" +msgstr "refrain" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +msgid "SoloNotes" +msgstr "SoloNotes" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +msgid "SoloLyrics" +msgstr "SoloParoles" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +msgid "SopranoNotes" +msgstr "SopranoNotes" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:93 (comment) -msgid "\\new Lyrics \\lyricsto basses \\bassWords" -msgstr "\\new Lyrics \\lyricsto basses \\bassWords" +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +msgid "SopranoLyrics" +msgstr "SopranoParoles" -#. input/lsr/volta-multi-staff.ly:16 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +msgid "BassNotes" +msgstr "BasseNotes" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +msgid "BassLyrics" +msgstr "BasseParoles" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +msgid "SoloVoice" +msgstr "SoloVoix" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +msgid "SopranoVoice" +msgstr "SopranoVoix" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +msgid "BassVoice" +msgstr "BasseVoix" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" +msgstr "les lignes qui suivent permettent de ne pas imprimer les portées vides" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) msgid "voltaMusic" msgstr "repriseMusique" +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "voltaAdLib" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "Tchaikovsky" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "Casse noisette, VII - Danse des mirlitons" + msgid "Up:" msgstr "Haut :" @@ -13467,20 +10086,3 @@ msgstr "Notes de bas de page" msgid "Table of Contents" msgstr "Table des matières" -#~ msgid "Suggestions for writing LilyPond files" -#~ msgstr "Suggestions de saisie des fichiers LilyPond" - -#~ msgid "Right-align bar numbers" -#~ msgstr "Alignement à droite des numéros de mesure" - -#~ msgid "Using the @code{break-aligned-interface}" -#~ msgstr "Utilisation de @code{break-aligned-interface}" - -#~ msgid "baritone" -#~ msgstr "baryton" - -#~ msgid "semitone" -#~ msgstr "demi-ton" - -#~ msgid "How LilyPond files work" -#~ msgstr "Organisation des fichiers LilyPond" diff --git a/Documentation/po/hu.po b/Documentation/po/hu.po new file mode 100644 index 0000000000..b4f7ffebb0 --- /dev/null +++ b/Documentation/po/hu.po @@ -0,0 +1,10469 @@ +# translation of LilyPond documentation +# Copyright (C) 2006 Han-Wen Nienhuys, Jan Nieuwenhuizen +# This file is distributed under the same license as the lilypond package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-12-06 22:26+0100\n" +"PO-Revision-Date: 2009-09-24 17:21+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#: postprocess_html.py:55 +#, python-format +msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." +msgstr "" + +#: postprocess_html.py:57 +#, python-format +msgid "" +"Your suggestions for the documentation " +"are welcome, please report errors to our bug list." +msgstr "" + +#: postprocess_html.py:69 +#, python-format +msgid "Other languages: %s." +msgstr "Más nyelvek: %s." + +#: postprocess_html.py:70 +#, python-format +msgid "About automatic language selection." +msgstr "Az automatikus nyelvválasztásról." + +#: postprocess_html.py:326 +msgid "stable-branch" +msgstr "" + +#: postprocess_html.py:328 +msgid "development-branch" +msgstr "" + +#: translations-status.py:72 +#, fuzzy +msgid "Section titles" +msgstr "Cím és más adatok megadása" + +#: translations-status.py:73 +#, python-format +msgid "Last updated %s" +msgstr "" + +#: translations-status.py:74 +msgid "Translators" +msgstr "" + +#: translations-status.py:74 +msgid "Translation checkers" +msgstr "" + +#: translations-status.py:75 +msgid "Translated" +msgstr "" + +#: translations-status.py:75 +msgid "Up to date" +msgstr "" + +#: translations-status.py:76 +msgid "Other info" +msgstr "" + +#: translations-status.py:78 +msgid "no" +msgstr "" + +#: translations-status.py:79 +msgid "not translated" +msgstr "" + +#: translations-status.py:81 +#, python-format +msgid "partially (%(p)d %%)" +msgstr "" + +#: translations-status.py:83 +#, python-format +msgid "partially translated (%(p)d %%)" +msgstr "" + +#: translations-status.py:84 translations-status.py:86 +msgid "yes" +msgstr "" + +#: translations-status.py:85 +#, fuzzy +msgid "translated" +msgstr "transparent (átlátszóság)" + +#: translations-status.py:86 translations-status.py:87 +msgid "up to date" +msgstr "" + +#: translations-status.py:88 +msgid "partially" +msgstr "" + +#: translations-status.py:89 +msgid "partially up to date" +msgstr "" + +#: translations-status.py:90 +msgid "N/A" +msgstr "" + +#: translations-status.py:91 +msgid "pre-GDP" +msgstr "" + +#: translations-status.py:92 +msgid "post-GDP" +msgstr "" + +#. -*- coding: utf-8 -*- +#. Documentation/changes.tely:183 (variable) +msgid "coloredheads" +msgstr "" + +#. Documentation/changes.tely:184 (variable) +#, fuzzy +msgid "noclef" +msgstr "kulcs" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi +msgid "Top" +msgstr "Oldal teteje" + +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "" + +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Predefined commands" +msgstr "Előre definiált parancsok" + +#. @subsubheading in Documentation/macros.itexi +msgid "Selected Snippets" +msgstr "Válogatott kódrészletek" + +#. @subsubheading in Documentation/macros.itexi +msgid "See also" +msgstr "Lásd még" + +#. @subsubheading in Documentation/macros.itexi +msgid "Known issues and warnings" +msgstr "Ismert problémák és figyelmeztetések" + +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "LilyPond tárgymutató" + +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +#, fuzzy +msgid "Music engraving" +msgstr "Kottaszedés" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +#, fuzzy +msgid "Engraving details" +msgstr "Kottaszedés" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +#, fuzzy +msgid "Ledger lines" +msgstr "szótagjelző vonal" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Automated engraving" +msgstr "Automatikus kottaszedés" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +#, fuzzy +msgid "Beauty contests" +msgstr "Kontextusok létrehozása" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music representation" +msgstr "A zene reprezentációja" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "Milyen szimbólumokat nyomtassunk?" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +#, fuzzy +msgid "Putting LilyPond to work" +msgstr "Hogyan működnek a LilyPond bemeneti fájlok?" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +#, fuzzy +msgid "Colorado" +msgstr "color (szín)" + +#. @subheading in Documentation/essay/literature.itely +#, fuzzy +msgid "Computer notation" +msgstr "Egyszerű kottázás" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "Kottaszedés" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "GNU szabad dokumentációs licenc" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "FÜGGELÉK: Hogyan használható ez a licenc más dokumentumokban" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3003 (variable) +#. Documentation/learning/fundamental.itely:3058 (variable) +#. Documentation/notation/changing-defaults.itely:3802 (variable) +msgid "padText" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3844 (variable) +msgid "tempoPadded" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "Scheme gyorstalpaló" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Introduction to Scheme" +msgstr "Bevezetés a finomhangolásba" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Scheme variables" +msgstr "Scheme gyorstalpaló" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Lists" +msgstr "Szünetek" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Return values" +msgstr "ritmusérték" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Scheme conditionals" +msgstr "Scheme gyorstalpaló" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "cond" +msgstr "akkord" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "LilyPond Scheme syntax" +msgstr "LilyPond tárgymutató" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "LilyPond variables" +msgstr "LilyPond tárgymutató" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Object properties" +msgstr "Tulajdonságok típusai" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Internal music representation" +msgstr "A zene reprezentációja" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Displaying music expressions" +msgstr "Zenei kifejezések egymásba ágyazása" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Music properties" +msgstr "Tulajdonságok típusai" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "" + +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "" + +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "" + +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "" + +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "Music functions" +msgstr "A zene reprezentációja" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "Void functions" +msgstr "Bevezetés" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "On properties" +msgstr "Tulajdonságok típusai" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "A complete example" +msgstr "Kattintható példák" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "Adapting builtin commands" +msgstr "Haladó ritmikai parancsok" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "Contexts for programmers" +msgstr "Kontextusok és ábrázolók" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "Context evaluation" +msgstr "A kontextus fogalma" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "LilyPond Scheme interfaces" +msgstr "LilyPond tárgymutató" + +#. Documentation/learning/tutorial.itely:210 (comment) +msgid "set the starting point to middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:241 (comment) +msgid "one octave above middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:257 (comment) +msgid "c is 1 staff space up, so is the c above" +msgstr "" + +#. Documentation/learning/tutorial.itely:258 (comment) +msgid "d is 2 up or 5 down, so is the d above" +msgstr "" + +#. Documentation/learning/tutorial.itely:259 (comment) +msgid "e is 3 up or 4 down, so is the e above" +msgstr "" + +#. Documentation/learning/tutorial.itely:260 (comment) +msgid "a is 6 up or 1 down, so is the a below" +msgstr "" + +#. Documentation/learning/tutorial.itely:261 (comment) +msgid "g is 5 up or 2 down, so is the g below" +msgstr "" + +#. Documentation/learning/tutorial.itely:262 (comment) +msgid "f is 4 up or 3 down, so is the f below" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely +msgid "Tutorial" +msgstr "Első lecke" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Compiling a file" +msgstr "Fájlok fordítása" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Producing output" +msgstr "A kimenet finomhangolása" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "MacOS X" +msgstr "Mac OS X" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Windows" +msgstr "Windows" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +#, fuzzy +msgid "How to write input files" +msgstr "A bemeneti fájlok jellemzői" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Simple notation" +msgstr "Egyszerű kottázás" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Pitches" +msgstr "Hangmagasság" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pitch" +msgstr "hangmagasság" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "interval" +msgstr "hangköz" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) +msgid "scale" +msgstr "skála" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "middle C" +msgstr "egyvonalas c" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave" +msgstr "oktáv" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accidental" +msgstr "módosítójel" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Durations (rhythms)" +msgstr "Ritmusérték" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beam" +msgstr "gerenda" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duration" +msgstr "időtartam" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole note" +msgstr "egész érték" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half note" +msgstr "fél érték" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter note" +msgstr "negyed érték" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dotted note" +msgstr "pontozott hang" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Rests" +msgstr "Szünetek" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rest" +msgstr "szünet" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Time signature" +msgstr "Ütemmutató" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time signature" +msgstr "ütemmutató" + +#. @subheading in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Tempo marks" +msgstr "Verziószám" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Clef" +msgstr "Kulcs" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "clef" +msgstr "kulcs" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "All together" +msgstr "Mindez együtt" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Working on input files" +msgstr "A bemeneti fájlok jellemzői" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Dealing with errors" +msgstr "Finomhangolás Scheme-mel" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +#, fuzzy +msgid "General troubleshooting tips" +msgstr "Általános tanácsok" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Some common errors" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +#, fuzzy +msgid "How to read the manuals" +msgstr "Hogyan olvassuk a tankönyvet?" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Clickable examples" +msgstr "Kattintható példák" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "" + +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/learning/fundamental.itely:3008 (variable) +msgid "violin" +msgstr "" + +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +#, fuzzy +msgid "cello" +msgstr "color (szín)" + +#. Documentation/learning/common-notation.itely:1255 (variable) +#, fuzzy +msgid "tripletA" +msgstr "triola" + +#. Documentation/learning/common-notation.itely:1256 (variable) +msgid "barA" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "izé" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +#, fuzzy +msgid "Common notation" +msgstr "Egyszerű kottázás" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Single staff notation" +msgstr "Egyszólamú lejegyzés" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Bar checks" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Accidentals and key signatures" +msgstr "Módosítás és előjegyzés" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Accidentals" +msgstr "Módosítójelek" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sharp" +msgstr "kereszt" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flat" +msgstr "bé" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double sharp" +msgstr "kettős kereszt" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double flat" +msgstr "kettős bé" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Key signatures" +msgstr "Előjegyzés" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key signature" +msgstr "előjegyzés" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major" +msgstr "dúr" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor" +msgstr "moll" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warning: key signatures and pitches" +msgstr "" +"Figyelmeztetés az előjegyzés és a módosítójelek viszonyával kapcsolatban" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "natural" +msgstr "feloldójel" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposition" +msgstr "transzponálás" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Pitch names" +msgstr "Hangnevek" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Ties and slurs" +msgstr "Átkötés és kötőív" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Ties" +msgstr "Átkötés" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tie" +msgstr "átkötés" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Slurs" +msgstr "Kötőív" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slur" +msgstr "kötőív" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Phrasing slurs" +msgstr "Frazeálóív" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrasing" +msgstr "frazeáló" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warnings: slurs vs. ties" +msgstr "Figyelmeztetés az átkötés és kötőív viszonyával kapcsolatban" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "articulation" +msgstr "artikuláció" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Articulation and dynamics" +msgstr "Artikuláció és dinamika" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Articulations" +msgstr "Artikuláció" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Fingerings" +msgstr "Ujjrend" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fingering" +msgstr "ujjrend" + +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "Dynamics" +msgstr "Dinamika" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) +msgid "dynamics" +msgstr "dinamika" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "crescendo" +msgstr "crescendo" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "decrescendo" +msgstr "decrescendo" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding text" +msgstr "Szöveges utasítások" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Automatic and manual beams" +msgstr "Automatikus és kézi gerendázás" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Advanced rhythmic commands" +msgstr "Haladó ritmikai parancsok" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Partial measure" +msgstr "Felütés" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "anacrusis" +msgstr "felütés" + +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) +msgid "Tuplets" +msgstr "n-olák" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note value" +msgstr "ritmusérték" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triplet" +msgstr "triola" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Grace notes" +msgstr "Előkék" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grace notes" +msgstr "előkék" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "acciaccatura" +msgstr "acciaccatura" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "appoggiatura" +msgstr "appoggiatura" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Multiple notes at once" +msgstr "Több hang egyszerre" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Music expressions explained" +msgstr "A zenei kifejezés fogalma" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Analogy: mathematical expressions" +msgstr "Analógia: matematikai kifejezések" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: multiple staves" +msgstr "Egyidejű zenei kifejezések: több kottasor" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polyphony" +msgstr "polifónia" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: single staff" +msgstr "Egyidejű zenei kifejezések: egy kottasor" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Multiple staves" +msgstr "Több kottasor" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Staff groups" +msgstr "Kottasor-csoport" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brace" +msgstr "kapocs" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Combining notes into chords" +msgstr "Hangok akkordba foglalása" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chord" +msgstr "akkord" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Single staff polyphony" +msgstr "Több szólam egy kottasoron belül" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Songs" +msgstr "Dalok" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Setting simple songs" +msgstr "Egyszerű dalok kottázása" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyrics" +msgstr "dalszöveg" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Aligning lyrics to a melody" +msgstr "Dalszöveg igazítása a dallamhoz" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma" +msgstr "melizma" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "extender line" +msgstr "szótagjelző vonal" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Lyrics to multiple staves" +msgstr "Azonos dalszöveg több kottasorhoz" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Final touches" +msgstr "Utolsó simítások" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Organizing pieces with variables" +msgstr "Művek szervezettebbé tétele változók segítségével" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding titles" +msgstr "Cím és más adatok megadása" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Absolute note names" +msgstr "Abszolút hangmagasság-megadás" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "After the tutorial" +msgstr "Az első lecke után" + +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:73 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:86 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#, fuzzy +msgid "singer" +msgstr "ujjrend" + +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) +#, fuzzy +msgid "vocal" +msgstr "skála" + +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) +#, fuzzy +msgid "piano" +msgstr "Szólózongora" + +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2592 (variable) +#. Documentation/learning/fundamental.itely:2654 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) +msgid "upper" +msgstr "" + +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2599 (variable) +#. Documentation/learning/fundamental.itely:2655 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) +#, fuzzy +msgid "lower" +msgstr "color (szín)" + +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) +msgid "melody" +msgstr "" + +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) +#, fuzzy +msgid "text" +msgstr "Következő:" + +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) +#, fuzzy +msgid "main" +msgstr "moll" + +#. Documentation/learning/fundamental.itely:629 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:639 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:654 (comment) +msgid "Voice \\\"1\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:659 (comment) +msgid "Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) +msgid "Main voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:684 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:708 (comment) +msgid "Bar 1" +msgstr "" + +#. Documentation/learning/fundamental.itely:719 (comment) +msgid "Bar 2" +msgstr "" + +#. Documentation/learning/fundamental.itely:720 (comment) +#, fuzzy +msgid "Voice 1 continues" +msgstr "A szólamok zenét tartalmaznak" + +#. Documentation/learning/fundamental.itely:723 (comment) +#, fuzzy +msgid "Voice 2 continues" +msgstr "A szólamok zenét tartalmaznak" + +#. Documentation/learning/fundamental.itely:898 (comment) +msgid "Voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:900 (comment) +msgid "Voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:902 (comment) +msgid "Omit Voice three" +msgstr "" + +#. Documentation/learning/fundamental.itely:903 (comment) +msgid "Voice four" +msgstr "" + +#. Documentation/learning/fundamental.itely:1002 (comment) +msgid "Default behavior or behavior after \\oneVoice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1040 (comment) +msgid "The following notes are monophonic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1042 (comment) +msgid "Start simultaneous section of three voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1044 (comment) +msgid "Continue the main voice in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) +msgid "Initiate second voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1048 (comment) +msgid "Set stems, etc., down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) +msgid "Initiate third voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) +msgid "Set stems, etc, up" +msgstr "" + +#. Documentation/learning/fundamental.itely:1103 (comment) +msgid "Initiate first voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2303 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) +msgid "one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/learning/fundamental.itely:2569 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:64 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:63 (variable) +msgid "global" +msgstr "" + +#. Documentation/learning/fundamental.itely:1244 (variable) +msgid "SopOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1247 (variable) +msgid "SopOneLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1250 (variable) +msgid "SopTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1253 (variable) +msgid "SopTwoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1260 (context id) +msgid "SopOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1269 (context id) +msgid "SopTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/fundamental.itely:2901 (variable) +msgid "keyTime" +msgstr "" + +#. Documentation/learning/fundamental.itely:1303 (variable) +msgid "SopMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) +msgid "AltoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) +msgid "TenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) +msgid "BassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) +msgid "VerseOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) +msgid "VerseTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) +msgid "VerseThree" +msgstr "" + +#. Documentation/learning/fundamental.itely:1314 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) +#, fuzzy +msgid "VerseFour" +msgstr "Verziószám" + +#. Documentation/learning/fundamental.itely:1321 (context id) +#, fuzzy +msgid "Sop" +msgstr "Oldal teteje" + +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1141 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) +msgid "Alto" +msgstr "" + +#. Documentation/learning/fundamental.itely:1330 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1143 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) +#, fuzzy +msgid "Tenor" +msgstr "Texinfo" + +#. Documentation/learning/fundamental.itely:1331 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1148 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) +msgid "Bass" +msgstr "" + +#. Documentation/learning/fundamental.itely:1475 (comment) +#, fuzzy +msgid "start of single compound music expression" +msgstr "A kotta egy összetett zenei kifejezés" + +#. Documentation/learning/fundamental.itely:1476 (comment) +msgid "start of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1478 (comment) +msgid "create RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1481 (comment) +msgid "create voice for RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1482 (comment) +msgid "start of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1485 (comment) +msgid "end of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1486 (comment) +msgid "end of RH voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1487 (comment) +msgid "end of RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1488 (comment) +msgid "create LH staff; needs two simultaneous voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1491 (comment) +msgid "create LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1493 (comment) +msgid "start of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1496 (comment) +msgid "end of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1497 (comment) +msgid "end of LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1498 (comment) +msgid "create LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1500 (comment) +msgid "start of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1503 (comment) +msgid "end of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1504 (comment) +msgid "end of LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1505 (comment) +msgid "end of LH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1506 (comment) +msgid "end of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1507 (comment) +#, fuzzy +msgid "end of single compound music expression" +msgstr "A kotta egy összetett zenei kifejezés" + +#. Documentation/learning/fundamental.itely:1726 (comment) +msgid "Wrong!" +msgstr "" + +#. Documentation/learning/fundamental.itely:1812 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) +msgid "make note heads smaller" +msgstr "" + +#. Documentation/learning/fundamental.itely:1815 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) +msgid "make note heads larger" +msgstr "" + +#. Documentation/learning/fundamental.itely:1818 (comment) +#. Documentation/learning/fundamental.itely:1993 (comment) +msgid "return to default size" +msgstr "" + +#. Documentation/learning/fundamental.itely:2282 (variable) +#. Documentation/learning/fundamental.itely:2570 (variable) +#. Documentation/notation/input.itely:1133 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) +msgid "sopranoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2289 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) +msgid "sopranoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:2293 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) +msgid "celloMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2574 (variable) +msgid "sopranoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) +msgid "altoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2581 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:79 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:78 (variable) +msgid "altoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2582 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) +msgid "tenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2586 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:85 (variable) +msgid "tenorWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2587 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) +msgid "bassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2591 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:92 (variable) +msgid "bassWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2608 (comment) +msgid "combine ChoirStaff and PianoStaff in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:2610 (context id) +#. Documentation/learning/fundamental.itely:2612 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (context id) +msgid "sopranos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2620 (context id) +#. Documentation/learning/fundamental.itely:2622 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:103 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:104 (context id) +msgid "altos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2630 (context id) +#. Documentation/learning/fundamental.itely:2632 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:113 (context id) +msgid "tenors" +msgstr "" + +#. Documentation/learning/fundamental.itely:2640 (context id) +#. Documentation/learning/fundamental.itely:2642 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:110 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:117 (context id) +msgid "basses" +msgstr "" + +#. Documentation/learning/fundamental.itely:2650 (comment) +msgid "end ChoirStaff" +msgstr "" + +#. Documentation/learning/fundamental.itely:2902 (variable) +msgid "ManualOneVoiceOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2906 (variable) +msgid "ManualOneVoiceTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2910 (variable) +msgid "ManualTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2914 (variable) +msgid "PedalOrganMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2920 (comment) +msgid "PianoStaff and Pedal Staff must be simultaneous" +msgstr "" + +#. Documentation/learning/fundamental.itely:2922 (context id) +msgid "ManualOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:2923 (comment) +#, fuzzy +msgid "set key and time signature" +msgstr "ütemmutató" + +#. Documentation/learning/fundamental.itely:2933 (comment) +msgid "end ManualOne Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2934 (context id) +msgid "ManualTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:2943 (comment) +msgid "end ManualTwo Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2944 (comment) +#, fuzzy +msgid "end PianoStaff context" +msgstr "A kívánt kontextus megkeresése" + +#. Documentation/learning/fundamental.itely:2945 (context id) +msgid "PedalOrgan" +msgstr "" + +#. Documentation/learning/fundamental.itely:2951 (comment) +msgid "end PedalOrgan Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2953 (comment) +#, fuzzy +msgid "end Score context" +msgstr "A kívánt kontextus megkeresése" + +#. Documentation/learning/fundamental.itely:2969 (variable) +#, fuzzy +msgid "hornNotes" +msgstr "Lábjegyzet" + +#. Documentation/learning/fundamental.itely:2981 (variable) +msgid "fragmentA" +msgstr "" + +#. Documentation/learning/fundamental.itely:2982 (variable) +msgid "fragmentB" +msgstr "" + +#. Documentation/learning/fundamental.itely:3001 (variable) +msgid "dolce" +msgstr "" + +#. Documentation/learning/fundamental.itely:3004 (variable) +msgid "fthenp" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely +msgid "Fundamental concepts" +msgstr "Alapfogalmak" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "How LilyPond input files work" +msgstr "Hogyan működnek a LilyPond bemeneti fájlok?" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Introduction to the LilyPond file structure" +msgstr "Bevezetés a LilyPond fájlok szerkezetébe" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Score is a (single) compound musical expression" +msgstr "A kotta egy összetett zenei kifejezés" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Nesting music expressions" +msgstr "Zenei kifejezések egymásba ágyazása" + +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ossia" +msgstr "ossia" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "On the un-nestedness of brackets and ties" +msgstr "A gerendák és ívek átfedhetik egymást" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Voices contain music" +msgstr "A szólamok zenét tartalmaznak" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "I'm hearing Voices" +msgstr "Hangzatos szólamok" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Explicitly instantiating voices" +msgstr "Szólamok kézi létrehozása" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Note columns" +msgstr "Hangoszlopok" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Voices and vocals" +msgstr "Szólamok és vokális zene" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Contexts and engravers" +msgstr "Kontextusok és ábrázolók" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Contexts explained" +msgstr "A kontextus fogalma" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Creating contexts" +msgstr "Kontextusok létrehozása" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Engravers explained" +msgstr "Az ábrázoló fogalma" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Modifying context properties" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @subsubheading in Documentation/learning/fundamental.itely +#, fuzzy +msgid "Setting context properties with @code{\\\\with}" +msgstr "Kontextusok tulajdonságainak beállítása a @code{\\with} paranccsal" + +#. @subsubheading in Documentation/learning/fundamental.itely +#, fuzzy +msgid "Setting context properties with @code{\\\\context}" +msgstr "Kontextusok tulajdonságainak beállítása a @code{\\context} paranccsal" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Adding and removing engravers" +msgstr "Ábrázolók hozzáadása és eltávolítása" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing a single context" +msgstr "Egyetlenegy kontextus módosítása" + +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ambitus" +msgstr "hangterjedelem" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing all contexts of the same type" +msgstr "Azonos típusú kontextusok módosítása" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Extending the templates" +msgstr "A sablonok kibővítése" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Soprano and cello" +msgstr "Szoprán és cselló" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Four-part SATB vocal score" +msgstr "Négyszólamú vegyeskar" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Building a score from scratch" +msgstr "Kotta létrehozása az alapoktól" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "Kevesebb gépelés változókkal és függvényekkel" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "Partitúra és szólamkották" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "" + +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) +msgid "Increase thickness of immediately following slur only" +msgstr "" + +#. Documentation/learning/tweaks.itely:744 (comment) +msgid "Revert thickness of all following slurs to default of 1.2" +msgstr "" + +#. Documentation/learning/tweaks.itely:1421 (comment) +msgid "Don't print clefs in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1423 (comment) +msgid "Don't print time signatures in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1487 (comment) +msgid "Reduce all font sizes by ~24%" +msgstr "" + +#. Documentation/learning/tweaks.itely:1554 (comment) +msgid "Reduce stem length and line spacing to match" +msgstr "" + +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) +msgid "Set details for later Text Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) +msgid "Place dynamics above staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) +msgid "Start Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2006 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) +msgid "Add Text Script" +msgstr "" + +#. Documentation/learning/tweaks.itely:2012 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) +msgid "Stop Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2072 (comment) +msgid "Place following Ottava Bracket below Text Spanners" +msgstr "" + +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +msgid "Add Dynamic Text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2079 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2161 (comment) +msgid "Cause notes to space out to accommodate text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2184 (comment) +msgid "This markup is short enough to fit without collision" +msgstr "" + +#. Documentation/learning/tweaks.itely:2188 (comment) +msgid "This is too long to fit, so it is displaced upwards" +msgstr "" + +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) +msgid "Turn off collision avoidance" +msgstr "" + +#. Documentation/learning/tweaks.itely:2199 (comment) +#, fuzzy +msgid "and turn on textLengthOn" +msgstr "A \\textLengthOn parancs" + +#. Documentation/learning/tweaks.itely:2200 (comment) +msgid "Spaces at end are honored" +msgstr "" + +#. Documentation/learning/tweaks.itely:2307 (comment) +msgid "Extend width by 1 staff space" +msgstr "" + +#. Documentation/learning/tweaks.itely:2587 (comment) +msgid "This will not work, see below" +msgstr "" + +#. Documentation/learning/tweaks.itely:2591 (comment) +msgid "This works" +msgstr "" + +#. Documentation/learning/tweaks.itely:2627 (variable) +#, fuzzy +msgid "sesquisharp" +msgstr "kereszt" + +#. Documentation/learning/tweaks.itely:2630 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "" + +#. Documentation/learning/tweaks.itely:2635 (comment) +msgid "This improves the spacing" +msgstr "" + +#. Documentation/learning/tweaks.itely:2675 (comment) +msgid "Extend width by 1 unit" +msgstr "" + +#. Documentation/learning/tweaks.itely:2677 (comment) +msgid "Align dynamics to a base line 2 units above staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) +msgid "rhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) +msgid "Start polyphonic section of four voices" +msgstr "" + +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +msgid "continuation of main voice" +msgstr "" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) +msgid "lhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1154 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) +msgid "RH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1160 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) +msgid "LH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) +msgid "Move the c2 out of the main note column so the merge will work" +msgstr "" + +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) +msgid "Stem on the d2 must be down to permit merging" +msgstr "" + +#. Documentation/learning/tweaks.itely:3368 (comment) +msgid "Reposition the c2 to the right of the merged note" +msgstr "" + +#. Documentation/learning/tweaks.itely:3379 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) +msgid "Visible tempo marking" +msgstr "" + +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) +msgid "Invisible tempo marking to lengthen fermata in MIDI" +msgstr "" + +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) +msgid "New tempo for next section" +msgstr "" + +#. Documentation/learning/tweaks.itely:3604 (variable) +msgid "emphasize" +msgstr "" + +#. Documentation/learning/tweaks.itely:3609 (variable) +#, fuzzy +msgid "normal" +msgstr "feloldójel" + +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) +msgid "SopranoMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1139 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) +#, fuzzy +msgid "Soprano" +msgstr "Szólózongora" + +#. Documentation/learning/tweaks.itely:3672 (variable) +msgid "mpdolce" +msgstr "" + +#. Documentation/learning/tweaks.itely:3679 (variable) +msgid "inst" +msgstr "" + +#. Documentation/learning/tweaks.itely:4184 (comment) +msgid "Arrange to obtain color from color-notehead procedure" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely +msgid "Tweaking output" +msgstr "A kimenet finomhangolása" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Tweaking basics" +msgstr "A finomhangolás alapjai" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Introduction to tweaks" +msgstr "Bevezetés a finomhangolásba" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Objects and interfaces" +msgstr "Objektumok és interfészek" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Naming conventions of objects and properties" +msgstr "Objektumok és tulajdonságok elnevezési konvenciói" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Tweaking methods" +msgstr "Finomhangolási módszerek" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "The Internals Reference manual" +msgstr "A belső működés referenciája" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties of layout objects" +msgstr "Elrendezési objektumok tulajdonságai" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Finding the context" +msgstr "A kívánt kontextus megkeresése" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Overriding once only" +msgstr "Felülírás csak egy alkalommal" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Reverting" +msgstr "Tulajdonság visszaállítása" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties found in interfaces" +msgstr "Interfészek tulajdonságai" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Specifying the context in lyric mode" +msgstr "Kontextus megadása dalszöveg-beviteli módban" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Types of properties" +msgstr "Tulajdonságok típusai" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Appearance of objects" +msgstr "Objektumok megjelenése" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Visibility and color of objects" +msgstr "Objektumok láthatósága és színe" + +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "stencil" +msgstr "stencil (láthatóság)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "break-visibility" +msgstr "break-visibility (láthatóság sortörések körül)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "transparent" +msgstr "transparent (átlátszóság)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "color" +msgstr "color (szín)" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Size of objects" +msgstr "Objektumok mérete" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Length and thickness of objects" +msgstr "Objektumok hossza és vastagsága" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Placement of objects" +msgstr "Objektumok elhelyezése" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Automatic behavior" +msgstr "Automatikus viselkedés" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Within-staff objects" +msgstr "Vonalrendszeren belüli objektumok" + +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely +msgid "Fingering" +msgstr "Ujjrend" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Outside-staff objects" +msgstr "Vonalrendszeren kívüli objektumok" + +#. @subheading in Documentation/learning/tweaks.itely +#, fuzzy +msgid "\\\\textLengthOn" +msgstr "A \\textLengthOn parancs" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Grob sizing" +msgstr "Grobok méretezése" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Collisions of objects" +msgstr "Objektumok ütközése" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Moving objects" +msgstr "Objektumok mozgatása" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Fixing overlapping notation" +msgstr "Egymást átfedő jelek javítása" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "padding property" +msgstr "padding (térköz) tulajdonság" + +#. @subheading in Documentation/learning/tweaks.itely +#, fuzzy +msgid "right-padding" +msgstr "left-padding (bal térköz) és right-padding (jobb térköz) tulajdonságok" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-padding property" +msgstr "staff-padding (kottasorok közötti térköz) tulajdonság" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "self-alignment-X property" +msgstr "self-alignment-X (vízszintes igazítás) tulajdonság" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-position property" +msgstr "staff-position (kottasor-pozíció) tulajdonság" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "extra-offset property" +msgstr "extra-offset (extra eltolás) tulajdonság" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "positions property" +msgstr "positions (pozíciók) tulajdonság" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "force-hshift property" +msgstr "force-hshift (kényszerített vízszintes eltolás) tulajdonság" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Real music example" +msgstr "Valós zenei példa" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Further tweaking" +msgstr "További finomhangolás" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other uses for tweaks" +msgstr "A finomhangolás más felhasználási módjai" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Tying notes across voices" +msgstr "Átkötés különböző szólamok hangjai között" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Simulating a fermata in MIDI" +msgstr "Korona szimulációja MIDI-ben" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Using variables for tweaks" +msgstr "Változók felhasználása a finomhangoláshoz" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "Stíluslapok" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other sources of information" +msgstr "További információforrások" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Avoiding tweaks with slower processing" +msgstr "A lassabban feldolgozható finomhangolások elkerülése" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Advanced tweaks with Scheme" +msgstr "Haladó finomhangolás Scheme-mel" + +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely +msgid "Templates" +msgstr "Sablonok" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Single staff" +msgstr "Egy kottasor" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes only" +msgstr "Csak hangok" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and lyrics" +msgstr "Hangok és dalszöveg" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and chords" +msgstr "Hangok és akkordok" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes, lyrics, and chords." +msgstr "Hangok, dalszöveg és akkordok" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Piano templates" +msgstr "Zongorasablonok" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo piano" +msgstr "Szólózongora" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano and melody with lyrics" +msgstr "Zongora és dallam dalszöveggel" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered lyrics" +msgstr "Zongora középre igazított dalszöveggel" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered dynamics" +msgstr "Zongora középre igazított dinamikai jelzésekkel" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet" +msgstr "Vonósnégyes" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet parts" +msgstr "Vonósnégyes szólamkották" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Vocal ensembles" +msgstr "Kórus" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score" +msgstr "Négyszólamú vegyeskar" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score and automatic piano reduction" +msgstr "Négyszólamú vegyeskar és automatikus zongorakivonat" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB with aligned contexts" +msgstr "Négyszólamú vegyeskar igazított kontextusokkal" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Hymn tunes" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Orchestral templates" +msgstr "Zenekari sablonok" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Orchestra, choir and piano" +msgstr "Zenekar, kórus és zongora" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Ancient notation templates" +msgstr "Sablonok régizenéhez" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Transcription of mensural music" +msgstr "Menzurális notációval lejegyzett művek átírása" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Gregorian transcription template" +msgstr "Gregorián tételek átírása" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#, fuzzy +msgid "Other templates" +msgstr "Zenekari sablonok" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Jazz combo" +msgstr "Dzsesszegyüttes" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "accelerando" +msgstr "crescendo" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "accent" +msgstr "módosítójel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "al niente" +msgstr "fél érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "alteration" +msgstr "időtartam" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "alto clef" +msgstr "kulcs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ascending interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "augmentation" +msgstr "Egyszerű kottázás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "augmented interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "baritone" +msgstr "artikuláció" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "bass clef" +msgstr "kulcs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "beat" +msgstr "gerenda" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "bracket" +msgstr "kapocs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "brass" +msgstr "kapocs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "breve" +msgstr "kapocs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "C clef" +msgstr "Kulcs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "central C" +msgstr "módosítójel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "compound interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "contralto" +msgstr "feloldójel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "copying music" +msgstr "A szólamok zenét tartalmaznak" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "cue-notes" +msgstr "Előkék" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dal niente" +msgstr "fél érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "didymic comma" +msgstr "Haladó ritmikai parancsok" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "diminution" +msgstr "időtartam" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "direct" +msgstr "szünet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dissonant interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dominant ninth chord" +msgstr "Hangok akkordba foglalása" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dominant seventh chord" +msgstr "Hangok akkordba foglalása" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double appoggiatura" +msgstr "appoggiatura" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double bar line" +msgstr "kettős kereszt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double dotted note" +msgstr "pontozott hang" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double time signature" +msgstr "ütemmutató" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double trill" +msgstr "kettős bé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "duplet" +msgstr "n-olák" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "eighth note" +msgstr "fél érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "embellishment" +msgstr "melizma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "engraving" +msgstr "Kottaszedés" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "expression mark" +msgstr "Verziószám" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "F clef" +msgstr "kulcs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "fifth" +msgstr "hangmagasság" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "flag" +msgstr "bé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "flageolet" +msgstr "bé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "Frenched staff" +msgstr "Egy kottasor" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "G clef" +msgstr "kulcs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "grand staff" +msgstr "Egy kottasor" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "grave" +msgstr "kapocs" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "hairpin" +msgstr "kereszt" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "half rest" +msgstr "fél érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "homophony" +msgstr "polifónia" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "inversion" +msgstr "ujjrend" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "inverted interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "leading note" +msgstr "egész érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ledger line" +msgstr "szótagjelző vonal" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "legato" +msgstr "bé" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "leger line" +msgstr "szótagjelző vonal" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ligature" +msgstr "előjegyzés" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "long appoggiatura" +msgstr "appoggiatura" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "longa" +msgstr "Dalok" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "lyric tie" +msgstr "dalszöveg" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "major interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "maxima" +msgstr "melizma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "measure" +msgstr "Felütés" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "melisma line" +msgstr "melizma" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "mensural notation" +msgstr "Egyszerű kottázás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "minor interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "modulation" +msgstr "időtartam" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "motive" +msgstr "oktáv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ninth" +msgstr "hangmagasság" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "note" +msgstr "fél érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "note head" +msgstr "ritmusérték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "note names" +msgstr "ritmusérték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "octavation" +msgstr "oktáv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "octave mark" +msgstr "oktáv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "octave marking" +msgstr "oktáv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "octave sign" +msgstr "oktáv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ornament" +msgstr "transparent (átlátszóság)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "perfect interval" +msgstr "hangköz" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "phrase" +msgstr "frazeáló" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "polymetric" +msgstr "dalszöveg" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "polymetric time signature" +msgstr "ütemmutató" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "portato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "power chord" +msgstr "akkord" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "presto" +msgstr "szünet" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "proportion" +msgstr "transzponálás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "quarter rest" +msgstr "negyed érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "quarter tone" +msgstr "negyed érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "repeat" +msgstr "triola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "score" +msgstr "skála" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "sextuplet" +msgstr "n-olák" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "shake" +msgstr "skála" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "sixth" +msgstr "hangmagasság" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "sonata" +msgstr "feloldójel" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "song texts" +msgstr "Szöveges utasítások" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "staves" +msgstr "oktáv" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "symphony" +msgstr "polifónia" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +#, fuzzy +msgid "tenor" +msgstr "moll" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "third" +msgstr "akkord" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "thirty-second note" +msgstr "pontozott hang" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "time" +msgstr "átkötés" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "transposing instrument" +msgstr "transzponálás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "triad" +msgstr "Első lecke" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "trill" +msgstr "triola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "triple meter" +msgstr "triola" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "tritone" +msgstr "transzponálás" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "tuplet" +msgstr "n-olák" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "upbeat" +msgstr "n-olák" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "whole rest" +msgstr "egész érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "whole tone" +msgstr "egész érték" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#, fuzzy +msgid "LilyPond grammar" +msgstr "LilyPond tárgymutató" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#, fuzzy +msgid "LilyPond command index" +msgstr "LilyPond tárgymutató" + +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +#, fuzzy +msgid "Musical notation" +msgstr "A zene reprezentációja" + +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +#, fuzzy +msgid "Specialist notation" +msgstr "Egyszerű kottázás" + +#. Documentation/notation/input.itely:673 (comment) +msgid "not printed" +msgstr "" + +#. Documentation/notation/input.itely:1137 (variable) +#, fuzzy +msgid "allLyrics" +msgstr "dalszöveg" + +#. Documentation/notation/input.itely:1223 (variable) +#. Documentation/notation/input.itely:1242 (variable) +#. Documentation/notation/input.itely:1279 (variable) +#. Documentation/notation/input.itely:1294 (variable) +#. Documentation/notation/spacing.itely:1555 (variable) +#. Documentation/notation/spacing.itely:1609 (variable) +#. Documentation/notation/spacing.itely:1634 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:53 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely +msgid "General input and output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Input structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Structure of a score" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Multiple scores in a book" +msgstr "Több hang egyszerre" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple output files from one input file" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Output file names" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "File structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +#, fuzzy +msgid "Titles and headers" +msgstr "Átkötés és kötőív" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Creating titles" +msgstr "Kontextusok létrehozása" + +#. @node in Documentation/notation/input.itely +msgid "Custom headers footers and titles" +msgstr "" + +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Reference to page numbers" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Table of contents" +msgstr "Tartalomjegyzék" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +#, fuzzy +msgid "Working with input files" +msgstr "A bemeneti fájlok jellemzői" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Including LilyPond files" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Different editions from one source" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +#, fuzzy +msgid "Using variables" +msgstr "Változók felhasználása a finomhangoláshoz" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using tags" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Text encoding" +msgstr "szótagjelző vonal" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Displaying LilyPond notation" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +#, fuzzy +msgid "Controlling output" +msgstr "A kimenet finomhangolása" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Extracting fragments of music" +msgstr "Menzurális notációval lejegyzett művek átírása" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Skipping corrected music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "" + +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "MIDI output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Creating MIDI files" +msgstr "Kontextusok létrehozása" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +#, fuzzy +msgid "Instrument names" +msgstr "Abszolút hangmagasság-megadás" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "MIDI block" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "What goes into the MIDI output?" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Supported in MIDI" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Unsupported in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Repeats in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Controlling MIDI dynamics" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +#, fuzzy +msgid "Dynamic marks" +msgstr "Dinamika" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Overall MIDI volume" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (i)" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (ii)" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Percussion in MIDI" +msgstr "" + +#. Documentation/notation/spacing.itely:2045 (comment) +msgid "The very low note here needs more room than 'space can" +msgstr "" + +#. Documentation/notation/spacing.itely:2046 (comment) +msgid "provide, so the distance between this staff and the next is" +msgstr "" + +#. Documentation/notation/spacing.itely:2047 (comment) +msgid "determined by 'padding." +msgstr "" + +#. Documentation/notation/spacing.itely:2050 (comment) +msgid "Here, 'space provides enough room, and there is no need to" +msgstr "" + +#. Documentation/notation/spacing.itely:2051 (comment) +msgid "compress the space (towards 'minimum-distance) to make room" +msgstr "" + +#. Documentation/notation/spacing.itely:2052 (comment) +msgid "for anything else on the page, so the distance between this" +msgstr "" + +#. Documentation/notation/spacing.itely:2053 (comment) +msgid "staff and the next is determined by 'space." +msgstr "" + +#. Documentation/notation/spacing.itely:2056 (comment) +msgid "By setting 'padding to a negative value, staves can be made to" +msgstr "" + +#. Documentation/notation/spacing.itely:2057 (comment) +msgid "collide. The lowest acceptable value for 'space is 0." +msgstr "" + +#. Documentation/notation/spacing.itely:2489 (comment) +msgid "this time the text will be closer to the staff" +msgstr "" + +#. Documentation/notation/spacing.itely:2491 (comment) +msgid "by setting outside-staff-priority to a non-number," +msgstr "" + +#. Documentation/notation/spacing.itely:2492 (comment) +msgid "we disable the automatic collision avoidance" +msgstr "" + +#. Documentation/notation/spacing.itely:2495 (comment) +msgid "now they will collide" +msgstr "" + +#. Documentation/notation/spacing.itely:2521 (comment) +msgid "the markup is too close to the following note" +msgstr "" + +#. Documentation/notation/spacing.itely:2525 (comment) +msgid "setting outside-staff-horizontal-padding fixes this" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely +msgid "Spacing issues" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Page layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\paper} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Setting paper size" +msgstr "Egy kottasor" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Automatic scaling to paper size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Horizontal spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "Other \\\\paper variables" +msgstr "Scheme gyorstalpaló" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Other @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Miscellaneous @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Score layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\layout block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\layout} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Setting the staff size" +msgstr "Egy kottasor" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +#, fuzzy +msgid "Breaks" +msgstr "szünet" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Line breaking" +msgstr "ujjrend" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page turning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Minimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Using an extra voice for breaks" +msgstr "Változók felhasználása a finomhangoláshoz" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Vertical spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing within systems" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Within-system spacing properties" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of ungrouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of grouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit staff and system positioning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical collision avoidance" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing overview" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "New spacing area" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line length" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Proportional notation" +msgstr "Egyszerű kottázás" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Fitting music onto fewer pages" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Displaying spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +#, fuzzy +msgid "Changing spacing" +msgstr "Egyetlenegy kontextus módosítása" + +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:451 (variable) +msgid "keepVoicesAlive" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:453 (comment) +msgid "Keep Voice \\\"A\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:454 (comment) +msgid "Keep Voice \\\"B\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) +#, fuzzy +msgid "accompaniment" +msgstr "módosítójel" + +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:74 (variable) +#, fuzzy +msgid "words" +msgstr "akkord" + +#. Documentation/notation/changing-defaults.itely:497 (comment) +msgid "Keep Voice \\\"melody\\\" alive for 4 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) +msgid "skip a bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2017 (comment) +msgid "default space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2023 (comment) +msgid "reduced space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2025 (comment) +msgid "this is the nested declaration" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2480 (comment) +msgid "increase the length of the tie" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2489 (comment) +msgid "increase the length of the rest bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2497 (comment) +msgid "increase the length of the hairpin" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2525 (comment) +msgid "default" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2528 (comment) +#. Documentation/notation/changing-defaults.itely:2541 (comment) +msgid "not effective alone" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2532 (comment) +#. Documentation/notation/changing-defaults.itely:2545 (comment) +msgid "effective only when both overrides are present" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2922 (comment) +msgid "Remove bar line at the end of the current line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2968 (comment) +msgid "Try to remove all key signatures" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3392 (comment) +msgid "move horizontally left" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3394 (comment) +msgid "move vertically up" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3395 (comment) +msgid "third finger" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3443 (comment) +#. Documentation/notation/changing-defaults.itely:3482 (comment) +msgid "The rehearsal mark will be centered above the Clef" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3449 (comment) +msgid "The rehearsal mark will be centered above the Time Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3456 (comment) +msgid "The rehearsal mark will be centered above the Breath Mark" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3476 (comment) +msgid "The rehearsal mark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3489 (comment) +msgid "The rehearsal mark will be centered above the Bar Line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3504 (comment) +msgid "The RehearsalMark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3511 (comment) +#. Documentation/notation/changing-defaults.itely:3527 (comment) +#. Documentation/notation/changing-defaults.itely:3534 (comment) +msgid "" +"The RehearsalMark will be aligned with the left edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3516 (comment) +msgid "" +"The RehearsalMark will be aligned with the right edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3528 (comment) +msgid "and then shifted right by 3.5 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3535 (comment) +msgid "and then shifted left by 2 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3583 (variable) +msgid "XinO" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3825 (variable) +msgid "custosNote" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely +msgid "Changing defaults" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Interpretation contexts" +msgstr "Kontextusok létrehozása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Score - the master of all contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Top-level contexts - staff containers" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Intermediate-level contexts - staves" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Bottom-level contexts - voices" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Keeping contexts alive" +msgstr "Kontextusok létrehozása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Modifying context plug-ins" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Changing context default settings" +msgstr "Azonos típusú kontextusok módosítása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Defining new contexts" +msgstr "A kívánt kontextus megkeresése" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Aligning contexts" +msgstr "A kívánt kontextus megkeresése" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Explaining the Internals Reference" +msgstr "A belső működés referenciájáról" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Navigating the program reference" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Layout interfaces" +msgstr "Objektumok és interfészek" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Determining the grob property" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Naming conventions" +msgstr "Kontextusok létrehozása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Modifying properties" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Overview of modifying properties" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The set command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "The override command" +msgstr "Előre definiált parancsok" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The tweak command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "set versus override" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Modifying alists" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Useful concepts and properties" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Input modes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Direction and placement" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Context layout order" +msgstr "Kontextusok és ábrázolók" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Distances and measurements" +msgstr "Átkötés és kötőív" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Staff symbol properties" +msgstr "Tulajdonságok típusai" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Spanners" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{spanner-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{line-spanner-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Visibility of objects" +msgstr "Objektumok láthatósága és színe" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Removing the stencil" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Making objects transparent" +msgstr "Objektumok mozgatása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Painting objects white" +msgstr "Objektumok mozgatása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Using break-visibility" +msgstr "break-visibility (láthatóság sortörések körül)" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Special considerations" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Line styles" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Rotating objects" +msgstr "Objektumok mozgatása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Rotating layout objects" +msgstr "Elrendezési objektumok tulajdonságai" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating markup" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Advanced tweaks" +msgstr "Haladó finomhangolás Scheme-mel" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Aligning objects" +msgstr "Objektumok mozgatása" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Setting X-offset and Y-offset directly" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Setting @code{X-offset} and @code{Y-offset} directly" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the side-position-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{side-position-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the self-alignment-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{self-alignment-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{aligned-on-parent} procedures" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{centered-on-parent} procedures" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the break-alignable-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{break-alignable-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Vertical grouping of grobs" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Modifying stencils" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying shapes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Modifying ties and slurs" +msgstr "Átkötés és kötőív" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Using music functions" +msgstr "Zenei kifejezések egymásba ágyazása" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Notation manual tables" +msgstr "Automatikus és kézi gerendázás" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Predefined fretboard diagrams" +msgstr "Előre definiált parancsok" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Time Signature glyphs" +msgstr "Ütemmutató" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Accidental glyphs" +msgstr "Módosítójelek" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Rest glyphs" +msgstr "Szünetek" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Dynamic glyphs" +msgstr "Dinamika" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Note head styles" +msgstr "Hangok és dalszöveg" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Text markup commands" +msgstr "Előre definiált parancsok" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "List of articulations" +msgstr "artikuláció" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Articulation scripts" +msgstr "Artikuláció" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Ornament scripts" +msgstr "Alapfogalmak" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Percussion notes" +msgstr "Verziószám" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "closure" +msgstr "color (szín)" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "interface" +msgstr "hangköz" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "All context properties" +msgstr "Kontextusok tulajdonságainak módosítása" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Layout properties" +msgstr "Tulajdonságok típusai" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Predefined type predicates" +msgstr "Előre definiált parancsok" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Scheme functions" +msgstr "Scheme gyorstalpaló" + +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +#, fuzzy +msgid "Cheat sheet" +msgstr "Stíluslapok" + +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "" + +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/usage/running.itely +msgid "Standard shell commands" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "LilyPond in chroot jail" +msgstr "" + +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "" + +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "lilypond-book" +msgstr "lilypond-book sablonok" + +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "Integrating music and text" +msgstr "Zene bevitele és a kimenet megtekintése" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "LaTeX" + +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "@LaTeX{}" +msgstr "LaTeX" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "Texinfo" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "Music fragment options" +msgstr "A zene reprezentációja" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "lilypond-book sablonok" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "xelatex" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "Sharing the table of contents" +msgstr "Tartalomjegyzék" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" +msgstr "" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +#, fuzzy +msgid "Point and click" +msgstr "Hangok és dalszöveg" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +#, fuzzy +msgid "Other formats" +msgstr "A finomhangolás más felhasználási módjai" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "" + +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +#, fuzzy +msgid "MIDI articulation" +msgstr "artikuláció" + +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +#, fuzzy +msgid "Suggestions for writing files" +msgstr "Tanácsok LilyPond bemeneti fájlok írásához" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "Általános tanácsok" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "Létező művek bevitele" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "Nagy projektek" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) +msgid "discant" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) +msgid "dot" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) +msgid "16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) +msgid "accBasson" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) +msgid "een korig 8 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) +msgid "accBandon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) +msgid "accVCello" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) +msgid "4-8-16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) +msgid "accHarmon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) +#, fuzzy +msgid "accTrombon" +msgstr "Dzsesszegyüttes" + +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) +msgid "eenkorig 4 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) +msgid "accOrgan" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) +msgid "accMaster" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) +msgid "accAccord" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) +msgid "accMusette" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) +msgid "accCeleste" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) +msgid "accOboe" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) +msgid "accClarin" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) +msgid "accPiccolo" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) +msgid "accViolin" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) +msgid "continuo" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) +msgid "bassStaff" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) +msgid "drh" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) +msgid "drl" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) +msgid "timb" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) +msgid "threeTwo" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) +msgid "threeFour" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:48 (variable) +msgid "cueWhile" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:61 (variable) +msgid "flute" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:67 (variable) +msgid "clarinet" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:76 (variable) +#, fuzzy +msgid "pianoRH" +msgstr "Szólózongora" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:81 (variable) +#, fuzzy +msgid "pianoLH" +msgstr "Szólózongora" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) +msgid "first, define a variable to hold the formatted date:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) +msgid "date" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) +msgid "d-%m-%Y\\\" (localtime (current-time)))" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) +msgid "use it in the title block:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) +msgid "and use it in a \\markup block:" +msgstr "" + +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) +msgid "voiceFive" +msgstr "" + +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +#, fuzzy +msgid "graceNotes" +msgstr "előkék" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) +msgid "Default layout:" +msgstr "" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) +msgid "Reducing the minimum space below the staff and above the lyrics:" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) +msgid "Increase the size of the bar number by 2" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) +msgid "Print a bar number every second measure" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) +msgid "Center-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) +msgid "Left-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) +msgid "the RehearsalMark will be centered above the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) +msgid "" +"the RehearsalMark will be aligned with the left edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) +msgid "" +"the RehearsalMark will be aligned with the right edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) +msgid "and then shifted right by one unit." +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) +msgid "upperStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:49 (comment) +msgid "\\break % 1 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:60 (comment) +msgid "\\break %2 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:72 (comment) +msgid "\\break % 3 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:87 (comment) +msgid "\\break % 4 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) +msgid "\\break % 5 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) +msgid "\\break % 6 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) +msgid "\\break % 7 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:126 (comment) +msgid "\\break % 8 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:129 (comment) +msgid "\\break % 12 (32*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) +msgid "lowerStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:144 (comment) +msgid "\\break % 2 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:149 (comment) +msgid "\\break % 4 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:188 (comment) +msgid "\\break % 9 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:190 (comment) +msgid "lig" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:194 (comment) +msgid "\\break % 11 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:205 (comment) +msgid "\\break % 12 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:34 (context id) +#, fuzzy +msgid "cantus" +msgstr "hangterjedelem" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) +msgid "incipit" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) +msgid "tight spacing" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +msgid "turn off bar lines" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) +msgid "need this extra \\skip such that clef change comes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) +msgid "after bar line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) +msgid "CHECK: no effect?" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) +msgid "turn bar lines on again" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) +msgid "FIXME: setting printKeyCancellation back to #t must not" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) +msgid "occur in the first bar after the incipit. Dto. for forceClef." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) +msgid "Therefore, we need an extra \\skip." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) +#, fuzzy +msgid "the actual music" +msgstr "A szólamok zenét tartalmaznak" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) +msgid "let finis bar go through all staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) +msgid "finis bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) +msgid "discantusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) +msgid "two bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) +msgid "eight bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) +msgid "one bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) +msgid "discantusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) +msgid "altusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) +msgid "seven bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) +#, fuzzy +msgid "altusLyrics" +msgstr "dalszöveg" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) +#, fuzzy +msgid "tenorNotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) +msgid "four bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) +msgid "tenorLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) +msgid "bassusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) +msgid "bassusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) +msgid "choirStaff" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) +msgid "no bars in staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) +msgid "incipit should not start with a start delimiter" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) +#, fuzzy +msgid "no slurs" +msgstr "kötőív" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) +msgid "Comment in the below \\\"\\remove\\\" command to allow line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) +msgid "breaking also at those barlines where a note overlaps" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) +msgid "into the next bar. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) +msgid "short example score, but especially for large scores, you" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) +msgid "will typically yield better line breaking and thus improve" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) +msgid "overall spacing if you comment in the following command." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) +msgid "\\remove \\\"Forbid_line_break_engraver\\\"" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +msgid "tick" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +msgid "Use markup to center the chant on the page" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +msgid "centered" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) +#, fuzzy +msgid "End score" +msgstr "skála" + +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) +msgid "End markup" +msgstr "" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) +msgid "fragment" +msgstr "" + +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) +#, fuzzy +msgid "slurNotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +#, fuzzy +msgid "Default behavior" +msgstr "Automatikus viselkedés" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) +msgid "Set default beaming for all staves" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) +msgid "Modify beaming for just this staff" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) +msgid "Inherit beaming from Score context" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) +msgid "Modify beaming for this voice only" +msgstr "" + +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) +msgid "rhythm 2-3-2" +msgstr "" + +#. Documentation/snippets/book-parts.ly:22 (comment) +msgid "book paper, which is inherited by all children bookparts" +msgstr "" + +#. Documentation/snippets/book-parts.ly:25 (comment) +msgid "Page footer: add a different part-tagline at part last page" +msgstr "" + +#. Documentation/snippets/book-parts.ly:29 (comment) +msgid "Copyright header field only on book first page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:33 (comment) +msgid "Part tagline header field only on each part last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:37 (comment) +msgid "Tagline header field only on book last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:44 (comment) +msgid "book header, which is inherited by the first bookpart" +msgstr "" + +#. Documentation/snippets/book-parts.ly:53 (comment) +msgid "a different page breaking function may be used on each part" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:20 (comment) +msgid "this bar contains no \\breathe" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:22 (comment) +#, fuzzy +msgid "Modern notation:" +msgstr "Egyszerű kottázás" + +#. Documentation/snippets/breathing-signs.ly:23 (comment) +msgid "by default, \\breathe uses the rcomma, just as if saying:" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:24 (comment) +msgid "" +"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" +"\\\")" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:27 (comment) +msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:28 (comment) +msgid "N.B.: must use Staff context here, since we start a Voice below" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:32 (comment) +msgid "vee" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) +msgid "construct the symbol" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) +msgid "set the breathe mark back to normal" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) +msgid "hairpinWithCenteredText" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) +msgid "hairpinMolto" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) +msgid "hairpinMore" +msgstr "" + +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) +msgid "smallFlageolet" +msgstr "" + +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +#, fuzzy +msgid "Default setting" +msgstr "Automatikus viselkedés" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +msgid "The following is only here to print the names of the" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +msgid "chords styles; it can be removed if you do not need to" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) +msgid "print them." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:182 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) +msgid "{" +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:184 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) +msgid "}" +msgstr "" + +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +#, fuzzy +msgid "sustainNotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/chant-or-psalms-notation.ly:35 (variable) +#, fuzzy +msgid "stemOn" +msgstr "stencil (láthatóság)" + +#. Documentation/snippets/chant-or-psalms-notation.ly:36 (variable) +msgid "stemOff" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) +msgid "modify maj9 and 6(add9)" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) +msgid "Exception music is chords with markups" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) +msgid "chExceptionMusic" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) +msgid "Convert music to list and prepend to existing exceptions." +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) +msgid "chExceptions" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) +msgid "theMusic" +msgstr "" + +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +#, fuzzy +msgid "myChords" +msgstr "akkord" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +#, fuzzy +msgid "\\break" +msgstr "gerenda" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +#, fuzzy +msgid "sop" +msgstr "Oldal teteje" + +#. Documentation/snippets/clip-systems.ly:65 (variable) +msgid "origScore" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:83 (comment) +msgid "Each clip-region is a (START . END) pair" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:84 (comment) +msgid "where both are rhythmic-locations." +msgstr "" + +#. Documentation/snippets/clip-systems.ly:86 (comment) +msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:87 (comment) +msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) +msgid "Association list of pitches to colors." +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) +msgid "Compare pitch and alteration (not octave)." +msgstr "" + +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) +msgid "piuF" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) +msgid "musicUp" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) +msgid "musicDown" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" +msgstr "" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) +msgid "parenF" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) +msgid "the hidden measure and bar line" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) +msgid "Set global properties of fret diagram" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) +#, fuzzy +msgid "mel" +msgstr "melizma" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) +msgid "C major for guitar, no barre, using defaults" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) +msgid "terse style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) +msgid "size 1.0" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) +msgid "standard size" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) +msgid "no barre, fret label down or left, small mute label font" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) +msgid "larger dots, centered dots, fewer frets" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) +msgid "label below string" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +#, fuzzy +msgid "notes." +msgstr "Lábjegyzet" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +#, fuzzy +msgid "Ambitus engraving logics" +msgstr "Automatikus kottaszedés" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +msgid "add FretBoards for the Cuatro" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) +msgid "Note: This section could be put into a separate file" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:86 (comment) +msgid "predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (comment) +msgid "and \\included into each of your compositions" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +msgid "cuatroTuning" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +msgid "dSix" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +#, fuzzy +msgid "dMajor" +msgstr "dúr" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) +msgid "aMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:94 (variable) +msgid "dMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:95 (variable) +#, fuzzy +msgid "gMajor" +msgstr "dúr" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:113 (comment) +msgid "end of potential include file /predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:118 (variable) +msgid "primerosNames" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:122 (variable) +msgid "primeros" +msgstr "" + +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) +msgid "baseMelody" +msgstr "" + +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) +msgid "Must be lower than the actual number of staff lines" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) +msgid "fixA" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) +msgid "fixB" +msgstr "" + +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:21 (comment) +msgid "new voice ( = \\voiceOne), hidden" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:23 (comment) +msgid "attach glissando to note heads" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:28 (comment) +msgid "original voice with chords rearranged so that" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:29 (comment) +msgid "glissando is attached to a & c" +msgstr "" + +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) +msgid "" +"Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +#, fuzzy +msgid "mycresc" +msgstr "crescendo" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +#, fuzzy +msgid "mydecresc" +msgstr "decrescendo" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:61 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:62 (variable) +msgid "crpoco" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:67 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:68 (variable) +#, fuzzy +msgid "cresc" +msgstr "crescendo" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:73 (variable) +msgid "dim" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:78 (variable) +#, fuzzy +msgid "decresc" +msgstr "decrescendo" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) +msgid "PostScript is a registered trademark of Adobe Systems Inc." +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) +msgid "sample music" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) +msgid "topVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) +msgid "botVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) +msgid "hoom" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) +msgid "pah" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) +msgid "setup for Request->Element conversion. Guru-only" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:209 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:222 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:278 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:292 (variable) +msgid "MyStaff" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:139 (comment) +msgid "explicitly set instrumentName, so we don't get" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "weird effects when doing instrument names for" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +#, fuzzy +msgid "piano staves" +msgstr "Zongorasablonok" + +#. Documentation/snippets/engravers-one-by-one.ly:150 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:236 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:249 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:262 (variable) +msgid "MyVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:165 (comment) +msgid "must come before all" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:175 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +#, fuzzy +msgid "extendOn" +msgstr "szótagjelző vonal" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:40 (variable) +msgid "centermarkup" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:96 (comment) +msgid "Text indicators" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:97 (variable) +msgid "abanico" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:98 (variable) +msgid "rasgueaso" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:99 (variable) +msgid "alzapua" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:101 (comment) +msgid "Finger stroke symbols" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:102 (variable) +msgid "strokeUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:112 (variable) +msgid "strokeDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:122 (comment) +msgid "Golpe symbol" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:123 (variable) +msgid "golpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:137 (variable) +msgid "strokeUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:138 (variable) +msgid "iUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:140 (comment) +msgid "Strokes for all fingers" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:141 (variable) +#, fuzzy +msgid "pUp" +msgstr "Fel:" + +#. Documentation/snippets/flamenco-notation.ly:142 (variable) +msgid "pDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:143 (variable) +#, fuzzy +msgid "iUp" +msgstr "Fel:" + +#. Documentation/snippets/flamenco-notation.ly:144 (variable) +msgid "iDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:145 (variable) +#, fuzzy +msgid "mUp" +msgstr "Fel:" + +#. Documentation/snippets/flamenco-notation.ly:146 (variable) +msgid "mDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:147 (variable) +#, fuzzy +msgid "aUp" +msgstr "Fel:" + +#. Documentation/snippets/flamenco-notation.ly:148 (variable) +msgid "aDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:149 (variable) +#, fuzzy +msgid "xUp" +msgstr "Fel:" + +#. Documentation/snippets/flamenco-notation.ly:150 (variable) +msgid "xDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:153 (comment) +msgid "Just handy :)" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:154 (variable) +#, fuzzy +msgid "tupletOff" +msgstr "n-olák" + +#. Documentation/snippets/flamenco-notation.ly:159 (variable) +#, fuzzy +msgid "tupletsOff" +msgstr "n-olák" + +#. Documentation/snippets/flamenco-notation.ly:164 (variable) +#, fuzzy +msgid "tupletsOn" +msgstr "n-olák" + +#. Documentation/snippets/flamenco-notation.ly:169 (variable) +msgid "headsOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:175 (variable) +msgid "headsOn" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) +msgid "Example 1" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) +msgid "Example 2" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) +msgid "Example 3" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) +msgid "Example 4" +msgstr "" + +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) +#, fuzzy +msgid "slap" +msgstr "kereszt" + +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +#, fuzzy +msgid "example" +msgstr "Sablonok" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) +msgid "" +"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" +"msg00215.html" +msgstr "" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +#, fuzzy +msgid "lyr" +msgstr "dalszöveg" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) +msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) +msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) +msgid "These chords will be in normal orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) +#, python-format +msgid "110% of default size" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) +msgid "Double barre used to test barre function" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) +msgid "C major for guitar, with capo on third fret" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) +msgid "simple D chord, large top fret thickness" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) +msgid "These chords will be in landscape orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) +msgid "These chords will be in opposing-landscape orientation" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:49 (comment) +msgid "Make a blank new fretboard table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:52 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:55 (comment) +msgid "Add a chord to custom-fretboard-table-one" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:61 (comment) +msgid "Add a chord to custom-fretboard-table-two" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +#, fuzzy +msgid "fingering orientations" +msgstr "Egymást átfedő jelek javítása" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +#, fuzzy +msgid "ssnor" +msgstr "moll" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +#, fuzzy +msgid "rit" +msgstr "triola" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +#, fuzzy +msgid "dimin" +msgstr "időtartam" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) +msgid "this moves them up one staff space from the default position" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) +msgid "set up grids" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) +msgid "set the grid interval to one quarter note" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) +msgid "this moves them to the right half a staff space" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) +msgid "hides staff and notes so that only the grid lines are visible" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) +msgid "dummy notes to force regular note spacing" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) +msgid "center grid lines horizontally below note heads" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +msgid "set line length and positioning:" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +msgid "two staff spaces above center line on hidden staff" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) +msgid "to four spaces below center line on visible staff" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) +msgid "drum" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +msgid "Solution 1: Using a simple markup with a particular halign value" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) +msgid "etc. will have no effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) +msgid "semppMarkup" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +msgid "Solution 2: Using a dynamic script & shifting with" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +msgid "\\once \\override ... #'X-offset = .." +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) +msgid "Drawback: \\once \\override needed for every invocation" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) +msgid "semppK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +msgid "Solution 3: Padding the dynamic script so the center-alignment" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +msgid "puts it at the correct position" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) +msgid "" +"Drawback: the padding really reserves the space, nothing else can be there" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) +msgid "semppT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +msgid "other stuff there => collisions" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) +msgid "same alignment as without the additional text" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) +msgid "semppM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) +msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) +msgid "semppG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) +msgid "Drawback: One needs to set DynamicText #'X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) +msgid "semppMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) +msgid "s" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) +#, fuzzy +msgid "sMarkup" +msgstr "kereszt" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) +msgid "sK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) +msgid "sT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) +msgid "sM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) +msgid "sG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) +msgid "sMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) +msgid "Setting to ##f (false) gives the same result" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) +msgid "harmonies" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) +msgid "THIS LINE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) +msgid "HERE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:50 (variable) +#, fuzzy +msgid "Timeline" +msgstr "Ütemmutató" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +#, fuzzy +msgid "Start score" +msgstr "skála" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +msgid "Start pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +msgid "Start Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +msgid "End Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +msgid "End Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +msgid "Start Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +msgid "End Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +#, fuzzy +msgid "End pianostaff" +msgstr "Egy kottasor" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +msgid "don't indent first system" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +msgid "shorten line length to suit music" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) +msgid "discantusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) +msgid "altusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) +#, fuzzy +msgid "two measures" +msgstr "Felütés" + +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) +msgid "tenorIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) +msgid "bassusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:265 (comment) +msgid "no bar lines in staves or lyrics" +msgstr "" + +#. Documentation/snippets/incipit.ly:268 (comment) +msgid "the next two instructions keep the lyrics between the bar lines" +msgstr "" + +#. Documentation/snippets/incipit.ly:279 (comment) +msgid "breaking also at those bar lines where a note overlaps" +msgstr "" + +#. Documentation/snippets/incipit.ly:280 (comment) +msgid "into the next measure. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) +msgid "tuning" +msgstr "" + +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) +msgid "#(set-global-staff-size 16)" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) +msgid "Some macros %%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) +#, fuzzy +msgid "sl" +msgstr "kötőív" + +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) +msgid "nsl" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) +msgid "crOn" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) +msgid "crOff" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) +msgid "insert chord name style stuff here." +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) +msgid "jazzChords" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) +msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) +msgid "Key" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) +msgid "############ Horns ############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) +msgid "------ Trumpet ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) +#, fuzzy +msgid "trpt" +msgstr "triola" + +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) +msgid "trpHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) +#, fuzzy +msgid "trumpet" +msgstr "triola" + +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) +msgid "------ Alto Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) +msgid "altoHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) +msgid "altoSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) +msgid "------ Baritone Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) +msgid "bari" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) +msgid "bariHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) +msgid "bariSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) +msgid "------ Trombone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) +msgid "tbone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) +msgid "tboneHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) +msgid "trombone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) +msgid "############ Rhythm Section #############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) +msgid "------ Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) +msgid "gtr" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) +msgid "gtrHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) +msgid "------ Piano ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) +msgid "rhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) +msgid "rhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) +msgid "lhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) +msgid "lhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) +msgid "PianoRH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) +msgid "PianoLH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) +msgid "------ Bass Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) +msgid "------ Drums ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) +msgid "drumContents" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) +#, python-format +msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) +#, fuzzy +msgid "horns" +msgstr "akkord" + +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) +msgid "altosax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) +#, fuzzy +msgid "barichords" +msgstr "akkord" + +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) +msgid "barisax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) +#, fuzzy +msgid "chords" +msgstr "akkord" + +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "" + +#. Documentation/snippets/makam-example.ly:55 (comment) +msgid "Initialize makam settings" +msgstr "" + +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) +msgid "bassfigures" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) +msgid "from upper staff-line (position 2) to center (position 0)" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) +msgid "from center to one above center (position 1)" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) +msgid "speakOn" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) +msgid "speakOff" +msgstr "" + +#. Documentation/snippets/markup-lines.ly:23 (comment) +msgid "Candide, Voltaire" +msgstr "" + +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) +msgid "the final bar line is not interrupted" +msgstr "" + +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) +msgid "normalPos" +msgstr "" + +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) +msgid "dashPlus" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) +msgid "Set tuplets to be extendable..." +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) +msgid "...to cover all items up to the next note" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) +msgid "...or to cover just whitespace" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +#, fuzzy +msgid "space for instrumentName" +msgstr "transzponálás" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) +msgid "fluteMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) +msgid "clarinetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) +msgid "trumpetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +#, fuzzy +msgid "hornMusic" +msgstr "akkord" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) +msgid "percussionMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) +msgid "altoIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) +msgid "altoIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) +#, fuzzy +msgid "altoILyrics" +msgstr "dalszöveg" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) +#, fuzzy +msgid "altoIILyrics" +msgstr "dalszöveg" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) +msgid "pianoRHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) +msgid "pianoLHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) +msgid "violinIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) +msgid "violinIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) +msgid "violaMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:146 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:149 (comment) +msgid "applies to split up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:156 (comment) +msgid "applies to down stems" +msgstr "" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) +msgid "stick" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) +msgid "Permit line breaks within tuplets" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) +msgid "Allow beams to be broken at line breaks" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) +msgid "Insert a manual line break within a tuplet" +msgstr "" + +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) +msgid "pedal" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) +msgid "tab" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) +msgid "They can be moved with an override" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) +msgid "A value of 0 is the default position;" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) +msgid "the following trick moves the rest to the center line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) +msgid "They remain separated even in empty measures" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) +msgid "This brings them together even though there are two voices" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) +msgid "Set segno sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) +msgid "\\once \\override Score.RehearsalMark #'font-size = #3" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) +msgid "Set coda sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) +msgid "Should Coda be on anew line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) +msgid "Coda NOT on new line: use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) +msgid "Coda on new line: DON'T use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) +msgid "\\noBreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) +msgid "" +"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " +"lines." +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) +#, fuzzy +msgid "text line-aligned" +msgstr "A kontextus fogalma" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) +msgid "==================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) +msgid "Move text to the desired position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) +msgid "| s1*0^\\markup { D.S. al Coda } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) +#, fuzzy +msgid "text center-aligned" +msgstr "szótagjelző vonal" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) +msgid "====================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) +msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) +msgid "text and symbols center-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) +msgid "===============================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) +msgid "" +"Move text to the desired position and tweak spacing for optimum text " +"alignment" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) +msgid "Increasing the unfold counter will expand the staff-free space" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) +msgid "Resume bar count and show staff lines again" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) +msgid "Should Coda be on new line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) +msgid "Coda NOT on new line: DON'T use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) +msgid "Coda on new line: use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) +msgid "Show up, you clef and key!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) +msgid "Set coda sign as rehearsal mark and adjust size and position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) +msgid "" +"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" +"position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) +msgid "Coda NOT on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) +msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) +msgid "Coda on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) +msgid "The coda" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) +msgid "Prevent bar numbers at the end of a line and permit them elsewhere" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) +msgid "Draw a box round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) +msgid "Draw a circle round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) +msgid "Rehearsal marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) +msgid "Bassklarinette" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) +msgid "Perkussion" +msgstr "" + +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:24 (context id) +#, fuzzy +msgid "voc" +msgstr "skála" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) +msgid "quoteTest" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) +msgid "french horn" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) +msgid "quoteMe" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) +#, fuzzy +msgid "original" +msgstr "Első lecke" + +#. Documentation/snippets/recorder-fingering-chart.ly:38 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) +#, fuzzy +msgid "startAcciaccaturaMusic" +msgstr "acciaccatura" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) +#, fuzzy +msgid "stopAcciaccaturaMusic" +msgstr "acciaccatura" + +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) +msgid "To use the setting globally, uncomment the following line:" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) +msgid "\\override VerticalAxisGroup #'remove-first = ##t" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) +msgid "To use the setting globally, comment this line," +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) +msgid "uncomment the line in the \\layout block above" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) +msgid "Default beaming" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) +msgid "Set new values for beam endings" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) +msgid "Macro to print single slash" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) +#, fuzzy +msgid "rs" +msgstr "szünet" + +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) +msgid "Function to print a specified number of slashes" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) +msgid "comp" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +#, fuzzy +msgid "sopranonotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +#, fuzzy +msgid "sopranowords" +msgstr "Szólózongora" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +#, fuzzy +msgid "altonotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +#, fuzzy +msgid "altowords" +msgstr "akkord" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +#, fuzzy +msgid "tenornotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +#, fuzzy +msgid "tenorwords" +msgstr "Lábjegyzet" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +#, fuzzy +msgid "bassnotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +#, fuzzy +msgid "basswords" +msgstr "akkord" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) +msgid "NoStem" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) +msgid "NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) +msgid "ZeroBeam" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) +msgid "staffTabLine" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated with a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) +msgid "" +"disable the following line to see the the noteheads while writing the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) +msgid "The beam between 8th-notes is used to draw the push-line" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) +msgid "" +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) +msgid "2. uncomment the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) +msgid "3. compile" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) +msgid "" +"In the score-picture click on the position the push- or pull-part starts" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) +msgid "(on the noteHead, the cursor will change to a hand-icon)." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) +msgid "The cursor in the source code will jump just at this position." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) +msgid "a) If a push-part starts there, replace the 'c' by an 'e['" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) +msgid "b) If a pull-part starts there, replace the 'c' by an 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) +msgid "" +"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " +"e] s s)" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) +msgid "10. re-enable the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) +msgid "1. Place a copy of the piano melody below" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) +msgid "" +"2. Separate piano melody into pull- and push-parts according to the " +"staffTabLine you've already made" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) +#, fuzzy +msgid "Tips:" +msgstr "Átkötés" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) +msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) +msgid "AccordionTabTwoCBesDur" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) +msgid "pull 1" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) +msgid "push 2" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) +msgid "pull 3" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) +msgid "2 r8 }" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) +msgid "1. Place a copy of the piano melody above" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) +msgid "change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) +msgid "4/4 - tact. How many beats per bar" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) +msgid "The following line has to be adjusted O-F-T-E-N." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) +msgid "staffVoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) +msgid "staffAccordionMel" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) +msgid "BassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) +msgid "LyricBassRhythmI" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) +msgid "staffBassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) +msgid "" +"This is not a RhythmicStaff because it must be possible to append lyrics." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) +msgid "x.y" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated by a grid" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" +msgstr "" + +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +#, fuzzy +msgid "notes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +#, fuzzy +msgid "trillFlat" +msgstr "triola" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +#, fuzzy +msgid "LH staff" +msgstr "Egy kottasor" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) +msgid "verseI" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) +msgid "verseII" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) +msgid "staffMelody" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) +msgid "voiceMelody" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:38 (variable) +#, fuzzy +msgid "trompette" +msgstr "triola" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "" + +#. Documentation/snippets/stemlets.ly:36 (comment) +msgid "N.B. use Score.Stem to set for the whole score." +msgstr "" + +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) +msgid "violinOne" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) +msgid "violinTwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) +msgid "viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) +msgid "piece.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) +msgid "(This is the global definitions file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) +msgid "Violinone" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) +msgid "*********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) +msgid "Violintwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) +msgid "Viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) +msgid "Cello" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) +msgid "**********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) +msgid "These are the other files you need to save on your computer" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) +msgid "score.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) +msgid "(This is the main file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) +#, python-format +msgid "" +"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " +"separate file" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) +msgid "{ Uncomment this block when using separate files" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) +msgid "vn1.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) +msgid "(This is the Violin 1 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) +msgid "vn2.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) +msgid "(This is the Violin 2 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) +msgid "vla.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) +msgid "(This is the Viola part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) +msgid "vlc.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) +msgid "(This is the Cello part file)" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:78 (comment) +msgid "Set beam sub-group length to an eighth note" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:83 (comment) +msgid "Set beam sub-group length to a sixteenth note" +msgstr "" + +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) +#, fuzzy +msgid "ignore" +msgstr "moll" + +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "" + +#. Documentation/snippets/text-headword.ly:45 (comment) +#, fuzzy +msgid "RH staff" +msgstr "Egy kottasor" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) +msgid "New command to add a three sided box, with sides north, west and south" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:18 (comment) +msgid "Based on the box-stencil command defined in scm/stencil.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:34 (comment) +msgid "in scm/define-markup-commands.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:46 (comment) +msgid "Test it:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +msgid "Revert to default style:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) +msgid "make the staff lines invisible on staves" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) +msgid "incipitDiscantus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) +msgid "incipitAltus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) +msgid "incipitTenor" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) +msgid "incipitBassus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) +msgid "" +"StaffGroup is used instead of ChoirStaff to get bar lines between systems" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) +msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) +msgid "between the lyrics." +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" +msgstr "" + +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) +#, fuzzy +msgid "naturalizeMusic" +msgstr "feloldójel" + +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) +msgid "The default treble clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) +msgid "The standard bass clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) +msgid "The baritone clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) +msgid "The standard choral tenor clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) +msgid "A non-standard clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) +msgid "The following clef changes do not preserve" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) +msgid "the normal relationship between notes and clefs:" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) +msgid "Return to the normal clef:" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +#, fuzzy +msgid "Abreviations" +msgstr "Artikuláció" + +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +#, fuzzy +msgid "accel" +msgstr "módosítójel" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +#, fuzzy +msgid "Strings" +msgstr "Dalok" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +#, fuzzy +msgid "norm" +msgstr "moll" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +#, fuzzy +msgid "quatre" +msgstr "negyed érték" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +#, fuzzy +msgid "tupletbp" +msgstr "n-olák" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +#, fuzzy +msgid "noflag" +msgstr "bé" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +#, fuzzy +msgid "Score" +msgstr "akkord" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +#, fuzzy +msgid "testnotes" +msgstr "Előkék" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) +msgid "parallelogram" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +msgid "myNoteHeads" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) +msgid "normalNoteHeads" +msgstr "" + +#. Documentation/snippets/utf-8.ly:19 (comment) +msgid "end verbatim - this comment is a hack to prevent texinfo.tex" +msgstr "" + +#. Documentation/snippets/utf-8.ly:20 (comment) +msgid "from choking on non-European UTF-8 subsets" +msgstr "" + +#. Documentation/snippets/utf-8.ly:22 (comment) +msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" +msgstr "" + +#. Documentation/snippets/utf-8.ly:40 (comment) +msgid "Cyrillic font" +msgstr "" + +#. Documentation/snippets/utf-8.ly:41 (variable) +msgid "bulgarian" +msgstr "" + +#. Documentation/snippets/utf-8.ly:45 (variable) +msgid "hebrew" +msgstr "" + +#. Documentation/snippets/utf-8.ly:49 (variable) +msgid "japanese" +msgstr "" + +#. Documentation/snippets/utf-8.ly:56 (comment) +msgid "\\\"a legal song to you\\\"" +msgstr "" + +#. Documentation/snippets/utf-8.ly:57 (variable) +msgid "portuguese" +msgstr "" + +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +#, fuzzy +msgid "upline" +msgstr "n-olák" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) +#, fuzzy +msgid "leftbrace" +msgstr "kapocs" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) +#, fuzzy +msgid "rightbrace" +msgstr "kapocs" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) +#, fuzzy +msgid "dropLyrics" +msgstr "dalszöveg" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) +msgid "raiseLyrics" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) +msgid "skipFour" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) +#, fuzzy +msgid "lyricsA" +msgstr "dalszöveg" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) +#, fuzzy +msgid "lyricsB" +msgstr "dalszöveg" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) +#, fuzzy +msgid "lyricsC" +msgstr "dalszöveg" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) +#, fuzzy +msgid "lyricsD" +msgstr "dalszöveg" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) +msgid "m" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) +msgid "sopMusic" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) +msgid "sopWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:99 (context id) +msgid "women" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) +msgid "men" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) +msgid "we could remove the line about this with the line below, since we want" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) +msgid "the alto lyrics to be below the alto Voice anyway." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) +msgid "again, we could replace the line above this with the line below." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +#, fuzzy +msgid "refrain" +msgstr "Kontextusok létrehozása" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +#, fuzzy +msgid "SoloNotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +#, fuzzy +msgid "SoloLyrics" +msgstr "dalszöveg" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +#, fuzzy +msgid "SopranoNotes" +msgstr "Lábjegyzet" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +#, fuzzy +msgid "SopranoLyrics" +msgstr "Szólózongora" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +msgid "BassNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +#, fuzzy +msgid "BassLyrics" +msgstr "dalszöveg" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +msgid "SoloVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +#, fuzzy +msgid "SopranoVoice" +msgstr "Szólózongora" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +msgid "BassVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" +msgstr "" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) +msgid "voltaMusic" +msgstr "" + +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "" + +msgid "Up:" +msgstr "Fel:" + +msgid "Next:" +msgstr "Következő:" + +msgid "Previous:" +msgstr "Előző:" + +msgid "Appendix " +msgstr "Függelék" + +msgid "Footnotes" +msgstr "Lábjegyzet" + +msgid "Table of Contents" +msgstr "Tartalomjegyzék" + +#, fuzzy +#~ msgid "refrainnotesB" +#~ msgstr "Kontextusok létrehozása" + +#, fuzzy +#~ msgid "set time signature and key" +#~ msgstr "ütemmutató" + +#, fuzzy +#~ msgid "the direction." +#~ msgstr "Más dokumentációk" + +#~ msgid "Preface" +#~ msgstr "Előszó" + +#~ msgid "Background" +#~ msgstr "Háttér" + +#~ msgid "Example applications" +#~ msgstr "Alkalmazási példák" + +#~ msgid "About the documentation" +#~ msgstr "A dokumentációról" + +#~ msgid "About the Learning Manual" +#~ msgstr "A Tankönyvről" + +#~ msgid "About the Music Glossary" +#~ msgstr "A Fogalomtárról" + +#~ msgid "About the Notation Reference" +#~ msgstr "A kottaírás kézikönyvéről" + +#~ msgid "About the Application Usage" +#~ msgstr "Az alkalmazás használatának leírásáról" + +#~ msgid "About the Snippet List" +#~ msgstr "A Kódrészletek listájáról" + +#~ msgid "First steps" +#~ msgstr "Az első lépések" + +#~ msgid "UNIX" +#~ msgstr "UNIX" + +#~ msgid "Working on LilyPond projects" +#~ msgstr "Munka LilyPond projekteken" + +#~ msgid "When things don't work" +#~ msgstr "Ha valami nem működik" + +#~ msgid "Updating old input files" +#~ msgstr "Régi bemeneti fájlok frissítése" + +#~ msgid "Troubleshooting (taking it all apart)" +#~ msgstr "Hibakeresés (a probléma beazonosítása)" + +#~ msgid "Minimal examples" +#~ msgstr "Minimális példák" diff --git a/Documentation/po/it.po b/Documentation/po/it.po new file mode 100644 index 0000000000..e5d4241e1c --- /dev/null +++ b/Documentation/po/it.po @@ -0,0 +1,10072 @@ +# translation of LilyPond documentation to Italian +# Copyright (C) 2009--2011 Han-Wen Nienhuys, Jan Nieuwenhuizen +# This file is distributed under the same license as the lilypond package. +# +# Federico Bruni , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: it\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-12-06 22:26+0100\n" +"PO-Revision-Date: 2009-11-04 HO:MI+ZONE\n" +"Last-Translator: Federico Bruni \n" +"Language-Team: Italiano\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: postprocess_html.py:55 +#, python-format +msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." +msgstr "" + +#: postprocess_html.py:57 +#, python-format +msgid "" +"Your suggestions for the documentation " +"are welcome, please report errors to our bug list." +msgstr "" + +#: postprocess_html.py:69 +#, python-format +msgid "Other languages: %s." +msgstr "" + +#: postprocess_html.py:70 +#, python-format +msgid "About automatic language selection." +msgstr "" + +#: postprocess_html.py:326 +msgid "stable-branch" +msgstr "" + +#: postprocess_html.py:328 +msgid "development-branch" +msgstr "" + +#: translations-status.py:72 +msgid "Section titles" +msgstr "" + +#: translations-status.py:73 +#, python-format +msgid "Last updated %s" +msgstr "" + +#: translations-status.py:74 +msgid "Translators" +msgstr "" + +#: translations-status.py:74 +msgid "Translation checkers" +msgstr "" + +#: translations-status.py:75 +msgid "Translated" +msgstr "" + +#: translations-status.py:75 +msgid "Up to date" +msgstr "" + +#: translations-status.py:76 +msgid "Other info" +msgstr "" + +#: translations-status.py:78 +msgid "no" +msgstr "" + +#: translations-status.py:79 +msgid "not translated" +msgstr "" + +#: translations-status.py:81 +#, python-format +msgid "partially (%(p)d %%)" +msgstr "" + +#: translations-status.py:83 +#, python-format +msgid "partially translated (%(p)d %%)" +msgstr "" + +#: translations-status.py:84 translations-status.py:86 +msgid "yes" +msgstr "" + +#: translations-status.py:85 +msgid "translated" +msgstr "" + +#: translations-status.py:86 translations-status.py:87 +msgid "up to date" +msgstr "" + +#: translations-status.py:88 +msgid "partially" +msgstr "" + +#: translations-status.py:89 +msgid "partially up to date" +msgstr "" + +#: translations-status.py:90 +msgid "N/A" +msgstr "" + +#: translations-status.py:91 +msgid "pre-GDP" +msgstr "" + +#: translations-status.py:92 +msgid "post-GDP" +msgstr "" + +#. -*- coding: utf-8 -*- +#. Documentation/changes.tely:183 (variable) +msgid "coloredheads" +msgstr "" + +#. Documentation/changes.tely:184 (variable) +msgid "noclef" +msgstr "" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi +msgid "Top" +msgstr "" + +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "" + +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Predefined commands" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Selected Snippets" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "See also" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Known issues and warnings" +msgstr "" + +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +msgid "Music engraving" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraving details" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Ledger lines" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Automated engraving" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Beauty contests" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music representation" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Putting LilyPond to work" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Colorado" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Computer notation" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3003 (variable) +#. Documentation/learning/fundamental.itely:3058 (variable) +#. Documentation/notation/changing-defaults.itely:3802 (variable) +msgid "padText" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3844 (variable) +msgid "tempoPadded" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Introduction to Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme variables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Lists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "cond" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond Scheme syntax" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond variables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Object properties" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "" + +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "" + +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "" + +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "" + +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "On properties" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "A complete example" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Adapting builtin commands" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "LilyPond Scheme interfaces" +msgstr "" + +#. Documentation/learning/tutorial.itely:210 (comment) +msgid "set the starting point to middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:241 (comment) +msgid "one octave above middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:257 (comment) +msgid "c is 1 staff space up, so is the c above" +msgstr "" + +#. Documentation/learning/tutorial.itely:258 (comment) +msgid "d is 2 up or 5 down, so is the d above" +msgstr "" + +#. Documentation/learning/tutorial.itely:259 (comment) +msgid "e is 3 up or 4 down, so is the e above" +msgstr "" + +#. Documentation/learning/tutorial.itely:260 (comment) +msgid "a is 6 up or 1 down, so is the a below" +msgstr "" + +#. Documentation/learning/tutorial.itely:261 (comment) +msgid "g is 5 up or 2 down, so is the g below" +msgstr "" + +#. Documentation/learning/tutorial.itely:262 (comment) +msgid "f is 4 up or 3 down, so is the f below" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely +msgid "Tutorial" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Compiling a file" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Producing output" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "MacOS X" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Windows" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to write input files" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Simple notation" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Pitches" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pitch" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "interval" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) +msgid "scale" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "middle C" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accidental" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Durations (rhythms)" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beam" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duration" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole note" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half note" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter note" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dotted note" +msgstr "Note" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Rests" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rest" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Time signature" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time signature" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Tempo marks" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Clef" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "clef" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "All together" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Working on input files" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Dealing with errors" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "General troubleshooting tips" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Some common errors" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to read the manuals" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Clickable examples" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "" + +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/learning/fundamental.itely:3008 (variable) +msgid "violin" +msgstr "" + +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +msgid "cello" +msgstr "" + +#. Documentation/learning/common-notation.itely:1255 (variable) +msgid "tripletA" +msgstr "" + +#. Documentation/learning/common-notation.itely:1256 (variable) +msgid "barA" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +msgid "Common notation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Single staff notation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Bar checks" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Accidentals and key signatures" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Accidentals" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sharp" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flat" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double sharp" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double flat" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Key signatures" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key signature" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warning: key signatures and pitches" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "natural" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposition" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Pitch names" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Ties and slurs" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Ties" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tie" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Slurs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slur" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Phrasing slurs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrasing" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warnings: slurs vs. ties" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "articulation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Articulation and dynamics" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Articulations" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Fingerings" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fingering" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "Dynamics" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) +msgid "dynamics" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "crescendo" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "decrescendo" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding text" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Automatic and manual beams" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Advanced rhythmic commands" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Partial measure" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "anacrusis" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) +msgid "Tuplets" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note value" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triplet" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Grace notes" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grace notes" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "acciaccatura" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "appoggiatura" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Multiple notes at once" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Music expressions explained" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Analogy: mathematical expressions" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: multiple staves" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polyphony" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: single staff" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Multiple staves" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Staff groups" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brace" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Combining notes into chords" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chord" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Single staff polyphony" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Songs" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Setting simple songs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyrics" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Aligning lyrics to a melody" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "extender line" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Lyrics to multiple staves" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Final touches" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Organizing pieces with variables" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding titles" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Absolute note names" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "After the tutorial" +msgstr "" + +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:73 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:86 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +msgid "singer" +msgstr "" + +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) +msgid "vocal" +msgstr "" + +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) +msgid "piano" +msgstr "" + +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2592 (variable) +#. Documentation/learning/fundamental.itely:2654 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) +msgid "upper" +msgstr "" + +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2599 (variable) +#. Documentation/learning/fundamental.itely:2655 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) +msgid "lower" +msgstr "" + +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) +msgid "melody" +msgstr "" + +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) +#, fuzzy +msgid "text" +msgstr "Avanti:" + +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) +msgid "main" +msgstr "" + +#. Documentation/learning/fundamental.itely:629 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:639 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:654 (comment) +msgid "Voice \\\"1\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:659 (comment) +msgid "Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) +msgid "Main voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:684 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:708 (comment) +msgid "Bar 1" +msgstr "" + +#. Documentation/learning/fundamental.itely:719 (comment) +msgid "Bar 2" +msgstr "" + +#. Documentation/learning/fundamental.itely:720 (comment) +msgid "Voice 1 continues" +msgstr "" + +#. Documentation/learning/fundamental.itely:723 (comment) +msgid "Voice 2 continues" +msgstr "" + +#. Documentation/learning/fundamental.itely:898 (comment) +msgid "Voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:900 (comment) +msgid "Voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:902 (comment) +msgid "Omit Voice three" +msgstr "" + +#. Documentation/learning/fundamental.itely:903 (comment) +msgid "Voice four" +msgstr "" + +#. Documentation/learning/fundamental.itely:1002 (comment) +msgid "Default behavior or behavior after \\oneVoice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1040 (comment) +msgid "The following notes are monophonic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1042 (comment) +msgid "Start simultaneous section of three voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1044 (comment) +msgid "Continue the main voice in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) +msgid "Initiate second voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1048 (comment) +msgid "Set stems, etc., down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) +msgid "Initiate third voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) +msgid "Set stems, etc, up" +msgstr "" + +#. Documentation/learning/fundamental.itely:1103 (comment) +msgid "Initiate first voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2303 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) +msgid "one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/learning/fundamental.itely:2569 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:64 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:63 (variable) +msgid "global" +msgstr "" + +#. Documentation/learning/fundamental.itely:1244 (variable) +msgid "SopOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1247 (variable) +msgid "SopOneLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1250 (variable) +msgid "SopTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1253 (variable) +msgid "SopTwoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1260 (context id) +msgid "SopOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1269 (context id) +msgid "SopTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/fundamental.itely:2901 (variable) +msgid "keyTime" +msgstr "" + +#. Documentation/learning/fundamental.itely:1303 (variable) +msgid "SopMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) +msgid "AltoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) +msgid "TenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) +msgid "BassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) +msgid "VerseOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) +msgid "VerseTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) +msgid "VerseThree" +msgstr "" + +#. Documentation/learning/fundamental.itely:1314 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) +msgid "VerseFour" +msgstr "" + +#. Documentation/learning/fundamental.itely:1321 (context id) +msgid "Sop" +msgstr "" + +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1141 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) +msgid "Alto" +msgstr "" + +#. Documentation/learning/fundamental.itely:1330 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1143 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) +msgid "Tenor" +msgstr "" + +#. Documentation/learning/fundamental.itely:1331 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1148 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) +msgid "Bass" +msgstr "" + +#. Documentation/learning/fundamental.itely:1475 (comment) +msgid "start of single compound music expression" +msgstr "" + +#. Documentation/learning/fundamental.itely:1476 (comment) +msgid "start of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1478 (comment) +msgid "create RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1481 (comment) +msgid "create voice for RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1482 (comment) +msgid "start of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1485 (comment) +msgid "end of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1486 (comment) +msgid "end of RH voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1487 (comment) +msgid "end of RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1488 (comment) +msgid "create LH staff; needs two simultaneous voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1491 (comment) +msgid "create LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1493 (comment) +msgid "start of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1496 (comment) +msgid "end of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1497 (comment) +msgid "end of LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1498 (comment) +msgid "create LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1500 (comment) +msgid "start of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1503 (comment) +msgid "end of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1504 (comment) +msgid "end of LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1505 (comment) +msgid "end of LH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1506 (comment) +msgid "end of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1507 (comment) +msgid "end of single compound music expression" +msgstr "" + +#. Documentation/learning/fundamental.itely:1726 (comment) +msgid "Wrong!" +msgstr "" + +#. Documentation/learning/fundamental.itely:1812 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) +msgid "make note heads smaller" +msgstr "" + +#. Documentation/learning/fundamental.itely:1815 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) +msgid "make note heads larger" +msgstr "" + +#. Documentation/learning/fundamental.itely:1818 (comment) +#. Documentation/learning/fundamental.itely:1993 (comment) +msgid "return to default size" +msgstr "" + +#. Documentation/learning/fundamental.itely:2282 (variable) +#. Documentation/learning/fundamental.itely:2570 (variable) +#. Documentation/notation/input.itely:1133 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) +msgid "sopranoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2289 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) +msgid "sopranoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:2293 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) +msgid "celloMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2574 (variable) +msgid "sopranoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) +msgid "altoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2581 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:79 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:78 (variable) +msgid "altoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2582 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) +msgid "tenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2586 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:85 (variable) +msgid "tenorWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2587 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) +msgid "bassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2591 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:92 (variable) +msgid "bassWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2608 (comment) +msgid "combine ChoirStaff and PianoStaff in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:2610 (context id) +#. Documentation/learning/fundamental.itely:2612 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (context id) +msgid "sopranos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2620 (context id) +#. Documentation/learning/fundamental.itely:2622 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:103 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:104 (context id) +msgid "altos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2630 (context id) +#. Documentation/learning/fundamental.itely:2632 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:113 (context id) +msgid "tenors" +msgstr "" + +#. Documentation/learning/fundamental.itely:2640 (context id) +#. Documentation/learning/fundamental.itely:2642 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:110 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:117 (context id) +msgid "basses" +msgstr "" + +#. Documentation/learning/fundamental.itely:2650 (comment) +msgid "end ChoirStaff" +msgstr "" + +#. Documentation/learning/fundamental.itely:2902 (variable) +msgid "ManualOneVoiceOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2906 (variable) +msgid "ManualOneVoiceTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2910 (variable) +msgid "ManualTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2914 (variable) +msgid "PedalOrganMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2920 (comment) +msgid "PianoStaff and Pedal Staff must be simultaneous" +msgstr "" + +#. Documentation/learning/fundamental.itely:2922 (context id) +msgid "ManualOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:2923 (comment) +msgid "set key and time signature" +msgstr "" + +#. Documentation/learning/fundamental.itely:2933 (comment) +msgid "end ManualOne Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2934 (context id) +msgid "ManualTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:2943 (comment) +msgid "end ManualTwo Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2944 (comment) +msgid "end PianoStaff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2945 (context id) +msgid "PedalOrgan" +msgstr "" + +#. Documentation/learning/fundamental.itely:2951 (comment) +msgid "end PedalOrgan Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2953 (comment) +msgid "end Score context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2969 (variable) +#, fuzzy +msgid "hornNotes" +msgstr "Note" + +#. Documentation/learning/fundamental.itely:2981 (variable) +msgid "fragmentA" +msgstr "" + +#. Documentation/learning/fundamental.itely:2982 (variable) +msgid "fragmentB" +msgstr "" + +#. Documentation/learning/fundamental.itely:3001 (variable) +msgid "dolce" +msgstr "" + +#. Documentation/learning/fundamental.itely:3004 (variable) +msgid "fthenp" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely +msgid "Fundamental concepts" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "How LilyPond input files work" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Introduction to the LilyPond file structure" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Score is a (single) compound musical expression" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Nesting music expressions" +msgstr "" + +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ossia" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "On the un-nestedness of brackets and ties" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Voices contain music" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "I'm hearing Voices" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Explicitly instantiating voices" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Note columns" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Voices and vocals" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Contexts and engravers" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Contexts explained" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Creating contexts" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Engravers explained" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Modifying context properties" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\with}" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\context}" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Adding and removing engravers" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing a single context" +msgstr "" + +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ambitus" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing all contexts of the same type" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Extending the templates" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Soprano and cello" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Four-part SATB vocal score" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Building a score from scratch" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "" + +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) +msgid "Increase thickness of immediately following slur only" +msgstr "" + +#. Documentation/learning/tweaks.itely:744 (comment) +msgid "Revert thickness of all following slurs to default of 1.2" +msgstr "" + +#. Documentation/learning/tweaks.itely:1421 (comment) +msgid "Don't print clefs in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1423 (comment) +msgid "Don't print time signatures in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1487 (comment) +msgid "Reduce all font sizes by ~24%" +msgstr "" + +#. Documentation/learning/tweaks.itely:1554 (comment) +msgid "Reduce stem length and line spacing to match" +msgstr "" + +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) +msgid "Set details for later Text Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) +msgid "Place dynamics above staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) +msgid "Start Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2006 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) +msgid "Add Text Script" +msgstr "" + +#. Documentation/learning/tweaks.itely:2012 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) +msgid "Stop Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2072 (comment) +msgid "Place following Ottava Bracket below Text Spanners" +msgstr "" + +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +msgid "Add Dynamic Text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2079 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2161 (comment) +msgid "Cause notes to space out to accommodate text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2184 (comment) +msgid "This markup is short enough to fit without collision" +msgstr "" + +#. Documentation/learning/tweaks.itely:2188 (comment) +msgid "This is too long to fit, so it is displaced upwards" +msgstr "" + +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) +msgid "Turn off collision avoidance" +msgstr "" + +#. Documentation/learning/tweaks.itely:2199 (comment) +msgid "and turn on textLengthOn" +msgstr "" + +#. Documentation/learning/tweaks.itely:2200 (comment) +msgid "Spaces at end are honored" +msgstr "" + +#. Documentation/learning/tweaks.itely:2307 (comment) +msgid "Extend width by 1 staff space" +msgstr "" + +#. Documentation/learning/tweaks.itely:2587 (comment) +msgid "This will not work, see below" +msgstr "" + +#. Documentation/learning/tweaks.itely:2591 (comment) +msgid "This works" +msgstr "" + +#. Documentation/learning/tweaks.itely:2627 (variable) +msgid "sesquisharp" +msgstr "" + +#. Documentation/learning/tweaks.itely:2630 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "" + +#. Documentation/learning/tweaks.itely:2635 (comment) +msgid "This improves the spacing" +msgstr "" + +#. Documentation/learning/tweaks.itely:2675 (comment) +msgid "Extend width by 1 unit" +msgstr "" + +#. Documentation/learning/tweaks.itely:2677 (comment) +msgid "Align dynamics to a base line 2 units above staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) +msgid "rhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) +msgid "Start polyphonic section of four voices" +msgstr "" + +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +msgid "continuation of main voice" +msgstr "" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) +msgid "lhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1154 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) +msgid "RH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1160 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) +msgid "LH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) +msgid "Move the c2 out of the main note column so the merge will work" +msgstr "" + +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) +msgid "Stem on the d2 must be down to permit merging" +msgstr "" + +#. Documentation/learning/tweaks.itely:3368 (comment) +msgid "Reposition the c2 to the right of the merged note" +msgstr "" + +#. Documentation/learning/tweaks.itely:3379 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) +msgid "Visible tempo marking" +msgstr "" + +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) +msgid "Invisible tempo marking to lengthen fermata in MIDI" +msgstr "" + +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) +msgid "New tempo for next section" +msgstr "" + +#. Documentation/learning/tweaks.itely:3604 (variable) +msgid "emphasize" +msgstr "" + +#. Documentation/learning/tweaks.itely:3609 (variable) +msgid "normal" +msgstr "" + +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) +msgid "SopranoMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1139 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) +msgid "Soprano" +msgstr "" + +#. Documentation/learning/tweaks.itely:3672 (variable) +msgid "mpdolce" +msgstr "" + +#. Documentation/learning/tweaks.itely:3679 (variable) +msgid "inst" +msgstr "" + +#. Documentation/learning/tweaks.itely:4184 (comment) +msgid "Arrange to obtain color from color-notehead procedure" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely +msgid "Tweaking output" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Tweaking basics" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Introduction to tweaks" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Objects and interfaces" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Naming conventions of objects and properties" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Tweaking methods" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "The Internals Reference manual" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties of layout objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Finding the context" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Overriding once only" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Reverting" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties found in interfaces" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Specifying the context in lyric mode" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Types of properties" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Appearance of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Visibility and color of objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "stencil" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "break-visibility" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "transparent" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "color" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Size of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Length and thickness of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Placement of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Automatic behavior" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Within-staff objects" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely +msgid "Fingering" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Outside-staff objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "\\\\textLengthOn" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Grob sizing" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Collisions of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Moving objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Fixing overlapping notation" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "padding property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "right-padding" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-padding property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "self-alignment-X property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-position property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "extra-offset property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "positions property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "force-hshift property" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Real music example" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Further tweaking" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other uses for tweaks" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Tying notes across voices" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Simulating a fermata in MIDI" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Using variables for tweaks" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other sources of information" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Avoiding tweaks with slower processing" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Advanced tweaks with Scheme" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely +msgid "Templates" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Single staff" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes only" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and chords" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes, lyrics, and chords." +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Piano templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo piano" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano and melody with lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered dynamics" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet parts" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Vocal ensembles" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score and automatic piano reduction" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB with aligned contexts" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Hymn tunes" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Orchestral templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Orchestra, choir and piano" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Ancient notation templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Transcription of mensural music" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Gregorian transcription template" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Other templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Jazz combo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accelerando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alteration" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alto clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ascending interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmentation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmented interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bass clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "central C" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "contralto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "copying music" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cue-notes" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal niente" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "didymic comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminution" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "direct" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonant interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant ninth chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant seventh chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double appoggiatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double bar line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double dotted note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double time signature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double trill" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "embellishment" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "engraving" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "expression mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flag" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flageolet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grave" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "homophony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inversion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inverted interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leading note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leger line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ligature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyric tie" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maxima" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensural notation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "modulation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motive" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ninth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "note" +msgstr "Note" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note names" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave marking" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave sign" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ornament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "perfect interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrase" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric time signature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "portato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "power chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "presto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "proportion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "score" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "shake" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "song texts" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staves" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "symphony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +msgid "tenor" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "third" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triad" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "trill" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tritone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "upbeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond grammar" +msgstr "" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "" + +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "" + +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +msgid "Specialist notation" +msgstr "" + +#. Documentation/notation/input.itely:673 (comment) +msgid "not printed" +msgstr "" + +#. Documentation/notation/input.itely:1137 (variable) +msgid "allLyrics" +msgstr "" + +#. Documentation/notation/input.itely:1223 (variable) +#. Documentation/notation/input.itely:1242 (variable) +#. Documentation/notation/input.itely:1279 (variable) +#. Documentation/notation/input.itely:1294 (variable) +#. Documentation/notation/spacing.itely:1555 (variable) +#. Documentation/notation/spacing.itely:1609 (variable) +#. Documentation/notation/spacing.itely:1634 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:53 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely +msgid "General input and output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Input structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Structure of a score" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple scores in a book" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple output files from one input file" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Output file names" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "File structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Titles and headers" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +msgid "Custom headers footers and titles" +msgstr "" + +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Reference to page numbers" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +#, fuzzy +msgid "Table of contents" +msgstr "Indice" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Working with input files" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Including LilyPond files" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Different editions from one source" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using variables" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using tags" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Text encoding" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Displaying LilyPond notation" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Controlling output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Extracting fragments of music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Skipping corrected music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "" + +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "MIDI output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating MIDI files" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "MIDI block" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "What goes into the MIDI output?" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Supported in MIDI" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Unsupported in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Repeats in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Controlling MIDI dynamics" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Dynamic marks" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Overall MIDI volume" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (i)" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (ii)" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Percussion in MIDI" +msgstr "" + +#. Documentation/notation/spacing.itely:2045 (comment) +msgid "The very low note here needs more room than 'space can" +msgstr "" + +#. Documentation/notation/spacing.itely:2046 (comment) +msgid "provide, so the distance between this staff and the next is" +msgstr "" + +#. Documentation/notation/spacing.itely:2047 (comment) +msgid "determined by 'padding." +msgstr "" + +#. Documentation/notation/spacing.itely:2050 (comment) +msgid "Here, 'space provides enough room, and there is no need to" +msgstr "" + +#. Documentation/notation/spacing.itely:2051 (comment) +msgid "compress the space (towards 'minimum-distance) to make room" +msgstr "" + +#. Documentation/notation/spacing.itely:2052 (comment) +msgid "for anything else on the page, so the distance between this" +msgstr "" + +#. Documentation/notation/spacing.itely:2053 (comment) +msgid "staff and the next is determined by 'space." +msgstr "" + +#. Documentation/notation/spacing.itely:2056 (comment) +msgid "By setting 'padding to a negative value, staves can be made to" +msgstr "" + +#. Documentation/notation/spacing.itely:2057 (comment) +msgid "collide. The lowest acceptable value for 'space is 0." +msgstr "" + +#. Documentation/notation/spacing.itely:2489 (comment) +msgid "this time the text will be closer to the staff" +msgstr "" + +#. Documentation/notation/spacing.itely:2491 (comment) +msgid "by setting outside-staff-priority to a non-number," +msgstr "" + +#. Documentation/notation/spacing.itely:2492 (comment) +msgid "we disable the automatic collision avoidance" +msgstr "" + +#. Documentation/notation/spacing.itely:2495 (comment) +msgid "now they will collide" +msgstr "" + +#. Documentation/notation/spacing.itely:2521 (comment) +msgid "the markup is too close to the following note" +msgstr "" + +#. Documentation/notation/spacing.itely:2525 (comment) +msgid "setting outside-staff-horizontal-padding fixes this" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely +msgid "Spacing issues" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Page layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\paper} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Setting paper size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Automatic scaling to paper size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Horizontal spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Other \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Other @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Miscellaneous @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Score layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\layout block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\layout} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page turning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Minimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Using an extra voice for breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Vertical spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing within systems" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Within-system spacing properties" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of ungrouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of grouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit staff and system positioning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical collision avoidance" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing overview" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "New spacing area" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line length" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Proportional notation" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Fitting music onto fewer pages" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Displaying spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing spacing" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:451 (variable) +msgid "keepVoicesAlive" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:453 (comment) +msgid "Keep Voice \\\"A\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:454 (comment) +msgid "Keep Voice \\\"B\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) +msgid "accompaniment" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:74 (variable) +msgid "words" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:497 (comment) +msgid "Keep Voice \\\"melody\\\" alive for 4 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) +msgid "skip a bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2017 (comment) +msgid "default space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2023 (comment) +msgid "reduced space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2025 (comment) +msgid "this is the nested declaration" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2480 (comment) +msgid "increase the length of the tie" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2489 (comment) +msgid "increase the length of the rest bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2497 (comment) +msgid "increase the length of the hairpin" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2525 (comment) +msgid "default" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2528 (comment) +#. Documentation/notation/changing-defaults.itely:2541 (comment) +msgid "not effective alone" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2532 (comment) +#. Documentation/notation/changing-defaults.itely:2545 (comment) +msgid "effective only when both overrides are present" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2922 (comment) +msgid "Remove bar line at the end of the current line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2968 (comment) +msgid "Try to remove all key signatures" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3392 (comment) +msgid "move horizontally left" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3394 (comment) +msgid "move vertically up" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3395 (comment) +msgid "third finger" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3443 (comment) +#. Documentation/notation/changing-defaults.itely:3482 (comment) +msgid "The rehearsal mark will be centered above the Clef" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3449 (comment) +msgid "The rehearsal mark will be centered above the Time Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3456 (comment) +msgid "The rehearsal mark will be centered above the Breath Mark" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3476 (comment) +msgid "The rehearsal mark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3489 (comment) +msgid "The rehearsal mark will be centered above the Bar Line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3504 (comment) +msgid "The RehearsalMark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3511 (comment) +#. Documentation/notation/changing-defaults.itely:3527 (comment) +#. Documentation/notation/changing-defaults.itely:3534 (comment) +msgid "" +"The RehearsalMark will be aligned with the left edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3516 (comment) +msgid "" +"The RehearsalMark will be aligned with the right edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3528 (comment) +msgid "and then shifted right by 3.5 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3535 (comment) +msgid "and then shifted left by 2 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3583 (variable) +msgid "XinO" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3825 (variable) +msgid "custosNote" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely +msgid "Changing defaults" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Interpretation contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Score - the master of all contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Top-level contexts - staff containers" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Intermediate-level contexts - staves" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Bottom-level contexts - voices" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Keeping contexts alive" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying context plug-ins" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Changing context default settings" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Defining new contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Explaining the Internals Reference" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Navigating the program reference" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Layout interfaces" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Determining the grob property" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Naming conventions" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Modifying properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Overview of modifying properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The set command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The override command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The tweak command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "set versus override" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying alists" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Useful concepts and properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Input modes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Direction and placement" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Context layout order" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Distances and measurements" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Staff symbol properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Spanners" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{spanner-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{line-spanner-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Visibility of objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Removing the stencil" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Making objects transparent" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Painting objects white" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using break-visibility" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Special considerations" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Line styles" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Rotating objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating layout objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating markup" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Advanced tweaks" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Setting X-offset and Y-offset directly" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Setting @code{X-offset} and @code{Y-offset} directly" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the side-position-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{side-position-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the self-alignment-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{self-alignment-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{aligned-on-parent} procedures" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{centered-on-parent} procedures" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the break-alignable-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{break-alignable-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Vertical grouping of grobs" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying stencils" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying shapes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Modifying ties and slurs" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Using music functions" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +msgid "Notation manual tables" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined fretboard diagrams" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Time Signature glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accidental glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Rest glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dynamic glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Note head styles" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup commands" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of articulations" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Articulation scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ornament scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Percussion notes" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "closure" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "interface" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "All context properties" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Layout properties" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined type predicates" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Scheme functions" +msgstr "" + +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +msgid "Cheat sheet" +msgstr "" + +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "" + +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/usage/running.itely +msgid "Standard shell commands" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "LilyPond in chroot jail" +msgstr "" + +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "" + +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" +msgstr "" + +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "Sharing the table of contents" +msgstr "Indice" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" +msgstr "" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "Other formats" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "" + +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "MIDI articulation" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +msgid "Suggestions for writing files" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) +msgid "discant" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) +msgid "dot" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) +msgid "16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) +msgid "accBasson" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) +msgid "een korig 8 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) +msgid "accBandon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) +msgid "accVCello" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) +msgid "4-8-16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) +msgid "accHarmon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) +msgid "accTrombon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) +msgid "eenkorig 4 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) +msgid "accOrgan" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) +msgid "accMaster" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) +msgid "accAccord" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) +msgid "accMusette" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) +msgid "accCeleste" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) +msgid "accOboe" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) +msgid "accClarin" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) +msgid "accPiccolo" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) +msgid "accViolin" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) +msgid "continuo" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) +msgid "bassStaff" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) +msgid "drh" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) +msgid "drl" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) +msgid "timb" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) +msgid "threeTwo" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) +msgid "threeFour" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:48 (variable) +msgid "cueWhile" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:61 (variable) +msgid "flute" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:67 (variable) +msgid "clarinet" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:76 (variable) +msgid "pianoRH" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:81 (variable) +msgid "pianoLH" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) +msgid "first, define a variable to hold the formatted date:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) +msgid "date" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) +msgid "d-%m-%Y\\\" (localtime (current-time)))" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) +msgid "use it in the title block:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) +msgid "and use it in a \\markup block:" +msgstr "" + +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) +msgid "voiceFive" +msgstr "" + +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +#, fuzzy +msgid "graceNotes" +msgstr "Note" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) +msgid "Default layout:" +msgstr "" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) +msgid "Reducing the minimum space below the staff and above the lyrics:" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) +msgid "Increase the size of the bar number by 2" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) +msgid "Print a bar number every second measure" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) +msgid "Center-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) +msgid "Left-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) +msgid "the RehearsalMark will be centered above the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) +msgid "" +"the RehearsalMark will be aligned with the left edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) +msgid "" +"the RehearsalMark will be aligned with the right edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) +msgid "and then shifted right by one unit." +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) +msgid "upperStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:49 (comment) +msgid "\\break % 1 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:60 (comment) +msgid "\\break %2 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:72 (comment) +msgid "\\break % 3 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:87 (comment) +msgid "\\break % 4 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) +msgid "\\break % 5 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) +msgid "\\break % 6 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) +msgid "\\break % 7 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:126 (comment) +msgid "\\break % 8 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:129 (comment) +msgid "\\break % 12 (32*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) +msgid "lowerStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:144 (comment) +msgid "\\break % 2 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:149 (comment) +msgid "\\break % 4 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:188 (comment) +msgid "\\break % 9 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:190 (comment) +msgid "lig" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:194 (comment) +msgid "\\break % 11 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:205 (comment) +msgid "\\break % 12 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) +msgid "incipit" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) +msgid "tight spacing" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +msgid "turn off bar lines" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) +msgid "need this extra \\skip such that clef change comes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) +msgid "after bar line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) +msgid "CHECK: no effect?" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) +msgid "turn bar lines on again" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) +msgid "FIXME: setting printKeyCancellation back to #t must not" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) +msgid "occur in the first bar after the incipit. Dto. for forceClef." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) +msgid "Therefore, we need an extra \\skip." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) +msgid "the actual music" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) +msgid "let finis bar go through all staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) +msgid "finis bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) +msgid "discantusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) +msgid "two bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) +msgid "eight bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) +msgid "one bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) +msgid "discantusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) +msgid "altusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) +msgid "seven bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) +msgid "altusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) +#, fuzzy +msgid "tenorNotes" +msgstr "Note" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) +msgid "four bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) +msgid "tenorLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) +msgid "bassusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) +msgid "bassusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) +msgid "choirStaff" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) +msgid "no bars in staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) +msgid "incipit should not start with a start delimiter" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) +msgid "no slurs" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) +msgid "Comment in the below \\\"\\remove\\\" command to allow line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) +msgid "breaking also at those barlines where a note overlaps" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) +msgid "into the next bar. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) +msgid "short example score, but especially for large scores, you" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) +msgid "will typically yield better line breaking and thus improve" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) +msgid "overall spacing if you comment in the following command." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) +msgid "\\remove \\\"Forbid_line_break_engraver\\\"" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +msgid "tick" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +msgid "Use markup to center the chant on the page" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +msgid "centered" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) +msgid "End score" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) +msgid "End markup" +msgstr "" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) +msgid "fragment" +msgstr "" + +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) +#, fuzzy +msgid "slurNotes" +msgstr "Note" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +msgid "Default behavior" +msgstr "" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) +msgid "Set default beaming for all staves" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) +msgid "Modify beaming for just this staff" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) +msgid "Inherit beaming from Score context" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) +msgid "Modify beaming for this voice only" +msgstr "" + +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) +msgid "rhythm 2-3-2" +msgstr "" + +#. Documentation/snippets/book-parts.ly:22 (comment) +msgid "book paper, which is inherited by all children bookparts" +msgstr "" + +#. Documentation/snippets/book-parts.ly:25 (comment) +msgid "Page footer: add a different part-tagline at part last page" +msgstr "" + +#. Documentation/snippets/book-parts.ly:29 (comment) +msgid "Copyright header field only on book first page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:33 (comment) +msgid "Part tagline header field only on each part last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:37 (comment) +msgid "Tagline header field only on book last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:44 (comment) +msgid "book header, which is inherited by the first bookpart" +msgstr "" + +#. Documentation/snippets/book-parts.ly:53 (comment) +msgid "a different page breaking function may be used on each part" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:20 (comment) +msgid "this bar contains no \\breathe" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:22 (comment) +msgid "Modern notation:" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:23 (comment) +msgid "by default, \\breathe uses the rcomma, just as if saying:" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:24 (comment) +msgid "" +"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" +"\\\")" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:27 (comment) +msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:28 (comment) +msgid "N.B.: must use Staff context here, since we start a Voice below" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:32 (comment) +msgid "vee" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) +msgid "construct the symbol" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) +msgid "set the breathe mark back to normal" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) +msgid "hairpinWithCenteredText" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) +msgid "hairpinMolto" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) +msgid "hairpinMore" +msgstr "" + +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) +msgid "smallFlageolet" +msgstr "" + +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +msgid "Default setting" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +msgid "The following is only here to print the names of the" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +msgid "chords styles; it can be removed if you do not need to" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) +msgid "print them." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:182 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) +msgid "{" +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:184 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) +msgid "}" +msgstr "" + +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +#, fuzzy +msgid "sustainNotes" +msgstr "Note" + +#. Documentation/snippets/chant-or-psalms-notation.ly:35 (variable) +msgid "stemOn" +msgstr "" + +#. Documentation/snippets/chant-or-psalms-notation.ly:36 (variable) +msgid "stemOff" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) +msgid "modify maj9 and 6(add9)" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) +msgid "Exception music is chords with markups" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) +msgid "chExceptionMusic" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) +msgid "Convert music to list and prepend to existing exceptions." +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) +msgid "chExceptions" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) +msgid "theMusic" +msgstr "" + +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +msgid "\\break" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +msgid "sop" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:65 (variable) +msgid "origScore" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:83 (comment) +msgid "Each clip-region is a (START . END) pair" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:84 (comment) +msgid "where both are rhythmic-locations." +msgstr "" + +#. Documentation/snippets/clip-systems.ly:86 (comment) +msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:87 (comment) +msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) +msgid "Association list of pitches to colors." +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) +msgid "Compare pitch and alteration (not octave)." +msgstr "" + +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) +msgid "piuF" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) +msgid "musicUp" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) +msgid "musicDown" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" +msgstr "" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) +msgid "parenF" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) +msgid "the hidden measure and bar line" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) +msgid "Set global properties of fret diagram" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) +msgid "mel" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) +msgid "C major for guitar, no barre, using defaults" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) +msgid "terse style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) +msgid "size 1.0" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) +msgid "standard size" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) +msgid "no barre, fret label down or left, small mute label font" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) +msgid "larger dots, centered dots, fewer frets" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) +msgid "label below string" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +#, fuzzy +msgid "notes." +msgstr "Note" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +msgid "Ambitus engraving logics" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +msgid "add FretBoards for the Cuatro" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) +msgid "Note: This section could be put into a separate file" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:86 (comment) +msgid "predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (comment) +msgid "and \\included into each of your compositions" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +msgid "cuatroTuning" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +msgid "dSix" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +msgid "dMajor" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) +msgid "aMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:94 (variable) +msgid "dMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:95 (variable) +msgid "gMajor" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:113 (comment) +msgid "end of potential include file /predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:118 (variable) +msgid "primerosNames" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:122 (variable) +msgid "primeros" +msgstr "" + +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) +msgid "baseMelody" +msgstr "" + +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) +msgid "Must be lower than the actual number of staff lines" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) +msgid "fixA" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) +msgid "fixB" +msgstr "" + +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:21 (comment) +msgid "new voice ( = \\voiceOne), hidden" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:23 (comment) +msgid "attach glissando to note heads" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:28 (comment) +msgid "original voice with chords rearranged so that" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:29 (comment) +msgid "glissando is attached to a & c" +msgstr "" + +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) +msgid "" +"Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +msgid "mycresc" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +msgid "mydecresc" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:61 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:62 (variable) +msgid "crpoco" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:67 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:68 (variable) +msgid "cresc" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:73 (variable) +msgid "dim" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:78 (variable) +msgid "decresc" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) +msgid "PostScript is a registered trademark of Adobe Systems Inc." +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) +msgid "sample music" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) +msgid "topVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) +msgid "botVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) +msgid "hoom" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) +msgid "pah" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) +msgid "setup for Request->Element conversion. Guru-only" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:209 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:222 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:278 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:292 (variable) +msgid "MyStaff" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:139 (comment) +msgid "explicitly set instrumentName, so we don't get" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "weird effects when doing instrument names for" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +msgid "piano staves" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:150 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:236 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:249 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:262 (variable) +msgid "MyVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:165 (comment) +msgid "must come before all" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:175 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +msgid "extendOn" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:40 (variable) +msgid "centermarkup" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:96 (comment) +msgid "Text indicators" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:97 (variable) +msgid "abanico" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:98 (variable) +msgid "rasgueaso" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:99 (variable) +msgid "alzapua" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:101 (comment) +msgid "Finger stroke symbols" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:102 (variable) +msgid "strokeUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:112 (variable) +msgid "strokeDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:122 (comment) +msgid "Golpe symbol" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:123 (variable) +msgid "golpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:137 (variable) +msgid "strokeUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:138 (variable) +msgid "iUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:140 (comment) +msgid "Strokes for all fingers" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:141 (variable) +#, fuzzy +msgid "pUp" +msgstr "Su:" + +#. Documentation/snippets/flamenco-notation.ly:142 (variable) +msgid "pDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:143 (variable) +#, fuzzy +msgid "iUp" +msgstr "Su:" + +#. Documentation/snippets/flamenco-notation.ly:144 (variable) +msgid "iDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:145 (variable) +#, fuzzy +msgid "mUp" +msgstr "Su:" + +#. Documentation/snippets/flamenco-notation.ly:146 (variable) +msgid "mDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:147 (variable) +#, fuzzy +msgid "aUp" +msgstr "Su:" + +#. Documentation/snippets/flamenco-notation.ly:148 (variable) +msgid "aDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:149 (variable) +#, fuzzy +msgid "xUp" +msgstr "Su:" + +#. Documentation/snippets/flamenco-notation.ly:150 (variable) +msgid "xDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:153 (comment) +msgid "Just handy :)" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:154 (variable) +msgid "tupletOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:159 (variable) +msgid "tupletsOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:164 (variable) +msgid "tupletsOn" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:169 (variable) +msgid "headsOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:175 (variable) +msgid "headsOn" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) +msgid "Example 1" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) +msgid "Example 2" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) +msgid "Example 3" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) +msgid "Example 4" +msgstr "" + +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) +msgid "slap" +msgstr "" + +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +msgid "example" +msgstr "" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) +msgid "" +"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" +"msg00215.html" +msgstr "" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +msgid "lyr" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) +msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) +msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) +msgid "These chords will be in normal orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) +#, python-format +msgid "110% of default size" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) +msgid "Double barre used to test barre function" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) +msgid "C major for guitar, with capo on third fret" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) +msgid "simple D chord, large top fret thickness" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) +msgid "These chords will be in landscape orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) +msgid "These chords will be in opposing-landscape orientation" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:49 (comment) +msgid "Make a blank new fretboard table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:52 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:55 (comment) +msgid "Add a chord to custom-fretboard-table-one" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:61 (comment) +msgid "Add a chord to custom-fretboard-table-two" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +msgid "fingering orientations" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +msgid "ssnor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +msgid "rit" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +msgid "dimin" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) +msgid "this moves them up one staff space from the default position" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) +msgid "set up grids" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) +msgid "set the grid interval to one quarter note" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) +msgid "this moves them to the right half a staff space" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) +msgid "hides staff and notes so that only the grid lines are visible" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) +msgid "dummy notes to force regular note spacing" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) +msgid "center grid lines horizontally below note heads" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +msgid "set line length and positioning:" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +msgid "two staff spaces above center line on hidden staff" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) +msgid "to four spaces below center line on visible staff" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) +msgid "drum" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +msgid "Solution 1: Using a simple markup with a particular halign value" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) +msgid "etc. will have no effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) +msgid "semppMarkup" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +msgid "Solution 2: Using a dynamic script & shifting with" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +msgid "\\once \\override ... #'X-offset = .." +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) +msgid "Drawback: \\once \\override needed for every invocation" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) +msgid "semppK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +msgid "Solution 3: Padding the dynamic script so the center-alignment" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +msgid "puts it at the correct position" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) +msgid "" +"Drawback: the padding really reserves the space, nothing else can be there" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) +msgid "semppT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +msgid "other stuff there => collisions" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) +msgid "same alignment as without the additional text" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) +msgid "semppM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) +msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) +msgid "semppG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) +msgid "Drawback: One needs to set DynamicText #'X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) +msgid "semppMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) +msgid "s" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) +msgid "sMarkup" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) +msgid "sK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) +msgid "sT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) +msgid "sM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) +msgid "sG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) +msgid "sMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) +msgid "Setting to ##f (false) gives the same result" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) +msgid "harmonies" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) +msgid "THIS LINE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) +msgid "HERE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:50 (variable) +msgid "Timeline" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +msgid "Start score" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +msgid "Start pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +msgid "Start Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +msgid "End Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +msgid "End Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +msgid "Start Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +msgid "End Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +msgid "End pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +msgid "don't indent first system" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +msgid "shorten line length to suit music" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) +msgid "discantusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) +msgid "altusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) +msgid "two measures" +msgstr "" + +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) +msgid "tenorIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) +msgid "bassusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:265 (comment) +msgid "no bar lines in staves or lyrics" +msgstr "" + +#. Documentation/snippets/incipit.ly:268 (comment) +msgid "the next two instructions keep the lyrics between the bar lines" +msgstr "" + +#. Documentation/snippets/incipit.ly:279 (comment) +msgid "breaking also at those bar lines where a note overlaps" +msgstr "" + +#. Documentation/snippets/incipit.ly:280 (comment) +msgid "into the next measure. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) +msgid "tuning" +msgstr "" + +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) +msgid "#(set-global-staff-size 16)" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) +msgid "Some macros %%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) +msgid "sl" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) +msgid "nsl" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) +msgid "crOn" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) +msgid "crOff" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) +msgid "insert chord name style stuff here." +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) +msgid "jazzChords" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) +msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) +msgid "Key" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) +msgid "############ Horns ############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) +msgid "------ Trumpet ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) +msgid "trpt" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) +msgid "trpHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) +msgid "trumpet" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) +msgid "------ Alto Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) +msgid "altoHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) +msgid "altoSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) +msgid "------ Baritone Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) +msgid "bari" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) +msgid "bariHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) +msgid "bariSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) +msgid "------ Trombone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) +msgid "tbone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) +msgid "tboneHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) +msgid "trombone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) +msgid "############ Rhythm Section #############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) +msgid "------ Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) +msgid "gtr" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) +msgid "gtrHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) +msgid "------ Piano ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) +msgid "rhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) +msgid "rhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) +msgid "lhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) +msgid "lhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) +msgid "PianoRH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) +msgid "PianoLH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) +msgid "------ Bass Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) +msgid "------ Drums ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) +msgid "drumContents" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) +#, python-format +msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) +msgid "horns" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) +msgid "altosax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) +msgid "barichords" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) +msgid "barisax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) +msgid "chords" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "" + +#. Documentation/snippets/makam-example.ly:55 (comment) +msgid "Initialize makam settings" +msgstr "" + +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) +msgid "bassfigures" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) +msgid "from upper staff-line (position 2) to center (position 0)" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) +msgid "from center to one above center (position 1)" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) +msgid "speakOn" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) +msgid "speakOff" +msgstr "" + +#. Documentation/snippets/markup-lines.ly:23 (comment) +msgid "Candide, Voltaire" +msgstr "" + +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) +msgid "the final bar line is not interrupted" +msgstr "" + +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) +msgid "normalPos" +msgstr "" + +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) +msgid "dashPlus" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) +msgid "Set tuplets to be extendable..." +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) +msgid "...to cover all items up to the next note" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) +msgid "...or to cover just whitespace" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +msgid "space for instrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) +msgid "fluteMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) +msgid "clarinetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) +msgid "trumpetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +msgid "hornMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) +msgid "percussionMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) +msgid "altoIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) +msgid "altoIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) +msgid "altoILyrics" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) +msgid "altoIILyrics" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) +msgid "pianoRHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) +msgid "pianoLHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) +msgid "violinIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) +msgid "violinIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) +msgid "violaMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:146 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:149 (comment) +msgid "applies to split up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:156 (comment) +msgid "applies to down stems" +msgstr "" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) +msgid "stick" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) +msgid "Permit line breaks within tuplets" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) +msgid "Allow beams to be broken at line breaks" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) +msgid "Insert a manual line break within a tuplet" +msgstr "" + +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) +msgid "pedal" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) +msgid "tab" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) +msgid "They can be moved with an override" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) +msgid "A value of 0 is the default position;" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) +msgid "the following trick moves the rest to the center line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) +msgid "They remain separated even in empty measures" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) +msgid "This brings them together even though there are two voices" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) +msgid "Set segno sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) +msgid "\\once \\override Score.RehearsalMark #'font-size = #3" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) +msgid "Set coda sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) +msgid "Should Coda be on anew line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) +msgid "Coda NOT on new line: use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) +msgid "Coda on new line: DON'T use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) +msgid "\\noBreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) +msgid "" +"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " +"lines." +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) +msgid "text line-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) +msgid "==================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) +msgid "Move text to the desired position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) +msgid "| s1*0^\\markup { D.S. al Coda } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) +msgid "text center-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) +msgid "====================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) +msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) +msgid "text and symbols center-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) +msgid "===============================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) +msgid "" +"Move text to the desired position and tweak spacing for optimum text " +"alignment" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) +msgid "Increasing the unfold counter will expand the staff-free space" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) +msgid "Resume bar count and show staff lines again" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) +msgid "Should Coda be on new line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) +msgid "Coda NOT on new line: DON'T use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) +msgid "Coda on new line: use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) +msgid "Show up, you clef and key!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) +msgid "Set coda sign as rehearsal mark and adjust size and position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) +msgid "" +"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" +"position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) +msgid "Coda NOT on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) +msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) +msgid "Coda on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) +msgid "The coda" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) +msgid "Prevent bar numbers at the end of a line and permit them elsewhere" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) +msgid "Draw a box round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) +msgid "Draw a circle round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) +msgid "Rehearsal marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) +msgid "Bassklarinette" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) +msgid "Perkussion" +msgstr "" + +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:24 (context id) +msgid "voc" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) +msgid "quoteTest" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) +msgid "french horn" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) +msgid "quoteMe" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) +msgid "original" +msgstr "" + +#. Documentation/snippets/recorder-fingering-chart.ly:38 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) +msgid "startAcciaccaturaMusic" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) +msgid "stopAcciaccaturaMusic" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) +msgid "To use the setting globally, uncomment the following line:" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) +msgid "\\override VerticalAxisGroup #'remove-first = ##t" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) +msgid "To use the setting globally, comment this line," +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) +msgid "uncomment the line in the \\layout block above" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) +msgid "Default beaming" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) +msgid "Set new values for beam endings" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) +msgid "Macro to print single slash" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) +msgid "rs" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) +msgid "Function to print a specified number of slashes" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) +msgid "comp" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +#, fuzzy +msgid "sopranonotes" +msgstr "Note" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +msgid "sopranowords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +#, fuzzy +msgid "altonotes" +msgstr "Note" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +msgid "altowords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +#, fuzzy +msgid "tenornotes" +msgstr "Note" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +#, fuzzy +msgid "tenorwords" +msgstr "Note" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +#, fuzzy +msgid "bassnotes" +msgstr "Note" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +msgid "basswords" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) +msgid "NoStem" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) +msgid "NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) +msgid "ZeroBeam" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) +msgid "staffTabLine" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated with a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) +msgid "" +"disable the following line to see the the noteheads while writing the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) +msgid "The beam between 8th-notes is used to draw the push-line" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) +msgid "" +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) +msgid "2. uncomment the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) +msgid "3. compile" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) +msgid "" +"In the score-picture click on the position the push- or pull-part starts" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) +msgid "(on the noteHead, the cursor will change to a hand-icon)." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) +msgid "The cursor in the source code will jump just at this position." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) +msgid "a) If a push-part starts there, replace the 'c' by an 'e['" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) +msgid "b) If a pull-part starts there, replace the 'c' by an 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) +msgid "" +"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " +"e] s s)" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) +msgid "10. re-enable the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) +msgid "1. Place a copy of the piano melody below" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) +msgid "" +"2. Separate piano melody into pull- and push-parts according to the " +"staffTabLine you've already made" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) +msgid "Tips:" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) +msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) +msgid "AccordionTabTwoCBesDur" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) +msgid "pull 1" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) +msgid "push 2" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) +msgid "pull 3" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) +msgid "2 r8 }" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) +msgid "1. Place a copy of the piano melody above" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) +msgid "change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) +msgid "4/4 - tact. How many beats per bar" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) +msgid "The following line has to be adjusted O-F-T-E-N." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) +msgid "staffVoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) +msgid "staffAccordionMel" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) +msgid "BassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) +msgid "LyricBassRhythmI" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) +msgid "staffBassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) +msgid "" +"This is not a RhythmicStaff because it must be possible to append lyrics." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) +msgid "x.y" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated by a grid" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" +msgstr "" + +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +#, fuzzy +msgid "notes" +msgstr "Note" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +msgid "trillFlat" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +msgid "LH staff" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) +msgid "verseI" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) +msgid "verseII" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) +msgid "staffMelody" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) +msgid "voiceMelody" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:38 (variable) +msgid "trompette" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "" + +#. Documentation/snippets/stemlets.ly:36 (comment) +msgid "N.B. use Score.Stem to set for the whole score." +msgstr "" + +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) +msgid "violinOne" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) +msgid "violinTwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) +msgid "viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) +msgid "piece.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) +msgid "(This is the global definitions file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) +msgid "Violinone" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) +msgid "*********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) +msgid "Violintwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) +msgid "Viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) +msgid "Cello" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) +msgid "**********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) +msgid "These are the other files you need to save on your computer" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) +msgid "score.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) +msgid "(This is the main file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) +#, python-format +msgid "" +"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " +"separate file" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) +msgid "{ Uncomment this block when using separate files" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) +msgid "vn1.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) +msgid "(This is the Violin 1 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) +msgid "vn2.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) +msgid "(This is the Violin 2 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) +msgid "vla.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) +msgid "(This is the Viola part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) +msgid "vlc.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) +msgid "(This is the Cello part file)" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:78 (comment) +msgid "Set beam sub-group length to an eighth note" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:83 (comment) +msgid "Set beam sub-group length to a sixteenth note" +msgstr "" + +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) +msgid "ignore" +msgstr "" + +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "" + +#. Documentation/snippets/text-headword.ly:45 (comment) +msgid "RH staff" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) +msgid "New command to add a three sided box, with sides north, west and south" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:18 (comment) +msgid "Based on the box-stencil command defined in scm/stencil.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:34 (comment) +msgid "in scm/define-markup-commands.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:46 (comment) +msgid "Test it:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +msgid "Revert to default style:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) +msgid "make the staff lines invisible on staves" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) +msgid "incipitDiscantus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) +msgid "incipitAltus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) +msgid "incipitTenor" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) +msgid "incipitBassus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) +msgid "" +"StaffGroup is used instead of ChoirStaff to get bar lines between systems" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) +msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) +msgid "between the lyrics." +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" +msgstr "" + +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) +msgid "naturalizeMusic" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) +msgid "The default treble clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) +msgid "The standard bass clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) +msgid "The baritone clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) +msgid "The standard choral tenor clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) +msgid "A non-standard clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) +msgid "The following clef changes do not preserve" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) +msgid "the normal relationship between notes and clefs:" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) +msgid "Return to the normal clef:" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +msgid "Abreviations" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +msgid "accel" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +msgid "Strings" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +msgid "norm" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +msgid "quatre" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +msgid "tupletbp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +msgid "noflag" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +msgid "Score" +msgstr "" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +#, fuzzy +msgid "testnotes" +msgstr "Note" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) +msgid "parallelogram" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +msgid "myNoteHeads" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) +msgid "normalNoteHeads" +msgstr "" + +#. Documentation/snippets/utf-8.ly:19 (comment) +msgid "end verbatim - this comment is a hack to prevent texinfo.tex" +msgstr "" + +#. Documentation/snippets/utf-8.ly:20 (comment) +msgid "from choking on non-European UTF-8 subsets" +msgstr "" + +#. Documentation/snippets/utf-8.ly:22 (comment) +msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" +msgstr "" + +#. Documentation/snippets/utf-8.ly:40 (comment) +msgid "Cyrillic font" +msgstr "" + +#. Documentation/snippets/utf-8.ly:41 (variable) +msgid "bulgarian" +msgstr "" + +#. Documentation/snippets/utf-8.ly:45 (variable) +msgid "hebrew" +msgstr "" + +#. Documentation/snippets/utf-8.ly:49 (variable) +msgid "japanese" +msgstr "" + +#. Documentation/snippets/utf-8.ly:56 (comment) +msgid "\\\"a legal song to you\\\"" +msgstr "" + +#. Documentation/snippets/utf-8.ly:57 (variable) +msgid "portuguese" +msgstr "" + +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +msgid "upline" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) +msgid "leftbrace" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) +msgid "rightbrace" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) +msgid "dropLyrics" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) +msgid "raiseLyrics" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) +msgid "skipFour" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) +msgid "lyricsA" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) +msgid "lyricsB" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) +msgid "lyricsC" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) +msgid "lyricsD" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) +msgid "m" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) +msgid "sopMusic" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) +msgid "sopWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:99 (context id) +msgid "women" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) +msgid "men" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) +msgid "we could remove the line about this with the line below, since we want" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) +msgid "the alto lyrics to be below the alto Voice anyway." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) +msgid "again, we could replace the line above this with the line below." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +msgid "refrain" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +#, fuzzy +msgid "SoloNotes" +msgstr "Note" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +msgid "SoloLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +#, fuzzy +msgid "SopranoNotes" +msgstr "Note" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +msgid "SopranoLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +msgid "BassNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +msgid "BassLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +msgid "SoloVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +msgid "SopranoVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +msgid "BassVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" +msgstr "" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) +msgid "voltaMusic" +msgstr "" + +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "" + +msgid "Up:" +msgstr "Su:" + +msgid "Next:" +msgstr "Avanti:" + +msgid "Previous:" +msgstr "Indietro:" + +msgid "Appendix " +msgstr "Appendice " + +msgid "Footnotes" +msgstr "Note" + +msgid "Table of Contents" +msgstr "Indice" diff --git a/Documentation/po/ja.po b/Documentation/po/ja.po index 6962111e14..c26f34aaee 100644 --- a/Documentation/po/ja.po +++ b/Documentation/po/ja.po @@ -8,16 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-06 23:05+0200\n" -"PO-Revision-Date: 2009-01-15 13:24+0900\n" +"POT-Creation-Date: 2010-12-06 22:26+0100\n" +"PO-Revision-Date: 2010-04-13 12:31+0200\n" "Last-Translator: Yoshiki Sawada \n" "Language-Team: 日本語 \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" # not yet -#: postprocess_html.py:45 +#: postprocess_html.py:55 #, python-format msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." msgstr "" @@ -25,7 +26,7 @@ msgstr "" "ています。" # not yet -#: postprocess_html.py:47 +#: postprocess_html.py:57 #, python-format msgid "" "Your suggestions for the documentation " @@ -33,13430 +34,10315 @@ msgid "" "\">bug list." msgstr "" -#: postprocess_html.py:59 +#: postprocess_html.py:69 #, python-format msgid "Other languages: %s." msgstr "他の言語: %s" # not yet -#: postprocess_html.py:60 +#: postprocess_html.py:70 #, python-format msgid "About automatic language selection." msgstr "" -#: postprocess_html.py:316 +#: postprocess_html.py:326 msgid "stable-branch" msgstr "安定版" -#: postprocess_html.py:318 +#: postprocess_html.py:328 msgid "development-branch" msgstr "開発版" -#: texi-gettext.py:63 -msgid "" -"This section has not been translated yet; please refer to the manual in " -"English." -msgstr "" -"このセクションはまだ翻訳されていません。英語で書かれたマニュアルを参照してく" -"ださい。" - -#: translations-status.py:59 +#: translations-status.py:72 msgid "Section titles" msgstr "セクション タイトル" -#: translations-status.py:60 +#: translations-status.py:73 #, python-format -msgid "

    Last updated %s

    \n" -msgstr "

    最終更新日 %s

    \n" +msgid "Last updated %s" +msgstr "最終更新日 %s" -#: translations-status.py:61 +#: translations-status.py:74 msgid "Translators" msgstr "翻訳者" -#: translations-status.py:61 +#: translations-status.py:74 msgid "Translation checkers" msgstr "翻訳点検者" -#: translations-status.py:62 +#: translations-status.py:75 msgid "Translated" msgstr "翻訳済み" -#: translations-status.py:62 +#: translations-status.py:75 msgid "Up to date" msgstr "最新" -#: translations-status.py:63 +#: translations-status.py:76 msgid "Other info" msgstr "その他の情報" -#: translations-status.py:65 +#: translations-status.py:78 msgid "no" msgstr "いいえ" -#: translations-status.py:66 +#: translations-status.py:79 msgid "not translated" msgstr "未翻訳" -#: translations-status.py:68 +#: translations-status.py:81 #, python-format msgid "partially (%(p)d %%)" msgstr "一部 (%(p)d %%)" # not yet -#: translations-status.py:70 +#: translations-status.py:83 #, python-format msgid "partially translated (%(p)d %%)" msgstr "" -#: translations-status.py:71 translations-status.py:73 +#: translations-status.py:84 translations-status.py:86 msgid "yes" msgstr "はい" -#: translations-status.py:72 +#: translations-status.py:85 msgid "translated" msgstr "" -#: translations-status.py:73 translations-status.py:74 +#: translations-status.py:86 translations-status.py:87 msgid "up to date" msgstr "最新" # not yet -#: translations-status.py:75 +#: translations-status.py:88 msgid "partially" msgstr "" # not yet -#: translations-status.py:76 +#: translations-status.py:89 msgid "partially up to date" msgstr "" # not yet -#: translations-status.py:77 +#: translations-status.py:90 msgid "N/A" msgstr "" # not needed to translate -#: translations-status.py:78 +#: translations-status.py:91 msgid "pre-GDP" msgstr "" # not needed to translate -#: translations-status.py:79 +#: translations-status.py:92 msgid "post-GDP" msgstr "" -# not yet #. -*- coding: utf-8 -*- -#. @node in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @node in Documentation/ja/user/lilypond-learning.tely -#. @node in Documentation/ja/user/lilypond-program.tely +#. Documentation/changes.tely:183 (variable) +msgid "coloredheads" +msgstr "" + +#. Documentation/changes.tely:184 (variable) +#, fuzzy +msgid "noclef" +msgstr "音部記号 (clef)" + +# not yet +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi msgid "Top" msgstr "トップ ページ" -#. @top in Documentation/user/lilypond-learning.tely -msgid "GNU LilyPond --- Learning Manual" -msgstr "GNU LilyPond --- 学習マニュアル" - -#. @node in Documentation/user/lilypond-learning.tely -#. @appendix in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @appendix in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @appendix in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @appendix in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @appendix in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @appendix in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @appendix in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @appendix in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -#. @node in Documentation/ja/user/lilypond-learning.tely -#. @appendix in Documentation/ja/user/lilypond-learning.tely -#. @node in Documentation/ja/user/lilypond-program.tely -#. @appendix in Documentation/ja/user/lilypond-program.tely -msgid "LilyPond index" -msgstr "LilyPond インデックス" +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi msgid "Predefined commands" msgstr "定義済みコマンド" # not yet -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Selected Snippets" msgstr "" # pending -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "See also" msgstr "参照" -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -#. @subsubheading in Documentation/ja/user/macros.itexi +#. @subsubheading in Documentation/macros.itexi msgid "Known issues and warnings" msgstr "既知の問題と警告" -#. @node in Documentation/user/preface.itely -#. @unnumbered in Documentation/user/preface.itely -#. @node in Documentation/fr/user/preface.itely -#. @unnumbered in Documentation/fr/user/preface.itely -#. @node in Documentation/es/user/preface.itely -#. @unnumbered in Documentation/es/user/preface.itely -#. @node in Documentation/de/user/preface.itely -#. @unnumbered in Documentation/de/user/preface.itely -#. @node in Documentation/ja/user/preface.itely -#. @unnumbered in Documentation/ja/user/preface.itely -msgid "Preface" -msgstr "序文" - -#. @node in Documentation/user/introduction.itely -#. @chapter in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @chapter in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @chapter in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @chapter in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @chapter in Documentation/ja/user/introduction.itely -msgid "Introduction" -msgstr "導入部" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @section in Documentation/ja/user/introduction.itely -msgid "Background" -msgstr "バックグラウンド" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Engraving" -msgstr "譜刻" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Automated engraving" -msgstr "自動譜刻" +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "LilyPond インデックス" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "What symbols to engrave?" -msgstr "譜刻するシンボルは何か?" +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +#, fuzzy +msgid "Music engraving" +msgstr "譜刻" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Music representation" -msgstr "音楽表記" +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "" -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Example applications" -msgstr "例用例" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @section in Documentation/ja/user/introduction.itely -msgid "About the documentation" -msgstr "このドキュメントについて" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Learning Manual" -msgstr "学習マニュアルについて" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Music Glossary" -msgstr "音楽用語集について" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Notation Reference" -msgstr "表記リファレンスについて" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Application Usage" -msgstr "アプリケーション使用方法について" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Snippet List" -msgstr "断片集について" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "About the Internals Reference" -msgstr "内部リファレンスについて" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -#. @node in Documentation/ja/user/introduction.itely -#. @unnumberedsubsec in Documentation/ja/user/introduction.itely -msgid "Other documentation" -msgstr "その他のドキュメント" - -#. Documentation/user/tutorial.itely:251 (comment) -msgid "set the starting point to middle C" -msgstr "開始位置をミドル C にセットします" +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +#, fuzzy +msgid "Engraving details" +msgstr "譜刻" -#. Documentation/user/tutorial.itely:282 (comment) -msgid "one octave above middle C" -msgstr "ミドル C より 1 オクターブ上から開始します" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "" -#. Documentation/user/tutorial.itely:298 (comment) -msgid "c is 1 staff space up, so is the c above" -msgstr "c は 1 譜表スペース上なので、c は上になります" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "" -#. Documentation/user/tutorial.itely:299 (comment) -msgid "d is 2 up or 5 down, so is the d above" -msgstr "d は 2 譜表スペース上あるいは 5 譜表スペース下なので、d は上になります" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +#, fuzzy +msgid "Ledger lines" +msgstr "延長線 (extender line)" -#. Documentation/user/tutorial.itely:300 (comment) -msgid "e is 3 up or 4 down, so is the e above" -msgstr "e は 3 譜表スペース上あるいは 4 譜表スペース下なので、e は上になります" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "" -#. Documentation/user/tutorial.itely:301 (comment) -msgid "a is 6 up or 1 down, so is the a below" -msgstr "a は 6 譜表スペース上あるいは 1 譜表スペース下なので、a は下になります" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "" -#. Documentation/user/tutorial.itely:302 (comment) -msgid "g is 5 up or 2 down, so is the g below" -msgstr "g は 5 譜表スペース上あるいは 2 譜表スペース下なので、g は下になります" +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Automated engraving" +msgstr "自動譜刻" -#. Documentation/user/tutorial.itely:303 (comment) -msgid "f is 4 up or 3 down, so is the f below" -msgstr "f は 4 譜表スペース上あるいは 3 譜表スペース下なので、f は下になります" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +#, fuzzy +msgid "Beauty contests" +msgstr "コンテキストを作成する" -# not needed to translate -#. Documentation/user/tutorial.itely:1757 (variable) -#. Documentation/user/working.itely:234 (variable) -#. Documentation/user/working.itely:249 (variable) -#. Documentation/user/pitches.itely:1132 (context id) -msgid "violin" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" msgstr "" -# not needed to translate -#. Documentation/user/tutorial.itely:1762 (variable) -#. input/lsr/string-quartet-template-simple.ly:70 (variable) -msgid "cello" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" msgstr "" -# not needed to translate -#. Documentation/user/tutorial.itely:1787 (variable) -msgid "tripletA" +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" msgstr "" -# not needed to translate -#. Documentation/user/tutorial.itely:1788 (variable) -msgid "barA" -msgstr "" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music representation" +msgstr "音楽表記" -# not needed to translate -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -#. input/lsr/measure-counter.ly:26 (context id) -#. input/lsr/measure-counter.ly:33 (context id) -msgid "foo" +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "譜刻するシンボルは何か?" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @chapter in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @chapter in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @chapter in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @chapter in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @chapter in Documentation/ja/user/tutorial.itely -msgid "Tutorial" -msgstr "チュートリアル" +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +#, fuzzy +msgid "Putting LilyPond to work" +msgstr "LilyPond を実行する" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely -msgid "First steps" -msgstr "最初のステップ" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Compiling a file" -msgstr "ファイルをコンパイルする" +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Entering music and viewing output" -msgstr "音楽表記を入力して出力を閲覧する" +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "" -# not needed to translate -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely -msgid "MacOS X" +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" msgstr "" -# not needed to translate -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely -msgid "Windows" +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" msgstr "" -# not needed to translate -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -#. @subsubheading in Documentation/ja/user/tutorial.itely -msgid "UNIX" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Simple notation" +#. @subheading in Documentation/essay/literature.itely +#, fuzzy +msgid "Colorado" +msgstr "色 (color)" + +#. @subheading in Documentation/essay/literature.itely +#, fuzzy +msgid "Computer notation" msgstr "簡単な表記" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @section in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @section in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @section in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @section in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Pitches" -msgstr "音高" +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "譜刻" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "pitch" -msgstr "音高 (pitch)" +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "interval" -msgstr "音程 (interval)" +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "scale" -msgstr "音階 (scale)" +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "middle C" -msgstr "ミドル C (middle C)" +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "octave" -msgstr "オクターブ (octave)" +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3003 (variable) +#. Documentation/learning/fundamental.itely:3058 (variable) +#. Documentation/notation/changing-defaults.itely:3802 (variable) +msgid "padText" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "accidental" -msgstr "臨時記号 (accidental)" +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3844 (variable) +msgid "tempoPadded" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Durations (rhythms)" -msgstr "演奏時間 (リズム)" +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "beam" -msgstr "ビーム (beam)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "duration" -msgstr "演奏時間 (duration)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Introduction to Scheme" +msgstr "調整の紹介" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "whole note" -msgstr "全音符 (whole note)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "half note" -msgstr "半音符 (half note)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Scheme variables" +msgstr "環境変数" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "quarter note" -msgstr "4 分音符 (quarter note)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "dotted note" -msgstr "符点音符 (dotted note)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Rests" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Lists" msgstr "休符" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "rest" -msgstr "休符 (rest)" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Time signature" -msgstr "拍子記号" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "time signature" -msgstr "拍子記号 (time signature)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Clef" -msgstr "音部記号" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "clef" -msgstr "音部記号 (clef)" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "All together" -msgstr "すべてを一緒に" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Working on input files" -msgstr "入力ファイルに取り組む" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "How to read the manual" -msgstr "このマニュアルの読み方" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Clickable examples" -msgstr "クリック可能な例" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely -msgid "Single staff notation" -msgstr "単一譜表表記" +#. @subheading in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "cond" +msgstr "和音 (chord)" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Accidentals and key signatures" -msgstr "臨時記号と調号" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Scheme in LilyPond" +msgstr "LilyPond を実行する" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Accidentals" -msgstr "臨時記号" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "LilyPond Scheme syntax" +msgstr "LilyPond インデックス" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "sharp" -msgstr "シャープ (sharp)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "LilyPond variables" +msgstr "LilyPond インデックス" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "flat" -msgstr "フラット (flat)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "double sharp" -msgstr "ダブル シャープ (double sharp)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Object properties" +msgstr "プロパティのタイプ" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "double flat" -msgstr "ダブル フラット (double flat)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "LilyPond compound variables" +msgstr "環境変数" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Key signatures" -msgstr "調号" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "key signature" -msgstr "調号 (key signature)" +# added by Sawada +# msgid "Contents" +# msgstr "目次" +# added by Sawada +# msgid "Index" +# msgstr "インデックス" +# added by Sawada +# msgid "Up" +# msgstr "上へ" +# msgid "GNU LilyPond --- Learning" +# msgstr "GNU LilyPond --- 学習マニュアル" +# added by Sawada +#. @subheading in Documentation/extending/scheme-tutorial.itely +#, fuzzy +msgid "Extents" +msgstr "目次" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "major" -msgstr "メジャー (major)" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "minor" -msgstr "マイナー (minor)" +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Warning: key signatures and pitches" -msgstr "警告: 調号と音高" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "natural" -msgstr "ナチュラル (natural)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "transposition" -msgstr "移調 (transposition)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "Pitch names" -msgstr "音高名 (Pitch names)" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Ties and slurs" -msgstr "タイとスラー" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Ties" -msgstr "タイ" +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "tie" -msgstr "タイ (tie)" +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Slurs" -msgstr "スラー" +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "slur" -msgstr "スラー (slur)" +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Phrasing slurs" -msgstr "フレージング スラー" +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "phrasing" -msgstr "フレージング (phrasing)" +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Warnings: slurs vs. ties" -msgstr "警告: スラー vs. タイ" +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "articulation" -msgstr "アーティキュレーション (articulation)" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Articulation and dynamics" -msgstr "アーティキュレーションと強弱記号" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Articulations" -msgstr "アーティキュレーション" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Fingerings" -msgstr "運指法記号" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "fingering" -msgstr "運指法記号 (fingering)" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/user/tweaks.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -#. @subheading in Documentation/ja/user/tutorial.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Dynamics" -msgstr "強弱記号" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -#. input/lsr/piano-template-with-centered-dynamics.ly:57 (variable) -msgid "dynamics" -msgstr "強弱記号 (dynamics)" +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "crescendo" -msgstr "クレッシェンド (crescendo)" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "decrescendo" -msgstr "デクレッシェンド (decrescendo)" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Adding text" -msgstr "テキストを追加する" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Automatic and manual beams" -msgstr "自動ビームと手動ビーム" +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Advanced rhythmic commands" +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "On properties" +msgstr "プロパティのタイプ" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "A complete example" +msgstr "クリック可能な例" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "Adapting builtin commands" msgstr "高度なリズム コマンド" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Partial measure" -msgstr "部分小節" +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +#, fuzzy +msgid "LilyPond Scheme interfaces" +msgstr "LilyPond インデックス" + +#. Documentation/learning/tutorial.itely:210 (comment) +msgid "set the starting point to middle C" +msgstr "開始位置をミドル C にセットします" + +#. Documentation/learning/tutorial.itely:241 (comment) +msgid "one octave above middle C" +msgstr "ミドル C より 1 オクターブ上から開始します" + +#. Documentation/learning/tutorial.itely:257 (comment) +msgid "c is 1 staff space up, so is the c above" +msgstr "c は 1 譜表スペース上なので、c は上になります" + +#. Documentation/learning/tutorial.itely:258 (comment) +msgid "d is 2 up or 5 down, so is the d above" +msgstr "d は 2 譜表スペース上あるいは 5 譜表スペース下なので、d は上になります" + +#. Documentation/learning/tutorial.itely:259 (comment) +msgid "e is 3 up or 4 down, so is the e above" +msgstr "e は 3 譜表スペース上あるいは 4 譜表スペース下なので、e は上になります" + +#. Documentation/learning/tutorial.itely:260 (comment) +msgid "a is 6 up or 1 down, so is the a below" +msgstr "a は 6 譜表スペース上あるいは 1 譜表スペース下なので、a は下になります" + +#. Documentation/learning/tutorial.itely:261 (comment) +msgid "g is 5 up or 2 down, so is the g below" +msgstr "g は 5 譜表スペース上あるいは 2 譜表スペース下なので、g は下になります" + +#. Documentation/learning/tutorial.itely:262 (comment) +msgid "f is 4 up or 3 down, so is the f below" +msgstr "f は 4 譜表スペース上あるいは 3 譜表スペース下なので、f は下になります" + +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely +msgid "Tutorial" +msgstr "チュートリアル" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Compiling a file" +msgstr "ファイルをコンパイルする" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Producing output" +msgstr "出力を調整する" + +# not needed to translate +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "MacOS X" +msgstr "" + +# not needed to translate +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Windows" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Command-line" +msgstr "コマンド ラインの使用方法" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +#, fuzzy +msgid "How to write input files" +msgstr "入力ファイルに取り組む" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Simple notation" +msgstr "簡単な表記" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Pitches" +msgstr "音高" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pitch" +msgstr "音高 (pitch)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "interval" +msgstr "音程 (interval)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) +msgid "scale" +msgstr "音階 (scale)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "middle C" +msgstr "ミドル C (middle C)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave" +msgstr "オクターブ (octave)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accidental" +msgstr "臨時記号 (accidental)" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Durations (rhythms)" +msgstr "演奏時間 (リズム)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beam" +msgstr "ビーム (beam)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duration" +msgstr "演奏時間 (duration)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole note" +msgstr "全音符 (whole note)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half note" +msgstr "半音符 (half note)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter note" +msgstr "4 分音符 (quarter note)" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dotted note" +msgstr "符点音符 (dotted note)" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Rests" +msgstr "休符" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rest" +msgstr "休符 (rest)" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Time signature" +msgstr "拍子記号" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time signature" +msgstr "拍子記号 (time signature)" + +#. @subheading in Documentation/learning/tutorial.itely +#, fuzzy +msgid "Tempo marks" +msgstr "バージョン番号" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Clef" +msgstr "音部記号" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "clef" +msgstr "音部記号 (clef)" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "All together" +msgstr "すべてを一緒に" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Working on input files" +msgstr "入力ファイルに取り組む" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Dealing with errors" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +#, fuzzy +msgid "General troubleshooting tips" +msgstr "一般的な提案" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Some common errors" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +#, fuzzy +msgid "How to read the manuals" +msgstr "このマニュアルの読み方" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Clickable examples" +msgstr "クリック可能な例" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "" + +# not needed to translate +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/learning/fundamental.itely:3008 (variable) +msgid "violin" +msgstr "" + +# not needed to translate +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +msgid "cello" +msgstr "" + +# not needed to translate +#. Documentation/learning/common-notation.itely:1255 (variable) +msgid "tripletA" +msgstr "" + +# not needed to translate +#. Documentation/learning/common-notation.itely:1256 (variable) +msgid "barA" +msgstr "" + +# not needed to translate +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +#, fuzzy +msgid "Common notation" +msgstr "簡単な表記" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Single staff notation" +msgstr "単一譜表表記" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Bar checks" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Accidentals and key signatures" +msgstr "臨時記号と調号" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Accidentals" +msgstr "臨時記号" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sharp" +msgstr "シャープ (sharp)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flat" +msgstr "フラット (flat)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double sharp" +msgstr "ダブル シャープ (double sharp)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double flat" +msgstr "ダブル フラット (double flat)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Key signatures" +msgstr "調号" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key signature" +msgstr "調号 (key signature)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major" +msgstr "メジャー (major)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor" +msgstr "マイナー (minor)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warning: key signatures and pitches" +msgstr "警告: 調号と音高" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "natural" +msgstr "ナチュラル (natural)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposition" +msgstr "移調 (transposition)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Pitch names" +msgstr "音高名 (Pitch names)" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Ties and slurs" +msgstr "タイとスラー" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Ties" +msgstr "タイ" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tie" +msgstr "タイ (tie)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Slurs" +msgstr "スラー" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slur" +msgstr "スラー (slur)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Phrasing slurs" +msgstr "フレージング スラー" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrasing" +msgstr "フレージング (phrasing)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warnings: slurs vs. ties" +msgstr "警告: スラー vs. タイ" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "articulation" +msgstr "アーティキュレーション (articulation)" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Articulation and dynamics" +msgstr "アーティキュレーションと強弱記号" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Articulations" +msgstr "アーティキュレーション" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Fingerings" +msgstr "運指法記号" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fingering" +msgstr "運指法記号 (fingering)" + +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "Dynamics" +msgstr "強弱記号" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) +msgid "dynamics" +msgstr "強弱記号 (dynamics)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "crescendo" +msgstr "クレッシェンド (crescendo)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "decrescendo" +msgstr "デクレッシェンド (decrescendo)" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding text" +msgstr "テキストを追加する" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Automatic and manual beams" +msgstr "自動ビームと手動ビーム" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Advanced rhythmic commands" +msgstr "高度なリズム コマンド" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Partial measure" +msgstr "部分小節" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "anacrusis" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) +msgid "Tuplets" +msgstr "連符" + +# not yet +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note value" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triplet" +msgstr "3 連符 (triplet)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Grace notes" +msgstr "グレース ノート" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grace notes" +msgstr "グレース ノート (grace notes)" + +# not yet +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "acciaccatura" +msgstr "" + +# not yet +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "appoggiatura" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Multiple notes at once" +msgstr "同時に演奏する複数の音符" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Music expressions explained" +msgstr "音楽表記についての説明" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Analogy: mathematical expressions" +msgstr "数学的表記との類似" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: multiple staves" +msgstr "同時進行する音楽表記: 複数の譜" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polyphony" +msgstr "多声 (polyphony)" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: single staff" +msgstr "同時進行する音楽表記: 単一の譜表" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Multiple staves" +msgstr "複数の譜" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Staff groups" +msgstr "譜表グループ" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brace" +msgstr "ブレース (brace)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Combining notes into chords" +msgstr "音符を組み合わせて和音にする" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chord" +msgstr "和音 (chord)" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Single staff polyphony" +msgstr "単一譜表での多声" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Songs" +msgstr "歌曲" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Setting simple songs" +msgstr "簡単な歌詞をセットする" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyrics" +msgstr "歌詞 (lyrics)" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Aligning lyrics to a melody" +msgstr "歌詞を旋律に揃える" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma" +msgstr "メリスマ (melisma)" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "extender line" +msgstr "延長線 (extender line)" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Lyrics to multiple staves" +msgstr "複数の譜への歌詞" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Final touches" +msgstr "仕上げ" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Organizing pieces with variables" +msgstr "変数を用いて楽曲を編成する" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding titles" +msgstr "タイトルを付け加える" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Absolute note names" +msgstr "絶対音符名" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "After the tutorial" +msgstr "このチュートリアルの後にすべきこと" + +# not needed to translate +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:73 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:86 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +msgid "singer" +msgstr "" + +# not needed to translate +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) +msgid "vocal" +msgstr "" + +# not needed to translate +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) +msgid "piano" +msgstr "" + +# not needed to translate +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2592 (variable) +#. Documentation/learning/fundamental.itely:2654 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) +msgid "upper" +msgstr "" + +# not needed to translate +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2599 (variable) +#. Documentation/learning/fundamental.itely:2655 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) +msgid "lower" +msgstr "" + +# not needed to translate +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) +msgid "melody" +msgstr "" + +# not needed to translate +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) +msgid "text" +msgstr "" + +# not needed to translate +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) +msgid "main" +msgstr "" + +#. Documentation/learning/fundamental.itely:629 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:639 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:654 (comment) +msgid "Voice \\\"1\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:659 (comment) +msgid "Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) +msgid "Main voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:684 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:708 (comment) +msgid "Bar 1" +msgstr "" + +#. Documentation/learning/fundamental.itely:719 (comment) +msgid "Bar 2" +msgstr "" + +#. Documentation/learning/fundamental.itely:720 (comment) +msgid "Voice 1 continues" +msgstr "Voice 1 の続き" + +#. Documentation/learning/fundamental.itely:723 (comment) +msgid "Voice 2 continues" +msgstr "Voice 2 の続き" + +#. Documentation/learning/fundamental.itely:898 (comment) +msgid "Voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:900 (comment) +msgid "Voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:902 (comment) +msgid "Omit Voice three" +msgstr "Voice three を省略" + +#. Documentation/learning/fundamental.itely:903 (comment) +msgid "Voice four" +msgstr "" + +#. Documentation/learning/fundamental.itely:1002 (comment) +msgid "Default behavior or behavior after \\oneVoice" +msgstr "デフォルトの振る舞い方、または、\\oneVoice の後での振る舞い方" + +#. Documentation/learning/fundamental.itely:1040 (comment) +msgid "The following notes are monophonic" +msgstr "以下の音符は単声" + +#. Documentation/learning/fundamental.itely:1042 (comment) +msgid "Start simultaneous section of three voices" +msgstr "3 つのボイスからなる同時進行セクションの開始" + +#. Documentation/learning/fundamental.itely:1044 (comment) +msgid "Continue the main voice in parallel" +msgstr "並列 (同時進行) 状態での main ボイスの続き" + +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) +msgid "Initiate second voice" +msgstr "second ボイスの開始" + +#. Documentation/learning/fundamental.itely:1048 (comment) +#, fuzzy +msgid "Set stems, etc., down" +msgstr "ステムなどを下向きにセット" + +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) +msgid "Initiate third voice" +msgstr "third ボイスの開始" + +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) +msgid "Set stems, etc, up" +msgstr "ステムなどを上向きにセット" + +#. Documentation/learning/fundamental.itely:1103 (comment) +msgid "Initiate first voice" +msgstr "first ボイスの開始" + +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "ステムなどを下向きにセット" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2303 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) +msgid "one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/learning/fundamental.itely:2569 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:64 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:63 (variable) +msgid "global" +msgstr "" + +#. Documentation/learning/fundamental.itely:1244 (variable) +msgid "SopOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1247 (variable) +msgid "SopOneLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1250 (variable) +msgid "SopTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1253 (variable) +msgid "SopTwoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1260 (context id) +msgid "SopOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1269 (context id) +msgid "SopTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/fundamental.itely:2901 (variable) +msgid "keyTime" +msgstr "" + +#. Documentation/learning/fundamental.itely:1303 (variable) +msgid "SopMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) +msgid "AltoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) +msgid "TenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) +msgid "BassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) +msgid "VerseOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) +msgid "VerseTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) +msgid "VerseThree" +msgstr "" + +#. Documentation/learning/fundamental.itely:1314 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) +msgid "VerseFour" +msgstr "" + +#. Documentation/learning/fundamental.itely:1321 (context id) +msgid "Sop" +msgstr "" + +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1141 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) +msgid "Alto" +msgstr "" + +#. Documentation/learning/fundamental.itely:1330 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1143 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) +msgid "Tenor" +msgstr "" + +#. Documentation/learning/fundamental.itely:1331 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1148 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) +msgid "Bass" +msgstr "" + +#. Documentation/learning/fundamental.itely:1475 (comment) +msgid "start of single compound music expression" +msgstr "単一の複合音楽表記の開始" + +#. Documentation/learning/fundamental.itely:1476 (comment) +msgid "start of simultaneous staves section" +msgstr "同時進行する譜セクションの開始" + +#. Documentation/learning/fundamental.itely:1478 (comment) +msgid "create RH staff" +msgstr "RH (右手) 譜表の作成" + +#. Documentation/learning/fundamental.itely:1481 (comment) +msgid "create voice for RH notes" +msgstr "RH 音符のためのボイスを作成" + +#. Documentation/learning/fundamental.itely:1482 (comment) +msgid "start of RH notes" +msgstr "RH 音符の開始" + +#. Documentation/learning/fundamental.itely:1485 (comment) +msgid "end of RH notes" +msgstr "RH 音符の終了" + +#. Documentation/learning/fundamental.itely:1486 (comment) +msgid "end of RH voice" +msgstr "RH ボイスの終了" + +#. Documentation/learning/fundamental.itely:1487 (comment) +msgid "end of RH staff" +msgstr "RH 譜表の終了" + +#. Documentation/learning/fundamental.itely:1488 (comment) +msgid "create LH staff; needs two simultaneous voices" +msgstr "LH (左手) 譜表の作成。2 つの同時進行するボイスが必要" + +#. Documentation/learning/fundamental.itely:1491 (comment) +msgid "create LH voice one" +msgstr "LH voice one の作成" + +#. Documentation/learning/fundamental.itely:1493 (comment) +msgid "start of LH voice one notes" +msgstr "LH voice one の音符の開始" + +#. Documentation/learning/fundamental.itely:1496 (comment) +msgid "end of LH voice one notes" +msgstr "LH voice one 音符の終了" + +#. Documentation/learning/fundamental.itely:1497 (comment) +msgid "end of LH voice one" +msgstr "LH voice one の終了" + +#. Documentation/learning/fundamental.itely:1498 (comment) +msgid "create LH voice two" +msgstr "LH voice two の作成" + +#. Documentation/learning/fundamental.itely:1500 (comment) +msgid "start of LH voice two notes" +msgstr "LH voice two 音符の開始" + +#. Documentation/learning/fundamental.itely:1503 (comment) +msgid "end of LH voice two notes" +msgstr "LH voice two 音符の終了" + +#. Documentation/learning/fundamental.itely:1504 (comment) +msgid "end of LH voice two" +msgstr "LH voice two の終了" + +#. Documentation/learning/fundamental.itely:1505 (comment) +msgid "end of LH staff" +msgstr "LH 譜表の終了" + +#. Documentation/learning/fundamental.itely:1506 (comment) +msgid "end of simultaneous staves section" +msgstr "同時進行する譜セクションの終了" + +#. Documentation/learning/fundamental.itely:1507 (comment) +msgid "end of single compound music expression" +msgstr "単一の複合音楽表記の終了" + +#. Documentation/learning/fundamental.itely:1726 (comment) +msgid "Wrong!" +msgstr "間違い!" + +#. Documentation/learning/fundamental.itely:1812 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) +msgid "make note heads smaller" +msgstr "音符の玉を小さくする" + +#. Documentation/learning/fundamental.itely:1815 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) +msgid "make note heads larger" +msgstr "音符の玉を大きくする" + +#. Documentation/learning/fundamental.itely:1818 (comment) +#. Documentation/learning/fundamental.itely:1993 (comment) +msgid "return to default size" +msgstr "デフォルトのサイズに戻す" + +#. Documentation/learning/fundamental.itely:2282 (variable) +#. Documentation/learning/fundamental.itely:2570 (variable) +#. Documentation/notation/input.itely:1133 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) +msgid "sopranoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2289 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) +msgid "sopranoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:2293 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) +msgid "celloMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2574 (variable) +msgid "sopranoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) +msgid "altoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2581 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:79 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:78 (variable) +msgid "altoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2582 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) +msgid "tenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2586 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:85 (variable) +msgid "tenorWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2587 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) +msgid "bassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2591 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:92 (variable) +msgid "bassWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2608 (comment) +msgid "combine ChoirStaff and PianoStaff in parallel" +msgstr "ChoirStaff と PianoStaff を並列に組み合わせる" + +#. Documentation/learning/fundamental.itely:2610 (context id) +#. Documentation/learning/fundamental.itely:2612 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (context id) +msgid "sopranos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2620 (context id) +#. Documentation/learning/fundamental.itely:2622 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:103 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:104 (context id) +msgid "altos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2630 (context id) +#. Documentation/learning/fundamental.itely:2632 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:113 (context id) +msgid "tenors" +msgstr "" + +#. Documentation/learning/fundamental.itely:2640 (context id) +#. Documentation/learning/fundamental.itely:2642 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:110 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:117 (context id) +msgid "basses" +msgstr "" + +#. Documentation/learning/fundamental.itely:2650 (comment) +msgid "end ChoirStaff" +msgstr "ChoirStaff の終了" + +#. Documentation/learning/fundamental.itely:2902 (variable) +msgid "ManualOneVoiceOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2906 (variable) +msgid "ManualOneVoiceTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2910 (variable) +msgid "ManualTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2914 (variable) +msgid "PedalOrganMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2920 (comment) +msgid "PianoStaff and Pedal Staff must be simultaneous" +msgstr "PianoStaff と Pedal Staff は同時進行でなければならない" + +#. Documentation/learning/fundamental.itely:2922 (context id) +msgid "ManualOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:2923 (comment) +#, fuzzy +msgid "set key and time signature" +msgstr "拍子記号 (time signature)" + +#. Documentation/learning/fundamental.itely:2933 (comment) +msgid "end ManualOne Staff context" +msgstr "ManualOne Staff コンテキストの終了" + +#. Documentation/learning/fundamental.itely:2934 (context id) +msgid "ManualTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:2943 (comment) +msgid "end ManualTwo Staff context" +msgstr "ManualTwo Staff コンテキストの終了" + +#. Documentation/learning/fundamental.itely:2944 (comment) +msgid "end PianoStaff context" +msgstr "PianoStaff コンテキストの終了" + +#. Documentation/learning/fundamental.itely:2945 (context id) +msgid "PedalOrgan" +msgstr "" + +#. Documentation/learning/fundamental.itely:2951 (comment) +msgid "end PedalOrgan Staff context" +msgstr "PedalOrgan Staff コンテキストの終了" + +#. Documentation/learning/fundamental.itely:2953 (comment) +msgid "end Score context" +msgstr "Score コンテキストの終了" + +#. Documentation/learning/fundamental.itely:2969 (variable) +msgid "hornNotes" +msgstr "" + +#. Documentation/learning/fundamental.itely:2981 (variable) +msgid "fragmentA" +msgstr "" + +#. Documentation/learning/fundamental.itely:2982 (variable) +msgid "fragmentB" +msgstr "" + +#. Documentation/learning/fundamental.itely:3001 (variable) +msgid "dolce" +msgstr "" + +#. Documentation/learning/fundamental.itely:3004 (variable) +msgid "fthenp" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely +msgid "Fundamental concepts" +msgstr "基礎となるコンセプト" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "How LilyPond input files work" +msgstr "LilyPond 入力ファイルの仕組み" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Introduction to the LilyPond file structure" +msgstr "LilyPond ファイル構造の紹介" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Score is a (single) compound musical expression" +msgstr "Score は (単一の) 複合的な音楽表記" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Nesting music expressions" +msgstr "音楽表記のネスト" + +# not yet +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ossia" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "On the un-nestedness of brackets and ties" +msgstr "ネストされない括弧とタイ" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Voices contain music" +msgstr "音楽を保持するボイス" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "I'm hearing Voices" +msgstr "私はボイスを聴いている" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Explicitly instantiating voices" +msgstr "ボイスの明示的なインスタンス化" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Note columns" +msgstr "音符列" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Voices and vocals" +msgstr "ボイスとボーカル" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Contexts and engravers" +msgstr "コンテキストとエングラーバ" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Contexts explained" +msgstr "コンテキストの説明" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Creating contexts" +msgstr "コンテキストを作成する" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Engravers explained" +msgstr "エングラーバの説明" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Modifying context properties" +msgstr "コンテキスト プロパティを変更する" + +#. @subsubheading in Documentation/learning/fundamental.itely +#, fuzzy +msgid "Setting context properties with @code{\\\\with}" +msgstr "@code{\\with} を用いてコンテキスト プロパティを設定する" + +#. @subsubheading in Documentation/learning/fundamental.itely +#, fuzzy +msgid "Setting context properties with @code{\\\\context}" +msgstr "@code{\\context} を用いてコンテキスト プロパティを設定する" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Adding and removing engravers" +msgstr "エングラーバを追加 / 削除する" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing a single context" +msgstr "単一のコンテキストを変更する" + +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ambitus" +msgstr "音域 (ambitus)" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing all contexts of the same type" +msgstr "同じタイプのコンテキストをすべて変更する" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Extending the templates" +msgstr "テンプレートを拡張する" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Soprano and cello" +msgstr "ソプラノとチェロ" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Four-part SATB vocal score" +msgstr "4 パート SATB ボーカル譜" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Building a score from scratch" +msgstr "ゼロから楽譜を構築する" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "変数と関数を用いて入力の手間を省く" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "楽譜とパート" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "後に続くすべてのスラーの太さを 1.2 から 5.0 に増やします" + +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) +msgid "Increase thickness of immediately following slur only" +msgstr "直後にあるスラーの太さだけを増やします" + +#. Documentation/learning/tweaks.itely:744 (comment) +msgid "Revert thickness of all following slurs to default of 1.2" +msgstr "後に続くすべてのスラーの太さをデフォルトの 1.2 に戻します" + +#. Documentation/learning/tweaks.itely:1421 (comment) +msgid "Don't print clefs in this staff" +msgstr "この譜表には音部記号を譜刻しません" + +#. Documentation/learning/tweaks.itely:1423 (comment) +msgid "Don't print time signatures in this staff" +msgstr "この譜表には拍子記号を譜刻しません" + +#. Documentation/learning/tweaks.itely:1487 (comment) +msgid "Reduce all font sizes by ~24%" +msgstr "すべてのフォント サイズを約 24% 減らします" + +#. Documentation/learning/tweaks.itely:1554 (comment) +msgid "Reduce stem length and line spacing to match" +msgstr "釣り合いをとるためにステムの長さと譜表線の間隔を減らします" + +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) +msgid "Set details for later Text Spanner" +msgstr "後のテキスト スパナのための詳細を設定" + +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) +msgid "Place dynamics above staff" +msgstr "譜表の上に強弱記号を配置" + +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) +msgid "Start Ottava Bracket" +msgstr "オッターバ囲みの開始" + +#. Documentation/learning/tweaks.itely:2006 (comment) +#, fuzzy +msgid "Add Dynamic Text and hairpin" +msgstr "強弱記号テキストの追加" + +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) +msgid "Add Text Script" +msgstr "テキスト スクリプトの追加" + +#. Documentation/learning/tweaks.itely:2012 (comment) +#, fuzzy +msgid "Add Dynamic Text and terminate hairpin" +msgstr "強弱記号線スパナの追加" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) +msgid "Stop Ottava Bracket" +msgstr "オッターバ囲みの終了" + +#. Documentation/learning/tweaks.itely:2072 (comment) +msgid "Place following Ottava Bracket below Text Spanners" +msgstr "以下のオッターバ囲みをテキスト スパナの下に配置" + +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +msgid "Add Dynamic Text" +msgstr "強弱記号テキストの追加" + +#. Documentation/learning/tweaks.itely:2079 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "強弱記号線スパナの追加" + +#. Documentation/learning/tweaks.itely:2161 (comment) +msgid "Cause notes to space out to accommodate text" +msgstr "テキストに合わせて音符の間隔を広げます" + +#. Documentation/learning/tweaks.itely:2184 (comment) +msgid "This markup is short enough to fit without collision" +msgstr "このマークアップは短いため、衝突を起こさずにぴったりと収まります" + +#. Documentation/learning/tweaks.itely:2188 (comment) +msgid "This is too long to fit, so it is displaced upwards" +msgstr "このマークアップは長いため、上の方に再配置されます" + +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) +msgid "Turn off collision avoidance" +msgstr "衝突回避を off にします" + +#. Documentation/learning/tweaks.itely:2199 (comment) +msgid "and turn on textLengthOn" +msgstr "今度は textLengthOn を on にします" + +#. Documentation/learning/tweaks.itely:2200 (comment) +msgid "Spaces at end are honored" +msgstr "テキスト終端のスペースは尊重されます" + +#. Documentation/learning/tweaks.itely:2307 (comment) +msgid "Extend width by 1 staff space" +msgstr "幅を 1 譜表スペース広げます" + +#. Documentation/learning/tweaks.itely:2587 (comment) +#, fuzzy +msgid "This will not work, see below" +msgstr "これは機能しません。以下を見てください:" + +#. Documentation/learning/tweaks.itely:2591 (comment) +#, fuzzy +msgid "This works" +msgstr "これは機能します:" + +#. Documentation/learning/tweaks.itely:2627 (variable) +#, fuzzy +msgid "sesquisharp" +msgstr "シャープ (sharp)" + +#. Documentation/learning/tweaks.itely:2630 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "" + +#. Documentation/learning/tweaks.itely:2635 (comment) +msgid "This improves the spacing" +msgstr "" + +#. Documentation/learning/tweaks.itely:2675 (comment) +msgid "Extend width by 1 unit" +msgstr "幅を 1 単位 (譜表スペース) 広げます" + +#. Documentation/learning/tweaks.itely:2677 (comment) +msgid "Align dynamics to a base line 2 units above staff" +msgstr "強弱記号を譜表から 2 単位上のベース ラインに揃えます" + +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) +msgid "rhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) +msgid "Start polyphonic section of four voices" +msgstr "4 つのボイスを持つ多声部セクションの開始" + +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +#, fuzzy +msgid "continuation of main voice" +msgstr "first ボイスの開始" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) +msgid "lhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1154 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) +msgid "RH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1160 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) +msgid "LH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) +msgid "Move the c2 out of the main note column so the merge will work" +msgstr "マージが機能するように、c2 をメインの音符列の外に移動させます" + +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) +msgid "Stem on the d2 must be down to permit merging" +msgstr "マージを可能にするため、d2 のステムは下向きでなければなりません" + +#. Documentation/learning/tweaks.itely:3368 (comment) +msgid "Reposition the c2 to the right of the merged note" +msgstr "c2 をマージされた音符の右側に再配置します" + +#. Documentation/learning/tweaks.itely:3379 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) +msgid "Visible tempo marking" +msgstr "可視のテンポ記号" + +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) +msgid "Invisible tempo marking to lengthen fermata in MIDI" +msgstr "MIDI の中でフェルマータの演奏時間を伸ばすための不可視のテンポ記号" + +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) +msgid "New tempo for next section" +msgstr "次のセクションのための新しいテンポ" + +#. Documentation/learning/tweaks.itely:3604 (variable) +msgid "emphasize" +msgstr "" + +#. Documentation/learning/tweaks.itely:3609 (variable) +msgid "normal" +msgstr "" + +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) +msgid "SopranoMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1139 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) +msgid "Soprano" +msgstr "" + +#. Documentation/learning/tweaks.itely:3672 (variable) +msgid "mpdolce" +msgstr "" + +#. Documentation/learning/tweaks.itely:3679 (variable) +msgid "inst" +msgstr "" + +#. Documentation/learning/tweaks.itely:4184 (comment) +msgid "Arrange to obtain color from color-notehead procedure" +msgstr "color-notehead プロシージャからカラーを取得するための手続き" + +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely +msgid "Tweaking output" +msgstr "出力を調整する" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Tweaking basics" +msgstr "調整の基本" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Introduction to tweaks" +msgstr "調整の紹介" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Objects and interfaces" +msgstr "オブジェクトとインタフェイス" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Naming conventions of objects and properties" +msgstr "オブジェクトとプロパティの命名規約" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Tweaking methods" +msgstr "調整手段" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "The Internals Reference manual" +msgstr "内部リファレンス マニュアル" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties of layout objects" +msgstr "レイアウト オブジェクトのプロパティ" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Finding the context" +msgstr "コンテキストを見つけ出す" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Overriding once only" +msgstr "1 回だけオーバライドする" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Reverting" +msgstr "元に戻す" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties found in interfaces" +msgstr "インタフェイスの中で見つかるプロパティ" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Specifying the context in lyric mode" +msgstr "歌詞モードの中でコンテキストを指定する" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Types of properties" +msgstr "プロパティのタイプ" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Appearance of objects" +msgstr "オブジェクトの見た目" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Visibility and color of objects" +msgstr "オブジェクトの可視性と色" + +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "stencil" +msgstr "ステンシル (stencil)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "break-visibility" +msgstr "可視性の破棄 (break-visibility)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "transparent" +msgstr "透過性 (transparent)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "color" +msgstr "色 (color)" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Size of objects" +msgstr "オブジェクトのサイズ" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Length and thickness of objects" +msgstr "オブジェクトの長さと太さ" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Placement of objects" +msgstr "オブジェクトの配置" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Automatic behavior" +msgstr "自動配置" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Within-staff objects" +msgstr "譜表内部オブジェクト" + +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely +msgid "Fingering" +msgstr "運指法記号 (Fingering)" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Outside-staff objects" +msgstr "譜表外部オブジェクト" + +#. @subheading in Documentation/learning/tweaks.itely +#, fuzzy +msgid "\\\\textLengthOn" +msgstr "今度は textLengthOn を on にします" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Grob sizing" +msgstr "グラフィカル オブジェクトのサイズ" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Collisions of objects" +msgstr "オブジェクトの衝突" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Moving objects" +msgstr "オブジェクトを移動させる" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Fixing overlapping notation" +msgstr "表記の重なりを修正する" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "padding property" +msgstr "padding プロパティ" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "anacrusis" -msgstr "" +#. @subheading in Documentation/learning/tweaks.itely +#, fuzzy +msgid "right-padding" +msgstr "left-padding と right-padding" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Tuplets" -msgstr "連符" +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-padding property" +msgstr "staff-padding プロパティ" -# not yet -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "note value" -msgstr "" +#. @subheading in Documentation/learning/tweaks.itely +msgid "self-alignment-X property" +msgstr "self-alignment-X プロパティ" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "triplet" -msgstr "3 連符 (triplet)" +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-position property" +msgstr "staff-position プロパティ" -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Grace notes" -msgstr "グレース ノート" +#. @subheading in Documentation/learning/tweaks.itely +msgid "extra-offset property" +msgstr "extra-offset プロパティ" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "grace notes" -msgstr "グレース ノート (grace notes)" +#. @subheading in Documentation/learning/tweaks.itely +msgid "positions property" +msgstr "positions プロパティ" -# not yet -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "acciaccatura" -msgstr "" +#. @subheading in Documentation/learning/tweaks.itely +msgid "force-hshift property" +msgstr "force-hshift プロパティ" -# not yet -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "appoggiatura" -msgstr "" +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Real music example" +msgstr "実際の音楽からの例" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely -msgid "Multiple notes at once" -msgstr "同時に演奏する複数の音符" +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Further tweaking" +msgstr "更なる調整" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Music expressions explained" -msgstr "音楽表記についての説明" +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other uses for tweaks" +msgstr "調整のその他の使用方法" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Analogy: mathematical expressions" -msgstr "数学的表記との類似" +#. @subheading in Documentation/learning/tweaks.itely +msgid "Tying notes across voices" +msgstr "異なるボイスの中にある音符をタイで結ぶ" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Simultaneous music expressions: multiple staves" -msgstr "同時進行する音楽表記: 複数の譜" +#. @subheading in Documentation/learning/tweaks.itely +msgid "Simulating a fermata in MIDI" +msgstr "MIDI でフェルマータをシミュレートする" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "polyphony" -msgstr "多声 (polyphony)" +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Using variables for tweaks" +msgstr "調整のために変数を使用する" -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/ja/user/tutorial.itely -msgid "Simultaneous music expressions: single staff" -msgstr "同時進行する音楽表記: 単一の譜表" +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "スタイル シート" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Multiple staves" -msgstr "複数の譜" +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other sources of information" +msgstr "その他の情報源" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Staff groups" -msgstr "譜表グループ" +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Avoiding tweaks with slower processing" +msgstr "処理に時間のかかる調整を避ける" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/staff.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "brace" -msgstr "ブレース (brace)" +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Advanced tweaks with Scheme" +msgstr "Scheme を用いた高度な調整" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Combining notes into chords" -msgstr "音符を組み合わせて和音にする" +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely +msgid "Templates" +msgstr "テンプレート" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/de/user/chords.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "chord" -msgstr "和音 (chord)" +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Single staff" +msgstr "単一の譜表" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Single staff polyphony" -msgstr "単一譜表での多声" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes only" +msgstr "音符のみ" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely -msgid "Songs" -msgstr "歌曲" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and lyrics" +msgstr "音符と歌詞" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Setting simple songs" -msgstr "簡単な歌詞をセットする" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and chords" +msgstr "音符とコード" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "lyrics" -msgstr "歌詞 (lyrics)" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes, lyrics, and chords." +msgstr "音符、歌詞それにコード" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Aligning lyrics to a melody" -msgstr "歌詞を旋律に揃える" +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Piano templates" +msgstr "ピアノ テンプレート" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "melisma" -msgstr "メリスマ (melisma)" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo piano" +msgstr "ソロ ピアノ" -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/ja/user/tutorial.itely -msgid "extender line" -msgstr "延長線 (extender line)" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano and melody with lyrics" +msgstr "ピアノと歌詞を持つ旋律" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Lyrics to multiple staves" -msgstr "複数の譜への歌詞" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered lyrics" +msgstr "中央に歌詞を持つピアノ譜" -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @section in Documentation/ja/user/tutorial.itely -msgid "Final touches" -msgstr "仕上げ" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered dynamics" +msgstr "中央に強弱記号を持つピアノ譜" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Organizing pieces with variables" -msgstr "変数を用いて楽曲を編成する" +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet" +msgstr "弦楽四重奏" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Version number" -msgstr "バージョン番号" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet parts" +msgstr "弦楽四重奏パート" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Adding titles" -msgstr "タイトルを付け加える" +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Vocal ensembles" +msgstr "合唱" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "Absolute note names" -msgstr "絶対音符名" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score" +msgstr "SATB ボーカル譜" -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/ja/user/tutorial.itely -#. @subsection in Documentation/ja/user/tutorial.itely -msgid "After the tutorial" -msgstr "このチュートリアルの後にすべきこと" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score and automatic piano reduction" +msgstr "SATB ボーカル譜と自動ピアノ譜" -# not needed to translate -#. Documentation/user/fundamental.itely:324 (context id) -#. Documentation/user/fundamental.itely:367 (context id) -#. input/lsr/piano-template-with-centered-lyrics.ly:58 (context id) -msgid "singer" -msgstr "" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB with aligned contexts" +msgstr "整列されたコンテキストを持つ SATB" -# not needed to translate -#. Documentation/user/fundamental.itely:325 (context id) -#. Documentation/user/fundamental.itely:368 (context id) -msgid "vocal" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" msgstr "" -# not needed to translate -#. Documentation/user/fundamental.itely:328 (context id) -#. Documentation/user/fundamental.itely:371 (context id) -#. input/lsr/jazz-combo-template.ly:220 (variable) -#. input/lsr/jazz-combo-template.ly:280 (context id) -msgid "piano" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" msgstr "" -# not needed to translate -#. Documentation/user/fundamental.itely:329 (context id) -#. Documentation/user/fundamental.itely:362 (variable) -#. Documentation/user/fundamental.itely:372 (context id) -#. Documentation/user/fundamental.itely:2669 (variable) -#. Documentation/user/fundamental.itely:2711 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:19 (variable) -#. input/lsr/jazz-combo-template.ly:223 (context id) -#. input/lsr/piano-template-simple.ly:30 (variable) -#. input/lsr/piano-template-simple.ly:49 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:47 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:36 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:58 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:47 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:68 (context id) -#. input/lsr/polyphony-in-tablature.ly:41 (variable) -#. input/lsr/polyphony-in-tablature.ly:59 (context id) -#. input/lsr/polyphony-in-tablature.ly:63 (context id) -msgid "upper" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Hymn tunes" msgstr "" -# not needed to translate -#. Documentation/user/fundamental.itely:330 (context id) -#. Documentation/user/fundamental.itely:363 (variable) -#. Documentation/user/fundamental.itely:373 (context id) -#. Documentation/user/fundamental.itely:2676 (variable) -#. Documentation/user/fundamental.itely:2712 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:23 (variable) -#. input/lsr/jazz-combo-template.ly:224 (context id) -#. input/lsr/piano-template-simple.ly:38 (variable) -#. input/lsr/piano-template-simple.ly:50 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:52 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:44 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:60 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:55 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:69 (context id) -#. input/lsr/polyphony-in-tablature.ly:48 (variable) -#. input/lsr/polyphony-in-tablature.ly:60 (context id) -#. input/lsr/polyphony-in-tablature.ly:64 (context id) -msgid "lower" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" msgstr "" -# not needed to translate -#. Documentation/user/fundamental.itely:360 (variable) -#. Documentation/user/simultaneous.itely:241 (context id) -#. Documentation/user/vocal.itely:578 (context id) -#. Documentation/user/vocal.itely:813 (context id) -#. Documentation/user/vocal.itely:834 (context id) -#. Documentation/user/vocal.itely:1234 (variable) -#. Documentation/user/vocal.itely:1276 (variable) -#. Documentation/user/ancient.itely:2413 (context id) -#. Documentation/user/ancient.itely:2452 (context id) -#. Documentation/user/changing-defaults.itely:483 (variable) -#. Documentation/user/changing-defaults.itely:490 (context id) -#. Documentation/user/changing-defaults.itely:500 (context id) -#. Documentation/user/changing-defaults.itely:505 (context id) -#. Documentation/user/changing-defaults.itely:522 (variable) -#. Documentation/user/changing-defaults.itely:540 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:34 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:45 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:52 (context id) -#. input/lsr/demo-midiinstruments.ly:28 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:28 (context id) -#. input/lsr/guitar-strum-rhythms.ly:65 (context id) -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:35 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:35 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:35 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:36 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:49 (variable) -#. input/lsr/single-staff-template-with-only-notes.ly:41 (variable) -#. input/lsr/vertically-centered-common-lyrics.ly:44 (variable) -msgid "melody" -msgstr "" +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#, fuzzy +msgid "Orchestral templates" +msgstr "ピアノ テンプレート" -# not needed to translate -#. Documentation/user/fundamental.itely:361 (variable) -#. Documentation/user/vocal.itely:1061 (variable) -#. Documentation/user/vocal.itely:1239 (variable) -#. Documentation/user/vocal.itely:1280 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:52 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:43 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:43 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:57 (variable) -msgid "text" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Orchestra, choir and piano" msgstr "" -# not needed to translate -#. Documentation/user/fundamental.itely:443 (context id) -#. Documentation/user/staff.itely:530 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (comment) -msgid "main" +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Ancient notation templates" msgstr "" -#. Documentation/user/fundamental.itely:632 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Transcription of mensural music" msgstr "" -#. Documentation/user/fundamental.itely:642 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Gregorian transcription template" msgstr "" -#. Documentation/user/fundamental.itely:657 (comment) -msgid "Voice \\\"1\\\"" -msgstr "" +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#, fuzzy +msgid "Other templates" +msgstr "ピアノ テンプレート" -#. Documentation/user/fundamental.itely:662 (comment) -msgid "Voice \\\"2\\\"" +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Jazz combo" msgstr "" -#. Documentation/user/fundamental.itely:685 (comment) -#. Documentation/user/fundamental.itely:709 (comment) -msgid "Main voice" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" msgstr "" -#. Documentation/user/fundamental.itely:687 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" msgstr "" -#. Documentation/user/fundamental.itely:711 (comment) -#. Documentation/user/simultaneous.itely:738 (comment) -#. Documentation/user/simultaneous.itely:763 (comment) -#. Documentation/user/simultaneous.itely:790 (comment) -msgid "Bar 1" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" msgstr "" -#. Documentation/user/fundamental.itely:722 (comment) -#. Documentation/user/simultaneous.itely:743 (comment) -#. Documentation/user/simultaneous.itely:768 (comment) -#. Documentation/user/simultaneous.itely:796 (comment) -msgid "Bar 2" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "accelerando" +msgstr "クレッシェンド (crescendo)" -#. Documentation/user/fundamental.itely:723 (comment) -msgid "Voice 1 continues" -msgstr "Voice 1 の続き" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "" -#. Documentation/user/fundamental.itely:726 (comment) -msgid "Voice 2 continues" -msgstr "Voice 2 の続き" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "" -#. Documentation/user/fundamental.itely:900 (comment) -msgid "Voice one" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" msgstr "" -#. Documentation/user/fundamental.itely:902 (comment) -msgid "Voice two" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" msgstr "" -#. Documentation/user/fundamental.itely:904 (comment) -msgid "Omit Voice three" -msgstr "Voice three を省略" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "" -#. Documentation/user/fundamental.itely:905 (comment) -msgid "Voice four" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" msgstr "" -#. Documentation/user/fundamental.itely:1004 (comment) -msgid "Default behavior or behavior after \\oneVoice" -msgstr "デフォルトの振る舞い方、または、\\oneVoice の後での振る舞い方" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "alteration" +msgstr "演奏時間 (duration)" -#. Documentation/user/fundamental.itely:1042 (comment) -msgid "The following notes are monophonic" -msgstr "以下の音符は単声" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "" -#. Documentation/user/fundamental.itely:1044 (comment) -msgid "Start simultaneous section of three voices" -msgstr "3 つのボイスからなる同時進行セクションの開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "alto clef" +msgstr "音部記号 (clef)" -#. Documentation/user/fundamental.itely:1046 (comment) -msgid "Continue the main voice in parallel" -msgstr "並列 (同時進行) 状態での main ボイスの続き" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ancient minor scale" +msgstr "臨時記号" -#. Documentation/user/fundamental.itely:1048 (comment) -#. Documentation/user/fundamental.itely:1110 (comment) -msgid "Initiate second voice" -msgstr "second ボイスの開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "" -#. Documentation/user/fundamental.itely:1050 (comment) -#. Documentation/user/fundamental.itely:1112 (comment) -msgid "Set stems, etc, down" -msgstr "ステムなどを下向きにセット" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "" -#. Documentation/user/fundamental.itely:1054 (comment) -#. Documentation/user/fundamental.itely:1116 (comment) -msgid "Initiate third voice" -msgstr "third ボイスの開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ascending interval" +msgstr "音程 (interval)" -#. Documentation/user/fundamental.itely:1056 (comment) -#. Documentation/user/fundamental.itely:1118 (comment) -msgid "Set stems, etc, up" -msgstr "ステムなどを上向きにセット" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "augmentation" +msgstr "簡単な表記" -#. Documentation/user/fundamental.itely:1105 (comment) -msgid "Initiate first voice" -msgstr "first ボイスの開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "augmented interval" +msgstr "音程 (interval)" -#. Documentation/user/fundamental.itely:1199 (context id) -#. Documentation/user/fundamental.itely:2441 (context id) -#. Documentation/user/vocal.itely:513 (context id) -#. Documentation/user/vocal.itely:1245 (context id) -#. Documentation/user/vocal.itely:1286 (context id) -#. Documentation/user/keyboards.itely:343 (context id) -#. Documentation/user/fretted-strings.itely:246 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:24 (variable) -#. input/lsr/jazz-combo-template.ly:206 (context id) -#. input/lsr/jazz-combo-template.ly:215 (context id) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:57 (context id) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:63 (context id) -msgid "one" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" msgstr "" -#. Documentation/user/fundamental.itely:1242 (variable) -#. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3518 (variable) -#. Documentation/user/simultaneous.itely:784 (variable) -#. Documentation/user/percussion.itely:497 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (variable) -#. input/lsr/incipit.ly:62 (variable) -#. input/lsr/jazz-combo-template.ly:76 (variable) -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:40 (variable) -#. input/lsr/piano-template-with-centered-dynamics.ly:42 (variable) -#. input/lsr/printing-music-with-different-time-signatures.ly:25 (variable) -#. input/lsr/string-quartet-template-simple.ly:37 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:83 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:31 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:48 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:40 (variable) -#. input/lsr/vocal-ensemble-template.ly:45 (variable) -msgid "global" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" msgstr "" -#. Documentation/user/fundamental.itely:1243 (variable) -msgid "SopOneMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" msgstr "" -#. Documentation/user/fundamental.itely:1245 (variable) -msgid "SopTwoMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" msgstr "" -#. Documentation/user/fundamental.itely:1247 (variable) -msgid "SopOneLyrics" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" msgstr "" -#. Documentation/user/fundamental.itely:1249 (variable) -msgid "SopTwoLyrics" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "baritone" +msgstr "アーティキュレーション (articulation)" -#. Documentation/user/fundamental.itely:1255 (context id) -msgid "SopOne" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" msgstr "" -#. Documentation/user/fundamental.itely:1264 (context id) -msgid "SopTwo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" msgstr "" -#. Documentation/user/fundamental.itely:1296 (variable) -#. Documentation/user/fundamental.itely:2864 (variable) -msgid "TimeKey" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "bass clef" +msgstr "音部記号 (clef)" -#. Documentation/user/fundamental.itely:1297 (variable) -msgid "SopMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "beat" +msgstr "ビーム (beam)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" msgstr "" -#. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3520 (variable) -msgid "AltoMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" msgstr "" -#. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3521 (variable) -msgid "TenorMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" msgstr "" -#. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3522 (variable) -msgid "BassMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "brass" +msgstr "ブレース (brace)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" msgstr "" -#. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3523 (variable) -msgid "VerseOne" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" msgstr "" -#. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3524 (variable) -msgid "VerseTwo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" msgstr "" -#. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3525 (variable) -msgid "VerseThree" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "C clef" +msgstr "音部記号" -#. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3526 (variable) -msgid "VerseFour" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" msgstr "" -#. Documentation/user/fundamental.itely:1314 (context id) -msgid "Sop" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" msgstr "" -#. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3533 (context id) -#. Documentation/user/input.itely:982 (context id) -msgid "Alto" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" msgstr "" -#. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3541 (context id) -#. Documentation/user/input.itely:984 (context id) -msgid "Tenor" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" msgstr "" -#. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3542 (context id) -#. Documentation/user/input.itely:989 (context id) -#. input/lsr/jazz-combo-template.ly:229 (variable) -msgid "Bass" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" msgstr "" -#. Documentation/user/fundamental.itely:1350 (variable) -#. Documentation/user/fundamental.itely:1402 (variable) -#. Documentation/user/fundamental.itely:1464 (variable) -msgid "versenotes" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "central C" +msgstr "臨時記号 (accidental)" -#. Documentation/user/fundamental.itely:1355 (variable) -#. Documentation/user/fundamental.itely:1416 (variable) -#. Documentation/user/fundamental.itely:1478 (variable) -msgid "versewords" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" msgstr "" -#. Documentation/user/fundamental.itely:1361 (context id) -#. Documentation/user/fundamental.itely:1428 (context id) -#. Documentation/user/fundamental.itely:1489 (context id) -#. Documentation/user/vocal.itely:836 (context id) -#. input/lsr/score-for-diatonic-accordion.ly:59 (variable) -msgid "verse" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" msgstr "" -#. Documentation/user/fundamental.itely:1407 (variable) -#. Documentation/user/fundamental.itely:1469 (variable) -msgid "refrainnotesA" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" msgstr "" -#. Documentation/user/fundamental.itely:1411 (variable) -#. Documentation/user/fundamental.itely:1473 (variable) -msgid "refrainnotesB" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" msgstr "" -#. Documentation/user/fundamental.itely:1419 (variable) -#. Documentation/user/fundamental.itely:1481 (variable) -msgid "refrainwordsA" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" msgstr "" -#. Documentation/user/fundamental.itely:1422 (variable) -#. Documentation/user/fundamental.itely:1484 (variable) -msgid "refrainwordsB" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" msgstr "" -#. Documentation/user/fundamental.itely:1436 (context id) -#. Documentation/user/fundamental.itely:1509 (context id) -msgid "refrainB" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" msgstr "" -#. Documentation/user/fundamental.itely:1501 (context id) -msgid "refrainA" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" msgstr "" -#. Documentation/user/fundamental.itely:1655 (comment) -msgid "start of single compound music expression" -msgstr "単一の複合音楽表記の開始" - -#. Documentation/user/fundamental.itely:1656 (comment) -msgid "start of simultaneous staves section" -msgstr "同時進行する譜セクションの開始" - -#. Documentation/user/fundamental.itely:1658 (comment) -msgid "create RH staff" -msgstr "RH (右手) 譜表の作成" - -#. Documentation/user/fundamental.itely:1661 (comment) -msgid "create voice for RH notes" -msgstr "RH 音符のためのボイスを作成" - -#. Documentation/user/fundamental.itely:1662 (comment) -msgid "start of RH notes" -msgstr "RH 音符の開始" - -#. Documentation/user/fundamental.itely:1665 (comment) -msgid "end of RH notes" -msgstr "RH 音符の終了" - -#. Documentation/user/fundamental.itely:1666 (comment) -msgid "end of RH voice" -msgstr "RH ボイスの終了" - -#. Documentation/user/fundamental.itely:1667 (comment) -msgid "end of RH staff" -msgstr "RH 譜表の終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "complement" +msgstr "臨時記号 (accidental)" -#. Documentation/user/fundamental.itely:1668 (comment) -msgid "create LH staff; needs two simultaneous voices" -msgstr "LH (左手) 譜表の作成。2 つの同時進行するボイスが必要" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "compound interval" +msgstr "音程 (interval)" -#. Documentation/user/fundamental.itely:1671 (comment) -msgid "create LH voice one" -msgstr "LH voice one の作成" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "" -#. Documentation/user/fundamental.itely:1673 (comment) -msgid "start of LH voice one notes" -msgstr "LH voice one の音符の開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "compound time" +msgstr "臨時記号 (accidental)" -#. Documentation/user/fundamental.itely:1676 (comment) -msgid "end of LH voice one notes" -msgstr "LH voice one 音符の終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "" -#. Documentation/user/fundamental.itely:1677 (comment) -msgid "end of LH voice one" -msgstr "LH voice one の終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "" -#. Documentation/user/fundamental.itely:1678 (comment) -msgid "create LH voice two" -msgstr "LH voice two の作成" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "" -#. Documentation/user/fundamental.itely:1680 (comment) -msgid "start of LH voice two notes" -msgstr "LH voice two 音符の開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "contralto" +msgstr "ナチュラル (natural)" -#. Documentation/user/fundamental.itely:1683 (comment) -msgid "end of LH voice two notes" -msgstr "LH voice two 音符の終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "copying music" +msgstr "音楽を保持するボイス" -#. Documentation/user/fundamental.itely:1684 (comment) -msgid "end of LH voice two" -msgstr "LH voice two の終了" +# added by Sawada +# msgid "Contents" +# msgstr "目次" +# added by Sawada +# msgid "Index" +# msgstr "インデックス" +# added by Sawada +# msgid "Up" +# msgstr "上へ" +# msgid "GNU LilyPond --- Learning" +# msgstr "GNU LilyPond --- 学習マニュアル" +# added by Sawada +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "counterpoint" +msgstr "目次" -#. Documentation/user/fundamental.itely:1685 (comment) -msgid "end of LH staff" -msgstr "LH 譜表の終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "" -#. Documentation/user/fundamental.itely:1686 (comment) -msgid "end of simultaneous staves section" -msgstr "同時進行する譜セクションの終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "cue-notes" +msgstr "グレース ノート" -#. Documentation/user/fundamental.itely:1687 (comment) -msgid "end of single compound music expression" -msgstr "単一の複合音楽表記の終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "" -#. Documentation/user/fundamental.itely:1906 (comment) -msgid "Wrong!" -msgstr "間違い!" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "" -#. Documentation/user/fundamental.itely:1992 (comment) -#. Documentation/user/fundamental.itely:2144 (comment) -msgid "make note heads smaller" -msgstr "音符の玉を小さくする" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "" -#. Documentation/user/fundamental.itely:1995 (comment) -#. Documentation/user/fundamental.itely:2146 (comment) -msgid "make note heads larger" -msgstr "音符の玉を大きくする" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "" -#. Documentation/user/fundamental.itely:1998 (comment) -#. Documentation/user/fundamental.itely:2148 (comment) -msgid "return to default size" -msgstr "デフォルトのサイズに戻す" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dal niente" +msgstr "半音符 (half note)" -#. Documentation/user/fundamental.itely:2420 (variable) -#. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:974 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:50 (variable) -msgid "sopranoMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" msgstr "" -#. Documentation/user/fundamental.itely:2427 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:51 (variable) -msgid "sopranoLyrics" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" msgstr "" -#. Documentation/user/fundamental.itely:2431 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:63 (variable) -msgid "celloMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" msgstr "" -#. Documentation/user/fundamental.itely:2651 (variable) -msgid "sopranoWords" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "didymic comma" +msgstr "高度なリズム コマンド" -#. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:975 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:60 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:52 (variable) -#. input/lsr/vocal-ensemble-template.ly:57 (variable) -msgid "altoMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" msgstr "" -#. Documentation/user/fundamental.itely:2658 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:63 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:55 (variable) -#. input/lsr/vocal-ensemble-template.ly:60 (variable) -msgid "altoWords" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" msgstr "" -#. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:976 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:56 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:67 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) -#. input/lsr/vocal-ensemble-template.ly:64 (variable) -msgid "tenorMusic" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "diminution" +msgstr "演奏時間 (duration)" -#. Documentation/user/fundamental.itely:2663 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:70 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) -#. input/lsr/vocal-ensemble-template.ly:67 (variable) -msgid "tenorWords" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "direct" +msgstr "休符 (rest)" -#. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:977 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:64 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:74 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) -#. input/lsr/vocal-ensemble-template.ly:71 (variable) -msgid "bassMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" msgstr "" -#. Documentation/user/fundamental.itely:2668 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:77 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) -#. input/lsr/vocal-ensemble-template.ly:74 (variable) -msgid "bassWords" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" msgstr "" -#. Documentation/user/fundamental.itely:2685 (comment) -msgid "combine ChoirStaff and PianoStaff in parallel" -msgstr "ChoirStaff と PianoStaff を並列に組み合わせる" - -#. Documentation/user/fundamental.itely:2687 (context id) -#. Documentation/user/fundamental.itely:2689 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (context id) -#. input/lsr/vocal-ensemble-template.ly:82 (context id) -msgid "sopranos" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dissonant interval" +msgstr "音程 (interval)" -#. Documentation/user/fundamental.itely:2692 (context id) -#. Documentation/user/fundamental.itely:2694 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:87 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:77 (context id) -#. input/lsr/vocal-ensemble-template.ly:86 (context id) -msgid "altos" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" msgstr "" -#. Documentation/user/fundamental.itely:2697 (context id) -#. Documentation/user/fundamental.itely:2699 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:87 (context id) -#. input/lsr/vocal-ensemble-template.ly:95 (context id) -msgid "tenors" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" msgstr "" -#. Documentation/user/fundamental.itely:2702 (context id) -#. Documentation/user/fundamental.itely:2704 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:94 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:88 (context id) -#. input/lsr/vocal-ensemble-template.ly:99 (context id) -msgid "basses" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" msgstr "" -#. Documentation/user/fundamental.itely:2707 (comment) -msgid "end ChoirStaff" -msgstr "ChoirStaff の終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dominant ninth chord" +msgstr "音符を組み合わせて和音にする" -#. Documentation/user/fundamental.itely:2865 (variable) -msgid "ManualOneVoiceOneMusic" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dominant seventh chord" +msgstr "音符を組み合わせて和音にする" -#. Documentation/user/fundamental.itely:2868 (variable) -msgid "ManualOneVoiceTwoMusic" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "dorian mode" +msgstr "Vim モード" -#. Documentation/user/fundamental.itely:2872 (variable) -msgid "ManualTwoMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" msgstr "" -#. Documentation/user/fundamental.itely:2876 (variable) -msgid "PedalOrganMusic" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double appoggiatura" +msgstr "ダブル フラット (double flat)" -#. Documentation/user/fundamental.itely:2882 (comment) -msgid "PianoStaff and Pedal Staff must be simultaneous" -msgstr "PianoStaff と Pedal Staff は同時進行でなければならない" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double bar line" +msgstr "ダブル シャープ (double sharp)" -#. Documentation/user/fundamental.itely:2884 (context id) -msgid "ManualOne" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double dotted note" +msgstr "符点音符 (dotted note)" -#. Documentation/user/fundamental.itely:2885 (comment) -msgid "set time signature and key" -msgstr "拍子記号と調号をセットする" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double time signature" +msgstr "拍子記号 (time signature)" -#. Documentation/user/fundamental.itely:2889 (comment) -msgid "end ManualOne Staff context" -msgstr "ManualOne Staff コンテキストの終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "double trill" +msgstr "ダブル フラット (double flat)" -#. Documentation/user/fundamental.itely:2890 (context id) -msgid "ManualTwo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" msgstr "" -#. Documentation/user/fundamental.itely:2894 (comment) -msgid "end ManualTwo Staff context" -msgstr "ManualTwo Staff コンテキストの終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "duplet" +msgstr "連符" -#. Documentation/user/fundamental.itely:2895 (comment) -msgid "end PianoStaff context" -msgstr "PianoStaff コンテキストの終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "" -#. Documentation/user/fundamental.itely:2896 (context id) -msgid "PedalOrgan" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" msgstr "" -#. Documentation/user/fundamental.itely:2900 (comment) -msgid "end PedalOrgan Staff context" -msgstr "PedalOrgan Staff コンテキストの終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "eighth note" +msgstr "半音符 (half note)" -#. Documentation/user/fundamental.itely:2902 (comment) -msgid "end Score context" -msgstr "Score コンテキストの終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @chapter in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @chapter in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @chapter in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @chapter in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @chapter in Documentation/ja/user/fundamental.itely -msgid "Fundamental concepts" -msgstr "基礎となるコンセプト" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely -msgid "How LilyPond input files work" -msgstr "LilyPond 入力ファイルの仕組み" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "embellishment" +msgstr "メリスマ (melisma)" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Introduction to the LilyPond file structure" -msgstr "LilyPond ファイル構造の紹介" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "engraving" +msgstr "譜刻" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Score is a (single) compound musical expression" -msgstr "Score は (単一の) 複合的な音楽表記" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Nesting music expressions" -msgstr "音楽表記のネスト" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "" -# not yet -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/tweaks.itely -#. Documentation/user/staff.itely:559 (context id) -#. Documentation/user/staff.itely:572 (context id) -#. Documentation/user/staff.itely:580 (context id) -#. Documentation/user/staff.itely:598 (context id) -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/fr/user/tweaks.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/tweaks.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tweaks.itely -#. @rglos in Documentation/de/user/staff.itely -#. @rglos in Documentation/ja/user/fundamental.itely -#. @rglos in Documentation/ja/user/tweaks.itely -msgid "ossia" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "expression mark" +msgstr "バージョン番号" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "On the un-nestedness of brackets and ties" -msgstr "ネストされない括弧とタイ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "F clef" +msgstr "音部記号 (clef)" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely -msgid "Voices contain music" -msgstr "音楽を保持するボイス" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "I'm hearing Voices" -msgstr "私はボイスを聴いている" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Explicitly instantiating voices" -msgstr "ボイスの明示的なインスタンス化" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Note columns" -msgstr "音符列" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Voices and vocals" -msgstr "ボイスとボーカル" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely -msgid "Contexts and engravers" -msgstr "コンテキストとエングラーバ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "flag" +msgstr "フラット (flat)" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Contexts explained" -msgstr "コンテキストの説明" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "flageolet" +msgstr "フラット (flat)" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Creating contexts" -msgstr "コンテキストを作成する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Engravers explained" -msgstr "エングラーバの説明" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Modifying context properties" -msgstr "コンテキスト プロパティを変更する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "" -#. @subsubheading in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Setting context properties with @code{\\with}" -msgstr "@code{\\with} を用いてコンテキスト プロパティを設定する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "" -#. @subsubheading in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Setting context properties with @code{\\context}" -msgstr "@code{\\context} を用いてコンテキスト プロパティを設定する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Adding and removing engravers" -msgstr "エングラーバを追加 / 削除する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Changing a single context" -msgstr "単一のコンテキストを変更する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "" -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/fundamental.itely -#. @rglos in Documentation/de/user/pitches.itely -#. @rglos in Documentation/ja/user/fundamental.itely -msgid "ambitus" -msgstr "音域 (ambitus)" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "" -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -#. @subsubheading in Documentation/ja/user/fundamental.itely -msgid "Changing all contexts of the same type" -msgstr "同じタイプのコンテキストをすべて変更する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @section in Documentation/ja/user/fundamental.itely -msgid "Extending the templates" -msgstr "テンプレートを拡張する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "G clef" +msgstr "音部記号 (clef)" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Soprano and cello" -msgstr "ソプラノとチェロ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Four-part SATB vocal score" -msgstr "4 パート SATB ボーカル譜" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "" -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/ja/user/fundamental.itely -#. @subsection in Documentation/ja/user/fundamental.itely -msgid "Building a score from scratch" -msgstr "ゼロから楽譜を構築する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "grave" +msgstr "ブレース (brace)" -#. Documentation/user/tweaks.itely:597 (comment) -#. Documentation/user/tweaks.itely:732 (comment) -msgid "Increase thickness of all following slurs from 1.2 to 5.0" -msgstr "後に続くすべてのスラーの太さを 1.2 から 5.0 に増やします" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "" -#. Documentation/user/tweaks.itely:666 (comment) -#. Documentation/user/tweaks.itely:705 (comment) -#. Documentation/user/tweaks.itely:708 (comment) -msgid "Increase thickness of immediately following slur only" -msgstr "直後にあるスラーの太さだけを増やします" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "" -#. Documentation/user/tweaks.itely:736 (comment) -msgid "Revert thickness of all following slurs to default of 1.2" -msgstr "後に続くすべてのスラーの太さをデフォルトの 1.2 に戻します" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "" -#. Documentation/user/tweaks.itely:1412 (comment) -msgid "Don't print clefs in this staff" -msgstr "この譜表には音部記号を譜刻しません" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "half rest" +msgstr "半音符 (half note)" -#. Documentation/user/tweaks.itely:1414 (comment) -msgid "Don't print time signatures in this staff" -msgstr "この譜表には拍子記号を譜刻しません" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "" -#. Documentation/user/tweaks.itely:1478 (comment) -msgid "Reduce all font sizes by ~24%" -msgstr "すべてのフォント サイズを約 24% 減らします" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "" -#. Documentation/user/tweaks.itely:1544 (comment) -msgid "Reduce stem length and line spacing to match" -msgstr "釣り合いをとるためにステムの長さと譜表線の間隔を減らします" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "" -#. Documentation/user/tweaks.itely:1974 (comment) -#. Documentation/user/tweaks.itely:2044 (comment) -msgid "Set details for later Text Spanner" -msgstr "後のテキスト スパナのための詳細を設定" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "" -#. Documentation/user/tweaks.itely:1977 (comment) -#. Documentation/user/tweaks.itely:2047 (comment) -msgid "Place dynamics above staff" -msgstr "譜表の上に強弱記号を配置" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "homophony" +msgstr "多声 (polyphony)" -#. Documentation/user/tweaks.itely:1979 (comment) -#. Documentation/user/tweaks.itely:2051 (comment) -msgid "Start Ottava Bracket" -msgstr "オッターバ囲みの開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "" -#. Documentation/user/tweaks.itely:1982 (comment) -#. Documentation/user/tweaks.itely:1989 (comment) -#. Documentation/user/tweaks.itely:2054 (comment) -#. Documentation/user/tweaks.itely:2061 (comment) -msgid "Add Dynamic Text" -msgstr "強弱記号テキストの追加" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "" -#. Documentation/user/tweaks.itely:1984 (comment) -#. Documentation/user/tweaks.itely:2056 (comment) -msgid "Add Dynamic Line Spanner" -msgstr "強弱記号線スパナの追加" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "inversion" +msgstr "運指法記号 (fingering)" -#. Documentation/user/tweaks.itely:1986 (comment) -#. Documentation/user/tweaks.itely:2058 (comment) -msgid "Add Text Script" -msgstr "テキスト スクリプトの追加" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "inverted interval" +msgstr "音程 (interval)" -#. Documentation/user/tweaks.itely:1991 (comment) -#. Documentation/user/tweaks.itely:2063 (comment) -msgid "Stop Ottava Bracket" -msgstr "オッターバ囲みの終了" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "" -#. Documentation/user/tweaks.itely:2049 (comment) -msgid "Place following Ottava Bracket below Text Spanners" -msgstr "以下のオッターバ囲みをテキスト スパナの下に配置" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "" -#. Documentation/user/tweaks.itely:2138 (comment) -msgid "Cause notes to space out to accommodate text" -msgstr "テキストに合わせて音符の間隔を広げます" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "" -#. Documentation/user/tweaks.itely:2161 (comment) -msgid "This markup is short enough to fit without collision" -msgstr "このマークアップは短いため、衝突を起こさずにぴったりと収まります" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "" -#. Documentation/user/tweaks.itely:2165 (comment) -msgid "This is too long to fit, so it is displaced upwards" -msgstr "このマークアップは長いため、上の方に再配置されます" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "leading note" +msgstr "全音符 (whole note)" -#. Documentation/user/tweaks.itely:2169 (comment) -#. Documentation/user/tweaks.itely:2174 (comment) -msgid "Turn off collision avoidance" -msgstr "衝突回避を off にします" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "" -#. Documentation/user/tweaks.itely:2176 (comment) -msgid "and turn on textLengthOn" -msgstr "今度は textLengthOn を on にします" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "legato" +msgstr "フラット (flat)" -#. Documentation/user/tweaks.itely:2177 (comment) -msgid "Spaces at end are honored" -msgstr "テキスト終端のスペースは尊重されます" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "" -#. Documentation/user/tweaks.itely:2284 (comment) -msgid "Extend width by 1 staff space" -msgstr "幅を 1 譜表スペース広げます" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "leger line" +msgstr "延長線 (extender line)" -#. Documentation/user/tweaks.itely:2567 (comment) -msgid "This will not work, see below:" -msgstr "これは機能しません。以下を見てください:" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ligature" +msgstr "調号 (key signature)" -#. Documentation/user/tweaks.itely:2571 (comment) -msgid "This works:" -msgstr "これは機能します:" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "" -#. Documentation/user/tweaks.itely:2622 (variable) -msgid "naturalplusflat" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" msgstr "" -#. Documentation/user/tweaks.itely:2663 (comment) -msgid "Extend width by 1 unit" -msgstr "幅を 1 単位 (譜表スペース) 広げます" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "" -#. Documentation/user/tweaks.itely:2665 (comment) -msgid "Align dynamics to a base line 2 units above staff" -msgstr "強弱記号を譜表から 2 単位上のベース ラインに揃えます" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "" -#. Documentation/user/tweaks.itely:2969 (variable) -#. Documentation/user/tweaks.itely:3018 (variable) -#. Documentation/user/tweaks.itely:3079 (variable) -#. Documentation/user/tweaks.itely:3149 (variable) -#. Documentation/user/tweaks.itely:3214 (variable) -#. Documentation/user/tweaks.itely:3274 (variable) -msgid "rhMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" msgstr "" -#. Documentation/user/tweaks.itely:2974 (comment) -#. Documentation/user/tweaks.itely:3023 (comment) -#. Documentation/user/tweaks.itely:3086 (comment) -#. Documentation/user/tweaks.itely:3158 (comment) -#. Documentation/user/tweaks.itely:3223 (comment) -msgid "Start polyphonic section of four voices" -msgstr "4 つのボイスを持つ多声部セクションの開始" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "lyric tie" +msgstr "歌詞 (lyrics)" -#. Documentation/user/tweaks.itely:2987 (variable) -#. Documentation/user/tweaks.itely:3036 (variable) -#. Documentation/user/tweaks.itely:3099 (variable) -#. Documentation/user/tweaks.itely:3173 (variable) -#. Documentation/user/tweaks.itely:3240 (variable) -#. Documentation/user/tweaks.itely:3302 (variable) -msgid "lhMusic" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "major interval" +msgstr "音程 (interval)" -#. Documentation/user/tweaks.itely:2996 (context id) -#. Documentation/user/tweaks.itely:3045 (context id) -#. Documentation/user/tweaks.itely:3108 (context id) -#. Documentation/user/tweaks.itely:3182 (context id) -#. Documentation/user/tweaks.itely:3249 (context id) -#. Documentation/user/tweaks.itely:3311 (context id) -#. Documentation/user/input.itely:995 (context id) -msgid "RH" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "maxima" +msgstr "メリスマ" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" msgstr "" -#. Documentation/user/tweaks.itely:3000 (context id) -#. Documentation/user/tweaks.itely:3049 (context id) -#. Documentation/user/tweaks.itely:3112 (context id) -#. Documentation/user/tweaks.itely:3186 (context id) -#. Documentation/user/tweaks.itely:3253 (context id) -#. Documentation/user/tweaks.itely:3315 (context id) -#. Documentation/user/input.itely:1001 (context id) -msgid "LH" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "measure" +msgstr "部分小節" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" msgstr "" -#. Documentation/user/tweaks.itely:3227 (comment) -#. Documentation/user/tweaks.itely:3289 (comment) -msgid "Move the c2 out of the main note column so the merge will work" -msgstr "マージが機能するように、c2 をメインの音符列の外に移動させます" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "" -#. Documentation/user/tweaks.itely:3230 (comment) -#. Documentation/user/tweaks.itely:3292 (comment) -msgid "Stem on the d2 must be down to permit merging" -msgstr "マージを可能にするため、d2 のステムは下向きでなければなりません" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "melisma line" +msgstr "メリスマ (melisma)" -#. Documentation/user/tweaks.itely:3287 (comment) -msgid "Reposition the c2 to the right of the merged note" -msgstr "c2 をマージされた音符の右側に再配置します" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "" -#. Documentation/user/tweaks.itely:3423 (comment) -#. Documentation/user/tweaks.itely:3445 (comment) -msgid "Visible tempo marking" -msgstr "可視のテンポ記号" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "mensural notation" +msgstr "簡単な表記" -#. Documentation/user/tweaks.itely:3427 (comment) -#. Documentation/user/tweaks.itely:3449 (comment) -msgid "Invisible tempo marking to lengthen fermata in MIDI" -msgstr "MIDI の中でフェルマータの演奏時間を伸ばすための不可視のテンポ記号" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "" -#. Documentation/user/tweaks.itely:3430 (comment) -#. Documentation/user/tweaks.itely:3452 (comment) -msgid "New tempo for next section" -msgstr "次のセクションのための新しいテンポ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "" -#. Documentation/user/tweaks.itely:3509 (variable) -msgid "emphasize" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" msgstr "" -#. Documentation/user/tweaks.itely:3513 (variable) -msgid "normal" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" msgstr "" -#. Documentation/user/tweaks.itely:3519 (variable) -msgid "SopranoMusic" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" msgstr "" -#. Documentation/user/tweaks.itely:3532 (context id) -#. Documentation/user/input.itely:980 (context id) -msgid "Soprano" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" msgstr "" -#. Documentation/user/tweaks.itely:3741 (comment) -msgid "Arrange to obtain color from color-notehead procedure" -msgstr "color-notehead プロシージャからカラーを取得するための手続き" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "minor interval" +msgstr "音程 (interval)" -#. @node in Documentation/user/tweaks.itely -#. @chapter in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @chapter in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @chapter in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @chapter in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @chapter in Documentation/ja/user/tweaks.itely -msgid "Tweaking output" -msgstr "出力を調整する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely -msgid "Tweaking basics" -msgstr "調整の基本" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "mode" +msgstr "Vim モード" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Introduction to tweaks" -msgstr "調整の紹介" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "modulation" +msgstr "演奏時間 (duration)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Objects and interfaces" -msgstr "オブジェクトとインタフェイス" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Naming conventions of objects and properties" -msgstr "オブジェクトとプロパティの命名規約" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Tweaking methods" -msgstr "調整手段" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "motive" +msgstr "オクターブ (octave)" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely -msgid "The Internals Reference manual" -msgstr "内部リファレンス マニュアル" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Properties of layout objects" -msgstr "レイアウト オブジェクトのプロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Finding the context" -msgstr "コンテキストを見つけ出す" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Overriding once only" -msgstr "1 回だけオーバライドする" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ninth" +msgstr "音高 (pitch)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Reverting" -msgstr "元に戻す" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Properties found in interfaces" -msgstr "インタフェイスの中で見つかるプロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "note" +msgstr "いいえ" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Specifying the context in lyric mode" -msgstr "歌詞モードの中でコンテキストを指定する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Types of properties" -msgstr "プロパティのタイプ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "note names" +msgstr "絶対音符名" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely -msgid "Appearance of objects" -msgstr "オブジェクトの見た目" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Visibility and color of objects" -msgstr "オブジェクトの可視性と色" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "octave mark" +msgstr "オクターブ (octave)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "stencil" -msgstr "ステンシル (stencil)" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "octave marking" +msgstr "オクターブ (octave)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "break-visibility" -msgstr "可視性の破棄 (break-visibility)" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "octave sign" +msgstr "オクターブ (octave)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "transparent" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "ornament" msgstr "透過性 (transparent)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "color" -msgstr "色 (color)" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Size of objects" -msgstr "オブジェクトのサイズ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Length and thickness of objects" -msgstr "オブジェクトの長さと太さ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely -msgid "Placement of objects" -msgstr "オブジェクトの配置" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "percussion" +msgstr "上のセクション" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "perfect interval" +msgstr "音程 (interval)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "phrase" +msgstr "フレージング (phrasing)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Automatic behavior" -msgstr "自動配置" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Within-staff objects" -msgstr "譜表内部オブジェクト" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Fingering" -msgstr "運指法記号 (Fingering)" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Outside-staff objects" -msgstr "譜表外部オブジェクト" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "\\textLengthOn" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric time signature" msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Grob sizing" -msgstr "グラフィカル オブジェクトのサイズ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "portato" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely -msgid "Collisions of objects" -msgstr "オブジェクトの衝突" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "power chord" +msgstr "和音 (chord)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Moving objects" -msgstr "オブジェクトを移動させる" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "presto" +msgstr "休符 (rest)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Fixing overlapping notation" -msgstr "表記の重なりを修正する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "proportion" +msgstr "移調 (transposition)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "padding property" -msgstr "padding プロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "left-padding and right-padding" -msgstr "left-padding と right-padding" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "staff-padding property" -msgstr "staff-padding プロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "self-alignment-X property" -msgstr "self-alignment-X プロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "quarter rest" +msgstr "4 分音符 (quarter note)" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "staff-position property" -msgstr "staff-position プロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "extra-offset property" -msgstr "extra-offset プロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "positions property" -msgstr "positions プロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "force-hshift property" -msgstr "force-hshift プロパティ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Real music example" -msgstr "実際の音楽からの例" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "repeat" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @section in Documentation/ja/user/tweaks.itely -msgid "Further tweaking" -msgstr "更なる調整" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Other uses for tweaks" -msgstr "調整のその他の使用方法" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Tying notes across voices" -msgstr "異なるボイスの中にある音符をタイで結ぶ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "" -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @subheading in Documentation/ja/user/tweaks.itely -msgid "Simulating a fermata in MIDI" -msgstr "MIDI でフェルマータをシミュレートする" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Using variables for tweaks" -msgstr "調整のために変数を使用する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Other sources of information" -msgstr "その他の情報源" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "score" +msgstr "音階 (scale)" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Avoiding tweaks with slower processing" -msgstr "処理に時間のかかる調整を避ける" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "second" +msgstr "上のセクション" -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -#. @node in Documentation/ja/user/tweaks.itely -#. @subsection in Documentation/ja/user/tweaks.itely -msgid "Advanced tweaks with Scheme" -msgstr "Scheme を用いた高度な調整" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "" -#. Documentation/user/working.itely:221 (variable) -msgid "hornNotes" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" msgstr "" -#. Documentation/user/working.itely:232 (variable) -msgid "fragmentA" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" msgstr "" -#. Documentation/user/working.itely:233 (variable) -msgid "fragmentB" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" msgstr "" -#. Documentation/user/working.itely:246 (variable) -msgid "dolce" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "sextuplet" +msgstr "連符" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "shake" +msgstr "音階 (scale)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" msgstr "" -#. Documentation/user/working.itely:247 (variable) -#. Documentation/user/working.itely:296 (variable) -#. Documentation/user/scheme-tutorial.itely:282 (variable) -#. Documentation/user/programming-interface.itely:101 (variable) -msgid "padText" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" msgstr "" -#. Documentation/user/working.itely:248 (variable) -msgid "fthenp" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" msgstr "" -#. Documentation/user/working.itely:333 (variable) -msgid "mpdolce" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" msgstr "" -#. Documentation/user/working.itely:336 (variable) -msgid "inst" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "sixth" +msgstr "音高 (pitch)" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" msgstr "" -#. @node in Documentation/user/working.itely -#. @chapter in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @chapter in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @chapter in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @chapter in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @chapter in Documentation/ja/user/working.itely -msgid "Working on LilyPond projects" -msgstr "LilyPond プロジェクトに取り組む" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "Suggestions for writing LilyPond input files" -msgstr "LilyPond 入力ファイルの記述に対する提案" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "" -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "General suggestions" -msgstr "一般的な提案" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "" -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Typesetting existing music" -msgstr "既存の音楽を譜刻する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "" -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Large projects" -msgstr "大きなプロジェクト" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "sonata" +msgstr "ナチュラル (natural)" -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Saving typing with variables and functions" -msgstr "変数と関数を用いて入力の手間を省く" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "" -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Style sheets" -msgstr "スタイル シート" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "song texts" +msgstr "テキストを追加する" -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "When things don't work" -msgstr "うまくいかないとき" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Updating old input files" -msgstr "古い入力ファイルをアップデートする" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -msgid "Common errors" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" msgstr "" -#. @node in Documentation/user/working.itely -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Music runs off the page" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" msgstr "" -#. @node in Documentation/user/working.itely -msgid "Apparent error in ../ly/init.ly" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staves" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Apparent error in @code{../ly/init.ly}" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" msgstr "" -#. @node in Documentation/user/working.itely -#. @unnumberedsubsubsec in Documentation/user/working.itely -msgid "Error message Unbound variable %" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" msgstr "" -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Troubleshooting (taking it all apart)" -msgstr "トラブルシューティング (すべてをバラバラにする)" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @subsection in Documentation/ja/user/working.itely -msgid "Minimal examples" -msgstr "最小化例" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -#. @node in Documentation/ja/user/working.itely -#. @section in Documentation/ja/user/working.itely -msgid "Scores and parts" -msgstr "楽譜とパート" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "" -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "Make and Makefiles" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendix in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendix in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendix in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendix in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendix in Documentation/ja/user/templates.itely -msgid "Templates" -msgstr "テンプレート" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "Single staff" -msgstr "単一の譜表" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Notes only" -msgstr "音符のみ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Notes and lyrics" -msgstr "音符と歌詞" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Notes and chords" -msgstr "音符とコード" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Notes, lyrics, and chords." -msgstr "音符、歌詞それにコード" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "Piano templates" -msgstr "ピアノ テンプレート" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "symphony" +msgstr "多声 (polyphony)" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Solo piano" -msgstr "ソロ ピアノ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Piano and melody with lyrics" -msgstr "ピアノと歌詞を持つ旋律" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Piano centered lyrics" -msgstr "中央に歌詞を持つピアノ譜" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Piano centered dynamics" -msgstr "中央に強弱記号を持つピアノ譜" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +#, fuzzy +msgid "tenor" +msgstr "マイナー (minor)" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "String quartet" -msgstr "弦楽四重奏" +# added by Sawada +# msgid "Contents" +# msgstr "目次" +# added by Sawada +# msgid "Index" +# msgstr "インデックス" +# added by Sawada +# msgid "Up" +# msgstr "上へ" +# msgid "GNU LilyPond --- Learning" +# msgstr "GNU LilyPond --- 学習マニュアル" +# added by Sawada +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "tenth" +msgstr "目次" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "String quartet parts" -msgstr "弦楽四重奏パート" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "Vocal ensembles" -msgstr "合唱" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "third" +msgstr "和音 (chord)" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "SATB vocal score" -msgstr "SATB ボーカル譜" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "thirty-second note" +msgstr "符点音符 (dotted note)" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "SATB vocal score and automatic piano reduction" -msgstr "SATB ボーカル譜と自動ピアノ譜" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "SATB with aligned contexts" -msgstr "整列されたコンテキストを持つ SATB" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely #, fuzzy -msgid "Orchestral templates" -msgstr "ピアノ テンプレート" +msgid "time" +msgstr "タイ (tie)" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Orchestra, choir and piano" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "Ancient notation templates" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Transcription of mensural music" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "Gregorian transcription template" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "Jazz combo" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" msgstr "" -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/ja/user/templates.itely -#. @appendixsec in Documentation/ja/user/templates.itely -msgid "lilypond-book templates" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "triad" +msgstr "チュートリアル" -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "LaTeX" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "trill" msgstr "" -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -#. @subsubheading in Documentation/ja/user/lilypond-book.itely -msgid "Texinfo" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "triple meter" +msgstr "3 連符 (triplet)" -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/ja/user/templates.itely -msgid "xelatex" -msgstr "" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "tritone" +msgstr "移調 (transposition)" -#. Documentation/user/scheme-tutorial.itely:304 (variable) -#. Documentation/user/programming-interface.itely:135 (variable) -msgid "tempoPadded" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" msgstr "" -#. Documentation/user/scheme-tutorial.itely:323 (variable) -msgid "pattern" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" msgstr "" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendix in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendix in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendix in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendix in Documentation/de/user/scheme-tutorial.itely -#. @node in Documentation/ja/user/scheme-tutorial.itely -#. @appendix in Documentation/ja/user/scheme-tutorial.itely -msgid "Scheme tutorial" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" msgstr "" -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendixsec in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendixsec in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendixsec in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendixsec in Documentation/de/user/scheme-tutorial.itely -#. @node in Documentation/ja/user/scheme-tutorial.itely -#. @appendixsec in Documentation/ja/user/scheme-tutorial.itely -msgid "Tweaking with Scheme" -msgstr "" - -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -msgid "GNU Free Documentation License" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" msgstr "" -#. @subheading in Documentation/user/fdl.itexi -msgid "ADDENDUM: How to use this License for your documents" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "upbeat" +msgstr "連符" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" msgstr "" -#. @top in Documentation/user/lilypond-program.tely -msgid "GNU LilyPond --- Application Usage" -msgstr "GNU LilyPond --- アプリケーション使用方法" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "" -#. @node in Documentation/user/install.itely -#. @chapter in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @chapter in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @chapter in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @chapter in Documentation/de/user/install.itely -#. @node in Documentation/ja/user/install.itely -#. @chapter in Documentation/ja/user/install.itely -msgid "Install" -msgstr "インストール" - -#. @node in Documentation/user/install.itely -#. @section in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @section in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -#. @node in Documentation/ja/user/install.itely -#. @section in Documentation/ja/user/install.itely -msgid "Precompiled binaries" -msgstr "コンパイル済みのバイナリ" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "" -#. @unnumberedsubsec in Documentation/user/install.itely -#. @unnumberedsubsec in Documentation/fr/user/install.itely -#. @unnumberedsubsec in Documentation/es/user/install.itely -#. @unnumberedsubsec in Documentation/de/user/install.itely -#. @unnumberedsubsec in Documentation/ja/user/install.itely -msgid "Downloading" -msgstr "ダウンロードする" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "whole rest" +msgstr "全音符 (whole note)" -#. @node in Documentation/user/compile.itely -#. @section in Documentation/user/compile.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -#. @node in Documentation/de/user/compile.itely -#. @section in Documentation/de/user/compile.itely -#. @node in Documentation/ja/user/install.itely -#. @section in Documentation/ja/user/install.itely -msgid "Compiling from source" -msgstr "ソースからコンパイルする" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#, fuzzy +msgid "whole tone" +msgstr "全音符 (whole note)" -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Downloading source code" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" msgstr "" -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Requirements" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compilation" +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Running requirements" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Requirements for building documentation" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" msgstr "" -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Building LilyPond" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling for multiple platforms" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Compiling outside the source tree" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Useful @command{make} variables" -msgstr "" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Building documentation" -msgstr "" - -#. @node in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Commands for building documentation" -msgstr "" - -#. @node in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Building documentation without compiling LilyPond" -msgstr "" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Testing LilyPond" -msgstr "" - -#. @node in Documentation/user/compile.itely -#. @subsection in Documentation/user/compile.itely -#. @node in Documentation/de/user/compile.itely -#. @subsection in Documentation/de/user/compile.itely -msgid "Problems" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Bison 1.875" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "Solaris" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "FreeBSD" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/compile.itely -#. @unnumberedsubsubsec in Documentation/de/user/compile.itely -msgid "International fonts" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" msgstr "" -#. @node in Documentation/user/setup.itely -#. @chapter in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @chapter in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @chapter in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @chapter in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @chapter in Documentation/ja/user/setup.itely -msgid "Setup" -msgstr "セットアップ" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Setup for specific Operating Systems" -msgstr "特定の OS のためのセットアップ" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Setup for MacOS X" -msgstr "MacOS X のためのセットアップ" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -#. @subsubheading in Documentation/ja/user/setup.itely -msgid "Using Python scripts on MacOS 10.3 or 10.4" -msgstr "MaxOS 10.3 または 10.4 で Python スクリプトを使用する" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -#. @subsubheading in Documentation/ja/user/setup.itely -msgid "MacOS X on the command line" -msgstr "MaxOS X のコマンド ライン" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Text editor support" -msgstr "テキスト エディタのサポート" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Emacs mode" -msgstr "Emacs モード" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "Vim mode" -msgstr "Vim モード" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "jEdit" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "TexShop" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "TextMate" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @subsection in Documentation/ja/user/setup.itely -msgid "LilyKDE" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -#. @node in Documentation/ja/user/setup.itely -#. @section in Documentation/ja/user/setup.itely -msgid "Point and click" -msgstr "ポイント&クリック" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "" -#. @node in Documentation/user/running.itely -#. @chapter in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @chapter in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @chapter in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @chapter in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @chapter in Documentation/ja/user/running.itely -msgid "Running LilyPond" -msgstr "LilyPond を実行する" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Normal usage" -msgstr "通常の使用方法" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Command-line usage" -msgstr "コマンド ラインの使用方法" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Invoking lilypond" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" msgstr "" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Invoking @command{lilypond}" -msgstr "@command{lilypond} を呼び出す" +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Command line options for lilypond" -msgstr "lilypond のコマンド ライン オプション" +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Command line options for @command{lilypond}" -msgstr "@command{lilypond} のコマンド ライン オプション" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#, fuzzy +msgid "LilyPond grammar" +msgstr "LilyPond インデックス" -#. @node in Documentation/user/running.itely -#. @subsection in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Environment variables" -msgstr "環境変数" +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Error messages" -msgstr "エラー メッセージ" +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Updating files with convert-ly" -msgstr "convert-ly を使ってファイルを更新する" +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +msgid "Specialist notation" +msgstr "" -#. @section in Documentation/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Updating files with @command{convert-ly}" -msgstr "@command{convert-ly} を使ってファイルを更新する" +#. Documentation/notation/input.itely:673 (comment) +msgid "not printed" +msgstr "" -#. @node in Documentation/user/running.itely -#, fuzzy -msgid "Invoking convert-ly" -msgstr "@command{lilypond} を呼び出す" +#. Documentation/notation/input.itely:1137 (variable) +msgid "allLyrics" +msgstr "" -#. @subsection in Documentation/user/running.itely -#, fuzzy -msgid "Invoking @command{convert-ly}" -msgstr "@command{convert-ly} を使ってファイルを更新する" +#. Documentation/notation/input.itely:1223 (variable) +#. Documentation/notation/input.itely:1242 (variable) +#. Documentation/notation/input.itely:1279 (variable) +#. Documentation/notation/input.itely:1294 (variable) +#. Documentation/notation/spacing.itely:1555 (variable) +#. Documentation/notation/spacing.itely:1609 (variable) +#. Documentation/notation/spacing.itely:1634 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:53 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "" -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Command line options for convert-ly" -msgstr "convert-ly のコマンド ライン オプション" +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely +msgid "General input and output" +msgstr "" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Command line options for @command{convert-ly}" -msgstr "@command{convert-ly} のコマンド ライン オプション" +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Input structure" +msgstr "" -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -msgid "Problems with convert-ly" -msgstr "convert-ly の問題点" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Structure of a score" +msgstr "" -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -#. @subsection in Documentation/ja/user/running.itely -msgid "Problems with @code{convert-ly}" -msgstr "@command{convert-ly} の問題点" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple scores in a book" +msgstr "" -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -#. @node in Documentation/ja/user/running.itely -#. @section in Documentation/ja/user/running.itely -msgid "Reporting bugs" -msgstr "バグを報告する" - -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "LilyPond-book" -msgstr "" - -#. @chapter in Documentation/user/lilypond-book.itely -#. @chapter in Documentation/fr/user/lilypond-book.itely -#. @chapter in Documentation/es/user/lilypond-book.itely -#. @chapter in Documentation/de/user/lilypond-book.itely -#. @chapter in Documentation/ja/user/lilypond-book.itely -msgid "@command{lilypond-book}: Integrating text and music" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "An example of a musicological document" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple output files from one input file" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Input" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Output file names" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Processing" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "File structure" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Output" +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Titles and headers" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Integrating music and text" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating titles" msgstr "" -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -#. @subsubheading in Documentation/ja/user/lilypond-book.itely -msgid "@LaTeX{}" +#. @node in Documentation/notation/input.itely +msgid "Custom headers footers and titles" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -msgid "HTML" +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @subsection in Documentation/ja/user/lilypond-book.itely -msgid "DocBook" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Reference to page numbers" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Common conventions" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Table of contents" +msgstr "目次" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Working with input files" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Including a LilyPond file" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Including LilyPond files" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Including LilyPond code" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Different editions from one source" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Processing the DocBook document" +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using variables" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Music fragment options" +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using tags" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "Invoking lilypond-book" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Text encoding" msgstr "" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Invoking @command{lilypond-book}" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Displaying LilyPond notation" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Format-specific instructions" +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Controlling output" msgstr "" -#. @subheading in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -#. @subheading in Documentation/ja/user/lilypond-book.itely -msgid "Command line options" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Extracting fragments of music" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Filename extensions" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Skipping corrected music" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -msgid "Alternate methods of mixing text and music" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" msgstr "" -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/ja/user/lilypond-book.itely -msgid "Alternative methods of mixing text and music" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Many quotes from a large score" +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Inserting LilyPond output into OpenOffice.org" +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "MIDI output" msgstr "" -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @node in Documentation/ja/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/ja/user/lilypond-book.itely -msgid "Inserting LilyPond output into other programs" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating MIDI files" msgstr "" -#. @node in Documentation/user/converters.itely -#. @chapter in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @chapter in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @chapter in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @chapter in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -#. @chapter in Documentation/ja/user/converters.itely -msgid "Converting from other formats" +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" msgstr "" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking midi2ly" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "MIDI block" msgstr "" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @command{midi2ly}" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "What goes into the MIDI output?" msgstr "" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking musicxml2ly" +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Supported in MIDI" msgstr "" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @code{musicxml2ly}" +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Unsupported in MIDI" msgstr "" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking abc2ly" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Repeats in MIDI" msgstr "" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @code{abc2ly}" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Controlling MIDI dynamics" msgstr "" -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -msgid "Invoking etf2ly" +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Dynamic marks" msgstr "" -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Invoking @command{etf2ly}" +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Overall MIDI volume" msgstr "" -#. @node in Documentation/user/converters.itely -#. @section in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @section in Documentation/de/user/converters.itely -#. @node in Documentation/ja/user/converters.itely -#. @section in Documentation/ja/user/converters.itely -msgid "Generating LilyPond files" +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (i)" msgstr "" -#. @top in Documentation/user/lilypond.tely -#. @top in Documentation/de/user/lilypond.tely -msgid "GNU LilyPond --- Notation Reference" +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (ii)" msgstr "" -#. @chapheading in Documentation/user/lilypond.tely -msgid "The music typesetter" +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Percussion in MIDI" msgstr "" -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -#, fuzzy -msgid "LilyPond grammar" -msgstr "LilyPond インデックス" +#. Documentation/notation/spacing.itely:2045 (comment) +msgid "The very low note here needs more room than 'space can" +msgstr "" -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond command index" +#. Documentation/notation/spacing.itely:2046 (comment) +msgid "provide, so the distance between this staff and the next is" msgstr "" -#. @node in Documentation/user/notation.itely -#. @chapter in Documentation/user/notation.itely -#. @node in Documentation/fr/user/notation.itely -#. @chapter in Documentation/fr/user/notation.itely -#. @node in Documentation/es/user/notation.itely -#. @chapter in Documentation/es/user/notation.itely -#. @node in Documentation/de/user/notation.itely -#. @chapter in Documentation/de/user/notation.itely -msgid "Musical notation" +#. Documentation/notation/spacing.itely:2047 (comment) +msgid "determined by 'padding." msgstr "" -#. Documentation/user/pitches.itely:732 (variable) -#. Documentation/user/input.itely:1064 (variable) -#. Documentation/user/input.itely:1083 (variable) -#. Documentation/user/input.itely:1120 (variable) -#. Documentation/user/input.itely:1135 (variable) -#. Documentation/user/changing-defaults.itely:453 (variable) -#. Documentation/user/changing-defaults.itely:488 (context id) -#. Documentation/user/changing-defaults.itely:538 (context id) -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:30 (variable) -#. input/lsr/controlling-tuplet-bracket-visibility.ly:20 (variable) -#. input/lsr/letter-tablature-formatting.ly:25 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:115 (variable) -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:138 (variable) -#. input/lsr/vertically-aligned-dynamics-and-textscripts.ly:51 (variable) -msgid "music" +#. Documentation/notation/spacing.itely:2050 (comment) +msgid "Here, 'space provides enough room, and there is no need to" msgstr "" -#. Documentation/user/pitches.itely:1136 (comment) -msgid "not strictly necessary, but a good reminder" +#. Documentation/notation/spacing.itely:2051 (comment) +msgid "compress the space (towards 'minimum-distance) to make room" msgstr "" -#. Documentation/user/pitches.itely:1143 (context id) -#. Documentation/user/staff.itely:1117 (variable) -msgid "clarinet" +#. Documentation/notation/spacing.itely:2052 (comment) +msgid "for anything else on the page, so the distance between this" msgstr "" -#. Documentation/user/pitches.itely:1228 (variable) -#. Documentation/user/changing-defaults.itely:444 (variable) -msgid "musicA" +#. Documentation/notation/spacing.itely:2053 (comment) +msgid "staff and the next is determined by 'space." msgstr "" -#. Documentation/user/pitches.itely:1242 (variable) -#. Documentation/user/changing-defaults.itely:445 (variable) -msgid "musicB" +#. Documentation/notation/spacing.itely:2056 (comment) +msgid "By setting 'padding to a negative value, staves can be made to" msgstr "" -#. Documentation/user/pitches.itely:1261 (context id) -#. Documentation/user/keyboards.itely:179 (context id) -#. Documentation/user/keyboards.itely:279 (context id) -#. Documentation/user/percussion.itely:175 (variable) -#. Documentation/user/percussion.itely:365 (variable) -#. input/lsr/jazz-combo-template.ly:243 (variable) -msgid "up" +#. Documentation/notation/spacing.itely:2057 (comment) +msgid "collide. The lowest acceptable value for 'space is 0." msgstr "" -#. Documentation/user/pitches.itely:1265 (context id) -#. Documentation/user/keyboards.itely:189 (context id) -#. Documentation/user/keyboards.itely:288 (context id) -#. Documentation/user/percussion.itely:178 (variable) -#. Documentation/user/percussion.itely:366 (variable) -#. input/lsr/jazz-combo-template.ly:249 (variable) -msgid "down" +#. Documentation/notation/spacing.itely:2489 (comment) +msgid "this time the text will be closer to the staff" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Writing pitches" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Absolute octave entry" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Relative octave entry" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "fifth" +#. Documentation/notation/spacing.itely:2491 (comment) +msgid "by setting outside-staff-priority to a non-number," msgstr "" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "quarter tone" +#. Documentation/notation/spacing.itely:2492 (comment) +msgid "we disable the automatic collision avoidance" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Note names in other languages" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Changing multiple pitches" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Octave checks" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Transpose" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Displaying pitches" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Key signature" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "church mode" +#. Documentation/notation/spacing.itely:2495 (comment) +msgid "now they will collide" msgstr "" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "scordatura" +#. Documentation/notation/spacing.itely:2521 (comment) +msgid "the markup is too close to the following note" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ottava brackets" +#. Documentation/notation/spacing.itely:2525 (comment) +msgid "setting outside-staff-horizontal-padding fixes this" msgstr "" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "octavation" +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely +msgid "Spacing issues" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Instrument transpositions" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Page layout" msgstr "" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "concert pitch" +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" msgstr "" -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "transposing instrument" +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\paper} block" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Automatic accidentals" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ambitus" +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +#, fuzzy +msgid "Setting paper size" +msgstr "簡単な歌詞をセットする" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Automatic scaling to paper size" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Note heads" +#. @node in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing \\\\paper variables" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Special note heads" +#. @subsection in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing @code{\\\\paper} variables" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Easy notation note heads" +#. @node in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing \\\\paper variables" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Shape note heads" +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" msgstr "" -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Improvisation" +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" msgstr "" -#. Documentation/user/rhythms.itely:314 (comment) -msgid "Alter durations to triplets" +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" msgstr "" -#. Documentation/user/rhythms.itely:316 (comment) -#. Documentation/user/rhythms.itely:344 (comment) -msgid "Normal durations" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" msgstr "" -#. Documentation/user/rhythms.itely:318 (comment) -msgid "Double the duration of chord" +#. @node in Documentation/notation/spacing.itely +msgid "Horizontal spacing \\\\paper variables" msgstr "" -#. Documentation/user/rhythms.itely:320 (comment) -msgid "Duration of quarter, appears like sixteenth" +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing @code{\\\\paper} variables" msgstr "" -#. Documentation/user/rhythms.itely:346 (comment) -msgid "Scale music by *2/3" +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" msgstr "" -#. Documentation/user/rhythms.itely:350 (comment) -msgid "Scale music by *2" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" msgstr "" -#. Documentation/user/rhythms.itely:437 (comment) -msgid "First alternative: following note is tied normally" +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" msgstr "" -#. Documentation/user/rhythms.itely:439 (comment) -msgid "Second alternative: following note has a repeated tie" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" msgstr "" -#. Documentation/user/rhythms.itely:605 (comment) -msgid "These two lines are just to prettify this example" +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" msgstr "" -#. Documentation/user/rhythms.itely:608 (comment) -msgid "Print a maxima rest, equal to four breves" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" msgstr "" -#. Documentation/user/rhythms.itely:610 (comment) -msgid "Print a longa rest, equal to two breves" +#. @node in Documentation/notation/spacing.itely +#, fuzzy +msgid "Other \\\\paper variables" +msgstr "環境変数" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Other @code{\\\\paper} variables" msgstr "" -#. Documentation/user/rhythms.itely:612 (comment) -msgid "Print a breve rest" +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" msgstr "" -#. Documentation/user/rhythms.itely:721 (comment) -msgid "This is valid input, but does nothing" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" msgstr "" -#. Documentation/user/rhythms.itely:749 (comment) -#. Documentation/user/rhythms.itely:804 (comment) -msgid "Rest measures contracted to single measure" +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page breaking" msgstr "" -#. Documentation/user/rhythms.itely:800 (comment) -#. input/lsr/avoiding-collisions-with-chord-fingerings.ly:24 (comment) -msgid "Default behavior" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" msgstr "" -#. Documentation/user/rhythms.itely:807 (comment) -msgid "Rest measures expanded" +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" msgstr "" -#. Documentation/user/rhythms.itely:846 (comment) -msgid "This fails, as the wrong object name is specified" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" msgstr "" -#. Documentation/user/rhythms.itely:849 (comment) -msgid "This is correct and works" +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" msgstr "" -#. Documentation/user/rhythms.itely:994 (comment) -msgid "Default style" +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Miscellaneous @code{\\\\paper} variables" msgstr "" -#. Documentation/user/rhythms.itely:997 (comment) -msgid "Change to numeric style" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Score layout" msgstr "" -#. Documentation/user/rhythms.itely:1001 (comment) -msgid "Revert to default style" +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\layout block" msgstr "" -#. Documentation/user/rhythms.itely:1147 (comment) -msgid "Show all bar numbers" +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\layout} block" msgstr "" -#. Documentation/user/rhythms.itely:1287 (comment) -msgid "Now each staff has its own time signature." +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" msgstr "" -#. Documentation/user/rhythms.itely:1415 (context id) -msgid "myRhythm" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Breaks" msgstr "" -#. Documentation/user/rhythms.itely:1786 (comment) -msgid "end 1/16 beams for all time signatures at the 1/16 moment" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line breaking" msgstr "" -#. Documentation/user/rhythms.itely:1790 (comment) -msgid "end 1/32 beams for all time signatures at the 1/16 moment" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Page breaking" msgstr "" -#. Documentation/user/rhythms.itely:1800 (comment) -msgid "end beams of all durations in 5/8 time signature at the 2/8 moment" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page breaking" msgstr "" -#. Documentation/user/rhythms.itely:1815 (comment) -msgid "rhythm 3-1-1-2" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page turning" msgstr "" -#. Documentation/user/rhythms.itely:1816 (comment) -msgid "Context not specified - does not work correctly" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Minimal page breaking" msgstr "" -#. Documentation/user/rhythms.itely:1822 (comment) -msgid "Works correctly with context specified" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit breaks" msgstr "" -#. Documentation/user/rhythms.itely:1857 (comment) -msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Using an extra voice for breaks" msgstr "" -#. Documentation/user/rhythms.itely:1870 (comment) -msgid "this won't revert it!" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Vertical spacing" msgstr "" -#. Documentation/user/rhythms.itely:1872 (comment) -msgid "this will" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing within systems" msgstr "" -#. Documentation/user/rhythms.itely:2018 (comment) -msgid "revert to non-feathered beams" +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Within-system spacing properties" msgstr "" -#. Documentation/user/rhythms.itely:2268 (comment) -#. input/lsr/printing-bar-numbers-at-regular-intervals.ly:43 (comment) -msgid "Permit first bar number to be printed" +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" msgstr "" -#. Documentation/user/rhythms.itely:2371 (variable) -msgid "pipeSymbol" +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" msgstr "" -#. Documentation/user/rhythms.itely:2746 (variable) -msgid "MyCadenza" +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of ungrouped staves" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @section in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @section in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @section in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @section in Documentation/de/user/rhythms.itely -msgid "Rhythms" +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of grouped staves" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rhythms" +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Durations" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit staff and system positioning" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "breve" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical collision avoidance" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "longa" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Horizontal spacing" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -#, fuzzy -msgid "maxima" -msgstr "メリスマ" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing overview" +msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "Duration names notes and rests" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "New spacing area" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "tuplet" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing horizontal spacing" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "polymetric" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line length" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Scaling durations" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Proportional notation" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "laissez vibrer" +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Fitting music onto fewer pages" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rests" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Invisible rests" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Full measure rests" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "multi-measure rest" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Displaying spacing" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Displaying rhythms" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Upbeats" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Unmetered music" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "cadenza" +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing spacing" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Polymetric notation" +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "polymetric time signature" +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" msgstr "" -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "meter" +#. Documentation/notation/changing-defaults.itely:451 (variable) +msgid "keepVoicesAlive" msgstr "" -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic note splitting" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Showing melody rhythms" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Setting automatic beam behavior" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Manual beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Feathered beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Bars" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar lines" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar numbers" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar and bar number checks" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Rehearsal marks" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Special rhythmic concerns" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Aligning to cadenzas" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Time administration" -msgstr "" - -#. Documentation/user/expressive.itely:388 (variable) -#. Documentation/user/expressive.itely:465 (variable) -msgid "moltoF" -msgstr "" - -#. Documentation/user/expressive.itely:409 (variable) -#. Documentation/user/expressive.itely:442 (variable) -msgid "roundF" +#. Documentation/notation/changing-defaults.itely:453 (comment) +msgid "Keep Voice \\\"A\\\" alive for 5 bars" msgstr "" -#. Documentation/user/expressive.itely:411 (variable) -#. Documentation/user/expressive.itely:446 (variable) -msgid "boxF" -msgstr "" - -#. Documentation/user/expressive.itely:425 (variable) -msgid "sfzp" +#. Documentation/notation/changing-defaults.itely:454 (comment) +msgid "Keep Voice \\\"B\\\" alive for 5 bars" msgstr "" -#. Documentation/user/expressive.itely:447 (variable) -msgid "mfEspress" +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) +#, fuzzy +msgid "accompaniment" +msgstr "臨時記号 (accidental)" + +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:74 (variable) +#, fuzzy +msgid "words" +msgstr "和音 (chord)" + +#. Documentation/notation/changing-defaults.itely:497 (comment) +msgid "Keep Voice \\\"melody\\\" alive for 4 bars" msgstr "" -#. Documentation/user/expressive.itely:449 (variable) -msgid "roundFdynamic" +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) +msgid "skip a bar" msgstr "" -#. Documentation/user/expressive.itely:450 (variable) -msgid "boxFdynamic" +#. Documentation/notation/changing-defaults.itely:2017 (comment) +msgid "default space between staves" msgstr "" -#. Documentation/user/expressive.itely:451 (variable) -msgid "mfEspressDynamic" +#. Documentation/notation/changing-defaults.itely:2023 (comment) +msgid "reduced space between staves" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @section in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @section in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @section in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @section in Documentation/de/user/expressive.itely -msgid "Expressive marks" +#. Documentation/notation/changing-defaults.itely:2025 (comment) +msgid "this is the nested declaration" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Attached to notes" +#. Documentation/notation/changing-defaults.itely:2480 (comment) +msgid "increase the length of the tie" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Articulations and ornamentations" +#. Documentation/notation/changing-defaults.itely:2489 (comment) +msgid "increase the length of the rest bar" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "tenuto" +#. Documentation/notation/changing-defaults.itely:2497 (comment) +msgid "increase the length of the hairpin" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "accent" +#. Documentation/notation/changing-defaults.itely:2525 (comment) +msgid "default" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "staccato" +#. Documentation/notation/changing-defaults.itely:2528 (comment) +#. Documentation/notation/changing-defaults.itely:2541 (comment) +msgid "not effective alone" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "portato" +#. Documentation/notation/changing-defaults.itely:2532 (comment) +#. Documentation/notation/changing-defaults.itely:2545 (comment) +msgid "effective only when both overrides are present" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "al niente" +#. Documentation/notation/changing-defaults.itely:2922 (comment) +msgid "Remove bar line at the end of the current line" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "hairpin" +#. Documentation/notation/changing-defaults.itely:2968 (comment) +msgid "Try to remove all key signatures" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "New dynamic marks" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Curves" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Breath marks" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -#. input/lsr/breathing-signs.ly:35 (comment) -msgid "caesura" +#. Documentation/notation/changing-defaults.itely:3392 (comment) +msgid "move horizontally left" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Falls and doits" +#. Documentation/notation/changing-defaults.itely:3394 (comment) +msgid "move vertically up" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "fall" +#. Documentation/notation/changing-defaults.itely:3395 (comment) +msgid "third finger" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "doit" +#. Documentation/notation/changing-defaults.itely:3443 (comment) +#. Documentation/notation/changing-defaults.itely:3482 (comment) +msgid "The rehearsal mark will be centered above the Clef" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Lines" +#. Documentation/notation/changing-defaults.itely:3449 (comment) +msgid "The rehearsal mark will be centered above the Time Signature" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Glissando" +#. Documentation/notation/changing-defaults.itely:3456 (comment) +msgid "The rehearsal mark will be centered above the Breath Mark" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "glissando" +#. Documentation/notation/changing-defaults.itely:3476 (comment) +msgid "The rehearsal mark will be centered above the Key Signature" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Arpeggio" +#. Documentation/notation/changing-defaults.itely:3489 (comment) +msgid "The rehearsal mark will be centered above the Bar Line" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "arpeggio" +#. Documentation/notation/changing-defaults.itely:3504 (comment) +msgid "The RehearsalMark will be centered above the Key Signature" msgstr "" -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Trills" +#. Documentation/notation/changing-defaults.itely:3511 (comment) +#. Documentation/notation/changing-defaults.itely:3527 (comment) +#. Documentation/notation/changing-defaults.itely:3534 (comment) +msgid "" +"The RehearsalMark will be aligned with the left edge of the Key Signature" msgstr "" -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "trill" +#. Documentation/notation/changing-defaults.itely:3516 (comment) +msgid "" +"The RehearsalMark will be aligned with the right edge of the Key Signature" msgstr "" -#. Documentation/user/repeats.itely:299 (variable) -#. input/lsr/volta-text-markup-using-repeatcommands.ly:23 (variable) -msgid "voltaAdLib" +#. Documentation/notation/changing-defaults.itely:3528 (comment) +msgid "and then shifted right by 3.5 staff-spaces" msgstr "" -#. @node in Documentation/user/repeats.itely -#. @section in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @section in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @section in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @section in Documentation/de/user/repeats.itely -msgid "Repeats" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Long repeats" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Normal repeats" -msgstr "" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "repeat" +#. Documentation/notation/changing-defaults.itely:3535 (comment) +msgid "and then shifted left by 2 staff-spaces" msgstr "" -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "volta" +#. Documentation/notation/changing-defaults.itely:3583 (variable) +msgid "XinO" msgstr "" -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Manual repeat marks" +#. Documentation/notation/changing-defaults.itely:3825 (variable) +msgid "custosNote" msgstr "" -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Written-out repeats" +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely +msgid "Changing defaults" msgstr "" -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Short repeats" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Interpretation contexts" msgstr "" -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Percent repeats" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Score - the master of all contexts" msgstr "" -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "percent repeat" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Top-level contexts - staff containers" msgstr "" -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "simile" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Intermediate-level contexts - staves" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Bottom-level contexts - voices" msgstr "" -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Tremolo repeats" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Keeping contexts alive" +msgstr "コンテキストを作成する" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying context plug-ins" msgstr "" -#. Documentation/user/simultaneous.itely:94 (comment) -msgid "explicit single voice" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Changing context default settings" msgstr "" -#. Documentation/user/simultaneous.itely:100 (comment) -msgid "single first note" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Defining new contexts" msgstr "" -#. Documentation/user/simultaneous.itely:112 (comment) -msgid "no single first note" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning contexts" msgstr "" -#. Documentation/user/simultaneous.itely:617 (variable) -msgid "instrumentOne" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Explaining the Internals Reference" msgstr "" -#. Documentation/user/simultaneous.itely:625 (variable) -msgid "instrumentTwo" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Navigating the program reference" msgstr "" -#. Documentation/user/simultaneous.itely:802 (comment) -msgid "Bar 3 ..." +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Layout interfaces" msgstr "" -#. @node in Documentation/user/simultaneous.itely -#. @section in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @section in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @section in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @section in Documentation/de/user/simultaneous.itely -msgid "Simultaneous notes" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Determining the grob property" msgstr "" -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Single voice" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Naming conventions" msgstr "" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Chorded notes" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Modifying properties" msgstr "" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Simultaneous expressions" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Overview of modifying properties" msgstr "" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Clusters" +#. @node in Documentation/notation/changing-defaults.itely +msgid "The set command" msgstr "" -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "cluster" +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" msgstr "" -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Multiple voices" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Single-staff polyphony" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Voice styles" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Collision resolution" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Automatic part combining" -msgstr "" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "a due" +#. @node in Documentation/notation/changing-defaults.itely +msgid "The override command" msgstr "" -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. input/lsr/flamenco-notation.ly:136 (variable) -#. input/lsr/flamenco-notation.ly:233 (context id) -msgid "part" +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" msgstr "" -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Writing music in parallel" +#. @node in Documentation/notation/changing-defaults.itely +msgid "The tweak command" msgstr "" -#. Documentation/user/staff.itely:1086 (variable) -#. Documentation/user/staff.itely:1101 (variable) -#. Documentation/user/staff.itely:1269 (variable) -msgid "flute" +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" msgstr "" -#. Documentation/user/staff.itely:1211 (variable) -#. Documentation/user/staff.itely:1232 (variable) -msgid "oboe" +#. @node in Documentation/notation/changing-defaults.itely +msgid "set versus override" msgstr "" -#. Documentation/user/staff.itely:1290 (variable) -#. Documentation/user/staff.itely:1306 (context id) -msgid "piccolo" +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" msgstr "" -#. Documentation/user/staff.itely:1298 (variable) -#. Documentation/user/staff.itely:1307 (context id) -msgid "cbassoon" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying alists" msgstr "" -#. @node in Documentation/user/staff.itely -#. @section in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @section in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @section in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @section in Documentation/de/user/staff.itely -msgid "Staff notation" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Useful concepts and properties" msgstr "" -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Displaying staves" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Input modes" msgstr "" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Instantiating new staves" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Direction and placement" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staff" -msgstr "" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Context layout order" +msgstr "コンテキストとエングラーバ" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staves" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Distances and measurements" msgstr "" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Grouping staves" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Staff symbol properties" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "bracket" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Spanners" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "grand staff" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{spanner-interface}" msgstr "" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Nested staff groups" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Modifying single staves" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Staff symbol" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "line" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{line-spanner-interface}" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "ledger line" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Visibility of objects" msgstr "" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Ossia staves" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Removing the stencil" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "Frenched staff" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Making objects transparent" msgstr "" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Hiding staves" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Writing parts" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Metronome marks" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Painting objects white" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronomic indication" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using break-visibility" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "tempo indication" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Special considerations" msgstr "" -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome mark" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Line styles" msgstr "" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Instrument names" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Rotating objects" msgstr "" -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Quoting other voices" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Formatting cue notes" -msgstr "" - -#. Documentation/user/editorial.itely:326 (comment) -msgid "this is deliberate nonsense; note that the stems remain black" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @section in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @section in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @section in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @section in Documentation/de/user/editorial.itely -msgid "Editorial annotations" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Inside the staff" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Selecting notation font size" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Fingering instructions" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Hidden notes" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Coloring objects" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Parentheses" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Stems" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Outside the staff" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Balloon help" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Grid lines" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Analysis brackets" -msgstr "" - -#. Documentation/user/text.itely:421 (variable) -msgid "allegro" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating layout objects" msgstr "" -#. @node in Documentation/user/text.itely -#. @section in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @section in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @section in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @section in Documentation/de/user/text.itely -msgid "Text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Writing text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text scripts" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text spanners" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text marks" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Separate text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Formatting text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text markup introduction" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Selecting font and font size" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text alignment" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Graphic notation inside markup" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Music notation inside markup" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Multi-page markup" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Fonts" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Fonts explained" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Single entry fonts" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Entire document fonts" -msgstr "" - -#. @node in Documentation/user/specialist.itely -#. @chapter in Documentation/user/specialist.itely -#. @node in Documentation/fr/user/specialist.itely -#. @chapter in Documentation/fr/user/specialist.itely -#. @node in Documentation/es/user/specialist.itely -#. @chapter in Documentation/es/user/specialist.itely -#. @node in Documentation/de/user/specialist.itely -#. @chapter in Documentation/de/user/specialist.itely -msgid "Specialist notation" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating markup" msgstr "" -#. Documentation/user/vocal.itely:519 (comment) -msgid "not recommended: left aligns syllables" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Advanced tweaks" msgstr "" -#. Documentation/user/vocal.itely:522 (comment) -msgid "wrong: durations needed" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning objects" msgstr "" -#. Documentation/user/vocal.itely:525 (comment) -msgid "correct" +#. @node in Documentation/notation/changing-defaults.itely +msgid "Setting X-offset and Y-offset directly" msgstr "" -#. Documentation/user/vocal.itely:677 (context id) -msgid "lala" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Setting @code{X-offset} and @code{Y-offset} directly" msgstr "" -#. Documentation/user/vocal.itely:818 (context id) -msgid "splitpart" +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the side-position-interface" msgstr "" -#. Documentation/user/vocal.itely:863 (variable) -msgid "voice" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{side-position-interface}" msgstr "" -#. Documentation/user/vocal.itely:870 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:22 (variable) -msgid "lyr" +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the self-alignment-interface" msgstr "" -#. Documentation/user/vocal.itely:1069 (context id) -msgid "tune" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{self-alignment-interface}" msgstr "" -#. Documentation/user/vocal.itely:1111 (context id) -msgid "lahlah" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{aligned-on-parent} procedures" msgstr "" -#. Documentation/user/vocal.itely:1294 (comment) -msgid "moves the column off the left margin;" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{centered-on-parent} procedures" msgstr "" -#. Documentation/user/vocal.itely:1295 (comment) -msgid "can be removed if space on the page is tight" +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the break-alignable-interface" msgstr "" -#. Documentation/user/vocal.itely:1303 (comment) -#. Documentation/user/vocal.itely:1321 (comment) -msgid "adds vertical spacing between verses" +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{break-alignable-interface}" msgstr "" -#. Documentation/user/vocal.itely:1311 (comment) -msgid "adds horizontal spacing between columns;" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Vertical grouping of grobs" msgstr "" -#. Documentation/user/vocal.itely:1312 (comment) -msgid "if they are still too close, add more \\\" \\\" pairs" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying stencils" msgstr "" -#. Documentation/user/vocal.itely:1313 (comment) -msgid "until the result looks good" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying shapes" msgstr "" -#. Documentation/user/vocal.itely:1329 (comment) -msgid "gives some extra space on the right margin;" +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Modifying ties and slurs" msgstr "" -#. Documentation/user/vocal.itely:1330 (comment) -msgid "can be removed if page space is tight" -msgstr "" +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +#, fuzzy +msgid "Using music functions" +msgstr "音楽表記のネスト" -#. @node in Documentation/user/vocal.itely -#. @section in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @section in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @section in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @section in Documentation/de/user/vocal.itely -msgid "Vocal music" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" msgstr "" -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Common notation for vocal music" +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" msgstr "" -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "References for vocal music and lyrics" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +msgid "Notation manual tables" msgstr "" -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Opera" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" msgstr "" -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Song books" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" msgstr "" -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spoken music" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Chants" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Ancient vocal music" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Entering lyrics" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics explained" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Working with lyrics and variables" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Automatic syllable durations" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Manual syllable durations" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple syllables to one note" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple notes to one syllable" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Skipping notes" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Extenders and hyphens" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics and repeats" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Specific uses of lyrics" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Divisi lyrics" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics independent of notes" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spacing out syllables" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Centering lyrics between staves" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Stanzas" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding stanza numbers" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding dynamics marks to stanzas" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding singers' names to stanzas" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Stanzas with different rhythms" -msgstr "" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -msgid "Ignoring melismata" -msgstr "" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Switching to an alternative melody" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end in multiple columns" -msgstr "" - -#. Documentation/user/keyboards.itely:191 (comment) -msgid "keep staff alive" -msgstr "" - -#. Documentation/user/keyboards.itely:280 (context id) -msgid "melOne" -msgstr "" - -#. Documentation/user/keyboards.itely:349 (context id) -#. Documentation/user/fretted-strings.itely:247 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:25 (variable) -#. input/lsr/jazz-combo-template.ly:207 (context id) -#. input/lsr/jazz-combo-template.ly:216 (context id) -msgid "two" -msgstr "" - -#. Documentation/user/keyboards.itely:403 (comment) -msgid "stems may overlap the other staff" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined fretboard diagrams" msgstr "" -#. Documentation/user/keyboards.itely:405 (comment) -msgid "extend the stems to reach other other staff" -msgstr "" - -#. Documentation/user/keyboards.itely:407 (comment) -msgid "do not print extra flags" -msgstr "" - -#. Documentation/user/keyboards.itely:409 (comment) -msgid "prevent beaming as needed" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @section in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @section in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @section in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @section in Documentation/de/user/keyboards.itely -msgid "Keyboard and other multi-staff instruments" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Common notation for keyboards" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for keyboards" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff manually" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff automatically" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Staff-change lines" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Cross-staff stems" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Piano" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Piano pedals" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Accordion" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Discant symbols" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Harp" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for harps" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Harp pedals" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @section in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @section in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @section in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @section in Documentation/de/user/unfretted-strings.itely -msgid "Unfretted string instruments" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @subsection in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @subsection in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @subsection in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @subsection in Documentation/de/user/unfretted-strings.itely -msgid "Common notation for unfretted strings" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "References for unfretted strings" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Bowing indications" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Harmonics" -msgstr "" - -#. @rglos in Documentation/user/unfretted-strings.itely -#. @rglos in Documentation/es/user/unfretted-strings.itely -#. @rglos in Documentation/de/user/unfretted-strings.itely -msgid "harmonics" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" msgstr "" -#. @node in Documentation/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Snap (Bartok) pizzicato" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -msgid "Snap (Bartók) pizzicato" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" msgstr "" -#. Documentation/user/fretted-strings.itely:243 (variable) -msgid "melodia" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" msgstr "" -#. Documentation/user/fretted-strings.itely:248 (context id) -msgid "shared" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" msgstr "" -#. Documentation/user/fretted-strings.itely:249 (context id) -msgid "solo" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" msgstr "" -#. Documentation/user/fretted-strings.itely:326 (variable) -msgid "mynotes" +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" msgstr "" -#. Documentation/user/fretted-strings.itely:453 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:32 (comment) -msgid "A chord for ukulele" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" msgstr "" -#. Documentation/user/fretted-strings.itely:785 (variable) -#. Documentation/user/fretted-strings.itely:808 (variable) -#. Documentation/user/fretted-strings.itely:837 (variable) -#. Documentation/user/fretted-strings.itely:868 (variable) -#. Documentation/user/fretted-strings.itely:894 (variable) -#. Documentation/user/fretted-strings.itely:942 (variable) -msgid "mychords" -msgstr "" - -#. Documentation/user/fretted-strings.itely:812 (variable) -msgid "mychordlist" -msgstr "" - -#. Documentation/user/fretted-strings.itely:929 (comment) -msgid "add a new chord shape" -msgstr "" - -#. Documentation/user/fretted-strings.itely:933 (comment) -msgid "add some new chords based on the power chord shape" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @section in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @section in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @section in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @section in Documentation/de/user/fretted-strings.itely -msgid "Fretted string instruments" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Common notation for fretted strings" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "References for fretted strings" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "String number indications" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Default tablatures" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Custom tablatures" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Fret diagram markups" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Predefined fret diagrams" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Automatic fret diagrams" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Right-hand fingerings" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" msgstr "" -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Guitar" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Time Signature glyphs" +msgstr "拍子記号" -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating position and barring" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" msgstr "" -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating harmonics and dampened notes" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Accidental glyphs" +msgstr "臨時記号" -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Banjo" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" msgstr "" -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Banjo tablatures" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" msgstr "" -#. Documentation/user/percussion.itely:385 (comment) -msgid "These lines define the position of the woodblocks in the stave;" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" msgstr "" -#. Documentation/user/percussion.itely:386 (comment) -msgid "if you like, you can change it or you can use special note heads" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Rest glyphs" +msgstr "休符" -#. Documentation/user/percussion.itely:387 (comment) -msgid "for the woodblocks." +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" msgstr "" -#. Documentation/user/percussion.itely:391 (variable) -msgid "woodstaff" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" msgstr "" -#. Documentation/user/percussion.itely:392 (comment) -msgid "This defines a staff with only two lines." -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Dynamic glyphs" +msgstr "強弱記号" -#. Documentation/user/percussion.itely:393 (comment) -msgid "It also defines the positions of the two lines." +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" msgstr "" -#. Documentation/user/percussion.itely:396 (comment) -msgid "This is neccessary; if not entered, the barline would be too short!" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" msgstr "" -#. Documentation/user/percussion.itely:403 (comment) -msgid "with this you load your new drum style table" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" msgstr "" -#. Documentation/user/percussion.itely:425 (variable) -msgid "tambustaff" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" msgstr "" -#. Documentation/user/percussion.itely:439 (comment) -msgid "the trick with the scaled duration and the shorter rest" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" msgstr "" -#. Documentation/user/percussion.itely:440 (comment) -msgid "is neccessary for the correct ending of the trill-span!" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" msgstr "" -#. Documentation/user/percussion.itely:451 (variable) -msgid "tamtamstaff" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" msgstr "" -#. Documentation/user/percussion.itely:473 (variable) -msgid "bellstaff" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" msgstr "" -#. Documentation/user/percussion.itely:504 (variable) -msgid "drumsA" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" msgstr "" -#. Documentation/user/percussion.itely:519 (variable) -msgid "drumsB" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" msgstr "" -#. @node in Documentation/user/percussion.itely -#. @section in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @section in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @section in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @section in Documentation/de/user/percussion.itely -msgid "Percussion" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" msgstr "" -#. @node in Documentation/user/percussion.itely -#. @subsection in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @subsection in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @subsection in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @subsection in Documentation/de/user/percussion.itely -msgid "Common notation for percussion" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" msgstr "" -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "References for percussion" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Note head styles" msgstr "" -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Basic percussion notation" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup commands" msgstr "" -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Drum rolls" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" msgstr "" -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Pitched percussion" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of articulations" msgstr "" -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Percussion staves" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Custom percussion staves" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Ghost notes" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @section in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @section in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @section in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @section in Documentation/de/user/wind.itely -msgid "Wind instruments" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Common notation for wind instruments" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "References for wind instruments" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Bagpipes" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe definitions" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe example" -msgstr "" - -#. Documentation/user/chords.itely:696 (variable) -#. input/lsr/chordchanges-for-fretboards.ly:35 (variable) -msgid "myChords" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Articulation scripts" +msgstr "アーティキュレーション" -#. Documentation/user/chords.itely:1026 (comment) -#. Documentation/user/chords.itely:1047 (comment) -msgid "Put notes on same Staff as figures" -msgstr "" - -#. Documentation/user/chords.itely:1110 (comment) -msgid "The extenders are correct here, with the same rhythm as the bass" -msgstr "" - -#. Documentation/user/chords.itely:1122 (comment) -msgid "The extenders are incorrect here, even though the timing is the same" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @section in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @section in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @section in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @section in Documentation/de/user/chords.itely -msgid "Chord notation" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Chord mode" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Chord mode overview" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Common chords" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Extended and altered chords" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Displaying chords" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Printing chord names" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Customizing chord names" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Figured bass" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Introduction to figured bass" -msgstr "" - -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/chords.itely -msgid "figured bass" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Ornament scripts" +msgstr "基礎となるコンセプト" -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Entering figured bass" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" msgstr "" -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Displaying figured bass" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" msgstr "" -#. Documentation/user/ancient.itely:357 (context id) -msgid "discantus" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" msgstr "" -#. Documentation/user/ancient.itely:823 (variable) -msgid "ficta" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Ancient scripts" +msgstr "臨時記号" -#. Documentation/user/ancient.itely:976 (context id) -msgid "cantus" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Percussion notes" msgstr "" -#. Documentation/user/ancient.itely:2399 (variable) -#. Documentation/user/ancient.itely:2434 (variable) -#. Documentation/user/ancient.itely:2502 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:39 (variable) -msgid "chant" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" msgstr "" -#. Documentation/user/ancient.itely:2405 (variable) -#. Documentation/user/ancient.itely:2445 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:46 (variable) -msgid "verba" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" msgstr "" -#. Documentation/user/ancient.itely:2487 (variable) -msgid "spiritus" -msgstr "" - -#. Documentation/user/ancient.itely:2495 (variable) -msgid "spirLyr" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @section in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @section in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @section in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @section in Documentation/de/user/ancient.itely -msgid "Ancient notation" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Overview of the supported styles" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Ancient notation---common features" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Pre-defined contexts" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ligatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Custodes" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Figured bass support" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Typesetting mensural music" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural contexts" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural clefs" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural time signatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural note heads" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural flags" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural rests" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural accidentals and key signatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -msgid "Annotational accidentals (musica ficta)" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Annotational accidentals (@emph{musica ficta})" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "White mensural ligatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Typesetting Gregorian chant" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian chant contexts" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian clefs" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian accidentals and key signatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Divisiones" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian articulation signs" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Augmentum dots (@emph{morae})" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian square neume ligatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Working with ancient music---scenarios and solutions" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Incipits" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensurstriche layout" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Transcribing Gregorian chant" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient and modern from one source" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Editorial markings" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @section in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @section in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @section in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @section in Documentation/de/user/world.itely -msgid "World music" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @subsection in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @subsection in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @subsection in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @subsection in Documentation/de/user/world.itely -msgid "Arabic music" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "References for Arabic music" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic note names" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic key signatures" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic time signatures" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic music example" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Further reading" -msgstr "" - -#. Documentation/user/input.itely:546 (comment) -msgid "not printed" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" msgstr "" -#. Documentation/user/input.itely:978 (variable) -msgid "allLyrics" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "closure" +msgstr "色 (color)" -#. @node in Documentation/user/input.itely -#. @chapter in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @chapter in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @chapter in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @chapter in Documentation/de/user/input.itely -msgid "General input and output" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" msgstr "" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Input structure" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Structure of a score" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Multiple scores in a book" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "interface" +msgstr "音程 (interval)" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "File structure" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" msgstr "" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Titles and headers" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Creating titles" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Custom titles" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Reference to page numbers" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Table of contents" -msgstr "目次" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "parser variable" +msgstr "環境変数" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Working with input files" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Including LilyPond files" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Different editions from one source" +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" msgstr "" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Using variables" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "All context properties" msgstr "" -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Using tags" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Layout properties" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Text encoding" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Displaying LilyPond notation" -msgstr "" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +#, fuzzy +msgid "Predefined type predicates" +msgstr "定義済みコマンド" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Controlling output" +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Scheme functions" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Extracting fragments of music" +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +msgid "Cheat sheet" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Skipping corrected music" +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" msgstr "" -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "MIDI output" -msgstr "" +#. @node in Documentation/usage/running.itely +#, fuzzy +msgid "Running lilypond" +msgstr "LilyPond を実行する" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Creating MIDI files" -msgstr "" +#. @chapter in Documentation/usage/running.itely +#, fuzzy +msgid "Running @command{lilypond}" +msgstr "@command{lilypond} を呼び出す" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "MIDI block" -msgstr "" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "通常の使用方法" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "What goes into the MIDI output?" -msgstr "" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "コマンド ラインの使用方法" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Supported in MIDI" +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Unsupported in MIDI" -msgstr "" +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "@command{lilypond} を呼び出す" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Repeats in MIDI" +#. @unnumberedsubsubsec in Documentation/usage/running.itely +msgid "Standard shell commands" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Controlling MIDI dynamics" -msgstr "" +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "lilypond のコマンド ライン オプション" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Dynamic marks" -msgstr "" +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "@command{lilypond} のコマンド ライン オプション" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Overall MIDI volume" -msgstr "" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "環境変数" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Equalizing different instruments (i)" -msgstr "" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +#, fuzzy +msgid "LilyPond in chroot jail" +msgstr "環境変数" -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Equalizing different instruments (ii)" +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" msgstr "" -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Percussion in MIDI" -msgstr "" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "エラー メッセージ" -#. Documentation/user/spacing.itely:882 (comment) -msgid "this does nothing" +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" msgstr "" -#. Documentation/user/spacing.itely:883 (comment) -msgid "a break here would work" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" msgstr "" -#. Documentation/user/spacing.itely:884 (comment) -msgid "as does this break" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" msgstr "" -#. Documentation/user/spacing.itely:896 (comment) -msgid "now the break is allowed" +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" msgstr "" -#. Documentation/user/spacing.itely:1775 (comment) -msgid "this time the text will be closer to the staff" +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" msgstr "" -#. Documentation/user/spacing.itely:1777 (comment) -msgid "by setting outside-staff-priority to a non-number," +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" msgstr "" -#. Documentation/user/spacing.itely:1778 (comment) -msgid "we disable the automatic collision avoidance" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" msgstr "" -#. Documentation/user/spacing.itely:1781 (comment) -msgid "now they will collide" +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" msgstr "" -#. Documentation/user/spacing.itely:1807 (comment) -msgid "the markup is too close to the following note" -msgstr "" +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "convert-ly を使ってファイルを更新する" -#. Documentation/user/spacing.itely:1811 (comment) -msgid "setting outside-staff-horizontal-padding fixes this" -msgstr "" +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "@command{convert-ly} を使ってファイルを更新する" -#. @node in Documentation/user/spacing.itely -#. @chapter in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @chapter in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @chapter in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @chapter in Documentation/de/user/spacing.itely -msgid "Spacing issues" +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Paper and pages" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Paper size" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Page formatting" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Vertical dimensions" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Horizontal dimensions" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Other layout variables" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Music layout" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Setting the staff size" -msgstr "" +#. @node in Documentation/usage/updating.itely +#, fuzzy +msgid "Invoking convert-ly" +msgstr "@command{lilypond} を呼び出す" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Score layout" -msgstr "" +#. @section in Documentation/usage/updating.itely +#, fuzzy +msgid "Invoking @command{convert-ly}" +msgstr "@command{convert-ly} を使ってファイルを更新する" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Breaks" -msgstr "" +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "convert-ly のコマンド ライン オプション" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Line breaking" +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "@command{convert-ly} のコマンド ライン オプション" + +#. @node in Documentation/usage/updating.itely +#, fuzzy +msgid "Problems running convert-ly" +msgstr "convert-ly の問題点" + +#. @section in Documentation/usage/updating.itely +#, fuzzy +msgid "Problems running @code{convert-ly}" +msgstr "@command{convert-ly} の問題点" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Page breaking" +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Optimal page breaking" +#. @chapter in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "Running @command{lilypond-book}" +msgstr "@command{lilypond} を呼び出す" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Optimal page turning" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Minimal page breaking" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Explicit breaks" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Using an extra voice for breaks" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Vertical spacing" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing inside a system" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing between systems" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Explicit staff and system positioning" +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Two-pass vertical spacing" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical collision avoidance" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Horizontal spacing" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Horizontal spacing overview" +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "New spacing area" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Changing horizontal spacing" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Line length" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Proportional notation" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Fitting music onto fewer pages" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Displaying spacing" +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" msgstr "" -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Changing spacing" +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" msgstr "" -#. Documentation/user/changing-defaults.itely:446 (variable) -msgid "keepVoicesAlive" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" msgstr "" -#. Documentation/user/changing-defaults.itely:448 (context id) -#. Documentation/user/changing-defaults.itely:454 (context id) -#. Documentation/user/changing-defaults.itely:462 (context id) -#. Documentation/user/changing-defaults.itely:464 (context id) -msgid "A" +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" msgstr "" -#. Documentation/user/changing-defaults.itely:448 (comment) -msgid "Keep Voice \\\"A\\\" alive for 5 bars" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" msgstr "" -#. Documentation/user/changing-defaults.itely:449 (context id) -#. Documentation/user/changing-defaults.itely:458 (context id) -#. Documentation/user/changing-defaults.itely:463 (context id) -msgid "B" +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" msgstr "" -#. Documentation/user/changing-defaults.itely:449 (comment) -msgid "Keep Voice \\\"B\\\" alive for 5 bars" +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" msgstr "" -#. Documentation/user/changing-defaults.itely:484 (variable) -#. Documentation/user/changing-defaults.itely:495 (context id) -#. Documentation/user/changing-defaults.itely:501 (context id) -#. Documentation/user/changing-defaults.itely:503 (context id) -#. Documentation/user/changing-defaults.itely:506 (context id) -#. Documentation/user/changing-defaults.itely:528 (variable) -#. Documentation/user/changing-defaults.itely:544 (context id) -#, fuzzy -msgid "accompaniment" -msgstr "臨時記号 (accidental)" +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "" -#. Documentation/user/changing-defaults.itely:485 (variable) -#. Documentation/user/changing-defaults.itely:534 (variable) +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely #, fuzzy -msgid "words" -msgstr "和音 (chord)" - -#. Documentation/user/changing-defaults.itely:492 (comment) -msgid "Keep Voice \\\"melody\\\" alive for 4 bars" -msgstr "" +msgid "Sharing the table of contents" +msgstr "目次" -#. Documentation/user/changing-defaults.itely:523 (comment) -#. Documentation/user/changing-defaults.itely:525 (comment) -msgid "skip a bar" +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" msgstr "" -#. Documentation/user/changing-defaults.itely:2142 (comment) -msgid "increase the length of the tie" +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" msgstr "" -#. Documentation/user/changing-defaults.itely:2151 (comment) -msgid "increase the length of the rest bar" +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" msgstr "" -#. Documentation/user/changing-defaults.itely:2159 (comment) -msgid "increase the length of the hairpin" +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" msgstr "" -#. Documentation/user/changing-defaults.itely:2187 (comment) -msgid "default" +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" msgstr "" -#. Documentation/user/changing-defaults.itely:2190 (comment) -#. Documentation/user/changing-defaults.itely:2203 (comment) -msgid "not effective alone" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "ポイント&クリック" -#. Documentation/user/changing-defaults.itely:2194 (comment) -#. Documentation/user/changing-defaults.itely:2207 (comment) -msgid "effective only when both overrides are present" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "テキスト エディタのサポート" -#. Documentation/user/changing-defaults.itely:2582 (comment) -msgid "Remove bar line at the end of the current line" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "Emacs モード" -#. Documentation/user/changing-defaults.itely:2628 (comment) -msgid "Try to remove all key signatures" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "Vim モード" -#. Documentation/user/changing-defaults.itely:3048 (comment) -msgid "move horizontally left" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +#, fuzzy +msgid "Other editors" +msgstr "その他の情報" -#. Documentation/user/changing-defaults.itely:3050 (comment) -msgid "move vertically up" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" msgstr "" -#. Documentation/user/changing-defaults.itely:3051 (comment) -msgid "third finger" +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" msgstr "" -#. Documentation/user/changing-defaults.itely:3100 (comment) -#. Documentation/user/changing-defaults.itely:3132 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:64 (comment) -msgid "the RehearsalMark will be centered above the Clef" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" msgstr "" -#. Documentation/user/changing-defaults.itely:3106 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:71 (comment) -msgid "the RehearsalMark will be centered above the TimeSignature" +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" msgstr "" -#. Documentation/user/changing-defaults.itely:3126 (comment) -msgid "the RehearsalMark will be centered above the Key Signature" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" msgstr "" -#. Documentation/user/changing-defaults.itely:3146 (comment) -msgid "The RehearsalMark will be centered above the KeySignature" +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" msgstr "" -#. Documentation/user/changing-defaults.itely:3153 (comment) -#. Documentation/user/changing-defaults.itely:3169 (comment) -#. Documentation/user/changing-defaults.itely:3176 (comment) -msgid "" -"The RehearsalMark will be aligned with the left edge of the KeySignature" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" msgstr "" -#. Documentation/user/changing-defaults.itely:3158 (comment) -msgid "" -"The RehearsalMark will be aligned with the right edge of the KeySignature" +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" msgstr "" -#. Documentation/user/changing-defaults.itely:3170 (comment) -msgid "and then shifted right by 3.5 staff-spaces" +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" msgstr "" -#. Documentation/user/changing-defaults.itely:3177 (comment) -msgid "and then shifted left by 2 staff-spaces" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +#, fuzzy +msgid "Other formats" +msgstr "その他の情報" -#. Documentation/user/changing-defaults.itely:3225 (variable) -msgid "XinO" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +#, fuzzy +msgid "LilyPond output in other programs" +msgstr "GNU LilyPond --- アプリケーション使用方法" -#. @node in Documentation/user/changing-defaults.itely -#. @chapter in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @chapter in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @chapter in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @chapter in Documentation/de/user/changing-defaults.itely -msgid "Changing defaults" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Interpretation contexts" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Score - the master of all contexts" +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Top-level contexts - staff containers" +#. @node in Documentation/usage/external.itely +msgid "Independent includes" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Intermediate-level contexts - staves" +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Bottom-level contexts - voices" -msgstr "" +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +#, fuzzy +msgid "MIDI articulation" +msgstr "アーティキュレーション (articulation)" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely #, fuzzy -msgid "Keeping contexts alive" -msgstr "コンテキストを作成する" +msgid "Suggestions for writing files" +msgstr "LilyPond 入力ファイルの記述に対する提案" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Modifying context plug-ins" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "一般的な提案" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "既存の音楽を譜刻する" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "大きなプロジェクト" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Changing context default settings" +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Defining new contexts" +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) +msgid "discant" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Aligning contexts" +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) +msgid "dot" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Explaining the Internals Reference" +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) +msgid "16 voets register" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Navigating the program reference" +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) +msgid "accBasson" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Layout interfaces" +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) +msgid "een korig 8 en 16 voets register" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Determining the grob property" +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) +msgid "accBandon" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Naming conventions" +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) +msgid "accVCello" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Modifying properties" +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) +msgid "4-8-16 voets register" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Overview of modifying properties" +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) +msgid "accHarmon" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "The set command" +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) +msgid "accTrombon" msgstr "" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\set} command" +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) +msgid "eenkorig 4 en 16 voets register" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "The override command" +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) +msgid "accOrgan" msgstr "" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\override} command" +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) +msgid "accMaster" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "The tweak command" +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) +msgid "accAccord" msgstr "" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\tweak} command" +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) +msgid "accMusette" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "set versus override" +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) +msgid "accCeleste" msgstr "" -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "@code{\\set} vs. @code{\\override}" +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) +msgid "accOboe" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Useful concepts and properties" +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) +msgid "accClarin" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Input modes" +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) +msgid "accPiccolo" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Direction and placement" +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) +msgid "accViolin" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Distances and measurements" +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) +msgid "continuo" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Staff symbol properties" +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) +msgid "bassStaff" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Spanners" +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) +msgid "drh" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{spanner-interface}" +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) +msgid "drl" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{line-spanner-interface}" +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) +msgid "timb" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Visibility of objects" +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Removing the stencil" +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) +msgid "threeTwo" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Making objects transparent" +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) +msgid "threeFour" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Painting objects white" +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using break-visibility" +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Special considerations" +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:48 (variable) +msgid "cueWhile" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Line styles" +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:61 (variable) +msgid "flute" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Rotating objects" +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:67 (variable) +msgid "clarinet" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Rotating layout objects" +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:76 (variable) +msgid "pianoRH" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Rotating markup" +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:81 (variable) +msgid "pianoLH" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Advanced tweaks" +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) +msgid "first, define a variable to hold the formatted date:" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Aligning objects" +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) +msgid "date" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Setting @code{X-offset} and @code{Y-offset} directly" +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) +msgid "d-%m-%Y\\\" (localtime (current-time)))" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{side-position-interface}" +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) +msgid "use it in the title block:" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{self-alignment-interface}" +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) +msgid "and use it in a \\markup block:" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -msgid "Using the @code{aligned-on-parent} procedures" +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) +msgid "voiceFive" msgstr "" -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -msgid "Using the @code{centered-on-parent} procedures" +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +#, fuzzy +msgid "graceNotes" +msgstr "グレース ノート (grace notes)" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) +msgid "Default layout:" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{break-alignable-interface}" +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) +msgid "Reducing the minimum space below the staff and above the lyrics:" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Vertical grouping of grobs" +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) +msgid "Increase the size of the bar number by 2" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Modifying stencils" +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) +msgid "Print a bar number every second measure" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Modifying shapes" +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) +msgid "Center-align bar numbers" msgstr "" -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Modifying ties and slurs" +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) +msgid "Left-align bar numbers" msgstr "" -#. Documentation/user/programming-interface.itely:118 (variable) -msgid "custosNote" +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" msgstr "" -#. Documentation/user/programming-interface.itely:178 (variable) -msgid "manualBeam" +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" msgstr "" -#. Documentation/user/programming-interface.itely:198 (variable) -msgid "AltOn" +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) +msgid "the RehearsalMark will be centered above the KeySignature" msgstr "" -#. Documentation/user/programming-interface.itely:203 (variable) -msgid "AltOff" +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) +msgid "" +"the RehearsalMark will be aligned with the left edge of the KeySignature" msgstr "" -#. Documentation/user/programming-interface.itely:216 (variable) -msgid "withAlt" +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) +msgid "" +"the RehearsalMark will be aligned with the right edge of the KeySignature" msgstr "" -#. Documentation/user/programming-interface.itely:350 (variable) -msgid "traLaLa" +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) +msgid "and then shifted right by one unit." msgstr "" -#. Documentation/user/programming-interface.itely:352 (comment) -msgid "dummy action to deal with parser lookahead" +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) +msgid "upperStaff" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @chapter in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @chapter in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @chapter in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @chapter in Documentation/de/user/programming-interface.itely -msgid "Interfaces for programmers" +#. Documentation/snippets/ancient-fonts.ly:49 (comment) +msgid "\\break % 1 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Music functions" +#. Documentation/snippets/ancient-fonts.ly:60 (comment) +msgid "\\break %2 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of music functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Simple substitution functions" +#. Documentation/snippets/ancient-fonts.ly:72 (comment) +msgid "\\break % 3 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Paired substitution functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Mathematics in functions" +#. Documentation/snippets/ancient-fonts.ly:87 (comment) +msgid "\\break % 4 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Void functions" +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) +msgid "\\break % 5 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Functions without arguments" +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) +msgid "\\break % 6 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of available music functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Programmer interfaces" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Input variables and Scheme" +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) +msgid "\\break % 7 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Internal music representation" +#. Documentation/snippets/ancient-fonts.ly:126 (comment) +msgid "\\break % 8 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Building complicated functions" +#. Documentation/snippets/ancient-fonts.ly:129 (comment) +msgid "\\break % 12 (32*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Displaying music expressions" +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) +msgid "lowerStaff" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Music properties" +#. Documentation/snippets/ancient-fonts.ly:144 (comment) +msgid "\\break % 2 (16*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Doubling a note with slurs (example)" +#. Documentation/snippets/ancient-fonts.ly:149 (comment) +msgid "\\break % 4 (16*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Adding articulation to notes (example)" +#. Documentation/snippets/ancient-fonts.ly:188 (comment) +msgid "\\break % 9 (16*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Markup programmer interface" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Markup construction in Scheme" +#. Documentation/snippets/ancient-fonts.ly:190 (comment) +msgid "lig" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "How markups work internally" +#. Documentation/snippets/ancient-fonts.ly:194 (comment) +msgid "\\break % 11 (16*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup command definition" +#. Documentation/snippets/ancient-fonts.ly:205 (comment) +msgid "\\break % 12 (8*1)" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup list command definition" +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Contexts for programmers" +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Context evaluation" +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Running a function on all layout objects" +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Scheme procedures as properties" +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of \\tweak" +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" msgstr "" -#. @section in Documentation/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of @code{\\tweak}" +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" msgstr "" -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Difficult tweaks" +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" msgstr "" -#. @node in Documentation/user/literature.itely -#. @appendix in Documentation/user/literature.itely -#. @node in Documentation/fr/user/literature.itely -#. @appendix in Documentation/fr/user/literature.itely -#. @node in Documentation/es/user/literature.itely -#. @appendix in Documentation/es/user/literature.itely -#. @node in Documentation/de/user/literature.itely -#. @appendix in Documentation/de/user/literature.itely -msgid "Literature list" +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendix in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendix in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendix in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendix in Documentation/de/user/notation-appendices.itely -msgid "Notation manual tables" +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Chord name chart" +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Common chord modifiers" +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Predefined fretboard diagrams" +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "MIDI instruments" +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of colors" +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Normal colors" +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "X color names" +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color Names without a numerical suffix:" +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color names with a numerical suffix" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" msgstr "" -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Grey Scale" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "The Feta font" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) +msgid "incipit" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Note head styles" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) +msgid "tight spacing" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of articulations" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +msgid "turn off bar lines" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Percussion notes" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) +msgid "need this extra \\skip such that clef change comes" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "All context properties" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) +msgid "after bar line" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Layout properties" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) +msgid "CHECK: no effect?" msgstr "" -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Identifiers" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Scheme functions" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) +msgid "turn bar lines on again" msgstr "" -#. @node in Documentation/user/cheatsheet.itely -#. @appendix in Documentation/user/cheatsheet.itely -#. @node in Documentation/fr/user/cheatsheet.itely -#. @appendix in Documentation/fr/user/cheatsheet.itely -#. @node in Documentation/es/user/cheatsheet.itely -#. @appendix in Documentation/es/user/cheatsheet.itely -#. @node in Documentation/de/user/cheatsheet.itely -#. @appendix in Documentation/de/user/cheatsheet.itely -msgid "Cheat sheet" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) +msgid "FIXME: setting printKeyCancellation back to #t must not" msgstr "" -#. @top in Documentation/fr/user/lilypond-learning.tely -#, fuzzy -msgid "GNU LilyPond --- Manuel d'initiation" -msgstr "GNU LilyPond --- アプリケーション使用方法" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) +msgid "occur in the first bar after the incipit. Dto. for forceClef." +msgstr "" -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Commonly tweaked properties" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) +msgid "Therefore, we need an extra \\skip." msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Hauteurs" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) +msgid "the actual music" msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Durées et rythme" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) +msgid "let finis bar go through all staves" msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Silences" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) +msgid "finis bar" msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Métrique" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) +msgid "discantusNotes" msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Tout ensemble" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) +msgid "two bars" msgstr "" -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Exemples cliquables" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) +msgid "eight bars" msgstr "" -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -msgid "Outside staff objects" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) +msgid "one bar" msgstr "" -#. @top in Documentation/fr/user/lilypond-program.tely -#, fuzzy -msgid "GNU LilyPond --- Utilisation des programmes" -msgstr "GNU LilyPond --- アプリケーション使用方法" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) +msgid "discantusLyrics" +msgstr "" -#. @section in Documentation/fr/user/running.itely -#, fuzzy -msgid "Updating with @command{convert-ly}" -msgstr "@command{convert-ly} を使ってファイルを更新する" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) +msgid "altusNotes" +msgstr "" -#. @top in Documentation/fr/user/lilypond.tely -#, fuzzy -msgid "GNU LilyPond --- Manuel de notation" -msgstr "GNU LilyPond --- アプリケーション使用方法" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) +msgid "seven bars" +msgstr "" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat types" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) +msgid "altusLyrics" msgstr "" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat syntax" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) +msgid "tenorNotes" msgstr "" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Manual repeat commands" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) +msgid "four bars" msgstr "" -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -msgid "Other repeats" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) +msgid "tenorLyrics" msgstr "" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Tremolo subdivisions" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) +msgid "bassusNotes" msgstr "" -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Measure repeats" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) +msgid "bassusLyrics" msgstr "" -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#, fuzzy -msgid "Basic polyphony" -msgstr "多声" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) +msgid "choirStaff" +msgstr "" -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -msgid "Blank music sheet" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) +msgid "no bars in staves" msgstr "" -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Text and line spanners" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) +msgid "incipit should not start with a start delimiter" msgstr "" -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Nested scores" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) +msgid "no slurs" msgstr "" -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Page wrapping text" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) +msgid "Comment in the below \\\"\\remove\\\" command to allow line" msgstr "" -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Mélismes dans certaines strophes seulement" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) +msgid "breaking also at those barlines where a note overlaps" msgstr "" -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Basculer vers une mélodie alternative" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) +msgid "into the next bar. The command is commented out in this" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Introduction to ancient notation" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) +msgid "short example score, but especially for large scores, you" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient notation supported" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) +msgid "will typically yield better line breaking and thus improve" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Alternative note signs" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) +msgid "overall spacing if you comment in the following command." msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient note heads" +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) +msgid "\\remove \\\"Forbid_line_break_engraver\\\"" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#, fuzzy -msgid "Ancient accidentals" -msgstr "臨時記号" +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +msgid "tick" +msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Ancient rests" +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +msgid "Use markup to center the chant on the page" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#, fuzzy -msgid "Ancient clefs" -msgstr "臨時記号" +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +msgid "centered" +msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) #, fuzzy -msgid "Ancient flags" -msgstr "臨時記号" +msgid "End score" +msgstr "音階 (scale)" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) #, fuzzy -msgid "Ancient time signatures" -msgstr "拍子記号" +msgid "End markup" +msgstr "シャープ (sharp)" -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Additional note signs" +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) +msgid "fragment" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) #, fuzzy -msgid "Ancient articulations" -msgstr "アーティキュレーション" +msgid "slurNotes" +msgstr "スラー (slur)" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Gregorian square neumes ligatures" +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +msgid "Default behavior" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -msgid "Transcribing ancient music" +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" msgstr "" -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#, fuzzy -msgid "Annotational accidentals" -msgstr "臨時記号" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -msgid "Baroque rhythmic notation" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" msgstr "" -#. @section in Documentation/fr/user/spacing.itely -msgid "Horizontal Spacing" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" msgstr "" -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Layout tunings within contexts" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" msgstr "" -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Constructing a tweak" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" msgstr "" -#. @node in Documentation/fr/user/programming-interface.itely -msgid "Using Scheme code instead of tweak" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" msgstr "" -#. @top in Documentation/es/user/lilypond-learning.tely -msgid "GNU LilyPond: Manual de aprendizaje" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Instrucciones predefinidas" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Fragmentos de código seleccionados" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Propiedades trucadas frecuentemente" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Véase también" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" msgstr "" -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Advertencias y problemas conocidos" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" msgstr "" -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#, fuzzy -msgid "Automatic behaviour" -msgstr "自動譜刻" - -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Updating old files" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" msgstr "" -#. @top in Documentation/es/user/lilypond-program.tely -msgid "GNU LilyPond: Manual de utilización del programa" +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" msgstr "" -#. @top in Documentation/es/user/lilypond.tely -msgid "GNU LilyPond: Manual de referencia de la notación" +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) +msgid "Set default beaming for all staves" msgstr "" -#. @chapheading in Documentation/es/user/lilypond.tely -msgid "El tipografiador de música" +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) +msgid "Modify beaming for just this staff" msgstr "" -#. @top in Documentation/de/user/lilypond-learning.tely -#, fuzzy -msgid "GNU LilyPond -- Handbuch zum Lernen" -msgstr "GNU LilyPond --- 学習マニュアル" - -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Lilypond-book templates" +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) +msgid "Inherit beaming from Score context" msgstr "" -#. @top in Documentation/de/user/lilypond-program.tely -#, fuzzy -msgid "GNU LilyPond -- Programmbenutzung" -msgstr "GNU LilyPond --- 学習マニュアル" - -#. @chapheading in Documentation/de/user/lilypond.tely -msgid "Das Notensatzprogramm" +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) +msgid "Modify beaming for this voice only" msgstr "" -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Ignorieren von Melismen" +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) +msgid "rhythm 2-3-2" msgstr "" -#. @top in Documentation/ja/user/lilypond-learning.tely -msgid "GNU LilyPond --- 学習マニュアル" +#. Documentation/snippets/book-parts.ly:22 (comment) +msgid "book paper, which is inherited by all children bookparts" msgstr "" -#. @top in Documentation/ja/user/lilypond-program.tely -msgid "GNU LilyPond --- アプリケーション使用方法" +#. Documentation/snippets/book-parts.ly:25 (comment) +msgid "Page footer: add a different part-tagline at part last page" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:36 (variable) -msgid "discant" +#. Documentation/snippets/book-parts.ly:29 (comment) +msgid "Copyright header field only on book first page." msgstr "" -#. input/lsr/accordion-discant-symbols.ly:39 (variable) -msgid "dot" +#. Documentation/snippets/book-parts.ly:33 (comment) +msgid "Part tagline header field only on each part last page." msgstr "" -#. input/lsr/accordion-discant-symbols.ly:45 (comment) -msgid "16 voets register" +#. Documentation/snippets/book-parts.ly:37 (comment) +msgid "Tagline header field only on book last page." msgstr "" -#. input/lsr/accordion-discant-symbols.ly:46 (variable) -msgid "accBasson" +#. Documentation/snippets/book-parts.ly:44 (comment) +msgid "book header, which is inherited by the first bookpart" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:52 (comment) -msgid "een korig 8 en 16 voets register" +#. Documentation/snippets/book-parts.ly:53 (comment) +msgid "a different page breaking function may be used on each part" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:53 (variable) -msgid "accBandon" +#. Documentation/snippets/breathing-signs.ly:20 (comment) +msgid "this bar contains no \\breathe" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:61 (variable) -msgid "accVCello" +#. Documentation/snippets/breathing-signs.ly:22 (comment) +msgid "Modern notation:" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:71 (comment) -msgid "4-8-16 voets register" +#. Documentation/snippets/breathing-signs.ly:23 (comment) +msgid "by default, \\breathe uses the rcomma, just as if saying:" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:72 (variable) -msgid "accHarmon" +#. Documentation/snippets/breathing-signs.ly:24 (comment) +msgid "" +"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" +"\\\")" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:82 (variable) -msgid "accTrombon" +#. Documentation/snippets/breathing-signs.ly:27 (comment) +msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:94 (comment) -msgid "eenkorig 4 en 16 voets register" +#. Documentation/snippets/breathing-signs.ly:28 (comment) +msgid "N.B.: must use Staff context here, since we start a Voice below" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:95 (variable) -msgid "accOrgan" +#. Documentation/snippets/breathing-signs.ly:32 (comment) +msgid "vee" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:103 (variable) -msgid "accMaster" +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) +msgid "construct the symbol" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:117 (variable) -msgid "accAccord" +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) +msgid "set the breathe mark back to normal" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:129 (variable) -msgid "accMusette" +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) +msgid "hairpinWithCenteredText" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:139 (variable) -msgid "accCeleste" +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) +msgid "hairpinMolto" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:147 (variable) -msgid "accOboe" +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) +msgid "hairpinMore" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:155 (variable) -msgid "accClarin" +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) +msgid "smallFlageolet" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:161 (variable) -msgid "accPiccolo" +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +msgid "Default setting" msgstr "" -#. input/lsr/accordion-discant-symbols.ly:167 (variable) -msgid "accViolin" +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +msgid "The following is only here to print the names of the" msgstr "" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:43 (variable) -#. input/lsr/jazz-combo-template.ly:233 (variable) -#. input/lsr/jazz-combo-template.ly:281 (context id) -msgid "bass" +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +msgid "chords styles; it can be removed if you do not need to" msgstr "" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:48 (variable) -msgid "continuo" +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) +msgid "print them." msgstr "" -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:60 (context id) -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:61 (context id) -msgid "bassStaff" +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." msgstr "" -#. input/lsr/adding-an-extra-staff-at-a-line-break.ly:53 (comment) -msgid "The next line is not needed in 2.11.x or later:" +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:182 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) +msgid "{" msgstr "" -#. input/lsr/adding-drum-parts.ly:48 (variable) -msgid "drh" +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:184 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) +msgid "}" msgstr "" -#. input/lsr/adding-drum-parts.ly:49 (variable) -msgid "drl" +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +msgid "sustainNotes" msgstr "" -#. input/lsr/adding-drum-parts.ly:50 (variable) -msgid "timb" +#. Documentation/snippets/chant-or-psalms-notation.ly:35 (variable) +msgid "stemOn" msgstr "" -#. input/lsr/adding-fingerings-to-tablatures.ly:26 (variable) -msgid "threeTwo" +#. Documentation/snippets/chant-or-psalms-notation.ly:36 (variable) +msgid "stemOff" msgstr "" -#. input/lsr/adding-fingerings-to-tablatures.ly:33 (variable) -msgid "threeFour" +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) +msgid "modify maj9 and 6(add9)" msgstr "" -#. input/lsr/adding-the-current-date-to-a-score.ly:31 (comment) -msgid "first, define a variable to hold the formatted date:" +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) +msgid "Exception music is chords with markups" msgstr "" -#. input/lsr/adding-the-current-date-to-a-score.ly:32 (variable) -msgid "date" +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) +msgid "chExceptionMusic" msgstr "" -#. input/lsr/adding-the-current-date-to-a-score.ly:32 (comment) -msgid "d-%m-%Y\\\" (localtime (current-time)))" +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) +msgid "Convert music to list and prepend to existing exceptions." msgstr "" -#. input/lsr/adding-the-current-date-to-a-score.ly:34 (comment) -msgid "use it in the title block:" +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) +msgid "chExceptions" msgstr "" -#. input/lsr/adding-the-current-date-to-a-score.ly:45 (comment) -msgid "and use it in a \\markup block:" +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) +msgid "theMusic" msgstr "" -#. input/lsr/additional-voices-to-avoid-collisions.ly:39 (variable) -msgid "voiceFive" +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" msgstr "" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:32 (comment) -msgid "Default layout:" +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" msgstr "" -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:41 (comment) -msgid "Reducing the minimum space below the staff and above the lyrics:" -msgstr "" +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +#, fuzzy +msgid "\\break" +msgstr "ビーム (beam)" -#. input/lsr/aligning-bar-numbers.ly:47 (comment) -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:36 (comment) -msgid "Increase the size of the bar number by 2" +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" msgstr "" -#. input/lsr/aligning-bar-numbers.ly:49 (comment) -#. input/lsr/printing-bar-numbers-at-regular-intervals.ly:45 (comment) -msgid "Print a bar number every second measure" +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" msgstr "" -#. input/lsr/aligning-bar-numbers.ly:52 (comment) -msgid "Center-align bar numbers" -msgstr "" +# not yet +#. Documentation/snippets/chords-headword.ly:81 (context id) +#, fuzzy +msgid "sop" +msgstr "トップ ページ" -#. input/lsr/aligning-bar-numbers.ly:55 (comment) -msgid "Left-align bar numbers" +#. Documentation/snippets/clip-systems.ly:65 (variable) +msgid "origScore" msgstr "" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:79 (comment) -msgid "the RehearsalMark will be centered above the KeySignature" +#. Documentation/snippets/clip-systems.ly:83 (comment) +msgid "Each clip-region is a (START . END) pair" msgstr "" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:90 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:102 (comment) -msgid "" -"the RehearsalMark will be aligned with the left edge of the KeySignature" +#. Documentation/snippets/clip-systems.ly:84 (comment) +msgid "where both are rhythmic-locations." msgstr "" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:96 (comment) -msgid "" -"the RehearsalMark will be aligned with the right edge of the KeySignature" +#. Documentation/snippets/clip-systems.ly:86 (comment) +msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" msgstr "" -#. input/lsr/aligning-marks-with-various-notation-objects.ly:103 (comment) -msgid "and then shifted right by one unit." +#. Documentation/snippets/clip-systems.ly:87 (comment) +msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" msgstr "" -#. input/lsr/ancient-fonts.ly:35 (variable) -#. input/lsr/ancient-fonts.ly:35 (context id) -msgid "upperStaff" +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) +msgid "Association list of pitches to colors." msgstr "" -#. input/lsr/ancient-fonts.ly:47 (comment) -msgid "\\break % 1 (8*1)" +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) +msgid "Compare pitch and alteration (not octave)." msgstr "" -#. input/lsr/ancient-fonts.ly:58 (comment) -msgid "\\break %2 (8*1)" +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) +msgid "piuF" msgstr "" -#. input/lsr/ancient-fonts.ly:70 (comment) -msgid "\\break % 3 (8*1)" +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) +msgid "musicUp" msgstr "" -#. input/lsr/ancient-fonts.ly:85 (comment) -msgid "\\break % 4 (8*1)" +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) +msgid "musicDown" msgstr "" -#. input/lsr/ancient-fonts.ly:94 (comment) -#. input/lsr/ancient-fonts.ly:156 (comment) -msgid "\\break % 5 (8*1)" +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" msgstr "" -#. input/lsr/ancient-fonts.ly:108 (comment) -#. input/lsr/ancient-fonts.ly:171 (comment) -msgid "\\break % 6 (8*1)" +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" msgstr "" -#. input/lsr/ancient-fonts.ly:117 (comment) -#. input/lsr/ancient-fonts.ly:181 (comment) -msgid "\\break % 7 (8*1)" +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" msgstr "" -#. input/lsr/ancient-fonts.ly:124 (comment) -msgid "\\break % 8 (8*1)" +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) +msgid "parenF" msgstr "" -#. input/lsr/ancient-fonts.ly:127 (comment) -msgid "\\break % 12 (32*1)" +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) +msgid "the hidden measure and bar line" msgstr "" -#. input/lsr/ancient-fonts.ly:132 (variable) -#. input/lsr/ancient-fonts.ly:132 (context id) -msgid "lowerStaff" +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" msgstr "" -#. input/lsr/ancient-fonts.ly:142 (comment) -msgid "\\break % 2 (16*1)" +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" msgstr "" -#. input/lsr/ancient-fonts.ly:147 (comment) -msgid "\\break % 4 (16*1)" +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" msgstr "" -#. input/lsr/ancient-fonts.ly:186 (comment) -msgid "\\break % 9 (16*1)" +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) +msgid "Set global properties of fret diagram" msgstr "" -#. input/lsr/ancient-fonts.ly:188 (comment) -msgid "lig" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) +msgid "mel" msgstr "" -#. input/lsr/ancient-fonts.ly:192 (comment) -msgid "\\break % 11 (16*1)" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) +msgid "C major for guitar, no barre, using defaults" msgstr "" -#. input/lsr/ancient-fonts.ly:203 (comment) -msgid "\\break % 12 (8*1)" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) +msgid "terse style" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:65 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:131 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:167 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:203 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:235 (comment) -#. input/lsr/incipit.ly:24 (variable) -#. input/lsr/incipit.ly:194 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:213 (comment) -msgid "incipit" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:67 (comment) -msgid "tight spacing" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:74 (comment) -msgid "turn off bar lines" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) +msgid "size 1.0" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) -msgid "need this extra \\skip such that clef change comes" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:79 (comment) -msgid "after bar line" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) +msgid "standard size" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) -msgid "CHECK: no effect?" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:84 (comment) -msgid "turn bar lines on again" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) +msgid "no barre, fret label down or left, small mute label font" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:92 (comment) -msgid "FIXME: setting printKeyCancellation back to #t must not" +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:93 (comment) -msgid "occur in the first bar after the incipit. Dto. for forceClef." +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) +msgid "larger dots, centered dots, fewer frets" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:94 (comment) -msgid "Therefore, we need an extra \\skip." +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) +msgid "label below string" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:99 (comment) -#. input/lsr/incipit.ly:67 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:38 (comment) -msgid "the actual music" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:101 (comment) -#. input/lsr/incipit.ly:70 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:40 (comment) -msgid "let finis bar go through all staves" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:104 (comment) -#. input/lsr/incipit.ly:73 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:43 (comment) -msgid "finis bar" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (variable) -#. input/lsr/incipit.ly:90 (variable) -#. input/lsr/incipit.ly:225 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:48 (variable) -msgid "discantusNotes" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:114 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:151 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:185 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:187 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:196 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:219 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:74 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:84 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:97 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:104 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:139 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:164 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:188 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:190 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:215 (comment) -msgid "two bars" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:115 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:218 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:140 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:214 (comment) -msgid "eight bars" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:150 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:153 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:163 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:189 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:191 (comment) -msgid "one bar" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:130 (variable) -#. input/lsr/incipit.ly:104 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:61 (variable) -msgid "discantusLyrics" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:144 (variable) -#. input/lsr/incipit.ly:127 (variable) -#. input/lsr/incipit.ly:232 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:71 (variable) -msgid "altusNotes" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:165 (comment) -msgid "seven bars" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:166 (variable) -#. input/lsr/incipit.ly:141 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:83 (variable) -msgid "altusLyrics" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:178 (variable) -#. input/lsr/incipit.ly:165 (variable) -#. input/lsr/incipit.ly:239 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:91 (variable) -msgid "tenorNotes" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:184 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:187 (comment) -msgid "four bars" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:202 (variable) -#. input/lsr/incipit.ly:180 (variable) -#. input/lsr/orchestra,-choir-and-piano-template.ly:57 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:103 (variable) -msgid "tenorLyrics" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:212 (variable) -#. input/lsr/incipit.ly:202 (variable) -#. input/lsr/incipit.ly:246 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:109 (variable) -msgid "bassusNotes" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:234 (variable) -#. input/lsr/incipit.ly:216 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:122 (variable) -msgid "bassusLyrics" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:245 (context id) -#. input/lsr/incipit.ly:224 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:230 (context id) -msgid "choirStaff" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:267 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:267 (comment) -msgid "no bars in staves" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +#, fuzzy +msgid "notes." +msgstr "脚注" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:270 (comment) -msgid "incipit should not start with a start delimiter" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:276 (comment) -#. input/lsr/incipit.ly:269 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:278 (comment) -msgid "no slurs" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:279 (comment) -#. input/lsr/incipit.ly:271 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:281 (comment) -msgid "Comment in the below \\\"\\remove\\\" command to allow line" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:282 (comment) -msgid "breaking also at those barlines where a note overlaps" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:281 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:283 (comment) -msgid "into the next bar. The command is commented out in this" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:282 (comment) -#. input/lsr/incipit.ly:274 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:284 (comment) -msgid "short example score, but especially for large scores, you" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) -#. input/lsr/incipit.ly:275 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:285 (comment) -msgid "will typically yield better line breaking and thus improve" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +#, fuzzy +msgid "- pitch is the absolute pitch of the note" +msgstr "c2 をマージされた音符の右側に再配置します" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) -#. input/lsr/incipit.ly:276 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:286 (comment) -msgid "overall spacing if you comment in the following command." +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." msgstr "" -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) -#. input/lsr/incipit.ly:277 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:287 (comment) -msgid "\\remove \\\"Forbid_line_break_engraver\\\"" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +#, fuzzy +msgid "Ambitus engraving logics" +msgstr "自動譜刻" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." msgstr "" -#. input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:75 (variable) -#. input/lsr/clusters.ly:28 (variable) -msgid "fragment" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:42 (comment) -msgid "Automatic beams two per two in 4/4 or 2/2 time signature" +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:43 (comment) -msgid "_____" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +msgid "add FretBoards for the Cuatro" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:44 (comment) -msgid "Default | | | |" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) +msgid "Note: This section could be put into a separate file" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:45 (comment) -msgid "_ _" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:86 (comment) +msgid "predefined-cuatro-fretboards.ly" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:46 (comment) -msgid "Required | | | |" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (comment) +msgid "and \\included into each of your compositions" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:48 (comment) -msgid "macro for beamed two per two in 2/2 and 4/4 time signature" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +msgid "cuatroTuning" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:49 (variable) -msgid "qBeam" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +msgid "dSix" msgstr "" -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:64 (comment) -msgid "Use the macro" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +msgid "dMajor" msgstr "" -#. input/lsr/avoiding-collisions-with-chord-fingerings.ly:30 (comment) -msgid "Corrected to avoid collisions" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) +msgid "aMajSeven" msgstr "" -#. input/lsr/beam-endings-in-score-context.ly:38 (comment) -msgid "Set default beaming for all staves" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:94 (variable) +msgid "dMajSeven" msgstr "" -#. input/lsr/beam-endings-in-score-context.ly:46 (comment) -msgid "Modify beaming for just this staff" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:95 (variable) +msgid "gMajor" msgstr "" -#. input/lsr/beam-endings-in-score-context.ly:52 (comment) -msgid "Inherit beaming from Score context" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:113 (comment) +msgid "end of potential include file /predefined-cuatro-fretboards.ly" msgstr "" -#. input/lsr/beam-endings-in-score-context.ly:58 (comment) -msgid "Modify beaming for this voice only" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:118 (variable) +msgid "primerosNames" msgstr "" -#. input/lsr/beam-grouping-in-7-8-time.ly:41 (comment) -msgid "rhythm 2-3-2" +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:122 (variable) +msgid "primeros" msgstr "" -#. input/lsr/book-parts.ly:22 (comment) -msgid "book paper, which is inherited by all children bookparts" +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) +msgid "baseMelody" msgstr "" -#. input/lsr/book-parts.ly:25 (comment) -msgid "Page footer: add a different part-tagline at part last page" +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) +msgid "Must be lower than the actual number of staff lines" msgstr "" -#. input/lsr/book-parts.ly:29 (comment) -msgid "Copyright header field only on book first page." +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) +msgid "fixA" msgstr "" -#. input/lsr/book-parts.ly:33 (comment) -msgid "Part tagline header field only on each part last page." +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) +msgid "fixB" msgstr "" -#. input/lsr/book-parts.ly:37 (comment) -msgid "Tagline header field only on book last page." +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" msgstr "" -#. input/lsr/book-parts.ly:44 (comment) -msgid "book header, which is inherited by the first bookpart" +#. Documentation/snippets/double-glissando.ly:21 (comment) +msgid "new voice ( = \\voiceOne), hidden" msgstr "" -#. input/lsr/book-parts.ly:53 (comment) -msgid "a different page breaking function may be used on each part" +#. Documentation/snippets/double-glissando.ly:23 (comment) +msgid "attach glissando to note heads" msgstr "" -#. input/lsr/breathing-signs.ly:19 (comment) -msgid "this bar contains no \\breathe" +#. Documentation/snippets/double-glissando.ly:28 (comment) +msgid "original voice with chords rearranged so that" msgstr "" -#. input/lsr/breathing-signs.ly:21 (comment) -msgid "Modern notation:" +#. Documentation/snippets/double-glissando.ly:29 (comment) +msgid "glissando is attached to a & c" msgstr "" -#. input/lsr/breathing-signs.ly:22 (comment) -msgid "by default, \\breathe uses the rcomma, just as if saying:" +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" msgstr "" -#. input/lsr/breathing-signs.ly:23 (comment) +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) msgid "" -"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" -"\\\")" +"Two functions for (de)crescendo spanners where you can explicitly give the" msgstr "" -#. input/lsr/breathing-signs.ly:26 (comment) -msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." msgstr "" -#. input/lsr/breathing-signs.ly:27 (comment) -msgid "N.B.: must use Staff context here, since we start a Voice below" -msgstr "" +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +#, fuzzy +msgid "mycresc" +msgstr "クレッシェンド (crescendo)" -#. input/lsr/breathing-signs.ly:31 (comment) -msgid "vee" -msgstr "" +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +#, fuzzy +msgid "mydecresc" +msgstr "デクレッシェンド (decrescendo)" -#. input/lsr/caesura-railtracks-with-fermata.ly:30 (comment) -msgid "construct the symbol" +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:61 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" msgstr "" -#. input/lsr/caesura-railtracks-with-fermata.ly:39 (comment) -msgid "set the breathe mark back to normal" +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:62 (variable) +msgid "crpoco" msgstr "" -#. input/lsr/center-text-below-hairpin-dynamics.ly:28 (variable) -msgid "hairpinWithCenteredText" +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:67 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" msgstr "" -#. input/lsr/center-text-below-hairpin-dynamics.ly:40 (variable) -msgid "hairpinMolto" +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:68 (variable) +#, fuzzy +msgid "cresc" +msgstr "クレッシェンド (crescendo)" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:73 (variable) +msgid "dim" msgstr "" -#. input/lsr/center-text-below-hairpin-dynamics.ly:41 (variable) -msgid "hairpinMore" +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:78 (variable) +#, fuzzy +msgid "decresc" +msgstr "デクレッシェンド (decrescendo)" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" msgstr "" -#. input/lsr/changing--flageolet-mark-size.ly:41 (variable) -msgid "smallFlageolet" +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" msgstr "" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:35 (comment) -msgid "The following is only here to print the names of the" +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" msgstr "" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) -msgid "chords styles; it can be removed if you do not need to" +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" msgstr "" -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) -msgid "print them." +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +#, fuzzy +msgid "RH Staff" +msgstr "RH (右手) 譜表の作成" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +#, fuzzy +msgid "LH Staff" +msgstr "LH 譜表の終了" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) +msgid "PostScript is a registered trademark of Adobe Systems Inc." msgstr "" -#. input/lsr/changing-the-default-text-font-family.ly:17 (comment) -msgid "change for other default global staff size. " +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) +msgid "sample music" msgstr "" -#. input/lsr/changing-the-default-text-font-family.ly:19 (comment) -#. input/lsr/engravers-one-by-one.ly:192 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:110 (comment) -#. input/lsr/utf-8.ly:23 (comment) -msgid "{" +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) +msgid "topVoice" msgstr "" -#. input/lsr/changing-the-default-text-font-family.ly:23 (comment) -#. input/lsr/engravers-one-by-one.ly:195 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:111 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:233 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:180 (comment) -#. input/lsr/utf-8.ly:37 (comment) -msgid "}" +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) +msgid "botVoice" msgstr "" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:63 (comment) -msgid "Change time signature symbol but keep 3/4 beaming" +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) +msgid "hoom" msgstr "" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:64 (comment) -msgid "due to unchanged underlying time signature" +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) +msgid "pah" msgstr "" -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:69 (comment) -msgid "Lose 3/4 beaming now \\time has been changed" +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) +msgid "setup for Request->Element conversion. Guru-only" msgstr "" -#. input/lsr/chant-or-psalms-notation.ly:24 (variable) -msgid "stemOn" +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:209 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:222 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:278 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:292 (variable) +msgid "MyStaff" msgstr "" -#. input/lsr/chant-or-psalms-notation.ly:25 (variable) -msgid "stemOff" +#. Documentation/snippets/engravers-one-by-one.ly:139 (comment) +msgid "explicitly set instrumentName, so we don't get" msgstr "" -#. input/lsr/chord-name-exceptions.ly:33 (comment) -msgid "modify maj9 and 6(add9)" +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "weird effects when doing instrument names for" msgstr "" -#. input/lsr/chord-name-exceptions.ly:34 (comment) -msgid "Exception music is chords with markups" +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +msgid "piano staves" msgstr "" -#. input/lsr/chord-name-exceptions.ly:35 (variable) -msgid "chExceptionMusic" +#. Documentation/snippets/engravers-one-by-one.ly:150 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:236 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:249 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:262 (variable) +msgid "MyVoice" msgstr "" -#. input/lsr/chord-name-exceptions.ly:40 (comment) -msgid "Convert music to list and prepend to existing exceptions." +#. Documentation/snippets/engravers-one-by-one.ly:165 (comment) +msgid "must come before all" msgstr "" -#. input/lsr/chord-name-exceptions.ly:41 (variable) -msgid "chExceptions" +#. Documentation/snippets/engravers-one-by-one.ly:175 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" msgstr "" -#. input/lsr/chord-name-exceptions.ly:45 (variable) -msgid "theMusic" +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" msgstr "" -#. input/lsr/clip-systems.ly:35 (variable) -msgid "origScore" +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" msgstr "" -#. input/lsr/clip-systems.ly:53 (comment) -msgid "Each clip-region is a (START . END) pair" +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" msgstr "" -#. input/lsr/clip-systems.ly:54 (comment) -msgid "where both are rhythmic-locations." +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" msgstr "" -#. input/lsr/clip-systems.ly:56 (comment) -msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" msgstr "" -#. input/lsr/clip-systems.ly:57 (comment) -msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" msgstr "" -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:17 (comment) -msgid "Association list of pitches to colors." +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" msgstr "" -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:37 (comment) -msgid "Compare pitch and alteration (not octave)." +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" msgstr "" -#. input/lsr/combining-dynamics-with-markup-texts.ly:25 (variable) -msgid "piuF" +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" msgstr "" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:72 (variable) -msgid "musicUp" +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" msgstr "" -#. input/lsr/combining-two-parts-on-the-same-staff.ly:79 (variable) -msgid "musicDown" +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" msgstr "" -#. input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly:53 (variable) -#. input/lsr/jazz-combo-template.ly:277 (context id) -msgid "rhythm" +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" msgstr "" -#. input/lsr/creating-real-parenthesized-dynamics.ly:46 (variable) -msgid "parenF" +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +#, fuzzy +msgid "extendOn" +msgstr "延長線 (extender line)" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" msgstr "" -#. input/lsr/creating-simultaneous-rehearsal-marks.ly:43 (comment) -msgid "the hidden measure and bar line" +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" msgstr "" -#. input/lsr/customizing-fretboard-fret-diagrams.ly:53 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:55 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:26 (comment) -msgid "Set global properties of fret diagram" +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:53 (context id) -#. input/lsr/formatting-lyrics-syllables.ly:21 (variable) -#. input/lsr/fret-diagrams-explained-and-developed.ly:24 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:65 (context id) -msgid "mel" +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:62 (comment) -msgid "C major for guitar, no barre, using defaults" +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:40 (variable) +msgid "centermarkup" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:63 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:113 (comment) -msgid "terse style" +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:66 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:88 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:55 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:76 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:155 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:176 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:254 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:275 (comment) -msgid "C major for guitar, barred on third fret" +#. Documentation/snippets/flamenco-notation.ly:96 (comment) +msgid "Text indicators" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:67 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:89 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:56 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:78 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:105 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:156 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:178 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:205 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:255 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:277 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:304 (comment) -msgid "verbose style" +#. Documentation/snippets/flamenco-notation.ly:97 (variable) +msgid "abanico" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:68 (comment) -msgid "size 1.0" +#. Documentation/snippets/flamenco-notation.ly:98 (variable) +msgid "rasgueaso" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:69 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:57 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:157 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:256 (comment) -msgid "roman fret label, finger labels below string, straight barre" +#. Documentation/snippets/flamenco-notation.ly:99 (variable) +msgid "alzapua" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:71 (comment) -msgid "standard size" +#. Documentation/snippets/flamenco-notation.ly:101 (comment) +msgid "Finger stroke symbols" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:90 (comment) -msgid "landscape orientation, arabic numbers, M for mute string" +#. Documentation/snippets/flamenco-notation.ly:102 (variable) +msgid "strokeUp" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:91 (comment) -msgid "no barre, fret label down or left, small mute label font" +#. Documentation/snippets/flamenco-notation.ly:112 (variable) +msgid "strokeDown" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:112 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:127 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:227 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:326 (comment) -msgid "simple D chord" +#. Documentation/snippets/flamenco-notation.ly:122 (comment) +msgid "Golpe symbol" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:114 (comment) -msgid "larger dots, centered dots, fewer frets" +#. Documentation/snippets/flamenco-notation.ly:123 (variable) +msgid "golpe" msgstr "" -#. input/lsr/customizing-markup-fret-diagrams.ly:115 (comment) -msgid "label below string" +#. Documentation/snippets/flamenco-notation.ly:137 (variable) +msgid "strokeUpGolpe" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:81 (comment) -msgid "add FretBoards for the Cuatro" +#. Documentation/snippets/flamenco-notation.ly:138 (variable) +msgid "iUpGolpe" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:82 (comment) -msgid "Note: This section could be put into a separate file" +#. Documentation/snippets/flamenco-notation.ly:140 (comment) +msgid "Strokes for all fingers" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:83 (comment) -msgid "predefined-cuatro-fretboards.ly" +#. Documentation/snippets/flamenco-notation.ly:141 (variable) +msgid "pUp" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) -msgid "and \\included into each of your compositions" +#. Documentation/snippets/flamenco-notation.ly:142 (variable) +msgid "pDown" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:86 (variable) -msgid "cuatroTuning" +#. Documentation/snippets/flamenco-notation.ly:143 (variable) +msgid "iUp" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:88 (variable) -msgid "dSix" +#. Documentation/snippets/flamenco-notation.ly:144 (variable) +msgid "iDown" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) -msgid "dMajor" +#. Documentation/snippets/flamenco-notation.ly:145 (variable) +msgid "mUp" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:90 (variable) -msgid "aMajSeven" +#. Documentation/snippets/flamenco-notation.ly:146 (variable) +msgid "mDown" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) -msgid "dMajSeven" +#. Documentation/snippets/flamenco-notation.ly:147 (variable) +msgid "aUp" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) -msgid "gMajor" +#. Documentation/snippets/flamenco-notation.ly:148 (variable) +msgid "aDown" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:110 (comment) -msgid "end of potential include file /predefined-cuatro-fretboards.ly" +#. Documentation/snippets/flamenco-notation.ly:149 (variable) +msgid "xUp" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:115 (variable) -msgid "primerosNames" +#. Documentation/snippets/flamenco-notation.ly:150 (variable) +msgid "xDown" msgstr "" -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:119 (variable) -msgid "primeros" +#. Documentation/snippets/flamenco-notation.ly:153 (comment) +msgid "Just handy :)" msgstr "" -#. input/lsr/demo-midiinstruments.ly:23 (variable) -msgid "baseMelody" +#. Documentation/snippets/flamenco-notation.ly:154 (variable) +msgid "tupletOff" msgstr "" -#. input/lsr/display-bracket-with-only-one-staff-in-a-system.ly:55 (comment) -msgid "Must be lower than the actual number of staff lines" +#. Documentation/snippets/flamenco-notation.ly:159 (variable) +msgid "tupletsOff" msgstr "" -#. input/lsr/displaying-complex-chords.ly:16 (variable) -msgid "fixA" +#. Documentation/snippets/flamenco-notation.ly:164 (variable) +msgid "tupletsOn" msgstr "" -#. input/lsr/displaying-complex-chords.ly:20 (variable) -msgid "fixB" +#. Documentation/snippets/flamenco-notation.ly:169 (variable) +msgid "headsOff" msgstr "" -#. input/lsr/double-glissando.ly:20 (comment) -msgid "new voice ( = \\voiceOne), hidden" +#. Documentation/snippets/flamenco-notation.ly:175 (variable) +msgid "headsOn" msgstr "" -#. input/lsr/double-glissando.ly:22 (comment) -msgid "attach glissando to note heads" +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" msgstr "" -#. input/lsr/double-glissando.ly:27 (comment) -msgid "original voice with chords rearranged so that" +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) +msgid "Example 1" msgstr "" -#. input/lsr/double-glissando.ly:28 (comment) -msgid "glissando is attached to a & c" +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) +msgid "Example 2" msgstr "" -#. input/lsr/embedding-native-postscript-in-a--markup-block.ly:24 (comment) -msgid "PostScript is a registered trademark of Adobe Systems Inc." +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) +msgid "Example 3" msgstr "" -#. input/lsr/engravers-one-by-one.ly:76 (comment) -msgid "sample music" +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) +msgid "Example 4" msgstr "" -#. input/lsr/engravers-one-by-one.ly:77 (variable) -msgid "topVoice" +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) +msgid "slap" msgstr "" -#. input/lsr/engravers-one-by-one.ly:85 (variable) -msgid "botVoice" +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +#, fuzzy +msgid "example" +msgstr "テンプレート" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) +msgid "" +"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" +"msg00215.html" msgstr "" -#. input/lsr/engravers-one-by-one.ly:93 (variable) -msgid "hoom" +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +msgid "lyr" msgstr "" -#. input/lsr/engravers-one-by-one.ly:104 (variable) -msgid "pah" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" msgstr "" -#. input/lsr/engravers-one-by-one.ly:114 (comment) -msgid "setup for Request->Element conversion. Guru-only" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" msgstr "" -#. input/lsr/engravers-one-by-one.ly:117 (variable) -#. input/lsr/engravers-one-by-one.ly:222 (variable) -#. input/lsr/engravers-one-by-one.ly:235 (variable) -#. input/lsr/engravers-one-by-one.ly:291 (variable) -#. input/lsr/engravers-one-by-one.ly:305 (variable) -msgid "MyStaff" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) +msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" msgstr "" -#. input/lsr/engravers-one-by-one.ly:149 (comment) -msgid "explicitly set instrument, so we don't get " +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) +msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" msgstr "" -#. input/lsr/engravers-one-by-one.ly:150 (comment) -msgid "weird effects when doing instrument names for" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) +msgid "These chords will be in normal orientation" msgstr "" -#. input/lsr/engravers-one-by-one.ly:151 (comment) -msgid "piano staves" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) +#, python-format +msgid "110% of default size" msgstr "" -#. input/lsr/engravers-one-by-one.ly:160 (variable) -#. input/lsr/engravers-one-by-one.ly:249 (variable) -#. input/lsr/engravers-one-by-one.ly:262 (variable) -#. input/lsr/engravers-one-by-one.ly:275 (variable) -msgid "MyVoice" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) +msgid "Double barre used to test barre function" msgstr "" -#. input/lsr/engravers-one-by-one.ly:175 (comment) -msgid "must come before all" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) +msgid "C major for guitar, with capo on third fret" msgstr "" -#. input/lsr/engravers-one-by-one.ly:185 (comment) -msgid "\\consists \\\"Rest_engraver\\\"" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) +msgid "simple D chord, large top fret thickness" msgstr "" -#. input/lsr/flamenco-notation.ly:46 (comment) -msgid "Cut here ----- Start 'flamenco.ly' " +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) +msgid "These chords will be in landscape orientation" msgstr "" -#. input/lsr/flamenco-notation.ly:48 (comment) -msgid "Text indicators" +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) +msgid "These chords will be in opposing-landscape orientation" msgstr "" -#. input/lsr/flamenco-notation.ly:49 (variable) -msgid "abanico" +#. Documentation/snippets/fretboards-alternate-tables.ly:49 (comment) +msgid "Make a blank new fretboard table" msgstr "" -#. input/lsr/flamenco-notation.ly:50 (variable) -msgid "rasgueaso" +#. Documentation/snippets/fretboards-alternate-tables.ly:52 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" msgstr "" -#. input/lsr/flamenco-notation.ly:51 (variable) -msgid "alzapua" +#. Documentation/snippets/fretboards-alternate-tables.ly:55 (comment) +msgid "Add a chord to custom-fretboard-table-one" msgstr "" -#. input/lsr/flamenco-notation.ly:53 (comment) -msgid "Finger stroke symbols" +#. Documentation/snippets/fretboards-alternate-tables.ly:61 (comment) +msgid "Add a chord to custom-fretboard-table-two" msgstr "" -#. input/lsr/flamenco-notation.ly:54 (variable) -msgid "strokeUp" +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" msgstr "" -#. input/lsr/flamenco-notation.ly:64 (variable) -msgid "strokeDown" +#. Documentation/snippets/fretted-headword.ly:36 (comment) +#, fuzzy +msgid "fingering orientations" +msgstr "表記の重なりを修正する" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" msgstr "" -#. input/lsr/flamenco-notation.ly:74 (comment) -msgid "Golpe symbol" +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" msgstr "" -#. input/lsr/flamenco-notation.ly:75 (variable) -msgid "golpe" +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" msgstr "" -#. input/lsr/flamenco-notation.ly:89 (variable) -msgid "strokeUpGolpe" +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" msgstr "" -#. input/lsr/flamenco-notation.ly:90 (variable) -msgid "iUpGolpe" +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" msgstr "" -#. input/lsr/flamenco-notation.ly:92 (comment) -msgid "Strokes for all fingers" +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" msgstr "" -#. input/lsr/flamenco-notation.ly:93 (variable) -msgid "pUp" +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" msgstr "" -#. input/lsr/flamenco-notation.ly:94 (variable) -msgid "pDown" +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" msgstr "" -#. input/lsr/flamenco-notation.ly:95 (variable) -msgid "iUp" +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" msgstr "" -#. input/lsr/flamenco-notation.ly:96 (variable) -msgid "iDown" -msgstr "" +#. Documentation/snippets/fretted-headword.ly:46 (variable) +#, fuzzy +msgid "ssnor" +msgstr "マイナー (minor)" -#. input/lsr/flamenco-notation.ly:97 (variable) -msgid "mUp" +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" msgstr "" -#. input/lsr/flamenco-notation.ly:98 (variable) -msgid "mDown" +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" msgstr "" -#. input/lsr/flamenco-notation.ly:99 (variable) -msgid "aUp" -msgstr "" +#. Documentation/snippets/fretted-headword.ly:54 (comment) +#, fuzzy +msgid "markups" +msgstr "シャープ (sharp)" -#. input/lsr/flamenco-notation.ly:100 (variable) -msgid "aDown" +#. Documentation/snippets/fretted-headword.ly:55 (variable) +#, fuzzy +msgid "rit" +msgstr "3 連符 (triplet)" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +#, fuzzy +msgid "dimin" +msgstr "演奏時間 (duration)" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" msgstr "" -#. input/lsr/flamenco-notation.ly:101 (variable) -msgid "xUp" +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" msgstr "" -#. input/lsr/flamenco-notation.ly:102 (variable) -msgid "xDown" +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" msgstr "" -#. input/lsr/flamenco-notation.ly:105 (comment) -msgid "Just handy :)" +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" msgstr "" -#. input/lsr/flamenco-notation.ly:106 (variable) -msgid "tupletOff" +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" msgstr "" -#. input/lsr/flamenco-notation.ly:111 (variable) -msgid "tupletsOff" +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" msgstr "" -#. input/lsr/flamenco-notation.ly:116 (variable) -msgid "tupletsOn" +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" msgstr "" -#. input/lsr/flamenco-notation.ly:121 (variable) -msgid "headsOff" +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" msgstr "" -#. input/lsr/flamenco-notation.ly:127 (variable) -msgid "headsOn" +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" msgstr "" -#. input/lsr/flamenco-notation.ly:133 (comment) -msgid "Cut here ----- End 'flamenco.ly' " +#. Documentation/snippets/fretted-headword.ly:89 (comment) +#, fuzzy +msgid "end of m. 6" +msgstr "RH 音符の終了" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" msgstr "" -#. input/lsr/flat-flags-and-beam-nibs.ly:122 (comment) -msgid "Example 1" +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" msgstr "" -#. input/lsr/flat-flags-and-beam-nibs.ly:129 (comment) -msgid "Example 2" +#. Documentation/snippets/fretted-headword.ly:96 (comment) +#, fuzzy +msgid "end of m. 8" +msgstr "RH 音符の終了" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +#, fuzzy +msgid "end of m. 9" +msgstr "RH 音符の終了" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" msgstr "" -#. input/lsr/flat-flags-and-beam-nibs.ly:136 (comment) -msgid "Example 3" +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" msgstr "" -#. input/lsr/flat-flags-and-beam-nibs.ly:145 (comment) -msgid "Example 4" +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" msgstr "" -#. input/lsr/flute-slap-notation.ly:17 (variable) -msgid "slap" +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" msgstr "" -#. input/lsr/formatting-lyrics-syllables.ly:16 (comment) -msgid "" -"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" -"msg00215.html" +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:42 (comment) -msgid "A chord for ukulele, with formatting defined in definition string" +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:43 (comment) -msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:44 (comment) -msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:53 (comment) -msgid "These chords will be in normal orientation" +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:59 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:80 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:107 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:159 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:180 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:207 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:258 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:279 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:306 (comment) -#, python-format -msgid "110% of default size" +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:77 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:177 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:276 (comment) -msgid "Double barre used to test barre function" +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:104 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:204 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:303 (comment) -msgid "C major for guitar, with capo on third fret" +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:139 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:238 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:337 (comment) -msgid "simple D chord, large top fret thickness" +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:151 (comment) -msgid "These chords will be in landscape orientation" +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" msgstr "" -#. input/lsr/fret-diagrams-explained-and-developed.ly:250 (comment) -msgid "These chords will be in opposing-landscape orientation" +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:42 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) msgid "this moves them up one staff space from the default position" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:60 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) msgid "set up grids" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:62 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) msgid "set the grid interval to one quarter note" msgstr "" -#. input/lsr/grid-lines--changing-their-appearance.ly:68 (comment) +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) msgid "this moves them to the right half a staff space" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:37 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) msgid "hides staff and notes so that only the grid lines are visible" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:44 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) msgid "dummy notes to force regular note spacing" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:60 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) msgid "center grid lines horizontally below note heads" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:67 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) msgid "set line length and positioning:" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) msgid "two staff spaces above center line on hidden staff" msgstr "" -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) msgid "to four spaces below center line on visible staff" msgstr "" -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:49 (variable) +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) msgid "drum" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:55 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) msgid "Solution 1: Using a simple markup with a particular halign value" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) msgid "etc. will have no effect" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) msgid "semppMarkup" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:60 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) msgid "Solution 2: Using a dynamic script & shifting with" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) msgid "\\once \\override ... #'X-offset = .." msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) msgid "Drawback: \\once \\override needed for every invocation" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) msgid "semppK" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:70 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) msgid "Solution 3: Padding the dynamic script so the center-alignment" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) msgid "puts it at the correct position" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) msgid "" "Drawback: the padding really reserves the space, nothing else can be there" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) msgid "semppT" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:81 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) msgid "other stuff there => collisions" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) msgid "same alignment as without the additional text" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) msgid "semppM" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:91 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:92 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) msgid "semppG" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:98 (comment) -msgid "" -"Solution 6: Dynamic with explicit alignment. This has only effect, if one " -"sets X-offset!" +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:99 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) msgid "Drawback: One needs to set DynamicText #'X-offset!" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:100 (comment) -msgid "" -"Drawback: Aligned at the right edge of the additional text, not at the " -"center of pp" +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:101 (variable) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) msgid "semppMII" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) msgid "s" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:113 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) #, fuzzy msgid "sMarkup" msgstr "シャープ (sharp)" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:120 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) msgid "sK" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:131 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) msgid "sT" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:138 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) msgid "sM" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:145 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) msgid "sG" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:152 (context id) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) msgid "sMII" msgstr "" -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:156 (comment) +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) msgid "Setting to ##f (false) gives the same result" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:28 (variable) -#. input/lsr/score-for-diatonic-accordion.ly:61 (variable) -#. input/lsr/showing-chords-at-changes.ly:32 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:47 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:45 (variable) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) msgid "harmonies" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:31 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:34 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) msgid "THIS LINE IS THE SECOND METHOD" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:44 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" msgstr "" -#. input/lsr/how-to-change-fret-diagram-position.ly:47 (comment) +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) msgid "HERE IS THE SECOND METHOD" msgstr "" -#. input/lsr/incipit.ly:77 (variable) -#. input/lsr/incipit.ly:78 (context id) +#. Documentation/snippets/hymn-template.ly:50 (variable) +#, fuzzy +msgid "Timeline" +msgstr "拍子記号" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +#, fuzzy +msgid "Start score" +msgstr "音階 (scale)" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +msgid "Start pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +msgid "Start Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +msgid "End Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +msgid "End Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +msgid "Start Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +msgid "End Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +#, fuzzy +msgid "End pianostaff" +msgstr "RH 譜表の終了" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +msgid "don't indent first system" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +msgid "shorten line length to suit music" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) msgid "discantusIncipit" msgstr "" -#. input/lsr/incipit.ly:114 (variable) -#. input/lsr/incipit.ly:115 (context id) +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) msgid "altusIncipit" msgstr "" -#. input/lsr/incipit.ly:130 (comment) -#. input/lsr/incipit.ly:142 (comment) -#. input/lsr/incipit.ly:172 (comment) -#. input/lsr/incipit.ly:181 (comment) +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) msgid "two measures" msgstr "" -#. input/lsr/incipit.ly:150 (variable) -#. input/lsr/incipit.ly:151 (context id) +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) msgid "tenorIncipit" msgstr "" -#. input/lsr/incipit.ly:187 (variable) -#. input/lsr/incipit.ly:188 (context id) +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) msgid "bassusIncipit" msgstr "" -#. input/lsr/incipit.ly:258 (comment) +#. Documentation/snippets/incipit.ly:265 (comment) msgid "no bar lines in staves or lyrics" msgstr "" -#. input/lsr/incipit.ly:261 (comment) +#. Documentation/snippets/incipit.ly:268 (comment) msgid "the next two instructions keep the lyrics between the bar lines" msgstr "" -#. input/lsr/incipit.ly:272 (comment) +#. Documentation/snippets/incipit.ly:279 (comment) msgid "breaking also at those bar lines where a note overlaps" msgstr "" -#. input/lsr/incipit.ly:273 (comment) +#. Documentation/snippets/incipit.ly:280 (comment) msgid "into the next measure. The command is commented out in this" msgstr "" -#. input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly:16 (variable) +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) msgid "tuning" msgstr "" -#. input/lsr/jazz-combo-template.ly:54 (comment) +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) msgid "#(set-global-staff-size 16)" msgstr "" -#. input/lsr/jazz-combo-template.ly:57 (comment) +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) msgid "Some macros %%%%%%%%%%%%%%%%%%%" msgstr "" -#. input/lsr/jazz-combo-template.ly:59 (variable) +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) msgid "sl" msgstr "" -#. input/lsr/jazz-combo-template.ly:63 (variable) +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) msgid "nsl" msgstr "" -#. input/lsr/jazz-combo-template.ly:67 (variable) +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) msgid "crOn" msgstr "" -#. input/lsr/jazz-combo-template.ly:68 (variable) +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) msgid "crOff" msgstr "" -#. input/lsr/jazz-combo-template.ly:70 (comment) +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) msgid "insert chord name style stuff here." msgstr "" -#. input/lsr/jazz-combo-template.ly:72 (variable) +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) msgid "jazzChords" msgstr "" -#. input/lsr/jazz-combo-template.ly:74 (comment) +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" msgstr "" -#. input/lsr/jazz-combo-template.ly:78 (variable) +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) msgid "Key" msgstr "" -#. input/lsr/jazz-combo-template.ly:80 (comment) +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) msgid "############ Horns ############" msgstr "" -#. input/lsr/jazz-combo-template.ly:82 (comment) +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) msgid "------ Trumpet ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:83 (variable) +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) msgid "trpt" msgstr "" -#. input/lsr/jazz-combo-template.ly:87 (variable) +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) msgid "trpHarmony" msgstr "" -#. input/lsr/jazz-combo-template.ly:90 (variable) -#. input/lsr/jazz-combo-template.ly:270 (context id) +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) msgid "trumpet" msgstr "" -#. input/lsr/jazz-combo-template.ly:99 (comment) +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) msgid "------ Alto Saxophone ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:100 (variable) -msgid "alto" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:104 (variable) +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) msgid "altoHarmony" msgstr "" -#. input/lsr/jazz-combo-template.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) msgid "altoSax" msgstr "" -#. input/lsr/jazz-combo-template.ly:116 (comment) +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) msgid "------ Baritone Saxophone ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:117 (variable) +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) msgid "bari" msgstr "" -#. input/lsr/jazz-combo-template.ly:125 (variable) +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) msgid "bariHarmony" msgstr "" -#. input/lsr/jazz-combo-template.ly:128 (variable) +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) msgid "bariSax" msgstr "" -#. input/lsr/jazz-combo-template.ly:137 (comment) +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) msgid "------ Trombone ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:138 (variable) +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) msgid "tbone" msgstr "" -#. input/lsr/jazz-combo-template.ly:142 (variable) +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) msgid "tboneHarmony" msgstr "" -#. input/lsr/jazz-combo-template.ly:145 (variable) -#. input/lsr/jazz-combo-template.ly:274 (context id) +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) msgid "trombone" msgstr "" -#. input/lsr/jazz-combo-template.ly:154 (comment) +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) msgid "############ Rhythm Section #############" msgstr "" -#. input/lsr/jazz-combo-template.ly:156 (comment) +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) msgid "------ Guitar ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:157 (variable) +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) msgid "gtr" msgstr "" -#. input/lsr/jazz-combo-template.ly:165 (variable) +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) msgid "gtrHarmony" msgstr "" -#. input/lsr/jazz-combo-template.ly:169 (variable) -#. input/lsr/jazz-combo-template.ly:279 (context id) -#. input/lsr/polyphony-in-tablature.ly:57 (context id) -#. input/lsr/polyphony-in-tablature.ly:62 (context id) -msgid "guitar" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:178 (comment) +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) msgid "------ Piano ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:179 (variable) +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) msgid "rhUpper" msgstr "" -#. input/lsr/jazz-combo-template.ly:184 (variable) +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) msgid "rhLower" msgstr "" -#. input/lsr/jazz-combo-template.ly:190 (variable) +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) msgid "lhUpper" msgstr "" -#. input/lsr/jazz-combo-template.ly:195 (variable) +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) msgid "lhLower" msgstr "" -#. input/lsr/jazz-combo-template.ly:201 (variable) +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) msgid "PianoRH" msgstr "" -#. input/lsr/jazz-combo-template.ly:210 (variable) +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) msgid "PianoLH" msgstr "" -#. input/lsr/jazz-combo-template.ly:228 (comment) +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) msgid "------ Bass Guitar ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:242 (comment) +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) msgid "------ Drums ------" msgstr "" -#. input/lsr/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) msgid "drumContents" msgstr "" -#. input/lsr/jazz-combo-template.ly:265 (comment) +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) #, python-format msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" msgstr "" -#. input/lsr/jazz-combo-template.ly:269 (context id) +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) msgid "horns" msgstr "" -#. input/lsr/jazz-combo-template.ly:271 (context id) +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) msgid "altosax" msgstr "" -#. input/lsr/jazz-combo-template.ly:272 (context id) +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) msgid "barichords" msgstr "" -#. input/lsr/jazz-combo-template.ly:273 (context id) +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) msgid "barisax" msgstr "" -#. input/lsr/jazz-combo-template.ly:278 (context id) +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) msgid "chords" msgstr "" -#. input/lsr/makam-example.ly:41 (comment) +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "" + +#. Documentation/snippets/makam-example.ly:55 (comment) msgid "Initialize makam settings" msgstr "" -#. input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly:19 (variable) +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) msgid "bassfigures" msgstr "" -#. input/lsr/manually-controlling-beam-positions.ly:21 (comment) +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) msgid "from upper staff-line (position 2) to center (position 0)" msgstr "" -#. input/lsr/manually-controlling-beam-positions.ly:24 (comment) +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) msgid "from center to one above center (position 1)" msgstr "" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:17 (variable) +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) msgid "speakOn" msgstr "" -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:33 (variable) +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) msgid "speakOff" msgstr "" -#. input/lsr/markup-lines.ly:22 (comment) +#. Documentation/snippets/markup-lines.ly:23 (comment) msgid "Candide, Voltaire" msgstr "" -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:43 (comment) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) msgid "the final bar line is not interrupted" msgstr "" -#. input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly:17 (variable) +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) msgid "normalPos" msgstr "" -#. input/lsr/modern-tab-text-clef.ly:15 (variable) -msgid "TAB" -msgstr "" - -#. input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly:52 (variable) +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) msgid "dashPlus" msgstr "" -#. input/lsr/modifying-tuplet-bracket-length.ly:23 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) msgid "Set tuplets to be extendable..." msgstr "" -#. input/lsr/modifying-tuplet-bracket-length.ly:25 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) msgid "...to cover all items up to the next note" msgstr "" -#. input/lsr/modifying-tuplet-bracket-length.ly:29 (comment) +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) msgid "...or to cover just whitespace" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:41 (variable) -msgid "fluteMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +msgid "space for instrumentName" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:42 (variable) -msgid "oboeMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:43 (variable) -msgid "clarinetMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) +msgid "fluteMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:44 (variable) -msgid "bassoonMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:45 (variable) -msgid "trumpetMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) +msgid "clarinetMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:46 (variable) -msgid "tromboneMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) +msgid "trumpetMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:47 (variable) -msgid "hornIMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:48 (variable) -msgid "hornIIMusic" +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +msgid "hornMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:49 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) msgid "percussionMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:52 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) msgid "altoIMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:53 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) +msgid "altoIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) #, fuzzy msgid "altoILyrics" msgstr "歌詞 (lyrics)" -#. input/lsr/orchestra,-choir-and-piano-template.ly:54 (variable) -msgid "altoIIMusic" -msgstr "" - -#. input/lsr/orchestra,-choir-and-piano-template.ly:55 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) #, fuzzy msgid "altoIILyrics" msgstr "歌詞 (lyrics)" -#. input/lsr/orchestra,-choir-and-piano-template.ly:58 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) msgid "pianoRHMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:59 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) msgid "pianoLHMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:60 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) msgid "violinIMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:61 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) msgid "violinIIMusic" msgstr "" -#. input/lsr/orchestra,-choir-and-piano-template.ly:62 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) msgid "violaMusic" msgstr "" -#. input/lsr/percussion-beaters.ly:18 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:146 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:149 (comment) +msgid "applies to split up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:156 (comment) +msgid "applies to down stems" +msgstr "" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) msgid "stick" msgstr "" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:50 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) msgid "Permit line breaks within tuplets" msgstr "" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:52 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) msgid "Allow beams to be broken at line breaks" msgstr "" -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:59 (comment) +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) msgid "Insert a manual line break within a tuplet" msgstr "" -#. input/lsr/piano-template-with-centered-dynamics.ly:61 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) msgid "pedal" msgstr "" -#. input/lsr/piano-template-with-centered-dynamics.ly:74 (comment) -msgid "define Dynamics context" +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" msgstr "" -#. input/lsr/piano-template-with-centered-dynamics.ly:95 (comment) -msgid "modify PianoStaff context to accept Dynamics context" +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" msgstr "" -#. input/lsr/polyphony-in-tablature.ly:56 (context id) +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) msgid "tab" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:57 (comment) -msgid "Multi-measure rests by default are set under the second line" +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:59 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) msgid "They can be moved with an override" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:62 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) msgid "A value of 0 is the default position;" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:63 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) msgid "the following trick moves the rest to the center line" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:66 (comment) -msgid "Multi-measure rests in odd-numbered voices are under the top line" +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:68 (comment) -msgid "Multi-measure rests in even-numbered voices are under the bottom line" +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:70 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) msgid "They remain separated even in empty measures" msgstr "" -#. input/lsr/positioning-multi-measure-rests.ly:72 (comment) +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) msgid "This brings them together even though there are two voices" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:28 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:49 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) msgid "Set segno sign as rehearsal mark and adjust size if needed" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:29 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:51 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) msgid "\\once \\override Score.RehearsalMark #'font-size = #3" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:35 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) msgid "Set coda sign as rehearsal mark and adjust size if needed" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:42 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) msgid "Should Coda be on anew line?" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:43 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) msgid "Coda NOT on new line: use \\nobreak" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:44 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) msgid "Coda on new line: DON'T use \\nobreak" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:45 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) msgid "\\noBreak" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:54 (comment) -msgid "Here begins the trickery! " +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:55 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) msgid "" "\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " "lines." msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:58 (comment) -msgid "Some examples of possible text-displays " +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:60 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) msgid "text line-aligned" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:61 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) msgid "==================" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:62 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:68 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) msgid "Move text to the desired position" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:64 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) msgid "| s1*0^\\markup { D.S. al Coda } }" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:66 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) msgid "text center-aligned" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:67 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) msgid "====================" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:69 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:70 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:72 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) msgid "text and symbols center-aligned" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:73 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) msgid "===============================" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:74 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) msgid "" "Move text to the desired position and tweak spacing for optimum text " "alignment" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:75 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:81 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) msgid "Increasing the unfold counter will expand the staff-free space" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:86 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) msgid "Resume bar count and show staff lines again" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:90 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) msgid "Should Coda be on new line?" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:91 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) msgid "Coda NOT on new line: DON'T use \\break" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:92 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) msgid "Coda on new line: use \\break" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:95 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) msgid "Show up, you clef and key!" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:99 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) msgid "Set coda sign as rehearsal mark and adjust size and position" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:101 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) msgid "" "Put the coda sign ontop of the (treble-)clef dependend on coda's line-" "position" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:103 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) msgid "Coda NOT on new line, use this:" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:104 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:106 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) msgid "Coda on new line, use this:" msgstr "" -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:112 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) msgid "The coda" msgstr "" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:32 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) msgid "Prevent bar numbers at the end of a line and permit them elsewhere" msgstr "" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:39 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) msgid "Draw a box round the following bar number(s)" msgstr "" -#. input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly:44 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) msgid "Draw a circle round the following bar number(s)" msgstr "" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:42 (comment) -msgid "Metronome marks below the staff " +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" msgstr "" -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:47 (comment) +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) msgid "Rehearsal marks below the staff" msgstr "" -#. input/lsr/printing-music-with-different-time-signatures.ly:50 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) msgid "Bassklarinette" msgstr "" -#. input/lsr/printing-music-with-different-time-signatures.ly:90 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) msgid "Perkussion" msgstr "" -#. input/lsr/quoting-another-voice-with-transposition.ly:53 (variable) +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:24 (context id) +msgid "voc" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) msgid "quoteTest" msgstr "" -#. input/lsr/quoting-another-voice-with-transposition.ly:54 (comment) +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) msgid "french horn" msgstr "" -#. input/lsr/quoting-another-voice.ly:47 (variable) +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) msgid "quoteMe" msgstr "" -#. input/lsr/quoting-another-voice.ly:52 (variable) +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) msgid "original" msgstr "" -#. input/lsr/redefining-grace-note-global-defaults.ly:49 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:38 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) msgid "startAcciaccaturaMusic" msgstr "" -#. input/lsr/redefining-grace-note-global-defaults.ly:55 (variable) +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) msgid "stopAcciaccaturaMusic" msgstr "" -#. input/lsr/removing-the-first-empty-line.ly:60 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) msgid "To use the setting globally, uncomment the following line:" msgstr "" -#. input/lsr/removing-the-first-empty-line.ly:61 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) msgid "\\override VerticalAxisGroup #'remove-first = ##t" msgstr "" -#. input/lsr/removing-the-first-empty-line.ly:70 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) msgid "To use the setting globally, comment this line," msgstr "" -#. input/lsr/removing-the-first-empty-line.ly:71 (comment) +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) msgid "uncomment the line in the \\layout block above" msgstr "" -#. input/lsr/reverting-default-beam-endings.ly:40 (comment) +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) msgid "Default beaming" msgstr "" -#. input/lsr/reverting-default-beam-endings.ly:43 (comment) -msgid "Revert default values in scm/auto-beam.scm for 12/8 time" -msgstr "" - -#. input/lsr/reverting-default-beam-endings.ly:49 (comment) +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) msgid "Set new values for beam endings" msgstr "" -#. input/lsr/rhythmic-slashes.ly:25 (comment) +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) msgid "Macro to print single slash" msgstr "" -#. input/lsr/rhythmic-slashes.ly:26 (variable) +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) msgid "rs" msgstr "" -#. input/lsr/rhythmic-slashes.ly:33 (comment) +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) msgid "Function to print a specified number of slashes" msgstr "" -#. input/lsr/rhythmic-slashes.ly:34 (variable) +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) msgid "comp" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:69 (variable) +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +#, fuzzy +msgid "sopranonotes" +msgstr "脚注" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +msgid "sopranowords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +#, fuzzy +msgid "altonotes" +msgstr "脚注" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +#, fuzzy +msgid "altowords" +msgstr "和音 (chord)" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +#, fuzzy +msgid "tenornotes" +msgstr "マイナー (minor)" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +#, fuzzy +msgid "tenorwords" +msgstr "マイナー (minor)" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +#, fuzzy +msgid "bassnotes" +msgstr "脚注" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +#, fuzzy +msgid "basswords" +msgstr "和音 (chord)" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) msgid "NoStem" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:70 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) msgid "NoNoteHead" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:71 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) msgid "ZeroBeam" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:73 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) msgid "staffTabLine" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:78 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) msgid "" "Shows one horizontal line. The vertical line (simulating a bar-line) is " "simulated with a gridline" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:83 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) msgid "" -"disable the following line to see the the noteheads while writing the song " +"disable the following line to see the the noteheads while writing the song" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:87 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) msgid "The beam between 8th-notes is used to draw the push-line" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:88 (comment) -msgid "How to fast write the push-lines: " +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:89 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) msgid "" -"1. write repeatedly 'c c c c c c c c |' for the whole length of the song " +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:90 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) msgid "2. uncomment the line \\NoNoteHead" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:91 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) msgid "3. compile" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:92 (comment) -msgid "4. Mark the positions on which push/pull changes. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:93 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) msgid "" -"In the score-picture click on the position the push- or pull-part starts " +"In the score-picture click on the position the push- or pull-part starts" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:94 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) msgid "(on the noteHead, the cursor will change to a hand-icon)." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:95 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) msgid "The cursor in the source code will jump just at this position." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:96 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) msgid "a) If a push-part starts there, replace the 'c' by an 'e['" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:97 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) msgid "b) If a pull-part starts there, replace the 'c' by an 's'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:98 (comment) -msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:99 (comment) -msgid "6. For the pull-parts overwrite the 'c' with 's' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:100 (comment) -msgid "7. For every push-part replace the last 'c' with 'e]' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:101 (comment) -msgid "8. Switch into 'insert-mode' again " +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:102 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) msgid "" "9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " "e] s s)" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:103 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) msgid "10. re-enable the line \\NoNoteHead" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:113 (comment) -msgid "Accordion melody in tabulator score\t\t" +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:114 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) msgid "1. Place a copy of the piano melody below" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:115 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:134 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) msgid "" "2. Separate piano melody into pull- and push-parts according to the " -"staffTabLine you've already made " +"staffTabLine you've already made" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) msgid "" "3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " "reference) and then change the second line using the transformation paper" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:117 (comment) -msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' " +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:118 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:137 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) msgid "Tips:" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:119 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:138 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:121 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) msgid "AccordionTabTwoCBesDur" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:122 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) msgid "pull 1" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:123 (comment) -msgid "8 8 8 | " +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:125 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) msgid "push 2" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:126 (comment) -msgid "4 | " +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:128 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) msgid "pull 3" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:129 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) msgid "2 r8 }" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:133 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) msgid "1. Place a copy of the piano melody above" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:135 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) msgid "" "3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " -"reference) and then " +"reference) and then" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:136 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) msgid "change the second line using the transformation paper" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:139 (comment) -msgid "- " +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:150 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) msgid "4/4 - tact. How many beats per bar" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:152 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) msgid "The following line has to be adjusted O-F-T-E-N." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:161 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) msgid "staffVoice" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:169 (context id) -msgid "melodyVoi" +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:175 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) msgid "staffAccordionMel" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:176 (comment) -msgid "Set the accidentals (Vorzeichen) for each note, " +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:177 (comment) -msgid "do not remember them for the rest of the measure. " +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:196 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) msgid "BassRhytm" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:197 (variable) -msgid "LyricBassRhythmI" +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) +msgid "LyricBassRhythmI" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) +msgid "staffBassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) +msgid "" +"This is not a RhythmicStaff because it must be possible to append lyrics." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) +msgid "x.y" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated by a grid" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" +msgstr "" + +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +#, fuzzy +msgid "notes" +msgstr "脚注" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:199 (variable) -msgid "staffBassRhytm" +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:200 (comment) -msgid "" -"This is not a RhythmicStaff because it must be possible to append lyrics." +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:202 (comment) -msgid "x.y" +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:204 (comment) -msgid "" -"Shows one horizontal line. The vertical line (simulating a bar-line) is " -"simulated by a grid" +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:205 (comment) -msgid "Search for 'grid' in this page to find all related functions " +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:208 (context id) -msgid "VoiceBassRhytm" +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" msgstr "" -#. input/lsr/score-for-diatonic-accordion.ly:221 (comment) -msgid "" -"The vertical line (simulating a bar-line) in the staffBassRhytm is a " -"gridline " +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +#, fuzzy +msgid "trillFlat" +msgstr "3 連符 (triplet)" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +#, fuzzy +msgid "RH voice 1" +msgstr "RH ボイスの終了" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +#, fuzzy +msgid "RH voice 2" +msgstr "RH ボイスの終了" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +#, fuzzy +msgid "LH staff" +msgstr "LH 譜表の終了" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) +msgid "verseI" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:25 (comment) -msgid "Define the fret diagrams to be used" +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) +msgid "verseII" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) -msgid "cFretDiagram" +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:30 (variable) -msgid "gFretDiagram" +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) +msgid "staffMelody" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:34 (variable) -msgid "verseI" +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:39 (variable) -msgid "verseII" +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) +msgid "voiceMelody" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (variable) -msgid "theChords" +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:46 (comment) -msgid "insert the chords for chordnames here" +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:51 (variable) -msgid "staffMelody" +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:52 (context id) -msgid "voiceMelody" +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" msgstr "" -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:56 (comment) -msgid "Type notes and fret diagram markups here" +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" msgstr "" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:56 (variable) -msgid "snapPizzicato" +#. Documentation/snippets/staff-headword.ly:38 (variable) +#, fuzzy +msgid "trompette" +msgstr "3 連符 (triplet)" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" msgstr "" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:58 (comment) -msgid "now it can be used as \\snappizzicato after the note/chord" +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" msgstr "" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:59 (comment) -msgid "Note that a direction (-, ^ or _) is required." +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" msgstr "" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:62 (comment) -msgid "This does NOT work:" +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" msgstr "" -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:63 (comment) -msgid "\\snapPizzicato" +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" msgstr "" -#. input/lsr/stemlets.ly:35 (comment) +#. Documentation/snippets/stemlets.ly:36 (comment) msgid "N.B. use Score.Stem to set for the whole score." msgstr "" -#. input/lsr/string-quartet-template-simple.ly:42 (variable) +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) msgid "violinOne" msgstr "" -#. input/lsr/string-quartet-template-simple.ly:51 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) msgid "violinTwo" msgstr "" -#. input/lsr/string-quartet-template-simple.ly:60 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) msgid "viola" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:80 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) msgid "piece.ly" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:81 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) msgid "(This is the global definitions file)" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:88 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) msgid "Violinone" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:93 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:99 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:106 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) msgid "*********************************" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:94 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) msgid "Violintwo" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:100 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) msgid "Viola" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:107 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) msgid "Cello" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:113 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) msgid "**********************************" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:124 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) msgid "These are the other files you need to save on your computer" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:126 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) msgid "score.ly" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:127 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) msgid "(This is the main file)" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:130 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) #, python-format msgid "" "\\include \\\"piece.ly\\\" %%% uncomment this line when using a " "separate file" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:139 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) msgid "{ Uncomment this block when using separate files" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:141 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) msgid "vn1.ly" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:142 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) msgid "(This is the Violin 1 part file)" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:151 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) msgid "vn2.ly" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:152 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) msgid "(This is the Violin 2 part file)" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:161 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) msgid "vla.ly" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:162 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) msgid "(This is the Viola part file)" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:171 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) msgid "vlc.ly" msgstr "" -#. input/lsr/string-quartet-template-with-separate-parts.ly:172 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) msgid "(This is the Cello part file)" msgstr "" -#. input/lsr/sub-dividing-beams.ly:82 (comment) +#. Documentation/snippets/subdividing-beams.ly:78 (comment) msgid "Set beam sub-group length to an eighth note" msgstr "" -#. input/lsr/sub-dividing-beams.ly:86 (comment) +#. Documentation/snippets/subdividing-beams.ly:83 (comment) msgid "Set beam sub-group length to a sixteenth note" msgstr "" -#. input/lsr/suppressing-warnings-for-clashing-note-columns.ly:20 (variable) +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) msgid "ignore" msgstr "" -#. input/lsr/three-sided-box.ly:16 (comment) +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "" + +#. Documentation/snippets/text-headword.ly:45 (comment) +#, fuzzy +msgid "RH staff" +msgstr "RH (右手) 譜表の作成" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) msgid "New command to add a three sided box, with sides north, west and south" msgstr "" -#. input/lsr/three-sided-box.ly:17 (comment) +#. Documentation/snippets/three-sided-box.ly:18 (comment) msgid "Based on the box-stencil command defined in scm/stencil.scm" msgstr "" -#. input/lsr/three-sided-box.ly:18 (comment) -msgid "Note that \\\";\\\" is used to comment a line in Scheme" +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" msgstr "" -#. input/lsr/three-sided-box.ly:32 (comment) -msgid "The corresponding markup command, based on the \\box command defined " +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" msgstr "" -#. input/lsr/three-sided-box.ly:33 (comment) +#. Documentation/snippets/three-sided-box.ly:34 (comment) msgid "in scm/define-markup-commands.scm" msgstr "" -#. input/lsr/three-sided-box.ly:45 (comment) +#. Documentation/snippets/three-sided-box.ly:46 (comment) msgid "Test it:" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:36 (comment) +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +#, fuzzy +msgid "Revert to default style:" +msgstr "デフォルトのサイズに戻す" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) msgid "make the staff lines invisible on staves" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:128 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) msgid "incipitDiscantus" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:152 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) msgid "incipitAltus" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:177 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) msgid "incipitTenor" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:203 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) msgid "incipitBassus" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:227 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) msgid "" "StaffGroup is used instead of ChoirStaff to get bar lines between systems" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:259 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:260 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) msgid "between the lyrics." msgstr "" -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:270 (comment) -msgid "the next three instructions keep the lyrics between the barlines" +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" msgstr "" -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:133 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) msgid "naturalizeMusic" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:113 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) msgid "The default treble clef" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:115 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) msgid "The standard bass clef" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:120 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) msgid "The baritone clef" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:125 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) msgid "The standard choral tenor clef" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:131 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) msgid "A non-standard clef" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:137 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) msgid "The following clef changes do not preserve" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:138 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) msgid "the normal relationship between notes and clefs:" msgstr "" -#. input/lsr/tweaking-clef-properties.ly:153 (comment) +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) msgid "Return to the normal clef:" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:59 (comment) -msgid "The default in 3/4 time is to beam in three groups" +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +#, fuzzy +msgid "Abreviations" +msgstr "アーティキュレーション" + +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +#, fuzzy +msgid "accel" +msgstr "臨時記号 (accidental)" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +#, fuzzy +msgid "Strings" +msgstr "歌曲" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +#, fuzzy +msgid "norm" +msgstr "いいえ" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +#, fuzzy +msgid "quatre" +msgstr "4 分音符 (quarter note)" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +#, fuzzy +msgid "aniente" +msgstr "臨時記号 (accidental)" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +#, fuzzy +msgid "tupletbp" +msgstr "連符" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +#, fuzzy +msgid "noflag" +msgstr "フラット (flat)" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "" + +# added by Sawada +# msgid "Contents" +# msgstr "目次" +# added by Sawada +# msgid "Index" +# msgstr "インデックス" +# added by Sawada +# msgid "Up" +# msgstr "上へ" +# msgid "GNU LilyPond --- Learning" +# msgstr "GNU LilyPond --- 学習マニュアル" +# added by Sawada +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +#, fuzzy +msgid "Instruments" +msgstr "目次" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:60 (comment) -msgid "each of a quarter note length" +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:64 (comment) -msgid "No auto-beaming is defined for 12/16" +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:68 (comment) -msgid "Change time signature symbol, but retain underlying 3/4 beaming" +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:72 (comment) -msgid "The 3/4 time default grouping of (1 1 1) and beatLength of 1/8" +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:73 (comment) -msgid "are not consistent with a measureLength of 3/4, so the beams" +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:74 (comment) -msgid "are grouped at beatLength intervals" +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:78 (comment) -msgid "Specify beams in groups of (3 3 2 3) 1/16th notes" +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:79 (comment) -msgid "3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply," +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:80 (comment) -msgid "and beams are grouped at beatLength (1/16) intervals" +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +#, fuzzy +msgid "Score" +msgstr "和音 (chord)" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +#, fuzzy +msgid "testnotes" +msgstr "脚注" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:85 (comment) -msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" msgstr "" -#. input/lsr/using-beatlength-and-beatgrouping.ly:86 (comment) -msgid "3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies" +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" msgstr "" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:27 (variable) +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) msgid "parallelogram" msgstr "" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:42 (variable) +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) msgid "myNoteHeads" msgstr "" -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) msgid "normalNoteHeads" msgstr "" -#. input/lsr/utf-8.ly:18 (comment) +#. Documentation/snippets/utf-8.ly:19 (comment) msgid "end verbatim - this comment is a hack to prevent texinfo.tex" msgstr "" -#. input/lsr/utf-8.ly:19 (comment) +#. Documentation/snippets/utf-8.ly:20 (comment) msgid "from choking on non-European UTF-8 subsets" msgstr "" -#. input/lsr/utf-8.ly:21 (comment) +#. Documentation/snippets/utf-8.ly:22 (comment) msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" msgstr "" -#. input/lsr/utf-8.ly:39 (comment) +#. Documentation/snippets/utf-8.ly:40 (comment) msgid "Cyrillic font" msgstr "" -#. input/lsr/utf-8.ly:40 (variable) +#. Documentation/snippets/utf-8.ly:41 (variable) msgid "bulgarian" msgstr "" -#. input/lsr/utf-8.ly:44 (variable) +#. Documentation/snippets/utf-8.ly:45 (variable) msgid "hebrew" msgstr "" -#. input/lsr/utf-8.ly:48 (variable) +#. Documentation/snippets/utf-8.ly:49 (variable) msgid "japanese" msgstr "" -#. input/lsr/utf-8.ly:55 (comment) +#. Documentation/snippets/utf-8.ly:56 (comment) msgid "\\\"a legal song to you\\\"" msgstr "" -#. input/lsr/utf-8.ly:56 (variable) +#. Documentation/snippets/utf-8.ly:57 (variable) msgid "portuguese" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:19 (variable) +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +#, fuzzy +msgid "upline" +msgstr "連符" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) msgid "leftbrace" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:20 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) msgid "rightbrace" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:22 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) msgid "dropLyrics" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:29 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) msgid "raiseLyrics" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:36 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) msgid "skipFour" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:38 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) msgid "lyricsA" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:40 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) msgid "lyricsB" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:41 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) msgid "lyricsC" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:42 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) msgid "lyricsD" msgstr "" -#. input/lsr/vertically-centered-common-lyrics.ly:49 (context id) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) msgid "m" msgstr "" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:53 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:45 (variable) -#. input/lsr/vocal-ensemble-template.ly:50 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) msgid "sopMusic" msgstr "" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:56 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:48 (variable) -#. input/lsr/vocal-ensemble-template.ly:53 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) msgid "sopWords" msgstr "" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:85 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:75 (context id) -#. input/lsr/vocal-ensemble-template.ly:81 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:99 (context id) msgid "women" msgstr "" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:91 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:85 (context id) -#. input/lsr/vocal-ensemble-template.ly:93 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) msgid "men" msgstr "" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:120 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) -#. input/lsr/vocal-ensemble-template.ly:111 (comment) -msgid "a little smaller so lyrics" +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) +msgid "we could remove the line about this with the line below, since we want" msgstr "" -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:121 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:98 (comment) -#. input/lsr/vocal-ensemble-template.ly:112 (comment) -msgid "can be closer to the staff" +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) +msgid "the alto lyrics to be below the alto Voice anyway." msgstr "" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:81 (comment) -msgid "we could remove the line about this with the line below, since we want" +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" msgstr "" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:82 (comment) -msgid "the alto lyrics to be below the alto Voice anyway." +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) +msgid "again, we could replace the line above this with the line below." msgstr "" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (comment) -msgid "\\new Lyrics \\lyricsto altos \\altoWords" +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" msgstr "" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:92 (comment) -msgid "again, we could replace the line above this with the line below." +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +msgid "refrain" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +#, fuzzy +msgid "SoloNotes" +msgstr "脚注" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +#, fuzzy +msgid "SoloLyrics" +msgstr "歌詞 (lyrics)" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +#, fuzzy +msgid "SopranoNotes" +msgstr "グレース ノート" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +#, fuzzy +msgid "SopranoLyrics" +msgstr "歌詞 (lyrics)" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +msgid "BassNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +#, fuzzy +msgid "BassLyrics" +msgstr "歌詞 (lyrics)" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +msgid "SoloVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +#, fuzzy +msgid "SopranoVoice" +msgstr "ソプラノとチェロ" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +msgid "BassVoice" msgstr "" -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:93 (comment) -msgid "\\new Lyrics \\lyricsto basses \\bassWords" +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" msgstr "" -#. input/lsr/volta-multi-staff.ly:16 (variable) +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) msgid "voltaMusic" msgstr "" +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "" + msgid "Up:" msgstr "上へ:" @@ -13475,6 +10361,158 @@ msgstr "脚注" msgid "Table of Contents" msgstr "目次" +#~ msgid "set time signature and key" +#~ msgstr "拍子記号と調号をセットする" + +#, fuzzy +#~ msgid "the direction." +#~ msgstr "その他のドキュメント" + +#~ msgid "" +#~ "This section has not been translated yet; please refer to the manual in " +#~ "English." +#~ msgstr "" +#~ "このセクションはまだ翻訳されていません。英語で書かれたマニュアルを参照して" +#~ "ください。" + +#~ msgid "GNU LilyPond --- Learning Manual" +#~ msgstr "GNU LilyPond --- 学習マニュアル" + +#~ msgid "Preface" +#~ msgstr "序文" + +#~ msgid "Introduction" +#~ msgstr "導入部" + +#~ msgid "Background" +#~ msgstr "バックグラウンド" + +#~ msgid "Example applications" +#~ msgstr "例用例" + +#~ msgid "About the documentation" +#~ msgstr "このドキュメントについて" + +#~ msgid "About the Learning Manual" +#~ msgstr "学習マニュアルについて" + +#~ msgid "About the Music Glossary" +#~ msgstr "音楽用語集について" + +#~ msgid "About the Notation Reference" +#~ msgstr "表記リファレンスについて" + +#~ msgid "About the Application Usage" +#~ msgstr "アプリケーション使用方法について" + +#~ msgid "About the Snippet List" +#~ msgstr "断片集について" + +#~ msgid "About the Internals Reference" +#~ msgstr "内部リファレンスについて" + +#~ msgid "First steps" +#~ msgstr "最初のステップ" + +#~ msgid "Entering music and viewing output" +#~ msgstr "音楽表記を入力して出力を閲覧する" + +#~ msgid "Working on LilyPond projects" +#~ msgstr "LilyPond プロジェクトに取り組む" + +#~ msgid "When things don't work" +#~ msgstr "うまくいかないとき" + +#~ msgid "Updating old input files" +#~ msgstr "古い入力ファイルをアップデートする" + +#~ msgid "Troubleshooting (taking it all apart)" +#~ msgstr "トラブルシューティング (すべてをバラバラにする)" + +#~ msgid "Minimal examples" +#~ msgstr "最小化例" + +#~ msgid "GNU LilyPond --- Application Usage" +#~ msgstr "GNU LilyPond --- アプリケーション使用方法" + +#~ msgid "Install" +#~ msgstr "インストール" + +#~ msgid "Precompiled binaries" +#~ msgstr "コンパイル済みのバイナリ" + +#~ msgid "Downloading" +#~ msgstr "ダウンロードする" + +#~ msgid "Compiling from source" +#~ msgstr "ソースからコンパイルする" + +#~ msgid "Setup" +#~ msgstr "セットアップ" + +#~ msgid "Setup for specific Operating Systems" +#~ msgstr "特定の OS のためのセットアップ" + +#~ msgid "Setup for MacOS X" +#~ msgstr "MacOS X のためのセットアップ" + +#~ msgid "Using Python scripts on MacOS 10.3 or 10.4" +#~ msgstr "MaxOS 10.3 または 10.4 で Python スクリプトを使用する" + +#~ msgid "MacOS X on the command line" +#~ msgstr "MaxOS X のコマンド ライン" + +#~ msgid "Reporting bugs" +#~ msgstr "バグを報告する" + +#, fuzzy +#~ msgid "GNU LilyPond --- Manuel d'initiation" +#~ msgstr "GNU LilyPond --- アプリケーション使用方法" + +#, fuzzy +#~ msgid "Updating with @command{convert-ly}" +#~ msgstr "@command{convert-ly} を使ってファイルを更新する" + +#, fuzzy +#~ msgid "GNU LilyPond --- Manuel de notation" +#~ msgstr "GNU LilyPond --- アプリケーション使用方法" + +#, fuzzy +#~ msgid "Basic polyphony" +#~ msgstr "多声" + +#, fuzzy +#~ msgid "Ancient accidentals" +#~ msgstr "臨時記号" + +#, fuzzy +#~ msgid "Ancient flags" +#~ msgstr "臨時記号" + +#, fuzzy +#~ msgid "Ancient time signatures" +#~ msgstr "拍子記号" + +#, fuzzy +#~ msgid "Ancient articulations" +#~ msgstr "アーティキュレーション" + +#, fuzzy +#~ msgid "Annotational accidentals" +#~ msgstr "臨時記号" + +#, fuzzy +#~ msgid "Automatic behaviour" +#~ msgstr "自動譜刻" + +#, fuzzy +#~ msgid "GNU LilyPond -- Handbuch zum Lernen" +#~ msgstr "GNU LilyPond --- 学習マニュアル" + +#, fuzzy +#~ msgid "GNU LilyPond -- Programmbenutzung" +#~ msgstr "GNU LilyPond --- 学習マニュアル" + #~ msgid "Beginning of this chapter or previous chapte" #~ msgstr "この章の先頭または前の章" @@ -13487,9 +10525,6 @@ msgstr "目次" #~ msgid "Next section in reading order" #~ msgstr "次のセクション" -#~ msgid "Up section" -#~ msgstr "上のセクション" - #~ msgid "Cover (top) of document" #~ msgstr "ドキュメントのカバー (トップ) ページ" @@ -13508,21 +10543,6 @@ msgstr "目次" #~ msgid "About This Document" #~ msgstr "このドキュメントについて" -# added by Sawada -# msgid "Contents" -# msgstr "目次" -# added by Sawada -# msgid "Index" -# msgstr "インデックス" -# added by Sawada -# msgid "Up" -# msgstr "上へ" -# msgid "GNU LilyPond --- Learning" -# msgstr "GNU LilyPond --- 学習マニュアル" -# added by Sawada -#~ msgid "Contents" -#~ msgstr "目次" - # added by Sawada #~ msgid "Index" #~ msgstr "インデックス" diff --git a/Documentation/po/lilypond-doc.pot b/Documentation/po/lilypond-doc.pot index c55d3eb8a4..1b0d074e27 100644 --- a/Documentation/po/lilypond-doc.pot +++ b/Documentation/po/lilypond-doc.pot @@ -8,12480 +8,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-25 12:33+0100\n" +"POT-Creation-Date: 2011-02-03 10:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" - -#: postprocess_html.py:45 -#, python-format -msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." -msgstr "" - -#: postprocess_html.py:47 -#, python-format -msgid "" -"Your suggestions for the documentation " -"are welcome, please report errors to our bug list." -msgstr "" - -#: postprocess_html.py:59 -#, python-format -msgid "Other languages: %s." -msgstr "" - -#: postprocess_html.py:60 -#, python-format -msgid "About automatic language selection." -msgstr "" - -#: postprocess_html.py:315 -msgid "stable-branch" -msgstr "" - -#: postprocess_html.py:317 -msgid "development-branch" -msgstr "" - -#: texi-gettext.py:63 -msgid "" -"This section has not been translated yet; please refer to the manual in " -"English." -msgstr "" - -#: translations-status.py:52 -msgid "Section titles" -msgstr "" - -#: translations-status.py:53 -#, python-format -msgid "

    Last updated %s

    \n" -msgstr "" - -#: translations-status.py:54 -msgid "Translators" -msgstr "" - -#: translations-status.py:54 -msgid "Translation checkers" -msgstr "" - -#: translations-status.py:55 -msgid "Translated" -msgstr "" - -#: translations-status.py:55 -msgid "Up to date" -msgstr "" - -#: translations-status.py:56 -msgid "Other info" -msgstr "" - -#: translations-status.py:58 -msgid "no" -msgstr "" - -#: translations-status.py:59 -msgid "not translated" -msgstr "" - -#: translations-status.py:61 -#, python-format -msgid "partially (%(p)d %%)" -msgstr "" - -#: translations-status.py:63 -#, python-format -msgid "partially translated (%(p)d %%)" -msgstr "" - -#: translations-status.py:64 translations-status.py:66 -msgid "yes" -msgstr "" - -#: translations-status.py:65 -msgid "translated" -msgstr "" - -#: translations-status.py:66 translations-status.py:67 -msgid "up to date" -msgstr "" - -#: translations-status.py:68 -msgid "partially" -msgstr "" - -#: translations-status.py:69 -msgid "partially up to date" -msgstr "" - -#: translations-status.py:70 -msgid "N/A" -msgstr "" - -#: translations-status.py:71 -msgid "pre-GDP" -msgstr "" - -#: translations-status.py:72 -msgid "post-GDP" -msgstr "" +"Language: \n" #. -*- coding: utf-8 -*- -#. @node in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -msgid "Top" -msgstr "" - -#. @top in Documentation/user/lilypond-learning.tely -msgid "GNU LilyPond --- Learning Manual" -msgstr "" - -#. @node in Documentation/user/lilypond-learning.tely -#. @appendix in Documentation/user/lilypond-learning.tely -#. @node in Documentation/user/lilypond-program.tely -#. @appendix in Documentation/user/lilypond-program.tely -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond-learning.tely -#. @appendix in Documentation/fr/user/lilypond-learning.tely -#. @node in Documentation/fr/user/lilypond-program.tely -#. @appendix in Documentation/fr/user/lilypond-program.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond-learning.tely -#. @appendix in Documentation/es/user/lilypond-learning.tely -#. @node in Documentation/es/user/lilypond-program.tely -#. @appendix in Documentation/es/user/lilypond-program.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond-learning.tely -#. @appendix in Documentation/de/user/lilypond-learning.tely -#. @node in Documentation/de/user/lilypond-program.tely -#. @appendix in Documentation/de/user/lilypond-program.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond index" -msgstr "" - -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Predefined commands" -msgstr "" - -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Selected Snippets" -msgstr "" - -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "See also" -msgstr "" - -#. @subsubheading in Documentation/user/macros.itexi -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Known issues and warnings" -msgstr "" - -#. @node in Documentation/user/preface.itely -#. @unnumbered in Documentation/user/preface.itely -#. @node in Documentation/fr/user/preface.itely -#. @unnumbered in Documentation/fr/user/preface.itely -#. @node in Documentation/es/user/preface.itely -#. @unnumbered in Documentation/es/user/preface.itely -#. @node in Documentation/de/user/preface.itely -#. @unnumbered in Documentation/de/user/preface.itely -msgid "Preface" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @chapter in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @chapter in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @chapter in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @chapter in Documentation/de/user/introduction.itely -msgid "Introduction" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -msgid "Background" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Engraving" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Automated engraving" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "What symbols to engrave?" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Music representation" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Example applications" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @section in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @section in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @section in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @section in Documentation/de/user/introduction.itely -msgid "About the documentation" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Learning Manual" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Music Glossary" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Notation Reference" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Application Usage" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Snippet List" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "About the Internals Reference" -msgstr "" - -#. @node in Documentation/user/introduction.itely -#. @unnumberedsubsec in Documentation/user/introduction.itely -#. @node in Documentation/fr/user/introduction.itely -#. @unnumberedsubsec in Documentation/fr/user/introduction.itely -#. @node in Documentation/es/user/introduction.itely -#. @unnumberedsubsec in Documentation/es/user/introduction.itely -#. @node in Documentation/de/user/introduction.itely -#. @unnumberedsubsec in Documentation/de/user/introduction.itely -msgid "Other documentation" -msgstr "" - -#. Documentation/user/tutorial.itely:251 (comment) -msgid "set the starting point to middle C" -msgstr "" - -#. Documentation/user/tutorial.itely:282 (comment) -msgid "one octave above middle C" -msgstr "" - -#. Documentation/user/tutorial.itely:298 (comment) -msgid "c is 1 staff space up, so is the c above" -msgstr "" - -#. Documentation/user/tutorial.itely:299 (comment) -msgid "d is 2 up or 5 down, so is the d above" -msgstr "" - -#. Documentation/user/tutorial.itely:300 (comment) -msgid "e is 3 up or 4 down, so is the e above" -msgstr "" - -#. Documentation/user/tutorial.itely:301 (comment) -msgid "a is 6 up or 1 down, so is the a below" -msgstr "" - -#. Documentation/user/tutorial.itely:302 (comment) -msgid "g is 5 up or 2 down, so is the g below" -msgstr "" - -#. Documentation/user/tutorial.itely:303 (comment) -msgid "f is 4 up or 3 down, so is the f below" -msgstr "" - -#. Documentation/user/tutorial.itely:1791 (variable) -#. Documentation/user/working.itely:214 (variable) -#. Documentation/user/working.itely:229 (variable) -#. Documentation/user/pitches.itely:1078 (context id) -msgid "violin" -msgstr "" - -#. Documentation/user/tutorial.itely:1796 (variable) -#. input/lsr/string-quartet-template-simple.ly:62 (variable) -msgid "cello" -msgstr "" - -#. Documentation/user/tutorial.itely:1821 (variable) -msgid "tripletA" -msgstr "" - -#. Documentation/user/tutorial.itely:1822 (variable) -msgid "barA" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. input/lsr/measure-counter.ly:25 (context id) -#. input/lsr/measure-counter.ly:32 (context id) -msgid "foo" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @chapter in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @chapter in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @chapter in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @chapter in Documentation/de/user/tutorial.itely -msgid "Tutorial" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -msgid "First steps" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Compiling a file" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Entering music and viewing output" -msgstr "" - -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -msgid "MacOS X" -msgstr "" - -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -msgid "Windows" -msgstr "" - -#. @subsubheading in Documentation/user/tutorial.itely -#. @subsubheading in Documentation/fr/user/tutorial.itely -#. @subsubheading in Documentation/es/user/tutorial.itely -#. @subsubheading in Documentation/de/user/tutorial.itely -msgid "UNIX" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Simple notation" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @section in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @section in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @section in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @section in Documentation/de/user/pitches.itely -msgid "Pitches" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "pitch" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "interval" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "scale" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "middle C" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "octave" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "accidental" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Durations (rhythms)" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "beam" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "duration" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "whole note" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "half note" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "quarter note" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "dotted note" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Rests" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -msgid "rest" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Time signature" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "time signature" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Clef" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -msgid "clef" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "All together" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Working on input files" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "How to read the manual" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Clickable examples" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -msgid "Single staff notation" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Accidentals and key signatures" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Accidentals" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "sharp" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "flat" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "double sharp" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "double flat" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Key signatures" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "key signature" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "major" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "minor" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Warning: key signatures and pitches" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "natural" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "transposition" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "Pitch names" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Ties and slurs" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Ties" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "tie" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Slurs" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "slur" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Phrasing slurs" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "phrasing" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Warnings: slurs vs. ties" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "articulation" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Articulation and dynamics" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Articulations" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Fingerings" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "fingering" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/user/tweaks.itely -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @subheading in Documentation/de/user/tweaks.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Dynamics" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. input/lsr/piano-template-with-centered-dynamics.ly:47 (variable) -msgid "dynamics" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "crescendo" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "decrescendo" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Adding text" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Automatic and manual beams" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Advanced rhythmic commands" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Partial measure" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "anacrusis" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Tuplets" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "note value" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "triplet" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @subheading in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Grace notes" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "grace notes" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "acciaccatura" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "appoggiatura" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -msgid "Multiple notes at once" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Music expressions explained" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Analogy: mathematical expressions" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Simultaneous music expressions: multiple staves" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "polyphony" -msgstr "" - -#. @subheading in Documentation/user/tutorial.itely -#. @subheading in Documentation/fr/user/tutorial.itely -#. @subheading in Documentation/es/user/tutorial.itely -#. @subheading in Documentation/de/user/tutorial.itely -msgid "Simultaneous music expressions: single staff" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Multiple staves" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Staff groups" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "brace" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Combining notes into chords" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/tutorial.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. @rglos in Documentation/de/user/chords.itely -msgid "chord" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Single staff polyphony" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -msgid "Songs" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Setting simple songs" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "lyrics" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Aligning lyrics to a melody" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "melisma" -msgstr "" - -#. @rglos in Documentation/user/tutorial.itely -#. @rglos in Documentation/fr/user/tutorial.itely -#. @rglos in Documentation/es/user/tutorial.itely -#. @rglos in Documentation/de/user/tutorial.itely -msgid "extender line" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Lyrics to multiple staves" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @section in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @section in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @section in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @section in Documentation/de/user/tutorial.itely -msgid "Final touches" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Organizing pieces with variables" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Version number" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Adding titles" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "Absolute note names" -msgstr "" - -#. @node in Documentation/user/tutorial.itely -#. @subsection in Documentation/user/tutorial.itely -#. @node in Documentation/fr/user/tutorial.itely -#. @subsection in Documentation/fr/user/tutorial.itely -#. @node in Documentation/es/user/tutorial.itely -#. @subsection in Documentation/es/user/tutorial.itely -#. @node in Documentation/de/user/tutorial.itely -#. @subsection in Documentation/de/user/tutorial.itely -msgid "After the tutorial" -msgstr "" - -#. Documentation/user/fundamental.itely:324 (context id) -#. Documentation/user/fundamental.itely:367 (context id) -#. input/lsr/piano-template-with-centered-lyrics.ly:51 (context id) -msgid "singer" -msgstr "" - -#. Documentation/user/fundamental.itely:325 (context id) -#. Documentation/user/fundamental.itely:368 (context id) -msgid "vocal" -msgstr "" - -#. Documentation/user/fundamental.itely:328 (context id) -#. Documentation/user/fundamental.itely:371 (context id) -#. input/lsr/jazz-combo-template.ly:218 (variable) -#. input/lsr/jazz-combo-template.ly:278 (context id) -msgid "piano" -msgstr "" - -#. Documentation/user/fundamental.itely:329 (context id) -#. Documentation/user/fundamental.itely:362 (variable) -#. Documentation/user/fundamental.itely:372 (context id) -#. Documentation/user/fundamental.itely:2669 (variable) -#. Documentation/user/fundamental.itely:2711 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:19 (variable) -#. input/lsr/jazz-combo-template.ly:221 (context id) -#. input/lsr/piano-template-simple.ly:28 (variable) -#. input/lsr/piano-template-simple.ly:47 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:37 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:29 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:51 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:40 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:61 (context id) -#. input/lsr/polyphony-in-tablature.ly:23 (variable) -#. input/lsr/polyphony-in-tablature.ly:41 (context id) -#. input/lsr/polyphony-in-tablature.ly:45 (context id) -msgid "upper" -msgstr "" - -#. Documentation/user/fundamental.itely:330 (context id) -#. Documentation/user/fundamental.itely:363 (variable) -#. Documentation/user/fundamental.itely:373 (context id) -#. Documentation/user/fundamental.itely:2676 (variable) -#. Documentation/user/fundamental.itely:2712 (context id) -#. input/lsr/changing-the-number-of-lines-in-a-staff.ly:23 (variable) -#. input/lsr/jazz-combo-template.ly:222 (context id) -#. input/lsr/piano-template-simple.ly:36 (variable) -#. input/lsr/piano-template-simple.ly:48 (context id) -#. input/lsr/piano-template-with-centered-dynamics.ly:42 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:37 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:53 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:48 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:62 (context id) -#. input/lsr/polyphony-in-tablature.ly:30 (variable) -#. input/lsr/polyphony-in-tablature.ly:42 (context id) -#. input/lsr/polyphony-in-tablature.ly:46 (context id) -msgid "lower" -msgstr "" - -#. Documentation/user/fundamental.itely:360 (variable) -#. Documentation/user/simultaneous.itely:241 (context id) -#. Documentation/user/vocal.itely:571 (context id) -#. Documentation/user/vocal.itely:803 (context id) -#. Documentation/user/vocal.itely:824 (context id) -#. Documentation/user/vocal.itely:1224 (variable) -#. Documentation/user/vocal.itely:1266 (variable) -#. Documentation/user/ancient.itely:2413 (context id) -#. Documentation/user/ancient.itely:2452 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:24 (context id) -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:35 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:50 (context id) -#. input/lsr/demo-midiinstruments.ly:28 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:28 (context id) -#. input/lsr/guitar-strum-rhythms.ly:56 (context id) -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:37 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:28 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:28 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:29 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:38 (variable) -#. input/lsr/single-staff-template-with-only-notes.ly:32 (variable) -#. input/lsr/vertically-centered-common-lyrics.ly:44 (variable) -msgid "melody" -msgstr "" - -#. Documentation/user/fundamental.itely:361 (variable) -#. Documentation/user/vocal.itely:1051 (variable) -#. Documentation/user/vocal.itely:1229 (variable) -#. Documentation/user/vocal.itely:1270 (variable) -#. input/lsr/piano-template-with-centered-lyrics.ly:45 (variable) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:36 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:36 (variable) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:46 (variable) -msgid "text" -msgstr "" - -#. Documentation/user/fundamental.itely:443 (context id) -#. Documentation/user/staff.itely:514 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:102 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:139 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) -msgid "main" -msgstr "" - -#. Documentation/user/fundamental.itely:632 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\"" -msgstr "" - -#. Documentation/user/fundamental.itely:642 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\"" -msgstr "" - -#. Documentation/user/fundamental.itely:657 (comment) -msgid "Voice \\\"1\\\"" -msgstr "" - -#. Documentation/user/fundamental.itely:662 (comment) -msgid "Voice \\\"2\\\"" -msgstr "" - -#. Documentation/user/fundamental.itely:685 (comment) -#. Documentation/user/fundamental.itely:709 (comment) -msgid "Main voice" -msgstr "" - -#. Documentation/user/fundamental.itely:687 (comment) -msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" -msgstr "" - -#. Documentation/user/fundamental.itely:711 (comment) -#. Documentation/user/simultaneous.itely:742 (comment) -#. Documentation/user/simultaneous.itely:767 (comment) -#. Documentation/user/simultaneous.itely:794 (comment) -msgid "Bar 1" -msgstr "" - -#. Documentation/user/fundamental.itely:722 (comment) -#. Documentation/user/simultaneous.itely:747 (comment) -#. Documentation/user/simultaneous.itely:772 (comment) -#. Documentation/user/simultaneous.itely:800 (comment) -msgid "Bar 2" -msgstr "" - -#. Documentation/user/fundamental.itely:723 (comment) -msgid "Voice 1 continues" -msgstr "" - -#. Documentation/user/fundamental.itely:726 (comment) -msgid "Voice 2 continues" -msgstr "" - -#. Documentation/user/fundamental.itely:900 (comment) -msgid "Voice one" -msgstr "" - -#. Documentation/user/fundamental.itely:902 (comment) -msgid "Voice two" -msgstr "" - -#. Documentation/user/fundamental.itely:904 (comment) -msgid "Omit Voice three" -msgstr "" - -#. Documentation/user/fundamental.itely:905 (comment) -msgid "Voice four" -msgstr "" - -#. Documentation/user/fundamental.itely:1004 (comment) -msgid "Default behavior or behavior after \\oneVoice" -msgstr "" - -#. Documentation/user/fundamental.itely:1042 (comment) -msgid "The following notes are monophonic" -msgstr "" - -#. Documentation/user/fundamental.itely:1044 (comment) -msgid "Start simultaneous section of three voices" -msgstr "" - -#. Documentation/user/fundamental.itely:1046 (comment) -msgid "Continue the main voice in parallel" -msgstr "" - -#. Documentation/user/fundamental.itely:1048 (comment) -#. Documentation/user/fundamental.itely:1110 (comment) -msgid "Initiate second voice" -msgstr "" - -#. Documentation/user/fundamental.itely:1050 (comment) -#. Documentation/user/fundamental.itely:1112 (comment) -msgid "Set stems, etc, down" -msgstr "" - -#. Documentation/user/fundamental.itely:1054 (comment) -#. Documentation/user/fundamental.itely:1116 (comment) -msgid "Initiate third voice" -msgstr "" - -#. Documentation/user/fundamental.itely:1056 (comment) -#. Documentation/user/fundamental.itely:1118 (comment) -msgid "Set stems, etc, up" -msgstr "" - -#. Documentation/user/fundamental.itely:1105 (comment) -msgid "Initiate first voice" -msgstr "" - -#. Documentation/user/fundamental.itely:1199 (context id) -#. Documentation/user/fundamental.itely:2441 (context id) -#. Documentation/user/vocal.itely:506 (context id) -#. Documentation/user/vocal.itely:1235 (context id) -#. Documentation/user/vocal.itely:1276 (context id) -#. Documentation/user/keyboards.itely:338 (context id) -#. Documentation/user/fretted-strings.itely:243 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:16 (variable) -#. input/lsr/jazz-combo-template.ly:204 (context id) -#. input/lsr/jazz-combo-template.ly:213 (context id) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:50 (context id) -#. input/lsr/single-staff-template-with-notes-and-lyrics.ly:52 (context id) -msgid "one" -msgstr "" - -#. Documentation/user/fundamental.itely:1242 (variable) -#. Documentation/user/fundamental.itely:2646 (variable) -#. Documentation/user/tweaks.itely:3475 (variable) -#. Documentation/user/simultaneous.itely:788 (variable) -#. Documentation/user/percussion.itely:497 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:46 (variable) -#. input/lsr/incipit.ly:57 (variable) -#. input/lsr/jazz-combo-template.ly:74 (variable) -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:29 (variable) -#. input/lsr/piano-template-with-centered-dynamics.ly:32 (variable) -#. input/lsr/printing-music-with-different-time-signatures.ly:24 (variable) -#. input/lsr/string-quartet-template-simple.ly:29 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:66 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:30 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:39 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:32 (variable) -#. input/lsr/vocal-ensemble-template.ly:36 (variable) -msgid "global" -msgstr "" - -#. Documentation/user/fundamental.itely:1243 (variable) -msgid "SopOneMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:1245 (variable) -msgid "SopTwoMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:1247 (variable) -msgid "SopOneLyrics" -msgstr "" - -#. Documentation/user/fundamental.itely:1249 (variable) -msgid "SopTwoLyrics" -msgstr "" - -#. Documentation/user/fundamental.itely:1255 (context id) -msgid "SopOne" -msgstr "" - -#. Documentation/user/fundamental.itely:1264 (context id) -msgid "SopTwo" -msgstr "" - -#. Documentation/user/fundamental.itely:1296 (variable) -#. Documentation/user/fundamental.itely:2864 (variable) -msgid "TimeKey" -msgstr "" - -#. Documentation/user/fundamental.itely:1297 (variable) -msgid "SopMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:1298 (variable) -#. Documentation/user/tweaks.itely:3477 (variable) -msgid "AltoMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:1299 (variable) -#. Documentation/user/tweaks.itely:3478 (variable) -msgid "TenorMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:1300 (variable) -#. Documentation/user/tweaks.itely:3479 (variable) -msgid "BassMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:1301 (variable) -#. Documentation/user/tweaks.itely:3480 (variable) -msgid "VerseOne" -msgstr "" - -#. Documentation/user/fundamental.itely:1303 (variable) -#. Documentation/user/tweaks.itely:3481 (variable) -msgid "VerseTwo" -msgstr "" - -#. Documentation/user/fundamental.itely:1305 (variable) -#. Documentation/user/tweaks.itely:3482 (variable) -msgid "VerseThree" -msgstr "" - -#. Documentation/user/fundamental.itely:1307 (variable) -#. Documentation/user/tweaks.itely:3483 (variable) -msgid "VerseFour" -msgstr "" - -#. Documentation/user/fundamental.itely:1314 (context id) -msgid "Sop" -msgstr "" - -#. Documentation/user/fundamental.itely:1315 (context id) -#. Documentation/user/tweaks.itely:3490 (context id) -#. Documentation/user/input.itely:951 (context id) -msgid "Alto" -msgstr "" - -#. Documentation/user/fundamental.itely:1323 (context id) -#. Documentation/user/tweaks.itely:3498 (context id) -#. Documentation/user/input.itely:953 (context id) -msgid "Tenor" -msgstr "" - -#. Documentation/user/fundamental.itely:1324 (context id) -#. Documentation/user/tweaks.itely:3499 (context id) -#. Documentation/user/input.itely:958 (context id) -#. input/lsr/jazz-combo-template.ly:227 (variable) -msgid "Bass" -msgstr "" - -#. Documentation/user/fundamental.itely:1350 (variable) -#. Documentation/user/fundamental.itely:1402 (variable) -#. Documentation/user/fundamental.itely:1464 (variable) -msgid "versenotes" -msgstr "" - -#. Documentation/user/fundamental.itely:1355 (variable) -#. Documentation/user/fundamental.itely:1416 (variable) -#. Documentation/user/fundamental.itely:1478 (variable) -msgid "versewords" -msgstr "" - -#. Documentation/user/fundamental.itely:1361 (context id) -#. Documentation/user/fundamental.itely:1428 (context id) -#. Documentation/user/fundamental.itely:1489 (context id) -#. Documentation/user/vocal.itely:826 (context id) -#. input/lsr/score-for-diatonic-accordion.ly:59 (variable) -msgid "verse" -msgstr "" - -#. Documentation/user/fundamental.itely:1407 (variable) -#. Documentation/user/fundamental.itely:1469 (variable) -msgid "refrainnotesA" -msgstr "" - -#. Documentation/user/fundamental.itely:1411 (variable) -#. Documentation/user/fundamental.itely:1473 (variable) -msgid "refrainnotesB" -msgstr "" - -#. Documentation/user/fundamental.itely:1419 (variable) -#. Documentation/user/fundamental.itely:1481 (variable) -msgid "refrainwordsA" -msgstr "" - -#. Documentation/user/fundamental.itely:1422 (variable) -#. Documentation/user/fundamental.itely:1484 (variable) -msgid "refrainwordsB" -msgstr "" - -#. Documentation/user/fundamental.itely:1436 (context id) -#. Documentation/user/fundamental.itely:1509 (context id) -msgid "refrainB" -msgstr "" - -#. Documentation/user/fundamental.itely:1501 (context id) -msgid "refrainA" -msgstr "" - -#. Documentation/user/fundamental.itely:1655 (comment) -msgid "start of single compound music expression" -msgstr "" - -#. Documentation/user/fundamental.itely:1656 (comment) -msgid "start of simultaneous staves section" -msgstr "" - -#. Documentation/user/fundamental.itely:1658 (comment) -msgid "create RH staff" -msgstr "" - -#. Documentation/user/fundamental.itely:1661 (comment) -msgid "create voice for RH notes" -msgstr "" - -#. Documentation/user/fundamental.itely:1662 (comment) -msgid "start of RH notes" -msgstr "" - -#. Documentation/user/fundamental.itely:1665 (comment) -msgid "end of RH notes" -msgstr "" - -#. Documentation/user/fundamental.itely:1666 (comment) -msgid "end of RH voice" -msgstr "" - -#. Documentation/user/fundamental.itely:1667 (comment) -msgid "end of RH staff" -msgstr "" - -#. Documentation/user/fundamental.itely:1668 (comment) -msgid "create LH staff; needs two simultaneous voices" -msgstr "" - -#. Documentation/user/fundamental.itely:1671 (comment) -msgid "create LH voice one" -msgstr "" - -#. Documentation/user/fundamental.itely:1673 (comment) -msgid "start of LH voice one notes" -msgstr "" - -#. Documentation/user/fundamental.itely:1676 (comment) -msgid "end of LH voice one notes" -msgstr "" - -#. Documentation/user/fundamental.itely:1677 (comment) -msgid "end of LH voice one" -msgstr "" - -#. Documentation/user/fundamental.itely:1678 (comment) -msgid "create LH voice two" -msgstr "" - -#. Documentation/user/fundamental.itely:1680 (comment) -msgid "start of LH voice two notes" -msgstr "" - -#. Documentation/user/fundamental.itely:1683 (comment) -msgid "end of LH voice two notes" -msgstr "" - -#. Documentation/user/fundamental.itely:1684 (comment) -msgid "end of LH voice two" -msgstr "" - -#. Documentation/user/fundamental.itely:1685 (comment) -msgid "end of LH staff" -msgstr "" - -#. Documentation/user/fundamental.itely:1686 (comment) -msgid "end of simultaneous staves section" -msgstr "" - -#. Documentation/user/fundamental.itely:1687 (comment) -msgid "end of single compound music expression" -msgstr "" - -#. Documentation/user/fundamental.itely:1906 (comment) -msgid "Wrong!" -msgstr "" - -#. Documentation/user/fundamental.itely:1992 (comment) -#. Documentation/user/fundamental.itely:2144 (comment) -msgid "make note heads smaller" -msgstr "" - -#. Documentation/user/fundamental.itely:1995 (comment) -#. Documentation/user/fundamental.itely:2146 (comment) -msgid "make note heads larger" -msgstr "" - -#. Documentation/user/fundamental.itely:1998 (comment) -#. Documentation/user/fundamental.itely:2148 (comment) -msgid "return to default size" -msgstr "" - -#. Documentation/user/fundamental.itely:2420 (variable) -#. Documentation/user/fundamental.itely:2647 (variable) -#. Documentation/user/input.itely:943 (variable) -msgid "sopranoMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2427 (variable) -msgid "sopranoLyrics" -msgstr "" - -#. Documentation/user/fundamental.itely:2431 (variable) -msgid "celloMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2651 (variable) -msgid "sopranoWords" -msgstr "" - -#. Documentation/user/fundamental.itely:2654 (variable) -#. Documentation/user/input.itely:944 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:51 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:44 (variable) -#. input/lsr/vocal-ensemble-template.ly:48 (variable) -msgid "altoMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2658 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:54 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:47 (variable) -#. input/lsr/vocal-ensemble-template.ly:51 (variable) -msgid "altoWords" -msgstr "" - -#. Documentation/user/fundamental.itely:2659 (variable) -#. Documentation/user/input.itely:945 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:58 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:51 (variable) -#. input/lsr/vocal-ensemble-template.ly:55 (variable) -msgid "tenorMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2663 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:61 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) -#. input/lsr/vocal-ensemble-template.ly:58 (variable) -msgid "tenorWords" -msgstr "" - -#. Documentation/user/fundamental.itely:2664 (variable) -#. Documentation/user/input.itely:946 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:65 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:58 (variable) -#. input/lsr/vocal-ensemble-template.ly:62 (variable) -msgid "bassMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2668 (variable) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:68 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:61 (variable) -#. input/lsr/vocal-ensemble-template.ly:65 (variable) -msgid "bassWords" -msgstr "" - -#. Documentation/user/fundamental.itely:2685 (comment) -msgid "combine ChoirStaff and PianoStaff in parallel" -msgstr "" - -#. Documentation/user/fundamental.itely:2687 (context id) -#. Documentation/user/fundamental.itely:2689 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:77 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:68 (context id) -#. input/lsr/vocal-ensemble-template.ly:73 (context id) -msgid "sopranos" -msgstr "" - -#. Documentation/user/fundamental.itely:2692 (context id) -#. Documentation/user/fundamental.itely:2694 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:78 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (context id) -#. input/lsr/vocal-ensemble-template.ly:77 (context id) -msgid "altos" -msgstr "" - -#. Documentation/user/fundamental.itely:2697 (context id) -#. Documentation/user/fundamental.itely:2699 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:84 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:79 (context id) -#. input/lsr/vocal-ensemble-template.ly:86 (context id) -msgid "tenors" -msgstr "" - -#. Documentation/user/fundamental.itely:2702 (context id) -#. Documentation/user/fundamental.itely:2704 (context id) -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:85 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (context id) -#. input/lsr/vocal-ensemble-template.ly:90 (context id) -msgid "basses" -msgstr "" - -#. Documentation/user/fundamental.itely:2707 (comment) -msgid "end ChoirStaff" -msgstr "" - -#. Documentation/user/fundamental.itely:2865 (variable) -msgid "ManualOneVoiceOneMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2868 (variable) -msgid "ManualOneVoiceTwoMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2872 (variable) -msgid "ManualTwoMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2876 (variable) -msgid "PedalOrganMusic" -msgstr "" - -#. Documentation/user/fundamental.itely:2882 (comment) -msgid "PianoStaff and Pedal Staff must be simultaneous" -msgstr "" - -#. Documentation/user/fundamental.itely:2884 (context id) -msgid "ManualOne" -msgstr "" - -#. Documentation/user/fundamental.itely:2885 (comment) -msgid "set time signature and key" -msgstr "" - -#. Documentation/user/fundamental.itely:2889 (comment) -msgid "end ManualOne Staff context" -msgstr "" - -#. Documentation/user/fundamental.itely:2890 (context id) -msgid "ManualTwo" -msgstr "" - -#. Documentation/user/fundamental.itely:2894 (comment) -msgid "end ManualTwo Staff context" -msgstr "" - -#. Documentation/user/fundamental.itely:2895 (comment) -msgid "end PianoStaff context" -msgstr "" - -#. Documentation/user/fundamental.itely:2896 (context id) -msgid "PedalOrgan" -msgstr "" - -#. Documentation/user/fundamental.itely:2900 (comment) -msgid "end PedalOrgan Staff context" -msgstr "" - -#. Documentation/user/fundamental.itely:2902 (comment) -msgid "end Score context" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @chapter in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @chapter in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @chapter in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @chapter in Documentation/de/user/fundamental.itely -msgid "Fundamental concepts" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -msgid "How LilyPond input files work" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Introduction to the LilyPond file structure" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Score is a (single) compound musical expression" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Nesting music expressions" -msgstr "" - -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/tweaks.itely -#. Documentation/user/staff.itely:543 (context id) -#. Documentation/user/staff.itely:556 (context id) -#. Documentation/user/staff.itely:564 (context id) -#. Documentation/user/staff.itely:583 (context id) -#. Documentation/user/staff.itely:596 (context id) -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/fr/user/tweaks.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/tweaks.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/tweaks.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "ossia" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "On the un-nestedness of brackets and ties" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -msgid "Voices contain music" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "I'm hearing Voices" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Explicitly instantiating voices" -msgstr "" - -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -msgid "Note columns" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Voices and vocals" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -msgid "Contexts and engravers" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Contexts explained" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Creating contexts" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Engravers explained" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Modifying context properties" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/es/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/de/user/fundamental.itely -msgid "Setting context properties with @code{\\with}" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/es/user/fundamental.itely -#. @unnumberedsubsubsec in Documentation/de/user/fundamental.itely -msgid "Setting context properties with @code{\\context}" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Adding and removing engravers" -msgstr "" - -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -msgid "Changing a single context" -msgstr "" - -#. @rglos in Documentation/user/fundamental.itely -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/fr/user/fundamental.itely -#. @rglos in Documentation/es/user/fundamental.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/fundamental.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "ambitus" -msgstr "" - -#. @subsubheading in Documentation/user/fundamental.itely -#. @subsubheading in Documentation/fr/user/fundamental.itely -#. @subsubheading in Documentation/es/user/fundamental.itely -#. @subsubheading in Documentation/de/user/fundamental.itely -msgid "Changing all contexts of the same type" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @section in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @section in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @section in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -msgid "Extending the templates" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Soprano and cello" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Four-part SATB vocal score" -msgstr "" - -#. @node in Documentation/user/fundamental.itely -#. @subsection in Documentation/user/fundamental.itely -#. @node in Documentation/fr/user/fundamental.itely -#. @subsection in Documentation/fr/user/fundamental.itely -#. @node in Documentation/es/user/fundamental.itely -#. @subsection in Documentation/es/user/fundamental.itely -#. @node in Documentation/de/user/fundamental.itely -#. @subsection in Documentation/de/user/fundamental.itely -msgid "Building a score from scratch" -msgstr "" - -#. Documentation/user/tweaks.itely:597 (comment) -#. Documentation/user/tweaks.itely:732 (comment) -msgid "Increase thickness of all following slurs from 1.2 to 5.0" -msgstr "" - -#. Documentation/user/tweaks.itely:666 (comment) -#. Documentation/user/tweaks.itely:705 (comment) -#. Documentation/user/tweaks.itely:708 (comment) -msgid "Increase thickness of immediately following slur only" -msgstr "" - -#. Documentation/user/tweaks.itely:736 (comment) -msgid "Revert thickness of all following slurs to default of 1.2" -msgstr "" - -#. Documentation/user/tweaks.itely:1396 (comment) -msgid "Don't print clefs in this staff" -msgstr "" - -#. Documentation/user/tweaks.itely:1398 (comment) -msgid "Don't print time signatures in this staff" -msgstr "" - -#. Documentation/user/tweaks.itely:1462 (comment) -msgid "Reduce all font sizes by ~24%" -msgstr "" - -#. Documentation/user/tweaks.itely:1528 (comment) -msgid "Reduce stem length and line spacing to match" -msgstr "" - -#. Documentation/user/tweaks.itely:1958 (comment) -#. Documentation/user/tweaks.itely:2028 (comment) -msgid "Set details for later Text Spanner" -msgstr "" - -#. Documentation/user/tweaks.itely:1961 (comment) -#. Documentation/user/tweaks.itely:2031 (comment) -msgid "Place dynamics above staff" -msgstr "" - -#. Documentation/user/tweaks.itely:1963 (comment) -#. Documentation/user/tweaks.itely:2035 (comment) -msgid "Start Ottava Bracket" -msgstr "" - -#. Documentation/user/tweaks.itely:1966 (comment) -#. Documentation/user/tweaks.itely:1973 (comment) -#. Documentation/user/tweaks.itely:2038 (comment) -#. Documentation/user/tweaks.itely:2045 (comment) -msgid "Add Dynamic Text" -msgstr "" - -#. Documentation/user/tweaks.itely:1968 (comment) -#. Documentation/user/tweaks.itely:2040 (comment) -msgid "Add Dynamic Line Spanner" -msgstr "" - -#. Documentation/user/tweaks.itely:1970 (comment) -#. Documentation/user/tweaks.itely:2042 (comment) -msgid "Add Text Script" -msgstr "" - -#. Documentation/user/tweaks.itely:1975 (comment) -#. Documentation/user/tweaks.itely:2047 (comment) -msgid "Stop Ottava Bracket" -msgstr "" - -#. Documentation/user/tweaks.itely:2033 (comment) -msgid "Place following Ottava Bracket below Text Spanners" -msgstr "" - -#. Documentation/user/tweaks.itely:2095 (comment) -msgid "Cause notes to space out to accommodate text" -msgstr "" - -#. Documentation/user/tweaks.itely:2118 (comment) -msgid "This markup is short enough to fit without collision" -msgstr "" - -#. Documentation/user/tweaks.itely:2122 (comment) -msgid "This is too long to fit, so it is displaced upwards" -msgstr "" - -#. Documentation/user/tweaks.itely:2126 (comment) -#. Documentation/user/tweaks.itely:2131 (comment) -msgid "Turn off collision avoidance" -msgstr "" - -#. Documentation/user/tweaks.itely:2133 (comment) -msgid "and turn on textLengthOn" -msgstr "" - -#. Documentation/user/tweaks.itely:2134 (comment) -msgid "Spaces at end are honored" -msgstr "" - -#. Documentation/user/tweaks.itely:2241 (comment) -msgid "Extend width by 1 staff space" -msgstr "" - -#. Documentation/user/tweaks.itely:2524 (comment) -msgid "This will not work, see below:" -msgstr "" - -#. Documentation/user/tweaks.itely:2528 (comment) -msgid "This works:" -msgstr "" - -#. Documentation/user/tweaks.itely:2579 (variable) -msgid "naturalplusflat" -msgstr "" - -#. Documentation/user/tweaks.itely:2620 (comment) -msgid "Extend width by 1 unit" -msgstr "" - -#. Documentation/user/tweaks.itely:2622 (comment) -msgid "Align dynamics to a base line 2 units above staff" -msgstr "" - -#. Documentation/user/tweaks.itely:2926 (variable) -#. Documentation/user/tweaks.itely:2975 (variable) -#. Documentation/user/tweaks.itely:3036 (variable) -#. Documentation/user/tweaks.itely:3106 (variable) -#. Documentation/user/tweaks.itely:3171 (variable) -#. Documentation/user/tweaks.itely:3231 (variable) -msgid "rhMusic" -msgstr "" - -#. Documentation/user/tweaks.itely:2931 (comment) -#. Documentation/user/tweaks.itely:2980 (comment) -#. Documentation/user/tweaks.itely:3043 (comment) -#. Documentation/user/tweaks.itely:3115 (comment) -#. Documentation/user/tweaks.itely:3180 (comment) -msgid "Start polyphonic section of four voices" -msgstr "" - -#. Documentation/user/tweaks.itely:2944 (variable) -#. Documentation/user/tweaks.itely:2993 (variable) -#. Documentation/user/tweaks.itely:3056 (variable) -#. Documentation/user/tweaks.itely:3130 (variable) -#. Documentation/user/tweaks.itely:3197 (variable) -#. Documentation/user/tweaks.itely:3259 (variable) -msgid "lhMusic" -msgstr "" - -#. Documentation/user/tweaks.itely:2953 (context id) -#. Documentation/user/tweaks.itely:3002 (context id) -#. Documentation/user/tweaks.itely:3065 (context id) -#. Documentation/user/tweaks.itely:3139 (context id) -#. Documentation/user/tweaks.itely:3206 (context id) -#. Documentation/user/tweaks.itely:3268 (context id) -#. Documentation/user/input.itely:964 (context id) -msgid "RH" -msgstr "" - -#. Documentation/user/tweaks.itely:2957 (context id) -#. Documentation/user/tweaks.itely:3006 (context id) -#. Documentation/user/tweaks.itely:3069 (context id) -#. Documentation/user/tweaks.itely:3143 (context id) -#. Documentation/user/tweaks.itely:3210 (context id) -#. Documentation/user/tweaks.itely:3272 (context id) -#. Documentation/user/input.itely:970 (context id) -msgid "LH" -msgstr "" - -#. Documentation/user/tweaks.itely:3184 (comment) -#. Documentation/user/tweaks.itely:3246 (comment) -msgid "Move the c2 out of the main note column so the merge will work" -msgstr "" - -#. Documentation/user/tweaks.itely:3187 (comment) -#. Documentation/user/tweaks.itely:3249 (comment) -msgid "Stem on the d2 must be down to permit merging" -msgstr "" - -#. Documentation/user/tweaks.itely:3244 (comment) -msgid "Reposition the c2 to the right of the merged note" -msgstr "" - -#. Documentation/user/tweaks.itely:3380 (comment) -#. Documentation/user/tweaks.itely:3402 (comment) -msgid "Visible tempo marking" -msgstr "" - -#. Documentation/user/tweaks.itely:3384 (comment) -#. Documentation/user/tweaks.itely:3406 (comment) -msgid "Invisible tempo marking to lengthen fermata in MIDI" -msgstr "" - -#. Documentation/user/tweaks.itely:3387 (comment) -#. Documentation/user/tweaks.itely:3409 (comment) -msgid "New tempo for next section" -msgstr "" - -#. Documentation/user/tweaks.itely:3466 (variable) -msgid "emphasize" -msgstr "" - -#. Documentation/user/tweaks.itely:3470 (variable) -msgid "normal" -msgstr "" - -#. Documentation/user/tweaks.itely:3476 (variable) -msgid "SopranoMusic" -msgstr "" - -#. Documentation/user/tweaks.itely:3489 (context id) -#. Documentation/user/input.itely:949 (context id) -msgid "Soprano" -msgstr "" - -#. Documentation/user/tweaks.itely:3698 (comment) -msgid "Arrange to obtain color from color-notehead procedure" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @chapter in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @chapter in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @chapter in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @chapter in Documentation/de/user/tweaks.itely -msgid "Tweaking output" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -msgid "Tweaking basics" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Introduction to tweaks" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Objects and interfaces" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Naming conventions of objects and properties" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Tweaking methods" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -msgid "The Internals Reference manual" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Properties of layout objects" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Finding the context" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Overriding once only" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Reverting" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Properties found in interfaces" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Specifying the context in lyric mode" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Types of properties" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -msgid "Appearance of objects" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Visibility and color of objects" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "stencil" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "break-visibility" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "transparent" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "color" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Size of objects" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Length and thickness of objects" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -msgid "Placement of objects" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Automatic behavior" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Within-staff objects" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Fingering" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Outside-staff objects" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "\\textLengthOn" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Grob sizing" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -msgid "Collisions of objects" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Moving objects" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Fixing overlapping notation" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "padding property" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "left-padding and right-padding" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "staff-padding property" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "self-alignment-X property" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "staff-position property" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "extra-offset property" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "positions property" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "force-hshift property" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Real music example" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @section in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @section in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @section in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @section in Documentation/de/user/tweaks.itely -msgid "Further tweaking" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Other uses for tweaks" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Tying notes across voices" -msgstr "" - -#. @subheading in Documentation/user/tweaks.itely -#. @subheading in Documentation/fr/user/tweaks.itely -#. @subheading in Documentation/es/user/tweaks.itely -#. @subheading in Documentation/de/user/tweaks.itely -msgid "Simulating a fermata in MIDI" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Using variables for tweaks" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Other sources of information" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Avoiding tweaks with slower processing" -msgstr "" - -#. @node in Documentation/user/tweaks.itely -#. @subsection in Documentation/user/tweaks.itely -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -#. @node in Documentation/de/user/tweaks.itely -#. @subsection in Documentation/de/user/tweaks.itely -msgid "Advanced tweaks with Scheme" -msgstr "" - -#. Documentation/user/working.itely:201 (variable) -msgid "hornNotes" -msgstr "" - -#. Documentation/user/working.itely:212 (variable) -msgid "fragmentA" -msgstr "" - -#. Documentation/user/working.itely:213 (variable) -msgid "fragmentB" -msgstr "" - -#. Documentation/user/working.itely:226 (variable) -msgid "dolce" -msgstr "" - -#. Documentation/user/working.itely:227 (variable) -#. Documentation/user/working.itely:276 (variable) -#. Documentation/user/scheme-tutorial.itely:235 (variable) -#. Documentation/user/programming-interface.itely:101 (variable) -msgid "padText" -msgstr "" - -#. Documentation/user/working.itely:228 (variable) -msgid "fthenp" -msgstr "" - -#. Documentation/user/working.itely:313 (variable) -msgid "mpdolce" -msgstr "" - -#. Documentation/user/working.itely:315 (variable) -#. Documentation/user/scheme-tutorial.itely:256 (variable) -#. Documentation/user/programming-interface.itely:135 (variable) -msgid "tempoMark" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @chapter in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @chapter in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @chapter in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @chapter in Documentation/de/user/working.itely -msgid "Working on LilyPond projects" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "Suggestions for writing LilyPond input files" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "General suggestions" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Typesetting existing music" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Large projects" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Saving typing with variables and functions" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Style sheets" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "When things don't work" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -msgid "Updating old input files" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Troubleshooting (taking it all apart)" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @subsection in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Minimal examples" -msgstr "" - -#. @node in Documentation/user/working.itely -#. @section in Documentation/user/working.itely -#. @node in Documentation/fr/user/working.itely -#. @section in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @section in Documentation/de/user/working.itely -msgid "Scores and parts" -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendix in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendix in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendix in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendix in Documentation/de/user/templates.itely -msgid "Templates" -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Single staff" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Notes only" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Notes and lyrics" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Notes and chords" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Notes, lyrics, and chords." -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Piano templates" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Solo piano" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Piano and melody with lyrics" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Piano centered lyrics" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Piano centered dynamics" -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "String quartet" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "String quartet parts" -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Vocal ensembles" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "SATB vocal score" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "SATB vocal score and automatic piano reduction" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "SATB with aligned contexts" -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Ancient notation templates" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Transcription of mensural music" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "Gregorian transcription template" -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Jazz combo" -msgstr "" - -#. @node in Documentation/user/templates.itely -#. @appendixsec in Documentation/user/templates.itely -#. @node in Documentation/fr/user/templates.itely -#. @appendixsec in Documentation/fr/user/templates.itely -#. @node in Documentation/es/user/templates.itely -#. @appendixsec in Documentation/es/user/templates.itely -msgid "lilypond-book templates" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "LaTeX" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -msgid "Texinfo" -msgstr "" - -#. @appendixsubsec in Documentation/user/templates.itely -#. @appendixsubsec in Documentation/fr/user/templates.itely -#. @appendixsubsec in Documentation/es/user/templates.itely -#. @appendixsubsec in Documentation/de/user/templates.itely -msgid "xelatex" -msgstr "" - -#. Documentation/user/scheme-tutorial.itely:274 (variable) -msgid "pattern" -msgstr "" - -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendix in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendix in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendix in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendix in Documentation/de/user/scheme-tutorial.itely -msgid "Scheme tutorial" -msgstr "" - -#. @node in Documentation/user/scheme-tutorial.itely -#. @appendixsec in Documentation/user/scheme-tutorial.itely -#. @node in Documentation/fr/user/scheme-tutorial.itely -#. @appendixsec in Documentation/fr/user/scheme-tutorial.itely -#. @node in Documentation/es/user/scheme-tutorial.itely -#. @appendixsec in Documentation/es/user/scheme-tutorial.itely -#. @node in Documentation/de/user/scheme-tutorial.itely -#. @appendixsec in Documentation/de/user/scheme-tutorial.itely -msgid "Tweaking with Scheme" -msgstr "" - -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -#. @node in Documentation/user/fdl.itexi -#. @appendix in Documentation/user/fdl.itexi -msgid "GNU Free Documentation License" -msgstr "" - -#. @subheading in Documentation/user/fdl.itexi -msgid "ADDENDUM: How to use this License for your documents" -msgstr "" - -#. @top in Documentation/user/lilypond-program.tely -msgid "GNU LilyPond --- Application Usage" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @chapter in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @chapter in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @chapter in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @chapter in Documentation/de/user/install.itely -msgid "Install" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @section in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @section in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -msgid "Precompiled binaries" -msgstr "" - -#. @unnumberedsubsec in Documentation/user/install.itely -#. @unnumberedsubsec in Documentation/fr/user/install.itely -#. @unnumberedsubsec in Documentation/es/user/install.itely -#. @unnumberedsubsec in Documentation/de/user/install.itely -msgid "Downloading" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @section in Documentation/user/install.itely -#. @node in Documentation/fr/user/install.itely -#. @section in Documentation/fr/user/install.itely -#. @node in Documentation/es/user/install.itely -#. @section in Documentation/es/user/install.itely -#. @node in Documentation/de/user/install.itely -#. @section in Documentation/de/user/install.itely -msgid "Compiling from source" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Downloading source code" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Requirements" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compilation" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Running requirements" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Requirements for building documentation" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Building LilyPond" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compiling" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compiling for multiple platforms" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Compiling outside the source tree" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Useful @command{make} variables" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Building documentation" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Commands for building documentation" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Building documentation without compiling LilyPond" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Testing LilyPond" -msgstr "" - -#. @node in Documentation/user/install.itely -#. @subsection in Documentation/user/install.itely -msgid "Problems" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Bison 1.875" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "Solaris" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "FreeBSD" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/install.itely -msgid "International fonts" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @chapter in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @chapter in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @chapter in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @chapter in Documentation/de/user/setup.itely -msgid "Setup" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -msgid "Setup for specific Operating Systems" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "Setup for MacOS X" -msgstr "" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -msgid "Using Python scripts on MacOS 10.3 or 10.4" -msgstr "" - -#. @subsubheading in Documentation/user/setup.itely -#. @subsubheading in Documentation/fr/user/setup.itely -#. @subsubheading in Documentation/es/user/setup.itely -#. @subsubheading in Documentation/de/user/setup.itely -msgid "MacOS X on the command line" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -msgid "Text editor support" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "Emacs mode" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "Vim mode" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "jEdit" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "TexShop" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "TextMate" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @subsection in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @subsection in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @subsection in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @subsection in Documentation/de/user/setup.itely -msgid "LilyKDE" -msgstr "" - -#. @node in Documentation/user/setup.itely -#. @section in Documentation/user/setup.itely -#. @node in Documentation/fr/user/setup.itely -#. @section in Documentation/fr/user/setup.itely -#. @node in Documentation/es/user/setup.itely -#. @section in Documentation/es/user/setup.itely -#. @node in Documentation/de/user/setup.itely -#. @section in Documentation/de/user/setup.itely -msgid "Point and click" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @chapter in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @chapter in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @chapter in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @chapter in Documentation/de/user/running.itely -msgid "Running LilyPond" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Normal usage" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Command-line usage" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Invoking lilypond" -msgstr "" - -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Invoking @command{lilypond}" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Command line options for lilypond" -msgstr "" - -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Command line options for @command{lilypond}" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @subsection in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Environment variables" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Error messages" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Updating files with convert-ly" -msgstr "" - -#. @section in Documentation/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Updating files with @command{convert-ly}" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Command line options for convert-ly" -msgstr "" - -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Command line options for @command{convert-ly}" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -msgid "Problems with convert-ly" -msgstr "" - -#. @subsection in Documentation/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subsection in Documentation/es/user/running.itely -#. @subsection in Documentation/de/user/running.itely -msgid "Problems with @code{convert-ly}" -msgstr "" - -#. @node in Documentation/user/running.itely -#. @section in Documentation/user/running.itely -#. @node in Documentation/fr/user/running.itely -#. @section in Documentation/fr/user/running.itely -#. @node in Documentation/es/user/running.itely -#. @section in Documentation/es/user/running.itely -#. @node in Documentation/de/user/running.itely -#. @section in Documentation/de/user/running.itely -msgid "Reporting bugs" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "LilyPond-book" -msgstr "" - -#. @chapter in Documentation/user/lilypond-book.itely -#. @chapter in Documentation/fr/user/lilypond-book.itely -#. @chapter in Documentation/es/user/lilypond-book.itely -#. @chapter in Documentation/de/user/lilypond-book.itely -msgid "@command{lilypond-book}: Integrating text and music" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "An example of a musicological document" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Input" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Processing" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Output" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Integrating music and text" -msgstr "" - -#. @subsection in Documentation/user/lilypond-book.itely -#. @subsubheading in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @subsubheading in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @subsubheading in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -#. @subsubheading in Documentation/de/user/lilypond-book.itely -msgid "@LaTeX{}" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "HTML" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @subsection in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @subsection in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "DocBook" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Common conventions" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Including a LilyPond file" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Including LilyPond code" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Processing the DocBook document" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Music fragment options" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "Invoking lilypond-book" -msgstr "" - -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Invoking @command{lilypond-book}" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Format-specific instructions" -msgstr "" - -#. @subheading in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/running.itely -#. @subsection in Documentation/fr/user/running.itely -#. @subheading in Documentation/fr/user/lilypond-book.itely -#. @subheading in Documentation/es/user/lilypond-book.itely -#. @subheading in Documentation/de/user/lilypond-book.itely -msgid "Command line options" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @section in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Filename extensions" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -msgid "Alternate methods of mixing text and music" -msgstr "" - -#. @section in Documentation/user/lilypond-book.itely -#. @section in Documentation/fr/user/lilypond-book.itely -#. @section in Documentation/es/user/lilypond-book.itely -#. @section in Documentation/de/user/lilypond-book.itely -msgid "Alternative methods of mixing text and music" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "Many quotes from a large score" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "Inserting LilyPond output into OpenOffice.org" -msgstr "" - -#. @node in Documentation/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/user/lilypond-book.itely -#. @node in Documentation/fr/user/lilypond-book.itely -#. @subsection in Documentation/fr/user/lilypond-book.itely -#. @node in Documentation/es/user/lilypond-book.itely -#. @unnumberedsubsec in Documentation/es/user/lilypond-book.itely -#. @node in Documentation/de/user/lilypond-book.itely -#. @subsection in Documentation/de/user/lilypond-book.itely -msgid "Inserting LilyPond output into other programs" -msgstr "" - -#. @node in Documentation/user/converters.itely -#. @chapter in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @chapter in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @chapter in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @chapter in Documentation/de/user/converters.itely -msgid "Converting from other formats" -msgstr "" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking midi2ly" -msgstr "" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @command{midi2ly}" -msgstr "" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking musicxml2ly" -msgstr "" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @code{musicxml2ly}" -msgstr "" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking abc2ly" -msgstr "" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @code{abc2ly}" -msgstr "" - -#. @node in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -msgid "Invoking etf2ly" -msgstr "" - -#. @section in Documentation/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Invoking @command{etf2ly}" -msgstr "" - -#. @node in Documentation/user/converters.itely -#. @section in Documentation/user/converters.itely -#. @node in Documentation/fr/user/converters.itely -#. @section in Documentation/fr/user/converters.itely -#. @node in Documentation/es/user/converters.itely -#. @section in Documentation/es/user/converters.itely -#. @node in Documentation/de/user/converters.itely -#. @section in Documentation/de/user/converters.itely -msgid "Generating LilyPond files" -msgstr "" - -#. @top in Documentation/user/lilypond.tely -#. @top in Documentation/de/user/lilypond.tely -msgid "GNU LilyPond --- Notation Reference" -msgstr "" - -#. @chapheading in Documentation/user/lilypond.tely -msgid "The music typesetter" -msgstr "" - -#. @node in Documentation/user/lilypond.tely -#. @appendix in Documentation/user/lilypond.tely -#. @node in Documentation/fr/user/lilypond.tely -#. @appendix in Documentation/fr/user/lilypond.tely -#. @node in Documentation/es/user/lilypond.tely -#. @appendix in Documentation/es/user/lilypond.tely -#. @node in Documentation/de/user/lilypond.tely -#. @appendix in Documentation/de/user/lilypond.tely -msgid "LilyPond command index" -msgstr "" - -#. @node in Documentation/user/notation.itely -#. @chapter in Documentation/user/notation.itely -#. @node in Documentation/fr/user/notation.itely -#. @chapter in Documentation/fr/user/notation.itely -#. @node in Documentation/es/user/notation.itely -#. @chapter in Documentation/es/user/notation.itely -#. @node in Documentation/de/user/notation.itely -#. @chapter in Documentation/de/user/notation.itely -msgid "Musical notation" -msgstr "" - -#. Documentation/user/pitches.itely:688 (variable) -#. Documentation/user/input.itely:1033 (variable) -#. Documentation/user/input.itely:1052 (variable) -#. Documentation/user/input.itely:1089 (variable) -#. Documentation/user/input.itely:1104 (variable) -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:29 (variable) -#. input/lsr/controlling-tuplet-bracket-visibility.ly:20 (variable) -#. input/lsr/letter-tablature-formatting.ly:25 (variable) -#. input/lsr/string-quartet-template-with-separate-parts.ly:98 (variable) -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:136 (variable) -#. input/lsr/vertically-aligned-dynamics-and-textscripts.ly:50 (variable) -msgid "music" -msgstr "" - -#. Documentation/user/pitches.itely:1082 (comment) -msgid "not strictly necessary, but a good reminder" -msgstr "" - -#. Documentation/user/pitches.itely:1089 (context id) -#. Documentation/user/staff.itely:1076 (variable) -msgid "clarinet" -msgstr "" - -#. Documentation/user/pitches.itely:1174 (variable) -msgid "musicA" -msgstr "" - -#. Documentation/user/pitches.itely:1188 (variable) -msgid "musicB" -msgstr "" - -#. Documentation/user/pitches.itely:1207 (context id) -#. Documentation/user/keyboards.itely:175 (context id) -#. Documentation/user/keyboards.itely:274 (context id) -#. Documentation/user/percussion.itely:175 (variable) -#. Documentation/user/percussion.itely:365 (variable) -#. input/lsr/jazz-combo-template.ly:241 (variable) -msgid "up" -msgstr "" - -#. Documentation/user/pitches.itely:1211 (context id) -#. Documentation/user/keyboards.itely:185 (context id) -#. Documentation/user/keyboards.itely:283 (context id) -#. Documentation/user/percussion.itely:178 (variable) -#. Documentation/user/percussion.itely:366 (variable) -#. input/lsr/jazz-combo-template.ly:247 (variable) -msgid "down" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Writing pitches" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Absolute octave entry" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Relative octave entry" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "fifth" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "quarter tone" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Note names in other languages" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Changing multiple pitches" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Octave checks" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Transpose" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Displaying pitches" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Key signature" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "church mode" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "scordatura" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ottava brackets" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "octavation" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Instrument transpositions" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "concert pitch" -msgstr "" - -#. @rglos in Documentation/user/pitches.itely -#. @rglos in Documentation/es/user/pitches.itely -#. @rglos in Documentation/de/user/pitches.itely -msgid "transposing instrument" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Automatic accidentals" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Ambitus" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @subsection in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @subsection in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @subsection in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @subsection in Documentation/de/user/pitches.itely -msgid "Note heads" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Special note heads" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Easy notation note heads" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Shape note heads" -msgstr "" - -#. @node in Documentation/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/user/pitches.itely -#. @node in Documentation/fr/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/fr/user/pitches.itely -#. @node in Documentation/es/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/es/user/pitches.itely -#. @node in Documentation/de/user/pitches.itely -#. @unnumberedsubsubsec in Documentation/de/user/pitches.itely -msgid "Improvisation" -msgstr "" - -#. Documentation/user/rhythms.itely:287 (comment) -msgid "Alter durations to triplets" -msgstr "" - -#. Documentation/user/rhythms.itely:289 (comment) -#. Documentation/user/rhythms.itely:314 (comment) -msgid "Normal durations" -msgstr "" - -#. Documentation/user/rhythms.itely:291 (comment) -msgid "Double the duration of chord" -msgstr "" - -#. Documentation/user/rhythms.itely:293 (comment) -msgid "Duration of quarter, appears like sixteenth" -msgstr "" - -#. Documentation/user/rhythms.itely:316 (comment) -msgid "Scale music by *2/3" -msgstr "" - -#. Documentation/user/rhythms.itely:320 (comment) -msgid "Scale music by *2" -msgstr "" - -#. Documentation/user/rhythms.itely:404 (comment) -msgid "First alternative: following note is tied normally" -msgstr "" - -#. Documentation/user/rhythms.itely:406 (comment) -msgid "Second alternative: following note has a repeated tie" -msgstr "" - -#. Documentation/user/rhythms.itely:522 (comment) -msgid "These two lines are just to prettify this example" -msgstr "" - -#. Documentation/user/rhythms.itely:525 (comment) -msgid "Print a maxima rest, equal to four breves" -msgstr "" - -#. Documentation/user/rhythms.itely:527 (comment) -msgid "Print a longa rest, equal to two breves" -msgstr "" - -#. Documentation/user/rhythms.itely:529 (comment) -msgid "Print a breve rest" -msgstr "" - -#. Documentation/user/rhythms.itely:630 (comment) -msgid "This is valid input, but does nothing" -msgstr "" - -#. Documentation/user/rhythms.itely:656 (comment) -#. Documentation/user/rhythms.itely:709 (comment) -msgid "Rest measures contracted to single measure" -msgstr "" - -#. Documentation/user/rhythms.itely:705 (comment) -#. input/lsr/avoiding-collisions-of-chord-fingering-with-beams.ly:35 (comment) -msgid "Default behavior" -msgstr "" - -#. Documentation/user/rhythms.itely:712 (comment) -msgid "Rest measures expanded" -msgstr "" - -#. Documentation/user/rhythms.itely:745 (comment) -msgid "This fails, as the wrong object name is specified" -msgstr "" - -#. Documentation/user/rhythms.itely:748 (comment) -msgid "This is correct and works" -msgstr "" - -#. Documentation/user/rhythms.itely:873 (comment) -msgid "Default style" -msgstr "" - -#. Documentation/user/rhythms.itely:876 (comment) -msgid "Change to numeric style" -msgstr "" - -#. Documentation/user/rhythms.itely:880 (comment) -msgid "Revert to default style" -msgstr "" - -#. Documentation/user/rhythms.itely:1021 (comment) -msgid "Show all bar numbers" -msgstr "" - -#. Documentation/user/rhythms.itely:1140 (comment) -msgid "Now each staff has its own time signature." -msgstr "" - -#. Documentation/user/rhythms.itely:1262 (context id) -msgid "myRhythm" -msgstr "" - -#. Documentation/user/rhythms.itely:1598 (comment) -msgid "end 1/16 beams for all time signatures at the 1/16 moment" -msgstr "" - -#. Documentation/user/rhythms.itely:1602 (comment) -msgid "end 1/32 beams for all time signatures at the 1/16 moment" -msgstr "" - -#. Documentation/user/rhythms.itely:1612 (comment) -msgid "end beams of all durations in 5/8 time signature at the 2/8 moment" -msgstr "" - -#. Documentation/user/rhythms.itely:1627 (comment) -msgid "rhythm 3-1-1-2" -msgstr "" - -#. Documentation/user/rhythms.itely:1628 (comment) -msgid "Context not specified - does not work correctly" -msgstr "" - -#. Documentation/user/rhythms.itely:1634 (comment) -msgid "Works correctly with context specified" -msgstr "" - -#. Documentation/user/rhythms.itely:1667 (comment) -msgid "undo a rule ending 1/16 beams in 4/4 time at 1/4 moment" -msgstr "" - -#. Documentation/user/rhythms.itely:1680 (comment) -msgid "this won't revert it!" -msgstr "" - -#. Documentation/user/rhythms.itely:1682 (comment) -msgid "this will" -msgstr "" - -#. Documentation/user/rhythms.itely:1815 (comment) -msgid "revert to non-feathered beams" -msgstr "" - -#. Documentation/user/rhythms.itely:2037 (comment) -#. Documentation/user/rhythms.itely:2053 (comment) -msgid "Permit first bar number to be printed" -msgstr "" - -#. Documentation/user/rhythms.itely:2054 (comment) -#. Documentation/user/rhythms.itely:2102 (comment) -msgid "Print a bar number every second measure" -msgstr "" - -#. Documentation/user/rhythms.itely:2070 (comment) -msgid "Prevent bar numbers at the end of a line and permit them elsewhere" -msgstr "" - -#. Documentation/user/rhythms.itely:2074 (comment) -#. Documentation/user/rhythms.itely:2100 (comment) -msgid "Increase the size of the bar number by 2" -msgstr "" - -#. Documentation/user/rhythms.itely:2078 (comment) -msgid "Draw a box round the following bar number(s)" -msgstr "" - -#. Documentation/user/rhythms.itely:2083 (comment) -msgid "Draw a circle round the following bar number(s)" -msgstr "" - -#. Documentation/user/rhythms.itely:2105 (comment) -msgid "Center-align bar numbers" -msgstr "" - -#. Documentation/user/rhythms.itely:2108 (comment) -msgid "Right-align bar numbers" -msgstr "" - -#. Documentation/user/rhythms.itely:2210 (variable) -msgid "pipeSymbol" -msgstr "" - -#. Documentation/user/rhythms.itely:2598 (variable) -msgid "MyCadenza" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @section in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @section in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @section in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @section in Documentation/de/user/rhythms.itely -msgid "Rhythms" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rhythms" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Durations" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "breve" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "longa" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "Duration names notes and rests" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "tuplet" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "polymetric" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Scaling durations" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/fr/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "laissez vibrer" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Writing rests" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Invisible rests" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Full measure rests" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "multi-measure rest" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Displaying rhythms" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Upbeats" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Unmetered music" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "cadenza" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Polymetric notation" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "polymetric time signature" -msgstr "" - -#. @rglos in Documentation/user/rhythms.itely -#. @rglos in Documentation/es/user/rhythms.itely -#. @rglos in Documentation/de/user/rhythms.itely -msgid "meter" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic note splitting" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Showing melody rhythms" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Automatic beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Setting automatic beam behavior" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Manual beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Feathered beams" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Bars" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar lines" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar numbers" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Bar and bar number checks" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Rehearsal marks" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @subsection in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @subsection in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @subsection in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @subsection in Documentation/de/user/rhythms.itely -msgid "Special rhythmic concerns" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Aligning to cadenzas" -msgstr "" - -#. @node in Documentation/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/user/rhythms.itely -#. @node in Documentation/fr/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/fr/user/rhythms.itely -#. @node in Documentation/es/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/es/user/rhythms.itely -#. @node in Documentation/de/user/rhythms.itely -#. @unnumberedsubsubsec in Documentation/de/user/rhythms.itely -msgid "Time administration" -msgstr "" - -#. Documentation/user/expressive.itely:386 (variable) -#. Documentation/user/expressive.itely:454 (variable) -msgid "moltoF" -msgstr "" - -#. Documentation/user/expressive.itely:407 (variable) -#. Documentation/user/expressive.itely:437 (variable) -msgid "roundF" -msgstr "" - -#. Documentation/user/expressive.itely:409 (variable) -#. Documentation/user/expressive.itely:441 (variable) -msgid "boxF" -msgstr "" - -#. Documentation/user/expressive.itely:424 (variable) -msgid "sfzp" -msgstr "" - -#. Documentation/user/expressive.itely:442 (variable) -msgid "roundFdynamic" -msgstr "" - -#. Documentation/user/expressive.itely:443 (variable) -msgid "boxFdynamic" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @section in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @section in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @section in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @section in Documentation/de/user/expressive.itely -msgid "Expressive marks" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Attached to notes" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Articulations and ornamentations" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "tenuto" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "accent" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "staccato" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "portato" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "al niente" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "hairpin" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "New dynamic marks" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Curves" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Breath marks" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -#. input/lsr/breathing-signs.ly:35 (comment) -msgid "caesura" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Falls and doits" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "fall" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "doit" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @subsection in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @subsection in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @subsection in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @subsection in Documentation/de/user/expressive.itely -msgid "Lines" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Glissando" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "glissando" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Arpeggio" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "arpeggio" -msgstr "" - -#. @node in Documentation/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/user/expressive.itely -#. @node in Documentation/fr/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/fr/user/expressive.itely -#. @node in Documentation/es/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/es/user/expressive.itely -#. @node in Documentation/de/user/expressive.itely -#. @unnumberedsubsubsec in Documentation/de/user/expressive.itely -msgid "Trills" -msgstr "" - -#. @rglos in Documentation/user/expressive.itely -#. @rglos in Documentation/es/user/expressive.itely -#. @rglos in Documentation/de/user/expressive.itely -msgid "trill" -msgstr "" - -#. Documentation/user/repeats.itely:299 (variable) -#. input/lsr/volta-text-markup-using-repeatcommands.ly:21 (variable) -msgid "voltaAdLib" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @section in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @section in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @section in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @section in Documentation/de/user/repeats.itely -msgid "Repeats" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Long repeats" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Normal repeats" -msgstr "" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "repeat" -msgstr "" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "volta" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Manual repeat marks" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Written-out repeats" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @subsection in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @subsection in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @subsection in Documentation/de/user/repeats.itely -msgid "Short repeats" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Percent repeats" -msgstr "" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "percent repeat" -msgstr "" - -#. @rglos in Documentation/user/repeats.itely -#. @rglos in Documentation/es/user/repeats.itely -#. @rglos in Documentation/de/user/repeats.itely -msgid "simile" -msgstr "" - -#. @node in Documentation/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/user/repeats.itely -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -#. @node in Documentation/es/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/es/user/repeats.itely -#. @node in Documentation/de/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/de/user/repeats.itely -msgid "Tremolo repeats" -msgstr "" - -#. Documentation/user/simultaneous.itely:94 (comment) -msgid "explicit single voice" -msgstr "" - -#. Documentation/user/simultaneous.itely:100 (comment) -msgid "single first note" -msgstr "" - -#. Documentation/user/simultaneous.itely:112 (comment) -msgid "no single first note" -msgstr "" - -#. Documentation/user/simultaneous.itely:621 (variable) -msgid "instrumentOne" -msgstr "" - -#. Documentation/user/simultaneous.itely:629 (variable) -msgid "instrumentTwo" -msgstr "" - -#. Documentation/user/simultaneous.itely:806 (comment) -msgid "Bar 3 ..." -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @section in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @section in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @section in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @section in Documentation/de/user/simultaneous.itely -msgid "Simultaneous notes" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Single voice" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Chorded notes" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Simultaneous expressions" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Clusters" -msgstr "" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "cluster" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @subsection in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @subsection in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @subsection in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @subsection in Documentation/de/user/simultaneous.itely -msgid "Multiple voices" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Single-staff polyphony" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Voice styles" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Collision resolution" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Automatic part combining" -msgstr "" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -msgid "a due" -msgstr "" - -#. @rglos in Documentation/user/simultaneous.itely -#. @rglos in Documentation/es/user/simultaneous.itely -#. @rglos in Documentation/de/user/simultaneous.itely -#. input/lsr/flamenco-notation.ly:136 (variable) -#. input/lsr/flamenco-notation.ly:233 (context id) -msgid "part" -msgstr "" - -#. @node in Documentation/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/user/simultaneous.itely -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -#. @node in Documentation/es/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/es/user/simultaneous.itely -#. @node in Documentation/de/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/de/user/simultaneous.itely -msgid "Writing music in parallel" -msgstr "" - -#. Documentation/user/staff.itely:1045 (variable) -#. Documentation/user/staff.itely:1060 (variable) -#. Documentation/user/staff.itely:1213 (variable) -msgid "flute" -msgstr "" - -#. Documentation/user/staff.itely:1164 (variable) -#. Documentation/user/staff.itely:1185 (variable) -msgid "oboe" -msgstr "" - -#. Documentation/user/staff.itely:1234 (variable) -#. Documentation/user/staff.itely:1250 (context id) -msgid "piccolo" -msgstr "" - -#. Documentation/user/staff.itely:1242 (variable) -#. Documentation/user/staff.itely:1251 (context id) -msgid "cbassoon" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @section in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @section in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @section in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @section in Documentation/de/user/staff.itely -msgid "Staff notation" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Displaying staves" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Instantiating new staves" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staff" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "staves" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Grouping staves" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "bracket" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "grand staff" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Nested staff groups" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Modifying single staves" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Staff symbol" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "line" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "ledger line" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Ossia staves" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "Frenched staff" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Hiding staves" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @subsection in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @subsection in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @subsection in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @subsection in Documentation/de/user/staff.itely -msgid "Writing parts" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Metronome marks" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronomic indication" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "tempo indication" -msgstr "" - -#. @rglos in Documentation/user/staff.itely -#. @rglos in Documentation/es/user/staff.itely -#. @rglos in Documentation/de/user/staff.itely -msgid "metronome mark" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Instrument names" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Quoting other voices" -msgstr "" - -#. @node in Documentation/user/staff.itely -#. @unnumberedsubsubsec in Documentation/user/staff.itely -#. @node in Documentation/fr/user/staff.itely -#. @unnumberedsubsubsec in Documentation/fr/user/staff.itely -#. @node in Documentation/es/user/staff.itely -#. @unnumberedsubsubsec in Documentation/es/user/staff.itely -#. @node in Documentation/de/user/staff.itely -#. @unnumberedsubsubsec in Documentation/de/user/staff.itely -msgid "Formatting cue notes" -msgstr "" - -#. Documentation/user/editorial.itely:326 (comment) -msgid "this is deliberate nonsense; note that the stems remain black" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @section in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @section in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @section in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @section in Documentation/de/user/editorial.itely -msgid "Editorial annotations" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Inside the staff" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Selecting notation font size" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Fingering instructions" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Hidden notes" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Coloring objects" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Parentheses" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Stems" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @subsection in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @subsection in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @subsection in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @subsection in Documentation/de/user/editorial.itely -msgid "Outside the staff" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Balloon help" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Grid lines" -msgstr "" - -#. @node in Documentation/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/user/editorial.itely -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -#. @node in Documentation/es/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/es/user/editorial.itely -#. @node in Documentation/de/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/de/user/editorial.itely -msgid "Analysis brackets" -msgstr "" - -#. Documentation/user/text.itely:421 (variable) -msgid "allegro" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @section in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @section in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @section in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @section in Documentation/de/user/text.itely -msgid "Text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Writing text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text scripts" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text spanners" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text marks" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Separate text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Formatting text" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text markup introduction" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Selecting font and font size" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Text alignment" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Graphic notation inside markup" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Music notation inside markup" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Multi-page markup" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @subsection in Documentation/user/text.itely -#. @node in Documentation/fr/user/text.itely -#. @subsection in Documentation/fr/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @subsection in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @subsection in Documentation/de/user/text.itely -msgid "Fonts" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Fonts explained" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Single entry fonts" -msgstr "" - -#. @node in Documentation/user/text.itely -#. @unnumberedsubsubsec in Documentation/user/text.itely -#. @node in Documentation/es/user/text.itely -#. @unnumberedsubsubsec in Documentation/es/user/text.itely -#. @node in Documentation/de/user/text.itely -#. @unnumberedsubsubsec in Documentation/de/user/text.itely -msgid "Entire document fonts" -msgstr "" - -#. @node in Documentation/user/specialist.itely -#. @chapter in Documentation/user/specialist.itely -#. @node in Documentation/fr/user/specialist.itely -#. @chapter in Documentation/fr/user/specialist.itely -#. @node in Documentation/es/user/specialist.itely -#. @chapter in Documentation/es/user/specialist.itely -#. @node in Documentation/de/user/specialist.itely -#. @chapter in Documentation/de/user/specialist.itely -msgid "Specialist notation" -msgstr "" - -#. Documentation/user/vocal.itely:512 (comment) -msgid "not recommended: left aligns syllables" -msgstr "" - -#. Documentation/user/vocal.itely:515 (comment) -msgid "wrong: durations needed" -msgstr "" - -#. Documentation/user/vocal.itely:518 (comment) -msgid "correct" -msgstr "" - -#. Documentation/user/vocal.itely:667 (context id) -msgid "lala" -msgstr "" - -#. Documentation/user/vocal.itely:808 (context id) -msgid "splitpart" -msgstr "" - -#. Documentation/user/vocal.itely:853 (variable) -msgid "voice" -msgstr "" - -#. Documentation/user/vocal.itely:860 (variable) -#. input/lsr/formatting-lyrics-syllables.ly:22 (variable) -msgid "lyr" -msgstr "" - -#. Documentation/user/vocal.itely:1059 (context id) -msgid "tune" -msgstr "" - -#. Documentation/user/vocal.itely:1101 (context id) -msgid "lahlah" -msgstr "" - -#. Documentation/user/vocal.itely:1284 (comment) -msgid "moves the column off the left margin;" -msgstr "" - -#. Documentation/user/vocal.itely:1285 (comment) -msgid "can be removed if space on the page is tight" -msgstr "" - -#. Documentation/user/vocal.itely:1293 (comment) -#. Documentation/user/vocal.itely:1311 (comment) -msgid "adds vertical spacing between verses" -msgstr "" - -#. Documentation/user/vocal.itely:1301 (comment) -msgid "adds horizontal spacing between columns;" -msgstr "" - -#. Documentation/user/vocal.itely:1302 (comment) -msgid "if they are still too close, add more \\\" \\\" pairs" -msgstr "" - -#. Documentation/user/vocal.itely:1303 (comment) -msgid "until the result looks good" -msgstr "" - -#. Documentation/user/vocal.itely:1319 (comment) -msgid "gives some extra space on the right margin;" -msgstr "" - -#. Documentation/user/vocal.itely:1320 (comment) -msgid "can be removed if page space is tight" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @section in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @section in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @section in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @section in Documentation/de/user/vocal.itely -msgid "Vocal music" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Common notation for vocal music" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "References for vocal music and lyrics" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Opera" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Song books" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spoken music" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Chants" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Ancient vocal music" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Entering lyrics" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics explained" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Working with lyrics and variables" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Automatic syllable durations" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Manual syllable durations" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple syllables to one note" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Multiple notes to one syllable" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Skipping notes" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Extenders and hyphens" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics and repeats" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Specific uses of lyrics" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Divisi lyrics" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Lyrics independent of notes" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Spacing out syllables" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Centering lyrics between staves" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @subsection in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @subsection in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @subsection in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @subsection in Documentation/de/user/vocal.itely -msgid "Stanzas" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding stanza numbers" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding dynamics marks to stanzas" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Adding singers' names to stanzas" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Stanzas with different rhythms" -msgstr "" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -msgid "Ignoring melismata" -msgstr "" - -#. @subsubheading in Documentation/user/vocal.itely -#. @subsubheading in Documentation/es/user/vocal.itely -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Switching to an alternative melody" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end" -msgstr "" - -#. @node in Documentation/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/user/vocal.itely -#. @node in Documentation/fr/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/fr/user/vocal.itely -#. @node in Documentation/es/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/es/user/vocal.itely -#. @node in Documentation/de/user/vocal.itely -#. @unnumberedsubsubsec in Documentation/de/user/vocal.itely -msgid "Printing stanzas at the end in multiple columns" -msgstr "" - -#. Documentation/user/keyboards.itely:187 (comment) -msgid "keep staff alive" -msgstr "" - -#. Documentation/user/keyboards.itely:275 (context id) -msgid "melOne" -msgstr "" - -#. Documentation/user/keyboards.itely:344 (context id) -#. Documentation/user/fretted-strings.itely:244 (context id) -#. input/lsr/adding-fingerings-to-tablatures.ly:17 (variable) -#. input/lsr/jazz-combo-template.ly:205 (context id) -#. input/lsr/jazz-combo-template.ly:214 (context id) -msgid "two" -msgstr "" - -#. Documentation/user/keyboards.itely:398 (comment) -msgid "stems may overlap the other staff" -msgstr "" - -#. Documentation/user/keyboards.itely:400 (comment) -msgid "extend the stems to reach other other staff" -msgstr "" - -#. Documentation/user/keyboards.itely:402 (comment) -msgid "do not print extra flags" -msgstr "" - -#. Documentation/user/keyboards.itely:404 (comment) -msgid "prevent beaming as needed" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @section in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @section in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @section in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @section in Documentation/de/user/keyboards.itely -msgid "Keyboard and other multi-staff instruments" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Common notation for keyboards" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for keyboards" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff manually" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Changing staff automatically" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Staff-change lines" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Cross-staff stems" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Piano" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Piano pedals" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Accordion" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Discant symbols" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @subsection in Documentation/user/keyboards.itely -#. @node in Documentation/fr/user/keyboards.itely -#. @subsection in Documentation/fr/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @subsection in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @subsection in Documentation/de/user/keyboards.itely -msgid "Harp" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "References for harps" -msgstr "" - -#. @node in Documentation/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/user/keyboards.itely -#. @node in Documentation/es/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/es/user/keyboards.itely -#. @node in Documentation/de/user/keyboards.itely -#. @unnumberedsubsubsec in Documentation/de/user/keyboards.itely -msgid "Harp pedals" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @section in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @section in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @section in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @section in Documentation/de/user/unfretted-strings.itely -msgid "Unfretted string instruments" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @subsection in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @subsection in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @subsection in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @subsection in Documentation/de/user/unfretted-strings.itely -msgid "Common notation for unfretted strings" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "References for unfretted strings" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Bowing indications" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Harmonics" -msgstr "" - -#. @rglos in Documentation/user/unfretted-strings.itely -#. @rglos in Documentation/es/user/unfretted-strings.itely -#. @rglos in Documentation/de/user/unfretted-strings.itely -msgid "harmonics" -msgstr "" - -#. @node in Documentation/user/unfretted-strings.itely -#. @node in Documentation/es/user/unfretted-strings.itely -#. @node in Documentation/de/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/unfretted-strings.itely -msgid "Snap (Bartok) pizzicato" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/unfretted-strings.itely -#. @node in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/unfretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/unfretted-strings.itely -msgid "Snap (Bartók) pizzicato" -msgstr "" - -#. Documentation/user/fretted-strings.itely:240 (variable) -msgid "melodia" -msgstr "" - -#. Documentation/user/fretted-strings.itely:245 (context id) -msgid "shared" -msgstr "" - -#. Documentation/user/fretted-strings.itely:246 (context id) -msgid "solo" -msgstr "" - -#. Documentation/user/fretted-strings.itely:323 (variable) -msgid "mynotes" -msgstr "" - -#. Documentation/user/fretted-strings.itely:450 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:27 (comment) -msgid "A chord for ukelele" -msgstr "" - -#. Documentation/user/fretted-strings.itely:782 (variable) -#. Documentation/user/fretted-strings.itely:805 (variable) -#. Documentation/user/fretted-strings.itely:834 (variable) -#. Documentation/user/fretted-strings.itely:865 (variable) -#. Documentation/user/fretted-strings.itely:889 (variable) -#. Documentation/user/fretted-strings.itely:937 (variable) -msgid "mychords" -msgstr "" - -#. Documentation/user/fretted-strings.itely:809 (variable) -msgid "mychordlist" -msgstr "" - -#. Documentation/user/fretted-strings.itely:924 (comment) -msgid "add a new chord shape" -msgstr "" - -#. Documentation/user/fretted-strings.itely:928 (comment) -msgid "add some new chords based on the power chord shape" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @section in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @section in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @section in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @section in Documentation/de/user/fretted-strings.itely -msgid "Fretted string instruments" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Common notation for fretted strings" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "References for fretted strings" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "String number indications" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Default tablatures" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Custom tablatures" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Fret diagram markups" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Predefined fret diagrams" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Automatic fret diagrams" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Right-hand fingerings" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Guitar" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating position and barring" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Indicating harmonics and dampened notes" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @subsection in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @subsection in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @subsection in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @subsection in Documentation/de/user/fretted-strings.itely -msgid "Banjo" -msgstr "" - -#. @node in Documentation/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/user/fretted-strings.itely -#. @node in Documentation/fr/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/fr/user/fretted-strings.itely -#. @node in Documentation/es/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/es/user/fretted-strings.itely -#. @node in Documentation/de/user/fretted-strings.itely -#. @unnumberedsubsubsec in Documentation/de/user/fretted-strings.itely -msgid "Banjo tablatures" -msgstr "" - -#. Documentation/user/percussion.itely:385 (comment) -msgid "These lines define the position of the woodblocks in the stave;" -msgstr "" - -#. Documentation/user/percussion.itely:386 (comment) -msgid "if you like, you can change it or you can use special note heads" -msgstr "" - -#. Documentation/user/percussion.itely:387 (comment) -msgid "for the woodblocks." -msgstr "" - -#. Documentation/user/percussion.itely:391 (variable) -msgid "woodstaff" -msgstr "" - -#. Documentation/user/percussion.itely:392 (comment) -msgid "This defines a staff with only two lines." -msgstr "" - -#. Documentation/user/percussion.itely:393 (comment) -msgid "It also defines the positions of the two lines." -msgstr "" - -#. Documentation/user/percussion.itely:396 (comment) -msgid "This is neccessary; if not entered, the barline would be too short!" -msgstr "" - -#. Documentation/user/percussion.itely:403 (comment) -msgid "with this you load your new drum style table" -msgstr "" - -#. Documentation/user/percussion.itely:425 (variable) -msgid "tambustaff" -msgstr "" - -#. Documentation/user/percussion.itely:439 (comment) -msgid "the trick with the scaled duration and the shorter rest" -msgstr "" - -#. Documentation/user/percussion.itely:440 (comment) -msgid "is neccessary for the correct ending of the trill-span!" -msgstr "" - -#. Documentation/user/percussion.itely:451 (variable) -msgid "tamtamstaff" -msgstr "" - -#. Documentation/user/percussion.itely:473 (variable) -msgid "bellstaff" -msgstr "" - -#. Documentation/user/percussion.itely:504 (variable) -msgid "drumsA" -msgstr "" - -#. Documentation/user/percussion.itely:519 (variable) -msgid "drumsB" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @section in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @section in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @section in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @section in Documentation/de/user/percussion.itely -msgid "Percussion" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @subsection in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @subsection in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @subsection in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @subsection in Documentation/de/user/percussion.itely -msgid "Common notation for percussion" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "References for percussion" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Basic percussion notation" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Drum rolls" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Pitched percussion" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Percussion staves" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Custom percussion staves" -msgstr "" - -#. @node in Documentation/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/user/percussion.itely -#. @node in Documentation/fr/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/fr/user/percussion.itely -#. @node in Documentation/es/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/es/user/percussion.itely -#. @node in Documentation/de/user/percussion.itely -#. @unnumberedsubsubsec in Documentation/de/user/percussion.itely -msgid "Ghost notes" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @section in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @section in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @section in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @section in Documentation/de/user/wind.itely -msgid "Wind instruments" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Common notation for wind instruments" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "References for wind instruments" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @subsection in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @subsection in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @subsection in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @subsection in Documentation/de/user/wind.itely -msgid "Bagpipes" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe definitions" -msgstr "" - -#. @node in Documentation/user/wind.itely -#. @unnumberedsubsubsec in Documentation/user/wind.itely -#. @node in Documentation/fr/user/wind.itely -#. @unnumberedsubsubsec in Documentation/fr/user/wind.itely -#. @node in Documentation/es/user/wind.itely -#. @unnumberedsubsubsec in Documentation/es/user/wind.itely -#. @node in Documentation/de/user/wind.itely -#. @unnumberedsubsubsec in Documentation/de/user/wind.itely -msgid "Bagpipe example" -msgstr "" - -#. Documentation/user/chords.itely:669 (variable) -msgid "myChords" -msgstr "" - -#. Documentation/user/chords.itely:999 (comment) -#. Documentation/user/chords.itely:1020 (comment) -msgid "Put notes on same Staff as figures" -msgstr "" - -#. Documentation/user/chords.itely:1083 (comment) -msgid "The extenders are correct here, with the same rhythm as the bass" -msgstr "" - -#. Documentation/user/chords.itely:1095 (comment) -msgid "The extenders are incorrect here, even though the timing is the same" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @section in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @section in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @section in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @section in Documentation/de/user/chords.itely -msgid "Chord notation" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Chord mode" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Chord mode overview" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Common chords" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Extended and altered chords" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Displaying chords" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Printing chord names" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Customizing chord names" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @subsection in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @subsection in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @subsection in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @subsection in Documentation/de/user/chords.itely -msgid "Figured bass" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Introduction to figured bass" -msgstr "" - -#. @rglos in Documentation/user/chords.itely -#. @rglos in Documentation/es/user/chords.itely -#. @rglos in Documentation/de/user/chords.itely -msgid "figured bass" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Entering figured bass" -msgstr "" - -#. @node in Documentation/user/chords.itely -#. @unnumberedsubsubsec in Documentation/user/chords.itely -#. @node in Documentation/fr/user/chords.itely -#. @unnumberedsubsubsec in Documentation/fr/user/chords.itely -#. @node in Documentation/es/user/chords.itely -#. @unnumberedsubsubsec in Documentation/es/user/chords.itely -#. @node in Documentation/de/user/chords.itely -#. @unnumberedsubsubsec in Documentation/de/user/chords.itely -msgid "Displaying figured bass" -msgstr "" - -#. Documentation/user/ancient.itely:357 (context id) -msgid "discantus" -msgstr "" - -#. Documentation/user/ancient.itely:823 (variable) -msgid "ficta" -msgstr "" - -#. Documentation/user/ancient.itely:976 (context id) -msgid "cantus" -msgstr "" - -#. Documentation/user/ancient.itely:2399 (variable) -#. Documentation/user/ancient.itely:2434 (variable) -#. Documentation/user/ancient.itely:2502 (context id) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:37 (variable) -msgid "chant" -msgstr "" - -#. Documentation/user/ancient.itely:2405 (variable) -#. Documentation/user/ancient.itely:2445 (variable) -#. input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly:44 (variable) -msgid "verba" -msgstr "" - -#. Documentation/user/ancient.itely:2487 (variable) -msgid "spiritus" -msgstr "" - -#. Documentation/user/ancient.itely:2495 (variable) -msgid "spirLyr" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @section in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @section in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @section in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @section in Documentation/de/user/ancient.itely -msgid "Ancient notation" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Overview of the supported styles" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Ancient notation---common features" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Pre-defined contexts" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ligatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Custodes" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Figured bass support" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Typesetting mensural music" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensural contexts" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural clefs" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural time signatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural note heads" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural flags" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural rests" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Mensural accidentals and key signatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -msgid "Annotational accidentals (musica ficta)" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Annotational accidentals (@emph{musica ficta})" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "White mensural ligatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Typesetting Gregorian chant" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian chant contexts" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian clefs" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian accidentals and key signatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Divisiones" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian articulation signs" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Augmentum dots (@emph{morae})" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -msgid "Gregorian square neume ligatures" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @subsection in Documentation/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @subsection in Documentation/es/user/ancient.itely -msgid "Working with ancient music---scenarios and solutions" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Incipits" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Mensurstriche layout" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Transcribing Gregorian chant" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient and modern from one source" -msgstr "" - -#. @node in Documentation/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/user/ancient.itely -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/es/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/es/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Editorial markings" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @section in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @section in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @section in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @section in Documentation/de/user/world.itely -msgid "World music" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @subsection in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @subsection in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @subsection in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @subsection in Documentation/de/user/world.itely -msgid "Arabic music" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "References for Arabic music" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic note names" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic key signatures" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic time signatures" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Arabic music example" -msgstr "" - -#. @node in Documentation/user/world.itely -#. @unnumberedsubsubsec in Documentation/user/world.itely -#. @node in Documentation/fr/user/world.itely -#. @unnumberedsubsubsec in Documentation/fr/user/world.itely -#. @node in Documentation/es/user/world.itely -#. @unnumberedsubsubsec in Documentation/es/user/world.itely -#. @node in Documentation/de/user/world.itely -#. @unnumberedsubsubsec in Documentation/de/user/world.itely -msgid "Further reading" -msgstr "" - -#. Documentation/user/input.itely:525 (comment) -msgid "not printed" -msgstr "" - -#. Documentation/user/input.itely:947 (variable) -msgid "allLyrics" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @chapter in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @chapter in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @chapter in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @chapter in Documentation/de/user/input.itely -msgid "General input and output" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Input structure" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Structure of a score" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Multiple scores in a book" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "File structure" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Titles and headers" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Creating titles" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Custom titles" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Reference to page numbers" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Table of contents" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Working with input files" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Including LilyPond files" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Different editions from one source" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Using variables" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Using tags" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Text encoding" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Displaying LilyPond notation" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "Controlling output" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Extracting fragments of music" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Skipping corrected music" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @section in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @section in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @section in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @section in Documentation/de/user/input.itely -msgid "MIDI output" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Creating MIDI files" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "MIDI block" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "What goes into the MIDI output?" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Supported in MIDI" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Unsupported in MIDI" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Repeats in MIDI" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/fr/user/input.itely -#. @subsection in Documentation/fr/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Controlling MIDI dynamics" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Dynamic marks" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Overall MIDI volume" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Equalizing different instruments (i)" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/input.itely -#. @unnumberedsubsubsec in Documentation/fr/user/input.itely -#. @unnumberedsubsubsec in Documentation/es/user/input.itely -#. @unnumberedsubsubsec in Documentation/de/user/input.itely -msgid "Equalizing different instruments (ii)" -msgstr "" - -#. @node in Documentation/user/input.itely -#. @subsection in Documentation/user/input.itely -#. @node in Documentation/es/user/input.itely -#. @subsection in Documentation/es/user/input.itely -#. @node in Documentation/de/user/input.itely -#. @subsection in Documentation/de/user/input.itely -msgid "Percussion in MIDI" -msgstr "" - -#. Documentation/user/spacing.itely:864 (comment) -msgid "this does nothing" -msgstr "" - -#. Documentation/user/spacing.itely:865 (comment) -msgid "a break here would work" -msgstr "" - -#. Documentation/user/spacing.itely:866 (comment) -msgid "as does this break" -msgstr "" - -#. Documentation/user/spacing.itely:878 (comment) -msgid "now the break is allowed" -msgstr "" - -#. Documentation/user/spacing.itely:1757 (comment) -msgid "this time the text will be closer to the staff" -msgstr "" - -#. Documentation/user/spacing.itely:1759 (comment) -msgid "by setting outside-staff-priority to a non-number," -msgstr "" - -#. Documentation/user/spacing.itely:1760 (comment) -msgid "we disable the automatic collision avoidance" -msgstr "" - -#. Documentation/user/spacing.itely:1763 (comment) -msgid "now they will collide" -msgstr "" - -#. Documentation/user/spacing.itely:1789 (comment) -msgid "the markup is too close to the following note" -msgstr "" - -#. Documentation/user/spacing.itely:1793 (comment) -msgid "setting outside-staff-horizontal-padding fixes this" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @chapter in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @chapter in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @chapter in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @chapter in Documentation/de/user/spacing.itely -msgid "Spacing issues" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Paper and pages" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Paper size" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Page formatting" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Vertical dimensions" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Horizontal dimensions" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @unnumberedsubsubsec in Documentation/de/user/spacing.itely -msgid "Other layout variables" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Music layout" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Setting the staff size" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Score layout" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Breaks" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Line breaking" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Page breaking" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Optimal page breaking" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Optimal page turning" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Minimal page breaking" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Explicit breaks" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Using an extra voice for breaks" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Vertical spacing" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing inside a system" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical spacing between systems" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Explicit staff and system positioning" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Two-pass vertical spacing" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Vertical collision avoidance" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -msgid "Horizontal spacing" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Horizontal spacing overview" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "New spacing area" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Changing horizontal spacing" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Line length" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Proportional notation" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @section in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @section in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @section in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Fitting music onto fewer pages" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Displaying spacing" -msgstr "" - -#. @node in Documentation/user/spacing.itely -#. @subsection in Documentation/user/spacing.itely -#. @node in Documentation/fr/user/spacing.itely -#. @subsection in Documentation/fr/user/spacing.itely -#. @node in Documentation/es/user/spacing.itely -#. @subsection in Documentation/es/user/spacing.itely -#. @node in Documentation/de/user/spacing.itely -#. @subsection in Documentation/de/user/spacing.itely -msgid "Changing spacing" -msgstr "" - -#. Documentation/user/changing-defaults.itely:1990 (comment) -msgid "increase the length of the tie" -msgstr "" - -#. Documentation/user/changing-defaults.itely:1999 (comment) -msgid "increase the length of the rest bar" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2007 (comment) -msgid "increase the length of the hairpin" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2035 (comment) -msgid "default" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2038 (comment) -#. Documentation/user/changing-defaults.itely:2051 (comment) -msgid "not effective alone" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2042 (comment) -#. Documentation/user/changing-defaults.itely:2055 (comment) -msgid "effective only when both overrides are present" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2430 (comment) -msgid "Remove bar line at the end of the current line" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2476 (comment) -msgid "Try to remove all key signatures" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2896 (comment) -msgid "move horizontally left" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2898 (comment) -msgid "move vertically up" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2899 (comment) -msgid "third finger" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2948 (comment) -#. Documentation/user/changing-defaults.itely:2980 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:39 (comment) -msgid "the RehearsalMark will be centered above the Clef" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2954 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:46 (comment) -msgid "the RehearsalMark will be centered above the TimeSignature" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2974 (comment) -msgid "the RehearsalMark will be centered above the Key Signature" -msgstr "" - -#. Documentation/user/changing-defaults.itely:2994 (comment) -msgid "The RehearsalMark will be centered above the KeySignature" -msgstr "" - -#. Documentation/user/changing-defaults.itely:3001 (comment) -#. Documentation/user/changing-defaults.itely:3017 (comment) -#. Documentation/user/changing-defaults.itely:3024 (comment) -msgid "" -"The RehearsalMark will be aligned with the left edge of the KeySignature" -msgstr "" - -#. Documentation/user/changing-defaults.itely:3006 (comment) -msgid "" -"The RehearsalMark will be aligned with the right edge of the KeySignature" -msgstr "" - -#. Documentation/user/changing-defaults.itely:3018 (comment) -msgid "and then shifted right by 3.5 staff-spaces" -msgstr "" - -#. Documentation/user/changing-defaults.itely:3025 (comment) -msgid "and then shifted left by 2 staff-spaces" -msgstr "" - -#. Documentation/user/changing-defaults.itely:3073 (variable) -msgid "XinO" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @chapter in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @chapter in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @chapter in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @chapter in Documentation/de/user/changing-defaults.itely -msgid "Changing defaults" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Interpretation contexts" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Score - the master of all contexts" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Top-level contexts - staff containers" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Intermediate-level contexts - staves" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Bottom-level contexts - voices" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Modifying context plug-ins" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Changing context default settings" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Defining new contexts" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Aligning contexts" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Explaining the Internals Reference" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Navigating the program reference" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Layout interfaces" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Determining the grob property" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Naming conventions" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Modifying properties" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Overview of modifying properties" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "The set command" -msgstr "" - -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\set} command" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "The override command" -msgstr "" - -#. @subsection in Documentation/user/changing-defaults.itely -#. @section in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\override} command" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "The tweak command" -msgstr "" - -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "The @code{\\tweak} command" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -msgid "set versus override" -msgstr "" - -#. @subsection in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "@code{\\set} vs. @code{\\override}" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Useful concepts and properties" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Input modes" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Direction and placement" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Distances and measurements" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Staff symbol properties" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Spanners" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{spanner-interface}" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{line-spanner-interface}" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Visibility of objects" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Removing the stencil" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Making objects transparent" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Painting objects white" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using break-visibility" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Special considerations" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Line styles" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Rotating objects" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Rotating layout objects" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Rotating markup" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @section in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @section in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @section in Documentation/de/user/changing-defaults.itely -msgid "Advanced tweaks" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Aligning objects" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Setting @code{X-offset} and @code{Y-offset} directly" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{side-position-interface}" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{self-alignment-interface}" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{aligned-on-parent} procedures" -msgstr "" - -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{centered-on-parent} procedures" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -msgid "Using the @code{break-alignable-interface}" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Vertical grouping of grobs" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Modifying stencils" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @subsection in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @subsection in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @subsection in Documentation/de/user/changing-defaults.itely -msgid "Modifying shapes" -msgstr "" - -#. @node in Documentation/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/user/changing-defaults.itely -#. @node in Documentation/es/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/es/user/changing-defaults.itely -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Modifying ties and slurs" -msgstr "" - -#. Documentation/user/programming-interface.itely:118 (variable) -msgid "custosNote" -msgstr "" - -#. Documentation/user/programming-interface.itely:178 (variable) -msgid "manualBeam" -msgstr "" - -#. Documentation/user/programming-interface.itely:198 (variable) -msgid "AltOn" -msgstr "" - -#. Documentation/user/programming-interface.itely:203 (variable) -msgid "AltOff" -msgstr "" - -#. Documentation/user/programming-interface.itely:216 (variable) -msgid "withAlt" -msgstr "" - -#. Documentation/user/programming-interface.itely:350 (variable) -msgid "traLaLa" -msgstr "" - -#. Documentation/user/programming-interface.itely:352 (comment) -msgid "dummy action to deal with parser lookahead" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @chapter in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @chapter in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @chapter in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @chapter in Documentation/de/user/programming-interface.itely -msgid "Interfaces for programmers" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Music functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of music functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Simple substitution functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Paired substitution functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Mathematics in functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Void functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Functions without arguments" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Overview of available music functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Programmer interfaces" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Input variables and Scheme" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Internal music representation" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Building complicated functions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Displaying music expressions" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Music properties" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Doubling a note with slurs (example)" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Adding articulation to notes (example)" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Markup programmer interface" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Markup construction in Scheme" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "How markups work internally" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup command definition" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "New markup list command definition" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Contexts for programmers" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Context evaluation" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @subsection in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @subsection in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @subsection in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @subsection in Documentation/de/user/programming-interface.itely -msgid "Running a function on all layout objects" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/programming-interface.itely -#. @section in Documentation/fr/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Scheme procedures as properties" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of \\tweak" -msgstr "" - -#. @section in Documentation/user/programming-interface.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Using Scheme code instead of @code{\\tweak}" -msgstr "" - -#. @node in Documentation/user/programming-interface.itely -#. @section in Documentation/user/programming-interface.itely -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -#. @node in Documentation/es/user/programming-interface.itely -#. @section in Documentation/es/user/programming-interface.itely -#. @node in Documentation/de/user/programming-interface.itely -#. @section in Documentation/de/user/programming-interface.itely -msgid "Difficult tweaks" -msgstr "" - -#. @node in Documentation/user/literature.itely -#. @appendix in Documentation/user/literature.itely -#. @node in Documentation/fr/user/literature.itely -#. @appendix in Documentation/fr/user/literature.itely -#. @node in Documentation/es/user/literature.itely -#. @appendix in Documentation/es/user/literature.itely -#. @node in Documentation/de/user/literature.itely -#. @appendix in Documentation/de/user/literature.itely -msgid "Literature list" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendix in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendix in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendix in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendix in Documentation/de/user/notation-appendices.itely -msgid "Notation manual tables" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Chord name chart" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Common chord modifiers" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Predefined fretboard diagrams" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "MIDI instruments" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of colors" -msgstr "" - -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Normal colors" -msgstr "" - -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "X color names" -msgstr "" - -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color Names without a numerical suffix:" -msgstr "" - -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Color names with a numerical suffix" -msgstr "" - -#. @subsubheading in Documentation/user/notation-appendices.itely -#. @subsubheading in Documentation/fr/user/notation-appendices.itely -#. @subsubheading in Documentation/es/user/notation-appendices.itely -#. @subsubheading in Documentation/de/user/notation-appendices.itely -msgid "Grey Scale" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "The Feta font" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Note head styles" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "List of articulations" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Percussion notes" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "All context properties" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Layout properties" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Identifiers" -msgstr "" - -#. @node in Documentation/user/notation-appendices.itely -#. @appendixsec in Documentation/user/notation-appendices.itely -#. @node in Documentation/fr/user/notation-appendices.itely -#. @appendixsec in Documentation/fr/user/notation-appendices.itely -#. @node in Documentation/es/user/notation-appendices.itely -#. @appendixsec in Documentation/es/user/notation-appendices.itely -#. @node in Documentation/de/user/notation-appendices.itely -#. @appendixsec in Documentation/de/user/notation-appendices.itely -msgid "Scheme functions" -msgstr "" - -#. @node in Documentation/user/cheatsheet.itely -#. @appendix in Documentation/user/cheatsheet.itely -#. @node in Documentation/fr/user/cheatsheet.itely -#. @appendix in Documentation/fr/user/cheatsheet.itely -#. @node in Documentation/es/user/cheatsheet.itely -#. @appendix in Documentation/es/user/cheatsheet.itely -#. @node in Documentation/de/user/cheatsheet.itely -#. @appendix in Documentation/de/user/cheatsheet.itely -msgid "Cheat sheet" -msgstr "" - -#. @top in Documentation/fr/user/lilypond-learning.tely -msgid "GNU LilyPond --- Manuel d'initiation" -msgstr "" - -#. @subsubheading in Documentation/fr/user/macros.itexi -#. @subsubheading in Documentation/de/user/macros.itexi -msgid "Commonly tweaked properties" -msgstr "" - -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Hauteurs" -msgstr "" - -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Durées et rythme" -msgstr "" - -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Silences" -msgstr "" - -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Métrique" -msgstr "" - -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Tout ensemble" -msgstr "" - -#. @subheading in Documentation/fr/user/tutorial.itely -msgid "Exemples cliquables" -msgstr "" - -#. @node in Documentation/fr/user/tweaks.itely -#. @subsection in Documentation/fr/user/tweaks.itely -msgid "Outside staff objects" -msgstr "" - -#. @node in Documentation/fr/user/working.itely -#. @subsection in Documentation/fr/user/working.itely -#. @node in Documentation/es/user/working.itely -#. @subsection in Documentation/es/user/working.itely -#. @node in Documentation/de/user/working.itely -#. @subsection in Documentation/de/user/working.itely -msgid "Updating old files" -msgstr "" - -#. @top in Documentation/fr/user/lilypond-program.tely -msgid "GNU LilyPond --- Utilisation des programmes" -msgstr "" - -#. @section in Documentation/fr/user/running.itely -msgid "Updating with @command{convert-ly}" -msgstr "" - -#. @top in Documentation/fr/user/lilypond.tely -msgid "GNU LilyPond --- Manuel de notation" -msgstr "" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat types" -msgstr "" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Repeat syntax" -msgstr "" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Manual repeat commands" -msgstr "" - -#. @node in Documentation/fr/user/repeats.itely -#. @subsection in Documentation/fr/user/repeats.itely -msgid "Other repeats" -msgstr "" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Tremolo subdivisions" -msgstr "" - -#. @node in Documentation/fr/user/repeats.itely -#. @unnumberedsubsubsec in Documentation/fr/user/repeats.itely -msgid "Measure repeats" -msgstr "" - -#. @node in Documentation/fr/user/simultaneous.itely -#. @unnumberedsubsubsec in Documentation/fr/user/simultaneous.itely -msgid "Basic polyphony" -msgstr "" - -#. @node in Documentation/fr/user/editorial.itely -#. @unnumberedsubsubsec in Documentation/fr/user/editorial.itely -msgid "Blank music sheet" -msgstr "" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Text and line spanners" -msgstr "" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Nested scores" -msgstr "" - -#. @node in Documentation/fr/user/text.itely -#. @unnumberedsubsubsec in Documentation/fr/user/text.itely -msgid "Page wrapping text" -msgstr "" - -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Mélismes dans certaines strophes seulement" -msgstr "" - -#. @subsubheading in Documentation/fr/user/vocal.itely -msgid "Basculer vers une mélodie alternative" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Introduction to ancient notation" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient notation supported" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Alternative note signs" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient note heads" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient accidentals" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient rests" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient clefs" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient flags" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient time signatures" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Additional note signs" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Ancient articulations" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Gregorian square neumes ligatures" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @subsection in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @subsection in Documentation/de/user/ancient.itely -msgid "Transcribing ancient music" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Annotational accidentals" -msgstr "" - -#. @node in Documentation/fr/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/fr/user/ancient.itely -#. @node in Documentation/de/user/ancient.itely -#. @unnumberedsubsubsec in Documentation/de/user/ancient.itely -msgid "Baroque rhythmic notation" -msgstr "" - -#. @section in Documentation/fr/user/spacing.itely -#. @section in Documentation/de/user/spacing.itely -msgid "Horizontal Spacing" -msgstr "" - -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Layout tunings within contexts" -msgstr "" - -#. @node in Documentation/fr/user/changing-defaults.itely -#. @subsection in Documentation/fr/user/changing-defaults.itely -msgid "Constructing a tweak" -msgstr "" - -#. @node in Documentation/fr/user/changing-defaults.itely -msgid "Using Scheme code instead of tweak" -msgstr "" - -#. @top in Documentation/es/user/lilypond-learning.tely -msgid "GNU LilyPond: Manual de aprendizaje" -msgstr "" - -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Instrucciones predefinidas" -msgstr "" - -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Fragmentos de código seleccionados" -msgstr "" - -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Propiedades trucadas frecuentemente" -msgstr "" - -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Véase también" -msgstr "" - -#. @subsubheading in Documentation/es/user/macros.itexi -msgid "Advertencias y problemas conocidos" -msgstr "" - -#. @node in Documentation/es/user/tweaks.itely -#. @subsection in Documentation/es/user/tweaks.itely -msgid "Automatic behaviour" -msgstr "" - -#. @node in Documentation/es/user/working.itely -#. @section in Documentation/es/user/working.itely -msgid "Suggestions for writing LilyPond files" -msgstr "" - -#. @rglos in Documentation/es/user/working.itely -msgid "baritone" -msgstr "" - -#. @top in Documentation/es/user/lilypond-program.tely -msgid "GNU LilyPond: Manual de utilización del programa" -msgstr "" - -#. @top in Documentation/es/user/lilypond.tely -msgid "GNU LilyPond: Manual de referencia de la notación" -msgstr "" - -#. @chapheading in Documentation/es/user/lilypond.tely -msgid "El tipografiador de música" -msgstr "" - -#. @rglos in Documentation/es/user/pitches.itely -msgid "semitone" -msgstr "" - -#. @top in Documentation/de/user/lilypond-learning.tely -msgid "GNU LilyPond -- Handbuch zum Lernen" -msgstr "" - -#. @node in Documentation/de/user/fundamental.itely -#. @section in Documentation/de/user/fundamental.itely -msgid "How LilyPond files work" -msgstr "" - -#. @node in Documentation/de/user/templates.itely -#. @appendixsec in Documentation/de/user/templates.itely -msgid "Lilypond-book templates" -msgstr "" - -#. @top in Documentation/de/user/lilypond-program.tely -msgid "GNU LilyPond -- Programmbenutzung" -msgstr "" - -#. @chapheading in Documentation/de/user/lilypond.tely -msgid "Das Notensatzprogramm" -msgstr "" - -#. @subsubheading in Documentation/de/user/vocal.itely -msgid "Ignorieren von Melismen" -msgstr "" - -#. @node in Documentation/de/user/changing-defaults.itely -#. @unnumberedsubsubsec in Documentation/de/user/changing-defaults.itely -msgid "Using the @code{break-aligned-interface}" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:34 (variable) -msgid "discant" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:37 (variable) -msgid "dot" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:43 (comment) -msgid "16 voets register" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:44 (variable) -msgid "accBasson" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:50 (comment) -msgid "een korig 8 en 16 voets register" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:51 (variable) -msgid "accBandon" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:59 (variable) -msgid "accVCello" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:69 (comment) -msgid "4-8-16 voets register" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:70 (variable) -msgid "accHarmon" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:80 (variable) -msgid "accTrombon" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:92 (comment) -msgid "eenkorig 4 en 16 voets register" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:93 (variable) -msgid "accOrgan" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:101 (variable) -msgid "accMaster" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:115 (variable) -msgid "accAccord" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:127 (variable) -msgid "accMusette" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:137 (variable) -msgid "accCeleste" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:145 (variable) -msgid "accOboe" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:153 (variable) -msgid "accClarin" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:159 (variable) -msgid "accPiccolo" -msgstr "" - -#. input/lsr/accordion-discant-symbols.ly:165 (variable) -msgid "accViolin" -msgstr "" - -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:39 (variable) -#. input/lsr/jazz-combo-template.ly:231 (variable) -#. input/lsr/jazz-combo-template.ly:279 (context id) -msgid "bass" -msgstr "" - -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:40 (variable) -msgid "continuo" -msgstr "" - -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:51 (context id) -#. input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly:52 (context id) -msgid "bassStaff" -msgstr "" - -#. input/lsr/adding-an-extra-staff-at-a-line-break.ly:52 (comment) -msgid "The next line is not needed in 2.11.x or later:" -msgstr "" - -#. input/lsr/adding-drum-parts.ly:32 (variable) -msgid "drh" -msgstr "" - -#. input/lsr/adding-drum-parts.ly:33 (variable) -msgid "drl" -msgstr "" - -#. input/lsr/adding-drum-parts.ly:34 (variable) -msgid "timb" -msgstr "" - -#. input/lsr/adding-fingerings-to-tablatures.ly:18 (variable) -msgid "threeTwo" -msgstr "" - -#. input/lsr/adding-fingerings-to-tablatures.ly:25 (variable) -msgid "threeFour" -msgstr "" - -#. input/lsr/adding-the-current-date-to-a-score.ly:23 (comment) -msgid "first, define a variable to hold the formatted date:" -msgstr "" - -#. input/lsr/adding-the-current-date-to-a-score.ly:24 (variable) -msgid "date" -msgstr "" - -#. input/lsr/adding-the-current-date-to-a-score.ly:24 (comment) -msgid "d-%m-%Y\\\" (localtime (current-time)))" -msgstr "" - -#. input/lsr/adding-the-current-date-to-a-score.ly:26 (comment) -msgid "use it in the title block:" -msgstr "" - -#. input/lsr/adding-the-current-date-to-a-score.ly:37 (comment) -msgid "and use it in a \\markup block:" -msgstr "" - -#. input/lsr/additional-voices-to-avoid-collisions.ly:27 (variable) -msgid "voiceFive" -msgstr "" - -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:22 (comment) -msgid "Default layout:" -msgstr "" - -#. input/lsr/adjusting-lyrics-vertical-spacing.ly:31 (comment) -msgid "Reducing the minimum space below the staff and above the lyrics:" -msgstr "" - -#. input/lsr/aligning-marks-with-various-notation-objects.ly:54 (comment) -msgid "the RehearsalMark will be centered above the KeySignature" -msgstr "" - -#. input/lsr/aligning-marks-with-various-notation-objects.ly:65 (comment) -#. input/lsr/aligning-marks-with-various-notation-objects.ly:77 (comment) -msgid "" -"the RehearsalMark will be aligned with the left edge of the KeySignature" -msgstr "" - -#. input/lsr/aligning-marks-with-various-notation-objects.ly:71 (comment) -msgid "" -"the RehearsalMark will be aligned with the right edge of the KeySignature" -msgstr "" - -#. input/lsr/aligning-marks-with-various-notation-objects.ly:78 (comment) -msgid "and then shifted right by one unit." -msgstr "" - -#. input/lsr/ancient-fonts.ly:26 (variable) -#. input/lsr/ancient-fonts.ly:26 (context id) -msgid "upperStaff" -msgstr "" - -#. input/lsr/ancient-fonts.ly:38 (comment) -msgid "\\break % 1 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:49 (comment) -msgid "\\break %2 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:61 (comment) -msgid "\\break % 3 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:76 (comment) -msgid "\\break % 4 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:85 (comment) -#. input/lsr/ancient-fonts.ly:147 (comment) -msgid "\\break % 5 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:99 (comment) -#. input/lsr/ancient-fonts.ly:162 (comment) -msgid "\\break % 6 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:108 (comment) -#. input/lsr/ancient-fonts.ly:172 (comment) -msgid "\\break % 7 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:115 (comment) -msgid "\\break % 8 (8*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:118 (comment) -msgid "\\break % 12 (32*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:123 (variable) -#. input/lsr/ancient-fonts.ly:123 (context id) -msgid "lowerStaff" -msgstr "" - -#. input/lsr/ancient-fonts.ly:133 (comment) -msgid "\\break % 2 (16*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:138 (comment) -msgid "\\break % 4 (16*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:177 (comment) -msgid "\\break % 9 (16*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:179 (comment) -msgid "lig" -msgstr "" - -#. input/lsr/ancient-fonts.ly:183 (comment) -msgid "\\break % 11 (16*1)" -msgstr "" - -#. input/lsr/ancient-fonts.ly:194 (comment) -msgid "\\break % 12 (8*1)" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:49 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:115 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:132 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:151 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:166 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:187 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:219 (comment) -#. input/lsr/incipit.ly:19 (variable) -#. input/lsr/incipit.ly:191 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:212 (comment) -msgid "incipit" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:51 (comment) -msgid "tight spacing" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:58 (comment) -msgid "turn off bar lines" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:62 (comment) -msgid "need this extra \\skip such that clef change comes" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:63 (comment) -msgid "after bar line" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:67 (comment) -msgid "CHECK: no effect?" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:68 (comment) -msgid "turn bar lines on again" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:76 (comment) -msgid "FIXME: setting printKeyCancellation back to #t must not" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:77 (comment) -msgid "occur in the first bar after the incipit. Dto. for forceClef." -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) -msgid "Therefore, we need an extra \\skip." -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) -#. input/lsr/incipit.ly:64 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:37 (comment) -msgid "the actual music" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:85 (comment) -#. input/lsr/incipit.ly:67 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:39 (comment) -msgid "let finis bar go through all staves" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) -#. input/lsr/incipit.ly:70 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:42 (comment) -msgid "finis bar" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:92 (variable) -#. input/lsr/incipit.ly:87 (variable) -#. input/lsr/incipit.ly:222 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:47 (variable) -msgid "discantusNotes" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:141 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:169 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:180 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:203 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:73 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:83 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:96 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:103 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:138 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:163 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:187 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:189 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:214 (comment) -msgid "two bars" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:99 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:202 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:139 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:213 (comment) -msgid "eight bars" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:100 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:137 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:172 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:173 (comment) -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:204 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:162 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:188 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:190 (comment) -msgid "one bar" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:114 (variable) -#. input/lsr/incipit.ly:101 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:60 (variable) -msgid "discantusLyrics" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:128 (variable) -#. input/lsr/incipit.ly:124 (variable) -#. input/lsr/incipit.ly:229 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:70 (variable) -msgid "altusNotes" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:136 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:164 (comment) -msgid "seven bars" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:150 (variable) -#. input/lsr/incipit.ly:138 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:82 (variable) -msgid "altusLyrics" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:162 (variable) -#. input/lsr/incipit.ly:162 (variable) -#. input/lsr/incipit.ly:236 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:90 (variable) -msgid "tenorNotes" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:168 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:186 (comment) -msgid "four bars" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (variable) -#. input/lsr/incipit.ly:177 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:102 (variable) -msgid "tenorLyrics" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:196 (variable) -#. input/lsr/incipit.ly:199 (variable) -#. input/lsr/incipit.ly:243 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:108 (variable) -msgid "bassusNotes" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:218 (variable) -#. input/lsr/incipit.ly:213 (variable) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:121 (variable) -msgid "bassusLyrics" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:229 (context id) -#. input/lsr/incipit.ly:221 (context id) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:229 (context id) -msgid "choirStaff" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:251 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:266 (comment) -msgid "no bars in staves" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:254 (comment) -msgid "incipit should not start with a start delimiter" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:260 (comment) -#. input/lsr/incipit.ly:272 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:277 (comment) -msgid "no slurs" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:263 (comment) -#. input/lsr/incipit.ly:274 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:280 (comment) -msgid "Comment in the below \\\"\\remove\\\" command to allow line" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:264 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:281 (comment) -msgid "breaking also at those barlines where a note overlaps" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:265 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:282 (comment) -msgid "into the next bar. The command is commented out in this" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:266 (comment) -#. input/lsr/incipit.ly:277 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:283 (comment) -msgid "short example score, but especially for large scores, you" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:267 (comment) -#. input/lsr/incipit.ly:278 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:284 (comment) -msgid "will typically yield better line breaking and thus improve" -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:268 (comment) -#. input/lsr/incipit.ly:279 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:285 (comment) -msgid "overall spacing if you comment in the following command." -msgstr "" - -#. input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly:269 (comment) -#. input/lsr/incipit.ly:280 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:286 (comment) -msgid "\\remove \\\"Forbid_line_break_engraver\\\"" -msgstr "" - -#. input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:75 (variable) -#. input/lsr/clusters.ly:27 (variable) -msgid "fragment" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:29 (comment) -msgid "Automatic beams two per two in 4/4 or 2/2 time signature" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:30 (comment) -msgid "_____" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:31 (comment) -msgid "Default | | | |" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:32 (comment) -msgid "_ _" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:33 (comment) -msgid "Required | | | |" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:35 (comment) -msgid "macro for beamed two per two in 2/2 and 4/4 time signature" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:36 (variable) -msgid "qBeam" -msgstr "" - -#. input/lsr/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly:49 (comment) -msgid "Use the macro" -msgstr "" - -#. input/lsr/avoiding-collisions-of-chord-fingering-with-beams.ly:41 (comment) -msgid "Corrected to avoid collisions" -msgstr "" - -#. input/lsr/beam-endings-in-score-context.ly:28 (comment) -msgid "Set default beaming for all staves" -msgstr "" - -#. input/lsr/beam-endings-in-score-context.ly:36 (comment) -msgid "Modify beaming for just this staff" -msgstr "" - -#. input/lsr/beam-endings-in-score-context.ly:42 (comment) -msgid "Inherit beaming from Score context" -msgstr "" - -#. input/lsr/beam-endings-in-score-context.ly:48 (comment) -msgid "Modify beaming for this voice only" -msgstr "" - -#. input/lsr/beam-grouping-in-7-8-time.ly:40 (comment) -msgid "rhythm 2-3-2" -msgstr "" - -#. input/lsr/book-parts.ly:21 (comment) -msgid "book paper, which is inherited by all children bookparts" -msgstr "" - -#. input/lsr/book-parts.ly:24 (comment) -msgid "Page footer: add a different part-tagline at part last page" -msgstr "" - -#. input/lsr/book-parts.ly:28 (comment) -msgid "Copyright header field only on book first page." -msgstr "" - -#. input/lsr/book-parts.ly:32 (comment) -msgid "Part tagline header field only on each part last page." -msgstr "" - -#. input/lsr/book-parts.ly:36 (comment) -msgid "Tagline header field only on book last page." -msgstr "" - -#. input/lsr/book-parts.ly:43 (comment) -msgid "book header, which is inherited by the first bookpart" -msgstr "" - -#. input/lsr/book-parts.ly:52 (comment) -msgid "a different page breaking function may be used on each part" -msgstr "" - -#. input/lsr/breathing-signs.ly:19 (comment) -msgid "this bar contains no \\breathe" -msgstr "" - -#. input/lsr/breathing-signs.ly:21 (comment) -msgid "Modern notation:" -msgstr "" - -#. input/lsr/breathing-signs.ly:22 (comment) -msgid "by default, \\breathe uses the rcomma, just as if saying:" -msgstr "" - -#. input/lsr/breathing-signs.ly:23 (comment) -msgid "" -"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" -"\\\")" -msgstr "" - -#. input/lsr/breathing-signs.ly:26 (comment) -msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" -msgstr "" - -#. input/lsr/breathing-signs.ly:27 (comment) -msgid "N.B.: must use Staff context here, since we start a Voice below" -msgstr "" - -#. input/lsr/breathing-signs.ly:31 (comment) -msgid "vee" -msgstr "" - -#. input/lsr/caesura-railtracks-with-fermata.ly:28 (comment) -msgid "construct the symbol" -msgstr "" - -#. input/lsr/caesura-railtracks-with-fermata.ly:37 (comment) -msgid "set the breathe mark back to normal" -msgstr "" - -#. input/lsr/center-text-below-hairpin-dynamics.ly:27 (variable) -msgid "hairpinWithCenteredText" -msgstr "" - -#. input/lsr/center-text-below-hairpin-dynamics.ly:39 (variable) -msgid "hairpinMolto" -msgstr "" - -#. input/lsr/center-text-below-hairpin-dynamics.ly:40 (variable) -msgid "hairpinMore" -msgstr "" - -#. input/lsr/changing--flageolet-mark-size.ly:23 (variable) -msgid "smallFlageolet" -msgstr "" - -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:34 (comment) -msgid "The following is only here to print the names of the" -msgstr "" - -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:35 (comment) -msgid "chords styles; it can be removed if you do not need to" -msgstr "" - -#. input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) -msgid "print them." -msgstr "" - -#. input/lsr/changing-the-default-text-font-family.ly:17 (comment) -msgid "change for other default global staff size. " -msgstr "" - -#. input/lsr/changing-the-default-text-font-family.ly:19 (comment) -#. input/lsr/engravers-one-by-one.ly:191 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:110 (comment) -msgid "{" -msgstr "" - -#. input/lsr/changing-the-default-text-font-family.ly:23 (comment) -#. input/lsr/engravers-one-by-one.ly:194 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:111 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:233 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:163 (comment) -msgid "}" -msgstr "" - -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:35 (comment) -msgid "Change time signature symbol but keep 3/4 beaming" -msgstr "" - -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:36 (comment) -msgid "due to unchanged underlying time signature" -msgstr "" - -#. input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly:41 (comment) -msgid "Lose 3/4 beaming now \\time has been changed" -msgstr "" - -#. input/lsr/chant-or-psalms-notation.ly:23 (variable) -msgid "stemOn" -msgstr "" - -#. input/lsr/chant-or-psalms-notation.ly:24 (variable) -msgid "stemOff" -msgstr "" - -#. input/lsr/chord-name-exceptions.ly:24 (comment) -msgid "modify maj9 and 6(add9)" -msgstr "" - -#. input/lsr/chord-name-exceptions.ly:25 (comment) -msgid "Exception music is chords with markups" -msgstr "" - -#. input/lsr/chord-name-exceptions.ly:26 (variable) -msgid "chExceptionMusic" -msgstr "" - -#. input/lsr/chord-name-exceptions.ly:31 (comment) -msgid "Convert music to list and prepend to existing exceptions." -msgstr "" - -#. input/lsr/chord-name-exceptions.ly:32 (variable) -msgid "chExceptions" -msgstr "" - -#. input/lsr/chord-name-exceptions.ly:36 (variable) -msgid "theMusic" -msgstr "" - -#. input/lsr/clip-systems.ly:37 (variable) -msgid "origScore" -msgstr "" - -#. input/lsr/clip-systems.ly:55 (comment) -msgid "Each clip-region is a (START . END) pair" -msgstr "" - -#. input/lsr/clip-systems.ly:56 (comment) -msgid "where both are rhythmic-locations." -msgstr "" - -#. input/lsr/clip-systems.ly:58 (comment) -msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" -msgstr "" - -#. input/lsr/clip-systems.ly:59 (comment) -msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" -msgstr "" - -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:13 (comment) -msgid "Association list of pitches to colors." -msgstr "" - -#. input/lsr/coloring-notes-depending-on-their-pitch.ly:34 (comment) -msgid "Compare pitch and alteration (not octave)." -msgstr "" - -#. input/lsr/combining-dynamics-with-markup-texts.ly:24 (variable) -msgid "piuF" -msgstr "" - -#. input/lsr/combining-two-parts-on-the-same-staff.ly:51 (variable) -msgid "musicUp" -msgstr "" - -#. input/lsr/combining-two-parts-on-the-same-staff.ly:58 (variable) -msgid "musicDown" -msgstr "" - -#. input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly:53 (variable) -#. input/lsr/jazz-combo-template.ly:275 (context id) -msgid "rhythm" -msgstr "" - -#. input/lsr/creating-real-parenthesized-dynamics.ly:45 (variable) -msgid "parenF" -msgstr "" - -#. input/lsr/creating-simultaneous-rehearsal-marks.ly:40 (comment) -msgid "the hidden measure and bar line" -msgstr "" - -#. input/lsr/customizing-fretboard-fret-diagrams.ly:40 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:31 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:22 (comment) -msgid "Set global properties of fret diagram" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:29 (context id) -#. input/lsr/formatting-lyrics-syllables.ly:21 (variable) -#. input/lsr/fret-diagrams-explained-and-developed.ly:20 (context id) -#. input/lsr/piano-template-with-melody-and-lyrics.ly:58 (context id) -msgid "mel" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:38 (comment) -msgid "C major for guitar, no barre, using defaults" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:39 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:89 (comment) -msgid "terse style" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:42 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:64 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:48 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:69 (comment) -msgid "C major for guitar, barred on third fret" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:43 (comment) -#. input/lsr/customizing-markup-fret-diagrams.ly:65 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:49 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:70 (comment) -msgid "verbose style" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:44 (comment) -msgid "size 1.0" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:45 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:50 (comment) -msgid "roman fret label, finger labels below string, straight barre" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:47 (comment) -msgid "standard size" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:66 (comment) -msgid "landscape orientation, arabic numbers, M for mute string" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:67 (comment) -msgid "no barre, fret label down or left, small mute label font" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:88 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:96 (comment) -msgid "simple D chord" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:90 (comment) -msgid "larger dots, centered dots, fewer frets" -msgstr "" - -#. input/lsr/customizing-markup-fret-diagrams.ly:91 (comment) -msgid "label below string" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:40 (comment) -msgid "add FretBoards for the Cuatro" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:41 (comment) -msgid "Note: This section could be put into a separate file" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:42 (comment) -msgid "predefined-cuatro-fretboards.ly" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:43 (comment) -msgid "and \\included into each of your compositions" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:45 (variable) -msgid "cuatroTuning" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:47 (variable) -msgid "dSix" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:48 (variable) -msgid "dMajor" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:49 (variable) -msgid "aMajSeven" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:50 (variable) -msgid "dMajSeven" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:51 (variable) -msgid "gMajor" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:69 (comment) -msgid "end of potential include file /predefined-cuatro-fretboards.ly" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:74 (variable) -msgid "primerosNames" -msgstr "" - -#. input/lsr/defining-predefined-fretboards-for-other-instruments.ly:78 (variable) -msgid "primeros" -msgstr "" - -#. input/lsr/demo-midiinstruments.ly:23 (variable) -msgid "baseMelody" -msgstr "" - -#. input/lsr/display-bracket-with-only-one-staff-in-a-system.ly:37 (comment) -msgid "Must be lower than the actual number of staff lines" -msgstr "" - -#. input/lsr/displaying-complex-chords.ly:16 (variable) -msgid "fixA" -msgstr "" - -#. input/lsr/displaying-complex-chords.ly:20 (variable) -msgid "fixB" -msgstr "" - -#. input/lsr/double-glissando.ly:20 (comment) -msgid "new voice ( = \\voiceOne), hidden" -msgstr "" - -#. input/lsr/double-glissando.ly:22 (comment) -msgid "attach glissando to note heads" -msgstr "" - -#. input/lsr/double-glissando.ly:27 (comment) -msgid "original voice with chords rearranged so that" -msgstr "" - -#. input/lsr/double-glissando.ly:28 (comment) -msgid "glissando is attached to a & c" -msgstr "" - -#. input/lsr/embedding-native-postscript-in-a--markup-block.ly:23 (comment) -msgid "PostScript is a registered trademark of Adobe Systems Inc." -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:75 (comment) -msgid "sample music" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:76 (variable) -msgid "topVoice" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:84 (variable) -msgid "botVoice" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:92 (variable) -msgid "hoom" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:103 (variable) -msgid "pah" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:113 (comment) -msgid "setup for Request->Element conversion. Guru-only" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:116 (variable) -#. input/lsr/engravers-one-by-one.ly:221 (variable) -#. input/lsr/engravers-one-by-one.ly:234 (variable) -#. input/lsr/engravers-one-by-one.ly:290 (variable) -#. input/lsr/engravers-one-by-one.ly:304 (variable) -msgid "MyStaff" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:148 (comment) -msgid "explicitly set instrument, so we don't get " -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:149 (comment) -msgid "weird effects when doing instrument names for" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:150 (comment) -msgid "piano staves" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:159 (variable) -#. input/lsr/engravers-one-by-one.ly:248 (variable) -#. input/lsr/engravers-one-by-one.ly:261 (variable) -#. input/lsr/engravers-one-by-one.ly:274 (variable) -msgid "MyVoice" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:174 (comment) -msgid "must come before all" -msgstr "" - -#. input/lsr/engravers-one-by-one.ly:184 (comment) -msgid "\\consists \\\"Rest_engraver\\\"" -msgstr "" - -#. input/lsr/flamenco-notation.ly:46 (comment) -msgid "Cut here ----- Start 'flamenco.ly' " -msgstr "" - -#. input/lsr/flamenco-notation.ly:48 (comment) -msgid "Text indicators" -msgstr "" - -#. input/lsr/flamenco-notation.ly:49 (variable) -msgid "abanico" -msgstr "" - -#. input/lsr/flamenco-notation.ly:50 (variable) -msgid "rasgueaso" -msgstr "" - -#. input/lsr/flamenco-notation.ly:51 (variable) -msgid "alzapua" -msgstr "" - -#. input/lsr/flamenco-notation.ly:53 (comment) -msgid "Finger stroke symbols" -msgstr "" - -#. input/lsr/flamenco-notation.ly:54 (variable) -msgid "strokeUp" -msgstr "" - -#. input/lsr/flamenco-notation.ly:64 (variable) -msgid "strokeDown" -msgstr "" - -#. input/lsr/flamenco-notation.ly:74 (comment) -msgid "Golpe symbol" -msgstr "" - -#. input/lsr/flamenco-notation.ly:75 (variable) -msgid "golpe" -msgstr "" - -#. input/lsr/flamenco-notation.ly:89 (variable) -msgid "strokeUpGolpe" -msgstr "" - -#. input/lsr/flamenco-notation.ly:90 (variable) -msgid "iUpGolpe" -msgstr "" - -#. input/lsr/flamenco-notation.ly:92 (comment) -msgid "Strokes for all fingers" -msgstr "" - -#. input/lsr/flamenco-notation.ly:93 (variable) -msgid "pUp" -msgstr "" - -#. input/lsr/flamenco-notation.ly:94 (variable) -msgid "pDown" -msgstr "" - -#. input/lsr/flamenco-notation.ly:95 (variable) -msgid "iUp" -msgstr "" - -#. input/lsr/flamenco-notation.ly:96 (variable) -msgid "iDown" -msgstr "" - -#. input/lsr/flamenco-notation.ly:97 (variable) -msgid "mUp" -msgstr "" - -#. input/lsr/flamenco-notation.ly:98 (variable) -msgid "mDown" -msgstr "" - -#. input/lsr/flamenco-notation.ly:99 (variable) -msgid "aUp" -msgstr "" - -#. input/lsr/flamenco-notation.ly:100 (variable) -msgid "aDown" -msgstr "" - -#. input/lsr/flamenco-notation.ly:101 (variable) -msgid "xUp" -msgstr "" - -#. input/lsr/flamenco-notation.ly:102 (variable) -msgid "xDown" -msgstr "" - -#. input/lsr/flamenco-notation.ly:105 (comment) -msgid "Just handy :)" -msgstr "" - -#. input/lsr/flamenco-notation.ly:106 (variable) -msgid "tupletOff" -msgstr "" - -#. input/lsr/flamenco-notation.ly:111 (variable) -msgid "tupletsOff" -msgstr "" - -#. input/lsr/flamenco-notation.ly:116 (variable) -msgid "tupletsOn" -msgstr "" - -#. input/lsr/flamenco-notation.ly:121 (variable) -msgid "headsOff" -msgstr "" - -#. input/lsr/flamenco-notation.ly:127 (variable) -msgid "headsOn" -msgstr "" - -#. input/lsr/flamenco-notation.ly:133 (comment) -msgid "Cut here ----- End 'flamenco.ly' " -msgstr "" - -#. input/lsr/flat-flags-and-beam-nibs.ly:109 (comment) -msgid "Example 1" -msgstr "" - -#. input/lsr/flat-flags-and-beam-nibs.ly:116 (comment) -msgid "Example 2" -msgstr "" - -#. input/lsr/flat-flags-and-beam-nibs.ly:123 (comment) -msgid "Example 3" -msgstr "" - -#. input/lsr/flat-flags-and-beam-nibs.ly:137 (comment) -msgid "Example 4" -msgstr "" - -#. input/lsr/flute-slap-notation.ly:18 (variable) -msgid "slap" -msgstr "" - -#. input/lsr/formatting-lyrics-syllables.ly:16 (comment) -msgid "" -"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" -"msg00215.html" -msgstr "" - -#. input/lsr/fret-diagrams-explained-and-developed.ly:37 (comment) -msgid "A chord for ukelele, with formatting defined in definition string" -msgstr "" - -#. input/lsr/fret-diagrams-explained-and-developed.ly:38 (comment) -msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" -msgstr "" - -#. input/lsr/fret-diagrams-explained-and-developed.ly:39 (comment) -msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" -msgstr "" - -#. input/lsr/fret-diagrams-explained-and-developed.ly:52 (comment) -#. input/lsr/fret-diagrams-explained-and-developed.ly:72 (comment) -#, python-format -msgid "110% of default size" -msgstr "" - -#. input/lsr/grid-lines--changing-their-appearance.ly:33 (comment) -msgid "this moves them up one staff space from the default position" -msgstr "" - -#. input/lsr/grid-lines--changing-their-appearance.ly:51 (comment) -msgid "set up grids" -msgstr "" - -#. input/lsr/grid-lines--changing-their-appearance.ly:53 (comment) -msgid "set the grid interval to one quarter note" -msgstr "" - -#. input/lsr/grid-lines--changing-their-appearance.ly:59 (comment) -msgid "this moves them to the right half a staff space" -msgstr "" - -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:36 (comment) -msgid "hides staff and notes so that only the grid lines are visible" -msgstr "" - -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:43 (comment) -msgid "dummy notes to force regular note spacing" -msgstr "" - -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:59 (comment) -msgid "center grid lines horizontally below note heads" -msgstr "" - -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:66 (comment) -msgid "set line length and positioning:" -msgstr "" - -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:67 (comment) -msgid "two staff spaces above center line on hidden staff" -msgstr "" - -#. input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) -msgid "to four spaces below center line on visible staff" -msgstr "" - -#. input/lsr/heavily-customized-polymetric-time-signatures.ly:51 (variable) -msgid "drum" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:54 (comment) -msgid "Solution 1: Using a simple markup with a particular halign value" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:55 (comment) -msgid "" -"Drawback: It's a markup, not a dynamic command, so \\dynamicDown etc. will " -"have no effect" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (variable) -msgid "semppMarkup" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) -msgid "" -"Solution 2: Using a dynamic script and shifting with \\once\\override ... " -"#'X-offset = .." -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (comment) -msgid "Drawback: \\once\\override needed for every invocation" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:60 (variable) -msgid "semppK" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) -msgid "" -"Solution 3: Padding the dynamic script so the center-alignment puts it to " -"the correct position" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) -msgid "" -"Drawback: the padding really reserves the space, nothing else can be there" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) -msgid "semppT" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) -msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) -msgid "" -"Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put other " -"stuff there => collisions" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (comment) -msgid "" -"Drawback: Also, there seems to be some spacing, so it's not exactly the " -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:75 (comment) -msgid "same alignment as without the additional text" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:76 (variable) -msgid "semppM" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:78 (comment) -msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:79 (variable) -msgid "semppG" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) -msgid "" -"Solution 6: Dynamic with explicit alignment. This has only effect, if one " -"sets X-offset!" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) -msgid "Drawback: One needs to set DynamicText #'X-offset!" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (comment) -msgid "" -"Drawback: Aligned at the right edge of the additional text, not at the " -"center of pp" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:88 (variable) -msgid "semppMII" -msgstr "" - -#. input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:114 (comment) -msgid "Setting to ##f (false) gives the same resul" -msgstr "" - -#. input/lsr/how-to-change-fret-diagram-position.ly:28 (variable) -#. input/lsr/score-for-diatonic-accordion.ly:61 (variable) -#. input/lsr/showing-chords-at-changes.ly:23 (variable) -#. input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly:40 (variable) -#. input/lsr/single-staff-template-with-notes-and-chords.ly:38 (variable) -msgid "harmonies" -msgstr "" - -#. input/lsr/how-to-change-fret-diagram-position.ly:31 (comment) -msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" -msgstr "" - -#. input/lsr/how-to-change-fret-diagram-position.ly:34 (comment) -msgid "THIS LINE IS THE SECOND METHOD" -msgstr "" - -#. input/lsr/how-to-change-fret-diagram-position.ly:44 (comment) -msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" -msgstr "" - -#. input/lsr/how-to-change-fret-diagram-position.ly:47 (comment) -msgid "HERE IS THE SECOND METHOD" -msgstr "" - -#. input/lsr/incipit.ly:62 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:35 (comment) -msgid "make the staff lines invisible on staves" -msgstr "" - -#. input/lsr/incipit.ly:74 (variable) -#. input/lsr/incipit.ly:75 (context id) -msgid "discantusIncipit" -msgstr "" - -#. input/lsr/incipit.ly:111 (variable) -#. input/lsr/incipit.ly:112 (context id) -msgid "altusIncipit" -msgstr "" - -#. input/lsr/incipit.ly:127 (comment) -#. input/lsr/incipit.ly:139 (comment) -#. input/lsr/incipit.ly:169 (comment) -#. input/lsr/incipit.ly:178 (comment) -msgid "two measures" -msgstr "" - -#. input/lsr/incipit.ly:147 (variable) -#. input/lsr/incipit.ly:148 (context id) -msgid "tenorIncipit" -msgstr "" - -#. input/lsr/incipit.ly:184 (variable) -#. input/lsr/incipit.ly:185 (context id) -msgid "bassusIncipit" -msgstr "" - -#. input/lsr/incipit.ly:251 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:258 (comment) -msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" -msgstr "" - -#. input/lsr/incipit.ly:252 (comment) -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:259 (comment) -msgid "between the lyrics." -msgstr "" - -#. input/lsr/incipit.ly:257 (comment) -msgid "no bar lines in staves" -msgstr "" - -#. input/lsr/incipit.ly:260 (comment) -msgid "the next three instructions keep the lyrics between the bar lines" -msgstr "" - -#. input/lsr/incipit.ly:275 (comment) -msgid "breaking also at those bar lines where a note overlaps" -msgstr "" - -#. input/lsr/incipit.ly:276 (comment) -msgid "into the next measure. The command is commented out in this" -msgstr "" - -#. input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly:16 (variable) -msgid "tuning" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:52 (comment) -msgid "#(set-global-staff-size 16)" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:55 (comment) -msgid "Some macros %%%%%%%%%%%%%%%%%%%" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:57 (variable) -msgid "sl" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:61 (variable) -msgid "nsl" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:65 (variable) -msgid "crOn" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:66 (variable) -msgid "crOff" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:68 (comment) -msgid "insert chord name style stuff here." -msgstr "" - -#. input/lsr/jazz-combo-template.ly:70 (variable) -msgid "jazzChords" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:72 (comment) -msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:76 (variable) -msgid "Key" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:78 (comment) -msgid "############ Horns ############" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:80 (comment) -msgid "------ Trumpet ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:81 (variable) -msgid "trpt" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:85 (variable) -msgid "trpHarmony" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:88 (variable) -#. input/lsr/jazz-combo-template.ly:268 (context id) -msgid "trumpet" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:97 (comment) -msgid "------ Alto Saxophone ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:98 (variable) -msgid "alto" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:102 (variable) -msgid "altoHarmony" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:105 (variable) -msgid "altoSax" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:114 (comment) -msgid "------ Baritone Saxophone ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:115 (variable) -msgid "bari" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:123 (variable) -msgid "bariHarmony" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:126 (variable) -msgid "bariSax" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:135 (comment) -msgid "------ Trombone ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:136 (variable) -msgid "tbone" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:140 (variable) -msgid "tboneHarmony" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:143 (variable) -#. input/lsr/jazz-combo-template.ly:272 (context id) -msgid "trombone" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:152 (comment) -msgid "############ Rhythm Section #############" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:154 (comment) -msgid "------ Guitar ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:155 (variable) -msgid "gtr" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:163 (variable) -msgid "gtrHarmony" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:167 (variable) -#. input/lsr/jazz-combo-template.ly:277 (context id) -#. input/lsr/polyphony-in-tablature.ly:39 (context id) -#. input/lsr/polyphony-in-tablature.ly:44 (context id) -msgid "guitar" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:176 (comment) -msgid "------ Piano ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:177 (variable) -msgid "rhUpper" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:182 (variable) -msgid "rhLower" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:188 (variable) -msgid "lhUpper" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:193 (variable) -msgid "lhLower" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:199 (variable) -msgid "PianoRH" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:208 (variable) -msgid "PianoLH" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:226 (comment) -msgid "------ Bass Guitar ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:240 (comment) -msgid "------ Drums ------" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:254 (variable) -msgid "drumContents" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:263 (comment) -#, python-format -msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:267 (context id) -msgid "horns" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:269 (context id) -msgid "altosax" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:270 (context id) -msgid "barichords" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:271 (context id) -msgid "barisax" -msgstr "" - -#. input/lsr/jazz-combo-template.ly:276 (context id) -msgid "chords" -msgstr "" - -#. input/lsr/makam-example.ly:26 (comment) -msgid "Initialize makam settings" -msgstr "" - -#. input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly:19 (variable) -msgid "bassfigures" -msgstr "" - -#. input/lsr/manually-controlling-beam-positions.ly:21 (comment) -msgid "from upper staffline (position 4) to center (position 0)" -msgstr "" - -#. input/lsr/manually-controlling-beam-positions.ly:24 (comment) -msgid "from center to one above center (position 2)" -msgstr "" - -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:19 (variable) -msgid "speakOn" -msgstr "" - -#. input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:31 (variable) -msgid "speakOff" -msgstr "" - -#. input/lsr/markup-lines.ly:19 (comment) -msgid "Candide, Voltaire" -msgstr "" - -#. input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly:32 (comment) -msgid "the final bar line is not interrupted" -msgstr "" - -#. input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly:17 (variable) -msgid "normalPos" -msgstr "" - -#. input/lsr/modern-tab-text-clef.ly:16 (variable) -msgid "TAB" -msgstr "" - -#. input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly:51 (variable) -msgid "dashPlus" -msgstr "" - -#. input/lsr/modifying-tuplet-bracket-length.ly:23 (comment) -msgid "Set tuplets to be extendable..." -msgstr "" - -#. input/lsr/modifying-tuplet-bracket-length.ly:25 (comment) -msgid "...to cover all items up to the next note" -msgstr "" - -#. input/lsr/modifying-tuplet-bracket-length.ly:29 (comment) -msgid "...or to cover just whitespace" -msgstr "" - -#. input/lsr/percussion-beaters.ly:18 (variable) -msgid "stick" -msgstr "" - -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:39 (comment) -msgid "Permit line breaks within tuplets" -msgstr "" - -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:41 (comment) -msgid "Allow beams to be broken at line breaks" -msgstr "" - -#. input/lsr/permitting-line-breaks-within-beamed-tuplets.ly:48 (comment) -msgid "Insert a manual line break within a tuplet" -msgstr "" - -#. input/lsr/piano-template-with-centered-dynamics.ly:51 (variable) -msgid "pedal" -msgstr "" - -#. input/lsr/piano-template-with-centered-dynamics.ly:64 (comment) -msgid "define Dynamics context" -msgstr "" - -#. input/lsr/piano-template-with-centered-dynamics.ly:85 (comment) -msgid "modify PianoStaff context to accept Dynamics context" -msgstr "" - -#. input/lsr/polyphony-in-tablature.ly:38 (context id) -msgid "tab" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:41 (comment) -msgid "Multi-measure rests by default are set under the second line" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:43 (comment) -msgid "They can be moved with an override" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:46 (comment) -msgid "A value of 0 is the default position;" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:47 (comment) -msgid "the following trick moves the rest to the center line" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:50 (comment) -msgid "Multi-measure rests in odd-numbered voices are under the top line" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:52 (comment) -msgid "Multi-measure rests in even-numbered voices are under the bottom line" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:54 (comment) -msgid "They remain separated even in empty measures" -msgstr "" - -#. input/lsr/positioning-multi--measure-rests.ly:56 (comment) -msgid "This brings them together even though there are two voices" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:28 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:49 (comment) -msgid "Set segno sign as rehearsal mark and adjust size if needed" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:29 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:51 (comment) -msgid "\\once \\override Score.RehearsalMark #'font-size = #3" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:35 (comment) -msgid "Set coda sign as rehearsal mark and adjust size if needed" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:42 (comment) -msgid "Should Coda be on anew line?" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:43 (comment) -msgid "Coda NOT on new line: use \\nobreak" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:44 (comment) -msgid "Coda on new line: DON'T use \\nobreak" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:45 (comment) -msgid "\\noBreak" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:54 (comment) -msgid "Here begins the trickery! " -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:55 (comment) -msgid "" -"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " -"lines." -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:58 (comment) -msgid "Some examples of possible text-displays " -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:60 (comment) -msgid "text line-aligned" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:61 (comment) -msgid "==================" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:62 (comment) -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:68 (comment) -msgid "Move text to the desired position" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:63 (comment) -msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:64 (comment) -msgid "| s1*0^\\markup { D.S. al Coda } }" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:66 (comment) -msgid "text center-aligned" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:67 (comment) -msgid "====================" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:69 (comment) -msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:70 (comment) -msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:72 (comment) -msgid "text and symbols center-aligned" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:73 (comment) -msgid "===============================" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:74 (comment) -msgid "" -"Move text to the desired position and tweak spacing for optimum text " -"alignment" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:75 (comment) -msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:81 (comment) -msgid "Increasing the unfold counter will expand the staff-free space" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:86 (comment) -msgid "Resume bar count and show staff lines again" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:90 (comment) -msgid "Should Coda be on new line?" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:91 (comment) -msgid "Coda NOT on new line: DON'T use \\break" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:92 (comment) -msgid "Coda on new line: use \\break" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:95 (comment) -msgid "Show up, you clef and key!" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:99 (comment) -msgid "Set coda sign as rehearsal mark and adjust size and position" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:101 (comment) -msgid "" -"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" -"position" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:103 (comment) -msgid "Coda NOT on new line, use this:" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:104 (comment) -msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:106 (comment) -msgid "Coda on new line, use this:" -msgstr "" - -#. input/lsr/positioning-segno-and-coda-with-line-break.ly:112 (comment) -msgid "The coda" -msgstr "" - -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:31 (comment) -msgid "Metronome marks below the staff " -msgstr "" - -#. input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly:36 (comment) -msgid "Rehearsal marks below the staff" -msgstr "" - -#. input/lsr/printing-music-with-different-time-signatures.ly:49 (variable) -msgid "Bassklarinette" -msgstr "" - -#. input/lsr/printing-music-with-different-time-signatures.ly:89 (variable) -msgid "Perkussion" -msgstr "" - -#. input/lsr/quoting-another-voice-with-transposition.ly:37 (variable) -msgid "quoteTest" -msgstr "" - -#. input/lsr/quoting-another-voice-with-transposition.ly:38 (comment) -msgid "french horn" -msgstr "" - -#. input/lsr/quoting-another-voice.ly:27 (variable) -msgid "quoteMe" -msgstr "" - -#. input/lsr/quoting-another-voice.ly:32 (variable) -msgid "original" -msgstr "" - -#. input/lsr/removing-the-first-empty-line.ly:43 (comment) -msgid "To use the setting globally, uncomment the following line:" -msgstr "" - -#. input/lsr/removing-the-first-empty-line.ly:44 (comment) -msgid "\\override VerticalAxisGroup #'remove-first = ##t" -msgstr "" - -#. input/lsr/removing-the-first-empty-line.ly:53 (comment) -msgid "To use the setting globally, comment this line," -msgstr "" - -#. input/lsr/removing-the-first-empty-line.ly:54 (comment) -msgid "uncomment the line in the \\layout block above" -msgstr "" - -#. input/lsr/reverting-default-beam-endings.ly:29 (comment) -msgid "Default beaming" -msgstr "" - -#. input/lsr/reverting-default-beam-endings.ly:32 (comment) -msgid "Revert default values in scm/auto-beam.scm for 12/8 time" -msgstr "" - -#. input/lsr/reverting-default-beam-endings.ly:38 (comment) -msgid "Set new values for beam endings" -msgstr "" - -#. input/lsr/rhythmic-slashes.ly:25 (comment) -msgid "Macro to print single slash" -msgstr "" - -#. input/lsr/rhythmic-slashes.ly:26 (variable) -msgid "rs" -msgstr "" - -#. input/lsr/rhythmic-slashes.ly:33 (comment) -msgid "Function to print a specified number of slashes" -msgstr "" - -#. input/lsr/rhythmic-slashes.ly:34 (variable) -msgid "comp" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:69 (variable) -msgid "NoStem" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:70 (variable) -msgid "NoNoteHead" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:71 (variable) -msgid "ZeroBeam" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:73 (variable) -msgid "staffTabLine" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:78 (comment) -msgid "" -"Shows one horizontal line. The vertical line (simulating a bar-line) is " -"simulated with a gridline" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:83 (comment) -msgid "" -"disable the following line to see the the noteheads while writing the song " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:87 (comment) -msgid "The beam between 8th-notes is used to draw the push-line" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:88 (comment) -msgid "How to fast write the push-lines: " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:89 (comment) -msgid "" -"1. write repeatedly 'c c c c c c c c |' for the whole length of the song " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:90 (comment) -msgid "2. uncomment the line \\NoNoteHead" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:91 (comment) -msgid "3. compile" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:92 (comment) -msgid "4. Mark the positions on which push/pull changes. " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:93 (comment) -msgid "" -"In the score-picture click on the position the push- or pull-part starts " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:94 (comment) -msgid "(on the noteHead, the cursor will change to a hand-icon)." -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:95 (comment) -msgid "The cursor in the source code will jump just at this position." -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:96 (comment) -msgid "a) If a push-part starts there, replace the 'c' by an 'e['" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:97 (comment) -msgid "b) If a pull-part starts there, replace the 'c' by an 's'" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:98 (comment) -msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key. " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:99 (comment) -msgid "6. For the pull-parts overwrite the 'c' with 's' " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:100 (comment) -msgid "7. For every push-part replace the last 'c' with 'e]' " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:101 (comment) -msgid "8. Switch into 'insert-mode' again " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:102 (comment) -msgid "" -"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " -"e] s s)" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:103 (comment) -msgid "10. re-enable the line \\NoNoteHead" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:113 (comment) -msgid "Accordion melody in tabulator score\t\t" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:114 (comment) -msgid "1. Place a copy of the piano melody below" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:115 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:134 (comment) -msgid "" -"2. Separate piano melody into pull- and push-parts according to the " -"staffTabLine you've already made " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:116 (comment) -msgid "" -"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " -"reference) and then change the second line using the transformation paper" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:117 (comment) -msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:118 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:137 (comment) -msgid "Tips:" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:119 (comment) -#. input/lsr/score-for-diatonic-accordion.ly:138 (comment) -msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:121 (variable) -msgid "AccordionTabTwoCBesDur" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:122 (comment) -msgid "pull 1" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:123 (comment) -msgid "8 8 8 | " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:125 (comment) -msgid "push 2" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:126 (comment) -msgid "4 | " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:128 (comment) -msgid "pull 3" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:129 (comment) -msgid "2 r8 }" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:133 (comment) -msgid "1. Place a copy of the piano melody above" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:135 (comment) -msgid "" -"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " -"reference) and then " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:136 (comment) -msgid "change the second line using the transformation paper" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:139 (comment) -msgid "- " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:150 (comment) -msgid "4/4 - tact. How many beats per bar" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:152 (comment) -msgid "The following line has to be adjusted O-F-T-E-N." -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:161 (variable) -msgid "staffVoice" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:169 (context id) -msgid "melodyVoi" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:175 (variable) -msgid "staffAccordionMel" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:176 (comment) -msgid "Set the accidentals (Vorzeichen) for each note, " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:177 (comment) -msgid "do not remember them for the rest of the measure. " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:196 (variable) -msgid "BassRhytm" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:197 (variable) -msgid "LyricBassRhythmI" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:199 (variable) -msgid "staffBassRhytm" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:200 (comment) -msgid "" -"This is not a RhythmicStaff because it must be possible to append lyrics." -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:202 (comment) -msgid "x.y" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:204 (comment) -msgid "" -"Shows one horizontal line. The vertical line (simulating a bar-line) is " -"simulated by a grid" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:205 (comment) -msgid "Search for 'grid' in this page to find all related functions " -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:208 (context id) -msgid "VoiceBassRhytm" -msgstr "" - -#. input/lsr/score-for-diatonic-accordion.ly:221 (comment) -msgid "" -"The vertical line (simulating a bar-line) in the staffBassRhytm is a " -"gridline " -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:24 (comment) -msgid "Define the fret diagrams to be used" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:25 (variable) -msgid "cFretDiagram" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:29 (variable) -msgid "gFretDiagram" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:33 (variable) -msgid "verseI" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:38 (variable) -msgid "verseII" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:43 (variable) -msgid "theChords" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:45 (comment) -msgid "insert the chords for chordnames here" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:50 (variable) -msgid "staffMelody" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:51 (context id) -msgid "voiceMelody" -msgstr "" - -#. input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:55 (comment) -msgid "Type notes and fret diagram markups here" -msgstr "" - -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:54 (variable) -msgid "snapPizzicato" -msgstr "" - -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:56 (comment) -msgid "now it can be used as \\snappizzicato after the note/chord" -msgstr "" - -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:57 (comment) -msgid "Note that a direction (-, ^ or _) is required." -msgstr "" - -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:60 (comment) -msgid "This does NOT work:" -msgstr "" - -#. input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly:61 (comment) -msgid "\\snapPizzicato" -msgstr "" - -#. input/lsr/stemlets.ly:35 (comment) -msgid "N.B. use Score.Stem to set for the whole score." -msgstr "" - -#. input/lsr/string-quartet-template-simple.ly:34 (variable) -msgid "violinOne" -msgstr "" - -#. input/lsr/string-quartet-template-simple.ly:43 (variable) -msgid "violinTwo" -msgstr "" - -#. input/lsr/string-quartet-template-simple.ly:52 (variable) -msgid "viola" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:63 (comment) -msgid "piece.ly" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:64 (comment) -msgid "(This is the global definitions file)" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:71 (variable) -msgid "Violinone" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:76 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:82 (comment) -#. input/lsr/string-quartet-template-with-separate-parts.ly:89 (comment) -msgid "*********************************" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:77 (variable) -msgid "Violintwo" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:83 (variable) -msgid "Viola" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:90 (variable) -msgid "Cello" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:96 (comment) -msgid "**********************************" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:107 (comment) -msgid "These are the other files you need to save on your computer" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:109 (comment) -msgid "score.ly" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:110 (comment) -msgid "(This is the main file)" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:113 (comment) -#, python-format -msgid "" -"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " -"separate file" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:122 (comment) -msgid "{ Uncomment this block when using separate files" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:124 (comment) -msgid "vn1.ly" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:125 (comment) -msgid "(This is the Violin 1 part file)" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:134 (comment) -msgid "vn2.ly" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:135 (comment) -msgid "(This is the Violin 2 part file)" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:144 (comment) -msgid "vla.ly" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:145 (comment) -msgid "(This is the Viola part file)" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:154 (comment) -msgid "vlc.ly" -msgstr "" - -#. input/lsr/string-quartet-template-with-separate-parts.ly:155 (comment) -msgid "(This is the Cello part file)" -msgstr "" - -#. input/lsr/sub-dividing-beams.ly:50 (comment) -msgid "Set beam sub-group length to an eighth note" -msgstr "" - -#. input/lsr/sub-dividing-beams.ly:54 (comment) -msgid "Set beam sub-group length to a sixteenth note" -msgstr "" - -#. input/lsr/suppressing-warnings-for-clashing-note-columns.ly:19 (variable) -msgid "ignore" -msgstr "" - -#. input/lsr/three-sided-box.ly:16 (comment) -msgid "New command to add a three sided box, with sides north, west and south" -msgstr "" - -#. input/lsr/three-sided-box.ly:17 (comment) -msgid "Based on the box-stencil command defined in scm/stencil.scm" -msgstr "" - -#. input/lsr/three-sided-box.ly:18 (comment) -msgid "Note that you use \\\";\\\" to comment a line in Scheme" -msgstr "" - -#. input/lsr/three-sided-box.ly:32 (comment) -msgid "The corresponding markup command, based on the \\box command defined " -msgstr "" - -#. input/lsr/three-sided-box.ly:33 (comment) -msgid "in scm/define-markup-commands.scm" -msgstr "" - -#. input/lsr/three-sided-box.ly:47 (comment) -msgid "Test it:" -msgstr "" - -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:127 (variable) -msgid "incipitDiscantus" -msgstr "" - -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:151 (variable) -msgid "incipitAltus" -msgstr "" - -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:176 (variable) -msgid "incipitTenor" -msgstr "" - -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:202 (variable) -msgid "incipitBassus" -msgstr "" - -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:226 (comment) -msgid "" -"StaffGroup is used instead of ChoirStaff to get bar lines between systems" -msgstr "" - -#. input/lsr/transcription-of-ancient-music-with-incipit.ly:269 (comment) -msgid "the next three instructions keep the lyrics between the barlines" -msgstr "" - -#. input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:131 (variable) -msgid "naturalizeMusic" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:111 (comment) -msgid "The default treble clef" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:113 (comment) -msgid "The standard bass clef" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:118 (comment) -msgid "The baritone clef" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:123 (comment) -msgid "The standard choral tenor clef" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:129 (comment) -msgid "A non-standard clef" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:135 (comment) -msgid "The following clef changes do not preserve" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:136 (comment) -msgid "the normal relationship between notes and clefs:" -msgstr "" - -#. input/lsr/tweaking-clef-properties.ly:151 (comment) -msgid "Here we go back to the normal clef:" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:34 (comment) -msgid "The default in 3/4 time is to beam in three groups" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:35 (comment) -msgid "each of a quarter note length" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:39 (comment) -msgid "No auto-beaming is defined for 12/16" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:43 (comment) -msgid "Change time signature symbol, but retain underlying 3/4 beaming" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:47 (comment) -msgid "The 3/4 time default grouping of (1 1 1) and beatLength of 1/8" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:48 (comment) -msgid "are not consistent with a measureLength of 3/4, so the beams" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:49 (comment) -msgid "are grouped at beatLength intervals" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:53 (comment) -msgid "Specify beams in groups of (3 3 2 3) 1/16th notes" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:54 (comment) -msgid "3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply," -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:55 (comment) -msgid "and beams are grouped at beatLength (1/16) intervals" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:60 (comment) -msgid "Specify beams in groups of (3 4 2 3) 1/16th notes" -msgstr "" - -#. input/lsr/using-beatlength-and-beatgrouping.ly:61 (comment) -msgid "3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies" -msgstr "" - -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:17 (variable) -msgid "parallelogram" -msgstr "" - -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:32 (variable) -msgid "myNoteHeads" -msgstr "" - -#. input/lsr/using-postscript-to-generate-special-note-head-shapes.ly:33 (variable) -msgid "normalNoteHeads" -msgstr "" - -#. input/lsr/utf-8.ly:34 (comment) -msgid "end verbatim - this comment is a hack to prevent texinfo.tex" -msgstr "" - -#. input/lsr/utf-8.ly:35 (comment) -msgid "from choking on non-European UTF-8 subsets" -msgstr "" - -#. input/lsr/utf-8.ly:36 (comment) -msgid "Cyrillic font" -msgstr "" - -#. input/lsr/utf-8.ly:37 (variable) -msgid "bulgarian" -msgstr "" - -#. input/lsr/utf-8.ly:41 (variable) -msgid "hebrew" -msgstr "" - -#. input/lsr/utf-8.ly:45 (variable) -msgid "japanese" -msgstr "" - -#. input/lsr/utf-8.ly:52 (comment) -msgid "\\\"a legal song to you\\\"" -msgstr "" - -#. input/lsr/utf-8.ly:53 (variable) -msgid "portuguese" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:19 (variable) -msgid "leftbrace" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:20 (variable) -msgid "rightbrace" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:22 (variable) -msgid "dropLyrics" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:29 (variable) -msgid "raiseLyrics" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:36 (variable) -msgid "skipFour" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:38 (variable) -msgid "lyricsA" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:40 (variable) -msgid "lyricsB" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:41 (variable) -msgid "lyricsC" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:42 (variable) -msgid "lyricsD" -msgstr "" - -#. input/lsr/vertically-centered-common-lyrics.ly:49 (context id) -msgid "m" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:44 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:37 (variable) -#. input/lsr/vocal-ensemble-template.ly:41 (variable) -msgid "sopMusic" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:47 (variable) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:40 (variable) -#. input/lsr/vocal-ensemble-template.ly:44 (variable) -msgid "sopWords" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:67 (context id) -#. input/lsr/vocal-ensemble-template.ly:72 (context id) -msgid "women" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:82 (context id) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:77 (context id) -#. input/lsr/vocal-ensemble-template.ly:84 (context id) -msgid "men" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:111 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (comment) -#. input/lsr/vocal-ensemble-template.ly:102 (comment) -msgid "a little smaller so lyrics" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly:112 (comment) -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (comment) -#. input/lsr/vocal-ensemble-template.ly:103 (comment) -msgid "can be closer to the staff" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (comment) -msgid "we could remove the line about this with the line below, since we want" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:74 (comment) -msgid "the alto lyrics to be below the alto Voice anyway." -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:75 (comment) -msgid "\\new Lyrics \\lyricsto altos \\altoWords" -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:84 (comment) -msgid "again, we could replace the line above this with the line below." -msgstr "" - -#. input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:85 (comment) -msgid "\\new Lyrics \\lyricsto basses \\bassWords" -msgstr "" - -#. input/lsr/volta-multi-staff.ly:13 (variable) -msgid "voltaMusic" -msgstr "" - msgid "Up:" msgstr "" diff --git a/Documentation/po/nl.po b/Documentation/po/nl.po new file mode 100644 index 0000000000..72ff50747e --- /dev/null +++ b/Documentation/po/nl.po @@ -0,0 +1,10095 @@ +# translation of LilyPond documentation to French +# Copyright (C) 2006 Han-Wen Nienhuys, Jan Nieuwenhuizen +# This file is distributed under the same license as the lilypond package. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-12-06 22:26+0100\n" +"PO-Revision-Date: 2010-04-13 12:28+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: postprocess_html.py:55 +#, python-format +msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." +msgstr "" +"Deze pagina is voor %(package_name)s-%(package_version)s (%(branch_str)s)." + +#: postprocess_html.py:57 +#, python-format +msgid "" +"Your suggestions for the documentation " +"are welcome, please report errors to our bug list." +msgstr "" +"Jouw suggesties ter verbetering van de " +"documentatie zijn welkom. Meld fouten en problemen alsjeblieft aan onze " +"foutenlijst." + +#: postprocess_html.py:69 +#, python-format +msgid "Other languages: %s." +msgstr "Andere talen: %s." + +#: postprocess_html.py:70 +#, python-format +msgid "About automatic language selection." +msgstr "Gebruik van automatische taalkeuze." + +#: postprocess_html.py:326 +msgid "stable-branch" +msgstr "stabiele tak" + +#: postprocess_html.py:328 +msgid "development-branch" +msgstr "ontwikkelingstak" + +#: translations-status.py:72 +msgid "Section titles" +msgstr "Paragraaftitels" + +#: translations-status.py:73 +#, python-format +msgid "Last updated %s" +msgstr "Meest recente update %s" + +#: translations-status.py:74 +msgid "Translators" +msgstr "Vertalers" + +#: translations-status.py:74 +msgid "Translation checkers" +msgstr "Revisie vertaling" + +#: translations-status.py:75 +msgid "Translated" +msgstr "Vertaald" + +#: translations-status.py:75 +msgid "Up to date" +msgstr "Actueel" + +#: translations-status.py:76 +msgid "Other info" +msgstr "Andere informatie" + +#: translations-status.py:78 +msgid "no" +msgstr "nee" + +#: translations-status.py:79 +msgid "not translated" +msgstr "niet vertaald" + +#: translations-status.py:81 +#, python-format +msgid "partially (%(p)d %%)" +msgstr "gedeeltelijk (%(p)d %%)" + +#: translations-status.py:83 +#, python-format +msgid "partially translated (%(p)d %%)" +msgstr "gedeeltelijk vertaald (%(p)d %%)" + +#: translations-status.py:84 translations-status.py:86 +msgid "yes" +msgstr "ja" + +#: translations-status.py:85 +msgid "translated" +msgstr "vertaald" + +#: translations-status.py:86 translations-status.py:87 +msgid "up to date" +msgstr "actueel" + +#: translations-status.py:88 +msgid "partially" +msgstr "gedeeltelijk" + +#: translations-status.py:89 +msgid "partially up to date" +msgstr "gedeeltelijk actueel" + +#: translations-status.py:90 +msgid "N/A" +msgstr "nvt" + +# voor-GDP +#: translations-status.py:91 +msgid "pre-GDP" +msgstr "voor-GDP" + +#: translations-status.py:92 +msgid "post-GDP" +msgstr "na-GDP" + +#. -*- coding: utf-8 -*- +#. Documentation/changes.tely:183 (variable) +msgid "coloredheads" +msgstr "" + +#. Documentation/changes.tely:184 (variable) +msgid "noclef" +msgstr "" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi +msgid "Top" +msgstr "" + +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "" + +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Predefined commands" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Selected Snippets" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "See also" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Known issues and warnings" +msgstr "" + +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +msgid "Music engraving" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraving details" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Ledger lines" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Automated engraving" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Beauty contests" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music representation" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Putting LilyPond to work" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Colorado" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Computer notation" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3003 (variable) +#. Documentation/learning/fundamental.itely:3058 (variable) +#. Documentation/notation/changing-defaults.itely:3802 (variable) +msgid "padText" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3844 (variable) +msgid "tempoPadded" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Introduction to Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme variables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Lists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "cond" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond Scheme syntax" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond variables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Object properties" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "" + +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "" + +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "" + +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "" + +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "On properties" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "A complete example" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Adapting builtin commands" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "LilyPond Scheme interfaces" +msgstr "" + +#. Documentation/learning/tutorial.itely:210 (comment) +msgid "set the starting point to middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:241 (comment) +msgid "one octave above middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:257 (comment) +msgid "c is 1 staff space up, so is the c above" +msgstr "" + +#. Documentation/learning/tutorial.itely:258 (comment) +msgid "d is 2 up or 5 down, so is the d above" +msgstr "" + +#. Documentation/learning/tutorial.itely:259 (comment) +msgid "e is 3 up or 4 down, so is the e above" +msgstr "" + +#. Documentation/learning/tutorial.itely:260 (comment) +msgid "a is 6 up or 1 down, so is the a below" +msgstr "" + +#. Documentation/learning/tutorial.itely:261 (comment) +msgid "g is 5 up or 2 down, so is the g below" +msgstr "" + +#. Documentation/learning/tutorial.itely:262 (comment) +msgid "f is 4 up or 3 down, so is the f below" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely +msgid "Tutorial" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Compiling a file" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Producing output" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "MacOS X" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Windows" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to write input files" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Simple notation" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Pitches" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pitch" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "interval" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) +msgid "scale" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "middle C" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accidental" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Durations (rhythms)" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beam" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duration" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole note" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half note" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter note" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dotted note" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Rests" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rest" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Time signature" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time signature" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Tempo marks" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Clef" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "clef" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "All together" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Working on input files" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Dealing with errors" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "General troubleshooting tips" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Some common errors" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to read the manuals" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Clickable examples" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "" + +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/learning/fundamental.itely:3008 (variable) +msgid "violin" +msgstr "" + +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +msgid "cello" +msgstr "" + +#. Documentation/learning/common-notation.itely:1255 (variable) +msgid "tripletA" +msgstr "" + +#. Documentation/learning/common-notation.itely:1256 (variable) +msgid "barA" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +msgid "Common notation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Single staff notation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Bar checks" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Accidentals and key signatures" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Accidentals" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sharp" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flat" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double sharp" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double flat" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Key signatures" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key signature" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warning: key signatures and pitches" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "natural" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposition" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Pitch names" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Ties and slurs" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Ties" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tie" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Slurs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slur" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Phrasing slurs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrasing" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warnings: slurs vs. ties" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "articulation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Articulation and dynamics" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Articulations" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Fingerings" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fingering" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "Dynamics" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) +msgid "dynamics" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "crescendo" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "decrescendo" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding text" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Automatic and manual beams" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Advanced rhythmic commands" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Partial measure" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "anacrusis" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) +msgid "Tuplets" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note value" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triplet" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Grace notes" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grace notes" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "acciaccatura" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "appoggiatura" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Multiple notes at once" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Music expressions explained" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Analogy: mathematical expressions" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: multiple staves" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polyphony" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: single staff" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Multiple staves" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Staff groups" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brace" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Combining notes into chords" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chord" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Single staff polyphony" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Songs" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Setting simple songs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyrics" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Aligning lyrics to a melody" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "extender line" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Lyrics to multiple staves" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Final touches" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Organizing pieces with variables" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding titles" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Absolute note names" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "After the tutorial" +msgstr "" + +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:73 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:86 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +msgid "singer" +msgstr "" + +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) +msgid "vocal" +msgstr "" + +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) +msgid "piano" +msgstr "" + +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2592 (variable) +#. Documentation/learning/fundamental.itely:2654 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) +msgid "upper" +msgstr "" + +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2599 (variable) +#. Documentation/learning/fundamental.itely:2655 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) +msgid "lower" +msgstr "" + +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) +msgid "melody" +msgstr "" + +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) +msgid "text" +msgstr "" + +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) +msgid "main" +msgstr "" + +#. Documentation/learning/fundamental.itely:629 (comment) +#, fuzzy +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" +"Stimme·\\\"1\\\"··············Stimme·\\\"2\\\" Stimme \\\"3\\\"" + +#. Documentation/learning/fundamental.itely:639 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:654 (comment) +msgid "Voice \\\"1\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:659 (comment) +msgid "Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) +msgid "Main voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:684 (comment) +#, fuzzy +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +msgstr "" +"Stimme·\\\"1\\\"··············Stimme·\\\"2\\\" Stimme \\\"3\\\"" + +#. Documentation/learning/fundamental.itely:708 (comment) +msgid "Bar 1" +msgstr "" + +#. Documentation/learning/fundamental.itely:719 (comment) +msgid "Bar 2" +msgstr "" + +#. Documentation/learning/fundamental.itely:720 (comment) +msgid "Voice 1 continues" +msgstr "" + +#. Documentation/learning/fundamental.itely:723 (comment) +msgid "Voice 2 continues" +msgstr "" + +#. Documentation/learning/fundamental.itely:898 (comment) +msgid "Voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:900 (comment) +msgid "Voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:902 (comment) +msgid "Omit Voice three" +msgstr "" + +#. Documentation/learning/fundamental.itely:903 (comment) +msgid "Voice four" +msgstr "" + +#. Documentation/learning/fundamental.itely:1002 (comment) +msgid "Default behavior or behavior after \\oneVoice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1040 (comment) +msgid "The following notes are monophonic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1042 (comment) +msgid "Start simultaneous section of three voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1044 (comment) +msgid "Continue the main voice in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) +msgid "Initiate second voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1048 (comment) +msgid "Set stems, etc., down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) +msgid "Initiate third voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) +msgid "Set stems, etc, up" +msgstr "" + +#. Documentation/learning/fundamental.itely:1103 (comment) +msgid "Initiate first voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2303 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) +msgid "one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/learning/fundamental.itely:2569 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:64 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:63 (variable) +msgid "global" +msgstr "" + +#. Documentation/learning/fundamental.itely:1244 (variable) +msgid "SopOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1247 (variable) +msgid "SopOneLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1250 (variable) +msgid "SopTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1253 (variable) +msgid "SopTwoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1260 (context id) +msgid "SopOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1269 (context id) +msgid "SopTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/fundamental.itely:2901 (variable) +msgid "keyTime" +msgstr "" + +#. Documentation/learning/fundamental.itely:1303 (variable) +msgid "SopMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) +msgid "AltoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) +msgid "TenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) +msgid "BassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) +msgid "VerseOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) +msgid "VerseTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) +msgid "VerseThree" +msgstr "" + +#. Documentation/learning/fundamental.itely:1314 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) +msgid "VerseFour" +msgstr "" + +#. Documentation/learning/fundamental.itely:1321 (context id) +msgid "Sop" +msgstr "" + +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1141 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) +msgid "Alto" +msgstr "" + +#. Documentation/learning/fundamental.itely:1330 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1143 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) +msgid "Tenor" +msgstr "" + +#. Documentation/learning/fundamental.itely:1331 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1148 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) +msgid "Bass" +msgstr "" + +#. Documentation/learning/fundamental.itely:1475 (comment) +msgid "start of single compound music expression" +msgstr "" + +#. Documentation/learning/fundamental.itely:1476 (comment) +msgid "start of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1478 (comment) +msgid "create RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1481 (comment) +msgid "create voice for RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1482 (comment) +msgid "start of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1485 (comment) +msgid "end of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1486 (comment) +msgid "end of RH voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1487 (comment) +msgid "end of RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1488 (comment) +msgid "create LH staff; needs two simultaneous voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1491 (comment) +msgid "create LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1493 (comment) +msgid "start of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1496 (comment) +msgid "end of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1497 (comment) +msgid "end of LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1498 (comment) +msgid "create LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1500 (comment) +msgid "start of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1503 (comment) +msgid "end of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1504 (comment) +msgid "end of LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1505 (comment) +msgid "end of LH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1506 (comment) +msgid "end of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1507 (comment) +msgid "end of single compound music expression" +msgstr "" + +#. Documentation/learning/fundamental.itely:1726 (comment) +msgid "Wrong!" +msgstr "" + +#. Documentation/learning/fundamental.itely:1812 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) +msgid "make note heads smaller" +msgstr "" + +#. Documentation/learning/fundamental.itely:1815 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) +msgid "make note heads larger" +msgstr "" + +#. Documentation/learning/fundamental.itely:1818 (comment) +#. Documentation/learning/fundamental.itely:1993 (comment) +msgid "return to default size" +msgstr "" + +#. Documentation/learning/fundamental.itely:2282 (variable) +#. Documentation/learning/fundamental.itely:2570 (variable) +#. Documentation/notation/input.itely:1133 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) +msgid "sopranoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2289 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) +msgid "sopranoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:2293 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) +msgid "celloMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2574 (variable) +msgid "sopranoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) +msgid "altoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2581 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:79 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:78 (variable) +msgid "altoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2582 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) +msgid "tenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2586 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:85 (variable) +msgid "tenorWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2587 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) +msgid "bassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2591 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:92 (variable) +msgid "bassWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2608 (comment) +msgid "combine ChoirStaff and PianoStaff in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:2610 (context id) +#. Documentation/learning/fundamental.itely:2612 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (context id) +msgid "sopranos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2620 (context id) +#. Documentation/learning/fundamental.itely:2622 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:103 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:104 (context id) +msgid "altos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2630 (context id) +#. Documentation/learning/fundamental.itely:2632 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:113 (context id) +msgid "tenors" +msgstr "" + +#. Documentation/learning/fundamental.itely:2640 (context id) +#. Documentation/learning/fundamental.itely:2642 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:110 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:117 (context id) +msgid "basses" +msgstr "" + +#. Documentation/learning/fundamental.itely:2650 (comment) +msgid "end ChoirStaff" +msgstr "" + +#. Documentation/learning/fundamental.itely:2902 (variable) +msgid "ManualOneVoiceOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2906 (variable) +msgid "ManualOneVoiceTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2910 (variable) +msgid "ManualTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2914 (variable) +msgid "PedalOrganMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2920 (comment) +msgid "PianoStaff and Pedal Staff must be simultaneous" +msgstr "" + +#. Documentation/learning/fundamental.itely:2922 (context id) +msgid "ManualOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:2923 (comment) +msgid "set key and time signature" +msgstr "" + +#. Documentation/learning/fundamental.itely:2933 (comment) +msgid "end ManualOne Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2934 (context id) +msgid "ManualTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:2943 (comment) +msgid "end ManualTwo Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2944 (comment) +msgid "end PianoStaff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2945 (context id) +msgid "PedalOrgan" +msgstr "" + +#. Documentation/learning/fundamental.itely:2951 (comment) +msgid "end PedalOrgan Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2953 (comment) +msgid "end Score context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2969 (variable) +msgid "hornNotes" +msgstr "" + +#. Documentation/learning/fundamental.itely:2981 (variable) +msgid "fragmentA" +msgstr "" + +#. Documentation/learning/fundamental.itely:2982 (variable) +msgid "fragmentB" +msgstr "" + +#. Documentation/learning/fundamental.itely:3001 (variable) +msgid "dolce" +msgstr "" + +#. Documentation/learning/fundamental.itely:3004 (variable) +msgid "fthenp" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely +msgid "Fundamental concepts" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "How LilyPond input files work" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Introduction to the LilyPond file structure" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Score is a (single) compound musical expression" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Nesting music expressions" +msgstr "" + +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ossia" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "On the un-nestedness of brackets and ties" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Voices contain music" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "I'm hearing Voices" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Explicitly instantiating voices" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Note columns" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Voices and vocals" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Contexts and engravers" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Contexts explained" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Creating contexts" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Engravers explained" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Modifying context properties" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\with}" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\context}" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Adding and removing engravers" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing a single context" +msgstr "" + +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ambitus" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing all contexts of the same type" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Extending the templates" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Soprano and cello" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Four-part SATB vocal score" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Building a score from scratch" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "" + +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) +msgid "Increase thickness of immediately following slur only" +msgstr "" + +#. Documentation/learning/tweaks.itely:744 (comment) +msgid "Revert thickness of all following slurs to default of 1.2" +msgstr "" + +#. Documentation/learning/tweaks.itely:1421 (comment) +msgid "Don't print clefs in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1423 (comment) +msgid "Don't print time signatures in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1487 (comment) +msgid "Reduce all font sizes by ~24%" +msgstr "" + +#. Documentation/learning/tweaks.itely:1554 (comment) +msgid "Reduce stem length and line spacing to match" +msgstr "" + +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) +msgid "Set details for later Text Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) +msgid "Place dynamics above staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) +msgid "Start Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2006 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) +msgid "Add Text Script" +msgstr "" + +#. Documentation/learning/tweaks.itely:2012 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) +msgid "Stop Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2072 (comment) +msgid "Place following Ottava Bracket below Text Spanners" +msgstr "" + +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +msgid "Add Dynamic Text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2079 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2161 (comment) +msgid "Cause notes to space out to accommodate text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2184 (comment) +msgid "This markup is short enough to fit without collision" +msgstr "" + +#. Documentation/learning/tweaks.itely:2188 (comment) +msgid "This is too long to fit, so it is displaced upwards" +msgstr "" + +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) +msgid "Turn off collision avoidance" +msgstr "" + +#. Documentation/learning/tweaks.itely:2199 (comment) +msgid "and turn on textLengthOn" +msgstr "" + +#. Documentation/learning/tweaks.itely:2200 (comment) +msgid "Spaces at end are honored" +msgstr "" + +#. Documentation/learning/tweaks.itely:2307 (comment) +msgid "Extend width by 1 staff space" +msgstr "" + +#. Documentation/learning/tweaks.itely:2587 (comment) +msgid "This will not work, see below" +msgstr "" + +#. Documentation/learning/tweaks.itely:2591 (comment) +msgid "This works" +msgstr "" + +#. Documentation/learning/tweaks.itely:2627 (variable) +msgid "sesquisharp" +msgstr "" + +#. Documentation/learning/tweaks.itely:2630 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "" + +#. Documentation/learning/tweaks.itely:2635 (comment) +msgid "This improves the spacing" +msgstr "" + +#. Documentation/learning/tweaks.itely:2675 (comment) +msgid "Extend width by 1 unit" +msgstr "" + +#. Documentation/learning/tweaks.itely:2677 (comment) +msgid "Align dynamics to a base line 2 units above staff" +msgstr "" +"Dynamik-Zeichen an einer Linie ausrichten, die 2 Einheiten über dem System " +"ist" + +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) +msgid "rhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) +msgid "Start polyphonic section of four voices" +msgstr "" + +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +msgid "continuation of main voice" +msgstr "" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) +msgid "lhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1154 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) +msgid "RH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1160 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) +msgid "LH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) +msgid "Move the c2 out of the main note column so the merge will work" +msgstr "" +"Verschiebe das c2 aus der Hauptnotenkolumne, damit Verschmelzung funktioniert" + +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) +msgid "Stem on the d2 must be down to permit merging" +msgstr "" + +#. Documentation/learning/tweaks.itely:3368 (comment) +msgid "Reposition the c2 to the right of the merged note" +msgstr "" + +#. Documentation/learning/tweaks.itely:3379 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) +msgid "Visible tempo marking" +msgstr "" + +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) +msgid "Invisible tempo marking to lengthen fermata in MIDI" +msgstr "" + +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) +msgid "New tempo for next section" +msgstr "" + +#. Documentation/learning/tweaks.itely:3604 (variable) +msgid "emphasize" +msgstr "" + +#. Documentation/learning/tweaks.itely:3609 (variable) +msgid "normal" +msgstr "" + +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) +msgid "SopranoMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1139 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) +msgid "Soprano" +msgstr "" + +#. Documentation/learning/tweaks.itely:3672 (variable) +msgid "mpdolce" +msgstr "" + +#. Documentation/learning/tweaks.itely:3679 (variable) +msgid "inst" +msgstr "" + +#. Documentation/learning/tweaks.itely:4184 (comment) +msgid "Arrange to obtain color from color-notehead procedure" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely +msgid "Tweaking output" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Tweaking basics" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Introduction to tweaks" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Objects and interfaces" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Naming conventions of objects and properties" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Tweaking methods" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "The Internals Reference manual" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties of layout objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Finding the context" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Overriding once only" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Reverting" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties found in interfaces" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Specifying the context in lyric mode" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Types of properties" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Appearance of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Visibility and color of objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "stencil" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "break-visibility" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "transparent" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "color" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Size of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Length and thickness of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Placement of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Automatic behavior" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Within-staff objects" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely +msgid "Fingering" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Outside-staff objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "\\\\textLengthOn" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Grob sizing" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Collisions of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Moving objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Fixing overlapping notation" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "padding property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +#, fuzzy +msgid "right-padding" +msgstr "" +"left-padding (Verschieben nach rechts) und right-padding (Verschieben nach " +"links)" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-padding property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "self-alignment-X property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-position property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "extra-offset property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "positions property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "force-hshift property" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Real music example" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Further tweaking" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other uses for tweaks" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Tying notes across voices" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Simulating a fermata in MIDI" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Using variables for tweaks" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other sources of information" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Avoiding tweaks with slower processing" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Advanced tweaks with Scheme" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely +msgid "Templates" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Single staff" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes only" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and chords" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes, lyrics, and chords." +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Piano templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo piano" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano and melody with lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered dynamics" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet parts" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Vocal ensembles" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score and automatic piano reduction" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB with aligned contexts" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Hymn tunes" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Orchestral templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Orchestra, choir and piano" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Ancient notation templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Transcription of mensural music" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Gregorian transcription template" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Other templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Jazz combo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accelerando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alteration" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alto clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ascending interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmentation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmented interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bass clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "central C" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "contralto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "copying music" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cue-notes" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal niente" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "didymic comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminution" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "direct" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonant interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant ninth chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant seventh chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double appoggiatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double bar line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double dotted note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double time signature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double trill" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "embellishment" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "engraving" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "expression mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flag" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flageolet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grave" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "homophony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inversion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inverted interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leading note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leger line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ligature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyric tie" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maxima" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensural notation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "modulation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motive" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ninth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note" +msgstr "Noot" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note names" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave marking" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave sign" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ornament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "perfect interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrase" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric time signature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "portato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "power chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "presto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "proportion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "score" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "shake" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "song texts" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staves" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "symphony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +msgid "tenor" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "third" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triad" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "trill" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tritone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "upbeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond grammar" +msgstr "" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "" + +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "" + +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +msgid "Specialist notation" +msgstr "" + +#. Documentation/notation/input.itely:673 (comment) +msgid "not printed" +msgstr "" + +#. Documentation/notation/input.itely:1137 (variable) +msgid "allLyrics" +msgstr "" + +#. Documentation/notation/input.itely:1223 (variable) +#. Documentation/notation/input.itely:1242 (variable) +#. Documentation/notation/input.itely:1279 (variable) +#. Documentation/notation/input.itely:1294 (variable) +#. Documentation/notation/spacing.itely:1555 (variable) +#. Documentation/notation/spacing.itely:1609 (variable) +#. Documentation/notation/spacing.itely:1634 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:53 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely +msgid "General input and output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Input structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Structure of a score" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple scores in a book" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple output files from one input file" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Output file names" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "File structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Titles and headers" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +msgid "Custom headers footers and titles" +msgstr "" + +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Reference to page numbers" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Table of contents" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Working with input files" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Including LilyPond files" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Different editions from one source" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using variables" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using tags" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Text encoding" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Displaying LilyPond notation" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Controlling output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Extracting fragments of music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Skipping corrected music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "" + +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "MIDI output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating MIDI files" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "MIDI block" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "What goes into the MIDI output?" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Supported in MIDI" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Unsupported in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Repeats in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Controlling MIDI dynamics" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Dynamic marks" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Overall MIDI volume" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (i)" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (ii)" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Percussion in MIDI" +msgstr "" + +#. Documentation/notation/spacing.itely:2045 (comment) +msgid "The very low note here needs more room than 'space can" +msgstr "" + +#. Documentation/notation/spacing.itely:2046 (comment) +msgid "provide, so the distance between this staff and the next is" +msgstr "" + +#. Documentation/notation/spacing.itely:2047 (comment) +msgid "determined by 'padding." +msgstr "" + +#. Documentation/notation/spacing.itely:2050 (comment) +msgid "Here, 'space provides enough room, and there is no need to" +msgstr "" + +#. Documentation/notation/spacing.itely:2051 (comment) +msgid "compress the space (towards 'minimum-distance) to make room" +msgstr "" + +#. Documentation/notation/spacing.itely:2052 (comment) +msgid "for anything else on the page, so the distance between this" +msgstr "" + +#. Documentation/notation/spacing.itely:2053 (comment) +msgid "staff and the next is determined by 'space." +msgstr "" + +#. Documentation/notation/spacing.itely:2056 (comment) +msgid "By setting 'padding to a negative value, staves can be made to" +msgstr "" + +#. Documentation/notation/spacing.itely:2057 (comment) +msgid "collide. The lowest acceptable value for 'space is 0." +msgstr "" + +#. Documentation/notation/spacing.itely:2489 (comment) +msgid "this time the text will be closer to the staff" +msgstr "" + +#. Documentation/notation/spacing.itely:2491 (comment) +msgid "by setting outside-staff-priority to a non-number," +msgstr "" + +#. Documentation/notation/spacing.itely:2492 (comment) +msgid "we disable the automatic collision avoidance" +msgstr "" + +#. Documentation/notation/spacing.itely:2495 (comment) +msgid "now they will collide" +msgstr "" + +#. Documentation/notation/spacing.itely:2521 (comment) +msgid "the markup is too close to the following note" +msgstr "" + +#. Documentation/notation/spacing.itely:2525 (comment) +msgid "setting outside-staff-horizontal-padding fixes this" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely +msgid "Spacing issues" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Page layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\paper} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Setting paper size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Automatic scaling to paper size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Horizontal spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Other \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Other @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Miscellaneous @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Score layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\layout block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\layout} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page turning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Minimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Using an extra voice for breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Vertical spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing within systems" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Within-system spacing properties" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of ungrouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of grouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit staff and system positioning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical collision avoidance" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing overview" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "New spacing area" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line length" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Proportional notation" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Fitting music onto fewer pages" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Displaying spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing spacing" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:451 (variable) +msgid "keepVoicesAlive" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:453 (comment) +msgid "Keep Voice \\\"A\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:454 (comment) +msgid "Keep Voice \\\"B\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) +msgid "accompaniment" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:74 (variable) +msgid "words" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:497 (comment) +msgid "Keep Voice \\\"melody\\\" alive for 4 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) +msgid "skip a bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2017 (comment) +msgid "default space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2023 (comment) +msgid "reduced space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2025 (comment) +msgid "this is the nested declaration" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2480 (comment) +msgid "increase the length of the tie" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2489 (comment) +msgid "increase the length of the rest bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2497 (comment) +msgid "increase the length of the hairpin" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2525 (comment) +msgid "default" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2528 (comment) +#. Documentation/notation/changing-defaults.itely:2541 (comment) +msgid "not effective alone" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2532 (comment) +#. Documentation/notation/changing-defaults.itely:2545 (comment) +msgid "effective only when both overrides are present" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2922 (comment) +msgid "Remove bar line at the end of the current line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2968 (comment) +msgid "Try to remove all key signatures" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3392 (comment) +msgid "move horizontally left" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3394 (comment) +msgid "move vertically up" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3395 (comment) +msgid "third finger" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3443 (comment) +#. Documentation/notation/changing-defaults.itely:3482 (comment) +msgid "The rehearsal mark will be centered above the Clef" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3449 (comment) +msgid "The rehearsal mark will be centered above the Time Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3456 (comment) +msgid "The rehearsal mark will be centered above the Breath Mark" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3476 (comment) +msgid "The rehearsal mark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3489 (comment) +msgid "The rehearsal mark will be centered above the Bar Line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3504 (comment) +msgid "The RehearsalMark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3511 (comment) +#. Documentation/notation/changing-defaults.itely:3527 (comment) +#. Documentation/notation/changing-defaults.itely:3534 (comment) +msgid "" +"The RehearsalMark will be aligned with the left edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3516 (comment) +msgid "" +"The RehearsalMark will be aligned with the right edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3528 (comment) +msgid "and then shifted right by 3.5 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3535 (comment) +msgid "and then shifted left by 2 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3583 (variable) +msgid "XinO" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3825 (variable) +msgid "custosNote" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely +msgid "Changing defaults" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Interpretation contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Score - the master of all contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Top-level contexts - staff containers" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Intermediate-level contexts - staves" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Bottom-level contexts - voices" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Keeping contexts alive" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying context plug-ins" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Changing context default settings" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Defining new contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Explaining the Internals Reference" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Navigating the program reference" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Layout interfaces" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Determining the grob property" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Naming conventions" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Modifying properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Overview of modifying properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The set command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The override command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The tweak command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "set versus override" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying alists" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Useful concepts and properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Input modes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Direction and placement" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Context layout order" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Distances and measurements" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Staff symbol properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Spanners" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{spanner-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{line-spanner-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Visibility of objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Removing the stencil" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Making objects transparent" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Painting objects white" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using break-visibility" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Special considerations" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Line styles" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Rotating objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating layout objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating markup" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Advanced tweaks" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Setting X-offset and Y-offset directly" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Setting @code{X-offset} and @code{Y-offset} directly" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the side-position-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{side-position-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the self-alignment-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{self-alignment-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{aligned-on-parent} procedures" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{centered-on-parent} procedures" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the break-alignable-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{break-alignable-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Vertical grouping of grobs" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying stencils" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying shapes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Modifying ties and slurs" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Using music functions" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +msgid "Notation manual tables" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined fretboard diagrams" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Time Signature glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accidental glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Rest glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dynamic glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Note head styles" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup commands" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of articulations" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Articulation scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ornament scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Percussion notes" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "closure" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "interface" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "All context properties" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Layout properties" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined type predicates" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Scheme functions" +msgstr "" + +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +msgid "Cheat sheet" +msgstr "" + +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "" + +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/usage/running.itely +msgid "Standard shell commands" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "LilyPond in chroot jail" +msgstr "" + +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "" + +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" +msgstr "" + +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +#, fuzzy +msgid "Sharing the table of contents" +msgstr "Inhoudsopgave" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" +msgstr "" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "Andere editors" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "Other formats" +msgstr "Andere formaten" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "" + +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "MIDI articulation" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +msgid "Suggestions for writing files" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) +msgid "discant" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) +msgid "dot" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) +msgid "16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) +msgid "accBasson" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) +msgid "een korig 8 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) +msgid "accBandon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) +msgid "accVCello" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) +msgid "4-8-16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) +msgid "accHarmon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) +msgid "accTrombon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) +msgid "eenkorig 4 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) +msgid "accOrgan" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) +msgid "accMaster" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) +msgid "accAccord" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) +msgid "accMusette" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) +msgid "accCeleste" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) +msgid "accOboe" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) +msgid "accClarin" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) +msgid "accPiccolo" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) +msgid "accViolin" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) +msgid "continuo" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) +msgid "bassStaff" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) +msgid "drh" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) +msgid "drl" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) +msgid "timb" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) +msgid "threeTwo" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) +msgid "threeFour" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:48 (variable) +msgid "cueWhile" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:61 (variable) +msgid "flute" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:67 (variable) +msgid "clarinet" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:76 (variable) +msgid "pianoRH" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:81 (variable) +msgid "pianoLH" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) +msgid "first, define a variable to hold the formatted date:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) +msgid "date" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) +msgid "d-%m-%Y\\\" (localtime (current-time)))" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) +msgid "use it in the title block:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) +msgid "and use it in a \\markup block:" +msgstr "" + +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) +msgid "voiceFive" +msgstr "" + +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +msgid "graceNotes" +msgstr "" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) +msgid "Default layout:" +msgstr "" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) +msgid "Reducing the minimum space below the staff and above the lyrics:" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) +msgid "Increase the size of the bar number by 2" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) +msgid "Print a bar number every second measure" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) +msgid "Center-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) +msgid "Left-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) +msgid "the RehearsalMark will be centered above the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) +msgid "" +"the RehearsalMark will be aligned with the left edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) +msgid "" +"the RehearsalMark will be aligned with the right edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) +msgid "and then shifted right by one unit." +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) +msgid "upperStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:49 (comment) +msgid "\\break % 1 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:60 (comment) +msgid "\\break %2 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:72 (comment) +msgid "\\break % 3 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:87 (comment) +msgid "\\break % 4 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) +msgid "\\break % 5 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) +msgid "\\break % 6 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) +msgid "\\break % 7 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:126 (comment) +msgid "\\break % 8 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:129 (comment) +msgid "\\break % 12 (32*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) +msgid "lowerStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:144 (comment) +msgid "\\break % 2 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:149 (comment) +msgid "\\break % 4 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:188 (comment) +msgid "\\break % 9 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:190 (comment) +msgid "lig" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:194 (comment) +msgid "\\break % 11 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:205 (comment) +msgid "\\break % 12 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) +msgid "incipit" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) +msgid "tight spacing" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +msgid "turn off bar lines" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) +msgid "need this extra \\skip such that clef change comes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) +msgid "after bar line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) +msgid "CHECK: no effect?" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) +msgid "turn bar lines on again" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) +msgid "FIXME: setting printKeyCancellation back to #t must not" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) +msgid "occur in the first bar after the incipit. Dto. for forceClef." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) +msgid "Therefore, we need an extra \\skip." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) +msgid "the actual music" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) +msgid "let finis bar go through all staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) +msgid "finis bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) +msgid "discantusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) +msgid "two bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) +msgid "eight bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) +msgid "one bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) +msgid "discantusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) +msgid "altusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) +msgid "seven bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) +msgid "altusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) +msgid "tenorNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) +msgid "four bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) +msgid "tenorLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) +msgid "bassusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) +msgid "bassusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) +msgid "choirStaff" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) +msgid "no bars in staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) +msgid "incipit should not start with a start delimiter" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) +msgid "no slurs" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) +msgid "Comment in the below \\\"\\remove\\\" command to allow line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) +msgid "breaking also at those barlines where a note overlaps" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) +msgid "into the next bar. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) +msgid "short example score, but especially for large scores, you" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) +msgid "will typically yield better line breaking and thus improve" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) +msgid "overall spacing if you comment in the following command." +msgstr "" +"auch die Aufteilung der Noten verbessert sich, wenn der folgende Befehl " +"benutzt wird:" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) +msgid "\\remove \\\"Forbid_line_break_engraver\\\"" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +msgid "tick" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +msgid "Use markup to center the chant on the page" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +msgid "centered" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) +msgid "End score" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) +msgid "End markup" +msgstr "" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) +msgid "fragment" +msgstr "" + +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) +msgid "slurNotes" +msgstr "" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +msgid "Default behavior" +msgstr "" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) +msgid "Set default beaming for all staves" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) +msgid "Modify beaming for just this staff" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) +msgid "Inherit beaming from Score context" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) +msgid "Modify beaming for this voice only" +msgstr "" + +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) +msgid "rhythm 2-3-2" +msgstr "" + +#. Documentation/snippets/book-parts.ly:22 (comment) +msgid "book paper, which is inherited by all children bookparts" +msgstr "" + +#. Documentation/snippets/book-parts.ly:25 (comment) +msgid "Page footer: add a different part-tagline at part last page" +msgstr "" + +#. Documentation/snippets/book-parts.ly:29 (comment) +msgid "Copyright header field only on book first page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:33 (comment) +msgid "Part tagline header field only on each part last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:37 (comment) +msgid "Tagline header field only on book last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:44 (comment) +msgid "book header, which is inherited by the first bookpart" +msgstr "" + +#. Documentation/snippets/book-parts.ly:53 (comment) +msgid "a different page breaking function may be used on each part" +msgstr "" +"andere Seitenumbruchfunktionen können für jeden Abschnitt benutzt werden" + +#. Documentation/snippets/breathing-signs.ly:20 (comment) +msgid "this bar contains no \\breathe" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:22 (comment) +msgid "Modern notation:" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:23 (comment) +msgid "by default, \\breathe uses the rcomma, just as if saying:" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:24 (comment) +msgid "" +"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" +"\\\")" +msgstr "" +"\\override·BreathingSign·#'text·=·#(make-musicglyph-markup·\\\"scripts.rcomma" +"\\\")" + +#. Documentation/snippets/breathing-signs.ly:27 (comment) +msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:28 (comment) +msgid "N.B.: must use Staff context here, since we start a Voice below" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:32 (comment) +msgid "vee" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) +msgid "construct the symbol" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) +msgid "set the breathe mark back to normal" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) +msgid "hairpinWithCenteredText" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) +msgid "hairpinMolto" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) +msgid "hairpinMore" +msgstr "" + +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) +msgid "smallFlageolet" +msgstr "" + +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +msgid "Default setting" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +msgid "The following is only here to print the names of the" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +msgid "chords styles; it can be removed if you do not need to" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) +msgid "print them." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:182 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) +msgid "{" +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:184 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) +msgid "}" +msgstr "" + +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +msgid "sustainNotes" +msgstr "" + +#. Documentation/snippets/chant-or-psalms-notation.ly:35 (variable) +msgid "stemOn" +msgstr "" + +#. Documentation/snippets/chant-or-psalms-notation.ly:36 (variable) +msgid "stemOff" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) +msgid "modify maj9 and 6(add9)" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) +msgid "Exception music is chords with markups" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) +msgid "chExceptionMusic" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) +msgid "Convert music to list and prepend to existing exceptions." +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) +msgid "chExceptions" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) +msgid "theMusic" +msgstr "" + +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +msgid "\\break" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +msgid "sop" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:65 (variable) +msgid "origScore" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:83 (comment) +msgid "Each clip-region is a (START . END) pair" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:84 (comment) +msgid "where both are rhythmic-locations." +msgstr "" + +#. Documentation/snippets/clip-systems.ly:86 (comment) +msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:87 (comment) +msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) +msgid "Association list of pitches to colors." +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) +msgid "Compare pitch and alteration (not octave)." +msgstr "" + +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) +msgid "piuF" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) +msgid "musicUp" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) +msgid "musicDown" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" +msgstr "" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) +msgid "parenF" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) +msgid "the hidden measure and bar line" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) +msgid "Set global properties of fret diagram" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) +msgid "mel" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) +msgid "C major for guitar, no barre, using defaults" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) +msgid "terse style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) +msgid "size 1.0" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) +msgid "standard size" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) +msgid "no barre, fret label down or left, small mute label font" +msgstr "" +"kein Barre, Bundbezeichnung unten oder links, kleine Schrift für stumme Saite" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) +msgid "larger dots, centered dots, fewer frets" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) +msgid "label below string" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +msgid "notes." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +msgid "Ambitus engraving logics" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +msgid "add FretBoards for the Cuatro" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) +msgid "Note: This section could be put into a separate file" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:86 (comment) +msgid "predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (comment) +msgid "and \\included into each of your compositions" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +msgid "cuatroTuning" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +msgid "dSix" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +msgid "dMajor" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) +msgid "aMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:94 (variable) +msgid "dMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:95 (variable) +msgid "gMajor" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:113 (comment) +msgid "end of potential include file /predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:118 (variable) +msgid "primerosNames" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:122 (variable) +msgid "primeros" +msgstr "" + +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) +msgid "baseMelody" +msgstr "" + +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) +msgid "Must be lower than the actual number of staff lines" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) +msgid "fixA" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) +msgid "fixB" +msgstr "" + +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:21 (comment) +msgid "new voice ( = \\voiceOne), hidden" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:23 (comment) +msgid "attach glissando to note heads" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:28 (comment) +msgid "original voice with chords rearranged so that" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:29 (comment) +msgid "glissando is attached to a & c" +msgstr "" + +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) +msgid "" +"Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +msgid "mycresc" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +msgid "mydecresc" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:61 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:62 (variable) +msgid "crpoco" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:67 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:68 (variable) +msgid "cresc" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:73 (variable) +msgid "dim" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:78 (variable) +msgid "decresc" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) +msgid "PostScript is a registered trademark of Adobe Systems Inc." +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) +msgid "sample music" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) +msgid "topVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) +msgid "botVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) +msgid "hoom" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) +msgid "pah" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) +msgid "setup for Request->Element conversion. Guru-only" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:209 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:222 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:278 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:292 (variable) +msgid "MyStaff" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:139 (comment) +msgid "explicitly set instrumentName, so we don't get" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "weird effects when doing instrument names for" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +msgid "piano staves" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:150 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:236 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:249 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:262 (variable) +msgid "MyVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:165 (comment) +msgid "must come before all" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:175 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +msgid "extendOn" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:40 (variable) +msgid "centermarkup" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:96 (comment) +msgid "Text indicators" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:97 (variable) +msgid "abanico" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:98 (variable) +msgid "rasgueaso" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:99 (variable) +msgid "alzapua" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:101 (comment) +msgid "Finger stroke symbols" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:102 (variable) +msgid "strokeUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:112 (variable) +msgid "strokeDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:122 (comment) +msgid "Golpe symbol" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:123 (variable) +msgid "golpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:137 (variable) +msgid "strokeUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:138 (variable) +msgid "iUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:140 (comment) +msgid "Strokes for all fingers" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:141 (variable) +msgid "pUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:142 (variable) +msgid "pDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:143 (variable) +msgid "iUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:144 (variable) +msgid "iDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:145 (variable) +msgid "mUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:146 (variable) +msgid "mDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:147 (variable) +msgid "aUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:148 (variable) +msgid "aDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:149 (variable) +msgid "xUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:150 (variable) +msgid "xDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:153 (comment) +msgid "Just handy :)" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:154 (variable) +msgid "tupletOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:159 (variable) +msgid "tupletsOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:164 (variable) +msgid "tupletsOn" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:169 (variable) +msgid "headsOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:175 (variable) +msgid "headsOn" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) +msgid "Example 1" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) +msgid "Example 2" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) +msgid "Example 3" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) +msgid "Example 4" +msgstr "" + +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) +msgid "slap" +msgstr "" + +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +msgid "example" +msgstr "" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) +msgid "" +"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" +"msg00215.html" +msgstr "" +"Tipp von http://lists.gnu.org/archive/html/lilypond-user/2007-12/msg00215." +"html" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +msgid "lyr" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) +msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) +msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" +msgstr "" +"Punktgröße .35 von Bundzwischenraum, Punktposition .55 von Bundzwischenraum" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) +msgid "These chords will be in normal orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) +#, python-format +msgid "110% of default size" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) +msgid "Double barre used to test barre function" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) +msgid "C major for guitar, with capo on third fret" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) +msgid "simple D chord, large top fret thickness" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) +msgid "These chords will be in landscape orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) +msgid "These chords will be in opposing-landscape orientation" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:49 (comment) +msgid "Make a blank new fretboard table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:52 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:55 (comment) +msgid "Add a chord to custom-fretboard-table-one" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:61 (comment) +msgid "Add a chord to custom-fretboard-table-two" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +msgid "fingering orientations" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +msgid "ssnor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +msgid "rit" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +msgid "dimin" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) +msgid "this moves them up one staff space from the default position" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) +msgid "set up grids" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) +msgid "set the grid interval to one quarter note" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) +msgid "this moves them to the right half a staff space" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) +msgid "hides staff and notes so that only the grid lines are visible" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) +msgid "dummy notes to force regular note spacing" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) +msgid "center grid lines horizontally below note heads" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +msgid "set line length and positioning:" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +msgid "two staff spaces above center line on hidden staff" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) +msgid "to four spaces below center line on visible staff" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) +msgid "drum" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +msgid "Solution 1: Using a simple markup with a particular halign value" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) +msgid "etc. will have no effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) +msgid "semppMarkup" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +msgid "Solution 2: Using a dynamic script & shifting with" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +msgid "\\once \\override ... #'X-offset = .." +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) +msgid "Drawback: \\once \\override needed for every invocation" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) +msgid "semppK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +msgid "Solution 3: Padding the dynamic script so the center-alignment" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +msgid "puts it at the correct position" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) +msgid "" +"Drawback: the padding really reserves the space, nothing else can be there" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) +msgid "semppT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +msgid "other stuff there => collisions" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) +msgid "same alignment as without the additional text" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) +msgid "semppM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) +msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) +msgid "semppG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) +msgid "Drawback: One needs to set DynamicText #'X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) +msgid "semppMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) +msgid "s" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) +msgid "sMarkup" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) +msgid "sK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) +msgid "sT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) +msgid "sM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) +msgid "sG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) +msgid "sMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) +msgid "Setting to ##f (false) gives the same result" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) +msgid "harmonies" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) +msgid "THIS LINE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) +msgid "HERE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:50 (variable) +msgid "Timeline" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +msgid "Start score" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +msgid "Start pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +msgid "Start Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +msgid "End Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +msgid "End Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +msgid "Start Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +msgid "End Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +msgid "End pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +msgid "don't indent first system" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +msgid "shorten line length to suit music" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) +msgid "discantusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) +msgid "altusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) +msgid "two measures" +msgstr "" + +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) +msgid "tenorIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) +msgid "bassusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:265 (comment) +msgid "no bar lines in staves or lyrics" +msgstr "" + +#. Documentation/snippets/incipit.ly:268 (comment) +msgid "the next two instructions keep the lyrics between the bar lines" +msgstr "" +"mit den zwei nächsten Befehlen wird der Text zwischen den Taktstrichen " +"gehalten" + +#. Documentation/snippets/incipit.ly:279 (comment) +msgid "breaking also at those bar lines where a note overlaps" +msgstr "" + +#. Documentation/snippets/incipit.ly:280 (comment) +msgid "into the next measure. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) +msgid "tuning" +msgstr "" + +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) +msgid "#(set-global-staff-size 16)" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) +msgid "Some macros %%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) +msgid "sl" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) +msgid "nsl" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) +msgid "crOn" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) +msgid "crOff" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) +msgid "insert chord name style stuff here." +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) +msgid "jazzChords" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) +msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) +msgid "Key" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) +msgid "############ Horns ############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) +msgid "------ Trumpet ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) +msgid "trpt" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) +msgid "trpHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) +msgid "trumpet" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) +msgid "------ Alto Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) +msgid "altoHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) +msgid "altoSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) +msgid "------ Baritone Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) +msgid "bari" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) +msgid "bariHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) +msgid "bariSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) +msgid "------ Trombone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) +msgid "tbone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) +msgid "tboneHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) +msgid "trombone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) +msgid "############ Rhythm Section #############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) +msgid "------ Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) +msgid "gtr" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) +msgid "gtrHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) +msgid "------ Piano ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) +msgid "rhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) +msgid "rhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) +msgid "lhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) +msgid "lhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) +msgid "PianoRH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) +msgid "PianoLH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) +msgid "------ Bass Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) +msgid "------ Drums ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) +msgid "drumContents" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) +#, python-format +msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) +msgid "horns" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) +msgid "altosax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) +msgid "barichords" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) +msgid "barisax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) +msgid "chords" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "" + +#. Documentation/snippets/makam-example.ly:55 (comment) +msgid "Initialize makam settings" +msgstr "" + +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) +msgid "bassfigures" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) +msgid "from upper staff-line (position 2) to center (position 0)" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) +msgid "from center to one above center (position 1)" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) +msgid "speakOn" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) +msgid "speakOff" +msgstr "" + +#. Documentation/snippets/markup-lines.ly:23 (comment) +msgid "Candide, Voltaire" +msgstr "" + +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) +msgid "the final bar line is not interrupted" +msgstr "" + +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) +msgid "normalPos" +msgstr "" + +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) +msgid "dashPlus" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) +msgid "Set tuplets to be extendable..." +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) +msgid "...to cover all items up to the next note" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) +msgid "...or to cover just whitespace" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +msgid "space for instrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) +msgid "fluteMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) +msgid "clarinetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) +msgid "trumpetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +msgid "hornMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) +msgid "percussionMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) +msgid "altoIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) +msgid "altoIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) +msgid "altoILyrics" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) +msgid "altoIILyrics" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) +msgid "pianoRHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) +msgid "pianoLHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) +msgid "violinIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) +msgid "violinIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) +msgid "violaMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:146 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:149 (comment) +msgid "applies to split up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:156 (comment) +msgid "applies to down stems" +msgstr "" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) +msgid "stick" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) +msgid "Permit line breaks within tuplets" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) +msgid "Allow beams to be broken at line breaks" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) +msgid "Insert a manual line break within a tuplet" +msgstr "" + +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) +msgid "pedal" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) +msgid "tab" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) +msgid "They can be moved with an override" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) +msgid "A value of 0 is the default position;" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) +msgid "the following trick moves the rest to the center line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) +msgid "They remain separated even in empty measures" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) +msgid "This brings them together even though there are two voices" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) +msgid "Set segno sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) +msgid "\\once \\override Score.RehearsalMark #'font-size = #3" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) +msgid "Set coda sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) +msgid "Should Coda be on anew line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) +msgid "Coda NOT on new line: use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) +msgid "Coda on new line: DON'T use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) +msgid "\\noBreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) +msgid "" +"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " +"lines." +msgstr "" +"\\cadenzaOn unterdrückt die Taktzählung und \\stopStaff entfernt Notenlinien" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) +msgid "text line-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) +msgid "==================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) +msgid "Move text to the desired position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) +msgid "| s1*0^\\markup { D.S. al Coda } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) +msgid "text center-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) +msgid "====================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) +msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) +msgid "text and symbols center-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) +msgid "===============================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) +msgid "" +"Move text to the desired position and tweak spacing for optimum text " +"alignment" +msgstr "" +"Text zur gewünschten Position verschieben und Platzbedarf für " +"optimalesErgebnis verändern." + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) +msgid "Increasing the unfold counter will expand the staff-free space" +msgstr "" +"wenn der unfold-Zähler höher gesetzt wird, vergrößert sich der Platz ohne " +"System" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) +msgid "Resume bar count and show staff lines again" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) +msgid "Should Coda be on new line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) +msgid "Coda NOT on new line: DON'T use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) +msgid "Coda on new line: use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) +msgid "Show up, you clef and key!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) +msgid "Set coda sign as rehearsal mark and adjust size and position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) +msgid "" +"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" +"position" +msgstr "" +"Coda-Zeichen über den Schlüssel setzen abhängig von Zeilenpositionvon Coda" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) +msgid "Coda NOT on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) +msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) +msgid "Coda on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) +msgid "The coda" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) +msgid "Prevent bar numbers at the end of a line and permit them elsewhere" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) +msgid "Draw a box round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) +msgid "Draw a circle round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) +msgid "Rehearsal marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) +msgid "Bassklarinette" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) +msgid "Perkussion" +msgstr "" + +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:24 (context id) +msgid "voc" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) +msgid "quoteTest" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) +msgid "french horn" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) +msgid "quoteMe" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) +msgid "original" +msgstr "" + +#. Documentation/snippets/recorder-fingering-chart.ly:38 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) +msgid "startAcciaccaturaMusic" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) +msgid "stopAcciaccaturaMusic" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) +msgid "To use the setting globally, uncomment the following line:" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) +msgid "\\override VerticalAxisGroup #'remove-first = ##t" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) +msgid "To use the setting globally, comment this line," +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) +msgid "uncomment the line in the \\layout block above" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) +msgid "Default beaming" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) +msgid "Set new values for beam endings" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) +msgid "Macro to print single slash" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) +msgid "rs" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) +msgid "Function to print a specified number of slashes" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) +msgid "comp" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +#, fuzzy +msgid "sopranonotes" +msgstr "Voetnoten" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +msgid "sopranowords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +#, fuzzy +msgid "altonotes" +msgstr "Voetnoten" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +msgid "altowords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +#, fuzzy +msgid "tenornotes" +msgstr "Voetnoten" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +msgid "tenorwords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +#, fuzzy +msgid "bassnotes" +msgstr "Noot" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +msgid "basswords" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) +msgid "NoStem" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) +msgid "NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) +msgid "ZeroBeam" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) +msgid "staffTabLine" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated with a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) +msgid "" +"disable the following line to see the the noteheads while writing the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) +msgid "The beam between 8th-notes is used to draw the push-line" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) +msgid "" +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) +msgid "2. uncomment the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) +msgid "3. compile" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) +msgid "" +"In the score-picture click on the position the push- or pull-part starts" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) +msgid "(on the noteHead, the cursor will change to a hand-icon)." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) +msgid "The cursor in the source code will jump just at this position." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) +msgid "a) If a push-part starts there, replace the 'c' by an 'e['" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) +msgid "b) If a pull-part starts there, replace the 'c' by an 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) +msgid "" +"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " +"e] s s)" +msgstr "" +"9. Es sollte jetzt aussehen wie (s·s·e[·c·|·c·c·c·c·c·c·c·c·|·c·c·c·c·c·c·e]" +"·s·s)" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) +msgid "10. re-enable the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) +msgid "1. Place a copy of the piano melody below" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) +msgid "" +"2. Separate piano melody into pull- and push-parts according to the " +"staffTabLine you've already made" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) +msgid "Tips:" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) +msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) +msgid "AccordionTabTwoCBesDur" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) +msgid "pull 1" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) +msgid "push 2" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) +msgid "pull 3" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) +msgid "2 r8 }" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) +msgid "1. Place a copy of the piano melody above" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) +msgid "change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) +msgid "4/4 - tact. How many beats per bar" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) +msgid "The following line has to be adjusted O-F-T-E-N." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) +msgid "staffVoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) +msgid "staffAccordionMel" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) +msgid "BassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) +msgid "LyricBassRhythmI" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) +msgid "staffBassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) +msgid "" +"This is not a RhythmicStaff because it must be possible to append lyrics." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) +msgid "x.y" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated by a grid" +msgstr "" +"Zeigt eine horizontale Linie. Die vertikale Linie (wie eine Taktlinie) " +"istvon einer Gitterlinie simuliert" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" +msgstr "" + +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +#, fuzzy +msgid "notes" +msgstr "Noot" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +msgid "trillFlat" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +msgid "LH staff" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) +msgid "verseI" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) +msgid "verseII" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) +msgid "staffMelody" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) +msgid "voiceMelody" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:38 (variable) +msgid "trompette" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "" + +#. Documentation/snippets/stemlets.ly:36 (comment) +msgid "N.B. use Score.Stem to set for the whole score." +msgstr "" + +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) +msgid "violinOne" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) +msgid "violinTwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) +msgid "viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) +msgid "piece.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) +msgid "(This is the global definitions file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) +msgid "Violinone" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) +msgid "*********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) +msgid "Violintwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) +msgid "Viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) +msgid "Cello" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) +msgid "**********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) +msgid "These are the other files you need to save on your computer" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) +msgid "score.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) +msgid "(This is the main file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) +#, python-format +msgid "" +"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " +"separate file" +msgstr "" +"\\include \\\"piece.ly\\\" %%% Zeile einkommentieren, wenn eine " +"extra Datei benutzt wird" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) +msgid "{ Uncomment this block when using separate files" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) +msgid "vn1.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) +msgid "(This is the Violin 1 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) +msgid "vn2.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) +msgid "(This is the Violin 2 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) +msgid "vla.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) +msgid "(This is the Viola part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) +msgid "vlc.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) +msgid "(This is the Cello part file)" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:78 (comment) +msgid "Set beam sub-group length to an eighth note" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:83 (comment) +msgid "Set beam sub-group length to a sixteenth note" +msgstr "" + +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) +msgid "ignore" +msgstr "" + +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "" + +#. Documentation/snippets/text-headword.ly:45 (comment) +msgid "RH staff" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) +msgid "New command to add a three sided box, with sides north, west and south" +msgstr "" +"Neuer Befehl um einen Kasten mit drei Seiten (Nord, West und Süd) zu " +"erstellen" + +#. Documentation/snippets/three-sided-box.ly:18 (comment) +msgid "Based on the box-stencil command defined in scm/stencil.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:34 (comment) +msgid "in scm/define-markup-commands.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:46 (comment) +msgid "Test it:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +msgid "Revert to default style:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) +msgid "make the staff lines invisible on staves" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) +msgid "incipitDiscantus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) +msgid "incipitAltus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) +msgid "incipitTenor" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) +msgid "incipitBassus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) +msgid "" +"StaffGroup is used instead of ChoirStaff to get bar lines between systems" +msgstr "" +"StaffGroup wird anstelle von ChoirStaff benutzt, um Taktstriche zwischen " +"Systemen zu haben" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) +msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) +msgid "between the lyrics." +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" +msgstr "" + +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) +msgid "naturalizeMusic" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) +msgid "The default treble clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) +msgid "The standard bass clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) +msgid "The baritone clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) +msgid "The standard choral tenor clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) +msgid "A non-standard clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) +msgid "The following clef changes do not preserve" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) +msgid "the normal relationship between notes and clefs:" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) +msgid "Return to the normal clef:" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +msgid "Abreviations" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +msgid "accel" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +msgid "Strings" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +msgid "norm" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +msgid "quatre" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +msgid "tupletbp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +msgid "noflag" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +msgid "Score" +msgstr "" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +#, fuzzy +msgid "testnotes" +msgstr "Voetnoten" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) +msgid "parallelogram" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +msgid "myNoteHeads" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) +msgid "normalNoteHeads" +msgstr "" + +#. Documentation/snippets/utf-8.ly:19 (comment) +msgid "end verbatim - this comment is a hack to prevent texinfo.tex" +msgstr "" + +#. Documentation/snippets/utf-8.ly:20 (comment) +msgid "from choking on non-European UTF-8 subsets" +msgstr "" + +#. Documentation/snippets/utf-8.ly:22 (comment) +msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" +msgstr "" + +#. Documentation/snippets/utf-8.ly:40 (comment) +msgid "Cyrillic font" +msgstr "" + +#. Documentation/snippets/utf-8.ly:41 (variable) +msgid "bulgarian" +msgstr "" + +#. Documentation/snippets/utf-8.ly:45 (variable) +msgid "hebrew" +msgstr "" + +#. Documentation/snippets/utf-8.ly:49 (variable) +msgid "japanese" +msgstr "" + +#. Documentation/snippets/utf-8.ly:56 (comment) +msgid "\\\"a legal song to you\\\"" +msgstr "" + +#. Documentation/snippets/utf-8.ly:57 (variable) +msgid "portuguese" +msgstr "" + +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +msgid "upline" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) +msgid "leftbrace" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) +msgid "rightbrace" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) +msgid "dropLyrics" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) +msgid "raiseLyrics" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) +msgid "skipFour" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) +msgid "lyricsA" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) +msgid "lyricsB" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) +msgid "lyricsC" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) +msgid "lyricsD" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) +msgid "m" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) +msgid "sopMusic" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) +msgid "sopWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:99 (context id) +msgid "women" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) +msgid "men" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) +msgid "we could remove the line about this with the line below, since we want" +msgstr "" +"die Zeile oberhalb könnte mir der Zeile unterhalb entfernt werden, weil" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) +msgid "the alto lyrics to be below the alto Voice anyway." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) +msgid "again, we could replace the line above this with the line below." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +msgid "refrain" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +#, fuzzy +msgid "SoloNotes" +msgstr "Voetnoten" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +msgid "SoloLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +msgid "SopranoNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +msgid "SopranoLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +msgid "BassNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +msgid "BassLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +msgid "SoloVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +msgid "SopranoVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +msgid "BassVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" +msgstr "" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) +msgid "voltaMusic" +msgstr "" + +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "" + +msgid "Up:" +msgstr "Omhoog:" + +msgid "Next:" +msgstr "Volgende:" + +msgid "Previous:" +msgstr "Vorige:" + +msgid "Appendix " +msgstr "Appendix " + +msgid "Footnotes" +msgstr "Voetnoten" + +msgid "Table of Contents" +msgstr "Inhoudsopgave" diff --git a/Documentation/po/zh.po b/Documentation/po/zh.po new file mode 100644 index 0000000000..b5fc86a301 --- /dev/null +++ b/Documentation/po/zh.po @@ -0,0 +1,10045 @@ +# translation of LilyPond documentation +# Copyright (C) 2006 Han-Wen Nienhuys, Jan Nieuwenhuizen +# This file is distributed under the same license as the lilypond package. +# Ben Luo , 2011 +# +msgid "" +msgstr "" +"Project-Id-Version: zh\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-12-06 22:26+0100\n" +"PO-Revision-Date: 2011-01-23 20:47+0800\n" +"Last-Translator: Ben Luo \n" +"Language-Team: 汉语 \n" +"Language: 汉语\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: postprocess_html.py:55 +#, python-format +msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." +msgstr "" + +#: postprocess_html.py:57 +#, python-format +msgid "" +"Your suggestions for the documentation " +"are welcome, please report errors to our bug list." +msgstr "" + +#: postprocess_html.py:69 +#, python-format +msgid "Other languages: %s." +msgstr "其它语言:%s。" + +#: postprocess_html.py:70 +#, python-format +msgid "About automatic language selection." +msgstr "" + +#: postprocess_html.py:326 +msgid "stable-branch" +msgstr "稳定分支" + +#: postprocess_html.py:328 +msgid "development-branch" +msgstr "开发分支" + +#: translations-status.py:72 +msgid "Section titles" +msgstr "段标题" + +#: translations-status.py:73 +#, python-format +msgid "Last updated %s" +msgstr "最近更新 %s" + +#: translations-status.py:74 +msgid "Translators" +msgstr "翻译者" + +#: translations-status.py:74 +msgid "Translation checkers" +msgstr "校对" + +#: translations-status.py:75 +msgid "Translated" +msgstr "已翻译" + +#: translations-status.py:75 +msgid "Up to date" +msgstr "最新" + +#: translations-status.py:76 +msgid "Other info" +msgstr "其它信息" + +#: translations-status.py:78 +msgid "no" +msgstr "无" + +#: translations-status.py:79 +msgid "not translated" +msgstr "没有翻译" + +#: translations-status.py:81 +#, python-format +msgid "partially (%(p)d %%)" +msgstr "部分 (%(p)d %%)" + +#: translations-status.py:83 +#, python-format +msgid "partially translated (%(p)d %%)" +msgstr "部分翻译 (%(p)d %%)" + +#: translations-status.py:84 translations-status.py:86 +msgid "yes" +msgstr "是" + +#: translations-status.py:85 +msgid "translated" +msgstr "已翻译" + +#: translations-status.py:86 translations-status.py:87 +msgid "up to date" +msgstr "最新的" + +#: translations-status.py:88 +msgid "partially" +msgstr "部分地" + +#: translations-status.py:89 +msgid "partially up to date" +msgstr "部分是最新的" + +#: translations-status.py:90 +msgid "N/A" +msgstr "不适用" + +#: translations-status.py:91 +msgid "pre-GDP" +msgstr "" + +#: translations-status.py:92 +msgid "post-GDP" +msgstr "" + +#. -*- coding: utf-8 -*- +#. Documentation/changes.tely:183 (variable) +msgid "coloredheads" +msgstr "有颜色的头" + +#. Documentation/changes.tely:184 (variable) +msgid "noclef" +msgstr "无谱号" + +#. @node in Documentation/changes.tely +#. @node in Documentation/macros.itexi +msgid "Top" +msgstr "首页" + +#. @top in Documentation/changes.tely +msgid "New features in 2.13 since 2.12" +msgstr "从2.12到2.13出现的新特性" + +#. @top in Documentation/macros.itexi +msgid "LilyPond --- \\\\TITLE\\\\" +msgstr "" + +#. @subsubheading in Documentation/macros.itexi +msgid "Predefined commands" +msgstr "预先定义的命令" + +#. @subsubheading in Documentation/macros.itexi +msgid "Selected Snippets" +msgstr "选中的片断" + +#. @subsubheading in Documentation/macros.itexi +msgid "See also" +msgstr "参见" + +#. @subsubheading in Documentation/macros.itexi +msgid "Known issues and warnings" +msgstr "知道的问题和警告" + +#. @node in Documentation/essay.tely +#. @appendix in Documentation/essay.tely +#. @node in Documentation/extending.tely +#. @appendix in Documentation/extending.tely +#. @node in Documentation/learning.tely +#. @appendix in Documentation/learning.tely +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +#. @node in Documentation/usage.tely +#. @appendix in Documentation/usage.tely +msgid "LilyPond index" +msgstr "LilyPond 索引" + +#. @node in Documentation/essay/engraving.itely +#. @chapter in Documentation/essay/engraving.itely +msgid "Music engraving" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "The LilyPond story" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraving details" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music fonts" +msgstr "音乐字体" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical spacing" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Ledger lines" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Optical sizing" +msgstr "可选的尺寸" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Why work so hard?" +msgstr "为什么工作地如此辛苦?" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Automated engraving" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Beauty contests" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Improvement by benchmarking" +msgstr "从测评角度看改进" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Getting things right" +msgstr "把事情做对" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Building software" +msgstr "生产软件" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Music representation" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "What symbols to engrave?" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @unnumberedsubsec in Documentation/essay/engraving.itely +msgid "Flexible architecture" +msgstr "" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Putting LilyPond to work" +msgstr "让 LilyPond 工作" + +#. @node in Documentation/essay/engraving.itely +#. @section in Documentation/essay/engraving.itely +msgid "Engraved examples (BWV 861)" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @chapter in Documentation/essay/literature.itely +msgid "Literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Short literature list" +msgstr "" + +#. @node in Documentation/essay/literature.itely +#. @section in Documentation/essay/literature.itely +msgid "Long literature list" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Colorado" +msgstr "" + +#. @subheading in Documentation/essay/literature.itely +msgid "Computer notation" +msgstr "计算机五线谱" + +#. @subheading in Documentation/essay/literature.itely +msgid "Engraving" +msgstr "" + +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +#. @node in Documentation/fdl.itexi +#. @appendix in Documentation/fdl.itexi +msgid "GNU Free Documentation License" +msgstr "GNU 自由文档协议" + +#. @heading in Documentation/fdl.itexi +msgid "ADDENDUM: How to use this License for your documents" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:734 (variable) +msgid "traLaLa" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:736 (comment) +msgid "dummy action to deal with parser lookahead" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1354 (variable) +#. Documentation/learning/fundamental.itely:3003 (variable) +#. Documentation/learning/fundamental.itely:3058 (variable) +#. Documentation/notation/changing-defaults.itely:3802 (variable) +msgid "padText" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1377 (variable) +#. Documentation/notation/changing-defaults.itely:3844 (variable) +msgid "tempoPadded" +msgstr "" + +#. Documentation/extending/scheme-tutorial.itely:1396 (variable) +msgid "pattern" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @chapter in Documentation/extending/scheme-tutorial.itely +msgid "Scheme tutorial" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Introduction to Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme sandbox" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme variables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme simple data types" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme compound data types" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Pairs" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Lists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Association lists (alists)" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Hash tables" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Calculations in Scheme" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Defining procedures" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Predicates" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Return values" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Scheme conditionals" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "if" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "cond" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Scheme in LilyPond" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond Scheme syntax" +msgstr "LilyPond Scheme 语法" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond variables" +msgstr "LilyPond 变量" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Input variables and Scheme" +msgstr "输入变量和 Scheme" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Object properties" +msgstr "对象属性" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "LilyPond compound variables" +msgstr "LilyPond 组件的变量" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Offsets" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Extents" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Property alists" +msgstr "" + +#. @subheading in Documentation/extending/scheme-tutorial.itely +msgid "Alist chains" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Internal music representation" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @section in Documentation/extending/scheme-tutorial.itely +msgid "Building complicated functions" +msgstr "构造复杂功能" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Displaying music expressions" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Music properties" +msgstr "音乐属性" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Doubling a note with slurs (example)" +msgstr "" + +#. @node in Documentation/extending/scheme-tutorial.itely +#. @subsection in Documentation/extending/scheme-tutorial.itely +msgid "Adding articulation to notes (example)" +msgstr "" + +#. Documentation/extending/programming-interface.itely:139 (variable) +msgid "manualBeam" +msgstr "" + +#. Documentation/extending/programming-interface.itely:160 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:192 (variable) +msgid "AltOn" +msgstr "" + +#. Documentation/extending/programming-interface.itely:170 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:198 (variable) +msgid "AltOff" +msgstr "" + +#. Documentation/extending/programming-interface.itely:185 (variable) +msgid "withAlt" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "Interfaces for programmers" +msgstr "面向程序员的界面" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Music functions" +msgstr "音乐函数" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Music function syntax" +msgstr "音乐函数语法" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Simple substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Intermediate substitution functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Mathematics in functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Functions without arguments" +msgstr "无参数函数" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Void functions" +msgstr "空函数" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Markup functions" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Markup construction in Scheme" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "How markups work internally" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Markup command definition syntax" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "On properties" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "A complete example" +msgstr "一个完整的例子" + +#. @node in Documentation/extending/programming-interface.itely +#. @unnumberedsubsubsec in Documentation/extending/programming-interface.itely +msgid "Adapting builtin commands" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "New markup list command definition" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Contexts for programmers" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Context evaluation" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @subsection in Documentation/extending/programming-interface.itely +msgid "Running a function on all layout objects" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Callback functions" +msgstr "回调函数" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Inline Scheme code" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @section in Documentation/extending/programming-interface.itely +msgid "Difficult tweaks" +msgstr "" + +#. @node in Documentation/extending/programming-interface.itely +#. @chapter in Documentation/extending/programming-interface.itely +msgid "LilyPond Scheme interfaces" +msgstr "LilyPond Scheme 界面" + +#. Documentation/learning/tutorial.itely:210 (comment) +msgid "set the starting point to middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:241 (comment) +msgid "one octave above middle C" +msgstr "" + +#. Documentation/learning/tutorial.itely:257 (comment) +msgid "c is 1 staff space up, so is the c above" +msgstr "" + +#. Documentation/learning/tutorial.itely:258 (comment) +msgid "d is 2 up or 5 down, so is the d above" +msgstr "" + +#. Documentation/learning/tutorial.itely:259 (comment) +msgid "e is 3 up or 4 down, so is the e above" +msgstr "" + +#. Documentation/learning/tutorial.itely:260 (comment) +msgid "a is 6 up or 1 down, so is the a below" +msgstr "" + +#. Documentation/learning/tutorial.itely:261 (comment) +msgid "g is 5 up or 2 down, so is the g below" +msgstr "" + +#. Documentation/learning/tutorial.itely:262 (comment) +msgid "f is 4 up or 3 down, so is the f below" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @chapter in Documentation/learning/tutorial.itely +msgid "Tutorial" +msgstr "教程" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Compiling a file" +msgstr "编译一个文件" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Entering input" +msgstr "进入输入" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Producing output" +msgstr "产生输出" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "MacOS X" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Windows" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Command-line" +msgstr "命令行" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to write input files" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Simple notation" +msgstr "简单的乐谱" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Pitches" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pitch" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "interval" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly:19 (variable) +#. Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly:29 (variable) +msgid "scale" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "middle C" +msgstr "中央 C" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave" +msgstr "八度" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accidental" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Durations (rhythms)" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beam" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duration" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole note" +msgstr "全音符" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half note" +msgstr "二分音符" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter note" +msgstr "四分音符" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dotted note" +msgstr "附点音符" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Rests" +msgstr "休止符" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rest" +msgstr "休止符" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Time signature" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time signature" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Tempo marks" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tempo indication" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "Clef" +msgstr "" + +#. @rglos in Documentation/learning/tutorial.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "clef" +msgstr "" + +#. @subheading in Documentation/learning/tutorial.itely +msgid "All together" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Working on input files" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "Dealing with errors" +msgstr "处理错误" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "General troubleshooting tips" +msgstr "通用查找错误技巧" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Some common errors" +msgstr "一些常见错误" + +#. @node in Documentation/learning/tutorial.itely +#. @section in Documentation/learning/tutorial.itely +msgid "How to read the manuals" +msgstr "如何看手册" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Omitted material" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Clickable examples" +msgstr "" + +#. @node in Documentation/learning/tutorial.itely +#. @subsection in Documentation/learning/tutorial.itely +msgid "Overview of manuals" +msgstr "手册综述" + +#. Documentation/learning/common-notation.itely:1223 (variable) +#. Documentation/learning/fundamental.itely:2984 (variable) +#. Documentation/learning/fundamental.itely:3008 (variable) +msgid "violin" +msgstr "小提琴" + +#. Documentation/learning/common-notation.itely:1229 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:83 (variable) +msgid "cello" +msgstr "" + +#. Documentation/learning/common-notation.itely:1255 (variable) +msgid "tripletA" +msgstr "" + +#. Documentation/learning/common-notation.itely:1256 (variable) +msgid "barA" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. Documentation/snippets/measure-counter.ly:27 (context id) +#. Documentation/snippets/measure-counter.ly:34 (context id) +msgid "foo" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @chapter in Documentation/learning/common-notation.itely +msgid "Common notation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Single staff notation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Bar checks" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Accidentals and key signatures" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Accidentals" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sharp" +msgstr "升" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flat" +msgstr "降" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double sharp" +msgstr "重升" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double flat" +msgstr "重降" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Key signatures" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key signature" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major" +msgstr "大调" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor" +msgstr "小调" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warning: key signatures and pitches" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "natural" +msgstr "自然" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposition" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Pitch names" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Ties and slurs" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Ties" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tie" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Slurs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slur" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Phrasing slurs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrasing" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Warnings: slurs vs. ties" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "articulation" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Articulation and dynamics" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Articulations" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Fingerings" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fingering" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +#. @subheading in Documentation/learning/tweaks.itely +msgid "Dynamics" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:70 (variable) +msgid "dynamics" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "crescendo" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "decrescendo" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding text" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Automatic and manual beams" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Advanced rhythmic commands" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Partial measure" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "anacrusis" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +#. Documentation/snippets/unfretted-headword.ly:90 (comment) +msgid "Tuplets" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note value" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triplet" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Grace notes" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grace notes" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "acciaccatura" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "appoggiatura" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Multiple notes at once" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Music expressions explained" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Analogy: mathematical expressions" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: multiple staves" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polyphony" +msgstr "" + +#. @subheading in Documentation/learning/common-notation.itely +msgid "Simultaneous music expressions: single staff" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Multiple staves" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Staff groups" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brace" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staff" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "system" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Combining notes into chords" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chord" +msgstr "和弦" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Single staff polyphony" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Songs" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Setting simple songs" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyrics" +msgstr "歌词" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Aligning lyrics to a melody" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma" +msgstr "" + +#. @rglos in Documentation/learning/common-notation.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "extender line" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Lyrics to multiple staves" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @section in Documentation/learning/common-notation.itely +msgid "Final touches" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Organizing pieces with variables" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Adding titles" +msgstr "增加标题" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "Absolute note names" +msgstr "" + +#. @node in Documentation/learning/common-notation.itely +#. @subsection in Documentation/learning/common-notation.itely +msgid "After the tutorial" +msgstr "" + +#. Documentation/learning/fundamental.itely:320 (context id) +#. Documentation/learning/fundamental.itely:371 (context id) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:73 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:86 (context id) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +msgid "singer" +msgstr "" + +#. Documentation/learning/fundamental.itely:321 (context id) +#. Documentation/learning/fundamental.itely:372 (context id) +msgid "vocal" +msgstr "声乐" + +#. Documentation/learning/fundamental.itely:324 (context id) +#. Documentation/learning/fundamental.itely:375 (context id) +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:233 (variable) +#. Documentation/snippets/jazz-combo-template.ly:293 (context id) +#. Documentation/snippets/staff-headword.ly:119 (context id) +msgid "piano" +msgstr "" + +#. Documentation/learning/fundamental.itely:325 (context id) +#. Documentation/learning/fundamental.itely:366 (variable) +#. Documentation/learning/fundamental.itely:376 (context id) +#. Documentation/learning/fundamental.itely:2592 (variable) +#. Documentation/learning/fundamental.itely:2654 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:20 (variable) +#. Documentation/snippets/chords-headword.ly:80 (context id) +#. Documentation/snippets/fretted-headword.ly:143 (context id) +#. Documentation/snippets/jazz-combo-template.ly:236 (context id) +#. Documentation/snippets/piano-template-simple.ly:39 (variable) +#. Documentation/snippets/piano-template-simple.ly:58 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:48 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:70 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:60 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:81 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:44 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:62 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:66 (context id) +#. Documentation/snippets/staff-headword.ly:68 (variable) +msgid "upper" +msgstr "" + +#. Documentation/learning/fundamental.itely:326 (context id) +#. Documentation/learning/fundamental.itely:367 (variable) +#. Documentation/learning/fundamental.itely:377 (context id) +#. Documentation/learning/fundamental.itely:2599 (variable) +#. Documentation/learning/fundamental.itely:2655 (context id) +#. Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly:24 (variable) +#. Documentation/snippets/chords-headword.ly:90 (context id) +#. Documentation/snippets/fretted-headword.ly:144 (context id) +#. Documentation/snippets/jazz-combo-template.ly:237 (context id) +#. Documentation/snippets/piano-template-simple.ly:47 (variable) +#. Documentation/snippets/piano-template-simple.ly:59 (context id) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:65 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:56 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:72 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:68 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:82 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:51 (variable) +#. Documentation/snippets/polyphony-in-tablature.ly:63 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:67 (context id) +#. Documentation/snippets/staff-headword.ly:79 (variable) +msgid "lower" +msgstr "" + +#. Documentation/learning/fundamental.itely:364 (variable) +#. Documentation/notation/changing-defaults.itely:488 (variable) +#. Documentation/notation/changing-defaults.itely:495 (context id) +#. Documentation/notation/changing-defaults.itely:505 (context id) +#. Documentation/notation/changing-defaults.itely:510 (context id) +#. Documentation/notation/changing-defaults.itely:527 (variable) +#. Documentation/notation/changing-defaults.itely:545 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:37 (context id) +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:46 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:66 (context id) +#. Documentation/snippets/demo-midiinstruments.ly:29 (variable) +#. Documentation/snippets/formatting-lyrics-syllables.ly:29 (context id) +#. Documentation/snippets/fretted-headword.ly:63 (variable) +#. Documentation/snippets/guitar-strum-rhythms.ly:68 (context id) +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:34 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:48 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:50 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:66 (variable) +#. Documentation/snippets/single-staff-template-with-only-notes.ly:56 (variable) +#. Documentation/snippets/vertically-centered-common-lyrics.ly:45 (variable) +msgid "melody" +msgstr "旋律" + +#. Documentation/learning/fundamental.itely:365 (variable) +#. Documentation/snippets/piano-template-with-centered-lyrics.ly:64 (variable) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:56 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:74 (variable) +msgid "text" +msgstr "文本" + +#. Documentation/learning/fundamental.itely:439 (context id) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:86 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:122 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:138 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:159 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:174 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:195 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:210 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:226 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:242 (comment) +msgid "main" +msgstr "主要" + +#. Documentation/learning/fundamental.itely:629 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:639 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:654 (comment) +msgid "Voice \\\"1\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:659 (comment) +msgid "Voice \\\"2\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:682 (comment) +#. Documentation/learning/fundamental.itely:706 (comment) +msgid "Main voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:684 (comment) +msgid "Voice \\\"1\\\" Voice \\\"2\\\" Voice \\\"3\\\"" +msgstr "" + +#. Documentation/learning/fundamental.itely:708 (comment) +msgid "Bar 1" +msgstr "" + +#. Documentation/learning/fundamental.itely:719 (comment) +msgid "Bar 2" +msgstr "" + +#. Documentation/learning/fundamental.itely:720 (comment) +msgid "Voice 1 continues" +msgstr "" + +#. Documentation/learning/fundamental.itely:723 (comment) +msgid "Voice 2 continues" +msgstr "" + +#. Documentation/learning/fundamental.itely:898 (comment) +msgid "Voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:900 (comment) +msgid "Voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:902 (comment) +msgid "Omit Voice three" +msgstr "" + +#. Documentation/learning/fundamental.itely:903 (comment) +msgid "Voice four" +msgstr "" + +#. Documentation/learning/fundamental.itely:1002 (comment) +msgid "Default behavior or behavior after \\oneVoice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1040 (comment) +msgid "The following notes are monophonic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1042 (comment) +msgid "Start simultaneous section of three voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1044 (comment) +msgid "Continue the main voice in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:1046 (comment) +#. Documentation/learning/fundamental.itely:1108 (comment) +msgid "Initiate second voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1048 (comment) +msgid "Set stems, etc., down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1052 (comment) +#. Documentation/learning/fundamental.itely:1114 (comment) +msgid "Initiate third voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1054 (comment) +#. Documentation/learning/fundamental.itely:1116 (comment) +msgid "Set stems, etc, up" +msgstr "" + +#. Documentation/learning/fundamental.itely:1103 (comment) +msgid "Initiate first voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1110 (comment) +msgid "Set stems, etc, down" +msgstr "" + +#. Documentation/learning/fundamental.itely:1197 (context id) +#. Documentation/learning/fundamental.itely:2303 (context id) +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:34 (variable) +#. Documentation/snippets/jazz-combo-template.ly:219 (context id) +#. Documentation/snippets/jazz-combo-template.ly:228 (context id) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:70 (context id) +#. Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly:80 (context id) +msgid "one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1242 (variable) +#. Documentation/learning/fundamental.itely:2569 (variable) +#. Documentation/learning/tweaks.itely:3614 (variable) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:66 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:62 (variable) +#. Documentation/snippets/hymn-template.ly:78 (variable) +#. Documentation/snippets/incipit.ly:70 (variable) +#. Documentation/snippets/jazz-combo-template.ly:89 (variable) +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:53 (variable) +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:55 (variable) +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:33 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:35 (variable) +#. Documentation/snippets/string-quartet-template-simple.ly:50 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:109 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:32 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:64 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:54 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:56 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:63 (variable) +msgid "global" +msgstr "" + +#. Documentation/learning/fundamental.itely:1244 (variable) +msgid "SopOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1247 (variable) +msgid "SopOneLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1250 (variable) +msgid "SopTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1253 (variable) +msgid "SopTwoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:1260 (context id) +msgid "SopOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1269 (context id) +msgid "SopTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1301 (variable) +#. Documentation/learning/fundamental.itely:2901 (variable) +msgid "keyTime" +msgstr "" + +#. Documentation/learning/fundamental.itely:1303 (variable) +msgid "SopMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1304 (variable) +#. Documentation/learning/tweaks.itely:3617 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:47 (variable) +#. Documentation/snippets/hymn-template.ly:63 (variable) +msgid "AltoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1305 (variable) +#. Documentation/learning/tweaks.itely:3618 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:52 (variable) +#. Documentation/snippets/hymn-template.ly:68 (variable) +msgid "TenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1306 (variable) +#. Documentation/learning/tweaks.itely:3619 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:73 (variable) +msgid "BassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:1308 (variable) +#. Documentation/learning/tweaks.itely:3621 (variable) +msgid "VerseOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:1310 (variable) +#. Documentation/learning/tweaks.itely:3625 (variable) +msgid "VerseTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:1312 (variable) +#. Documentation/learning/tweaks.itely:3629 (variable) +msgid "VerseThree" +msgstr "" + +#. Documentation/learning/fundamental.itely:1314 (variable) +#. Documentation/learning/tweaks.itely:3633 (variable) +msgid "VerseFour" +msgstr "" + +#. Documentation/learning/fundamental.itely:1321 (context id) +msgid "Sop" +msgstr "" + +#. Documentation/learning/fundamental.itely:1322 (context id) +#. Documentation/learning/tweaks.itely:3642 (context id) +#. Documentation/notation/input.itely:1141 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:87 (context id) +#. Documentation/snippets/chords-headword.ly:57 (variable) +#. Documentation/snippets/hymn-template.ly:93 (context id) +msgid "Alto" +msgstr "" + +#. Documentation/learning/fundamental.itely:1330 (context id) +#. Documentation/learning/tweaks.itely:3650 (context id) +#. Documentation/notation/input.itely:1143 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:95 (context id) +#. Documentation/snippets/chords-headword.ly:63 (variable) +#. Documentation/snippets/hymn-template.ly:102 (context id) +msgid "Tenor" +msgstr "" + +#. Documentation/learning/fundamental.itely:1331 (context id) +#. Documentation/learning/tweaks.itely:3651 (context id) +#. Documentation/notation/input.itely:1148 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:99 (context id) +#. Documentation/snippets/chords-headword.ly:70 (variable) +#. Documentation/snippets/hymn-template.ly:107 (context id) +#. Documentation/snippets/jazz-combo-template.ly:242 (variable) +msgid "Bass" +msgstr "" + +#. Documentation/learning/fundamental.itely:1475 (comment) +msgid "start of single compound music expression" +msgstr "" + +#. Documentation/learning/fundamental.itely:1476 (comment) +msgid "start of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1478 (comment) +msgid "create RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1481 (comment) +msgid "create voice for RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1482 (comment) +msgid "start of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1485 (comment) +msgid "end of RH notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1486 (comment) +msgid "end of RH voice" +msgstr "" + +#. Documentation/learning/fundamental.itely:1487 (comment) +msgid "end of RH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1488 (comment) +msgid "create LH staff; needs two simultaneous voices" +msgstr "" + +#. Documentation/learning/fundamental.itely:1491 (comment) +msgid "create LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1493 (comment) +msgid "start of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1496 (comment) +msgid "end of LH voice one notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1497 (comment) +msgid "end of LH voice one" +msgstr "" + +#. Documentation/learning/fundamental.itely:1498 (comment) +msgid "create LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1500 (comment) +msgid "start of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1503 (comment) +msgid "end of LH voice two notes" +msgstr "" + +#. Documentation/learning/fundamental.itely:1504 (comment) +msgid "end of LH voice two" +msgstr "" + +#. Documentation/learning/fundamental.itely:1505 (comment) +msgid "end of LH staff" +msgstr "" + +#. Documentation/learning/fundamental.itely:1506 (comment) +msgid "end of simultaneous staves section" +msgstr "" + +#. Documentation/learning/fundamental.itely:1507 (comment) +msgid "end of single compound music expression" +msgstr "" + +#. Documentation/learning/fundamental.itely:1726 (comment) +msgid "Wrong!" +msgstr "" + +#. Documentation/learning/fundamental.itely:1812 (comment) +#. Documentation/learning/fundamental.itely:1989 (comment) +msgid "make note heads smaller" +msgstr "" + +#. Documentation/learning/fundamental.itely:1815 (comment) +#. Documentation/learning/fundamental.itely:1991 (comment) +msgid "make note heads larger" +msgstr "" + +#. Documentation/learning/fundamental.itely:1818 (comment) +#. Documentation/learning/fundamental.itely:1993 (comment) +msgid "return to default size" +msgstr "" + +#. Documentation/learning/fundamental.itely:2282 (variable) +#. Documentation/learning/fundamental.itely:2570 (variable) +#. Documentation/notation/input.itely:1133 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:74 (variable) +msgid "sopranoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2289 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:75 (variable) +msgid "sopranoLyrics" +msgstr "" + +#. Documentation/learning/fundamental.itely:2293 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:87 (variable) +msgid "celloMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2574 (variable) +msgid "sopranoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2577 (variable) +#. Documentation/notation/input.itely:1134 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:66 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:75 (variable) +msgid "altoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2581 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:79 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:78 (variable) +msgid "altoWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2582 (variable) +#. Documentation/notation/input.itely:1135 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:73 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:82 (variable) +msgid "tenorMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2586 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:86 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:76 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:85 (variable) +msgid "tenorWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2587 (variable) +#. Documentation/notation/input.itely:1136 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:88 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:90 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:80 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:89 (variable) +msgid "bassMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2591 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:93 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:83 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:92 (variable) +msgid "bassWords" +msgstr "" + +#. Documentation/learning/fundamental.itely:2608 (comment) +msgid "combine ChoirStaff and PianoStaff in parallel" +msgstr "" + +#. Documentation/learning/fundamental.itely:2610 (context id) +#. Documentation/learning/fundamental.itely:2612 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:90 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:100 (context id) +msgid "sopranos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2620 (context id) +#. Documentation/learning/fundamental.itely:2622 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:103 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:91 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:104 (context id) +msgid "altos" +msgstr "" + +#. Documentation/learning/fundamental.itely:2630 (context id) +#. Documentation/learning/fundamental.itely:2632 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:109 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:113 (context id) +msgid "tenors" +msgstr "" + +#. Documentation/learning/fundamental.itely:2640 (context id) +#. Documentation/learning/fundamental.itely:2642 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:110 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:102 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:117 (context id) +msgid "basses" +msgstr "" + +#. Documentation/learning/fundamental.itely:2650 (comment) +msgid "end ChoirStaff" +msgstr "" + +#. Documentation/learning/fundamental.itely:2902 (variable) +msgid "ManualOneVoiceOneMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2906 (variable) +msgid "ManualOneVoiceTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2910 (variable) +msgid "ManualTwoMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2914 (variable) +msgid "PedalOrganMusic" +msgstr "" + +#. Documentation/learning/fundamental.itely:2920 (comment) +msgid "PianoStaff and Pedal Staff must be simultaneous" +msgstr "" + +#. Documentation/learning/fundamental.itely:2922 (context id) +msgid "ManualOne" +msgstr "" + +#. Documentation/learning/fundamental.itely:2923 (comment) +msgid "set key and time signature" +msgstr "" + +#. Documentation/learning/fundamental.itely:2933 (comment) +msgid "end ManualOne Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2934 (context id) +msgid "ManualTwo" +msgstr "" + +#. Documentation/learning/fundamental.itely:2943 (comment) +msgid "end ManualTwo Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2944 (comment) +msgid "end PianoStaff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2945 (context id) +msgid "PedalOrgan" +msgstr "" + +#. Documentation/learning/fundamental.itely:2951 (comment) +msgid "end PedalOrgan Staff context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2953 (comment) +msgid "end Score context" +msgstr "" + +#. Documentation/learning/fundamental.itely:2969 (variable) +msgid "hornNotes" +msgstr "" + +#. Documentation/learning/fundamental.itely:2981 (variable) +msgid "fragmentA" +msgstr "" + +#. Documentation/learning/fundamental.itely:2982 (variable) +msgid "fragmentB" +msgstr "" + +#. Documentation/learning/fundamental.itely:3001 (variable) +msgid "dolce" +msgstr "" + +#. Documentation/learning/fundamental.itely:3004 (variable) +msgid "fthenp" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @chapter in Documentation/learning/fundamental.itely +msgid "Fundamental concepts" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "How LilyPond input files work" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Introduction to the LilyPond file structure" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Score is a (single) compound musical expression" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Nesting music expressions" +msgstr "" + +#. @rglos in Documentation/learning/fundamental.itely +#. @rglos in Documentation/learning/tweaks.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ossia" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "On the un-nestedness of brackets and ties" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Voices contain music" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "I'm hearing Voices" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Explicitly instantiating voices" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Note columns" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Voices and vocals" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Contexts and engravers" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Contexts explained" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Creating contexts" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Engravers explained" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Modifying context properties" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\with}" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Setting context properties with @code{\\\\context}" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Adding and removing engravers" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing a single context" +msgstr "" + +#. @rglos in Documentation/learning/fundamental.itely +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ambitus" +msgstr "" + +#. @subsubheading in Documentation/learning/fundamental.itely +msgid "Changing all contexts of the same type" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @section in Documentation/learning/fundamental.itely +msgid "Extending the templates" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Soprano and cello" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Four-part SATB vocal score" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Building a score from scratch" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Saving typing with variables and functions" +msgstr "" + +#. @node in Documentation/learning/fundamental.itely +#. @subsection in Documentation/learning/fundamental.itely +msgid "Scores and parts" +msgstr "" + +#. Documentation/learning/tweaks.itely:602 (comment) +#. Documentation/learning/tweaks.itely:740 (comment) +msgid "Increase thickness of all following slurs from 1.2 to 5.0" +msgstr "" + +#. Documentation/learning/tweaks.itely:672 (comment) +#. Documentation/learning/tweaks.itely:712 (comment) +#. Documentation/learning/tweaks.itely:715 (comment) +msgid "Increase thickness of immediately following slur only" +msgstr "" + +#. Documentation/learning/tweaks.itely:744 (comment) +msgid "Revert thickness of all following slurs to default of 1.2" +msgstr "" + +#. Documentation/learning/tweaks.itely:1421 (comment) +msgid "Don't print clefs in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1423 (comment) +msgid "Don't print time signatures in this staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:1487 (comment) +msgid "Reduce all font sizes by ~24%" +msgstr "" + +#. Documentation/learning/tweaks.itely:1554 (comment) +msgid "Reduce stem length and line spacing to match" +msgstr "" + +#. Documentation/learning/tweaks.itely:1998 (comment) +#. Documentation/learning/tweaks.itely:2067 (comment) +msgid "Set details for later Text Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2001 (comment) +#. Documentation/learning/tweaks.itely:2070 (comment) +msgid "Place dynamics above staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:2003 (comment) +#. Documentation/learning/tweaks.itely:2074 (comment) +msgid "Start Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2006 (comment) +msgid "Add Dynamic Text and hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2009 (comment) +#. Documentation/learning/tweaks.itely:2081 (comment) +msgid "Add Text Script" +msgstr "" + +#. Documentation/learning/tweaks.itely:2012 (comment) +msgid "Add Dynamic Text and terminate hairpin" +msgstr "" + +#. Documentation/learning/tweaks.itely:2014 (comment) +#. Documentation/learning/tweaks.itely:2086 (comment) +msgid "Stop Ottava Bracket" +msgstr "" + +#. Documentation/learning/tweaks.itely:2072 (comment) +msgid "Place following Ottava Bracket below Text Spanners" +msgstr "" + +#. Documentation/learning/tweaks.itely:2077 (comment) +#. Documentation/learning/tweaks.itely:2084 (comment) +msgid "Add Dynamic Text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2079 (comment) +msgid "Add Dynamic Line Spanner" +msgstr "" + +#. Documentation/learning/tweaks.itely:2161 (comment) +msgid "Cause notes to space out to accommodate text" +msgstr "" + +#. Documentation/learning/tweaks.itely:2184 (comment) +msgid "This markup is short enough to fit without collision" +msgstr "" + +#. Documentation/learning/tweaks.itely:2188 (comment) +msgid "This is too long to fit, so it is displaced upwards" +msgstr "" + +#. Documentation/learning/tweaks.itely:2192 (comment) +#. Documentation/learning/tweaks.itely:2197 (comment) +msgid "Turn off collision avoidance" +msgstr "" + +#. Documentation/learning/tweaks.itely:2199 (comment) +msgid "and turn on textLengthOn" +msgstr "" + +#. Documentation/learning/tweaks.itely:2200 (comment) +msgid "Spaces at end are honored" +msgstr "" + +#. Documentation/learning/tweaks.itely:2307 (comment) +msgid "Extend width by 1 staff space" +msgstr "" + +#. Documentation/learning/tweaks.itely:2587 (comment) +msgid "This will not work, see below" +msgstr "这个不工作,见下" + +#. Documentation/learning/tweaks.itely:2591 (comment) +msgid "This works" +msgstr "这个工作" + +#. Documentation/learning/tweaks.itely:2627 (variable) +msgid "sesquisharp" +msgstr "" + +#. Documentation/learning/tweaks.itely:2630 (comment) +msgid "This prints a sesquisharp but the spacing is too small" +msgstr "" + +#. Documentation/learning/tweaks.itely:2635 (comment) +msgid "This improves the spacing" +msgstr "" + +#. Documentation/learning/tweaks.itely:2675 (comment) +msgid "Extend width by 1 unit" +msgstr "" + +#. Documentation/learning/tweaks.itely:2677 (comment) +msgid "Align dynamics to a base line 2 units above staff" +msgstr "" + +#. Documentation/learning/tweaks.itely:3003 (variable) +#. Documentation/learning/tweaks.itely:3060 (variable) +#. Documentation/learning/tweaks.itely:3130 (variable) +#. Documentation/learning/tweaks.itely:3283 (variable) +#. Documentation/learning/tweaks.itely:3352 (variable) +msgid "rhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3009 (comment) +#. Documentation/learning/tweaks.itely:3066 (comment) +#. Documentation/learning/tweaks.itely:3138 (comment) +#. Documentation/learning/tweaks.itely:3293 (comment) +#. Documentation/learning/tweaks.itely:3362 (comment) +msgid "Start polyphonic section of four voices" +msgstr "" + +#. Documentation/learning/tweaks.itely:3011 (comment) +#. Documentation/learning/tweaks.itely:3025 (comment) +#. Documentation/learning/tweaks.itely:3068 (comment) +#. Documentation/learning/tweaks.itely:3082 (comment) +#. Documentation/learning/tweaks.itely:3140 (comment) +#. Documentation/learning/tweaks.itely:3154 (comment) +#. Documentation/learning/tweaks.itely:3295 (comment) +#. Documentation/learning/tweaks.itely:3313 (comment) +#. Documentation/learning/tweaks.itely:3364 (comment) +#. Documentation/learning/tweaks.itely:3390 (comment) +msgid "continuation of main voice" +msgstr "" + +#. Documentation/learning/tweaks.itely:3029 (variable) +#. Documentation/learning/tweaks.itely:3086 (variable) +#. Documentation/learning/tweaks.itely:3158 (variable) +#. Documentation/learning/tweaks.itely:3317 (variable) +#. Documentation/learning/tweaks.itely:3394 (variable) +msgid "lhMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3038 (context id) +#. Documentation/learning/tweaks.itely:3095 (context id) +#. Documentation/learning/tweaks.itely:3167 (context id) +#. Documentation/learning/tweaks.itely:3326 (context id) +#. Documentation/learning/tweaks.itely:3403 (context id) +#. Documentation/notation/input.itely:1154 (context id) +#. Documentation/snippets/repeats-headword.ly:30 (context id) +#. Documentation/snippets/simultaneous-headword.ly:60 (comment) +msgid "RH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3042 (context id) +#. Documentation/learning/tweaks.itely:3099 (context id) +#. Documentation/learning/tweaks.itely:3171 (context id) +#. Documentation/learning/tweaks.itely:3330 (context id) +#. Documentation/learning/tweaks.itely:3407 (context id) +#. Documentation/notation/input.itely:1160 (context id) +#. Documentation/snippets/repeats-headword.ly:92 (context id) +#. Documentation/snippets/text-headword.ly:137 (comment) +msgid "LH" +msgstr "" + +#. Documentation/learning/tweaks.itely:3298 (comment) +#. Documentation/learning/tweaks.itely:3370 (comment) +msgid "Move the c2 out of the main note column so the merge will work" +msgstr "" + +#. Documentation/learning/tweaks.itely:3303 (comment) +#. Documentation/learning/tweaks.itely:3377 (comment) +msgid "Stem on the d2 must be down to permit merging" +msgstr "" + +#. Documentation/learning/tweaks.itely:3368 (comment) +msgid "Reposition the c2 to the right of the merged note" +msgstr "" + +#. Documentation/learning/tweaks.itely:3379 (comment) +msgid "Stem on the d2 should be invisible" +msgstr "" + +#. Documentation/learning/tweaks.itely:3514 (comment) +#. Documentation/learning/tweaks.itely:3536 (comment) +msgid "Visible tempo marking" +msgstr "" + +#. Documentation/learning/tweaks.itely:3518 (comment) +#. Documentation/learning/tweaks.itely:3540 (comment) +msgid "Invisible tempo marking to lengthen fermata in MIDI" +msgstr "" + +#. Documentation/learning/tweaks.itely:3521 (comment) +#. Documentation/learning/tweaks.itely:3543 (comment) +msgid "New tempo for next section" +msgstr "" + +#. Documentation/learning/tweaks.itely:3604 (variable) +msgid "emphasize" +msgstr "" + +#. Documentation/learning/tweaks.itely:3609 (variable) +msgid "normal" +msgstr "" + +#. Documentation/learning/tweaks.itely:3616 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:42 (variable) +#. Documentation/snippets/hymn-template.ly:58 (variable) +msgid "SopranoMusic" +msgstr "" + +#. Documentation/learning/tweaks.itely:3641 (context id) +#. Documentation/notation/input.itely:1139 (context id) +#. Documentation/snippets/anglican-psalm-template.ly:83 (context id) +#. Documentation/snippets/chords-headword.ly:49 (variable) +#. Documentation/snippets/hymn-template.ly:88 (context id) +msgid "Soprano" +msgstr "" + +#. Documentation/learning/tweaks.itely:3672 (variable) +msgid "mpdolce" +msgstr "" + +#. Documentation/learning/tweaks.itely:3679 (variable) +msgid "inst" +msgstr "" + +#. Documentation/learning/tweaks.itely:4184 (comment) +msgid "Arrange to obtain color from color-notehead procedure" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @chapter in Documentation/learning/tweaks.itely +msgid "Tweaking output" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Tweaking basics" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Introduction to tweaks" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Objects and interfaces" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Naming conventions of objects and properties" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Tweaking methods" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "The Internals Reference manual" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties of layout objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Finding the context" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Overriding once only" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Reverting" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Properties found in interfaces" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Specifying the context in lyric mode" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Types of properties" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Appearance of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Visibility and color of objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "stencil" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "break-visibility" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "transparent" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "color" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Size of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Length and thickness of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Placement of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Automatic behavior" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Within-staff objects" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/learning/tweaks.itely +msgid "Fingering" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Outside-staff objects" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "\\\\textLengthOn" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Grob sizing" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Collisions of objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Moving objects" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Fixing overlapping notation" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "padding property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "right-padding" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-padding property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "self-alignment-X property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "staff-position property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "extra-offset property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "positions property" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "force-hshift property" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Real music example" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @section in Documentation/learning/tweaks.itely +msgid "Further tweaking" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other uses for tweaks" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Tying notes across voices" +msgstr "" + +#. @subheading in Documentation/learning/tweaks.itely +msgid "Simulating a fermata in MIDI" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Using variables for tweaks" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Style sheets" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Other sources of information" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Avoiding tweaks with slower processing" +msgstr "" + +#. @node in Documentation/learning/tweaks.itely +#. @subsection in Documentation/learning/tweaks.itely +msgid "Advanced tweaks with Scheme" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendix in Documentation/learning/templates.itely +msgid "Templates" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Single staff" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes only" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes and chords" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Notes, lyrics, and chords." +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Piano templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo piano" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano and melody with lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered lyrics" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Piano centered dynamics" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "String quartet parts" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Vocal ensembles" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB vocal score and automatic piano reduction" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB with aligned contexts" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "SATB on four staves" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Solo verse and two-part refrain" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Hymn tunes" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Psalms" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Orchestral templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Orchestra, choir and piano" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Ancient notation templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Transcription of mensural music" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Gregorian transcription template" +msgstr "" + +#. @node in Documentation/learning/templates.itely +#. @appendixsec in Documentation/learning/templates.itely +msgid "Other templates" +msgstr "" + +#. @appendixsubsec in Documentation/learning/templates.itely +msgid "Jazz combo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Musical terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:453 (context id) +#. Documentation/notation/changing-defaults.itely:459 (context id) +#. Documentation/notation/changing-defaults.itely:467 (context id) +#. Documentation/notation/changing-defaults.itely:469 (context id) +msgid "A" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "a due" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accelerando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "accessory" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "adagio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "al niente" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alla breve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "allegro" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alteration" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/jazz-combo-template.ly:113 (variable) +#. Documentation/snippets/satb-choir-template---four-staves.ly:69 (context id) +msgid "alto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "alto clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ancient minor scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "andante" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "arpeggio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ascending interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmentation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "augmented interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "autograph" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/notation/changing-defaults.itely:454 (context id) +#. Documentation/notation/changing-defaults.itely:463 (context id) +#. Documentation/notation/changing-defaults.itely:468 (context id) +msgid "B" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "backfall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bar line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "baritone clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:45 (variable) +#. Documentation/snippets/fretted-headword.ly:107 (variable) +#. Documentation/snippets/jazz-combo-template.ly:246 (variable) +#. Documentation/snippets/jazz-combo-template.ly:294 (context id) +#. Documentation/snippets/satb-choir-template---four-staves.ly:83 (context id) +msgid "bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bass clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "beat repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bracket" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "brass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breath mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "breve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "C clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cadenza" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/breathing-signs.ly:36 (comment) +msgid "caesura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "canon" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "central C" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromatic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "chromaticism" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "church mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cluster" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Common Practice Period" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "common time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "complement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "compound time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "concert pitch" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "conjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "consonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "contralto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "copying music" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "counterpoint" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "countertenor" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cue-notes" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "custos" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "cut time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "D" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "da capo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal niente" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dal segno" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "descending interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diatonic scale" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "didymic comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminished interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminuendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "diminution" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "direct" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "disjunct movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonance" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dissonant interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "divisio" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "doit" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant ninth chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dominant seventh chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dorian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "dot (augmentation dot)" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double appoggiatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double bar line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double dotted note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double time signature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "double trill" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "duplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "E" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ecclesiastical mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "eighth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "elision" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "embellishment" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "engraving" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "enharmonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "equal temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "expression mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "F clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "feathered beam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fermata" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fifth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "figured bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flag" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "flageolet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forefall" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "forte" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fourth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched score" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staff" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Frenched staves" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "fugue" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "functional harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "G clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "glissando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grand staff" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "grave" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "gruppetto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "H" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hairpin" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "half rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmonics" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "harmony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hemiola" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "homophony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hook" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "hymn meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inversion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "inverted interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "just intonation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "laissez vibrer" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "largo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leading note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ledger line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "legato curve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "leger line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ligature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lilypond" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "loco" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "long appoggiatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "longa" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "lyric tie" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "major interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maxima" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meantone temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "measure repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melisma line" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "melodic cadence" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensural notation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mensuration sign" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronome mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "metronomic indication" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mezzo-soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "minor interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mixolydian mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mode" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "modulation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "mordent" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motif" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "motive" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "movement" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "multi-measure rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "neighbor tones" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ninth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "non-legato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note head" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "note names" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octavation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave mark" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave marking" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "octave sign" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ornament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/flamenco-notation.ly:184 (variable) +#. Documentation/snippets/flamenco-notation.ly:281 (context id) +msgid "part" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pause" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pennant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percent repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "percussion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "perfect interval" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "phrase" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pickup" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "pizzicato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymeter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "polymetric time signature" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "portato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "power chord" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "presto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "proportion" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "Pythagorean comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quadruplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quality" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quarter tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "quintuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rallentando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "relative key" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly:49 (variable) +#. Documentation/snippets/jazz-combo-template.ly:290 (context id) +msgid "rhythm" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritardando" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "ritenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scale degree" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "scordatura" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "score" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "second" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semibreve" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semitone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "seventh" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextolet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sextuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "shake" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simile" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "simple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixteenth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sixty-fourth rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "slash repeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "solmization" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sonata form" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "song texts" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:62 (context id) +msgid "soprano" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staccato" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "staves" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stem" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "stringendo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strings" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "strong beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "submediant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "subtonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sul G" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "superdominant" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "supertonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "symphony" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syncopation" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "syntonic comma" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "temperament" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +#. Documentation/snippets/satb-choir-template---four-staves.ly:76 (context id) +msgid "tenor" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenth" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tenuto" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "third" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second note" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thirty-second rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "thorough bass" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "time" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tonic" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "transposing instrument" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "treble clef" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tremolo" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triad" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "trill" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "triple meter" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tritone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuning fork" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "tuplet" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "turn" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "unison" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "upbeat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "voice" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "volta" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "weak beat" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole rest" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "whole tone" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "woodwind" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Duration names notes and rests" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @chapter in Documentation/music-glossary.tely +msgid "Non-Western terms A-Z" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "bayati" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "iraq" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "kurd" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "makamlar" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "maqam" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "rast" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "semai" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "sikah" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @section in Documentation/music-glossary.tely +msgid "taqasim" +msgstr "" + +#. @node in Documentation/music-glossary.tely +#. @appendix in Documentation/music-glossary.tely +msgid "Literature used" +msgstr "" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond grammar" +msgstr "" + +#. @node in Documentation/notation.tely +#. @appendix in Documentation/notation.tely +msgid "LilyPond command index" +msgstr "" + +#. @node in Documentation/notation/notation.itely +#. @chapter in Documentation/notation/notation.itely +msgid "Musical notation" +msgstr "" + +#. @node in Documentation/notation/specialist.itely +#. @chapter in Documentation/notation/specialist.itely +msgid "Specialist notation" +msgstr "" + +#. Documentation/notation/input.itely:673 (comment) +msgid "not printed" +msgstr "" + +#. Documentation/notation/input.itely:1137 (variable) +msgid "allLyrics" +msgstr "" + +#. Documentation/notation/input.itely:1223 (variable) +#. Documentation/notation/input.itely:1242 (variable) +#. Documentation/notation/input.itely:1279 (variable) +#. Documentation/notation/input.itely:1294 (variable) +#. Documentation/notation/spacing.itely:1555 (variable) +#. Documentation/notation/spacing.itely:1609 (variable) +#. Documentation/notation/spacing.itely:1634 (variable) +#. Documentation/notation/changing-defaults.itely:458 (variable) +#. Documentation/notation/changing-defaults.itely:493 (context id) +#. Documentation/notation/changing-defaults.itely:543 (context id) +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:31 (variable) +#. Documentation/snippets/controlling-tuplet-bracket-visibility.ly:53 (variable) +#. Documentation/snippets/guitar-slides.ly:43 (variable) +#. Documentation/snippets/letter-tablature-formatting.ly:26 (variable) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:141 (variable) +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:170 (variable) +#. Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly:68 (variable) +msgid "music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @chapter in Documentation/notation/input.itely +msgid "General input and output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Input structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Structure of a score" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple scores in a book" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Multiple output files from one input file" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Output file names" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "File structure" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Titles and headers" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +msgid "Custom headers footers and titles" +msgstr "" + +#. @subsection in Documentation/notation/input.itely +msgid "Custom headers, footers, and titles" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Reference to page numbers" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Table of contents" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Working with input files" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Including LilyPond files" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Different editions from one source" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using variables" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Using tags" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Text encoding" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Displaying LilyPond notation" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "Controlling output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Extracting fragments of music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Skipping corrected music" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Alternative output formats" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Replacing the notation font" +msgstr "" + +#. @subsubheading in Documentation/notation/input.itely +msgid "Installation Instructions for MacOS" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @section in Documentation/notation/input.itely +msgid "MIDI output" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Creating MIDI files" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Instrument names" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "MIDI block" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "What goes into the MIDI output?" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Supported in MIDI" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Unsupported in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Repeats in MIDI" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Controlling MIDI dynamics" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Dynamic marks" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Overall MIDI volume" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (i)" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/input.itely +msgid "Equalizing different instruments (ii)" +msgstr "" + +#. @node in Documentation/notation/input.itely +#. @subsection in Documentation/notation/input.itely +msgid "Percussion in MIDI" +msgstr "" + +#. Documentation/notation/spacing.itely:2045 (comment) +msgid "The very low note here needs more room than 'space can" +msgstr "" + +#. Documentation/notation/spacing.itely:2046 (comment) +msgid "provide, so the distance between this staff and the next is" +msgstr "" + +#. Documentation/notation/spacing.itely:2047 (comment) +msgid "determined by 'padding." +msgstr "" + +#. Documentation/notation/spacing.itely:2050 (comment) +msgid "Here, 'space provides enough room, and there is no need to" +msgstr "" + +#. Documentation/notation/spacing.itely:2051 (comment) +msgid "compress the space (towards 'minimum-distance) to make room" +msgstr "" + +#. Documentation/notation/spacing.itely:2052 (comment) +msgid "for anything else on the page, so the distance between this" +msgstr "" + +#. Documentation/notation/spacing.itely:2053 (comment) +msgid "staff and the next is determined by 'space." +msgstr "" + +#. Documentation/notation/spacing.itely:2056 (comment) +msgid "By setting 'padding to a negative value, staves can be made to" +msgstr "" + +#. Documentation/notation/spacing.itely:2057 (comment) +msgid "collide. The lowest acceptable value for 'space is 0." +msgstr "" + +#. Documentation/notation/spacing.itely:2489 (comment) +msgid "this time the text will be closer to the staff" +msgstr "" + +#. Documentation/notation/spacing.itely:2491 (comment) +msgid "by setting outside-staff-priority to a non-number," +msgstr "" + +#. Documentation/notation/spacing.itely:2492 (comment) +msgid "we disable the automatic collision avoidance" +msgstr "" + +#. Documentation/notation/spacing.itely:2495 (comment) +msgid "now they will collide" +msgstr "" + +#. Documentation/notation/spacing.itely:2521 (comment) +msgid "the markup is too close to the following note" +msgstr "" + +#. Documentation/notation/spacing.itely:2525 (comment) +msgid "setting outside-staff-horizontal-padding fixes this" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @chapter in Documentation/notation/spacing.itely +msgid "Spacing issues" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Page layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\paper block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\paper} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Paper size and automatic scaling" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Setting paper size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Automatic scaling to paper size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Fixed vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Structure of flexible vertical spacing alists" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "List of flexible vertical spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Horizontal spacing \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for widths and margins" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for widths and margins" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for two-sided mode" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for two-sided mode" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for shifts and indents" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for shifts and indents" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Other \\\\paper variables" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "Other @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for line breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page breaking" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "\\\\paper variables for page numbering" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "@code{\\\\paper} variables for page numbering" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "Miscellaneous \\\\paper variables" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Miscellaneous @code{\\\\paper} variables" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Score layout" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +msgid "The \\\\layout block" +msgstr "" + +#. @subsection in Documentation/notation/spacing.itely +msgid "The @code{\\\\layout} block" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Setting the staff size" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Optimal page turning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Minimal page breaking" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Using an extra voice for breaks" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Vertical spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Flexible vertical spacing within systems" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Within-system spacing properties" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{VerticalAxisGroup} grob" +msgstr "" + +#. @subsubheading in Documentation/notation/spacing.itely +msgid "Properties of the @code{StaffGrouper} grob" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of ungrouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of grouped staves" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @unnumberedsubsubsec in Documentation/notation/spacing.itely +msgid "Spacing of non-staff lines" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Explicit staff and system positioning" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Vertical collision avoidance" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Horizontal spacing overview" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "New spacing area" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing horizontal spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Line length" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Proportional notation" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @section in Documentation/notation/spacing.itely +msgid "Fitting music onto fewer pages" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Displaying spacing" +msgstr "" + +#. @node in Documentation/notation/spacing.itely +#. @subsection in Documentation/notation/spacing.itely +msgid "Changing spacing" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:449 (variable) +msgid "musicA" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:450 (variable) +msgid "musicB" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:451 (variable) +msgid "keepVoicesAlive" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:453 (comment) +msgid "Keep Voice \\\"A\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:454 (comment) +msgid "Keep Voice \\\"B\\\" alive for 5 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:489 (variable) +#. Documentation/notation/changing-defaults.itely:500 (context id) +#. Documentation/notation/changing-defaults.itely:506 (context id) +#. Documentation/notation/changing-defaults.itely:508 (context id) +#. Documentation/notation/changing-defaults.itely:511 (context id) +#. Documentation/notation/changing-defaults.itely:533 (variable) +#. Documentation/notation/changing-defaults.itely:549 (context id) +msgid "accompaniment" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:490 (variable) +#. Documentation/notation/changing-defaults.itely:539 (variable) +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:74 (variable) +msgid "words" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:497 (comment) +msgid "Keep Voice \\\"melody\\\" alive for 4 bars" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:528 (comment) +#. Documentation/notation/changing-defaults.itely:530 (comment) +msgid "skip a bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2017 (comment) +msgid "default space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2023 (comment) +msgid "reduced space between staves" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2025 (comment) +msgid "this is the nested declaration" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2480 (comment) +msgid "increase the length of the tie" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2489 (comment) +msgid "increase the length of the rest bar" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2497 (comment) +msgid "increase the length of the hairpin" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2525 (comment) +msgid "default" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2528 (comment) +#. Documentation/notation/changing-defaults.itely:2541 (comment) +msgid "not effective alone" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2532 (comment) +#. Documentation/notation/changing-defaults.itely:2545 (comment) +msgid "effective only when both overrides are present" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2922 (comment) +msgid "Remove bar line at the end of the current line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:2968 (comment) +msgid "Try to remove all key signatures" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3392 (comment) +msgid "move horizontally left" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3394 (comment) +msgid "move vertically up" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3395 (comment) +msgid "third finger" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3443 (comment) +#. Documentation/notation/changing-defaults.itely:3482 (comment) +msgid "The rehearsal mark will be centered above the Clef" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3449 (comment) +msgid "The rehearsal mark will be centered above the Time Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3456 (comment) +msgid "The rehearsal mark will be centered above the Breath Mark" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3476 (comment) +msgid "The rehearsal mark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3489 (comment) +msgid "The rehearsal mark will be centered above the Bar Line" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3504 (comment) +msgid "The RehearsalMark will be centered above the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3511 (comment) +#. Documentation/notation/changing-defaults.itely:3527 (comment) +#. Documentation/notation/changing-defaults.itely:3534 (comment) +msgid "" +"The RehearsalMark will be aligned with the left edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3516 (comment) +msgid "" +"The RehearsalMark will be aligned with the right edge of the Key Signature" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3528 (comment) +msgid "and then shifted right by 3.5 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3535 (comment) +msgid "and then shifted left by 2 staff-spaces" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3583 (variable) +msgid "XinO" +msgstr "" + +#. Documentation/notation/changing-defaults.itely:3825 (variable) +msgid "custosNote" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @chapter in Documentation/notation/changing-defaults.itely +msgid "Changing defaults" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Interpretation contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Score - the master of all contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Top-level contexts - staff containers" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Intermediate-level contexts - staves" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Bottom-level contexts - voices" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Keeping contexts alive" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying context plug-ins" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Changing context default settings" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Defining new contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning contexts" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Explaining the Internals Reference" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Navigating the program reference" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Layout interfaces" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Determining the grob property" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Naming conventions" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Modifying properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Overview of modifying properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The set command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{@bs{}set} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The override command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\override} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "The tweak command" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "The @code{\\\\tweak} command" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "set versus override" +msgstr "" + +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "@code{\\\\set} vs. @code{\\\\override}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying alists" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Useful concepts and properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Input modes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Direction and placement" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Context layout order" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Distances and measurements" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Staff symbol properties" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Spanners" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{spanner-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{line-spanner-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Visibility of objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Removing the stencil" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Making objects transparent" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Painting objects white" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using break-visibility" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Special considerations" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Line styles" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Rotating objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating layout objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Rotating markup" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Advanced tweaks" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Aligning objects" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Setting X-offset and Y-offset directly" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Setting @code{X-offset} and @code{Y-offset} directly" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the side-position-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{side-position-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the self-alignment-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{self-alignment-interface}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{aligned-on-parent} procedures" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{centered-on-parent} procedures" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +msgid "Using the break-alignable-interface" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Using the @code{break-alignable-interface}" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Vertical grouping of grobs" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying stencils" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Modifying shapes" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @unnumberedsubsubsec in Documentation/notation/changing-defaults.itely +msgid "Modifying ties and slurs" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @section in Documentation/notation/changing-defaults.itely +msgid "Using music functions" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function syntax" +msgstr "" + +#. @node in Documentation/notation/changing-defaults.itely +#. @subsection in Documentation/notation/changing-defaults.itely +msgid "Substitution function examples" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendix in Documentation/notation/notation-appendices.itely +msgid "Notation manual tables" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Chord name chart" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Common chord modifiers" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined fretboard diagrams" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "MIDI instruments" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Normal colors" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "X color names" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color Names without a numerical suffix:" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Color names with a numerical suffix" +msgstr "" + +#. @subsubheading in Documentation/notation/notation-appendices.itely +msgid "Grey Scale" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "The Feta font" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Clef glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Time Signature glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Number glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accidental glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Default Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Special Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Shape-note Notehead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Rest glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Flag glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dot glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Dynamic glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Script glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Arrowhead glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Bracket-tip glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Pedal glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Accordion glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Vaticana glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Medicaea glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Hufnagel glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Mensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Neomensural glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Petrucci glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Solesmes glyphs" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Note head styles" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup commands" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Text markup list commands" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "List of articulations" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Articulation scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ornament scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Fermata scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Instrument-specific scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Repeat sign scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "Ancient scripts" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Percussion notes" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Technical glossary" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "alist" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "callback" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "closure" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "glyph" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "grob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "immutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "interface" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "lexer" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "mutable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "output-def" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "parser variable" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "prob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "simple closure" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @unnumberedsubsec in Documentation/notation/notation-appendices.itely +msgid "smob" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "All context properties" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Layout properties" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Available music functions" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Predefined type predicates" +msgstr "" + +#. @node in Documentation/notation/notation-appendices.itely +#. @appendixsec in Documentation/notation/notation-appendices.itely +msgid "Scheme functions" +msgstr "" + +#. @node in Documentation/notation/cheatsheet.itely +#. @appendix in Documentation/notation/cheatsheet.itely +msgid "Cheat sheet" +msgstr "" + +#. @unnumberedsec in Documentation/snippets.tely +#. @node in Documentation/snippets.tely +#. @unnumberedsec in Documentation/snippets.tely +msgid "\\\\TEXT\\\\" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Running lilypond" +msgstr "" + +#. @chapter in Documentation/usage/running.itely +msgid "Running @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Normal usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Command-line usage" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Invoking lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Invoking @command{lilypond}" +msgstr "" + +#. @unnumberedsubsubsec in Documentation/usage/running.itely +msgid "Standard shell commands" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Command line options for lilypond" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Command line options for @command{lilypond}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Environment variables" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "LilyPond in chroot jail" +msgstr "" + +#. @subheading in Documentation/usage/running.itely +msgid "Example script for 32-bit Ubuntu 8.04" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Error messages" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @section in Documentation/usage/running.itely +msgid "Common errors" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Music runs off the page" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "An extra staff appears" +msgstr "" + +#. @node in Documentation/usage/running.itely +msgid "Apparent error in ../ly/init.ly" +msgstr "" + +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Apparent error in @code{../ly/init.ly}" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message Unbound variable %" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Error message FT_Get_Glyph_Name" +msgstr "" + +#. @node in Documentation/usage/running.itely +#. @unnumberedsubsec in Documentation/usage/running.itely +msgid "Warning staff affinities should only decrease" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Updating files with convert-ly" +msgstr "" + +#. @chapter in Documentation/usage/updating.itely +msgid "Updating files with @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Why does the syntax change?" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Invoking convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Invoking @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Command line options for convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Command line options for @command{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +msgid "Problems running convert-ly" +msgstr "" + +#. @section in Documentation/usage/updating.itely +msgid "Problems running @code{convert-ly}" +msgstr "" + +#. @node in Documentation/usage/updating.itely +#. @section in Documentation/usage/updating.itely +msgid "Manual conversions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "lilypond-book" +msgstr "" + +#. @chapter in Documentation/usage/lilypond-book.itely +msgid "Running @command{lilypond-book}" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "An example of a musicological document" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Input" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Output" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Integrating music and text" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "LaTeX" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "@LaTeX{}" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +#. @subsubheading in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "Texinfo" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "HTML" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "DocBook" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Common conventions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including a LilyPond file" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Including LilyPond code" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Processing the DocBook document" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Music fragment options" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Invoking lilypond-book" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Invoking @command{lilypond-book}" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Format-specific instructions" +msgstr "" + +#. @subheading in Documentation/usage/lilypond-book.itely +msgid "Command line options" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Filename extensions" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "lilypond-book templates" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "html" +msgstr "" + +#. @subsection in Documentation/usage/lilypond-book.itely +msgid "xelatex" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +#. @section in Documentation/usage/lilypond-book.itely +msgid "Sharing the table of contents" +msgstr "" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Exporting the ToC from LilyPond" +msgstr "" + +#. @subsubheading in Documentation/usage/lilypond-book.itely +msgid "Importing the ToC into LaTeX" +msgstr "" + +#. @node in Documentation/usage/lilypond-book.itely +msgid "Alternate methods of mixing text and music" +msgstr "" + +#. @section in Documentation/usage/lilypond-book.itely +msgid "Alternative methods of mixing text and music" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @chapter in Documentation/usage/external.itely +msgid "External programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Point and click" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Text editor support" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Emacs mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Vim mode" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Other editors" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "Converting from other formats" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking midi2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{midi2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking musicxml2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{musicxml2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking abc2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @code{abc2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Invoking etf2ly" +msgstr "" + +#. @subsection in Documentation/usage/external.itely +msgid "Invoking @command{etf2ly}" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "Other formats" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @section in Documentation/usage/external.itely +msgid "LilyPond output in other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Many quotes from a large score" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into OpenOffice.org" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @unnumberedsubsec in Documentation/usage/external.itely +msgid "Inserting LilyPond output into other programs" +msgstr "" + +#. @node in Documentation/usage/external.itely +msgid "Independent includes" +msgstr "" + +#. @section in Documentation/usage/external.itely +msgid "Independent @code{include}s" +msgstr "" + +#. @node in Documentation/usage/external.itely +#. @subsection in Documentation/usage/external.itely +msgid "MIDI articulation" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @chapter in Documentation/usage/suggestions.itely +msgid "Suggestions for writing files" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "General suggestions" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Typesetting existing music" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Large projects" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Troubleshooting" +msgstr "" + +#. @node in Documentation/usage/suggestions.itely +#. @section in Documentation/usage/suggestions.itely +msgid "Make and Makefiles" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:38 (variable) +msgid "discant" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:41 (variable) +#. Documentation/snippets/anglican-psalm-template.ly:66 (variable) +msgid "dot" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:47 (comment) +msgid "16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:48 (variable) +msgid "accBasson" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:54 (comment) +msgid "een korig 8 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:55 (variable) +msgid "accBandon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:63 (variable) +msgid "accVCello" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:73 (comment) +msgid "4-8-16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:74 (variable) +msgid "accHarmon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:84 (variable) +msgid "accTrombon" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:96 (comment) +msgid "eenkorig 4 en 16 voets register" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:97 (variable) +msgid "accOrgan" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:105 (variable) +msgid "accMaster" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:119 (variable) +msgid "accAccord" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:131 (variable) +msgid "accMusette" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:141 (variable) +msgid "accCeleste" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:149 (variable) +msgid "accOboe" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:157 (variable) +msgid "accClarin" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:163 (variable) +msgid "accPiccolo" +msgstr "" + +#. Documentation/snippets/accordion-discant-symbols.ly:169 (variable) +msgid "accViolin" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:50 (variable) +msgid "continuo" +msgstr "" + +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:62 (context id) +#. Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly:63 (context id) +msgid "bassStaff" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:50 (variable) +msgid "drh" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:51 (variable) +msgid "drl" +msgstr "" + +#. Documentation/snippets/adding-drum-parts.ly:52 (variable) +msgid "timb" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:35 (variable) +#. Documentation/snippets/jazz-combo-template.ly:220 (context id) +#. Documentation/snippets/jazz-combo-template.ly:229 (context id) +msgid "two" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:36 (variable) +msgid "threeTwo" +msgstr "" + +#. Documentation/snippets/adding-fingerings-to-tablatures.ly:43 (variable) +msgid "threeFour" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:36 (variable) +msgid "splitStaffBarLineMarkup" +msgstr "" + +#. Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly:42 (variable) +msgid "splitStaffBarLine" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:48 (variable) +msgid "cueWhile" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:61 (variable) +msgid "flute" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:67 (variable) +msgid "clarinet" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:76 (variable) +msgid "pianoRH" +msgstr "" + +#. Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly:81 (variable) +msgid "pianoLH" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:33 (comment) +msgid "first, define a variable to hold the formatted date:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (variable) +msgid "date" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:34 (comment) +msgid "d-%m-%Y\\\" (localtime (current-time)))" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:36 (comment) +msgid "use it in the title block:" +msgstr "" + +#. Documentation/snippets/adding-the-current-date-to-a-score.ly:47 (comment) +msgid "and use it in a \\markup block:" +msgstr "" + +#. Documentation/snippets/additional-voices-to-avoid-collisions.ly:52 (variable) +msgid "voiceFive" +msgstr "" + +#. Documentation/snippets/adjusting-grace-note-spacing.ly:26 (variable) +msgid "graceNotes" +msgstr "" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:35 (comment) +msgid "Default layout:" +msgstr "" + +#. Documentation/snippets/adjusting-lyrics-vertical-spacing.ly:44 (comment) +msgid "Reducing the minimum space below the staff and above the lyrics:" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:61 (comment) +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:47 (comment) +msgid "Increase the size of the bar number by 2" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:63 (comment) +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:59 (comment) +msgid "Print a bar number every second measure" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:66 (comment) +msgid "Center-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-bar-numbers.ly:69 (comment) +msgid "Left-align bar numbers" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:90 (comment) +msgid "the RehearsalMark will be centered above the Clef" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:97 (comment) +msgid "the RehearsalMark will be centered above the TimeSignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:105 (comment) +msgid "the RehearsalMark will be centered above the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:116 (comment) +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:128 (comment) +msgid "" +"the RehearsalMark will be aligned with the left edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:122 (comment) +msgid "" +"the RehearsalMark will be aligned with the right edge of the KeySignature" +msgstr "" + +#. Documentation/snippets/aligning-marks-with-various-notation-objects.ly:129 (comment) +msgid "and then shifted right by one unit." +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:37 (variable) +#. Documentation/snippets/ancient-fonts.ly:37 (context id) +msgid "upperStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:49 (comment) +msgid "\\break % 1 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:60 (comment) +msgid "\\break %2 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:72 (comment) +msgid "\\break % 3 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:87 (comment) +msgid "\\break % 4 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:96 (comment) +#. Documentation/snippets/ancient-fonts.ly:158 (comment) +msgid "\\break % 5 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:110 (comment) +#. Documentation/snippets/ancient-fonts.ly:173 (comment) +msgid "\\break % 6 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:119 (comment) +#. Documentation/snippets/ancient-fonts.ly:183 (comment) +msgid "\\break % 7 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:126 (comment) +msgid "\\break % 8 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:129 (comment) +msgid "\\break % 12 (32*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:134 (variable) +#. Documentation/snippets/ancient-fonts.ly:134 (context id) +msgid "lowerStaff" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:144 (comment) +msgid "\\break % 2 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:149 (comment) +msgid "\\break % 4 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:188 (comment) +msgid "\\break % 9 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:190 (comment) +msgid "lig" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:194 (comment) +msgid "\\break % 11 (16*1)" +msgstr "" + +#. Documentation/snippets/ancient-fonts.ly:205 (comment) +msgid "\\break % 12 (8*1)" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:34 (context id) +msgid "cantus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:36 (comment) +msgid "Verse 1 — Salve, Regína" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:47 (comment) +msgid "Verse 2 — Vita, dulcédo" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:48 (comment) +msgid "a\\melisma \\[ a \\flexa g \\pes a\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:49 (comment) +msgid "\\divisioMinima" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:50 (comment) +msgid "\\[ a\\melisma \\flexa g\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:51 (comment) +msgid "\\[ f\\melisma \\flexa e f \\pes g \\flexa f\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:52 (comment) +msgid "\\[ e\\melisma \\flexa d\\melismaEnd \\]" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:53 (comment) +msgid "\\divisioMaior" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:54 (comment) +msgid "c d \\[e\\melisma \\pes f\\melismaEnd \\] g" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:55 (comment) +msgid "\\[d\\melisma \\pes e \\flexa c\\melismaEnd \\] d" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:56 (comment) +msgid "\\finalis" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:57 (comment) +msgid "Verse 3 — Ad te clamámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:66 (comment) +msgid "Verse 4 — Ad te suspirámus" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:79 (comment) +msgid "Verse 5 — Eia ergo, Advocáta nostra" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:95 (comment) +msgid "Verse 6 — Et Jesum" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:109 (comment) +msgid "Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María" +msgstr "" + +#. Documentation/snippets/ancient-headword.ly:127 (comment) +msgid "Vi- ta, dul- cé- do, et spes no- stra, sal- ve." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:53 (variable) +msgid "chant" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly:60 (variable) +msgid "verba" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:69 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:116 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:135 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:152 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:171 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:186 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:207 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:220 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:239 (comment) +#. Documentation/snippets/incipit.ly:25 (variable) +#. Documentation/snippets/incipit.ly:201 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:215 (comment) +msgid "incipit" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:71 (comment) +msgid "tight spacing" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:78 (comment) +msgid "turn off bar lines" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:82 (comment) +msgid "need this extra \\skip such that clef change comes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:83 (comment) +msgid "after bar line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:87 (comment) +msgid "CHECK: no effect?" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:88 (comment) +msgid "turn bar lines on again" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:96 (comment) +msgid "FIXME: setting printKeyCancellation back to #t must not" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:97 (comment) +msgid "occur in the first bar after the incipit. Dto. for forceClef." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:98 (comment) +msgid "Therefore, we need an extra \\skip." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:103 (comment) +#. Documentation/snippets/incipit.ly:75 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:38 (comment) +msgid "the actual music" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:105 (comment) +#. Documentation/snippets/incipit.ly:78 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:39 (comment) +msgid "let finis bar go through all staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:108 (comment) +#. Documentation/snippets/incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:41 (comment) +msgid "finis bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:112 (variable) +#. Documentation/snippets/incipit.ly:98 (variable) +#. Documentation/snippets/incipit.ly:232 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:45 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:234 (context id) +msgid "discantusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:118 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:155 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:161 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:175 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:189 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:191 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:200 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:211 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:223 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:71 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:81 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:94 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:101 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:136 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:162 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:190 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:217 (comment) +msgid "two bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:119 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:222 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:137 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:216 (comment) +msgid "eight bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:120 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:154 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:157 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:190 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:192 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:193 (comment) +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:224 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:161 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:189 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:191 (comment) +msgid "one bar" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:134 (variable) +#. Documentation/snippets/incipit.ly:112 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:58 (variable) +msgid "discantusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:148 (variable) +#. Documentation/snippets/incipit.ly:135 (variable) +#. Documentation/snippets/incipit.ly:239 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:68 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:241 (context id) +msgid "altusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:156 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:163 (comment) +msgid "seven bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:170 (variable) +#. Documentation/snippets/incipit.ly:149 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:80 (variable) +msgid "altusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:182 (variable) +#. Documentation/snippets/incipit.ly:173 (variable) +#. Documentation/snippets/incipit.ly:246 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:88 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:248 (context id) +msgid "tenorNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:188 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:187 (comment) +msgid "four bars" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:206 (variable) +#. Documentation/snippets/incipit.ly:187 (variable) +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:81 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:100 (variable) +msgid "tenorLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:216 (variable) +#. Documentation/snippets/incipit.ly:209 (variable) +#. Documentation/snippets/incipit.ly:253 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:106 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:255 (context id) +msgid "bassusNotes" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:238 (variable) +#. Documentation/snippets/incipit.ly:223 (variable) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:119 (variable) +msgid "bassusLyrics" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:249 (context id) +#. Documentation/snippets/incipit.ly:231 (context id) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:233 (context id) +msgid "choirStaff" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:271 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:269 (comment) +msgid "no bars in staves" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:274 (comment) +msgid "incipit should not start with a start delimiter" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:280 (comment) +#. Documentation/snippets/incipit.ly:276 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:284 (comment) +msgid "no slurs" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:283 (comment) +#. Documentation/snippets/incipit.ly:278 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:286 (comment) +msgid "Comment in the below \\\"\\remove\\\" command to allow line" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:287 (comment) +msgid "breaking also at those barlines where a note overlaps" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:285 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:288 (comment) +msgid "into the next bar. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:286 (comment) +#. Documentation/snippets/incipit.ly:281 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:289 (comment) +msgid "short example score, but especially for large scores, you" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:287 (comment) +#. Documentation/snippets/incipit.ly:282 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:290 (comment) +msgid "will typically yield better line breaking and thus improve" +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:288 (comment) +#. Documentation/snippets/incipit.ly:283 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:291 (comment) +msgid "overall spacing if you comment in the following command." +msgstr "" + +#. Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly:289 (comment) +#. Documentation/snippets/incipit.ly:284 (comment) +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:292 (comment) +msgid "\\remove \\\"Forbid_line_break_engraver\\\"" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:70 (variable) +msgid "tick" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:74 (comment) +msgid "Use markup to center the chant on the page" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:77 (comment) +msgid "centered" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:117 (comment) +#. Documentation/snippets/hymn-template.ly:115 (comment) +msgid "End score" +msgstr "" + +#. Documentation/snippets/anglican-psalm-template.ly:119 (comment) +msgid "End markup" +msgstr "" + +#. Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly:98 (variable) +#. Documentation/snippets/clusters.ly:25 (variable) +msgid "fragment" +msgstr "" + +#. Documentation/snippets/asymmetric-slurs.ly:27 (variable) +msgid "slurNotes" +msgstr "" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:40 (comment) +msgid "Default behavior" +msgstr "" + +#. Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly:46 (comment) +msgid "Corrected to avoid collisions" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:23 (comment) +msgid "%%%%%%% Cut here ----- Start 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:25 (comment) +msgid "PostScript -------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:26 (variable) +msgid "pScript" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:33 (comment) +msgid "change with B if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:34 (comment) +#, python-format +msgid "(B)show %%change with C if you prefer" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:40 (comment) +msgid "Span -----------------------------------" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:41 (comment) +msgid "Syntax: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:42 (variable) +msgid "bbarre" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:77 (comment) +msgid "uncomment this line for make full barred" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:78 (comment) +msgid "" +"\\once \\override TextSpanner #'bound-details #'left #'text = \\markup { \\" +"\"B\\\" $str }" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:82 (comment) +msgid "%%%%%%% Cut here ----- End 'bbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:83 (comment) +msgid "Copy and change the last line for full barred. Rename in 'fbarred.ly'" +msgstr "" + +#. Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly:86 (comment) +msgid "Syntaxe: \\bbarre #\\\"text\\\" { notes } - text = any number of box" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:51 (comment) +msgid "Set default beaming for all staves" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:59 (comment) +msgid "Modify beaming for just this staff" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:64 (comment) +msgid "Inherit beaming from Score context" +msgstr "" + +#. Documentation/snippets/beam-endings-in-score-context.ly:70 (comment) +msgid "Modify beaming for this voice only" +msgstr "" + +#. Documentation/snippets/beam-grouping-in-7-8-time.ly:54 (comment) +msgid "rhythm 2-3-2" +msgstr "" + +#. Documentation/snippets/book-parts.ly:22 (comment) +msgid "book paper, which is inherited by all children bookparts" +msgstr "" + +#. Documentation/snippets/book-parts.ly:25 (comment) +msgid "Page footer: add a different part-tagline at part last page" +msgstr "" + +#. Documentation/snippets/book-parts.ly:29 (comment) +msgid "Copyright header field only on book first page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:33 (comment) +msgid "Part tagline header field only on each part last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:37 (comment) +msgid "Tagline header field only on book last page." +msgstr "" + +#. Documentation/snippets/book-parts.ly:44 (comment) +msgid "book header, which is inherited by the first bookpart" +msgstr "" + +#. Documentation/snippets/book-parts.ly:53 (comment) +msgid "a different page breaking function may be used on each part" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:20 (comment) +msgid "this bar contains no \\breathe" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:22 (comment) +msgid "Modern notation:" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:23 (comment) +msgid "by default, \\breathe uses the rcomma, just as if saying:" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:24 (comment) +msgid "" +"\\override BreathingSign #'text = #(make-musicglyph-markup \\\"scripts.rcomma" +"\\\")" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:27 (comment) +msgid "rvarcomma and lvarcomma are variations of the default rcomma and lcomma" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:28 (comment) +msgid "N.B.: must use Staff context here, since we start a Voice below" +msgstr "" + +#. Documentation/snippets/breathing-signs.ly:32 (comment) +msgid "vee" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:30 (comment) +msgid "construct the symbol" +msgstr "" + +#. Documentation/snippets/caesura-railtracks-with-fermata.ly:39 (comment) +msgid "set the breathe mark back to normal" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:29 (variable) +msgid "hairpinWithCenteredText" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:41 (variable) +msgid "hairpinMolto" +msgstr "" + +#. Documentation/snippets/center-text-below-hairpin-dynamics.ly:42 (variable) +msgid "hairpinMore" +msgstr "" + +#. Documentation/snippets/changing--flageolet-mark-size.ly:44 (variable) +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:24 (variable) +msgid "smallFlageolet" +msgstr "" + +#. Documentation/snippets/changing-the-ambitus-gap.ly:42 (comment) +msgid "Default setting" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:36 (comment) +msgid "The following is only here to print the names of the" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:37 (comment) +msgid "chords styles; it can be removed if you do not need to" +msgstr "" + +#. Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly:38 (comment) +msgid "print them." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:18 (comment) +msgid "change for other default global staff size." +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:20 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:182 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:111 (comment) +#. Documentation/snippets/utf-8.ly:24 (comment) +msgid "{" +msgstr "" + +#. Documentation/snippets/changing-the-default-text-font-family.ly:24 (comment) +#. Documentation/snippets/engravers-one-by-one.ly:184 (comment) +#. Documentation/snippets/expressive-headword.ly:32 (comment) +#. Documentation/snippets/expressive-headword.ly:33 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:112 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:242 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:206 (comment) +#. Documentation/snippets/utf-8.ly:38 (comment) +msgid "}" +msgstr "" + +#. Documentation/snippets/changing-the-text-for-sustain-markings.ly:32 (variable) +msgid "sustainNotes" +msgstr "" + +#. Documentation/snippets/chant-or-psalms-notation.ly:35 (variable) +msgid "stemOn" +msgstr "" + +#. Documentation/snippets/chant-or-psalms-notation.ly:36 (variable) +msgid "stemOff" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:35 (comment) +msgid "modify maj9 and 6(add9)" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:36 (comment) +msgid "Exception music is chords with markups" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:37 (variable) +msgid "chExceptionMusic" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:42 (comment) +msgid "Convert music to list and prepend to existing exceptions." +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:43 (variable) +msgid "chExceptions" +msgstr "" + +#. Documentation/snippets/chord-name-exceptions.ly:47 (variable) +msgid "theMusic" +msgstr "" + +#. Documentation/snippets/chordchanges-for-fretboards.ly:36 (variable) +msgid "myChords" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:29 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:36 (variable) +msgid "theChords" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:31 (comment) +#. Documentation/snippets/pitches-headword.ly:141 (comment) +msgid "\\break" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:35 (variable) +msgid "verseOne" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:42 (variable) +msgid "verseTwo" +msgstr "" + +#. Documentation/snippets/chords-headword.ly:81 (context id) +msgid "sop" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:65 (variable) +msgid "origScore" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:83 (comment) +msgid "Each clip-region is a (START . END) pair" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:84 (comment) +msgid "where both are rhythmic-locations." +msgstr "" + +#. Documentation/snippets/clip-systems.ly:86 (comment) +msgid "(make-rhythmic-locations BAR-NUMBER NUM DEN)" +msgstr "" + +#. Documentation/snippets/clip-systems.ly:87 (comment) +msgid "means NUM/DEN whole-notes into bar numbered BAR-NUMBER" +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:18 (comment) +msgid "Association list of pitches to colors." +msgstr "" + +#. Documentation/snippets/coloring-notes-depending-on-their-pitch.ly:38 (comment) +msgid "Compare pitch and alteration (not octave)." +msgstr "" + +#. Documentation/snippets/combining-dynamics-with-markup-texts.ly:27 (variable) +msgid "piuF" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:94 (variable) +msgid "musicUp" +msgstr "" + +#. Documentation/snippets/combining-two-parts-on-the-same-staff.ly:101 (variable) +msgid "musicDown" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:52 (comment) +msgid "show hairpin" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:54 (comment) +msgid "hide text span" +msgstr "" + +#. Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly:58 (comment) +msgid "show glissando" +msgstr "" + +#. Documentation/snippets/creating-real-parenthesized-dynamics.ly:45 (variable) +msgid "parenF" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:44 (comment) +msgid "the hidden measure and bar line" +msgstr "" + +#. Documentation/snippets/creating-simultaneous-rehearsal-marks.ly:45 (comment) +msgid "\\cadenzaOn turns off automatic calculation of bar numbers" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:44 (context id) +#. Documentation/snippets/jazz-combo-template.ly:256 (variable) +#. Documentation/snippets/screech-boink.ly:15 (context id) +msgid "up" +msgstr "" + +#. Documentation/snippets/cross-staff-tremolos.ly:49 (context id) +#. Documentation/snippets/jazz-combo-template.ly:262 (variable) +#. Documentation/snippets/screech-boink.ly:45 (context id) +msgid "down" +msgstr "" + +#. Documentation/snippets/customizing-fretboard-fret-diagrams.ly:55 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:27 (comment) +msgid "Set global properties of fret diagram" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:56 (context id) +#. Documentation/snippets/formatting-lyrics-syllables.ly:22 (variable) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:25 (context id) +#. Documentation/snippets/piano-template-with-melody-and-lyrics.ly:78 (context id) +msgid "mel" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:65 (comment) +msgid "C major for guitar, no barre, using defaults" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:66 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:116 (comment) +msgid "terse style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:69 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:91 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:56 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:77 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:156 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:177 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:255 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:276 (comment) +msgid "C major for guitar, barred on third fret" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:70 (comment) +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:92 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:57 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:79 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:106 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:157 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:179 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:206 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:256 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:278 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:305 (comment) +msgid "verbose style" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:71 (comment) +msgid "size 1.0" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:72 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:58 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:158 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:257 (comment) +msgid "roman fret label, finger labels below string, straight barre" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:74 (comment) +msgid "standard size" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:93 (comment) +msgid "landscape orientation, arabic numbers, M for mute string" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:94 (comment) +msgid "no barre, fret label down or left, small mute label font" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:115 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:128 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:228 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:327 (comment) +msgid "simple D chord" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:117 (comment) +msgid "larger dots, centered dots, fewer frets" +msgstr "" + +#. Documentation/snippets/customizing-markup-fret-diagrams.ly:118 (comment) +msgid "label below string" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:39 (comment) +msgid "Grob utilities" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:41 (comment) +msgid "" +"These are literal rewrites of some C++ methods used by the ambitus engraver." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:76 (comment) +msgid "Ambitus data structure" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:79 (comment) +msgid "The class holds the various grobs that are created" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:80 (comment) +msgid "to print an ambitus:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:81 (comment) +msgid "- ambitus-group: the grob that groups all the components of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:82 (comment) +msgid "(Ambitus grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:83 (comment) +msgid "- ambitus-line: the vertical line between the upper and lower ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:84 (comment) +msgid "notes (AmbitusLine grob);" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:85 (comment) +msgid "- ambitus-up-note and ambitus-down-note: the note head and accidental" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:86 (comment) +msgid "for the lower and upper note of the ambitus (see class" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:87 (comment) +msgid "below)." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:88 (comment) +msgid "The other slots define the key and clef context of the engraver:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:89 (comment) +msgid "- start-c0: position of middle c at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:90 (comment) +msgid "is used to place the ambitus notes according to their pitch;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:91 (comment) +msgid "- start-key-sig: the key signature at the beginning of the piece. It" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:92 (comment) +msgid "is used to determine if accidentals shall be printed next to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:93 (comment) +msgid "notes." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:107 (comment) +msgid "Accessor for the lower and upper note data of an ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:115 (comment) +msgid "The class holds the grobs that are specific to ambitus" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:116 (comment) +msgid "(lower and upper) notes:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:117 (comment) +msgid "- head: an AmbitusNoteHead grob;" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:118 (comment) +msgid "- accidental: an AmbitusAccidental grob, to be possibly printed next" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:119 (comment) +msgid "to the ambitus note head." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:120 (comment) +msgid "Moreover:" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:121 (comment) +msgid "- pitch is the absolute pitch of the note" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:122 (comment) +msgid "- cause is the note event that causes this ambitus note, i.e. the lower" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:123 (comment) +msgid "or upper note of the considered music sequence." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:136 (comment) +msgid "Ambitus engraving logics" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:138 (comment) +msgid "Rewrite of the code from @file{lily/ambitus-engraver.cc}." +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:307 (comment) +msgid "Ambitus engraver definition" +msgstr "" + +#. Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly:332 (comment) +msgid "Example" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:84 (comment) +msgid "add FretBoards for the Cuatro" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:85 (comment) +msgid "Note: This section could be put into a separate file" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:86 (comment) +msgid "predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:87 (comment) +msgid "and \\included into each of your compositions" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:89 (variable) +msgid "cuatroTuning" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:91 (variable) +msgid "dSix" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:92 (variable) +msgid "dMajor" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:93 (variable) +msgid "aMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:94 (variable) +msgid "dMajSeven" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:95 (variable) +msgid "gMajor" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:113 (comment) +msgid "end of potential include file /predefined-cuatro-fretboards.ly" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:118 (variable) +msgid "primerosNames" +msgstr "" + +#. Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly:122 (variable) +msgid "primeros" +msgstr "" + +#. Documentation/snippets/demo-midiinstruments.ly:24 (variable) +msgid "baseMelody" +msgstr "" + +#. Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly:73 (comment) +msgid "Must be lower than the actual number of staff lines" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:26 (variable) +msgid "fixA" +msgstr "" + +#. Documentation/snippets/displaying-complex-chords.ly:29 (variable) +msgid "fixB" +msgstr "" + +#. Documentation/snippets/displaying-grob-ancestry.ly:197 (comment) +msgid "\\\" (make-string 36 #\\-))" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:21 (comment) +msgid "new voice ( = \\voiceOne), hidden" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:23 (comment) +msgid "attach glissando to note heads" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:28 (comment) +msgid "original voice with chords rearranged so that" +msgstr "" + +#. Documentation/snippets/double-glissando.ly:29 (comment) +msgid "glissando is attached to a & c" +msgstr "" + +#. Documentation/snippets/drawing-circles-around-note-heads.ly:16 (variable) +msgid "circle" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:54 (comment) +msgid "" +"Two functions for (de)crescendo spanners where you can explicitly give the" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:55 (comment) +msgid "spanner text." +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:56 (variable) +msgid "mycresc" +msgstr "" + +#. Documentation/snippets/dynamics-custom-text-spanner-postfix.ly:62 (variable) +msgid "mydecresc" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:61 (comment) +msgid "Some sample text dynamic spanners, to be used as postfix operators" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:62 (variable) +msgid "crpoco" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:67 (comment) +msgid "" +"Redefine the existing \\cresc, \\dim and \\decresc commands to use postfix " +"syntax" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:68 (variable) +msgid "cresc" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:73 (variable) +msgid "dim" +msgstr "" + +#. Documentation/snippets/dynamics-text-spanner-postfix.ly:78 (variable) +msgid "decresc" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:30 (comment) +msgid "NR 1.7 Editorial annotations" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:32 (comment) +msgid "Beethoven, Op. 31, No. 3" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:33 (comment) +msgid "Piano sonata 18, Movt II, Scherzo" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:34 (comment) +msgid "Measures 9 - 14" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:38 (comment) +#. Documentation/snippets/expressive-headword.ly:37 (comment) +#. Documentation/snippets/pitches-headword.ly:38 (comment) +#. Documentation/snippets/rhythms-headword.ly:39 (comment) +msgid "RH Staff" +msgstr "" + +#. Documentation/snippets/editorial-headword.ly:76 (comment) +#. Documentation/snippets/expressive-headword.ly:169 (comment) +#. Documentation/snippets/pitches-headword.ly:111 (comment) +#. Documentation/snippets/rhythms-headword.ly:128 (comment) +msgid "LH Staff" +msgstr "" + +#. Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly:25 (comment) +msgid "PostScript is a registered trademark of Adobe Systems Inc." +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:70 (comment) +msgid "sample music" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:71 (variable) +msgid "topVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:79 (variable) +msgid "botVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:87 (variable) +msgid "hoom" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:98 (variable) +msgid "pah" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:108 (comment) +msgid "setup for Request->Element conversion. Guru-only" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:111 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:209 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:222 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:278 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:292 (variable) +msgid "MyStaff" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:139 (comment) +msgid "explicitly set instrumentName, so we don't get" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:140 (comment) +msgid "weird effects when doing instrument names for" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:141 (comment) +msgid "piano staves" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:150 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:236 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:249 (variable) +#. Documentation/snippets/engravers-one-by-one.ly:262 (variable) +msgid "MyVoice" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:165 (comment) +msgid "must come before all" +msgstr "" + +#. Documentation/snippets/engravers-one-by-one.ly:175 (comment) +msgid "\\consists \\\"Rest_engraver\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:23 (comment) +msgid "L. v. Beethoven, Op. 49 no. 1" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:24 (comment) +msgid "Piano sonata 19 - \\\"Leichte Sonate\\\"" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:25 (comment) +msgid "measures 1 - 12" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:27 (comment) +msgid "\\layout {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:28 (comment) +msgid "\\context {" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:29 (comment) +msgid "\\Score" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:30 (comment) +msgid "\\override SpacingSpanner #'base-shortest-duration =" +msgstr "" + +#. Documentation/snippets/expressive-headword.ly:31 (comment) +msgid "#(ly:make-moment 1 20)" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:31 (comment) +msgid "Arcangelo Corelli, 12 Sonate da Camera, Op. 2" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:32 (comment) +msgid "Sonata II, Allemanda" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:33 (comment) +msgid "measures 1 - 88" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:34 (comment) +msgid "Coded by Neil Puttock; modified by Carl Sorensen" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:36 (variable) +msgid "extendOn" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:37 (variable) +msgid "extendOff" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:45 (context id) +msgid "violinoI" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:63 (context id) +msgid "violinoII" +msgstr "" + +#. Documentation/snippets/figured-bass-headword.ly:81 (context id) +msgid "violone" +msgstr "" + +#. Documentation/snippets/fingering-symbols-for-wind-instruments.ly:34 (variable) +#. Documentation/snippets/recorder-fingering-chart.ly:40 (variable) +msgid "centermarkup" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:94 (comment) +msgid "Cut here ----- Start 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:96 (comment) +msgid "Text indicators" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:97 (variable) +msgid "abanico" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:98 (variable) +msgid "rasgueaso" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:99 (variable) +msgid "alzapua" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:101 (comment) +msgid "Finger stroke symbols" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:102 (variable) +msgid "strokeUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:112 (variable) +msgid "strokeDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:122 (comment) +msgid "Golpe symbol" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:123 (variable) +msgid "golpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:137 (variable) +msgid "strokeUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:138 (variable) +msgid "iUpGolpe" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:140 (comment) +msgid "Strokes for all fingers" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:141 (variable) +msgid "pUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:142 (variable) +msgid "pDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:143 (variable) +msgid "iUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:144 (variable) +msgid "iDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:145 (variable) +msgid "mUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:146 (variable) +msgid "mDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:147 (variable) +msgid "aUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:148 (variable) +msgid "aDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:149 (variable) +msgid "xUp" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:150 (variable) +msgid "xDown" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:153 (comment) +msgid "Just handy :)" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:154 (variable) +msgid "tupletOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:159 (variable) +msgid "tupletsOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:164 (variable) +msgid "tupletsOn" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:169 (variable) +msgid "headsOff" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:175 (variable) +msgid "headsOn" +msgstr "" + +#. Documentation/snippets/flamenco-notation.ly:181 (comment) +msgid "Cut here ----- End 'flamenco.ly'" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:157 (comment) +msgid "Example 1" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:163 (comment) +msgid "Example 2" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:169 (comment) +msgid "Example 3" +msgstr "" + +#. Documentation/snippets/flat-flags-and-beam-nibs.ly:177 (comment) +msgid "Example 4" +msgstr "" + +#. Documentation/snippets/flute-slap-notation.ly:18 (variable) +msgid "slap" +msgstr "" + +#. Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly:20 (variable) +msgid "example" +msgstr "" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:17 (comment) +msgid "" +"Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/" +"msg00215.html" +msgstr "" + +#. Documentation/snippets/formatting-lyrics-syllables.ly:23 (variable) +msgid "lyr" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:33 (comment) +msgid "A chord for ukulele" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:43 (comment) +msgid "A chord for ukulele, with formatting defined in definition string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:44 (comment) +msgid "1.2 * size, 4 strings, 4 frets, fingerings below string" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:45 (comment) +msgid "dot radius .35 of fret spacing, dot position 0.55 of fret spacing" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:54 (comment) +msgid "These chords will be in normal orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:60 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:81 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:108 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:160 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:181 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:208 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:259 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:280 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:307 (comment) +#, python-format +msgid "110% of default size" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:78 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:178 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:277 (comment) +msgid "Double barre used to test barre function" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:105 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:205 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:304 (comment) +msgid "C major for guitar, with capo on third fret" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:140 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:239 (comment) +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:338 (comment) +msgid "simple D chord, large top fret thickness" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:152 (comment) +msgid "These chords will be in landscape orientation" +msgstr "" + +#. Documentation/snippets/fret-diagrams-explained-and-developed.ly:251 (comment) +msgid "These chords will be in opposing-landscape orientation" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:49 (comment) +msgid "Make a blank new fretboard table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:52 (comment) +msgid "Make a new fretboard table as a copy of default-fret-table" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:55 (comment) +msgid "Add a chord to custom-fretboard-table-one" +msgstr "" + +#. Documentation/snippets/fretboards-alternate-tables.ly:61 (comment) +msgid "Add a chord to custom-fretboard-table-two" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:35 (comment) +msgid "shortcuts" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:36 (comment) +msgid "fingering orientations" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:37 (variable) +msgid "sfol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:38 (variable) +msgid "sfor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:39 (variable) +msgid "sfod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:40 (variable) +msgid "sfou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:42 (comment) +msgid "string number orientations" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (variable) +msgid "ssnol" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:43 (comment) +msgid "(down right up)" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:44 (variable) +msgid "ssnou" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:45 (variable) +msgid "ssnod" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:46 (variable) +msgid "ssnor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:48 (comment) +msgid "define fingering offset" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:49 (variable) +msgid "FO" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:54 (comment) +msgid "markups" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:55 (variable) +msgid "rit" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:56 (variable) +msgid "dimin" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:57 (variable) +msgid "andantino" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:58 (variable) +msgid "benmarcato" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:59 (variable) +msgid "pdolce" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:61 (comment) +msgid "THE MUSIC %%%" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:73 (comment) +#. Documentation/snippets/fretted-headword.ly:112 (comment) +msgid "m. 1" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:79 (comment) +msgid "m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:81 (comment) +#. Documentation/snippets/fretted-headword.ly:117 (comment) +msgid "m. 3" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:82 (comment) +#. Documentation/snippets/fretted-headword.ly:119 (comment) +msgid "m. 4" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:86 (comment) +#. Documentation/snippets/fretted-headword.ly:124 (comment) +msgid "m. 5" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:89 (comment) +msgid "end of m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:92 (comment) +#. Documentation/snippets/fretted-headword.ly:129 (comment) +msgid "m. 7" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:95 (comment) +msgid "beg of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:96 (comment) +msgid "end of m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:98 (comment) +msgid "end of m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:100 (comment) +#. Documentation/snippets/fretted-headword.ly:136 (comment) +msgid "m. 10" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:102 (comment) +msgid "beg of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:104 (comment) +msgid "end of m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:114 (comment) +msgid "beg m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:115 (comment) +msgid "end m. 2" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:121 (comment) +msgid "new section starts here in A minor" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:126 (comment) +msgid "beg m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:127 (comment) +msgid "end m. 6" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:131 (comment) +msgid "m. 8" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:133 (comment) +msgid "beg m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:134 (comment) +msgid "end m. 9" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:138 (comment) +msgid "m. 11" +msgstr "" + +#. Documentation/snippets/fretted-headword.ly:142 (context id) +#. Documentation/snippets/jazz-combo-template.ly:182 (variable) +#. Documentation/snippets/jazz-combo-template.ly:292 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:60 (context id) +#. Documentation/snippets/polyphony-in-tablature.ly:65 (context id) +msgid "guitar" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:29 (comment) +msgid "Create a flag stencil by looking up the glyph from the font" +msgstr "" + +#. Documentation/snippets/generating-custom-flags.ly:43 (variable) +msgid "snippetexamplenotes" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:53 (comment) +msgid "this moves them up one staff space from the default position" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:71 (comment) +msgid "set up grids" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:73 (comment) +msgid "set the grid interval to one quarter note" +msgstr "" + +#. Documentation/snippets/grid-lines--changing-their-appearance.ly:79 (comment) +msgid "this moves them to the right half a staff space" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:38 (comment) +msgid "hides staff and notes so that only the grid lines are visible" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:45 (comment) +msgid "dummy notes to force regular note spacing" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:61 (comment) +msgid "center grid lines horizontally below note heads" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:68 (comment) +msgid "set line length and positioning:" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:69 (comment) +msgid "two staff spaces above center line on hidden staff" +msgstr "" + +#. Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly:70 (comment) +msgid "to four spaces below center line on visible staff" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:33 (comment) +msgid "Hide fret number: useful to draw slide into/from a casual point of" +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:34 (comment) +msgid "the fretboard." +msgstr "" + +#. Documentation/snippets/guitar-slides.ly:35 (variable) +msgid "hideFretNumber" +msgstr "" + +#. Documentation/snippets/heavily-customized-polymetric-time-signatures.ly:48 (variable) +msgid "drum" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:56 (comment) +msgid "Solution 1: Using a simple markup with a particular halign value" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:57 (comment) +msgid "Drawback: It's a markup, not a dynamic command, so \\dynamicDown" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:58 (comment) +msgid "etc. will have no effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:59 (variable) +msgid "semppMarkup" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:61 (comment) +msgid "Solution 2: Using a dynamic script & shifting with" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:62 (comment) +msgid "\\once \\override ... #'X-offset = .." +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:63 (comment) +msgid "Drawback: \\once \\override needed for every invocation" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:64 (variable) +msgid "semppK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:71 (comment) +msgid "Solution 3: Padding the dynamic script so the center-alignment" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:72 (comment) +msgid "puts it at the correct position" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:73 (comment) +msgid "" +"Drawback: the padding really reserves the space, nothing else can be there" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:74 (variable) +msgid "semppT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:82 (comment) +msgid "Solution 4: Dynamic, setting the dimensions of the additional text to 0" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:83 (comment) +msgid "Drawback: To lilypond \\\"sempre\\\" has no extent, so it might put" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:84 (comment) +msgid "other stuff there => collisions" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:85 (comment) +msgid "Drawback: Also, there seems to be some spacing, so it's not exactly the" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:86 (comment) +msgid "same alignment as without the additional text" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:87 (variable) +msgid "semppM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:96 (comment) +msgid "Solution 5: Dynamic with explicit shifting inside the scheme function" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:97 (variable) +msgid "semppG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:105 (comment) +msgid "Solution 6: Dynamic with explicit alignment. This has only effect" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:106 (comment) +msgid "if one sets X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:107 (comment) +msgid "Drawback: One needs to set DynamicText #'X-offset!" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:108 (comment) +msgid "Drawback: Aligned at the right edge of the additional text," +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:109 (comment) +msgid "not at the center of pp" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:110 (variable) +msgid "semppMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:118 (context id) +msgid "s" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:125 (context id) +msgid "sMarkup" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:132 (context id) +msgid "sK" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:143 (context id) +msgid "sT" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:150 (context id) +msgid "sM" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:157 (context id) +msgid "sG" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:164 (context id) +msgid "sMII" +msgstr "" + +#. Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly:168 (comment) +msgid "Setting to ##f (false) gives the same result" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:29 (variable) +#. Documentation/snippets/score-for-diatonic-accordion.ly:62 (variable) +#. Documentation/snippets/showing-chords-at-changes.ly:34 (variable) +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly:60 (variable) +#. Documentation/snippets/single-staff-template-with-notes-and-chords.ly:59 (variable) +msgid "harmonies" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:32 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:35 (comment) +msgid "THIS LINE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:45 (comment) +msgid "THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM" +msgstr "" + +#. Documentation/snippets/how-to-change-fret-diagram-position.ly:48 (comment) +msgid "HERE IS THE SECOND METHOD" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:50 (variable) +msgid "Timeline" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:82 (comment) +msgid "Start score" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:84 (comment) +msgid "Start pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:85 (comment) +msgid "Start Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:88 (comment) +msgid "Start Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:92 (comment) +msgid "End Voice = \\\"Soprano\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:93 (comment) +msgid "Start Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:97 (comment) +msgid "End Voice = \\\"Alto\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:98 (comment) +msgid "End Staff = RH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:99 (comment) +msgid "Start Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:102 (comment) +msgid "Start Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:106 (comment) +msgid "End Voice = \\\"Tenor\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:107 (comment) +msgid "Start Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:111 (comment) +msgid "End Voice = \\\"Bass\\\"" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:112 (comment) +msgid "End Staff = LH" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:113 (comment) +msgid "End pianostaff" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:134 (comment) +msgid "Start paper block" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:135 (comment) +msgid "don't indent first system" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:136 (comment) +msgid "shorten line length to suit music" +msgstr "" + +#. Documentation/snippets/hymn-template.ly:137 (comment) +msgid "End paper block" +msgstr "" + +#. Documentation/snippets/incipit.ly:85 (variable) +#. Documentation/snippets/incipit.ly:86 (context id) +msgid "discantusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:122 (variable) +#. Documentation/snippets/incipit.ly:123 (context id) +msgid "altusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:138 (comment) +#. Documentation/snippets/incipit.ly:150 (comment) +#. Documentation/snippets/incipit.ly:179 (comment) +#. Documentation/snippets/incipit.ly:188 (comment) +msgid "two measures" +msgstr "" + +#. Documentation/snippets/incipit.ly:158 (variable) +#. Documentation/snippets/incipit.ly:159 (context id) +msgid "tenorIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:194 (variable) +#. Documentation/snippets/incipit.ly:195 (context id) +msgid "bassusIncipit" +msgstr "" + +#. Documentation/snippets/incipit.ly:265 (comment) +msgid "no bar lines in staves or lyrics" +msgstr "" + +#. Documentation/snippets/incipit.ly:268 (comment) +msgid "the next two instructions keep the lyrics between the bar lines" +msgstr "" + +#. Documentation/snippets/incipit.ly:279 (comment) +msgid "breaking also at those bar lines where a note overlaps" +msgstr "" + +#. Documentation/snippets/incipit.ly:280 (comment) +msgid "into the next measure. The command is commented out in this" +msgstr "" + +#. Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly:17 (variable) +msgid "tuning" +msgstr "" + +#. Documentation/snippets/isolated-percent-repeats.ly:42 (variable) +msgid "makePercent" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:67 (comment) +msgid "#(set-global-staff-size 16)" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:70 (comment) +msgid "Some macros %%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:72 (variable) +msgid "sl" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:76 (variable) +msgid "nsl" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:80 (variable) +msgid "crOn" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:81 (variable) +msgid "crOff" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:83 (comment) +msgid "insert chord name style stuff here." +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:85 (variable) +msgid "jazzChords" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:87 (comment) +msgid "Keys'n'thangs %%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:91 (variable) +msgid "Key" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:93 (comment) +msgid "############ Horns ############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:95 (comment) +msgid "------ Trumpet ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:96 (variable) +msgid "trpt" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:100 (variable) +msgid "trpHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:103 (variable) +#. Documentation/snippets/jazz-combo-template.ly:283 (context id) +#. Documentation/snippets/staff-headword.ly:93 (context id) +#. Documentation/snippets/staff-headword.ly:112 (context id) +msgid "trumpet" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:112 (comment) +msgid "------ Alto Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:117 (variable) +msgid "altoHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:120 (variable) +msgid "altoSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:129 (comment) +msgid "------ Baritone Saxophone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:130 (variable) +msgid "bari" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:138 (variable) +msgid "bariHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:141 (variable) +msgid "bariSax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:150 (comment) +msgid "------ Trombone ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:151 (variable) +msgid "tbone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:155 (variable) +msgid "tboneHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:158 (variable) +#. Documentation/snippets/jazz-combo-template.ly:287 (context id) +msgid "trombone" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:167 (comment) +msgid "############ Rhythm Section #############" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:169 (comment) +msgid "------ Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:170 (variable) +msgid "gtr" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:178 (variable) +msgid "gtrHarmony" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:191 (comment) +msgid "------ Piano ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:192 (variable) +msgid "rhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:197 (variable) +msgid "rhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:203 (variable) +msgid "lhUpper" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:208 (variable) +msgid "lhLower" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:214 (variable) +msgid "PianoRH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:223 (variable) +msgid "PianoLH" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:241 (comment) +msgid "------ Bass Guitar ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:255 (comment) +msgid "------ Drums ------" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:269 (variable) +msgid "drumContents" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:278 (comment) +#, python-format +msgid "It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:282 (context id) +msgid "horns" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:284 (context id) +msgid "altosax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:285 (context id) +msgid "barichords" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:286 (context id) +msgid "barisax" +msgstr "" + +#. Documentation/snippets/jazz-combo-template.ly:291 (context id) +msgid "chords" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:24 (comment) +msgid "M. Ravel, Sonatine (1905)" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:25 (comment) +msgid "First movement" +msgstr "" + +#. Documentation/snippets/keyboard-headword.ly:34 (variable) +msgid "fermataLong" +msgstr "" + +#. Documentation/snippets/makam-example.ly:55 (comment) +msgid "Initialize makam settings" +msgstr "" + +#. Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly:20 (variable) +msgid "bassfigures" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:22 (comment) +msgid "from upper staff-line (position 2) to center (position 0)" +msgstr "" + +#. Documentation/snippets/manually-controlling-beam-positions.ly:25 (comment) +msgid "from center to one above center (position 1)" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:18 (variable) +msgid "speakOn" +msgstr "" + +#. Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly:35 (variable) +msgid "speakOff" +msgstr "" + +#. Documentation/snippets/markup-lines.ly:23 (comment) +msgid "Candide, Voltaire" +msgstr "" + +#. Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly:56 (comment) +msgid "the final bar line is not interrupted" +msgstr "" + +#. Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly:18 (variable) +msgid "normalPos" +msgstr "" + +#. Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly:71 (variable) +msgid "dashPlus" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:24 (comment) +msgid "Set tuplets to be extendable..." +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:26 (comment) +msgid "...to cover all items up to the next note" +msgstr "" + +#. Documentation/snippets/modifying-tuplet-bracket-length.ly:30 (comment) +msgid "...or to cover just whitespace" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:60 (comment) +msgid "space for instrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:61 (comment) +msgid "space for shortInstrumentName" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:64 (variable) +msgid "fluteMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:65 (comment) +msgid "Pitches as written on a manuscript for Clarinet in A" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:66 (comment) +msgid "are transposed to concert pitch." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:67 (variable) +msgid "clarinetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:69 (variable) +msgid "trumpetMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:70 (comment) +msgid "Key signature is often omitted for horns" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:71 (variable) +msgid "hornMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:73 (variable) +msgid "percussionMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:76 (variable) +msgid "altoIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:77 (variable) +msgid "altoIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:78 (variable) +msgid "altoILyrics" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:79 (variable) +msgid "altoIILyrics" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:82 (variable) +msgid "pianoRHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:83 (variable) +msgid "pianoLHMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:84 (variable) +msgid "violinIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:85 (variable) +msgid "violinIIMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:86 (variable) +msgid "violaMusic" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:95 (comment) +msgid "shortInstrumentName, midiInstrument, etc." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:96 (comment) +msgid "may be set here as well" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:102 (comment) +msgid "Declare that written Middle C in the music" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:103 (comment) +msgid "to follow sounds a concert B flat, for" +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:104 (comment) +msgid "output using sounded pitches such as MIDI." +msgstr "" + +#. Documentation/snippets/orchestra,-choir-and-piano-template.ly:106 (comment) +msgid "Print music for a B-flat clarinet" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:146 (comment) +msgid "\\set Staff.autoBeaming = ##f % turns off all autobeaming" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:149 (comment) +msgid "applies to split up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:151 (comment) +msgid "\\autoBeamOff % applies to combined up stems" +msgstr "" + +#. Documentation/snippets/partcombine-and-autobeamoff.ly:156 (comment) +msgid "applies to down stems" +msgstr "" + +#. Documentation/snippets/percussion-beaters.ly:19 (variable) +msgid "stick" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:53 (comment) +msgid "Permit line breaks within tuplets" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:55 (comment) +msgid "Allow beams to be broken at line breaks" +msgstr "" + +#. Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly:62 (comment) +msgid "Insert a manual line break within a tuplet" +msgstr "" + +#. Documentation/snippets/piano-template-with-centered-dynamics.ly:74 (variable) +msgid "pedal" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:32 (comment) +msgid "L. v. Beethoven" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:33 (comment) +msgid "Piano sonata 21 - Dem Grafen von Waldstein Gewidmet" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:34 (comment) +msgid "chorale at measures 34 - 40+" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:41 (comment) +msgid "RH Voice 1" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:69 (comment) +msgid "(" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:74 (comment) +msgid ")" +msgstr "" + +#. Documentation/snippets/pitches-headword.ly:78 (comment) +msgid "RH Voice 2" +msgstr "" + +#. Documentation/snippets/polyphony-in-tablature.ly:59 (context id) +msgid "tab" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:60 (comment) +msgid "MMR - Multi-Measure Rest" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:61 (comment) +msgid "MMRs by default are set under the fourth line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:63 (comment) +msgid "They can be moved with an override" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:66 (comment) +msgid "A value of 0 is the default position;" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:67 (comment) +msgid "the following trick moves the rest to the center line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:70 (comment) +msgid "MMRs in odd-numbered voices are under the top line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:72 (comment) +msgid "MMRs in even-numbered voices are under the bottom line" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:74 (comment) +msgid "They remain separated even in empty measures" +msgstr "" + +#. Documentation/snippets/positioning-multi-measure-rests.ly:76 (comment) +msgid "This brings them together even though there are two voices" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:29 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:50 (comment) +msgid "Set segno sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:30 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:52 (comment) +msgid "\\once \\override Score.RehearsalMark #'font-size = #3" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:36 (comment) +msgid "Set coda sign as rehearsal mark and adjust size if needed" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:43 (comment) +msgid "Should Coda be on anew line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:44 (comment) +msgid "Coda NOT on new line: use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:45 (comment) +msgid "Coda on new line: DON'T use \\nobreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:46 (comment) +msgid "\\noBreak" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:55 (comment) +msgid "Here begins the trickery!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:56 (comment) +msgid "" +"\\cadenzaOn will suppress the bar count and \\stopStaff removes the staff " +"lines." +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:59 (comment) +msgid "Some examples of possible text-displays" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:61 (comment) +msgid "text line-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:62 (comment) +msgid "==================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:63 (comment) +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:69 (comment) +msgid "Move text to the desired position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:64 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 2 . -3.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:65 (comment) +msgid "| s1*0^\\markup { D.S. al Coda } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:67 (comment) +msgid "text center-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:68 (comment) +msgid "====================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:70 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 6 . -5.0 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:71 (comment) +msgid "| s1*0^\\markup { \\center-column { D.S. \\\"al Coda\\\" } }" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:73 (comment) +msgid "text and symbols center-aligned" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:74 (comment) +msgid "===============================" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:75 (comment) +msgid "" +"Move text to the desired position and tweak spacing for optimum text " +"alignment" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:76 (comment) +msgid "\\once \\override TextScript #'extra-offset = #'( 8 . -5.5 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:82 (comment) +msgid "Increasing the unfold counter will expand the staff-free space" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:87 (comment) +msgid "Resume bar count and show staff lines again" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:91 (comment) +msgid "Should Coda be on new line?" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:92 (comment) +msgid "Coda NOT on new line: DON'T use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:93 (comment) +msgid "Coda on new line: use \\break" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:96 (comment) +msgid "Show up, you clef and key!" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:100 (comment) +msgid "Set coda sign as rehearsal mark and adjust size and position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:102 (comment) +msgid "" +"Put the coda sign ontop of the (treble-)clef dependend on coda's line-" +"position" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:104 (comment) +msgid "Coda NOT on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:105 (comment) +msgid "\\once \\override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:107 (comment) +msgid "Coda on new line, use this:" +msgstr "" + +#. Documentation/snippets/positioning-segno-and-coda-with-line-break.ly:113 (comment) +msgid "The coda" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly:57 (comment) +msgid "Permit first bar number to be printed" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:43 (comment) +msgid "Prevent bar numbers at the end of a line and permit them elsewhere" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:50 (comment) +msgid "Draw a box round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly:55 (comment) +msgid "Draw a circle round the following bar number(s)" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:55 (comment) +msgid "Metronome marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly:60 (comment) +msgid "Rehearsal marks below the staff" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:57 (variable) +msgid "Bassklarinette" +msgstr "" + +#. Documentation/snippets/printing-music-with-different-time-signatures.ly:101 (variable) +msgid "Perkussion" +msgstr "" + +#. Documentation/snippets/putting-lyrics-inside-the-staff.ly:24 (context id) +msgid "voc" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:69 (variable) +msgid "quoteTest" +msgstr "" + +#. Documentation/snippets/quoting-another-voice-with-transposition.ly:70 (comment) +msgid "french horn" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:76 (variable) +msgid "quoteMe" +msgstr "" + +#. Documentation/snippets/quoting-another-voice.ly:81 (variable) +msgid "original" +msgstr "" + +#. Documentation/snippets/recorder-fingering-chart.ly:38 (comment) +msgid "range chart for paetzold contrabass recorder" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:64 (variable) +msgid "startAcciaccaturaMusic" +msgstr "" + +#. Documentation/snippets/redefining-grace-note-global-defaults.ly:70 (variable) +msgid "stopAcciaccaturaMusic" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:81 (comment) +msgid "To use the setting globally, uncomment the following line:" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:82 (comment) +msgid "\\override VerticalAxisGroup #'remove-first = ##t" +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:91 (comment) +msgid "To use the setting globally, comment this line," +msgstr "" + +#. Documentation/snippets/removing-the-first-empty-line.ly:92 (comment) +msgid "uncomment the line in the \\layout block above" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:50 (comment) +msgid "Default beaming" +msgstr "" + +#. Documentation/snippets/reverting-default-beam-endings.ly:53 (comment) +msgid "Set new values for beam endings" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:26 (comment) +msgid "Macro to print single slash" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:27 (variable) +msgid "rs" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:34 (comment) +msgid "Function to print a specified number of slashes" +msgstr "" + +#. Documentation/snippets/rhythmic-slashes.ly:35 (variable) +msgid "comp" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:23 (comment) +msgid "Beethoven, Op. 81a" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:24 (comment) +msgid "Piano sonata 26 - Das Lebewohl" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:25 (comment) +msgid "Movt II - Abwesenheit" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:26 (comment) +msgid "Measures 31 - 34" +msgstr "" + +#. Documentation/snippets/rhythms-headword.ly:33 (comment) +msgid "\\override SpacingSpanner #'strict-grace-spacing = ##t" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:40 (variable) +msgid "sopranonotes" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:43 (variable) +msgid "sopranowords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:44 (variable) +msgid "altonotes" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:47 (variable) +msgid "altowords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:48 (variable) +msgid "tenornotes" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:52 (variable) +msgid "tenorwords" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:53 (variable) +msgid "bassnotes" +msgstr "" + +#. Documentation/snippets/satb-choir-template---four-staves.ly:57 (variable) +msgid "basswords" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:60 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:59 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:73 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:89 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:105 (comment) +msgid "verse" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:70 (variable) +msgid "NoStem" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:71 (variable) +msgid "NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:72 (variable) +msgid "ZeroBeam" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:74 (variable) +msgid "staffTabLine" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:79 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated with a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:84 (comment) +msgid "" +"disable the following line to see the the noteheads while writing the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:88 (comment) +msgid "The beam between 8th-notes is used to draw the push-line" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:89 (comment) +msgid "How to fast write the push-lines:" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:90 (comment) +msgid "" +"1. write repeatedly 'c c c c c c c c |' for the whole length of the song" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:91 (comment) +msgid "2. uncomment the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:92 (comment) +msgid "3. compile" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:93 (comment) +msgid "4. Mark the positions on which push/pull changes." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:94 (comment) +msgid "" +"In the score-picture click on the position the push- or pull-part starts" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:95 (comment) +msgid "(on the noteHead, the cursor will change to a hand-icon)." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:96 (comment) +msgid "The cursor in the source code will jump just at this position." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:97 (comment) +msgid "a) If a push-part starts there, replace the 'c' by an 'e['" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:98 (comment) +msgid "b) If a pull-part starts there, replace the 'c' by an 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:99 (comment) +msgid "5. Switch into 'overwrite-mode' by pressing the 'ins' key." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:100 (comment) +msgid "6. For the pull-parts overwrite the 'c' with 's'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:101 (comment) +msgid "7. For every push-part replace the last 'c' with 'e]'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:102 (comment) +msgid "8. Switch into 'insert-mode' again" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:103 (comment) +msgid "" +"9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c " +"e] s s)" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:104 (comment) +msgid "10. re-enable the line \\NoNoteHead" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:114 (comment) +msgid "Accordion melody in tabulator score" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:115 (comment) +msgid "1. Place a copy of the piano melody below" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:116 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:135 (comment) +msgid "" +"2. Separate piano melody into pull- and push-parts according to the " +"staffTabLine you've already made" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:117 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:118 (comment) +msgid "or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:119 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:138 (comment) +msgid "Tips:" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:120 (comment) +#. Documentation/snippets/score-for-diatonic-accordion.ly:139 (comment) +msgid "- In jEdit Search & Replace mark the Option 'Keep Dialog'" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:122 (variable) +msgid "AccordionTabTwoCBesDur" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:123 (comment) +msgid "pull 1" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:124 (comment) +msgid "8 8 8 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:126 (comment) +msgid "push 2" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:127 (comment) +msgid "4 |" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:129 (comment) +msgid "pull 3" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:130 (comment) +msgid "2 r8 }" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:133 (variable) +msgid "AccordionTab" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:134 (comment) +msgid "1. Place a copy of the piano melody above" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:136 (comment) +msgid "" +"3. For each line: Double the line. Remark the 1st one (Keeps unchanged as " +"reference) and then" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:137 (comment) +msgid "change the second line using the transformation paper" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:140 (comment) +msgid "-" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:149 (comment) +msgid "The vertical line (simulating a bar-line) in" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:150 (comment) +msgid "the staffBassRhytm is a gridline" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:156 (comment) +msgid "4/4 - tact. How many beats per bar" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:157 (comment) +msgid "The following line has to be adjusted O-F-T-E-N." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (variable) +msgid "staffVoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:166 (context id) +msgid "astaffvoice" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:180 (variable) +msgid "staffAccordionMel" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:182 (comment) +msgid "Set the accidentals (Vorzeichen) for each note," +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:183 (comment) +msgid "do not remember them for the rest of the measure." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:203 (variable) +msgid "BassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:204 (variable) +msgid "LyricBassRhythmI" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:206 (variable) +msgid "staffBassRhytm" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:207 (context id) +msgid "staffbass" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:208 (comment) +msgid "" +"This is not a RhythmicStaff because it must be possible to append lyrics." +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:210 (comment) +msgid "x.y" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:212 (comment) +msgid "" +"Shows one horizontal line. The vertical line (simulating a bar-line) is " +"simulated by a grid" +msgstr "" + +#. Documentation/snippets/score-for-diatonic-accordion.ly:213 (comment) +msgid "Search for 'grid' in this page to find all related functions" +msgstr "" + +#. Documentation/snippets/setting-system-separators.ly:34 (variable) +msgid "notes" +msgstr "" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:23 (comment) +msgid "The same as \\flageolet, just a little smaller" +msgstr "" + +#. Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly:33 (comment) +msgid "The second fermata is ignored!" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:30 (comment) +msgid "NR 1.5 Simultaneous notes" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:32 (comment) +msgid "L. v. Beethoven, Op. 111" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:33 (comment) +msgid "Piano sonata 32" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:34 (comment) +msgid "Movt II - Arietta - Adagio molto semplice e cantabile" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:35 (comment) +msgid "measures 108 - 118" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:47 (variable) +msgid "trillFlat" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:67 (comment) +msgid "RH voice 1" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:144 (comment) +msgid "RH voice 2" +msgstr "" + +#. Documentation/snippets/simultaneous-headword.ly:219 (comment) +msgid "LH staff" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:26 (variable) +msgid "verseI" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:31 (variable) +msgid "verseII" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:37 (comment) +msgid "insert chords for chordnames and fretboards here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:41 (variable) +msgid "staffMelody" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:44 (comment) +msgid "Type notes for melody here" +msgstr "" + +#. Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly:54 (context id) +msgid "voiceMelody" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:31 (comment) +msgid "title = \\\"Le Lac des Cygnes\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:32 (comment) +msgid "subtitle = \\\"Danse Napolitaine\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:33 (comment) +msgid "composer = \\\"Piotr Ilitch Tchaïkovski\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:34 (comment) +msgid "arranger = \\\"arr. Laurence Sardain\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:35 (comment) +msgid "footer = \\\"Mutopia-2006/12/22-896\\\"" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:38 (variable) +msgid "trompette" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:50 (variable) +#. Documentation/snippets/staff-headword.ly:98 (context id) +#. Documentation/snippets/staff-headword.ly:116 (context id) +msgid "tambourin" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:59 (variable) +msgid "tambourinMidi" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:102 (context id) +msgid "prima" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:104 (context id) +msgid "uppera" +msgstr "" + +#. Documentation/snippets/staff-headword.ly:105 (context id) +msgid "lowera" +msgstr "" + +#. Documentation/snippets/stemlets.ly:36 (comment) +msgid "N.B. use Score.Stem to set for the whole score." +msgstr "" + +#. Documentation/snippets/string-number-extender-lines.ly:17 (variable) +msgid "stringNumberSpanner" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:55 (variable) +msgid "violinOne" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:64 (variable) +msgid "violinTwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-simple.ly:73 (variable) +msgid "viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:106 (comment) +msgid "piece.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:107 (comment) +msgid "(This is the global definitions file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:114 (variable) +msgid "Violinone" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:119 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:125 (comment) +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:132 (comment) +msgid "*********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:120 (variable) +msgid "Violintwo" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:126 (variable) +msgid "Viola" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:133 (variable) +msgid "Cello" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:139 (comment) +msgid "**********************************" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:150 (comment) +msgid "These are the other files you need to save on your computer" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:152 (comment) +msgid "score.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:153 (comment) +msgid "(This is the main file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:156 (comment) +#, python-format +msgid "" +"\\include \\\"piece.ly\\\" %%% uncomment this line when using a " +"separate file" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:165 (comment) +msgid "{ Uncomment this block when using separate files" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:167 (comment) +msgid "vn1.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:168 (comment) +msgid "(This is the Violin 1 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:177 (comment) +msgid "vn2.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:178 (comment) +msgid "(This is the Violin 2 part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:187 (comment) +msgid "vla.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:188 (comment) +msgid "(This is the Viola part file)" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:197 (comment) +msgid "vlc.ly" +msgstr "" + +#. Documentation/snippets/string-quartet-template-with-separate-parts.ly:198 (comment) +msgid "(This is the Cello part file)" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:78 (comment) +msgid "Set beam sub-group length to an eighth note" +msgstr "" + +#. Documentation/snippets/subdividing-beams.ly:83 (comment) +msgid "Set beam sub-group length to a sixteenth note" +msgstr "" + +#. Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly:21 (variable) +#. Documentation/snippets/unfretted-headword.ly:56 (variable) +msgid "ignore" +msgstr "" + +#. Documentation/snippets/text-headword.ly:29 (comment) +msgid "NR 1.8 Text" +msgstr "" + +#. Documentation/snippets/text-headword.ly:31 (comment) +msgid "L. v. Beethoven, Op. 110" +msgstr "" + +#. Documentation/snippets/text-headword.ly:32 (comment) +msgid "Piano sonata 31" +msgstr "" + +#. Documentation/snippets/text-headword.ly:33 (comment) +msgid "measures 1 - 7" +msgstr "" + +#. Documentation/snippets/text-headword.ly:45 (comment) +msgid "RH staff" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:17 (comment) +msgid "New command to add a three sided box, with sides north, west and south" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:18 (comment) +msgid "Based on the box-stencil command defined in scm/stencil.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:19 (comment) +msgid "Note that \\\";;\\\" is used to comment a line in Scheme" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:33 (comment) +msgid "The corresponding markup command, based on the \\box command defined" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:34 (comment) +msgid "in scm/define-markup-commands.scm" +msgstr "" + +#. Documentation/snippets/three-sided-box.ly:46 (comment) +msgid "Test it:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:57 (comment) +msgid "Change the style permanently" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:63 (comment) +msgid "Revert to default style:" +msgstr "" + +#. Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly:67 (comment) +msgid "single-digit style only for the next time signature" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:36 (comment) +msgid "make the staff lines invisible on staves" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:125 (variable) +msgid "incipitDiscantus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:150 (variable) +msgid "incipitAltus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:176 (variable) +msgid "incipitTenor" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:204 (variable) +msgid "incipitBassus" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:230 (comment) +msgid "" +"StaffGroup is used instead of ChoirStaff to get bar lines between systems" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:262 (comment) +msgid "Keep the bass lyrics outside of the staff group to avoid bar lines" +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:263 (comment) +msgid "between the lyrics." +msgstr "" + +#. Documentation/snippets/transcription-of-ancient-music-with-incipit.ly:272 (comment) +msgid "the next three instructions keep the lyrics between the bar lines" +msgstr "" + +#. Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly:165 (variable) +msgid "naturalizeMusic" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:151 (comment) +msgid "The default treble clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:153 (comment) +msgid "The standard bass clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:158 (comment) +msgid "The baritone clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:163 (comment) +msgid "The standard choral tenor clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:169 (comment) +msgid "A non-standard clef" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:175 (comment) +msgid "The following clef changes do not preserve" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:176 (comment) +msgid "the normal relationship between notes and clefs:" +msgstr "" + +#. Documentation/snippets/tweaking-clef-properties.ly:191 (comment) +msgid "Return to the normal clef:" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:40 (comment) +msgid "Abreviations" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:43 (variable) +msgid "db" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:44 (variable) +msgid "dub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:45 (variable) +msgid "dubetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:47 (variable) +msgid "ub" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:48 (variable) +msgid "udb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:49 (variable) +msgid "udbetc" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:51 (variable) +msgid "fermaTa" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:53 (variable) +msgid "accel" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:54 (variable) +msgid "ritar" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:60 (comment) +msgid "Strings" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:63 (variable) +msgid "svib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:64 (variable) +msgid "pvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:65 (variable) +msgid "mvib" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:66 (variable) +msgid "sulp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:67 (variable) +msgid "norm" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:69 (variable) +msgid "quatre" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:73 (comment) +msgid "Shifting Notes" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:76 (variable) +msgid "shift" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:77 (variable) +msgid "shifta" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:78 (variable) +msgid "shiftb" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:82 (comment) +msgid "Hairpin" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:85 (comment) +msgid "aniente = \\\"a niente\\\"" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:86 (variable) +msgid "aniente" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:93 (variable) +msgid "tupletbp" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:97 (comment) +msgid "Flag [Note Head - Stem]" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:100 (variable) +msgid "noflag" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:103 (comment) +msgid "Functions" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:118 (comment) +msgid "Instruments" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:121 (variable) +msgid "ViolinSolo" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:131 (comment) +msgid "Measure 1" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:141 (comment) +msgid "Measure 2" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:151 (comment) +msgid "Measure 3" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:159 (comment) +msgid "Measure 4" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:168 (comment) +msgid "Measure 5" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:176 (comment) +msgid "Measure 6" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:178 (comment) +msgid "\\featherDurations #(ly:make-moment 2 3)" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:185 (comment) +msgid "Measure 7" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:194 (comment) +msgid "Measure 8" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:199 (comment) +msgid "Measure 9" +msgstr "" + +#. Documentation/snippets/unfretted-headword.ly:210 (comment) +msgid "Score" +msgstr "" + +#. Documentation/snippets/using-alternative-flag-styles.ly:31 (variable) +msgid "testnotes" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:113 (comment) +msgid "display grobs for each note head:" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:114 (comment) +msgid "\\override NoteHead #'before-line-breaking = #display-grobs" +msgstr "" + +#. Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly:116 (comment) +msgid "or just for one:" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:28 (variable) +msgid "parallelogram" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:43 (variable) +msgid "myNoteHeads" +msgstr "" + +#. Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly:44 (variable) +msgid "normalNoteHeads" +msgstr "" + +#. Documentation/snippets/utf-8.ly:19 (comment) +msgid "end verbatim - this comment is a hack to prevent texinfo.tex" +msgstr "" + +#. Documentation/snippets/utf-8.ly:20 (comment) +msgid "from choking on non-European UTF-8 subsets" +msgstr "" + +#. Documentation/snippets/utf-8.ly:22 (comment) +msgid "Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs" +msgstr "" + +#. Documentation/snippets/utf-8.ly:40 (comment) +msgid "Cyrillic font" +msgstr "" + +#. Documentation/snippets/utf-8.ly:41 (variable) +msgid "bulgarian" +msgstr "" + +#. Documentation/snippets/utf-8.ly:45 (variable) +msgid "hebrew" +msgstr "" + +#. Documentation/snippets/utf-8.ly:49 (variable) +msgid "japanese" +msgstr "日本" + +#. Documentation/snippets/utf-8.ly:56 (comment) +msgid "\\\"a legal song to you\\\"" +msgstr "" + +#. Documentation/snippets/utf-8.ly:57 (variable) +msgid "portuguese" +msgstr "" + +#. Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly:19 (variable) +msgid "upline" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:20 (variable) +msgid "leftbrace" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:21 (variable) +msgid "rightbrace" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:23 (variable) +msgid "dropLyrics" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:30 (variable) +msgid "raiseLyrics" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:37 (variable) +msgid "skipFour" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:39 (variable) +msgid "lyricsA" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:41 (variable) +msgid "lyricsB" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:42 (variable) +msgid "lyricsC" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:43 (variable) +msgid "lyricsD" +msgstr "" + +#. Documentation/snippets/vertically-centered-common-lyrics.ly:50 (context id) +msgid "m" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:69 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:59 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:68 (variable) +msgid "sopMusic" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:72 (variable) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:62 (variable) +#. Documentation/snippets/vocal-ensemble-template.ly:71 (variable) +msgid "sopWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:101 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:89 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:99 (context id) +msgid "women" +msgstr "女" + +#. Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly:107 (context id) +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:99 (context id) +#. Documentation/snippets/vocal-ensemble-template.ly:111 (context id) +msgid "men" +msgstr "男" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:95 (comment) +msgid "we could remove the line about this with the line below, since we want" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:96 (comment) +msgid "the alto lyrics to be below the alto Voice anyway." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:97 (comment) +msgid "\\new Lyrics \\lyricsto \\\"altos\\\" \\altoWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:106 (comment) +msgid "again, we could replace the line above this with the line below." +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly:107 (comment) +msgid "\\new Lyrics \\lyricsto \\\"basses\\\" \\bassWords" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:64 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:77 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:92 (comment) +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:108 (comment) +msgid "refrain" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:70 (variable) +msgid "SoloNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:81 (variable) +msgid "SoloLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:86 (variable) +msgid "SopranoNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:97 (variable) +msgid "SopranoLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:102 (variable) +msgid "BassNotes" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:113 (variable) +msgid "BassLyrics" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:120 (context id) +msgid "SoloVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:124 (context id) +msgid "SopranoVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:127 (context id) +msgid "BassVoice" +msgstr "" + +#. Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly:134 (comment) +msgid "these lines prevent empty staves from being printed" +msgstr "" + +#. Documentation/snippets/volta-multi-staff.ly:17 (variable) +msgid "voltaMusic" +msgstr "" + +#. Documentation/snippets/volta-text-markup-using-repeatcommands.ly:25 (variable) +msgid "voltaAdLib" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:21 (comment) +msgid "Tchaikovsky" +msgstr "" + +#. Documentation/snippets/wind-headword.ly:22 (comment) +msgid "Nutcracker Suite, VII Dance of the Merlitons" +msgstr "" + +msgid "Up:" +msgstr "上:" + +msgid "Next:" +msgstr "后一个:" + +msgid "Previous:" +msgstr "前一个:" + +msgid "Appendix " +msgstr "附录" + +msgid "Footnotes" +msgstr "脚注" + +msgid "Table of Contents" +msgstr "目录" diff --git a/Documentation/search-box.ihtml b/Documentation/search-box.ihtml new file mode 100644 index 0000000000..d789109484 --- /dev/null +++ b/Documentation/search-box.ihtml @@ -0,0 +1,13 @@ +
    + + + +
    diff --git a/Documentation/snippets.tely b/Documentation/snippets.tely new file mode 100644 index 0000000000..b44f4c5a90 --- /dev/null +++ b/Documentation/snippets.tely @@ -0,0 +1,131 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- + +@setfilename lilypond-snippets.info +@settitle LilyPond snippets +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@macro manualIntro +This document shows a selected set of LilyPond snippets from the +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} +(LSR). It is in the public domain. + +We would like to address many thanks to Sebastiano Vigna for maintaining +LSR web site and database, and the University of Milano for hosting LSR. + +Please note that this document is not an exact subset of LSR: some +snippets come from @file{input/new} LilyPond sources directory, and +snippets from LSR are converted through @command{convert-ly}, as LSR is +based on a stable LilyPond version, and this document is for +version @version{}. + +Snippets are grouped by tags; tags listed in the table of contents match +a section of LilyPond notation manual. Snippets may have several tags, +and not all LSR tags may appear in this document. + +In the HTML version of this document, you can click on the file name +or figure for each example to see the corresponding input file. + +@end macro + +@macro copyrightDeclare +Copyright @copyright{} +1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +by the authors. +@end macro + +@c This disables @lydoctitle definition in common-macros.itexi +@set snippets-sections + +@include macros.itexi + +@ifnothtml +@macro lydoctitle{TEXT} +@unnumberedsec \TEXT\ +@end macro +@end ifnothtml + +@ifhtml +@macro lydoctitle{TEXT} +@node \TEXT\ +@unnumberedsec \TEXT\ +@end macro +@end ifhtml + + +@lilyTitlePage{Snippets} + + +@c maybe generate/update @menu and @includes automatically? --jm +@ifnottex +@menu +Musical notation +* Pitches:: +* Rhythms:: +* Expressive marks:: +* Repeats:: +* Simultaneous notes:: +* Staff notation:: +* Editorial annotations:: +* Text:: + +Specialist notation +* Vocal music:: +* Chords:: +* Keyboards:: +* Percussion:: +* Fretted strings:: +* Unfretted strings:: +* Winds:: +* Ancient notation:: +* World music:: + +Other collections +* Contexts and engravers:: +* Tweaks and overrides:: +* Paper and layout:: +* Titles:: +* Spacing:: +* MIDI:: +* Templates:: +@end menu + +@docMain +@end ifnottex + +@contents + +@allowcodebreaks false + +@c Please take care of naming every .itely +@c with an existing tag name. + +@include pitches.itely +@include rhythms.itely +@include expressive-marks.itely +@include repeats.itely +@include simultaneous-notes.itely +@include staff-notation.itely +@include editorial-annotations.itely +@include text.itely + +@include vocal-music.itely +@include chords.itely +@include keyboards.itely +@include percussion.itely +@include fretted-strings.itely +@include unfretted-strings.itely +@include winds.itely +@include ancient-notation.itely +@include world-music.itely + +@include contexts-and-engravers.itely +@include tweaks-and-overrides.itely +@include paper-and-layout.itely +@include titles.itely +@include spacing.itely +@include midi.itely +@include template.itely + +@bye diff --git a/Documentation/snippets/GNUmakefile b/Documentation/snippets/GNUmakefile new file mode 100644 index 0000000000..7fccf9189c --- /dev/null +++ b/Documentation/snippets/GNUmakefile @@ -0,0 +1,8 @@ +depth = ../.. + +SUBDIRS = new +EXTRA_DIST_FILES = $(call src-wildcard,*.snippet-list) \ + $(call src-wildcard,*.ly) $(call src-wildcard,*.itely) \ + README + +include $(depth)/make/stepmake.make diff --git a/Documentation/snippets/README b/Documentation/snippets/README new file mode 100644 index 0000000000..f91aacb1dd --- /dev/null +++ b/Documentation/snippets/README @@ -0,0 +1,5 @@ +This directory contains examples generated automatically from LSR +http://lsr.dsi.unimi.it/ + +To update this directory and find additional information, see +the Contributor's Guide, section "LSR to Git". diff --git a/input/lsr/accordion-discant-symbols.ly b/Documentation/snippets/accordion-discant-symbols.ly similarity index 87% rename from input/lsr/accordion-discant-symbols.ly rename to Documentation/snippets/accordion-discant-symbols.ly index bb5e08360e..fc62bf4a64 100644 --- a/input/lsr/accordion-discant-symbols.ly +++ b/Documentation/snippets/accordion-discant-symbols.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "keyboards" +%% 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 @@ -12,7 +17,9 @@ símbolos modificando los argumentos de @code{\\raise}. " doctitlees = "Símbolos de acordeón discanto" - + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 doctitlede = "Symbole für Akkordeon-Diskantregister" texidocde = " Diskantregister für Akkordeon können mit @code{\\markup} dargestellt werden. @@ -32,10 +39,10 @@ vertical placement of the symbols can be tweaked by changing the } % begin verbatim discant = \markup { - \musicglyph #"accordion.accDiscant" + \musicglyph #"accordion.discant" } dot = \markup { - \musicglyph #"accordion.accDot" + \musicglyph #"accordion.dot" } \layout { ragged-right = ##t } @@ -158,7 +165,7 @@ accClarin = ^\markup { accPiccolo = ^\markup { \combine - \discant + \discant \raise #2.5 \dot } diff --git a/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly b/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly new file mode 100644 index 0000000000..c814dec1d4 --- /dev/null +++ b/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly @@ -0,0 +1,70 @@ +%% 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, ancient-notation, contexts-and-engravers" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Al escribir un bajo cifrado, podemos situar las cifras encima o debajo +de las notas del bajo, mediante la definición de la propiedad +@code{BassFigureAlignmentPositioning #'direction} (exclusivamente +dentro de un contexto @code{Staff}). Se puede elegir entre @code{#UP} +(o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, centrado) y +@code{#DOWN} (o @code{#-1}, abajo). + +Esta propiedad se puede cambiar tantas veces como queramos. Utilice +@code{\\once \\override} si no quiere que la sobreescritura se aplique +a toda la partitura. + +" + doctitlees = "Añadir un bajo cifrado encima o debajo de las notas" + + +%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5 + doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes" + + texidoc = " +When writing a figured bass, you can place the figures above or below +the bass notes, by defining the @code{BassFigureAlignmentPositioning +#'direction} property (exclusively in a @code{Staff} context). Choices +are @code{#UP} (or @code{#1}), @code{#CENTER} (or @code{#0}) and +@code{#DOWN} (or @code{#-1}). + +This property can be changed as many times as you wish. Use +@code{\\once \\override} if you don't want the override to apply to the +whole score. + +" + doctitle = "Adding a figured bass above or below the notes" +} % begin verbatim + +bass = { + \clef bass + g4 b, c d + e d8 c d2 +} +continuo = \figuremode { + <_>4 <6>8 + \once \override Staff.BassFigureAlignmentPositioning #'direction = #CENTER + <5/>8 <_>4 + \override Staff.BassFigureAlignmentPositioning #'direction = #UP + <_+>4 <6> + \set Staff.useBassFigureExtenders = ##t + \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN + <4>4. <4>8 <_+>4 +} +\score { + << + \new Staff = bassStaff \bass + \context Staff = bassStaff \continuo + >> +} + + diff --git a/Documentation/snippets/adding-ambitus-per-voice.ly b/Documentation/snippets/adding-ambitus-per-voice.ly new file mode 100644 index 0000000000..3a426b13c8 --- /dev/null +++ b/Documentation/snippets/adding-ambitus-per-voice.ly @@ -0,0 +1,62 @@ +%% 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 = "pitches, staff-notation, vocal-music" + +%% 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 +debe desplazar manualmente para evitar colisiones. + +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie +manuell verschoben werden, um Zusammenstöße zu verhindern. + +" +doctitlede = "Ambitus pro Stimme hinzufügen" + +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +L'@code{ambitus} peut être individualisé par voix. Il faut en pareil +cas éviter qu'ils se chevauchent. + +" + doctitlefr = "Un ambitus par voix" + + + texidoc = " +Ambitus can be added per voice. In this case, the ambitus must be moved +manually to prevent collisions. + +" + doctitle = "Adding ambitus per voice" +} % begin verbatim + +\new Staff << + \new Voice \with { + \consists "Ambitus_engraver" + } \relative c'' { + \override Ambitus #'X-offset = #2.0 + \voiceOne + c4 a d e + f1 + } + \new Voice \with { + \consists "Ambitus_engraver" + } \relative c' { + \voiceTwo + es4 f g as + b1 + } +>> + diff --git a/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly b/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly new file mode 100644 index 0000000000..bd4f6f5fc8 --- /dev/null +++ b/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly @@ -0,0 +1,59 @@ +%% 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 = "staff-notation, contexts-and-engravers, breaks" + +%% 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 +(reservado para hacer sitio a un cambio de armadura que de todas +formas no se va a imprimir). La solución alternativa es añadir un +ajuste para @code{Staff.explicitKeySignatureVisibility} como se +muestra en el ejemplo. + +" + doctitlees = "Añadir un pentagrama adicional en un salto de línea" + + texidoc = " +When adding a new staff at a line break, some extra space is +unfortunately added at the end of the line before the break (to fit in +a key signature change, which will never be printed anyway). The +workaround is to add a setting of +@code{Staff.explicitKeySignatureVisibility} as is shown in the example. + + +" + doctitle = "Adding an extra staff at a line break" +} % begin verbatim + +\score { + \new StaffGroup \relative c'' { + \new Staff + \key f \major + c1 c^"Unwanted extra space" \break + << { c1 | c } + \new Staff { + \key f \major + \once \override Staff.TimeSignature #'stencil = ##f + c1 | c + } + >> + c1 | c^"Fixed here" \break + << { c1 | c } + \new Staff { + \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible + \key f \major + \once \override Staff.TimeSignature #'stencil = ##f + c1 | c + } + >> + } +} + diff --git a/Documentation/snippets/adding-an-extra-staff.ly b/Documentation/snippets/adding-an-extra-staff.ly new file mode 100644 index 0000000000..a619f07d8f --- /dev/null +++ b/Documentation/snippets/adding-an-extra-staff.ly @@ -0,0 +1,50 @@ +%% 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 = "staff-notation, contexts-and-engravers" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede añadir (posiblemente de forma temporal) un pentagrama +nuevo una vez que la pieza ha comenzado. + +" + doctitlees = "Añadir un pentagrama nuevo" + + texidoc = " +An extra staff can be added (possibly temporarily) after the start of a +piece. + +" + doctitle = "Adding an extra staff" +} % begin verbatim + +\score { + << + \new Staff \relative c'' { + c1 | c | c | c | c + } + \new StaffGroup \relative c'' { + \new Staff { + c1 | c + << + { + c1 | d + } + \new Staff { + \once \override Staff.TimeSignature #'stencil = ##f + c1 | b + } + >> + c1 + } + } + >> +} + diff --git a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly new file mode 100644 index 0000000000..89473c6d1e --- /dev/null +++ b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly @@ -0,0 +1,46 @@ +%% 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" + +%% 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 +@code{Bar_engraver}. + +" + doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der +@code{Bar_engraver} hinzugefügt werden. + +" + doctitlede = "Tatkstriche in einen ChordNames-Kontext hinzufügen" + + texidoc = " +To add bar line indications in the @code{ChordNames} context, add the +@code{Bar_engraver}. + +" + doctitle = "Adding bar lines to ChordNames context" +} % begin verbatim + +\new ChordNames \with { + \override BarLine #'bar-extent = #'(-2 . 2) + \consists "Bar_engraver" +} +\chordmode { + f1:maj7 f:7 bes:7 +} + + diff --git a/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly b/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly new file mode 100644 index 0000000000..9a020117ac --- /dev/null +++ b/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly @@ -0,0 +1,51 @@ +%% 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 = "rhythms, expressive-marks" + +%% 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 +que intercalar. Por ejemplo, al introducir una barra manual, el +corchete izquierdo de apertura se debe escribir después de la nota +inicial y de su duración, no antes. De forma similar, el corchete +derecho de cierre debe seguir inmediatamente a la nota que se +quiere situar al final del barrado, incluso si esta nota resulta +estar dentro de un grupo de valoración especial. Este fragmento de +código muestra cómo combinar el barrado manual, las ligaduras de +expresión y de unión y las ligaduras de fraseo, con secciones de +valoración especial (encerradas entre llaves). + +" + doctitlees = "Añadir barras ligaduras de expresión y de unión etc. cuando se usan ritmos con y sin grupos de valoración especial." + + texidoc = " +LilyPond syntax can involve many unusual placements for parentheses, +brackets etc., which might sometimes have to be interleaved. For +example, when entering a manual beam, the left square bracket has to be +placed after the starting note and its duration, not before. Similarly, +the right square bracket should directly follow the note which is to be +at the end of the requested beaming, even if this note happens to be +inside a tuplet section. This snippet demonstrates how to combine +manual beaming, manual slurs, ties and phrasing slurs with tuplet +sections (enclosed within curly braces). + +" + doctitle = "Adding beams slurs ties etc. when using tuplet and non-tuplet rhythms" +} % begin verbatim + +{ + r16[ g16 \times 2/3 { r16 e'8] } + g16( a \times 2/3 { b d e') } + g8[( a \times 2/3 { b d') e'] ~ } + \time 2/4 + \times 4/5 { e'32\( a b d' e' } a'4.\) +} + diff --git a/input/lsr/adding-drum-parts.ly b/Documentation/snippets/adding-drum-parts.ly similarity index 80% rename from input/lsr/adding-drum-parts.ly rename to Documentation/snippets/adding-drum-parts.ly index d55dc980f7..ffe4316837 100644 --- a/input/lsr/adding-drum-parts.ly +++ b/Documentation/snippets/adding-drum-parts.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "rhythms, percussion" +%% 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 @@ -17,13 +22,15 @@ de líneas. " doctitlees = "Escritura de partes de percusión" + +%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea texidocfr = " Grâce à la puissance des outils préconfigurés tels que la fonction -@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de +@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de parties pour percussions est extrêmement simplifiée : chaque composant -d'une batterie trouve sa place sur une portée dédiée (avec une clef -spécifique) et les têtes de note sont spécifiques à chaque élément. -Il est également possible d'affecter un symbole particulier à chaque +d'une batterie trouve sa place sur une portée dédiée (avec une clef +spécifique) et les têtes de note sont spécifiques à chaque élément. +Il est également possible d'affecter un symbole particulier à chaque élément, tout comme de restreindre le nombre de lignes de la portée. " @@ -37,7 +44,7 @@ function and the @code{DrumStaff} context, inputting drum parts is quite easy: drums are placed at their own staff positions (with a special clef symbol) and have note heads according to the drum. Attaching an extra symbol to the drum or restricting the number of -lines is possible. +lines is possible. " doctitle = "Adding drum parts" @@ -52,7 +59,7 @@ timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb } \new DrumStaff \with { drumStyleTable = #timbales-style \override StaffSymbol #'line-count = #2 - \override BarLine #'bar-size = #2 + \override BarLine #'bar-extent = #'(-1 . 1) } << \set Staff.instrumentName = #"timbales" \timb diff --git a/Documentation/snippets/adding-fingerings-to-a-score.ly b/Documentation/snippets/adding-fingerings-to-a-score.ly new file mode 100644 index 0000000000..9be53a6096 --- /dev/null +++ b/Documentation/snippets/adding-fingerings-to-a-score.ly @@ -0,0 +1,22 @@ +%% 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 = "editorial-annotations, fretted-strings" + + texidoc = " +Fingering instructions can be entered using a simple syntax. + +" + doctitle = "Adding fingerings to a score" +} % begin verbatim + +\relative c'' { + c4-1 d-2 f-4 e-3 +} + diff --git a/Documentation/snippets/adding-fingerings-to-tablatures.ly b/Documentation/snippets/adding-fingerings-to-tablatures.ly new file mode 100644 index 0000000000..5ecb570e7a --- /dev/null +++ b/Documentation/snippets/adding-fingerings-to-tablatures.ly @@ -0,0 +1,62 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Para añadir digitaciones a las tablaturas, utilice una combinación de +@code{\\markup} y @code{\\finger}. +" + + doctitlees = "Añadir digitaciones a las tablaturas" + + +%% Translation of GIT committish: 96ee692447057131395fe4c1f9fe55805b710aa6 + texidocfr = "Ajout de doigtés à des tablatures" + + doctitlefr = " +L'ajout de doigtés à des tablatures s'obtient en conjuguant des +@code{\\markup} et des @code{\\finger}. +" + + lsrtags = "fretted-strings" + texidoc = " +To add fingerings to tablatures, use a combination of @code{\\markup} +and @code{\\finger}. +" + doctitle = "Adding fingerings to tablatures" +} % begin verbatim + + +one = \markup { \finger 1 } +two = \markup { \finger 2 } +threeTwo = \markup { + \override #'(baseline-skip . 2) + \column { + \finger 3 + \finger 2 + } +} +threeFour = \markup { + \override #'(baseline-skip . 2) + \column { + \finger 3 + \finger 4 + } +} + +\score { + \new TabStaff { + \tabFullNotation + \stemUp + e8\4^\one b\2 ^>[ b\2 e\4] + ^>^\threeTwo[ b\2 e\4] + } +} + diff --git a/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly b/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly new file mode 100644 index 0000000000..e2c62cd250 --- /dev/null +++ b/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly @@ -0,0 +1,105 @@ +%% 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 = "staff-notation, vocal-music" + + texidoc = " +This snippet defines the @code{\\splitStaffBarLine} command, which adds +arrows in north-east and south-east directions at a bar line, to denote +that several voices sharing a staff will each continue on a staff of +their own in the next system. + +" + doctitle = "Adding indicators to staves which get split after a break" +} % begin verbatim + +#(define-markup-command (arrow-at-angle layout props angle-deg length fill) + (number? number? boolean?) + (let* ( + ;; PI-OVER-180 and degrees->radians are taken from flag-styles.scm + (PI-OVER-180 (/ (atan 1 1) 45)) + (degrees->radians (lambda (degrees) (* degrees PI-OVER-180))) + (angle-rad (degrees->radians angle-deg)) + (target-x (* length (cos angle-rad))) + (target-y (* length (sin angle-rad)))) + (interpret-markup layout props + (markup + #:translate (cons (/ target-x 2) (/ target-y 2)) + #:rotate angle-deg + #:translate (cons (/ length -2) 0) + #:concat (#:draw-line (cons length 0) + #:arrow-head X RIGHT fill))))) + +splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) { + \combine + \arrow-at-angle #45 #(sqrt 8) ##f + \arrow-at-angle #-45 #(sqrt 8) ##f +} + +splitStaffBarLine = { + \once \override Staff.BarLine #'stencil = + #(lambda (grob) + (ly:stencil-combine-at-edge + (ly:bar-line::print grob) + X RIGHT + (grob-interpret-markup grob splitStaffBarLineMarkup) + 0 0)) + \break +} + +\paper { + ragged-right = ##t + short-indent = 5\mm +} + +\score { + << + \new ChoirStaff << + \new Staff \with { instrumentName = #"High I + II" } { + << + \repeat unfold 4 f''1 + \\ + \repeat unfold 4 d''1 + >> + \splitStaffBarLine + } + \new Staff \with { instrumentName = #"Low" } { + << + \repeat unfold 4 b'1 + \\ + \repeat unfold 4 g'1 + >> + } + + \new Staff \with { shortInstrumentName = #"H I" } { + R1*4 + \repeat unfold 2 { r4 f''2 r4 } \repeat unfold 2 e''1 + } + \new Staff \with { shortInstrumentName = #"H II" } { + R1*4 + \repeat unfold 4 b'2 \repeat unfold 2 c''1 + } + \new Staff \with { shortInstrumentName = #"L" } { + R1*4 + << + \repeat unfold 4 g'1 + \\ + \repeat unfold 4 c'1 + >> + } + >> + >> + \layout { + \context { + \Staff \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } + } +} + diff --git a/Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly b/Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly new file mode 100644 index 0000000000..e1c2d865f4 --- /dev/null +++ b/Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly @@ -0,0 +1,149 @@ +%% 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 = "staff-notation, vocal-music" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + Este ejemplo muestra una forma de simplificar la adición de muchas +notas guía orquestales a la reducción de piano en una partitura vocal. +La función musical @code{\\cueWhile} toma cuatro argumentos: la música +de la que se toma la cita, como viene definida por @code{\\addQuote}, +el nombre que insertar antes de las notas guía, y después @code{#UP} o +@code{#DOWN} para especificar @code{\\voiceOne} con el nombre encima +del pentagrama o bien @code{\\voiceTwo} con el nombre debajo del +pentagrama, y finalmente la música de piano con la que las notas guía +deben aparecer en paralelo. El nombre del instrumento citado se +posiciona a la izquierda de las notas guía. Se pueden citar muchos +pasajes como guía, pero no se pueden superponer en el tiempo entre +ellos. + +" + + doctitlees = "Añadir notas guía orquestales a una partitura vocal" + + + + +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + + + texidocde = " +Hier wird gezeigt, wie man das Hinzufügen von vielen Orchsterstichnoten +zu einem Klavierauszug hinzufügen kann. Die musikalische Funktion +@code{\\cueWhile} braucht vier Argumente: Die Noten, von denen die +Stichnoten formatiert werden sollen, definiert durch @code{\\addQuote}, +die Bezeichnung, die mit den Noten angegeben werden soll, dann entweder +@code{#UP} (hoch) oder @code{#DOWN} (runter) zur Angabe von entweder +@code{\\voiceOne} mit der Bezeichnung über dem System oder @code{\\voiceTwo} +mit der Bezeichnung unter dem System, und schließlich die Klaviermusik, +die parallel zu den Stichnoten gespielt werden soll. Die Bezeichnung des +Stichnoteninstruments wird links der Stichnoten positioniert. Viele +Abschnitte können zitiert werden, aber sie dürfen sich nicht überlappen. + +" + doctitlede = "Orchesterstichnoten zu einem Klavierauszug hinzufügen" + + +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + + texidocfr = " +Lorsque le nombre d'instruments cités dans la réduction pour piano se +multiplie, vous pourriez avoir intérêt à créer votre propre fonction +pour gérer ces repères. La fonction musicale @code{\\cueWhile} prend +quatre arguments@tie{}: la musique d'où provient la citation, telle que +définie par @code{\\addQuote}, le nom qui sera mentionné en regard de +cette citation, son positionnement -- @code{#UP} ou @code{#DOWN} selon +qu'il sera attribué à @code{\\voiceOne} et placé au-dessus ou +@code{\\voiceTwo} et placé en dessous -- et enfin la musique du piano +qui interviendra en parallèle. Le nom de l'instrument en question +viendra s'aligner sur la gauche de la citation. Bien que vous puissiez +effectuer plusieurs citations, elle ne peuvent être simultanées. + +" + doctitlefr = "Indication de l'instrument cité dans l'accompagnement d'une +partition pour chœur" + + + texidoc = " +This shows one approach to simplify adding many orchestral cues to the +piano reduction in a vocal score. The music function @code{\\cueWhile} +takes four arguments: the music from which the cue is to be taken, as +defined by @code{\\addQuote}, the name to be inserted before the cue +notes, then either @code{#UP} or @code{#DOWN} to specify either +@code{\\voiceOne} with the name above the staff or @code{\\voiceTwo} +with the name below the staff, and finally the piano music in parallel +with which the cue notes are to appear. The name of the cued +instrument is positioned to the left of the cued notes. Many passages +can be cued, but they cannot overlap each other in time. + +" + doctitle = "Adding orchestral cues to a vocal score" +} % begin verbatim + +cueWhile = +#(define-music-function + (parser location instrument name dir music) + (string? string? ly:dir? ly:music?) + #{ + \cueDuring $instrument #$dir { + \once \override TextScript #'self-alignment-X = #RIGHT + \once \override TextScript #'direction = $dir + s1*0-\markup { \tiny $name } + $music + } + #}) + +flute = \relative c'' { + \transposition c' + s4 s4 e g +} +\addQuote "flute" { \flute } + +clarinet = \relative c' { + \transposition bes + fis4 d d c +} +\addQuote "clarinet" { \clarinet } + +singer = \relative c'' { c4. g8 g4 bes4 } +words = \lyricmode { here's the lyr -- ics } + +pianoRH = \relative c'' { + \transposition c' + \cueWhile "clarinet" "Clar." #DOWN { c4. g8 } + \cueWhile "flute" "Flute" #UP { g4 bes4 } +} +pianoLH = \relative c { c4 e, } + +\score { + << + \new Staff { + \new Voice = "singer" { + \singer + } + } + \new Lyrics { + \lyricsto "singer" + \words + } + \new PianoStaff << + \new Staff { + \new Voice { + \pianoRH + } + } + \new Staff { + \clef "bass" + \pianoLH + } + >> + >> +} diff --git a/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly b/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly new file mode 100644 index 0000000000..3d9ff364df --- /dev/null +++ b/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly @@ -0,0 +1,35 @@ +%% 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 = "expressive-marks" + +%% 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}. + +" + doctitlees = "Encerrar entre paréntesis una marca expresiva o una nota de un acorde" + + texidoc = " +The @code{\\parenthesize} function is a special tweak that encloses +objects in parentheses. The associated grob is @code{ParenthesesItem}. + + +" + doctitle = "Adding parentheses around an expressive mark or chordal note" +} % begin verbatim + +\relative c' { + c2-\parenthesize -> + \override ParenthesesItem #'padding = #0.1 + \override ParenthesesItem #'font-size = #-4 + 2 +} + diff --git a/Documentation/snippets/adding-the-current-date-to-a-score.ly b/Documentation/snippets/adding-the-current-date-to-a-score.ly new file mode 100644 index 0000000000..59ffd8753c --- /dev/null +++ b/Documentation/snippets/adding-the-current-date-to-a-score.ly @@ -0,0 +1,54 @@ +%% 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 = "text, titles" + +%% 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. +" + doctitlees = "Añadir la fecha actual a una partitura" + + +%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5 + texidocfr = " +Avec un peu de code Scheme, voici comment ajouter facilement +la date du jour à votre partition. +" + + doctitlefr = "Ajout de la date du jour à une partition" + + texidoc = " +With a little Scheme code, the current date can easily be added to a +score. + +" + doctitle = "Adding the current date to a score" +} % begin verbatim + +% first, define a variable to hold the formatted date: +date = #(strftime "%d-%m-%Y" (localtime (current-time))) + +% use it in the title block: +\header { + title = "Including the date!" + subtitle = \date +} + +\score { + \relative c'' { + c4 c c c + } +} +% and use it in a \markup block: +\markup { + \date +} + diff --git a/Documentation/snippets/adding-volta-brackets-to-additional-staves.ly b/Documentation/snippets/adding-volta-brackets-to-additional-staves.ly new file mode 100644 index 0000000000..41c8a80c27 --- /dev/null +++ b/Documentation/snippets/adding-volta-brackets-to-additional-staves.ly @@ -0,0 +1,65 @@ +%% 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 = "repeats" + +%% 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 +se imprimen así normalmente sólo encima del pentagrama superior. Esto +se puede ajustar añadiendo el grabador @code{Volta_engraver} al +contexto de @code{Staff} en que deban aparecer los corchetes; véase +también el fragmento de código @qq{Volta multi staff}. + +" + doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Der @code{Volta_engraver} befindet sich im @code{Score}-Kontext und Klammern +werden deshalb nur auf dem obersten System dargestellt. Das kann umgangen +werden, indem man den @code{Volta_engraver} zu dem @code{Staff}-Kontext +hinzufügt, in dem die Klammern zusätzlichen vorkommen sollen. Siehe auch +das \"Volta multi staff\"-Schnipsel. + +" + doctitlede = "Volta-Klammern zu zusätzlichen Systemen hinzufügen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +D'ordinaire, le graveur @code{Volta_engraver} réside dans le contexte +@code{Score} ; les crochets précédant une reprise s'impriment donc +seulement au-dessus de la portée du haut. On peut ajuster cela en +déplaçant ce graveur vers les contextes de portée (@code{Staff}) qui +doivent comporter ces crochets. + +" + doctitlefr = "Ajout du crochet de reprise à d'autres portées" + + + texidoc = " +The @code{Volta_engraver} by default resides in the @code{Score} +context, and brackets for the repeat are thus normally only printed +over the topmost staff. This can be adjusted by adding the +@code{Volta_engraver} to the @code{Staff} context where the brackets +should appear; see also the @qq{Volta multi staff} snippet. + +" + doctitle = "Adding volta brackets to additional staves" +} % begin verbatim + +<< + \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } + \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } + \new Staff \with { \consists "Volta_engraver" } { c'2 g' e' a' } + \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } +>> + diff --git a/Documentation/snippets/additional-voices-to-avoid-collisions.ly b/Documentation/snippets/additional-voices-to-avoid-collisions.ly new file mode 100644 index 0000000000..e8eb502cfa --- /dev/null +++ b/Documentation/snippets/additional-voices-to-avoid-collisions.ly @@ -0,0 +1,91 @@ +%% 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 = "simultaneous-notes" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Voces adicionales para evitar colisiones" + texidoces = " +En ciertos casos de polifonía compleja, se necesitan voces adicionales +para evitar colisiones entre las notas. Si se necesitan más de cuatro +voces paralelas, las voces adicionales se añaden definiendo una +variable que utiliza la función de Scheme @code{context-spec-music}. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche +Stimmen notwendig, um Zusammenstöße zwischen den Noten zu vermeiden. +Wenn mehr als vier parallele Stimmen benötigt werden, können zusätzliche +Stimmen definiert werden, indem eine Variable mit der Funktion +@code{context-spec-music} definiert wird. + +" + doctitlede = "Zusätzliche Stimmen um Zusammenstöße zu vermeiden" + +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +Dans certains cas de musique polyphonie complexe, une voix +supplémentaire peut permettre d'éviter les risques de collision. +Lorsque quatre voix parallèles ne suffisent pas, la fonction Scheme +@code{context-spec-music} permet d'ajouter des d'autres voix. + +" + doctitlefr = "Ajout de voix pour éviter les collisions" + + + texidoc = " +In some instances of complex polyphonic music, additional voices are +necessary to prevent collisions between notes. If more than four +parallel voices are needed, additional voices can be added by defining +a variable using the Scheme function @code{context-spec-music}. + +" + doctitle = "Additional voices to avoid collisions" +} % begin verbatim + +voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) + +\relative c'' { + \time 3/4 + \key d \minor + \partial 2 + << + { + \voiceOne + a4. a8 + e'4 e4. e8 + f4 d4. c8 + } + \\ + { + \voiceThree + f,2 + bes4 a2 + a4 s2 + } + \\ + { + \voiceFive + s2 + g4 g2 + f4 f2 + } + \\ + \bar "||"{ + \voiceTwo + d2 + d4 cis2 + d4 bes2 + } + >> +} + diff --git a/Documentation/snippets/adjusting-grace-note-spacing.ly b/Documentation/snippets/adjusting-grace-note-spacing.ly new file mode 100644 index 0000000000..693b47c48c --- /dev/null +++ b/Documentation/snippets/adjusting-grace-note-spacing.ly @@ -0,0 +1,42 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% 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}. + +" + + doctitlees = "Ajuste del espaciado de las notas de adorno" + + texidoc = " +The space given to grace notes can be adjusted using the +@code{spacing-increment} property of @code{Score.GraceSpacing}. + +" + doctitle = "Adjusting grace note spacing" +} % begin verbatim + +graceNotes = { + \grace { c4 c8 c16 c32 } + c8 +} + +\relative c'' { + c8 + \graceNotes + \override Score.GraceSpacing #'spacing-increment = #2.0 + \graceNotes + \revert Score.GraceSpacing #'spacing-increment + \graceNotes +} + diff --git a/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly b/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly new file mode 100644 index 0000000000..719edcd850 --- /dev/null +++ b/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly @@ -0,0 +1,59 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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. + +" + doctitlees = "Ajuste del especiado vertical de la letra" + + +%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea + texidocfr = " +Cet extrait illustre la manière de rapprocher la ligne de paroles +de la portée. + +" + doctitlefr = "Ajustement de l'espacement vertical des paroles" + + + lsrtags = "text, vocal-music, spacing" + texidoc = " +This snippet shows how to bring the lyrics line closer to the staff. + +" + doctitle = "Adjusting lyrics vertical spacing" +} % begin verbatim + + +% Default layout: +<< + \new Staff \new Voice = melody \relative c' { + c4 d e f + g4 f e d + c1 + } + \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } + + % Reducing the minimum space below the staff and above the lyrics: + \new Staff { + \new Voice = melody \relative c' { + c4 d e f + g4 f e d + c1 + } + } + \new Lyrics \with { + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) + } + \lyricsto melody { aa aa aa aa aa aa aa aa aa } +>> diff --git a/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly b/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly new file mode 100644 index 0000000000..bea2dfe562 --- /dev/null +++ b/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly @@ -0,0 +1,54 @@ +%% 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 = "expressive-marks" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Puede ser necesario trucar la propiedad +@code{shortest-duration-space} para poder ajustar el tamaño de las +caídas y subidas de tono («falls» y «doits»). + +" + doctitlees = "Ajustar la forma de las subidas y caídas de tono" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um +das Aussehen von unbestimmten Glissandi anzupassen. + +" + doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +La propriété @code{shortest-duration-space} peut devoir être retouchée +pour ajuster l'apparence des chutes ou sauts. + +" + doctitlefr = "Ajustement du galbe des chutes ou sauts" + + + texidoc = " +The @code{shortest-duration-space} property may have to be tweaked to +adjust the shape of falls and doits. + +" + doctitle = "Adjusting the shape of falls and doits" +} % begin verbatim + +\relative c'' { + \override Score.SpacingSpanner #'shortest-duration-space = #4.0 + c2-\bendAfter #5 + c2-\bendAfter #-4.75 + c2-\bendAfter #8.5 + c2-\bendAfter #-6 +} + diff --git a/Documentation/snippets/aligning-and-centering-instrument-names.ly b/Documentation/snippets/aligning-and-centering-instrument-names.ly new file mode 100644 index 0000000000..678c12df15 --- /dev/null +++ b/Documentation/snippets/aligning-and-centering-instrument-names.ly @@ -0,0 +1,78 @@ +%% 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 = "text, paper-and-layout, titles" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +La alineación horizontal de los nombres de instrumento se puede +trucar modificando la propiedad @code{Staff.InstrumentName +#'self-alignment-X}. Las variables de @code{\\layout} +@code{indent} y @code{short-indent} definen el espacio en que se +alinean los nombres de instrumento antes del primer sistema y de +los siguientes, respectivamente. + +" + doctitlees = "Alinear y centrar los nombres de instrumento" + + texidoc = " +The horizontal alignment of instrument names is tweaked by changing the +@code{Staff.InstrumentName #'self-alignment-X} property. The +@code{\\layout} variables @code{indent} and @code{short-indent} define +the space in which the instrument names are aligned before the first +and the following systems, respectively. + +" + doctitle = "Aligning and centering instrument names" +} % begin verbatim + +\paper { + left-margin = 3\cm +} + +\score { + \new StaffGroup << + \new Staff { + \override Staff.InstrumentName #'self-alignment-X = #LEFT + \set Staff.instrumentName = \markup \left-column { + "Left aligned" + "instrument name" + } + \set Staff.shortInstrumentName = #"Left" + c''1 + \break + c''1 + } + \new Staff { + \override Staff.InstrumentName #'self-alignment-X = #CENTER + \set Staff.instrumentName = \markup \center-column { + Centered + "instrument name" + } + \set Staff.shortInstrumentName = #"Centered" + g'1 + g'1 + } + \new Staff { + \override Staff.InstrumentName #'self-alignment-X = #RIGHT + \set Staff.instrumentName = \markup \right-column { + "Right aligned" + "instrument name" + } + \set Staff.shortInstrumentName = #"Right" + e'1 + e'1 + } + >> + \layout { + ragged-right = ##t + indent = 4\cm + short-indent = 2\cm + } +} diff --git a/Documentation/snippets/aligning-bar-numbers.ly b/Documentation/snippets/aligning-bar-numbers.ly new file mode 100644 index 0000000000..2e38655429 --- /dev/null +++ b/Documentation/snippets/aligning-bar-numbers.ly @@ -0,0 +1,76 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Los números de compás se alinean de forma predeterminada por la +derecha con su objeto padre. Éste es por lo general el borde +izquierdo de una línea o, si los números se imprimen dentro de la +línea, el lado izquierdo de una línea divisoria. Los números +también se pueden situar directamente sobre la barra de compás o +alineados por la izquierda con ella. + +" + + doctitlees = "Alineación de los números de compás" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern sind standardmäßig links an ihrem Ursprungsobjekt +ausgerichtet. Das ist normalerweise die linke Ecke einer Linie oder, +wenn die Nummern innerhalb einer Zeile gesetzt werden, auf der +linken Seite eines Taktstrichs. Die Nummern können auch +direkt über dem Taktstrich positioniert werden oder rechts vom +Taktstrich gesetzt werden. + +" + doctitlede = "Taktnummern ausrichten" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Les numéros de mesure s'alignent en principe sur la droite de l'objet +dont ils dépendent. C'est normalement le coin gauche de la portée ou, +en cours de ligne, à gauche de la barre. Vous pouvez toutefois les +centrer par rapport à la barre ou les afficher à droite de la barre. + +" + doctitlefr = "Alignement des numéros de mesure" + + texidoc = " +Bar numbers by default are right-aligned to their parent object. This +is usually the left edge of a line or, if numbers are printed within a +line, the left hand side of a bar line. The numbers may also be +positioned directly over the bar line or left-aligned to the bar line. + +" + doctitle = "Aligning bar numbers" +} % begin verbatim + +\relative c' { + \set Score.currentBarNumber = #111 + \override Score.BarNumber #'break-visibility = #all-visible + % Increase the size of the bar number by 2 + \override Score.BarNumber #'font-size = #2 + % Print a bar number every second measure + \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) + c1 | c1 + % Center-align bar numbers + \override Score.BarNumber #'self-alignment-X = #CENTER + c1 | c1 + % Left-align bar numbers + \override Score.BarNumber #'self-alignment-X = #LEFT + c1 | c1 +} + diff --git a/Documentation/snippets/aligning-marks-with-various-notation-objects.ly b/Documentation/snippets/aligning-marks-with-various-notation-objects.ly new file mode 100644 index 0000000000..85ee5dce1f --- /dev/null +++ b/Documentation/snippets/aligning-marks-with-various-notation-objects.ly @@ -0,0 +1,137 @@ +%% 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 = "text" + +%% 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 +objetos se encuentran @code{ambitus}, @code{breathing-sign}, +@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge}, +@code{key-cancellation}, @code{key-signature} y @code{time-signature}. + +En estos casos, las marcas de texto se centran horizontalmente sobre +el objeto, aunque esto se puede cambiar, como se muestra en la segunda +línea de este ejemplo (en una partitura con varios pentagramas, se +debe hacer este ajuste para todos los pentagramas). + +" + doctitlees = "Alinear marcas con varios objetos de notación" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn angegeben, können Textzeichen auch an anderen Objekten als Taktstrichen +ausgerichtet werden. Zu diesen Objekten gehören @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature} und +@code{time-signature}. + +In diesem Fall werden die Zeichen horizontal über dem Objekt zentriert. +Diese Ausrichtung kann auch geändert werden, wie die zweite Zeile +des Beispiels zeigt. In einer Partitur mit vielen Systemen sollte +diese Einstellung für alle Systeme gemacht werden. + +" + + doctitlede = "Zeichen an verschiedenen Notationsobjekten ausrichten" + +%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334 + texidocfr = " +Les indications textuelles peuvent s'aligner par rapport à d'autres +objets que des barres de mesure, tels que @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature}, ou +@code{time-signature}. + + + +Par défaut, les indications textuelles sont alignées avec le milieu +des objets de notation. Bien entendu, vous pouvez modifier les +propriétés des objets en question pour obtenir un autre +résultat comme l'illustre la deuxième ligne de l'exemple. Dans le cas +de portées multiples, ces réglages doivent être faits pour chacune +d'entre elles. + + + +" + doctitlefr = "Alignement des indications par rapport à divers objets +de notation" + + + texidoc = " +If specified, text marks may be aligned with notation objects other +than bar lines. These objects include @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and +@code{time-signature}. + + + +In such cases, text marks will be horizontally centered above the +object. However this can be changed, as demonstrated on the second line +of this example (in a score with multiple staves, this setting should +be done for all the staves). + + + +" + doctitle = "Aligning marks with various notation objects" +} % begin verbatim + +\relative c' { + e1 + + % the RehearsalMark will be centered above the Clef + \override Score.RehearsalMark #'break-align-symbols = #'(clef) + \key a \major + \clef treble + \mark "↓" + e1 + + % the RehearsalMark will be centered above the TimeSignature + \override Score.RehearsalMark #'break-align-symbols = #'(time-signature) + \key a \major + \clef treble + \time 3/4 + \mark \markup { \char ##x2193 } + e2. + + % the RehearsalMark will be centered above the KeySignature + \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) + \key a \major + \clef treble + \time 4/4 + \mark \markup { \char ##x2193 } + e1 + + \break + e1 + + % the RehearsalMark will be aligned with the left edge of the KeySignature + \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT + \mark \markup { \char ##x2193 } + \key a \major + e1 + + % the RehearsalMark will be aligned with the right edge of the KeySignature + \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT + \key a \major + \mark \markup { \char ##x2193 } + e1 + + % the RehearsalMark will be aligned with the left edge of the KeySignature + % and then shifted right by one unit. + \once \override Score.KeySignature #'break-align-anchor = #1 + \key a \major + \mark \markup { \char ##x2193 } + e1 +} diff --git a/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly b/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly new file mode 100644 index 0000000000..5c55788f94 --- /dev/null +++ b/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly @@ -0,0 +1,32 @@ +%% 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 = "text" + + texidoc = " +By default the @code{\\mark} command centers objects over a bar line. +This behavior can be modified to align at right or left. + +" + doctitle = "Aligning objects created with the \\mark command" +} % begin verbatim + +\relative c' { + c1 \mark "(Center)" + c1 + \once \override Score.RehearsalMark #'self-alignment-X = #LEFT + \mark "(Left)" + c4 c c c + c4 c c c + \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT + \mark "(Right)" + c1 +} + + diff --git a/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly b/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly new file mode 100644 index 0000000000..3692a31030 --- /dev/null +++ b/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly @@ -0,0 +1,56 @@ +%% 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 = "editorial-annotations, fretted-strings, spacing" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Las cifras de digitación orientadas verticalmente se colocan de forma +predeterminada fuera del pentagrama. Sin embargo, este comportamiento +se puede cancelar. Nota: se debe usar una construcción de acorde <>, +aunque sea una sola nota. + + +" + doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems +gesetzt. Das kann aber verändert werden. + +" + doctitlede = "Fingersatz auch innerhalb des Systems setzen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +L'empilement des indications de doigté se fait par défaut à l'extérieur +de la portée. Néanmoins, il est possible d'annuler ce comportement. + +" + doctitlefr = "Impression des doigtés à l'intérieur de la portée" + + + texidoc = " +By default, vertically oriented fingerings are positioned outside the +staff. However, this behavior can be canceled. Note: you must use a +chord construct <>, even if it is only a single note. + +" + doctitle = "Allowing fingerings to be printed inside the staff" +} % begin verbatim + +\relative c' { + 2 + \override Fingering #'staff-padding = #'() + 4 +} + diff --git a/Documentation/snippets/altering-the-length-of-beamed-stems.ly b/Documentation/snippets/altering-the-length-of-beamed-stems.ly new file mode 100644 index 0000000000..02406380d3 --- /dev/null +++ b/Documentation/snippets/altering-the-length-of-beamed-stems.ly @@ -0,0 +1,55 @@ +%% 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 = "pitches, tweaks-and-overrides" + +%% 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 +@code{beamed-lengths} de los detalles (@code{details}) del objeto +@code{Stem}. Si se utiliza un solo valor como argumento, la longitud +se aplica a todas las plicas. Si se usan varios argumentos, el +primero se aplica a las corcheas, el sgundo a las semicorcheas y así +sucesivamente. El último argumento también se aplica a todas las +figuras que son mmás cortas que la longitud de la figura del último +argumento. También se pueden usar argumentos no enteros. + +" + +doctitlees = "Alterar la longitud de las plicas unidas por una barra" + + + + texidoc = " +Stem lengths on beamed notes can be varied by overriding the +@code{beamed-lengths} property of the @code{details} of the +@code{Stem}. If a single value is used as an argument, the length +applies to all stems. When multiple arguments are used, the first +applies to eighth notes, the second to sixteenth notes and so on. The +final argument also applies to all notes shorter than the note length +of the final argument. Non-integer arguments may also be used. + +" + doctitle = "Altering the length of beamed stems" +} % begin verbatim + +\relative c'' { + \override Stem #'(details beamed-lengths) = #'(2) + a8[ a] a16[ a] a32[ a] + \override Stem #'(details beamed-lengths) = #'(8 10 12) + a8[ a] a16[ a] a32[ a] r8 + \override Stem #'(details beamed-lengths) = #'(8) + a8[ a] + \override Stem #'(details beamed-lengths) = #'(8.5) + a8[ a] + \revert Stem #'details + a8[ a] a16[ a] a32[ a] r16 +} + diff --git a/Documentation/snippets/alternative-breve-note.ly b/Documentation/snippets/alternative-breve-note.ly new file mode 100644 index 0000000000..65bb464c20 --- /dev/null +++ b/Documentation/snippets/alternative-breve-note.ly @@ -0,0 +1,21 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { + lsrtags = "rhythms,expressive-marks" + texidoc = "This code demonstrates how to use the alternative breve note +with two vertical lines on each side of the notehead instead of one line." + doctitle = "Alternative breve notehead with double vertical lines" +} % begin verbatim + + +\relative c'' { + \time 4/2 + \override Staff.NoteHead #'style = #'altdefault + c\breve | b\breve +} diff --git a/Documentation/snippets/ambitus-with-multiple-voices.ly b/Documentation/snippets/ambitus-with-multiple-voices.ly new file mode 100644 index 0000000000..1d44332347 --- /dev/null +++ b/Documentation/snippets/ambitus-with-multiple-voices.ly @@ -0,0 +1,65 @@ +%% 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 = "pitches, vocal-music" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Ámbitos con varias voces" + texidoces = " +La adición del grabador @code{Ambitus_engraver} al contexto de +@code{Staff} crea un solo ámbito por pentagrama, incluso en el caso de +pentagramas con varias voces. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext +hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem +Fall, dass mehrere Stimmen sich im gleichen System befinden. +" + doctitlede = "Ambitus mit vielen Stimmen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Si plusieurs voix se trouvent sur une même portée, on peut attribuer le +graveur @code{Ambitus_engraver} au contexte @code{Staff} afin d'obtenir +l'ambitus de toutes les voix cumulées, non d'une seule des voix actives. + +" + doctitlefr = "Ambitus sur plusieurs voix" + + + texidoc = " +Adding the @code{Ambitus_engraver} to the @code{Staff} context creates +a single ambitus per staff, even in the case of staves with multiple +voices. + +" + doctitle = "Ambitus with multiple voices" +} % begin verbatim + +\new Staff \with { + \consists "Ambitus_engraver" + } +<< + \new Voice \relative c'' { + \voiceOne + c4 a d e + f1 + } + \new Voice \relative c' { + \voiceTwo + es4 f g as + b1 + } +>> + + diff --git a/Documentation/snippets/ambitus.ly b/Documentation/snippets/ambitus.ly new file mode 100644 index 0000000000..882dab4608 --- /dev/null +++ b/Documentation/snippets/ambitus.ly @@ -0,0 +1,45 @@ +%% 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 = "pitches, vocal-music" + + texidoc = " +Ambitus indicate pitch ranges for voices. + + +Accidentals only show up if they are not part of the key signature. +@code{AmbitusNoteHead} grobs also have ledger lines. + +" + doctitle = "Ambitus" +} % begin verbatim + +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +<< + \new Staff { + \relative c' { + \time 2/4 + c4 f' + } + } + \new Staff { + \relative c' { + \time 2/4 + \key d \major + cis4 as' + } + } +>> + diff --git a/Documentation/snippets/analysis-brackets-above-the-staff.ly b/Documentation/snippets/analysis-brackets-above-the-staff.ly new file mode 100644 index 0000000000..75aa9b1a19 --- /dev/null +++ b/Documentation/snippets/analysis-brackets-above-the-staff.ly @@ -0,0 +1,41 @@ +%% 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 = "editorial-annotations, tweaks-and-overrides" + +%% 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 +colocarlos por encima. + +" + doctitlees = "Corchetes de análisis encima del pentagrama" + + texidoc = " +Simple horizontal analysis brackets are added below the staff by +default. The following example shows a way to place them above the +staff instead. + +" + doctitle = "Analysis brackets above the staff" +} % begin verbatim + +\layout { + \context { + \Voice + \consists "Horizontal_bracket_engraver" + } +} +\relative c'' { + \once \override HorizontalBracket #'direction = #UP + c2\startGroup + d2\stopGroup +} + diff --git a/input/lsr/ancient-fonts.ly b/Documentation/snippets/ancient-fonts.ly similarity index 91% rename from input/lsr/ancient-fonts.ly rename to Documentation/snippets/ancient-fonts.ly index 326a1928fd..1884c275b0 100644 --- a/input/lsr/ancient-fonts.ly +++ b/Documentation/snippets/ancient-fonts.ly @@ -1,18 +1,25 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "ancient-notation" +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c texidoces = " -Aquí se muestran muchos (¿o quizá todos?) de los símbolos que +Aquí se muestran muchos de (¿o quizá todos?) los símbolos que están contemplados por la capacidad de LilyPond para la música antigua. " doctitlees = "Tipografía de música antigua" + +%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea texidocfr =" Voici comment graver la plupart, sinon tous les symboles que LilyPond prend en charge en matière de musique ancienne. @@ -33,17 +40,17 @@ LilyPond's support for ancient notation. upperStaff = \new VaticanaStaff = "upperStaff" << \context VaticanaVoice << \transpose c c { - + \override NoteHead #'style = #'vaticana.punctum \key es \major \clef "vaticana-fa2" c1 des e f ges - + \override NoteHead #'style = #'vaticana.inclinatum a! b ces' \bar "|" % \break % 1 (8*1) - + \override NoteHead #'style = #'vaticana.quilisma b! des'! ges! fes! \breathe @@ -54,7 +61,7 @@ upperStaff = \new VaticanaStaff = "upperStaff" << c d \bar "|" % \break %2 (8*1) - + \override NoteHead #'style = #'vaticana.punctum.cavum es f \override NoteHead #'style = #'vaticana.lpes @@ -64,15 +71,15 @@ upperStaff = \new VaticanaStaff = "upperStaff" << \override NoteHead #'style = #'vaticana.vupes g f \override NoteHead #'style = #'vaticana.linea.punctum - \once \override Staff.BarLine #'bar-size = #2.0 \bar "|" + \once \override Staff.BarLine #'bar-extent = #'(-1 . 1) \bar "|" % \break % 3 (8*1) - + es d \override NoteHead #'style = #'vaticana.epiphonus c d \override NoteHead #'style = #'vaticana.cephalicus es f - + \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist \override Staff.Custos #'style = #'medicaea @@ -81,7 +88,7 @@ upperStaff = \new VaticanaStaff = "upperStaff" << ces des \bar "|" % \break % 4 (8*1) - + e! f! ges \clef "medicaea-do2" \override NoteHead #'style = #'medicaea.inclinatum @@ -90,12 +97,12 @@ upperStaff = \new VaticanaStaff = "upperStaff" << b! a! \bar "|" % \break % 5 (8*1) - + ges fes \clef "medicaea-fa1" \override NoteHead #'style = #'medicaea.rvirga e des ces - + \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist \override Staff.Custos #'style = #'hufnagel @@ -104,7 +111,7 @@ upperStaff = \new VaticanaStaff = "upperStaff" << ces des es \bar "|" % \break % 6 (8*1) - + fes ges \clef "hufnagel-do2" \override NoteHead #'style = #'hufnagel.lpes @@ -113,14 +120,14 @@ upperStaff = \new VaticanaStaff = "upperStaff" << bes! as! \bar "|" % \break % 7 (8*1) - + ges! fes! \clef "hufnagel-do-fa" \override NoteHead #'style = #'hufnagel.punctum es! des ces des! es! fes! \bar "||" % \break % 8 (8*1) - + s32*1 % \break % 12 (32*1) } @@ -130,7 +137,7 @@ upperStaff = \new VaticanaStaff = "upperStaff" << lowerStaff = \new MensuralStaff = "lowerStaff" << \context MensuralVoice << \transpose c c { - + \key a \major cis'1 d'\breve gis'\breve e'\breve \[ e'\longa fis'\longa \] \set Staff.forceClef = ##t @@ -138,12 +145,12 @@ lowerStaff = \new MensuralStaff = "lowerStaff" << cis1 \bar "|" % \break % 2 (16*1) - + \[ g\breve dis''\longa \] b\breve \[ a\longa d\longa \] \clef "petrucci-c2" % \break % 4 (16*1) - + fis1 ces1 \clef "petrucci-c2" r\longa @@ -152,7 +159,7 @@ lowerStaff = \new MensuralStaff = "lowerStaff" << r\breve \bar "|" % \break % 5 (8*1) - + r2 \clef "mensural-g" r4 r8 r16 r16 @@ -167,28 +174,28 @@ lowerStaff = \new MensuralStaff = "lowerStaff" << r\breve \bar "|" % \break % 6 (8*1) - - r\breve + + r\breve \clef "mensural-f" r2 r4 r8 r16 r16 - + \set Staff.forceClef = ##t \clef "mensural-f" e\breve f g a1 \clef "mensural-g" % \break % 7 (8*1) - + \[ bes'!\longa a'!\longa c''!\longa \] e'1 d' c' d' \bar "|" \bar "|" % \break % 9 (16*1) - + bes'!\longa fis'!1 as'!1 ges'!\longa % lig \set Staff.forceClef = ##t \clef "mensural-g" e'2 d' c' \bar "|" % \break % 11 (16*1) - + \set Staff.forceClef = ##t \clef "petrucci-g" c'2 d' e' f' diff --git a/Documentation/snippets/ancient-headword.ly b/Documentation/snippets/ancient-headword.ly new file mode 100644 index 0000000000..dc9cc0c34b --- /dev/null +++ b/Documentation/snippets/ancient-headword.ly @@ -0,0 +1,142 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" + +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +\include "gregorian.ly" + +\score { + << + \new VaticanaVoice = "cantus" { + \clef "vaticana-do3" + % Verse 1 — Salve, Regína + a\melisma \[ a \flexa g \pes a\melismaEnd \] d + \divisioMinima + \[ a\melisma \flexa g\melismaEnd \] + \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] + \[ e\melisma \flexa d\melismaEnd \] + \divisioMaior + c d \[d\melisma \flexa c\melismaEnd \] d + \[ e\melisma \pes f\melismaEnd\] g + \[d\melisma \pes e \flexa c\melismaEnd \] d + \finalis + % Verse 2 — Vita, dulcédo + % a\melisma \[ a \flexa g \pes a\melismaEnd \] d + % \divisioMinima + % \[ a\melisma \flexa g\melismaEnd \] + % \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] + % \[ e\melisma \flexa d\melismaEnd \] + % \divisioMaior + % c d \[e\melisma \pes f\melismaEnd \] g + % \[d\melisma \pes e \flexa c\melismaEnd \] d + % \finalis + % Verse 3 — Ad te clamámus + \[ d\melisma \pes f\melismaEnd\] a g + \[ g\melisma \flexa f \pes a\melismaEnd\] e + \divisioMaior + g f \[ e\melisma \flexa d \pes g\melismaEnd \] + \divisioMinima + c d \[ e\melisma \flexa d \pes g\melismaEnd \] + \[ f\melisma \flexa e\melismaEnd \] d + \finalis + % Verse 4 — Ad te suspirámus + \[ d\melisma \pes f\melismaEnd \] a c' g + \[ g\melisma \flexa f \pes g\melismaEnd \] a + \divisioMaior + d \[ f\melisma \pes \deminutum g\melismaEnd \] g d + \[ \virga f\melisma \inclinatum e \inclinatum d\melismaEnd \] + c \divisioMaior + d \[ d\melisma \flexa c \pes f\melismaEnd \] + \[ g\melisma \pes a\melismaEnd \] + g \[ f\melisma \flexa e\melismaEnd \] g + \[ f\melisma \flexa \deminutum e\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] + \finalis + % Verse 5 — Eia ergo, Advocáta nostra + f\melisma \[ f \pes g\melismaEnd \] f + \[ g\melisma \pes \deminutum a\melismaEnd \] a + \divisioMinima + c' g \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] d g a + \divisioMaior + d' d' \[ c'\melisma \flexa b c' \pes d'\melismaEnd \] a + \divisioMinima + d' c' a \[ g\melisma \flexa f \pes a\melismaEnd \] g + \[ d\melisma \pes e\melismaEnd \] f + \[ \virga e\melisma \inclinatum d \inclinatum c\melismaEnd \] + \divisioMaior + \[ c\melisma \pes d\melismaEnd \] + f \[ g\melisma \flexa \deminutum f\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] d + \finalis + % Verse 6 — Et Jesum + d a, \[ c\melisma \pes d\melismaEnd \] + \divisioMinima + d \[ d\melisma \pes e\melismaEnd \] \[ e\melisma \flexa d d\melismaEnd \] + c g f \[ e\melisma \flexa \deminutum d\melismaEnd \] g + \[ f\melisma \flexa e\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] + \[ d\melisma \pes a \] \virga bes\melismaEnd a + \divisioMinima + \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] g d f + \[ f\melisma \flexa e\melismaEnd \] \[ d\melisma \flexa c\melismaEnd \] + \divisioMinima + \[ e\melisma \pes f \flexa e\melismaEnd \] d d + \finalis + % Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María + a\melisma \[a \flexa g a \quilisma b \pes c'\melismaEnd \] + \[ \virga b\melisma \inclinatum a \inclinatum g\melismaEnd \] a + \finalis + \[ g\melisma \pes a \quilisma b \pes c' \] \[ c' \flexa b\melismaEnd \] + \[ a\melisma \flexa g\melismaEnd \] \[ g\melisma \pes a\melismaEnd \] + \finalis + \[ a\melisma \flexa d \virga f \inclinatum e \inclinatum d \inclinatum c d \] + \divisioMinima + \[ d \pes e f \pes g\melismaEnd \] + \[ g\melisma \flexa \deminutum f\melismaEnd \] + \[ g\melisma \pes a\melismaEnd \] + d c d \[ d\melisma \pes g \flexa f f\melismaEnd \] + \[ e\melisma \flexa d\melismaEnd \] + \finalis + } + \new Lyrics \lyricsto "cantus" { + Sal- ve, Re- gí- na, ma- ter mi- se- ri- cór- di- ae: + % Vi- ta, dul- cé- do, et spes no- stra, sal- ve. + Ad te cla- má- mus, éx- su- les, fi- li- i He- vae. + Ad te su- spi- rá- mus, ge- mén- tes et flen- tes in hac la- cri- má- rum + val- le. + E- ia er- go, Ad- vo- cá- ta no- stra, il- los tu- os mi- se- ri- cór- des + ó- cu- los ad nos con- vér- te. + Et Je- sum, be- ne- díc- tum fruc- tum ven- tris tu- i, no- bis post hoc + ex- sí- li- um os- tén- de. + O cle- mens: + O pi- a: + O dul- cis Vir- go Ma- rí- a. + } + >> +} + +\layout { + \context { + \Staff + \consists "Custos_engraver" + } +} diff --git a/input/lsr/ancient-notation-intro.itely b/Documentation/snippets/ancient-notation-intro.itely similarity index 100% rename from input/lsr/ancient-notation-intro.itely rename to Documentation/snippets/ancient-notation-intro.itely diff --git a/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly b/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly new file mode 100644 index 0000000000..37037111bc --- /dev/null +++ b/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly @@ -0,0 +1,102 @@ +%% 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 { +%% 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: 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 +solamente cabezas de nota de blanca y de negra, y unas marcas +especiales que indican silencios de distintas longitudes. + +" + + doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + + texidocde = " +Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen +Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur +halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die +Länge von Pausen an. +" + + doctitlede = "Vorlage für Alte Notation -- moderne Transkription des gregorianischen Chorals" + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Voici comment vous pourriez transcrire du grégorien. Pour mémoire, il +n'y a en grégorien ni de découpage en mesure, ni de hampe ; seules +sont utilisées des têtes de note blanches ou noires, ainsi que des +signes spécifiques permettant d'indiquer des silences de différentes durées. + +" + doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique grégorienne" + + texidoc = " +This example demonstrates how to do modern transcription of Gregorian +music. Gregorian music has no measure, no stems; it uses only half and +quarter note heads, and special marks, indicating rests of different +length. + +" + doctitle = "Ancient notation template -- modern transcription of gregorian music" +} % begin verbatim + +\include "gregorian.ly" + +chant = \relative c' { + \set Score.timing = ##f + f4 a2 \divisioMinima + g4 b a2 f2 \divisioMaior + g4( f) f( g) a2 \finalis +} + +verba = \lyricmode { + Lo -- rem ip -- sum do -- lor sit a -- met +} + +\score { + \new Staff << + \new Voice = "melody" \chant + \new Lyrics = "one" \lyricsto melody \verba + >> + \layout { + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Bar_engraver" + \override Stem #'transparent = ##t + } + \context { + \Voice + \override Stem #'length = #0 + } + \context { + \Score + barAlways = ##t + } + } +} + diff --git a/input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly b/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly similarity index 77% rename from input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly rename to Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly index a5daa4c980..df5e844eb1 100644 --- a/input/lsr/ancient-notation-template----modern-transcription-of-mensural-music.ly +++ b/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly @@ -1,10 +1,31 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\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: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c texidoces = " Al transcribir música mensural, es útil un «incipit» al compienzo de la pieza para indicar la tonalidad y el tempo @@ -18,30 +39,35 @@ encima de ellos. " doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)" - + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 texidocde = " -Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein -Incipit an den Anfang des Stückes zu stellen, damit klar ist, wie -Tempo und Schlüssel in der Originalnotation gesetzt waren. Während -heutzutage Musiker an Taktlinien gewöhnt sind, um Rhythmen schneller -zu erkennen, wurden diese in der Mensuralmusik nicht verwendet. -Tatsächlich ändern sich die Rhythmen auch oft alle paar Noten. Als -ein Kompromiss werden die Notenlinien nicht auf dem System, sondern +Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein +Incipit an den Anfang des Stückes zu stellen, damit klar ist, wie +Tempo und Schlüssel in der Originalnotation gesetzt waren. Während +heutzutage Musiker an Taktlinien gewöhnt sind, um Rhythmen schneller +zu erkennen, wurden diese in der Mensuralmusik nicht verwendet. +Tatsächlich ändern sich die Rhythmen auch oft alle paar Noten. Als +ein Kompromiss werden die Notenlinien nicht auf dem System, sondern zwischen den Systemen geschrieben. " +doctitlede = "Vorlage für Alte Notation -- moderne Transkription von Mensuralmusik" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a texidocfr = " -Lorsque l'on transcrit de la musique mensurale, il est d'usage -d'indiquer en début de partition, par un « incipit », les tonalité -et tempo originaux. De nos jours, les musiciens ont l'habitude de -voir des barres de mesure qui les aide à appréhender la structure -rythmique. Ces barres n'existaient pas du temps où ces œuvres ont -été écrites ; en fait, la métrique évoluait au fil de la pièce. Un -compromis consiste à imprimer des barres de mesure entre les portées -plutôt que sur la portée elle-même. +Lorsque l'on transcrit de la musique mensurale, un @emph{incipit} permet +d'indiquer la tonalité et le tempo d'origine. Si les musiciens sont de +nos jours habitués aux barres de mesures qui présentent la structure +rythmique d'une œuvre, elles n'étaient pas en vigueur à l'époque où ces +pièces ont été composées, d'autant plus que la @qq{métrique} pouvait +changer au fil des notes. Un compromis consiste à imprimer des barres +entre les portées plutôt que sur chacune d'elles. " - doctitle = "Exemples de notation ancienne -- transcription moderne de musique mensurale" + doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique mensurale" texidoc = " When transcribing mensural music, an incipit at the beginning of the @@ -50,7 +76,7 @@ musicians are used to bar lines in order to faster recognize rhythmic patterns, bar lines were not yet invented during the period of mensural music; in fact, the meter often changed after every few notes. As a compromise, bar lines are often printed between the staves rather than -on the staves. +on the staves. " doctitle = "Ancient notation template -- modern transcription of mensural music" diff --git a/input/lsr/ancient-notation.snippet-list b/Documentation/snippets/ancient-notation.snippet-list similarity index 100% rename from input/lsr/ancient-notation.snippet-list rename to Documentation/snippets/ancient-notation.snippet-list diff --git a/Documentation/snippets/ancient-time-signatures.ly b/Documentation/snippets/ancient-time-signatures.ly new file mode 100644 index 0000000000..746ab81e68 --- /dev/null +++ b/Documentation/snippets/ancient-time-signatures.ly @@ -0,0 +1,32 @@ +%% 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 = "ancient-notation" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Las indicaciones de compás también se pueden grabar en estilo antiguo. + +" + doctitlees = "Indicaciones de compás antiguas" + + texidoc = " +Time signatures may also be engraved in an old style. + + + +" + doctitle = "Ancient time signatures" +} % begin verbatim + +{ + \override Staff.TimeSignature #'style = #'neomensural + s1 +} + diff --git a/Documentation/snippets/anglican-psalm-template.ly b/Documentation/snippets/anglican-psalm-template.ly new file mode 100644 index 0000000000..056f2d1bba --- /dev/null +++ b/Documentation/snippets/anglican-psalm-template.ly @@ -0,0 +1,170 @@ +%% 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 { +%% 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 = " +Diese Vorlage zeigt eine Art, anglikanische Psalmengesänge zu setzen. Hier +wird auch gezeigt, wie Strophen als einfacher Text unter den Noten hinzugefügt +werden können. Zwei Strophen sind in unterschiedlicher Weise notiert um mehr +Möglichkeiten darzustellen. +" + doctitlede = "Vorlage für anglikanischen Psalm" + + +%% Translation of GIT committish: 092f85605dcea69efff5ef31de4ff100346d6ef8 + + texidocfr = " +Cet exemple illustre la manière de présenter un cantique tel qu'on le +trouve dans l'église anglicane. Vous noterez comment sont ajoutés les +couplets indépendamment de la musique. Dans le but de vous montrer +plusieurs styles, comparez le code des deux couplets. + +" + doctitlefr = "Psalmodie anglicane" + + + texidoc = " +This template shows one way of setting out an Anglican psalm chant. It +also shows how the verses may be added as stand-alone text under the +music. The two verses are coded in different styles to demonstrate +more possibilities. + +" + doctitle = "Anglican psalm template" +} % begin verbatim + +SopranoMusic = \relative g' { + g1 | c2 b | a1 | \bar "||" + a1 | d2 c | c b | c1 | \bar "||" +} + +AltoMusic = \relative c' { + e1 | g2 g | f1 | + f1 | f2 e | d d | e1 | +} + +TenorMusic = \relative a { + c1 | c2 c | c1 | + d1 | g,2 g | g g | g1 | +} + +BassMusic = \relative c { + c1 | e2 e | f1 | + d1 | b2 c | g' g | c,1 | +} + +global = { + \time 2/2 +} + +dot = \markup { + \raise #0.7 \musicglyph #"dots.dot" +} + +tick = \markup { + \raise #1 \fontsize #-5 \musicglyph #"scripts.rvarcomma" +} + +% Use markup to center the chant on the page +\markup { + \fill-line { + \score { % centered + << + \new ChoirStaff << + \new Staff << + \global + \clef "treble" + \new Voice = "Soprano" << + \voiceOne + \SopranoMusic + >> + \new Voice = "Alto" << + \voiceTwo + \AltoMusic + >> + >> + \new Staff << + \clef "bass" + \global + \new Voice = "Tenor" << + \voiceOne + \TenorMusic + >> + \new Voice = "Bass" << + \voiceTwo + \BassMusic + >> + >> + >> + >> + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 2) + } + \context { + \Staff + \remove "Time_signature_engraver" + } + } + } % End score + } +} % End markup + +\markup { + \fill-line { + \column { + \left-align { + \null \null \null + \line { + \fontsize #5 O + \fontsize #3 come + let us \bold sing | unto \dot the | Lord : let + } + \line { + us heartily + \concat { re \bold joice } + in the | strength of | our + } + \line { + sal | vation. + } + \null + \line { + \hspace #2.5 8. Today if ye will hear his voice * + } + \line { + \concat { \bold hard en } + \tick not your \tick hearts : as in the pro- + } + \line { + vocation * and as in the \bold day of tempt- \tick + } + \line { + -ation \tick in the \tick wilderness. + } + } + } + } +} diff --git a/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly new file mode 100644 index 0000000000..bdc7c54219 --- /dev/null +++ b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly @@ -0,0 +1,125 @@ +%% 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 = "pitches, editorial-annotations" + +%% 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 +estilos de cabezas de nota para cada grado de la escala (según esté +establecido por la armadura o por la propiedad @code{tonic}). Esta +propiedad requiere un conjunto de símbolos, que pueden ser puramente +arbitrarios (se permiten expresiones geométricas como @code{triangle}, +triángulo, @code{cross}, aspas, y @code{xcircle}, círculo con aspas) o +basados en una antigua tradición americana de grabado (ciertos nombres +de nota latinos trambién se permiten). + +Dicho esto, para imitar antiguos cancioneros americanos, existen varios +estilos predefinidos de cabezas de nota disponibles a través de +instrucciones de abreviatura como @code{\\aikenHeads} o +@code{\\sacredHarpHeads}. + +Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, +y muestra la capacidad de transportar una melodía sin perder la +correspondencia entre las funciones armónicas y los estilos de cabezas de +nota. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Notenkopfstile basierend auf der Tonleiterstufe erstellen" + texidocde = " +Die @code{shapeNoteStyles}-(NotenFormenStile)-Eigenschaft kann benutzt +werden, um verschiedene Notenstile für jeden Schritt der Tonleiter +zu definieren (vorgegeben von der Tonart oder der @qq{tonic} +(Tonika)-Eigenschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen, +welche beliebig sein können (geometrische Ausdrücke wie @code{triangle} +(Dreieck), @code{cross} (Kreuz) und @code{xcircle} (X-Kreis) sind erlaubt) +oder basierend auf einer alten amerikanischen Notensatztradition (einige +lateinische Notenbezeichnungen sind auch erlaubt). + +Um alte amerikanische Liederbücher zu imitieren, gibt es einige +vordefinierte Notenstile wie etwa @code{\\aikenHeads} (im Stil von Aiken) +oder @code{\\sacredHarpHeads} (im Stil der Sacred Harp-Tradition). + +Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und +eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den +harmonischen Funktionen und dem Notenstil verloren geht. + +" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La propriété @code{shapeNoteStyles} permet d'affecter un profil +particulier à chaque degré de la gamme -- à partir de l'armure ou +de la propriété @code{tonic}. Ses valeurs sont constituées d'une liste +de symboles, qu'il s'agisse de formes géométriques (@code{triangle}, +@code{cross}, ou @code{xcircle}) ou basés sur la tradition des graveurs +américains (avec quelques noms de note latins). + +LilyPond dispose de deux raccourcis, @code{\\aikenHeads} et +@code{\\sacredHarpHeads}, permettant de reproduire déanciens recueils de +chansons américaines. + +L'exemple suivant montre plusieurs manières de profiler les têtes de +note, ainsi que la capacité de trnsposer tout en respectant la fonction +harmonique de chaque note dans la gamme. + +" + doctitlefr = "Profilage des notes selon leur degré dans la gamme" + + + texidoc = " +The @code{shapeNoteStyles} property can be used to define various note +head styles for each step of the scale (as set by the key signature or +the @code{tonic} property). This property requires a set of symbols, +which can be purely arbitrary (geometrical expressions such as +@code{triangle}, @code{cross}, and @code{xcircle} are allowed) or based +on old American engraving tradition (some latin note names are also +allowed). + +That said, to imitate old American song books, there are several +predefined note head styles available through shortcut commands such as +@code{\\aikenHeads} or @code{\\sacredHarpHeads}. + +This example shows different ways to obtain shape note heads, and +demonstrates the ability to transpose a melody without losing the +correspondence between harmonic functions and note head styles. + +" + doctitle = "Applying note head styles depending on the step of the scale" +} % begin verbatim + +fragment = { + \key c \major + c2 d + e2 f + g2 a + b2 c +} + +\new Staff { + \transpose c d + \relative c' { + \set shapeNoteStyles = #'#(do re mi fa + #f la ti) + \fragment + } + + \break + + \relative c' { + \set shapeNoteStyles = #'#(cross triangle fa #f + mensural xcircle diamond) + \fragment + } +} + diff --git a/Documentation/snippets/arabic-improvisation.ly b/Documentation/snippets/arabic-improvisation.ly new file mode 100644 index 0000000000..e3c7d91637 --- /dev/null +++ b/Documentation/snippets/arabic-improvisation.ly @@ -0,0 +1,56 @@ +%% 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 = "world-music" + +%% 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 +@code{\\cadenzaOn}. Podría ser necesario ajustar el estilo de +alteraciones accidentales, porque la ausencia de líneas divisorias +hará que la alteración aparezca una sola vez. He aquí un ejemplo de +cómo podría ser el comienzo de una improvisación @emph{hijaz}: + +" +doctitlees = "Improvisación de música árabe" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Bei Improvisation oder @emph{taqasim}, die zeitlich frei gespielt +werden, kann die Taktart ausgelassen werden und @code{\\cadenzaOn} +kann eingesetzt werden. Es kann nötig sein, den Versetzungszeichenstil +anzupassen, weil sonst die Versetzungszeichen nur einmal ausgegeben +werden, da keine Taktlinien gesetzt sind. Hier ein Beispiel, wie +der Beginn einer @emph{hijaz}-Improvisation aussehen könnte: + +" + + doctitlede = "Arabische Improvisation" + + texidoc = " +For improvisations or taqasim which are temporarily free, the time +signature can be omitted and @code{\\cadenzaOn} can be used. Adjusting +the accidental style might be required, since the absence of bar lines +will cause the accidental to be marked only once. Here is an example +of what could be the start of a hijaz improvisation: + +" + doctitle = "Arabic improvisation" +} % begin verbatim + +\include "arabic.ly" + +\relative sol' { + \key re \kurd + #(set-accidental-style 'forget) + \cadenzaOn + sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol +} diff --git a/Documentation/snippets/asymmetric-slurs.ly b/Documentation/snippets/asymmetric-slurs.ly new file mode 100644 index 0000000000..af401ccd8d --- /dev/null +++ b/Documentation/snippets/asymmetric-slurs.ly @@ -0,0 +1,39 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% 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. + +" + doctitlees = "Ligaduras asimétricas" + + + + texidoc = " +Slurs can be made asymmetric to match an asymmetric pattern of notes +better. + +" + doctitle = "Asymmetric slurs" +} % begin verbatim + +slurNotes = { d,8( a' d f a f' d, a) } + +\relative c' { + \stemDown + \slurUp + \slurNotes + \once \override Slur #'eccentricity = #3.0 + \slurNotes +} + diff --git a/Documentation/snippets/automatic-beam-subdivisions.ly b/Documentation/snippets/automatic-beam-subdivisions.ly new file mode 100644 index 0000000000..07e85822dc --- /dev/null +++ b/Documentation/snippets/automatic-beam-subdivisions.ly @@ -0,0 +1,56 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se pueden subdividir las barras automáticamente. Estableciendo la +propiedad @code{subdivideBeams}, las barras se subdividen en +posiciones de pulso (tal y como se especifica en @code{beatLength}). + +" + doctitlees = "Subdivisiones de barra automáticas" + + lsrtags = "rhythms" + + texidoc = " +Beams can be subdivided automatically. By setting the property +@code{subdivideBeams}, beams are subdivided at beat positions (as +specified in @code{baseMoment}). + +" + doctitle = "Automatic beam subdivisions" +} % begin verbatim + + +\new Staff { + \relative c'' { + << + { + \voiceOne + \set subdivideBeams = ##t + b32[ a g f c' b a g + b32^"subdivide beams" a g f c' b a g] + } + \new Voice { + \voiceTwo + b32_"default"[ a g f c' b a g + b32 a g f c' b a g] + } + >> + \oneVoice + \set baseMoment = #(ly:make-moment 1 8) + \set beatStructure = #'(2 2 2 2) + b32^"baseMoment 1 8"[ a g f c' b a g] + \set baseMoment = #(ly:make-moment 1 16) + \set beatStructure = #'(4 4 4 4) + b32^"baseMoment 1 16"[ a g f c' b a g] + } +} + diff --git a/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly b/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly new file mode 100644 index 0000000000..2e01a83956 --- /dev/null +++ b/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly @@ -0,0 +1,58 @@ +%% 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 = "rhythms, editorial-annotations, chords, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Las digitaciones y números de cuerda que se aplican a las notas +individuales evitan automáticamente las barras y las plicas de las +figuras, pero esto no es cierto de forma predeterminada para las +digitaciones y números de cuerda que se aplican sobre notas +individuales de acordes. El ejemplo siguiente muestra cómo se puede +sobreescribir este comportamiento predeterminado. + +" + doctitlees = "Evitar colisiones con digitaciones de acordes" + + + texidoc = " +Fingerings and string numbers applied to individual notes will +automatically avoid beams and stems, but this is not true by default +for fingerings and string numbers applied to the individual notes of +chords. The following example shows how this default behavior can be +overridden. + +" + doctitle = "Avoiding collisions with chord fingerings" +} % begin verbatim + +\relative c' { + \set fingeringOrientations = #'(up) + \set stringNumberOrientations = #'(up) + \set strokeFingerOrientations = #'(up) + + % Default behavior + r8 + 8 + 8 + 8 + + % Corrected to avoid collisions + r8 + \override Fingering #'add-stem-support = ##t + 8 + \override StringNumber #'add-stem-support = ##t + 8 + \override StrokeFinger #'add-stem-support = ##t + 8 +} + diff --git a/Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly b/Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly new file mode 100644 index 0000000000..bf66f54d28 --- /dev/null +++ b/Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly @@ -0,0 +1,90 @@ +%% 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, fretted-strings" + + texidoc = " +Here is how to print bar chords, or half-bar chords (just uncomment the +appropriate line for to select either one). + +The syntax is @code{\\bbarre #'fret_number' @{ notes @} } + + + + +" + doctitle = "Bar chords notation for Guitar ( with Text Spanner)" +} % begin verbatim + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% %%%%%%% Cut here ----- Start 'bbarred.ly' + +%% PostScript ------------------------------- +pScript= \markup { + \with-dimensions #'(0 . 0.8) #'(0 . 2.0) + \postscript #" + 0.15 setlinewidth + /Times-Roman findfont + 2.0 scalefont + setfont + (C)show %%change with B if you prefer + %(B)show %%change with C if you prefer + stroke + 0.7 -0.5 moveto + 0.7 1.7 lineto + stroke" +} +%% Span ----------------------------------- +%% Syntax: \bbarre #"text" { notes } - text = any number of box +bbarre= #(define-music-function (barre location str music) (string? ly:music?) + (let ((spanned-music + (let ((first-element #f) + (last-element #f) + (first-found? #f)) + (music-map (lambda (m) + (if (eqv? (ly:music-property m 'name) 'EventChord) + (begin + (if (not first-found?) + (begin + (set! first-found? #t) + (set! first-element m))) + (set! last-element m))) + m) + music) + (if first-found? + (begin + (set! (ly:music-property first-element 'elements) + (cons (make-music 'TextSpanEvent 'span-direction -1) + (ly:music-property first-element 'elements))) + (set! (ly:music-property last-element 'elements) + (cons (make-music 'TextSpanEvent 'span-direction 1) + (ly:music-property last-element 'elements))))) + music))) + (make-music 'SequentialMusic + 'origin location + 'elements (list #{ + \once \override TextSpanner #'font-size = #-2 + \once \override TextSpanner #'font-shape = #'upright + \once \override TextSpanner #'staff-padding = #3 + \once \override TextSpanner #'style = #'line + \once \override TextSpanner #'to-barline = ##f + \once \override TextSpanner #'bound-details = #'((left (Y . 0) (padding . 0.25) (attach-dir . -2)) (right (Y . 0) (padding . 0.25) (attach-dir . 2))) + \once \override TextSpanner #'bound-details #'right #'text = \markup { \draw-line #'( 0 . -.5) } + \once \override TextSpanner #'bound-details #'left #'text = \markup { \pScript $str } +%% uncomment this line for make full barred + % \once \override TextSpanner #'bound-details #'left #'text = \markup { "B" $str } + #} + spanned-music)))) + +%% %%%%%%% Cut here ----- End 'bbarred.ly' +%% Copy and change the last line for full barred. Rename in 'fbarred.ly' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Syntaxe: \bbarre #"text" { notes } - text = any number of box +\relative c'{ \clef "G_8" \stemUp \bbarre #"III" { 16[ c' d c d8] } } diff --git a/Documentation/snippets/beam-endings-in-score-context.ly b/Documentation/snippets/beam-endings-in-score-context.ly new file mode 100644 index 0000000000..414fac1bb7 --- /dev/null +++ b/Documentation/snippets/beam-endings-in-score-context.ly @@ -0,0 +1,82 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +modificar tanto en los niveles de @code{Staff} como de +@code{Voice}: + +" + doctitlees = "Finales de barra en el contexto Score" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Balkenenderegeln, die im @code{Score}-Kontext definiert werden, wirken +sich auf alle Systeme aus, können aber auf @code{Staff}- und +@code{Voice}-Ebene neu verändert werden: + +" + doctitlede = "Balkenenden auf Score-Ebene" + + + +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +Les règles de ligatures définies au niveau du contexte @code{Score} +s'appliqueront à toutes les portées. Il est toutefois possible de +moduler au niveau @code{Staff} ou @code{Voice}@tie{}: + +" + doctitlefr = "Définition de règles de ligature pour la partition" + + lsrtags = "rhythms" + texidoc = " +Beat structure rules specified in the @code{Score} context apply to all +staves, but can be modified at both @code{Staff} and @code{Voice} +levels: +" + doctitle = "Beam endings in Score context" +} % begin verbatim + + +\relative c'' { + \time 5/4 + % Set default beaming for all staves + \set Score.baseMoment = #(ly:make-moment 1 8) + \set Score.beatStructure = #'(3 4 3) + << + \new Staff { + c8 c c c c c c c c c + } + \new Staff { + % Modify beaming for just this staff + \set Staff.beatStructure = #'(6 4) + c8 c c c c c c c c c + } + \new Staff { + % Inherit beaming from Score context + << + { + \voiceOne + c8 c c c c c c c c c + } + % Modify beaming for this voice only + \new Voice { + \voiceTwo + \set Voice.beatStructure = #'(6 4) + a8 a a a a a a a a a + } + >> + } + >> +} diff --git a/Documentation/snippets/beam-grouping-in-7-8-time.ly b/Documentation/snippets/beam-grouping-in-7-8-time.ly new file mode 100644 index 0000000000..4fb1bbcc35 --- /dev/null +++ b/Documentation/snippets/beam-grouping-in-7-8-time.ly @@ -0,0 +1,61 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +barras automáticas se debe especificar la forma de agrupamiento. +Por ejemplo, para agrupar todas las barras en la forma 2-3-2 en el +compás de 7/8, especificamos los finales de barra en 2/8 y 5/8: + +" + doctitlees = "Agrupamiento de las barras en el compás de 7/8" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Es gibt keine automatischen Balkengruppen für 7/8-Takte. Wenn diese +Taktart benötigt wird, müssen die Gruppierungen definiert werden. Um +beispielsweise alle Noten in 2/8-3/8-2/8 aufzuteilen, müssen Balkenenden +für 2/8 und 5/8 definiert werden: + +" + doctitlede = "Balkengruppen für 7/8-Takte" + + +%% Translation of GIT committish: 548076f550a2b7fb09f1260f0e5e2bb028ad396c +texidocfr = " +Aucune règle de ligature automatique n'est disponible pour une mesure à +7/8. Il faudra donc, en pareil cas, définir vous-même les règles de +regroupement. Pour, par exemple, ligaturer sur la base de 2/8-3/8-2/8, +il faudra donc définir les terminaisons de 2/8 et 5/8 : + +" + doctitlefr = "Règle de ligature dans une mesure à 7/8" + + lsrtags = "rhythms" + texidoc = " +There is no default beat structure specified for 7/8 time, +so if automatic beams are required the structure must be specified. For +example, to group all beams 2-3-2 in 7/8 time, specify the +beat structure to be (2 3 2): +" + doctitle = "Beam grouping in 7/8 time" +} % begin verbatim + + +\relative c'' { + \time 7/8 + % rhythm 2-3-2 + a8 a a a a a a + \set Score.beatStructure = #'(2 3 2) + a8 a a a a a a +} diff --git a/Documentation/snippets/beams-across-line-breaks.ly b/Documentation/snippets/beams-across-line-breaks.ly new file mode 100644 index 0000000000..03c63ea2ca --- /dev/null +++ b/Documentation/snippets/beams-across-line-breaks.ly @@ -0,0 +1,55 @@ +%% 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 = "rhythms" + +%% 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 +comportamiento como se muestra aquí: + +" + doctitlees = "Barras que atraviesan saltos de línea" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert +werden. + +" + doctitlede = "Balken über Zeilenumbrüche" + + + +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + + texidocfr = " +Il est normalement impensable qu'un saut de ligne tombe au milieu d'une +ligature. LilyPond permet néanmoins de l'obtenir. + +" + doctitlefr = "Ligature au moment d'un saut de ligne" + + texidoc = " +Line breaks are normally forbidden when beams cross bar lines. This +behavior can be changed as shown: + +" + doctitle = "Beams across line breaks" +} % begin verbatim + +\relative c'' { + \override Beam #'breakable = ##t + c8 c[ c] c[ c] c[ c] c[ \break + c8] c[ c] c[ c] c[ c] c +} + + diff --git a/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly new file mode 100644 index 0000000000..d807e6c1e0 --- /dev/null +++ b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly @@ -0,0 +1,37 @@ +%% 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 = "editorial-annotations, text" + +%% 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 +a ningún otro objeto gráfico, puesto que las líneas del pentagrama +están en una capa inferior a la de la mayor parte de los otros +objetos. + +" + doctitlees = "Poner en blanco las líneas del pentagrama utilizando la instrucción \\whiteout" + + texidoc = " +The @code{\\whiteout} command underlays a markup with a white box. +Since staff lines are in a lower layer than most other grobs, this +white box will not overlap any other grob. + +" + doctitle = "Blanking staff lines using the \\whiteout command" +} % begin verbatim + +\layout { ragged-right = ##f } +\relative c' { + \override TextScript #'extra-offset = #'(2 . 4) + c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c +} + diff --git a/input/lsr/book-parts.ly b/Documentation/snippets/book-parts.ly similarity index 85% rename from input/lsr/book-parts.ly rename to Documentation/snippets/book-parts.ly index cdb4ea7c91..ed6865ca35 100644 --- a/input/lsr/book-parts.ly +++ b/Documentation/snippets/book-parts.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "paper-and-layout" @@ -18,7 +22,6 @@ with the book last page. #(set-default-paper-size "a6") \book { - %% book paper, which is inherited by all children bookparts \paper { ragged-last-bottom = ##t @@ -48,10 +51,10 @@ with the book last page. parttagline = "Part tagline" tagline = "Book tagline" } - + \bookpart { %% a different page breaking function may be used on each part - \paper { #(define page-breaking optimal-page-breaks) } + \paper { page-breaking = #ly:minimal-breaking } \header { subtitle = "First part" } \markup { The first book part } \markup { a page break } @@ -62,7 +65,7 @@ with the book last page. \bookpart { \header { subtitle = "Second part" } - { c' } + { c'4 } } } diff --git a/input/lsr/breaks.snippet-list b/Documentation/snippets/breaks.snippet-list similarity index 100% rename from input/lsr/breaks.snippet-list rename to Documentation/snippets/breaks.snippet-list diff --git a/input/lsr/breathing-signs.ly b/Documentation/snippets/breathing-signs.ly similarity index 79% rename from input/lsr/breathing-signs.ly rename to Documentation/snippets/breathing-signs.ly index c6ce245f7e..85c5d222fd 100644 --- a/input/lsr/breathing-signs.ly +++ b/Documentation/snippets/breathing-signs.ly @@ -1,13 +1,17 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "expressive-marks" texidoc = " Breathing signs are available in different tastes: commas (default), -ticks, vees and \"railroad tracks\" (caesura). +ticks, vees and @qq{railroad tracks} (caesura). " doctitle = "Breathing signs" @@ -22,16 +26,16 @@ ticks, vees and \"railroad tracks\" (caesura). % by default, \breathe uses the rcomma, just as if saying: % \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rcomma") << { g4 as g } \\ { es4 \breathe bes es } >> | - + % rvarcomma and lvarcomma are variations of the default rcomma and lcomma % N.B.: must use Staff context here, since we start a Voice below \override Staff.BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" } << { g4 as g } \\ { es4 \breathe bes es } >> | - + % vee \override BreathingSign #'text = \markup { \musicglyph #"scripts.upbow" } es8[ d es f g] \breathe f | - + % caesura \override BreathingSign #'text = \markup { \musicglyph #"scripts.caesura.curved" } es8[ d] \breathe es[ f g f] | diff --git a/Documentation/snippets/broken-crescendo-hairpin.ly b/Documentation/snippets/broken-crescendo-hairpin.ly new file mode 100644 index 0000000000..ee3506f198 --- /dev/null +++ b/Documentation/snippets/broken-crescendo-hairpin.ly @@ -0,0 +1,84 @@ +%% 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 = "expressive-marks" + +%% 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 +respectiva del regulador, tapándola. El rectángulo se define como +código PostScript dentro de un elemento de marcado de texto. + +Para realizar un ajuste fino de la posición y el tamaño del +elemento de marcado, se puede establecer el número que precede a +@code{setgray} en la definición de PostScript a un valor menor que +la unidad, haciendo que sea de color gris. Los dos números que +están antes de @code{scale} en el código PostScript son los +responsables del ancho y la altura del rectángulo, y los dos +números que están antes de @code{translate} cambian las +coordenadas X e Y de origen del rectángulo. + +Asegúrse de poner el regulador en una capa más baja que el +elemento de marcado de texto para trazar el rectángulo encima del +regulador. + +" + doctitlees = "Regulador interrumpido" + + texidoc = " +In order to make parts of a crescendo hairpin invisible, the following +method is used: A white rectangle is drawn on top of the respective +part of the crescendo hairpin, making it invisible. The rectangle is +defined as postscript code within a text markup. + +To fine-tune the position and size of the markup, the number preceding +@code{setgray} in the postscript definition can be set to a value less +than one, making it grey. The two numbers before @code{scale} in the +postscript code are responsible for the width and height of the +rectangle, the two numbers before @code{translate} change the x- and +y-origin of the rectangle. + + +Make sure to put the hairpin in a lower layer than the text markup to +draw the rectangle over the hairpin. + +" + doctitle = "Broken Crescendo Hairpin" +} % begin verbatim + +\relative c' { + << + { + \dynamicUp + \override DynamicLineSpanner #'staff-padding = #4 + r2 r16 c'8.\pp r4 + } + \\ + { + \override DynamicLineSpanner #'layer = #0 + des,2\mf\< ~ + \override TextScript #'layer = #2 + des16_\markup { + \postscript #" + 1.9 -8 translate + 5 4 scale + 1 setgray + 0 0 moveto + 0 1 lineto + 1 1 lineto + 1 0 lineto + 0 0 lineto + fill" + } + r8. des4 ~ des16->\sff + } + >> +} + diff --git a/Documentation/snippets/caesura-railtracks-with-fermata.ly b/Documentation/snippets/caesura-railtracks-with-fermata.ly new file mode 100644 index 0000000000..f70e7b1535 --- /dev/null +++ b/Documentation/snippets/caesura-railtracks-with-fermata.ly @@ -0,0 +1,46 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% 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 +de código presenta una combinación visualmente satisfactoria de estas +dos marcas. + +" + doctitlees = "Cesura tipo \"vías del tren\" con calderón" + + texidoc = " +A caesura is sometimes denoted by a double @qq{railtracks} breath mark +with a fermata sign positioned above. This snippet shows an optically +pleasing combination of railtracks and fermata. + +" + doctitle = "Caesura (\"railtracks\") with fermata" +} % begin verbatim + +\relative c'' { + c2. + % construct the symbol + \override BreathingSign #'text = \markup { + \line { + \musicglyph #"scripts.caesura.curved" + \translate #'(-1.75 . 1.6) + \musicglyph #"scripts.ufermata" + } + } + \breathe c4 + % set the breathe mark back to normal + \revert BreathingSign #'text + c2. \breathe c4 + \bar "|." +} diff --git a/Documentation/snippets/center-text-below-hairpin-dynamics.ly b/Documentation/snippets/center-text-below-hairpin-dynamics.ly new file mode 100644 index 0000000000..04739dc1fa --- /dev/null +++ b/Documentation/snippets/center-text-below-hairpin-dynamics.ly @@ -0,0 +1,54 @@ +%% 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 = "expressive-marks, text" + +%% 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 +también cómo modificar la manera en que se imprime normalmente un +objeto, utilizando código de Scheme. + +" + doctitlees = "Centrar texto debajo de un regulador" + + texidoc = " +This example provides a function to typeset a hairpin (de)crescendo +with some additional text below it, such as @qq{molto} or @qq{poco}. +The example also illustrates how to modify the way an object is +normally printed, using some Scheme code. + +" + doctitle = "Center text below hairpin dynamics" +} % begin verbatim + +hairpinWithCenteredText = +#(define-music-function (parser location text) (markup?) +#{ + \override Voice.Hairpin #'stencil = #(lambda (grob) + (ly:stencil-aligned-to + (ly:stencil-combine-at-edge + (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER) + Y DOWN + (ly:stencil-aligned-to (grob-interpret-markup grob $text) X CENTER)) + X LEFT)) +#}) + +hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } +hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } + +\layout { ragged-right = ##f } + +\relative c' { + \hairpinMolto + c2\< c\f + \hairpinMore + c2\< c\f +} diff --git a/Documentation/snippets/centering-markup-on-note-heads-automatically.ly b/Documentation/snippets/centering-markup-on-note-heads-automatically.ly new file mode 100644 index 0000000000..ce227d016e --- /dev/null +++ b/Documentation/snippets/centering-markup-on-note-heads-automatically.ly @@ -0,0 +1,71 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { + lsrtags = "text, tweaks-and-overrides, contexts-and-engravers" + texidoc = " +For technical reasons, text scripts attached to note heads cannot +easily be centered on a note head's width, unlike articulations. + +Instead of using trial-and-error offset tweaks, this snippet uses a +Scheme engraver to reset the horizontal parent of each markup to a +@code{NoteColumn}. This also allows text to follow note heads which have +been shifted via @code{force-hshift}. +" + doctitle = "Centering markup on note heads automatically" +} % begin verbatim + + +#(define (Text_align_engraver ctx) + (let ((scripts '()) + (note-column #f)) + + `((acknowledgers + (note-column-interface + . ,(lambda (trans grob source) + ;; cache NoteColumn in this Voice context + (set! note-column grob))) + + (text-script-interface + . ,(lambda (trans grob source) + ;; whenever a TextScript is acknowledged, + ;; add it to `scripts' list + (set! scripts (cons grob scripts))))) + + (stop-translation-timestep + . ,(lambda (trans) + ;; if any TextScript grobs exist, + ;; set NoteColumn as X-parent + (and (pair? scripts) + (for-each (lambda (script) + (set! (ly:grob-parent script X) note-column)) + scripts)) + ;; clear scripts ready for next timestep + (set! scripts '())))))) + +\layout { + \context { + \Voice + \consists #Text_align_engraver + \override TextScript #'X-offset = + #ly:self-alignment-interface::aligned-on-x-parent + \override TextScript #'self-alignment-X = #CENTER + } +} + +\new Staff << + \relative c'' { + \override NoteColumn #'force-hshift = #3 + c1-\markup { \arrow-head #Y #DOWN ##t } + } + \\ + \relative c' { + a4 a-\markup { \huge ^ } a a + } +>> diff --git a/Documentation/snippets/changing--flageolet-mark-size.ly b/Documentation/snippets/changing--flageolet-mark-size.ly new file mode 100644 index 0000000000..cf0f664d5a --- /dev/null +++ b/Documentation/snippets/changing--flageolet-mark-size.ly @@ -0,0 +1,60 @@ +%% 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 = "expressive-marks, unfretted-strings" + +%% 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. + +" + doctitlees = "Cambiar el tamaño de la marca de \\flageolet" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um den @code{\\flageolet}-Kreis kleiner zu machen, kann diese +Scheme-Funktion eingesetzt werden. + +" + doctitlede = "\\flageolet-Zeichen verkleinern" + +%% Translation of GIT committish: 5b980ee07bba23d3633de1d371fb2926f164e295 + + texidocfr = " +Il est possible de rapetisser le cercle d'un @code{\\flageolet} grâce +à une fonction Scheme. + +" + doctitlefr = "Modifier la taille d'un \\flageolet" + + + texidoc = " +To make the @code{\\flageolet} circle smaller use the following Scheme +function. + +" + doctitle = "Changing \\flageolet mark size" +} % begin verbatim + +smallFlageolet = +#(let ((m (make-articulation "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -3 + (ly:music-property m 'tweaks))) + m) + +\layout { ragged-right = ##f } + +\relative c'' { + d4^\flageolet_\markup { default size } d_\flageolet + c4^\smallFlageolet_\markup { smaller } c_\smallFlageolet +} + diff --git a/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly b/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly new file mode 100644 index 0000000000..ccda4003e3 --- /dev/null +++ b/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly @@ -0,0 +1,45 @@ +%% 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 = "simultaneous-notes, editorial-annotations, tweaks-and-overrides" + +%% 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}. + +Dentro de un acorde (entre ángulos simples @code{< >}), antes de la +nota que queremos alterar, situamos la instrucción @code{\\tweak} +seguida por @code{#'font-size} y definimos el tamaño adecuado como +@code{#-2} (una cabeza pequeña). + +" + doctitlees = "Modificar el tamaño de una nota suelta de un acorde" + + texidoc = " +Individual note heads in a chord can be modified with the +@code{\\tweak} command inside a chord, by altering the @code{font-size} +property. + + +Inside the chord (within the brackets @code{< >}), before the note to +be altered, place the @code{\\tweak} command, followed by +@code{#'font-size} and define the proper size like @code{#-2} (a tiny +note head). + + + +" + doctitle = "Changing a single note's size in a chord" +} % begin verbatim + +\relative c' { + <\tweak #'font-size #+2 c e g c \tweak #'font-size #-2 e>1^\markup { A tiny e }_\markup { A big c } +} + diff --git a/Documentation/snippets/changing-beam-knee-gap.ly b/Documentation/snippets/changing-beam-knee-gap.ly new file mode 100644 index 0000000000..fa4236a2fa --- /dev/null +++ b/Documentation/snippets/changing-beam-knee-gap.ly @@ -0,0 +1,72 @@ +%% 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 = "rhythms" + +%% 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 +fino de este comportamiento a través de la propiedad +@code{auto-knee-gap}. Se traza una barra doblada si el salto es +mayor que el valor de @code{auto-knee-gap} más el ancho del objeto +barra (que depende de la duración de las notas y de la inclinación +de la barra). De forma predeterminada @code{auto-knee-gap} está +establecido a 5.5 espacios de pentagrama. + +" + doctitlees = "Cambiar el salto de las barras en ángulo" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Balken mit Hälsen in unterschiedliche Richtungen werden automatisch +erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses +Verhalten kann durch die @code{auto-knee-gap}-Eigenschaft beeinflusst +werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer +ist als der Wert von @code{auto-knee-gap} plus der Dicke des Balkens +(was von der Notendauer und der Neigung des Balkens abhängt). Der +Standardwert von @code{auto-knee-gap} ist 5.5 Notensystemabstände. + +" + doctitlede = "Balken für weit auseinander liegende Noten ändern" + + + +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + texidocfr = " +LilyPond insère automatiquement des ligatures coudées --- certaines +hampes vers le haut, d'autres vers le bas --- lorsqu'il détecte un +intervalle important entre des têtes de notes. Ce comportement peut être +changé par l'intermédiaire de l'objet @code{auto-knee-gap} --- défini +par défaut à @samp{5,5} espace, plus la largeur et la pente de la +ligature en question. + +" + doctitlefr = "Ligature et directions de hampe inversées" + + texidoc = " +Kneed beams are inserted automatically when a large gap is detected +between the note heads. This behavior can be tuned through the +@code{auto-knee-gap} property. A kneed beam is drawn if the gap is +larger than the value of @code{auto-knee-gap} plus the width of the +beam object (which depends on the duration of the notes and the slope +of the beam). By default @code{auto-knee-gap} is set to 5.5 staff +spaces. + +" + doctitle = "Changing beam knee gap" +} % begin verbatim + +{ + f8 f''8 f8 f''8 + \override Beam #'auto-knee-gap = #6 + f8 f''8 f8 f''8 +} + diff --git a/Documentation/snippets/changing-chord-separator.ly b/Documentation/snippets/changing-chord-separator.ly new file mode 100644 index 0000000000..abe5168879 --- /dev/null +++ b/Documentation/snippets/changing-chord-separator.ly @@ -0,0 +1,43 @@ +%% 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" + +%% 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. + +" + doctitlees = "Modificación del separador de acordes" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann +beliebiger Text sein. + +" + doctitlede = "Akkordsymboltrenner verändern" + + texidoc = " +The separator between different parts of a chord name can be set to any +markup. + +" + doctitle = "Changing chord separator" +} % begin verbatim + +\chords { + c:7sus4 + \set chordNameSeparator + = \markup { \typewriter | } + c:7sus4 +} + diff --git a/Documentation/snippets/changing-form-of-multi-measure-rests.ly b/Documentation/snippets/changing-form-of-multi-measure-rests.ly new file mode 100644 index 0000000000..d70f41ee9f --- /dev/null +++ b/Documentation/snippets/changing-form-of-multi-measure-rests.ly @@ -0,0 +1,62 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% 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 +una serie de silencios de breve y longa (conocidos en alemán como +@qq{Kirchenpausen}, «silencios eclesiásticos»); en caso contrario se +muestra una barra normal. Este número predeterminado de diez se +puede cambiar sobreescribiendo la propiedad @code{expand-limit}: + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa- +und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten +wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von +zehn kann geändert werden, indem man die @code{expand-limit}-Eigenschaft +setzt: +" + doctitlede = "Die Erscheinung von Pausentakten ändern" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 +texidocfr = " +Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur +la portée des @qq{ silences d'église } -- @emph{Kirchenpause} en +allemand -- et qui sont une simple suite de rectangles. La propriété +@code{expand-limit} permet d'obtenir un silence unique : + +" + doctitlefr = "Modifier l'apparence d'un silence multi-mesures" + + texidoc = " +If there are ten or fewer measures of rests, a series of longa and +breve rests (called in German @qq{Kirchenpausen} - church rests) is +printed within the staff; otherwise a simple line is shown. This +default number of ten may be changed by overriding the +@code{expand-limit} property. + +" + doctitle = "Changing form of multi-measure rests" +} % begin verbatim + +\relative c'' { + \compressFullBarRests + R1*2 | R1*5 | R1*9 + \override MultiMeasureRest #'expand-limit = #3 + R1*2 | R1*5 | R1*9 +} diff --git a/Documentation/snippets/changing-fret-orientations.ly b/Documentation/snippets/changing-fret-orientations.ly new file mode 100644 index 0000000000..973b68da07 --- /dev/null +++ b/Documentation/snippets/changing-fret-orientations.ly @@ -0,0 +1,58 @@ +%% 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 = "fretted-strings" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Los diagramas de posiciones de acordes se pueden orientar de tres +formas. De manera predeterminada se alinena la cuerda o traste +superior en las distintas alineaciones. + + +" + + doctitlees = "Modificar la orientación de los trastes" + + texidoc = " +Fret diagrams can be oriented in three ways. By default the top string +or fret in the different orientations will be aligned. + +" + doctitle = "Changing fret orientations" +} % begin verbatim + +\include "predefined-guitar-fretboards.ly" + +<< + \chords { + c1 + c1 + c1 + } + \new FretBoards { + \chordmode { + c1 + \override FretBoard #'(fret-diagram-details orientation) = + #'landscape + c1 + \override FretBoard #'(fret-diagram-details orientation) = + #'opposing-landscape + c1 + } + } + \new Voice { + c'1 + c'1 + c' + } +>> + diff --git a/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly b/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly new file mode 100644 index 0000000000..3879e96759 --- /dev/null +++ b/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly @@ -0,0 +1,100 @@ +%% 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 = "contexts-and-engravers, midi" + +%% 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 +pentagrama mezcladas. Esto reduce al mínimo el riesgo de que se agote +el número de canales MIDI disponibles, pues existe un máximo de 16 +canales por cada puerto MIDI, y la mayoría de los dispositivos sólo +tiene un puerto. + +Sin embargo, cuando se traslada el interpretador +@code{Staff_performer} al contexto @code{Voice}, cada voz de un +pentagrama puede tener su propio canal MIDI, como se muestra en el +siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se +crean dos canales MIDI, cada uno con un @code{midiInstrument} +distinto. + +" + doctitlees = "Modificar la salida MIDI para que tenga un canal por cada voz" + +%% Translation of GIT committish: d7cf09411ee80eaf0092af0aa532de64c0c6248e + texidocfr = " +Lorsque LilyPond génère un fichier MIDI, chaque portée sera par défaut +affectée à un canal, quel que soit le nombre de voix qu'elle contient. +Ceci permet d'éviter de se retrouver à court de canaux, sachant qu'il +n'y en a que seize de disponibles. + +Le fait de déplacer le @code{Staff_performer} dans le contexte +@code{Voice} permet d'affecter à chaque voix d'une même portée un canal +MIDI spécifique. Dans l'exemple suivant, la même portée donnera lieu à +deux canaux MIDI différents, chacun étant affecté de son propre +@code{midiInstrument}. + +" + doctitlefr = "Affectation d'un canal MIDI par voix" + + texidoc = " +When outputting MIDI, the default behavior is for each staff to +represent one MIDI channel, with all the voices on a staff amalgamated. +This minimizes the risk of running out of MIDI channels, since there +are only 16 available per track. + +However, by moving the @code{Staff_performer} to the @code{Voice} +context, each voice on a staff can have its own MIDI channel, as is +demonstrated by the following example: despite being on the same staff, +two MIDI channels are created, each with a different +@code{midiInstrument}. + +" + doctitle = "Changing MIDI output to one channel per voice" +} % begin verbatim + +\score { + \new Staff << + \new Voice \relative c''' { + \set midiInstrument = #"flute" + \voiceOne + \key g \major + \time 2/2 + r2 g-"Flute" ~ + g fis ~ + fis4 g8 fis e2 ~ + e4 d8 cis d2 + } + \new Voice \relative c'' { + \set midiInstrument = #"clarinet" + \voiceTwo + b1-"Clarinet" + a2. b8 a + g2. fis8 e + fis2 r + } + >> + \layout { } + \midi { + \context { + \Staff + \remove "Staff_performer" + } + \context { + \Voice + \consists "Staff_performer" + } + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} + diff --git a/Documentation/snippets/changing-partcombine-texts.ly b/Documentation/snippets/changing-partcombine-texts.ly new file mode 100644 index 0000000000..e98099f9bb --- /dev/null +++ b/Documentation/snippets/changing-partcombine-texts.ly @@ -0,0 +1,62 @@ +%% 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 = "simultaneous-notes" + +%% 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 +y de unísono: + +" + doctitlees = "Cambiar los textos de partcombine" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn Stimmen automatisch kombiniert werden, kann der Text, der für +Solo- und Unisono-Stellen ausgegeben wird, geändert werden: + +" + doctitlede = "Partcombine-Text ändern" + +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +Lorsque vous regroupez automatiquement des parties, vous pouvez +modifier le texte qui sera affiché pour les solos et pour les parties à +l'unisson : + +" + doctitlefr = "Modification des indications de parties combinées" + + + texidoc = " +When using the automatic part combining feature, the printed text for +the solo and unison sections may be changed: + +" + doctitle = "Changing partcombine texts" +} % begin verbatim + +\new Staff << + \set Staff.soloText = #"girl" + \set Staff.soloIIText = #"boy" + \set Staff.aDueText = #"together" + \partcombine + \relative c'' { + g4 g r r + a2 g + } + \relative c'' { + r4 r a( b) + a2 g + } +>> + diff --git a/input/lsr/changing-properties-for-individual-grobs.ly b/Documentation/snippets/changing-properties-for-individual-grobs.ly similarity index 78% rename from input/lsr/changing-properties-for-individual-grobs.ly rename to Documentation/snippets/changing-properties-for-individual-grobs.ly index b58c52be20..ead69c2634 100644 --- a/input/lsr/changing-properties-for-individual-grobs.ly +++ b/Documentation/snippets/changing-properties-for-individual-grobs.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "tweaks-and-overrides" diff --git a/Documentation/snippets/changing-stanza-fonts.ly b/Documentation/snippets/changing-stanza-fonts.ly new file mode 100644 index 0000000000..ca922e73fd --- /dev/null +++ b/Documentation/snippets/changing-stanza-fonts.ly @@ -0,0 +1,36 @@ +%% 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 = "vocal-music" + + texidoc = " +Fonts can be changed independently for each stanza, including the font +used for printing the stanza number. + +" + doctitle = "Changing stanza fonts" +} % begin verbatim + +\new Voice { + \time 3/4 + g2 e4 + a2 f4 + g2. +} +\addlyrics { + \set stanza = #"1. " + Hi, my name is Bert. +} +\addlyrics { + \override StanzaNumber #'font-name = #"DejaVu" + \set stanza = #"2. " + \override LyricText #'font-family = #'typewriter + Oh, ché -- ri, je t'aime +} + diff --git a/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly b/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly new file mode 100644 index 0000000000..ec3808c4a3 --- /dev/null +++ b/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly @@ -0,0 +1,73 @@ +%% 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 = "expressive-marks" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede modificar el texto empleado para los crescendos y +decrescendos modificando las propiedades de contexto +@code{crescendoText} y @code{decrescendoText}. + +El estilo de la línea de extensión se puede cambiar modificando la +propiedad @code{'style} de @code{DynamicTextSpanner}. El valor +predeterminado es @code{'dashed-line} (línea discontinua), y entre +otros valores posibles se encuentran @code{'line} (línea), +@code{'dotted-line} (línea de puntos) y @code{'none} (nada): + +" + doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Der Text, der für Crescendo und Decrescendo gesetzt wird, kann geändert +werden, indem man die Eigenschaften @code{crescendoText} und +@code{decrescendoText} verändert. Der Stil des Streckers kann auch +geändert werden, indem die @code{'style}-Eigenschaft des +@code{DynamicTextSpanner} beeinflusst wird. Der Standardwert ist +@code{'hairpin}, andere Möglichkeiten sind @code{'line}, @code{'dashed-line} +und @code{'dotted-line}. +" + doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Le texte par défaut des crescendos et decrescendos se change en +modifiant les propriétés de contexte @code{crescendoText} et +@code{decrescendoText}. L'aspect de la ligne d'extension est fonction +de la propriété @code{'style} du @code{DynamicTextSpanner}. Sa valeur +par défaut est @code{'hairpin}, mais d'autres valeurs sont disponibles, +comme @code{'line}, @code{'dashed-line} et @code{'dotted-line}. + +" + doctitlefr = "Modifidation du texte et de l'extension de nuances textuelles" + + + texidoc = " +The text used for crescendos and decrescendos can be changed by +modifying the context properties @code{crescendoText} and +@code{decrescendoText}. The style of the spanner line can be changed by +modifying the @code{'style} property of @code{DynamicTextSpanner}. The +default value is @code{'hairpin}, and other possible values include +@code{'line}, @code{'dashed-line} and @code{'dotted-line}. + +" + doctitle = "Changing text and spanner styles for text dynamics" +} % begin verbatim + +\relative c'' { + \set crescendoText = \markup { \italic { cresc. poco } } + \set crescendoSpanner = #'text + \override DynamicTextSpanner #'style = #'dotted-line + a2\< a + a2 a + a2 a + a2 a\mf +} diff --git a/Documentation/snippets/changing-the-ambitus-gap.ly b/Documentation/snippets/changing-the-ambitus-gap.ly new file mode 100644 index 0000000000..16620f75b2 --- /dev/null +++ b/Documentation/snippets/changing-the-ambitus-gap.ly @@ -0,0 +1,65 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Es posible ajustar la separación en las indicaciones de tesitura. + +" + + doctitlees = "Modificación de la separación en las indicaciones de tesitura" + +%% Translation of GIT committish: 31097723b2b816696ad61696630a80ff17a39557 + texidocfr = "L'affichage d'un @emph{ambitus} peut s'affiner pour + répondre à vos préférences en matière d'esthétique. +" + + doctitlefr = "Réglage de l'affichage d'un ambitus" + + + lsrtags = "pitches" + texidoc = "It is possible to change the default gap setting for +ambitus." + + doctitle = "Changing the ambitus gap" +} % begin verbatim + + + +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\new Staff { + \time 2/4 + % Default setting + c'4 g'' +} + +\new Staff { + \time 2/4 + \override AmbitusLine #'gap = #0 + c'4 g'' +} + +\new Staff { + \time 2/4 + \override AmbitusLine #'gap = #1 + c'4 g'' +} + +\new Staff { + \time 2/4 + \override AmbitusLine #'gap = #1.5 + c'4 g'' +} diff --git a/Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly b/Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly new file mode 100644 index 0000000000..dd0eee12b1 --- /dev/null +++ b/Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly @@ -0,0 +1,39 @@ +%% 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 = "expressive-marks, editorial-annotations" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede cambiar el aspecto de las ligaduras de expresión de +continuas a punteadas o intermitentes. + +" + doctitlees = "Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente" + + texidoc = " +The appearance of slurs may be changed from solid to dotted or dashed. + +" + doctitle = "Changing the appearance of a slur from solid to dotted or dashed" +} % begin verbatim + +\relative c' { + c4( d e c) + \slurDotted + c4( d e c) + \slurSolid + c4( d e c) + \slurDashed + c4( d e c) + \slurSolid + c4( d e c) +} + + diff --git a/Documentation/snippets/changing-the-breath-mark-symbol.ly b/Documentation/snippets/changing-the-breath-mark-symbol.ly new file mode 100644 index 0000000000..6347d46bd7 --- /dev/null +++ b/Documentation/snippets/changing-the-breath-mark-symbol.ly @@ -0,0 +1,55 @@ +%% 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 = "expressive-marks" + +%% 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 +@code{BreathingSign}, con cualquier otro texto de marcado. + +" + doctitlees = "Cambiar el símbolo de la marca de respiración" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das Schriftzeichen für das Atemzeichen kann verändert werden, indem +die Text-Eigenschaft des @code{BreathingSign}-Layoutobjekts mit einer +beliebigen Textbeschriftung definiert wird. + +" + doctitlede = "Das Atemzeichen-Symbol verändern" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +On peut choisir le glyphe imprimé par cette commande, en modifiant la +propriété @code{text} de l'objet @code{BreathingSign}, pour lui affecter +n'importe quelle indication textuelle. + +" + doctitlefr = "Modification de l'indicateur de respiration" + + + texidoc = " +The glyph of the breath mark can be tuned by overriding the text +property of the @code{BreathingSign} layout object with any markup +text. + +" + doctitle = "Changing the breath mark symbol" +} % begin verbatim + +\relative c'' { + c2 + \override BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" } + \breathe + d2 +} diff --git a/Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly b/Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly new file mode 100644 index 0000000000..5e6cb2ba3f --- /dev/null +++ b/Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly @@ -0,0 +1,63 @@ +%% 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" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +La nomenclatura inglesa (predeterminada) para los acordes del cifrado +americano se puede cambiar por la alemana (@code{\\germanChords} +sustituye B y Bes por H y B) o por la semi-alemana +(@code{\\semiGermanChords} sustituye B y Bes por H y Bb). + +" + doctitlees = "Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana" + + texidoc = " +The english naming of chords (default) can be changed to german +(@code{\\germanChords} replaces B and Bes with H and B) or semi-german +(@code{\\semiGermanChords} replaces B and Bes with H and Bb). + + + + +" + doctitle = "Changing the chord names to German or semi-German notation" +} % begin verbatim + +music = \chordmode { + c1/c | cis/cis + b1/b | bis/bis | bes/bes +} + +%% The following is only here to print the names of the +%% chords styles; it can be removed if you do not need to +%% print them. + +\layout { + \context { + \ChordNames + \consists "Instrument_name_engraver" + } +} + +<< + \new ChordNames { + \set ChordNames.instrumentName = #"default" + \music + } + \new ChordNames { + \set ChordNames.instrumentName = #"german" + \germanChords \music } + \new ChordNames { + \set ChordNames.instrumentName = #"semi-german" + \semiGermanChords \music } + \context Voice { \music } +>> + diff --git a/Documentation/snippets/changing-the-default-text-font-family.ly b/Documentation/snippets/changing-the-default-text-font-family.ly new file mode 100644 index 0000000000..bbd0565c97 --- /dev/null +++ b/Documentation/snippets/changing-the-default-text-font-family.ly @@ -0,0 +1,56 @@ +%% 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 = "text, tweaks-and-overrides" + + texidoc = " +The default font families for text can be overridden with +@code{make-pango-font-tree}. + +" + doctitle = "Changing the default text font family" +} % begin verbatim + +\paper { + % change for other default global staff size. + myStaffSize = #20 + %{ + run + lilypond -dshow-available-fonts blabla + to show all fonts available in the process log. + %} + + #(define fonts + (make-pango-font-tree "Times New Roman" + "Nimbus Sans" + "Luxi Mono" +;; "Helvetica" +;; "Courier" + (/ myStaffSize 20))) +} + +\relative c'' { + c4^\markup { + roman: foo \bold bla \italic bar \italic \bold baz + } + c'4_\markup { + \override #'(font-family . sans) + { + sans: foo \bold bla \italic bar \italic \bold baz + } + } + c'2^\markup { + \override #'(font-family . typewriter) + { + mono: foo \bold bla \italic bar \italic \bold baz + } + } +} + + diff --git a/Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly b/Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly new file mode 100644 index 0000000000..3d71b5253b --- /dev/null +++ b/Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly @@ -0,0 +1,42 @@ +%% 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 = "pitches" + + texidoc = " +@code{staffLineLayoutFunction} is used to change the position of notes. +This snippet shows setting its value to @code{ly:pitch-semitones} in +order to produce a chromatic scale with the distance between each space +and line of the stave equal to one semitone. + +" + doctitle = "Changing the interval of lines on the stave" +} % begin verbatim + +scale = \relative c' { + a4 ais b c + cis4 d dis e + f4 fis g gis + a1 +} + +\new Staff \with { + \remove "Accidental_engraver" + staffLineLayoutFunction = #ly:pitch-semitones +} +{ + << + \scale + \context NoteNames { + \set printOctaveNames = ##f + \scale + } + >> +} + diff --git a/Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly b/Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly new file mode 100644 index 0000000000..df8bd3721f --- /dev/null +++ b/Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly @@ -0,0 +1,44 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Este código muestra cómo cambiar la cantidad de puntillos de una nota. + +" + + doctitlees = "Modificar el número de puntillos de una nota" + + +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + + texidocfr = "Voici comment modifier le nombre de points d'augmentation +affectés à une note en particulier. + +" + doctitlefr = "Spécification du nombre de points d'augmentation d'une note" + + + lsrtags = "rhythms,expressive-marks" + texidoc = "This code demonstrates how to change the number of +augmentation dots on a single note." + doctitle = "Changing the number of augmentation dots per note" +} % begin verbatim + + +\relative c' { + c4.. a16 r2 | + \override Dots #'dot-count = #4 + c4.. a16 r2 | + \override Dots #'dot-count = #0 + c4.. a16 r2 | + \revert Dots #'dot-count + c4.. a16 r2 | +} diff --git a/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly b/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly new file mode 100644 index 0000000000..ce4d1cec62 --- /dev/null +++ b/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly @@ -0,0 +1,43 @@ +%% 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 = "staff-notation" + + texidoc = " +The number of lines in a staff may changed by overriding the +@code{StaffSymbol} property @code{line-count}. + + + + +" + doctitle = "Changing the number of lines in a staff" +} % begin verbatim + +upper = \relative c'' { + c4 d e f +} + +lower = \relative c { + \clef bass + c4 b a g +} + +\score { + \context PianoStaff << + \new Staff { + \upper + } + \new Staff { + \override Staff.StaffSymbol #'line-count = #4 + \lower + } + >> +} + diff --git a/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly b/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly new file mode 100644 index 0000000000..f9faa40630 --- /dev/null +++ b/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly @@ -0,0 +1,50 @@ +%% 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" + +%% 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 +@code{figuredBassAlterationDirection} y +@code{figuredBassPlusDirection}. + +" + doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen, +je nach den Einstellungen der @code{figuredBassAlterationDirection} und +@code{figuredBassPlusDirection}-Eigenschaften. + +" + doctitlede = "Positionen von Generalbass-Alterationszeichen verändern" + + texidoc = " +Accidentals and plus signs can appear before or after the numbers, +depending on the @code{figuredBassAlterationDirection} and +@code{figuredBassPlusDirection} properties. + +" + doctitle = "Changing the positions of figured bass alterations" +} % begin verbatim + +\figures { + <6\+> <5+> <6 4-> r + \set figuredBassAlterationDirection = #RIGHT + <6\+> <5+> <6 4-> r + \set figuredBassPlusDirection = #RIGHT + <6\+> <5+> <6 4-> r + \set figuredBassAlterationDirection = #LEFT + <6\+> <5+> <6 4-> r +} + diff --git a/Documentation/snippets/changing-the-size-of-woodwind-diagrams.ly b/Documentation/snippets/changing-the-size-of-woodwind-diagrams.ly new file mode 100644 index 0000000000..14a5bfe01a --- /dev/null +++ b/Documentation/snippets/changing-the-size-of-woodwind-diagrams.ly @@ -0,0 +1,70 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Se puede cambiar el tamaño y grosor de las líneas de los diagramas de +posiciones para instrumentos de viento madera. + +" + + doctitlees = "Modificar el tamaño de los diagramas de viento madera" + +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde=" +Die Größe und Dicke der Holzbläserdiagramme kann geändert werden. +" + + doctitlede = "Größe von Holzbläserdiagrammen ändern" + + +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +La taille et l'épaisseur des diagrammes de doigté pour bois est modifiable +à souhait. + +" + + doctitlefr = "Modification de la taille d'un diagramme pour bois" + + + lsrtags="winds" + texidoc=" +The size and thickness of woodwind diagrams can be changed. +" + + doctitle = "Changing the size of woodwind diagrams" +} % begin verbatim + + +\relative c'' { + \textLengthOn + c1^\markup + \woodwind-diagram + #'piccolo + #'() + + c^\markup + \override #'(size . 1.5) { + \woodwind-diagram + #'piccolo + #'() + } + c^\markup + \override #'(thickness . 0.15) { + \woodwind-diagram + #'piccolo + #'() + } +} diff --git a/Documentation/snippets/changing-the-staff-size.ly b/Documentation/snippets/changing-the-staff-size.ly new file mode 100644 index 0000000000..4ec923b18b --- /dev/null +++ b/Documentation/snippets/changing-the-staff-size.ly @@ -0,0 +1,37 @@ +%% 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 = "staff-notation, tweaks-and-overrides, paper-and-layout" + + texidoc = " +Though the simplest way to resize staves is to use +@code{#(set-global-staff-size xx)}, an individual staff's size can be +changed by scaling the properties @code{'staff-space} and +@code{fontSize}. + +" + doctitle = "Changing the staff size" +} % begin verbatim + +<< + \new Staff { + \relative c'' { + \dynamicDown + c8\ff c c c c c c c + } + } + \new Staff \with { + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + } { + \clef bass + c8 c c c c\f c c c + } +>> + diff --git a/Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly b/Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly new file mode 100644 index 0000000000..6b87cacdb3 --- /dev/null +++ b/Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly @@ -0,0 +1,61 @@ +%% 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 = "rhythms, tweaks-and-overrides, midi" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Para cambiar el tempo en la salida MIDI sin +imprimir nada, hacemos invisible la indicación metronómica: + +" + + doctitlees = "Cambiar el tempo sin indicación metronómica" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den +Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden: + +" + + doctitlede = "Das Tempo ohne Metronom-Angabe verändern" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans +pour autant l'imprimer. Il suffit alors de le rendre invisible aux +interprètes. + +" + doctitlefr = "Changement de tempo sans indication sur la partition" + + + texidoc = " +To change the tempo in MIDI output without printing anything, make the +metronome mark invisible. + +" + doctitle = "Changing the tempo without a metronome mark" +} % begin verbatim + +\score { + \new Staff \relative c' { + \tempo 4 = 160 + c4 e g b + c4 b d c + \set Score.tempoHideNote = ##t + \tempo 4 = 96 + d,4 fis a cis + d4 cis e d + } + \layout { } + \midi { } +} diff --git a/Documentation/snippets/changing-the-text-for-sustain-markings.ly b/Documentation/snippets/changing-the-text-for-sustain-markings.ly new file mode 100644 index 0000000000..c24ffc2719 --- /dev/null +++ b/Documentation/snippets/changing-the-text-for-sustain-markings.ly @@ -0,0 +1,47 @@ +%% 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 = "keyboards, tweaks-and-overrides" + +%% 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 +únicas cadenas válidas son las que están en la lista de glifos de +pedal: los valores que aparecen en este fragmento de código son una +relación exhaustiva. + +" + doctitlees = "Modificar el texto de las indicaciones de pedal" + + + + texidoc = " +@code{Staff.pedalSustainStrings} can be used to set the text used for +pedal down and up. Note that the only valid strings are those found in +the list of pedal glyphs - the values used this snippet constitute an +exhaustive list. + +" + doctitle = "Changing the text for sustain markings" +} % begin verbatim + +sustainNotes = { c4\sustainOn d e\sustainOff\sustainOn f\sustainOff } + +\relative c' { + \sustainNotes + \set Staff.pedalSustainStrings = #'("P" "P-" "-") + \sustainNotes + \set Staff.pedalSustainStrings = #'("d" "de" "e") + \sustainNotes + \set Staff.pedalSustainStrings = #'("M" "M-" "-") + \sustainNotes + \set Staff.pedalSustainStrings = #'("Ped" "*Ped" "*") + \sustainNotes +} diff --git a/Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly b/Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly new file mode 100644 index 0000000000..5bf944273f --- /dev/null +++ b/Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly @@ -0,0 +1,68 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +La instrucción @code{\\time} establece las propiedades +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y +@code{measureLength} en el contexto @code{Timing}, que normalmente +tiene el alias @code{Score}. La modificación del valor de +@code{timeSignatureFraction} hace que se imprima la nueva indicación +de compás sin que cambie ninguna de las demás propiedades: + +" + doctitlees = "Cambio de compás sin afectar al barrado" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Der @code{\\time}-Befehl verändert die Eigenschaften +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +und @code{measureLength} im @code{Timing}-Kontext, welcher normalerweise +gleichbedeutend mit @code{Score} ist. Wenn der Wert von +@code{timeSignatureFraction} verändert wird, wird die neue +Taktart ausgegeben, ohne die anderen Eigenschaften zu beeinflussen: + +" + doctitlede = "Die Taktart verändern ohne die Bebalkung zu beeinflussen" + + + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La commande @code{\\time} gère les propriétés +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +et @code{measureLength} dans le contexte @code{Timing}, normalement +rattaché à @code{Score}. Le fait de modifier la valeur de +@code{timeSignatureFraction} aura pour effet de changer l'apparence du +symbole affiché sans pour autant affecter les autres propriétés de la +métrique : + +" + doctitlefr = "Changement de métrique sans affecter les règles de ligature" + + lsrtags = "rhythms" + texidoc = " +The @code{\\time} command sets the properties +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +and @code{measureLength} in the @code{Timing} context, which is +normally aliased to @code{Score}. Changing the value of +@code{timeSignatureFraction} causes the new time signature symbol to be +printed without changing any of the other properties: + +" + doctitle = "Changing the time signature without affecting the beaming" +} % begin verbatim + + +\markup { + This snippet is deprecated as of 2.13.5 and will be removed in 2.14 +} diff --git a/Documentation/snippets/changing-the-tuplet-number.ly b/Documentation/snippets/changing-the-tuplet-number.ly new file mode 100644 index 0000000000..3dd879bef8 --- /dev/null +++ b/Documentation/snippets/changing-the-tuplet-number.ly @@ -0,0 +1,66 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Cambiar el número del grupo especial" + texidoces = " + +De forma predeterminada sólo se imprime el numerador del grupo +especial sobre el corchete de grupo, es decir, el denominador del +argumento de la instrucción @code{\\times}. De forma alternativa, se +puede imprimr un quebrado en la forma numerador:denominador del número +del grupo, o eliminar el número. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer +dargestellt, wie er dem @code{\\times}-Befehl übergeben wird. +Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl +vollständig unterdrücken. + +" + doctitlede = "Die Zahl der N-tole verändern" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +L'apparence du chiffre est déterminée par la propriété @code{text} dans +@code{TupletNumber}. La valeur par défaut imprime seulement le +dénominateur, mais si elle est définie par la fonction +@code{tuplet-number::calc-fraction-text}, la fraction entière +@var{num}:@var{den} sera imprimée à la place. + +" + doctitlefr = "Modifier l'apparence du chiffre de nolet" + + texidoc = " +By default, only the numerator of the tuplet number is printed over the +tuplet bracket, i.e., the denominator of the argument to the +@code{\\times} command. Alternatively, num:den of the tuplet number may +be printed, or the tuplet number may be suppressed altogether. + +" + doctitle = "Changing the tuplet number" +} % begin verbatim + +\relative c'' { + \times 2/3 { c8 c c } + \times 2/3 { c8 c c } + \override TupletNumber #'text = #tuplet-number::calc-fraction-text + \times 2/3 { c8 c c } + \override TupletNumber #'stencil = ##f + \times 2/3 { c8 c c } +} + diff --git a/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly b/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly similarity index 85% rename from input/lsr/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly rename to Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly index 2e2eb677a5..ff0d71f297 100644 --- a/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly +++ b/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "rhythms, contexts-and-engravers" +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c texidoces = " La propiedad @code{measureLength}, junto con @code{measurePosition}, determina cuándo es necesario dibujar una diff --git a/Documentation/snippets/chant-or-psalms-notation.ly b/Documentation/snippets/chant-or-psalms-notation.ly new file mode 100644 index 0000000000..b740e3ba37 --- /dev/null +++ b/Documentation/snippets/chant-or-psalms-notation.ly @@ -0,0 +1,63 @@ +%% 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 = "rhythms, vocal-music, ancient-notation, contexts-and-engravers" + +%% 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. + +" + doctitlees = "Notación de responsos o salmos" + +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde = " +Diese Form der Notation wird benutzt für die Notation von Psalmen, in denen +die Strophen nicht die gleiche Länge haben. + +" + doctitlede = "Psalmennotation" + + +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +Ce style de notation permet d'indiquer la mélodie d'une psalmodie +lorsque les strophes sont de longueur inégale. + +" + doctitlefr = "Notation pour psalmodie" + + + texidoc = " +This form of notation is used for the chant of the Psalms, where verses +aren't always the same length. + +" + doctitle = "Chant or psalms notation" +} % begin verbatim + +stemOn = { \revert Staff.Stem #'transparent } +stemOff = { \override Staff.Stem #'transparent = ##t } + +\score { + \new Staff \with { \remove "Time_signature_engraver" } + { + \key g \minor + \cadenzaOn + \stemOff a'\breve bes'4 g'4 + \stemOn a'2 \bar "||" + \stemOff a'\breve g'4 a'4 + \stemOn f'2 \bar "||" + \stemOff a'\breve^\markup { \italic flexe } + \stemOn g'2 \bar "||" + } +} + diff --git a/Documentation/snippets/chord-glissando-in-tablature.ly b/Documentation/snippets/chord-glissando-in-tablature.ly new file mode 100644 index 0000000000..e8d1d2bbee --- /dev/null +++ b/Documentation/snippets/chord-glissando-in-tablature.ly @@ -0,0 +1,60 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Los deslizamientos para acordes se pueden indicar tanto en el contexto +Staff como en TabStaff. Los números de cuerda son necesarios para +TabStaff porque los cálculos de cuerda automáticos son diferentes para +los acordes y para notas sueltas, y @code{\\chordGlissando} traza +líneas entre las notas individuales. + +" + + doctitlees = "Glissando de acordes en tablatura" +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Gleiten von Akkorden kann sowohl im normalen Notensystem als auch in einer +Tabulatur notiert werden. Saitennummern werden für Tabulaturen +benötigt, weil die automatische Saitenberechnung unterschiedlich für +Akkorde und einzelne Noten funktioniert und +@code{\\chordGlissando} zieht Linien zwischen einzelnen Noten. +" + doctitlede = "Akkordglissando in Tabulaturen" + + + lsrtags = "fretted-strings" + texidoc = " +Slides for chords can be indicated in both Staff and TabStaff. +String numbers are necessary for TabStaff because automatic +string calculations are different for chords and for single notes, +and @code{\\chordGlissando} draws lines between single notes. +" + doctitle = "Chord glissando in tablature" +} % begin verbatim + + +myMusic = \relative c' { + \chordGlissando + 8 +} + +\score { + << + \new Staff { + \clef "treble_8" + \myMusic + } + \new TabStaff { + \myMusic + } + >> +} diff --git a/Documentation/snippets/chord-name-exceptions.ly b/Documentation/snippets/chord-name-exceptions.ly new file mode 100644 index 0000000000..9a32fbdc7e --- /dev/null +++ b/Documentation/snippets/chord-name-exceptions.ly @@ -0,0 +1,63 @@ +%% 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" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede usar la propiedad @code{chordNameExceptions} para +almacenar una lista de notaciones espaciales para acordes +específicos. + +" + doctitlees = "Excepciones para los nombres de acorde" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Eigenschaft @code{chordNameExceptions} kann benutzt werden, um eine +Liste an besonderen Notationen für bestimmte Akkorde zu speichern. + +" + doctitlede = "Akkordsymbolausnahmen" + + texidoc = " +The property @code{chordNameExceptions} can be used to store a list of +special notations for specific chords. + +" + doctitle = "Chord name exceptions" +} % begin verbatim + +% modify maj9 and 6(add9) +% Exception music is chords with markups +chExceptionMusic = { + 1-\markup { \super "maj9" } + 1-\markup { \super "6(add9)" } +} + +% Convert music to list and prepend to existing exceptions. +chExceptions = #( append + ( sequential-music-to-chord-exceptions chExceptionMusic #t) + ignatzekExceptions) + +theMusic = \chordmode { + g1:maj9 g1:6.9 + \set chordNameExceptions = #chExceptions + g1:maj9 g1:6.9 +} + +\layout { + ragged-right = ##t +} + +<< \context ChordNames \theMusic + \context Voice \theMusic +>> + diff --git a/Documentation/snippets/chord-name-major7.ly b/Documentation/snippets/chord-name-major7.ly new file mode 100644 index 0000000000..0ffcc288e5 --- /dev/null +++ b/Documentation/snippets/chord-name-major7.ly @@ -0,0 +1,43 @@ +%% 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" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +La presentación del acorde de séptima mayor se +puede ajustar mediante majorSevenSymbol. + +" + doctitlees = "Nombre de acorde maj7" + + +%% Translation of GIT committish: 134d9cb2e14ae624aec6fa2dd1630e284807dc42 + texidocde = " +Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert werden. + +" + + doctitlede = "Akkordbezeichnung maj7" + + + + texidoc = " +The layout of the major 7 can be tuned with @code{majorSevenSymbol}. + +" + doctitle = "chord name major7" +} % begin verbatim + +\chords { + c:7+ + \set majorSevenSymbol = \markup { j7 } + c:7+ +} + diff --git a/Documentation/snippets/chordchanges-for-fretboards.ly b/Documentation/snippets/chordchanges-for-fretboards.ly new file mode 100644 index 0000000000..0665939afb --- /dev/null +++ b/Documentation/snippets/chordchanges-for-fretboards.ly @@ -0,0 +1,50 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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. + +" + + doctitlees = "Cambios de acorde de posiciones de trastes" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Bunddiagramme können definiert werden, sodass sie nur angezeigt werden, +wenn der Akkord sich ändert oder eine neue Zeile anfängt. + +" + + doctitlede = "Akkordänderungen für Bunddiagramme" + + lsrtags = "fretted-strings" + texidoc = "FretBoards can be set to display only when the chord changes +or at the beginning of a new line." + doctitle = "chordChanges for FretBoards" +} % begin verbatim + + +\include "predefined-guitar-fretboards.ly" + +myChords = \chordmode { + c1 c1 \break + \set chordChanges = ##t + c1 c1 \break + c1 c1 \break +} + +<< + \new ChordNames { \myChords } + \new FretBoards { \myChords } + \new Staff { \myChords } +>> diff --git a/Documentation/snippets/chords-headword.ly b/Documentation/snippets/chords-headword.ly new file mode 100644 index 0000000000..fea2567b95 --- /dev/null +++ b/Documentation/snippets/chords-headword.ly @@ -0,0 +1,109 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +#(set-global-staff-size 15) +\paper { + ragged-right = ##f + line-width = 15\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + + +theChords = \chordmode { + \time 2/2 + f1 | c2 f2 | f1 | c2 f2| %\break + f2 bes2 | f1 | c2:7 f | c1 | \break +} + +verseOne = \lyricmode { + \set stanza = #"1." + Fair is the sun - shine, + Fair - er the moon - light + And all the stars __ _ in heav'n a -- bove; +} + +verseTwo = \lyricmode { + \set stanza = #"2." + Fair are the mead - ows, + Fair - er the wood - land, + Robed in the flow -- ers of bloom -- ing spring; +} + +Soprano = { + \time 2/2 + \key f \major + \stemUp + f'2 f'4 f' | g'4 e' f'2 | a'4. a'8 a'4 a' | bes'4 g' a'2 | + c''2 f''4 d'' | c''2 bes'4 a' | bes'2 a' | g'1 | +} + +Alto = { + \key f \major + c'2 c'4 c' | d'4 c' c'2 | f'4. f'8 f'4 fis' | g'4 e' f'2 | + f'2 f'4 f' | f'2 g'4 f' | e'2 f' | e'1 | +} + +Tenor = { + \key f \major + \stemDown + a2 a4 a | bes4 g a2 | c'4. c'8 d'4 d' | d'4 c' c'2 | + a2 d'4 bes | a2 c'4 c' | c'2 c' | c'1 | +} + +Bass = { + \key f \major + f2 f4 f | bes,4 c f2 | f4. e8 d4 c | bes,4 c f2 | + f2 bes,4 d | f2 e4 f | g2 f | c1 | +} + + +\score { + << + \new ChordNames { \theChords } + \context Staff = upper { + \context Voice = sop { + << + \Soprano + \Alto + >> + } + } + \context Lyrics = "LyrOne" \lyricsto "sop" { \verseOne } + \context Lyrics = "LyrTwo" \lyricsto "sop" { \verseTwo } + \context Staff = lower { + \new Voice { + \clef bass + #(set-accidental-style 'modern-cautionary) + << + \Tenor + \Bass + >> + } + } + >> + + \layout { + indent = 0 + \context { + \Score + \remove "Bar_number_engraver" + } + \context { + \Voice + \override StanzaNumber #'padding = #1.8 + } + } +} +\paper { } diff --git a/input/lsr/chords-intro.itely b/Documentation/snippets/chords-intro.itely similarity index 100% rename from input/lsr/chords-intro.itely rename to Documentation/snippets/chords-intro.itely diff --git a/input/lsr/chords.snippet-list b/Documentation/snippets/chords.snippet-list similarity index 87% rename from input/lsr/chords.snippet-list rename to Documentation/snippets/chords.snippet-list index 5e3faa9387..0749eb969e 100644 --- a/input/lsr/chords.snippet-list +++ b/Documentation/snippets/chords.snippet-list @@ -1,6 +1,7 @@ adding-a-figured-bass-above-or-below-the-notes.ly adding-bar-lines-to-chordnames-context.ly avoiding-collisions-with-chord-fingerings.ly +bar-chords-notation-for-guitar--with-text-spanner.ly changing-chord-separator.ly changing-the-chord-names-to-german-or-semi-german-notation.ly changing-the-positions-of-figured-bass-alterations.ly @@ -15,4 +16,5 @@ simple-lead-sheet.ly single-staff-template-with-notes,-lyrics,-and-chords.ly single-staff-template-with-notes,-lyrics,-chords-and-frets.ly single-staff-template-with-notes-and-chords.ly +vertically-centering-paired-figured-bass-extenders.ly volta-below-chords.ly diff --git a/Documentation/snippets/clefs-can-be-transposed-by-arbitrary-amounts.ly b/Documentation/snippets/clefs-can-be-transposed-by-arbitrary-amounts.ly new file mode 100644 index 0000000000..fbaf03dfa1 --- /dev/null +++ b/Documentation/snippets/clefs-can-be-transposed-by-arbitrary-amounts.ly @@ -0,0 +1,29 @@ +%% 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 = "pitches" + + texidoc = " +Clefs can be transposed by arbitrary amounts, not just by octaves. + +" + doctitle = "Clefs can be transposed by arbitrary amounts" +} % begin verbatim + +\relative c' { + \clef treble + c4 c c c + \clef "treble_8" + c4 c c c + \clef "treble_5" + c4 c c c + \clef "treble^3" + c4 c c c +} + diff --git a/Documentation/snippets/clip-systems.ly b/Documentation/snippets/clip-systems.ly new file mode 100644 index 0000000000..35134c6dc5 --- /dev/null +++ b/Documentation/snippets/clip-systems.ly @@ -0,0 +1,123 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Este código muestra cómo recortar (extraer) fragmentos a partir de una +partitura completa. + +Este archivo tiene que procesarse de forma separada con la opción +@code{-dclip-systems}; la página de fragmentos de código podría no +mostrar el resultado adecuadamente. + +La salida consiste en archivos con los nombres +@samp{base-from-inicio-to-final[-número].eps}. + + +Si se incluyen los comienzos y finales de los sistemas, incluyen las +dimensiones del grob del sistema, por ejemplo los nombres de +instrumento. + + +Las notas de adorno en el punto final de la región no se incluyen. + + +Las regiones pueden abarcar varios sistemas. En este caso, se generan +varios archivos EPS. + +" + doctitlees = "Recorte de sistemas" + + lsrtags = "paper-and-layout" + + texidoc = " +This code shows how to clip (extract) snippets from a full score. + +This file needs to be run separately with @code{-dclip-systems}; the +snippets page may not adequately show the results. + +The result will be files named +@samp{base-from-start-to-end[-count].eps}. + + +If system starts and ends are included, they include extents of the +System grob, e.g., instrument names. + + +Grace notes at the end point of the region are not included. + + +Regions can span multiple systems. In this case, multiple EPS files +are generated. + +" + doctitle = "Clip systems" +} % begin verbatim + + +#(ly:set-option 'clip-systems) +#(define output-suffix "1") + +origScore = \score { + \relative c' { + \set Staff.instrumentName = #"bla" + c1 + d1 + \grace c16 e1 + \key d \major + f1 \break + \clef bass + g,1 + fis1 + } +} + +\book { + \score { + \origScore + \layout { + % Each clip-region is a (START . END) pair + % where both are rhythmic-locations. + + % (make-rhythmic-locations BAR-NUMBER NUM DEN) + % means NUM/DEN whole-notes into bar numbered BAR-NUMBER + + clip-regions = #(list + (cons + (make-rhythmic-location 2 0 1) + (make-rhythmic-location 4 0 1)) + + (cons + (make-rhythmic-location 0 0 1) + (make-rhythmic-location 4 0 1)) + + (cons + (make-rhythmic-location 0 0 1) + (make-rhythmic-location 6 0 1)) + ) + } + } +} + +#(ly:set-option 'clip-systems #f) +#(define output-suffix #f) + +\book { + \score { \origScore } + \markup { \bold \fontsize #6 clips } + \score { + \lyrics { + \markup { from-2.0.1-to-4.0.1-clip.eps } + \markup { + \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" + (ly:parser-output-name parser)) } + } + } +} diff --git a/Documentation/snippets/clusters.ly b/Documentation/snippets/clusters.ly new file mode 100644 index 0000000000..fc7f5e2206 --- /dev/null +++ b/Documentation/snippets/clusters.ly @@ -0,0 +1,38 @@ +%% 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 = "simultaneous-notes, chords, keyboards" + +%% 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. + +" + doctitlees = "Clusters («racimos»)" + + texidoc = " +Clusters are a device to denote that a complete range of notes is to be +played. + +" + doctitle = "Clusters" +} % begin verbatim + +fragment = \relative c' { + c4 f 4 + 8 a4 c2 4 + e2 c +} + +<< + \new Staff \fragment + \new Staff \makeClusters \fragment +>> + diff --git a/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly b/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly new file mode 100644 index 0000000000..70bdd668f3 --- /dev/null +++ b/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly @@ -0,0 +1,62 @@ +%% 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 = "pitches, editorial-annotations" + + texidoc = " +It is possible to color note heads depending on their pitch and/or +their names: the function used in this example even makes it possible +to distinguish enharmonics. + +" + doctitle = "Coloring notes depending on their pitch" +} % begin verbatim + +%Association list of pitches to colors. +#(define color-mapping + (list + (cons (ly:make-pitch 0 0 NATURAL) (x11-color 'red)) + (cons (ly:make-pitch 0 0 SHARP) (x11-color 'green)) + (cons (ly:make-pitch 0 1 FLAT) (x11-color 'green)) + (cons (ly:make-pitch 0 2 NATURAL) (x11-color 'red)) + (cons (ly:make-pitch 0 2 SHARP) (x11-color 'green)) + (cons (ly:make-pitch 0 3 FLAT) (x11-color 'red)) + (cons (ly:make-pitch 0 3 NATURAL) (x11-color 'green)) + (cons (ly:make-pitch 0 4 SHARP) (x11-color 'red)) + (cons (ly:make-pitch 0 5 NATURAL) (x11-color 'green)) + (cons (ly:make-pitch 0 5 FLAT) (x11-color 'red)) + (cons (ly:make-pitch 0 6 SHARP) (x11-color 'red)) + (cons (ly:make-pitch 0 1 NATURAL) (x11-color 'blue)) + (cons (ly:make-pitch 0 3 SHARP) (x11-color 'blue)) + (cons (ly:make-pitch 0 4 FLAT) (x11-color 'blue)) + (cons (ly:make-pitch 0 5 SHARP) (x11-color 'blue)) + (cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue)))) + +%Compare pitch and alteration (not octave). +#(define (pitch-equals? p1 p2) + (and + (= (ly:pitch-alteration p1) (ly:pitch-alteration p2)) + (= (ly:pitch-notename p1) (ly:pitch-notename p2)))) + +#(define (pitch-to-color pitch) + (let ((color (assoc pitch color-mapping pitch-equals?))) + (if color + (cdr color)))) + +#(define (color-notehead grob) + (pitch-to-color + (ly:event-property (event-cause grob) 'pitch))) + +\score { + \new Staff \relative c' { + \override NoteHead #'color = #color-notehead + c8 b d dis ees f g aes + } +} + diff --git a/Documentation/snippets/combining-dynamics-with-markup-texts.ly b/Documentation/snippets/combining-dynamics-with-markup-texts.ly new file mode 100644 index 0000000000..6b760f5931 --- /dev/null +++ b/Documentation/snippets/combining-dynamics-with-markup-texts.ly @@ -0,0 +1,36 @@ +%% 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 = "expressive-marks, text" + +%% 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 +@code{\\markup}. + +" + doctitlees = "Combinar indicaciones dinámicas con marcados textuales" + + texidoc = " +Some dynamics may involve text indications (such as @qq{più forte} or +@qq{piano subito}). These can be produced using a @code{\\markup} +block. + +" + doctitle = "Combining dynamics with markup texts" +} % begin verbatim + +piuF = \markup { \italic più \dynamic f } +\layout { ragged-right = ##f } +\relative c'' { + c2\f c-\piuF +} + + diff --git a/Documentation/snippets/combining-two-parts-on-the-same-staff.ly b/Documentation/snippets/combining-two-parts-on-the-same-staff.ly new file mode 100644 index 0000000000..dd6ecb805b --- /dev/null +++ b/Documentation/snippets/combining-two-parts-on-the-same-staff.ly @@ -0,0 +1,135 @@ +%% 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 = "simultaneous-notes, text" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +La herramienta de combinación de partes (instrucción +@code{\\partcombine}) permite la combinación de varias partes +diferentes sobre el mismo pentagrama. Las indicaciones textuales +tales como @qq{solo} o @qq{a2} se añaden de forma predeterminada; para +quitarlas, sencillamente establezca la propiedad +@code{printPartCombineTexts} al valor @qq{falso}. Para partituras +vocales (como himnos), no hay necesidad de añadir los textos @qq{solo} +o @qq{a2}, por lo que se deben desactivar. Sin embargo, podría ser +mejor no usarlo si hay solos, porque éstos no se indicarán. En tales +casos podría ser preferible la notación polifónica estándar. + +Este fragmento de código presenta las tres formas en que se pueden +imprimir dos partes sobre un solo pentagrama: polifonía estándar, +@code{\\partcombine} sin textos, y @code{\\partcombine} con +textos. + +" + doctitlees = "Combinar dos partes sobre el mismo pentagrama" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Funktion, die Stimmen kombiniert (also der @code{\\partcombine}-Befehl) +ermöglicht die Kombination unterschiedlicher Stimmen auf einem +System. Textanweisungen wie \"solo\" oder \"a2\" werden automatisch +hinzugefügt. Wenn man sie entfernen will, muss man die Eigenschaft +@code{printPartCombineTexts} auf falsch setzen. Für Klavierauszüge +muss natürlich kein \"solo\"/\"a2\" usw. hinzugefügt werden, man +sollte sie also ausschalten. Wenn aber Solo-Stellen in einem +Klavierauszug oder einer Chorpartitur angezeigt werden, ist es besser, +normale Polyphonie zu verwenden, weil so die Solostellen angezeigt +werden, auch wenn der Text des Stimmenkombinierers ausgeschaltet ist. + +Der Schnipsel zeigt drei Möglichkeiten, Stimmen auf einem System zu +kombinieren: Standardpolyphonie, @code{\\partcombine} ohne Text und +@code{\\partcombine} mit Text. + +" + doctitlede = "Zwei Stimmen auf einem System kombinieren" + +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +L'outil de combinaison de parties (la commande @code{\\partcombine}) +permet d'avoir deux parties différentes sur une même portée. LilyPond +ajoute automatiquement des indications textuelles, telles que @qq{solo} +ou @qq{a2}. Si votre intention n'est que de fusionner les parties, sans +ajouter de texte, assignez faux à la propriété +@code{printPartCombineTexts}. Dans le cas de partitions vocales, et +plus particulièrement d'hymnes, ces @qq{solo/a2} ne sont d'aucune +utilité, aussi vaut-il mieux les désactiver. Dans le cas où il y aurait +alternance entre @emph{solo} et @emph{tutti}, il vaut mieux faire appel +à de la musique polyphonique standard. + +Voici trois moyens d'imprimer deux parties sur un même portée : en +polyphonie normale, avec @code{\\partcombine} sans indication +supplémentaire, et avec @code{\\partcombine} commentée. + +" + doctitlefr = "Combinaison de deux parties sur une même portée" + + + texidoc = " +The part combiner tool ( @code{\\partcombine} command ) allows the +combination of several different parts on the same staff. Text +directions such as @qq{solo} or @qq{a2} are added by default; to remove +them, simply set the property @code{printPartCombineTexts} to @code{f}. +For vocal scores (hymns), there is no need to add @qq{solo/a2} texts, +so they should be switched off. However, it might be better not to use +it if there are any solos, as they won't be indicated. In such cases, +standard polyphonic notation may be preferable. + +This snippet presents the three ways two parts can be printed on a same +staff: standard polyphony, @code{\\partcombine} without texts, and +@code{\\partcombine} with texts. + + + + +" + doctitle = "Combining two parts on the same staff" +} % begin verbatim + +musicUp = \relative c'' { + \time 4/4 + a4 c4.( g8) a4 | + g4 e' g,( a8 b) | + c b a2. +} + +musicDown = \relative c'' { + g4 e4.( d8) c4 | + r2 g'4( f8 e) | + d2 \stemDown a +} + +\score { + << + << + \new Staff { + \set Staff.instrumentName = #"Standard polyphony" + << \musicUp \\ \musicDown >> + } + \new Staff \with { printPartCombineTexts = ##f } { + \set Staff.instrumentName = #"PartCombine without texts" + \partcombine \musicUp \musicDown + } + \new Staff { + \set Staff.instrumentName = #"PartCombine with texts" + \partcombine \musicUp \musicDown + } + >> + >> + \layout { + indent = 6.0\cm + \context { + \Score + \override SystemStartBar #'collapse-height = #30 + } + } +} + diff --git a/Documentation/snippets/compound-time-signatures.ly b/Documentation/snippets/compound-time-signatures.ly new file mode 100644 index 0000000000..27b618f2e8 --- /dev/null +++ b/Documentation/snippets/compound-time-signatures.ly @@ -0,0 +1,78 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Indicaciones de compases compuestos" + texidoces = " +Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden +ejecutar como compases compuestos (p.ej. @qq{3/8 + 2/8}), que combinan +dos o más metros diferentes. LilyPond puede hacer la música de este +tipo fácil de leer e interpretar, imprimiendo explícitamente las +indicaciones de compás compuesto y adaptando el comportamiento +automático de las barras (también se pueden añadir indicaciones +gráficas de la agrupación de compases; véase el fragmento de código +apropiado en la base de datos). + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ungerade Taktarten werden (wie etwa \"5/8\") werden oft als zusammengesetzte +Taktarten interpretiert (bspw. \"3/8 + 2/8\"), in welchen zwei oder mehr +Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, +indem entsprechende Taktarten gesetzt werden und die automatische +Bebalkung angepasst wird. + +" + doctitlede = "Zusammengesetzte Taktarten" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Des métriques telles que @qq{5/8} peuvent s'interpréter sous une forme +décomposée --- @qq{3/8 + 2/8} par exemple --- qui combine plusieurs +métriques. LilyPond est capable de rendre ce type de notation, plus + facile à lire et à interpréter, en imprimant cette métrique composite + et en adaptant les règles de ligature automatique en conséquence. + +" + doctitlefr = "Métrique décomposée" + + lsrtags = "rhythms" + texidoc = " +Odd 20th century time signatures (such as \"5/8\") can often be played +as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or +more inequal metrics. LilyPond can make such music quite easy to read +and play, by explicitly printing the compound time signatures and +adapting the automatic beaming behavior. (Graphic measure grouping +indications can also be added; see the appropriate snippet in this +database.) +" + doctitle = "Compound time signatures" +} % begin verbatim + + +#(define ((compound-time one two num) grob) + (grob-interpret-markup grob + (markup #:override '(baseline-skip . 0) #:number + (#:line ((#:column (one num)) + #:vcenter "+" + (#:column (two num))))))) + +\relative c' { + \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8") + \time 5/8 + \set Staff.beatStructure = #'(2 3) + c8 d e fis gis + c8 fis, gis e d + c8 d e4 gis8 +} diff --git a/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly new file mode 100644 index 0000000000..4a404cdc63 --- /dev/null +++ b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly @@ -0,0 +1,130 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +de @code{beatStructure} para muchos tipos de compases en +@file{scm/time-signature-settings.scm}. Los valores de +@code{beatStructure} se pueden cambiar o establecer con @code{\\set}. +Como alternativa, se puede usar la función de Scheme +@code{set-time-signature} para establecer tanto el compás como la +estructura de pulsos. @code{set-time-signature} acepta tres +argumentos: el número de pulsos, la longitud del pulso y la agrupación +interna de los pulsos en el compás. Tanto @code{\\time} como +@code{set-time-signature} se aplican al contexto @code{Timing}, por lo +que no restablecen los valores de @code{beatStructure} ni de +@code{baseMoment} que se establezcan en otros contextos de nivel +inferior, como @code{Voice}. + +Si el grabador @code{Measure_grouping_engraver} está incluido en uno +de los contextos de presentación, se imprimirán signos de agrupación +de pulsos. Estos símbolos facilitan la lectura de música moderna +rítmicamente compleja. En este ejemplo, el compás de 9/8 se agrupa +según dos patrones distintos utilizando los dos métodos, mientras que +el compás de 5/8 se agrupa de acuerdo con el ajuste predeterminado que +está en @file{scm/time-signature-settings.scm}: + +" +doctitlees = "Símbolos de dirección y símbolos de agrupación de compás" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Optionen, mit denen die Balken in einem Takt gruppiert werden, sind +durch die Scheme-Funktion @code{set-time-signature} erhältlich, die +drei Argumente braucht: Die Zahl der Taktschläge, die Länge des +Schlages und die interne gruppieren von Balken in dem Takt. Wenn der +@code{Measure_grouping_engraver} hinzugefügt worden ist, erstellt +diese Funktion auch @code{MeasureGrouping}-(Taktgruppen)-Zeichen. Derartige +Zeichen erleichtern das Lesen von rhythmisch komplexer Musik. In dem +Beispiel ist der 9/8-Takt in 2, 2, 2 und 3 aufgeteilt. Das wird +der @code{set-time-signature}-Funktion als das dritte Argument mitgegeben: +@code{'(2 2 2 3)}: + +" + doctitlede = "Dirigierzeichen Taktgruppenzeichen" + + + +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +Les règles de ligature par mesure sont gérées par la propriété +@code{beatStructure}. Ses valeurs par défaut sont répertoriées, par +métrique, dans le fichier @code{scm/@/time-@/signature@/-settings@/.scm}. Elles +sont modifiables grâce à la commande @code{\\set}. +La fonction Scheme @code{set-time-signature} permet quant à elle de +définir à la fois la métrique et la pulsation. Celle-ci prend trois +arguments@tie{}: le nombre de pulsations, la durée de la pulsation et le +regroupement des pulsations dans la mesure. @code{\\time} et +@code{set-time-signature} s'appliquent tous deux au contexte +@code{Timing}@tie{}; ils ne redéfiniront donc pas les valeurs de +@code{beatStructure} ou @code{baseMoment} lorsque qu'elles sont +modifiées dans un contexte de niveau inférieur comme @code{Voice} par +exemple. +Si l'on fait appel au @code{Measure_grouping_engraver}, la fonction +@code{set-time-signature} créera aussi des symboles +@code{MeasureGrouping}. Ces symboles aident à la lecture des œuvres +modernes à la rythmique complexe. Dans l'exemple qui suit, la mesure à +9/8 est divisée en 2, 2, 2 et 3, alors que la mesure à 5/8 répond aux +règles par défaut contenues dans le fichier @w{@code{scm/@/beam@/-settings@/.scm}}. + +" + doctitlefr = "Signes de direction signes de sous-groupe" + + lsrtags = "rhythms" + texidoc = " +Beat grouping within a measure is controlled by the context property +@code{beatStructure}. Values of @code{beatStructure} are +established for many time signatures in +@file{scm/time-signature-settings.scm}. Values of @code{beatStructure} +can be changed or set with @code{\\set}. +Alternatively, the +Scheme function @code{set-time-signature} can be used to both +set the time signature and establish the beat structure. +@code{set-time-signature}, takes three arguments: the +number of beats, the beat length, and the internal grouping of beats in +the measure. @code{\\time} and @code{set-time-signature} both apply +to the @code{Timing} context, so they will not reset values of +@code{beatStructure} or @code{baseMoment} that are set in +other lower-level contexts, such as @code{Voice}. + +If the @code{Measure_grouping_engraver} is included +in one of the display contexts, measure grouping signs will be +created. Such signs ease reading rhythmically complex modern music. +In the example, the 9/8 measure is grouped in two different +patterns using the two different methods, while the 5/8 measure +is grouped according to the default setting in +@file{scm/time-signature-settings.scm}: +" + doctitle = "Conducting signs measure grouping signs" +} % begin verbatim + + + +\score { + \new Voice \relative c'' { + \time 9/8 + g8 g d d g g a( bes g) | + \set Timing.beatStructure = #'(2 2 2 3) + g8 g d d g g a( bes g) | + #(set-time-signature 9 8 '(4 5)) + g8 g d d g g a( bes g) | + \time 5/8 + a4. g4 | + } + \layout { + \context { + \Staff + \consists "Measure_grouping_engraver" + } + } +} diff --git a/Documentation/snippets/contemporary-glissando.ly b/Documentation/snippets/contemporary-glissando.ly new file mode 100644 index 0000000000..702e545a84 --- /dev/null +++ b/Documentation/snippets/contemporary-glissando.ly @@ -0,0 +1,59 @@ +%% 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 = "expressive-marks" + +%% 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. + +" + doctitlees = "Glissando contemporáneo" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem +eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird. + +" + doctitlede = "Moderne Glissandi" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +De nos jours, il peut arriver que la note d'arrivée d'un glissando soit +absente de la partition. Pour ce faire, il vous faudra utiliser une +cadence et « masquer » la note d'arrivée. + +" + doctitlefr = "Glissando contemporain" + + + texidoc = " +A contemporary glissando without a final note can be typeset using a +hidden note and cadenza timing. + +" + doctitle = "Contemporary glissando" +} % begin verbatim + +\relative c'' { + \time 3/4 + \override Glissando #'style = #'zigzag + c4 c + \cadenzaOn + c4\glissando + \hideNotes + c,,4 + \unHideNotes + \cadenzaOff + \bar "|" +} + diff --git a/input/lsr/contexts-and-engravers-intro.itely b/Documentation/snippets/contexts-and-engravers-intro.itely similarity index 100% rename from input/lsr/contexts-and-engravers-intro.itely rename to Documentation/snippets/contexts-and-engravers-intro.itely diff --git a/input/lsr/contexts-and-engravers.snippet-list b/Documentation/snippets/contexts-and-engravers.snippet-list similarity index 78% rename from input/lsr/contexts-and-engravers.snippet-list rename to Documentation/snippets/contexts-and-engravers.snippet-list index 73055ed527..2b4356606f 100644 --- a/input/lsr/contexts-and-engravers.snippet-list +++ b/Documentation/snippets/contexts-and-engravers.snippet-list @@ -1,13 +1,16 @@ adding-a-figured-bass-above-or-below-the-notes.ly adding-an-extra-staff-at-a-line-break.ly adding-an-extra-staff.ly +centering-markup-on-note-heads-automatically.ly changing-midi-output-to-one-channel-per-voice.ly changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly chant-or-psalms-notation.ly creating-blank-staves.ly +defining-an-engraver-in-scheme-ambitus-engraver.ly engravers-one-by-one.ly mensurstriche-layout-bar-lines-between-the-staves.ly nesting-staves.ly removing-bar-numbers-from-a-score.ly use-square-bracket-at-the-start-of-a-staff-group.ly vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +vocal-ensemble-template-with-verse-and-refrain.ly diff --git a/Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly b/Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly new file mode 100644 index 0000000000..3a8dee79c4 --- /dev/null +++ b/Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly @@ -0,0 +1,67 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +La visibilidad de los objetos de extensión que acaban en la primera +nota después de un salto de línea está controlada por la función de +callback de @code{after-line-breaking} +@code{ly:spanner::kill-zero-spanned-time}. + +Para los objetos como los glissandos y los reguladores, el +comportamiento predeterminado es ocultar el objeto de extensión +después del salto; la inhabilitación de la función de callback hace +que el objeto de extensión roto por la izquierda pueda mostrarse. + +De forma inversa, los objetos de extensión que son visibles +normalmente, como los objetos de extensión de texto, se pueden +ocultar habilitando la función de callback. +" + + doctitlees = "Controlar la visibilidad de los objetos de + extensión después de un salto de línea" + + + lsrtags = "expressive-marks, tweaks-and-overrides" + texidoc = "The visibility of spanners which end on the first note +following a line break is controlled by the @code{after-line-breaking} +callback @code{ly:spanner::kill-zero-spanned-time}. + +For objects such as glissandos and hairpins, the default behaviour is +to hide the spanner after a break; disabling the callback will allow +the left-broken span to be shown. + +Conversely, spanners which are usually visible, such as text spans, +can be hidden by enabling the callback. +" + + doctitle = "Controlling spanner visibility after a line break" +} % begin verbatim + + +\paper { ragged-right = ##t } + +\relative c'' { + \override Hairpin #'to-barline = ##f + \override Glissando #'breakable = ##t + % show hairpin + \override Hairpin #'after-line-breaking = ##t + % hide text span + \override TextSpanner #'after-line-breaking = + #ly:spanner::kill-zero-spanned-time + e2\<\startTextSpan + % show glissando + \override Glissando #'after-line-breaking = ##t + f2\glissando + \break + f,1\!\stopTextSpan +} + diff --git a/Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly b/Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly new file mode 100644 index 0000000000..63a9565269 --- /dev/null +++ b/Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly @@ -0,0 +1,66 @@ +%% 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 = "editorial-annotations, chords, keyboards, fretted-strings" + +%% 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 +digitaciones, se debe utilizar una construcción de acorde <> aunque +sea una sola nota. + + +" + doctitlees = "Controlar la colocación de las digitaciones de acordes" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Position von Fingersatzzahlen kann exakt kontrolliert werden. + +" + doctitlede = "Position von Fingersatz in Akkorden kontrollieren" + +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +Le positionnement des doigtés peut être contrôlé de manière très précise. +Afin que l'orientation soit prise en compte, il est nécessaire d'utiliser +une syntaxe d'accord @code{< >}, même s'il ne s'agit que d'une seule note. +" + doctitlefr = "Contrôler la position des doigtés dans un accord" + + + texidoc = " +The placement of fingering numbers can be controlled precisely. For +fingering orientation to apply, you must use a chord construct <> even +if it is a single note. + +" + doctitle = "Controlling the placement of chord fingerings" +} % begin verbatim + +\relative c' { + \set fingeringOrientations = #'(left) + 4 + \set fingeringOrientations = #'(down) + 4 + \set fingeringOrientations = #'(down right up) + 4 + \set fingeringOrientations = #'(up) + 4 + \set fingeringOrientations = #'(left) + 2 + \set fingeringOrientations = #'(down) + 2 +} + + diff --git a/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly b/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly new file mode 100644 index 0000000000..c7d4c07d2f --- /dev/null +++ b/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly @@ -0,0 +1,81 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% 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 +bajo es este número, más cerca de la nota se colocará. En este +ejemplo, el @code{TextScript} (el sostenido) tiene primero la +prioridad más baja, por lo que se sitúa en la posición más baja en +el primer ejemplo. En el segundo, el semitrino (el @code{Script}) +es el que la tiene más baja, por lo que se sitúa en la parte +interior. Cuando dos objetos tienen la misma prioridad, el orden +en que se introducen determina cuál será el que aparece en primer +lugar. + +" + doctitlees = "Controlar la ordenación vertical de las inscripciones" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Die vertikale Anordnung von Beschriftungen wird mit der +@code{'script-priority}-Eigenschaft kontrolliert. Um so kleiner die +Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In +diesem Beispiel hat das @code{TextScript}-Objekt (das Kreuz) zuerst +die niedrigste Priorität, wird also auch am niedrigsten in dem ersten +Beispiel gesetzt. Im zweiten Fall hat der Praller (das @code{Script}) +die niedrigste Priorität, darum wird er am nächsten zum System gesetzt. +Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge +anhand ihres Auftretens in der Quelldatei entschieden. + +" + doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Les symboles s'ordonnent verticalement suivant la propriété +@code{script-priority}. Plus sa valeur numérique est faible, plus le +symbole sera proche de la note. Dans l'exemple suivant, l'objet +@code{TextScript} -- le dièse -- a d'abord la propriété la +plus basse, et il est donc placé plus près de la note ; ensuite c'est +l'objet @code{Script} -- le mordant -- qui a la propriété la plus basse, +et il se place alors sous le dièse. Lorsque deux objets ont la même +priorité, c'est l'ordre dans lequel ils sont indiqués qui détermine +lequel sera placé en premier. + +" + doctitlefr = "Contrôle de l'ordre vertical des articulations et ornements" + + + texidoc = " +The vertical ordering of scripts is controlled with the +@code{'script-priority} property. The lower this number, the closer it +will be put to the note. In this example, the @code{TextScript} (the +sharp symbol) first has the lowest priority, so it is put lowest in the +first example. In the second, the prall trill (the @code{Script}) has +the lowest, so it is on the inside. When two objects have the same +priority, the order in which they are entered determines which one +comes first. + +" + doctitle = "Controlling the vertical ordering of scripts" +} % begin verbatim + +\relative c''' { + \once \override TextScript #'script-priority = #-100 + a2^\prall^\markup { \sharp } + + \once \override Script #'script-priority = #-100 + a2^\prall^\markup { \sharp } +} + diff --git a/Documentation/snippets/controlling-tuplet-bracket-visibility.ly b/Documentation/snippets/controlling-tuplet-bracket-visibility.ly new file mode 100644 index 0000000000..d8a0ff2418 --- /dev/null +++ b/Documentation/snippets/controlling-tuplet-bracket-visibility.ly @@ -0,0 +1,72 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +El comportamiento predeterminado de la visibilidad de los corchetes de +grupo de valoración especial es imprimir el corchete a no ser que haya +una barra de la misma longitud que el grupo especial. Para controlar +la visibilidad de los corchetes de grupo, establezca la propiedad +@code{'bracket-visibility} a @code{#t} (imprimir el corchete siempre), +@code{#f} (no imprimirlo nunca) o @code{#'if-no-beam} (imprimir el +corchete solamente si no hay barra). + +" + + doctitlees = "Controlar la visibilidad de los corchetes de grupo especial" + +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + + texidocfr = " +Selon la tradition, les crochets indicateurs de nolet sont toujours +imprimés sauf dans le cas où ils seraient de la même longuer qu'une +ligature. LilyPond permet, au travers de la propriété +@code{'bracket-visibility}, de contôler précisément leur +affichage@tie{}: déterminée à @code{#t}, ils seront toujours +imprimés@tie{}; @code{#f} permet de ne jamais les imprimer, et +@code{#'if-no-beam} les imprimera en l'absence de ligature. + +" + doctitlefr = "Contrôle de l'impression des crochets de nolet" + + + texidoc = " +The default behavior of tuplet-bracket visibility is to print a bracket +unless there is a beam of the same length as the tuplet. To control the +visibility of tuplet brackets, set the property +@code{'bracket-visibility} to either @code{#t} (always print a +bracket), @code{#f} (never print a bracket) or @code{#'if-no-beam} +(only print a bracket if there is no beam). + +" + doctitle = "Controlling tuplet bracket visibility" +} % begin verbatim + +music = \relative c'' { + \times 2/3 { c16[ d e } f8] + \times 2/3 { c8 d e } + \times 2/3 { c4 d e } +} + +\new Voice { + \relative c' { + << \music s4^"default" >> + \override TupletBracket #'bracket-visibility = #'if-no-beam + << \music s4^"'if-no-beam" >> + \override TupletBracket #'bracket-visibility = ##t + << \music s4^"#t" >> + \override TupletBracket #'bracket-visibility = ##f + << \music s4^"#f" >> + } +} + + diff --git a/Documentation/snippets/creating-a-delayed-turn.ly b/Documentation/snippets/creating-a-delayed-turn.ly new file mode 100644 index 0000000000..7276937ebb --- /dev/null +++ b/Documentation/snippets/creating-a-delayed-turn.ly @@ -0,0 +1,76 @@ +%% 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 = "expressive-marks, editorial-annotations, tweaks-and-overrides" + +%% 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 +varias sobreescriturasw de propiedades. La propiedad +@code{outside-staff-priority} se debe establecer al valor @code{#f}, pues en +caso contrario tendría prioridad sobre la propiedad @code{avoid-slur +property}. El valor de @code{halign} se utiliza para colocar el +grupeto horizontalmente. + +" + +doctitlees = "Crear un grupeto de anticipación" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das +Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die +@code{outside-staff-priority}-Eigenschaft muss auf falsch (@code{#f}) +gesetzt werden, weil sie sonst über die Eigenschaft +@code{avoid-slur property} dominieren würde. Der Wert von @code{halign} +wird benutzt, um den Doppelschlag horizontal zu positionieren. +" + + doctitlede = "Einen Doppelschlag mit Vorhalt erstellen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Obtenir un @emph{grupetto} retardé et dans lequel la note la plus basse +est altérée requiert quelques surcharges. La propriété +@w{@code{outside-staff-priority}} doît être désactivée (@code{#f}) pour +éviter qu'elle prenne le pas sur la propriété @w{@code{avoid-slur}}. La +valeur assignée à @code{halign} permet de gérer horizonalement le +@w{« retard »}. + +" + + doctitlefr = "Création d'un grupetto retardé" + + texidoc = " +Creating a delayed turn, where the lower note of the turn uses the +accidental, requires several overrides. The +@code{outside-staff-priority} property must be set to @code{#f}, as +otherwise this would take precedence over the @code{avoid-slur +property}. The value of @code{halign} is used to position the turn +horizontally. + +" + doctitle = "Creating a delayed turn" +} % begin verbatim + +\relative c'' { + \once \override TextScript #'avoid-slur = #'inside + \once \override TextScript #'outside-staff-priority = ##f + c2(^\markup \tiny \override #'(baseline-skip . 1) { + \halign #-4 + \center-column { + \sharp + \musicglyph #"scripts.turn" + } + } + d4.) c8 +} diff --git a/input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly b/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly similarity index 81% rename from input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly rename to Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly index 1f624ee0ce..63b038ca8f 100644 --- a/input/lsr/creating-a-sequence-of-notes-on-various-pitches.ly +++ b/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "pitches" +%% 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 @@ -20,11 +25,10 @@ de Gustav Holst. texidoc = " In music that contains many occurrences of the same sequence of notes -at different pitches, the following music function may prove useful. -It takes a note, of which only the pitch is used. The supporting -Scheme functions were borrowed from the \"Tips and tricks\" document in -the manual for version 2.10. This example creates the rhythm used -throughout Mars, from Gustav Holst's The Planets. +at different pitches, the following music function may prove useful. +It takes a note, of which only the pitch is used. This example +creates the rhythm used throughout Mars, from Gustav Holst's The +Planets. " doctitle = "Creating a sequence of notes on various pitches" diff --git a/Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly b/Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly new file mode 100644 index 0000000000..555c26e522 --- /dev/null +++ b/Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly @@ -0,0 +1,61 @@ +%% 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 = "expressive-marks" + +%% 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 +@code{Span_arpeggio_engraver} se traslada al contexto de +@code{Staff} context: + +" + doctitlees = "Crear arpegios entre notas de voces distintas" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Ein Arpeggio kann zwischen Noten aus unterschiedlichen Stimmen auf demselben +System gezogen werden, wenn der @code{Span_arpeggio_engraver} in den +@code{Staff}-Kontext verschoben wird: + +" + doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Affecter le graveur @code{Span_arpeggio_engraver} au contexte de la +portée (@code{Staff}) permet de distribuer un arpège sur plusieurs voix : + +" + doctitlefr = "Arpège distribué sur plusieurs voix" + + + texidoc = " +An arpeggio can be drawn across notes in different voices on the same +staff if the @code{Span_arpeggio_engraver} is added to the @code{Staff} +context: + +" + doctitle = "Creating arpeggios across notes in different voices" +} % begin verbatim + +\new Staff \with { + \consists "Span_arpeggio_engraver" +} +\relative c' { + \set Staff.connectArpeggios = ##t + << + { 4\arpeggio 2 } + \\ + { 2\arpeggio 2 } + >> +} + diff --git a/Documentation/snippets/creating-blank-staves.ly b/Documentation/snippets/creating-blank-staves.ly new file mode 100644 index 0000000000..6e2bdd8bc2 --- /dev/null +++ b/Documentation/snippets/creating-blank-staves.ly @@ -0,0 +1,62 @@ +%% 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 = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout" + +%% 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} +del contexto @code{Score}, y los grabadores de la indicación de compás +@code{Time_signature_engraver}, de la clave @code{Clef_engraver} y de +los compases @code{Bar_engraver} del contexto de @code{Staff}. + +" + doctitlees = "Crear pentagramas en blanco" + + texidoc = " +To create blank staves, generate empty measures then remove the +@code{Bar_number_engraver} from the @code{Score} context, and the +@code{Time_signature_engraver}, @code{Clef_engraver} and +@code{Bar_engraver} from the @code{Staff} context. + +" + doctitle = "Creating blank staves" +} % begin verbatim + +#(set-global-staff-size 20) + +\score { + { + \repeat unfold 12 { s1 \break } + } + \layout { + indent = 0\in + \context { + \Staff + \remove "Time_signature_engraver" + \remove "Clef_engraver" + \remove "Bar_engraver" + } + \context { + \Score + \remove "Bar_number_engraver" + } + } +} + +\paper { + #(set-paper-size "letter") + ragged-last-bottom = ##f + line-width = 7.5\in + left-margin = 0.5\in + bottom-margin = 0.25\in + top-margin = 0.25\in +} + diff --git a/Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly b/Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly new file mode 100644 index 0000000000..589d320d1f --- /dev/null +++ b/Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly @@ -0,0 +1,65 @@ +%% 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 = "expressive-marks" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Dentro de un @code{PianoStaff}, es posible hacer que un arpegio +cruce entre los pentagramas ajustando la propiedad +@code{PianoStaff.connectArpeggios}. + +" + doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Arpeggio über mehrere Systeme können in anderen Kontexten als dem +@code{PianoStaff} erstellt werden, wenn der @code{Span_arpeggio_engraver} +in den @code{Score}-Kontext eingefügt wird. + +" + doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Dans une double portée pour piano (@code{PianoStaff}), un arpège peut +s'étendre sur les deux portées grâce à la propriété +@code{PianoStaff.connectArpeggios}. + +" + doctitlefr = "Arpège distribué sur une partition pour piano" + + + texidoc = " +In a @code{PianoStaff}, it is possible to let an arpeggio cross between +the staves by setting the property @code{PianoStaff.connectArpeggios}. + + +" + doctitle = "Creating cross-staff arpeggios in a piano staff" +} % begin verbatim + +\new PianoStaff \relative c'' << + \set PianoStaff.connectArpeggios = ##t + \new Staff { + 4\arpeggio + 4\arpeggio + 4\arpeggio + 4\arpeggio + } + \new Staff { + \clef bass + \repeat unfold 4 { + 4\arpeggio + } + } +>> + diff --git a/Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly b/Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly new file mode 100644 index 0000000000..bc525cada2 --- /dev/null +++ b/Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly @@ -0,0 +1,76 @@ +%% 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 = "expressive-marks" + +%% 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 +@code{StaffGroup} si se incluye el grabador +@code{Span_arpeggio_engraver} en el contexto de @code{Score}. + +" + doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio +zwischen beiden Systemen zu verbinden, indem die +@code{PianoStaff.connectArpeggios}-Eigenschaft gesetzt wird. + + +" + doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Il est possible de distribuer un arpège sur plusieurs portées d'un +système autre que le @code{PianoStaff} dès lors que vous incluez le +@code{Span_arpeggio_engraver} au contexte @code{Score}. + +" + doctitlefr = "Arpège distribué pour un autre contexte que le piano" + + + texidoc = " +Cross-staff arpeggios can be created in contexts other than +@code{GrandStaff}, @code{PianoStaff} and @code{StaffGroup} if the +@code{Span_arpeggio_engraver} is included in the @code{Score} context. + +" + doctitle = "Creating cross-staff arpeggios in other contexts" +} % begin verbatim + +\score { + \new ChoirStaff { + \set Score.connectArpeggios = ##t + << + \new Voice \relative c' { + 2\arpeggio + 2\arpeggio + 1\arpeggio + } + \new Voice \relative c { + \clef bass + 2\arpeggio + 2\arpeggio + 1\arpeggio + } + >> + } + \layout { + \context { + \Score + \consists "Span_arpeggio_engraver" + } + } +} + diff --git a/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly b/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly new file mode 100644 index 0000000000..5f7f1f0d90 --- /dev/null +++ b/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly @@ -0,0 +1,60 @@ +%% 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 = "rhythms" + +%% 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. + +" + doctitlees = "Crear indicaciones metronómicas en modo de marcado" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Neue Metronombezeichnungen können als Textbeschriftung erstellt werden, +aber sie ändern nicht das Tempo für die MIDI-Ausgabe. + +" + + doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen" + +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Vous pouvez créer des indications de tempo sous la forme d'étiquettes +textuelles -- des objets @code{markup} -- notamment des équivalences. +Cependant, elles n'apparaîtront pas dans le fichier MIDI. + +" + doctitlefr = "Création d'une indication métronomique sous forme d'étiquette" + + + texidoc = " +New metronome marks can be created in markup mode, but they will not +change the tempo in MIDI output. + +" + doctitle = "Creating metronome marks in markup mode" +} % begin verbatim + +\relative c' { + \tempo \markup { + \concat { + ( + \smaller \general-align #Y #DOWN \note #"16." #1 + " = " + \smaller \general-align #Y #DOWN \note #"8" #1 + ) + } + } + c1 + c4 c' c,2 +} diff --git a/Documentation/snippets/creating-real-parenthesized-dynamics.ly b/Documentation/snippets/creating-real-parenthesized-dynamics.ly new file mode 100644 index 0000000000..c09e4947db --- /dev/null +++ b/Documentation/snippets/creating-real-parenthesized-dynamics.ly @@ -0,0 +1,55 @@ +%% 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 = "expressive-marks, text" + +%% 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 +tiene un inconveniente: los objetos que se crean se comportarán +como elementos de marcado de texto y no como indicaciones +dinámicas. + +Sin embargo, es posible crear un objeto similar utilizando el código +de Scheme equivalente (como se explica en la Referencia de la +notación), en combinación con la función +@code{make-dynamic-script}. De esta forma, el elemento de marcado se +tratará como una indicación dinámica, y por tanto seguirá siendo +compatible con instrucciones como @code{\\dynamicUp} o +@code{\\dynamicDown}. + +" + doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis" + + texidoc = " +Although the easiest way to add parentheses to a dynamic mark is to use +a @code{\\markup} block, this method has a downside: the created +objects will behave like text markups, and not like dynamics. + +However, it is possible to create a similar object using the equivalent +Scheme code (as described in the Notation Reference), combined with the +@code{make-dynamic-script} function. This way, the markup will be +regarded as a dynamic, and therefore will remain compatible with +commands such as @code{\\dynamicUp} or @code{\\dynamicDown}. + + + +" + doctitle = "Creating \"real\" parenthesized dynamics" +} % begin verbatim + +parenF = #(make-dynamic-script (markup #:line (#:normal-text #:italic + #:fontsize 2 "(" #:hspace -0.8 #:dynamic "f" #:normal-text + #:italic #:fontsize 2 ")"))) + +\relative c'' { + c4\parenF c c \dynamicUp c\parenF +} + diff --git a/input/lsr/creating-simultaneous-rehearsal-marks.ly b/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly similarity index 78% rename from input/lsr/creating-simultaneous-rehearsal-marks.ly rename to Documentation/snippets/creating-simultaneous-rehearsal-marks.ly index 2d6f8ade38..227902a585 100644 --- a/input/lsr/creating-simultaneous-rehearsal-marks.ly +++ b/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "expressive-marks, text, tweaks-and-overrides" +%% 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 @@ -21,11 +26,11 @@ siguiente. texidoc = " Unlike text scripts, rehearsal marks cannot be stacked at a particular -point in a score: only one @code{RehearsalMark} object is created. +point in a score: only one @code{RehearsalMark} object is created. Using an invisible measure and bar line, an extra rehearsal mark can be added, giving the appearance of two marks in the same column. This method may also prove useful for placing rehearsal marks at both the -end of one system and the start of the following system. +end of one system and the start of the following system. " doctitle = "Creating simultaneous rehearsal marks" @@ -38,12 +43,15 @@ end of one system and the start of the following system. \once \override Score.RehearsalMark #'self-alignment-X = #LEFT \once \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) \mark \markup { \bold { Senza denti } } - + % the hidden measure and bar line + % \cadenzaOn turns off automatic calculation of bar numbers + \cadenzaOn \once \override Score.TimeSignature #'stencil = ##f \time 1/16 s16 \bar "" - + \cadenzaOff + \time 4/4 \once \override Score.RehearsalMark #'self-alignment-X = #LEFT \mark \markup { \box \bold Intro } diff --git a/input/lsr/creating-slurs-across-voices.ly b/Documentation/snippets/creating-slurs-across-voices.ly similarity index 79% rename from input/lsr/creating-slurs-across-voices.ly rename to Documentation/snippets/creating-slurs-across-voices.ly index 8d1c5fa919..30ef2d93ea 100644 --- a/input/lsr/creating-slurs-across-voices.ly +++ b/Documentation/snippets/creating-slurs-across-voices.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "expressive-marks, keyboards, unfretted-strings" +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c texidoces = " En determinadas situaciones es necesario crear ligaduras de expresión entre notas que están en voces distintas. diff --git a/input/lsr/creating-text-spanners.ly b/Documentation/snippets/creating-text-spanners.ly similarity index 84% rename from input/lsr/creating-text-spanners.ly rename to Documentation/snippets/creating-text-spanners.ly index feb83b55dc..d2720b18fc 100644 --- a/input/lsr/creating-text-spanners.ly +++ b/Documentation/snippets/creating-text-spanners.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "expressive-marks, text, tweaks-and-overrides" +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c texidoces = " Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan} permiten la creación de elementos de extensión textuales tan @@ -33,14 +38,14 @@ to modify its output. a4 \startTextSpan b4 c a4 \stopTextSpan - + \override TextSpanner #'style = #'line \once \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER a4 \startTextSpan b4 c a4 \stopTextSpan - + \override TextSpanner #'style = #'dashed-line \override TextSpanner #'(bound-details left text) = \markup { \draw-line #'(0 . 1) } @@ -51,7 +56,7 @@ to modify its output. a4 \startTextSpan b4 c a4 \stopTextSpan - + \set Staff.middleCPosition = #-13 \override TextSpanner #'dash-period = #10 \override TextSpanner #'dash-fraction = #0.5 @@ -60,3 +65,4 @@ to modify its output. b4 c a4 \stopTextSpan } + diff --git a/Documentation/snippets/cross-staff-tremolos.ly b/Documentation/snippets/cross-staff-tremolos.ly new file mode 100644 index 0000000000..743262705f --- /dev/null +++ b/Documentation/snippets/cross-staff-tremolos.ly @@ -0,0 +1,66 @@ +%% 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 = "repeats, keyboards" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Dado que @code{\\repeat tremolo} espera exactamente dos argumentos +musicales para los trémolos de acorde, la nota o acorde que cambia de +pentagrama en un trémolo que cruza el pentagrama se debe colocar +dentro de llaves curvas junto a su instrucción @code{\\change Staff}. + +" + + doctitlees = "Trémolos de pentagrama cruzado" + +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Dans la mesure où @code{\\repeat tremolo} requiert deux arguments +musicaux pour un trémolo d'accords, la note ou l'accord de la +portée opposée doît être encadré par des accolades et se voir adjoindre +la commande @code{\\change Staff}. + +" + doctitlefr = "Trémolo et changement de portée" + + + texidoc = " +Since @code{\\repeat tremolo} expects exactly two musical arguments for +chord tremolos, the note or chord which changes staff within a +cross-staff tremolo should be placed inside curly braces together with +its @code{\\change Staff} command. + +" + doctitle = "Cross-staff tremolos" +} % begin verbatim + +\new PianoStaff << + \new Staff = "up" \relative c'' { + \key a \major + \time 3/8 + s4. + } + \new Staff = "down" \relative c'' { + \key a \major + \time 3/8 + \voiceOne + \repeat tremolo 6 { + 32 + { + \change Staff = "up" + \voiceTwo + 32 + } + } + } +>> + diff --git a/Documentation/snippets/custodes.ly b/Documentation/snippets/custodes.ly new file mode 100644 index 0000000000..65694749fb --- /dev/null +++ b/Documentation/snippets/custodes.ly @@ -0,0 +1,47 @@ +%% 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 = "ancient-notation, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se pueden tipografiar «custos» en diferentes estilos. + +" + doctitlees = "Custos" + + texidoc = " +Custodes may be engraved in various styles. + +" + doctitle = "Custodes" +} % begin verbatim + +\layout { ragged-right = ##t } + +\new Staff \with { \consists "Custos_engraver" } \relative c' { + \override Staff.Custos #'neutral-position = #4 + + \override Staff.Custos #'style = #'hufnagel + c1^"hufnagel" \break + 1 + + \override Staff.Custos #'style = #'medicaea + c1^"medicaea" \break + 1 + + \override Staff.Custos #'style = #'vaticana + c1^"vaticana" \break + 1 + + \override Staff.Custos #'style = #'mensural + c1^"mensural" \break + 1 +} + diff --git a/input/lsr/customizing-fretboard-fret-diagrams.ly b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly similarity index 75% rename from input/lsr/customizing-fretboard-fret-diagrams.ly rename to Documentation/snippets/customizing-fretboard-fret-diagrams.ly index 6359b526c7..6efbcde652 100644 --- a/input/lsr/customizing-fretboard-fret-diagrams.ly +++ b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "fretted-strings, tweaks-and-overrides" +%% 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}. @@ -17,6 +22,19 @@ sobreescritura de propiedades. " doctitlees = "Personalizar los diagramas de posiciones" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Eigenschaften von Bunddiagrammen können in +@code{'fret-diagram-details} verändert werden. Einstellungen mit +dem @code{\\override}-Befehl werden dem @code{FretBoards.FretBoard}-Objekt +zugewiesen. Genauso wie @code{Voice} ist auch @code{FretBoards} ein +Kontext der niedrigsten Ebene, weshalb der Kontext auch in dem Befehl +weggelassen werden kann. + +" + doctitlede = "Bunddiagramme anpassen" + texidoc = " Fret diagram properties can be set through @code{'fret-diagram-details}. For FretBoard fret diagrams, overrides @@ -29,7 +47,7 @@ can be omitted in property overrides. } % begin verbatim \include "predefined-guitar-fretboards.ly" -\storePredefinedDiagram \chordmode { c' } +\storePredefinedDiagram #default-fret-table \chordmode { c' } #guitar-tuning #"x;1-1-(;3-2;3-3;3-4;1-1-);" << diff --git a/input/lsr/customizing-markup-fret-diagrams.ly b/Documentation/snippets/customizing-markup-fret-diagrams.ly similarity index 80% rename from input/lsr/customizing-markup-fret-diagrams.ly rename to Documentation/snippets/customizing-markup-fret-diagrams.ly index f6c9f52d05..75bf60ece7 100644 --- a/input/lsr/customizing-markup-fret-diagrams.ly +++ b/Documentation/snippets/customizing-markup-fret-diagrams.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "fretted-strings, tweaks-and-overrides" +%% 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 @@ -14,18 +19,30 @@ diagramas de posiciones de marcado, se pueden aplicar overrides " doctitlees = "Personalizar diagramas de posiciones de marcado" -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Bunddiagramme können mit der Eigenschaft @code{'fret-diagram-details} +angepasst werden. Bunddiagramme, die als Textbeschriftung eingefügt werden, +können Veränderungen im @code{Voice.TextScript}-Objekt oder direkt in der +Beschriftung vorgenommen werden. + +" + doctitlede = "Anpassung von Beschriftungs-Bunddiagrammen" + +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b texidocfr = " -Les propriétés d'un diagramme de fret sont modifiables grâce au -@code{'fret-diagram-details}. Lorsqu'ils sont générés sous forme -de @code{\markup}, rien n'empêche de les modifier en jouant sur les -réglages de l'objet @code{Voice.TextScript} ou bien directement sur +Les propriétés d'un diagramme de fret sont modifiables grâce au +@code{'fret-diagram-details}. Lorsqu'ils sont générés sous forme +de @code{\\markup}, rien n'empêche de les modifier en jouant sur les +réglages de l'objet @code{Voice.TextScript} ou bien directement sur le @qq{markup}. " doctitlefr = "Personnalisation des diagrammes de fret" + texidoc = " Fret diagram properties can be set through @code{'fret-diagram-details}. For markup fret diagrams, overrides can @@ -38,7 +55,7 @@ markup. << \chords { c1 | c | c | d } - + \new Voice = "mel" { \textLengthOn % Set global properties of fret diagram diff --git a/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly b/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly new file mode 100644 index 0000000000..e22b5d8d51 --- /dev/null +++ b/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly @@ -0,0 +1,45 @@ +%% 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 = "editorial-annotations" + +%% 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 +@code{neutral-direction} del objeto @code{Stem}. + +" + doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Richtung von Hälsen auf der mittleren Linie kann mit der @code{Stem}-Eigenschaft +@code{neutral-direction} gesetzt werden. + +" + doctitlede = "Standardrichtung für Hälse auf der Mittellinie" + + texidoc = " +The default direction of stems on the center line of the staff is set +by the @code{Stem} property @code{neutral-direction}. + +" + doctitle = "Default direction of stems on the center line of the staff" +} % begin verbatim + +\relative c'' { + a4 b c b + \override Stem #'neutral-direction = #up + a4 b c b + \override Stem #'neutral-direction = #down + a4 b c b +} + diff --git a/Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly b/Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly new file mode 100644 index 0000000000..7fe68eda8e --- /dev/null +++ b/Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly @@ -0,0 +1,344 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Este ejemplo demuestra cómo se puede definir el grabador de ámbito en +el espacio del usuario, con un grabador de Scheme. + +Esto es básicamente una reescritura en Scheme del código de +@file{lily/ambitus-engraver.cc}. + +" + + doctitlees = "Definir un grabador en Scheme: grabador de ámbito" + + + lsrtags = "contexts-and-engravers" + + + texidoc = "This example demonstrates how the ambitus engraver may be + defined on the user side, with a Scheme engraver. + + This is basically a rewrite in Scheme of the code from + @file{lily/ambitus-engraver.cc}. +" + + doctitle = "Defining an engraver in Scheme: ambitus engraver" +} % begin verbatim + + +#(use-modules (oop goops)) + +%%% +%%% Grob utilities +%%% +%%% These are literal rewrites of some C++ methods used by the ambitus engraver. +#(define (ly:event::in-event-class event class-name) + "Check if @var{event} the given class. +Rewrite of @code{Stream_event::internal_in_event_class} from @file{lily/stream-event.cc}." + (memq class-name (ly:make-event-class (ly:event-property event 'class)))) + +#(define (ly:separation-item::add-conditional-item grob grob-item) + "Add @var{grob-item} to the array of conditional elements of @var{grob}. +Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}." + (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item)) + +#(define (ly:accidental-placement::accidental-pitch accidental-grob) + "Get the pitch from the grob cause of @var{accidental-grob}. +Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}." + (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause) + 'pitch)) + +#(define (ly:accidental-placement::add-accidental grob accidental-grob) + "Add @var{accidental-grob}, an @code{Accidental} grob, to the +list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement} +grob. +Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}." + (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob))) + (set! (ly:grob-parent accidental-grob X) grob) + (set! (ly:grob-property accidental-grob 'X-offset) + ly:grob::x-parent-positioning) + (let* ((accidentals (ly:grob-object grob 'accidental-grobs)) + (handle (assq (ly:pitch-notename pitch) accidentals)) + (entry (if handle (cdr handle) '()))) + (set! (ly:grob-object grob 'accidental-grobs) + (assq-set! accidentals + (ly:pitch-notename pitch) + (cons accidental-grob entry)))))) + +%%% +%%% Ambitus data structure +%%% + +%%% The class holds the various grobs that are created +%%% to print an ambitus: +%%% - ambitus-group: the grob that groups all the components of an ambitus +%%% (Ambitus grob); +%%% - ambitus-line: the vertical line between the upper and lower ambitus +%%% notes (AmbitusLine grob); +%%% - ambitus-up-note and ambitus-down-note: the note head and accidental +%%% for the lower and upper note of the ambitus (see class +%%% below). +%%% The other slots define the key and clef context of the engraver: +%%% - start-c0: position of middle c at the beginning of the piece. It +%%% is used to place the ambitus notes according to their pitch; +%%% - start-key-sig: the key signature at the beginning of the piece. It +%%% is used to determine if accidentals shall be printed next to ambitus +%%% notes. + +#(define-class () + (ambitus-group #:accessor ambitus-group) + (ambitus-line #:accessor ambitus-line) + (ambitus-up-note #:getter ambitus-up-note + #:init-form (make )) + (ambitus-down-note #:getter ambitus-down-note + #:init-form (make )) + (start-c0 #:accessor ambitus-start-c0 + #:init-value #f) + (start-key-sig #:accessor ambitus-start-key-sig + #:init-value '())) + +%%% Accessor for the lower and upper note data of an ambitus +#(define-method (ambitus-note (ambitus ) direction) + "If @var{direction} is @code{UP}, then return the upper ambitus note +of @var{ambitus}, otherwise return the lower ambitus note." + (if (= direction UP) + (ambitus-up-note ambitus) + (ambitus-down-note ambitus))) + +%%% The class holds the grobs that are specific to ambitus +%%% (lower and upper) notes: +%%% - head: an AmbitusNoteHead grob; +%%% - accidental: an AmbitusAccidental grob, to be possibly printed next +%%% to the ambitus note head. +%%% Moreover: +%%% - pitch is the absolute pitch of the note +%%% - cause is the note event that causes this ambitus note, i.e. the lower +%%% or upper note of the considered music sequence. + +#(define-class () + (head #:accessor ambitus-note-head + #:init-value #f) + (accidental #:accessor ambitus-note-accidental + #:init-value #f) + (cause #:accessor ambitus-note-cause + #:init-value #f) + (pitch #:accessor ambitus-note-pitch + #:init-value #f)) + +%%% +%%% Ambitus engraving logics +%%% +%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}. + +#(define (make-ambitus translator) + "Build an ambitus object: initialize all the grobs and their relations. + +The Ambitus grob contain all other grobs: + Ambitus + |- AmbitusLine + |- AmbitusNoteHead for upper note + |- AmbitusAccidental for upper note + |- AmbitusNoteHead for lower note + |- AmbitusAccidental for lower note + +The parent of an accidental is the corresponding note head, +and the accidental is set as the 'accidental-grob of the note head +so that is printed by the function that prints notes." + ;; make the ambitus object + (let ((ambitus (make ))) + ;; build the Ambitus grob, which will contain all other grobs + (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '())) + ;; build the AmbitusLine grob (line between lower and upper note) + (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '())) + ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental + (for-each (lambda (direction) + (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '())) + (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '())) + (group (ambitus-group ambitus))) + ;; The parent of the AmbitusAccidental grob is the + ;; AmbitusNoteHead grob + (set! (ly:grob-parent accidental Y) head) + ;; The AmbitusAccidental grob is set as the accidental-grob + ;; object of the AmbitusNoteHead. This is later used by the + ;; function that prints notes. + (set! (ly:grob-object head 'accidental-grob) accidental) + ;; both the note head and the accidental grobs are added + ;; to the main ambitus grob. + (ly:axis-group-interface::add-element group head) + (ly:axis-group-interface::add-element group accidental) + ;; the note head and the accidental grobs are added to the + ;; ambitus object + (set! (ambitus-note-head (ambitus-note ambitus direction)) + head) + (set! (ambitus-note-accidental (ambitus-note ambitus direction)) + accidental))) + (list DOWN UP)) + ;; The parent of the ambitus line is the lower ambitus note head + (set! (ly:grob-parent (ambitus-line ambitus) X) + (ambitus-note-head (ambitus-note ambitus DOWN))) + ;; the ambitus line is added to the ambitus main grob + (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus)) + ambitus)) + +#(define-method (initialize-ambitus-state (ambitus ) translator) + "Initialize the state of @var{ambitus}, by getting the starting +position of middle C and key signature from @var{translator}'s context." + (if (not (ambitus-start-c0 ambitus)) + (begin + (set! (ambitus-start-c0 ambitus) + (ly:context-property (ly:translator-context translator) + 'middleCPosition + 0)) + (set! (ambitus-start-key-sig ambitus) + (ly:context-property (ly:translator-context translator) + 'keySignature))))) + +#(define-method (update-ambitus-notes (ambitus ) note-grob) + "Update the upper and lower ambitus pithes of @var{ambitus}, using +@var{note-grob}." + ;; Get the event that caused the note-grob creation + ;; and check that it is a note-event. + (let ((note-event (ly:grob-property note-grob 'cause))) + (if (ly:event::in-event-class note-event 'note-event) + ;; get the pitch from the note event + (let ((pitch (ly:event-property note-event 'pitch))) + ;; if this pitch is lower than the current ambitus lower + ;; note pitch (or it has not been initialized yet), + ;; then this pitch is the new ambitus lower pitch, + ;; and conversely for upper pitch. + (for-each (lambda (direction pitch-compare) + (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction))) + (pitch-compare pitch + (ambitus-note-pitch (ambitus-note ambitus direction)))) + (begin + (set! (ambitus-note-pitch (ambitus-note ambitus direction)) + pitch) + (set! (ambitus-note-cause (ambitus-note ambitus direction)) + note-event)))) + (list DOWN UP) + (list ly:pitch) translator) + "Typeset the ambitus: +- place the lower and upper ambitus notes according to their pitch and + the position of the middle C; +- typeset or delete the note accidentals, according to the key signature. + An accidental, if it is to be printed, is added to an AccidentalPlacement + grob (a grob dedicated to the placement of accidentals near a chord); +- both note heads are added to the ambitus line grob, so that a line should + be printed between them." + ;; check if there are lower and upper pitches + (if (and (ambitus-note-pitch (ambitus-note ambitus UP)) + (ambitus-note-pitch (ambitus-note ambitus DOWN))) + ;; make an AccidentalPlacement grob, for placement of note accidentals + (let ((accidental-placement (ly:engraver-make-grob + translator + 'AccidentalPlacement + (ambitus-note-accidental (ambitus-note ambitus DOWN))))) + ;; For lower and upper ambitus notes: + (for-each (lambda (direction) + (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction)))) + ;; set the cause and the staff position of the ambitus note + ;; according to the associated pitch + (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction)) + 'cause) + (ambitus-note-cause (ambitus-note ambitus direction))) + (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction)) + 'staff-position) + (+ (ambitus-start-c0 ambitus) + (ly:pitch-steps pitch))) + ;; determine if an accidental shall be printed for this note, + ;; according to the key signature + (let* ((handle (or (assoc (cons (ly:pitch-octave pitch) + (ly:pitch-notename pitch)) + (ambitus-start-key-sig ambitus)) + (assoc (ly:pitch-notename pitch) + (ambitus-start-key-sig ambitus)))) + (sig-alter (if handle (cdr handle) 0))) + (cond ((= (ly:pitch-alteration pitch) sig-alter) + ;; the note alteration is in the key signature + ;; => it does not have to be printed + (ly:grob-suicide! + (ambitus-note-accidental (ambitus-note ambitus direction))) + (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction)) + 'accidental-grob) + '())) + (else + ;; otherwise, the accidental shall be printed + (set! (ly:grob-property (ambitus-note-accidental + (ambitus-note ambitus direction)) + 'alteration) + (ly:pitch-alteration pitch))))) + ;; add the AccidentalPlacement grob to the + ;; conditional items of the AmbitusNoteHead + (ly:separation-item::add-conditional-item + (ambitus-note-head (ambitus-note ambitus direction)) + accidental-placement) + ;; add the AmbitusAccidental to the list of the + ;; AccidentalPlacement grob accidentals + (ly:accidental-placement::add-accidental + accidental-placement + (ambitus-note-accidental (ambitus-note ambitus direction))) + ;; add the AmbitusNoteHead grob to the AmbitusLine grob + (ly:pointer-group-interface::add-grob + (ambitus-line ambitus) + 'note-heads + (ambitus-note-head (ambitus-note ambitus direction))))) + (list DOWN UP)) + ;; add the AccidentalPlacement grob to the main Ambitus grob + (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement)) + ;; no notes ==> suicide the grobs + (begin + (for-each (lambda (direction) + (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction))) + (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction)))) + (list DOWN UP)) + (ly:grob-suicide! ambitus-line)))) + +%%% +%%% Ambitus engraver definition +%%% +#(define ambitus-engraver + (lambda (context) + (let ((ambitus #f)) + ;; when music is processed: make the ambitus object, if not already built + `((process-music . ,(lambda (translator) + (if (not ambitus) + (set! ambitus (make-ambitus translator))))) + ;; set the ambitus clef and key signature state + (stop-translation-timestep . ,(lambda (translator) + (if ambitus + (initialize-ambitus-state ambitus translator)))) + ;; when a note-head grob is built, update the ambitus notes + (acknowledgers + (note-head-interface . ,(lambda (engraver grob source-engraver) + (if ambitus + (update-ambitus-notes ambitus grob))))) + ;; finally, typeset the ambitus according to its upper and lower notes + ;; (if any). + (finalize . ,(lambda (translator) + (if ambitus + (typeset-ambitus ambitus translator)))))))) + +%%% +%%% Example +%%% + +\score { + \new StaffGroup << + \new Staff { c'4 des' e' fis' gis' } + \new Staff { \clef "bass" c4 des ~ des ees b, } + >> + \layout { \context { \Staff \consists #ambitus-engraver } } +} diff --git a/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly b/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly new file mode 100644 index 0000000000..8c8cc71438 --- /dev/null +++ b/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly @@ -0,0 +1,232 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Se pueden añadir diagramas de posiciones predefinidas para +instrumentos nuevos además de los estándar que se usan para la +guitarra. Este archivo muestra cómo se hace, definiendo una afinación +nueva y unas cuantas posiciones para el cuatro venezolano. + +Este archivo también muestra cómo se pueden incluir las digitaciones +en los acordes que se usan como puntos de referencia para la búsqueda +de acordes en la tabla, y mostrarse en el diagrama de posiciones y la +tablatura @code{TabStaff}, pero no en la música. + +Estas posiciones no se pueden transportar porque contienen información +de las cuerdas. Hay planes para corregir esto en un futuro. + +" + doctitlees = "Definición de posiciones predefinidas para otros instrumentos" + + +%% Translation of GIT committish: f23429bc5cfa9d141ef7b4509afc46c140308a1e + texidocde = " +Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden +neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel +zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte +Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro. + +Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden +werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden +kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, +aber nicht in den Noten angezeigt. + +Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen +enthalten. Das soll in der Zukunft verbessert werden. + +" + doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + + texidocfr = " +La liste des diagrammes standards prédéfinis pour la guitare peut être +augmentée d'autres définitions spécifiques à d'autres instruments. +Voici comment définir un nouvel accordage ainsi que quelques diagrammes +prédéfinis pour le @qq{cuatro vénézuélien}. + +Cet exemple illustre aussi la manière d'ajouter des doigtés aux +accords ; ils serviront de référence pour la boucle d'accord et seront +indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. + +Ces diagrammes ne peuvent pas être transposés, dans la mesure où ils +contiennent des informations sur les cordes. Ceci est amené à évoluer. + +" + doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments" + + + lsrtags = "fretted-strings" + +%% Translation of GIT committish: cde045f4e833aa491fb63f2222e14bef49507577 + texidoces = " + +Se pueden añadir diagramas de posiciones predefinidas para +instrumentos nuevos además de los estándar que se usan para la +guitarra. Este archivo muestra cómo se hace, definiendo una afinación +nueva y unas cuantas posiciones para el cuatro venezolano. + +Este archivo también muestra cómo se pueden incluir las digitaciones +en los acordes que se usan como puntos de referencia para la búsqueda +de acordes en la tabla, y mostrarse en el diagrama de posiciones y la +tablatura @code{TabStaff}, pero no en la música. + +Estas posiciones no se pueden transportar porque contienen información +de las cuerdas. Hay planes para corregir esto en un futuro. + +" + doctitlees = "Definición de posiciones predefinidas para otros instrumentos" + + +%% Translation of GIT committish: f23429bc5cfa9d141ef7b4509afc46c140308a1e + texidocde = " +Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden +neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel +zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte +Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro. + +Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden +werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden +kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, +aber nicht in den Noten angezeigt. + +Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen +enthalten. Das soll in der Zukunft verbessert werden. + +" + doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + + texidocfr = " +La liste des diagrammes standards prédéfinis pour la guitare peut être +augmentée d'autres définitions spécifiques à d'autres instruments. +Voici comment définir un nouvel accordage ainsi que quelques diagrammes +prédéfinis pour le @qq{cuatro vénézuélien}. + +Cet exemple illustre aussi la manière d'ajouter des doigtés aux +accords ; ils serviront de référence pour la boucle d'accord et seront +indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. + +Ces diagrammes ne peuvent pas être transposés, dans la mesure où ils +contiennent des informations sur les cordes. Ceci est amené à évoluer. + +" + doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments" + + + texidoc = " +Predefined fret diagrams can be added for new instruments in addition +to the standards used for guitar. This file shows how this is done by +defining a new string-tuning and a few predefined fretboards for the +Venezuelan cuatro. + +This file also shows how fingerings can be included in the chords used +as reference points for the chord lookup, and displayed in the fret +diagram and the @code{TabStaff}, but not the music. + + +These fretboards are not transposable because they contain string +information. This is planned to be corrected in the future. + +" + doctitle = "Defining predefined fretboards for other instruments" +} % begin verbatim + + +% add FretBoards for the Cuatro +% Note: This section could be put into a separate file +% predefined-cuatro-fretboards.ly +% and \included into each of your compositions + +cuatroTuning = #`(,(ly:make-pitch 0 6 0) + ,(ly:make-pitch 1 3 SHARP) + ,(ly:make-pitch 1 1 0) + ,(ly:make-pitch 0 5 0)) + +dSix = { } +dMajor = { } +aMajSeven = { } +dMajSeven = { } +gMajor = { } + +\storePredefinedDiagram #default-fret-table \dSix + #cuatroTuning + #"o;o;o;o;" +\storePredefinedDiagram #default-fret-table \dMajor + #cuatroTuning + #"o;o;o;3-3;" +\storePredefinedDiagram #default-fret-table \aMajSeven + #cuatroTuning + #"o;2-2;1-1;2-3;" +\storePredefinedDiagram #default-fret-table \dMajSeven + #cuatroTuning + #"o;o;o;1-1;" +\storePredefinedDiagram #default-fret-table \gMajor + #cuatroTuning + #"2-2;o;1-1;o;" + +% end of potential include file /predefined-cuatro-fretboards.ly + + +#(set-global-staff-size 16) + +primerosNames = \chordmode { + d:6 d a:maj7 d:maj7 + g +} +primeros = { + \dSix \dMajor \aMajSeven \dMajSeven + \gMajor +} + +\score { + << + \new ChordNames { + \set chordChanges = ##t + \primerosNames + } + + \new Staff { + \new Voice \with { + \remove "New_fingering_engraver" + } + \relative c'' { + \primeros + } + } + + \new FretBoards { + \set stringTunings = #cuatroTuning +% \override FretBoard +% #'(fret-diagram-details string-count) = #'4 + \override FretBoard + #'(fret-diagram-details finger-code) = #'in-dot + \primeros + } + + \new TabStaff \relative c'' { + \set TabStaff.stringTunings = #cuatroTuning + \primeros + } + + >> + + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } + \midi { } +} diff --git a/input/lsr/demo-midiinstruments.ly b/Documentation/snippets/demo-midiinstruments.ly similarity index 96% rename from input/lsr/demo-midiinstruments.ly rename to Documentation/snippets/demo-midiinstruments.ly index 27dd9c2ee6..e1ba733c2b 100644 --- a/input/lsr/demo-midiinstruments.ly +++ b/Documentation/snippets/demo-midiinstruments.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "midi" @@ -37,7 +41,7 @@ melody = { \layout { } } -\score { +\score { \new Staff << \new Voice { r\mf @@ -86,7 +90,7 @@ melody = { \set Staff.midiInstrument = #"contrabass" \melody \set Staff.midiInstrument = #"tremolo strings" \melody \set Staff.midiInstrument = #"pizzicato strings" \melody - \set Staff.midiInstrument = #"orchestral strings" \melody + \set Staff.midiInstrument = #"orchestral harp" \melody \set Staff.midiInstrument = #"timpani" \melody \set Staff.midiInstrument = #"string ensemble 1" \melody \set Staff.midiInstrument = #"string ensemble 2" \melody diff --git a/input/lsr/demonstrating-all-headers.ly b/Documentation/snippets/demonstrating-all-headers.ly similarity index 80% rename from input/lsr/demonstrating-all-headers.ly rename to Documentation/snippets/demonstrating-all-headers.ly index f7f12712e7..b20082f2b8 100644 --- a/input/lsr/demonstrating-all-headers.ly +++ b/Documentation/snippets/demonstrating-all-headers.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "text, paper-and-layout, titles" diff --git a/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly new file mode 100644 index 0000000000..61c64b4479 --- /dev/null +++ b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly @@ -0,0 +1,96 @@ +%% 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 = "staff-notation, tweaks-and-overrides" + +%% 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 +predeterminado es que no se imprima el corchete en la barra inicial. +Esto se puede cambiar sobreescribiendo las propiedades adecuadas. + +Observe que en contextos como @code{PianoStaff} y +@code{GrandStaff} en que los sistemas empiezan con una llave en +lugar de un corchete, se debe establecer el valor de una propiedad +distinta, como se ve en el segundo sistema del ejemplo. + +" + doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn nur ein System einer Systemgruppe vom Typ @code{ChoirStaff} oder +@code{StaffGroup} angezeigt wird, wird die Klammer zu Beginn normalerweise +nicht gesetzt. Das kann verändert werden, indem man die entsprechende +Eigenschaft verändert. + +Bei Systemen wie @code{PianoStaff} und @code{GrandStaff}, die mit einer +geschweiften Klammer beginne, muss eine andere Eigenschaft verändert werden, +wie das zweite Beispiel zeigt. + +" + doctitlede = "Klammer anzeigen wenn nur ein System gesetzt wird" + +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Lorsque, dans des regoupements de type @code{ChoirStaff} ou +@code{StaffGroup}, une seule portée est active, aucune indication n'est +donnée en début de ligne. Surcharger la propriété adéquate permet de +modifier ce comportement par défaut. + +Notez bien que dans le cas des @code{PianoStaff} et @code{GrandStaff}, +pour lesquels le délimiteur de système est une accolade et non un +crochet, il ne s'agit pas de la même propriété -- voir le deuxième +@emph{système} de l'exemple. + +" + doctitlefr = "Indicateur de regroupement et portée unique" + + + texidoc = " +If there is only one staff in one of the staff types @code{ChoirStaff} +or @code{StaffGroup}, the bracket and the starting bar line will not be +displayed as standard behavior. This can be changed by overriding the +relevant properties. + +Note that in contexts such as @code{PianoStaff} and @code{GrandStaff} +where the systems begin with a brace instead of a bracket, another +property has to be set, as shown on the second system in the example. + +" + doctitle = "Display bracket with only one staff in a system" +} % begin verbatim + +\markup \left-column { + \score { + \new StaffGroup << + % Must be lower than the actual number of staff lines + \override StaffGroup.SystemStartBracket #'collapse-height = #1 + \override Score.SystemStartBar #'collapse-height = #1 + \new Staff { + c'1 + } + >> + \layout { } + } + \null + \score { + \new PianoStaff << + \override PianoStaff.SystemStartBrace #'collapse-height = #1 + \override Score.SystemStartBar #'collapse-height = #1 + \new Staff { + c'1 + } + >> + \layout { } + } +} diff --git a/Documentation/snippets/displaying-complex-chords.ly b/Documentation/snippets/displaying-complex-chords.ly new file mode 100644 index 0000000000..f3cae3839d --- /dev/null +++ b/Documentation/snippets/displaying-complex-chords.ly @@ -0,0 +1,42 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +He aquí una forma de imprimir un acorde en el que suena la misma nota +dos veces con distintas alteraciones. + +" + doctitlees = "Impresión de acordes complejos" + + lsrtags = "simultaneous-notes, chords" + texidoc = " +Here is a way to display a chord where the same note is played twice +with different accidentals. +" + doctitle = "Displaying complex chords" +} % begin verbatim + + +fixA = { + \once \override Stem #'length = #9 +} +fixB = { + \once \override NoteHead #'X-offset = #1.7 + \once \override Stem #'rotation = #'(45 0 0) + \once \override Stem #'extra-offset = #'(-0.2 . -0.2) + \once \override Stem #'flag-style = #'no-flag + \once \override Accidental #'extra-offset = #'(4 . 0) +} + +\relative c' { + << { \fixA 8 } \\ { \voiceThree \fixB dis } >> s +} diff --git a/Documentation/snippets/displaying-grob-ancestry.ly b/Documentation/snippets/displaying-grob-ancestry.ly new file mode 100644 index 0000000000..30fb087b23 --- /dev/null +++ b/Documentation/snippets/displaying-grob-ancestry.ly @@ -0,0 +1,210 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Al trabajar con los callbacks de un grob, puede ser de mucha ayuda +entender el @qq{árbol genealógico} de un grob. La mayor parte de los +grobs tienen @qq{padres} que influyen en el posicionamiento del grob. +los padres X e Y influyen en las posiciones horizontal y vertical del +grob, respectivamente. Además, cada pade puede tener padres a su vez. + + +Por desgracia, existen varios aspectos de la genealogía de un grob que +pueden llevar a confusión: + + +@itemize + +@item Los tipos de padre que tiene un grob pueden depender del +contexto. + +@item Para ciertos grobs, los padres X e Y son el mismo. + +@item Un @qq{ancestro} concreto puede estar relacionado con un grob de +mas de una manera. + +@item El concepto de @qq{generaciones} es engañoso. + +@end itemize + + +Por ejemplo, el grob @code{System} puede ser tanto un padre (sobre el +lado Y) como un abuelo (dos veces en el lado X) de un grob +@code{VerticalAlignment}. + + +Este macro imprime, en la consola, una representación textual de la +genealogía de un grob. + + +Cuando se llama de esta forma + +@example +@{ + \\once \\override NoteHead #'before-line-breaking = #display-ancestry + c4 +@} +@end example + + +Se genera la siguiente salida: + + +@example +------------------------------------ + +NoteHead X,Y: NoteColumn + X: PaperColumn + X,Y: System + Y: VerticalAxisGroup + X: NonMusicalPaperColumn + X,Y: System + Y: VerticalAlignment + X: NonMusicalPaperColumn + X,Y: System + Y: System +@end example + +" + + doctitlees = "Imprimir el árbol genealógico de un grob" + + lsrtags = "tweaks-and-overrides" + + texidoc = " +When working with grob callbacks, it can be helpful to understand a +grob's @qq{ancestry}. Most grobs have @qq{parents} which influence the +positioning of the grob. X- and Y-parents influence the horizontal and +vertical positions for the grob, respectively. Additionally, each +parent may have parents of its own. + + +Unfortunately, there are several aspects of a grob's ancestry that can +lead to confusion: + + +@itemize + +@item +The types of parents a grob has may depend on context. + +@item +For some grobs, the X- and Y-parents are the same. + +@item +A particular @qq{ancestor} may be related to a grob in multiple ways. + +@item +The concept of @qq{generations} is misleading. + +@end itemize + + +For example, the @code{System} grob can be both parent (on the Y-side) +and grandparent (twice on the X-side) to a @code{VerticalAlignment} +grob. + + +This macro prints (to the console) a textual representation of a grob's +ancestry. + + +When called this way + +@example +@{ + \\once \\override NoteHead #'before-line-breaking = #display-ancestry + c4 +@} +@end example + + +The following output is generated: + + +@example +------------------------------------ + +NoteHead X,Y: NoteColumn + X: PaperColumn + X,Y: System + Y: VerticalAxisGroup + X: NonMusicalPaperColumn + X,Y: System + Y: VerticalAlignment + X: NonMusicalPaperColumn + X,Y: System + Y: System +@end example + + +" + doctitle = "Displaying grob ancestry" +} % begin verbatim + + +#(define (grob-name grob) + (if (ly:grob? grob) + (assoc-ref (ly:grob-property grob 'meta) 'name) + #f)) + +#(define (get-ancestry grob) + (if (not (null? (ly:grob-parent grob X))) + (list (grob-name grob) + (get-ancestry (ly:grob-parent grob X)) + (get-ancestry (ly:grob-parent grob Y))) + (grob-name grob))) + +#(define (format-ancestry lst padding) + (string-append + (symbol->string (car lst)) + "\n" + (let ((X-ancestry + (if (list? (cadr lst)) + (format-ancestry (cadr lst) (+ padding 3)) + (symbol->string (cadr lst)))) + (Y-ancestry + (if (list? (caddr lst)) + (format-ancestry (caddr lst) (+ padding 3)) + (symbol->string (caddr lst))))) + (if (equal? X-ancestry Y-ancestry) + (string-append + (format #f "~&") + (make-string padding #\space) + "X,Y: " + (if (list? (cadr lst)) + (format-ancestry (cadr lst) (+ padding 5)) + (symbol->string (cadr lst)))) + (string-append + (format #f "~&") + (make-string padding #\space) + "X: " X-ancestry + "\n" + (make-string padding #\space) + "Y: " Y-ancestry + (format #f "~&")))) + (format #f "~&"))) + +#(define (display-ancestry grob) + (display + (string-append + (format #f "~3&~a~2%" (make-string 36 #\-)) + (format-ancestry (get-ancestry grob) 0) + (format #f "~2&")))) + +\relative c' { + \once \override NoteHead #'before-line-breaking = #display-ancestry + f4 + \once \override Accidental #'before-line-breaking = #display-ancestry + \once \override Arpeggio #'before-line-breaking = #display-ancestry + 4\arpeggio +} diff --git a/Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly b/Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly new file mode 100644 index 0000000000..24838b7142 --- /dev/null +++ b/Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly @@ -0,0 +1,75 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +Webern (la @qq{Segunda} escuela de Viena), cada nota de la escala de +doce tonos se debe tratar con igualdad, sin ninguna jerarquía como los +grados clásicos tonales. Por tanto, estos compositores imprimen una +alteración accidental para cada nota, incluso en las notas naturales, +para enfatizar su nuevo enfoque de la teoría y el lenguaje musicales. + +Este fragmento de código muestra cómo conseguir dichas reglas de +notación. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " + In Werken des frühen 20. Jahrhundert, angefangen mit Schönberg, Berg + und Webern (die zweite Wiener Schule), wird jeder Ton der + Zwölftonleiter als gleichwertig erachtet, ohne hierarchische + Ordnung. Deshalb wird in dieser Musik für jede Note ein Versetzungszeichen + ausgegeben, auch für unalterierte Tonhöhen, um das neue Verständnis + der Musiktheorie und Musiksprache zu verdeutlichen. + + Dieser Schnipsel zeigt, wie derartige Notationsregeln zu erstellen sind. + " + doctitlede = "Versetzungszeichen für jede Note im Stil der Zwölftonmusik" + +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +Au début du XXème siècle, Schoenberg, Berg et Webern -- la « Seconde » +école de Vienne -- imaginèrent de donner une importance comparable aux +douze notes de la gamme chromatique, et éviter ainsi toute tonalité. +Pour ce faire, ces compositions font apparaître une altération à chaque +note, y compris un bécarre, pour mettre en exergue cette nouvelle +approche de la théorie et du langage musicaux. + +Voici comment obtenir une telle notation. + +" + doctitlefr = "Le dodécaphonisme : toute note est altérée" + + + lsrtags = "pitches" + texidoc = " +In early 20th century works, starting with Schoenberg, Berg and Webern +(the @qq{Second} Viennese school), every pitch in the twelve-tone scale +has to be regarded as equal, without any hierarchy such as the +classical (tonal) degrees. Therefore, these composers print one +accidental for each note, even at natural pitches, to emphasize their +new approach to music theory and language. + +This snippet shows how to achieve such notation rules. + +" + doctitle = "Dodecaphonic-style accidentals for each note including naturals" +} % begin verbatim + + +\markup { + This snippet is deprecated as of version 2.12 and + will be removed from the documentation in 2.14. +} + diff --git a/Documentation/snippets/dotted-harmonics.ly b/Documentation/snippets/dotted-harmonics.ly new file mode 100644 index 0000000000..bd942ce2bc --- /dev/null +++ b/Documentation/snippets/dotted-harmonics.ly @@ -0,0 +1,28 @@ +%% 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 = "unfretted-strings, tweaks-and-overrides" + + texidoc = " +Artificial harmonics using @code{\\harmonic} do not show dots. To +override this behavior, set the context property @code{harmonicDots}. + +" + doctitle = "Dotted harmonics" +} % begin verbatim + +\relative c''' { + \time 3/4 + \key f \major + \set harmonicDots = ##t + 2. ~ + 4. 8( ) + 2. + 2. +} diff --git a/Documentation/snippets/double-glissando.ly b/Documentation/snippets/double-glissando.ly new file mode 100644 index 0000000000..dfae532646 --- /dev/null +++ b/Documentation/snippets/double-glissando.ly @@ -0,0 +1,37 @@ +%% 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 = "expressive-marks, simultaneous-notes" + + texidoc = " +To connect chords with glissando lines, attach a second glissando to a +hidden voice. + +" + doctitle = "Double glissando" +} % begin verbatim + +\relative c { + \clef bass + << + { + % new voice ( = \voiceOne), hidden + \hideNotes + % attach glissando to note heads + e2\glissando g + } + \\ + { + % original voice with chords rearranged so that + % glissando is attached to a & c + 2\glissando + } + >> +} + diff --git a/Documentation/snippets/drawing-boxes-around-grobs.ly b/Documentation/snippets/drawing-boxes-around-grobs.ly new file mode 100644 index 0000000000..ff05bfb0d5 --- /dev/null +++ b/Documentation/snippets/drawing-boxes-around-grobs.ly @@ -0,0 +1,38 @@ +%% 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 = "editorial-annotations, tweaks-and-overrides" + + texidoc = " +The @code{print-function} can be overridden to draw a box around an +arbitrary grob. + +" + doctitle = "Drawing boxes around grobs" +} % begin verbatim + +\relative c'' { + \override TextScript #'stencil = + #(make-stencil-boxer 0.1 0.3 ly:text-interface::print) + c'4^"foo" + + \override Stem #'stencil = + #(make-stencil-boxer 0.05 0.25 ly:stem::print) + \override Score.RehearsalMark #'stencil = + #(make-stencil-boxer 0.15 0.3 ly:text-interface::print) + b8 + + \revert Stem #'stencil + c4. c4 + \mark "F" + c1 +} + + + diff --git a/Documentation/snippets/drawing-circles-around-note-heads.ly b/Documentation/snippets/drawing-circles-around-note-heads.ly new file mode 100644 index 0000000000..dc677772d2 --- /dev/null +++ b/Documentation/snippets/drawing-circles-around-note-heads.ly @@ -0,0 +1,29 @@ +%% 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 = "editorial-annotations" + + texidoc = " +Here is how to circle a note. + +" + doctitle = "Drawing circles around note heads" +} % begin verbatim + +circle = +\once \override NoteHead #'stencil = #(lambda (grob) + (let* ((note (ly:note-head::print grob)) + (combo-stencil (ly:stencil-add + note + (circle-stencil note 0.1 0.8)))) + (ly:make-stencil (ly:stencil-expr combo-stencil) + (ly:stencil-extent note X) + (ly:stencil-extent note Y)))) + +{ \circle c' } diff --git a/input/lsr/drawing-circles-around-various-objects.ly b/Documentation/snippets/drawing-circles-around-various-objects.ly similarity index 78% rename from input/lsr/drawing-circles-around-various-objects.ly rename to Documentation/snippets/drawing-circles-around-various-objects.ly index ac97adbee9..773804c656 100644 --- a/input/lsr/drawing-circles-around-various-objects.ly +++ b/Documentation/snippets/drawing-circles-around-various-objects.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "editorial-annotations, tweaks-and-overrides" @@ -21,6 +25,7 @@ strategies for rehearsal marks and measure numbers. #(lambda (mark context) (make-circle-markup (format-mark-numbers mark context))) \mark \default + c2 d^\markup { \override #'(thickness . 3) { \circle \finger 2 diff --git a/Documentation/snippets/dynamics-custom-text-spanner-postfix.ly b/Documentation/snippets/dynamics-custom-text-spanner-postfix.ly new file mode 100644 index 0000000000..fc4b01f2fb --- /dev/null +++ b/Documentation/snippets/dynamics-custom-text-spanner-postfix.ly @@ -0,0 +1,80 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Funciones postfijas para la creación de objetos de extensión de texto +personalizados. Los objetos de extensión deben comenzar en la primera +nota del compás. Hay que utilizar -\mycresc, en caso contrario el +comienzo del eobjeto de extensión se asignará a la nota siguiente. + +" + + doctitlees = "Objeto personalizado de extensión de texto de matices dinámicos postfijo" + +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde = "Die Nachstellung funktioniert für eigene Crescendo-Textstrecker. +Die Strecker sollten an der ersten Note eines Taktes beginnen. Man muss +-\mycresc benutzen, sonst wird der Beginn des Streckers der nächsten Note +zugewiesen. + +" + doctitlede = "Eigene Dynamiktextspanner nachgestellt" + + +%% Translation of GIT committish: a06cb0b0d9593ba110e001f2b0f44b8bef084693 + + texidocfr = " +Il s'agit de fonctions postfix pour personnaliser l'extension des +crescendos textuels. L'extension devrait débuter sur la première notte +de la mesure. Il faut utiliser @code{-\mycresc} -- comme une +articulation -- sous peine que le départ de l'extension n'apparaisse +qu'à la note suivante. +" + + doctitlefr = "Personnalisation des extenseurs de nuance postfix" + + + lsrtags = "expressive-marks, tweaks-and-overrides" + texidoc = "Postfix functions for custom crescendo text spanners. The spanners +should start on the first note of the measure. One has to use -\mycresc, +otherwise the spanner start will rather be assigned to the next note. +" + doctitle = "Dynamics custom text spanner postfix" +} % begin verbatim + + +% Two functions for (de)crescendo spanners where you can explicitly give the +% spanner text. +mycresc = +#(define-music-function (parser location mymarkup) (markup?) + (make-music 'CrescendoEvent + 'span-direction START + 'span-type 'text + 'span-text mymarkup)) +mydecresc = +#(define-music-function (parser location mymarkup) (markup?) + (make-music 'DecrescendoEvent + 'span-direction START + 'span-type 'text + 'span-text mymarkup)) + +\relative c' { + c4-\mycresc "custom cresc" c4 c4 c4 | + c4 c4 c4 c4 | + c4-\mydecresc "custom decresc" c4 c4 c4 | + c4 c4\! c4 c4 +} + + + diff --git a/Documentation/snippets/dynamics-text-spanner-postfix.ly b/Documentation/snippets/dynamics-text-spanner-postfix.ly new file mode 100644 index 0000000000..b35749a052 --- /dev/null +++ b/Documentation/snippets/dynamics-text-spanner-postfix.ly @@ -0,0 +1,76 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Los objetos de extensión \cresc, \dim y \decresc ahora se pueden +redefinir como operadores postfijos y producir un solo objeto de +extensión de texto. La definición de extensores personalizados +también es fácil. Se pueden mezclar con facilidad los crescendi +textuales y en forma de reguladores. \< y \> producen reguladores +gráficos de forma predeterminada, \cresc etc. producen elementos +extensores de texto de forma predeterminada. + +" + + doctitlees = "Objetos extensores de texto postfijos para dinámica" + +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde = "Die \cresc, \dim und \decresc Strecker können umdefiniert werden, +um nachgestellt zu funktionieren und einen Textstrecker zu produzieren. Eigene +Strecker können auch einfach definiert werden. Klammer- und Textcrescendi können +einfach vermischt werden. \< und \> erstellen normalerweise Klammern, \cresc +usw. dagegen normalerweise Textspanner. + +" + doctitlede = "Dynamiktextstrecker nachgestellt" + + + +%% Translation of GIT committish: a06cb0b0d9593ba110e001f2b0f44b8bef084693 + + texidocfr = " +Les lignes d'extension des commandes \cresc, \dim et \decresc peuvent +désormais être personnalisées facilement sous forme d'opérateurs +postfix. Soufflets et (de)crescendos peuvent cohabiter. \< et \> +produiront par défaut des soufflets, alors que \cresc etc. produiront +une indication textuelle avec extension. + +" + + doctitlefr = "Extensions de nuance postfix" + + + lsrtags = "expressive-marks, tweaks-and-overrides" + texidoc = "Custom text spanners can be defined and used with hairpin + and text crescendos. @code{\<} and @code{\>} produce hairpins by + default, @code{\\cresc} etc. produce text spanners by default." + doctitle = "Dynamics text spanner postfix" +} % begin verbatim + + +% Some sample text dynamic spanners, to be used as postfix operators +crpoco = +#(make-music 'CrescendoEvent + 'span-direction START + 'span-type 'text + 'span-text "cresc. poco a poco") + +\relative c' { + c4\cresc d4 e4 f4 | + g4 a4\! b4\crpoco c4 | + c4 d4 e4 f4 | + g4 a4\! b4\< c4 | + g4\dim a4 b4\decresc c4\! +} + diff --git a/input/lsr/editorial-annotations-intro.itely b/Documentation/snippets/editorial-annotations-intro.itely similarity index 100% rename from input/lsr/editorial-annotations-intro.itely rename to Documentation/snippets/editorial-annotations-intro.itely diff --git a/input/lsr/editorial-annotations.snippet-list b/Documentation/snippets/editorial-annotations.snippet-list similarity index 81% rename from input/lsr/editorial-annotations.snippet-list rename to Documentation/snippets/editorial-annotations.snippet-list index f665b3bf67..29a4aa8df2 100644 --- a/input/lsr/editorial-annotations.snippet-list +++ b/Documentation/snippets/editorial-annotations.snippet-list @@ -12,14 +12,19 @@ creating-a-delayed-turn.ly creating-blank-staves.ly default-direction-of-stems-on-the-center-line-of-the-staff.ly drawing-boxes-around-grobs.ly +drawing-circles-around-note-heads.ly drawing-circles-around-various-objects.ly embedding-native-postscript-in-a--markup-block.ly grid-lines--changing-their-appearance.ly grid-lines--emphasizing-rhythms-and-notes-synchronization.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly making-some-staff-lines-thicker-than-the-others.ly marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly measure-counter.ly positioning-fingering-indications-precisely.ly positioning-text-markups-inside-slurs.ly printing-text-from-right-to-left.ly +string-number-extender-lines.ly using-postscript-to-generate-special-note-head-shapes.ly +using-the-whiteout-property.ly diff --git a/Documentation/snippets/editorial-headword.ly b/Documentation/snippets/editorial-headword.ly new file mode 100644 index 0000000000..bde46b8f21 --- /dev/null +++ b/Documentation/snippets/editorial-headword.ly @@ -0,0 +1,107 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +% NR 1.7 Editorial annotations + +% Beethoven, Op. 31, No. 3 +% Piano sonata 18, Movt II, Scherzo +% Measures 9 - 14 + +\new PianoStaff << + + % RH Staff + \new Staff { + \clef treble + \key af \major + \time 2/4 + \set Staff.fingeringOrientations = #'(up) + \set Score.currentBarNumber = #9 + \partial 8 + 8 \staccato + | + \set doubleSlurs = ##t + 4 ( + 8 \staccato ) + \noBeam + c''8-5 \staccato \pp + | + \set doubleSlurs = ##f + bf'8.. ( + af'32 + g'8 ) \staccato + f'8 \staccato + | + e'4-2 + r8 + \once \override Script #'script-priority = #-100 + \afterGrace + f'8 ( \trill ^ \markup { \finger "3-2" } + { e'16 [ f'16 ] } + | + g'8..-3 + f'32 + e'8-1 ) \staccato + d'8-2 \staccato + | + c'4 + r4 + } + + % LH Staff + \new Staff { + \key af \major + \clef treble + \override Fingering #'direction = #down + \set Staff.fingeringOrientations = #'(down) + \partial 8 + 8 \staccato + \set doubleSlurs = ##t + 4 ( + 8 ) \staccato + \noBeam + \clef bass + c'8-1 \staccato + | + \set doubleSlurs = ##f + bf8.. ( + af32 + g8-1 ) \staccato + f8 \staccato + | + e4 + r8 + \afterGrace + f8 ( \trill _ \markup { \finger "2-1" } + { e16 [ f16 ] } + | + g8..-1 + f32 + e8 ) \staccato + d8 \staccato + | + c4 + r4 + } + +>> diff --git a/Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly b/Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly new file mode 100644 index 0000000000..fe30d0419d --- /dev/null +++ b/Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly @@ -0,0 +1,38 @@ +%% 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 = "editorial-annotations, text" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede insertar códico PostScript directamente dentro de un +bloque @code{\\markup}. + +" + doctitlees = "Empotrar PostScript nativo dentro de un bloque \\markup" + + texidoc = " +PostScript code can be directly inserted inside a @code{\\markup} +block. + +" + doctitle = "Embedding native PostScript in a \\markup block" +} % begin verbatim + +% PostScript is a registered trademark of Adobe Systems Inc. + +\relative c'' { + a4-\markup { \postscript #"3 4 moveto 5 3 rlineto stroke" } + -\markup { \postscript #"[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " } + + b4-\markup { \postscript #"3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" } + s2 + a'1 +} + diff --git a/Documentation/snippets/engravers-one-by-one.ly b/Documentation/snippets/engravers-one-by-one.ly new file mode 100644 index 0000000000..06d81b57b1 --- /dev/null +++ b/Documentation/snippets/engravers-one-by-one.ly @@ -0,0 +1,310 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +uno de los complementos se conoce como un grabador. En este +ejemplo, los grabadores se van activando uno por uno, en el orden +siguiente: + +- cabeza de las notas, + +- el símbolo del pentagrama, + +- clave, + +- plicas, + +- barras, ligaduras de expresión, acentos, + +- alteraciones, líneas divisorias, indicación del compás, y armadura. + +Los grabadores se encuentran agrupados. Por ejemplo, las cabezas de +nota, ligaduras de expresión, barras de corchea, etc. forman un +contexto de voz, @code{Voice}. Los grabadores de la armadura, +alteraciones, líneas de compás, etc. forman un contexto de pentagrama, +@code{Staff}. + +" + doctitlees = "Los grabadores uno por uno" + + lsrtags = "contexts-and-engravers" + + texidoc = " +The notation problem, creating a certain symbol, is handled by plugins. + Each plugin is called an Engraver. In this example, engravers are +switched on one by one, in the following order: + +- note heads, + + +- staff symbol, + + +- clef, + + +- stem, + + +- beams, slurs, accents, + + +- accidentals, bar lines, time signature and key signature. + + + +Engravers are grouped. For example, note heads, slurs, beams etc. form +a @code{Voice} context. Engravers for key signature, accidentals, bar +line, etc. form a @code{Staff} context. + +" + doctitle = "Engravers one-by-one" +} % begin verbatim + + +%% sample music +topVoice = \relative c' { + \key d \major + es8([ g] a[ fis]) + b4 + b16[-. b-. b-. cis-.] + d4-> +} % begin verbatim + + +botVoice = \relative c' { + \key d \major + c8[( f] b[ a)] + es4 + es16[-. es-. es-. fis-.] + b4-> +} + +hoom = \relative c { + \key d \major + \clef bass + g8-. r + r4 + fis8-. + r8 + r4 + b'4-> +} + +pah = \relative c' { + r8 b-. + r4 + r8 g8-. + r16 g-. r8 + \clef treble + fis'4-> +} + +% +% setup for Request->Element conversion. Guru-only +% + +MyStaff = \context { + \type "Engraver_group" + \name Staff + + \description "Handles clefs, bar lines, keys, accidentals. It can contain +@code{Voice} contexts." + + \consists "Output_property_engraver" + + \consists "Font_size_engraver" + + \consists "Volta_engraver" + \consists "Separating_line_group_engraver" + \consists "Dot_column_engraver" + + \consists "Ottava_spanner_engraver" + \consists "Rest_collision_engraver" + \consists "Piano_pedal_engraver" + \consists "Piano_pedal_align_engraver" + \consists "Instrument_name_engraver" + \consists "Grob_pq_engraver" + \consists "Forbid_line_break_engraver" + \consists "Axis_group_engraver" + + \consists "Pitch_squash_engraver" + + localKeySignature = #'() + + % explicitly set instrumentName, so we don't get + % weird effects when doing instrument names for + % piano staves + + instrumentName = #'() + shortInstrumentName = #'() + + \accepts "Voice" +} + + +MyVoice = \context { + \type "Engraver_group" + \name Voice + + \description " + Corresponds to a voice on a staff. This context handles the + conversion of dynamic signs, stems, beams, super- and subscripts, + slurs, ties, and rests. + + You have to instantiate this explicitly if you want to have + multiple voices on the same staff." + + localKeySignature = #'() + \consists "Font_size_engraver" + + % must come before all + \consists "Output_property_engraver" + \consists "Arpeggio_engraver" + \consists "Multi_measure_rest_engraver" + \consists "Text_spanner_engraver" + \consists "Grob_pq_engraver" + \consists "Note_head_line_engraver" + \consists "Glissando_engraver" + \consists "Ligature_bracket_engraver" + \consists "Breathing_sign_engraver" + % \consists "Rest_engraver" + \consists "Grace_beam_engraver" + \consists "New_fingering_engraver" + \consists "Chord_tremolo_engraver" + \consists "Percent_repeat_engraver" + \consists "Slash_repeat_engraver" + + %{ + Must come before text_engraver, but after note_column engraver. + %} + \consists "Text_engraver" + \consists "Dynamic_engraver" + \consists "Fingering_engraver" + + \consists "Script_column_engraver" + \consists "Rhythmic_column_engraver" + \consists "Cluster_spanner_engraver" + \consists "Tie_engraver" + \consists "Tie_engraver" + \consists "Tuplet_engraver" + \consists "Note_heads_engraver" + \consists "Rest_engraver" +} + + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + + +MyStaff = \context { + \MyStaff + \consists "Staff_symbol_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Clef_engraver" + \remove "Pitch_squash_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Stem_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Beam_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Phrasing_slur_engraver" + \consists "Slur_engraver" + \consists "Script_engraver" +} + + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Bar_engraver" + \consists "Time_signature_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Accidental_engraver" + \consists "Key_engraver" +} +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + diff --git a/Documentation/snippets/engraving-ties-manually.ly b/Documentation/snippets/engraving-ties-manually.ly new file mode 100644 index 0000000000..4306b711c1 --- /dev/null +++ b/Documentation/snippets/engraving-ties-manually.ly @@ -0,0 +1,63 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Grabado manual de las ligaduras" + texidoces = " +Se pueden grabar a mano las ligaduras modificando la propiedad +@code{tie-configuration} del objeto @code{TieColumn}. El primer número +indica la distancia a partir de la tercera línea del pentagrama en +espacios de pentagrama, y el segundo número indica la dirección (1 = +hacia arriba, -1 = hacia abajo). + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Überbindungen können manuell gesetzt werden, indem man die +@code{tie-configuration}-Eigenschaft des @code{TieColumn}-Objekts +beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in +Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben, +-1 = nach unten). + +" + doctitlede = "Bindebögen manuell setzen" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Il est possible de graver manuellement les liaisons de tenue, en +modifiant la propriété @code{tie-configuration}. Pour chaque paire, le +premier nombre indique la distance à la portée, en espaces de portée, et +le second la direction (1 pour haut, @minus{}1 pour bas). + +" + doctitlefr = "Dessin à main levée de liaisons de tenue" + + texidoc = " +Ties may be engraved manually by changing the @code{tie-configuration} +property of the @code{TieColumn} object. The first number indicates the +distance from the center of the staff in staff-spaces, and the second +number indicates the direction (1 = up, -1 = down). + +" + doctitle = "Engraving ties manually" +} % begin verbatim + +\relative c' { + 2 ~ + \override TieColumn #'tie-configuration = + #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1)) + 2 ~ +} + diff --git a/input/lsr/engraving-tremolos-with-floating-beams.ly b/Documentation/snippets/engraving-tremolos-with-floating-beams.ly similarity index 83% rename from input/lsr/engraving-tremolos-with-floating-beams.ly rename to Documentation/snippets/engraving-tremolos-with-floating-beams.ly index 655b976318..bf6981d212 100644 --- a/input/lsr/engraving-tremolos-with-floating-beams.ly +++ b/Documentation/snippets/engraving-tremolos-with-floating-beams.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "rhythms, repeats" diff --git a/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly b/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly new file mode 100644 index 0000000000..29cd39df15 --- /dev/null +++ b/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly @@ -0,0 +1,85 @@ +%% 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 = "rhythms" + +%% 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 +cada grupo de valoración especial contenido dentro del corchete que +aparece después de @code{\\times}. Así, se pueden escribir muchos +tresillos seguidos dentro de una sola expresión @code{\\times}, +ahorrando trabajo de teclado. + +En el ejemplo se muestran dos tresillos, aunque se ha escrito +@code{\\times} una sola vez. + + +Para ver más inforamción sobre @code{make-moment}, véase la sección +correspondiente del manual de Referencia de la Notación. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede +der N-tolen innerhalb der Klammern nach dem @code{\\times}-Befehl +dauert. Auf diese Art können etwa viele Triolen nacheinander mit nur +einem @code{\\times}-Befehl geschrieben werden. + +Im Beispiel sind zwei Triolen zu sehen, obwohl @code{\\times} nur +einmal geschrieben wurde. + +Mehr Information über @code{make-moment} gibt es in \"Verwaltung der Zeiteinheiten\". + +" + doctitlede = "Mehrere Triolen notieren aber nur einmal \\times benutzen" + + + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de +chaque crochet. Avec elle, vous pouvez faire plusieurs nolets en ne +tapant @code{\\times} qu'une fois, ce qui évite une longue saisie. + +Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction +@code{\\times}. + +Pour plus d'information sur @code{make-moment}, voir la section +appropriée du manuel de notation. + +" + doctitlefr = "Plusieurs triolets avec une seule commande \\times" + + texidoc = " +The property @code{tupletSpannerDuration} sets how long each of the +tuplets contained within the brackets after @code{\\times} should last. +Many consecutive tuplets can then be placed within a single +@code{\\times} expression, thus saving typing. + +In the example, two triplets are shown, while @code{\\times} was +entered only once. + + +Read the relevant sections of the Notation Reference for more +information about @code{ly:make-moment}. + +" + doctitle = "Entering several tuplets using only one \\times command" +} % begin verbatim + +\relative c' { + \time 2/4 + \set tupletSpannerDuration = #(ly:make-moment 1 4) + \times 2/3 { c8 c c c c c } +} + diff --git a/Documentation/snippets/expressive-headword.ly b/Documentation/snippets/expressive-headword.ly new file mode 100644 index 0000000000..f9ed38c03d --- /dev/null +++ b/Documentation/snippets/expressive-headword.ly @@ -0,0 +1,278 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 1.3 Expressive marks + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +% L. v. Beethoven, Op. 49 no. 1 +% Piano sonata 19 - "Leichte Sonate" +% measures 1 - 12 + +%\layout { +% \context { +% \Score +% \override SpacingSpanner #'base-shortest-duration = +% #(ly:make-moment 1 20) +% } +%} + +\new PianoStaff << + + % RH Staff + \new Staff { + \clef treble + \key g \major + \time 6/8 + \partial 2 + \once \override TextScript #'staff-padding = #2 + d'8 \staccato + ^ \markup { \column { + RONDO + \italic Allegro } } + d'8 \staccato + g'8 \staccato + a'8 \staccato + + | + + b'8 [ ( + g'8 ] ) + e'8 \staccato + e' \staccato + a'8 \staccato + b'8 \staccato + + | + + c''8 [ ( + a'8 ] ) + e''8 \staccato + d''8 \staccato + c''8 \staccato + b'8 \staccato + + | + + a'8 \staccato + g'8 \staccato + a'8 \staccato + \acciaccatura { g'16 [ a'16 ] } + bf'8 + a'8 \staccato + g'8 \staccato + + | + + fs'8 [ ( + d'8 ] ) + d'8 \staccato + d'8 \staccato + g'8 \staccato + a'8 \staccato + + | + + b'8 [ ( + g'8 ] ) + e'8 \staccato + e'8 \staccato + a'8 \staccato + b'8 \staccato + + | + + c''8 [ ( + a'8 ] ) + e''8 \staccato + d''8 \staccato + c''8 \staccato + b'8 \staccato + + | + + a'8 \staccato + g'8 \staccato + a'8 \staccato + << + { + \voiceOne + d'8 + g'8 + fs'8 + \oneVoice + } + \new Voice { + \voiceTwo + d'4 + c'8 + \oneVoice + } + >> + + | + + 4 \tenuto + d'8 \staccato + g'8 \staccato + b'8 \staccato + d''8 \staccato + + | + + d''8 ( + 8 \staccato ) + 8 \staccato + d''8 ( + 8 \staccato ) + 8 \staccato + + | + + d''8 ( + 8 \staccato ) + 8 \staccato + d''8 ( + 8 \staccato ) + 8 \staccato + + | + + d''8 \staccato + 8 \staccato + 8 \staccato + d'' \staccato + 8 \staccato + 8 \staccato + + | + + 4 \fermata + r8 r4 r8 + } + + % LH Staff + \new Staff { + \clef bass + \key g \major + \time 6/8 + \partial 2 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 8 \staccato + 8 \staccato + 8 \staccato + 4. ( + + | + + d'4 ) + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 8 \staccato + 8 \staccato + 8 \staccato + 4 + 8 \staccato + + | + + 4 \tenuto + r8 + r4 + r8 + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + 4 \fermata + r8 r4 r8 + } + +>> diff --git a/input/lsr/expressive-marks-intro.itely b/Documentation/snippets/expressive-marks-intro.itely similarity index 100% rename from input/lsr/expressive-marks-intro.itely rename to Documentation/snippets/expressive-marks-intro.itely diff --git a/Documentation/snippets/expressive-marks.snippet-list b/Documentation/snippets/expressive-marks.snippet-list new file mode 100644 index 0000000000..aa06de0d48 --- /dev/null +++ b/Documentation/snippets/expressive-marks.snippet-list @@ -0,0 +1,54 @@ +adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly +adding-parentheses-around-an-expressive-mark-or-chordal-note.ly +adjusting-the-shape-of-falls-and-doits.ly +alternative-breve-note.ly +asymmetric-slurs.ly +breathing-signs.ly +broken-crescendo-hairpin.ly +caesura-railtracks-with-fermata.ly +center-text-below-hairpin-dynamics.ly +changing--flageolet-mark-size.ly +changing-text-and-spanner-styles-for-text-dynamics.ly +changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly +changing-the-breath-mark-symbol.ly +changing-the-number-of-augmentation-dots-per-note.ly +combining-dynamics-with-markup-texts.ly +contemporary-glissando.ly +controlling-spanner-visibility-after-a-line-break.ly +controlling-the-vertical-ordering-of-scripts.ly +creating-a-delayed-turn.ly +creating-arpeggios-across-notes-in-different-voices.ly +creating-cross-staff-arpeggios-in-a-piano-staff.ly +creating-cross-staff-arpeggios-in-other-contexts.ly +creating-real-parenthesized-dynamics.ly +creating-simultaneous-rehearsal-marks.ly +creating-slurs-across-voices.ly +creating-text-spanners.ly +double-glissando.ly +dynamics-custom-text-spanner-postfix.ly +dynamics-text-spanner-postfix.ly +hairpins-with-different-line-styles.ly +hiding-the-extender-line-for-text-dynamics.ly +horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly +inserting-a-caesura.ly +laissez-vibrer-ties.ly +line-arrows.ly +making-slurs-with-complex-dash-structure.ly +modifying-default-values-for-articulation-shorthand-notation.ly +moving-slur-positions-vertically.ly +piano-template-with-centered-dynamics.ly +positioning-arpeggios.ly +positioning-text-markups-inside-slurs.ly +printing-hairpins-using-al-niente-notation.ly +printing-metronome-and-rehearsal-marks-below-the-staff.ly +setting-hairpin-behavior-at-bar-lines.ly +setting-the-minimum-length-of-hairpins.ly +showing-the-same-articulation-above-and-below-a-note-or-chord.ly +snap-pizzicato-bartok-pizzicato.ly +using-arpeggiobracket-to-make-divisi-more-visible.ly +using-double-slurs-for-legato-chords.ly +using-the-whiteout-property.ly +vertical-line-as-a-baroque-articulation-mark.ly +vertically-aligning-dynamics-across-multiple-notes.ly diff --git a/Documentation/snippets/faking-a-hammer-in-tablatures.ly b/Documentation/snippets/faking-a-hammer-in-tablatures.ly new file mode 100644 index 0000000000..ad838c2205 --- /dev/null +++ b/Documentation/snippets/faking-a-hammer-in-tablatures.ly @@ -0,0 +1,37 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de +expresión. + +" + + doctitlees = "Simular un hammer o ligado ascendente en una tablatura" + + lsrtags = "fretted-strings" + texidoc = " +A hammer in tablature can be faked with slurs. +" + doctitle = "Faking a hammer in tablatures" +} % begin verbatim + + +\score { + \new TabStaff { + \relative c'' { + \tabFullNotation + c4( d) d( d) + d2( c) + } + } +} diff --git a/Documentation/snippets/figured-bass-headword.ly b/Documentation/snippets/figured-bass-headword.ly new file mode 100644 index 0000000000..40d2973706 --- /dev/null +++ b/Documentation/snippets/figured-bass-headword.ly @@ -0,0 +1,120 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +#(set-global-staff-size 15) +\paper { + ragged-right = ##f + line-width = 16\cm + indent = 1.5\cm +} + +% NR 2.7.3 Figured bass + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +% Arcangelo Corelli, 12 Sonate da Camera, Op. 2 +% Sonata II, Allemanda +% measures 1 - 88 +% Coded by Neil Puttock; modified by Carl Sorensen + +extendOn = \bassFigureExtendersOn +extendOff = \bassFigureExtendersOff + +\score { + + \new StaffGroup << + + \new GrandStaff << + + \new Staff = "violinoI" { + \set Staff.instrumentName = \markup { + \line { Violino I. } + } + \time 4/4 + \mark \markup { \italic Adagio. } + \partial 8 + r16 a'16 | + a'8. [ d''16 d''8. e''16 ] cis''8 a'4 a''16 bes''16 | + cis''8 d''16 ( e'' ) e''8. d''16 d''4 r8 d''16 e''16 | + f''8 f''4 g''16 ( f''16 ) e''8 e''4 f''16 ( e''16 ) | + d''8. d''16 g''16 ( f''16 ) e''16 ( d''16 ) cis''8 + cis''4 cis''16 cis''16 | + d''8 d''8 c''8. c''16 c''8 ( b'4 ) b'16 b'16 | + c''8 c''8 bes'8. bes'16 bes'8 ( a'4 ) a''16 a''16 | + a''8 g''8 g''8. g''16 g''8 ( f''8 ) r8 f''8 | + } + + \new Staff = "violinoII" { + \set Staff.instrumentName = \markup { + \line { Violino II. } + } + \time 4/4 + \partial 8 + r16 f'16 | + f'8. g'16 g'4 a'4 r8 d''16 d''16 | + e''8 a'8 cis''8. d''16 d''4 r8 f''16 g''16 | + a''8 a''8 d''8. d''16 g'8 g'8 c''8. c''16 | + f'8. f''16 bes''16 ( a''16 ) g''16 ( f''16 ) e''8 e''4 e''16 e''16 | + a'8 fis''8 g''8 a''8 d''8 d''4 d''16 d''16 | + g'8 e''8 f''8 g''8 c''8 c''4 cis''16 cis''16 | + d''8 d''8 e''8. e''16 e''8 a'8 r8 d''8 | + } + + >> + + \new Staff = "violone" { + \set Staff.instrumentName = \markup { + \center-column { + Violone, + \line { e Cembalo. } + } + } + \time 4/4 + \clef bass + \partial 8 + r16 d16 | + d4 bes,4 a,4 f4 | + g8 f16 g16 a8 a,8 d4 d'4 ~ | + d'8 c'8 b4 c'8 c'16 bes16 a4 | + bes8 bes16 a16 g4 a8 a,4 a16 g16 | + fis8 d8 e8 fis8 g8 g,4 g16 f16 | + e8 c8 d8 e8 f8 f,4 a,8 | + b,4 cis4 d4 r8 d'8 | + } + + \new FiguredBass \figuremode { + \set figuredBassAlterationDirection = #RIGHT + \set figuredBassPlusDirection = #RIGHT + \override BassFigureAlignment #'stacking-dir = #DOWN + s8 | + s4 <6>4 <_+>4 <6>4 | + <6 4\+ 2>8 <6>8 <_+> s8 s2 | + <5>8 <6 4>8 <6 5>4 s4 <5>8 <6>8 | + s4 <6 5 _-> <_+>2 | + <6>8 <_+>8 <6>8 <6 5>8 <5 4>8 \extendOn <5 _!>8 \extendOff s4 | + <6>4 <6->8 <6 5->8 <5 4->8 \extendOn <5 3>4 \extendOff <5 _+>8 | + <7>8 <6>8 <5>4 <9 4>8 <8 3>8 s4 | + } + + >> + + \layout { + \context { + \Score + \override RehearsalMark #'break-align-symbols = #'(time-signature) + \override RehearsalMark #'self-alignment-X = #LEFT + \override TimeSignature #'break-align-anchor-alignment = #LEFT + } + } +} diff --git a/Documentation/snippets/fine-tuning-pedal-brackets.ly b/Documentation/snippets/fine-tuning-pedal-brackets.ly new file mode 100644 index 0000000000..4a01275ade --- /dev/null +++ b/Documentation/snippets/fine-tuning-pedal-brackets.ly @@ -0,0 +1,29 @@ +%% 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 = "keyboards, tweaks-and-overrides" + + texidoc = " +The appearance of pedal brackets may be altered in different ways. + +" + doctitle = "Fine-tuning pedal brackets" +} % begin verbatim + +\paper { ragged-right = ##f } +\relative c'' { + c2\sostenutoOn c + c2\sostenutoOff c + \once \override Staff.PianoPedalBracket #'shorten-pair = #'(-7 . -2) + c2\sostenutoOn c + c2\sostenutoOff c + \once \override Staff.PianoPedalBracket #'edge-height = #'(0 . 3) + c2\sostenutoOn c + c2\sostenutoOff c +} diff --git a/Documentation/snippets/fingering-symbols-for-wind-instruments.ly b/Documentation/snippets/fingering-symbols-for-wind-instruments.ly new file mode 100644 index 0000000000..e750a41a35 --- /dev/null +++ b/Documentation/snippets/fingering-symbols-for-wind-instruments.ly @@ -0,0 +1,58 @@ +%% 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 = "winds" + +%% 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. + +" + doctitlees = "Símbolos de digitación para instrumentos de viento" + +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Des sumboles spécifiques peuvent être obtenus en combinant les glyphes +disponibles, ce qui est tout à fait indiqué en matière d'instrument à vent. + +" + doctitlefr = "Symboles de doigtés pour instruments à vent" + + + texidoc = " +Special symbols can be achieved by combining existing glyphs, which is +useful for wind instruments. + +" + doctitle = "Fingering symbols for wind instruments" +} % begin verbatim + +centermarkup = { + \once \override TextScript #'self-alignment-X = #CENTER + \once \override TextScript #'X-offset =#(ly:make-simple-closure + `(,+ + ,(ly:make-simple-closure (list + ly:self-alignment-interface::centered-on-x-parent)) + ,(ly:make-simple-closure (list + ly:self-alignment-interface::x-aligned-on-self)))) +} +\score +{\relative c' + { + g\open + \once \override TextScript #'staff-padding = #-1.0 \centermarkup + g^\markup{\combine \musicglyph #"scripts.open" \musicglyph + #"scripts.tenuto"} + \centermarkup g^\markup{\combine \musicglyph #"scripts.open" + \musicglyph #"scripts.stopped"} + g\stopped + } +} + diff --git a/Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly b/Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly new file mode 100644 index 0000000000..6717be0a26 --- /dev/null +++ b/Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly @@ -0,0 +1,57 @@ +%% 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 = "fretted-strings" + +%% 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 +derecha. + +" + doctitlees = "Digitaciones - indicación del número de cuerda y digitaciones de mano derecha" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern +und Fingersatz für die rechte Hand. + +" + doctitlede = "Fingersatz Saitennummern und Fingersatz für die rechte Hand" + +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +L'exemple suivant illustre comment combiner des doigtés pour la main +gauche, des indications de corrde et des doigtés pour la main droite. + +" + doctitlefr = "Doigtés indications de cordeet doigtés main droite" + + + texidoc = " +This example combines left-hand fingering, string indications, and +right-hand fingering. + +" + doctitle = "Fingerings string indications and right-hand fingerings" +} % begin verbatim + +#(define RH rightHandFinger) + +\relative c { + \clef "treble_8" + 4 + 4 + 4 + 4 +} + diff --git a/Documentation/snippets/flamenco-notation.ly b/Documentation/snippets/flamenco-notation.ly new file mode 100644 index 0000000000..da6086473b --- /dev/null +++ b/Documentation/snippets/flamenco-notation.ly @@ -0,0 +1,298 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Para la guitarra flamenca se utilizan ciertos elementos de notación +especiales: + + +@itemize + +@item un símbolo para indicar un golpe sobre la caja de la guitarra +con el nudillo del dedo anular + +@item una flecha para indicar la dirección de los rasgueos + +@item distintas legras para las digitaciones (@qq{p}: pulgar, @qq{i}: +índice, @qq{m}: medio, @qq{a}: anular y @qq{x}: meñique) + +@item Rasgueados de 3 y cautro dedos: hacia arriba con todos los dedos +y terminando con arriba y abajo con el índice + +@item abanicos: rasgueos en serie con el pulgar, hacia abajo y el +meñique y el índice hacia arriba (hay también un abanico 2 en el que +los dedos medio y anular se usan en lugar del meñique) + +@item alza púa: pulsaciones rápidas con el pulgar + +@end itemize + + +Casi todas las figuras utilizan flechas combinadas con digitaciones; +con los abanicos y los rasgueados, las notas se imprimen con cabeza +sólo en el primer acorde. + +Este fragmento de código contiene código de tipo cabecera que se puede +copiar como @file{flamenco.ly} e incluirse en los documentos fuente. + +" + doctitlees = "Notación del flamenco" + + lsrtags = "fretted-strings" + + texidoc = " +For flamenco guitar, special notation is used: + + +@itemize + +@item +a golpe symbol to indicate a slap on the guitar body with the nail of +the ring finger + +@item +an arrow to indicate (the direction of) strokes + +@item +different letters for fingering (@qq{p}: thumb, @qq{i}: index finger, +@qq{m}: middle finger, @qq{a}: ring finger and @qq{x}: little finger) + +@item +3- and 4-finger rasgueados: stroke upwards with all fingers, ending +with an up- and down using the index finger + +@item +abanicos: strokes (in tuples) with thumb (down), little and index finger +(both up) (there is also an abanico 2 where middle and ring finger are +used instead of the little finger) + +@item +alza pua: fast playing with the thumb + +@end itemize + + +Most figures use arrows in combination with fingering; with abanicos +and rasgueados, noteheads are printed only for the first chord. + +This snippet contains some header-like code that can be copied as +@samp{flamenco.ly} and included in source files. + +" + doctitle = "Flamenco notation" +} % begin verbatim + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% Cut here ----- Start 'flamenco.ly' + +% Text indicators +abanico = \markup { \italic Abanico } +rasgueaso = \markup { \italic Ras. } +alzapua = \markup { \italic Alzapua } + +% Finger stroke symbols +strokeUp = \markup { \postscript #" + 0.1 setlinewidth + 0.5 0 moveto + 0.5 2 lineto + 0.2 1.4 lineto + 0.5 2 moveto + 0.8 1.4 lineto + stroke +"} + +strokeDown = \markup { \postscript #" + 0.1 setlinewidth + 0.5 2 moveto + 0.5 0 lineto + 0.2 0.6 lineto + 0.5 0 moveto + 0.8 0.6 lineto + stroke +"} + +% Golpe symbol +golpe = \markup { \postscript #" + 0.2 setlinewidth + 0 0 moveto + 1 0 lineto + 1 1 lineto + stroke + "\postscript #" + 0.1 setlinewidth + -0.6 -0.1 moveto + -0.6 1.0 lineto + 0.5 1.0 lineto + stroke +"} + +strokeUpGolpe = \markup { \column { \golpe \line { \strokeUp } } } +iUpGolpe = \markup { \column { \golpe \line { \small i } \line { \strokeUp } } } + +% Strokes for all fingers +pUp = \markup { \column { \small p \line { \strokeUp } } } +pDown = \markup { \column { \small p \line { \strokeDown } } } +iUp = \markup { \column { \small i \line { \strokeUp } } } +iDown = \markup { \column { \small i \line { \strokeDown } } } +mUp = \markup { \column { \small m \line { \strokeUp } } } +mDown = \markup { \column { \small m \line { \strokeDown } } } +aUp = \markup { \column { \small a \line { \strokeUp } } } +aDown = \markup { \column { \small a \line { \strokeDown } } } +xUp = \markup { \column { \small x \line { \strokeUp } } } +xDown = \markup { \column { \small x \line { \strokeDown } } } + + +% Just handy :) +tupletOff = { + \once \override TupletNumber #'stencil = ##f + \once \override TupletBracket #'stencil = ##f +} + +tupletsOff = { + \override TupletNumber #'stencil = ##f + \override TupletBracket #'bracket-visibility = #'if-no-beam +} + +tupletsOn = { + \override TupletBracket #'bracket-visibility = #'default + \revert TupletNumber #'stencil +} + +headsOff = { + \override TabNoteHead #'transparent = ##t + \override NoteHead #'transparent = ##t + \override NoteHead #'no-ledgers = ##t +} + +headsOn = { + \override TabNoteHead #'transparent = ##f + \override NoteHead #'transparent = ##f + \override NoteHead #'no-ledgers = ##f +} + +%%%%%%% Cut here ----- End 'flamenco.ly' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +part = \relative c' { + 8^\iUp + 8^\iDown + r4 + r2^\golpe + + 8^\iUp + 8^\iDown + 8^\iUpGolpe + 8^\iDown + r2 + + 16^\aUp + \headsOff + ^\mUp + ^\iUp + ^\iDown~ + \headsOn + 2 + r4 + + \tupletOff + \times 4/5 { + 16^\xUp + \headsOff + ^\aUp + ^\mUp + ^\iUp + ^\iDown~ + \headsOn + } + 2 + r4 + + \tupletsOff + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \tupletsOff + \override Beam #'positions = #'(2 . 2) + \times 2/3 { + a8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \tupletsOn + + \once \override TextScript #'extra-offset = #'(0 . -1) + 1_\golpe^\mUp + \bar "|." +} + +\score { + \new StaffGroup << + \context Staff = "part" << + \clef G + \transpose c c' + { + \part + } + >> + \context TabStaff { + \part + } + >> + \layout { + ragged-right = ##t + } +} diff --git a/Documentation/snippets/flat-flags-and-beam-nibs.ly b/Documentation/snippets/flat-flags-and-beam-nibs.ly new file mode 100644 index 0000000000..d712a7c091 --- /dev/null +++ b/Documentation/snippets/flat-flags-and-beam-nibs.ly @@ -0,0 +1,192 @@ +%% 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 = "rhythms" + +%% 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 +@code{stemLeftBeamCount}, @code{stemRightBeamCount} e indicadores de +barra @code{[]} emparejados. + +Para corchetes rectos que apunten a la derecha sobre notas sueltas, +use indicadores de barra emparejados @code{[]} y establezca +@code{stemLeftBeamCount} a cero (véase el ejemplo 1). + +Para corchetes rectos que apunten a la izquierda, establezca en su +lugar @code{stemRightBeamCount} (ejemplo 2). + +Para extremos sueltos que apunten a la derecha al final de un conjunto +de notas unidas, establezca @code{stemRightBeamCount} a un valor +positivo. Y para extremos sueltos que apunten a la izquierda al +principio de un conjunto de notas unidas, establezca +@code{stemLeftBeamCount} en su lugar (ejemplo 3). + +A veces, para una nota suelta rodeada de silencios tiene sentido que +lleve los dos extremos sueltos del corchete plano, apuntando a derecha +e izquierda. Hágalo solamente con indicadores de barra emparejados +@code{[ ]} (ejemplo 4). + +(Observe que @code{\\set stemLeftBeamCount} siempre equivale a +@code{\\once \\set}. En otras palabras, los ajustes de la cantidad de +barras no se recuerdan, y por ello el par de corchetes planos +aplicados a la nota Do semicorchea @code{c'16[]} del último ejemplo no +tiene nada que ver con el @code{\\set} de dos notas por detrás.) + +" + doctitlees = "Corchetes rectos y extremos de barra sueltos" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Gerade Fähnchen an einzelnen Noten und überstehende Balkenenden bei +bebalkten Notengruppen sind möglich mit einer Kombination aus +@code{stemLeftBeamCount}, @code{stemRightBeamCount} und Paaren von +@code{[]}-Balkenbegrenzungen. + +Für gerade Fähnchen, die nach rechts zeigen, kann @code{[]} eingesetzt +werden und @code{stemLeftBeamCount} auf Null gesetzt werden (wie +Bsp. 1). + +Für gerade Fähnchen, die nach links zeigen, muss @code{stemRightBeamCount} +eingesetzt werden (Bsp. 2). + +Für überstehende Balkenenden nach rechts muss @code{stemRightBeamCount} +auf einen positiven Wert gesetzt werden, für Balkenenden, die nach links +zeigen benutzt man @code{stemLeftBeamCount} (Bsp. 3). + +Manchmal können einzelne Noten, die von Pausen umgeben sind, auch Balkenenden +in beide Richtungen tragen. Das geschieht mit @code{[]}-Klammern (Bsp. 4). + +(@code{\\set stemLeftBeamCount} entspricht immer dem Befehl +@code{\\once \\set}. Anders gesagt müssen die Einstellungen immer wieder +wiederholt werden und die Fähnchen des letzten Sechzehntels im letzten +Beispiel haben nichts mit dem @code{\\set}-Befehl zwei Noten vorher zu tun.) + +" + doctitlede = "Gerade Fähnchen und überstehende Balkenenden" + + + +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +En combinant @code{stemLeftBeamCount}, @code{stemRightBeamCount} et des +paires de @code{[]}, vous pourrez obtenir des crochets rectilignes et +des ligatures qui débordent à leurs extrémités. + +Pour des crochets rectilignes à droite sur des notes isolées, il suffit +d'ajouter une paire d'indicateurs de ligature @code{[]} et de déterminer +@code{stemLeftBeamCount} à zéro, comme dans l'exemple@tie{}1. + +Pour des crochets rectiligne à gauche, c'est @code{stemRightBeamCount} +qu'il faudra déterminer (exemple@tie{}2). + +Pour que les barres de ligature débordent sur la droite, +@code{stemRightBeamCount} doit avoir une valeur positive@tie{}; pour un +débrodement à gauche, c'est sur @code{stemLeftBeamCount} qu'il faut +jouer. Tout ceci est illustré par l'exemple@tie{}3. + +Il est parfois judicieux, lorsqu'une note est encadrée de silences, de +l'affubler de crochets rectilignes de part et d'autre. L'exemple@tie{}4 +montre qu'il suffit d'adjoindre à cette note un @code{[]}. + +(Notez bien que @code{\\set@tie{}stemLeftBeamCount} sera toujours +synonyme de @code{\\once@tie{}\\set}. Autrement dit, la détermination +des ligatures n'est pas @qq{permanente}@tie{}; c'est la raison pour +laquelle les crochets du @code{c'16[]} isolé du dernier exemple n'ont +rien à voir avec le @code{\\set} indiqué deux notes auparavant.) + +" + doctitlefr = "Crochet rectiligne et débordement de ligature" + + texidoc = " + Flat flags on lone notes and beam nibs at the ends of beamed figures +are both possible with a combination of @code{stemLeftBeamCount}, +@code{stemRightBeamCount} and paired @code{[]} beam indicators. + + + + +For right-pointing flat flags on lone notes, use paired @code{[]} beam +indicators and set @code{stemLeftBeamCount} to zero (see Example 1). + + + + +For left-pointing flat flags, set @code{stemRightBeamCount} instead +(Example 2). + + + + +For right-pointing nibs at the end of a run of beamed notes, set +@code{stemRightBeamCount} to a positive value. And for left-pointing +nibs at the start of a run of beamed notes, set +@code{stemLeftBeamCount} instead (Example 3). + + + + +Sometimes it may make sense for a lone note surrounded by rests to +carry both a left- and right-pointing flat flag. Do this with paired +@code{[]} beam indicators alone (Example 4). + + + + +(Note that @code{\\set stemLeftBeamCount} is always equivalent to +@code{\\once \\set}. In other words, the beam count settings are not +@qq{sticky}, so the pair of flat flags attached to the lone +@code{c'16[]} in the last example have nothing to do with the +@code{\\set} two notes prior.) + + + + +" + doctitle = "Flat flags and beam nibs" +} % begin verbatim + +\score { + << + % Example 1 + \new RhythmicStaff { + \set stemLeftBeamCount = #0 + c16[] + r8. + } + % Example 2 + \new RhythmicStaff { + r8. + \set stemRightBeamCount = #0 + c16[] + } + % Example 3 + \new RhythmicStaff { + c16 c + \set stemRightBeamCount = #2 + c16 r r + \set stemLeftBeamCount = #2 + c16 c c + } + % Example 4 + \new RhythmicStaff { + c16 c + \set stemRightBeamCount = #2 + c16 r + c16[] + r16 + \set stemLeftBeamCount = #2 + c16 c + } + >> +} + diff --git a/Documentation/snippets/flute-slap-notation.ly b/Documentation/snippets/flute-slap-notation.ly new file mode 100644 index 0000000000..2e0a858e4f --- /dev/null +++ b/Documentation/snippets/flute-slap-notation.ly @@ -0,0 +1,46 @@ +%% 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 = "winds" + + texidoc = " +It is possible to indicate special articulation techniques such as a +flute @qq{tongue slap} by replacing the note head with the appropriate +glyph. + +" + doctitle = "Flute slap notation" +} % begin verbatim + +slap = +#(define-music-function (parser location music) (ly:music?) +#{ + \override NoteHead #'stencil = + #(lambda (grob) + (grob-interpret-markup grob + (markup #:musicglyph "scripts.sforzato"))) + \override NoteHead #'stem-attachment = + #(lambda (grob) + (let* ((thickness (ly:staff-symbol-line-thickness grob)) + (stem (ly:grob-object grob 'stem)) + (dir (ly:grob-property stem 'direction UP))) + (cons 1 (+ (if (= dir DOWN) + 0.5 + 0) + (/ thickness 2))))) + $music + \revert NoteHead #'stencil + \revert NoteHead #'stem-attachment +#}) + +\relative c' { + c4 \slap c d r + \slap { g4 a } b r +} + diff --git a/Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly b/Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly new file mode 100644 index 0000000000..8952a2fc53 --- /dev/null +++ b/Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly @@ -0,0 +1,32 @@ +%% 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 = "pitches" + + texidoc = " +When a clef sign has already been displayed and it has not been changed +to a different clef, then repeating the @code{\\clef} command will be +ignored by LilyPond, since it is not a change of clef. It is possible +to force the clef to be redisplayed using the command @code{\\set +Staff.forceClef = ##t}. + +" + doctitle = "Forcing a clef symbol to be displayed" +} % begin verbatim + +\relative c' { + \clef treble + c1 + \clef treble + c1 + \set Staff.forceClef = ##t + c1 + \clef treble + c1 +} diff --git a/Documentation/snippets/forcing-horizontal-shift-of-notes.ly b/Documentation/snippets/forcing-horizontal-shift-of-notes.ly new file mode 100644 index 0000000000..51dc9f03d2 --- /dev/null +++ b/Documentation/snippets/forcing-horizontal-shift-of-notes.ly @@ -0,0 +1,64 @@ +%% 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 = "simultaneous-notes, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + doctitlees = "Forzar el desplazamiento horizontal de las notas" + +texidoces = " + Cuando el motor de tipografiado no es capaz de todo, se puede usar la + sintaxis siguiente para sobreescribir las decisiones de tipografía. + Las unidades de medida que se usan aquí son espacios de pentagrama. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere +Position manuell eingestellt werden. Die Einheiten hier sind +Notenlinienzwischenräume. + +" + doctitlede = "Horizontale Verschiebung von Noten erzwingen" + +%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c + texidocfr = " +Quand LilyPond est dépassé, la propriété @code{force-hshift} de l'objet +@code{NoteColumn}, et des silences à hauteur déterminée, peuvent +s'avérer utiles pour dicter au programme les choix de placement. On +travaille ici en espace de portée. + +" + doctitlefr = "Décalage horizontal forcé" + + + texidoc = " +When the typesetting engine cannot cope, the following syntax can be +used to override typesetting decisions. The units of measure used here +are staff spaces. + +" + doctitle = "Forcing horizontal shift of notes" +} % begin verbatim + +\relative c' << + { + 2 + } + \\ + { + 2 + \once \override NoteColumn #'force-hshift = #1.7 + 2 + } +>> + diff --git a/Documentation/snippets/forcing-hyphens-to-be-shown.ly b/Documentation/snippets/forcing-hyphens-to-be-shown.ly new file mode 100644 index 0000000000..a4ce186cd9 --- /dev/null +++ b/Documentation/snippets/forcing-hyphens-to-be-shown.ly @@ -0,0 +1,47 @@ +%% 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 = "vocal-music" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Si LilyPond no cree que haya sitio suficiente para un guión separador +de sílabas, lo omitirá. Se puede sobreescribir este comportamiento +con la propiedad @code{minimum-distance} de @code{LyricHyphen}. + +" + doctitlees = "Forzar la visibilidad de los guiones separadores de sílabas" + + + + texidoc = " +If LilyPond does not think there is space for a hyphen, it will be +omitted. The behaviour can be overridden with the +@code{minimum-distance} property of @code{LyricHyphen}. + +" + doctitle = "Forcing hyphens to be shown" +} % begin verbatim + +\relative c'' { + c32 c c c + c32 c c c + c32 c c c + c32 c c c +} +\addlyrics { + syl -- lab word word + \override LyricHyphen #'minimum-distance = #1.0 + syl -- lab word word + \override LyricHyphen #'minimum-distance = #2.0 + syl -- lab word word + \revert LyricHyphen #'minimum-distance + syl -- lab word word +} diff --git a/Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly b/Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly new file mode 100644 index 0000000000..8489671c05 --- /dev/null +++ b/Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly @@ -0,0 +1,43 @@ +%% 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 = "staff-notation" + + texidoc = " +By default, metronome marks do not influence horizontal spacing. This +has one downside: when using compressed rests, some metronome marks may +be too close and therefore are printed vertically stacked, as +demonstrated in the first part of this example. This can be solved +through a simple override, as shown in the second half of the example. + +" + doctitle = "Forcing measure width to adapt to MetronomeMark's width" +} % begin verbatim + +example = { + \tempo "Allegro" + R1*6 + \tempo "Rall." + R1*2 + \tempo "A tempo" + R1*8 +} + +{ + \compressFullBarRests + + \example + + R1 + R1 + + \override Score.MetronomeMark #'extra-spacing-width = #'(0 . 0) + \example +} + diff --git a/Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly b/Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly new file mode 100644 index 0000000000..8f4f7e2a87 --- /dev/null +++ b/Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly @@ -0,0 +1,41 @@ +%% 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 = "rhythms" + + texidoc = " +This snippet demonstrates how to obtain automatic ordered rehearsal +marks, but from the letter or number desired. + +" + doctitle = "Forcing rehearsal marks to start from a given letter or number" +} % begin verbatim + +\relative c'' { + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark #14 + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark \default + \break + \set Score.markFormatter = #format-mark-numbers + c1 \mark #1 + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark #14 + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark \default +} + diff --git a/Documentation/snippets/formatting-lyrics-syllables.ly b/Documentation/snippets/formatting-lyrics-syllables.ly new file mode 100644 index 0000000000..22ab511f31 --- /dev/null +++ b/Documentation/snippets/formatting-lyrics-syllables.ly @@ -0,0 +1,36 @@ +%% 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 { +%%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Textbeschriftungsmodus kann eingesetzt werden, um individuelle Silben im Gesangstext +zu formatieren. + +" + doctitlede = "Silben im Gesangstext formatieren" + + lsrtags = "text, vocal-music" + + texidoc = " +Markup mode may be used to format individual syllables in lyrics. + +" + doctitle = "Formatting lyrics syllables" +} % begin verbatim + +mel = \relative c'' { c4 c c c } +lyr = \lyricmode { + Lyrics \markup { \italic can } \markup { \with-color #red contain } + \markup { \fontsize #8 \bold Markup! } +} + +<< + \new Voice = melody \mel + \new Lyrics \lyricsto melody \lyr +>> diff --git a/input/lsr/fret-diagrams-explained-and-developed.ly b/Documentation/snippets/fret-diagrams-explained-and-developed.ly similarity index 96% rename from input/lsr/fret-diagrams-explained-and-developed.ly rename to Documentation/snippets/fret-diagrams-explained-and-developed.ly index 47a65e5a92..029aa35e68 100644 --- a/input/lsr/fret-diagrams-explained-and-developed.ly +++ b/Documentation/snippets/fret-diagrams-explained-and-developed.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "fretted-strings, tweaks-and-overrides" @@ -20,16 +24,16 @@ diagrams. c c c d d } } - + \new Voice = "mel" { \textLengthOn % Set global properties of fret diagram \override TextScript #'size = #1.2 - \override TextScript + \override TextScript #'fret-diagram-details #'finger-code = #'below-string \override TextScript #'fret-diagram-details #'dot-color = #'black - - %% A chord for ukelele + + %% A chord for ukulele a'2^\markup { \override #'(fret-diagram-details . ( (string-count . 4) @@ -38,8 +42,8 @@ diagrams. \fret-diagram #"4-2-2;3-1-1;2-o;1-o;" } } - - %% A chord for ukelele, with formatting defined in definition string + + %% A chord for ukulele, with formatting defined in definition string % 1.2 * size, 4 strings, 4 frets, fingerings below string % dot radius .35 of fret spacing, dot position 0.55 of fret spacing a'2^\markup { @@ -49,7 +53,7 @@ diagrams. \fret-diagram #"s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;" } } - + %% These chords will be in normal orientation %% C major for guitar, barred on third fret @@ -72,7 +76,7 @@ diagrams. } } } - + %% C major for guitar, barred on third fret %% Double barre used to test barre function % verbose style @@ -100,7 +104,7 @@ diagrams. } } } - + %% C major for guitar, with capo on third fret % verbose style c'2^\markup { @@ -123,7 +127,7 @@ diagrams. } } } - + %% simple D chord d'2^\markup { \override #'(fret-diagram-details . ( @@ -149,7 +153,7 @@ diagrams. } % These chords will be in landscape orientation - \override TextScript + \override TextScript #'fret-diagram-details #'orientation = #'landscape %% C major for guitar, barred on third fret @@ -172,7 +176,7 @@ diagrams. } } } - + %% C major for guitar, barred on third fret %% Double barre used to test barre function % verbose style @@ -200,7 +204,7 @@ diagrams. } } } - + %% C major for guitar, with capo on third fret % verbose style c'2^\markup { @@ -223,7 +227,7 @@ diagrams. } } } - + %% simple D chord d'2^\markup { \override #'(fret-diagram-details . ( @@ -248,7 +252,7 @@ diagrams. } % These chords will be in opposing-landscape orientation - \override TextScript #'fret-diagram-details + \override TextScript #'fret-diagram-details #'orientation = #'opposing-landscape %% C major for guitar, barred on third fret @@ -271,7 +275,7 @@ diagrams. } } } - + %% C major for guitar, barred on third fret %% Double barre used to test barre function % verbose style @@ -299,7 +303,7 @@ diagrams. } } } - + %% C major for guitar, with capo on third fret % verbose style c'2^\markup { @@ -322,7 +326,7 @@ diagrams. } } } - + %% simple D chord d'2^\markup { \override #'(fret-diagram-details . ( diff --git a/Documentation/snippets/fretboards-alternate-tables.ly b/Documentation/snippets/fretboards-alternate-tables.ly new file mode 100644 index 0000000000..f2ab3d2dac --- /dev/null +++ b/Documentation/snippets/fretboards-alternate-tables.ly @@ -0,0 +1,122 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Se pueden crear tablas alternativas de diagramas de posiciones. Se +utilizarían para tener diagramas altenativos para un acorde dado. + +Para usar una tabla alternativa de diagramas de posiciones, se debe +crear la tabla primero. Después se añaden los diagramas a la tabla. + +La tabla de diagramas de posiciones que se crea puede estar vacía o se +puede copiar a partir de una tabla existente. + +La tabla a usar en la impresión de de los diagramas predefinidos se +selecciona por medio de la propiedad @code{\\predefinedDiagramTable}. + +" + + doctitlees = "Tablas alternativas de diagramas de posiciones" + +%% Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f + + texidocde = " +Alternative Bunddiagrammtabellen können erstellt werden. Sie können benutzt +werden, um alternative Bunddiagramme für einen bestimmten Akkord zu haben. + +Damit eine alternative Bunddiagrammentabelle benutzt werden kann, muss die +Tabelle zuerst erstellt werden. Dann werden die Bunddiagramme zur Tabelle +hinzugefügt. + +Die erstellte Bunddiagrammtabelle kann auch leer sein, oder sie kann aus +einer existierenden Tabelle kopiert werden. + +Die Tabelle, die eingesetzt wird, um vordefinierte Bunddiagramme anzuzeigen, +wird mit der Eigenschaft @code{\\predefinedDiagramTable} ausgewählt. +" + + doctitlede = "Alternative Bunddiagrammtabellen" + + + lsrtags = "fretted-strings" + + texidoc = " +Alternate fretboard tables can be created. These would be used in +order to have alternate fretboards for a given chord. + +In order to use an alternate fretboard table, the table must first +be created. Fretboards are then added to the table. + +The created fretboard table can be blank, or it can be copied +from an existing table. + +The table to be used in displaying predefined fretboards is selected +by the property @code{\\predefinedDiagramTable}. +" + + doctitle = "Alternate fretboard tables" +} % begin verbatim + + +\include "predefined-guitar-fretboards.ly" + +% Make a blank new fretboard table +#(define custom-fretboard-table-one (make-fretboard-table)) + +% Make a new fretboard table as a copy of default-fret-table +#(define custom-fretboard-table-two (make-fretboard-table default-fret-table)) + +% Add a chord to custom-fretboard-table-one +\storePredefinedDiagram #custom-fretboard-table-one + \chordmode{c} + #guitar-tuning + "3-(;3;5;5;5;3-);" + +% Add a chord to custom-fretboard-table-two +\storePredefinedDiagram #custom-fretboard-table-two + \chordmode{c} + #guitar-tuning + "x;3;5;5;5;o;" + +<< + \chords { + c1 | d1 | + c1 | d1 | + c1 | d1 | + } + \new FretBoards { + \chordmode { + \set predefinedDiagramTable = #default-fret-table + c1 | d1 | + \set predefinedDiagramTable = #custom-fretboard-table-one + c1 | d1 | + \set predefinedDiagramTable = #custom-fretboard-table-two + c1 | d1 | + } + } + \new Staff { + \clef "treble_8" + << + \chordmode { + c1 | d1 | + c1 | d1 | + c1 | d1 | + } + { + s1_\markup "Default table" | s1 | + s1_\markup \column {"New table" "from empty"} | s1 | + s1_\markup \column {"New table" "from default"} | s1 | + } + >> + } +>> + diff --git a/Documentation/snippets/fretted-headword.ly b/Documentation/snippets/fretted-headword.ly new file mode 100644 index 0000000000..186483797e --- /dev/null +++ b/Documentation/snippets/fretted-headword.ly @@ -0,0 +1,156 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% and then run scripts/auxiliar/makelsr.py +% +% This file is in the public domain. +%% 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" % +%*****************************************************************% + +\version "2.14.0" + +#(set-global-staff-size 15) +\paper { + line-width = 17\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + + +\layout { + \context { + \Score + \remove "Bar_number_engraver" + } +} + +%%%% shortcuts +% fingering orientations +sfol = \set fingeringOrientations = #'(left) +sfor = \set fingeringOrientations = #'(right) +sfod = \set fingeringOrientations = #'(down) +sfou = \set fingeringOrientations = #'(up) + +% string number orientations +ssnol = \set stringNumberOrientations = #'(left) %(down right up) +ssnou = \set stringNumberOrientations = #'(up) +ssnod = \set stringNumberOrientations = #'(down) +ssnor = \set stringNumberOrientations = #'(right) + +% define fingering offset +FO = #(define-music-function (parser location offsetX offsetY) (number? number?) +#{ + \once \override Voice.Fingering #'extra-offset = #(cons $offsetX $offsetY) +#}) + +% markups +rit = \markup \center-align { \bold { \italic { " rit." } } } +dimin = \markup \center-align { \italic { " dim." } } +andantino = \markup \left-align { \italic { \bold { \fontsize #2.5 { "Andantino" } } } } +benmarcato = \markup { \italic { \bold { "il canto ben marcato" } } } +pdolce = #(make-dynamic-script (markup #:line (#:dynamic "p" #:normal-text #:italic "dol."))) + +%%% THE MUSIC %%% + +melody = \relative c { + \clef "treble_8" + \key d \major + \time 4/4 + \voiceOne + \sfol + e,32 a' c e + e, a c e + e,, a' c e + e, a c e + f4\rest 4-> | % m. 1 + + e,,,32 gis' b e + e, gis b e + e,, gis' b e + e, gis b e + f4\rest \FO #'0.4 #'0.5 4 | % m. 2 + + d4\rest -> d4\rest^\rit 4-> | % m. 3 + 1 | % m. 4 + + \bar "||" + \key a \minor + R1 % m. 5 + + e'4^\benmarcato e8. d16-4 + d4-4 \times 2/3 { \sfou \FO #'-0.3 #'0.6 4 b8 } | % end of m. 6 + + \FO #'-0.3 #'0.3 + 4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7 + + \FO #'-0.3 #'0.3 + 4 \times 2/3 { \sfol \FO #'0.3 #'0.0 4 e8 } e4 % beg of m. 8 + \times 2/3 { \sfou 4 c8 } | % end of m. 8 + + b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 4 e | % end of m. 9 + + e4 e8. d16-4 d4 \times 2/3 { c4 b8 } | % m. 10 + + \times 2/3 { a4 a8 b4 c8 } % beg of m. 11 + \sfou \FO #'-0.3 #'0.3 + 4^\< \times 2/3 { e4 8\! } | % end of m. 11 +} + +bass = \relative c { + \key d \major + \time 4/4 + \voiceTwo + + e,8\fp[ e'] e,[ e'] e, \sfol c, | % m. 1 + + e,,8\fp[ e'] e,[ e'] e, \sfod \FO #'0.2 #'-0.2 % beg m. 2 + \sfol \FO #'0.3 #'0.0 b | % end m. 2 + + e,,8 e' gis e e, e' gis_\dimin e | % m. 3 + + e,1 | % m. 4 + + %% new section starts here in A minor + \set Score.beamExceptions = #'() + \once \override TextScript #'staff-padding = #1.7 + \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5 + + \times 2/3 { a,8\pdolce e' a c a e } % beg m. 6 + \times 2/3 { e,8 \sfou c gis e } | % end m. 6 + + \times 2/3 { a,8 a c e, b' a, e' a c a e } | % m. 7 + + \times 2/3 { f,8 f' a \sfol \FO #'0.3 #'-0.5 a f fis, d' a' d a d, } | % m. 8 + + \times 2/3 { 8 d' g d' g, d % beg m. 9 + \sfod \FO #'0.0 #'-2.0 \sfou b gis e } | % end m. 9 + + \times 2/3 { a,8 e' a c a e e, e' gis c gis e } | % m. 10 + + \times 2/3 { a,8 e' a b a e f, f' a d a f } | % m. 11 +} + +\score { + \new Staff = "guitar" << + \context Voice = "upper" { \melody } + \context Voice = "lower" { \bass } + >> + \layout { + \context { + \Score + \override Fingering #'staff-padding = #'() + \override TupletNumber #'stencil = ##f + \override TupletBracket #'bracket-visibility = ##f + } + } + \midi { } +} diff --git a/Documentation/snippets/fretted-string-harmonics-in-tablature.ly b/Documentation/snippets/fretted-string-harmonics-in-tablature.ly new file mode 100644 index 0000000000..32cf25a6d1 --- /dev/null +++ b/Documentation/snippets/fretted-string-harmonics-in-tablature.ly @@ -0,0 +1,96 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Armónicos sobre cuerdas pisadas (armónicos artificiales): +" + doctitlees = "Armónicos sobre cuerdas pisadas en tablatura" + + + +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Flageolett für Bundinstrumente: +" + doctitlede = "Flageolett von Bundinstrumenten in einer Tabulatur" + + lsrtags = "fretted-strings" + texidoc = " +Fretted-string harmonics: +" + doctitle = "Fretted-string harmonics in tablature" +} % begin verbatim + + +pinchedHarmonics = { + \textSpannerDown + \override TextSpanner #'bound-details #'left #'text = + \markup {\halign #-0.5 \teeny "PH" } + \override TextSpanner #'style = + #'dashed-line + \override TextSpanner #'dash-period = #0.6 + \override TextSpanner #'bound-details #'right #'attach-dir = #1 + \override TextSpanner #'bound-details #'right #'text = + \markup { \draw-line #'(0 . 1) } + \override TextSpanner #'bound-details #'right #'padding = #-0.5 +} + +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" } + %pinched harmonics (PH) + \pinchedHarmonics + 2\startTextSpan + 4 + 4\stopTextSpan + %tapped harmonics (TH) + <\parenthesize g\4 g'\harmonic>4_\markup{ \teeny "TH 17" } + <\parenthesize a\4 a'\harmonic>4_\markup{ \teeny "TH 19" } + <\parenthesize c'\3 c''\harmonic>2_\markup{ \teeny "TH 17" } + %touch harmonics (TCH) + a4( 2. )_\markup{ \teeny "TCH" } +} + +frettedStrings = { + %artificial harmonics (AH) + \harmonicByFret #4 g4\3 + \harmonicByFret #5 d4\4 + \harmonicByFret #7 g2\3 + %pinched harmonics (PH) + \harmonicByFret #7 d2\4 + \harmonicByFret #5 d4\4 + \harmonicByFret #7 a4\5 + %tapped harmonics (TH) + \harmonicByFret #5 d4\4 + \harmonicByFret #7 d4\4 + \harmonicByFret #5 g2\3 + %touch harmonics (TCH) + a4 \harmonicByFret #9 g2.\3 +} + +\score { + << + \new Staff { + \new Voice { + \clef "treble_8" + \harmonics + } + } + \new TabStaff { + \new TabVoice { + \frettedStrings + } + } + >> +} diff --git a/input/lsr/fretted-strings-intro.itely b/Documentation/snippets/fretted-strings-intro.itely similarity index 100% rename from input/lsr/fretted-strings-intro.itely rename to Documentation/snippets/fretted-strings-intro.itely diff --git a/Documentation/snippets/fretted-strings.snippet-list b/Documentation/snippets/fretted-strings.snippet-list new file mode 100644 index 0000000000..c10384bba3 --- /dev/null +++ b/Documentation/snippets/fretted-strings.snippet-list @@ -0,0 +1,30 @@ +adding-fingerings-to-a-score.ly +adding-fingerings-to-tablatures.ly +allowing-fingerings-to-be-printed-inside-the-staff.ly +bar-chords-notation-for-guitar--with-text-spanner.ly +changing-fret-orientations.ly +chord-glissando-in-tablature.ly +chordchanges-for-fretboards.ly +controlling-the-placement-of-chord-fingerings.ly +customizing-fretboard-fret-diagrams.ly +customizing-markup-fret-diagrams.ly +defining-predefined-fretboards-for-other-instruments.ly +faking-a-hammer-in-tablatures.ly +fingerings,-string-indications,-and-right-hand-fingerings.ly +flamenco-notation.ly +fret-diagrams-explained-and-developed.ly +fretboards-alternate-tables.ly +fretted-string-harmonics-in-tablature.ly +guitar-slides.ly +guitar-strum-rhythms.ly +how-to-change-fret-diagram-position.ly +jazz-combo-template.ly +laissez-vibrer-ties.ly +letter-tablature-formatting.ly +modern-tab-text-clef.ly +open-string-harmonics-in-tablature.ly +placement-of-right-hand-fingerings.ly +polyphony-in-tablature.ly +slides-in-tablature.ly +stem-and-beam-behavior-in-tablature.ly +string-number-extender-lines.ly diff --git a/Documentation/snippets/generating-custom-flags.ly b/Documentation/snippets/generating-custom-flags.ly new file mode 100644 index 0000000000..3668e9d48c --- /dev/null +++ b/Documentation/snippets/generating-custom-flags.ly @@ -0,0 +1,66 @@ +%% 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 = "rhythms, tweaks-and-overrides" + + texidoc = " +The @code{flag} property of the Stem grob can be set to a custom scheme +function to generate the glyph for the flag. + +" + doctitle = "Generating custom flags" +} % begin verbatim + +#(define-public (weight-flag stem-grob) + (let* ((log (- (ly:grob-property stem-grob 'duration-log) 2)) + (is-up? (eqv? (ly:grob-property stem-grob 'direction) UP)) + (yext (if is-up? (cons (* log -0.8) 0) (cons 0 (* log 0.8)))) + (flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext)) + (stroke-style (ly:grob-property stem-grob 'stroke-style)) + (stroke-stencil (if (equal? stroke-style "grace") + (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4) + empty-stencil))) + (ly:stencil-add flag-stencil stroke-stencil))) + + +% Create a flag stencil by looking up the glyph from the font +#(define (inverted-flag stem-grob) + (let* ((dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u")) + (flag (retrieve-glyph-flag "" dir "" stem-grob)) + (line-thickness (ly:staff-symbol-line-thickness stem-grob)) + (stem-thickness (ly:grob-property stem-grob 'thickness)) + (stem-width (* line-thickness stem-thickness)) + (stroke-style (ly:grob-property stem-grob 'stroke-style)) + (stencil (if (null? stroke-style) + flag + (add-stroke-glyph flag stem-grob dir stroke-style ""))) + (rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0))) + (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0)))) + +snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 } + +{ + \override Score.RehearsalMark #'self-alignment-X = #LEFT + \time 1/4 + \mark "Normal flags" + \snippetexamplenotes + + \mark "Custom flag: inverted" + \override Stem #'flag = #inverted-flag + \snippetexamplenotes + + \mark "Custom flag: weight" + \override Stem #'flag = #weight-flag + \snippetexamplenotes + + \mark "Revert to normal" + \revert Stem #'flag + \snippetexamplenotes +} + diff --git a/input/lsr/generating-random-notes.ly b/Documentation/snippets/generating-random-notes.ly similarity index 82% rename from input/lsr/generating-random-notes.ly rename to Documentation/snippets/generating-random-notes.ly index b71c9b1185..fd2f070adf 100644 --- a/input/lsr/generating-random-notes.ly +++ b/Documentation/snippets/generating-random-notes.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "pitches" +%% 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 diff --git a/Documentation/snippets/graphical-and-text-woodwind-diagrams.ly b/Documentation/snippets/graphical-and-text-woodwind-diagrams.ly new file mode 100644 index 0000000000..55cb6d54a7 --- /dev/null +++ b/Documentation/snippets/graphical-and-text-woodwind-diagrams.ly @@ -0,0 +1,70 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +En muchos casos, las llaves que no están en la columna central se +pueden presentar por el nombre de la llave así como de forma gráfica. + +" + + doctitlees = "Diagramas para viento madera gráficos y textuales" + +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde=" +In vielen Fällen können die nicht in der mittleren Reihe befindlichen +Löcher dargestellt werden, indem man die Lochbezeichnung oder +graphische Zeichen benutzt. + +" + + doctitlede = "Graphische und Text-Holzbläserdiagramme" + + +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Dans certains cas, vous pouvez opter pour l'affichage textuel d'une clé +située à côté d'un trou plutôt que sa représentation graphique. +" + + doctitlefr = "Ajout de texte à un diagramme de doigté" + + + lsrtags="winds" + texidoc=" +In may cases, the keys other than the central column can be +displayed by key name as well as by graphical means. +" + + doctitle = "Graphical and text woodwind diagrams" +} % begin verbatim + + +\relative c'' { + \textLengthOn + c1^\markup + \woodwind-diagram + #'piccolo + #'((cc . (one three)) + (lh . (gis)) + (rh . (ees))) + + c^\markup + \override #'(graphical . #f) { + \woodwind-diagram + #'piccolo + #'((cc . (one three)) + (lh . (gis)) + (rh . (ees))) + } +} diff --git a/Documentation/snippets/grid-lines--changing-their-appearance.ly b/Documentation/snippets/grid-lines--changing-their-appearance.ly new file mode 100644 index 0000000000..af86ed4f5f --- /dev/null +++ b/Documentation/snippets/grid-lines--changing-their-appearance.ly @@ -0,0 +1,87 @@ +%% 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 = "editorial-annotations" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede cambiar el aspecto de las líneas de rejilla +sobreescribiendo algunas de sus propiedades. + +" + doctitlees = "Líneas de rejilla: modificar su aspecto" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften +geändert werden. + +" + doctitlede = "Gitternetzlinien: Aussehen verändern" + +%% Translation of GIT committish: 9ccf7f0f5e52e074f3b7852416ad5b78718395c8 + texidocfr = " +Modifier certaines des propriétés du quadrillage temporel aura pour effet +d'en changer l'apparence. + +" + doctitlefr = "Apparence du quadrillage temporel" + + + texidoc = " +The appearance of grid lines can be changed by overriding some of their +properties. + +" + doctitle = "Grid lines: changing their appearance" +} % begin verbatim + +\score { + \new ChoirStaff << + \new Staff { + \relative c'' { + \stemUp + c'4. d8 e8 f g4 + } + } + \new Staff { + \relative c { + % this moves them up one staff space from the default position + \override Score.GridLine #'extra-offset = #'(0.0 . 1.0) + \stemDown + \clef bass + \once \override Score.GridLine #'thickness = #5.0 + c4 + \once \override Score.GridLine #'thickness = #1.0 + g'4 + \once \override Score.GridLine #'thickness = #3.0 + f4 + \once \override Score.GridLine #'thickness = #5.0 + e4 + } + } + >> + \layout { + \context { + \Staff + % set up grids + \consists "Grid_point_engraver" + % set the grid interval to one quarter note + gridInterval = #(ly:make-moment 1 4) + } + \context { + \Score + \consists "Grid_line_span_engraver" + % this moves them to the right half a staff space + \override NoteColumn #'X-offset = #-0.5 + } + } +} + diff --git a/input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly b/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly similarity index 87% rename from input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly rename to Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly index 356745f573..5448248f14 100644 --- a/input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly +++ b/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "editorial-annotations" +%% 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 @@ -39,7 +44,7 @@ this snippet. \override Staff.StaffSymbol #'line-count = #0 \override Staff.TimeSignature #'transparent = ##t \override Staff.Clef #'transparent = ##t - + % dummy notes to force regular note spacing \once \override Score.GridLine #'thickness = #4.0 c8 c c diff --git a/Documentation/snippets/grouping-beats.ly b/Documentation/snippets/grouping-beats.ly new file mode 100644 index 0000000000..8dc0ca9a36 --- /dev/null +++ b/Documentation/snippets/grouping-beats.ly @@ -0,0 +1,50 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Los patrones de barrado se pueden alterar con la propiedad +@code{beatGrouping}: + +" + doctitlees = "Agrupar los pulsos" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Balkengruppen können mit der @code{beatGrouping}-Eigenschaft geändert +werden: + +" + doctitlede = "Notengruppen" + + + +%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60 + texidocfr = " +La manière de gérer les ligatures est influencée par la propriété +@code{beatGrouping} : + +" + doctitlefr = "Regroupement selon la pulsation" + + lsrtags = "rhythms" + texidoc = " +Beaming patterns may be altered with the @code{beatGrouping} property: + +" + doctitle = "Grouping beats" +} % begin verbatim + + +\markup { + This snippet is deprecated as of version 2.13.5 and will be removed + in version 2.14. +} diff --git a/Documentation/snippets/guitar-slides.ly b/Documentation/snippets/guitar-slides.ly new file mode 100644 index 0000000000..a8946c2375 --- /dev/null +++ b/Documentation/snippets/guitar-slides.ly @@ -0,0 +1,66 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + + texidoces = " +A diferencia de los glissandos, los @q{slides} o ligaduras pueden +partir de un punto impreciso del mástil hasta un traste específico. +Una buena forma de hacerlo es añadir una nota de mordente antes de la +nota real, como se muestra en el ejemplo siguiente. + +" + + doctitlees = "Ligaduras de guitarra" + + lsrtags = "fretted-strings" + + texidoc = " +Unlike glissandos, slides may go from an imprecise point of the +fretboard to a specific fret. A good way to do that is to add a grace +hidden note before the note which is actually played, as demonstrated +in the following example. +" + doctitle = "Guitar slides" +} % begin verbatim + + +%% Hide fret number: useful to draw slide into/from a casual point of +%% the fretboard. +hideFretNumber = { + \once \override TabNoteHead #'transparent = ##t + \once \override NoteHead #'transparent = ##t + \once \override Stem #'transparent = ##t + \once \override NoteHead #'no-ledgers = ##t + \once \override Glissando #'(bound-details left padding) = #0.3 +} + +music= \relative c' { + \grace { \hideFretNumber d8\2 \glissando s2 } g2\2 + \grace { \hideFretNumber g8\2 \glissando s2 } d2 | + + \grace { \hideFretNumber c,8 \glissando s } f4\5^\markup \tiny { Slide into } + \grace { \hideFretNumber f8 \glissando s } a4\4 + \grace { \hideFretNumber e'8\3 \glissando s } b4\3^\markup \tiny { Slide from } + \grace { \hideFretNumber b'8 \glissando s2 } g4 | +} + +\score { + << + \new Staff { + \clef "G_8" + \music + } + \new TabStaff { + \music + } + >> +} diff --git a/Documentation/snippets/guitar-strum-rhythms.ly b/Documentation/snippets/guitar-strum-rhythms.ly new file mode 100644 index 0000000000..e2a6ce9352 --- /dev/null +++ b/Documentation/snippets/guitar-strum-rhythms.ly @@ -0,0 +1,86 @@ +%% 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 = "rhythms, fretted-strings" + +%% 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. + +" + doctitlees = "Ritmos rasgueados de guitarra" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In Gitarrennotation kann neben Melodie, Akkordbezeichnungen und +Bunddiagrammen auch der Schlagrhythmus angegeben werden. + +" + doctitlede = "Schlagrhythmus für Gitarren" + + + +%% Translation of GIT committish: 015b8e65e5e9a74cea1618b597402b5b74f89b89 + texidocfr = " +En matière de notation pour guitare, il arrive que soient indiqués les +@qq{coups de gratte} en plus de la mélodie, grilles d'accords et +diagrammes de tablature. + +" + doctitlefr = "Rythmique et guitare" + + texidoc = " +For guitar music, it is possible to show strum rhythms, along with +melody notes, chord names and fret diagrams. + +" + doctitle = "Guitar strum rhythms" +} % begin verbatim + +\include "predefined-guitar-fretboards.ly" +<< + \new ChordNames { + \chordmode { + c1 | f | g | c + } + } + \new FretBoards { + \chordmode { + c1 | f | g | c + } + } + \new Voice \with { + \consists "Pitch_squash_engraver" + } { + \relative c'' { + \improvisationOn + c4 c8 c c4 c8 c + f4 f8 f f4 f8 f + g4 g8 g g4 g8 g + c4 c8 c c4 c8 c + } + } + \new Voice = "melody" { + \relative c'' { + c2 e4 e4 + f2. r4 + g2. a4 + e4 c2. + } + } + \new Lyrics { + \lyricsto "melody" { + This is my song. + I like to sing. + } + } +>> + diff --git a/Documentation/snippets/hairpins-with-different-line-styles.ly b/Documentation/snippets/hairpins-with-different-line-styles.ly new file mode 100644 index 0000000000..bd8fb5d90e --- /dev/null +++ b/Documentation/snippets/hairpins-with-different-line-styles.ly @@ -0,0 +1,45 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% 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. + +" + doctitlees = "Reguladores con distintos estilos de línea" + + + + texidoc = " +Hairpins can take any style from @code{line-interface} - dashed-line, +dotted-line, line, trill or zigzag. + +" + doctitle = "Hairpins with different line styles" +} % begin verbatim + +\relative c' { + c2\< c\! + \override Hairpin #'style = #'dashed-line + c2\< c\! + \override Hairpin #'style = #'dotted-line + c2\< c\! + \override Hairpin #'style = #'line + c2\< c\! + \override Hairpin #'style = #'trill + c2\< c\! + \override Hairpin #'style = #'zigzag + c2\< c\! + \revert Hairpin #'style + c2\< c\! +} + diff --git a/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly new file mode 100644 index 0000000000..2e19d84b67 --- /dev/null +++ b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly @@ -0,0 +1,60 @@ +%% 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 = "rhythms, percussion" + + texidoc = " +Though the polymetric time signature shown was not the most essential +item here, it has been included to show the beat of this piece (which +is the template of a real Balkan song!). + +" + doctitle = "Heavily customized polymetric time signatures" +} % begin verbatim + +#(define plus (markup #:vcenter "+")) +#(define ((custom-time-signature one two three four five six + seven eight nine ten eleven num) grob) + (grob-interpret-markup grob + (markup #:override '(baseline-skip . 0) #:number + (#:line ((#:column (one num)) plus + (#:column (two num)) plus + (#:column (three num)) plus + (#:column (four num)) plus + (#:column (five num)) plus + (#:column (six num)) plus + (#:column (seven num)) plus + (#:column (eight num)) plus + (#:column (nine num)) plus + (#:column (ten num)) plus + (#:column (eleven num))))))) +melody = \relative c'' { + \set Staff.instrumentName = #"Bb Sop." + \key g \major + #(set-time-signature 25 8 '(3 2 2 3 2 2 2 2 3 2 2)) + \override Staff.TimeSignature #'stencil = + #(custom-time-signature "3" "2" "2" "3" "2" "2" + "2" "2" "3" "2" "2" "8") + c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break + c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4 + c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break + c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 + c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break +} + +drum = \new DrumStaff \drummode { + \bar "|:" bd4.^\markup { Drums } sn4 bd \bar ":" sn4. + bd4 sn \bar ":" bd sn bd4. sn4 bd \bar ":|" +} + +{ + \melody + \drum +} + diff --git a/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly b/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly new file mode 100644 index 0000000000..782a5210b0 --- /dev/null +++ b/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly @@ -0,0 +1,43 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Aquí se muestra la manera de ocultar las alteraciones de las notas +ligadas al comienzo de un sistema nuevo. + +" + + doctitlees = "Ocultar las alteraciones sobre notas ligadas al principio de un sistema nuevo" + + +%% Translation of GIT committish: 31097723b2b816696ad61696630a80ff17a39557 + texidocfr = "Cet exemple illustre comment, lorsqu'une note affublée + d'une altération accidentelle est prolongée, ne pas répéter cette + altération après un saut de ligne. +" + doctitlefr = "Non répétition de l'altération après saut de ligne + sur liaison de prolongation" + + + lsrtags = "pitches" + texidoc = "This shows how to hide accidentals on tied notes at the beginning of a +new system." + doctitle = "Hiding accidentals on tied notes at the beginning of a new system" +} % begin verbatim + + +\relative c'' { + \override Accidental #'hide-tied-accidental-after-break = ##t + cis1~ cis~ + \break + cis +} + diff --git a/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly new file mode 100644 index 0000000000..e9c9e9cc31 --- /dev/null +++ b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly @@ -0,0 +1,55 @@ +%% 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 = "expressive-marks" + +%% 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. +Esta línea se puede suprimir de la siguiente manera: + +" + doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie +gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf folgende Weise +unterdrückt werden: + +" + doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Les crescendos et decrescendos indiqués textuellement -- tels que +@emph{cresc.} ou @emph{dim.} -- sont suivis de pointillés qui montrent +leur étendue. On peut empêcher l'impression de ces pointillés avec : + +" + doctitlefr = "Masquage de l'extension des nuances textuelles" + + + texidoc = " +Text style dynamic changes (such as cresc. and dim.) are printed with a +dashed line showing their extent. This line can be suppressed in the +following way: + +" + doctitle = "Hiding the extender line for text dynamics" +} % begin verbatim + +\relative c'' { + \override DynamicTextSpanner #'style = #'none + \crescTextCresc + c1\< | d | b | c\! +} + diff --git a/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly b/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly new file mode 100644 index 0000000000..621c19de00 --- /dev/null +++ b/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly @@ -0,0 +1,177 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + + texidoc = " +Some dynamic expressions involve additional text, like @qq{sempre pp}. +Since dynamics are usually centered under the note, the \\pp would be +displayed way after the note it applies to. + +To correctly align the @qq{sempre pp} horizontally, so that it is +aligned as if it were only the \\pp, there are several approaches: + +* Simply use @code{\\once\\override DynamicText #'X-offset = #-9.2} +before the note with the dynamics to manually shift it to the correct +position. Drawback: This has to be done manually each time you use that +dynamic markup... * Add some padding (@code{#:hspace 7.1}) into the +definition of your custom dynamic mark, so that after lilypond +center-aligns it, it is already correctly aligned. Drawback: The +padding really takes up that space and does not allow any other markup +or dynamics to be shown in that position. + +* Shift the dynamic script @code{\\once\\override ... #'X-offset = ..}. +Drawback: @code{\\once\\override} is needed for every invocation! + +* Set the dimensions of the additional text to 0 (using +@code{#:with-dimensions '(0 . 0) '(0 . 0)}). Drawback: To LilyPond +@qq{sempre} has no extent, so it might put other stuff there and create +collisions (which are not detected by the collision detection!). Also, +there seems to be some spacing, so it's not exactly the same alignment +as without the additional text + +* Add an explicit shifting directly inside the scheme function for the +dynamic-script. + +* Set an explicit alignment inside the dynamic-script. By default, this +won't have any effect, only if one sets X-offset! Drawback: One needs +to set @code{DynamicText #'X-offset}, which will apply to all dynamic +texts! Also, it is aligned at the right edge of the additional text, +not at the center of pp. + + + + +" + doctitle = "Horizontally aligning custom dynamics (e.g. \"sempre pp\" \"piu f\" \"subito p\")" +} % begin verbatim + +\header { title = "Horizontally aligning custom dynamics" } + +\paper { ragged-right = ##f } + +% Solution 1: Using a simple markup with a particular halign value +% Drawback: It's a markup, not a dynamic command, so \dynamicDown +% etc. will have no effect +semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" } + +% Solution 2: Using a dynamic script & shifting with +% \once \override ... #'X-offset = .. +% Drawback: \once \override needed for every invocation +semppK = +#(make-dynamic-script + (markup #:line + (#:normal-text + #:italic "sempre" + #:dynamic "pp"))) + +% Solution 3: Padding the dynamic script so the center-alignment +% puts it at the correct position +% Drawback: the padding really reserves the space, nothing else can be there +semppT = +#(make-dynamic-script + (markup #:line + (#:normal-text + #:italic "sempre" + #:dynamic "pp" + #:hspace 7.1))) + +% Solution 4: Dynamic, setting the dimensions of the additional text to 0 +% Drawback: To lilypond "sempre" has no extent, so it might put +% other stuff there => collisions +% Drawback: Also, there seems to be some spacing, so it's not exactly the +% same alignment as without the additional text +semppM = +#(make-dynamic-script + (markup #:line + (#:with-dimensions '(0 . 0) '(0 . 0) + #:right-align + #:normal-text + #:italic "sempre" + #:dynamic "pp"))) + +% Solution 5: Dynamic with explicit shifting inside the scheme function +semppG = +#(make-dynamic-script + (markup #:hspace 0 + #:translate '(-18.85 . 0) + #:line (#:normal-text + #:italic "sempre" + #:dynamic "pp"))) + +% Solution 6: Dynamic with explicit alignment. This has only effect +% if one sets X-offset! +% Drawback: One needs to set DynamicText #'X-offset! +% Drawback: Aligned at the right edge of the additional text, +% not at the center of pp +semppMII = +#(make-dynamic-script + (markup #:line (#:right-align + #:normal-text + #:italic "sempre" + #:dynamic "pp"))) + +\context StaffGroup << + \context Staff = "s" << + \set Staff.instrumentName = #"Normal" + \relative c'' { + \key es \major + c4\pp c\p c c | c\ff c c\pp c + } + >> + \context Staff = "sMarkup" << + \set Staff.instrumentName = \markup \column { Normal markup } + \relative c'' { + \key es \major + c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c + } + >> + \context Staff = "sK" << + \set Staff.instrumentName = \markup \column { Explicit shifting } + \relative c'' { + \key es \major + \once \override DynamicText #'X-offset = #-9.2 + c4\semppK c\p c c + c4\ff c + \once \override DynamicText #'X-offset = #-9.2 + c4\semppK c + } + >> + \context Staff = "sT" << + \set Staff.instrumentName = \markup \column { Right padding } + \relative c'' { + \key es \major + c4\semppT c\p c c | c\ff c c\semppT c + } + >> + \context Staff = "sM" << + \set Staff.instrumentName = \markup \column { Setting dimension "to zero" } + \relative c'' { + \key es \major + c4\semppM c\p c c | c\ff c c\semppM c + } + >> + \context Staff = "sG" << + \set Staff.instrumentName = \markup \column { Shifting inside dynamics } + \relative c'' { + \key es \major + c4\semppG c\p c c | c\ff c c\semppG c + } + >> + \context Staff = "sMII" << + \set Staff.instrumentName = \markup \column { Alignment inside dynamics } + \relative c'' { + \key es \major + % Setting to ##f (false) gives the same result + \override DynamicText #'X-offset = #0 + c4\semppMII c\p c c | c\ff c c\semppMII c + } + >> +>> + diff --git a/input/lsr/how-to-change-fret-diagram-position.ly b/Documentation/snippets/how-to-change-fret-diagram-position.ly similarity index 84% rename from input/lsr/how-to-change-fret-diagram-position.ly rename to Documentation/snippets/how-to-change-fret-diagram-position.ly index 17997e9c77..b9d079b0a9 100644 --- a/input/lsr/how-to-change-fret-diagram-position.ly +++ b/Documentation/snippets/how-to-change-fret-diagram-position.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "fretted-strings, tweaks-and-overrides" @@ -19,7 +23,7 @@ invisible notes in that voice (as shown in the second example). If you need to move the fret according with a rythmic position inside the bar (in the example, the third beat of the measure) the second example is better, because the fret is aligned with the third beat -itself. +itself. " doctitle = "How to change fret diagram position" @@ -46,7 +50,7 @@ harmonies = \chordmode b4.~^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break % HERE IS THE SECOND METHOD << - { a8 b4.~ b4. a8} + { a8 b4.~ b4. a8} { s4 s4 s4^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } } >> diff --git a/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly new file mode 100644 index 0000000000..2bf2b2a013 --- /dev/null +++ b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly @@ -0,0 +1,53 @@ +%% 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 = "expressive-marks, staff-notation, editorial-annotations, tweaks-and-overrides" + + texidoc = " +This method prints two 'rehearsal marks', one on top of the other. It +shifts the lower rehearsal mark below the staff and then adds padding +above it in order to place the upper rehearsal mark above the staff. + +By adjusting the extra-offset and baseline-skip values you can increase +or decrease the overall space between the rehearsal mark and the staff. + +Because nearly every type of glyph or string can be made to behave like +a rehearsal mark it is possible to centre those above and below a bar +line. + +Adding the appropriate 'break visibility' as shown in snippet 1 will +allow you to position two marks at the end of a line as well. + +Note: Method 1 is less complex than Method 2 but does not really allow +for fine tuning of placement of one of the rehearsal marks without +affecting the other. It may also give some problems with vertical +spacing, since using @code{extra-offset} does not change the bounding +box of the mark from its original value. + + + +" + doctitle = "How to print two rehearsal marks above and below the same barline (method 1)" +} % begin verbatim + +\relative c'{ + c d e f | + \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5) + \once \override Score.RehearsalMark #'baseline-skip = #9 + \mark \markup \center-column { \circle 1 \box A } + g f e d | + \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5) + \once \override Score.RehearsalMark #'baseline-skip = #9 + \mark \markup \center-column { \flat { \bold \small \italic Fine. } } + g f e d | + \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5) + \once \override Score.RehearsalMark #'baseline-skip = #9 + \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible + \mark \markup \center-column { \musicglyph #"scripts.ufermata" \box z } +} diff --git a/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly new file mode 100644 index 0000000000..cfd14e83b8 --- /dev/null +++ b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly @@ -0,0 +1,58 @@ +%% 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 = "expressive-marks, staff-notation, editorial-annotations, tweaks-and-overrides" + + texidoc = " +This method prints two 'rehearsal marks' - one above the stave and one +below, by creating two voices, adding the Rehearsal Mark engraver to +each voice - without this no rehearsal mark is printed - and then +placing each rehearsal mark UP and DOWN in each voice respectively. + +This method (as opposed to method 1) is more complex, but allows for +more flexibility, should it be needed to tweak each rehearsal mark +independently of the other. + +" + doctitle = "How to print two rehearsal marks above and below the same barline (method 2)" +} % begin verbatim + +\score { + \relative c' + << + \new Staff { + << + \new Voice \with { + \consists Mark_engraver + \consists "Staff_collecting_engraver" + } + { c4 d e f + \mark \markup { \box A } + c4 d e f + } + \new Voice \with { + \consists Mark_engraver + \consists "Staff_collecting_engraver" + \override RehearsalMark #'direction = #DOWN + } + { s4 s s s + \mark \markup { \circle 1 } + s4 s s s + } + >> + } + >> + \layout { + \context { + \Score + \remove "Mark_engraver" + \remove "Staff_collecting_engraver" + } + } +} diff --git a/Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.ly b/Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.ly new file mode 100644 index 0000000000..c7bedbf4e2 --- /dev/null +++ b/Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.ly @@ -0,0 +1,22 @@ +%% 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 = "text, vocal-music" + + texidoc = " +This can be achieved by separating those syllables by tildes. + +" + doctitle = "How to put ties between syllables in lyrics" +} % begin verbatim + +\lyrics { + wa~o~a +} + diff --git a/Documentation/snippets/hymn-template.ly b/Documentation/snippets/hymn-template.ly new file mode 100644 index 0000000000..378295056f --- /dev/null +++ b/Documentation/snippets/hymn-template.ly @@ -0,0 +1,153 @@ +%% 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 { +%% 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: 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 +añadir los versos como texto independiente debajo de la música. + +" + + doctitlees = "Plantilla para himnos" +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde = " +Dieses Beispiel zeigt eine Möglichkeit, eine Hymnusmelodie zu setzen, in +der jede Zeiel mit einem Auftakt beginnt und einem unvollständigen +Takt abschließt. Es zeigt auch, wie man die Strophen als allein stehenden +Text unter die Noten hinzufügt. + +" + doctitlede = "Hymnus-Vorlage" + + +%% Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37 + + texidocfr = " +Le code ci-dessous illustre la manière d'agencer un cantique liturgique +dans lequel chaque ligne débute et se termine par une mesure incomplète. +Vous noterez par ailleurs l'affichage des paroles indépendamment de la +musique. + +" + doctitlefr = "Modèle pour cantique" + + texidoc = " +This code shows one way of setting out a hymn tune when each line +starts and ends with a partial measure. It also shows how to add the +verses as stand-alone text under the music. + +" + doctitle = "Hymn template" +} % begin verbatim + +Timeline = { + \time 4/4 + \tempo 4=96 + \partial 2 + s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||" \break + s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||" +} + +SopranoMusic = \relative g' { + g4 g | g g g g | g g g g | g g g g | g2 + g4 g | g g g g | g g g g | g g g g | g2 +} + +AltoMusic = \relative c' { + d4 d | d d d d | d d d d | d d d d | d2 + d4 d | d d d d | d d d d | d d d d | d2 +} + +TenorMusic = \relative a { + b4 b | b b b b | b b b b | b b b b | b2 + b4 b | b b b b | b b b b | b b b b | b2 +} + +BassMusic = \relative g { + g4 g | g g g g | g g g g | g g g g | g2 + g4 g | g g g g | g g g g | g g g g | g2 +} + +global = { + \key g \major +} + +\score { % Start score + << + \new PianoStaff << % Start pianostaff + \new Staff << % Start Staff = RH + \global + \clef "treble" + \new Voice = "Soprano" << % Start Voice = "Soprano" + \Timeline + \voiceOne + \SopranoMusic + >> % End Voice = "Soprano" + \new Voice = "Alto" << % Start Voice = "Alto" + \Timeline + \voiceTwo + \AltoMusic + >> % End Voice = "Alto" + >> % End Staff = RH + \new Staff << % Start Staff = LH + \global + \clef "bass" + \new Voice = "Tenor" << % Start Voice = "Tenor" + \Timeline + \voiceOne + \TenorMusic + >> % End Voice = "Tenor" + \new Voice = "Bass" << % Start Voice = "Bass" + \Timeline + \voiceTwo + \BassMusic + >> % End Voice = "Bass" + >> % End Staff = LH + >> % End pianostaff + >> +} % End score + +\markup { + \fill-line { + "" + { + \column { + \left-align { + "This is line one of the first verse" + "This is line two of the same" + "And here's line three of the first verse" + "And the last line of the same" + } + } + } + "" + } +} + +\paper { % Start paper block + indent = 0 % don't indent first system + line-width = 130 % shorten line length to suit music +} % End paper block + diff --git a/Documentation/snippets/incipit.ly b/Documentation/snippets/incipit.ly new file mode 100644 index 0000000000..e78a5f3425 --- /dev/null +++ b/Documentation/snippets/incipit.ly @@ -0,0 +1,292 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Los «incipit» se pueden escribir utilizando el grob del nombre del +instruemento, pero manteniendo independientes las definiciones del +nombre del instrumento y del incipit." + + doctitlees = "Incipit" + + lsrtags = "staff-notation, ancient-notation" + texidoc = " +Incipits can be added using the instrument name grob, but keeping +separate the instrument name definition and the incipit definition. +" + doctitle = "Incipit" +} % begin verbatim + + +incipit = +#(define-music-function (parser location incipit-music) (ly:music?) + #{ + \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT + \once \override Staff.InstrumentName #'self-alignment-Y = #UP + \once \override Staff.InstrumentName #'Y-offset = + #(lambda (grob) + (+ 4 (system-start-text::calc-y-offset grob))) + \once \override Staff.InstrumentName #'padding = #0.3 + \once \override Staff.InstrumentName #'stencil = + #(lambda (grob) + (let* ((instrument-name (ly:grob-property grob 'long-text)) + (layout (ly:output-def-clone (ly:grob-layout grob))) + (music (make-sequential-music + (list (context-spec-music + (make-sequential-music + (list (make-property-set + 'instrumentName instrument-name) + (make-grob-property-set + 'VerticalAxisGroup + 'Y-extent '(-4 . 4)))) + 'MensuralStaff) + $incipit-music))) + (score (ly:make-score music)) + (mm (ly:output-def-lookup layout 'mm)) + (indent (ly:output-def-lookup layout 'indent)) + (width (ly:output-def-lookup layout 'incipit-width)) + (incipit-width (if (number? width) + (* width mm) + (* indent 0.5)))) + + (ly:output-def-set-variable! layout 'indent (- indent + incipit-width)) + (ly:output-def-set-variable! layout 'line-width indent) + (ly:output-def-set-variable! layout 'ragged-right #f) + (ly:output-def-set-variable! layout 'ragged-last #f) + (ly:output-def-set-variable! layout 'system-count 1) + (ly:score-add-output-def! score layout) + (ly:grob-set-property! grob 'long-text + (markup #:score score)) + (system-start-text::print grob))) + #}) + +%%%%%%%%%%%%%%%%%%%%%%%%% + +global = { + \set Score.skipBars = ##t + \key g \major + \time 4/4 + + % the actual music + \skip 1*8 + + % let finis bar go through all staves + \override Staff.BarLine #'transparent = ##f + + % finis bar + \bar "|." +} + +discantusIncipit = << + \new MensuralVoice = "discantusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c1" + \key f \major + \time 2/2 + c''1. + } + >> + \new Lyrics \lyricsto discantusIncipit { IV- } +>> + +discantusNotes = { + \transpose c' c'' { + \clef "treble" + d'2. d'4 | + b e' d'2 | + c'4 e'4.( d'8 c' b | + a4) b a2 | + b4.( c'8 d'4) c'4 | + \once \override NoteHead #'transparent = ##t + c'1 | + b\breve | + } +} + +discantusLyrics = \lyricmode { + Ju -- bi -- | + la -- te De -- | + o, om -- + nis ter -- | + ra, __ om- | + "..." | + -us. | +} + +altusIncipit = << + \new MensuralVoice = "altusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c3" + \key f \major + \time 2/2 + r1 f'1. + } + >> + \new Lyrics \lyricsto altusIncipit { IV- } +>> + +altusNotes = { + \transpose c' c'' { + \clef "treble" + % two measures + r2 g2. e4 fis g | + a2 g4 e | + fis g4.( fis16 e fis4) | + g1 | + \once \override NoteHead #'transparent = ##t + g1 | + g\breve | + } +} + +altusLyrics = \lyricmode { + % two measures + Ju -- bi -- la -- te | + De -- o, om -- | + nis ter -- ra, | + "..." | + -us. | +} + +tenorIncipit = << + \new MensuralVoice = "tenorIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c4" + \key f \major + \time 2/2 + r\longa + r\breve + r1 c'1. + } + >> + \new Lyrics \lyricsto tenorIncipit { IV- } +>> + +tenorNotes = { + \transpose c' c' { + \clef "treble_8" + R1 | + R1 | + R1 | + % two measures + r2 d'2. d'4 b e' | + \once \override NoteHead #'transparent = ##t + e'1 | + d'\breve | + } +} + +tenorLyrics = \lyricmode { + % two measures + Ju -- bi -- la -- te | + "..." | + -us. +} + +bassusIncipit = << + \new MensuralVoice = "bassusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "bass" + \key f \major + \time 2/2 + %% incipit + r\maxima + f1. + } + >> + \new Lyrics \lyricsto bassusIncipit { IV- } +>> + +bassusNotes = { + \transpose c' c' { + \clef "bass" + R1 | + R1 | + R1 | + R1 | + g2. e4 | + \once \override NoteHead #'transparent = ##t + e1 | + g\breve | + } +} + +bassusLyrics = \lyricmode { + Ju -- bi- | + "..." | + -us. +} + +\score { + << + \new StaffGroup = choirStaff << + \new Voice = "discantusNotes" << + \global + \set Staff.instrumentName = #"Discantus" + \incipit \discantusIncipit + \discantusNotes + >> + \new Lyrics = "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } + \new Voice = "altusNotes" << + \global + \set Staff.instrumentName = #"Altus" + \incipit \altusIncipit + \altusNotes + >> + \new Lyrics = "altusLyrics" \lyricsto altusNotes { \altusLyrics } + \new Voice = "tenorNotes" << + \global + \set Staff.instrumentName = #"Tenor" + \incipit \tenorIncipit + \tenorNotes + >> + \new Lyrics = "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } + \new Voice = "bassusNotes" << + \global + \set Staff.instrumentName = #"Bassus" + \incipit \bassusIncipit + \bassusNotes + >> + \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } + >> + >> + \layout { + \context { + \Score + %% no bar lines in staves or lyrics + \override BarLine #'transparent = ##t + } + %% the next two instructions keep the lyrics between the bar lines + \context { + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + } + \context { + \Voice + %% no slurs + \override Slur #'transparent = ##t + %% Comment in the below "\remove" command to allow line + %% breaking also at those bar lines where a note overlaps + %% into the next measure. The command is commented out in this + %% short example score, but especially for large scores, you + %% will typically yield better line breaking and thus improve + %% overall spacing if you comment in the following command. + %%\remove "Forbid_line_break_engraver" + } + indent = 6\cm + incipit-width = 4\cm + } +} diff --git a/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly b/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly new file mode 100644 index 0000000000..5f0eee4487 --- /dev/null +++ b/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly @@ -0,0 +1,80 @@ +%% 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 = "keyboards" + +%% 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, +el @code{PianoStaff} se debe configurar para que acepte símbolos de +arpegio de pentagrama cruzado y los símbolos de arpegio se deben +configurar a la forma de corchete en el contexto de @code{PianoStaff}. + +(Debussy, Les collines d’Anacapri, m. 65) + +" + doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen +Systemen mit der selben Hand gespielt werden sollen. Damit das notiert +werden kann, muss der @code{PianoStaff}-Kontext so eingestellt werden, +dass er Arpeggios über Systeme hinweg akzeptiert und die Form der Arpeggios +muss auf eine Klammer eingestellt werden. + +(Debussy, Les collines d’Anacapri, T. 65) + +" + doctitlede = "Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen" + + texidoc = " +An arpeggio bracket can indicate that notes on two different staves are +to be played with the same hand. In order to do this, the +@code{PianoStaff} must be set to accept cross-staff arpeggios and the +arpeggios must be set to the bracket shape in the @code{PianoStaff} +context. + + +(Debussy, Les collines d’Anacapri, m. 65) + +" + doctitle = "Indicating cross-staff chords with arpeggio bracket" +} % begin verbatim + +\new PianoStaff << + \set PianoStaff.connectArpeggios = ##t + \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket + \new Staff { + \relative c' { + \key b \major + \time 6/8 + b8-.(\arpeggio fis'-.\> cis-. e-. gis-. b-.)\!\fermata^\laissezVibrer + \bar "||" + } + } + \new Staff { + \relative c' { + \clef bass + \key b \major + << + { + 2.\arpeggio + } + \\ + { + 2. + } + >> + } + } +>> + diff --git a/Documentation/snippets/inserting-a-caesura.ly b/Documentation/snippets/inserting-a-caesura.ly new file mode 100644 index 0000000000..5f458d2c63 --- /dev/null +++ b/Documentation/snippets/inserting-a-caesura.ly @@ -0,0 +1,59 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% 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 +una marca de cesura curva. + +" + doctitlees = "Insertar una cesura" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft +des @code{BreathingSign}-Objektes verändert wird. Ein gekrümmtes +Zäsurzeichen ist auch möglich. +" + doctitlede = "Eine Zäsur einfügen" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Une surcharge de la propriété @code{'text} de l'objet +@code{BreathingSign} permet de créer une marque de césure. LilyPond +dispose également d'une variante courbée. + +" + doctitlefr = "Insertion d'une césure" + + + texidoc = " +Caesura marks can be created by overriding the @code{'text} property of +the @code{BreathingSign} object. A curved caesura mark is also +available. + +" + doctitle = "Inserting a caesura" +} % begin verbatim + +\relative c'' { + \override BreathingSign #'text = \markup { + \musicglyph #"scripts.caesura.straight" + } + c8 e4. \breathe g8. e16 c4 + + \override BreathingSign #'text = \markup { + \musicglyph #"scripts.caesura.curved" + } + g8 e'4. \breathe g8. e16 c4 +} diff --git a/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly b/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly new file mode 100644 index 0000000000..36c4085661 --- /dev/null +++ b/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly @@ -0,0 +1,46 @@ +%% 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 = "staff-notation" + + texidoc = " +The @code{\\markup} command is quite versatile. In this snippet, it +contains a @code{\\score} block instead of texts or marks. + +" + doctitle = "Inserting score fragments above a staff as markups" +} % begin verbatim + +tuning = \markup { + \score { + \new Staff \with { \remove "Time_signature_engraver" } + { + \clef bass + 1 + } + \layout { ragged-right = ##t } + } +} + +\header { + title = "Solo Cello Suites" + subtitle = "Suite IV" + subsubtitle = \markup { Originalstimmung: \general-align #Y #CENTER \tuning } +} + +\layout { ragged-right = ##f } + +\relative c'' { + \time 4/8 + \times 2/3 { c8 d e } \times 2/3 { c d e } + \times 2/3 { c8 d e } \times 2/3 { c d e } + g8 a g a + g8 a g a +} + diff --git a/Documentation/snippets/isolated-percent-repeats.ly b/Documentation/snippets/isolated-percent-repeats.ly new file mode 100644 index 0000000000..187ae6a7ae --- /dev/null +++ b/Documentation/snippets/isolated-percent-repeats.ly @@ -0,0 +1,54 @@ +%% 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 = "repeats" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +También se pueden imprimir símbolos de porcentaje sueltos. + +" + doctitlees = "Símbolos de porcentaje sueltos" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird +erreicht, indem man eine Ganztaktpause notiert und ihre Ausgabeform +ändert: + +" + doctitlede = "Isolierte Prozentwiederholungen" + +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Des symboles de pourcentage isolés peuvent aussi être obtenus, au +moyen d'un silence multi-mesures dont on modifie l'aspect : + +" + doctitlefr = "Répétition en pourcent isolée" + + + texidoc = " +Isolated percents can also be printed. + +" + doctitle = "Isolated percent repeats" +} % begin verbatim + +makePercent = +#(define-music-function (parser location note) (ly:music?) + "Make a percent repeat the same length as NOTE." + (make-music 'PercentEvent + 'length (ly:music-length note))) + +\relative c'' { + \makePercent s1 +} + diff --git a/input/lsr/jazz-combo-template.ly b/Documentation/snippets/jazz-combo-template.ly similarity index 76% rename from input/lsr/jazz-combo-template.ly rename to Documentation/snippets/jazz-combo-template.ly index c230936cf1..f9f0e374ec 100644 --- a/input/lsr/jazz-combo-template.ly +++ b/Documentation/snippets/jazz-combo-template.ly @@ -1,10 +1,28 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \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: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c texidoces = " Ésta es una plantilla bastante avanzada, para un conjunto de jazz. Observe que la notación de todos los instrumentos está en @@ -14,17 +32,30 @@ dentro de una sección @code{\\transpose}. " doctitlees = "Plantilla para combo de jazz" - + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 texidocde = " -Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung: -Alle Instrumente sind in @code{\key c \major} (C-Dur) notiert. Das bezieht sich -auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn -sich die Noten innerhalb eines @code{\transpose}-Abschnitts befinden. +Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung: +Alle Instrumente sind in @code{\\key c \major} (C-Dur) notiert. Das bezieht sich +auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn +sich die Noten innerhalb eines @code{\\transpose}-Abschnitts befinden. " doctitlede = "Vorlage für Jazz-Combo" +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Bien que compliqué de prime abord, voici un canevas tout à fait indiqué +pour les ensembles de jazz. Vous noterez que tous les instruments sont +notés en ut (@code{\\key c \major}), la tonalité de concert. Les notes +seront automatiquement transposée dès lors qu'elles seront inscrites +dans une section @code{\\transpose}. + +" + doctitlefr = "Symboles de jazz" + texidoc = " This is quite an advanced template, for a jazz ensemble. Note that all instruments are notated in @code{\\key c \\major}. This refers to the @@ -208,7 +239,7 @@ PianoRH = { PianoLH = { \clef bass \global - \set Staff.midiInstrument = "acoustic grand" + \set Staff.midiInstrument = #"acoustic grand" << \new Voice = "one" \lhUpper \new Voice = "two" \lhLower @@ -271,7 +302,7 @@ drumContents = { \new Staff = "barisax" \bariSax \new Staff = "trombone" \trombone >> - + \new StaffGroup = "rhythm" << \new ChordNames = "chords" \gtrHarmony \new Staff = "guitar" \guitar @@ -280,9 +311,8 @@ drumContents = { \new DrumStaff \drumContents >> >> - \layout { - \context { \RemoveEmptyStaffContext } + \context { \Staff \RemoveEmptyStaves } \context { \Score \override BarNumber #'padding = #3 @@ -290,7 +320,6 @@ drumContents = { skipBars = ##t } } - \midi { } } diff --git a/Documentation/snippets/keep-change-clefs-full-sized.ly b/Documentation/snippets/keep-change-clefs-full-sized.ly new file mode 100644 index 0000000000..513edaa8e4 --- /dev/null +++ b/Documentation/snippets/keep-change-clefs-full-sized.ly @@ -0,0 +1,49 @@ +%% 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 = "pitches, tweaks-and-overrides" + +%% 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 +@code{full-size-change}. + +" + doctitlees = "Mantener el tamaño del símbolo en los cambios de clave" + + + + texidoc = " +When a clef is changed, the clef sign displayed is smaller than the +initial clef. This can be overridden with @code{full-size-change}. + +" + doctitle = "Keep change clefs full sized" +} % begin verbatim + +\relative c' { + \clef "treble" + c1 + \clef "bass" + c1 + \clef "treble" + c1 + \override Staff.Clef #'full-size-change = ##t + \clef "bass" + c1 + \clef "treble" + c1 + \revert Staff.Clef #'full-size-change + \clef "bass" + c1 + \clef "treble" + c1 +} + diff --git a/Documentation/snippets/keyboard-headword.ly b/Documentation/snippets/keyboard-headword.ly new file mode 100644 index 0000000000..2e5fde7ee3 --- /dev/null +++ b/Documentation/snippets/keyboard-headword.ly @@ -0,0 +1,256 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" + +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 2.2 Keyboard instruments + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +% M. Ravel, Sonatine (1905) +% First movement + +\layout { + \context { + \Score + \remove "Bar_number_engraver" + } +} + +fermataLong = \markup { + \override #'(direction . 1) + \override #'(baseline-skip . 2) { + \dir-column { + \musicglyph #"scripts.ufermata" + \text \italic \center-align long + } + } +} + +\new PianoStaff << + \set PianoStaff.connectArpeggios = ##t + \new Staff { + \time 2/4 + \key fs \major + << + \new Voice { + \voiceOne + fs''8 ( ^\markup { + \override #'(baseline-skip . 2.4) \column { + \line \bold { Un peu retenu } + \line \italic { très expressif } + } + } + es''16 + cs''16 + as'4 ) + | + fs''8 ( + es''16 + cs''16 + as'4 ) + | + fs''8 ( + es''16 + cs''16 + as'8 + cs''8 ) + | + } + \new Voice { + \voiceTwo + gs'8\rest \ppp + fs'4 ( + es'8 ) + | + gs'8\rest + fs'4 ( + es'8 ) + | + gs'8\rest + fs'4 ( + es'8 ) + | + } + >> + \clef bass + 4 ( ^ \markup \bold { Rall. } + \override Script #'stencil = #(lambda (grob) + (grob-interpret-markup grob fermataLong)) + 8 ) \fermata + \noBeam + \clef treble + \slurUp + \once \override Hairpin #'to-barline = ##f + 8 ( \pp \> + | + 4. \! ) ^\markup \bold { a Tempo } + \slurUp + 8 ^\( \> + | + 4. \! \) + << + \new Voice { + \voiceOne + 8 ( + | + cs'8 ^\markup \bold { Rallentando } + b16 + cs'16 + d'8 + e'16 + fs'16 + | + 4. ) + s8 + | + r8 + 4 \arpeggio + e''16 ( ^\markup \bold { Lent } + fs''16 + | + \voiceTwo + 2 ) + | + } + \new Voice { + \voiceTwo + s8 + | + 4 \< + 4 \> + | + s4. \! + \slurUp + \once \override Script #'direction = #UP + 8 ( \accent + | + 4. ) + \once \override Hairpin #'to-barline = ##f + 8 \ppp \> + | + s8 \! + \stemDown + \once \override Script #'direction = #UP + \ottava #1 + \voiceOne + \once \override PianoStaff.Arpeggio #'padding = #0.8 + 4. \arpeggio \fermata + \ottava #0 + \bar "|." + } + >> + } + \new Staff << + \set Staff.pedalSustainStyle = #'bracket + \key fs \major + \clef bass + \new Voice { + \voiceOne + ds'4 \tenuto + cs'4 \tenuto + | + ds'4 \tenuto + cs'4 \tenuto + | + ds'4 \tenuto + cs'4 \tenuto + | + s8 + \clef treble + 8 [ + \clef bass + 8 \fermata ] + s8 + | + fs8\rest + \clef treble + 4 \tenuto + s8 + | + fs8\rest + \clef treble + 4 \tenuto + s8 + | + s2 + | + ds8\rest + \clef treble + 4 + \clef bass + s8 + | + s8 + \clef treble + 4 \arpeggio + \clef bass + s8 + | + s8 + \clef treble + 4. \arpeggio \fermata + | + } + \new Voice { + \voiceTwo + ds'8 [ ( + < ds bs >8 + cs'8 + < ds as >8 ] ) + | + ds'8 [ ( + < ds bs >8 + cs'8 + < ds as >8 ] ) + | + ds'8 [ ( + < ds bs >8 + cs'8 + < ds as >8 ] ) + | + \once \override Script #'outside-staff-priority = #100 + \once \override TextScript #'outside-staff-priority = #500 + 4. \fermata _\markup \italic { ped. } + 8 ( + | + 4. ) \sustainOn + \clef bass + 8 \( \sustainOff + | + 4. \) \sustainOn + \clef bass + 8 ( \sustainOff + | + 4 + 4 + | + 4. ) \sustainOn + 8 ( \sustainOff + | + 4. ) \sustainOn + \slurUp + 8 ( \sustainOff \sustainOn + | + 2 ) \sustainOff \sustainOn + | + } + >> +>> diff --git a/input/lsr/keyboards-intro.itely b/Documentation/snippets/keyboards-intro.itely similarity index 100% rename from input/lsr/keyboards-intro.itely rename to Documentation/snippets/keyboards-intro.itely diff --git a/input/lsr/keyboards.snippet-list b/Documentation/snippets/keyboards.snippet-list similarity index 87% rename from input/lsr/keyboards.snippet-list rename to Documentation/snippets/keyboards.snippet-list index d4f7e28184..0c440941d6 100644 --- a/input/lsr/keyboards.snippet-list +++ b/Documentation/snippets/keyboards.snippet-list @@ -1,7 +1,9 @@ accordion-discant-symbols.ly +changing-the-text-for-sustain-markings.ly clusters.ly controlling-the-placement-of-chord-fingerings.ly creating-slurs-across-voices.ly +cross-staff-tremolos.ly fine-tuning-pedal-brackets.ly indicating-cross-staff-chords-with-arpeggio-bracket.ly jazz-combo-template.ly diff --git a/Documentation/snippets/laissez-vibrer-ties.ly b/Documentation/snippets/laissez-vibrer-ties.ly new file mode 100644 index 0000000000..d2f12381ad --- /dev/null +++ b/Documentation/snippets/laissez-vibrer-ties.ly @@ -0,0 +1,32 @@ +%% 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 = "expressive-marks, keyboards, fretted-strings" + + texidoc = " +Laissez vibrer ties have a fixed size. Their formatting can be tuned +using @code{'tie-configuration}. + +" + doctitle = "Laissez vibrer ties" +} % begin verbatim + +\relative c' { + 4\laissezVibrer r \laissezVibrer r + 4\laissezVibrer r 4.\laissezVibrer r8 + + 4\laissezVibrer r + \override LaissezVibrerTieColumn #'tie-configuration + = #`((-7 . ,DOWN) + (-5 . ,DOWN) + (-3 . ,UP) + (-1 . ,UP)) + 4\laissezVibrer r +} + diff --git a/Documentation/snippets/letter-tablature-formatting.ly b/Documentation/snippets/letter-tablature-formatting.ly new file mode 100644 index 0000000000..db67212b65 --- /dev/null +++ b/Documentation/snippets/letter-tablature-formatting.ly @@ -0,0 +1,46 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +La tablatura se puede formatear utilizando letras en lugar de números. + +" + + doctitlees = "Formateado de tablaturas con letras" + + lsrtags = "staff-notation, fretted-strings" + + texidoc = " +Tablature can be formatted using letters instead of numbers. + +" + doctitle = "Letter tablature formatting" +} % begin verbatim + + +music = \relative c { + c4 d e f + g4 a b c + d4 e f g +} + +<< + \new Staff { + \clef "G_8" + \music + } + \new TabStaff \with { + tablatureFormat = #fret-letter-tablature-format + } + { + \music + } +>> diff --git a/input/lsr/line-arrows.ly b/Documentation/snippets/line-arrows.ly similarity index 78% rename from input/lsr/line-arrows.ly rename to Documentation/snippets/line-arrows.ly index 566ee690fb..f0b86dd6ff 100644 --- a/input/lsr/line-arrows.ly +++ b/Documentation/snippets/line-arrows.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "expressive-marks, tweaks-and-overrides" +%% 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). @@ -30,11 +35,11 @@ Glissando). \override TextSpanner #'(bound-details right stencil-align-dir-y) = #CENTER \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER - + \override Glissando #'(bound-details right arrow) = ##t \override Glissando #'arrow-length = #0.5 \override Glissando #'arrow-width = #0.25 - + a8\startTextSpan gis a4 b\glissando b, g'4 c\stopTextSpan c2 } diff --git a/Documentation/snippets/lyrics-alignment.ly b/Documentation/snippets/lyrics-alignment.ly new file mode 100644 index 0000000000..bc2e4fb3a9 --- /dev/null +++ b/Documentation/snippets/lyrics-alignment.ly @@ -0,0 +1,73 @@ +%% 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 = "text, vocal-music" + +%% 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}. +@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; +sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y +@code{#RIGHT}. + +" + doctitlees = "Alineación de la letra" + +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + + texidocde = " +Die horizontale Ausrichtung von Gesangstext kann eingestellt werden, indem +man die @code{self-alignment-X}-Eigenschaft des @code{LyricText}-Objekts +verändert. @code{#-1} bedeutet links, @code{#0} bedeutet mittig und @code{#1} +bedeutet rechts, man kann aber genauso gut auch @code{#LEFT}, @code{#CENTER} +und @code{#RIGHT} benutzen. + +" + doctitlede = "Ausrichtung von Gesangstext" + + +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +L'alignement horizontal des paroles peut se gérer à l'aide de la +propriété @code{self-alignment-X} de l'objet @code{LyricText}. +Les valeurs @code{#-1} ou @code{#LEFT} produiront un alignement par la +gauche, les valeurs @code{#0} ou @code{#CENTER} un alignement centré, et +les valeurs @code{#1} ou @code{#RIGHT} un alignement par la droite. + +" + doctitlefr = "Alignement des syllabes" + + + texidoc = " +Horizontal alignment for lyrics cam be set by overriding the +@code{self-alignment-X} property of the @code{LyricText} object. +@code{#-1} is left, @code{#0} is center and @code{#1} is right; +however, you can use @code{#LEFT}, @code{#CENTER} and @code{#RIGHT} as +well. + +" + doctitle = "Lyrics alignment" +} % begin verbatim + +\layout { ragged-right = ##f } +\relative c'' { + c1 + c1 + c1 +} +\addlyrics { + \once \override LyricText #'self-alignment-X = #LEFT + "This is left-aligned" + \once \override LyricText #'self-alignment-X = #CENTER + "This is centered" + \once \override LyricText #'self-alignment-X = #1 + "This is right-aligned" +} + diff --git a/Documentation/snippets/lyrics-old-spacing-settings.ly b/Documentation/snippets/lyrics-old-spacing-settings.ly new file mode 100644 index 0000000000..d27f8ee5d4 --- /dev/null +++ b/Documentation/snippets/lyrics-old-spacing-settings.ly @@ -0,0 +1,129 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + doctitlede = "Textverteilung wie in Version 2.12 für neuere Versionen" + + texidocde = " +Die vertikale Maschine für die Platzverteilung wurde für die Version 2.14 +verändert. Das kann dazu führen, dass Gesangstext unterschiedlich +verteilt wird. Es ist möglich, die Eigenschaften der @code{Lyric}- +und @code{Staff}-Kontexte so einzustellen, dass die Platzverteilung +wie in der Version 2.12 arbeitet. +" + + +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +La version 2.14 a donné naissance à un nouveau moteur pour l'espacement +vertical des paroles. Celles-ci peuvent donc se retrouver positionnées +différemment. Le moteur adoptera les usages de la version 2.12 une fois +que vous aurez réglé certaines propriétés des contextes @code{Lyric} et +@code{Staff}. + +" + + doctitlefr = "Espacement des paroles selon les pratiques de la version 2.12" + + + lsrtags = "vocal-music" + + doctitle = "Obtaining 2.12 lyrics spacing in newer versions" + + texidoc = " +The vertical spacing engine changed for version 2.14. This can +cause lyrics to be spaced differently. It is possible to set +properties for @code{Lyric} and @code{Staff} contexts to get the +spacing engine to behave as it did in version 2.12. +" +} % begin verbatim + + +global = { + \key d \major + \time 3/4 +} + +sopMusic = \relative c' { + % VERSE ONE + fis4 fis fis | \break + fis4. e8 e4 +} + +altoMusic = \relative c' { + % VERSE ONE + d4 d d | + d4. b8 b4 | +} + +tenorMusic = \relative c' { + a4 a a | + b4. g8 g4 | +} + +bassMusic = \relative c { + d4 d d | + g,4. g8 g4 | +} + +words = \lyricmode { + Great is Thy faith- ful- ness, +} + +\score { + \new ChoirStaff << + \new Lyrics = sopranos + \new Staff = women << + \new Voice = "sopranos" { + \voiceOne + \global \sopMusic + } + \new Voice = "altos" { + \voiceTwo + \global \altoMusic + } + >> + \new Lyrics = "altos" + \new Lyrics = "tenors" + \new Staff = men << + \clef bass + \new Voice = "tenors" { + \voiceOne + \global \tenorMusic + } + \new Voice = "basses" { + \voiceTwo \global \bassMusic + } + >> + \new Lyrics = basses + \context Lyrics = sopranos \lyricsto sopranos \words + \context Lyrics = altos \lyricsto altos \words + \context Lyrics = tenors \lyricsto tenors \words + \context Lyrics = basses \lyricsto basses \words + >> + \layout { + \context { + \Lyrics + \override VerticalAxisGroup #'staff-affinity = ##f + \override VerticalAxisGroup #'staff-staff-spacing = + #'((basic-distance . 0) + (minimum-distance . 2) + (padding . 2)) + } + \context { + \Staff + \override VerticalAxisGroup #'staff-staff-spacing = + #'((basic-distance . 0) + (minimum-distance . 2) + (padding . 2)) + } + } +} + diff --git a/Documentation/snippets/makam-example.ly b/Documentation/snippets/makam-example.ly new file mode 100644 index 0000000000..9b92424768 --- /dev/null +++ b/Documentation/snippets/makam-example.ly @@ -0,0 +1,66 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +archivo de inicio @file{makam.ly} (véase el 'Manual de +aprendizaje @version{}, 4.6.3 Otras fuentes de información' para +averiguar la situación de este archivo) para ver detalles de los +nombres de las notas y las alteraciones. + +" + doctitlees = "Ejemplo de «Makam»" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Makam ist eine türkische Melodie, in der 1/9-Tonabstände +eingesetzt werden. Sehen Sie sich die Initialisierungsdatei +@file{makam.ly} für weiter Information zu Tonhöhenbezeichnungen +und Alterationen an (siehe +Handbuch zum Lernen @version{}, 4.6.3 Weitere Information zu +Hinweisen, wo diese Datei gespeichert ist)." + + doctitlede = "Makam-Beispiel" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Le « makam » est une forme de mélodie turque qui utilise des altérations +d'un neuvième de ton. Consultez le fichier d'initialisation +@file{makam.ly} pour plus de détails sur les hauteurs et altérations +utilisées (voir le chapitre 4.6.3 - Autres sources d'information du +manuel d'initiation pour le localiser). + +" + doctitlefr = "Exemple de musique « Makam »" + + lsrtags = "pitches, world-music" + texidoc = " +Makam is a type of melody from Turkey using 1/9th-tone microtonal +alterations. Consult the initialization file @samp{ly/makam.ly} for +details of pitch names and alterations. + +" + doctitle = "Makam example" +} % begin verbatim + + +% Initialize makam settings +\include "makam.ly" + +\relative c' { + \set Staff.keySignature = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) + c4 cc db fk + gbm4 gfc gfb efk + fk4 db cc c +} diff --git a/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly new file mode 100644 index 0000000000..56dfbc6399 --- /dev/null +++ b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly @@ -0,0 +1,44 @@ +%% 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 = "rhythms, simultaneous-notes, tweaks-and-overrides" + + texidoc = " +Setting the @code{transparent} property will cause an object to be +printed in @qq{invisible ink}: the object is not printed, but all its +other behavior is retained. The object still takes up space, it takes +part in collisions, and slurs, ties and beams can be attached to it. + + +This snippet demonstrates how to connect different voices using ties. +Normally, ties only connect two notes in the same voice. By +introducing a tie in a different voice, and blanking the first up-stem +in that voice, the tie appears to cross voices. + +" + doctitle = "Making an object invisible with the 'transparent property" +} % begin verbatim + +\relative c'' { + \time 2/4 + << + { + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + b8 ~ b\noBeam + \once \override Stem #'transparent = ##t + \once \override Stem #'length = #8 + g8 ~ g\noBeam + } + \\ + { + b8 g g e + } + >> +} diff --git a/Documentation/snippets/making-slurs-with-complex-dash-structure.ly b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly new file mode 100644 index 0000000000..102eab7cb8 --- /dev/null +++ b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly @@ -0,0 +1,115 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Las ligaduras de expresión se pueden construir con patrones de +discontinuidad complejos mediante la definición de la propiedad +@code{dash-definition}. @code{dash-definition} es una lista de +@code{elementos de discontinuidad}. Un @code{elemento de +discontinuidad} es una lista de parámetros que definen el +comportamiento de discontinuidad de un segmento de la ligadura de +expresión. + +La ligadura se define en términos del parámetro de bezier t cuyo +rango va de 0 a la izquierda de la ligadura hasta 1 en el extremo +derecho de la ligadura. Cada @code{elemento de discontinuidad} es +una lista @code{(t-inicio t-final fracción-discontinuidad +período-discontinuidad)}. La región de la ligadura desde +@code{t-inicio} hasta @code{t-final} tendrá una fracción +@code{fracción-discontinuidad} de cada +@code{período-discontinuidad} de color negro. +@code{período-discontinuidad} se define en términos de espacios de +pentagrama. @code{fracción-discontinuidad} se establece al valor +de 1 para una ligadura continua. + +" + + doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Legatobögen können mit einem komplizierten Strichelmuster +gesetzt werden, indem die @code{dash-definition}-Eigenschaft +definiert wird. @code{dash-definition} ist eine Liste bestehend +aus @code{dash-elements}-Elementen. Ein @code{dash-element} ist +eine Liste an Parametern, die das Strichverhalten für einen +Abschnitt des Legatobogens definieren. + +Der Bogen wird nach dem Bezierparameter t definiert, welcher +von 0 am linken Ende des Bogens zu 1 am rechten Ende des Bogens +reicht. @code{dash-element} ist eine Liste @code{(start-t stop-t dash-Unterbrechung dash-Abschnitt)}. Die Region des Bogens von @code{start-t} +bis @code{stop-t} hat eine Unterbrechung von @code{dash-Unterbrechung} +von jedem @code{dash-Abschnitt}-Schwarzabschnitt. @code{dash-Abschnitt} ist in Notenlinienzwischenräumen definiert. +@code{dash-Abschnitt} ist auf 1 für einen durchgehenden Bogen +gesetzt. +" + doctitlede = "Legatobögen mit kompliziertem Strichelmuster + definieren" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Grâce à la propriété @code{dash-definition}, une liaison d'articulation +peut être formée de traits discontinus variables. +@code{dash-definition} se compose d'une liste de +@code{segments-discontinus} (@emph{dash-elements}). Chaque +@code{segment-discontinu} contient une liste de paramètres qui +déterminent le comportement du trait pour une section de la liaison. + +Cette liaison se définit selon le paramètre de Bézier @code{t} qui est +compris entre 0 (l'extrémité gauche de la liaison) et 1 (l'extrémité +droite de la liaison). Chaque @code{segment-discontinu} se composera +selon la liste @code{(t-début t-fin segment-style segment-taille)}. +La portion de liaison allant de @code{t-début} à @code{t-fin} aura un +trait @code{segment-style} de longueur @code{segment-taille}. +@code{segment-taille} est exprimé en espace de portée ; un +@code{segment-style} à 1 donnera un trait plein. + +" + doctitlefr = "Dessin d'une liaison d'articulation au trait discontinu" + + + lsrtags = "rhythms, expressive-marks" + texidoc = " +Slurs can be made with complex dash patterns by defining +the @code{dash-definition} property. @code{dash-definition} +is a list of @code{dash-elements}. A @code{dash-element} is a +list of parameters defining the dash behavior for a segment of +the slur. + +The slur is defined in terms of the bezier parameter t +which ranges from 0 +at the left end of the slur to 1 at the right end of the slur. +@code{dash-element} is a list @code{(start-t stop-t dash-fraction +dash-period)}. The region of the slur from @code{start-t} to +@code{stop-t} will have a fraction @code{dash-fraction} +of each @code{dash-period} black. @code{dash-period} is +defined in terms of staff spaces. @code{dash-fraction} is +set to 1 for a solid slur. +" + doctitle = "Making slurs with complex dash structure" +} % begin verbatim + + +\relative c' { + \once \override + Slur #'dash-definition = #'((0 0.3 0.1 0.75) + (0.3 0.6 1 1) + (0.65 1.0 0.4 0.75)) + c4( d e f) + \once \override + Slur #'dash-definition = #'((0 0.25 1 1) + (0.3 0.7 0.4 0.75) + (0.75 1.0 1 1)) + c4( d e f) +} diff --git a/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly b/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly new file mode 100644 index 0000000000..aa791227c8 --- /dev/null +++ b/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly @@ -0,0 +1,63 @@ +%% 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 = "staff-notation, editorial-annotations" + +%% 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 +conseguir añadiendo más líneas muy cerca de la línea que se quiere +destacar, utilizando la propiedad @code{line-positions} del objeto +@code{StaffSymbol}. + +" + doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker +gezeichnet werden (z. B. die Mittellinie, oder um den Schlüssel hervorzuheben). +Das ist möglich, indem man zusätzliche Linien sehr nahe an der Linie, die +dicker erscheinen soll, einfügt. Dazu wird die @code{line-positions}-Eigenschaft +herangezogen. + +" + doctitlede = "Eine Linie des Notensystems dicker als die anderen machen" + +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Vous pourriez avoir envie, dans un but pédagogique, de rendre certaines +lignes d'une portée plus épaisses que les autres, comme la ligne médiane +ou bien pour mettre en exergue la ligne portant la clé de sol. Il +suffit pour cela d'ajouter une ligne qui sera accolée à celle qui doît +être mise en évidence, grâce à la propriété @code{line-positions} de +l'objet @code{StaffSymbol}. + +" + doctitlefr = "Empâtement de certaines lignes d'une portée" + + + texidoc = " +For pedagogical purposes, a staff line can be thickened (e.g., the +middle line, or to emphasize the line of the G clef). This can be +achieved by adding extra lines very close to the line that should be +emphasized, using the @code{line-positions} property of the +@code{StaffSymbol} object. + +" + doctitle = "Making some staff lines thicker than the others" +} % begin verbatim + +{ + \override Staff.StaffSymbol #'line-positions = #'(-4 -2 -0.2 0 0.2 2 4) + d'4 e' f' g' +} + diff --git a/Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly b/Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly new file mode 100644 index 0000000000..169f17bc2b --- /dev/null +++ b/Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly @@ -0,0 +1,34 @@ +%% 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" + + texidoc = " +Figured bass often uses extenders to indicate continuation of the +corresponding step. However, in this case lilypond is in greedy-mode +and uses extenders whenever possible. To break individual extenders, +one can simply use a modifier \\! to a number, which breaks any +extender attributed to that number right before the number. + +" + doctitle = "Manually break figured bass extenders for only some numbers" +} % begin verbatim + +bassfigures = \figuremode { + \set useBassFigureExtenders = ##t + <6 4>4 <6 4\!> <6 4\!> <6 4\!> | <6\! 4\!> <6 4> <6 4\!> <6 4> +} + +<< + \new Staff \relative c'' { c1 c1 } + \new FiguredBass \bassfigures +>> + + + diff --git a/Documentation/snippets/manually-controlling-beam-positions.ly b/Documentation/snippets/manually-controlling-beam-positions.ly new file mode 100644 index 0000000000..6e7df11c02 --- /dev/null +++ b/Documentation/snippets/manually-controlling-beam-positions.ly @@ -0,0 +1,33 @@ +%% 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 = "rhythms, tweaks-and-overrides" + + texidoc = " +Beam positions may be controlled manually, by overriding the +@code{positions} setting of the @code{Beam} grob. + + + + +" + doctitle = "Manually controlling beam positions" +} % begin verbatim + +\relative c' { + \time 2/4 + % from upper staff-line (position 2) to center (position 0) + \override Beam #'positions = #'(2 . 0) + c8 c + % from center to one above center (position 1) + \override Beam #'positions = #'(0 . 1) + c8 c +} + + diff --git a/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly new file mode 100644 index 0000000000..18b52b36a6 --- /dev/null +++ b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly @@ -0,0 +1,54 @@ +%% 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 = "editorial-annotations, vocal-music" + + texidoc = " +This example shows how to put crosses on stems. Mark the beginning of +a spoken section with the @code{\\speakOn} keyword, and end it with the +@code{\\speakOff} keyword. + +" + doctitle = "Marking notes of spoken parts with a cross on the stem" +} % begin verbatim + +speakOn = { + \override Stem #'stencil = + #(lambda (grob) + (let* ((x-parent (ly:grob-parent grob X)) + (is-rest? (ly:grob? (ly:grob-object x-parent 'rest)))) + (if is-rest? + empty-stencil + (ly:stencil-combine-at-edge + (ly:stem::print grob) + Y + (- (ly:grob-property grob 'direction)) + (grob-interpret-markup grob + (markup #:center-align #:fontsize -4 + #:musicglyph "noteheads.s2cross")) + -2.3 0)))) +} + +speakOff = { + \revert Stem #'stencil +} + +\score { + \new Staff { + \relative c'' { + a4 b a c + \speakOn + g4 f r g + b4 r d e + \speakOff + c4 a g f + } + } +} + diff --git a/input/lsr/markup-lines.ly b/Documentation/snippets/markup-lines.ly similarity index 88% rename from input/lsr/markup-lines.ly rename to Documentation/snippets/markup-lines.ly index b02cd6eedf..fea2fb1ea7 100644 --- a/input/lsr/markup-lines.ly +++ b/Documentation/snippets/markup-lines.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "text" diff --git a/Documentation/snippets/measure-counter.ly b/Documentation/snippets/measure-counter.ly new file mode 100644 index 0000000000..9981d3ab95 --- /dev/null +++ b/Documentation/snippets/measure-counter.ly @@ -0,0 +1,44 @@ +%% 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 = "repeats, staff-notation, editorial-annotations" + +%% 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 +transparentes de tipo porcentaje. + +" + doctitlees = "Contador de compases" + + texidoc = " +This snippet provides a workaround for emitting measure counters using +transparent percent repeats. + +" + doctitle = "Measure counter" +} % begin verbatim + +<< + \context Voice = "foo" { + \clef bass + c4 r g r + c4 r g r + c4 r g r + c4 r g r + } + \context Voice = "foo" { + \set countPercentRepeats = ##t + \override PercentRepeat #'transparent = ##t + \override PercentRepeatCounter #'staff-padding = #1 + \repeat percent 4 { s1 } + } +>> + diff --git a/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly new file mode 100644 index 0000000000..8e9019ad52 --- /dev/null +++ b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly @@ -0,0 +1,69 @@ +%% 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 = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides" + +%% 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 +conseguir con un @code{StaffGroup} en vez de un @code{ChoirStaff}. +La línea divisoria sobre los pentagramas se borra estableciendo la +propiedad @code{transparent}. + +" + + doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen, +sondern zwischen den Systemen gesetzt werden, kann mit einer @code{StaffGroup} +anstelle von @code{ChoirStaff} erreicht werden. Die Taktlinien auf den +Systemen werden mit der @code{transparent}-Eigenschaft ausgelöscht. + +" + doctitlede = "Mensurstriche-Layout (Taktstriche zwischen den Systemen" + +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +En musique mensurale, les barres de mesure ne traversent pas les +portées. Pour obtenir ce résultat avec un @code{StaffGroup} plutôt +qu'en utilisant un @code{ChoirStaff}, il faudra rendre « transparentes » +les portions de barre qui recouvrent les portées. + +" + doctitlefr = "Présentation à l'ancienne (barres de mesure entre les portées)" + + + texidoc = " +The mensurstriche-layout where the bar lines do not show on the staves +but between staves can be achieved with a @code{StaffGroup} instead of +a @code{ChoirStaff}. The bar line on staves is blanked out by setting +the @code{transparent} property. + +" + doctitle = "Mensurstriche layout (bar lines between the staves)" +} % begin verbatim + +global = { + \override Staff.BarLine #'transparent = ##t + s1 s + % the final bar line is not interrupted + \revert Staff.BarLine #'transparent + \bar "|." +} +\new StaffGroup \relative c'' { + << + \new Staff { << \global { c1 c } >> } + \new Staff { << \global { c c } >> } + >> +} + diff --git a/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly b/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly new file mode 100644 index 0000000000..7e5f7f4fdb --- /dev/null +++ b/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly @@ -0,0 +1,42 @@ +%% 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 = "rhythms" + + texidoc = " +When using multi-measure rests in a polyphonic staff, the rests will be +placed differently depending on the voice they belong to. However they +can be printed on the same staff line, using the following setting. + +" + doctitle = "Merging multi-measure rests in a polyphonic part" +} % begin verbatim + +normalPos = \revert MultiMeasureRest #'staff-position + +{ + << + { + c''1 + R1 + c''1 + \normalPos + R1 + } + \\ + { + c'1 + R1 + c'1 + \normalPos + R1 + } + >> +} + diff --git a/input/lsr/midi-intro.itely b/Documentation/snippets/midi-intro.itely similarity index 100% rename from input/lsr/midi-intro.itely rename to Documentation/snippets/midi-intro.itely diff --git a/input/lsr/midi.snippet-list b/Documentation/snippets/midi.snippet-list similarity index 100% rename from input/lsr/midi.snippet-list rename to Documentation/snippets/midi.snippet-list diff --git a/Documentation/snippets/modern-tab-text-clef.ly b/Documentation/snippets/modern-tab-text-clef.ly new file mode 100644 index 0000000000..90a0c6de8a --- /dev/null +++ b/Documentation/snippets/modern-tab-text-clef.ly @@ -0,0 +1,32 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Utilice un texto de marcado para sustituir el glifo de clave (TAB) con +una fuente tipográfica moderna. + +" + doctitlees = "Clave de texto TAB moderna para tablatura" + + lsrtags = "staff-notation, fretted-strings" + + texidoc = " +Use a markup text to replace the (TAB) clef glyph with a modern font. + +" + doctitle = "Modern TAB text clef" +} % begin verbatim + + +\markup { + This snippet is deprecated as of version 2.13.4 and will be removed + in version 2.14. +} diff --git a/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly new file mode 100644 index 0000000000..c7bffb1d2f --- /dev/null +++ b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly @@ -0,0 +1,77 @@ +%% 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 = "expressive-marks" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Las abreviaturas se encuentran definidas dentro del archivo +@file{ly/script-init.ly}, donde las variables @code{dashHat}, +@code{dashPlus}, @code{dashDash}, @code{dashBar}, +@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben +valores predeterminados. Se pueden modificar estos valores +predeterminados para las abreviaturas. Por ejemplo, para asociar +la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del +semitrino en lugar del símbolo predeterminado +, asigne el valor +@code{trill} a la variable @code{dashPlus}: + +" + doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Abkürzungen sind in der Datei @file{ly/script-init.ly} definiert, wo +den Variablen @code{dashHat}, @code{dashPlus}, @code{dashDash}, +@code{dashBar}, @code{dashLarger}, @code{dashDot} und +@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte +können verändert werden. Um zum Beispiel die Abkürzung +@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu +assoziieren, muss der Wert @code{trill} der Variable +@code{dashPlus} zugewiesen werden: + +" + doctitlede = "Die Standardwerte der Abkürzungen von Artikulationen verändern" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Les raccourcis sont répertoriés dans le fichier +@file{ly/script-init.ly}, dans lequel on retrouve les variables +@code{dashHat}, @code{dashPlus}, @code{dashDash}, @code{dashBar}, +@code{dashLarger}, @code{dashDot}, et @code{dashUnderscore} ainsi que +leur valeur par défaut. Ces valeurs peuvent être modifiées selon vos +besoins. Il suffit par exemple, pour affecter au raccourci @code{-+} +(@code{dashPlus}) le symbole du trille en lieu et place du @code{+} +(caractère plus), d'assigner la valeur @code{trill} à la variable +@code{dashPlus} : + +" + doctitlefr = "Modification de la signification des raccourcis pour les signes d'articulation" + + + texidoc = " +The shorthands are defined in @samp{ly/script-init.ly}, where the +variables @code{dashHat}, @code{dashPlus}, @code{dashDash}, +@code{dashBar}, @code{dashLarger}, @code{dashDot}, and +@code{dashUnderscore} are assigned default values. The default values +for the shorthands can be modified. For example, to associate the +@code{-+} (@code{dashPlus}) shorthand with the trill symbol instead of +the default + symbol, assign the value @code{trill} to the variable +@code{dashPlus}: + +" + doctitle = "Modifying default values for articulation shorthand notation" +} % begin verbatim + +\relative c'' { c1-+ } + +dashPlus = "trill" + +\relative c'' { c1-+ } + diff --git a/input/lsr/modifying-tuplet-bracket-length.ly b/Documentation/snippets/modifying-tuplet-bracket-length.ly similarity index 80% rename from input/lsr/modifying-tuplet-bracket-length.ly rename to Documentation/snippets/modifying-tuplet-bracket-length.ly index 092760720d..261f909cde 100644 --- a/input/lsr/modifying-tuplet-bracket-length.ly +++ b/Documentation/snippets/modifying-tuplet-bracket-length.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "rhythms" diff --git a/Documentation/snippets/moving-dotted-notes-in-polyphony.ly b/Documentation/snippets/moving-dotted-notes-in-polyphony.ly new file mode 100644 index 0000000000..b7cd9ca2c2 --- /dev/null +++ b/Documentation/snippets/moving-dotted-notes-in-polyphony.ly @@ -0,0 +1,44 @@ +%% 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 = "rhythms, simultaneous-notes, tweaks-and-overrides" + +%% 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 +desplazar la nota superior a la derecha. Se puede cambiar usando la +propiedad @code{prefer-dotted-right} de @code{NoteCollision}. + +" + doctitlees = "Desplazar las notas con puntillo en polifonía" + + + + texidoc = " +When a dotted note in the upper voice is moved to avoid a collision +with a note in another voice, the default is to move the upper note to +the right. This behaviour can be over-ridden by using the +@code{prefer-dotted-right} property of @code{NoteCollision}. + +" + doctitle = "Moving dotted notes in polyphony" +} % begin verbatim + +\new Staff \relative c' << + { f2. f4 + \override Staff.NoteCollision #'prefer-dotted-right = ##f + f2. f4 + \override Staff.NoteCollision #'prefer-dotted-right = ##t + f2. f4 + } + \\ + { e4 e e e e e e e e e e e} +>> + diff --git a/Documentation/snippets/moving-slur-positions-vertically.ly b/Documentation/snippets/moving-slur-positions-vertically.ly new file mode 100644 index 0000000000..0e23b73d42 --- /dev/null +++ b/Documentation/snippets/moving-slur-positions-vertically.ly @@ -0,0 +1,70 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% 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 +@code{Slur}. La propiedad tiene dos parámetros, refiriéndose el +primero al extremo izquierdo de la ligadura y el segundo al derecho. +Los valores de los parámetros no se utilizan por parte de LilyPond +para producir un desplazamiento exacto de la ligadura: más bien +selecciona la colocación que mejor aspecto tiene, teniendo en cuenta +los valores de los parámetros. Los valores positivos desplazan la +ligadura hacia arriba, y son adecuados a notas que tienen las plicas +hacia abajo. Los valores negativos desplazan las ligaduras bajas aún +más hacia abajo. + +" + doctitlees = "Desplazar ligaduras de expresión verticalmente" + + + + texidoc = " +The vertical position of a slur can be adjusted using the +@code{positions} property of @code{Slur}. The property has 2 +parameters, the first referring to the left end of the slur and the +second to the right. The values of the parameters are not used by +LilyPond to make an exact movement of the slur - instead it selects +what placement of the slur looks best, taking into account the +parameter values. Positive values move the slur up, and are +appropriate for notes with stems down. Negative values move downward +slurs further down. + +" + doctitle = "Moving slur positions vertically" +} % begin verbatim + +\relative c' { + \stemDown + e4( a) + \override Slur #'positions = #'(1 . 1) + e4( a) + \override Slur #'positions = #'(2 . 2) + e4( a) + \override Slur #'positions = #'(3 . 3) + e4( a) + \override Slur #'positions = #'(4 . 4) + e4( a) + \override Slur #'positions = #'(5 . 5) + e4( a) + \override Slur #'positions = #'(0 . 5) + e4( a) + \override Slur #'positions = #'(5 . 0) + e4( a) + \stemUp + \override Slur #'positions = #'(-5 . -5) + e4( a) + \stemDown + \revert Slur #'positions + e4( a) +} + diff --git a/Documentation/snippets/multi-measure-rest-markup.ly b/Documentation/snippets/multi-measure-rest-markup.ly new file mode 100644 index 0000000000..b76f2da0b6 --- /dev/null +++ b/Documentation/snippets/multi-measure-rest-markup.ly @@ -0,0 +1,93 @@ +%% 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 = "rhythms, text" + +%% 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 +que se adjuntan a silencios multicompás no producen la expansión del +compás. Para expandir un silencio multicompás de forma que quepa todo +el marcado, utilice un silencio de separación con un marcado aplicado +antes del silencio multicompás. + +Observe que el silencio separador produce la inserción de un compás. +El texto aplicado a un siencio sparador de esta forma se alinea por la +izquierda a la posición en que la nota estaría situada dentro del +compás, pero si la longitud del compás está determinada por la +longitud del texto, éste aparecerá centrado. + +" + +doctitlees = "Marcado de silencios multicompás" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = "Textbeschriftungen, die an Mehrtaktpausen gehängt wird, +wird über oder unter der Pause zentriert. Lange Beschriftungen +lassen den Takt nicht breiter werden. Um eine Mehrtaktpause einer +Beschriftung anzupassen, muss eine unsichtbare Pause mit der +Beschriftung direkt vor der Mehrtaktpause eingesetzt werden. + +Man sollte beachten, dass unsichtbare Pausen automatische Taktstriche +nach sich ziehen. Text, der an eine unsichtbare Pause gehängt wird, +ist links ausgerichtet an der Position, wo die Pause erscheinen +würde. Wenn aber die Länge des Taktes durch die Länge des Textes +bestimmt wird, sieht es so aus, als ob der Text zentriert gesetzt +ist." + + doctitlede = "Textbeschriftung und Mehrtaktpausen" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Lorsque du texte est attaché à un silence multi-mesures, il sera centré +dans la mesure, au-dessus ou en dessous de la portée. Afin d'étirer la +mesure dans le cas ou ce texte est relativement long, il suffit +d'insérer un silence invisible auquel on attache le texte en question, +avant le silence multi-mesures. + +Rappelez-vous qu'un silence invisible génère une barre de mesure. Le +texte attaché à ce silence invisible sera alors aligné sur la gauche de +là où serait positionnée la note. Cependant, si la taille de la mesure +est déterminée par la longueur du texte, il apparaîtra comme centré. + +" + doctitlefr = "Ajout de texte à un silence multi-mesures" + + texidoc = " +Markups attached to a multi-measure rest will be centered above or +below it. Long markups attached to multi-measure rests do not cause +the measure to expand. To expand a multi-measure rest to fit the +markup, use a spacer rest with an attached markup before the +multi-measure rest. + +Note that the spacer rest causes a bar line to be inserted. Text +attached to a spacer rest in this way is left-aligned to the position +where the note would be placed in the measure, but if the measure +length is determined by the length of the text, the text will appear to +be centered. + +" + doctitle = "Multi-measure rest markup" +} % begin verbatim + +\relative c' { + \compressFullBarRests + \textLengthOn + s1*0^\markup { [MAJOR GENERAL] } + R1*19 + s1*0_\markup { \italic { Cue: ... it is yours } } + s1*0^\markup { A } + R1*30^\markup { [MABEL] } + \textLengthOff + c4^\markup { CHORUS } d f c +} diff --git a/Documentation/snippets/nesting-staves.ly b/Documentation/snippets/nesting-staves.ly new file mode 100644 index 0000000000..3319018110 --- /dev/null +++ b/Documentation/snippets/nesting-staves.ly @@ -0,0 +1,91 @@ +%% 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 = "staff-notation, contexts-and-engravers, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede utilizar la propiedad +@code{systemStartDelimiterHierarchy} para crear grupos de +pentagramas anidados de forma más compleja. La instrucción +@code{\\set StaffGroup.systemStartDelimiterHierarchy} toma una +lista alfabética del número de pentagramas producidos. Se puede +proporcionar antes de cada pentagrama un delimitador de comienzo +de sistema. Se debe encerrar entre corchetes y admite tantos +pentagramas como encierren las llaves. Se pueden omitir los +elementos de la lista, pero el primer corchete siempre abarca +todos los pentagramas. Las posibilidades son +@code{SystemStartBar}, @code{SystemStartBracket}, +@code{SystemStartBrace} y @code{SystemStartSquare}. + +" + doctitlees = "Anidado de grupos de pentagramas" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Eigenschaft @code{systemStartDelimiterHierarchy} kann eingesetzt +werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der +Befehl @code{\\set StaffGroup.systemStartDelimiterHierarchy} nimmt eine +Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem +System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt +werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente +in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer +die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: @code{SystemStartBar}, +@code{SystemStartBracket}, @code{SystemStartBrace} und +@code{SystemStartSquare}. + +" + doctitlede = "Systeme schachteln" + +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +La propriété @code{systemStartDelimiterHierarchy} permet de créer des +regroupements imbriqués complexes. La commande +@code{\\set@tie{}StaffGroup.systemStartDelimiterHierarchy} prend en +argument la liste alphabétique des sous-groupes à hiérarchiser. Chaque +sous-groupe peut être affublé d'un délimiteur particulier. Chacun des +regroupements intermédiaires doit être borné par des parenthèses. Bien +que des éléments de la liste puissent être omis, le premier délimiteur +embrassera toujours l'intégralité des portées. Vous disposez des quatre +délimiteurs @code{SystemStartBar}, @code{SystemStartBracket}, +@code{SystemStartBrace} et @code{SystemStartSquare}. + +" + doctitlefr = "Imbrications de regroupements de portées" + + + texidoc = " +The property @code{systemStartDelimiterHierarchy} can be used to make +more complex nested staff groups. The command @code{\\set +StaffGroup.systemStartDelimiterHierarchy} takes an alphabetical list of +the number of staves produced. Before each staff a system start +delimiter can be given. It has to be enclosed in brackets and takes as +much staves as the brackets enclose. Elements in the list can be +omitted, but the first bracket takes always the complete number of +staves. The possibilities are @code{SystemStartBar}, +@code{SystemStartBracket}, @code{SystemStartBrace}, and +@code{SystemStartSquare}. + +" + doctitle = "Nesting staves" +} % begin verbatim + +\new StaffGroup +\relative c'' << + \set StaffGroup.systemStartDelimiterHierarchy + = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a + (SystemStartSquare b) ) c ) d) + \new Staff { c1 } + \new Staff { c1 } + \new Staff { c1 } + \new Staff { c1 } + \new Staff { c1 } +>> + diff --git a/Documentation/snippets/new/GNUmakefile b/Documentation/snippets/new/GNUmakefile new file mode 100644 index 0000000000..155e3f120f --- /dev/null +++ b/Documentation/snippets/new/GNUmakefile @@ -0,0 +1,6 @@ +depth = ../../.. + +EXTRA_DIST_FILES = README +EXTRA_DIST_FILES += $(call src-wildcard,*.ly) + +include $(depth)/make/stepmake.make diff --git a/Documentation/snippets/new/README b/Documentation/snippets/new/README new file mode 100644 index 0000000000..e8b922adb9 --- /dev/null +++ b/Documentation/snippets/new/README @@ -0,0 +1,6 @@ +This directory is for examples of new features in the current +unstable development series. These snippets will be added to LSR +when it supports a version of LilyPond that includes these features. + +See additional instructions in the Contributor's Guide, section +`Adding and editing snippets'. diff --git a/Documentation/snippets/new/adding-fingerings-to-tablatures.ly b/Documentation/snippets/new/adding-fingerings-to-tablatures.ly new file mode 100644 index 0000000000..830df4d795 --- /dev/null +++ b/Documentation/snippets/new/adding-fingerings-to-tablatures.ly @@ -0,0 +1,37 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = " +To add fingerings to tablatures, use a combination of @code{\\markup} +and @code{\\finger}. +" + doctitle = "Adding fingerings to tablatures" +} + +one = \markup { \finger 1 } +two = \markup { \finger 2 } +threeTwo = \markup { + \override #'(baseline-skip . 2) + \column { + \finger 3 + \finger 2 + } +} +threeFour = \markup { + \override #'(baseline-skip . 2) + \column { + \finger 3 + \finger 4 + } +} + +\score { + \new TabStaff { + \tabFullNotation + \stemUp + e8\4^\one b\2 ^>[ b\2 e\4] + ^>^\threeTwo[ b\2 e\4] + } +} + diff --git a/Documentation/snippets/new/adjusting-lyrics-vertical-spacing.ly b/Documentation/snippets/new/adjusting-lyrics-vertical-spacing.ly new file mode 100644 index 0000000000..7a707d5a29 --- /dev/null +++ b/Documentation/snippets/new/adjusting-lyrics-vertical-spacing.ly @@ -0,0 +1,33 @@ +\version "2.14.0" + +\header { + lsrtags = "text, vocal-music, spacing" + texidoc = " +This snippet shows how to bring the lyrics line closer to the staff. + +" + doctitle = "Adjusting lyrics vertical spacing" +} + +% Default layout: +<< + \new Staff \new Voice = melody \relative c' { + c4 d e f + g4 f e d + c1 + } + \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } + + % Reducing the minimum space below the staff and above the lyrics: + \new Staff { + \new Voice = melody \relative c' { + c4 d e f + g4 f e d + c1 + } + } + \new Lyrics \with { + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) + } + \lyricsto melody { aa aa aa aa aa aa aa aa aa } +>> diff --git a/Documentation/snippets/new/alternative-breve-note.ly b/Documentation/snippets/new/alternative-breve-note.ly new file mode 100644 index 0000000000..0534ef1b47 --- /dev/null +++ b/Documentation/snippets/new/alternative-breve-note.ly @@ -0,0 +1,13 @@ +\version "2.14.0" +\header { + lsrtags = "rhythms,expressive-marks" + texidoc = "This code demonstrates how to use the alternative breve note +with two vertical lines on each side of the notehead instead of one line." + doctitle = "Alternative breve notehead with double vertical lines" +} + +\relative c'' { + \time 4/2 + \override Staff.NoteHead #'style = #'altdefault + c\breve | b\breve +} diff --git a/Documentation/snippets/new/ancient-headword.ly b/Documentation/snippets/new/ancient-headword.ly new file mode 100644 index 0000000000..aff4337468 --- /dev/null +++ b/Documentation/snippets/new/ancient-headword.ly @@ -0,0 +1,134 @@ +\version "2.14.0" + +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +\include "gregorian.ly" + +\score { + << + \new VaticanaVoice = "cantus" { + \clef "vaticana-do3" + % Verse 1 — Salve, Regína + a\melisma \[ a \flexa g \pes a\melismaEnd \] d + \divisioMinima + \[ a\melisma \flexa g\melismaEnd \] + \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] + \[ e\melisma \flexa d\melismaEnd \] + \divisioMaior + c d \[d\melisma \flexa c\melismaEnd \] d + \[ e\melisma \pes f\melismaEnd\] g + \[d\melisma \pes e \flexa c\melismaEnd \] d + \finalis + % Verse 2 — Vita, dulcédo + % a\melisma \[ a \flexa g \pes a\melismaEnd \] d + % \divisioMinima + % \[ a\melisma \flexa g\melismaEnd \] + % \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] + % \[ e\melisma \flexa d\melismaEnd \] + % \divisioMaior + % c d \[e\melisma \pes f\melismaEnd \] g + % \[d\melisma \pes e \flexa c\melismaEnd \] d + % \finalis + % Verse 3 — Ad te clamámus + \[ d\melisma \pes f\melismaEnd\] a g + \[ g\melisma \flexa f \pes a\melismaEnd\] e + \divisioMaior + g f \[ e\melisma \flexa d \pes g\melismaEnd \] + \divisioMinima + c d \[ e\melisma \flexa d \pes g\melismaEnd \] + \[ f\melisma \flexa e\melismaEnd \] d + \finalis + % Verse 4 — Ad te suspirámus + \[ d\melisma \pes f\melismaEnd \] a c' g + \[ g\melisma \flexa f \pes g\melismaEnd \] a + \divisioMaior + d \[ f\melisma \pes \deminutum g\melismaEnd \] g d + \[ \virga f\melisma \inclinatum e \inclinatum d\melismaEnd \] + c \divisioMaior + d \[ d\melisma \flexa c \pes f\melismaEnd \] + \[ g\melisma \pes a\melismaEnd \] + g \[ f\melisma \flexa e\melismaEnd \] g + \[ f\melisma \flexa \deminutum e\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] + \finalis + % Verse 5 — Eia ergo, Advocáta nostra + f\melisma \[ f \pes g\melismaEnd \] f + \[ g\melisma \pes \deminutum a\melismaEnd \] a + \divisioMinima + c' g \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] d g a + \divisioMaior + d' d' \[ c'\melisma \flexa b c' \pes d'\melismaEnd \] a + \divisioMinima + d' c' a \[ g\melisma \flexa f \pes a\melismaEnd \] g + \[ d\melisma \pes e\melismaEnd \] f + \[ \virga e\melisma \inclinatum d \inclinatum c\melismaEnd \] + \divisioMaior + \[ c\melisma \pes d\melismaEnd \] + f \[ g\melisma \flexa \deminutum f\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] d + \finalis + % Verse 6 — Et Jesum + d a, \[ c\melisma \pes d\melismaEnd \] + \divisioMinima + d \[ d\melisma \pes e\melismaEnd \] \[ e\melisma \flexa d d\melismaEnd \] + c g f \[ e\melisma \flexa \deminutum d\melismaEnd \] g + \[ f\melisma \flexa e\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] + \[ d\melisma \pes a \] \virga bes\melismaEnd a + \divisioMinima + \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] g d f + \[ f\melisma \flexa e\melismaEnd \] \[ d\melisma \flexa c\melismaEnd \] + \divisioMinima + \[ e\melisma \pes f \flexa e\melismaEnd \] d d + \finalis + % Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María + a\melisma \[a \flexa g a \quilisma b \pes c'\melismaEnd \] + \[ \virga b\melisma \inclinatum a \inclinatum g\melismaEnd \] a + \finalis + \[ g\melisma \pes a \quilisma b \pes c' \] \[ c' \flexa b\melismaEnd \] + \[ a\melisma \flexa g\melismaEnd \] \[ g\melisma \pes a\melismaEnd \] + \finalis + \[ a\melisma \flexa d \virga f \inclinatum e \inclinatum d \inclinatum c d \] + \divisioMinima + \[ d \pes e f \pes g\melismaEnd \] + \[ g\melisma \flexa \deminutum f\melismaEnd \] + \[ g\melisma \pes a\melismaEnd \] + d c d \[ d\melisma \pes g \flexa f f\melismaEnd \] + \[ e\melisma \flexa d\melismaEnd \] + \finalis + } + \new Lyrics \lyricsto "cantus" { + Sal- ve, Re- gí- na, ma- ter mi- se- ri- cór- di- ae: + % Vi- ta, dul- cé- do, et spes no- stra, sal- ve. + Ad te cla- má- mus, éx- su- les, fi- li- i He- vae. + Ad te su- spi- rá- mus, ge- mén- tes et flen- tes in hac la- cri- má- rum + val- le. + E- ia er- go, Ad- vo- cá- ta no- stra, il- los tu- os mi- se- ri- cór- des + ó- cu- los ad nos con- vér- te. + Et Je- sum, be- ne- díc- tum fruc- tum ven- tris tu- i, no- bis post hoc + ex- sí- li- um os- tén- de. + O cle- mens: + O pi- a: + O dul- cis Vir- go Ma- rí- a. + } + >> +} + +\layout { + \context { + \Staff + \consists "Custos_engraver" + } +} diff --git a/Documentation/snippets/new/automatic-beam-subdivisions.ly b/Documentation/snippets/new/automatic-beam-subdivisions.ly new file mode 100644 index 0000000000..64bc6ee34c --- /dev/null +++ b/Documentation/snippets/new/automatic-beam-subdivisions.ly @@ -0,0 +1,39 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + + texidoc = " +Beams can be subdivided automatically. By setting the property +@code{subdivideBeams}, beams are subdivided at beat positions (as +specified in @code{baseMoment}). + +" + doctitle = "Automatic beam subdivisions" +} + +\new Staff { + \relative c'' { + << + { + \voiceOne + \set subdivideBeams = ##t + b32[ a g f c' b a g + b32^"subdivide beams" a g f c' b a g] + } + \new Voice { + \voiceTwo + b32_"default"[ a g f c' b a g + b32 a g f c' b a g] + } + >> + \oneVoice + \set baseMoment = #(ly:make-moment 1 8) + \set beatStructure = #'(2 2 2 2) + b32^"baseMoment 1 8"[ a g f c' b a g] + \set baseMoment = #(ly:make-moment 1 16) + \set beatStructure = #'(4 4 4 4) + b32^"baseMoment 1 16"[ a g f c' b a g] + } +} + diff --git a/Documentation/snippets/new/beam-endings-in-score-context.ly b/Documentation/snippets/new/beam-endings-in-score-context.ly new file mode 100644 index 0000000000..b622ac1a1d --- /dev/null +++ b/Documentation/snippets/new/beam-endings-in-score-context.ly @@ -0,0 +1,43 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + texidoc = " +Beat structure rules specified in the @code{Score} context apply to all +staves, but can be modified at both @code{Staff} and @code{Voice} +levels: +" + doctitle = "Beam endings in Score context" +} + +\relative c'' { + \time 5/4 + % Set default beaming for all staves + \set Score.baseMoment = #(ly:make-moment 1 8) + \set Score.beatStructure = #'(3 4 3) + << + \new Staff { + c8 c c c c c c c c c + } + \new Staff { + % Modify beaming for just this staff + \set Staff.beatStructure = #'(6 4) + c8 c c c c c c c c c + } + \new Staff { + % Inherit beaming from Score context + << + { + \voiceOne + c8 c c c c c c c c c + } + % Modify beaming for this voice only + \new Voice { + \voiceTwo + \set Voice.beatStructure = #'(6 4) + a8 a a a a a a a a a + } + >> + } + >> +} diff --git a/Documentation/snippets/new/beam-grouping-in-7-8-time.ly b/Documentation/snippets/new/beam-grouping-in-7-8-time.ly new file mode 100644 index 0000000000..c33112b676 --- /dev/null +++ b/Documentation/snippets/new/beam-grouping-in-7-8-time.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + texidoc = " +There is no default beat structure specified for 7/8 time, +so if automatic beams are required the structure must be specified. For +example, to group all beams 2-3-2 in 7/8 time, specify the +beat structure to be (2 3 2): +" + doctitle = "Beam grouping in 7/8 time" +} + +\relative c'' { + \time 7/8 + % rhythm 2-3-2 + a8 a a a a a a + \set Score.beatStructure = #'(2 3 2) + a8 a a a a a a +} diff --git a/Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly b/Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly new file mode 100644 index 0000000000..47169a559b --- /dev/null +++ b/Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly @@ -0,0 +1,63 @@ +\version "2.14.0" + +\header { + lsrtags = "text, tweaks-and-overrides, contexts-and-engravers" + texidoc = " +For technical reasons, text scripts attached to note heads cannot +easily be centered on a note head's width, unlike articulations. + +Instead of using trial-and-error offset tweaks, this snippet uses a +Scheme engraver to reset the horizontal parent of each markup to a +@code{NoteColumn}. This also allows text to follow note heads which have +been shifted via @code{force-hshift}. +" + doctitle = "Centering markup on note heads automatically" +} + +#(define (Text_align_engraver ctx) + (let ((scripts '()) + (note-column #f)) + + `((acknowledgers + (note-column-interface + . ,(lambda (trans grob source) + ;; cache NoteColumn in this Voice context + (set! note-column grob))) + + (text-script-interface + . ,(lambda (trans grob source) + ;; whenever a TextScript is acknowledged, + ;; add it to `scripts' list + (set! scripts (cons grob scripts))))) + + (stop-translation-timestep + . ,(lambda (trans) + ;; if any TextScript grobs exist, + ;; set NoteColumn as X-parent + (and (pair? scripts) + (for-each (lambda (script) + (set! (ly:grob-parent script X) note-column)) + scripts)) + ;; clear scripts ready for next timestep + (set! scripts '())))))) + +\layout { + \context { + \Voice + \consists #Text_align_engraver + \override TextScript #'X-offset = + #ly:self-alignment-interface::aligned-on-x-parent + \override TextScript #'self-alignment-X = #CENTER + } +} + +\new Staff << + \relative c'' { + \override NoteColumn #'force-hshift = #3 + c1-\markup { \arrow-head #Y #DOWN ##t } + } + \\ + \relative c' { + a4 a-\markup { \huge ^ } a a + } +>> diff --git a/Documentation/snippets/new/changing-the-ambitus-gap.ly b/Documentation/snippets/new/changing-the-ambitus-gap.ly new file mode 100644 index 0000000000..982a447aa0 --- /dev/null +++ b/Documentation/snippets/new/changing-the-ambitus-gap.ly @@ -0,0 +1,40 @@ +\version "2.14.0" +\header { + lsrtags = "pitches" + texidoc = "It is possible to change the default gap setting for +ambitus." + + doctitle = "Changing the ambitus gap" +} + + +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\new Staff { + \time 2/4 + % Default setting + c'4 g'' +} + +\new Staff { + \time 2/4 + \override AmbitusLine #'gap = #0 + c'4 g'' +} + +\new Staff { + \time 2/4 + \override AmbitusLine #'gap = #1 + c'4 g'' +} + +\new Staff { + \time 2/4 + \override AmbitusLine #'gap = #1.5 + c'4 g'' +} diff --git a/Documentation/snippets/new/changing-the-number-of-augmentation-dots-per-note.ly b/Documentation/snippets/new/changing-the-number-of-augmentation-dots-per-note.ly new file mode 100644 index 0000000000..8d7a6c16f5 --- /dev/null +++ b/Documentation/snippets/new/changing-the-number-of-augmentation-dots-per-note.ly @@ -0,0 +1,17 @@ +\version "2.14.0" +\header { + lsrtags = "rhythms,expressive-marks" + texidoc = "This code demonstrates how to change the number of +augmentation dots on a single note." + doctitle = "Changing the number of augmentation dots per note" +} + +\relative c' { + c4.. a16 r2 | + \override Dots #'dot-count = #4 + c4.. a16 r2 | + \override Dots #'dot-count = #0 + c4.. a16 r2 | + \revert Dots #'dot-count + c4.. a16 r2 | +} diff --git a/Documentation/snippets/new/changing-the-size-of-woodwind-diagrams.ly b/Documentation/snippets/new/changing-the-size-of-woodwind-diagrams.ly new file mode 100644 index 0000000000..9cccb9177a --- /dev/null +++ b/Documentation/snippets/new/changing-the-size-of-woodwind-diagrams.ly @@ -0,0 +1,31 @@ +\version "2.14.0" + +\header { + lsrtags="winds" + texidoc=" +The size and thickness of woodwind diagrams can be changed. +" + + doctitle = "Changing the size of woodwind diagrams" +} + +\relative c'' { + \textLengthOn + c1^\markup + \woodwind-diagram + #'piccolo + #'() + + c^\markup + \override #'(size . 1.5) { + \woodwind-diagram + #'piccolo + #'() + } + c^\markup + \override #'(thickness . 0.15) { + \woodwind-diagram + #'piccolo + #'() + } +} diff --git a/Documentation/snippets/new/changing-the-time-signature-without-affecting-the-beaming.ly b/Documentation/snippets/new/changing-the-time-signature-without-affecting-the-beaming.ly new file mode 100644 index 0000000000..d2bc6c98e8 --- /dev/null +++ b/Documentation/snippets/new/changing-the-time-signature-without-affecting-the-beaming.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + texidoc = " +The @code{\\time} command sets the properties +@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} +and @code{measureLength} in the @code{Timing} context, which is +normally aliased to @code{Score}. Changing the value of +@code{timeSignatureFraction} causes the new time signature symbol to be +printed without changing any of the other properties: + +" + doctitle = "Changing the time signature without affecting the beaming" +} + +\markup { + This snippet is deprecated as of 2.13.5 and will be removed in 2.14 +} diff --git a/Documentation/snippets/new/chord-glissando-in-tablature.ly b/Documentation/snippets/new/chord-glissando-in-tablature.ly new file mode 100644 index 0000000000..ff329e0c7a --- /dev/null +++ b/Documentation/snippets/new/chord-glissando-in-tablature.ly @@ -0,0 +1,29 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = " +Slides for chords can be indicated in both Staff and TabStaff. +String numbers are necessary for TabStaff because automatic +string calculations are different for chords and for single notes, +and @code{\chordGlissando} draws lines between single notes. +" + doctitle = "Chord glissando in tablature" +} + +myMusic = \relative c' { + \chordGlissando + 8 +} + +\score { + << + \new Staff { + \clef "treble_8" + \myMusic + } + \new TabStaff { + \myMusic + } + >> +} diff --git a/Documentation/snippets/new/chordchanges-for-fretboards.ly b/Documentation/snippets/new/chordchanges-for-fretboards.ly new file mode 100644 index 0000000000..e8e8236d41 --- /dev/null +++ b/Documentation/snippets/new/chordchanges-for-fretboards.ly @@ -0,0 +1,23 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = "FretBoards can be set to display only when the chord changes +or at the beginning of a new line." + doctitle = "chordChanges for FretBoards" +} + +\include "predefined-guitar-fretboards.ly" + +myChords = \chordmode { + c1 c1 \break + \set chordChanges = ##t + c1 c1 \break + c1 c1 \break +} + +<< + \new ChordNames { \myChords } + \new FretBoards { \myChords } + \new Staff { \myChords } +>> diff --git a/Documentation/snippets/new/chords-headword.ly b/Documentation/snippets/new/chords-headword.ly new file mode 100644 index 0000000000..9a8949b3e3 --- /dev/null +++ b/Documentation/snippets/new/chords-headword.ly @@ -0,0 +1,101 @@ +\version "2.14.0" +#(set-global-staff-size 15) +\paper { + ragged-right = ##f + line-width = 15\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + + +theChords = \chordmode { + \time 2/2 + f1 | c2 f2 | f1 | c2 f2| %\break + f2 bes2 | f1 | c2:7 f | c1 | \break +} + +verseOne = \lyricmode { + \set stanza = #"1." + Fair is the sun - shine, + Fair - er the moon - light + And all the stars __ _ in heav'n a -- bove; +} + +verseTwo = \lyricmode { + \set stanza = #"2." + Fair are the mead - ows, + Fair - er the wood - land, + Robed in the flow -- ers of bloom -- ing spring; +} + +Soprano = { + \time 2/2 + \key f \major + \stemUp + f'2 f'4 f' | g'4 e' f'2 | a'4. a'8 a'4 a' | bes'4 g' a'2 | + c''2 f''4 d'' | c''2 bes'4 a' | bes'2 a' | g'1 | +} + +Alto = { + \key f \major + c'2 c'4 c' | d'4 c' c'2 | f'4. f'8 f'4 fis' | g'4 e' f'2 | + f'2 f'4 f' | f'2 g'4 f' | e'2 f' | e'1 | +} + +Tenor = { + \key f \major + \stemDown + a2 a4 a | bes4 g a2 | c'4. c'8 d'4 d' | d'4 c' c'2 | + a2 d'4 bes | a2 c'4 c' | c'2 c' | c'1 | +} + +Bass = { + \key f \major + f2 f4 f | bes,4 c f2 | f4. e8 d4 c | bes,4 c f2 | + f2 bes,4 d | f2 e4 f | g2 f | c1 | +} + + +\score { + << + \new ChordNames { \theChords } + \context Staff = upper { + \context Voice = sop { + << + \Soprano + \Alto + >> + } + } + \context Lyrics = "LyrOne" \lyricsto "sop" { \verseOne } + \context Lyrics = "LyrTwo" \lyricsto "sop" { \verseTwo } + \context Staff = lower { + \new Voice { + \clef bass + #(set-accidental-style 'modern-cautionary) + << + \Tenor + \Bass + >> + } + } + >> + + \layout { + indent = 0 + \context { + \Score + \remove "Bar_number_engraver" + } + \context { + \Voice + \override StanzaNumber #'padding = #1.8 + } + } +} +\paper { } diff --git a/Documentation/snippets/new/clip-systems.ly b/Documentation/snippets/new/clip-systems.ly new file mode 100644 index 0000000000..ebf8cdea9b --- /dev/null +++ b/Documentation/snippets/new/clip-systems.ly @@ -0,0 +1,88 @@ +\version "2.14.0" + +\header { + lsrtags = "paper-and-layout" + + texidoc = " +This code shows how to clip (extract) snippets from a full score. + +This file needs to be run separately with @code{-dclip-systems}; the +snippets page may not adequately show the results. + +The result will be files named +@samp{base-from-start-to-end[-count].eps}. + + +If system starts and ends are included, they include extents of the +System grob, e.g., instrument names. + + +Grace notes at the end point of the region are not included. + + +Regions can span multiple systems. In this case, multiple EPS files +are generated. + +" + doctitle = "Clip systems" +} + +#(ly:set-option 'clip-systems) +#(define output-suffix "1") + +origScore = \score { + \relative c' { + \set Staff.instrumentName = #"bla" + c1 + d1 + \grace c16 e1 + \key d \major + f1 \break + \clef bass + g,1 + fis1 + } +} + +\book { + \score { + \origScore + \layout { + % Each clip-region is a (START . END) pair + % where both are rhythmic-locations. + + % (make-rhythmic-locations BAR-NUMBER NUM DEN) + % means NUM/DEN whole-notes into bar numbered BAR-NUMBER + + clip-regions = #(list + (cons + (make-rhythmic-location 2 0 1) + (make-rhythmic-location 4 0 1)) + + (cons + (make-rhythmic-location 0 0 1) + (make-rhythmic-location 4 0 1)) + + (cons + (make-rhythmic-location 0 0 1) + (make-rhythmic-location 6 0 1)) + ) + } + } +} + +#(ly:set-option 'clip-systems #f) +#(define output-suffix #f) + +\book { + \score { \origScore } + \markup { \bold \fontsize #6 clips } + \score { + \lyrics { + \markup { from-2.0.1-to-4.0.1-clip.eps } + \markup { + \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" + (ly:parser-output-name parser)) } + } + } +} diff --git a/Documentation/snippets/new/compound-time-signatures.ly b/Documentation/snippets/new/compound-time-signatures.ly new file mode 100644 index 0000000000..04dc1c2359 --- /dev/null +++ b/Documentation/snippets/new/compound-time-signatures.ly @@ -0,0 +1,31 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + texidoc = " +Odd 20th century time signatures (such as \"5/8\") can often be played +as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or +more inequal metrics. LilyPond can make such music quite easy to read +and play, by explicitly printing the compound time signatures and +adapting the automatic beaming behavior. (Graphic measure grouping +indications can also be added; see the appropriate snippet in this +database.) +" + doctitle = "Compound time signatures" +} + +#(define ((compound-time one two num) grob) + (grob-interpret-markup grob + (markup #:override '(baseline-skip . 0) #:number + (#:line ((#:column (one num)) + #:vcenter "+" + (#:column (two num))))))) + +\relative c' { + \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8") + \time 5/8 + \set Staff.beatStructure = #'(2 3) + c8 d e fis gis + c8 fis, gis e d + c8 d e4 gis8 +} diff --git a/Documentation/snippets/new/conducting-signs,-measure-grouping-signs.ly b/Documentation/snippets/new/conducting-signs,-measure-grouping-signs.ly new file mode 100644 index 0000000000..72ce8c800c --- /dev/null +++ b/Documentation/snippets/new/conducting-signs,-measure-grouping-signs.ly @@ -0,0 +1,50 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + texidoc = " +Beat grouping within a measure is controlled by the context property +@code{beatStructure}. Values of @code{beatStructure} are +established for many time signatures in +@file{scm/time-signature-settings.scm}. Values of @code{beatStructure} +can be changed or set with @code{\set}. +Alternatively, the +Scheme function @code{set-time-signature} can be used to both +set the time signature and establish the beat structure. +@code{set-time-signature}, takes three arguments: the +number of beats, the beat length, and the internal grouping of beats in +the measure. @code{\time} and @code{set-time-signature} both apply +to the @code{Timing} context, so they will not reset values of +@code{beatStructure} or @code{baseMoment} that are set in +other lower-level contexts, such as @code{Voice}. + +If the @code{Measure_grouping_engraver} is included +in one of the display contexts, measure grouping signs will be +created. Such signs ease reading rhythmically complex modern music. +In the example, the 9/8 measure is grouped in two different +patterns using the two different methods, while the 5/8 measure +is grouped according to the default setting in +@file{scm/time-signature-settings.scm}: +" + doctitle = "Conducting signs, measure grouping signs" +} + + +\score { + \new Voice \relative c'' { + \time 9/8 + g8 g d d g g a( bes g) | + \set Timing.beatStructure = #'(2 2 2 3) + g8 g d d g g a( bes g) | + #(set-time-signature 9 8 '(4 5)) + g8 g d d g g a( bes g) | + \time 5/8 + a4. g4 | + } + \layout { + \context { + \Staff + \consists "Measure_grouping_engraver" + } + } +} diff --git a/Documentation/snippets/new/controlling-spanner-visibility-after-a-line-break.ly b/Documentation/snippets/new/controlling-spanner-visibility-after-a-line-break.ly new file mode 100644 index 0000000000..8c9c8ce80a --- /dev/null +++ b/Documentation/snippets/new/controlling-spanner-visibility-after-a-line-break.ly @@ -0,0 +1,37 @@ +\version "2.14.0" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + texidoc = "The visibility of spanners which end on the first note +following a line break is controlled by the @code{after-line-breaking} +callback @code{ly:spanner::kill-zero-spanned-time}. + +For objects such as glissandos and hairpins, the default behaviour is +to hide the spanner after a break; disabling the callback will allow +the left-broken span to be shown. + +Conversely, spanners which are usually visible, such as text spans, +can be hidden by enabling the callback. +" + + doctitle = "Controlling spanner visibility after a line break" +} + +\paper { ragged-right = ##t } + +\relative c'' { + \override Hairpin #'to-barline = ##f + \override Glissando #'breakable = ##t + % show hairpin + \override Hairpin #'after-line-breaking = ##t + % hide text span + \override TextSpanner #'after-line-breaking = + #ly:spanner::kill-zero-spanned-time + e2\<\startTextSpan + % show glissando + \override Glissando #'after-line-breaking = ##t + f2\glissando + \break + f,1\!\stopTextSpan +} + diff --git a/Documentation/snippets/new/defining-an-engraver-in-scheme-ambitus-engraver.ly b/Documentation/snippets/new/defining-an-engraver-in-scheme-ambitus-engraver.ly new file mode 100644 index 0000000000..379dc69147 --- /dev/null +++ b/Documentation/snippets/new/defining-an-engraver-in-scheme-ambitus-engraver.ly @@ -0,0 +1,323 @@ +\version "2.14.0" + +\header { + + lsrtags = "contexts-and-engravers" + + + texidoc = "This example demonstrates how the ambitus engraver may be + defined on the user side, with a Scheme engraver. + + This is basically a rewrite in Scheme of the code from + @file{lily/ambitus-engraver.cc}. +" + + doctitle = "Defining an engraver in Scheme: ambitus engraver" +} + +#(use-modules (oop goops)) + +%%% +%%% Grob utilities +%%% +%%% These are literal rewrites of some C++ methods used by the ambitus engraver. +#(define (ly:event::in-event-class event class-name) + "Check if @var{event} the given class. +Rewrite of @code{Stream_event::internal_in_event_class} from @file{lily/stream-event.cc}." + (memq class-name (ly:make-event-class (ly:event-property event 'class)))) + +#(define (ly:separation-item::add-conditional-item grob grob-item) + "Add @var{grob-item} to the array of conditional elements of @var{grob}. +Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}." + (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item)) + +#(define (ly:accidental-placement::accidental-pitch accidental-grob) + "Get the pitch from the grob cause of @var{accidental-grob}. +Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}." + (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause) + 'pitch)) + +#(define (ly:accidental-placement::add-accidental grob accidental-grob) + "Add @var{accidental-grob}, an @code{Accidental} grob, to the +list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement} +grob. +Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}." + (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob))) + (set! (ly:grob-parent accidental-grob X) grob) + (set! (ly:grob-property accidental-grob 'X-offset) + ly:grob::x-parent-positioning) + (let* ((accidentals (ly:grob-object grob 'accidental-grobs)) + (handle (assq (ly:pitch-notename pitch) accidentals)) + (entry (if handle (cdr handle) '()))) + (set! (ly:grob-object grob 'accidental-grobs) + (assq-set! accidentals + (ly:pitch-notename pitch) + (cons accidental-grob entry)))))) + +%%% +%%% Ambitus data structure +%%% + +%%% The class holds the various grobs that are created +%%% to print an ambitus: +%%% - ambitus-group: the grob that groups all the components of an ambitus +%%% (Ambitus grob); +%%% - ambitus-line: the vertical line between the upper and lower ambitus +%%% notes (AmbitusLine grob); +%%% - ambitus-up-note and ambitus-down-note: the note head and accidental +%%% for the lower and upper note of the ambitus (see class +%%% below). +%%% The other slots define the key and clef context of the engraver: +%%% - start-c0: position of middle c at the beginning of the piece. It +%%% is used to place the ambitus notes according to their pitch; +%%% - start-key-sig: the key signature at the beginning of the piece. It +%%% is used to determine if accidentals shall be printed next to ambitus +%%% notes. + +#(define-class () + (ambitus-group #:accessor ambitus-group) + (ambitus-line #:accessor ambitus-line) + (ambitus-up-note #:getter ambitus-up-note + #:init-form (make )) + (ambitus-down-note #:getter ambitus-down-note + #:init-form (make )) + (start-c0 #:accessor ambitus-start-c0 + #:init-value #f) + (start-key-sig #:accessor ambitus-start-key-sig + #:init-value '())) + +%%% Accessor for the lower and upper note data of an ambitus +#(define-method (ambitus-note (ambitus ) direction) + "If @var{direction} is @code{UP}, then return the upper ambitus note +of @var{ambitus}, otherwise return the lower ambitus note." + (if (= direction UP) + (ambitus-up-note ambitus) + (ambitus-down-note ambitus))) + +%%% The class holds the grobs that are specific to ambitus +%%% (lower and upper) notes: +%%% - head: an AmbitusNoteHead grob; +%%% - accidental: an AmbitusAccidental grob, to be possibly printed next +%%% to the ambitus note head. +%%% Moreover: +%%% - pitch is the absolute pitch of the note +%%% - cause is the note event that causes this ambitus note, i.e. the lower +%%% or upper note of the considered music sequence. + +#(define-class () + (head #:accessor ambitus-note-head + #:init-value #f) + (accidental #:accessor ambitus-note-accidental + #:init-value #f) + (cause #:accessor ambitus-note-cause + #:init-value #f) + (pitch #:accessor ambitus-note-pitch + #:init-value #f)) + +%%% +%%% Ambitus engraving logics +%%% +%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}. + +#(define (make-ambitus translator) + "Build an ambitus object: initialize all the grobs and their relations. + +The Ambitus grob contain all other grobs: + Ambitus + |- AmbitusLine + |- AmbitusNoteHead for upper note + |- AmbitusAccidental for upper note + |- AmbitusNoteHead for lower note + |- AmbitusAccidental for lower note + +The parent of an accidental is the corresponding note head, +and the accidental is set as the 'accidental-grob of the note head +so that is printed by the function that prints notes." + ;; make the ambitus object + (let ((ambitus (make ))) + ;; build the Ambitus grob, which will contain all other grobs + (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '())) + ;; build the AmbitusLine grob (line between lower and upper note) + (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '())) + ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental + (for-each (lambda (direction) + (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '())) + (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '())) + (group (ambitus-group ambitus))) + ;; The parent of the AmbitusAccidental grob is the + ;; AmbitusNoteHead grob + (set! (ly:grob-parent accidental Y) head) + ;; The AmbitusAccidental grob is set as the accidental-grob + ;; object of the AmbitusNoteHead. This is later used by the + ;; function that prints notes. + (set! (ly:grob-object head 'accidental-grob) accidental) + ;; both the note head and the accidental grobs are added + ;; to the main ambitus grob. + (ly:axis-group-interface::add-element group head) + (ly:axis-group-interface::add-element group accidental) + ;; the note head and the accidental grobs are added to the + ;; ambitus object + (set! (ambitus-note-head (ambitus-note ambitus direction)) + head) + (set! (ambitus-note-accidental (ambitus-note ambitus direction)) + accidental))) + (list DOWN UP)) + ;; The parent of the ambitus line is the lower ambitus note head + (set! (ly:grob-parent (ambitus-line ambitus) X) + (ambitus-note-head (ambitus-note ambitus DOWN))) + ;; the ambitus line is added to the ambitus main grob + (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus)) + ambitus)) + +#(define-method (initialize-ambitus-state (ambitus ) translator) + "Initialize the state of @var{ambitus}, by getting the starting +position of middle C and key signature from @var{translator}'s context." + (if (not (ambitus-start-c0 ambitus)) + (begin + (set! (ambitus-start-c0 ambitus) + (ly:context-property (ly:translator-context translator) + 'middleCPosition + 0)) + (set! (ambitus-start-key-sig ambitus) + (ly:context-property (ly:translator-context translator) + 'keySignature))))) + +#(define-method (update-ambitus-notes (ambitus ) note-grob) + "Update the upper and lower ambitus pithes of @var{ambitus}, using +@var{note-grob}." + ;; Get the event that caused the note-grob creation + ;; and check that it is a note-event. + (let ((note-event (ly:grob-property note-grob 'cause))) + (if (ly:event::in-event-class note-event 'note-event) + ;; get the pitch from the note event + (let ((pitch (ly:event-property note-event 'pitch))) + ;; if this pitch is lower than the current ambitus lower + ;; note pitch (or it has not been initialized yet), + ;; then this pitch is the new ambitus lower pitch, + ;; and conversely for upper pitch. + (for-each (lambda (direction pitch-compare) + (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction))) + (pitch-compare pitch + (ambitus-note-pitch (ambitus-note ambitus direction)))) + (begin + (set! (ambitus-note-pitch (ambitus-note ambitus direction)) + pitch) + (set! (ambitus-note-cause (ambitus-note ambitus direction)) + note-event)))) + (list DOWN UP) + (list ly:pitch) translator) + "Typeset the ambitus: +- place the lower and upper ambitus notes according to their pitch and + the position of the middle C; +- typeset or delete the note accidentals, according to the key signature. + An accidental, if it is to be printed, is added to an AccidentalPlacement + grob (a grob dedicated to the placement of accidentals near a chord); +- both note heads are added to the ambitus line grob, so that a line should + be printed between them." + ;; check if there are lower and upper pitches + (if (and (ambitus-note-pitch (ambitus-note ambitus UP)) + (ambitus-note-pitch (ambitus-note ambitus DOWN))) + ;; make an AccidentalPlacement grob, for placement of note accidentals + (let ((accidental-placement (ly:engraver-make-grob + translator + 'AccidentalPlacement + (ambitus-note-accidental (ambitus-note ambitus DOWN))))) + ;; For lower and upper ambitus notes: + (for-each (lambda (direction) + (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction)))) + ;; set the cause and the staff position of the ambitus note + ;; according to the associated pitch + (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction)) + 'cause) + (ambitus-note-cause (ambitus-note ambitus direction))) + (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction)) + 'staff-position) + (+ (ambitus-start-c0 ambitus) + (ly:pitch-steps pitch))) + ;; determine if an accidental shall be printed for this note, + ;; according to the key signature + (let* ((handle (or (assoc (cons (ly:pitch-octave pitch) + (ly:pitch-notename pitch)) + (ambitus-start-key-sig ambitus)) + (assoc (ly:pitch-notename pitch) + (ambitus-start-key-sig ambitus)))) + (sig-alter (if handle (cdr handle) 0))) + (cond ((= (ly:pitch-alteration pitch) sig-alter) + ;; the note alteration is in the key signature + ;; => it does not have to be printed + (ly:grob-suicide! + (ambitus-note-accidental (ambitus-note ambitus direction))) + (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction)) + 'accidental-grob) + '())) + (else + ;; otherwise, the accidental shall be printed + (set! (ly:grob-property (ambitus-note-accidental + (ambitus-note ambitus direction)) + 'alteration) + (ly:pitch-alteration pitch))))) + ;; add the AccidentalPlacement grob to the + ;; conditional items of the AmbitusNoteHead + (ly:separation-item::add-conditional-item + (ambitus-note-head (ambitus-note ambitus direction)) + accidental-placement) + ;; add the AmbitusAccidental to the list of the + ;; AccidentalPlacement grob accidentals + (ly:accidental-placement::add-accidental + accidental-placement + (ambitus-note-accidental (ambitus-note ambitus direction))) + ;; add the AmbitusNoteHead grob to the AmbitusLine grob + (ly:pointer-group-interface::add-grob + (ambitus-line ambitus) + 'note-heads + (ambitus-note-head (ambitus-note ambitus direction))))) + (list DOWN UP)) + ;; add the AccidentalPlacement grob to the main Ambitus grob + (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement)) + ;; no notes ==> suicide the grobs + (begin + (for-each (lambda (direction) + (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction))) + (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction)))) + (list DOWN UP)) + (ly:grob-suicide! ambitus-line)))) + +%%% +%%% Ambitus engraver definition +%%% +#(define ambitus-engraver + (lambda (context) + (let ((ambitus #f)) + ;; when music is processed: make the ambitus object, if not already built + `((process-music . ,(lambda (translator) + (if (not ambitus) + (set! ambitus (make-ambitus translator))))) + ;; set the ambitus clef and key signature state + (stop-translation-timestep . ,(lambda (translator) + (if ambitus + (initialize-ambitus-state ambitus translator)))) + ;; when a note-head grob is built, update the ambitus notes + (acknowledgers + (note-head-interface . ,(lambda (engraver grob source-engraver) + (if ambitus + (update-ambitus-notes ambitus grob))))) + ;; finally, typeset the ambitus according to its upper and lower notes + ;; (if any). + (finalize . ,(lambda (translator) + (if ambitus + (typeset-ambitus ambitus translator)))))))) + +%%% +%%% Example +%%% + +\score { + \new StaffGroup << + \new Staff { c'4 des' e' fis' gis' } + \new Staff { \clef "bass" c4 des ~ des ees b, } + >> + \layout { \context { \Staff \consists #ambitus-engraver } } +} diff --git a/Documentation/snippets/new/defining-predefined-fretboards-for-other-instruments.ly b/Documentation/snippets/new/defining-predefined-fretboards-for-other-instruments.ly new file mode 100644 index 0000000000..11a3914d57 --- /dev/null +++ b/Documentation/snippets/new/defining-predefined-fretboards-for-other-instruments.ly @@ -0,0 +1,167 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + +%% Translation of GIT committish: cde045f4e833aa491fb63f2222e14bef49507577 + texidoces = " + +Se pueden añadir diagramas de posiciones predefinidas para +instrumentos nuevos además de los estándar que se usan para la +guitarra. Este archivo muestra cómo se hace, definiendo una afinación +nueva y unas cuantas posiciones para el cuatro venezolano. + +Este archivo también muestra cómo se pueden incluir las digitaciones +en los acordes que se usan como puntos de referencia para la búsqueda +de acordes en la tabla, y mostrarse en el diagrama de posiciones y la +tablatura @code{TabStaff}, pero no en la música. + +Estas posiciones no se pueden transportar porque contienen información +de las cuerdas. Hay planes para corregir esto en un futuro. + +" + doctitlees = "Definición de posiciones predefinidas para otros instrumentos" + + +%% Translation of GIT committish: f23429bc5cfa9d141ef7b4509afc46c140308a1e + texidocde = " +Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden +neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel +zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte +Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro. + +Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden +werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden +kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, +aber nicht in den Noten angezeigt. + +Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen +enthalten. Das soll in der Zukunft verbessert werden. + +" + doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + + texidocfr = " +La liste des diagrammes standards prédéfinis pour la guitare peut être +augmentée d'autres définitions spécifiques à d'autres instruments. +Voici comment définir un nouvel accordage ainsi que quelques diagrammes +prédéfinis pour le @qq{cuatro vénézuélien}. + +Cet exemple illustre aussi la manière d'ajouter des doigtés aux +accords ; ils serviront de référence pour la boucle d'accord et seront +indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. + +Ces diagrammes ne peuvent pas être transposés, dans la mesure où ils +contiennent des informations sur les cordes. Ceci est amené à évoluer. + +" + doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments" + + + texidoc = " +Predefined fret diagrams can be added for new instruments in addition +to the standards used for guitar. This file shows how this is done by +defining a new string-tuning and a few predefined fretboards for the +Venezuelan cuatro. + +This file also shows how fingerings can be included in the chords used +as reference points for the chord lookup, and displayed in the fret +diagram and the @code{TabStaff}, but not the music. + + +These fretboards are not transposable because they contain string +information. This is planned to be corrected in the future. + +" + doctitle = "Defining predefined fretboards for other instruments" +} + +% add FretBoards for the Cuatro +% Note: This section could be put into a separate file +% predefined-cuatro-fretboards.ly +% and \included into each of your compositions + +cuatroTuning = #`(,(ly:make-pitch 0 6 0) + ,(ly:make-pitch 1 3 SHARP) + ,(ly:make-pitch 1 1 0) + ,(ly:make-pitch 0 5 0)) + +dSix = { } +dMajor = { } +aMajSeven = { } +dMajSeven = { } +gMajor = { } + +\storePredefinedDiagram #default-fret-table \dSix + #cuatroTuning + #"o;o;o;o;" +\storePredefinedDiagram #default-fret-table \dMajor + #cuatroTuning + #"o;o;o;3-3;" +\storePredefinedDiagram #default-fret-table \aMajSeven + #cuatroTuning + #"o;2-2;1-1;2-3;" +\storePredefinedDiagram #default-fret-table \dMajSeven + #cuatroTuning + #"o;o;o;1-1;" +\storePredefinedDiagram #default-fret-table \gMajor + #cuatroTuning + #"2-2;o;1-1;o;" + +% end of potential include file /predefined-cuatro-fretboards.ly + + +#(set-global-staff-size 16) + +primerosNames = \chordmode { + d:6 d a:maj7 d:maj7 + g +} +primeros = { + \dSix \dMajor \aMajSeven \dMajSeven + \gMajor +} + +\score { + << + \new ChordNames { + \set chordChanges = ##t + \primerosNames + } + + \new Staff { + \new Voice \with { + \remove "New_fingering_engraver" + } + \relative c'' { + \primeros + } + } + + \new FretBoards { + \set stringTunings = #cuatroTuning +% \override FretBoard +% #'(fret-diagram-details string-count) = #'4 + \override FretBoard + #'(fret-diagram-details finger-code) = #'in-dot + \primeros + } + + \new TabStaff \relative c'' { + \set TabStaff.stringTunings = #cuatroTuning + \primeros + } + + >> + + \layout { + \context { + \Score + \override SpacingSpanner + #'base-shortest-duration = #(ly:make-moment 1 16) + } + } + \midi { } +} diff --git a/Documentation/snippets/new/displaying-complex-chords.ly b/Documentation/snippets/new/displaying-complex-chords.ly new file mode 100644 index 0000000000..f2426dcc4c --- /dev/null +++ b/Documentation/snippets/new/displaying-complex-chords.ly @@ -0,0 +1,25 @@ +\version "2.14.0" + +\header { + lsrtags = "simultaneous-notes, chords" + texidoc = " +Here is a way to display a chord where the same note is played twice +with different accidentals. +" + doctitle = "Displaying complex chords" +} + +fixA = { + \once \override Stem #'length = #9 +} +fixB = { + \once \override NoteHead #'X-offset = #1.7 + \once \override Stem #'rotation = #'(45 0 0) + \once \override Stem #'extra-offset = #'(-0.2 . -0.2) + \once \override Stem #'flag-style = #'no-flag + \once \override Accidental #'extra-offset = #'(4 . 0) +} + +\relative c' { + << { \fixA 8 } \\ { \voiceThree \fixB dis } >> s +} diff --git a/Documentation/snippets/new/displaying-grob-ancestry.ly b/Documentation/snippets/new/displaying-grob-ancestry.ly new file mode 100644 index 0000000000..3cee26c5da --- /dev/null +++ b/Documentation/snippets/new/displaying-grob-ancestry.ly @@ -0,0 +1,132 @@ +\version "2.14.0" + +\header { + lsrtags = "tweaks-and-overrides" + + texidoc = " +When working with grob callbacks, it can be helpful to understand a +grob's @qq{ancestry}. Most grobs have @qq{parents} which influence the +positioning of the grob. X- and Y-parents influence the horizontal and +vertical positions for the grob, respectively. Additionally, each +parent may have parents of its own. + + +Unfortunately, there are several aspects of a grob's ancestry that can +lead to confusion: + + +@itemize + +@item +The types of parents a grob has may depend on context. + +@item +For some grobs, the X- and Y-parents are the same. + +@item +A particular @qq{ancestor} may be related to a grob in multiple ways. + +@item +The concept of @qq{generations} is misleading. + +@end itemize + + +For example, the @code{System} grob can be both parent (on the Y-side) +and grandparent (twice on the X-side) to a @code{VerticalAlignment} +grob. + + +This macro prints (to the console) a textual representation of a grob's +ancestry. + + +When called this way + +@example +@{ + \\once \\override NoteHead #'before-line-breaking = #display-ancestry + c4 +@} +@end example + + +The following output is generated: + + +@example +------------------------------------ + +NoteHead X,Y: NoteColumn + X: PaperColumn + X,Y: System + Y: VerticalAxisGroup + X: NonMusicalPaperColumn + X,Y: System + Y: VerticalAlignment + X: NonMusicalPaperColumn + X,Y: System + Y: System +@end example + + +" + doctitle = "Displaying grob ancestry" +} + +#(define (grob-name grob) + (if (ly:grob? grob) + (assoc-ref (ly:grob-property grob 'meta) 'name) + #f)) + +#(define (get-ancestry grob) + (if (not (null? (ly:grob-parent grob X))) + (list (grob-name grob) + (get-ancestry (ly:grob-parent grob X)) + (get-ancestry (ly:grob-parent grob Y))) + (grob-name grob))) + +#(define (format-ancestry lst padding) + (string-append + (symbol->string (car lst)) + "\n" + (let ((X-ancestry + (if (list? (cadr lst)) + (format-ancestry (cadr lst) (+ padding 3)) + (symbol->string (cadr lst)))) + (Y-ancestry + (if (list? (caddr lst)) + (format-ancestry (caddr lst) (+ padding 3)) + (symbol->string (caddr lst))))) + (if (equal? X-ancestry Y-ancestry) + (string-append + (format #f "~&") + (make-string padding #\space) + "X,Y: " + (if (list? (cadr lst)) + (format-ancestry (cadr lst) (+ padding 5)) + (symbol->string (cadr lst)))) + (string-append + (format #f "~&") + (make-string padding #\space) + "X: " X-ancestry + "\n" + (make-string padding #\space) + "Y: " Y-ancestry + (format #f "~&")))) + (format #f "~&"))) + +#(define (display-ancestry grob) + (display + (string-append + (format #f "~3&~a~2%" (make-string 36 #\-)) + (format-ancestry (get-ancestry grob) 0) + (format #f "~2&")))) + +\relative c' { + \once \override NoteHead #'before-line-breaking = #display-ancestry + f4 + \once \override Accidental #'before-line-breaking = #display-ancestry + \once \override Arpeggio #'before-line-breaking = #display-ancestry + 4\arpeggio +} diff --git a/Documentation/snippets/new/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly b/Documentation/snippets/new/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly new file mode 100644 index 0000000000..cb3e2ffa39 --- /dev/null +++ b/Documentation/snippets/new/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly @@ -0,0 +1,23 @@ +\version "2.14.0" + +\header { + lsrtags = "pitches" + texidoc = " +In early 20th century works, starting with Schoenberg, Berg and Webern +(the @qq{Second} Viennese school), every pitch in the twelve-tone scale +has to be regarded as equal, without any hierarchy such as the +classical (tonal) degrees. Therefore, these composers print one +accidental for each note, even at natural pitches, to emphasize their +new approach to music theory and language. + +This snippet shows how to achieve such notation rules. + +" + doctitle = "Dodecaphonic-style accidentals for each note including naturals" +} + +\markup { + This snippet is deprecated as of version 2.12 and + will be removed from the documentation in 2.14. +} + diff --git a/Documentation/snippets/new/dynamics-custom-text-spanner-postfix.ly b/Documentation/snippets/new/dynamics-custom-text-spanner-postfix.ly new file mode 100644 index 0000000000..57f22712fb --- /dev/null +++ b/Documentation/snippets/new/dynamics-custom-text-spanner-postfix.ly @@ -0,0 +1,35 @@ +\version "2.14.0" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + texidoc = "Postfix functions for custom crescendo text spanners. The spanners +should start on the first note of the measure. One has to use -\mycresc, +otherwise the spanner start will rather be assigned to the next note. +" + doctitle = "Dynamics custom text spanner postfix" +} + +% Two functions for (de)crescendo spanners where you can explicitly give the +% spanner text. +mycresc = +#(define-music-function (parser location mymarkup) (markup?) + (make-music 'CrescendoEvent + 'span-direction START + 'span-type 'text + 'span-text mymarkup)) +mydecresc = +#(define-music-function (parser location mymarkup) (markup?) + (make-music 'DecrescendoEvent + 'span-direction START + 'span-type 'text + 'span-text mymarkup)) + +\relative c' { + c4-\mycresc "custom cresc" c4 c4 c4 | + c4 c4 c4 c4 | + c4-\mydecresc "custom decresc" c4 c4 c4 | + c4 c4\! c4 c4 +} + + + diff --git a/Documentation/snippets/new/dynamics-text-spanner-postfix.ly b/Documentation/snippets/new/dynamics-text-spanner-postfix.ly new file mode 100644 index 0000000000..5f1187ec18 --- /dev/null +++ b/Documentation/snippets/new/dynamics-text-spanner-postfix.ly @@ -0,0 +1,25 @@ +\version "2.14.0" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + texidoc = "Custom text spanners can be defined and used with hairpin + and text crescendos. @code{\<} and @code{\>} produce hairpins by + default, @code{\cresc} etc. produce text spanners by default." + doctitle = "Dynamics text spanner postfix" +} + +% Some sample text dynamic spanners, to be used as postfix operators +crpoco = +#(make-music 'CrescendoEvent + 'span-direction START + 'span-type 'text + 'span-text "cresc. poco a poco") + +\relative c' { + c4\cresc d4 e4 f4 | + g4 a4\! b4\crpoco c4 | + c4 d4 e4 f4 | + g4 a4\! b4\< c4 | + g4\dim a4 b4\decresc c4\! +} + diff --git a/Documentation/snippets/new/editorial-headword.ly b/Documentation/snippets/new/editorial-headword.ly new file mode 100644 index 0000000000..89f7c0b736 --- /dev/null +++ b/Documentation/snippets/new/editorial-headword.ly @@ -0,0 +1,99 @@ +\version "2.14.0" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +% NR 1.7 Editorial annotations + +% Beethoven, Op. 31, No. 3 +% Piano sonata 18, Movt II, Scherzo +% Measures 9 - 14 + +\new PianoStaff << + + % RH Staff + \new Staff { + \clef treble + \key af \major + \time 2/4 + \set Staff.fingeringOrientations = #'(up) + \set Score.currentBarNumber = #9 + \partial 8 + 8 \staccato + | + \set doubleSlurs = ##t + 4 ( + 8 \staccato ) + \noBeam + c''8-5 \staccato \pp + | + \set doubleSlurs = ##f + bf'8.. ( + af'32 + g'8 ) \staccato + f'8 \staccato + | + e'4-2 + r8 + \once \override Script #'script-priority = #-100 + \afterGrace + f'8 ( \trill ^ \markup { \finger "3-2" } + { e'16 [ f'16 ] } + | + g'8..-3 + f'32 + e'8-1 ) \staccato + d'8-2 \staccato + | + c'4 + r4 + } + + % LH Staff + \new Staff { + \key af \major + \clef treble + \override Fingering #'direction = #down + \set Staff.fingeringOrientations = #'(down) + \partial 8 + 8 \staccato + \set doubleSlurs = ##t + 4 ( + 8 ) \staccato + \noBeam + \clef bass + c'8-1 \staccato + | + \set doubleSlurs = ##f + bf8.. ( + af32 + g8-1 ) \staccato + f8 \staccato + | + e4 + r8 + \afterGrace + f8 ( \trill _ \markup { \finger "2-1" } + { e16 [ f16 ] } + | + g8..-1 + f32 + e8 ) \staccato + d8 \staccato + | + c4 + r4 + } + +>> diff --git a/Documentation/snippets/new/engravers-one-by-one.ly b/Documentation/snippets/new/engravers-one-by-one.ly new file mode 100644 index 0000000000..0492561f7c --- /dev/null +++ b/Documentation/snippets/new/engravers-one-by-one.ly @@ -0,0 +1,273 @@ +\version "2.14.0" + +\header { + lsrtags = "contexts-and-engravers" + + texidoc = " +The notation problem, creating a certain symbol, is handled by plugins. + Each plugin is called an Engraver. In this example, engravers are +switched on one by one, in the following order: + +- note heads, + + +- staff symbol, + + +- clef, + + +- stem, + + +- beams, slurs, accents, + + +- accidentals, bar lines, time signature and key signature. + + + +Engravers are grouped. For example, note heads, slurs, beams etc. form +a @code{Voice} context. Engravers for key signature, accidentals, bar +line, etc. form a @code{Staff} context. + +" + doctitle = "Engravers one-by-one" +} % begin verbatim + + +%% sample music +topVoice = \relative c' { + \key d \major + es8([ g] a[ fis]) + b4 + b16[-. b-. b-. cis-.] + d4-> +} + +botVoice = \relative c' { + \key d \major + c8[( f] b[ a)] + es4 + es16[-. es-. es-. fis-.] + b4-> +} + +hoom = \relative c { + \key d \major + \clef bass + g8-. r + r4 + fis8-. + r8 + r4 + b'4-> +} + +pah = \relative c' { + r8 b-. + r4 + r8 g8-. + r16 g-. r8 + \clef treble + fis'4-> +} + +% +% setup for Request->Element conversion. Guru-only +% + +MyStaff = \context { + \type "Engraver_group" + \name Staff + + \description "Handles clefs, bar lines, keys, accidentals. It can contain +@code{Voice} contexts." + + \consists "Output_property_engraver" + + \consists "Font_size_engraver" + + \consists "Volta_engraver" + \consists "Separating_line_group_engraver" + \consists "Dot_column_engraver" + + \consists "Ottava_spanner_engraver" + \consists "Rest_collision_engraver" + \consists "Piano_pedal_engraver" + \consists "Piano_pedal_align_engraver" + \consists "Instrument_name_engraver" + \consists "Grob_pq_engraver" + \consists "Forbid_line_break_engraver" + \consists "Axis_group_engraver" + + \consists "Pitch_squash_engraver" + + localKeySignature = #'() + + % explicitly set instrumentName, so we don't get + % weird effects when doing instrument names for + % piano staves + + instrumentName = #'() + shortInstrumentName = #'() + + \accepts "Voice" +} + + +MyVoice = \context { + \type "Engraver_group" + \name Voice + + \description " + Corresponds to a voice on a staff. This context handles the + conversion of dynamic signs, stems, beams, super- and subscripts, + slurs, ties, and rests. + + You have to instantiate this explicitly if you want to have + multiple voices on the same staff." + + localKeySignature = #'() + \consists "Font_size_engraver" + + % must come before all + \consists "Output_property_engraver" + \consists "Arpeggio_engraver" + \consists "Multi_measure_rest_engraver" + \consists "Text_spanner_engraver" + \consists "Grob_pq_engraver" + \consists "Note_head_line_engraver" + \consists "Glissando_engraver" + \consists "Ligature_bracket_engraver" + \consists "Breathing_sign_engraver" + % \consists "Rest_engraver" + \consists "Grace_beam_engraver" + \consists "New_fingering_engraver" + \consists "Chord_tremolo_engraver" + \consists "Percent_repeat_engraver" + \consists "Slash_repeat_engraver" + + %{ + Must come before text_engraver, but after note_column engraver. + %} + \consists "Text_engraver" + \consists "Dynamic_engraver" + \consists "Fingering_engraver" + + \consists "Script_column_engraver" + \consists "Rhythmic_column_engraver" + \consists "Cluster_spanner_engraver" + \consists "Tie_engraver" + \consists "Tie_engraver" + \consists "Tuplet_engraver" + \consists "Note_heads_engraver" + \consists "Rest_engraver" +} + + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + + +MyStaff = \context { + \MyStaff + \consists "Staff_symbol_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Clef_engraver" + \remove "Pitch_squash_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Stem_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Beam_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyVoice = \context { + \MyVoice + \consists "Phrasing_slur_engraver" + \consists "Slur_engraver" + \consists "Script_engraver" +} + + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Bar_engraver" + \consists "Time_signature_engraver" +} + +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + +MyStaff = \context { + \MyStaff + \consists "Accidental_engraver" + \consists "Key_engraver" +} +\score { + \topVoice + \layout { + \context { \MyStaff } + \context { \MyVoice } + } +} + diff --git a/Documentation/snippets/new/expressive-headword.ly b/Documentation/snippets/new/expressive-headword.ly new file mode 100644 index 0000000000..8c1f821ba3 --- /dev/null +++ b/Documentation/snippets/new/expressive-headword.ly @@ -0,0 +1,270 @@ +\version "2.14.0" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 1.3 Expressive marks + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +% L. v. Beethoven, Op. 49 no. 1 +% Piano sonata 19 - "Leichte Sonate" +% measures 1 - 12 + +%\layout { +% \context { +% \Score +% \override SpacingSpanner #'base-shortest-duration = +% #(ly:make-moment 1 20) +% } +%} + +\new PianoStaff << + + % RH Staff + \new Staff { + \clef treble + \key g \major + \time 6/8 + \partial 2 + \once \override TextScript #'staff-padding = #2 + d'8 \staccato + ^ \markup { \column { + RONDO + \italic Allegro } } + d'8 \staccato + g'8 \staccato + a'8 \staccato + + | + + b'8 [ ( + g'8 ] ) + e'8 \staccato + e' \staccato + a'8 \staccato + b'8 \staccato + + | + + c''8 [ ( + a'8 ] ) + e''8 \staccato + d''8 \staccato + c''8 \staccato + b'8 \staccato + + | + + a'8 \staccato + g'8 \staccato + a'8 \staccato + \acciaccatura { g'16 [ a'16 ] } + bf'8 + a'8 \staccato + g'8 \staccato + + | + + fs'8 [ ( + d'8 ] ) + d'8 \staccato + d'8 \staccato + g'8 \staccato + a'8 \staccato + + | + + b'8 [ ( + g'8 ] ) + e'8 \staccato + e'8 \staccato + a'8 \staccato + b'8 \staccato + + | + + c''8 [ ( + a'8 ] ) + e''8 \staccato + d''8 \staccato + c''8 \staccato + b'8 \staccato + + | + + a'8 \staccato + g'8 \staccato + a'8 \staccato + << + { + \voiceOne + d'8 + g'8 + fs'8 + \oneVoice + } + \new Voice { + \voiceTwo + d'4 + c'8 + \oneVoice + } + >> + + | + + 4 \tenuto + d'8 \staccato + g'8 \staccato + b'8 \staccato + d''8 \staccato + + | + + d''8 ( + 8 \staccato ) + 8 \staccato + d''8 ( + 8 \staccato ) + 8 \staccato + + | + + d''8 ( + 8 \staccato ) + 8 \staccato + d''8 ( + 8 \staccato ) + 8 \staccato + + | + + d''8 \staccato + 8 \staccato + 8 \staccato + d'' \staccato + 8 \staccato + 8 \staccato + + | + + 4 \fermata + r8 r4 r8 + } + + % LH Staff + \new Staff { + \clef bass + \key g \major + \time 6/8 + \partial 2 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 8 \staccato + 8 \staccato + 8 \staccato + 4. ( + + | + + d'4 ) + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 8 \staccato + 8 \staccato + 8 \staccato + 4 + 8 \staccato + + | + + 4 \tenuto + r8 + r4 + r8 + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + 4 \fermata + r8 r4 r8 + } + +>> diff --git a/Documentation/snippets/new/faking-a-hammer-in-tablatures.ly b/Documentation/snippets/new/faking-a-hammer-in-tablatures.ly new file mode 100644 index 0000000000..55f17456ce --- /dev/null +++ b/Documentation/snippets/new/faking-a-hammer-in-tablatures.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = " +A hammer in tablature can be faked with slurs. +" + doctitle = "Faking a hammer in tablatures" +} + +\score { + \new TabStaff { + \relative c'' { + \tabFullNotation + c4( d) d( d) + d2( c) + } + } +} diff --git a/Documentation/snippets/new/figured-bass-headword.ly b/Documentation/snippets/new/figured-bass-headword.ly new file mode 100644 index 0000000000..2aae62d655 --- /dev/null +++ b/Documentation/snippets/new/figured-bass-headword.ly @@ -0,0 +1,112 @@ +\version "2.14.0" +#(set-global-staff-size 15) +\paper { + ragged-right = ##f + line-width = 16\cm + indent = 1.5\cm +} + +% NR 2.7.3 Figured bass + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +% Arcangelo Corelli, 12 Sonate da Camera, Op. 2 +% Sonata II, Allemanda +% measures 1 - 88 +% Coded by Neil Puttock; modified by Carl Sorensen + +extendOn = \bassFigureExtendersOn +extendOff = \bassFigureExtendersOff + +\score { + + \new StaffGroup << + + \new GrandStaff << + + \new Staff = "violinoI" { + \set Staff.instrumentName = \markup { + \line { Violino I. } + } + \time 4/4 + \mark \markup { \italic Adagio. } + \partial 8 + r16 a'16 | + a'8. [ d''16 d''8. e''16 ] cis''8 a'4 a''16 bes''16 | + cis''8 d''16 ( e'' ) e''8. d''16 d''4 r8 d''16 e''16 | + f''8 f''4 g''16 ( f''16 ) e''8 e''4 f''16 ( e''16 ) | + d''8. d''16 g''16 ( f''16 ) e''16 ( d''16 ) cis''8 + cis''4 cis''16 cis''16 | + d''8 d''8 c''8. c''16 c''8 ( b'4 ) b'16 b'16 | + c''8 c''8 bes'8. bes'16 bes'8 ( a'4 ) a''16 a''16 | + a''8 g''8 g''8. g''16 g''8 ( f''8 ) r8 f''8 | + } + + \new Staff = "violinoII" { + \set Staff.instrumentName = \markup { + \line { Violino II. } + } + \time 4/4 + \partial 8 + r16 f'16 | + f'8. g'16 g'4 a'4 r8 d''16 d''16 | + e''8 a'8 cis''8. d''16 d''4 r8 f''16 g''16 | + a''8 a''8 d''8. d''16 g'8 g'8 c''8. c''16 | + f'8. f''16 bes''16 ( a''16 ) g''16 ( f''16 ) e''8 e''4 e''16 e''16 | + a'8 fis''8 g''8 a''8 d''8 d''4 d''16 d''16 | + g'8 e''8 f''8 g''8 c''8 c''4 cis''16 cis''16 | + d''8 d''8 e''8. e''16 e''8 a'8 r8 d''8 | + } + + >> + + \new Staff = "violone" { + \set Staff.instrumentName = \markup { + \center-column { + Violone, + \line { e Cembalo. } + } + } + \time 4/4 + \clef bass + \partial 8 + r16 d16 | + d4 bes,4 a,4 f4 | + g8 f16 g16 a8 a,8 d4 d'4 ~ | + d'8 c'8 b4 c'8 c'16 bes16 a4 | + bes8 bes16 a16 g4 a8 a,4 a16 g16 | + fis8 d8 e8 fis8 g8 g,4 g16 f16 | + e8 c8 d8 e8 f8 f,4 a,8 | + b,4 cis4 d4 r8 d'8 | + } + + \new FiguredBass \figuremode { + \set figuredBassAlterationDirection = #RIGHT + \set figuredBassPlusDirection = #RIGHT + \override BassFigureAlignment #'stacking-dir = #DOWN + s8 | + s4 <6>4 <_+>4 <6>4 | + <6 4\+ 2>8 <6>8 <_+> s8 s2 | + <5>8 <6 4>8 <6 5>4 s4 <5>8 <6>8 | + s4 <6 5 _-> <_+>2 | + <6>8 <_+>8 <6>8 <6 5>8 <5 4>8 \extendOn <5 _!>8 \extendOff s4 | + <6>4 <6->8 <6 5->8 <5 4->8 \extendOn <5 3>4 \extendOff <5 _+>8 | + <7>8 <6>8 <5>4 <9 4>8 <8 3>8 s4 | + } + + >> + + \layout { + \context { + \Score + \override RehearsalMark #'break-align-symbols = #'(time-signature) + \override RehearsalMark #'self-alignment-X = #LEFT + \override TimeSignature #'break-align-anchor-alignment = #LEFT + } + } +} diff --git a/Documentation/snippets/new/flamenco-notation.ly b/Documentation/snippets/new/flamenco-notation.ly new file mode 100644 index 0000000000..884e4b8a2d --- /dev/null +++ b/Documentation/snippets/new/flamenco-notation.ly @@ -0,0 +1,250 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + + texidoc = " +For flamenco guitar, special notation is used: + + +@itemize + +@item +a golpe symbol to indicate a slap on the guitar body with the nail of +the ring finger + +@item +an arrow to indicate (the direction of) strokes + +@item +different letters for fingering (@qq{p}: thumb, @qq{i}: index finger, +@qq{m}: middle finger, @qq{a}: ring finger and @qq{x}: little finger) + +@item +3- and 4-finger rasgueados: stroke upwards with all fingers, ending +with an up- and down using the index finger + +@item +abanicos: strokes (in tuples) with thumb (down), little and index finger +(both up) (there is also an abanico 2 where middle and ring finger are +used instead of the little finger) + +@item +alza pua: fast playing with the thumb + +@end itemize + + +Most figures use arrows in combination with fingering; with abanicos +and rasgueados, noteheads are printed only for the first chord. + +This snippet contains some header-like code that can be copied as +@samp{flamenco.ly} and included in source files. + +" + doctitle = "Flamenco notation" +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% Cut here ----- Start 'flamenco.ly' + +% Text indicators +abanico = \markup { \italic Abanico } +rasgueaso = \markup { \italic Ras. } +alzapua = \markup { \italic Alzapua } + +% Finger stroke symbols +strokeUp = \markup { \postscript #" + 0.1 setlinewidth + 0.5 0 moveto + 0.5 2 lineto + 0.2 1.4 lineto + 0.5 2 moveto + 0.8 1.4 lineto + stroke +"} + +strokeDown = \markup { \postscript #" + 0.1 setlinewidth + 0.5 2 moveto + 0.5 0 lineto + 0.2 0.6 lineto + 0.5 0 moveto + 0.8 0.6 lineto + stroke +"} + +% Golpe symbol +golpe = \markup { \postscript #" + 0.2 setlinewidth + 0 0 moveto + 1 0 lineto + 1 1 lineto + stroke + "\postscript #" + 0.1 setlinewidth + -0.6 -0.1 moveto + -0.6 1.0 lineto + 0.5 1.0 lineto + stroke +"} + +strokeUpGolpe = \markup { \column { \golpe \line { \strokeUp } } } +iUpGolpe = \markup { \column { \golpe \line { \small i } \line { \strokeUp } } } + +% Strokes for all fingers +pUp = \markup { \column { \small p \line { \strokeUp } } } +pDown = \markup { \column { \small p \line { \strokeDown } } } +iUp = \markup { \column { \small i \line { \strokeUp } } } +iDown = \markup { \column { \small i \line { \strokeDown } } } +mUp = \markup { \column { \small m \line { \strokeUp } } } +mDown = \markup { \column { \small m \line { \strokeDown } } } +aUp = \markup { \column { \small a \line { \strokeUp } } } +aDown = \markup { \column { \small a \line { \strokeDown } } } +xUp = \markup { \column { \small x \line { \strokeUp } } } +xDown = \markup { \column { \small x \line { \strokeDown } } } + + +% Just handy :) +tupletOff = { + \once \override TupletNumber #'stencil = ##f + \once \override TupletBracket #'stencil = ##f +} + +tupletsOff = { + \override TupletNumber #'stencil = ##f + \override TupletBracket #'bracket-visibility = #'if-no-beam +} + +tupletsOn = { + \override TupletBracket #'bracket-visibility = #'default + \revert TupletNumber #'stencil +} + +headsOff = { + \override TabNoteHead #'transparent = ##t + \override NoteHead #'transparent = ##t + \override NoteHead #'no-ledgers = ##t +} + +headsOn = { + \override TabNoteHead #'transparent = ##f + \override NoteHead #'transparent = ##f + \override NoteHead #'no-ledgers = ##f +} + +%%%%%%% Cut here ----- End 'flamenco.ly' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +part = \relative c' { + 8^\iUp + 8^\iDown + r4 + r2^\golpe + + 8^\iUp + 8^\iDown + 8^\iUpGolpe + 8^\iDown + r2 + + 16^\aUp + \headsOff + ^\mUp + ^\iUp + ^\iDown~ + \headsOn + 2 + r4 + + \tupletOff + \times 4/5 { + 16^\xUp + \headsOff + ^\aUp + ^\mUp + ^\iUp + ^\iDown~ + \headsOn + } + 2 + r4 + + \tupletsOff + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + \times 2/3 { + 8^\pDown + \headsOff + ^\xUp + ^\iUp + \headsOn + } + + \tupletsOff + \override Beam #'positions = #'(2 . 2) + \times 2/3 { + a8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \times 2/3 { + a,8^\markup{ \small p } + ^\strokeUpGolpe + ^\strokeDown + } + \tupletsOn + + \once \override TextScript #'extra-offset = #'(0 . -1) + 1_\golpe^\mUp + \bar "|." +} + +\score { + \new StaffGroup << + \context Staff = "part" << + \clef G + \transpose c c' + { + \part + } + >> + \context TabStaff { + \part + } + >> + \layout { + ragged-right = ##t + } +} diff --git a/Documentation/snippets/new/fretboards-alternate-tables.ly b/Documentation/snippets/new/fretboards-alternate-tables.ly new file mode 100644 index 0000000000..382a0f8a92 --- /dev/null +++ b/Documentation/snippets/new/fretboards-alternate-tables.ly @@ -0,0 +1,75 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + + texidoc = " +Alternate fretboard tables can be created. These would be used in +order to have alternate fretboards for a given chord. + +In order to use an alternate fretboard table, the table must first +be created. Fretboards are then added to the table. + +The created fretboard table can be blank, or it can be copied +from an existing table. + +The table to be used in displaying predefined fretboards is selected +by the property @code{\predefinedDiagramTable}. +" + + doctitle = "Alternate fretboard tables" +} + +\include "predefined-guitar-fretboards.ly" + +% Make a blank new fretboard table +#(define custom-fretboard-table-one (make-fretboard-table)) + +% Make a new fretboard table as a copy of default-fret-table +#(define custom-fretboard-table-two (make-fretboard-table default-fret-table)) + +% Add a chord to custom-fretboard-table-one +\storePredefinedDiagram #custom-fretboard-table-one + \chordmode{c} + #guitar-tuning + "3-(;3;5;5;5;3-);" + +% Add a chord to custom-fretboard-table-two +\storePredefinedDiagram #custom-fretboard-table-two + \chordmode{c} + #guitar-tuning + "x;3;5;5;5;o;" + +<< + \chords { + c1 | d1 | + c1 | d1 | + c1 | d1 | + } + \new FretBoards { + \chordmode { + \set predefinedDiagramTable = #default-fret-table + c1 | d1 | + \set predefinedDiagramTable = #custom-fretboard-table-one + c1 | d1 | + \set predefinedDiagramTable = #custom-fretboard-table-two + c1 | d1 | + } + } + \new Staff { + \clef "treble_8" + << + \chordmode { + c1 | d1 | + c1 | d1 | + c1 | d1 | + } + { + s1_\markup "Default table" | s1 | + s1_\markup \column {"New table" "from empty"} | s1 | + s1_\markup \column {"New table" "from default"} | s1 | + } + >> + } +>> + diff --git a/Documentation/snippets/new/fretted-headword.ly b/Documentation/snippets/new/fretted-headword.ly new file mode 100644 index 0000000000..bf55f02489 --- /dev/null +++ b/Documentation/snippets/new/fretted-headword.ly @@ -0,0 +1,148 @@ +% INSPIRATIONAL HEADER FOR LILYPOND DOCUMENTATION fretted-strings % +% Passage from Johann Kaspar Mertz "Opern Revue, Op. 8, no. 17" % +% on melodies from Bellini's "Norma" % +%*****************************************************************% + +\version "2.14.0" + +#(set-global-staff-size 15) +\paper { + line-width = 17\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + + +\layout { + \context { + \Score + \remove "Bar_number_engraver" + } +} + +%%%% shortcuts +% fingering orientations +sfol = \set fingeringOrientations = #'(left) +sfor = \set fingeringOrientations = #'(right) +sfod = \set fingeringOrientations = #'(down) +sfou = \set fingeringOrientations = #'(up) + +% string number orientations +ssnol = \set stringNumberOrientations = #'(left) %(down right up) +ssnou = \set stringNumberOrientations = #'(up) +ssnod = \set stringNumberOrientations = #'(down) +ssnor = \set stringNumberOrientations = #'(right) + +% define fingering offset +FO = #(define-music-function (parser location offsetX offsetY) (number? number?) +#{ + \once \override Voice.Fingering #'extra-offset = #(cons $offsetX $offsetY) +#}) + +% markups +rit = \markup \center-align { \bold { \italic { " rit." } } } +dimin = \markup \center-align { \italic { " dim." } } +andantino = \markup \left-align { \italic { \bold { \fontsize #2.5 { "Andantino" } } } } +benmarcato = \markup { \italic { \bold { "il canto ben marcato" } } } +pdolce = #(make-dynamic-script (markup #:line (#:dynamic "p" #:normal-text #:italic "dol."))) + +%%% THE MUSIC %%% + +melody = \relative c { + \clef "treble_8" + \key d \major + \time 4/4 + \voiceOne + \sfol + e,32 a' c e + e, a c e + e,, a' c e + e, a c e + f4\rest 4-> | % m. 1 + + e,,,32 gis' b e + e, gis b e + e,, gis' b e + e, gis b e + f4\rest \FO #'0.4 #'0.5 4 | % m. 2 + + d4\rest -> d4\rest^\rit 4-> | % m. 3 + 1 | % m. 4 + + \bar "||" + \key a \minor + R1 % m. 5 + + e'4^\benmarcato e8. d16-4 + d4-4 \times 2/3 { \sfou \FO #'-0.3 #'0.6 4 b8 } | % end of m. 6 + + \FO #'-0.3 #'0.3 + 4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7 + + \FO #'-0.3 #'0.3 + 4 \times 2/3 { \sfol \FO #'0.3 #'0.0 4 e8 } e4 % beg of m. 8 + \times 2/3 { \sfou 4 c8 } | % end of m. 8 + + b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 4 e | % end of m. 9 + + e4 e8. d16-4 d4 \times 2/3 { c4 b8 } | % m. 10 + + \times 2/3 { a4 a8 b4 c8 } % beg of m. 11 + \sfou \FO #'-0.3 #'0.3 + 4^\< \times 2/3 { e4 8\! } | % end of m. 11 +} + +bass = \relative c { + \key d \major + \time 4/4 + \voiceTwo + + e,8\fp[ e'] e,[ e'] e, \sfol c, | % m. 1 + + e,,8\fp[ e'] e,[ e'] e, \sfod \FO #'0.2 #'-0.2 % beg m. 2 + \sfol \FO #'0.3 #'0.0 b | % end m. 2 + + e,,8 e' gis e e, e' gis_\dimin e | % m. 3 + + e,1 | % m. 4 + + %% new section starts here in A minor + \set Score.beamExceptions = #'() + \once \override TextScript #'staff-padding = #1.7 + \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5 + + \times 2/3 { a,8\pdolce e' a c a e } % beg m. 6 + \times 2/3 { e,8 \sfou c gis e } | % end m. 6 + + \times 2/3 { a,8 a c e, b' a, e' a c a e } | % m. 7 + + \times 2/3 { f,8 f' a \sfol \FO #'0.3 #'-0.5 a f fis, d' a' d a d, } | % m. 8 + + \times 2/3 { 8 d' g d' g, d % beg m. 9 + \sfod \FO #'0.0 #'-2.0 \sfou b gis e } | % end m. 9 + + \times 2/3 { a,8 e' a c a e e, e' gis c gis e } | % m. 10 + + \times 2/3 { a,8 e' a b a e f, f' a d a f } | % m. 11 +} + +\score { + \new Staff = "guitar" << + \context Voice = "upper" { \melody } + \context Voice = "lower" { \bass } + >> + \layout { + \context { + \Score + \override Fingering #'staff-padding = #'() + \override TupletNumber #'stencil = ##f + \override TupletBracket #'bracket-visibility = ##f + } + } + \midi { } +} diff --git a/Documentation/snippets/new/fretted-string-harmonics-in-tablature.ly b/Documentation/snippets/new/fretted-string-harmonics-in-tablature.ly new file mode 100644 index 0000000000..ed942c9b31 --- /dev/null +++ b/Documentation/snippets/new/fretted-string-harmonics-in-tablature.ly @@ -0,0 +1,74 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = " +Fretted-string harmonics: +" + doctitle = "Fretted-string harmonics in tablature" +} + +pinchedHarmonics = { + \textSpannerDown + \override TextSpanner #'bound-details #'left #'text = + \markup {\halign #-0.5 \teeny "PH" } + \override TextSpanner #'style = + #'dashed-line + \override TextSpanner #'dash-period = #0.6 + \override TextSpanner #'bound-details #'right #'attach-dir = #1 + \override TextSpanner #'bound-details #'right #'text = + \markup { \draw-line #'(0 . 1) } + \override TextSpanner #'bound-details #'right #'padding = #-0.5 +} + +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" } + %pinched harmonics (PH) + \pinchedHarmonics + 2\startTextSpan + 4 + 4\stopTextSpan + %tapped harmonics (TH) + <\parenthesize g\4 g'\harmonic>4_\markup{ \teeny "TH 17" } + <\parenthesize a\4 a'\harmonic>4_\markup{ \teeny "TH 19" } + <\parenthesize c'\3 c''\harmonic>2_\markup{ \teeny "TH 17" } + %touch harmonics (TCH) + a4( 2. )_\markup{ \teeny "TCH" } +} + +frettedStrings = { + %artificial harmonics (AH) + \harmonicByFret #4 g4\3 + \harmonicByFret #5 d4\4 + \harmonicByFret #7 g2\3 + %pinched harmonics (PH) + \harmonicByFret #7 d2\4 + \harmonicByFret #5 d4\4 + \harmonicByFret #7 a4\5 + %tapped harmonics (TH) + \harmonicByFret #5 d4\4 + \harmonicByFret #7 d4\4 + \harmonicByFret #5 g2\3 + %touch harmonics (TCH) + a4 \harmonicByFret #9 g2.\3 +} + +\score { + << + \new Staff { + \new Voice { + \clef "treble_8" + \harmonics + } + } + \new TabStaff { + \new TabVoice { + \frettedStrings + } + } + >> +} diff --git a/Documentation/snippets/new/graphical-and-text-woodwind-diagrams.ly b/Documentation/snippets/new/graphical-and-text-woodwind-diagrams.ly new file mode 100644 index 0000000000..6b77f0adea --- /dev/null +++ b/Documentation/snippets/new/graphical-and-text-woodwind-diagrams.ly @@ -0,0 +1,30 @@ +\version "2.14.0" + +\header { + lsrtags="winds" + texidoc=" +In may cases, the keys other than the central column can be +displayed by key name as well as by graphical means. +" + + doctitle = "Graphical and text woodwind diagrams" +} + +\relative c'' { + \textLengthOn + c1^\markup + \woodwind-diagram + #'piccolo + #'((cc . (one three)) + (lh . (gis)) + (rh . (ees))) + + c^\markup + \override #'(graphical . #f) { + \woodwind-diagram + #'piccolo + #'((cc . (one three)) + (lh . (gis)) + (rh . (ees))) + } +} diff --git a/Documentation/snippets/new/grouping-beats.ly b/Documentation/snippets/new/grouping-beats.ly new file mode 100644 index 0000000000..5f9f71fc95 --- /dev/null +++ b/Documentation/snippets/new/grouping-beats.ly @@ -0,0 +1,15 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + texidoc = " +Beaming patterns may be altered with the @code{beatGrouping} property: + +" + doctitle = "Grouping beats" +} + +\markup { + This snippet is deprecated as of version 2.13.5 and will be removed + in version 2.14. +} diff --git a/Documentation/snippets/new/guitar-slides.ly b/Documentation/snippets/new/guitar-slides.ly new file mode 100644 index 0000000000..4657d94b85 --- /dev/null +++ b/Documentation/snippets/new/guitar-slides.ly @@ -0,0 +1,45 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + + texidoc = " +Unlike glissandos, slides may go from an imprecise point of the +fretboard to a specific fret. A good way to do that is to add a grace +hidden note before the note which is actually played, as demonstrated +in the following example. +" + doctitle = "Guitar slides" +} + +%% Hide fret number: useful to draw slide into/from a casual point of +%% the fretboard. +hideFretNumber = { + \once \override TabNoteHead #'transparent = ##t + \once \override NoteHead #'transparent = ##t + \once \override Stem #'transparent = ##t + \once \override NoteHead #'no-ledgers = ##t + \once \override Glissando #'(bound-details left padding) = #0.3 +} + +music= \relative c' { + \grace { \hideFretNumber d8\2 \glissando s2 } g2\2 + \grace { \hideFretNumber g8\2 \glissando s2 } d2 | + + \grace { \hideFretNumber c,8 \glissando s } f4\5^\markup \tiny { Slide into } + \grace { \hideFretNumber f8 \glissando s } a4\4 + \grace { \hideFretNumber e'8\3 \glissando s } b4\3^\markup \tiny { Slide from } + \grace { \hideFretNumber b'8 \glissando s2 } g4 | +} + +\score { + << + \new Staff { + \clef "G_8" + \music + } + \new TabStaff { + \music + } + >> +} diff --git a/Documentation/snippets/new/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly b/Documentation/snippets/new/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly new file mode 100644 index 0000000000..8499cdf470 --- /dev/null +++ b/Documentation/snippets/new/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly @@ -0,0 +1,15 @@ +\version "2.14.0" +\header { + lsrtags = "pitches" + texidoc = "This shows how to hide accidentals on tied notes at the beginning of a +new system." + doctitle = "Hiding accidentals on tied notes at the beginning of a new system" +} + +\relative c'' { + \override Accidental #'hide-tied-accidental-after-break = ##t + cis1~ cis~ + \break + cis +} + diff --git a/Documentation/snippets/new/incipit.ly b/Documentation/snippets/new/incipit.ly new file mode 100644 index 0000000000..cc217ccba9 --- /dev/null +++ b/Documentation/snippets/new/incipit.ly @@ -0,0 +1,276 @@ +\version "2.14.0" + +\header { + lsrtags = "staff-notation, ancient-notation" + texidoc = " +Incipits can be added using the instrument name grob, but keeping +separate the instrument name definition and the incipit definition. +" + doctitle = "Incipit" +} + +incipit = +#(define-music-function (parser location incipit-music) (ly:music?) + #{ + \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT + \once \override Staff.InstrumentName #'self-alignment-Y = #UP + \once \override Staff.InstrumentName #'Y-offset = + #(lambda (grob) + (+ 4 (system-start-text::calc-y-offset grob))) + \once \override Staff.InstrumentName #'padding = #0.3 + \once \override Staff.InstrumentName #'stencil = + #(lambda (grob) + (let* ((instrument-name (ly:grob-property grob 'long-text)) + (layout (ly:output-def-clone (ly:grob-layout grob))) + (music (make-sequential-music + (list (context-spec-music + (make-sequential-music + (list (make-property-set + 'instrumentName instrument-name) + (make-grob-property-set + 'VerticalAxisGroup + 'Y-extent '(-4 . 4)))) + 'MensuralStaff) + $incipit-music))) + (score (ly:make-score music)) + (mm (ly:output-def-lookup layout 'mm)) + (indent (ly:output-def-lookup layout 'indent)) + (width (ly:output-def-lookup layout 'incipit-width)) + (incipit-width (if (number? width) + (* width mm) + (* indent 0.5)))) + + (ly:output-def-set-variable! layout 'indent (- indent + incipit-width)) + (ly:output-def-set-variable! layout 'line-width indent) + (ly:output-def-set-variable! layout 'ragged-right #f) + (ly:output-def-set-variable! layout 'ragged-last #f) + (ly:output-def-set-variable! layout 'system-count 1) + (ly:score-add-output-def! score layout) + (ly:grob-set-property! grob 'long-text + (markup #:score score)) + (system-start-text::print grob))) + #}) + +%%%%%%%%%%%%%%%%%%%%%%%%% + +global = { + \set Score.skipBars = ##t + \key g \major + \time 4/4 + + % the actual music + \skip 1*8 + + % let finis bar go through all staves + \override Staff.BarLine #'transparent = ##f + + % finis bar + \bar "|." +} + +discantusIncipit = << + \new MensuralVoice = "discantusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c1" + \key f \major + \time 2/2 + c''1. + } + >> + \new Lyrics \lyricsto discantusIncipit { IV- } +>> + +discantusNotes = { + \transpose c' c'' { + \clef "treble" + d'2. d'4 | + b e' d'2 | + c'4 e'4.( d'8 c' b | + a4) b a2 | + b4.( c'8 d'4) c'4 | + \once \override NoteHead #'transparent = ##t + c'1 | + b\breve | + } +} + +discantusLyrics = \lyricmode { + Ju -- bi -- | + la -- te De -- | + o, om -- + nis ter -- | + ra, __ om- | + "..." | + -us. | +} + +altusIncipit = << + \new MensuralVoice = "altusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c3" + \key f \major + \time 2/2 + r1 f'1. + } + >> + \new Lyrics \lyricsto altusIncipit { IV- } +>> + +altusNotes = { + \transpose c' c'' { + \clef "treble" + % two measures + r2 g2. e4 fis g | + a2 g4 e | + fis g4.( fis16 e fis4) | + g1 | + \once \override NoteHead #'transparent = ##t + g1 | + g\breve | + } +} + +altusLyrics = \lyricmode { + % two measures + Ju -- bi -- la -- te | + De -- o, om -- | + nis ter -- ra, | + "..." | + -us. | +} + +tenorIncipit = << + \new MensuralVoice = "tenorIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "neomensural-c4" + \key f \major + \time 2/2 + r\longa + r\breve + r1 c'1. + } + >> + \new Lyrics \lyricsto tenorIncipit { IV- } +>> + +tenorNotes = { + \transpose c' c' { + \clef "treble_8" + R1 | + R1 | + R1 | + % two measures + r2 d'2. d'4 b e' | + \once \override NoteHead #'transparent = ##t + e'1 | + d'\breve | + } +} + +tenorLyrics = \lyricmode { + % two measures + Ju -- bi -- la -- te | + "..." | + -us. +} + +bassusIncipit = << + \new MensuralVoice = "bassusIncipit" << + \repeat unfold 9 { s1 \noBreak } + { + \clef "bass" + \key f \major + \time 2/2 + %% incipit + r\maxima + f1. + } + >> + \new Lyrics \lyricsto bassusIncipit { IV- } +>> + +bassusNotes = { + \transpose c' c' { + \clef "bass" + R1 | + R1 | + R1 | + R1 | + g2. e4 | + \once \override NoteHead #'transparent = ##t + e1 | + g\breve | + } +} + +bassusLyrics = \lyricmode { + Ju -- bi- | + "..." | + -us. +} + +\score { + << + \new StaffGroup = choirStaff << + \new Voice = "discantusNotes" << + \global + \set Staff.instrumentName = #"Discantus" + \incipit \discantusIncipit + \discantusNotes + >> + \new Lyrics = "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } + \new Voice = "altusNotes" << + \global + \set Staff.instrumentName = #"Altus" + \incipit \altusIncipit + \altusNotes + >> + \new Lyrics = "altusLyrics" \lyricsto altusNotes { \altusLyrics } + \new Voice = "tenorNotes" << + \global + \set Staff.instrumentName = #"Tenor" + \incipit \tenorIncipit + \tenorNotes + >> + \new Lyrics = "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } + \new Voice = "bassusNotes" << + \global + \set Staff.instrumentName = #"Bassus" + \incipit \bassusIncipit + \bassusNotes + >> + \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } + >> + >> + \layout { + \context { + \Score + %% no bar lines in staves or lyrics + \override BarLine #'transparent = ##t + } + %% the next two instructions keep the lyrics between the bar lines + \context { + \Lyrics + \consists "Bar_engraver" + \consists "Separating_line_group_engraver" + } + \context { + \Voice + %% no slurs + \override Slur #'transparent = ##t + %% Comment in the below "\remove" command to allow line + %% breaking also at those bar lines where a note overlaps + %% into the next measure. The command is commented out in this + %% short example score, but especially for large scores, you + %% will typically yield better line breaking and thus improve + %% overall spacing if you comment in the following command. + %%\remove "Forbid_line_break_engraver" + } + indent = 6\cm + incipit-width = 4\cm + } +} diff --git a/Documentation/snippets/new/keyboard-headword.ly b/Documentation/snippets/new/keyboard-headword.ly new file mode 100644 index 0000000000..95be4b7709 --- /dev/null +++ b/Documentation/snippets/new/keyboard-headword.ly @@ -0,0 +1,248 @@ +\version "2.14.0" +\include "english.ly" + +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 2.2 Keyboard instruments + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +% M. Ravel, Sonatine (1905) +% First movement + +\layout { + \context { + \Score + \remove "Bar_number_engraver" + } +} + +fermataLong = \markup { + \override #'(direction . 1) + \override #'(baseline-skip . 2) { + \dir-column { + \musicglyph #"scripts.ufermata" + \text \italic \center-align long + } + } +} + +\new PianoStaff << + \set PianoStaff.connectArpeggios = ##t + \new Staff { + \time 2/4 + \key fs \major + << + \new Voice { + \voiceOne + fs''8 ( ^\markup { + \override #'(baseline-skip . 2.4) \column { + \line \bold { Un peu retenu } + \line \italic { très expressif } + } + } + es''16 + cs''16 + as'4 ) + | + fs''8 ( + es''16 + cs''16 + as'4 ) + | + fs''8 ( + es''16 + cs''16 + as'8 + cs''8 ) + | + } + \new Voice { + \voiceTwo + gs'8\rest \ppp + fs'4 ( + es'8 ) + | + gs'8\rest + fs'4 ( + es'8 ) + | + gs'8\rest + fs'4 ( + es'8 ) + | + } + >> + \clef bass + 4 ( ^ \markup \bold { Rall. } + \override Script #'stencil = #(lambda (grob) + (grob-interpret-markup grob fermataLong)) + 8 ) \fermata + \noBeam + \clef treble + \slurUp + \once \override Hairpin #'to-barline = ##f + 8 ( \pp \> + | + 4. \! ) ^\markup \bold { a Tempo } + \slurUp + 8 ^\( \> + | + 4. \! \) + << + \new Voice { + \voiceOne + 8 ( + | + cs'8 ^\markup \bold { Rallentando } + b16 + cs'16 + d'8 + e'16 + fs'16 + | + 4. ) + s8 + | + r8 + 4 \arpeggio + e''16 ( ^\markup \bold { Lent } + fs''16 + | + \voiceTwo + 2 ) + | + } + \new Voice { + \voiceTwo + s8 + | + 4 \< + 4 \> + | + s4. \! + \slurUp + \once \override Script #'direction = #UP + 8 ( \accent + | + 4. ) + \once \override Hairpin #'to-barline = ##f + 8 \ppp \> + | + s8 \! + \stemDown + \once \override Script #'direction = #UP + \ottava #1 + \voiceOne + \once \override PianoStaff.Arpeggio #'padding = #0.8 + 4. \arpeggio \fermata + \ottava #0 + \bar "|." + } + >> + } + \new Staff << + \set Staff.pedalSustainStyle = #'bracket + \key fs \major + \clef bass + \new Voice { + \voiceOne + ds'4 \tenuto + cs'4 \tenuto + | + ds'4 \tenuto + cs'4 \tenuto + | + ds'4 \tenuto + cs'4 \tenuto + | + s8 + \clef treble + 8 [ + \clef bass + 8 \fermata ] + s8 + | + fs8\rest + \clef treble + 4 \tenuto + s8 + | + fs8\rest + \clef treble + 4 \tenuto + s8 + | + s2 + | + ds8\rest + \clef treble + 4 + \clef bass + s8 + | + s8 + \clef treble + 4 \arpeggio + \clef bass + s8 + | + s8 + \clef treble + 4. \arpeggio \fermata + | + } + \new Voice { + \voiceTwo + ds'8 [ ( + < ds bs >8 + cs'8 + < ds as >8 ] ) + | + ds'8 [ ( + < ds bs >8 + cs'8 + < ds as >8 ] ) + | + ds'8 [ ( + < ds bs >8 + cs'8 + < ds as >8 ] ) + | + \once \override Script #'outside-staff-priority = #100 + \once \override TextScript #'outside-staff-priority = #500 + 4. \fermata _\markup \italic { ped. } + 8 ( + | + 4. ) \sustainOn + \clef bass + 8 \( \sustainOff + | + 4. \) \sustainOn + \clef bass + 8 ( \sustainOff + | + 4 + 4 + | + 4. ) \sustainOn + 8 ( \sustainOff + | + 4. ) \sustainOn + \slurUp + 8 ( \sustainOff \sustainOn + | + 2 ) \sustainOff \sustainOn + | + } + >> +>> diff --git a/Documentation/snippets/new/letter-tablature-formatting.ly b/Documentation/snippets/new/letter-tablature-formatting.ly new file mode 100644 index 0000000000..f97d656cb2 --- /dev/null +++ b/Documentation/snippets/new/letter-tablature-formatting.ly @@ -0,0 +1,30 @@ +\version "2.14.0" + +\header { + lsrtags = "staff-notation, fretted-strings" + + texidoc = " +Tablature can be formatted using letters instead of numbers. + +" + doctitle = "Letter tablature formatting" +} + +music = \relative c { + c4 d e f + g4 a b c + d4 e f g +} + +<< + \new Staff { + \clef "G_8" + \music + } + \new TabStaff \with { + tablatureFormat = #fret-letter-tablature-format + } + { + \music + } +>> diff --git a/Documentation/snippets/new/lyrics-old-spacing-settings.ly b/Documentation/snippets/new/lyrics-old-spacing-settings.ly new file mode 100644 index 0000000000..5e51f6d0df --- /dev/null +++ b/Documentation/snippets/new/lyrics-old-spacing-settings.ly @@ -0,0 +1,96 @@ +\version "2.14.0" + +\header { + lsrtags = "vocal-music" + + doctitle = "Obtaining 2.12 lyrics spacing in newer versions" + + texidoc = " +The vertical spacing engine changed for version 2.14. This can +cause lyrics to be spaced differently. It is possible to set +properties for @code{Lyric} and @code{Staff} contexts to get the +spacing engine to behave as it did in version 2.12. +" +} + +global = { + \key d \major + \time 3/4 +} + +sopMusic = \relative c' { + % VERSE ONE + fis4 fis fis | \break + fis4. e8 e4 +} + +altoMusic = \relative c' { + % VERSE ONE + d4 d d | + d4. b8 b4 | +} + +tenorMusic = \relative c' { + a4 a a | + b4. g8 g4 | +} + +bassMusic = \relative c { + d4 d d | + g,4. g8 g4 | +} + +words = \lyricmode { + Great is Thy faith- ful- ness, +} + +\score { + \new ChoirStaff << + \new Lyrics = sopranos + \new Staff = women << + \new Voice = "sopranos" { + \voiceOne + \global \sopMusic + } + \new Voice = "altos" { + \voiceTwo + \global \altoMusic + } + >> + \new Lyrics = "altos" + \new Lyrics = "tenors" + \new Staff = men << + \clef bass + \new Voice = "tenors" { + \voiceOne + \global \tenorMusic + } + \new Voice = "basses" { + \voiceTwo \global \bassMusic + } + >> + \new Lyrics = basses + \context Lyrics = sopranos \lyricsto sopranos \words + \context Lyrics = altos \lyricsto altos \words + \context Lyrics = tenors \lyricsto tenors \words + \context Lyrics = basses \lyricsto basses \words + >> + \layout { + \context { + \Lyrics + \override VerticalAxisGroup #'staff-affinity = ##f + \override VerticalAxisGroup #'staff-staff-spacing = + #'((basic-distance . 0) + (minimum-distance . 2) + (padding . 2)) + } + \context { + \Staff + \override VerticalAxisGroup #'staff-staff-spacing = + #'((basic-distance . 0) + (minimum-distance . 2) + (padding . 2)) + } + } +} + diff --git a/Documentation/snippets/new/makam-example.ly b/Documentation/snippets/new/makam-example.ly new file mode 100644 index 0000000000..9191ffeb73 --- /dev/null +++ b/Documentation/snippets/new/makam-example.ly @@ -0,0 +1,22 @@ +\version "2.14.0" + +\header { + lsrtags = "pitches, world-music" + texidoc = " +Makam is a type of melody from Turkey using 1/9th-tone microtonal +alterations. Consult the initialization file @samp{ly/makam.ly} for +details of pitch names and alterations. + +" + doctitle = "Makam example" +} + +% Initialize makam settings +\include "makam.ly" + +\relative c' { + \set Staff.keySignature = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) + c4 cc db fk + gbm4 gfc gfb efk + fk4 db cc c +} diff --git a/Documentation/snippets/new/making-slurs-with-complex-dash-structure.ly b/Documentation/snippets/new/making-slurs-with-complex-dash-structure.ly new file mode 100644 index 0000000000..28f15c8738 --- /dev/null +++ b/Documentation/snippets/new/making-slurs-with-complex-dash-structure.ly @@ -0,0 +1,36 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms, expressive-marks" + texidoc = " +Slurs can be made with complex dash patterns by defining +the @code{dash-definition} property. @code{dash-definition} +is a list of @code{dash-elements}. A @code{dash-element} is a +list of parameters defining the dash behavior for a segment of +the slur. + +The slur is defined in terms of the bezier parameter t +which ranges from 0 +at the left end of the slur to 1 at the right end of the slur. +@code{dash-element} is a list @code{(start-t stop-t dash-fraction +dash-period)}. The region of the slur from @code{start-t} to +@code{stop-t} will have a fraction @code{dash-fraction} +of each @code{dash-period} black. @code{dash-period} is +defined in terms of staff spaces. @code{dash-fraction} is +set to 1 for a solid slur. +" + doctitle = "Making slurs with complex dash structure" +} + +\relative c' { + \once \override + Slur #'dash-definition = #'((0 0.3 0.1 0.75) + (0.3 0.6 1 1) + (0.65 1.0 0.4 0.75)) + c4( d e f) + \once \override + Slur #'dash-definition = #'((0 0.25 1 1) + (0.3 0.7 0.4 0.75) + (0.75 1.0 1 1)) + c4( d e f) +} diff --git a/Documentation/snippets/new/modern-tab-text-clef.ly b/Documentation/snippets/new/modern-tab-text-clef.ly new file mode 100644 index 0000000000..2af2335ca0 --- /dev/null +++ b/Documentation/snippets/new/modern-tab-text-clef.ly @@ -0,0 +1,16 @@ +\version "2.14.0" + +\header { + lsrtags = "staff-notation, fretted-strings" + + texidoc = " +Use a markup text to replace the (TAB) clef glyph with a modern font. + +" + doctitle = "Modern TAB text clef" +} + +\markup { + This snippet is deprecated as of version 2.13.4 and will be removed + in version 2.14. +} diff --git a/Documentation/snippets/new/non-default-tuplet-numbers.ly b/Documentation/snippets/new/non-default-tuplet-numbers.ly new file mode 100644 index 0000000000..1ea456dab0 --- /dev/null +++ b/Documentation/snippets/new/non-default-tuplet-numbers.ly @@ -0,0 +1,41 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + + texidoc = " +LilyPond also provides formatting functions to print tuplet numbers different +than the actual fraction, as well as to append a note value to the tuplet +number or tuplet fraction. +" + doctitle = "Non-default tuplet numbers" +} + +\relative c'' { + \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. } +} diff --git a/Documentation/snippets/new/non-traditional-key-signatures.ly b/Documentation/snippets/new/non-traditional-key-signatures.ly new file mode 100644 index 0000000000..8a3c145a98 --- /dev/null +++ b/Documentation/snippets/new/non-traditional-key-signatures.ly @@ -0,0 +1,36 @@ +\version "2.14.0" + +\header { + lsrtags = "pitches, staff-notation" + texidoc = " +The commonly used @code{\\key} command sets the @code{keySignature} +property, in the @code{Staff} context. + +To create non-standard key signatures, set this property directly. The +format of this command is a list: + +@code{\\set Staff.keySignature = #`(((octave . step) . alter) ((octave +. step) . alter) ...)} where, for each element in the list, +@code{octave} specifies the octave (0@tie{}being the octave from +middle@tie{}C to the B above), @code{step} specifies the note within the +octave (0@tie{}means@tie{}C and 6@tie{}means@tie{}B), and @code{alter} is +@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (Note the leading comma.) + +Alternatively, for each item in the list, using the more concise format +@code{(step . alter)} specifies that the same alteration should hold in all +octaves. + +Here is an example of a possible key signature for generating a whole-tone +scale: +" + doctitle = "Non-traditional key signatures" +} + +\relative c' { + \set Staff.keySignature = #`(((0 . 6) . ,FLAT) + ((0 . 5) . ,FLAT) + ((0 . 3) . ,SHARP)) + c4 d e fis + aes4 bes c2 +} + diff --git a/Documentation/snippets/new/numbers-as-easy-note-heads.ly b/Documentation/snippets/new/numbers-as-easy-note-heads.ly new file mode 100644 index 0000000000..03e0578af2 --- /dev/null +++ b/Documentation/snippets/new/numbers-as-easy-note-heads.ly @@ -0,0 +1,56 @@ +\version "2.14.0" + +\header { + lsrtags = "pitches" + texidoc = " +Easy notation note heads use the @code{note-names} property +of the @code{NoteHead} object to determine what appears inside +the note head. By overriding this property, it is possible +to print numbers representing the scale-degree. + +A simple engraver can be created to do this for every note head +object it sees. +" + doctitle = "Numbers as easy note heads" +} + +#(define Ez_numbers_engraver + (list + (cons 'acknowledgers + (list + (cons 'note-head-interface + (lambda (engraver grob source-engraver) + (let* ((context (ly:translator-context engraver)) + (tonic-pitch (ly:context-property context 'tonic)) + (tonic-name (ly:pitch-notename tonic-pitch)) + (grob-pitch + (ly:event-property (event-cause grob) 'pitch)) + (grob-name (ly:pitch-notename grob-pitch)) + (delta (modulo (- grob-name tonic-name) 7)) + (note-names + (make-vector 7 (number->string (1+ delta))))) + (ly:grob-set-property! grob 'note-names note-names)))))))) + +#(set-global-staff-size 26) + +\layout { + ragged-right = ##t + \context { + \Voice + \consists \Ez_numbers_engraver + } +} + +\relative c' { + \easyHeadsOn + c4 d e f + g4 a b c \break + + \key a \major + a,4 b cis d + e4 fis gis a \break + + \key d \dorian + d,4 e f g + a4 b c d +} diff --git a/Documentation/snippets/new/open-string-harmonics-in-tablature.ly b/Documentation/snippets/new/open-string-harmonics-in-tablature.ly new file mode 100644 index 0000000000..46a833c8ae --- /dev/null +++ b/Documentation/snippets/new/open-string-harmonics-in-tablature.ly @@ -0,0 +1,64 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = " +Reference for open-string harmonics: +" + doctitle = "Reference for open-string harmonics" +} + +openStringHarmonics = { + %first harmonic + \harmonicByFret #12 e,2\6_\markup{"1st harm."} + \harmonicByRatio #1/2 e,\6 + %second harmonic + \harmonicByFret #7 e,\6_\markup{"2nd harm. - - - -"} + \harmonicByRatio #1/3 e,\6 + \harmonicByFret #19 e,\6 + \harmonicByRatio #2/3 e,\6 + %\harmonicByFret #19 < e,\6 a,\5 d\4 > + %\harmonicByRatio #2/3 < e,\6 a,\5 d\4 > + %third harmonic + \harmonicByFret #5 e,\6_\markup{"3rd harm. - - - -"} + \harmonicByRatio #1/4 e,\6 + \harmonicByFret #24 e,\6 + \harmonicByRatio #3/4 e,\6 + \break + %fourth harmonic + \harmonicByFret #4 e,\6_\markup{"4th harm. - - - - - - - - - - - - -"} + \harmonicByRatio #1/5 e,\6 + \harmonicByFret #9 e,\6 + \harmonicByRatio #2/5 e,\6 + \harmonicByFret #16 e,\6 + \harmonicByRatio #3/5 e,\6 + %fifth harmonic + \harmonicByFret #3 e,\6_\markup{"5th harm."} + \harmonicByRatio #1/6 e,\6 + \break + %sixth harmonic + \harmonicByFret #2.7 e,\6_\markup{"6th harm."} + \harmonicByRatio #1/7 e,\6 + %seventh harmonic + \harmonicByFret #2.3 e,\6_\markup{"7th harm."} + \harmonicByRatio #1/8 e,\6 + %eighth harmonic + \harmonicByFret #2 e,\6_\markup{"8th harm."} + \harmonicByRatio #1/9 e,\6 +} + +\score { + << + \new Staff { + \new Voice { + \clef "treble_8" + \openStringHarmonics + } + } + \new TabStaff { + \new TabVoice { + \openStringHarmonics + } + } + >> +} diff --git a/Documentation/snippets/new/piano-template-with-centered-dynamics.ly b/Documentation/snippets/new/piano-template-with-centered-dynamics.ly new file mode 100644 index 0000000000..70403a76fc --- /dev/null +++ b/Documentation/snippets/new/piano-template-with-centered-dynamics.ly @@ -0,0 +1,53 @@ +\version "2.14.0" + +\header { + lsrtags = "expressive-marks, keyboards, template" + texidoc = " +Many piano scores have the dynamics centered between the two staves. +The @code{Dynamics} context, if placed between staves, will +automatically position dynamics correctly. + +" + doctitle = "Piano template with centered dynamics" +} + +global = { + \key c \major + \time 4/4 +} + +upper = \relative c'' { + \clef treble + a4 b c d +} + +lower = \relative c { + \clef bass + a2 c +} + +dynamics = { + s2\fff\> s4 s\!\pp +} + +pedal = { + s2\sustainOn s\sustainOff +} + +\score { + \new PianoStaff = "PianoStaff_pf" << + \new Staff = "Staff_pfUpper" << \global \upper >> + \new Dynamics = "Dynamics_pf" \dynamics + \new Staff = "Staff_pfLower" << \global \lower >> + \new Dynamics = "pedal" \pedal + >> + \layout { } +} + +\score { + \new PianoStaff = "PianoStaff_pf" << + \new Staff = "Staff_pfUpper" << \global \upper \dynamics \pedal >> + \new Staff = "Staff_pfLower" << \global \lower \dynamics \pedal >> + >> + \midi { } +} diff --git a/Documentation/snippets/new/pitches-headword.ly b/Documentation/snippets/new/pitches-headword.ly new file mode 100644 index 0000000000..9bd3dd0171 --- /dev/null +++ b/Documentation/snippets/new/pitches-headword.ly @@ -0,0 +1,143 @@ +\version "2.14.0" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + +% NR 1.1 Pitches + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + + +% L. v. Beethoven +% Piano sonata 21 - Dem Grafen von Waldstein Gewidmet +% chorale at measures 34 - 40+ + +\new PianoStaff << + + % RH Staff + \new Staff << + + % RH Voice 1 + \new Voice { + \set Score.currentBarNumber = #34 + \voiceOne + gs''2 ( ^ \markup \italic { dolce e molto ligato } + fs''4 + e''4 + | + ds''2 + cs''2 ) + | + ds''2 ( + e''4 + fs''4 + | + 2 + 2 ) + | + \oneVoice + \clef bass + 2 ( + 4 + 4 + | + 2 + 2 ) + | + \voiceOne + b2 %( + cs'4 + ds'4 + | + \clef treble + 4 %) + r4 r2 + } + + % RH Voice 2 + \new Voice { + \voiceTwo + \override Staff.DynamicLineSpanner #'staff-padding = #2.5 + 2 \p + 4 + 4 + | + 2 + e'2 + | + \once \override TextScript #'staff-padding = #2.5 + 2 _ \markup \italic { cresc. } + b'4 + 4 + | + b'2. ( \sf \> + a'4 ) + \clef bass + | \break + s1 \p + | + s1 + | + 4 ( + 2. ) + | + s4 + r4 r2 + } + + >> + + % LH Staff + \new Staff { + \override Staff.SustainPedalLineSpanner #'staff-padding = #5 + 2 ( \sustainOn + 4 \sustainOff + 4 + | + 2 + 2 ) \sustainOn + | + \clef bass + \slurDown + 2 ( \sustainOff + 4 + 4 \sustainOn + | + \clef treble + \voiceOne + << + { + 2 + 2 ) + } + \new Voice { + \voiceTwo + b1 \sustainOff + } + >> + \oneVoice + | + %\break + \clef bass + 2 ( + 4 + 4 + | + 2 + 2 ) \sustainOn + | + 1 ( \sustainOff + | + 4 ) + r4 r2 + } + +>> diff --git a/Documentation/snippets/new/repeats-headword.ly b/Documentation/snippets/new/repeats-headword.ly new file mode 100644 index 0000000000..0f80e73c43 --- /dev/null +++ b/Documentation/snippets/new/repeats-headword.ly @@ -0,0 +1,131 @@ +\version "2.14.0" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 1.7 Repeats + +% Beethoven, Op. 57 +% Piano sonata 23 - Dem Grafen Franz von Brunswick Gewidmet +% Movt II, Andante con moto +% Measures 9 - 16 + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + + +\new PianoStaff << + + \new Staff = RH { + \clef bass + \key df \major + \time 2/4 + \set Score.currentBarNumber = #9 + \bar "|:" + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + 8 ) + | + 4 ( + 8.. + 32 + | + 8. ) + \slurDown + 16 ( + << + { + \voiceTwo + gf8 + f8 ) + } + \new Voice { + \voiceOne + 16 + ef'16 + 8 + } + >> + \oneVoice + | + 4 ( + 8.. + 32 + \clef treble + | + 8. ) + 16 ( + 16 + gf'16 + 8 ) + | + \slurUp + 4 + \change Staff = LH + \voiceOne + 4 + | + 4. + \change Staff = RH + \oneVoice + r8 + \clef bass + \bar ":|" + } + + \new Staff = LH { + \clef bass + \key df \major + \time 2/4 + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + 8 ) + | + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + ) + | + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + 8 ) + | + \voiceTwo + gf,4 ( + af,4 ~ ) + | + af,16. [ ( + gf,32 + f,16. + ef,32 ] + df,8 ) + \oneVoice + r8 + } + +>> diff --git a/Documentation/snippets/new/reverting-default-beam-endings.ly b/Documentation/snippets/new/reverting-default-beam-endings.ly new file mode 100644 index 0000000000..d771c60161 --- /dev/null +++ b/Documentation/snippets/new/reverting-default-beam-endings.ly @@ -0,0 +1,21 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + texidoc = " +To typeset beams grouped @code{3-4-3-2} one need only change the +beat structure: +" + doctitle = "Reverting default beam endings" +} + +\relative c'' { + \time 12/8 + + % Default beaming + a8 a a a a a a a a a a a + + % Set new values for beam endings + \set Score.beatStructure = #'(3 4 3 2) + a8 a a a a a a a a a a a +} diff --git a/Documentation/snippets/new/rhythms-headword.ly b/Documentation/snippets/new/rhythms-headword.ly new file mode 100644 index 0000000000..74a410df06 --- /dev/null +++ b/Documentation/snippets/new/rhythms-headword.ly @@ -0,0 +1,216 @@ +\version "2.14.0" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 1.2 Rhythms + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + + +% Beethoven, Op. 81a +% Piano sonata 26 - Das Lebewohl +% Movt II - Abwesenheit +% Measures 31 - 34 + +\layout { + \context { + \Score + \override SpacingSpanner #'base-shortest-duration = + #(ly:make-moment 1 40) + %\override SpacingSpanner #'strict-grace-spacing = ##t + } +} + +\new PianoStaff << + + % RH Staff + \new Staff { + \clef treble + \key c \minor + \time 2/4 + \set Score.currentBarNumber = #31 + + 8 ( -\markup { + \override #'(baseline-skip . 2) \italic \column { + \line { a tempo } + cantabile + } + } + 8 ) + ~ + 8 ( + 16 + 16 ) + + | + + \afterGrace + 8 [ ( + { + e''16 [ + f''16 + e''16 + d''16 ] + } + 16 + 16 ] ) + \once \override TextScript #'padding = #3.8 + 16 ( \staccato -\markup { \italic cresc. } + 16 ) \staccato + 32 ( + 32 ) + 32 ( + 32 ) + + | + + \once \override DynamicLineSpanner #'padding = #2 + b''32 ( \p \> + c'''32 + d'''32 + c'''32 ) \! + g''8 ( + ~ + g''32 [ + a''64 + g''64 ) ] + + a''64 ( [ + g''64 ) + bf''64 ( + a''64 ) ] + + bf''64 ( [ + a''64 ) + c'''64 ( + b''64 ) ] + + c'''128 ( [ + b''128 + d'''128 + c'''128 + f'''64 + f''64 ) ] + + | + + \afterGrace + 8 [ ( + { + e''16 [ + f''16 + e''16 + d''16 ] + } + 16 + 16 ] ) + 16 ( \staccato -\markup { \italic cresc. } + 16 ) \staccato + 32 ( + 32 ) + 32 ( + 32 ) + } + + % LH Staff + \new Staff { + \clef bass + \key c \minor + \time 2/4 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + | + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + | + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + | + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + } + +>> diff --git a/Documentation/snippets/new/screech-boink.ly b/Documentation/snippets/new/screech-boink.ly new file mode 100644 index 0000000000..35efa386b2 --- /dev/null +++ b/Documentation/snippets/new/screech-boink.ly @@ -0,0 +1,73 @@ +\version "2.14.0" +\header { + lsrtags = "headwords" + texidoc = "Random complex notation" + doctitle = "Screech and Boink" +} + +\score { + \context PianoStaff << + \new Staff = "up" { + \time 4/8 + \key c \minor + << + { + \revert Stem #'direction + \change Staff = down + \set subdivideBeams = ##t + g16.[ + \change Staff = up + c'''32 + \change Staff = down + g32 + \change Staff = up + c'''32 + \change Staff = down + g16] + \change Staff = up + \stemUp + \set followVoice = ##t + c'''32([ b''16 a''16 gis''16 g''32)] + } + \\ + { s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] } + \\ + { s4 \autoBeamOff d''8.. f''32 } + \\ + { s4 es''4 } + >> + } + \new Staff = "down" { + \clef bass + \key c \minor + \set subdivideBeams = ##f + \override Stem #'french-beaming = ##t + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #4.0 + g'16[ b16 fis16 g16] + << + \makeClusters { + as16 + } + \\ + { + \override Staff.Arpeggio #'arpeggio-direction = #DOWN + 4\arpeggio + } + >> + } + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 60 8) + } + } + \layout { + ragged-right = ##t + \context { + \Staff + \consists "Horizontal_bracket_engraver" + } + } +} diff --git a/Documentation/snippets/new/setting-the-double-repeat-default-for-volte.ly b/Documentation/snippets/new/setting-the-double-repeat-default-for-volte.ly new file mode 100644 index 0000000000..8a751513ae --- /dev/null +++ b/Documentation/snippets/new/setting-the-double-repeat-default-for-volte.ly @@ -0,0 +1,19 @@ +\version "2.14.0" +\header { + lsrtags = "repeats" + texidoc = "There are three different styles of double repeats for +volte, that can be set using @code{doubleRepeatType}." + + doctitle = "Setting the double repeat default for volte" +} + + +\relative c'' { + \repeat volta 1 { c1 } + \set Score.doubleRepeatType = #":|:" + \repeat volta 1 { c1 } + \set Score.doubleRepeatType = #":|.|:" + \repeat volta 1 { c1 } + \set Score.doubleRepeatType = #":|.:" + \repeat volta 1 { c1 } +} diff --git a/Documentation/snippets/new/showing-the-same-articulation-above-and-below-a-note-or-chord.ly b/Documentation/snippets/new/showing-the-same-articulation-above-and-below-a-note-or-chord.ly new file mode 100644 index 0000000000..b1ae4e3864 --- /dev/null +++ b/Documentation/snippets/new/showing-the-same-articulation-above-and-below-a-note-or-chord.ly @@ -0,0 +1,36 @@ +\version "2.14.0" + +\header { + lsrtags = "expressive-marks, tweaks-and-overrides" + + texidoc = " +By default, LilyPond does not allow the same articulation (e.g., an +accent, a fermata, a flageolet, etc.) to be displayed above and below a +note. For example, @code{c4_\\fermata^\\fermata} will only show a fermata +below, ignoring the fermata above. However, one can stick +scripts (just like fingerings) inside a chord, which means it is +possible to have as many articulations as desired. So, the solution is to +write the note as a chord and add the articulations inside the @code{<@dots{}>}. +" + doctitle = "Showing the same articulation above and below a note or chord" +} + +% The same as \flageolet, just a little smaller +smallFlageolet = +#(let ((m (make-articulation "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -2 + (ly:music-property m 'tweaks))) + m) + +\relative c' { + s4^"Wrong:" + c4_\fermata^\fermata % The second fermata is ignored! + 4^\smallFlageolet_\smallFlageolet + + s4^"Works if written inside a chord:" + 4 + 4 + 4 + 4 +} diff --git a/Documentation/snippets/new/simultaneous-headword.ly b/Documentation/snippets/new/simultaneous-headword.ly new file mode 100644 index 0000000000..e42121447e --- /dev/null +++ b/Documentation/snippets/new/simultaneous-headword.ly @@ -0,0 +1,314 @@ +\version "2.14.0" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +% NR 1.5 Simultaneous notes + +% L. v. Beethoven, Op. 111 +% Piano sonata 32 +% Movt II - Arietta - Adagio molto semplice e cantabile +% measures 108 - 118 + +\layout { + \context { + \Score + \override SpacingSpanner #'base-shortest-duration = + #(ly:make-moment 1 18) + \override NonMusicalPaperColumn #'line-break-system-details = + #'((alignment-distances . (12))) + } +} + +trillFlat = +\once \override TrillSpanner #'(bound-details left text) = \markup { + \concat { + \musicglyph #"scripts.trill" + \translate #'(-0.5 . 1.9) + \fontsize #-7 + \with-dimensions #'(0 . 0) #'(0 . 0) + \flat + } +} + +\new PianoStaff << + + % RH + \new Staff << + \clef treble + \key c \major + \time 9/16 + \set Score.currentBarNumber = #108 + + % RH voice 1 + \new Voice { + + \voiceOne + s4. + s8. + + | + + s4. + a''8 \p \> [ ( + g''16 ] ) + + | + + g''4. + af''8 [ ( + g''16 ] ) + + | + + g''8. [ + g''8. + g''8. \pp ] + + | + + g''8. [ + af''8. + af''8. ] + + | + + af''8. [ + af''8. + af''8. ] + + | + \break + + \trillFlat + af''4. \startTrillSpan + ~ + af''8. + ~ + + | + + af''4. + ~ + af''8. + ~ + + | + + \oneVoice + 8. [ + a''8. \p \< + bf''8. ] + ~ + + | + + bf''8. [ + b''8. + c'''8. ] + ~ + + \bar "||" + + \key ef \major + c'''8. [ + cs'''8. \f ] \stopTrillSpan + r8. + + } + + % RH voice 2 + \new Voice { + \voiceTwo + \override Voice.TrillSpanner #'direction = #DOWN + d''4. \f \startTrillSpan + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + d''8. \stopTrillSpan + \trillFlat + d''4. \startTrillSpan + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. \stopTrillSpan + ~ + + | + + \trillFlat + d''4. \startTrillSpan + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + \once \override NoteColumn #'ignore-collision = ##t + \hideNotes + d''8. \stopTrillSpan + s4. + + | + + s8. + s8. + + } + + >> + + % LH staff + \new Staff { + \clef bass + \key c \major + \time 9/16 + + r8. + r8. + 8 [ ( + 16 ] ) + + | + + 4. + \clef treble + c''8 [ ( + b'16 ] ) + + | + + b'4. + c''8 [ ( + b'16 ] ) + + | + + b'8. [ + b'8. + b'8. ] + + | + + b'8. [ + bf'8. ] + \clef bass + 8 [ ( + 16 ] ) + + | + + 4. + \clef treble + f'8 [ ( + bf16 ] ) + + | + + << + + \new Voice { + \voiceOne + \override Voice.TrillSpanner #'direction = #UP + f'4. \startTrillSpan + ~ + f'8. + ~ + + | + + f'4. + ~ + f'8. + ~ + + | + + f'8. \stopTrillSpan + } + + \new Voice { + \voiceTwo + \override Voice.TrillSpanner #'direction = #DOWN + bf8. [ + bf8. + bf8. ] + + | + + bf8. [ + bf8. + bf8. ] + + | + + bf8. + } + + >> + + \oneVoice + r8. + r8. + + | + + r8. + r8. + r8. + \clef bass + + | + + \key ef \major + r8. + r8. + r8. + + } + +>> diff --git a/Documentation/snippets/new/slides-in-tablature.ly b/Documentation/snippets/new/slides-in-tablature.ly new file mode 100644 index 0000000000..7a90e73be2 --- /dev/null +++ b/Documentation/snippets/new/slides-in-tablature.ly @@ -0,0 +1,38 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = " +Slides can be typeset in both @code{Staff} and @code{TabStaff} contexts: +" + doctitle = "Slides in tablature" +} + +slides = { + c'8\3(\glissando d'8\3) + c'8\3\glissando d'8\3 + \hideNotes + \grace { g16\3\glissando } + \unHideNotes + c'4\3 + \afterGrace d'4\3\glissando { + \stemDown \hideNotes + g16\3 } + \unHideNotes +} + +\score { + << + \new Staff { \clef "treble_8" \slides } + \new TabStaff { \slides } + >> + \layout { + \context { + \Score + \override Glissando #'minimum-length = #4 + \override Glissando #'springs-and-rods = + #ly:spanner::set-spacing-rods + \override Glissando #'thickness = #2 + } + } +} diff --git a/Documentation/snippets/new/snap-pizzicato-bartok-pizzicato.ly b/Documentation/snippets/new/snap-pizzicato-bartok-pizzicato.ly new file mode 100644 index 0000000000..f25ee35372 --- /dev/null +++ b/Documentation/snippets/new/snap-pizzicato-bartok-pizzicato.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { + lsrtags = "expressive-marks, unfretted-strings" + texidoc = " +A snap-pizzicato (also known as @qq{Bartok pizzicato}) is a @qq{strong +pizzicato where the string is plucked vertically by snapping and +rebounds off the fingerboard of the instrument} (Wikipedia). It is +denoted by a circle with a vertical line going from the center upwards +outside the circle. +" + doctitle = "Snap-pizzicato (@qq{Bartok pizzicato})" +} + +\relative c' { + c4\snappizzicato + 4\snappizzicato + 4^\snappizzicato + 4_\snappizzicato +} diff --git a/Documentation/snippets/new/staff-headword.ly b/Documentation/snippets/new/staff-headword.ly new file mode 100644 index 0000000000..7547f03eb0 --- /dev/null +++ b/Documentation/snippets/new/staff-headword.ly @@ -0,0 +1,126 @@ +\version "2.14.0" +\include "catalan.ly" +#(set-global-staff-size 15) +\paper{ + ragged-right=##t + line-width=17\cm + indent=0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +\header { + mutopiatitle = "Napolitan Dance (Swan Lake)" + mutopiacomposer = "TchaikovskyPI" + mutopiainstrument = "Piano, Trumpet, Percussion" + source = "New arrangement" + style = "Classical" + copyright = "Public Domain" + maintainer = "Laurence Sardain" + lastupdated = "2006/Dec/21" +% title = "Le Lac des Cygnes" +% subtitle = "Danse Napolitaine" +% composer = "Piotr Ilitch Tchaïkovski" +% arranger = "arr. Laurence Sardain" +% footer = "Mutopia-2006/12/22-896" +} + +trompette = \relative do'' { + \clef treble + \key mib \major + \time 2/4 + R2^\markup { \italic Comodo } | + r8 \once \override TextScript #'padding = #2.0 + sib16-.^\markup {\dynamic p \italic grazioso} do-. mib( re)-. do-. sib-. | + re8-. r8 re4->( | + re8) do16-. re-. mib( re) do-. re-. | + do8-. r8 sib4-> | +} + +tambourin = \relative do' { + \time 2/4 + r8 do16 do do8 do | + r8 do16 do do8 do | + r8 do r do | + r8 do16 do do8 do | + r8 do r do | +} + +tambourinMidi = \drummode { + \time 2/4 + r8 tamb16 tamb tamb8 tamb | + r8 tamb16 tamb tamb8 tamb | + r8 tamb r tamb | + r8 tamb16 tamb tamb8 tamb | + r8 tamb r tamb | +} + +upper = \relative do' { + \clef treble + \key mib \major + \time 2/4 + r8\p 16-. -. 8-. -. | + r8 16-. -. 8-. -. | + r8 16-. -. 8-. -. | + r8 16-. -. 8-. -. | + r8 16-. -. 8-. -. | +} + +lower = \relative do { + \clef bass + \key mib \major + \time 2/4 + mib4-. r4 | + sib-. r | + fa'-. r | + sib, r | + mib4-. r4 | +} + + +\score { + << + \context Staff = "trumpet" << + \set Staff.instrumentName = \markup { "Trumpet" \concat{ B \teeny \raise #0.4 \flat } } + \transpose sib do' + \trompette + >> + \context RhythmicStaff = "tambourin" << + \set Staff.instrumentName = "Tambourine" + \tambourin + >> + \context PianoStaff = "prima" << + \set PianoStaff.instrumentName = "Piano " + \context Staff = "uppera" \upper + \context Staff = "lowera" \lower + >> + >> + \layout { } +} +\score { + << + \context Staff = "trumpet" { + \set Staff.midiInstrument = "trumpet" + \trompette + } + \context DrumStaff = "tambourin" { + \tambourinMidi + } + \context Staff = "piano" << + \upper + \lower + >> + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + } + } +} + diff --git a/Documentation/snippets/new/stem-and-beam-behavior-in-tablature.ly b/Documentation/snippets/new/stem-and-beam-behavior-in-tablature.ly new file mode 100644 index 0000000000..33bf9a0029 --- /dev/null +++ b/Documentation/snippets/new/stem-and-beam-behavior-in-tablature.ly @@ -0,0 +1,21 @@ +\version "2.14.0" + +\header { + lsrtags = "fretted-strings" + texidoc = " +The direction of stems is controlled the same way in tablature as in +traditional notation. Beams can be made horizontal, as shown in this +example. +" + doctitle = "Stem and beam behavior in tablature" +} + +\new TabStaff { + \relative c { + \tabFullNotation + g16 b d g b d g b + \stemDown + \override Beam #'damping = #+inf.0 + g,,16 b d g b d g b + } +} diff --git a/Documentation/snippets/new/subdividing-beams.ly b/Documentation/snippets/new/subdividing-beams.ly new file mode 100644 index 0000000000..968bca7559 --- /dev/null +++ b/Documentation/snippets/new/subdividing-beams.ly @@ -0,0 +1,40 @@ +\version "2.14.0" + +\header { + lsrtags = "rhythms" + + texidoc = " +The beams of consecutive 16th (or shorter) notes are, by default, not +subdivided. That is, the three (or more) beams stretch unbroken over +entire groups of notes. This behavior can be modified to subdivide +the beams into sub-groups by setting the property +@code{subdivideBeams}. When set, multiple beams will be subdivided at +intervals defined by the current value of @code{baseMoment} by reducing +the multiple beams to just one beam between the sub-groups. Note that +@code{baseMoment} defaults to one over the denominator of the current +time signature if not set explicitly. It must be set to a fraction +giving the duration of the beam sub-group using the +@code{ly:make-moment} function, as shown in this snippet. Also, when +@code{baseMoment} is changed, @code{beatStructure} should also be changed +to match the new @code{baseMoment}: + +" + doctitle = "Subdividing beams" +} + +\relative c'' { + c32[ c c c c c c c] + \set subdivideBeams = ##t + c32[ c c c c c c c] + + % Set beam sub-group length to an eighth note + \set baseMoment = #(ly:make-moment 1 8) + \set beatStructure = #'(2 2 2 2) + c32[ c c c c c c c] + + % Set beam sub-group length to a sixteenth note + \set baseMoment = #(ly:make-moment 1 16) + \set beatStructure = #'(4 4 4 4) + c32[ c c c c c c c] +} + diff --git a/Documentation/snippets/new/text-headword.ly b/Documentation/snippets/new/text-headword.ly new file mode 100644 index 0000000000..9429ca4175 --- /dev/null +++ b/Documentation/snippets/new/text-headword.ly @@ -0,0 +1,234 @@ +\version "2.14.0" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +% NR 1.8 Text + +% L. v. Beethoven, Op. 110 +% Piano sonata 31 +% measures 1 - 7 + +\layout { + \context { + \Score + \override SpacingSpanner #'base-shortest-duration = + #(ly:make-moment 1 20) + } +} + +\new PianoStaff << + + % RH staff + \new Staff { + \clef treble + \key af \major + \time 3/4 + + \once \override TextScript #'staff-padding = #4 + 4. ( + _ \markup { \dynamic p \italic { con amabilità } } + 8 ) + 8. [ + 16 ] + + | + + 4 + 2 + _ \markup { \italic { ten. } } + + | + + << + + \new Voice { + \voiceOne + ef''4. ( + df''8 [ ) + ef'' ( + f'' ) ] + + | + + \once \override TextScript #'staff-padding = #4 + ef''8. ( + _ \markup { \italic { tranqu. } } + d''16 ) + df''8 \trill \fermata + _ \markup { \italic { ten. } } + } + + \new Voice { + \voiceTwo + af'4. + af'8 [ + af'8 + af'8 ] + + | + + g'4 + g'8 + } + + >> + + \oneVoice + \once \override TextScript #'staff-padding = #4 + df''32 + _ \markup { \italic dolce } + c''32 + df''32 + ef''32 + \acciaccatura { df''[ ef'' ] } + f''8 + ef''16 + df''16 + + | + \break + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((alignment-distances . (12))) + + c''4. ( + ^ \markup \italic { cantabile, con intimissimo sentimento, + ma sempre molto dolce e semplice } + ef''4 + af''8 ) + + | + + af''4 ( + g''2 ) + + | + + bf''4. ( + g''4 + ef''8 ) + + | + } + + % LH + \new Staff { + \clef bass + \key af \major + \time 3/4 + + 4. ( + 8 ) + 8. [ + 16 ] + + | + + 4 + 2 ^ \markup { \italic ten. } + + | + + << + + \new Voice { + \voiceOne + ef8 [ ( + af8 + c'8 + bf8 ) + c'8 ( \staccato + df'8 ] ) \staccato + + | + + bf4 + bf8 ^ \markup { \italic ten. } + } + + \new Voice { + \voiceTwo + c4. ( + f8 [ ) + ef8 ( \staccato + df8 ] ) \staccato + + | + + ef4 + ef8 \fermata + } + + >> + + \oneVoice + r8 + r4 + \clef treble + + | + + \override Staff.SustainPedalLineSpanner #'outside-staff-priority = #1000 + \override Staff.SustainPedalLineSpanner #'staff-padding = #7 + \once \override TextScript #'padding = #2 + af16 \sustainOn + ^ \markup \italic { non staccato } + _ \markup \italic { molto \concat { \dynamic { p } , } sempre tranquillo + ed egualmente, non rubato } + 16 + 16 + 16 + af16 + 16 + 16 + 16 + af16 \sustainOn + 16 + 16 + 16 + + | + + bf16 \sustainOn + 16 + 16 + 16 + bf16 \sustainOn + 16 + 16 + 16 + bf16 + 16 + 16 + 16 + + | + + \override Staff.SustainPedalLineSpanner #'staff-padding = #4 + df'16 \sustainOn + 16 + 16 + 16 + df'16 + 16 + 16 + 16 + df'16 \sustainOn + 16 + 16 + 16 + + | + } + +>> diff --git a/Documentation/snippets/new/unfretted-headword.ly b/Documentation/snippets/new/unfretted-headword.ly new file mode 100644 index 0000000000..72ea357e53 --- /dev/null +++ b/Documentation/snippets/new/unfretted-headword.ly @@ -0,0 +1,230 @@ +% #!lilypond lcp-extract.ly -*- coding: utf-8; -*- + +%%% +%%% les-cinq-pieds: +%%% extract for the lilypond documentaton project +%%% + +%% Title: Les cinq pieds +%% Composer: David Séverin +%% Date: Juillet 2007 +%% Instrument: Violon Solo +%% Dedication: A mon épouse Lívia De Souza Vidal +%% Additional: avec l'aide de Krzysztof Wagenaar + +%% Statement: + +%% Here by, I, the composer, agree that this extract of my composition +%% be in the public domain and can be part of, used and presented in +%% the LilyPond Documention Project. + +%% Statement Date: Octber the 9th, 2008 + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + + +\version "2.14.0" +#(set-global-staff-size 15) + +%%% +%%% Abreviations +%%% + +db = \markup { \musicglyph #"scripts.downbow" } +dub = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" } } +dubetc = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" "..." } } + +ub = \markup { \musicglyph #"scripts.upbow" } +udb = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" } } +udbetc = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" "..." } } + +fermaTa = \markup \musicglyph #"scripts.ufermata" + +accel = \markup \tiny \italic \bold "accel..." +ritar = \markup \tiny \italic \bold "ritar..." + +ignore = \override NoteColumn #'ignore-collision = ##t + + +%% +%% Strings +%% + +svib = \markup \small "s. vib." +pvib = \markup \small "p. vib." +mvib = \markup \small "m. vib." +sulp = \markup \small "s.p." +norm = \markup \small "n." + +quatre = \markup \teeny "IV" + + +%% +%% Shifting Notes +%% + +shift = \once \override NoteColumn #'force-hshift = #0.9 +shifta = \once \override NoteColumn #'force-hshift = #1.2 +shiftb = \once \override NoteColumn #'force-hshift = #1.4 + + +%% +%% Hairpin +%% + +% aniente = "a niente" +aniente = \once \override Hairpin #'circled-tip = ##t + + +%% +%% Tuplets +%% + +tupletbp = \once \override Staff.TupletBracket #'padding = #2.25 + + +%% +%% Flag [Note Head - Stem] +%% + +noflag = \once \override Stem #'flag-style = #'no-flag + +%%% +%%% Functions +%%% + +#(define-markup-command (colmark layout props args) + (markup-list?) + (let ((entries (cons (list '(baseline-skip . 2.3)) props) + )) + (interpret-markup layout entries + (make-column-markup + (map (lambda (arg) + (markup arg)) + (reverse args)))))) + + +%%% +%%% Instruments +%%% + +ViolinSolo = \relative c' { + + \voiceOne + + \set Score.markFormatter = #format-mark-box-numbers + \override Score.VoltaBracket #'font-name = #"sans" + \override Score.VoltaBracket #'extra-offset = #'(0 . 1) + \override SpacingSpanner #'uniform-stretching = ##t + + + %% Measure 1 + \time 25/8 + \mark \default + r2 ^\markup \colmark { \italic "fatigué" " " \bold "lentement"} r4 r r8 + << + { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \svib } \shifta e1 } \\ + { d2 \open \mf \< ~ \aniente d1 \! \> r4 r ^\markup \colmark { " " \fermaTa } \! } + >> + + + %% Measure 2 + \time 7/4 + \set Score.repeatCommands = #'((volta "1) n. 2) s.p.")) + << + { \shift d2 \glissando ^\markup \colmark { \quatre \udbetc } \shifta e1 } \\ + { d2 \open \mf \< ~ d1 \! \> ~ d4 ^\markup \colmark { " " \fermaTa } \! } + >> + \set Score.repeatCommands = #'((volta #f)) + + + %% Measure 3 + \time 15/4 + << + { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \pvib \norm } \shifta e1 \glissando d2 } \\ + { d2 \open \mf \< ~ d1 ~ d2 \ff ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp} + >> + \break + + %% Measure 4 + \time 4/4 + \stemUp + \tupletDown + \times 2/3 { d4 ^\markup \colmark { \quatre \db \accel } d d } + \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d } + + + + %% Measure 5 + \time 5/4 + \tupletbp \times 2/3 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d } + \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db \sulp } d _\open d } + \tupletbp \times 2/3 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d } + d2 \ff ^\markup \colmark { " " \pvib } \> + + + %% Measure 6 + \time 5/8 + \once \override Beam #'grow-direction = #RIGHT % \featherDurations #(ly:make-moment 2 3) + { d16 \staccato + [ d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato] + } + \break + + + %% Measure 7 + \time 7/4 + \tupletbp \times 2/3 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d } + \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db } d _\open d } + \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d } + \times 2/3 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d } + \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ } + + + %% Measure 8 + d4 ^\markup \colmark { " " " " \pvib \norm } + deh2 d dih \< + + + %% Measure 9 + << + { \shift d2 \glissando ^\markup \colmark { \quatre } \shifta e1 } \\ + { d2 \open ~ d1 ^\markup \colmark { " " " " \mvib } } + >> + \breathe r4 \! + +} + + +%%% +%%% Score +%%% + +\score { + + << + \relative << + \new Staff \ViolinSolo + >> + + \override Score.Rest #'transparent = ##t + \set Score.defaultBarType = "empty" + >> + + \layout { + indent = 0.0 + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \Score + \remove "Bar_number_engraver" + } + } +} diff --git a/Documentation/snippets/new/using-ly-grob-object-to-access-grobs-with--tweak.ly b/Documentation/snippets/new/using-ly-grob-object-to-access-grobs-with--tweak.ly new file mode 100644 index 0000000000..eed7462b43 --- /dev/null +++ b/Documentation/snippets/new/using-ly-grob-object-to-access-grobs-with--tweak.ly @@ -0,0 +1,75 @@ +\version "2.14.0" + +\header { + lsrtags = "tweaks-and-overrides" + + texidoc = " +Some grobs can be accessed @qq{laterally} from within another grob's +callback. These are usually listed as @qq{layout objects} in the +@qq{Internal properties} section of a grob-interface. The function +@code{ly:grob-object} is used to access these grobs. + + +Demonstrated below are some ways of accessing grobs from within a +NoteHead callback, but the technique is not limited to NoteHeads. +However, the NoteHead callback is particularly important, since it is +the implicit callback used by the @code{\\tweak} command. + + +The example function defined below (\"display-grobs\") is probably not +that useful, but it demonstrates that the grobs are indeed being +accessed. + + +Example console output: + + +@example +-------------------- +#-Grob Accidental - +#-Grob Arpeggio - +#-Grob Stem - +@end example + + +" + doctitle = "Using ly:grob-object to access grobs with \\tweak" +} + +#(define (notehead-get-accidental notehead) + ;; notehead is grob + (ly:grob-object notehead 'accidental-grob)) + +#(define (notehead-get-arpeggio notehead) + ;; notehead is grob + (let ((notecolumn (notehead-get-notecolumn notehead))) + (ly:grob-object notecolumn 'arpeggio))) + +#(define (notehead-get-notecolumn notehead) + ;; notehead is grob + (ly:grob-parent notehead X)) + +#(define (notehead-get-stem notehead) + ;; notehead is grob + (let ((notecolumn (notehead-get-notecolumn notehead))) + (ly:grob-object notecolumn 'stem))) + +#(define (display-grobs notehead) + ;; notehead is grob + (let ((accidental (notehead-get-accidental notehead)) + (arpeggio (notehead-get-arpeggio notehead)) + (stem (notehead-get-stem notehead))) + (format #t "~2&~a\n" (make-string 20 #\-)) + (for-each + (lambda (x) (format #t "~a\n" x)) + (list accidental arpeggio stem)))) + +\relative c' { + %% display grobs for each note head: + %\override NoteHead #'before-line-breaking = #display-grobs + 1\arpeggio +} diff --git a/Documentation/snippets/new/using-the-whiteout-property.ly b/Documentation/snippets/new/using-the-whiteout-property.ly new file mode 100644 index 0000000000..9464915492 --- /dev/null +++ b/Documentation/snippets/new/using-the-whiteout-property.ly @@ -0,0 +1,30 @@ +\version "2.14.0" + +\header { + lsrtags = "expressive-marks, editorial-annotations" + texidoc = " +Any graphical object can be printed over a white background to +mask parts of objects that lie beneath. This can be useful to +improve the appearance of collisions in complex situations when +repositioning objects is impractical. It is necessary to explicitly +set the @code{layer} property to control which objects are masked +by the white background. + +In this example the collision of the tie with the time signature is +improved by masking out the part of the tie that crosses the time +signature by setting the @code{whiteout} property of @code{TimeSignature}. +To do this @code{TimeSignature} is moved to a layer above @code{Tie}, which +is left in the default layer of 1, and @code{StaffSymbol} is moved to a +layer above @code{TimeSignature} so it is not masked. +" + doctitle = "Using the whiteout property" +} + +{ + \override Score.StaffSymbol #'layer = #4 + \override Staff.TimeSignature #'layer = #3 + b'2 b'~ + \once \override Staff.TimeSignature #'whiteout = ##t + \time 3/4 + b' r4 +} diff --git a/Documentation/snippets/new/vocal-ensemble-template-with-automatic-piano-reduction.ly b/Documentation/snippets/new/vocal-ensemble-template-with-automatic-piano-reduction.ly new file mode 100644 index 0000000000..7c99b53f18 --- /dev/null +++ b/Documentation/snippets/new/vocal-ensemble-template-with-automatic-piano-reduction.ly @@ -0,0 +1,101 @@ +\version "2.14.0" + +\header { + lsrtags = "vocal-music, keyboards, template" + + texidoc = " +This template adds an automatic piano reduction to the standard SATB +vocal score demonstrated in @qq{Vocal ensemble template}. This +demonstrates one of the strengths of LilyPond – you can use a music +definition more than once. If any changes are made to the vocal notes +(say, @code{tenorMusic}), then the changes will also apply to the piano +reduction. +" + doctitle = "Vocal ensemble template with automatic piano reduction" +} + +\paper { + top-system-spacing #'basic-distance = #10 + score-system-spacing #'basic-distance = #20 + system-system-spacing #'basic-distance = #20 + last-bottom-spacing #'basic-distance = #10 +} + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords =\lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + << + \new ChoirStaff << + \new Lyrics = "sopranos" \with { + % This is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff = "women" << + \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } + \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } + >> + \new Lyrics = "altos" + \new Lyrics = "tenors" \with { + % This is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + + \new Staff = "men" << + \clef bass + \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } + \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } + >> + \new Lyrics = "basses" + \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords + \context Lyrics = "altos" \lyricsto "altos" \altoWords + \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords + \context Lyrics = "basses" \lyricsto "basses" \bassWords + >> + \new PianoStaff << + \new Staff << + \set Staff.printPartCombineTexts = ##f + \partcombine + << \global \sopMusic >> + << \global \altoMusic >> + >> + \new Staff << + \clef bass + \set Staff.printPartCombineTexts = ##f + \partcombine + << \global \tenorMusic >> + << \global \bassMusic >> + >> + >> + >> +} diff --git a/Documentation/snippets/new/vocal-ensemble-template-with-verse-and-refrain.ly b/Documentation/snippets/new/vocal-ensemble-template-with-verse-and-refrain.ly new file mode 100644 index 0000000000..17a901c06e --- /dev/null +++ b/Documentation/snippets/new/vocal-ensemble-template-with-verse-and-refrain.ly @@ -0,0 +1,99 @@ +\version "2.14.0" + +\header { + lsrtags = "vocal-music, contexts-and-engravers, template" + texidoc = " +This template creates a score which starts with a solo verse and +continues into a refrain for two voices. It also demonstrates the +use of spacer rests within the @code{\global} variable to define +meter changes (and other elements common to all parts) throughout +the entire score. +" + doctitle = "Vocal ensemble template with verse and refrain" +} + +global = { + \key g \major + + % verse + \time 3/4 + s2.*2 + \break + + % refrain + \time 2/4 + s2*2 + \bar "|." +} + +SoloNotes = \relative g' { + \clef "treble" + + % verse + g4 g g | + b4 b b | + + % refrain + R2*2 | +} + +SoloLyrics = \lyricmode { + One two three | + four five six | +} + +SopranoNotes = \relative c'' { + \clef "treble" + + % verse + R2.*2 | + + % refrain + c4 c | + g4 g | +} + +SopranoLyrics = \lyricmode { + la la | + la la | +} + +BassNotes = \relative c { + \clef "bass" + + % verse + R2.*2 | + + % refrain + c4 e | + d4 d | +} + +BassLyrics = \lyricmode { + dum dum | + dum dum | +} + +\score { + << + \new Voice = "SoloVoice" << \global \SoloNotes >> + \new Lyrics \lyricsto "SoloVoice" \SoloLyrics + + \new ChoirStaff << + \new Voice = "SopranoVoice" << \global \SopranoNotes >> + \new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics + + \new Voice = "BassVoice" << \global \BassNotes >> + \new Lyrics \lyricsto "BassVoice" \BassLyrics + >> + >> + \layout { + ragged-right = ##t + \context { \Staff + % these lines prevent empty staves from being printed + \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } + } +} + diff --git a/Documentation/snippets/new/vocal-ensemble-template.ly b/Documentation/snippets/new/vocal-ensemble-template.ly new file mode 100644 index 0000000000..da5498872f --- /dev/null +++ b/Documentation/snippets/new/vocal-ensemble-template.ly @@ -0,0 +1,94 @@ +\version "2.14.0" + +\header { + lsrtags = "vocal-music, template" + + texidoc = " +Here is a standard four-part SATB vocal score. With larger ensembles, +it is often useful to include a section which is included in all parts. +For example, the time signature and key signature are almost always the +same for all parts. Like in the @qq{Hymn} template, the four voices are +regrouped on only two staves. +" + doctitle = "Vocal ensemble template" +} + +\paper { + top-system-spacing #'basic-distance = #10 + score-system-spacing #'basic-distance = #20 + system-system-spacing #'basic-distance = #20 + last-bottom-spacing #'basic-distance = #10 +} + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords = \lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + \new ChoirStaff << + \new Lyrics = "sopranos" \with { + % this is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff = "women" << + \new Voice = "sopranos" { + \voiceOne + << \global \sopMusic >> + } + \new Voice = "altos" { + \voiceTwo + << \global \altoMusic >> + } + >> + \new Lyrics = "altos" + \new Lyrics = "tenors" \with { + % this is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff = "men" << + \clef bass + \new Voice = "tenors" { + \voiceOne + << \global \tenorMusic >> + } + \new Voice = "basses" { + \voiceTwo << \global \bassMusic >> + } + >> + \new Lyrics = "basses" + \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords + \context Lyrics = "altos" \lyricsto "altos" \altoWords + \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords + \context Lyrics = "basses" \lyricsto "basses" \bassWords + >> +} + diff --git a/Documentation/snippets/new/vocal-headword.ly b/Documentation/snippets/new/vocal-headword.ly new file mode 100644 index 0000000000..0ad4130de5 --- /dev/null +++ b/Documentation/snippets/new/vocal-headword.ly @@ -0,0 +1,73 @@ +\version "2.14.0" + +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +\layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##t + \override NonMusicalPaperColumn #'keep-inside-line = ##t + } +} + +% L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale +% mm. 216 -- 236 +% Text: F. von Schiller + +\score { + \new Staff \relative c' { + \set Score.currentBarNumber = 216 + \bar "" % make first bar number be shown + \clef bass \key d \minor \time 3/4 + % \tempo "Presto" + % \compressFullBarRests R2.*8 + \tempo "Recitativo" + \autoBeamOff + r4^\markup { \small Baritono } r a + \appoggiatura a8 e'2. ~ + e4 d8[ cis d e] + e4 g, r8 g + bes2 a8 e + g4 f r + R2.*2 + gis2 gis4 + r4 d'4. b8 + b4 gis8([ a b cis] + e8[ d cis d)] b([ gis)] + e8 d d4 fis8([ e)] + d4 cis r + \key d \major + r4 r a' + d4.( e8[ fis e)] + e([ d)] d([ cis d a)] + g8([ fis)] fis([ e d c)] + c8([ b)] g'2~ + \once \override Script #'outside-staff-priority = #1 % put fermata closer to staff + g4.\fermata ^\markup { \small \italic "ad libitum" } e8[ cis!] d + d8 a a4 r \bar "||" + + % \time 4/4 \tempo "Allegro assai" + % R1 + % e''4^\f d r2 + % R1 + % e4( ^\f d2) a8([ g)] + } + \addlyrics { + O Freun -- _ _ de, nicht die -- _ se Tö -- ne! + Son -- dern laßt uns an -- _ ge -- neh -- me -- re an -- stim -- men, + und freu -- _ _ _ _ _ _ _ den -- vol -- le -- re! + % Freu -- de, Freu -- de,__ + } +} + diff --git a/Documentation/snippets/new/wind-headword.ly b/Documentation/snippets/new/wind-headword.ly new file mode 100644 index 0000000000..cadbc37601 --- /dev/null +++ b/Documentation/snippets/new/wind-headword.ly @@ -0,0 +1,52 @@ +\version "2.14.0" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 2.whatever Wind + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} + +% Tchaikovsky +% Nutcracker Suite, VII Dance of the Merlitons +\score { + \new StaffGroup << + \new Staff \relative c'' { + \set Staff.instrumentName = "Flauto I,II" + \once \override Score.RehearsalMark #'self-alignment-X = #-1 + \once \override Score.RehearsalMark #'break-align-symbols = +#'(time-signature) + \once \override Score.TimeSignature +#'break-align-anchor-alignment = #LEFT + \once \override Score.RehearsalMark #'padding = #4 + \mark \markup \large \bold {Moderato assai} + \key d \major + \time 2/4 + \compressFullBarRests + R2*2 + 16-.\p -. -. -. 8-. -. + -.\< 32( 4--)\mf + 16-. -. -. -. + (\> ) -. -.\! + 4--\sf \acciaccatura {8} 4--\mf + } + \new Staff \relative c' { + \set Staff.instrumentName = "Flauto III" + \key d \major + \time 2/4 + \compressFullBarRests + R2*2_\markup{Gr.Fl.} + fis16-.\p e-. fis-. e-. fis8-. e-. + g8-.\< fis32( a d fis a4--)\mf + b16-. a-. b-. a-. g(\> fis) d-. a-.\! + g4--\sf \acciaccatura fis'8 g4--\mf + } + >> +} + diff --git a/Documentation/snippets/new/woodwind-diagrams-key-lists.ly b/Documentation/snippets/new/woodwind-diagrams-key-lists.ly new file mode 100644 index 0000000000..bdb803cfd9 --- /dev/null +++ b/Documentation/snippets/new/woodwind-diagrams-key-lists.ly @@ -0,0 +1,25 @@ +\version "2.14.0" + +\header { + lsrtags = "winds" + + texidoc=" +The snippet below produces a list of all possible keys and key +settings for woodwind diagrams as defined in +@file{scm/define-woodwind-diagrams.scm}. The list will be displayed +on the console and in the log file, but not in the music. +" + doctitle = "Woodwind diagrams key lists" +} + +#(print-keys-verbose 'piccolo) +#(print-keys-verbose 'flute) +#(print-keys-verbose 'flute-b-extension) +#(print-keys-verbose 'oboe) +#(print-keys-verbose 'clarinet) +#(print-keys-verbose 'bass-clarinet) +#(print-keys-verbose 'low-bass-clarinet) +#(print-keys-verbose 'saxophone) +#(print-keys-verbose 'baritone-saxophone) +#(print-keys-verbose 'bassoon) +#(print-keys-verbose 'contrabassoon) diff --git a/Documentation/snippets/new/woodwind-diagrams-listing.ly b/Documentation/snippets/new/woodwind-diagrams-listing.ly new file mode 100644 index 0000000000..b18121fbf1 --- /dev/null +++ b/Documentation/snippets/new/woodwind-diagrams-listing.ly @@ -0,0 +1,95 @@ +\version "2.14.0" + +\header { + lsrtags="winds" + texidoc=" +The following music shows all of the woodwind diagrams currently +defined in LilyPond. +" + doctitle = "Woodwind diagrams listing" + +} + +\relative c' { + \textLengthOn + c1^ + \markup { + \center-column { + 'piccolo + " " + \woodwind-diagram + #'piccolo + #'() + } + } + + c1^ + \markup { + \center-column { + 'flute + " " + \woodwind-diagram + #'flute + #'() + } + } + c1^\markup { + \center-column { + 'oboe + " " + \woodwind-diagram + #'oboe + #'() + } + } + + c1^\markup { + \center-column { + 'clarinet + " " + \woodwind-diagram + #'clarinet + #'() + } + } + + c1^\markup { + \center-column { + 'bass-clarinet + " " + \woodwind-diagram + #'bass-clarinet + #'() + } + } + + c1^\markup { + \center-column { + 'saxophone + " " + \woodwind-diagram + #'saxophone + #'() + } + } + + c1^\markup { + \center-column { + 'bassoon + " " + \woodwind-diagram + #'bassoon + #'() + } + } + + c1^\markup { + \center-column { + 'contrabassoon + " " + \woodwind-diagram + #'contrabassoon + #'() + } + } +} diff --git a/Documentation/snippets/non-default-tuplet-numbers.ly b/Documentation/snippets/non-default-tuplet-numbers.ly new file mode 100644 index 0000000000..a838305c76 --- /dev/null +++ b/Documentation/snippets/non-default-tuplet-numbers.ly @@ -0,0 +1,80 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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í +como para añadir una figura al número o a la fracción de la +agrupación. + +" + + doctitlees = "Números de agrupación especial distintos a los predeterminados" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen +N-tolennummern gesetzt werden können, die sich von dem eigentlichen Bruch +unterscheiden. Auch ein Notenwert kann zu Nenner oder Zähler des Bruchs +hinzugefügt werden. +" + doctitlede = "Nicht-standard-N-tolennummern" + + +%% Translation of GIT committish: 015b8e65e5e9a74cea1618b597402b5b74f89b89 + texidocfr = " +LilyPond sait aussi gérer des nolets dont le chiffrage imprimé ne +correspond pas exactement à la fraction de mesure à laquelle ils se +réfèrent, tout comme ceux auxquels une valeur de note vient en complément +au chiffre. +" + doctitlefr = "Nolets au chiffrage inhabituel" + + lsrtags = "rhythms" + + texidoc = " +LilyPond also provides formatting functions to print tuplet numbers different +than the actual fraction, as well as to append a note value to the tuplet +number or tuplet fraction. +" + doctitle = "Non-default tuplet numbers" +} % begin verbatim + + +\relative c'' { + \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. } +} diff --git a/Documentation/snippets/non-traditional-key-signatures.ly b/Documentation/snippets/non-traditional-key-signatures.ly new file mode 100644 index 0000000000..e0268b2d60 --- /dev/null +++ b/Documentation/snippets/non-traditional-key-signatures.ly @@ -0,0 +1,125 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Armaduras de tonalidad no tradicionales" + texidoces = " + +La muy utilizada instrucción @code{\\key} establece la propiedad +@code{keySignature} property, dentro del contexto @code{Staff}. + +Para crear armaduras de tonalidad no estándar, ajuste esta +propiedad directamente. El formato de esta instrucción es una +lista: + +@code{\\set Staff.keySignature = #`(((octava . paso) . alteración) +((octava . paso) . alteración) ...)} donde, para cada elemento +dentro de la lista, @code{octava} especifica la octava +(siendo@tie{}cero la octava desde el Do@tie{}central hasta el Si +por encima), @code{paso} especifica la nota dentro de la octava +(cero@tie{}significa@tie{}Do y 6@tie{}significa@tie{}Si), y +@code{alteración} es @code{,SHARP ,FLAT ,DOUBLE-SHARP} +etc. (observe la coma precedente.) + +De forma alternativa, para cada elemento de la lista el uso del +formato más conciso @code{(paso . alteración)} especifica que la +misma alteración debe estar en todas las octavas. + +He aquí un ejemplo de una posible armadura para generar una escala +exátona: +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Untypische Tonarten" + texidocde = " +Der üblicherweise benutzte @code{\\key}-Befehl setzt die +@code{keySignature}-Eigenschaft im @code{Staff}-Kontext. + +Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft +direkt setzen. Das Format für den Befehl ist eine Liste: @code{ \\set +Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave +. Schritt) . Alteration) ...)} wobei für jedes Element in der Liste +@code{Oktave} die Oktave angibt (0@tie{}ist die Oktave vom +eingestrichenen@tie{}C bis zum eingestrichenen@tie{}H), @code{Schritt} gibt +die Note innerhalb der Oktave an (0@tie{}heißt@tie{}C und +6@tie{}heißt@tie{}H), und @code{Alteration} ist @code{,SHARP ,FLAT +,DOUBLE-SHARP} usw. (Beachte das beginnende Komma.) + +Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format +@code{(Schritt . Alteration)} gesetzt werden, wobei dann die Einstellungen +für alle Oktaven gelten. + +Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter: +" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La commande @code{\\key} détermine la propriété @code{keySignature} d'un +contexte @code{Staff}. + +Des armures inhabituelles peuvent être spécifiées en modifiant +directement cette propriété. Il s'agit en l'occurence de définir une +liste : + +@code{\\set Staff.keySignature = #`(((octave . pas) . altération) ((octave +. pas) . altération) @dots{})} + +dans laquelle, et pour chaque élément, +@code{octave} spécifie l'octave (0@tie{}pour celle allant du +do@tie{}médium au si supérieur), @code{pas} la note dans cette octave +(0@tie{}pour@tie{}do et 6@tie{}pour@tie{}si), et @code{altération} sera +@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (attention à la virgule en +préfixe). + +Une formulation abrégée -- @code{(pas . altération)} -- signifie que +l'altération de l'élément en question sera valide quel que soit l'octave. + + +Voici, par exemple, comment générer une gamme par ton : + +" + doctitlefr = "Armures inhabituelles" + + + lsrtags = "pitches, staff-notation" + texidoc = " +The commonly used @code{\\key} command sets the @code{keySignature} +property, in the @code{Staff} context. + +To create non-standard key signatures, set this property directly. The +format of this command is a list: + +@code{\\set Staff.keySignature = #`(((octave . step) . alter) ((octave +. step) . alter) ...)} where, for each element in the list, +@code{octave} specifies the octave (0@tie{}being the octave from +middle@tie{}C to the B above), @code{step} specifies the note within the +octave (0@tie{}means@tie{}C and 6@tie{}means@tie{}B), and @code{alter} is +@code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (Note the leading comma.) + +Alternatively, for each item in the list, using the more concise format +@code{(step . alter)} specifies that the same alteration should hold in all +octaves. + +Here is an example of a possible key signature for generating a whole-tone +scale: +" + doctitle = "Non-traditional key signatures" +} % begin verbatim + + +\relative c' { + \set Staff.keySignature = #`(((0 . 6) . ,FLAT) + ((0 . 5) . ,FLAT) + ((0 . 3) . ,SHARP)) + c4 d e fis + aes4 bes c2 +} + diff --git a/Documentation/snippets/numbers-as-easy-note-heads.ly b/Documentation/snippets/numbers-as-easy-note-heads.ly new file mode 100644 index 0000000000..da442fa163 --- /dev/null +++ b/Documentation/snippets/numbers-as-easy-note-heads.ly @@ -0,0 +1,80 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Las cabezas de nota de notación fácil utilizan la propiedad +@code{note-names} del objeto @code{NoteHead} para determinar lo que +aparece dentro de la cabeza. Mediante la sobreescritura de esta +propiedad, es posible imprimir números que representen el grado de la +escala. + +Se puede crear un grabador simple que haga esto para la cabeza de cada +nota que ve. + +" + + doctitlees = "Números como notas de notación fácil" + + lsrtags = "pitches" + texidoc = " +Easy notation note heads use the @code{note-names} property +of the @code{NoteHead} object to determine what appears inside +the note head. By overriding this property, it is possible +to print numbers representing the scale-degree. + +A simple engraver can be created to do this for every note head +object it sees. +" + doctitle = "Numbers as easy note heads" +} % begin verbatim + + +#(define Ez_numbers_engraver + (list + (cons 'acknowledgers + (list + (cons 'note-head-interface + (lambda (engraver grob source-engraver) + (let* ((context (ly:translator-context engraver)) + (tonic-pitch (ly:context-property context 'tonic)) + (tonic-name (ly:pitch-notename tonic-pitch)) + (grob-pitch + (ly:event-property (event-cause grob) 'pitch)) + (grob-name (ly:pitch-notename grob-pitch)) + (delta (modulo (- grob-name tonic-name) 7)) + (note-names + (make-vector 7 (number->string (1+ delta))))) + (ly:grob-set-property! grob 'note-names note-names)))))))) + +#(set-global-staff-size 26) + +\layout { + ragged-right = ##t + \context { + \Voice + \consists \Ez_numbers_engraver + } +} + +\relative c' { + \easyHeadsOn + c4 d e f + g4 a b c \break + + \key a \major + a,4 b cis d + e4 fis gis a \break + + \key d \dorian + d,4 e f g + a4 b c d +} diff --git a/Documentation/snippets/open-string-harmonics-in-tablature.ly b/Documentation/snippets/open-string-harmonics-in-tablature.ly new file mode 100644 index 0000000000..4469dbc2d8 --- /dev/null +++ b/Documentation/snippets/open-string-harmonics-in-tablature.ly @@ -0,0 +1,85 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Referencia para armónicos sobre cuerdas al aire (armónicos naturales): + +" + doctitlees = "Referencia para armónicos sobre cuerdas al aire" + +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Referenz für Flageolett von offenen Saiten: +" + doctitlede = "Referenz für Flageolett von offenen Saiten" + + lsrtags = "fretted-strings" + texidoc = " +Reference for open-string harmonics: +" + doctitle = "Reference for open-string harmonics" +} % begin verbatim + + +openStringHarmonics = { + %first harmonic + \harmonicByFret #12 e,2\6_\markup{"1st harm."} + \harmonicByRatio #1/2 e,\6 + %second harmonic + \harmonicByFret #7 e,\6_\markup{"2nd harm. - - - -"} + \harmonicByRatio #1/3 e,\6 + \harmonicByFret #19 e,\6 + \harmonicByRatio #2/3 e,\6 + %\harmonicByFret #19 < e,\6 a,\5 d\4 > + %\harmonicByRatio #2/3 < e,\6 a,\5 d\4 > + %third harmonic + \harmonicByFret #5 e,\6_\markup{"3rd harm. - - - -"} + \harmonicByRatio #1/4 e,\6 + \harmonicByFret #24 e,\6 + \harmonicByRatio #3/4 e,\6 + \break + %fourth harmonic + \harmonicByFret #4 e,\6_\markup{"4th harm. - - - - - - - - - - - - -"} + \harmonicByRatio #1/5 e,\6 + \harmonicByFret #9 e,\6 + \harmonicByRatio #2/5 e,\6 + \harmonicByFret #16 e,\6 + \harmonicByRatio #3/5 e,\6 + %fifth harmonic + \harmonicByFret #3 e,\6_\markup{"5th harm."} + \harmonicByRatio #1/6 e,\6 + \break + %sixth harmonic + \harmonicByFret #2.7 e,\6_\markup{"6th harm."} + \harmonicByRatio #1/7 e,\6 + %seventh harmonic + \harmonicByFret #2.3 e,\6_\markup{"7th harm."} + \harmonicByRatio #1/8 e,\6 + %eighth harmonic + \harmonicByFret #2 e,\6_\markup{"8th harm."} + \harmonicByRatio #1/9 e,\6 +} + +\score { + << + \new Staff { + \new Voice { + \clef "treble_8" + \openStringHarmonics + } + } + \new TabStaff { + \new TabVoice { + \openStringHarmonics + } + } + >> +} diff --git a/Documentation/snippets/orchestra,-choir-and-piano-template.ly b/Documentation/snippets/orchestra,-choir-and-piano-template.ly new file mode 100644 index 0000000000..e7c190465e --- /dev/null +++ b/Documentation/snippets/orchestra,-choir-and-piano-template.ly @@ -0,0 +1,202 @@ +%% 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 { +%% 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: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Esta plantilla muestra el uso de contextos @code{StaffGroup} y +@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo +tipo, y una forma de usar @code{\\transpose} de manera que unas +variables contengan la música para instrumentos transpositores en +afinación de concierto. + +" + doctitlees = "Plantilla de orquesta con coro y piano" + +%% Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b + + texidocde = " +Diese Vorlage zeigt die Benutzung von geschachtelten +@code{StaffGroup}- und @code{GrandStaff}-Kontexte, um +Instrumente in Untergruppen zu unterteilen, und die +Benutzung von @code{\\transpose} für transponierende +Instrumente. Alle Noten werden in C geschrieben. Noten +können in C eingegeben werden, oder auch in der Tonart +des Instrumentes: dann müssen sie zuerst nach C transponiert +werden, bevor sie einer Variable zugewiesen werden. + +" + doctitlede = "Orchester Chor und Klavier" + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Ce canevas illustre l'utilisation de contextes @code{StaffGroup} pour +regrouper les instruments selon leur famille, imbriqués dans un +@code{GrandStaff}, ainsi que le recours à la fonction @code{\\transpose} +pour les instruments transpositeurs. Dans tous les identificateurs, la +musique est stockée en ut. Les notes peuvent tout aussi bien être +saisies en ut ou dans la tonalité particulière de l'instrument avant +d'être transposées puis affectées à une variable. + +" + doctitlefr = "Orchestre chœur et piano" + + texidoc = " +This template demonstrates the use of nested @code{StaffGroup} and +@code{GrandStaff} contexts to sub-group instruments of the same type +together, and a way to use @code{\\transpose} so that variables hold +music for transposing instruments at concert pitch. + +" + doctitle = "Orchestra choir and piano template" +} % begin verbatim + +#(set-global-staff-size 17) +\paper { + indent = 3.0\cm % space for instrumentName + short-indent = 1.5\cm % space for shortInstrumentName +} + +fluteMusic = \relative c' { \key g \major g'1 b } +% Pitches as written on a manuscript for Clarinet in A +% are transposed to concert pitch. +clarinetMusic = \transpose c' a + \relative c'' { \key bes \major bes1 d } +trumpetMusic = \relative c { \key g \major g''1 b } +% Key signature is often omitted for horns +hornMusic = \transpose c' f + \relative c { d'1 fis } +percussionMusic = \relative c { \key g \major g1 b } +sopranoMusic = \relative c'' { \key g \major g'1 b } +sopranoLyrics = \lyricmode { Lyr -- ics } +altoIMusic = \relative c' { \key g \major g'1 b } +altoIIMusic = \relative c' { \key g \major g'1 b } +altoILyrics = \sopranoLyrics +altoIILyrics = \lyricmode { Ah -- ah } +tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b } +tenorLyrics = \sopranoLyrics +pianoRHMusic = \relative c { \key g \major g''1 b } +pianoLHMusic = \relative c { \clef bass \key g \major g1 b } +violinIMusic = \relative c' { \key g \major g'1 b } +violinIIMusic = \relative c' { \key g \major g'1 b } +violaMusic = \relative c { \clef alto \key g \major g'1 b } +celloMusic = \relative c { \clef bass \key g \major g1 b } +bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b } + +\score { + << + \new StaffGroup = "StaffGroup_woodwinds" << + \new Staff = "Staff_flute" { + \set Staff.instrumentName = #"Flute" + % shortInstrumentName, midiInstrument, etc. + % may be set here as well + \fluteMusic + } + \new Staff = "Staff_clarinet" { + \set Staff.instrumentName = + \markup { \concat { "Clarinet in B" \flat } } + % Declare that written Middle C in the music + % to follow sounds a concert B flat, for + % output using sounded pitches such as MIDI. + \transposition bes + % Print music for a B-flat clarinet + \transpose bes c' \clarinetMusic + } + >> + \new StaffGroup = "StaffGroup_brass" << + \new Staff = "Staff_hornI" { + \set Staff.instrumentName = #"Horn in F" + \transposition f + \transpose f c' \hornMusic + } + \new Staff = "Staff_trumpet" { + \set Staff.instrumentName = #"Trumpet in C" + \trumpetMusic + } + >> + \new RhythmicStaff = "RhythmicStaff_percussion" << + \set RhythmicStaff.instrumentName = #"Percussion" + \percussionMusic + >> + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff { \pianoRHMusic } + \new Staff { \pianoLHMusic } + >> + \new ChoirStaff = "ChoirStaff_choir" << + \new Staff = "Staff_soprano" { + \set Staff.instrumentName = #"Soprano" + \new Voice = "soprano" + \sopranoMusic + } + \new Lyrics \lyricsto "soprano" { \sopranoLyrics } + \new GrandStaff = "GrandStaff_altos" + \with { \accepts Lyrics } << + \new Staff = "Staff_altoI" { + \set Staff.instrumentName = #"Alto I" + \new Voice = "altoI" + \altoIMusic + } + \new Lyrics \lyricsto "altoI" { \altoILyrics } + \new Staff = "Staff_altoII" { + \set Staff.instrumentName = #"Alto II" + \new Voice = "altoII" + \altoIIMusic + } + \new Lyrics \lyricsto "altoII" { \altoIILyrics } + >> + \new Staff = "Staff_tenor" { + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenor" + \tenorMusic + } + \new Lyrics \lyricsto "tenor" { \tenorLyrics } + >> + \new StaffGroup = "StaffGroup_strings" << + \new GrandStaff = "GrandStaff_violins" << + \new Staff = "Staff_violinI" { + \set Staff.instrumentName = #"Violin I" + \violinIMusic + } + \new Staff = "Staff_violinII" { + \set Staff.instrumentName = #"Violin II" + \violinIIMusic + } + >> + \new Staff = "Staff_viola" { + \set Staff.instrumentName = #"Viola" + \violaMusic + } + \new Staff = "Staff_cello" { + \set Staff.instrumentName = #"Cello" + \celloMusic + } + \new Staff = "Staff_bass" { + \set Staff.instrumentName = #"Double Bass" + \bassMusic + } + >> + >> + \layout { } +} + diff --git a/Documentation/snippets/ottava-text.ly b/Documentation/snippets/ottava-text.ly new file mode 100644 index 0000000000..4ecd940c18 --- /dev/null +++ b/Documentation/snippets/ottava-text.ly @@ -0,0 +1,71 @@ +%% 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 = "pitches, text" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Internamente, @code{\\ottava} establece las propiedades +@code{ottavation} (por ejemplo, a @code{8va} o a @code{8vb}) y +@code{middleCPosition}. Para sobreescribir el texto del corchete, +ajuste @code{ottavation} después de invocar la instrucción +@code{\\ottava}. + +" + + doctitlees = "Texto de octava alta y baja" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Intern setzt die @code{set-octavation}-Funktion die Eigenschaften +@code{ottavation} (etwa auf den Wert @code{\"8va\"} oder @code{\"8vb\"}) +und @code{middleCPosition}. Um den Text der Oktavierungsklammer zu +ändern, kann @code{ottavation} manuell gesetzt werden, nachdem +@code{set-octavation} benützt wurde. + +" + +doctitlede = "Ottava-Text" + +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +En interne, la fonction @code{\\ottava} détermine les +propriétés @code{ottavation} (p.ex. en @code{\"8va\"} ou @code{\"8vb\"}) +et @code{centralCPosition}. Vous pouvez modifier le texte d'une marque +d'octaviation en définissant @code{ottavation} après avoir fait appel +à @code{ottava} : + +" + + doctitlefr = "Texte des marques d'octaviation" + + + texidoc = " +Internally, @code{\\ottava} sets the properties @code{ottavation} (for +example, to @code{8va} or @code{8vb}) and @code{middleCPosition}. To +override the text of the bracket, set @code{ottavation} after invoking +@code{\\ottava}. + +" + doctitle = "Ottava text" +} % begin verbatim + +{ + \ottava #1 + \set Staff.ottavation = #"8" + c''1 + \ottava #0 + c'1 + \ottava #1 + \set Staff.ottavation = #"Text" + c''1 +} + diff --git a/Documentation/snippets/outputting-the-version-number.ly b/Documentation/snippets/outputting-the-version-number.ly new file mode 100644 index 0000000000..aef2e51349 --- /dev/null +++ b/Documentation/snippets/outputting-the-version-number.ly @@ -0,0 +1,32 @@ +%% 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 = "text, titles" + + texidoc = " +By putting the output of + @code{lilypond-version} into a lyric, it is possible to print the + version number of LilyPond in a score, or in a document generated + with @code{lilypond-book}. Another possibility is to append the + version number to the doc-string, in this manner: + +" + doctitle = "Outputting the version number" +} % begin verbatim + +\score { + \new Lyrics { + \override Score.RehearsalMark #'self-alignment-X = #LEFT + \mark #(string-append "Processed with LilyPond version " (lilypond-version)) + s2 + } +} + + + diff --git a/input/lsr/page-label.ly b/Documentation/snippets/page-label.ly similarity index 84% rename from input/lsr/page-label.ly rename to Documentation/snippets/page-label.ly index bbdd8dfb26..35533e7259 100644 --- a/input/lsr/page-label.ly +++ b/Documentation/snippets/page-label.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "spacing" diff --git a/input/lsr/paper-and-layout-intro.itely b/Documentation/snippets/paper-and-layout-intro.itely similarity index 100% rename from input/lsr/paper-and-layout-intro.itely rename to Documentation/snippets/paper-and-layout-intro.itely diff --git a/input/lsr/paper-and-layout.snippet-list b/Documentation/snippets/paper-and-layout.snippet-list similarity index 85% rename from input/lsr/paper-and-layout.snippet-list rename to Documentation/snippets/paper-and-layout.snippet-list index 81975b1181..303b979a8a 100644 --- a/input/lsr/paper-and-layout.snippet-list +++ b/Documentation/snippets/paper-and-layout.snippet-list @@ -4,4 +4,5 @@ changing-the-staff-size.ly clip-systems.ly creating-blank-staves.ly demonstrating-all-headers.ly +setting-system-separators.ly table-of-contents.ly diff --git a/Documentation/snippets/partcombine-and-autobeamoff.ly b/Documentation/snippets/partcombine-and-autobeamoff.ly new file mode 100644 index 0000000000..a892395e7a --- /dev/null +++ b/Documentation/snippets/partcombine-and-autobeamoff.ly @@ -0,0 +1,163 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Puede ser difícil comprender la función de @code{\\autoBeamOff} cuando +se usa con @code{\\partcombine}. + +Puede ser preferible usar + + +@code{\\set Staff.autoBeaming = ##f} + + +en su lugar, para asegurarse de que el barrado automático se desactiva +para todo el pentagrama. + + +@code{\\partcombine} funciona aparentemente con tres voces: plica +arriba cuando hay una sola voz, plica abajo con la otra, y plica +arriba cuando está combinada. + + +Una llamada a @code{\\autoBeamOff} en el primer argumento de +partcombine se aplica a la voz que está activa en el momento en que se +procesa la llamada, ya sea voz única con la plica hacia arriba, hacia +abajo o combinadas. Una llamada a @code{\\autoBeamOff} en el segundo +argumento se aplica a la voz que está sola con la plica abajo. + + +Para pode usar @code{\\autoBeamOff} con el objeto de detener todo el +barrado automático cuando se usa con @code{\\partcombine}, es +necesario hacer tres llamadas a @code{\\autoBeamOff}. + + + + +" + doctitlees = "Partcombine y autoBeamOff" +%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde = " +Die Funktionsweise von @code{@bs{}autoBeamOff}, wenn es zusammen mit +@code{@bs{}partcombine} eingesetzt wird, kann schwer zu verstehen sein. +Es kann besser sein, anstatt dessen + +@example +\set Staff.autobeaming = ##f +@end example + +@noindent +zu benutzen, um sicherzustellen, dass die automatische Bebalkung für das +gesamte System ausgeschaltet ist. + +@code{\\partcombine} funktioniert offensichtlich mit 3 Stimme (Hals nach oben +einfach, Hals nach unten einfach, Hals nach oben kombiniert). + +Ein @code{\\autoBeamOff}-Befehl im ersten Argument von @code{\\partcombine} +gilt für die Stimme, die zu dem Zeitpunkt aktiv ist, an dem der Befehl +verarbeitet wird, entweder für Hals nach oben, nach unten oder Hals nach +oben kombiniert. Ein @code{\\autoBeamOff}-Befehl im zweiten Argument gilt +für die Stimme, die mit Hals nach unten einfach ist. + +Um @code{\\autoBeamOff} zu benutzen, damit alle automatischen Balken aufhören, +wenn man es mit @code{\\partcombine} verwendet, muss @code{\\autoBeamOff} +@emph{dreimal} aufgerufen werden. + +" +doctitlede = "Partcombine und autoBeamOff" + +%% Translation of GIT committish: e1a149d0cc60b02e86209387958f4028567dd366 + texidocfr = " +Le fonction @code{@bs{}autoBeamOff} dans le cadre d'un +@code{@bs{}partcombine} agit de façon bien particulière@tie{}; c'est +pourquoi il vaut mieux tout d'abord recourir à + +@example +\set Staff.autobeaming = ##f +@end example + +@noindent +pour désactiver les ligatures automatiques pour l'ensemble de la portée +concernée. + +L'instruction @code{\\partcombine} fonctionne apparament sur la base de +trois voix@tie{}: solo hampes montantes, solo hampes descendantes et +ensemble hampes montantes. + +Lorsque @code{\\autoBeamOff} apparaît dans le premier argument de la +combinaison, il s'applique à la voix active à ce moment précis, qu'il +s'agisse du solo hampes montantes ou du combiné hampes montantes. +Lorsqu'elle est introduite dans le second argument, la commande +@code{\\autoBeamOff} s'appliquera au solo hampes descendantes. + +Vous devrez donc, afin que @code{\\autoBeamOff} soit pleinement +opérationnel dans le cadre d'un @code{\\partcombine}, l'introduire aux +@strong{trois} niveaux. + +" +doctitlefr = "Partcombine et autoBeamOff" + + + texidoc = " +The function of @code{\\autoBeamOff} when used with +@code{\\partcombine} can be difficult to understand. + +It may be preferable to use + + +@code{\\set Staff.autoBeaming = ##f} + + +instead, to ensure that autobeaming will be turned off for the entire +staff. + + +@code{\\partcombine} apparently works with 3 voices -- stem up single, +stem down single, stem up combined. + + +An @code{\\autoBeamOff} call in the first argument to partcombine will +apply to the voice that is active at the time the call is processed, +either stem up single or stem up combined. An @code{\\autoBeamOff} call +in the second argument will apply to the voice that is stem down single. + + +In order to use @code{\\autoBeamOff} to stop all autobeaming when used +with @code{\\partcombine}, it will be necessary to use three calls to +@code{\\autoBeamOff}. + + + + +" + doctitle = "Partcombine and autoBeamOff" +} % begin verbatim + +{ + %\set Staff.autoBeaming = ##f % turns off all autobeaming + \partcombine + { + \autoBeamOff % applies to split up stems + \repeat unfold 4 a'16 + %\autoBeamOff % applies to combined up stems + \repeat unfold 4 a'8 + \repeat unfold 4 a'16 + } + { + \autoBeamOff % applies to down stems + \repeat unfold 4 f'8 + \repeat unfold 8 f'16 | + } +} diff --git a/Documentation/snippets/percent-repeat-count-visibility.ly b/Documentation/snippets/percent-repeat-count-visibility.ly new file mode 100644 index 0000000000..dba0e30622 --- /dev/null +++ b/Documentation/snippets/percent-repeat-count-visibility.ly @@ -0,0 +1,52 @@ +%% 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 = "repeats, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se pueden mostrar los contadores de las repeticiones del tipo +porcentaje a intervalos regulares mediante el establecimiento de +la propiedad de contexto @code{repeatCountVisibility}. + +" + doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt +werden, indem man die Eigenschaft @code{repeatCountVisibility} beeinflusst. +" + doctitlede = "Sichtbarkeit von Prozent-Wiederholungen" + +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Le numéro de mesure répétée sera imprimé à intervalle régulier si vous +déterminez la propriété de contexte @code{repeatCountVisibility}. + +" + doctitlefr = "Affichage du numéro de répétition en pourcent" + + + texidoc = " +Percent repeat counters can be shown at regular intervals by setting +the context property @code{repeatCountVisibility}. + +" + doctitle = "Percent repeat count visibility" +} % begin verbatim + +\relative c'' { + \set countPercentRepeats = ##t + \set repeatCountVisibility = #(every-nth-repeat-count-visible 5) + \repeat percent 10 { c1 } \break + \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) + \repeat percent 6 { c1 d1 } +} diff --git a/Documentation/snippets/percent-repeat-counter.ly b/Documentation/snippets/percent-repeat-counter.ly new file mode 100644 index 0000000000..293e398834 --- /dev/null +++ b/Documentation/snippets/percent-repeat-counter.ly @@ -0,0 +1,52 @@ +%% 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 = "repeats" + +%% 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 +ve en este ejemplo: + +" + doctitlees = "Contador de repeticiones de tipo porcentaje" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen +Zähler, wenn man die entsprechende Eigenschaft einsetzt: + +" + doctitlede = "Prozent-Wiederholungen zählen" + +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Les répétitions de plus de 2 mesures sont surmontées d'un compteur, +si l'on active la propriété @code{countPercentRepeats} comme le montre +l'exemple suivant : + +" + doctitlefr = "Compteur de répétition en pourcent" + + + texidoc = " +Measure repeats of more than two repeats can get a counter when the +convenient property is switched, as shown in this example: + +" + doctitle = "Percent repeat counter" +} % begin verbatim + +\relative c'' { + \set countPercentRepeats = ##t + \repeat percent 4 { c1 } +} + diff --git a/input/lsr/percussion-beaters.ly b/Documentation/snippets/percussion-beaters.ly similarity index 93% rename from input/lsr/percussion-beaters.ly rename to Documentation/snippets/percussion-beaters.ly index 87109f74be..c0f48e3e93 100644 --- a/input/lsr/percussion-beaters.ly +++ b/Documentation/snippets/percussion-beaters.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "percussion" @@ -15,8 +19,8 @@ demonstrated in this example. doctitle = "Percussion beaters" } % begin verbatim -stick = \markup { - \with-dimensions #'(0 . 5) #'(0 . 5) +stick = \markup { + \with-dimensions #'(0 . 5) #'(0 . 5) \postscript #" 0 6 translate 0.8 -0.8 scale diff --git a/input/lsr/percussion-intro.itely b/Documentation/snippets/percussion-intro.itely similarity index 100% rename from input/lsr/percussion-intro.itely rename to Documentation/snippets/percussion-intro.itely diff --git a/input/lsr/percussion.snippet-list b/Documentation/snippets/percussion.snippet-list similarity index 100% rename from input/lsr/percussion.snippet-list rename to Documentation/snippets/percussion.snippet-list diff --git a/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly b/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly new file mode 100644 index 0000000000..a6a95073ec --- /dev/null +++ b/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly @@ -0,0 +1,70 @@ +%% 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 = "rhythms" + +%% 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 +saltos de línea manuales como los automáticos dentro de un grupo de +valoración especial unido por una barra. Observe que estos grupos +sincopados se deben barrar manualmente. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch +manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt +werden können. Diese unregelmäßige Bebalkung muss allerdings manuell +gesetzt werden. + +" + doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Cet exemple peu académique démontre comment il est possible d'insérer un saut +de ligne dans un nolet portant une ligature. Ces ligatures doivent toutefois +être explicites. + +" + doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature" + + texidoc = " +This artificial example shows how both manual and automatic line breaks +may be permitted to within a beamed tuplet. Note that such off-beat +tuplets have to be beamed manually. + +" + doctitle = "Permitting line breaks within beamed tuplets" +} % begin verbatim + +\layout { + \context { + \Voice + % Permit line breaks within tuplets + \remove "Forbid_line_break_engraver" + % Allow beams to be broken at line breaks + \override Beam #'breakable = ##t + } +} +\relative c'' { + a8 + \repeat unfold 5 { \times 2/3 { c[ b a] } } + % Insert a manual line break within a tuplet + \times 2/3 { c[ b \bar "" \break a] } + \repeat unfold 5 { \times 2/3 { c[ b a] } } + c8 +} + diff --git a/Documentation/snippets/piano-template-simple.ly b/Documentation/snippets/piano-template-simple.ly new file mode 100644 index 0000000000..8847cd0746 --- /dev/null +++ b/Documentation/snippets/piano-template-simple.ly @@ -0,0 +1,77 @@ +%% 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 { +%% 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: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Presentamos a continuación una plantilla de piano sencilla con algunas +notas. + +" + doctitlees = "Plantilla de piano (sencilla)" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Hier ein einfaches Klaviersystem. + +" + doctitlede = "Vorlage für einfache Klaviernotation" + +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Voici une simple partition pour piano avec quelques notes. + +" + doctitlefr = "Piano -- cannevas simple" + + texidoc = " +Here is a simple piano staff with some notes. + +" + doctitle = "Piano template (simple)" +} % begin verbatim + +upper = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +lower = \relative c { + \clef bass + \key c \major + \time 4/4 + + a2 c +} + +\score { + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/piano-template-with-centered-dynamics.ly b/Documentation/snippets/piano-template-with-centered-dynamics.ly new file mode 100644 index 0000000000..f56fc58bce --- /dev/null +++ b/Documentation/snippets/piano-template-with-centered-dynamics.ly @@ -0,0 +1,106 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +entre pentagramas, coloca los matices dinámicos correctamente de forma +automática. + +" + doctitlees = "Plantilla de piano con matices centrados" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +多くのピアノ譜は、強弱記号を 2 つの譜の間に置きます。これを実現するにはちょっ@c +とした調整が必要ですが、そのテンプレートがここにあるので、あなた自身が調整を行@c +う必要はありません。 +" + +%% 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 +den beiden Systemen zentriert. Für LilyPond muss man die Einstellungen +etwas anpassen, aber Sie können ja das angepasste Beispiel von hier +kopieren. +" + + +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Nombre d'ouvrages pour piano font apparaître les nuances entre les deux +portées. Bien que cela nécessite quelques subtilités, voici de quoi +obtenir un tel résultat. + +" + doctitlefr = "Piano et nuances entre les portées" + + lsrtags = "expressive-marks, keyboards, template" + texidoc = " +Many piano scores have the dynamics centered between the two staves. +The @code{Dynamics} context, if placed between staves, will +automatically position dynamics correctly. + +" + doctitle = "Piano template with centered dynamics" +} % begin verbatim + + +global = { + \key c \major + \time 4/4 +} + +upper = \relative c'' { + \clef treble + a4 b c d +} + +lower = \relative c { + \clef bass + a2 c +} + +dynamics = { + s2\fff\> s4 s\!\pp +} + +pedal = { + s2\sustainOn s\sustainOff +} + +\score { + \new PianoStaff = "PianoStaff_pf" << + \new Staff = "Staff_pfUpper" << \global \upper >> + \new Dynamics = "Dynamics_pf" \dynamics + \new Staff = "Staff_pfLower" << \global \lower >> + \new Dynamics = "pedal" \pedal + >> + \layout { } +} + +\score { + \new PianoStaff = "PianoStaff_pf" << + \new Staff = "Staff_pfUpper" << \global \upper \dynamics \pedal >> + \new Staff = "Staff_pfLower" << \global \lower \dynamics \pedal >> + >> + \midi { } +} diff --git a/Documentation/snippets/piano-template-with-centered-lyrics.ly b/Documentation/snippets/piano-template-with-centered-lyrics.ly new file mode 100644 index 0000000000..70601aac28 --- /dev/null +++ b/Documentation/snippets/piano-template-with-centered-lyrics.ly @@ -0,0 +1,100 @@ +%% 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 { +%% 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: 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. + +" + doctitlees = "Plantilla de piano con letra centrada" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +旋律と歌詞のための譜表を持つ代わりに、歌詞をピアノ譜の 2 つの譜の間に置くことができます。 +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Anstatt ein eigenes System für Melodie und Text zu schreiben, können +Sie den Text auch zwischen die beiden Klaviersysteme schreiben +(und damit das zusätzliche System für die Gesangstimme auslassen). +" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Lorsque la mélodie est doublée au piano, cela ne nécessite pas forcément +une portée spécifique. Les paroles peuvent s'insérer entre les deux +portées de la partition pour piano. + +" + doctitlefr = "Piano et paroles entre les portées" + + texidoc = " +Instead of having a full staff for the melody and lyrics, lyrics can be +centered between the staves of a piano staff. + +" + doctitle = "Piano template with centered lyrics" +} % begin verbatim + +upper = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +lower = \relative c { + \clef bass + \key c \major + \time 4/4 + + a2 c +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +\score { + \new GrandStaff << + \new Staff = upper { \new Voice = "singer" \upper } + \new Lyrics \lyricsto "singer" \text + \new Staff = lower { \lower } + >> + \layout { + \context { + \GrandStaff + \accepts "Lyrics" + } + \context { + \Lyrics + \consists "Bar_engraver" + } + } + \midi { } +} + diff --git a/Documentation/snippets/piano-template-with-melody-and-lyrics.ly b/Documentation/snippets/piano-template-with-melody-and-lyrics.ly new file mode 100644 index 0000000000..4e71aaf22b --- /dev/null +++ b/Documentation/snippets/piano-template-with-melody-and-lyrics.ly @@ -0,0 +1,104 @@ +%% 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 { +%% 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: 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. + +" + doctitlees = "Plantilla de piano con melodía y letra" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜表と、その下にピアノ伴奏譜があります。 +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das nächste Beispiel ist typisch für ein Lied: Im oberen System die +Melodie mit Text, darunter Klavierbegleitung. +" + + doctitlede = "Vorlage für Klavier und Gesangsstimme" + + +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Il s'agit du format classique pour le chant : une portée pour la mélodie +et les paroles au-dessus de l'accompagnement au piano. + +" + doctitlefr = "Piano mélodie et paroles" + + texidoc = " +Here is a typical song format: one staff with the melody and lyrics, +with piano accompaniment underneath. + +" + doctitle = "Piano template with melody and lyrics" +} % begin verbatim + +melody = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a b c d +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +upper = \relative c'' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +lower = \relative c { + \clef bass + \key c \major + \time 4/4 + + a2 c +} + +\score { + << + \new Voice = "mel" { \autoBeamOff \melody } + \new Lyrics \lyricsto mel \text + \new PianoStaff << + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> + \layout { + \context { \Staff \RemoveEmptyStaves } + } + \midi { } +} + diff --git a/Documentation/snippets/pitches-headword.ly b/Documentation/snippets/pitches-headword.ly new file mode 100644 index 0000000000..1bc6489db9 --- /dev/null +++ b/Documentation/snippets/pitches-headword.ly @@ -0,0 +1,151 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + +% NR 1.1 Pitches + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + + +% L. v. Beethoven +% Piano sonata 21 - Dem Grafen von Waldstein Gewidmet +% chorale at measures 34 - 40+ + +\new PianoStaff << + + % RH Staff + \new Staff << + + % RH Voice 1 + \new Voice { + \set Score.currentBarNumber = #34 + \voiceOne + gs''2 ( ^ \markup \italic { dolce e molto ligato } + fs''4 + e''4 + | + ds''2 + cs''2 ) + | + ds''2 ( + e''4 + fs''4 + | + 2 + 2 ) + | + \oneVoice + \clef bass + 2 ( + 4 + 4 + | + 2 + 2 ) + | + \voiceOne + b2 %( + cs'4 + ds'4 + | + \clef treble + 4 %) + r4 r2 + } + + % RH Voice 2 + \new Voice { + \voiceTwo + \override Staff.DynamicLineSpanner #'staff-padding = #2.5 + 2 \p + 4 + 4 + | + 2 + e'2 + | + \once \override TextScript #'staff-padding = #2.5 + 2 _ \markup \italic { cresc. } + b'4 + 4 + | + b'2. ( \sf \> + a'4 ) + \clef bass + | \break + s1 \p + | + s1 + | + 4 ( + 2. ) + | + s4 + r4 r2 + } + + >> + + % LH Staff + \new Staff { + \override Staff.SustainPedalLineSpanner #'staff-padding = #5 + 2 ( \sustainOn + 4 \sustainOff + 4 + | + 2 + 2 ) \sustainOn + | + \clef bass + \slurDown + 2 ( \sustainOff + 4 + 4 \sustainOn + | + \clef treble + \voiceOne + << + { + 2 + 2 ) + } + \new Voice { + \voiceTwo + b1 \sustainOff + } + >> + \oneVoice + | + %\break + \clef bass + 2 ( + 4 + 4 + | + 2 + 2 ) \sustainOn + | + 1 ( \sustainOff + | + 4 ) + r4 r2 + } + +>> diff --git a/input/lsr/pitches-intro.itely b/Documentation/snippets/pitches-intro.itely similarity index 100% rename from input/lsr/pitches-intro.itely rename to Documentation/snippets/pitches-intro.itely diff --git a/Documentation/snippets/pitches.snippet-list b/Documentation/snippets/pitches.snippet-list new file mode 100644 index 0000000000..47a78e3584 --- /dev/null +++ b/Documentation/snippets/pitches.snippet-list @@ -0,0 +1,26 @@ +adding-ambitus-per-voice.ly +altering-the-length-of-beamed-stems.ly +ambitus-with-multiple-voices.ly +ambitus.ly +applying-note-head-styles-depending-on-the-step-of-the-scale.ly +changing-the-ambitus-gap.ly +changing-the-interval-of-lines-on-the-stave.ly +clefs-can-be-transposed-by-arbitrary-amounts.ly +coloring-notes-depending-on-their-pitch.ly +creating-a-sequence-of-notes-on-various-pitches.ly +dodecaphonic-style-accidentals-for-each-note-including-naturals.ly +forcing-a-clef-symbol-to-be-displayed.ly +generating-random-notes.ly +hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly +keep-change-clefs-full-sized.ly +makam-example.ly +non-traditional-key-signatures.ly +numbers-as-easy-note-heads.ly +orchestra,-choir-and-piano-template.ly +ottava-text.ly +preventing-extra-naturals-from-being-automatically-added.ly +preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly +quoting-another-voice-with-transposition.ly +separating-key-cancellations-from-key-signature-changes.ly +transposing-pitches-with-minimum-accidentals-smart-transpose.ly +tweaking-clef-properties.ly diff --git a/Documentation/snippets/placement-of-right-hand-fingerings.ly b/Documentation/snippets/placement-of-right-hand-fingerings.ly new file mode 100644 index 0000000000..2e8a0a2010 --- /dev/null +++ b/Documentation/snippets/placement-of-right-hand-fingerings.ly @@ -0,0 +1,66 @@ +%% 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 = "fretted-strings" + +%% 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 +propiedad específica, como se muestra en el ejemplo siguiente. Nota: +se debe usar una construcción de acorde. + +" + doctitlees = "Posicionamiento de digitaciones de mano derecha" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Man kann die Positionierung von Fingersatz der rechten Hand besser +kontrollieren, wenn eine bestimmte Eigenschaft gesetzt wird, wie +das folgende Beispiel zeigt: + +" + doctitlede = "Positionierung von Fingersatz der rechten Hand" + +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +Vous disposez d'une propriété spécifique qui permet de contrôler plus +finement le positionnement des doigtés main droite, comme l'indique +l'exemple suivant. + +" + doctitlefr = "Positionnement des doigtés main droite" + + + texidoc = " +It is possible to exercise greater control over the placement of +right-hand fingerings by setting a specific property, as demonstrated +in the following example. Note: you must use a chord construct + +" + doctitle = "Placement of right-hand fingerings" +} % begin verbatim + +#(define RH rightHandFinger) + +\relative c { + \clef "treble_8" + + \set strokeFingerOrientations = #'(up down) + 4 + + \set strokeFingerOrientations = #'(up right down) + 4 + + \set strokeFingerOrientations = #'(left) + 2 +} + diff --git a/Documentation/snippets/polyphony-in-tablature.ly b/Documentation/snippets/polyphony-in-tablature.ly new file mode 100644 index 0000000000..aa1795f1ad --- /dev/null +++ b/Documentation/snippets/polyphony-in-tablature.ly @@ -0,0 +1,75 @@ +%% 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 = "fretted-strings" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +La polifonía se crea de la misma forma en un @code{TabStaff} que +en una pauta normal. + +" + doctitlees = "Polifonía en tablaturas" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Polyphonie kann in einer Tabulatur (@code{TabStaff}) genauso wie in einem +normalen Notensystem erstellt werden. + +" + doctitlede = "Polyphonie in einer Tabulatur" + +%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b + + texidocfr = " +Une section polyphonique s'obtient dans un @code{TabStaff} de la +même manière que dans une portée normale. + +" + doctitlefr = "Polyphonie en mode tablature" + + + texidoc = " +Polyphony is created the same way in a @code{TabStaff} as in a regular +staff. + +" + doctitle = "Polyphony in tablature" +} % begin verbatim + +upper = \relative c' { + \time 12/8 + \key e \minor + \voiceOne + r4. r8 e, fis g16 b g e e' b c b a g fis e +} + +lower = \relative c { + \key e \minor + \voiceTwo + r16 e d c b a g4 fis8 e fis g a b c +} + +\score { + << + \new StaffGroup = "tab with traditional" << + \new Staff = "guitar traditional" << + \clef "treble_8" + \context Voice = "upper" \upper + \context Voice = "lower" \lower + >> + \new TabStaff = "guitar tab" << + \context TabVoice = "upper" \upper + \context TabVoice = "lower" \lower + >> + >> + >> +} + diff --git a/Documentation/snippets/positioning-arpeggios.ly b/Documentation/snippets/positioning-arpeggios.ly new file mode 100644 index 0000000000..e2ed8d2ddc --- /dev/null +++ b/Documentation/snippets/positioning-arpeggios.ly @@ -0,0 +1,38 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Si necesitamos alargar o acortar un símbolo de arpegio, podemos +modificar independientemente los extremos superior e inferior. + +" + doctitlees = "Posicionar símbolos de arpegio" + + + + texidoc = " +If you need to extend or shorten an arpeggio, you can modify the upper +and lower start positions independently. + +" + doctitle = "Positioning arpeggios" +} % begin verbatim + +\relative c' { + 1\arpeggio + \once \override Arpeggio #'positions = #'(-5 . 0) + 1\arpeggio + \once \override Arpeggio #'positions = #'(0 . 5) + 1\arpeggio + \once \override Arpeggio #'positions = #'(-5 . 5) + 1\arpeggio +} diff --git a/input/lsr/positioning-fingering-indications-precisely.ly b/Documentation/snippets/positioning-fingering-indications-precisely.ly similarity index 79% rename from input/lsr/positioning-fingering-indications-precisely.ly rename to Documentation/snippets/positioning-fingering-indications-precisely.ly index b5cb3eb951..17a8603edc 100644 --- a/input/lsr/positioning-fingering-indications-precisely.ly +++ b/Documentation/snippets/positioning-fingering-indications-precisely.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "editorial-annotations" diff --git a/Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly b/Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly new file mode 100644 index 0000000000..3f12902a1c --- /dev/null +++ b/Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly @@ -0,0 +1,46 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Cuando se colocan figuras sobre líneas adicionales, sus barras se +sitúan generalmente en medio del pentagrama. La barra de las notas de +adorno es más corta y las notas de adorno sobre líneas adicionales +podrían tener la barra fuera del pentagrama. Podemos corregir este +barrado para las notas de adorno. + +" + doctitlees = "Colocar las barras de las notas de adorno a la misma altura que las barras de notas normales" + + + + texidoc = " +When notes are placed on ledger lines, their beams are usually centred +on the stave. Grace notes beams are shorter and grace notes on ledger +lines may well have beams outside the stave. You can override this +beaming for grace notes. + +" + doctitle = "Positioning grace note beams at the height of normal note beams" +} % begin verbatim + +\relative c { + f8[ e] + \grace { + f8[ e] + \override Stem #'no-stem-extend = ##f + f8[ e] + \revert Stem #'no-stem-extend + } + f8[ e] +} + diff --git a/Documentation/snippets/positioning-grace-notes-with-floating-space.ly b/Documentation/snippets/positioning-grace-notes-with-floating-space.ly new file mode 100644 index 0000000000..11a71361aa --- /dev/null +++ b/Documentation/snippets/positioning-grace-notes-with-floating-space.ly @@ -0,0 +1,75 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Al establecer la propiedad @code{'strict-grace-spacing} hacemos que +las columnas musicales para las notas de adorno sean @q{flotantes}, es +decir, desacopladas de las notas que no son de adorno: primero se +aplica el espaciado de las notas normales, y luego se ponen las +columnas musicales de las notas de adorno a la izquierda de las +columnas musicales de las notas principales. + +" + + doctitlees = "Posicionamiento de las notas de adorno con espacio flotante" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wenn man die Eigenschaft @code{'strict-grace-spacing} aktiviert, +werden die Verzierungsnoten \"fließend\" gemacht, d.h. sie sind +von den normalen Noten los gekoppelt: Zuerst werden die normalen +Noten platziert, dann erst die Verzierungen links von der +Hauptnote gesetzt. + +" + doctitlede = "Positionierung von Verzierungen mit verschiebbarem Platz" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Lorsque vous activez la propriété @code{'strict-grace-spacing}, +l'espacement des notes d'ornement se fera de manière @qq{élastique}. +Autrement dit, elles seront décollées de leur note de rattachement : +LilyPond commence par espacer les notes normales, puis les ornements +sont placés à la gauche de leur note de rattachement. + +" + doctitlefr = "Positionnement des notes d'ornement avec espace flottant" + + texidoc = " +Setting the property @code{'strict-grace-spacing} makes the musical +columns for grace notes 'floating', i.e., decoupled from the non-grace +notes: first the normal notes are spaced, then the (musical columns of +the) graces are put left of the musical columns for the main notes. + +" + doctitle = "Positioning grace notes with floating space" +} % begin verbatim + +\relative c'' { + << + \override Score.SpacingSpanner #'strict-grace-spacing = ##t + \new Staff \new Voice { + \afterGrace c4 { c16[ c8 c16] } + c8[ \grace { b16[ d] } c8] + c4 r + } + \new Staff { + c16 c c c c c c c c4 r + } + >> +} + diff --git a/Documentation/snippets/positioning-multi-measure-rests.ly b/Documentation/snippets/positioning-multi-measure-rests.ly new file mode 100644 index 0000000000..d1c50b847e --- /dev/null +++ b/Documentation/snippets/positioning-multi-measure-rests.ly @@ -0,0 +1,88 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Posicionar los silencios multicompás" + texidoces = " +A diferencia de los silencios normales, no existe una instrucción +predefinida para modificar la posición predeterminada de un +símbolo de silencio multicompás sobre el pentagrama, adjuntándolo +a una nota, independientemente de cuál sea su forma. Sin embargo, +en la música polifónica los silencios multicompás de las voces de +numeración par e impar están separados verticalmente. La +colocación de los silencios multicompás se puede controlar como se +ve a continuación: + +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die +vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an +eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die +Position der Pausen von geraden und ungeraden Stimmen voneinander +unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert +werden: + " + doctitlede = "Positionierung von Ganztaktpausen" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Si l'on peut positionner verticalement un silence simple en le +rattachant à une note, il n'en va pas de même pour un silence +multi-mesures. Néanmoins, et uniquement dans le cadre de musique +polyphonique, les silences multi-mesures sont positionnés différemment +selon qu'ils appartiennent à une voix au numéro pair ou impair. Le +positionnement des silences multi-mesures peut se contrôler ainsi : +" + doctitlefr = "Positionnement des silences multi-mesures" + + texidoc = " +Unlike ordinary rests, there is no predefined command to change the +staff position of a multi-measure rest symbol of either form by +attaching it to a note. However, in polyphonic music multi-measure +rests in odd-numbered and even-numbered voices are vertically +separated. The positioning of multi-measure rests can be controlled as +follows: + +" + doctitle = "Positioning multi-measure rests" +} % begin verbatim + +\relative c'' { + % MMR - Multi-Measure Rest + % MMRs by default are set under the fourth line + R1 + % They can be moved with an override + \override MultiMeasureRest #'staff-position = #-2 + R1 + % A value of 0 is the default position; + % the following trick moves the rest to the center line + \override MultiMeasureRest #'staff-position = #-0.01 + R1 + % MMRs in odd-numbered voices are under the top line + << { R1 } \\ { a1 } >> + % MMRs in even-numbered voices are under the bottom line + << { c1 } \\ { R1 } >> + % They remain separated even in empty measures + << { R1 } \\ { R1 } >> + % This brings them together even though there are two voices + \compressFullBarRests + << + \revert MultiMeasureRest #'staff-position + { R1*3 } + \\ + \revert MultiMeasureRest #'staff-position + { R1*3 } + >> +} diff --git a/input/lsr/positioning-segno-and-coda-with-line-break.ly b/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly similarity index 86% rename from input/lsr/positioning-segno-and-coda-with-line-break.ly rename to Documentation/snippets/positioning-segno-and-coda-with-line-break.ly index a83f39fe85..1813823270 100644 --- a/input/lsr/positioning-segno-and-coda-with-line-break.ly +++ b/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly @@ -1,13 +1,17 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "repeats, breaks" texidoc = " -If you want to place an exiting segno sign and add text like \"D.S. al -Coda\" next to it where usually the staff lines are you can use this +If you want to place an exiting segno sign and add text like @qq{D.S. +al Coda} next to it where usually the staff lines are you can use this snippet. The coda will resume in a new line. There is a variation documented in this snippet, where the coda will remain on the same line. @@ -16,7 +20,7 @@ line. doctitle = "Positioning segno and coda (with line break)" } % begin verbatim -{ +{ \clef treble \key g \major \time 4/4 @@ -24,51 +28,51 @@ line. \repeat unfold 2 { | c4 c c c } - + % Set segno sign as rehearsal mark and adjust size if needed % \once \override Score.RehearsalMark #'font-size = #3 \mark \markup { \musicglyph #"scripts.segno" } \repeat unfold 2 { | c4 c c c } - + % Set coda sign as rehearsal mark and adjust size if needed \once \override Score.RehearsalMark #'font-size = #4 \mark \markup { \musicglyph #"scripts.coda" } \repeat unfold 2 { | c4 c c c } - + % Should Coda be on anew line? % Coda NOT on new line: use \nobreak % Coda on new line: DON'T use \nobreak % \noBreak - + \bar "||" - + % Set segno sign as rehearsal mark and adjust size if needed \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible % \once \override Score.RehearsalMark #'font-size = #3 \mark \markup { \musicglyph #"scripts.segno" } - - % Here begins the trickery! + + % Here begins the trickery! % \cadenzaOn will suppress the bar count and \stopStaff removes the staff lines. - \cadenzaOn - \stopStaff - % Some examples of possible text-displays - + \cadenzaOn + \stopStaff + % Some examples of possible text-displays + % text line-aligned % ================== % Move text to the desired position % \once \override TextScript #'extra-offset = #'( 2 . -3.5 ) % | s1*0^\markup { D.S. al Coda } } - + % text center-aligned % ==================== % Move text to the desired position % \once \override TextScript #'extra-offset = #'( 6 . -5.0 ) % | s1*0^\markup { \center-column { D.S. "al Coda" } } - + % text and symbols center-aligned % =============================== % Move text to the desired position and tweak spacing for optimum text alignment @@ -77,7 +81,7 @@ line. \once \override TextScript #'X-offset = #8 \once \override TextScript #'Y-offset = #1.5 | s1*0^\markup { \center-column { "D.S. al Coda" \line { \musicglyph #"scripts.coda" \musicglyph #"scripts.tenuto" \musicglyph #"scripts.coda"} } } - + % Increasing the unfold counter will expand the staff-free space \repeat unfold 4 { s4 s4 s4 s4 @@ -86,26 +90,26 @@ line. % Resume bar count and show staff lines again \startStaff \cadenzaOff - + % Should Coda be on new line? % Coda NOT on new line: DON'T use \break % Coda on new line: use \break - \break - + \break + % Show up, you clef and key! \once \override Staff.KeySignature #'break-visibility = #end-of-line-invisible \once \override Staff.Clef #'break-visibility = #end-of-line-invisible % Set coda sign as rehearsal mark and adjust size and position - + % Put the coda sign ontop of the (treble-)clef dependend on coda's line-position - + % Coda NOT on new line, use this: % \once \override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 ) - + % Coda on new line, use this: \once \override Score.RehearsalMark #'extra-offset = #'( -8.42 . 1.75 ) - + \once \override Score.RehearsalMark #'font-size = #5 \mark \markup { \musicglyph #"scripts.coda" } diff --git a/Documentation/snippets/positioning-text-markups-inside-slurs.ly b/Documentation/snippets/positioning-text-markups-inside-slurs.ly new file mode 100644 index 0000000000..1c3451f344 --- /dev/null +++ b/Documentation/snippets/positioning-text-markups-inside-slurs.ly @@ -0,0 +1,54 @@ +%% 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 = "expressive-marks, editorial-annotations, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Los elementos de marcado de texto deben tener la propiedad +@code{outside-staff-priority} establecida al valor falso para que se +impriman por dentro de las ligaduras de expresión. + +" + doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die +@code{outside-staff-priority}-Eigenschaft auf falsch gesetzt wird. + +" + doctitlede = "Textbeschriftung innerhalb von Bögen positionieren" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Lorsqu'il vous faut inscrire une annotation à l'intérieur d'une liaison, +la propriété @code{outside-staff-priority} doît être désactivée. + +" + doctitlefr = "Positionnement d'une annotation à l'intérieur d'une liaison" + + + texidoc = " +Text markups need to have the @code{outside-staff-priority} property +set to false in order to be printed inside slurs. + +" + doctitle = "Positioning text markups inside slurs" +} % begin verbatim + +\relative c'' { + \override TextScript #'avoid-slur = #'inside + \override TextScript #'outside-staff-priority = ##f + c2(^\markup { \halign #-10 \natural } d4.) c8 +} + + diff --git a/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly new file mode 100644 index 0000000000..7d4fae9f67 --- /dev/null +++ b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly @@ -0,0 +1,64 @@ +%% 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 = "pitches" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c +doctitlees = "Evitar que se añadan becuadros adicionales automáticamente" + +texidoces = " +Según las reglas estándar de composición +tipográfica, se imprime un becuadro antes de un sostenido o un +bemol cuando se tiene que cancelar una alteración anterior en la +misma nota. Para modificar este comportamiento, establezca el +valor de la propiedad @code{extraNatural} a @code{##f} (falso) +dentro del contexto de @code{Staff}. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch +hinzugefügt werden" + +texidocde = "Den traditionellen Notensatzregeln zufolge wird ein +Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn +ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden +soll. Um dieses Verhalten zu ändern, muss die Eigenschaft +@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden. +" + +%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e + texidocfr = " +En accord avec les règles standards de l'écriture musicale, on grave +un bécarre avant un dièse ou un bémol si on a besoin d'annuler une +altération précédente. Pour modifier ce comportement, assignez la propriété +@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux). +" + + doctitlefr = "Suppression des bécarres superflus" + + texidoc = " +In accordance with standard typesetting rules, a natural sign is +printed before a sharp or flat if a previous accidental on the same +note needs to be canceled. To change this behavior, set the +@code{extraNatural} property to @code{f} in the @code{Staff} context. + + + +" + doctitle = "Preventing extra naturals from being automatically added" +} % begin verbatim + +\relative c'' { + aeses4 aes ais a + \set Staff.extraNatural = ##f + aeses4 aes ais a +} + diff --git a/Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly b/Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly new file mode 100644 index 0000000000..0601a666e5 --- /dev/null +++ b/Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly @@ -0,0 +1,47 @@ +%% 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 = "rhythms" + + texidoc = " +The addition of a final @code{mark} can result in the loss of a final +tuplet marking. This can be overcome by setting @code{TupletBracket +#'full-length-to-extent} to @code{false}. + +" + doctitle = "Preventing final mark from removing final tuplet" +} % begin verbatim + +\new Staff { + \set tupletFullLength = ##t + \time 1/8 + \times 2/3 { c'16 c'16 c'16 } + \times 2/3 { c'16 c'16 c'16 } + \times 2/3 { c'16 c'16 c'16 } + \override Score.RehearsalMark #'break-visibility = #'#(#t #t #t) + \override Score.RehearsalMark #'direction = #DOWN + \override Score.RehearsalMark #'self-alignment-X = #RIGHT + \mark "Composed Feb 2007 - Feb 2008" +} + +\new Staff { + \set tupletFullLength = ##t + + \override TupletBracket #'full-length-to-extent = ##f + + \time 1/8 + \times 2/3 { c'16 c'16 c'16 } + \times 2/3 { c'16 c'16 c'16 } + \times 2/3 { c'16 c'16 c'16 } + \override Score.RehearsalMark #'break-visibility = #'#(#t #t #t) + \override Score.RehearsalMark #'direction = #DOWN + \override Score.RehearsalMark #'self-alignment-X = #RIGHT + \mark "Composed Feb 2007 - Feb 2008" +} + diff --git a/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly b/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly new file mode 100644 index 0000000000..eb7f372501 --- /dev/null +++ b/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly @@ -0,0 +1,68 @@ +%% 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 = "pitches" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c +doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura" + +texidoces = " + +Cuando cambia la armadura de la tonalidad, se imprimen becuadros +automáticamente para cancelar las alteraciones de las armaduras +anteriores. Esto se puede evitar estableciendo al valor @qq{falso} la +propiedad @code{printKeyCancellation} del contexto @code{Staff}. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +doctitlede = "Auflösungzeichen nicht setzen wenn die Tonart wechselt" + +texidocde = " +Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben, +um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann +verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft +im @code{Staff}-Kontext auf \"false\" gesetzt wird. +" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Après un changement de tonalité, un bécarre est imprimé pour annuler +toute altération précédente. Ceci peut être supprimé en réglant à +@code{\"false\"} la propriété @code{printKeyCancellation} du contexte +@code{Staff}. + +" + + doctitlefr = "Suppression des bécarres superflus après un changement de +tonalité" + + texidoc = " +When the key signature changes, natural signs are automatically printed +to cancel any accidentals from previous key signatures. This may be +prevented by setting to @code{f} the @code{printKeyCancellation} +property in the @code{Staff} context. + +" + doctitle = "Preventing natural signs from being printed when the key signature changes" +} % begin verbatim + +\relative c' { + \key d \major + a4 b cis d + \key g \minor + a4 bes c d + \set Staff.printKeyCancellation = ##f + \key d \major + a4 b cis d + \key g \minor + a4 bes c d +} + diff --git a/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly new file mode 100644 index 0000000000..7386aa8c6f --- /dev/null +++ b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly @@ -0,0 +1,69 @@ +%% 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 = "repeats, tweaks-and-overrides" + +%% 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: + +" + doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein @code{|:}-Taktstrich kann auch zu Beginn eines Stückes ausgegeben werden, indem +man die entsprechende Eigenschaft verändert: + +" + doctitlede = "Ein Wiederholungszeichen zu Beginn eines Stückes ausgeben" + +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Bien qu'allant à l'encontre des usages en matière de gravure, vous +imprimerez une barre de reprise (@code{|:}) en début de partition si +vous surchargez la propriété adéquate : + +" + doctitlefr = "Impression d'une barre de reprise en début de morceau" + + + texidoc = " +A @code{|:} bar line can be printed at the beginning of a piece, by +overriding the relevant property: + +" + doctitle = "Printing a repeat sign at the beginning of a piece" +} % begin verbatim + +\relative c'' { + \once \override Score.BreakAlignment #'break-align-orders = + #(make-vector 3 '(instrument-name + left-edge + ambitus + breathing-sign + clef + key-signature + time-signature + staff-bar + custos)) + \once \override Staff.TimeSignature #'space-alist = + #'((first-note . (fixed-space . 2.0)) + (right-edge . (extra-space . 0.5)) + ;; free up some space between time signature + ;; and repeat bar line + (staff-bar . (extra-space . 1))) + \bar "|:" + c1 + d1 + d4 e f g +} + diff --git a/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly b/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly new file mode 100644 index 0000000000..e3beb19046 --- /dev/null +++ b/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly @@ -0,0 +1,68 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Se pueden imprimir los números de compás a intervalos regulares +mediante el establecimiento de la propiedad +@code{barNumberVisibility}. Aquí los números de compás se +imprimen a cada dos compases excepto al final de la línea. + +" + + doctitlees = "Imprimir números de compás a intervalos regulares" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem +man die Eigenschaft @code{barNumberVisibility} definiert. In diesem +Beispiel werden die Taktnummern jeden zweiten Takt gesetzt, außer +am Ende einer Zeile. + +" + doctitlede = "Setzen der Taktnummern in regelmäßigen Intervallen" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt +qu'en tête de chaque ligne seulement, en recourrant à la propriété +@code{barNumberVisibility}. Voici comment afficher le numéro toutes les +deux mesures sauf en fin de ligne. + +" + doctitlefr = "Imprimer les numéros de mesure à intervalle régulier" + + texidoc = " +Bar numbers can be printed at regular intervals by setting the property +@code{barNumberVisibility}. Here the bar numbers are printed every two +measures except at the end of the line. + +" + doctitle = "Printing bar numbers at regular intervals" +} % begin verbatim + +\relative c' { + \override Score.BarNumber #'break-visibility = #end-of-line-invisible + \set Score.currentBarNumber = #11 + % Permit first bar number to be printed + \bar "" + % Print a bar number every second measure + \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) + c1 | c | c | c | c + \break + c1 | c | c | c | c +} + diff --git a/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly b/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly new file mode 100644 index 0000000000..e243bcf2c1 --- /dev/null +++ b/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly @@ -0,0 +1,63 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias. + +" + doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern können auch in Boxen oder Kreisen gesetzt werden. + +" + doctitlede = "Setzen von Taktnummern in Kästen oder Kreisen" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Les numéros de mesures peuvent être encadrés ou entourés d'un cercle. + +" + doctitlefr = "Inscrire le numéro de mesure dans un cadre ou un cercle" + + texidoc = " +Bar numbers can also be printed inside boxes or circles. + +" + doctitle = "Printing bar numbers inside boxes or circles" +} % begin verbatim + +\relative c' { + % Prevent bar numbers at the end of a line and permit them elsewhere + \override Score.BarNumber #'break-visibility = #end-of-line-invisible + \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4) + + % Increase the size of the bar number by 2 + \override Score.BarNumber #'font-size = #2 + + % Draw a box round the following bar number(s) + \override Score.BarNumber #'stencil + = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) + \repeat unfold 5 { c1 } + + % Draw a circle round the following bar number(s) + \override Score.BarNumber #'stencil + = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) + \repeat unfold 4 { c1 } \bar "|." +} + diff --git a/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly b/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly new file mode 100644 index 0000000000..33278e8ead --- /dev/null +++ b/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly @@ -0,0 +1,56 @@ +%% 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 = "expressive-marks" + +%% 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 +@code{Hairpin} al valor @code{#t}. + +" + doctitlees = "Impresión de reguladores utilizando la notación «al niente»" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " + Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze + notiert werden (al niente = bis zum Nichts), indem die +@code{circled-tip}-Eigenschaft des @code{Hairpin}-Objekts auf +@code{#t} gesetzt wird. + +" + doctitlede = "Crescendo Klammern al niente schreiben" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Des crescendos ou decrescendos @emph{al niente} peuvent être indiqués de +manière graphique, en assignant @emph{vrai} (@code{#t}) à la +propriété @code{circled-tip}, ce qui affiche un cercle à leur extrémité. + +" + doctitlefr = "Impression de soufflets « al niente »" + + + texidoc = " +Hairpin dynamics may be printed with a circled tip (@qq{al niente} +notation) by setting the @code{circled-tip} property of the +@code{Hairpin} object to @code{#t}. + +" + doctitle = "Printing hairpins using al niente notation" +} % begin verbatim + +\relative c'' { + \override Hairpin #'circled-tip = ##t + c2\< c\! + c4\> c\< c2\! +} + diff --git a/Documentation/snippets/printing-marks-at-the-end-of-a-line.ly b/Documentation/snippets/printing-marks-at-the-end-of-a-line.ly new file mode 100644 index 0000000000..e9e0c7ff93 --- /dev/null +++ b/Documentation/snippets/printing-marks-at-the-end-of-a-line.ly @@ -0,0 +1,51 @@ +%% 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 = "text" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Se pueden imprimir marcas al final de la línea actual, en vez de al +principio de la línea siguiente. En estos casos, puede ser preferible +alinear el borde derecho de la marca con la línea divisoria. + +" + doctitlees = "Imprimir marcas al final de una línea" +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Les indications textuelles peuvent être imprimées à la fin d'une ligne +plutôt qu'en tête de la suivante. Pensez alors à aligner l'extrémité +droite de l'indication sur la barre de mesure. + +" + doctitlefr = "Indication texuelle en fin de ligne" + + + texidoc = " +Marks can be printed at the end of the current line, instead of the +beginning of the following line. In such cases, it might be preferable +to align the right end of the mark with the bar line. + +" + doctitle = "Printing marks at the end of a line" +} % begin verbatim + +\relative c'' { + g2 c + d,2 a' + \once \override Score.RehearsalMark #'break-visibility = #end-of-line-visible + \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT + \mark "D.C. al Fine" + \break + g2 b, + c1 \bar "||" +} + diff --git a/Documentation/snippets/printing-marks-on-every-staff.ly b/Documentation/snippets/printing-marks-on-every-staff.ly new file mode 100644 index 0000000000..31d7d84d52 --- /dev/null +++ b/Documentation/snippets/printing-marks-on-every-staff.ly @@ -0,0 +1,66 @@ +%% 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 = "text" + +%% 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 +cualquiera. + +" + doctitlees = "Imprimir marcas en cualquier pentagrama" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie +können aber auch über jedem System ausgegeben werden. + +" + doctitlede = "Zeichen über jedem System ausgeben" + +%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334 + texidocfr = " +Bien que ces indications textuelles ne soient habituellement imprimées +qu'au niveau de la portée supérieure, vous pouvez forcer leur +affectation à chacune des portées. + +" + doctitlefr = "Impression des indications sur toutes les portées d'un système" + + + texidoc = " +Although text marks are normally only printed above the topmost staff, +they may also be printed on every staff. + +" + doctitle = "Printing marks on every staff" +} % begin verbatim + +\score { + << + \new Staff { c''1 \mark "molto" c'' } + \new Staff { c'1 \mark "molto" c' } + >> + \layout { + \context { + \Score + \remove "Mark_engraver" + \remove "Staff_collecting_engraver" + } + \context { + \Staff + \consists "Mark_engraver" + \consists "Staff_collecting_engraver" + } + } +} + diff --git a/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly new file mode 100644 index 0000000000..558160f4ea --- /dev/null +++ b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly @@ -0,0 +1,68 @@ +%% 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 = "rhythms, expressive-marks, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +De forma predeterminada, las indicaciones metronómicas y las +letras de ensayo se imprimen encima del pentagrama. Para +colocarlas debajo del pentagrama, simplemente ajustamos +adecuadamente la propiedad @code{direction} de +@code{MetronomeMark} o de @code{RehearsalMark}. + +" + + doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben. +Um sie unter das System zu setzen, muss die @code{direction}-Eigenschaft +von @code{MetronomeMark} oder @code{RehearsalMark} entsprechend verändert werden. + +" + doctitlede = "Metronom- und Übungszeichen unter das System setzen" + +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Les indications de tempo et les marques de repère s'impriment par défaut +au-dessus de la portée. Le fait de régler en conséquence la propriété +@code{direction} des objets @code{MetronomeMark} ou @code{RehearsalMark} +les placera au-dessous de la portée. + +" + doctitlefr = "Impression du métronome et des repères sous la portée" + + + texidoc = " +By default, metronome and rehearsal marks are printed above the staff. +To place them below the staff simply set the @code{direction} property +of @code{MetronomeMark} or @code{RehearsalMark} appropriately. + +" + doctitle = "Printing metronome and rehearsal marks below the staff" +} % begin verbatim + +\layout { ragged-right = ##f } + +{ + % Metronome marks below the staff + \override Score.MetronomeMark #'direction = #DOWN + \tempo 8. = 120 + c''1 + + % Rehearsal marks below the staff + \override Score.RehearsalMark #'direction = #DOWN + \mark \default + c''1 +} + diff --git a/Documentation/snippets/printing-music-with-different-time-signatures.ly b/Documentation/snippets/printing-music-with-different-time-signatures.ly new file mode 100644 index 0000000000..af6da55529 --- /dev/null +++ b/Documentation/snippets/printing-music-with-different-time-signatures.ly @@ -0,0 +1,159 @@ +%% 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 = "rhythms, percussion" + + texidoc = " +In the following snippet, two parts have a completely different time +signature, yet remain synchronized. The bar lines can no longer be +printed at the @code{Score} level; to allow independent bar lines in +each part, the @code{Default_barline_engraver} and +@code{Timing_translator} are moved from the @code{Score} context to the +@code{Staff} context. + +If bar numbers are required, the @code{Bar_number_engraver} should also +be moved, since it relies on properties set by the +@code{Timing_translator}; a @code{\\with} block can be used to add bar +numbers to the relevant staff. + + + +" + doctitle = "Printing music with different time signatures" +} % begin verbatim + +\paper { + indent = #0 + ragged-right = ##t +} + +global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } } + +\layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + \remove "Bar_number_engraver" + \override SpacingSpanner #'uniform-stretching = ##t + \override SpacingSpanner #'strict-note-spacing = ##t + proportionalNotationDuration = #(ly:make-moment 1 64) + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } + \context { + \Voice + \remove "Forbid_line_break_engraver" + tupletFullLength = ##t + } +} + +Bassklarinette = \new Staff \with { + \consists "Bar_number_engraver" + barNumberVisibility = #(every-nth-bar-number-visible 2) + \override BarNumber #'break-visibility = #end-of-line-invisible +} << + \global { + \bar "|" + \clef treble + \time 3/8 + d''4. + + \bar "|" + \time 3/4 + r8 des''2( c''8) + + \bar "|" + \time 7/8 + r4. ees''2 ~ + + \bar "|" + \time 2/4 + \tupletUp + \times 2/3 { ees''4 r4 d''4 ~ } + + \bar "|" + \time 3/8 + \tupletUp + \times 3/4 { d''4 r4 } + + \bar "|" + \time 2/4 + e''2 + + \bar "|" + \time 3/8 + es''4. + + \bar "|" + \time 3/4 + r8 d''2 r8 + \bar "|" + } +>> + +Perkussion = \new StaffGroup << + \new Staff << + \global { + \bar "|" + \clef percussion + \time 3/4 + r4 c'2 ~ + + \bar "|" + c'2. + + \bar "|" + R2. + + \bar "|" + r2 g'4 ~ + + \bar "|" + g'2. ~ + + \bar "|" + g'2. + } + >> + \new Staff << + \global { + \bar "|" + \clef percussion + \time 3/4 + R2. + + \bar "|" + g'2. ~ + + \bar "|" + g'2. + + \bar "|" + r4 g'2 ~ + + \bar "|" + g'2 r4 + + \bar "|" + g'2. + } + >> +>> + +\score { + << + \Bassklarinette + \Perkussion + >> +} + diff --git a/Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly b/Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly new file mode 100644 index 0000000000..673a31c3a8 --- /dev/null +++ b/Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly @@ -0,0 +1,54 @@ +%% 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 = "tweaks-and-overrides" + +%% 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 +desactiva la representación de la octava de las notas. + +" + doctitlees = "Impresión de los nombres de las notas con o sin indicación de la octava" + + + + texidoc = " +The @code{NoteNames} context can be used to print the text value of +notes. The @code{printOctaveNames} property turns on or off the +representation of the octave of the note. + +" + doctitle = "Printing note names with and without an octave marker" +} % begin verbatim + +scale = \relative c' { + a4 b c d + e4 f g a +} + +\new Staff { + << + \scale + \context NoteNames { + \set printOctaveNames = ##f + \scale + } + >> + R1 + << + \scale + \context NoteNames { + \set printOctaveNames = ##t + \scale + } + >> +} + diff --git a/Documentation/snippets/printing-text-from-right-to-left.ly b/Documentation/snippets/printing-text-from-right-to-left.ly new file mode 100644 index 0000000000..196b134cfa --- /dev/null +++ b/Documentation/snippets/printing-text-from-right-to-left.ly @@ -0,0 +1,29 @@ +%% 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 = "editorial-annotations, text, world-music" + + texidoc = " +It is possible to print text from right to left in a markup object, as +demonstrated here. + +" + doctitle = "Printing text from right to left" +} % begin verbatim + +{ + b1^\markup { + \line { i n g i r u m i m u s n o c t e } + } + f'_\markup { + \override #'(text-direction . -1) + \line { i n g i r u m i m u s n o c t e } + } +} + diff --git a/Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly b/Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly new file mode 100644 index 0000000000..b453088485 --- /dev/null +++ b/Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly @@ -0,0 +1,72 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +De forma predeterminada se suprime el número del primer compás de una +partitura si es menor o igual a @q{1}. Al establecer el valor de +@code{barNumberVisibility} a @code{all-bar-numbers-visible}, se puede +imprimir cualquier número de compás para el primer compás y todos los +siguientes. Observe que, para que esto funcione, se debe insertar una +líinea divisoria vacía antes de la primera nota. + +" + + doctitlees = "Imprimir el número de compás en el primer compás" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Standardmäßig wird die erste Taktzahl einer Partitur nicht gesetzt, +wenn sie weniger oder gleich '1' ist. Indem man @code{barNumberVisibility} +auf @code{all-bar-numbers-visible} setzt, kann eine beliebige +Taktzahl für den ersten und die folgenden Takte gesetzt werden. +Eine leere Taktlinie muss jedoch vor der ersten Note eingefügt +werden, damit das funktioniert. + +" + doctitlede = "Setzen der Taktnummer für den ersten Takt" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Par défaut, LilyPond n'affiche pas le premier numéro de mesure s'il est +inférieur à 2. Le fait de définir @code{barNumberVisibility} à +@code{all-bar-numbers-visible} vous permettra d'imprimer n'importe quel +numéro pour la première mesure. À noter que l'impression d'un numéro +de mesure ne peut intervenir que s'il y a une barre. Aussi, pour +pouvoir le faire au début d'un morceau, devrez-vous ajouter une barre +vide avant la première note. + +" + doctitlefr = "Afficher le numéro de la première mesure" + + texidoc = " +By default, the first bar number in a score is suppressed if it is less +than or equal to `1'. By setting @code{barNumberVisibility} to +@code{all-bar-numbers-visible}, any bar number can be printed for the +first measure and all subsequent measures. Note that an empty bar line +must be inserted before the first note for this to work. + +" + doctitle = "Printing the bar number for the first measure" +} % begin verbatim + +\relative c' { + \set Score.barNumberVisibility = #all-bar-numbers-visible + \bar "" + c1 | d | e | f \break + g1 | e | d | c +} + diff --git a/Documentation/snippets/proportional-strict-notespacing.ly b/Documentation/snippets/proportional-strict-notespacing.ly new file mode 100644 index 0000000000..0d09688eab --- /dev/null +++ b/Documentation/snippets/proportional-strict-notespacing.ly @@ -0,0 +1,33 @@ +%% 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 = "tweaks-and-overrides, spacing" + + texidoc = " +If @code{strict-note-spacing} is set spacing of notes is not influenced +by bars or clefs within a system. Rather, they are placed just before +the note that occurs at the same time. This may cause collisions. + +" + doctitle = "Proportional strict notespacing" +} % begin verbatim + +\relative c'' << + \override Score.SpacingSpanner #'strict-note-spacing = ##t + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \new Staff { + c8[ c \clef alto c c \grace { d16 } c8 c] c4 + c2 \grace { c16[ c16] } c2 + } + \new Staff { + c2 \times 2/3 { c8 \clef bass cis,, c } c4 + c1 + } +>> + diff --git a/Documentation/snippets/putting-lyrics-inside-the-staff.ly b/Documentation/snippets/putting-lyrics-inside-the-staff.ly new file mode 100644 index 0000000000..1a776e8593 --- /dev/null +++ b/Documentation/snippets/putting-lyrics-inside-the-staff.ly @@ -0,0 +1,32 @@ +%% 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 = "staff-notation, text, vocal-music" + + texidoc = " +Lyrics can be moved vertically to place them inside the staff. The +lyrics are moved with @code{\\override LyricText #'extra-offset = #'(0 +. dy)} and there are similar commands to move the extenders and +hyphens. The offset needed is established with trial and error. + +" + doctitle = "Putting lyrics inside the staff" +} % begin verbatim + +<< + \new Staff << + \new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 } +>> + \new Lyrics \with { + \override LyricText #'extra-offset = #'(0 . 8.6) + \override LyricExtender #'extra-offset = #'(0 . 8.6) + \override LyricHyphen #'extra-offset = #'(0 . 8.6) + } \lyricsto "voc" { La la -- la __ _ la } +>> + diff --git a/Documentation/snippets/quoting-another-voice-with-transposition.ly b/Documentation/snippets/quoting-another-voice-with-transposition.ly new file mode 100644 index 0000000000..0ff2514c12 --- /dev/null +++ b/Documentation/snippets/quoting-another-voice-with-transposition.ly @@ -0,0 +1,88 @@ +%% 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 = "pitches, staff-notation" + +%% 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 +instrumentos interpreta una nota con el sonido del Do central; el +destino de un instrumento transpositor en Fa. La parte de destino +se puede transponer utilizando @code{\\transpose}. En este caso +se transportan todas las notas (incluidas las citadas). + +" + +doctitlees = "Citar otra voz con transposición" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Zitate berücksichtigen sowohl die Transposition der Quelle als auch +des Zielinstruments. In diesem Beispiel spielen alle Instrumente +klingendes C, das Zielinstrument ist in F. Die Noten für das +Zielinstrument können mit @code{\\transpose} transponiert werden, +in diesem Fall werden alle Noten (auch die zitierten) transponiert. + +" + doctitlede = "Eine Stimme mit Transposition zitieren" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Les citations tiennent compte de la transposition, aussi bien celle de +l'instrument d'origine que celle de la partie où elle intervient. Dans +l'exemple suivant, tous les instruments sont en tonalité de concert et +seront repris par un instrument en fa. Le destinataire de la citation +peut à son tour transposer à l'aide de la commande @code{\\transpose}. +En pareil cas, toutes les hauteurs, y compris celle de la citation, +seront transposées. + +" + doctitlefr = "Citation d'une autre voix et transposition" + + + texidoc = " +Quotations take into account the transposition of both source and +target. In this example, all instruments play sounding middle C; the +target is an instrument in F. The target part may be transposed using +@code{\\transpose}. In this case, all the pitches (including the +quoted ones) are transposed. + +" + doctitle = "Quoting another voice with transposition" +} % begin verbatim + +\addQuote clarinet { + \transposition bes + \repeat unfold 8 { d'16 d' d'8 } +} + +\addQuote sax { + \transposition es' + \repeat unfold 16 { a8 } +} + +quoteTest = { + % french horn + \transposition f + g'4 + << \quoteDuring #"clarinet" { \skip 4 } s4^"clar." >> + << \quoteDuring #"sax" { \skip 4 } s4^"sax." >> + g'4 +} + +{ + \set Staff.instrumentName = + \markup { + \center-column { Horn \line { in F } } + } + \quoteTest + \transpose c' d' << \quoteTest s4_"up a tone" >> +} diff --git a/Documentation/snippets/quoting-another-voice.ly b/Documentation/snippets/quoting-another-voice.ly new file mode 100644 index 0000000000..3927fec3af --- /dev/null +++ b/Documentation/snippets/quoting-another-voice.ly @@ -0,0 +1,111 @@ +%% 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 = "staff-notation" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +La propiedad @code{quotedEventTypes} determina los tipos de eventos +musicales que resultan citados. El valor predeterminado es +@code{(note-event rest-event tie-event beam-event tuplet-span-event)}, +que significa que sólo aparecen en la expresión @code{\\quoteDuring} +las notas, silencios, ligaduras, barras y grupos especiales. En el +ejemplo siguiente, el silencio de semicorchea no aparece en el +fragmento citado porque @code{rest-event} no está dentro de los +@code{quotedEventTypes}. + +Para ver una lista de los tipos de evento, consulte la sección +@qq{Music classes} de la Referencia de funcionamiento interno. + + +" + doctitlees = "Citar otra voz" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die @code{quotedEventTypes}-Eigenschaft bestimmt die +Typen an Musikereignissen, die zitiert werden. Die +Standardeinstellung ist @code{(note-event rest-event)}, womit +nur Noten und Pausen der zitierten Stimme für den +@code{\\quoteDuring}-Ausdruck übernommen werden. Im +Beispiel hier wird die 16-Pause nicht übernommen, weil +sich @code{rest-event} nicht in @code{quotedEventTypes} befindet. + +" + + doctitlede = "Eine andere Stimme zitieren" + +%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 + texidocfr = " +Les types d'événement pris en charge pour la citation peuvent se régler +avec la propriété @code{quotedEventTypes}. Par défaut, sa valeur est +fixée à @code{(note-event rest-event tie-event beam-event +tuplet-span-event)}, ce qui signifie que seuls les notes, silences, +liaisons, ligatures et nolets seront mentionnés par @code{\\quoteDuring}. +Dans l'exemple suivant, le quart de soupir n'est pas reproduit puisqu'il +n'est pas mentionné parmi les @code{quotedEventTypes}. + +Pour connaître la liste des types d'événements, reportez-vous au +chapitre @emph{Music classes} de la référence des propriétés internes. + +" + doctitlefr = "Citation d'une autre voix" + + + texidoc = " +The @code{quotedEventTypes} property determines the music event types +which should be quoted. The default value is @code{(note-event +rest-event tie-event beam-event tuplet-span-event)}, which means that +only the notes, rests, ties, beams and tuplets of the quoted voice will +appear in the @code{\\quoteDuring} expression. In the following +example, a 16th rest is not quoted since @code{rest-event} is not in +@code{quotedEventTypes}. + +For a list of event types, consult the @qq{Music classes} section of +the Internals Reference. + +" + doctitle = "Quoting another voice" +} % begin verbatim + +quoteMe = \relative c' { + fis4 r16 a8.-> b4\ff c +} +\addQuote quoteMe \quoteMe + +original = \relative c'' { + c8 d s2 + \once \override NoteColumn #'ignore-collision = ##t + es8 gis8 +} + +<< + \new Staff { + \set Staff.instrumentName = #"quoteMe" + \quoteMe + } + \new Staff { + \set Staff.instrumentName = #"orig" + \original + } + \new Staff \relative c'' << + \set Staff.instrumentName = #"orig+quote" + \set Staff.quotedEventTypes = + #'(note-event articulation-event) + \original + \new Voice { + s4 + \set fontSize = #-4 + \override Stem #'length-fraction = #(magstep -4) + \quoteDuring #"quoteMe" { \skip 2. } + } + >> +>> diff --git a/Documentation/snippets/recorder-fingering-chart.ly b/Documentation/snippets/recorder-fingering-chart.ly new file mode 100644 index 0000000000..714c52cd05 --- /dev/null +++ b/Documentation/snippets/recorder-fingering-chart.ly @@ -0,0 +1,85 @@ +%% 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 = "winds" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +El ejemplo siguiente muestra cómo se pueden realizar diagramas de +digitación para instrumentos de viento. + +" + + doctitlees = "Diagramas de digitación para la flauta dulce" + +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Cet exemple illustre la manière de créer et afficher des indications de +doigté pour instrument à vent. + +" + doctitlefr = "Doigtés pour flûte à bec" + + + texidoc = " +The following example demonstrates how fingering charts for wind +instruments can be realized. + +" + doctitle = "Recorder fingering chart" +} % begin verbatim + +% range chart for paetzold contrabass recorder + +centermarkup = { + \once \override TextScript #'self-alignment-X = #CENTER + \once \override TextScript #'X-offset =#(ly:make-simple-closure + `(,+ + ,(ly:make-simple-closure (list + ly:self-alignment-interface::centered-on-x-parent)) + ,(ly:make-simple-closure (list + ly:self-alignment-interface::x-aligned-on-self)))) +} + +\score { + \new Staff \with { + \remove "Time_signature_engraver" + \override Stem #'stencil = ##f + \consists "Horizontal_bracket_engraver" + } + { + \clef bass + \set Score.timing = ##f + f,1*1/4 \glissando + \clef violin + gis'1*1/4 + \stemDown a'4^\markup{1)} + \centermarkup + \once \override TextScript #'padding = #2 + bes'1*1/4_\markup{\override #'(baseline-skip . 1.7) \column + { \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 3 \finger 4 + \finger 5 \finger 6 \finger 7} } + b'1*1/4 + c''4^\markup{1)} + \centermarkup + \once \override TextScript #'padding = #2 + cis''1*1/4 + deh''1*1/4 + \centermarkup + \once \override TextScript #'padding = #2 + \once \override Staff.HorizontalBracket #'direction = #UP + e''1*1/4_\markup{\override #'(baseline-skip . 1.7) \column + { \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 4 + \finger 5} }\startGroup + f''1*1/4^\markup{2)}\stopGroup + } +} + + diff --git a/Documentation/snippets/redefining-grace-note-global-defaults.ly b/Documentation/snippets/redefining-grace-note-global-defaults.ly new file mode 100644 index 0000000000..1cb4ceb336 --- /dev/null +++ b/Documentation/snippets/redefining-grace-note-global-defaults.ly @@ -0,0 +1,82 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Los valores predeterminados para las notas de adorno están +almacenados en los identificadores @code{startGraceMusic}, +@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, +@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y +@code{stopAppoggiaturaMusic}, que están definidos en el archivo +@file{ly/grace-init.ly}. Redefiniéndolos se pueden obtener otros +efectos. + +" + + doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die globalen Standardeinstellungen für Verzierungsnoten werden in +den Variablen@code{startGraceMusic}, @code{stopGraceMusic}, +@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, +@code{startAppoggiaturaMusic} und @code{stopAppoggiaturaMusic} +gespeichert, die in der Datei @file{ly/grace-init.ly} definiert +sind. Wenn man sie umdefiniert, können andere Effekte erreicht +werden. + +" + doctitlede = "Globale Umdefinition von Verzierungsnoten" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Vous pouvez modifier les valeurs des variables @code{startGraceMusic}, +@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, +@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic}, et +@code{stopAppoggiaturaMusic} afin d'en personnaliser les effets. Pour +plus de détails, voir le fichier @file{ly/grace-init.ly}. + +" + doctitlefr = "Redéfinition des réglages de mise en forme par défaut des notes d'ornement" + + texidoc = " +The global defaults for grace notes are stored in the identifiers +@code{startGraceMusic}, @code{stopGraceMusic}, +@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, +@code{startAppoggiaturaMusic} and @code{stopAppoggiaturaMusic}, which +are defined in the file @code{ly/grace-init.ly}. By redefining them +other effects may be obtained. + +" + doctitle = "Redefining grace note global defaults" +} % begin verbatim + +startAcciaccaturaMusic = { + s1*0( + \override Stem #'stroke-style = #"grace" + \slurDashed +} + +stopAcciaccaturaMusic = { + \revert Stem #'stroke-style + \slurSolid + s1*0) +} + +\relative c'' { + \acciaccatura d8 c1 +} + diff --git a/Documentation/snippets/removing-bar-numbers-from-a-score.ly b/Documentation/snippets/removing-bar-numbers-from-a-score.ly new file mode 100644 index 0000000000..74aa399711 --- /dev/null +++ b/Documentation/snippets/removing-bar-numbers-from-a-score.ly @@ -0,0 +1,64 @@ +%% 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 = "rhythms, contexts-and-engravers" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Se pueden eliminar completamente los números de compás quitando el +grabador @code{Bar_number_engraver} del contexto de @code{Score}. + +" + + doctitlees = "Suprimir los números de compás de toda la partitura" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Taktnummern können vollkommen aus den Noten entfernt werden, indem +man den @code{Bar_number_engraver} aus dem @code{Score}-Kontext +entfernt. + +" + doctitlede = "Entfernung von Taktnummern in einer Partitur" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Désactiver le graveur concerné --- @code{Bar_number_engraver} --- +donnera une partition --- contexte @code{Score} --- sans numéros de +mesure. + +" + doctitlefr = "Supprimer les numéros de mesure d'une partition" + + + texidoc = " +Bar numbers can be removed entirely by removing the +@code{Bar_number_engraver} from the @code{Score} context. + +" + doctitle = "Removing bar numbers from a score" +} % begin verbatim + +\layout { + \context { + \Score + \remove "Bar_number_engraver" + } +} + +\relative c'' { + c4 c c c \break + c4 c c c +} + diff --git a/Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly b/Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly new file mode 100644 index 0000000000..cc4ff11d14 --- /dev/null +++ b/Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly @@ -0,0 +1,49 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% 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. +Se puede alterar este comportamiento pentagrama a pentagrama. + +" + doctitlees = "Quitar las barras de compás entre los pentagramas de un StaffGroup PianoStaff o GrandStaff" + + + + texidoc = " +By default, bar lines in StaffGroup, PianoStaff, or GrandStaff groups +are connected between the staves. This behaviour can be overridden on +a staff-by-staff basis. + +" + doctitle = "Removing connecting bar lines on StaffGroup PianoStaff or GrandStaff" +} % begin verbatim + +\relative c' { + \new StaffGroup << + \new Staff { + e1 | e + \once \override Staff.BarLine #'allow-span-bar = ##f + e1 | e | e + } + \new Staff { + c1 | c | c + \once \override Staff.BarLine #'allow-span-bar = ##f + c1 | c + } + \new Staff { + a1 | a | a | a | a + } + >> +} + diff --git a/Documentation/snippets/removing-the-first-empty-line.ly b/Documentation/snippets/removing-the-first-empty-line.ly new file mode 100644 index 0000000000..79a8590bb7 --- /dev/null +++ b/Documentation/snippets/removing-the-first-empty-line.ly @@ -0,0 +1,111 @@ +%% 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 = "staff-notation, tweaks-and-overrides, breaks" + +%% 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 +@code{VerticalAxisGroup}. Esto se puede hacer globalmente dentro +del bloque @code{\\layout}, o localmente dentro del pentagrama +concreto que se quiere suprimir. En este último caso, tenemos que +especificar el contexto (@code{Staff} se aplica sólo al pentagrama +actual) delante de la propiedad. + +El pentagrama inferior del segundo grupo no se elimina, porque el +ajuste sólo se aplica al pentagrama concreto dentro del que se +escribe. + +" + doctitlees = "Quitar la primera línea vacía" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur +entfernt werden, indem die Eigenschaft @code{remove-first} der +@code{VerticalAxisGroup}-Eigenschaft eingesetzt wird. Das kann +man global in einer @code{\\layout}-Umgebung oder lokal in dem +bestimmten Notensystem machen, das entfernt werden soll. In letzterem +Fall muss man den Kontext angeben. + +Das untere Notensystem der zweiten Systemgruppe wird nicht entfernt, +weil in die Einstellungen in dem Schnipsel nur für das eine Notensystem +gültig sind. + +" + doctitlede = "Die erste leere Notenzeile auch entfernen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Par défaut, le premier système comportera absolument toutes les portées. +Si vous voulez masquer les portées vides y compris pour le premier +système, vous devrez activer la propriété @code{remove-first} du +@code{VerticalAxisGroup}. Mentionnée dans un bloc @code{\\layout}, +cette commande agira de manière globale. Pour qu'elle ne soit effective +que pour une portée individuelle, vous devrez également spécifier le +contexte (@code{Staff} pour qu'il ne concerne que la portée en cours) en +préfixe de la propriété. + +La première ligne inférieure du deuxième @code{StaffGroup} est bien +présente, pour la simple raison que le réglage en question ne s'applique +qu'à la portée dans laquelle il a été inscrit. + +" + doctitlefr = "Masquage de la première ligne si elle est vide" + + + texidoc = " +The first empty staff can also be removed from the score by setting the +@code{VerticalAxisGroup} property @code{remove-first}. This can be done +globally inside the @code{\\layout} block, or locally inside the +specific staff that should be removed. In the latter case, you have to +specify the context (@code{Staff} applies only to the current staff) in +front of the property. + +The lower staff of the second staff group is not removed, because the +setting applies only to the specific staff inside of which it is +written. + +" + doctitle = "Removing the first empty line" +} % begin verbatim + +\layout { + \context { + \Staff \RemoveEmptyStaves + % To use the setting globally, uncomment the following line: + % \override VerticalAxisGroup #'remove-first = ##t + } +} +\new StaffGroup << + \new Staff \relative c' { + e4 f g a \break + c1 + } + \new Staff { + % To use the setting globally, comment this line, + % uncomment the line in the \layout block above + \override Staff.VerticalAxisGroup #'remove-first = ##t + R1 \break + R + } +>> +\new StaffGroup << + \new Staff \relative c' { + e4 f g a \break + c1 + } + \new Staff { + R1 \break + R + } +>> + diff --git a/Documentation/snippets/repeats-headword.ly b/Documentation/snippets/repeats-headword.ly new file mode 100644 index 0000000000..7fe25c65c7 --- /dev/null +++ b/Documentation/snippets/repeats-headword.ly @@ -0,0 +1,139 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 1.7 Repeats + +% Beethoven, Op. 57 +% Piano sonata 23 - Dem Grafen Franz von Brunswick Gewidmet +% Movt II, Andante con moto +% Measures 9 - 16 + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + + +\new PianoStaff << + + \new Staff = RH { + \clef bass + \key df \major + \time 2/4 + \set Score.currentBarNumber = #9 + \bar "|:" + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + 8 ) + | + 4 ( + 8.. + 32 + | + 8. ) + \slurDown + 16 ( + << + { + \voiceTwo + gf8 + f8 ) + } + \new Voice { + \voiceOne + 16 + ef'16 + 8 + } + >> + \oneVoice + | + 4 ( + 8.. + 32 + \clef treble + | + 8. ) + 16 ( + 16 + gf'16 + 8 ) + | + \slurUp + 4 + \change Staff = LH + \voiceOne + 4 + | + 4. + \change Staff = RH + \oneVoice + r8 + \clef bass + \bar ":|" + } + + \new Staff = LH { + \clef bass + \key df \major + \time 2/4 + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + 8 ) + | + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + ) + | + 4 ( + 8.. + 32 + | + 8. ) + 16 ( + 8 + 8 ) + | + \voiceTwo + gf,4 ( + af,4 ~ ) + | + af,16. [ ( + gf,32 + f,16. + ef,32 ] + df,8 ) + \oneVoice + r8 + } + +>> diff --git a/input/lsr/repeats-intro.itely b/Documentation/snippets/repeats-intro.itely similarity index 100% rename from input/lsr/repeats-intro.itely rename to Documentation/snippets/repeats-intro.itely diff --git a/input/lsr/repeats.snippet-list b/Documentation/snippets/repeats.snippet-list similarity index 85% rename from input/lsr/repeats.snippet-list rename to Documentation/snippets/repeats.snippet-list index 288f87d567..c9b276e8ff 100644 --- a/input/lsr/repeats.snippet-list +++ b/Documentation/snippets/repeats.snippet-list @@ -1,4 +1,5 @@ adding-volta-brackets-to-additional-staves.ly +cross-staff-tremolos.ly engraving-tremolos-with-floating-beams.ly isolated-percent-repeats.ly measure-counter.ly @@ -6,6 +7,7 @@ percent-repeat-count-visibility.ly percent-repeat-counter.ly positioning-segno-and-coda-with-line-break.ly printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +setting-the-double-repeat-default-for-volte.ly shortening-volta-brackets.ly volta-below-chords.ly volta-multi-staff.ly diff --git a/Documentation/snippets/rest-styles.ly b/Documentation/snippets/rest-styles.ly new file mode 100644 index 0000000000..221b38f0c4 --- /dev/null +++ b/Documentation/snippets/rest-styles.ly @@ -0,0 +1,73 @@ +%% 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 = "rhythms, ancient-notation, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + doctitlees = "Estilos de silencios" + texidoces = " +Los silencios se pueden imprimir en distintos estilos. +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + + doctitlede = "Pausenstile" + texidocde = " +Pausen können in verschiedenen Stilen dargestellt werden. +" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Les silences peuvent être gravés selon différents styles. + +" + doctitlefr = "Styles de silences" + + texidoc = " +Rests may be used in various styles. + + + + +" + doctitle = "Rest styles" +} % begin verbatim + +\layout { + indent = 0 + \context { + \Staff + \remove "Time_signature_engraver" + } +} + +\new Staff \relative c { + \cadenzaOn + \override Staff.Rest #'style = #'mensural + r\maxima^\markup \typewriter { mensural } + r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 + \bar "" + + \override Staff.Rest #'style = #'neomensural + r\maxima^\markup \typewriter { neomensural } + r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 + \bar "" + + \override Staff.Rest #'style = #'classical + r\maxima^\markup \typewriter { classical } + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 + \bar "" + + \override Staff.Rest #'style = #'default + r\maxima^\markup \typewriter { default } + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 +} + diff --git a/Documentation/snippets/reverting-default-beam-endings.ly b/Documentation/snippets/reverting-default-beam-endings.ly new file mode 100644 index 0000000000..e3b3017657 --- /dev/null +++ b/Documentation/snippets/reverting-default-beam-endings.ly @@ -0,0 +1,59 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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: + +" + doctitlees = "Alteración de los finales de barra predeterminados" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Um Balken im 12/8-Takt als @code{3-4-3-2} zu gruppieren, muss man zuerst die +Standardwerte für die Balken im 12/8-Takt rückgängig machen und dann die neuen +Werte setzen: + +" + doctitlede = "Standard-Balkenwerte rückgängig machen" + + + +%% Translation of GIT committish: 548076f550a2b7fb09f1260f0e5e2bb028ad396c + texidocfr = " +Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans +une mesure à 12/8, il faudra préalablement annuler les réglages par +défaut relatifs à 12/8, puis ajouter nos propres règles : + +" + doctitlefr = "Annulation des règles de ligature par défaut" + + lsrtags = "rhythms" + texidoc = " +To typeset beams grouped @code{3-4-3-2} one need only change the +beat structure: +" + doctitle = "Reverting default beam endings" +} % begin verbatim + + +\relative c'' { + \time 12/8 + + % Default beaming + a8 a a a a a a a a a a a + + % Set new values for beam endings + \set Score.beatStructure = #'(3 4 3 2) + a8 a a a a a a a a a a a +} diff --git a/Documentation/snippets/rhythmic-slashes.ly b/Documentation/snippets/rhythmic-slashes.ly new file mode 100644 index 0000000000..63a3f20e97 --- /dev/null +++ b/Documentation/snippets/rhythmic-slashes.ly @@ -0,0 +1,55 @@ +%% 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 = "rhythms, tweaks-and-overrides" + + texidoc = " +In @qq{simple} lead-sheets, sometimes no actual notes are written, +instead only @qq{rhythmic patterns} and chords above the measures are +notated giving the structure of a song. Such a feature is for example +useful while creating/transcribing the structure of a song and also +when sharing lead sheets with guitarists or jazz musicians. The +standard support for this using @code{\\repeat percent} is unsuitable +here since the first beat has to be an ordinary note or rest. This +example shows two solutions to this problem, by redefining ordinary +rests to be printed as slashes. (If the duration of each beat is not a +quarter note, replace the @code{r4} in the definitions with a rest of +the appropriate duration). + +" + doctitle = "Rhythmic slashes" +} % begin verbatim + +% Macro to print single slash +rs = { + \once \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash + \once \override Rest #'thickness = #0.48 + \once \override Rest #'slope = #1.7 + r4 +} + +% Function to print a specified number of slashes +comp = #(define-music-function (parser location count) (integer?) + #{ + \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash + \override Rest #'thickness = #0.48 + \override Rest #'slope = #1.7 + \repeat unfold $count { r4 } + \revert Rest #'stencil + #} +) + +\score { + \relative c' { + c4 d e f | + \rs \rs \rs \rs | + \comp #4 | + } +} + diff --git a/Documentation/snippets/rhythms-headword.ly b/Documentation/snippets/rhythms-headword.ly new file mode 100644 index 0000000000..6a187f64b2 --- /dev/null +++ b/Documentation/snippets/rhythms-headword.ly @@ -0,0 +1,224 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 1.2 Rhythms + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + + +% Beethoven, Op. 81a +% Piano sonata 26 - Das Lebewohl +% Movt II - Abwesenheit +% Measures 31 - 34 + +\layout { + \context { + \Score + \override SpacingSpanner #'base-shortest-duration = + #(ly:make-moment 1 40) + %\override SpacingSpanner #'strict-grace-spacing = ##t + } +} + +\new PianoStaff << + + % RH Staff + \new Staff { + \clef treble + \key c \minor + \time 2/4 + \set Score.currentBarNumber = #31 + + 8 ( -\markup { + \override #'(baseline-skip . 2) \italic \column { + \line { a tempo } + cantabile + } + } + 8 ) + ~ + 8 ( + 16 + 16 ) + + | + + \afterGrace + 8 [ ( + { + e''16 [ + f''16 + e''16 + d''16 ] + } + 16 + 16 ] ) + \once \override TextScript #'padding = #3.8 + 16 ( \staccato -\markup { \italic cresc. } + 16 ) \staccato + 32 ( + 32 ) + 32 ( + 32 ) + + | + + \once \override DynamicLineSpanner #'padding = #2 + b''32 ( \p \> + c'''32 + d'''32 + c'''32 ) \! + g''8 ( + ~ + g''32 [ + a''64 + g''64 ) ] + + a''64 ( [ + g''64 ) + bf''64 ( + a''64 ) ] + + bf''64 ( [ + a''64 ) + c'''64 ( + b''64 ) ] + + c'''128 ( [ + b''128 + d'''128 + c'''128 + f'''64 + f''64 ) ] + + | + + \afterGrace + 8 [ ( + { + e''16 [ + f''16 + e''16 + d''16 ] + } + 16 + 16 ] ) + 16 ( \staccato -\markup { \italic cresc. } + 16 ) \staccato + 32 ( + 32 ) + 32 ( + 32 ) + } + + % LH Staff + \new Staff { + \clef bass + \key c \minor + \time 2/4 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + | + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + | + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + | + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + + 32 + c'32 + 32 + c'32 + } + +>> diff --git a/input/lsr/rhythms-intro.itely b/Documentation/snippets/rhythms-intro.itely similarity index 100% rename from input/lsr/rhythms-intro.itely rename to Documentation/snippets/rhythms-intro.itely diff --git a/input/lsr/rhythms.snippet-list b/Documentation/snippets/rhythms.snippet-list similarity index 76% rename from input/lsr/rhythms.snippet-list rename to Documentation/snippets/rhythms.snippet-list index 1009600305..f67d4b7a1e 100644 --- a/input/lsr/rhythms.snippet-list +++ b/Documentation/snippets/rhythms.snippet-list @@ -1,6 +1,8 @@ adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly adding-drum-parts.ly +adjusting-grace-note-spacing.ly aligning-bar-numbers.ly +alternative-breve-note.ly automatic-beam-subdivisions.ly avoiding-collisions-with-chord-fingerings.ly beam-endings-in-score-context.ly @@ -8,6 +10,8 @@ beam-grouping-in-7-8-time.ly beams-across-line-breaks.ly changing-beam-knee-gap.ly changing-form-of-multi-measure-rests.ly +changing-the-number-of-augmentation-dots-per-note.ly +changing-the-tempo-without-a-metronome-mark.ly changing-the-time-signature-without-affecting-the-beaming.ly changing-the-tuplet-number.ly changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly @@ -15,22 +19,30 @@ chant-or-psalms-notation.ly compound-time-signatures.ly conducting-signs,-measure-grouping-signs.ly controlling-tuplet-bracket-visibility.ly +creating-metronome-marks-in-markup-mode.ly engraving-ties-manually.ly engraving-tremolos-with-floating-beams.ly entering-several-tuplets-using-only-one--times-command.ly flat-flags-and-beam-nibs.ly forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly +generating-custom-flags.ly grouping-beats.ly guitar-strum-rhythms.ly heavily-customized-polymetric-time-signatures.ly making-an-object-invisible-with-the-transparent-property.ly +making-slurs-with-complex-dash-structure.ly manually-controlling-beam-positions.ly merging-multi-measure-rests-in-a-polyphonic-part.ly modifying-tuplet-bracket-length.ly +moving-dotted-notes-in-polyphony.ly multi-measure-rest-markup.ly +non-default-tuplet-numbers.ly +partcombine-and-autobeamoff.ly permitting-line-breaks-within-beamed-tuplets.ly +positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly positioning-grace-notes-with-floating-space.ly positioning-multi-measure-rests.ly +preventing-final-mark-from-removing-final-tuplet.ly printing-bar-numbers-at-regular-intervals.ly printing-bar-numbers-inside-boxes-or-circles.ly printing-metronome-and-rehearsal-marks-below-the-staff.ly @@ -38,17 +50,17 @@ printing-music-with-different-time-signatures.ly printing-the-bar-number-for-the-first-measure.ly redefining-grace-note-global-defaults.ly removing-bar-numbers-from-a-score.ly +removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly rest-styles.ly reverting-default-beam-endings.ly rhythmic-slashes.ly skips-in-lyric-mode-2.ly skips-in-lyric-mode.ly -specifying-context-with-beatgrouping.ly stemlets.ly -sub-dividing-beams.ly +subdividing-beams.ly three-sided-box.ly time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly tweaking-grace-layout-within-music.ly -using-beatlength-and-beatgrouping.ly +using-alternative-flag-styles.ly using-grace-note-slashes-with-normal-heads.ly using-ties-with-arpeggios.ly diff --git a/Documentation/snippets/satb-choir-template---four-staves.ly b/Documentation/snippets/satb-choir-template---four-staves.ly new file mode 100644 index 0000000000..63144f24f0 --- /dev/null +++ b/Documentation/snippets/satb-choir-template---four-staves.ly @@ -0,0 +1,104 @@ +%% 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 { +%% 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 = " +SATB-Chorvorlage auf vier Systemen + +" + doctitlede = "SATB-Chorvorlage auf vier Systemen" + + +%% Translation of GIT committish: 092f85605dcea69efff5ef31de4ff100346d6ef8 + + texidocfr = " +Modèle pour chœur à quatre voix mixtes, chaque pupitre ayant sa propre +portée. + +" + doctitlefr = "Modèle pour chœur SATB sur quatre portées" + + + texidoc = " +SATB choir template (four staves) + +" + doctitle = "SATB Choir template - four staves" +} % begin verbatim + +global = { + \key c \major + \time 4/4 + \dynamicUp +} +sopranonotes = \relative c'' { + c2 \p \< d c d \f +} +sopranowords = \lyricmode { do do do do } +altonotes = \relative c'' { + c2\p d c d +} +altowords = \lyricmode { re re re re } +tenornotes = { + \clef "G_8" + c2\mp d c d +} +tenorwords = \lyricmode { mi mi mi mi } +bassnotes = { + \clef bass + c2\mf d c d +} +basswords = \lyricmode { mi mi mi mi } + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "soprano" << + \global + \sopranonotes + >> + \lyricsto "soprano" \new Lyrics \sopranowords + >> + \new Staff << + \new Voice = "alto" << + \global + \altonotes + >> + \lyricsto "alto" \new Lyrics \altowords + >> + \new Staff << + \new Voice = "tenor" << + \global + \tenornotes + >> + \lyricsto "tenor" \new Lyrics \tenorwords + >> + \new Staff << + \new Voice = "bass" << + \global + \bassnotes + >> + \lyricsto "bass" \new Lyrics \basswords + >> + >> +} + diff --git a/Documentation/snippets/score-for-diatonic-accordion.ly b/Documentation/snippets/score-for-diatonic-accordion.ly new file mode 100644 index 0000000000..cc11068dcc --- /dev/null +++ b/Documentation/snippets/score-for-diatonic-accordion.ly @@ -0,0 +1,246 @@ +%% 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 = "template" + + texidoc = " +A template to write a score for a diatonic accordion. + +- There is a horizontal staff indicating if the accordion must be +pushed (thick line) or pulled (thin line) + +- There is a small rhythmic staff with lyrics that describes the bass +buttons to press. The bar lines are made from gridlines + +- The tabulator staff for diatonic accordions shows the geographic +position of the buttons and not (as for every other instrument) the +pitch of the notes; the keys on the melody-side of the accordion are +placed in three columns and about 12 rows + + +In the tabulator staff notation the outermost column is described with +notes between lines, the innermost column is described with notes +between lines and a cross as accidental, and the middle column is +described with notes on a line, whereby the row in the middle is +represented on the middle line in the staff. + + +Some words to transpose piano notes to the diatonic accordion: + + +1. Every diatonic accordion is built for some keys only (for example, +for the keys of C major and F major), so it is important to transpose a +piano melody to match one of these keys. Transpose the source code, not +only the output because this code is required later on to translate it +once more to the tabulator staff. This can be done with the command +@code{displayLilyMusic}. + + +2. You have to alternate the push- and pull-direction of the accordion +regularly. If the player has a too long part to pull the accordion gets +broken. On the other hand, some harmonies are only available in one +direction. Considering this, decide which parts of the melody are the +push-parts and which the pull-parts. + + +3. For each pull- or push-part translate the piano notes to the +according tabulature representation. + + +This snippet comes with a useful optional macro for the jEdit text +editor. + +" + doctitle = "Score for diatonic accordion" +} % begin verbatim + +verse = \lyricmode { Wie gross bist du! Wie gross bist du! } + +harmonies = \new ChordNames \chordmode { + \germanChords + \set chordChanges = ##t + bes8 bes8 bes8 + es2 f + bes1 +} + +NoStem = \override Stem #'transparent = ##t +NoNoteHead = \override NoteHead #'transparent = ##t +ZeroBeam = \override Beam #'positions = #'(0 . 0) + +staffTabLine = \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" +} { + \override Staff.StaffSymbol #'line-positions = #'(0) + % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline + \set Staff.midiInstrument = #"choir aahs" + \key c \major + \relative c'' + { + % disable the following line to see the the noteheads while writing the song + \NoNoteHead + \override NoteHead #'no-ledgers = ##t + + % The beam between 8th-notes is used to draw the push-line + %How to fast write the push-lines: + % 1. write repeatedly 'c c c c c c c c |' for the whole length of the song + % 2. uncomment the line \NoNoteHead + % 3. compile + % 4. Mark the positions on which push/pull changes. + % In the score-picture click on the position the push- or pull-part starts + % (on the noteHead, the cursor will change to a hand-icon). + % The cursor in the source code will jump just at this position. + % a) If a push-part starts there, replace the 'c' by an 'e[' + % b) If a pull-part starts there, replace the 'c' by an 's' + % 5. Switch into 'overwrite-mode' by pressing the 'ins' key. + % 6. For the pull-parts overwrite the 'c' with 's' + % 7. For every push-part replace the last 'c' with 'e]' + % 8. Switch into 'insert-mode' again + % 9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c e] s s) + % 10. re-enable the line \NoNoteHead + \autoBeamOff + \ZeroBeam + s8 s s e[ c c c c c c e] | s s s s s + } +} + +%{ +%} + +% Accordion melody in tabulator score +% 1. Place a copy of the piano melody below +% 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made +% 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then change the second line using the transformation paper +% or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' +% Tips: +% - In jEdit Search & Replace mark the Option 'Keep Dialog' + +AccordionTabTwoCBesDur = { + % pull 1 + %8 8 8 | + 8 8 8 | + % push 2 + %4 | + 4 | + % pull 3 + % 2 r8 } + 2 r8 } + +AccordionTab= { \dynamicUp + % 1. Place a copy of the piano melody above + % 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made + % 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then + % change the second line using the transformation paper + % Tips: + % - In jEdit Search & Replace mark the Option 'Keep Dialog' + % - + \AccordionTabTwoCBesDur +} + + + +\layout { + \context { + \Score + % The vertical line (simulating a bar-line) in + % the staffBassRhytm is a gridline + \consists "Grid_line_span_engraver" + } + \context { + \Staff + \consists "Grid_point_engraver" + gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar + % The following line has to be adjusted O-F-T-E-N. + \override GridPoint #'Y-extent = #'(-2 . -21) + } + \context { + \ChoirStaff + \remove "System_start_delimiter_engraver" + } +} + +staffVoice = \new Staff = astaffvoice { + \time 4/4 + \set Staff.instrumentName = "Voice" + \set Staff.midiInstrument = "voice oohs" + \key bes \major + \partial 8*3 + \clef treble + { + \context Voice = "melodyVoi" + { 8 8 8 | 4 | 2 r8 } + \bar "|." + } +} + +staffAccordionMel = +\new Staff \with { \remove "Clef_engraver" } { + #(set-accidental-style 'forget) %Set the accidentals (Vorzeichen) for each note, + %do not remember them for the rest of the measure. + \time 4/4 + \set Staff.instrumentName="Accordion" + \set Staff.midiInstrument="voice oohs" + \key c \major + \clef treble + { \AccordionTab \bar "|." } +} + +AltOn = +#(define-music-function (parser location mag) (number?) + #{ \override Stem #'length = #$(* 7.0 mag) + \override NoteHead #'font-size = +#$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) + +AltOff = { + \revert Stem #'length + \revert NoteHead #'font-size +} + +BassRhytm = {s4 s8 | c2 c2 | c2 s8 } +LyricBassRhythmI= \lyricmode { c b | c } + +staffBassRhytm = +\new Staff = staffbass \with { \remove "Clef_engraver" } { + % This is not a RhythmicStaff because it must be possible to append lyrics. + + \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y + \override Staff.StaffSymbol #'line-positions = #'( 0 ) + % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid + % Search for 'grid' in this page to find all related functions + \time 4/4 + { + \context Voice = "VoiceBassRhytm" + \stemDown \AltOn #0.6 + \relative c'' + { + \BassRhytm + } + \AltOff + \bar "|." + } +} + +\score { + \new ChoirStaff << + \harmonies + \staffVoice + \context Lyrics = "lmelodyVoi" + \with { alignBelowContext = astaffvoice } + \lyricsto melodyVoi \verse + \staffAccordionMel + \staffTabLine + \staffBassRhytm + \context Lyrics = "lBassRhytmAboveI" + \with { alignAboveContext = staffbass } + \lyricsto VoiceBassRhytm \LyricBassRhythmI + >> +} +%} + diff --git a/Documentation/snippets/screech-boink.ly b/Documentation/snippets/screech-boink.ly new file mode 100644 index 0000000000..4cf5f59345 --- /dev/null +++ b/Documentation/snippets/screech-boink.ly @@ -0,0 +1,81 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { + lsrtags = "headwords" + texidoc = "Random complex notation" + doctitle = "Screech and Boink" +} % begin verbatim + + +\score { + \context PianoStaff << + \new Staff = "up" { + \time 4/8 + \key c \minor + << + { + \revert Stem #'direction + \change Staff = down + \set subdivideBeams = ##t + g16.[ + \change Staff = up + c'''32 + \change Staff = down + g32 + \change Staff = up + c'''32 + \change Staff = down + g16] + \change Staff = up + \stemUp + \set followVoice = ##t + c'''32([ b''16 a''16 gis''16 g''32)] + } + \\ + { s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] } + \\ + { s4 \autoBeamOff d''8.. f''32 } + \\ + { s4 es''4 } + >> + } + \new Staff = "down" { + \clef bass + \key c \minor + \set subdivideBeams = ##f + \override Stem #'french-beaming = ##t + \override Beam #'beam-thickness = #0.3 + \override Stem #'thickness = #4.0 + g'16[ b16 fis16 g16] + << + \makeClusters { + as16 + } + \\ + { + \override Staff.Arpeggio #'arpeggio-direction = #DOWN + 4\arpeggio + } + >> + } + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 60 8) + } + } + \layout { + ragged-right = ##t + \context { + \Staff + \consists "Horizontal_bracket_engraver" + } + } +} diff --git a/input/lsr/separating-key-cancellations-from-key-signature-changes.ly b/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly similarity index 83% rename from input/lsr/separating-key-cancellations-from-key-signature-changes.ly rename to Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly index c812f86922..b342eaed09 100644 --- a/input/lsr/separating-key-cancellations-from-key-signature-changes.ly +++ b/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "pitches, tweaks-and-overrides" @@ -17,7 +21,7 @@ quoted lists of breakable items as elements. This example only modifies the second list, moving @code{key-cancellation} before @code{staff-bar}; by modifying the second list, break alignment behavior only changes in the middle of a system, not at the beginning -or the end. +or the end. " doctitle = "Separating key cancellations from key signature changes" @@ -27,10 +31,10 @@ or the end. \override Score.BreakAlignment #'break-align-orders = #'#((left-edge ambitus breathing-sign clef staff-bar key-cancellation key-signature time-signature custos) - + (left-edge ambitus breathing-sign clef key-cancellation staff-bar key-signature time-signature custos) - + (left-edge ambitus breathing-sign clef key-cancellation key-signature staff-bar time-signature custos)) diff --git a/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly b/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly new file mode 100644 index 0000000000..8a617e5985 --- /dev/null +++ b/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly @@ -0,0 +1,60 @@ +%% 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 = "expressive-marks, tweaks-and-overrides" + +%% 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 +inmediatamente precedente. Se puede controlar este comportamiento +sobreescribiendo la propiedad @code{'to-barline}. + +" + doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note +eines Taktes ist, wird die Klammer an der vorhergehenden Taktlinie +beendet. Dieses Verhalten kann auch mit der Eigenschaft +@code{'to-barline} geändert werden: +" + doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +En principe, un soufflet -- (de)crescendo imprimé sous forme graphique -- +commence au bord gauche de la note de départ, et se termine au +bord droit de la note d'arrivée. Cependant, si la note d'arrivée +est sur un premier temps, le soufflet s'arrêtera au niveau de la +barre de mesure qui la précède. Ce comportement peut être annulé +en assignant @emph{faux} (@code{#f}) à la propriété @code{'to-barline} : + +" + doctitlefr = "Soufflets et barres de mesure" + + + texidoc = " +If the note which ends a hairpin falls on a downbeat, the hairpin stops +at the bar line immediately preceding. This behavior can be controlled +by overriding the @code{'to-barline} property. + +" + doctitle = "Setting hairpin behavior at bar lines" +} % begin verbatim + +\relative c'' { + e4\< e2. + e1\! + \override Hairpin #'to-barline = ##f + e4\< e2. + e1\! +} diff --git a/Documentation/snippets/setting-system-separators.ly b/Documentation/snippets/setting-system-separators.ly new file mode 100644 index 0000000000..3a29914877 --- /dev/null +++ b/Documentation/snippets/setting-system-separators.ly @@ -0,0 +1,51 @@ +%% 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 = "staff-notation, tweaks-and-overrides, paper-and-layout" + +%% 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 +@code{\\slashSeparator} está disponible como una elección +predeterminada adecuada. + +" + doctitlees = "Fijar un separador entre los sistemas" + + + + texidoc = " +System separators can be inserted between systems. Any markup can be +used, but @code{\\slashSeparator} has been provided as a sensible +default. + +" + doctitle = "Setting system separators" +} % begin verbatim + +\paper { + system-separator-markup = \slashSeparator +} + +notes = \relative c' { + c1 | c \break + c1 | c \break + c1 | c +} + +\book { + \score { + \new GrandStaff << + \new Staff \notes + \new Staff \notes + >> + } +} + diff --git a/Documentation/snippets/setting-the-double-repeat-default-for-volte.ly b/Documentation/snippets/setting-the-double-repeat-default-for-volte.ly new file mode 100644 index 0000000000..feba3e29c2 --- /dev/null +++ b/Documentation/snippets/setting-the-double-repeat-default-for-volte.ly @@ -0,0 +1,49 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Existen tres estilos distintos de repeticiones dobles para la primera +y segunda vez, que se pueden ajustar utilizando +@code{doubleRepeatType}. + +" + + doctitlees = "Establecer el tipo de repetición doble predeterminado para la primera y segunda vez" + +%% Translation of GIT committish: 158658dc75b6f6553e77ff53119ac802eb91f50c + texidocfr = "LilyPond dispose de trois styles de barre différents +pour indiquer une succession de reprises. Vous devez opter pour un + style par défaut, à l'aide de la propriété @code{doubleRepeatType}. + +" + + doctitlefr = "Succession de reprise et style de barre par défaut" + + + lsrtags = "repeats" + texidoc = "There are three different styles of double repeats for +volte, that can be set using @code{doubleRepeatType}." + + doctitle = "Setting the double repeat default for volte" +} % begin verbatim + + + +\relative c'' { + \repeat volta 1 { c1 } + \set Score.doubleRepeatType = #":|:" + \repeat volta 1 { c1 } + \set Score.doubleRepeatType = #":|.|:" + \repeat volta 1 { c1 } + \set Score.doubleRepeatType = #":|.:" + \repeat volta 1 { c1 } +} diff --git a/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly b/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly new file mode 100644 index 0000000000..eddfe22d0a --- /dev/null +++ b/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly @@ -0,0 +1,53 @@ +%% 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 = "expressive-marks" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Si los reguladores son demasiado cortos, se pueden alargar +modificando la propiedad @code{minimum-length} del objeto +@code{Hairpin}. + +" + doctitlees = "Ajustar la longitud mínima de los reguladores" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem +die @code{minimum-length}-Eigenschaft des @code{Hairpin}-Objektes +verändert wird. + +" + doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Si un soufflet est trop court, il suffit d'ajuster la propriété +@code{minimum-length} de l'objet @code{Hairpin} pour l'allonger. + +" + doctitlefr = "Ajustement de la longueur d'un soufflet" + + + texidoc = " +If hairpins are too short, they can be lengthened by modifying the +@code{minimum-length} property of the @code{Hairpin} object. + +" + doctitle = "Setting the minimum length of hairpins" +} % begin verbatim + +\relative c'' { + c4\< c\! d\> e\! + \override Hairpin #'minimum-length = #5 + << f1 { s4 s\< s\> s\! } >> +} + diff --git a/Documentation/snippets/shortening-volta-brackets.ly b/Documentation/snippets/shortening-volta-brackets.ly new file mode 100644 index 0000000000..7491e9344c --- /dev/null +++ b/Documentation/snippets/shortening-volta-brackets.ly @@ -0,0 +1,68 @@ +%% 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 = "repeats" + +%% 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 +acortartlos estableciendo un valor cierto para +@code{voltaSpannerDuration}. En el ejemplo siguiente, el corchete +sólo dura un compás, que corresponde a una duración de 3/4. + +" + doctitlees = "Acortar los corchetes de primera y segunda vez" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber +es ist möglich sie zu verkürzen. Hierzu muss +@code{voltaSpannerDuration} definiert werden, in dem Beispiel etwa als +3/4, sodass die Klammer nur einen Takt dauert. + +" + doctitlede = "Volta-Klammern verkürzen" + +%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441 + texidocfr = " +Les crochets indiquant les fins alternatives s'étalent tout au long ce +celle-ci. On peut les raccourcir en définissant la propriété +@code{voltaSpannerDuration}. Dans l'exemple suivant, le crochet ne se +prolonge que sur une mesure à 3/4. + +" + doctitlefr = "Diminution de la taille du crochet d'alternative" + + + texidoc = " +By default, the volta brackets will be drawn over all of the +alternative music, but it is possible to shorten them by setting +@code{voltaSpannerDuration}. In the next example, the bracket only +lasts one measure, which is a duration of 3/4. + +" + doctitle = "Shortening volta brackets" +} % begin verbatim + +\relative c'' { + \time 3/4 + c4 c c + \set Score.voltaSpannerDuration = #(ly:make-moment 3 4) + \repeat volta 5 { d4 d d } + \alternative { + { + e4 e e + f4 f f + } + { g4 g g } + } +} + diff --git a/Documentation/snippets/showing-chords-at-changes.ly b/Documentation/snippets/showing-chords-at-changes.ly new file mode 100644 index 0000000000..80aa704961 --- /dev/null +++ b/Documentation/snippets/showing-chords-at-changes.ly @@ -0,0 +1,49 @@ +%% 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" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se pueden imprimir los acordes exclusivamente al comienzo de las +líneas y cuando cambia el acorde. + +" + doctitlees = "Imprimir los acordes cuando se produce un cambio" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile +und bei Akkordwechseln angezeigt werden. + +" + doctitlede = "Akkordsymbole bei Wechsel anzeigen" + + texidoc = " +Chord names can be displayed only at the start of lines and when the +chord changes. + +" + doctitle = "Showing chords at changes" +} % begin verbatim + +harmonies = \chordmode { + c1:m c:m \break c:m c:m d +} +<< + \new ChordNames { + \set chordChanges = ##t + \harmonies + } + \new Staff { + \relative c' { \harmonies } + } +>> + diff --git a/Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly b/Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly new file mode 100644 index 0000000000..f7c9a3e682 --- /dev/null +++ b/Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly @@ -0,0 +1,44 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { + lsrtags = "expressive-marks, tweaks-and-overrides" + + texidoc = " +By default, LilyPond does not allow the same articulation (e.g., an +accent, a fermata, a flageolet, etc.) to be displayed above and below a +note. For example, @code{c4_\\fermata^\\fermata} will only show a fermata +below, ignoring the fermata above. However, one can stick +scripts (just like fingerings) inside a chord, which means it is +possible to have as many articulations as desired. So, the solution is to +write the note as a chord and add the articulations inside the @code{<@dots{}>}. +" + doctitle = "Showing the same articulation above and below a note or chord" +} % begin verbatim + + +% The same as \flageolet, just a little smaller +smallFlageolet = +#(let ((m (make-articulation "flageolet"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size -2 + (ly:music-property m 'tweaks))) + m) + +\relative c' { + s4^"Wrong:" + c4_\fermata^\fermata % The second fermata is ignored! + 4^\smallFlageolet_\smallFlageolet + + s4^"Works if written inside a chord:" + 4 + 4 + 4 + 4 +} diff --git a/Documentation/snippets/simple-lead-sheet.ly b/Documentation/snippets/simple-lead-sheet.ly new file mode 100644 index 0000000000..7998275c2d --- /dev/null +++ b/Documentation/snippets/simple-lead-sheet.ly @@ -0,0 +1,51 @@ +%% 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" + +%% 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»: + +" + doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext: + +" + doctitlede = "Ein einfaches Liedblatt" + +%% Translation of GIT committish: 9594a4569164407a146bbc4aad8be3a60a4725cf + texidocfr = " +Assembler des noms d'accords, une mélodie et des paroles permet +d'obtenir la partition d'un chanson : + +" + doctitlefr = "Chanson simple" + + texidoc = " +When put together, chord names, a melody, and lyrics form a lead sheet: + +" + doctitle = "Simple lead sheet" +} % begin verbatim + +<< + \chords { c2 g:sus4 f e } + \relative c'' { + a4 e c8 e r4 + b2 c4( d) + } + \addlyrics { One day this shall be free __ } +>> + diff --git a/Documentation/snippets/simultaneous-headword.ly b/Documentation/snippets/simultaneous-headword.ly new file mode 100644 index 0000000000..1d4e31faa5 --- /dev/null +++ b/Documentation/snippets/simultaneous-headword.ly @@ -0,0 +1,322 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +% NR 1.5 Simultaneous notes + +% L. v. Beethoven, Op. 111 +% Piano sonata 32 +% Movt II - Arietta - Adagio molto semplice e cantabile +% measures 108 - 118 + +\layout { + \context { + \Score + \override SpacingSpanner #'base-shortest-duration = + #(ly:make-moment 1 18) + \override NonMusicalPaperColumn #'line-break-system-details = + #'((alignment-distances . (12))) + } +} + +trillFlat = +\once \override TrillSpanner #'(bound-details left text) = \markup { + \concat { + \musicglyph #"scripts.trill" + \translate #'(-0.5 . 1.9) + \fontsize #-7 + \with-dimensions #'(0 . 0) #'(0 . 0) + \flat + } +} + +\new PianoStaff << + + % RH + \new Staff << + \clef treble + \key c \major + \time 9/16 + \set Score.currentBarNumber = #108 + + % RH voice 1 + \new Voice { + + \voiceOne + s4. + s8. + + | + + s4. + a''8 \p \> [ ( + g''16 ] ) + + | + + g''4. + af''8 [ ( + g''16 ] ) + + | + + g''8. [ + g''8. + g''8. \pp ] + + | + + g''8. [ + af''8. + af''8. ] + + | + + af''8. [ + af''8. + af''8. ] + + | + \break + + \trillFlat + af''4. \startTrillSpan + ~ + af''8. + ~ + + | + + af''4. + ~ + af''8. + ~ + + | + + \oneVoice + 8. [ + a''8. \p \< + bf''8. ] + ~ + + | + + bf''8. [ + b''8. + c'''8. ] + ~ + + \bar "||" + + \key ef \major + c'''8. [ + cs'''8. \f ] \stopTrillSpan + r8. + + } + + % RH voice 2 + \new Voice { + \voiceTwo + \override Voice.TrillSpanner #'direction = #DOWN + d''4. \f \startTrillSpan + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + d''8. \stopTrillSpan + \trillFlat + d''4. \startTrillSpan + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. \stopTrillSpan + ~ + + | + + \trillFlat + d''4. \startTrillSpan + ~ + d''8. + ~ + + | + + d''4. + ~ + d''8. + ~ + + | + + \once \override NoteColumn #'ignore-collision = ##t + \hideNotes + d''8. \stopTrillSpan + s4. + + | + + s8. + s8. + + } + + >> + + % LH staff + \new Staff { + \clef bass + \key c \major + \time 9/16 + + r8. + r8. + 8 [ ( + 16 ] ) + + | + + 4. + \clef treble + c''8 [ ( + b'16 ] ) + + | + + b'4. + c''8 [ ( + b'16 ] ) + + | + + b'8. [ + b'8. + b'8. ] + + | + + b'8. [ + bf'8. ] + \clef bass + 8 [ ( + 16 ] ) + + | + + 4. + \clef treble + f'8 [ ( + bf16 ] ) + + | + + << + + \new Voice { + \voiceOne + \override Voice.TrillSpanner #'direction = #UP + f'4. \startTrillSpan + ~ + f'8. + ~ + + | + + f'4. + ~ + f'8. + ~ + + | + + f'8. \stopTrillSpan + } + + \new Voice { + \voiceTwo + \override Voice.TrillSpanner #'direction = #DOWN + bf8. [ + bf8. + bf8. ] + + | + + bf8. [ + bf8. + bf8. ] + + | + + bf8. + } + + >> + + \oneVoice + r8. + r8. + + | + + r8. + r8. + r8. + \clef bass + + | + + \key ef \major + r8. + r8. + r8. + + } + +>> diff --git a/input/lsr/simultaneous-notes-intro.itely b/Documentation/snippets/simultaneous-notes-intro.itely similarity index 100% rename from input/lsr/simultaneous-notes-intro.itely rename to Documentation/snippets/simultaneous-notes-intro.itely diff --git a/input/lsr/simultaneous-notes.snippet-list b/Documentation/snippets/simultaneous-notes.snippet-list similarity index 90% rename from input/lsr/simultaneous-notes.snippet-list rename to Documentation/snippets/simultaneous-notes.snippet-list index ace5627929..c2be0bb2e3 100644 --- a/input/lsr/simultaneous-notes.snippet-list +++ b/Documentation/snippets/simultaneous-notes.snippet-list @@ -7,4 +7,5 @@ displaying-complex-chords.ly double-glissando.ly forcing-horizontal-shift-of-notes.ly making-an-object-invisible-with-the-transparent-property.ly +moving-dotted-notes-in-polyphony.ly suppressing-warnings-for-clashing-note-columns.ly diff --git a/Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly new file mode 100644 index 0000000000..456f54c332 --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly @@ -0,0 +1,91 @@ +%% 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 { +%% 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: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Esta plantilla facilita la preparación de una canción con melodía, +letra y acordes. + +" + doctitlees = "Plantilla de pentagrama único con música letra y acordes" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは旋律、単語、コードを持つ歌曲の楽譜のためのテンプレートです。 +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Mit diesem Beispiel können Sie einen Song mit Melodie, +Text und Akkorden schreiben. +" + + doctitlede = "Vorlage für eine Notenzeile mit Noten Text und Akkorden" + + +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Ce cannevas comporte tous les éléments d'une chanson : la mélodie, +les paroles, les accords. + +" + doctitlefr = "Paroles musique et accords" + + texidoc = " +This template allows the preparation of a song with melody, words, and +chords. + +" + doctitle = "Single staff template with notes lyrics and chords" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +harmonies = \chordmode { + a2 c +} + +\score { + << + \new ChordNames { + \set chordChanges = ##t + \harmonies + } + \new Voice = "one" { \autoBeamOff \melody } + \new Lyrics \lyricsto "one" \text + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly new file mode 100644 index 0000000000..4dbc43e17d --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly @@ -0,0 +1,69 @@ +%% 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 = "vocal-music, chords, template" + +%% 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 +trastes. +" + + doctitlees = "Plantilla para un pentagrama único con música letra acordes y trastes" + + texidoc = " +Here is a simple lead sheet template with melody, lyrics, chords and +fret diagrams. + +" + doctitle = "Single staff template with notes lyrics chords and frets" +} % begin verbatim + +verseI = \lyricmode { + \set stanza = #"1." + This is the first verse +} + +verseII = \lyricmode { + \set stanza = #"2." + This is the second verse. +} + +theChords = \chordmode { + % insert chords for chordnames and fretboards here + c2 g4 c +} + +staffMelody = \relative c' { + \key c \major + \clef treble + % Type notes for melody here + c4 d8 e f4 g + \bar "|." +} + +\score { + << + \context ChordNames { \theChords } + \context FretBoards { \theChords } + \new Staff { + \context Voice = "voiceMelody" { \staffMelody } + } + \new Lyrics = "lyricsI" { + \lyricsto "voiceMelody" \verseI + } + \new Lyrics = "lyricsII" { + \lyricsto "voiceMelody" \verseII + } + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-notes-and-chords.ly b/Documentation/snippets/single-staff-template-with-notes-and-chords.ly new file mode 100644 index 0000000000..381b63de3e --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes-and-chords.ly @@ -0,0 +1,89 @@ +%% 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 { +%% 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: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +¿Quiere preparar una hoja guía de acordes (o «lead sheet») con +melodía y acordes? ¡No busque más! + +" + +doctitlees = "Plantilla de pentagrama único con música y acordes" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません! +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist +das richtige Beispiel für Sie! +" + + doctitlede = "Vorlage für eine Notenzeile mit Akkorden" + + +%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16 + texidocfr = " +Vous avez besoin de la partition d'une mélodie avec les accords ? +N'allez pas plus loin ! + +" + +doctitlefr = "Mélodie simple et accords" + + texidoc = " +Want to prepare a lead sheet with a melody and chords? Look no further! + + +" + doctitle = "Single staff template with notes and chords" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + f4 e8[ c] d4 g + a2 ~ a +} + +harmonies = \chordmode { + c4:m f:min7 g:maj c:aug + d2:dim b:sus +} + +\score { + << + \new ChordNames { + \set chordChanges = ##t + \harmonies + } + \new Staff \melody + >> + \layout{ } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly b/Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly new file mode 100644 index 0000000000..7181b8a0dd --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly @@ -0,0 +1,106 @@ +%% 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 { +%% 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: 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 +el barrado automático, que es lo más frecuente en las partes vocales +antiguas. Para usar el barrado automático modifique o marque como un +comentario la línea correspondiente. + +" + doctitlees = "Plantilla de pentagrama único don notas y letra" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&ペーストして、音符@c +を付け加えて、それから歌詞の単語を付け加えてください。この例は自動ビームを off にして@c +います。これはボーカル パートでは一般的なことです。自動ビームを使用するには、対応する@c +行を変更するか、コメント アウトしてください。 +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren +Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen +Sie es mit LilyPond. In dem Beispiel wird die automatische +Balkenverbindung ausgeschaltet (mit dem Befehl @code{\\autoBeamOff}), +wie es für Vokalmusik üblich ist. +Wenn Sie die Balken wieder einschalten wollen, müssen Sie die +entsprechende Zeile entweder ändern oder auskommentieren. +" + + doctitlede = "Vorlage für ein Notensystem mit Noten und Gesangstext" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + + texidocfr = " +Ce canevas comporte une simple ligne mélodique agrémentée de paroles. +Recopiez-le, ajoutez-y d'autres notes et paroles. Les ligatures +automatiques sont ici désactivées, comme il est d'usage en matière de +musique vocale. Pour activer la fonction de ligature automatique, +modifiez ou commentez la ligne en question. + +" + doctitlefr = "Portée unique et paroles" + + texidoc = " +This small template demonstrates a simple melody with lyrics. Cut and +paste, add notes, then words for the lyrics. This example turns off +automatic beaming, which is common for vocal parts. To use automatic +beaming, change or comment out the relevant line. + +" + doctitle = "Single staff template with notes and lyrics" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +text = \lyricmode { + Aaa Bee Cee Dee +} + +\score{ + << + \new Voice = "one" { + \autoBeamOff + \melody + } + \new Lyrics \lyricsto "one" \text + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/single-staff-template-with-only-notes.ly b/Documentation/snippets/single-staff-template-with-only-notes.ly new file mode 100644 index 0000000000..1427f45158 --- /dev/null +++ b/Documentation/snippets/single-staff-template-with-only-notes.ly @@ -0,0 +1,84 @@ +%% 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 { +%% 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: 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 +un archivo, escriba las notas y ¡ya está! + +" + doctitlees = "Plantilla de un solo pentagrama con notas únicamente" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは音符を持つ譜表を提供するとても簡単なテンプレートであり、ソロの楽器や旋律に適しています。@c +これをファイルにカット&ペーストして、音符を付け加えれば完了です! +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein +Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen +Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben +eine vollständige Notationsdatei. +" + + doctitlede = "Vorlage für ein Notensystem" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Cet exemple simpliste se compose d'une portée agrémentée de quelques +notes. Il convient tout à fait pour un instrument seul ou un +fragment mélodique. Recopiez-le dans un nouveau fichier, ajoutez-y +d'autres notes et c'est pret ! + +" + doctitlefr = "Portée unique avec quelques notes" + + texidoc = " +This very simple template gives you a staff with notes, suitable for a +solo instrument or a melodic fragment. Cut and paste this into a file, +add notes, and you're finished! + +" + doctitle = "Single staff template with only notes" +} % begin verbatim + +melody = \relative c' { + \clef treble + \key c \major + \time 4/4 + + a4 b c d +} + +\score { + \new Staff \melody + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/skips-in-lyric-mode-2.ly b/Documentation/snippets/skips-in-lyric-mode-2.ly new file mode 100644 index 0000000000..8e3936b533 --- /dev/null +++ b/Documentation/snippets/skips-in-lyric-mode-2.ly @@ -0,0 +1,25 @@ +%% 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 = "rhythms, vocal-music" + + texidoc = " +Although @code{s} skips cannot be used in @code{\\lyricmode} (it is +taken to be a literal @qq{s}, not a space), double quotes (@code{\"\"}) +or underscores (@code{_}) are available.So for example: + +" + doctitle = "Skips in lyric mode (2)" +} % begin verbatim + +<< + \relative c'' { a4 b c d } + \new Lyrics \lyricmode { a4 "" _ gap } +>> + diff --git a/Documentation/snippets/skips-in-lyric-mode.ly b/Documentation/snippets/skips-in-lyric-mode.ly new file mode 100644 index 0000000000..f9efee48c7 --- /dev/null +++ b/Documentation/snippets/skips-in-lyric-mode.ly @@ -0,0 +1,25 @@ +%% 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 = "rhythms, vocal-music" + + texidoc = " +The @code{s} syntax for skips is only available in note mode and chord +mode. In other situations, for example, when entering lyrics, using the +@code{\\skip} command is recommended. + +" + doctitle = "Skips in lyric mode" +} % begin verbatim + +<< + \relative c'' { a1 | a } + \new Lyrics \lyricmode { \skip 1 bla1 } +>> + diff --git a/Documentation/snippets/slides-in-tablature.ly b/Documentation/snippets/slides-in-tablature.ly new file mode 100644 index 0000000000..c85065de85 --- /dev/null +++ b/Documentation/snippets/slides-in-tablature.ly @@ -0,0 +1,62 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Los deslizamientos se pueden componer tipográficamente tanto en los +contextos de @code{Staff} como en los de @code{TabStaff}: + +" + + doctitlees = "Deslizamientos en tablatura" + +%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 + texidocde = " +Gleiten kann sowohl in normalem Notensystem als auch in Tabulaturen notiert werden: +" + doctitlede = "Gleiten (Glissando) in Tabulatur" + + lsrtags = "fretted-strings" + texidoc = " +Slides can be typeset in both @code{Staff} and @code{TabStaff} contexts: +" + doctitle = "Slides in tablature" +} % begin verbatim + + +slides = { + c'8\3(\glissando d'8\3) + c'8\3\glissando d'8\3 + \hideNotes + \grace { g16\3\glissando } + \unHideNotes + c'4\3 + \afterGrace d'4\3\glissando { + \stemDown \hideNotes + g16\3 } + \unHideNotes +} + +\score { + << + \new Staff { \clef "treble_8" \slides } + \new TabStaff { \slides } + >> + \layout { + \context { + \Score + \override Glissando #'minimum-length = #4 + \override Glissando #'springs-and-rods = + #ly:spanner::set-spacing-rods + \override Glissando #'thickness = #2 + } + } +} diff --git a/Documentation/snippets/snap-pizzicato-bartok-pizzicato.ly b/Documentation/snippets/snap-pizzicato-bartok-pizzicato.ly new file mode 100644 index 0000000000..f9d834c83c --- /dev/null +++ b/Documentation/snippets/snap-pizzicato-bartok-pizzicato.ly @@ -0,0 +1,53 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un +chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se +denota mediante una circunferencia con una línea vertical corta que parte +del centro de aquélla hacia fuera. Aunque LilyPond no tiene ninguna +instrucción predefinida para crear esta marca, es fácil hacer la definición +y colocarla directamente en el archivo de lilypond. +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Bartók-Pizzicato" + texidocde = " +Das Bartók-Pizzicato @q{ist eine besondere Form des Pizzicato, bei dem der +Spieler die Saite auf das Griffbrett aufschlagen lässt, sodass zusätzlich +zum angeschlagenen Ton ein scharfes, knallendes Geräusch ertönt} +(Wikipedia). Es wird dargestellt als kleiner Kreis mit einer vertikalen +Linie, die vom Kreiszentrum aus nach oben weist und ein Stück außerhalb des +Kreises endet. Lilypond hat keinen eigenen Glyphen für dieses Symbol; es +ist aber einfach, direkt eine Definition in die Eingabedatei einzufügen. +" + + lsrtags = "expressive-marks, unfretted-strings" + texidoc = " +A snap-pizzicato (also known as @qq{Bartok pizzicato}) is a @qq{strong +pizzicato where the string is plucked vertically by snapping and +rebounds off the fingerboard of the instrument} (Wikipedia). It is +denoted by a circle with a vertical line going from the center upwards +outside the circle. +" + doctitle = "Snap-pizzicato (\"Bartok pizzicato\")" +} % begin verbatim + + +\relative c' { + c4\snappizzicato + 4\snappizzicato + 4^\snappizzicato + 4_\snappizzicato +} diff --git a/input/lsr/spacing-intro.itely b/Documentation/snippets/spacing-intro.itely similarity index 100% rename from input/lsr/spacing-intro.itely rename to Documentation/snippets/spacing-intro.itely diff --git a/input/lsr/spacing.snippet-list b/Documentation/snippets/spacing.snippet-list similarity index 100% rename from input/lsr/spacing.snippet-list rename to Documentation/snippets/spacing.snippet-list diff --git a/Documentation/snippets/staff-headword.ly b/Documentation/snippets/staff-headword.ly new file mode 100644 index 0000000000..a1b083aeae --- /dev/null +++ b/Documentation/snippets/staff-headword.ly @@ -0,0 +1,134 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "catalan.ly" +#(set-global-staff-size 15) +\paper{ + ragged-right=##t + line-width=17\cm + indent=0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +\header { + mutopiatitle = "Napolitan Dance (Swan Lake)" + mutopiacomposer = "TchaikovskyPI" + mutopiainstrument = "Piano, Trumpet, Percussion" + source = "New arrangement" + style = "Classical" + copyright = "Public Domain" + maintainer = "Laurence Sardain" + lastupdated = "2006/Dec/21" +% title = "Le Lac des Cygnes" +% subtitle = "Danse Napolitaine" +% composer = "Piotr Ilitch Tchaïkovski" +% arranger = "arr. Laurence Sardain" +% footer = "Mutopia-2006/12/22-896" +} + +trompette = \relative do'' { + \clef treble + \key mib \major + \time 2/4 + R2^\markup { \italic Comodo } | + r8 \once \override TextScript #'padding = #2.0 + sib16-.^\markup {\dynamic p \italic grazioso} do-. mib( re)-. do-. sib-. | + re8-. r8 re4->( | + re8) do16-. re-. mib( re) do-. re-. | + do8-. r8 sib4-> | +} + +tambourin = \relative do' { + \time 2/4 + r8 do16 do do8 do | + r8 do16 do do8 do | + r8 do r do | + r8 do16 do do8 do | + r8 do r do | +} + +tambourinMidi = \drummode { + \time 2/4 + r8 tamb16 tamb tamb8 tamb | + r8 tamb16 tamb tamb8 tamb | + r8 tamb r tamb | + r8 tamb16 tamb tamb8 tamb | + r8 tamb r tamb | +} + +upper = \relative do' { + \clef treble + \key mib \major + \time 2/4 + r8\p 16-. -. 8-. -. | + r8 16-. -. 8-. -. | + r8 16-. -. 8-. -. | + r8 16-. -. 8-. -. | + r8 16-. -. 8-. -. | +} + +lower = \relative do { + \clef bass + \key mib \major + \time 2/4 + mib4-. r4 | + sib-. r | + fa'-. r | + sib, r | + mib4-. r4 | +} + + +\score { + << + \context Staff = "trumpet" << + \set Staff.instrumentName = \markup { "Trumpet" \concat{ B \teeny \raise #0.4 \flat } } + \transpose sib do' + \trompette + >> + \context RhythmicStaff = "tambourin" << + \set Staff.instrumentName = "Tambourine" + \tambourin + >> + \context PianoStaff = "prima" << + \set PianoStaff.instrumentName = "Piano " + \context Staff = "uppera" \upper + \context Staff = "lowera" \lower + >> + >> + \layout { } +} +\score { + << + \context Staff = "trumpet" { + \set Staff.midiInstrument = "trumpet" + \trompette + } + \context DrumStaff = "tambourin" { + \tambourinMidi + } + \context Staff = "piano" << + \upper + \lower + >> + >> + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + } + } +} + diff --git a/input/lsr/staff-notation-intro.itely b/Documentation/snippets/staff-notation-intro.itely similarity index 100% rename from input/lsr/staff-notation-intro.itely rename to Documentation/snippets/staff-notation-intro.itely diff --git a/Documentation/snippets/staff-notation.snippet-list b/Documentation/snippets/staff-notation.snippet-list new file mode 100644 index 0000000000..7c167b9f5a --- /dev/null +++ b/Documentation/snippets/staff-notation.snippet-list @@ -0,0 +1,33 @@ +adding-ambitus-per-voice.ly +adding-an-extra-staff-at-a-line-break.ly +adding-an-extra-staff.ly +adding-indicators-to-staves-which-get-split-after-a-break.ly +adding-orchestral-cues-to-a-vocal-score.ly +changing-the-number-of-lines-in-a-staff.ly +changing-the-staff-size.ly +creating-blank-staves.ly +display-bracket-with-only-one-staff-in-a-system.ly +forcing-measure-width-to-adapt-to-metronomemarks-width.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly +incipit.ly +inserting-score-fragments-above-a-staff,-as-markups.ly +letter-tablature-formatting.ly +making-some-staff-lines-thicker-than-the-others.ly +measure-counter.ly +mensurstriche-layout-bar-lines-between-the-staves.ly +modern-tab-text-clef.ly +nesting-staves.ly +non-traditional-key-signatures.ly +orchestra,-choir-and-piano-template.ly +putting-lyrics-inside-the-staff.ly +quoting-another-voice-with-transposition.ly +quoting-another-voice.ly +removing-the-first-empty-line.ly +setting-system-separators.ly +tick-bar-lines.ly +time-signature-in-parentheses.ly +tweaking-clef-properties.ly +use-square-bracket-at-the-start-of-a-staff-group.ly +volta-below-chords.ly +volta-multi-staff.ly diff --git a/Documentation/snippets/stand-alone-two-column-markup.ly b/Documentation/snippets/stand-alone-two-column-markup.ly new file mode 100644 index 0000000000..be3f37c94a --- /dev/null +++ b/Documentation/snippets/stand-alone-two-column-markup.ly @@ -0,0 +1,68 @@ +%% 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 = "text" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Los textos independientes se pueden disponer en varias columnas +utilizando instrucciones @code{\\markup}: + +" + doctitlees = "Elemento de marcado de texto independiente en dos columnas" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Isolierter Text kann in mehreren Spalten mit @code{\\markup}-Befehlen +angeordnet werden: + +" + doctitlede = "Isolierter Text in zwei Spalten" + +%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334 + texidocfr = " +L'utilisation de la commande @code{\\markup} permet de distribuer un bloc +de texte indépendant sur plusieurs colonnes. + +" + doctitlefr = "Bloc de texte indépendant sur deux colonnes" + + + texidoc = " +Stand-alone text may be arranged in several columns using +@code{\\markup} commands: + +" + doctitle = "Stand-alone two-column markup" +} % begin verbatim + +\markup { + \fill-line { + \hspace #1 + \column { + \line { O sacrum convivium } + \line { in quo Christus sumitur, } + \line { recolitur memoria passionis ejus, } + \line { mens impletur gratia, } + \line { futurae gloriae nobis pignus datur. } + \line { Amen. } + } + \hspace #2 + \column { + \line { \italic { O sacred feast } } + \line { \italic { in which Christ is received, } } + \line { \italic { the memory of His Passion is renewed, } } + \line { \italic { the mind is filled with grace, } } + \line { \italic { and a pledge of future glory is given to us. } } + \line { \italic { Amen. } } + } + \hspace #1 + } +} diff --git a/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly b/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly new file mode 100644 index 0000000000..9af8a0c0ab --- /dev/null +++ b/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly @@ -0,0 +1,59 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +poner horizontales, como se muestra en este ejemplo. + +" + doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Richtung von Hälsen wird in Tabulaturen genauso wie in normaler Notation +eingestellt. Balken können horizontal eingestellt werden, wie das Beispiel +zeigt. + +" + doctitlede = "Hals- und Balkenverhalten in einer Tabulatur" + +%% Translation of GIT committish: 718fa63a806b2ae307f320e250bc83236e9cd136 + + texidocfr = " +La direction des hampes se gère dans les tablatures tout comme en +notation traditionnelle. Les ligatures peuvent être mises à l'horizontale +comme le montre cet exemple. + +" + doctitlefr = "Hampes et ligatures en mode tablature" + + + lsrtags = "fretted-strings" + texidoc = " +The direction of stems is controlled the same way in tablature as in +traditional notation. Beams can be made horizontal, as shown in this +example. +" + doctitle = "Stem and beam behavior in tablature" +} % begin verbatim + + +\new TabStaff { + \relative c { + \tabFullNotation + g16 b d g b d g b + \stemDown + \override Beam #'damping = #+inf.0 + g,,16 b d g b d g b + } +} diff --git a/Documentation/snippets/stemlets.ly b/Documentation/snippets/stemlets.ly new file mode 100644 index 0000000000..3f4f4c4b6c --- /dev/null +++ b/Documentation/snippets/stemlets.ly @@ -0,0 +1,47 @@ +%% 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 = "rhythms" + + texidoc = " +In some notational conventions beams are allowed to extend over rests. +Depending on preference, these beams may drop 'stemlets' to help the +eye appreciate the rhythm better, and in some modern music the rest +itself is omitted and only the stemlet remains. + + +This snippet shows a progression from traditional notation, to beams +over the rest, to stemlets over the rest, to stemlets alone. Stemlets +are generated by overriding the @code{'stemlet-length} property of +@code{Stem}, while rests are hidden by setting @code{'transparent = +##t}. + + +Some @code{\\markup} elements are included in the source to highlight +the different notations. + +" + doctitle = "Stemlets" +} % begin verbatim + +\paper { ragged-right = ##f } + +{ + c'16^\markup { traditional } d' r f' + g'16[^\markup { beams over rests } f' r d'] + + % N.B. use Score.Stem to set for the whole score. + \override Staff.Stem #'stemlet-length = #0.75 + + c'16[^\markup { stemlets over rests } d' r f'] + g'16[^\markup { stemlets and no rests } f' + \once \override Rest #'transparent = ##t + r16 d'] +} + diff --git a/Documentation/snippets/string-number-extender-lines.ly b/Documentation/snippets/string-number-extender-lines.ly new file mode 100644 index 0000000000..16397b3735 --- /dev/null +++ b/Documentation/snippets/string-number-extender-lines.ly @@ -0,0 +1,40 @@ +%% 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 = "editorial-annotations, text, fretted-strings, tweaks-and-overrides" + + texidoc = " +Make an extender line for string number indications, showing that a +series of notes is supposed to be played all on the same string. + +" + doctitle = "String number extender lines" +} % begin verbatim + +stringNumberSpanner = +#(define-music-function (parser location StringNumber) (string?) + #{ + \override TextSpanner #'style = #'solid + \override TextSpanner #'font-size = #-5 + \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER + \override TextSpanner #'(bound-details left text) = \markup { \circle \number $StringNumber } + #}) + + +\relative c { + \clef "treble_8" + \stringNumberSpanner "5" + \textSpannerDown + a8\startTextSpan + b c d e f\stopTextSpan + \stringNumberSpanner "4" + g\startTextSpan a + bes4 a g2\stopTextSpan +} + diff --git a/Documentation/snippets/string-quartet-template-simple.ly b/Documentation/snippets/string-quartet-template-simple.ly new file mode 100644 index 0000000000..fb0ffe98a9 --- /dev/null +++ b/Documentation/snippets/string-quartet-template-simple.ly @@ -0,0 +1,117 @@ +%% 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 { +%% 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: 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 + +" + doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号のために +@code{@bs{}global} セクションを使っています。 +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier +wird auch eine @qq{@code{\\global}}-Variable für Taktart und +Vorzeichen benutzt. +" + + doctitlede = "Vorlage für Streichquartett (einfach)" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Voici un canevas pour quatuor à cordes. Notez l'utilisation de la +variable @code{\\global} pour traiter la métrique et la tonalité. + +" + doctitlefr = "Quatuor à cordes (conducteur)" + + texidoc = " +This template demonstrates a simple string quartet. It also uses a +@code{\\global} section for time and key signatures + +" + doctitle = "String quartet template (simple)" +} % begin verbatim + +global= { + \time 4/4 + \key c \major +} + +violinOne = \new Voice \relative c'' { + \set Staff.instrumentName = #"Violin 1 " + + c2 d + e1 + + \bar "|." +} + +violinTwo = \new Voice \relative c'' { + \set Staff.instrumentName = #"Violin 2 " + + g2 f + e1 + + \bar "|." +} + +viola = \new Voice \relative c' { + \set Staff.instrumentName = #"Viola " + \clef alto + + e2 d + c1 + + \bar "|." +} + +cello = \new Voice \relative c' { + \set Staff.instrumentName = #"Cello " + \clef bass + + c2 b + a1 + + \bar "|." +} + +\score { + \new StaffGroup << + \new Staff << \global \violinOne >> + \new Staff << \global \violinTwo >> + \new Staff << \global \viola >> + \new Staff << \global \cello >> + >> + \layout { } + \midi { } +} + diff --git a/Documentation/snippets/string-quartet-template-with-separate-parts.ly b/Documentation/snippets/string-quartet-template-with-separate-parts.ly new file mode 100644 index 0000000000..15ac172710 --- /dev/null +++ b/Documentation/snippets/string-quartet-template-with-separate-parts.ly @@ -0,0 +1,273 @@ +%% 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 { +%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42 + texidoc = " +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! + +" + doctitle = "Modello per quartetto d'archi con parti separate" + + +%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42 + texidoc = " +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 individuali. + +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 specificati quando usi i file separati! + +" + doctitle = "Modello per quartetto d'archi con parti separate" + + + +%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42 + texidoc = " +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 individuali. + +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 specificati quando usi i file separati! + +" + doctitle = "Modello per quartetto d'archi con parti separate" + + lsrtags = "unfretted-strings, template" + + + + +%% 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 +imprimir las particellas? Esta nueva plantilla muestra cómo usar la +funcionalidad @code{\\tag} (etiqueta) para dividir fácilmente una +pieza en particellas indicviduales. + +Tenemos que dividir esta plantilla en archivos independientes; los +nombres de archivo están dentro de los comentarios al principio de +cada archivo. @file{piece.ly} contiene todas las definiciones de +música. Los otros archivos (@file{score.ly}, @file{vn1.ly}, +@file{vn2.ly}, @file{vla.ly} y @file{vlc.ly}) producen la particella +correspondiente. + +¡No olvide quitar los comentarios que hemos especificado cuando use +los archivos independientes! + +" + doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +\"弦楽四重奏テンプレート\" は適切な弦楽四重奏の楽譜を作り出しますが、個々の@c +パート譜を譜刻する必要がある場合はどうでしょうか?今度の新しいテンプレートは +@code{@bs{}tag} 機能を用いて容易に楽曲を個々のパートに分ける方法を示しています。 + +このテンプレートは別々のファイルに分ける必要があります。ファイル名は各ファイル@c +の開始部分のコメントの中に記述されています。@code{piece.ly} はすべての音楽定義@c +を保持しています。他のファイル - @code{score.ly}, @code{vn1.ly}, @code{vn2.ly}, +@code{vla.ly} それに @code{vlc.ly} - は対応するパートを作り出します。 + + +別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないでください! +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, +aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel +oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt +voneinander notieren können. Im nächsten Beispiel wird nun +gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen. + +Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen +sind in den Kommentaren am Anfang jeder Datei enthalten. @file{piece.ly} +enthält die Noten. Die anderen Dateien -- @file{score.ly}, +@file{vn1.ly}, @file{vn2.ly}, @file{vla.ly} und +@file{vlc.ly} -- erstellen daraus die entsprechenden Stimmen bzw. die +Partitur (@file{score.ly}). Mit @code{\\tag} wird den Stimmen ein Name +zugewiesen, auf den zurückgegriffen werden kann. +" + + doctitlede = "Vorlage für Streichquartett mit einzelnen Stimmen" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Grâce à ce canevas, vous pouvez obtenir une partition d'excellente +facture pour quatuor à cordes mais aussi, si le besoin s'en faisait +sentir, une partie séparée par instrument. Par ailleurs, cet exemple +illustre l'utilisation de la fonction @code{\\tag} dans le but +d'extraire des parties séparées. + +Il vous faudra découper ce canevas en plusieurs fichiers séparés ; leur +nom respectif est indiqué en commentaire : @file{piece.ly} comporte tout +ce qui a trait à la musique, les autres fichiers -- @file{score.ly}, +@file{vn1.ly}, @file{vn2.ly}, @file{vla.ly}, et @file{vlc.ly} -- vous +permettront d'obtenir les parties selon le pupitre. + + +N'oubliez pas de supprimer les commentaires superflus des fichiers +individualisés ! + +" + doctitlefr = "Quatuor à cordes avec parties séparées" + + texidoc = " +The @qq{String quartet template} snippet produces a nice string +quartet, but what if you needed to print parts? This new template +demonstrates how to use the @code{\\tag} feature to easily split a +piece into individual parts. + +You need to split this template into separate files; the filenames are +contained in comments at the beginning of each file. @code{piece.ly} +contains all the music definitions. The other files – @code{score.ly}, +@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly}, and @code{vlc.ly} – +produce the appropriate part. + + +Do not forget to remove specified comments when using separate files! + +" + doctitle = "String quartet template with separate parts" +} % begin verbatim + +%%%%% piece.ly +%%%%% (This is the global definitions file) + +global= { + \time 4/4 + \key c \major +} + +Violinone = \new Voice { \relative c''{ + \set Staff.instrumentName = #"Violin 1 " + + c2 d e1 + +\bar "|." }} %********************************* +Violintwo = \new Voice { \relative c''{ + \set Staff.instrumentName = #"Violin 2 " + + g2 f e1 + +\bar "|." }} %********************************* +Viola = \new Voice { \relative c' { + \set Staff.instrumentName = #"Viola " + \clef alto + + e2 d c1 + +\bar "|." }} %********************************* +Cello = \new Voice { \relative c' { + \set Staff.instrumentName = #"Cello " + \clef bass + + c2 b a1 + +\bar "|."}} %********************************** + +music = { + << + \tag #'score \tag #'vn1 \new Staff { << \global \Violinone >> } + \tag #'score \tag #'vn2 \new Staff { << \global \Violintwo>> } + \tag #'score \tag #'vla \new Staff { << \global \Viola>> } + \tag #'score \tag #'vlc \new Staff { << \global \Cello>> } + >> +} + +%%% These are the other files you need to save on your computer + +%%%%% score.ly +%%%%% (This is the main file) + + +%\include "piece.ly" %%% uncomment this line when using a separate file +#(set-global-staff-size 14) +\score { + \new StaffGroup \keepWithTag #'score \music + \layout { } + \midi { } +} + + +%{ Uncomment this block when using separate files + +%%%%% vn1.ly +%%%%% (This is the Violin 1 part file) + +\include "piece.ly" +\score { + \keepWithTag #'vn1 \music + \layout { } +} + + +%%%%% vn2.ly +%%%%% (This is the Violin 2 part file) + +\include "piece.ly" +\score { + \keepWithTag #'vn2 \music + \layout { } +} + + +%%%%% vla.ly +%%%%% (This is the Viola part file) + +\include "piece.ly" +\score { + \keepWithTag #'vla \music + \layout { } +} + + +%%%%% vlc.ly +%%%%% (This is the Cello part file) + +\include "piece.ly" +\score { + \keepWithTag #'vlc \music + \layout { } +} + +%} + diff --git a/Documentation/snippets/subdividing-beams.ly b/Documentation/snippets/subdividing-beams.ly new file mode 100644 index 0000000000..bba85fb6bb --- /dev/null +++ b/Documentation/snippets/subdividing-beams.ly @@ -0,0 +1,91 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Las barras de semicorchea, o de figuras más breves, no se subdividen +de forma predeterminada. Esto es, las tres (o más) barras se amplían +sin romperse sobre grupos completos de notas. Este comportamiento se +puede modificar para subdividir las barras en subgrupos mediante el +establecimiento de la propiedad @code{subdivideBeams}. Cuando está +activada, las barras se subdividen a intervalos definidos por el valor +actual de @code{baseMoment} mediante la reducción de las barras +repetidas a una sola entre los subgrupos. Observe que el valor +predeterminado de @code{baseMoment} es uno más que el denominador del +tipo de compás actual, si no se fija explícitamente. Se debe ajustar +a una fracción que da la duración del subgrupo de barras utilizando la +función @code{ly:make-moment}, como se ve en este fragmento de código. +Asimismo, cuando se modifica @code{baseMoment}, se debería cambiar +también @code{beatStructure} para que corresponda al @code{baseMoment} +nuevo: + +" + doctitlees = "Subdivisión de barras" + +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + texidocfr = " +Les ligatures d'une succession de notes de durée inférieure à la croche +ne sont pas subdivisées par défaut. Autrement dit, tous les traits de +ligature ( deux ou plus) seront continus. Ce comportement peut être +modifié afin de diviser la ligature en sous-groupes grâce à la propriété +@code{subdivideBeams}. Lorsqu'elle est activée, les ligatures seront +subdivisées selon un intervalle défini par @code{baseMoment}@tie{}; il n'y +aura alors plus qu'un seul trait de ligature entre chaque sous-groupe. +Par défaut, @code{baseMoment} fixe la valeur de référence par rapport à +la métrique en vigueur. Il faudra donc lui fournir, à l'aide de la +fonction @code{ly:make-moment}, une fraction correspondant à la durée du +sous-groupe désiré comme dans l'exemple ci-dessous. Gardez à l'esprit +que, si vous venez à modifier @code{baseMoment}, vous devrez +probablement adapter @code{beatStrusture} afin qu'il reste en adéquation +avec les nouvelles valeurs de @code{baseMoment}. + +" + doctitlefr = "Subdivision des ligatures" + + lsrtags = "rhythms" + + texidoc = " +The beams of consecutive 16th (or shorter) notes are, by default, not +subdivided. That is, the three (or more) beams stretch unbroken over +entire groups of notes. This behavior can be modified to subdivide +the beams into sub-groups by setting the property +@code{subdivideBeams}. When set, multiple beams will be subdivided at +intervals defined by the current value of @code{baseMoment} by reducing +the multiple beams to just one beam between the sub-groups. Note that +@code{baseMoment} defaults to one over the denominator of the current +time signature if not set explicitly. It must be set to a fraction +giving the duration of the beam sub-group using the +@code{ly:make-moment} function, as shown in this snippet. Also, when +@code{baseMoment} is changed, @code{beatStructure} should also be changed +to match the new @code{baseMoment}: + +" + doctitle = "Subdividing beams" +} % begin verbatim + + +\relative c'' { + c32[ c c c c c c c] + \set subdivideBeams = ##t + c32[ c c c c c c c] + + % Set beam sub-group length to an eighth note + \set baseMoment = #(ly:make-moment 1 8) + \set beatStructure = #'(2 2 2 2) + c32[ c c c c c c c] + + % Set beam sub-group length to a sixteenth note + \set baseMoment = #(ly:make-moment 1 16) + \set beatStructure = #'(4 4 4 4) + c32[ c c c c c c c] +} + diff --git a/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly b/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly new file mode 100644 index 0000000000..c73ff7a305 --- /dev/null +++ b/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly @@ -0,0 +1,33 @@ +%% 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 = "simultaneous-notes, tweaks-and-overrides" + + texidoc = " +If notes from two voices with stems in the same direction are placed at +the same position, and both voices have no shift or the same shift +specified, the error message @samp{warning: ignoring too many clashing +note columns} will appear when compiling the LilyPond file. This +message can be suppressed by setting the @code{'ignore-collision} +property of the @code{NoteColumn} object to @code{#t}. + +" + doctitle = "Suppressing warnings for clashing note columns" +} % begin verbatim + +ignore = \override NoteColumn #'ignore-collision = ##t + +\relative c' { + << + \ignore + { \stemDown f2 g } + \\ + { c2 c, } + >> +} diff --git a/Documentation/snippets/table-of-contents.ly b/Documentation/snippets/table-of-contents.ly new file mode 100644 index 0000000000..60292e665a --- /dev/null +++ b/Documentation/snippets/table-of-contents.ly @@ -0,0 +1,40 @@ +%% 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 = "paper-and-layout" + + texidoc = " +A table of contents is included using @code{\\markuplines +\\table-of-contents}. The TOC items are added with the +@code{\\tocItem} command. + +" + doctitle = "Table of contents" +} % begin verbatim + +#(set-default-paper-size "a6") + +\book { + \markuplines \table-of-contents + \pageBreak + \tocItem \markup { The first score } + \score { + { + c'1 \pageBreak + \mark "A" \tocItem \markup { Mark A } + d'1 + } + } + \pageBreak + \tocItem \markup { The second score } + \score { + { e'1 } + \header { piece = "Second score" } + } +} diff --git a/input/lsr/template-intro.itely b/Documentation/snippets/template-intro.itely similarity index 100% rename from input/lsr/template-intro.itely rename to Documentation/snippets/template-intro.itely diff --git a/input/lsr/template.snippet-list b/Documentation/snippets/template.snippet-list similarity index 86% rename from input/lsr/template.snippet-list rename to Documentation/snippets/template.snippet-list index 7c846c5347..4be0dd20ac 100644 --- a/input/lsr/template.snippet-list +++ b/Documentation/snippets/template.snippet-list @@ -1,11 +1,14 @@ ancient-notation-template----modern-transcription-of-gregorian-music.ly ancient-notation-template----modern-transcription-of-mensural-music.ly +anglican-psalm-template.ly +hymn-template.ly jazz-combo-template.ly orchestra,-choir-and-piano-template.ly piano-template-simple.ly piano-template-with-centered-dynamics.ly piano-template-with-centered-lyrics.ly piano-template-with-melody-and-lyrics.ly +satb-choir-template---four-staves.ly score-for-diatonic-accordion.ly single-staff-template-with-notes,-lyrics,-and-chords.ly single-staff-template-with-notes,-lyrics,-chords-and-frets.ly @@ -16,4 +19,5 @@ string-quartet-template-simple.ly string-quartet-template-with-separate-parts.ly vocal-ensemble-template-with-automatic-piano-reduction.ly vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +vocal-ensemble-template-with-verse-and-refrain.ly vocal-ensemble-template.ly diff --git a/Documentation/snippets/text-headword.ly b/Documentation/snippets/text-headword.ly new file mode 100644 index 0000000000..34aaf30d2b --- /dev/null +++ b/Documentation/snippets/text-headword.ly @@ -0,0 +1,242 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +\include "english.ly" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +% NR 1.8 Text + +% L. v. Beethoven, Op. 110 +% Piano sonata 31 +% measures 1 - 7 + +\layout { + \context { + \Score + \override SpacingSpanner #'base-shortest-duration = + #(ly:make-moment 1 20) + } +} + +\new PianoStaff << + + % RH staff + \new Staff { + \clef treble + \key af \major + \time 3/4 + + \once \override TextScript #'staff-padding = #4 + 4. ( + _ \markup { \dynamic p \italic { con amabilità } } + 8 ) + 8. [ + 16 ] + + | + + 4 + 2 + _ \markup { \italic { ten. } } + + | + + << + + \new Voice { + \voiceOne + ef''4. ( + df''8 [ ) + ef'' ( + f'' ) ] + + | + + \once \override TextScript #'staff-padding = #4 + ef''8. ( + _ \markup { \italic { tranqu. } } + d''16 ) + df''8 \trill \fermata + _ \markup { \italic { ten. } } + } + + \new Voice { + \voiceTwo + af'4. + af'8 [ + af'8 + af'8 ] + + | + + g'4 + g'8 + } + + >> + + \oneVoice + \once \override TextScript #'staff-padding = #4 + df''32 + _ \markup { \italic dolce } + c''32 + df''32 + ef''32 + \acciaccatura { df''[ ef'' ] } + f''8 + ef''16 + df''16 + + | + \break + \overrideProperty "Score.NonMusicalPaperColumn" + #'line-break-system-details #'((alignment-distances . (12))) + + c''4. ( + ^ \markup \italic { cantabile, con intimissimo sentimento, + ma sempre molto dolce e semplice } + ef''4 + af''8 ) + + | + + af''4 ( + g''2 ) + + | + + bf''4. ( + g''4 + ef''8 ) + + | + } + + % LH + \new Staff { + \clef bass + \key af \major + \time 3/4 + + 4. ( + 8 ) + 8. [ + 16 ] + + | + + 4 + 2 ^ \markup { \italic ten. } + + | + + << + + \new Voice { + \voiceOne + ef8 [ ( + af8 + c'8 + bf8 ) + c'8 ( \staccato + df'8 ] ) \staccato + + | + + bf4 + bf8 ^ \markup { \italic ten. } + } + + \new Voice { + \voiceTwo + c4. ( + f8 [ ) + ef8 ( \staccato + df8 ] ) \staccato + + | + + ef4 + ef8 \fermata + } + + >> + + \oneVoice + r8 + r4 + \clef treble + + | + + \override Staff.SustainPedalLineSpanner #'outside-staff-priority = #1000 + \override Staff.SustainPedalLineSpanner #'staff-padding = #7 + \once \override TextScript #'padding = #2 + af16 \sustainOn + ^ \markup \italic { non staccato } + _ \markup \italic { molto \concat { \dynamic { p } , } sempre tranquillo + ed egualmente, non rubato } + 16 + 16 + 16 + af16 + 16 + 16 + 16 + af16 \sustainOn + 16 + 16 + 16 + + | + + bf16 \sustainOn + 16 + 16 + 16 + bf16 \sustainOn + 16 + 16 + 16 + bf16 + 16 + 16 + 16 + + | + + \override Staff.SustainPedalLineSpanner #'staff-padding = #4 + df'16 \sustainOn + 16 + 16 + 16 + df'16 + 16 + 16 + 16 + df'16 \sustainOn + 16 + 16 + 16 + + | + } + +>> diff --git a/input/lsr/text-intro.itely b/Documentation/snippets/text-intro.itely similarity index 100% rename from input/lsr/text-intro.itely rename to Documentation/snippets/text-intro.itely diff --git a/input/lsr/text.snippet-list b/Documentation/snippets/text.snippet-list similarity index 87% rename from input/lsr/text.snippet-list rename to Documentation/snippets/text.snippet-list index 649e13cf62..9599ad506d 100644 --- a/input/lsr/text.snippet-list +++ b/Documentation/snippets/text.snippet-list @@ -5,6 +5,7 @@ aligning-marks-with-various-notation-objects.ly aligning-objects-created-with-the--mark-command.ly blanking-staff-lines-using-the--whiteout-command.ly center-text-below-hairpin-dynamics.ly +centering-markup-on-note-heads-automatically.ly changing-the-default-text-font-family.ly combining-dynamics-with-markup-texts.ly combining-two-parts-on-the-same-staff.ly @@ -21,10 +22,12 @@ multi-measure-rest-markup.ly ottava-text.ly outputting-the-version-number.ly piano-template-with-centered-lyrics.ly -printing-marks-at-the-end-of-a-line-or-a-score.ly +printing-marks-at-the-end-of-a-line.ly printing-marks-on-every-staff.ly printing-text-from-right-to-left.ly +putting-lyrics-inside-the-staff.ly stand-alone-two-column-markup.ly +string-number-extender-lines.ly three-sided-box.ly utf-8.ly vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly diff --git a/Documentation/snippets/three-sided-box.ly b/Documentation/snippets/three-sided-box.ly new file mode 100644 index 0000000000..a758cb3e58 --- /dev/null +++ b/Documentation/snippets/three-sided-box.ly @@ -0,0 +1,55 @@ +%% 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 = "rhythms, text" + + texidoc = " +This example shows how to add a markup command to get a three sided box +around some text (or other markup). + +" + doctitle = "Three-sided box" +} % begin verbatim + +% New command to add a three sided box, with sides north, west and south +% Based on the box-stencil command defined in scm/stencil.scm +% Note that ";;" is used to comment a line in Scheme +#(define-public (NWS-box-stencil stencil thickness padding) + "Add a box around STENCIL, producing a new stencil." + (let* ((x-ext (interval-widen (ly:stencil-extent stencil X) padding)) + (y-ext (interval-widen (ly:stencil-extent stencil Y) padding)) + (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) + (x-rule (make-filled-box-stencil + (interval-widen x-ext thickness) (cons 0 thickness)))) + ;; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) + (set! stencil (ly:stencil-combine-at-edge stencil X LEFT y-rule padding)) + (set! stencil (ly:stencil-combine-at-edge stencil Y UP x-rule 0.0)) + (set! stencil (ly:stencil-combine-at-edge stencil Y DOWN x-rule 0.0)) + stencil)) + +% The corresponding markup command, based on the \box command defined +% in scm/define-markup-commands.scm +#(define-markup-command (NWS-box layout props arg) (markup?) + "Draw a box round @var{arg}. Looks at @code{thickness}, +@code{box-padding} and @code{font-size} properties to determine line +thickness and padding around the markup." + (let* ((th (chain-assoc-get 'thickness props 0.1)) + (size (chain-assoc-get 'font-size props 0)) + (pad (* (magstep size) + (chain-assoc-get 'box-padding props 0.2))) + (m (interpret-markup layout props arg))) + (NWS-box-stencil m th pad))) + +% Test it: + +\relative c' { + c1^\markup { \NWS-box ABCD } + c1^\markup { \NWS-box \note #"4" #1.0 } +} + diff --git a/Documentation/snippets/tick-bar-lines.ly b/Documentation/snippets/tick-bar-lines.ly new file mode 100644 index 0000000000..766fccce67 --- /dev/null +++ b/Documentation/snippets/tick-bar-lines.ly @@ -0,0 +1,27 @@ +%% 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 = "staff-notation" + + texidoc = " +'Tick' bar lines are often used in music where the bar line is used +only for coordination and is not meant to imply any rhythmic stress. + +" + doctitle = "Tick bar lines" +} % begin verbatim + +\relative c' { + \set Score.defaultBarType = #"'" + c4 d e f + g4 f e d + c4 d e f + g4 f e d + \bar "|." +} diff --git a/Documentation/snippets/time-signature-in-parentheses.ly b/Documentation/snippets/time-signature-in-parentheses.ly new file mode 100644 index 0000000000..4e8d3a34de --- /dev/null +++ b/Documentation/snippets/time-signature-in-parentheses.ly @@ -0,0 +1,25 @@ +%% 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 = "staff-notation, tweaks-and-overrides" + + texidoc = " +The time signature can be enclosed within parentheses. + +" + doctitle = "Time signature in parentheses" +} % begin verbatim + +\relative c'' { + \override Staff.TimeSignature #'stencil = #(lambda (grob) + (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) + \time 2/4 + a4 b8 c +} + diff --git a/Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly b/Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly new file mode 100644 index 0000000000..46a4ae024b --- /dev/null +++ b/Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly @@ -0,0 +1,77 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +A veces, la indicación de compás no debe imprimir la fracción completa +(p.ej. 7/4), sino sólo el numerador (7 en este caso). Esto se puede +hacer fácilmente utilizando @code{\\override Staff.TimeSignature +#'style = #'single-digit} para cambiar el estilo +permanentemente. Usando @code{\\revert Staff.TimeSignature #'style}, +se puede revertir el cambio. Para aplicar el estilo de un dígito +único a una sola indicación de compás, utilice la instrucción +@code{\\override} y anteponga la instrucción @code{\\once}. + +" + doctitlees = "Indicación de compás imprimiendo sólo el numerador (en lugar de la fracción)" + +%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033 + + texidocfr = " +La métrique est parfois indiquée non pas par une fraction (p.ex. 7/4) +mais simplement par son numérateur (7 dans ce cas). L'instruction +@code{\\override Staff.TimeSignature #'style = #'single-digit} permet de +déroger au style par défaut de manière permanente -- un @code{\\revert +Staff.TimeSignature #'style} d'annuler ces modifications. Lorsque cette +métrique sous le forme d'une seul chiffre ne se présente qu'une seule +fois, il suffit de faire précéder l'instruction @code{\\override} d'un +simple @code{\\once}. + +" + doctitlefr = "Affichage seulement du numérateur d'une métrique (au +lieu d'une fraction)" + + + texidoc = " +Sometimes, a time signature should not print the whole fraction (e.g. +7/4), but only the numerator (7 in this case). This can be easily done +by using @code{\\override Staff.TimeSignature #'style = #'single-digit} +to change the style permanently. By using @code{\\revert +Staff.TimeSignature #'style}, this setting can be reversed. To apply +the single-digit style to only one time signature, use the +@code{\\override} command and prefix it with a @code{\\once}. + +" + doctitle = "Time signature printing only the numerator as a number (instead of the fraction)" +} % begin verbatim + +\relative c'' { + \time 3/4 + c4 c c + % Change the style permanently + \override Staff.TimeSignature #'style = #'single-digit + \time 2/4 + c4 c + \time 3/4 + c4 c c + % Revert to default style: + \revert Staff.TimeSignature #'style + \time 2/4 + c4 c + % single-digit style only for the next time signature + \once \override Staff.TimeSignature #'style = #'single-digit + \time 5/4 + c4 c c c c + \time 2/4 + c4 c +} + diff --git a/input/lsr/titles-intro.itely b/Documentation/snippets/titles-intro.itely similarity index 100% rename from input/lsr/titles-intro.itely rename to Documentation/snippets/titles-intro.itely diff --git a/input/lsr/titles.snippet-list b/Documentation/snippets/titles.snippet-list similarity index 100% rename from input/lsr/titles.snippet-list rename to Documentation/snippets/titles.snippet-list diff --git a/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly b/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly new file mode 100644 index 0000000000..2fe993cb8d --- /dev/null +++ b/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly @@ -0,0 +1,300 @@ +%% 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 = "ancient-notation, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +A modo de alternativa para obtener auténticos «incipit» +independientes de la partitura principal, se incluyen como +elemento de marcado en el campo que se usa normalmente para el +nombre del instrumento. Por el momento, la letra sólo se puede +añadir como marcado directo. Por desgracia, su espaciado no es +análogo al de la letra principal. + +" + doctitlees = "Transcripción de música antigua con incipit" + + texidoc = " +As a workaround to get real incipits which are independent from the +main score these are included as a markup into the field normally used +for the instrument name. As for now lyrics can only be added as a +direct markup. It doesn't unfortunately conform with the spacing of the +main lyrics. + +" + doctitle = "Transcription of Ancient music with incipit" +} % begin verbatim + +global = { + \set Score.skipBars = ##t + \key g \major + \time 4/4 + %make the staff lines invisible on staves + \override Staff.BarLine #'transparent = ##t + \skip 1*8 % the actual music + % let finis bar go through all staves + \override Staff.BarLine #'transparent = ##f + % finis bar + \bar "|." +} + +discantusNotes = { + \transpose c' c'' { + \clef treble + d'2. d'4 | + b e' d'2 | + c'4 e'4.( d'8 c' b | + a4) b a2 | + b4.( c'8 d'4) c'4 | + \once \override NoteHead #'transparent = ##t c'1 | + b\breve | + } +} + +discantusLyrics = \lyricmode { + Ju -- bi -- | + la -- te De -- | + o, om -- + nis ter -- | + ra, __ om- | + "..." | + -us. | +} + +altusNotes = { + \transpose c' c'' { + \clef treble + r2 g2. e4 fis g | % two bars + a2 g4 e | + fis g4.( fis16 e fis4) | + g1 | + \once \override NoteHead #'transparent = ##t g1 | + g\breve | + } +} + +altusLyrics = \lyricmode { + Ju -- bi -- la -- te | % two bars + De -- o, om -- | + nis ter -- ra, | + "..." | + -us. | +} + +tenorNotes = { + \transpose c' c' { + \clef "treble_8" + R1 | + R1 | + R1 | + r2 d'2. d'4 b e' | % two bars + \once \override NoteHead #'transparent = ##t e'1 | + d'\breve | + } +} + +tenorLyrics = \lyricmode { + Ju -- bi -- la -- te | % two bars + "..." | + -us. +} + +bassusNotes = { + \transpose c' c' { + \clef bass + R1 | + R1 | + R1 | + R1 | + g2. e4 | + \once \override NoteHead #'transparent = ##t e1 | + g\breve | + } +} + +bassusLyrics = \lyricmode { + Ju -- bi- | + "..." | + -us. +} + +incipitDiscantus = \markup { + \score { + { + \set Staff.instrumentName = #"Discantus " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "neomensural-c1" + \key f \major + \time 2/2 + c''1._"IV-" s2 %two bars + \skip 1*8 % eight bars + } + \layout { + \context { + \Voice + \remove "Ligature_bracket_engraver" + \consists "Mensural_ligature_engraver" + } + line-width = 4.5\cm + } + } +} + +incipitAltus = \markup { + \score { + { + \set Staff.instrumentName = #"Altus " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "neomensural-c3" + \key f \major + \time 2/2 + r1 % one bar + f'1._"IV-" s2 % two bars + \skip 1*7 % seven bars + } + \layout { + \context { + \Voice + \remove "Ligature_bracket_engraver" + \consists "Mensural_ligature_engraver" + } + line-width = 4.5\cm + } + } +} + +incipitTenor = \markup { + \score { + { + \set Staff.instrumentName = #"Tenor " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "neomensural-c4" + \key f \major + \time 2/2 + r\longa % four bars + r\breve % two bars + r1 % one bar + c'1._"IV-" s2 % two bars + \skip 1 % one bar + } + \layout { + \context { + \Voice + \remove "Ligature_bracket_engraver" + \consists "Mensural_ligature_engraver" + } + line-width = 4.5\cm + } + } +} + +incipitBassus = \markup { + \score { + { + \set Staff.instrumentName = #"Bassus " + \override NoteHead #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "bass" + \key f \major + \time 2/2 + % incipit + r\maxima % eight bars + f1._"IV-" s2 % two bars + } + \layout { + \context { + \Voice + \remove "Ligature_bracket_engraver" + \consists "Mensural_ligature_engraver" + } + line-width = 4.5\cm + } + } +} + +%StaffGroup is used instead of ChoirStaff to get bar lines between systems +\score { + << + \new StaffGroup = choirStaff << + \new Voice = "discantusNotes" << + \global + \set Staff.instrumentName = \incipitDiscantus + \discantusNotes + >> + \new Lyrics = "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } + + \new Voice = "altusNotes" << + \global + \set Staff.instrumentName = \incipitAltus + \altusNotes + >> + \new Lyrics = "altusLyrics" \lyricsto altusNotes { \altusLyrics } + + \new Voice = "tenorNotes" << + \global + \set Staff.instrumentName = \incipitTenor + \tenorNotes + >> + \new Lyrics = "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } + + \new Voice = "bassusNotes" << + \global + \set Staff.instrumentName = \incipitBassus + \bassusNotes + >> + >> + \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } + %Keep the bass lyrics outside of the staff group to avoid bar lines + %between the lyrics. + >> + + \layout { + \context { + \Score + % no bars in staves + \override BarLine #'transparent = ##t + } + % the next three instructions keep the lyrics between the bar lines + \context { + \Lyrics + \consists "Bar_engraver" + \override BarLine #'transparent = ##t + } + \context { + \StaffGroup + \consists "Separating_line_group_engraver" + } + \context { + \Voice + % no slurs + \override Slur #'transparent = ##t + % Comment in the below "\remove" command to allow line + % breaking also at those barlines where a note overlaps + % into the next bar. The command is commented out in this + % short example score, but especially for large scores, you + % will typically yield better line breaking and thus improve + % overall spacing if you comment in the following command. + %\remove "Forbid_line_break_engraver" + } + indent = 5\cm + } +} + diff --git a/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly b/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly new file mode 100644 index 0000000000..88ccaff75e --- /dev/null +++ b/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly @@ -0,0 +1,184 @@ +%% 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 = "pitches" + +%% 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 +modificaciones enarmónicas de las notas, y así tener el menor +número de alteraciones accidentales. En este caso se aplican las +siguientes reglas: + +@itemize +@item +Se quitan las dobles alteraciones + +@item +Si sostenido -> Do + +@item +Mi sistenido -> Fa + +@item +Do bemol -> Si + +@item +Fa bemol -> Mi + +@end itemize + +De esta forma se selecciona el mayor número de notas enarmónicas +naturales. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren." + texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische +Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl +an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die +folgenden Regeln: + +@itemize +@item +Doppelte Versetzungszeichen sollen entfernt werden + +@item +His -> C + +@item +Eis -> F + +@item +Ces -> B + +@item +Fes -> E + +@end itemize + +Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische +Variante gewählt. +" + + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Cet exemple, grâce à un peu de code Scheme, donne la priorité aux +enharmoniques afin de limiter le nombre d'altérations supplémentaires. +La règle appliquable est : + +@itemize +@item +Les altérations doubles sont supprimées + +@item +Si dièse -> Do + +@item +Mi dièse -> Fa + +@item +Do bémol -> Si + +@item +Fa bémol -> Mi + +@end itemize + +Cette façon de procéder aboutit à plus d'enharmoniques naturelles. + +" + + doctitlefr = "Transposition et réduction du nombrer d'altérations accidentelles" + + texidoc = " +This example uses some Scheme code to enforce enharmonic modifications +for notes in order to have the minimum number of accidentals. In this +case, the following rules apply: + +Double accidentals should be removed + + +B sharp -> C + + +E sharp -> F + + +C flat -> B + + +F flat -> E + + +In this manner, the most natural enharmonic notes are chosen. + +" + doctitle = "Transposing pitches with minimum accidentals (\"Smart\" transpose)" +} % begin verbatim + +#(define (naturalize-pitch p) + (let ((o (ly:pitch-octave p)) + (a (* 4 (ly:pitch-alteration p))) + ;; alteration, a, in quarter tone steps, + ;; for historical reasons + (n (ly:pitch-notename p))) + (cond + ((and (> a 1) (or (eq? n 6) (eq? n 2))) + (set! a (- a 2)) + (set! n (+ n 1))) + ((and (< a -1) (or (eq? n 0) (eq? n 3))) + (set! a (+ a 2)) + (set! n (- n 1)))) + (cond + ((> a 2) (set! a (- a 4)) (set! n (+ n 1))) + ((< a -2) (set! a (+ a 4)) (set! n (- n 1)))) + (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7)))) + (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7)))) + (ly:make-pitch o n (/ a 4)))) + +#(define (naturalize music) + (let ((es (ly:music-property music 'elements)) + (e (ly:music-property music 'element)) + (p (ly:music-property music 'pitch))) + (if (pair? es) + (ly:music-set-property! + music 'elements + (map (lambda (x) (naturalize x)) es))) + (if (ly:music? e) + (ly:music-set-property! + music 'element + (naturalize e))) + (if (ly:pitch? p) + (begin + (set! p (naturalize-pitch p)) + (ly:music-set-property! music 'pitch p))) + music)) + +naturalizeMusic = +#(define-music-function (parser location m) + (ly:music?) + (naturalize m)) + +music = \relative c' { c4 d e g } + +\score { + \new Staff { + \transpose c ais { \music } + \naturalizeMusic \transpose c ais { \music } + \transpose c deses { \music } + \naturalizeMusic \transpose c deses { \music } + } + \layout { } +} + diff --git a/Documentation/snippets/tweaking-clef-properties.ly b/Documentation/snippets/tweaking-clef-properties.ly new file mode 100644 index 0000000000..5a7c2a9de2 --- /dev/null +++ b/Documentation/snippets/tweaking-clef-properties.ly @@ -0,0 +1,199 @@ +%% 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 = "pitches, staff-notation, tweaks-and-overrides" + +%% 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 +@code{clefGlyph}, @code{clefPosition} (que controla la posición +vertical de la clave), @code{middleCPosition} y +@code{clefOctavation}. Se imprime una clave cada vez que se +modifica cualquiera de las propiedades excepto +@code{middleCPosition}. + +Observe que la modificación del glifo, la posición de la clave o +su octavación, no cambian 'per se' la posición de las siguientes +notas del pentagrama: para hacer esto también se debe especificar +la posición del Do central. Los parámetros posicionales están en +relación con la tercera línea del pentagrama, los números +positivos desplazan hacia arriba, contando una unidad por cada +línea y espacio. El valor de @code{clefOctavation} se +establecería normalmente a 7, -7, 15 or -15, pero son válidos +otros valores. + +Cuando se produce un cambio de clave en el salto de línea se +imprime la clave nueva tanto al final de la línea anterior como al +principio de la nueva, de forma predeterminada. Si no se necesita +la clave de advertencia al final de la línea anterior, se puede +quitar estableciendo el valor de la propiedad +@code{explicitClefVisibility} de @code{Staff}, a +@code{end-of-line-invisible}. El comportamiento predeterminado se +puede recuperar con @code{\\unset Staff.explicitClefVisibility}. + +Los siguientes ejemplos muestran las posibilidades cuando se +ajustan estas propiedades manualmente. En la primera línea, los +cambios manuales preservan el posicionamiento relativo estándar de +las claves y las notas, pero no lo hacen en la segunda línea. +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + doctitlede = "Eigenschaften des Schlüssels optimieren" + texidocde = " +Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem +expliziten Setzen der Eigenschaften von @code{clefGlyph}, +@code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt), +@code{middleCPosition} und @code{clefOctavation}. Ein Schlüssel wird +ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich +ändert. + +Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der +Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten +auf dem System: das geschieht nur, wenn auch die Position des +eingestrichenen@tie{}C (middleCPosition) angegeben wird. Die +Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen +positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie +plus Zwischenraum. Der @code{clefOctavation}-Wert ist normalerweise auf 7, +-7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig. + +Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue +Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile +ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht +erforderlich ist, kann er unterdrückt werden, indem die +@code{explicitClefVisibility}-Eigenschaft des @code{Staff}-Kontextes auf den +Wert @code{end-of-line-invisible} gesetzt wird. Das Standardverhalten kann +mit @code{\\unset Staff.explicitClefVisibility} wieder hergestellt werden. + +Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese +Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen +Änderungen die ursprüngliche relative Positionierung von Schlüssel und +Noten, auf der zweiten Zeile nicht. +" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +La commande @code{\\clef \"treble_8\"} équivaut à définir @code{clefGlyph}, +@code{clefPosition} -- qui contrôle la position verticale de la clé -- +@code{middleCPosition} et @code{clefOctavation}. Une clé est imprimée +lorsque l'une de ces propriétés, hormis @code{middleCPosition}, est +modifiée. Les exemples suivant font apparaître des possibilités de +réglage manuel de ces propriétés. + + +Modifier le glyphe, la position de la clef ou son octaviation ne +changera pas la position des notes ; il faut pour y parvenir modifier +aussi la position du do médium. Le positionnement est relatif à la +ligne médiane, un nombre positif faisant monter, chaque ligne ou +interligne comptant pour 1. La valeur de @code{clefOctavation} devrait +être de 7, -7, 15 ou -15, bien que rien ne vous empêche de lui affecter +une autre valeur. + + +Lorsqu'un changement de clef intervient en même temps qu'un saut de +ligne, la nouvelle clef est imprimer à la fois en fin de ligne et au +début de la suivante. Vous pouvez toujours supprimer cette « clef de +précaution » en affectant la valeur @code{end-of-line-invisible} à la +propriété @code{explicitClefVisibility} du contexte @code{Staff}. Le +comportement par défaut sera réactivé par +@w{@code{\\unset@tie{}Staff.explicitClefVisibility}}. + + +Les exemples qui suivent illustrent les différentes possibilités de +définir ces propriétés manuellement. Sur la première ligne, la +position relative des notes par rapport aux clefs sont préservées, ce +qui n'est pas le cas pour la deuxième ligne. + +" + doctitlefr = "Affinage des propriétés d'une clef" + + texidoc = " +The command @code{\\clef \"treble_8\"} is equivalent to setting +@code{clefGlyph}, @code{clefPosition} (which controls the vertical +position of the clef), @code{middleCPosition} and +@code{clefOctavation}. A clef is printed when any of the properties +except @code{middleCPosition} are changed. + + +Note that changing the glyph, the position of the clef, or the +octavation does not in itself change the position of subsequent notes +on the staff: the position of middle C must also be specified to do +this. The positional parameters are relative to the staff center line, +positive numbers displacing upwards, counting one for each line and +space. The @code{clefOctavation} value would normally be set to 7, -7, +15 or -15, but other values are valid. + + +When a clef change takes place at a line break the new clef symbol is +printed at both the end of the previous line and the beginning of the +new line by default. If the warning clef at the end of the previous +line is not required it can be suppressed by setting the @code{Staff} +property @code{explicitClefVisibility} to the value +@code{end-of-line-invisible}. The default behavior can be recovered +with @code{\\unset Staff.explicitClefVisibility}. + +The following examples show the possibilities when setting these +properties manually. On the first line, the manual changes preserve the +standard relative positioning of clefs and notes, whereas on the second +line, they do not. + +" + doctitle = "Tweaking clef properties" +} % begin verbatim + +\layout { ragged-right = ##t } + +{ + % The default treble clef + c'1 + % The standard bass clef + \set Staff.clefGlyph = #"clefs.F" + \set Staff.clefPosition = #2 + \set Staff.middleCPosition = #6 + c'1 + % The baritone clef + \set Staff.clefGlyph = #"clefs.C" + \set Staff.clefPosition = #4 + \set Staff.middleCPosition = #4 + c'1 + % The standard choral tenor clef + \set Staff.clefGlyph = #"clefs.G" + \set Staff.clefPosition = #-2 + \set Staff.clefOctavation = #-7 + \set Staff.middleCPosition = #1 + c'1 + % A non-standard clef + \set Staff.clefPosition = #0 + \set Staff.clefOctavation = #0 + \set Staff.middleCPosition = #-4 + c'1 \break + + % The following clef changes do not preserve + % the normal relationship between notes and clefs: + + \set Staff.clefGlyph = #"clefs.F" + \set Staff.clefPosition = #2 + c'1 + \set Staff.clefGlyph = #"clefs.G" + c'1 + \set Staff.clefGlyph = #"clefs.C" + c'1 + \set Staff.clefOctavation = #7 + c'1 + \set Staff.clefOctavation = #0 + \set Staff.clefPosition = #0 + c'1 + + % Return to the normal clef: + + \set Staff.middleCPosition = #0 + c'1 +} + diff --git a/Documentation/snippets/tweaking-grace-layout-within-music.ly b/Documentation/snippets/tweaking-grace-layout-within-music.ly new file mode 100644 index 0000000000..5e38f9da8d --- /dev/null +++ b/Documentation/snippets/tweaking-grace-layout-within-music.ly @@ -0,0 +1,75 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +La disposición de las expresiones de adorno se puede cambiar a lo +largo de toda la música usando las funciones +@code{add-grace-property} y @code{remove-grace-property}. El +ejemplo siguiente borra la definición de la dirección de la plica +para esta nota de adorno, de manera que las plicas no siemmpre +apuntan hacia arriba, y cambia la forma predeterminada de las +cabezas a aspas. + +" + + doctitlees = "Trucar la disposición de las notas de adorno dentro de la música" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Das Layout von Verzierungsausdrücken kann in der Musik verändert +werden mit den Funktionen @code{add-grace-property} und +@code{remove-grace-property}. Das folgende Beispiel definiert +die Richtung von Hälsen (Stem) für diese Verzierung, sodass die +Hälse nicht immer nach unten zeigen, und ändert den Standardnotenkopf +in ein Kreuz. +" + doctitlede = "Veränderung des Layouts von Verzierungen innerhalb der Noten" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Il est possible de changer globalement la mise en forme des petites +notes dans un morceau, au moyen de la fonction +@code{add-grace-property}. Ici, par exemple, on ôte la définition de +l'orientation des objets @code{Stem} pour toutes les petites notes, +afin que les hampes ne soient pas toujours orientées vers le haut, et on +leur préfère des têtes en forme de croix. + +" + doctitlefr = "Mise en forme des notes d'ornement" + + texidoc = " +The layout of grace expressions can be changed throughout the music +using the functions @code{add-grace-property} and +@code{remove-grace-property}. The following example undefines the +@code{Stem} direction for this grace, so that stems do not always point +up, and changes the default note heads to crosses. + +" + doctitle = "Tweaking grace layout within music" +} % begin verbatim + +\relative c'' { + \new Staff { + #(remove-grace-property 'Voice 'Stem 'direction) + #(add-grace-property 'Voice 'NoteHead 'style 'cross) + \new Voice { + \acciaccatura { f16 } g4 + \grace { d16[ e] } f4 + \appoggiatura { f,32[ g a] } e2 + } + } +} diff --git a/input/lsr/tweaks-and-overrides-intro.itely b/Documentation/snippets/tweaks-and-overrides-intro.itely similarity index 100% rename from input/lsr/tweaks-and-overrides-intro.itely rename to Documentation/snippets/tweaks-and-overrides-intro.itely diff --git a/Documentation/snippets/tweaks-and-overrides.snippet-list b/Documentation/snippets/tweaks-and-overrides.snippet-list new file mode 100644 index 0000000000..68495fff54 --- /dev/null +++ b/Documentation/snippets/tweaks-and-overrides.snippet-list @@ -0,0 +1,79 @@ +adjusting-grace-note-spacing.ly +altering-the-length-of-beamed-stems.ly +analysis-brackets-above-the-staff.ly +asymmetric-slurs.ly +avoiding-collisions-with-chord-fingerings.ly +caesura-railtracks-with-fermata.ly +centering-markup-on-note-heads-automatically.ly +changing-a-single-notes-size-in-a-chord.ly +changing-form-of-multi-measure-rests.ly +changing-properties-for-individual-grobs.ly +changing-the-default-text-font-family.ly +changing-the-staff-size.ly +changing-the-tempo-without-a-metronome-mark.ly +changing-the-text-for-sustain-markings.ly +controlling-spanner-visibility-after-a-line-break.ly +controlling-the-vertical-ordering-of-scripts.ly +controlling-tuplet-bracket-visibility.ly +creating-a-delayed-turn.ly +creating-simultaneous-rehearsal-marks.ly +creating-text-spanners.ly +custodes.ly +customizing-fretboard-fret-diagrams.ly +customizing-markup-fret-diagrams.ly +display-bracket-with-only-one-staff-in-a-system.ly +displaying-grob-ancestry.ly +dotted-harmonics.ly +drawing-boxes-around-grobs.ly +drawing-circles-around-various-objects.ly +dynamics-custom-text-spanner-postfix.ly +dynamics-text-spanner-postfix.ly +fine-tuning-pedal-brackets.ly +forcing-horizontal-shift-of-notes.ly +fret-diagrams-explained-and-developed.ly +generating-custom-flags.ly +hairpins-with-different-line-styles.ly +horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly +how-to-change-fret-diagram-position.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly +how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly +inserting-a-caesura.ly +keep-change-clefs-full-sized.ly +line-arrows.ly +making-an-object-invisible-with-the-transparent-property.ly +manually-controlling-beam-positions.ly +mensurstriche-layout-bar-lines-between-the-staves.ly +moving-dotted-notes-in-polyphony.ly +moving-slur-positions-vertically.ly +nesting-staves.ly +percent-repeat-count-visibility.ly +positioning-arpeggios.ly +positioning-multi-measure-rests.ly +positioning-text-markups-inside-slurs.ly +printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +printing-bar-numbers-inside-boxes-or-circles.ly +printing-metronome-and-rehearsal-marks-below-the-staff.ly +printing-note-names-with-and-without-an-octave-marker.ly +proportional-strict-notespacing.ly +removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly +removing-the-first-empty-line.ly +rest-styles.ly +rhythmic-slashes.ly +separating-key-cancellations-from-key-signature-changes.ly +setting-hairpin-behavior-at-bar-lines.ly +setting-system-separators.ly +showing-the-same-articulation-above-and-below-a-note-or-chord.ly +string-number-extender-lines.ly +suppressing-warnings-for-clashing-note-columns.ly +time-signature-in-parentheses.ly +time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly +transcription-of-ancient-music-with-incipit.ly +tweaking-clef-properties.ly +tweaking-grace-layout-within-music.ly +using-alternative-flag-styles.ly +using-ly-grob-object-to-access-grobs-with--tweak.ly +using-postscript-to-generate-special-note-head-shapes.ly +using-the--tweak-command-to-tweak-individual-grobs.ly +vertically-aligned-dynamics-and-textscripts.ly +vertically-aligning-ossias-and-lyrics.ly +vertically-centering-paired-figured-bass-extenders.ly diff --git a/Documentation/snippets/unfretted-headword.ly b/Documentation/snippets/unfretted-headword.ly new file mode 100644 index 0000000000..025767c8b0 --- /dev/null +++ b/Documentation/snippets/unfretted-headword.ly @@ -0,0 +1,238 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% and then run scripts/auxiliar/makelsr.py +% +% This file is in the public domain. +%% Note: this file works from version 2.14.0 +% #!lilypond lcp-extract.ly -*- coding: utf-8; -*- + +%%% +%%% les-cinq-pieds: +%%% extract for the lilypond documentaton project +%%% + +%% Title: Les cinq pieds +%% Composer: David Séverin +%% Date: Juillet 2007 +%% Instrument: Violon Solo +%% Dedication: A mon épouse Lívia De Souza Vidal +%% Additional: avec l'aide de Krzysztof Wagenaar + +%% Statement: + +%% Here by, I, the composer, agree that this extract of my composition +%% be in the public domain and can be part of, used and presented in +%% the LilyPond Documention Project. + +%% Statement Date: Octber the 9th, 2008 + + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + + +\version "2.14.0" +#(set-global-staff-size 15) + +%%% +%%% Abreviations +%%% + +db = \markup { \musicglyph #"scripts.downbow" } +dub = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" } } +dubetc = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" "..." } } + +ub = \markup { \musicglyph #"scripts.upbow" } +udb = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" } } +udbetc = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" "..." } } + +fermaTa = \markup \musicglyph #"scripts.ufermata" + +accel = \markup \tiny \italic \bold "accel..." +ritar = \markup \tiny \italic \bold "ritar..." + +ignore = \override NoteColumn #'ignore-collision = ##t + + +%% +%% Strings +%% + +svib = \markup \small "s. vib." +pvib = \markup \small "p. vib." +mvib = \markup \small "m. vib." +sulp = \markup \small "s.p." +norm = \markup \small "n." + +quatre = \markup \teeny "IV" + + +%% +%% Shifting Notes +%% + +shift = \once \override NoteColumn #'force-hshift = #0.9 +shifta = \once \override NoteColumn #'force-hshift = #1.2 +shiftb = \once \override NoteColumn #'force-hshift = #1.4 + + +%% +%% Hairpin +%% + +% aniente = "a niente" +aniente = \once \override Hairpin #'circled-tip = ##t + + +%% +%% Tuplets +%% + +tupletbp = \once \override Staff.TupletBracket #'padding = #2.25 + + +%% +%% Flag [Note Head - Stem] +%% + +noflag = \once \override Stem #'flag-style = #'no-flag + +%%% +%%% Functions +%%% + +#(define-markup-command (colmark layout props args) + (markup-list?) + (let ((entries (cons (list '(baseline-skip . 2.3)) props) + )) + (interpret-markup layout entries + (make-column-markup + (map (lambda (arg) + (markup arg)) + (reverse args)))))) + + +%%% +%%% Instruments +%%% + +ViolinSolo = \relative c' { + + \voiceOne + + \set Score.markFormatter = #format-mark-box-numbers + \override Score.VoltaBracket #'font-name = #"sans" + \override Score.VoltaBracket #'extra-offset = #'(0 . 1) + \override SpacingSpanner #'uniform-stretching = ##t + + + %% Measure 1 + \time 25/8 + \mark \default + r2 ^\markup \colmark { \italic "fatigué" " " \bold "lentement"} r4 r r8 + << + { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \svib } \shifta e1 } \\ + { d2 \open \mf \< ~ \aniente d1 \! \> r4 r ^\markup \colmark { " " \fermaTa } \! } + >> + + + %% Measure 2 + \time 7/4 + \set Score.repeatCommands = #'((volta "1) n. 2) s.p.")) + << + { \shift d2 \glissando ^\markup \colmark { \quatre \udbetc } \shifta e1 } \\ + { d2 \open \mf \< ~ d1 \! \> ~ d4 ^\markup \colmark { " " \fermaTa } \! } + >> + \set Score.repeatCommands = #'((volta #f)) + + + %% Measure 3 + \time 15/4 + << + { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \pvib \norm } \shifta e1 \glissando d2 } \\ + { d2 \open \mf \< ~ d1 ~ d2 \ff ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp} + >> + \break + + %% Measure 4 + \time 4/4 + \stemUp + \tupletDown + \times 2/3 { d4 ^\markup \colmark { \quatre \db \accel } d d } + \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d } + + + + %% Measure 5 + \time 5/4 + \tupletbp \times 2/3 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d } + \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db \sulp } d _\open d } + \tupletbp \times 2/3 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d } + d2 \ff ^\markup \colmark { " " \pvib } \> + + + %% Measure 6 + \time 5/8 + \once \override Beam #'grow-direction = #RIGHT % \featherDurations #(ly:make-moment 2 3) + { d16 \staccato + [ d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato] + } + \break + + + %% Measure 7 + \time 7/4 + \tupletbp \times 2/3 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d } + \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db } d _\open d } + \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d } + \times 2/3 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d } + \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ } + + + %% Measure 8 + d4 ^\markup \colmark { " " " " \pvib \norm } + deh2 d dih \< + + + %% Measure 9 + << + { \shift d2 \glissando ^\markup \colmark { \quatre } \shifta e1 } \\ + { d2 \open ~ d1 ^\markup \colmark { " " " " \mvib } } + >> + \breathe r4 \! + +} + + +%%% +%%% Score +%%% + +\score { + + << + \relative << + \new Staff \ViolinSolo + >> + + \override Score.Rest #'transparent = ##t + \set Score.defaultBarType = "empty" + >> + + \layout { + indent = 0.0 + \context { + \Staff + \remove "Time_signature_engraver" + } + \context { + \Score + \remove "Bar_number_engraver" + } + } +} diff --git a/input/lsr/unfretted-strings-intro.itely b/Documentation/snippets/unfretted-strings-intro.itely similarity index 100% rename from input/lsr/unfretted-strings-intro.itely rename to Documentation/snippets/unfretted-strings-intro.itely diff --git a/input/lsr/unfretted-strings.snippet-list b/Documentation/snippets/unfretted-strings.snippet-list similarity index 79% rename from input/lsr/unfretted-strings.snippet-list rename to Documentation/snippets/unfretted-strings.snippet-list index 3b2b16d62e..a6c6120a5c 100644 --- a/input/lsr/unfretted-strings.snippet-list +++ b/Documentation/snippets/unfretted-strings.snippet-list @@ -1,6 +1,6 @@ changing--flageolet-mark-size.ly creating-slurs-across-voices.ly dotted-harmonics.ly -snap-pizzicato-markup-bartok-pizzicato.ly +snap-pizzicato-bartok-pizzicato.ly string-quartet-template-simple.ly string-quartet-template-with-separate-parts.ly diff --git a/Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly b/Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly new file mode 100644 index 0000000000..4bb24a1926 --- /dev/null +++ b/Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly @@ -0,0 +1,58 @@ +%% 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 = "staff-notation, contexts-and-engravers" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Se puede usar el delimitador de comienzo de un sistema +@code{SystemStartSquare} estableciéndolo explícitamente dentro de +un contexto @code{StaffGroup} o @code{ChoirStaffGroup}. + +" + doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer +(@code{SystemStartSquare}) umgewandelt werden, wenn man sie explizit +im @code{StaffGroup}- oder @code{ChoirStaffGroup}-Kontext setzt. + +" + doctitlede = "Eine eckige Klammer zu Beginn von Systemgruppen benutzen" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Un regroupement de portées sera indiqué par un simple rectangle +-- @code{SystemStartSquare} -- en début de ligne dès lors que vous le +mentionnerez explicitement au sein d'un contexte @code{StaffGroup} ou +@code{ChoirStaffGroup}. + +" + doctitlefr = "Indication de regroupement de portées par un rectangle" + + + texidoc = " +The system start delimiter @code{SystemStartSquare} can be used by +setting it explicitly in a @code{StaffGroup} or @code{ChoirStaffGroup} +context. + +" + doctitle = "Use square bracket at the start of a staff group" +} % begin verbatim + +\score { + \new StaffGroup { << + \set StaffGroup.systemStartDelimiter = #'SystemStartSquare + \new Staff { c'4 d' e' f' } + \new Staff { c'4 d' e' f' } + >> } +} + diff --git a/Documentation/snippets/using-alternative-flag-styles.ly b/Documentation/snippets/using-alternative-flag-styles.ly new file mode 100644 index 0000000000..c975e50ac4 --- /dev/null +++ b/Documentation/snippets/using-alternative-flag-styles.ly @@ -0,0 +1,52 @@ +%% 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 = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Se pueden imprimir estilos alternativos del corchete o gancho de las +corcheas y figuras menores, mediante la sobreescritura de la propiedad +@code{flag} del objeto @code{Stem}. Son valores válidos +@code{modern-straight-flag} y @code{old-straight-flag}. + +" + doctitlees = "Uso de estilos alternativos para los corchetes" + + + + texidoc = " +Alternative styles of flag on eighth and shorter notes can be displayed +by overriding the @code{flag} property of @code{Stem}. Valid values +are @code{modern-straight-flag} and @code{old-straight-flag}. + +" + doctitle = "Using alternative flag styles" +} % begin verbatim + +testnotes = { + \autoBeamOff + c8 d16 c32 d64 \acciaccatura { c8 } d64 r4 +} + +\relative c' { + \time 2/4 + \testnotes + + \override Stem #'flag = #modern-straight-flag + \testnotes + + \override Stem #'flag = #old-straight-flag + \testnotes + + \revert Stem #'flag + \testnotes +} + diff --git a/Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly b/Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly new file mode 100644 index 0000000000..b521d6b6d9 --- /dev/null +++ b/Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly @@ -0,0 +1,83 @@ +%% 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 = "expressive-marks, vocal-music" + +%% 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 +esta información. Se suele encontrar en la música coral. + +" + + doctitlees = "Uso de arpeggioBracket para hacer más visible un divisi" + + +%% Translation of GIT committish: 27b1197f3bae8512c14d946752cd3e40e7c76016 + + texidocde = " +Das @code{arpeggioBracket}-Klammerobjekt kann benutzt werden, um geteilte +Stimmen anzuzeigen, wenn keine Hälse diese Information bieten. Das sieht +man oft in Chormusik. + +" + doctitlede = "Arpeggio-Klammern benutzen um geteilte Stimmen besser sichtbar zu machen" + + +%% Translation of GIT committish: c1d5bb448321d688185e0c6b798575d4c325ae80 + texidocfr = " +Les crochets d'arpegio (@code{arpeggioBracket}) permettent de mettre en +évidence les divisions d'un pupitre en l'absence de hampe, comme on le +voit régulièrement dans les partitions pour chœur. + +" + + doctitlefr = "Utilisation d'un arpeggioBracket pour rendre les +divisions plus évidentes" + + + texidoc = " +The @code{arpeggioBracket} can be used to indicate the division of +voices where there are no stems to provide the information. This is +often seen in choral music. + +" + doctitle = "Using arpeggioBracket to make divisi more visible" +} % begin verbatim + +\include "english.ly" + +\score { + \relative c'' { + \key a \major + \time 2/2 + << + \new Voice = "upper" + << + { \voiceOne \arpeggioBracket + a2( b2 + 1\arpeggio) + \arpeggio ~ + 4 + } + \addlyrics { \lyricmode { A -- men. } } + >> + \new Voice = "lower" + { \voiceTwo + a1 ~ + a + a ~ + a4 \bar "|." + } + >> + } + \layout { ragged-right = ##t } +} + diff --git a/Documentation/snippets/using-double-slurs-for-legato-chords.ly b/Documentation/snippets/using-double-slurs-for-legato-chords.ly new file mode 100644 index 0000000000..7fe8032374 --- /dev/null +++ b/Documentation/snippets/using-double-slurs-for-legato-chords.ly @@ -0,0 +1,51 @@ +%% 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 = "expressive-marks" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " +Algunos compositores escriben dos ligaduras cuando quieren acordes +legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. + +" + doctitlees = "Utilizar ligaduras dobles para acordes legato" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert +werden. Das kann mit der Eigenschaft @code{doubleSlurs} erreicht werden. + +" + doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Certains auteurs utilisent deux liaisons lorsqu'ils veulent +lier des accords. Dans LilyPond, il faut pour cela activer +la propriété @code{doubleSlurs} : + +" + doctitlefr = "Accords et double liaison d'articulation" + + + texidoc = " +Some composers write two slurs when they want legato chords. This can +be achieved by setting @code{doubleSlurs}. + +" + doctitle = "Using double slurs for legato chords" +} % begin verbatim + +\relative c' { + \set doubleSlurs = ##t + 4( ) +} + diff --git a/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly b/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly new file mode 100644 index 0000000000..b3c8d605a6 --- /dev/null +++ b/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly @@ -0,0 +1,45 @@ +%% 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 = "rhythms" + +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Es posible aplicar la barrita que cruza la barra de las +acciaccaturas, en otras situaciones. + +" + + doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales" + + + +%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b + texidocfr = " +Le trait que l'on trouve sur les hampes des acciaccatures peut +être appliqué dans d'autres situations. + +" + + doctitlefr = "Utilisation de hampe barrée pour une note normale" + + texidoc = " +The slash through the stem found in acciaccaturas can be applied in +other situations. + +" + doctitle = "Using grace note slashes with normal heads" +} % begin verbatim + +\relative c'' { + \override Stem #'stroke-style = #"grace" + c8( d2) e8( f4) +} + diff --git a/Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly b/Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly new file mode 100644 index 0000000000..912e367044 --- /dev/null +++ b/Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly @@ -0,0 +1,123 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Se puede acceder @qq{lateralmente} a algunos grobs desde dentro de la +función de callback de otro grob. Éstos se encuentran relacionados +normalmente como @qq{layout objects} (objetos de presentación) en la +sección @qq{Internal properties} (propiedades internas) de un +interface de grob. Se usa la función @code{ly:grob-object} para +acceder a estos grobs. + + +Se presentan más abajo como ejemplo algunas formas de addecer a grobs +desde dentro de una función de callback de NoteHead, pero la técnica +no se limita a las cabezas de nota. Sin embargo, la función de +callback de NoteHead es especialmente importante, porque es la función +de callback implícita que utiliza la instrucción @code{\\tweak}. + + +La función de ejemplo que se define abajo (\"display-grobs\") no es +probablemente tan útil, pero muestra que se está accediendo +efectivamente a los grobs. + + +Salida de ejemplo de la consola: + + +@example +-------------------- +#-Grob Accidental - +#-Grob Arpeggio - +#-Grob Stem - +@end example + + +" + + doctitlees = "Utilizar ly:grob-object para acceder a los grobs con \\tweak" + + + lsrtags = "tweaks-and-overrides" + + texidoc = " +Some grobs can be accessed @qq{laterally} from within another grob's +callback. These are usually listed as @qq{layout objects} in the +@qq{Internal properties} section of a grob-interface. The function +@code{ly:grob-object} is used to access these grobs. + + +Demonstrated below are some ways of accessing grobs from within a +NoteHead callback, but the technique is not limited to NoteHeads. +However, the NoteHead callback is particularly important, since it is +the implicit callback used by the @code{\\tweak} command. + + +The example function defined below (\"display-grobs\") is probably not +that useful, but it demonstrates that the grobs are indeed being +accessed. + + +Example console output: + + +@example +-------------------- +#-Grob Accidental - +#-Grob Arpeggio - +#-Grob Stem - +@end example + + +" + doctitle = "Using ly:grob-object to access grobs with \\tweak" +} % begin verbatim + + +#(define (notehead-get-accidental notehead) + ;; notehead is grob + (ly:grob-object notehead 'accidental-grob)) + +#(define (notehead-get-arpeggio notehead) + ;; notehead is grob + (let ((notecolumn (notehead-get-notecolumn notehead))) + (ly:grob-object notecolumn 'arpeggio))) + +#(define (notehead-get-notecolumn notehead) + ;; notehead is grob + (ly:grob-parent notehead X)) + +#(define (notehead-get-stem notehead) + ;; notehead is grob + (let ((notecolumn (notehead-get-notecolumn notehead))) + (ly:grob-object notecolumn 'stem))) + +#(define (display-grobs notehead) + ;; notehead is grob + (let ((accidental (notehead-get-accidental notehead)) + (arpeggio (notehead-get-arpeggio notehead)) + (stem (notehead-get-stem notehead))) + (format #t "~2&~a\n" (make-string 20 #\-)) + (for-each + (lambda (x) (format #t "~a\n" x)) + (list accidental arpeggio stem)))) + +\relative c' { + %% display grobs for each note head: + %\override NoteHead #'before-line-breaking = #display-grobs + 1\arpeggio +} diff --git a/input/lsr/using-postscript-to-generate-special-note-head-shapes.ly b/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly similarity index 80% rename from input/lsr/using-postscript-to-generate-special-note-head-shapes.ly rename to Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly index e02b27e861..a16dcd6d79 100644 --- a/input/lsr/using-postscript-to-generate-special-note-head-shapes.ly +++ b/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly @@ -1,10 +1,15 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "editorial-annotations, tweaks-and-overrides" +%% Translation of GIT committish: 5a898cf43a2a78be6c3a58e4359dccd82196fbe7 texidocfr = " Lorsqu'il est impossible d'obtenir facilement une allure particulière pour les têtes de note en recourant à la technique du @code{\\markup}, un @@ -16,8 +21,8 @@ têtes ressemblant à des parallélogrammes. texidoc = " When a note head with a special shape cannot easily be generated with -graphic markup, PostScript code can be used to generate the shape. -This example shows how a parallelogram-shaped note head is generated. +graphic markup, PostScript code can be used to generate the shape. +This example shows how a parallelogram-shaped note head is generated. " doctitle = "Using PostScript to generate special note head shapes" diff --git a/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly b/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly new file mode 100644 index 0000000000..1e5bc644af --- /dev/null +++ b/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly @@ -0,0 +1,30 @@ +%% 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 = "tweaks-and-overrides" + + texidoc = " +With the @code{\\tweak} command, every grob can be tuned directly. +Here are some examples of available tweaks. + +" + doctitle = "Using the \\tweak command to tweak individual grobs" +} % begin verbatim + +\relative c' { + \time 2/4 + \set fingeringOrientations = #'(right) + < + \tweak #'font-size #3 c + \tweak #'color #red d-\tweak #'font-size #8 -4 + \tweak #'style #'cross g + \tweak #'duration-log #2 a + >2 +} + diff --git a/Documentation/snippets/using-the-whiteout-property.ly b/Documentation/snippets/using-the-whiteout-property.ly new file mode 100644 index 0000000000..fd76cb9390 --- /dev/null +++ b/Documentation/snippets/using-the-whiteout-property.ly @@ -0,0 +1,63 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +Se puede imprimir cualquier objeto gráfico sobre un fondo blanco para +enmascarar parte de los objetos que están por debajo. Esto puede ser +útil para mejorar el aspecto de las colisiones en situaciones +complejas cuando no es práctico reposicionar los objetos. Es +necesario establecer explícitamente la propiedad de capa +(@code{layer}) para controlar qué objetos resultan enmascarados por el +fondo blanco. + +En este ejemplo, la colisión de la ligadura de unión con la indicación +de compás resulta mejorada enmascarando la parte de la ligadura que +cruza a la indicación de compás mediante el establecimiento de la +propiedad @code{whiteout} de @code{TimeSignature}. Para hacer esto, +se mueve @code{TimeSignature} a una capa por encima de @code{Tie}, que +se deja en la capa predeterminada de 1, y @code{StaffSymbol} se mueve +a una capa por encima de @code{TimeSignature} de manera que no resulte +enmascarada. + +" + + doctitlees = "Uso de la propiedad whiteout" + + lsrtags = "expressive-marks, editorial-annotations" + texidoc = " +Any graphical object can be printed over a white background to +mask parts of objects that lie beneath. This can be useful to +improve the appearance of collisions in complex situations when +repositioning objects is impractical. It is necessary to explicitly +set the @code{layer} property to control which objects are masked +by the white background. + +In this example the collision of the tie with the time signature is +improved by masking out the part of the tie that crosses the time +signature by setting the @code{whiteout} property of @code{TimeSignature}. +To do this @code{TimeSignature} is moved to a layer above @code{Tie}, which +is left in the default layer of 1, and @code{StaffSymbol} is moved to a +layer above @code{TimeSignature} so it is not masked. +" + doctitle = "Using the whiteout property" +} % begin verbatim + + +{ + \override Score.StaffSymbol #'layer = #4 + \override Staff.TimeSignature #'layer = #3 + b'2 b'~ + \once \override Staff.TimeSignature #'whiteout = ##t + \time 3/4 + b' r4 +} diff --git a/Documentation/snippets/using-ties-with-arpeggios.ly b/Documentation/snippets/using-ties-with-arpeggios.ly new file mode 100644 index 0000000000..00781b4174 --- /dev/null +++ b/Documentation/snippets/using-ties-with-arpeggios.ly @@ -0,0 +1,70 @@ +%% 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 = "rhythms" + +%% 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. +En este caso, las dos notas ligadas no tienen que ser consecutivas. +Esto se puede conseguir estableciendo la propiedad +@code{tieWaitForNote} al valor @code{#t}. La misma funcionalidad +es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero +en principio también se puede usar para notas normales consecutivas. + +" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " + Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In + diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander. +Das Verhalten kann erreicht werden, indem die @code{tieWaitForNote}-Eigenschaft +auf @code{#t} gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa +ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch +für normale Überbindungen eingesetzt werden +" + doctitlede = "Überbindungen für Arpeggio benutzen" + + + +%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685 + texidocfr = " +Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans +ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors +assigner à la propriété @code{tieWaitForNote} la valeur @code{#t} +(@emph{true} pour @qq{vrai}). Cette même méthode peut servir, par +exemple, à lier un trémolo à un accord. +" + doctitlefr = "Liaison de tenue et arpège" + + texidoc = " +Ties are sometimes used to write out arpeggios. In this case, two tied +notes need not be consecutive. This can be achieved by setting the +@code{tieWaitForNote} property to @code{#t}. The same feature is also +useful, for example, to tie a tremolo to a chord, but in principle, it +can also be used for ordinary consecutive notes. + +" + doctitle = "Using ties with arpeggios" +} % begin verbatim + +\relative c' { + \set tieWaitForNote = ##t + \grace { c16[ ~ e ~ g] ~ } 2 + \repeat tremolo 8 { c32 ~ c' ~ } 1 + e8 ~ c ~ a ~ f ~ 2 + \tieUp + c8 ~ a + \tieDown + \tieDotted + g8 ~ c g2 +} + diff --git a/input/lsr/utf-8.ly b/Documentation/snippets/utf-8.ly similarity index 81% rename from input/lsr/utf-8.ly rename to Documentation/snippets/utf-8.ly index fd892f4c60..de9b92d4d2 100644 --- a/input/lsr/utf-8.ly +++ b/Documentation/snippets/utf-8.ly @@ -1,13 +1,17 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "text" texidoc = " Various scripts may be used for texts (like titles and lyrics) by -entering them in UTF-8 encoding, and using a Pango based backend. +entering them in UTF-8 encoding, and using a Pango based backend. Depending on the fonts installed, this fragment will render Bulgarian (Cyrillic), Hebrew, Japanese and Portuguese. @@ -27,13 +31,13 @@ You may have to install additional fonts. Red Hat Fedora taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ - ttfonts-zh_CN fonts-ja fonts-hebrew + ttfonts-zh_CN fonts-ja fonts-hebrew Debian GNU/Linux apt-get install emacs-intl-fonts xfonts-intl-.* \ ttf-kochi-gothic ttf-kochi-mincho \ - xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi + xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi %} % Cyrillic font diff --git a/Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly b/Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly new file mode 100644 index 0000000000..aac584a965 --- /dev/null +++ b/Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.ly @@ -0,0 +1,36 @@ +%% 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 = "expressive-marks, ancient-notation" + + texidoc = " +This short vertical line placed above the note is commonly used in +baroque music. Its meaning can vary, but generally indicates notes +that should be played with more @qq{weight}. The following example +demonstrates how to achieve such a notation. + +" + doctitle = "Vertical line as a baroque articulation mark" +} % begin verbatim + +upline = +#(let ((m (make-articulation "stopped"))) + (set! (ly:music-property m 'tweaks) + (acons 'font-size 3 + (acons 'stencil (lambda (grob) + (grob-interpret-markup + grob + (make-draw-line-markup '(0 . 1)))) + (ly:music-property m 'tweaks)))) + m) + + +\relative c' { + a'4^\upline a( c d')_\upline +} diff --git a/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly b/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly new file mode 100644 index 0000000000..181244b37e --- /dev/null +++ b/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly @@ -0,0 +1,86 @@ +%% 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 = "tweaks-and-overrides, spacing" + +%% 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 +indicaciones dinámicas textuales) se pueden alinear con un punto de +referencia común, independientemente de sus dimensiones. De esta +manera, todos los elementos estarán alineados verticalmente, +produciendo así un resultado más satisfactorio. + +Se usa una idea similar para alinear las inscripciones de texto a lo +largo de su línea de base. + +" + doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 +texidocde = " +Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt, +können alle @code{DynamicLineSpanner}-Objekte (Crescendo-Klammern und +Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer +wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden. +Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz +sieht ansprechender aus. + +Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer +Grundlinie auszurichten. + +" + doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen" + +%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20 + texidocfr = " +Vous pourrez, en jouant sur la propriété @code{'Y-extent}, aligner les +différents objets @code{DynamicLineSpanner} (souflets ou textuels) +quelle que soit leur étendue, par rapport à un même point de référence. +Tous les éléments seront alors centrés sur une même ligne, ce qui sera +visuellement plus agréable. + +C'est le même principe qui sert à aligner les indications textuelles sur +une ligne de référence. + +" + doctitlefr = "Alignement vertical des nuances indications textuelles" + + + texidoc = " +By setting the @code{'Y-extent} property to a suitable value, all +@code{DynamicLineSpanner} objects (hairpins and dynamic texts) can be +aligned to a common reference point, regardless of their actual extent. +This way, every element will be vertically aligned, thus producing a +more pleasing output. + +The same idea is used to align the text scripts along their baseline. + +" + doctitle = "Vertically aligned dynamics and textscripts" +} % begin verbatim + +music = \relative c' { + a'2\p b\f + e4\p f\f\> g, b\p + c2^\markup { \huge gorgeous } c^\markup { \huge fantastic } +} + +{ + \music + \break + \override DynamicLineSpanner #'staff-padding = #2.0 + \override DynamicLineSpanner #'Y-extent = #'(-1.5 . 1.5) + \override TextScript #'Y-extent = #'(-1.5 . 1.5) + \music +} + + diff --git a/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly b/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly new file mode 100644 index 0000000000..9f1d5eca25 --- /dev/null +++ b/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly @@ -0,0 +1,38 @@ +%% 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 = "expressive-marks" + +%% 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 +expresiones dinámicas se alinean cuando no se producen sobre la +misma nota, incremente la propiedad @code{staff-padding} del +objeto @code{DynamicLineSpanner}. + +" + doctitlees = "Alinear verticalmente expresiones dinámicas que abarcan varias notas" + + texidoc = " +Dynamics that occur at, begin on, or end on the same note will be +vertically aligned. To ensure that dynamics are aligned when they do +not occur on the same note, increase the @code{staff-padding} property +of the @code{DynamicLineSpanner} object. + +" + doctitle = "Vertically aligning dynamics across multiple notes" +} % begin verbatim + +\relative c' { + \override DynamicLineSpanner #'staff-padding = #4 + c2\p f\mf + g2\< b4\> c\! +} + diff --git a/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly b/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly new file mode 100644 index 0000000000..4e2b678b60 --- /dev/null +++ b/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly @@ -0,0 +1,78 @@ +%% 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 = "vocal-music, tweaks-and-overrides, spacing" + +%% 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 +controlar la posición de la letra y los compases de ossia. + +" + doctitlees = "Alineación vertical de la letra y los compases de ossia" + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Dieser Schnipsel zeigt, wie man die Kontexteigenschaften +@code{alignBelowContext} und @code{alignAboveContext} benutzen kann, um +die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren. + +" + doctitlede = "Gesangstext und Ossia vertikal ausrichten" + +%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e + texidocfr = " +Cet exemple illustre la manière de positionner une portée d'ossia et +des paroles à l'aide des propriétés de contexte @code{alignBelowContext} +et @code{alignAboveContext}. + +" + doctitlefr = "Positionnement d'une ossia et des paroles" + + + texidoc = " +This snippet demonstrates the use of the context properties +@code{alignBelowContext} and @code{alignAboveContext} to control the +positioning of lyrics and ossias. + +" + doctitle = "Vertically aligning ossias and lyrics" +} % begin verbatim + +\paper { + ragged-right = ##t +} + +\relative c' << + \new Staff = "1" { c4 c s2 } + \new Staff = "2" { c4 c s2 } + \new Staff = "3" { c4 c s2 } + { \skip 2 + << + \lyrics { + \set alignBelowContext = #"1" + lyrics4 below + } + \new Staff \with { + alignAboveContext = #"3" + fontSize = #-2 + \override StaffSymbol #'staff-space = #(magstep -2) + \remove "Time_signature_engraver" + } { + \times 4/6 { + \override TextScript #'padding = #3 + c8[^"ossia above" d e d e f] + } + } + >> + } +>> + diff --git a/input/lsr/vertically-centered-common-lyrics.ly b/Documentation/snippets/vertically-centered-common-lyrics.ly similarity index 86% rename from input/lsr/vertically-centered-common-lyrics.ly rename to Documentation/snippets/vertically-centered-common-lyrics.ly index 136b57b014..1b56f6ff47 100644 --- a/input/lsr/vertically-centered-common-lyrics.ly +++ b/Documentation/snippets/vertically-centered-common-lyrics.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "vocal-music" diff --git a/Documentation/snippets/vertically-centering-paired-figured-bass-extenders.ly b/Documentation/snippets/vertically-centering-paired-figured-bass-extenders.ly new file mode 100644 index 0000000000..5b0b75e958 --- /dev/null +++ b/Documentation/snippets/vertically-centering-paired-figured-bass-extenders.ly @@ -0,0 +1,53 @@ +%% 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, tweaks-and-overrides" + +%% 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 +verdadero, las parejas de líneas extensoras congruentes se centran +verticalmente si el valor de @code{figuredBassCenterContinuations} +tiene el valor verdadero. + +" + doctitlees = "Centrado vertical de las líneas de bajo cifrado emparejadas" + + + + texidoc = " +Where figured bass extender lines are being used by setting +@code{useBassFigureExtenders} to true, pairs of congruent figured bass +extender lines are vertically centered if +@code{figuredBassCenterContinuations} is set to true. + +" + doctitle = "Vertically centering paired figured bass extenders" +} % begin verbatim + +<< + \relative c' { + c8 c b b a a c16 c b b + c8 c b b a a c16 c b b + c8 c b b a a c c b b + } + \figures { + \set useBassFigureExtenders = ##t + <6+ 4 3>4 <6 4 3>8 r + <6+ 4 3>4 <6 4 3>8 <4 3+>16 r + \set figuredBassCenterContinuations = ##t + <6+ 4 3>4 <6 4 3>8 r + <6+ 4 3>4 <6 4 3>8 <4 3+>16 r + \set figuredBassCenterContinuations = ##f + <6+ 4 3>4 <6 4 3>8 r + <6+ 4 3>4 <6 4 3>8 <4 3+>8 + } +>> + diff --git a/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly b/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly new file mode 100644 index 0000000000..dbaee280a5 --- /dev/null +++ b/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly @@ -0,0 +1,163 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + texidoces = " + +Esta plantilla añade una reducción de piano automática a la partitura +vocal SATB estándar que se mostró en la @qq{Plantilla de conjunto +vocal}. Esto presenta uno de los puntos fuertes de LilyPond: podemos +usar una definición de música más de una vez. Si se hace cualquier +cambio en las notas de la parte vocal (digamos @code{tenorMusic}), +entonces los cambios se aplicarán también a la reducción de piano. + +" + doctitlees = "Plantilla de conjunto vocal con reducción de piano automática" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +このテンプレートは、\"合唱テンプレート\"で示された標準の SATB ボーカル譜に自動@c +ピアノ譜を付け加えています。これは LilyPond の強みの 1 つを示しています - 音楽@c +定義を何回も使用することができます。ボーカルの音符 (例えば、@code{tenorMusic} +の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。 +" + +%% 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 +Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond +-- man kann eine Variable mehr als einmal benutzen. Wenn Sie +irgendeine Änderung an einer Chorstimme vornehmen, (etwa +tenorMusic), verändert sich auch der Klavierauszug entsprechend. +" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Ce canevas ajoute une réduction pour piano à une partition standard pour +chœur à quatre voix mixtes. Ceci illustre l'un des avantages de +LilyPond : une expression musicale peut être réutilisée sans effort. +Toute modification apportée à l'une des voix, mettons @code{tenorMusique}, +sera automatiquement reportée dans la réduction pour piano. + +" + doctitlefr = "Ensemble vocal avec réduction pour piano" + + lsrtags = "vocal-music, keyboards, template" + + texidoc = " +This template adds an automatic piano reduction to the standard SATB +vocal score demonstrated in @qq{Vocal ensemble template}. This +demonstrates one of the strengths of LilyPond – you can use a music +definition more than once. If any changes are made to the vocal notes +(say, @code{tenorMusic}), then the changes will also apply to the piano +reduction. +" + doctitle = "Vocal ensemble template with automatic piano reduction" +} % begin verbatim + + +\paper { + top-system-spacing #'basic-distance = #10 + score-system-spacing #'basic-distance = #20 + system-system-spacing #'basic-distance = #20 + last-bottom-spacing #'basic-distance = #10 +} + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords =\lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + << + \new ChoirStaff << + \new Lyrics = "sopranos" \with { + % This is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff = "women" << + \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } + \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } + >> + \new Lyrics = "altos" + \new Lyrics = "tenors" \with { + % This is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + + \new Staff = "men" << + \clef bass + \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } + \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } + >> + \new Lyrics = "basses" + \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords + \context Lyrics = "altos" \lyricsto "altos" \altoWords + \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords + \context Lyrics = "basses" \lyricsto "basses" \bassWords + >> + \new PianoStaff << + \new Staff << + \set Staff.printPartCombineTexts = ##f + \partcombine + << \global \sopMusic >> + << \global \altoMusic >> + >> + \new Staff << + \clef bass + \set Staff.printPartCombineTexts = ##f + \partcombine + << \global \tenorMusic >> + << \global \bassMusic >> + >> + >> + >> +} diff --git a/Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly b/Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly new file mode 100644 index 0000000000..2aa3309122 --- /dev/null +++ b/Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly @@ -0,0 +1,125 @@ +%% 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 { +%% 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: 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 +colocan utilizando @code{alignAboveContext} y +@code{alignBelowContext}. + +" + doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" + + +%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86 + texidocja = " +このテンプレートは基本的に単純な \"合唱\" テンプレートと同じですが、歌詞が +@code{alignAboveContext} と @code{alignBelowContext} を用いて配置されています。 +" + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +In diesem Beispiel werden die Texte mit den Befehlen +@code{alignAboveContext} und @code{alignBelowContext} +über und unter dem System angeordnet. +" + + doctitlede = "Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System" + + +%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a + texidocfr = " +Ce canevas ressemble beaucoup à celui pour chœur à quatre voix mixtes. +La différence réside dans le fait que les paroles sont positionnées en +ayant recours à @code{alignAboveContext} et @code{alignBelowContext}. + +" + doctitlefr = "Ensemble vocal avec alignement des paroles selon le contexte" + + texidoc = " +This template is basically the same as the simple @qq{Vocal ensemble} +template, with the exception that here all the lyrics lines are placed +using @code{alignAboveContext} and @code{alignBelowContext}. + +" + doctitle = "Vocal ensemble template with lyrics aligned below and above the staves" +} % begin verbatim + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords = \lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + \new ChoirStaff << + \new Staff = "women" << + \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } + \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } + >> + \new Lyrics \with { alignAboveContext = #"women" } \lyricsto "sopranos" \sopWords + \new Lyrics \with { alignBelowContext = #"women" } \lyricsto "altos" \altoWords + % we could remove the line about this with the line below, since we want + % the alto lyrics to be below the alto Voice anyway. + % \new Lyrics \lyricsto "altos" \altoWords + + \new Staff = "men" << + \clef bass + \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } + \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } + >> + \new Lyrics \with { alignAboveContext = #"men" } \lyricsto "tenors" \tenorWords + \new Lyrics \with { alignBelowContext = #"men" } \lyricsto "basses" \bassWords + % again, we could replace the line above this with the line below. + % \new Lyrics \lyricsto "basses" \bassWords + >> +} + diff --git a/Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly b/Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly new file mode 100644 index 0000000000..459e985c59 --- /dev/null +++ b/Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly @@ -0,0 +1,153 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " +Esta plantilla crea una partitura que comienza con una estrofa para +solista y continúa con un estribillo a dos voces. también muestra el +uso de silencios de separación dentro de la variable @code{\\global} +para definir cambios de compás (y otros elementos que son comunes a +todas las partes) a lo largo de toda la partitura. + +" + + 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 = " +Diese Vorlage erstellt eine Partitur, die mit Sologesang beginnt und einen +Refrain für zwei Stimmen enthält. Sie zeigt auch die Benutzung von +Platzhalter-Pausen innerhalb der @code{\\global}-Variable, um Taktwechsel +(und andere Elemente, die für alle Stimmen gleich sind) für das gesamte +Stück zu definieren. + +" + doctitlede = "Sologesang und zweistimmiger Refrain" + +%% Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37 + + texidocfr = " +Ce canevas illustre la manière d'agencer une œuvre vocale où le couplet +est chanté en solo et le refrain à deux voix. Vous noterez le recours +aux silences invisibles dans la variable @code{\\global}@tie{}; ils +permettent de positionner les changements de métrique et autres éléments +communs à toutes les parties et pour l'intégralité du morceau. +" + doctitlefr = "Ensemble vocal avec couplet et refrain" + + lsrtags = "vocal-music, contexts-and-engravers, template" + texidoc = " +This template creates a score which starts with a solo verse and +continues into a refrain for two voices. It also demonstrates the +use of spacer rests within the @code{\\global} variable to define +meter changes (and other elements common to all parts) throughout +the entire score. +" + doctitle = "Vocal ensemble template with verse and refrain" +} % begin verbatim + + +global = { + \key g \major + + % verse + \time 3/4 + s2.*2 + \break + + % refrain + \time 2/4 + s2*2 + \bar "|." +} + +SoloNotes = \relative g' { + \clef "treble" + + % verse + g4 g g | + b4 b b | + + % refrain + R2*2 | +} + +SoloLyrics = \lyricmode { + One two three | + four five six | +} + +SopranoNotes = \relative c'' { + \clef "treble" + + % verse + R2.*2 | + + % refrain + c4 c | + g4 g | +} + +SopranoLyrics = \lyricmode { + la la | + la la | +} + +BassNotes = \relative c { + \clef "bass" + + % verse + R2.*2 | + + % refrain + c4 e | + d4 d | +} + +BassLyrics = \lyricmode { + dum dum | + dum dum | +} + +\score { + << + \new Voice = "SoloVoice" << \global \SoloNotes >> + \new Lyrics \lyricsto "SoloVoice" \SoloLyrics + + \new ChoirStaff << + \new Voice = "SopranoVoice" << \global \SopranoNotes >> + \new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics + + \new Voice = "BassVoice" << \global \BassNotes >> + \new Lyrics \lyricsto "BassVoice" \BassLyrics + >> + >> + \layout { + ragged-right = ##t + \context { \Staff + % these lines prevent empty staves from being printed + \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } + } +} + diff --git a/Documentation/snippets/vocal-ensemble-template.ly b/Documentation/snippets/vocal-ensemble-template.ly new file mode 100644 index 0000000000..be94bf1975 --- /dev/null +++ b/Documentation/snippets/vocal-ensemble-template.ly @@ -0,0 +1,155 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%% 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 +todas las partes. Por ejemplo, el compás y la armadura casi siempre +son los mismos para todas. Como en la plantilla @qq{Himno}, las cuatro +voces se reagrupan en sólo dos pentagramas. + +" + doctitlees = "Plantilla de conjunto vocal" + + +%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441 + texidocja = " +これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c +もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c +便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@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 +Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, +die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa +sind fast immer gleich in allen Stimmen. +" + + doctitlede = "Vorlage für Vokalensemble" + + +%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441 + texidocfr = " +Ce fichier constitue un canevas standard de partition pour chœur à +quatre voix mixtes. Lorsque les ensembles s'étoffent, il est judicieux +de recourrir à une section spécifique incluse dans chacune des parties, +tout particulièrement pour gérer la métrique et la tonalité qui, +la plupart du temps, sont communes à tous les pupitres. Comme il est +d'usage pour les hymnes, les quatre voix sont réparties sur deux +portées. + +" + doctitlefr = "Ensemble vocal (simple)" + + lsrtags = "vocal-music, template" + + texidoc = " +Here is a standard four-part SATB vocal score. With larger ensembles, +it is often useful to include a section which is included in all parts. +For example, the time signature and key signature are almost always the +same for all parts. Like in the @qq{Hymn} template, the four voices are +regrouped on only two staves. +" + doctitle = "Vocal ensemble template" +} % begin verbatim + + +\paper { + top-system-spacing #'basic-distance = #10 + score-system-spacing #'basic-distance = #20 + system-system-spacing #'basic-distance = #20 + last-bottom-spacing #'basic-distance = #10 +} + +global = { + \key c \major + \time 4/4 +} + +sopMusic = \relative c'' { + c4 c c8[( b)] c4 +} +sopWords = \lyricmode { + hi hi hi hi +} + +altoMusic = \relative c' { + e4 f d e +} +altoWords = \lyricmode { + ha ha ha ha +} + +tenorMusic = \relative c' { + g4 a f g +} +tenorWords = \lyricmode { + hu hu hu hu +} + +bassMusic = \relative c { + c4 c g c +} +bassWords = \lyricmode { + ho ho ho ho +} + +\score { + \new ChoirStaff << + \new Lyrics = "sopranos" \with { + % this is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff = "women" << + \new Voice = "sopranos" { + \voiceOne + << \global \sopMusic >> + } + \new Voice = "altos" { + \voiceTwo + << \global \altoMusic >> + } + >> + \new Lyrics = "altos" + \new Lyrics = "tenors" \with { + % this is needed for lyrics above a staff + \override VerticalAxisGroup #'staff-affinity = #DOWN + } + \new Staff = "men" << + \clef bass + \new Voice = "tenors" { + \voiceOne + << \global \tenorMusic >> + } + \new Voice = "basses" { + \voiceTwo << \global \bassMusic >> + } + >> + \new Lyrics = "basses" + \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords + \context Lyrics = "altos" \lyricsto "altos" \altoWords + \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords + \context Lyrics = "basses" \lyricsto "basses" \bassWords + >> +} + diff --git a/Documentation/snippets/vocal-headword.ly b/Documentation/snippets/vocal-headword.ly new file mode 100644 index 0000000000..6991676199 --- /dev/null +++ b/Documentation/snippets/vocal-headword.ly @@ -0,0 +1,81 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" + +#(set-global-staff-size 15) +\paper { + ragged-right = ##t + line-width = 17\cm + indent = 0\cm +} + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +\layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##t + \override NonMusicalPaperColumn #'keep-inside-line = ##t + } +} + +% L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale +% mm. 216 -- 236 +% Text: F. von Schiller + +\score { + \new Staff \relative c' { + \set Score.currentBarNumber = 216 + \bar "" % make first bar number be shown + \clef bass \key d \minor \time 3/4 + % \tempo "Presto" + % \compressFullBarRests R2.*8 + \tempo "Recitativo" + \autoBeamOff + r4^\markup { \small Baritono } r a + \appoggiatura a8 e'2. ~ + e4 d8[ cis d e] + e4 g, r8 g + bes2 a8 e + g4 f r + R2.*2 + gis2 gis4 + r4 d'4. b8 + b4 gis8([ a b cis] + e8[ d cis d)] b([ gis)] + e8 d d4 fis8([ e)] + d4 cis r + \key d \major + r4 r a' + d4.( e8[ fis e)] + e([ d)] d([ cis d a)] + g8([ fis)] fis([ e d c)] + c8([ b)] g'2~ + \once \override Script #'outside-staff-priority = #1 % put fermata closer to staff + g4.\fermata ^\markup { \small \italic "ad libitum" } e8[ cis!] d + d8 a a4 r \bar "||" + + % \time 4/4 \tempo "Allegro assai" + % R1 + % e''4^\f d r2 + % R1 + % e4( ^\f d2) a8([ g)] + } + \addlyrics { + O Freun -- _ _ de, nicht die -- _ se Tö -- ne! + Son -- dern laßt uns an -- _ ge -- neh -- me -- re an -- stim -- men, + und freu -- _ _ _ _ _ _ _ den -- vol -- le -- re! + % Freu -- de, Freu -- de,__ + } +} + diff --git a/input/lsr/vocal-music-intro.itely b/Documentation/snippets/vocal-music-intro.itely similarity index 100% rename from input/lsr/vocal-music-intro.itely rename to Documentation/snippets/vocal-music-intro.itely diff --git a/Documentation/snippets/vocal-music.snippet-list b/Documentation/snippets/vocal-music.snippet-list new file mode 100644 index 0000000000..e38fb6c94d --- /dev/null +++ b/Documentation/snippets/vocal-music.snippet-list @@ -0,0 +1,33 @@ +adding-ambitus-per-voice.ly +adding-indicators-to-staves-which-get-split-after-a-break.ly +adding-orchestral-cues-to-a-vocal-score.ly +adjusting-lyrics-vertical-spacing.ly +ambitus-with-multiple-voices.ly +ambitus.ly +ancient-notation-template----modern-transcription-of-gregorian-music.ly +anglican-psalm-template.ly +changing-stanza-fonts.ly +chant-or-psalms-notation.ly +forcing-hyphens-to-be-shown.ly +formatting-lyrics-syllables.ly +how-to-put-ties-between-syllables-in-lyrics.ly +hymn-template.ly +lyrics-alignment.ly +lyrics-old-spacing-settings.ly +marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly +orchestra,-choir-and-piano-template.ly +piano-template-with-melody-and-lyrics.ly +putting-lyrics-inside-the-staff.ly +satb-choir-template---four-staves.ly +single-staff-template-with-notes,-lyrics,-and-chords.ly +single-staff-template-with-notes,-lyrics,-chords-and-frets.ly +single-staff-template-with-notes-and-lyrics.ly +skips-in-lyric-mode-2.ly +skips-in-lyric-mode.ly +using-arpeggiobracket-to-make-divisi-more-visible.ly +vertically-aligning-ossias-and-lyrics.ly +vertically-centered-common-lyrics.ly +vocal-ensemble-template-with-automatic-piano-reduction.ly +vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +vocal-ensemble-template-with-verse-and-refrain.ly +vocal-ensemble-template.ly diff --git a/Documentation/snippets/volta-below-chords.ly b/Documentation/snippets/volta-below-chords.ly new file mode 100644 index 0000000000..8610bd2b06 --- /dev/null +++ b/Documentation/snippets/volta-below-chords.ly @@ -0,0 +1,60 @@ +%% 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 = "repeats, staff-notation, chords" + +%% 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 +segunda vez debajo de los acordes. + +" + doctitlees = "Corchetes de primera y segunda vez debajo de los acordes" + + + +%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40 + texidocde = " +Indem man den @code{Volta_engraver} zu dem entsprechenden Notensystem +hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt +werden. + +" + doctitlede = "Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole" + + texidoc = " +By adding the @code{Volta_engraver} to the relevant staff, volte can be +put under chords. + +" + doctitle = "Volta below chords" +} % begin verbatim + +\score { + << + \chords { + c1 + c1 + } + \new Staff \with { + \consists "Volta_engraver" + } + { + \repeat volta 2 { c'1 } + \alternative { c' } + } + >> + \layout { + \context { + \Score + \remove "Volta_engraver" + } + } +} diff --git a/Documentation/snippets/volta-multi-staff.ly b/Documentation/snippets/volta-multi-staff.ly new file mode 100644 index 0000000000..030a54aa80 --- /dev/null +++ b/Documentation/snippets/volta-multi-staff.ly @@ -0,0 +1,41 @@ +%% 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 = "repeats, staff-notation" + + texidoc = " +By adding the @code{Volta_engraver} to the relevant staff, volte can be +put over staves other than the topmost one in a score. + +" + doctitle = "Volta multi staff" +} % begin verbatim + +voltaMusic = \relative c'' { + \repeat volta 2 { + c1 + } + \alternative { + d1 + e1 + } +} + +<< + \new StaffGroup << + \new Staff \voltaMusic + \new Staff \voltaMusic + >> + \new StaffGroup << + \new Staff \with { \consists "Volta_engraver" } + \voltaMusic + \new Staff \voltaMusic + >> +>> + diff --git a/input/lsr/volta-text-markup-using-repeatcommands.ly b/Documentation/snippets/volta-text-markup-using-repeatcommands.ly similarity index 78% rename from input/lsr/volta-text-markup-using-repeatcommands.ly rename to Documentation/snippets/volta-text-markup-using-repeatcommands.ly index 9bcfdd1d58..b739b7b4c0 100644 --- a/input/lsr/volta-text-markup-using-repeatcommands.ly +++ b/Documentation/snippets/volta-text-markup-using-repeatcommands.ly @@ -1,6 +1,10 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% 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.12.3" +\version "2.14.0" \header { lsrtags = "repeats, text" @@ -10,11 +14,12 @@ Though volte are best specified using @code{\\repeat volta}, the context property @code{repeatCommands} must be used in cases where the volta text needs more advanced formatting with @code{\\markup}. + Since @code{repeatCommands} takes a list, the simplest method of including markup is to use an identifier for the text and embed it in the command list using the Scheme syntax @code{#(list (list 'volta textIdentifier))}. Start- and end-repeat commands can be added as -separate list elements: +separate list elements: " doctitle = "Volta text markup using repeatCommands" diff --git a/Documentation/snippets/wind-headword.ly b/Documentation/snippets/wind-headword.ly new file mode 100644 index 0000000000..7e52280c0f --- /dev/null +++ b/Documentation/snippets/wind-headword.ly @@ -0,0 +1,60 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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" +#(set-global-staff-size 15) +\paper { + line-width = 16\cm + indent = 0\cm +} + +% NR 2.whatever Wind + +\header { + lsrtags = "headwords" + texidoc = "" + doctitle = "headword" +} % begin verbatim + + +% Tchaikovsky +% Nutcracker Suite, VII Dance of the Merlitons +\score { + \new StaffGroup << + \new Staff \relative c'' { + \set Staff.instrumentName = "Flauto I,II" + \once \override Score.RehearsalMark #'self-alignment-X = #-1 + \once \override Score.RehearsalMark #'break-align-symbols = +#'(time-signature) + \once \override Score.TimeSignature +#'break-align-anchor-alignment = #LEFT + \once \override Score.RehearsalMark #'padding = #4 + \mark \markup \large \bold {Moderato assai} + \key d \major + \time 2/4 + \compressFullBarRests + R2*2 + 16-.\p -. -. -. 8-. -. + -.\< 32( 4--)\mf + 16-. -. -. -. + (\> ) -. -.\! + 4--\sf \acciaccatura {8} 4--\mf + } + \new Staff \relative c' { + \set Staff.instrumentName = "Flauto III" + \key d \major + \time 2/4 + \compressFullBarRests + R2*2_\markup{Gr.Fl.} + fis16-.\p e-. fis-. e-. fis8-. e-. + g8-.\< fis32( a d fis a4--)\mf + b16-. a-. b-. a-. g(\> fis) d-. a-.\! + g4--\sf \acciaccatura fis'8 g4--\mf + } + >> +} + diff --git a/input/lsr/winds-intro.itely b/Documentation/snippets/winds-intro.itely similarity index 100% rename from input/lsr/winds-intro.itely rename to Documentation/snippets/winds-intro.itely diff --git a/Documentation/snippets/winds.snippet-list b/Documentation/snippets/winds.snippet-list new file mode 100644 index 0000000000..aca4d07fe3 --- /dev/null +++ b/Documentation/snippets/winds.snippet-list @@ -0,0 +1,7 @@ +changing-the-size-of-woodwind-diagrams.ly +fingering-symbols-for-wind-instruments.ly +flute-slap-notation.ly +graphical-and-text-woodwind-diagrams.ly +recorder-fingering-chart.ly +woodwind-diagrams-key-lists.ly +woodwind-diagrams-listing.ly diff --git a/Documentation/snippets/woodwind-diagrams-key-lists.ly b/Documentation/snippets/woodwind-diagrams-key-lists.ly new file mode 100644 index 0000000000..331a47493f --- /dev/null +++ b/Documentation/snippets/woodwind-diagrams-key-lists.ly @@ -0,0 +1,69 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c + + texidoces = " + +El fragmento de código que aparece a continuación produce una lista de +todas las llaves y disposiciones de llave posibles para los diagramas +de posiciones de instrumentos de viento madera, tal y como están +definidos en @file{scm/define-woodwind-diagrams.scm}. La lista se +presenta en la consola y en el archivo de registro de salida, pero no +en la salida de música. + +" + + doctitlees = "Listas de llaves para los diagramas de viento madera" + +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + texidocde=" +Dieses Schnipsel erzeugt eine Liste aller möglichen Löcher und Locheinstellungen +für Holzbläserdiagramme, wie sie in der Datei +@file{scm/define-woodwind-diagrams.scm} definiert sind. Die Liste wird auf +der Kommandozeile und in der Log-Datei angezeigt, nicht in den Noten. +" + doctitlede = "Liste der Löcher für Holzbläserdiagramme" + + +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Le code suivant vous permettra d'obtenir une liste de toutes les +possibilités en matière de doigtés pour bois, tels qu'ils sont définis +dans le fichier @file{scm/define-woodwind-diagrams.scm}. Cette liste +sera produite en console et dans le fichier de journalisation, mais pas +sous forme de musique. +" + doctitlefr = "Liste des différents diagrammes de doigtés pour bois" + + lsrtags = "winds" + + texidoc=" +The snippet below produces a list of all possible keys and key +settings for woodwind diagrams as defined in +@file{scm/define-woodwind-diagrams.scm}. The list will be displayed +on the console and in the log file, but not in the music. +" + doctitle = "Woodwind diagrams key lists" +} % begin verbatim + + +#(print-keys-verbose 'piccolo) +#(print-keys-verbose 'flute) +#(print-keys-verbose 'flute-b-extension) +#(print-keys-verbose 'oboe) +#(print-keys-verbose 'clarinet) +#(print-keys-verbose 'bass-clarinet) +#(print-keys-verbose 'low-bass-clarinet) +#(print-keys-verbose 'saxophone) +#(print-keys-verbose 'baritone-saxophone) +#(print-keys-verbose 'bassoon) +#(print-keys-verbose 'contrabassoon) diff --git a/Documentation/snippets/woodwind-diagrams-listing.ly b/Documentation/snippets/woodwind-diagrams-listing.ly new file mode 100644 index 0000000000..b94ca3032d --- /dev/null +++ b/Documentation/snippets/woodwind-diagrams-listing.ly @@ -0,0 +1,131 @@ +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% 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 { +%%% 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 +el momento. + +" + doctitlees = "Listado de los diagramas para viento madera" + +%%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 + + + texidocde=" +Folgende Noten zeige alle Holzbläserdiagramme, die für LilyPond +definiert sind. + +" + doctitlede = "Liste der Holzbläserdiagramme" + + +%% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d + texidocfr = " +Voici la liste des différents instruments à vent de la section des bois +dont les doigtés sont disponibles à ce jour. +" + doctitlefr = "Liste des diagrammes de doigtés pour bois" + + + lsrtags="winds" + texidoc=" +The following music shows all of the woodwind diagrams currently +defined in LilyPond. +" + doctitle = "Woodwind diagrams listing" + +} % begin verbatim + + +\relative c' { + \textLengthOn + c1^ + \markup { + \center-column { + 'piccolo + " " + \woodwind-diagram + #'piccolo + #'() + } + } + + c1^ + \markup { + \center-column { + 'flute + " " + \woodwind-diagram + #'flute + #'() + } + } + c1^\markup { + \center-column { + 'oboe + " " + \woodwind-diagram + #'oboe + #'() + } + } + + c1^\markup { + \center-column { + 'clarinet + " " + \woodwind-diagram + #'clarinet + #'() + } + } + + c1^\markup { + \center-column { + 'bass-clarinet + " " + \woodwind-diagram + #'bass-clarinet + #'() + } + } + + c1^\markup { + \center-column { + 'saxophone + " " + \woodwind-diagram + #'saxophone + #'() + } + } + + c1^\markup { + \center-column { + 'bassoon + " " + \woodwind-diagram + #'bassoon + #'() + } + } + + c1^\markup { + \center-column { + 'contrabassoon + " " + \woodwind-diagram + #'contrabassoon + #'() + } + } +} diff --git a/input/lsr/world-music-intro.itely b/Documentation/snippets/world-music-intro.itely similarity index 100% rename from input/lsr/world-music-intro.itely rename to Documentation/snippets/world-music-intro.itely diff --git a/input/lsr/world-music.snippet-list b/Documentation/snippets/world-music.snippet-list similarity index 100% rename from input/lsr/world-music.snippet-list rename to Documentation/snippets/world-music.snippet-list diff --git a/Documentation/texinfo.css b/Documentation/texinfo.css deleted file mode 100644 index af84899fc6..0000000000 --- a/Documentation/texinfo.css +++ /dev/null @@ -1,106 +0,0 @@ - hr { border:0; height:1; color: #000000; background-color: #000000; } -/* hr { - border: none; - height: 1px; - color: #666666; - background-color: #666666; -} -body { - border-left: 1px solid #666666; - border-right: 1px solid #666666; - color: #332d28; - margin-right: auto; - margin-left: auto; - width: 60em; - list-style-type: square; - font-family: Arial,Helvetica,sans-serif; - padding-right: 1em; - padding-left: 1em; -} -a { - border-bottom: 1px dashed #344242; - text-decoration: none; - color: #344242; -} -a:link { - text-decoration: none; -} -a:visited { - border-bottom: 1px dashed #666666; - color: #666666; -} -a:active { - border-bottom: 1px solid #00cccc; - color: #00cccc; -} -a:hover { - border-bottom: 1px solid #1d7b85; - color: #1d7b85; -} -blockquote { - border: 1px solid #cccccc; - padding: 3px; - width: 40em; -} -.node { - border-left: 1px solid #666666; - margin: -0.5em 0px 1em; - padding: 2px 1px 0px; - font-style: italic; -} -.node a { - border: none; - text-decoration: underline; - font-style: normal; - font-weight: bold; -} -.verbatim { - font-family: "Courier New",Courier,monospace; -} -.unnumberedsubsubsec { - font-size: large; - color: #1d7b85; -} -.subsubheading { - font-size: large; - color: #3b220d; -} -.contents { - border: 1px dashed #339999; - margin: 3px 2em; - list-style-type: square; - padding-right: 1em; - width: 40em; - background-color: #fcfff9; -} -.contents a { - border-bottom: 1px dashed #423d34; - text-decoration: none; - color: #423d34; -} -.contents a:visited { - border-bottom: 1px dashed #666666; - color: #666666; -} -.contents a:active { - border-bottom: 1px solid #f0d86d; - color: #f0d86d; -} -.contents a:hover { - border-bottom: 1px solid #3b220d; - color: #3b220d; -} -.menu { - border-left: 1px dashed #339999; - margin: 3px 2em 1em; - list-style-type: square; - padding-left: 1.4em; - width: 40em; -} -.unnumbered { -} -h2 { - font-size: x-large; - color: #1d7b85; -} -*/ diff --git a/Documentation/topdocs/AUTHORS.texi b/Documentation/topdocs/AUTHORS.texi index d26dfb0d0e..d802b4310c 100644 --- a/Documentation/topdocs/AUTHORS.texi +++ b/Documentation/topdocs/AUTHORS.texi @@ -2,168 +2,85 @@ @documentencoding utf-8 @documentlanguage en @setfilename AUTHORS.info -@settitle AUTHORS - who did what on GNU LilyPond- +@settitle AUTHORS - who did what for GNU LilyPond @node Top @top -@unnumbered AUTHORS +@contents + +@include macros.itexi +@include included/authors.itexi + This file lists authors of LilyPond, and what they wrote. This list -is alphabetically ordered by surname. This file lists people that have -contributed over 100 lines of code. - - -@c Authors are encouraged to maintain their own entry. - -@c Sorted by family name. - - -Core code: - -@itemize @bullet -@item @email{erlenda@@gmail.com,Erlend Aasland} - Color support, tablature improvements, trivial \mark stuff, -al-niente hairpins. - -@item @email{benkop@@freestart.hu,Pal Benko}, - Ancient notation. -@item @email{jch@@pps.jussieu.fr, Juliusz Chroboczek}, - Type42 code. -@item @email{david.feuer@@gmail.com, David Feuer}, - PS output code refactoring. -@item @email{bernard@@fong-hurley.org.uk, Bernard Hurley}, - X11 color. -@item @email{chris@@fluffhouse.org.uk, Chris Jackson}, - Piano pedals, directed arpeggios. -@item @email{heikki.junes@@hut.fi, Heikki Junes}, - Fine tuning for quarter tones in midi output. -@item @email{reinhold@@kainhofer.com, Reinhold Kainhofer}, - @uref{http://reinhold.kainhofer.com}, - Musicxml2ly development, various features and fixes. -@item @email{m.krause@@tu-harburg.de, Michael Krause}, - Breathing signs. -@item @email{jiba@@tuxfamily.org, Jean-Baptiste Lamy}, - Tablature support. -@item @email{wl@@gnu.org, Werner Lemberg}, - @TeX{} glue code. -@item @email{joeneeman@@gmail.com, Joe Neeman}, - Constrained line breaking. -@item @email{hanwen@@xs4all.nl, Han-Wen Nienhuys}, - @uref{http://www.xs4all.nl/~hanwen/}, - Main author. - -@item @email{janneke@@gnu.org, Jan Nieuwenhuizen}, - @uref{http://www.xs4all.nl/~jantien/}, - Main author. -@item @email{reuter_j@@web.de, Jürgen Reuter}, - @uref{http://www.juergen-reuter.de}, - Ancient notation support (mensural notation, - Gregorian chant notation), ambitus, clusters. -@item @email{nicolas.sceaux@@free.fr, Nicolas Sceaux}, - Scheme macros, \markup syntax. -@item @email{c_sorensen@@byu.edu, Carl Sorensen}, - Fret diagrams. -@item @email{, Rune Zedeler}, - Auto-accidental code, zigzag glissandi, rest bugfixes, minimum - fret, @code{subdivideBeams}. -@end itemize - -Font - -@itemize @bullet - -@item @email{reuter_j@@web.de, Jürgen Reuter}, - @uref{http://www.juergen-reuter.de}, - Ancient notation font - Exact Type1 font outlines for feta, feta-alphabet. -@item @email{chris@@fluffhouse.org.uk, Chris Jackson}, - Arpeggio arrow -@item @email{, Rune Zedeler}, - 16th and shorter rests, -@item @email{hanwen@@xs4all.nl, Han-Wen Nienhuys}, - @uref{http://www.xs4all.nl/~hanwen/}, - Main author. -@item @email{janneke@@gnu.org, Jan Nieuwenhuizen}, - @uref{http://www.xs4all.nl/~jantien/}, - Main author. -@item @email{tca@@gnu.org, Tom Cato Amundsen}, - Accordion symbols. -@item @email{arno@@arnowaschk.de, Arno Waschk}, - "espressivo" mark. -@end itemize - - -Documentation and examples - -@itemize -@item @email{mats.bengtsson@@s3.kth.se, Mats Bengtsson}, - @uref{http://www.s3.kth.se/~mabe/}, - Example files, documentation -@item @email{heikki.junes@@hut.fi, Heikki Junes}, - Cleanups in docs and example files. -@item @email{john.mandereau@@free.fr, John Mandereau}, - Internationalization. -@item @email{scancm@@biobase.dk, Christian Mondrup}, - Glossary. -@item @email{hanwen@@xs4all.nl, Han-Wen Nienhuys}, - @uref{http://www.xs4all.nl/~hanwen/}, - Main author. -@item @email{janneke@@gnu.org, Jan Nieuwenhuizen}, - @uref{http://www.xs4all.nl/~jantien/}, - Main author. -@item @email{gpermus@@gmail.com, Graham Percival}, - @uref{http://percival-music.ca}, - Documentation Editor. -@item @email{pinard@@iro.umontreal.ca, François Pinard}, - @uref{http://www.iro.umontreal.ca/~pinard/}, - Parts of Documentation/user/glossary*, started - internationalization stuff. -@item @email{, Rune Zedeler}, - Schumann example. -@end itemize - -Support (distributions, editor support, lilypond-book) - -@itemize -@item @email{foka@@debian.org, Anthony Fok}, - Debian package: debian/*. -@item @email{chris@@fluffhouse.org.uk, Chris Jackson}, - Emacs mode indentation. -@item @email{heikki.junes@@hut.fi, Heikki Junes}, - Major Emacs- and Vim-mode updates. -@item @email{svoboda@@cmu.edu, David Svoboda}, - what-beat emacs module. -@end itemize - - -Translations - -@itemize -@item @email{bjoern.jacke@@gmx.de, Bjoern Jacke}, - German glossary translations. -@item @email{nj104@@cus.cam.ac.uk, Neil Jerram}, - Glossary translations. -@item @email{heikki.junes@@hut.fi, Heikki Junes}, - Finnish translations. -@item @email{tdm@@dds.nl, Tineke de Munnik}, - Dutch website translation. -@item @email{august@@infran.ru, August S. Sigov}, - Russian translation. -@item @email{, David González}, - Spanish glossary translations. -@item @email{ngclaude@@123mail.org, Nicolas Grandclaude}, - French documentation translation. -@item @email{lolyfan@@wanadoo.fr, Jean-Charles Malahieude}, - French translation of messages, website and documentation. -@item @email{john.mandereau@@free.fr, John Mandereau}, - French translation of messages, website and documentation -@item @email{gauvainpocentek@@yahoo.fr, Gauvain Pocentek}, - French website translation. -@item @email{ludovicsardain@@gmail.com, Ludovic Sardain}, - French documentation translation. -@end itemize +is alphabetically ordered by surname. This file lists people that have +contributed over 100 lines of code or the equivalent. + + +@subheading Current Development Team + +@developersCurrent + +@subheading Previous Development Team + +@developersPrevious + + +@subheading Current Contributors + +@subsubheading Programming + +@coreCurrent + +@subsubheading Font + +@fontCurrent + +@subsubheading Documentation + +@docCurrent + +@subsubheading Bug squad + +@bugsquadCurrent + +@subsubheading Support + +@supportCurrent + +@subsubheading Translation + +@translationsCurrent + + +@subheading Past Contributors + +@subsubheading Programming + +@corePrevious + +@subsubheading Font + +@fontPrevious + +@subsubheading Documentation + +@docPrevious + +@c uncomment when we have somebody here. -gp +@c @subsubheading Bug squad + +@c @bugsquadPrevious + +@subsubheading Support + +@supportPrevious + +@subsubheading Translation + +@translationsPrevious @bye diff --git a/Documentation/topdocs/GNUmakefile b/Documentation/topdocs/GNUmakefile index 231598d8f4..037cc39f1a 100644 --- a/Documentation/topdocs/GNUmakefile +++ b/Documentation/topdocs/GNUmakefile @@ -1,16 +1,18 @@ depth = ../.. - STEPMAKE_TEMPLATES=documentation tex texinfo topdocs LOCALSTEPMAKE_TEMPLATES=lilypond ly OUT_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi) HTML_FILES=$(TEXI_FILES:%.texi=$(outdir)/%.html) $(TELY_FILES:%.tely=$(outdir)/%.html) -PDF_FILES=$(outdir)/NEWS.pdf README_TOP_FILES=NEWS AUTHORS INSTALL README OUTTXT_FILES= $(outdir)/NEWS.txt include $(depth)/make/stepmake.make +# FIXME ad-hoc file copy? +$(outdir)/NEWS.tely: $(top-src-dir)/Documentation/changes.tely + cp -f $< $@ + ifeq ($(out),www) local-WWW-1: $(OUT_TEXI_FILES) endif diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi index de50b2f66e..47f0a70703 100644 --- a/Documentation/topdocs/INSTALL.texi +++ b/Documentation/topdocs/INSTALL.texi @@ -13,7 +13,7 @@ @contents @include macros.itexi -@include install.itely +@include included/compile.itexi @bye diff --git a/Documentation/topdocs/NEWS.tely b/Documentation/topdocs/NEWS.tely deleted file mode 100644 index 69b79f802b..0000000000 --- a/Documentation/topdocs/NEWS.tely +++ /dev/null @@ -1,611 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@setfilename NEWS.info -@settitle NEWS - -@ifhtml -@macro inputfileref{DIR,NAME} -@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c -@end macro -@macro usermanref{NAME} -@inforef{\NAME\,,../user/lilypond/lilypond}@c -@end macro -@end ifhtml - -@ifnothtml -@macro inputfileref{DIR,NAME} -@file{\DIR\/\NAME\}@c -@end macro -@macro usermanref{NAME} -See user manual, \NAME\ -@end macro -@end ifnothtml - -@macro textanchor{NAME} -@html - -@end html -@end macro - - -@documentencoding utf-8 -@documentlanguage en - -@finalout - -@node Top -@top New features in 2.12 since 2.10 - -@ifhtml -This document is also available in @uref{NEWS.pdf,PDF}. It is part of -the @uref{../,LilyPond Documentation}. -@end ifhtml - - - - -@itemize @bullet - -@ignore - -HINTS - -* only show verbatim input for syntax/input changes - -* try to be as brief possible in those cases - -* don't try to provide real-world examples, they often get too big, -which scares away people. - -* Write complete sentences. - -* only show user-visible changes. - -@end ignore -@item -Fret diagrams can now have variable string thickness: -@lilypond[quote] -\include "predefined-guitar-fretboards.ly" -<< - \new ChordNames { - \chordmode { - c1 - } - } - \new FretBoards { - \override FretBoard #'fret-diagram-details - #'string-thickness-factor = #0.3 - \chordmode { - c1 - } - } ->> -@end lilypond - -@item -A new fret diagram orientation, opposing-landscape, is available: -@lilypond[quote] -\include "predefined-guitar-fretboards.ly" -<< - \new ChordNames { - \chordmode { - c1 - } - } - \new FretBoards { - \override FretBoard #'fret-diagram-details - #'orientation = #'opposing-landscape - \chordmode { - c1 - } - } ->> -@end lilypond - -@item -Unbeamed 128th notes are now supported: -@lilypond[quote] -\relative c'' { - g128 -} -@end lilypond - -@item -Extending LilyPond's existing support for microtones, there are -now arrowed accidentals for the notation of microtonal alterations. -To use them, redefine the @code{glyph-name-alist} property of -@code{Accidental} as in the following example which uses quartertones -to typeset arrowed accidentals. Alternatively, it is possible to -define separate names for all notes with arrowed accidentals (see -@code{ly/makam.ly} for boilerplate code). - -@lilypond[quote] -microAccs = #'((0 . "accidentals.natural") - (-1/2 . "accidentals.flat") - (1/2 . "accidentals.sharp") - - (1 . "accidentals.doublesharp") - (-1 . "accidentals.flatflat") - - (3/4 . "accidentals.sharp.arrowup") - (1/4 . "accidentals.sharp.arrowdown") - (-1/4 . "accidentals.flat.arrowup") - (-3/4 . "accidentals.flat.arrowdown")) - -\relative c'' { - #(set-accidental-style 'modern) - \override Accidental #'glyph-name-alist = #microAccs - geseh geh aih aisih -} -@end lilypond - -@item -Straight flags (used in old scores of e.g. Bach, but also in different form in -modern scores of e.g. Stockhausen) are now implemented: -@lilypond[quote] -\relative c'' { - \override Stem #'flag = #modern-straight-flag - c,16 \acciaccatura {c'8} d4 d32 - \bar":" - \override Stem #'flag = #old-straight-flag - c,16 \acciaccatura {c'8} d4 d32 -} -@end lilypond - -@item -@code{\bookpart} blocks may be used to split a book into several parts, -separated by a page break, in order to ease the page breaking, or to use -different @code{\paper} settings in different parts. - -@example -\bookpart @{ - \header @{ - title = "Book title" - subtitle = "First part" - @} - \score @{ @dots{} @} - @dots{} -@} -\bookpart @{ - \header @{ - subtitle = "Second part" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - -@item -Nested contexts of the same type are now allowed. -This deprecates @code{InnerStaffGroup} and @code{InnerChoirStaff}. -@lilypond[quote,relative=1] -\new StaffGroup << - \new Staff { c1 } - \new StaffGroup << - \new Staff { c1 } - \new Staff { c1 } - >> ->> -@end lilypond - -@item -Percent repeat counters can be shown at regular intervals using the -context property @code{repeatCountVisibility}. -@lilypond[quote,relative=1] -{ - \set countPercentRepeats = ##t - \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) - \repeat percent 6 { c4 d e f } -} -@end lilypond - -@item -In addition to the already existing @code{showLastLength} property, -@code{showFirstLength} can now be set as well, rendering only the first -measures of a piece. Both properties may be set at the same time: -@lilypond[quote] -showFirstLength = R1*2 -showLastLength = R1*3 -\relative c' { c1 d e f g a b c } -@end lilypond - -@item -The file extension for MIDI can be set using the command-line -program default @code{midi-extension}. For Windows, the default -extension has been changed to @code{.mid}. - -@item -Two variations on the default double repeat bar line are now available. -@lilypond[quote] -{ - \set Score.doubleRepeatType = #":|.:" - \repeat volta 2 { - c'1 - } - \repeat volta 2 { - c'1 - } - \bar ":|.|:" - c'1 -} -@end lilypond - -@item -Four automatic accidentals rules have been added: @code{neo-modern}, -@code{neo-modern-cautionary}, @code{dodecaphonic} and @code{teaching}. -The following example illustrates @code{neo-modern} rule. -@lilypond[quote] -notes = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -\new Staff { - #(set-accidental-style 'neo-modern) - \notes -} -@end lilypond - -@item -Flags can now be generated with Scheme-code using the @code{'flag} -@code{Stem} grob property. Existing scores will work without change. -@lilypond[quote] -testnotes = { - \autoBeamOff - c'8 d'16 c''8 d''16 -} - -#(define (inverted-flag stem-grob) - (let* ((dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u")) - (flag (retrieve-glyph-flag "" dir "" stem-grob)) - (line-thickness (ly:staff-symbol-line-thickness stem-grob)) - (stem-thickness (ly:grob-property stem-grob 'thickness)) - (stem-width (* line-thickness stem-thickness)) - (stroke-style (ly:grob-property stem-grob 'stroke-style)) - (stencil (if (null? stroke-style) flag - (add-stroke-glyph flag stem-grob dir stroke-style ""))) - (rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0))) - (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0)))) - -#(define-public (weight-flag stem-grob) - (let* ((log (- (ly:grob-property stem-grob 'duration-log) 2)) - (is-up (eqv? (ly:grob-property stem-grob 'direction) UP)) - (yext (if is-up (cons (* log -0.8) 0) (cons 0 (* log 0.8)))) - (flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext)) - (stroke-style (ly:grob-property stem-grob 'stroke-style)) - (stroke-stencil (if (equal? stroke-style "grace") - (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4) - empty-stencil))) - (ly:stencil-add flag-stencil stroke-stencil))) - -{ - \time 3/8 - \override Stem #'flag = #weight-flag - \testnotes - - \override Stem #'flag = #inverted-flag - \testnotes -} -@end lilypond - -@item -Harp pedalling diagrams were added: - -@lilypond[quote] -\markup { \harp-pedal #"^v-|vv-o^" } -@end lilypond - -@item -Predefined, user-configurable, transposable fret diagrams -are now available in the @code{FretBoards} context: -@lilypond[quote] -\include "predefined-guitar-fretboards.ly" -<< - \new ChordNames { - \chordmode { - c1 - \transpose c e { c } - } - } - \new FretBoards { - \chordmode { - c1 - \transpose c e { c } - } - } ->> -@end lilypond - -@item -The following syntax changes were made, in chronological order. In -addition, fret diagram properties have been moved to -@code{fret-diagram-details}, and the @code{#'style} property is -used to select solid/dashed lines instead of @code{#'dash-fraction}. - -@example -'break-align-symbol -> 'break-align-symbols -scripts.caesura -> scripts.caesura.curved -\setEasyHeads -> \easyHeadsOn -\easyHeadsOff (new command) -\fatText -> \textLengthOn -\emptyText -> \textLengthOff -\set hairpinToBarline -> \override Hairpin #'to-barline -\compressMusic -> \scaleDurations -\octave -> \octaveCheck -\arpeggioUp -> \arpeggioArrowUp -\arpeggioDown -> \arpeggioArrowDown -\arpeggioNeutral -> \arpeggioNormal -\setTextCresc -> \crescTextCresc -\setTextDecresc -> \dimTextDecresc -\setTextDecr -> \dimTextDecr -\setTextDim -> \dimTextDim -\setHairpinCresc -> \crescHairpin -\setHairpinDecresc -> \dimHairpin -\sustainUp -> \sustainOff -\sustainDown -> \sustainOn -\sostenutoDown -> \sostenutoOn -\sostenutoUp -> \sostenutoOff -'infinite-spacing-height -> 'extra-spacing-height -#(set-octavation oct) -> \ottava #oct -\put-adjacent markup axis dir markup -> \put-adjacent axis dir markup markup -\pointAndClickOn (new command) -\pointAndClickOff (new command) -\center-align -> \center-column -\hcenter -> \center-align -printallheaders -> print-all-headers -\bigger -> \larger (already existing command) -systemSeparatorMarkup -> system-separator-markup -@end example - -@noindent -Moreover, some files in the @code{ly/} directory have been renamed; -the *-init.ly filenames are now only used for files that are automatically -included, while such files as @code{makam-init.ly} or @code{gregorian-init.ly} -have been renamed to @code{makam.ly} or @code{gregorian.ly}. - -@item -The ``tex'' and ``texstr'' backends have been removed. Font are now -accessed via the fontconfig library; the Pango library is used to display -text strings. - -@item -Metronome marks can now also contain a textual description. The -duration and count (if given) are shown in parentheses after the text. - -@lilypond[quote] -{ - \tempo "Fast" - c'4 c' c' c' - c'4 c' c' c' - \tempo "Andante" 4 = 120 - c'4 c' c' c' - c'4 c' c' c' - \tempo 4 = 100 - c'4 c' c' c' - c'4 c' c' c' - \tempo "" 4 = 30 - c'4 c' c' c' - c'4 c' c' c' -} -@end lilypond - -@item -In figured bass you can now also use a backslash through a number to -indicate a raised 6th step. - -@lilypond[quote] -\new FiguredBass \figuremode { < 6\\ 5\\ > < 6/ > } -@end lilypond - -@item -Arpeggios may now use ``parenthesis'' style brackets: - -@lilypond[quote,relative=1] -\override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur - -% Note: does not work for cross-staff arpeggios. -\override Arpeggio #'X-extent = #ly:grob::stencil-width -2\arpeggio ~ c -@end lilypond - -@item -Single-system scores are now naturally spaced instead of being -stretched to fill the line width. This can be changed by setting -@code{ragged-right = ##f}. - -@item -Enclosing text within boxes with rounded corners is now possible, -using the @code{\rounded-box} markup command. - -@item -@command{lilypond-book} can run any program instead of @command{latex} -to guess the line width, thanks to @code{--latex-program} command line -option. - -@item -Underlining is now possible with the @code{\underline} markup command. - -@item -It is now possible to specify, using the @code{page-count} variable in -the paper block, the number of pages that will be used. - -@item -A new page breaking function, @code{ly:minimal-breaking}, is dedicated -to books with many pages or a lot of text. - -@item -A table of contents is included using @code{\markuplines \table-of-contents}. -Elements are added to it using the @code{\tocItem} command. - -@item -Text spreading over several pages is entered using the -@code{\markuplines} keyword. Builtin markup list commands, such as -@code{\justified-lines} or @code{\wordwrap-lines} may be used, and new -ones created using the @code{define-markup-list-command} Scheme macro. - -@item -Particular points of a book may be marked with the @code{\label} -command. Then, the page where these points are placed can be -referred to using the @code{\page-ref} markup command. - -@item -Page breaking and page turning commands (@code{\pageBreak}, -@code{\noPageBreak}, etc.) can be used at top-level, between scores and -top-level markups. - -@item -The following options are now changed as a @code{-d} sub-option: -@code{--backend}, @code{--safe}, @code{--preview} and -@code{--no-pages} (which became @code{-dno-print-pages}). The @code{-b} -option does not exist any more. - -@item -Improved testing procedures now catch changes in CPU and memory -performance, page layout, MIDI results and warnings. This helps to -reduce the number of regression errors during development, resulting -in more stable releases. - -See @uref{INSTALL.html#Testing-LilyPond} for more information. - -@item -Nested properties, such as @code{'details} in @code{Slur}, can be -reverted as well. The syntax for this is - -@example -\revert Slur #'(details closeness-factor) -@end example - -@item -All line spanners are more flexible now in the configuration of -their end points. This includes glissando, voice followers, text -crescendos and other text spanners. The old syntax for setting -text on line spanners is no longer valid. - -@lilypond[quote] -\relative c'' { - \override Glissando #'(bound-details right text) = \markup { \center-align \bold down } - \override Glissando #'(bound-details right Y) = #-4 - \override Glissando #'(bound-details right padding) = #0.0 - \override Glissando #'(bound-details left arrow) = ##t - \override Glissando #'(bound-details left padding) = #3.0 - \override Glissando #'style = #'trill - \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods - \override Glissando #'minimum-length = #12 - - c1 \glissando c' -} -@end lilypond - -This feature was sponsored by Trevor Bača. - -@item -The environment variable @code{LILYPONDPREFIX} has been renamed -@code{LILYPOND_DATADIR}. - -@item -Notes or rests, such as a typical end note, that fill an entire -measure are preceded by some more space. - -@lilypond[quote,relative=1] -\time 4/4 -s1 -c2. c4 -\time 3/4 -c2. -@end lilypond - -@item -All @code{\score}s in a lilypond-book fragment are now inserted -into the document. Also, toplevel markups don't result in an entire -page. - -@item -Alterations (such as a sharp or flat) may now be arbitrary -fractions. This allows some forms of microtonal music. For example, -Turkish makam music uses 1/9th tone alterations. - -@lilypondfile[quote]{makam-example.ly} - -@item -Tie directions may be set with @code{^~} and @code{_~}. - -@item -Tablature now supports harmonics and slides: - -@lilypond[quote,relative=1] -\new TabVoice { - 4 d\2\glissando e2\2 -} -@end lilypond - -This feature was sponsored by Mike Amundsen - -@item -Horizontal spacing now follows object outlines more accurately. -This allows tighter horizontal spacing. - -@lilypond[quote] -{ - \stemUp - c''4... ceses'! s16 -} -@end lilypond - -@item -Objects that belong outside of the staff are now positioned -automatically to avoid collisions. - -@lilypond[quote,relative=1] -c''4 -\once \override TextScript #'self-alignment-X = #CENTER -a,4^"this doesn't collide with the c" -b4^"this goes above the previous markup" -a8_"this goes below the dynamic" -a8\f -@end lilypond - -@item -Staves are spaced vertically using a skyline algorithm. This helps -prevent uneven vertical spacing. - -@lilypond[quote,ragged-right] - -%% todo: fix 'landscape PDF. -#(set-default-paper-size "a6") -\header { - tagline = ##f -} - -\book { - \score { - { - a,,1 - a'4 b' c'' d'' \break - \repeat unfold 2 { a'4 b' c'' d''} - b''''1 - } - } -} -@end lilypond - -@end itemize - - - -@ifhtml -For older news, go to -@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS.html}, -or @uref{../,go back} to the Documentation index. - - -@end ifhtml - -@bye diff --git a/Documentation/topdocs/README.texi b/Documentation/topdocs/README.texi index 5fd731643c..20a051f983 100644 --- a/Documentation/topdocs/README.texi +++ b/Documentation/topdocs/README.texi @@ -30,7 +30,7 @@ The primary download site for sourcecode is For compiling and running LilyPond see the installation instructions. These instructions can be found when you unpack lilypond, as -@file{lilypond-x.y.z/INSTALL.txt}. They are also available on the web +@file{lilypond-x.y.z/INSTALL.txt}. They are also available on the web at @uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/INSTALL.html}. @@ -55,24 +55,24 @@ list, not to us personally. We have the following mailing lists: @itemize @bullet -@item @uref{http://mail.gnu.org/mailman/listinfo/info-lilypond,info-lilypond@@gnu.org} +@item @uref{http://lists.gnu.org/mailman/listinfo/info-lilypond,info-lilypond@@gnu.org} is a low-volume list for information on LilyPond project. - This list is moderated; ask + This list is moderated; ask @email{drl@@gnu.org, David R. Linn} or @email{hanwen@@xs4all.nl, Han-Wen} to send announcements for this list. @item -@uref{http://mail.gnu.org/mailman/listinfo/lilypond-devel,lilypond-devel@@gnu.org} +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel,lilypond-devel@@gnu.org} for discussions about developing LilyPond, in particular the unstable series. -@item @uref{http://mail.gnu.org/mailman/listinfo/lilypond-user,lilypond-user@@gnu.org} +@item @uref{http://lists.gnu.org/mailman/listinfo/lilypond-user,lilypond-user@@gnu.org} for discussions about using LilyPond, in particular the stable series. -@item @uref{http://mail.gnu.org/mailman/listinfo/bug-lilypond,bug-lilypond@@gnu.org} +@item @uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond,bug-lilypond@@gnu.org} for sending bugreports. -@item @uref{http://mail.gnu.org/mailman/listinfo/lilypond-cvs,lilypond-cvs@@gnu.org} +@item @uref{http://lists.gnu.org/mailman/listinfo/lilypond-cvs,lilypond-cvs@@gnu.org} for log files from the autobuild. @end itemize diff --git a/Documentation/translations.html.in b/Documentation/translations.html.in deleted file mode 100644 index 0deed250b2..0000000000 --- a/Documentation/translations.html.in +++ /dev/null @@ -1,768 +0,0 @@ - - - - - LilyPond documentation translations status - - - - -

    Up to documentation index

    - -

    Documentation translations status

    - -

    This is an overview of which parts of LilyPond @TOPLEVEL_VERSION@ - documentation are translated; for each documentation section, you - can read the word count in parentheses, who translated and verified - it (translation checkers are printed with a smaller font size), how - much of the original section in English has been translation, how - up-to-date is the translation, and whether the translation has - already been updated after Grand Documentation Project (GDP) was - started. -

    - -

    Please note that GDP makes a lot of changes to documentation in - English, therefore translated documentation is mostly not - up-to-date; however, this does not mean translated documentation is - inaccurate regarding current LilyPond version, it only means that - translated docmentation is not synced with documentation in English. - We do our best to keep translated documentation consistent with - current LilyPond syntax and features, and will update it per - section, when GDP processing of the corresponding section in English - is finished. -

    - -

    Last updated Sat Jan 24 01:17:40 UTC 2009 -

    - - - - - - - - -
    New features in 2.12 since 2.10 es
    Section titles
    (1163)
    Francisco Vila
    - translated
    - up to date
    -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GNU LilyPond --- Learning Manual frdees
    Section titles
    (429)
    John Mandereau
    - Jean-Charles Malahieude
    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    Preface
    (411)
    Valentin Villenave
    - Ludovic Sardain
    - Damien Heurtebise

    - translated
    - up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1 Introduction
    (3855)
    Ludovic Sardain
    - John Mandereau
    - Jean-Charles Malahieude
    - Jean-Yves Baudais
    - Damien Heurtebise

    - translated
    - up to date
    -
    Till Rettig
    - Reinhold Kainhofer
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2 Tutorial
    (6365)
    Nicolas Grandclaude
    - Ludovic Sardain
    - Gauvain Pocentek
    - Jean-Charles Malahieude
    - Valentin Villenave
    - John Mandereau

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    3 Fundamental concepts
    (10318)
    Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau
    - translated
    - up to date
    -
    Till Rettig
    - Reinhold Kainhofer
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    4 Tweaking output
    (14775)
    Valentin Villenave
    - Nicolas Klutchnikoff
    - Damien Heurtebise
    - Jean-Charles Malahieude
    - John Mandereau

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    5 Working on LilyPond projects
    (3144)
    Ludovic Sardain
    - Jean-Yves Baudais
    - Valentin Villenave
    - John Mandereau
    - Jean-Charles Malahieude

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    A Templates
    (483)
    partially translated (11 %)
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    B Scheme tutorial
    (960)
    not translated
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GNU LilyPond --- Application Usage frdees
    Section titles
    (407)
    John Mandereau
    - Jean-Charles Malahieude
    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1 Install
    (1921)
    John Mandereau
    - Jean-Charles Malahieude
    - partially translated (11 %)
    - partially up to date
    -
    Till Rettig
    - Reinhold Kainhofer
    - partially translated (7 %)
    - up to date
    -
    Francisco Vila
    - partially translated (11 %)
    - up to date
    -
    2 Setup
    (1149)
    Jean-Charles Malahieude
    - translated
    - up to date
    -
    Till Rettig
    - Reinhold Kainhofer
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    3 Running LilyPond
    (2827)
    not translated
    -
    Reinhold Kainhofer
    - Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    4 @command{lilypond-book}: Integrating text and music
    (3248)
    not translated
    -
    Reinhold Kainhofer
    - Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    5 Converting from other formats
    (1171)
    Jean-Charles Malahieude
    - translated
    - up to date
    -
    Reinhold Kainhofer
    - Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GNU LilyPond --- Notation Reference frdees
    Section titles
    (695)
    John Mandereau
    - Jean-Charles Malahieude
    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1 Musical notation
    (91)
    John Mandereau
    - Jean-Charles Malahieude
    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.1 Pitches
    (3123)
    Frédéric Chiasson
    - Valentin Villenave
    - Jean-Charles Malahieude

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.2 Rhythms
    (5197)
    Frédéric Chiasson
    - Valentin Villenave
    - Jean-Charles Malahieude

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.3 Expressive marks
    (1146)
    Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.4 Repeats
    (555)
    Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.5 Simultaneous notes
    (1455)
    Frédéric Chiasson
    - Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau

    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.6 Staff notation
    (1701)
    Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau
    - partially translated (69 %)
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.7 Editorial annotations
    (895)
    Jean-Charles Malahieude
    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    1.8 Text
    (2286)
    Jean-Charles Malahieude
    - Valentin Villenave
    - John Mandereau

    - partially translated (97 %)
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2 Specialist notation
    (76)
    John Mandereau
    - Jean-Charles Malahieude
    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.1 Vocal music
    (2670)
    Valentin Villenave
    - Jean-Charles Malahieude
    - partially translated (56 %)
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.2 Keyboard and other multi-staff instruments
    (744)
    Valentin Villenave
    - Jean-Charles Malahieude
    - Jean-Charles Malahieude
    - John Mandereau

    - translated
    - up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.3 Unfretted string instruments
    (235)
    Valentin Villenave
    - Matthieu Jacquot
    - Jean-Charles Malahieude
    - John Mandereau

    - translated
    -
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.4 Fretted string instruments
    (1850)
    Matthieu Jacquot
    - Jean-Charles Malahieude
    - translated
    - up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.5 Percussion
    (810)
    Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau

    - partially translated (44 %)
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.6 Wind instruments
    (136)
    Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau

    - partially translated (1 %)
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.7 Chord notation
    (1464)
    Valentin Villenave
    - Jean-Charles Malahieude
    - John Mandereau

    - partially translated (61 %)
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.8 Ancient notation
    (4487)
    John Mandereau
    - Jean-Charles Malahieude
    - partially translated (82 %)
    - partially up to date
    -
    Till Rettig
    - partially translated (79 %)
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    2.9 World music
    (1115)
    not translated
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    3 General input and output
    (5873)
    Jean-Charles Malahieude
    - Valentin Villenave
    - partially translated (5 %)
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    4 Spacing issues
    (8505)
    Frédéric Chiasson
    - Jean-Charles Malahieude
    - partially translated (18 %)
    - partially up to date
    -
    Till Rettig
    - partially translated (3 %)
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    5 Changing defaults
    (11391)
    Valentin Villenave
    - Gilles Thibault
    - partially translated (42 %)
    - partially up to date
    -
    not translated
    -
    Francisco Vila
    - translated
    - up to date
    -
    6 Interfaces for programmers
    (5202)
    Valentin Villenave
    - Gilles Thibault
    - partially translated (9 %)
    - partially up to date
    -
    not translated
    -
    Francisco Vila
    - translated
    - up to date
    -
    A Literature list
    (310)
    not translated
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    B Notation manual tables
    (1190)
    Frédéric Chiasson
    - Jean-Charles Malahieude
    - partially translated (6 %)
    - up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    C Cheat sheet
    (250)
    Valentin Villenave
    - translated
    - partially up to date
    -
    Till Rettig
    - translated
    - up to date
    -
    Francisco Vila
    - translated
    - up to date
    -
    -

    - - - diff --git a/Documentation/translations.itexi b/Documentation/translations.itexi new file mode 100644 index 0000000000..7d19c62d60 --- /dev/null +++ b/Documentation/translations.itexi @@ -0,0 +1,9057 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{Last updated Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.5 0.5 + +@headitem +LilyPond Changes +@tab es +@item +Section titles +@* +(1464) +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +LilyPond --- \TITLE\ +@* +(1139) +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@end multitable + + +@multitable @columnfractions 0.25 0.25 0.25 0.25 + +@headitem +Essay on automated music engraving +@tab de +@tab es +@tab fr +@item +Section titles +@* +(92) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +LilyPond --- \TITLE\ +@* +(1139) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1 Music engraving +@* +(5297) +@tab  Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* +John Mandereau +@* +Gauvain Pocentek +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2 Literature list +@* +(326) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Jacques Gerbaud +@* +Valentin Villenave +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +partially translated (92 %) +@end html +@end ifhtml +@ifnothtml +partially translated (92 %) +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +A GNU Free Documentation License +@* +(3724) +@tab Till Paala +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@end multitable + + +@multitable @columnfractions 0.333333333333 0.333333333333 0.333333333333 + +@headitem +Extending LilyPond +@tab de +@tab es +@item +Section titles +@* +(107) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +LilyPond --- \TITLE\ +@* +(1139) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1 Scheme tutorial +@* +(5007) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2 Interfaces for programmers +@* +(3568) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +A GNU Free Documentation License +@* +(3724) +@tab Till Paala +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@end multitable + + +@multitable @columnfractions 0.111111111111 0.111111111111 0.111111111111 0.111111111111 0.111111111111 0.111111111111 0.111111111111 0.111111111111 0.111111111111 + +@headitem +LilyPond Learning Manual +@tab cs +@tab de +@tab es +@tab fr +@tab hu +@tab it +@tab ja +@tab nl +@item +Section titles +@* +(124) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +partially translated (93 %) +@end html +@end ifhtml +@ifnothtml +partially translated (93 %) +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +LilyPond --- \TITLE\ +@* +(1139) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +1 Tutorial +@* +(2535) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Till Paala +@* +Reinhold Kainhofer +@* + +@ifhtml + +@html +Hajo Bäß +@end html +@end ifhtml +@ifnothtml +Hajo Bäß +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Nicolas Grandclaude +@* +Ludovic Sardain +@* +Gauvain Pocentek +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +Valentin Villenave +@end html +@end ifhtml +@ifnothtml +Valentin Villenave +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +partially translated (80 %) +@end html +@end ifhtml +@ifnothtml +partially translated (80 %) +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +2 Common notation +@* +(4184) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Nicolas Grandclaude +@* +Ludovic Sardain +@* +Gauvain Pocentek +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +Valentin Villenave +@end html +@end ifhtml +@ifnothtml +Valentin Villenave +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +3 Fundamental concepts +@* +(11139) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Till Paala +@* +Reinhold Kainhofer +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +4 Tweaking output +@* +(15408) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Nicolas Klutchnikoff +@* +Damien Heurtebise +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +A Templates +@* +(225) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +B GNU Free Documentation License +@* +(3724) +@tab Pavel Fric +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@end multitable + + +@multitable @columnfractions 0.2 0.2 0.2 0.2 0.2 + +@headitem +LilyPond Notation Reference +@tab de +@tab es +@tab fr +@tab ja +@item +Section titles +@* +(355) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +LilyPond --- \TITLE\ +@* +(1139) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1 Musical notation +@* +(91) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1.1 Pitches +@* +(4479) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Frédéric Chiasson +@* + +@ifhtml + +@html +Valentin Villenave +@end html +@end ifhtml +@ifnothtml +Valentin Villenave +@end ifnothtml +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +1.2 Rhythms +@* +(6048) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Frédéric Chiasson +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Valentin Villenave +@end html +@end ifhtml +@ifnothtml +Valentin Villenave +@end ifnothtml +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +1.3 Expressive marks +@* +(1726) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1.4 Repeats +@* +(930) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1.5 Simultaneous notes +@* +(2163) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Frédéric Chiasson +@* +Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1.6 Staff notation +@* +(2056) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1.7 Editorial annotations +@* +(931) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1.8 Text +@* +(2716) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html +Valentin Villenave +@end html +@end ifhtml +@ifnothtml +Valentin Villenave +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2 Specialist notation +@* +(81) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +partially translated (2 %) +@end html +@end ifhtml +@ifnothtml +partially translated (2 %) +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.1 Vocal music +@* +(4807) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +Jean-Jacques Gerbaud +@end html +@end ifhtml +@ifnothtml +Jean-Jacques Gerbaud +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.2 Keyboard and other multi-staff instruments +@* +(838) +@tab  Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.3 Unfretted string instruments +@* +(281) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Matthieu Jacquot +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.4 Fretted string instruments +@* +(2640) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Matthieu Jacquot +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.5 Percussion +@* +(806) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +partially translated (46 %) +@end html +@end ifhtml +@ifnothtml +partially translated (46 %) +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.6 Wind instruments +@* +(312) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieuse +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.7 Chord notation +@* +(1855) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +partially translated (48 %) +@end html +@end ifhtml +@ifnothtml +partially translated (48 %) +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.8 Contemporary music +@* +(475) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.9 Ancient notation +@* +(4752) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html +partially translated (47 %) +@end html +@end ifhtml +@ifnothtml +partially translated (47 %) +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2.10 World music +@* +(1446) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Jacques Gerbaud +@* +Valentin Villenave +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +3 General input and output +@* +(7069) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* +Valentin Villenave +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +4 Spacing issues +@* +(11017) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +partially translated (96 %) +@end html +@end ifhtml +@ifnothtml +partially translated (96 %) +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Frédéric Chiasson +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +5 Changing defaults +@* +(12248) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Gilles Thibault +@end html +@end ifhtml +@ifnothtml +Gilles Thibault +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +partially translated (31 %) +@end html +@end ifhtml +@ifnothtml +partially translated (31 %) +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +A Notation manual tables +@* +(1989) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Frédéric Chiasson +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +partially translated (85 %) +@end html +@end ifhtml +@ifnothtml +partially translated (85 %) +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +B Cheat sheet +@* +(252) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +C GNU Free Documentation License +@* +(3724) +@tab Till Paala +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@end multitable + + +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond Application Usage +@tab de +@tab es +@tab fr +@tab hu +@tab ja +@item +Section titles +@* +(135) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +LilyPond --- \TITLE\ +@* +(1139) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +1 Running @command{lilypond} +@* +(3622) +@tab Reinhold Kainhofer +@* +Till Paala +@* + +@ifhtml + +@html +Till Paala +@end html +@end ifhtml +@ifnothtml +Till Paala +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +partially translated (96 %) +@end html +@end ifhtml +@ifnothtml +partially translated (96 %) +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +2 Updating files with @command{convert-ly} +@* +(1189) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +3 Running @command{lilypond-book} +@* +(3764) +@tab Reinhold Kainhofer +@* + +@ifhtml + +@html +Till Paala +@end html +@end ifhtml +@ifnothtml +Till Paala +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@item +4 External programs +@* +(2170) +@tab Till Paala +@* +Reinhold Kainhofer +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +5 Suggestions for writing files +@* +(2694) +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Ludovic Sardain +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Jean-Yves Baudais +@end html +@end ifhtml +@ifnothtml +Jean-Yves Baudais +@end ifnothtml +@* + +@ifhtml + +@html +Valentin Villenave +@end html +@end ifhtml +@ifnothtml +Valentin Villenave +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +A GNU Free Documentation License +@* +(3724) +@tab Till Paala +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Team-hu +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@end multitable + + +@multitable @columnfractions 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 + +@headitem +LilyPond -- Music notation for everyone +@tab cs +@tab de +@tab es +@tab fr +@tab hu +@tab it +@tab ja +@tab nl +@tab zh +@item +Section titles +@* +(585) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* +Yoshinobu Ishizaki +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html +Tineke de Munnik +@end html +@end ifhtml +@ifnothtml +Tineke de Munnik +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Ben Luo +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +LilyPond --- \TITLE\ +@* +(1139) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* +Yoshinobu Ishizaki +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html +Tineke de Munnik +@end html +@end ifhtml +@ifnothtml +Tineke de Munnik +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Ben Luo +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +Introduction +@* +(4506) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Gauvain Pocentek +@* +Jean-Charles Malahieude +@* +John Mandereau +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* +Yoshinobu Ishizaki +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html +Tineke de Munnik +@end html +@end ifhtml +@ifnothtml +Tineke de Munnik +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@item +Download +@* +(1183) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* +John Mandereau +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html +Tineke de Munnik +@end html +@end ifhtml +@ifnothtml +Tineke de Munnik +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Ben Luo +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +Manuals +@* +(1200) +@tab Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html +Tineke de Munnik +@end html +@end ifhtml +@ifnothtml +Tineke de Munnik +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Ben Luo +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +A GNU Free Documentation License +@* +(3724) +@tab Pavel Fric +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Till Paala +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab John Mandereau +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html +Tineke de Munnik +@end html +@end ifhtml +@ifnothtml +Tineke de Munnik +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Ben Luo +@* + +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@item +Community +@* +(1755) +@tab  Pavel Fric +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab  Till Paala +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jean-Charles Malahieude +@* +John Mandereau +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Harmath Dénes +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +Luca Rossetto Casel +@end html +@end ifhtml +@ifnothtml +Luca Rossetto Casel +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +partially up to date +@end html +@end ifhtml +@ifnothtml +partially up to date +@end ifnothtml +@tab Yoshiki Sawada +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Jan Nieuwenhuizen +@* + +@ifhtml + +@html +Tineke de Munnik +@end html +@end ifhtml +@ifnothtml +Tineke de Munnik +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + +@html +not translated +@end html +@end ifhtml +@ifnothtml +not translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@end multitable + diff --git a/Documentation/translations.template.html.in b/Documentation/translations.template.html.in deleted file mode 100644 index e0bbadc092..0000000000 --- a/Documentation/translations.template.html.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - LilyPond documentation translations status - - - - -

    Up to documentation index

    - -

    Documentation translations status

    - -

    This is an overview of which parts of LilyPond @TOPLEVEL_VERSION@ - documentation are translated; for each documentation section, you - can read the word count in parentheses, who translated and verified - it (translation checkers are printed with a smaller font size), how - much of the original section in English has been translation, how - up-to-date is the translation, and whether the translation has - already been updated after Grand Documentation Project (GDP) was - started. -

    - -

    Please note that GDP makes a lot of changes to documentation in - English, therefore translated documentation is mostly not - up-to-date; however, this does not mean translated documentation is - inaccurate regarding current LilyPond version, it only means that - translated docmentation is not synced with documentation in English. - We do our best to keep translated documentation consistent with - current LilyPond syntax and features, and will update it per - section, when GDP processing of the corresponding section in English - is finished. -

    - - - diff --git a/Documentation/usage.tely b/Documentation/usage.tely new file mode 100644 index 0000000000..e2d2e7c3cd --- /dev/null +++ b/Documentation/usage.tely @@ -0,0 +1,83 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename lilypond-usage.info +@settitle LilyPond Application Usage +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@macro manualIntro +This file explains how to execute the programs distributed with +LilyPond version @version{}. In addition, it suggests some +@qq{best practices} for efficient usage. +@end macro + +@c `Usage' was born 1999-10-10 with git commit c82c30c... +@macro copyrightDeclare +Copyright @copyright{} 1999--2011 by the authors. +@end macro + +@set FDL +@include macros.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival +@omfdescription Application Usage of the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + + +@lilyTitlePage{Usage} + + +@c TOC -- non-tex +@ifnottex + +@c maybe add a "Tasks" or "Specific tasks" or something like +@c that, after Suggestions -gp +@menu +* Running lilypond:: Operation. +* Updating files with convert-ly:: Updating input files. +* lilypond-book:: Integrating text and music. +* External programs:: Mixing LilyPond and other programs. +* Suggestions for writing files:: Best practices and effective bug-fixing. + +Appendices + +* GNU Free Documentation License:: License of this document. +* LilyPond index:: +@end menu + +@docMain +@end ifnottex + + +@contents + +@allowcodebreaks false + +@include usage/running.itely +@include usage/updating.itely +@include usage/lilypond-book.itely +@include usage/external.itely +@include usage/suggestions.itely + +@include fdl.itexi + +@node LilyPond index +@appendix LilyPond index + +@printindex cp + +@bye diff --git a/Documentation/usage/GNUmakefile b/Documentation/usage/GNUmakefile new file mode 100644 index 0000000000..26e33a6901 --- /dev/null +++ b/Documentation/usage/GNUmakefile @@ -0,0 +1,10 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +LATEX_FILES =$(call src-wildcard,*.latex) +EXTRA_DIST_FILES = $(LATEX_FILES) + +include $(depth)/make/stepmake.make + + diff --git a/Documentation/usage/external.itely b/Documentation/usage/external.itely new file mode 100644 index 0000000000..01e637bdc9 --- /dev/null +++ b/Documentation/usage/external.itely @@ -0,0 +1,599 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node External programs +@chapter External programs + +LilyPond can interact with other programs in various ways. + +@menu +* Point and click:: +* Text editor support:: +* Converting from other formats:: +* LilyPond output in other programs:: +* Independent includes:: +@end menu + + +@node Point and click +@section Point and click + +@cindex point and click + +Point and click lets you find notes in the input by clicking on them +in the PDF viewer. This makes it easier to find input that causes +some error in the sheet music. + +When this functionality is active, LilyPond adds hyperlinks to the PDF +file. These hyperlinks are sent to the web-browser, which opens a +text-editor with the cursor in the right place. + +To make this chain work, you should configure your PDF viewer to +follow hyperlinks using the @file{lilypond-invoke-editor} script +supplied with LilyPond. + +For Xpdf on UNIX, the following should be present in +@file{xpdfrc}@footnote{On UNIX, this file is found either in +@file{/etc/xpdfrc} or as @file{.xpdfrc} in your home directory.} + +@example +urlCommand "lilypond-invoke-editor %s" +@end example + +The program @file{lilypond-invoke-editor} is a small helper +program. It will invoke an editor for the special @code{textedit} +URIs, and run a web browser for others. It tests the environment +variable @code{EDITOR} for the following patterns, + +@table @code +@item emacs + this will invoke +@example +emacsclient --no-wait +@var{line}:@var{column} @var{file} +@end example +@item gvim + this will invoke +@example +gvim --remote +:@var{line}:norm@var{column} @var{file} +@end example + +@item nedit +this will invoke +@example + nc -noask +@var{line} @var{file}' +@end example +@end table + +The environment variable @code{LYEDITOR} is used to override this. It +contains the command line to start the editor, where @code{%(file)s}, +@code{%(column)s}, @code{%(line)s} is replaced with the file, column +and line respectively. The setting + +@example +emacsclient --no-wait +%(line)s:%(column)s %(file)s +@end example + +@noindent +for @code{LYEDITOR} is equivalent to the standard emacsclient +invocation. + + +@cindex file size, output + +The point and click links enlarge the output files significantly. For +reducing the size of PDF and PS files, point and click may be switched +off by issuing + +@example +\pointAndClickOff +@end example + +@noindent +in a @file{.ly} file. Point and click may be explicitly enabled with + +@example +\pointAndClickOn +@end example + +Alternately, you may disable point and click with a command-line +option: + +@example +lilypond -dno-point-and-click file.ly +@end example + +@warning{You should always turn off point and click in any LilyPond +files to be distributed to avoid including path information about +your computer in the .pdf file, which can pose a security risk.} +@node Text editor support +@section Text editor support + +@cindex editors +@cindex vim +@cindex emacs +@cindex modes, editor +@cindex syntax coloring +@cindex coloring, syntax + +There is support for different text editors for LilyPond. + +@menu +* Emacs mode:: +* Vim mode:: +* Other editors:: +@end menu + +@node Emacs mode +@unnumberedsubsec Emacs mode + +Emacs has a @file{lilypond-mode}, which provides keyword +autocompletion, indentation, LilyPond specific parenthesis matching +and syntax coloring, handy compile short-cuts and reading LilyPond +manuals using Info. If @file{lilypond-mode} is not installed on your +platform, see below. + +An Emacs mode for entering music and running LilyPond is contained in +the source archive in the @file{elisp} directory. Do @command{make +install} to install it to @var{elispdir}. The file @file{lilypond-init.el} +should be placed to @var{load-path}@file{/site-start.d/} or appended +to your @file{~/.emacs} or @file{~/.emacs.el}. + +As a user, you may want add your source path (e.g. @file{~/site-lisp/}) to +your @var{load-path} by appending the following line (as modified) to your +@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 Vim mode +@unnumberedsubsec Vim mode + +For @uref{http://@/www@/.vim@/.org,Vim}, a filetype plugin, indent +mode, and syntax-highlighting mode are available to use with +LilyPond. To enable all of these features, create (or modify) +your @file{$HOME/.vimrc} to contain these three lines, in order: + +@example +filetype off +set runtimepath+=/usr/local/share/lilypond/current/vim/ +filetype on +@end example + +@noindent +If LilyPond is not installed in the @file{/usr/local/} directory, +change the path appropriately. This topic is discussed in +@rlearning{Other sources of information}. + + +@node Other editors +@unnumberedsubsec Other editors + +Other editors (both text and graphical) support LilyPond, but +their special configuration files are not distributed with +LilyPond. Consult their documentation for more information. Such +editors are listed in @rweb{Easier editing}. + + +@node Converting from other formats +@section Converting from other formats + +Music can be entered also by importing it from other formats. This +chapter documents the tools included in the distribution to do so. +There are other tools that produce LilyPond input, for example GUI +sequencers and XML converters. Refer to the +@uref{http://@/lilypond@/.org,website} for more details. + +These are separate programs from @command{lilypond} itself, and are +run on the command line; see @ref{Command-line usage} for more +information. If you have MacOS 10.3 or 10.4 and you have trouble +running some of these scripts, e.g. @code{convert-ly}, see +@rweb{MacOS X}. + + +@knownissues +We unfortunately do not have the resources to maintain these +programs; please consider them @qq{as-is}. Patches are appreciated, but +bug reports will almost certainly not be resolved. + +@menu +* Invoking midi2ly:: Importing MIDI. +* Invoking musicxml2ly:: Importing MusicXML. +* Invoking abc2ly:: Importing ABC. +* Invoking etf2ly:: Importing Finale. +* Other formats:: +@end menu + + + +@node Invoking midi2ly +@subsection Invoking @command{midi2ly} + +@cindex MIDI + +@command{midi2ly} translates a Type@tie{}1 MIDI file to a LilyPond source +file. + +MIDI (Music Instrument Digital Interface) is a standard for digital +instruments: it specifies cabling, a serial protocol and a file +format. The MIDI file format is a de facto standard format for +exporting music from other programs, so this capability may come in +useful when importing files from a program that has a converter for a +direct format. + +@command{midi2ly} converts tracks into @rinternals{Staff} and +channels into @rinternals{Voice} contexts. Relative mode is used +for pitches, durations are only written when necessary. + +It is possible to record a MIDI file using a digital keyboard, and +then convert it to @file{.ly}. However, human players are not +rhythmically exact enough to make a MIDI to LY conversion trivial. +When invoked with quantizing (@code{-s} and @code{-d} options) +@command{midi2ly} tries to compensate for these timing errors, but is not +very good at this. It is therefore not recommended to use @command{midi2ly} +for human-generated midi files. + + +It is invoked from the command-line as follows, +@example +midi2ly [@var{option}]@dots{} @var{midi-file} +@end example + +Note that by @q{command-line}, we mean the command line of the +operating system. See @ref{Converting from other formats}, for +more information about this. + +The following options are supported by @command{midi2ly}. + +@table @code +@item -a, --absolute-pitches +Print absolute pitches. + +@item -d, --duration-quant=@var{DUR} +Quantize note durations on @var{DUR}. + +@item -e, --explicit-durations +Print explicit durations. + +@item -h,--help +Show summary of usage. + +@item -k, --key=@var{acc}[:@var{minor}] +Set default key. @math{@var{acc} > 0} sets number of sharps; +@math{@var{acc} < 0} sets number of flats. A minor key is indicated by +@code{:1}. + +@item -o, --output=@var{file} +Write output to @var{file}. + +@item -s, --start-quant=@var{DUR} +Quantize note starts on @var{DUR}. + +@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} +Allow tuplet durations @var{DUR}*@var{NUM}/@var{DEN}. + +@item -v, --verbose +Be verbose. + +@item -V, --version +Print version number. + +@item -w, --warranty +Show warranty and copyright. + +@item -x, --text-lyrics +Treat every text as a lyric. +@end table + + +@knownissues + +Overlapping notes in an arpeggio will not be correctly rendered. The +first note will be read and the others will be ignored. Set them all +to a single duration and add phrase markings or pedal indicators. + + +@node Invoking musicxml2ly +@subsection Invoking @code{musicxml2ly} + +@cindex MusicXML + +@uref{http://@/www.@/musicxml@/.org/,MusicXML} is an XML dialect +for representing music notation. + +@command{musicxml2ly} extracts the notes, articulations, score structure, +lyrics, etc. from part-wise MusicXML files, and writes them to a @file{.ly} +file. It is invoked from the command-line. + + +It is invoked from the command-line as follows, +@example +musicxml2ly [@var{option}]@dots{} @var{xml-file} +@end example + +Note that by @q{command-line}, we mean the command line of the +operating system. See @ref{Converting from other formats}, for +more information about this. + +If the given filename is @file{-}, @command{musicxml2ly} reads input +from the command line. + +The following options are supported by @command{musicxml2ly}: + +@table @code +@item -a, --absolute +convert pitches in absolute mode. + +@item -h,--help +print usage and option summary. + +@item -l, --language=LANG +use LANG for pitch names, e.g. 'deutsch' for note names in German. + +@item --lxml +use the lxml.etree Python package for XML-parsing; uses less memory and cpu time. + +@item --nd --no-articulation-directions +do not convert directions (@code{^}, @code{_} or @code{-}) for +articulations, dynamics, etc. + +@item --no-beaming +do not convert beaming information, use LilyPond's automatic +beaming instead. + +@item -o,--output=@var{file} +set output filename to @var{file}. If @var{file} is @file{-}, the output +will be printed on stdout. If not given, @var{xml-file}@file{.ly} will +be used. + +@item -r,--relative +convert pitches in relative mode (default). + +@item -v,--verbose +be verbose. + +@item --version +print version information. + +@item -z,--compressed +input file is a zip-compressed MusicXML file. +@end table + + +@node Invoking abc2ly +@subsection Invoking @code{abc2ly} + +@warning{This program is not supported, and may be remove from +future versions of LilyPond.} + +@cindex ABC + +ABC is a fairly simple ASCII based format. It is described at the ABC site: + +@quotation +@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. +@end quotation + +@command{abc2ly} translates from ABC to LilyPond. It is invoked as follows: + +@example +abc2ly [@var{option}]@dots{} @var{abc-file} +@end example + +The following options are supported by @command{abc2ly}: + +@table @code +@item -b,--beams=None +preserve ABC's notion of beams +@item -h,--help +this help +@item -o,--output=@var{file} +set output filename to @var{file}. +@item -s,--strict +be strict about success +@item --version +print version information. +@end table + +There is a rudimentary facility for adding LilyPond code to the ABC +source file. If you say: + +@example +%%LY voices \set autoBeaming = ##f +@end example + +This will cause the text following the keyword @q{voices} to be inserted +into the current voice of the LilyPond output file. + +Similarly, + +@example +%%LY slyrics more words +@end example + +will cause the text following the @q{slyrics} keyword to be inserted +into the current line of lyrics. + + +@knownissues + +The ABC standard is not very @q{standard}. For extended features +(e.g., polyphonic music) different conventions exist. + +Multiple tunes in one file cannot be converted. + +ABC synchronizes words and notes at the beginning of a line; +@command{abc2ly} does not. + +@command{abc2ly} ignores the ABC beaming. + + +@node Invoking etf2ly +@subsection Invoking @command{etf2ly} + +@warning{This program is not supported, and may be remove from +future versions of LilyPond.} + +@cindex ETF +@cindex enigma +@cindex Finale +@cindex Coda Technology + +ETF (Enigma Transport Format) is a format used by Coda Music +Technology's Finale product. @command{etf2ly} will convert part of an ETF +file to a ready-to-use LilyPond file. + +It is invoked from the command-line as follows. + +@example +etf2ly [@var{option}]@dots{} @var{etf-file} +@end example + +Note that by @q{command-line}, we mean the command line of the +operating system. See @ref{Converting from other formats}, for +more information about this. + +The following options are supported by @command{etf2ly}: + +@table @code +@item -h,--help +this help +@item -o,--output=@var{FILE} +set output filename to @var{FILE} +@item --version +version information +@end table + + +@knownissues + +The list of articulation scripts is incomplete. Empty measures +confuse @command{etf2ly}. Sequences of grace notes are ended improperly. + + +@node Other formats +@subsection Other formats + +@cindex External programs, generating LilyPond files + +LilyPond itself does not come with support for any other formats, +but some external tools can also generate LilyPond files. These +are listed in @rweb{Easier editing}. + + + +@node LilyPond output in other programs +@section LilyPond output in other programs + +This section shows methods to integrate text and music, different than +the automated method with @command{lilypond-book}. + +@menu +* Many quotes from a large score:: +* Inserting LilyPond output into OpenOffice.org:: +* Inserting LilyPond output into other programs:: +@end menu + +@node Many quotes from a large score +@unnumberedsubsec Many quotes from a large score + +If you need to quote many fragments from a large score, you can also use +the clip systems feature, see @ruser{Extracting fragments of music}. + + +@node Inserting LilyPond output into OpenOffice.org +@unnumberedsubsec Inserting LilyPond output into OpenOffice.org + +@cindex OpenOffice.org + +LilyPond notation can be added to OpenOffice.org with +@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. + + +@node Inserting LilyPond output into other programs +@unnumberedsubsec Inserting LilyPond output into other programs + +To insert LilyPond output in other programs, use @code{lilypond} +instead of @code{lilypond-book}. Each example must be created +individually and added to the document; consult the documentation for +that program. Most programs will be able to insert LilyPond output in +@file{PNG}, @file{EPS}, or @file{PDF} formats. + +To reduce the white space around your LilyPond score, use +the following options + +@example +\paper@{ + indent=0\mm + line-width=120\mm + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +@} + +@{ c1 @} +@end example + +To produce a useful @file{EPS} file, use + +@example +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly + +@file{PNG}: +lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly +@end example + + +@node Independent includes +@section Independent @code{include}s + +Some people have written large (and useful!) code that can be +shared between projects. This code might eventually make its way +into LilyPond itself, but until that happens, you must download +and @code{\include} them manually. + + +@menu +* MIDI articulation:: +@end menu + + +@node MIDI articulation +@subsection MIDI articulation + +LilyPond can be used to produce MIDI output, for +@qq{proof-hearing} what has been written. However, only dynamics, +explicit tempo markings, and the notes and durations themselves +are produced in the output. + +The @emph{articulate} project is one attempt to get more of the +information in the score into he MIDI. It works by shortening +notes not under slurs, to @q{articulate} the notes. The amount of +shortening depends on any articulation markings attached to a +note: staccato halves the note value, tenuto gives a note its full +duration, and so on. The script also realises trills and turns, +and could be extended to expand other ornaments such as mordents. + +@example +@uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate} +@end example + +@knownissues + +Its main limitation is that it can only affect things it knows +about: anything that is merely textual markup (instead of a note +property) is still ignored. + + diff --git a/Documentation/user/latex-example.latex b/Documentation/usage/latex-example.latex similarity index 92% rename from Documentation/user/latex-example.latex rename to Documentation/usage/latex-example.latex index da9c12b871..a622c305e4 100644 --- a/Documentation/user/latex-example.latex +++ b/Documentation/usage/latex-example.latex @@ -7,11 +7,11 @@ \begin{document} \begin{lilypond} -\relative { c' d e f g a b c } +\relative c' { c d e f g a b c } \end{lilypond} -\begin[fragment]{lilypond} +\begin{lilypond}[fragment] c d e \end{lilypond} diff --git a/Documentation/user/latex-lilypond-example.latex b/Documentation/usage/latex-lilypond-example.latex similarity index 82% rename from Documentation/user/latex-lilypond-example.latex rename to Documentation/usage/latex-lilypond-example.latex index a8b799badb..8125748360 100644 --- a/Documentation/user/latex-lilypond-example.latex +++ b/Documentation/usage/latex-lilypond-example.latex @@ -21,8 +21,8 @@ \section{LilyPond-book + LaTeX} -This is an examplefile for mixing LilyPond and Latex. It is also -used to test lilypond-book. View the source to see how it is done. +This is an examplefile for mixing LilyPond and Latex. It is also +used to test lilypond-book. View the source to see how it is done. A simple scale: @@ -33,10 +33,10 @@ A simple scale: \end{lilypond} LilyPond-book search for the \verb|\score| command when it decides -if the code is only a fragment. Thus, in the following code, you have +if the code is only a fragment. Thus, in the following code, you have to use \verb|fragment| option, because the comment confuses lilypond-book. -\begin[fragment]{lilypond} +\begin{lilypond}[fragment] c d e % \score \end{lilypond} @@ -46,14 +46,14 @@ There is also a shorthand version \verb|\lilypond[fragment]{c' e' g'}|: that is the same as writing \begin{verbatim} -\begin[fragment]{lilypond} +\begin{lilypond}[fragment] c' e' g' \end{lilypond} \end{verbatim} This C major -%%\begin[staffsize=11\pt,fragment]{lilypond} -\begin[11pt,fragment]{lilypond} +%%\begin{lilypond}[staffsize=11\pt,fragment] +\begin{lilypond}[11pt,fragment] \context Voice <> \end{lilypond} and C minor @@ -64,16 +64,16 @@ and C minor As you see, the begin/end verbatim command inside does not confuse lilypond-book: -\verb|\begin[fragment]{lilypond}c d e\end{lilypond}| +\verb|\begin{lilypond}[fragment]c d e\end{lilypond}| Neither does a verbatim inside verb: -\verb|\begin{verbatim}\begin[fragment]{lilypond}c d e\end{lilypond}\end{verbatim}| +\verb|\begin{verbatim}\begin{lilypond}[fragment]c d e\end{lilypond}\end{verbatim}| or verb inside verbatim: \begin{verbatim} -\verb|\begin[fragment]{lilypond}c d e\end{lilypond}| +\verb|\begin{lilypond}[fragment]c d e\end{lilypond}| \end{verbatim} But this is just to stress \verb|lilypond-book|. What you need is: @@ -90,7 +90,7 @@ c d e \subsection{The 'verbatim' and 'intertext' option} This shows the verbatim option: -\begin[fragment,verbatim, intertext="gives this music:"]{lilypond} +\begin{lilypond}[fragment,verbatim, intertext="gives this music:"] c' d' e' \end{lilypond} @@ -104,21 +104,21 @@ this line, then lilypond-book is handling latex comments pretty well :-) \subsection{To float or not to float} This music -\begin[fragment]{lilypond} +\begin{lilypond}[fragment] c' e' \end{lilypond} should be floating inside the text by using the \verb|eps| options. This music -\begin[fragment]{lilypond} +\begin{lilypond}[fragment] c' e' \end{lilypond} has also the \verb|eps| options, but is not floating because there -are an emptry line before and after the lilypond block. That is +are an empty line before and after the lilypond block. That is correct behaviour because it follows La\TeX{} convention that an -empty line signals a new paragraph. The \verb|eps| option +empty line signals a new paragraph. The \verb|eps| option is not necessary when you want the music in a paragraph on its own. \subsection{More examples} @@ -155,7 +155,7 @@ Tables\footnote{ and footnote: \pagebreak -Testing of spacing. The next music is surrounded by an empty line. +Testing of spacing. The next music is surrounded by an empty line. text text text text text text text text text text text text text text text text text text text text text text text text diff --git a/Documentation/usage/lilypond-book.itely b/Documentation/usage/lilypond-book.itely new file mode 100644 index 0000000000..9d018275ef --- /dev/null +++ b/Documentation/usage/lilypond-book.itely @@ -0,0 +1,1281 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@c Note: keep this node named so that `info lilypond-book' brings you here. +@node lilypond-book +@chapter Running @command{lilypond-book} + +If you want to add pictures of music to a document, you can simply do it +the way you would do with other types of pictures. The pictures are +created separately, yielding PostScript output or PNG images, and those +are included into a @LaTeX{} or HTML document. + +@command{lilypond-book} provides a way to automate this process: This +program extracts snippets of music from your document, runs +@command{lilypond} on them, and outputs the document with pictures +substituted for the music. The line width and font size definitions for +the music are adjusted to match the layout of your document. + +This is a separate program from @command{lilypond} itself, and is run +on the command line; for more information, see @ref{Command-line +usage}. If you have MacOS 10.3 or 10.4 and you have trouble running +@code{lilypond-book}, see @rweb{MacOS X}. + +This procedure may be applied to @LaTeX{}, HTML, Texinfo or DocBook +documents. + +@cindex texinfo +@cindex latex +@cindex texinfo +@cindex texi +@cindex html +@cindex docbook +@cindex documents, adding music to +@cindex HTML, music in +@cindex Texinfo, music in +@cindex DocBook, music in +@cindex @LaTeX{}, music in + +@menu +* An example of a musicological document:: +* Integrating music and text:: +* Music fragment options:: +* Invoking lilypond-book:: +* Filename extensions:: +* lilypond-book templates:: +* Sharing the table of contents:: +* Alternate methods of mixing text and music:: +@end menu + + +@node An example of a musicological document +@section An example of a musicological document + +@cindex musicology +Some texts contain music examples. These texts are musicological +treatises, songbooks, or manuals like this. Such texts can be made by +hand, simply by importing a PostScript figure into the word processor. +However, there is an automated procedure to reduce the amount of work +involved in HTML, @LaTeX{}, Texinfo and DocBook documents. + +A script called @code{lilypond-book} will extract the music fragments, +format them, and put back the resulting notation. Here we show a small +example for use with @LaTeX{}. The example also contains explanatory +text, so we will not comment on it further. + +@subheading Input + +@quotation +@verbatim +\documentclass[a4paper]{article} + +\begin{document} + +Documents for \verb+lilypond-book+ may freely mix music and text. +For example, + +\begin{lilypond} +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +\end{lilypond} + +Options are put in brackets. + +\begin{lilypond}[fragment,quote,staffsize=26,verbatim] + c'4 f16 +\end{lilypond} + +Larger examples can be put into a separate file, and introduced with +\verb+\lilypondfile+. + +\lilypondfile[quote,noindent]{screech-boink.ly} + +(If needed, replace @file{screech-boink.ly} by any @file{.ly} file +you put in the same directory as this file.) + +\end{document} +@end verbatim +@end quotation + +@subheading Processing + +Save the code above to a file called @file{lilybook.lytex}, then in a +terminal run + +@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{..lots of stuff deleted..} +@emph{Compiling lilybook.tex...} +cd out +pdflatex lilybook +@emph{..lots of stuff deleted..} +xpdf lilybook +@emph{(replace @command{xpdf} by your favorite PDF viewer)} +@end example + +Running @command{lilypond-book} and @command{latex} creates a lot of +temporary files, which would clutter up the working directory. To +remedy this, use the @code{--output=@var{dir}} option. It will create +the files in a separate subdirectory @file{dir}. + +Finally the result of the @LaTeX{} example shown above.@footnote{This +tutorial is processed with Texinfo, so the example gives slightly +different results in layout.} This finishes the tutorial section. + +@page + +@subheading Output + +Documents for @command{lilypond-book} may freely mix music and text. +For example, + +@lilypond +\relative c' { + c2 e2 \times 2/3 { f8 a b } a2 e4 +} +@end lilypond + +Options are put in brackets. + +@lilypond[fragment,quote,staffsize=26,verbatim] +c'4 f16 +@end lilypond + +Larger examples can be put into a separate file, and introduced with +@code{\lilypondfile}. + +@lilypondfile[quote,noindent]{screech-boink.ly} + +If a @code{tagline} is required, either default or custom, then the +entire snippet must be enclosed in a @code{\book @{ @}} construct. + +@lilypond[papersize=a8,verbatim] +\book{ + \header{ + title = "A scale in LilyPond" + } + + \relative c' { + c d e f g a b c + } +} +@end lilypond + +@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]@{@} +@end example + +@noindent +produces + +@lilypond[quote,fragment,staffsize=11]{} + +@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]@{@} +@end example + +@noindent +produces + +@lilypond[fragment,staffsize=11]{} + +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 + +\key c \minor c4 es g2 + +@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{}, where the options +are separated by a colon from the music, for example + +@example +Some music in a line of text. +@end example + +To include separate files, say + +@example +@var{filename} +@end example + +For a list of options to use with the @code{lilypond} or +@code{lilypondfile} tags, see @ref{Music fragment options}. + +Additionally, @code{} 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 + + + + + +@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 + + + +\context Staff \with @{ + \remove Time_signature_engraver + \remove Clef_engraver@} + @{ c4( fis) @} + + + +@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 papersize=@var{string} +Where @var{string} is a paper size defined in @file{scm/paper.scm} i.e. +@code{a5}, @code{quarto}, @code{11x17} etc. + +Values not defined in @file{scm/paper.scm} will be ignored, a warning +will be posted and the snippet will be printed using the default +@code{a4} size. + +@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 + + + + + +

    +Documents for lilypond-book may freely mix music and text. For +example, + +\relative c'' @{ + a4 b c d +@} + +

    + +

    +Another bit of lilypond, this time with options: + + +a4 b c d + +

    + + + + + +@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}. + + diff --git a/Documentation/usage/running.itely b/Documentation/usage/running.itely new file mode 100644 index 0000000000..4d32d67e50 --- /dev/null +++ b/Documentation/usage/running.itely @@ -0,0 +1,813 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@node Running lilypond +@chapter Running @command{lilypond} + +This chapter details the technicalities of running LilyPond. + +@menu +* Normal usage:: +* Command-line usage:: +* Error messages:: +* Common errors:: +@end menu + + +@node Normal usage +@section Normal usage + +Most users run LilyPond through a GUI; if you have not done so +already, please read the @rlearning{Tutorial}. If you use an alternate +editor to write lilypond files, see the documentation for that +program. + + +@node Command-line usage +@section Command-line usage + +This section contains extra information about using LilyPond on the +command-line. This may be desirable to pass extra options to the +program. In addition, there are certain extra @q{helper} programs (such +as @code{midi2ly}) which are only available on the command-line. + +By @q{command-line}, we mean the command line in the operating system. +Windows users might be more familiar with the terms @q{DOS shell} or +@q{command shell}. MacOS@tie{}X users might be more familiar with the terms +@q{terminal} or @q{console}. Some additional setup is required +for MacOS@tie{}X users; please see @rweb{MacOS X}. + +Describing how to use this part of an operating system is outside the +scope of this manual; please consult other documentation on this topic +if you are unfamiliar with the command-line. + +@menu +* Invoking lilypond:: +* Command line options for lilypond:: +* Environment variables:: +* LilyPond in chroot jail:: +@end menu + +@node Invoking lilypond +@unnumberedsubsec Invoking @command{lilypond} + +The @command{lilypond} executable may be called as follows from +the command line. + +@example +lilypond [@var{option}]@dots{} @var{file}@dots{} +@end example + + +When invoked with a filename that has no extension, the @file{.ly} +extension is tried first. To read input from stdin, use a +dash (@code{-}) for @var{file}. + +When @file{filename.ly} is processed it will produce @file{filename.ps} +and @file{filename.pdf} as output. Several files can be specified; +they will each be processed independently. @footnote{The status of +GUILE is not reset after processing a @code{.ly} file, so be careful +not to change any system defaults from within Scheme.} + +If @file{filename.ly} contains more than one @code{\book} +block, then the rest of the scores will be output in numbered files, +starting with @file{filename-1.pdf}. In addition, the value of +@code{output-suffix} will be inserted between the basename and the +number. An input file containing + +@example +#(define output-suffix "violin") +\score @{ @dots{} @} +#(define output-suffix "cello") +\score @{ @dots{} @} +@end example + +@noindent +will output @var{base}@file{-violin.pdf} and +@var{base}@file{-cello-1.pdf}. + + +@unnumberedsubsubsec Standard shell commands + +If your shell (i.e. command window) supports normal redirects, +then you might find it useful to use the following commands to +redirect console output to a file: + +@itemize + +@item +@code{lilypond file.ly 1>stdout.log} to redirect normal output + +@item +@code{lilypond file.ly 2>stderr.log} to redirect error messages + +@item +@code{lilypond file.ly &>all.log} to redirect all output + +@end itemize + +Consult the documentation for your shell to see if it supports these +options, or if the syntax is different. Note that these are shell +commands and have nothing to do with lilypond. + + +@node Command line options for lilypond +@unnumberedsubsec Command line options for @command{lilypond} + +@cindex Invoking @command{lilypond} +@cindex command line options for @command{lilypond} +@cindex options, command line +@cindex switches + +The following options are supported: + +@table @code + +@item -e,--evaluate=@var{expr} +Evaluate the Scheme @var{expr} before parsing any @file{.ly} files. +Multiple @code{-e} options may be given, they will be evaluated +sequentially. + +The expression will be evaluated in the @code{guile-user} module, so +if you want to use definitions in @var{expr}, use + +@example +lilypond -e '(define-public a 42)' +@end example + +@noindent +on the command-line, and include + +@example +#(use-modules (guile-user)) +@end example + +@noindent +at the top of the @code{.ly} file. + +@item -f,--format=@var{format} +which formats should be written. Choices for @code{format} are +@code{ps}, @code{pdf}, and @code{png}. + +Example: @code{lilypond -fpng @var{filename}.ly} + + + +@item -d,--define-default=@var{var}=@var{val} +This sets the internal program option @var{var} to the Scheme value +@var{val}. If @var{val} is not supplied, then @var{#t} is used. To +switch off an option, @code{no-} may be prefixed to @var{var}, e.g. + +@cindex point and click, command line + +@example +-dno-point-and-click +@end example + +@noindent +is the same as +@example +-dpoint-and-click='#f' +@end example + +Here are a few interesting options. + +@cindex help, command line + +@table @samp +@item help +Running @code{lilypond -dhelp} will print all of the @code{-d} options +available. + +@cindex paper-size, command line + +@item paper-size +This option sets the default paper-size, +@example +-dpaper-size=\"letter\" +@end example + +@noindent +Note that the string must be enclosed in escaped quotes ( @code{\"} ). +@c Match " in previous line to help context-sensitive editors + +@cindex safe, command line + +@item safe +Do not trust the @code{.ly} input. + +When LilyPond formatting is available through a web server, either the +@code{--safe} or the @code{--jail} option @b{MUST} be passed. The +@code{--safe} option will prevent inline Scheme code from wreaking +havoc, for example + +@quotation +@verbatim +#(system "rm -rf /") +{ + c4^#(ly:export (ly:gulp-file "/etc/passwd")) +} +@end verbatim +@end quotation + +The @code{-dsafe} option works by evaluating in-line Scheme +expressions in a special safe module. This safe module is derived from +GUILE @file{safe-r5rs} module, but adds a number of functions of the +LilyPond API. These functions are listed in @file{scm/safe-lily.scm}. + +In addition, safe mode disallows @code{\include} directives and +disables the use of backslashes in @TeX{} strings. + +In safe mode, it is not possible to import LilyPond variables +into Scheme. + +@code{-dsafe} does @emph{not} detect resource overuse. It is still possible to +make the program hang indefinitely, for example by feeding cyclic data +structures into the backend. Therefore, if using LilyPond on a +publicly accessible webserver, the process should be limited in both +CPU and memory usage. + +The safe mode will prevent many useful LilyPond snippets from being +compiled. The @code{--jail} is a more secure alternative, but +requires more work to set up. + +@cindex output format, setting +@item backend +the output format to use for the back-end. Choices for @code{format} are +@table @code +@item ps +@cindex PostScript output + for PostScript. + + Postscript files include TTF, Type1 and OTF fonts. No subsetting of + these fonts is done. When using oriental character sets, this can + lead to huge files. + +@item eps + +@cindex Postscript, encapsulated +@cindex EPS (Encapsulated PostScript) + + for encapsulated PostScript. This dumps every page (system) as a separate +@file{EPS} file, without fonts, and as one collated @file{EPS} file with +all pages (systems) including fonts. + +This mode is used by default by @command{lilypond-book}. + +@item svg + +@cindex SVG (Scalable Vector Graphics) + + for SVG (Scalable Vector Graphics). + + This creates a single SVG file, without embedded fonts, for every + page of output. It is recommended to install the Century + Schoolbook fonts, included with your LilyPond installation, for + optimal rendering. Under UNIX, simply copy these fonts from the + LilyPond directory (typically + @file{/usr/share/lilypond/VERSION/fonts/otf/}) to + @file{~/.fonts/}. The SVG output should be compatible with any + SVG editor or user agent. + +@item scm + +@cindex Scheme dump + + for a dump of the raw, internal Scheme-based drawing commands. + +@item null + do not output a printed score; has the same effect as @code{-dno-print-pages}. +@end table + +Example: @code{lilypond -dbackend=svg @var{filename}.ly} + +@item preview +@cindex preview, command line +Generate an output file containing the titles and the first system +of music. If @code{\bookpart} blocks are used, the titles and +first system of every @code{\bookpart} will appear in the output. +The @code{ps}, @code{eps}, and @code{svg} backends support this +option. + +@item print-pages +Generate the full pages, the default. @code{-dno-print-pages} is +useful in combination with @code{-dpreview}. + +@end table + + + +@item -h,--help +Show a summary of usage. + +@item -H,--header=@var{FIELD} +Dump a header field to file @file{BASENAME.@var{FIELD}}. + +@cindex file searching +@cindex search path +@item --include, -I=@var{directory} +Add @var{directory} to the search path for input files. + +Multiple -I options may be given. The search will start in the +first defined directory, and if the file to be included is not +found the search will continue in subsequent directories. + +@item -i,--init=@var{file} +Set init file to @var{file} (default: @file{init.ly}). + +@cindex folder, directing output to +@cindex output filename, setting + +@item -o,--output=@var{FILE} or @var{FOLDER} +Set the default output file to @var{FILE} or, if a folder with +that name exists, direct the output to @var{FOLDER}, taking the +file name from the input file. The appropriate suffix will be +added (e.g. @code{.pdf} for pdf) in both cases. + + +@cindex PostScript output + +@item --ps +Generate PostScript. + +@cindex Portable Network Graphics (PNG) output + +@item --png +Generate pictures of each page, in PNG format. This implies +@code{--ps}. The resolution in DPI of the image may be set with +@example +-dresolution=110 +@end example + +@cindex Portable Document Format (PDF) output + +@item --pdf +Generate PDF. This implies @code{--ps}. + + + +@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir} +Run @command{lilypond} in a chroot jail. + +The @code{--jail} option provides a more flexible alternative to +@code{--safe} when LilyPond formatting is available through a web +server or whenever LilyPond executes externally provided +sources. + +The @code{--jail} option works by changing the root of @command{lilypond} to +@var{jail} just before starting the actual compilation process. The user +and group are then changed to match those provided, and the current +directory is changed to @var{dir}. This setup guarantees that it is not +possible (at least in theory) to escape from the jail. Note that for +@code{--jail} to work @command{lilypond} must be run as root, which is usually +accomplished in a safe way using @command{sudo}. + +Setting up a jail is a slightly delicate matter, as we must be sure that +LilyPond is able to find whatever it needs to compile the source +@emph{inside the jail}. A typical setup comprises the following items: + +@table @asis +@item Setting up a separate filesystem +A separate filesystem should be created for LilyPond, so that it can be +mounted with safe options such as @code{noexec}, @code{nodev}, and +@code{nosuid}. In this way, it is impossible to run executables or to +write directly to a device from LilyPond. If you do not want to create a +separate partition, just create a file of reasonable size and use it to +mount a loop device. A separate filesystem also guarantees that LilyPond +cannot write more space than it is allowed. + +@item Setting up a separate user +A separate user and group (say, @code{lily}/@code{lily}) with low +privileges should be used to run LilyPond inside the jail. There should +be a single directory writable by this user, which should be passed in +@var{dir}. + +@item Preparing the jail +LilyPond needs to read a number of files while running. All these files +are to be copied into the jail, under the same path they appear in the +real root filesystem. The entire content of the LilyPond installation +(e.g., @file{/usr/share/lilypond}) +should be copied. + +If problems arise, the simplest way to trace them down is to run +LilyPond using @command{strace}, which will allow you to determine which +files are missing. + +@item Running LilyPond +In a jail mounted with @code{noexec} it is impossible to execute any external +program. Therefore LilyPond must be run with a backend that does not +require any such program. As we already mentioned, it must be also run +with superuser privileges (which, of course, it will lose immediately), +possibly using @command{sudo}. It is a good idea to limit the number of +seconds of CPU time LilyPond can use (e.g., using @command{ulimit +-t}), and, if your operating system supports it, the amount of memory +that can be allocated. +@end table + + +@item -v,--version +Show version information. + +@item -V,--verbose +Be verbose: show full paths of all files read, and give timing +information. + +@item -w,--warranty +Show the warranty with which GNU LilyPond comes. (It comes with +@strong{NO WARRANTY}!) +@end table + + +@node Environment variables +@unnumberedsubsec Environment variables + + +@cindex LANG +@cindex LILYPOND_DATADIR + +@command{lilypond} recognizes the following environment variables: +@table @code +@item LILYPOND_DATADIR +This specifies a directory where locale messages and +data files will be looked up by default. The directory should contain +subdirectories called @file{ly/}, @file{ps/}, @file{tex/}, etc. + +@item LANG +This selects the language for the warning messages. + +@item LILYPOND_GC_YIELD +A variable, as a percentage, that tunes memory management +behavior. A higher values means the program uses more memory, a +smaller value means more CPU time is used. The default value is +@code{70}. + +@end table + + +@node LilyPond in chroot jail +@unnumberedsubsec LilyPond in chroot jail + +Setting up the server to run LilyPond in a chroot jail is a complicated +task. The steps are listed below. Examples in the steps are from +Ubuntu Linux, and may require the use of @code{sudo} as appropriate. + +@itemize + +@item Install the necessary packages: LilyPond, GhostScript, and ImageMagick. + +@item Create a new user by the name of @code{lily}: + +@example +adduser lily +@end example + +@noindent +This will create a new group for the @code{lily} user as well, and a home folder, +@code{/home/lily} + +@item In the home folder of the @code{lily} user create a file to use as a +separate filesystem: + +@example +dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000 +@end example + +@noindent +This example creates a 200MB file for use as the jail filesystem. + +@item Create a loop device, make a file system and mount it, then create +a folder that can be written by the @code{lily} user: + +@example +mkdir /mnt/lilyloop +losetup /dev/loop0 /home/lily/loopfile +mkfs -t ext3 /dev/loop0 200000 +mount -t ext3 /dev/loop0 /mnt/lilyloop +mkdir /mnt/lilyloop/lilyhome +chown lily /mnt/lilyloop/lilyhome +@end example + +@item In the configuration of the servers, the JAIL will be @code{/mnt/lilyloop} +and the DIR will be @code{/lilyhome}. + +@item Create a big directory tree in the jail by copying the necessary files, as +shown in the sample script below. + +You can use @code{sed} to create the necessary copy commands for a given +executable: + +@example +for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ + do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ + cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ + \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done +@end example + +@end itemize + +@subheading Example script for 32-bit Ubuntu 8.04 + +@example +#!/bin/sh +## defaults set here + +username=lily +home=/home +loopdevice=/dev/loop0 +jaildir=/mnt/lilyloop +# the prefix (without the leading slash!) +lilyprefix=usr/local +# the directory where lilypond is installed on the system +lilydir=/$lilyprefix/lilypond/ + +userhome=$home/$username +loopfile=$userhome/loopfile +adduser $username +dd if=/dev/zero of=$loopfile bs=1k count=200000 +mkdir $jaildir +losetup $loopdevice $loopfile +mkfs -t ext3 $loopdevice 200000 +mount -t ext3 $loopdevice $jaildir +mkdir $jaildir/lilyhome +chown $username $jaildir/lilyhome +cd $jaildir + +mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp +chmod a+w tmp + +cp -r -L $lilydir $lilyprefix +cp -L /bin/sh /bin/rm bin +cp -L /usr/bin/convert /usr/bin/gs usr/bin +cp -L /usr/share/fonts/truetype usr/share/fonts + +# Now the library copying magic +for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ + "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ + \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ + 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ + | sed '/.*=>.*/d'; done | sh -s + +# The shared files for ghostscript... + cp -L -r /usr/share/ghostscript usr/share +# The shared files for ImageMagick + cp -L -r /usr/lib/ImageMagick* usr/lib + +### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, +### you should be able to run: +### Note that /$lilyprefix/bin/lilypond is a script, which sets the +### LD_LIBRARY_PATH - this is crucial + /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly +@end example + +@c " keep quote signs balanced for context-sensitive editors + +@node Error messages +@section Error messages + +@cindex error messages +Different error messages can appear while compiling a file: + +@table @emph + +@item Warning +@cindex warning +Something looks suspect. If you are requesting something out of the +ordinary then you will understand the message, and can ignore it. +However, warnings usually indicate that something is wrong with the +input file. + +@item Error +@cindex error +Something is definitely wrong. The current processing step (parsing, +interpreting, or formatting) will be finished, but the next step will +be skipped. + +@item Fatal error +@cindex fatal error +Something is definitely wrong, and LilyPond cannot continue. This +happens rarely. The most usual cause is misinstalled fonts. + +@item Scheme error +@cindex trace, Scheme +@cindex call trace +@cindex Scheme error +Errors that occur while executing Scheme code are caught by the Scheme +interpreter. If running with the verbose option (@code{-V} or +@code{--verbose}) then a call trace of the offending +function call is printed. + +@item Programming error +@cindex Programming error +There was some internal inconsistency. These error messages are +intended to help the programmers and debuggers. Usually, they can be +ignored. Sometimes, they come in such big quantities that they obscure +other output. + +@item Aborted (core dumped) +@cindex Aborted (core dumped) +This signals a serious programming error that caused the program to +crash. Such errors are considered critical. If you stumble on one, +send a bug-report. +@end table + +@cindex errors, message format +If warnings and errors can +be linked to some part of the input file, then error messages have the +following form + +@example +@var{filename}:@var{lineno}:@var{columnno}: @var{message} +@var{offending input line} +@end example + +A line-break is inserted in the offending line to indicate the column +where the error was found. For example, + +@example +test.ly:2:19: error: not a duration: 5 + @{ c'4 e' + 5 g' @} +@end example + +These locations are LilyPond's best guess about where the warning or +error occurred, but (by their very nature) warnings and errors occur +when something unexpected happens. If you can't see an error in the +indicated line of your input file, try checking one or two lines +above the indicated position. + +More information about errors is given in @ref{Common errors}. + + +@node Common errors +@section Common errors + +The error conditions described below occur often, yet the cause +is not obvious or easily found. Once seen and understood, they +are easily handled. + + +@menu +* Music runs off the page:: +* An extra staff appears:: +* Apparent error in ../ly/init.ly:: +* Error message Unbound variable %:: +* Error message FT_Get_Glyph_Name:: +* Warning staff affinities should only decrease:: +@end menu + +@node Music runs off the page +@unnumberedsubsec Music runs off the page + +Music running off the page over the right margin or appearing +unduly compressed is almost always due to entering an incorrect +duration on a note, causing the final note in a measure to extend +over the bar line. It is not invalid if the final note in a +measure does not end on the automatically entered bar line, as the +note is simply assumed to carry over into the next measure. But +if a long sequence of such carry-over measures occurs the music +can appear compressed or may flow off the page because automatic +line breaks can be inserted only at the end of complete measures, +i.e., where all notes end before or at the end of the measure. + +@warning{An incorrect duration can cause line breaks to be +inhibited, leading to a line of highly compressed music or +music which flows off the page.} + +The incorrect duration can be found easily if bar checks are used, +see @ruser{Bar and bar number checks}. + +If you actually intend to have a series of such carry-over measures +you will need to insert an invisible bar line where you want the +line to break. For details, see @ruser{Bar lines}. + + +@node An extra staff appears +@unnumberedsubsec An extra staff appears + +If contexts are not created explicitly with @code{\new} or +@code{\context}, they will be silently created as soon as a +command is encountered which cannot be applied to an existing +context. In simple scores the automatic creation of contexts is +useful, and most of the examples in the LilyPond manuals take +advantage of this simplification. But occasionally the silent +creation of contexts can give rise to unexpected new staves or +scores. For example, it might be expected that the following code +would cause all note heads within the following staff to be +colored red, but in fact it results in two staves with the note +heads remaining the default black in the lower staff. + +@lilypond[quote,verbatim,relative=2] +\override Staff.NoteHead #'color = #red +\new Staff { a } +@end lilypond + +This is because a @code{Staff} context does not exist when the +override is processed, so one is implicitly created and the override +is applied to it, but then the @code{\new Staff} command creates +another, separate, staff into which the notes are placed. The +correct code to color all note heads red is + +@lilypond[quote,verbatim,relative=2] +\new Staff { + \override Staff.NoteHead #'color = #red + a +} +@end lilypond + +As a second example, if a @code{\relative} command is placed inside +a @code{\repeat} command, two staves result, the second offset from +the first, because the @code{\repeat} command generates two +@code{\relative} blocks, which each implicitly create @code{Staff} +and @code{Voice} blocks. + +@lilypond[quote,verbatim] +\repeat unfold 2 { + \relative c' { c4 d e f } +} +@end lilypond + +Explicitly instantiating the @code{Voice} context fixes the +problem: + +@lilypond[quote,verbatim] +\new Voice { + \repeat unfold 2 { + \relative c' { c4 d e f } + } +} +@end lilypond + + +@node Apparent error in ../ly/init.ly +@unnumberedsubsec Apparent error in @code{../ly/init.ly} + +Various obscure error messages may appear about syntax errors in +@file{../ly/init.ly} if the input file is not correctly formed, +for example, if it does not contain correctly +matched braces or quote signs. + +The most common error is a missing brace, (@code{@}}), at the end of +a @code{score} block. Here the solution is obvious: check the +@code{score} block is correctly terminated. The correct structure +of an input file is described in @rlearning{How LilyPond input files work}. +Using an editor which automatically highlights matching brackets and +braces is helpful to avoid such errors. + +A second common cause is no white space between the last syllable +of a lyrics block and the terminating brace, (@code{@}}). Without +this separation the brace is taken to be part of the syllable. It +is always advisable to ensure there is white space before and after +@emph{every} brace. For the importance of this when using lyrics, +see @ruser{Entering lyrics}. + +This error message can also appear if a terminating quote sign, +(@code{"}), is omitted. In this case an accompanying error message +@c keep "-matching straight in fancy editors +should give a line number close to the line in error. The +mismatched quote will usually be on the line one or two above. + +@node Error message Unbound variable % +@unnumberedsubsec Error message Unbound variable % + +This error message will appear at the bottom of the console +output or log file together with a @qq{GUILE signalled an error ...} +message every time a Scheme routine is called which (invalidly) +contains a @emph{LilyPond} rather than a @emph{Scheme} comment. + +LilyPond comments begin with a percent sign, (@code{%}), and must +not be used within Scheme routines. Scheme comments begin with a +semi-colon, (@code{;}). + +@node Error message FT_Get_Glyph_Name +@unnumberedsubsec Error message FT_Get_Glyph_Name + +This error messages appears in the console output or log file if +an input file contains a non-ASCII character and was not saved in +UTF-8 encoding. For details, see @ruser{Text encoding}. + + +@node Warning staff affinities should only decrease +@unnumberedsubsec Warning staff affinities should only decrease +This warning can appear if there are no staves in the printed +output, for example if there are just a @code{ChordName} context +and a @code{Lyrics} context as in a lead sheet. The warning +messages can be avoided by making one of the contexts behave as a +staff by inserting + +@example +\override VerticalAxisGroup #'staff-affinity = ##f +@end example + +@noindent +at its start. For details, see @qq{Spacing of non-staff lines} in +@ruser{Flexible vertical spacing within systems}. diff --git a/Documentation/usage/suggestions.itely b/Documentation/usage/suggestions.itely new file mode 100644 index 0000000000..085d455803 --- /dev/null +++ b/Documentation/usage/suggestions.itely @@ -0,0 +1,609 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + +@node Suggestions for writing files +@chapter Suggestions for writing files + +Now you're ready to begin writing larger LilyPond input files -- +not just the little examples in the tutorial, but whole pieces. +But how should you go about doing it? + +As long as LilyPond can understand your input files and produce +the output that you want, it doesn't matter what your input files +look like. However, there are a few other things to consider when +writing LilyPond input files. + +@itemize +@item What if you make a mistake? The structure of a LilyPond +file can make certain errors easier (or harder) to find. + +@item What if you want to share your input files with somebody +else? In fact, what if you want to alter your own input files in +a few years? Some LilyPond input files are understandable at +first glance; others may leave you scratching your head +for an hour. + +@item What if you want to upgrade your LilyPond file for use +with a later version of LilyPond? The input syntax changes +occasionally as LilyPond improves. Most changes can be +done automatically with @code{convert-ly}, but some changes +might require manual assistance. LilyPond input files can be +structured in order to be easier (or harder) to update. + +@end itemize + +@menu +* General suggestions:: +* Typesetting existing music:: +* Large projects:: +* Troubleshooting:: +* Make and Makefiles:: +@end menu + + +@node General suggestions +@section General suggestions + +Here are a few suggestions that can help you to avoid or fix +problems: + +@itemize +@item @strong{Include @code{\version} numbers in every file}. Note that all +templates contain @code{\version} information. We +highly recommend that you always include the @code{\version}, no matter +how small your file is. Speaking from personal experience, it's +quite frustrating to try to remember which version of LilyPond you were +using a few years ago. @command{convert-ly} requires you to declare +which version of LilyPond you used. + +@item @strong{Include checks}: @ruser{Bar and bar number checks}, +@ruser{Octave checks}. If you include checks every so often, then +if you make a mistake, you can pinpoint it quicker. How often is +@q{every so often}? It depends on the complexity of the music. +For very simple music, perhaps just once or twice. For very +complex music, perhaps every bar. + +@item @strong{One bar per line of text}. If there is anything complicated, +either in the music +itself or in the output you desire, it's often good to write only one bar +per line. Saving screen space by cramming eight bars per line just isn't +worth it if you have to @q{debug} your input files. + +@item @strong{Comment your input files}. Use either bar numbers +(every so often) or +references to musical themes (@q{second theme in violins,} @q{fourth +variation,} etc.). You may not need comments when you're writing the piece +for the first time, but if you want to go back to change something two or +three years later, or if you pass the source over to a friend, it will +be much more +challenging to determine your intentions or how your file is structured if +you didn't comment the file. + +@item @strong{Indent your braces}. A lot of problems are caused by an +imbalance +in the number of @code{@{} and @code{@}}. + +@item @strong{Explicitly add durations} at the beginnings of sections +and variables. If you specify @code{c4 d e} at the beginning of a +phrase (instead of just @code{c d e}) you can save yourself some +problems if you rearrange your music later. + +@item @strong{Separate tweaks} from music definitions. See +@rlearning{Saving typing with variables and functions}, and +@rlearning{Style sheets}. + +@end itemize + + +@node Typesetting existing music +@section Typesetting existing music + +If you are entering music from an existing score (i.e., typesetting a +piece of existing sheet music), + +@itemize + +@item Enter the manuscript (the physical copy of the music) into +LilyPond one system at a time (but still only one bar per line of text), +and check each system when you finish it. You may use the +@code{showLastLength} or @code{showFirstLength} properties to speed up +processing -- see @ruser{Skipping corrected music}. + +@item Define @code{mBreak = @{ \break @}} and insert @code{\mBreak} +in the input file whenever the manuscript has a line break. This +makes it much easier to compare the LilyPond music to the original +music. When you are finished proofreading your score, you may +define @code{mBreak = @{ @}} to remove all those line breaks. This +will allow LilyPond to place line breaks wherever it feels are +best. + +@item When entering a part for a transposing instrument into a +variable, it is recommended that the notes are wrapped in + +@example +\transpose c natural-pitch @{...@} +@end example + +@noindent +(where @code{natural-pitch} is the open pitch of the instrument) so +that the music in the variable is effectively in C. You can transpose +it back again when the variable is used, if required, but you might +not want to (e.g., when printing a score in concert pitch, +converting a trombone part from treble to bass clef, etc.) +Mistakes in transpositions are less likely if all the music in +variables is at a consistent pitch. + +Also, only ever transpose to/from C. That means that the only other +keys you will use are the natural pitches of the instruments - bes +for a B-flat trumpet, aes for an A-flat clarinet, etc. + +@end itemize + + +@node Large projects +@section Large projects + +When working on a large project, having a clear structure to your +lilypond input files becomes vital. + +@itemize + +@item @strong{Use a variable for each voice}, with a minimum of +structure inside the definition. The structure of the +@code{\score} section is the most likely thing to change; +the @code{violin} definition is extremely unlikely to change +in a new version of LilyPond. + +@example +violin = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violin + @} + @} +@} +@end example + +@item @strong{Separate tweaks from music definitions}. This +point was made previously, but for large +projects it is absolutely vital. We might need to change +the definition of @code{fthenp}, but then we only need +to do this once, and we can still avoid touching anything +inside @code{violin}. + +@example +fthenp = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fthenp c'8. e16 +@} +@end example + +@end itemize + + +@node Troubleshooting +@section Troubleshooting + +Sooner or later, you will write a file that LilyPond cannot +compile. The messages that LilyPond gives may help +you find the error, but in many cases you need to do some +investigation to determine the source of the problem. + +The most powerful tools for this purpose are the +single line comment (indicated by @code{%}) and the block +comment (indicated by @code{%@{ ... %@}}). If you don't +know where a problem is, start commenting out huge portions +of your input file. After you comment out a section, try +compiling the file again. If it works, then the problem +must exist in the portion you just commented. If it doesn't +work, then keep on commenting out material until you have +something that works. + +In an extreme case, you might end up with only + +@example +\score @{ + << + % \melody + % \harmony + % \bass + >> + \layout@{@} +@} +@end example + +@noindent +(in other words, a file without any music) + +If that happens, don't give up. Uncomment a bit -- say, +the bass part -- and see if it works. If it doesn't work, +then comment out all of the bass music (but leave +@code{\bass} in the @code{\score} uncommented. + +@example +bass = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +Now start slowly uncommenting more and more of the +@code{bass} part until you find the problem line. + +Another very useful debugging technique is constructing +@rweb{Tiny examples}. + + +@node Make and Makefiles +@section Make and Makefiles + +@cindex makefiles +@cindex make + +Pretty well all the platforms Lilypond can run on support a software +facility called @code{make}. This software reads a special file called a +@code{Makefile} that defines what files depend on what others and what +commands you need to give the operating system to produce one file from +another. For example the makefile would spell out how to produce +@file{ballad.pdf} and @file{ballad.midi} from @file{ballad.ly} by +running Lilypond. + +There are times when it is a good idea to create a @code{Makefile} +for your project, either for your own convenience or +as a courtesy to others who might have access to your source files. +This is true for very large projects with many included files and +different output options (e.g. full score, parts, conductor's +score, piano reduction, etc.), or for projects that +require difficult commands to build them (such as +@code{lilypond-book} projects). Makefiles vary greatly in +complexity and flexibility, according to the needs and skills of +the authors. The program GNU Make comes installed on GNU/Linux +distributions and on MacOS X, and it is also available for Windows. + +See the @strong{GNU Make Manual} for full details on using +@code{make}, as what follows here gives only a glimpse of what it +can do. + +The commands to define rules in a makefile differ +according to platform; for instance the various forms of Linux and +MacOS use @code{bash}, while Windows uses @code{cmd}. Note that on +MacOS X, you need to configure the system to use the command-line +interpreter. Here are some example makefiles, with versions for both +Linux/MacOS and Windows. + +The first example is for an orchestral work in four +movements with a directory structure as follows: + +@example +Symphony/ +|-- MIDI/ +|-- Makefile +|-- Notes/ +| |-- cello.ily +| |-- figures.ily +| |-- horn.ily +| |-- oboe.ily +| |-- trioString.ily +| |-- viola.ily +| |-- violinOne.ily +| `-- violinTwo.ily +|-- PDF/ +|-- Parts/ +| |-- symphony-cello.ly +| |-- symphony-horn.ly +| |-- symphony-oboes.ly +| |-- symphony-viola.ly +| |-- symphony-violinOne.ly +| `-- symphony-violinTwo.ly +|-- Scores/ +| |-- symphony.ly +| |-- symphonyI.ly +| |-- symphonyII.ly +| |-- symphonyIII.ly +| `-- symphonyIV.ly +`-- symphonyDefs.ily +@end example + +The @file{.ly} files in the @file{Scores} and +@file{Parts} directories get their notes from @file{.ily} +files in the @file{Notes} directory: + +@example +%%% top of file "symphony-cello.ly" +\include ../definitions.ily +\include ../Notes/cello.ily +@end example + +The makefile will have targets of @code{score} (entire piece in +full score), @code{movements} (individual movements in full score), +and @code{parts} (individual parts for performers). There +is also a target @code{archive} that will create a tarball of +the source files, suitable for sharing via web or email. Here is +the makefile for GNU/Linux or MacOS X. It should be saved with the +name @code{Makefile} in the top directory of the project: + +@warning{When a target or pattern rule is defined, the +subsequent lines must begin with tabs, not spaces.} + +@example +# the name stem of the output files +piece = symphony +# determine how many processors are present +CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` +# The command to run lilypond +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click -djob-count=$(CPU_CORES) + +# The suffixes used in this Makefile. +.SUFFIXES: .ly .ily .pdf .midi + +# Input and output files are searched in the directories listed in +# the VPATH variable. All of them are subdirectories of the current +# directory (given by the GNU make variable `CURDIR'). +VPATH = \ + $(CURDIR)/Scores \ + $(CURDIR)/PDF \ + $(CURDIR)/Parts \ + $(CURDIR)/Notes + +# The pattern rule to create PDF and MIDI files from a LY input file. +# The .pdf output files are put into the `PDF' subdirectory, and the +# .midi files go into the `MIDI' subdirectory. +%.pdf %.midi: %.ly + $(LILY_CMD) $<; \ # this line begins with a tab + if test -f "$*.pdf"; then \ + mv "$*.pdf" PDF/; \ + fi; \ + if test -f "$*.midi"; then \ + mv "$*.midi" MIDI/; \ + fi + +notes = \ + cello.ily \ + horn.ily \ + oboe.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +# The dependencies of the movements. +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +# The dependencies of the full score. +$(piece).pdf: $(piece).ly $(notes) + +# The dependencies of the parts. +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +# Type `make score' to generate the full score of all four +# movements as one file. +.PHONY: score +score: $(piece).pdf + +# Type `make parts' to generate all parts. +# Type `make foo.pdf' to generate the part for instrument `foo'. +# Example: `make symphony-cello.pdf'. +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +# Type `make movements' to generate files for the +# four movements separately. +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements + +archive: + tar -cvvf stamitz.tar \ # this line begins with a tab + --exclude=*pdf --exclude=*~ \ + --exclude=*midi --exclude=*.tar \ + ../Stamitz/* +@end example + + +There are special complications on the Windows platform. After +downloading and installing GNU Make for Windows, you must set the +correct path in the system's environment variables so that the +DOS shell can find the Make program. To do this, right-click on +"My Computer," then choose @code{Properties} and +@code{Advanced}. Click @code{Environment Variables}, and then +in the @code{System Variables} pane, highlight @code{Path}, click +@code{edit}, and add the path to the GNU Make executable file, which + will look something like this: + +@example +C:\Program Files\GnuWin32\bin +@end example + +The makefile itself has to be altered to handle different shell +commands and to deal with spaces that are present +in some default system directories. The @code{archive} target +is eliminated since Windows does not have the @code{tar} command, +and Windows also has a different default extension for midi files. + + +@example +## WINDOWS VERSION +## +piece = symphony +LILY_CMD = lilypond -ddelete-intermediate-files \ + -dno-point-and-click \ + -djob-count=$(NUMBER_OF_PROCESSORS) + +#get the 8.3 name of CURDIR (workaround for spaces in PATH) +workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ + do @@echo %%~sb) + +.SUFFIXES: .ly .ily .pdf .mid + +VPATH = \ + $(workdir)/Scores \ + $(workdir)/PDF \ + $(workdir)/Parts \ + $(workdir)/Notes + +%.pdf %.mid: %.ly + $(LILY_CMD) $< # this line begins with a tab + if exist "$*.pdf" move /Y "$*.pdf" PDF/ # begin with tab + if exist "$*.mid" move /Y "$*.mid" MIDI/ # begin with tab + +notes = \ + cello.ily \ + figures.ily \ + horn.ily \ + oboe.ily \ + trioString.ily \ + viola.ily \ + violinOne.ily \ + violinTwo.ily + +$(piece)I.pdf: $(piece)I.ly $(notes) +$(piece)II.pdf: $(piece)II.ly $(notes) +$(piece)III.pdf: $(piece)III.ly $(notes) +$(piece)IV.pdf: $(piece)IV.ly $(notes) + +$(piece).pdf: $(piece).ly $(notes) + +$(piece)-cello.pdf: $(piece)-cello.ly cello.ily +$(piece)-horn.pdf: $(piece)-horn.ly horn.ily +$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily +$(piece)-viola.pdf: $(piece)-viola.ly viola.ily +$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily +$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily + +.PHONY: score +score: $(piece).pdf + +.PHONY: parts +parts: $(piece)-cello.pdf \ + $(piece)-violinOne.pdf \ + $(piece)-violinTwo.pdf \ + $(piece)-viola.pdf \ + $(piece)-oboes.pdf \ + $(piece)-horn.pdf + +.PHONY: movements +movements: $(piece)I.pdf \ + $(piece)II.pdf \ + $(piece)III.pdf \ + $(piece)IV.pdf + +all: score parts movements +@end example + + +The next Makefile is for a @command{lilypond-book} document done in +LaTeX. This project has an index, which requires that the +@command{latex} command be run twice to update links. Output files are +all stored in the @code{out} directory for .pdf output and in the +@code{htmlout} directory for the html output. + +@example +SHELL=/bin/sh +FILE=myproject +OUTDIR=out +WEBDIR=htmlout +VIEWER=acroread +BROWSER=firefox +LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex +LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex +PDF=cd $(OUTDIR) && pdflatex $(FILE) +HTML=cd $(WEBDIR) && latex2html $(FILE) +INDEX=cd $(OUTDIR) && makeindex $(FILE) +PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf & + +all: pdf web keep + +pdf: + $(LILYBOOK_PDF) # begin with tab + $(PDF) # begin with tab + $(INDEX) # begin with tab + $(PDF) # begin with tab + $(PREVIEW) # begin with tab + +web: + $(LILYBOOK_HTML) # begin with tab + $(HTML) # begin with tab + cp -R $(WEBDIR)/$(FILE)/ ./ # begin with tab + $(BROWSER) $(FILE)/$(FILE).html & # begin with tab + +keep: pdf + cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # begin with tab + +clean: + rm -rf $(OUTDIR) # begin with tab + +web-clean: + rm -rf $(WEBDIR) # begin with tab + +archive: + tar -cvvf myproject.tar \ # begin this line with tab + --exclude=out/* \ + --exclude=htmlout/* \ + --exclude=myproject/* \ + --exclude=*midi \ + --exclude=*pdf \ + --exclude=*~ \ + ../MyProject/* +@end example + +TODO: make this thing work on Windows + +The previous makefile does not work on Windows. An alternative +for Windows users would be to create a simple batch file +containing the build commands. This will not +keep track of dependencies the way a makefile does, but it at +least reduces the build process to a single command. Save the +following code as @command{build.bat} or @command{build.cmd}. +The batch file can be run at the DOS prompt or by simply +double-clicking its icon. + +@example +lilypond-book --output=out --pdf myproject.lytex +cd out +pdflatex myproject +makeindex myproject +pdflatex myproject +cd .. +copy out\myproject.pdf MyProject.pdf +@end example + + +@seealso + +This manual: +@ref{Command-line usage}, +@ref{lilypond-book} + diff --git a/Documentation/usage/updating.itely b/Documentation/usage/updating.itely new file mode 100644 index 0000000000..755c530632 --- /dev/null +++ b/Documentation/usage/updating.itely @@ -0,0 +1,262 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@c \version "2.14.0" + + +@node Updating files with convert-ly +@chapter Updating files with @command{convert-ly} + +@cindex Updating a LilyPond file +@cindex convert-ly + +The LilyPond input syntax is routinely changed to simplify it or improve +it in different ways. As a side effect of this, the LilyPond interpreter +often is no longer compatible with older input files. To remedy this, +the program @command{convert-ly} can be used to deal with most of the +syntax changes between LilyPond versions. + +@menu +* Why does the syntax change?:: +* Invoking convert-ly:: +* Command line options for convert-ly:: +* Problems running convert-ly:: +* Manual conversions:: +@end menu + + +@node Why does the syntax change? +@section Why does the syntax change? + +@cindex convert-ly +@cindex updating old input files + +The LilyPond input syntax occasionally changes. As LilyPond +itself improves, the syntax (input language) is modified +accordingly. Sometimes these changes are made to make the input +easier to read and write or sometimes the changes are made to +accommodate new features of LilyPond. + +For example, all @code{\paper} and @code{\layout} property names +are supposed to be written in the form @code{first-second-third}. +However, in version 2.11.60, we noticed that the +@code{printallheaders} property did not follow this convention. +Should we leave it alone (confusing new users who must deal with +an inconsistent input format), or change it (annoying old users +with existing scores)? In this case, we decided to change the +name to @code{print-all-headers}. Fortunately, this change can be +automated with our @command{convert-ly} tool. + +Unfortunately, @code{convert-ly} cannot handle all input changes. +For example, in LilyPond 2.4 and earlier, accents and non-English +letters were entered using LaTeX -- displaying the French word for +Christmas was entered as @code{No\"el}. But in LilyPond +@c keep "-matching straight in fancy editors +2.6 and above, the special @code{ë} must be entered directly into +the LilyPond file as an UTF-8 character. @code{convert-ly} cannot +change all the LaTeX special characters into UTF-8 characters; you +must manually update your old LilyPond input files. + + +@node Invoking convert-ly +@section Invoking @command{convert-ly} + +@command{convert-ly} uses @code{\version} statements in the input +file to detect the old version number. In most cases, to upgrade +your input file it is sufficient to run + +@example +convert-ly -e myfile.ly +@end example + +@noindent +in the directory containing the file. This will upgrade +@file{myfile.ly} in-place and preserve the original file in +@file{myfile.ly~}. + +@warning{@command{convert-ly} always converts up to the last +syntax change handled by it. This means that the @code{\version} +number left in the file is usually lower than the version of +@command{convert-ly} itself.} + +To convert all the input files in a directory together use + +@example +convert-ly -e *.ly +@end example + +Alternatively, if you want to specify a different name for the +upgraded file, preserving the original file and name unchanged, +use + +@example +convert-ly myfile.ly > mynewfile.ly +@end example + +The program will list the version numbers for which conversions +have been made. If no version numbers are listed the file is +already up to date. + +MacOS@tie{}X users may execute these commands under the menu entry +@code{Compile > Update syntax}. + +Windows users should enter these commands in a Command Prompt +window, which is usually found under +@code{Start > Accessories > Command Prompt}. + + +@node Command line options for convert-ly +@section Command line options for @command{convert-ly} + +The program is invoked as follows: + +@example +convert-ly [@var{option}]@dots{} @var{filename}@dots{} +@end example + + +The following options can be given: + +@table @code +@item -e,--edit +Apply the conversions direct to the input file, modifying it +in-place. + +@item -f,--from=@var{from-patchlevel} +Set the version to convert from. If this is not set, @command{convert-ly} +will guess this, on the basis of @code{\version} strings in the file. +E.g. @code{--from=2.10.25} + +@item -n,--no-version +Normally, @command{convert-ly} adds a @code{\version} indicator +to the output. Specifying this option suppresses this. + +@item -s, --show-rules +Show all known conversions and exit. + +@item --to=@var{to-patchlevel} +Set the goal version of the conversion. It defaults to the latest +available version. E.g. @code{--to=2.12.2} + +@item -h, --help +Print usage help. +@end table + +To upgrade LilyPond fragments in texinfo files, use + +@example +convert-ly --from=... --to=... --no-version *.itely +@end example + +To see the changes in the LilyPond syntax between two versions, use + +@example +convert-ly --from=... --to=... -s +@end example + + +@node Problems running convert-ly +@section Problems running @code{convert-ly} + +When running convert-ly in a Command Prompt window under Windows +on a file which has spaces in the filename or in the path to it, +it is necessary to surround the entire input file name with three +(!) sets of double quotes: + +@example +convert-ly """D:/My Scores/Ode.ly""" > "D:/My Scores/new Ode.ly" +@end example + +If the simple @command{convert-ly -e *.ly} command fails because the +expanded command line becomes too long, the @command{convert-ly} +command may be placed in a loop instead. This example for UNIX +will upgrade all @file{.ly} files in the current directory + +@example +for f in *.ly; do convert-ly -e $f; done; +@end example + +In the Windows Command Prompt window the corresponding command is + +@example +for %x in (*.ly) do convert-ly -e """%x""" +@end example + +Not all language changes are handled. Only one output option can be +specified. Automatically updating scheme and LilyPond scheme +interfaces is quite unlikely; be prepared to tweak scheme code +manually. + + +@node Manual conversions +@section Manual conversions + +In theory, a program like @command{convert-ly} could handle any +syntax change. After all, a computer program interprets the old +version and the new version, so another computer program can +translate one file into another@footnote{At least, this is +possible in any LilyPond file which does not contain scheme. If +there is scheme in the file, then the LilyPond file contains a +Turing-complete language, and we run into problems with the famous +@qq{Halting Problem} in computer science.}. + +However, the LilyPond project has limited resources: not all +conversions are performed automatically. Below is a list of known +problems. + + +@verbatim +1.6->2.0: + Doesn't always convert figured bass correctly, specifically things like {< +>}. Mats' comment on working around this: + To be able to run convert-ly + on it, I first replaced all occurrences of '{<' to some dummy like '{#' + and similarly I replaced '>}' with '&}'. After the conversion, I could + then change back from '{ #' to '{ <' and from '& }' to '> }'. + Doesn't convert all text markup correctly. In the old markup syntax, + it was possible to group a number of markup commands together within +parentheses, e.g. + -#'((bold italic) "string") + This will incorrectly be converted into + -\markup{{\bold italic} "string"} + instead of the correct + -\markup{\bold \italic "string"} +2.0->2.2: + Doesn't handle \partcombine + Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple +stanzas. +2.0->2.4: + \magnify isn't changed to \fontsize. + - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) + remove-tag isn't changed. + - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . + first-page-number isn't changed. + - first-page-number no => print-first-page-number = ##f + Line breaks in header strings aren't converted. + - \\\\ as line break in \header strings => \markup \center-align < + "First Line" "Second Line" > + Crescendo and decrescendo terminators aren't converted. + - \rced => \! + - \rc => \! +2.2->2.4: + \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly +converted. +2.4.2->2.5.9 + \markup{ \center-align <{ ... }> } should be converted to: + \markup{ \center-align {\line { ... }} } + but now, \line is missing. +2.4->2.6 + Special LaTeX characters such as $~$ in text are not converted to UTF8. +2.8 + \score{} must now begin with a music expression. Anything else + (particularly \header{}) must come after the music. +@end verbatim + + diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile deleted file mode 100644 index d928f28375..0000000000 --- a/Documentation/user/GNUmakefile +++ /dev/null @@ -1,155 +0,0 @@ -depth=../.. - -LATEX_FILES =$(call src-wildcard,*.latex) - - -EXTRA_DIST_FILES = $(LATEX_FILES) $(IMAGES) $(EPS_ILLUSTRATIONS) -EXTRA_DIST_FILES += README.txt - -IMAGES=$(call src-wildcard,*.png) -EPS_ILLUSTRATIONS=context-example.eps -PDF_ILLUSTRATIONS=context-example.pdf - -OUT_PDF_IMAGES=$(IMAGES:%.png=$(outdir)/%.pdf) $(addprefix $(outdir)/,$(PDF_ILLUSTRATIONS)) - -OUT_PNG_IMAGES=$(OUT_PDF_IMAGES:%.pdf=%.png) - -OUT_MASTER_TEXI_FILES = $(outdir)/lilypond-internals.texi -OUT_TEXI_FILES=$(ITEXI_FILES:%.itexi=$(outdir)/%.texi)\ - $(ITELY_FILES:%.itely=$(outdir)/%.texi) - -HTML_FILES = $(TELY_FILES:%.tely=$(outdir)/%-big-page.html)\ - $(outdir)/lilypond-internals-big-page.html - -# todo: add latex. -PDF_FILES = $(TELY_FILES:%.tely=$(outdir)/%.pdf)\ - $(outdir)/lilypond-internals.pdf - -MAIN_INFO_DOC = lilypond -INFO_DOCS = lilypond lilypond-internals music-glossary lilypond-program lilypond-learning -INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info) - -TEXI2PDF_FLAGS = \ - -I $(outdir) \ - -I $(top-src-dir)/Documentation/user \ - -I $(top-build-dir)/Documentation/user/$(outconfbase) - -ifeq ($(out),www) -INFO_IMAGES_DIR = lilypond -DEST_INFO_IMAGES_SUBDIR = Documentation/user -endif - -STEPMAKE_TEMPLATES=texinfo omf documentation -OMF_FILES += $(outdir)/lilypond-internals.html.omf - -LOCALSTEPMAKE_TEMPLATES=lilypond ly - -include $(depth)/make/stepmake.make - -default: - -info: $(INFO_FILES) - @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR) - @echo export PYTHONPATH=$(PYTHONPATH) - -xml: $(outdir)/lilypond/lilypond.xml $(outdir)/lilypond-internals/lilypond-internals.xml - - -local-clean: - rm -f $(INFO_IMAGES_DIR) - -local-help: extra-local-help - -extra-local-help: - @echo -e "\ - info update info pages\n\ - xml update Docbook xml documentation\n\ -" - -# -# Split manuals in HTML -# -$(outdir)/lilypond/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES) -$(outdir)/lilypond-learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES) - - -# -# Manuals in one big HTML page -# -$(outdir)/lilypond-big-page.html: $(OUT_PNG_IMAGES) -$(outdir)/lilypond-learning-big-page.html: $(OUT_PNG_IMAGES) - -$(outdir)/lilypond.xml: $(outdir)/lilypond.texi - mkdir -p $(dir $@) - $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ --docbook $< - -$(outdir)/lilypond-internals/lilypond-internals.xml: $(outdir)/lilypond-internals.texi - mkdir -p $(dir $@) - $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(outdir)/lilypond-internals --docbook $< - -$(outdir)/lilypond.pdf $(outdir)/lilypond-learning.pdf: $(OUT_PDF_IMAGES) - -$(outdir)/%.png: %.png - convert -depth 8 -geometry 50x50% $< $@ - -$(outdir)/%.png: %.eps - gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit - -$(outdir)/%.pdf: %.png - convert -depth 8 $< $@ - -$(outdir)/%.pdf: %.eps - gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $< - - -DEEP_HTML_FILES =\ - $(outdir)/lilypond/index.html\ - $(outdir)/lilypond-internals/index.html\ - $(outdir)/music-glossary/index.html\ - $(outdir)/lilypond-program/index.html\ - $(outdir)/lilypond-learning/index.html - -# Symlinks to refer to external source documents from split and non-split HTML -source-links = $(outdir)/source $(outdir)/lilypond/source $(outdir)/music-glossary/source \ - $(outdir)/lilypond-program/source $(outdir)/lilypond-learning/source $(outdir)/lilypond-internals/source - -$(outdir)/source: - @rm -f $(@) - ln -sf $(depth) $(@) - -$(outdir)/%/source: - @rm -f $(@) - mkdir -p $(dir $@) - ln -sf $(depth)/.. $(@) - -ifeq ($(out),www) -local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) info - -local-WWW-2: $(HTML_FILES) $(DEEP_HTML_FILES) $(source-links) -endif - -$(outdir)/%.bib: %.bib - ln -f $< $@ - -# lilypond.texi deps -$(top-build-dir)/mf/$(outconfbase)/feta16list.ly: - $(MAKE) -C $(top-src-dir)/mf - -$(outdir)/lilypond.texi $(outdir)/lilypond-program.texi $(outdir)/lilypond-learning.texi $(outdir)/music-glossary.texi: $(ITELY_FILES) $(ITEXI_FILES) - -$(outdir)/lilypond.texi: $(outdir)/ly-grammar.txt - -# Rules for the automatically generated documentation - -$(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy - cd $(outdir) && $(BISON) -v $< - $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@ - -# There used to be a dependency on a dummy target, to force a rebuild -# of lilypond-internals every time. however, this triggers -# compilation during install, which is a bad thing (tm). - -$(outdir)/lilypond-internals.texi: $(LILYPOND_BINARY) - cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation - -.SECONDARY: diff --git a/Documentation/user/README.txt b/Documentation/user/README.txt deleted file mode 100644 index 45058ea3ac..0000000000 --- a/Documentation/user/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -Info for Documentation ----------------------- - -See CG 3. Documentation work - diff --git a/Documentation/user/ancient.itely b/Documentation/user/ancient.itely deleted file mode 100644 index 493d3123fe..0000000000 --- a/Documentation/user/ancient.itely +++ /dev/null @@ -1,2562 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c vim: foldmethod=marker -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Ancient notation -@section Ancient notation - -@lilypondfile[quote]{ancient-headword.ly} - -@cindex Vaticana, Editio -@cindex Medicaea, Editio -@cindex hufnagel -@cindex Petrucci -@cindex mensural - - -@menu -* Overview of the supported styles:: -* Ancient notation---common features:: -* Typesetting mensural music:: -* Typesetting Gregorian chant:: -* Working with ancient music---scenarios and solutions:: -@end menu - - -Support for ancient notation includes features for mensural -notation and Gregorian chant notation. These features can be -accessed either by modifying style properties of graphical objects -such as note heads and rests, or by using one of the pre-defined -contexts for mensural or Gregorian notation. - -Many graphical objects, such as note heads and flags, accidentals, -time signatures, and rests, provide a @code{style} property, which -can be changed to emulate several different styles of ancient -notation. See - -@itemize -@item @ref{Mensural note heads}, -@item @ref{Mensural accidentals and key signatures}, -@item @ref{Mensural rests}, -@item @ref{Mensural clefs}, -@item @ref{Gregorian clefs}, -@item @ref{Mensural flags}, -@item @ref{Mensural time signatures}. -@end itemize - -Some notational concepts are introduced specifically for ancient -notation, - -@itemize -@item @ref{Custodes}, -@item @ref{Divisiones}, -@item @ref{Ligatures}. -@end itemize - -@c {{{1 Overview of the supported styles -@node Overview of the supported styles -@subsection Overview of the supported styles - - -Three styles are available for typesetting Gregorian chant: - -@itemize -@item @emph{Editio Vaticana} is a complete style for -Gregorian chant, following the appearance of the Solesmes -editions, the official chant books of the Vatican since 1904. -Lilypond has support for all the notational signs used in this -style, including ligatures, @emph{custodes}, and special signs -such as the quilisma and the oriscus. - -@cindex Solesmes -@cindex Vaticana, Editio - -@item The @emph{Editio Medicaea} style offers certain features -used in the Medicaea (or Ratisbona) editions which were used prior -to the Solesmes editions. The most significant differences from -the @emph{Vaticana} style are the clefs, which have -downward-slanted strokes, and the noteheads, which are square and -regular. - -@cindex Ratisbona, Editio -@cindex Medicaea, Editio - -@item The @emph{Hufnagel} (@qq{horseshoe nail}) or @emph{Gothic} -style mimics the writing style in chant manuscripts from Germany -and Central Europe during the middle ages. It is named after the -basic note shape (the @emph{virga}), which looks like a small -nail. -@cindex hufnagel -@end itemize - -Three styles emulate the appearance of late-medieval and -renaissance manuscripts and prints of mensural music: - -@itemize -@item The @emph{Mensural} style most closely resembles the -writing style used in late-medieval and early renaissance -manuscripts, with its small and narrow, diamond-shaped noteheads -and its rests which approach a hand-drawn style. - -@cindex mensural - -@item The @emph{Neomensural} style is a modernized and -stylized version of the former: the noteheads are broader and the -rests are made up of straight lines. This style is particularly -suited, e.g., for incipits of transcribed pieces of mensural -music. - -@cindex neomensural - -@item The @emph{Petrucci} style is named after Ottaviano Petrucci -(1466-1539), the first printer to use movable type for music (in -his @emph{Harmonice musices odhecaton}, 1501). The style uses -larger note heads than the other mensural styles. - -@cindex Petrucci - -@end itemize - -@emph{Baroque} and @emph{Classical} are not complete styles -but differ from the default style only in some details: certain -noteheads (Baroque) and the quarter rest (Classical). - -Only the mensural style has alternatives for all aspects of the -notation. Thus, there are no rests or flags in the Gregorian -styles, since these signs are not used in plainchant notation, and -the Petrucci style has no flags or accidentals of its own. - -Each element of the notation can be changed independently of the -others, so that one can use mensural flags, petrucci noteheads, -classical rests and vaticana clefs in the same piece, if one -wishes. - -@c {{{1 Ancient notation, general -@node Ancient notation---common features -@subsection Ancient notation---common features - -@menu -* Pre-defined contexts:: -* Ligatures:: -* Custodes:: -* Figured bass support:: -@end menu - -@c {{{2 Pre-defined contexts -@node Pre-defined contexts -@unnumberedsubsubsec Pre-defined contexts - -For Gregorian chant and mensural notation, there are pre-defined -voice and staff contexts available, which set all the various -notation signs to values suitable for these styles. If one is -satisfied with these defaults, one can proceed directly with note -entry without worrying about the details on how to customize a -context. See one of the pre-defined contexts -@code{VaticanaVoice}, @code{VaticanaStaff}, @code{MensuralVoice}, -and @code{MensuralStaff}. See further - -@itemize -@item @ref{Gregorian chant contexts}, -@item @ref{Mensural contexts}. -@end itemize - - -@c {{{2 Ligatures -@node Ligatures -@unnumberedsubsubsec Ligatures - -@cindex Ligatures - -@c TODO: Should double check if I recalled things correctly when I wrote -@c down the following paragraph by heart. - -A ligature is a graphical symbol that represents at least two -distinct notes. Ligatures originally appeared in the manuscripts -of Gregorian chant notation to denote ascending or descending -sequences of notes on the same syllable. They are also used in -mensural notation. - -Ligatures are entered by @emph{enclosing} them in @code{\[} and -@code{\]}. Some ligature styles may need additional input syntax -specific for this particular type of ligature. By default, the -@rinternals{LigatureBracket} engraver just puts a square bracket -above the ligature. - -@lilypond[quote,ragged-right,verbatim] -\transpose c c' { - \[ g c a f d' \] - a g f - \[ e f a g \] -} -@end lilypond - -Two other ligature styles are available: the Vaticana for -Gregorian chant, and the Mensural for mensural music (only white -mensural ligatures are supported for mensural music, and with -certain limitations). To use any of these styles, the default -@code{Ligature_bracket_engraver} has to be replaced with one of the -specialized ligature engravers in the @rinternals{Voice} context, -as explained in @ref{White mensural ligatures} and @ref{Gregorian -square neume ligatures}. - - -@seealso -@c TODO: nothing here yet ... - - -@knownissues - -Ligatures need special spacing that has not yet been implemented. As -a result, there is too much space between ligatures most of the time, -and line breaking often is unsatisfactory. Also, lyrics do not -correctly align with ligatures. - -Accidentals must not be printed within a ligature, but instead need to -be collected and printed in front of it. - -The syntax still uses the deprecated infix style @code{\[ music expr -\]}. For consistency reasons, it will eventually be changed to -postfix style @code{note\[ ... note\]}. - -@c Alternatively, the file -@c @file{gregorian@/-init@/.ly} can be included; it provides a scheme -@c function -@c @example -@c \ligature @var{music expr} -@c @end example -@c with the same effect and is believed to be stable. - -@c TODO: this does not seem to work at the moment. -@c -- eo - - - -@c {{{2 Custodes -@node Custodes -@unnumberedsubsubsec Custodes - -@cindex custos -@cindex custodes - -A @emph{custos} (plural: @emph{custodes}; Latin word for @qq{guard}) is a -symbol that appears at the end of a staff. It anticipates the pitch -of the first note of the following line, thus helping the performer -to manage line breaks during performance. - -Custodes were frequently used in music notation until the -seventeenth century. Nowadays, they have survived only in a few -particular forms of musical notation such as contemporary editions -of Gregorian chant like the @emph{Editio Vaticana}. There are -different custos glyphs used in different flavors of notational -style. - -For typesetting custodes, just put a @rinternals{Custos_engraver} into the -@rinternals{Staff} context when declaring the @code{\layout} block, -and change the style of the custos with an @code{\override} if -desired, as shown in the following example: - -@lilypond[quote,ragged-right] -\score { - \relative c'' { - a1 - \break - g - } - \layout { - \context { - \Staff - \consists Custos_engraver - \override Custos #'style = #'mensural - } - } -} -@end lilypond - -The custos glyph is selected by the @code{style} property. The styles -supported are @code{vaticana}, @code{medicaea}, @code{hufnagel}, and -@code{mensural}. They are demonstrated in the following fragment - -@lilypond[quote,ragged-right,fragment] -\new Lyrics \lyricmode { - \markup { \column { - \typewriter "vaticana" - \line { " " \musicglyph #"custodes.vaticana.u0" } - } } - \markup { \column { - \typewriter "medicaea" - \line { " " \musicglyph #"custodes.medicaea.u0" } - }} - \markup { \column { - \typewriter "hufnagel" - \line { " " \musicglyph #"custodes.hufnagel.u0" } - }} - \markup { \column { - \typewriter "mensural" - \line { " " \musicglyph #"custodes.mensural.u0" } - }} -} -@end lilypond - - -@seealso -Internals Reference: @rinternals{Custos}. - -Examples: -@rlsr{Ancient notation}. - - -@c {{{2 Figured bass support -@node Figured bass support -@unnumberedsubsubsec Figured bass support - -There is limited support for figured bass notation from the -Baroque period; see @ref{Figured bass}. - - -@c {{{1 Typesetting mensural music -@node Typesetting mensural music -@subsection Typesetting mensural music - -@menu -* Mensural contexts:: -* Mensural clefs:: -* Mensural time signatures:: -* Mensural note heads:: -* Mensural flags:: -* Mensural rests:: -* Mensural accidentals and key signatures:: -* Annotational accidentals (musica ficta):: -* White mensural ligatures:: -@end menu - - - -@c {{{2Mensural contexts -@node Mensural contexts -@unnumberedsubsubsec Mensural contexts - -@cindex MensuralVoiceContext -@cindex MensuralStaffContext - -The predefined @code{MensuralVoice} and @code{MensuralStaff} -contexts can be used to engrave a piece in mensural style. These -contexts initialize all relevant context properties and grob -properties to proper values, so you can immediately go ahead -entering the chant, as the following excerpt demonstrates: - -@lilypond[quote,ragged-right,verbatim] -\score { - << - \new MensuralVoice = "discantus" \transpose c c' { - \override Score.BarNumber #'transparent = ##t { - c'1\melisma bes a g\melismaEnd - f\breve - \[ f1\melisma a c'\breve d'\melismaEnd \] - c'\longa - c'\breve\melisma a1 g1\melismaEnd - fis\longa^\signumcongruentiae - } - } - \new Lyrics \lyricsto "discantus" { - San -- ctus, San -- ctus, San -- ctus - } - >> -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@c {{{2 Mensural clefs -@node Mensural clefs -@unnumberedsubsubsec Mensural clefs - -@cindex clefs - -The following table shows all mensural clefs that are supported via -the @code{\clef} command. Some of the clefs use the same glyph, -but differ only with respect to the line they are printed on. In -such cases, a trailing number in the name is used to enumerate -these clefs, numbered from the lowest to the highest line. Still, -you can manually force a clef glyph to be typeset on an arbitrary -line, as described in @ref{Clef}. The note printed to the right -side of each clef in the example column denotes the @code{c'} with -respect to that clef. - -Petrucci used C clefs with differently balanced left-side vertical -beams, depending on which staff line it is printed. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Description} -@tab -@b{Supported Clefs} -@tab -@b{Example} - -@item -mensural C clef -@tab -@code{mensural-c1}, @code{mensural-c2},@* -@code{mensural-c3}, @code{mensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -mensural F clef -@tab -@code{mensural-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -mensural G clef -@tab -@code{mensural-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "mensural-g" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -neomensural C clef -@tab -@code{neomensural-c1}, @code{neomensural-c2},@* -@code{neomensural-c3}, @code{neomensural-c4} -@tab -@lilypond[fragment,relative=1,notime] - \clef "neomensural-c2" c -@end lilypond - -@item -petrucci style C clefs, for use on different staff lines -(the example shows the 2nd staff line C clef) -@tab -@code{petrucci-c1}, @code{petrucci-c2},@* -@code{petrucci-c3}, @code{petrucci-c4},@* -@code{petrucci-c5} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-c2" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -petrucci style F clef -@tab -@code{petrucci-f} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-f" - \override NoteHead #'style = #'mensural - c -@end lilypond - -@item -petrucci style G clef -@tab -@code{petrucci-g} -@tab -@lilypond[fragment,relative=1,notime] - \clef "petrucci-g" - \override NoteHead #'style = #'mensural - c -@end lilypond -@end multitable - - -@seealso -Notation Reference: see @ref{Clef}. - - -@knownissues - -The mensural g clef is mapped to the Petrucci g clef. - - -@c {{{2Mensural time signatures -@node Mensural time signatures -@unnumberedsubsubsec Mensural time signatures - -@cindex mensuration sign -@cindex time signatures - -There is limited support for mensuration signs (which are similar to, but -not exactly the same as time signatures). The glyphs are hard-wired to -particular time fractions. In other words, to get a particular mensuration -sign with the @code{\time n/m} command, @code{n} and @code{m} have to be -chosen according to the following table - -@lilypond[quote,ragged-right] -\layout { - indent = 0.0 - \context { - \Staff - \remove Staff_symbol_engraver - \remove Clef_engraver - \remove Time_signature_engraver - } -} -{ - \set Score.timing = ##f - \set Score.barAlways = ##t - s_\markup { "\\time 4/4" }^\markup { " " \musicglyph -#"timesig.neomensural44" } - s - s_\markup { "\\time 2/2" }^\markup { " " \musicglyph -#"timesig.neomensural22" } - s - s_\markup { "\\time 6/4" }^\markup { " " \musicglyph -#"timesig.neomensural64" } - s - s_\markup { "\\time 6/8" }^\markup { " " \musicglyph -#"timesig.neomensural68" } - \break - s_\markup { "\\time 3/2" }^\markup { " " \musicglyph -#"timesig.neomensural32" } - s - s_\markup { "\\time 3/4" }^\markup { " " \musicglyph -#"timesig.neomensural34" } - s - s_\markup { "\\time 9/4" }^\markup { " " \musicglyph -#"timesig.neomensural94" } - s - s_\markup { "\\time 9/8" }^\markup { " " \musicglyph -#"timesig.neomensural98" } - \break - s_\markup { "\\time 4/8" }^\markup { " " \musicglyph -#"timesig.neomensural48" } - s - s_\markup { "\\time 2/4" }^\markup { " " \musicglyph -#"timesig.neomensural24" } -} -@end lilypond - -Use the @code{style} property of grob @rinternals{TimeSignature} -to select ancient time signatures. Supported styles are -@code{neomensural} and @code{mensural}. The above table uses the -@code{neomensural} style. The following examples show the -differences in style: - -@lilypond[ragged-right,fragment,relative=1,quote] -{ - \textLengthOn - - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter default } - - \override Staff.TimeSignature #'style = #'numbered - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter numbered } - - \override Staff.TimeSignature #'style = #'mensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter mensural } - - \override Staff.TimeSignature #'style = #'neomensural - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter neomensural } - \override Staff.TimeSignature #'style = #'single-digit - \time 2/2 - c1^\markup { \hspace #-2.0 \typewriter single-digit } -} -@end lilypond - - -@seealso -Notation Reference: @ref{Time signature}, gives a general introduction to -the use of time signatures. - - -@knownissues - -Ratios of note durations do not change with the time signature. For -example, the ratio of 1 breve = 3 semibreves (@emph{tempus perfectum}) must -be made by hand, by setting - -@example -breveTP = #(ly:make-duration -1 0 3 2) -@dots{} -@{ c\breveTP f1 @} -@end example - -@noindent -This sets @code{breveTP} to 3/2 times 2 = 3 times a whole note. - -The @code{mensural68alt} and @code{neomensural68alt} symbols -(alternate symbols for 6/8) are not addressable with @code{\time}. -Use @code{\markup @{\musicglyph #"timesig.mensural68alt" @}} instead. - - -@c {{{2Mensural note heads -@node Mensural note heads -@unnumberedsubsubsec Mensural note heads - -@cindex note heads, ancient - -For ancient notation, a note head style other than the @code{default} style -may be chosen. This is accomplished by setting the @code{style} property of -the @rinternals{NoteHead} object to @code{baroque}, @code{neomensural}, -@code{mensural} or @code{petrucci}. - -The @code{baroque} style differs from the @code{default} style by: - -@itemize -@item Providing a @code{maxima} notehead, and -@item Using a square shape for @code{\breve} note heads. -@end itemize - -The @code{neomensural}, @code{mensural}, and @code{petrucci} styles differ from -the @code{baroque} style by: - -@itemize -@item Using rhomboidal heads for semibreves and all smaller durations, and -@item Centering the stems on the note heads. -@end itemize - - -The following example demonstrates the @code{petrucci} style: - -@c Renaissance music doesn't use bar lines ... but they do help to -@c separate the notes for easier identification. - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\autoBeamOff -\override NoteHead #'style = #'petrucci -a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a' - -@end lilypond - - -@seealso -@ref{Note head styles} gives an overview of all available note head styles. - - -@c {{{2Mensural flags -@node Mensural flags -@unnumberedsubsubsec Mensural flags - -@cindex flags - -Use the @code{flag-style} property of grob @rinternals{Stem} to -select ancient flags. Besides the @code{default} flag style, -only the @code{mensural} style is supported. - -@lilypond[quote,fragment,ragged-right,verbatim] -\override Stem #'flag-style = #'mensural -\override Stem #'thickness = #1.0 -\override NoteHead #'style = #'mensural -\autoBeamOff -c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8 -c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32 -@end lilypond - -Note that the innermost flare of each mensural flag always is -vertically aligned with a staff line. - -There is no particular flag style for neo-mensural or Petrucci notation. -@c Hence, -@c when typesetting the incipit of a transcribed piece of mensural -@c music, the default flag style should be used. -There are no flags in Gregorian chant notation. - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -The attachment of ancient flags to stems is slightly off. -@c due to a change in early 2.3.x. - -Vertically aligning each flag with a staff line assumes that stems -always end either exactly on or exactly in the middle between two -staff lines. This may not always be true when using advanced layout -features of classical notation (which however are typically out of -scope for mensural notation). - -@c {{{2Mensural rests -@node Mensural rests -@unnumberedsubsubsec Mensural rests - -@cindex rests, ancient - -Use the @code{style} property of grob @rinternals{Rest} to select -ancient rests. Supported styles are @code{classical}, -@code{neomensural}, and @code{mensural}. @code{classical} differs -from the @code{default} style only in that the quarter rest looks -like a horizontally mirrored 8th rest. The @code{mensural} and -the @code{neomensural} styles mimic the appearance of rests in -manuscripts and prints up to the 16th century. - -The following example demonstrates the @code{mensural} and -@code{neomensural} styles: - -@lilypond[quote,fragment,ragged-right,verbatim] -\set Score.skipBars = ##t -\override Rest #'style = #'classical -r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break -\override Rest #'style = #'mensural -r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break -\override Rest #'style = #'neomensural -r\longa^"neomensural" r\breve r1 r2 r4 r8 r16 -@end lilypond - -There are no 32th and 64th rests specifically for the mensural or -neo-mensural style. Instead, the rests from the default style will be -taken. - -See @rlsr{Ancient notation} for a chart of all rests. - -@seealso -Notation Reference: @ref{Rests}, gives a general introduction into the use of -rests. - - -@c {{{2Mensural accidentals and key signatures -@node Mensural accidentals and key signatures -@unnumberedsubsubsec Mensural accidentals and key signatures - -@cindex accidentals -@cindex key signature - -The @code{mensural} style provides a sharp and a flat sign -different from the default style. If called for, the natural sign -will be taken from the @code{vaticana} style. - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "mensural" - \line { " " \musicglyph #"accidentals.mensural-1" - " " \musicglyph #"accidentals.mensural1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -The style for accidentals and key signatures is controlled by the -@code{glyph-name-alist} property of the grobs @rinternals{Accidental} and -@rinternals{KeySignature}, respectively; e.g.: - -@code{\override Staff.Accidental #'glyph-name-alist = -#alteration-mensural-glyph-name-alist} - - -@seealso -Notation Reference: @ref{Pitches}, @ref{Accidentals}, and -@ref{Automatic accidentals} give a general introduction of the use of -accidentals. @ref{Key signature} gives a general introduction of -the use of key signatures. - -Internals Reference: @rinternals{KeySignature}. - - -@c {{{2 Annotational accidentals (musica ficta) -@node Annotational accidentals (musica ficta) -@unnumberedsubsubsec Annotational accidentals (@emph{musica ficta}) - -In European music from before about 1600, singers were expected to -chromatically alter notes at their own initiative according to -certain rules. This is called @notation{musica ficta}. In modern -transcriptions, these accidentals are usually printed over the -note. - -@cindex Accidental, musica ficta -@cindex Musica ficta - -Support for such suggested accidentals is included, and can be -switched on by setting @code{suggestAccidentals} to true. - -@funindex suggestAccidentals - -@lilypond[verbatim,fragment,relative=1] -fis gis -\set suggestAccidentals = ##t -ais bis -@end lilypond - -This will treat @emph{every} subsequent accidental as @emph{musica -ficta} until it is unset with @code{\set suggestAccidentals = -##f}. A more practical way is to use @code{\once \set -suggestAccidentals = ##t}, which can even be defined as a -convenient shorthand: - -@lilypond[quote,verbatim] -ficta = { \once \set suggestAccidentals = ##t } -\score { \relative c'' - \new MensuralVoice { - \once \set suggestAccidentals = ##t - bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1 - } -} -@end lilypond - - -@seealso -Internals Reference: @rinternals{Accidental_engraver} engraver and -the @rinternals{AccidentalSuggestion} object. - - -@c {{{2White mensural ligatures -@node White mensural ligatures -@unnumberedsubsubsec White mensural ligatures - -@cindex Mensural ligatures -@cindex White mensural ligatures - -There is limited support for white mensural ligatures. - -To engrave white mensural ligatures, in the layout block, replace -the @rinternals{Ligature_bracket_engraver} with the -@rinternals{Mensural_ligature_engraver} in the @rinternals{Voice} -context: - -@example -\layout @{ - \context @{ - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - @} -@} -@end example - -There is no additional input language to describe the shape of a -white mensural ligature. The shape is rather determined solely from -the pitch and duration of the enclosed notes. While this approach may -take a new user a while to get accustomed to, it has the great advantage -that the full musical information of the ligature is known internally. -This is not only required for correct MIDI output, but also allows for -automatic transcription of the ligatures. - -For example, - -@c @example -@c \set Score.timing = ##f -@c \set Score.defaultBarType = "empty" -@c \override NoteHead #'style = #'neomensural -@c \override Staff.TimeSignature #'style = #'neomensural -@c \clef "petrucci-g" -@c \[ c'\maxima g \] -@c \[ d\longa c\breve f e d \] -@c \[ c'\maxima d'\longa \] -@c \[ e'1 a g\breve \] -@c @end example -@lilypond[quote,ragged-right,verbatim] -\score { - \transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] - } - \layout { - \context { - \Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - } -} -@end lilypond - -Without replacing @rinternals{Ligature_bracket_engraver} with -@rinternals{Mensural_ligature_engraver}, the same music transcribes -to the following - -@lilypond[quote,ragged-right] -\transpose c c' { - \set Score.timing = ##f - \set Score.defaultBarType = "empty" - \override NoteHead #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \clef "petrucci-g" - \[ c'\maxima g \] - \[ d\longa c\breve f e d \] - \[ c'\maxima d'\longa \] - \[ e'1 a g\breve \] -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -Horizontal spacing of ligatures is poor. - - -@c {{{1 Typesetting Gregorian chant -@node Typesetting Gregorian chant -@subsection Typesetting Gregorian chant - -@menu -* Gregorian chant contexts:: -* Gregorian clefs:: -* Gregorian accidentals and key signatures:: -* Divisiones:: -* Gregorian articulation signs:: -* Augmentum dots (@emph{morae}):: -* Gregorian square neume ligatures:: -@end menu - -When typesetting a piece in Gregorian chant notation, the -@rinternals{Vaticana_ligature_engraver} automatically selects the -proper note heads, so there is no need to explicitly set the note -head style. Still, the note head style can be set, e.g., to -@code{vaticana_punctum} to produce punctum neumes. Similarly, the -@rinternals{Mensural_ligature_engraver} automatically assembles -mensural ligatures. See @ref{Ligatures}, for how ligature -engravers work. - - -@c {{{2Gregorian chant contexts -@node Gregorian chant contexts -@unnumberedsubsubsec Gregorian chant contexts - -@cindex VaticanaVoiceContext -@cindex VaticanaStaffContext - -The predefined @code{VaticanaVoiceContext} and -@code{VaticanaStaffContext} can be used to engrave a piece of -Gregorian chant in the style of the Editio Vaticana. These contexts -initialize all relevant context properties and grob properties to -proper values, so you can immediately go ahead entering the chant, as -the following excerpt demonstrates: - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - << - \new VaticanaVoice = "cantus" { - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] - f \divisioMinima - \[ f\melisma \pes a c' c' \pes d'\melismaEnd \] - c' \divisioMinima \break - \[ c'\melisma c' \flexa a \] - \[ a \flexa \deminutum g\melismaEnd \] f \divisioMinima - } - \new Lyrics \lyricsto "cantus" { - San- ctus, San- ctus, San- ctus - } - >> -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@c {{{2 Gregorian clefs -@node Gregorian clefs -@unnumberedsubsubsec Gregorian clefs - -@cindex clefs - -The following table shows all Gregorian clefs that are supported via -the @code{\clef} command. Some of the clefs use the same glyph, -but differ only with respect to the line they are printed on. In -such cases, a trailing number in the name is used to enumerate -these clefs, numbered from the lowest to the highest line. Still, -you can manually force a clef glyph to be typeset on an arbitrary -line, as described in @ref{Clef}. The note printed to the right -side of each clef in the example column denotes the @code{c'} with -respect to that clef. - -@multitable @columnfractions .4 .4 .2 -@item -@b{Description} -@tab -@b{Supported Clefs} -@tab -@b{Example} - -@item -Editio Vaticana style do clef -@tab -@code{vaticana-do1}, @code{vaticana-do2},@* -@code{vaticana-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-do2" - c -@end lilypond - -@item -Editio Vaticana style fa clef -@tab -@code{vaticana-fa1}, @code{vaticana-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'vaticana.punctum - \clef "vaticana-fa2" - c -@end lilypond - -@item -Editio Medicaea style do clef -@tab -@code{medicaea-do1}, @code{medicaea-do2},@* -@code{medicaea-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-do2" - c -@end lilypond - -@item -Editio Medicaea style fa clef -@tab -@code{medicaea-fa1}, @code{medicaea-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'medicaea.punctum - \clef "medicaea-fa2" - c -@end lilypond - -@item -hufnagel style do clef -@tab -@code{hufnagel-do1}, @code{hufnagel-do2},@* -@code{hufnagel-do3} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do2" - c -@end lilypond - -@item -hufnagel style fa clef -@tab -@code{hufnagel-fa1}, @code{hufnagel-fa2} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'line-count = #4 - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-fa2" - c -@end lilypond - -@item -hufnagel style combined do/fa clef -@tab -@code{hufnagel-do-fa} -@tab -@lilypond[fragment,relative=1,notime] - \override Staff.StaffSymbol #'color = #red - \override Staff.LedgerLineSpanner #'color = #red - \override Voice.Stem #'transparent = ##t - \override NoteHead #'style = #'hufnagel.punctum - \clef "hufnagel-do-fa" - c -@end lilypond -@end multitable - - -@seealso -Notation Reference: see @ref{Clef}. - - -@c {{{2 Gregorian accidentals and key signatures -@node Gregorian accidentals and key signatures -@unnumberedsubsubsec Gregorian accidentals and key signatures - -@cindex accidentals -@cindex key signature - -Accidentals for the three different Gregorian styles are available: - -@lilypond[quote,ragged-right,staffsize=26] -\score { -{ - \textLengthOn - s^\markup { - \column { - "vaticana" - \line { " " \musicglyph #"accidentals.vaticana-1" - " " \musicglyph #"accidentals.vaticana0" } - } - \column { - "medicaea" - \line { " " \musicglyph #"accidentals.medicaea-1" } - } - \column { - "hufnagel" - \line { " " \musicglyph #"accidentals.hufnagel-1" } - } - } -} -\layout { - interscoreline = 1 - \context { \Score \remove "Bar_number_engraver" } - \context { \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - } -} -@end lilypond - -As shown, not all accidentals are supported by each style. When -trying to access an unsupported accidental, LilyPond will switch to a -different style. - -@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] -@c {ancient-accidentals.ly} - -The style for accidentals and key signatures is controlled by the -@code{glyph-name-alist} property of the grobs @rinternals{Accidental} and -@rinternals{KeySignature}, respectively; e.g.: - -@code{\override Staff.Accidental #'glyph-name-alist = -#alteration-mensural-glyph-name-alist} - - -@seealso -Notation Reference: @ref{Pitches}, @ref{Accidentals}, and -@ref{Automatic accidentals} give a general introduction of the use of -accidentals. @ref{Key signature} gives a general introduction of -the use of key signatures. - -Internals Reference: @rinternals{KeySignature}. - - -@c {{{2Divisiones -@node Divisiones -@unnumberedsubsubsec Divisiones - -@cindex divisio -@cindex divisiones -@cindex finalis - -There are no rests in Gregorian chant notation; instead, it uses -@ref{Divisiones}. - -A @emph{divisio} (plural: @emph{divisiones}; Latin word for -@q{division}) is a staff context symbol that is used to indicate -the phrase and section structure of Gregorian music. The musical meaning of -@emph{divisio minima}, @emph{divisio maior}, and @emph{divisio maxima} -can be characterized as short, medium, and long pause, somewhat like -the breathmarks from @ref{Breath marks}. The @emph{finalis} sign not -only marks the end of a chant, but is also frequently used within a -single antiphonal/responsorial chant to mark the end of each section. - -To use divisiones, include the file @file{gregorian@/.ly}. It -contains definitions that you can apply by just inserting -@code{\divisioMinima}, @code{\divisioMaior}, @code{\divisioMaxima}, -and @code{\finalis} at proper places in the input. Some editions use -@emph{virgula} or @emph{caesura} instead of divisio minima. -Therefore, @file{gregorian@/.ly} also defines @code{\virgula} and -@code{\caesura} - -@lilypondfile[quote,ragged-right]{divisiones.ly} - - -@predefined -@funindex \virgula -@code{\virgula}, -@funindex \caesura -@code{\caesura}, -@funindex \divisioMinima -@code{\divisioMinima}, -@funindex \divisioMaior -@code{\divisioMaior}, -@funindex \divisioMaxima -@code{\divisioMaxima}, -@funindex \finalis -@code{\finalis}. -@endpredefined - - -@c {{{2Gregorian articulations -@node Gregorian articulation signs -@unnumberedsubsubsec Gregorian articulation signs - -@cindex articulations - -In addition to the standard articulation signs described in -section @ref{Articulations and ornamentations}, articulation signs -specifically designed for use with notation in @emph{Editio -Vaticana} style are provided. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \override TextScript #'font-family = #'typewriter - \override TextScript #'font-shape = #'upright - \override Script #'padding = #-0.1 - a\ictus_"ictus " \break - a\circulus_"circulus " \break - a\semicirculus_"semicirculus " \break - a\accentus_"accentus " \break - \[ a_"episema" \episemInitium \pes b \flexa a b \episemFinis \flexa a \] - } -} -@end lilypond - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -Some articulations are vertically placed too closely to the -corresponding note heads. - -The episema line is not displayed in many cases. If it is displayed, -the right end of the episema line is often too far to the right. - - -@c {{{2Augmentum dots (@emph{morae}) -@node Augmentum dots (@emph{morae}) -@unnumberedsubsubsec Augmentum dots (@emph{morae}) - -Augmentum dots, also called @emph{morae}, are added with the music -function @code{\augmentum}. Note that @code{\augmentum} is -implemented as a unary music function rather than as head prefix. It -applies to the immediately following music expression only. That is, -@code{\augmentum \virga c} will have no visible effect. Instead, say -@code{\virga \augmentum c} or @code{\augmentum @{\virga c@}}. Also -note that you can say @code{\augmentum @{a g@}} as a shortcut for -@code{\augmentum a \augmentum g}. - -@lilypond[quote,ragged-right,verbatim] -\include "gregorian.ly" -\score { - \new VaticanaVoice { - \[ \augmentum a \flexa \augmentum g \] - \augmentum g - } -} -@end lilypond - - -@seealso -Notation Reference: @ref{Breath marks}. - -Internals Reference: @rinternals{BreathingSign}. - -Examples: @rlsr{Ancient notation}. - - -@c {{{2Gregorian square neumes ligatures -@node Gregorian square neume ligatures -@unnumberedsubsubsec Gregorian square neume ligatures - -@cindex Square neumes ligatures -@cindex Gregorian square neumes ligatures - -There is limited support for Gregorian square neumes notation -(following the style of the Editio Vaticana). Core ligatures can -already be typeset, but essential issues for serious typesetting are -still lacking, such as (among others) horizontal alignment of multiple -ligatures, lyrics alignment, and proper handling of accidentals. - -The support for Gregorian neumes is enabled by @code{\include}ing -"gregorian.ly" at the beginning of the file. This makes available -a number of extra commands to produce the neume symbols used in -plainchant notation. - - - -Note heads can be @emph{modified} and/or @emph{joined}. - -@itemize -@item The shape of -the note head can be modified by @emph{prefixing} the note name -with any of the following commands: -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. - -@item Ligatures, properly speaking (i.e. notes joined together), are -produced by placing one of the joining commands @code{\pes} or -@code{\flexa}, for upwards and downwards movement, respectively, -@emph{between} the notes to be joined. -@end itemize - -A note name without any qualifiers will produce a @emph{punctum}. -All other neumes, including the single-note neumes with a -different shape such as the @emph{virga}, are in principle -considered as ligatures and should therefore be placed -between @code{\[...\]}. -@c Regarding the @emph{punctum}, @code{b} and @code{\[ b \]} are -@c equivalent. - -@noindent -Single-note neumes: - -@itemize -@item The @emph{punctum} is the basic note shape (in the -@emph{Vaticana} style: a square with some curvation for -typographical finesse). In addition to the regular -@emph{punctum}, there is also the oblique @emph{punctum -inclinatum}, produced with the prefix @code{\inclinatum}. The -regular @emph{punctum} can be modified with @code{\cavum}, which -produces a hollow note, and @code{\linea}, which draws vertical -lines on either side of the note. - -@item The @emph{virga} has a descending stem on the right side. It is -produced by the modifier @code{\virga}. -@end itemize - -@noindent -Ligatures - -Unlike most other neumes notation systems, the typographical -appearance of ligatures is not directly dictated by the input -commands, but follows certain conventions dependent on musical -meaning. For example, a three-note ligature with the musical shape -low-high-low, such as @code{\[ a \pes b \flexa g \]}, produces a -Torculus consisting of three Punctum heads, while the shape -high-low-high, such as @code{\[ a \flexa g \pes b \]}, produces a -Porrectus with a curved flexa shape and only a single Punctum -head. There is no command to explicitly typeset the curved flexa -shape; the decision of when to typeset a curved flexa shape is -based on the musical input. The idea of this approach is to -separate the musical aspects of the input from the notation style -of the output. This way, the same input can be reused to typeset -the same music in a different style of Gregorian chant notation. - -@noindent -Liquescent neumes - -Another main category of notes in Gregorian chant is the so-called -liquescent neumes. They are used under certain circumstances at -the end of a syllable which ends in a @q{liquescent} letter, i.e. -the sounding consonants that can hold a tone (the nasals, l, r, v, -j, and their diphtong equivalents). Thus, the liquescent neumes -are never used alone (although some of them can be produced), and -they always fall at the end of a ligature. - -Liquescent neumes are represented graphically in two different, -more or less interchangeable ways: with a smaller note or by -@q{twisting} the main note upwards or downwards. The first is -produced by making a regular @code{pes} or @code{flexa} and -modifying the shape of the second note: @code{\[ a \pes \deminutum -b \] }, the second by modifying the shape of a single-note neume -with @code{\auctum} and one of the direction markers -@code{\descendens} or @code{\ascendens}, e.g. @code{ \[ \auctum -\descendens a \] }. - -@noindent -Special signs - -A third category of signs is made up of a small number of signs -with a special meaning (which, incidentally, in most cases is only -vaguely known): the @emph{quilisma}, the @emph{oriscus}, and the -@emph{strophicus}. These are all produced by prefixing a note name -with the corresponding modifier, @code{\quilisma}, -@code{\oriscus}, or @code{\stropha}. - -Virtually, within the ligature delimiters @code{\[} and @code{\]}, -any number of heads may be accumulated to form a single ligature, -and head prefixes like @code{\pes}, @code{\flexa}, @code{\virga}, -@code{\inclinatum}, etc. may be mixed in as desired. The use of -the set of rules that underlies the construction of the ligatures -in the above table is accordingly extrapolated. This way, -infinitely many different ligatures can be created. - -Note that the use of these signs in the music itself follows -certain rules, which are not checked by Lilypond. E.g., the -@emph{quilisma} is always the middle note of an ascending -ligature, and usually falls on a half-tone step, but it is -perfectly possible, although incorrect, to make a single-note -quilisma. - -In addition to the note signs, gregorian.ly also defines the -commands @code{\versus}, @code{\responsum}, @code{\ij}, -@code{\iij}, @code{\IJ}, and @code{\IIJ}, that will produce the -corresponding characters, e.g. for use in lyrics, as section -markers, etc. These commands use special unicode characters and -will only work if a font is used which supports them. - - -@c neume table - -The following table shows a limited, but still representative pool -of Gregorian ligatures, together with the code fragments that -produce the ligatures. The table is based on the extended neumes -table of the 2nd volume of the Antiphonale Romanum (@emph{Liber -Hymnarius}), published 1983 by the monks of Solesmes. The first -column gives the name of the ligature, with the main form in -boldface and the liquescent forms in italics. The third column -shows the code fragment that produces this ligature, using -@code{g}, @code{a}, and @code{b} as example pitches. - - -@b{Single-note neums} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Basic} and @emph{Liquescent} forms -@tab -@b{Output} -@tab -@b{Lilypond@* -code} - -@c TODO: \layout block is identical in all of the below examples. -@c Therefore, it should somehow be included rather than duplicated all -@c the time. --jr - -@c why not make variables in ly/engraver-init.ly? --hwn - -@c Because it's just used to typeset plain notes without -@c a staff for demonstration purposes rather than something -@c special of Gregorian chant notation. --jr - - -@item -@b{Punctum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \]} - -@item -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ \cavum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \cavum b \]} - -@item -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum - \[ \linea b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \linea b \]} - -@item -@emph{Punctum Auctum Ascendens} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Ascendens - \[ \auctum \ascendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \auctum \ascendens b \]} - -@item -@emph{Punctum Auctum Descendens} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Auctum Descendens - \[ \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \auctum \descendens b \]} - -@item -@b{Punctum inclinatum} -@tab -@lilypond[staffsize=26,line-width=1.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum - \[ \inclinatum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum b \]} - -@item -@emph{Punctum Inclinatum Auctum} -@tab -@lilypond[staffsize=26,line-width=2.5\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Auctum - \[ \inclinatum \auctum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum \auctum b \]} - -@item -@emph{Punctum Inclinatum Parvum} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Punctum Inclinatum Parvum - \[ \inclinatum \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \inclinatum \deminutum b \]} - -@item -@b{Virga} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Virga - \[ \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab - -@end multitable - -@noindent -@b{Two-note ligatures} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Clivis vel Flexa} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis vel Flexa - \[ b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa g \]} - - -@item -@emph{Clivis Aucta Descendens} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Descendens - \[ b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \auctum \descendens g \]} - -@item -@emph{Clivis Aucta Ascendens} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Clivis Aucta Ascendens - \[ b \flexa \auctum \ascendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \auctum \ascendens g \]} - -@item -@emph{Cephalicus} -@tab -@lilypond[staffsize=26,line-width=2.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Cephalicus - \[ b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ b \flexa \deminutum g \]} - -@item -@b{Podatus/Pes} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Podatus vel Pes - \[ g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes b \]} - -@item -@emph{Pes Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens - \[ g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \auctum \descendens b \]} - -@item -@emph{Pes Auctus Ascendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Ascendens - \[ g \pes \auctum \ascendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \auctum \ascendens b \]} - -@item -@emph{Epiphonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Epiphonus - \[ g \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \deminutum b \]} - -@item -@emph{Pes Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Initio Debilis - \[ \deminutum g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum g \pes b \]} - -@item -@emph{Pes Auctus Descendens Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Auctus Descendens Initio Debilis - \[ \deminutum g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum g \pes \auctum \descendens b \]} - -@end multitable - -@noindent -@b{Multi-note ligatures} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Torculus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus - \[ a \pes b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa g \]} - -@item -@emph{Torculus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens - \[ a \pes b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa \auctum \descendens g \]} - -@item -@emph{Torculus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus - \[ a \pes b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \pes b \flexa \deminutum g \]} - -@item -@emph{Torculus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Initio Debilis - \[ \deminutum a \pes b \flexa g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa g \]} - -@item -@emph{Torculus Auctus Descendens Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Auctus Descendens Initio Debilis - \[ \deminutum a \pes b \flexa \auctum \descendens g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa \auctum \descendens g \]} - -@item -@emph{Torculus Deminutus Initio Debilis} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Torculus Deminutus Initio Debilis - \[ \deminutum a \pes b \flexa \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \deminutum a \pes b \flexa \deminutum g \]} - -@item -@b{Porrectus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus - \[ a \flexa g \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes b \]} - -@item -@emph{Porrectus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Auctus Descendens - \[ a \flexa g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes \auctum \descendens b \]} - -@item -@emph{Porrectus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Porrectus Deminutus - \[ a \flexa g \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ a \flexa g \pes \deminutum b \]} - -@item -@b{Climacus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus - \[ \virga b \inclinatum a \inclinatum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum g \]} - -@item -@emph{Climacus Auctus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Auctus - \[ \virga b \inclinatum a \inclinatum \auctum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum \auctum g \]} - -@item -@emph{Climacus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Climacus Deminutus - \[ \virga b \inclinatum a \inclinatum \deminutum g \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \virga b \inclinatum a \inclinatum \deminutum g \]} - -@item -@b{Scandicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus - \[ g \pes a \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \virga b \]} - -@item -@emph{Scandicus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Auctus Descendens - \[ g \pes a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \pes \auctum \descendens b \]} - -@item -@emph{Scandicus Deminutus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Scandicus Deminutus - \[ g \pes a \pes \deminutum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes a \pes \deminutum b \]} - -@end multitable - -@noindent -@b{Special Signs} - -@multitable @columnfractions .4 .2 .4 - -@item -@b{Quilisma} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma - \[ g \pes \quilisma a \pes b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \pes \quilisma a \pes b \]} - -@item -@emph{Quilisma Pes Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Quilisma Pes Auctus Descendens - \[ g \quilisma a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \quilisma g \pes \auctum \descendens b \]} - -@item -@b{Oriscus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Oriscus - \[ \oriscus b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus b \]} - -@item -@emph{Pes Quassus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus - \[ \oriscus g \pes \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus g \pes \virga b \]} - -@item -@emph{Pes Quassus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Pes Quassus Auctus Descendens - \[ \oriscus g \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \oriscus g \pes \auctum \descendens b \]} - -@item -@b{Salicus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus - \[ g \oriscus a \pes \virga b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \oriscus a \pes \virga b \]} - -@item -@emph{Salicus Auctus Descendens} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Salicus Auctus Descendens - \[ g \oriscus a \pes \auctum \descendens b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ g \oriscus a \pes \auctum \descendens b \]} - -@item -@b{(Apo)stropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha - \[ \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \]} - -@item -@emph{Stropha Aucta} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Stropha Aucta - \[ \stropha \auctum b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha \auctum b \]} - -@item -@b{Bistropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Bistropha - \[ \stropha b \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \]} - -@item -@b{Tristropha} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Tristropha - \[ \stropha b \stropha b \stropha b \] - } -\layout { \neumeDemoLayout }} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \stropha b \]} - -@item -@emph{Trigonus} -@tab -@lilypond[staffsize=26,line-width=1.0\cm] -\include "gregorian.ly" -\score { - \transpose c c' { - % Trigonus - \[ \stropha b \stropha b \stropha a \] - } - \layout { \neumeDemoLayout } -} -@end lilypond -@tab -@code{\[ \stropha b \stropha b \stropha a \]} - -@end multitable - - -@predefined -The following head prefixes are supported: -@funindex \virga -@code{\virga}, -@funindex \stropha -@code{\stropha}, -@funindex \inclinatum -@code{\inclinatum}, -@funindex \auctum -@code{\auctum}, -@funindex \descendens -@code{\descendens}, -@funindex \ascendens -@code{\ascendens}, -@funindex \oriscus -@code{\oriscus}, -@funindex \quilisma -@code{\quilisma}, -@funindex \deminutum -@code{\deminutum}, -@funindex \cavum -@code{\cavum}, -@funindex \linea -@code{\linea}. -@endpredefined - -Head prefixes can be accumulated, though restrictions apply. For -example, either @code{\descendens} or @code{\ascendens} can be applied -to a head, but not both to the same head. - -@funindex \pes -@funindex \flexa -Two adjacent heads can be tied together with the @code{\pes} and -@code{\flexa} infix commands for a rising and falling line of melody, -respectively. - -@funindex \augmentum -Use the unary music function @code{\augmentum} to add augmentum dots. - - -@seealso -TODO: nothing here yet ... - - -@knownissues - -When an @code{\augmentum} dot appears at the end of the last staff -within a ligature, it is sometimes vertically placed wrong. As a -workaround, add an additional skip note (e.g. @code{s8}) as last note -of the staff. - -@code{\augmentum} should be implemented as a head prefix rather than a -unary music function, such that @code{\augmentum} can be intermixed -with head prefixes in arbitrary order. - - - -@c Working with ancient music: scenarios and solutions:: {{{1 -@node Working with ancient music---scenarios and solutions -@subsection Working with ancient music---scenarios and solutions - -@menu -* Incipits:: -* Mensurstriche layout:: -* Transcribing Gregorian chant:: -* Ancient and modern from one source:: -* Editorial markings:: -@end menu - -Working with ancient music frequently involves particular tasks -which differ considerably from the modern notation for which -Lilypond is designed. In the rest of this section, a number of -typical scenarios are outlined, with suggestions of solutions. -These involve: - -@itemize -@item how to make incipits (i.e. prefatory material to indicate -what the original has looked like) to modern transcriptions of -mensural music; -@item how to achieve the @emph{Mensurstriche} layout frequently -used for modern transcriptions of polyphonic music; -@item how to transcribe Gregorian chant in modern notation; -@item how to generate both ancient and modern notation from the -same source. -@end itemize - -@c {{{2Incipits -@node Incipits -@unnumberedsubsubsec Incipits - -@c TODO Add text -@c clefs, mensuration signs etc from lsr and -user -@c use snippet Transcription-of-ancient-music-with-incipit -TBC - - -@seealso -@c ... and reference to other sections ... - - -@c {{{2Mensurstriche layout -@node Mensurstriche layout -@unnumberedsubsubsec Mensurstriche layout - -@emph{Mensurstriche} (@q{mensuration lines}) is the accepted term -for bar lines that are drawn between the staves of a system but -not through the staves themselves. It is a common way to preserve -the rhythmic appearance of the original, i.e. not having to break -syncopated notes at bar lines, while still providing the -orientation aids that bar lines give. - - -@lilypondfile[verbatim,lilyquote,texidoc] -{mensurstriche-layout-bar-lines-between-the-staves.ly} - -@c This simple setup will take care of the -@c TODO Add text about lyrics to the lowest line, to be placed -@c outside the StaffGroup. -@c from lsr and -user -@c TBC - - -@seealso -@c ... and reference to other sections ... - - -@c {{{2Transcribing Gregorian chant -@node Transcribing Gregorian chant -@unnumberedsubsubsec Transcribing Gregorian chant - -Gregorian chant can be transcribed into modern notation with a -number of simple tweaks. - -@b{Stems}. Stems can be left out altogether by @code{\remove}-ing -the @code{Stem_engraver} from the Voice context: - -@example -\layout @{ - ... - \context @{ - \Voice - \remove "Stem_engraver" - @} -@} -@end example - -However, in some transcription styles, stems are used -occasionally, for example to indicate the transition from a -single-tone recitative to a fixed melodic gesture. In these cases, -one can use either @code{\override Stem #'transparent = ##t} or -@code{\override Stem #'length = #0} instead, and restore the stem -when needed with the corresponding @code{\once \override Stem -#'transparent = ##f} (see example below). - -@b{Timing.} For unmetered chant, there are several alternatives. - -The Time_signature_engraver can be removed from the Staff context -without any negative side effects. The alternative, to make it -transparent, will leave an empty space in the score, since the -invisible signature will still take up space. - -In many cases, @code{\set Score.timing = ##f} will give good -results. Another alternative is to use \@code{\CadenzaOn} and -@code{\CadenzaOff}. - -To remove the barlines, the radical approach is to @code{\remove} -the Bar_engraver from the Staff context. Again, one may want to -use @code{\override BarLine #'transparent = ##t} instead, if an -occasional barline is wanted. - -A common type of transcription is recitativic chant where the -repeated notes are indicated with a single breve. The text to -the recitation tone can be dealt with in two different ways: -either set as a single, left-aligned syllable: - -@lilypond[verbatim,ragged-right] -\include "gregorian.ly" -chant = \relative c' { - \clef "G_8" - c\breve c4 b4 a c2 c4 \divisioMaior - c\breve c4 c f, f \finalis -} - -verba = \lyricmode { - \once \override LyricText #'self-alignment-X = #-1 - "Noctem quietam et" fi -- nem per -- fec -- tum - \once \override LyricText #'self-alignment-X = #-1 - "concedat nobis Dominus" om -- ni -- po -- tens. -} -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics = "one" \lyricsto melody \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Bar_engraver" - \override Stem #'transparent = ##t - } - } -} -@end lilypond - -This works fine, as long as the text doesn't span a line break. If -that is the case, an alternative is to add hidden notes to the -score, here in combination with changing stem visibility: - - -@lilypond[verbatim,ragged-right] -\include "gregorian.ly" -chant = \relative c' { - \clef "G_8" - \set Score.timing = ##f - c\breve \override NoteHead #'transparent = ##t c c c c c - \revert NoteHead #'transparent - \override Stem #'transparent = ##f \stemUp c4 b4 a - \override Stem #'transparent = ##t c2 c4 \divisioMaior - c\breve \override NoteHead #'transparent = ##t c c c c c c c - \revert NoteHead #'transparent c4 c f, f \finalis -} - -verba = \lyricmode { - No -- ctem qui -- e -- tam et fi -- nem per -- fec -- tum - con -- ce -- dat no -- bis Do -- mi -- nus om -- ni -- po -- tens. -} - -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics \lyricsto "melody" \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \override BarLine #'transparent = ##t - \override Stem #'transparent = ##t - } - } -} -@end lilypond - -Another common situation is transcription of neumatic or -melismatic chants, i.e. chants with a varying number of notes -to each syllable. In this case, one would want to set the -syllable groups clearly apart, usually also the subdivisions of a -longer melisma. One way to achieve this is to use a fixed -@code{\time}, e.g. 1/4, and let each syllable or note group fill -one of these measures, with the help of tuplets or shorter -durations. If the barlines and all other rhythmical indications -are made transparent, and the space around the barlines is -increased, this will give a fairly good representation in modern -notation of the original. - -To avoid that syllables of different width (such as @qq{-ri} and -@qq{-rum}) spread the syllable note groups unevenly apart, the -@code{#'X-extent} property of the @code{LyricText} object may be -set to a fixed value. Another, more cumbersome way would be to -add the syllables as @code{\markup} elements. If further -adjustments are necessary, this can be easily done with -@code{s} @q{notes}. - -@lilypond[verbatim,quote] -spiritus = \relative c' { - \time 1/4 - \override Lyrics.LyricText #'X-extent = #'(0 . 3) - d4 \times 2/3 { f8 a g } g a a4 g f8 e - d4 f8 g g8 d f g a g f4 g8 a a4 s - \times 2/3 { g8 f d } e f g a g4 -} - -spirLyr = \lyricmode { - Spi -- ri -- _ _ tus _ Do -- mi -- ni _ re -- ple -- _ vit _ - or -- _ bem _ ter -- ra -- _ rum, al -- _ _ le -- _ lu - -- _ ia. -} -\score { - \new Staff << - \new Voice = "chant" \spiritus - \new Lyrics = "one" \lyricsto "chant" \spirLyr - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \override BarLine #'X-extent = #'(-1 . 1) - \override Stem #'transparent = ##t - \override Beam #'transparent = ##t - \override BarLine #'transparent = ##t - \override TupletNumber #'transparent = ##t - } - } -} -@end lilypond - -@c extract from 1.6.1.1 - -@seealso -@c ... and reference to other sections ... - -@c {{{2Ancient and modern from one source -@node Ancient and modern from one source -@unnumberedsubsubsec Ancient and modern from one source - -@c TODO Add text -@c Here among others the snippets about reducing note length -TBC - -@seealso -@c ... and reference to other sections ... - -@c {{{2Editorial markings -@node Editorial markings -@unnumberedsubsubsec Editorial markings - -@c {{{2Baroque rhythmic notation -@c @node Baroque rhythmic notation -@c @unnumberedsubsubsec Baroque rhythmic notation - -@c TODO Add text -@c try Till Rettig -@c Add example of white noteheads: -@c In the french baroque some composers used white noteheads in slow pieces, -@c mainly in 3/2-time. A quarter looks there like a eighth with a white -@c notehead. (Franz-Rudolf Kuhnen) - -@c TODO Add example of this: -@c I was referring to e.g. notated a8. a16, which should, if I -@c remember correctly, be interpreted more like a8.. a32 (in the french -@c style). The editor might want to show that rythmic figure above the -@c staff as an hint to performers. (Karl Hammer) - - -TBC - - -@seealso -@c ... and reference to other sections ... - diff --git a/Documentation/user/baer-flat-gray.png b/Documentation/user/baer-flat-gray.png deleted file mode 100644 index 08cd33838016594b0c7e133d5437ab753bac7394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45277 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 > > - list of contexts: my *danger unmaintainable* ->> > > alarm just went off. I'm - -I knew it would... And leaving out some of them is perfectly fine -with me. -I do think that a list like this, with the main contexts and a -brief -description of what they do (perhaps also with a note about what -default -behavior is associated with each of them, but this may be -unmanageable), -should be there, and then we could simply list the remaining ones -without -further explanation and with links to the IR. -@end ignore - -@c TODO Improve layout, order and consistency of wording -td - -@c TODO Add introduction which explains contexts in generality -td - -@c TODO Describe propagation of property values -td - -Contexts are arranged hierarchically: - -@menu -* Score - the master of all contexts:: -* Top-level contexts - staff containers:: -* Intermediate-level contexts - staves:: -* Bottom-level contexts - voices:: -@end menu - -@node Score - the master of all contexts -@unnumberedsubsubsec Score - the master of all contexts - -This is the top level notation context. No other context can -contain a Score context. By default the Score context handles -the administration of time signatures and makes sure that items -such as clefs, time signatures, and key-signatures are aligned -across staves. - -A Score context is instantiated implicitly when a -@code{\score @{@dots{}@}} or @code{\layout @{@dots{}@}} block is -processed, or explicitly when a @code{\new Score} command is -executed. - -@node Top-level contexts - staff containers -@unnumberedsubsubsec Top-level contexts - staff containers - -@strong{@emph{StaffGroup}} - -Groups staves while adding a bracket on the left side, grouping -the staves together. The bar lines of the contained staves are -connected vertically. @code{StaffGroup} only consists of a collection -of staves, with a bracket in front and spanning bar lines. - -@strong{@emph{ChoirStaff}} - -Identical to @code{StaffGroup} except that the bar lines of the -contained staves are not connected vertically. - -@strong{@emph{GrandStaff}} - -A group of staves, with a brace on the left side, grouping the -staves together. The bar lines of the contained staves are -connected vertically. - -@strong{@emph{PianoStaff}} - -Just like @code{GrandStaff}, but with support for instrument names -to the left of each system. - -@node Intermediate-level contexts - staves -@unnumberedsubsubsec Intermediate-level contexts - staves - -@strong{@emph{Staff}} - -Handles clefs, bar lines, keys, accidentals. It can contain -@code{Voice} contexts. - -@strong{@emph{RhythmicStaff}} - -Like @code{Staff} but for printing rhythms. Pitches are ignored; -the notes are printed on one line. - -@strong{@emph{TabStaff}} - -Context for generating tablature. By default lays the music -expression out as a guitar tablature, printed on six lines. - -@strong{@emph{DrumStaff}} - -Handles typesetting for percussion. Can contain @code{DrumVoice} - -@strong{@emph{VaticanaStaff}} - -Same as @code{Staff}, except that it is designed for typesetting -a piece in gregorian style. - -@strong{@emph{MensuralStaff}} - -Same as @code{Staff}, except that it is designed for typesetting -a piece in mensural style. - -@node Bottom-level contexts - voices -@unnumberedsubsubsec Bottom-level contexts - voices - -Voice-level contexts initialise certain properties and start -appropriate engravers. Being bottom-level contexts, they cannot -contain other contexts. - -@strong{@emph{Voice}} - -Corresponds to a voice on a staff. This context handles the -conversion of dynamic signs, stems, beams, super- and sub-scripts, -slurs, ties, and rests. You have to instantiate this explicitly -if you require multiple voices on the same staff. - -@strong{@emph{VaticanaVoice}} - -Same as @code{Voice}, except that it is designed for typesetting -a piece in gregorian style. - -@strong{@emph{MensuralVoice}} - -Same as @code{Voice}, with modifications for typesetting a piece in -mensural style. - -@strong{@emph{Lyrics}} - -Corresponds to a voice with lyrics. Handles the printing of a -single line of lyrics. - -@strong{@emph{DrumVoice}} - -The voice context used in a percussion staff. - -@strong{@emph{FiguredBass}} - -The context in which @code{BassFigure} objects are created from -input entered in @code{\figuremode} mode. - -@strong{@emph{TabVoice}} - -The voice context used within a @code{TabStaff} context. Usually -left to be created implicitly. - -@strong{@emph{ChordNames}} - -Typesets chord names. - -@ignore -TODO - -Then the following, which I don't know what to do with: - - * GregorianTranscriptionVoice - * GregorianTranscriptionStaff - - * FretBoards - Engraves fretboards from chords. Not easy... Not -documented. - There is now some documentation on FretBoards in the NR, under - instrument-specific notation -- cds. - - * NoteNames - - * CueVoice Not documented - * Global - Hard coded entry point for LilyPond. Cannot be tuned. - * Devnull - Silently discards all musical information given to this -context. - -@end ignore - -@node Creating contexts -@subsection Creating contexts - -@c TODO \new Score and \score -@c TODO more complete descriptions rather than learning style - -For scores with only one voice and one staff, contexts are -created automatically. For more complex scores, it is necessary to -create them by hand. There are three commands that do this. - -@itemize - -@item -The easiest command is @code{\new}, and it also the quickest to type. -It is prepended to a music expression, for example - -@funindex \new -@cindex new contexts -@cindex Context, creating - -@example -\new @var{type} @var{music expression} -@end example - -@noindent -where @var{type} is a context name (like @code{Staff} or -@code{Voice}). This command creates a new context, and starts -interpreting the @var{music expression} with that. - -A practical application of @code{\new} is a score with many -staves. Each part that should be on its own staff, is preceded with -@code{\new Staff}. - -@lilypond[quote,verbatim,relative=2,ragged-right,fragment] -<< - \new Staff { c4 c } - \new Staff { d4 d } ->> -@end lilypond - -The @code{\new} command may also give a name to the context, - -@example -\new @var{type} = @var{id} @var{music} -@end example -However, this user specified name is only used if there is no other -context already earlier with the same name. - - -@funindex \context - -@item -Like @code{\new}, the @code{\context} command also directs a music -expression to a context object, but gives the context an explicit name. The -syntax is - -@example -\context @var{type} = @var{id} @var{music} -@end example - -This form will search for an existing context of type @var{type} -called @var{id}. If that context does not exist yet, a new -context with the specified name is created. This is useful if -the context is referred to later on. For example, when -setting lyrics the melody is in a named context - -@example -\context Voice = "@b{tenor}" @var{music} -@end example - -@noindent -so the texts can be properly aligned to its notes, - -@example -\new Lyrics \lyricsto "@b{tenor}" @var{lyrics} -@end example - -@noindent - -Another possible use of named contexts is funneling two different -music expressions into one context. In the following example, -articulations and notes are entered separately, - -@example -music = @{ c4 c4 @} -arts = @{ s4-. s4-> @} -@end example - -They are combined by sending both to the same @code{Voice} context, - -@example -<< - \new Staff \context Voice = "A" \music - \context Voice = "A" \arts ->> -@end example -@lilypond[quote,ragged-right] -music = { c4 c4 } -arts = { s4-. s4-> } -\relative c'' << - \new Staff \context Voice = "A" \music - \context Voice = "A" \arts ->> -@end lilypond - -With this mechanism, it is possible to define an Urtext (original -edition), with the option to put several distinct articulations on the -same notes. - -@cindex creating contexts - -@item -The third command for creating contexts is -@example -\context @var{type} @var{music} -@end example - - -@noindent -This is similar to @code{\context} with @code{= @var{id}}, but matches -any context of type @var{type}, regardless of its given name. - -This variant is used with music expressions that can be interpreted at -several levels. For example, the @code{\applyOutput} command (see -@ref{Running a function on all layout objects}). Without an explicit -@code{\context}, it is usually applied to @code{Voice} - -@example -\applyOutput #'@var{context} #@var{function} % apply to Voice -@end example - -To have it interpreted at the @code{Score} or @code{Staff} level use -these forms - -@example -\applyOutput #'Score #@var{function} -\applyOutput #'Staff #@var{function} -@end example - -@end itemize - - -@node Modifying context plug-ins -@subsection Modifying context plug-ins - -@c TODO Should this be Modifying engravers or Modifying contexts? - -Notation contexts (like @code{Score} and @code{Staff}) not only -store properties, -they also contain plug-ins called @q{engravers} that create notation -elements. For example, the @code{Voice} context contains a -@code{Note_head_engraver} and the @code{Staff} context contains a -@code{Key_signature_engraver}. - -For a full a description of each plug-in, see -@ifhtml -@rinternals{Engravers and Performers}. -@end ifhtml -@ifnothtml -Internals Reference @expansion{} Translation @expansion{} Engravers. -@end ifnothtml -Every context described in -@ifhtml -@rinternals{Contexts} -@end ifhtml -@ifnothtml -Internals Reference @expansion{} Translation @expansion{} Context. -@end ifnothtml -lists the engravers used for that context. - - -It can be useful to shuffle around these plug-ins. This is done by -starting a new context with @code{\new} or @code{\context}, and -modifying it, - -@funindex \with - -@example -\new @var{context} \with @{ - \consists @dots{} - \consists @dots{} - \remove @dots{} - \remove @dots{} - @emph{etc.} -@} -@{ - @emph{..music..} -@} -@end example - -@noindent -where the @dots{} should be the name of an engraver. Here is a simple -example which removes @code{Time_signature_engraver} and -@code{Clef_engraver} from a @code{Staff} context, - -@lilypond[quote,relative=1,verbatim,fragment] -<< - \new Staff { - f2 g - } - \new Staff \with { - \remove "Time_signature_engraver" - \remove "Clef_engraver" - } { - f2 g2 - } ->> -@end lilypond - -In the second staff there are no time signature or clef symbols. This -is a rather crude method of making objects disappear since it will affect -the entire staff. This method also influences the spacing, which may or -may not be desirable. More sophisticated methods of blanking objects -are shown in @rlearning{Visibility and color of objects}. - -The next example shows a practical application. Bar lines and time -signatures are normally synchronized across the score. This is done -by the @code{Timing_translator} and @code{Default_bar_line_engraver}. -This plug-in keeps an administration of time signature, location -within the measure, etc. By moving these engraver from @code{Score} to -@code{Staff} context, we can have a score where each staff has its own -time signature. - -@cindex polymetric scores -@cindex Time signatures, multiple - -@lilypond[quote,relative=1,ragged-right,verbatim,fragment] -\new Score \with { - \remove "Timing_translator" - \remove "Default_bar_line_engraver" -} << - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 3/4 - c4 c c c c c - } - \new Staff \with { - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } { - \time 2/4 - c4 c c c c c - } ->> -@end lilypond - -@knownissues - -Usually the order in which the engravers are specified -does not matter, but in a few special cases the order -is important, for example where one engraver writes -a property and another reads it, or where one engraver -creates a grob and another must process it. The order in -which the engravers are specified is the order in which -they are called to carry out their processing. - -The following orderings are important: the -@code{Bar_engraver} must normally be first, and -the @code{New_fingering_engraver} must come before -the @code{Script_column_engraver}. There may be others -with ordering dependencies. - -@node Changing context default settings -@subsection Changing context default settings - -The context settings which are to be used by default in -@code{Score}, @code{Staff} and @code{Voice} contexts may be specified -in a @code{\layout} block, as illustrated in the following example. -The @code{\layout} block should be placed within the @code{\score} -block to which it is to apply, but outside any music. - -Note that the @code{\set} command itself and the context must be -omitted when the context default values are specified in this way: - -@lilypond[quote,verbatim] -\score { - \relative c'' { - a4^"Really small, thicker stems, no time signature" a a a - a a a a - } - \layout { - \context { - \Staff - fontSize = #-4 - \override Stem #'thickness = #4.0 - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -In this example, the @code{\Staff} command specifies that the -subsequent specifications are to be applied to all staves within -this score block. - -Modifications can be made to the @code{Score} context or all -@code{Voice} contexts in a similar way. - -@knownissues - -It is not possible to collect context changes in a variable and apply -them to a @code{\context} definition by referring to that variable. - -The @code{\RemoveEmptyStaffContext} will overwrite your current -@code{\Staff} settings. If you wish to change the defaults for a -staff which uses @code{\RemoveEmptyStaffContext}, you must do so -after calling @code{\RemoveEmptyStaffContext}, ie - -@example -\layout @{ - \context @{ - \RemoveEmptyStaffContext - - \override Stem #'thickness = #4.0 - @} -@} -@end example - -@c TODO: add \with in here. - - - -@node Defining new contexts -@subsection Defining new contexts - -Specific contexts, like @code{Staff} and @code{Voice}, are made of -simple building blocks. It is possible to create new types of -contexts with different combinations of engraver plug-ins. - -The next example shows how to build a different type of -@code{Voice} context from scratch. It will be similar to -@code{Voice}, but only prints centered slash note heads. It can be used -to indicate improvisation in jazz pieces, - -@lilypond[quote,ragged-right] -\layout { \context { - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Rhythmic_column_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -} -\context { \Staff - \accepts "ImproVoice" -}} - -\relative c'' { - a4 d8 bes8 \new ImproVoice { c4^"ad lib" c - c4 c^"undress" c_"while playing :)" c } - a1 -} -@end lilypond - - -These settings are defined within a @code{\context} block inside a -@code{\layout} block, - -@example -\layout @{ - \context @{ - @dots{} - @} -@} -@end example - -In the following discussion, the example input shown should go in place -of the @dots{} in the previous fragment. - -First it is necessary to define a name for the new context: - -@example -\name ImproVoice -@end example - -Since it is similar to the @code{Voice}, we want commands that work -on (existing) @code{Voice}s to remain working. This is achieved by -giving the new context an alias @code{Voice}, - -@example -\alias Voice -@end example - -The context will print notes and instructive texts, so we need to add -the engravers which provide this functionality, - -@example -\consists Note_heads_engraver -\consists Text_engraver -@end example - -but we only need this on the center line, - -@example -\consists Pitch_squash_engraver -squashedPosition = #0 -@end example - -The @rinternals{Pitch_squash_engraver} modifies note heads (created -by @rinternals{Note_heads_engraver}) and sets their vertical -position to the value of @code{squashedPosition}, in this case@tie{}@code{0}, -the center line. - -The notes look like a slash, and have no stem, - -@example -\override NoteHead #'style = #'slash -\override Stem #'transparent = ##t -@end example - -All these plug-ins have to cooperate, and this is achieved with a -special plug-in, which must be marked with the keyword @code{\type}. -This should always be @code{Engraver_group}. - -@example -\type "Engraver_group" -@end example - -Put together, we get - -@example -\context @{ - \name ImproVoice - \type "Engraver_group" - \consists "Note_heads_engraver" - \consists "Text_engraver" - \consists Pitch_squash_engraver - squashedPosition = #0 - \override NoteHead #'style = #'slash - \override Stem #'transparent = ##t - \alias Voice -@} -@end example - -@funindex \accepts -Contexts form hierarchies. We want to hang the @code{ImproVoice} -under @code{Staff}, just like normal @code{Voice}s. Therefore, we -modify the @code{Staff} definition with the @code{\accepts} -command, - -@example -\context @{ - \Staff - \accepts ImproVoice -@} -@end example - -@funindex \denies -The opposite of @code{\accepts} is @code{\denies}, -which is sometimes needed when reusing existing context definitions. - -Putting both into a @code{\layout} block, like - -@example -\layout @{ - \context @{ - \name ImproVoice - @dots{} - @} - \context @{ - \Staff - \accepts "ImproVoice" - @} -@} -@end example - -Then the output at the start of this subsection can be entered as - -@example -\relative c'' @{ - a4 d8 bes8 - \new ImproVoice @{ - c4^"ad lib" c - c4 c^"undress" - c c_"while playing :)" - @} - a1 -@} -@end example - - -@node Aligning contexts -@subsection Aligning contexts - -New contexts may be aligned above or below existing contexts. This -could be useful in setting up a vocal staff (@rlearning{Vocal ensembles}) and -in ossia, - -@c TODO Better example needed. Ref LM, and expand on it. - -@cindex ossia -@funindex alignAboveContext -@funindex alignBelowContext - -@lilypond[quote,ragged-right] -ossia = { f4 f f f } -\score{ - \relative c' \new Staff = "main" { - c4 c c c - << - \new Staff \with { alignAboveContext = #"main" } \ossia - { d8 f d f d f d f } - >> - } -} -@end lilypond - -@cindex nested contexts -@cindex contexts, nested - -@funindex \accepts -@funindex \denies - -Contexts like @code{PianoStaff} can contain other contexts -nested within them. Contexts which are acceptable for nesting -are defined by the @qq{accepts} list of a context. Contexts -which are not in this list are placed below the outer context -in the printed score. -For example, the @code{PianoStaff} context is defined by default -to accept @code{Staff} and @code{FiguredBass} contexts within -it, but not (for example) a @code{Lyrics} context. So in the -following structure the lyrics are placed below the piano staff -rather than between the two staves: - -@lilypond[verbatim,quote,relative=1] -\new PianoStaff -<< - \new Staff { e4 d c2 } - \addlyrics { Three blind mice } - \new Staff { - \clef "bass" - { c,1 } - } ->> -@end lilypond - -The @qq{accepts} list of a context can be modified to include -additional nested contexts, so if we wanted the lyrics to appear -between the two staves we could use: - -@lilypond[verbatim,quote,relative=1] -\new PianoStaff \with { \accepts Lyrics } -<< - \new Staff { e4 d c2 } - \addlyrics { Three blind mice } - \new Staff { - \clef "bass" - { c,1 } - } ->> -@end lilypond - -The opposite of @code{\accepts} is @code{\denies}; this removes a -context from the @qq{accepts} list. - -@node Explaining the Internals Reference -@section Explaining the Internals Reference - - -@menu -* Navigating the program reference:: -* Layout interfaces:: -* Determining the grob property:: -* Naming conventions:: -@end menu - -@node Navigating the program reference -@subsection Navigating the program reference - -@c TODO remove this (it's in the LM) -@c Replace with more factual directions - -Suppose we want to move the fingering indication in the fragment -below: - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -If you visit the documentation on fingering instructions (in -@ref{Fingering instructions}), you will notice: - -@quotation -@strong{See also} - -Internals Reference: @rinternals{Fingering}. - -@end quotation - - -@c outdated info; probably will delete. -@ignore -This fragment points to two parts of the program reference: a page -on @code{FingeringEvent} and one on @code{Fingering}. - -The page on @code{FingeringEvent} describes the properties of the music -expression for the input @code{-2}. The page contains many links -forward. For example, it says - -@quotation -Accepted by: @rinternals{Fingering_engraver}, -@end quotation - -@noindent -That link brings us to the documentation for the Engraver, the -plug-in, which says - -@quotation -This engraver creates the following layout objects: @rinternals{Fingering}. -@end quotation - -In other words, once the @code{FingeringEvent}s are interpreted, the -@code{Fingering_engraver} plug-in will process them. -@end ignore - -@ignore -@c I can't figure out what this is supposed to mean. -gp - -The @code{Fingering_engraver} is also listed to create -@rinternals{Fingering} objects, - -@c old info? it doesn't make any sense to me with our current docs. -This is also the -second bit of information listed under @b{See also} in the Notation -manual. -@end ignore - -@ifnothtml -The programmer's reference is available as an HTML document. It is -highly recommended that you read it in HTML form, either online or -by downloading the HTML documentation. This section will be much more -difficult to understand if you are using the -PDF manual. -@end ifnothtml - -Follow the link to @rinternals{Fingering}. At the top of the -page, you will see - -@quotation -Fingering objects are created by: @rinternals{Fingering_engraver} and -@rinternals{New_fingering_engraver}. -@end quotation - -By following related links inside the program reference, we can follow the -flow of information within the program: - -@itemize - -@item @rinternals{Fingering}: -@rinternals{Fingering} objects are created by: -@rinternals{Fingering_engraver} - -@item @rinternals{Fingering_engraver}: -Music types accepted: @rinternals{fingering-event} - -@item @rinternals{fingering-event}: -Music event type @code{fingering-event} is in Music expressions named -@rinternals{FingeringEvent} -@end itemize - -This path goes against the flow of information in the program: it -starts from the output, and ends at the input event. You could -also start at an input event, and read with the flow of -information, eventually ending up at the output object(s). - -The program reference can also be browsed like a normal document. It -contains chapters on -@ifhtml -@rinternals{Music definitions}, -@end ifhtml -@ifnothtml -@code{Music definitions} -@end ifnothtml -on @rinternals{Translation}, and the @rinternals{Backend}. Every -chapter lists all the definitions used and all properties that may be -tuned. - - -@node Layout interfaces -@subsection Layout interfaces - -@cindex interface, layout -@cindex layout interface -@cindex grob - -The HTML page that we found in the previous section describes the -layout object called @rinternals{Fingering}. Such an object is a -symbol within the score. It has properties that store numbers (like -thicknesses and directions), but also pointers to related objects. A -layout object is also called a @emph{Grob}, which is short for Graphical -Object. For more details about Grobs, see @rinternals{grob-interface}. - -The page for @code{Fingering} lists the definitions for the -@code{Fingering} object. For example, the page says - -@quotation -@code{padding} (dimension, in staff space): - -@code{0.5} -@end quotation - -@noindent -which means that the number will be kept at a distance of at least 0.5 -of the note head. - - -Each layout object may have several functions as a notational or -typographical element. For example, the Fingering object -has the following aspects - -@itemize -@item -Its size is independent of the horizontal spacing, unlike slurs or beams. - -@item -It is a piece of text. Granted, it is usually a very short text. - -@item -That piece of text is typeset with a font, unlike slurs or beams. - -@item -Horizontally, the center of the symbol should be aligned to the -center of the note head. - -@item -Vertically, the symbol is placed next to the note and the staff. - -@item -The vertical position is also coordinated with other superscript -and subscript symbols. -@end itemize - -Each of these aspects is captured in so-called @emph{interface}s, -which are listed on the @rinternals{Fingering} page at the bottom - -@quotation -This object supports the following interfaces: -@rinternals{item-interface}, -@rinternals{self-alignment-interface}, -@rinternals{side-position-interface}, @rinternals{text-interface}, -@rinternals{text-script-interface}, @rinternals{font-interface}, -@rinternals{finger-interface}, and @rinternals{grob-interface}. -@end quotation - -Clicking any of the links will take you to the page of the respective -object interface. Each interface has a number of properties. Some of -them are not user-serviceable (@q{Internal properties}), but others -can be modified. - -We have been talking of @emph{the} @code{Fingering} object, but actually it -does not amount to much. The initialization file (see -@rlearning{Other sources of information}) -@file{scm/@/define@/-grobs@/.scm} shows the soul of the @q{object}, - -@example -(Fingering - . ((padding . 0.5) - (avoid-slur . around) - (slur-padding . 0.2) - (staff-padding . 0.5) - (self-alignment-X . 0) - (self-alignment-Y . 0) - (script-priority . 100) - (stencil . ,ly:text-interface::print) - (direction . ,ly:script-interface::calc-direction) - (font-encoding . fetaNumber) - (font-size . -5) ; don't overlap when next to heads. - (meta . ((class . Item) - (interfaces . (finger-interface - font-interface - text-script-interface - text-interface - side-position-interface - self-alignment-interface - item-interface)))))) -@end example - -@noindent -As you can see, the @code{Fingering} object is nothing more than a -bunch of variable settings, and the webpage in the Internals Reference -is directly generated from this definition. - - -@node Determining the grob property -@subsection Determining the grob property - -@c TODO remove this (it's in the LM) -@c Replace with more factual directions - -Recall that we wanted to change the position of the @b{2} in - -@lilypond[quote,fragment,relative=2,verbatim] -c-2 -\stemUp -f -@end lilypond - -Since the @b{2} is vertically positioned next to its note, we have to -meddle with the interface associated with this positioning. This is -done using @code{side-position-interface}. The page for this interface -says - -@quotation -@code{side-position-interface} - -Position a victim object (this one) next to other objects (the -support). The property @code{direction} signifies where to put the -victim object relative to the support (left or right, up or down?) -@end quotation - -@cindex padding -@noindent -Below this description, the variable @code{padding} is described as - -@quotation -@table @code -@item padding -(dimension, in staff space) - -Add this much extra space between objects that are next to each other. -@end table -@end quotation - -By increasing the value of @code{padding}, we can move the -fingering away from the note head. The following command inserts -3 staff spaces of white -between the note and the fingering: -@example -\once \override Voice.Fingering #'padding = #3 -@end example - -Inserting this command before the Fingering object is created, -i.e., before @code{c2}, yields the following result: - -@lilypond[quote,relative=2,fragment,verbatim] -\once \override Voice.Fingering #'padding = #3 -c-2 -\stemUp -f -@end lilypond - - -In this case, the context for this tweak is @code{Voice}. This -fact can also be deduced from the program reference, for the page for -the @rinternals{Fingering_engraver} plug-in says - -@quotation -Fingering_engraver is part of contexts: @dots{} @rinternals{Voice} -@end quotation - - -@node Naming conventions -@subsection Naming conventions - -Another thing that is needed, is an overview of the various naming -conventions: - - scheme functions: lowercase-with-hyphens (incl. one-word -names) - scheme functions: ly:plus-scheme-style - music events, music classes and music properties: -as-scheme-functions - Grob interfaces: scheme-style - backend properties: scheme-style (but X and Y!) - contexts (and MusicExpressions and grobs): Capitalized or -CamelCase - context properties: lowercaseFollowedByCamelCase - engravers: -Capitalized_followed_by_lowercase_and_with_underscores - -Which of these are conventions and which are rules? -Which are rules of the underlying language, and which are -LP-specific? - - -@node Modifying properties -@section Modifying properties - -@c TODO change the menu and subsection node names to use -@c backslash once the new macro to handle the refs -@c is available. Need to find and change all refs at -@c the same time. -td - -@menu -* Overview of modifying properties:: -* The set command:: -* The override command:: -* The tweak command:: -* set versus override:: -@end menu - - -@node Overview of modifying properties -@subsection Overview of modifying properties - -Each context is responsible for creating certain types of graphical -objects. The settings used for printing these objects are also stored by -context. By changing these settings, the appearance of objects can be -altered. - -The syntax for this is - -@example -\override @var{context}.@var{name} #'@var{property} = #@var{value} -@end example - -Here @var{name} is the name of a graphical object, like -@code{Stem} or @code{NoteHead}, and @var{property} is an internal -variable of the formatting system (@q{grob property} or @q{layout -property}). The latter is a symbol, so it must be quoted. The -subsection @ref{Modifying properties}, explains what to fill in -for @var{name}, @var{property}, and @var{value}. Here we only -discuss the functionality of this command. - -The command - -@verbatim -\override Staff.Stem #'thickness = #4.0 -@end verbatim - -@noindent -makes stems thicker (the default is 1.3, with staff line thickness as a -unit). Since the command specifies @code{Staff} as context, it only -applies to the current staff. Other staves will keep their normal -appearance. Here we see the command in action: - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\override Staff.Stem #'thickness = #4.0 -c4 -c4 -c4 -@end lilypond - -The @code{\override} command changes the definition of the @code{Stem} -within the current @code{Staff}. After the command is interpreted -all stems are thickened. - -Analogous to @code{\set}, the @var{context} argument may be left out, -causing the default context @code{Voice} to be used. Adding -@code{\once} applies the change during one timestep only. - -@lilypond[quote,fragment,verbatim,relative=2] -c4 -\once \override Stem #'thickness = #4.0 -c4 -c4 -@end lilypond - -The @code{\override} must be done before the object is -started. Therefore, when altering @emph{Spanner} objects such as slurs -or beams, the @code{\override} command must be executed at the moment -when the object is created. In this example, - -@lilypond[quote,fragment,verbatim,relative=2] -\override Slur #'thickness = #3.0 -c8[( c -\override Beam #'thickness = #0.6 -c8 c]) -@end lilypond - -@noindent -the slur is fatter but the beam is not. This is because the command for -@code{Beam} comes after the Beam is started, so it has no effect. - -Analogous to @code{\unset}, the @code{\revert} command for a context -undoes an @code{\override} command; like with @code{\unset}, it only -affects settings that were made in the same context. In other words, the -@code{\revert} in the next example does not do anything. - -@example -\override Voice.Stem #'thickness = #4.0 -\revert Staff.Stem #'thickness -@end example - -Some tweakable options are called @q{subproperties} and reside inside -properties. To tweak those, use commands of the form - -@c leave this as a long long -@example -\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} -@end example - -@noindent -such as - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - - -@seealso -Internals: @rinternals{OverrideProperty}, @rinternals{RevertProperty}, -@rinternals{PropertySet}, @rinternals{Backend}, and -@rinternals{All layout objects}. - - -@knownissues - -The back-end is not very strict in type-checking object properties. -Cyclic references in Scheme values for properties can cause hangs -or crashes, or both. - - - -@node The set command -@subsection The @code{\set} command - -@cindex properties -@funindex \set -@cindex changing properties - -Each context can have different @emph{properties}, variables contained -in that context. They can be changed during the interpretation step. -This is achieved by inserting the @code{\set} command in the music, - -@example -\set @var{context}.@var{prop} = #@var{value} -@end example - -For example, -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set Score.skipBars = ##t -R1*2 -@end lilypond - -This command skips measures that have no notes. The result is that -multi-rests are condensed. The value assigned is a Scheme object. In -this case, it is @code{#t}, the boolean True value. - -If the @var{context} argument is left out, then the current bottom-most -context (typically @code{ChordNames}, @code{Voice}, or -@code{Lyrics}) is used. In this example, - -@lilypond[quote,verbatim,relative=2,fragment] -c8 c c c -\set autoBeaming = ##f -c8 c c c -@end lilypond - -@noindent -the @var{context} argument to @code{\set} is left out, so automatic -beaming is switched off in the current @rinternals{Voice}. Note that -the bottom-most context does not always contain the property that you -wish to change -- for example, attempting to set the @code{skipBars} -property (of the bottom-most context, in this case @code{Voice}) will -have no effect. - -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set skipBars = ##t -R1*2 -@end lilypond - -Contexts are hierarchical, so if a bigger context was specified, for -example @code{Staff}, then the change would also apply to all -@code{Voice}s in the current stave. The change is applied -@q{on-the-fly}, during the music, so that the setting only affects the -second group of eighth notes. - -@funindex \unset - -There is also an @code{\unset} command, -@example -\unset @var{context}.@var{prop} -@end example - -@noindent -which removes the definition of @var{prop}. This command removes -the definition only if it is set in @var{context}, so - -@example -\set Staff.autoBeaming = ##f -@end example - -@noindent -introduces a property setting at @code{Staff} level. The setting also -applies to the current @code{Voice}. However, - -@example -\unset Voice.autoBeaming -@end example - -@noindent -does not have any effect. To cancel this setting, the @code{\unset} -must be specified on the same level as the original @code{\set}. In -other words, undoing the effect of @code{Staff.autoBeaming = ##f} -requires -@example -\unset Staff.autoBeaming -@end example - -Like @code{\set}, the @var{context} argument does not have to be -specified for a bottom context, so the two statements - -@example -\set Voice.autoBeaming = ##t -\set autoBeaming = ##t -@end example - -@noindent -are equivalent. - - -@cindex \once -Settings that should only apply to a single time-step can be entered -with @code{\once}, for example in - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\once \set fontSize = #4.7 -c4 -c4 -@end lilypond - -the property @code{fontSize} is unset automatically after the second -note. - -A full description of all available context properties is in the -program reference, see -@ifhtml -@rinternals{Tunable context properties}. -@end ifhtml -@ifnothtml -Translation @expansion{} Tunable context properties. -@end ifnothtml - - - -@node The override command -@subsection The @code{\override} command - -Commands which change output generally look like - -@example -\override Voice.Stem #'thickness = #3.0 -@end example - -@noindent -To construct this tweak we must determine these bits of information: - -@itemize -@item the context: here @code{Voice}. -@item the layout object: here @code{Stem}. -@item the layout property: here @code{thickness}. -@item a sensible value: here @code{3.0}. -@end itemize - -Some tweakable options are called @q{subproperties} and reside inside -properties. To tweak those, use commands in the form - -@example -\override Stem #'(details beamed-lengths) = #'(4 4 3) -@end example - -@cindex internal documentation -@cindex finding graphical objects -@cindex graphical object descriptions -@cindex tweaking -@funindex \override -@cindex internal documentation - -For many properties, regardless of the data type of the property, setting the -property to false ( @code{##f} ) will result in turning it off, causing -LilyPond to ignore that property entirely. This is particularly useful for -turning off grob properties which may otherwise be causing problems. - -We demonstrate how to glean this information from the notation manual -and the program reference. - - -@node The tweak command -@subsection The @code{\tweak} command - -@funindex \tweak -@cindex tweaking - -In some cases, it is possible to take a short-cut for tuning -graphical objects. For objects that are created directly from -an item in the input file, you can use the @code{\tweak} command. -For example: - -@lilypond[relative=2,verbatim] -< c - \tweak #'color #red - d - g - \tweak #'duration-log #1 - a -> 4 --\tweak #'padding #8 --^ -@end lilypond - -@cindex chord, modifying one note in - -But the main use of the @code{\tweak} command is to modify just -one of a number of notation elements which start at the same musical -moment, like the notes of a chord, or tuplet brackets which start -at the same time. - -For an introduction to the syntax and uses of the tweak command -see @rlearning{Tweaking methods}. - -The @code{\tweak} command sets a property in the following object -directly, without requiring the grob name or context to be -specified. For this to work, it is necessary for the @code{\tweak} -command to remain immediately adjacent to the object to which it is -to apply after the input file has been converted to a music stream. -This is often not the case, as many additional elements are inserted -into the music stream implicitly. For example, when a note which is -not part of a chord is processed, Lilypond implicitly inserts a -@code{ChordEvent} event before the note, so separating the tweak -from the note. However, if chord symbols are placed round the -tweak and the note, the @code{\tweak} command comes after the -@code{ChordEvent} in the music stream, so remaining adjacent to the -note, and able to modify it. - -So, this works: - -@lilypond[relative=2,verbatim,quote] -<\tweak #'color #red c>4 -@end lilypond - -@noindent -but this does not: - -@lilypond[relative=2,verbatim,quote] -\tweak #'color #red c4 -@end lilypond - -When several similar items are placed at the same musical moment, -the @code{\override} command cannot be used to modify just one of -them -- this is where the @code{\tweak} command must be used. -Items which may appear more than once at the same musical moment -include the following: - -@c TODO expand to include any further uses of \tweak -@itemize -@item note heads of notes inside a chord -@item articulation signs on a single note -@item ties between notes in a chord -@item tuplet brackets starting at the same time -@end itemize - -@c TODO add examples of these - -@noindent -and @code{\tweak} may be used to modify any single occurrence of -these items. - -Notably the @code{\tweak} command cannot be used to modify stems, -beams or accidentals directly, since these are generated later by -note heads, rather than by music elements in the input stream. -Nor can a @code{\tweak} command be used to modify clefs or time -signatures, since these become separated from any preceding -@code{\tweak} command in the input stream by the automatic -insertion of extra elements required to specify the context. - -But the @code{\tweak} command can be used as an alternative to -the @code{\override} command to modify those notational elements -that do not cause any additional implicit elements to be added -before them in the music stream. For example, slurs may be -modified in this way: - -@lilypond[verbatim,quote,relative=1] -c-\tweak #'thickness #5 ( d e f) -@end lilypond - -Also several @code{\tweak} commands may be placed before a -notational element -- all affect it: - -@lilypond[verbatim,quote,relative=1] -c --\tweak #'style #'dashed-line --\tweak #'dash-fraction #0.2 --\tweak #'thickness #3 --\tweak #'color #red - \glissando -f' -@end lilypond - -The music stream which is generated from a section of an input file, -including any automatically inserted elements, may be examined, -see @ref{Displaying music expressions}. This may be helpful in -determining what may be modified by a @code{\tweak} command. - - -@seealso -Learning Manual: -@rlearning{Tweaking methods}. - -Notation Reference: -@ref{Displaying music expressions}. - - -@knownissues - -@cindex tweaks in a variable -The @code{\tweak} command cannot be used inside a variable. - -@cindex tweaks in lyrics -The @code{\tweak} commands cannot be used in @code{\lyricmode}. - -@cindex tweaking control points -@cindex control points, tweaking - -The @code{\tweak} command cannot be used to modify the control -points of just one of several ties in a chord, other than the first -one encountered in the input file. - -@node set versus override -@subsection @code{\set} vs. @code{\override} - -We have seen two methods of changing properties: @code{\set} and -@code{\override}. There are actually two different kinds of -properties. - -Contexts can have properties, which are usually named in -@code{studlyCaps}. They mostly control the translation from -music to notation, eg. @code{localKeySignature} (for determining -whether to print accidentals), @code{measurePosition} (for -determining when to print a bar line). Context properties can -change value over time while interpreting a piece of music; -@code{measurePosition} is an obvious example of -this. Context properties are modified with @code{\set}. - -There is a special type of context property: the element -description. These properties are named in @code{StudlyCaps} -(starting with capital letters). They contain the -@q{default settings} for said graphical object as an -association list. See @file{scm/@/define@/-grobs@/.scm} -to see what kind of settings there are. Element descriptions -may be modified with @code{\override}. - -@code{\override} is actually a shorthand; - -@example -\override @var{context}.@var{name} #'@var{property} = #@var{value} -@end example - -@noindent -is more or less equivalent to - -@c leave this long line -gp -@example -\set @var{context}.@var{name} #'@var{property} = #(cons (cons '@var{property} @var{value}) }, @code{--} -@end itemize - -@strong{The direction property} - -The position or direction of many layout objects is controlled -by the @code{direction} property. - -The value of the @code{direction} property may be -set to @code{1}, meaning @qq{up} or @qq{above}, or to @code{-1}, -meaning @qq{down} or @qq{below}. The symbols @code{UP} and -@code{DOWN} may be used instead of @code{1} and @code{-1} -respectively. The default direction may be specified by setting -@code{direction} to @code{0} or @code{CENTER}. Alternatively, -in many cases predefined commands -exist to specify the direction. These are all of the form - -@noindent -@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} - -@noindent -where @code{xxxNeutral} means @qq{use the default direction}. -See @rlearning{Within-staff objects}. - -In a few cases, arpeggio being the only common example, the value -of the @code{direction} property specifies whether the object -is to be placed to the right or left of the parent object. In -this case @code{-1} or @code{LEFT} means @qq{to the left} and -@code{1} or @code{RIGHT} means @qq{to the right}. @code{0} -or @code{CENTER} means @qq{use the default} direction, as before. - -@ignore -These all have side-axis set to #X -AmbitusAccidental - direction has no effect -Arpeggio - works -StanzaNumber - not tried -TrillPitchAccidental - not tried -TrillPitchGroup - not tried -@end ignore - - - -@node Distances and measurements -@subsection Distances and measurements - -@cindex distances, absolute -@cindex distances, scaled - -@funindex \mm -@funindex \cm -@funindex \in -@funindex \pt - -Distances in LilyPond are of two types: absolute and scaled. - -Absolute distances are used for specifying margins, indents, and -other page layout details, and are by default specified in -millimeters. Distances may be specified in other units by -following the quantity by @code{\mm}, @code{\cm}, -@code{\in}@tie{}(inches), or @code{\pt}@tie{}(points, 1/72.27 -of an inch). Page layout distances can also be specified in -scalable units (see the following paragraph) by appending -@code{\staff-space} to the quantity. -Page layout is described in detail in @ref{Page formatting}. - -Scaled distances are always specified in units of the staff-space -or, rarely, the half staff-space. The staff-space is the distance -between two adjacent staff lines. The default value can be changed -globally by setting the global staff size, or it can be overridden -locally by changing the @code{staff-space} property of -@code{StaffSymbol}. Scaled distances automatically scale with any -change to the either the global staff size or the -@code{staff-space} property of @code{StaffSymbol}, but fonts scale -automatically only with changes to the global staff size. -The global staff size thus enables the overall size of a rendered -score to be easily varied. For the methods of setting the global -staff size see @ref{Setting the staff size}. - -@funindex magstep - -If just a section of a score needs to be rendered to a different -scale, for example an ossia section or a footnote, the global staff -size cannot simply be changed as this would affect the entire score. -In such cases the change in size is made by overriding both the -@code{staff-space} property of @code{StaffSymbol} and the size of -the fonts. A Scheme function, @code{magstep}, is available to -convert from a font size change to the equivalent change in -@code{staff-space}. For an explanation and an example of its use, -see @rlearning{Length and thickness of objects}. - - -@seealso -Learning Manual: -@rlearning{Length and thickness of objects}. - -Notation Reference: -@ref{Page formatting}, -@ref{Setting the staff size}. - - -@node Staff symbol properties -@subsection Staff symbol properties - -@cindex adjusting staff symbol -@cindex drawing staff symbol -@cindex staff symbol, setting of - -@c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol -@c Need to think of uses for these properties. Eg 'line-positions -@c is used in a snippet to thicken centre line. -@c If retained, add @ref to here in 1.6.2 -td - -The vertical position of staff lines and the number of staff lines -can be defined at the same time. As the following example shows, -note positions are not influenced by the staff line positions. - -@warning{The @code{'line-positions} property overrides the -@code{'line-count} property. The number of staff lines is -implicitly defined by the number of elements in the list of values -for @code{'line-positions}.} - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) -} -{ a4 e' f b | d1 } -@end lilypond - -The width of a staff can be modified. The units are staff -spaces. The spacing of objects inside the staff is not affected by -this setting. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'width = #23 -} -{ a4 e' f b | d1 } -@end lilypond - - -@node Spanners -@subsection Spanners - -Many objects of musical notation extend over several notes or even -several bars. Examples are slurs, beams, tuplet brackets, volta -repeat brackets, crescendi, trills, and glissandi. Such objects -are collectively called @qq{spanners}, and have special properties to control -their appearance and behaviour. Some of these properties are common -to all spanners; others are restricted to a sub-set of the spanners. - -All spanners support the @code{spanner-interface}. A few, esentially -those that draw a straight line between the two objects, support in -addition the @code{line-spanner-interface}. - -@unnumberedsubsubsec Using the @code{spanner-interface} - -This interface provides two properties that apply to several spanners. - -@strong{@i{The @code{minimum-length} property}} - -The minimum length of the spanner is specified by the -@code{minimum-length} property. Increasing this usually has the -necessary effect of increasing the spacing of the notes between the -two end points. However, this override has no effect on -many spanners, as their length is determined by other considerations. -A few examples where it is effective are shown below. - -@ignore -Works for: - Tie - MultiMeasureRest - Hairpin - Slur - PhrasingSlur - -Works as long as callback is made: - Glissando - Beam - -Works not at all for: - LyricSpace - LyricHyphen - LyricExtender - TextSpanner - System - -@end ignore - -@lilypond[verbatim,quote,relative=2] -a~a -a -% increase the length of the tie --\tweak #'minimum-length #5 -~a -@end lilypond - -@lilypond[verbatim,quote,relative=2] -a1 -\compressFullBarRests -R1*23 -% increase the length of the rest bar -\once \override MultiMeasureRest #'minimum-length = #20 -R1*23 -a1 -@end lilypond - -@lilypond[verbatim,quote,relative=2] -a \< a a a \! -% increase the length of the hairpin -\override Hairpin #'minimum-length = #20 -a \< a a a \! -@end lilypond - -This override can also be used to increase the length of slurs and -phrasing slurs: - -@lilypond[verbatim,quote,relative=2] -a( a) -a --\tweak #'minimum-length #5 -( a) - -a\( a\) -a --\tweak #'minimum-length #5 -\( a\) -@end lilypond - -For some layout objects, the @code{minimum-length} property becomes -effective only if the @code{set-spacing-rods} procedure is called -explicitly. To do this, the @code{springs-and-rods} property should -be set to @code{ly:spanner::set-spacing-rods}. For example, -the minimum length of a glissando has no effect unless the -@code{springs-and-rods} property is set: - -@lilypond[verbatim,quote,relative=1] -% default -e \glissando c' - -% not effective alone -\once \override Glissando #'minimum-length = #20 -e, \glissando c' - -% effective only when both overrides are present -\once \override Glissando #'minimum-length = #20 -\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods -e, \glissando c' -@end lilypond - -The same is true of the @code{Beam} object: - -@lilypond[verbatim,quote,relative=1] -% not effective alone -\once \override Beam #'minimum-length = #20 -e8 e e e - -% effective only when both overrides are present -\once \override Beam #'minimum-length = #20 -\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods -e8 e e e -@end lilypond - -@strong{@i{The @code{to-barline} property}} - -The second useful property of the @code{spanner-interface} is -@code{to-barline}. By default this is true, causing hairpins and -other spanners which are terminated on the first note of a measure to -end instead on the immediately preceding bar line. If set to false, -the spanner will extend beyond the bar line and end on the note -itself: - -@lilypond[verbatim,quote,relative=2] -a \< a a a a \! a a a \break -\override Hairpin #'to-barline = ##f -a \< a a a a \! a a a -@end lilypond - -This property is not effective for all spanners. For example, -seting it to @code{#t} has no effect on slurs or phrasing slurs -or on other spanners for which terminating on the bar line would -not be meaningful. - -@unnumberedsubsubsec Using the @code{line-spanner-interface} - -Objects which support the @code{line-spanner-interface} include - -@itemize -@item @code{DynamicTextSpanner} -@item @code{Glissando} -@item @code{TextSpanner} -@item @code{TrillSpanner} -@item @code{VoiceFollower} -@end itemize - -The routine responsible for drawing the stencils for these spanners is -@code{ly:line-interface::print}. This routine determines the -exact location of the two end points and draws a line -between them, in the style requested. The locations of the two -end points of the spanner are computed on-the-fly, but it is -possible to override their Y-coordinates. The -properties which need to be specified are nested -two levels down within the property hierarchy, but the syntax of -the @code{\override} command is quite simple: - -@lilypond[relative=2,quote,verbatim] -e2 \glissando b -\once \override Glissando #'(bound-details left Y) = #3 -\once \override Glissando #'(bound-details right Y) = #-2 -e2 \glissando b -@end lilypond - -The units for the @code{Y} property are @code{staff-space}s, -with the center line of the staff being the zero point. -For the glissando, this is the value for @code{Y} at the -X-coordinate corresponding to the center point of each note head, -if the line is imagined to be extended to there. - -If @code{Y} is not set, the value is computed from the vertical -position of the corresponding attachment point of the spanner. - -In case of a line break, the values for the end points are -specified by the @code{left-broken} and @code{right-broken} -sub-lists of @code{bound-details}. For example: - -@lilypond[relative=2,ragged-right,verbatim,fragment] -\override Glissando #'breakable = ##t -\override Glissando #'(bound-details right-broken Y) = #-3 -c1 \glissando \break -f1 -@end lilypond - - -A number of further properties of the @code{left} and -@code{right} sub-lists of the @code{bound-details} property -may be modified in the same way as @code{Y}: - -@table @code -@item Y -This sets the Y-coordinate of the end point, in @code{staff-space}s -offset from the staff center line. By default, it is the center of -the bound object, so a glissando points to the vertical center of -the note head. - -For horizontal spanners, such as text spanners and trill spanners, -it is hardcoded to 0. - -@item attach-dir -This determines where the line starts and ends in the X-direction, -relative to the bound object. So, a value of @code{-1} (or -@code{LEFT}) makes the line start/end at the left side of the note -head it is attached to. - -@item X -This is the absolute X-coordinate of the end point. It is usually -computed on the fly, and overriding it has little useful effect. - -@item stencil -Line spanners may have symbols at the beginning or end, which is -contained in this sub-property. This is for internal use; it is -recommended that @code{text} be used instead. - -@item text -This is a markup that is evaluated to yield the stencil. It is used -to put @i{cresc.}, @i{tr} and other text on horizontal spanners. - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -c2\startTextSpan b c a\stopTextSpan -@end lilypond - -@item stencil-align-dir-y -@item stencil-offset -Without setting one of these, the stencil is simply put at the -end-point, centered on the line, as defined by the @code{X} and -@code{Y} sub-properties. Setting either @code{stencil-align-dir-y} -or @code{stencil-offset} will move the symbol at the edge vertically -relative to the end point of the line: - -@lilypond[relative=1,fragment,verbatim] -\override TextSpanner - #'(bound-details left stencil-align-dir-y) = #-2 -\override TextSpanner - #'(bound-details right stencil-align-dir-y) = #UP - -\override TextSpanner - #'(bound-details left text) = #"ggg" -\override TextSpanner - #'(bound-details right text) = #"hhh" -c4^\startTextSpan c c c \stopTextSpan -@end lilypond - -Note that negative values move the text @emph{up}, contrary to the -effect that might be expected, as a value of @code{-1} or -@code{DOWN} means align the @emph{bottom} edge of the text with -the spanner line. A value of @code{1} or @code{UP} aligns -the top edge of the text with the spanner line. - -@item arrow -Setting this sub-property to @code{#t} produces an arrowhead at the -end of the line. - -@item padding -This sub-property controls the space between the specified -end point of the line and the actual end. Without padding, a -glissando would start and end in the center of each note head. - -@end table - -The music function @code{\endSpanners} terminates the spanner -which starts on the immediately following note prematurely. It -is terminated after exactly one note, or at the following bar line -if @code{to-barline} is true and a bar line occurs before the next -note. - -@lilypond[verbatim,quote,ragged-right,relative=2,fragment] -\endSpanners -c2 \startTextSpan c2 c2 -\endSpanners -c2 \< c2 c2 -@end lilypond - -When using @code{\endSpanners} it is not necessary to close -\startTextSpan with \stopTextSpan, nor is it necessary to close -hairpins with @code{\!}. - - -@seealso -Internals Reference: @rinternals{TextSpanner}, -@rinternals{Glissando}, @rinternals{VoiceFollower}, -@rinternals{TrillSpanner}, -@rinternals{line-spanner-interface}. - - -@node Visibility of objects -@subsection Visibility of objects - -@cindex objects, visibility of -@cindex grobs, visibility of -@cindex visibility of objects - -There are four main ways in which the visibility of layout objects -can be controlled: their stencil can be removed, they can be made -transparent, they can be colored white, or their -@code{break-visibility} property can be overridden. The first -three apply to all layout objects; the last to just a few -- the -@emph{breakable} objects. The Learning Manual introduces these -four techniques, see @rlearning{Visibility and color of objects}. - -There are also a few other techniques which are specific to -certain layout objects. These are covered under Special -considerations. - -@menu -* Removing the stencil:: -* Making objects transparent:: -* Painting objects white:: -* Using break-visibility:: -* Special considerations:: -@end menu - - -@node Removing the stencil -@unnumberedsubsubsec Removing the stencil - -@cindex stencil, removing - -Every layout object has a stencil property. By default this is set -to the specific function which draws that object. If this property -is overridden to @code{#f} no function will be called and the object -will not be drawn. The default action can be recovered with -@code{\revert}. - -@lilypond[quote,verbatim,relative=1] -a1 a -\override Score.BarLine #'stencil = ##f -a a -\revert Score.BarLine #'stencil -a a a -@end lilypond - -@node Making objects transparent -@unnumberedsubsubsec Making objects transparent - -@cindex transparent, making objects - -Every layout object has a transparent property which by default is -set to @code{#f}. If set to @code{#t} the object still occupies -space but is made invisible. - -@lilypond[quote,verbatim,relative=2] -a4 a -\once \override NoteHead #'transparent = ##t -a a -@end lilypond - -@node Painting objects white -@unnumberedsubsubsec Painting objects white - -@cindex objects, coloring -@cindex coloring objects -@cindex layers -@cindex printing order -@cindex overwriting objects -@cindex objects, overwriting -@cindex grobs, overwriting - -Every layout object has a color property which by default is set -to @code{black}. If this is overridden to @code{white} the object -will be indistinguishable from the white background. However, -if the object crosses other objects the color of the crossing -points will be determined by the order in which they are drawn, -and this may leave a ghostly image of the white object, as shown -here: - -@lilypond[quote,verbatim,relative=2] -\override Staff.Clef #'color = #white -a1 -@end lilypond - -This may be avoided by changing the order of printing the objects. -All layout objects have a @code{layer} property which should be set -to an integer. Objects with the lowest value of @code{layer} are -drawn first, then objects with progressively higher values are drawn, -so objects with higher values overwrite objects with lower values. -By default most objects are assigned a @code{layer} value of -@code{1}, although a few objects, including @code{StaffSymbol} and -@code{BarLine}, are assigned a value of @code{0}. The order of -printing objects with the same value of @code{layer} is indeterminate. - -In the example above the white clef, with a default @code{layer} -value of @code{1}, is drawn after the staff lines (default -@code{layer} value @code{0}), so overwriting them. To change this, -the @code{Clef} object must be given in a lower value of -@code{layer}, say @code{-1}, so that it is drawn earlier: - -@lilypond[quote,verbatim,relative=2] -\override Staff.Clef #'color = #white -\override Staff.Clef #'layer = #-1 -a1 -@end lilypond - -@node Using break-visibility -@unnumberedsubsubsec Using break-visibility - -@c TODO Add making other objects breakable - -@cindex break-visibility - -Most layout objects are printed only once, but some like -bar lines, clefs, time signatures and key signatures, may need -to be printed twice when a line break occurs -- once at the end -of the line and again at the start of the next line. Such -objects are called @emph{breakable}, and have a property, the -@code{break-visibility} property to control their visibility -at the three positions in which they may appear -- at the -start of a line, within a line if they are changed, and at the -end of a line if a change takes place there. - -For example, the time signature -by default will be printed at the start of the first line, but -nowhere else unless it changes, when it will be printed at the -point at which the change occurs. If this change occurs at the -end of a line the new time signature will be printed at the start -of the next line and a cautionary time signature will be printed -at the end of the previous line as well. - -This behaviour is controlled by the @code{break-visibility} -property, which is explained in -@c Leave this ref on a newline - formats incorrectly otherwise -td -@rlearning{Visibility and color of objects}. This property takes -a vector of three booleans which, in order, determine whether the -object is printed at the end of, within the body of, or at the -beginning of a line. Or to be more precise, before a line break, -where there is no line break, or after a line break. - -Alternatively, these eight combinations may be specified -by pre-defined functions, defined in @file{scm/output-lib.scm}, -where the last three columns indicate whether the layout objects -will be visible in the positions shown at the head of the columns: - -@multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {yes} {yes} {yes} -@headitem Function @tab Vector @tab Before @tab At no @tab After -@headitem form @tab form @tab break @tab break @tab break - -@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab yes @tab yes @tab yes -@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab no @tab no @tab yes -@item @code{center-visible} @tab @code{'#(#f #t #f)} @tab no @tab yes @tab no -@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab yes @tab no @tab no -@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab yes @tab yes @tab no -@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab yes @tab no @tab yes -@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab no @tab yes @tab yes -@item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab no @tab no @tab no -@end multitable - -The default settings of @code{break-visibility} depend on the -layout object. The following table shows all the layout objects -of interest which are affected by @code{break-visibility} and the -default setting of this property: - -@multitable @columnfractions .3 .3 .4 - -@headitem Layout object @tab Usual context @tab Default setting - -@c omit Ambitus as it appears not to be affected by break-visibility -td -@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} -@item @code{BarLine} @tab @code{Score} @tab calculated -@item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible} -@c omit the following item until it can be explained -td -@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated -@item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible} -@item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible} -@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} -@item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible} -@c omit KeyCancellation until it can be explained -td -@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} -@item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible} -@c omit LeftEdge until it can be explained -td -@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} -@item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible} -@item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible} -@item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible} - -@end multitable - -The example below shows the use of the vector form to control the -visibility of barlines: - -@lilypond[quote,verbatim,relative=1,ragged-right] -f4 g a b -f4 g a b -% Remove bar line at the end of the current line -\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) -\break -f4 g a b -f4 g a b -@end lilypond - -Although all three components of the vector used to override -@code{break-visibility} must be present, not all of them are -effective with every layout object, and some combinations may -even give errors. The following limitations apply: - -@itemize @bullet -@item Bar lines cannot be printed at start of line. -@item A bar number cannot be printed at the start of the first -line unless it is set to be different from 1. -@item Clef -- see below -@item Double percent repeats are either all printed or all -suppressed. Use begin-of line-invisible to print and -all-invisible to suppress. -@item Key signature -- see below -@item OctavateEight -- see below -@end itemize - -@node Special considerations -@unnumberedsubsubsec Special considerations - -@strong{@emph{Visibility following explicit changes}} - -@cindex key signature, visibility following explicit change -@cindex explicitKeySignatureVisibility -@cindex clef, visibility following explicit change -@cindex explicitClefVisibility - -The @code{break-visibility} property controls the visibility of -key signatures and changes of clef only at the start of lines, -i.e. after a break. It has no effect on the visibility of the -key signature or clef following an explicit key change or an -explicit clef change within or at the end of a line. In the -following example the key signature following the explicit change -to B-flat major is still visible, even though @code{all-invisible} -is set. - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -% Try to remove all key signatures -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b -\break -f4 g a b -f4 g a b -@end lilypond - -The visibility of such explicit key signature and clef changes is -controlled by the @code{explicitKeySignatureVisibility} and -@code{explicitClefVisibility} properties. These are the equivalent -of the @code{break-visibility} property and both take a vector of -three booleans or the predefined functions listed above, exactly like -@code{break-visibility}. Both are properties of the Staff context, -not the layout objects themselves, and so they are set using the -@code{\set} command. Both are set by default to @code{all-visible}. -These properties control only the visibility of key signatures and -clefs resulting from explicit changes and do not affect key -signatures and clefs at the beginning of lines; -@code{break-visibility} must still be overridden in the appropriate -object to remove these. - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -\set Staff.explicitKeySignatureVisibility = #all-invisible -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b \break -f4 g a b -f4 g a b -@end lilypond - -@strong{@emph{Visibility of cautionary accidentals}} - -To remove the cautionary accidentals printed at an explicit key -change, set the Staff context property @code{printKeyCancellation} -to @code{#f}: - -@lilypond[quote,verbatim,relative=1,ragged-right] -\key g \major -f4 g a b -\set Staff.explicitKeySignatureVisibility = #all-invisible -\set Staff.printKeyCancellation = ##f -\override Staff.KeySignature #'break-visibility = #all-invisible -\key bes \major -f4 g a b \break -f4 g a b -f4 g a b -@end lilypond - -With these overrides only the accidentals before the notes remain -to indicate the change of key. - -@c TODO Add visibility of cautionary accidentals before notes - -@strong{@emph{Automatic bars}} - -@cindex automaticBars -@cindex bar lines, suppressing - -As a special case, the printing of bar lines can also be turned off -by setting the @code{automaticBars} property in the Score context. -If set to @code{#f}, bar lines will not be printed automatically; -they must be explicitly created with a @code{\bar} command. Unlike -the @code{\cadenzaOn} predefined command, measures are still counted. -Bar generation will resume according to that count if this property -is later set to @code{#t}. When set to @code{#f}, line breaks can -occur only at explicit @code{\bar} commands. - -@c TODO Add example - -@strong{@emph{Octavated clefs}} - -@cindex octavated clefs, visibility of -@cindex visibility of octavated clefs -@cindex clefs, visibility of octavation - -The small octavation symbol on octavated clefs is produced by the -@code{OctavateEight} layout object. Its visibility is controlled -independently from that of the @code{Clef} object, so it is -necessary to apply any required @code{break-visibility} overrides -to both the @code{Clef} and the @code{OctavateEight} layout objects -to fully suppress such clef symbols at the start of each line. - -For explicit clef changes, the @code{explicitClefVisibility} -property controls both the clef symbol and any octavation symbol -associated with it. - - -@seealso -Learning Manual: -@rlearning{Visibility and color of objects} - - -@node Line styles -@subsection Line styles - -Some performance indications, e.g., @i{rallentando} and -@i{accelerando} and @i{trills} are written as text and are -extended over many measures with lines, sometimes dotted or wavy. - -These all use the same routines as the glissando for drawing the -texts and the lines, and tuning their behavior is therefore also -done in the same way. It is done with a spanner, and the routine -responsible for drawing the spanners is -@code{ly:line-interface::print}. This routine determines the -exact location of the two @i{span points} and draws a line -between them, in the style requested. - -Here is an example showing the different line styles available, -and how to tune them. - -@lilypond[relative=2,ragged-right,verbatim,fragment] -d2 \glissando d'2 -\once \override Glissando #'style = #'dashed-line -d,2 \glissando d'2 -\override Glissando #'style = #'dotted-line -d,2 \glissando d'2 -\override Glissando #'style = #'zigzag -d,2 \glissando d'2 -\override Glissando #'style = #'trill -d,2 \glissando d'2 -@end lilypond - -The locations of the end-points of the spanner are computed -on-the-fly for every graphic object, but it is possible to -override these: - -@c FIXME Complete -@lilypond[relative=2,ragged-right,verbatim,fragment] -e2 \glissando f -\once \override Glissando #'(bound-details right Y) = #-2 -e2 \glissando f -@end lilypond - -The value for @code{Y} is set to @code{-2} for the right end -point. The left side may be similarly adjusted by specifying -@code{left} instead of @code{right}. - -If @code{Y} is not set, the value is computed from the vertical -position of the left and right attachment points of the spanner. - -Other adjustments of spanners are possible, for details, see -@ref{Spanners}. - -@node Rotating objects -@subsection Rotating objects - -Both layout objects and elements of markup text can be rotated by -any angle about any point, but the method of doing so differs. - -@menu -* Rotating layout objects:: -* Rotating markup:: -@end menu - -@node Rotating layout objects -@unnumberedsubsubsec Rotating layout objects - -@cindex rotating objects -@cindex objects, rotating - -All layout objects which support the @code{grob-interface} can be -rotated by setting their @code{rotation} property. This takes a -list of three items: the angle of rotation counter-clockwise, -and the x and y coordinates of the point relative to the object's -reference point about which the rotation is to be performed. The -angle of rotation is specified in degrees and the coordinates in -staff-spaces. - -The angle of rotation and the coordinates of the rotation point must -be determined by trial and error. - -@cindex hairpins, angled -@cindex angled hairpins - -There are only a few situations where the rotation of layout -objects is useful; the following example shows one situation where -they may be: - -@lilypond[quote,verbatim,relative=1] -g4\< e' d' f\! -\override Hairpin #'rotation = #'(20 -1 0) -g,,4\< e' d' f\! -@end lilypond - -@node Rotating markup -@unnumberedsubsubsec Rotating markup - -All markup text can be rotated to lie at any angle by prefixing it -with the @code{\rotate} command. The command takes two arguments: -the angle of rotation in degrees counter-clockwise and the text to -be rotated. The extents of the text are not rotated: they take -their values from the extremes of the x and y coordinates of the -rotated text. In the following example the -@code{outside-staff-priority} property for text is set to @code{#f} -to disable the automatic collision avoidance, which would push some -of the text too high. - -@lilypond[quote,verbatim,relative=1] -\override TextScript #'outside-staff-priority = ##f -g4^\markup { \rotate #30 "a G" } -b^\markup { \rotate #30 "a B" } -des^\markup { \rotate #30 "a D-Flat" } -fis^\markup { \rotate #30 "an F-Sharp" } -@end lilypond - -@node Advanced tweaks -@section Advanced tweaks - -This section discusses various approaches to fine tuning the -appearance of the printed score. - -@menu -* Aligning objects:: -* Vertical grouping of grobs:: -* Modifying stencils:: -* Modifying shapes:: -@end menu - - -@seealso -Learning Manual: -@rlearning{Tweaking output}, -@rlearning{Other sources of information}. - -Notation Reference: -@ref{Explaining the Internals Reference}, -@ref{Modifying properties}, -@ref{Interfaces for programmers}. - -Installed Files: -@file{scm/@/define@/-grobs@/.scm}. - -Snippets: -@rlsr{Tweaks and overrides}. - -Internals Reference: -@rinternals{All layout objects}. - - -@node Aligning objects -@subsection Aligning objects - -Graphical objects which support the @code{self-alignment-interface} and/or -the @code{side-position-interface} can be -aligned to a previously placed object in a variety of ways. For a list of these objects, see -@rinternals{self-alignment-interface} and @rinternals{side-position-interface}. - -All graphical objects have a reference point, a horizontal extent and a -vertical extent. The horizontal extent is a pair of numbers -giving the displacements from the reference point of the left and -right edges, displacements to the left being negative. The -vertical extent is a pair of numbers giving the displacement from -the reference point to the bottom and top edges, displacements down -being negative. - -An object's position on a staff is given by the values of the -@code{X-offset} and @code{Y-offset} properties. The value of -@code{X-offset} gives the displacement from the x coordinate of -the reference point of the parent object, and the value of -@code{Y-offset} gives the displacement from the center line of the -staff. The values of @code{X-offset} and -@code{Y-offset} may be set directly or may be set to be calculated -by procedures in order to achieve alignment with the parent object -in several ways. - -@warning{Many objects have special positioning considerations which -cause any setting of @code{X-offset} or @code{Y-offset} to be -ignored or modified, even though the object supports the -@code{self-alignment-interface}.} - -For example, an accidental can be repositioned -vertically by setting @code{Y-offset} but any changes to -@code{X-offset} have no effect. - -Rehearsal marks may be aligned with -breakable objects such as bar lines, clef symbols, time signature -symbols and key signatures. There are special properties to be -found in the @code{break-aligned-interface} for positioning rehearsal -marks on such objects. - -@menu -* Setting @code{X-offset} and @code{Y-offset} directly:: -* Using the @code{side-position-interface}:: -* Using the @code{self-alignment-interface}:: -* Using the @code{break-alignable-interface}:: -@end menu - -@node Setting @code{X-offset} and @code{Y-offset} directly -@unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly - -Numerical values may be given to the @code{X-offset} and @code{Y-offset} -properties of many objects. The following example shows three -notes with the default fingering position and the positions with @code{X-offset} -and @code{Y-offset} modified. - -@lilypond[verbatim,quote,relative=2] -a-3 -a --\tweak #'X-offset #0 --\tweak #'Y-offset #0 --3 -a --\tweak #'X-offset #-1 --\tweak #'Y-offset #1 --3 -@end lilypond - -@c TODO write more - -@node Using the @code{side-position-interface} -@unnumberedsubsubsec Using the @code{side-position-interface} - -An object which supports the @code{side-position-interface} can be -placed next to its parent object so that -the specified edges of the two objects touch. The object may be -placed above, below, to the right or to the left of the parent. -The parent cannot be specified; it is determined by the order of -elements in the input stream. Most objects have the associated -note head as their parent. - -The values of the @code{side-axis} and @code{direction} properties -determine where the object is to be placed, as follows: - -@c TODO add an example of each to the table - -@multitable @columnfractions .3 .3 .3 -@headitem @code{side-axis} @tab @code{direction} @tab -@headitem property @tab property @tab Placement - -@item @code{0} @tab @code{-1} @tab left -@item @code{0} @tab @code{1} @tab right -@item @code{1} @tab @code{-1} @tab below -@item @code{1} @tab @code{1} @tab above - -@end multitable - -When @code{side-axis} is @code{0}, @code{X-offset} should be set to -the procedure @code{ly:side-position-interface::x-aligned-side}. -This procedure will return the correct value of @code{X-offset} to -place the object to the left or right side of the parent according -to value of @code{direction}. - -When @code{side-axis} is @code{1}, @code{Y-offset} should be set to -the procedure @code{ly:side-position-interface::y-aligned-side}. -This procedure will return the correct value of @code{Y-offset} to -place the object to the top or bottom of the parent according -to value of @code{direction}. - -@c TODO Add examples - -@node Using the @code{self-alignment-interface} -@unnumberedsubsubsec Using the @code{self-alignment-interface} - -@emph{Self-aligning objects horizontally} - -The horizontal alignment of an object which supports the -@code{self-alignment-interface} is controlled by the value of -the @code{self-alignment-X} property, provided the object's -@code{X-offset} property is set to -@code{ly:self-alignment-interface::x-aligned-on-self}. -@code{self-alignment-X} may be given any -real value, in units of half the total X extent of the -object. Negative values move the object to the right, positive -to the left. A value of @code{0} centers the object on the -reference point of its parent, a value of @code{-1} aligns the -left edge of the object on the reference point of its parent, -and a value of @code{1} aligns the right edge of the object on the -reference point of its parent. The symbols @code{LEFT}, -@code{CENTER} and @code{RIGHT} may be used instead of the values -@code{-1, 0, 1} respectively. - -Normally the @code{\override} command would be used to modify the -value of @code{self-alignment-X}, but the @code{\tweak} command -can be used to separately align several annotations on a single -note: - -@lilypond[quote,verbatim,relative=1] -a' --\tweak #'self-alignment-X #-1 -^"left-aligned" --\tweak #'self-alignment-X #0 -^"center-aligned" --\tweak #'self-alignment-X #RIGHT -^"right-aligned" --\tweak #'self-alignment-X #-2.5 -^"aligned further to the right" -@end lilypond - -@emph{Self-aligning objects vertically} - -Objects may be aligned vertically in an analogous way to aligning -them horizontally if the @code{Y-offset} property is set to -@code{ly:self-alignment-interface::y-aligned-on-self}. However, -other mechanisms are often involved in vertical alignment: the -value of @code{Y-offset} is just one variable taken into account. -This may make adjusting the value of some objects tricky. -The units are just half the vertical extent of the object, which -is usually quite small, so quite large numbers may be required. -A value of @code{-1} aligns the lower edge of the object with -the reference point of the parent object, a value of @code{0} -aligns the center of the object with the reference point of the -parent, and a value of @code{1} aligns the top edge of the object -with the reference point of the parent. The symbols @code{DOWN}, -@code{CENTER}, @code{UP} may be substituted for @code{-1, 0, 1} -respectively. - -@emph{Self-aligning objects in both directions} - -By setting both @code{X-offset} and @code{Y-offset}, an object may -be aligned in both directions simultaneously. - -The following example shows how to adjust a fingering mark so -that it nestles close to the note head. - -@lilypond[quote,verbatim,relative=2] -a --\tweak #'self-alignment-X #0.5 % move horizontally left --\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self --\tweak #'self-alignment-Y #-1 % move vertically up --3 % third finger -@end lilypond - -@ignore -@unnumberedsubsubsec Using the @code{aligned-on-parent} procedures - -@c Cannot document as they do not seem to operate consistently on all objects -td -@c TODO investigate further - -The @code{aligned-on-parent} procedures are used in the same way -as the @code{aligned-on-self} procedures, they difference being -that they permit an object to be aligned with the @emph{edges} of -the parent rather than the parent's reference point. The following -example shows the difference: - -@c TODO Add example - -@lilypond[verbatim,quote] -@end lilypond - -@end ignore - -@ignore -@unnumberedsubsubsec Using the @code{centered-on-parent} procedures - -@c Cannot document as they do not seem to operate consistently on all objects -td -@c TODO investigate further - -@end ignore - -@c TODO The align-interface, BassFigureAlignment and VerticalAlignment - -@node Using the @code{break-alignable-interface} -@unnumberedsubsubsec Using the @code{break-alignable-interface} - -@cindex align to objects -@cindex break-align-symbols - -Rehearsal marks and bar numbers may be aligned with notation -objects other than bar lines. These objects include @code{ambitus}, -@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, -@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and -@code{time-signature}. - -By default, rehearsal marks and bar numbers will be horizontally -centered above the object: - -@lilypond[verbatim,quote,relative=1] -e1 -% the RehearsalMark will be centered above the Clef -\override Score.RehearsalMark #'break-align-symbols = #'(clef) -\key a \major -\clef treble -\mark "↓" -e -% the RehearsalMark will be centered above the TimeSignature -\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) -\key a \major -\clef treble -\time 3/4 -\mark "↓" -e2. -@end lilypond - -A list of possible target alignment objects may be specified. If -some of the objects are invisible at that point due to the setting -of @code{break-visibility} or the explicit visibility settings for -keys and clefs, the rehearsal mark or bar number is aligned to the -first object in the list which is visible. If no objects in the -list are visible the object is aligned to the bar line. If the bar -line is invisible the object is aligned to the place where the bar -line would be. - -@lilypond[verbatim,quote,relative=1] -e1 -% the RehearsalMark will be centered above the Key Signature -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) -\key a \major -\clef treble -\mark "↓" -e -% the RehearsalMark will be centered above the Clef -\set Staff.explicitKeySignatureVisibility = #all-invisible -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef) -\key a \minor -\clef bass -\mark "↓" -e, -@end lilypond - -The alignment of the rehearsal mark relative to the notation object -can be changed, as shown in the following example. In a score with -multiple staves, this setting should be done for all the staves. - -@lilypond[verbatim,quote,relative=1] -% The RehearsalMark will be centered above the KeySignature -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) -\key a \major -\clef treble -\time 4/4 -\mark "↓" -e1 -% The RehearsalMark will be aligned with the left edge of the KeySignature -\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT -\mark "↓" -\key a \major -e -% The RehearsalMark will be aligned with the right edge of the KeySignature -\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT -\key a \major -\mark "↓" -e -@end lilypond - -The rehearsal mark can also be offset to the right or left of the left edge -by an arbitrary amount. The units are staff-spaces: - -@lilypond[verbatim,quote,relative=1] -% The RehearsalMark will be aligned with the left edge of the KeySignature -% and then shifted right by 3.5 staff-spaces -\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) -\once \override Score.KeySignature #'break-align-anchor = #3.5 -\key a \major -\mark "↓" -e -% The RehearsalMark will be aligned with the left edge of the KeySignature -% and then shifted left by 2 staff-spaces -\once \override Score.KeySignature #'break-align-anchor = #-2 -\key a \major -\mark "↓" -e -@end lilypond - - -@node Vertical grouping of grobs -@subsection Vertical grouping of grobs - -@c FIXME Expand this section - -The VerticalAlignment and VerticalAxisGroup grobs work together. -VerticalAxisGroup groups together different grobs like Staff, Lyrics, -etc. VerticalAlignment then vertically aligns the different grobs -grouped together by VerticalAxisGroup. There is usually only one -VerticalAlignment per score but every Staff, Lyrics, etc. has its own -VerticalAxisGroup. - - -@node Modifying stencils -@subsection Modifying stencils - -All layout objects have a @code{stencil} property which is part of -the @code{grob-interface}. By default, this property is usually -set to a function specific to the object that is tailor-made to -render the symbol which represents it in the output. For example, -the standard setting for the @code{stencil} property of the -@code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}. - -The standard symbol for any object can be replaced by modifying the -@code{stencil} property to reference a different, specially-written, -procedure. This requires a high level of knowledge of the internal -workings of LilyPond, but there is an easier way which can often -produce adequate results. - -This is to set the @code{stencil} property to the procedure which -prints text -- @code{ly:text-interface::print} -- and to add a -@code{text} property to the object which is set to contain the -markup text which produces the required symbol. Due to the -flexibility of markup, much can be achieved -- see in particular -@ref{Graphic notation inside markup}. - -The following example demonstrates this by changing the note head -symbol to a cross within a circle. - -@lilypond[verbatim,quote] -XinO = { - \once \override NoteHead #'stencil = #ly:text-interface::print - \once \override NoteHead #'text = \markup { - \combine - \halign #-0.7 \draw-circle #0.85 #0.2 ##f - \musicglyph #"noteheads.s2cross" - } -} -\relative c'' { - a a \XinO a a -} -@end lilypond - -Any of the glyphs in the feta Font can be supplied to the -@code{\musicglyph} markup command -- see @ref{The Feta font}. - -@c TODO Add inserting eps files or ref to later - -@c TODO Add inserting Postscript or ref to later - - -@seealso -Notation Reference: -@ref{Graphic notation inside markup}, -@ref{Formatting text}, -@ref{Text markup commands}, -@ref{The Feta font}. - - -@node Modifying shapes -@subsection Modifying shapes - -@menu -* Modifying ties and slurs:: -@end menu - -@node Modifying ties and slurs -@unnumberedsubsubsec Modifying ties and slurs - -Ties, slurs and phrasing slurs are drawn as third-order Bézier -curves. If the shape of the tie or slur which is calculated -automatically is not optimum, the shape may be modified manually by -explicitly specifying the four control points required to define -a third-order Bézier curve. - -Third-order or cubic Bézier curves are defined by four control -points. The first and fourth control points are precisely the -starting and ending points of the curve. The intermediate two -control points define the shape. Animations showing how the curve -is drawn can be found on the web, but the following description -may be helpful. The curve starts from the first control point -heading directly towards the second, gradually bending over to -head towards the third and continuing to bend over to head towards -the fourth, arriving there travelling directly from the third -control point. The curve is entirely contained in the -quadrilateral defined by the four control points. - -Here is an example of a case where the tie is not optimum, and -where @code{\tieDown} would not help. - -@lilypond[verbatim,quote,relative=1] -<< - { e1 ~ e } -\\ - { r4 } ->> -@end lilypond - -One way of improving this tie is to manually modify its control -points, as follows. - -The coordinates of the Bézier control points are specified in units -of staff-spaces. The X@tie{}coordinate is relative to the reference -point of the note to which the tie or slur is attached, and the -Y@tie{}coordinate is relative to the staff center line. The -coordinates are entered as a list of four pairs of decimal numbers -(reals). One approach is to estimate the coordinates of the two -end points, and then guess the two intermediate points. The optimum -values are then found by trial and error. - -It is useful to remember that a symmetric curve requires symmetric -control points, and that Bézier curves have the useful property that -transformations of the curve such as translation, rotation and -scaling can be achieved by applying the same transformation to the -curve's control points. - -For the example above the following override gives a satisfactory -tie: - -@lilypond[verbatim,quote,relative=1] -<< - \once \override Tie - #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) - { e1 ~ e1 } -\\ - { r4 4 } ->> -@end lilypond - -@knownissues - -It is not possible to modify shapes of ties or slurs by changing -the @code{control-points} property if there are more than one at -the same musical moment, not even by using the @code{\tweak} -command. - - - - diff --git a/Documentation/user/cheatsheet.itely b/Documentation/user/cheatsheet.itely deleted file mode 100644 index 87d48f9621..0000000000 --- a/Documentation/user/cheatsheet.itely +++ /dev/null @@ -1,298 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@c TODO: add tablature. - -@node Cheat sheet -@appendix Cheat sheet - - -@multitable @columnfractions .35 .3 .35 - -@item @b{Syntax} -@tab @b{Description} -@tab @b{Example} - -@item @code{1 2 8 16} -@tab durations -@tab -@lilypond[fragment,relative=2,notime] -\set Staff.autoBeaming = ##f -\override Staff.Clef #'break-visibility = #all-invisible -c1 c2 c8 c16 -@end lilypond - -@item @code{c4. c4..} -@tab augmentation dots -@tab -@lilypond[fragment,relative=2,notime] -\override Staff.Clef #'break-visibility = #all-invisible -c4. c4.. -@end lilypond - -@item @code{c d e f g a b } -@tab scale -@tab -@lilypond[fragment,relative=1,notime] -c d e f g a b -@end lilypond - -@item @code{fis bes} -@tab alteration -@tab -@lilypond[fragment,relative=1,notime] -fis bes -@end lilypond - -@item @code{\clef treble \clef bass } -@tab clefs -@tab -@lilypond[fragment,notime] -\clef treble -s4_" " -\clef bass -s4_" " -@end lilypond - -@item @code{\time 3/4 \time 4/4 } -@tab time signature -@tab -@lilypond[fragment] -\override Staff.Clef #'transparent = ##t -\time 3/4 -s4_" " -\time 4/4 -s16_" " -@end lilypond - - -@item @code{r4 r8} -@tab rest -@tab -@lilypond[relative=2,notime,fragment] -\override Staff.Clef #'break-visibility = #all-invisible -r4 r8 -@end lilypond - -@item @code{d ~ d} -@tab tie -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -d ~ d -@end lilypond - -@item @code{\key es \major } -@tab key signature -@tab -@lilypond[notime,fragment] -\clef treble -\key es \major -s4 -@end lilypond - -@item @var{note}@code{'} -@tab raise octave -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -a a' -@end lilypond - -@item @var{note}@code{,} -@tab lower octave -@tab -@lilypond[relative=2,notime,fragment] -\set Score.timing = ##f -\set Staff.autoBeaming = ##f -c c, -@end lilypond - - -@item @code{c( d e)} -@tab slur -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c( d e) -@end lilypond - - -@item @code{c\( c( d) e\)} -@tab phrasing slur -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -c\( c( d) e\) -@end lilypond - - -@item @code{a8[ b]} -@tab beam -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a8-[ b-] -@end lilypond - - -@item @code{<< \new Staff ... >>} -@tab more staves -@tab -@lilypond[fragment] -<< \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } - \new Staff { - \set Staff.implicitTimeSignatureVisibility = #all-invisible - c'1 - } >> -@end lilypond - - -@item @code{c-> c-.} -@tab articulations -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c-> c-. -@end lilypond - - -@item @code{c2\mf c\sfz} -@tab dynamics -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -c2\mf c\sfz -@end lilypond - - -@item @code{a\< a a\!} -@tab crescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\< a a\! -@end lilypond - -@item @code{a\> a a\!} -@tab decrescendo -@tab -@lilypond[fragment,relative=2] -\set Score.timing = ##f -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\set Staff.autoBeaming = ##f -a\> a a\! -@end lilypond - - -@item @code{< >} -@tab chord -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible - -@end lilypond - - -@item @code{\partial 8} -@tab upstep -@tab -@lilypond[fragment,relative=2] -\partial 8 -f8 c2 d e -@end lilypond - - -@item @code{\times 2/3 @{f g a@}} -@tab triplets -@tab -@lilypond[relative=1,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\times 2/3 { f8 g a } -@end lilypond - - -@item @code{\grace} -@tab grace notes -@tab -@lilypond[relative=2,fragment] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Voice { \grace b16 c4 } -@end lilypond - -@item @code{\lyricmode @{ twinkle @}} -@tab entering lyrics -@tab -twinkle - - -@item @code{\new Lyrics} -@tab printing lyrics -@tab -@lilypond[fragment] -\new Lyrics \lyricmode { twinkle } -@end lilypond - -@item @code{twin -- kle} -@tab lyric hyphen -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -<< - { g'1 g } - \new Lyrics \lyricsto "" { twin -- kle } ->> -@end lilypond - -@item @code{\chordmode @{ c:dim f:maj7 @}} -@tab chords -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\chordmode { c:dim f:maj7 } -@end lilypond - -@item @code{\context ChordNames} -@tab printing chord names -@tab -@lilypond[fragment,relative=2] -\chords { c:dim f:maj7 } -@end lilypond - -@item @code{<<@{e f@} \\ @{c d@}>>} -@tab polyphony -@tab -@lilypond[fragment,relative=2] -\set Staff.implicitTimeSignatureVisibility = #all-invisible -\context Staff <<{e f} \\ {c d}>> -@end lilypond - - -@item @code{s4 s8 s16} -@tab spacer rests -@tab - -@end multitable - diff --git a/Documentation/user/chords.itely b/Documentation/user/chords.itely deleted file mode 100644 index 5b5422b6f6..0000000000 --- a/Documentation/user/chords.itely +++ /dev/null @@ -1,1129 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Chord notation -@section Chord notation - -@lilypondfile[quote]{chords-headword.ly} - -Chords can be entered either as normal notes or in chord mode and displayed -using a variety of traditional European chord naming conventions. Chord -names and figured bass notation can also be displayed. - -@menu -* Chord mode:: -* Displaying chords:: -* Figured bass:: -@end menu - - -@node Chord mode -@subsection Chord mode - -@cindex chord chords - -Chord mode is used to enter chords using an indicator of the chord -structure, rather than the chord pitches. - -@menu -* Chord mode overview:: -* Common chords:: -* Extended and altered chords:: -@end menu - -@node Chord mode overview -@unnumberedsubsubsec Chord mode overview - -@cindex chord names -@cindex chord mode - -Chords can be entered as simultaneous music, as discussed in -@ref{Chorded notes}. - -Chords can also be entered in @qq{chord mode}, which is an input -mode that focuses on the structures of chords in traditional -European music, rather than on specific pitches. This is -convenient for those who are familiar with using chord names to -describe chords. More information on different input modes can be -found at @ref{Input modes}. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c1 g a g c } -@end lilypond - -Chords entered using chord mode are music elements, and can be -transposed just like chords entered using simultaneous music. - -Chord mode and note mode can be mixed in sequential music: - -@lilypond[verbatim,quote,ragged-right,relative=1] -2 -\chordmode { c2 f } -2 -\chordmode { f2 g } -@end lilypond - - -@seealso -Music Glossary: -@rglos{chord}. - -Notation Reference: -@ref{Chorded notes}, -@ref{Input modes}. - -Snippets: -@rlsr{Chords} - - -@knownissues - -When chord mode and note mode are mixed in sequential music, and -chord mode comes first, the note mode will create a new @code{Staff} -context. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2 f } -2 -@end lilypond - -To avoid this behavior, explicitly create the @code{Staff} context: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\new Staff { - \chordmode { c2 f } - 2 -} -@end lilypond - -@node Common chords -@unnumberedsubsubsec Common chords - -@cindex triads -@cindex seventh chords -@cindex root of chord -@cindex modifiers, in chords. -@cindex chord quality - -Major triads are entered by including the root and an -optional duration: - -@lilypond[verbatim,quote,relative=1,ragged-right] -\chordmode { c2 f4 g } -@end lilypond - -Minor, augmented, and diminished triads are entered by placing -@code{:} and a quality modifier string after the duration: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\chordmode { c2:m f4:aug g:dim } -@end lilypond - -Seventh chords can be created: - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { c1:7 c:m7 c:maj7 c:dim7 c:aug7 } -@end lilypond - -@funindex aug -@funindex dim -@funindex maj -@funindex m - -The table belows shows the actions of the quality modifiers on -triads and seventh chords. The default seventh step added to -chords is a minor or flatted seventh, which makes the dominant -seventh the basic seventh chord. All alterations are relative to -the dominant seventh. A more complete table of modifier usage -is found at @ref{Common chord modifiers}. - -@c @table @code -@multitable @columnfractions .2 .4 .3 - -@item -@b{Modifier} -@tab -@b{Action} -@tab -@b{Example} - -@item -None -@tab -The default action; produces a major triad. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1 -} -@end lilypond - -@item -m, m7 -@tab -The minor chord. This modifier lowers the 3rd. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:m c:m7 -} -@end lilypond - - -@item -dim, dim7 -@tab -The diminished chord. This modifier lowers the 3rd, 5th and (if -present) the 7th step. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:dim c:dim7 -} -@end lilypond - -@item -aug -@tab -The augmented chord. This modifier raises the 5th step. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:aug -} -@end lilypond - -@item -maj, maj7 -@tab -The major 7th chord. This modifier adds a raised 7th step. The -@code{7} following @code{maj} is optional. Do NOT use this modifier -to create a major triad. -@tab -@lilypond[line-width=4\cm, noragged-right] -\chordmode { - \override Staff.TimeSignature #'stencil = ##f - c1:maj c:maj7 -} -@end lilypond - -@end multitable - - -@seealso -Notation Reference: -@ref{Common chord modifiers}, -@ref{Extended and altered chords}. - -Snippets: -@rlsr{Chords}. - -@knownissues -Only one quality modifier should be used per chord, typically on the -highest step present in the chord. Chords with more than quality -modifier will be parsed without an error or warning, but the results -are unpredictable. Chords that cannot be achieved with a single -quality modifier should be altered by individual pitches, as described -in @ref{Extended and altered chords}. - - -@node Extended and altered chords -@unnumberedsubsubsec Extended and altered chords - -@cindex extended chords -@cindex altered chords - -Chord structures of arbitrary complexity can be created in chord -mode. The modifier string can be used to extend a chord, add or -remove chord steps, raise or lower chord steps, and add a bass note -or create an inversion. - -The first number following the @code{:} is taken to be the extent -of the chord. The chord is constructed by sequentially adding -thirds to the root until the specified number has been reached. -Note that the seventh step added as part of an extended chord will be the -minor or flatted seventh, not the major seventh. -If the extent is not a third (e.g., 6), thirds are added up to the -highest third below the extent, and then the step of the extent is -added. The largest possible value for the extent is 13. Any -larger value is interpreted as 13. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:2 c:3 c:4 c:5 - c1:6 c:7 c:8 c:9 - c1:10 c:11 c:12 c:13 - c1:14 -} -@end lilypond - -@noindent -Note that both @code{c:5} and @code{c} produce a C major triad. - -Since an unaltered 11 does not sound good when combined with an -unaltered 13, the 11 is removed from a @code{:13} chord (unless it -is added explicitly). - -@lilypond[quote,ragged-right,fragment,verbatim,relative=1] -\chordmode { - c1:13 c:13.11 c:m13 -} -@end lilypond - -@cindex additions, in chords - -Individual steps can be added to a chord. Additions follow the -extent and are prefixed by a dot (@code{.}). The basic seventh -step added to a chord is the minor or flatted seventh, rather than -the major seventh. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:5.6 c:3.7.8 c:3.6.13 -} -@end lilypond - -Added steps can be as high as desired. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c4:5.15 c:5.20 c:5.25 c:5.30 -} -@end lilypond - -@cindex chord steps, altering - -Added chord steps can be altered by suffixing a @code{-} or @code{+} -sign to the number. To alter a step that is automatically included -as part of the basic chord structure, add it as an altered step. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1:7+ c:5+.3- c:3-.5-.7- -} -@end lilypond - -@cindex removals, in chords - -@funindex ^ - -Following any steps to be added, a series of steps to be removed -is introduced in a modifier string with a prefix of @code{^}. -If more than one step is to be removed, the steps to be -removed are separated by @code{.} following the -initial @code{^}. - -@lilypond[quote,verbatim,fragment,relative=1] -\chordmode { - c1^3 c:7^5 c:9^3 c:9^3.5 c:13.11^3.7 -} -@end lilypond - -@funindex sus - -The modifier @code{sus} can be added to the modifier string to -create suspended chords. This removes the 3rd step from the chord. -Append either @code{2} or @code{4} to add the 2nd or 4th step to the -chord. @code{sus} is equivalent to @code{^3}; @code{sus4} is -equivalent to @code{.4^3}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1:sus c:sus2 c:sus4 c:5.4^3 -} -@end lilypond - -@funindex / -@cindex chord inversions -@cindex bass note, for chords - -Inversions (putting a pitch other than the root on the bottom of the -chord) and added bass notes can be specified by appending -@code{/}@var{pitch} to the chord. - -@lilypond[quote,ragged-right,fragment,verbatim, relative=2] -\chordmode { - c1 c/g c/f -} -@end lilypond - -@funindex /+ - -A bass note that is part of the chord can be added, instead of -moved as part of an inversion, by using @code{/+}@var{pitch}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\chordmode { - c1 c/g c/+g -} -@end lilypond - -Chord modifiers that can be used to produce a variety of -standard chords are shown in -@ref{Common chord modifiers}. - - -@seealso -Notation Reference: -@ref{Common chord modifiers}. - -Snippets: -@rlsr{Chords} - - -@knownissues - -Each step can only be present in a chord once. The following -simply produces the augmented chord, since @code{5+} is -interpreted last. - -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { c1:5.5-.5+ } -@end lilypond - -Only the second inversion can be created by adding a bass -note. The first inversion requires changing the root of -the chord. - -@lilypond[quote,ragged-right,verbatim,fragment] -\chordmode { - c'1: c':/g e:6-3-^5 e:m6-^5 -} -@end lilypond - -@node Displaying chords -@subsection Displaying chords - -Chords can be displayed by name, in addition to the standard display -as notes on a staff. - -@menu -* Printing chord names:: -* Customizing chord names:: -@end menu - -@node Printing chord names -@unnumberedsubsubsec Printing chord names - -@cindex printing chord names -@cindex chord names -@cindex chords - -Chord names are printed in the @code{ChordNames} context: - -@lilypond[verbatim,quote,relative=1,ragged-right] -\new ChordNames { - \chordmode { - c2 f4. g8 - } -} -@end lilypond - -Chords can be entered as simultaneous notes or through the use of -chord mode. The displayed chord name will be the same, regardless -of the mode of entry, unless there are inversions or added bass notes: - -@lilypond[verbatim,quote,relative=1] -<< - \new ChordNames { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } - { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } - } ->> -@end lilypond - -@funindex{\chords} - -@code{\chords @{ ... @}} is a shortcut notation for -@code{\new ChordNames @{ \chordmode @{ ... @} @}}. - -@lilypond[verbatim,quote,ragged-right, relative=1] -\chords { - c2 f4.:m g8:maj7 -} -@end lilypond - -@lilypond[verbatim,quote,ragged-right, relative=1] -\new ChordNames { - \chordmode { - c2 f4.:m g8:maj7 - } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{showing-chords-at-changes.ly} - -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - - -@seealso -Music Glossary: -@rglos{chord}. - -Notation Reference: -@ref{Writing music in parallel}. - -Snippets: -@rlsr{Chords}. - -Internals Reference: -@rinternals{ChordNames}, -@rinternals{ChordName}, -@rinternals{Chord_name_engraver}, -@rinternals{Volta_engraver}, -@rinternals{Bar_engraver}. - - -@knownissues - -Chords containing inversions or altered bass notes are not named -properly if entered using simultaneous music. - - -@node Customizing chord names -@unnumberedsubsubsec Customizing chord names - -@cindex customizing chord names - -There is no unique system for naming chords. Different musical -traditions use different names for the same set of chords. There -are also different symbols displayed for a given chord name. The -names and symbols displayed for chord names are customizable. - -@cindex jazz chords -@cindex chords, jazz - -The basic chord name layout is a system for Jazz music, proposed -by Klaus Ignatzek (see @ref{Literature list}). The chord naming -system can be modified as described below. An alternate jazz -chord system has been developed using these modifications. -The Ignatzek and alternate -Jazz notation are shown on the chart in @ref{Chord -name chart}. - -@c TODO -- Change this so we don't have a non-verbatim example. -@c Make short example in docs, then move longer example to -@c appendix, where the length of the snippet won't matter. - -In addition to the different naming systems, different note names -are used for the root in different languages. The predefined -variables @code{\germanChords}, @code{\semiGermanChords}, -@code{\italianChords} and @code{\frenchChords} set these variables. -The effect is demonstrated here: - -@lilypondfile[ragged-right]{chord-names-languages.ly} - -If none of the existing settings give the desired output, the chord -name display can be tuned through the following properties. - -@table @code - -@funindex chordRootNamer - -@item chordRootNamer - -The chord name is usually printed as a letter for the root with an -optional alteration. The transformation from pitch to letter is -done by this function. Special note names (for example, the German -@q{H} for a B-chord) can be produced by storing a new function in -this property. - -@funindex majorSevenSymbol - -@item majorSevenSymbol - -This property contains the markup object used to follow the output -of @code{chordRootNamer} to identify a major 7 chord. Predefined -options are @code{whiteTriangleMarkup} and -@code{blackTriangleMarkup}. - -@funindex chordNoteNamer - -@item chordNoteNamer - -When the chord name contains additional pitches other than the root -(e.g., an added bass note), this function is used to print the -additional pitch. By default the pitch is printed using -@code{chordRootNamer}. The @code{chordNoteNamer} property can be set -to a specialized function to change this behavior. For example, the -bass note can be printed in lower case. - -@funindex chordNameSeparator - -@item chordNameSeparator - -Different parts of a chord name are normally separated by a slash. -By setting @code{chordNameSeparator}, you can use any desired markup -for a separator. - -@funindex chordNameExceptions - -@item chordNameExceptions - -This property is a list of pairs. The first item in each pair -is a set of pitches used to identify the steps present in the chord. -The second item is a markup that will follow the @code{chordRootNamer} -output to create the chord name. - -@funindex chordPrefixSpacer -@item chordPrefixSpacer - -The @q{m} for minor chords is usually printed immediately to the -right of the root of the chord. A spacer can be placed between -the root and @q{m} by setting @code{chordPrefixSpacer}. -The spacer is not used when the root is altered. - -@end table - - -@predefined -@funindex major seven symbols -@code{\whiteTriangleMarkup}, -@code{\blackTriangleMarkup}, -@funindex \germanChords -@code{\germanChords}, -@funindex \semiGermanChords -@code{\semiGermanChords}, -@funindex \italianChords -@code{\italianChords}, -@funindex \frenchChords -@code{\frenchChords}. -@endpredefined - - -@snippets - -@cindex exceptions, chord names. -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-exceptions.ly} - -@c TODO - tweak snippet to use \blackTriangleMarkup as well -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{chord-name-major7.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-bar-lines-to-chordnames-context.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{volta-below-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-chord-separator.ly} - - -@seealso -Notation Reference: -@ref{Chord name chart}, -@ref{Common chord modifiers}. - -Installed Files: -@file{scm/@/chords@/-ignatzek@/.scm}, -@file{scm/@/chord@/-entry@/.scm}, -@file{ly/@/chord@/-modifier@/-init@/.ly}. - -Snippets: -@rlsr{Chords}. - -@c Internals Reference: -@c @r internals{}. - - -@knownissues - -Chord names are determined from both the pitches that are present -in the chord and the information on the chord structure that may -have been entered in @code{\chordmode}. If the simultaneous pitches -method of entering chords is used, undesired names result from -inversions or bass notes. - -@lilypond[quote,ragged-right,verbatim] -myChords = \relative c' { - \chordmode { c1 c/g c/f } - 1 -} -<< - \new ChordNames { \myChords } - \new Staff { \myChords } ->> -@end lilypond - - -@node Figured bass -@subsection Figured bass - -@lilypondfile[quote]{figured-bass-headword.ly} - -Figured bass notation can be displayed. - -@menu -* Introduction to figured bass:: -* Entering figured bass:: -* Displaying figured bass:: -@end menu - -@node Introduction to figured bass -@unnumberedsubsubsec Introduction to figured bass - -@cindex Basso continuo -@cindex Thorough bass -@cindex Figured bass -@cindex Bass, thorough -@cindex Bass, figured - -@c TODO: musicological blurb about FB - - -LilyPond has support for figured bass, also called thorough bass -or basso continuo: - -@lilypond[quote,ragged-right,verbatim,fragment] -<< - \new Voice { \clef bass dis4 c d ais g fis} - \new FiguredBass { - \figuremode { - < 6 >4 < 7\+ >8 < 6+ [_!] > - < 6 >4 <6 5 [3+] > - < _ >4 < 6 5/>4 - } - } ->> -@end lilypond - -The support for figured bass consists of two parts: there is an -input mode, introduced by @code{\figuremode}, that accepts -entry of bass figures, and there is a context named -@code{FiguredBass} that takes care of displaying -@code{BassFigure} objects. Figured bass can also be displayed -in @code{Staff} contexts. - -@code{\figures@{ ... @}} is a shortcut notation for -@code{\new FiguredBass @{ \figuremode @{ ... @} @}}. - - -Although the support for figured bass may superficially resemble chord -support, it is much simpler. @code{\figuremode} mode simply -stores the figures and the @code{FiguredBass} context prints them -as entered. There is no conversion to pitches. - -@ignore -Figures are created as markup texts. Any of the standard markup -properties can be used to modify the display of figures. For -example, the vertical spacing of the figures may be set with -@code{baseline-skip}. -@end ignore - - -@seealso -Music Glossary: -@rglos{figured bass}. - -Snippets: -@rlsr{Chords} - - -@node Entering figured bass -@unnumberedsubsubsec Entering figured bass - -@code{\figuremode} is used to switch the input mode to figure mode. -More information on different input modes can be -found at @ref{Input modes}. - -In figure mode, a group of bass figures is delimited by -@code{<} and @code{>}. The duration is entered after the @code{>}. - -@lilypond[verbatim,quote,ragged-right,fragment] -\new FiguredBass { - \figuremode { - <6 4>2 - } -} -@end lilypond - - -Accidentals (including naturals) can be added to figures: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -Augmented and diminished steps can be indicated: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -A backward slash through a figure (typically used for raised -sixth steps) can be created: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <6> <6\\> -} -@end lilypond - -Vertical spaces and brackets can be be included in figures: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <[12 _!] 8 [6 4]> -} -@end lilypond - -Any text markup can be inserted as a figure: - -@lilypond[verbatim,quote,ragged-right,fragment] -\figures { - <\markup { \tiny \number 6 \super (1) } 5> -} -@end lilypond - -@c NOTE: We need to include notes any time we use extenders to -@c avoid extraneous staff creation due to Staff.use... in -@c \bassFigureExtendersOn - -Continuation lines can be used to indicate repeated figures: - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - { - \clef bass - e4 d c b, - e4 d c b, - } - \figures { - \bassFigureExtendersOn - <6 4>4 <6 3> <7 3> <7 3> - \bassFigureExtendersOff - <6 4>4 <6 3> <7 3> <7 3> - } ->> -@end lilypond - -@noindent -In this case, the extender lines replace existing figures, -unless the continuation lines have been explicitly terminated. - -@lilypond[verbatim,quote,ragged-right,fragment] -<< - \figures { - \bassFigureExtendersOn - <6 4>4 <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d4 d c c - } ->> -@end lilypond - -The table below summarizes the figure modifiers available. - -@multitable @columnfractions .1 .5 .4 - -@item -@b{Modifier} -@tab -@b{Purpose} -@tab -@b{Example} - -@item -+, -, ! -@tab -Accidentals -@tab -@lilypond[line-width=4\cm] -\figures { - <7! 6+ 4-> <5++> <3--> -} -@end lilypond - -@item -\+, / -@tab -Augmented and diminished steps -@tab -@lilypond[line-width=4\cm] -\figures { - <6\+ 5/> <7/> -} -@end lilypond - -@item -\\ -@tab -Raised sixth step -@tab -@lilypond[line-width=4\cm] -\figures { - <6\\> -} -@end lilypond - -@item -\! -@tab -End of continuation line -@tab -@lilypond[line-width=4\cm] -<< - \figures { - \bassFigureExtendersOn - <6 4> <6 4> <6\! 4\!> <6 4> - } - { - \clef bass - d d c c - } ->> -@end lilypond - -@end multitable - - -@predefined -@cindex figured bass extender lines -@code{\bassFigureExtendersOn}, -@code{\bassFigureExtendersOff}. -@endpredefined - - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-positions-of-figured-bass-alterations.ly} - - -@seealso -@c Music Glossary: -@c @rglos{}. -@c -@c Learning Manual: -@c @rlearning{}. -@c -@c Notation Reference: -@c @ref{}. -@c -@c Application Usage: -@c @rprogram{}. -@c -@c Installed Files: -@c @file{}. -@c -Snippets: -@rlsr{Chords}. - -Internals Reference: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - - -@c @knownissues - - -@node Displaying figured bass -@unnumberedsubsubsec Displaying figured bass - -Figured bass can be displayed using the @code{FiguredBass} context, -or in most staff contexts. - -When displayed in a @code{FiguredBass} context, the vertical location -of the figures is independent of the notes on the staff. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \relative c'' { - c4 c'8 r8 c,4 c' - } - \new FiguredBass { - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - } ->> -@end lilypond - -@noindent -In the example above, the @code{FiguredBass} context must be -explicitly instantiated to avoid creating a second (empty) staff. - - -Figured bass can also be added to @code{Staff} contexts -directly. In this case, the vertical position of the -figures is adjusted automatically. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - - -When added in a @code{Staff} context, figured bass can be displayed above -or below the staff. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - \new Staff = myStaff - \figuremode { - <4>4 <10 6>8 s8 - \bassFigureStaffAlignmentDown - <6 4>4 <6 4> - } - %% Put notes on same Staff as figures - \context Staff = myStaff - { - \clef bass - c4 c'8 r8 c4 c' - } ->> -@end lilypond - - -@predefined -@cindex figured bass alignment -@code{\bassFigureStaffAlignmentDown}, -@code{\bassFigureStaffAlignmentUp}, -@code{\bassFigureStaffAlignmentNeutral}. -@endpredefined - - -@c @snippets - - -@seealso -@c Music Glossary: -@c @rglos{}. -@c -@c Learning Manual: -@c @rlearning{}. -@c -@c Notation Reference: -@c @ref{}. -@c -@c Application Usage: -@c @rprogram{}. -@c -@c Installed Files: -@c @file{}. -@c -Snippets: -@rlsr{Chords}. - -Internals Reference: -@rinternals{BassFigure}, -@rinternals{BassFigureAlignment}, -@rinternals{BassFigureLine}, -@rinternals{BassFigureBracket}, -@rinternals{BassFigureContinuation}, -@rinternals{FiguredBass}. - - -@knownissues - -To ensure that continuation lines work properly, it is -safest to use the same rhythm in the figure line as in -the bass line. - -@lilypond[verbatim,ragged-right,fragment,quote] -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are correct here, with the same rhythm as the bass - \repeat unfold 4 { <6 4->16. <6 4->32 } - <5>8. r16 <6>8 <6\! 5-> - } ->> -<< - { - \clef bass - \repeat unfold 4 { f16. g32 } f8. es16 d8 es - } - \figures { - \bassFigureExtendersOn - % The extenders are incorrect here, even though the timing is the same - <6 4->4 <6 4->4 - <5>8. r16 <6>8 <6\! 5-> - } ->> -@end lilypond - -When using extender lines, adjacent figures with the same number in -a different figure location can cause the figure positions to invert. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - \bassFigureExtendersOn - <6 5>4 <5\! 4> < 5 _!> <6> - } ->> -@end lilypond - -To avoid this problem, simply turn on extenders after the figure that -begins the extender line and turn them off at the end of the extender line. - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -<< - { fis4 g g, e' } - \figures { - <6 5>4 <5 4> - \bassFigureExtendersOn - < 5 _!>4 <6> - \bassFigureExtendersOff - } ->> -@end lilypond - diff --git a/Documentation/user/compile.itely b/Documentation/user/compile.itely deleted file mode 100644 index 243df4bdce..0000000000 --- a/Documentation/user/compile.itely +++ /dev/null @@ -1,511 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of install.itely and ../devel/compiling.itexi - -@c DO NOT TRANSLATE THIS FILE - -@node Compiling from source -@section Compiling from source - -@menu -* Downloading source code:: -* Requirements:: -* Building LilyPond:: -* Building documentation:: -* Testing LilyPond:: -* Problems:: -@end menu - -@node Downloading source code -@subsection Downloading source code - -Download source - -@itemize -@item tarballs from -@uref{http://lilypond.org/download/} by HTTP. -@item tarballs from -@uref{http://download.linuxaudio.org/lilypond/} by HTTP. -@item -GIT from @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=summary,git.sv.gnu.org} - -@example -git clone git://git.sv.gnu.org/lilypond.git -@end example - -The repository does not contain generated files. To create -@file{configure}, run -@example -./autogen.sh -@end example -@end itemize - -For information on packaging, see @uref{http://lilypond.org/devel}. - - -@node Requirements -@subsection Requirements - -@unnumberedsubsubsec Compilation - -In addition to the packages needed for running LilyPond (see below), you -need the following extra packages for building. - -When installing a binary package FOO, you may need to install the -FOO-devel, libFOO-dev or FOO-dev package too. - -@itemize - -@item @uref{http://fontforge.sf.net/,FontForge} 20060125 or newer. - -@item @uref{http://metafont.tutorial.free.fr/,MetaFont} (mf-nowin, mf, mfw or -mfont binaries) and @uref{http://cm.bell-labs.com/who/hobby/MetaPost.html,MetaPost} -(mpost binary), usually packaged with a @LaTeX{} distribution like -tetex or texlive. - -@item @uref{http://www.lcdf.org/~eddietwo/type/#t1utils,t1utils} -(version 1.33 or newer recommended). - -@item New Century Schoolbook fonts, as PFB files. These are shipped with -X11 and Ghostscript, and are named @file{c059033l.pfb} -@file{c059036l.pfb}, @file{c059013l.pfb} and @file{c059016l.pfb}. - -@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE} (version -1.8.2 or newer). If you are installing binary packages, you may need to -install guile-devel or guile-dev or libguile-dev too. - -@item @uref{ftp://ftp.gnu.org/gnu/texinfo/,Texinfo} (version 4.11 or newer). - -@item @uref{http://gcc.gnu.org/, The GNU c++ compiler} (version 3.4 or -newer. 4.x is strongly recommended). - -@item @uref{http://www.python.org,Python} (version 2.4 or newer) - -@item @uref{ftp://ftp.gnu.org/gnu/make/,GNU Make} (version 3.78 or newer). - -@item @uref{http://www.gnu.org/software/gettext/gettext.html,gettext} -(version 0.17 or newer). - -@item @uref{http://www.gnu.org/software/flex/,Flex}. - -@item @uref{http://www.perl.org/,Perl}. - -@item @uref{http://www.gnu.org/software/bison/,GNU Bison}. - -@item All packages required for running, including development packages with -header files and libraries. - -@end itemize - - -@unnumberedsubsubsec Running requirements - -Running LilyPond requires proper installation of the following software - -@itemize - -@item @uref{http://www.freetype.org/,Freetype} (version 2.1.10 or newer). -@item @uref{http://fontconfig.org/,FontConfig} (version 2.2 or newer). -@item @uref{http://www.pango.org/,Pango} (version 1.12 or newer). -@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE} -(version 1.8.2 or newer), or patch 1.8.1 with -@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch}. -@item @uref{http://www.python.org,Python} (version 2.4 or newer). -@item @uref{http://www.ghostscript.com,Ghostscript} (version 8.15 or -newer. 8.60 recommended) -@item Dejaview. (This is normally installed by default) -@end itemize - -International fonts are required to create music with international text -or lyrics. - - -@unnumberedsubsubsec Requirements for building documentation - -You can view the documentation online at -@uref{http://lilypond.org/doc/}, but you can also build it locally. -This process requires a successful compile of LilyPond, and some -additional tools and packages: - -@itemize -@item The @uref{http://netpbm.sourceforge.net/,netpbm utilities} -@item ImageMagick -@item International fonts (see input/regression/utf-8.ly for hints -about which font packages are necessary for your platform) -@item Ghostscript 8.60 or newer, or 8.50 with the patch from -@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688154} -and the patch from -@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688017}. -@item @uref{http://www.nongnu.org/texi2html/,Texi2HTML} 1.80 or newer -@item rsync -@end itemize - - -@node Building LilyPond -@subsection Building LilyPond - -@unnumberedsubsubsec Compiling - -To install GNU LilyPond, type - -@example -gunzip -c lilypond-x.y.z | tar xf - -cd lilypond-x.y.z -./configure # run with --help for applicable options -make -su -c 'make install' -@end example - -@noindent -If you are not root, you should choose a @code{--prefix} argument that -points into your home directory, e.g. - -@example -./configure --prefix=$HOME/usr -@end example - - -@unnumberedsubsubsec Compiling for multiple platforms - -If you want to build multiple versions of LilyPond with different -configuration settings, you can use the @code{--enable-config=CONF} -option of @command{configure}. You should use @code{make conf=CONF} -to generate the output in @file{out-CONF}. For example, suppose you -want to build with and without profiling, then use the following for -the normal build - -@example -./configure --prefix=$HOME/usr/ --enable-checking -make -make install -@end example - -and for the profiling version, specify a different configuration - -@example -./configure --prefix=$HOME/usr/ --enable-profiling --enable-config=prof --disable-checking -make conf=prof -make conf=prof install -@end example - - -@unnumberedsubsubsec Compiling outside the source tree - -It is possible to compile LilyPond in a build tree different from the -source tree, with @code{--srcdir} option of @command{configure}: - -@example -mkdir lily-build && cd lily-build -@var{sourcedir}/configure --srcdir=@var{sourcedir} - -@end example - - -@unnumberedsubsubsec Useful @command{make} variables - -If a less verbose build output if desired, the variable -@code{QUIET_BUILD} may be set to @code{1} on @command{make} command -line, or in @file{local.make} at top of the build tree. - - -@node Building documentation -@subsection Building documentation - -This requires a successful compile of LilyPond, or using an external -LilyPond binary. - -@menu -* Commands for building documentation:: Compiling and installing the documentation. -* Building documentation without compiling LilyPond:: Using a LilyPond binary already installed. -@end menu - -@node Commands for building documentation -@unnumberedsubsubsec Commands for building documentation - -The documentation is built by issuing - -@example -make doc -@end example - -After compilation, the HTML documentation tree is available in -@file{out-www/offline-root/}, and can be browsed locally. - -The HTML, PDF and if available Info files can be installed into the -standard documentation path by issuing - -@example -make install-doc -@end example - -@noindent -This also installs Info documentation with images if the installation -prefix is properly set; otherwise, instructions to complete proper -installation of Info documentation are printed on standard output. - -Compilation of documentation in Info format with images can be done -separately by issuing - -@example -make info -@end example - -@noindent -Separate installation of this documentation is done by issuing - -@example -make install-info -@end example - -@noindent -Note that to get the images in Info documentation, @code{install-doc} -target creates symbolic links to HTML and PDF installed documentation -tree in @file{@var{prefix}/share/info}, in order to save disk space, -whereas @code{install-info} copies images in -@file{@var{prefix}/share/info} subdirectories. - -It is possible to build a documentation tree in -@file{out-www/online-root/}, with special processing, so it can be -used on a website with content negotiation for automatic language -selection; this can be achieved by issuing - -@example -make WEB_TARGETS=online doc -@end example - -@noindent -and both @q{offline} and @q{online} targets can be generated by issuing - -@example -make WEB_TARGETS="offline online" doc -@end example - -Several targets are available to clean the documentation build and -help with maintaining documentation; an overview of these targets is -available with - -@example -make help -@end example - -@noindent -from every directory in the build tree. Most targets for -documentation maintenance are available from @file{Documentation/}; -@c FIXME: xref to CG -for more information, see the Contributors' Guide, section -@emph{Documentation work}. - -The makefile variable @code{QUIET_BUILD} may be set to @code{1} for a -less verbose build output, just like for building the programs. - - -@knownissues - -The most time consuming task for building the documentation is running -LilyPond to build images of music, and there cannot be several -simultaneously running @command{lilypond-book} instances, so @code{-j} -@command{make} option does not significantly speed up the build process. -To help speed it up, the makefile variable @var{CPU_COUNT} may be set -in @file{local.make} or on the command line to the number of -@code{.ly} files that LilyPond should process simultaneously, e.g. on -a bi-processor or dual core machine - -@example -make -j3 CPU_COUNT=3 doc -@end example - -@noindent -The recommended value of @var{CPU_COUNT} is one plus the number of -cores or processors, but it is advisable to set it to a smaller value -if your system has not enough RAM to run that many simultaneous -LilyPond instances. - -If source files have changed since last documentation build, output -files that need to be rebuilt are normally rebuilt, even if you do not -run @code{make doc-clean} first. However, building dependencies in the -documentation are so complex that rebuilding of some targets may not -be triggered as they should be; a workaround is to force rebuilding -by touching appropriate files, e.g. - -@example -touch Documentation/user/*.itely -touch input/lsr/*.ly -@end example - - -@node Building documentation without compiling LilyPond -@unnumberedsubsubsec Building documentation without compiling LilyPond - -The documentation can be built locally without compiling LilyPond -binary, if LilyPond is already installed on your system. - -From a fresh Git checkout, do - -@example -./autogen.sh # ignore any warning messages -cp GNUmakefile.in GNUmakefile -make -C python -nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc -@end example - -Please note that this may break sometimes -- for example, if a new -feature is added with a test file in input/regression, even the latest -development release of LilyPond will fail to build the docs. - -You may build the manual without building all the @file{input/*} -stuff: change directory, for example to @file{Documentation/user}, -issue @code{make doc}, which will build documentation in a -subdirectory @file{out-www} from the source files in current -directory. In this case, if you also want to browse the documentation -in its post-processed form, change back to top directory and issue - -@example -make out=www WWW-post -@end example - -@knownissues - -You may also need to create a script for @command{pngtopnm} and -@code{pnmtopng}. On GNU/Linux, I use this: - -@verbatim -export LD_LIBRARY_PATH=/usr/lib -exec /usr/bin/pngtopnm "$@" -@end verbatim - -On MacOS@tie{}X, I use this: - -@verbatim -export DYLD_LIBRARY_PATH=/sw/lib -exec /sw/bin/pngtopnm "$@" -@end verbatim - - - -@node Testing LilyPond -@subsection Testing LilyPond - -@html - -@end html - -LilyPond comes with an extensive suite that exercises the entire -program. This suite can be used to automatically check the impact of a -change. This is done as follows - -@example -make test-baseline -@emph{## apply your changes, compile} -make check -@end example - -This will leave an HTML page @file{out/test-results/index.html}. This -page shows all the important differences that your change introduced, -whether in the layout, MIDI, performance or error reporting. - -To rerun tests, use - -@example -make test-redo @emph{## redo files differing from baseline} -make test-clean @emph{## remove all test results} -@end example - -@noindent -and then run @code{make check} again. - -For tracking memory usage as part of this test, you will need GUILE -CVS; especially the following patch: -@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.9-gcstats.patch}. - -For checking the coverage of the test suite, do the following - -@example -./scripts/auxiliar/build-coverage.sh -@emph{# uncovered files, least covered first} -./scripts/auxiliar/coverage.py --summary out-cov/*.cc -@emph{# consecutive uncovered lines, longest first} -./scripts/auxiliar/coverage.py --uncovered out-cov/*.cc -@end example - - -@node Problems -@subsection Problems - -For help and questions use @email{lilypond-user@@gnu.org}. Send bug -reports to @email{bug-lilypond@@gnu.org}. - -Bugs that are not fault of LilyPond are documented here. - -@unnumberedsubsubsec Bison 1.875 - -There is a bug in bison-1.875: compilation fails with "parse error -before `goto'" in line 4922 due to a bug in bison. To fix, please -recompile bison 1.875 with the following fix - -@example -$ cd lily; make out/parser.cc -$ vi +4919 out/parser.cc -# append a semicolon to the line containing "__attribute__ ((__unused__)) -# save -$ make -@end example - - -@unnumberedsubsubsec Solaris - -Solaris7, ./configure - -@file{./configure} needs a POSIX compliant shell. On Solaris7, -@file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash -is. Run configure like - -@example -CONFIG_SHELL=/bin/ksh ksh -c ./configure -@end example - -@noindent -or - -@example -CONFIG_SHELL=/bin/bash bash -c ./configure -@end example - -@unnumberedsubsubsec FreeBSD - -To use system fonts, dejaview must be installed. With the default -port, the fonts are installed in @file{usr/X11R6/lib/X11/fonts/dejavu}. - -Open the file @file{$LILYPONDBASE/usr/etc/fonts/local.conf} and add the -following line just after the @code{} line. (Adjust as necessary -for your hierarchy.) - -@example -/usr/X11R6/lib/X11/fonts -@end example - - -@unnumberedsubsubsec International fonts - -On MacOS@tie{}X, all fonts are installed by default. However, finding all -system fonts requires a bit of configuration; see -@uref{http://lists.gnu.org/archive/html/lilypond-user/2007-03/msg00472.html, -this post} on the @code{lilypond-user} mailing list. - -On Linux, international fonts are installed by different means on -every distribution. We cannot list the exact commands or packages -that are necessary, as each distribution is different, and the exact -package names within each distribution changes. Here are some -hints, though: - -@verbatim -Red Hat Fedora - - taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ - ttfonts-zh_CN fonts-ja fonts-hebrew - -Debian GNU/Linux - - apt-get install emacs-intl-fonts xfonts-intl-.* \ - ttf-kochi-gothic ttf-kochi-mincho \ - xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi -@end verbatim - diff --git a/Documentation/user/converters.itely b/Documentation/user/converters.itely deleted file mode 100644 index 5c7a6f6187..0000000000 --- a/Documentation/user/converters.itely +++ /dev/null @@ -1,342 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Converting from other formats -@chapter Converting from other formats - -Music can be entered also by importing it from other formats. This -chapter documents the tools included in the distribution to do so. -There are other tools that produce LilyPond input, for example GUI -sequencers and XML converters. Refer to the -@uref{http://@/lilypond@/.org,website} for more details. - -These are separate programs from @command{lilypond} itself, and are -run on the command line; see @ref{Command-line usage} for more -information. If you have MacOS 10.3 or 10.4 and you have trouble -running some of these scripts, e.g. @code{convert-ly}, see @ref{Setup -for MacOS X}. - - -@knownissues -We unfortunately do not have the resources to maintain these -programs; please consider them @qq{as-is}. Patches are appreciated, but -bug reports will almost certainly not be resolved. - -@menu -* Invoking midi2ly:: Importing MIDI. -* Invoking musicxml2ly:: Importing MusicXML. -* Invoking abc2ly:: Importing ABC. -* Invoking etf2ly:: Importing Finale. -* Generating LilyPond files:: GUIs, transcribers, and algorithmic composition programs. -@end menu - - - -@node Invoking midi2ly -@section Invoking @command{midi2ly} - -@cindex MIDI - -@command{midi2ly} translates a Type@tie{}1 MIDI file to a LilyPond source -file. - -MIDI (Music Instrument Digital Interface) is a standard for digital -instruments: it specifies cabling, a serial protocol and a file -format. The MIDI file format is a de facto standard format for -exporting music from other programs, so this capability may come in -useful when importing files from a program that has a converter for a -direct format. - -@command{midi2ly} converts tracks into @rinternals{Staff} and -channels into @rinternals{Voice} contexts. Relative mode is used -for pitches, durations are only written when necessary. - -It is possible to record a MIDI file using a digital keyboard, and -then convert it to @file{.ly}. However, human players are not -rhythmically exact enough to make a MIDI to LY conversion trivial. -When invoked with quantizing (@code{-s} and @code{-d} options) -@command{midi2ly} tries to compensate for these timing errors, but is not -very good at this. It is therefore not recommended to use @command{midi2ly} -for human-generated midi files. - - -It is invoked from the command-line as follows, -@example -midi2ly [@var{option}]@dots{} @var{midi-file} -@end example - -Note that by @q{command-line}, we mean the command line of the -operating system. See @ref{Converting from other formats}, for -more information about this. - -The following options are supported by @command{midi2ly}. - -@table @code -@item -a, --absolute-pitches -Print absolute pitches. - -@item -d, --duration-quant=@var{DUR} -Quantize note durations on @var{DUR}. - -@item -e, --explicit-durations -Print explicit durations. - -@item -h,--help -Show summary of usage. - -@item -k, --key=@var{acc}[:@var{minor}] -Set default key. @math{@var{acc} > 0} sets number of sharps; -@math{@var{acc} < 0} sets number of flats. A minor key is indicated by -@code{:1}. - -@item -o, --output=@var{file} -Write output to @var{file}. - -@item -s, --start-quant=@var{DUR} -Quantize note starts on @var{DUR}. - -@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} -Allow tuplet durations @var{DUR}*@var{NUM}/@var{DEN}. - -@item -v, --verbose -Be verbose. - -@item -V, --version -Print version number. - -@item -w, --warranty -Show warranty and copyright. - -@item -x, --text-lyrics -Treat every text as a lyric. -@end table - - -@knownissues - -Overlapping notes in an arpeggio will not be correctly rendered. The -first note will be read and the others will be ignored. Set them all -to a single duration and add phrase markings or pedal indicators. - - -@node Invoking musicxml2ly -@section Invoking @code{musicxml2ly} - -@cindex MusicXML - -@uref{http://@/www.@/musicxml@/.org/,MusicXML} is an XML dialect -for representing music notation. - -@command{musicxml2ly} extracts the notes, articulations, score structure, -lyrics, etc. from part-wise MusicXML files, and writes them to a .ly -file. It is invoked from the command-line. - - -It is invoked from the command-line as follows, -@example -musicxml2ly [@var{option}]@dots{} @var{xml-file} -@end example - -Note that by @q{command-line}, we mean the command line of the -operating system. See @ref{Converting from other formats}, for -more information about this. - -If the given filename is @file{-}, @command{musicxml2ly} reads input -from the command line. - -The following options are supported by @command{musicxml2ly}: - -@table @code -@item -a, --absolute -convert pitches in absolute mode. - -@item -h,--help -print usage and option summary. - -@item -l, --language=LANG -use a different language file 'LANG.ly' and corresponding pitch names, -e.g. 'deutsch' for deutsch.ly and German note names. - -@item --lxml -use the lxml.etree Python package for XML-parsing; uses less memory and cpu time. - -@item --nd --no-articulation-directions -do not convert directions (@code{^}, @code{_} or @code{-}) for -articulations, dynamics, etc. - -@item --no-beaming -do not convert beaming information, use LilyPond's automatic -beaming instead. - -@item -o,--output=@var{file} -set output filename to @var{file}. If @var{file} is @file{-}, the output -will be printed on stdout. If not given, @var{xml-file}@file{.ly} will -be used. - -@item -r,--relative -convert pitches in relative mode (default). - -@item -v,--verbose -be verbose. - -@item --version -print version information. - -@item -z,--compressed -input file is a zip-compressed MusicXML file. -@end table - - -@node Invoking abc2ly -@section Invoking @code{abc2ly} - -@cindex ABC - -ABC is a fairly simple ASCII based format. It is described at the ABC site: - -@quotation -@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. -@end quotation - -@command{abc2ly} translates from ABC to LilyPond. It is invoked as follows: - -@example -abc2ly [@var{option}]@dots{} @var{abc-file} -@end example - -The following options are supported by @command{abc2ly}: - -@table @code -@item -b,--beams=None -preserve ABC's notion of beams -@item -h,--help -this help -@item -o,--output=@var{file} -set output filename to @var{file}. -@item -s,--strict -be strict about success -@item --version -print version information. -@end table - -There is a rudimentary facility for adding LilyPond code to the ABC -source file. If you say: - -@example -%%LY voices \set autoBeaming = ##f -@end example - -This will cause the text following the keyword @q{voices} to be inserted -into the current voice of the LilyPond output file. - -Similarly, - -@example -%%LY slyrics more words -@end example - -will cause the text following the @q{slyrics} keyword to be inserted -into the current line of lyrics. - - -@knownissues - -The ABC standard is not very @q{standard}. For extended features -(e.g., polyphonic music) different conventions exist. - -Multiple tunes in one file cannot be converted. - -ABC synchronizes words and notes at the beginning of a line; -@command{abc2ly} does not. - -@command{abc2ly} ignores the ABC beaming. - - -@node Invoking etf2ly -@section Invoking @command{etf2ly} - -@cindex ETF -@cindex enigma -@cindex Finale -@cindex Coda Technology - -ETF (Enigma Transport Format) is a format used by Coda Music -Technology's Finale product. @command{etf2ly} will convert part of an ETF -file to a ready-to-use LilyPond file. - -It is invoked from the command-line as follows. - -@example -etf2ly [@var{option}]@dots{} @var{etf-file} -@end example - -Note that by @q{command-line}, we mean the command line of the -operating system. See @ref{Converting from other formats}, for -more information about this. - -The following options are supported by @command{etf2ly}: - -@table @code -@item -h,--help -this help -@item -o,--output=@var{FILE} -set output filename to @var{FILE} -@item --version -version information -@end table - - -@knownissues - -The list of articulation scripts is incomplete. Empty measures -confuse @command{etf2ly}. Sequences of grace notes are ended improperly. - - -@node Generating LilyPond files -@section Generating LilyPond files - -@cindex External programs, generating LilyPond files - -LilyPond itself does not come with support for any other formats, but -there are some external tools that also generate LilyPond files. - -These tools include - -@itemize -@item -@uref{http://@/www@/.denemo@/.org/,Denemo}, a graphical score editor. -@item -@uref{http://www@/.volny@/.cz/smilauer/rumor/rumor@/.html,Rumor}, a realtime -monophonic MIDI to LilyPond converter. -@item -@uref{http://nicolas@/.sceaux@/.free@/.fr/lilypond/lyqi@/.html,lyqi}, an -Emacs major mode. -@item -@uref{http://@/www@/.nongnu@/.org/@/xml2ly/,xml2ly}, which imports -@uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} -@item -@uref{http://@/noteedit@/.berlios@/.de,NoteEdit} -which imports @uref{http://@/www@/.musicxml@/.com/xml@/.html,MusicXML} -@item -@uref{http://@/www@/.rosegardenmusic@/.com,Rosegarden}, -which imports MIDI -@item -@uref{http://@/common-lisp@/.net/project/fomus/,FOMUS}, -a LISP library to generate music notation -@item -@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml}, -has experimental export for LilyPond. -@item -@uref{http://www.tuxguitar.com.ar/}, can export to LilyPond. -@item -@uref{http://musescore.org} can also export to LilyPond. -@end itemize - diff --git a/Documentation/user/dedication.itely b/Documentation/user/dedication.itely deleted file mode 100644 index cc0b4598e5..0000000000 --- a/Documentation/user/dedication.itely +++ /dev/null @@ -1,17 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@quotation -We want to dedicate this program to all the friends that we -met through music. - -Han-Wen and Jan -@end quotation diff --git a/Documentation/user/editorial.itely b/Documentation/user/editorial.itely deleted file mode 100644 index 556db2dc66..0000000000 --- a/Documentation/user/editorial.itely +++ /dev/null @@ -1,697 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Editorial annotations -@section Editorial annotations - -@lilypondfile[quote]{editorial-headword.ly} - -This section discusses the various ways to change the appearance of -notes and add analysis or educational emphasis. - -@menu -* Inside the staff:: -* Outside the staff:: -@end menu - - -@node Inside the staff -@subsection Inside the staff - -This section discusses how to add emphasis to elements that are -inside the staff. - -@menu -* Selecting notation font size:: -* Fingering instructions:: -* Hidden notes:: -* Coloring objects:: -* Parentheses:: -* Stems:: -@end menu - -@node Selecting notation font size -@unnumberedsubsubsec Selecting notation font size - -@cindex font size (notation) scaling -@cindex font size (notation) -@cindex selecting font size (notation) -@cindex notation font size -@cindex note heads - -@funindex fontSize -@funindex font-size -@funindex magstep -@funindex \huge -@funindex \large -@funindex \normalsize -@funindex \small -@funindex \tiny -@funindex \teeny -@funindex huge -@funindex large -@funindex normalsize -@funindex small -@funindex tiny -@funindex teeny - -The font size of notation elements may be altered. It does not -change the size of variable symbols, such as beams or slurs. - -@warning{For font sizes of text, see -@ref{Selecting font and font size}.} - -@lilypond[verbatim,quote,relative=2] -\huge -c4.-> d8---3 -\large -c4.-> d8---3 -\normalsize -c4.-> d8---3 -\small -c4.-> d8---3 -\tiny -c4.-> d8---3 -\teeny -c4.-> d8---3 -@end lilypond - -Internally, this sets the @code{fontSize} property. This in turn -causes the @code{font-size} property to be set in all layout -objects. The value of @code{font-size} is a number indicating the -size relative to the standard size for the current staff height. -Each step up is an increase of approximately 12% of the font size. -Six steps is exactly a factor of two. The Scheme function -@code{magstep} converts a @code{font-size} number to a scaling -factor. The @code{font-size} property can also be set directly, -so that only certain layout objects are affected. - -@lilypond[verbatim,quote,relative=2] -\set fontSize = #3 -c4.-> d8---3 -\override NoteHead #'font-size = #-4 -c4.-> d8---3 -\override Script #'font-size = #2 -c4.-> d8---3 -\override Stem #'font-size = #-5 -c4.-> d8---3 -@end lilypond - -@cindex standard font size (notation) -@cindex font size (notation), standard - -@funindex font-interface -@funindex font-size - -Font size changes are achieved by scaling the design size that is -closest to the desired size. The standard font size (for -@w{@code{font-size = #0}}) depends on the standard staff height. -For a 20pt staff, a 10pt font is selected. - -The @code{font-size} property can only be set on layout objects -that use fonts. These are the ones supporting the -@code{font-interface} layout interface. - - -@predefined -@code{\teeny}, -@code{\tiny}, -@code{\small}, -@code{\normalsize}, -@code{\large}, -@code{\huge}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{font-interface}. - - -@node Fingering instructions -@unnumberedsubsubsec Fingering instructions - -@cindex fingering -@cindex finger change - -@funindex \finger -@funindex finger - -Fingering instructions can be entered using -@var{note}-@var{digit}: - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 e-3 -@end lilypond - -Markup texts may be used for finger changes. - -@lilypond[verbatim,quote,relative=2] -c4-1 d-2 f-4 c^\markup { \finger "2 - 3" } -@end lilypond - -@cindex thumb-script - -@funindex \thumb -@funindex thumb - -A thumb-script can be added (e.g., in cello music) to indicate -that a note should be played with the thumb. - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -@cindex fingering chords -@cindex fingering instructions for chords -@cindex chords, fingering - -Fingerings for chords can also be added to individual notes of the -chord by adding them after the pitches. - -@lilypond[verbatim,quote,relative=2] -2 -@end lilypond - -Fingering instructions may be manually placed above or below the -staff, see @ref{Direction and placement}. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{avoiding-collisions-with-chord-fingerings.ly} - - -@seealso -Notation Reference: -@ref{Direction and placement} - -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{FingeringEvent}, -@rinternals{fingering-event}, -@rinternals{Fingering_engraver}, -@rinternals{New_fingering_engraver}, -@rinternals{Fingering}. - - -@node Hidden notes -@unnumberedsubsubsec Hidden notes - -@cindex hidden notes -@cindex invisible notes -@cindex transparent notes -@cindex notes, hidden -@cindex notes, invisible -@cindex notes, transparent - -@funindex \hideNotes -@funindex hideNotes -@funindex \unHideNotes -@funindex unHideNotes - -Hidden (or invisible or transparent) notes can be useful in -preparing theory or composition exercises. - -@lilypond[verbatim,quote,relative=2] -c4 d -\hideNotes -e4 f -\unHideNotes -g a -\hideNotes -b -\unHideNotes -c -@end lilypond - -Notation objects which are attached to invisible notes are still -visible. - -@lilypond[verbatim,quote,relative=2] -c4( d) -\hideNotes -e4(\p f)-- -@end lilypond - - -@predefined -@code{\hideNotes}, -@code{\unHideNotes}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Note_spacing_engraver}, -@rinternals{NoteSpacing}. - - -@node Coloring objects -@unnumberedsubsubsec Coloring objects - -@cindex colored objects -@cindex objects, colored -@cindex colors -@cindex coloring objects -@cindex colored notes -@cindex coloring notes -@cindex notes, colored -@cindex x11 color -@cindex x11-color -@cindex with-color - -@funindex color -@funindex \with-color -@funindex with-color -@funindex x11-color - -Individual objects may be assigned colors. Valid color names -are listed in the @ref{List of colors}. - -@lilypond[verbatim,quote,relative=2] -\override NoteHead #'color = #red -c4 c -\override NoteHead #'color = #(x11-color 'LimeGreen) -d -\override Stem #'color = #blue -e -@end lilypond - - -The full range of colors defined for X11 can be accessed by using -the Scheme function @code{x11-color}. The function takes one -argument; this can be a symbol in the form @var{'FooBar} or a -string in the form @var{"FooBar"}. The first form is quicker to -write and is more efficient. However, using the second form it is -possible to access X11 colors by the multi-word form of its name. - -If @code{x11-color} cannot make sense of the parameter then the -color returned defaults to black. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -gis8 a -\override Beam #'color = #(x11-color "medium turquoise") -gis a -\override Accidental #'color = #(x11-color 'DarkRed) -gis a -\override NoteHead #'color = #(x11-color "LimeGreen") -gis a -% this is deliberate nonsense; note that the stems remain black -\override Stem #'color = #(x11-color 'Boggle) -b2 cis -@end lilypond - -@cindex rgb-color -@cindex color, rgb -@cindex rgb color - -@funindex rgb-color - -Exact RGB colors can be specified using the Scheme function -@code{rgb-color}. - -@lilypond[verbatim,quote,relative=2] -\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2) -\set Staff.instrumentName = \markup { - \with-color #(x11-color 'navy) "Clarinet" -} - -\override Stem #'color = #(rgb-color 0 0 0) -gis8 a -\override Stem #'color = #(rgb-color 1 1 1) -gis8 a -\override Stem #'color = #(rgb-color 0 0 0.5) -gis4 a -@end lilypond - - -@seealso -Notation Reference: -@ref{List of colors}, @ref{The -tweak command}. - -Snippets: -@rlsr{Editorial annotations}. - - -@cindex x11 color -@cindex colored notes in chords -@cindex notes, colored in chords -@cindex color in chords - -@funindex x11-color - -@knownissues -An X11 color is not necessarily exactly the same shade as a -similarly named normal color. - -Not all X11 colors are distinguishable in a web browser, i.e., -a web browser might not display a difference between @code{'LimeGreen} -and @code{'ForestGreen}. For web use normal colors are recommended -(i.e., @code{#blue}, @code{#green}, @code{#red}). - - -Notes in a chord cannot be colored with @code{\override}; use -@code{\tweak} instead, see @ref{The tweak command}. - - -@node Parentheses -@unnumberedsubsubsec Parentheses - -@cindex ghost notes -@cindex notes, ghost -@cindex notes, parenthesized -@cindex parentheses - -@funindex \parenthesize -@funindex parenthesize - -Objects may be parenthesized by prefixing @code{\parenthesize} to -the music event. When prefixed to a chord, it parenthesizes every -note. Individual notes inside a chord may also be parenthesized. - -@lilypond[verbatim,quote,relative=2] -c2 \parenthesize d -c2 \parenthesize -c2 -@end lilypond - -Non-note objects may be parenthesized as well. For articulations, -a hyphen is needed before the @code{\parenthesize} command. - -@lilypond[verbatim,quote,relative=2] -c2-\parenthesize -. d -c2 \parenthesize r -@end lilypond - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Parenthesis_engraver}, -@rinternals{ParenthesesItem}, -@rinternals{parentheses-interface}. - - -@knownissues - -Parenthesizing a chord prints parentheses around each individual -note, instead of a single large parenthesis around the entire -chord. - - -@node Stems -@unnumberedsubsubsec Stems - -@cindex stem -@cindex stem, invisible -@cindex invisible stem - -@funindex \stemUp -@funindex stemUp -@funindex \stemDown -@funindex stemDown -@funindex \stemNeutral -@funindex stemNeutral -@cindex stem, direction -@cindex stem, up -@cindex stem, down -@cindex stem, neutral - -Whenever a note is found, a @code{Stem} object is created -automatically. For whole notes and rests, they are also created but -made invisible. - - -@predefined -@code{\stemUp}, -@code{\stemDown}, -@code{\stemNeutral}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{default-direction-of-stems-on-the-center-line-of-the-staff.ly} - - -@seealso -Notation Reference: -@ref{Direction and placement}. - -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Stem_engraver}, -@rinternals{Stem}, -@rinternals{stem-interface}. - - -@node Outside the staff -@subsection Outside the staff - -This section discusses how to add emphasis to elements in the staff -from outside of the staff. - -@menu -* Balloon help:: -* Grid lines:: -* Analysis brackets:: -@end menu - -@node Balloon help -@unnumberedsubsubsec Balloon help - -@cindex balloon -@cindex notation, explaining -@cindex balloon help -@cindex help, balloon - -@funindex \balloonGrobText -@funindex \balloonText -@funindex Balloon_engraver -@funindex balloonGrobText -@funindex balloonText -@funindex \balloonLengthOn -@funindex balloonLengthOn -@funindex \balloonLengthOff -@funindex balloonLengthOff - -Elements of notation can be marked and named with the help of a -square balloon. The primary purpose of this feature is to explain -notation. - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } - r - 2. -} -@end lilypond - - -There are two music functions, @code{balloonGrobText} and -@code{balloonText}; the former is used like -@w{@code{\once \override}} to attach text to any grob, and the -latter is used like @code{\tweak}, typically within chords, to -attach text to an individual note. - -Balloon text normally influences note spacing, but this can be -altered: - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { \consists "Balloon_engraver" } -{ - \balloonLengthOff - \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } - a8 - \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" } - r - \balloonLengthOn - 2. -} -@end lilypond - - -@predefined -@code{\balloonLengthOn}, -@code{\balloonLengthOff}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Balloon_engraver}, -@rinternals{BalloonTextItem}, -@rinternals{balloon-interface}. - - -@node Grid lines -@unnumberedsubsubsec Grid lines - -@cindex grid lines -@cindex lines, grid -@cindex vertical lines between staves -@cindex lines, vertical between staves - -@funindex Grid_point_engraver -@funindex Grid_line_span_engraver -@funindex gridInterval - -Vertical lines can be drawn between staves synchronized with the -notes. - -The @code{Grid_point_engraver} must be used to create the end -points of the lines, while the @code{Grid_line_span_engraver} must -be used to actually draw the lines. By default this centers grid -lines horizontally below and to the left side of each note head. -Grid lines extend from the middle lines of each staff. The -@code{gridInterval} must specify the duration between the grid -lines. - -@lilypond[verbatim,quote] -\layout { - \context { - \Staff - \consists "Grid_point_engraver" - gridInterval = #(ly:make-moment 1 4) - } - \context { - \Score - \consists "Grid_line_span_engraver" - } -} - -\score { - \new ChoirStaff << - \new Staff \relative c'' { - \stemUp - c4. d8 e8 f g4 - } - \new Staff \relative c { - \clef bass - \stemDown - c4 g' f e - } - >> -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grid-lines--changing-their-appearance.ly} - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Grid_line_span_engraver}, -@rinternals{Grid_point_engraver}, -@rinternals{GridLine}, -@rinternals{GridPoint}, -@rinternals{grid-line-interface}, -@rinternals{grid-point-interface}. - - -@node Analysis brackets -@unnumberedsubsubsec Analysis brackets - -@cindex brackets -@cindex bracket, phrasing -@cindex phrasing bracket -@cindex musicological analysis -@cindex analysis, musicological -@cindex note grouping bracket -@cindex horizontal bracket -@cindex bracket, horizontal - -@funindex Horizontal_bracket_engraver -@funindex \startGroup -@funindex startGroup -@funindex \stopGroup -@funindex stopGroup - -Brackets are used in musical analysis to indicate structure in musical -pieces. Simple horizontal brackets are supported. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c2\startGroup - d\stopGroup -} -@end lilypond - -Analysis brackets may be nested. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - c4\startGroup\startGroup - d4\stopGroup - e4\startGroup - d4\stopGroup\stopGroup -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Editorial annotations}. - -Internals Reference: -@rinternals{Horizontal_bracket_engraver}, -@rinternals{HorizontalBracket}, -@rinternals{horizontal-bracket-interface}, -@rinternals{Staff}. - diff --git a/Documentation/user/expressive.itely b/Documentation/user/expressive.itely deleted file mode 100644 index e0003fc452..0000000000 --- a/Documentation/user/expressive.itely +++ /dev/null @@ -1,1040 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Expressive marks -@section Expressive marks - -@lilypondfile[quote]{expressive-headword.ly} - -This section lists various expressive marks that can be -created in a score. - -@menu -* Attached to notes:: -* Curves:: -* Lines:: -@end menu - - -@node Attached to notes -@subsection Attached to notes - -This section explains how to create expressive marks that are -attached to notes: articulations, ornamentations, and dynamics. -Methods to create new dynamic markings are also discussed. - -@menu -* Articulations and ornamentations:: -* Dynamics:: -* New dynamic marks:: -@end menu - -@node Articulations and ornamentations -@unnumberedsubsubsec Articulations and ornamentations - -@cindex articulations -@cindex ornamentation -@cindex scripts -@cindex ornaments -@cindex espressivo -@cindex fermata -@cindex upbow -@cindex downbow -@cindex foot marks -@cindex organ pedal marks -@cindex pedal marks, organ -@cindex turn -@cindex open -@cindex stopped -@cindex flageolet -@cindex reverseturn -@cindex trill -@cindex prall -@cindex mordent -@cindex prallprall -@cindex prallmordent -@cindex prall, up -@cindex prall, down -@cindex thumb marking -@cindex segno -@cindex coda -@cindex varcoda - -@funindex - - -A variety of symbols that denote articulations, ornamentations, -and other performance indications can be attached to a note using -this syntax: - -@example -@var{note}\@var{name} -@end example - -The possible values for @var{name} are listed in @ref{List of -articulations}. For example: - -@lilypond[verbatim,quote,relative=2] -c4\staccato c\mordent b2\turn -c1\fermata -@end lilypond - -@cindex marcato -@cindex tenuto -@cindex staccatissimo -@cindex accent -@cindex staccato -@cindex portato - -Some of these articulations have shorthands for easier entry. -Shorthands are appended to the note name, and their syntax -consists of a dash @code{-} followed by a symbol signifying the -articulation. Predefined shorthands exist for @notation{marcato}, -@notation{stopped}, @notation{tenuto}, @notation{staccatissimo}, -@notation{accent}, @notation{staccato}, and @notation{portato}. -Their corresponding output appears as follows: - -@lilypond[verbatim,quote,relative=2] -c4-^ c-+ c-- c-| -c4-> c-. c2-_ -@end lilypond - -The rules for the default placement of articulations are defined -in @file{scm/@/script@/.scm}. Articulations and ornamentations -may be manually placed above or below the staff, see -@ref{Direction and placement}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{modifying-default-values-for-articulation-shorthand-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-vertical-ordering-of-scripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-a-delayed-turn.ly} - -@seealso -Music Glossary: -@rglos{tenuto}, -@rglos{accent}, -@rglos{staccato}, -@rglos{portato}. - -Notation Reference: -@ref{Direction and placement}, -@ref{List of articulations}, -@ref{Trills}. - -Installed Files: -@file{scm/@/script@/.scm}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Script}, -@rinternals{TextScript}. - - -@node Dynamics -@unnumberedsubsubsec Dynamics - -@cindex absolute dynamics -@cindex dynamics -@cindex dynamics, absolute - -@funindex \ppppp -@funindex ppppp -@funindex \pppp -@funindex pppp -@funindex \ppp -@funindex ppp -@funindex \pp -@funindex pp -@funindex \p -@funindex p -@funindex \mp -@funindex mp -@funindex \mf -@funindex mf -@funindex \f -@funindex f -@funindex \ff -@funindex ff -@funindex \fff -@funindex fff -@funindex \ffff -@funindex ffff -@funindex \fp -@funindex fp -@funindex \sf -@funindex sf -@funindex \sff -@funindex sff -@funindex \sp -@funindex sp -@funindex \spp -@funindex spp -@funindex \sfz -@funindex sfz -@funindex \rfz -@funindex rfz - -Absolute dynamic marks are specified using a command after a note, -such as @code{c4\ff}. The available dynamic marks are -@code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, @code{\p}, -@code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff}, -@code{\ffff}, @code{\fp}, @code{\sf}, @code{\sff}, @code{\sp}, -@code{\spp}, @code{\sfz}, and @code{\rfz}. The dynamic marks may -be manually placed above or below the staff, see -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2\ppp c\mp -c2\rfz c^\mf -c2_\spp c^\ff -@end lilypond - -@cindex hairpin -@cindex crescendo -@cindex decrescendo -@cindex diminuendo - -@funindex \< -@funindex \> -@funindex \! -@funindex \cr -@funindex cr -@funindex \decr -@funindex decr - -A @notation{crescendo} mark is started with @code{\<} and -terminated with @code{\!}, an absolute dynamic, or an additional -crescendo or decrescendo mark. A @notation{decrescendo} mark is -started with @code{\>} and is also terminated with @code{\!}, an -absolute dynamic, or another crescendo or decrescendo mark. -@code{\cr} and @code{\decr} may be used instead of @code{\<} and -@code{\>}. @notation{Hairpins} are engraved by default using this -notation. - -@lilypond[verbatim,quote,relative=2] -c2\< c\! -d2\< d\f -e2\< e\> -f2\> f\! -e2\> e\mp -d2\> d\> -c1\! -@end lilypond - -Spacer rests are needed to engrave multiple marks on one note. - -@cindex multiple dynamic marks on one note -@cindex dynamic marks, multiple on one note - -@lilypond[verbatim,quote,relative=2] -c4\< c\! d\> e\! -<< f1 { s4 s4\< s4\> s4\! } >> -@end lilypond - -@cindex espressivo articulation - -@funindex \espressivo -@funindex espressivo - -In some situations the @code{\espressivo} articulation mark may be -the appropriate choice to indicate a crescendo and decrescendo on -one note: - -@lilypond[verbatim,quote,relative=2] -c2 b4 a -g1\espressivo -@end lilypond - - -@funindex \crescTextCresc -@funindex crescTextCresc -@funindex \dimTextDecresc -@funindex dimTextDecresc -@funindex \dimTextDecr -@funindex dimTextDecr -@funindex \dimTextDim -@funindex dimTextDim -@funindex \crescHairpin -@funindex crescHairpin -@funindex \dimHairpin -@funindex dimHairpin - -Crescendos and decrescendos can be engraved as textual markings -instead of hairpins. Dashed lines are printed to indicate their -extent. The built-in commands that enable these text modes are -@code{\crescTextCresc}, @code{\dimTextDecresc}, -@code{\dimTextDecr}, and @code{\dimTextDim}. The corresponding -@code{\crescHairpin} and @code{\dimHairpin} commands will revert -to hairpins again: - -@lilypond[verbatim,quote,relative=2] -\crescTextCresc -c2\< d | e f\! -\dimTextDecresc -e2\> d | c b\! -\crescHairpin -c2\< d | e f\! -\dimHairpin -e2\> d\! -@end lilypond - - -To create new absolute dynamic marks or text that should be -aligned with dynamics, see @ref{New dynamic marks}. - -@cindex dynamics, vertical positioning -@cindex vertical positioning of dynamics - -@funindex DynamicLineSpanner - - -Vertical positioning of dynamics is handled by -@rinternals{DynamicLineSpanner}. -@funindex \dynamicUp -@funindex dynamicUp -@funindex \dynamicDown -@funindex dynamicDown -@funindex \dynamicNeutral -@funindex dynamicNeutral - - -@predefined -@code{\dynamicUp}, -@code{\dynamicDown}, -@code{\dynamicNeutral}, -@code{\crescTextCresc}, -@code{\dimTextDim}, -@code{\dimTextDecr}, -@code{\dimTextDecresc}, -@code{\crescHairpin}, -@code{\dimHairpin}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-hairpin-behavior-at-bar-lines.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{setting-the-minimum-length-of-hairpins.ly} - -@cindex al niente -@cindex niente, al - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-hairpins-using-al-niente-notation.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligned-dynamics-and-textscripts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{hiding-the-extender-line-for-text-dynamics.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-text-and-spanner-styles-for-text-dynamics.ly} - - -@seealso -Music Glossary: -@rglos{al niente}, -@rglos{crescendo}, -@rglos{decrescendo}, -@rglos{hairpin}. - -Learning Manual: -@rlearning{Articulation and dynamics}. - -Notation Reference: -@ref{Direction and placement}, -@ref{New dynamic marks}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{DynamicText}, -@rinternals{Hairpin}, -@rinternals{DynamicLineSpanner}. - - -@node New dynamic marks -@unnumberedsubsubsec New dynamic marks - -@cindex new dynamic marks -@cindex dynamic marks, new - -The easiest way to create dynamic indications is to use -@code{\markup} objects. - -@lilypond[verbatim,quote] -moltoF = \markup { molto \dynamic f } - -\relative c' { - 16_\moltoF - 2.. -} -@end lilypond - -@cindex dynamics, editorial -@cindex dynamics, parenthesis -@cindex editorial dynamics -@funindex \bracket -@funindex bracket -@funindex \dynamic -@funindex dynamic - -In markup mode, editorial dynamics (within parentheses or square -brackets) can be created. The syntax for markup mode is described -in @ref{Formatting text}. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { \bold { \italic ( } - \dynamic f \bold { \italic ) } } } -boxF = \markup { \bracket { \dynamic f } } -\relative c' { - c1_\roundF - c1_\boxF -} -@end lilypond - -@cindex make-dynamic-script -@funindex make-dynamic-script - -Simple, centered dynamic marks are easily created with the -@code{make-dynamic-script} function. The dynamic font only -contains the characters @code{f,m,p,r,s} and @code{z}. - -@lilypond[verbatim,quote] -sfzp = #(make-dynamic-script "sfzp") -\relative c' { - c4 c c\sfzp c -} -@end lilypond - -In general, @code{make-dynamic-script} takes any markup object as -its argument. In the following example, using -@code{make-dynamic-script} ensures the vertical alignment of -markup objects and hairpins that are attached to the same note -head. - -@lilypond[verbatim,quote] -roundF = \markup { \center-align \concat { - \normal-text { \bold { \italic ( } } - \dynamic f - \normal-text { \bold { \italic ) } } } } -boxF = \markup { \bracket { \dynamic f } } -roundFdynamic = #(make-dynamic-script roundF) -boxFdynamic = #(make-dynamic-script boxF) -\relative c' { - c4_\roundFdynamic\< d e f - g,1_\boxFdynamic -} -@end lilypond - -The Scheme form of markup mode may be used instead. Its syntax is -explained in @ref{Markup construction in Scheme}. - -@lilypond[verbatim,quote] -moltoF = #(make-dynamic-script - (markup #:normal-text "molto" - #:dynamic "f")) -\relative c' { - 16 - 2..\moltoF -} -@end lilypond - -Font settings in markup mode are described in -@ref{Selecting font and font size}. - - -@seealso -Notation Reference: -@ref{Formatting text}, -@ref{Selecting font and font size}, -@ref{Markup construction in Scheme}, -@ref{What goes into the MIDI output?}, -@ref{Controlling MIDI dynamics}. - -Snippets: -@rlsr{Expressive marks}. - - -@node Curves -@subsection Curves - -This section explains how to create various expressive marks that -are curved: normal slurs, phrasing slurs, breath marks, falls, and -doits. - -@menu -* Slurs:: -* Phrasing slurs:: -* Breath marks:: -* Falls and doits:: -@end menu - -@node Slurs -@unnumberedsubsubsec Slurs - -@cindex slurs - -@notation{Slurs} are entered using parentheses: - -@lilypond[verbatim,quote,relative=2] -f4( g a) a8 b( -a4 g2 f4) -2( 2) -@end lilypond - -@cindex slurs, manual placement -@cindex slurs, below notes -@cindex slurs, above notes -@funindex \slurDown -@funindex slurDown -@funindex \slurNeutral -@funindex slurNeutral - -Slurs may be manually placed above or below the notes, see -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=2] -c2( d) -\slurDown -c2( d) -\slurNeutral -c2( d) -@end lilypond - -@cindex phrasing slur -@cindex multiple slurs -@cindex simultaneous slurs -@cindex slur, phrasing -@cindex slurs, multiple -@cindex slurs, simultaneous - -Simultaneous or overlapping slurs are not permitted, but a phrasing -slur can overlap a slur. This permits two slurs to be printed at -once. For details, see @ref{Phrasing slurs}. - -@cindex slur style -@cindex solid slur -@cindex dotted slur -@cindex dashed slur -@cindex slur, solid -@cindex slur, dotted -@cindex slur, dashed -@cindex solid slur -@cindex dotted slur -@cindex dashed slur -@cindex sytle, slur -@funindex \slurDashed -@funindex slurDashed -@funindex \slurDotted -@funindex slurDotted -@funindex \slurSolid -@funindex slurSolid - -Slurs can be solid, dotted, or dashed. Solid is the default slur -style: - -@lilypond[verbatim,quote,relative=1] -c4( e g2) -\slurDashed -g4( e c2) -\slurDotted -c4( e g2) -\slurSolid -g4( e c2) -@end lilypond - -@funindex \slurUp -@funindex slurUp - - -@predefined -@code{\slurUp}, -@code{\slurDown}, -@code{\slurNeutral}, -@code{\slurDashed}, -@code{\slurDotted}, -@code{\slurSolid}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{using-double-slurs-for-legato-chords.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{positioning-text-markups-inside-slurs.ly} - -@seealso -Music Glossary: -@rglos{slur}. - -Learning Manual: -@rlearning{On the un-nestedness of brackets and ties}. - -Notation Reference: -@ref{Direction and placement}, -@ref{Phrasing slurs}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Slur}. - - -@node Phrasing slurs -@unnumberedsubsubsec Phrasing slurs - -@cindex phrasing slurs -@cindex phrasing marks -@cindex slur, phrasing -@cindex mark, phrasing -@funindex \( -@funindex \) - -@notation{Phrasing slurs} (or phrasing marks) that indicate a -musical sentence are written using the commands @code{\(} and -@code{\)} respectively: - -@lilypond[verbatim,quote,relative=2] -c4\( d( e) f( -e2) d\) -@end lilypond - -@funindex \phrasingSlurUp -@funindex phrasingSlurUp -@funindex \phrasingSlurDown -@funindex phrasingSlurDown -@funindex \phrasingSlurNeutral -@funindex phrasingSlurNeutral -@funindex phrasingSlurDashed -@funindex \phrasingSlurDashed -@funindex \phrasingSlurDotted -@funindex phrasingSlurDotted -@funindex \phrasingSlurSolid -@funindex phrasingSlurSolid - -Typographically, a phrasing slur behaves almost exactly like a -normal slur. However, they are treated as different objects; a -@code{\slurUp} will have no effect on a phrasing slur. Phrasing -slurs may be manually placed above or below the notes, see -@ref{Direction and placement}. - -@lilypond[verbatim,quote,relative=1] -c4\( g' c,( b) | c1\) -\phrasingSlurUp -c4\( g' c,( b) | c1\) -@end lilypond - -@cindex simultaneous phrasing slurs -@cindex multiple phrasing slurs -@cindex slurs, simultaneous phrasing -@cindex slurs, multiple phrasing -@cindex phrasing slurs, simultaneous -@cindex phrasing slurs, multiple - -Simultaneous or overlapping phrasing slurs are not permitted. - -Phrasing slurs can be solid, dotted, or dashed. Solid is the default -style for phrasing slurs: - -@lilypond[verbatim,quote,relative=1] -c4\( e g2\) -\phrasingSlurDashed -g4\( e c2\) -\phrasingSlurDotted -c4\( e g2\) -\phrasingSlurSolid -g4\( e c2\) -@end lilypond - - -@predefined -@code{\phrasingSlurUp}, -@code{\phrasingSlurDown}, -@code{\phrasingSlurNeutral}, -@code{\phrasingSlurDashed}, -@code{\phrasingSlurDotted}, -@code{\phrasingSlurSolid}. -@endpredefined - - -@seealso -Learning Manual: -@rlearning{On the un-nestedness of brackets and ties}. - -Notation Reference: -@ref{Direction and placement}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{PhrasingSlur}. - - -@node Breath marks -@unnumberedsubsubsec Breath marks - -@cindex breath marks -@cindex pause mark -@funindex \breathe -@funindex breathe - -Breath marks are entered using @code{\breathe}: - -@lilypond[verbatim,quote,relative=2] -c2. \breathe d4 -@end lilypond - -Musical indicators for breath marks in ancient notation, -divisiones, are supported. For details, see @ref{Divisiones}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-breath-mark-symbol.ly} - -@cindex caesura -@cindex railroad tracks - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{inserting-a-caesura.ly} - - -@seealso -Music Glossary: -@rglos{caesura}. - -Notation Reference: -@ref{Divisiones}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{BreathingSign}. - - -@node Falls and doits -@unnumberedsubsubsec Falls and doits - -@cindex falls -@cindex doits -@funindex \bendAfter -@funindex bendAfter - -@notation{Falls} and @notation{doits} can be added to notes using -the @code{\bendAfter} command. The direction of the fall or doit -is indicated with a plus or minus (up or down). The number -indicates the pitch interval that the fall or doit will extend -@emph{beyond} the main note. - -@lilypond[verbatim,quote,relative=2] -c2-\bendAfter #+4 -c2-\bendAfter #-4 -c2-\bendAfter #+8 -c2-\bendAfter #-8 -@end lilypond - -The dash @code{-} immediately preceding the @code{\bendAfter} -command is @emph{required} when writing falls and doits. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adjusting-the-shape-of-falls-and-doits.ly} - - -@seealso -Music Glossary: -@rglos{fall}, -@rglos{doit}. - -Snippets: -@rlsr{Expressive marks}. - - -@node Lines -@subsection Lines - -This section explains how to create various expressive marks that -follow a linear path: glissandos, arpeggios, and trills. - -@menu -* Glissando:: -* Arpeggio:: -* Trills:: -@end menu - -@node Glissando -@unnumberedsubsubsec Glissando - -@cindex glissando -@funindex \glissando -@funindex glissando - -A @notation{glissando} is created by attaching @code{\glissando} -to a note: - -@lilypond[verbatim,quote,relative=2] -g2\glissando g' -c2\glissando c, -@end lilypond - -Different styles of glissandi can be created. For details, see -@ref{Line styles}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{contemporary-glissando.ly} - - -@seealso -Music Glossary: -@rglos{glissando}. - -Notation Reference: -@ref{Line styles}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Glissando}. - - -@knownissues - -Printing text over the line (such as @notation{gliss.}) is not -supported. - - -@node Arpeggio -@unnumberedsubsubsec Arpeggio - -@cindex arpeggio -@cindex broken chord -@cindex chord, broken - -@funindex \arpeggio -@funindex arpeggio -@funindex \arpeggioArrowUp -@funindex arpeggioArrowUp -@funindex \arpeggioArrowDown -@funindex arpeggioArrowDown -@funindex \arpeggioNormal -@funindex arpeggioNormal - -An @notation{arpeggio} on a chord (also known as a broken chord) -is denoted by appending @code{\arpeggio} to the chord construct: - -@lilypond[verbatim,quote,relative=1] -1\arpeggio -@end lilypond - -Different types of arpeggios may be written. -@code{\arpeggioNormal} reverts to a normal arpeggio: - -@lilypond[verbatim,quote,relative=1] -2\arpeggio -\arpeggioArrowUp -2\arpeggio -\arpeggioArrowDown -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -@cindex arpeggio symbols, special -@cindex special arpeggio symbols - -@funindex \arpeggioBracket -@funindex arpeggioBracket -@funindex \arpeggioParenthesis -@funindex arpeggioParenthesis - -Special @emph{bracketed} arpeggio symbols can be created: - -@lilypond[verbatim,quote,relative=1] -2 -\arpeggioBracket -2\arpeggio -\arpeggioParenthesis -2\arpeggio -\arpeggioNormal -2\arpeggio -@end lilypond - -Arpeggios can be explicitly written out with ties. For more -information, see @ref{Ties}. - - -@predefined -@code{\arpeggio}, -@code{\arpeggioArrowUp}, -@code{\arpeggioArrowDown}, -@code{\arpeggioNormal}, -@code{\arpeggioBracket}, -@code{\arpeggioParenthesis}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-a-piano-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-cross-staff-arpeggios-in-other-contexts.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-arpeggios-across-notes-in-different-voices.ly} - - -@seealso -Music Glossary: -@rglos{arpeggio}. - -Notation Reference: -@ref{Ties}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{Arpeggio}, -@rinternals{PianoStaff}. - - -@knownissues - -@cindex cross-staff parenthesis-style arpeggio -@cindex arpeggio, parenthesis-style, cross-staff -@cindex arpeggio, cross-staff parenthesis-style - -It is not possible to mix connected arpeggios and unconnected -arpeggios in one @code{PianoStaff} at the same point in -time. - -The parenthesis-style arpeggio brackets do not work for -cross-staff arpeggios. - - -@node Trills -@unnumberedsubsubsec Trills - -@cindex trills - -@funindex \trill -@funindex trill -@funindex \startTrillSpan -@funindex startTrillSpan -@funindex \stopTrillSpan -@funindex stopTrillSpan - -Short @notation{trills} without an extender line are printed with -@code{\trill}; see @ref{Articulations and ornamentations}. - -Longer trills with an extender line are made with -@code{\startTrillSpan} and @code{\stopTrillSpan}: - -@lilypond[verbatim,quote,relative=2] -d1~\startTrillSpan -d1 -c2\stopTrillSpan r2 -@end lilypond - -In the following example, a trill is combined with grace notes. -The syntax of this construct and the method to precisely position -the grace notes are described in @ref{Grace notes}. - -@lilypond[verbatim,quote,relative=2] -c1 \afterGrace -d1\startTrillSpan { c32[ d]\stopTrillSpan } -e2 r2 -@end lilypond - -@cindex pitched trills -@cindex trills, pitched -@funindex \pitchedTrill -@funindex pitchedTrill - -Trills that require an auxiliary note with an explicit pitch can -be typeset with the @code{\pitchedTrill} command. The first -argument is the main note, and the second is the @emph{trilled} -note, printed as a stemless note head in parentheses. - -@lilypond[verbatim,quote,relative=1] -\pitchedTrill e2\startTrillSpan fis -d\stopTrillSpan -@end lilypond - -@cindex pitched trill with forced accidental -@cindex trill, pitched with forced accidental -@cindex accidental, forced for pitched trill - -In the following example, the second pitched trill is ambiguous; -the accidental of the trilled note is not printed. As a -workaround, the accidentals of the trilled notes can be forced. -The second measure illustrates this method: - -@lilypond[verbatim,quote,relative=2] -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis -g\stopTrillSpan -\pitchedTrill eis4\startTrillSpan fis! -g\stopTrillSpan -@end lilypond - - -@predefined -@code{\startTrillSpan}, -@code{\stopTrillSpan}. -@endpredefined - - -@seealso -Music Glossary: -@rglos{trill}. - -Notation Reference: -@ref{Articulations and ornamentations}, -@ref{Grace notes}. - -Snippets: -@rlsr{Expressive marks}. - -Internals Reference: -@rinternals{TrillSpanner}. - diff --git a/Documentation/user/fdl.itexi b/Documentation/user/fdl.itexi deleted file mode 100644 index 158e5c6c30..0000000000 --- a/Documentation/user/fdl.itexi +++ /dev/null @@ -1,403 +0,0 @@ - -@node GNU Free Documentation License -@appendix GNU Free Documentation License - -@cindex FDL, GNU Free Documentation License -@center Version 1.1, March 2000 - -@display -Copyright @copyright{} 2000 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@enumerate 0 -@item -PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -written document @dfn{free} in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. - -This License is a kind of @q{copyleft}, which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - -@item -APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The @q{Document}, below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as @q{you}. - -A @q{Modified Version} of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A @q{Secondary Section} is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (For example, if the Document is in part a -textbook of mathematics, a Secondary Section may not explain any -mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The @q{Invariant Sections} are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. - -The @q{Cover Texts} are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. - -A @q{Transparent} copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not @q{Transparent} is called @q{Opaque}. - -Examples of suitable formats for Transparent copies include plain -@sc{ascii} without markup, Texinfo input format, La@TeX{} input format, -@acronym{SGML} or @acronym{XML} using a publicly available -@acronym{DTD}, and standard-conforming simple @acronym{HTML} designed -for human modification. Opaque formats include PostScript, -@acronym{PDF}, proprietary formats that can be read and edited only by -proprietary word processors, @acronym{SGML} or @acronym{XML} for which -the @acronym{DTD} and/or processing tools are not generally available, -and the machine-generated @acronym{HTML} produced by some word -processors for output purposes only. - -The @q{Title Page} means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, @q{Title Page} means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -@item -VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - -@item -COPYING IN QUANTITY - -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a publicly-accessible computer-network location containing a complete -Transparent copy of the Document, free of added material, which the -general network-using public has access to download anonymously at no -charge using public-standard network protocols. If you use the latter -option, you must take reasonably prudent steps, when you begin -distribution of Opaque copies in quantity, to ensure that this -Transparent copy will remain thus accessible at the stated location -until at least one year after the last time you distribute an Opaque -copy (directly or through your agents or retailers) of that edition to -the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - -@item -MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -@enumerate A -@item -Use in the Title Page (and on the covers, if any) a title distinct -from that of the Document, and from those of previous versions -(which should, if there were any, be listed in the History section -of the Document). You may use the same title as a previous version -if the original publisher of that version gives permission. - -@item -List on the Title Page, as authors, one or more persons or entities -responsible for authorship of the modifications in the Modified -Version, together with at least five of the principal authors of the -Document (all of its principal authors, if it has less than five). - -@item -State on the Title page the name of the publisher of the -Modified Version, as the publisher. - -@item -Preserve all the copyright notices of the Document. - -@item -Add an appropriate copyright notice for your modifications -adjacent to the other copyright notices. - -@item -Include, immediately after the copyright notices, a license notice -giving the public permission to use the Modified Version under the -terms of this License, in the form shown in the Addendum below. - -@item -Preserve in that license notice the full lists of Invariant Sections -and required Cover Texts given in the Document's license notice. - -@item -Include an unaltered copy of this License. - -@item -Preserve the section entitled @q{History}, and its title, and add to -it an item stating at least the title, year, new authors, and -publisher of the Modified Version as given on the Title Page. If -there is no section entitled @q{History} in the Document, create one -stating the title, year, authors, and publisher of the Document as -given on its Title Page, then add an item describing the Modified -Version as stated in the previous sentence. - -@item -Preserve the network location, if any, given in the Document for -public access to a Transparent copy of the Document, and likewise -the network locations given in the Document for previous versions -it was based on. These may be placed in the @q{History} section. -You may omit a network location for a work that was published at -least four years before the Document itself, or if the original -publisher of the version it refers to gives permission. - -@item -In any section entitled @q{Acknowledgments} or @q{Dedications}, -preserve the section's title, and preserve in the section all the -substance and tone of each of the contributor acknowledgments -and/or dedications given therein. - -@item -Preserve all the Invariant Sections of the Document, -unaltered in their text and in their titles. Section numbers -or the equivalent are not considered part of the section titles. - -@item -Delete any section entitled @q{Endorsements}. Such a section -may not be included in the Modified Version. - -@item -Do not retitle any existing section as @q{Endorsements} -or to conflict in title with any Invariant Section. -@end enumerate - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section entitled @q{Endorsements}, provided it contains -nothing but endorsements of your Modified Version by various -parties---for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - -@item -COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections entitled @q{History} -in the various original documents, forming one section entitled -@q{History}; likewise combine any sections entitled @q{Acknowledgments}, -and any sections entitled @q{Dedications}. You must delete all sections -entitled @q{Endorsements.} - -@item -COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - -@item -AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an @q{aggregate}, and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. - -@item -TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. - -@item -TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - -@item -FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -@uref{http://www.gnu.org/copyleft/}. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License @q{or any later version} applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. -@end enumerate - -@page -@subheading ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - -@smallexample -@group - Copyright (C) @var{year} @var{your name}. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation; - with the Invariant Sections being @var{list their titles}, with the - Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. - A copy of the license is included in the section entitled @q{GNU - Free Documentation License}. -@end group -@end smallexample - -If you have no Invariant Sections, write @q{with no Invariant Sections} -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write @q{no Front-Cover Texts} instead of -@q{Front-Cover Texts being @var{list}}; likewise for Back-Cover Texts. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. - -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: - diff --git a/Documentation/user/fretted-strings.itely b/Documentation/user/fretted-strings.itely deleted file mode 100644 index cf2d5f0250..0000000000 --- a/Documentation/user/fretted-strings.itely +++ /dev/null @@ -1,1332 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Fretted string instruments -@section Fretted string instruments - -@lilypondfile[quote]{fretted-headword.ly} - -This section discusses several aspects of music notation that are unique -to fretted string instruments. - -@cindex tablature -@cindex tablature, guitar -@cindex tablature, banjo -@cindex guitar tablature -@cindex banjo tablature - -@menu -* Common notation for fretted strings:: -* Guitar:: -* Banjo:: -@end menu - -@node Common notation for fretted strings -@subsection Common notation for fretted strings - -This section discusses common notation that is unique -to fretted string instruments. - -@menu -* References for fretted strings:: -* String number indications:: -* Default tablatures:: -* Custom tablatures:: -* Fret diagram markups:: -* Predefined fret diagrams:: -* Automatic fret diagrams:: -* Right-hand fingerings:: -@end menu - -@node References for fretted strings -@unnumberedsubsubsec References for fretted strings - -Music for fretted string instruments is normally notated on -a single staff, either in traditional music notation or in -tablature. Sometimes the two types are combined, and it is -especially common in popular music to use chord diagrams above -a staff of traditional notation. The guitar and the banjo are -transposing instruments, sounding an octave lower than written. -Scores for these instruments should use the @code{"treble_8"} clef. -Some other elements pertinent to fretted string instruments -are covered elsewhere: - -@itemize -@item Fingerings are indicated as shown in @ref{Fingering instructions}. - -@item Instructions for @notation{Laissez vibrer} ties -as well as ties on arpeggios and tremolos can be found in -@ref{Ties}. - -@item Instructions for handling multiple voices can be found -in @ref{Collision resolution}. - -@item Instructions for indicating harmonics can be found in -@ref{Harmonics}. - -@end itemize - - -@seealso -Notation Reference: -@ref{Fingering instructions}, -@ref{Ties}, -@ref{Collision resolution}, -@ref{Instrument names}, -@ref{Writing music in parallel}, -@ref{Arpeggio}, -@ref{List of articulations}, -@ref{Clef}. - - -@node String number indications -@unnumberedsubsubsec String number indications - -@cindex string numbers -@cindex string vs. fingering numbers -@cindex fingering vs. string numbers - -The string on which a note should be played may be indicated by -appending @code{\@var{number}} to a note inside a chord construct -@code{<>}. - -@warning{String numbers @strong{must} be defined inside a chord -construct even if there is only a single note.} - -@lilypond[verbatim,quote,relative=0] -\clef "treble_8" -4 2 -1 -@end lilypond - -When fingerings and string indications are used together, their -placement is controlled by the order in which the two items appear -in the code: - -@lilypond[verbatim,quote,relative=1] -\clef "treble_8" -2 - -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{controlling-the-placement-of-chord-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{allowing-fingerings-to-be-printed-inside-the-staff.ly} - - -@seealso -Notation Reference: -@ref{Fingering instructions}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{StringNumber}, -@rinternals{Fingering}. - - -@node Default tablatures -@unnumberedsubsubsec Default tablatures - -@cindex tablatures, basic -@cindex tablatures, default - -@funindex TabStaff -@funindex TabVoice - -Tablature notation is used for notating music for plucked string -instruments. Pitches are not denoted with note heads, but by -numbers indicating on which string and fret a note must be played. -LilyPond offers limited support for tablature. - -The string number associated with a note is given as a backslash -followed by a number. By default, string 1 is the highest, -and the tuning defaults to the standard guitar tuning (with 6 strings). -The notes are printed as tablature, by using @code{TabStaff} and -@code{TabVoice} contexts - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff { - a,4\5 c'\2 a\3 e'\1 - e\4 c'\2 a\3 e'\1 -} -@end lilypond - -@funindex minimumFret - -@cindex fret - - -When no string is specified for a note, the note is assigned to -the highest string that can generate the note with a fret number -greater than or equal to the value of @code{minimumFret}. -The default value for @code{minimumFret} is 0. - - -@lilypond[quote,ragged-right,verbatim] -\new StaffGroup << - \new Staff \relative c { - \clef "treble_8" - c16 d e f g4 - c,16 d e f g4 - } - \new TabStaff \relative c { - c16 d e f g4 - \set TabStaff.minimumFret = #5 - c,16 d e f g4 - } ->> -@end lilypond - -@cindex harmonic indications in tablature notation -@cindex tablature and harmonic indications -@cindex slides in tablature notation -@cindex tablature and slides - -Harmonic indications and slides can be added to tablature -notation. - -@lilypond[fragment, verbatim, quote, relative=1] -\new TabStaff { - \new TabVoice { - d\2\glissando e\2 - } -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{stem-and-beam-behavior-in-tablature.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{polyphony-in-tablature.ly} - - -@seealso -Notation Reference: -@ref{Stems}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{TabNoteHead}, -@rinternals{TabStaff}, -@rinternals{TabVoice}, -@rinternals{Beam}. - - -@knownissues - -Chords are not handled in a special way, and hence the automatic -string selector may easily select the same string for two notes in -a chord. - -In order to handle @code{\partcombine}, a @code{TabStaff} must use -specially-created voices: - -@lilypond[quote,ragged-right,verbatim] -melodia = \partcombine { e4 g g g }{ e4 e e e } -<< - \new TabStaff << - \new TabVoice = "one" s1 - \new TabVoice = "two" s1 - \new TabVoice = "shared" s1 - \new TabVoice = "solo" s1 - { \melodia } - >> ->> -@end lilypond - -Guitar special effects are limited to harmonics and slides. - -@node Custom tablatures -@unnumberedsubsubsec Custom tablatures - -@cindex tablatures, custom -@cindex tablature, banjo -@cindex tablature, mandolin -@cindex tablature, bass guitar -@cindex tablature, predefined string tunings -@cindex fretted instruments, predefined string tunings -@cindex predefined string tunings for fretted instruments - -@funindex StringTunings - -LilyPond tabulature automatically calculates the fret for -a note based on the string to which the note is assigned. -In order to do this, the tuning of the strings must be -specified. The tuning of the strings is given in the -@code{StringTunings} property. - -LilyPond comes with predefined string tunings for banjo, mandolin, -guitar and bass guitar. Lilypond automatically sets the correct -transposition for predefined tunings. The following example is -for bass guitar, which sounds an octave lower than written. - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \clef "bass_8" - \relative c, { - c4 d e f - } - } - \new TabStaff { - \set TabStaff.stringTunings = #bass-tuning - \relative c, { - c4 d e f - } - } ->> -@end lilypond - -The default string tuning is @code{guitar-tuning}, which -is the standard EADGBE tuning. Some other predefined tunings are -@code{guitar-open-g-tuning}, @code{mandolin-tuning} and -@code{banjo-open-g-tuning}. The predefined string tunings -are found in @code{scm/output-lib.scm}. - -A string tuning is a Scheme list of string pitches, -one for each string, ordered by string number from 1 to N, -where string 1 is at the top of the tablature staff and -string N is at the bottom. This ordinarily results in ordering -from highest pitch to lowest pitch, but some instruments -(e.g. ukulele) do not have strings ordered by pitch. - -A string pitch in a string tuning list is the pitch difference -of the open string from middle C measured in semitones. The -string pitch must be an integer. Lilypond calculates the actual -pitch of the string by adding the string tuning pitch to the -actual pitch for middle C. - -LilyPond automatically calculates the number of strings in the -@code{TabStaff} as the number of elements in @code{stringTunings}. - -Any desired string tuning can be created. For example, we can -define a string tuning for a four-string instrument with pitches -of @code{a''}, @code{d''}, @code{g'}, and @code{c'}: - - -@lilypond[quote,verbatim] -mynotes = { - c'4 e' g' c'' | - e'' g'' b'' c''' -} - -<< - \new Staff { - \clef treble - \mynotes - } - \new TabStaff { - \set TabStaff.stringTunings = #'(21 14 7 0) - \mynotes - } ->> -@end lilypond - - -@seealso -Installed Files: -@file{scm/output-lib.scm}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{Tab_note_heads_engraver}. - - -@node Fret diagram markups -@unnumberedsubsubsec Fret diagram markups - -@cindex fret diagrams -@cindex chord diagrams -@cindex diagrams, fret -@cindex diagrams, chord for fretted instruments -@cindex fret diagrams, custom -@cindex custom fret diagrams - -Fret diagrams can be added to music as a markup to the desired -note. The markup contains information about the desired fret -diagram. There are three different fret-diagram markup -interfaces: standard, terse, and verbose. The three interfaces -produce equivalent markups, but have varying amounts of -information in the markup string. Details about the markup -interfaces are found at @ref{Text markup commands}. - -The standard fret diagram markup string indicates the string -number and the fret number for each dot to be placed on the string. -In addition, open and unplayed (muted) strings can be indicated. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex barre indications - -Barre indications can be added to the diagram from -the fret-diagram markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, d g b d' g'> ^\markup - \fret-diagram #"c:6-1-3;6-3;5-5;4-5;3-4;2-3;1-3;" - } ->> -@end lilypond - -@cindex fret-diagram markup - -@funindex fret-diagram -@funindex \fret-diagram - -The size of the fret diagram, and the number of frets in the diagram -can be changed in the fret-diagram markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;" - < g, b, d g b g'> ^\markup - \fret-diagram #"h:6;6-3;5-2;4-o;3-o;2-o;1-3;" - } ->> -@end lilypond - -The number of strings in a fret diagram can be changed to accomodate -different instruments such as banjos and ukeleles with the fret-diagram -markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - a1 - } - } - \context Staff { - %% A chord for ukelele - a'1 ^\markup \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;" - } ->> -@end lilypond - -Fingering indications can be added, and the location of fingering labels -can be controlled by the fret-diagram markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"f:2;6-x;5-x;4-o;3-2-2;2-3-3;1-1-1;" - } ->> -@end lilypond - -Dot radius and dot position can be controlled with the fret-diagram -markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;" - < d a d' f'> ^\markup - \fret-diagram #"p:0.2;6-x;5-x;4-o;3-2;2-3;1-1;" - } ->> -@end lilypond - -@cindex fret-diagram-terse markup - -@funindex fret-diagram-terse -@funindex \fret-diagram-terse - -The fret-diagram-terse markup string omits string numbers; the string -number is implied by the presence of semicolons. There is one semicolon -for each string in the diagram. The first semicolon corresponds to the -highest string number and the last semicolon corresponds to the first string. -Mute strings, open strings, and fret numbers can be indicated. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3;2;o;1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2;3;1;" - } ->> -@end lilypond - -Barre indicators can be included in the fret-diagram-terse markup string. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 ^\markup - \fret-diagram-terse #"1-(;3;3;2;1;1-);" - < g, d g b d' g'> ^\markup - \fret-diagram-terse #"3-(;5;5;4;3;3-);" - } ->> -@end lilypond - -Fingering indications can be included in the fret-diagram-terse markup string. - -@c Need to use override to enable fingerings to show this -- can we do so? -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;" - < d a d' f'> ^\markup - \fret-diagram-terse #"x;x;o;2-2;3-3;1-1;" - } ->> -@end lilypond - -Other fret diagram properties must be adjusted using @code{\override} when using -the fret-diagram-terse markup. - -@cindex fret-diagram-verbose markup - -@funindex fret-diagram-verbose -@funindex \fret-diagram-verbose - -The fret-diagram-verbose markup string is in the format of a Scheme list. Each -element of the list indicates an item to be placed on the fret diagram. - -@lilypond[quote, verbatim] -<< \context ChordNames { - \chordmode { - c1 d:m - } - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 ^\markup - \fret-diagram-verbose #'( - (mute 6) - (place-fret 5 3) - (place-fret 4 2) - (open 3) - (place-fret 2 1) - (open 1) - ) - < d a d' f'> ^\markup - \fret-diagram-verbose #'( - (mute 6) - (mute 5) - (open 4) - (place-fret 3 2) - (place-fret 2 3) - (place-fret 1 1) - ) - } ->> -@end lilypond - -Fingering indications and barres can be included in a -fret-diagram-verbose markup string. Unique to the -fret-diagram-verbose interface is a capo indication that -can be placed on the fret diagram. The capo indication is -a thick bar that covers all strings. The fret with the -capo will be the lowest fret in the fret diagram. - -@c \override is necessary to make fingering visible -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - f1 g c - } - } - \context Staff { - \clef "treble_8" - \override Voice.TextScript - #'(fret-diagram-details finger-code) = #'below-string - - < f, c f a c' f'>1 ^\markup - \fret-diagram-verbose #'( - (place-fret 6 1) - (place-fret 5 3) - (place-fret 4 3) - (place-fret 3 2) - (place-fret 2 1) - (place-fret 1 1) - (barre 6 1 1) - ) - < g, b, d g b g'> ^\markup - \fret-diagram-verbose #'( - (place-fret 6 3 2) - (place-fret 5 2 1) - (open 4) - (open 3) - (open 2) - (place-fret 1 3 3) - ) - < c e g c' e'> ^\markup - \fret-diagram-verbose #'( - (capo 3) - (mute 6) - (place-fret 4 5 1) - (place-fret 3 5 2) - (place-fret 2 5 3) - ) - } ->> -@end lilypond - -All other fret diagram properties must be adjusted using @code{\override} -when using the fret-diagram-verbose markup. - -@ignore -The following example shows the three fret-diagram markup -interfaces, along with examples of common tweaks. For example, -the size of the verbose fret diagram is reduced to 0.75, and the -finger indications are specified to appear below the diagram. The -terse diagram includes tweaks to specify placement of finger code -and color of dots. - -@lilypond[verbatim,ragged-right,quote] -\new Voice { - \clef "treble_8" - d^\markup \fret-diagram #"6-x;5-x;4-o;3-2;2-3;1-2;" - d d d - fis^\markup \override #'(size . 0.75) { - \override #'(finger-code . below-string) { - \fret-diagram-verbose #'((place-fret 6 2 1) (barre 6 1 2) - (place-fret 5 4 3) - (place-fret 4 4 4) - (place-fret 3 3 2) - (place-fret 2 2 1) - (place-fret 1 2 1)) - } - } - fis fis fis - c^\markup \override #'(dot-radius . 0.35) { - \override #'(finger-code . in-dot) { - \override #'(dot-color . white) { - \fret-diagram-terse #"x;3-1-(;5-2;5-3;5-4;3-1-);" - } - } - } - c c c -} -@end lilypond -@end ignore - -@cindex customized fret diagram -@cindex fret diagram, customized -@cindex diagram, fret, customized - -@funindex fret-diagram-interface - -The graphical layout of a fret diagram can be customized according to -user preference through the properties of the @code{fret-diagram-interface}. -Details are found at @rinternals{fret-diagram-interface}. For a fret diagram -markup, the interface properties belong to @code{Voice.TextScript}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-markup-fret-diagrams.ly} - - -@seealso -Notation Reference: -@ref{Text markup commands}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{fret-diagram-interface}. - - -@node Predefined fret diagrams -@unnumberedsubsubsec Predefined fret diagrams - - -@cindex fret diagrams -@cindex chord diagrams - -@funindex FretBoards -@funindex stringTunings - -Fret diagrams can be displayed using the @code{FretBoards} context. By -default, the @code{FretBoards} context will display fret diagrams that -are stored in a lookup table: - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode { - c1 d - } -} -@end lilypond - -The default predefined fret diagrams are contained in the file -@code{predefined-guitar-fretboards.ly}. Fret diagrams are -stored based on the pitches of a chord and the value of -@code{stringTunings} that is currently in use. -@code{predefined-guitar-fretboards.ly} contains predefined -fret diagrams only for @code{guitar-tuning}. Predefined fret -diagrams can be added for other instruments or other tunings -by following the examples found in -@code{predefined-guitar-fretboards.ly}. - -Chord pitches can be entered -either as simultaneous music or using chord mode (see -@ref{Chord mode overview}). - -@lilypond[verbatim, ragged-right,quote] -\include "predefined-guitar-fretboards.ly" -\context FretBoards { - \chordmode {c1} - 1 -} -@end lilypond - -@cindex chord names with fret diagrams -@cindex fret diagrams with chord names - -@funindex ChordNames -@funindex chordmode -@funindex \chordmode - -It is common that both chord names and fret diagrams are displayed together. -This is achieved by putting a @code{ChordNames} context in parallel with -a @code{FretBoards} context and giving both contexts the same music. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex transposing fret diagrams -@cindex fret diagrams, transposing -@cindex diagrams, fret, transposing - -Predefined fret diagrams are transposable, as long as a diagram for the -transposed chord is stored in the fret diagram table. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 f g -} - -mychordlist = { - \mychords - \transpose c e { \mychords} -} -<< - \context ChordNames { - \mychordlist - } - \context FretBoards { - \mychordlist - } ->> -@end lilypond - - -The predefined fret diagram table contains seven chords (major, minor, -augmented, diminished, dominant seventh, major seventh, minor seventh) -for each of 17 keys. A complete list of the predefined fret diagrams is -shown in @ref{Predefined fretboard diagrams}. If there is no entry in -the table for a chord, the FretBoards engraver will calculate a -fret-diagram using the automatic fret diagram functionality described in -@ref{Automatic fret diagrams}. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex fret diagrams, adding custom -@cindex custom fret diagrams, adding -@cindex adding custom fret diagrams - -Fret diagrams can be added to the fret diagram table. To add a diagram, -you must specify the chord for the diagram, the tuning to be used, and -a definition for the diagram. The diagram definition can be either a -fret-diagram-terse definition string or a fret-diagram-verbose -marking list. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c:9} - #guitar-tuning - #"x;3-2;2-1;3-3;3-4;x;" - -mychords = \chordmode{ - c1 c:9 -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -Different fret diagrams for the same chord name can be stored using different -octaves of pitches. The different octave should be at least two octaves -above or below the default octave, because the octaves above and below the -default octave are used for transposing fretboards. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -\storePredefinedDiagram \chordmode {c''} - #guitar-tuning - #(offset-fret 2 (chord-shape 'bes guitar-tuning)) - -mychords = \chordmode{ - c1 c'' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -@cindex fretted instruments, chord shapes -@cindex chord shapes for fretted instruments - -@funindex \addChordShape -@funindex add ChordShape -@funindex storePredefinedDiagram -@funindex \storePredefinedDiagram - -In addition to fret diagrams, LilyPond stores an internal list of chord -shapes. The chord shapes are fret diagrams that can be shifted along -the neck to different posistions to provide different chords. Chord -shapes can be added to the internal list and then used to define -predefined fret diagrams. Because they can be moved to various -positions on the neck, chord shapes will normally not contain -any open strings. Like fret diagrams, chord shapes can be -entered as either fret-diagram-terse strings or fret-diagram-verbose -marking lists. - -@lilypond[verbatim, ragged-right, quote] -\include "predefined-guitar-fretboards.ly" - -% add a new chord shape - -\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;" - -% add some new chords based on the power chord shape - -\storePredefinedDiagram \chordmode {f''} - #guitar-tuning - #(chord-shape 'powerf guitar-tuning) -\storePredefinedDiagram \chordmode {g''} - #guitar-tuning - #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) - -mychords = \chordmode{ - f1 f'' g g'' -} - -<< - \context ChordNames { - \mychords - } - \context FretBoards { - \mychords - } ->> -@end lilypond - -The graphical layout of a fret diagram can be customized according to -user preference through the properties of the @code{fret-diagram-interface}. -Details are found at @rinternals{fret-diagram-interface}. For a -predefined fret diagram, the interface properties belong to -@code{FretBoards.FretBoard}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{customizing-fretboard-fret-diagrams.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{defining-predefined-fretboards-for-other-instruments.ly} - - -@seealso -Notation Reference: -@ref{Custom tablatures}, -@ref{Automatic fret diagrams}, -@ref{Chord mode overview}, -@ref{Predefined fretboard diagrams}. - -Installed Files: -@file{ly/predefined-guitar-fretboards.ly}, -@file{ly/predefined-guitar-ninth-fretboards.ly}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals {fret-diagram-interface}. - - -@node Automatic fret diagrams -@unnumberedsubsubsec Automatic fret diagrams - -@cindex fret diagrams, automatic -@cindex chord diagrams, automatic -@cindex automatic fret diagrams -@cindex automatic chord diagrams - -Fret diagrams can be automatically created from entered notes using the -@code{FretBoards} context. If no predefined diagram is available for -the entered notes in the active @code{stringTunings}, this context -calculates strings and frets that can be used to play the notes. - -@lilypond[quote,ragged-right,verbatim] -<< - \context ChordNames { - \chordmode { - f1 g - } - } - \context FretBoards { - < f, c f a c' f'>1 - < g,\6 b, d g b g'> - } - \context Staff { - \clef "treble_8" - < f, c f a c' f'>1 - < g, b, d g b' g'> - } ->> -@end lilypond - -@funindex predefinedFretboardsOff -@funindex \predefinedFretboardsOff -@funindex predefinedFretboardsOn -@funindex \predefinedFretboardsOn - -As no predefined diagrams are loaded by default, automatic calculation -of fret diagrams is the default behavior. Once default diagrams are -loaded, automatic calculation can be enabled and disabled with predefined -commands: - -@lilypond[quote,ragged-right,verbatim] - -\storePredefinedDiagram - #guitar-tuning - #"x;3-1-(;5-2;5-3;5-4;3-1-1);" -<< - \context ChordNames { - \chordmode { - c1 c c - } - } - \context FretBoards { - 1 - \predefinedFretboardsOff - - \predefinedFretboardsOn - - } - \context Staff { - \clef "treble_8" - 1 - - - } ->> -@end lilypond - - - -Sometimes the fretboard calculator will be unable to find -an accceptable diagram. This can often be remedied by -manually assigning a note to a string. In many cases, only one -note need be manually placed on a string; the rest of -the notes will then be placed appropriately by the @code{FretBoards} -context. - -@cindex fret diagrams, adding fingerings -@cindex fingerings, adding to fret diagrams - -Fingerings can be added to FretBoard fret diagrams. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - c1 d:m - } - } - \context FretBoards { - < c-3 e-2 g c'-1 e' > 1 - < d a-2 d'-3 f'-1> - } - \context Staff { - \clef "treble_8" - < c e g c' e' > 1 - < d a d' f'> - } ->> -@end lilypond - -The minimum fret to be used in calculating strings and frets for -the FretBoard context can be set with the @code{minimumFret} -property. - -@lilypond[quote, verbatim] -<< - \context ChordNames { - \chordmode { - d1:m d:m - } - } - \context FretBoards { - < d a d' f'> - \set FretBoards.minimumFret = #5 - < d a d' f'> - } - \context Staff { - \clef "treble_8" - < d a d' f'> - < d a d' f'> - } ->> -@end lilypond - -The strings and frets for the @code{FretBoards} context depend -on the @code{stringTunings} property, which has the same meaning -as in the TabStaff context. See @ref{Custom tablatures} for -information on the @code{stringTunings} property. - -The graphical layout of a fret diagram can be customized according to -user preference through the properties of the @code{fret-diagram-interface}. -Details are found at @rinternals{fret-diagram-interface}. For a -@code{FretBoards} fret diagram, the interface properties belong to -@code{FretBoards.FretBoard}. - - -@predefined -@code{\predefinedFretboardsOff}, -@code{\predefinedFretboardsOn}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Custom tablatures}. - -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals {fret-diagram-interface}. - - -@node Right-hand fingerings -@unnumberedsubsubsec Right-hand fingerings - -@cindex fretted instruments, right hand fingerings -@cindex fingerings, right hand for fretted instruments -@cindex right hand fingerings for fretted instruments - -@funindex rightHandFinger -@funindex \rightHandFinger - -Right-hand fingerings @var{p-i-m-a} must be entered within a -chord construct @code{<>} for them to be printed in the score, -even when applied to a single note. - -@warning{There @strong{must} be a hyphen after the note and a space -before the closing @code{>}.} - -@lilypond[quote,verbatim,relative=0] -\clef "treble_8" -4 - - - -1 -@end lilypond - -For convenience, you can abbreviate @code{\rightHandFinger} to something -short, for example @code{RH}, - -@example -#(define RH rightHandFinger) -@end example - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{placement-of-right-hand-fingerings.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{fingerings,-string-indications,-and-right-hand-fingerings.ly} - - -@seealso -Snippets: -@rlsr{Fretted strings}. - -Internals Reference: -@rinternals{StrokeFinger}. - - -@node Guitar -@subsection Guitar - -Most of the notational issues associated with guitar music are -covered sufficiently in the general fretted strings section, but there -are a few more worth covering here. Occasionally users want to -create songbook-type documents having only lyrics with chord -indications above them. Since Lilypond is a music typesetter, -it is not recommended for documents that have no music notation -in them. A better alternative is a word processor, text editor, -or, for experienced users, a typesetter like GuitarTeX. - -@menu -* Indicating position and barring:: -* Indicating harmonics and dampened notes:: -@end menu - -@node Indicating position and barring -@unnumberedsubsubsec Indicating position and barring - -@cindex indicating position and barring for fretted instruments -@cindex fretted instruments, indicating position and barring - -This example demonstrates how to include guitar position and -barring indications. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=0] -\clef "treble_8" -b16 d g b e -\textSpannerDown -\override TextSpanner #'(bound-details left text) = #"XII " - g16\startTextSpan - b16 e g e b g\stopTextSpan -e16 b g d -@end lilypond - - -@seealso -Notation Reference: -@ref{Text spanners}. - -Snippets: -@rlsr{Fretted strings}, -@rlsr{Expressive marks}. - - -@node Indicating harmonics and dampened notes -@unnumberedsubsubsec Indicating harmonics and dampened notes - -@cindex fretted instruments, dampened notes -@cindex fretted instruments, harmonics -@cindex dampened notes on fretted instruments -@cindex harmonics on fretted instruments - -Special note heads can be used to indicate dampened notes or -harmonics. Harmonics are normally further explained with a -text markup. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { - \clef "treble_8" - \override Staff.NoteHead #'style = #'cross - g8 a b c b4 - \override Staff.NoteHead #'style = #'harmonic-mixed - d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} 1 -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Fretted strings}. - -Notation Reference: -@ref{Special note heads}, -@ref{Note head styles}. - - -@node Banjo -@subsection Banjo - -@menu -* Banjo tablatures:: -@end menu - -@node Banjo tablatures -@unnumberedsubsubsec Banjo tablatures - -@cindex banjo tablatures -@cindex tablature, banjo - -LilyPond has basic support for the five-string banjo. When making tablatures -for five-string banjo, use the banjo tablature format function to get -correct fret numbers for the fifth string: - -@c due to crazy intervals of banjo music, absolute pitch is recommended - -@lilypond[quote,ragged-right,fragment,verbatim] -\new TabStaff << - \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo - \set TabStaff.stringTunings = #banjo-open-g-tuning - { - \stemDown - g8 d' g'\5 a b g e d' | - g4 d''8\5 b' a'\2 g'\5 e'\2 d' | - g4 - } ->> -@end lilypond - -@cindex banjo tunings -@cindex tunings, banjo - -@funindex banjo-c-tuning -@funindex banjo-modal-tuning -@funindex banjo-open-d-tuning -@funindex banjo-open-dm-tuning -@funindex four-string-banjo - -A number of common tunings for banjo are predefined in LilyPond: -@code{banjo-c-tuning} (gCGBD), @code{banjo-modal-tuning} (gDGCD), -@code{banjo-open-d-tuning} (aDF#AD) and @code{banjo-open-dm-tuning} -(aDFAD). - -These tunings may be converted to four-string banjo tunings using the -@code{four-string-banjo} function: - -@example -\set TabStaff.stringTunings = #(four-string-banjo banjo-c-tuning) -@end example - - -@seealso -Snippets: -@rlsr{Fretted strings}. - -The file @file{scm/@/output@/-lib@/.scm} contains predefined banjo tunings. diff --git a/Documentation/user/fundamental.itely b/Documentation/user/fundamental.itely deleted file mode 100644 index 4c58135bae..0000000000 --- a/Documentation/user/fundamental.itely +++ /dev/null @@ -1,2905 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Fundamental concepts -@chapter Fundamental concepts - -You've seen in the Tutorial how to produce beautifully printed -music from a simple text file. This section introduces the -concepts and techniques required to produce equally beautiful -but more complex scores. - -@menu -* How LilyPond input files work:: -* Voices contain music:: -* Contexts and engravers:: -* Extending the templates:: -@end menu - - -@node How LilyPond input files work -@section How LilyPond input files work - -The LilyPond input format is quite free-form, giving experienced -users a lot of flexibility to structure their files however they -wish. But this flexibility can make things confusing for new -users. This section will explain some of this structure, but may -gloss over some details in favor of simplicity. For a complete -description of the input format, see @ruser{File structure}. - -@menu -* Introduction to the LilyPond file structure:: -* Score is a (single) compound musical expression:: -* Nesting music expressions:: -* On the un-nestedness of brackets and ties:: -@end menu - -@node Introduction to the LilyPond file structure -@subsection Introduction to the LilyPond file structure - -@cindex input format -@cindex file structure - -A basic example of a LilyPond input file is - -@example -\version @w{"@version{}"} -\header @{ @} -\score @{ - @var{...compound music expression...} % all the music goes here! - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -There are many variations of this basic pattern, but this -example serves as a useful starting place. - -@funindex \book -@funindex book -@funindex \score -@funindex score -@cindex book -@cindex score - -Up to this point none of the examples you have seen has used a -@code{\score@{@}} command. This is because LilyPond automatically -adds the extra commands which are needed when you give it simple -input. LilyPond treats input like this: - -@example -\relative c'' @{ - c4 a d c -@} -@end example - -@noindent -as shorthand for this: - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - \relative c'' @{ - c4 a b c - @} - @} - @} - \layout @{ @} - @} -@} -@end example - -In other words, if the input contains a single music expression, -LilyPond will interpret the file as though the music expression -was wrapped up inside the commands shown above. - -@cindex implicit contexts -@cindex contexts, implicit - -@strong{A word of warning!} Many of the examples in the LilyPond -documentation will omit the @code{\new Staff} and @code{\new Voice} -commands, leaving them to be created implicitly. For simple -examples this works well, but for more complex examples, especially -when additional commands are used, the implicit creation of contexts -can give surprising results, maybe creating extra unwanted staves. -The way to create contexts explicitly is explained in -@ref{Contexts and engravers}. - -@warning{When entering more than a few lines of music it is -advisable to always create staves and voices explicitly.} - -For now, though, let us return to the first example and examine the -@code{\score} command, leaving the others to default. - -A @code{\score} block must always contain just one music expression, -and this must appear immediately after the @code{\score} command. -Remember that a music expression could be anything from a single -note to a huge compound expression like - -@example -@{ - \new StaffGroup << - @var{...insert the whole score of a Wagner opera in here...} - >> -@} -@end example - -@noindent -Since everything is inside @code{@{ ... @}}, it counts -as one music expression. - -As we saw previously, the @code{\score} block can contain other -things, such as - -@example -\score @{ - @{ c'4 a b c' @} - \header @{ @} - \layout @{ @} - \midi @{ @} -@} -@end example - -@funindex \header -@funindex header -@funindex \layout -@funindex layout -@funindex \midi -@funindex midi -@cindex header -@cindex layout -@cindex midi - -@noindent -Note that these three commands -- @code{\header}, @code{\layout} and -@code{\midi} -- are special: unlike many other commands which begin -with a backward slash (@code{\}) they are @emph{not} music expressions -and are not part of any music expression. So they may be placed -inside a @code{\score} block or outside it. In fact, these commands -are commonly placed outside the @code{\score} block -- for example, -@code{\header} is often placed above the @code{\score} command, as the -example at the beginning of this section shows. - -Two more commands you have not previously seen are -@code{\layout @{ @}} and @code{\midi @{@}}. If these appear as -shown they will cause LilyPond to produce a printed output and a -MIDI output respectively. They are described fully in the -Notation Reference -- @ruser{Score layout}, and -@ruser{Creating MIDI files}. - -@cindex scores, multiple -@cindex book block, implicit -@cindex implicit book block -@funindex \book -@funindex book - -You may code multiple @code{\score} blocks. Each will be -treated as a separate score, but they will be all combined into -a single output file. A @code{\book} command is not necessary --- one will be implicitly created. However, if you would like -separate output files from one @code{.ly} file then the -@code{\book} command should be used to separate the different -sections: each @code{\book} block will produce a -separate output file. - -In summary: - -Every @code{\book} block creates a separate output file (e.g., a -PDF file). If you haven't explicitly added one, LilyPond wraps -your entire input code in a @code{\book} block implicitly. - -Every @code{\score} block is a separate chunk of music within a -@code{\book} block. - -@cindex layout block, effect of location - -Every @code{\layout} block affects the @code{\score} or -@code{\book} block in which it appears -- i.e., a @code{\layout} -block inside a @code{\score} block affects only that @code{\score} -block, but a @code{\layout} block outside of a @code{\score} block -(and thus in a @code{\book} block, either explicitly or -implicitly) will affect every @code{\score} in that @code{\book}. - -For details see @ruser{Multiple scores in a book}. - -@cindex variables - -Another great shorthand is the ability to define variables. All -the templates use this - -@example -melody = \relative c' @{ - c4 a b c -@} - -\score @{ - \melody -@} -@end example - -When LilyPond looks at this file, it takes the value of -@code{melody} (everything after the equals sign) and inserts it -whenever it sees @code{\melody}. There's nothing special about -the names -- it could be @code{melody}, @code{global}, -@code{TimeKey}, -@code{pianorighthand}, or @code{foofoobarbaz}. For more details, -see @ref{Saving typing with variables and functions}. -Remember that you can use almost any name you like as long -as it contains just alphabetic characters and is distinct from -LilyPond command names. The exact -limitations on variable names are detailed in -@ruser{File structure}. - - -@seealso -For a complete definition of the input format, see -@ruser{File structure}. - - -@node Score is a (single) compound musical expression -@subsection Score is a (single) compound musical expression - -@funindex \score -@funindex score -@cindex score -@cindex contents of a score block -@cindex score block, contents of -@cindex compound music expression -@cindex music expression, compound - -We saw the general organization of LilyPond input files in the -previous section, @ref{Introduction to the LilyPond file structure}. -But we seemed to skip over the most important part: how do we figure -out what to write after @code{\score}? - -We didn't skip over it at all. The big mystery is simply that -there @emph{is} no mystery. This line explains it all: - -@quotation -@emph{A @code{\score} block must begin with a compound music expression.} -@end quotation - -@noindent -To understand what is meant by a music expression and a compound -music expression, you may find it useful to review the tutorial, -@ref{Music expressions explained}. In that section, we saw how to -build big music expressions from small pieces -- we started from -notes, then chords, etc. Now we're going to start from a big -music expression and work our way down. - -@example -\score @{ - @{ % this brace begins the overall compound music expression - \new StaffGroup << - @var{...insert the whole score of a Wagner opera in here...} - >> - @} % this brace ends the overall compound music expression - \layout @{ @} -@} -@end example - -A whole Wagner opera would easily double the length of this -manual, so let's just add a singer and piano. We don't need a -@code{StaffGroup} for this ensemble, which simply groups a number -of staves together with a bracket at the left, so we shall remove -it. We @emph{do} need a singer and a piano, though. - -@example -\score @{ - << - \new Staff = "singer" << - >> - \new PianoStaff = "piano" << - >> - >> - \layout @{ @} -@} -@end example - -Remember that we use @code{<< ... >>} instead of @code{@{ ... @}} to -show simultaneous music. And we definitely want to show the vocal -part and piano part at the same time, not one after the other! Note -that the @code{<< ... >>} construct is not really necessary for the -Singer staff, as it contains only one sequential music expression; -however, using @code{<< ... >>} instead of braces is still necessary -if the music in the Staff is made of two simultaneous expressions, -e.g. two simultaneous Voices, or a Voice with lyrics. We'll add some -real music later; for now let's just put in some dummy notes and -lyrics. - -@lilypond[verbatim,quote,ragged-right] -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { c'1 } - \addlyrics { And } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { c'1 } - \new Staff = "lower" { c'1 } - >> - >> - \layout { } -} -@end lilypond - -Now we have a lot more details. We have the singer's staff: it -contains a @code{Voice} (in LilyPond, this term refers to a set of -notes, not necessarily vocal notes -- for example, a violin -generally plays one voice) and some lyrics. We also have a piano -staff: it contains an upper staff (right hand) and a lower staff -(left hand). - -At this stage, we could start filling in notes. Inside the curly -braces next to @code{\new Voice = "vocal"}, we could start writing - -@example -\relative c'' @{ - r4 d8\noBeam g, c4 r -@} -@end example - -But if we did that, the @code{\score} section would get pretty -long, and it would be harder to understand what was happening. So -let's use variables instead. These were introduced at the end -of the previous section, remember? So, adding a few notes, we -now have a piece of real music: - -@lilypond[verbatim,quote,ragged-right] -melody = \relative c'' { r4 d8\noBeam g, c4 r } -text = \lyricmode { And God said, } -upper = \relative c'' { 2~ } -lower = \relative c { b2 e2 } - -\score { - << - \new Staff = "singer" << - \new Voice = "vocal" { \melody } - \addlyrics { \text } - >> - \new PianoStaff = "piano" << - \new Staff = "upper" { \upper } - \new Staff = "lower" { - \clef "bass" - \lower - } - >> - >> - \layout { } -} -@end lilypond - - -Be careful about the difference between notes, which are introduced -with @code{\relative} or which are directly included in a music -expression, and lyrics, which are introduced with -@code{\lyricmode}. These are essential to tell LilyPond -to interpret the following content as music and text -respectively. - -When writing (or reading) a @code{\score} section, just take it -slowly and carefully. Start with the outer level, then work on -each smaller level. It also really helps to be strict with -indentation -- make sure that each item on the same level starts -on the same horizontal position in your text editor. - - -@seealso -Notation Reference: @ruser{Structure of a score}. - - -@node Nesting music expressions -@subsection Nesting music expressions - -@cindex staves, temporary -@cindex temporary staves -@cindex ossias - -It is not essential to declare all staves at the beginning; they may -be introduced temporarily at any point. This is particularly useful -for creating ossia sections -- see @rglos{ossia}. Here is a simple -example showing how to introduce a new staff temporarily for the -duration of three notes: - -@lilypond[verbatim,quote,ragged-right] -\new Staff { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff { - f8 f c - } - >> - r4 | - } -} -@end lilypond - -@noindent -Note that the size of the clef is the same as a clef printed -following a clef change -- slightly smaller than the clef -at the beginning of the line. This is usual for clefs printed -in the middle of a line. - -@cindex staff, positioning - -The ossia section may be placed above the staff -as follows: - -@lilypond[verbatim,quote,ragged-right] -\new Staff = "main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -This example uses @code{\with}, which will be explained more -fully later. It is a means of modifying the default behavior -of a single Staff. Here it says that the new staff should be -placed above the staff called @qq{main} instead of the default -position which is below. - - -@seealso -Ossia are often written without clef and without -time signature and are usually in a smaller font. -These require further commands which -have not yet been introduced. See @ref{Size of objects}, -and @ruser{Ossia staves}. - - -@node On the un-nestedness of brackets and ties -@subsection On the un-nestedness of brackets and ties - -@cindex brackets, nesting -@cindex bracket types -@cindex brackets, enclosing vs. marking - -You have already met a number of different types of bracket in -writing the input file to LilyPond. These obey different rules -which can be confusing at first. Before we explain the rules -let's first review the different types of bracket. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .3 .7 -@headitem Bracket Type - @tab Function -@item @code{@{ .. @}} - @tab Encloses a sequential segment of music -@item @code{< .. >} - @tab Encloses the notes of a chord -@item @code{<< .. >>} - @tab Encloses simultaneous music expressions -@item @code{( .. )} - @tab Marks the start and end of a slur -@item @code{\( .. \)} - @tab Marks the start and end of a phrasing slur -@item @code{[ .. ]} - @tab Marks the start and end of a manual beam -@end multitable - -To these we should add other constructs which generate lines -between or across notes: ties (marked by a tilde, @code{~}), -tuplets written as @code{\times x/y @{..@}}, and grace notes -written as @code{\grace@{..@}}. - -Outside LilyPond, the conventional use of brackets requires the -different types to be properly nested, like this, @code{<< [ @{ ( .. ) -@} ] >>}, with the closing brackets being encountered in exactly the -opposite order to the opening brackets. This @strong{is} a -requirement for the three types of bracket described by the word -@q{Encloses} in the table above -- they must nest properly. However, -the remaining brackets, described with the word @q{Marks} in the table -above together with ties and tuplets, do @strong{not} have to nest -properly with any of the brackets. In fact, these are not brackets in -the sense that they enclose something -- they are simply markers to -indicate where something starts and ends. - -So, for example, a phrasing slur can start before a manually -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] } -@end lilypond - -In general, different kinds of brackets, and those implied by -tuplets, ties and grace notes, may be mixed freely. -This example shows a beam extending into a tuplet (line 1), -a slur extending into a tuplet (line 2), -a beam and a slur 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[ g16 \times 2/3 {r16 e'8] } - g16( a \times 2/3 {b d) e' } - g8[( a \times 2/3 {b d') e'~]} - \times 4/5 {e'32\( a b d' e'} a'4.\) -} -@end lilypond - - -@node Voices contain music -@section Voices contain music - -Singers need voices to sing, and so does LilyPond. -The actual music for all instruments in a score -is contained in Voices -- the most fundamental -of all LilyPond's concepts. - -@menu -* I'm hearing Voices:: -* Explicitly instantiating voices:: -* Voices and vocals:: -@end menu - -@node I'm hearing Voices -@subsection I'm hearing Voices - -@cindex polyphony -@cindex layers -@cindex multiple voices -@cindex voices, multiple -@cindex Voice context -@cindex context, Voice -@cindex simultaneous music -@cindex music, simultaneous -@cindex concurrent music -@cindex music, concurrent -@cindex voices vs. chords -@cindex chords vs. voices - -The lowest, most fundamental or innermost layers in a LilyPond -score are called @q{Voice contexts} or just @q{Voices} for short. -Voices are sometimes called @q{layers} in other notation -packages. - -In fact, a Voice layer or context is the only one which can contain -music. If a Voice context is not explicitly declared one is created -automatically, as we saw at the beginning of this chapter. Some -instruments such as an Oboe can play only one note at a time. Music -written for such instruments is monophonic and requires just a single -voice. Instruments which can play more than one note at a time like -the piano will often require multiple voices to encode the different -concurrent notes and rhythms they are capable of playing. - -A single voice can contain many notes in a chord, of course, -so when exactly are multiple voices needed? Look first at -this example of four chords: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -\key g \major -4 -@end lilypond - -This can be expressed using just the single angle bracket chord -symbols, @code{< ... >}, and for this just a single voice is -needed. But suppose the F-sharp were actually an eighth-note -followed by an eighth-note G, a passing note on the way to the A? -Now we have two notes which start at the same time but have -different durations: the quarter-note D and the eighth-note -F-sharp. How are these to be coded? They cannot be written as -a chord because all the notes in a chord must have the same -duration. And they cannot be written as two sequential notes -as they need to start at the same time. This is when two -voices are required. - -Let us see how this is done in LilyPond input syntax. - -@funindex << \\ >> -@funindex \\ - -The easiest way to enter fragments with more than one voice on a -staff is to enter each voice as a sequence (with @code{@{...@}}), -and combine them simultaneously with angle brackets, @code{<<...>>}. -The fragments must also be separated with double backward slashes, -@code{\\}, to place them in separate voices. Without these, the -notes would be entered into a single voice, which would usually -cause errors. This technique is particularly suited to pieces of -music which are largely monophonic with occasional short sections -of polyphony. - -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] -\key g \major -% Voice "1" Voice "2" -<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> | -@end lilypond - -Notice how the stems of the second voice now point down. - -Here's another simple example: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\key d \minor -% Voice "1" Voice "2" -<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | -<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | -<< { a2. r4 } \\ { fis2. s4 } >> | -@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 -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] -\key d \minor -<< { - % Voice "1" - r4 g g4. a8 | - bes4 bes c bes | - a2. r4 | -} \\ { - % Voice "2" - d,2 d4 g | - g4 g g8( a) g4 | - fis2. s4 | -} >> -@end lilypond - - -@cindex voices, naming -@cindex voices crossing brackets -@cindex slurs crossing brackets -@cindex ties crossing brackest - -This example has just two voices, but the same construct may be -used to encode three or more voices by adding more back-slash -separators. - -The Voice contexts bear the names @code{"1"}, @code{"2"}, etc. -In each of these contexts, the vertical direction of slurs, -stems, ties, dynamics etc., is set appropriately. - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - % Main voice - c16 d e f - % Voice "1" Voice "2" Voice "3" - << { g4 f e } \\ { r8 e4 d c8 ~ } >> | - << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | -} -@end lilypond - -These voices are all separate from the main voice that contains -the notes just outside the @code{<< .. >>} construct. Let's call -this the @emph{simultaneous construct}. Slurs and ties may only -connect notes within the same voice, so slurs and ties cannot go -into or out of a simultaneous construct. Conversely, -parallel voices from separate simultaneous constructs on the same -staff are the same voice. Other voice-related properties also -carry across simultaneous constructs. Here is the same example, -with different colors and note heads for each voice. Note that -changes in one voice do not affect other voices, but they do -persist in the same voice later. Note also that tied notes may be -split across the same voices in two constructs, shown here in the -blue triangle voice. - -@lilypond[quote,verbatim] -\new Staff \relative c' { - % Main voice - c16 d e f - << % Bar 1 - { - \voiceOneStyle - g4 f e - } - \\ - { - \voiceTwoStyle - r8 e4 d c8 ~ - } - >> - << % Bar 2 - % Voice 1 continues - { d2 e2 } - \\ - % Voice 2 continues - { c8 b16 a b8 g ~ g2 } - \\ - { - \voiceThreeStyle - s4 b4 c2 - } - >> -} -@end lilypond - -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -The commands @code{\voiceXXXStyle} are mainly intended for use in -educational documents such as this one. They modify the color -of the note head, the stem and the beams, and the style of the -note head, so that the voices may be easily distinguished. -Voice one is set to red diamonds, voice two to blue triangles, -voice three to green crossed circles, and voice four (not used -here) to magenta crosses; @code{\voiceNeutralStyle} (also not -used here) reverts the style back to the default. -We shall see later how commands like these may be created by the -user. -See @ref{Visibility and color of objects} and -@ref{Using variables for tweaks}. - -@cindex polyphony and relative note entry -@cindex relative note entry and polyphony - -Polyphony does not change the relationship of notes within a -@code{\relative @{ @}} block. Each note is still calculated -relative to the note immediately preceding it, or to the first -note of the preceding chord. So in - -@example -\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} -@end example - -@noindent -@code{noteB} is relative to @code{noteA} @* -@code{noteC} is relative to @code{noteB}, not @code{noteA}; @* -@code{noteD} is relative to @code{noteB}, not @code{noteA} or -@code{noteC}; @* -@code{noteE} is relative to @code{noteD}, not @code{noteA}. - -An alternative way, which may be clearer if the notes in the -voices are widely separated, is to place a @code{\relative} -command at the start of each voice: - -@example -\relative c' @{ noteA ... @} -<< - \relative c'' @{ < noteB noteC > ... @} -\\ - \relative g' @{ noteD ... @} ->> -\relative c' @{ noteE ... @} -@end example - -Let us finally analyze the voices in a more complex piece of music. -Here are the notes from the first two bars of the second of Chopin's -Deux Nocturnes, Op 32. This example will be used at later stages in -this and the next chapter to illustrate several techniques for -producing notation, so please ignore for now anything in the -underlying code which looks mysterious and concentrate just on the -music and the voices -- the complications will all be explained in -later sections. - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % No voice three - \\ % Voice four - { - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - -The direction of the stems is often used to indicate the continuity of -two simultaneous melodic lines. Here the stems of the highest notes -are all pointing up and the stems of the lower notes are all pointing -down. This is the first indication that more than one voice is -required. - -But the real need for multiple voices arises when notes -which start at the same time have different durations. -Look at the notes which start at beat three in the first -bar. The A-flat is a dotted quarter note, the F is a -quarter note and the D-flat is a half note. These -cannot be written as a chord as all the notes in a chord -must have the same duration. Neither can they be written -as sequential notes, as they must start at the same time. -This section of the bar requires three voices, and the -normal practice would be to write the whole bar as three -voices, as shown below, where we have used different note heads -and colors for the three voices. Again, the code behind this -example will be explained later, so ignore anything you do -not understand. - -@c The following should appear as music without code -@c The three voice styles should be defined in -init -@lilypond[quote,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { % Voice one - \voiceOneStyle - c2 aes4. bes8 - } - \\ % Voice two - { \voiceTwoStyle - aes2 f4 fes - } - \\ % No Voice three (we want stems down) - \\ % Voice four - { \voiceThreeStyle - % Ignore these for now - they are explained in Ch 4 - \once \override NoteColumn #'force-hshift = #0 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 - } - >> | - 1 | -} -@end lilypond - - -Let us try to encode this music from scratch. As we -shall see, this encounters some difficulties. We begin as -we have learnt, using the @code{<< \\ >>} construct to -enter the music of the first bar in three voices: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } - >> - 1 -} -@end lilypond - -@cindex stem down -@cindex voices and stem directions -@cindex stem directions and voices -@cindex stem up - -The stem directions are automatically assigned with the -odd-numbered voices taking upward stems and the even-numbered -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 simply by missing out voice three -and placing the music in voice four: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << % Voice one - { c2 aes4. bes8 } - \\ % Voice two - { aes2 f4 fes } - \\ % Omit Voice three - \\ % Voice four - { 2 des2 } - >> | - 1 | -} -@end lilypond - -@noindent -We see that this fixes the stem direction, but exposes a problem -sometimes encountered with multiple voices -- the stems of the notes -in one voice can collide with the note heads in other voices. In -laying out the notes, LilyPond allows the notes or chords from two -voices to occupy the same vertical note column provided the stems are -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 -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}. - - -@seealso -Notation Reference: @ruser{Multiple voices}. - - -@node Explicitly instantiating voices -@subsection Explicitly instantiating voices - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceTwo -@funindex voiceTwo -@funindex \voiceThree -@funindex voiceThree -@funindex \voiceFour -@funindex voiceFour -@funindex \oneVoice -@funindex oneVoice -@funindex \new Voice -@cindex voice contexts, creating - -Voice contexts can also be created manually -inside a @code{<< >>} block to create polyphonic music, using -@code{\voiceOne} ... @code{\voiceFour} to indicate the required -directions of stems, slurs, etc. In longer scores this method -is clearer, as it permits the voices to be separated and to be -given more descriptive names. - -Specifically, the construct @code{<< \\ >>} which we used in -the previous section: - -@example -\new Staff @{ - \relative c' @{ - << @{ e4 f g a @} \\ @{ c,4 d e f @} >> - @} -@} -@end example - -@noindent -is equivalent to - -@example -\new Staff << - \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} - \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} ->> -@end example - -Both of the above would produce - -@c The following example should not display the code -@lilypond[ragged-right,quote] -\new Staff << - \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } - \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } ->> -@end lilypond - -@cindex voices, reverting to single -@cindex reverting to a single voice - -The @code{\voiceXXX} commands set the direction of stems, slurs, -ties, articulations, text annotations, augmentation dots of dotted -notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} -make these objects point upwards, while @code{\voiceTwo} and -@code{\voiceFour} make them point downwards. These commands also -generate a horizontal shift for each voice when this is required -to avoid clashes of note heads. The command @code{\oneVoice} -reverts the settings back to the normal values for a single voice. - -Let us see in some simple examples exactly what effect -@code{\oneVoice}, @code{\voiceOne} and @code{voiceTwo} have on -markup, ties, slurs, and dynamics: - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - % Default behavior or behavior after \oneVoice - c d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceOne - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -@lilypond[quote,ragged-right,verbatim] -\relative c'{ - \voiceTwo - c d8 ~ d e4 ( f g a ) b-> c - \oneVoice - c, d8 ~ d e4 ( f g a ) b-> c -} -@end lilypond - -Now let's look at three different ways to notate the same passage -of polyphonic music, each of which is advantageous in different -circumstances, using the example from the previous section. - -An expression that appears directly inside a @code{<< >>} belongs -to the main voice (but, note, @strong{not} in a @code{<< \\ >>} -construct). This is useful when extra voices appear while the -main voice is playing. Here is a more correct rendition of our -example. The red diamond-shaped notes -demonstrate that the main melody is now in a single voice context, -permitting a phrasing slur to be drawn over them. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - \voiceOneStyle - % The following notes are monophonic - c16^( d e f - % Start simultaneous section of three voices - << - % Continue the main voice in parallel - { g4 f e | d2 e2) } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s2. | s4 b4 c2 - } - >> -} -@end lilypond - -@cindex nesting music expressions -@cindex nesting simultaneous constructs -@cindex nesting voices -@cindex voices, temporary -@cindex voices, nesting - -More deeply nested polyphony constructs are possible, and if a -voice appears only briefly this might be a more natural way to -typeset the music: - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - c16^( d e f - << - { g4 f e | d2 e2) } - \new Voice { - \voiceTwo - r8 e4 d c8 ~ | - << - {c8 b16 a b8 g ~ g2} - \new Voice { - \voiceThree - s4 b4 c2 - } - >> - } - >> -} -@end lilypond - -@cindex spacing notes - -This method of nesting new voices briefly is useful -when only small sections of the music -are polyphonic, but when the whole staff is largely polyphonic -it can be clearer to use multiple voices throughout, using -spacing notes to step over sections where the voice is silent, -as here: - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' << - % Initiate first voice - \new Voice { - \voiceOne - c16^( d e f g4 f e | d2 e2) | - } - % Initiate second voice - \new Voice { - % Set stems, etc, down - \voiceTwo - s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | - } - % Initiate third voice - \new Voice { - % Set stems, etc, up - \voiceThree - s1 | s4 b4 c2 | - } ->> -@end lilypond - -@subsubheading Note columns - -@cindex note column -@cindex note collisions -@cindex collisions, notes -@cindex shift commands -@funindex \shiftOff -@funindex shiftOff -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn - -Closely spaced notes in a chord, or notes occurring at the same -time in different voices, are arranged in two, occasionally more, -columns to prevent the note heads overlapping. These are called -note columns. There are separate columns for each voice, and -the currently specified voice-dependent shift is applied to the -note column if there would otherwise be a collision. This can -be seen in the example above. In bar 2 the C in voice two is -shifted to the right relative to the D in voice one, and in the -final chord the C in voice three is also shifted to the right -relative to the other notes. - -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 -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 right and voices two and four to the left. - -@code{\shiftOnn} and @code{\shiftOnnn} define further shift -levels which may be specified temporarily to resolve collisions -in complex situations -- see @ref{Real music example}. - -A note column can contain just one note (or chord) from a voice -with stems up and one note (or chord) from a voice with stems -down. If notes from two voices which have their stems in the -same direction are placed at the same position and both voices -have no shift or the same shift specified, the error message -@qq{Too many clashing note columns} will be produced. - - -@seealso -Notation Reference: @ruser{Multiple voices}. - - -@node Voices and vocals -@subsection Voices and vocals - -Vocal music presents a special difficulty: we need to combine two -expressions -- notes and lyrics. - -@funindex \new Lyrics -@funindex \lyricsto -@funindex lyricsto -@funindex Lyrics -@cindex Lyrics context, creating -@cindex lyrics, linking to voice - -You have already seen the @code{\addlyrics@{@}} command, which -handles simple scores well. However, this technique is -quite limited. For more complex music, you must introduce the -lyrics in a @code{Lyrics} context using @code{\new Lyrics} and -explicitly link -the lyrics to the notes with @code{\lyricsto@{@}}, using the -name assigned to the Voice. - -@lilypond[quote,verbatim,fragment] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - \new Lyrics \lyricsto "one" { - No more let sins and sor -- rows grow. - } ->> -@end lilypond - -Note that the lyrics must be linked to a @code{Voice} context, -@emph{not} a @code{Staff} context. This is a case where it is -necessary to create @code{Staff} and @code{Voice} contexts -explicitly. - -@cindex lyrics and beaming -@cindex beaming and lyrics -@funindex \autoBeamOff -@funindex autoBeamOff - -The automatic beaming which LilyPond uses by default works well -for instrumental music, but not so well for music with lyrics, -where beaming is either not required at all or is used to indicate -melismata in the lyrics. In the example above we use the command -@code{\autoBeamOff} to turn off the automatic beaming. - -@funindex \new ChoirStaff -@funindex ChoirStaff -@funindex \lyricmode -@funindex lyricmode -@cindex vocal score structure -@cindex choir staff - -Let us reuse the earlier example from Judas Maccabæus to -illustrate this more flexible technique. We first recast -it to use variables so the music and lyrics can be separated -from the staff structure. We also introduce a ChoirStaff -bracket. The lyrics themselves must be introduced with -@code{\lyricmode} to ensure they are interpreted as lyrics -rather than music. - -@lilypond[quote,verbatim] -global = { \time 6/8 \partial 8 \key f \major} -SopOneMusic = \relative c'' { - c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } -SopTwoMusic = \relative c' { - r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' } -SopOneLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, __ } -SopTwoLyrics = \lyricmode { - Let | flee -- cy flocks the | hills a -- dorn, } - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "SopOne" { - \global - \SopOneMusic - } - \new Lyrics \lyricsto "SopOne" { - \SopOneLyrics - } - >> - \new Staff << - \new Voice = "SopTwo" { - \global - \SopTwoMusic - } - \new Lyrics \lyricsto "SopTwo" { - \SopTwoLyrics - } - >> - >> -} -@end lilypond - -This is the basic structure of all vocal scores. More staves may be -added as required, more voices may be added to the staves, more verses -may be added to the lyrics, and the variables containing the music can -easily be placed in separate files should they become too long. - -@cindex hymn structure -@cindex SATB structure -@cindex vocal scores with multiple verses -@cindex multiple vocal verses -@cindex verses, multiple vocal - -Here is an example of the first line of a hymn with four -verses, set for SATB. In this case the words for all four -parts are the same. Note how we use variables to separate the -music notation and words from the staff structure. See too -how a variable, which we have chosen to call @q{TimeKey}, is used -to hold several commands for use within the two staves. In other -examples this is often called @q{global}. - -@lilypond[quote,verbatim] -TimeKey = { \time 4/4 \partial 4 \key c \major} -SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyricmode { - E -- | ter -- nal fa -- ther, | strong to save, } -VerseTwo = \lyricmode { - O | Christ, whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { - O | Ho -- ly Spi -- rit, | who didst brood } -VerseFour = \lyricmode { - O | Tri -- ni -- ty of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Sop" { \VerseOne } - \new Lyrics \lyricsto "Sop" { \VerseTwo } - \new Lyrics \lyricsto "Sop" { \VerseThree } - \new Lyrics \lyricsto "Sop" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - -@cindex verse and refrain - -We end with an example to show how we might code a solo verse which -continues into a two-part refrain in two staves. The -positioning of the sequential and simultaneous sections to achieve -this within a single score is quite tricky, so follow the -explanation carefully! - -Let's start with a score block containing a @code{ChoirStaff}, as -we would like the brace to appear at the start of the chorus. -Normally you would need angle brackets after @code{\new ChoirStaff} -to bring in all the staves in parallel, but here we want to -defer the parallelism during the solo so we use braces, although -angle brackets here wouldn't hurt. Inside the @code{ChoirStaff} we -want first the staff which will contain the verse. This must -contain notes and lyrics in parallel, so here we need angle -brackets around the @code{\new Voice} and @code{\new Lyrics} to -start them at the same time: - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -versewords = \lyricmode { - One two three four five six -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - } - \new Lyrics \lyricsto verse { - \versewords - } - >> - } -} -@end lilypond - -That gives the verse line. - -Now we want to continue with refrainA on the same staff while a -second staff is introduced in parallel with it for refrainB, so -this is a parallel section which must be positioned immediately -following the @code{\break} in the verse Voice. Yes, @emph{within} -the verse Voice! Here's that parallel section. More staves -could be introduced here in the same way. - -@example -<< - \refrainnotesA - \new Lyrics \lyricsto verse @{ - \refrainwordsA - @} - \new Staff << - \new Voice = "refrainB" @{ - \refrainnotesB - @} - \new Lyrics \lyricsto "refrainB" @{ - \refrainwordsB - @} - >> ->> -@end example - -Here's the final result with two staves in the chorus showing -how the parallel section is positioned within the verse Voice: - -@lilypond[quote,verbatim, ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new ChoirStaff { - \new Staff << - \new Voice = "verse" { - \versenotes \break - << - \refrainnotesA - \new Lyrics \lyricsto "verse" { - \refrainwordsA - } - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> - } -} -@end lilypond - -@cindex book, example of using -@funindex \book -@funindex book - -However, although this is an interesting and useful exercise to -help you to understand how sequential and simultaneous blocks work, -in practice one would perhaps choose to code this as two -@code{\score} blocks within an implicit @code{\book} block, as -follows: - -@lilypond[quote,verbatim,ragged-right] -versenotes = \relative c'' { - \clef "treble" - \key g \major - \time 3/4 g g g b b b -} -refrainnotesA = \relative c'' { - \time 2/4 - c c g g \bar "|." -} -refrainnotesB = \relative c { - \clef "bass" - \key g \major - c e d d -} -versewords = \lyricmode { - One two three four five six -} -refrainwordsA = \lyricmode { - la la la la -} -refrainwordsB = \lyricmode { - dum dum dum dum -} -\score { - \new Staff << - \new Voice = "verse" { - \versenotes - } - \new Lyrics \lyricsto "verse" { - \versewords - } - >> -} - -\score { - \new ChoirStaff << - \new Staff << - \new Voice = "refrainA" { - \refrainnotesA - } - \new Lyrics \lyricsto "refrainA" { - \refrainwordsA - } - >> - \new Staff << - \new Voice = "refrainB" { - \refrainnotesB - } - \new Lyrics \lyricsto "refrainB" { - \refrainwordsB - } - >> - >> -} -@end lilypond - - -@seealso -Notation Reference: @ruser{Vocal music}. - - -@node Contexts and engravers -@section Contexts and engravers - -Contexts and engravers have been mentioned informally -in earlier sections; we now must look at -these concepts in more detail, as they are important -in the fine-tuning of LilyPond output. - - -@menu -* Contexts explained:: -* Creating contexts:: -* Engravers explained:: -* Modifying context properties:: -* Adding and removing engravers:: -@end menu - -@node Contexts explained -@subsection Contexts explained - -@cindex contexts explained - -When music is printed, many notational elements which do not -appear explicitly in the input file must be added to the -output. For example, compare the input and output of the -following example: - -@lilypond[quote,verbatim,relative=2,fragment] -cis4 cis2. g4 -@end lilypond - -The input is rather sparse, but in the output, bar lines, -accidentals, clef, and time signature have been added. When -LilyPond @emph{interprets} the input the musical information -is inspected in time order, similar to reading a score from left -to right. While reading the input, the program remembers where -measure boundaries are, and which pitches require explicit -accidentals. This information must be held on several levels. -For example, the effect of an accidental is limited -to a single staff, while a bar line must be synchronized across -the entire score. - -Within LilyPond, these rules and bits of information are grouped in -@emph{Contexts}. We have already met the @code{Voice} context. -Others are the @code{Staff} and @code{Score} contexts. Contexts are -hierarchical to reflect the hierarchical nature of a musical score. -For example: a @code{Staff} context can contain many @code{Voice} -contexts, and a @code{Score} context can contain many @code{Staff} -contexts. - -@quotation -@sourceimage{context-example,5cm,,} -@end quotation - -Each context has the responsibility for enforcing some notation rules, -creating some notation objects and maintaining the associated -properties. For example, the @code{Voice} context may introduce an -accidental and then the @code{Staff} context maintains the rule to -show or suppress the accidental for the remainder of the measure. - -As another example, the synchronization of bar lines is, by default, -handled in the @code{Score} context. -However, in some music we may not want the bar lines to be -synchronized -- consider a polymetric score in 4/4 and 3/4 time. -In such cases, we must modify the default settings of the -@code{Score} and @code{Staff} contexts. - -For very simple scores, contexts are created implicitly, and you need -not be aware of them. For larger pieces, such as anything with more -than one staff, they must be -created explicitly to make sure that you get as many staves as you -need, and that they are in the correct order. For typesetting pieces -with specialized notation, it is usual to modify existing, or -even to define totally new, contexts. - -In addition to the @code{Score,} @code{Staff} and -@code{Voice} contexts there are contexts which fit between -the score and staff levels to control staff groups, such as the -@code{PianoStaff} and @code{ChoirStaff} contexts. There -are also alternative staff and voice contexts, and contexts for -lyrics, percussion, fret boards, figured bass, etc. - -The names of all context types are formed from one or more -words, each word being capitalized and joined immediately to the -preceding word with no hyphen or underscore, e.g., -@code{GregorianTranscriptionStaff}. - - -@seealso -Notation Reference: @ruser{Contexts explained}. - - -@node Creating contexts -@subsection Creating contexts - -@funindex \new -@funindex new -@cindex new contexts -@cindex creating contexts -@cindex contexts, creating - -There can be only one top level context: the @code{Score} context. -This is created with the @code{\score} command, or, in simple scores, -it is created automatically. - -For scores with only one voice and one staff, the @code{Voice} and -@code{Staff} contexts may be left to be created automatically, but for -more complex scores it is necessary to create them by hand. The -simplest command that does this is @code{\new}. It is prepended to a -music expression, for example - -@example -\new @var{type} @var{music-expression} -@end example - -@noindent -where @var{type} is a context name (like @code{Staff} or -@code{Voice}). This command creates a new context, and starts -interpreting the @var{music-expression} within that context. - -Note that there is no @code{\new Score} command; -the single top-level @code{Score} context is introduced -with @code{\score}. - -You have seen many practical examples which created new -@code{Staff} and @code{Voice} contexts in earlier sections, but -to remind you how these commands are used in practice, here's an -annotated real-music example: - -@lilypond[quote,verbatim,ragged-right] -\score { % start of single compound music expression - << % start of simultaneous staves section - \time 2/4 - \new Staff { % create RH staff - \key g \minor - \clef "treble" - \new Voice { % create voice for RH notes - \relative c'' { % start of RH notes - d4 ees16 c8. | - d4 ees16 c8. | - } % end of RH notes - } % end of RH voice - } % end of RH staff - \new Staff << % create LH staff; needs two simultaneous voices - \key g \minor - \clef "bass" - \new Voice { % create LH voice one - \voiceOne - \relative g { % start of LH voice one notes - g8 ees, | - g8 ees, | - } % end of LH voice one notes - } % end of LH voice one - \new Voice { % create LH voice two - \voiceTwo - \relative g { % start of LH voice two notes - g4 ees | - g4 ees | - } % end of LH voice two notes - } % end of LH voice two - >> % end of LH staff - >> % end of simultaneous staves section -} % end of single compound music expression -@end lilypond - -(Note how all the statements which open a block with either a -curly bracket, @code{@{}, or double angle brackets, @code{<<}, -are indented by two further spaces, and the corresponding -closing bracket is indented by exactly the same amount. While -this is not required, following this practice will greatly -reduce the number of @q{unmatched bracket} errors, and is -strongly recommended. It enables the structure of the music to -be seen at a glance, and any unmatched brackets will be obvious. -Note too how the LH staff is created using double angle brackets -because it requires two voices for its music, whereas the RH staff -is created with a single music expression surrounded by curly -brackets because it requires only one voice.) - -@cindex contexts, naming -@cindex naming contexts - -The @code{\new} command may also give a identifying name to the -context to distinguish it from other contexts of the same type, - -@example -\new @var{type} = @var{id} @var{music-expression} -@end example - -Note the distinction between the name of the context type, -@code{Staff}, @code{Voice}, etc, and the identifying name of a -particular instance of that type, which can be any sequence of letters -invented by the user. Digits and spaces can also be used in the -identifying name, but then it has to be placed in quotes, -i.e. @code{\new Staff = "MyStaff 1" @var{music-expression}}. -The identifying name is used to -refer back to that particular instance of a context. We saw this in -use in the section on lyrics, see @ref{Voices and vocals}. - - -@seealso -Notation Reference: @ruser{Creating contexts}. - - -@node Engravers explained -@subsection Engravers explained - -@cindex engravers - -Every mark on the printed output of a score produced by LilyPond -is produced by an @code{Engraver}. Thus there is an engraver -to print staves, one to print note heads, one for stems, one for -beams, etc, etc. In total there are over 120 such engravers! -Fortunately, for most scores it is not necessary to know about -more than a few, and for simple scores you do not need to know -about any. - -Engravers live and operate in Contexts. Engravers such as the -@code{Metronome_mark_engraver}, whose action and output apply to the -score as a whole, operate in the highest level context -- the -@code{Score} context. - -The @code{Clef_engraver} and @code{Key_engraver} are to be -found in every @code{Staff} Context, as different staves may require -different clefs and keys. - -The @code{Note_heads_engraver} and @code{Stem_engraver} live -in every @code{Voice} context, the lowest level context of all. - -Each engraver processes the particular objects associated -with its function, and maintains the properties that relate -to that function. These properties, like the properties -associated with contexts, may be modified to change the -operation of the engraver or the appearance of those elements -in the printed score. - -Engravers all have compound names formed from words which -describe their function. Just the first word is capitalized, -and the remainder are joined to it with underscores. Thus -the @code{Staff_symbol_engraver} is responsible for creating the -lines of the staff, the @code{Clef_engraver} determines and sets -the pitch reference point on the staff by drawing a clef symbol. - -Here are some of the most common engravers together with their -function. You will see it is usually easy to guess the function -from the name, or vice versa. - -@multitable @columnfractions .3 .7 -@headitem Engraver - @tab Function -@item Accidental_engraver - @tab Makes accidentals, cautionary and suggested accidentals -@item Beam_engraver - @tab Engraves beams -@item Clef_engraver - @tab Engraves clefs -@item Completion_heads_engraver - @tab Splits notes which cross bar lines -@c The old Dynamic_engraver is deprecated. -jm -@item New_dynamic_engraver - @tab Creates hairpins and dynamic texts -@item Forbid_line_break_engraver - @tab Prevents line breaks if a musical element is still active -@item Key_engraver - @tab Creates the key signature -@item Metronome_mark_engraver - @tab Engraves metronome marking -@item Note_heads_engraver - @tab Engraves note heads -@item Rest_engraver - @tab Engraves rests -@item Staff_symbol_engraver - @tab Engraves the five (by default) lines of the staff -@item Stem_engraver - @tab Creates stems and single-stem tremolos -@item Time_signature_engraver - @tab Creates time signatures -@end multitable - -@smallspace - -We shall see later how the output of LilyPond can be changed -by modifying the action of Engravers. - - -@seealso -Internals reference: @rinternals{Engravers and Performers}. - - -@node Modifying context properties -@subsection Modifying context properties - -@cindex context properties -@cindex context properties, modifying -@cindex modifying context properties -@funindex \set -@funindex set -@funindex \unset -@funindex unset - -Contexts are responsible for holding the values of a number of -context @emph{properties}. Many of them can be changed to -influence the interpretation of the input and so change the -appearance of the output. They are changed by the -@code{\set} command. This takes the form - -@example -\set @emph{ContextName}.@emph{propertyName} = #@emph{value} -@end example - -Where the @emph{ContextName} is usually @code{Score}, -@code{Staff} or @code{Voice}. It may be omitted, -in which case @code{Voice} is assumed. - -The names of context properties consist of words joined -together with no hyphens or underscores, all except the -first having a capital letter. Here are a few examples -of some commonly used ones. There are many more. - -@c attempt to force this onto a new page -@need 50 -@multitable @columnfractions .25 .15 .45 .15 -@headitem propertyName - @tab Type - @tab Function - @tab Example Value -@item extraNatural - @tab Boolean - @tab If true, set extra natural signs before accidentals - @tab @code{#t}, @code{#f} -@item currentBarNumber - @tab Integer - @tab Set the current bar number - @tab @code{50} -@item doubleSlurs - @tab Boolean - @tab If true, print slurs both above and below notes - @tab @code{#t}, @code{#f} -@item instrumentName - @tab Text - @tab Set the name to be placed at the start of the staff - @tab @code{"Cello I"} -@item fontSize - @tab Real - @tab Increase or decrease the font size - @tab @code{2.4} -@item stanza - @tab Text - @tab Set the text to print before the start of a verse - @tab @code{"2"} -@end multitable - -@noindent -where a Boolean is either True (@code{#t}) or False (@code{#f}), -an Integer is a positive whole number, a Real is a positive -or negative decimal number, and text is enclosed in double -apostrophes. Note the occurrence of hash signs, -(@code{#}), in two different places -- as part of the Boolean -value before the @code{t} or @code{f}, and before @emph{value} -in the @code{\set} statement. So when a Boolean is being -entered you need to code two hash signs, e.g., @code{##t}. - -@cindex properties operating in contexts -@cindex setting properties within contexts - -Before we can set any of these properties we need to know -in which context they operate. Sometimes this is obvious, -but occasionally it can be tricky. If the wrong context -is specified, no error message is produced, but the expected -action will not take place. For example, the -@code{instrumentName} clearly lives in the @code{Staff} context, since -it is the staff that is to be named. -In this example the first staff is labelled, but not the second, -because we omitted the context name. - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - \set Staff.instrumentName = #"Soprano" - c4 c - } - \new Staff \relative c' { - \set instrumentName = #"Alto" % Wrong! - d4 d - } ->> -@end lilypond - -Remember the default context name is @code{Voice}, so the second -@code{\set} command set the property @code{instrumentName} in the -@code{Voice} context to @qq{Alto}, but as LilyPond does not look -for any such property in the @code{Voice} context, no -further action took place. This is not an error, and no error -message is logged in the log file. - -Similarly, if the property name is mis-spelt no error message is -produced, and clearly the expected action cannot be performed. In -fact, you can set any (fictitious) @q{property} using any name you -like in any context that exists by using the @code{\set} command. But -if the name is not known to LilyPond it will not cause any action to -be taken. Some text editors with special support for LilyPond input -files document property names with bullets when you hover them with -the mouse, like JEdit with LilyPondTool, or highlight unknown property -names differently, like ConTEXT. If you do not use an editor with -such features, it is recommended to check the property name in the -Internals Reference: see @rinternals{Tunable context properties}, or -@rinternals{Contexts}. - -The @code{instrumentName} property will take effect only -if it is set in the @code{Staff} context, but -some properties can be set in more than one context. -For example, the property @code{extraNatural} is by -default set to ##t (true) for all staves. -If it is set to ##f (false) in one particular @code{Staff} -context it applies just to the accidentals on that staff. -If it is set to false in the @code{Score} context -it applies to all staves. - -So this turns off extra naturals in one staff: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Staff.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -@noindent -and this turns them off in all staves: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff \relative c'' { - ais4 aes - } - \new Staff \relative c'' { - \set Score.extraNatural = ##f - ais4 aes - } ->> -@end lilypond - -As another example, if @code{clefOctavation} is set in -the @code{Score} context this immediately changes the value -of the octavation in all current staves and sets a new default -value which will be applied to all staves. - -The opposite command, @code{\unset}, effectively removes the -property from the context, which causes most properties to -revert to their default value. Usually @code{\unset} is not -required as a new @code{\set} command will achieve what is -wanted. - -The @code{\set} and @code{\unset} commands can appear anywhere -in the input file and will take effect from the time they are -encountered until the end of the score or until the property is -@code{\set} or @code{\unset} again. Let's try changing the -font size, which affects the size of the note heads (among -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] -c4 -% make note heads smaller -\set fontSize = #-4 -d e -% make note heads larger -\set fontSize = #2.5 -f g -% return to default size -\unset fontSize -a b -@end lilypond - -We have now seen how to set the values of several different types of -property. Note that integers and numbers are always preceded by a -hash sign, @code{#}, while a true or false value is specified by -@code{##t} and @code{##f}, with two hash signs. A text property -should be enclosed in double quotation signs, as above, although we -shall see later that text can actually be specified in a much more -general way by using the very powerful @code{markup} command. - -@subsubheading Setting context properties with @code{\with} - -@funindex \with -@funindex with -@cindex context properties, setting with \with - -Context properties may also be set at the time the context is -created. Sometimes this is a clearer way of specifying a -property value if it is to remain fixed for the duration of -the context. When a context is created with a @code{\new} -command it may be followed immediately by a -@code{\with @{ .. @}} block in which the property values are -set. For example, if we wish to suppress the printing of -extra naturals for the duration of a staff we would write: - -@example -\new Staff \with @{ extraNatural = ##f @} -@end example - -@noindent -like this: - -@lilypond[quote,verbatim,ragged-right] -<< - \new Staff - \relative c'' { - gis ges aes ais - } - \new Staff \with { extraNatural = ##f } - \relative c'' { - gis ges aes ais - } ->> -@end lilypond - -Properties set in this way may still be changed dynamically using -@code{\set} and returned to their default value with @code{\unset}. - -@cindex fontSize, default and setting - -The @code{fontSize} property is treated differently. If this is -set in a @code{\with} clause it effectively resets the default -value of the font size. If it is later changed with @code{\set}, -this new default value may be restored with the -@code{\unset fontSize} command. - -@subsubheading Setting context properties with @code{\context} - -@cindex context properties, setting with \context -@funindex \context -@funindex context - -The values of context properties may be set in @emph{all} contexts -of a particular type, such as all @code{Staff} contexts, with a single -command. The context type is identified by using its -type name, like @code{Staff}, prefixed by a back-slash: @code{\Staff}. -The statement which sets the property value is the same as that in a -@code{\with} block, introduced above. It is placed in a -@code{\context} block within a @code{\layout} block. Each -@code{\context} block will affect all contexts of the type specified -throughout the @code{\score} or @code{\book} block in which the -@code{\layout} block appears. Here is a example to show the format: - -@lilypond[verbatim,quote] -\score { - \new Staff { - \relative c'' { - cis4 e d ces - } - } - \layout { - \context { - \Staff - extraNatural = ##t - } - } -} -@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} commands embedded in music statements. - - -@seealso -Notation Reference: -@ruser{Changing context default settings}. -@c FIXME -@c uncomment when backslash-node-name issue is resolved -pm -@c @ruser{The set command}. - -Internals Reference: -@rinternals{Contexts}, -@rinternals{Tunable context properties}. - - -@node Adding and removing engravers -@subsection Adding and removing engravers - -@cindex engravers, adding -@cindex adding engravers -@cindex engravers, removing -@cindex removing engravers - -@funindex \consists -@funindex consists -@funindex \remove -@funindex remove - -We have seen that contexts each contain several engravers, each -of which is responsible for producing a particular part of the -output, like bar lines, staves, note heads, stems, etc. If an -engraver is removed from a context, it can no longer produce its -output. This is a crude way of modifying the output, but it -can sometimes be useful. - -@subsubheading Changing a single context - -To remove an engraver from a single context we use the -@code{\with} command placed immediately after the context creation -command, as in the previous section. - -As an illustration, let's repeat an example from the previous section -with the staff lines removed. Remember that the staff lines are -produced by the @code{Staff_symbol_engraver}. - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \remove Staff_symbol_engraver -} -\relative c' { - c4 - \set fontSize = #-4 % make note heads smaller - d e - \set fontSize = #2.5 % make note heads larger - f g - \unset fontSize % return to default size - a b -} -@end lilypond - -@cindex ambitus engraver - -Engravers can also be added to individual contexts. -The command to do this is - -@code{\consists @var{Engraver_name}}, - -@noindent -placed inside a @code{\with} block. Some vocal scores have an ambitus -placed at the beginning of a staff to indicate the range of notes in -that staff -- see @rglos{ambitus}. The ambitus is produced by the -@code{Ambitus_engraver}, which is not normally included in any -context. If we add it to the @code{Voice} context, it calculates the -range from that voice only: - -@lilypond[quote,verbatim,ragged-right] -\new Staff << - \new Voice \with { - \consists Ambitus_engraver - } - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@noindent -but if we add the ambitus engraver to the -@code{Staff} context, it calculates the range from all -the notes in all the voices on that staff: - -@lilypond[quote,verbatim,ragged-right] -\new Staff \with { - \consists Ambitus_engraver - } - << - \new Voice - \relative c'' { - \voiceOne - c a b g - } - \new Voice - \relative c' { - \voiceTwo - c e d f - } ->> -@end lilypond - -@subsubheading Changing all contexts of the same type - -@funindex \layout -@funindex layout - -The examples above show how to remove or add engravers to -individual contexts. It is also possible to remove or add -engravers to every context of a specific type by placing the -commands in the appropriate context in a @code{\layout} -block. For example, if we wanted to show an ambitus for every -staff in a four-staff score, we could write - -@lilypond[quote,verbatim,ragged-right] -\score { - << - \new Staff << - \relative c'' { c a b g } - >> - \new Staff << - \relative c' { c a b g } - >> - \new Staff << - \clef "G_8" - \relative c' { c a b g } - >> - \new Staff << - \clef "bass" - \relative c { c a b g } - >> - >> - \layout { - \context { - \Staff - \consists Ambitus_engraver - } - } -} -@end lilypond - -@noindent -The values of context properties may also be set -for all contexts of a particular type by including the -@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}. - - -@node Extending the templates -@section Extending the templates - -You've read the tutorial, you know how to write music, you -understand the fundamental concepts. But how can you -get the staves that you want? Well, you can find lots of -templates (see @ref{Templates}) which may give you a start. -But what if you want something that isn't covered there? Read on. - -@menu -* Soprano and cello:: -* Four-part SATB vocal score:: -* Building a score from scratch:: -@end menu - -@node Soprano and cello -@subsection Soprano and cello - -@cindex template, modifying -@cindex modifying templates - -Start off with the template that seems closest to what you want to end -up with. Let's say that you want to write something for soprano and -cello. In this case, we would start with @q{Notes and lyrics} (for the -soprano part). - -@example -\version @w{"@version{}"} -melody = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -text = \lyricmode @{ - Aaa Bee Cee Dee -@} - -\score @{ - << - \new Voice = "one" @{ - \autoBeamOff - \melody - @} - \new Lyrics \lyricsto "one" \text - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -Now we want to add a cello part. Let's look at the @q{Notes only} example: - -@example -\version @w{"@version{}"} -melody = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -\score @{ - \new Staff \melody - \layout @{ @} - \midi @{ @} -@} -@end example - -We don't need two @code{\version} commands. We'll need the -@code{melody} section. We don't want two @code{\score} sections --- if we had two @code{\score}s, we'd get the two parts separately. -We want them together, as a duet. Within the @code{\score} -section, we don't need two @code{\layout} or @code{\midi}. - -If we simply cut and paste the @code{melody} section, we would -end up with two @code{melody} definitions. This would not generate -an error, but the second one would be used for both melodies. -So let's rename them to make them distinct. We'll call the -section for the soprano @code{sopranoMusic} and the section for -the cello @code{celloMusic}. While we're doing this, let's rename -@code{text} to be @code{sopranoLyrics}. Remember to rename both -instances of all these names -- both the initial definition (the -@code{melody = \relative c' @{ } part) and the name's use (in the -@code{\score} section). - -While we're doing this, let's change the cello part's staff -- -celli normally use bass clef. We'll also give the cello some -different notes. - -@example -\version @w{"@version{}"} -sopranoMusic = \relative c' @{ - \clef treble - \key c \major - \time 4/4 - a4 b c d -@} - -sopranoLyrics = \lyricmode @{ - Aaa Bee Cee Dee -@} - -celloMusic = \relative c @{ - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -@} - -\score @{ - << - \new Voice = "one" @{ - \autoBeamOff - \sopranoMusic - @} - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -This is looking promising, but the cello part won't appear in the -score -- we haven't used it in the @code{\score} section. If we -want the cello part to appear under the soprano part, we need to add - -@example -\new Staff \celloMusic -@end example - -@noindent -underneath the soprano stuff. We also need to add @code{<<} and -@code{>>} around the music -- that tells LilyPond that there's -more than one thing (in this case, two @code{Staves}) happening -at once. The @code{\score} looks like this now: - -@c Indentation in this example is deliberately poor -@example -\score @{ - << - << - \new Voice = "one" @{ - \autoBeamOff - \sopranoMusic - @} - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \new Staff \celloMusic - >> - \layout @{ @} - \midi @{ @} -@} -@end example - -@noindent -This looks a bit messy; the indentation is messed up now. That is -easily fixed. Here's the complete soprano and cello template. - -@lilypond[quote,verbatim,ragged-right,addversion] -sopranoMusic = \relative c' { - \clef treble - \key c \major - \time 4/4 - a4 b c d -} - -sopranoLyrics = \lyricmode { - Aaa Bee Cee Dee -} - -celloMusic = \relative c { - \clef bass - \key c \major - \time 4/4 - d4 g fis8 e d4 -} - -\score { - << - << - \new Voice = "one" { - \autoBeamOff - \sopranoMusic - } - \new Lyrics \lyricsto "one" \sopranoLyrics - >> - \new Staff \celloMusic - >> - \layout { } - \midi { } -} -@end lilypond - - -@seealso -The starting templates can be found in the @q{Templates} appendix, -see @ref{Single staff}. - - -@node Four-part SATB vocal score -@subsection Four-part SATB vocal score - -@cindex template, SATB -@cindex SATB template - -Most vocal scores of music written for four-part mixed choir -with orchestral accompaniment such as Mendelssohn's Elijah or -Handel's Messiah have the choral music and words on four -staves, one for each of SATB, with a piano reduction of the -orchestral accompaniment underneath. Here's an example -from Handel's Messiah: - -@c The following should appear as music without code -@lilypond[quote,ragged-right] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@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 -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. - -The order in which the contexts appear in the ChoirStaff of the -template do not correspond with the order in the vocal score shown -above. We need to rearrange them so there are four staves with the -words written directly underneath the notes for each part. All the -voices should be @code{\voiceOne}, which is the default, so the -@code{\voiceXXX} commands should be removed. We also need to specify -the tenor clef for the tenors. The way in which lyrics are specified -in the template has not yet been encountered so we need to use the -method with which we are familiar. We should also add the names of -each staff. - -Doing this gives for our ChoirStaff: - -@example - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" @{ \global \sopranoMusic @} - >> - \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" @{ \global \altoMusic @} - >> - \new Lyrics \lyricsto "altos" @{ \altoWords @} - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" @{ \global \tenorMusic @} - >> - \new Lyrics \lyricsto "tenors" @{ \tenorWords @} - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" @{ \global \bassMusic @} - >> - \new Lyrics \lyricsto "basses" @{ \bassWords @} - >> % end ChoirStaff -@end example - -Next we must work out the piano part. This is -easy - we just pull out the piano part from the -@q{Solo piano} template: - -@example -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower ->> -@end example - -and add the variable definitions for @code{upper} -and @code{lower}. - -The ChoirStaff and PianoStaff must be combined -using angle brackets as we want them to be -stacked one above the other: - -@example -<< % combine ChoirStaff and PianoStaff one above the other - \new ChoirStaff << - \new Staff = "sopranos" << - \new Voice = "sopranos" @{ \global \sopranoMusic @} - >> - \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} - \new Staff = "altos" << - \new Voice = "altos" @{ \global \altoMusic @} - >> - \new Lyrics \lyricsto "altos" @{ \altoWords @} - \new Staff = "tenors" << - \clef "G_8" % tenor clef - \new Voice = "tenors" @{ \global \tenorMusic @} - >> - \new Lyrics \lyricsto "tenors" @{ \tenorWords @} - \new Staff = "basses" << - \clef "bass" - \new Voice = "basses" @{ \global \bassMusic @} - >> - \new Lyrics \lyricsto "basses" @{ \bassWords @} - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> ->> -@end example - -Combining all these together and adding the music -for the three bars of the example above gives: - -@lilypond[quote,verbatim,ragged-right,addversion] -global = { \key d \major \time 4/4 } -sopranoMusic = \relative c'' { - \clef "treble" - r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | -} -sopranoWords = \lyricmode { - Wor -- thy is the lamb that was slain -} -altoMusic = \relative a' { - \clef "treble" - r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | -} -altoWords = \sopranoWords -tenorMusic = \relative c' { - \clef "G_8" - r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | -} -tenorWords = \sopranoWords -bassMusic = \relative c' { - \clef "bass" - r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | -} -bassWords = \sopranoWords -upper = \relative a' { - \clef "treble" - \global - r4 2 4 | - 4. 8 2 | - 4 2 | -} -lower = \relative c, { - \clef "bass" - \global - 4 2 4 | - 4. 8 2 | - 4 2 | -} - -\score { - << % combine ChoirStaff and PianoStaff in parallel - \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" - \new Voice = "sopranos" { \global \sopranoMusic } - >> - \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" - \new Voice = "altos" { \global \altoMusic } - >> - \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" - \new Voice = "tenors" { \global \tenorMusic } - >> - \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" - \new Voice = "basses" { \global \bassMusic } - >> - \new Lyrics \lyricsto "basses" { \bassWords } - >> % end ChoirStaff - - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> -} -@end lilypond - - -@node Building a score from scratch -@subsection Building a score from scratch - -@cindex template, writing your own -@cindex example of writing a score -@cindex writing a score, example -@cindex score, example of writing - -After gaining some facility with writing LilyPond code, you -may find that it is easier to build a score from scratch -rather than modifying one of the templates. You can also -develop your own style this way to suit the sort of music you -like. Let's see how to put together the score for an organ -prelude as an example. - -We begin with a header section. Here go the title, name -of composer, etc, then come any variable definitions, and -finally the score block. Let's start with these in outline -and fill in the details later. - -We'll use the first two bars of Bach's prelude -based on @emph{Jesu, meine Freude} which is written for two -manuals and pedal organ. You can see these two bars of music -at the bottom of this section. The top manual part has two voices, -the lower and pedal organ one each. So we need four -music definitions and one to define the time signature -and key: - -@example -\version @w{"@version{}"} -\header @{ - title = "Jesu, meine Freude" - composer = "J S Bach" -@} -TimeKey = @{ \time 4/4 \key c \minor @} -ManualOneVoiceOneMusic = @{s1@} -ManualOneVoiceTwoMusic = @{s1@} -ManualTwoMusic = @{s1@} -PedalOrganMusic = @{s1@} - -\score @{ -@} -@end example - -For now we've just used a spacer note, @code{s1}, -instead of the real music. We'll add that later. - -Next let's see what should go in the score block. -We simply mirror the staff structure we want. -Organ music is usually written on three staves, -one for each manual and one for the pedals. The -manual staves should be bracketed together, so we -need to use a PianoStaff for them. The first -manual part needs two voices and the second manual -part just one. - -@example - \new PianoStaff << - \new Staff = "ManualOne" << - \new Voice @{ \ManualOneVoiceOneMusic @} - \new Voice @{ \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context -@end example - -Next we need to add a staff for the pedal organ. -This goes underneath the PianoStaff, but it must -be simultaneous with it, so we need angle brackets -around the two. Missing these out would generate -an error in the log file. It's a common mistake -which you'll make sooner or later! Try copying -the final example at the end of this section, -remove these angle brackets, and compile it to -see what errors it generates. - -@example -<< % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \new Voice @{ \ManualOneVoiceOneMusic @} - \new Voice @{ \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \new Voice @{ \PedalOrganMusic @} - >> ->> -@end example - -It is not necessary to use the simultaneous construct -@code{<< .. >>} for the manual two staff and the pedal organ staff, -since they contain only one music expression, but it does no harm, -and always using angle brackets after @code{\new Staff} is a good -habit to cultivate in case there are multiple voices. The opposite -is true for Voices: these should habitually be followed by braces -@code{@{ .. @}} in case your music is coded in several variables -which need to run consecutively. - -Let's add this structure to the score block, and adjust the indenting. -We also add the appropriate clefs, ensure stems, ties and slurs in -each voice on the upper staff point to the right direction with -@code{\voiceOne} and @code{\voiceTwo}, and enter the time signature -and key to each staff using our predefined variable, @code{\TimeKey}. - -@example -\score @{ - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice @{ \voiceOne \ManualOneVoiceOneMusic @} - \new Voice @{ \voiceTwo \ManualOneVoiceTwoMusic @} - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice @{ \ManualTwoMusic @} - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \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 -is to add the music, and combine all the parts together. - -@lilypond[quote,verbatim,ragged-right,addversion] -\header { - title = "Jesu, meine Freude" - composer = "J S Bach" -} -TimeKey = { \time 4/4 \key c \minor } -ManualOneVoiceOneMusic = \relative g' { - g4 g f ees | d2 c2 | -} -ManualOneVoiceTwoMusic = \relative c' { - ees16 d ees8~ ees16 f ees d c8 d~ d c~ | - c c4 b8 c8. g16 c b c d | -} -ManualTwoMusic = \relative c' { - c16 b c8~ c16 b c g a8 g~ g16 g aes ees | - f ees f d g aes g f ees d e8~ ees16 f ees d | -} -PedalOrganMusic = \relative c { - r8 c16 d ees d ees8~ ees16 a, b g c b c8 | - r16 g ees f g f g8 c,2 | - } - -\score { - << % PianoStaff and Pedal Staff must be simultaneous - \new PianoStaff << - \new Staff = "ManualOne" << - \TimeKey % set time signature and key - \clef "treble" - \new Voice { \voiceOne \ManualOneVoiceOneMusic } - \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } - >> % end ManualOne Staff context - \new Staff = "ManualTwo" << - \TimeKey - \clef "bass" - \new Voice { \ManualTwoMusic } - >> % end ManualTwo Staff context - >> % end PianoStaff context - \new Staff = "PedalOrgan" << - \TimeKey - \clef "bass" - \new Voice { \PedalOrganMusic } - >> % end PedalOrgan Staff context - >> -} % end Score context -@end lilypond - - diff --git a/Documentation/user/glossary.html.in b/Documentation/user/glossary.html.in deleted file mode 100644 index 086c9d9f23..0000000000 --- a/Documentation/user/glossary.html.in +++ /dev/null @@ -1,8 +0,0 @@ - - - -

    Music glossary has moved

    - -The new location is:
    music-glossary.html. - -

    Please update your links. Sorry for the inconvenience. diff --git a/Documentation/user/henle-flat-gray.png b/Documentation/user/henle-flat-gray.png deleted file mode 100644 index 20326b958a591ca62d8e46820713e5a6bf472cb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25619 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�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 O4<$Ku*&ouTLH`Fb)wQAk diff --git a/Documentation/user/input.itely b/Documentation/user/input.itely deleted file mode 100644 index f290a3370e..0000000000 --- a/Documentation/user/input.itely +++ /dev/null @@ -1,1966 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node General input and output -@chapter General input and output - -This section deals with general LilyPond input and output issues, -rather than specific notation. - -@menu -* Input structure:: -* Titles and headers:: -* Working with input files:: -* Controlling output:: -* MIDI output:: -@end menu - - -@node Input structure -@section Input structure - -The main format of input for LilyPond are text files. By convention, -these files end with @code{.ly}. - -@menu -* Structure of a score:: -* Multiple scores in a book:: -* File structure:: -@end menu - - -@node Structure of a score -@subsection Structure of a score - -@funindex \score - -A @code{\score} block must contain a single music expression -delimited by curly brackets: - -@example -\score @{ -... -@} -@end example - -@warning{There must be @strong{only one} outer music expression in -a @code{\score} block, and it @strong{must} be surrounded by -curly brackets.} - -This single music expression may be of any size, and may contain -other music expressions to any complexity. All of these examples -are music expressions: - -@example -@{ c'4 c' c' c' @} -@end example - -@lilypond[verbatim,quote] -{ - { c'4 c' c' c'} - { d'4 d' d' d'} -} -@end lilypond - -@lilypond[verbatim,quote] -<< - \new Staff { c'4 c' c' c' } - \new Staff { d'4 d' d' d' } ->> -@end lilypond - -@example -@{ - \new GrandStaff << - \new StaffGroup << - \new Staff @{ \flute @} - \new Staff @{ \oboe @} - >> - \new StaffGroup << - \new Staff @{ \violinI @} - \new Staff @{ \violinII @} - >> - >> -@} -@end example - -Comments are one exception to this general rule. (For others see -@ref{File structure}.) Both single-line comments and comments -delimited by @code{%@{ .. %@}} may be placed anywhere within an -input file. They may be placed inside or outside a @code{\score} -block, and inside or outside the single music expression within a -@code{\score} block. - - -@seealso -Learning Manual: -@rlearning{Working on input files}, -@rlearning{Music expressions explained}, -@rlearning{Score is a (single) compound musical expression}. - - -@node Multiple scores in a book -@subsection Multiple scores in a book - -@funindex \book -@cindex movements, multiple - -A document may contain multiple pieces of music and text. Examples -of these are an etude book, or an orchestral part with multiple -movements. Each movement is entered with a @code{\score} block, - -@example -\score @{ - @var{..music..} -@} -@end example - -and texts are entered with a @code{\markup} block, - -@example -\markup @{ - @var{..text..} -@} -@end example - -@funindex \book - -All the movements and texts which appear in the same @code{.ly} file -will normally be typeset in the form of a single output file. - -@example -\score @{ - @var{..} -@} -\markup @{ - @var{..} -@} -\score @{ - @var{..} -@} -@end example - -However, if you want multiple output files from the same @code{.ly} -file, then you can add multiple @code{\book} blocks, where each such -@code{\book} block will result in a separate output. If you do not -specify any @code{\book} block in the file, LilyPond will implicitly -treat the full file as a single @code{\book} block, see @ref{File -structure}. One important exception is within lilypond-book documents, -where you explicitly have to add a @code{\book} block, otherwise only -the first @code{\score} or @code{\markup} will appear in the output. - -The header for each piece of music can be put inside the @code{\score} -block. The @code{piece} name from the header will be printed before -each movement. The title for the entire book can be put inside the -@code{\book}, but if it is not present, the @code{\header} which is at -the top of the file is inserted. - -@example -\header @{ - title = "Eight miniatures" - composer = "Igor Stravinsky" -@} -\score @{ - @dots{} - \header @{ piece = "Romanze" @} -@} -\markup @{ - ..text of second verse.. -@} -\markup @{ - ..text of third verse.. -@} -\score @{ - @dots{} - \header @{ piece = "Menuetto" @} -@} -@end example - -@funindex \bookpart - -Pieces of music may be grouped into book parts using @code{\bookpart} -blocks. Book parts are separated by a page break, and can start with a -title, like the book itself, by specifying a @code{\header} block. - -@example -\bookpart @{ - \header @{ - title = "Book title" - subtitle = "First part" - @} - \score @{ @dots{} @} - @dots{} -@} -\bookpart @{ - \header @{ - subtitle = "Second part" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - -@node File structure -@subsection File structure - -@funindex \paper -@funindex \midi -@funindex \layout -@funindex \header -@funindex \score -@funindex \book -@funindex \bookpart - -A @code{.ly} file may contain any number of toplevel expressions, where a -toplevel expression is one of the following: - -@itemize @bullet -@item -An output definition, such as @code{\paper}, @code{\midi}, and -@code{\layout}. Such a definition at the toplevel changes the default -book-wide settings. If more than one such definition of -the same type is entered at the top level any definitions in the later -expressions have precedence. - -@item -A direct scheme expression, such as -@code{#(set-default-paper-size "a7" 'landscape)} or -@code{#(ly:set-option 'point-and-click #f)}. - -@item -A @code{\header} block. This sets the global header block. This -is the block containing the definitions for book-wide settings, like -composer, title, etc. - -@item -A @code{\score} block. This score will be collected with other -toplevel scores, and combined as a single @code{\book}. -This behavior can be changed by setting the variable -@code{toplevel-score-handler} at toplevel. The default handler is -defined in the init file @file{../scm/@/lily@/.scm}. - -@item -A @code{\book} block logically combines multiple movements -(i.e., multiple @code{\score} blocks) in one document. If there -are a number of @code{\score}s, one output file will be created -for each @code{\book} block, in which all corresponding movements -are concatenated. The only reason to explicitly specify -@code{\book} blocks in a @code{.ly} file is if you wish to create -multiple output files from a single input file. One exception is -within lilypond-book documents, where you explicitly have to add -a @code{\book} block if you want more than a single @code{\score} -or @code{\markup} in the same example. This behavior can be -changed by setting the variable @code{toplevel-book-handler} at -toplevel. The default handler is defined in the init file -@file{../scm/@/lily@/.scm}. - -@item -A @code{\bookpart} block. A book may be divided into several parts, -using @code{\bookpart} blocks, in order to ease the page breaking, -or to use different @code{\paper} settings in different parts. - -@item -A compound music expression, such as -@example -@{ c'4 d' e'2 @} -@end example - -This will add the piece in a @code{\score} and format it in a -single book together with all other toplevel @code{\score}s and music -expressions. In other words, a file containing only the above -music expression will be translated into - -@example -\book @{ - \score @{ - \new Staff @{ - \new Voice @{ - @{ c'4 d' e'2 @} - @} - @} - @} - \layout @{ @} - \header @{ @} -@} -@end example - -This behavior can be changed by setting the variable -@code{toplevel-music-handler} at toplevel. The default handler is -defined in the init file @file{../scm/@/lily@/.scm}. - -@item -A markup text, a verse for example -@example -\markup @{ - 2. The first line verse two. -@} -@end example - -Markup texts are rendered above, between or below the scores or music -expressions, wherever they appear. - -@cindex variables - -@item -A variable, such as -@example -foo = @{ c4 d e d @} -@end example - -This can be used later on in the file by entering @code{\foo}. The -name of a variable should have alphabetic characters only; no -numbers, underscores or dashes. - -@end itemize - -The following example shows three things that may be entered at -toplevel - -@example -\layout @{ - % Don't justify the output - ragged-right = ##t -@} - -\header @{ - title = "Do-re-mi" -@} - -@{ c'4 d' e2 @} -@end example - - -At any point in a file, any of the following lexical instructions can -be entered: - -@itemize -@item @code{\version} -@item @code{\include} -@item @code{\sourcefilename} -@item @code{\sourcefileline} -@item -A single-line comment, introduced by a leading @code{%} sign. - -@item -A multi-line comment delimited by @code{%@{ .. %@}}. - -@end itemize - - -@seealso -Learning Manual: -@rlearning{How LilyPond input files work}. - - -@node Titles and headers -@section Titles and headers - -Almost all printed music includes a title and the composer's name; -some pieces include a lot more information. - -@menu -* Creating titles:: -* Custom titles:: -* Reference to page numbers:: -* Table of contents:: -@end menu - - -@node Creating titles -@subsection Creating titles - -Titles are created for each @code{\score} block, as well as for the full -input file (or @code{\book} block) and book parts (created by -@code{\bookpart} blocks). - -The contents of the titles are taken from the @code{\header} blocks. -The header block for a book supports the following - - -@table @code -@funindex dedication -@item dedication -The dedicatee of the music, centered at the top of the first page. - -@funindex title -@item title -The title of the music, centered just below the dedication. - -@funindex subtitle -@item subtitle -Subtitle, centered below the title. - -@funindex subsubtitle -@item subsubtitle -Subsubtitle, centered below the subtitle. - -@funindex poet -@item poet -Name of the poet, flush-left below the subsubtitle. - -@funindex instrument -@item instrument -Name of the instrument, centered below the subsubtitle. Also -centered at the top of pages (other than the first page). - -@funindex composer -@item composer -Name of the composer, flush-right below the subsubtitle. - -@funindex meter -@item meter -Meter string, flush-left below the poet. - -@funindex arranger -@item arranger -Name of the arranger, flush-right below the composer. - -@funindex piece -@item piece -Name of the piece, flush-left below the meter. - -@funindex opus -@item opus -Name of the opus, flush-right below the arranger. - -@cindex page breaks, forcing -@funindex breakbefore -@item breakbefore -This forces the title to start on a new page (set to ##t or ##f). - -@funindex copyright -@item copyright -Copyright notice, centered at the bottom of the first page. To -insert the copyright symbol, see @ref{Text encoding}. - -@funindex tagline -@item tagline -Centered at the bottom of the last page. - -@end table - -Here is a demonstration of the fields available. Note that you -may use any @ref{Formatting text}, commands in the header. - -@lilypond[quote,verbatim,line-width=11.0\cm] -\paper { - line-width = 9.0\cm - paper-height = 10.0\cm -} - -\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" - } - - \score { - { c'1 } - \header { - piece = "piece1" - opus = "opus1" - } - } - \markup { - and now... - } - \score { - { c'1 } - \header { - piece = "piece2" - opus = "opus2" - } - } -} -@end lilypond - -As demonstrated before, you can use multiple @code{\header} blocks. -When same fields appear in different blocks, the latter is used. -Here is a short example. - -@example -\header @{ - composer = "Composer" -@} -\header @{ - piece = "Piece" -@} -\score @{ - \new Staff @{ c'4 @} - \header @{ - piece = "New piece" % overwrite previous one - @} -@} -@end example - -If you define the @code{\header} inside the @code{\score} block, then -normally only the @code{piece} and @code{opus} headers will be printed. -Note that the music expression must come before the @code{\header}. - -@lilypond[quote,verbatim,line-width=11.0\cm] -\score { - { c'4 } - \header { - title = "title" % not printed - piece = "piece" - opus = "opus" - } -} -@end lilypond - -@funindex print-all-headers -@noindent -You may change this behavior (and print all the headers when defining -@code{\header} inside @code{\score}) by using - -@example -\paper@{ - print-all-headers = ##t -@} -@end example - -@cindex copyright -@cindex tagline - -The default footer is empty, except for the first page, where the -@code{copyright} field from @code{\header} is inserted, and the last -page, where @code{tagline} from @code{\header} is added. The default -tagline is @qq{Music engraving by LilyPond (@var{version})}.@footnote{Nicely -printed parts are good PR for us, so please leave the tagline if you -can.} - -Headers may be completely removed by setting them to false. - -@example -\header @{ - tagline = ##f - composer = ##f -@} -@end example - - -@node Custom titles -@subsection Custom titles - -A more advanced option is to change the definitions of the following -variables in the @code{\paper} block. The init file -@file{../ly/titling-init.ly} lists the default layout. - -@table @code -@funindex bookTitleMarkup -@item bookTitleMarkup - This is the title added at the top of the entire output document. -Typically, it has the composer and the title of the piece - -@funindex scoreTitleMarkup -@item scoreTitleMarkup - This is the title put over a @code{\score} block. Typically, it has -the name of the movement (@code{piece} field). - -@funindex oddHeaderMarkup -@item oddHeaderMarkup - This is the page header for odd-numbered pages. - -@funindex evenHeaderMarkup -@item evenHeaderMarkup - This is the page header for even-numbered pages. If unspecified, - the odd header is used instead. - - By default, headers are defined such that the page number is on the - outside edge, and the instrument is centered. - -@funindex oddFooterMarkup -@item oddFooterMarkup - This is the page footer for odd-numbered pages. - -@funindex evenFooterMarkup -@item evenFooterMarkup - This is the page footer for even-numbered pages. If unspecified, - the odd header is used instead. - - By default, the footer has the copyright notice on the first, and - the tagline on the last page. -@end table - - -@cindex \paper -@cindex header -@cindex footer -@cindex page layout -@cindex titles - -The following definition will put the title flush left, and the -composer flush right on a single line. - -@verbatim -\paper { - bookTitleMarkup = \markup { - \fill-line { - \fromproperty #'header:title - \fromproperty #'header:composer - } - } -} -@end verbatim - -@node Reference to page numbers -@subsection Reference to page numbers - -A particular place of a score can be marked using the @code{\label} -command, either at top-level or inside music. This label can then be -referred to in a markup, to get the number of the page where the marked -point is placed, using the @code{\page-ref} markup command. - -@lilypond[verbatim,line-width=11.0\cm] -\header { tagline = ##f } -\book { - \label #'firstScore - \score { - { - c'1 - \pageBreak \mark A \label #'markA - c' - } - } - - \markup { The first score begins on page \page-ref #'firstScore "0" "?" } - \markup { Mark A is on page \page-ref #'markA "0" "?" } -} -@end lilypond - -The @code{\page-ref} markup command takes three arguments: -@enumerate -@item the label, a scheme symbol, eg. @code{#'firstScore}; -@item a markup that will be used as a gauge to estimate the dimensions -of the markup; -@item a markup that will be used in place of the page number if the label -is not known; -@end enumerate - -The reason why a gauge is needed is that, at the time markups are -interpreted, the page breaking has not yet occurred, so the page numbers -are not yet known. To work around this issue, the actual markup -interpretation is delayed to a later time; however, the dimensions of -the markup have to be known before, so a gauge is used to decide these -dimensions. If the book has between 10 and 99 pages, it may be "00", -ie. a two digit number. - - -@predefined -@funindex \label -@code{\label}, -@funindex \page-ref -@code{\page-ref}. -@endpredefined - - -@node Table of contents -@subsection Table of contents -A table of contents is included using the @code{\markuplines \table-of-contents} -command. The elements which should appear in the table of contents are -entered with the @code{\tocItem} command, which may be used either at -top-level, or inside a music expression. - -@verbatim -\markuplines \table-of-contents -\pageBreak - -\tocItem \markup "First score" -\score { - { - c' % ... - \tocItem \markup "Some particular point in the first score" - d' % ... - } -} - -\tocItem \markup "Second score" -\score { - { - e' % ... - } -} -@end verbatim - -The markups which are used to format the table of contents are defined -in the @code{\paper} block. The default ones are @code{tocTitleMarkup}, -for formatting the title of the table, and @code{tocItemMarkup}, for -formatting the toc elements, composed of the element title and page -number. These variables may be changed by the user: - -@verbatim -\paper { - %% Translate the toc title into French: - tocTitleMarkup = \markup \huge \column { - \fill-line { \null "Table des matières" \null } - \hspace #1 - } - %% use larger font size - tocItemMarkup = \markup \large \fill-line { - \fromproperty #'toc:text \fromproperty #'toc:page - } -} -@end verbatim - -Note how the toc element text and page number are referred to in -the @code{tocItemMarkup} definition. - -New commands and markups may also be defined to build more elaborated -table of contents: -@itemize -@item first, define a new markup variable in the @code{\paper} block -@item then, define a music function which aims at adding a toc element -using this markup paper variable. -@end itemize - -In the following example, a new style is defined for entering act names -in the table of contents of an opera: - -@verbatim -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) -@end verbatim - -@lilypond[line-width=11.0\cm] -\header { tagline = ##f } -\paper { - tocActMarkup = \markup \large \column { - \hspace #1 - \fill-line { \null \italic \fromproperty #'toc:text \null } - \hspace #1 - } -} - -tocAct = -#(define-music-function (parser location text) (markup?) - (add-toc-item! 'tocActMarkup text)) - -\book { - \markuplines \table-of-contents - \tocAct \markup { Atto Primo } - \tocItem \markup { Coro. Viva il nostro Alcide } - \tocItem \markup { Cesare. Presti omai l'Egizzia terra } - \tocAct \markup { Atto Secondo } - \tocItem \markup { Sinfonia } - \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } - \markup \null -} -@end lilypond - - -@seealso -Init files: @file{../ly/@/toc@/-init@/.ly}. - - -@predefined -@funindex \table-of-contents -@code{\table-of-contents}, -@funindex \tocItem -@code{\tocItem}. -@endpredefined - - -@node Working with input files -@section Working with input files - -@menu -* Including LilyPond files:: -* Different editions from one source:: -* Text encoding:: -* Displaying LilyPond notation:: -@end menu - - -@node Including LilyPond files -@subsection Including LilyPond files - -@funindex \include -@cindex including files - -A large project may be split up into separate files. To refer to -another file, use - -@example -\include "otherfile.ly" -@end example - -The line @code{\include "otherfile.ly"} is equivalent to pasting the -contents of @file{otherfile.ly} into the current file at the place -where the @code{\include} appears. For example, in a large -project you might write separate files for each instrument part -and create a @qq{full score} file which brings together the -individual instrument files. Normally the included file will -define a number of variables which then become available -for use in the full score file. Tagged sections can be -marked in included files to assist in making them usable in -different places in a score, see @ref{Different editions from -one source}. - -Files in the current working directory may be referenced by -specifying just the file name after the @code{\include} command. -Files in other locations may be included by giving either a full -path reference or a relative path reference (but use the UNIX -forward slash, /, rather than the DOS/Windows back slash, \, as the -directory separator.) For example, if @file{stuff.ly} is located -one directory higher than the current working directory, use - -@example -\include "../stuff.ly" -@end example - -@noindent -or if the included orchestral parts files are all located in a -subdirectory called @file{parts} within the current directory, use - -@example -\include "parts/VI.ly" -\include "parts/VII.ly" -... etc -@end example - -Files which are to be included can also contain @code{\include} -statements of their own. By default, these second-level -@code{\include} statements are not interpreted until they have -been brought into the main file, so the file names they specify -must all be relative to the directory containing the main file, -not the directory containing the included file. However, -this behavior can be changed by passing the option -@code{-drelative-includes} option at the command line -(or by adding @code{#(ly:set-option 'relative-includes #t)} -at the top of the main input file). With @code{relative-includes} -set, the path for each @code{\include} command will be taken -relative to the file containing that command. This behavior is -recommended and it will become the default behavior in a future -version of lilypond. - -Files can also be included from a directory in a search path -specified as an option when invoking LilyPond from the command -line. The included files are then specified using just their -file name. For example, to compile @file{main.ly} which includes -files located in a subdirectory called @file{parts} by this method, -cd to the directory containing @file{main.ly} and enter - -@example -lilypond --include=parts main.ly -@end example - -and in main.ly write - -@example -\include "VI.ly" -\include "VII.ly" -... etc -@end example - -Files which are to be included in many scores may be placed in -the LilyPond directory @file{../ly}. (The location of this -directory is installation-dependent - see -@rlearning{Other sources of information}). These files can then -be included simply by naming them on an @code{\include} statement. -This is how the language-dependent files like @file{english.ly} are -included. - -LilyPond includes a number of files by default when you start -the program. These includes are not apparent to the user, but the -files may be identified by running @code{lilypond --verbose} from -the command line. This will display a list of paths and files that -LilyPond uses, along with much other information. Alternatively, -the more important of these files are discussed in -@rlearning{Other sources of information}. These files may be -edited, but changes to them will be lost on installing a new -version of LilyPond. - -Some simple examples of using @code{\include} are shown in -@rlearning{Scores and parts}. - - -@seealso -Learning Manual: -@rlearning{Other sources of information}, -@rlearning{Scores and parts}. - - -@knownissues - -If an included file is given a name which is the same as one in -LilyPond's installation files, LilyPond's file from the -installation files takes precedence. - - - -@node Different editions from one source -@subsection Different editions from one source - -Several mechanisms are available to facilitate the generation -of different versions of a score from the same music source. -Variables are perhaps most useful for combining lengthy sections -of music and/or annotation in various ways, while tags are more -useful for selecting one from several alternative shorter sections -of music. Whichever method is used, separating the notation from -the structure of the score will make it easier to change the -structure while leaving the notation untouched. - -@menu -* Using variables:: -* Using tags:: -@end menu - -@node Using variables -@unnumberedsubsubsec Using variables - -@cindex variables, use of - -If sections of the music are defined in variables they can be -reused in different parts of the score, see @rlearning{Organizing -pieces with variables}. For example, an @notation{a cappella} -vocal score frequently includes a piano reduction of the parts -for rehearsal purposes which is identical to the vocal music, so -the music need be entered only once. Music from two variables -may be combined on one staff, see @ref{Automatic part combining}. -Here is an example: - -@lilypond[verbatim,quote] -sopranoMusic = \relative c'' { a4 b c b8( a)} -altoMusic = \relative g' { e4 e e f } -tenorMusic = \relative c' { c4 b e d8( c) } -bassMusic = \relative c' { a4 gis a d, } -allLyrics = \lyricmode {King of glo -- ry } -<< - \new Staff = "Soprano" \sopranoMusic - \new Lyrics \allLyrics - \new Staff = "Alto" \altoMusic - \new Lyrics \allLyrics - \new Staff = "Tenor" { - \clef "treble_8" - \tenorMusic - } - \new Lyrics \allLyrics - \new Staff = "Bass" { - \clef "bass" - \bassMusic - } - \new Lyrics \allLyrics - \new PianoStaff << - \new Staff = "RH" { - \set Staff.printPartCombineTexts = ##f - \partcombine - \sopranoMusic - \altoMusic - } - \new Staff = "LH" { - \set Staff.printPartCombineTexts = ##f - \clef "bass" - \partcombine - \tenorMusic - \bassMusic - } - >> ->> -@end lilypond - -Separate scores showing just the vocal parts or just the piano -part can be produced by changing just the structural statements, -leaving the musical notation unchanged. - -For lengthy scores, the variable definitions may be placed in -separate files which are then included, see @ref{Including -LilyPond files}. - -@node Using tags -@unnumberedsubsubsec Using tags - -@funindex \tag -@funindex \keepWithTag -@funindex \removeWithTag -@cindex tag -@cindex keep tagged music -@cindex remove tagged music - -The @code{\tag #'@var{partA}} command marks a music expression -with the name @var{partA}. -Expressions tagged in this way can be selected or filtered out by -name later, using either @code{\keepWithTag #'@var{name}} or -@code{\removeWithTag #'@var{name}}. The result of applying these filters -to tagged music is as follows: -@multitable @columnfractions .5 .5 -@headitem Filter - @tab Result -@item -Tagged music preceded by @code{\keepWithTag #'@var{name}} - @tab Untagged music and music tagged with @var{name} is included; - music tagged with any other tag name is excluded. -@item -Tagged music preceded by @code{\removeWithTag #'@var{name}} -@tab Untagged music and music tagged with any tag name other than - @var{name} is included; music tagged with @var{name} is - excluded. -@item -Tagged music not preceded by either @code{\keepWithTag} or -@code{\removeWithTag} -@tab All tagged and untagged music is included. -@end multitable - -The arguments of the @code{\tag}, @code{\keepWithTag} and -@code{\removeWithTag} commands should be a symbol -(such as @code{#'score} or @code{#'part}), followed -by a music expression. - -In the following example, we see two versions of a piece of music, -one showing trills with the usual notation, and one with trills -explicitly expanded: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \keepWithTag #'trills \music -} -\score { - \keepWithTag #'expand \music -} -@end lilypond - -@noindent -Alternatively, it is sometimes easier to exclude sections of music: - -@lilypond[verbatim,quote] -music = \relative g' { - g8. c32 d - \tag #'trills {d8.\trill } - \tag #'expand {\repeat unfold 3 {e32 d} } - c32 d - } - -\score { - \removeWithTag #'expand - \music -} -\score { - \removeWithTag #'trills - \music -} -@end lilypond - -Tagged filtering can be applied to articulations, texts, etc. by -prepending - -@example --\tag #'@var{your-tag} -@end example - -to an articulation. For example, this would define a note with a -conditional fingering indication and a note with a conditional -annotation: - -@example -c1-\tag #'finger ^4 -c1-\tag #'warn ^"Watch!" -@end example - -Multiple tags may be placed on expressions with multiple -@code{\tag} entries: - -@lilypond[quote,verbatim] -music = \relative c'' { - \tag #'a \tag #'both { a a a a } - \tag #'b \tag #'both { b b b b } -} -<< -\keepWithTag #'a \music -\keepWithTag #'b \music -\keepWithTag #'both \music ->> -@end lilypond - -Multiple @code{\removeWithTag} filters may be applied to a single -music expression to remove several differently named tagged sections: - -@lilypond[verbatim,quote] -music = \relative c'' { -\tag #'A { a a a a } -\tag #'B { b b b b } -\tag #'C { c c c c } -\tag #'D { d d d d } -} -{ -\removeWithTag #'B -\removeWithTag #'C -\music -} -@end lilypond - -Two or more @code{\keepWithTag} filters applied to a single music -expression will cause @emph{all} tagged sections to be removed, as -the first filter will remove all tagged sections except the one -named, and the second filter will remove even that tagged section. - - -@seealso -Learning Manual: -@rlearning{Organizing pieces with variables}. - -Notation Reference: -@ref{Automatic part combining}, -@ref{Including LilyPond files}. - - -@ignore -@c This warning is more general than this placement implies. -@c Rests are not merged whether or not they come from tagged sections. -@c Should be deleted? -td - -@knownissues - -Multiple rests are not merged if you create a score with more -than one tagged section at the same place. - -@end ignore - -@node Text encoding -@subsection Text encoding - -LilyPond uses the character repertoire defined by the Unicode -consortium and ISO/IEC 10646. This defines a unique name and -code point for the character sets used in virtually all modern -languages and many others too. Unicode can be implemented using -several different encodings. LilyPond uses the UTF-8 encoding -(UTF stands for Unicode Transformation Format) which represents -all common Latin characters in one byte, and represents other -characters using a variable length format of up to four bytes. - -The actual appearance of the characters is determined by the -glyphs defined in the particular fonts available - a font defines -the mapping of a subset of the Unicode code points to glyphs. -LilyPond uses the Pango library to layout and render multi-lingual -texts. - -Lilypond does not perform any input-encoding conversions. This -means that any text, be it title, lyric text, or musical -instruction containing non-ASCII characters, must be encoded in -UTF-8. The easiest way to enter such text is by using a -Unicode-aware editor and saving the file with UTF-8 encoding. Most -popular modern editors have UTF-8 support, for example, vim, Emacs, -jEdit, and GEdit do. All MS Windows systems later than NT use -Unicode as their native character encoding, so even Notepad can -edit and save a file in UTF-8 format. A more functional -alternative for Windows is BabelPad. - -If a LilyPond input file containing a non-ASCII character is not -saved in UTF-8 format the error message - -@example -FT_Get_Glyph_Name () error: invalid argument -@end example - -will be generated. - -Here is an example showing Cyrillic, Hebrew and Portuguese -text: - -@lilypond[quote] -%c No verbatim here as the code does not display correctly in PDF -% Cyrillic -bulgarian = \lyricmode { - Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. -} - -% Hebrew -hebrew = \lyricmode { - זה כיף סתם לשמוע איך תנצח קרפד ×¢×¥ טוב בגן. -} - -% Portuguese -portuguese = \lyricmode { - à vo -- cê uma can -- ção legal -} - -\relative { - c2 d e f g f e -} -\addlyrics { \bulgarian } -\addlyrics { \hebrew } -\addlyrics { \portuguese } -@end lilypond - -To enter a single character for which the Unicode escape sequence -is known but which is not available in the editor being used, use -@code{\char ##xhhhh} within a @code{\markup} block, where -@code{hhhh} is the hexadecimal code for the character required. -For example, @code{\char ##x03BE} enters the Unicode U+03BE -character, which has the Unicode name @qq{Greek Small Letter Xi}. -Any Unicode hexadecimal code may be substituted, and if all special -characters are entered in this format it is not necessary to save -the input file in UTF-8 format. Of course, a font containing all -such encoded characters must be installed and available to LilyPond. - -The following example shows UTF-8 coded characters being used in -four places -- in a rehearsal mark, as articulation text, in lyrics -and as stand-alone text below the score: - -@lilypond[quote,verbatim] -\score { - \relative c'' { - c1 \mark \markup { \char ##x03EE } - c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } - } - \addlyrics { O \markup { \concat{ Ph \char ##x0153 be! } } } -} -\markup { "Copyright 2008--2009" \char ##x00A9 } -@end lilypond - -To enter the copyright sign in the copyright notice use: - -@example -\header @{ - copyright = \markup @{ \char ##x00A9 "2008" @} -@} -@end example - -@node Displaying LilyPond notation -@subsection Displaying LilyPond notation - -@funindex \displayLilyMusic -Displaying a music expression in LilyPond notation can be -done using the music function @code{\displayLilyMusic}. For example, - -@example -@{ - \displayLilyMusic \transpose c a, @{ c e g a bes @} -@} -@end example - -will display - -@example -@{ a, cis e fis g @} -@end example - -By default, LilyPond will print these messages to the console along -with all the other messages. To split up these messages and save -the results of @code{\display@{STUFF@}}, redirect the output to -a file. - -@c TODO What happens under Windows? - -@example -lilypond file.ly >display.txt -@end example - - - -@node Controlling output -@section Controlling output - -@menu -* Extracting fragments of music:: -* Skipping corrected music:: -@end menu - -@node Extracting fragments of music -@subsection Extracting fragments of music - -It is possible to quote small fragments of a large score directly from -the output. This can be compared to clipping a piece of a paper score -with scissors. - -This is done by defining the measures that need to be cut out -separately. For example, including the following definition - - -@verbatim -\layout { - clip-regions - = #(list - (cons - (make-rhythmic-location 5 1 2) - (make-rhythmic-location 7 3 4))) -} -@end verbatim - -@noindent -will extract a fragment starting halfway the fifth measure, ending in -the seventh measure. The meaning of @code{5 1 2} is: after a 1/2 note -in measure 5, and @code{7 3 4} after 3 quarter notes in measure 7. - -More clip regions can be defined by adding more pairs of -rhythmic-locations to the list. - -In order to use this feature, LilyPond must be invoked with -@code{-dclip-systems}. The clips are output as EPS files, and are -converted to PDF and PNG if these formats are switched on as well. - -For more information on output formats, see @rprogram{Invoking lilypond}. - -@node Skipping corrected music -@subsection Skipping corrected music - - -@funindex skipTypesetting -@funindex showFirstLength -@funindex showLastLength - -When entering or copying music, usually only the music near the end (where -you -are adding notes) is interesting to view and correct. To speed up -this correction process, it is possible to skip typesetting of all but -the last few measures. This is achieved by putting - -@verbatim -showLastLength = R1*5 -\score { ... } -@end verbatim - -@noindent -in your source file. This will render only the last 5 measures -(assuming 4/4 time signature) of every @code{\score} in the input -file. For longer pieces, rendering only a small part is often an order -of magnitude quicker than rendering it completely. When working on the -beginning of a score you have already typeset (e.g. to add a new part), -the @code{showFirstLength} property may be useful as well. - -Skipping parts of a score can be controlled in a more fine-grained -fashion with the property @code{Score.skipTypesetting}. When it is -set, no typesetting is performed at all. - -This property is also used to control output to the MIDI file. Note that -it skips all events, including tempo and instrument changes. You have -been warned. - -@lilypond[quote,fragment,ragged-right,verbatim] -\relative c'' { - c8 d - \set Score.skipTypesetting = ##t - e e e e e e e e - \set Score.skipTypesetting = ##f - c d b bes a g c2 } -@end lilypond - -In polyphonic music, @code{Score.skipTypesetting} will affect all -voices and staves, saving even more time. - - - -@node MIDI output -@section MIDI output - -@cindex Sound -@cindex MIDI - -MIDI (Musical Instrument Digital Interface) is a standard for -connecting and controlling digital instruments. A MIDI file is a -series of notes in a number of tracks. It is not an actual -sound file; you need special software to translate between the -series of notes and actual sounds. - -Pieces of music can be converted to MIDI files, so you can listen to -what was entered. This is convenient for checking the music; octaves -that are off or accidentals that were mistyped stand out very much -when listening to the MIDI output. - -@c TODO Check this -The midi output allocates a channel for each staff, and one for global -settings. Therefore the midi file should not have more than 15 staves -(or 14 if you do not use drums). Other staves will remain silent. - -@menu -* Creating MIDI files:: -* MIDI block:: -* What goes into the MIDI output?:: -* Repeats in MIDI:: -* Controlling MIDI dynamics:: -* Percussion in MIDI:: -@end menu - -@node Creating MIDI files -@subsection Creating MIDI files - -To create a MIDI output file from a LilyPond input file, add a -@code{\midi} block to a score, for example, - -@example -\score @{ - @var{...music...} - \midi @{ @} -@} -@end example - -If there is a @code{\midi} block in a @code{\score} with no -@code{\layout} block, only MIDI output will be produced. When -notation is needed too, a @code{\layout} block must be also be -present. - -@example -\score @{ - @var{...music...} - \midi @{ @} - \layout @{ @} -@} -@end example - -Pitches, rhythms, ties, dynamics, and tempo changes are interpreted -and translated correctly to the MIDI output. Dynamic marks, -crescendi and decrescendi translate into MIDI volume levels. -Dynamic marks translate to a fixed fraction of the available MIDI -volume range. Crescendi and decrescendi make the volume vary -linearly between their two extremes. The effect of dynamic markings -on the MIDI output can be removed completely, see @ref{MIDI block}. - -The initial tempo and later tempo changes can be specified -with the @code{\tempo} command within the music notation. These -are reflected in tempo changes in the MIDI output. This command -will normally result in the metronome mark being printed, but this -can be suppressed, see @ref{Metronome marks}. An alternative way -of specifying the inital or overall MIDI tempo is described below, -see @ref{MIDI block}. - -@unnumberedsubsubsec Instrument names - -@cindex instrument names -@funindex Staff.midiInstrument - -The MIDI instrument to be used is specified by setting the -@code{Staff.midiInstrument} property to the instrument name. -The name should be chosen from the list in @ref{MIDI instruments}. - -@example -\new Staff @{ - \set Staff.midiInstrument = #"glockenspiel" - @var{...notes...} -@} -@end example - -@example -\new Staff \with @{midiInstrument = #"cello"@} @{ - @var{...notes...} -@} -@end example - -If the selected instrument does not exactly match an instrument from -the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"}) -instrument is used. - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-midi-output-to-one-channel-per-voice.ly} - -@knownissues - -@c In 2.11 the following no longer seems to be a problem -td -@ignore -Unterminated (de)crescendos will not render properly in the midi file, -resulting in silent passages of music. The workaround is to explicitly -terminate the (de)crescendo. For example, - -@example -@{ a\< b c d\f @} -@end example - -@noindent -will not work properly but - -@example -@{ a\< b c d\!\f @} -@end example - -@noindent -will. -@end ignore - -Changes in the MIDI volume take place only on starting a note, so -crescendi and decrescendi cannot affect the volume of a -single note. - -Not all midi players correctly handle tempo changes in the midi -output. Players that are known to work include MS Windows Media -Player and @uref{http://@/timidity@/.sourceforge@/.net/,timidity}. - -@node MIDI block -@subsection MIDI block -@cindex MIDI block - -A @code{\midi} block must appear within a score block if MIDI output -is required. It is analogous to the layout block, but somewhat -simpler. Often, the @code{\midi} block is left empty, but it -can contain context rearrangements, new context definitions or code -to set the values of properties. For example, the following will -set the initial tempo exported to a MIDI file without causing a tempo -indication to be printed: - -@example -\score @{ - @var{...music...} - \midi @{ - \context @{ - \Score - tempoWholesPerMinute = #(ly:make-moment 72 4) - @} - @} -@} -@end example - -In this example the tempo is set to 72 quarter note -beats per minute. This kind of tempo specification cannot take -a dotted note length as an argument. If one is required, break -the dotted note into smaller units. For example, a tempo of 90 -dotted quarter notes per minute can be specified as 270 eighth -notes per minute: - -@example -tempoWholesPerMinute = #(ly:make-moment 270 8) -@end example - -@cindex MIDI context definitions - -Context definitions follow precisely the same syntax as those -within a @code{\layout} block. Translation modules for sound are -called performers. The contexts for MIDI output are defined in -@file{../ly/@/performer@/-init@/.ly}, -see @rlearning{Other sources of information}. -For example, to remove the effect of dynamics -from the MIDI output, insert the following lines in the -@code{\midi@{ @}} block. - -@example -\midi @{ - ... - \context @{ - \Voice - \remove "Dynamic_performer" - @} -@} -@end example - -MIDI output is created only when a @code{\midi} block is included -within a score block defined with a @code{\score} command. If it -is placed within an explicitly instantiated score context (i.e. -within a @code{\new Score} block) the file will fail. To solve -this, enclose the @code{\new Score} and the @code{\midi} commands -in a @code{\score} block. - -@example -\score @{ - \new Score @{ @dots{}notes@dots{} @} - \midi @{ @} -@} -@end example - -@node What goes into the MIDI output? -@subsection What goes into the MIDI output? - -@c TODO Check grace notes - timing is suspect? - -@unnumberedsubsubsec Supported in MIDI - -@cindex Pitches in MIDI -@cindex MIDI, Pitches -@cindex Quarter tones in MIDI -@cindex MIDI, quarter tones -@cindex Microtones in MIDI -@cindex MIDI, microtones -@cindex Chord names in MIDI -@cindex MIDI, chord names -@cindex Rhythms in MIDI -@cindex MIDI, Rhythms -@c TODO etc - -The following items of notation are reflected in the MIDI output: - -@itemize -@item Pitches -@item Microtones (See @ref{Accidentals}. Rendering needs a -player that supports pitch bend.) -@item Chords entered as chord names -@item Rhythms entered as note durations, including tuplets -@item Tremolos entered without @q{@code{:}[@var{number}]} -@item Ties -@item Dynamic marks -@item Crescendi, decrescendi over multiple notes -@item Tempo changes entered with a tempo marking -@item Lyrics -@end itemize - -@unnumberedsubsubsec Unsupported in MIDI - -@c TODO index as above - -The following items of notation have no effect on the MIDI output: - -@itemize -@item Rhythms entered as annotations, e.g. swing -@item Tempo changes entered as annotations with no tempo marking -@item Staccato and other articulations and ornamentations -@item Slurs and Phrasing slurs -@item Crescendi, decrescendi over a single note -@item Tremolos entered with @q{@code{:}[@var{number}]} -@item Figured bass -@item Microtonal chords -@end itemize - - -@node Repeats in MIDI -@subsection Repeats in MIDI - -@cindex repeats in MIDI -@funindex \unfoldRepeats - -With a few minor additions, all types of repeats can be represented -in the MIDI output. This is achieved by applying the -@code{\unfoldRepeats} music function. This function changes all -repeats to unfold repeats. - -@lilypond[quote,verbatim] -\unfoldRepeats { - \repeat tremolo 8 {c'32 e' } - \repeat percent 2 { c''8 d'' } - \repeat volta 2 {c'4 d' e' f'} - \alternative { - { g' a' a' g' } - {f' e' d' c' } - } -} -\bar "|." -@end lilypond - -When creating a score file using @code{\unfoldRepeats} for MIDI, -it is necessary to make two @code{\score} blocks: one for MIDI -(with unfolded repeats) and one for notation (with volta, tremolo, -and percent repeats). For example, - -@example -\score @{ - @var{..music..} - \layout @{ .. @} -@} -\score @{ - \unfoldRepeats @var{..music..} - \midi @{ .. @} -@} -@end example - -@node Controlling MIDI dynamics -@subsection Controlling MIDI dynamics - -MIDI dynamics are implemented by the Dynamic_performer which lives -by default in the Voice context. It is possible to control the -overall MIDI volume, the relative volume of dynamic markings and -the relative volume of different instruments. - -@unnumberedsubsubsec Dynamic marks - -Dynamic marks are translated to a fixed fraction of the available -MIDI volume range. The default fractions range from 0.25 for -@notation{ppppp} to 0.95 for @notation{fffff}. The set of dynamic -marks and the associated fractions can be seen in -@file{../scm/midi.scm}, see @rlearning{Other sources of information}. -This set of fractions may be changed or extended by providing a -function which takes a dynamic mark as its argument and returns the -required fraction, and setting -@code{Score.dynamicAbsoluteVolumeFunction} to this function. - -For example, if a @notation{rinforzando} dynamic marking, -@code{\rfz}, is required, this will not by default -have any effect on the MIDI volume, as this dynamic marking is not -included in the default set. Similarly, if a new dynamic marking -has been defined with @code{make-dynamic-script} that too will not -be included in the default set. The following example shows how the -MIDI volume for such dynamic markings might be added. The Scheme -function sets the fraction to 0.9 if a dynamic mark of rfz is -found, or calls the default function otherwise. - -@lilypond[verbatim,quote] -#(define (myDynamics dynamic) - (if (equal? dynamic "rfz") - 0.9 - (default-dynamic-absolute-volume dynamic))) - -\score { - \new Staff { - \set Staff.midiInstrument = #"cello" - \set Score.dynamicAbsoluteVolumeFunction = #myDynamics - \new Voice { - \relative c'' { - a\pp b c-\rfz - } - } - } - \layout {} - \midi {} -} -@end lilypond - -Alternatively, if the whole table of fractions needs to be -redefined, it would be better to use the -@notation{default-dynamic-absolute-volume} procedure in -@file{../scm/midi.scm} and the associated table as a model. -The final example in this section shows how this might be done. - -@unnumberedsubsubsec Overall MIDI volume - -The minimum and maximum overall volume of MIDI dynamic markings is -controlled by setting the properties @code{midiMinimumVolume} and -@code{midiMaximumVolume} at the @code{Score} level. These -properties have an effect only on dynamic marks, so if they -are to apply from the start of the score a dynamic mark must be -placed there. The fraction corresponding to each dynamic mark is -modified with this formula - -@example -midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction -@end example - -In the following example the dynamic range of the overall MIDI -volume is limited to the range 0.2 - 0.5. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - midiMinimumVolume = #0.2 - midiMaximumVolume = #0.5 - } - } -} -@end lilypond - -@unnumberedsubsubsec Equalizing different instruments (i) - -If the minimum and maximum MIDI volume properties are set in -the @code{Staff} context the relative volumes of the MIDI -instruments can be controlled. This gives a basic instrument -equalizer, which can enhance the quality of the MIDI output -remarkably. - -In this example the volume of the clarinet is reduced relative -to the volume of the flute. There must be a dynamic -mark on the first note of each instrument for this to work -correctly. - -@lilypond[verbatim,quote] -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Staff.midiInstrument = #"flute" - \set Staff.midiMinimumVolume = #0.7 - \set Staff.midiMaximumVolume = #0.9 - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \set Staff.midiMinimumVolume = #0.3 - \set Staff.midiMaximumVolume = #0.6 - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - -@unnumberedsubsubsec Equalizing different instruments (ii) - -If the MIDI minimum and maximum volume properties are not set -LilyPond will, by default, apply a small degree of equalization -to a few instruments. The instruments and the equalization -applied are shown in the table @notation{instrument-equalizer-alist} -in @file{../scm/midi.scm}. - -This basic default equalizer can be replaced by setting -@code{instrumentEqualizer} in the @code{Score} context to a new -Scheme procedure which accepts a MIDI instrument name as its only -argument and returns a pair of fractions giving the minimum and -maximum volumes to be applied to that instrument. This replacement -is done in the same way as shown for resetting the -@code{dynamicAbsoluteVolumeFunction} at the start of this section. -The default equalizer, @notation{default-instrument-equalizer}, in -@file{../scm/midi.scm} shows how such a procedure might be written. - -The following example sets the relative flute and clarinet volumes -to the same values as the previous example. - -@lilypond[verbatim,quote] -#(define my-instrument-equalizer-alist '()) - -#(set! my-instrument-equalizer-alist - (append - '( - ("flute" . (0.7 . 0.9)) - ("clarinet" . (0.3 . 0.6))) - my-instrument-equalizer-alist)) - -#(define (my-instrument-equalizer s) - (let ((entry (assoc s my-instrument-equalizer-alist))) - (if entry - (cdr entry)))) - -\score { - << - \new Staff { - \key g \major - \time 2/2 - \set Score.instrumentEqualizer = #my-instrument-equalizer - \set Staff.midiInstrument = #"flute" - \new Voice \relative c''' { - r2 g\mp g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - } - \new Staff { - \key g \major - \set Staff.midiInstrument = #"clarinet" - \new Voice \relative c'' { - b1\p a2. b8 a - g2. fis8 e - fis2 r - } - } - >> - \layout { } - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} -@end lilypond - -@ignore -@c Delete when satisfied this is adequately covered elsewhere -td - -@n ode Microtones in MIDI -@s ubsection Microtones in MIDI - -@cindex microtones in MIDI - -Microtones consisting of half sharps and half flats are exported -to the MIDI file and render correctly in MIDI players which support -pitch bending. See @ref{Note names in other languages}. Here is -an example showing all the half sharps and half flats. It can be -copied out and compiled to test microtones in your MIDI player. - -@lilypond[verbatim,quote] -\score { - \relative c' { - c cih cis cisih - d dih ees eeh - e eih f fih - fis fisih g gih - gis gisih a aih - bes beh b bih - } - \layout {} - \midi {} -} -@end lilypond -@end ignore - - -@node Percussion in MIDI -@subsection Percussion in MIDI - -Percussion instruments are generally notated in a @code{DrumStaff} -context and when notated in this way they are outputted correctly -to MIDI channel@tie{}10, but some pitched percussion instruments, -like the xylophone, marimba, vibraphone, timpani, etc., are -treated like @qq{normal} instruments and music for these instruments -should be entered in a normal @code{Staff} context, not a -@code{DrumStaff} context, to obtain the correct MIDI output. - -Some non-pitched percussion sounds included in the general MIDI -standard, like melodic tom, taiko drum, synth drum, etc., cannot -be reached via MIDI channel@tie{}10, so the notation for such -instruments should also be entered in a normal @code{Staff} -context, using suitable normal pitches. - -Many percussion instruments are not included in the general MIDI -standard, e.g. castanets. The easiest, although unsatisfactory, -method of producing some MIDI output when writing for such -instruments is to substitute the nearest sound from the standard -set. - -@c TODO Expand with examples, and any other issues - -@knownissues - -Because the general MIDI standard does not contain rim shots, the -sidestick is used for this purpose instead. - - diff --git a/Documentation/user/install.itely b/Documentation/user/install.itely deleted file mode 100644 index f5ddb4f05e..0000000000 --- a/Documentation/user/install.itely +++ /dev/null @@ -1,85 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ifclear INSTALL -@node Install -@chapter Install -@end ifclear - -There are two sets of releases for LilyPond: stable releases, and -unstable development releases. Stable versions have an even-numbered -@q{minor} version number (i.e. 2.8, 2.10, 2.12, etc). Development -versions have an odd-numbered @q{minor} version number (i.e. 2.7, 2.9, -2.11, etc). - -Building LilyPond is a very involved process, so we @strong{highly} -recommend using the precompiled binaries. - -@menu -* Precompiled binaries:: -* Compiling from source:: -@end menu - - -@node Precompiled binaries -@section Precompiled binaries - -@unnumberedsubsec Downloading - -Check out @uref{http://lilypond.org/web/install/} for up to date -information on binary packages for your platform. If your operating -system is not covered on that general page, please see the complete list -at @uref{http://download.linuxaudio.org/lilypond/binaries/} - -We currently create binaries for - -@example -darwin-ppc - MacOS X powerpc -darwin-x86 - MacOS X intel -freebsd-64 - FreeBSD 6.x, x86_64 -freebsd-x86 - FreeBSD 4.x, x86 -linux-64 - Any GNU/Linux distribution, x86_64 -linux-ppc - Any GNU/Linux distribution, powerpc -linux-x86 - Any GNU/Linux distribution, x86 -mingw - Windows x86 -@end example - -@knownissues - -If you have MacOS 10.3 or 10.4 and you would like to use Python -scripts such as @command{convert-ly} and @command{lilypond-book}, see -@ref{Setup for MacOS X,,,lilypond-program,Application Usage}. - -@ignore -You can also compile LilyPond directly from the source code. This -requires that you can read English, so this section is not -translated. If you really want to compile LilyPond, see -@iftex -@c DO NOT translate the following line at all. -@ref{Compiling from source,,,lilypond-program,Application Usage}. -@end iftex -@ifhtml -@c Please translate the following line (but not the .html file name) -the @uref{Compiling-from-source.html,documentation in English}. -@end ifhtml -@end ignore - -@c TRANSLATORS: -@c Please **do not** translate the file included below. Users -@c should not be compiling LilyPond themselves; if they really -@c want to do so, they should be able to read the English docs, -@c because they'll probably need to ask questions in English -@c on the -devel list. -gp -@c Instead, please uncomment and translate the paragraph above, -@c and remove all stuff (menu, nodes, contents) below this line. - - -@include compile.itely diff --git a/Documentation/user/introduction.itely b/Documentation/user/introduction.itely deleted file mode 100644 index b031f13ab3..0000000000 --- a/Documentation/user/introduction.itely +++ /dev/null @@ -1,1137 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Introduction -@chapter Introduction - -This chapter introduces readers to LilyPond and the -documentation. - -@menu -* Background:: -* About the documentation:: -@end menu - - -@node Background -@section Background - -This section covers the overall goals and architecture of -LilyPond. - -@menu -* Engraving:: -* Automated engraving:: -* What symbols to engrave?:: -* Music representation:: -* Example applications:: -@end menu - - -@node Engraving -@unnumberedsubsec Engraving - -@cindex engraving -@cindex typography, music -@cindex music typography -@cindex plate engraving -@cindex music engraving - -The art of music typography is called @emph{(plate) engraving}. -The term derives from the traditional process of music printing. -Just a few decades ago, sheet music was made by cutting and -stamping the music into a zinc or pewter plate in mirror image. -The plate would be inked, the depressions caused by the cutting -and stamping would hold ink. An image was formed by pressing -paper to the plate. The stamping and cutting was completely done -by hand. Making a correction was cumbersome, if possible at all, -so the engraving had to be perfect in one go. Engraving was a -highly specialized skill; a craftsman had to complete around five -years of training before earning the title of master engraver, and -another five years of experience were necessary to become truly -skilled. - -Nowadays, all newly printed music is produced with computers. -This has obvious advantages; prints are cheaper to make, and -editorial work can be delivered by email. Unfortunately, the -pervasive use of computers has also decreased the graphical -quality of scores. Computer printouts have a bland, mechanical -look, which makes them unpleasant to play from. - - -@c introduce illustrating aspects of engraving, font... -The images below illustrate the difference between traditional -engraving and typical computer output, and the third picture shows -how LilyPond mimics the traditional look. The left picture shows -a scan of a flat symbol from an edition published in 2000. The -center depicts a symbol from a hand-engraved Bärenreiter edition -of the same music. The left scan illustrates typical flaws of -computer print: the staff lines are thin, the weight of the flat -symbol matches the light lines and it has a straight layout with -sharp corners. By contrast, the Bärenreiter flat has a bold, -almost voluptuous rounded look. Our flat symbol is designed -after, among others, this one. It is rounded, and its weight -harmonizes with the thickness of our staff lines, which are also -much thicker than lines in the computer edition. - -@multitable @columnfractions .125 .25 .25 .25 .125 -@item @tab -@ifnotinfo -@iftex -@image{henle-flat-gray,,4cm} -@end iftex -@ifnottex -@image{henle-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{baer-flat-gray,,4cm} -@end iftex -@ifnottex -@image{baer-flat-gray,,,png} -@end ifnottex - -@tab -@iftex -@image{lily-flat-bw,,4cm} -@end iftex -@ifnottex -@image{lily-flat-bw,,,png} -@end ifnottex -@end ifnotinfo -@ifinfo -@image{lilypond/henle-flat-bw,,,,png} @image{lilypond/baer-flat-bw,,,,png} -@image{lilypond/lily-flat-bw,,,,png} -@end ifinfo - -@item @tab -Henle (2000) -@tab -Bärenreiter (1950) -@tab -LilyPond Feta font (2003) - -@end multitable - - -@cindex musical symbols -@cindex font -@cindex blackness -@cindex balance - -@c introduce illustrating aspects of engraving, spacing... -In spacing, the distribution of space should reflect the durations -between notes. However, many modern scores adhere to the -durations with mathematical precision, which leads to poor -results. In the next example a motive is printed twice: once -using exact mathematical spacing, and once with corrections. Can -you spot which fragment is which? - -@cindex optical spacing -@c file spacing-optical. -@c need to include it here, because we want two images. -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} - -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.6 - } - } -} -@end lilypond - -@lilypond -\paper { - ragged-right = ##t - indent = #0.0 -} - -music = { - c'4 e''4 e'4 b'4 | - \stemDown - b'8[ e'' a' e''] - \stemNeutral - e'8[ e'8 e'8 e'8] -} -\score -{ - \music - \layout { - \context { - \Staff - \override NoteSpacing #'stem-spacing-correction = #0.0 - \override NoteSpacing #'same-direction-correction = #0.0 - \override StaffSpacing #'stem-spacing-correction = #0.0 - } - } -} -@end lilypond - -@cindex regular rhythms -@cindex regular spacing -@cindex spacing, regular - -Each bar in the fragment only uses notes that are played in a -constant rhythm. The spacing should reflect that. Unfortunately, -the eye deceives us a little; not only does it notice the distance -between note heads, it also takes into account the distance -between consecutive stems. As a result, the notes of an -up-stem/@/down-stem combination should be put farther apart, and -the notes of a down-stem/@/up-stem combination should be put -closer together, all depending on the combined vertical positions -of the notes. The upper two measures are printed with this -correction, the lower two measures without, forming -down-stem/@/up-stem clumps of notes. - - -Musicians are usually more absorbed with performing than with -studying the looks of a piece of music, so nitpicking about -typographical details may seem academical. But it is not. In -larger pieces with monotonous rhythms, spacing corrections lead to -subtle variations in the layout of every line, giving each one a -distinct visual signature. Without this signature all lines would -look the same, and they become like a labyrinth. If a musician -looks away once or has a lapse in concentration, the lines might -lose their place on the page. - -Similarly, the strong visual look of bold symbols on heavy staff -lines stands out better when the music is far away from the -reader, for example, if it is on a music stand. A careful -distribution of white space allows music to be set very tightly -without cluttering symbols together. The result minimizes the -number of page turns, which is a great advantage. - -This is a common characteristic of typography. Layout should be -pretty, not only for its own sake, but especially because it helps -the reader in her task. For performance material like sheet -music, this is of double importance: musicians have a limited -amount of attention. The less attention they need for reading, -the more they can focus on playing the music. In other words, -better typography translates to better performances. - -These examples demonstrate that music typography is an art that is -subtle and complex, and that producing it requires considerable -expertise, which musicians usually do not have. LilyPond is our -effort to bring the graphical excellence of hand-engraved music to -the computer age, and make it available to normal musicians. We -have tuned our algorithms, font-designs, and program settings to -produce prints that match the quality of the old editions we love -to see and love to play from. - - -@node Automated engraving -@unnumberedsubsec Automated engraving - -@cindex engraving, automated -@cindex automated engraving - -How do we go about implementing typography? If craftsmen need -over ten years to become true masters, how could we simple hackers -ever write a program to take over their jobs? - -The answer is: we cannot. Typography relies on human judgment of -appearance, so people cannot be replaced completely. However, -much of the dull work can be automated. If LilyPond solves most -of the common situations correctly, this will be a huge -improvement over existing software. The remaining cases can be -tuned by hand. Over the course of years, the software can be -refined to do more and more things automatically, so manual -overrides are less and less necessary. - -When we started, we wrote the LilyPond program entirely in the C++ -programming language; the program's functionality was set in stone -by the developers. That proved to be unsatisfactory for a number -of reasons: - -@itemize - -@item When LilyPond makes mistakes, users need to override -formatting decisions. Therefore, the user must have access to the -formatting engine. Hence, rules and settings cannot be fixed by -us at compile-time but must be accessible for users at run-time. - -@item Engraving is a matter of visual judgment, and therefore a -matter of taste. As knowledgeable as we are, users can disagree -with our personal decisions. Therefore, the definitions of -typographical style must also be accessible to the user. - -@item Finally, we continually refine the formatting algorithms, so -we need a flexible approach to rules. The C++ language forces a -certain method of grouping rules that do not match well with how -music notation works. - -@end itemize - -@cindex Scheme programming language - -These problems have been addressed by integrating an interpreter -for the Scheme programming language and rewriting parts of -LilyPond in Scheme. The current formatting architecture is built -around the notion of graphical objects, described by Scheme -variables and functions. This architecture encompasses formatting -rules, typographical style and individual formatting decisions. -The user has direct access to most of these controls. - -Scheme variables control layout decisions. For example, many -graphical objects have a direction variable that encodes the -choice between up and down (or left and right). Here you see two -chords, with accents and arpeggios. In the first chord, the -graphical objects have all directions down (or left). The second -chord has all directions up (right). - -@lilypond[quote,ragged-right] -\new Score \with { - \override SpacingSpanner #'spacing-increment = #3 - \override TimeSignature #'transparent = ##t -} \relative c' { - \stemDown 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT - \stemUp 4^>-\arpeggio -} -@end lilypond - -@cindex score formatting -@cindex formatting a score -@cindex formatting rules - -@noindent -The process of formatting a score consists of reading and writing -the variables of graphical objects. Some variables have a preset -value. For example, the thickness of many lines -- a -characteristic of typographical style -- is a variable with a -preset value. You are free to alter this value, giving your score -a different typographical impression. - -@lilypond[quote,ragged-right] -fragment = { - \clef bass f8 as8 - c'4-~ c'16 as g f e16 g bes c' des'4 -} -<< - \new Staff \fragment - \new Staff \with { - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #0.5 - \override Bar #'thickness = #3.6 - \override Tie #'thickness = #2.2 - \override StaffSymbol #'thickness = #3.0 - \override Tie #'extra-offset = #'(0 . 0.3) - } - \fragment ->> -@end lilypond - -Formatting rules are also preset variables: each object has -variables containing procedures. These procedures perform the -actual formatting, and by substituting different ones, we can -change the appearance of objects. In the following example, the -rule which note head objects are used to produce their symbol is -changed during the music fragment. - -@lilypond[quote,ragged-right] -#(set-global-staff-size 30) - -#(define (mc-squared grob orig current) - (let* ((interfaces (ly:grob-interfaces grob)) - (pos (ly:grob-property grob 'staff-position))) - (if (memq 'note-head-interface interfaces) - (begin - (ly:grob-set-property! grob 'stencil - (grob-interpret-markup grob - (make-lower-markup 0.5 - (case pos - ((-5) "m") - ((-3) "c ") - ((-2) (make-smaller-markup (make-bold-markup "2"))) - (else "bla"))))))))) - -\new Voice \relative c' { - \stemUp - \set autoBeaming = ##f - \time 2/4 - 4 - \once \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil - \once \override NoteHead #'font-size = #-7 - \once \override NoteHead #'font-family = #'sans - \once \override NoteHead #'font-series = #'bold - 4 - \once \override NoteHead #'style = #'cross - 4 - \applyOutput #'Voice #mc-squared - 4 - << - { d8[ es-( fis^^ g] fis2-) } - \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 } - >> -} -@end lilypond - - -@node What symbols to engrave? -@unnumberedsubsec What symbols to engrave? - -@cindex engraving -@cindex typography -@cindex engraver -@cindex plug-in - -The formatting process decides where to place symbols. However, -this can only be done once it is decided @emph{what} symbols -should be printed, in other words what notation to use. - -Common music notation is a system of recording music that has -evolved over the past 1000 years. The form that is now in common -use dates from the early renaissance. Although the basic form -(i.e., note heads on a 5-line staff) has not changed, the details -still evolve to express the innovations of contemporary notation. -Hence, it encompasses some 500 years of music. Its applications -range from monophonic melodies to monstrous counterpoints for -large orchestras. - -How can we get a grip on such a many-headed beast, and force it -into the confines of a computer program? Our solution is to break -up the problem of notation (as opposed to engraving, i.e., -typography) into digestible and programmable chunks: every type of -symbol is handled by a separate module, a so-called plug-in. Each -plug-in is completely modular and independent, so each can be -developed and improved separately. Such plug-ins are called -@code{engraver}s, by analogy with craftsmen who translate musical -ideas to graphic symbols. - -In the following example, we see how we start out with a plug-in -for note heads, the @code{Note_heads_engraver}. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - \consists "Pitch_squash_engraver" - } - } -} -@end lilypond - -@noindent -Then a @code{Staff_symbol_engraver} adds the staff - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - \consists "Pitch_squash_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -the @code{Clef_engraver} defines a reference point for the staff - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Stem_engraver" - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -and the @code{Stem_engraver} adds stems. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" - -\score { - \topVoice - \layout { - \context { - \Voice - \remove "Phrasing_slur_engraver" - \remove "Slur_engraver" - \remove "Script_engraver" - \remove "Beam_engraver" - \remove "Auto_beam_engraver" - } - \context { - \Staff - \remove "Accidental_engraver" - \remove "Key_engraver" - \remove "Bar_engraver" - \remove "Time_signature_engraver" - } - } -} -@end lilypond - -@noindent -The @code{Stem_engraver} is notified of any note head coming -along. Every time one (or more, for a chord) note head is seen, a -stem object is created and connected to the note head. By adding -engravers for beams, slurs, accents, accidentals, bar lines, time -signature, and key signature, we get a complete piece of notation. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { \topVoice } -@end lilypond - -@cindex polyphony -@cindex engraving multiple voices -@cindex contexts - -This system works well for monophonic music, but what about -polyphony? In polyphonic notation, many voices can share a staff. - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\new Staff << \topVoice \\ \botVoice >> -@end lilypond - -In this situation, the accidentals and staff are shared, but the -stems, slurs, beams, etc., are private to each voice. Hence, -engravers should be grouped. The engravers for note heads, stems, -slurs, etc., go into a group called @q{Voice context,} while the -engravers for key, accidental, bar, etc., go into a group called -@q{Staff context.} In the case of polyphony, a single Staff -context contains more than one Voice context. Similarly, multiple -Staff contexts can be put into a single Score context. The Score -context is the top level notation context. - - -@seealso -Internals Reference: @rinternals{Contexts}. - - -@lilypond[quote,ragged-right] -\include "engraver-example.ily" -\score { - << - \new Staff << \topVoice \\ \botVoice >> - \new Staff << \pah \\ \hoom >> - >> -} -@end lilypond - - -@node Music representation -@unnumberedsubsec Music representation - -@cindex syntax -@cindex recursive structures - -Ideally, the input format for any high-level formatting system is -an abstract description of the content. In this case, that would -be the music itself. This poses a formidable problem: how can we -define what music really is? Instead of trying to find an answer, -we have reversed the question. We write a program capable of -producing sheet music, and adjust the format to be as lean as -possible. When the format can no longer be trimmed down, by -definition we are left with content itself. Our program serves as -a formal definition of a music document. - -The syntax is also the user-interface for LilyPond, hence it is -easy to type: - -@example -@{ - c'4 d'8 -@} -@end example - -@noindent -to create a quarter note C1 (middle C) and an eighth note D1 (D -above middle C). - -@lilypond[quote] -{ - c'4 d'8 -} -@end lilypond - -On a microscopic scale, such syntax is easy to use. On a larger -scale, syntax also needs structure. How else can you enter -complex pieces like symphonies and operas? The structure is -formed by the concept of music expressions: by combining small -fragments of music into larger ones, more complex music can be -expressed. For example - -@lilypond[quote,verbatim,fragment,relative=1] -f4 -@end lilypond - -@noindent -Simultaneous notes can be constructed by enclosing them with -@code{<<} and @code{>>}: - -@example -<> -@end example - -@lilypond[quote,fragment,relative=1] -\new Voice { <> } -@end lilypond - -@noindent -This expression is put in sequence by enclosing it in curly braces -@code{@{@tie{}@dots{}@tie{}@}}: - -@example -@{ f4 <> @} -@end example - -@lilypond[quote,relative=1,fragment] -{ f4 <> } -@end lilypond - -@noindent -The above is also an expression, and so it may be combined again -with another simultaneous expression (a half note) using -@code{<<}, @code{\\}, and @code{>>}: - -@example -<< g2 \\ @{ f4 <> @} >> -@end example - -@lilypond[quote,fragment,relative=2] -\new Voice { << g2 \\ { f4 <> } >> } -@end lilypond - -Such recursive structures can be specified neatly and formally in -a context-free grammar. The parsing code is also generated from -this grammar. In other words, the syntax of LilyPond is clearly -and unambiguously defined. - -User-interfaces and syntax are what people see and deal with most. -They are partly a matter of taste, and also subject of much -discussion. Although discussions on taste do have their merit, -they are not very productive. In the larger picture of LilyPond, -the importance of input syntax is small: inventing neat syntax is -easy, while writing decent formatting code is much harder. This -is also illustrated by the line-counts for the respective -components: parsing and representation take up less than 10% of -the source code. - - -@node Example applications -@unnumberedsubsec Example applications - -@cindex simple examples -@cindex examples, simple - -We have written LilyPond as an experiment of how to condense the -art of music engraving into a computer program. Thanks to all -that hard work, the program can now be used to perform useful -tasks. The simplest application is printing notes. - -@lilypond[quote,relative=1] -{ - \time 2/4 - c4 c g'4 g a4 a g2 -} -@end lilypond - -@noindent -By adding chord names and lyrics we obtain a lead sheet. - -@lilypond[quote,ragged-right] -<< - \chords { c2 c f2 c } - \new Staff - \relative c' { - \time 2/4 - c4 c g' g a a g2 - } - \addlyrics { twin -- kle twin -- kle lit -- tle star } ->> -@end lilypond - -Polyphonic notation and piano music can also be printed. The -following example combines some more exotic constructs. - -@lilypond[quote] -\header { - title = "Screech and boink" - subtitle = "Random complex notation" - composer = "Han-Wen Nienhuys" -} - -\score { - \context PianoStaff << - \new Staff = "up" { - \time 4/8 - \key c \minor - << { - \revert Stem #'direction - \change Staff = down - \set subdivideBeams = ##t - g16.[ - \change Staff = up - c'''32 - \change Staff = down - g32 - \change Staff = up - c'''32 - \change Staff = down - g16] - \change Staff = up - \stemUp - \set followVoice = ##t - c'''32([ b''16 a''16 gis''16 g''32)] - } \\ { - s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] - } \\ { - s4 \autoBeamOff d''8.. f''32 - } \\ { - s4 es''4 - } >> - } - - \new Staff = "down" { - \clef bass - \key c \minor - \set subdivideBeams = ##f - \override Stem #'french-beaming = ##t - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #4.0 - g'16[ b16 fis16 g16] - << \makeClusters { - as16 - - - } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down - 4\arpeggio - } - >> } - >> - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 8) - } - } - \layout { - \context { - \Staff - \consists Horizontal_bracket_engraver - } - } -} -@end lilypond - -The fragments shown above have all been written by hand, but that -is not a requirement. Since the formatting engine is mostly -automatic, it can serve as an output means for other programs that -manipulate music. For example, it can also be used to convert -databases of musical fragments to images for use on websites and -multimedia presentations. - -This manual also shows an application: the input format is text, -and can therefore be easily embedded in other text-based formats -such as @LaTeX{}, HTML, or in the case of this manual, Texinfo. -By means of a special program, the input fragments can be replaced -by music images in the resulting PDF or HTML output files. This -makes it easy to mix music and text in documents. - - -@node About the documentation -@section About the documentation - -This section explains the different portions of the documentation. - -@cindex Learning Manual -@cindex Music Glossary -@cindex Notation Reference -@cindex Application Usage -@cindex Snippet List -@cindex Internals Reference - -@c leave these lines wrapping around. It's some texinfo 4.12 thing. -gp -@c This is actually a limitation of texi2html. -jm -@menu -* About the Learning Manual:: this manual introduces LilyPond, giving in-depth explanations of how to create notation. -* About the Music Glossary:: this manual explains musical terms and gives translations of terms in other languages. -* About the Notation Reference:: this manual is the main portion of the documentation. It provides detailed information about creating notation. This book assumes that the reader knows basic material covered in the Learning Manual and is familiar with the English musical terms presented in the Musical Glossary. -* About the Application Usage:: this discusses the actual programs and operating system-specific issues. -* About the Snippet List:: this is a collection of short LilyPond examples. -* About the Internals Reference:: this document gives reference information about LilyPond's internal structures, which is required for constructing tweaks. -* Other documentation:: there are a few other portions of the documentation, such as News items and the mailist archives. -@end menu - - -@node About the Learning Manual -@unnumberedsubsec About the Learning Manual - -@cindex Learning Manual - -This book explains how to begin learning LilyPond, as well as -explaining some key concepts in easy terms. You should read these -chapters in a linear fashion. - -There is a paragraph @strong{See also} at the end of each section, -which contains cross-references to other sections: you should not -follow these cross-references at first reading; when you have read all -of the Learning Manual, you may want to read some sections again and -follow cross-references for further reading. - -@itemize - -@item -@ref{Introduction}: explains the background and overall goal of -LilyPond. - -@item -@ref{Tutorial}: gives a gentle introduction to typesetting music. -First time users should start here. - -@item -@ref{Fundamental concepts}: explains some general concepts about -the LilyPond file format. If you are not certain where to place a -command, read this chapter! - -@item -@ref{Tweaking output}: shows how to change the default engraving -that LilyPond produces. - -@item -@ref{Working on LilyPond projects}: discusses practical uses of -LilyPond and how to avoid some common problems. Read this before -undertaking large projects! - -@end itemize - -The Learning Manual also contains appendices which are not part of the -recommended linear reading. They may be useful for later -viewing: - -@itemize - -@item -@ref{Templates}: shows ready-made templates of LilyPond pieces. -Just cut and paste a template into a file, add notes, and you're -done! - -@item -@ref{Scheme tutorial}: presents a short introduction to Scheme, -the programming language that music functions use. This is -material for advanced tweaks; many users never touch Scheme at -all. - -@end itemize - - -@node About the Music Glossary -@unnumberedsubsec About the Music Glossary - -@cindex Music Glossary -@cindex idiom -@cindex jargon -@cindex terminology -@cindex foreign languages -@cindex language - -@rglosnamed{Top,Music glossary} -this explains musical terms, and includes translations to various -languages. If you are not familiar with music notation or music -terminology (especially if you are a non-native English speaker), -it is highly advisable to consult the glossary. - - -@node About the Notation Reference -@unnumberedsubsec About the Notation Reference - -@cindex Notation Reference -@cindex appendices -@cindex reference charts -@cindex charts, reference - -This book explains all the LilyPond commands which produce -notation. It assumes that readers are familiar with the concepts -in the Learning Manual. - -@itemize - -@item -@ruser{Musical notation}: -discusses topics grouped by notation construct. This section -gives details about basic notation that will be useful in almost -any notation project. - -@item -@ruser{Specialist notation}: -discusses topics grouped by notation construct. This section -gives details about special notation that will only be useful for -particular instrument (or vocal) groups. - -@item -@ruser{General input and output}: -discusses general information about LilyPond input files and -controlling output. - -@item -@ruser{Spacing issues}: -discusses issues which affect the global output, such as selecting -paper size or specifying page breaks. - -@item -@ruser{Changing defaults}: -explains how to tweak LilyPond to produce exactly the notation you -want. - -@item -@ruser{Interfaces for programmers}: -explains how to create music functions with scheme. - -@end itemize - -The Notation Reference also contains appendices with useful -reference charts. - -@itemize - -@item -@ruser{Literature list}: -contains a set of useful reference books for those who wish to -know more on notation and engraving. - -@item -@ruser{Notation manual tables}: -are a set of tables showing the chord names, MIDI instruments, a -list of color names, and the Feta font. - -@item -@ruser{Cheat sheet}: -is a handy reference of the most common LilyPond commands. - -@item -@ruser{LilyPond command index}: -an index of all LilyPond @code{\commands}. - -@item -@ruser{LilyPond index}: -a complete index. - -@end itemize - - -@node About the Application Usage -@unnumberedsubsec About the Application Usage - -@cindex Application Usage -@cindex integrating LilyPond with other programs - -This book explains how to execute the programs and how to integrate -LilyPond notation with other programs. - -@itemize - -@item -@rprogram{Install}: -explains how to install LilyPond, including compilation if -desired. - -@item -@rprogram{Setup}: -describes how to configure your computer for optimum LilyPond -usage, such as using special environments for certain text -editors. - -@item -@rprogram{Running LilyPond}: -shows how to run LilyPond and its helper programs. In addition, -this section explains how to upgrade input files from previous -versions of LilyPond. - -@item -@rprogram{LilyPond-book}: -explains the details behind creating documents with in-line music -examples, like this manual. - -@item -@rprogram{Converting from other formats}: -explains how to run the conversion programs. These programs are -supplied with the LilyPond package, and convert a variety of music -formats to the @code{.ly} format. - -@end itemize - - -@node About the Snippet List -@unnumberedsubsec About the Snippet List - -@cindex snippets -@cindex LSR -@cindex Snippet List -@cindex LilyPond Snippet Repository - -@rlsrnamed{Top,LilyPond Snippet List}: this shows a -selected set of LilyPond snippets from the -@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} -(LSR). All the snippets are in the public domain. - -Please note that this document is not an exact subset of LSR. LSR -is running a stable LilyPond version, so any snippet which -demonstrates new features of a development version must be added -separately. These are stored in @file{input/new/} in the LilyPond -source tree. - -The list of snippets for each subsection of the Notation Reference are -also linked from the @strong{See also} portion. - - -@node About the Internals Reference -@unnumberedsubsec About the Internals Reference - -@cindex Internals Reference - -@rinternalsnamed{Top,Internals Reference}: this is a set -of heavily cross linked HTML pages which document the nitty-gritty -details of each and every LilyPond class, object, and function. -It is produced directly from the formatting definitions in the -source code. - -Almost all formatting functionality that is used internally is -available directly to the user. For example, most variables that -control thickness values, distances, etc., can be changed in input -files. There are a huge number of formatting options, and all of -them are described in this document. Each section of the Notation -Reference has a @b{See also} subsection, which refers to the -generated documentation. In the HTML document, these subsections -have clickable links. - - -@node Other documentation -@unnumberedsubsec Other documentation - -There are a number of other sources of information which may be -very valuable. - -@itemize - -@item -@ifhtml -@ifset bigpage -@uref{../topdocs/NEWS.html,News}: -@end ifset -@ifclear bigpage -@uref{../../topdocs/NEWS.html,News}: -@end ifclear -@end ifhtml -@ifnothtml -News: -@end ifnothtml -this is a summary of important changes -and new features in LilyPond since the previous version. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-user/, The -lilypond-user mailist archives}: this is a collection of previous -emails sent to the user list. Many questions have been asked -multiple times; there is a very good chance that if you have a -question, the answer might be found in these archives. - -@item @uref{http://lists.gnu.org/archive/html/lilypond-devel/, The -lilypond-devel mailist archives}: this is a collection of previous -emails sent to the developer's list. The discussion here is more -technical; if you have an advanced question about lilypond -internals, the answer might be in these archives. - -@item Embedded music fragments: in all HTML documents that have -music fragments embedded, the exact LilyPond input that was used -to produce that image can be viewed by clicking the image. - -@item Init files: the location of the documentation files that are -mentioned here can vary from system to system. On occasion, this -manual refers to initialization and example files. Throughout this -manual, we refer to input files relative to the top-directory of the -source archive. For example, @file{input/@/lsr/@/dirname/@/bla@/.ly} -may refer to the file -@file{lilypond@/2.x.y/@/input/@/lsr/@/dirname/@/bla@/.ly}. On binary -packages for the UNIX platform, the documentation and examples can -typically be found somewhere below -@file{/usr/@/share/@/doc/@/lilypond/}. Initialization files, for -example @file{scm/@/lily@/.scm}, or @file{ly/@/engraver@/-init@/.ly}, -are usually found in the directory @file{/usr/@/share/@/lilypond/}. -For more details, see @ref{Other sources of information}. - -@end itemize - diff --git a/Documentation/user/keyboards.itely b/Documentation/user/keyboards.itely deleted file mode 100644 index 846a27443a..0000000000 --- a/Documentation/user/keyboards.itely +++ /dev/null @@ -1,646 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Keyboard and other multi-staff instruments -@section Keyboard and other multi-staff instruments - -@lilypondfile[quote]{keyboard-headword.ly} - -This section discusses several aspects of music notation that are -unique to keyboard instruments and other instruments notated on -many staves, such as harps and vibraphones. For the purposes of -this section this entire group of multi-staff instruments is called -@qq{keyboards} for short, even though some of them do not have a -keyboard. - -@menu -* Common notation for keyboards:: -* Piano:: -* Accordion:: -* Harp:: -@end menu - -@node Common notation for keyboards -@subsection Common notation for keyboards - -This section discusses notation issues that may arise for most -keyboard instruments. - -@menu -* References for keyboards:: -* Changing staff manually:: -* Changing staff automatically:: -* Staff-change lines:: -* Cross-staff stems:: -@end menu - -@node References for keyboards -@unnumberedsubsubsec References for keyboards - -@cindex piano staves -@cindex staves, piano -@cindex staves, keyboard instruments -@cindex staves, keyed instruments -@cindex keyboard instrument staves -@cindex keyed instrument staves - -@funindex PianoStaff - -Keyboard instruments are usually notated with Piano staves. These -are two or more normal staves coupled with a brace. The same -notation is also used for other keyed instruments. -Organ music is normally written with two staves inside a -@code{PianoStaff} group and third, normal staff for the pedals. - -The staves in keyboard music are largely independent, but -sometimes voices can cross between the two staves. This -section discusses notation techniques particular to keyboard -music. - -Several common issues in keyboard music are covered elsewhere: - -@itemize - -@item Keyboard music usually contains multiple voices and the -number of voices may change regularly; this is described in -@ref{Collision resolution}. - -@item Keyboard music can be written in parallel, as described in -@ref{Writing music in parallel}. - -@item Fingerings are indicated with @ref{Fingering instructions}. - -@item Organ pedal indications are inserted as articulations, see -@ref{List of articulations}. - -@item Vertical grid lines can be shown with @ref{Grid lines}. - -@item Keyboard music often contains @notation{Laissez vibrer} ties -as well as ties on arpeggios and tremolos, described in -@ref{Ties}. - -@item Placing arpeggios across multiple voices and staves is -covered in @ref{Arpeggio}. - -@item Tremolo marks are described in @ref{Tremolo repeats}. - -@item Several of the tweaks that can occur in keyboard music are -demonstrated in @rlearning{Real music example}. - -@item Hidden notes can be used to produce ties that cross voices, -as shown in @rlearning{Other uses for tweaks}. - -@end itemize - -@c @snippets -@c @lilypondfile[verbatim,lilyquote,texidoc,doctitle] -@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly} -@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312 - -@seealso -Learning Manual: -@rlearning{Real music example}, -@rlearning{Other uses for tweaks}. - -Notation Reference: -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Collision resolution}, -@ref{Writing music in parallel}, -@ref{Fingering instructions}, -@ref{List of articulations}, -@ref{Grid lines}, -@ref{Ties}, -@ref{Arpeggio}, -@ref{Tremolo repeats}. - -Internals Reference: -@rinternals{PianoStaff}. - -Snippets: -@rlsr{Keyboards}. - - -@knownissues - -@cindex keyboard music, centering dynamics -@cindex dynamics, centered in keyboard music -@cindex piano music, centering dynamics -@cindex centered dynamics in piano music -@funindex staff-padding - -Dynamics are not automatically centered, but workarounds do exist. One -option is the @q{piano centered dynamics} template under -@rlearning{Piano templates}; another option is to increase the -@code{staff-padding} of dynamics as discussed in @rlearning{Moving -objects}. - -@node Changing staff manually -@unnumberedsubsubsec Changing staff manually - -@cindex changing staff manually -@cindex manual staff changes -@cindex staff changes, manual -@cindex cross-staff notes -@cindex notes, cross-staff -@cindex cross-staff beams -@cindex beams, cross-staff - -@funindex \change -@funindex change - -Voices can be switched between staves manually, using the command - -@example -\change Staff = @var{staffname} -@end example - -@noindent -The string @var{staffname} is the name of the staff. It switches -the current voice from its current staff to the staff called -@var{staffname}. Typical values for @var{staffname} are -@code{"up"} and @code{"down"}, or @code{"RH"} and @code{"LH"}. - -Cross-staff notes are beamed automatically: - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff = "up" { - 8 - \change Staff = "down" - g8 fis g - \change Staff = "up" - 8 - \change Staff = "down" - e8 dis e - \change Staff = "up" - } - \new Staff = "down" { - \clef bass - % keep staff alive - s1 - } ->> -@end lilypond - -If the beaming needs to be tweaked, make any changes to the stem -directions first. The beam positions are then measured from the -center of the staff that is closest to the beam. For a simple -example of beam tweaking, see @rlearning{Fixing overlapping -notation}. - - -@seealso -Learning Manual: -@rlearning{Fixing overlapping notation}. - -Notation Reference: -@ref{Stems}, -@ref{Automatic beams}. - -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{Beam}, -@rinternals{ContextChange}. - - -@node Changing staff automatically -@unnumberedsubsubsec Changing staff automatically - -@cindex changing staff automatically -@cindex automatic staff changes -@cindex staff changes, automatic - -@funindex \autochange -@funindex autochange -@funindex PianoStaff - -Voices can be made to switch automatically between the top and the -bottom staff. The syntax for this is - -@example -\autochange @dots{}@var{music}@dots{} -@end example - -@noindent -This will create two staves inside the current staff group -(usually a @code{PianoStaff}), called @code{"up"} and -@code{"down"}. The lower staff will be in the bass clef by default. -The autochanger switches on the basis of the pitch (middle@tie{}C is the -turning point), and it looks ahead skipping over rests to switch -in advance. - -@lilypond[quote,verbatim] -\new PianoStaff { - \autochange { - g4 a b c' - d'4 r a g - } -} -@end lilypond - -@cindex relative music and autochange -@cindex autochange and relative music - -@funindex \relative -@funindex relative - -A @code{\relative} section that is outside of @code{\autochange} -has no effect on the pitches of the music, so if necessary, put -@code{\relative} inside @code{\autochange}. - -If additional control is needed over the individual staves, they -can be created manually with the names @code{"up"} and -@code{"down"}. The @code{\autochange} command will then switch -its voice between the existing staves. - -@warning{If staves are created manually, they @emph{must} be named -@code{"up"} and @code{"down"}.} - -For example, staves must be created manually in order to place a -key signature in the lower staff: - -@lilypond[quote,verbatim] -\new PianoStaff << - \new Staff = "up" { - \new Voice = "melOne" { - \key g \major - \autochange \relative c' { - g8 b a c b d c e - d8 r fis, g a2 - } - } - } - \new Staff = "down" { - \key g \major - \clef bass - } ->> -@end lilypond - - -@seealso -Notation Reference: -@ref{Changing staff manually}. - -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{AutoChangeMusic}. - - -@knownissues - -@cindex chords, splitting across staves with \autochange - -The staff switches may not end up in optimal places. For high -quality output, staff switches should be specified manually. - -Chords will not be split across the staves; they will be assigned to a -staff based on the first note named in the chord construct. - -@node Staff-change lines -@unnumberedsubsubsec Staff-change lines - -@cindex staff-change line -@cindex staff change line -@cindex cross-staff line -@cindex cross staff line -@cindex line, staff-change follower -@cindex line, cross-staff -@cindex line, staff-change -@cindex follow voice -@cindex voice, following -@cindex staff switching -@cindex cross-staff - -@funindex followVoice -@funindex \showStaffSwitch -@funindex showStaffSwitch -@funindex \hideStaffSwitch -@funindex hideStaffSwitch - -Whenever a voice switches to another staff, a line connecting the -notes can be printed automatically: - -@lilypond[quote,verbatim,relative=1] -\new PianoStaff << - \new Staff = "one" { - \showStaffSwitch - c1 - \change Staff = "two" - b2 a - } - \new Staff = "two" { - \clef bass - s1*2 - } ->> -@end lilypond - - -@predefined -@code{\showStaffSwitch}, -@code{\hideStaffSwitch}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{Note_head_line_engraver}, -@rinternals{VoiceFollower}. - - -@node Cross-staff stems -@unnumberedsubsubsec Cross-staff stems - -@cindex cross-staff notes -@cindex cross staff notes -@cindex notes, cross-staff -@cindex cross-staff stems -@cindex cross staff stems -@cindex stems, cross-staff -@cindex chords, cross-staff -@cindex cross-staff chords -@cindex cross staff chords - -@funindex Stem -@funindex cross-staff -@funindex length -@funindex flag-style - -Chords that cross staves may be produced: - -@lilypond[verbatim,quote] -\new PianoStaff << - \new Staff { - \relative c' { - f8 e4 d8 d f e4 - } - } - \new Staff { - \relative c' { - << { - \clef bass - % stems may overlap the other staff - \override Stem #'cross-staff = ##t - % extend the stems to reach other other staff - \override Stem #'length = #12 - % do not print extra flags - \override Stem #'flag-style = #'no-flag - % prevent beaming as needed - a8 g4 f8 f bes\noBeam g4 - } - \\ - { - f,2 bes4 c - } >> - } - } ->> -@end lilypond - -@snippets -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{indicating-cross-staff-chords-with-arpeggio-bracket.ly} - - -@seealso -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{Stem}. - - -@node Piano -@subsection Piano - -This section discusses notation issues that relate most directly to the -piano. - -@menu -* Piano pedals:: -@end menu - -@node Piano pedals -@unnumberedsubsubsec Piano pedals - -@cindex piano pedals -@cindex pedals, piano -@cindex sustain pedal -@cindex pedal, sustain -@cindex sostenuto pedal -@cindex pedal, sostenuto -@cindex una corda -@cindex tre corde -@cindex sos. -@cindex U.C. - -@funindex \sustainOn -@funindex sustainOn -@funindex \sustainOff -@funindex sustainOff -@funindex \sostenutoOn -@funindex sostenutoOn -@funindex \sostenutoOff -@funindex sostenutoOff -@funindex \unaCorda -@funindex unaCorda -@funindex \treCorde -@funindex treCorde - -Pianos generally have three pedals that alter the way sound is -produced: @notation{sustain}, @notation{sostenuto} -(@notation{sos.}), and @notation{una corda} (@notation{U.C.}). -Sustain pedals are also found on vibraphones and celestas. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn d e g -1\sustainOff -c4\sostenutoOn e g c, -1\sostenutoOff -c4\unaCorda d e g -1\treCorde -@end lilypond - -@cindex pedal indication styles -@cindex pedal indication, text -@cindex pedal indication, bracket -@cindex pedal indication, mixed -@cindex pedal sustain style -@cindex sustain pedal style - -@funindex pedalSustainStyle -@funindex mixed -@funindex bracket -@funindex text - -There are three styles of pedal indications: text, bracket, and mixed. -The sustain pedal and the una corda pedal use the text style by default -while the sostenuto pedal uses mixed by default. - -@lilypond[quote,verbatim,relative=2] -c4\sustainOn g c2\sustainOff -\set Staff.pedalSustainStyle = #'mixed -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2\sustainOff -\set Staff.pedalSustainStyle = #'bracket -c4\sustainOn g c d -d\sustainOff\sustainOn g, c2 -\bar "|." -@end lilypond - -The placement of the pedal commands matches the physical movement of the -sustain pedal during piano performance. Pedalling to the final bar line -is indicated by omitting the final pedal up command. - - -@seealso -Notation Reference: -@ref{Ties}. - -Snippets: -@rlsr{Keyboards}. - -Internals Reference: -@rinternals{SustainPedal}, -@rinternals{SustainPedalLineSpanner}, -@rinternals{SustainEvent}, -@rinternals{SostenutoPedal}, -@rinternals{SostenutoPedalLineSpanner}, -@rinternals{SostenutoEvent}, -@rinternals{UnaCordaPedal}, -@rinternals{UnaCordaPedalLineSpanner}, -@rinternals{UnaCordaEvent}, -@rinternals{PianoPedalBracket}, -@rinternals{Piano_pedal_engraver}. - - -@node Accordion -@subsection Accordion - -@cindex accordion - -This section discusses notation that is unique to the accordion. - -@menu -* Discant symbols:: -@end menu - -@node Discant symbols -@unnumberedsubsubsec Discant symbols - -@cindex accordion discant symbols -@cindex discant symbols, accordion -@cindex accordion shifts -@cindex accordion shift symbols - -Accordions are often built with more than one set of reeds that may be -in unison with, an octave above, or an octave below the written pitch. -Each accordion maker has different names for the @notation{shifts} that -select the various reed combinations, such as @notation{oboe}, -@notation{musette}, or @notation{bandonium}, so a system of symbols has -come into use to simplify the performance instructions. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{accordion-discant-symbols.ly} - - -@seealso -Snippets: -@rlsr{Keyboards}. - - -@node Harp -@subsection Harp - -This section discusses notation issues that are unique to the harp. - -@menu -* References for harps:: -* Harp pedals:: -@end menu - -@node References for harps -@unnumberedsubsubsec References for harps -@cindex harps -@cindex bisbiglando - -Some common characteristics of harp music are covered elsewhere: - -@itemize - -@item The glissando is the most characterisic harp technique, -@ref{Glissando}. - -@item A @notation{bisbigliando} is written as a tremelo @ref{Tremolo -repeats} - -@item Natural harmonics are covered under @ref{Harmonics}. - -@item For directional arpeggios and non-arpeggios, see @ref{Arpeggio}. - -@end itemize - -@seealso -Notation Reference: -@ref{Tremolo repeats} -@ref{Glissando} -@ref{Arpeggio} -@ref{Harmonics} - -@node Harp pedals -@unnumberedsubsubsec Harp pedals - -@cindex harp pedals -@cindex harp pedal diagrams -@cindex pedals, harp -@cindex pedal diagrams, harp - -Harps have seven strings per octave that may be sounded at the natural, -flattened, or sharpened pitch. In lever harps, each string is adjusted -individually, but in pedal harps every string with the same pitch name -is controlled by a single pedal. From the player's left to right, the -pedals are D, C, and B on the left and E, F, G, and A on the right. -The position of the pedals may be indicated with text marks: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup \concat \vcenter { [D \flat C \sharp B|E \sharp F \sharp G A \flat] } -c!1_\markup \concat \vcenter {[ C \natural ]} -@end lilypond - -or pedal diagrams: - -@lilypond[quote,verbatim,relative=2] -\textLengthOn -cis1_\markup { \harp-pedal #"^v-|vv-^" } -c!1_\markup { \harp-pedal #"^o--|vv-^" } -@end lilypond - -The @code{\harp-pedal} command accepts a string of characters, where -@code{^} is the highest pedal position (flattened pitch), @code{-} is -the middle pedal postion (natural pitch), @code{v} is the lowest pedal -position (sharpened pitch), and @code{|} is the divider. A prefixed -@code{o} will circle the following pedal symbol. - -@seealso -Notation Reference: -@ref{Text scripts} -@ref{Instrument Specific Markup} diff --git a/Documentation/user/lily-flat-bw.png b/Documentation/user/lily-flat-bw.png deleted file mode 100644 index 09ce34e7c5fc7448c2e6f767f7d4ab1620c6cb78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2973 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 Rlh%DU$Z@} -@end example - -@noindent -produces - -@lilypond[quote,fragment,staffsize=11]{} - -@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[fragment]@{lilypond@} - 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\endinput\fi -@} -@end example - -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\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]@{@} -@end example - -@noindent -produces - -@lilypond[fragment,staffsize=11]{} - -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 - -\key c \minor c4 es g2 - -@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{}, where the options -are separated by a colon from the music, for example - -@example -Some music in a line of text. -@end example - - -To include separate files, say - -@example -@var{filename} -@end example - -Additionally, @code{} 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 - - - - - -@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 - - - -\context Staff \with @{ - \remove Time_signature_engraver - \remove Clef_engraver@} - @{ c4( fis) @} - - - -@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. - -@item fontload -This option includes fonts in all of the generated EPS-files for this -snippet. This should be used if the snippet uses any font that @LaTeX{} -cannot find on its own. - -@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.pdftex -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{}. - -@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{.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 Alternate methods of mixing text and music -@section Alternative methods of mixing text and music - -This section shows methods to integrate text and music, different than -the automated method with @command{lilypond-book}. - -@menu -* Many quotes from a large score:: -* Inserting LilyPond output into OpenOffice.org:: -* Inserting LilyPond output into other programs:: -@end menu - -@node Many quotes from a large score -@unnumberedsubsec Many quotes from a large score - -If you need to quote many fragments from a large score, you can also use -the clip systems feature, see @ruser{Extracting fragments of music}. - - -@node Inserting LilyPond output into OpenOffice.org -@unnumberedsubsec Inserting LilyPond output into OpenOffice.org - -@cindex OpenOffice.org - -LilyPond notation can be added to OpenOffice.org with -@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. - - -@node Inserting LilyPond output into other programs -@unnumberedsubsec Inserting LilyPond output into other programs - -To insert LilyPond output in other programs, use @code{lilypond} -instead of @code{lilypond-book}. Each example must be created -individually and added to the document; consult the documentation for -that program. Most programs will be able to insert LilyPond output in -@file{PNG}, @file{EPS}, or @file{PDF} formats. - -To reduce the white space around your LilyPond score, use -the following options - -@example -\paper@{ - indent=0\mm - line-width=120\mm - oddFooterMarkup=##f - oddHeaderMarkup=##f - bookTitleMarkup = ##f - scoreTitleMarkup = ##f -@} - -@{ c1 @} -@end example - -To produce a useful @file{EPS} file, use - -@example -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly - -@file{PNG}: -lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly -@end example - diff --git a/Documentation/user/lilypond-learning.tely b/Documentation/user/lilypond-learning.tely deleted file mode 100644 index cb0c89f1fc..0000000000 --- a/Documentation/user/lilypond-learning.tely +++ /dev/null @@ -1,153 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename lilypond-learning.info -@settitle GNU LilyPond Learning Manual -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Learning Manual of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - -@ifnottex -@node Top -@top GNU LilyPond --- Learning Manual -@end ifnottex - - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-learning.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-learning-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-learning.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-learning/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Learning Manual} -@author The LilyPond development team - - -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -For LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -This file documents GNU LilyPond for beginners. - -Copyright 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -This is the Learning Manual (LM) for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @ref{About the documentation}. - -@cindex web site -@cindex URL - -More information can be found at -@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies -of this and other documentation. - -@menu -* Preface:: Preface. -* Introduction:: What, Why, How. -* Tutorial:: A tutorial introduction. -* Fundamental concepts:: Basic concepts required for reading the rest of this manual. -* Tweaking output:: Introduction to modifying output. -* Working on LilyPond projects:: Discusses real-life usage. - -Appendices - -* Templates:: Ready-made templates. -* Scheme tutorial:: Programming inside LilyPond. -* GNU Free Documentation License:: License of this document. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include preface.itely -@include introduction.itely -@include tutorial.itely -@include fundamental.itely -@include tweaks.itely -@include working.itely - -@include templates.itely -@include scheme-tutorial.itely -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/user/lilypond-program.tely b/Documentation/user/lilypond-program.tely deleted file mode 100644 index ba1722c39f..0000000000 --- a/Documentation/user/lilypond-program.tely +++ /dev/null @@ -1,149 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename lilypond-program.info -@settitle GNU LilyPond program usage -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Program Usage of the LilyPond music engraving system -@omftype program usage -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - - -@ifnottex -@node Top -@top GNU LilyPond --- Application Usage -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-program.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-program-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-program.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-program/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Program usage} -@author The LilyPond development team - - -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -For LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -This file documents GNU LilyPond program usage. - -Copyright 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -This is the Application Usage (AU) manual for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @rlearning{About the documentation}. - -@cindex web site -@cindex URL - -More information can be found at -@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies -of this and other documentation. - -@menu -* Install:: How to install or compile. -* Setup:: Using LilyPond with other programs. -* Running LilyPond:: Operation. -* LilyPond-book:: Integrating text and music. -* Converting from other formats:: Converting to lilypond source format. - -Appendices - -* GNU Free Documentation License:: License of this document. -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include install.itely -@include setup.itely -@include running.itely -@include lilypond-book.itely -@include converters.itely - -@include fdl.itexi - -@node LilyPond index -@appendix LilyPond index - -@printindex cp - -@bye diff --git a/Documentation/user/lilypond.tely b/Documentation/user/lilypond.tely deleted file mode 100644 index cc5afa5239..0000000000 --- a/Documentation/user/lilypond.tely +++ /dev/null @@ -1,229 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore -@setfilename lilypond.info -@settitle GNU LilyPond Notation Reference -@documentencoding UTF-8 -@documentlanguage en - -@include macros.itexi - -@afourpaper - -@c Keep this here, since it pertains to the direntry below. -@ignore -Distributions will want to install lilypond.info in postinstall, doing: - - install-info --info-dir=/usr/share/info out[-www]/lilypond.info - - * Prepend GNU for dir, must be unique. - - * Do not list the `lilypond' node at toplevel, so that `info lilypond' - goes to Top. - - * List all commands in direntry. - -@c * lilypond: (lilypond/lilypond)Running LilyPond. Invoking the -@c LilyPond program. -@end ignore - - -@c -@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). LilyPond Notation Reference. -* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking. -* LilyPond Application Usage: (lilypond-program). Installing and running applications. -* abc2ly: (lilypond-program)Invoking abc2ly. Importing ABC. -* convert-ly: (lilypond-program)Updating files with convert-ly. Older LilyPond versions. -* etf2ly: (lilypond-program)Invoking etf2ly. Importing Finale. -* lilypond-book: (lilypond-program)LilyPond-book. Integrating text and music. -* midi2ly: (lilypond-program)Invoking midi2ly. Importing MIDI. -* musicxml2ly: (lilypond-program)Invoking musicxml2ly. Importing MusicXML. -@end direntry - -@c don't remove this comment. -@ignore -@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival -@omfdescription Notation Reference of the LilyPond music engraving system -@omftype user manual -@omfcategory Applications|Publishing -@omflanguage English -@end ignore - -@ifnottex -@node Top -@top GNU LilyPond --- Notation Reference -@chapheading The music typesetter -@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX. -@end ifnottex - - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond.pdf,PDF} and as -@uref{source/Documentation/user/lilypond-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond.pdf,PDF} and as a -@uref{source/Documentation/user/lilypond/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - - -@c This produces the unified index -@syncodeindex fn cp -@syncodeindex vr cp - - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Notation Reference} -@author The LilyPond development team - -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation - -@vskip 20pt - -For LilyPond version @version{} -@end titlepage - -@copying -Copyright @copyright{} 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end copying - -@ifnottex -This file documents GNU LilyPond. - -Copyright 1999--2009 by the authors - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections. -A copy of the license is included in the section entitled ``GNU -Free Documentation License''. -@end quotation -@end ifnottex - -@ifnottex -This is the Notation Reference (NR) for GNU LilyPond version @version{}. -For more information about how this fits with the other -documentation, see @rlearning{About the documentation}. - -@cindex web site -@cindex URL - -More information can be found at -@uref{http://@/www@/.lilypond@/.org/}. The website contains on-line copies -of this and other documentation. - -@include dedication.itely - -@menu -* Musical notation:: Musical notation. -* Specialist notation:: Notation which is only used for - specific purposes. -* General input and output:: General information about - lilypond input and output. -* Spacing issues:: Display of output on paper. -* Changing defaults:: Tuning output. -* Interfaces for programmers:: Expert usage. - -Appendices - -* Literature list:: Reference works about music notation. -* Notation manual tables:: Tables and charts. -* Cheat sheet:: Summary of LilyPond syntax. -* LilyPond grammar:: Syntax diagram for LilyPond parser. -* GNU Free Documentation License:: License of this document. -* LilyPond command index:: -* LilyPond index:: -@end menu -@end ifnottex - -@contents - - -@include notation.itely -@include specialist.itely - -@include input.itely -@include spacing.itely - -@include changing-defaults.itely -@include programming-interface.itely - - -@include literature.itely -@include notation-appendices.itely -@include cheatsheet.itely - -@node LilyPond grammar -@appendix LilyPond grammar - -This appendix contains a description of the LilyPond grammar, as -output from the parser. - -@verbatiminclude ly-grammar.txt - -@include fdl.itexi - -@node LilyPond command index -@appendix LilyPond command index - -This index lists all the LilyPond commands and keywords with links -to those sections of the manual which describe or discuss their -use. Each link is in two parts. The first part points to the -exact location in the manual where the command or keyword appears; -the second part points to the start of the section of the manual -in which the command or keyword appears. - -@printindex ky - -@node LilyPond index -@appendix LilyPond index - -In addition to all the LilyPond commands and keywords, this index -lists musical terms and words which relate to each of them, with -links to those sections of the manual which describe or discuss -that topic. Each link is in two parts. The first part points to -the exact location in the manual where the topic appears; the -second part points to the start of the section of the manual where -that topic is discussed. - -@printindex cp - -@bye diff --git a/Documentation/user/literature.itely b/Documentation/user/literature.itely deleted file mode 100644 index cf05679e64..0000000000 --- a/Documentation/user/literature.itely +++ /dev/null @@ -1,84 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Literature list -@appendix Literature list - -If you need to know more about music notation, here are some -interesting titles to read. - - - -@table @cite -@item Ignatzek 1995 -Klaus Ignatzek, Die Jazzmethode für Klavier. Schott's Söhne -1995. Mainz, Germany ISBN 3-7957-5140-3. - -A tutorial introduction to playing Jazz on the piano. One of the first -chapters contains an overview of chords in common use for Jazz music. - -@item Gerou 1996 - -Tom Gerou and Linda Lusk, Essential Dictionary of Music -Notation. Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6. - -A concise, alphabetically ordered list of typesetting and music -(notation) issues, covering most of the normal cases. - -@item Read 1968 -Gardner Read, Music Notation: A Manual of Modern Practice. -Taplinger Publishing, New York (2nd edition). - -A standard work on music notation. - -@item Ross 1987 -Ted Ross, Teach yourself the art of music engraving and processing. -Hansen House, Miami, Florida 1987. - -This book is about music engraving, i.e., professional typesetting. -It contains directions on stamping, use of pens and notational -conventions. The sections on reproduction technicalities and history -are also interesting. - -@item Schirmer 2001 -The G.Schirmer/AMP Manual of Style and Usage. G.Schirmer/AMP, NY, 2001. -(This book can be ordered from the rental department.) - -This manual specifically focuses on preparing print for publication by -Schirmer. It discusses many details that are not in other, normal -notation books. It also gives a good idea of what is necessary to bring -printouts to publication quality. - -@item Stone 1980 - -Kurt Stone, Music Notation in the Twentieth Century. -Norton, New York 1980. - -This book describes music notation for modern serious music, but -starts out with a thorough overview of existing traditional notation -practices. - -@end table - -The source archive includes a more elaborate Bib@TeX{} bibliography of -over 100 entries in -@ifhtml -@ifset bigpage -@uref{../bibliography/index.html, the bibliography}. -@end ifset -@ifclear bigpage -@uref{../../bibliography/index.html, the bibliography}. -@end ifclear -@end ifhtml -@ifnothtml -@file{Documentation/@/bibliography/}. -@end ifnothtml - diff --git a/Documentation/user/notation-appendices.itely b/Documentation/user/notation-appendices.itely deleted file mode 100644 index 9f586f3016..0000000000 --- a/Documentation/user/notation-appendices.itely +++ /dev/null @@ -1,914 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Notation manual tables -@appendix Notation manual tables - -@c Please do not delete the following @ignore block. -@ignore -Note for editors and translators: In the following menu, two entries -are needed to link to a pair of automatically generated sections. -Please keep them and, if using emacs, do not run -texinfo-all-menus-update without manually restoring them back. These -menu entries are: - -* Text markup commands:: -* Text markup list commands:: - -and they should go just after -* Note head styles:: - -and just before -* List of articulations:: -@end ignore - -@menu -* Chord name chart:: -* Common chord modifiers:: -* Predefined fretboard diagrams:: -* MIDI instruments:: -* List of colors:: -* The Feta font:: -* Note head styles:: -* Text markup commands:: -* Text markup list commands:: -* List of articulations:: -* Percussion notes:: -* All context properties:: -* Layout properties:: -* Identifiers:: -* Scheme functions:: -@end menu - - - -@node Chord name chart -@appendixsec Chord name chart - -The following charts shows two standard systems for printing chord -names, along with the pitches they represent. - -@lilypondfile{chord-names-jazz.ly} - -@node Common chord modifiers -@appendixsec Common chord modifiers - -The following table shows chord modifiers that can be used in -@code{\chordmode} to generate standard chord structures. - -@multitable @columnfractions .2 .3 .2 .2 - -@item -@b{Chord type} -@tab -@b{Intervals} -@tab -@b{Modifier(s)} -@tab -@b{Example} - - -@item -Major -@tab -Major third, perfect fifth -@tab -@code{5} or nothing -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:5 -} -@end lilypond - -@item -Minor -@tab -Minor third, perfect fifth -@tab -@code{m} or @code{m5} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m -} -@end lilypond - -@item -Augmented -@tab -Major third, augmented fifth -@tab -@code{aug} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug -} -@end lilypond - -@item -Diminished -@tab -Minor third, diminished fifth -@tab -@code{dim} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim -} -@end lilypond - -@item -Dominant seventh -@tab -Major triad, minor seventh -@tab -@code{7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:7 -} -@end lilypond - -@item -Major seventh -@tab -Major triad, major seventh -@tab -@code{maj7} or @code{maj} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7 -} -@end lilypond - -@item -Minor seventh -@tab -Minor triad, minor seventh -@tab -@code{m7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m7 -} -@end lilypond - -@item -Diminished seventh -@tab -Diminished triad, diminished seventh -@tab -@code{dim7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:dim7 -} -@end lilypond - -@item -Augmented seventh -@tab -Augmented triad, minor seventh -@tab -@code{aug7} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:aug7 -} -@end lilypond - -@item -Half-diminished seventh -@tab -Diminished triad, minor seventh -@tab -@code{m7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m7.5- -} -@end lilypond - -@item -Minor-major seventh -@tab -Minor triad, major seventh -@tab -@code{maj7.5-} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj7.5- -} -@end lilypond - -@item -Major sixth -@tab -Major triad, sixth -@tab -@code{6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:6 -} -@end lilypond - -@item -Minor sixth -@tab -Minor triad, sixth -@tab -@code{m6} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m6 -} -@end lilypond - -@item -Dominant ninth -@tab -Dominant seventh, major ninth -@tab -@code{9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:9 -} -@end lilypond - -@item -Major ninth -@tab -Major seventh, major ninth -@tab -@code{maj9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj9 -} -@end lilypond - -@item -Minor ninth -@tab -Minor seventh, major ninth -@tab -@code{m9} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m9 -} -@end lilypond - -@item -Dominant eleventh -@tab -Dominant ninth, perfect eleventh -@tab -@code{11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:11 -} -@end lilypond - -@item -Major eleventh -@tab -Major ninth, perfect eleventh -@tab -@code{maj11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj11 -} -@end lilypond - -@item -Minor eleventh -@tab -Minor ninth, perfect eleventh -@tab -@code{m11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m11 -} -@end lilypond - -@item -Dominant thirteenth -@tab -Dominant ninth, major thirteenth -@tab -@code{13} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13 -} -@end lilypond - -@item -Dominant thirteenth -@tab -Dominant eleventh, major thirteenth -@tab -@code{13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:13.11 -} -@end lilypond - -@item -Major thirteenth -@tab -Major eleventh, major thirteenth -@tab -@code{maj13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:maj13.11 -} -@end lilypond - -@item -Minor thirteenth -@tab -Minor eleventh, major thirteenth -@tab -@code{m13.11} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:m13.11 -} -@end lilypond - -@item -Suspended second -@tab -Major second, perfect fifth -@tab -@code{sus2} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus2 -} -@end lilypond - -@item -Suspended fourth -@tab -Perfect fourth, perfect fifth -@tab -@code{sus4} -@tab -@lilypond[line-width=3\cm,noragged-right, notime] -\chordmode { - c1:sus4 -} -@end lilypond - - -@end multitable - -@node Predefined fretboard diagrams -@appendixsec Predefined fretboard diagrams - -The chart below shows the predefined fretboard diagrams. - -@lilypondfile{display-predefined-fretboards.ly} - -@node MIDI instruments -@appendixsec MIDI instruments - -The following is a list of names that can be used for the -@code{midiInstrument} property. - -@example -acoustic grand contrabass lead 7 (fifths) -bright acoustic tremolo strings lead 8 (bass+lead) -electric grand pizzicato strings pad 1 (new age) -honky-tonk orchestral strings pad 2 (warm) -electric piano 1 timpani pad 3 (polysynth) -electric piano 2 string ensemble 1 pad 4 (choir) -harpsichord string ensemble 2 pad 5 (bowed) -clav synthstrings 1 pad 6 (metallic) -celesta synthstrings 2 pad 7 (halo) -glockenspiel choir aahs pad 8 (sweep) -music box voice oohs fx 1 (rain) -vibraphone synth voice fx 2 (soundtrack) -marimba orchestra hit fx 3 (crystal) -xylophone trumpet fx 4 (atmosphere) -tubular bells trombone fx 5 (brightness) -dulcimer tuba fx 6 (goblins) -drawbar organ muted trumpet fx 7 (echoes) -percussive organ french horn fx 8 (sci-fi) -rock organ brass section sitar -church organ synthbrass 1 banjo -reed organ synthbrass 2 shamisen -accordion soprano sax koto -harmonica alto sax kalimba -concertina tenor sax bagpipe -acoustic guitar (nylon) baritone sax fiddle -acoustic guitar (steel) oboe shanai -electric guitar (jazz) english horn tinkle bell -electric guitar (clean) bassoon agogo -electric guitar (muted) clarinet steel drums -overdriven guitar piccolo woodblock -distorted guitar flute taiko drum -guitar harmonics recorder melodic tom -acoustic bass pan flute synth drum -electric bass (finger) blown bottle reverse cymbal -electric bass (pick) shakuhachi guitar fret noise -fretless bass whistle breath noise -slap bass 1 ocarina seashore -slap bass 2 lead 1 (square) bird tweet -synth bass 1 lead 2 (sawtooth) telephone ring -synth bass 2 lead 3 (calliope) helicopter -violin lead 4 (chiff) applause -viola lead 5 (charang) gunshot -cello lead 6 (voice) -@end example - - -@node List of colors -@appendixsec List of colors - -@subsubheading Normal colors - -Usage syntax is detailed in @ref{Coloring objects}. - -@cindex List of colors -@cindex Colors, list of - -@verbatim -black white red green -blue cyan magenta yellow -grey darkred darkgreen darkblue -darkcyan darkmagenta darkyellow -@end verbatim - - -@subsubheading X color names - -X color names come several variants: - -Any name that is spelled as a single word with capitalization -(e.g. @q{LightSlateBlue}) can also be spelled as space separated -words without capitalization (e.g. @q{light slate blue}). - -The word @q{grey} can always be spelled @q{gray} (e.g. @q{DarkSlateGray}). - -Some names can take a numerical suffix (e.g. @q{LightSalmon4}). - - -@subsubheading Color Names without a numerical suffix: - -@verbatim -snow GhostWhite WhiteSmoke gainsboro FloralWhite -OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond -bisque PeachPuff NavajoWhite moccasin cornsilk -ivory LemonChiffon seashell honeydew MintCream -azure AliceBlue lavender LavenderBlush MistyRose -white black DarkSlateGrey DimGrey SlateGrey -LightSlateGrey grey LightGrey MidnightBlue navy -NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue -LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue -DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue -LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise -turquoise cyan LightCyan CadetBlue MediumAquamarine -aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen -MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen -green chartreuse MediumSpringGreen GreenYellow LimeGreen -YellowGreen ForestGreen OliveDrab DarkKhaki khaki -PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold -LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed -SaddleBrown sienna peru burlywood beige -wheat SandyBrown tan chocolate firebrick -brown DarkSalmon salmon LightSalmon orange -DarkOrange coral LightCoral tomato OrangeRed -red HotPink DeepPink pink LightPink -PaleVioletRed maroon MediumVioletRed VioletRed magenta -violet plum orchid MediumOrchid DarkOrchid -DarkViolet BlueViolet purple MediumPurple thistle -DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed -LightGreen -@end verbatim - - -@subsubheading Color names with a numerical suffix - -In the following names the suffix N can be a number in the range 1-4: - -@verbatim -snowN seashellN AntiqueWhiteN bisqueN PeachPuffN -NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN -LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN -blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN -LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN -CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN -SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN -OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN -yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN -IndianRedN siennaN burlywoodN wheatN tanN -chocolateN firebrickN brownN salmonN LightSalmonN -orangeN DarkOrangeN coralN tomatoN OrangeRedN -redN DeepPinkN HotPinkN pinkN LightPinkN -PaleVioletRedN maroonN VioletRedN magentaN orchidN -plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN -thistleN -@end verbatim - - -@subsubheading Grey Scale - -A grey scale can be obtained using: - -@example -greyN -@end example - -@noindent -Where N is in the range 0-100. - - -@node The Feta font -@appendixsec The Feta font - -@cindex Feta font -@cindex Font, Feta - -The following symbols are available in the Emmentaler font and may be -accessed directly using text markup such as @code{g^\markup @{ -\musicglyph #"scripts.segno" @}}, see @ref{Formatting text}. - - -@menu -* Clef glyphs:: -* Time Signature glyphs:: -* Number glyphs:: -* Accidental glyphs:: -* Default Notehead glyphs:: -* Special Notehead glyphs:: -* Shape-note Notehead glyphs:: -* Rest glyphs:: -* Flag glyphs:: -* Dot glyphs:: -* Dynamic glyphs:: -* Script glyphs:: -* Arrowhead glyphs:: -* Bracket-tip glyphs:: -* Pedal glyphs:: -* Accordion glyphs:: -* Vaticana glyphs:: -* Medicaea glyphs:: -* Hufnagel glyphs:: -* Mensural glyphs:: -* Neomensural glyphs:: -* Petrucci glyphs:: -* Solesmes glyphs:: -@end menu - - -@node Clef glyphs -@unnumberedsubsec Clef glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #clefs -@end lilypond - - -@node Time Signature glyphs -@unnumberedsubsec Time Signature glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #timesig -@end lilypond - - -@node Number glyphs -@unnumberedsubsec Number glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #numbers -@end lilypond - - -@node Accidental glyphs -@unnumberedsubsec Accidental glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #accidentals -@end lilypond - - -@node Default Notehead glyphs -@unnumberedsubsec Default Notehead glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #default-noteheads -@end lilypond - - -@node Special Notehead glyphs -@unnumberedsubsec Special Notehead glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #special-noteheads -@end lilypond - - -@node Shape-note Notehead glyphs -@unnumberedsubsec Shape-note Notehead glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #shape-note-noteheads -@end lilypond - - -@node Rest glyphs -@unnumberedsubsec Rest glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #rests -@end lilypond - - -@node Flag glyphs -@unnumberedsubsec Flag glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #flags -@end lilypond - - -@node Dot glyphs -@unnumberedsubsec Dot glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #dots -@end lilypond - - -@node Dynamic glyphs -@unnumberedsubsec Dynamic glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #dynamics -@end lilypond - - -@node Script glyphs -@unnumberedsubsec Script glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #scripts -@end lilypond - - -@node Arrowhead glyphs -@unnumberedsubsec Arrowhead glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #arrowheads -@end lilypond - - -@node Bracket-tip glyphs -@unnumberedsubsec Bracket-tip glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #brackettips -@end lilypond - - -@node Pedal glyphs -@unnumberedsubsec Pedal glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #pedal -@end lilypond - - -@node Accordion glyphs -@unnumberedsubsec Accordion glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #accordion -@end lilypond - - -@node Vaticana glyphs -@unnumberedsubsec Vaticana glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #vaticana -@end lilypond - - -@node Medicaea glyphs -@unnumberedsubsec Medicaea glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #medicaea -@end lilypond - - -@node Hufnagel glyphs -@unnumberedsubsec Hufnagel glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #hufnagel -@end lilypond - - -@node Mensural glyphs -@unnumberedsubsec Mensural glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #mensural -@end lilypond - - -@node Neomensural glyphs -@unnumberedsubsec Neomensural glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #neomensural -@end lilypond - - -@node Petrucci glyphs -@unnumberedsubsec Petrucci glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #petrucci -@end lilypond - - -@node Solesmes glyphs -@unnumberedsubsec Solesmes glyphs - -@lilypond[quote] -\include "font-table.ly" -\markuplines \override-lines #'(word-space . 4) - \doc-chars #solesmes -@end lilypond - - -@node Note head styles -@appendixsec Note head styles - -@cindex note head styles -The following styles may be used for note heads. - -@lilypondfile[noindent]{note-head-style.ly} - -@include markup-commands.tely - -@include markup-list-commands.tely - -@node List of articulations -@appendixsec List of articulations - -@cindex accent -@cindex marcato -@cindex staccatissimo -@cindex espressivo -@cindex fermata -@cindex stopped -@cindex staccato -@cindex portato -@cindex tenuto -@cindex upbow -@cindex downbow -@cindex foot marks -@cindex organ pedal marks -@cindex turn -@cindex open -@cindex stopped -@cindex flageolet -@cindex reverseturn -@cindex trill -@cindex prall -@cindex mordent -@cindex prallprall -@cindex prallmordent -@cindex prall, up -@cindex prall, down -@cindex thumb marking -@cindex segno -@cindex coda -@cindex varcoda - -Here is a chart showing all scripts available, - -@lilypondfile[quote]{script-chart.ly} - - -@node Percussion notes -@appendixsec Percussion notes - -@lilypondfile[quote]{percussion-chart.ly} - - -@node All context properties -@appendixsec All context properties - -@include context-properties.tely - - -@node Layout properties -@appendixsec Layout properties - -@include layout-properties.tely - - -@node Identifiers -@appendixsec Identifiers - -@include identifiers.tely - - -@node Scheme functions -@appendixsec Scheme functions - -@include scheme-functions.tely - diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely deleted file mode 100644 index 57afdc00fd..0000000000 --- a/Documentation/user/notation.itely +++ /dev/null @@ -1,35 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Musical notation -@chapter Musical notation - -This chapter explains how to create musical notation. - -@menu -* Pitches:: Writing and display the pitches of notes. -* Rhythms:: Writing and displaying the durations of notes. -* Expressive marks:: Adding expression to notes. -* Repeats:: Repeat music. -* Simultaneous notes:: More than one note at once. -* Staff notation:: Displaying staves. -* Editorial annotations:: Special notation to increase legibility. -* Text:: Adding text to scores. -@end menu - -@include pitches.itely -@include rhythms.itely -@include expressive.itely -@include repeats.itely -@include simultaneous.itely -@include staff.itely -@include editorial.itely -@include text.itely - diff --git a/Documentation/user/percussion.itely b/Documentation/user/percussion.itely deleted file mode 100644 index f182b78a9a..0000000000 --- a/Documentation/user/percussion.itely +++ /dev/null @@ -1,595 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Percussion -@section Percussion - -@menu -* Common notation for percussion:: -@end menu - -@node Common notation for percussion -@subsection Common notation for percussion - -Rhythmic music is primarily used for percussion and drum notation, but it can -also be used to show the rhythms of melodies. - -@menu -* References for percussion:: -* Basic percussion notation:: -* Drum rolls:: -* Pitched percussion:: -* Percussion staves:: -* Custom percussion staves:: -* Ghost notes:: -@end menu - -@node References for percussion -@unnumberedsubsubsec References for percussion - -TODO add more. - -@itemize - -@item Some percussion may be notated on a rhythmic staff; this is -discussed in @ref{Showing melody rhythms}, and -@ref{Instantiating new staves}. - -@item MIDI output is discussed in a separate section; please see -@ref{Percussion in MIDI}. - -@end itemize - - -@seealso -Notation Reference: -@ref{Showing melody rhythms}, -@ref{Instantiating new staves}. -@ref{Percussion in MIDI}. - -Snippets: @rlsr{Percussion}. - - -@node Basic percussion notation -@unnumberedsubsubsec Basic percussion notation - -@cindex percussion -@cindex drums - -Percussion notes may be entered in @code{\drummode} mode, which is -similar to the standard mode for entering notes. The simplest way -to enter percussion notes is to use the @code{\drums} command, -which creates the correct context and entry mode for percussion: - -@lilypond[quote,verbatim] -\drums { - hihat4 hh bassdrum bd -} -@end lilypond - -This is shorthand for: - -@lilypond[quote,verbatim] -\new DrumStaff { - \drummode { - hihat4 hh bassdrum bd - } -} -@end lilypond - -Each piece of percussion has a full name and an abbreviated name, -and both can be used in input files. The full list of percussion -note names may be found in @ref{Percussion notes}. - -Note that the normal notation of pitches (such as @code{cis4}) in -a @code{DrumStaff} context will cause an error message. -Percussion clefs are added automatically to a @code{DrumStaff} -contex, but other clefs may also be used. - -There are a few issues concerning MIDI support for percussion -instruments; for details please see @ref{Percussion in MIDI}. - - -@seealso -Notation Reference: @ref{Percussion in MIDI}, @ref{Percussion notes}. - -File: @file{ly/@/drumpitch@/-init@/.ly} - -Snippets: @rlsr{Percussion}. - - -@node Drum rolls -@unnumberedsubsubsec Drum rolls - -Drum rolls are indicated with three slashes across the stem. For -quarter notes or longer the three slashes are shown explicitly, -eighth notes are shown with two slashes (the beam being the -third), and drum rolls shorter than eighths have one stem slash to -supplement the beams. This is achieved with the tremolo notation, -@code{:32}, as described in @ref{Tremolo repeats}. Here is an -example of some snare rolls: - -@lilypond[quote,verbatim] -\drums { - \time 2/4 - sn16 sn8 sn16 sn8 sn8:32 ~ - sn8 sn8 sn4:32 ~ - sn4 sn8 sn16 sn16 - sn4 r4 -} -@end lilypond - -Sticking can be indicated by placing @code{^"R"} or @code{^"L"} -after the note. The @code{staff-padding} property may be -overridden to achieve a pleasing baseline. - -@lilypond[quote,verbatim] -\drums { - \repeat unfold 2 { - sn16 ^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R" - } -} -@end lilypond - - -@seealso -Snippets: @rlsr{Percussion}. - - -@node Pitched percussion -@unnumberedsubsubsec Pitched percussion - -Certain pitched percussion instruments (e.g. xylophone, -vibraphone, and timpani) are written using normal staves. -This is covered in other sections of the manual. - - -@seealso -@c TODO: possibly link to an alternate section of NR 3.5, if -@c "percussion in MIDI" gets a separate subsubsection for -@c pitched percussion sounds. -gp -Notation Reference: @ref{Percussion in MIDI}. - -Snippets: @rlsr{Percussion}. - - -@node Percussion staves -@unnumberedsubsubsec Percussion staves - -@cindex percussion -@cindex drums - -A percussion part for more than one instrument typically uses a -multiline staff where each position in the staff refers to one -piece of percussion. To typeset the music, the notes must be -interpreted in @code{DrumStaff} and @code{DrumVoice} context. - -@lilypond[quote,verbatim] -up = \drummode { - crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat -} -down = \drummode { - bassdrum4 snare8 bd r bd sn4 -} -\new DrumStaff << - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - -The above example shows verbose polyphonic notation. The short -polyphonic notation, described in @rlearning{I'm hearing Voices}, -can also be used if the voices are instantiated by hand first. -For example, - -@lilypond[quote,verbatim] -\new DrumStaff << - \new DrumVoice = "1" { s1*2 } - \new DrumVoice = "2" { s1*2 } - \drummode { - bd4 sn4 bd4 sn4 - << { - \repeat unfold 16 hh16 - } \\ { - bd4 sn4 bd4 sn4 - } >> - } ->> -@end lilypond - -There are also other layout possibilities. To use these, set the -property @code{drumStyleTable} in context @code{DrumVoice}. The -following variables have been predefined: - -@c FIXME: decide what to do about this table. (ie verbatim or not) -@table @code - -@item drums-style -This is the default. It typesets a typical drum kit on a -five-line staff: - -@lilypond[quote,line-width=10.0\cm] -nam = \lyricmode { - cymc cyms cymr hh hhc hho hhho hhp - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl } -mus = \drummode { - cymc cyms cymr hh hhc hho hhho hhp \break - cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 } -\score { - << \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4.0 . 5.0) - } \mus - \new Lyrics \nam - >> - \layout { - \context { - \Score - \override LyricText #'font-family = #'typewriter - \override BarNumber #'transparent =##T - } - } -} -@end lilypond - -The drum scheme supports six different toms. When there are fewer -toms, simply select the toms that produce the desired result. For -example, to get toms on the three middle lines you use -@code{tommh}, @code{tomml}, and @code{tomfh}. - -@item timbales-style -This typesets timbales on a two line staff: - -@lilypond[quote,ragged-right] -nam = \lyricmode { timh ssh timl ssl cb } -mus = \drummode { timh ssh timl ssl cb s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - \override StaffSymbol #'line-count = #2 - \override StaffSymbol #'staff-space = #2 - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0) - drumStyleTable = #timbales-style - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item congas-style -This typesets congas on a two line staff: - -@lilypond[quote,ragged-right] -nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl } -mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - drumStyleTable = #congas-style - \override StaffSymbol #'line-count = #2 - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item bongos-style -This typesets bongos on a two line staff: - -@lilypond[quote,ragged-right] -nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl } -mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 } - -<< - \new DrumStaff \with { - \remove Bar_engraver - \remove Time_signature_engraver - \override StaffSymbol #'line-count = #2 - drumStyleTable = #bongos-style - - %% this sucks; it will lengthen stems. - \override StaffSymbol #'staff-space = #2 - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond - -@item percussion-style -To typeset all kinds of simple percussion on one line staves: - -@lilypond[quote,ragged-right] -nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc } -mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } - -<< - \new DrumStaff \with{ - \remove Bar_engraver - drumStyleTable = #percussion-style - \override StaffSymbol #'line-count = #1 - \remove Time_signature_engraver - \override Stem #'transparent = ##t - \override Stem #'Y-extent = ##f - } \mus - \new Lyrics { - \override LyricText #'font-family = #'typewriter - \nam - } ->> -@end lilypond -@end table - - -@node Custom percussion staves -@unnumberedsubsubsec Custom percussion staves - -If you do not like any of the predefined lists you can define your -own list at the top of your file. - -@lilypond[quote,verbatim] -#(define mydrums '( - (bassdrum default #f -1) - (snare default #f 0) - (hihat cross #f 1) - (pedalhihat xcircle "stopped" 2) - (lowtom diamond #f 3))) -up = \drummode { hh8 hh hh hh hhp4 hhp } -down = \drummode { bd4 sn bd toml8 toml } - -\new DrumStaff << - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \new DrumVoice { \voiceOne \up } - \new DrumVoice { \voiceTwo \down } ->> -@end lilypond - - -@snippets - -FIXME: MOVE ALL THESE TO LSR! -gp - -Here are some examples: - -Two Woodblocks, entered with wbh (high woodblock) and wbl (low woodblock) - -@lilypond[quote,verbatim] -% These lines define the position of the woodblocks in the stave; -% if you like, you can change it or you can use special note heads -% for the woodblocks. -#(define mydrums '((hiwoodblock default #t 3) - (lowoodblock default #t -2))) - -woodstaff = { - % This defines a staff with only two lines. - % It also defines the positions of the two lines. - \override Staff.StaffSymbol #'line-positions = #'(-2 3) - - % This is neccessary; if not entered, the barline would be too short! - \override Staff.BarLine #'bar-size = #3 -} - -\new DrumStaff { - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - % with this you load your new drum style table - \woodstaff - - \drummode { - \time 2/4 - wbl8 wbl16 wbl wbh8-> wbl | - wbl8 wbl16 wbh-> ~ wbh wbl16 r8 | - } -} -@end lilypond - -Note that in this special case the length of the barline must -altered with @code{\override Staff.BarLine #'bar-size #number}. -Otherwise it would be too short. And you have also to define the -positions of the two stafflines. For more information about these -delicate things have a look at @ref{Staff symbol}. - -A tambourine, entered with @q{tamb}: - -@lilypond[quote,verbatim] -#(define mydrums '((tambourine default #t 0))) - -tambustaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tambourine" -} - -\new DrumStaff { - \tambustaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - \time 6/8 - tamb8. tamb16 tamb8 tamb tamb tamb | - tamb4. tamb8 tamb tamb | - % the trick with the scaled duration and the shorter rest - % is neccessary for the correct ending of the trill-span! - tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | - } -} -@end lilypond - -Music for Tam-Tam (entered with @q{tt}): - -@lilypond[quote,verbatim] -#(define mydrums '((tamtam default #t 0))) - -tamtamstaff = { - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Tamtam" -} - -\new DrumStaff { - \tamtamstaff - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - - \drummode { - tt 1 \pp \laissezVibrer - } -} -@end lilypond - -Two different bells, entered with @q{cb} (cowbell) and @q{rb} (ridebell) - -@lilypond[quote,verbatim] -#(define mydrums '((ridebell default #t 3) - (cowbell default #t -2))) - -bellstaff = { - \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \override Staff.BarLine #'bar-size = #3 - \set DrumStaff.instrumentName = #"Different Bells" -} - -\new DrumStaff { - \bellstaff - \drummode { - \time 2/4 - rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | - } -} -@end lilypond - -Here an short example by maestro Stravinsky (from @q{L'histoire du Soldat}) - -@lilypond[quote,verbatim] -#(define mydrums '((bassdrum default #t 4) - (snare default #t -4) - (tambourine default #t 0))) - -global = { - \time 3/8 s4. - \time 2/4 s2*2 - \time 3/8 s4. - \time 2/4 s2 -} - -drumsA = { - \context DrumVoice << - { \global } - { \drummode { - \autoBeamOff - \stemDown sn8 \stemUp tamb s8 | - sn4 \stemDown sn4 | - \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | - \stemDown sn8 \stemUp tamb s8 | - \stemUp sn4 s8 \stemUp tamb - } - } - >> -} - -drumsB = { - \drummode { - s4 bd8 s2*2 s4 bd8 s4 bd8 s8 - } -} - -\layout { - indent = #40 -} - -\score { - \new StaffGroup << - \new DrumStaff { - \set DrumStaff.instrumentName = \markup { - \column { - "Tambourine" - "et" - "caisse claire s. timbre" - } - } - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsA - } - - \new DrumStaff { - \set DrumStaff.instrumentName = #"Grosse Caisse" - \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \drumsB } - >> -} -@end lilypond - - -@seealso -Snippets: @rlsr{Percussion}. - -Internals Reference: @rinternals{DrumStaff}, @rinternals{DrumVoice}. - - -@c TODO: check name -gp -@node Ghost notes -@unnumberedsubsubsec Ghost notes - -Ghost notes for drums and percussion may be created using the -@code{\parenthesize} command detailed in @ref{Parentheses}. -However, the default @code{\drummode} does not include the -@code{Parenthesis_engraver} plugin which allows this. - -@lilypond[quote,ragged-right,verbatim,fragment] -\new DrumStaff \with { - \consists "Parenthesis_engraver" -} -<< - \context DrumVoice = "1" { s1 } - \context DrumVoice = "2" { s1 } - \drummode { - << - { - hh8[ hh] hh16 - < \parenthesize sn > hh - < \parenthesize sn > hh8 hh - } \\ - { - bd4 r4 bd8 bd r8 bd - } - >> - } ->> -@end lilypond - -@noindent -Also note that you must add chords (@code{< >} brackets) -around each @code{\parenthesize} statement. - - -@seealso -Snippets: @rlsr{Percussion}. diff --git a/Documentation/user/pitches.itely b/Documentation/user/pitches.itely deleted file mode 100644 index 1b7c2c8e1d..0000000000 --- a/Documentation/user/pitches.itely +++ /dev/null @@ -1,2445 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Pitches -@section Pitches - -@lilypondfile[quote]{pitches-headword.ly} - -This section discusses how to specify the pitch of notes. There -are three steps to this process: input, modification, and output. - -@menu -* Writing pitches:: -* Changing multiple pitches:: -* Displaying pitches:: -* Note heads:: -@end menu - - -@node Writing pitches -@subsection Writing pitches - -This section discusses how to input pitches. There are two -different ways to place notes in octaves: absolute and relative -mode. In most cases, relative mode will be more convenient. - -@menu -* Absolute octave entry:: -* Relative octave entry:: -* Accidentals:: -* Note names in other languages:: -@end menu - - -@node Absolute octave entry -@unnumberedsubsubsec Absolute octave entry - -@cindex pitch names -@cindex pitches -@cindex absolute -@cindex absolute octave specification -@cindex octave specification, absolute -@cindex absolute octave entry -@cindex octave entry, absolute - -A pitch name is specified using lowercase letters@tie{}@code{a} -through@tie{}@code{g}. The note names @code{c} to @code{b} are -engraved in the octave below middle C. - -@c don't use c' here. -@lilypond[verbatim,quote,fragment] -\clef bass -c d e f -g a b c -d e f g -@end lilypond - -@cindex octave changing mark - -@funindex ' -@funindex , - -Other octaves may be specified with a single quote@tie{}(@code{'}) -or comma@tie{}(@code{,}) character. Each@tie{}@code{'} raises the -pitch by one octave; each@tie{}@code{,} lowers the pitch by an -octave. - -@lilypond[verbatim,quote,fragment] -\clef treble -c' c'' e' g -d'' d' d c -\clef bass -c, c,, e, g -d,, d, d c -@end lilypond - - -@seealso -Music Glossary: -@rglos{Pitch names}. - -Snippets: -@rlsr{Pitches}. - - -@node Relative octave entry -@unnumberedsubsubsec Relative octave entry - -@cindex relative -@cindex relative octave entry -@cindex octave entry, relative -@cindex relative octave specification -@cindex ocatve specification, relative - -@funindex relative -@funindex \relative - -When octaves are specified in absolute mode it is easy to -accidentally put a pitch in the wrong octave. Relative octave -mode reduces these errors since most of the time it is not -necessary to indicate any octaves at all. Furthermore, in -absolute mode a single mistake may be difficult to spot, while in -relative mode a single error puts the rest of the piece off by one -octave. - -@example -\relative @var{startpitch} @var{musicexpr} -@end example - -In relative mode, each note is assumed to be as close to the -previous note as possible. This means that the octave of each -pitch inside @var{musicexpr} is calculated as follows: - -@itemize -@item -If no octave changing mark is used on a pitch, its octave is -calculated so that the interval with the previous note is less -than a fifth. This interval is determined without considering -accidentals. - -@item -An octave changing mark@tie{}@code{'} or@tie{}@code{,} can be -added to respectively raise or lower a pitch by an extra octave, -relative to the pitch calculated without an octave mark. - -@item -Multiple octave changing marks can be used. For example, -@code{''}@tie{}and@tie{}@code{,,} will alter the pitch by two -octaves. - -@item -The pitch of the first note is relative to -@code{@var{startpitch}}. @var{startpitch} is specified in -absolute octave mode, and it is recommended that it be a octave of -@code{c}. - -@end itemize - -Here is the relative mode shown in action: - -@lilypond[verbatim,quote] -\relative c { - \clef bass - c d e f - g a b c - d e f g -} -@end lilypond - -Octave changing marks are used for intervals greater than a -fourth: - -@lilypond[verbatim,quote] -\relative c'' { - c g c f, - c' a, e'' c -} -@end lilypond - -A note sequence without a single octave mark can nevertheless span -large intervals: - -@lilypond[verbatim,quote] -\relative c { - c f b e - a d g c -} -@end lilypond - -@cindex chords and relative octave entry -@cindex relative octave entry and chords - -If the preceding item is a chord, the first note of the chord is -used as the reference point for the octave placement of a -following note or chord. Inside chords, the next note is always -relative to the preceding one. Examine the next example -carefully, paying attention to the @code{c} notes. - -@lilypond[verbatim,quote] -\relative c' { - c - - - -} -@end lilypond - -As explained above, the octave of pitches is calculated only with -the note names, regardless of any alterations. Therefore, an -E-double-sharp following a B will be placed higher, while an -F-double-flat will be placed lower. In other words, a -double-augmented fourth is considered a smaller interval than a -double-diminished fifth, regardless of the number of semitones -that each interval contains. - -@lilypond[verbatim,quote] -\relative c'' { - c2 fis - c2 ges - b2 eisis - b2 feses -} -@end lilypond - - -@seealso -Music Glossary: -@rglos{fifth}, -@rglos{interval}, -@rglos{Pitch names}. - -Notation Reference: -@ref{Octave checks}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{RelativeOctaveMusic}. - - -@cindex relative octave entry and transposition -@cindex transposition and relative octave entry - -@funindex \transpose -@funindex transpose -@funindex \chordmode -@funindex chordmode -@funindex \relative -@funindex relative - - -@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}. - -@c DEPRECATED -If no @var{startpitch} is specified for @code{\relative}, -then@tie{}@code{c'} is assumed. However, this is a deprecated -option and may disappear in future versions, so its use is -discouraged. - - - -@node Accidentals -@unnumberedsubsubsec Accidentals - -@cindex accidental -@cindex key signature -@cindex clef - -@c duplicated in Key signature and Accidentals -@warning{New users are sometimes confused about accidentals and -key signatures. In LilyPond, note names are the raw input; key -signatures and clefs determine how this raw input is displayed. -An unaltered note like@tie{}@code{c} means @q{C natural}, -regardless of the key signature or clef. For more information, -see @rlearning{Accidentals and key signatures}.} - -@cindex note names, Dutch -@cindex note names, default -@cindex default note names -@cindex sharp -@cindex flat -@cindex double sharp -@cindex sharp, double -@cindex double flat -@cindex flat, double -@cindex natural sign -@cindex natural pitch - -A @notation{sharp} pitch is made by adding @code{is} to the note -name, and a @notation{flat} pitch by adding @code{es}. As you -might expect, a @notation{double sharp} or @notation{double flat} -is made by adding @code{isis} or @code{eses}. This syntax is -derived from Dutch note naming conventions. To use other names -for accidentals, see @ref{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -ais1 aes aisis aeses -@end lilypond - -A natural will cancel the effect of an accidental or key -signature. However, naturals are not encoded into the note name -syntax with a suffix; a natural pitch is shown as a simple note -name: - -@lilypond[verbatim,quote,relative=2] -a4 aes a2 -@end lilypond - -@cindex quarter tones -@cindex semi-flats -@cindex semi-sharps - -Quarter tones may be added; the following is a series of Cs with -increasing pitches: - -@lilypond[verbatim,quote,relative=2] -ceseh1 ces ceh c cih cis cisih -@end lilypond - - - -@cindex accidental, reminder -@cindex accidental, cautionary -@cindex accidental, parenthesized -@cindex reminder accidental -@cindex cautionary accidental -@cindex parenthesized accidental - -@funindex ? -@funindex ! - - -Normally accidentals are printed automatically, but you may also -print them manually. A reminder accidental can be forced by -adding an exclamation mark@tie{}@code{!} after the pitch. A -cautionary accidental (i.e., an accidental within parentheses) can -be obtained by adding the question mark@tie{}@code{?} after the -pitch. These extra accidentals can also be used to produce -natural signs. - -@lilypond[verbatim,quote,relative=2] -cis cis cis! cis? c c c! c? -@end lilypond - -@cindex accidental on tied note -@cindex tied note, accidental - -Accidentals on tied notes are only printed at the beginning of a -new system: - -@lilypond[verbatim,quote,relative=2] -cis1 ~ cis ~ -\break -cis -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-extra-naturals-from-being-automatically-added.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{makam-example.ly} - - -@seealso -Music Glossary: -@rglos{sharp}, -@rglos{flat}, -@rglos{double sharp}, -@rglos{double flat}, -@rglos{Pitch names}, -@rglos{quarter tone}. - -Learning Manual: -@rlearning{Accidentals and key signatures}. - -Notation Reference: -@ref{Automatic accidentals}, -@ref{Annotational accidentals (musica ficta)}, -@ref{Note names in other languages}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Accidental_engraver}, -@rinternals{Accidental}, -@rinternals{AccidentalCautionary}, -@rinternals{accidental-interface}. - - -@cindex accidental, quarter-tone -@cindex quarter-tone accidental - -@knownissues - -There are no generally accepted standards for denoting -quarter-tone accidentals, so LilyPond's symbol does not conform to -any standard. - - - -@node Note names in other languages -@unnumberedsubsubsec Note names in other languages - -@cindex note names, other languages -@cindex pitch names, other languages -@cindex language, note names in other -@cindex language, pitch names in other - -There are predefined sets of note and accidental names for various -other languages. To use them, include the language-specific init -file listed below. For example, to use English note names, add -@code{@w{\include "english.ly"}} to the input file. - -@warning{Because some other include files (such as @code{@w{predefined-fretboards.ly}}) -use default (Nederlands) note names, the @code{@bs{}include} -command for the language file should be placed after all other -LilyPond distribution files.} - -The available language files and the note names they define are: - -@quotation -@multitable {@file{nederlands.ly}} {do re mi fa sol la sib si} -@headitem Language File - @tab Note Names -@item @file{nederlands.ly} - @tab c d e f g a bes b -@item @file{arabic.ly} - @tab do re mi fa sol la sib si -@item @file{catalan.ly} - @tab do re mi fa sol la sib si -@item @file{deutsch.ly} - @tab c d e f g a b h -@item @file{english.ly} - @tab c d e f g a bf b -@item @file{espanol.ly} - @tab do re mi fa sol la sib si -@item @file{italiano.ly} - @tab do re mi fa sol la sib si -@item @file{norsk.ly} - @tab c d e f g a b h -@item @file{portugues.ly} - @tab do re mi fa sol la sib si -@item @file{suomi.ly} - @tab c d e f g a b h -@item @file{svenska.ly} - @tab c d e f g a b h -@item @file{vlaams.ly} - @tab do re mi fa sol la sib si -@end multitable -@end quotation - -@noindent -and the accidental suffixes they define are: - -@quotation -@multitable {@file{nederlands.ly}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses} -@headitem Language File - @tab sharp @tab flat @tab double sharp @tab double flat -@item @file{nederlands.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{arabic.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{catalan.ly} - @tab -d/-s @tab -b @tab -dd/-ss @tab -bb -@item @file{deutsch.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{english.ly} - @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp - @tab -ff/-flatflat -@item @file{espanol.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{italiano.ly} - @tab -d @tab -b @tab -dd @tab -bb -@item @file{norsk.ly} - @tab -iss/-is @tab -ess/-es @tab -ississ/-isis - @tab -essess/-eses -@item @file{portugues.ly} - @tab -s @tab -b @tab -ss @tab -bb -@item @file{suomi.ly} - @tab -is @tab -es @tab -isis @tab -eses -@item @file{svenska.ly} - @tab -iss @tab -ess @tab -ississ @tab -essess -@item @file{vlaams.ly} - @tab -k @tab -b @tab -kk @tab -bb -@end multitable -@end quotation - -In Dutch, @code{aes} is contracted to @code{as}, but both forms -are accepted in LilyPond. Similarly, both @code{es} and -@code{ees} are accepted. This also applies to -@code{aeses}@tie{}/@tie{}@code{ases} and -@code{eeses}@tie{}/@tie{}@code{eses}. Sometimes only these -contracted names are defined in the corresponding language files. - -@lilypond[verbatim,quote,relative=2] -a2 as e es a ases e eses -@end lilypond - - -@cindex microtones -@cindex semi-sharp -@cindex semi-flat -@cindex sesqui-sharp -@cindex sesqui-flat - -Some music uses microtones whose alterations are fractions of a -@q{normal} sharp or flat. The note names for quarter-tones -defined in the various language files are listed in the following -table. Here the prefixes @notation{semi-} and @notation{sesqui-} -mean @q{half} and @q{one and a half}, respectively. For the other -languages, no special names have been defined yet. - -@quotation -@multitable {@file{nederlands.ly}} {@b{semi-sharp}} {@b{semi-flat}} {@b{sesqui-sharp}} {@b{sesqui-flat}} -@headitem Language File - @tab semi-sharp @tab semi-flat @tab sesqui-sharp @tab sesqui-flat - -@item @file{nederlands.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{arabic.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{deutsch.ly} - @tab -ih @tab -eh @tab -isih @tab -eseh -@item @file{english.ly} - @tab -qs @tab -qf @tab -tqs @tab -tqf -@item @file{italiano.ly} - @tab -sd @tab -sb @tab -dsd @tab -bsb -@item @file{portugues.ly} - @tab -sqt @tab -bqt @tab -stqt @tab -btqt -@end multitable -@end quotation - - -@seealso -Music Glossary: -@rglos{Pitch names}. - -Snippets: -@rlsr{Pitches}. - - -@node Changing multiple pitches -@subsection Changing multiple pitches - -This section discusses how to modify pitches. - -@menu -* Octave checks:: -* Transpose:: -@end menu - -@node Octave checks -@unnumberedsubsubsec Octave checks - -@cindex octave correction -@cindex octave check -@cindex control pitch - -@funindex = -@funindex \octaveCheck -@funindex octaveCheck -@funindex controlpitch - -In relative mode, it is easy to forget an octave changing mark. -Octave checks make such errors easier to find by displaying a -warning and correcting the octave if a note is found in an -unexpected octave. - -To check the octave of a note, specify the absolute octave after -the @code{=}@tie{}symbol. This example will generate a warning -(and change the pitch) because the second note is the absolute -octave @code{d''} instead of @code{d'} as indicated by the octave -correction. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d='4 d - e2 f -} -@end lilypond - -The octave of notes may also be checked with the -@code{\octaveCheck}@tie{}@var{controlpitch} command. -@var{controlpitch} is specified in absolute mode. This checks -that the interval between the previous note and the -@var{controlpitch} is within a fourth (i.e., the normal -calculation of relative mode). If this check fails, a warning is -printed, but the previous note is not changed. Future notes are -relative to the @var{controlpitch}. - -@lilypond[verbatim,quote] -\relative c'' { - c2 d - \octaveCheck c' - e2 f -} -@end lilypond - -Compare the two bars below. The first and third @code{\octaveCheck} -checks fail, but the second one does not fail. - -@lilypond[verbatim,quote] -\relative c'' { - c4 f g f - - c4 - \octaveCheck c' - f - \octaveCheck c' - g - \octaveCheck c' - f -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{RelativeOctaveCheck}. - - -@node Transpose -@unnumberedsubsubsec Transpose - -@cindex transpose -@cindex transposing -@cindex transposition -@cindex transposition of pitches -@cindex transposition of notes -@cindex pitches, transposition of -@cindex notes, transposition of - -@funindex \transpose -@funindex transpose - -A music expression can be transposed with @code{\transpose}. The -syntax is - -@example -\transpose @var{frompitch} @var{topitch} @var{musicexpr} -@end example - -@noindent -This means that @var{musicexpr} is transposed by the interval -between the pitches @var{frompitch} and @var{topitch}: any note -with pitch @var{frompitch} is changed to @var{topitch} and any -other note is transposed by the same interval. Both pitches are -entered in absolute mode. - -Consider a piece written in the key of D-major. It can be -transposed up to E-major; note that the key signature is -automatically transposed as well. - -@lilypond[verbatim,quote] -\transpose d e { - \relative c' { - \key d \major - d4 fis a d - } -} -@end lilypond - -@cindex transposing instruments -@cindex instruments, transposing - -If a part written in C (normal @notation{concert pitch}) is to be -played on the A clarinet (for which an A is notated as a C and -thus sounds a minor third lower than notated), the appropriate -part will be produced with: - -@lilypond[verbatim,quote] -\transpose a c' { - \relative c' { - \key c \major - c4 d e g - } -} -@end lilypond - -@noindent -Note that we specify @w{@code{\key c \major}} explicitly. If we -do not specify a key signature, the notes will be transposed but -no key signature will be printed. - -@code{\transpose} distinguishes between enharmonic pitches: both -@w{@code{\transpose c cis}} or @w{@code{\transpose c des}} will -transpose up a semitone. The first version will print sharps and -the notes will remain on the same scale step, the second version -will print flats on the scale step above. - -@lilypond[verbatim,quote] -music = \relative c' { c d e f } -\new Staff { - \transpose c cis { \music } - \transpose c des { \music } -} -@end lilypond - - -@code{\transpose} may also be used in a different way, to input -written notes for a transposing instrument. The previous examples -show how to enter pitches in C (or @notation{concert pitch}) and -typeset them for a transposing instrument, but the opposite is -also possible if you for example have a set of instrumental parts -and want to print a conductor's score. For example, when entering -music for a B-flat trumpet that begins on a notated E (concert D), -one would write: - -@example -musicInBflat = @{ e4 @dots{} @} -\transpose c bes, \musicInBflat -@end example - -@noindent -To print this music in F (e.g., rearranging to a French horn) you -could wrap the existing music with another @code{\transpose}: - -@example -musicInBflat = @{ e4 @dots{} @} -\transpose f c' @{ \transpose c bes, \musicInBflat @} -@end example - -@noindent -For more information about transposing instruments, -see @ref{Instrument transpositions}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{transposing-pitches-with-minimum-accidentals-smart-transpose.ly} - - -@seealso -Notation Reference: -@ref{Instrument transpositions}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{TransposedMusic}. - - -@funindex \transpose -@funindex transpose -@funindex \chordmode -@funindex chordmode -@funindex \relative -@funindex relative - -@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}. - - -@node Displaying pitches -@subsection Displaying pitches - -This section discusses how to alter the output of pitches. - -@menu -* Clef:: -* Key signature:: -* Ottava brackets:: -* Instrument transpositions:: -* Automatic accidentals:: -* Ambitus:: -@end menu - - -@node Clef -@unnumberedsubsubsec Clef - -@cindex G clef -@cindex C clef -@cindex F clef -@cindex treble clef -@cindex violin clef -@cindex alto clef -@cindex tenor clef -@cindex bass clef -@cindex french clef -@cindex soprano clef -@cindex mezzosoprano clef -@cindex baritone clef -@cindex varbaritone clef -@cindex subbass clef -@cindex clef -@cindex ancient clef -@cindex clef, ancient -@cindex clef, G -@cindex clef, C -@cindex clef, F -@cindex clef, treble -@cindex clef, violin -@cindex clef, alto -@cindex clef, tenor -@cindex clef, bass -@cindex clef, french -@cindex clef, soprano -@cindex clef, mezzosoprano -@cindex clef, baritone -@cindex clef, varbaritone -@cindex subbass clef, subbass - -@funindex \clef -@funindex clef - -The clef may be altered. Middle C is shown in every example. - -@lilypond[verbatim,quote,relative=1] -\clef treble -c2 c -\clef alto -c2 c -\clef tenor -c2 c -\clef bass -c2 c -@end lilypond - -Other clefs include: - -@lilypond[verbatim,quote,relative=1] -\clef french -c2 c -\clef soprano -c2 c -\clef mezzosoprano -c2 c -\clef baritone -c2 c - -\break - -\clef varbaritone -c2 c -\clef subbass -c2 c -\clef percussion -c2 c -\clef tab -c2 c -@end lilypond - -Further supported clefs are described under @ref{Mensural clefs} -and @ref{Gregorian clefs}. - -@cindex transposing clefs -@cindex clef, transposing -@cindex octave transposition -@cindex choral tenor clef -@cindex tenor clef, choral - -By adding@tie{}@code{_8} or@tie{}@code{^8} to the clef name, the -clef is transposed one octave down or up, respectively, -and@tie{}@code{_15} and@tie{}@code{^15} transpose by two octaves. -The clef name must be enclosed in quotes when it contains -underscores or digits. - -@lilypond[verbatim,quote,relative=2] -\clef treble -c2 c -\clef "treble_8" -c2 c -\clef "bass^15" -c2 c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{tweaking-clef-properties.ly} - - -@seealso -Notation Reference: -@ref{Mensural clefs}, @ref{Gregorian clefs}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Clef_engraver}, -@rinternals{Clef}, -@rinternals{OctavateEight}, -@rinternals{clef-interface}. - - -@node Key signature -@unnumberedsubsubsec Key signature - -@cindex key signature - -@funindex \key -@funindex key - -@c duplicated in Key signature and Accidentals -@warning{New users are sometimes confused about accidentals and -key signatures. In LilyPond, note names are the raw input; key -signatures and clefs determine how this raw input is displayed. -An unaltered note like@tie{}@code{c} means @q{C natural}, -regardless of the key signature or clef. For more information, -see @rlearning{Accidentals and key signatures}.} - -The key signature indicates the tonality in which a piece is -played. It is denoted by a set of alterations (flats or sharps) -at the start of the staff. The key signature may be altered: - -@example -\key @var{pitch} @var{mode} -@end example - -@funindex \major -@funindex major -@funindex \minor -@funindex minor -@funindex \ionian -@funindex ionian -@funindex \locrian -@funindex locrian -@funindex \aeolian -@funindex aeolian -@funindex \mixolydian -@funindex mixolydian -@funindex \lydian -@funindex lydian -@funindex \phrygian -@funindex phrygian -@funindex \dorian -@funindex dorian - -@cindex church modes -@cindex modes -@cindex major -@cindex minor -@cindex ionian -@cindex locrian -@cindex aeolian -@cindex mixolydian -@cindex lydian -@cindex phrygian -@cindex dorian - -Here, @var{mode} should be @code{\major} or @code{\minor} to get a -key signature of @var{pitch}-major or @var{pitch}-minor, -respectively. You may also use the standard mode names, also -called @notation{church modes}: @code{\ionian}, @code{\dorian}, -@code{\phrygian}, @code{\lydian}, @code{\mixolydian}, -@code{\aeolian}, and @code{\locrian}. - -@lilypond[verbatim,quote,relative=2] -\key g \major -fis1 -f -fis -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - - -@seealso -Music Glossary: -@rglos{church mode}, -@rglos{scordatura}. - -Learning Manual: -@rlearning{Accidentals and key signatures}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{KeyChangeEvent}, -@rinternals{Key_engraver}, -@rinternals{Key_performer}, -@rinternals{KeyCancellation}, -@rinternals{KeySignature}, -@rinternals{key-cancellation-interface}, -@rinternals{key-signature-interface}. - - -@node Ottava brackets -@unnumberedsubsubsec Ottava brackets - -@cindex ottava -@cindex 15ma -@cindex 8va -@cindex 8ve -@cindex octavation - -@funindex set-octavation -@funindex \ottava -@funindex ottava - -@notation{Ottava brackets} introduce an extra transposition of an -octave for the staff: - -@lilypond[verbatim,quote,relative=2] -a'2 b -\ottava #1 -a b -\ottava #0 -a b -@end lilypond - -The @code{ottava} function also takes -1 (for 8va bassa), -2@tie{}(for 15ma), and -2 (for 15ma bassa) as arguments. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ottava-text.ly} - - -@seealso -Music Glossary: -@rglos{octavation}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Ottava_spanner_engraver}, -@rinternals{OttavaBracket}, -@rinternals{ottava-bracket-interface}. - - -@node Instrument transpositions -@unnumberedsubsubsec Instrument transpositions - -@cindex transposition, MIDI -@cindex transposition, instrument -@cindex transposing instrument -@cindex MIDI -@cindex MIDI transposition - -@funindex \transposition -@funindex transposition - -When typesetting scores that involve transposing instruments, some -parts can be typeset in a different pitch than the -@notation{concert pitch}. In these cases, the key of the -@notation{transposing instrument} should be specified; otherwise -the MIDI output and cues in other parts will produce incorrect -pitches. For more information about quotations, see -@ref{Quoting other voices}. - -@example -\transposition @var{pitch} -@end example - -The pitch to use for @code{\transposition} should correspond to -the real sound heard when a@tie{}@code{c'} written on the staff is -played by the transposing instrument. This pitch is entered in -absolute mode, so an instrument that produces a real sound which -is one tone higher than the printed music should use -@w{@code{\transposition d'}}. @code{\transposition} should -@emph{only} be used if the pitches are @emph{not} being entered in -concert pitch. - -Here are a few notes for violin and B-flat clarinet where the -parts have been entered using the notes and key as they appear in -each part of the conductor's score. The two instruments are -playing in unison. - -@lilypond[verbatim,quote] -\new GrandStaff << - \new Staff = "violin" { - \relative c'' { - \set Staff.instrumentName = #"Vln" - \set Staff.midiInstrument = #"violin" - % not strictly necessary, but a good reminder - \transposition c' - - \key c \major - g4( c8) r c r c4 - } - } - \new Staff = "clarinet" { - \relative c'' { - \set Staff.instrumentName = \markup { Cl (B\flat) } - \set Staff.midiInstrument = #"clarinet" - \transposition bes - - \key d \major - a4( d8) r d r d4 - } - } ->> -@end lilypond - -The @code{\transposition} may be changed during a piece. For -example, a clarinetist may switch from an A clarinet to a B-flat -clarinet. - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = #"Cl (A)" -\key a \major -\transposition a -c d e f -\textLengthOn -s1*0^\markup { Switch to B\flat clarinet } -R1 - -\key bes \major -\transposition bes -c2 g -@end lilypond - - -@seealso -Music Glossary: -@rglos{concert pitch}, -@rglos{transposing instrument}. - -Notation Reference: -@ref{Quoting other voices}, @ref{Transpose}. - -Snippets: -@rlsr{Pitches}. - - -@node Automatic accidentals -@unnumberedsubsubsec Automatic accidentals - -@cindex accidental style -@cindex accidental style, default -@cindex accidentals -@cindex accidentals, automatic -@cindex automatic accidentals -@cindex default accidental style - -@funindex set-accidental-style -@funindex voice -@funindex default - -There are many different conventions on how to typeset -accidentals. LilyPond provides a function to specify which -accidental style to use. This function is called as follows: - -@example -\new Staff << - #(set-accidental-style 'voice) - @{ @dots{} @} ->> -@end example - -The accidental style applies to the current @code{Staff} by -default (with the exception of the styles @code{piano} and -@code{piano-cautionary}, which are explained below). Optionally, -the function can take a second argument that determines in which -scope the style should be changed. For example, to use the same -style in all staves of the current @code{StaffGroup}, use: - -@example -#(set-accidental-style 'voice 'StaffGroup) -@end example - -The following accidental styles are supported. To demonstrate -each style, we use the following example: - - -@lilypond[verbatim,quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -Note that the last lines of this example can be replaced by the -following, as long as the same accidental style should be used in -both staves. - -@example -\new PianoStaff @{ - << - \context Staff = "up" @{ - %%% change the next line as desired: - #(set-accidental-style 'default 'Score) - \musicA - @} - \context Staff = "down" @{ - \musicB - @} - >> -@} -@end example - - -@c don't use verbatim in this table. -@table @code -@item default - -@cindex default accidental style -@cindex accidental style, default - -@funindex default - -This is the default typesetting behavior. It corresponds to -eighteenth-century common practice: accidentals are remembered to -the end of the measure in which they occur and only in their own -octave. Thus, in the example below, no natural signs are printed -before the@tie{}@code{b} in the second measure or the -last@tie{}@code{c}: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'default) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'default) - \musicB - } - >> -} -@end lilypond - -@item voice - -@cindex accidental style, voice -@cindex voice accidental style -@cindex accidental style, modern -@cindex modern accidental style -@cindex accidental style, modern-cautionary -@cindex modern-cautionary accidental style - -@funindex voice - -The normal behavior is to remember the accidentals at -@code{Staff}-level. In this style, however, accidentals are -typeset individually for each voice. Apart from that, the rule is -similar to @code{default}. - -As a result, accidentals from one voice do not get canceled in -other voices, which is often an unwanted result: in the following -example, it is hard to determine whether the second@tie{}@code{a} -should be played natural or sharp. The @code{voice} option should -therefore be used only if the voices are to be read solely by -individual musicians. If the staff is to be used by one musician -(e.g., a conductor or in a piano score) then @code{modern} or -@code{modern-cautionary} should be used instead. - - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'voice) - \musicB - } - >> -} -@end lilypond - -@item modern - -@cindex accidentals, modern style -@cindex modern style accidentals - -@funindex modern - -This rule corresponds to the common practice in the twentieth -century. It prints the same accidentals as @code{default}, with -two exceptions 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 -the@tie{}@code{b} and the@tie{}@code{c} in the second measure of -the upper staff: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern) - \musicB - } - >> -} -@end lilypond - -@item modern-cautionary - -@cindex accidentals, modern cautionary style -@cindex modern accidental style -@cindex modern cautionary accidental style -@cindex modern style accidentals -@cindex modern style cautionary accidentals - -@funindex modern-cautionary - -This rule is similar to @code{modern}, but the @q{extra} -accidentals (the ones not typeset by @code{default}) are typeset -as cautionary accidentals. They are by default printed with -parentheses, but they can also be printed in reduced size by -defining the @code{cautionary-style} property of -@code{AccidentalSuggestion}. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-cautionary) - \musicB - } - >> -} -@end lilypond - -@item modern-voice - -@cindex accidental style, modern -@cindex accidentals, modern -@cindex accidentals, multivoice -@cindex modern accidental style -@cindex modern accidentals -@cindex multivoice accidentals - -@funindex modern-voice - -This rule is used for multivoice accidentals to be read both by -musicians playing one voice and musicians playing all voices. -Accidentals are typeset for each voice, but they @emph{are} -canceled across voices in the same @code{Staff}. Hence, -the@tie{}@code{a} in the last measure is canceled because the -previous cancellation was in a different voice, and -the@tie{}@code{d} in the lower staff is canceled because of the -accidental in a different voice in the previous measure: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice) - \musicB - } - >> -} -@end lilypond - -@cindex accidental style, cautionary, modern voice -@cindex accidental style, modern voice cautionary -@cindex accidental style, voice, modern cautionary - -@funindex modern-voice-cautionary - -@item modern-voice-cautionary - -This rule is the same as @code{modern-voice}, but with the extra -accidentals (the ones not typeset by @code{voice}) typeset as -cautionaries. Even though all accidentals typeset by -@code{default} @emph{are} typeset with this rule, some of them are -typeset as cautionaries. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'modern-voice-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'modern-voice-cautionary) - \musicB - } - >> -} -@end lilypond - -@item piano - -@cindex accidental style, piano -@cindex accidentals, piano -@cindex piano accidental style -@cindex piano accidentals - -@funindex piano - -This rule reflects twentieth-century practice for piano notation. -Its behavior is very similar to @code{modern} style, but here -accidentals also get canceled across the staves in the same -@code{GrandStaff} or @code{PianoStaff}, hence all the -cancellations of the final notes. - -This accidental style applies to the current @code{GrandStaff} or -@code{PianoStaff} by default. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond - -@item piano-cautionary - -@cindex accidentals, piano cautionary -@cindex cautionary accidentals, piano -@cindex piano cautionary accidentals -@cindex accidental style, piano cautionary -@cindex cautionary accidental style, piano -@cindex piano cautionary accidental style - -@funindex piano-cautionary - -This is the same as @code{piano} but with the extra accidentals -typeset as cautionaries. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'piano-cautionary) - \musicA - } - \context Staff = "down" { - \musicB - } - >> -} -@end lilypond - - -@item neo-modern - -@cindex neo-modern accidental style -@cindex accidental style, neo-modern - -@funindex neo-modern - -This rule reproduces a common practice in contemporary music: -accidentals are printed like with @code{modern}, but they are printed -again if the same note appears later in the same measure -- except -if the note is immediately repeated. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern) - \musicB - } - >> -} -@end lilypond - -@item neo-modern-cautionary - -@cindex neo-modern-cautionary accidental style -@cindex accidental style, neo-modern-cautionary - -@funindex neo-modern-cautionary - -This rule is similar to @code{neo-modern}, but the extra -accidentals are printed as cautionary accidentals. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'neo-modern-cautionary) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'neo-modern-cautionary) - \musicB - } - >> -} -@end lilypond - - -@item dodecaphonic - -@cindex dodecaphonic accidental style -@cindex dodecaphonic style, neo-modern - -@funindex dodecaphonic - -This rule reflects a practice introduced by composers at -the beginning of the 20th century, in an attempt to -abolish the hierarchy between natural and non-natural notes. -With this style, @emph{every} note gets an accidental sign, -including natural signs. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'dodecaphonic) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'dodecaphonic) - \musicB - } - >> -} -@end lilypond - - -@item teaching - -@cindex teaching accidental style -@cindex accidental style, teaching - -@funindex teaching - -This rule is intended for students, and makes it easy to create -scale sheets with automagically created cautionary accidentals. -Accidentals are printed like with @code{modern}, but cautionary -accidentals are added for all sharp or flat tones specified by the -key signature, except if the note is immediately repeated. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicA - } - \context Staff = "down" { - \key fis \minor - #(set-accidental-style 'teaching) - \musicB - } - >> -} -@end lilypond - - - -@item no-reset - -@cindex accidental style, no reset -@cindex no reset accidental style - -@funindex no-reset - -This is the same as @code{default} but with accidentals lasting -@q{forever} and not only within the same measure: - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'no-reset) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'no-reset) - \musicB - } - >> -} -@end lilypond - -@item forget - -@cindex forget accidental style -@cindex accidental style, forget - -@funindex forget - -This is the opposite of @code{no-reset}: Accidentals are not -remembered at all -- and hence all accidentals are typeset -relative to the key signature, regardless of what came before in -the music. Unlike @code{dodecaphonic}, this rule never prints -any naturals. - -@lilypond[quote] -musicA = { - << - \relative c' { - cis'8 fis, d'4 8 f bis4 | - cis2. 4 | - } - \\ - \relative c' { - ais'2 cis, | - fis8 b a4 cis2 | - } - >> -} - -musicB = { - \clef bass - \new Voice { - \voiceTwo \relative c' { - 4 - \change Staff = up - cis' - \change Staff = down - - \change Staff = up - dis' | - \change Staff = down - 4 gis 2 | - } - } -} - -\new PianoStaff { - << - \context Staff = "up" { - #(set-accidental-style 'forget) - \musicA - } - \context Staff = "down" { - #(set-accidental-style 'forget) - \musicB - } - >> -} -@end lilypond -@end table - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{dodecaphonic-style-accidentals-for-each-note-including-naturals.ly} - - -@seealso -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Accidental}, -@rinternals{Accidental_engraver}, -@rinternals{GrandStaff} and -@rinternals{PianoStaff}, -@rinternals{Staff}, -@rinternals{AccidentalSuggestion}, -@rinternals{AccidentalPlacement}, -@rinternals{accidental-suggestion-interface}. - - -@cindex accidentals and simultaneous notes -@cindex simultaneous notes and accidentals -@cindex accidentals in chords -@cindex chords, accidentals in - -@knownissues - -Simultaneous notes are considered to be entered in sequential -mode. This means that in a chord the accidentals are typeset as -if the notes in the chord happen one at a time, in the order in -which they appear in the input file. This is a problem when -accidentals in a chord depend on each other, which does not happen -for the default accidental style. The problem can be solved by -manually inserting@tie{}@code{!} and@tie{}@code{?} for the -problematic notes. - - -@node Ambitus -@unnumberedsubsubsec Ambitus - -@cindex ambitus -@cindex range of pitches -@cindex pitch range - -The term @notation{ambitus} (pl. ambitus) denotes a range of -pitches for a given voice in a part of music. It may also denote -the pitch range that a musical instrument is capable of playing. -Ambitus are printed on vocal parts so that performers can easily -determine if it matches their capabilities. - -Ambitus are denoted at the beginning of a piece near the initial -clef. The range is graphically specified by two note heads that -represent the lowest and highest pitches. Accidentals are only -printed if they are not part of the key signature. - -@lilypond[verbatim,quote] -\layout { - \context { - \Voice - \consists "Ambitus_engraver" - } -} - -\relative c'' { - aes c e2 - cis,1 -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-ambitus-per-voice.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{ambitus-with-multiple-voices.ly} - - -@seealso -Music Glossary: -@rglos{ambitus}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Ambitus_engraver}, -@rinternals{Voice}, -@rinternals{Staff}, -@rinternals{Ambitus}, -@rinternals{AmbitusAccidental}, -@rinternals{AmbitusLine}, -@rinternals{AmbitusNoteHead}, -@rinternals{ambitus-interface}. - - -@knownissues - -There is no collision handling in the case of multiple per-voice -ambitus. - - -@node Note heads -@subsection Note heads - -This section suggests ways of altering note heads. - -@menu -* Special note heads:: -* Easy notation note heads:: -* Shape note heads:: -* Improvisation:: -@end menu - -@node Special note heads -@unnumberedsubsubsec Special note heads - -@cindex note heads, special -@cindex note heads, cross -@cindex note heads, diamond -@cindex note heads, parlato -@cindex note heads, harmonic -@cindex note heads, guitar -@cindex special note heads -@cindex cross note heads -@cindex diamond note heads -@cindex parlato note heads -@cindex harmonic note heads -@cindex guitar note heads -@cindex note head styles -@cindex styles, note heads - -@funindex cross - -Note heads may be altered: - -@lilypond[verbatim,quote,relative=2] -c4 b a b -\override NoteHead #'style = #'cross -c4 b a b -\revert NoteHead #'style -c4 d e f -@end lilypond - -There is a shorthand for diamond shapes which can only be used -inside chords: - -@lilypond[verbatim,quote,relative=2] -2 4 -@end lilypond - -@noindent -To see all note head styles, see @ref{Note head styles}. - - -@seealso -Snippets: -@rlsr{Pitches}. - -Notation Reference: -@ref{Note head styles}, -@ref{Chorded notes}. - -Internals Reference: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{Ledger_line_engraver}, -@rinternals{NoteHead}, -@rinternals{LedgerLineSpanner}, -@rinternals{note-head-interface}, -@rinternals{ledger-line-spanner-interface}. - - -@node Easy notation note heads -@unnumberedsubsubsec Easy notation note heads - -@cindex note heads, practice -@cindex practice note heads -@cindex note heads, easy notation -@cindex easy notation -@cindex Hal Leonard -@cindex beginners' music -@cindex music, beginners' -@cindex easy play note heads -@cindex note heads, easy play - -@funindex \easyHeadsOn -@funindex easyHeadsOn -@funindex \easyHeadsOff -@funindex easyHeadsOff - -The @q{easy play} note head includes a note name inside the head. -It is used in music for beginners. To make the letters readable, -it should be printed in a large font size. To print with a larger -font, see @ref{Setting the staff size}. - -@lilypond[verbatim,quote] -#(set-global-staff-size 26) -\relative c' { - \easyHeadsOn - c2 e4 f - g1 - \easyHeadsOff - c,1 -} -@end lilypond - - -@predefined -@code{\easyHeadsOn}, -@code{\easyHeadsOff}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Setting the staff size}. - -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Shape note heads -@unnumberedsubsubsec Shape note heads - -@cindex note heads, shape -@cindex note heads, Aiken -@cindex note heads, sacred harp -@cindex shape notes -@cindex Aiken shape note heads -@cindex sacred harp note heads - -@funindex \key -@funindex key -@funindex \aikenHeads -@funindex aikenHeads -@funindex \sacredHarpHeads -@funindex sacredHarpHeads - -In shape note head notation, the shape of the note head -corresponds to the harmonic function of a note in the scale. This -notation was popular in nineteenth-century American song books. -Shape note heads can be produced: - -@lilypond[verbatim,quote,relative=2] -\aikenHeads -c, d e f g a b c -\sacredHarpHeads -c, d e f g a b c -@end lilypond - -Shapes are typeset according to the step in the scale, where the -base of the scale is determined by the @code{\key} command. - - -@predefined -@code{\aikenHeads}, -@code{\sacredHarpHeads}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{applying-note-head-styles-depending-on-the-step-of-the-scale.ly} - -@noindent -To see all note head styles, see @ref{Note head styles}. - - -@seealso -Snippets: -@rlsr{Pitches}. - -Notation Reference: -@ref{Note head styles}. - -Internals Reference: -@rinternals{note-event}, -@rinternals{Note_heads_engraver}, -@rinternals{NoteHead}, -@rinternals{note-head-interface}. - - -@node Improvisation -@unnumberedsubsubsec Improvisation - -@cindex improvisation -@cindex slashed note heads -@cindex note heads, improvisation -@cindex note heads, slashed - -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -Improvisation is sometimes denoted with slashed note heads, where -the performer may choose any pitch but should play the specified -rhythm. Such note heads can be created: - -@lilypond[verbatim,quote,relative=2] -\new Voice \with { - \consists "Pitch_squash_engraver" -} { - e8 e g a a16( bes) a8 g - \improvisationOn - e8 ~ - e2 ~ e8 f4 f8 ~ - f2 - \improvisationOff - a16( bes) a8 g e -} -@end lilypond - - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Pitches}. - -Internals Reference: -@rinternals{Pitch_squash_engraver}, -@rinternals{Voice}, -@rinternals{RhythmicStaff}. - - diff --git a/Documentation/user/preface.itely b/Documentation/user/preface.itely deleted file mode 100644 index d82632e77f..0000000000 --- a/Documentation/user/preface.itely +++ /dev/null @@ -1,59 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Preface -@unnumbered Preface - - -It must have been during a rehearsal of the EJE (Eindhoven Youth -Orchestra), somewhere in 1995 that Jan, one of the cranked violists, -told Han-Wen, one of the distorted French horn players, about the -grand new project he was working on. It was an automated system for -printing music (to be precise, it was MPP, a preprocessor for -MusiXTeX). As it happened, Han-Wen accidentally wanted to print out -some parts from a score, so he started looking at the software, and he -quickly got hooked. It was decided that MPP was a dead end. After -lots of philosophizing and heated email exchanges, Han-Wen started -LilyPond in 1996. This time, Jan got sucked into Han-Wen's new -project. - -In some ways, developing a computer program is like learning to play -an instrument. In the beginning, discovering how it works is fun, and -the things you cannot do are challenging. After the initial excitement, -you have to practice and practice. Scales and studies can be dull, and -if you are not motivated by others -- teachers, conductors or -audience -- it is very tempting to give up. You continue, and gradually -playing becomes a part of your life. Some days it comes naturally, and -it is wonderful, and on some days it just does not work, but you keep -playing, day after day. - -Like making music, working on LilyPond can be dull work, and on -some days it feels like plodding through a morass of bugs. -Nevertheless, it has become a part of our life, and we keep doing it. -Probably the most important motivation is that our program actually -does something useful for people. When we browse around the net we -find many people who use LilyPond, and produce impressive pieces of -sheet music. Seeing that feels unreal, but in a very pleasant way. - -Our users not only give us good vibes by using our program, many of -them also help us by giving suggestions and sending bug reports, so we -would like to thank all users that sent us bug reports, gave -suggestions or contributed in any other way to LilyPond. - -Playing and printing music is more than a nice analogy. Programming -together is a lot of fun, and helping people is deeply satisfying, but -ultimately, working on LilyPond is a way to express our deep love for -music. May it help you create lots of beautiful music! - -Han-Wen and Jan - -Utrecht/Eindhoven, The Netherlands, July 2002. - diff --git a/Documentation/user/programming-interface.itely b/Documentation/user/programming-interface.itely deleted file mode 100644 index 91019af07b..0000000000 --- a/Documentation/user/programming-interface.itely +++ /dev/null @@ -1,1510 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Interfaces for programmers -@chapter Interfaces for programmers - -Advanced tweaks may be performed by using Scheme. If you are -not familiar with Scheme, you may wish to read our -@rlearning{Scheme tutorial}. - -@menu -* Music functions:: -* Programmer interfaces:: -* Building complicated functions:: -* Markup programmer interface:: -* Contexts for programmers:: -* Scheme procedures as properties:: -* Using Scheme code instead of \tweak:: -* Difficult tweaks:: -@end menu - - -@node Music functions -@section Music functions - -This section discusses how to create music functions within LilyPond. - -@menu -* Overview of music functions:: -* Simple substitution functions:: -* Paired substitution functions:: -* Mathematics in functions:: -* Void functions:: -* Functions without arguments:: -* Overview of available music functions:: -@end menu - -@node Overview of music functions -@subsection Overview of music functions - -Making a function which substitutes a variable into LilyPond -code is easy. The general form of these functions is - -@example -function = -#(define-music-function (parser location @var{var1} @var{var2}...@var{vari}... ) - (@var{var1-type?} @var{var2-type?}...@var{vari-type?}...) - #@{ - @emph{...music...} - #@}) -@end example - -@noindent -where - -@multitable @columnfractions .33 .66 -@item @var{vari} @tab @var{i}th variable -@item @var{vari-type?} @tab type of @var{i}th variable -@item @var{...music...} @tab normal LilyPond input, using - variables as @code{#$var1}, etc. -@end multitable - -There following input types may be used as variables -in a music function. This list is not exhaustive; see -other documentation specifically about Scheme for more -variable types. - -@multitable @columnfractions .33 .66 -@headitem Input type @tab @var{vari-type?} notation -@item Integer @tab @code{integer?} -@item Float (decimal number) @tab @code{number?} -@item Text string @tab @code{string?} -@item Markup @tab @code{markup?} -@item Music expression @tab @code{ly:music?} -@item A pair of variables @tab @code{pair?} -@end multitable - -The @code{parser} and @code{location} arguments are mandatory, -and are used in some advanced situations. The @code{parser} -argument is used to gain access to the value of another LilyPond -variable. The @code{location} argument -is used to set the @q{origin} of the music expression that is built -by the music function, so that in case of a syntax error LilyPond -can tell the user an appropriate place to look in the input file. - - -@node Simple substitution functions -@subsection Simple substitution functions - -Here is a simple example, - -@lilypond[quote,verbatim,ragged-right] -padText = #(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -Music expressions may be substituted as well, - -@lilypond[quote,verbatim,ragged-right] -custosNote = #(define-music-function (parser location note) - (ly:music?) - #{ - \once \override Voice.NoteHead #'stencil = - #ly:text-interface::print - \once \override Voice.NoteHead #'text = - \markup \musicglyph #"custodes.mensural.u0" - \once \override Voice.Stem #'stencil = ##f - $note - #}) - -{ c' d' e' f' \custosNote g' } -@end lilypond - -Multiple variables may be used, - -@lilypond[quote,verbatim,ragged-right] -tempoMark = #(define-music-function (parser location padding marktext) - (number? string?) -#{ - \once \override Score . RehearsalMark #'padding = $padding - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $marktext } -#}) - -\relative c'' { -c2 e -\tempoMark #3.0 #"Allegro" -g c -} -@end lilypond - - -@node Paired substitution functions -@subsection Paired substitution functions - -Some @code{\override} commands require a pair of numbers -(called a @code{cons cell} in Scheme). To pass these numbers -into a function, either use a @code{pair?} variable, or -insert the @code{cons} into the music function. - -@quotation -@example -manualBeam = -#(define-music-function (parser location beg-end) - (pair?) -#@{ - \once \override Beam #'positions = #$beg-end -#@}) - -\relative @{ - \manualBeam #'(3 . 6) c8 d e f -@} -@end example -@end quotation - -@noindent -or - -@lilypond[quote,verbatim,ragged-right] -manualBeam = -#(define-music-function (parser location beg end) - (number? number?) -#{ - \once \override Beam #'positions = #(cons $beg $end) -#}) - -\relative { - \manualBeam #3 #6 c8 d e f -} -@end lilypond - - -@node Mathematics in functions -@subsection Mathematics in functions - -Music functions can involve Scheme programming in -addition to simple substitution, - -@lilypond[quote,verbatim,ragged-right] -AltOn = #(define-music-function (parser location mag) (number?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) - -AltOff = { - \revert Stem #'length - \revert NoteHead #'font-size -} - -{ c'2 \AltOn #0.5 c'4 c' - \AltOn #1.5 c' c' \AltOff c'2 } -@end lilypond - -@noindent -This example may be rewritten to pass in music expressions, - -@lilypond[quote,verbatim,ragged-right] -withAlt = #(define-music-function (parser location mag music) (number? ly:music?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) - $music - \revert Stem #'length - \revert NoteHead #'font-size #}) - -{ c'2 \withAlt #0.5 {c'4 c'} - \withAlt #1.5 {c' c'} c'2 } -@end lilypond - -@node Void functions -@subsection Void functions - -A music function must return a music expression, but sometimes we -may want to have a function which does not involve music (such as -turning off Point and Click). To do this, we return a @code{void} -music expression. - -That is why the form -that is returned is the @code{(make-music ...)}. With the -@code{'void} property set to @code{#t}, the parser is told to -actually disregard this returned music -expression. Thus the important part of the void music function is the -processing done by the function, not the music expression that is -returned. - -@example -noPointAndClick = -#(define-music-function (parser location) () - (ly:set-option 'point-and-click #f) - (make-music 'SequentialMusic 'void #t)) -... -\noPointAndClick % disable point and click -@end example - - -@node Functions without arguments -@subsection Functions without arguments - -In most cases a function without arguments should be written -with an variable, - -@example -dolce = \markup@{ \italic \bold dolce @} -@end example - -However, in rare cases it may be useful to create a music function -without arguments, - -@example -displayBarNum = -#(define-music-function (parser location) () - (if (eq? #t (ly:get-option 'display-bar-numbers)) - #@{ \once \override Score.BarNumber #'break-visibility = ##f #@} - #@{#@})) -@end example - -To actually display bar numbers where this function is called, -invoke @command{lilypond} with - -@example -lilypond -d display-bar-numbers FILENAME.ly -@end example - - -@node Overview of available music functions -@subsection Overview of available music functions - -@c fixme ; this should be move somewhere else? -The following commands are music functions - -@include identifiers.tely - - - -@node Programmer interfaces -@section Programmer interfaces - -This section contains information about mixing LilyPond -and Scheme. - -@menu -* Input variables and Scheme:: -* Internal music representation:: -@end menu - - -@node Input variables and Scheme -@subsection Input variables and Scheme - -The input format supports the notion of variables: in the following -example, a music expression is assigned to a variable with the name -@code{traLaLa}. - -@example -traLaLa = @{ c'4 d'4 @} -@end example - -@noindent - -There is also a form of scoping: in the following example, the -@code{\layout} block also contains a @code{traLaLa} variable, which is -independent of the outer @code{\traLaLa}. -@example -traLaLa = @{ c'4 d'4 @} -\layout @{ traLaLa = 1.0 @} -@end example -@c -In effect, each input file is a scope, and all @code{\header}, -@code{\midi}, and @code{\layout} blocks are scopes nested inside that -toplevel scope. - -Both variables and scoping are implemented in the GUILE module system. -An anonymous Scheme module is attached to each scope. An assignment of -the form -@example -traLaLa = @{ c'4 d'4 @} -@end example - -@noindent -is internally converted to a Scheme definition -@example -(define traLaLa @var{Scheme value of `@code{... }'}) -@end example - -This means that input variables and Scheme variables may be freely -mixed. In the following example, a music fragment is stored in the -variable @code{traLaLa}, and duplicated using Scheme. The result is -imported in a @code{\score} block by means of a second variable -@code{twice}: - -@lilypond[verbatim] -traLaLa = { c'4 d'4 } - -%% dummy action to deal with parser lookahead -#(display "this needs to be here, sorry!") - -#(define newLa (map ly:music-deep-copy - (list traLaLa traLaLa))) -#(define twice - (make-sequential-music newLa)) - -{ \twice } -@end lilypond - -@c Due to parser lookahead - -In this example, the assignment happens after parser has verified that -nothing interesting happens after @code{traLaLa = @{ ... @}}. Without -the dummy statement in the above example, the @code{newLa} definition -is executed before @code{traLaLa} is defined, leading to a syntax -error. - -The above example shows how to @q{export} music expressions from the -input to the Scheme interpreter. The opposite is also possible. By -wrapping a Scheme value in the function @code{ly:export}, a Scheme -value is interpreted as if it were entered in LilyPond syntax. -Instead of defining @code{\twice}, the example above could also have -been written as - -@example -... -@{ #(ly:export (make-sequential-music (list newLa))) @} -@end example - -Scheme code is evaluated as soon as the parser encounters it. To -define some Scheme code in a macro (to be called later), use -@ref{Void functions}, or - -@example -#(define (nopc) - (ly:set-option 'point-and-click #f)) - -... -#(nopc) -@{ c'4 @} -@end example - - -@knownissues - -Mixing Scheme and LilyPond variables is not possible with the -@code{--safe} option. - - -@node Internal music representation -@subsection Internal music representation - -When a music expression is parsed, it is converted into a set of -Scheme music objects. The defining property of a music object is that -it takes up time. Time is a rational number that measures the length -of a piece of music in whole notes. - -A music object has three kinds of types: -@itemize -@item -music name: Each music expression has a name. For example, a note -leads to a @rinternals{NoteEvent}, and @code{\simultaneous} leads to -a @rinternals{SimultaneousMusic}. A list of all expressions -available is in the Internals Reference manual, under -@rinternals{Music expressions}. - -@item -@q{type} or interface: Each music name has several @q{types} or -interfaces, for example, a note is an @code{event}, but it is also a -@code{note-event}, a @code{rhythmic-event}, and a -@code{melodic-event}. All classes of music are listed in the -Internals Reference, under -@rinternals{Music classes}. - -@item -C++ object: Each music object is represented by an object of the C++ -class @code{Music}. -@end itemize - -The actual information of a music expression is stored in properties. -For example, a @rinternals{NoteEvent} has @code{pitch} and -@code{duration} properties that store the pitch and duration of that -note. A list of all properties available is in the internals manual, -under @rinternals{Music properties}. - -A compound music expression is a music object that contains other -music objects in its properties. A list of objects can be stored in -the @code{elements} property of a music object, or a single @q{child} -music object in the @code{element} property. For example, -@rinternals{SequentialMusic} has its children in @code{elements}, -and @rinternals{GraceMusic} has its single argument in -@code{element}. The body of a repeat is stored in the @code{element} -property of @rinternals{RepeatedMusic}, and the alternatives in -@code{elements}. - - - -@node Building complicated functions -@section Building complicated functions - -This section explains how to gather the information necessary -to create complicated music functions. - -@menu -* Displaying music expressions:: -* Music properties:: -* Doubling a note with slurs (example):: -* Adding articulation to notes (example):: -@end menu - - -@node Displaying music expressions -@subsection Displaying music expressions - -@cindex internal storage -@funindex \displayMusic - -When writing a music function it is often instructive to inspect how -a music expression is stored internally. This can be done with the -music function @code{\displayMusic} - -@example -@{ - \displayMusic @{ c'4\f @} -@} -@end example - -@noindent -will display - -@example -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)) - (make-music - 'AbsoluteDynamicEvent - 'text - "f"))))) -@end example - -By default, LilyPond will print these messages to the console along -with all the other messages. To split up these messages and save -the results of @code{\display@{STUFF@}}, redirect the output to -a file. - -@example -lilypond file.ly >display.txt -@end example - -With a bit of reformatting, the above information is -easier to read, - -@example -(make-music 'SequentialMusic - 'elements (list (make-music 'EventChord - 'elements (list (make-music 'NoteEvent - 'duration (ly:make-duration 2 0 1 1) - 'pitch (ly:make-pitch 0 0 0)) - (make-music 'AbsoluteDynamicEvent - 'text "f"))))) -@end example - -A @code{@{ ... @}} music sequence has the name @code{SequentialMusic}, -and its inner expressions are stored as a list in its @code{'elements} -property. A note is represented as an @code{EventChord} expression, -containing a @code{NoteEvent} object (storing the duration and -pitch properties) and any extra information (in this case, an -@code{AbsoluteDynamicEvent} with a @code{"f"} text property. - - -@node Music properties -@subsection Music properties - -The @code{NoteEvent} object is the first object of the -@code{'elements} property of @code{someNote}. - -@example -someNote = c' -\displayMusic \someNote -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)))) -@end example - -The @code{display-scheme-music} function is the function used by -@code{\displayMusic} to display the Scheme representation of a music -expression. - -@example -#(display-scheme-music (first (ly:music-property someNote 'elements))) -===> -(make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 0 0)) -@end example - -Then the note pitch is accessed through the @code{'pitch} property -of the @code{NoteEvent} object, - -@example -#(display-scheme-music - (ly:music-property (first (ly:music-property someNote 'elements)) - 'pitch)) -===> -(ly:make-pitch 0 0 0) -@end example - -The note pitch can be changed by setting this 'pitch property, - -@funindex \displayLilyMusic - -@example -#(set! (ly:music-property (first (ly:music-property someNote 'elements)) - 'pitch) - (ly:make-pitch 0 1 0)) ;; set the pitch to d'. -\displayLilyMusic \someNote -===> -d' -@end example - - -@node Doubling a note with slurs (example) -@subsection Doubling a note with slurs (example) - -Suppose we want to create a function which translates -input like @code{a} into @code{a( a)}. We begin -by examining the internal representation of the music -we want to end up with. - -@example -\displayMusic@{ a'( a') @} -===> -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)) - (make-music - 'SlurEvent - 'span-direction - -1))) - (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)) - (make-music - 'SlurEvent - 'span-direction - 1))))) -@end example - -The bad news is that the @code{SlurEvent} expressions -must be added @q{inside} the note (or more precisely, -inside the @code{EventChord} expression). - -Now we examine the input, - -@example -(make-music - 'SequentialMusic - 'elements - (list (make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch 0 5 0)))))) -@end example - -So in our function, we need to clone this expression (so that we -have two notes to build the sequence), add @code{SlurEvents} to the -@code{'elements} property of each one, and finally make a -@code{SequentialMusic} with the two @code{EventChords}. - -@example -doubleSlur = #(define-music-function (parser location note) (ly:music?) - "Return: @{ note ( note ) @}. - `note' is supposed to be an EventChord." - (let ((note2 (ly:music-deep-copy note))) - (set! (ly:music-property note 'elements) - (cons (make-music 'SlurEvent 'span-direction -1) - (ly:music-property note 'elements))) - (set! (ly:music-property note2 'elements) - (cons (make-music 'SlurEvent 'span-direction 1) - (ly:music-property note2 'elements))) - (make-music 'SequentialMusic 'elements (list note note2)))) -@end example - - -@node Adding articulation to notes (example) -@subsection Adding articulation to notes (example) - -The easy way to add articulation to notes is to merge two music -expressions into one context, as explained in -@ref{Creating contexts}. However, suppose that we want to write -a music function which does this. - -A @code{$variable} inside the @code{#@{...#@}} notation is like -using a regular @code{\variable} in classical LilyPond -notation. We know that - -@example -@{ \music -. -> @} -@end example - -@noindent -will not work in LilyPond. We could avoid this problem by attaching -the articulation to a fake note, - -@example -@{ << \music s1*0-.-> @} -@end example - -@noindent -but for the sake of this example, we will learn how to do this in -Scheme. We begin by examining our input and desired output, - -@example -% input -\displayMusic c4 -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch -1 0 0)))) -===== -% desired output -\displayMusic c4-> -===> -(make-music - 'EventChord - 'elements - (list (make-music - 'NoteEvent - 'duration - (ly:make-duration 2 0 1 1) - 'pitch - (ly:make-pitch -1 0 0)) - (make-music - 'ArticulationEvent - 'articulation-type - "marcato"))) -@end example - -We see that a note (@code{c4}) is represented as an @code{EventChord} -expression, with a @code{NoteEvent} expression in its elements list. To -add a marcato articulation, an @code{ArticulationEvent} expression must -be added to the elements property of the @code{EventChord} -expression. - -To build this function, we begin with - -@example -(define (add-marcato event-chord) - "Add a marcato ArticulationEvent to the elements of `event-chord', - which is supposed to be an EventChord expression." - (let ((result-event-chord (ly:music-deep-copy event-chord))) - (set! (ly:music-property result-event-chord 'elements) - (cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements))) - result-event-chord)) -@end example - -The first line is the way to define a function in Scheme: the function -name is @code{add-marcato}, and has one variable called -@code{event-chord}. In Scheme, the type of variable is often clear -from its name. (this is good practice in other programming languages, -too!) - -@example -"Add a marcato..." -@end example - -@noindent -is a description of what the function does. This is not strictly -necessary, but just like clear variable names, it is good practice. - -@example -(let ((result-event-chord (ly:music-deep-copy event-chord))) -@end example - -@code{let} is used to declare local variables. Here we use one local -variable, named @code{result-event-chord}, to which we give the value -@code{(ly:music-deep-copy event-chord)}. @code{ly:music-deep-copy} is -a function specific to LilyPond, like all functions prefixed by -@code{ly:}. It is use to make a copy of a music -expression. Here we copy @code{event-chord} (the parameter of the -function). Recall that our purpose is to add a marcato to an -@code{EventChord} expression. It is better to not modify the -@code{EventChord} which was given as an argument, because it may be -used elsewhere. - -Now we have a @code{result-event-chord}, which is a -@code{NoteEventChord} expression and is a copy of @code{event-chord}. We -add the marcato to its elements list property. - -@example -(set! place new-value) -@end example - -Here, what we want to set (the @q{place}) is the @q{elements} property of -@code{result-event-chord} expression. - -@example -(ly:music-property result-event-chord 'elements) -@end example - -@code{ly:music-property} is the function used to access music properties -(the @code{'elements}, @code{'duration}, @code{'pitch}, etc, that we -see in the @code{\displayMusic} output above). The new value is the -former elements property, with an extra item: the -@code{ArticulationEvent} expression, which we copy from the -@code{\displayMusic} output, - -@example -(cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements)) -@end example - -@code{cons} is used to add an element to a list without modifying the -original list. This is what we -want: the same list as before, plus the new @code{ArticulationEvent} -expression. The order inside the elements property is not important here. - -Finally, once we have added the marcato articulation to its @code{elements} -property, we can return @code{result-event-chord}, hence the last line of -the function. - -Now we transform the @code{add-marcato} function into a music -function, - -@example -addMarcato = #(define-music-function (parser location event-chord) - (ly:music?) - "Add a marcato ArticulationEvent to the elements of `event-chord', - which is supposed to be an EventChord expression." - (let ((result-event-chord (ly:music-deep-copy event-chord))) - (set! (ly:music-property result-event-chord 'elements) - (cons (make-music 'ArticulationEvent - 'articulation-type "marcato") - (ly:music-property result-event-chord 'elements))) - result-event-chord)) -@end example - -We may verify that this music function works correctly, - -@example -\displayMusic \addMarcato c4 -@end example - - -@node Markup programmer interface -@section Markup programmer interface - -Markups are implemented as special Scheme functions which produce a -Stencil object given a number of arguments. - -@menu -* Markup construction in Scheme:: -* How markups work internally:: -* New markup command definition:: -* New markup list command definition:: -@end menu - - -@node Markup construction in Scheme -@subsection Markup construction in Scheme - -@cindex defining markup commands - -The @code{markup} macro builds markup expressions in Scheme while -providing a LilyPond-like syntax. For example, -@example -(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world") - #:larger #:line ("foo" "bar" "baz"))) -@end example - -@noindent -is equivalent to: -@example -\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @} - \larger \line @{ foo bar baz @} @} -@end example - -@noindent -This example demonstrates the main translation rules between regular -LilyPond markup syntax and Scheme markup syntax. - -@quotation -@multitable @columnfractions .3 .3 -@item @b{LilyPond} @tab @b{Scheme} -@item @code{\markup markup1} @tab @code{(markup markup1)} -@item @code{\markup @{ markup1 markup2 ... @}} @tab - @code{(markup markup1 markup2 ... )} -@item @code{\command} @tab @code{#:command} -@item @code{\variable} @tab @code{variable} -@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )} -@item @code{string} @tab @code{"string"} -@item @code{#scheme-arg} @tab @code{scheme-arg} -@end multitable -@end quotation - -The whole Scheme language is accessible inside the -@code{markup} macro. For example, You may use function calls inside -@code{markup} in order to manipulate character strings. This is -useful when defining new markup commands (see -@ref{New markup command definition}). - - -@knownissues - -The markup-list argument of commands such as @code{#:line}, -@code{#:center}, and @code{#:column} cannot be a variable or -the result of a function call. - -@lisp -(markup #:line (function-that-returns-markups)) -@end lisp - -@noindent -is invalid. One should use the @code{make-line-markup}, -@code{make-center-markup}, or @code{make-column-markup} functions -instead, - -@lisp -(markup (make-line-markup (function-that-returns-markups))) -@end lisp - - -@node How markups work internally -@subsection How markups work internally - -In a markup like - -@example -\raise #0.5 "text example" -@end example - -@noindent -@code{\raise} is actually represented by the @code{raise-markup} -function. The markup expression is stored as - -@example -(list raise-markup 0.5 (list simple-markup "text example")) -@end example - -When the markup is converted to printable objects (Stencils), the -@code{raise-markup} function is called as - -@example -(apply raise-markup - @var{\layout object} - @var{list of property alists} - 0.5 - @var{the "text example" markup}) -@end example - -The @code{raise-markup} function first creates the stencil for the -@code{text example} string, and then it raises that Stencil by 0.5 -staff space. This is a rather simple example; more complex examples -are in the rest -of this section, and in @file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node New markup command definition -@subsection New markup command definition - -New markup commands can be defined -with the @code{define-markup-command} Scheme macro. - -@lisp -(define-markup-command (@var{command-name} @var{layout} @var{props} @var{arg1} @var{arg2} ...) - (@var{arg1-type?} @var{arg2-type?} ...) - ..command body..) -@end lisp - -The arguments are - -@table @var -@item argi -@var{i}th command argument -@item argi-type? -a type predicate for the i@var{th} argument -@item layout -the @q{layout} definition -@item props -a list of alists, containing all active properties. -@end table - -As a simple example, we show how to add a @code{\smallcaps} command, -which selects a small caps font. Normally we could select the -small caps font, - -@example -\markup @{ \override #'(font-shape . caps) Text-in-caps @} -@end example - -@noindent -This selects the caps font by setting the @code{font-shape} property to -@code{#'caps} for interpreting @code{Text-in-caps}. - -To make the above available as @code{\smallcaps} command, we must -define a function using @code{define-markup-command}. The command should -take a single argument of type @code{markup}. Therefore the start of the -definition should read - -@example -(define-markup-command (smallcaps layout props argument) (markup?) -@end example - -@noindent - -What follows is the content of the command: we should interpret -the @code{argument} as a markup, i.e., - -@example -(interpret-markup layout @dots{} argument) -@end example - -@noindent -This interpretation should add @code{'(font-shape . caps)} to the active -properties, so we substitute the following for the @dots{} in the -above example: - -@example -(cons (list '(font-shape . caps) ) props) -@end example - -@noindent -The variable @code{props} is a list of alists, and we prepend to it by -cons'ing a list with the extra setting. - - -Suppose that we are typesetting a recitative in an opera and -we would like to define a command that will show character names in a -custom manner. Names should be printed with small caps and moved a -bit to the left and top. We will define a @code{\character} command -which takes into account the necessary translation and uses the newly -defined @code{\smallcaps} command: - -@example -#(define-markup-command (character layout props name) (string?) - "Print the character name in small caps, translated to the left and - top. Syntax: \\character #\"name\"" - (interpret-markup layout props - (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name))) -@end example - -There is one complication that needs explanation: texts above and below -the staff are moved vertically to be at a certain distance (the -@code{padding} property) from the staff and the notes. To make sure -that this mechanism does not annihilate the vertical effect of our -@code{#:translate}, we add an empty string (@code{#:hspace 0}) before the -translated text. Now the @code{#:hspace 0} will be put above the notes, -and the -@code{name} is moved in relation to that empty string. The net effect is -that the text is moved to the upper left. - -The final result is as follows: - -@example -@{ - c''^\markup \character #"Cleopatra" - e'^\markup \character #"Giulio Cesare" -@} -@end example - -@lilypond[quote,ragged-right] -#(define-markup-command (smallcaps layout props str) (string?) - "Print the string argument in small caps. Syntax: \\smallcaps #\"string\"" - (interpret-markup layout props - (make-line-markup - (map (lambda (s) - (if (= (string-length s) 0) - s - (markup #:large (string-upcase (substring s 0 1)) - #:translate (cons -0.6 0) - #:tiny (string-upcase (substring s 1))))) - (string-split str #\Space))))) - -#(define-markup-command (character layout props name) (string?) - "Print the character name in small caps, translated to the left and - top. Syntax: \\character #\"name\"" - (interpret-markup layout props - (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name))) - -{ - c''^\markup \character #"Cleopatra" c'' c'' c'' - e'^\markup \character #"Giulio Cesare" e' e' e' -} -@end lilypond - -We have used the @code{caps} font shape, but suppose that our font -does not have a small-caps variant. In that case we have to fake -the small caps font by setting a string in upcase with the first -letter a little larger: - -@example -#(define-markup-command (smallcaps layout props str) (string?) - "Print the string argument in small caps." - (interpret-markup layout props - (make-line-markup - (map (lambda (s) - (if (= (string-length s) 0) - s - (markup #:large (string-upcase (substring s 0 1)) - #:translate (cons -0.6 0) - #:tiny (string-upcase (substring s 1))))) - (string-split str #\Space))))) -@end example - -The @code{smallcaps} command first splits its string argument into -tokens separated by spaces (@code{(string-split str #\Space)}); for -each token, a markup is built with the first letter made large and -upcased (@code{#:large (string-upcase (substring s 0 1))}), and a -second markup built with the following letters made tiny and upcased -(@code{#:tiny (string-upcase (substring s 1))}). As LilyPond -introduces a space between markups on a line, the second markup is -translated to the left (@code{#:translate (cons -0.6 0) ...}). Then, -the markups built for each token are put in a line by -@code{(make-line-markup ...)}. Finally, the resulting markup is passed -to the @code{interpret-markup} function, with the @code{layout} and -@code{props} arguments. - -Note: there is now an internal command @code{\smallCaps} which can -be used to set text in small caps. See -@ref{Text markup commands}, for details. - -@knownissues - -Currently, the available combinations of arguments (after the standard -@var{layout} and @var{props} arguments) to a markup command defined with -@code{define-markup-command} are limited as follows. - -@table @asis -@item (no argument) -@itemx @var{list} -@itemx @var{markup} -@itemx @var{markup markup} -@itemx @var{scm} -@itemx @var{scm markup} -@itemx @var{scm scm} -@itemx @var{scm scm markup} -@itemx @var{scm scm markup markup} -@itemx @var{scm markup markup} -@itemx @var{scm scm scm} -@end table - -@noindent -In the above table, @var{scm} represents native Scheme data types like -@q{number} or @q{string}. - -As an example, it is not possible to use a markup command @code{foo} with -four arguments defined as - -@example -#(define-markup-command (foo layout props - num1 str1 num2 str2) - (number? string? number? string?) - ...) -@end example - -@noindent -If you apply it as, say, - -@example -\markup \foo #1 #"bar" #2 #"baz" -@end example - -@cindex Scheme signature -@cindex signature, Scheme -@noindent -@command{lilypond} complains that it cannot parse @code{foo} due to its -unknown Scheme signature. - - -@node New markup list command definition -@subsection New markup list command definition -Markup list commands are defined with the -@code{define-markup-list-command} Scheme macro, which is similar to the -@code{define-markup-command} macro described in -@ref{New markup command definition}, except that where the latter returns -a single stencil, the former returns a list stencils. - -In the following example, a @code{\paragraph} markup list command is -defined, which returns a list of justified lines, the first one being -indented. The indent width is taken from the @code{props} argument. -@example -#(define-markup-list-command (paragraph layout props args) (markup-list?) - (let ((indent (chain-assoc-get 'par-indent props 2))) - (interpret-markup-list layout props - (make-justified-lines-markup-list (cons (make-hspace-markup indent) - args))))) -@end example - -Besides the usual @code{layout} and @code{props} arguments, the -@code{paragraph} markup list command takes a markup list argument, named -@code{args}. The predicate for markup lists is @code{markup-list?}. - -First, the function gets the indent width, a property here named -@code{par-indent}, from the property list @code{props} If the property -is not found, the default value is @code{2}. Then, a list of justified -lines is made using the @code{make-justified-lines-markup-list} -function, which is related to the @code{\justified-lines} -built-in markup list command. An horizontal space is added at the -beginning using the @code{make-hspace-markup} function. Finally, the -markup list is interpreted using the @code{interpret-markup-list} -function. - -This new markup list command can be used as follows: -@example -\markuplines @{ - \paragraph @{ - The art of music typography is called \italic @{(plate) engraving.@} - The term derives from the traditional process of music printing. - Just a few decades ago, sheet music was made by cutting and stamping - the music into a zinc or pewter plate in mirror image. - @} - \override-lines #'(par-indent . 4) \paragraph @{ - The plate would be inked, the depressions caused by the cutting - and stamping would hold ink. An image was formed by pressing paper - to the plate. The stamping and cutting was completely done by - hand. - @} -@} -@end example - -@node Contexts for programmers -@section Contexts for programmers - -@menu -* Context evaluation:: -* Running a function on all layout objects:: -@end menu - -@node Context evaluation -@subsection Context evaluation - -@cindex calling code during interpreting -@funindex \applyContext - -Contexts can be modified during interpretation with Scheme code. The -syntax for this is -@example -\applyContext @var{function} -@end example - -@var{function} should be a Scheme function taking a single argument, -being the context to apply it to. The following code will print the -current bar number on the standard output during the compile: - -@example -\applyContext - #(lambda (x) - (format #t "\nWe were called in barnumber ~a.\n" - (ly:context-property x 'currentBarNumber))) -@end example - - - -@node Running a function on all layout objects -@subsection Running a function on all layout objects - - -@cindex calling code on layout objects -@funindex \applyOutput - - -The most versatile way of tuning an object is @code{\applyOutput}. Its -syntax is -@example -\applyOutput @var{context} @var{proc} -@end example - -@noindent -where @var{proc} is a Scheme function, taking three arguments. - -When interpreted, the function @var{proc} is called for every layout -object found in the context @var{context}, with the following -arguments: -@itemize -@item the layout object itself, -@item the context where the layout object was created, and -@item the context where @code{\applyOutput} is processed. -@end itemize - - -In addition, the cause of the layout object, i.e., the music -expression or object that was responsible for creating it, is in the -object property @code{cause}. For example, for a note head, this is a -@rinternals{NoteHead} event, and for a @rinternals{Stem} object, -this is a @rinternals{NoteHead} object. - -Here is a function to use for @code{\applyOutput}; it blanks -note-heads on the center-line: - -@example -(define (blanker grob grob-origin context) - (if (and (memq (ly:grob-property grob 'interfaces) - note-head-interface) - (eq? (ly:grob-property grob 'staff-position) 0)) - (set! (ly:grob-property grob 'transparent) #t))) -@end example - - -@node Scheme procedures as properties -@section Scheme procedures as properties - -Properties (like thickness, direction, etc.) can be set at fixed values -with \override, e.g. - -@example -\override Stem #'thickness = #2.0 -@end example - -Properties can also be set to a Scheme procedure, - -@lilypond[fragment,verbatim,quote,relative=2] -\override Stem #'thickness = #(lambda (grob) - (if (= UP (ly:grob-property grob 'direction)) - 2.0 - 7.0)) -c b a g b a g b -@end lilypond - -@noindent -In this case, the procedure is executed as soon as the value of the -property is requested during the formatting process. - -Most of the typesetting engine is driven by such callbacks. -Properties that typically use callbacks include - -@table @code -@item stencil - The printing routine, that constructs a drawing for the symbol -@item X-offset - The routine that sets the horizontal position -@item X-extent - The routine that computes the width of an object -@end table - -The procedure always takes a single argument, being the grob. - -If routines with multiple arguments must be called, the current grob -can be inserted with a grob closure. Here is a setting from -@code{AccidentalSuggestion}, - -@example -(X-offset . - ,(ly:make-simple-closure - `(,+ - ,(ly:make-simple-closure - (list ly:self-alignment-interface::centered-on-x-parent)) - ,(ly:make-simple-closure - (list ly:self-alignment-interface::x-aligned-on-self))))) -@end example - -@noindent -In this example, both @code{ly:self-alignment-interface::x-aligned-on-self} and -@code{ly:self-alignment-interface::centered-on-x-parent} are called -with the grob as argument. The results are added with the @code{+} -function. To ensure that this addition is properly executed, the whole -thing is enclosed in @code{ly:make-simple-closure}. - -In fact, using a single procedure as property value is equivalent to - -@example -(ly:make-simple-closure (ly:make-simple-closure (list @var{proc}))) -@end example - -@noindent -The inner @code{ly:make-simple-closure} supplies the grob as argument -to @var{proc}, the outer ensures that result of the function is -returned, rather than the @code{simple-closure} object. - - -@node Using Scheme code instead of \tweak -@section Using Scheme code instead of @code{\tweak} - -The main disadvantage of @code{\tweak} is its syntactical -inflexibility. For example, the following produces a syntax error. - -@example -F = \tweak #'font-size #-3 -\flageolet - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -With other words, @code{\tweak} doesn't behave like an articulation -regarding the syntax; in particular, it can't be attached with -@code{^} and @code{_}. - -Using Scheme, this problem can be circumvented. The route to the -result is given in @ref{Adding articulation to notes (example)}, -especially how to use @code{\displayMusic} as a helping guide. - -@example -F = #(let ((m (make-music 'ArticulationEvent - 'articulation-type "flageolet"))) - (set! (ly:music-property m 'tweaks) - (acons 'font-size -3 - (ly:music-property m 'tweaks))) - m) - -\relative c'' @{ - c4^\F c4_\F -@} -@end example - -@noindent -Here, the @code{tweaks} properties of the flageolet object -@code{m} (created with @code{make-music}) are extracted with -@code{ly:music-property}, a new key-value pair to change the -font size is prepended to the property list with the -@code{acons} Scheme function, and the result is finally -written back with @code{set!}. The last element of the -@code{let} block is the return value, @code{m} itself. - - - -@node Difficult tweaks -@section Difficult tweaks - -There are a few classes of difficult adjustments. - -@itemize - - -@item -One type of difficult adjustment is the appearance of spanner objects, -such as slur and tie. Initially, only one of these objects is created, -and they can be adjusted with the normal mechanism. However, in some -cases the spanners cross line breaks. If this happens, these objects -are cloned. A separate object is created for every system that it is -in. These are clones of the original object and inherit all -properties, including @code{\override}s. - - -In other words, an @code{\override} always affects all pieces of a -broken spanner. To change only one part of a spanner at a line break, -it is necessary to hook into the formatting process. The -@code{after-line-breaking} callback contains the Scheme procedure that -is called after the line breaks have been determined, and layout -objects have been split over different systems. - -In the following example, we define a procedure -@code{my-callback}. This procedure - -@itemize -@item -determines if we have been split across line breaks -@item -if yes, retrieves all the split objects -@item -checks if we are the last of the split objects -@item -if yes, it sets @code{extra-offset}. -@end itemize - -This procedure is installed into @rinternals{Tie}, so the last part -of the broken tie is translated up. - -@lilypond[quote,verbatim,ragged-right] -#(define (my-callback grob) - (let* ( - ; have we been split? - (orig (ly:grob-original grob)) - - ; if yes, get the split pieces (our siblings) - (siblings (if (ly:grob? orig) - (ly:spanner-broken-into orig) '() ))) - - (if (and (>= (length siblings) 2) - (eq? (car (last-pair siblings)) grob)) - (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) - -\relative c'' { - \override Tie #'after-line-breaking = - #my-callback - c1 ~ \break c2 ~ c -} -@end lilypond - -@noindent -When applying this trick, the new @code{after-line-breaking} callback -should also call the old one @code{after-line-breaking}, if there is -one. For example, if using this with @code{Hairpin}, -@code{ly:hairpin::after-line-breaking} should also be called. - - -@item Some objects cannot be changed with @code{\override} for -technical reasons. Examples of those are @code{NonMusicalPaperColumn} -and @code{PaperColumn}. They can be changed with the -@code{\overrideProperty} function, which works similar to @code{\once -\override}, but uses a different syntax. - -@example -\overrideProperty -#"Score.NonMusicalPaperColumn" % Grob name -#'line-break-system-details % Property name -#'((next-padding . 20)) % Value -@end example - -Note, however, that @code{\override}, applied to -@code{NonMusicalPaperColumn} and @code{PaperColumn}, still works as -expected within @code{\context} blocks. - -@end itemize - - - - - diff --git a/Documentation/user/repeats.itely b/Documentation/user/repeats.itely deleted file mode 100644 index 689fd36009..0000000000 --- a/Documentation/user/repeats.itely +++ /dev/null @@ -1,528 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Repeats -@section Repeats - -@lilypondfile[quote]{repeats-headword.ly} - -Repetition is a central concept in music, and multiple notations -exist for repetitions. LilyPond supports the following kinds of -repeats: - - -@table @code -@item volta -The repeated music is not written out but enclosed between repeat bar -lines. If the repeat is at the beginning of a piece, a repeat bar -line is only printed at the end of the repeat. Alternative endings -(volte) are printed left to right with brackets. This is the standard -notation for repeats with alternatives. - -@item unfold -The repeated music is fully written out, as many times as -specified by @var{repeatcount}. This is useful when -entering repetitious music. - -@item percent -These are beat or measure repeats. They look like single slashes or -percent signs. - -@item tremolo -This is used to write tremolo beams. - -@end table - - -@menu -* Long repeats:: -* Short repeats:: -@end menu - -@node Long repeats -@subsection Long repeats - -This section discusses how to input long (usually multi-measure) -repeats. The repeats can take two forms: repeats enclosed between -repeat signs; or written out repeats, used to input repetitious music. -Repeat signs can also be controlled manually. - -@menu -* Normal repeats:: -* Manual repeat marks:: -* Written-out repeats:: -@end menu - -@cindex volta -@cindex prima volta -@cindex seconda volta -@cindex volta, prima -@cindex volta, seconda -@cindex repeat, normal -@cindex normal repeat -@cindex repeat with alternate endings -@cindex alternate endings -@funindex \repeat -@funindex \alternative -@funindex \partial - -@node Normal repeats -@unnumberedsubsubsec Normal repeats - -The syntax for a normal repeat is - -@example -\repeat volta @var{repeatcount} @var{musicexpr} -@end example - -where @var{musicexpr} is a music expression. Alternate endings can be -produced using @code{\alternative}. In order to delimit the alternate -endings, the group of alternatives must be enclosed in a set of -braces. If there are more repeats than there are alternate endings, -the earliest repeats are given the first alternative. - -Normal repeats without alternate endings: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 2 { c4 d e f } -c2 d -\repeat volta 2 { d4 e f g } -@end lilypond - -Normal repeats with alternate endings: - -@lilypond[verbatim,quote,relative=2] -\repeat volta 4 { c4 d e f } -\alternative { - { d2 e } - { f2 g } -} -c1 -@end lilypond - - -@cindex repeat with upbeat -@cindex upbeat in a repeat -@cindex anacrucis in a repeat -@cindex repeat with anacrucis -@cindex repeat with pickup -@cindex pickup in a repeat -@funindex \partial - -Repeats with upbeats can be entered in two ways: - -@lilypond[verbatim,quote,relative=2] -\partial 4 -e | -\repeat volta 4 { c2 d | e2 f | } -\alternative { - { g4 g g e } - { a4 a a a | b2. } -} -@end lilypond - -@noindent -or - -@lilypond[verbatim,quote,relative=2] -\partial 4 -\repeat volta 4 { e4 | c2 d | e2 f | } -\alternative { - { \partial 4*3 g4 g g } - { a4 a a a | b2. } -} -@end lilypond - - -@cindex repeats with ties -@cindex alternative endings with ties -@cindex ties in repeats -@cindex ties in alternative endings -@funindex \repeatTie - -Ties may be added to a second ending: - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat volta 2 { c4 d e f ~ } -\alternative { - { f2 d } - { f2\repeatTie f, } -} -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{shortening-volta-brackets.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{adding-volta-brackets-to-additional-staves.ly} - - -@seealso -Music Glossary: @rglos{repeat}, @rglos{volta}. - -Notation Reference: @ref{Bar lines}, @ref{Modifying context plug-ins}. - -Snippets: @rlsr{Repeats}. - -Internals Reference: @rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, @rinternals{VoltaRepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - - -@knownissues - -@cindex repeat, ambiguous -@cindex nested repeat -@cindex repeat, nested -@cindex repeat timing information -@cindex repeat and measure number -@cindex timing information and repeats -@cindex measure number and repeats -@cindex repeat and slur -@cindex slur and repeat - -A nested repeat like - -@example -\repeat @dots{} -\repeat @dots{} -\alternative -@end example - -@noindent -is ambiguous, since it is is not clear to which @code{\repeat} the -@code{\alternative} belongs. This ambiguity is resolved by always -having the @code{\alternative} belong to the inner @code{\repeat}. -For clarity, it is advisable to use braces in such situations. - -Timing information is not remembered at the start of an alternative, -so after a repeat timing information must be reset by hand; for -example, by setting @code{Score.measurePosition} or entering -@code{\partial}. Similarly, slurs are also not repeated. - - - -@node Manual repeat marks -@unnumberedsubsubsec Manual repeat marks - -@cindex manual repeat mark -@cindex repeat, manual -@cindex start repeat -@cindex repeat, start -@cindex end repeat -@cindex repeat, end -@cindex repeat number, changing -@cindex repeat volta, changing -@cindex volta bracket -@cindex bracket, volta -@funindex repeatCommands -@funindex start-repeat - -@warning{These methods are only used for displaying unusual repeat -constructs, and may produce unexpected behavior. In most cases, -repeats should be created using the standard @code{\\repeat} command -or by printing the relevant bar lines. For more information, see -@ref{Bar lines}.} - -The property @code{repeatCommands} can be used to control the -layout of repeats. Its value is a Scheme list of repeat commands. - -@table @code -@item start-repeat -Print a @code{|:} bar line. - -@lilypond[verbatim,quote,relative=2] -c1 -\set Score.repeatCommands = #'(start-repeat) -d4 e f g -c1 -@end lilypond - -As per standard engraving practice, repeat signs are not printed -at the beginning of a piece. - -@item end-repeat -Print a @code{:|} bar line: - -@lilypond[verbatim,quote,relative=2] -c1 -d4 e f g -\set Score.repeatCommands = #'(end-repeat) -c1 -@end lilypond - -@item (volta @var{number}) ... (volta #f) -Create a new volta with the specified number. The volta bracket must -be explicitly terminated, or it will not be printed. - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2")) -g4 a g a -\set Score.repeatCommands = #'((volta #f)) -c1 -@end lilypond - -@end table - -Multiple repeat commands may occur at the same point: - -@lilypond[verbatim,quote,relative=2] -f4 g a b -\set Score.repeatCommands = #'((volta "2, 5") end-repeat) -g4 a g a -c1 -\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat) -b1 -\set Score.repeatCommands = #'((volta #f)) -@end lilypond - -@cindex volta bracket with text -@cindex text in volta bracket - -Text can be included with the volta bracket. The text can be a -number or numbers or markup text, see @ref{Formatting text}. The -simplest way to use markup text is to define the markup first, -then include the markup in a Scheme list. - -@lilypond[verbatim,quote] -voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } -\relative c'' { - c1 - \set Score.repeatCommands = #(list(list 'volta voltaAdLib) 'start-repeat) - c4 b d e - \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) - f1 - \set Score.repeatCommands = #'((volta #f)) -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} - - -@seealso -Notation Reference: -@ref{Bar lines}, -@ref{Formatting text}. - -Snippets: -@rlsr{Repeats}. - -Internals Reference: -@rinternals{VoltaBracket}, -@rinternals{RepeatedMusic}, -@rinternals{VoltaRepeatedMusic}. - - -@node Written-out repeats -@unnumberedsubsubsec Written-out repeats - -@cindex written-out repeats -@cindex repetitious music -@cindex repeats, written-out -@cindex repeat, unfold -@cindex unfold music -@cindex unfold repeat -@cindex unfold repeat with alternate endings -@cindex unfold music with alternate endings -@cindex alternate ending in written-out repeats -@funindex unfold - -By using the @code{unfold} command, repeats can be used to simplify -the writing out of repetitious music. The syntax is - -@example -\repeat unfold @var{repeatcount} @var{musicexpr} -@end example - -where @var{musicexpr} is a music expression and @var{repeatcount} is -the number of times @var{musicexpr} is repeated. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { c4 d e f } -c1 -@end lilypond - -Unfold repeats can be made with alternate endings. If there are -more repeats than there are alternate endings, the first -alternative ending is applied to the earliest endings. - -@lilypond[verbatim,quote,relative=2] -c1 -\repeat unfold 2 { g4 f e d } - \alternative { - { cis2 g' } - { cis,2 b } - } -c1 -@end lilypond - - -@seealso -Snippets: @rlsr{Repeats}. - -Internals Reference: @rinternals{RepeatedMusic}, -@rinternals{UnfoldedRepeatedMusic}. - - -@node Short repeats -@subsection Short repeats - -This section discusses how to input short repeats. Short repeats can -take two basic forms: repeats of a single note to two measures, -represented by slashes or percent signs; and tremolos. - -@menu -* Percent repeats:: -* Tremolo repeats:: -@end menu - -@node Percent repeats -@unnumberedsubsubsec Percent repeats - -@cindex percent repeats -@cindex measure repeats -@cindex repeat, percent -@cindex repeat, measure -@cindex repeat, short -@funindex \repeat percent -@funindex percent - -Repeated short patterns of notes are supported. The music is printed -once, and the pattern is replaced with a special sign. Patterns that -are shorter than one measure are replaced by slashes, and patterns of -one or two measures are replaced by percent-like signs. The syntax is - -@example -@code{\repeat percent @var{number} @var{musicexpr}} -@end example - -where @var{musicexpr} is a music expression. - -@lilypond[verbatim,quote,relative=2] -\repeat percent 4 { c4 } -\repeat percent 2 { b4 a g f } -\repeat percent 2 { c2 es | f4 fis g c | } -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-counter.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{percent-repeat-count-visibility.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{isolated-percent-repeats.ly} - - -@seealso -Music Glossary: @rglos{percent repeat}, @rglos{simile}. - -Snippets: @rlsr{Repeats}. - -Internals Reference: @rinternals{RepeatSlash}, -@rinternals{PercentRepeat}, @rinternals{DoublePercentRepeat}, -@rinternals{DoublePercentRepeatCounter}, -@rinternals{PercentRepeatCounter}, @rinternals{PercentRepeatedMusic}. - - -@knownissues - -Only three kinds of percent repeats are supported: a single slash -representing a single beat (regardless of the duration of the repeated -notes); a single slash with dots representing one full measure; and -two slashes with dots crossing a bar line representing two full -measures. Neither multiple slashes representing single beat repeats -consisting of sixteenth or shorter notes, nor two slashes with dots -representing single beat repeats consisting of notes of varying -durations, are supported. - - -@node Tremolo repeats -@unnumberedsubsubsec Tremolo repeats - -@cindex tremolo beams -@cindex tremolo -@cindex repeat, tremolo -@funindex \repeat tremolo -@funindex tremolo - -Tremolos can take two forms: alternation between two chords or two -notes, and rapid repetition of a single note or chord. Tremolos -consisting of an alternation are indicated by adding beams between the -notes or chords being alternated, while tremolos consisting of the -rapid repetition of a single note are indicated by adding beams or -slashes to a single note. - -To place tremolo marks between notes, use @code{\repeat} with -tremolo style: - -@lilypond[quote,verbatim,relative=2] -\repeat tremolo 8 { c16 d } -\repeat tremolo 6 { c16 d } -\repeat tremolo 2 { c16 d } -@end lilypond - -The @code{\repeat tremolo} syntax expects exactly two notes within -the braces, and the number of repetitions must correspond to a -note value that can be expressed with plain or dotted notes. Thus, -@code{\repeat tremolo 7} is valid and produces a double dotted -note, but @code{\repeat tremolo 9} is not. - -The duration of the tremolo equals the duration of the -braced expression multiplied by the number of repeats: -@code{\repeat tremolo 8 @{ c16 d16 @}} gives a whole note tremolo, -notated as two whole notes joined by tremolo beams. - -There are two ways to put tremolo marks on a single note. The -@code{\repeat tremolo} syntax is also used here, in which case -the note should not be surrounded by braces: - -@lilypond[quote,verbatim,ragged-right] -\repeat tremolo 4 c'16 -@end lilypond - -@cindex tremolo marks -@funindex tremoloFlags -@funindex : - -The same output can be obtained by adding -@q{@code{:}[@var{number}]} after the note. The number indicates -the duration of the subdivision, and it must be at least 8. A -@var{number} value of 8 gives one line across the note stem. If -the length is omitted, the last value (stored in -@code{tremoloFlags}) is used - -@lilypond[quote,verbatim,relative=2] -c2:8 c:32 -c: c: -@end lilypond - - -@seealso -Snippets: @rlsr{Repeats}. - -@cindex tremolo, cross-staff -@cindex cross-staff tremolo - -@knownissues - -Cross-staff tremolos do not work well. - diff --git a/Documentation/user/rhythms.itely b/Documentation/user/rhythms.itely deleted file mode 100644 index da9a8a3245..0000000000 --- a/Documentation/user/rhythms.itely +++ /dev/null @@ -1,2860 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Rhythms -@section Rhythms - -@lilypondfile[quote]{rhythms-headword.ly} - -This section discusses rhythms, rests, durations, beaming and bars. - -@menu -* Writing rhythms:: -* Writing rests:: -* Displaying rhythms:: -* Beams:: -* Bars:: -* Special rhythmic concerns:: -@end menu - - -@node Writing rhythms -@subsection Writing rhythms - -@menu -* Durations:: -* Tuplets:: -* Scaling durations:: -* Ties:: -@end menu - -@node Durations -@unnumberedsubsubsec Durations - -@cindex durations, of notes -@cindex note durations -@cindex length of notes -@cindex note lengths - -@funindex \longa -@funindex longa -@funindex \breve -@funindex breve -@funindex \maxima -@funindex maxima - -Durations are designated by numbers and dots. Durations are entered -as their reciprocal values. For example, a quarter note is entered -using a @code{4} (since it is a 1/4 note), and a half note is entered -using a @code{2} (since it is a 1/2 note). For notes longer than a -whole you must use the @code{\longa} (a double breve) and -@code{\breve} commands. Durations as short as 128th notes may be -specified. Shorter values are possible, but only as beamed notes. - -@c Two 64th notes are needed to obtain beams -@lilypond[quote,verbatim,relative=2] -\time 8/1 -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c128 c128 -@end lilypond - -@noindent -Here are the same durations with automatic beaming turned off. - -@c not strictly "writing rhythms"; more of a "displaying" thing, -@c but it's ok here. -gp -@lilypond[quote,verbatim,relative=2] -\time 8/1 -\autoBeamOff -c\longa c\breve c1 c2 -c4 c8 c16 c32 c64 c128 c128 -@end lilypond - -A note with the duration of a quadruple breve may be entered with -@code{\maxima}, but this is supported only within ancient music -notation. For details, see @ref{Ancient notation}. - -If the duration is omitted, it is set to the previously -entered duration. The default for the first note is a quarter -note. - -@lilypond[quote,verbatim,relative=2] -a a a2 a a4 a a1 a -@end lilypond - -@cindex notes, dotted -@cindex dotted notes -@cindex notes, double-dotted -@cindex double-dotted notes - -@funindex . - -To obtain dotted note lengths, place a dot (@code{.}) after the -duration. Double-dotted notes are specified by appending two -dots, and so on. - -@lilypond[quote,verbatim,relative=2] -a4 b c4. b8 a4. b4.. c8. -@end lilypond - -Some durations cannot be represented with just binary durations -and dots; they can be represented only by tying two or more -notes together. For details, see @ref{Ties}. - -For ways of specifying durations for the syllables of lyrics and -ways of aligning lyrics to notes, see @ref{Vocal music}. - -Optionally, notes can be spaced strictly proportionately to their -duration. For details of this and other settings which control -proportional notation, see @ref{Proportional notation}. - -@funindex \dotsUp -@funindex dotsUp -@funindex \dotsDown -@funindex dotsDown -@funindex \dotsNeutral -@funindex dotsNeutral - -Dots are normally moved up to avoid staff lines, except in -polyphonic situations. Predefined commands are available to -force a particular direction manually, for details -see @ref{Direction and placement}. - - -@predefined -@code{\autoBeamOff}, -@code{\dotsUp}, -@code{\dotsDown}, -@code{\dotsNeutral}. -@endpredefined - - -@seealso -Music Glossary: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}, -@rglos{note value}, -@rglos{Duration names notes and rests}. - -Notation Reference: -@ref{Automatic beams}, -@ref{Ties}, -@ref{Stems}, -@ref{Writing rhythms}, -@ref{Writing rests}, -@ref{Vocal music}, -@ref{Ancient notation}, -@ref{Proportional notation}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{Dots}, -@rinternals{DotColumn}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -There is no fundamental limit to rest durations (both in terms of -longest and shortest), but the number of glyphs is limited: -rests from 128th to maxima (8 x whole) may be printed. - - -@node Tuplets -@unnumberedsubsubsec Tuplets - -@cindex tuplets -@cindex triplets - -@funindex \times -@funindex times - -Tuplets are made from a music expression by multiplying all the -durations with a fraction: - -@example -\times @var{fraction} @{ @var{music} @} -@end example - -@noindent -The duration of @var{music} will be multiplied by the -fraction. The fraction's denominator will be printed over or -under the notes, optionally with a bracket. The most common -tuplet is the triplet in which 3 notes have the duration of 2, so -the notes are 2/3 of their written length. - -@lilypond[quote,verbatim,relative=2] -a2 \times 2/3 { b4 b b } -c4 c \times 2/3 { b4 a g } -@end lilypond - -@funindex \tupletUp -@funindex tupletUp -@funindex \tupletDown -@funindex tupletDown -@funindex \tupletNeutral -@funindex tupletNeutral - -The automatic placement of the tuplet bracket above or below the -notes may be overridden manually with predefined commands, for -details see @ref{Direction and placement}. - -Tuplets may be nested: - -@lilypond[quote,verbatim,relative=2] -\autoBeamOff -c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 | -@end lilypond - -Modifying nested tuplets which begin at the same musical moment -must be done with @code{\tweak}. - -To modify the duration of notes without printing a tuplet bracket, -see @ref{Scaling durations}. - - -@predefined -@code{\tupletUp}, -@code{\tupletDown}, -@code{\tupletNeutral}. -@endpredefined - - -@snippets - -@cindex tuplet formatting -@cindex triplet formatting - -@funindex tupletNumberFormatFunction -@funindex tupletSpannerDuration - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{entering-several-tuplets-using-only-one--times-command.ly} - -@funindex TupletNumber - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-tuplet-number.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{permitting-line-breaks-within-beamed-tuplets.ly} - - -@seealso -Music Glossary: -@rglos{triplet}, -@rglos{tuplet}, -@rglos{polymetric}. - -Learning Manual: @rlearning{Tweaking methods}. - -Notation Reference: -@ref{Time administration}, -@ref{Scaling durations}, -@ref{The tweak command}, -@ref{Polymetric notation}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{TupletBracket}, -@rinternals{TupletNumber}, -@rinternals{TimeScaledMusic}. - - -@knownissues -@cindex grace notes within tuplet brackets -When the first note on a staff is a grace note followed by a -tuplet the grace note must be placed before the @code{\times} -command to avoid errors. Anywhere else, grace notes may be -placed within tuplet brackets. - - -@node Scaling durations -@unnumberedsubsubsec Scaling durations - -@cindex scaling durations -@cindex durations, scaling - -You can alter the duration of single notes, rests or chords by a -fraction @code{N/M} by appending @code{*N/M} (or @code{*N} if @code{M} -is 1) to the duration. This will not affect the appearance of the -notes or rests produced, but the altered duration will be used in -calculating the position within the measure and setting the duration -in the MIDI output. Multiplying factors may be combined such as -@code{*L*M/N}. - -In the following example, the first three notes take up exactly -two beats, but no triplet bracket is printed. - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Alter durations to triplets -a4*2/3 gis4*2/3 a4*2/3 -% Normal durations -a4 a4 -% Double the duration of chord -4*2 -% Duration of quarter, appears like sixteenth -b16*4 c4 -@end lilypond - -The duration of skip or spacing notes may also be modified by -a multiplier. This is useful for skipping many measures, e.g., -@code{s1*23}. - -@cindex compressing music - -@funindex \scaleDurations -@funindex scaleDurations - -Longer stretches of music may be compressed by a fraction in the -same way, as if every note, chord or rest had the fraction as a -multiplier. This leaves the appearance of the music unchanged but -the internal duration of the notes will be multiplied by the -fraction @emph{num}/@emph{den}. The spaces around the dot are -required. Here is an example showing how music can be compressed -and expanded: - -@lilypond[quote,relative=2,verbatim] -\time 2/4 -% Normal durations -4 c8 a -% Scale music by *2/3 -\scaleDurations #'(2 . 3) { - 4. c8 a f -} -% Scale music by *2 -\scaleDurations #'(2 . 1) { - 4 c8 b -} -@end lilypond - -@noindent -One application of this command is in polymetric -notation, see @ref{Polymetric notation}. - - -@seealso -Notation Reference: -@ref{Tuplets}, -@ref{Invisible rests}, -@ref{Polymetric notation}. - -Snippets: -@rlsr{Rhythms}. - - -@node Ties -@unnumberedsubsubsec Ties - -@cindex tie - -@funindex ~ - -A tie connects two adjacent note heads of the same pitch. The tie -in effect extends the duration of a note. - -@warning{Ties should not be confused with @emph{slurs}, which -indicate articulation, or @emph{phrasing slurs}, which indicate -musical phrasing. A tie is just a way of extending a note -duration, similar to the augmentation dot.} - -A tie is entered using the tilde symbol @code{~} - -@lilypond[quote,verbatim,relative=2] -a2 ~ a -@end lilypond - - -@noindent -Ties are used either when the note crosses a bar line, or when -dots cannot be used to denote the rhythm. Ties should also be -used when note values cross larger subdivisions of the measure: - -@lilypond[verbatim,quote] -\relative c' { - r8 c8 ~ c2 r4 | - r8^"not" c2 ~ c8 r4 -} -@end lilypond - -If you need to tie many notes across bar lines, it may be -easier to use automatic note splitting, see @ref{Automatic note -splitting}. This mechanism automatically splits long notes, and -ties them across bar lines. - -@cindex ties and chords -@cindex chords and ties - -When a tie is applied to a chord, all note heads whose pitches -match are connected. When no note heads match, no ties will be -created. Chords may be partially tied by placing the tie inside -the chord. - -@lilypond[quote,verbatim,relative=1] - ~ - -@end lilypond - -@cindex repeating ties -@cindex ties, repeating -@cindex volta brackets and ties -@cindex ties and volta brackets - -@funindex \repeatTie -@funindex repeatTie - -When a second alternative of a repeat starts with a tied note, you -have to specify the repeated tie as follows: - -@lilypond[quote,relative=2,verbatim] -\repeat volta 2 { c g 2 ~ } -\alternative { - % First alternative: following note is tied normally - { 2. r4 } - % Second alternative: following note has a repeated tie - { 2\repeatTie d4 c } } -@end lilypond - -@cindex laissez vibrer -@cindex ties, laissez vibrer - -@funindex \laissezVibrer -@funindex laissezVibrer - -@notation{L.v.} ties (@notation{laissez vibrer}) indicate that -notes must not be damped at the end. It is used in notation for -piano, harp and other string and percussion instruments. They can -be entered as follows: - -@lilypond[quote,verbatim,relative=1] -1\laissezVibrer -@end lilypond - -@cindex ties, placement - -@funindex \tieUp -@funindex tieUp -@funindex \tieDown -@funindex tieDown -@funindex \tieNeutral -@funindex tieNeutral - -The vertical placement of ties may be controlled, see -Predefined commands, or for details, see -@ref{Direction and placement}. - -@cindex ties, appearance -@cindex ties, dotted -@cindex ties, dashed -@cindex dashed ties -@cindex dotted ties - -@funindex \tieDotted -@funindex tieDotted -@funindex \tieDashed -@funindex tieDashed -@funindex \tieSolid -@funindex tieSolid - -Solid, dotted or dashed ties may be specified, see Predefined -commands. - - -@predefined -@code{\tieUp}, -@code{\tieDown}, -@code{\tieNeutral}, -@code{\tieDotted}, -@code{\tieDashed}, -@code{\tieSolid}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-ties-with-arpeggios.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{engraving-ties-manually.ly} - - -@seealso -Music Glossary: -@rglos{tie}, -@rglos{laissez vibrer}. - -Notation Reference: @ref{Automatic note splitting}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{LaissezVibrerTie}, -@rinternals{LaissezVibrerTieColumn}, -@rinternals{TieColumn}, -@rinternals{Tie}. - - -@knownissues - -Switching staves when a tie is active will not produce a slanted -tie. - -Changing clefs or octavations during a tie is not really -well-defined. In these cases, a slur may be preferable. - - - -@node Writing rests -@subsection Writing rests - -Rests are entered as part of the music in music expressions. - -@menu -* Rests:: -* Invisible rests:: -* Full measure rests:: -@end menu - -@node Rests -@unnumberedsubsubsec Rests -@cindex rest -@cindex rest, entering durations -@cindex maxima rest -@cindex longa rest -@cindex breve rest - -@funindex \rest -@funindex rest -@funindex r -@funindex \maxima -@funindex maxima -@funindex \longa -@funindex longa -@funindex \breve -@funindex breve - -Rests are entered like notes with the note name @code{r}. -Durations longer than a whole rest use the predefined -commands shown: - -@c \time 16/1 is used to avoid spurious bar lines -@c and long tracts of empty measures -@lilypond[fragment,quote,verbatim] -\new Staff { - % These two lines are just to prettify this example - \time 16/1 - \override Staff.TimeSignature #'stencil = ##f - % Print a maxima rest, equal to four breves - r\maxima - % Print a longa rest, equal to two breves - r\longa - % Print a breve rest - r\breve - r1 r2 r4 r8 r16 r32 r64 r128 -} -@end lilypond - -@cindex rest, multi-measure -@cindex rest, whole-measure - -Whole measure rests, centered in the middle of the measure, must be -entered as multi-measure rests. They can be used for a single -measure as well as many measures and are discussed in @ref{Full -measure rests}. - -@cindex rest, specifying vertical position - -To explicitly specify a rest's vertical position, write a note -followed by @code{\rest}. A rest of the duration of the note will -be placed at the staff position where the note would appear. This -allows for precise manual formatting of polyphonic music, since the -automatic rest collision formatter will not move these rests. - -@lilypond[quote,verbatim,relative=2] -a4\rest d4\rest -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{rest-styles.ly} - - -@seealso -Music Glossary: -@rglos{breve}, -@rglos{longa}, -@rglos{maxima}. - -Notation Reference: -@ref{Full measure rests}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{Rest}. - - -@knownissues - -@c Deliberately duplicated in Durations and Rests. -gp -There is no fundamental limit to rest durations (both in terms of -longest and shortest), but the number of glyphs is limited: there -are rests from 128th to maxima (8 x whole). - - -@node Invisible rests -@unnumberedsubsubsec Invisible rests - -@cindex skip -@cindex invisible rest -@cindex rest, invisible -@cindex spacer note -@cindex spacer rest - -@funindex s -@funindex \skip -@funindex skip - -An invisible rest (also called a @q{spacer rest}) can be entered -like a note with the note name@tie{}@code{s}: - -@lilypond[verbatim,quote,relative=2] -c4 c s c -s2 c -@end lilypond - -@cindex lyrics, skip - -Spacer rests are available only in note mode and chord mode. In -other situations, for example, when entering lyrics, @code{\skip} -is used to skip a musical moment. @code{\skip} requires an -explicit duration. - -@lilypond[quote,verbatim,relative=2] -<< - { - a2 \skip2 a2 a2 - } - \new Lyrics { - \lyricmode { - foo2 \skip 1 bla2 - } - } ->> -@end lilypond - -A spacer rest implicitly causes @code{Staff} and @code{Voice} -contexts to be created if none exist, just like notes and rests -do: - -@lilypond[quote,verbatim,fragment] -s1 s s -@end lilypond - -@code{\skip} simply skips musical time; it creates no output of -any kind. - -@lilypond[quote,verbatim,fragment] -% This is valid input, but does nothing -\skip 1 \skip1 \skip 1 -@end lilypond - - -@seealso -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{SkipMusic} - - -@node Full measure rests -@unnumberedsubsubsec Full measure rests - -@cindex multi-measure rests -@cindex full-measure rests -@cindex rest, multi-measure -@cindex rest, full-measure -@cindex whole rest for a full measure -@cindex rest, whole for a full measure - -@funindex R - -Rests for one or more full measures are entered like notes with -the note name uppercase @code{R}: - -@lilypond[quote,verbatim,relative=2] -% Rest measures contracted to single measure -\compressFullBarRests -R1*4 -R1*24 -R1*4 -b2^"Tutti" b4 a4 -@end lilypond - -The duration of full-measure rests is identical to the duration -notation used for notes. The duration in a multi-measure rest must -always be an integral number of measure-lengths, so augmentation dots -or fractions must often be used: - -@lilypond[quote,fragment,verbatim] -\compressFullBarRests -\time 2/4 -R1 | R2 | -\time 3/4 -R2. | R2.*2 | -\time 13/8 -R1*13/8 | R1*13/8*12 | -\time 10/8 -R4*5*4 | -@end lilypond - -A full-measure rest is printed as either a whole or breve rest, -centered in the measure, depending on the time signature. - -@lilypond[quote,verbatim,fragment] -\time 4/4 -R1 | -\time 6/4 -R1*3/2 | -\time 8/4 -R1*2 | -@end lilypond - -@cindex multi-measure rest, expanding -@cindex multi-measure rest, contracting - -@funindex \expandFullBarRests -@funindex expandFullBarRests -@funindex \compressFullBarRests -@funindex compressFullBarRests - -By default a multi-measure rest is expanded in the printed score to -show all the rest measures explicitly. Alternatively, a multi-measure -rest can be shown as a single measure containing a multi-measure rest -symbol, with the number of measures of rest printed above the measure: - -@lilypond[quote,fragment,verbatim] -% Default behavior -\time 3/4 r2. | R2.*2 | -\time 2/4 R2 | -\time 4/4 -% Rest measures contracted to single measure -\compressFullBarRests -r1 | R1*17 | R1*4 | -% Rest measures expanded -\expandFullBarRests -\time 3/4 -R2.*2 | -@end lilypond - - -@cindex text on multi-measure rest -@cindex multi-measure rest, attaching text -@cindex script on multi-measure rest -@cindex multi-measure rest, script -@cindex fermata on multi-measure rest -@cindex multi-measure rest, attaching fermata - -@funindex \fermataMarkup -@funindex fermataMarkup - -Markups can be added to multi-measure rests. -The predefined command @code{\fermataMarkup} -is provided for adding fermatas. - -@lilypond[quote,verbatim,fragment] -\compressFullBarRests -\time 3/4 -R2.*10^\markup { \italic "ad lib." } -R2.^\fermataMarkup -@end lilypond - -@warning{ -Markups attached to a multi-measure rest are -objects of type @code{MultiMeasureRestText}, not -@code{TextScript}. Overrides must be directed to the correct -object, or they will be ignored. See the following example. -} - -@lilypond[quote,verbatim,fragment] -% This fails, as the wrong object name is specified -\override TextScript #'padding = #5 -R1^"wrong" -% This is correct and works -\override MultiMeasureRestText #'padding = #5 -R1^"right" -@end lilypond - -When a multi-measure rest immediately follows a @code{\partial} -setting, resulting bar-check warnings may not be displayed. - - -@predefined -@code{\textLengthOn}, -@code{\textLengthOff}, -@code{\fermataMarkup}, -@code{\compressFullBarRests}, -@code{\expandFullBarRests}. -@endpredefined - - -@snippets - -@cindex church rest -@cindex rest, church -@cindex kirchenpausen - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-form-of-multi-measure-rests.ly} - -@cindex multi-measure rests, positioning -@cindex positioning multi-measure rests - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{positioning-multi-measure-rests.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{multi-measure-rest-markup.ly} - - -@seealso -Music Glossary: -@rglos{multi-measure rest}. - -Notation Reference: -@ref{Durations}, -@ref{Text}, -@ref{Formatting text}, -@ref{Text scripts}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{MultiMeasureRest}, -@rinternals{MultiMeasureRestNumber}, -@rinternals{MultiMeasureRestText}. - - -@cindex fingerings and multi-measure rests -@cindex multi-measure rests and fingerings - -@knownissues - -If an attempt is made to use fingerings (e.g., -@code{R1*10-4}) to put numbers over multi-measure rests, the -fingering numeral (4) may collide with the bar counter -numeral (10). - -@cindex condensing rests -@cindex rest, condensing ordinary - -There is no way to automatically condense multiple ordinary rests -into a single multi-measure rest. - -@cindex rest, collisions of - -Multi-measure rests do not take part in rest collisions. - -@node Displaying rhythms -@subsection Displaying rhythms - -@menu -* Time signature:: -* Upbeats:: -* Unmetered music:: -* Polymetric notation:: -* Automatic note splitting:: -* Showing melody rhythms:: -@end menu - -@node Time signature -@unnumberedsubsubsec Time signature - -@cindex time signature -@cindex meter - -@funindex \time -@funindex time - -The time signature is set as follows: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c2 -\time 3/4 c2. -@end lilypond - -@cindex time signature, visibility of - -Time signatures are printed at the beginning of a piece -and whenever the time signature changes. If a change takes place -at the end of a line a warning time signature sign is printed -there. This default behavior may be changed, see -@ref{Visibility of objects}. - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -c2 c -\break -c c -\break -\time 4/4 -c c c c -@end lilypond - -@cindex time signature style -@cindex meter style - -@funindex \numericTimeSignature -@funindex numericTimeSignature -@funindex \defaultTimeSignature -@funindex defaultTimeSignature - -The time signature symbol that is used in 2/2 and 4/4 time can be -changed to a numeric style: - -@lilypond[quote,verbatim,relative=2] -% Default style -\time 4/4 c1 -\time 2/2 c1 -% Change to numeric style -\numericTimeSignature -\time 4/4 c1 -\time 2/2 c1 -% Revert to default style -\defaultTimeSignature -\time 4/4 c1 -\time 2/2 c1 -@end lilypond - - -Mensural time signatures are covered in -@ref{Mensural time signatures}. - - -@predefined -@code{\numericTimeSignature}, -@code{\defaultTimeSignature}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-the-time-signature-without-affecting-the-beaming.ly} - -@cindex compound time signatures -@cindex time signature, compound - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Music Glossary: -@rglos{time signature} - -Notation Reference: -@ref{Mensural time signatures}, -@ref{Time administration}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}. - - -@node Upbeats -@unnumberedsubsubsec Upbeats - -@cindex anacrusis -@cindex upbeat -@cindex partial measure -@cindex measure, partial -@cindex pickup measure -@cindex measure, change length -@cindex measurePosition - -@funindex \partial -@funindex partial - -Partial or pick-up measures, such as an anacrusis or upbeat, are -entered using the @code{\partial} command, with the syntax - -@example -\partial @var{duration} -@end example - -where @code{duration} is the rhythmic length of the interval -before the start of the first complete measure: - -@lilypond[quote,verbatim,relative=2] -\partial 4 e4 | -a2. c,4 | -@end lilypond - -The partial measure can be any duration less than a full measure: - -@lilypond[quote,verbatim,relative=2] -\partial 8*3 c8 d e | -a2. c,4 | -@end lilypond - -Internally, this is translated into - -@example -\set Timing.measurePosition = -@var{duration} -@end example - -The property @code{measurePosition} contains a rational number -indicating how much of the measure has passed at this point. Note -that this is set to a negative number by the @code{\partial} -command: i.e., @code{\partial 4} is internally translated to -@code{-4}, meaning @qq{there is a quarter note left in the measure.} - - -@seealso -Music Glossary: -@rglos{anacrusis}. - -Notation Reference: -@ref{Grace notes}. - -Snippets: -@rlsr{Rhythms}. - -Internal Reference: -@rinternals{Timing_translator}. - - -@knownissues - -The @code{\partial} command is intended to be used only at the -beginning of a piece. If you use it after the beginning, some -odd warnings may occur. - -@node Unmetered music -@unnumberedsubsubsec Unmetered music - -@cindex bar lines, turning off -@cindex bar numbering, turning off -@cindex cadenza -@cindex unmetered music - -@funindex \cadenzaOn -@funindex cadenzaOn -@funindex \cadenzaOff -@funindex cadenzaOff - -Bar lines and bar numbers are calculated automatically. For -unmetered music (some cadenzas, for example), this is not desirable. -To turn off automatic calculation of bar lines and bar numbers, -use the command @code{\cadenzaOn}, and use @code{\cadenzaOff} -to turn them on again. - -@lilypond[verbatim,relative=2,fragment] -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - -Bar numbering is resumed at the end of the cadenza as if the -cadenza were not there: - -@lilypond[verbatim,relative=2,fragment] -% Show all bar numbers -\override Score.BarNumber #'break-visibility = #all-visible -c4 d e d -\cadenzaOn -c4 c d8 d d f4 g4. -\cadenzaOff -\bar "|" -d4 e d c -@end lilypond - - -@predefined -@code{\cadenzaOn}, -@code{\cadenzaOff}. -@endpredefined - - -@seealso -Music Glossary: -@rglos{cadenza}. - -Notation Reference: -@ref{Visibility of objects}. - -Snippets: -@rlsr{Rhythms}. - - -@knownissues - -LilyPond will insert line breaks and page breaks only at a -bar line. Unless the unmetered music ends before the end of the -staff line, you will need to insert invisible bar lines with - -@example -\bar "" -@end example - -@noindent -to indicate where breaks can occur. - - -@node Polymetric notation -@unnumberedsubsubsec Polymetric notation - -@c This section necessarily uses \set -@c This is acceptable -td - -@cindex double time signatures -@cindex signatures, polymetric -@cindex time signatures, polymetric -@cindex time signatures, double -@cindex polymetric signatures -@cindex meter, polymetric - -@funindex timeSignatureFraction -@funindex \scaleDurations -@funindex scaleDurations -@funindex \times -@funindex times - -Polymetric notation is supported, either explicitly or by modifying -the visible time signature symbol and scaling the note durations. - -@strong{@i{Staves with different time signatures, equal measure lengths}} - -This notation can be created by setting a common time signature -for each staff but replacing the symbol manually by setting -@code{timeSignatureFraction} to the desired fraction and scaling -the printed durations in each staff to the common time -signature; see @ref{Time signature}. The scaling is done with -@code{\scaleDurations}, which is used in a similar way to -@code{\times}, but does not create a tuplet bracket; see -@ref{Scaling durations}. - -@cindex beaming in polymetric music -@cindex beaming in polymetric meter - -In this example, music with the time signatures of 3/4, 9/8, and -10/8 are used in parallel. In the second staff, shown durations -are multiplied by 2/3, as 2/3 * 9/8 = 3/4, and in the third -staff, shown durations are multiplied by 3/5, as 3/5 * 10/8 = 3/4. -It will often be necessary to insert beams manually, as the -duration scaling affects the autobeaming rules. - -@lilypond[quote,verbatim,fragment] -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(9 . 8) - \scaleDurations #'(2 . 3) - \repeat unfold 6 { c8[ c c] } - } - \new Staff { - \time 3/4 - \set Staff.timeSignatureFraction = #'(10 . 8) - \scaleDurations #'(3 . 5) { - \repeat unfold 2 { c8[ c c] } - \repeat unfold 2 { c8[ c] } | - c4. c4. \times 2/3 { c8[ c c] } c4 - } - } ->> -@end lilypond - -@strong{@i{Staves with different time signatures, unequal bar lengths}} - -Each staff can be given its own independent time signature by -moving the @code{Timing_translator} and the -@code{Default_bar_line_engraver} to the @code{Staff} context. - -@lilypond[quote,verbatim] -\layout { - \context { - \Score - \remove "Timing_translator" - \remove "Default_bar_line_engraver" - } - \context { - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - } -} - -% Now each staff has its own time signature. - -\relative c' << - \new Staff { - \time 3/4 - c4 c c | - c c c | - } - \new Staff { - \time 2/4 - c4 c | - c c | - c c | - } - \new Staff { - \time 3/8 - c4. | - c8 c c | - c4. | - c8 c c | - } ->> -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{compound-time-signatures.ly} - - -@seealso -Music Glossary: -@rglos{polymetric}, -@rglos{polymetric time signature}, -@rglos{meter}. - -Notation Reference: -@ref{Time signature}, -@ref{Scaling durations}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{TimeSignature}, -@rinternals{Timing_translator}, -@rinternals{Default_bar_line_engraver}, -@rinternals{Staff}. - - -@knownissues - -When using different time signatures in parallel, notes -at the same moment will be be placed at the same horizontal -location. However, the bar lines in the different staves -will cause the note spacing to be less regular in each of the -individual staves than would be normal without the different -time signatures. - -@node Automatic note splitting -@unnumberedsubsubsec Automatic note splitting - -@cindex notes, splitting -@cindex splitting notes - -@funindex Note_heads_engraver -@funindex Completion_heads_engraver - -Long notes which overrun bar lines can be converted automatically -to tied notes. This is done by replacing the -@code{Note_heads_engraver} with the -@code{Completion_heads_engraver}. In the following -example, notes crossing the bar lines are split and tied. - -@lilypond[quote,verbatim,relative=1] -\new Voice \with { - \remove "Note_heads_engraver" - \consists "Completion_heads_engraver" -} - -{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } -@end lilypond - -This engraver splits all running notes at the bar line, and -inserts ties. One of its uses is to debug complex scores: if the -measures are not entirely filled, then the ties show exactly how -much each measure is off. - - -@seealso -Music Glossary: @rglos{tie} - -Learning Manual: -@rlearning{Engravers explained}, -@rlearning{Adding and removing engravers}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{Note_heads_engraver}, -@rinternals{Completion_heads_engraver}, -@rinternals{Forbid_line_break_engraver}. - - -@knownissues - -Not all durations (especially those containing tuplets) can be -represented exactly with normal notes and dots, but the -@code{Completion_heads_engraver} will not insert tuplets. - -The @code{Completion_heads_engraver} only affects notes; it does not -split rests. - - -@node Showing melody rhythms -@unnumberedsubsubsec Showing melody rhythms - -@cindex melody rhythms, showing -@cindex rhythms, showing melody - -Sometimes you might want to show only the rhythm of a melody. This -can be done with the rhythmic staff. All pitches of notes on such a -staff are squashed, and the staff itself has a single line - -@lilypond[quote,relative=1,verbatim] -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \time 4/4 - c4 e8 f g2 - r4 g g f - g1 - } - } - \new Lyrics { - \lyricsto "myRhythm" { - This is my song - I like to sing - } - } ->> -@end lilypond - -@cindex guitar chord charts -@cindex strumming rhythms, showing -@cindex guitar strumming rhythms, showing - -@funindex Pitch_squash_engraver -@funindex \improvisationOn -@funindex improvisationOn -@funindex \improvisationOff -@funindex improvisationOff - -Guitar chord charts often show the strumming rhythms. This can -be done with the @code{Pitch_squash_engraver} and -@code{\improvisationOn}. - - -@lilypond[quote,verbatim] -<< - \new ChordNames { - \chordmode { - c1 f g c - } - } - - \new Voice \with { - \consists Pitch_squash_engraver - } \relative c'' { - \improvisationOn - c4 c8 c c4 c8 c - f4 f8 f f4 f8 f - g4 g8 g g4 g8 g - c4 c8 c c4 c8 c - } ->> -@end lilypond - - -@predefined -@code{\improvisationOn}, -@code{\improvisationOff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{guitar-strum-rhythms.ly} - - -@seealso -Snippets: -@rlsr{Rhythms}. - -Internals Reference: -@rinternals{RhythmicStaff}, -@rinternals{Pitch_squash_engraver}. - - -@node Beams -@subsection Beams - -@menu -* Automatic beams:: -* Setting automatic beam behavior:: -* Manual beams:: -* Feathered beams:: -@end menu - -@node Automatic beams -@unnumberedsubsubsec Automatic beams - -By default, beams are inserted automatically: - -@cindex beams, manual -@cindex manual beams -@cindex beams, setting rules for -@cindex beams, custom rules for - -@funindex measureLength -@funindex beatLength -@funindex beatGrouping -@funindex \autoBeamOn -@funindex autoBeamOn -@funindex \autoBeamOff -@funindex autoBeamOff - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c c c -\time 6/8 c c c c8. c16 c8 -@end lilypond - -If these automatic decisions are not satisfactory, beaming can be -entered explicitly; see @ref{Manual beams}. Beams must also be -entered manually in the same way if beams are to be extended over -rests. - -It is possible -to define beaming patterns that differ from the defaults. The -default beaming rules for most common time signatures are defined -in @file{scm/@/auto@/-beam@/.scm}. If there are no beaming rules -defined for a particular beam's duration in the time signature being -used, its beaming is controlled by the values of three context -properties, @code{measureLength}, @code{beatLength} and -@code{beatGrouping}. Both the beaming rules and the context -properties can be overridden, see @ref{Setting automatic beam behavior}. - - -@warning{If beams are used to indicate melismata in songs, then automatic -beaming should be switched off with @code{\autoBeamOff} and the beams -indicated manually.} - - -@noindent -Automatic beaming may be turned off and on with -@code{\autoBeamOff} and @code{\autoBeamOn} commands: - -@lilypond[quote,relative=1,verbatim] -c4 c8 c8. c16 c8. c16 c8 -\autoBeamOff -c4 c8 c8. c16 c8. -\autoBeamOn -c16 c8 -@end lilypond - - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - - -@snippets - -@cindex line breaks and beams -@cindex beams and line breaks - -@funindex breakable - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beams-across-line-breaks.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{changing-beam-knee-gap.ly} - - -@seealso -Notation Reference: -@ref{Manual beams}, -@ref{Setting automatic beam behavior}. - -Installed Files: -@file{scm/@/auto@/-beam@/.scm}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{Beam}. - - -@knownissues - -Automatically kneed cross-staff beams cannot be used together with -hidden staves. See @ref{Hiding staves}. - -Beams can collide with note heads and accidentals in other voices - - -@node Setting automatic beam behavior -@unnumberedsubsubsec Setting automatic beam behavior - - -@cindex automatic beams, tuning -@cindex tuning automatic beaming -@cindex automatic beam generation -@cindex autobeam -@cindex lyrics and beaming - -@funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) -@funindex measureLength -@funindex beatLength -@funindex beatGrouping -@funindex \time -@funindex time -@funindex \set -@funindex set - -The placement of automatic beams is determined by the rules -described in @ref{Automatic beams}. There are two mutually -exclusive ways in which these rules may be modified. The -first, modifying the grouping of beats, applies to uncommon time -signatures, i.e. those for which there are no predefined rules -defining the beam end points. The second method, modifying the -specification of the beam end points, can be used for any time -signature. This second method @strong{must} be used for those time -signatures and beam durations combinations for which beam ending -rules are pre-defined, unless these have all been reverted. There -are predefined rules for time signatures of 3/2, 3/4, 4/4, 2/4, -4/8, 4/16, 6/8, 9/8 and 12/8. - -@i{@strong{Modifying the grouping of beats}} - -If there are no beam-ending rules defined for the beam duration of a -particular beam in the time signature in use, its beaming is -controlled by three context properties: -@code{measureLength}, @code{beatLength} and @code{beatGrouping}. -These properties may be set in the @code{Score}, @code{Staff} or -@code{Voice} contexts to delimit their scope. The default values -are set while processing @code{\time} commands, so the @code{\set} -commands must be placed after all @code{\time} commands. - -These determine the beaming as follows: - -Beams may begin anywhere (unless a beam is already active). Beams -end at a time determined by the values of @code{beatGrouping} and -@code{beatLength}, as follows: - -@itemize - -@item If @code{beatGrouping} and @code{beatLength} are consistent -with @code{measureLength}, @code{beatGrouping} is used to determine -the end points of beams. - -@item If @code{beatGrouping} and @code{beatLength} are inconsistent -with @code{measureLength}, @code{beatLength} is used to determine -the end points of beams. - -@end itemize - -@warning{These three properties become effective for a particular -beam @strong{only} if there are no beam-ending rules predefined for -that beam's duration in the time signature in use, or if these -beam-ending rules have all been reverted.} - -By default the @code{measureLength} and @code{beatLength} are -derived from the time signature set by the @code{\time} command. -The @code{measureLength} is set to be exactly the same length as -the measure length given by the time signature, and the -@code{beatLength} is set to be the same as one over the denominator -of the time signature. - -The default value of @code{beatGrouping} is taken from a table in -@file{scm/@/music@/-functions@/.scm}. To find this, see -@rlearning{Other sources of information}. It defines the beat -grouping for 5/8, 6/8, 8/8, 9/8 and 12/8 time signatures. - -Both @code{measureLength} and @code{beatLength} are @i{moments}, -units of musical duration. A quantity of type @i{moment} is -created by the scheme function @code{ly:make-moment}. For more -information about this function, see @ref{Time administration}. - -@code{beatGrouping} is a list of integers giving the number of -beats in each group. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grouping-beats.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{specifying-context-with-beatgrouping.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-beatlength-and-beatgrouping.ly} - -@funindex subdivideBeams - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{sub-dividing-beams.ly} - -@cindex measure groupings -@cindex beats, grouping -@cindex grouping beats -@cindex measure sub-grouping - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{conducting-signs,-measure-grouping-signs.ly} - - -@strong{@i{Modifying the beam end points}} - -In common time signatures, automatic beams can start on any note -but can end at only a few positions within the measure, namely at -durations specified by the properties in @code{autoBeamSettings}. -These properties consist of a list of rules defining where beams can -end. The default @code{autoBeamSettings} rules are defined in -@file{scm/@/auto@/-beam@/.scm}. To find this, see -@rlearning{Other sources of information}. - -This method @strong{must} be used for the time signatures for which -beam-ending rules are defined by default, unless these have all -been reverted. It is also particularly suitable for many other time -signatures if the time signature of the measures changes frequently, -or if the beaming should be different for different beam durations. - -In order to add a rule to the list, use - -@example -#(override-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) -@end example - -@noindent -where - -@itemize - -@item @code{beam-limit} is the type of automatic beam limit -defined. This can be either @code{begin} or @code{end} but -only @code{end} is effective. - -@item @code{beam-numerator/beam-denominator} is the beam duration -to which the rule is to apply. A beam is considered to have -the duration of its shortest note. Set @code{beam-numerator} -and @code{beam-denominator} to @code{'*'} to have this rule apply -to beams of any duration. - -@item @code{time-signature-numerator/time-signature-denominator} -specifies the time signature to which this rule should apply. -If @code{time-signature-numerator} and -@code{time-signature-denominator} are set to @code{'*'} this rule -will apply in any time signature. - -@item @code{monent-numerator/moment-denominator} is the position -in the bar at which the beam should end. - -@item @code{context} is optional, and it specifies the context at which -the change should be made. The default is @code{'Voice}. - -@code{#(score-override-auto-beam-setting '(A B C D) E F)} is equivalent to -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. - -@end itemize - -For example, if automatic beams should always end on the first quarter -note, whatever the time signature or beam duration, use - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -You can force the beam settings to take effect only on beams whose shortest -note is a certain duration - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -You can force the beam settings to take effect only in certain time -signatures - -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d -@end lilypond - -When multiple voices are used the @code{Staff} context must be -specified if the beaming is to be applied to all voices in the -staff: - -@lilypond[quote,verbatim,relative=2] -\time 7/8 -% rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> - -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) -<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -@end lilypond - -@warning{If any unexpected beam behavior occurs, check the default -automatic beam settings in @file{scm/@/auto@/-beam@/.scm} for -possible interference, because the beam endings defined there will -still apply in addition to your own.} - -Any unwanted or conflicting default endings must be reverted for -your time signature(s). Existing auto-beam rules are removed by -using - -@example -#(revert-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) -@end example - -@noindent -@code{beam-limit}, @code{beam-numerator}, @code{beam-denominator}, -@code{time-signature-numerator}, @code{time-signature-denominator}, -@code{moment-numerator}, @code{moment-denominator} and @code{context} -are the same as above. - -@lilypond[quote,verbatim,relative=2] -\time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -The rule in a @code{revert-auto-beam-setting} statement must exactly -match the original rule. That is, no wildcard expansion is taken into -account. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a -@end lilypond - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-endings-in-score-context.ly} - -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - - -@cindex beam, last in score -@cindex beam, last in polyphonic voice - -@knownissues - -If a score ends while an automatic beam has not been ended and is -still accepting notes, this last beam will not be typeset at all. -The same holds for polyphonic voices, entered with @code{<< -@dots{} \\ @dots{} >>}. If a polyphonic voice ends while an -automatic beam is still accepting notes, it is not typeset. - - -@seealso -Snippets: -@rlsr{Rhythms}. - - -@node Manual beams -@unnumberedsubsubsec Manual beams - -@cindex beams, manual -@cindex manual beams - -@funindex ] -@funindex [ - -In some cases it may be necessary to override the automatic -beaming algorithm. For example, the autobeamer will not put beams -over rests or bar lines, and in choral scores the beaming is -often set to follow the meter of the lyrics rather than the -notes. Such beams can be specified manually by -marking the begin and end point with @code{[} and @code{]} - -@lilypond[quote,relative=1,verbatim] -{ - r4 r8[ g' a r8] r8 g[ | a] r8 -} -@end lilypond - - -@funindex \noBeam -@funindex noBeam - -Individual notes may be marked with @code{\noBeam} to prevent them -from being beamed: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c\noBeam c c -@end lilypond - -@funindex stemLeftBeamCount -@funindex stemRightBeamCount - -Even more strict manual control with the beams can be achieved by -setting the properties @code{stemLeftBeamCount} and -@code{stemRightBeamCount}. They specify the number of beams to -draw on the left and right side, respectively, of the next note. -If either property is set, its value will be used only once, and -then it is erased. In this example, the last @code{f} is printed -with only one beam on the left side, i.e., the eighth-note beam of -the group as a whole. - -@lilypond[quote,relative=2,verbatim] -a8[ r16 f g a] -a8[ r16 -\set stemLeftBeamCount = #2 -\set stemRightBeamCount = #1 -f -\set stemLeftBeamCount = #1 -g a] -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{flat-flags-and-beam-nibs.ly} - -@node Feathered beams -@unnumberedsubsubsec Feathered beams - -@cindex beams, feathered - -@funindex \featherDurations -@funindex featherDurations -@funindex grow-direction - -Feathered beams are used to indicate that a small group of notes -should be played at an increasing (or decreasing) tempo, without -changing the overall tempo of the piece. The extent of the -feathered beam must be indicated manually using @code{[} and -@code{]}, and the beam feathering is turned on by specifying a -direction to the @code{Beam} property @code{grow-direction}. - -If the placement of the notes and the sound in the MIDI output -is to reflect the ritardando or accelerando indicated by the -feathered beam the notes must be grouped as a -music expression delimited by braces and preceded by a -@code{featheredDurations} command which specifies the ratio -between the durations of the first and last notes in the group. - -The square brackets show the extent of the beam and the braces show -which notes are to have their durations modified. Normally these -would delimit the same group of notes, but this is not required: the -two commands are independent. - -In the following example the eight 16th notes occupy exactly the -same time as a half note, but the first note is one half as long -as the last one, with the intermediate notes gradually -lengthening. The first four 32nd notes gradually speed up, while -the last four 32nd notes are at a constant tempo. - -@lilypond[relative=1,verbatim,quote] -\override Beam #'grow-direction = #LEFT -\featherDurations #(ly:make-moment 2 1) -{ c16[ c c c c c c c] } -\override Beam #'grow-direction = #RIGHT -\featherDurations #(ly:make-moment 2 3) -{ c32[ d e f] } -% revert to non-feathered beams -\override Beam #'grow-direction = #'() -{ g32[ a b c] } -@end lilypond - -@noindent -The spacing in the printed output represents the -note durations only approximately, but the MIDI output is exact. - -@knownissues - -The @code{\featherDurations} command only works with very short -music snippets, and when numbers in the fraction are small. - - -@seealso -Snippets: -@rlsr{Rhythms}. - - -@node Bars -@subsection Bars - - -@menu -* Bar lines:: -* Bar numbers:: -* Bar and bar number checks:: -* Rehearsal marks:: -@end menu - -@node Bar lines -@unnumberedsubsubsec Bar lines - -@cindex bar lines -@cindex measure lines -@cindex repeat bars - -@funindex \bar -@funindex bar - -Bar lines delimit measures, and are also used to indicate -repeats. Normally, simple bar lines are automatically inserted -into the printed output at places based on the current time -signature. - -The simple bar lines inserted automatically can be changed to -other types with the @code{\bar} command. For example, a closing -double bar line is usually placed at the end of a piece: - -@lilypond[quote,relative=1,verbatim] -e4 d c2 \bar "|." -@end lilypond - -It is not invalid if the final note in a measure does not -end on the automatically entered bar line: the note is assumed -to carry over into the next measure. But if a long sequence -of such carry-over measures appears the music can appear compressed -or even flowing off the page. This is because automatic line -breaks happen only at the end of complete measures, i.e., where -all notes end before the end of a measure. - -@warning{An incorrect duration can cause line breaks to be -inhibited, leading to a line of highly compressed music or -music which flows off the page.} - -@cindex line breaks -@cindex bar lines, invisible -@cindex measure lines, invisible - -Line breaks are also permitted at manually inserted bar lines -even within incomplete measures. To allow a line break without -printing a bar line, use - -@example -\bar "" -@end example - -@noindent -This will insert an invisible bar line and allow (but not -force) a line break to occur at this point. The bar number -counter is not increased. To force a line break see -@ref{Line breaking}. - -@cindex manual bar lines -@cindex manual measure lines -@cindex bar lines, manual -@cindex measure lines, manual - -This and other special bar lines may be inserted manually at any -point. When they coincide with the end of a measure they replace the -simple bar line which would have been inserted there automatically. -When they do not coincide with the end of a measure the specified bar -line is inserted at that point in the printed output. Such insertions -do not affect the calculation and placement of subsequent automatic -bar lines. - -The simple bar line and five types of double bar line are available -for manual insertion: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|" g \bar "||" a \bar ".|" b \bar ".|." c \bar "|.|" d \bar "|." e -@end lilypond - -@noindent -together with dotted and dashed bar lines: - -@lilypond[quote,relative=1,verbatim] -f1 \bar ":" g \bar "dashed" a -@end lilypond - -@noindent -and five types of repeat bar line: - -@lilypond[quote,relative=1,verbatim] -f1 \bar "|:" g \bar ":|:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|" d -@end lilypond - -@cindex repeats - -Although the bar line types signifying repeats may be inserted -manually they do not in themselves cause LilyPond to recognize -a repeated section. Such repeated sections are better entered -using the various repeat commands (see @ref{Repeats}), which -automatically print the appropriate bar lines. - -In addition, you can specify @code{"||:"}, which is equivalent to -@code{"|:"} except at line breaks, where it gives a double bar -line at the end of the line and a start repeat at the beginning of -the next line. - -@lilypond[quote,relative=2,verbatim] -\override Score.RehearsalMark #'padding = #3 -c c c c -\bar "||:" -c c c c \break -\bar "||:" -c c c c -@end lilypond - -In scores with many staves, a @code{\bar} command in one staff is -automatically applied to all staves. The resulting bar lines are -connected between different staves of a @code{StaffGroup}, -@code{PianoStaff}, or @code{GrandStaff}. - -@lilypond[quote,fragment,verbatim] -<< - \new StaffGroup << - \new Staff { - e'4 d' - \bar "||" - f' e' - } - \new Staff { \clef bass c4 g e g } - >> - \new Staff { \clef bass c2 c2 } ->> -@end lilypond - - -@snippets - -@funindex whichBar -@funindex defaultBarType -@funindex \bar -@funindex bar -@funindex bartype - -The command @code{\bar }@var{bartype} is a shortcut for -@code{\set Timing.whichBar = }@var{bartype}. A bar line is -created whenever the @code{whichBar} property is -set. - -The default bar type used for automatically inserted bar lines is -@code{"|"}. This may be changed at any time -with @code{\set Timing.defaultBarType = }@var{bartype}. - - -@seealso -Notation Reference: -@ref{Line breaking}, -@ref{Repeats}, -@ref{Grouping staves}. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{BarLine} (created at -@rinternals{Staff} level), @rinternals{SpanBar} (across -staves), @rinternals{Timing_translator} (for Timing -properties). - - -@node Bar numbers -@unnumberedsubsubsec Bar numbers - -@cindex bar numbers -@cindex measure numbers -@cindex numbers, bar -@cindex numbers, measure - -@funindex currentBarNumber - -Bar numbers are typeset by default at the start of every line except -the first line. The number itself is stored in the -@code{currentBarNumber} property, which is normally updated -automatically for every measure. It may also be set manually: - -@lilypond[verbatim,quote,fragment,relative=1] -c1 c c c -\break -\set Score.currentBarNumber = #50 -c1 c c c -@end lilypond - - -@snippets - -@cindex bar numbers, regular spacing - -@funindex barNumberVisibility - -@c Uncomment this after next LSR update. -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {printing-the-bar-number-for-the-first-measure.ly} - -Bar numbers can be typeset at regular intervals instead of just at -the beginning of every line. To do this the default behavior -must be overridden to permit bar numbers to be printed at places -other than the start of a line. This is controlled by the -@code{break-visibility} property of @code{BarNumber}. This takes -three values which may be set to @code{#t} or @code{#f} to specify -whether the corresponding bar number is visible or not. The order -of the three values is @code{end of line visible}, @code{middle of -line visible}, @code{beginning of line visible}. In the following -example bar numbers are printed at all possible places: - -@lilypond[verbatim,quote,relative=1] -\override Score.BarNumber #'break-visibility = #'#(#t #t #t) -\set Score.currentBarNumber = #11 -\bar "" % Permit first bar number to be printed -c1 c c c -\break -c c c c -@end lilypond - -@c All the rest of these examples will be added to LSR -@c and moved into the Snippets. -gp - -@noindent -and here the bar numbers are printed every two measures -except at the end of the line: - -@lilypond[verbatim,quote,relative=1] -\override Score.BarNumber #'break-visibility = #'#(#f #t #t) -\set Score.currentBarNumber = #11 -\bar "" % Permit first bar number to be printed -% Print a bar number every second measure -\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) -c1 c c c c -\break -c c c c c -@end lilypond - -@cindex measure number, format -@cindex bar number, format - -The size of the bar number may be changed. This is illustrated -in the following example, which also shows how to enclose bar -numbers in boxes and circles, and shows an alternative way -of specifying @code{#(#f #t #t)} for @code{break-visibility}. - -@lilypond[verbatim,quote,relative=1] -% Prevent bar numbers at the end of a line and permit them elsewhere -\override Score.BarNumber #'break-visibility - = #end-of-line-invisible - -% Increase the size of the bar number by 2 -\override Score.BarNumber #'font-size = #2 -\repeat unfold 3 { c1 } \bar "|" - -% Draw a box round the following bar number(s) -\override Score.BarNumber #'stencil - = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) -\repeat unfold 3 { c1 } \bar "|" - -% Draw a circle round the following bar number(s) -\override Score.BarNumber #'stencil - = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) -\repeat unfold 4 { c1 } \bar "|." -@end lilypond - -@cindex bar number alignment - -Bar numbers by default are left-aligned to their parent object. -This is usually the left edge of a line or, if numbers are printed -within a line, the left bar line of the measure. The numbers may also -be positioned directly on the bar line or right-aligned to the -bar line: - -@lilypond[verbatim,quote,relative=1] -\set Score.currentBarNumber = #111 -\override Score.BarNumber #'break-visibility = #'#(#t #t #t) -% Increase the size of the bar number by 2 -\override Score.BarNumber #'font-size = #2 -% Print a bar number every second measure -\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) -c1 c1 -% Center-align bar numbers -\override Score.BarNumber #'self-alignment-X = #0 -c1 c1 -% Right-align bar numbers -\override Score.BarNumber #'self-alignment-X = #-1 -c1 c1 -@end lilypond - -Bar numbers can be removed entirely by removing the -@code{Bar_number_engraver} from the @code{Score} context. - -@lilypond[verbatim,quote] -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} -\relative c''{ - c4 c c c \break - c4 c c c -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{BarNumber}. - - -@cindex bar number collision -@cindex collision, bar number - -@knownissues - -Bar numbers may collide with the top of the -@rinternals{StaffGroup} bracket, if there is one. To solve -this, the @code{padding} property of @rinternals{BarNumber} can -be used to position the number correctly. - - - -@node Bar and bar number checks -@unnumberedsubsubsec Bar and bar number checks - -@cindex bar check -@cindex bar number check -@cindex measure check -@cindex measure number check - -@funindex barCheckSynchronize -@funindex | - -Bar checks help detect errors in the entered durations. A bar check -may be entered using the bar symbol, @code{|}, at any place where a -bar line is expected to fall. If bar check lines are encountered at -other places, a list of warnings is printed in the log file, showing -the line numbers and lines in which the bar checks failed. In the -next example, the second bar check will signal an error. - -@example -\time 3/4 c2 e4 | g2 | -@end example - -Bar checks can also be used in lyrics, for example - -@example -\lyricmode @{ - \time 2/4 - Twin -- kle | Twin -- kle | -@} -@end example - -An incorrect duration can result in a completely garbled score, -especially if the score is polyphonic, so a good place to start -correcting input is by scanning for failed bar checks and -incorrect durations. - -If successive bar checks are off by the same musical interval, -only the first warning message is displayed. This allows the -warning to focus on the source of the timing error. - - -@funindex | -@funindex pipeSymbol - -It is also possible to redefine the action taken when a bar check -or pipe symbol, @code{|}, is encountered in the input, so that -it does something other than a bar check. This is done by -assigning a music expression to @code{pipeSymbol}. -In the following example @code{|} is set to insert a double bar -line wherever it appears in the input, rather than checking -for end of bar. - -@lilypond[quote,verbatim] -pipeSymbol = \bar "||" -{ - c'2 c'2 | - c'2 c'2 - c'2 | c'2 - c'2 c'2 -} -@end lilypond - -@funindex \barNumberCheck -@funindex barNumberCheck - -When copying large pieces of music, it can be helpful to check -that the LilyPond bar number corresponds to the original that you -are entering from. This can be checked with -@code{\barNumberCheck}, for example, - -@verbatim -\barNumberCheck #123 -@end verbatim - -@noindent -will print a warning if the @code{currentBarNumber} is not 123 -when it is processed. - - -@seealso -Snippets: -@rlsr{Rhythms}. - - -@node Rehearsal marks -@unnumberedsubsubsec Rehearsal marks - -@cindex rehearsal marks -@cindex mark, rehearsal - -@funindex \mark -@funindex mark - -To print a rehearsal mark, use the @code{\mark} command - -@lilypond[quote,verbatim,relative=2] -c1 \mark \default -c1 \mark \default -c1 \mark #8 -c1 \mark \default -c1 \mark \default -@end lilypond - -@noindent -The letter@tie{}@q{I} is skipped in accordance with engraving -traditions. If you wish to include the letter @q{I}, then use - -@example -\set Score.markFormatter = #format-mark-alphabet -@end example - -The mark is incremented automatically if you use @code{\mark -\default}, but you can also use an integer argument to set the -mark manually. The value to use is stored in the property -@code{rehearsalMark}. - -@cindex rehearsal mark format -@cindex rehearsal mark style -@cindex style, rehearsal mark -@cindex format, rehearsal mark -@cindex mark, rehearsal, style -@cindex mark, rehearsal, format -@cindex rehearsal mark, manual -@cindex mark, rehearsal, manual -@cindex custom rehearsal mark - -The style is defined by the property @code{markFormatter}. It is -a function taking the current mark (an integer) and the current -context as argument. It should return a markup object. In the -following example, @code{markFormatter} is set to a pre-defined -procedure. After a few measures, it is set to a procedure that -produces a boxed number. - -@lilypond[quote,verbatim,relative=2] -\set Score.markFormatter = #format-mark-numbers -c1 \mark \default -c1 \mark \default -\set Score.markFormatter = #format-mark-box-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-numbers -c1 \mark \default -\set Score.markFormatter = #format-mark-circle-letters -c1 -@end lilypond - -The file @file{scm/@/translation@/-functions@/.scm} contains the -definitions of @code{format-mark-numbers} (the default format), -@code{format-mark-box-numbers}, @code{format-mark-letters} and -@code{format-mark-box-letters}. These can be used as inspiration -for other formatting functions. - -You may use @code{format-mark-barnumbers}, -@code{format-mark-box-barnumbers}, and -@code{format-mark-circle-barnumbers} to get bar numbers instead of -incremented numbers or letters. - -Other styles of rehearsal mark can be specified manually - -@example -\mark "A1" -@end example - -@noindent -@code{Score.markFormatter} does not affect marks specified in this -manner. However, it is possible to apply a @code{\markup} to the -string. - -@example -\mark \markup@{ \box A1 @} -@end example - -@cindex segno -@cindex coda -@cindex D.S al Fine -@cindex fermata -@cindex music glyphs -@cindex glyphs, music - -@funindex \musicglyph -@funindex musicglyph - -Music glyphs (such as the segno sign) may be printed inside a -@code{\mark} - -@lilypond[quote,verbatim,relative=1] -c1 \mark \markup { \musicglyph #"scripts.segno" } -c1 \mark \markup { \musicglyph #"scripts.coda" } -c1 \mark \markup { \musicglyph #"scripts.ufermata" } -c1 -@end lilypond - -@noindent -See @ref{The Feta font}, for a list of symbols which may be -printed with @code{\musicglyph}. - -For common tweaks to the positioning of rehearsal marks, see -@ref{Formatting text}. - - -@seealso -Notation Reference: -@ref{The Feta font}, -@ref{Formatting text}. - -Installed Files: -@file{scm/@/translation@/-functions@/.scm} contains -the definition of @code{format-mark-numbers} and -@code{format-mark-letters}. They can be used as inspiration for -other formatting functions. - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{RehearsalMark}. - - -@node Special rhythmic concerns -@subsection Special rhythmic concerns - - -@menu -* Grace notes:: -* Aligning to cadenzas:: -* Time administration:: -@end menu - -@node Grace notes -@unnumberedsubsubsec Grace notes - -@cindex ornaments -@cindex grace notes -@cindex appoggiatura -@cindex acciaccatura - -@funindex \grace -@funindex grace - -Grace notes are ornaments that are written out. Grace notes -are printed in a smaller font and take up no logical time -in a measure. - -@lilypond[quote,relative=2,verbatim] -c4 \grace c16 c4 -\grace { c16[ d16] } c2 -@end lilypond - -Lilypond also supports two special types of grace notes, the -@emph{acciaccatura}--an unmeasured grace note indicated by a slurred -small note with a slashed stem--and the @emph{appoggiatura}, which -takes a fixed fraction of the main note and appears in small print -without a slash. - -@lilypond[quote,relative=2,verbatim] -\grace c8 b4 -\acciaccatura d8 c4 -\appoggiatura e8 d4 -\acciaccatura { g16[ f] } e4 -@end lilypond - -The placement of grace notes is synchronized between different -staves. In the following example, there are two sixteenth grace -notes for every eighth grace note - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e2 \grace { c16[ d e f] } e2 } - \new Staff { c2 \grace { g8[ b] } c2 } >> -@end lilypond - -@cindex grace notes, following - -@funindex \afterGrace -@funindex afterGrace - -If you want to end a note with a grace, use the @code{\afterGrace} -command. It takes two arguments: the main note, and the grace -notes following the main note. - -@lilypond[quote,verbatim,relative=2] -c1 \afterGrace d1 { c16[ d] } c1 -@end lilypond - -This will put the grace notes after a space lasting 3/4 of the -length of the main note. The default fraction 3/4 can be changed by -setting @code{afterGraceFraction}. The following example shows -the results from setting the space at the default, at 15/16, and -finally at 1/2 of the main note. - -@lilypond[quote,verbatim,relative=2] -<< - \new Staff { - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 15 16)) - c1 \afterGrace d1 { c16[ d] } c1 - } - \new Staff { - #(define afterGraceFraction (cons 1 2)) - c1 \afterGrace d1 { c16[ d] } c1 - } ->> -@end lilypond - -The space between the main note and the grace note may also be -specified using spacers. The following example places the grace -note after a space lasting 7/8 of the main note. - -@lilypond[quote,verbatim,relative=2] -\new Voice { - << { d1^\trill_( } - { s2 s4. \grace { c16[ d] } } >> - c1) -} -@end lilypond - -A @code{\grace} music expression will introduce special -typesetting settings, for example, to produce smaller type, and -set directions. Hence, when introducing layout tweaks to -override the special settings, they should be placed inside -the grace expression. The overrides should also be reverted -inside the grace expression. Here, the grace note's default stem -direction is overriden and then reverted. - -@lilypond[quote,verbatim,relative=2] -\new Voice { - \acciaccatura { - \stemDown - f16-> - \stemNeutral - } - g4 e c2 -} -@end lilypond - - -@cindex stem, with slash - - -@snippets - -The slash through the stem found in @emph{acciaccatura}s can be applied -in other situations: - -@lilypond[quote,verbatim,relative=2] -\relative c'' { - \override Stem #'stroke-style = #"grace" - c8( d2) e8( f4) -} -@end lilypond - -The layout of grace expressions can be changed throughout the -music using the function @code{add-grace-property}. The following -example undefines the @code{Stem} direction for this grace, so -that stems do not always point up. - -@lilypond[quote,verbatim,relative=2] -\relative c'' { - \new Staff { - #(add-grace-property 'Voice 'Stem 'direction ly:stem::calc-direction) - #(remove-grace-property 'Voice 'Stem 'direction) - \new Voice { - \acciaccatura { f16 } g4 - \grace { d16[ e] } f4 - \appoggiatura { a,32[ b c d] } e2 - } - } -} -@end lilypond - -Another option is to change the variables @code{startGraceMusic}, -@code{stopGraceMusic}, @code{startAcciaccaturaMusic}, -@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic}, -@code{stopAppoggiaturaMusic}. The default values of these can be -seen in the file @code{ly/@/grace@/-init@/.ly}. By redefining -them other effects may be obtained. - -Grace notes may be forced to align with regular notes -in other staves: - -@lilypond[verbatim,quote] -\relative c'' { - << - \override Score.SpacingSpanner #'strict-grace-spacing = ##t - \new Staff { - c4 - \afterGrace c4 { c16[ c8 c16] } - c4 r - } - \new Staff { - c16 c c c c c c c c4 r - } - >> -} -@end lilypond - - -@seealso -Music Glossary: -@rglos{grace notes}, -@rglos{acciaccatura}, -@rglos{appoggiatura}. - -Installed Files: @file{ly/@/grace@/-init@/.ly}. - -Snippets: @rlsr{Rhythms}. - -Internals Reference: @rinternals{GraceMusic}. - - -@knownissues - -A multi-note beamed @i{acciaccatura} is printed without a slash, -and looks exactly the same as a multi-note beamed -@i{appoggiatura}. - -@c TODO Add link to LSR snippet to add slash when available - -Grace note synchronization can also lead to surprises. Staff -notation, such as key signatures, bar lines, etc., are also -synchronized. Take care when you mix staves with grace notes and -staves without, for example, - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e4 \bar "|:" \grace c16 d2. } - \new Staff { c4 \bar "|:" d2. } >> -@end lilypond - -@noindent -This can be remedied by inserting grace skips of the corresponding -durations in the other staves. For the above example - -@lilypond[quote,relative=2,verbatim] -<< \new Staff { e4 \bar "|:" \grace c16 d2. } - \new Staff { c4 \bar "|:" \grace s16 d2. } >> -@end lilypond - -Grace sections should only be used within sequential music -expressions. Nesting or juxtaposing grace sections is not -supported, and might produce crashes or other errors. - -@node Aligning to cadenzas -@unnumberedsubsubsec Aligning to cadenzas - -@cindex cadenza -@cindex cadenza, aligning to -@cindex aligning to cadenza - -In an orchestral context, cadenzas present a special problem: when -constructing a score that includes a measured cadenza or other solo -passage, all other instruments should skip just as many notes as the -length of the cadenza, otherwise they will start too soon or too late. - -One solution to this problem is to use the functions -@code{mmrest-of-length} and @code{skip-of-length}. These Scheme -functions take a defined piece of music as an argument and generate a -multi-measure rest or @code{\skip} exactly as long as the piece. - -@lilypond[verbatim,quote] -MyCadenza = \relative c' { - c4 d8 e f g g4 - f2 g4 g -} - -\new GrandStaff << - \new Staff { - \MyCadenza c'1 - \MyCadenza c'1 - } - \new Staff { - #(ly:export (mmrest-of-length MyCadenza)) - c'1 - #(ly:export (skip-of-length MyCadenza)) - c'1 - } ->> -@end lilypond - - -@seealso -Music Glossary: -@rglos{cadenza}. - -Snippets: -@rlsr{Rhythms}. - - -@node Time administration -@unnumberedsubsubsec Time administration - -@cindex time administration -@cindex timing (within the score) -@cindex music, unmetered -@cindex unmetered music - -@funindex currentBarNumber -@funindex measurePosition -@funindex measureLength - -Time is administered by the @code{Timing_translator}, which by -default is to be found in the @code{Score} context. An alias, -@code{Timing}, is added to the context in which the -@code{Timing_translator} is placed. - -The following properties of @code{Timing} are used -to keep track of timing within the score. - -@cindex bar number -@cindex measure number - -@table @code -@item currentBarNumber -The current measure number. For an example showing the -use of this property see @ref{Bar numbers}. - -@item measureLength -The length of the measures in the current time signature. For a -4/4 time this is@tie{}1, and for 6/8 it is 3/4. Its value -determines when bar lines are inserted and how automatic beams -should be generated. - -@item measurePosition -The point within the measure where we currently are. This -quantity is reset by subtracting @code{measureLength} whenever -@code{measureLength} is reached or exceeded. When that happens, -@code{currentBarNumber} is incremented. - -@item timing -If set to true, the above variables are updated for every time -step. When set to false, the engraver stays in the current -measure indefinitely. - -@end table - -Timing can be changed by setting any of these variables -explicitly. In the next example, the default 4/4 time -signature is printed, but @code{measureLength} is set to 5/4. -At 4/8 through the third measure, the @code{measurePosition} is -advanced by 1/8 to 5/8, shortening that bar by 1/8. -The next bar line then falls at 9/8 rather than 5/4. - -@lilypond[quote,verbatim,relative=1] -\set Score.measureLength = #(ly:make-moment 5 4) -c1 c4 -c1 c4 -c4 c4 -\set Score.measurePosition = #(ly:make-moment 5 8) -b4 b4 b8 -c4 c1 -@end lilypond - -@noindent -As the example illustrates, @code{ly:make-moment n m} constructs a -duration of n/m of a whole note. For example, -@code{ly:make-moment 1 8} is an eighth note duration and -@code{ly:make-moment 7 16} is the duration of seven sixteenths -notes. - - -@seealso -This manual: @ref{Bar numbers}, @ref{Unmetered music} - -Snippets: -@rlsr{Rhythms}. - -Internals Reference: @rinternals{Timing_translator}, -@rinternals{Score} - diff --git a/Documentation/user/running.itely b/Documentation/user/running.itely deleted file mode 100644 index 1864615a52..0000000000 --- a/Documentation/user/running.itely +++ /dev/null @@ -1,686 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Running LilyPond -@chapter Running LilyPond - -This chapter details the technicalities of running LilyPond. - -@menu -* Normal usage:: -* Command-line usage:: -* Error messages:: -* Updating files with convert-ly:: -* Reporting bugs:: -@end menu - - -@node Normal usage -@section Normal usage - -Most users run LilyPond through a GUI; see @rlearning{First steps} if -you have not read this already. - - -@node Command-line usage -@section Command-line usage - -This section contains extra information about using LilyPond on the -command-line. This may be desirable to pass extra options to the -program. In addition, there are certain extra @q{helper} programs (such -as @code{midi2ly}) which are only available on the command-line. - -By @q{command-line}, we mean the command line in the operating system. -Windows users might be more familiar with the terms @q{DOS shell} or -@q{command shell}; MacOS@tie{}X users might be more familiar with the terms -@q{terminal} or @q{console}. They should also consult @ref{Setup -for MacOS X}. - -Describing how to use this part of an operating system is outside the -scope of this manual; please consult other documentation on this topic -if you are unfamiliar with the command-line. - -@menu -* Invoking lilypond:: -* Command line options for lilypond:: -* Environment variables:: -@end menu - -@node Invoking lilypond -@subsection Invoking @command{lilypond} - -@cindex Invoking @command{lilypond} -@cindex command line options for @command{lilypond} -@cindex options, command line -@cindex switches - - -The @command{lilypond} executable may be called as follows from the command line. - -@example -lilypond [@var{option}]@dots{} @var{file}@dots{} -@end example - - -When invoked with a filename that has no extension, the @file{.ly} -extension is tried first. To read input from stdin, use a -dash (@code{-}) for @var{file}. - -When @file{filename.ly} is processed it will produce @file{filename.ps} -and @file{filename.pdf} as output. Several files can be specified; -they will each be processed independently. @footnote{The status of -GUILE is not reset after processing a @code{.ly} file, so be careful -not to change any system defaults from within Scheme.} - -If @file{filename.ly} contains more than one @code{\score} -block, then the rest of the scores will be output in numbered files, -starting with @file{filename-1.pdf}. In addition, the value of -@code{output-suffix} will be inserted between the basename and the -number. An input file containing - -@example -#(define output-suffix "violin") -\score @{ @dots{} @} -#(define output-suffix "cello") -\score @{ @dots{} @} -@end example - -@noindent -will output @var{base}@file{-violin.pdf} and -@var{base}@file{-cello-1.pdf}. - - -@node Command line options for lilypond -@subsection Command line options for @command{lilypond} - -The following options are supported: - -@table @code - -@item -e,--evaluate=@var{expr} -Evaluate the Scheme @var{expr} before parsing any @file{.ly} files. -Multiple @code{-e} options may be given, they will be evaluated -sequentially. - -The expression will be evaluated in the @code{guile-user} module, so -if you want to use definitions in @var{expr}, use - -@example -lilypond -e '(define-public a 42)' -@end example - -@noindent -on the command-line, and include - -@example -#(use-modules (guile-user)) -@end example - -@noindent -at the top of the @code{.ly} file. - -@item -f,--format=@var{format} -which formats should be written. Choices for @code{format} are -@code{svg}, @code{ps}, @code{pdf}, and @code{png}. - -Example: @code{lilypond -fpng @var{filename}.ly} - - - -@item -d,--define-default=@var{var}=@var{val} -This sets the internal program option @var{var} to the Scheme value -@var{val}. If @var{val} is not supplied, then @var{#t} is used. To -switch off an option, @code{no-} may be prefixed to @var{var}, e.g. - -@cindex point and click, command line - -@example --dno-point-and-click -@end example - -@noindent -is the same as -@example --dpoint-and-click='#f' -@end example - -Here are a few interesting options. - -@table @samp -@item help -Running @code{lilypond -dhelp} will print all of the @code{-d} options -available. - -@item paper-size -This option sets the default paper-size, -@example --dpaper-size=\"letter\" -@end example - -@noindent -Note that the string must be enclosed in escaped quotes ( @code{\"} ). -@c Match " in previous line to help context-sensitive editors - -@item safe -Do not trust the @code{.ly} input. - -When LilyPond formatting is available through a web server, either the -@code{--safe} or the @code{--jail} option @b{MUST} be passed. The -@code{--safe} option will prevent inline Scheme code from wreaking -havoc, for example - -@quotation -@verbatim -#(system "rm -rf /") -{ - c4^#(ly:export (ly:gulp-file "/etc/passwd")) -} -@end verbatim -@end quotation - -The @code{-dsafe} option works by evaluating in-line Scheme -expressions in a special safe module. This safe module is derived from -GUILE @file{safe-r5rs} module, but adds a number of functions of the -LilyPond API. These functions are listed in @file{scm/@/safe@/-lily@/.scm}. - -In addition, safe mode disallows @code{\include} directives and -disables the use of backslashes in @TeX{} strings. - -In safe mode, it is not possible to import LilyPond variables -into Scheme. - -@code{-dsafe} does @emph{not} detect resource overuse. It is still possible to -make the program hang indefinitely, for example by feeding cyclic data -structures into the backend. Therefore, if using LilyPond on a -publicly accessible webserver, the process should be limited in both -CPU and memory usage. - -The safe mode will prevent many useful LilyPond snippets from being -compiled. The @code{--jail} is a more secure alternative, but -requires more work to set up. - -@cindex output format, setting -@item backend -the output format to use for the back-end. Choices for @code{format} are -@table @code -@item ps -@cindex PostScript output - for PostScript. - - Postscript files include TTF, Type1 and OTF fonts. No subsetting of - these fonts is done. When using oriental character sets, this can - lead to huge files. - -@item eps - for encapsulated PostScript. This dumps every page (system) as a separate -@file{EPS} file, without fonts, and as one collated @file{EPS} file with -all pages (systems) including fonts. - -This mode is used by default by @command{lilypond-book}. - -@item svg -@cindex SVG (Scalable Vector Graphics) - for SVG (Scalable Vector Graphics). This dumps every page as a separate -@file{SVG} file, with embedded fonts. - You need a SVG viewer which supports embedded fonts, or a SVG - viewer which is able to replace the embedded fonts with OTF fonts. - Under UNIX, you may use @uref{http://www.inkscape.org,Inkscape} - (version 0.42 or later), after copying the OTF fonts from the LilyPond directory - (typically @file{/usr/share/lilypond/VERSION/fonts/otf/}) to @file{~/.fonts/}. -@item scm -@cindex Scheme dump - for a dump of the raw, internal Scheme-based drawing commands. - -@item null - do not output a printed score; has the same effect as @code{-dno-print-pages}. -@end table - -Example: @code{lilypond -dbackend=svg @var{filename}.ly} - -@item preview -Generate an output file containing the titles and the first system - -@item print-pages -Generate the full pages, the default. @code{-dno-print-pages} is -useful in combination with @code{-dpreview}. - -@end table - - - -@item -h,--help -Show a summary of usage. - -@item -H,--header=@var{FIELD} -Dump a header field to file @file{BASENAME.@var{FIELD}}. - -@item --include, -I=@var{directory} -Add @var{directory} to the search path for input files. -@cindex file searching -@cindex search path - -@item -i,--init=@var{file} -Set init file to @var{file} (default: @file{init.ly}). - -@item -o,--output=@var{FILE} -Set the default output file to @var{FILE}. The appropriate -suffix will be added (e.g. @code{.pdf} for pdf) - -@item --ps -Generate PostScript. - -@item --png -Generate pictures of each page, in PNG format. This implies -@code{--ps}. The resolution in DPI of the image may be set with -@example --dresolution=110 -@end example - -@item --pdf -Generate PDF. This implies @code{--ps}. - - - -@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir} -Run @command{lilypond} in a chroot jail. - -The @code{--jail} option provides a more flexible alternative to -@code{--safe} when LilyPond formatting is available through a web -server or whenever LilyPond executes externally provided -sources. - -The @code{--jail} option works by changing the root of @command{lilypond} to -@var{jail} just before starting the actual compilation process. The user -and group are then changed to match those provided, and the current -directory is changed to @var{dir}. This setup guarantees that it is not -possible (at least in theory) to escape from the jail. Note that for -@code{--jail} to work @command{lilypond} must be run as root, which is usually -accomplished in a safe way using @command{sudo}. - -Setting up a jail is a slightly delicate matter, as we must be sure that -LilyPond is able to find whatever it needs to compile the source -@emph{inside the jail}. A typical setup comprises the following items: - -@table @asis -@item Setting up a separate filesystem -A separate filesystem should be created for LilyPond, so that it can be -mounted with safe options such as @code{noexec}, @code{nodev}, and -@code{nosuid}. In this way, it is impossible to run executables or to -write directly to a device from LilyPond. If you do not want to create a -separate partition, just create a file of reasonable size and use it to -mount a loop device. A separate filesystem also guarantees that LilyPond -cannot write more space than it is allowed. - -@item Setting up a separate user -A separate user and group (say, @code{lily}/@code{lily}) with low -privileges should be used to run LilyPond inside the jail. There should -be a single directory writable by this user, which should be passed in -@var{dir}. - -@item Preparing the jail -LilyPond needs to read a number of files while running. All these files -are to be copied into the jail, under the same path they appear in the -real root filesystem. The entire content of the LilyPond installation -(e.g., @file{/usr/share/lilypond}) -should be copied. - -If problems arise, the simplest way to trace them down is to run -LilyPond using @command{strace}, which will allow you to determine which -files are missing. - -@item Running LilyPond -In a jail mounted with @code{noexec} it is impossible to execute any external -program. Therefore LilyPond must be run with a backend that does not -require any such program. As we already mentioned, it must be also run -with superuser privileges (which, of course, it will lose immediately), -possibly using @command{sudo}. It is a good idea to limit the number of -seconds of CPU time LilyPond can use (e.g., using @command{ulimit --t}), and, if your operating system supports it, the amount of memory -that can be allocated. -@end table - - -@item -v,--version -Show version information. - -@item -V,--verbose -Be verbose: show full paths of all files read, and give timing -information. - -@item -w,--warranty -Show the warranty with which GNU LilyPond comes. (It comes with -@strong{NO WARRANTY}!) -@end table - -@node Environment variables -@subsection Environment variables - - -@cindex LANG -@cindex LILYPOND_DATADIR - -@command{lilypond} recognizes the following environment variables: -@table @code -@item LILYPOND_DATADIR -This specifies a directory where locale messages and -data files will be looked up by default. The directory should contain -subdirectories called @file{ly/}, @file{ps/}, @file{tex/}, etc. - -@item LANG -This selects the language for the warning messages. - -@item LILYPOND_GC_YIELD -With this variable the memory footprint and performance can be -adjusted. It is a percentage tunes memory management behavior. With -higher values, the program uses more memory, with smaller values, it -uses more CPU time. The default value is @code{70}. - -@end table - - -@node Error messages -@section Error messages - -@cindex error messages -Different error messages can appear while compiling a file: - -@table @emph - -@item Warning -@cindex warning -Something looks suspect. If you are requesting something out of the -ordinary then you will understand the message, and can ignore it. -However, warnings usually indicate that something is wrong with the -input file. - -@item Error -Something is definitely wrong. The current processing step (parsing, -interpreting, or formatting) will be finished, but the next step will -be skipped. - -@item Fatal error -@cindex error -@cindex fatal error -Something is definitely wrong, and LilyPond cannot continue. This -happens rarely. The most usual cause is misinstalled fonts. - -@item Scheme error -@cindex trace, Scheme -@cindex call trace -@cindex Scheme error -Errors that occur while executing Scheme code are caught by the Scheme -interpreter. If running with the verbose option (@code{-V} or -@code{--verbose}) then a call trace of the offending -function call is printed. - -@item Programming error -@cindex Programming error -There was some internal inconsistency. These error messages are -intended to help the programmers and debuggers. Usually, they can be -ignored. Sometimes, they come in such big quantities that they obscure -other output. - -@item Aborted (core dumped) -This signals a serious programming error that caused the program to -crash. Such errors are considered critical. If you stumble on one, -send a bug-report. -@end table - -@cindex errors, message format -If warnings and errors can -be linked to some part of the input file, then error messages have the -following form - -@example -@var{filename}:@var{lineno}:@var{columnno}: @var{message} -@var{offending input line} -@end example - -A line-break is inserted in the offending line to indicate the column -where the error was found. For example, - -@example -test.ly:2:19: error: not a duration: 5 - @{ c'4 e' - 5 g' @} -@end example - -These locations are LilyPond's best guess about where the warning or -error occurred, but (by their very nature) warnings and errors occur -when something unexpected happens. If you can't see an error in the -indicated line of your input file, try checking one or two lines -above the indicated position. - - -@node Updating files with convert-ly -@section Updating files with @command{convert-ly} - -@cindex Updating a LilyPond file -@cindex convert-ly - -The LilyPond input syntax is routinely changed to simplify it or improve -it in different ways. As a side effect of this, the LilyPond interpreter -often is no longer compatible with older input files. To remedy this, -the program @command{convert-ly} can be used to deal with most of the -syntax changes between LilyPond versions. - -@menu -* Invoking convert-ly:: -* Command line options for convert-ly:: -* Problems with convert-ly:: -@end menu - -@node Invoking convert-ly -@subsection Invoking @command{convert-ly} - -@command{convert-ly} uses @code{\version} statements in the input -file to detect the old version number. In most cases, to upgrade -your input file it is sufficient to run - -@example -convert-ly -e myfile.ly -@end example - -@noindent -in the directory containing the file. This will upgrade -@code{myfile.ly} in-place and preserve the original file in -@code{myfile.ly~}. - -To convert all the input files in a directory together use - -@example -convert-ly -e *.ly -@end example - -Alternatively, if you want to specify a different name for the -upgraded file, preserving the original file and name unchanged, -use - -@example -convert-ly myfile.ly > mynewfile.ly -@end example - -@command{convert-ly} always converts up to the last syntax change -handled by it. This means that the @code{\version} number left in -the file is usually lower than the version of @command{convert-ly} -itself. - -The program will list the version numbers for which conversions -have been made. If no version numbers are listed the file is -already up to date. - -@noindent -MacOS@tie{}X users may execute these commands under the menu entry -@code{Compile > Update syntax}. - -Windows users should enter these commands in a Command Prompt window, -which is usually found under -@code{Start > Accessories > Command Prompt}. - -@node Command line options for convert-ly -@subsection Command line options for @command{convert-ly} - -In general, the program is invoked as follows: - -@example -convert-ly [@var{option}]@dots{} @var{filename}@dots{} -@end example - - -The following options can be given: - -@table @code -@item -e,--edit -Apply the conversions direct to the input file, modifying it -in-place. - -@item -f,--from=@var{from-patchlevel} -Set the version to convert from. If this is not set, @command{convert-ly} -will guess this, on the basis of @code{\version} strings in the file. -E.g. @code{--from=2.10.25} - -@item -n,--no-version -Normally, @command{convert-ly} adds a @code{\version} indicator -to the output. Specifying this option suppresses this. - -@item -s, --show-rules -Show all known conversions and exit. - -@item --to=@var{to-patchlevel} -Set the goal version of the conversion. It defaults to the latest -available version. E.g. @code{--to=2.12.2} - -@item -h, --help -Print usage help. -@end table - -To upgrade LilyPond fragments in texinfo files, use - -@example -convert-ly --from=... --to=... --no-version *.itely -@end example - -To see the changes in the LilyPond syntax between two versions, use - -@example -convert-ly --from=... --to=... -s -@end example - - -@node Problems with convert-ly -@subsection Problems with @code{convert-ly} - -When running convert-ly in a Command Prompt window under Windows -on a file which has spaces in the filename or in the path to it, -it is necessary to surround the entire file name with three (!) -sets of double quotes: - -@example -convert-ly """D:/My Scores/Ode.ly""" > """D:/My Scores/new Ode.ly""" -@end example - -If the simple @command{convert-ly -e *.ly} command fails because the -expanded command line becomes too long, the @command{convert-ly} -command may be placed in a loop instead. This example for UNIX -will upgrade all @code{.ly} files in the current directory - -@example -for f in *.ly; do convert-ly -e $f; done; -@end example - -In the Windows Command Prompt window the corresponding command is - -@example -for %x in (*.ly) do convert-ly -e """%x""" -@end example - -Not all language changes are handled. Only one output option can be -specified. Automatically updating scheme and LilyPond scheme -interfaces is quite unlikely; be prepared to tweak scheme code -manually. - -@verbatim -There are a few things that the convert-ly cannot handle. Here's a list -of limitations that the community has complained about. - -This bug report structure has been chosen because convert-ly has a -structure that doesn't allow to smoothly implement all needed changes. -Thus this is just a wishlist, placed here for reference. - -1.6->2.0: - Doesn't always convert figured bass correctly, specifically things like {< ->}. Mats' comment on working around this: - To be able to run convert-ly - on it, I first replaced all occurrences of '{<' to some dummy like '{#' - and similarly I replaced '>}' with '&}'. After the conversion, I could - then change back from '{ #' to '{ <' and from '& }' to '> }'. - Doesn't convert all text markup correctly. In the old markup syntax, - it was possible to group a number of markup commands together within -parentheses, e.g. - -#'((bold italic) "string") - This will incorrectly be converted into - -\markup{{\bold italic} "string"} - instead of the correct - -\markup{\bold \italic "string"} -2.0->2.2: - Doesn't handle \partcombine - Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple -stanzas. -2.0->2.4: - \magnify isn't changed to \fontsize. - - \magnify #m => \fontsize #f, where f = 6ln(m)/ln(2) - remove-tag isn't changed. - - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . . - first-page-number isn't changed. - - first-page-number no => print-first-page-number = ##f - Line breaks in header strings aren't converted. - - \\\\ as line break in \header strings => \markup \center-align < - "First Line" "Second Line" > - Crescendo and decrescendo terminators aren't converted. - - \rced => \! - - \rc => \! -2.2->2.4: - \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly -converted. -2.4.2->2.5.9 - \markup{ \center-align <{ ... }> } should be converted to: - \markup{ \center-align {\line { ... }} } - but now, \line is missing. -2.4->2.6 - Special LaTeX characters such as $~$ in text are not converted to UTF8. -2.8 - \score{} must now begin with a music expression. Anything else - (particularly \header{}) must come after the music. -@end verbatim - - -@node Reporting bugs -@section Reporting bugs - -@cindex bugs -@cindex reporting bugs - -If you have input that results in a crash or an erroneous output, then -that is a bug. There is a list of current bugs on our Google bug tracker, - -@uref{http://code.google.com/p/lilypond/issues/list} - -If you have discovered a bug which is not listed, please report the -bug by following the directions on - -@uref{http://lilypond.org/web/devel/participating/bugs} - -Please construct and submit minimal examples of bugs in reports. We do not -have the resources to investigate reports which are not as small as possible. - - - diff --git a/Documentation/user/scheme-tutorial.itely b/Documentation/user/scheme-tutorial.itely deleted file mode 100644 index 6d8f33e0f8..0000000000 --- a/Documentation/user/scheme-tutorial.itely +++ /dev/null @@ -1,288 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Scheme tutorial -@appendix Scheme tutorial - -@funindex # -@cindex Scheme -@cindex GUILE -@cindex Scheme, in-line code -@cindex accessing Scheme -@cindex evaluating Scheme -@cindex LISP - -LilyPond uses the Scheme programming language, both as part of the -input syntax, and as internal mechanism to glue modules of the program -together. This section is a very brief overview of entering data in -Scheme. If you want to know more about Scheme, see -@uref{http://@/www@/.schemers@/.org}. - -The most basic thing of a language is data: numbers, character -strings, lists, etc. Here is a list of data types that are relevant to -LilyPond input. - -@table @asis -@item Booleans -Boolean values are True or False. The Scheme for True is @code{#t} -and False is @code{#f}. -@funindex ##t -@funindex ##f - -@item Numbers -Numbers are entered in the standard fashion, -@code{1} is the (integer) number one, while @code{-1.5} is a -floating point number (a non-integer number). - -@item Strings -Strings are enclosed in double quotes, - -@example -"this is a string" -@end example - -Strings may span several lines - -@example -"this -is -a string" -@end example - -Quotation marks and newlines can also be added with so-called escape -sequences. The string @code{a said "b"} is entered as - -@example -"a said \"b\"" -@end example - -Newlines and backslashes are escaped with @code{\n} and @code{\\} -respectively. -@end table - - -In a music file, snippets of Scheme code are introduced with the hash -mark @code{#}. So, the previous examples translated in LilyPond are - -@example -##t ##f -#1 #-1.5 -#"this is a string" -#"this -is -a string" -@end example - -For the rest of this section, we will assume that the data is entered -in a music file, so we add @code{#}s everywhere. - -Scheme can be used to do calculations. It uses @emph{prefix} -syntax. Adding 1 and@tie{}2 is written as @code{(+ 1 2)} rather than the -traditional @math{1+2}. - -@lisp -#(+ 1 2) - @result{} #3 -@end lisp - -The arrow @result{} shows that the result of evaluating @code{(+ 1 2)} -is@tie{}@code{3}. Calculations may be nested; the result of a function may -be used for another calculation. - -@lisp -#(+ 1 (* 3 4)) - @result{} #(+ 1 12) - @result{} #13 -@end lisp - -These calculations are examples of evaluations; an expression like -@code{(* 3 4)} is replaced by its value @code{12}. A similar thing -happens with variables. After defining a variable - -@example -twelve = #12 -@end example - -@noindent -variables can also be used in expressions, here - -@example -twentyFour = #(* 2 twelve) -@end example - -@noindent -the number 24 is stored in the variable @code{twentyFour}. -The same assignment can be done in completely in Scheme as well, - -@example -#(define twentyFour (* 2 twelve)) -@end example - -The @emph{name} of a variable is also an expression, similar to a -number or a string. It is entered as - -@example -#'twentyFour -@end example - -@funindex #'symbol -@cindex quoting in Scheme - -The quote mark @code{'} prevents the Scheme interpreter from substituting -@code{24} for the @code{twentyFour}. Instead, we get the name -@code{twentyFour}. - -This syntax will be used very frequently, since many of the layout -tweaks involve assigning (Scheme) values to internal variables, for -example - -@example -\override Stem #'thickness = #2.6 -@end example - -This instruction adjusts the appearance of stems. The value @code{2.6} -is put into the @code{thickness} variable of a @code{Stem} -object. @code{thickness} is measured relative to the thickness of -staff lines, so these stem lines will be @code{2.6} times the -width of staff lines. This makes stems almost twice as thick as their -normal size. To distinguish between variables defined in input files (like -@code{twentyFour} in the example above) and variables of internal -objects, we will call the latter @q{properties} and the former -@q{variables.} So, the stem object has a @code{thickness} property, -while @code{twentyFour} is an variable. - -@cindex properties vs. variables -@cindex variables vs. properties - -Two-dimensional offsets (X and Y coordinates) as well as object sizes -(intervals with a left and right point) are entered as @code{pairs}. A -pair@footnote{In Scheme terminology, the pair is called @code{cons}, -and its two elements are called @code{car} and @code{cdr} respectively.} -is entered as @code{(first . second)} and, like symbols, they must be quoted, - -@example -\override TextScript #'extra-offset = #'(1 . 2) -@end example - -This assigns the pair (1, 2) to the @code{extra-offset} property of the -TextScript object. These numbers are measured in staff-spaces, so -this command moves the object 1 staff space to the right, and 2 spaces up. - -The two elements of a pair may be arbitrary values, for example - -@example -#'(1 . 2) -#'(#t . #f) -#'("blah-blah" . 3.14159265) -@end example - -A list is entered by enclosing its elements in parentheses, and adding -a quote. For example, - -@example -#'(1 2 3) -#'(1 2 "string" #f) -@end example - -We have been using lists all along. A calculation, like @code{(+ 1 2)} -is also a list (containing the symbol @code{+} and the numbers 1 -and@tie{}2). Normally lists are interpreted as calculations, and the -Scheme interpreter substitutes the outcome of the calculation. To enter a -list, we stop the evaluation. This is done by quoting the list with a -quote @code{'} symbol. So, for calculations do not use a quote. - -Inside a quoted list or pair, there is no need to quote anymore. The -following is a pair of symbols, a list of symbols and a list of lists -respectively, - -@example -#'(stem . head) -#'(staff clef key-signature) -#'((1) (2)) -@end example - - -@menu -* Tweaking with Scheme:: -@end menu - -@node Tweaking with Scheme -@appendixsec Tweaking with Scheme - -We have seen how LilyPond output can be heavily modified using -commands like -@code{\override TextScript #'extra-offset = ( 1 . -1)}. But -we have even more power if we use Scheme. For a full explanation -of this, see the @ref{Scheme tutorial}, and -@ruser{Interfaces for programmers}. - -We can use Scheme to simply @code{\override} commands, - -TODO Find a simple example -@c This isn't a valid example with skylining -@c It works fine without padText -td - -@ignore -@lilypond[quote,verbatim,ragged-right] -padText = #(define-music-function (parser location padding) (number?) -#{ - \once \override TextScript #'padding = #$padding -#}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond -@end ignore - -We can use it to create new commands: - -@c Check this is a valid example with skylining -@c It is - 'padding still works - -@lilypond[quote,verbatim,ragged-right] -tempoMark = #(define-music-function (parser location padding marktext) - (number? string?) -#{ - \once \override Score . RehearsalMark #'padding = $padding - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $marktext } -#}) - -\relative c'' { - c2 e - \tempoMark #3.0 #"Allegro" - g c -} -@end lilypond - -Even music expressions can be passed in: - -@lilypond[quote,verbatim,ragged-right] -pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) -#{ - $x e8 a b $y b a e -#}) - -\relative c''{ - \pattern c8 c8\f - \pattern {d16 dis} { ais16-> b\p } -} -@end lilypond - - - - - diff --git a/Documentation/user/setup.itely b/Documentation/user/setup.itely deleted file mode 100644 index da5bbe90ae..0000000000 --- a/Documentation/user/setup.itely +++ /dev/null @@ -1,328 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-program.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Setup -@chapter Setup - -This chapter discusses various post-install configuration options for -LilyPond and various other programs. This chapter may be safely treated -as a reference: only read a section if it applies to you. - -@menu -* Setup for specific Operating Systems:: -* Text editor support:: -* Point and click:: -@end menu - - -@node Setup for specific Operating Systems -@section Setup for specific Operating Systems - -This section explains how to perform additional setup for specific -operating systems. - -@menu -* Setup for MacOS X:: -@end menu - -@node Setup for MacOS X -@subsection Setup for MacOS X - -@subsubheading Using Python scripts on MacOS 10.3 or 10.4 - -LilyPond binaries for MacOS X do not provide Python, but Python 2.4 or -newer is required by @command{convert-ly}. Therefore, if you use MacOS -10.3 or 10.4, you must install a newer Python version from -@uref{http://python.org/download/}, then edit the first line of -@command{convert-ly} and @command{lilypond-book} as follows: if the -Python binary you just installed is in your @var{PATH}, the first line -should be - -@example -#!/usr/bin/env python -@end example - -@noindent -otherwise it should be - -@example -#!@var{/path/to/newly_installed/python} -@end example - - -@subsubheading MacOS X on the command line - -The scripts --- such as @command{lilypond-book}, @command{convert-ly}, -@command{abc2ly}, and even @command{lilypond} itself --- are included -inside the @code{.app} file for MacOS@tie{}X. They can be run from -the command line by invoking them directly, e.g. - -@example -@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond -@end example - -@noindent -The same is true of the other scripts in that directory, including -@command{lilypond-book}, @command{convert-ly}, @command{abc2ly}, etc. - -Alternatively, you may create scripts which add the path -automatically. Create a directory to store these scripts, - -@example -mkdir -p ~/bin -cd ~/bin -@end example - -Create a file called @code{lilypond} which contains - -@example -exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" -@end example - -Create similar files @code{lilypond-book}, @code{convert-ly}, and -any other helper programs you use (@code{abc2ly}, @code{midi2ly}, -etc). Simply replace the @code{bin/lilypond} with -@code{bin/convert-ly} (or other program name) in the above file. - -Make the file executable, - -@example -chmod u+x lilypond -@end example - -Now, add this directory to your path. Modify (or create) -a file called @code{.profile} in your home directory such that it contains - -@example -export PATH=$PATH:~/bin -@end example - -@noindent -This file should end with a blank line. - -Note that @var{path/to} will generally be @code{/Applications/}. - - -@node Text editor support -@section Text editor support - -@cindex editors -@cindex vim -@cindex emacs -@cindex modes, editor -@cindex syntax coloring -@cindex coloring, syntax - -There is support from different text editors for LilyPond. - -@menu -* Emacs mode:: -* Vim mode:: -* jEdit:: -* TexShop:: -* TextMate:: -* LilyKDE:: -@end menu - -@node Emacs mode -@subsection Emacs mode - -Emacs has a @file{lilypond-mode}, which provides keyword -autocompletion, indentation, LilyPond specific parenthesis matching -and syntax coloring, handy compile short-cuts and reading LilyPond -manuals using Info. If @file{lilypond-mode} is not installed on your -platform, see below. - -An Emacs mode for entering music and running LilyPond is contained in -the source archive in the @file{elisp} directory. Do @command{make -install} to install it to @var{elispdir}. The file @file{lilypond-init.el} -should be placed to @var{load-path}@file{/site-start.d/} or appended -to your @file{~/.emacs} or @file{~/.emacs.el}. - -As a user, you may want add your source path (e.g. @file{~/site-lisp/}) to -your @var{load-path} by appending the following line (as modified) to your -@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 Vim mode -@subsection Vim mode - -For @uref{http://@/www@/.vim@/.org,VIM}, a @file{vimrc} is supplied, -along with syntax coloring tools. A Vim mode for entering music and -running LilyPond is contained in the source archive in @code{$VIM} -directory. - -The LilyPond file type is detected if the file -@file{~/.vim/filetype.vim} has the following content - -@example -if exists("did_load_filetypes") - finish -endif -augroup filetypedetect - au! BufNewFile,BufRead *.ly,*.ily setf lilypond -augroup END -@end example - -Please include this path by appending the following line to your -@file{~/.vimrc} - -@example -set runtimepath+=/usr/local/share/lilypond/$@{LILYPOND_VERSION@}/vim/ -@end example - -@noindent -where $@{LILYPOND_VERSION@} is your LilyPond version. If LilyPond was not -installed in @file{/usr/local/}, then change this path accordingly. - - -@node jEdit -@subsection jEdit - -Created as a plugin for the @uref{http://@/www@/.jedit@/.org@/,jEdit} -text editor, LilyPondTool is the most feature-rich text-based tool for -editing LilyPond scores. Its features include a Document Wizard with -lyrics support to set up documents easier, and embedded PDF viewer with -advanced point-and-click support. For screenshots, demos and -installation instructions, visit -@uref{http://lilypondtool@/.organum@/.hu} - - -@node TexShop -@subsection TexShop - -The @uref{http://@/www@/.uoregon@/.edu/~koch/texshop/index@/.html,TexShop} -editor for MacOS@tie{}X can be extended to run LilyPond, lilypond-book and -convert-ly from within the editor, using the extensions available at -@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}. - - -@node TextMate -@subsection TextMate - -There is a LilyPond bundle for TextMate. It may be installed by running - -@example -mkdir -p /Library/Application\ Support/TextMate/Bundles -cd /Library/Application\ Support/TextMate/Bundles -svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/ -@end example - - -@node LilyKDE -@subsection LilyKDE - -@uref{http://lilykde.googlecode.com/,LilyKDE} is a plugin for KDE's -text editor @uref{http://kate-editor.org/,Kate}. It has a powerful Score -Wizard to quickly setup a LilyPond document and an embedded PDF viewer. - -LilyKDE can use @uref{http://www.volny.cz/smilauer/rumor/,Rumor}, -so music can entered by playing on a MIDI keyboard. - -Other features are lyric hyphenation and running LilyPond on multiple files -at once from within the KDE file manager. - - -@node Point and click -@section Point and click -@cindex point and click - - -Point and click lets you find notes in the input by clicking on them -in the PDF viewer. This makes it easier to find input that causes -some error in the sheet music. - -When this functionality is active, LilyPond adds hyperlinks to the PDF -file. These hyperlinks are sent to the web-browser, which opens a -text-editor with the cursor in the right place. - -To make this chain work, you should configure your PDF viewer to -follow hyperlinks using the @file{lilypond-invoke-editor} script -supplied with LilyPond. - -For Xpdf on UNIX, the following should be present in -@file{xpdfrc}@footnote{On UNIX, this file is found either in -@file{/etc/xpdfrc} or as @file{.xpdfrc} in your home directory.} - -@example -urlCommand "lilypond-invoke-editor %s" -@end example - -The program @file{lilypond-invoke-editor} is a small helper -program. It will invoke an editor for the special @code{textedit} -URIs, and run a web browser for others. It tests the environment -variable @code{EDITOR} for the following patterns, - -@table @code -@item emacs - this will invoke -@example -emacsclient --no-wait +@var{line}:@var{column} @var{file} -@end example -@item vim - this will invoke -@example -gvim --remote +:@var{line}:norm@var{char} @var{file} -@end example - -@item nedit -this will invoke -@example - nc -noask +@var{line} @var{file}' -@end example -@end table - -The environment variable @code{LYEDITOR} is used to override this. It -contains the command line to start the editor, where @code{%(file)s}, -@code{%(column)s}, @code{%(line)s} is replaced with the file, column -and line respectively. The setting - -@example -emacsclient --no-wait +%(line)s:%(column)s %(file)s -@end example - -@noindent -for @code{LYEDITOR} is equivalent to the standard emacsclient -invocation. - - -@cindex file size, output - -The point and click links enlarge the output files significantly. For -reducing the size of PDF and PS files, point and click may be switched -off by issuing - -@example -\pointAndClickOff -@end example - -@noindent -in a @file{.ly} file. Point and click may be explicitly enabled with - -@example -\pointAndClickOn -@end example - -Alternately, you may disable point and click with a command-line -option: - -@example -lilypond -dno-point-and-click file.ly -@end example - -@warning{You should always turn off point and click in any LilyPond -files to be distributed to avoid including path information about -your computer in the .pdf file, which can pose a security risk.} diff --git a/Documentation/user/simultaneous.itely b/Documentation/user/simultaneous.itely deleted file mode 100644 index 01e2c8d07d..0000000000 --- a/Documentation/user/simultaneous.itely +++ /dev/null @@ -1,838 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - - -@node Simultaneous notes -@section Simultaneous notes - -@lilypondfile[quote]{simultaneous-headword.ly} - -Polyphony in music refers to having more than one voice occurring -in a piece of music. Polyphony in LilyPond refers to having more -than one voice on the same staff. - -@menu -* Single voice:: -* Multiple voices:: -@end menu - - -@node Single voice -@subsection Single voice - -This section discusses simultaneous notes inside the same voice. - -@menu -* Chorded notes:: -* Simultaneous expressions:: -* Clusters:: -@end menu - - -@node Chorded notes -@unnumberedsubsubsec Chorded notes - -@cindex chords -@cindex brackets, angle -@cindex angle brackets -@cindex relative pitch in chords - -@funindex < -@funindex > -@funindex <...> - -A chord is formed by enclosing a set of pitches between @code{<} -and @code{>}. A chord may be followed by a duration and/or a set -of articulations, just like simple notes: - -@lilypond[verbatim,quote,relative=1] -2 4-> -. -@end lilypond - -Relative mode can be used for pitches in chords. The octave of each -pitch is chosen using the preceding pitch as a reference except in -the case of the first pitch in a chord: the reference for the first -pitch is the @emph{first} pitch of the preceding chord. - -For more information about chords, see @ref{Chord notation}. - - -@seealso -Music Glossary: -@rglos{chord}. - -Learning Manual: -@rlearning{Combining notes into chords}. - -Notation Reference: -@ref{Chord notation}. - -Snippets: -@rlsr{Simultaneous notes}. - - -@node Simultaneous expressions -@unnumberedsubsubsec Simultaneous expressions - -One or more music expressions enclosed in double angle brackets are -taken to be simultaneous. If the first expression begins with a -single note or if the whole simultaneous expression appears -explicitly within a single voice, the whole expression is placed on -a single staff; otherwise the elements of the simultaneous -expression are placed on separate staves. - -The following examples show simultaneous expressions on one staff: - -@lilypond[quote,verbatim,relative=2] -\new Voice { % explicit single voice - << {a4 b g2} {d4 g c,2} >> -} -@end lilypond - -@lilypond[quote,verbatim,relative=2] -% single first note -a << {a4 b g} {d4 g c,} >> -@end lilypond - -This can be useful if the simultaneous sections have identical -rhythms, but attempts to attach notes with different durations -to the same stem will cause errors. - -The following example shows how simultaneous expressions can -generate multiple staves implicitly: - -@lilypond[quote,verbatim,relative=2] -% no single first note -<< {a4 b g2} {d4 g2 c,4} >> -@end lilypond - -Here different rhythms cause no problems. - - -@node Clusters -@unnumberedsubsubsec Clusters - -@cindex cluster -@cindex note cluster - -@funindex \makeClusters -@funindex makeClusters - -A cluster indicates a continuous range of pitches to be played. -They can be denoted as the envelope of a set of notes. They are -entered by applying the function @code{\makeClusters} to a sequence -of chords, e.g., - -@lilypond[quote,relative=2,verbatim] -\makeClusters { 2 } -@end lilypond - -Ordinary notes and clusters can be put together in the same staff, -even simultaneously. In such a case no attempt is made to -automatically avoid collisions between ordinary notes and clusters. - - -@seealso -Music Glossary: -@rglos{cluster}. - -Snippets: -@rlsr{Simultaneous notes}. - -Internals Reference: -@rinternals{ClusterSpanner}, -@rinternals{ClusterSpannerBeacon}, -@rinternals{Cluster_spanner_engraver}. - - -@knownissues - -Clusters look good only if they span at least two chords; otherwise -they appear too narrow. - -Clusters do not have a stem and cannot indicate durations by -themselves, but the length of the printed cluster is determined by -the durations of the defining chords. Separate clusters need a -separating rest between them. - -Clusters do not produce MIDI output. - -@node Multiple voices -@subsection Multiple voices - -This section discusses simultaneous notes in multiple voices or -multiple staves. - -@menu -* Single-staff polyphony:: -* Voice styles:: -* Collision resolution:: -* Automatic part combining:: -* Writing music in parallel:: -@end menu - - -@node Single-staff polyphony -@unnumberedsubsubsec Single-staff polyphony - -@cindex single-staff polyphony -@cindex polyphony, single-staff -@cindex voice -@cindex lyrics assigned to one voice - -@funindex \voiceOne -@funindex voiceOne -@funindex \voiceOne ... \voiceFour -@funindex Voice -@funindex \oneVoice -@funindex oneVoice - -@strong{@i{Explicitly instantiating voices}} - -The basic structure needed to achieve multiple independent -voices in a single staff is illustrated in the following example: - -@lilypond[quote,relative=3,verbatim] -\new Staff << - \new Voice = "first" - { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } - \new Voice= "second" - { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -Here, voices are instantiated explicitly and are given names. The -@code{\voiceOne} ... @code{\voiceFour} commands set up the voices -so that first and third voices get stems up, second and fourth -voices get stems down, third and fourth voice note heads are -horizontally shifted, and rests in the respective voices are -automatically moved to avoid collisions. The @code{\oneVoice} -command returns all the voice settings to the neutral default -directions. - -@strong{@i{Temporary polyphonic passages}} - -A temporary polyphonic passage can be created with the following -construct: - -@example -<< @{ \voiceOne ... @} - \new Voice @{ \voiceTwo ... @} ->> \oneVoice -@end example - -Here, the first expression within a temporary polyphonic passage is -placed into the @code{Voice} context which was in use immediately -before the polyphonic passage, and that same @code{Voice} context -continues after the temporary section. Other expressions within -the angle brackets are assigned to distinct temporary voices. -This allows lyrics to be assigned to one continuing voice before, -during and after a polyphonic section: - -@lilypond[quote, verbatim, relative=2] -<< - \new Voice = "melody" { - a4 - << - { - \voiceOne - g f - } - \new Voice { - \voiceTwo - d2 - } - >> - \oneVoice - e4 - } - \new Lyrics \lyricsto "melody" { - This is my song. - } ->> -@end lilypond - -Here, the @code{\voiceOne} and @code{\voiceTwo} commands are -required to define the settings of each voice. - -@strong{@i{The double backslash construct}} - -The @code{<< @{...@} \\ @{...@} >>} construct, where the two (or -more) expressions are separated by double backslashes, behaves -differently to the similar construct without the double backslashes: -@emph{all} the expressions within this contruct are assigned -to new @code{Voice} contexts. These new @code{Voice} contexts -are created implicitly and are given the fixed names @code{"1"}, -@code{"2"}, etc. - -The first example could be typeset as follows: - -@lilypond[quote,relative=3,verbatim] -<< - { r8 r16 g e8. f16 g8[ c,] f e16 d } - \\ - { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } ->> -@end lilypond - -This syntax can be used where it does not matter that temporary -voices are created and then discarded. These implicitly created -voices are given the settings equivalent to the effect of the -@code{\voiceOne} ... @code{\voiceFour} commands, in the order in -which they appear in the code. - -In the following example, the intermediate voice has stems up, -therefore we enter it in the third place, so it becomes voice -three, which has the stems up as desired. Spacer rests are -used to avoid printing doubled rests. - -@lilypond[quote,relative=3,verbatim] -<< - { r8 g g g g f16 ees f8 d } - \\ - { ees,8 r ees r d r d r } - \\ - { d'8 s c s bes s a s } ->> -@end lilypond - -In all but the simplest works it is advisable to create explicit -@code{Voice} contexts as explained in @rlearning{Contexts and engravers} and -@rlearning{Explicitly instantiating voices}. - -@strong{@i{Identical rhythms}} - -In the special case that we want to typeset parallel pieces of music -that have the same rhythm, we can combine them into a single -@code{Voice} context, thus forming chords. To achieve this, enclose -them in a simple simultaneous music construct within an explicit voice: - -@lilypond[quote,relative=2,verbatim] -\new Voice << - { e4 f8 d e16 f g8 d4 } - { c4 d8 b c16 d e8 b4 } ->> -@end lilypond - -This method leads to strange beamings and warnings if the pieces of -music do not have the same rhythm. - - -@predefined -@code{\voiceOne}, -@code{\voiceTwo}, -@code{\voiceThree}, -@code{\voiceFour}, -@code{\oneVoice}. -@endpredefined - - -@seealso -Learning Manual: -@rlearning{Voices contain music}, -@rlearning{Explicitly instantiating voices}. - -Notation Reference: -@ref{Percussion staves}, -@ref{Invisible rests}, -@ref{Stems}. - -Snippets: -@rlsr{Simultaneous notes}. - - -@node Voice styles -@unnumberedsubsubsec Voice styles - -@cindex voice styles -@cindex styles, voice -@cindex coloring voices -@funindex \voiceOneStyle -@funindex \voiceTwoStyle -@funindex \voiceThreeStyle -@funindex \voiceFourStyle -@funindex \voiceNeutralStyle - -Voices may be given distinct colors and shapes, allowing them to be -easily identified: - -@lilypond[quote,relative=2,verbatim] -<< - { \voiceOneStyle d4 c2 b4 } - \\ - { \voiceTwoStyle e,2 e } - \\ - { \voiceThreeStyle b2. c4 } - \\ - { \voiceFourStyle g'2 g } ->> -@end lilypond - -The @code{\voiceNeutralstyle} command is used to revert to the -standard presentation. - - -@predefined -@code{\voiceOneStyle}, -@code{\voiceTwoStyle}, -@code{\voiceThreeStyle}, -@code{\voiceFourStyle}, -@code{\voiceNeutralStyle}. -@endpredefined - - -@seealso -Learning Manual: -@rlearning{I'm hearing Voices}, -@rlearning{Other sources of information}. - -Snippets: -@rlsr{Simultaneous notes}. - - -@node Collision resolution -@unnumberedsubsubsec Collision resolution - -@cindex merging notes -@cindex note collisions -@cindex collisions -@cindex shift note -@cindex multiple voices -@cindex voices, multiple -@cindex polyphonic music -@cindex shifting voices -@cindex voices, multiple -@cindex shift rest, automatic -@funindex \shiftOn -@funindex shiftOn -@funindex \shiftOnn -@funindex shiftOnn -@funindex \shiftOnnn -@funindex shiftOnnn -@funindex \shiftOff -@funindex shiftOff -@funindex \mergeDifferentlyDottedOn -@funindex mergeDifferentlyDottedOn -@funindex \mergeDifferentlyDottedOff -@funindex mergeDifferentlyDottedOff -@funindex \mergeDifferentlyHeadedOn -@funindex mergeDifferentlyHeadedOn -@funindex \mergeDifferentlyHeadedOff -@funindex mergeDifferentlyHeadedOff - -The note heads of notes in different voices with the same pitch, -same note head and opposite stem direction are automatically -merged, but notes with different note heads or the same stem -direction are not. Rests opposite a stem in a different voice -are shifted vertically. - -@lilypond[quote,verbatim,relative=2] -<< - { - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Notes with different note heads may be merged, with the -exception of half-note heads and quarter-note heads: - -@lilypond[quote,verbatim,relative=2] -<< - { - \mergeDifferentlyHeadedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - -Note heads with different dots may be merged: - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } ->> -@end lilypond - - -The half note and eighth note at the start of the second measure -are incorrectly merged because @code{\mergeDifferentlyHeadedOn} -cannot successfully complete the merge when three or more notes -line up in the same column, and in this case a warning is given. -To allow the merge to work properly a @code{\shift} must be applied -to the note that should not be merged. Here, @code{\shiftOn} is -applied to move the top @notation{g} out of the column, and -@code{\mergeDifferentlyHeadedOn} then works properly. - -@lilypond[quote,relative=2,verbatim] -<< - { - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - c8 d e d c d c4 - \shiftOn - g'2 fis - } \\ { - c2 c8. b16 c4 - e,2 r - } \\ { - \oneVoice - s1 - e8 a b c d2 - } - ->> -@end lilypond - -The @code{\shiftOn}, @code{\shiftOnn}, and @code{\shiftOnnn} -commands specify the degree to which chords of the current voice -should be shifted. The outer voices (normally: voices one and -two) have @code{\shiftOff}, while the inner voices (three and -four) have @code{\shiftOn}. @code{\shiftOnn} and -@code{\shiftOnnn} define further shift levels. - -Notes are only merged if they have opposing stem directions (e.g. in -@code{Voice} 1 and 2). - - -@predefined -@code{\mergeDifferentlyDottedOn}, -@code{\mergeDifferentlyDottedOff}, -@code{\mergeDifferentlyHeadedOn}, -@code{\mergeDifferentlyHeadedOff}. - -@code{\shiftOn}, -@code{\shiftOnn}, -@code{\shiftOnnn}, -@code{\shiftOff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{additional-voices-to-avoid-collisions.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{forcing-horizontal-shift-of-notes.ly} - - -@seealso -Music Glossary: -@rglos{polyphony}. - -Learning Manual: -@rlearning{Multiple notes at once}, -@rlearning{Voices contain music}, -@rlearning{Collisions of objects}. - -Snippets: -@rlsr{Simultaneous notes}. - -Internals Reference: -@rinternals{NoteColumn}, -@rinternals{NoteCollision}, -@rinternals{RestCollision}. - - -@knownissues - -When using @code{\mergeDifferentlyHeadedOn} with an upstem eighth -or a shorter note, and a downstem half note, the eighth note stem -gets a slightly wrong offset because of the different width of the -half note head symbol. - -@ignore -@c TODO investigate! Sometimes it works, sometimes not. --FV -The requirements for successfully merging different note heads that -are at the same time differently dotted are not clear. -@end ignore - -There is no support for chords where the same note occurs with -different accidentals in the same chord. In this case, it is -recommended to use enharmonic transcription, or to use special -cluster notation (see @ref{Clusters}). - - -@node Automatic part combining -@unnumberedsubsubsec Automatic part combining - -@cindex automatic part combining -@cindex part combiner -@cindex combining parts -@cindex a due part -@cindex solo part -@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. - -The syntax for 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. - -@lilypond[quote,verbatim] -instrumentOne = \relative c' { - 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 -} - -<< - \new Staff \instrumentOne - \new Staff \instrumentTwo - \new Staff \partcombine \instrumentOne \instrumentTwo ->> -@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 @q{Solo} and @q{Solo II}, respectively. The -unisono (@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, -i.e., - -@example -\partcombine - \relative @dots{} @var{musicexpr1} - \relative @dots{} @var{musicexpr2} -@end example - -@noindent -A @code{\relative} section that is outside of @code{\partcombine} -has no effect on the pitches of @var{musicexpr1} and -@var{musicexpr2}. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{combining-two-parts-on-the-same-staff.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-partcombine-texts.ly} - - -@seealso -Music Glossary: -@rglos{a due}, -@rglos{part}. - -Notation Reference: -@ref{Writing parts}. - -Snippets: -@rlsr{Simultaneous notes}. - -Internals Reference: -@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. - - -@node Writing music in parallel -@unnumberedsubsubsec Writing music in parallel - -@cindex writing music in parallel -@cindex interleaved music -@cindex parallel music -@funindex \parallelMusic -@funindex parallelMusic - -Music for multiple parts can be interleaved in input code. The -function @code{\parallelMusic} accepts a list with the names of a -number of variables to be created, and a musical expression. The -content of alternate measures from the expression become the value -of the respective variables, so you can use them afterwards to -print the music. - -@warning{Bar checks @code{|} must be used, and the measures must -be of the same length.} - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | - r16 e'8.~ e'4 r16 e'8.~ e'4 | - c'2 c'2 | - - % Bar 2 - r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | - r16 d'8.~ d'4 r16 d'8.~ d'4 | - c'2 c'2 | - -} -\new StaffGroup << - \new Staff << \voiceA \\ \voiceB >> - \new Staff { \clef bass \voiceC } ->> -@end lilypond - -Relative mode may be used. Note that the @code{\relative} command -is not used inside @code{\parallelMusic} itself. The notes are -relative to the preceding note in the voice, not to the previous -note in the input -- in other words, relative notes for -@code{voiceA} ignore the notes in @code{voiceB}. - -@lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { - % Bar 1 - r8 g16 c e g, c e r8 g,16 c e g, c e | - r16 e8.~ e4 r16 e8.~ e4 | - c2 c | - - % Bar 2 - r8 a,16 d f a, d f r8 a,16 d f a, d f | - r16 d8.~ d4 r16 d8.~ d4 | - c2 c | - - } -\new StaffGroup << - \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> - \new Staff \relative c' { \clef bass \voiceC } ->> -@end lilypond - -This works quite well for piano music. This example maps four -consecutive measures to four variables: - -@lilypond[quote,verbatim] -global = { - \key g \major - \time 2/4 -} - -\parallelMusic #'(voiceA voiceB voiceC voiceD) { - % Bar 1 - a8 b c d | - d4 e | - c16 d e fis d e fis g | - a4 a | - - % Bar 2 - e8 fis g a | - fis4 g | - e16 fis g a fis g a b | - a4 a | - - % Bar 3 ... -} - -\score { - \new PianoStaff << - \new Staff { - \global - << - \relative c'' \voiceA - \\ - \relative c' \voiceB - >> - } - \new Staff { - \global \clef bass - << - \relative c \voiceC - \\ - \relative c \voiceD - >> - } - >> -} -@end lilypond - - -@seealso -Learning Manual: -@rlearning{Organizing pieces with variables}. - -Snippets: -@rlsr{Simultaneous notes}. diff --git a/Documentation/user/spacing.itely b/Documentation/user/spacing.itely deleted file mode 100644 index 4931a9b2f1..0000000000 --- a/Documentation/user/spacing.itely +++ /dev/null @@ -1,2634 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ignore -GDP TODO list - -Negative numbers are allowed: -> Are you sure? The following works well -> \paper{ -> first-page-number = -2 -> } -> and prints page number -1 on the second page, for example. - - -In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it -states: - -"@code{layout-set-staff-size} does not change the distance between -the -staff lines." - -Could we add a sentence: -"Use instead the pair fontSize = #@var{N} - \override StaffSymbol #'staff-space = #(magstep -@var{N}) -inside the Staff context to change the size of the font and the -distance between -staff lines accordingly." - -Actually I found, that the @internalsref{StaffSymbol} at line 481 -sends to an uncomplete -documentation. The property staff-space is not explained here. I -thought Y-extent might be of -help, but it is in turn explained by x-space which again is -missing from the list. Who has the -knowledge to fix this? - - -Clarify -http://code.google.com/p/lilypond/issues/detail?id=68 - -@end ignore - - -@node Spacing issues -@chapter Spacing issues - -The global paper layout is determined by three factors: the page layout, the -line breaks, and the spacing. These all influence each other. The -choice of spacing determines how densely each system of music is set. -This influences where line breaks are chosen, and thus ultimately, how -many pages a piece of music takes. - -Globally speaking, this procedure happens in four steps: first, -flexible distances (@q{springs}) are chosen, based on durations. All -possible line breaking combinations are tried, and a @q{badness} score -is calculated for each. Then the height of each possible system is -estimated. Finally, a page breaking and line breaking combination is chosen -so that neither the horizontal nor the vertical spacing is too cramped -or stretched. - -Settings which influence layout may be placed in two blocks. -The @code{\paper @{...@}} block is placed outside any -@code{\score @{...@}} blocks and contains settings that -relate to the entire document. The @code{\layout @{...@}} -block is placed within a @code{\score @{...@}} block and -contains settings for that particular score. If you have -only one @code{\score @{...@}} block the two have the same -effect. In general the commands shown in this chapter can -be placed in either. - -@menu -* Paper and pages:: -* Music layout:: -* Breaks:: -* Vertical spacing:: -* Horizontal spacing:: -* Fitting music onto fewer pages:: -@end menu - - -@node Paper and pages -@section Paper and pages - -This section deals with the boundaries that define the area -within which music can be printed. - -@menu -* Paper size:: -* Page formatting:: -@end menu - - -@node Paper size -@subsection Paper size - -@cindex paper size -@cindex page size - -Two functions are available for changing the paper size: -@code{set-default-paper-size} and @code{set-paper-size}. -@code{set-default-paper-size} must be placed in the toplevel -scope, and @code{set-paper-size} must be placed in a @code{\paper} -block: - -@example -#(set-default-paper-size "a4") -@end example - -@example -\paper @{ - #(set-paper-size "a4") -@} -@end example - -@noindent -@code{set-default-paper-size} sets the size of all pages, whereas -@code{set-paper-size} only sets the size of the pages that the -@code{\paper} block applies to. For example, if the @code{\paper} -block is at the top of the file, then it will apply the paper size -to all pages. If the @code{\paper} block is inside a -@code{\book}, then the paper size will only apply to that book. - -Common paper sizes are available, including @code{a4}, -@code{letter}, @code{legal}, and @code{11x17} (also known as -tabloid). Many more paper sizes are supported by default. For -details, see @file{scm/@/paper@/.scm}, and search for the -definition of @code{paper-alist}. - -@c TODO add a new appendix for paper sizes (auto-generated) -pm - -@warning{The default paper size is @code{a4}.} - -Extra sizes may be added by editing the definition of -@code{paper-alist} in the initialization file -@file{scm/@/paper@/.scm}, however they will be overridden on a -subsequent install. - -@cindex orientation -@cindex landscape - -If the symbol @code{'landscape} is supplied as an argument to -@code{set-default-paper-size}, pages will be rotated by 90 -degrees, and wider line widths will be set accordingly. - -@example -#(set-default-paper-size "a6" 'landscape) -@end example - -Setting the paper size will adjust a number of @code{\paper} -variables, such as margins. To use a particular paper size with -altered @code{\paper} variables, set the paper size before setting -the variables. - - -@seealso -Installed Files: -@file{scm/@/paper@/.scm}. - -Snippets: -@rlsr{Spacing}. - - -@node Page formatting -@subsection Page formatting - -Margins, headers, and footers and other layout variables are -automatically set according to the paper size. - -This section lists and describes a number of paper variables that -may be altered. - -@menu -* Vertical dimensions:: -* Horizontal dimensions:: -* Other layout variables:: -@end menu - - -@node Vertical dimensions -@unnumberedsubsubsec Vertical dimensions - -These variables are used to set different vertical dimensions on a -page: - -@funindex \paper - -@table @code - -@item after-title-space -@funindex after-title-space - -The amount of space between the title and the first system. -Default: @code{5\mm}. - -@item before-title-space -@funindex before-title-space - -Amount of space between the last system of the previous piece and the -title of the next. Default: @code{10\mm}. - -@item between-system-padding -@funindex between-system-padding - -The minimum amount of white space that will always be present -between the bottom-most symbol of one system, and the top-most of -the next system. Default: @code{4\mm}. - -Increasing this will put systems whose bounding boxes almost touch -farther apart. - -@item between-system-space -@funindex between-system-space - -The distance between systems. It is the ideal distance between -the center of the bottom staff of one system and the center of the -top staff of the next system. Default: @code{20\mm}. - -Increasing this value will provide a more even appearance of the -page at the cost of using more vertical space. - -@item between-title-space -@funindex between-title-space - -Amount of space between consecutive titles (e.g., the title of the -book and the title of a piece). Default: @code{2\mm}. - -@item bottom-margin -@funindex bottom-margin - -The margin between footer and bottom of the page. Default: -@code{6\mm}. - -@item foot-separation -@funindex foot-separation - -Distance between the bottom-most music system and the page -footer. Default: @code{4\mm}. - -@item head-separation -@funindex head-separation - -Distance between the top-most music system and the page header. -Default: @code{4\mm}. - -@item page-top-space -@funindex page-top-space - -Distance from the top of the printable area to the center of the -first staff. This only works for staves that are vertically -small. Big staves are set with the top of their bounding box -aligned to the top of the printable area. Default: @code{12\mm}. - -@item paper-height -@funindex paper-height - -The height of the page. Default: the height of the current paper -size. For details, see @ref{Paper size}. - -@item top-margin -@funindex top-margin - -The margin between header and top of the page. Default: -@code{5\mm}. - -@end table - - -@snippets - -The header and footer are created by the functions make-footer and -make-header, defined in \paper. The default implementations are in -ly/paper-defaults.ly and ly/titling-init.ly. - -The page layout itself is done by two functions in the \paper block, -page-music-height and page-make-stencil. The former tells the -line-breaking algorithm how much space can be spent on a page, the -latter creates the actual page given the system to put on it. - -You can define paper block values in Scheme. In that case mm, in, pt, -and cm are variables defined in paper-defaults.ly with values in -millimeters. That is why the value 2 cm must be multiplied in the -example - -@example -\paper @{ - #(define bottom-margin (* 2 cm)) -@} -@end example - - -Example: - -@example -\paper@{ - paper-width = 2\cm - top-margin = 3\cm - bottom-margin = 3\cm - ragged-last-bottom = ##t -@} -@end example - -This second example centers page numbers at the bottom of every page. - -@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 - -You can also define these values in Scheme. In that case @code{mm}, -@code{in}, @code{pt}, and @code{cm} are variables defined in -@file{paper-defaults.ly} with values in millimeters. That is why the -value must be multiplied in the example - -@example -\paper @{ - #(define bottom-margin (* 2 cm)) -@} -@end example - -The header and footer are created by the functions @code{make-footer} -and @code{make-header}, defined in @code{\paper}. The default -implementations are in @file{ly/@/paper@/-defaults@/.ly} and -@file{ly/@/titling@/-init@/.ly}. - -The page layout itself is done by two functions in the -@code{\paper} block, @code{page-music-height} and -@code{page-make-stencil}. The former tells the line-breaking algorithm -how much space can be spent on a page, the latter creates the actual -page given the system to put on it. - - -@seealso -Notation Reference: -@ref{Vertical spacing between systems}. - -Snippets: -@rlsr{Spacing}. - - -@node Horizontal dimensions -@unnumberedsubsubsec Horizontal dimensions - -@warning{If @code{paper-width} is manually set, @code{line-width}, -@code{left-margin}, @code{indent}, and @code{short-indent} may -have to be adjusted as well.} - -There are a few variables that determine the horizontal dimensions -on a page: - -@table @code - -@item horizontal-shift -@funindex horizontal-shift - -The amount that all systems (including titles and system -separators) are shifted to the right. Default: @code{0.0}. - -@item indent -@funindex indent - -The level of indentation for the first system in a score. -Default: @code{paper-width} divided by @code{14}, as determined by -@code{set-default-paper-size} or @code{set-paper-size}. - -@item left-margin -@funindex left-margin - -The margin between the left edge of the page and the beginning of -each system. Default: @code{10\mm}, as determined by -@code{set-default-paper-size} or @code{set-paper-size}. - -@item line-width -@funindex line-width - -The width of music systems. Default: @code{paper-width} minus -@code{20\mm}, as determined by @code{set-default-paper-size} or -@code{set-paper-size}. - -@item paper-width -@funindex paper-width - -The width of the page. Default: the width of the current paper -size. For details, see @ref{Paper size}. - -@item short-indent -@funindex short-indent - -The level of indentation for all systems in a score besides the -first system. Default: @code{0}, as determined by -@code{set-default-paper-size} or @code{set-paper-size}. - -@end table - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@knownissues - -The option @code{right-margin} is defined but doesn't set the -right margin yet. The value for the right margin has to be -defined by adjusting the values of @code{left-margin} and -@code{line-width}. - - -@node Other layout variables -@unnumberedsubsubsec Other layout variables - -These variables can be used to adjust page layout in general. - -@table @code - -@item auto-first-page-number -@funindex auto-first-page-number - -The page breaking algorithm is affected by the first page number -being odd or even. If set to true, the page breaking algorithm -will decide whether to start with an odd or even number. This -will result in the first page number remaining as is or being -increased by one. Default: @code{##f}. - -@ignore - -FIXME: this variable is used, but I don't know what it does. -pm -@item blank-after-score-page-force -@funindex blank-after-score-page-force - -Default: @code{2}. - -@end ignore - -@item blank-last-page-force -@funindex blank-last-page-force - -The penalty for ending the score on an odd-numbered page. -Default: @code{0}. - -@item blank-page-force -@funindex blank-page-force - -The penalty for having a blank page in the middle of a -score. This is not used by @code{ly:optimal-breaking} since it will -never consider blank pages in the middle of a score. Default: -@code{5}. - -@item first-page-number -@funindex first-page-number - -The value of the page number on the first page. Default: -@code{#1}. - -@item page-breaking-between-system-padding -@funindex page-breaking-between-system-padding - -Tricks the page breaker into thinking that -@code{between-system-padding} is set to something different than -it really is. For example, if this variable is set to something -substantially larger than @code{between-system-padding}, then the -page-breaker will put fewer systems on each page. Default: unset. - -@item page-count -@funindex page-count - -The number of pages to be used for a score. Default: unset. - -@item page-limit-inter-system-space -@funindex page-limit-inter-system-space - -If set to true, limits space between systems on a page with a lot -of space left. Default: @code{##f}. For details, see -@ref{Vertical spacing between systems}. - -@item page-limit-inter-system-space-factor -@funindex page-limit-inter-system-space-factor - -The factor used by @code{page-limit-inter-system-space}. Default: -@code{1.4}. For details, see -@ref{Vertical spacing between systems}. - -@item page-spacing-weight -@funindex page-spacing-weight - -The relative importance of page (vertical) spacing and line -(horizontal) spacing. High values will make page spacing more -important. Default: @code{#10}. - -@item print-all-headers -@funindex print-all-headers - -If set to true, this will print all headers for each \score in the -output. Normally only the piece and opus header variables are -printed. Default: @code{##f}. - -@item print-first-page-number -@funindex print-first-page-number - -If set to true, a page number is printed on the first page. -Default: @code{##f}. - -@item print-page-number -@funindex print-page-number - -If set to false, page numbers are not printed. Default: -@code{##t}. - -@item ragged-bottom -@funindex ragged-bottom - -If set to true, systems will not spread vertically across the -page. This does not affect the last page. Default: @code{##f}. - -This should be set to true for pieces that have only two or three -systems per page, for example orchestral scores. - -@item ragged-last -@funindex ragged-last - -If set to true, the last system in the score will not fill the -line width. Instead the last system ends at its natural -horizontal length. Default: @code{##f}. - -@item ragged-last-bottom -@funindex ragged-last-bottom - -If set to false, systems will spread vertically across the last -page. Default: @code{##t}. - -Pieces that amply fill two pages or more should have this set to -true. - -It also affects the last page of book parts, ie parts of a book created -with @code{\bookpart} blocks. - -@item ragged-right -@funindex ragged-right - -If set to true, systems will not fill the line width. Instead, -systems end at their natural horizontal length. Default: -@code{##f}. - -If the score has only one system, the default value is @code{##t}. - -@item system-separator-markup -@funindex system-separator-markup - -A markup object that is inserted between systems. This is often -used for orchestral scores. Default: unset. - -The markup command @code{\slashSeparator} is provided as a sensible -default, for example - -@lilypond[quote,ragged-right] -#(set-default-paper-size "a6" 'landscape) -\book { - \score { - \relative { c1 \break c1 } - } - \paper { - system-separator-markup = \slashSeparator - } -} -@end lilypond - -@item system-count -@funindex system-count - -The number of systems to be used for a score. -Default: unset. - -@end table - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@knownissues - -The default page header puts the page number and the @code{instrument} -field from the @code{\header} block on a line. - -The titles (from the @code{\header@{@}} section) are treated as a -system, so @code{ragged-bottom} and @code{ragged-last-bottom} will -add space between the titles and the first system of the score. - - -@node Music layout -@section Music layout - -@menu -* Setting the staff size:: -* Score layout:: -@end menu - - -@node Setting the staff size -@subsection Setting the staff size - -@cindex font size, setting -@cindex staff size, setting -@funindex layout file - -The default @strong{staff size} is set to 20 points. -This may be changed in two ways: - -To set the staff size globally for all scores in a file (or -in a @code{book} block, to be precise), use @code{set-global-staff-size}. - -@example -#(set-global-staff-size 14) -@end example - -@noindent -This sets the global default size to 14pt staff height and scales all -fonts accordingly. - -To set the staff size individually for each score, use -@example -\score@{ - ... - \layout@{ - #(layout-set-staff-size 15) - @} -@} -@end example - -The Feta font provides musical symbols at eight different -sizes. Each font is tuned for a different staff size: at a smaller size -the font becomes heavier, to match the relatively heavier staff lines. -The recommended font sizes are listed in the following table: - -@quotation -@multitable @columnfractions .15 .2 .22 .2 - -@item @b{font name} -@tab @b{staff height (pt)} -@tab @b{staff height (mm)} -@tab @b{use} - -@item feta11 -@tab 11.22 -@tab 3.9 -@tab pocket scores - -@item feta13 -@tab 12.60 -@tab 4.4 -@tab - -@item feta14 -@tab 14.14 -@tab 5.0 -@tab - -@item feta16 -@tab 15.87 -@tab 5.6 -@tab - -@item feta18 -@tab 17.82 -@tab 6.3 -@tab song books - -@item feta20 -@tab 20 -@tab 7.0 -@tab standard parts - -@item feta23 -@tab 22.45 -@tab 7.9 -@tab - -@item feta26 -@tab 25.2 -@tab 8.9 -@tab -@c modern rental material? - -@end multitable -@end quotation - -These fonts are available in any sizes. The context property -@code{fontSize} and the layout property @code{staff-space} (in -@rinternals{StaffSymbol}) can be used to tune the size for individual -staves. The sizes of individual staves are relative to the global size. - - -@seealso -Notation Reference: -@ref{Selecting notation font size}. - -Snippets: -@rlsr{Spacing}. - - -@knownissues - -@code{layout-set-staff-size} does not change the distance between the -staff lines. - - -@node Score layout -@subsection Score layout - -@funindex \layout - -While @code{\paper} contains settings that relate to the page formatting -of the whole document, @code{\layout} contains settings for score-specific -layout. - -@example -\layout @{ - indent = 2.0\cm - \context @{ \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6) - @} - \context @{ \Voice - \override TextScript #'padding = #1.0 - \override Glissando #'thickness = #3 - @} -@} -@end example - - -@seealso -Notation Reference: -@ref{Changing context default settings}. - -Snippets: -@rlsr{Spacing}. - - -@node Breaks -@section Breaks - -@menu -* Line breaking:: -* Page breaking:: -* Optimal page breaking:: -* Optimal page turning:: -* Minimal page breaking:: -* Explicit breaks:: -* Using an extra voice for breaks:: -@end menu - - -@node Line breaking -@subsection Line breaking - -@cindex line breaks -@cindex breaking lines - -Line breaks are normally determined automatically. They are chosen -so that lines look neither cramped nor loose, and consecutive -lines have similar density. Occasionally you might want to -override the automatic breaks; you can do this by specifying -@code{\break}. This will force a line break at this point. However, -line breaks can only occur at the end of @q{complete} bars, i.e., -where there are no notes or tuplets left @q{hanging} over the bar -line. If you want to have a line break where there is no bar line, -you can force an invisible bar line by entering @code{\bar ""}, -although again there must be no notes left hanging over in any of -the staves at this point, or it will be ignored. - -The opposite command, @code{\noBreak}, forbids a line break at the -bar line where it is inserted. - -The most basic settings influencing line spacing are @code{indent} -and @code{line-width}. They are set in the @code{\layout} block. -They control the indentation of the first line of music, and the -lengths of the lines. - -If @code{ragged-right} is set to true in the @code{\layout} block, -then systems end at their natural horizontal length, instead of -being spread horizontally to fill the whole line. This is useful -for short fragments, and for checking how tight the natural -spacing is. - -@c TODO Check and add para on default for ragged-right - -The option @code{ragged-last} is similar to @code{ragged-right}, -but affects only the last line of the piece. - -@example -\layout @{ -indent = #0 -line-width = #150 -ragged-last = ##t -@} -@end example - - - -@cindex regular line breaks -@cindex four bar music. - -For line breaks at regular intervals use @code{\break} separated by -skips and repeated with @code{\repeat}. For example, this would -cause the following 28 measures (assuming 4/4 time) to be broken -every 4 measures, and only there: - -@example -<< \repeat unfold 7 @{ - s1 \noBreak s1 \noBreak - s1 \noBreak s1 \break @} - @emph{the real music} ->> -@end example - -@c TODO Check this -A linebreaking configuration can be saved as a @code{.ly} file -automatically. This allows vertical alignments to be stretched to -fit pages in a second formatting run. This is fairly new and -complicated. More details are available in -@rlsr{Spacing}. - - -@predefined -@funindex \break -@code{\break}, -@funindex \noBreak -@code{\noBreak}. -@endpredefined - - -@seealso -Internals Reference: -@rinternals{LineBreakEvent}. - -Snippets: -@rlsr{Spacing}. - - -@knownissues - -Line breaks can only occur if there is a @q{proper} bar line. A note -which is hanging over a bar line is not proper, such as - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -c4 c2 << c2 {s4 \break } >> % this does nothing -c2 c4 | % a break here would work -c4 c2 c4 ~ \break % as does this break -c4 c2 c4 -@end lilypond - -This can be avoided by removing the @code{Forbid_line_break_engraver}. -Note that manually forced line breaks have to be added in parallel -with the music. - -@lilypond[quote,ragged-right,verbatim] -\new Voice \with { - \remove Forbid_line_break_engraver -} { - c4 c2 << c2 {s4 \break } >> % now the break is allowed - c2 c4 -} -@end lilypond - -Similarly, line breaks are normally forbidden when beams cross bar -lines. This behavior can be changed by setting -@code{\override Beam #'breakable = ##t}. - - -@node Page breaking -@subsection Page breaking - -The default page breaking may be overridden by inserting -@code{\pageBreak} or @code{\noPageBreak} commands. These commands are -analogous to @code{\break} and @code{\noBreak}. They should be -inserted at a bar line. These commands force and forbid a page-break -from happening. Of course, the @code{\pageBreak} command also forces -a line break. - -The @code{\pageBreak} and @code{\noPageBreak} commands may also be -inserted at top-level, between scores and top-level markups. - -There are also analogous settings to @code{ragged-right} and -@code{ragged-last} which have the same effect on vertical spacing: -@code{ragged-bottom} and @code{ragged-last-bottom}. If set to -@code{##t} the systems on all pages or just the last page -respectively will not be justified vertically. - -For more details see @ref{Vertical spacing}. - -Page breaks are computed by the @code{page-breaking} function. LilyPond -provides three algorithms for computing page breaks, -@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} and -@code{ly:minimal-breaking}. The default is @code{ly:optimal-breaking}, -but the value can be changed in the @code{\paper} block: - -@example -\paper@{ - #(define page-breaking ly:page-turn-breaking) -@} -@end example - -@c TODO Check this -td -The old page breaking algorithm is called -@code{optimal-page-breaks}. If you are having trouble with the new page -breakers, you can enable the old one as a workaround. - -@funindex \bookpart - -When a book has many scores and pages, the page breaking problem may be -difficult to solve, requiring large processing time and memory. To ease -the page breaking process, @code{\bookpart} blocks are used to divide -the book into several parts: the page breaking occurs separately on each -part. Different page breaking functions may also be used in different -book parts. - -@example -\bookpart @{ - \header @{ - subtitle = "Preface" - @} - \paper @{ - %% In a part consisting mostly of text, - %% ly:minimal-breaking may be prefered - #(define page-breaking ly:minimal-breaking) - @} - \markup @{ @dots{} @} - @dots{} -@} -\bookpart @{ - %% In this part, consisting of music, the default optimal - %% page breaking function is used. - \header @{ - subtitle = "First movement" - @} - \score @{ @dots{} @} - @dots{} -@} -@end example - - -@predefined -@funindex \pageBreak -@code{\pageBreak}, -@funindex \noPageBreak -@code{\noPageBreak}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Optimal page breaking -@subsection Optimal page breaking - -@funindex ly:optimal-breaking - -The @code{ly:optimal-breaking} function is LilyPond's default method of -determining page breaks. It attempts to find a page breaking that minimizes -cramping and stretching, both horizontally and vertically. Unlike -@code{ly:page-turn-breaking}, it has no concept of page turns. - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Optimal page turning -@subsection Optimal page turning - -@funindex ly:page-turn-breaking - -Often it is necessary to find a page breaking configuration so that there is -a rest at the end of every second page. This way, the musician can turn the -page without having to miss notes. The @code{ly:page-turn-breaking} function -attempts to find a page breaking minimizing cramping and stretching, but with -the additional restriction that it is only allowed to introduce page turns -in specified places. - -There are two steps to using this page breaking function. First, you -must enable it in the @code{\paper} block, as explained in @ref{Page -breaking}. Then you must tell the function where you would like to allow -page breaks. - -There are two ways to achieve the second step. First, you can specify each -potential page turn manually, by inserting @code{\allowPageTurn} into your -input file at the appropriate places. - -If this is too tedious, you can add a @code{Page_turn_engraver} to a Staff or -Voice context. The @code{Page_turn_engraver} will scan the context for -sections without notes (note that it does not scan for rests; it scans for -the absence of notes. This is so that single-staff polyphony with rests in one -of the parts does not throw off the @code{Page_turn_engraver}). When it finds -a sufficiently long section without notes, the @code{Page_turn_engraver} will -insert an @code{\allowPageTurn} at the final bar line in that section, unless -there is a @q{special} bar line (such as a double bar), in which case the -@code{\allowPageTurn} will be inserted at the final @q{special} bar line in -the section. - -@funindex minimumPageTurnLength -The @code{Page_turn_engraver} reads the context property -@code{minimumPageTurnLength} to determine how long a note-free section must -be before a page turn is considered. The default value for -@code{minimumPageTurnLength} is @code{#(ly:make-moment 1 1)}. If you want -to disable page turns, you can set it to something very large. - -@example -\new Staff \with @{ \consists "Page_turn_engraver" @} -@{ - a4 b c d | - R1 | % a page turn will be allowed here - a4 b c d | - \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) - R1 | % a page turn will not be allowed here - a4 b r2 | - R1*2 | % a page turn will be allowed here - a1 -@} -@end example - -@funindex minimumRepeatLengthForPageTurn -The @code{Page_turn_engraver} detects volta repeats. It will only allow a page -turn during the repeat if there is enough time at the beginning and end of the -repeat to turn the page back. The @code{Page_turn_engraver} can also disable -page turns if the repeat is very short. If you set the context property -@code{minimumRepeatLengthForPageTurn} then the @code{Page_turn_engraver} will -only allow turns in repeats whose duration is longer than this value. - -The page turning commands, @code{\pageTurn}, @code{\noPageTurn} and -@code{\allowPageTurn}, may also be used at top-level, between scores and -top-level markups. - - -@predefined -@funindex \pageTurn -@code{\pageTurn}, -@funindex \noPageTurn -@code{\noPageTurn}, -@funindex \allowPageTurn -@code{\allowPageTurn}. -@endpredefined - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@knownissues - -There should only be one @code{Page_turn_engraver} in a score. If there is more -than one, they will interfere with each other. - - -@node Minimal page breaking -@subsection Minimal page breaking - -@funindex ly:minimal-breaking - -The @code{ly:minimal-breaking} function performs minimal computations to -calculate the page breaking: it fills a page with as many systems as -possible before moving to the next one. Thus, it may be preferred for -scores with many pages, where the other page breaking functions could be -too slow or memory demanding, or a lot of texts. It is enabled using: - -@example -\paper @{ - #(define page-breaking ly:minimal-breaking) -@} -@end example - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Explicit breaks -@subsection Explicit breaks - -Lily sometimes rejects explicit @code{\break} and @code{\pageBreak} -commands. There are two commands to override this behavior: - -@example -\override NonMusicalPaperColumn #'line-break-permission = ##f -\override NonMusicalPaperColumn #'page-break-permission = ##f -@end example - -When @code{line-break-permission} is overridden to false, Lily will insert -line breaks at explicit @code{\break} commands and nowhere else. When -@code{page-break-permission} is overridden to false, Lily will insert -page breaks at explicit @code{\pageBreak} commands and nowhere else. - -@lilypond[quote,verbatim] -\paper { - indent = #0 - ragged-right = ##t - ragged-bottom = ##t -} - -\score { - \new Score \with { - \override NonMusicalPaperColumn #'line-break-permission = ##f - \override NonMusicalPaperColumn #'page-break-permission = ##f - } { - \new Staff { - \repeat unfold 2 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 8 { c'8 c'8 c'8 c'8 } \pageBreak - \repeat unfold 8 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break - \repeat unfold 2 { c'8 c'8 c'8 c'8 } - } - } -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Using an extra voice for breaks -@subsection Using an extra voice for breaks - -Line- and page-breaking information usually appears within note entry directly. - -@example -\new Score @{ - \new Staff @{ - \repeat unfold 2 @{ c'4 c'4 c'4 c'4 @} - \break - \repeat unfold 3 @{ c'4 c'4 c'4 c'4 @} - @} -@} -@end example - -This makes @code{\break} and @code{\pageBreak} commands easy to enter but mixes -music entry with information that specifies how music should lay out -on the page. You can keep music entry and line- and page-breaking -information in two separate places by introducing an extra voice to -contain the breaks. This extra voice -contains only skips together with @code{\break}, @code{pageBreak} and other -breaking layout information. - -@lilypond[quote,verbatim] -\new Score { - \new Staff << - \new Voice { - s1 * 2 \break - s1 * 3 \break - s1 * 6 \break - s1 * 5 \break - } - \new Voice { - \repeat unfold 2 { c'4 c'4 c'4 c'4 } - \repeat unfold 3 { c'4 c'4 c'4 c'4 } - \repeat unfold 6 { c'4 c'4 c'4 c'4 } - \repeat unfold 5 { c'4 c'4 c'4 c'4 } - } - >> -} -@end lilypond - -This pattern becomes especially helpful when overriding -@code{line-break-system-details} and the other useful but long properties of -@code{NonMusicalPaperColumnGrob}, as explained in @ref{Vertical spacing}. - -@lilypond[quote,verbatim] -\new Score { - \new Staff << - \new Voice { - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0)) - s1 * 2 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 35)) - s1 * 3 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 70)) - s1 * 6 \break - - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 105)) - s1 * 5 \break - } - \new Voice { - \repeat unfold 2 { c'4 c'4 c'4 c'4 } - \repeat unfold 3 { c'4 c'4 c'4 c'4 } - \repeat unfold 6 { c'4 c'4 c'4 c'4 } - \repeat unfold 5 { c'4 c'4 c'4 c'4 } - } - >> -} -@end lilypond - - -@seealso -Notation Reference: -@ref{Vertical spacing}. - -Snippets: -@rlsr{Spacing}. - - -@node Vertical spacing -@section Vertical spacing - -@cindex vertical spacing -@cindex spacing, vertical - -Vertical spacing is controlled by three things: the amount of -space available (i.e., paper size and margins), the amount of -space between systems, and the amount of space between -staves inside a system. - -@menu -* Vertical spacing inside a system:: -* Vertical spacing between systems:: -* Explicit staff and system positioning:: -* Two-pass vertical spacing:: -* Vertical collision avoidance:: -@end menu - - -@node Vertical spacing inside a system -@subsection Vertical spacing inside a system - -@cindex distance between staves -@cindex staff distance -@cindex space between staves -@cindex space inside systems - -The height of each system is determined automatically. To prevent -staves from bumping into each other, some minimum distances are set. -By changing these, you can put staves closer together. This -reduces the amount of space each system requires, and may result -in having more systems per page. - -Normally staves are stacked vertically. To make staves maintain a -distance, their vertical size is padded. This is done with the -property @code{minimum-Y-extent}. When applied to a -@rinternals{VerticalAxisGroup}, it controls the size of a horizontal -line, such as a staff or a line of lyrics. @code{minimum-Y-extent} -takes a pair of numbers, so -if you want to make it smaller than its default @code{#'(-4 . 4)} -then you could set - -@example -\override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) -@end example - -@noindent -This sets the vertical size of the current staff to 3 staff spaces on -either side of the center staff line. The value @code{(-3 . 3)} is -interpreted as an interval, where the center line is the 0, so the -first number is generally negative. The numbers need not match; -for example, the staff can be made larger at the bottom by setting -it to @code{(-6 . 4)}. - -After page breaks are determined, the vertical spacing within each -system is reevaluated in order to fill the page more evenly; if a page -has space left over, systems are stretched in order to fill that space. -The amount of stretching can be configured though the @code{max-stretch} -property of the @rinternals{VerticalAlignment} grob. By default, -@code{max-stretch} is set to zero, disabling stretching. To enable -stretching, a sane value for @code{max-stretch} -is @code{ly:align-interface::calc-max-stretch}. - -In some situations, you may want to stretch most of a system while -leaving some parts fixed. For example, if a piano part occurs in the -middle of an orchestral score, you may want to leave the piano staves -close to each other while stretching the rest of the score. The -@code{keep-fixed-while-stretching} property of -@rinternals{VerticalAxisGroup} can be used to achieve this. When set -to @code{##t}, this property keeps its staff (or line of lyrics) from -moving relative to the one directly above it. In the example above, -you would override @code{keep-fixed-while-stretching} to @code{##t} in -the second piano staff: - -@lilypond[verbatim] -#(set-default-paper-size "a6") -#(set-global-staff-size 14.0) - -\book { -\paper { - ragged-last-bottom = ##f -} - -\new Score \with -{ - \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch -} -{ -\new GrandStaff -<< - \new StaffGroup - << - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - >> - - \new PianoStaff - << - \new Staff {c' d' e' f'} - \new Staff \with { - \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t - } - {c' d' e' f'} - >> - - \new StaffGroup - << - \new Staff {c' d' e' f'} - \new Staff {c' d' e' f'} - >> ->> -} -} -@end lilypond - -Vertical alignment of staves is handled by the -@code{VerticalAlignment} object. The context parameters -specifying the vertical extent are described in connection with -the @code{Axis_group_engraver}. - - -@seealso -Snippets: -@rlsr{Spacing}. - -@c @lsr{spacing,page-spacing.ly}, -@c @lsr{spacing,alignment-vertical-spacing.ly}. - -Internals Reference: -@rinternals{VerticalAlignment}, -@rinternals{Axis_group_engraver}. - - -@node Vertical spacing between systems -@subsection Vertical spacing between systems - -Space between systems are controlled by four @code{\paper} variables, - -@example -\paper @{ - between-system-space = 1.5\cm - between-system-padding = #1 - ragged-bottom=##f - ragged-last-bottom=##f -@} -@end example - -When only a couple of flat systems are placed on a page, the resulting -vertical spacing may be non-elegant: one system at the top of the page, -and the other at the bottom, with a huge gap between them. To avoid this -situation, the space added between the systems can be limited. This -feature is activated by setting to @code{#t} the -@code{page-limit-inter-system-space} variable in the @code{\paper} -block. The paper variable @code{page-limit-inter-system-space-factor} -determines how much the space can be increased: for instance, the value -@code{1.3} means that the space can be 30% larger than what it would be -on a ragged-bottom page. - -In the following example, if the inter system space were not limited, -the second system of page 1 would be placed at the page bottom. By -activating the space limitation, the second system is placed closer to -the first one. By setting @code{page-limit-inter-system-space-factor} to -@code{1}, the spacing would the same as on a ragged-bottom page, like -the last one. - -@lilypond[verbatim] -#(set-default-paper-size "a6") -\book { - \paper { - page-limit-inter-system-space = ##t - page-limit-inter-system-space-factor = 1.3 - - oddFooterMarkup = \markup "page bottom" - evenFooterMarkup = \markup "page bottom" - oddHeaderMarkup = \markup \fill-line { - "page top" \fromproperty #'page:page-number-string } - evenHeaderMarkup = \markup \fill-line { - "page top" \fromproperty #'page:page-number-string } - } - \new Staff << \repeat unfold 4 { g'4 g' g' g' \break } - { s1*2 \pageBreak } >> -} -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Explicit staff and system positioning -@subsection Explicit staff and system positioning - -One way to understand the @code{VerticalAxisGroup} and @code{\paper} -settings explained in the previous two sections is as a collection of -different settings that primarily concern the amount of vertical padding -different staves and systems running down the page. - -It is possible to approach vertical spacing in a different way using -@code{NonMusicalPaperColumn #'line-break-system-details}. Where -@code{VerticalAxisGroup} and @code{\paper} settings specify vertical padding, -@code{NonMusicalPaperColumn #'line-break-system-details} specifies exact -vertical positions on the page. - -@code{NonMusicalPaperColumn #'line-break-system-details} accepts an associative -list of five different settings: - -@itemize -@item @code{X-offset} -@item @code{Y-offset} -@item @code{alignment-offsets} -@item @code{alignment-extra-space} -@item @code{fixed-alignment-extra-space} -@end itemize - -Grob overrides, including the overrides for @code{NonMusicalPaperColumn} -below, can occur in any of three different places in an input file: - -@itemize -@item in the middle of note entry directly -@item in a @code{\context} block -@item in the @code{\with} block -@end itemize - -When we override @code{NonMusicalPaperColumn}, we use the usual -@code{\override} command in @code{\context} blocks and in the -@code{\with} block. On the other hand, when we override -@code{NonMusicalPaperColumn} in the middle of note entry, -use the special @code{\overrideProperty} command. Here are some -example @code{NonMusicalPaperColumn} overrides with the special -@code{\overrideProperty} command: - -@example -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((Y-offset . 40)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20) (Y-offset . 40)) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((alignment-offsets . (0 -15))) - -\overrideProperty NonMusicalPaperColumn - #'line-break-system-details #'((X-offset . 20) (Y-offset . 40) - (alignment-offsets . (0 -15))) -@end example - -To understand how each of these different settings work, we begin -by looking at an example that includes no overrides at all. - -@c \book { } is required in these examples to ensure the spacing -@c overrides can be seen between systems. -np - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - s1*5 \break - s1*5 \break - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -This score isolates line- and page-breaking information in a dedicated -voice. This technique of creating a breaks voice will help keep layout -separate from music entry as our example becomes more complicated. -See @ref{Using an extra voice for breaks}. - -Explicit @code{\breaks} evenly divide the music into six measures per -line. Vertical spacing results from LilyPond's defaults. To set -the vertical startpoint of each system explicitly, we can set -the @code{Y-offset} pair in the @code{line-break-system-details} -attribute of the @code{NonMusicalPaperColumn} grob: - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0)) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 40)) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 80)) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -Note that @code{line-break-system-details} takes an associative list of -potentially many values, but that we set only one value here. Note, -too, that the @code{Y-offset} property here determines the exact vertical -position on the page at which each new system will render. - -Now that we have set the vertical startpoint of each system -explicitly, we can also set the vertical startpoint of each staff -within each system manually. We do this using the @code{alignment-offsets} -subproperty of @code{line-break-system-details}. - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 20) - (alignment-offsets . (0 -15))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 60) - (alignment-offsets . (0 -15))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 100) - (alignment-offsets . (0 -15))) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new Staff { - \repeat unfold 15 { d'4 d' d' d' } - } - >> - } -} -@end lilypond - -Note that here we assign two different values to the -@code{line-break-system-details} attribute of the -@code{NonMusicalPaperColumn} grob. Though the -@code{line-break-system-details} attribute alist accepts many -additional spacing parameters (including, for example, a corresponding -@code{X-offset} pair), we need only set the @code{Y-offset} and -@code{alignment-offsets} pairs to control the vertical startpoint of -every system and every staff. Finally, note that @code{alignment-offsets} -specifies the vertical positioning of staves but not of staff groups. - -@lilypond[quote] -\header { tagline = ##f } -\paper { left-margin = 0\mm } -\book { - \score { - << - \new Staff << - \new Voice { - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 0) - (alignment-offsets . (0 -30 -40))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 60) - (alignment-offsets . (0 -10 -20))) - s1*5 \break - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details #'((Y-offset . 100) - (alignment-offsets . (0 -10 -40))) - s1*5 \break - } - \new Voice { \repeat unfold 15 { c'4 c' c' c' } } - >> - \new StaffGroup << - \new Staff { \repeat unfold 15 { d'4 d' d' d' } } - \new Staff { \repeat unfold 15 { e'4 e' e' e' } } - >> - >> - } -} -@end lilypond - -Some points to consider: - -@itemize -@item When using @code{alignment-offsets}, lyrics count as a staff. - -@item The units of the numbers passed to @code{X-offset}, -@code{Y-offset} and @code{alignment-offsets} are interpreted as multiples -of the distance between adjacent staff lines. Positive values move staves -and lyrics up, negative values move staves and lyrics down. - -@item Because the @code{NonMusicalPaperColumn #'line-break-system-details} -settings given here allow the positioning of staves and systems anywhere -on the page, it is possible to violate paper or margin boundaries or even -to print staves or systems on top of one another. Reasonable values -passed to these different settings will avoid this. -@end itemize - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Two-pass vertical spacing -@subsection Two-pass vertical spacing - -@warning{Two-pass vertical spacing is deprecated and will be removed in -a future version of LilyPond. Systems are now stretched automatically -in a single pass. See @ref{Vertical spacing inside a system}.} - -In order to automatically stretch systems so that they should fill the -space left on a page, a two-pass technique can be used: - -@enumerate -@item In the first pass, the amount of vertical space used to increase -the height of each system is computed and dumped to a file. -@item In the second pass, spacing inside the systems are -stretched according to the data in the page layout file. -@end enumerate - -The @code{ragged-bottom} property adds space between systems, while -the two-pass technique adds space between staves inside a system. - -To allow this behavior, a @code{tweak-key} variable has to be set in -each score @code{\layout} block, and the tweaks included in each score -music, using the @code{\scoreTweak} music function. - -@quotation -@verbatim -%% include the generated page layout file: -\includePageLayoutFile - -\score { - \new StaffGroup << - \new Staff << - %% Include this score tweaks: - \scoreTweak "scoreA" - { \clef french c''1 \break c''1 } - >> - \new Staff { \clef soprano g'1 g'1 } - \new Staff { \clef mezzosoprano e'1 e'1 } - \new Staff { \clef alto g1 g1 } - \new Staff { \clef bass c1 c1 } - >> - \header { - piece = "Score with tweaks" - } - %% Define how to name the tweaks for this score: - \layout { #(define tweak-key "scoreA") } -} -@end verbatim -@end quotation - -For the first pass, the @code{dump-tweaks} option should be set to -generate the page layout file. - -@example -lilypond -dbackend=null -d dump-tweaks .ly -lilypond .ly -@end example - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Vertical collision avoidance -@subsection Vertical collision avoidance - -@funindex outside-staff-priority -@funindex outside-staff-padding -@funindex outside-staff-horizontal-padding - -Intuitively, there are some objects in musical notation that belong -to the staff and there are other objects that should be placed outside -the staff. Objects belonging outside the staff include things such as -rehearsal marks, text and dynamic markings (from now on, these will -be called outside-staff objects). LilyPond's rule for the -vertical placement of outside-staff objects is to place them as close -to the staff as possible but not so close that they collide with -another object. - -LilyPond uses the @code{outside-staff-priority} property to determine -whether a grob is an outside-staff object: if @code{outside-staff-priority} -is a number, the grob is an outside-staff object. In addition, -@code{outside-staff-priority} tells LilyPond in which order the objects -should be placed. - -First, LilyPond places all the objects that do not belong outside -the staff. Then it sorts the outside-staff objects according to their -@code{outside-staff-priority} (in increasing order). One by one, LilyPond -takes the outside-staff objects and places them so that they do -not collide with any objects that have already been placed. That -is, if two outside-staff grobs are competing for the same space, the one -with the lower @code{outside-staff-priority} will be placed closer to -the staff. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -c4_"Text"\pp -r2. -\once \override TextScript #'outside-staff-priority = #1 -c4_"Text"\pp % this time the text will be closer to the staff -r2. -% by setting outside-staff-priority to a non-number, -% we disable the automatic collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\once \override DynamicLineSpanner #'outside-staff-priority = ##f -c4_"Text"\pp % now they will collide -@end lilypond - -The vertical padding between an outside-staff object and the -previously-positioned grobs can be controlled with -@code{outside-staff-padding}. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\once \override TextScript #'outside-staff-padding = #0 -a'^"This text is placed very close to the note" -\once \override TextScript #'outside-staff-padding = #3 -c^"This text is padded away from the previous text" -c^"This text is placed close to the previous text" -@end lilypond - - -By default, outside-staff objects are placed only to avoid -a horizontal collision with previously-positioned grobs. This -can lead to situations in which objects are placed very close to each -other horizontally. The vertical spacing between staffs can -also be set so that outside staff objects are interleaved. -Setting @code{outside-staff-horizontal-padding} -causes an object to be offset vertically so that such a situation -doesn't occur. - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -% the markup is too close to the following note -c4^"Text" -c4 -c''2 -% setting outside-staff-horizontal-padding fixes this -R1 -\once \override TextScript #'outside-staff-horizontal-padding = #1 -c,,4^"Text" -c4 -c''2 -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Horizontal spacing -@section Horizontal spacing - -@cindex horizontal spacing -@cindex spacing, horizontal - -@menu -* Horizontal spacing overview:: -* New spacing area:: -* Changing horizontal spacing:: -* Line length:: -* Proportional notation:: -@end menu - - -@node Horizontal spacing overview -@subsection Horizontal spacing overview - -The spacing engine translates differences in durations into stretchable -distances (@q{springs}) of differing lengths. Longer durations get -more space, shorter durations get less. The shortest durations get a -fixed amount of space (which is controlled by -@code{shortest-duration-space} in the @rinternals{SpacingSpanner} -object). The longer the duration, the more space it gets: doubling a -duration adds a fixed amount (this amount is controlled by -@code{spacing-increment}) of space to the note. - -For example, the following piece contains lots of half, quarter, and -8th notes; the eighth note is followed by 1 note head width (NHW). -The quarter note is followed by 2 NHW, the half by 3 NHW, etc. - -@lilypond[quote,fragment,verbatim,relative=1] -c2 c4. c8 c4. c8 c4. c8 c8 -c8 c4 c4 c4 -@end lilypond - -Normally, @code{spacing-increment} is set to 1.2 staff space, which is -approximately the width of a note head, and -@code{shortest-duration-space} is set to 2.0, meaning that the -shortest note gets 2.4 staff space (2.0 times the -@code{spacing-increment}) of horizontal space. This space is counted -from the left edge of the symbol, so the shortest notes are generally -followed by one NHW of space. - -If one would follow the above procedure exactly, then adding a single -32nd note to a score that uses 8th and 16th notes, would widen up the -entire score a lot. The shortest note is no longer a 16th, but a 32nd, -thus adding 1 NHW to every note. To prevent this, the shortest -duration for spacing is not the shortest note in the score, but rather -the one which occurs most frequently. - - -The most common shortest duration is determined as follows: in every -measure, the shortest duration is determined. The most common shortest -duration is taken as the basis for the spacing, with the stipulation -that this shortest duration should always be equal to or shorter than -an 8th note. The shortest duration is printed when you run -@code{lilypond} with the @code{--verbose} option. - -These durations may also be customized. If you set the -@code{common-shortest-duration} in @rinternals{SpacingSpanner}, then -this sets the base duration for spacing. The maximum duration for this -base (normally an 8th), is set through @code{base-shortest-duration}. - -@funindex common-shortest-duration -@funindex base-shortest-duration -@funindex stem-spacing-correction -@funindex spacing - -Notes that are even shorter than the common shortest note are -followed by a space that is proportional to their duration relative to -the common shortest note. So if we were to add only a few 16th notes -to the example above, they would be followed by half a NHW: - -@lilypond[quote,fragment,verbatim,relative=2] -c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 -@end lilypond - - -In the introduction (see @rlearning{Engraving}), it was explained that stem -directions influence spacing. This is controlled with the -@code{stem-spacing-correction} property in the -@rinternals{NoteSpacing}, object. These are generated for every -@rinternals{Voice} context. The @code{StaffSpacing} object -(generated in @rinternals{Staff} context) contains the same property -for controlling the stem/bar line spacing. The following example shows -these corrections, once with default settings, and once with -exaggerated corrections: - -@lilypond[quote,ragged-right] -{ - c'4 e''4 e'4 b'4 | - b'4 e''4 b'4 e''4| - \override Staff.NoteSpacing #'stem-spacing-correction = #1.5 - \override Staff.StaffSpacing #'stem-spacing-correction = #1.5 - c'4 e''4 e'4 b'4 | - b'4 e''4 b'4 e''4| -} -@end lilypond - -Proportional notation is supported; see @ref{Proportional notation}. - - -@seealso -Snippets: -@rlsr{Spacing}. - -Internals Reference: -@rinternals{SpacingSpanner}, -@rinternals{NoteSpacing}, -@rinternals{StaffSpacing}, -@rinternals{NonMusicalPaperColumn}. - - -@knownissues - -There is no convenient mechanism to manually override spacing. The -following work-around may be used to insert extra space into a score, -adjusting the padding value as necessary. -@example - \override Score.NonMusicalPaperColumn #'padding = #10 -@end example - -No work-around exists for decreasing the amount of space. - - -@node New spacing area -@subsection New spacing area - -New sections with different spacing parameters can be started with -@code{newSpacingSection}. This is useful when there are -sections with a different notions of long and short notes. - -In the following example, the time signature change introduces a new -section, and hence the 16ths notes are spaced wider. - -@lilypond[relative,fragment,verbatim,quote] -\time 2/4 -c4 c8 c -c8 c c4 c16[ c c8] c4 -\newSpacingSection -\time 4/16 -c16[ c c8] -@end lilypond - -The @code{\newSpacingSection} command creates a new -@code{SpacingSpanner} object, and hence new @code{\override}s -may be used in that location. - - -@seealso -Snippets: -@rlsr{Spacing}. - -Internals Reference: -@rinternals{SpacingSpanner}. - - -@node Changing horizontal spacing -@subsection Changing horizontal spacing - -Horizontal spacing may be altered with the -@code{base-shortest-duration} property. Here -we compare the same music; once without altering -the property, and then altered. Larger values -of @code{ly:make-moment} will produce smaller -music. Note that @code{ly:make-moment} constructs -a duration, so @code{1 4} is a longer duration -than @code{1 16}. - -@lilypond[verbatim,line-width=12\cm] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } -} -@end lilypond - -@lilypond[verbatim,line-width=12\cm] -\score { - \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 16) - } - } -} -@end lilypond - - -@snippets - -By default, spacing in tuplets depends on various non-duration -factors (such as accidentals, clef changes, etc). To disregard -such symbols and force uniform equal-duration spacing, use -@code{Score.SpacingSpanner #'uniform-stretching}. This -property can only be changed at the beginning of a score, - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\new Score \with { - \override SpacingSpanner #'uniform-stretching = ##t -} << - \new Staff{ - \times 4/5 { - c8 c8 c8 c8 c8 - } - c8 c8 c8 c8 - } - \new Staff{ - c8 c8 c8 c8 - \times 4/5 { - c8 c8 c8 c8 c8 - } - } ->> -@end lilypond - -When @code{strict-note-spacing} is set, notes are spaced without -regard for clefs, bar lines, and grace notes, - -@lilypond[quote,ragged-right,relative=2,fragment,verbatim] -\override Score.SpacingSpanner #'strict-note-spacing = ##t -\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } -@end lilypond - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Line length -@subsection Line length - -@cindex page breaks -@cindex breaking pages - -@funindex indent -@funindex line-width -@funindex ragged-right -@funindex ragged-last - -@c Although line-width can be set in \layout, it should be set in paper -@c block, to get page layout right. -@c Setting indent in \paper block makes not much sense, but it works. - -@c Bit verbose and vague, use examples? -The most basic settings influencing the spacing are @code{indent} and -@code{line-width}. They are set in the @code{\layout} block. They -control the indentation of the first line of music, and the lengths of -the lines. - -If @code{ragged-right} is set to true in the @code{\layout} block, then -systems ends at their natural horizontal length, instead of being spread -horizontally to fill the whole line. This is useful for -short fragments, and for checking how tight the natural spacing is. - -@cindex page layout -@cindex vertical spacing - -The option @code{ragged-last} is similar to @code{ragged-right}, but -only affects the last line of the piece. No restrictions are put on -that line. The result is similar to formatting text paragraphs. In a -paragraph, the last line simply takes its natural horizontal length. -@c Note that for text there are several options for the last line. -@c While Knuth TeX uses natural length, lead typesetters use the same -@c stretch as the previous line. eTeX uses \lastlinefit to -@c interpolate between both these solutions. - -@example -\layout @{ - indent = #0 - line-width = #150 - ragged-last = ##t -@} -@end example - - -@seealso -Snippets: -@rlsr{Spacing}. - - -@node Proportional notation -@subsection Proportional notation - -LilyPond supports proportional notation, a type of horizontal spacing -in which each note consumes an amount of horizontal space exactly -equivalent to its rhythmic duration. This type of proportional spacing -is comparable to horizontal spacing on top of graph paper. Some late -20th- and early 21st-century scores use proportional notation to -clarify complex rhythmic relationships or to facilitate the placement -of timelines or other graphics directly in the score. - -LilyPond supports five different settings for proportional notation, -which may be used together or alone: - -@itemize -@item @code{proportionalNotationDuration} -@item @code{uniform-stretching} -@item @code{strict-note-spacing} -@item @code{\remove Separating_line_group_engraver} -@item @code{\override PaperColumn #'used = ##t} -@end itemize - -In the examples that follow, we explore these five different -proportional notation settings and examine how these settings interact. - -We start with the following one-measure example, which uses classical -spacing with ragged-right turned on. - -@lilypond[quote,verbatim,ragged-right] -\new Score << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -Notice that the half note which begins the measure takes up far less -than half of the horizontal space of the measure. Likewise, the -sixteenth notes and sixteenth-note quintuplets (or twentieth notes) -which end the measure together take up far more than half the -horizontal space of the measure. - -In classical engraving, this spacing may be exactly what we want -because we can borrow horizontal space from the half note and conserve -horizontal space across the measure as a whole. - -On the other hand, if we want to insert a measured timeline or other -graphic above or below our score, we need proportional notation. We -turn proportional notation on with the proportionalNotationDuration -setting. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -The half note at the beginning of the measure and the faster notes in -the second half of the measure now occupy equal amounts of horizontal -space. We could place a measured timeline or graphic above or below -this example. - -The @code{proportionalNotationDuration} setting is a context setting that -lives in @code{Score}. Recall that context settings appear in one of -three locations in our input file -- in a @code{\with} block, in a -@code{\context} block, or directly in music entry -preceded by the @code{\set} command. As with all -context settings, users can pick which of the three different -locations they would like to set @code{proportionalNotationDuration}. - -The @code{proportionalNotationDuration} setting takes a single argument, -which is the reference duration against which all music will be -spaced. The LilyPond Scheme function make-moment takes two arguments --- a numerator and denominator which together express some fraction of -a whole note. The call @code{#(ly:make-moment 1 20)} therefore produces a -reference duration of a twentieth note. The values -@code{#(ly:make-moment 1 16)}, @code{#(ly:make-moment 1 8)}, and -@code{#(ly:make-moment 3 97)} are all possible as well. - -How do we select the right reference duration to pass to -@code{proportionalNotationDuration}? Usually by a process of trial and error, -beginning with a duration close to the fastest (or smallest) duration -in the piece. Smaller reference durations space music loosely; larger -reference durations space music tightly. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 8) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> - -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 16) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> - -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 32) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } ->> -@end lilypond - -Note that too large a reference duration -- such as the eighth note, -above -- spaces music too tightly and can cause note head collisions. -Note also that proportional notation in general takes up more -horizontal space that does classical spacing. Proportional spacing -provides rhythmic clarity at the expense of horizontal space. - -Next we examine how to optimally space overlapping tuplets. - -We start by examining what happens to our original example, with -classical spacing, when we add a second staff with a different type of -tuplet. - -@lilypond[quote,verbatim,ragged-right] -\new Score << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -The spacing is bad because the evenly notes of the bottom staff do not -stretch uniformly. Classical engraving includes very few complex -triplets and so classical engraving rules can generate this type of -result. Setting @code{proportionalNotationDuration} remedies this -situation considerably. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -But if we look very carefully we can see that notes of the second half -of the 9-tuplet space ever so slightly more widely than do the notes -of the first half of the 9-tuplet. To ensure uniform stretching, we -turn on @code{uniform-stretching}, which is a property of -@code{SpacingSpanner}. - -@lilypond[quote,verbatim,ragged-right] -\new Score \with { - proportionalNotationDuration = #(ly:make-moment 1 20) - \override SpacingSpanner #'uniform-stretching = ##t -} << - \new RhythmicStaff { - c'2 - c'16 c'16 c'16 c'16 - \times 4/5 { - c'16 c'16 c'16 c'16 c'16 - } - } - \new RhythmicStaff { - \times 8/9 { - c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 - } - } ->> -@end lilypond - -Our two-staff example now spaces exactly, our rhythmic -relationships are visually clear, and we can include a measured -timeline or graphic if we want. - -Note that the LilyPond's proportional notation package expects -that all proportional scores set the SpacingSpanner's -'uniform-stretching attribute to ##t. Setting -proportionalNotationDuration without also setting the -SpacingSpanner's 'uniform-stretching attribute to ##t will, for -example, cause Skips to consume an incorrect amount of horizontal -space. - -The SpacingSpanner is an abstract grob that lives in the Score -context. As with our settings of proportionalNotationDuration, -overrides to the SpacingSpanner can occur in any of three -different places in our input file – in the Score \with block, in -a Score \context block, or in note entry directly. - -There is by default only one @code{SpacingSpanner} per @code{Score}. This -means that, by default, @code{uniform-stretching} is either turned on for the -entire score or turned off for the entire score. We can, however, -override this behavior and turn on different spacing features at -different places in the score. We do this with the command -@code{\newSpacingSection}. See @ref{New spacing area}, for more info. - -Next we examine the effects of the @code{Separating_line_group_engraver} and -see why proportional scores frequently remove this engraver. The following -example shows that there is a small amount of @qq{preferatory} space -just before the first note in each system. - -@lilypond[quote,verbatim,ragged-right] -\paper { - indent = #0 -} - -\new Staff { - c'1 - \break - c'1 -} -@end lilypond - - -The amount of this preferatory space is the same whether after a time -signature, a key signature or a clef. @code{Separating_line_group_engraver} -is responsible for this space. Removing @code{Separating_line_group_engraver} -reduces this space to zero. - -@lilypond[quote,verbatim,ragged-right] -\paper { - indent = #0 -} - -\new Staff \with { - \remove Separating_line_group_engraver -} { - c'1 - \break - c'1 -} -@end lilypond - -Nonmusical elements like time signatures, key signatures, clefs and -accidentals are problematic in proportional notation. None of these -elements has rhythmic duration. But all of these elements consume -horizontal space. Different proportional scores approach these -problems differently. - -It may be possible to avoid spacing problems with key signatures -simply by not having any. This is a valid option since most -proportional scores are contemporary music. The same may be true -of time signatures, especially for those scores -that include a measured timeline or other graphic. But these scores -are exceptional and most proportional scores include at least some -time signatures. Clefs and accidentals are even more essential. - -So what strategies exist for spacing nonmusical elements in a -proportional context? One good option is the @code{strict-note-spacing} -property of @code{SpacingSpanner}. Compare the two scores below: - -@lilypond[quote,verbatim,ragged-right] -\new Staff { - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - c''8 - c''8 - c''8 - \clef alto - d'8 - d'2 -} - -\new Staff { - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - \override Score.SpacingSpanner #'strict-note-spacing = ##t - c''8 - c''8 - c''8 - \clef alto - d'8 - d'2 -} -@end lilypond - -Both scores are proportional, but the spacing in the first score -is too loose because of the clef change. The spacing of the second -score remains strict, however, because strict-note-spacing is -turned on. Turning on strict-note-spacing causes the width of -time signatures, key signatures, clefs and accidentals to play no -part in the spacing algorithm. - -In addition to the settings given here, there are other settings -that frequently appear in proportional scores. These include: - -@itemize -@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t} -@item @code{tupletFullLength = ##t} -@item @code{\override Beam #'breakable = ##t} -@item @code{\override Glissando #'breakable = ##t} -@item @code{\override TextSpanner #'breakable = ##t} -@item @code{\remove Forbid_line_break_engraver in the Voice context} -@end itemize - -These settings space grace notes strictly, extend tuplet brackets to -mark both rhythmic start- and stop-points, and allow spanning elements -to break across systems and pages. See the respective parts of the manual -for these related settings. - - -@seealso -Notation Reference: -@ref{New spacing area}. - -Snippets: -@rlsr{Spacing}. - - -@node Fitting music onto fewer pages -@section Fitting music onto fewer pages - -Sometimes you can end up with one or two staves on a second -(or third, or fourth...) page. This is annoying, especially -if you look at previous pages and it looks like there is plenty -of room left on those. - -When investigating layout issues, @code{annotate-spacing} is an -invaluable tool. This command prints the values of various layout -spacing variables; for more details see the following section, -@ref{Displaying spacing}. - -@menu -* Displaying spacing:: -* Changing spacing:: -@end menu - - -@node Displaying spacing -@subsection Displaying spacing - -@funindex annotate-spacing -@cindex spacing, display of layout - -To graphically display the dimensions of vertical layout variables -that may be altered for page formatting, set -@code{annotate-spacing} in the @code{\paper} block: - -@c need to have \book{} otherwise we get the separate systems. -hwn -@lilypond[verbatim,quote] -#(set-default-paper-size "a6" 'landscape) -\book { - \score { { c4 } } - \paper { annotate-spacing = ##t } -} -@end lilypond - - -@noindent -All layout dimensions are displayed in staff-spaces, regardless -of the units specified in the @code{\paper} or @code{\layout} block. -In the above example, @code{paper-height} has a value of 59.75 -@code{staff-spaces}, and the @code{staff-size} is 20 points (the -default value). Note that: - -@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm} - -@item 1 point -@tab = (25.4/72.27) mm - -@item 1 staff-space -@tab = (@code{staff-size})/4 pts -@item -@tab = (@code{staff-size})/4 * (25.4/72.27) mm - -@end multitable - -@noindent -In this case, one @code{staff-space} is approximately equal to -1.757mm. Thus the @code{paper-height} measurement of 59.75 -@code{staff-spaces} is equivalent to 105 millimeters, the height -of @code{a6} paper in landscape orientation. The pairs -(@var{a},@var{b}) are intervals, where @var{a} is the lower -edge and @var{b} the upper edge of the interval. - - -@seealso -@ref{Setting the staff size} -Snippets: -@rlsr{Spacing}. - - -@node Changing spacing -@subsection Changing spacing - -The output of @code{annotate-spacing} reveals vertical dimensions -in great detail. For details about modifying margins and other -layout variables, see @ref{Page formatting}. - -Other than margins, there are a few other options to save space: - -@itemize -@item -Force systems to move as close together as possible (to fit as -many systems as possible onto a page) while being spaced so that -there is no blank space at the bottom of the page. - -@example -\paper @{ - between-system-padding = #0.1 - between-system-space = #0.1 - ragged-last-bottom = ##f - ragged-bottom = ##f -@} -@end example - -@item -Force the number of systems. This can help in two ways. Just -setting a value, even the same value as the number of systems -being typeset by default, will sometimes cause more systems to -be fitted onto each page, as an estimation step is then bypassed, -giving a more accurate fit to each page. Also, forcing an actual -reduction in the number of systems may save a further page. For -example, if the default layout has 11 systems, the following -assignment will force a layout with 10 systems. - -@example -\paper @{ - system-count = #10 -@} -@end example - -@item -Avoid (or reduce) objects that increase the vertical size of a -system. For example, volta repeats (or alternate repeats) require -extra space. If these repeats are spread over two systems, they -will take up more space than one system with the volta repeats and -another system without. For example, dynamics that @q{stick out} of -a system can be moved closer to the staff: - -@lilypond[verbatim,quote,relative=1] -e4 c g\f c -\override DynamicText #'extra-offset = #'( -2.2 . 2.0) -e4 c g\f c -@end lilypond - -@item -Alter the horizontal spacing via @code{SpacingSpanner}. For more -details, see @ref{Changing horizontal spacing}. The following -example illustrates the default spacing: - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | - f4 d d2 | - c4 d e f | - g4 g g2 | - g4 e e2 | - } -} -@end lilypond - -@noindent -The next example modifies @code{common-shortest-duration} from a -value of @code{1/4} to @code{1/2}. The quarter note is the most -common and shortest duration in this example, so by making this -duration longer, a @q{squeezing} effect occurs: - -@lilypond[verbatim,quote] -\score { - \relative c'' { - g4 e e2 | - f4 d d2 | - c4 d e f | - g4 g g2 | - g4 e e2 | - } - \layout { - \context { - \Score - \override SpacingSpanner - #'common-shortest-duration = #(ly:make-moment 1 2) - } - } -} -@end lilypond - -@noindent -The @code{common-shortest-duration} property cannot be modified -dynamically, so it must always be placed in a @code{\context} -block so that it applies to the whole score. - -@end itemize - - -@seealso -Notation Reference: -@ref{Page formatting}, -@ref{Changing horizontal spacing}. - -Snippets: -@rlsr{Spacing}. diff --git a/Documentation/user/specialist.itely b/Documentation/user/specialist.itely deleted file mode 100644 index 98b7595821..0000000000 --- a/Documentation/user/specialist.itely +++ /dev/null @@ -1,38 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Specialist notation -@chapter Specialist notation - -This chapter explains how to create musical notation for specific -types of instrument or in specific styles. - -@menu -* Vocal music:: -* Keyboard and other multi-staff instruments:: -* Unfretted string instruments:: -* Fretted string instruments:: -* Percussion:: -* Wind instruments:: -* Chord notation:: -* Ancient notation:: -* World music:: -@end menu - -@include vocal.itely -@include keyboards.itely -@include unfretted-strings.itely -@include fretted-strings.itely -@include percussion.itely -@include wind.itely -@include chords.itely -@include ancient.itely -@include world.itely - diff --git a/Documentation/user/staff.itely b/Documentation/user/staff.itely deleted file mode 100644 index a286e7b535..0000000000 --- a/Documentation/user/staff.itely +++ /dev/null @@ -1,1322 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Staff notation -@section Staff notation - -@lilypondfile[quote]{staff-headword.ly} - -This section explains how to influence the appearance of staves, -how to print scores with more than one staff, and how to add tempo -indications and cue notes to staves. - -@menu -* Displaying staves:: -* Modifying single staves:: -* Writing parts:: -@end menu - - -@node Displaying staves -@subsection Displaying staves - -This section describes the different methods of creating and -grouping staves. - -@menu -* Instantiating new staves:: -* Grouping staves:: -* Nested staff groups:: -@end menu - - -@node Instantiating new staves -@unnumberedsubsubsec Instantiating new staves - -@cindex new staff -@cindex staff initiation -@cindex staff instantiation -@cindex staff, new -@cindex staff, single -@cindex staff, drum -@cindex staff, percussion -@cindex drum staff -@cindex percussion staff -@cindex Gregorian transcription staff -@cindex rhythmic staff -@cindex tabstaff -@cindex tablature - -@funindex \drummode -@funindex drummode - -@notation{Staves} (singular: @notation{staff}) are created with -the @code{\new} or @code{\context} commands. For details, see -@ref{Creating contexts}. - -The basic staff context is @code{Staff}: - -@lilypond[verbatim,quote,relative=2] -\new Staff { c4 d e f } -@end lilypond - -The @code{DrumStaff} context creates a five-line staff set up for -a typical drum set. Each instrument is shown with a different -symbol. The instruments are entered in drum mode following a -@code{\drummode} command, with each instrument specified by name. -For details, see @ref{Percussion staves}. - -@lilypond[verbatim,quote] -\new DrumStaff { - \drummode { cymc hh ss tomh } -} -@end lilypond - -@code{RhythmicStaff} creates a single-line staff that only -displays the rhythmic values of the input. Real durations are -preserved. For details, see @ref{Showing melody rhythms}. - -@lilypond[verbatim,quote,relative=2] -\new RhythmicStaff { c4 d e f } -@end lilypond - -@code{TabStaff} creates a tablature with six strings in standard -guitar tuning. For details, see @ref{Default tablatures}. - -@lilypond[verbatim,quote,relative=2] -\new TabStaff { c4 d e f } -@end lilypond - -There are two staff contexts specific for the notation of ancient -music: @code{MensuralStaff} and @code{VaticanaStaff}. They are -described in @ref{Pre-defined contexts}. - -The @code{GregorianTranscriptionStaff} context creates a staff to -notate modern Gregorian chant. It does not show bar lines. - -@lilypond[verbatim,quote,relative=2] -\new GregorianTranscriptionStaff { c4 d e f e d } -@end lilypond - -New single staff contexts may be defined. For details, see -@ref{Defining new contexts}. - - -@seealso -Music Glossary: -@rglos{staff}, -@rglos{staves}. - -Notation Reference: -@ref{Creating contexts}, -@ref{Percussion staves}, -@ref{Showing melody rhythms}, -@ref{Default tablatures}, -@ref{Pre-defined contexts}, -@ref{Staff symbol}, -@ref{Gregorian chant contexts}, -@ref{Mensural contexts}, -@ref{Defining new contexts}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{Staff}, -@rinternals{DrumStaff}, -@rinternals{GregorianTranscriptionStaff}, -@rinternals{RhythmicStaff}, -@rinternals{TabStaff}, -@rinternals{MensuralStaff}, -@rinternals{VaticanaStaff}, -@rinternals{StaffSymbol}. - - -@node Grouping staves -@unnumberedsubsubsec Grouping staves - -@cindex start of system -@cindex staff, multiple -@cindex staves, multiple -@cindex system start delimiters -@cindex bracket, vertical -@cindex brace, vertical -@cindex choir staff -@cindex grand staff -@cindex piano staff -@cindex staff group -@cindex staff, choir -@cindex staff, piano -@cindex staff, grand -@cindex system - -Various contexts exist to group single staves together in order to -form multi-stave systems. Each grouping context sets the style of -the system start delimiter and the behavior of bar lines. - -If no context is specified, the default properties will be used: -the group is started with a vertical line, and the bar lines are -not connected. - -@lilypond[verbatim,quote,relative=2] -<< - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In the @code{StaffGroup} context, the group is started with a -bracket and bar lines are drawn through all the staves. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In a @code{ChoirStaff}, the group starts with a bracket, but bar -lines are not connected. - -@lilypond[verbatim,quote,relative=2] -\new ChoirStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -In a @code{GrandStaff}, the group begins with a brace, and bar -lines are connected between the staves. - -@lilypond[verbatim,quote,relative=2] -\new GrandStaff << - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -The @code{PianoStaff} is identical to a @code{GrandStaff}, except -that it supports printing the instrument name directly. For -details, see @ref{Instrument names}. - -@lilypond[verbatim,quote,relative=2] -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff { c1 c } - \new Staff { c1 c } ->> -@end lilypond - -Each staff group context sets the property -@code{systemStartDelimiter} to one of the following values: -@code{SystemStartBar}, @code{SystemStartBrace}, or -@code{SystemStartBracket}. A fourth delimiter, -@code{SystemStartSquare}, is also available, but it must be -explicitly specified. - -New staff group contexts may be defined. For details, see -@ref{Defining new contexts}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{use-square-bracket-at-the-start-of-a-staff-group.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{display-bracket-with-only-one-staff-in-a-system.ly} - -@cindex mensurstriche layout -@cindex renaissance music -@cindex transcription of mensural music -@cindex mensural music, transcription of - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{mensurstriche-layout-bar-lines-between-the-staves.ly} - - -@seealso -Music Glossary: -@rglos{brace}, -@rglos{bracket}, -@rglos{grand staff}. - -Notation Reference: -@ref{Instrument names}, -@ref{Defining new contexts}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{Staff}, -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{GrandStaff}, -@rinternals{PianoStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Nested staff groups -@unnumberedsubsubsec Nested staff groups - -@cindex staff, nested -@cindex staves, nested -@cindex nesting of staves -@cindex system start delimiters, nested -@cindex nested staff brackets -@cindex brackets, nesting of -@cindex braces, nesting of - -Staff-group contexts can be nested to arbitrary depths. In this -case, each child context creates a new bracket adjacent to the -bracket of its parent group. - -@lilypond[verbatim,quote,relative=2] -\new StaffGroup << - \new Staff { c2 c | c2 c } - \new StaffGroup << - \new Staff { g2 g | g2 g } - \new StaffGroup \with { - systemStartDelimiter = #'SystemStartSquare - } - << - \new Staff { e2 e | e2 e } - \new Staff { c2 c | c2 c } - >> - >> ->> -@end lilypond - -New nested staff group contexts can be defined. For details, see -@ref{Defining new contexts}. - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{nesting-staves.ly} - - -@seealso -Notation Reference: -@ref{Grouping staves}, -@ref{Instrument names}, -@ref{Defining new contexts}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{StaffGroup}, -@rinternals{ChoirStaff}, -@rinternals{SystemStartBar}, -@rinternals{SystemStartBrace}, -@rinternals{SystemStartBracket}, -@rinternals{SystemStartSquare}. - - -@node Modifying single staves -@subsection Modifying single staves - -This section explains how to change specific attributes of one -staff: for example, modifying the number of staff lines or the -staff size. Methods to start and stop staves and set ossia -sections are also described. - -@menu -* Staff symbol:: -* Ossia staves:: -* Hiding staves:: -@end menu - - -@node Staff symbol -@unnumberedsubsubsec Staff symbol - -@cindex adjusting staff symbol -@cindex drawing staff symbol -@cindex staff symbol, setting of -@cindex staff symbol, drawing -@cindex stop staff lines -@cindex start staff lines -@cindex staff lines, amount of -@cindex staff lines, number of -@cindex staff line, thickness of -@cindex amount of staff lines -@cindex thickness of staff lines -@cindex ledger lines, setting -@cindex setting of ledger lines -@cindex spacing of ledger lines -@cindex number of staff lines - -The lines of a staff belong to the @code{StaffSymbol} grob. -@code{StaffSymbol} properties can be modified to change the -appearance of a staff, but they must be modified before the staff -is created. - -The number of staff lines may be changed. The clef position and -the position of middle C may need to be modified to fit the new -staff. For an explanation, refer to the snippet section in -@ref{Clef}. - -@lilypond[verbatim,quote,relative=2] -\new Staff \with { - \override StaffSymbol #'line-count = #3 -} -{ d4 d d d } -@end lilypond - -Staff line thickness can be modified. The thickness of ledger -lines and stems are also affected, since they depend on staff line -thickness. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'thickness = #3 -} -{ e4 d c b } -@end lilypond - -Ledger line thickness can be set independently of staff line -thickness. In the example the two numbers are factors multiplying -the staff line thickness and the staff line spacing. The two -contributions are added to give the ledger line thickness. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'ledger-line-thickness = #'(1 . 0.2) -} -{ e4 d c b } -@end lilypond - -The distance between staff lines can be changed. This setting -affects the spacing of ledger lines as well. - -@lilypond[verbatim,quote,relative=1] -\new Staff \with { - \override StaffSymbol #'staff-space = #1.5 -} -{ a4 b c d } -@end lilypond - -Further details about the properties of @code{StaffSymbol} can be -found in @rinternals{staff-symbol-interface}. - -@cindex stopping a staff -@cindex starting a staff -@cindex staff, starting -@cindex staff, stopping - -@funindex \startStaff -@funindex startStaff -@funindex \stopStaff -@funindex stopStaff - -Modifications to staff properties in the middle of a score can be -placed between @code{\stopStaff} and @code{\startStaff}: - -@lilypond[verbatim,quote,relative=2] -c2 c -\stopStaff -\override Staff.StaffSymbol #'line-count = #2 -\startStaff -b2 b -\stopStaff -\revert Staff.StaffSymbol #'line-count -\startStaff -a2 a -@end lilypond - -@noindent -In general, @code{\startStaff} and @code{\stopStaff} can be used -to stop or start a staff in the middle of a score. - -@lilypond[verbatim,quote,relative=2] -c4 b a2 -\stopStaff -b4 c d2 -\startStaff -e4 d c2 -@end lilypond - - -@predefined -@code{\startStaff}, -@code{\stopStaff}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{making-some-staff-lines-thicker-than-the-others.ly} - - -@seealso -Music Glossary: -@rglos{line}, -@rglos{ledger line}, -@rglos{staff}. - -Notation Reference: -@ref{Clef}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{StaffSymbol}, -@rinternals{staff-symbol-interface}. - - -@node Ossia staves -@unnumberedsubsubsec Ossia staves - -@cindex staff, Frenched -@cindex ossia -@cindex Frenched staves -@cindex staff, resizing of -@cindex resizing of staves - -@funindex \startStaff -@funindex startStaff -@funindex \stopStaff -@funindex stopStaff - -@notation{Ossia} staves can be set by creating a new simultaneous -staff in the appropriate location: - -@lilypond[verbatim,quote] -\new Staff \relative c'' { - c4 b d c - << - { c4 b d c } - \new Staff { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -@noindent -However, the above example is not what is usually desired. To -create ossia staves that are above the original staff, have no -time signature or clef, and have a smaller font size, tweaks must -be used. The Learning Manual describes a specific technique to -achieve this goal, beginning with -@rlearning{Nesting music expressions}. - -The following example uses the @code{alignAboveContext} property -to align the ossia staff. This method is most appropriate when -only a few ossia staves are needed. - -@lilypond[verbatim,quote] -\new Staff = main \relative c'' { - c4 b d c - << - { c4 b d c } - - \new Staff \with { - \remove "Time_signature_engraver" - alignAboveContext = #"main" - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - firstClef = ##f - } - { e4 d f e } - >> - c4 b c2 -} -@end lilypond - -If many isolated ossia staves are needed, creating an empty -@code{Staff} context with a specific @emph{context id} may be more -appropriate; the ossia staves may then be created by -@emph{calling} this context and using @code{\startStaff} and -@code{\stopStaff} at the desired locations. The benefits of this -method are more apparent if the piece is longer than the following -example. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - { \stopStaff s1*6 } - - \new Staff \relative c' { - c4 b c2 - << - { e4 f e2 } - \context Staff = ossia { - \startStaff e4 g8 f e2 \stopStaff - } - >> - g4 a g2 \break - c4 b c2 - << - { g4 a g2 } - \context Staff = ossia { - \startStaff g4 e8 f g2 \stopStaff - } - >> - e4 d c2 - } ->> -@end lilypond - -Using the @code{\RemoveEmptyStaffContext} command to create ossia -staves may be used as an alternative. This method is most -convenient when ossia staves occur immediately following a line -break. In this case, spacer rests do not need to be used at all; -only @code{\startStaff} and @code{\stopStaff} are necessary. For -more information about @code{\RemoveEmptyStaffContext}, see -@ref{Hiding staves}. - -@lilypond[verbatim,quote,ragged-right] -<< - \new Staff = ossia \with { - \remove "Time_signature_engraver" - \override Clef #'transparent = ##t - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) - } - \new Staff \relative c' { - c4 b c2 - e4 f e2 - g4 a g2 \break - << - { c4 b c2 } - \context Staff = ossia { - c4 e8 d c2 \stopStaff - } - >> - g4 a g2 - e4 d c2 - } ->> - -\layout { - \context { - \RemoveEmptyStaffContext - \override VerticalAxisGroup #'remove-first = ##t - } -} -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{vertically-aligning-ossias-and-lyrics.ly} - - -@seealso -Music Glossary: -@rglos{ossia}, -@rglos{staff}, -@rglos{Frenched staff}. - -Learning Manual: -@rlearning{Nesting music expressions}, -@rlearning{Size of objects}, -@rlearning{Length and thickness of objects}. - -Notation Reference: -@ref{Hiding staves}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{StaffSymbol}. - - -@node Hiding staves -@unnumberedsubsubsec Hiding staves - -@cindex Frenched score -@cindex Frenched staff -@cindex staff, hiding -@cindex staff, empty -@cindex hiding of staves -@cindex empty staves - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext - - -Staff lines can be hidden by removing the -@code{Staff_symbol_engraver} from the @code{Staff} context. As an -alternative, @code{\stopStaff} may be used. - -@lilypond[verbatim,quote] -\new Staff \with { - \remove "Staff_symbol_engraver" -} -\relative c''' { a8 f e16 d c b a2 } -@end lilypond - - -Empty staves can be hidden by setting the -@code{\RemoveEmptyStaffContext} command in the @code{\layout} -block. In orchestral scores, this style is known as @q{Frenched -Score}. By default, this command hides and removes all empty -staves in a score except for those in the first system. - -@warning{A staff is considered empty when it contains only -multi-measure rests, skips, spacer rests, or a combination of these -elements.} - -@lilypond[verbatim,quote,ragged-right] -\layout { - \context { - \RemoveEmptyStaffContext - } -} - -\relative c' << - \new Staff { - e4 f g a \break - b1 \break - a4 b c2 - } - \new Staff { - c,4 d e f \break - R1 \break - f4 g c,2 - } ->> -@end lilypond - -@cindex ossia - -@noindent -@code{\RemoveEmptyStaffContext} can also be used to create ossia -sections for a staff. For details, see @ref{Ossia staves}. - -@cindex hiding ancient staves -@cindex hiding rhythmic staves - -@funindex \RemoveEmptyStaffContext -@funindex RemoveEmptyStaffContext -@funindex \AncientRemoveEmptyStaffContext -@funindex AncientRemoveEmptyStaffContext -@funindex \RemoveEmptyRhythmicStaffContext -@funindex RemoveEmptyRhythmicStaffContext - -The @code{\AncientRemoveEmptyStaffContext} command may be used to -hide empty staves in ancient music contexts. Similarly, -@code{\RemoveEmptyRhythmicStaffContext} may be used to hide empty -@code{RhythmicStaff} contexts. - - -@predefined -@code{\RemoveEmptyStaffContext}, -@code{\AncientRemoveEmptyStaffContext}, -@code{\RemoveEmptyRhythmicStaffContext}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{removing-the-first-empty-line.ly} - - -@seealso -Music Glossary: -@rglos{Frenched staff}. - -Notation Reference: -@ref{Staff symbol}, -@ref{Ossia staves}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{ChordNames}, -@rinternals{FiguredBass}, -@rinternals{Lyrics}, -@rinternals{Staff}, -@rinternals{VerticalAxisGroup}, -@rinternals{Staff_symbol_engraver}. - - -@knownissues - -Removing @code{Staff_symbol_engraver} also hides bar lines. If -bar line visibility is forced, formatting errors may occur. In -this case, use the following overrides instead of removing the -engraver: - -@example -\override StaffSymbol #'stencil = ##f -\override NoteHead #'no-ledgers = ##t -@end example - - -@node Writing parts -@subsection Writing parts - -This section explains how to insert tempo indications and -instrument names into a score. Methods to quote other voices and -format cue notes are also described. - -@menu -* Metronome marks:: -* Instrument names:: -* Quoting other voices:: -* Formatting cue notes:: -@end menu - - -@node Metronome marks -@unnumberedsubsubsec Metronome marks - -@cindex tempo -@cindex beats per minute -@cindex metronome marking -@cindex metronome marking with text - -@funindex \tempo -@funindex tempo - -A basic metronome mark is simple to write: - -@lilypond[verbatim,quote,relative=1] -\tempo 4 = 120 -c2 d -e4. d8 c2 -@end lilypond - -Tempo indications with text can be used instead: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegretto" -c4 e d c -b4. a16 b c4 r4 -@end lilypond - -Combining a metronome mark and text will automatically place the -metronome mark within parentheses: - -@lilypond[verbatim,quote,relative=2] -\tempo "Allegro" 4 = 160 -g4 c d e -d4 b g2 -@end lilypond - -In general, the text can be any markup object: - -@lilypond[verbatim,quote,relative=2] -\tempo \markup { \italic Faster } 4 = 132 -a8-. r8 b-. r gis-. r a-. r -@end lilypond - -A parenthesized metronome mark with no textual indication may be -written by including an empty string in the input: - -@lilypond[verbatim,quote,relative=2] -\tempo "" 8 = 96 -d4 g e c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{printing-metronome-and-rehearsal-marks-below-the-staff.ly} - -@c perhaps also an example of how to move it horizontally? - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing-the-tempo-without-a-metronome-mark.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{creating-metronome-marks-in-markup-mode.ly} - -For more details, see @ref{Formatting text}. - - -@seealso -Music Glossary: -@rglos{metronome}, -@rglos{metronomic indication}, -@rglos{tempo indication}, -@rglos{metronome mark}. - -Notation Reference: -@ref{Formatting text}, -@ref{MIDI output}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{MetronomeMark}. - - -@node Instrument names -@unnumberedsubsubsec Instrument names - -@cindex instrument names -@cindex instrument names, short - -Instrument names can be printed on the left side of staves in the -@code{Staff} and @code{PianoStaff} contexts. The value of -@code{instrumentName} is used for the first staff, and the value -of @code{shortInstrumentName} is used for all succeeding staves. - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"Violin " -\set Staff.shortInstrumentName = #"Vln " -c4.. g'16 c4.. g'16 -\break -c1 -@end lilypond - -Markup mode can be used to create more complicated instrument -names: - -@lilypond[verbatim,quote,relative=2] -\set Staff.instrumentName = \markup { - \column { "Clarinetti" - \line { "in B" \smaller \flat } } } -c4 c,16 d e f g2 -@end lilypond - -@cindex instrument names, centering - -When two or more staff contexts are grouped together, the -instrument names and short instrument names are centered by -default. To center multi-line instrument names, -@code{\center-column} must be used: - -@lilypond[verbatim,quote,indent=1.5\cm,relative=2] -<< - \new Staff { - \set Staff.instrumentName = #"Flute" - f2 g4 f - } - \new Staff { - \set Staff.instrumentName = \markup \center-column { - Clarinet - \line { "in B" \smaller \flat } - } - c4 b c2 - } ->> -@end lilypond - -@funindex indent -@funindex short-indent - -However, if the instrument names are longer, the instrument names -in a staff group may not be centered unless the @code{indent} and -@code{short-indent} settings are increased. For details about -these settings, see @ref{Horizontal dimensions}. - -@lilypond[verbatim,quote,ragged-right] -\layout { - indent = 3.0\cm - short-indent = 1.5\cm -} - -\relative c'' << - \new Staff { - \set Staff.instrumentName = #"Alto Flute in G" - \set Staff.shortInstrumentName = #"Fl." - f2 g4 f \break - g4 f g2 - } - \new Staff { - \set Staff.instrumentName = #"Clarinet" - \set Staff.shortInstrumentName = #"Clar." - c,4 b c2 \break - c2 b4 c - } ->> -@end lilypond - -To add instrument names to other contexts (such as -@code{GrandStaff}, @code{ChoirStaff}, or @code{StaffGroup}), -@code{Instrument_name_engraver} must be added to that context. -For details, see @ref{Modifying context plug-ins}. - -@cindex instrument names, changing -@cindex changing instrument names - -Instrument names may be changed in the middle of a piece: - -@lilypond[verbatim,quote,ragged-right,relative=1] -\set Staff.instrumentName = #"First" -\set Staff.shortInstrumentName = #"one" -c1 c c c \break -c1 c c c \break -\set Staff.instrumentName = #"Second" -\set Staff.shortInstrumentName = #"two" -c1 c c c \break -c1 c c c \break -@end lilypond - -@cindex instrument switch -@cindex switching instruments - -@funindex \addInstrumentDefinition -@funindex addInstrumentDefinition -@funindex \instrumentSwitch -@funindex instrumentSwitch - -If an instrument @emph{switch} is needed, -@code{\addInstrumentDefinition} may be used in combination with -@code{\instrumentSwitch} to create a detailed list of the -necessary changes for the switch. The -@code{\addInstrumentDefinition} command has two arguments: an -identifying string, and an association list of context properties -and values to be used for the instrument. It must be placed in -the toplevel scope. @code{\instrumentSwitch} is used in the music -expression to declare the instrument switch: - -@lilypond[verbatim,quote,ragged-right] -\addInstrumentDefinition #"contrabassoon" - #`((instrumentTransposition . ,(ly:make-pitch -1 0 0)) - (shortInstrumentName . "Cbsn.") - (clefGlyph . "clefs.F") - (middleCPosition . 6) - (clefPosition . 2) - (instrumentCueName . ,(make-bold-markup "cbsn.")) - (midiInstrument . "bassoon")) - -\new Staff \with { - instrumentName = #"Bassoon" -} -\relative c' { - \clef tenor - \compressFullBarRests - c2 g' - R1*16 - \instrumentSwitch "contrabassoon" - c,,2 g \break - c,1 ~ | c1 -} -@end lilypond - - -@seealso -Notation Reference: -@ref{Horizontal dimensions}, -@ref{Modifying context plug-ins}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{InstrumentName}, -@rinternals{PianoStaff}, -@rinternals{Staff}. - - -@node Quoting other voices -@unnumberedsubsubsec Quoting other voices - -@cindex cues -@cindex quoting other voices -@cindex fragments -@cindex cue notes - -@funindex \addQuote -@funindex addQuote -@funindex \quoteDuring -@funindex quoteDuring -@funindex \transposition -@funindex transposition - -It is very common for one voice to double some of the music from -another voice. For example, the first and second violins may play the -same notes during a passage of music. In LilyPond this is accomplished -by letting one voice @emph{quote} the other voice without having to -re-enter it. - -Before a part can be quoted, the @code{\addQuote} command must be used -to initialize the quoted fragment. This command must be used in the -toplevel scope. The first argument is an identifying string, and the -second is a music expression: - -@example -flute = \relative c'' @{ - a4 gis g gis -@} -\addQuote "flute" @{ \flute @} -@end example - -The @code{\quoteDuring} command is used to indicate the point where the -quotation begins. It is followed by two arguments: the name of the -quoted voice, as defined with @code{\addQuote}, and a music expression -that indicates the duration of the quote, usually spacer rests or -multi-measure rests. The corresponding music from the quoted voice is -inserted into the music expression: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { s2 } -} -@end lilypond - -If the music expression used for @code{\quoteDuring} contains -anything but a spacer rest or multi-measure rest, a polyphonic -situation is created, which is often not desirable: - -@lilypond[verbatim,quote] -flute = \relative c'' { - a4 gis g gis -} -\addQuote "flute" { \flute } - -\relative c' { - c4 cis \quoteDuring #"flute" { c4 b } -} -@end lilypond - -Quotations recognize instrument transposition settings for both -the source and target instruments if the @code{\transposition} -command is used. For details about @code{\transposition}, see -@ref{Instrument transpositions}. - -@lilypond[verbatim,quote] -clarinet = \relative c'' { - \transposition bes - a4 gis g gis -} -\addQuote "clarinet" { \clarinet } - -\relative c' { - c4 cis \quoteDuring #"clarinet" { s2 } -} -@end lilypond - -It is possible to tag quotations with unique names in order to -process them in different ways. For details about this procedure, -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 - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{quoting-another-voice.ly} - - -@seealso -Notation Reference: -@ref{Instrument transpositions}, -@ref{Using tags}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{QuoteMusic}, -@rinternals{Voice}. - - -@knownissues - -Only the contents of the first @code{Voice} occurring in an -@code{\addQuote} command will be considered for quotation, so -@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}. - - -@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 - -@funindex \cueDuring -@funindex cueDuring - -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: - -@example -\cueDuring #@var{partname} #@var{voice} @var{music} -@end example - -This command copies the corresponding measures from @var{partname} -into a @code{CueVoice} context. The @code{CueVoice} is created -implicitly, and occurs simultaneously with @var{music}, which -creates a polyphonic situation. The @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. - -@lilypond[verbatim,quote] -oboe = \relative c'' { - r2 r8 d16 f e g f a - g8 g16 g g2. -} -\addQuote "oboe" { \oboe } - -\new Voice \relative c'' { - \cueDuring #"oboe" #UP { R1 } - g2 c, -} -@end lilypond - -@noindent -In the above example, the @code{Voice} context had to be -explicitly declared, or else the entire music expression would -belong to the @code{CueVoice} context. - -The name of the cued instrument can be printed by setting the -@code{instrumentCueName} property in the @code{CueVoice} context. - -@lilypond[verbatim,quote] -oboe = \relative c''' { - g4 r8 e16 f e4 d -} -\addQuote "oboe" { \oboe } - -\new Staff \relative c'' << - \new CueVoice \with { - instrumentCueName = "ob." - } - \new Voice { - \cueDuring #"oboe" #UP { R1 } - g4. b8 d2 - } ->> -@end lilypond - -@cindex removing cues -@cindex removing cue notes -@cindex cue notes, removing - -@funindex \killCues -@funindex killCues -@funindex \transposedCueDuring -@funindex transposedCueDuring - -In addition to printing the name of the cued instrument, when cue -notes end, the name of the original instrument should be printed, -and any other changes introduced by the cued part should be -undone. This can be accomplished by using -@code{\addInstrumentDefinition} and @code{\instrumentSwitch}. For -an example and explanation, see @ref{Instrument names}. - -The @code{\killCues} command removes cue notes from a music -expression. This can be useful if cue notes need to be removed -from a part but may be restored at a later time. - -@lilypond[verbatim,quote] -flute = \relative c''' { - r2 cis2 r2 dis2 -} -\addQuote "flute" { \flute } - -\new Voice \relative c'' { - \killCues { - \cueDuring #"flute" #UP { R1 } - g4. b8 d2 - } -} -@end lilypond - -The @code{\transposedCueDuring} command is useful for adding -instrumental cues from a completely different register. The -syntax is similar to @code{\cueDuring}, but it requires one extra -argument to specify the transposition of the cued instrument. For -more information about transposition, see -@ref{Instrument transpositions}. - -@lilypond[verbatim,quote] -piccolo = \relative c''' { - \clef "treble^8" - R1 - c8 c c e g2 - a4 g g2 -} -\addQuote "piccolo" { \piccolo } - -cbassoon = \relative c, { - \clef "bass_8" - c4 r g r - \transposedCueDuring #"piccolo" #UP c,, { R1 } - c4 r g r -} - -<< - \new Staff = "piccolo" \piccolo - \new Staff = "cbassoon" \cbassoon ->> -@end lilypond - -It is possible to tag cued parts with unique names in order to -process them in different ways. For details about this procedure, -see @ref{Using tags}. - - -@seealso -Notation Reference: -@ref{Instrument transpositions}, -@ref{Instrument names}, -@ref{Using tags}. - -Snippets: -@rlsr{Staff notation}. - -Internals Reference: -@rinternals{CueVoice}, -@rinternals{Voice}. - - -@knownissues - -Collisions can occur with rests, when using @code{\cueDuring}, -between @code{Voice} and @code{CueVoice} contexts. diff --git a/Documentation/user/templates.itely b/Documentation/user/templates.itely deleted file mode 100644 index 4f091008f2..0000000000 --- a/Documentation/user/templates.itely +++ /dev/null @@ -1,316 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Templates -@appendix Templates - -This section of the manual contains templates with the LilyPond score -already set up for you. Just add notes, run LilyPond, and enjoy -beautiful printed scores! - -@c bad node name for ancient notation to avoid conflict -@menu -* Single staff:: -* Piano templates:: -* String quartet:: -* Vocal ensembles:: -* Ancient notation templates:: -* Jazz combo:: -* lilypond-book templates:: -@end menu - - -@node Single staff -@appendixsec Single staff - -@appendixsubsec Notes only - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-only-notes.ly} - - -@appendixsubsec Notes and lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion] -{single-staff-template-with-notes-and-lyrics.ly} - -@appendixsubsec Notes and chords - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes-and-chords.ly} - -@appendixsubsec Notes, lyrics, and chords. - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{single-staff-template-with-notes,-lyrics,-and-chords.ly} - - -@node Piano templates -@appendixsec Piano templates - -@appendixsubsec Solo piano - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-simple.ly} - -@appendixsubsec Piano and melody with lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-melody-and-lyrics.ly} - -@appendixsubsec Piano centered lyrics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-lyrics.ly} - -@appendixsubsec Piano centered dynamics - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{piano-template-with-centered-dynamics.ly} - - -@node String quartet -@appendixsec String quartet - -@appendixsubsec String quartet - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-simple.ly} - -@appendixsubsec String quartet parts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{string-quartet-template-with-separate-parts.ly} - - -@node Vocal ensembles -@appendixsec Vocal ensembles - -@appendixsubsec SATB vocal score - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template.ly} - -@appendixsubsec SATB vocal score and automatic piano reduction - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-automatic-piano-reduction.ly} - -@appendixsubsec SATB with aligned contexts - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly} - - -@c bad node name to avoid node name conflict -@node Ancient notation templates -@appendixsec Ancient notation templates - -@appendixsubsec Transcription of mensural music - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-mensural-music.ly} - -@appendixsubsec Gregorian transcription template - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc] -{ancient-notation-template----modern-transcription-of-gregorian-music.ly} - -@node Jazz combo -@appendixsec Jazz combo - -@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.12.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 - - -@node lilypond-book templates -@appendixsec lilypond-book templates - -These templates are for use with @code{lilypond-book}. If you're not familiar -with this program, please refer to @rprogram{LilyPond-book}. - -@appendixsubsec 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. - -\begin@{lilypond@} -\relative c'' @{ -d4 c b a -@} -\end@{lilypond@} -\end@{document@} -@end example - -@appendixsubsec Texinfo - -You can include LilyPond fragments in Texinfo; in fact, this entire manual -is written in Texinfo. - -@example -\input texinfo -@@node Top - -Texinfo text - -@@lilypond[verbatim,fragment,ragged-right] -a4 b c d -@@end lilypond - -More Texinfo text - -@@lilypond[verbatim,fragment,ragged-right] -d4 c b a -@@end lilypond - -@@bye -@end example - - -@appendixsubsec 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 - - diff --git a/Documentation/user/text.itely b/Documentation/user/text.itely deleted file mode 100644 index b235dfda08..0000000000 --- a/Documentation/user/text.itely +++ /dev/null @@ -1,1388 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Text -@section Text - -@lilypondfile[quote]{text-headword.ly} - -This section explains how to include text (with various -formatting) in music scores. - -@noindent -Some text elements that are not dealt with here are discussed in other -specific sections: @ref{Vocal music}, @ref{Titles and headers}. - -@menu -* Writing text:: -* Formatting text:: -* Fonts:: -@end menu - -@node Writing text -@subsection Writing text - -This section introduces different ways of adding text to a score. - -@cindex Text, other languages -@warning{To write accented and special text (such as characters -from other languages), simply insert the characters directly into -the LilyPond file. The file must be saved as UTF-8. For more -information, see @ref{Text encoding}.} - -@menu -* Text scripts:: -* Text spanners:: -* Text marks:: -* Separate text:: -@end menu - - -@node Text scripts -@unnumberedsubsubsec Text scripts - -@cindex Text scripts -@cindex text items, non-empty -@cindex non-empty texts -@cindex quoted text - -Simple @qq{quoted text} indications may be added -to a score, as demonstrated in the following example. -Such indications may be manually placed -above or below the staff, using the -syntax described in @ref{Direction and -placement}. - -@lilypond[quote,verbatim,relative=2] -a8^"pizz." g f e a4-"scherz." f -@end lilypond - -This syntax is actually a shorthand; more complex text -formatting may be added to a note by explicitly using a -@code{\markup} block, as described in @ref{Formatting text}. - -@lilypond[quote,verbatim,relative=2] -a8^\markup { \italic pizz. } g f e -a4_\markup { \tiny scherz. \bold molto } f -@end lilypond - -By default, text indications do not influence the note spacing. -However, their widths can be taken into account: -in the following example, the first text string does not affect -spacing, whereas the second one does. - -@lilypond[quote,verbatim,relative=2] -a8^"pizz." g f e -\textLengthOn -a4_"scherzando" f -@end lilypond - - -@predefined -@funindex \textLengthOn -@code{\textLengthOn}, -@funindex \textLengthOff -@code{\textLengthOff}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Formatting text}, -@ref{Direction and placement}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{TextScript}. - - -@knownissues - -Checking to make sure that text scripts and lyrics are within the -margins is a relatively large computational task. To speed up -processing, LilyPond does not perform such calculations by -default; to enable it, use - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - - -@node Text spanners -@unnumberedsubsubsec Text spanners - -@cindex Text spanners - -Some performance indications, e.g., @notation{rallentando} or -@notation{accelerando}, are written as text and are extended over -multiple notes with dotted lines. -Such objects, called @qq{spanners}, may be created -from one note to another using the following syntax: - -@lilypond[verbatim,quote,relative=2] -\override TextSpanner #'(bound-details left text) = "rit." -b1\startTextSpan -e,\stopTextSpan -@end lilypond - -@noindent -The string to be printed is set through -object properties. By default it is printed in italic characters, -but different formatting can be obtained using -@code{\markup} blocks, as described in @ref{Formatting text}. - -@lilypond[quote,relative=2,verbatim] -\override TextSpanner #'(bound-details left text) = - \markup { \upright "rit." } -b1\startTextSpan c -e,\stopTextSpan -@end lilypond - -The line style, as well as the text string, can be defined as an -object property. This syntax is described in @ref{Line styles}. - - -@predefined -@funindex textSpannerUp -@code{\textSpannerUp}, -@funindex textSpannerDown -@code{\textSpannerDown}, -@funindex textSpannerNeutral -@code{\textSpannerNeutral}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Line styles}, -@ref{Dynamics}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{TextSpanner}. - - -@node Text marks -@unnumberedsubsubsec Text marks - -@cindex coda on bar line -@cindex segno on bar line -@cindex fermata on bar line -@cindex bar lines, symbols on -@funindex \mark - -Various text elements may be added to a score using -the syntax described in @ref{Rehearsal marks}: - -@c \mark needs to be placed on a separate line (it's not -@c attached to an object like \markup is). -vv - -@lilypond[verbatim,quote,relative=2] -c4 -\mark "Allegro" -c c c -@end lilypond - -This syntax makes it possible to put any text on a bar line; -more complex text formatting may be added using a @code{\markup} -block, as described in @ref{Formatting text}: - -@lilypond[quote,verbatim,relative=1] -1 -\mark \markup { \italic { colla parte } } -2 -1 -@end lilypond - -@noindent -This syntax also allows to print special signs, like coda, segno -or fermata, by specifying the appropriate symbol name as explained in -@ref{Music notation inside markup}: - -@lilypond[quote,verbatim,relative=2] -2 -\mark \markup { \musicglyph #"scripts.ufermata" } -1 -@end lilypond - -@noindent -Such objects are only typeset above the top staff of the score; depending on -whether they are specified at the end or the middle of a bar, they -can be placed above the bar line or between notes. When specified at a -line break, the mark will be printed at the beginning of the next line. - -@lilypond[quote,verbatim,relative=2] -\mark "Allegro" -c1 c -\mark "assai" \break -c c -@end lilypond - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-at-the-end-of-a-line-or-a-score.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{aligning-marks-with-various-notation-objects.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{printing-marks-on-every-staff.ly} - - -@seealso -Notation Reference: -@ref{Rehearsal marks}, -@ref{Formatting text}, -@ref{Music notation inside markup}, -@ref{The Feta font}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{RehearsalMark}. - - -@knownissues -@c To be removed when Issue 69 in the tracker gets fixed. -vv - -If a mark is entered at the end of the last bar of the score (where -there is no next line), then the mark will not be printed at -all. - -@node Separate text -@unnumberedsubsubsec Separate text - -@cindex separate text -@cindex standalone text -@cindex top-level text -@cindex text, standalone -@funindex \markup - -A @code{\markup} block can exist by itself, outside of any -any @code{\score} block, as a @qq{top-level -expression}. This syntax is described in @ref{File structure}. - -@lilypond[verbatim,quote] -\markup { - Tomorrow, and tomorrow, and tomorrow... -} -@end lilypond - -@noindent -This allows printing text separately -from the music, which is particularly -useful when the input file contains -several music pieces, as described in -@ref{Multiple scores in a book}. - -@lilypond[quote,verbatim] -\score { - c'1 -} -\markup { - Tomorrow, and tomorrow, and tomorrow... -} -\score { - c'1 -} -@end lilypond - -Separate text blocks can be spread over multiple pages, -making it possible to print text documents or books entirely -within LilyPond. This feature, and the specific syntax it -requires, are described in @ref{Multi-page markup}. - - -@predefined -@funindex \markuplines -@code{\markup}, -@code{\markuplines}. -@endpredefined - - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{stand-alone-two-column-markup.ly} - -@seealso -Notation Reference: @ref{Formatting text}, -@ref{File structure}, -@ref{Multiple scores in a book}, -@ref{Multi-page markup}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - - -@node Formatting text -@subsection Formatting text - -This section presents basic and advanced text formatting, -using the @code{\markup} mode specific syntax. - -@menu -* Text markup introduction:: -* Selecting font and font size:: -* Text alignment:: -* Graphic notation inside markup:: -* Music notation inside markup:: -* Multi-page markup:: -@end menu - -@node Text markup introduction -@unnumberedsubsubsec Text markup introduction - -@cindex markup -@cindex text markup -@cindex markup text -@cindex typeset text -@funindex \markup - -A @code{\markup} block is used to typeset text with an extensible -syntax called @qq{markup mode}. - -@cindex markup expressions -@cindex markup syntax - -The markup syntax is similar to LilyPond's usual syntax: a -@code{\markup} expression is enclosed in curly braces @code{@{ -@dots{} @}}. A single word is regarded as a minimal expression, -and therefore does not need to be enclosed with braces. - -Unlike simple @qq{quoted text} indications, @code{\markup} blocks -may contain nested expressions or markup commands, -entered using the backslash @code{\} character. -Such commands only affect the first following expression. - -@lilypond[quote,verbatim,relative=2] -a1-\markup intenso -a2^\markup { poco \italic più forte } -c e1 -d2_\markup { \italic "string. assai" } -e -b1^\markup { \bold { molto \italic agitato } } -c -@end lilypond - -@cindex special characters in markup mode -@cindex markup mode, special characters -@cindex reserved characters, printing -@cindex printing special characters -@cindex quoted text in markup mode - -A @code{\markup} block may also contain quoted text strings. -Such strings are treated as minimal text expressions, and -therefore any markup command or special character (such as -@code{\} and @code{#}) will be printed verbatim without affecting -the formatting of the text. Double quotation marks themselves -may be printed by preceding them with backslashes. - -@lilypond[quote,verbatim,relative=2] -a1^"\italic markup..." -a_\markup { \italic "... prints \"italic\" letters!" } -a a -@end lilypond - -To be treated as a distinct expression, a list of words needs -to be enclosed with double quotes or preceded by a command. -The way markup expressions are defined affects how these -expressions will be stacked, centered and aligned; in the -following example, the second @code{\markup} expression is -treated the same as the first one: - -@lilypond[quote,verbatim,relative=2] -c1^\markup { \center-column { a bbb c } } -c1^\markup { \center-column { a { bbb c } } } -c1^\markup { \center-column { a \line { bbb c } } } -c1^\markup { \center-column { a "bbb c" } } -@end lilypond - -Markups can be stored in variables. Such variables may be -directly attached to notes: - -@lilypond[quote,verbatim] -allegro = \markup { \bold \large Allegro } - -{ - d''8.^\allegro - d'16 d'4 r2 -} -@end lilypond - - -@noindent -An exhaustive list of @code{\markup}-specific commands can be found in -@ref{Text markup commands}. - - -@seealso -Notation Reference: -@ref{Text markup commands}. - -Snippets: -@rlsr{Text}. - -Installed files: -@file{scm/@/markup@/.scm}. - - -@knownissues - -Syntax errors for markup mode can be confusing. - - -@node Selecting font and font size -@unnumberedsubsubsec Selecting font and font size - -@cindex font switching -@funindex \italic -@funindex \bold -@funindex \underline - -Basic font switching is supported in markup mode: - -@lilypond[quote,verbatim,relative=2] -d1^\markup { - \bold { Più mosso } - \italic { non troppo \underline Vivo } -} -r2 r4 r8 -d,_\markup { \italic quasi \smallCaps Tromba } -f1 d2 r -@end lilypond - -@cindex font size -@cindex text size -@funindex \fontsize -@funindex \smaller -@funindex \larger -@funindex \magnify - -The size of the characters can also be altered in different ways: -@itemize -@item -the font size can be set to predefined standard sizes, - -@item -the font size can be set to an absolute value, - -@item -the font size can also be changed relatively to its previous value. -@end itemize - -@noindent -The following example demonstrates these three methods: - -@lilypond[quote,verbatim,relative=1] -f1_\markup { - \tiny espressivo - \large e - \normalsize intenso -} -a^\markup { - \fontsize #5 Sinfonia - \fontsize #2 da - \fontsize #3 camera -} -bes^\markup { (con - \larger grande - \smaller emozione - \magnify #0.6 { e sentimento } ) -} -d c2 r8 c bes a g1 -@end lilypond - -@cindex subscript -@cindex superscript -@funindex \super -@funindex \sub - -Text may be printed as subscript or superscript. By default -these are printed in a smaller size, but a normal size can be used as well: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { 1 \super st movement } - \line { 1 \normal-size-super st movement - \sub { (part two) } } - } -} -@end lilypond - -@cindex font families - -The markup mode provides an easy way to select alternate -font families. The default serif font, of roman type, is -automatically selected unless specified otherwise; on the -last line of the following example, there is no difference -between the first and the second word. - -@lilypond[quote,verbatim] -\markup { - \column { - \line { Act \number 1 } - \line { \sans { Scene I. } } - \line { \typewriter { Verona. An open place. } } - \line { Enter \roman Valentine and Proteus. } - } -} -@end lilypond - -@noindent -Some of these font families, used for specific items -such as numbers or dynamics, do not provide all -characters, as mentioned in @ref{New dynamic marks} and -@ref{Manual repeat marks}. - -@c \concat is actually documented in Align (it is not -@c a font-switching command). But we need it here. -vv - -When used inside a word, some font-switching or formatting -commands may produce an unwanted blank space. This can -easily be solved by concatenating the text elements together: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \concat { 1 \super st } - movement - } - \line { - \concat { \dynamic p , } - \italic { con dolce espressione } - } - } -} -@end lilypond - -An exhaustive list of font switching, and custom font usage -commands can be found in @ref{Font}. - -Defining custom font sets is also possible, as explained in -@ref{Fonts}. - - -@predefined -@funindex \teeny -@code{\teeny}, -@funindex \tiny -@code{\tiny}, -@funindex \small -@code{\small}, -@funindex \normalsize -@code{\normalsize}, -@funindex \large -@code{\large}, -@funindex \huge -@code{\huge}, -@funindex \smaller -@code{\smaller}, -@funindex \larger -@code{\larger}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Font}, -@ref{New dynamic marks}, -@ref{Manual repeat marks}, -@ref{Fonts}. - -Snippets: -@rlsr{Text}. - -Internals Reference: -@rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node Text alignment -@unnumberedsubsubsec Text alignment - -@cindex text, aligning -@cindex aligning text - -This subsection discusses how to place text in markup mode. -Markup objects can also be moved as a whole, using the syntax -described in @rlearning{Moving objects}. - -@c Padding commands should be mentioned on this page, but -@c most of these require \box to be more clearly illustrated. -vv - -@cindex text, horizontal alignment -@cindex horizontal text alignment -@funindex \left-align -@funindex \center-align -@funindex \right-align - -Markup objects may be aligned in different ways. By default, -a text indication is aligned on its left edge: in the following -example, there is no difference -between the first and the second markup. - -@lilypond[quote,verbatim,relative=2] -d1-\markup { poco } -f -d-\markup { \left-align poco } -f -d-\markup { \center-align { poco } } -f -d-\markup { \right-align poco } -@end lilypond - -@funindex \halign - -Horizontal alignment may be fine-tuned -using a numeric value: - -@lilypond[quote,verbatim,relative=2] -a1-\markup { \halign #-1 poco } -e' -a,-\markup { \halign #0 poco } -e' -a,-\markup { \halign #0.5 poco } -e' -a,-\markup { \halign #2 poco } -@end lilypond - -@noindent -Some objects may have alignment procedures of their own, -and therefore are not affected by these commands. It is -possible to move such markup objects as a whole, as shown -for instance in @ref{Text marks}. - -@cindex text, vertical alignment -@cindex vertical text alignment -@funindex \raise -@funindex \lower - -Vertical alignment is a bit more complex. As stated above, -markup objects can be moved as a whole; however, it is also -possible to move specific elements inside a markup block. -In this case, the element to be moved needs to be preceded -with an @emph{anchor point}, that can be another markup element -or an invisible object. The following example demonstrates these -two possibilities; the last markup in this example has no anchor -point, and therefore is not moved. - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \raise #2 { Scène 1 } -} -a' -g_\markup { - \null - \lower #4 \bold { Très modéré } -} -a -d,^\markup { - \raise #4 \italic { Une forêt. } -} -a'4 a g2 a -@end lilypond - -@funindex \general-align -@funindex \translate -@funindex \translate-scaled - -Some commands can affect both the horizontal and vertical -alignment of text objects in markup mode. Any object -affected by these commands must be preceded with an -anchor point: - -@lilypond[quote,verbatim,relative=1] -d2^\markup { - Acte I - \translate #'(-1 . 2) "Scène 1" -} -a' -g_\markup { - \null - \general-align #Y #3.2 \bold "Très modéré" -} -a -d,^\markup { - \null - \translate-scaled #'(-1 . 2) \teeny "Une forêt." -} -a'4 a g2 a -@end lilypond - -@funindex \column -@funindex \center-column - -@cindex multi-line markup -@cindex multi-line text -@cindex columns, text - -A markup object may include several lines of text. -In the following example, each element or expression -is placed on its own line, either left-aligned or centered: - -@lilypond[quote,verbatim] -\markup { - \column { - a - "b c" - \line { d e f } - } - \hspace #10 - \center-column { - a - "b c" - \line { d e f } - } -} -@end lilypond - -@funindex \fill-line - -@cindex centering text on the page - -Similarly, a list of elements or expressions may be -spread to fill the entire horizontal line width (if there -is only one element, it will be centered on the page). -These expressions can, in turn, include multi-line text -or any other markup expression: - -@lilypond[quote,verbatim] -\markup { - \fill-line { - \line { William S. Gilbert } - \center-column { - \huge \smallCaps "The Mikado" - or - \smallCaps "The Town of Titipu" - } - \line { Sir Arthur Sullivan } - } -} -\markup { - \fill-line { 1885 } -} -@end lilypond - -@funindex \wordwrap -@funindex \justify - -@cindex wordwrapped text -@cindex justified text - -Long text indications can also be automatically wrapped -accordingly to the given line width. These will be -either left-aligned or justified, as shown in -the following example. - -@lilypond[quote,verbatim] -\markup { - \column { - \line \smallCaps { La vida breve } - \line \bold { Acto I } - \wordwrap \italic { - (La escena representa el corral de una casa de - gitanos en el Albaicín de Granada. Al fondo una - puerta por la que se ve el negro interior de - una Fragua, iluminado por los rojos resplandores - del fuego.) - } - \hspace #0 - - \line \bold { Acto II } - \override #'(line-width . 50) - \justify \italic { - (Calle de Granada. Fachada de la casa de Carmela - y su hermano Manuel con grandes ventanas abiertas - a través de las que se ve el patio - donde se celebra una alegre fiesta) - } - } -} -@end lilypond - -An exhaustive list of text alignment commands -can be found in @ref{Align}. - - -@seealso -Learning Manual: -@rlearning{Moving objects}. - -Notation Reference: -@ref{Align}, -@ref{Text marks}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@node Graphic notation inside markup -@unnumberedsubsubsec Graphic notation inside markup - -@cindex graphics, embedding -@cindex drawing graphic objects - -Various graphic objects may be added to a score, -using markup commands. - -@funindex \box -@funindex \circle -@funindex \rounded-box -@funindex \bracket -@funindex \hbracket - -@cindex decorating text -@cindex framing text - -Some markup commands allow decoration of text elements -with graphics, as demonstrated in the following example. - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \circle Jack - \box "in the box" - \null - \line { - Erik Satie - \hspace #3 - \bracket "1866 - 1925" - } - \null - \rounded-box \bold Prelude - } -} -@end lilypond - -@funindex \pad-markup -@funindex \pad-x -@funindex \pad-to-box -@funindex \pad-around - -@cindex padding around text -@cindex text padding - -Some commands may require an increase in the padding around -the text; this is achieved with some markup commands -exhaustively described in @ref{Align}. - -@lilypond[quote,verbatim] -\markup \fill-line { - \center-column { - \box "Charles Ives (1874 - 1954)" - \null - \box \pad-markup #2 "THE UNANSWERED QUESTION" - \box \pad-x #8 "A Cosmic Landscape" - \null - } -} -\markup \column { - \line { - \hspace #10 - \box \pad-to-box #'(-5 . 20) #'(0 . 5) - \bold "Largo to Presto" - } - \pad-around #3 - "String quartet keeps very even time, -Flute quartet keeps very uneven time." -} -@end lilypond - -@funindex \combine -@funindex \draw-circle -@funindex \filled-box -@funindex \triangle -@funindex \draw-line -@funindex \arrow-head - -@cindex graphic notation -@cindex symbols, non-musical - -Other graphic elements or symbols may be printed -without requiring any text. As with any markup -expression, such objects can be combined. - -@lilypond[quote,verbatim] -\markup { - \combine - \draw-circle #4 #0.4 ##f - \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1 - \hspace #5 - - \center-column { - \triangle ##t - \combine - \draw-line #'(0 . 4) - \arrow-head #Y #DOWN ##f - } -} -@end lilypond - -@funindex \epsfile -@funindex \postscript - -@cindex embedded graphics -@cindex images, embedding -@cindex graphics, embedding -@cindex postscript - -Advanced graphic features include the ability to -include external image files converted to the -Encapsulated PostScript format (@emph{eps}), or -to directly embed graphics into the input file, -using native PostScript code. In such a case, it -may be useful to explicitely specify the size of the -drawing, as demonstrated below: - -@lilypond[quote,verbatim,relative=1] -c1^\markup { - \combine - \epsfile #X #10 #"./context-example.eps" - \with-dimensions #'(0 . 6) #'(0 . 10) - \postscript #" - -2 3 translate - 2.7 2 scale - newpath - 2 -1 moveto - 4 -2 4 1 1 arct - 4 2 3 3 1 arct - 0 4 0 3 1 arct - 0 0 1 -1 1 arct - closepath - stroke" - } -c -@end lilypond - -An exhaustive list of graphics-specific commands -can be found in @ref{Graphic}. - - -@seealso -Notation Reference: -@ref{Graphic}, -@ref{Editorial annotations}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/stencil@/.scm}. - - -@node Music notation inside markup -@unnumberedsubsubsec Music notation inside markup - -Various musical notation elements may be added -to a score, inside a markup object. - -Notes and accidentals can be entered using markup -commands: - -@lilypond[quote,verbatim,relative=2] -a2 a^\markup { - \note #"4" #1 - = - \note-by-number #1 #1 #1.5 -} -b1_\markup { - \natural \semiflat \flat - \sesquiflat \doubleflat -} -\glissando -a1_\markup { - \natural \semisharp \sharp - \sesquisharp \doublesharp -} -\glissando b -@end lilypond - -Other notation objects may also be printed -in markup mode: - -@lilypond[quote,verbatim,relative=1] -g1 bes -ees-\markup { - \finger 4 - \tied-lyric #"~" - \finger 1 -} -fis_\markup { \dynamic rf } -bes^\markup { - \beam #8 #0.1 #0.5 -} -cis -d-\markup { - \markalphabet #8 - \markletter #8 -} -@end lilypond - -More generally, any available musical symbol may be -included separately in a markup object, as demonstrated -below; an exhaustive list of these symbols and their -names can be found in @ref{The Feta font}. - -@lilypond[quote,verbatim,relative=2] -c2 -c'^\markup { \musicglyph #"eight" } -c,4 -c,8._\markup { \musicglyph #"clefs.G_change" } -c16 -c2^\markup { \musicglyph #"timesig.neomensural94" } -@end lilypond - -@noindent -Another way of printing non-text glyphs is described in -@ref{Fonts explained}. This is useful for printing braces of -various sizes. - -The markup mode also supports diagrams for specific -instruments: - -@lilypond[quote,verbatim,relative=2] -c1^\markup { - \fret-diagram-terse #"x;x;o;2;3;2;" -} -c^\markup { - \harp-pedal #"^-v|--ov^" -} -c -c^\markup { - \combine - \musicglyph #"accordion.accDiscant" - \combine - \raise #0.5 \musicglyph #"accordion.accDot" - \raise #1.5 \musicglyph #"accordion.accDot" -} -@end lilypond - -@c The accordion diagram is actually taken from a snippet. - -@noindent -Such diagrams are documented in @ref{Instrument Specific Markup}. - -A whole score can even be nested inside a markup object. -In such a case, the nested @code{\score} block must -contain a @code{\layout} block, as demonstrated here: - -@lilypond[quote,verbatim,relative=1] -c4 d^\markup { - \score { - \relative c' { c4 d e f } - \layout { } - } -} -e f | -c d e f -@end lilypond - -An exhaustive list of music notation related commands can be -found in @ref{Music}. - - -@seealso -Notation Reference: -@ref{Music}, -@ref{The Feta font}, -@ref{Fonts explained}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}, -@file{scm/@/fret@/-diagrams@/.scm}, -@file{scm/@/harp@/-pedals@/.scm}. - - -@node Multi-page markup -@unnumberedsubsubsec Multi-page markup - -Although standard markup objects are not breakable, a -specific syntax makes it possible to enter lines of text that can -spread over multiple pages: - -@lilypond[quote,verbatim] -\markuplines { - \justified-lines { - A very long text of justified lines. - ... - } - \wordwrap-lines { - Another very long paragraph. - ... - } - ... -} -@end lilypond - -This syntax accepts a list of markups, that can be -@itemize -@item -the result of a markup list command, -@item -a list of markups, -@item -a list of markup lists. -@end itemize - -An exhaustive list of markup list commands can be found in -@ref{Text markup list commands}. - - -@seealso -Notation Reference: -@ref{Text markup list commands}, -@ref{New markup list command definition}. - -Snippets: -@rlsr{Text}. - -Internals Reference: @rinternals{TextScript}. - -Installed files: -@file{scm/@/define@/-markup@/-commands@/.scm}. - - -@predefined -@funindex \markuplines -@code{\markuplines}. -@endpredefined - - -@node Fonts -@subsection Fonts - -This section presents the way fonts are handled, -and how they may be changed in scores. - -@menu -* Fonts explained:: -* Single entry fonts:: -* Entire document fonts:: -@end menu - -@node Fonts explained -@unnumberedsubsubsec Fonts explained - -@cindex Pango -@cindex fonts, explained -@cindex braces, various sizes -@funindex font-interface - -Fonts are handled through several libraries. -FontConfig is used to detect available fonts on the system; -the selected fonts are rendered using Pango. - -Music notation fonts can be described as a set of -specific glyphs, ordered in several families. -The following syntax allows various LilyPond @code{feta} non-text -fonts to be used directly in markup mode: - -@lilypond[quote,verbatim,relative=2] -a1^\markup { - \vcenter { - \override #'(font-encoding . fetaBraces) - \lookup #"brace120" - \override #'(font-encoding . fetaNumber) - \column { 1 3 } - \override #'(font-encoding . fetaDynamic) - sf - \override #'(font-encoding . fetaMusic) - \lookup #"noteheads.s0petrucci" - } -} -@end lilypond - -@noindent -However, all these glyphs except the braces of various sizes -contained in @code{fetaBraces} are available using the -simpler syntax described in @ref{Music notation inside markup}. - -When using the glyphs contained in @code{fetaBraces}, the size of -the brace is specified by the numerical part of the glyph name, in -arbitrary units. Any integer from @code{0} to @code{575} inclusive -may be specified, @code{0} giving the smallest brace. The optimum -value must be determined by trial and error. These glyphs are all -left braces; right braces may be obtained by rotation, see -@ref{Rotating objects}. - -Three families of text fonts are made available: the -@emph{roman} (serif) font, that defaults to New Century -Schoolbook, the @emph{sans} font and the monospaced -@emph{typewriter} font -- these last two families are -determined by the Pango installation. - -Each family may include different shapes and series. -The following example demonstrates the ability to select -alternate families, shapes, series and sizes. The value -supplied to @code{font-size} is the required change from the -default size. - -@lilypond[quote,verbatim,relative=2] -\override Score.RehearsalMark #'font-family = #'typewriter -\mark \markup "Ouverture" -\override Voice.TextScript #'font-shape = #'italic -\override Voice.TextScript #'font-series = #'bold -d2.^\markup "Allegro" -\override Voice.TextScript #'font-size = #-3 -c4^smaller -@end lilypond - -@noindent -A similar syntax may be used in markup mode, however in this case -it is preferable to use the simpler syntax explained in -@ref{Selecting font and font size}: - -@lilypond[quote,verbatim] -\markup { - \column { - \line { - \override #'(font-shape . italic) - \override #'(font-size . 4) - Idomeneo, - } - \line { - \override #'(font-family . typewriter) - { - \override #'(font-series . bold) - re - di - } - \override #'(font-family . sans) - Creta - } - } -} -@end lilypond - -Although it is easy to switch between preconfigured fonts, -it is also possible to use other fonts, as explained in the -following sections: @ref{Single entry fonts} and -@ref{Entire document fonts}. - - -@seealso -Notation Reference: -@ref{The Feta font}, -@ref{Music notation inside markup}, -@ref{Selecting font and font size}, -@ref{Font}. - - -@node Single entry fonts -@unnumberedsubsubsec Single entry fonts - -Any font that is installed on the operating system and recognized -by FontConfig may be used in a score, using the following syntax: - -@lilypond[quote,verbatim,relative=2] -\override Staff.TimeSignature #'font-name = #"Charter" -\override Staff.TimeSignature #'font-size = #2 -\time 3/4 - -a1_\markup { - \override #'(font-name . "Vera Bold") - { Vera Bold } -} -@end lilypond - -@funindex show-available-fonts - -The following command displays a list of all available fonts -on the operating system: - -@example -lilypond -dshow-available-fonts x -@end example - -@noindent -The last argument of the command can be anything, but has to be -present. - - -@seealso -Notation Reference: -@ref{Fonts explained}, -@ref{Entire document fonts}. - -Snippets: -@rlsr{Text}. - -Installed files: -@file{lily/@/font@/-config@/-scheme@/.cc}. - - -@node Entire document fonts -@unnumberedsubsubsec Entire document fonts - -It is possible to change the fonts to be used as the default fonts in -the @emph{roman}, @emph{sans} and @emph{typewriter} font families by -specifying them, in that order, as shown in the example below. For an -explanation of fonts, see @ref{Fonts explained}. - -@cindex font families, setting -@funindex make-pango-font-tree - -@lilypond[verbatim,quote] -\paper { - myStaffSize = #20 - #(define fonts - (make-pango-font-tree "Times New Roman" - "Nimbus Sans" - "Luxi Mono" - (/ myStaffSize 20))) -} - -\relative c'{ - c1-\markup { - roman, - \sans sans, - \typewriter typewriter. } -} -@end lilypond - -@c we don't do Helvetica / Courier, since GS incorrectly loads -@c Apple TTF fonts - - -@seealso -Notation Reference: -@ref{Fonts explained}, -@ref{Single entry fonts}, -@ref{Selecting font and font size}, -@ref{Font}. - diff --git a/Documentation/user/tutorial.itely b/Documentation/user/tutorial.itely deleted file mode 100644 index 86836d02ab..0000000000 --- a/Documentation/user/tutorial.itely +++ /dev/null @@ -1,1988 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@ignore -Tutorial guidelines: (different from policy.txt!) -- unless you have a really good reason, use either - @lilypond[verbatim,quote] - or - @lilypond[verbatim,quote,relative=2] - - Don't use any other relative=X commands. - -- use "aes" and "ees" instead of "as" and "es". I know it's not - correct Dutch naming, but let's not confuse people with this - until we get to the Basic notation chapter. - -- Add "Music Glossary: @rglos{foo}" to the *top* of the relevant - portions of the tutorial. - -@end ignore - - -@node Tutorial -@chapter Tutorial - -This tutorial starts with an introduction to the LilyPond music -language and explains how to produce printed music. After this first -contact we will explain how to create beautiful printed music -containing common musical notation. - -@menu -* First steps:: -* Single staff notation:: -* Multiple notes at once:: -* Songs:: -* Final touches:: -@end menu - - -@node First steps -@section First steps - -This section gives a basic introduction to working with LilyPond. - -@menu -* Compiling a file:: -* Simple notation:: -* Working on input files:: -* How to read the manual:: -@end menu - - -@node Compiling a file -@subsection Compiling a file - -@cindex compiling -@cindex first example -@cindex example, first -@cindex case sensitive - -@qq{Compiling} is the term used for processing an input file -in LilyPond format to produce a file which can be printed and -(optionally) a MIDI file which can be played. LilyPond input -files are simple text files. The first example -shows what a simple input file looks like. - -To create sheet music, we write an input file that specifies the -notation. For example, if we write: - -@example -@{ - c' e' g' e' -@} -@end example - -@noindent -the result looks like this: - -@c in this case we don't want verbatim -@lilypond[quote] -{ - c' e' g' e' -} -@end lilypond - -@warning{Notes and lyrics in LilyPond input must always be -surrounded by @strong{@{ curly braces @}}. The braces -should also be surrounded by a space unless they are at the -beginning or end of a line to avoid ambiguities. The braces may -be omitted in some examples in this manual, but don't forget them -in your own music! For more information about the display of -examples in the manual, see @ref{How to read the manual}.} - -In addition, LilyPond input is @strong{case sensitive}. -@w{@code{@{ c d e @}}} is valid input; @w{@code{@{ C D E @}}} will -produce an error message. - -@smallspace - -@subheading Entering music and viewing output - -@cindex PDF file -@cindex viewing music -@cindex text editors -@cindex running LilyPond under MacOS X -@cindex MacOS X, running LilyPond -@cindex running LilyPond under Windows -@cindex Windows, running LilyPond -@cindex running LilyPond under Unix -@cindex Unix, running LilyPond - -In this section we will explain what commands to run and how to -view or print the output. - -Note that there are several other text editors available with -better support for LilyPond. For more information, see -@rprogram{Text editor support}. - -@warning{The first time you ever run LilyPond, it may take a -minute or two because all of the system fonts have to be analyzed -first. After this, LilyPond will be much faster!} - -@subsubheading MacOS X - -If you double click @command{LilyPond.app}, it will open with an -example file. Save it, for example, to @file{test.ly} on your -Desktop, and then process it with the menu command -@w{@code{Compile > Typeset File}}. The resulting PDF file will be -displayed on your screen. - -For future use of LilyPond, you should begin by selecting @q{New} -or @q{Open}. You must save your file before typesetting it. If -any errors occur in processing, please see the log window. - - -@subsubheading Windows - -On Windows, if you double-click in the LilyPond icon on the -Desktop, it will open a simple text editor with an example file. -Save it, for example, to @file{test.ly} on your Desktop and then -double-click on the file to process it (the file icon looks like a -note). After some seconds, you will get a file @file{test.pdf} on -your desktop. Double-click on this PDF file to view the typeset -score. An alternative method to process the @file{test.ly} file -is to drag and drop it onto the LilyPond icon using your mouse -pointer. - -To edit an existing @file{.ly} file, right-click on it and -select @qq{Edit source}. To get an empty file to start from, run -the editor as described above and use @qq{New} in -the @qq{File} menu, or right-click on the desktop and select -@qq{New..Text Document}, change its name to a name of your choice -and change the file extension to @code{.ly}. Double-click the -icon to type in your LilyPond source code as before. - -Double-clicking the file does not only result in a PDF file, but -also produces a @file{.log} file that contains some information on -what LilyPond has done to the file. If any errors occur, please -examine this file. - -@subsubheading UNIX - -Create a text file called @file{test.ly} and enter: - -@example -@{ - c' e' g' e' -@} -@end example - -To process @file{test.ly}, proceed as follows: - -@example -lilypond test.ly -@end example - -@noindent -You will see something resembling: - -@example -lilypond test.ly -GNU LilyPond @version{} -Processing `test.ly' -Parsing... -Interpreting music... -Preprocessing graphical objects... -Finding the ideal number of pages... -Fitting music on 1 page... -Drawing systems... -Layout output to `test.ps'... -Converting to `test.pdf'... -@end example - - -@node Simple notation -@subsection Simple notation - -@cindex simple notation -@cindex notation, simple - -LilyPond will add some notation elements automatically. In the -next example, we have only specified four pitches, but LilyPond -has added a clef, time signature, and rhythms. - -@lilypond[verbatim,quote] -{ - c' e' g' e' -} -@end lilypond - -@noindent -This behavior may be altered, but in most cases these automatic -values are useful. - - -@subheading Pitches - -@cindex pitches -@cindex relative mode -@cindex quote, single -@cindex comma -@cindex accidentals and relative mode -@cindex relative mode, and accidentals - -@funindex \relative -@funindex relative -@funindex ' -@funindex , - -Music Glossary: @rglos{pitch}, @rglos{interval}, -@rglos{scale}, @rglos{middle C}, @rglos{octave}, -@rglos{accidental}. - -The easiest way to enter notes is by using @code{\relative} mode. -In this mode, the octave is chosen automatically by assuming the -following note is always to be placed closest to the previous -note, i.e., it is to be placed in the octave which is within three -staff spaces of the previous note. We begin by entering the most -elementary piece of music, a @notation{scale}, in which every note -is within just one staff space of the previous note. - -@lilypond[verbatim,quote] -% set the starting point to middle C -\relative c' { - c d e f - g a b c -} -@end lilypond - -The initial note is @notation{middle C}. Each successive note is -placed closest to the previous note -- in other words, the first -@code{c} is the closest C to middle C. This is followed by the -closest D to the previous note. We can create melodies which have -larger intervals, still using only @code{\relative} mode: - -@lilypond[verbatim,quote] -\relative c' { - d f a g - c b f d -} -@end lilypond - -@noindent -It is not necessary for the first note of the melody to start on -the note which specifies the starting pitch. In the previous -example, the first note -- the @code{d} -- is the closest D to -middle C. - -By adding (or removing) quotes @code{'} or commas @code{,} from -the @code{@w{\relative c' @{}} command, we can change the starting -octave: - -@lilypond[verbatim,quote] -% one octave above middle C -\relative c'' { - e c a c -} -@end lilypond - -Relative mode can be confusing initially, but is the easiest way -to enter most melodies. Let us see how this relative calculation -works in practice. Starting from a B, which is on the middle line -in a treble clef, you can reach a C, D and E within 3 staff spaces -going up, and an A, G and F within 3 staff spaces going down. So -if the note following a B is a C, D or E it will be assumed to be -above the B, and an A, G or F will be assumed to be below. - -@lilypond[verbatim,quote] -\relative c'' { - b c % c is 1 staff space up, so is the c above - b d % d is 2 up or 5 down, so is the d above - b e % e is 3 up or 4 down, so is the e above - b a % a is 6 up or 1 down, so is the a below - b g % g is 5 up or 2 down, so is the g below - b f % f is 4 up or 3 down, so is the f below -} -@end lilypond - -Exactly the same happens even when any of these notes are -sharpened or flattened. @notation{Accidentals} are -@strong{totally ignored} in the calculation of relative position. -Precisely the same staff space counting is done from a note at any -other position on the staff. - -To add intervals that are larger than three staff spaces, we can -raise the @notation{octave} by adding a single quote @code{'} (or -apostrophe) to the note name. We can lower the octave by adding a -comma @code{,} to the note name. - -@lilypond[verbatim,quote] -\relative c'' { - a a, c' f, - g g'' a,, f' -} -@end lilypond - -@noindent -To change a note by two (or more!) octaves, we use multiple -@code{''} or @code{,,} -- but be careful that you use two single -quotes @code{''} and not one double quote @code{"}@tie{}! The -initial value in @code{@w{\relative c'}} may also be modified like -this. -@c " - keeps quotes in order for context-sensitive editor -td - -@subheading Durations (rhythms) - -@cindex note durations -@cindex durations -@cindex rhythms -@cindex whole note -@cindex half note -@cindex quarter note -@cindex dotted note -@cindex notating durations - -Music Glossary: @rglos{beam}, @rglos{duration}, -@rglos{whole note}, @rglos{half note}, @rglos{quarter note}, -@rglos{dotted note}. - -The @notation{duration} of a note is specified by a number after -the note name. @code{1} for a @notation{whole note}, @code{2} for -a @notation{half note}, @code{4} for a @notation{quarter note} and -so on. @notation{Beams} are added automatically. - -If you do not specify a duration, the previous duration is used -for the next note. The duration of the first note defaults to a -quarter. - -@lilypond[verbatim,quote] -\relative c'' { - a1 - a2 a4 a8 a - a16 a a a a32 a a a a64 a a a a a a a a2 -} -@end lilypond - -To create @notation{dotted notes}, add a dot @code{.} to the -duration number. The duration of a dotted note must be stated -explicitly (i.e., with a number). - -@lilypond[verbatim,quote] -\relative c'' { - a a a4. a8 - a8. a16 a a8. a8 a4. -} -@end lilypond - - -@subheading Rests - -@cindex rest -@cindex notating rests - -Music Glossary: @rglos{rest}. - -A @notation{rest} is entered just like a note with the name -@code{r}@tie{}: - -@lilypond[verbatim,quote] -\relative c'' { - a r r2 - r8 a r4 r4. r8 -} -@end lilypond - - -@subheading Time signature - -@cindex time signature - -@funindex \time -@funindex time - -Music Glossary: @rglos{time signature}. - -The @notation{time signature} can be set with the @code{\time} -command: - -@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 Clef - -@cindex clef -@cindex treble -@cindex alto -@cindex tenor -@cindex bass - -@funindex \clef -@funindex clef - -Music Glossary: @rglos{clef}. - -The @notation{clef} can be set using the @code{\clef} command: - -@lilypond[verbatim,quote] -\relative c' { - \clef treble - c1 - \clef alto - c1 - \clef tenor - c1 - \clef bass - c1 -} -@end lilypond - - -@subheading All together - -Here is a small example showing all these elements together: - -@lilypond[verbatim,quote] -\relative c, { - \time 3/4 - \clef bass - c2 e8 c' g'2. - f4 e d c4 c, r4 -} -@end lilypond - - -@seealso -Notation Reference: @ruser{Writing pitches}, -@ruser{Writing rhythms}, @ruser{Writing rests}, -@ruser{Time signature}, @ruser{Clef}. - - -@node Working on input files -@subsection Working on input files - -@cindex curly braces -@cindex braces, curly -@cindex comments -@cindex line comment -@cindex comment, line -@cindex block comment -@cindex comment, line -@cindex case sensitive -@cindex whitespace insensitive -@cindex expressions - -@funindex { ... } -@funindex % -@funindex %@{ ... %@} - -LilyPond input files are similar to source files in many common -programming languages. They are case sensitive, and white-space -is generally ignored. Expressions are formed with curly braces -@{ @}, and comments are denoted with @code{%} or -@w{@code{%@{ ... %@}}}. - -If the previous sentences sound like nonsense, don't worry! We'll -explain what all these terms mean: - -@itemize - -@item -@strong{Case sensitive}: -it matters whether you enter a letter in lower case (e.g. -@w{@code{a, b, s, t}}) or upper case (e.g. @w{@code{A, B, S, T}}). -Notes are lower case: @w{@code{@{ c d e @}}} is valid input; -@w{@code{@{ C D E @}}} will produce an error message. - -@item -@strong{Whitespace insensitive}: -it does not matter how many spaces (or new lines) you add. -@w{@code{@{ c d e @}}} means the same thing as -@w{@code{@{ c @tie{}} @tie{} @tie{} d e @}} and: - -@example -@{ c d - e @} -@end example - -@noindent -Of course, the previous example is hard to read. A good rule of -thumb is to indent code blocks with either a tab or two spaces: - -@example -@{ - c d e -@} -@end example - -@item -@strong{Expressions}: -every piece of LilyPond input needs to have @strong{@{ curly -braces @}} placed around the input. These braces tell LilyPond -that the input is a single music expression, just like parentheses -@code{()} in mathematics. The braces should be surrounded by a -space unless they are at the beginning or end of a line to avoid -ambiguities. - -A LilyPond command followed by a simple expression in braces (such -as @w{@code{\relative @{ @}}}) also counts as a single music -expression. - -@cindex comments -@cindex line comment -@cindex block comment -@item -@strong{Comments}: -a comment is a remark for the human reader of the music input; it -is ignored while parsing, so it has no effect on the printed -output. There are two types of comments. The percent symbol -@code{%} introduces a line comment; anything after @code{%} on -that line is ignored. By convention, a line comment is placed -@emph{above} the code it refers to. - -@example -a4 a a a -% this comment refers to the Bs -b2 b -@end example - -A block comment marks a whole section of music input as a comment. -Anything that is enclosed in @code{%@{} and @code{%@}} is ignored. -However, block comments do not @q{nest}. This means that you -cannot place a block comment inside another block comment. If you -try, the first @code{%@}} will terminate @emph{both} block -comments. The following fragment shows possible uses for -comments: - -@example -% notes for twinkle twinkle follow - c4 c g' g a a g2 - -%@{ - This line, and the notes below are ignored, - since they are in a block comment. - - f f e e d d c2 -%@} -@end example - -@end itemize - - -@node How to read the manual -@subsection How to read the manual - -@cindex how to read the manual -@cindex manual, reading -@cindex reading the manual -@cindex examples, clickable -@cindex clickable examples -@cindex tips for constructing files -@cindex templates -@cindex constructing files, tips -@cindex files, tips for constructing - -LilyPond input must be surrounded by @{ @} marks or a -@code{@w{\relative c'' @{ ... @}}}, as we saw in @ref{Working on -input files}. For the rest of this manual, most examples will -omit this. To replicate the examples, you may copy and paste the -displayed input, but you @strong{must} add the -@code{@w{\relative c'' @{ @}}} like this: - -@example -\relative c'' @{ - ... example goes here... -@} -@end example - -Why omit the braces? Most examples in this manual can be inserted -into the middle of a longer piece of music. For these examples, -it does not make sense to add @code{@w{\relative c'' @{ @}}} -- -you should not place a @code{\relative} inside another -@code{\relative}! If we included @code{@w{\relative c'' @{ @}}} -around every example, you would not be able to copy a small -documentation example and paste it inside a longer piece of your -own. Most people want to add material to an existing piece, so we -format the manual this way. - - -@subheading Clickable examples - -Many people learn programs by trying and fiddling around with the -program. This is also possible with LilyPond. If you click on a -picture in the HTML version of this manual, you will see the exact -LilyPond input that was used to generate that image. Try it on -this image: - -@c no verbatim here -@lilypond[quote] -\relative c'' { - c-\markup { \bold \huge { Click here. } } -} -@end lilypond - -By cutting and pasting everything in the @qq{ly snippet} section, -you have a starting template for experiments. To see exactly the -same output (line-width and all), copy everything from @qq{Start -cut-&-pastable section} to the bottom of the file. - - -@seealso -There are more tips for constructing input files in -@ref{Suggestions for writing LilyPond input files}. But it might be -best to read through the rest of the tutorial first. - - -@node Single staff notation -@section Single staff notation - -This section introduces common notation that is used for one voice -on one staff. - -@menu -* Accidentals and key signatures:: -* Ties and slurs:: -* Articulation and dynamics:: -* Adding text:: -* Automatic and manual beams:: -* Advanced rhythmic commands:: -@end menu - - -@node Accidentals and key signatures -@subsection Accidentals and key signatures - -@subheading Accidentals - -@cindex accidentals -@cindex accidentals and key signatures -@cindex sharp -@cindex double sharp -@cindex sharp, double -@cindex flat -@cindex double flat -@cindex flat, double - -@funindex es -@funindex is -@funindex eses -@funindex isis - -Music Glossary: @rglos{sharp}, @rglos{flat}, @rglos{double sharp}, -@rglos{double flat}, @rglos{accidental}. - -A @notation{sharp} pitch is made by adding @code{is} to the name, -and a @notation{flat} pitch by adding @code{es}. As you might -expect, a @notation{double sharp} or @notation{double flat} is -made by adding @code{isis} or @code{eses}. This syntax is derived -from note naming conventions in Nordic and Germanic languages, -like German and Dutch. To use other names for -@notation{accidentals}, see @ruser{Note names in other languages}. - -@lilypond[verbatim,quote,relative=2] -cis1 ees fisis, aeses -@end lilypond - -@cindex key signature, setting -@subheading Key signatures - -@cindex key signature -@cindex major -@cindex minor -@cindex accidentals and key signature -@cindex content vs. layout -@cindex layout vs. content - -@funindex \key -@funindex key -@funindex \major -@funindex major -@funindex \minor -@funindex minor - -Music Glossary: @rglos{key signature}, @rglos{major}, -@rglos{minor}. - -The @notation{key signature} is set with the command @code{\key} -followed by a pitch and @code{\major} or @code{\minor}. - -@lilypond[verbatim,quote,relative=2] -\key d \major -a1 -\key c \minor -a -@end lilypond - -@smallspace - -@subheading Warning: key signatures and pitches - -Music Glossary: @rglos{accidental}, @rglos{key signature}, -@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp}, -@rglos{transposition}. - -To determine whether to print an @notation{accidental}, LilyPond -examines the pitches and the @notation{key signature}. The key -signature only affects the @emph{printed} accidentals, not the -note's @notation{pitch}! This is a feature that often causes -confusion to newcomers, so let us explain it in more detail. - -LilyPond makes a sharp distinction between musical content and -layout. The alteration (@notation{flat}, @notation{natural sign} or -@notation{sharp}) of a note is part of the pitch, and is therefore -musical content. Whether an accidental (a @emph{printed} flat, -natural or sharp sign) is printed in front of the corresponding -note is a question of layout. Layout is something that follows -rules, so accidentals are printed automatically according to those -rules. The pitches in your music are works of art, so they will -not be added automatically, and you must enter what you want to -hear. - -In this example: - -@lilypond[verbatim,quote,relative=2] -\key d \major -d cis fis -@end lilypond - -@noindent -No note has a printed accidental, but you must still add -@code{is} and type @code{cis} and @code{fis} in the input file. - -The code @code{b} does not mean @qq{print a black dot just on -the middle line of the staff.} Rather, it means @qq{there is a -note with pitch B-natural.} In the key of A-flat major, it -@emph{does} get an accidental: - -@lilypond[verbatim,quote,relative=2] -\key aes \major -b -@end lilypond - -Adding all alterations explicitly might require a little more -effort when typing, but the advantage is that -@notation{transposing} is easier, and accidentals can be printed -according to different conventions. For some examples how -accidentals can be printed according to different rules, see -@ruser{Automatic accidentals}. - - -@seealso -Notation Reference: @ruser{Note names in other languages}, -@ruser{Accidentals}, @ruser{Automatic accidentals}, -@ruser{Key signature}. - -Music Glossary: @rglos{Pitch names}. - - -@node Ties and slurs -@subsection Ties and slurs - -@cindex tie -@cindex slur -@cindex slur, phrasing -@cindex phrasing slur - -@funindex ~ -@funindex ( ... ) -@funindex \( ... \) - -@subheading Ties - - -Music Glossary: @rglos{tie}. - -A @notation{tie} is created by appending a tilde @code{~} to the -first note being tied. - -@lilypond[verbatim,quote,relative=2] -g4~ g c2~ -c4 ~ c8 a8 ~ a2 -@end lilypond - -@subheading Slurs - - -Music Glossary: @rglos{slur}. - -A @notation{slur} is a curve drawn across many notes. The -starting note and ending note are marked with @code{(} and -@code{)} respectively. - -@lilypond[verbatim,quote,relative=2] -d4( c16) cis( d e c cis d) e( d4) -@end lilypond - -@subheading Phrasing slurs - -Music Glossary: @rglos{slur}, @rglos{phrasing}. - -Slurs to indicate longer @notation{phrasing} can be entered with -@code{\(} and @code{\)}. You can have both @notation{slurs} -and phrasing slurs at the same time, but you cannot have -simultaneous slurs or simultaneous phrasing slurs. - -@lilypond[verbatim,quote,relative=2] -a8(\( ais b c) cis2 b'2 a4 cis,\) -@end lilypond - -@smallspace - -@cindex slurs versus ties -@subheading Warnings: slurs vs. ties - -Music Glossary: @rglos{articulation}, @rglos{slur}, @rglos{tie}. - -A @notation{slur} looks like a @notation{tie}, but it has a -different meaning. A tie simply makes the first note longer, and -can only be used on pairs of notes with the same pitch. Slurs -indicate the @notation{articulation} of notes, and can be used on -larger groups of notes. Slurs and ties can be nested. - -@lilypond[verbatim,quote,relative=2] -c2~( c8 fis fis4 ~ fis2 g2) -@end lilypond - - -@seealso -Notation Reference: @ruser{Ties}, @ruser{Slurs}, -@ruser{Phrasing slurs}. - - -@node Articulation and dynamics -@subsection Articulation and dynamics - - -@subheading Articulations - -@cindex articulation -@cindex accent -@cindex staccato - -Music Glossary: @rglos{articulation}. - -Common @notation{articulations} can be added to a note using a -dash @code{-} and a single character: - -@lilypond[verbatim,quote,relative=2] -c-. c-- c-> c-^ c-+ c-_ -@end lilypond - -@subheading Fingerings - -@cindex fingering - -@funindex ^ -@funindex _ - -Music Glossary: @rglos{fingering}. - -Similarly, @notation{fingering} indications can be added to a note -using a dash (@code{-}) and the digit to be printed: - -@lilypond[verbatim,quote,relative=2] -c-3 e-5 b-2 a-1 -@end lilypond - -Articulations and fingerings are usually placed automatically, but -you can specify a direction by replacing the dash (@code{-}) with -@code{^} (up) or @code{_} (down). You can also use multiple -articulations on the same note. However, in most cases it is best -to let LilyPond determine the articulation directions. - -@lilypond[verbatim,quote,relative=2] -c_-^1 d^. f^4_2-> e^-_+ -@end lilypond - -@subheading Dynamics - -@cindex dynamics -@cindex decrescendo -@cindex crescendo - -@funindex \f -@funindex \ff -@funindex \mp -@funindex \p -@funindex \mf -@funindex \pp -@funindex \< -@funindex < -@funindex \> -@funindex > -@funindex \! -@funindex ! - -Music Glossary: @rglos{dynamics}, @rglos{crescendo}, -@rglos{decrescendo}. - -@notation{Dynamic} signs are made by adding the markings (with a -backslash) to the note: - -@lilypond[verbatim,quote,relative=2] -c\ff c\mf c\p c\pp -@end lilypond - - -@notation{Crescendi} and @notation{decrescendi} are started with -the commands @code{\<} and @code{\>}. The next dynamics sign, for -example @code{\f}, will end the (de)crescendo, or the command -@code{\!} can be used: - -@lilypond[verbatim,quote,relative=2] -c2\< c2\ff\> c2 c2\! -@end lilypond - - -@seealso -Notation Reference: @ruser{Articulations and ornamentations}, -@ruser{Fingering instructions}, @ruser{Dynamics}. - - -@node Adding text -@subsection Adding text - -@cindex text, adding -@cindex adding text -@cindex markup - -@funindex \markup -@funindex markup - -Text may be added to your scores: - -@lilypond[verbatim,quote,relative=2] -c1^"espr" a_"legato" -@end lilypond - -Extra formatting may be added with the @code{\markup} command: - -@lilypond[verbatim,quote,relative=2] -c1^\markup{ \bold espr} -a1_\markup{ - \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p -} -@end lilypond - - -@seealso -Notation Reference: @ruser{Writing text}. - - -@node Automatic and manual beams -@subsection Automatic and manual beams - -@cindex beaming -@cindex automatic beams -@cindex manual beams -@cindex beams, automatic -@cindex beams, manual -@cindex beams, by hand - -@funindex [ ... ] -@funindex [ -@funindex ] -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -Music Glossary: @rglos{beam}. - -All @notation{beams} are drawn automatically: - -@lilypond[verbatim,quote,relative=2] -a8 ais d ees r d c16 b a8 -@end lilypond - -If you do not like the automatic beams, they may be overridden -manually. To correct just an occasional beam mark the first note -to be beamed with @code{[} and the last one with @code{]}. - -@lilypond[verbatim,quote,relative=2] -a8[ ais] d[ ees r d] a b -@end lilypond - -If you want to turn off automatic beaming entirely or for an -extended section of music, use the command @code{\autoBeamOff} -to turn off automatic beaming and @code{\autoBeamOn} to turn it -on again. - -@lilypond[verbatim,quote,relative=2] -\autoBeamOff -a8 c b4 d8. c16 b4 -\autoBeamOn -a8 c b4 d8. c16 b4 -@end lilypond - - -@seealso -Notation Reference: @ruser{Automatic beams}, @ruser{Manual beams}. - - -@node Advanced rhythmic commands -@subsection Advanced rhythmic commands - -@subheading Partial measure - -@cindex pickup -@cindex anacrusis -@cindex partial measure - -@funindex \partial -@funindex partial - -Music Glossary: @rglos{anacrusis}. - -A pickup (or @notation{anacrusis}) is entered with the keyword -@code{\partial}. It is followed by a duration: @code{\partial 4} -is a quarter note pickup and @code{\partial 8} an eighth note. - -@lilypond[verbatim,quote,relative=2] -\partial 8 -f8 c2 d -@end lilypond - -@subheading Tuplets - -@cindex tuplets -@cindex triplets - -@funindex \times -@funindex times - -Music Glossary: @rglos{note value}, @rglos{triplet}. - -@notation{Tuplets} are made with the @code{\times} keyword. It -takes two arguments: a fraction and a piece of music. The -duration of the piece of music is multiplied by the fraction. -Triplets make notes occupy 2/3 of their notated duration, so a -@notation{triplet} has 2/3 as its fraction - -@lilypond[verbatim,quote,relative=2] -\times 2/3 { f8 g a } -\times 2/3 { c r c } -\times 2/3 { f,8 g16[ a g a] } -\times 2/3 { d4 a8 } -@end lilypond - -@subheading Grace notes - -@cindex grace notes -@cindex acciaccatura -@cindex appoggiatura - -@funindex \grace -@funindex grace -@funindex \acciaccatura -@funindex acciaccatura -@funindex \appoggiatura -@funindex acciaccatura - -Music Glossary: @rglos{grace notes}, @rglos{acciaccatura}, -@rglos{appoggiatura}. - -@notation{Grace notes} are created with the @code{\grace} command, -although they can also be created by prefixing a music expression -with the keyword @code{\appoggiatura} or @code{\acciaccatura}: - -@lilypond[verbatim,quote,relative=2] -c2 \grace { a32[ b] } c2 -c2 \appoggiatura b16 c2 -c2 \acciaccatura b16 c2 -@end lilypond - - -@seealso -Notation Reference: @ruser{Grace notes}, @ruser{Tuplets}, -@ruser{Upbeats}. - - -@node Multiple notes at once -@section Multiple notes at once - -This section introduces having more than one note at the same -time: multiple instruments, multiple staves for a single -instrument (i.e. piano), and chords. - -Polyphony in music refers to having more than one voice occurring -in a piece of music. Polyphony in LilyPond refers to having more -than one voice on the same staff. - -@menu -* Music expressions explained:: -* Multiple staves:: -* Staff groups:: -* Combining notes into chords:: -* Single staff polyphony:: -@end menu - - -@node Music expressions explained -@subsection Music expressions explained - -@cindex music expression -@cindex expression, music -@cindex compound music expression -@cindex music expression, compound - -In LilyPond input files, music is represented by @emph{music -expressions}. A single note is a music expression: - -@lilypond[verbatim,quote,relative=2] -a4 -@end lilypond - -Enclosing a note in braces creates a @emph{compound music -expression}. Here we have created a compound music expression -with two notes: - -@lilypond[verbatim,quote,relative=2] -{ a4 g4 } -@end lilypond - -Putting a group of music expressions (e.g. notes) in braces means -that they are in sequence (i.e. each one follows the previous -one). The result is another music expression: - -@lilypond[verbatim,quote,relative=2] -{ { a4 g } f g } -@end lilypond - -@subheading Analogy: mathematical expressions - -This mechanism is similar to mathematical formulas: a big formula -is created by composing small formulas. Such formulas are called -expressions, and they can contain other expressions, so you can -make arbitrarily complex and large expressions. For example, - -@example -1 - -1 + 2 - -(1 + 2) * 3 - -((1 + 2) * 3) / (4 * 5) -@end example - -This is a sequence of expressions, where each expression is -contained in the next (larger) one. The simplest expressions are -numbers, and larger ones are made by combining expressions with -operators (like @code{+}, @code{*} and @code{/}) and parentheses. -Like mathematical expressions, music expressions can be nested -arbitrarily deep, which is necessary for complex music like -polyphonic scores. - - -@subheading Simultaneous music expressions: multiple staves - -@cindex multiple staves -@cindex staves, multiple -@cindex polyphony -@cindex combining expressions in parallel -@cindex parallel expressions -@cindex expressions, parallel -@cindex relative notes and simultaneous music -@cindex relative notes and parallel expressions -@cindex simultaneous music and relative notes -@cindex parallel expressions and relative notes - -@funindex << -@funindex >> -@funindex << ... >> - -Music Glossary: @rglos{polyphony}. - -This technique is useful for @notation{polyphonic} music. To -enter music with more voices or more staves, we combine -expressions in parallel. To indicate that two voices should play -at the same time, simply enter a simultaneous combination of music -expressions. A @q{simultaneous} music expression is formed by -enclosing expressions inside @code{<<} and @code{>>}. In the -following example, three sequences (all containing two separate -notes) are combined simultaneously: - -@lilypond[verbatim,quote] -\relative c'' { - << - { a4 g } - { f e } - { d b } - >> -} -@end lilypond - -Note that we have indented each level of the input with a -different amount of space. LilyPond does not care how much (or -little) space there is at the beginning of a line, but indenting -LilyPond code like this makes it much easier for humans to read. - -@warning{each note is relative to the previous note in -the input, not relative to the @code{c''} in the initial -@code{@bs{}relative} command.} - - -@subheading Simultaneous music expressions: single staff - -To determine the number of staves in a piece, LilyPond looks at -the beginning of the first expression. If is a single note, there -is one staff; if there is a simultaneous expression, there is more -than one staff. - -@lilypond[verbatim,quote] -\relative c'' { - c2 <> - << { e f } { c <> } >> -} -@end lilypond - -@node Multiple staves -@subsection Multiple staves - -@cindex multiple staves -@cindex staves, multiple -@cindex context -@cindex context, notation -@cindex notation context - -@funindex \new Staff -@funindex new Staff -@funindex Staff -@funindex \new -@funindex new -@funindex Score -@funindex Voice -@funindex Lyrics -@funindex ChordNames - -LilyPond input files are constructed out of music expressions, as -we saw in @ref{Music expressions explained}. If the score begins -with simultaneous music expressions, LilyPond creates multiples -staves. However, it is easier to see what happens if we create -each staff explicitly. - -To print more than one staff, each piece of music that makes up a -staff is marked by adding @code{\new Staff} before it. These -@code{Staff} elements are then combined in parallel with @code{<<} -and @code{>>}: - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - -The command @code{\new} introduces a @q{notation context.} A -notation context is an environment in which musical events (like -notes or @code{\clef} commands) are interpreted. For simple -pieces, such notation contexts are created automatically. For -more complex pieces, it is best to mark contexts explicitly. - -There are several types of contexts. @code{Score}, @code{Staff}, -and @code{Voice} handle melodic notation, while @code{Lyrics} sets -lyric texts and @code{ChordNames} prints chord names. - -In terms of syntax, prepending @code{\new} to a music expression -creates a bigger music expression. In this way it resembles the -minus sign in mathematics. The formula @math{(4+5)} is an -expression, so @math{-(4+5)} is a bigger expression. - -Time signatures entered in one staff affects all other staves by -default. On the other hand, the key signature of one staff does -@emph{not} affect other staves. This different default behavior -is because scores with transposing instruments are more common -than polyrhythmic scores. - -@lilypond[verbatim,quote] -\relative c'' { - << - \new Staff { \clef treble \key d \major \time 3/4 c } - \new Staff { \clef bass c,, } - >> -} -@end lilypond - - - - -@node Staff groups -@subsection Staff groups - -@cindex piano staff -@cindex staff, piano -@cindex choir staff -@cindex staff, choir -@cindex grand staff -@cindex staff, grand -@cindex staff group - -@funindex PianoStaff -@funindex GrandStaff -@funindex ChoirStaff - -Music Glossary: @rglos{brace}. - -Piano music is typeset in two staves connected by a -@notation{brace}. -Printing such a staff is similar to the polyphonic example in -@ref{Multiple staves}. However, now this entire expression is -inserted inside a @code{PianoStaff}: - -@example -\new PianoStaff << - \new Staff @dots{} - \new Staff @dots{} ->> -@end example - -Here is a small example: - -@lilypond[verbatim,quote] -\relative c'' { - \new PianoStaff << - \new Staff { \time 2/4 c4 e g g, } - \new Staff { \clef bass c,, c' e c } - >> -} -@end lilypond - -Other staff groupings are introduced with @code{\new GrandStaff}, -suitable for orchestral scores, and @w{@code{\new ChoirStaff}}, -suitable for vocal scores. These staff groups each form another -type of context, one that generates the brace at the left end of -every system and also controls the extent of bar lines. - - -@seealso -Notation Reference: @ruser{Keyboard and other multi-staff -instruments}, -@ruser{Displaying staves}. - - -@node Combining notes into chords -@subsection Combining notes into chords - -@cindex chords -@cindex note durations in chords - -@funindex < -@funindex > -@funindex < ... > - -Music Glossary: @rglos{chord}. - -We saw earlier how notes can be combined into @notation{chords} by -indicating they are simultaneous by enclosing them in double angle -brackets. However, the normal way of indicating a chord is to -surround the pitches with @emph{single} angle brackets. Note that -all the notes in a chord must have the same duration, and that the -duration is placed after the closing bracket. - -@lilypond[verbatim,quote,relative=2] -r4 4 2 -@end lilypond - -Think of chords as almost equivalent to single notes: -almost everything you can attach to a single note can be attached -to a chord, and everything must go @emph{outside} the angle -brackets. For example, you can combine markings like beams and -ties with chords. They must be placed outside the angle brackets. - -@lilypond[verbatim,quote,relative=2] -r4 8[ ]~ 2 -r4 8( \> 4 \!) -@end lilypond - - -@node Single staff polyphony -@subsection Single staff polyphony - -@cindex polyphony -@cindex multiple voices -@cindex voices, more on one staff -@cindex single staff polyphony -@cindex spacer rest -@cindex rest, spacer - -@funindex << ... \\ ... >> -@funindex << -@funindex \\ -@funindex >> - -Polyphonic music in lilypond, while not difficult, uses concepts -that we haven't discussed yet, so we're not going to introduce -them here. Instead, the following sections introduce these concepts -and explain them thoroughly. - -@seealso -Learning Manual: @ref{Voices contain music}. - -Notation Reference: @ruser{Simultaneous notes}. - -@node Songs -@section Songs - -This section introduces vocal music and simple song sheets. - -@menu -* Setting simple songs:: -* Aligning lyrics to a melody:: -* Lyrics to multiple staves:: -@end menu - - -@node Setting simple songs -@subsection Setting simple songs - -@cindex lyrics -@cindex songs - -@funindex \addlyrics -@funindex addlyrics - -Music Glossary: @rglos{lyrics}. - -Here is the start of the melody to a nursery -rhyme, @notation{Girls and boys come out to play}: - -@lilypond[verbatim,quote] -\relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 -} -@end lilypond - -The @notation{lyrics} can be set to these notes, combining both -with the @code{\addlyrics} keyword. Lyrics are entered by -separating each syllable with a space. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - } - \addlyrics { - Girls and boys come out to play, - } ->> -@end lilypond - -Note the curly brackets delimiting both the music and the lyrics, -and the double angle brackets @w{@code{<< ... >>}} around the -whole piece to show that the music and lyrics are to occur at the -same time. - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@cindex melisma -@cindex extender line -@cindex hyphens -@cindex underscore -@cindex lyrics, aligning -@cindex aligning lyrics -@cindex lyrics, multi-syllable words -@cindex words with multiple syllables in lyrics - -Music Glossary: @rglos{melisma}, @rglos{extender line}. - -The next line in the nursery rhyme is @notation{The moon doth -shine as bright as day}. Let's extend it: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c b a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -We see the extra lyrics do not align properly with the notes. The -word @notation{shine} should be sung on two notes, not one. This -is called a @notation{melisma}, a single syllable sung to more -than one note. There are several ways to spread a syllable over -multiple notes, the simplest being to add a slur across them, for -details, see @ref{Ties and slurs}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c( b) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -The words now line up correctly with the notes, but the automatic -beaming for the notes above @notation{shine as} does not look right. -We can correct this by inserting manual beaming commands to override -the automatic beaming here, for details, see @ref{Automatic and -manual beams}. - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c([ b]) a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine as bright as day; - } ->> -@end lilypond - -As an alternative to using slurs, the melismata may be indicated -in just the lyrics by using an underscore @code{_} for each note -that should be included in the melisma: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \major - \time 6/8 - d4 b8 c4 a8 d4 b8 g4 - g8 a4 b8 c[ b] a d4 b8 g4. - } - \addlyrics { - Girls and boys come out to play, - The moon doth shine _ as bright as day; - } ->> -@end lilypond - -If a syllable extends over several notes or a single very long -note an @notation{extender line} is usually drawn from the -syllable extending under all the notes for that syllable. It is -entered as two underscores @code{__}. Here is an example from the -first three bars of @notation{Dido's Lament}, from Purcell's -@notation{Dido and Æneas}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key g \minor - \time 3/2 - g2 a bes bes( a) - b c4.( bes8 a4. g8 fis4.) g8 fis1 - } - \addlyrics { - When I am laid, - am laid __ in earth, - } ->> -@end lilypond - -None of the examples so far have involved words containing more -than one syllable. Such words are usually split one syllable to a -note, with hyphens between syllables. Such hyphens are entered as -two dashes, resulting in a centered hyphen between the syllables. -Here is an example showing this and everything we have learned so -far about aligning lyrics to notes. - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \key g \major - \time 3/4 - \partial 4 - d4 g4 g a8( b) g4 g4 - b8( c) d4 d e4 c2 - } - \addlyrics { - A -- way in a __ man -- ger, - no __ crib for a bed, __ - } ->> -@end lilypond - -Some lyrics, especially those in Italian, require the opposite: -setting more than one syllable to a single note. This is -achieved by linking the syllables together with a single -underscore @code{_} (with no spaces), or enclosing them in quotes. -Here's an example from Rossini's @notation{Figaro}, where -@notation{al} has to be sung on the same note as the @notation{go} of -@notation{Largo} in Figaro's aria @notation{Largo al factotum}: - -@c no ragged-right here because otherwise the hyphens get lost, -@c but the example is long enough to avoid looking strange. -@lilypond[verbatim,quote,noragged-right] -<< - \relative c' { - \clef bass - \key c \major - \time 6/8 - c4.~ c8 d b c([ d]) b c d b c - } - \addlyrics { - Lar -- go_al fac -- to -- tum del -- la cit -- tà - } ->> -@end lilypond - - -@seealso -Notation Reference: @ruser{Vocal music}. - - -@node Lyrics to multiple staves -@subsection Lyrics to multiple staves - -@cindex lyrics and multiple staves -@cindex multiple staves and lyrics - -The simple approach using @code{\addlyrics} can be used for -placing lyrics under more than one staff. Here is an -example from Handel's @notation{Judas Maccabæus}: - -@lilypond[verbatim,quote] -<< - \relative c'' { - \key f \major - \time 6/8 - \partial 8 - c8 c([ bes]) a a([ g]) f f'4. b, c4.~ c4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, __ - } - \relative c' { - \key f \major - \time 6/8 - \partial 8 - r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4 - } - \addlyrics { - Let flee -- cy flocks the hills a -- dorn, - } ->> -@end lilypond - -Scores any more complex than this simple example are better -produced by separating out the score structure from the notes and -lyrics with variables. These are discussed in @ref{Organizing -pieces with variables}. - - -@seealso -Notation Reference: @ruser{Vocal music}. - - -@node Final touches -@section Final touches - -This is the final section of the tutorial; it demonstrates how to -add the final touches to simple pieces, and provides an -introduction to the rest of the manual. - -@menu -* Organizing pieces with variables:: -* Version number:: -* Adding titles:: -* Absolute note names:: -* After the tutorial:: -@end menu - - -@node Organizing pieces with variables -@subsection Organizing pieces with variables - -@cindex variables -@cindex variables, defining -@cindex identifiers -@cindex macros -@cindex assigning variables -@cindex using variables -@cindex variables, using -@cindex variables, characters allowed in -@cindex characters allowed in variables - -When all of the elements discussed earlier are combined to produce -larger files, the music expressions get a lot bigger. In -polyphonic music with many staves, the input files can become very -confusing. We can reduce this confusion by using -@emph{variables}. - -With variables (also known as identifiers or macros), we can break -up complex music expressions. A variable is assigned as -follows: - -@example -namedMusic = @{ @dots{} @} -@end example - -The contents of the music expression @code{namedMusic} can be used -later by placing a backslash in front of the name -(@code{\namedMusic}, just like a normal LilyPond command). - -@lilypond[verbatim,quote] -violin = \new Staff { - \relative c'' { - a4 b c b - } -} -cello = \new Staff { - \relative c { - \clef bass - e2 d - } -} -{ - << - \violin - \cello - >> -} -@end lilypond - -@noindent -The name of a variable must have alphabetic characters only, no -numbers, underscores, or dashes. - -Variables must be defined @emph{before} the main music -expression, but may be used as many times as required anywhere after -they have been defined. They may even be used in a later definition -of another variable, giving a way of shortening the input if a -section of music is repeated many times. - -@lilypond[verbatim,quote] -tripletA = \times 2/3 { c,8 e g } -barA = { \tripletA \tripletA \tripletA \tripletA } - -\relative c'' { - \barA \barA -} -@end lilypond - -Variables may be used for many other types of objects in -the input. For example, - -@example -width = 4.5\cm -name = "Wendy" -aFivePaper = \paper @{ paperheight = 21.0 \cm @} -@end example - -Depending on its contents, the variable can be used in different -places. The following example uses the above variables: - -@example -\paper @{ - \aFivePaper - line-width = \width -@} -@{ - c4^\name -@} -@end example - - -@node Version number -@subsection Version number - -@cindex versioning -@cindex version -@cindex version number -@cindex upgrades -@cindex future upgrades -@cindex updating files -@cindex files, updating - -@funindex \version -@funindex version -@funindex convert-ly - -The @code{\version} statement records the version of LilyPond that -was used to write the file: - -@example -\version @w{"@version{}"} -@end example - -@noindent -By convention, this is placed at the top of your LilyPond file. - -These annotations make future upgrades of LilyPond go more -smoothly. Changes in the syntax are handled with a special -program, @command{convert-ly}, and it uses @code{\version} to -determine what rules to apply. For details, see -@rprogram{Updating files with convert-ly}. - - -@node Adding titles -@subsection Adding titles - -@cindex title -@cindex headers -@cindex header block - -@funindex \header -@funindex header - -The title, composer, opus number, and similar information are -entered in the @code{\header} block. This exists outside of the -main music expression; the @code{\header} block is usually placed -underneath the version number. - -@example -\version @w{"@version{}"} -\header @{ - title = "Symphony" - composer = "Me" - opus = "Op. 9" -@} - -@{ - @dots{} music @dots{} -@} -@end example - -When the file is processed, the title and composer are printed -above the music. More information on titling can be found in -@ruser{Creating titles}. - - -@node Absolute note names -@subsection Absolute note names - -@cindex note names -@cindex note names, absolute -@cindex absolute mode -@cindex absolute values for pitches -@cindex pitches, absolute values -@cindex absolute note names - -So far we have always used @code{\relative} to define pitches. -This is the easiest way to enter most music, but another way of -defining pitches exists: absolute mode. - -If you omit the @code{\relative}, LilyPond treats all pitches as -absolute values. A @code{c'} will always mean middle C, a -@code{b} will always mean the note one step below middle C, and a -@code{g,} will always mean the note on the bottom staff of the -bass clef. - -@lilypond[verbatim,quote] -{ - \clef bass - c' b g, g, - g, f, f c' -} -@end lilypond - -Here is a four-octave scale: - -@lilypond[verbatim,quote] -{ - \clef bass - c, d, e, f, - g, a, b, c - d e f g - a b c' d' - \clef treble - e' f' g' a' - b' c'' d'' e'' - f'' g'' a'' b'' - c'''1 -} -@end lilypond - -As you can see, writing a melody in the treble clef involves a lot -of quote @code{'} marks. Consider this fragment from Mozart: - -@lilypond[verbatim,quote] -{ - \key a \major - \time 6/8 - cis''8. d''16 cis''8 e''4 e''8 - b'8. cis''16 b'8 d''4 d''8 -} -@end lilypond - -All these quotes makes the input less readable and they are a source -of errors. With @code{\relative}, the previous example is much -easier to read and type: - -@lilypond[verbatim,quote] -\relative c'' { - \key a \major - \time 6/8 - cis8. d16 cis8 e4 e8 - b8. cis16 b8 d4 d8 -} -@end lilypond - -If you make a mistake with an octave mark (@code{'} or @code{,}) -while working in @code{\relative} mode, it is very obvious -- many -notes will be in the wrong octave. When working in absolute mode, -a single mistake will not be as visible, and will not be as easy -to find. - -However, absolute mode is useful for music which has large -intervals, and is extremely useful for computer-generated LilyPond -files. - - - -@node After the tutorial -@subsection After the tutorial - -After finishing the tutorial, you should probably try writing a -piece or two. Start by adding notes to one of the -@ref{Templates}. If you need any notation that was not covered in -the tutorial, look at the Notation Reference, starting with -@ruser{Musical notation}. If you want to write for an instrument -ensemble that is not covered in the templates, take a look at -@ref{Extending the templates}. - -Once you have written a few short pieces, read the rest of the -Learning Manual (chapters 3-5). There's nothing wrong with -reading it now, of course! However, the rest of the Learning -Manual assumes that you are familiar with LilyPond input. You may -wish to skim these chapters right now, and come back to them after -you have more experience. - -In this tutorial and in the rest of the Learning Manual, there is a -paragraph @strong{See also} at the end of each section, which contains -cross-references to other sections: you should not follow these -cross-references at first reading; when you have read all of the -Learning Manual, you may want to read some sections again and follow -cross-references for further reading. - -If you have not done so already, @emph{please} read @ref{About the -documentation}. There is a lot of information about LilyPond, so -newcomers often do not know where they should look for help. If -you spend five minutes reading that section carefully, you might -save yourself hours of frustration looking in the wrong places! - diff --git a/Documentation/user/tweaks.itely b/Documentation/user/tweaks.itely deleted file mode 100644 index dd38806ad6..0000000000 --- a/Documentation/user/tweaks.itely +++ /dev/null @@ -1,3753 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Tweaking output -@chapter Tweaking output - -This chapter discusses how to modify output. LilyPond is extremely -configurable; virtually every fragment of output may be changed. - - -@menu -* Tweaking basics:: -* The Internals Reference manual:: -* Appearance of objects:: -* Placement of objects:: -* Collisions of objects:: -* Further tweaking:: -@end menu - -@node Tweaking basics -@section Tweaking basics - -@menu -* Introduction to tweaks:: -* Objects and interfaces:: -* Naming conventions of objects and properties:: -* Tweaking methods:: -@end menu - -@node Introduction to tweaks -@subsection Introduction to tweaks - -@q{Tweaking} is a LilyPond term for the various methods available -to the user for modifying the actions taken during interpretation -of the input file and modifying the appearance of the printed -output. Some tweaks are very easy to use; others are more -complex. But taken together the methods available for tweaking -permit almost any desired appearance of the printed music to be -achieved. - -In this section we cover the basic concepts required to understand -tweaking. Later we give a variety of ready-made commands which can -simply be copied to obtain the same effect in your own scores, and -at the same time we show how these commands may be constructed so -that you may learn how to develop your own tweaks. - -Before starting on this Chapter you may wish to review the section -@ref{Contexts and engravers}, as Contexts, Engravers, and the -Properties contained within them are fundamental to understanding -and constructing Tweaks. - -@node Objects and interfaces -@subsection Objects and interfaces - -@cindex object -@cindex grob -@cindex spanner -@cindex interface -@cindex properties, object -@cindex object properties -@cindex layout object -@cindex object, layout -@cindex interface - -Tweaking involves modifying the internal operation and structures -of the LilyPond program, so we must first introduce some terms -which are used to describe those internal operations and -structures. - -The term @q{Object} is a generic term used to refer to the -multitude of internal structures built by LilyPond during the -processing of an input file. So when a command like @code{\new -Staff} is encountered a new object of type @code{Staff} is -constructed. That @code{Staff} object then holds all the -properties associated with that particular staff, for example, its -name and its key signature, together with details of the engravers -which have been assigned to operate within that staff's context. -Similarly, there are objects to hold the properties of all other -contexts, such as @code{Voice} objects, @code{Score} objects, -@code{Lyrics} objects, as well as objects to represent all -notational elements such as bar lines, -note heads, ties, dynamics, etc. Every object has its own set of -property values. - -Some types of object are given special names. Objects which represent -items of notation on the printed output such as note heads, stems, -slurs, ties, fingering, clefs, etc are called @q{Layout objects}, -often known as @q{Graphical Objects}, or @q{Grobs} for short. These -are still objects in the generic sense above, and so they too all have -properties associated with them, such as their position, size, color, -etc. - -Some layout objects are still more specialized. Phrasing slurs, -crescendo hairpins, ottava marks, and many other grobs are not -localized in a single place -- they have a starting point, an -ending point, and maybe other properties concerned with their -shape. Objects with an extended shape like these are called -@q{Spanners}. - -It remains to explain what @q{Interfaces} are. Many objects, even -though they are quite different, share common features which need to -be processed in the same way. For example, all grobs have a color, a -size, a position, etc, and all these properties are processed in the -same way during LilyPond's interpretation of the input file. To -simplify these internal operations these common actions and properties -are grouped together in an object called a @code{grob-interface}. -There are many other groupings of common properties like this, each -one given a name ending in @code{interface}. In total there are over -100 such interfaces. We shall see later why this is of interest and -use to the user. - -These, then, are the main terms relating to objects which we -shall use in this chapter. - -@node Naming conventions of objects and properties -@subsection Naming conventions of objects and properties - -@cindex naming conventions for objects -@cindex naming conventions for properties -@cindex objects, naming conventions -@cindex properties, naming conventions - -We met some object naming conventions previously, in -@ref{Contexts and engravers}. Here for reference is a list -of the most common object and property types together with -the conventions for naming them and a couple of examples of -some real names. We have used @q{A} to stand for any capitalized -alphabetic character and @q{aaa} to stand for any number of -lower-case alphabetic characters. Other characters are used -verbatim. - -@multitable @columnfractions .33 .33 .33 -@headitem Object/property type - @tab Naming convention - @tab Examples -@item Contexts - @tab Aaaa or AaaaAaaaAaaa - @tab Staff, GrandStaff -@item Layout Objects - @tab Aaaa or AaaaAaaaAaaa - @tab Slur, NoteHead -@item Engravers - @tab Aaaa_aaa_engraver - @tab Clef_engraver, Note_heads_engraver -@item Interfaces - @tab aaa-aaa-interface - @tab grob-interface, break-aligned-interface -@item Context Properties - @tab aaa or aaaAaaaAaaa - @tab alignAboveContext, skipBars -@item Layout Object Properties - @tab aaa or aaa-aaa-aaa - @tab direction, beam-thickness -@end multitable - -As we shall see shortly, the properties of different types of -object are modified by different commands, so it is useful to -be able to recognize the type of object from the names of its -properties. - - -@node Tweaking methods -@subsection Tweaking methods - -@cindex tweaking methods - -@strong{\override command} - -@cindex override command -@cindex override syntax - -@funindex \override -@funindex override - -We have already met the commands @code{\set} and @code{\with}, used to -change the properties of @strong{contexts} and to remove and add -@strong{engravers}, in @ref{Modifying context properties}, and -@ref{Adding and removing engravers}. We now must meet some more -important commands. - -The command to change the properties of @strong{layout objects} is -@code{\override}. Because this command has to modify -internal properties deep within LilyPond its syntax is not -as simple as the commands you have met so far. It needs to -know precisely which property of which object in which context -has to be modified, and what its new value is to be. Let's see -how this is done. - -The general syntax of this command is: - -@example -\override @var{Context}.@var{LayoutObject} #'@var{layout-property} = -#@var{value} -@end example - -@noindent -This will set the property with the name @var{layout-property} of the -layout object with the name @var{LayoutObject}, which is a member of -the @var{Context} context, to the value @var{value}. - -The @var{Context} can be omitted (and usually is) when the -required context is unambiguously implied and is one of lowest -level contexts, i.e., @code{Voice}, @code{ChordNames} or -@code{Lyrics}, and we shall omit it in many of the following -examples. We shall see later when it must be specified. - -Later sections deal comprehensively with properties and their -values, but to illustrate the format and use of these commands -we shall use just a few simple properties and values which are -easily understood. - -For now, don't worry about the @code{#'}, which must precede the -layout property, and the @code{#}, which must precede the value. -These must always be present in exactly this form. This is the -most common command used in tweaking, and most of the rest of -this chapter will be directed to presenting examples of how it is -used. Here is a simple example to change the color of the -note head: - -@cindex color property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a b c -@end lilypond - -@strong{\revert command} - -@cindex revert command - -@funindex \revert -@funindex revert - -Once overridden, the property retains its new value until it is -overridden again or a @code{\revert} command is encountered. -The @code{\revert} command has the following syntax and causes -the value of the property to revert to its original default -value; note, not its previous value if several @code{\override} -commands have been issued. - -@example -\revert @var{Context}.@var{LayoutObject} #'@var{layout-property} -@end example - -Again, just like @var{Context} in the @code{\override} command, -@var{Context} is often not needed. It will be omitted -in many of the following examples. Here we revert the color -of the note head to the default value for the final two notes: - -@cindex color property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\override NoteHead #'color = #red -e f g -\override NoteHead #'color = #green -a -\revert NoteHead #'color -b c -@end lilypond - -@strong{\once prefix} - -@funindex \once -@funindex once - -Both the @code{\override} and the @code{\set} commands may be -prefixed by @code{\once}. This causes the following -@code{\override} or @code{\set} command to be effective only -during the current musical moment before the property reverts -back to its default value. Using the same example, we can -change the color of a single note like this: - -@cindex color property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -c d -\once \override NoteHead #'color = #red -e f g -\once \override NoteHead #'color = #green -a b c -@end lilypond - -@strong{\overrideProperty command} - -@cindex overrideProperty command - -@funindex \overrideProperty -@funindex overrideProperty - -There is another form of the override command, -@code{\overrideProperty}, which is occasionally required. -We mention it here for completeness, but for details see -@ruser{Difficult tweaks}. -@c Maybe explain in a later iteration -td - -@strong{\tweak command} - -@cindex tweak command - -@funindex \tweak -@funindex tweak - -The final tweaking command which is available is @code{\tweak}. -This should be used to change the properties of objects which -occur at the same musical moment, such as the notes within a -chord. Using @code{\override} would affect all the notes -within a chord, whereas @code{\tweak} affects just the following -item in the input stream. - -Here's an example. Suppose we wish to change the size of the -middle note head (the E) in a C major chord. Let's first see what -@code{\once \override} would do: - -@cindex font-size property, example -@cindex NoteHead, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - \once \override NoteHead #'font-size = #-3 - - -@end lilypond - -We see the override affects @emph{all} the note heads in the chord. -This is because all the notes of a chord occur at the same -@emph{musical moment}, and the action of @code{\once} is to -apply the override to all layout objects of the type specified -which occur at the same musical moment as the @code{\override} -command itself. - -The @code{\tweak} command operates in a different way. It acts -on the immediately following item in the input stream. However, -it is effective only on objects which are created directly from -the input stream, essentially note heads and articulations; -objects such as stems and accidentals are created later and -cannot be tweaked in this way. Furthermore, when it is applied -to note heads these @emph{must} be within a chord, i.e., within -single angle brackets, so to tweak a single note the @code{\tweak} -command must be placed inside single angle brackets with the -note. - -So to return to our example, the size of the middle note of -a chord would be changed in this way: - -@cindex font-size property, example -@cindex @code{\tweak}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] - 4 - 4 -@end lilypond - -Note that the syntax of @code{\tweak} is different from that -of the @code{\override} command. Neither the context nor the -layout object should be specified; in fact, it would generate -an error to do so. These are both implied by the following -item in the input stream. Note also that an equals sign should -not be present. So the general syntax of the -@code{\tweak} command is simply - -@example -\tweak #'@var{layout-property} #@var{value} -@end example - -A @code{\tweak} command can also be used to modify just one in -a series of articulations, as shown here: - -@cindex color property, example -@cindex @code{\tweak}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a ^Black - -\tweak #'color #red ^Red - -\tweak #'color #green _Green -@end lilypond - -@noindent -Note that the @code{\tweak} command must be preceded by an -articulation mark as if it were an articulation itself. - -@cindex tuplets, nested -@cindex triplets, nested -@cindex bracket, tuplet -@cindex bracket, triplet -@cindex tuplet bracket -@cindex triplet bracket - -@funindex TupletBracket - -The @code{\tweak} command must also be used to change the -appearance of one of a set of nested tuplets which begin at the -same musical moment. In the following example, the long tuplet -bracket and the first of the three short brackets begin at the -same musical moment, so any @code{\override} command would apply -to both of them. In the example, @code{\tweak} is used to -distinguish between them. The first @code{\tweak} command -specifies that the long tuplet bracket is to be placed above the -notes and the second one specifies that the tuplet number is to be -printed in red on the first short tuplet bracket. - -@cindex @code{\tweak}, example -@cindex direction property, example -@cindex color property, example - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -\tweak #'direction #up -\times 4/3 { - \tweak #'color #red - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } - \times 2/3 { c8[ c8 c8] } -} -@end lilypond - -If nested tuplets do not begin at the same moment, their -appearance may be modified in the usual way with -@code{\override} commands: - -@cindex text property, example -@cindex tuplet-number function, example -@cindex transparent property, example -@cindex TupletNumber, example of overriding - -@c NOTE Tuplet brackets collide if notes are high on staff -@c See issue 509 -@lilypond[quote,ragged-right,verbatim,fragment,relative=1] -\times 2/3 { c8[ c c]} -\once \override TupletNumber - #'text = #tuplet-number::calc-fraction-text -\times 2/3 { - c[ c] - c[ c] - \once \override TupletNumber #'transparent = ##t - \times 2/3 { c8[ c c] } -\times 2/3 { c8[ c c]} -} -@end lilypond - - -@seealso -Notation Reference: -@ruser{The tweak command}. - - -@node The Internals Reference manual -@section The Internals Reference manual - -@cindex Internals Reference - -@menu -* Properties of layout objects:: -* Properties found in interfaces:: -* Types of properties:: -@end menu - -@node Properties of layout objects -@subsection Properties of layout objects - -@cindex properties of layout objects -@cindex properties of grobs -@cindex grobs, properties of -@cindex layout objects, properties of -@cindex Internals Reference manual - -Suppose you have a slur in a score which, to your mind, -appears too thin and you'd like to draw it a little heavier. -How do you go about doing this? You know from the statements -earlier about the flexibility of LilyPond that such a thing -should be possible, and you would probably guess that an -@code{\override} command would be needed. But is there a -heaviness property for a slur, and if there is, how might it -be modified? This is where the Internals Reference manual -comes in. It contains all the information you might need to -construct this and all other @code{\override} commands. - -Before we look at the Internals Reference a word of warning. -This is a @strong{reference} document, which means there is -little or no explanation contained within it: its purpose is -to present information precisely and concisely. This -means it might look daunting at first sight. Don't worry! -The guidance and explanation presented here will enable you -to extract the information from the Internals Reference for -yourself with just a little practice. - -@cindex override example -@cindex Internals Reference, example of using -@cindex @code{\addlyrics} example - -Let's use a concrete example with a simple fragment of real -music: - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -Suppose now that we decide we would like the slurs to be a -little heavier. Is this possible? The slur is certainly a -layout object, so the question is, @q{Is there a property -belonging to a slur which controls the heaviness?} To answer -this we must look in the Internals Reference, or IR for short. - -The IR for the version of LilyPond you are using may be found -on the LilyPond website at @uref{http://lilypond.org}. Go to the -documentation page and click on the Internals Reference link. -For learning purposes you should use the standard HTML version, -not the @q{one big page} or the PDF. For the next few -paragraphs to make sense you will need to actually do this -as you read. - -Under the heading @strong{Top} you will see five links. Select -the link to the @emph{Backend}, which is where information about -layout objects is to be found. There, under the heading -@strong{Backend}, select the link to @emph{All layout objects}. -The page that appears lists all the layout objects used in your -version of LilyPond, in alphabetic order. Select the link to -Slur, and the properties of Slurs are listed. - -An alternative way of finding this page is from the Notation -Reference. On one of the pages that deals with slurs you may find a -link to the Internals Reference. This link will take you directly to -this page, but if you have an idea about the name of the layout object -to be tweaked, it is easier to go straight to the IR and search there. - -This Slur page in the IR tells us first that Slur objects are created -by the Slur_engraver. Then it lists the standard settings. Note -these are @strong{not} in alphabetic order. Browse down them looking -for a property that might control the heaviness of slurs, and you -should find - -@example -@code{thickness} (number) - @code{1.2} - Line thickness, generally measured in @code{line-thickness} -@end example - -This looks a good bet to change the heaviness. It tells us that -the value of @code{thickness} is a simple @emph{number}, -that the default value is 1.2, and that the units are -in another property called @code{line-thickness}. - -As we said earlier, there are few to no explanations in the IR, -but we already have enough information to try changing the -slur thickness. We see that the name of the layout object -is @code{Slur}, that the name of the property to change is -@code{thickness} and that the new value should be a number -somewhat larger than 1.2 if we are to make slurs thicker. - -We can now construct the @code{\override} command by simply -substituting the values we have found for the names, omitting -the context. Let's use a very large value for the thickness -at first, so we can be sure the command is working. We get: - -@example -\override Slur #'thickness = #5.0 -@end example - -Don't forget the @code{#'} preceding the -property name and a @code{#} preceding the new value! - -The final question is, @q{Where should this command be -placed?} While you are unsure and learning, the best -answer is, @q{Within the music, before the first slur and -close to it.} Let's do that: - -@cindex Slur example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -and we see that the slur is indeed heavier. - -So this is the basic way of constructing @code{\override} -commands. There are a few more complications that we -shall meet in later sections, but you now know all the -essentials required to make up your own -- but you will -still need some practice. This is provided in the examples -which follow. - -@subheading Finding the context - -@cindex context, finding -@cindex context, identifying correct - -But first, what if we had needed to specify the Context? -What should it be? We could guess that slurs are in -the Voice context, as they are clearly closely associated -with individual lines of music, but can we be sure? To -find out, go back to the top of the IR page describing the -Slur, where it says @q{Slur objects are created by: Slur -engraver}. So slurs will be created in whichever context -the @code{Slur_engraver} is in. Follow the link to the -@code{Slur_engraver} page. At the very bottom it tells -us that @code{Slur_engraver} is part of five Voice contexts, -including the standard voice context, @code{Voice}, so our -guess was correct. And because @code{Voice} is one of the -lowest level contexts which is implied unambiguously by -the fact that we are entering notes, we can omit it in this -location. - -@subheading Overriding once only - -@cindex overriding once only -@cindex once override - -@funindex \once -@funindex once - -As you can see, @emph{all} the slurs are thicker in the final example -above. But what if we wanted just the first slur to be thicker? This -is achieved with the @code{\once} command. Placed immediately before -the @code{\override} command it causes it to change only the slur -which begins on the @strong{immediately following} note. If the -immediately following note does not begin a slur the command has no -effect at all -- it is not remembered until a slur is encountered, it -is simply discarded. So the command with @code{\once} must be -repositioned as follows: - -@cindex Slur, example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -Now only the first slur is made heavier. - -The @code{\once} command can also be used before the @code{\set} -command. - -@subheading Reverting - -@cindex revert -@cindex default properties, reverting to - -@funindex \revert -@funindex revert - -Finally, what if we wanted just the first two slurs to be -heavier? Well, we could use two commands, each preceded by -@code{\once} placed immediately before each of the notes where -the slurs begin: - -@cindex Slur, example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - b[( g]) g | - % Increase thickness of immediately following slur only - \once \override Slur #'thickness = #5.0 - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -or we could omit the @code{\once} command and use the @code{\revert} -command to return the @code{thickness} property to its default value -after the second slur: - -@cindex Slur, example of overriding -@cindex thickness property, example - -@lilypond[quote,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 - % Increase thickness of all following slurs from 1.2 to 5.0 - \override Slur #'thickness = #5.0 - b[( g]) g | - g[( e]) - % Revert thickness of all following slurs to default of 1.2 - \revert Slur #'thickness - e d[( f]) a | - a g - } - \addlyrics { - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -The @code{\revert} command can be used to return any property -changed with @code{\override} back to its default value. -You may use whichever method best suits what you want to do. - -That concludes our introduction to the IR, and the basic -method of tweaking. Several examples follow in the later -sections of this Chapter, partly to introduce you to some of the -additional features of the IR, and partly to give you more -practice in extracting information from it. These examples will -contain progressively fewer words of guidance and explanation. - - -@node Properties found in interfaces -@subsection Properties found in interfaces - -@cindex interface -@cindex interface properties -@cindex properties in interfaces - -Suppose now that we wish to print the lyrics in italics. What form of -@code{\override} command do we need to do this? We first look in the -IR page listing @q{All layout objects}, as before, and look for an -object that might control lyrics. We find @code{LyricText}, which -looks right. Clicking on this shows the settable properties for lyric -text. These include the @code{font-series} and @code{font-size}, but -nothing that might give an italic shape. This is because the shape -property is one that is common to all font objects, so, rather than -including it in every layout object, it is grouped together with other -similar common properties and placed in an @strong{Interface}, the -@code{font-interface}. - -So now we need to learn how to find the properties of interfaces, -and to discover what objects use these interface properties. - -Look again at the IR page which describes LyricText. At the bottom of -the page is a list of clickable interfaces which LyricText supports. -The list has several items, including @code{font-interface}. Clicking -on this brings up the properties associated with this interface, which -are also properties of all the objects which support it, including -LyricText. - -Now we see all the user-settable properties which control fonts, -including @code{font-shape(symbol)}, where @code{symbol} can be -set to @code{upright}, @code{italics} or @code{caps}. - -You will notice that @code{font-series} and @code{font-size} are also -listed there. This immediately raises the question: Why are the -common font properties @code{font-series} and @code{font-size} listed -under @code{LyricText} as well as under the interface -@code{font-interface} but @code{font-shape} is not? The answer is -that @code{font-series} and @code{font-size} are changed from their -global default values when a @code{LyricText} object is created, but -@code{font-shape} is not. The entries in @code{LyricText} then tell -you the values for those two properties which apply to -@code{LyricText}. Other objects which support @code{font-interface} -will set these properties differently when they are created. - -Let's see if we can now construct the @code{\override} command -to change the lyrics to italics. The object is @code{LyricText}, -the property is @code{font-shape} and the value is -@code{italic}. As before, we'll omit the context. - -As an aside, although it is an important one, note that because the -values of @code{font-shape} are symbols they must be introduced with a -single apostrophe, @code{'}. That is why apostrophes are needed -before @code{thickness} in the earlier example and @code{font-shape}. -These are both symbols too. Symbols are then read internally by -LilyPond. Some of them are the names of properties, like -@code{thickness} or @code{font-shape}, others are used as values that -can be given to properties, like @code{italic}. Note the distinction -from arbitrary text strings, which would appear as @code{"a text -string"}; for more details about symbols and strings, see @ref{Scheme -tutorial}. - -Ok, so the @code{\override} command we need to print the lyrics -in italics should be - -@example -\override LyricText #'font-shape = #'italic -@end example - -@noindent -and this should be placed just in front of and close to the -lyrics which it should affect, like this: - -@cindex font-shape property, example -@cindex italic, example -@cindex LyricText, example of overriding -@cindex @code{\addlyrics}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 6/8 - { - r4 b8 b[( g]) g | - g[( e]) e d[( f]) a | - a g - } - \addlyrics { - \override LyricText #'font-shape = #'italic - The man who feels love's sweet e -- mo -- tion - } -} -@end lilypond - -@noindent -and the lyrics are all printed in italics. - -@subheading Specifying the context in lyric mode - -@cindex context, specifying in lyric mode -@cindex lyric mode, specifying context - -In the case of lyrics, if you try specifying the context in the -format given earlier the command will fail. A syllable -entered in lyricmode is terminated by either a space, -a newline or a digit. All other characters are included -as part of the syllable. For this reason a space or newline -must appear before the terminating @code{@}} to prevent it being -included as part of the final syllable. Similarly, -spaces must be inserted before and after the -period or dot, @q{.}, separating the context name from the -object name, as otherwise the two names are run together and -the interpreter cannot recognize them. So the command should be: - -@example -\override Lyrics . LyricText #'font-shape = #'italic -@end example - -@warning{In lyrics always leave whitespace between the final -syllable and the terminating brace.} - -@warning{In overrides in lyrics always place spaces around -the dot between the context name and the object name.} - - -@seealso -Learning Manual: @ref{Scheme tutorial}. - - -@node Types of properties -@subsection Types of properties - -@cindex property types - -So far we have seen two types of property: @code{number} and -@code{symbol}. To be valid, the value given to a property -must be of the correct type and obey the rules for that type. -The type of property is always shown in brackets after the -property name in the IR. Here is a list of the types you may -need, together with the rules for that type, and some examples. -You must always add a hash symbol, @code{#}, of course, -to the front of these values when they are entered in the -@code{\override} command. - -@multitable @columnfractions .2 .45 .35 -@headitem Property type - @tab Rules - @tab Examples -@item Boolean - @tab Either True or False, represented by #t or #f - @tab @code{#t}, @code{#f} -@item Dimension (in staff space) - @tab A positive decimal number (in units of staff space) - @tab @code{2.5}, @code{0.34} -@item Direction - @tab A valid direction constant or its numerical equivalent (decimal -values between -1 and 1 are allowed) - @tab @code{LEFT}, @code{CENTER}, @code{UP}, - @code{1}, @code{-1} -@item Integer - @tab A positive whole number - @tab @code{3}, @code{1} -@item List - @tab A set of values separated by spaces, enclosed in parentheses -and preceded by an apostrophe - @tab @code{'(left-edge staff-bar)}, @code{'(1)}, - @code{'(1.0 0.25 0.5)} -@item Markup - @tab Any valid markup - @tab @code{\markup @{ \italic "cresc." @}} -@item Moment - @tab A fraction of a whole note constructed with the -make-moment function - @tab @code{(ly:make-moment 1 4)}, - @code{(ly:make-moment 3 8)} -@item Number - @tab Any positive or negative decimal value - @tab @code{3.5}, @code{-2.45} -@item Pair (of numbers) - @tab Two numbers separated by a @q{space . space} and enclosed -in brackets preceded by an apostrophe - @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} -@item Symbol - @tab Any of the set of permitted symbols for that property, -preceded by an apostrophe - @tab @code{'italic}, @code{'inside} -@item Unknown - @tab A procedure, or @code{#f} to cause no action - @tab @code{bend::print}, @code{ly:text-interface::print}, - @code{#f} -@item Vector - @tab A list of three items enclosed in parentheses and preceded -by apostrophe-hash, @code{'#}. - @tab @code{'#(#t #t #f)} -@end multitable - - -@seealso -Learning Manual: @ref{Scheme tutorial}. - - -@node Appearance of objects -@section Appearance of objects - -Let us now put what we have learned into practice with a few -examples which show how tweaks may be used to change the -appearance of the printed music. - -@menu -* Visibility and color of objects:: -* Size of objects:: -* Length and thickness of objects:: -@end menu - -@node Visibility and color of objects -@subsection Visibility and color of objects - -In the educational use of music we might wish to print a score -with certain elements omitted as an exercise for the student, -who is required to supply them. As a simple example, -let us suppose the exercise is to supply the missing bar lines -in a piece of music. But the bar lines are normally inserted -automatically. How do we prevent them printing? - -Before we tackle this, let us remember that object properties are -grouped in what are called @emph{interfaces} -- see @ref{Properties -found in interfaces}. This is simply to group together those -properties that may be used together to tweak a graphical object -- if -one of them is allowed for an object, so are the others. Some objects -then use the properties in some interfaces, others use them from other -interfaces. The interfaces which contain the properties used by a -particular grob are listed in the IR at the bottom of the page -describing that grob, and those properties may be viewed by looking at -those interfaces. - -We explained how to find information about grobs in @ref{Properties of -layout objects}. Using the same approach, we go to the IR to find the -layout object which prints bar lines. Going via @emph{Backend} and -@emph{All layout objects} we find there is a layout object called -@code{BarLine}. Its properties include two that control its -visibility: @code{break-visibility} and @code{stencil}. Barline also -supports a number of interfaces, including the @code{grob-interface}, -where we find the @code{transparent} and the @code{color} properties. -All of these can affect the visibility of bar lines (and, of course, -by extension, many other layout objects too.) Let's consider each of -these in turn. - -@subheading stencil - -@cindex stencil property - -This property controls the appearance of the bar lines by specifying -the symbol (glyph) which should be printed. In common -with many other properties, it can be set to print nothing by -setting its value to @code{#f}. Let's try it, as before, omitting -the implied Context, @code{Voice}: - -@cindex BarLine, example of overriding -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -The bar lines are still printed. What is wrong? Go back to the IR -and look again at the page giving the properties of BarLine. At the -top of the page it says @qq{Barline objects are created by: -Bar_engraver}. Go to the @code{Bar_engraver} page. At the bottom it -gives a list of Contexts in which the bar engraver operates. All of -them are of the type @code{Staff}, so the reason the @code{\override} -command failed to work as expected is because @code{Barline} is not in -the default @code{Voice} context. If the context is specified -wrongly, the command simply does not work. No error message is -produced, and nothing is logged in the log file. Let's try correcting -it by adding the correct context: - -@cindex BarLine, example of overriding -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Now the bar lines have vanished. - -@subheading break-visibility - -@cindex break-visibility property - -We see from the @code{BarLine} properties in the IR that the -@code{break-visibility} property requires a vector of three booleans. -These control respectively whether bar lines are printed at the end of -a line, in the middle of lines, and at the beginning of lines. For -our example we want all bar lines to be suppressed, so the value we -need is @code{'#(#f #f #f)}. Let's try that, remembering to include -the @code{Staff} context. Note also that in writing this value we -have @code{#'#} before the opening bracket. The @code{'#} is required -as part of the value to introduce a vector, and the first @code{#} is -required, as always, to precede the value itself in the -@code{\override} command. - -@cindex BarLine, example of overriding -@cindex break-visibility property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'break-visibility = #'#(#f #f #f) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -And we see this too removes all the bar lines. - -@subheading transparent - -@cindex transparent property -@cindex transparency - -We see from the properties specified in the @code{grob-interface} page -in the IR that the @code{transparent} property is a boolean. This -should be set to @code{#t} to make the grob transparent. In this next -example let us make the time signature invisible rather than the bar -lines. To do this we need to find the grob name for the time -signature. Back to the @q{All layout objects} page in the IR to find -the properties of the @code{TimeSignature} layout object. This is -produced by the @code{Time_signature_engraver} which you can check -also lives in the @code{Staff} context and also supports the -@code{grob-interface}. So the command to make the time signature -transparent is: - -@cindex TimeSignature, example of overriding -@cindex transparent property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'transparent = ##t - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -The time signature is gone, but this command leaves a gap where -the time signature should be. Maybe this is what is wanted for -an exercise for the student to fill it in, but in other -circumstances a gap might be undesirable. To remove it, the -stencil for the time signature should be set to @code{#f} -instead: - -@cindex TimeSignature, example of overriding -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.TimeSignature #'stencil = ##f - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -and the difference is obvious: setting the stencil to @code{#f} -removes the object entirely; making the object @code{transparent} -leaves it where it is, but makes it invisible. - -@subheading color - -@cindex color property - -Finally let us try making the bar lines invisible by coloring -them white. (There is a difficulty with this in that the -white bar line may or may not blank out the staff lines where -they cross. You may see in some of the examples below that this -happens unpredictably. The details of why this is so and how to -control it are covered in @ruser{Painting objects white}. But at -the moment we are learning about color, so please just accept this -limitation for now.) - -The @code{grob-interface} specifies that the -color property value is a list, but there is no -explanation of what that list should be. The list it -requires is actually a list of values in internal units, -but, to avoid having to know what these are, several ways -are provided to specify colors. The first way is to use one -of the @q{normal} colors listed in the first table in -@ruser{List of colors}. To set the bar lines to white -we write: - -@cindex BarLine, example of overriding -@cindex color property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #white - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -and again, we see the bar lines are not visible. Note that -@emph{white} is not preceded by an apostrophe -- it is not -a symbol, but a @emph{function}. When called, it provides -the list of internal values required to set the color to -white. The other colors in the normal list are functions -too. To convince yourself this is working you might like -to change the color to one of the other functions in the -list. - -@cindex color, X11 -@cindex X11 colors - -@funindex x11-color - -The second way of changing the color is to use the list of -X11 color names in the second list in @ruser{List of colors}. -However, these must be preceded by another function, which -converts X11 color names into the list of internal values, -@code{x11-color}, like this: - -@cindex BarLine, example of overriding -@cindex color property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(x11-color 'white) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Note that in this case the function @code{x11-color} takes -a symbol as an argument, so the symbol must be preceded by -an apostrophe and the two enclosed in brackets. - -@cindex rgb colors -@cindex color, rgb - -@funindex rgb-color - -There is yet a third function, one which converts RGB values into -internal colors -- the @code{rgb-color} function. This takes -three arguments giving the intensities of the red, green and -blue colors. These take values in the range 0 to 1. So to -set the color to red the value should be @code{(rgb-color 1 0 0)} -and to white it should be @code{(rgb-color 1 1 1)}: - -@cindex BarLine, example of overriding -@cindex color property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.BarLine #'color = #(rgb-color 1 1 1) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -Finally, there is also a grey scale available as part of the -X11 set of colors. These range from black, @code{'grey0'}, -to white, @code{'grey100}, in steps of 1. Let's illustrate -this by setting all the layout objects in our example to -various shades of grey: - -@cindex StaffSymbol, example of overriding -@cindex TimeSignature, example of overriding -@cindex Clef, example of overriding -@cindex NoteHead, example of overriding -@cindex Stem, example of overriding -@cindex BarLine, example of overriding -@cindex color property, example -@cindex x11-color, example of using - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -{ - \time 12/16 - \override Staff.StaffSymbol #'color = #(x11-color 'grey30) - \override Staff.TimeSignature #'color = #(x11-color 'grey60) - \override Staff.Clef #'color = #(x11-color 'grey60) - \override Voice.NoteHead #'color = #(x11-color 'grey85) - \override Voice.Stem #'color = #(x11-color 'grey85) - \override Staff.BarLine #'color = #(x11-color 'grey10) - c4 b8 c d16 c d8 | - g, a16 b8 c d4 e16 | - e8 -} -@end lilypond - -@noindent -Note the contexts associated with each of the layout objects. -It is important to get these right, or the commands will not -work! Remember, the context is the one in which the appropriate -engraver is placed. The default context for engravers can be -found by starting from the layout object, going from there to -the engraver which produces it, and on the engraver page in the -IR it tells you in which context the engraver will normally be -found. - - -@node Size of objects -@subsection Size of objects - -@cindex changing size of objects -@cindex size of objects -@cindex objects, size of -@cindex objects, changing size of - -Let us begin by looking again at the earlier example -see @ref{Nesting music expressions}) which showed -how to introduce a new temporary staff, as in an @rglos{ossia}. - -@cindex alignAboveContext property, example -@cindex @code{\with}, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" } - { f8 f c } - >> - r4 | - } - } -@end lilypond - -Ossia are normally written without clef and time signature, and -are usually printed slightly smaller than the main staff. We -already know now how to remove the clef and time signature -- -we simply set the stencil of each to @code{#f}, as follows: - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex stencil property, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - } - { - \override Staff.Clef #'stencil = ##f - \override Staff.TimeSignature #'stencil = ##f - { f8 f c } - } - >> - r4 | - } -} -@end lilypond - -@noindent -where the extra pair of braces after the @code{\with} clause are -required to ensure the enclosed overrides and music are applied -to the ossia staff. - -But what is the difference between modifying the staff context by -using @code{\with} and modifying the stencils of the clef and the -time signature with \override? The main difference is that -changes made in a @code{\with} clause are made at the time the -context is created, and remain in force as the @strong{default} -values for the duration of that context, whereas -@code{\set} or @code{\override} commands embedded in the -music are dynamic -- they make changes synchronized with -a particular point in the music. If changes are unset or -reverted using @code{\unset} or @code{\revert} they return to -their default values, which will be the ones set in the -@code{\with} clause, or if none have been set there, the normal -default values. - -Some context properties can be modified only in @code{\with} clauses. -These are those properties which cannot sensibly be changed after the -context has been created. @code{alignAboveContext} and its partner, -@code{alignBelowContext}, are two such properties -- once the staff -has been created its alignment is decided and it would make no sense -to try to change it later. - -The default values of layout object properties can also be set -in @code{\with} clauses. Simply use the normal @code{\override} -command leaving out the context name, since this is unambiguously -defined as the context which the @code{\with} clause is modifying. -If fact, an error will be generated if a context is specified -in this location. - -So we could replace the example above with - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - % Don't print clefs in this staff - \override Clef #'stencil = ##f - % Don't print time signatures in this staff - \override TimeSignature #'stencil = ##f - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -Finally we come to changing the size of layout objects. - -Some layout objects are created as glyphs selected from a typeface -font. These include note heads, accidentals, markup, clefs, time -signatures, dynamics and lyrics. Their size is changed by modifying -the @code{font-size} property, as we shall shortly see. Other layout -objects such as slurs and ties -- in general, spanner objects -- are -drawn individually, so there is no @code{font-size} associated with -them. These objects generally derive their size from the objects to -which they are attached, so usually there is no need to change their -size manually. Still other properties such as the length of stems and -bar lines, thickness of beams and other lines, and the separation of -staff lines all need to be modified in special ways. - -Returning to the ossia example, let us first change the font-size. -We can do this in two ways. We can either change the size of the -fonts of each object type, like @code{NoteHead}s with commands -like - -@example -\override NoteHead #'font-size = #-2 -@end example - -or we can change the size of all fonts by setting a special -property, @code{fontSize}, using @code{\set}, or by including -it in a @code{\with} clause (but without the @code{\set}). - -@example -\set fontSize = #-2 -@end example - -Both of these statements would cause the font size to be reduced -by 2 steps from its previous value, where each -step reduces or increases the size by approximately 12%. - -Let's try it in our ossia example: - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding -@cindex fontSize property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - % Reduce all font sizes by ~24% - fontSize = #-2 - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -This is still not quite right. The note heads and flags are -smaller, but the stems are too long in proportion and the -staff lines are spaced too widely apart. These need to be -scaled down in proportion to the font reduction. The next -sub-section discusses how this is done. - -@node Length and thickness of objects -@subsection Length and thickness of objects - -@cindex distances -@cindex thickness -@cindex length -@cindex magstep -@cindex size, changing -@cindex stem length, changing -@cindex staff line spacing, changing - -Distances and lengths in LilyPond are generally measured in -staff-spaces, the distance between adjacent lines in the staff, -(or occasionally half staff spaces) while most @code{thickness} -properties are measured in units of an internal property called -@code{line-thickness.} For example, by default, the lines of -hairpins are given a thickness of 1 unit of @code{line-thickness}, -while the @code{thickness} of a note stem is 1.3. Note, though, -that some thickness properties are different; for example, the -thickness of beams is measured in staff-spaces. - -So how are lengths to be scaled in proportion to the font size? -This can be done with the help of a special function called -@code{magstep} provided for exactly this purpose. It takes -one argument, the change in font size (#-2 in the example above) -and returns a scaling factor suitable for reducing other -objects in proportion. It is used like this: - -@cindex alignAboveContext property, example -@cindex @code{\with}, example -@cindex Clef, example of overriding -@cindex TimeSignature, example of overriding -@cindex fontSize property, example -@cindex StaffSymbol, example of overriding -@cindex magstep function, example of using -@cindex staff-space property, example -@cindex stencil property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\new Staff ="main" { - \relative g' { - r4 g8 g c4 c8 d | - e4 r8 - << - { f c c } - \new Staff \with { - alignAboveContext = #"main" - \override Clef #'stencil = ##f - \override TimeSignature #'stencil = ##f - fontSize = #-2 - % Reduce stem length and line spacing to match - \override StaffSymbol #'staff-space = #(magstep -2) - } - { f8 f c } - >> - r4 | - } -} -@end lilypond - -@noindent -Since the length of stems and many other length-related properties are -always calculated relative to the value of the @code{staff-space} -property these are automatically scaled down in length too. Note that -this affects only the vertical scale of the ossia -- the horizontal -scale is determined by the layout of the main music in order to remain -synchronized with it, so it is not affected by any of these changes in -size. Of course, if the scale of all the main music were changed in -this way then the horizontal spacing would be affected. This is -discussed later in the layout section. - -This, then, completes the creation of an ossia. The sizes and -lengths of all other objects may be modified in analogous ways. - -For small changes in scale, as in the example above, the -thickness of the various drawn lines such as bar lines, -beams, hairpins, slurs, etc does not usually require global -adjustment. If the thickness of any particular layout object -needs to be adjusted this can be best achieved by overriding its -@code{thickness} property. An example of changing the thickness -of slurs was shown above in @ref{Properties of layout objects}. -The thickness of all drawn objects (i.e., those not produced -from a font) may be changed in the same way. - - -@node Placement of objects -@section Placement of objects - -@menu -* Automatic behavior:: -* Within-staff objects:: -* Outside-staff objects:: -@end menu - - -@node Automatic behavior -@subsection Automatic behavior - -@cindex within-staff objects -@cindex outside-staff objects -@cindex objects, within-staff -@cindex objects, outside-staff - -There are some objects in musical notation that belong to -the staff and there are other objects that should be -placed outside the staff. These are called within-staff -objects and outside-staff objects respectively. - -Within-staff objects are those that are located on the staff --- note heads, stems, accidentals, etc. The positions of -these are usually fixed by the music itself -- they are -vertically positioned on specific lines of the staff or are -tied to other objects that are so positioned. Collisions of -note heads, stems and accidentals in closely set chords are -normally avoided automatically. There are commands and -overrides which can modify this automatic behavior, as we -shall shortly see. - -Objects belonging outside the staff include things such as -rehearsal marks, text and dynamic markings. LilyPond's rule for -the vertical placement of outside-staff objects is to place them -as close to the staff as possible but not so close that they -collide with any other object. LilyPond uses the -@code{outside-staff-priority} property to determine the order in -which the objects should be placed, as follows. - -First, LilyPond places all the within-staff objects. -Then it sorts the outside-staff objects according to their -@code{outside-staff-priority}. The outside-staff objects are -taken one by one, beginning with the object with the lowest -@code{outside-staff-priority}, and placed so that they do not -collide with any objects that have already been placed. That is, -if two outside-staff grobs are competing for the same space, the -one with the lower @code{outside-staff-priority} will be placed -closer to the staff. If two objects have the same -@code{outside-staff-priority} the one encountered first will be -placed closer to the staff. - -In the following example all the markup texts have the same -priority (since it is not explicitly set). Note that @q{Text3} -is automatically positioned close to the staff again, nestling -under @q{Text2}. - -@cindex markup example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -Staves are also positioned, by default, as closely together as -possible (subject to a minimum separation). If notes project -a long way towards an adjacent staff they will force the -staves further apart only if an overlap of the notation -would otherwise occur. The following example demonstrates -this @q{nestling} of the notes on adjacent staves: - -@lilypond[quote,ragged-right,verbatim] -<< - \new Staff { - \relative c' { c a, } - } - \new Staff { - \relative c'''' { c a, } - } ->> -@end lilypond - - -@node Within-staff objects -@subsection Within-staff objects - -We have already seen how the commands @code{\voiceXXX} affect -the direction of slurs, ties, fingering and -everything else which depends on the direction of the stems. -These commands are essential when writing polyphonic music to -permit interweaving melodic lines to be distinguished. -But occasionally it may be necessary to override this automatic -behavior. This can be done for whole sections of music or even -for an individual note. The property which controls this -behavior is the @code{direction} property of each layout object. -We first explain what this does, and then introduce a number of -ready-made commands which avoid your having to code explicit -overrides for the more common modifications. - -Some layout objects like slurs and ties curve, bend or point -either up or down; others like stems and flags also move to -right or left when they point up or down. This is controlled -automatically when @code{direction} is set. - -@cindex down -@cindex up -@cindex center -@cindex neutral - -The following example shows in bar 1 the default behavior of stems, -with those on high notes pointing down and those on low notes pointing -up, followed by four notes with all stems forced down, four notes with -all stems forced up, and finally four notes reverted back to the -default behavior. - -@cindex Stem, example of overriding -@cindex direction property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -a4 g c a -\override Stem #'direction = #DOWN -a g c a -\override Stem #'direction = #UP -a g c a -\revert Stem #'direction -a g c a -@end lilypond - -Here we use the constants @code{DOWN} and @code{UP}. -These have the values @code{-1} and @code{+1} respectively, and -these numerical values may be used instead. The value @code{0} -may also be used in some cases. It is simply treated as meaning -@code{UP} for stems, but for some objects it means @q{center}. -There is a constant, @code{CENTER} which has the value @code{0}. - -However, these explicit overrides are not usually used, as there are -simpler equivalent predefined commands available. Here is a table of -the commonest. The meaning of each is stated where it is not obvious. - -@multitable @columnfractions .2 .2 .25 .35 -@headitem Down/Left - @tab Up/Right - @tab Revert - @tab Effect -@item @code{\arpeggioArrowDown} - @tab @code{\arpeggioArrowUp} - @tab @code{\arpeggioNormal} - @tab Arrow is at bottom, at top, or no arrow -@item @code{\dotsDown} - @tab @code{\dotsUp} - @tab @code{\dotsNeutral} - @tab Direction of movement to avoid staff lines -@item @code{\dynamicDown} - @tab @code{\dynamicUp} - @tab @code{\dynamicNeutral} - @tab -@item @code{\phrasingSlurDown} - @tab @code{\phrasingSlurUp} - @tab @code{\phrasingSlurNeutral} - @tab Note: distinct from slur commands -@item @code{\slurDown} - @tab @code{\slurUp} - @tab @code{\slurNeutral} - @tab -@item @code{\stemDown} - @tab @code{\stemUp} - @tab @code{\stemNeutral} - @tab -@item @code{\textSpannerDown} - @tab @code{\textSpannerUp} - @tab @code{\textSpannerNeutral} - @tab Text entered as spanner is below/above staff -@item @code{\tieDown} - @tab @code{\tieUp} - @tab @code{\tieNeutral} - @tab -@item @code{\tupletDown} - @tab @code{\tupletUp} - @tab @code{\tupletNeutral} - @tab Tuplets are below/above notes -@end multitable - -Note that these predefined commands may @strong{not} be -preceded by @code{\once}. If you wish to limit the -effect to a single note you must either use the equivalent -@code{\once \override} command or use the predefined command -followed after the affected note by the corresponding -@code{\xxxNeutral} command. - -@subheading Fingering - -@cindex fingering, placement -@cindex fingering, chords - -The placement of fingering on single notes can also be controlled -by the @code{direction} property, but changing @code{direction} -has no effect on chords. As we shall see, there are special -commands which allow the fingering of individual notes -of chords to be controlled, with the fingering being placed -above, below, to the left or to the right of each note. - -First, here's the effect of @code{direction} on the fingering -attached to single notes. The first bar shows the default -behaviour, and the following two bars shows the effect of -specifying @code{DOWN} and @code{UP}: - -@cindex Fingering, example of overriding -@cindex direction property, example - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #DOWN -c-5 a-3 f-1 c'-5 -\override Fingering #'direction = #UP -c-5 a-3 f-1 c'-5 -@end lilypond - -However, overriding the @code{direction} property is not the -easiest way of manually setting the fingering above or below -the notes; using @code{_} or @code{^} instead of @code{-} before -the fingering number is usually preferable. Here is the previous -example using this method: - -@cindex fingering example - -@lilypond[quote,verbatim,relative=2] -c-5 a-3 f-1 c'-5 -c_5 a_3 f_1 c'_5 -c^5 a^3 f^1 c'^5 -@end lilypond - -The @code{direction} property is ignored for chords, but the -directional prefixes, @code{_} and @code{^} do work. By default, -the fingering is automatically placed both above and below the -notes of a chord, as shown: - -@cindex fingering example - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -@noindent -but this may be overriden to manually force all or any of the -individual fingering numbers above or below: - -@cindex fingering example - -@lilypond[quote,verbatim,relative=2] - - - -@end lilypond - -Even greater control over the placement of fingering of the -individual notes in a chord is possible by using the -@code{\set fingeringOrientations} command. The format of this -command is: - -@example -@code{\set fingeringOrientations = #'([up] [left/right] [down])} -@end example - -@noindent -@code{\set} is used because @code{fingeringOrientations} is a -property of the @code{Voice} context, created and used by the -@code{New_fingering_engraver}. - -The property may be set to a list of one to three values. -It controls whether fingerings may be placed above (if -@code{up} appears in the list), below (if @code{down} appears), -to the left (if @code{left} appears, or to the right -(if @code{right} appears). Conversely, if a location is not -listed, no fingering is placed there. LilyPond takes these -constraints and works out the best placement for the fingering -of the notes of the following chords. Note that @code{left} and -@code{right} are mutually exclusive -- fingering may be placed -only on one side or the other, not both. - -@warning{To control the placement of the fingering of a single -note using this command it is necessary to write it as a single -note chord by placing angle brackets round it.} - -Here are a few examples: - -@cindex fingering example -@cindex @code{\set}, example of using -@cindex fingeringOrientations property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - -@noindent -If the fingering seems a little crowded the @code{font-size} -could be reduced. The default value can be seen from the -@code{Fingering} object in the IR to be @code{-5}, so let's -try @code{-7}: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\override Fingering #'font-size = #-7 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left down) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(up left) - -< c-1 e-2 g-3 b-5 > 4 -\set fingeringOrientations = #'(right) - -< c-1 e-2 g-3 b-5 > 4 -@end lilypond - -@node Outside-staff objects -@subsection Outside-staff objects - -Outside-staff objects are automatically placed to avoid collisions. -Objects with the lower value of the @code{outside-staff-priority} -property are placed nearer to the staff, and other outside-staff -objects are then raised as far as necessary to avoid collisions. -The @code{outside-staff-priority} is defined in the -@code{grob-interface} and so is a property of all layout objects. -By default it is set to @code{#f} for all within-staff objects, -and to a numerical value appropriate to each outside-staff object -when the object is created. The following table shows -the default numerical values for some of the commonest -outside-staff objects which are, by default, placed in the -@code{Staff} or @code{Voice} contexts. - -@multitable @columnfractions .3 .3 .3 -@headitem Layout Object - @tab Priority - @tab Controls position of: -@item @code{MultiMeasureRestText} - @tab @code{450} - @tab Text over full-bar rests -@item @code{TextScript} - @tab @code{450} - @tab Markup text -@item @code{OttavaBracket} - @tab @code{400} - @tab Ottava brackets -@item @code{TextSpanner} - @tab @code{350} - @tab Text spanners -@item @code{DynamicLineSpanner} - @tab @code{250} - @tab All dynamic markings -@item @code{VoltaBracketSpanner} - @tab @code{100} - @tab Volta brackets -@item @code{TrillSpanner} - @tab @code{50} - @tab Spanning trills -@end multitable - -Here is an example showing the default placement of some of -these. - -@cindex text spanner -@cindex ottava bracket - -@funindex \startTextSpan -@funindex startTextSpan -@funindex \stopTextSpan -@funindex stopTextSpan - -@cindex TextSpanner, example of overriding -@cindex bound-details property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -This example also shows how to create Text Spanners -- -text with extender lines above a section of music. The -spanner extends from the @code{\startTextSpan} command to -the @code{\stopTextSpan} command, and the format of the -text is defined by the @code{\override TextSpanner} command. -For more details see @ruser{Text spanners}. - -It also shows how ottava brackets are created. - -@cindex tweaking bar number placement -@cindex bar numbers, tweaking placement -@cindex tweaking metronome mark placement -@cindex metronome mark, tweaking placement -@cindex tweaking rehearsal mark placement -@cindex rehearsal marks, tweaking placement - -Note that bar numbers, metronome marks and rehearsal marks are not -shown. By default these are created in the @code{Score} context and -their @code{outside-staff-priority} is ignored relative to the layout -objects which are created in the @code{Staff} context. If you wish to -place bar numbers, metronome marks or rehearsal marks in accordance -with the value of their @code{outside-staff-priority} the -@code{Bar_number_engraver}, @code{Metronome_mark_engraver} or -@code{Mark_engraver} respectively should be removed from the -@code{Score} context and placed in the top @code{Staff} context. If -this is done, these marks will be given the following default -@code{outside-staff-priority} values: - -@multitable @columnfractions .3 .3 -@headitem Layout Object @tab Priority -@item @code{RehearsalMark} @tab @code{1500} -@item @code{MetronomeMark} @tab @code{1000} -@item @code{BarNumber} @tab @code{ 100} -@end multitable - -If the default values of @code{outside-staff-priority} do not give you -the placing you want, the priority of any of the objects may be -overridden. Suppose we would like the ottava bracket to be placed -below the text spanner in the example above. All we need to do is to -look up the priority of @code{OttavaBracket} in the IR or in the -tables above, and reduce it to a value lower than that of a -@code{TextSpanner}, remembering that @code{OttavaBracket} is created -in the @code{Staff} context: - -@cindex TextSpanner, example of overriding -@cindex bound-details property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -% Set details for later Text Spanner -\override TextSpanner #'(bound-details left text) - = \markup { \small \bold Slower } -% Place dynamics above staff -\dynamicUp -%Place following Ottava Bracket below Text Spanners -\once \override Staff.OttavaBracket #'outside-staff-priority = #340 -% Start Ottava Bracket -\ottava #1 -c' \startTextSpan -% Add Dynamic Text -c\pp -% Add Dynamic Line Spanner -c\< -% Add Text Script -c^Text -c c -% Add Dynamic Text -c\ff c \stopTextSpan -% Stop Ottava Bracket -\ottava #0 -c, c c c -@end lilypond - -@cindex slurs and outside-staff-priority -@cindex slurs and articulations -@cindex articulations and slurs - -Slurs by default are classed as within-staff objects, but -they often appear above the staff if the notes to -which they are attached are high on the staff. This can push -outside-staff objects such as articulations too high, as the slur -will be placed first. The @code{avoid-slur} property of the -articulation can be set to @code{'inside} to bring the articulation -inside the slur, but the @code{avoid-slur} property is effective -only if the @code{outside-staff-priority} is also set to @code{#f}. -Alternatively, the @code{outside-staff-priority} of the slur -can be set to a numerical value to cause it to be placed along with -other outside-staff objects according to that value. Here's an -example showing the effect of the two methods: - -@lilypond[quote,verbatim,relative=2] -c4( c^\markup\tiny\sharp d4.) c8 -c4( -\once \override TextScript #'avoid-slur = #'inside -\once \override TextScript #'outside-staff-priority = ##f -c^\markup\tiny\sharp d4.) c8 -\once \override Slur #'outside-staff-priority = #500 -c4( c^\markup\tiny\sharp d4.) c8 -@end lilypond - -Changing the @code{outside-staff-priority} can also be used to -control the vertical placement of individual objects, although -the results may not always be desirable. Suppose we would -like @qq{Text3} to be placed above @qq{Text4} in the example -under Automatic behavior, above (see @ref{Automatic behavior}). -All we need to do is to look up the priority of @code{TextScript} -in the IR or in the tables above, and increase the priority of -@qq{Text3} to a higher value: - -@cindex TextScript, example of overriding -@cindex outside-staff-priority property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -c2^"Text1" -c^"Text2" -\once \override TextScript #'outside-staff-priority = #500 -c^"Text3" -c^"Text4" -@end lilypond - -This certainly lifts @qq{Text3} above @qq{Text4} but it also lifts it -above @qq{Text2}, and @qq{Text4} now drops down. Perhaps this is not -so good. What we would really like to do is to position all the -annotation at the same distance above the staff. To do this, we -clearly will need to space the notes out horizontally to make more -room for the text. This is done using the @code{textLengthOn} -command. - -@subheading \textLengthOn - -@cindex notes, spreading out with text - -@funindex \textLengthOn -@funindex textLengthOn -@funindex \textLengthOff -@funindex textLengthOff - -By default, text produced by markup takes up no horizontal space -as far as laying out the music is concerned. The @code{\textLengthOn} -command reverses this behavior, causing the notes to be spaced -out as far as is necessary to accommodate the text: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\textLengthOn % Cause notes to space out to accommodate text -c2^"Text1" -c^"Text2" -c^"Text3" -c^"Text4" -@end lilypond - -The command to revert to the default behavior is -@code{\textLengthOff}. Remember @code{\once} only works with -@code{\override}, @code{\set}, @code{\revert} or @code{unset}, -so cannot be used with @code{\textLengthOn}. - -@cindex markup text, allowing collisions - -Markup text will also avoid notes which project above the staff. -If this is not desired, the automatic displacement upwards may -be turned off by setting the priority to @code{#f}. Here's an -example to show how markup text interacts with such notes. - -@cindex TextScript, example of overriding -@cindex outside-staff-priority property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -% This markup is short enough to fit without collision -c2^"Tex" -c''2 -R1 -% This is too long to fit, so it is displaced upwards -c,,2^"Text" -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -c,,2^"Long Text " -c''2 -R1 -% Turn off collision avoidance -\once \override TextScript #'outside-staff-priority = ##f -\textLengthOn % and turn on textLengthOn -c,,2^"Long Text " % Spaces at end are honored -c''2 -@end lilypond - - -@subheading Dynamics - -@cindex tweaking dynamics placement -@cindex dynamics, tweaking placement - -Dynamic markings will normally be positioned beneath the -staff, but may be positioned above with the @code{dynamicUp} -command. They will be positioned vertically relative to the -note to which they are attached, and will float below (or above) -all within-staff objects such as phrasing slurs and bar numbers. -This can give quite acceptable results, as this example -shows: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=1] -\clef "bass" -\key aes \major -\time 9/8 -\dynamicUp -bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | -ees,2.~\)\mf ees4 r8 | -@end lilypond - -However, if the notes and attached dynamics are close -together the automatic placement will avoid collisions -by displacing later dynamic markings further away, but this may -not be the optimum placement, as this rather artificial example -shows: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Should a similar situation arise in @q{real} music, it may be -preferable to space out the notes a little further, so the dynamic -markings can all fit at the same vertical distance from the staff. We -were able to do this for markup text by using the @code{\textLengthOn} -command, but there is no equivalent command for dynamic marks. So we -shall have to work out how to do this using @code{\override} commands. - -@subheading Grob sizing - -@cindex grob sizing -@cindex sizing grobs - -First we must learn how grobs are sized. All grobs have a -reference point defined within them which is used to position -them relative to their parent object. This point in the grob -is then positioned at a horizontal distance, @code{X-offset}, -and at a vertical distance, @code{Y-offset}, from its parent. -The horizontal extent of the object is given by a pair of -numbers, @code{X-extent}, which say where the left and right -edges are relative to the reference point. The vertical extent -is similarly defined by a pair of numbers, @code{Y-extent}. -These are properties of all grobs which support the -@code{grob-interface}. - -@cindex @code{extra-spacing-width} - -By default, outside-staff objects are given a width of zero so -that they may overlap in the horizontal direction. This is done -by the trick of adding infinity to the leftmost extent and -minus infinity to the rightmost extent by setting the -@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}. So -to ensure they do not overlap in the horizontal direction we -must override this value of @code{extra-spacing-width} to -@code{'(0 . 0)} so the true width shines through. This is -the command to do this for dynamic text: - -@example -\override DynamicText #'extra-spacing-width = #'(0 . 0) -@end example - -@noindent -Let's see if this works in our previous example: - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -\override DynamicText #'extra-spacing-width = #'(0 . 0) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -Well, it has certainly stopped the dynamic marks being -displaced, but two problems remain. The marks should be -spaced a little further apart and it would be better -if they were all the same distance from the staff. -We can solve the first problem easily. Instead of making -the @code{extra-spacing-width} zero we could add a little -more to it. The units are the space between two staff -lines, so moving the left edge half a unit to the left and the -right edge half a unit to the right should do it: - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 staff space -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -a4\f b\mf c\mp b\p -@end lilypond - -@noindent -This looks better, but maybe we would prefer the dynamic marks -to be aligned along the same baseline rather than going up and -down with the notes. The property to do this is -@code{staff-padding} which is covered in the following section. - - -@node Collisions of objects -@section Collisions of objects - -@menu -* Moving objects:: -* Fixing overlapping notation:: -* Real music example:: -@end menu - -@node Moving objects -@subsection Moving objects - -@cindex moving overlapping objects -@cindex moving colliding objects -@cindex moving colliding grobs -@cindex objects, moving colliding -@cindex grobs, moving colliding - -This may come as a surprise, but LilyPond is not perfect. Some -notation elements can overlap. This is unfortunate, but in fact -rather rare. Usually the need to move objects is for clarity or -aesthetic reasons -- they would look better with a little more -or a little less space around them. - -There are three main approaches to resolving overlapping -notation. They should be considered in the following order: - -@enumerate -@item -The @strong{direction} of one of the overlapping objects may -be changed using the predefined commands listed above for -within-staff objects (see @ref{Within-staff objects}). -Stems, slurs, beams, ties, dynamics, text and tuplets may be -repositioned easily in this way. The limitation is that you -have a choice of only two positions, and neither may be -suitable. - -@item -The @strong{object properties}, which LilyPond uses when positioning -layout objects, may be modified using @code{\override}. The -advantages of making changes to this type of property are (a) that -some other objects will be moved automatically if necessary to make -room and (b) the single override can apply to all instances of the -same type of object. Such properties include: - -@itemize - -@item -@code{direction} - -This has already been covered in some detail -- see -@ref{Within-staff objects}. - -@item -@code{padding}, @code{left-padding}, -@code{right-padding}, @code{staff-padding} - -@cindex padding -@cindex left-padding property -@cindex padding property -@cindex right-padding property -@cindex staff-padding property - -As an object is being positioned the value of its @code{padding} -property specifies the gap that must be left between itself and the -nearest edge of the object against which it is being positioned. Note -that it is the @code{padding} value of the object @strong{being -placed} that is used; the @code{padding} value of the object which is -already placed is ignored. Gaps specified by @code{padding} can be -applied to all objects which support the -@code{side-position-interface}. - -Instead of @code{padding}, the placement of groups of accidentals -is controlled by @code{left-padding} and @code{right-padding}. -These properties are to be found in the @code{AccidentalPlacement} -object which, note, lives in the @strong{staff} context. In the -type-setting process the note heads are type-set first and then -the accidentals, if any, are added to the left of the note heads -using the @code{right-padding} property to determine the separation -from the note heads. So only the @code{right-padding} property of the -@code{AccidentalPlacement} object has any effect on the placement -of the accidentals. - -The @code{staff-padding} property is closely related to the -@code{padding} property: @code{padding} controls the minimum amount of -space between any object which supports the -@code{side-position-interface} and the nearest other object (generally -the note or the staff lines); @code{staff-padding} applies only to -those objects which are always set outside the staff -- it controls -the minimum amount of space that should be inserted between that -object and the staff. Note that @code{staff-padding} has no effect on -objects which are positioned relative to the note rather than the -staff, even though it may be overridden without error for such objects --- it is simply ignored. - -To discover which padding property is required for the object you wish -to reposition, you need to return to the IR and look up the object's -properties. Be aware that the padding properties might not be located -in the obvious object, so look in objects that appear to be related. - -All padding values are measured in staff spaces. For most -objects, this value is set by default to be around 1.0 or less -(it varies with each object). It may be overridden if a larger -(or smaller) gap is required. - -@item -@code{self-alignment-X} - -@cindex self-alignment-X property - -This property can be used to align the object to the left, to -the right, or to center it with respect to the parent object's -reference point. It may be used with all objects which support -the @code{self-alignment-interface}. In general these are objects -that contain text. The values are @code{LEFT}, @code{RIGHT} -or @code{CENTER}. Alternatively, a numerical value between -@code{-1} and @code{+1} may be specified, where @code{-1} is -left-aligned, @code{+1} is right-aligned, and numbers in between -move the text progressively from left-aligned to right-aligned. -Numerical values greater than @code{1} may be specified to move -the text even further to the left, or less than @code{-1} to -move the text even further to the right. A change of @code{1} -in the value corresponds to a movement of half the text's length. - -@item -@code{extra-spacing-width} - -@cindex extra-spacing-width property - -This property is available for all objects which support the -@code{item-interface}. It takes two numbers, the first is added -to the leftmost extent and the second is added to the rightmost -extent. Negative numbers move the edge to the left, positive to -the right, so to widen an object the first number must be negative, -the second positive. Note that not all objects honor both -numbers. For example, the @code{Accidental} object only takes -notice of the first (left edge) number. - -@item -@code{staff-position} - -@cindex staff-position property - -@code{staff-position} is a property of the -@code{staff-symbol-referencer-interface}, which is supported by -objects which are positioned relative to the staff. It specifies -the vertical position of the object relative to the center line -of the staff in half staff-spaces. It is useful in resolving -collisions between layout objects like multi-measure rests, ties -and notes in different voices. - -@item -@code{force-hshift} - -@cindex force-hshift property - -Closely spaced notes in a chord, or notes occurring at the same -time in different voices, are arranged in two, occasionally more, -columns to prevent the note heads overlapping. These are called -note columns, and an object called @code{NoteColumn} is created -to lay out the notes in that column. - -The @code{force-hshift} property is a property of a @code{NoteColumn} -(actually of the @code{note-column-interface}). Changing it permits a -note column to be moved in units appropriate to a note column, -viz. the note head width of the first voice note. It should be used -in complex situations where the normal @code{\shiftOn} commands (see -@ref{Explicitly instantiating voices}) do not resolve the note -conflict. It is preferable to the @code{extra-offset} property for -this purpose as there is no need to work out the distance in -staff-spaces, and moving the notes into or out of a @code{NoteColumn} -affects other actions such as merging note heads. - -@end itemize - -@item -Finally, when all else fails, objects may be manually repositioned -relative to the staff center line vertically, or by displacing them by -any distance to a new position. The disadvantages are that the -correct values for the repositioning have to be worked out, often by -trial and error, for every object individually, and, because the -movement is done after LilyPond has placed all other objects, the user -is responsible for avoiding any collisions that might ensue. But the -main difficulty with this approach is that the repositioning values -may need to be reworked if the music is later modified. The -properties that can be used for this type of manual repositioning are: - -@table @code -@item extra-offset - -@cindex extra-offset property - -This property applies to any layout object supporting the -@code{grob-interface}. It takes a pair of numbers which specify the -extra displacement in the horizontal and vertical directions. -Negative numbers move the object to the left or down. The units are -staff-spaces. The extra displacement is made after the typesetting of -objects is finished, so an object may be repositioned anywhere without -affecting anything else. - -@item positions - -@cindex positions property - -This is most useful for manually adjusting the slope and height -of beams, slurs, and tuplets. It takes a pair of numbers -giving the position of the left and right ends of the beam, slur, -etc. relative to the center line of the staff. Units are -staff-spaces. Note, though, that slurs and phrasing slurs cannot -be repositioned by arbitrarily large amounts. LilyPond first -generates a list of possible positions for the slur and by default -finds the slur that @qq{looks best}. If the @code{positions} -property has been overridden the slur that is closest to the -requested positions is selected from the list. -@end table - -@end enumerate - -A particular object may not have all of these properties. -It is necessary to go to the IR to look up which properties -are available for the object in question. - -Here is a list of the objects which are most likely to be -involved in collisions, together with the name of the object which -should be looked up in the IR in order to discover which properties -should be used to move them. - -@multitable @columnfractions .5 .5 -@headitem Object type @tab Object name -@item Articulations @tab @code{Script} -@item Beams @tab @code{Beam} -@item Dynamics (vertically) @tab @code{DynamicLineSpanner} -@item Dynamics (horizontally) @tab @code{DynamicText} -@item Fingerings @tab @code{Fingering} -@item Rehearsal / Text marks @tab @code{RehearsalMark} -@item Slurs @tab @code{Slur} -@item Text e.g. @code{^"text"} @tab @code{TextScript} -@item Ties @tab @code{Tie} -@item Tuplets @tab @code{TupletBracket} -@end multitable - - -@node Fixing overlapping notation -@subsection Fixing overlapping notation - -Let's now see how the properties in the previous section can -help to resolve overlapping notation. - -@subheading padding property - -@cindex padding -@cindex fixing overlapping notation -@cindex overlapping notation - -The @code{padding} property can be set to increase -(or decrease) the distance between symbols that are printed -above or below notes. - -@cindex Script, example of overriding -@cindex padding property, example - -@lilypond[quote,fragment,relative=1,verbatim] -c2\fermata -\override Script #'padding = #3 -b2\fermata -@end lilypond - -@cindex MetronomeMark, example of overriding -@cindex padding property, example - -@lilypond[quote,fragment,relative=1,verbatim] -% This will not work, see below: -\override MetronomeMark #'padding = #3 -\tempo 4=120 -c1 -% This works: -\override Score.MetronomeMark #'padding = #3 -\tempo 4=80 -d1 -@end lilypond - -Note in the second example how important it is to figure out what -context handles a certain object. Since the @code{MetronomeMark} -object is handled in the @code{Score} context, property changes in the -@code{Voice} context will not be noticed. For more details, see -@ruser{Modifying properties}. - -If the @code{padding} property of an object is increased when that -object is in a stack of objects being positioned according to -their @code{outside-staff-priority}, then that object and all -objects outside it are moved. - - -@subheading left-padding and right-padding - -@cindex left-padding property -@cindex right-padding property - -The @code{right-padding} property affects the spacing between the -accidental and the note to which it applies. It is not often -required, but the following example shows one situation where it -is needed. Suppose we wish to show a chord containing both -a B-natural and a B-flat. To avoid ambiguity we would like to -precede the notes with both a natural and a flat sign. Here -are a few attempts to do this: - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] - - - -@end lilypond - -None work, with the second two showing bad collisions between -the two signs. - -One way of achieving this is to override the accidental stencil -with a markup containing the natural and flat symbols in the -order we would like, like this: - -@cindex Accidental, example of overriding -@cindex text property, example -@cindex stencil property, example -@cindex AccidentalPlacement, example of overriding -@cindex right-padding property, example - -@lilypond[quote,ragged-right,verbatim] -naturalplusflat = \markup { \natural \flat } -\relative c'' { - \once \override Accidental - #'stencil = #ly:text-interface::print - \once \override Accidental #'text = #naturalplusflat - \once \override Score.AccidentalPlacement #'right-padding = #1.5 - -} -@end lilypond - -@noindent -This necessarily uses an override for the accidental stencil which -will not be covered until later. The stencil type must be a -procedure, here changed to print the contents of the @code{text} -property of @code{Accidental}, which itself is set to be a natural -sign followed by a flat sign. These are then moved further away -from the note head by overriding @code{right-padding}. - -@noindent - -@subheading staff-padding property - -@cindex aligning objects on a baseline -@cindex objects, aligning on a baseline - -@code{staff-padding} can be used to align objects such as dynamics -along a baseline at a fixed height above the staff, rather than at a -height dependent on the position of the note to which they are -attached. It is not a property of @code{DynamicText} but of -@code{DynamicLineSpanner}. This is because the baseline should apply -equally to @strong{all} dynamics, including those created as extended -spanners. So this is the way to align the dynamic marks in the -example taken from the previous section: - -@cindex DynamicText, example of overriding -@cindex extra-spacing-width property, example -@cindex DynamicLineSpanner, example of overriding -@cindex staff-padding property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\dynamicUp -% Extend width by 1 unit -\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) -% Align dynamics to a base line 2 units above staff -\override DynamicLineSpanner #'staff-padding = #2 -a4\f b\mf c\mp b\p -@end lilypond - - -@subheading self-alignment-X property - -The following example shows how this can resolve the collision -of a string fingering object with a note's stem by aligning the -right edge with the reference point of the parent note: - -@cindex StringNumber, example of overriding -@cindex self-alignment-X property, example - -@lilypond[quote,fragment,ragged-right,verbatim,relative=3] -\voiceOne -< a \2 > -\once \override StringNumber #'self-alignment-X = #RIGHT -< a \2 > -@end lilypond - -@subheading staff-position property - -@cindex object collision within a staff - -Multimeasure rests in one voice can collide with notes in another. -Since these rests are typeset centered between the bar lines, it -would require significant effort for LilyPond to figure out which -other notes might collide with it, since all the current collision -handling between notes and between notes and rests is done only -for notes and rests that occur at the same time. Here's an -example of a collision of this type: - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< {c c c c} \\ {R1} >> -@end lilypond - -The best solution here is to move the multimeasure rest down, since -the rest is in voice two. The default in @code{\voiceTwo} (i.e. in -the second voice of a @code{<<@{...@} \\ @{...@}>>} construct) is that -@code{staff-position} is set to -4 for MultiMeasureRest, so we need to -move it, say, four half-staff spaces down to @code{-8}. - -@cindex MultiMeasureRest, example of overriding -@cindex staff-position property, example - -@lilypond[quote,verbatim,fragment,ragged-right, relative=1] -<< - {c c c c} -\\ - \override MultiMeasureRest #'staff-position = #-8 - {R1} ->> -@end lilypond - -This is better than using, for example, @code{extra-offset}, -because the ledger line above the rest is inserted automatically. - -@subheading extra-offset property - -@cindex positioning objects -@cindex positioning grobs -@cindex objects, positioning -@cindex grobs, positioning - -The @code{extra-offset} property provides complete control over the -positioning of an object both horizontally and vertically. - -In the following example, the second fingering is moved a little to -the left, and 1.8 staff space downwards: - -@cindex Fingering, example of overriding -@cindex extra-offset property, example - -@lilypond[quote,fragment,relative=1,verbatim] -\stemUp -f-5 -\once \override Fingering - #'extra-offset = #'(-0.3 . -1.8) -f-5 -@end lilypond - - -@subheading positions property - -@cindex controlling tuplets, slurs, phrasing slurs, and beams manually -@cindex manually controlling tuplets, slurs, phrasing slurs, and beams -@cindex tuplet beams, controlling manually -@cindex slurs, controlling manually -@cindex phrasing slurs, controlling manually -@cindex beams, controlling manually - -The @code{positions} property allows the position and slope of -tuplets, slurs, phrasing slurs and beams to be controlled manually. -Here's an example which has an ugly phrasing slur due to its trying to -avoid the slur on the acciaccatura. - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 \acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -We could simply move the phrasing slur above the notes, and this -would be the preferred solution: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\phrasingSlurUp -\acciaccatura e8\( d8 c ~c d c d\) -@end lilypond - -@noindent -But if there were some reason why this could not be done the -other alternative would be to move the left end of the phrasing -slur down a little using the @code{positions} property. This -also resolves the rather nasty shape. - -@cindex PhrasingSlur, example of overriding -@cindex positions property, example - -@lilypond[quote,verbatim,fragment,ragged-right,relative=1] -r4 -\once \override PhrasingSlur #'positions = #'(-4 . -3) -\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: - -@lilypond[quote,verbatim,fragment,ragged-right] -{ -\clef "bass" -<< {b,8 ais, b, g,} \\ {e, g e, g} >> -<< {b,8 ais, b, g,} \\ {e, g e, 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: - -@cindex Beam, example of overriding -@cindex positions property, example - -@lilypond[quote,verbatim,fragment,ragged-right] -{ - \clef "bass" - << - \override Beam #'positions = #'(3 . 3) - {b,8 ais, b, g,} - \\ - {e, g e, g} - >> - << {b,8 ais, b, g,} \\ {e, 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 -second voice. - -@subheading force-hshift property - -@c FIXME: formatting stuff (ie not important right now IMO) -@c @a nchor Chopin finally corrected TODOgp - -We can now see how to apply the final corrections to the Chopin -example introduced at the end of @ref{I'm hearing Voices}, which -was left looking like this: - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - 2 - des2 - } - >> | - 1 | -} -@end lilypond - -@noindent -The lower two notes of the first chord (i.e, those in the third voice) -should not be shifted away from the note column of the higher two -notes. To correct this we set @code{force-hshift}, which is a -property of @code{NoteColumn}, of these notes to zero. The lower note -of the second chord is best placed just to the right of the higher -notes. We achieve this by setting @code{force-hshift} of this note to -0.5, ie half a note head's width to the right of the note column of -the higher notes. - -Here's the final result: - -@cindex NoteColumn, example of overriding -@cindex force-hshift property, example - -@lilypond[quote,verbatim,fragment,ragged-right] -\new Staff \relative c'' { - \key aes \major - << - { c2 aes4. bes8 } \\ - { aes2 f4 fes } \\ - { \voiceFour - \once \override NoteColumn #'force-hshift = #0 2 - \once \override NoteColumn #'force-hshift = #0.5 des2 - } - >> | - 1 | -} -@end lilypond - - -@node Real music example -@subsection Real music example - -We end this section on Tweaks by showing the steps to be taken to -deal with a tricky example which needs several tweaks to produce -the desired output. The example has been deliberately chosen to -illustrate the use of the Notation Reference to resolve unusual -problems with notation. It is not representative of more usual -engraving process, so please do not let these difficulties put -you off! Fortunately, difficulties like these are not very common! - -The example is from Chopin's Première Ballade, Op. 23, bars 6 to -9, the transition from the opening Lento to Moderato. -Here, first, is what we want the output to look like, but to avoid -over-complicating the example too much we have left out the -dynamics, fingering and pedalling. - -@c The following should appear as music without code -@c This example should not be indexed -@lilypond[quote,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - bes2.^\markup {\bold "Moderato"} r8 - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -We note first that the right hand part in the third bar -requires four voices. These are the five beamed eighth notes, -the tied C, the half-note D which is merged with the eighth note -D, and the dotted quarter note F-sharp, which is also merged with -the eighth note at the same pitch. Everything else is in a single -voice, so the easiest way is to introduce these four voices -temporarily at the time they are needed. If you have forgotten -how to do this, look at @ref{I'm hearing Voices}. Let us begin -by entering the notes as two variables and setting up the staff -structure in a score block, and see what LilyPond produces by -default: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4. g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8 d fis bes a | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2. -} - -lhMusic = \relative c' { - r2 2 | - 1 | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -All the notes are right, but the appearance is far from satisfactory. -The tie clashes with the change in time signature, the beaming in the -third bar is wrong, the notes are not merged together, and several -notation elements are missing. Let's first deal with the easier -things. We can correct the beaming by inserting a beam manually, and -we can easily add the left hand slur and the right hand phrasing slur, -since these were all covered in the Tutorial. Doing this gives: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - bes1~ | - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1) | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -The first bar is now correct. The second bar contains an arpeggio and -is terminated by a double bar line. How do we do these, as they have -not been mentioned in this Learning Manual? This is where we need to -turn to the Notation Reference. Looking up @q{arpeggio} and @q{bar -line} in the index quickly shows us that an arpeggio is produced by -appending @code{\arpeggio} to a chord, and a double bar line is -produced by the @code{\bar "||"} command. That's easily done. We -next need to correct the collision of the tie with the time signature. -This is best done by moving the tie upwards. Moving objects was -covered earlier in @ref{Moving objects}, which says that objects -positioned relative to the staff can be moved by overriding their -@code{staff-position} property, which is specified in half staff -spaces relative to the center line of the staff. So the following -override placed just before the first tied note would move the tie up -to 3.5 half staff spaces above the center line: - -@code{\once \override Tie #'staff-position = #3.5} - -This completes bar two, giving: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2. r8 - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -On to bar three and the start of the Moderato section. The tutorial -showed how to add embolded text with the @code{\markup} command, so -adding @q{Moderato} in bold is easy. But how do we merge notes in -different voices together? This is where we need to turn to the -Notation Reference for help. A search for @qq{merge} in the Notation -Reference index quickly leads us to the commands for merging -differently headed and differently dotted notes in @ruser{Collision -resolution}. In our example we need to merge both types of note for -the duration of the polyphonic section in bar 3, so using the -information we find in the Notation Reference we add - -@example -\mergeDifferentlyHeadedOn -\mergeDifferentlyDottedOn -@end example - -@noindent -to the start of that section and - -@example -\mergeDifferentlyHeadedOff -\mergeDifferentlyDottedOff -@end example - -@noindent -to the end, giving: - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - {c,8~ c2 | } - \\ - {s8 d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -These overrides have merged the two F-sharp notes, but not the two -on D. Why not? The answer is there in the same section in the -Notation Reference -- notes being merged must have stems in -opposite directions and two notes cannot be merged successfully if -there is a third note in the same note column. Here the two D's -both have upward stems and there is a third note -- the C. We know -how to change the stem direction using @code{\stemDown}, and -the Notation Reference also says how to move the C -- apply a shift -using one of the @code{\shift} commands. But which one? -The C is in voice two which has shift off, and the two D's are in -voices one and three, which have shift off and shift on, -respectively. So we have to shift the C a further level still -using @code{\shiftOnn} to avoid it interfering with the two D's. -Applying these changes gives: - -@cindex Tie, example of overriding -@cindex staff-position property, example - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - % Start polyphonic section of four voices - << - {c,8[ d fis bes a] | } - \\ - % Move the c2 out of the main note column so the merge will work - {c,8~ \shiftOnn c2 | } - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown d2 | } - \\ - {s4 fis4. | } - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - -Nearly there. Only two problems remain: The downward stem on the -merged D should not be there, and the C would be better positioned -to the right of the D's. We know how to do both of these from the -earlier tweaks: we make the stem transparent, and move the C with -the @code{force-hshift} property. Here's the final result: - -@cindex NoteColumn, example of overriding -@cindex force-hshift property, example -@cindex Stem, example of overriding -@cindex transparent property, example - -@lilypond[quote,verbatim,ragged-right] -rhMusic = \relative c'' { - r2 - c4.\( g8 | - \once \override Tie #'staff-position = #3.5 - bes1~ | - \bar "||" - \time 6/4 - bes2.^\markup {\bold "Moderato"} r8 - \mergeDifferentlyHeadedOn - \mergeDifferentlyDottedOn - << - {c,8[ d fis bes a] | } - \\ - % Reposition the c2 to the right of the merged note - {c,8~ \once \override NoteColumn #'force-hshift = #1.0 - % Move the c2 out of the main note column so the merge will work - \shiftOnn c2} - \\ - % Stem on the d2 must be down to permit merging - {s8 \stemDown \once \override Stem #'transparent = ##t d2} - \\ - {s4 fis4.} - >> - \mergeDifferentlyHeadedOff - \mergeDifferentlyDottedOff - g2.\) -} - -lhMusic = \relative c' { - r2 2( | - 1)\arpeggio | - r2. d,,4 r4 r | - r4 -} - -\score { - \new PianoStaff << - \new Staff = "RH" << - \key g \minor - \rhMusic - >> - \new Staff = "LH" << - \key g \minor - \clef "bass" - \lhMusic - >> - >> -} -@end lilypond - - -@node Further tweaking -@section Further tweaking - -@menu -* Other uses for tweaks:: -* Using variables for tweaks:: -* Other sources of information:: -* Avoiding tweaks with slower processing:: -* Advanced tweaks with Scheme:: -@end menu - -@node Other uses for tweaks -@subsection Other uses for tweaks - -@cindex transparent property, use of -@cindex objects, making invisible -@cindex removing objects -@cindex objects, removing -@cindex hiding objects -@cindex objects, hiding -@cindex invisible objects -@cindex objects, invisible -@cindex tying notes across voices - -@subheading Tying notes across voices - -The following example demonstrates how to connect notes in -different voices using ties. Normally, only two notes in the -same voice can be connected with ties. By using two voices, -with the tied notes in one of them - -@lilypond[quote,fragment,relative=2] -<< { b8~ b8\noBeam } -\\ { b[ g8] } ->> -@end lilypond - -@noindent -and blanking the first up-stem in that voice, the tie appears to -cross voices: - -@cindex Stem, example of overriding -@cindex transparent property, example - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -To make sure that the just-blanked stem doesn't squeeze the tie -too much, we can lengthen the stem by setting the -@code{length} to @code{8}, - -@lilypond[quote,fragment,relative=2,verbatim] -<< - { - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - b8~ b8\noBeam - } -\\ - { b[ g8] } ->> -@end lilypond - -@subheading Simulating a fermata in MIDI - -@cindex stencil property, use of -@cindex fermata, implementing in MIDI - -For outside-staff objects it is usually better to override the -object's @code{stencil} property rather than its @code{transparent} -property when you wish to remove it from the printed output. -Setting the @code{stencil} property of an object to @code{#f} will -remove that object entirely from the printed output. This means it -has no effect on the placement of other objects placed relative to -it. - -For example, if we wished to change the metronome setting in order -to simulate a fermata in the MIDI output we would not want the -metronome markings to appear in the printed output, and we would -not want it to influence the spacing between the two systems or -the positions of adjacent annotations on the staff. So setting -its @code{stencil} property to @code{#f} would be the best way. -We show here the effect of the two methods: - -@cindex MetronomeMark, example of overriding -@cindex transparent property, example - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'transparent = ##t - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@cindex MetronomeMark, example of overriding -@cindex stencil property, example - -@lilypond[quote,verbatim,ragged-right] -\score { - \relative c'' { - % Visible tempo marking - \tempo 4=120 - a4 a a - \once \override Score.MetronomeMark #'stencil = ##f - % Invisible tempo marking to lengthen fermata in MIDI - \tempo 4=80 - a\fermata - % New tempo for next section - \tempo 4=100 - a a a a - } - \layout { } - \midi { } -} -@end lilypond - -@noindent -Both methods remove the metronome mark which lengthens the fermata -from the printed output, and both affect the MIDI timing as -required, but the transparent metronome mark in the first line -forces the following tempo indication too high while the -second (with the stencil removed) does not. - -@node Using variables for tweaks -@subsection Using variables for tweaks - -@cindex variables, using for tweaks -@cindex using variables for tweaks -@cindex tweaks, using variables for - -Override commands are often long and tedious to type, and they -have to be absolutely correct. If the same overrides are to be -used many times it may be worth defining variables to hold them. - -Suppose we wish to emphasize certain words in lyrics by printing -them in bold italics. The @code{\italic} and @code{\bold} -commands only work within lyrics if they are embedded, together with -the word or words to be modified, within a @code{\markup} block, -which makes them tedious to enter. The need to embed the words -themselves prevents their use in simple variables. As an -alternative can we use @code{\override} and @code{\revert} commands? - -@example -@code{\override Lyrics . LyricText #'font-shape = #'italic} -@code{\override Lyrics . LyricText #'font-series = #'bold} - -@code{\revert Lyrics . LyricText #'font-shape} -@code{\revert Lyrics . LyricText #'font-series} -@end example - -These would also be extremely tedious to enter if there were many -words requiring emphasis. But we @emph{can} define these as two -variables and use those to bracket the words to be emphasized. -Another advantage of using variables for these overrides is that -the spaces around the dot are not necessary, since they are not -being interpreted in @code{\lyricmode} directly. Here's an example -of this, although in practice we would choose shorter names -for the variables to make them quicker to type: - -@cindex LyricText, example of overriding -@cindex font-shape property, example -@cindex font-series property, example - -@lilypond[quote,verbatim] -emphasize = { - \override Lyrics.LyricText #'font-shape = #'italic - \override Lyrics.LyricText #'font-series = #'bold -} -normal = { - \revert Lyrics.LyricText #'font-shape - \revert Lyrics.LyricText #'font-series -} - -global = { \time 4/4 \partial 4 \key c \major} -SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a a g } -AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } -TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } -BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } -VerseOne = \lyrics { E -- | ter -- nal \emphasize Fa -- ther, \normal | strong to save, } -VerseTwo = \lyricmode { O | \emphasize Christ, \normal whose voice the | wa -- ters heard, } -VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, \normal | who didst brood } -VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r } - -\score { - \new ChoirStaff << - \new Staff << - \clef "treble" - \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } - \new Voice = "Alto" { \voiceTwo \AltoMusic } - \new Lyrics \lyricsto "Soprano" { \VerseOne } - \new Lyrics \lyricsto "Soprano" { \VerseTwo } - \new Lyrics \lyricsto "Soprano" { \VerseThree } - \new Lyrics \lyricsto "Soprano" { \VerseFour } - >> - \new Staff << - \clef "bass" - \new Voice = "Tenor" { \voiceOne \TenorMusic } - \new Voice = "Bass" { \voiceTwo \BassMusic } - >> - >> -} -@end lilypond - - - -@node Other sources of information -@subsection Other sources of information - -The Internals Reference documentation contains a lot of information -about LilyPond, but even more information can be gathered by -looking at the internal LilyPond files. To explore these, you must -first find the directory appropriate to your system. The location -of this directory depends (a) on whether you obtained LilyPond -by downloading a precompiled binary from lilypond.org -or whether you installed it from a package manager (i.e. -distributed with Linux, or installed under fink or cygwin) or -compiled it from source, and (b) on which operating system it is -being used: - -@strong{Downloaded from lilypond.org} - -@itemize @bullet -@item Linux - -Navigate to -@file{@var{INSTALLDIR}/lilypond/usr/share/lilypond/current/} - -@item MacOS X - -Navigate to -@file{@var{INSTALLDIR}/LilyPond.app/Contents/Resources/share/lilypond/current/} -by either @code{cd}-ing into this directory from the -Terminal, or control-clicking on the LilyPond application and -selecting @q{Show Package Contents}. - -@item Windows - -Using Windows Explorer, navigate to -@file{@var{INSTALLDIR}/LilyPond/usr/share/lilypond/current/} - -@end itemize - -@strong{Installed from a package manager or compiled from source} - -Navigate to -@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, where -@var{PREFIX} is set by your package manager or @code{configure} -script, and @var{X.Y.Z} is the LilyPond version number. - -@smallspace - -Within this directory the two interesting subdirectories are - -@itemize -@item @file{ly/} - contains files in LilyPond format -@item @file{scm/} - contains files in Scheme format -@end itemize - -Let's begin by looking at some files in @file{ly/}. -Open @file{ly/property-init.ly} in a text editor. The one -you normally use for @code{.ly} files will be fine. This file -contains the definitions of all the standard LilyPond predefined -commands, such as @code{\stemUp} and @code{\slurDotted}. You will -see that these are nothing more than definitions of variables -containing one or a group of @code{\override} commands. For -example, @code{/tieDotted} is defined to be: - -@example -tieDotted = @{ - \override Tie #'dash-period = #0.75 - \override Tie #'dash-fraction = #0.1 -@} -@end example - -If you do not like the default values these predefined commands can -be redefined easily, just like any other variable, at the -head of your input file. - -The following are the most useful files to be found in -@file{ly/}: - -@multitable @columnfractions .4 .6 -@headitem Filename - @tab Contents -@item @file{ly/engraver-init.ly} - @tab Definitions of engraver Contexts -@item @file{ly/paper-defaults-init.ly} - @tab Specifications of paper-related defaults -@item @file{ly/performer-init.ly} - @tab Definitions of performer Contexts -@item @file{ly/property-init.ly} - @tab Definitions of all common predefined commands -@item @file{ly/spanner-init.ly} - @tab Definitions of spanner-related predefined commands -@end multitable - -Other settings (such as the definitions of markup commands) are -stored as @code{.scm} (Scheme) files. The Scheme programming -language is used to provide a programmable interface into -LilyPond internal operation. Further explanation of these files -is currently outside the scope of this manual, as a knowledge of -the Scheme language is required. Users should be warned that -a substantial amount of technical knowledge or time is required -to understand Scheme and these files (see @ref{Scheme tutorial}). - -If you have this knowledge, the Scheme files which may be of -interest are: - -@multitable @columnfractions .4 .6 -@headitem Filename - @tab Contents -@item @file{scm/auto-beam.scm} - @tab Sub-beaming defaults -@item @file{scm/define-grobs.scm} - @tab Default settings for grob properties -@item @file{scm/define-markup-commands.scm} - @tab Specify all markup commands -@item @file{scm/midi.scm} - @tab Default settings for MIDI output -@item @file{scm/output-lib.scm} - @tab Settings that affect appearance of frets, colors, - accidentals, bar lines, etc -@item @file{scm/parser-clef.scm} - @tab Definitions of supported clefs -@item @file{scm/script.scm} - @tab Default settings for articulations -@end multitable - - - -@node Avoiding tweaks with slower processing -@subsection Avoiding tweaks with slower processing - -LilyPond can perform extra checks while it processes input files. These -checks will take extra time to perform, but fewer manual tweaks -may be required to obtain an acceptable result. If a text script -or part of the lyrics extends over the margins these checks will -compress that line of the score just enough to fit within the -margins. - -To be effective under all circumstances these checks must be enabled -by placing the overrides in a Score @code{\with} block, rather than -in-line in music, as follows: - -@example -\new Score \with @{ - % Makes sure text scripts and lyrics are within the paper margins - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t -@} @{ - .. -@} -@end example - -@node Advanced tweaks with Scheme -@subsection Advanced tweaks with Scheme - -Although many things are possible with the @code{\override} and -@code{\tweak} commands, an even more powerful way of modifying -the action of LilyPond is available through a programmable -interface to the LilyPond internal operation. Code written in -the Scheme programming language can be incorporated directly in -the internal operation of LilyPond. Of course, at least a basic -knowledge of programming in Scheme is required to do this, and an -introduction is provided in the @ref{Scheme tutorial}. - -As an illustration of one of the many possibilities, instead of -setting a property to a constant it can be set to a Scheme -procedure which is then called whenever that property is accessed -by LilyPond. The property can then be set dynamically to a value -determined by the procedure at the time it is called. In this -example we color the note head in accordance with its position on -the staff. - -@cindex x11-color function, example of using -@cindex NoteHead, example of overriding -@cindex color property, setting to Scheme procedure - -@lilypond[quote,verbatim,ragged-right] -#(define (color-notehead grob) - "Color the notehead according to its position on the staff." - (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) - (case mod-position - ;; Return rainbow colors - ((1) (x11-color 'red )) ; for C - ((2) (x11-color 'orange )) ; for D - ((3) (x11-color 'yellow )) ; for E - ((4) (x11-color 'green )) ; for F - ((5) (x11-color 'blue )) ; for G - ((6) (x11-color 'purple )) ; for A - ((0) (x11-color 'violet )) ; for B - ) - ) -) - -\relative c' { - % Arrange to obtain color from color-notehead procedure - \override NoteHead #'color = #color-notehead - c2 c' | - b4 g8 a b4 c | - c,2 a' | - g1 | -} -\addlyrics { - Some -- where o -- ver the Rain -- bow, way up high, -} -@end lilypond - -Further examples showing the use of these programmable interfaces -can be found in @ref{Tweaking with Scheme}. - - - - - - - - - - - - - - - diff --git a/Documentation/user/unfretted-strings.itely b/Documentation/user/unfretted-strings.itely deleted file mode 100644 index 5b1a35c9a4..0000000000 --- a/Documentation/user/unfretted-strings.itely +++ /dev/null @@ -1,202 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Unfretted string instruments -@section Unfretted string instruments - -@lilypondfile[quote] -{unfretted-headword.ly} - -@cindex orchestral strings -@cindex strings, orchestral -@cindex strings, writing for - -This section provides information and references which are helpful -when writing for unfretted string instruments, principally -orchestral strings. - -@menu -* Common notation for unfretted strings:: -@end menu - -@node Common notation for unfretted strings -@subsection Common notation for unfretted strings - -There is little specialist notation for unfretted string -instruments. The music is notated on a single staff, and -usually only a single voice is required. Two voices might -be required for some double-stopped or divisi passages. - -@menu -* References for unfretted strings:: -* Bowing indications:: -* Harmonics:: -* Snap (Bartok) pizzicato:: -@end menu - -@node References for unfretted strings -@unnumberedsubsubsec References for unfretted strings - -Most of the notation which is useful for orchestral strings -and other bowed instruments is covered elsewhere: - -@itemize - -@item Textual indications such as @qq{pizz.} and @qq{arco} are -added as simple text -- see @ref{Text scripts}. - -@item Fingerings, including the thumb indication, are described -in @ref{Fingering instructions}. - -@item Double stopping is normally indicated by writing a chord, -see @ref{Chorded notes}. Directives for playing chords may be -added, see @ref{Arpeggio}. - -@item A template for a string quartet can be found in -@rlearning{String quartet}. Others are shown in the snippets. - -@end itemize - - -@seealso -Learning Manual: -@rlearning{String quartet}. - -Notation Reference: -@ref{Text scripts}, -@ref{Fingering instructions}, -@ref{Chorded notes}, -@ref{Arpeggio}. - -Snippets: -@rlsr{Unfretted strings}. - - -@node Bowing indications -@unnumberedsubsubsec Bowing indications - -@funindex \upbow -@funindex \downbow -@funindex \open - -@cindex bowing indications -@cindex up bow indication -@cindex down bow indication -@cindex open string indication -@cindex string, indicating open - -Bowing indications are created as articulations, which are -described in @ref{Articulations and ornamentations}. - -The bowing commands, @code{\upbow} and @code{\downbow}, are used -with slurs as follows: - -@lilypond[verbatim,quote,relative=2] -c4(\downbow d) e(\upbow f) -@end lilypond - -@noindent -and the following example shows three ways in which an open A -string on a violin might be indicated: - -@lilypond[verbatim,quote,relative=2] -a4 \open -a^\markup { \teeny "II" } -a2^\markup { \small "sul A" } -@end lilypond - - -@predefined -@code{\downbow}, -@code{\upbow}, -@code{\open}. -@endpredefined - - -@seealso -Notation Reference: -@ref{Articulations and ornamentations}, -@ref{Slurs}. - - -@node Harmonics -@unnumberedsubsubsec Harmonics - -@funindex \harmonic - -@strong{@i{Natural harmonics}} - -@cindex natural harmonics -@cindex harmonics, natural - -Natural harmonics can be notated in several ways. A diamond-shaped -note head generally means to touch the string where you would stop -the note if it were not a diamond. - -@warning{Harmonics @strong{must} be defined inside a chord -construct even if there is only a single note.} - -@c TODO If the default for harmonicDots is changed, change this -Dotted harmonics indicated with @code{\harmonic} do not show the -dots. The context property @code{harmonicDots} should be set if -dots are required. - -@lilypond[verbatim,quote,relative=2] -4 2. -\set harmonicDots = ##t -4 2. -@end lilypond - -Alternatively a normal note head is shown at the pitch to be -sounded together with a small circle to indicate it should be -played as a harmonic: - -@lilypond[verbatim,quote,relative=2] -d2^\flageolet d_\flageolet -@end lilypond - -A smaller circle may be created, see the snippet list in -@ref{References for unfretted strings}. - -@strong{@i{Artificial harmonics}} - -@cindex artificial harmonics -@cindex harmonics, artifical - -Artificial harmonics are notated with two notes, one with a normal -note head indicating the stopped position and one with an open -diamond note head to indicate the harmonic position. - -@lilypond[verbatim,quote,relative=1] -2 -@end lilypond - - -@seealso -Music Glossary: -@rglos{harmonics}. - -Notation Reference: -@ref{Special note heads}, -@ref{References for unfretted strings}. - - -@node Snap (Bartok) pizzicato -@unnumberedsubsubsec Snap (Bartók) pizzicato - -@cindex pizzicato, Bartók -@cindex pizzicato, snap -@cindex Bartók pizzicato -@cindex snap pizzicato - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{snap-pizzicato-markup-bartok-pizzicato.ly} diff --git a/Documentation/user/vocal.itely b/Documentation/user/vocal.itely deleted file mode 100644 index fa5b58f2b5..0000000000 --- a/Documentation/user/vocal.itely +++ /dev/null @@ -1,1333 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Vocal music -@section Vocal music - -@c TODO: inspirational headword - -This section explains how to typeset vocal music, and make sure -that the lyrics will be aligned with the notes of their melody. - -@menu -* Common notation for vocal music:: -* Entering lyrics:: -* Aligning lyrics to a melody:: -* Specific uses of lyrics:: -* Stanzas:: -@end menu - - -@node Common notation for vocal music -@subsection Common notation for vocal music - -This section discusses issues related to vocal music in general, and -to some particular styles of vocal music. - -@menu -* References for vocal music and lyrics:: -* Opera:: -* Song books:: -* Spoken music:: -* Chants:: -* Ancient vocal music:: -@end menu - - -@node References for vocal music and lyrics -@unnumberedsubsubsec References for vocal music and lyrics - -@c TODO: split this section in two parts? -vv - -Various issues may arise when engraving vocal music. Some of these -are discussed in this section, while others are explained elsewhere: - -@itemize -@item -Most styles of vocal music use written text as lyrics. An introduction -to this notation is to be found in @rlearning{Setting simple songs}. - -@item -Vocal music is likely to require the use of @code{markup} mode, either -for lyrics of for other text elements (character's names, etc.). -This syntax is described in @ref{Text markup introduction}. - -@item -Lead sheets may be printed by combining vocal parts and @q{chord mode}; -this syntax is explained in @ref{Chord notation}. - -@item -@q{Ambitus} may be added at the beginning of vocal staves, as explained -in @ref{Ambitus}. - -@item -Vocal parts may be printed using traditional clefs, as shown in @ref{Clef}. - -@item -Ancient vocal music is supported, as explained in @ref{Ancient notation}. -@end itemize - - -@node Opera -@unnumberedsubsubsec Opera - -@c TODO -TBC - -@c add characters names snippet -vv - -@node Song books -@unnumberedsubsubsec Song books - -@c TODO -TBC - -@snippets -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{simple-lead-sheet.ly} - - -@seealso -Notation Reference: -@ref{Chord notation}. - - -@node Spoken music -@unnumberedsubsubsec Spoken music -@cindex parlato -@cindex Sprechgesang -Such effects as @q{parlato} or @q{Sprechgesang} require perfomers to speak -without pitch but still with rhythm; these are notated by cross -note heads, as demonstrated in @ref{Special note heads}. - -@c TODO add "marking-notes-on-spoken-parts" snippet -vv -@c add "showing the rhythm of a melody" snip -@c add "one staff-line notation" -@c add "improvisation" ref -@c add "lyrics independents of notes" ref - -@node Chants -@unnumberedsubsubsec Chants - -@c TODO Add text from lsr and -user -TBC - -@node Ancient vocal music -@unnumberedsubsubsec Ancient vocal music - -@c TODO -TBC - -@c Add "Printing both the ancient and the modern clef in vocal music" snippet, -@c and "Transcription of Ancient music with incipit" snippet. -vv - - -@seealso -Notation Reference: -@ref{Ancient notation}. - - -@node Entering lyrics -@subsection Entering lyrics - -@c TODO add one sentence here. -vv - -@menu -* Lyrics explained:: -* Setting simple songs:: -* Working with lyrics and variables:: -@end menu - - -@node Lyrics explained -@unnumberedsubsubsec Lyrics explained - -@cindex lyrics -@funindex \lyricmode -@cindex punctuation -@cindex spaces, in lyrics -@cindex quotes, in lyrics - -@c FIXME: this section is to be rewritten. -Since LilyPond input files are text, there is at least one -issue to consider when working with vocal music: -song texts must be interpreted as text, not notes. For example, the -input@tie{}@code{d} should be interpreted as a one letter syllable, -not the note@tie{}D. -Therefore, a special lyric mode has to be used, either explicitely -or using some abbreviated methods. - -Lyrics are entered in a special input mode, which can be introduced -by the keyword @code{\lyricmode}, or by using @code{\addlyrics} or -@code{\lyricsto}. In this mode you can enter lyrics, -with punctuation and accents, and the input @code{d} is not parsed as -a pitch, but rather as a one letter syllable. Syllables are entered -like notes, but with pitches replaced by text. For example, - -@example -\lyricmode @{ Twin-4 kle4 twin- kle litt- le star2 @} -@end example - -There are two main methods to specify the horizontal placement -of the syllables, either by specifying the duration of each syllable -explicitly, like in the example above, or by automatically aligning -the lyrics to a melody or other voice of music, using @code{\addlyrics} -or @code{\lyricsto}. -@c TODO: broken -@c For more details see @ref{The Lyrics context}. - -A word or syllable of lyrics begins with an alphabetic character, and ends -with -any space or digit. The following characters can be any character -that is not a digit or white space. - -Any character that is not a digit or white space will be regarded as -part of the syllable; one important consequence of this is that a word -can end with @code{@}}, which often leads to the following mistake: - -@example -\lyricmode @{ lah- lah@} -@end example - -In this example, the @code{@}} is included in the final syllable, so the -opening brace is not balanced and the input file will probably not -compile. - - -@funindex \property in \lyricmode - -@noindent -Similarly, a period which follows an alphabetic sequence is included in -the resulting string. As a consequence, spaces must be inserted around -property commands: do @emph{not} write - -@example -\override Score.LyricText #'font-shape = #'italic -@end example - -@noindent -but instead use - -@example -\override Score . LyricText #'font-shape = #'italic -@end example - -@funindex _ -@cindex spaces, in lyrics -@cindex quotes, in lyrics -@cindex ties, in lyrics - -In order to assign more than one syllable to a single note, you can -surround them with quotes or use a @code{_} character, to get spaces -between syllables, or use tilde symbol (@code{~}) to get a lyric tie. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - -@noindent -The lyric tie is implemented with the Unicode character -@code{U+203F}; therefore a font that includes this glyph -(such as DejaVuLGC) has to be used. More explanations about -text and non-text fonts can be found in @ref{Fonts}. - - -To enter lyrics with characters from non-English languages, or with -accented and special characters (such as the heart symbol or slanted quotes), -simply insert the characters directly into the input file and save -it with UTF-8 encoding. See @ref{Text encoding}, for more info. - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { e4 f e d e f e2 } -\addlyrics { He said: “Let my peo ple go”. } -@end lilypond - -To use normal quotes in lyrics, add a backslash before the -quotes. For example, - -@lilypond[quote,ragged-right,fragment,verbatim] -\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. } -\addlyrics { "\"I" am so lone- "ly\"" said she } -@end lilypond - -The full definition of a word start in Lyrics mode is somewhat more -complex. - -A word in Lyrics mode begins with: an alphabetic character, @code{_}, -@code{?}, @code{!}, @code{:}, @code{'}, the control characters @code{^A} -through @code{^F}, @code{^Q} through @code{^W}, @code{^Y}, @code{^^}, -any 8-bit character with ASCII code over 127, or a two-character -combination of a backslash followed by one of @code{`}, @code{'}, -@code{"}, or @code{^}. - -@c " to balance double quotes for not-so-bright context-sensitive editors - -To define variables containing lyrics, the function @code{lyricmode} -must be used. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - - -@seealso -Notation Reference: -@ref{Fonts}. - -Internals Reference: -@rinternals{LyricText}, -@rinternals{LyricSpace}. - - -@c FIXME: this title has to be changed (possible confusion with LM) -vv -@node Setting simple songs -@unnumberedsubsubsec Setting simple songs - -@cindex \addlyrics - -The easiest way to add lyrics to a melody is to append - -@example -\addlyrics @{ @var{the lyrics} @} -@end example - -@noindent -to a melody. Here is an example, - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -@end lilypond - -More stanzas can be added by adding more -@code{\addlyrics} sections - -@lilypond[ragged-right,verbatim,fragment,quote] -\time 3/4 -\relative c' { c2 e4 g2. } -\addlyrics { play the game } -\addlyrics { speel het spel } -\addlyrics { joue le jeu } -@end lilypond - -The command @code{\addlyrics} cannot handle polyphony settings. For these -cases you should use @code{\lyricsto} and @code{\lyricmode}, as will be -introduced in @ref{Lyrics explained}. - -@c TODO: one additional section may be needed here, -@c such as "advanced lyric syntax" or whatever -vv - -@node Working with lyrics and variables -@unnumberedsubsubsec Working with lyrics and variables - -@cindex lyrics, variables - -To define variables containing lyrics, the function @code{\lyricmode} -must be used. You do not have to enter durations though, if you add -@code{\addlyrics} or @code{\lyricsto} -when invoking your variable. - -@example -verseOne = \lyricmode @{ Joy to the world the Lord is come @} -\score @{ - << - \new Voice = "one" \relative c'' @{ - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - @} - \addlyrics @{ \verseOne @} - >> -@} -@end example - -For different or more complex orderings, the best way is to setup the -hierarchy of staves and lyrics first, e.g., -@example -\new ChoirStaff << - \new Voice = "soprano" @{ @emph{music} @} - \new Lyrics = "sopranoLyrics" @{ s1 @} - \new Lyrics = "tenorLyrics" @{ s1 @} - \new Voice = "tenor" @{ @emph{music} @} ->> -@end example - -and then combine the appropriate melodies and lyric lines - -@example -\context Lyrics = sopranoLyrics \lyricsto "soprano" -@emph{the lyrics} -@end example - -@noindent - -The final input would resemble - -@example -<<\new ChoirStaff << @emph{setup the music} >> - \lyricsto "soprano" @emph{etc} - \lyricsto "alto" @emph{etc} -@emph{etc} ->> -@end example - -@ignore -@c FIXME -http://code.google.com/p/lilypond/issues/detail?id=329 -The problem cannot be reproduced. -The following has no sense, because the issue seems to be fixed. -A comment is in tracker waiting for response ---FV - - -Be careful when defining a variable with lyrics that creates a new -context, for example, using the deprecated @code{\lyrics} command. See -the next erroneous example: - -@example -words = \lyrics{ %warning: this creates a new context - one two -} -<< - \new Voice = "sop" { c1 } - \new Lyrics \lyricsto "sop" { \words } - \new Voice = "alt" { c2 c } - \new Lyrics \lyricsto "alt" { \words } ->> -@end example - -the problem is that \lyricsto will try to connect the "sop" melody with the context -created by "\new Lyrics". - -Then \lyrics in \words creates another context, and the original "\new Lyrics" one -remains empty. - -@end ignore - - -@seealso -@c TODO: document \new Staff << Voice \lyricsto >> bug -Internals Reference: -@rinternals{LyricCombineMusic}, -@rinternals{Lyrics}. - - -@node Aligning lyrics to a melody -@subsection Aligning lyrics to a melody - -@funindex \lyricmode -@funindex \addlyrics -@funindex \lyricsto - -@c FIXME: this stuff is to be rewritten. -vv - -Aligning of text with melodies can be made automatically, but if you -specify the durations of the syllables it can also be made manually. -Lyrics aligning and typesetting are prepared with the help of skips, -hyphens and extender lines. - -Lyrics are printed by interpreting them in the context called -@rinternals{Lyrics}. - -@example -\new Lyrics \lyricmode @dots{} -@end example - -There are two main methods to specify the horizontal placement -of the syllables: - -@itemize -@item -by automatically aligning -the lyrics to a melody or other voice of music, using @code{\addlyrics} -or @code{\lyricsto}. - -@item -or by specifying the duration of each syllable -explicitly, using @code{\lyricmode} -@end itemize - -@menu -* Automatic syllable durations:: -* Manual syllable durations:: -* Multiple syllables to one note:: -* Multiple notes to one syllable:: -* Skipping notes:: -* Extenders and hyphens:: -* Lyrics and repeats:: -@end menu - -@node Automatic syllable durations -@unnumberedsubsubsec Automatic syllable durations - -@cindex automatic syllable durations -@cindex lyrics and melodies - -The lyrics can be aligned under a given melody -automatically. This is achieved by combining the -melody and the lyrics with the @code{\lyricsto} expression - -@example -\new Lyrics \lyricsto @var{name} @dots{} -@end example - -This aligns the lyrics to the -notes of the @rinternals{Voice} context called @var{name}, which must -already exist. Therefore normally the @code{Voice} is specified first, and -then the lyrics are specified with @code{\lyricsto}. The command -@code{\lyricsto} switches to @code{\lyricmode} mode automatically, so the -@code{\lyricmode} keyword may be omitted. - -The following example uses different commands for entering lyrics. - -@lilypond[quote,fragment,ragged-right,verbatim] -<< - \new Voice = "one" \relative c'' { - \autoBeamOff - \time 2/4 - c4 b8. a16 g4. f8 e4 d c2 - } - -% not recommended: left aligns syllables - \new Lyrics \lyricmode { Joy4 to8. the16 world!4. the8 Lord4 is come.2 } - -% wrong: durations needed - \new Lyrics \lyricmode { Joy to the earth! the Sa -- viour reigns. } - -%correct - \new Lyrics \lyricsto "one" { No more let sins and sor -- rows grow. } ->> -@end lilypond - -The second stanza is not properly aligned because the durations -were not specified. A solution for that would be to use @code{\lyricsto}. - -The @code{\addlyrics} command is actually just a convenient way -to write a more complicated LilyPond structure that sets up the -lyrics. - -@example -@{ MUSIC @} -\addlyrics @{ LYRICS @} -@end example - -@noindent -is the same as - -@example -\new Voice = "blah" @{ music @} -\new Lyrics \lyricsto "blah" @{ LYRICS @} -@end example - -@node Manual syllable durations -@unnumberedsubsubsec Manual syllable durations - -Lyrics can also be entered without @code{\addlyrics} or -@code{\lyricsto}. In this case, -syllables are entered like notes -- but with pitches replaced by text -- and the -duration of each syllable must be entered explicitly. For example: - -@example -play2 the4 game2. -sink2 or4 swim2. -@end example - -The alignment to a melody can be specified with the -@code{associatedVoice} property, - -@example -\set associatedVoice = #"lala" -@end example - -@noindent -The value of the property (here: @code{"lala"}) should be the name of -a @rinternals{Voice} context. Without this setting, extender lines -will not be formatted properly. - -Here is an example demonstrating manual lyric durations, - -@lilypond[relative=1,ragged-right,verbatim,fragment,quote] -<< \new Voice = "melody" { - \time 3/4 - c2 e4 g2. - } - \new Lyrics \lyricmode { - \set associatedVoice = #"melody" - play2 the4 game2. - } >> -@end lilypond - - -@seealso -Internals Reference: -@rinternals{Lyrics}. - - -@node Multiple syllables to one note -@unnumberedsubsubsec Multiple syllables to one note - - -@funindex _ -@cindex ties, in lyrics - -In order to assign more than one syllable to a single note, you can -surround them with quotes or use a @code{_} character, to get spaces -between syllables, or use tilde symbol (@code{~}) to get a lyric -tie@footnote{The lyric ties is implemented with the Unicode character -U+203F, so be -sure to have a font (Like DejaVuLGC) installed that includes this -glyph.}. - -@lilypond[quote,ragged-right,fragment,verbatim] -\time 3/4 -\relative c' { c2 e4 g2 e4 } -\addlyrics { gran- de_a- mi- go } -\addlyrics { pu- "ro y ho-" nes- to } -\addlyrics { pu- ro~y~ho- nes- to } -@end lilypond - - -@seealso -Internals Reference: -@rinternals{LyricCombineMusic}. - -@c Here come the section which used to be "Melismata" -@c the new title might be more self-explanatory - - -@node Multiple notes to one syllable -@unnumberedsubsubsec Multiple notes to one syllable - -@cindex melisma -@cindex melismata -@cindex phrasing, in lyrics - -Sometimes, particularly in Medieval music, several notes are to be sung on one -single syllable; such vocalises are called melismas, or melismata. - -@c this method seems to be the simplest; therefore -@c it might be better to present it first - vv - -You can define melismata entirely in the lyrics, by entering @code{_} -for every extra note that has to be added to the melisma. - -@c FIXME: clarify: __ is used to crate a lyric extender, -@c _ is used to add a note to a melisma, so both __ and _ are needed. - -@c verbose! --FV -@c duplicated: TODO fix -Additionaly, you can make an extender line to be typeset to indicate -the melisma in the score, writing a double underscore next to the -first syllable of the melisma. This example shows the three elements -that are used for this purpose (all of them surrounded by spaces): -double hyphens to separate syllables in a word, underscores to add -notes to a melisma, and a double underscore to put an extender line. - -@c wrong: extender line only on last syllable of a word. Change example -@lilypond[relative=1,verbatim,fragment,quote] -{ \set melismaBusyProperties = #'() - c d( e) f f( e) e e } -\addlyrics - { Ky -- _ _ ri __ _ _ _ e } -@end lilypond - -In this case, you can also have ties and slurs in the melody if you -set @code{melismaBusyProperties}, as is done in the example above. - -However, the @code{\lyricsto} command can also -detect melismata automatically: it only puts one -syllable under a tied or slurred group of notes. If you want to force -an unslurred group of notes to be a melisma, insert @code{\melisma} -after the first note of the group, and @code{\melismaEnd} after the -last one, e.g., - -@lilypond[quote,relative=2,ragged-right,fragment,verbatim] -<< - \new Voice = "lala" { - \time 3/4 - f4 g8 - \melisma - f e f - \melismaEnd - e2 - } - \new Lyrics \lyricsto "lala" { - la di __ daah - } ->> -@end lilypond - -In addition, notes are considered a melisma if they are manually -beamed, and automatic beaming (see @ref{Setting automatic beam -behavior}) is switched off. - -@c FIXME: this now links to LM -vv - -@cindex SATB -@cindex choral score - -A complete example of a SATB score setup is in section -@rlearning{Vocal ensembles}. - - -@predefined -@funindex \melisma -@code{\melisma}, -@funindex \melismaEnd -@code{\melismaEnd}. -@endpredefined - - -@seealso -@c @lsr{vocal,lyric@/-combine.ly}. - - -@knownissues - -Melismata are not detected automatically, and extender lines must be -inserted by hand. - -@node Skipping notes -@unnumberedsubsubsec Skipping notes - -Making a lyric line run slower than the melody can be achieved by -inserting @code{\skip}s into the lyrics. For every @code{\skip}, -the text will be delayed another note. The @code{\skip} command -must be followed by a valid duration, but this is ignored when -@code{\skip} is used in lyrics. - -For example, - -@lilypond[verbatim,ragged-right,quote] -\relative c' { c c g' } -\addlyrics { - twin -- \skip 4 - kle -} -@end lilypond - - -@node Extenders and hyphens -@unnumberedsubsubsec Extenders and hyphens - -@cindex melisma -@cindex extender - -@c leave this as samp. -gp -In the last syllable of a word, melismata are sometimes indicated with -a long horizontal line starting in the melisma syllable, and ending in -the next one. Such a line is called an extender line, and it is -entered as @samp{ __ } (note the spaces before and after the two -underscore characters). - -@warning{Melismata are indicated in the score with extender lines, -which are entered as one double underscore; but short melismata can -also be entered by skipping individual notes, which are entered as -single underscore characters; these do not make an extender line to be -typeset by default.} - -@cindex hyphens - -@c leave this as samp. -gp -Centered hyphens are entered as @samp{ -- } between syllables of a same word -(note the spaces before and after the two hyphen characters). The hyphen -will be centered between the syllables, and its length will be adjusted -depending on the space between the syllables. - -In tightly engraved music, hyphens can be removed. Whether this -happens can be controlled with the @code{minimum-distance} (minimum -distance between two syllables) and the @code{minimum-length} -(threshold below which hyphens are removed). - - -@seealso -Internals Reference: -@rinternals{LyricExtender}, -@rinternals{LyricHyphen} - - -@node Lyrics and repeats -@unnumberedsubsubsec Lyrics and repeats - -@c TODO New section. Add text -TBC - - -@node Specific uses of lyrics -@subsection Specific uses of lyrics - -@c FIXME This whole section is to be reorganized. -vv - -Often, different stanzas of one song are put to one melody in slightly -differing ways. Such variations can still be captured with -@code{\lyricsto}. - -@menu -* Divisi lyrics:: -* Lyrics independent of notes:: -* Spacing out syllables:: -* Centering lyrics between staves:: -@end menu - - - -@node Divisi lyrics -@unnumberedsubsubsec Divisi lyrics - -You can display alternate (or divisi) lyrics by naming voice -contexts and attaching lyrics to those specific contexts. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" { - \relative c' { - c4 - << - { \voiceOne c8 e } - \new Voice = "splitpart" { \voiceTwo c4 } - >> - \oneVoice c4 c | c - } - } - \new Lyrics \lyricsto "melody" { we shall not o- ver- come } - \new Lyrics \lyricsto "splitpart" { will } ->> } -@end lilypond - - -You can use this trick to display different lyrics for a repeated -section. - -@lilypond[verbatim,ragged-right,quote] -\score{ << - \new Voice = "melody" \relative c' { - c2 e | g e | c1 | - \new Voice = "verse" \repeat volta 2 {c4 d e f | g1 | } - a2 b | c1} - \new Lyrics = "mainlyrics" \lyricsto melody \lyricmode { - do mi sol mi do - la si do } - \context Lyrics = "mainlyrics" \lyricsto verse \lyricmode { - do re mi fa sol } - \new Lyrics = "repeatlyrics" \lyricsto verse \lyricmode { - dodo rere mimi fafa solsol } ->> -} -@end lilypond - - - -@node Lyrics independent of notes -@unnumberedsubsubsec Lyrics independent of notes - -@cindex Devnull context - -In some complex vocal music, it may be desirable to place -lyrics completely independently of notes. Music defined -inside @code{lyricrhythm} disappears into the -@code{Devnull} context, but the rhythms can still be used -to place the lyrics. - -@lilypond[quote,verbatim,ragged-right] -voice = { - c''2 - \tag #'music { c''2 } - \tag #'lyricrhythm { c''4. c''8 } - d''1 -} - -lyr = \lyricmode { I like my cat! } - -<< - \new Staff \keepWithTag #'music \voice - \new Devnull="nowhere" \keepWithTag #'lyricrhythm \voice - \new Lyrics \lyricsto "nowhere" \lyr - \new Staff { c'8 c' c' c' c' c' c' c' - c' c' c' c' c' c' c' c' } ->> -@end lilypond - -This method is recommended only if the music in the @code{Devnull} -context does not contain melismata. Melismata are defined by the -@code{Voice} context. Connecting lyrics to a @code{Devnull} context -makes the voice/lyrics links to get lost, and so does the info on -melismata. Therefore, if you link lyrics to a @code{Devnull} context, -the implicit melismata get ignored. - -@c Conclusion: do not use devnull for lyrics -FV - -@c this clarifies http://code.google.com/p/lilypond/issues/detail?id=248 - -@node Spacing out syllables -@unnumberedsubsubsec Spacing out syllables - -@cindex Spacing lyrics -@cindex Lyrics, increasing space between - -To increase the spacing between lyrics, set the minimum-distance property of -LyricSpace. - -@lilypond[relative,verbatim,fragment,quote,ragged-right] -{ - c c c c - \override Lyrics.LyricSpace #'minimum-distance = #1.0 - c c c c -} -\addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext -} -@end lilypond - -To make this change for all lyrics in the score, set the property in the -layout. - -@lilypond[verbatim,quote,ragged-right] -\score { - \relative c' { - c c c c - c c c c - } - \addlyrics { - longtext longtext longtext longtext - longtext longtext longtext longtext - } - \layout { - \context { - \Lyrics - \override LyricSpace #'minimum-distance = #1.0 - } - } -} -@end lilypond - -@c @snippets -@c This snippet has been renamed to "lyrics-alignment.ly" -@c update as soon as lsr/is updated -vv -@c @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -@c {lyrics-alignment.ly} - -@c TODO: move to LSR -vv -@snippets - -Checking to make sure that text scripts and lyrics are within the margins is -a relatively large computational task. To speed up processing, LilyPond does -not perform such calculations by default; to enable it, use - -@example -\override Score.PaperColumn #'keep-inside-line = ##t -@end example - -To make lyrics avoid bar lines as well, use - -@example -\layout @{ - \context @{ - \Lyrics - \consists "Bar_engraver" - \consists "Separating_line_group_engraver" - \override BarLine #'transparent = ##t - @} -@} -@end example - -@c TODO Create and add lsr example of lyricMelismaAlignment -@c It's used like this to center-align all lyric syllables, -@c even when notes are tied. -td - -@ignore -\layout -{ - \context { \Score lyricMelismaAlignment = #0 } -} -@end ignore - - -@node Centering lyrics between staves -@unnumberedsubsubsec Centering lyrics between staves - -@c TODO Add text from -user -TBC - -@node Stanzas -@subsection Stanzas - -@menu -* Adding stanza numbers:: -* Adding dynamics marks to stanzas:: -* Adding singers' names to stanzas:: -* Stanzas with different rhythms:: -* Printing stanzas at the end:: -* Printing stanzas at the end in multiple columns:: -@end menu - - -@node Adding stanza numbers -@unnumberedsubsubsec Adding stanza numbers - -@cindex stanza number - -Stanza numbers can be added by setting @code{stanza}, e.g., - -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set stanza = #"1. " - Hi, my name is Bert. -} \addlyrics { - \set stanza = #"2. " - Oh, ché -- ri, je t'aime -} -@end lilypond - - -@noindent -These numbers are put just before the start of the first syllable. - -@c TODO Create and add snippet to show how two lines of a -@c stanza can be grouped together, along these lines: -@c (might need improving a bit) -td - -@ignore -leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup -#"brace105" } - -stanzaOneOne = { - \set stanza = \markup { "1. " \leftbrace } - \lyricmode { Child, you're mine and I love you. - Lend thine ear to what I say. - - } -} - -stanzaOneThree = { -% \set stanza = \markup { " "} - \lyricmode { Child, I have no great -- er joy - Than to have you walk in truth. - - } -} - -\new Voice { - \repeat volta 2 { c'8 c' c' c' c' c' c'4 - c'8 c' c' c' c' c' c'4 } -} \addlyrics { \stanzaOneOne } - \addlyrics { \stanzaOneThree } - -@end ignore - -@node Adding dynamics marks to stanzas -@unnumberedsubsubsec Adding dynamics marks to stanzas - -Stanzas differing in loudness may be indicated by putting a -dynamics mark before each stanza. In LilyPond, everything coming in -front of a stanza goes into the @code{StanzaNumber} object; dynamics marks -are no different. For technical reasons, you have to set the stanza -outside @code{\lyricmode}: - -@lilypond[quote,ragged-right,verbatim] -text = { - \set stanza = \markup { \dynamic "ff" "1. " } - \lyricmode { - Big bang - } -} - -<< - \new Voice = "tune" { - \time 3/4 - g'4 c'2 - } -\new Lyrics \lyricsto "tune" \text ->> -@end lilypond - -@node Adding singers' names to stanzas -@unnumberedsubsubsec Adding singers' names to stanzas - -@cindex singer name -@cindex name of singer - -Names of singers can also be added. They are printed at the start of -the line, just like instrument names. They are created by setting -@code{vocalName}. A short version may be entered as @code{shortVocalName}. - -@lilypond[fragment,ragged-right,quote,verbatim,relative=2] -\new Voice { - \time 3/4 g2 e4 a2 f4 g2. -} \addlyrics { - \set vocalName = #"Bert " - Hi, my name is Bert. -} \addlyrics { - \set vocalName = #"Ernie " - Oh, ché -- ri, je t'aime -} -@end lilypond - -@node Stanzas with different rhythms -@unnumberedsubsubsec Stanzas with different rhythms - -@subsubheading Ignoring melismata - -One possibility is that the text has a melisma in one stanza, but -multiple syllables in another one. One solution is to make the faster -voice ignore the melisma. This is done by setting -@code{ignoreMelismata} in the Lyrics context. - -@lilypond[verbatim,ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - \slurDotted - f8.[( g16]) - a4 - } - \new Lyrics \lyricsto "lahlah" { - more slow -- ly - } - \new Lyrics \lyricsto "lahlah" { - go - \set ignoreMelismata = ##t - fas -- ter - \unset ignoreMelismata - still - } ->> -@end lilypond - -@knownissues -Unlike most @code{\set} commands, @code{\set ignoreMelismata} does -not work if prefixed with @code{\once}. It is necessary to use -@code{\set} and @code{\unset} to bracket the lyrics where melismata -are to be ignored. - -@subsubheading Switching to an alternative melody - -More complex variations in text underlay are possible. It is possible -to switch the melody for a line of lyrics during the text. This is -done by setting the @code{associatedVoice} property. In the example - -@lilypond[ragged-right,quote] -<< - \relative c' \new Voice = "lahlah" { - \set Staff.autoBeaming = ##f - c4 - << - \new Voice = "alternative" { - \voiceOne - \times 2/3 { - % show associations clearly. - \override NoteColumn #'force-hshift = #-3 - f8 f g - } - } - { - \voiceTwo - f8.[ g16] - \oneVoice - } >> - a8( b) c - } - \new Lyrics \lyricsto "lahlah" { - Ju -- ras -- sic Park - } - \new Lyrics \lyricsto "lahlah" { - % Tricky: need to set associatedVoice - % one syllable too soon! - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex - } >> -@end lilypond - -@noindent -the text for the first stanza is set to a melody called @q{lahlah}, - -@example -\new Lyrics \lyricsto "lahlah" @{ - Ju -- ras -- sic Park -@} -@end example - - -The second stanza initially is set to the @code{lahlah} context, but -for the syllable @q{ran}, it switches to a different melody. -This is achieved with -@example -\set associatedVoice = alternative -@end example - -@noindent -Here, @code{alternative} is the name of the @code{Voice} context -containing the triplet. - -@c FIXME: make this easier to understand -vv -This command must be one syllable too early, before @q{Ty} in this -case. In other words, changing the associatedVoice happens one step -later than expected. This is for technical reasons, and it is not a -bug. - -@example -\new Lyrics \lyricsto "lahlah" @{ - \set associatedVoice = alternative % applies to "ran" - Ty -- - ran -- - no -- - \set associatedVoice = lahlah % applies to "rus" - sau -- rus Rex -@} -@end example - -@noindent -The underlay is switched back to the starting situation by assigning -@code{lahlah} to @code{associatedVoice}. - - -@node Printing stanzas at the end -@unnumberedsubsubsec Printing stanzas at the end - -Sometimes it is appropriate to have one stanza set -to the music, and the rest added in verse form at -the end of the piece. This can be accomplished by adding -the extra verses into a @code{\markup} section outside -of the main score block. Notice that there are two -different ways to force linebreaks when using -@code{\markup}. - -@lilypond[ragged-right,verbatim,quote] -melody = \relative c' { -e d c d | e e e e | -d d e d | c1 | -} - -text = \lyricmode { -\set stanza = #"1." Ma- ry had a lit- tle lamb, -its fleece was white as snow. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text ->> - \layout { } -} -\markup { \column{ - \line{ Verse 2. } - \line{ All the children laughed and played } - \line{ To see a lamb at school. } - } -} -\markup{ - \wordwrap-string #" - Verse 3. - - Mary took it home again, - - It was against the rule." -} -@end lilypond - - -@node Printing stanzas at the end in multiple columns -@unnumberedsubsubsec Printing stanzas at the end in multiple columns - -When a piece of music has many verses, they are often printed in -multiple columns across the page. An outdented verse number often -introduces each verse. The following example shows how to produce such -output in LilyPond. - -@lilypond[ragged-right,quote,verbatim] -melody = \relative c' { - c c c c | d d d d -} - -text = \lyricmode { - \set stanza = #"1." This is verse one. - It has two lines. -} - -\score{ << - \new Voice = "one" { \melody } - \new Lyrics \lyricsto "one" \text - >> - \layout { } -} - -\markup { - \fill-line { - \hspace #0.1 % moves the column off the left margin; - % can be removed if space on the page is tight - \column { - \line { \bold "2." - \column { - "This is verse two." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "3." - \column { - "This is verse three." - "It has two lines." - } - } - } - \hspace #0.1 % adds horizontal spacing between columns; - % if they are still too close, add more " " pairs - % until the result looks good - \column { - \line { \bold "4." - \column { - "This is verse four." - "It has two lines." - } - } - \hspace #0.1 % adds vertical spacing between verses - \line { \bold "5." - \column { - "This is verse five." - "It has two lines." - } - } - } - \hspace #0.1 % gives some extra space on the right margin; - % can be removed if page space is tight - } -} -@end lilypond - - -@seealso -Internals Reference: -@rinternals{LyricText}, -@rinternals{StanzaNumber}. - - - - diff --git a/Documentation/user/wind.itely b/Documentation/user/wind.itely deleted file mode 100644 index 6507197554..0000000000 --- a/Documentation/user/wind.itely +++ /dev/null @@ -1,223 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Wind instruments -@section Wind instruments - -@lilypondfile[quote]{wind-headword.ly} - -This section includes some elements of music notation that arise when -writing for winds. - -@menu -* Common notation for wind instruments:: -* Bagpipes:: -@end menu - -@node Common notation for wind instruments -@subsection Common notation for wind instruments - -This section discusses some issues common to most wind instruments. - -@menu -* References for wind instruments:: -* Fingerings:: -@end menu - -@node References for wind instruments -@unnumberedsubsubsec References for wind instruments - -@cindex wind instruments - -Many notation issues for wind instruments pertain to breathing and -tonguing: - -@itemize -@item Breathing can be specified by rests or @ref{Breath marks}. -@item Legato playing is indicated by @ref{Slurs}. -@item Different types of tonguings, ranging from legato to non-legato to -stacatto are usually shown by articulation marks, sometimes combined -with slurs, see @ref{Articulations and ornamentations} and @ref{List of -articulations}. -@item Flutter tonguing is usually indicated by placing a tremolo mark -and a text markup on the note. See @ref{Tremolo repeats}. -@end itemize - -There are also other aspects of musical notation that can apply to wind -instruments: - -@itemize -@item Many wind instruments are transposing intruments, see -@ref{Instrument transpositions}. -@item The slide glissando are characteristic of the trombone, but other -winds may perform keyed or valved glissandi. See @ref{Glissando}. -@item Harmonic series glissandi, which are possible on all brass -instruments but common for French Horns, are usually written out as -@ref{Grace notes}. -@item Pitch inflections at the end of a note are discussed in @ref{Falls -and doits}. -@item Key slaps or valve slaps are often shown by the @code{cross} style -of @ref{Special note heads}. -@item Woodwinds can overblow low notes to sound harmonics. These are -shown by the @code{flageolet} articulation. See @ref{List of articulations}. -@item The use of brass mutes is usually indicated by a text markup, but -where there are many rapid changes it is better to use the -@code{stopped} and @code{open} articulations. See @ref{Articulations and -ornamentations} and @ref{List of articulations}. -@item Stopped horns are indicated by the @code{stopped} articulation. -See @ref{Articulations and ornamentations}. -@end itemize - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{changing--flageolet-mark-size.ly} - - -@seealso -Notation Reference: -@ref{Breath marks}, -@ref{Slurs}, -@ref{Articulations and ornamentations}, -@ref{List of articulations}, -@ref{Tremolo repeats}, -@ref{Instrument transpositions}, -@ref{Glissando}, -@ref{Grace notes}, -@ref{Falls and doits}, -@ref{Special note heads}, - -Snippets: -@rlsr{Winds} - - -@node Fingerings -@unnumberedsubsubsec Fingerings -@c TODO add link to LSR snippet by Libero Mureddo once he has added -@c it (after August 15th). -All wind instruments other than the trombone require the use of several -fingers to produce each pitch. - -TBC - -@node Bagpipes -@subsection Bagpipes - -This section includes extra information for writing for bagpipes. - -@menu -* Bagpipe definitions:: -* Bagpipe example:: -@end menu - -@node Bagpipe definitions -@unnumberedsubsubsec Bagpipe definitions - -@cindex bagpipe -@cindex Scottish highland bagpipe -@cindex grace notes -@funindex \taor -@funindex taor -@funindex \hideKeySignature -@funindex hideKeySignature -@funindex \showKeySignature -@funindex showKeySignature - -LilyPond contains special definitions for music for the Scottish -highland bagpipe; to use them, add - -@example -\include "bagpipe.ly" -@end example - -@noindent -at the top of your input file. This lets you add the special grace notes -common to bagpipe music with short commands. For example, you could -write @code{\taor} instead of - -@example -\grace @{ \small G32[ d G e] @} -@end example - -@code{bagpipe.ly} also contains pitch definitions for the bagpipe -notes in the appropriate octaves, so you do not need to worry about -@code{\relative} or @code{\transpose}. - -@lilypond[ragged-right,verbatim,quote,notime] -\include "bagpipe.ly" -{ \grg G4 \grg a \grg b \grg c \grg d \grg e \grg f \grA g A } -@end lilypond - -Bagpipe music nominally uses the key of D Major (even though that -isn't really true). However, since that is the only key that can be used, -the key signature is normally not written out. To set this up correctly, -always start your music with @code{\hideKeySignature}. If you for some -reason want to show the key signature, you can use @code{\showKeySignature} -instead. - -Some modern music use cross fingering on c and f to flatten those notes. -This can be indicated by @code{cflat} or @code{fflat}. Similarly, the -piobaireachd high g can be written @code{gflat} when it occurs in light -music. - - -@seealso -@rlsr{Winds} - - -@node Bagpipe example -@unnumberedsubsubsec Bagpipe example - -@cindex bagpipe example -@cindex Amazing Grace bagpipe example - -This is what the well known tune Amazing Grace looks like in bagpipe -notation. - -@lilypond[verbatim,quote] -\include "bagpipe.ly" -\layout { - indent = 0.0\cm - \context { \Score \remove "Bar_number_engraver" } -} - -\header { - title = "Amazing Grace" - meter = "Hymn" - arranger = "Trad. arr." -} - -{ - \hideKeySignature - \time 3/4 - \grg \partial 4 a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 \grg e8. f16 - \dblA A2 \grg A4 - \grg A2 f8. A16 - \grg A2 \hdblf f8[ e32 d16.] - \grg f2 \grg f8 e - \thrwd d2 \grg b4 - \grG a2 \grg a8. d16 - \slurd d2 \grg f8[ e32 d16.] - \grg f2 e4 - \thrwd d2. - \slurd d2 - \bar "|." -} -@end lilypond - - -@seealso -@rlsr{Winds} diff --git a/Documentation/user/working.itely b/Documentation/user/working.itely deleted file mode 100644 index 84acc5f6f4..0000000000 --- a/Documentation/user/working.itely +++ /dev/null @@ -1,831 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@c This file is part of lilypond-learning.tely -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node Working on LilyPond projects -@chapter Working on LilyPond projects - -This section explains how to solve or avoid certain common -problems. If you have programming experience, many of these -tips may seem obvious, but it is still advisable to read -this chapter. - - -@menu -* Suggestions for writing LilyPond input files:: -* When things don't work:: -* Scores and parts:: -@end menu - - -@node Suggestions for writing LilyPond input files -@section Suggestions for writing LilyPond input files - -Now you're ready to begin writing larger LilyPond input files -- -not just the little examples in the tutorial, but whole pieces. -But how should you go about doing it? - -As long as LilyPond can understand your input files and produce -the output that you want, it doesn't matter what your input files -look like. However, there are a few other things to consider when -writing LilyPond input files. - -@itemize -@item What if you make a mistake? The structure of a LilyPond -file can make certain errors easier (or harder) to find. - -@item What if you want to share your input files with somebody -else? In fact, what if you want to alter your own input files in -a few years? Some LilyPond input files are understandable at -first glance; others may leave you scratching your head -for an hour. - -@item What if you want to upgrade your LilyPond file for use -with a later version of LilyPond? The input syntax changes -occasionally as LilyPond improves. Most changes can be -done automatically with @code{convert-ly}, but some changes -might require manual assistance. LilyPond input files can be -structured in order to be easier (or harder) to update. - -@end itemize - -@menu -* General suggestions:: -* Typesetting existing music:: -* Large projects:: -* Saving typing with variables and functions:: -* Style sheets:: -@end menu - - -@node General suggestions -@subsection General suggestions - -Here are a few suggestions that can help you to avoid or fix -problems: - -@itemize -@item @strong{Include @code{\version} numbers in every file}. Note that all -templates contain @code{\version} information. We -highly recommend that you always include the @code{\version}, no matter -how small your file is. Speaking from personal experience, it's -quite frustrating to try to remember which version of LilyPond you were -using a few years ago. @command{convert-ly} requires you to declare -which version of LilyPond you used. - -@item @strong{Include checks}: @ruser{Bar and bar number checks}, -@ruser{Octave checks}. If you include checks every so often, then -if you make a mistake, you can pinpoint it quicker. How often is -@q{every so often}? It depends on the complexity of the music. -For very simple music, perhaps just once or twice. For very -complex music, perhaps every bar. - -@item @strong{One bar per line of text}. If there is anything complicated, -either in the music -itself or in the output you desire, it's often good to write only one bar -per line. Saving screen space by cramming eight bars per line just isn't -worth it if you have to @q{debug} your input files. - -@item @strong{Comment your input files}. Use either bar numbers -(every so often) or -references to musical themes (@q{second theme in violins,} @q{fourth -variation,} etc.). You may not need comments when you're writing the piece -for the first time, but if you want to go back to change something two or -three years later, or if you pass the source over to a friend, it will -be much more -challenging to determine your intentions or how your file is structured if -you didn't comment the file. - -@item @strong{Indent your braces}. A lot of problems are caused by an -imbalance -in the number of @code{@{} and @code{@}}. - -@item @strong{Explicitly add durations} at the beginnings of sections -and variables. If you specify @code{c4 d e} at the beginning of a -phrase (instead of just @code{c d e}) you can save yourself some -problems if you rearrange your music later. - -@item @strong{Separate tweaks} from music definitions. See -@ref{Saving typing with variables and functions}, and -@ref{Style sheets}. - -@end itemize - - -@node Typesetting existing music -@subsection Typesetting existing music - -If you are entering music from an existing score (i.e., typesetting a -piece of existing sheet music), - -@itemize - -@item Enter one manuscript (the physical copy) system at a time (but still -only one bar per line of text), and -check each system when you finish it. You may use the -@code{showLastLength} or @code{showFirstLength} properties to speed up -processing -- see @ruser{Skipping corrected music}. - -@item Define @code{mBreak = @{ \break @}} and insert @code{\mBreak} -in the input file whenever the manuscript has a line break. This -makes it much easier to compare the LilyPond music to the original -music. When you are finished proofreading your score, you may -define @code{mBreak = @{ @}} to remove all those line breaks. This -will allow LilyPond to place line breaks wherever it feels are -best. - -@item When entering a part for a transposing instrument into a -variable, it is recommended that the notes are wrapped in - -@example -\transpose c natural-pitch @{...@} -@end example -(where @code{natural-pitch} is the open pitch of the instrument) so -that the music in the variable is effectively in C. You can transpose -it back again when the variable is used, if required, but you might -not want to (e.g., when printing a score in concert pitch, -converting a trombone part from treble to bass clef, etc.) -Mistakes in transpositions are less likely if all the music in -variables is at a consistent pitch. - -Also, only ever transpose to/from C. That means that the only other -keys you will use are the natural pitches of the instruments - bes -for a B-flat trumpet, aes for an A-flat clarinet, etc. - -@end itemize - - -@node Large projects -@subsection Large projects - -When working on a large project, having a clear structure to your -lilypond input files becomes vital. - -@itemize - -@item @strong{Use an variable for each voice}, with a minimum of -structure inside the definition. The structure of the -@code{\score} section is the most likely thing to change; -the @code{violin} definition is extremely unlikely to change -in a new version of LilyPond. - -@example -violin = \relative c'' @{ -g4 c'8. e16 -@} -... -\score @{ - \new GrandStaff @{ - \new Staff @{ - \violin - @} - @} -@} -@end example - -@item @strong{Separate tweaks from music definitions}. This -point was made in previously, but for large -projects it is absolutely vital. We might need to change -the definition of @code{fthenp}, but then we only need -to do this once, and we can still avoid touching anything -inside @code{violin}. - -@example -fthenp = _\markup@{ - \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} -violin = \relative c'' @{ -g4\fthenp c'8. e16 -@} -@end example - -@end itemize - - -@node Saving typing with variables and functions -@subsection Saving typing with variables and functions - -@cindex variables -@cindex variables - -By this point, you've seen this kind of thing: - -@lilypond[quote,verbatim,ragged-right] -hornNotes = \relative c'' { c4 b dis c } -\score { - { - \hornNotes - } -} -@end lilypond - -You may even realize that this could be useful in minimalist music: - -@lilypond[quote,verbatim,ragged-right] -fragmentA = \relative c'' { a4 a8. b16 } -fragmentB = \relative c'' { a8. gis16 ees4 } -violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } -\score { - { - \violin - } -} -@end lilypond - -However, you can also use these variables (also known as -variables, macros, or (user-defined) command) for tweaks: - -@lilypond[quote,verbatim,ragged-right] -dolce = \markup{ \italic \bold dolce } -padText = { \once \override TextScript #'padding = #5.0 } -fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } -violin = \relative c'' { - \repeat volta 2 { - c4._\dolce b8 a8 g a b | - \padText - c4.^"hi there!" d8 e' f g d | - c,4.\fthenp b8 c4 c-. | - } -} -\score { - { - \violin - } -\layout{ragged-right=##t} -} -@end lilypond - -These variables are obviously useful for saving -typing. But they're worth considering even if you -only use them once -- they reduce complexity. Let's -look at the previous example without any -variables. It's a lot harder to read, especially -the last line. - -@example -violin = \relative c'' @{ - \repeat volta 2 @{ - c4._\markup@{ \italic \bold dolce @} b8 a8 g a b | - \once \override TextScript #'padding = #5.0 - c4.^"hi there!" d8 e' f g d | - c,4.\markup@{ \dynamic f \italic \small @{ 2nd @} - \hspace #0.1 \dynamic p @} b8 c4 c-. | - @} -@} -@end example - -@c TODO Replace the following with a better example -td -@c Skylining handles this correctly without padText - -So far we've seen static substitution -- when LilyPond -sees @code{\padText}, it replaces it with the stuff that -we've defined it to be (ie the stuff to the right of -@code{padtext=}). - -LilyPond can handle non-static substitution, too (you -can think of these as functions). - -@lilypond[quote,verbatim,ragged-right] -padText = -#(define-music-function (parser location padding) (number?) - #{ - \once \override TextScript #'padding = #$padding - #}) - -\relative c''' { - c4^"piu mosso" b a b - \padText #1.8 - c4^"piu mosso" d e f - \padText #2.6 - c4^"piu mosso" fis a g -} -@end lilypond - -Using variables is also a good way to reduce work if the -LilyPond input syntax changes (see @ref{Updating old input files}). If -you have a single definition (such as @code{\dolce}) for all your -input files (see @ref{Style sheets}), then if the syntax changes, you -only need to update your single @code{\dolce} definition, -instead of making changes throughout every @code{.ly} file. - - -@node Style sheets -@subsection Style sheets - -The output that LilyPond produces can be heavily modified; see -@ref{Tweaking output}, for details. But what if you have many -input files that you want to apply your tweaks to? Or what if you -simply want to separate your tweaks from the actual music? This -is quite easy to do. - -Let's look at an example. Don't worry if you don't understand -the parts with all the @code{#()}. This is explained in -@ref{Advanced tweaks with Scheme}. - -@lilypond[quote,verbatim,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -There are some problems with overlapping output; we'll fix those using -the techniques in @ref{Moving objects}. But let's also -do something about the @code{mpdolce} and @code{tempoMark} -definitions. They produce the output we desire, but we might want -to use them in another piece. We could simply copy-and-paste them -at the top of every file, but that's an annoyance. It also leaves -those definitions in our input files, and I personally find all -the @code{#()} somewhat ugly. Let's hide them in another file: - -@example -%%% save this to a file called "definitions.ly" -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) -@end example - -Now let's modify our music (let's save this file as @file{"music.ly"}). - -@c We have to do this awkward example/lilypond-non-verbatim -@c because we can't do the \include stuff in the manual. - -@example -\include "definitions.ly" - -\relative c'' @{ - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line(#:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -That looks better, but let's make a few changes. The glissando is hard -to see, so let's make it thicker and closer to the note heads. Let's -put the metronome marking above the clef, instead of over the first -note. And finally, my composition professor hates @q{C} time signatures, -so we'd better make that @q{4/4} instead. - -Don't change @file{music.ly}, though. Replace our @file{definitions.ly} -with this: - -@example -%%% definitions.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - \override TimeSignature #'style = #'numbered - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Staff - \override TimeSignature #'style = #'numbered - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -That looks nicer! But now suppose that I want to publish this -piece. My composition professor doesn't like @q{C} time -signatures, but I'm somewhat fond of them. Let's copy the -current @file{definitions.ly} to @file{web-publish.ly} and -modify that. Since this music is aimed at producing a pdf which -will be displayed on the screen, we'll also increase the -overall size of the output. - -@example -%%% definitions.ly -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#@{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup @{ \bold $markp @} -#@}) - -#(set-global-staff-size 23) -\layout@{ - \context @{ \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - @} - \context @{ \Staff - @} - \context @{ \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - @} -@} -@end example - -@lilypond[quote,ragged-right] -mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) - #:line( #:dynamic "mp" #:text #:italic "dolce" ))) -tempoMark = #(define-music-function (parser location markp) (string?) -#{ - \once \override Score . RehearsalMark #'self-alignment-X = #left - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $markp } -#}) - -#(set-global-staff-size 23) -\layout{ - \context { \Score - \override MetronomeMark #'extra-offset = #'(-9 . 0) - \override MetronomeMark #'padding = #'3 - } - \context { \Voice - \override Glissando #'thickness = #3 - \override Glissando #'gap = #0.1 - } -} - -\relative c'' { - \tempo 4=50 - a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 - \once \override Score.RehearsalMark #'padding = #2.0 - \tempoMark "Poco piu mosso" - cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 -} -@end lilypond - -Now in our music, I simply replace -@code{\include "definitions.ly"} with -@code{\include "web-publish.ly"}. Of course, we could make this -even more convenient. We could make a @file{definitions.ly} file which -contains only the definitions of @code{mpdolce} and @code{tempoMark}, a -@file{web-publish.ly} file which contains only the @code{\layout} -section listed above, and a @file{university.ly} file which -contains only the tweaks to produce the output that my professor -prefers. The top of @file{music.ly} would then look like this: - -@example -\include "definitions.ly" - -%%% Only uncomment one of these two lines! -\include "web-publish.ly" -%\include "university.ly" -@end example - -This approach can be useful even if you are only producing -one set of parts. I use half a dozen different -@q{style sheet} files for my projects. I begin every music -file with @code{\include "../global.ly"}, which contains - -@example -%%% global.ly -\version @w{"@version{}"} -#(ly:set-option 'point-and-click #f) -\include "../init/init-defs.ly" -\include "../init/init-layout.ly" -\include "../init/init-headers.ly" -\include "../init/init-paper.ly" -@end example - - -@node When things don't work -@section When things don't work - -@menu -* Updating old input files:: -* Troubleshooting (taking it all apart):: -* Minimal examples:: -@end menu - -@node Updating old input files -@subsection Updating old input files - -The LilyPond input syntax occasionally changes. As LilyPond itself -improves, the syntax (input language) is modified accordingly. Sometimes -these changes are made to make the input easier to read and write or -sometimes the changes are made to accommodate new features of LilyPond. - -LilyPond comes with a file that makes this updating easier: -@code{convert-ly}. For details about how to run this program, see -@rprogram{Updating files with convert-ly}. - -Unfortunately, @code{convert-ly} cannot handle all input changes. It -takes care of simple search-and-replace changes (such as @code{raggedright} -becoming @code{ragged-right}), but some changes are too -complicated. The syntax changes that @code{convert-ly} cannot handle -are listed in @rprogram{Updating files with convert-ly}. - -For example, in LilyPond 2.4 and earlier, accents and non-English -letters were entered using LaTeX -- for example, -@code{No\"el} (this would print the French word for -@q{Christmas}). In LilyPond 2.6 and above, the special -@code{ë} must be entered directly into the LilyPond file as an -UTF-8 character. @code{convert-ly} cannot change all the LaTeX -special characters into UTF-8 characters; you must manually update -your old LilyPond input files. - - -@node Troubleshooting (taking it all apart) -@subsection Troubleshooting (taking it all apart) - -Sooner or later, you will write a file that LilyPond cannot -compile. The messages that LilyPond gives may help -you find the error, but in many cases you need to do some -investigation to determine the source of the problem. - -The most powerful tools for this purpose are the -single line comment (indicated by @code{%}) and the block -comment (indicated by @code{%@{ ... %@}}). If you don't -know where a problem is, start commenting out huge portions -of your input file. After you comment out a section, try -compiling the file again. If it works, then the problem -must exist in the portion you just commented. If it doesn't -work, then keep on commenting out material until you have -something that works. - -In an extreme case, you might end up with only - -@example -\score @{ - << - % \melody - % \harmony - % \bass - >> - \layout@{@} -@} -@end example - -@noindent -(in other words, a file without any music) - -If that happens, don't give up. Uncomment a bit -- say, -the bass part -- and see if it works. If it doesn't work, -then comment out all of the bass music (but leave -@code{\bass} in the @code{\score} uncommented. - -@example -bass = \relative c' @{ -%@{ - c4 c c c - d d d d -%@} -@} -@end example - -Now start slowly uncommenting more and more of the -@code{bass} part until you find the problem line. - -Another very useful debugging technique is constructing -@ref{Minimal examples}. - - -@node Minimal examples -@subsection Minimal examples - -A minimal example is an example which is as small as possible. These -examples are much easier to understand than long examples. Minimal -examples are used for - -@itemize -@item Bug reports -@item Sending a help request to mailing lists -@item Adding an example to the @uref{http://lsr.dsi.unimi.it/, -LilyPond Snippet Repository} -@end itemize - -To construct an example which is as small as possible, the rule is -quite simple: remove anything which is not necessary. When trying to -remove unnecessary parts of a file, it is a very good idea to comment -out lines instead of deleting them. That way, if you discover that you -actually @emph{do} need some lines, you can uncomment them, instead of -typing them in from scratch. - -There are two exceptions to the @qq{as small as possible} rule: - -@itemize -@item Include the @code{\version} number. -@item If possible, use @code{\paper@{ ragged-right=##t @}} at the -top of your example. -@end itemize - -The whole point of a minimal example is to make it easy to read: - -@itemize -@item Avoid using complicated notes, keys, or time signatures, unless you -wish to demonstrate something is about the behavior of those items. -@item Do not use @code{\override} commands unless that is the point of the -example. -@end itemize - - - -@node Scores and parts -@section Scores and parts - -TODO: this is really old stuff from the really old tutorial. -Rewrite, fix, etc. Or maybe delete entirely. -gp -Include section on tags -td -and then move to section 5. Working ... -td - -In orchestral music, all notes are printed twice. Once in a part for -the musicians, and once in a full score for the conductor. Variables can -be used to avoid double work. The music is entered once, and stored in -a variable. The contents of that variable is then used to generate -both the part and the full score. - -It is convenient to define the notes in a special file. For example, -suppose that the file @file{horn-music.ly} contains the following part -of a horn/@/bassoon duo - -@example -hornNotes = \relative c @{ - \time 2/4 - r4 f8 a cis4 f e d -@} -@end example - -@noindent -Then, an individual part is made by putting the following in a file - -@example -\include "horn-music.ly" -\header @{ - instrument = "Horn in F" -@} - -@{ - \transpose f c' \hornNotes -@} -@end example - -The line - -@example -\include "horn-music.ly" -@end example - -@noindent -substitutes the contents of @file{horn-music.ly} at this position in -the file, so @code{hornNotes} is defined afterwards. The command -@code{\transpose f@tie{}c'} indicates that the argument, being -@code{\hornNotes}, should be transposed by a fifth upwards. Sounding -@code{f} is denoted by notated @code{c'}, which corresponds with the -tuning of a normal French Horn in@tie{}F. The transposition can be seen -in the following output - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - r4 f8 a cis4 f e d -} -@end lilypond - -In ensemble pieces, one of the voices often does not play for many -measures. This is denoted by a special rest, the multi-measure -rest. It is entered with a capital @code{R} followed by a duration -(@code{1}@tie{}for a whole note, @code{2}@tie{}for a half note, -etc.). By multiplying the -duration, longer rests can be constructed. For example, this rest -takes 3@tie{}measures in 2/4 time - -@example -R2*3 -@end example - -When printing the part, multi-rests -must be condensed. This is done by setting a run-time variable - -@example -\set Score.skipBars = ##t -@end example - -@noindent -This command sets the property @code{skipBars} in the -@code{Score} context to true (@code{##t}). Prepending the rest and -this option to the music above, leads to the following result - -@lilypond[quote,ragged-right] -\transpose f c' \relative c { - \time 2/4 - \set Score.skipBars = ##t - R2*3 - r4 f8 a cis4 f e d -} -@end lilypond - - -The score is made by combining all of the music together. Assuming -that the other voice is in @code{bassoonNotes} in the file -@file{bassoon-music.ly}, a score is made with - -@example -\include "bassoon-music.ly" -\include "horn-music.ly" - -<< - \new Staff \hornNotes - \new Staff \bassoonNotes ->> -@end example - -@noindent -leading to - -@lilypond[quote,ragged-right] -\relative c << - \new Staff { - \time 2/4 R2*3 - r4 f8 a cis4 f e d - } - \new Staff { - \clef bass - r4 d,8 f | gis4 c | b bes | - a8 e f4 | g d | gis f - } ->> -@end lilypond - - diff --git a/Documentation/user/world.itely b/Documentation/user/world.itely deleted file mode 100644 index 8550f4b291..0000000000 --- a/Documentation/user/world.itely +++ /dev/null @@ -1,384 +0,0 @@ -@c -*- coding: utf-8; mode: texinfo; -*- -@ignore - Translation of GIT committish: FILL-IN-HEAD-COMMITTISH - - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. -@end ignore - -@c \version "2.12.0" - -@node World music -@section World music - -The purpose of this section is to highlight musical notation issues -that are relevant to traditions outside the Western tradition. - -@menu -* Arabic music:: -@end menu - -@node Arabic music -@subsection Arabic music - -This section highlights issues that are relevant to notating Arabic -music. - -@menu -* References for Arabic music:: -* Arabic note names :: -* Arabic key signatures:: -* Arabic time signatures:: -* Arabic music example:: -* Further reading:: -@end menu - - -@node References for Arabic music -@unnumberedsubsubsec References for Arabic music - -@cindex Arabic music -@cindex medium intervals -@cindex maqam -@cindex maqams - -Arabic music so far has been mainly an oral tradition. When music -is transcribed, it is usually in a sketch format, on which -performers are expected to improvise significantly. Increasingly, -Western notation, with a few variations, is adopted in order to -communicate and preserve Arabic music. - -Some elements of Western musical notation such as the -transcription of chords or independent parts, are not required to -typeset the more traditional Arabic pieces. There are however -some different issues, such as the need to indicate medium -intervals that are somewhere between a semi-tone and a tone, in -addition to the minor and major intervals that are used in Western -music. There is also the need to group and indicate a large -number of different maqams (modes) that are part of Arabic music. - -In general, Arabic music notation does not attempt to precisely -indicate microtonal elements that are present in musical practice. - -Several issues that are relevant to Arabic music are covered -elsewhere: - -@itemize -@item Note names and accidentals (including quarter tones) can be -tailored as discussed in @ref{Note names in other languages}. - -@item Additional key signatures can also be tailored as described -in @ref{Key signature}. - -@item Complex time signatures may require that notes be grouped -manually as described in @ref{Manual beams}. - -@item @notation{Takasim} which are rhythmically free -improvisations may be written down omitting bar lines as -described in @ref{Unmetered music}. - -@end itemize - - -@seealso -Notation Reference: -@ref{Note names in other languages}, -@ref{Key signature}, -@ref{Manual beams}. - -Snippets: -@rlsr{World music}. - - -@node Arabic note names -@unnumberedsubsubsec Arabic note names - - -@cindex Arabic note names - -The more traditional Arabic note names can be quite long and are -not suitable for the purpose of music writing, so they are not -used. English note names are not very familiar in Arabic music -education, so Italian or Solfege note names (@code{do, re, mi, fa, -sol, la, si}) are used instead. Modifiers (accidentals) can also -be used, as discussed in @ref{Note names in other languages}. - -For example, this is how the Arabic @notation{rast} scale can be -notated: - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - do re misb fa sol la sisb do sisb la sol fa misb re do -} -@end lilypond - - -@cindex Arabic semi-flat symbol -@cindex Semi-flat symbol appearance - -The symbol for semi-flat does not match the symbol which is used -in Arabic notation. The @code{\dwn} symbol defined in -@code{arabic.ly} may be used preceding a flat symbol as a work -around if it is important to use the specific Arabic semi-flat -symbol. The appearance of the semi-flat symbol in the key -signature cannot be altered by using this method. - - -@lilypond[quote,verbatim] -\include "arabic.ly" -\relative do' { - \set Staff.extraNatural = ##f - dod dob dosd \dwn dob dobsb dodsd do do -} -@end lilypond - - -@seealso -Notation Reference: -@ref{Note names in other languages}. - -Snippets: -@rlsr{World music}. - - -@node Arabic key signatures -@unnumberedsubsubsec Arabic key signatures - -@cindex Arabic key signatures - -In addition to the minor and major key signatures, the following -key signatures are defined in @code{arabic.ly}: @notation{bayati}, -@notation{rast}, @notation{sikah}, @notation{iraq}, and -@notation{kurd}. These key signatures define a small number of -maqam groups rather than the large number of maqams that are in -common use. - -In general, a maqam uses the key signature of its group, or a -neighbouring group, and varying accidentals are marked throughout -the music. - -For example to indicate the key signature of a maqam muhayer piece: - -@example -\key re \bayati -@end example - -Here @var{re} is the default pitch of the muhayer maqam, and -@var{bayati} is the name of the base maqam in the group. - -While the key signature indicates the group, it is common for the -title to indicate the more specific maqam, so in this example, the -name of maqam muhayer should appear in the title. - -Other maqams in the same bayati group, as shown in the table below: -(bayati, hussaini, saba, and ushaq) can be indicated in the same -way. These are all variations of the base and most common maqam -in the group, which is bayati. They usually differ from the base -maqam in their upper tetrachords, or certain flow details that -don't change their fundamental nature, as siblings. - -The other maqam in the same group (Nawa) is related to bayati by -modulation which is indicated in the table in parenthesis for -those maqams that are modulations of their base maqam. Arabic -maqams admit of only limited modulations, due to the nature of -Arabic musical instruments. Nawa can be indicated as follows: - -@example -\key sol \bayati -@end example - -In Arabic music, the same term such as bayati that is used to -indicate a maqam group, is also a maqam which is usually the most -important in the group, and can also be thought of as a base -maqam. - -Here is one suggested grouping that maps the more common maqams to -key signatures: - -@multitable @columnfractions 0.1 0.1 0.1 0.6 -@headitem maqam group - @tab key - @tab finalis - @tab Other maqmas in group (finalis) -@item ajam - @tab major - @tab sib - @tab jaharka (fa) -@item bayati - @tab bayati - @tab re - @tab hussaini, muhayer, saba, ushaq, nawa (sol) -@item hijaz - @tab kurd - @tab re - @tab shahnaz, shad arban (sol), hijazkar (do) -@item iraq - @tab iraq - @tab sisb - @tab - -@item kurd - @tab kurd - @tab re - @tab hijazkar kurd (do) -@item nahawand - @tab minor - @tab do - @tab busalik (re), farah faza (sol) -@item nakriz - @tab minor - @tab do - @tab nawa athar, hisar (re) -@item rast - @tab rast - @tab do - @tab mahur, yakah (sol) -@item sikah - @tab sikah - @tab misb - @tab huzam -@end multitable - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{non-traditional-key-signatures.ly} - - -@seealso -Notation Reference: -@ref{Key signature}. - -Learning Manual: -@rlearning{Accidentals and key signatures}. - -Internals Reference: -@rinternals{KeySignature}. - -Snippets: -@rlsr{World music}, -@rlsr{Pitches}. - - -@node Arabic time signatures -@unnumberedsubsubsec Arabic time signatures - -@cindex Arabic time signatures -@cindex Semai form -@cindex taqasim - -Some Arabic and Turkish music classical forms such as -@notation{Semai} use unusual time signatures such as 10/8. This -may lead to an automatic grouping of notes that is quite different -from existing typeset music, where notes may not be grouped on the -beat, but in a manner that is difficult to match by adjusting -automatic beaming. You can override this by switching off -automatic beaming and beaming the notes manually. Where matching -existing typeset music is not an issue, you may still want to -adjust the beaming behaviour and/or use compound time signatures. - -@snippets - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{compound-time-signatures.ly} - -@lilypondfile[verbatim,lilyquote,texidoc,doctitle] -{arabic-improvisation.ly} - - -@seealso -Notation Reference: -@ref{Manual beams}, -@ref{Automatic beams}, -@ref{Unmetered music}, -@ref{Automatic accidentals}, -@ref{Setting automatic beam behavior}, -@ref{Time signature}. - -Snippets: -@rlsr{World music}. - - -@node Arabic music example -@unnumberedsubsubsec Arabic music example - -@cindex Arabic music example -@cindex Arabic music template -@cindex Template Arabic music - -Here is a template that also uses the start of a Turkish Semai -that is familiar in Arabic music education in order to illustrate -some of the peculiarities of Arabic music notation, such as medium -intervals and unusual modes that are discussed in this section. - -@lilypond[quote,verbatim] -\include "arabic.ly" -\score { - \relative re' { - \set Staff.extraNatural = ##f - \set Staff.autoBeaming = ##f - \key re \bayati - \time 10/8 - - re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8 - re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb - fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb - do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8 - } - \header { - title = "Semai Muhayer" - composer = "Jamil Bek" - } -} -@end lilypond - - -@seealso -Snippets: -@rlsr{World music} - - -@node Further reading -@unnumberedsubsubsec Further reading - -@enumerate - -@item -The music of the Arabs by Habib Hassan Touma [Amadeus Press, 1996], -contains a discussion of maqams and their method of groupings. - -There are also various web sites that explain maqams and some -provide audio examples such as : - -@itemize @bullet -@item -@uref{http://www.maqamworld.com/} -@item -@uref{http://www.turath.org/} -@end itemize - -There are some variations in the details of how maqams are grouped, -despite agreement on the criteria of grouping maqams that are -related through common lower tetra chords, or through modulation. - -@item -There is not a complete consistency, sometimes even in the same -text on how key signatures for particular maqams should be -specified. It is common, however, to use a key signature per -group, rather than a different key signature for each different -maqam. - -Oud methods by the following authors, contain examples of -mainly Turkish and Arabic compositions. - -@itemize @bullet -@item -Charbel Rouhana -@item -George Farah -@item -Ibrahim Ali Darwish Al-masri -@end itemize -@end enumerate - - diff --git a/Documentation/web.texi b/Documentation/web.texi new file mode 100644 index 0000000000..90d9f79251 --- /dev/null +++ b/Documentation/web.texi @@ -0,0 +1,313 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@setfilename web.info +@settitle LilyPond -- Music notation for everyone +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 by the authors. +@c @end macro + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + +@copying +Copyright @copyright{} 2009--2011 by the authors. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +This file documents the LilyPond website. + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@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 +@node Top +@top LilyPond... music notation for everyone +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle The music typesetter +@titlefont{General Information} +@author The LilyPond development team + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +For LilyPond version @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... music notation for everyone +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading What is LilyPond? + +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. LilyPond is free +software and part of the @uref{http://gnu.org,GNU Project}. + + +@divClass{align-right} +Read more in our @ref{Introduction}! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{Old news}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading Quick links + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading Stable + +@ref{Download, Download @versionStable} + +@ref{Manuals, Manuals @versionStable} + +@subsubheading Unstable + +@ref{Development, Download @versionDevel} + +@ref{Development, Manuals @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* Introduction:: Start here to creating sheet music. +* Download:: Get LilyPond. +* Manuals:: Read The Fine Manuals (RTFM). +* Community:: Contact other users. +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@end ignore + +@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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Read it + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (split HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (big HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + the manual is split between many HTML pages. + @*@ @ @emph{(small download for each page)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + read this manual as one huge HTML page. + @*@ @ @emph{(large single download, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + download as a PDF file. + @*@ @ @emph{(large single download, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +If you are aware of any other \topic\ which could be listed here, +please let us know by following the instructions on +@ref{Bug reports}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/web/GNUmakefile b/Documentation/web/GNUmakefile new file mode 100644 index 0000000000..0435d91702 --- /dev/null +++ b/Documentation/web/GNUmakefile @@ -0,0 +1,11 @@ +depth = ../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +SUBDIRS = ly-examples server +include $(depth)/make/stepmake.make + +#OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES)) +BIB_FILES = $(call src-wildcard,*.bib) +EXTRA_DIST_FILES += $(BIB_FILES) $(call src-wildcard,*.bst) + diff --git a/Documentation/web/community.itexi b/Documentation/web/community.itexi new file mode 100644 index 0000000000..d6918d1fbc --- /dev/null +++ b/Documentation/web/community.itexi @@ -0,0 +1,848 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@include included/authors.itexi +@include included/helpus.itexi + +@node Community +@unnumbered Community + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Interacting with the community + +@itemize + +@item +@ref{Contact}: get help, discuss, and keep in touch! + +@item +@ref{Tiny examples}: these are @emph{highly} recommended when +discussing LilyPond. + +@item +@ref{Bug reports}: something went wrong. + +@end itemize +@divEnd + +@divClass{column-left-bottom} +@subheading Making LilyPond better + +@itemize + +@item +@ref{Help us}: your assistance is requested. + +@item +@ref{Development}: for contributors and testers. + +@item +@ref{Authors}: the people who made LilyPond what it is today. + +@end itemize +@divEnd + +@divClass{column-right-bottom} +@subheading Miscellaneous + +@itemize + +@item +@ref{Publications}: what we wrote, and have had written about us. + +@item +@ref{Old news}: an archive. + +@end itemize +@divEnd + +@divEnd + +@divClass{hide} +@menu +* Contact:: +* Tiny examples:: +* Bug reports:: +* Help us:: +* Development:: +* Authors:: +* Publications:: +* Old news:: +@end menu +@divEnd + + +@node Contact +@unnumberedsec Contact + + +@divClass{column-left-bottom} +@subheading User Discussions and Help + +@subsubheading User mailing list: @code{lilypond-user@@gnu.org} + +This mailing list is the main place for users to discuss and help +each other. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user, +lilypond-user subscribe and info} + +@uref{http://lists.gnu.org/archive/html/lilypond-user/, +user archive1} +@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/, +archive2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general, +archive3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.general, +send to lilypond-user with gmane} +@end quotation + +@warning{When asking questions, please use @ref{Tiny examples}!} + +@subsubheading LilyPond Snippet Repository + +The LilyPond Snippet Repository is a large collection of +user-submitted examples, which can freely be copied and used +in your own works. See what other people have written, +and add your own! + +@example +@uref{http://lsr.dsi.unimi.it} +@end example + +Particularly instructive examples from LSR are included in our +official documentation, in @ref{Snippets}. + + +@subsubheading IRC + +Some level of support is provided on our IRC channel, + +@example +@uref{irc://irc.freenode.net/lilypond, #lilypond@@irc.freenode.net} +@end example + +This channel has no public archive, so any question that may +be useful for others would better be posted to one of the mailing lists. + +@html +

    irc name: + + + + + + + +@end html + +@subsubheading Other languages + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-es, +Spanish mailing list} + +@uref{http://www.lilypondforum.de/, +German forum} + +@uref{http://groups.google.com/group/lilypond-brasil, +Portuguese group} + +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr, +French mailing list} + +@uref{http://www.lilypondforum.nl/, +Dutch forum} +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Stay Informed + +@subsubheading LilyPond Report + +The easiest way to keep touch is by reading our community +newsletter, the LilyPond Report: + +@example +@uref{http://news.lilynet.net} +@end example + +@subsubheading Releases mailing list: @code{info-lilypond@@gnu.org} + +This mailing list is a low-volume, read-only list which receives +notifications of new releases. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/info-lilypond, +info-lilypond subscribe and info} + +@uref{http://lists.gnu.org/archive/html/info-lilypond/, +info archive1} +@uref{http://www.mail-archive.com/info-lilypond@@gnu.org/, +archive2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.announce, +archive3} + +@c don't include gmane posting here. -gp +@end quotation + + +@divEnd + + +@divClass{column-right-bottom} +@subheading Developer Discussion + +@subsubheading Developer mailing list: @code{lilypond-devel@@gnu.org} + +Most developer discussion takes place on this list. Patches +should be sent here. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel, +lilypond-devel subscribe and info} + +@uref{http://lists.gnu.org/archive/html/lilypond-devel/, +devel archive1} +@uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/, +archive2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.devel, +archive3} + +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.devel, +send to lilypond-devel with gmane} +@end quotation + + +@subsubheading Bug mailing list: @code{bug-lilypond@@gnu.org} + +Bug-specific discussion takes place here. + +@quotation +@uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond, +bug-lilypond subscribe and info} + +@uref{http://lists.gnu.org/archive/html/bug-lilypond/, +bug archive1} +@uref{http://www.mail-archive.com/bug-lilypond@@gnu.org/, +archive2} +@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.bugs, +archive3} + +@c don't include gmane posting here. -gp +@end quotation + +@warning{Before sending a message to the bug list, please read our +guidelines for @ref{Bug reports}.} + +@divEnd + + + +@node Tiny examples +@unnumberedsec Tiny examples + +@divClass{column-center-top} +@subheading What are @qq{Tiny examples}? + +A tiny example is an example from which nothing can be removed. +@divEnd + +@divClass{column-left-bottom} +@subheading Why create them? + +@divClass{keep-bullets} +@itemize + +@item +The simpler the example is, the quicker potential helpers can +understand it and help you. + +@item +A simple 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. + +@item +Creating a tiny example forces 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 +insufficient understanding of LilyPond, not an actual bug! + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-bottom} +@subheading How do I create them? + +@divClass{keep-bullets} +@itemize + +@item +Include the \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. + +@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! + +@item +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. + +@end itemize +@divEnd + +@divEnd + + + + +@node Bug reports +@unnumberedsec Bug reports + +@divClass{column-center-top} +@subheading Step 1: Known bugs + +If you have input that results in a crash or an erroneous output, +then that is a bug. There is a list of current bugs on our google +bug tracker, + +@example +@uref{http://code.google.com/p/lilypond/issues/list} +@end example + +@warning{Please @strong{DO NOT} add bug reports directly to the +bug tracker. Once an issue has been added to the tracker, feel +free to add more information to that report.} + +@divEnd + + +@divClass{column-left-bottom} +@subheading Step 2: Creating a bug report + +If you have discovered a bug which is not listed, please help us +by creating a bug report. + +@warning{We only accept bug reports in the form of +@ref{Tiny examples}. We have very limited resources to deal with +bug reports, so any non-minimal example will be rejected. Almost +every bug can be demonstrated in four notes or less!} + +Here is an example of a good bug report: + +@example +% Accidentals should be printed for only +% the first note in a tie, but this version +% prints flats on both notes. +\version "2.10.1" + +\relative c'' @{ + bes1 ~ + bes1 +@} +@end example + +@divEnd + +@divClass{column-right-bottom} +@subheading Step 3: Sending a bug report + +Once you have verified that the issue is not already known and +created a bug report, please send it to us! + +@divClass{keep-bullets} +@itemize + +@item +If you are subscribed to the @uref{mailto:bug-lilypond@@gnu.org, +bug-lilypond@@gnu.org} mailing list, send an email like normal. + +@item +If you are not subscribed, you can still post a bug report with +the +@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs, +gmane lilypond.bugs web interface}. + +However, there is a strict @qq{no top-posting} check on the gmane +interface, which is often incorrectly triggered by lilypond files. +To avoid this, please add: + +@example +> I'm not top posting. +@end example + +@noindent +(you @emph{must} include the @code{>} ) to the top of your bug +report. + +@end itemize +@divEnd +@divEnd + +@divClass{column-center-bottom} +@subheading Step 4: Wait for a response + +Once your bug has been sent to the list, our Bug Squad will +examine the report. Please allow up to 24 hours, as we have a +limited number of volunteers for this task. They may ask you for +more information, or may add the report to the tracker and let you +know what the issue number is. + +You may mark the bug so that you automatically receive emails when +any activity on the bug occurs. This requires you have a google +account. +@divEnd + +@divClass{column-center-bottom} +@subheading Optional help: show the desired behavior + +Once an issue has been added to the tracker, it can be very +helpful if we can see the desired output. Feel free to add input +code and/or images (possibly created with other tools) which +demonstrate what you think it should look like! + +@divEnd + + + +@node Help us +@unnumberedsec Help us + +@divClass{column-center-top} +@helpusNeed + +@divEnd + +@divClass{column-left-top} +@divClass{keep-bullets} +@helpusTasks + +@divEnd +@divEnd + +@divClass{column-right-top} +@helpusProjects + +@divEnd + + +@node Development +@unnumberedsec Development + +@divClass{heading-center} +@ifclear web_version + @heading Development for LilyPond @version +@end ifclear +@ifset web_version + @heading Development for LilyPond @versionDevel +@end ifset + + +@c we normally don't allow named references, but in this case +@c it's good to emphasize the "stable" part. -gp +@warning{These are @emph{unstable development} versions. If you +have the slightest doubt about how to use or install LilyPond, we +urge you to use the @ref{Download, stable Download}, and read the +@ref{Manuals, stable Manuals}.} + +@divEnd + +@divClass{column-center-top} +@subheading Release numbers + +There are two sets of releases for LilyPond: stable releases, and +unstable development releases. Stable versions have an +even-numbered @q{minor} version number (e.g., 2.8, 2.10, 2.12). +Development versions have an odd-numbered @q{minor} version number +(e.g., 2.7, 2.9, 2.11). + +@divEnd + + +@divClass{column-left-top} +@subheading Download + +Instructions for git and compiling are in the Contributor's Guide. + +@quotation +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, lilypond git repository} +@end quotation + +Documentation writers and testers will generally want to download +the latest binary: + +@quotation + +@downloadDevelLinuxNormal + +@downloadDevelLinuxBig + +@downloadDevelLinuxPPC + +@downloadDevelFreeBSDNormal + +@downloadDevelFreeBSDBig + +@downloadDevelDarwinNormal + +@downloadDevelDarwinPPC + +@downloadDevelWindows + +@downloadDevelSource + +@end quotation + +@divEnd + + +@divClass{column-right-top} +@subheading Contributor's Guide + +LilyPond development is a fairly complicated matter. In order to +help new contributors, and to keep the whole system (mostly) +stable, we have written a manual for development tasks. + +@docLinksBare{Contributor's Guide, contributor, + @rcontribnamed{Top,Contributor's Guide}, + @manualDevelContributorSplit, + @manualDevelContributorBig, 500 kB, + @manualDevelContributorPdf, 2.8 MB} + +@divEnd + + +@divClass{column-center-top} +@subheading Regression tests + +@divClass{keep-bullets} + +@ifclear web_version + +@itemize +@item +@uref{../../input/regression/collated-files.html, Regression tests}: +This release's regtests. +(@uref{../../input/regression/collated-files.pdf, pdf version}) + +@item +@uref{../../input/regression/musicxml/collated-files.html, MusicXML tests}: +This release's musicXML tests. +(@uref{../../input/regression/musicxml/collated-files.pdf, pdf version}) + +@item +@uref{../../input/regression/abc2ly/collated-files.html, abc2ly tests}: +This release's abc2ly tests. +(@uref{../../input/regression/abc2ly/collated-files.pdf, pdf version}) + +@item +@uref{../../input/regression/lilypond-book/collated-files.html, lilypond-book tests}: +This release's lilypond-book tests. +(@uref{../../input/regression/lilypond-book/collated-files.pdf, pdf version}) +@end itemize + +@end ifclear + +@ifset web_version +@subsubheading Development version + +@itemize +@item @regtestDevel (@regtestDevelPdf{}) + +@item @regtestDevelXml (@regtestDevelXmlPdf{}) + +@item @regtestDevelAbc (@regtestDevelAbcPdf{}) + +@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{}) +@end itemize + +@subsubheading Stable version + +@itemize +@item @regtestStable (@regtestStablePdf{}) + +@item @regtestStableXml (@regtestStableXmlPdf{}) + +@item @regtestStableAbc (@regtestStableAbcPdf{}) + +@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{}) +@end itemize +@end ifset + + +@subsubheading All versions + +@itemize +@item @uref{http://lilypond.org/test, Comparisons between regression tests} + +@item @uref{http://lilypond.org/download/binaries/test-output/, +Archive of all regression tests} + +@end itemize + +@divEnd +@divEnd + + + +@divClass{column-center-bottom} +@subheading Manuals + +@ifclear web_version +@warning{These manuals are for LilyPond @version{}; the latest +manuals can be found at @url{http://lilypond.org}} +@end ifclear + +@divClass{normal-table} +@multitable @columnfractions .3 .3 .3 +@headitem Introduction +@item +@docLinkSplit{Learning,learning,@manualDevelLearningSplit} +@tab +@docLinkBig{Learning,learning,@manualDevelLearningBig} +@tab +@docLinkPdf{Learning,learning,@manualDevelLearningPdf} + +@item +@docLinkSplit{Glossary,music-glossary,@manualDevelGlossarySplit} +@tab +@docLinkBig{Glossary,music-glossary,@manualDevelGlossaryBig} +@tab +@docLinkPdf{Glossary,music-glossary,@manualDevelGlossaryPdf} + +@item +@docLinkSplit{Essay,essay,@manualDevelEssaySplit} +@tab +@docLinkBig{Essay,essay,@manualDevelEssayBig} +@tab +@docLinkPdf{Essay,essay,@manualDevelEssayPdf} + +@headitem Regular + +@item +@docLinkSplit{Notation,notation,@manualDevelNotationSplit} +@tab +@docLinkBig{Notation,notation,@manualDevelNotationBig} +@tab +@docLinkPdf{Notation,notation,@manualDevelNotationPdf} + +@item +@docLinkSplit{Usage,usage,@manualDevelUsageSplit} +@tab +@docLinkBig{Usage,usage,@manualDevelUsageBig} +@tab +@docLinkPdf{Usage,usage,@manualDevelUsagePdf} + +@item +@docLinkSplit{Snippets,snippets,@manualDevelSnippetsSplit} +@tab +@docLinkBig{Snippets,snippets,@manualDevelSnippetsBig} +@tab +@docLinkPdf{Snippets,snippets,@manualDevelSnippetsPdf} + +@headitem Infrequent + +@item +@docLinkSplit{Web,web,@manualDevelWebSplit} +@tab +@docLinkBig{Web,web,@manualDevelWebBig} +@tab +@docLinkPdf{Web,web,@manualDevelWebPdf} + +@item +@docLinkSplit{Changes,changes,@manualDevelChangesSplit} +@tab +@docLinkBig{Changes,changes,@manualDevelChangesBig} +@tab +@docLinkPdf{Changes,changes,@manualDevelChangesPdf} + +@item +@docLinkSplit{Extending,extending,@manualDevelExtendingSplit} +@tab +@docLinkBig{Extending,extending,@manualDevelExtendingBig} +@tab +@docLinkPdf{Extending,extending,@manualDevelExtendingPdf} + +@item +@docLinkSplit{Internals,internals,@manualDevelInternalsSplit} +@tab +@docLinkBig{Internals,internals,@manualDevelInternalsBig} +@tab +@docLinkPdf{Internals,internals,@manualDevelInternalsPdf} + +@ifset web_version +@headitem Downloadable + +@item +@doctarballDevel +@end ifset + +@end multitable + +@divEnd +@divEnd + + + + +@node Authors +@unnumberedsec Authors + +@divClass{column-left-top} +@subheading Current Development Team + +@divClass{keep-bullets} +@developersCurrent +@divEnd +@divEnd + +@divClass{column-right-top} +@subheading Previous Development Team + +@divClass{keep-bullets} +@developersPrevious +@divEnd +@divEnd + + +@divClass{column-center-top} +@subheading Current Contributors + +@divClass{keep-bullets} +@subsubheading Programming + +@coreCurrent + +@subsubheading Font + +@fontCurrent + +@subsubheading Documentation + +@docCurrent + +@subsubheading Bug squad + +@bugsquadCurrent + +@subsubheading Support + +@supportCurrent + +@subsubheading Translation + +@translationsCurrent + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Previous Contributors + +@divClass{keep-bullets} +@subsubheading Programming + +@corePrevious + +@subsubheading Font + +@fontPrevious + +@subsubheading Documentation + +@docPrevious + +@c uncomment when we have any previous members -gp +@c @subsubheading Bug squad + +@c @bugsquadCurrent + +@subsubheading Support + +@supportPrevious + +@subsubheading Translation + +@translationsPrevious + +@divEnd +@divEnd + + + +@node Publications +@unnumberedsec Publications + +@divClass{column-center-top} +@subheading What we wrote about LilyPond + +@divClass{keep-bullets} + +@include we-wrote.itexi + +@divEnd +@divEnd + +@divClass{column-center-bottom} + +@subheading What people did with LilyPond + + +@divClass{keep-bullets} + +@include others-did.itexi + +@divEnd +@divEnd + +@contactUsAbout{academic papers} + + +@node Old news +@unnumberedsec Old news + +@include web/news-front.itexi + +@include web/news.itexi diff --git a/Documentation/web/download.itexi b/Documentation/web/download.itexi new file mode 100644 index 0000000000..8f0fbe021f --- /dev/null +++ b/Documentation/web/download.itexi @@ -0,0 +1,615 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond is a @strong{text-based} music engraver; it is +more similar to a programming language than a graphical score +editing program. Before downloading LilyPond, please read about +our @ref{Text input}.} +@end macro + +@node Download +@unnumbered Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want versionDevel here, since the online links + @c for @version won't be up yet! + @heading Downloads for LilyPond @versionDevel + +@warning{Links for the stable version of LilyPond can be found at +@uref{http://lilypond.org, lilypond.org}} +@end ifclear +@ifset web_version + @heading Downloads for LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading For users + +@itemize + +@item +@c ref is duplicated to avoid underlining ref as image. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux and FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading For developers + +@itemize + +@item +@ref{Source}: +for packagers + +@item +@ref{Old downloads}: +old versions + +@item @ref{Development}: +latest unstable version + +@end itemize +@divEnd + +@divEnd + +@divClass{column-center-bottom} + +@subheading Software License + +LilyPond is published under the +@ref{GPL, GNU General Public License}. +@divEnd + + +@divClass{color1} + +@subheading Sponsors + +Many thanks to @uref{http://www.vt.edu/, Virginia Tech} and +@uref{http://www.linuxaudio.org/, linuxaudio.org} for sponsoring +our bandwidth. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} +@menu +* Unix:: +* MacOS X:: +* Windows:: +* Source:: +* Old downloads:: +* GPL:: +@end menu +@divEnd + + +@node Unix +@unnumberedsec Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading Generic Packages or Distribution-Specific Packages? + +Many distributions include LilyPond in their normal package +system. These versions are easier to install and uninstall than +the generic packages, but they may be older. If you wish to use +our generic packages, please uninstall the official version from +your system using the normal package manager for your distribution. +See your distribution's documentation about how to use their +package manager. + +@divEnd + + +@divClass{column-left-top} +@subheading Generic Packages + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(if in doubt, use this) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + + +@subsubheading Install + +In the shell, type: + +@example +cd PATH-TO-DOWNLOAD-DIRECTORY +sh lilypond-@versionStable{}-OS-TYPE.sh +@end example + +@subsubheading Uninstall + +In the shell, type: + +@example +uninstall-lilypond +@end example + +@divEnd + + + +@divClass{column-right-top} +@subheading Compiling a file + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} +@subheading Distribution-specific Packages + +Please use your distribution's package manager to install or +upgrade to these versions. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.14.1} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.3} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.14.1} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.3} + +@item +@sourceimage{logo-suse,,,} +@uref{http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=lilypond, +openSUSE: LilyPond 2.12.3} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + + +@node MacOS X +@unnumberedsec MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Packages + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +For MacOS X 10.4 or higher, running on Intel CPUs (if in doubt, +use this). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +For MacOS X 10.4 or higher, running on G3 and G4 CPUs (old Apple +computers). + +@end itemize + +@subsubheading Install + +Double-click the downloaded file, then drag it to wherever you +want. + +@subsubheading Uninstall + +Delete the LilyPond.app folder. + +@divEnd + +@divClass{column-right-top} +@subheading Compiling a file + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} +@subheading Running on the command-line + +@warning{If you are happy with the GUI, then please ignore these +instructions.} + +@subsubheading MacOS X on the command line + +The most convenient way to run lilypond scripts is by setting up +@qq{helper} scripts of your own. + +@enumerate + +@item +Create a directory to store these scripts, + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Create a file called @command{lilypond} which contains + +@divClass{h-scroll-auto} +@example +exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example +@divEnd + +@warning{@var{DIR} will generally be @code{/Applications/}} + + +@item +Create similar files @command{lilypond-book}, +@command{convert-ly}, and any other scripts you wish to use, by +replacing the @command{bin/lilypond} with @command{bin/convert-ly} +(or other program name). + + +@item +Make the file executable, + +@example +chmod u+x lilypond +@end example + + +@item +Now, add this directory to your path. Modify (or create) a file +called @code{.profile} in your home directory such that it +contains + +@example +export PATH=$PATH:~/bin +@end example + +This file should end with a blank line. + +@end enumerate + + +@subsubheading Invoking individual scripts + +The scripts --- such as @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly}, and even @command{lilypond} itself --- are included +inside the @code{.app} file for MacOS@tie{}X. + +Scripts can also be run from the command line by invoking them +directly: + +@divClass{h-scroll-auto} +@example +@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond +@end example +@divEnd + +The same is true for all other scripts in that directory, such as +@command{lilypond-book} and @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalMacOSX + +@divEnd +@divEnd + + + +@node Windows +@unnumberedsec Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} +@subheading Packages + +@subsubheading Download + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +For Windows 2000, XP, Vista and Windows 7. + +@end itemize + +@subsubheading Install + +@enumerate + +@item +Locate the downloaded file and double-click on it to start the +installer. Follow the instructions given to you by the installer; +we recommend that you leave all the install options checked and +use the default installation location. Click the @q{Finish} button +when the installer has completed. LilyPond is now installed. + +@end enumerate + +@subsubheading Uninstall + +To uninstall LilyPond either: + +@enumerate + +@item +Locate the LilyPond folder from the @q{Start} menu and click on the +@q{Uninstall} icon. Click the @q{Finish} button when the uninstaller +has completed. + +@item +Or from within the Control Panel, locate and select LilyPond and then +choose the option to uninstall/remove the software. Click the @q{Finish} +button when the uninstaller has completed. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} +@subheading Compiling a file + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} +@subheading Running on the command-line + +@warning{If you are happy with the GUI, then please ignore these +instructions.} + +@subsubheading Windows on the command line + +@ignore +CHECK: check the following descriptions. +I don't have English version of Windows. +@end ignore + +The most convenient way to run LilyPond is by adding the folder +which contains LilyPond executable files to the environmental variable +@qq{Path}. + + +@enumerate +@item +Open your @qq{System} on the Control Panel, +select Advanced tab and click Environmental Variables button. + +@item +Select the Variable @qq{Path} from Environmental variables list +and click the Edit button. +You will be presented a window titled @qq{Edit System Variable}; +append to @qq{Variable value} the name of the folder +which contains LilyPond executable files like this: + +@example +[@var{pre-set paths}];@var{DIR}\LilyPond\usr\bin +@end example + +@warning{@var{DIR} will generally be @code{C:\Program Files}.} + +@noindent +and click @qq{OK} button to close the window. + +@end enumerate + +@subsubheading Invoking individual executable files + +LilyPond executable files +-- such as lilypond, lilypond-book, convert-ly, and so on -- +can be run from the command-line by invoking them: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalWindows + +@divEnd +@divEnd + + + +@node Source +@unnumberedsec Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{We @strong{do not} recommend that you attempt to build +LilyPond yourself; almost all user needs are better met with the +pre-built version.} + +@divClass{column-left-bottom} +@subheading Source tarball + +@downloadStableSource{} + +For an extensive listing of all versions (old and new), see our +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, +download site}. + +@divEnd + +@divClass{column-right-bottom} +@subheading Compiling instructions + +Instructions are listed in @rcontrib{Compiling}. + +@divEnd + + +@node Old downloads +@unnumberedsec Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} +@subheading All versions + +For an extensive listing of all versions (old and new), see our +@uref{http://download.linuxaudio.org/lilypond/binaries/, download +site}. + +@divEnd + + +@node GPL +@unnumberedsec GPL + +@divClass{column-center-top} +@subheading Software license + +GNU LilyPond is published under the GNU General Public License. +An introduction to this license, and our reasons for choosing it, +is given in @ref{Freedom}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU General Public License + +@include gpl.itexi + +@divEnd diff --git a/Documentation/web/introduction.itexi b/Documentation/web/introduction.itexi new file mode 100644 index 0000000000..341d2bf3ed --- /dev/null +++ b/Documentation/web/introduction.itexi @@ -0,0 +1,1259 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@node Introduction +@unnumbered Introduction + +@divClass{column-center-top} +@subheading Our Goal + +@imageFloat{flat-design,png,right} + +LilyPond came about when two musicians wanted to go beyond the +soulless look of computer-printed sheet music. Musicians prefer +reading beautiful music, so why couldn't programmers write +software to produce elegant printed parts? + +The result is a system which frees musicians from the details of +layout, allowing them to focus on making music. LilyPond works +with them to create publication-quality parts, crafted in the best +traditions of classical music engraving. + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} +@subheading What LilyPond does + +@itemize + +@item +@ref{Features}: What can LilyPond do? + +@item +@ref{Examples}: I want to see some music! + +@item +@ref{Freedom}: LilyPond is Free Software. + +@item +@ref{Background}: Our computational aesthetics. + +@end itemize +@divEnd + +@divClass{column-right-top} +@subheading LilyPond in use +@itemize + +@item +@ref{Productions}: Real-life use of LilyPond. + +@item +@ref{Reviews}: What do people say? + +@end itemize +@divEnd + +@divClass{column-center-bottom} +@subheading How LilyPond works +@itemize + +@item +@ref{Text input}: You write music as @emph{text}?! + +@item +@ref{Easier editing}: Other ways of working with LilyPond. + +@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 +* Features:: What can LilyPond do? +* Examples:: I want to see some music! +* Freedom:: Freedom and the GPL. +* Background:: Computational aesthetics. +* Productions:: Real-life use of LilyPond. +* Reviews:: What do people say about it? +* Text input:: You write music as text?! +* Easier editing:: Other ways of working with LilyPond. +@end menu +@divEnd + + + +@node Features +@unnumberedsec Features +@divClass{column-center-top} + + +@subheading Elegance +@subsubheading Excellent classical engraving + +@imageFloat{flat-design,png,right} + +LilyPond allows musicians to produce elegant sheet music that is +easy to read. Its developer community has spent thousands of hours +developing powerful music engraving software that results in beautifully +engraved music. All of LilyPond's style settings, font designs and +algorithms have been inspired by the finest hand-engraved music. +LilyPond output has the same strong, balanced and elegant look as the +best-engraved classical scores. This is further explained in our +@ref{Essay}. + + + +@subsubheading Effective layout choices + +Spend less time with tweaking the output; LilyPond gets the +formatting correct right from the start. It determines spacing by +itself, and breaks lines and pages to provide a tight and uniform +layout. Clashes between lyrics, notes, and chords are resolved +and slurs and beams are sloped, automatically! + + +@divEnd + +@divClass{color2} +@subheading Ease of use + +@imageFloat{lilypond-book,png,right} + +@subsubheading Text-based input + +LilyPond takes ASCII input, which you can produce in your favorite +text editor, quickly and comfortably. The input contains all the +information, so there is no need to remember complex command sequences: +simply save a file for later reference. + +@subsubheading Mix music and text + +Put fragments of music into texts without cutting and pasting +pictures. Integrate music into @LaTeX{} or HTML seamlessly, or add +music to OpenOffice.org with OOoLilyPond. Plugins are also available +to allow LilyPond code in various blogs and wikis, making online +collaboration possible. + + +@subsubheading Accessibility + +Text-based input also makes score-writing possible for users with +severe physical disabilities. Dexterity-impaired users who are +unable to type or control a computer mouse can use +speech-recognition software to edit LilyPond files. Even users +who are totally blind can use screen-reading software to write +LilyPond files -- an impossible task in graphical-based +score-writing programs. + +@subsubheading Extensible design + +All settings can be changed to suit your personal typographical +taste. If that still is not enough, there is always the built-in +scripting language Scheme, a dialect of the powerful language +LISP. Settings, variables and functions are all documented in the +comprehensive program reference manual. + +@divEnd + +@divClass{color3} + +@subheading Environment + +@imageFloat{frescobaldi-lilypond-editor-small,png,right} + +@subsubheading Free software + +LilyPond can be downloaded free of charge! Yep - It's free. Get +it from the download page. + +It's also free (as in @qq{speech}) software. It comes with source +code, and permission to change and copy it. So, are you irritated +by a bug, or yearning for a feature? Simply add it yourself, or +pay someone else to do it. + + +@subsubheading Excellent support + +LilyPond runs on all popular platforms: GNU/Linux, MacOS X, and +Windows. LilyPond comes with extensive documentation and hundreds +of example files. There is an active user community answering +questions on the lilypond-user mailing list, while the development +team makes sure that problems are solved quickly. + + +@subsubheading Enhanced editors + + +Several developers, themselves active LilyPond users, have also +written tools specifically aimed at making the process of editing +LilyPond files faster and more effective. For some examples, see +@ref{Easier editing}. + +@divEnd +@divClass{column-center-bottom} +@subheading Where now? + +Still not convinced? Look at some specific @ref{Examples}. If you've +already decided to try LilyPond, first read about our +@ref{Text input}. +@divEnd + + + +@node Examples +@unnumberedsec Examples + +LilyPond is a powerful and flexible tool for engraving tasks of +all kinds. Please browse our gallery of examples and be inspired! + + +@newsItem +@subsubheading Classical Music + +This organ work by J.S. Bach is a fairly typical engraving project +in LilyPond. + +@exampleImage{bach-bwv610} +@newsEnd + +@newsItem +@subsubheading Complex Notation + +This example from @emph{Goyescas} by Enrique Granados shows some +of the more advanced features of typesetting, including kneed +beams, cross-staff stems, and voice-follow lines. + +@exampleImage{granados} +@newsEnd + +@newsItem +@subsubheading Early Music + +LilyPond also supports various types of ancient notation, such +as this passage of Gregorian chant. + +@exampleImage{ancient-headword} +@newsEnd + +@newsItem +@subsubheading Modern Music + +Contemporary composers find LilyPond well-suited to displaying +unusual notation. Here is an excerpt from Trevor Bača's +@emph{Čáry}, for unaccompanied bass flute. + +@exampleImage{cary} +@newsEnd + + +@newsItem +@subsubheading Efficient, flexible creation of performance materials + +Various performance materials can be created from the same source +code. This is an excerpt of @uref{http://nicolas.sceaux.free.fr/, +Nicolas Sceaux's} engraving of Handel's @emph{Giulio Cesare}, in +full score, piano-vocal reduction, and a violin part. + +@exampleImage{sesto-full} + +@exampleImage{sesto-piano} + +@exampleImage{sesto-violin} + +@newsEnd + +@newsItem +@subsubheading Tablature + +LilyPond supports tablature notation, which can be customized to +suit any instrument that reads from tablature. The tablature +staff is generated automatically from notes entered for the 5-line +staff. + +@exampleImage{tab-example} +@newsEnd + +@newsItem +@subsubheading Schenker Graphs + +Standard output can be modified heavily. Here is an impressive +Schenkerian analysis, created by Kris Schaffer, for an article +in @uref{http://www.linuxjournal.com/article/8364 , Linux Journal.}. +The colors have been added for better visibility. + +@exampleImage{bach-schenker} +@newsEnd + +@newsItem +@subsubheading Vocal Music + +LilyPond is excellent for vocal music of all kinds, from sacred +hymns to opera. Here is a medieval motet with slightly unusual +requirements. The tenor voice is written in a different meter +than the others, but must line up as if it were in the same meter. +LilyPond handles this most elegantly. Note also the incipits with +Vaticana style clefs, the slashed stems indicating plicated notes, +and the ligature braces above certain groups of notes. + +@exampleImage{aucun-snippet} +@newsEnd + +@newsItem +@subsubheading Educational Applications + +LilyPond is perfectly suited for educational purposes as well. +Here is an example of a simple counterpoint exercise. + +@exampleImage{theory} +@newsEnd + +@newsItem +@subsubheading Popular Music + +It is simple to create pop lead sheets with melody, lyrics, +chord names, and fretboards. In this example you see some of the +predefined fretboard diagrams, but these can be heavily customized +to suit nearly any situation. + +@exampleImage{chart} +@newsEnd + +@newsItem +@subsubheading Large Projects + +LilyPond is excellent for large projects like operas or works for +full symphony orchestra, as well. In addition, the text-based +input provides greater accessibility -- this example was +contributed by Hu Haipeng, a blind composer. + +@exampleImage{orchestra} +@newsEnd + + +@divClass{column-center-bottom} +@subheading Where now? + +Still not convinced? LilyPond is Free software, granting you +@ref{Freedom}. If you've already decided to try LilyPond, first +read about our @ref{Text input}. +@divEnd + + +@node Freedom +@unnumberedsec Freedom + +@divClass{column-center-top} +@subheading Free Software + +@uref{http://www.gnu.org/, GNU} LilyPond is written and maintained +by a community of enthusiasts. It is published under the +@ref{GPL, GNU General Public License} and the @ref{FDL, GNU Free +Documentation License}, giving everybody the freedom to fix, +modify, and extend the program. Creating beautiful music should +not require hundreds of dollars of software! +@divEnd + + +@c @divClass{column-left-top} +@divClass{color2} +@divClass{keep-bullets} +@subheading What are the benefits to users? + +@itemize + +@item +No cost: download and try it out! What do you have to lose? + +@item +Sharing: if you like the program, give a copy to your friends, +teachers, students, and colleagues! + +@item +Source available: if you are curious about how LilyPond creates +some notation, you can see exactly how it is done. + +@item +Extendible: you can add features, fix bugs, and change the +functionality. If you are not a programmer, you can hire somebody +to do those tasks. + +This may not seem appealing to casual musicians, but the ability +to extend software can be highly valuable to serious composers, +companies, and academics. + +@item +Future safety: if a commercial company goes bankrupt, what happens +to any electronic music which depends on their products? This is +not a concern with LilyPond; even if the entire development team +quits (extremely unlikely), the program will still be legally +available for copying, modifications, and distribution. + + +@end itemize + +@divEnd +@divEnd + + +@c @divClass{column-right-top} +@divClass{color3} +@divClass{keep-bullets} +@subheading Why do LilyPond developers @qq{give away} their work for free? + +Most of us view LilyPond development as a hobby or volunteer work. +So this question is really asking @qq{why do people volunteer}? + +@itemize + +@item +Fun: working towards a goal can be enjoyable, especially when you +work as a team! + +@item +Shared goals: we all want beautiful sheet music, but few people +have the expertise (and nobody has the time!), to create a program +which can handle all situations. By working together -- one +person improves the automatic beaming code, another person +improves the shape of slurs, and a third person writes +documentation explaining how to use these features -- we can +achieve our goal with only a fraction of the individual effort. + +@item +@qq{Gift culture}: the Free Software (or @qq{Open Source}) +movement has created many great software projects, such as +@uref{http://kernel.org/, GNU/Linux}, +@uref{http://www.getfirefox.com/, Mozilla Firefox}, and +@uref{http://www.wesnoth.org/, Battle for Wesnoth}. Having +benefitted from these projects, some developers want to @qq{give +back} to the community. + +@item +Work experience: contributing to open-source projects is a great way to +practice programming, documentation writing, documentation translation, +or design. This experience has helped some developers gain job offers +or scholarships. + + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-center-bottom} +@subheading Where now? + +Still not convinced? Read our extensive essay about our engraving +philosophy in @ref{Background}. If you've already decided to try +LilyPond, first read about our @ref{Text input}. +@divEnd + + +@node Background +@unnumberedsec Background + +@divClass{column-center-top} +@subheading Background essay + +We have an extensive essay describing computational aesthetics: +the art of creating beauty with a computer. + +If you just want a quick introduction to LilyPond, the essay might +be too much material to read. If you would like to read it now, +please progress to @ref{Essay}. +@divEnd + +@divClass{column-center-bottom} +@subheading Where now? + +Still not convinced? Read about some of our users' +@ref{Productions} and sheet music. If you've already decided to +try LilyPond, first read about our @ref{Text input}. +@divEnd + + +@node Productions +@unnumberedsec Productions + +@divClass{column-left-top} +@subheading Concerts + +LilyPond engravings have been used for performances around the world. +Some highlights: + +@divClass{keep-bullets} +@itemize + +@item +@emph{Affaire étrangère}, an opera by +@uref{http://valentin.villenave.net/,Valentin Villenave} +to a French libretto by +@uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis +Trondheim}, premiered February 1, 2009 at +@uref{http://www.orchestre-montpellier.com/, L'Opéra National de +Montpellier}, France. + +@item +@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}'s +performance of Lully's @emph{Armide}, May 15-16, 2009, in Houston, +Texas (engraving by @uref{http://nicolas.sceaux.free.fr/, +Nicolas Sceaux}). + +@item +Instrumental excerpts from Rameau's @emph{Hippolyte et Aricie} at +St. James's Church in Manhattan, May 8, 2009, by Frederick Renz +and his ensemble @uref{http://www.earlymusicny.org/, Early Music +New York} (engraving by Nicolas Sceaux). + +@end itemize +@divEnd + +@divEnd + + +@divClass{column-right-top} +@subheading Published sheet music + +@divClass{keep-bullets} +@itemize + +@item +@uref{http://www.mutopiaproject.org/index.html, Mutopia Project}, +over 1500 pieces of classical sheet music for free download, and +the main showcase of LilyPond scores. + +@c don't make this "Mutopia" a link, since that looks silly. +@item +@uref{http://etudeapp.com, Etude}, @qq{sheet music on steroids} is +an iPhone app which displays piano music engraved with LilyPond, +including many pieces from Mutopia. The app includes a virtual +piano keyboard showing which keys to press to help beginners learn +how to read sheet music. + +@item +@uref{http://www.adoromusicpub.com/, Adoro Music Publishing}, +high-quality scores of sacred music, available for immediate +download or in traditional paper format. + +@item +@uref{http://www.shadylane.fr, The Shady Lane Publishing}, +a @qq{micro musical publishing house} whose goal is to promote a +new form of musical economy closer to the musicians and music +lovers. + +@end itemize + +@divEnd + +@divEnd + +@contactUsAbout{concerts or sheet music} + +@divClass{column-center-bottom} +@subheading Where now? + +Still not convinced? Read some of our users' @ref{Reviews}. +If you've already decided to try LilyPond, first read about our +@ref{Text input}. +@divEnd + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/testimonials + +@node Reviews +@unnumberedsec Reviews + +@divClass{column-left-top} +@subheading Published articles + +@divClass{keep-bullets} +@itemize + +@item +April 2011 + +@uref{http://www.linux-magazine.com,Linux Magazine} publishes an +article titled +@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf, +Projects on the Move}. It is an introductory article on MuseScore, +LilyPond and Chordii. Author Carla Schroder states @qq{LilyPond is +driven from the command line, but don’t let the lack of a GUI scare +you away; LilyPond is user-friendly and easy to learn}, and provides +a hands-on example. + +@item +May 2010 + +Peter Kirn, on the Create Digital Music website, publishes a +@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,LilyPond +review}. He takes a balanced view on usage, praises LilyPond's +high-quality notation and suggests to try it out. + +@item +September 2009 + +The German LinuxUser magazine wrote an +@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel, +article about LilyPond}. + +@item +August 2009 + +Ann Drinan, on the +@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org} +website, presents comments by two orchestra librarians who +talk about using software to maintain their libraries. + +@item +June 2009 + +In an @uref{http://news.lilynet.net/Free-Music-Now, article} +published in the French @emph{National Conservatory Parent +Association}'s yearly magazine, French composer and LilyPond +contributor Valentin Villenave explains how Free licenses, and +specifically LilyPond-engraved scores, are instrumental in +making written music accessible to all. + +@item +February 2008 + +In @uref{http://www.musicbyandrew.ca/finale-lilypond-1.html, +articles on his personal site}, Andrew Hawryluk compares Finale +and LilyPond in general terms, and evaluates engraving +capabilities of both pieces of software in detail. The second +article is an instructive analysis of engraving issues in +Rachmaninoff's Piano Prelude No. 6, including comparisons with a +hand-engraved reference edition. + +@item +June 2006 + +@uref{http://distrowatch.com,DistroWatch} awards LilyPond and +@uref{http://distrowatch.com/weekly.php?issue=20060605,writes} +@qq{Ladies and Gentleman, we are pleased to announce that, based +on readers' requests, the DistroWatch May 2006 donation has been +awarded to LilyPond (@euro{}190.00) and Lua (US$250.00).} + +@item +December 2005 + +@uref{http://linuxjournal.com,Linux Journal} publishes an article +titled @uref{http://www.linuxjournal.com/article/8364, Make +Stunning Schenker Graphs with GNU LilyPond}. It is an in-depth +but hands-on feature article with crisp LilyPond graphics. Author +Kris Shaffer remarks @qq{GNU LilyPond generates beautiful graphics +that make commercial alternatives seem second-rate.} + +@item +August 20, 2005 + +The Belgian newspaper De Standaard investigates what drives Free +Software authors in an article titled +@uref{http://www.standaard.be/Artikel/Detail.aspx?artikelId=G42H5GD6, +Delen van KENNIS zonder WINSTBEJAG} (Non-profit sharing of +knowlegde) in its @q{DS2 bijlage}. LilyPond is used as an example +and the article is interspersed with quotes from an email +interview with Jan Nieuwenhuizen. This marks LilyPond's first +appearance in mainstream printed press. + +@item +June 2005 + +A French article on the LilyPond 2.6 release appeared on +@uref{http://linuxfr.org/2005/06/27/19210.html, linuxfr.org}. + +@item +October 2004 + +The editors of Computer!Totaal, a Dutch computer magazine, +@uref{http://lilypond.org/web/images/computer-totaal.jpeg, +describe LilyPond} in the October 2004 issue as: @qq{Wonderful +free (open source) software [..] The sheet music produced by +LilyPond is exceptionally pretty [..] a very powerful system that +can do almost anything.} + +@item +July, August 2004 + +Dave Phillips wrote an introductory article for +@uref{http://linuxjournal.com,Linux Journal}: At +the sounding edge: LilyPond, parts +@uref{http://www.linuxjournal.com/article/7657, one} and +@uref{http://www.linuxjournal.com/article/7719, two}. + +@item +March 2004 + +Chris Cannam +@uref{http://www.all-day-breakfast.com/cannam/linux-musician/lilypond.html,interviewed} +Han-Wen Nienhuys and Jan Nieuwenhuizen on linuxmusician.com +(original site defunct). This interview was also reviewed in a +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&tid=, +slashdot story}. + +@item +February 2004 + +Jazz singer Gail Selkirk writes about +@uref{http://www.songbirdofswing.com/editorial_page/lilypond/, +Diving into LilyPond}. @qq{... you can make lead sheets or full +orchestral parts, and the results can be stunning.} +@uref{http://www.computermusic.co.uk/, Computer Music Special}, +issue CMS06. + +@end itemize + +@divEnd +@divEnd + + +@divClass{column-right-top} +@subheading User testimonials + +@divClass{testimonial-item} +@imageFloat{carter-brey,jpg, right} +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, Principal Cellist, New York Philharmonic + +@qq{@dots{} I've written a couple of encore pieces for solo cello +which I've printed with LilyPond and which I'm going to submit to +Schirmer for publication. I'll bet their engraved version wouldn't +look half as sharp as mine!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{orm-finnendahl,jpg, left} +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, professor of Composition, Musikhochschule Freiburg + +@qq{Although I don't know [LilyPond] very well yet, I'm +@strong{*very} impressed. I used the program to input a motet of +Josquin Desprez in mensural notation and there's no doubt that +lilypond outscores all other notation programs easily concerning +speed, ease of use and look!} +@divEnd + + +@divClass{testimonial-item} +@imageFloat{darius-blasband,jpg, right} +@subsubheading Darius Blasband, composer (Brussels, Belgium) + +@qq{[..after the first orchestra rehearsal] I got numerous +compliments about the quality of the scores. Even more +importantly, while LilyPond provides numerous hacks to improve the +way its scores look, what the orchestra got from me is basically +the raw, untouched output.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Kieren MacMillan, composer (Toronto, Canada) + +@qq{thanks and kudos to the development team for their incredible +work. I've never seen anything approaching the output that I get +from LilyPond -- I'm totally confident that my music publishing +needs will be fulfilled beyond my expectations using this great +application. [..] basically untweaked LilyPond output [..] looks +better than most recent @q{professional} publications I've compared +it to (q.v., just about any Warner Bros. score, and even many of +the most recent by @q{the old houses}). [..]} + +@qq{Beat that, Finale/Sibelius/Igor/whatever!!!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Cannam, lead programmer of the @uref{http://www.rosegardenmusic.com/, RoseGarden} project + +@qq{LilyPond is obviously the zillion-ton gorilla [of great music +typesetting].} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} + +@qq{The way that music is entered for LilyPond causes me to think in a +more musical way -- there have been times when I've been stumped as +to how to tell Lily to engrave something, only to realize that +even if I did get it exactly as the composer wanted, the music +would be confusing to read. LilyPond makes it much easier for me +to work in my dual editor+engraver role.} + +@qq{I've been using LilyPond exclusively for my fledgling music +publishing business. Virtually without exception, every composer +has been blown away by the quality of the engraving when presented +with the proofs of their music about to be published. I deserve +some of the credit for this -- I spend a lot of time tweaking +output, especially ties (mainly in chords) -- but LilyPond gives +me an excellent starting point, a very intuitive interface, and +the ability to modify absolutely anything if I want to take the +time. I'm convinced that no commercial product can come close.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading David Bobroff, Bass Trombone, Iceland Symphony Orchestra + +@qq{I think LilyPond is great [..] The more I learn about LilyPond +the more I like it!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Vaylor Trucks, Electric guitar player (Yes, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, related to}) + +@qq{I am super impressed with LilyPond [..]} + +@qq{THIS IS THE BEST PROGRAM EVER!!!} + +@qq{Thank you all SO MUCH for your hard work and dedication!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, @uref{http://www.mutopiaproject.org/, Mutopia} contributor + +@qq{I had a kind of hate-passion relationship with it. Passion +because the first score I saw was so amazing! The description of +LilyPond lies about its beautifulness, it is too modest! [..] as +LilyPond is getting always better, and as I look closer how things +are done in scheme, I have less and less frustrations. Anyway, +what I mean is: thank you for providing LilyPond, it is really +good.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, Conductor at the Theatre in Koblenz, Germany and distinguished GNU Hacker + +@qq{Anyway, LilyPond does an amazingly good job!} +@divEnd + + +@divClass{testimonial-item} +@subsubheading Paul Davis, developer of @uref{http://jackaudio.org/, JACK} and @uref{http://www.ardour.org/, Ardour} + +@qq{I think [LilyPond is] an incredible program, and it produces +wonderful, wonderful output. when i read an interview about it +last year, i was raving to several friends of mine about its +potential.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, Dr. Mika Kuuskankare}, researcher at the @uref{http://siba.fi, Sibelius Academy Finland}, composer and author of Expressive Notation Package (ENP) + +@qq{I have the deepest respect towards LilyPond and towards its creators +and maintainers as I know from personal experience how difficult this +kind of software can be.} +@divEnd + + +@divClass{testimonial-item} +@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, Musician, professional typesetter and long time SCORE user + +@qq{My heartfelt thanks to everyone who contributes to this project. I +was a power SCORE user for big typesetting houses way back in the '90s, +but I feel LilyPond finally makes it possible for me to get exactly what +I want on the page, especially when it isn't "standard" practice.} +@divEnd + +@divEnd + +@contactUsAbout{news articles or testimonals} + +@divClass{column-center-bottom} +@subheading Where now? + +Read about our @ref{Text input}. +@divEnd + + + +@node Text input +@unnumberedsec Text input + +@c TRANSLATORS, so far it's mostly from +@c http://lilypond.org/web/switch/howto + +@subheading @qq{Compiling} Music + +@imageClickable{nereid-shot-small,png, (click to enlarge), nereid-shot,png, right} + +LilyPond is a @emph{compiled} system: it is run on a text file +describing the music. The resulting output is viewed on-screen or +printed. In some ways, LilyPond is more similar to a programming +language than graphical score editing software. + +You do not write music by dragging notes from a graphical toolbar +and placing them on a dynamically refreshing score; you write +music by typing text. This text is interpreted (or @qq{compiled}) +by LilyPond, which produces beautifully engraved sheet music. + +People accustomed to graphical user interfaces might need to learn +a new way of working, but the results are definitely worth it! + +@warning{We present a quick overview of our text input -- it's not +as complicated as it sounds! Don't worry about understanding +every detail in these examples; our beginner documentation covers +everything at a much more gradual pace.} + + +@subsubheading It's as simple as A B C + +Notes are encoded with letters and numbers. Special commands are +entered with backslashes. + +@imageFloat{text-input-1-annotate,png,center} +@imageFloat{text-input-1-output,png,center} + +Alterations are made with different names: add @code{-is} for +sharp, and @code{-es} for flat (these are Dutch note names, other +languages are available). LilyPond figures out where to put +accidentals. + +@imageFloat{text-input-2-annotate,png,center} +@imageFloat{text-input-2-output,png,center} + + +@subsubheading Pop music + +Put chords and lyrics together to get a lead sheet: + +@imageFloat{text-input-pop-annotate,png,center} +@imageFloat{text-input-pop-output,png,center} + + + +@subsubheading Orchestral parts + +The input file contains the notes of piece of music. Score and +parts can be made from a single input file, so that changing a +note always affects the score and parts. To be able to include +the same music in multiple places, the music is assigned to a +@qq{variable} (a name). + +@imageFloat{text-input-parts-both-annotate,png,center} + + +This variable is then used in a single part (here transposed, with +condensed rests spanning several measures): + +@imageFloat{text-input-parts-single-annotate,png,center} +@imageFloat{text-input-parts-single-output,png,center} + + +The same variable is used in the full score (here in concert +pitch): + +@imageFloat{text-input-score-annotate,png,center} +@imageFloat{text-input-score-output,png,center} + + +@subsubheading Beginner Documentation + +We realize that many users find this way of entering music a bit +odd. For this reason, we have written extensive documentation to +help new users, beginning with @ref{Learning}. The Learning +Manual is the best place to start, as many questions are answered +before they come up! + +Please read the Learning Manual before complaining about bugs! +New users occasionally believe that LilyPond is not working +correctly, when in fact it is working precisely as designed. + +More in-depth information is available in @ref{Manuals}. + + +@subsubheading Easier editing environments + +@imageClickable{lilykde-screenshot-small,png, + (click to enlarge),lilykde-screenshot,png,right} + +LilyPond is primarily concerned with producing top-quality +engraved sheet music; creating a Graphical User Interface (GUI) +would distract us from this goal. However, there are other +projects aimed at making it easier to create LilyPond input files. + +Some editing environments include syntax highlighting, automatic +command completion, and pre-made templates. Other programs +actually provide a GUI which allows direct manipulation of a +graphical score. For more information, see @ref{Easier editing}. + + + +@divClass{column-center-bottom} +@subheading Where now? + +You are now ready to @ref{Download, Download LilyPond}. Still not +convinced? Read about @ref{Easier editing}. + +@divEnd + + +@node Easier editing +@unnumberedsec Easier editing + + +@divClass{column-center-top} +@subheading LilyPondTool + +@imageClickable{lilypondtool-2.12-screenshot-400wide,png, + (click to enlarge),lilypondtool-2.12-screenshot,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://lilypondtool.organum.hu} + +Created as a plugin for the +@uref{http://www.jedit.org,jEdit} text editor, +LilyPondTool is one of the most feature-rich text-based tools for +editing LilyPond scores. Its features include a Document Wizard +with lyrics support to set up documents easier, and embedded PDF +viewer with advanced point-and-click support. + +@divEnd + +@divClass{column-center-top} +@subheading Frescobaldi + +@imageClickable{frescobaldi-lilypond-editor-small,png, + (click to enlarge),frescobaldi-lilypond-editor,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} + +@uref{http://www.frescobaldi.org} + +Frescobaldi is a dedicated LilyPond music and text editor with a +built-in PDF previewer, a powerful score wizard and many editing +features. It is built on top of the KDE4 libraries and runs +currently on all flavours of Linux and other UNIX-like operating +systems. + +@divEnd + +@divClass{column-center-top} +@subheading Denemo + +@imageClickable{screenshot-denemo-small,png, + (click to enlarge),screenshot-denemo,png,right} + +@sourceimage{logo-linux,,,} +@sourceimage{logo-windows,,,} + +@uref{http://denemo.org} + +Denemo is a graphical editor which generates LilyPond source code, +and also allows audio playback. It allows users to view the +LilyPond source code in parallel to the graphical view. Extra +LilyPond tweaks can be attached to notes, chords etc. and are stored +with the Denemo file, so that users can continue to edit graphically. + +Moving the cursor in the LilyPond text moves the cursor in the graphical +view, and any syntax errors in your LilyPond tweaks are highlighted in +the text view when printed from there. + +@divEnd + +@divClass{column-center-top} +@subheading Text editors + +@sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,} +@sourceimage{logo-macosx,,,} +@sourceimage{logo-windows,,,} + +@uref{http://www.gnu.org/software/emacs/} + +Emacs is a text editor with language-sensitive capabilities for +many different computer languages. Emacs is a highly extensible +editor and can be used as an Integrated Development Environment. +There is a @q{lilypond mode} which supplies the language +definitions for working with LilyPond source files. As well, one of +our developers has written +@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}, an +Emacs major mode. + +@uref{http://www.vim.org} + +Vim is a minimal text editor and is an extension of the older Unix +@command{vi} editor. It is also extensible and configurable. + +As a general rule, if you are not already familiar with Emacs or +Vim, then you would probably prefer to use a different editor for +writing LilyPond input files. + +More information on setting up Emacs and Vim can be found in +@rprogram{Text editor support}. + +@sourceimage{logo-macosx,,,} +@uref{http://www.uoregon.edu/~koch/texshop} + +The TexShop editor for MacOS@tie{}X can be extended to run LilyPond, +@command{lilypond-book} and @command{convert-ly} from within the editor, +using the extensions available at: + +@example +@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts} +@end example + +@sourceimage{logo-macosx,,,} +There is a LilyPond bundle for TextMate, a commercial editor for MacOS. +It may be installed by running: + +@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 + +@divClass{column-center-top} +@subheading Programs that can export LilyPond code + + +@subsubheading Score, tab and MIDI editors: + +@itemize +@item +@uref{http://www.rosegardenmusic.com,Rosegarden}, an audio and +MIDI sequencer, which also has a score editor for single-staff +editing. + +@item +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, +a score editor based on the +@uref{http://www.cairographics.org,Cairo} library, has +experimental support for exporting to LilyPond. + +@item +@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, a multitrack +tablature editor and player, includes a score viewer and can +export to LilyPond. + +@item +@uref{http://www.musescore.org,MuseScore}, a score editor, has +incomplete LilyPond export but is being actively developed. + +@item +@uref{http://www.canorus.org,Canorus}, a score editor, can also +export to LilyPond, but is still beta-software. Testers are +welcome, though. + +@item +@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, a +realtime monophonic MIDI to LilyPond converter. + +@item +@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm, +NW2LY} is a C# program which converts a +@uref{http://www.noteworthysoftware.com/, NoteWorthy} song into +LilyPond. + +@end itemize + +@subsubheading Algorithmic code generators + +@itemize + +@item +@uref{http://www.projectabjad.org/,Abjad}, a +@uref{http://www.python.org/,Python} API for Formalized Score +Control designed to help composers build up complex pieces of +LilyPond notation in an iterative and incremental way. + +@item +@uref{http://common-lisp.net/project/fomus/,FOMUS}, a LISP library +to generate music notation from computer music software +environments. + +@item +@uref{http://strasheela.sourceforge.net,Strasheela}, an +environment built on top of the +@uref{http://www.mozart-oz.org/, Mozart/Oz} constraint programming +language. + +@end itemize +@divEnd + +@divClass{column-center-top} + +@subheading Other programs not being actively developed + +@itemize + +@item +@uref{http://lilykde.googlecode.com/,LilyKDE} has been replaced by +@uref{http://www.frescobaldi.org/,Frescobaldi}, and exists as +LilyKDE3 for KDE 3.5 and lilypond-KDE4 for KDE 4.1 only. + +@item +@uref{http://noteedit.berlios.de,NoteEdit}, which imported +@uref{http://www.musicxml.com/xml.html,MusicXML}, has been forked +into +@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd} +and @uref{http://canorus.org,Canorus}. + + +@item +@uref{http://lilycomp.sourceforge.net, LilyComp} is a graphical +note entry program, acting much like a number-pad which produces +lilypond notes. + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Where now? + +You are now ready to @ref{Download, Download LilyPond}. + +Still not convinced? Many composers, musicians, and conductors +have learned how to write music in our input format. Experienced +users even report that they can enter a full score in LilyPond +faster than with a piano keyboard or mouse+GUI! Perhaps you would +like to review the @ref{Features}, @ref{Examples}, or the +@ref{Freedom} that LilyPond provides, or read about users' +@ref{Productions} and @ref{Reviews}. In addition, our +approach to the computational aesthetics of classical engraving is +explained in our @ref{Background}. + + +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd + +@divEnd diff --git a/Documentation/web/ly-examples/GNUmakefile b/Documentation/web/ly-examples/GNUmakefile new file mode 100644 index 0000000000..473d16b967 --- /dev/null +++ b/Documentation/web/ly-examples/GNUmakefile @@ -0,0 +1,22 @@ +depth=../../.. +LOCALSTEPMAKE_TEMPLATES=lilypond ly +include $(depth)/make/stepmake.make + +LILYPOND_PREVIEW = $(LILYPOND_BINARY) -dpreview -dresolution=150 + +OUT_PNG_FILES = $(LY_FILES:%.ly=$(outdir)/%.png) +OUT_PNG_PAGES = $(PNG_PAGES:%=$(outdir)/%.png) + +OUT_SMALL_PNG_FILES = $(OUT_PNG_FILES:%.png=%-small.png) + +ifeq ($(out),www) +all: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES) +endif + +$(outdir)/%.png: %.ly + $(LILYPOND_PREVIEW) -o $(outdir) $< + mv $(outdir)/$*.preview.png $@ + +$(outdir)/%-small.png: $(outdir)/%.png + pngtopnm $< | pnmscale -w=600 | pnmtopng > $@ + diff --git a/Documentation/web/ly-examples/ancient-headword.ly b/Documentation/web/ly-examples/ancient-headword.ly new file mode 100644 index 0000000000..22640e58dc --- /dev/null +++ b/Documentation/web/ly-examples/ancient-headword.ly @@ -0,0 +1,124 @@ +\version "2.14.0" +\include "example-header.ily" + +#(set-global-staff-size 15) + +\include "gregorian.ly" + +\score { + << + \new VaticanaVoice = "cantus" { + \clef "vaticana-do3" + % Verse 1 — Salve, Regína + a\melisma \[ a \flexa g \pes a\melismaEnd \] d + \divisioMinima + \[ a\melisma \flexa g\melismaEnd \] + \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] + \[ e\melisma \flexa d\melismaEnd \] + \divisioMaior + c d \[d\melisma \flexa c\melismaEnd \] d + \[ e\melisma \pes f\melismaEnd\] g + \[d\melisma \pes e \flexa c\melismaEnd \] d + \finalis + % Verse 2 — Vita, dulcédo + % a\melisma \[ a \flexa g \pes a\melismaEnd \] d + % \divisioMinima + % \[ a\melisma \flexa g\melismaEnd \] + % \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] + % \[ e\melisma \flexa d\melismaEnd \] + % \divisioMaior + % c d \[e\melisma \pes f\melismaEnd \] g + % \[d\melisma \pes e \flexa c\melismaEnd \] d + % \finalis + % Verse 3 — Ad te clamámus + \[ d\melisma \pes f\melismaEnd\] a g + \[ g\melisma \flexa f \pes a\melismaEnd\] e + \divisioMaior + g f \[ e\melisma \flexa d \pes g\melismaEnd \] + \divisioMinima + c d \[ e\melisma \flexa d \pes g\melismaEnd \] + \[ f\melisma \flexa e\melismaEnd \] d + \finalis + % Verse 4 — Ad te suspirámus + \[ d\melisma \pes f\melismaEnd \] a c' g + \[ g\melisma \flexa f \pes g\melismaEnd \] a + \divisioMaior + d \[ f\melisma \pes \deminutum g\melismaEnd \] g d + \[ \virga f\melisma \inclinatum e \inclinatum d\melismaEnd \] + c \divisioMaior + d \[ d\melisma \flexa c \pes f\melismaEnd \] + \[ g\melisma \pes a\melismaEnd \] + g \[ f\melisma \flexa e\melismaEnd \] g + \[ f\melisma \flexa \deminutum e\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] + \finalis + % Verse 5 — Eia ergo, Advocáta nostra + f\melisma \[ f \pes g\melismaEnd \] f + \[ g\melisma \pes \deminutum a\melismaEnd \] a + \divisioMinima + c' g \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] d g a + \divisioMaior + d' d' \[ c'\melisma \flexa b c' \pes d'\melismaEnd \] a + \divisioMinima + d' c' a \[ g\melisma \flexa f \pes a\melismaEnd \] g + \[ d\melisma \pes e\melismaEnd \] f + \[ \virga e\melisma \inclinatum d \inclinatum c\melismaEnd \] + \divisioMaior + \[ c\melisma \pes d\melismaEnd \] + f \[ g\melisma \flexa \deminutum f\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] d + \finalis + % Verse 6 — Et Jesum + d a, \[ c\melisma \pes d\melismaEnd \] + \divisioMinima + d \[ d\melisma \pes e\melismaEnd \] \[ e\melisma \flexa d d\melismaEnd \] + c g f \[ e\melisma \flexa \deminutum d\melismaEnd \] g + \[ f\melisma \flexa e\melismaEnd \] + \[ d\melisma \flexa c \pes d\melismaEnd \] + \[ d\melisma \pes a \] \virga bes\melismaEnd a + \divisioMinima + \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] g d f + \[ f\melisma \flexa e\melismaEnd \] \[ d\melisma \flexa c\melismaEnd \] + \divisioMinima + \[ e\melisma \pes f \flexa e\melismaEnd \] d d + \finalis + % Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María + a\melisma \[a \flexa g a \quilisma b \pes c'\melismaEnd \] + \[ \virga b\melisma \inclinatum a \inclinatum g\melismaEnd \] a + \finalis + \[ g\melisma \pes a \quilisma b \pes c' \] \[ c' \flexa b\melismaEnd \] + \[ a\melisma \flexa g\melismaEnd \] \[ g\melisma \pes a\melismaEnd \] + \finalis + \[ a\melisma \flexa d \virga f \inclinatum e \inclinatum d \inclinatum c d \] + \divisioMinima + \[ d \pes e f \pes g\melismaEnd \] + \[ g\melisma \flexa \deminutum f\melismaEnd \] + \[ g\melisma \pes a\melismaEnd \] + d c d \[ d\melisma \pes g \flexa f f\melismaEnd \] + \[ e\melisma \flexa d\melismaEnd \] + \finalis + } + \new Lyrics \lyricsto "cantus" { + Sal- ve, Re- gí- na, ma- ter mi- se- ri- cór- di- ae: + % Vi- ta, dul- cé- do, et spes no- stra, sal- ve. + Ad te cla- má- mus, éx- su- les, fi- li- i He- vae. + Ad te su- spi- rá- mus, ge- mén- tes et flen- tes in hac la- cri- má- rum + val- le. + E- ia er- go, Ad- vo- cá- ta no- stra, il- los tu- os mi- se- ri- cór- des + ó- cu- los ad nos con- vér- te. + Et Je- sum, be- ne- díc- tum fruc- tum ven- tris tu- i, no- bis post hoc + ex- sí- li- um os- tén- de. + O cle- mens: + O pi- a: + O dul- cis Vir- go Ma- rí- a. + } + >> +} + +\layout { + \context { + \Staff + \consists Custos_engraver + } +} + diff --git a/Documentation/web/ly-examples/aucun-snippet.ly b/Documentation/web/ly-examples/aucun-snippet.ly new file mode 100644 index 0000000000..ce484baaee --- /dev/null +++ b/Documentation/web/ly-examples/aucun-snippet.ly @@ -0,0 +1,257 @@ +\version "2.14.0" +\include "example-header.ily" + +\paper { +% line-width=158\mm % produces 624 pixels + line-width = 143\mm % reserve 15mm for incipit +} + +% Aucun ont trouvé, from Montpellier Codex +% +% Put brackets in where the original has ligatures, using +% "Analysis Brackets," and adjust the "bracket-flare" property +% to make the ends vertical instead of slanted. + +#(set-global-staff-size 15) + +%%%%%%%%%%% INCIPIT DEFS %%%%%%%%%% + +incipitGlobal = { + \override NoteHead #'style = #'mensural + \override Accidental #'style = #'mensural + \override KeySignature #'style = #'mensural + \override Rest #'style = #'mensural +% \override Staff.TimeSignature #'style = #'mensural + \cadenzaOn + \override Score.Clef #'extra-offset = #'(-0.0 . 0.5) + \override Score.Clef #'font-size = #3 + \clef "vaticana-do1" +} + +incipitTriplum = \markup{ + \score{ + { + \set Staff.instrumentName="Triplum " + \incipitGlobal + s1. + } + \layout { + %indent = 1\cm + \context {\Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + \context {\Staff + \remove "Time_signature_engraver" + } + line-width=5\mm + } + } +} + +incipitMotetus = \markup{ + \score{ + { + \set Staff.instrumentName="Motetus" + \incipitGlobal + s1. + } + \layout { + % indent = 1\cm + \context {\Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + \context {\Staff + \remove "Time_signature_engraver" + } + line-width=5\mm + } + } +} + +incipitTenor = \markup{ + \score{ + { + \set Staff.instrumentName = "Tenor " + \incipitGlobal + s1.*2 + } + \layout { + %indent = 1\cm + \context {\Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + \context {\Staff + \remove "Time_signature_engraver" + } + line-width=5\mm +} +} +} + +incipitBassus = \markup{ + \score{ { + \set Staff.instrumentName = "Bassus " + \override NoteHead #'style = #'neomensural + \override Accidental #'style = #'neomensural + \override Rest #'style = #'neomensural + \override Staff.TimeSignature #'style = #'neomensural + \cadenzaOn + \clef "petrucci-f3" + \key f \major + \time 3/2 + \relative c' { + s1. % R1.*2 + } + } + \layout { + \context { \Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + line-width=5\mm + } + } +} + +%%%%%%%%%%% END INCIPIT DEFS %%%%%%%%%%% + +#(ly:set-option 'point-and-click #f) + +global = { + \override Staff.TimeSignature #'stencil = #(lambda (grob) + (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) + \time 3/4 + \override Staff.BarLine #'transparent = ##t + \override HorizontalBracket #'direction = #UP + \override HorizontalBracket #'bracket-flare = #'(0 . 0) +} + +%%%%%%%%% MACRO FOR MAKING SLASHES THROUGH STEMS %%%%%%%%%% +MakeSlash = #(define-music-function (parser location angle len-left len-right +thick y-factor offset) + (number? number? number? number? number? +pair?) +#{ +\once \override Voice.Stem #'text = \markup { + \postscript #(let ((x-off (car $offset)) + (y-off (cdr $offset))) + (string-append + (ly:number->string (car $offset)) " " (ly:number->string (cdr $offset)) " +translate " + (ly:number->string $angle) " rotate " + (ly:number->string (- x-off)) " " + (ly:number->string (- y-off)) " translate 0 setlinewidth " + (ly:number->string (- x-off $len-left)) " " (ly:number->string (+ y-off +$thick)) " moveto " + (ly:number->string (- x-off $len-left)) " " (ly:number->string y-off) + " " (ly:number->string $thick) " +90 270 arc " + (ly:number->string (+ x-off $len-right)) " " (ly:number->string y-off) + " " (ly:number->string $thick) " +270 90 arc " + " gsave fill grestore stroke")) } + +\once \override Voice.Stem #'stencil = #(lambda (grob) + (let* ((sten1 (ly:stem::print grob)) + (sten2 (ly:text-interface::print grob)) + (extent1 (ly:stencil-extent sten1 Y)) + (extent2 (ly:stencil-extent sten2 Y))) + (ly:stencil-add + sten1 + (ly:stencil-translate sten2 + (cons 0 (+ (* $y-factor (cdr extent1)) + (* (- 1 $y-factor) (car extent1)))))))) +#}) + + +slash = { \MakeSlash #20 #1.0 #1.1 #0.05 #0.75 #'(0 . -.5) } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +triplumWords = \lyricmode { + Au -- cun ont trou -- ve chant par u -- sa -- ge, + mes a moi en doune o -- choi -- son __ + a -- mours, qui res -- bou -- dist mon cou -- ra -- ge + si que m'ès -- tuet fai -- re _ chan -- _ _ çon +} + +triplumNotes = \relative c' { + \clef "treble_8" + %\set Staff.midiInstrument = "flute" +% \global + \override StemTremolo #'beam-thickness = #.125 + \override StemTremolo #'slope = #1.0 + f8 f4 e8 d c f f f | % 1 + % the \scaleDurations command below makes 5 notes last the + % duration of a dotted quarter + e8 c4 \scaleDurations #'(3 . 2) { \times 4/5{e16[ d e d e]} } e8 f4 | % 2 + g2. ~ g4. | % 3 + f8 d4 f4. \scaleDurations #'(3 . 2) { \times 4/6{ g16[ f e f e f]}} % 4 + g8 g4 g4. e4. | % 5 + fis8 d4 e8\startGroup g4\stopGroup f8[ e d] | % 6 + c2. r4. | % 7 +} + +motetusWords = \lyricmode { + lonc tans _ _ me fiu -- te -- nu de chan -- _ _ ter __ + mes or ai _ _ +} + +motetusNotes = \relative c' { + \clef "treble_8" + c2. c8\startGroup b8 \slash c\stopGroup | % 1 + a2. c4. | d2. e4. | % 2-3 + f2. f8 e d | % 4 + c2. ~ c4. | r2. r4. | % 5-6 + g'4. g g8 f e | % 7 +} + + +tenorNotes = \relative c { + \clef "treble_8" + f2. | a2. | g2. | r2. | % 1-4 + c2. | b2. | c2. | % 5-7 +} + +\score { + \new StaffGroup << + \new Staff = "triplum" << + %\set Staff.instrumentName = "Triplum" + \set Staff.instrumentName = \incipitTriplum + \set Staff.shortInstrumentName = "Tr." + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \context Voice = "triplum" { \global \triplumNotes } +% \scaleDurations #'(2 . 3) +% \context Voice = "slashes" { \triplumSkips } + \new Lyrics { \lyricsto "triplum" { \triplumWords }} + >> + \new Staff = "motetus" << + %\set Staff.instrumentName = "Motetus" + \set Staff.instrumentName = \incipitMotetus + \set Staff.shortInstrumentName = "M." + \set Staff.timeSignatureFraction = #'(9 . 8) + \scaleDurations #'(2 . 3) + \context Voice = "motetus" { \global \motetusNotes } + \new Lyrics { \lyricsto "motetus" { \motetusWords }} + >> + \new Staff = "tenor" { + %\set Staff.instrumentName = "Tenor" + \set Staff.instrumentName = \incipitTenor + \set Staff.shortInstrumentName = "T." + \global \tenorNotes + } + >> + %\midi {} + \layout { + %\context { + % \Staff \consists "Horizontal_bracket_engraver" + %} + \context { + \Voice \consists "Horizontal_bracket_engraver" + } + } +} diff --git a/Documentation/web/ly-examples/bach-bwv610.ly b/Documentation/web/ly-examples/bach-bwv610.ly new file mode 100644 index 0000000000..27659dfd6b --- /dev/null +++ b/Documentation/web/ly-examples/bach-bwv610.ly @@ -0,0 +1,183 @@ +\version "2.14.0" +%\include "example-header.ily" + + +\header { + mutopiatitle = "Jesu, meine Freude" + mutopiacomposer = "BachJS" + poet = "BWV 610" + %mutopiaopus = "BWV 610" + mutopiainstrument = "Organ" + date = "" + source = "Bach-Album, Ernst H. Wolfram (editor), 6787, C. F. Peters, Leipzig" + style = "Baroque" + copyright = "Public Domain" + maintainer = "Urs Metzger" + maintainerEmail = "urs@ursmetzger.de" + lastupdated = "2006/Mar/15" + + title = "Jesu, meine Freude" + composer = "Johann Sebastian Bach" + %opus="BWV 610" + + footer = "Mutopia-2006/03/27-706" + tagline = \markup { \override #'(box-padding . 1.0) \override #'(baseline-skip . 2.7) \box \center-column { \small \line { Sheet music from \with-url #"http://www.MutopiaProject.org" \line { \teeny www. \hspace #-1.0 MutopiaProject \hspace #-1.0 \teeny .org \hspace #0.5 } • \hspace #0.5 \italic Free to download, with the \italic freedom to distribute, modify and perform. } \line { \small \line { Typeset using \with-url #"http://www.LilyPond.org" \line { \teeny www. \hspace #-1.0 LilyPond \hspace #-1.0 \teeny .org } by \maintainer \hspace #-1.0 . \hspace #0.5 Reference: \footer } } \line { \teeny \line { This sheet music has been placed in the public domain by the typesetter, for details see: \hspace #-0.5 \with-url #"http://creativecommons.org/licenses/publicdomain" http://creativecommons.org/licenses/publicdomain } } } } + +} + +\include "deutsch.ly" + +global = { + \key c \minor + \time 4/4 + #(set-accidental-style 'default) +} + +halsup = { + \stemUp + \tieUp +} + +halsdown = { + \stemDown + \tieDown +} + +staffup = { + \change Staff = "right" \halsdown +} + +staffdown = { + \change Staff = "left" \halsup +} + +sopran = { + \new Voice \relative g' { + \global + \halsup + \repeat volta 2 { + g4^\markup { \hspace #-4 \large "Largo" } g f es + d2 c\fermata + g'4 g a h + c2 h\fermata + %% Takt 5 ============================================== + c8. d16 es4 d4. d8 + c1\fermata + } + g4 g as g + f4. f8 es2\fermata + g4 g a h + %% Takt 10 ============================================= + c4 b! a2 + g1\fermata + g4 g f es + d2 c2\fermata \bar "|." + } +} + +alt = { + \new Voice \relative es' { + \global + \halsdown + \repeat volta 2 { + es16 d es8~ es16 f es d c8 d~ d c + c8 c4 h8 c8. \staffdown g16 \staffup c h c d + es16 d es8~ es16 f es d c8 d16 es f as g f~ + f16 e f8~ f16 g f es d es d8~ d16 es f d + %% Takt 5 ============================================== + g8 f es16 g as es f es f d g as g f + e8 f16 g as g as e f g f8~ f16 f es d + } + es16 d es8~ es16 f es des c8 \staffdown b~ b16 b c g + as16 g as f b c b as g f g8~ g16 b \staffup c d + es16 d es8~ es16 f es d c8 d16 es f as g f + %% Takt 10 ============================================= + es16 d es8 d g~g g4 fis8 + g16 d es c \staffdown d h c a h a h c d h g h + c16 h c \staffup d es d es8~ es d4 c8~ + c16 h c8~ c h c16 \staffdown g as8 g4\fermata + } +} + +tenor = { + \new Voice \relative c' { + \global + \repeat volta 2 { + c16 h c8~ c16 h c g a8 g~ g16 g as es + f16 es f d g as g f es d \tieDown es8~ es16 \tieNeutral f es d + c16 h c g' c h c c, f8. g16 as!4~ + as16 g as b c h c8 d8. c16 h c d h + %% Takt 5 ============================================== + es16 d es d~ d8 c~c c4 h8 + c4~ c8. b16 as b as8 g16 as g f + } + \halsdown es16 f g as b des c b as g f8~ f es + es8 es4 d8 es8. b16 es d es f + es16 f g8 c16 d c b a g f8~ f4 + %% Takt 10 ============================================= + g16 fis g a b a b g c b c a d es d c + h8 c16 a h g a fis g8 d16 es f es f8~ + f16 d es h c h c8 r16 f g d es g as fis + g16 d f! es f as g f e8. f16~ f d e8\fermata + } +} + +right = { + \clef treble + << + \alt + \sopran + >> +} + +left = { + \clef bass + << + \tenor + >> +} + +pedal = { + \global + \clef "bass" + \relative c { + \repeat volta 2 { + r8 c16 d es d es8~ es16 a, h g c h c8 + r16 g as f g f g8 c,2 + r8 c'16 d es d es8~ es16 c f es d c d8 + c8 f16 g as g as8~ as16 d, fis d g fis g8 + %% Takt 5 ============================================== + r8 a16 h c h c8 + r16 g as f g f g8 + r16 g as e f e f8 r16 e f h, c h c8 + } + r8 es16 f g f g8~ g16 c, d! b es d es8 + r16 b c as b as b8 es,2 + r8 c'16 d es d es8~ es16 c f es d c d8 + %% Takt 10 ============================================= + c8 es16 f! g fis g8 r16 d es c d c d8 + g,1 + c4 c,8 c'16 b! a8 h c16 h c8 + r16 g as fis g fis g8 c,2_\fermata + } +} + +\score { + \new PianoStaff + { \set PianoStaff.instrumentName = \markup { \large \center-column { + "a" "" "2 Clav." "" "e" "" "Pedale." } \hspace #0.5 } + << + \context Staff = right + { + \context Voice = right \right + } + \context Staff = left { + \context Voice = left \left + } + \context Staff = pedal { + \context Voice = pedal \pedal + } + >> + } + \layout{} +} diff --git a/Documentation/web/ly-examples/bach-schenker.ly b/Documentation/web/ly-examples/bach-schenker.ly new file mode 100644 index 0000000000..a69afab420 --- /dev/null +++ b/Documentation/web/ly-examples/bach-schenker.ly @@ -0,0 +1,271 @@ +% -*-coding: utf-8 -*- + +\header{ + composer = "J.S. Bach" + title = "Wenn wir in höchsten Nöten sein" + subtitle = "Analysis from Gene Biringer's Schenker Text, Ex. 5-27" +% "BWV641" + enteredby = "Kris Shaffer" +} + +% See http://kris.shaffermusic.com/tech.html. for more information + +% 'Add color...' sections are not the original author's, but added +% afterwards specifically for illustration in LilyPond's Documentation. + +I = \once \override NoteColumn #'ignore-collision = ##t + +\version "2.14.0" + +staffPiano = \new PianoStaff { + \set Score.timing = ##f + \set PianoStaff.followVoice = ##t + << + \new Staff = "RH" { % Right hand + \clef treble + \key g \major + \relative c'' { + \override Staff.NoteCollision + #'merge-differently-headed = ##t + << + { + \override Beam #'positions = #'(8 . 8) + \override NoteHead #'transparent = ##t + \override NoteHead #'duration-log = #1 + s1 b8[^\markup { + \override #'(baseline-skip . 0.5) + % Add color to markup in top staff + \column { \with-color #red \small { ^ 3 } } + } + s4. s1 a8^\markup { + \override #'(baseline-skip . 0.5) + % Add color to markup in top staff + \column { \with-color #red \small { ^ 2 } } + } + s4. s2 g8]^\markup { + % Add color to markup in top staff + \override #'(baseline-skip . 0.5) + \column { \with-color #red \small { ^ 1 } } + } + s4. + \revert Beam #'positions + \revert NoteHead #'transparent + \revert NoteHead #'duration-log + } + \\ + { + % Add color to both Dashed Slurs in top staff + \override Slur #'color = #(x11-color "purple") + \override Stem #'transparent = ##t + s1 + \once \override Slur #'height-limit = #6 + \once \override Slur #'extra-offset = #'(1.25 . 0) + \slurDashed + \I b2_( s2 + \once \override NoteHead #'transparent = ##t + b4) s + \once \override Slur #'height-limit = #3.25 + \once \override Slur #'extra-offset = #'(.75 . 0) + a2_( s4 + \once \override NoteHead #'transparent = ##t + a4) g2 + \revert Stem #'transparent + } + \\ + \override Staff.NoteCollision + #'merge-differently-headed = ##t + { + \override Beam #'positions = #'(4 . -3.25) + \stemUp + g8[ s s4 s2 + \stemDown + \once \override NoteHead #'transparent = ##t + \I b8] s8 + \override Beam #'positions = #'(3 . -2.25) + \stemUp + a8[ s s4 + \stemDown + c8] s s2 s s + } + \\ + { + % Add color to all remaining Slurs in top staff + \override Slur #'color = #(x11-color "violet") + \override PhrasingSlur #'color = #(x11-color "violet") + \override Stem #'transparent = ##t + \override Stem #'length = #0 + % Add color to text markups in top staff + g4_\( fis^(_\markup { \with-color #blue \tiny N } g)\) + a^(^\markup { \with-color #blue \tiny P } b2) + b4^(^\markup { \with-color #blue \tiny P } + \stemUp + \revert Stem #'transparent + \override Stem #'length = #10 + c8)^( s + \override Stem #'length = #14 + b4) s s + \override Stem #'length = #0 + \override Stem #'transparent = ##t + \once \override Slur #'extra-offset = #'(0 . 0.35) + % Add color to remaining text markup in top staff + c4^\( b_(_\markup { \with-color #blue \tiny P } a)\) s2 + \revert Stem #'length + } + \\ + { + \override Stem #'transparent = ##t + \override NoteHead #'transparent = ##t + \override Stem #'length = #0 + s1 s4 e4 s + \change Staff = "LH" + fis,4 s2 + \revert Stem #'transparent + \revert NoteHead #'transparent + \revert Stem #'length + } + \\ + { + \override Stem #'transparent = ##t + \override NoteHead #'transparent = ##t + \override Stem #'length = #0 + s1 s s2 + fis'4 s + \change Staff = "LH" + g,4 s s2 + \revert Stem #'transparent + \revert NoteHead #'transparent + \revert Stem #'length + } + >> + \bar "|." + } + } + + \new Staff = "LH" { % Left hand + \clef bass + \key g \major + \relative c' { + \override Staff.NoteCollision + #'merge-differently-headed = ##t + << + { + \override Beam #'positions = #'(-8 . -8) + \override NoteHead #'transparent = ##t + \stemDown + % Add color to long beam text markups in bottom staff + \I g8[_\markup { \with-color #(x11-color 'LawnGreen) \bold I } + s4. s1 s s2 + \I d8_\markup { \with-color #(x11-color 'LawnGreen) \bold V } + s4. + \I g,8]_\markup { \with-color #(x11-color 'LawnGreen) \bold I } + s4. + \revert Beam #'positions + \revert NoteHead #'transparent + } + \\ + { + \override Stem #'transparent = ##t + \stemDown + \override TextScript #'extra-offset = #'(-11.75 . -12.25) + \I g'2 s1 s s2 \I d2 g,2 + \revert Stem #'transparent + } + \\ + { + % Add color to all single-note Slurs in bottom staff + \override Slur #'color = #(x11-color "violet") + \override Stem #'transparent = ##t + \once \override NoteHead #'transparent = ##t + \override Stem #'length = #0 + g'4 + \once \override TextScript #'padding = #0.25 + % Add color to text markups in bottom staff + a4_(^\markup { \with-color #blue \tiny P } b) + fis4^(^\markup { \with-color #blue \tiny P } e) + \once \override NoteHead #'transparent = ##t + \once \override Slur #'height-limit = #1.5 + % Add color to remaining text markup in bottom staff + c4^( d)^\markup { \with-color #blue \tiny N } + \once \override NoteHead #'transparent = ##t + \once \override Slur #'extra-offset = #'(0 . 0.5) + \I fis,4_( + \revert Stem #'transparent + \override Stem #'length = #10 + \stemDown + g4) s + \once \override Slur #'extra-offset = #'(0 . 0.25) + \I c8_( s + \override Stem #'transparent = ##t + \revert Stem #'length + a4) + \once \override NoteHead #'transparent = ##t + \I d4^( d,4) s2 + } + \\ + { + % Add color to all two-note Slurs in bottom staff + \override Slur #'color = #(x11-color "violet") + \override Stem #'transparent = ##t + \override NoteHead #'transparent = ##t + \I g'4^( s b) s2 + \revert Stem #'transparent + \revert NoteHead #'transparent + \override Beam #'positions = #'(-4 . 1) + \stemDown + c,8[ s s4 + \stemUp + fis,8] s + \override Beam #'positions = #'(1 . -4) + g8[ s + \stemDown + b8] s + \revert Beam #'positions + \override Stem #'transparent = ##t + \override NoteHead #'transparent = ##t + c4^( s d4) s s2 + } + \\ + { + % Add color to four-note Slur in bottom staff + \override Slur #'color = #(x11-color "violet") + \override Stem #'transparent = ##t + \override NoteHead #'transparent = ##t + \override Stem #'length = #0 + \stemDown + \once \override Slur #'height-limit = #3 + \once \override Slur #'extra-offset = #'(0 . 0.25) + \I g4_( s2. e4) s2. s2 s1 s2 + \revert Stem #'transparent + \revert NoteHead #'transparent + } + \\ + { + % Add color to dashed Slur in bottom staff + \override Slur #'color = #(x11-color "purple") + \override Stem #'transparent = ##t + \override NoteHead #'transparent = ##t + \slurDashed + \once \override Slur #'height-limit = #6.0 + \once \override Slur #'extra-offset = #'(0.5 . -0.25) + \override Stem #'length = #0 + g4_( s2. s1 g,4) s s1 s2 + \revert Stem #'transparent + \revert NoteHead #'transparent + } + >> + \bar "|." + } + } + >> +} + +\score { + << + \staffPiano + >> + \layout { + indent = 0.0 + ragged-right = ##f + \context { \Staff \remove "Time_signature_engraver" } + } +} diff --git a/Documentation/web/ly-examples/cary-layout.ily b/Documentation/web/ly-examples/cary-layout.ily new file mode 100644 index 0000000000..480426c48c --- /dev/null +++ b/Documentation/web/ly-examples/cary-layout.ily @@ -0,0 +1,105 @@ + +\version "2.13.39" + +\layout { + indent = #0 + ragged-right = ##t + \context { + \Score + + proportionalNotationDuration = #(ly:make-moment 1 64) + \override Beam #'breakable = ##t + autoBeaming = ##f + tupletFullLength = ##t + \override BarNumber #'transparent = ##t + \override BarLine #'transparent = ##t + \override SpanBar #'transparent = ##t + \override Beam #'break-overshoot = #'(-0.5 . 1.0) + \override TextScript #'staff-padding = #6 + \override Glissando #'thickness = #3 + \override SpacingSpanner #'strict-grace-spacing = ##t + \override TupletBracket #'bracket-visibility = ##t + \override NoteColumn #'ignore-collision = ##t + } +} + +\paper { + 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 } } + printfirst-page-number = ##t + print-page-number = ##t + ragged-last-bottom = ##t + markup-system-spacing #'minimum-distance = #25 +} + +#(set-global-staff-size 14) + + +%% definitions. + + +ppX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "pp" #:hspace 0))) +pX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "p" #:hspace 0))) +mpX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "mp" #:hspace 0))) +fX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "f" #:hspace 0))) +ffX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "ff" #:hspace 0))) +sfp = #(make-dynamic-script "sfp") +sfpp = #(make-dynamic-script "sfpp") +sffp = #(make-dynamic-script "sffp") +sffpp = #(make-dynamic-script "sffpp") + +beam = #(define-music-function (parser location left right) (number? number?) + (cond ((and (= left 0) (> right 0)) + #{ + \set stemRightBeamCount = #$right + #}) + + ((and (> left 0) (= right 0)) + #{ + \set stemLeftBeamCount = #$left + #}) + + (else + #{ + \set stemLeftBeamCount = #$left + \set stemRightBeamCount = #$right + #}) + ) +) + +fraction = #(define-music-function (parser location music) (ly:music?) + #{ \tweak #'text #tuplet-number::calc-fraction-text $music #}) + +triangle = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(do do do do do do do) $music #}) + +semicircle = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(re re re re re re re) $music #}) + +blackdiamond = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(mi mi mi mi mi mi mi) $music #}) + +tiltedtriangle = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(fa fa fa fa fa fa fa) $music #}) + +square = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(la la la la la la la) $music #}) + +wedge = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(ti ti ti ti ti ti ti) $music #}) + +harmonic = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) $music #}) + +cross = #(define-music-function (parser location music) (ly:music?) + #{ \once \set shapeNoteStyles = #'#(cross cross cross cross cross cross cross) $music #}) + +white = #(define-music-function (parser location music) (ly:music?) + #{ \once \override NoteHead #'duration-log = #1 $music #}) + diff --git a/input/cary.ly b/Documentation/web/ly-examples/cary.ly similarity index 96% rename from input/cary.ly rename to Documentation/web/ly-examples/cary.ly index d385da139e..1990a690a3 100644 --- a/input/cary.ly +++ b/Documentation/web/ly-examples/cary.ly @@ -1,3 +1,7 @@ +\version "2.14.0" +% the example header file caused the head to be chopped off +%\include "example-header.ily" + \header { dedication = "Carin Levine" @@ -9,7 +13,7 @@ % Measures 6 - 10; composer = "Trevor Bača" - copyright = "Copyright 2006 Trevor Bača - all rights reserved." + copyright = "Copyright 2006 Trevor Bača, licensed under the FDL 1.1 or higher" } @@ -18,15 +22,14 @@ % Upper staff gives fingerings; % Lower staff gives special types of breath. % -% Copyright 2006 for the entire score; -% All rights reserved by the composer. - -\version "2.12.0" +% Copyright 2006 Trevor Baca, but this exerpt is licensed under +% the FDL 1.1 or higher. \include "english.ly" -\include "cary-layout.ly" +\include "cary-layout.ily" -\new Score << +\score { + << \new StaffGroup << @@ -36,7 +39,6 @@ \override TupletBracket #'direction = #down \override TupletBracket #'staff-padding = #5 \override TupletBracket #'padding = #2.25 - \override VerticalAxisGroup #'minimum-Y-extent = #'(10 . 10) } << \new Voice { @@ -98,7 +100,6 @@ \override Stem #'direction = #down \override TupletBracket #'staff-padding = #5 \override TupletBracket #'padding = #2.25 - \override VerticalAxisGroup #'minimum-Y-extent = #'(10 . 10) } << \new Voice \with { @@ -373,7 +374,7 @@ \times 4/7 { r4 % 66 \beam #2 #2 g,16 \fX [ % 67 - \beam #2 #2 g,16 \fX % 68 + \beam #2 #2 g,16 \f % 68 \beam #2 #0 g,16 \fX ] % 69 } r8 % 70 @@ -390,4 +391,5 @@ } >> >> ->> + >> +} diff --git a/Documentation/web/ly-examples/chart.ly b/Documentation/web/ly-examples/chart.ly new file mode 100644 index 0000000000..871ea301a6 --- /dev/null +++ b/Documentation/web/ly-examples/chart.ly @@ -0,0 +1,44 @@ +\version "2.14.0" +\include "example-header.ily" + +\include "predefined-guitar-fretboards.ly" + +#(set-global-staff-size 17) + +global = { + \time 4/4 + \key g \major + \partial 4 + \numericTimeSignature +} + +melody = \relative c' { + \global + d4 + g4 b8( a) g4 fis + e e e e + a c8( b) a4 g + fis a d +} + +harmonies = \chordmode { + \global + s4 g1 | c | a:m | d % 1-3 +} + +text = \lyricmode { + My eyes are dim, I can -- not see, + I have not brought my specs with me! +} + +\score { + << + \new ChordNames { \harmonies } + \new FretBoards { \harmonies } + \new Staff { + \context Voice = "vocal" { \melody } + } + \new Lyrics \lyricsto "vocal" \text + >> +} + diff --git a/Documentation/web/ly-examples/example-header.ily b/Documentation/web/ly-examples/example-header.ily new file mode 100644 index 0000000000..ab35243579 --- /dev/null +++ b/Documentation/web/ly-examples/example-header.ily @@ -0,0 +1,12 @@ +\version "2.11.33" +\paper{ + indent=0\mm + ragged-last=##f + ragged-right=##f + line-width=158\mm % produces 624 pixels + oddFooterMarkup=##f + oddHeaderMarkup=##f + bookTitleMarkup = ##f + scoreTitleMarkup = ##f +} + diff --git a/Documentation/web/ly-examples/granados.ly b/Documentation/web/ly-examples/granados.ly new file mode 100644 index 0000000000..607732e359 --- /dev/null +++ b/Documentation/web/ly-examples/granados.ly @@ -0,0 +1,148 @@ +\version "2.14.0" +\include "example-header.ily" + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is a brief passage from Enrique Granados % +% Goyescas, "Coloquio en la Reja." % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +#(set-global-staff-size 17) + +\paper { + ragged-right = ##f + #(set-paper-size "letter" 'landscape) + system-count = 1 +} + + +csh = \change Staff = "high" +csm = \change Staff = "middle" +csl = \change Staff = "low" + +crmolto = \markup { \italic \large "cresc. molto" } +appassmolto = \markup { \italic \large "appassionato molto" } + +#(ly:set-option 'point-and-click #f) + +global = { + \time 3/4 + \set fontSize = #1 + \override Beam #'thickness = #0.5 + \override NoteColumn #'ignore-collision = ##t +} + +upperVoiceOne = \relative c'' { + \voiceOne + \override TupletBracket #'transparent = ##t + 8\([ \times 4/5{g'32( aes g f g]) } + 8[ \times 4/5{32( c' bes aes bes]) } + 8 \) | % end m. 1 + %--------------------------------------------------% + 4\( \voiceTwo \) + \slurUp 16( 8) % end m. 2 + %--------------------------------------------------% + \noBreak + \voiceOne + 8\([ \times 4/5{32( aes' g f g]) } + \set subdivideBeams = ##t + \set baseMoment = #(ly:make-moment 1 8) + \set beatStructure = #'(2 2 2) + 16 \times 4/5{ bes'32( c bes aes bes]) } + \set subdivideBeams = ##f + \ottava #1 16 \appoggiatura f8 16\) +} + +upperVoiceTwo = \relative c'' { + \voiceTwo + s8 c8\< [ c' \!] + s32 s32_\appassmolto s8. \voiceOne r8 -> s4 + \override Stem #'cross-staff = ##t + \override Stem #'length = #28 + \override Stem #'flag-style = #'no-flag + s8 \voiceTwo g,8 aes4 s4 +} + +middleVoiceOne = \relative c' { + \override Stem #'cross-staff = ##t + \override Stem #'length = #32 + \override Stem #'flag-style = #'no-flag + d!8\noBeam s8 s8 s8_\crmolto s4 % 1 + s4 8[ ] \voiceOne e,8( dis16 e) | % 2 + \revert Stem #'length + \revert Stem #'cross-staff + \showStaffSwitch + \csh \stemUp f4 s2 + %s2. % beginning m. 3 +} + +middleVoiceTwo = \relative c' { + s2. | % 1 + \override Stem #'cross-staff = ##t + \override Stem #'length = #24 + \override Stem #'flag-style = #'no-flag + s2 \voiceTwo e!4 | % 2 + s4 \voiceTwo 8 16 d' 8 | % 3 +} + +lowerVoiceOne = \relative c, { + \override Staff.NoteCollision #'merge-differently-headed = ##t + \override Staff.NoteCollision #'merge-differently-dotted = ##t + bes8 \csm \stemDown 8 s2 + \csl \stemUp + \set subdivideBeams = ##t + \set baseMoment = #(ly:make-moment 1 16) + \set beatStructure = #'(4 4 4) + s8 \hideNotes \slurUp \stemDown + es,,64( bes'' s64 \unHideNotes \stemUp g64[ bes c d c]) s2 + \set subdivideBeams = ##f + bes,,8 \csm \stemDown 8 s2 +} + +lowerVoiceTwo = \relative c, { + \voiceTwo + bes2. + \csh + \once \override Beam #'damping = #+inf.0 + 8 \csl \slurUp + %\once\override Slur #'extra-offset = #'(0 . 4) + es,,64 bes' es g s32. + c64 + s4 + bes,,2. +} + + +\score { + \new PianoStaff << + \set PianoStaff.connectArpeggios = ##t +% \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket + \new Staff = "high" << + \global + \context Voice = "upperVoiceOne" { \upperVoiceOne } + \context Voice = "upperVoiceTwo" { \upperVoiceTwo } + >> + \new Staff = "middle" << + \global + \context Voice = "middleVoiceOne" { \middleVoiceOne } + \context Voice = "middleVoiceTwo" { \middleVoiceTwo } + >> + \new Staff = "low" << + \clef bass + \global + \context Voice = "lowerVoiceOne" { \lowerVoiceOne } + \context Voice = "lowerVoiceTwo" { \lowerVoiceTwo } + >> + >> + \layout { + \context { + \Score + \override TimeSignature #'stencil = ##f + \remove "Bar_number_engraver" + } + } + %{\midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 120 4) + } + }%} +} diff --git a/Documentation/web/ly-examples/orchestra.ly b/Documentation/web/ly-examples/orchestra.ly new file mode 100644 index 0000000000..4f8726da9e --- /dev/null +++ b/Documentation/web/ly-examples/orchestra.ly @@ -0,0 +1,574 @@ +\version "2.14.0" + +\header { + tagline = ##f + title = "Violent Dance For Orchestra" + composer = "Hu Haipeng" +% arranger = "July 5, 2009" + +% poet = " I'm writing this piece because I'm terribly frustrated, facing a task which will seriously stain my aesthetics and conviction to the true art. It consists of all kinds of devils, dancing and whirling violently, turning the world into an abyss of darkness. Although the main melodies are derived from folk music, these are only a beautiful skin, and the essence of this piece is violent and evil, full of my 10 years' pain and rage. It's a large volcano of my long repressed heart!" +} + +\paper{ + line-width = 158\mm +} + +%% markups +#(define-markup-list-command (paragraph layout props args) (markup-list?) + (let ((indent (chain-assoc-get 'par-indent props 2))) + (interpret-markup-list layout props + (make-justified-lines-markup-list (cons (make-hspace-markup indent) + args))))) + +#(define-markup-command (vspace layout props amount) (number?) + "This produces a invisible object taking vertical space." + (let ((amount (* amount 3.0))) + (if (> amount 0) + (ly:make-stencil "" (cons -1 1) (cons 0 amount)) + (ly:make-stencil "" (cons -1 1) (cons amount amount))))) + +%% text defs +presto = \markup { \bold \italic "Presto" } +div = \markup { \bold "Div." } +nondiv = \markup { \bold "Non div." } +unis = \markup { \bold "Unis." } +piz = \markup { \bold "Pizz." } +arc = \markup { \bold "Arco" } +pizz = \set Staff.midiInstrument = "pizzicato strings" +arco = \set Staff.midiInstrument = "string ensemble 1" +pont = \markup { \bold \italic "Sul ponticello" } +naturale = \markup { \bold \italic "Naturale" } +moltocr = { + \set crescendoText = \markup { \italic "Molto cresc." } + \set crescendoSpanner = #'text + \override DynamicTextSpanner #'style = #'dotted-line +} +offCr = { + \unset crescendoText + \unset crescendoSpanner + \revert DynamicTextSpanner #'style +} + +%% Layout for piano dynamics +\layout { + \context { + \Voice + \override Glissando #'breakable = ##t + \override TextSpanner #'breakable = ##t + \override DynamicLineSpanner #'breakable = ##t + \override DynamicTextSpanner #'breakable = ##t + \override TrillSpanner #'breakable = ##t + } +} + +%% layout to create orchestra staff group +%% with non-spanned barlines between two instrument groups +\layout { + \context { + \StaffGroup + \name Orchestra + \remove "Span_bar_engraver" + } + \context { + \Score + \accepts Orchestra + } +} + +%% Layout to produce SquareStaff context +%% to group similar instruments in a staff group with thin square bracket +\layout { + \context { + \StaffGroup + \name SquareStaff + systemStartDelimiter = #'SystemStartSquare + } + \context { + \Orchestra + \accepts SquareStaff + } + \context { + \StaffGroup + \accepts SquareStaff + } +} + +%% Layout to produce MarkLine context +%% to place rehearsal marks and texts above full score +\layout { + \context { + \type "Engraver_group" + \name "MarkLine" + \consists "Output_property_engraver" + \consists "Axis_group_engraver" + \consists "Mark_engraver" + \consists "Metronome_mark_engraver" + \consists "Script_engraver" + \consists "Text_engraver" + \consists "Text_spanner_engraver" + \consists "Font_size_engraver" + \override VerticalAxisGroup #'staff-affinity = #DOWN + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #2 + \override VerticalAxisGroup #'nonstaff-unrelatedstaff-spacing #'padding = #5 + \override TextSpanner #'breakable = ##t + } + \context { + \Score + \accepts "MarkLine" + } + \context { + \Orchestra + \accepts "MarkLine" + } + \context { + \StaffGroup + \accepts "MarkLine" + } +} + +%% layout to produce a smaller markline +%% put before 1st violin part +\layout { + \context { + \MarkLine + \name "SmallMarkLine" + \override MetronomeMark #'outside-staff-priority = #800 + \override RehearsalMark #'outside-staff-priority = #1200 + } + \context { + \Score + \accepts SmallMarkLine + } + \context { + \Orchestra + \accepts SmallMarkLine + } + \context { + \StaffGroup + \accepts SmallMarkLine + } +} + +modern = +#`(Staff ,(make-accidental-rule 'same-octave 0) + ,(make-accidental-rule 'any-octave 0) + ,(make-accidental-rule 'same-octave 1)) + +\layout { + \context { + \Score + autoAccidentals = #modern + autoCautionaries = #modern + } +} + + marks = \relative c' { + \set markFormatter = #format-mark-box-numbers + \tempo \presto 4.=112 +\set Score.currentBarNumber = #11 + s2.*4 | + s1*9/8 | + } + + piccolo = \relative c'''' { + \clef treble \key ees \minor \time 6/8 + \transposition c'' + R2. + ges,16(\mf\< ees c ees ges bes) c( bes ges bes c ees) | + ges8-.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + flutes = \relative c'''' { + \clef treble \key ees \minor \time 6/8 + R2. + 16(\mf\< ) ( ) | + 8-.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + oboes = \relative c''' { + \clef treble \key ees \minor \time 6/8 + R2. | + 4(\mf\< 8 4 8) | + -.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + clarinets = \relative c' { + \clef treble \key f \minor \time 6/8 + \transposition bes + 4(\p\< 8) 4( 8) | + 4( 8) 4( 8) | + -.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + bassoons = \relative c, { + \clef bass \key ees \minor \time 6/8 + 4.\pp\< c'^"a2" | + bes8-. bes-. bes-. ges-. ges-. ges-. | + ees-.->\!\ff \offCr 4\pp ~ 4. ~ | 2. | + \time 9/8 + ges4\p^"I" aes8 aes ees ges ges4 aes16( ges) | + } + + hornI = \relative c'' { + \clef treble \key bes \minor \time 6/8 + \transposition f + r4 r8 4.\p\< ~ | + 8-. -. -. -. -. -. | + -.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + r4 r8 2.\pp | + } + + hornII = \relative c'' { + \clef treble \key bes \minor \time 6/8 + \transposition f + \moltocr 2.\pp\< ~ | + 8-. -. -. -. -. -. | + -.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + 2.\pp 4. ~ | + } + + trumpetI = \relative c''' { + \clef treble \key f \minor \time 6/8 + \transposition bes +R2. | + r4 r8 -.\f\< -. -. | + -.->\!\ff r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + trumpetII = \relative c'' { + \clef treble \key f \minor \time 6/8 + \transposition bes +R2. | + r8 d-.\mf\< d-. d-. d-. d-. | + d-.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + trombones = \relative c' { + \clef tenor \key ees \minor \time 6/8 + r4 r8 4.\mp\< ~ | + 8-. -. -. -. -. -. | + -.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + tuba = \relative c,, { + \clef bass \key ees \minor \time 6/8 + 4.(\pp\< | + 8-.) -. -. -. -. -. | + -.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + timpani = \relative c { + \clef bass \key ees \minor \time 6/8 + ees8\< ees ees ees ees ees | + bes bes bes bes bes bes | + ees,->\!\f \offCr ees'\pp ees ees ees ees | + ees ees ees ees ees ees | + \time 9/8 + ees r r r4 r8 r4 r8 | + } + + trian = \relative c' { + \clef percussion \time 6/8 + R2.*4 | + \time 9/8 + R1*9/8 | + } + + cym = \relative c' { + \clef percussion \time 6/8 + R2.*4 | + \time 9/8 + R1*9/8 | + } + + tamt = \relative c' { + \clef percussion \time 6/8 +R2. | + r4 r8 r c4\mf\<^"*" ~ | + c8\!\ff r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + tamb = \relative c' { + \clef percussion \time 6/8 + R2.*4 | + \time 9/8 + R1*9/8 | + } + + snare = \relative c' { + \clef percussion \time 6/8 + R2.*4 | + \time 9/8 + c8\pp c c c c c c c c | + } + + bsdrum = \relative c' { + \clef percussion \time 6/8 + c2.:32\pp\< ~ | c: ~ | + c8\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + c2.:32\pp ~ c4.: | + } + + harprh = \relative c'' { + \clef treble \key ees \minor \time 6/8 + \showStaffSwitch + R2.*4_\markup { \harp-pedal #"--^|^^^^" } | + \time 9/8 + R1*9/8 | + } + + harplh = \relative c { + \clef bass \key ees \minor + \showStaffSwitch + R2.*4 | + R1*9/8 | + } + + dynamics = { + s2.*4 | + s1*9/8 | + } + + + violinI = \relative c'''' { + \clef treble \key ees \minor \time 6/8 + ges,,16(\pp\< ees c ees ges bes) c( bes ges bes c ees) | + ges( ees c ees ges bes) c( bes ges bes c ees) | + ges8-.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + R1*9/8 | + } + + violinII = \relative c''' { + \clef treble \key ees \minor \time 6/8 + c,,16(\pp\< bes ges bes c ees) ges( ees c ees ges bes) | + c( bes ges bes c ees) ges( ees c ees ges bes) | + c8-.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + r4 r8 \repeat tremolo 6 { c,,32->\pp^\pont e } r4 r8 | + } + + viola = \relative c { + \clef alto \key ees \minor \time 6/8 + 8-.\pp\< -. -. -. -. -. | + -. -. -. -. -. -. | + -.->\!\ff \offCr r r r4 r8 | R2. | + \time 9/8 + \repeat tremolo 12 { ges,32->^\pont bes } \repeat tremolo 6 {ges->( bes) } | + } + + cello = \relative c { + \clef bass \key ees \minor \time 6/8 + 8-.\pp\< -. -. -. -. -. | + -. -. -. -. -. -. | + 8-.->\!\ff \offCr -.\pp -. -. -. -. | + -. r r r4 r8 | + \time 9/8 + \repeat tremolo 12 32(^\pont \repeat tremolo 12 \repeat tremolo 12 ) | + } + + contrabass = \relative c { + \clef bass \key ees \minor \time 6/8 + \transposition c + 8-.\pp\< ees-. ees-. c-. c-. c-. | + bes-. bes-. ges-. ges-. ges-. ges-. | + ees-.->\!\ff \offCr -.\pp -. -. -. -. | + -. -. -. -. -. -. | + \time 9/8 + -. -. -. -. -. -. -. -. -. | + } + + #(set-global-staff-size 10) + + \score { + \new Orchestra = "orchestra" << + \set Score.skipBars = ##f + \new MarkLine { \marks } + \new StaffGroup = "woodwind" << + \new SquareStaff = "picc fl" << + \new Staff = "piccolo" { + \set Staff.instrumentName = "Piccolo" + \set Staff.shortInstrumentName = "Picc." + \piccolo + } + \new Staff = "flutes" { + \set Staff.instrumentName = "Flutes I & II" + \set Staff.shortInstrumentName = "Fl." + \flutes + } + >> + \new Staff = "oboes" { + \set Staff.instrumentName = "Oboes I & II" + \set Staff.shortInstrumentName = "Ob." + \oboes + } + \new Staff = "clarinets" { + \set Staff.instrumentName = \markup { + \column { \line { "Clarinets I & II" } + \line { "in B" \smaller \flat } } } + \set Staff.shortInstrumentName = "Cl." + \clarinets + } + \new Staff = "bassoons" { + \set Staff.instrumentName = "Bassoons I & II" + \set Staff.shortInstrumentName = "Bn." + \bassoons + } + >> + \new StaffGroup = "brass" << + \new SquareStaff = "horns" << + \new Staff = "hornsI" { + \set Staff.instrumentName = \markup { + \column { \line { "Horns I & II" } + \line { "in F" } } } + \set Staff.shortInstrumentName = "Hn. I & II" + \hornI + } + \new Staff = "hornsII" { + \set Staff.instrumentName = \markup { + \column { \line { "Horns III & IV" } + \line { "in F" } } } + \set Staff.shortInstrumentName = "Hn. III & IV" + \hornII + } + >> + \new SquareStaff = "trumpets" << + \new Staff = "trumpetI" { + \set Staff.instrumentName = \markup { + \column { \line { "Trumpets I & II" } + \line { "in B" \smaller \flat } } } + \set Staff.shortInstrumentName = "Tp. I & II" + \trumpetI + } + \new Staff = "trumpetII" { + \set Staff.instrumentName = \markup { + \column { \line { "Trumpet III" } + \line { "in B" \smaller \flat } } } + \set Staff.shortInstrumentName = "Tp. III" + \trumpetII + } + >> + \new SquareStaff = "trombones" << + \new Staff = "trombones 1 & 2" { + \set Staff.instrumentName = "Trombones I & II" + \set Staff.shortInstrumentName = "Tb. I & II" + \trombones + } + \new Staff = "tuba" { + \set Staff.instrumentName = "Bass trombone & Tuba" + \set Staff.shortInstrumentName = "Btb. & Tu." + \tuba + } + >> + >> + \new Staff = "timpani" { + \set Staff.instrumentName = "Timpani in A, D & E" + \set Staff.shortInstrumentName = "Tim." + \timpani + } + \new GrandStaff = "drums" << + \new RhythmicStaff = "triangle" { + \set RhythmicStaff.instrumentName = "Triangle" + \set RhythmicStaff.shortInstrumentName = "Tri." + \trian + } + \new RhythmicStaff = "cymbals" { + \set RhythmicStaff.instrumentName = "Suspended cymbal" + \set RhythmicStaff.shortInstrumentName = "Susp. cym." + \cym + } + \new RhythmicStaff = "tamtam" { + \set RhythmicStaff.instrumentName = "Tamtam" + \set RhythmicStaff.shortInstrumentName = "Tamt." + \tamt + } + \new RhythmicStaff = "tambourine" { + \set RhythmicStaff.instrumentName = "Tambourine" + \set RhythmicStaff.shortInstrumentName = "Tamb." + \tamb + } + \new RhythmicStaff = "snare" { + \set RhythmicStaff.instrumentName = "Snare drum" + \set RhythmicStaff.shortInstrumentName = "Sn." + \snare + } + \new RhythmicStaff = "bass drum" { + \set RhythmicStaff.instrumentName = "Bass drum" + \set RhythmicStaff.shortInstrumentName = "Bd." + \bsdrum + } + >> + \new PianoStaff = "harp" << + \set PianoStaff.instrumentName = "Harp" + \set PianoStaff.shortInstrumentName = "Hrp." + \set PianoStaff.connectArpeggios = ##t + \new Staff = "rh" { \harprh } + \new Dynamics { \dynamics } + \new Staff = "lh" { \harplh } + >> + \new SmallMarkLine { \marks } + \new StaffGroup = "strings" << + \new SquareStaff = "violins" << + \new Staff = "violin I" { + \set Staff.instrumentName = "Violin I" + \set Staff.shortInstrumentName = "Vn. I" + \violinI + } + \new Staff = "violin II" { + \set Staff.instrumentName = "Violin II" + \set Staff.shortInstrumentName = "Vn. II" + \violinII + } + >> + \new Staff = "viola" { + \set Staff.instrumentName = "Viola" + \set Staff.shortInstrumentName = "Vl." + \viola + } + \new SquareStaff = "Cello and Bass" << + \new Staff = "violoncello" { + \set Staff.instrumentName = "Violoncello" + \set Staff.shortInstrumentName = "Vc." + \cello + } + \new Staff = "contrabass" { + \set Staff.instrumentName = "Contrabass" + \set Staff.shortInstrumentName = "Cb." + \contrabass + } + >> + >> + >> + \layout { + \context { + \Score + \remove "Mark_engraver" + \remove "Metronome_mark_engraver" + } + \context { + \Staff \RemoveEmptyStaves + } + } + } + diff --git a/Documentation/web/ly-examples/sesto-full.ly b/Documentation/web/ly-examples/sesto-full.ly new file mode 100644 index 0000000000..7f62973461 --- /dev/null +++ b/Documentation/web/ly-examples/sesto-full.ly @@ -0,0 +1,69 @@ +%%% G.F Haendel, Giulio Cesare in Egitto +%%% Act I, scene IV +%%% Sesto: Svegliatevi nel core, furie d'un alma offesa (excerpt) +%%% +%%% Nicolas Sceaux + +\version "2.14.0" +\include "sesto.ily" + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% +%%% Lead sheet +%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\book { + \paper { + #(layout-set-staff-size 14) + } + \score { + \new StaffGroupNoBar << + \new StaffGroupNoBracket << + \new Staff << + \set Staff.instrumentName = "Violino I." + \global \clef treble \keepWithTag #'violin \violinoI + >> + \new Staff << + \set Staff.instrumentName = "Violino II." + \global \clef treble \keepWithTag #'violin \violinoII + >> + >> + \new Staff << + \new Voice = "sesto" \with { autoBeaming = ##f } << + \set Staff.instrumentName = \markup \smallCaps Sesto. + \global \clef treble \sesto + >> + \lyricsto "sesto" \new Lyrics \sestoLyrics + >> + \new Staff << + \set Staff.instrumentName = "Bassi." + \global \clef bass \bassi + >> + >> + \layout { + indent = 20\mm + \context { + \Score + \accepts "StaffGroupNoBar" + skipBars = ##t + } + \context { + \StaffGroup + \name StaffGroupNoBar + \description "Like StaffGroup, but without spanbar" + \remove "Span_bar_engraver" + \accepts "StaffGroupNoBracket" + } + \context { + \StaffGroup + \name StaffGroupNoBracket + \description "Like StaffGroup, but without brackets" + \remove "System_start_delimiter_engraver" + } + } +% \midi { } + } +} + + diff --git a/Documentation/web/ly-examples/sesto-piano.ly b/Documentation/web/ly-examples/sesto-piano.ly new file mode 100644 index 0000000000..0d2a5ffdd5 --- /dev/null +++ b/Documentation/web/ly-examples/sesto-piano.ly @@ -0,0 +1,46 @@ +%%% G.F Haendel, Giulio Cesare in Egitto +%%% Act I, scene IV +%%% Sesto: Svegliatevi nel core, furie d'un alma offesa (excerpt) +%%% +%%% Nicolas Sceaux + +\version "2.14.0" +\include "sesto.ily" + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% +%%% Reduction +%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\book { + \header { instrument = "Vocal part and keyboard reduction" } + \paper { + #(layout-set-staff-size 16) + } + \score { + << + \new Staff << + \new Voice = "sesto" \with { autoBeaming = ##f } << + \set Staff.instrumentName = \markup \smallCaps Sesto. + \global \clef treble \sesto + >> + \lyricsto "sesto" \new Lyrics \sestoLyrics + >> + \new PianoStaff << + \new Staff << + \global \clef treble + \partcombine \keepWithTag #'reduction \violinoI \keepWithTag #'reduction \violinoII + >> + \new Staff << + \global \clef bass \bassi + >> + >> + >> + \layout { + indent = 20\mm + \context { \Voice printPartCombineTexts = ##f } + } + } +} + diff --git a/Documentation/web/ly-examples/sesto-violin.ly b/Documentation/web/ly-examples/sesto-violin.ly new file mode 100644 index 0000000000..89970512ab --- /dev/null +++ b/Documentation/web/ly-examples/sesto-violin.ly @@ -0,0 +1,27 @@ +%%% G.F Haendel, Giulio Cesare in Egitto +%%% Act I, scene IV +%%% Sesto: Svegliatevi nel core, furie d'un alma offesa (excerpt) +%%% +%%% Nicolas Sceaux + +\version "2.14.0" +\include "sesto.ily" + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% +%%% Violino I +%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\book { + \header { instrument = "Violino I" } + \paper { + #(layout-set-staff-size 18) + } + \score { + \new Staff << + \global \clef treble \keepWithTag #'violin \violinoI + >> + \layout { indent = 5\mm } + } +} diff --git a/Documentation/web/ly-examples/sesto.ily b/Documentation/web/ly-examples/sesto.ily new file mode 100644 index 0000000000..899d3cc0c7 --- /dev/null +++ b/Documentation/web/ly-examples/sesto.ily @@ -0,0 +1,219 @@ +%%% G.F Haendel, Giulio Cesare in Egitto +%%% Act I, scene IV +%%% Sesto: Svegliatevi nel core, furie d'un alma offesa (excerpt) +%%% +%%% Nicolas Sceaux + +\version "2.12.2" +\header { + title = "Giulio Cesare in Egitto" + subtitle = "Sesto: Svegliatevi nel core, furie d'un alma offesa (excerpt)" + composer = "G.F Handel" +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% +%%% Notes and lyrics +%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +sesto = { + R1*6 | + r4 r8 g' c'' ees''16[ d''] c''8 c'' | + c'' g' ees''4 ~ ees''8 d''16 ees'' f''8 aes' | + aes' g' r c'' c'' b'16[ c''] d''8 g' | + +%{ + %%10 + f'4 r8 d'' ees'' d''16[ c''] b'4 | + c'' r8 c'' c''8. c'16 c'4 | + r r8 c'' aes' c''16[ bes'] aes'8 g' | + f' f' r4 bes'8 bes'16 aes' g'8 f' | + ees' ees' r ees'' ees'' d''16[ ees''] f''8 bes' | + %%15 + aes'4. bes'8 g' ees'' f'4 | + ees' r8 ees'' ees''8. ees'16 ees'4 | + r r8 c'' c''8. c'16 c'4 | + r r8 c'' c'' d''16[ ees''] f''8 ees'' | + d'' bes' r4 bes'8 c''16 d'' ees''8 d'' | + %%20 + c'' c'' r c'' f' f''16[ ees''] d''8 c'' | + b'16[ a'] g'8 r4 ees''8 ees''16 d'' c''8 bes' | + aes' g' r g' aes' f' d'' b' | + f''2 ~ f''8 d'' b' g' | + ees'4 r8 d'' ees'' d''16[ c''] b'4 | + %%25 + c'' r8 g' c'' g' ees' g' | + c'4 r8 g' aes' f' d'' b' | + f''2 ~ f''8 d'' b' g' | + ees'4 r8 g'' ees'' d''16[ c''] b'4 | + c''2 r | + %%30 + R1*5 | +%} +} + +sestoLyrics = \lyricmode { + Sve -- glia -- te -- vi nel co -- re, + fu -- rie "d'un" al -- "ma of" -- fe -- sa, +%{ + a far "d'un" tra -- di -- tor a -- spra ven -- det -- ta! + sve -- glia -- te -- vi, + sve -- glia te -- vi nel co -- re, + fu -- rie d'un al -- "ma of" -- fe -- sa, + a far "d'un" tra -- di -- tor as -- pra ven -- det -- ta, + sve -- glia -- te -- vi, + sve -- glia -- te -- vi, + sve -- glia -- te -- vi nel co -- re, + fu -- rie d'un al -- "ma of" -- fe -- sa, + sve -- glia -- te -- vi nel co -- re, + fu -- rie d'un al -- "ma of" -- fe -- sa, + a far d'un tra -- di -- tor, __ + d'un tra -- di -- tor as -- spra ven -- det -- ta, + a far d'un tra -- di -- tor, + a far d'un tra -- di -- tor, __ + d'un tra -- di -- tor as -- pra ven -- det -- ta! +%} +} + +violinoI = { + r4 r8 g' c'' ees''16 d'' c''8 c'' | + c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' | + aes' g' r c'' c''8.^\trill b'32 c'' d''8 g' | + f'4. d''8 ees'' d''16 c'' b'4 | + %%5 + c''16 g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' | + c'' g'' f'' g'' ees'' g'' f'' g'' aes''8 g''16 f'' f''4^\trill | + ees'' r8 g'_\p c'' ees''16 d'' c''8 c'' | + c'' g' ees''4 ~ ees''8 d''16 ees'' f''8 aes' | + aes' g' r c'' c'' b'16 c'' d''8 g' | +%{ + %%10 + f'4 r8 d'' ees'' d''16 c'' b'4 | + c''16 g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' | + ees'' g'' f'' g'' ees'' g'' f'' g'' aes''8 aes' r4 | + d''16 f'' ees'' f'' d'' f'' ees'' f'' g''8 g' r4 | + ees'16 g' f' g' ees'8 ees'' ees'' d''16 ees'' f''8 bes' | + %%15 + aes'4. bes'8 g' ees'' d''4 | + ees''16 bes'' aes'' bes'' g'' bes'' aes'' bes'' g'' bes'' aes'' bes'' g'' bes'' aes'' bes'' | + g'' g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' | + ees'' g'' f'' g'' ees'' g'' f'' g'' aes'' c'' c'' bes' aes' c'' bes' c'' | + d'' f'' ees'' f'' d'' f'' ees'' f'' g'' bes' bes' aes' g' bes' aes' bes' | + %%20 + c'' ees'' ees'' f'' g'' ees'' f'' g'' aes'' f'' g'' ees'' f'' d'' ees'' c'' | + \tag #'violin { g'' g' g'' g'' } \tag #'reduction { g'' d'' g'' g'' } g'' b' g'' g'' g'' f'' ees'' d'' c''8 bes' | + aes' g' r g' aes' f' d'' b' | + f''2 ~ f''8 d'' b' g' | + ees'16 c' g' ees' c'' g' g'' d'' g'4 r | + %%25 + c'''16 ees''' d''' ees''' c''' ees''' d''' ees''' g'' c''' b'' c''' g'' c''' b'' c''' | + ees'' g'' f'' g'' ees'' g'' f'' g'' \tag #'violin { aes'8 f' } \tag #'reduction { c''8 aes' } d'' b' | + f''2 ~ f''8 d'' b' g' | + ees'4^\fermata r r2 | + r4 r8 c'_\f c'' ees''16 d'' c''8 c'' | + %%30 + c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' | + aes' g' r g' aes' f' d'' b' | + f''2 ~ f''8 d'' b' g' | + c''16 g'' f'' g'' ees'' g'' f'' g'' c'' g'' f'' g'' ees'' g'' f'' g'' | + b'8 c''16 d'' ees''8 d'' c''4^\fermata r +%} +} + +violinoII = { + r4 r8 g' c'' ees''16 d'' c''8 c'' | + c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' | + aes' g' r c'' c''8.^\trill b'32 c'' d''8 g' | + f'4. d''8 ees'' d''16 c'' b'4 | + %%5 + c''16 ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' | + c'' ees'' d'' ees'' c'' ees'' d'' ees'' d''8[ ees''] ees'' d'' | + ees''4 r8 g' c'' ees''16 d'' c''8 c'' | + c'' g' ees''4 ~ ees''8 d''16 ees'' f''8 aes' | + aes' g' r c'' c'' b'16 c'' d''8 g' | +%{ + %%10 + f'4 r8 d'' ees'' d''16 c'' b'4 | + c''16 ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' | + c'' ees'' d'' ees'' c'' ees'' d'' ees'' f''8 f' r4 | + bes'16 d'' c'' d'' bes' d'' c'' d'' ees''8 ees' r4 | + c'16 ees' d' ees' c'8 ees'' ees'' d''16 ees'' f''8 bes' | + %%15 + aes'4. bes'8 g' ees'' d''4 | + ees''16 g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' | + ees'' ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' | + c'' ees'' d'' ees'' c'' ees'' d'' ees'' f'' aes' aes' g' f' aes' g' aes' | + bes' d'' c'' d'' bes' d'' c'' d'' ees'' g' g' f' ees' g' f' g' | + %%20 + aes' c'' c'' d'' ees'' c'' d'' ees'' f'' d'' ees'' c'' d'' b' c'' a' | + \tag #'violin { b' d' d' b' } \tag #'reduction { b' g' d'' b' } b' g' b' d'' g'' f'' ees'' d'' c''8 bes' | + d' ees' r g' aes' f' d'' b' | + f''2 ~ f''8 d'' b' g' | + ees'16 c' g' ees' c'' g' g'' d'' g'4 r | + %%25 + ees''16 g'' f'' g'' ees'' g'' f'' g'' ees'' ees'' d'' ees'' c'' ees'' d'' ees'' | + g' ees'' d'' ees'' c'' ees'' d'' ees'' \tag #'violin { c''8 aes' } \tag #'reduction { aes'8 f' } f' d' | + f''2 ~ f''8 d'' b' g' | + ees'4^\fermata r r2 | + r4 r8 c' c'' ees''16 d'' c''8 c'' | + %%30 + c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' | + aes' g' r g' aes' f' d'' b' | + f''2 ~ f''8 d'' b' g' | + c''16 ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' | + d'8 ees'16 f' g'8 b' c''4^\fermata r +%} +} + +bassi = { + c4 r8 g c' ees'16 d' c'8 c' | + c' c r g aes f bes bes, | + ees ees, r c ees c g ees | + aes f d' b c' f g g, | + %%5 + c4 r c'8 c bes bes, | + aes aes, g g, f ees bes bes, | + ees4 r r r8 c_\p | + c' ees'16 d' c'8 bes aes f bes bes, | + ees ees, r c ees c g ees | +%{ + %%10 + aes f d' b c' f g g, | + c4 r r r8 c' | + c'8. c16 c4 r8 f d ees | + bes bes, r bes g aes bes g | + c' c c' bes16 aes g8 ees bes g | + %%15 + c' c d bes, ees g bes bes, | + ees4 r r r8 ees' | + ees'8. ees16 ees4 r r8 c' | + c'8. c16 c8 c' aes f r f | + bes bes, bes, bes g ees r ees | + %%20 + aes aes, g g, f f, r f | + g g, r4 c'8 g aes g | + f ees r4 r r8 g, | + aes, f, d b, aes f d' b | + c'4 r8 b c' f g g, | + %%25 + c' g c g, c,4 r | + c'8 g c c' f4 r8 g, | + aes, f, d b, aes f d' b | + c'4 r8 b c' f g g, | + c4 r8 c_\f c' ees'16 d' c'8 c' | + %%30 + c' c r g aes f bes bes, | + ees g ees c f,4 r8 g, | + aes, f, d b, aes f d' b | + c' c bes bes, aes aes, g g, | + f c g g, c4^\fermata r +%} +} + +global = { + \key c \minor + \set Score . tempoWholesPerMinute = #(ly:make-moment (/ 80 4) 1 0 1) + \time 4/4 +%s1*34 \bar "|." +} + diff --git a/Documentation/web/ly-examples/tab-example.ly b/Documentation/web/ly-examples/tab-example.ly new file mode 100644 index 0000000000..3f9a8d33c9 --- /dev/null +++ b/Documentation/web/ly-examples/tab-example.ly @@ -0,0 +1,90 @@ +\version "2.14.0" + +#(set-global-staff-size 22.45) + +#(define (glissando::calc-extra-dy grob) + (let* ((original (ly:grob-original grob)) + (left-bound (ly:spanner-bound original LEFT)) + (right-bound (ly:spanner-bound original RIGHT)) + (left-pitch (ly:event-property (event-cause left-bound) 'pitch)) + (right-pitch (ly:event-property (event-cause right-bound) 'pitch))) + + (if (and (= (ly:pitch-octave left-pitch) (ly:pitch-octave right-pitch)) + (= (ly:pitch-notename left-pitch) (ly:pitch-notename right-pitch))) + (- (ly:pitch-alteration right-pitch) (ly:pitch-alteration left-pitch)) + 0 ))) + +% Hide fret number: useful to draw slide into/from a casual point of +% the fretboard. +hideFretNumber = { + \once \override TabNoteHead #'transparent = ##t + \once \override TabNoteHead #'whiteout = ##f + \once \override NoteHead #'transparent = ##t + \once \override Stem #'transparent = ##t + \once \override NoteHead #'no-ledgers = ##t +} + +\paper { + indent= #0 + line-width= #180 +} + +upper= \relative c' { + \time 4/4 + \key e \major + \set Staff.midiInstrument = #"acoustic guitar (steel)" + \set fingeringOrientations = #'(left) + + \partial 4. \acciaccatura c16 \glissando cis8 e4 + < cis-1 g'-3 >2 s8 \grace a16 ( \glissando < b-2 >8\3 ) < d-1 > ( b ) + < e-3 >\2 ( b ) \grace < ais-2 >16 ( \glissando a8 g ) s4. + s4. < d'\3 g\2 >8 < gis,\4 d'\3 fis\2 >2\arpeggio ~ + < gis\4 d'\3 fis\2 >2 < b'\2\harmonic e\harmonic >2\fermata +} + +lower= \relative c { + \set fingeringOrientations = #'(left) + + \partial 4. s4. + s4 e,4 s2 + s2 s8 < e'-3 >4. ~ + e4 \hideFretNumber \grace { b8 \glissando s4 } < e-2 >4\5 e,2 ~ + e2 < e'\6\harmonic > +} + +\score { + \new StaffGroup << + \new Staff = "guitar" << + \context Voice = "upper guitar" { + \clef "G_8" \voiceOne + \override Glissando #'gap = #0.5 + \override Glissando #'extra-offset = #'(-0.5 . 0) + \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods + \override Glissando #'minimum-length = #4 + \override Glissando #'extra-dy = #glissando::calc-extra-dy + \upper + } + \context Voice = "lower guitar" { + \clef "G_8" \voiceTwo + \override Glissando #'bound-details #'right #'padding = #1 + \override Glissando #'bound-details #'left #'padding = #0.2 + \lower + } + >> + \new TabStaff = "tab" << + \context TabVoice = "upper tab" { \clef "moderntab" \voiceOne \upper } + \context TabVoice = "lower tab" { \clef "moderntab" \voiceTwo \lower } + >> + >> + + \layout { + \context { + \Staff + \override StringNumber #'transparent = ##t + } + \context { + \TabStaff + \revert Arpeggio #'stencil + } + } +} diff --git a/Documentation/web/ly-examples/theory.ly b/Documentation/web/ly-examples/theory.ly new file mode 100644 index 0000000000..cca033a6df --- /dev/null +++ b/Documentation/web/ly-examples/theory.ly @@ -0,0 +1,63 @@ +\version "2.14.0" +\include "example-header.ily" + +#(ly:set-option 'point-and-click #f) + +global = { + \time 4/4 + \numericTimeSignature + \key c \major + #(set-global-staff-size 24) +} + +cf = \relative c { + \clef bass + \global + c4 c' b a | + g a f d | + e f g g, | + c1 +} + +upper = \relative c'' { + \global + r4 s4 s2 | + s1*2 | + s2 s4 s + \bar "||" +} + +bassFigures = \figuremode { + s1*2 | s4 <6> <6 4> <7> | s1 +} + +\markup { "Exercise 3: Write 8th notes against the given bass line." } + +\score { + \new PianoStaff << + \new Staff { + \context Voice = "added voice" \with { + \consists "Balloon_engraver" + } + \upper + } + + \new Staff = lower { + << +% \context Voice = "cantus firmus" \with { +% \consists "Balloon_engraver" +% } + \context Staff = lower \cf + \new FiguredBass \bassFigures + >> + } + >> + \layout {} + %{\midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 120 4) + } + }%} +} + diff --git a/Documentation/web/manuals.itexi b/Documentation/web/manuals.itexi new file mode 100644 index 0000000000..661421b29b --- /dev/null +++ b/Documentation/web/manuals.itexi @@ -0,0 +1,573 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + + When revising a translation, copy the HEAD committish of the + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. +@end ignore + +@node Manuals +@unnumbered Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, details of \reference\}) +@spanEnd +@end macro + +@divClass{heading-center} +@ifclear web_version + @heading Manuals for LilyPond @version +@end ifclear +@ifset web_version + @heading Manuals for LilyPond @versionStable +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} +@subheading Introduction + +@itemize + +@item +@ref{Text input}: +LilyPond is a @strong{text-based} music engraver. Read this first! + +@item +@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Learning}} +a @qq{must-read} gentle introduction to LilyPond. +@details{Learning} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossary}} +@emph{(optional reading)} musical terms and translations. +@details{Glossary} + +@item +@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}} +@emph{(optional reading)} background information about computer engraving. +@details{Essay} + +@end itemize + +@divEnd + +@divClass{column-left-top} +@subheading Regular use + +@itemize + +@item +@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notation}} +syntax reference. +@details{Notation} + +@item +@ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Usage}} +running the programs. +@details{Usage} + +@item +@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}} +short tricks and tips. +@details{Snippets} + +@end itemize + +@divEnd + + +@divClass{column-right-top} +@subheading Infrequent Use + +@itemize + +@item +@ref{FAQ}: +Frequently Asked Questions. + +@item +@ref{Top, Web}: +this document. +@details{Web} + +@item +@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}} +what's new? +@details{Changes} + +@item +@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}} +fancy tweaks. +@details{Extending} + +@item +@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}} +tweaks reference. +@details{Internals} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} +@subheading Other material + +@itemize + +@item +@ref{Translated}: +translation status for non-English readers. + +@item +@ref{All}: +downloadable and old manuals. + +@item +@ref{Development}: +manuals for the unstable version. + +@item +@ref{FDL}: +these manuals are published under the GNU Free Documentation License. + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} +@menu +* Learning:: Learning. +* Glossary:: Glossary. +* Essay:: Essay. +* Notation:: Reference. +* Usage:: Usage. +* Snippets:: Snippets. +* FAQ:: FAQ. +* Web:: Web. +* Changes:: NEWS. +* Extending:: Programming. +* Internals:: Internals. +* Translated:: Translation. +* All:: All manuals. +* FDL:: Licence. +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node Learning +@unnumberedsec Learning + +@divClass{column-left-top} +@subheading Learning manual + +This book explains how to begin learning LilyPond, as well as +explaining some key concepts in easy terms. You should read these +chapters in a linear fashion. + +There is a paragraph @strong{See also} at the end of each section, +which contains cross-references to other sections: you should not +follow these cross-references at first reading. When you have +read all of the manual, you may want to read some sections again +and follow those cross-references for more information. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Learning, learning, + @rlearningnamed{Top,Learning}, + @manualStableLearningSplit, + @manualStableLearningBig, 1.5 MB, + @manualStableLearningPdf, 3 MB} + +@divEnd + + +@node Glossary +@unnumberedsec Glossary + +@divClass{column-left-top} +@subheading Glossary + +This explains musical terms, and includes translations to various +languages. If you are not familiar with music notation or music +terminology (especially if you are a non-native English speaker), +it is highly advisable to consult the glossary. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Music glossary, music-glossary, + @rglosnamed{Top,Music glossary}, + @manualStableGlossarySplit, + @manualStableGlossaryBig, 1 MB, + @manualStableGlossaryPdf, 1.5 MB} + +@divEnd + + +@node Essay +@unnumberedsec Essay + +@divClass{column-left-top} +@subheading Essay + +This book gives a brief history of music typography, followed by +an examination of LilyPond's engraving techniques. A comparison +between LilyPond and other music engraving systems is given. + +@warning{the detailed typographical examples are easier to analyze +in the PDF version due to its higher resolution.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Essay, essay, + @ressaynamed{Top,Essay}, + @manualStableEssaySplit, + @manualStableEssayBig, 2 MB, + @manualStableEssayPdf, 2.5 MB} + +@divEnd + + +@node Notation +@unnumberedsec Notation + +@divClass{column-left-top} +@subheading Notation reference + +This book explains all the LilyPond commands which produce +notation. + +@warning{the Notation reference assumes that the reader knows +basic material covered in the Learning manual and is familiar with +the English musical terms presented in the glossary.} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notation, notation, + @rusernamed{Top,Notation}, + @manualStableNotationSplit, + @manualStableNotationBig, 7 MB, + @manualStableNotationPdf, 18 MB} + +@divEnd + + +@node Usage +@unnumberedsec Usage + +@divClass{column-left-top} +@subheading Usage manual + +This book explains how to execute the programs, how to integrate +LilyPond notation with other programs, and suggests @qq{best +practices} for efficient use. It is recommended reading before +attempting any large projects. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Usage, usage, + @rprogramnamed{Top,Usage}, + @manualStableUsageSplit, + @manualStableUsageBig, 400 KB, + @manualStableUsagePdf, 600 KB} + +@divEnd + + +@node Snippets +@unnumberedsec Snippets + +@divClass{column-left-top} +@subheading Snippets + +This shows a selected set of LilyPond snippets from the +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} +(LSR). All the snippets are in the public domain. + +Please note that this document is not an exact subset of LSR. LSR +is running a stable LilyPond version, so any snippet which +demonstrates new features of a development version must be added +separately. These are stored in @file{Documentation/snippets/new/} in the LilyPond +source tree. + +The list of snippets for each subsection of the Notation are also +linked from the @strong{See also} portion. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Snippets, snippets, + @rlsrnamed{Top,Snippets}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + + +@node FAQ +@unnumberedsec FAQ + +@divClass{column-center-top} +@subheading Introductory questions + +@subsubheading Where are the graphical canvas, menus, and toolbars? + +LilyPond requires you to write music as text. Please read about +our @ref{Text input}. + + +@subsubheading There's a lot of documentation! Do I need to read it? + +You need to read the @ref{Learning, Learning manual}. As for the +rest of documentation, you only need to read the sections which +discuss the notation that you wish to create. + + +@subsubheading That's still a lot of reading! Is it worth it? + +Please decide for yourself; the reasons why you might want to use +LilyPond are given in the @ref{Introduction}. + +@divEnd + +@divClass{column-center-bottom} +@subheading Usage questions + +@subsubheading Something isn't working! How do I fix it? + +This is explained in @rprogram{Troubleshooting}. + + +@subsubheading Why do you change the syntax? + +This is explained in @rprogram{Why does the syntax change?}. + +@divEnd + + +@node Web +@unnumberedsec Web + +@divClass{column-left-top} +@subheading Web + +This manual supplies general information about LilyPond. It also +contains information about various community forums, bug +reporting, and development. + +@divEnd + +@divClass{column-right-bottom} +@subheading Read it + +@subsubheading Latest manual + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading Web manual in @versionDevel + +@docLinksBare{Web, web, + @ref{Top,Web}, + @manualDevelWebSplit, + @manualDevelWebBig, 1 MB, + @manualDevelWebPdf, 2 MB} + +@divEnd + + +@node Changes +@unnumberedsec Changes + +@divClass{column-left-top} +@subheading Changes + +This is a summary of important changes and new features in +LilyPond since the previous stable version. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Changes, changes, + @rchangesnamed{Top,Changes}, + @manualStableChangesSplit, + @manualStableChangesBig, 6 KB, + @manualStableChangesPdf, 200 KB} + +@divEnd + + +@node Extending +@unnumberedsec Extending + +@divClass{column-left-top} +@subheading Extending LilyPond + +This manual explains how to write extensions to LilyPond. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Extending, extending, + @rextendnamed{Top,Extending}, + @manualStableExtendingSplit, + @manualStableExtendingBig, 200 KB, + @manualStableExtendingPdf, 400 KB} + +@divEnd + + +@node Internals +@unnumberedsec Internals + +@divClass{column-left-top} +@subheading Internals reference + +This is a set of heavily cross linked pages which document +the nitty-gritty details of each and every LilyPond class, object, +and function. It is produced directly from the formatting +definitions in the source code. + +Almost all formatting functionality that is used internally is +available directly to the user. For example, most variables that +control thickness values, distances, etc., can be changed in input +files. There are a huge number of formatting options, and all of +them are described in this document. Each section of the Notation +Reference has a @b{See also} subsection, which refers to the +generated documentation. + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Internals, internals, + @rinternalsnamed{Top,Internals}, + @manualStableInternalsSplit, + @manualStableInternalsBig, 2.5 MB, + @manualStableInternalsPdf, 2.8 MB} + +@divEnd + + +@node Translated +@unnumberedsec Translated + +@divClass{column-center-bottom} +@subheading Translations status + +@include translations.itexi + +@divEnd + + +@node All +@unnumberedsec All + +@divClass{column-left-top} +@subheading Downloadable versions + +@ifclear web_version +Downloadable tarballs only available at @uref{http://lilypond.org} +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading Previous stable versions + +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +LilyPond 2.12 Documentation} + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +LilyPond 2.11 Documentation} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +LilyPond 2.10 Documentation} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +LilyPond 2.8 Documentation} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +LilyPond 2.6 Documentation} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +LilyPond 2.4 Documentation} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +LilyPond 2.2 Documentation} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +LilyPond 2.0 Documentation} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +LilyPond 1.8 Documentation} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +LilyPond 1.6 Documentation} + +@end itemize + +@divEnd +@divEnd + + +@node FDL +@unnumberedsec FDL + +@divClass{column-center-top} +@subheading Documentation license + +The documentation for GNU LilyPond is published under the GNU Free +Documentation License. An introduction to this license, and our +reasons for choosing it, is given in @ref{Freedom}. + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU Free Documentation License 1.1 + +@include fdl.itexi + +@divEnd diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi new file mode 100644 index 0000000000..dc7ab194b5 --- /dev/null +++ b/Documentation/web/news-front.itexi @@ -0,0 +1,133 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of lilypond-web.texi and community.itexi + +@c when you add a new item, consider moving the lowest item(s) +@c into news-old.itexi. + +@c keep two blank lines between news entries + +@c used for news about the upcoming release; see CG 10.2 + + +@newsItem +@subsubheading LilyPond 2.14.2 released! @emph{July 22, 2011} + +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 + + +@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 + + + diff --git a/Documentation/web/news.itexi b/Documentation/web/news.itexi new file mode 100644 index 0000000000..fd4631431c --- /dev/null +++ b/Documentation/web/news.itexi @@ -0,0 +1,4361 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@ignore + +(I'd rather have the below in the CG. -gp) +NOTE: + + * avoid "HERE" as name for links, use descriptive link names like + @uref{,Download LilyPond 2.5.16} + + * avoid putting links in running text. They make text harder to read. + Preferably: (@uref{,...}, etc. ) + + * use a descriptive title in @subsubheading + + * writing date in "Month DD, YYYY" format is required for + generating the RSS feed; in case the message (and thus the date) + is not in English, you must write a well-formed date in English + like above in a comment between the closing brace of @emph and the + following line + (see "Japanese translation" below for an example). + + * Split news items in small chunks. It's OK to have more than 1 item + on one day. + + * don't duplicate entries from news-front.itexi +@end ignore + +@newsItem +@subsubheading Release candidate 7 of 2.14 - LilyPond 2.13.63 released! @emph{May 30, 2011} + +LilyPond 2.13.63 is out; this is the seventh release candidate of +the upcoming 2.14 stable release. All users are invited to +experiment with this version. New features since 2.12.3 are +listed in the @qq{Changes} manual on the website section about +@ref{Development}. + +There are no known Critical issues with this release. If no +Critical bugs are found, then the official 2.14.0 release will be +on June 6, 2011. If you discover any problems, please send us +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.62 released! @emph{May 24, 2011} + +We are happy to announce the release of LilyPond 2.13.62. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the next release candidate, +due to a few remaining Critical bugs. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.61 released! @emph{May 1, 2011} + +We are happy to announce the release of LilyPond 2.13.61. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the next release candidate, +due to a few remaining Critical bugs. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.60 released! @emph{April 16, 2011} + +We are happy to announce the release of LilyPond 2.13.60. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the next release candidate, +due to a few remaining Critical bugs. + +@newsEnd + + +@newsItem +@subsubheading Linux Journal Magazine article - @emph{April 2011} + +@uref{http://www.linux-magazine.com,Linux Magazine} publishes an +article in the May 2011 issue titled +@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf, +Projects on the Move}. It is an introduction to MuseScore, +LilyPond and Chordii. Author Carla Schroder states @qq{LilyPond is +driven from the command line, but don’t let the lack of a GUI scare +you away; LilyPond is user-friendly and easy to learn}, and provides +a hands-on example. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.59 released! @emph{April 10, 2011} + +We are happy to announce the release of LilyPond 2.13.59. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the next release candidate, +due to a few remaining Critical bugs. + +@newsEnd + + +@newsItem +@subsubheading Release candidate 6 of 2.14 - LilyPond 2.13.58 released! @emph{April 7, 2011} + +LilyPond 2.13.58 is out; this is the sixth release candidate of +the upcoming 2.14 stable release. All users are invited to +experiment with this version. New features since 2.12.3 are +listed in the @qq{Changes} manual on the website section about +@ref{Development}. + +There are no known Critical issues with this release. If no +Critical bugs are found, then the official 2.14.0 release will be +on April 14, 2011. If you discover any problems, please send us +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading Release candidate 5 of 2.14 - LilyPond 2.13.57 released! @emph{April 3, 2011} + +LilyPond 2.13.57 is out; this is the fifth release candidate of +the upcoming 2.14 stable release. All users are invited to +experiment with this version. New features since 2.12.3 are +listed in the @qq{Changes} manual on the website section about +@ref{Development}. + +There are no known Critical issues with this release. If no +Critical bugs are found, then the official 2.14.0 release will be +on April 10, 2011. If you discover any problems, please send us +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading Release candidate 4 of 2.14 - LilyPond 2.13.56 released! @emph{Mar 29, 2011} + +LilyPond 2.13.56 is out; this is the fourth release candidate of +the upcoming 2.14 stable release. All users are invited to +experiment with this version. New features since 2.12.3 are +listed in the @qq{Changes} manual on the website section about +@ref{Development}. + +There are no known Critical issues with this release. If no +Critical bugs are found, then the official 2.14.0 release will be +on April 5, 2011. If you discover any problems, please send us +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.55 released! @emph{Mar 22, 2011} + +We are happy to announce the release of LilyPond 2.13.55. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the fourth release candidate, +due to a few remaining Critical bugs. + +@newsEnd + + +@newsItem +@subsubheading Release candidate 3 withdrawn @emph{Mar 15, 2011} + +We have discovered a regression since 2.12.3, so lilypond 2.13.54 +is no longer a candidate for the 2.14.0 release. However, please +continue testing it -- we would like to discover (and fix!) any +more regressions as soon as possible. If you discover any +problems, please send us @ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading Release candidate 3 of 2.14 - LilyPond 2.13.54 released! @emph{Mar 13, 2011} + +LilyPond 2.13.54 is out; this is the third release candidate of +the upcoming 2.14 stable release. All users are invited to +experiment with this version. New features since 2.12.3 are +listed in the @qq{Changes} manual on the website section about +@ref{Development}. + +There are no known Critical issues with this release. If no +Critical bugs are found, then the official 2.14.0 release will be +on March 27, 2011. If you discover any problems, please send us +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.53 released! @emph{Mar 6, 2011} + +We are happy to announce the release of LilyPond 2.13.53. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the third release candidate, +due to a few remaining Critical bugs. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.52 released! @emph{Mar 1, 2011} + +We are happy to announce the release of LilyPond 2.13.52. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the third release candidate, +due to a few remaining Critical bugs. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.51 released! @emph{Feb 22, 2011} + +We are happy to announce the release of LilyPond 2.13.51. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the third release candidate, +due to a few remaining Critical bugs. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.50 released! @emph{Feb 13, 2011} + +We are happy to announce the release of LilyPond 2.13.50. This +release contains the usual number of bugfixes. + +Please note that this is @strong{not} the third release candidate. +Due to a number of untested changes to our build process, we +cannot be at all confident about the quality of this release. + +@newsEnd + + +@newsItem +@subsubheading New Chinese and Czech translations of the web page! @emph{Feb 11,2011} + +Two new languages are added to our web page: Chinese by Ben Luo, and +Czech by Pavel Fric. It is a work in progress but they are fully +functional. That makes ten languages to choose from! + +@newsEnd + + + +@newsItem +@subsubheading Release candidate 2 of 2.14 - LilyPond 2.13.49 released! @emph{Feb 9, 2011} + +LilyPond 2.13.49 is out; this is the second release candidate of +the upcoming 2.14 stable release. All users are invited to +experiment with this version. New features since 2.12.3 are +listed in the @qq{Changes} manual on the website section about +@ref{Development}. + +There are no known Critical issues with this release. If no +Critical bugs are found, then the official 2.14.0 release will be +on Feb 23, 2011. If you discover any problems, please send us +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.48 released! @emph{Feb 5, 2011} + +We are happy to announce the release of LilyPond 2.13.48. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +@newsEnd + + + +@newsItem +@subsubheading LilyPond 2.13.47 released! @emph{Jan 28, 2011} + +We are happy to announce the release of LilyPond 2.13.47. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +@newsEnd + + + +@newsItem +@subsubheading Release candidate 1 withdrawn @emph{Jan 13, 2011} + +We have discovered a regression since 2.12.3, so lilypond 2.13.46 +is no longer a candidate for the 2.14.0 release. However, please +continue testing it -- we would like to discover (and fix!) any +more regressions as soon as possible. If you discover any +problems, please send us @ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading Release candidate 1 of 2.14 - LilyPond 2.13.46 released! @emph{Jan 12, 2011} + +LilyPond 2.13.46 is out; this is the first release candidate of +the upcoming 2.14 stable release. All users are invited to +experiment with this version. New features since 2.12.3 are +listed in the @qq{Changes} manual on the website section about +@ref{Development}. + +There are no known Critical issues with this release. If no +Critical bugs are found, then the official 2.14.0 release will be +on 26 Jan 2011. If you discover any problems, please send us +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.45 released! @emph{Jan 3, 2011} + +We are happy to announce the release of LilyPond 2.13.45. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +@newsEnd + + + + +@newsItem +@subsubheading Beta test three of 2.14 -- LilyPond 2.13.44 released! @emph{Dec 25, 2010} + +LilyPond 2.13.44 is out; this is the third beta test of the +upcoming 2.14 stable release. Users are invited to experiment +with this version. New features since 2.12.3 are listed in the +@qq{Changes} manual on the website section about +@ref{Development}. + +There is still one Critical problem with this release: in one +case, the vertical spacing is much too compressed. If you decide +to test this version, do not be surprised to discover problems; +just send us polite @ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading Beta test two of 2.14 -- LilyPond 2.13.43 released! @emph{Dec 14, 2010} + +LilyPond 2.13.43 is out; this is the second beta test of the +upcoming 2.14 stable release. Users are invited to experiment +with this version. New features since 2.12.3 are listed in the +@qq{Changes} manual on the website section about +@ref{Development}. + +There is still one Critical problem with this release: in one +case, the vertical spacing is much too compressed. If you decide +to test this version, do not be surprised to discover problems; +just send us polite @ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.42 released! @emph{Dec 8, 2010} + +We are happy to announce the release of LilyPond 2.13.42. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +Please note that this is @strong{not} the second beta test. Due +to a number of untested changes to our build process, we cannot be +at all confident about the quality of this release. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.41 released! @emph{Dec 4, 2010} + +We are happy to announce the release of LilyPond 2.13.41. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +Please note that this is @strong{not} the second beta test. Due +to a number of untested changes to our build process, we cannot be +at all confident about the quality of this release. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.40 released! @emph{Nov 21, 2010} + +We are happy to announce the release of LilyPond 2.13.40. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +Please note that this is @strong{not} the second beta test. Due +to a number of untested changes to our build process, we cannot be +at all confident about the quality of this release. + +@newsEnd + + +@newsItem +@subsubheading Beta test one of 2.14 -- LilyPond 2.13.39 released! @emph{Nov 15, 2010} + +LilyPond 2.13.39 is out; this is the first beta test of the +upcoming 2.14 stable release. Users are invited to experiment +with this version. New features since 2.12.3 are listed in the +@qq{Changes} manual on the website section about +@ref{Development}. + +There are still some Critical problems with this release: the +vertical spacing is suspicious in two cases, and lilypond can +crash with some odd input. If you decide to test 2.13.39, do not +be surprised to discover problems; just send us polite +@ref{Bug reports}. + +@newsEnd + + + + +@newsItem +@subsubheading The LilyPond Report #22. @emph{Nov 3, 2010} + +The @emph{LilyPond Report} is back, with some surprises and exciting +news for the whole LilyPond community! To be found in this issue is +an up-to-date, complete list of all LilyPond mailing lists and forums +around the world. Also, for the very first time our special guest +today is LilyPond’s co-founder and core developer +@strong{Jan Nieuwenhuizen}, who has been busy these past months -- +read on to find out what for! + +Come +@uref{http://news.lilynet.net/The-LilyPond-Report-22, read +LilyPond Report 22} now; comments and contributions are +warmly encouraged! + +@newsEnd + + +@newsItem +@subsubheading Alpha test four of 2.14 -- LilyPond 2.13.38 released! @emph{Oct 31, 2010} + +LilyPond 2.13.38 is out; this is the fourth alpha test of the +upcoming 2.14 stable release. Users are invited to experiment +with this version. New features since 2.12.3 are listed in the +@qq{Changes} manual on the website section about +@ref{Development}. + +There are still some Critical problems with this release: the +vertical spacing is suspicious in two cases, and lilypond can +crash with some odd input. If you decide to test 2.13.38, do not +be surprised to discover problems; just send us polite +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading Alpha test three of 2.14 -- LilyPond 2.13.37 released! @emph{Oct 25, 2010} + +LilyPond 2.13.37 is out; this is the third alpha test of the +upcoming 2.14 stable release. Users are invited to experiment +with this version. New features since 2.12.3 are listed in the +@qq{Changes} manual on the website section about +@ref{Development}. + +There are still some Critical problems with this release: the +vertical spacing is suspicious in two cases, and lilypond can +crash with some odd input. If you decide to test 2.13.37, do not +be surprised to discover problems; just send us polite +@ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.36 released! @emph{Oct 19, 2010} + +We are happy to announce the release of LilyPond 2.13.36. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +Please note that this is @strong{not} the third alpha test. Due +to a number of untested changes to our build process, we cannot be +at all confident about the quality of this release. + +@newsEnd + +@newsItem +@subsubheading The LilyPond Report #21. @emph{Oct 3, 2010} + +The @emph{LilyPond Report} is back, with its two +@qq{grumpy-and-fluffy} editors! This issue mainly deals with +microtonal notation in LilyPond, but does also include a how-to +about running LilyPond from an USB key, not to forget the regular +release news, the bug report of the Report, and some news from +the frog pond! + +Come +@uref{http://news.lilynet.net/The-LilyPond-Report-21, read +LilyPond Report 21} now; comments and contributions are +warmly encouraged! + +@newsEnd + + +@newsItem +@subsubheading Alpha test two of 2.14 -- LilyPond 2.13.35 released! @emph{Sep 29, 2010} + +LilyPond 2.13.35 is out; this is the second alpha test of the +upcoming 2.14 stable release. Users are invited to experiment +with this version. New features since 2.12.3 are listed in the +@qq{Changes} manual on the website section about +@ref{Development}. + +Three known regressions against 2.12.3 still exist: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1173, +Issue 1173 MetronomeMarks cannot be aligned on a note if a +multi-measure rest exists in another voice}, and two spacing +bugs: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1240, +Issue 1240} and +@uref{http://code.google.com/p/lilypond/issues/detail?id=1252, +Issue 1252}. If you decide to test 2.13.35, do not be surprised +to discover problems; just send us polite @ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading Alpha test of 2.14 -- LilyPond 2.13.34 released! @emph{Sep 21, 2010} + +LilyPond 2.13.34 is out; this is the first alpha test of the +upcoming 2.14 stable release. Users are invited to experiment +with this version. New features since 2.12.3 are listed in the +@qq{Changes} manual on the website section about +@ref{Development}. + +One known regression against 2.12.3 still exist: +@uref{http://code.google.com/p/lilypond/issues/detail?id=1173, +Issue 1173 MetronomeMarks cannot be aligned on a note if a +multi-measure rest exists in another voice}, but we expect to find +more. If you decide to test 2.13.34, do not be surprised to +discover problems; just send us polite @ref{Bug reports}. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.33 released! @emph{Sep 10, 2010} + +We are happy to announce the release of LilyPond 2.13.33. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +@newsEnd + + + + +@newsItem +@subsubheading LilyPond 2.13.32 released! @emph{Sep 3, 2010} + +We are happy to announce the release of LilyPond 2.13.32. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +@newsEnd + + +@newsItem +@subsubheading LilyPond Report #20. @emph{Sep 2, 2010} + +The @emph{LilyPond Report} is back, with its two +@qq{grumpy-and-fluffy} editors! This issue contains a review of an +online notation editor using lilypond, along with the regular +release news, snippet of the report, news from the frog pond, and +the bug report of the report! + +Come +@uref{http://news.lilynet.net/The-LilyPond-Report-20, read +LilyPond Report 20} now; comments and contributions are +warmly encouraged! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.31 released! @emph{Aug 24, 2010} + +We are happy to announce the release of LilyPond 2.13.31. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.30 released! @emph{Aug 13, 2010} + +We are happy to announce the release of LilyPond 2.13.30. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +@newsEnd + + +@newsItem +@subsubheading LilyPond Report #19. @emph{Aug 9, 2010} + +The @emph{LilyPond Report} is back, with its two +@qq{grumpy-and-fluffy} editors! This issue contains some +conference news, along with the regular release news, snippet of +the report, news from the frog pond, and the bug report of the +report! + +Come +@uref{http://news.lilynet.net/The-LilyPond-Report-19, read +LilyPond Report 19} now; comments and contributions are +warmly encouraged! +@newsEnd + + + + +@newsItem +@subsubheading LilyPond 2.13.29 released! @emph{Aug 4, 2010} + +We are happy to announce the release of LilyPond 2.13.29. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +This release radically changes the autobeaming rules, so use extra +caution and expect breakage. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.28 released! @emph{July 13, 2010} + +We are happy to announce the release of LilyPond 2.13.28. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +This release includes some major untested changes to the windows +lilypad editor. Windows users should not be using this release +because it is intended for developers only, but you ignore these +warnings and try it anyway, use extra caution. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.27 released! @emph{July 5, 2010} + +We are happy to announce the release of LilyPond 2.13.27. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. +@newsEnd + + +@newsItem +@subsubheading Testing our new website! @emph{June 29, 2010} + +We're testing our new website! For the next 24 hours, the new +website will be the default website; after that, we will switch +back to the old website while we examine feedback and make +improvements to the new website. + +Please send feedback to @code{lilypond-user}; you can find more +information on our page about @ref{Contact}. + +@warning{There are a few known problems with translations. If you +are a non-English speaker, you may prefer to view the old lilypond +website at: +@uref{http://lilypond.org/web/}} + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.26 released! @emph{June 26, 2010} + +We are happy to announce the release of LilyPond 2.13.26. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.25 released! @emph{June 20, 2010} + +We are happy to announce the release of LilyPond 2.13.25. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.24 released! @emph{June 14, 2010} + +We are happy to announce the release of LilyPond 2.13.24. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.23 released! @emph{June 3, 2010} + +We are happy to announce the release of LilyPond 2.13.23. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.22 released! @emph{May 27, 2010} + +We are happy to announce the release of LilyPond 2.13.22. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.21 released! @emph{May 12, 2010} + +We are happy to announce the release of LilyPond 2.13.21. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +This release should be of particular interest to package +maintainers: we have made a few changes to the configure script +and the required libraries. Barring any urgent bug reports, this +is the build system and libraries that will be used for the next +stable release. +@newsEnd + + +@newsItem +@subsubheading LilyPond Report #18. @emph{May 11, 2010} + +The @emph{LilyPond Report} is back, with its two +@qq{grumpy-and-fluffy} editors! This issue will be filled +with emotion and coolness, paper bags and zigzag-ending +staves, plus the usual Frogs and Bugs. + +Come +@uref{http://news.lilynet.net/The-LilyPond-Report-18, read +LilyPond Report 18} now; comments and contributions are +warmly encouraged! +@newsEnd + + + +@newsItem +@subsubheading LilyPond 2.13.20 released! @emph{May 5, 2010} + +We are happy to announce the release of LilyPond 2.13.20. This +release contains the usual number of bugfixes. However, a number +of critical issues still remain, so this release is intended for +developers only. + +Minor syntax change: the undocumented @code{\cresc} and +@code{\decresc} have changed. In addition, the [options] for the +LaTeX mode of @code{lilypond-book} now comes after the +@code{@{lilypond@}}, following normal LaTeX practice. As always, +see the Changes document for more information. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.19 released! @emph{April 24, 2010} + +We are happy to announce the release of LilyPond 2.13.19. This +release contains the usual number of bugfixes. However, 11 +critical issues still remain, so this release is intended for +developers only. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.18 released! @emph{April 16, 2010} + +We are happy to announce the release of LilyPond 2.13.18. This +release contains the usual number of bugfixes, along with improved +website translations. However, 14 critical issues still remain, +so this release is intended for developers only. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.17 released! @emph{April 2, 2010} + +We are happy to announce the release of LilyPond 2.13.17. This +release includes bugfixes for 4 critical issues. However, 15 +critical issues still remain, so this release is intended for +developers only. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.16 released! @emph{March 15, 2010} + +We are happy to announce the release of LilyPond 2.13.16. This +release is intended for developers only, and includes the usual +round of bugfixes. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.15 released! @emph{March 4, 2010} + +We are happy to announce the release of LilyPond 2.13.15. This +release is intended for developers only, and includes a few +updates to the binary build process in addition to the usual round +of bugfixes. +@newsEnd + + +@newsItem +@subsubheading LilyPond Report #17. @emph{March 1, 2010} + +Yay, the Report is back, with a new team! It has been said that +two heads are better than one — does it apply to newsletters as +well? Read on and let us know! In this issue we’ll talk about +websites and poetry, frogs and bugs, not to mention an extensive +review of the Frescobaldi editor! + +What are you waiting for? Come +@uref{http://news.lilynet.net/The-LilyPond-Report-17, read +LilyPond Report 17} now! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.14 released! @emph{February 27, 2010} + +We are happy to announce the release of LilyPond 2.13.14. This +release is intended for developers only, and includes a large +translation update in addition to the usual round of bugfixes. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.13 released! @emph{February 13, 2010} + +We are happy to announce the release of LilyPond 2.13.13. This +release is intended for developers only, and fixes various +problems with documentation build system as well as adding an +output-preview-framework for our SVG backend. In addition, the +binaries are now approximately 6 megabytes smaller. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.12 released! @emph{February 2, 2010} + +We are happy to announce the release of LilyPond 2.13.12. This +release is intended for developers only, and brings more stability +and fewer bugs to the build system and Contributor's Guide. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.11 released! @emph{January 16, 2010} + +We are happy to announce the release of LilyPond 2.13.11. This +release is intended for developers only, and brings a number of +improvements to the build system, Contributor's Guide, and fixes 4 +critical regressions against earlier versions. +@newsEnd + +@newsItem +@subsubheading LilyPond 2.13.10 released! @emph{December 31, 2009} + +We are happy to announce the release of LilyPond 2.13.10. This +release is intended for developers only, and brings a number of +improvements such as predictable regression test output filenames +and English names for feta filenames. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.12.3 released! @emph{December 20, 2009} + +We are happy to announce the release of LilyPond 2.12.3. This +version contains the long-awaited fix for our GUI on MacOS X 10.5 +and 10.6. In addition to the GUI fixes, this version contains +dozens of bugfixes backported from the unstable development +version. + +We recommend that all users upgrade to this version. This is the +last planned release in the 2.12 stable series; development now +shifts towards the upcoming 2.14 series. + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.9 released! @emph{December 12, 2009} + +LilyPond 2.13.9 is now out. From 2.13.9 onwards, LilyPond is +licensed under the GNU GPL v3+ for code, and the GNU FDL 1.3+ for +documentation. In addition to the usual round of bugfixes, this +release adds a shortcut for repeated chords. + +Please note that 2.13 is an @strong{unstable development} branch; +normal users should continue to use 2.12. + +@newsEnd + +@newsItem +@subsubheading New Website! @emph{October 3, 2009} + +As you can see, we have a new website design. Many thanks to +texi2html and CSS for being so flexible! + +@newsEnd + + +@newsItem +@subsubheading LilyPond Report #16. @emph{September 6, 2009} + +The LilyPond Report is back! This short, informal opinion column is +about the LilyPond project: its team, its world, its community. +Read @uref{http://news.lilynet.net/The-LilyPond-Report-16, issue 16} +now! + +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.13.3. @emph{July 2, 2009} + +This unstable release contains working menus in OSX 10.5; many +thanks to Christian Hitz for fixing this long-standing problem! +This release also contains numerous other bugfixes and features +such as ties with variable thickness, partially dashed slurs, and +eyeglasses.@* +We are planning another 2.12 release in the next week or two, +which will include the menu fixes for OSX 10.5. Normal users may +wish to wait for this release rather than using an unstable +release.@* +@ref{Changes}, +@ref{Development}. +@newsEnd + + +@newsItem +@subsubheading A LilyPond weboldala magyarul. @emph{May 22, 2009} + +Elkészült a lilypond.org nagy részének magyar fordítása a LilyPond +honosítási projekt első lépéseként. A projekt célja a LilyPond +szabad kottaszedő szoftver minél széleskörűbben elérhetővé tétele +a magyar felhasználók számára a teljes weboldal és dokumentáció +lefordítása révén. A teljes dokumentáció lefordításához +közreműködőket keresünk. Ha részt vennél a honosításban, küldj egy +e-mailt a @code{harmathdenes AT gmail.com} címre!@* +Harmath Dénes, a LilyPond honosítási projekt +vezetője +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #15. @emph{May 18, 2009} + +The @emph{LilyPond Report} is a short, informal opinion column about the LilyPond project: +its team, its world, its community. +Follow @uref{http://news.lilynet.net/The-LilyPond-Report-15,this link} +to read the full issue... +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #14. @emph{April 13, 2009} + +The @emph{LilyPond Report} is back, on a new website! +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://news.lilynet.net/The-LilyPond-Report-14,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.12.2 and 2.13.0 — @emph{March 21, 2009} + +As a very belated announcement, the stable version of LilyPond is +now 2.12.2, and the next development version has begun with +2.13.0. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.12.0 @qq{Rune} — @emph{December 27, 2008} + +A new stable release of LilyPond is available. +@* +@uref{announce-v2.12,Announcement}, +@ref{Changes}, +@ref{Download}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.65 — Release Candidate. @emph{December 2, 2008} + +This release has improvements to MusicXML import, contributed by +Reinhold Kainhofer, and adds support for splitting a book in several +book parts, contributed by Nicolas Sceaux. +Nested contexts of the same type are now allowed with any depth, and +overriding nested properties can be done with list syntax, thanks to +Neil Puttock. +This is hopefully the last Release Candidate before stable release 2.12, +so you are welcome to test this release if you can to report new +issues.@* +@bugfixes{2_11_65,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.64. @emph{November 18, 2008} + +LilyPond 2.11.64 is available. MusicXML import has been improved, +including church modes support, and a few bugs in the compilation +and documentation building processes are fixed. The three +documentation manuals are now fully translated in Spanish, thanks +to Francisco Vila. The font cache problem in Windows binaries +which used to cause excessive slowness should be fixed. +@* +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.63. @emph{October 29, 2008} + +LilyPond 2.11.63 is available. This release has lots of updates to the +documentation and translations. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.62 – Release Candidate. @emph{October 11, 2008} + +LilyPond 2.11.62 is available. This is is one of the last releases +before 2.12, so testing it is encouraged. In addition to a bugfix +in @code{\tempo} command, this release has lot of updates +to Spanish and German documentation translations, and the +stylesheet for HTML documentation has been improved. +@* +@bugfixes{2_11_62,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.61 available. @emph{October 1, 2008} + +LilyPond 2.11.61 has been released. It has updates to +documentation translations, and a new automatic accidentals style +(teaching) has been added. +@* +@bugfixes{2_11_61,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.60 available. @emph{September 25, 2008} + +LilyPond 2.11.60 has been released. A new style of double repeat +bar line has been added, and @code{printallheaders} variable in +score block has been renamed to @code{print-all-headers}. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.59 available. @emph{September 20, 2008} + +Release 2.11.59 is out. LilyPond now uses 64 bit integers for +rational numbers, which allows typesetting more complex polymetric +music. This release also has updates to German and Spanish +translations of the documentation. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.58 available. @emph{September 13, 2008} + +LilyPond 2.11.58 is a beta release, which means the next stable +release is expected in a few weeks. This release is also special, +as it includes code which supports more flexible automatic +accidentals rules, written several months ago by Rune Zedeler, +deceased since then. All the development team express their +condolences to his family and his friends. Besides this, +automatic beaming has been improved by Carl Sorensen, support +for creating stem flags in a new style has been contributed by +Reinhold Kainhofer, and a few bugs have been fixed. +@* +@bugfixes{2_11_58,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.57 available. @emph{August 27, 2008} + +LilyPond 2.11.57 is out. This release adds support for harp pedal +diagrams, contributed by Reinhold Kainhofer, and some changes in +markup command names have been made. +@* +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.56 available. @emph{August 17, 2008} + +LilyPond 2.11.56 is out. This release features transposable fret +diagrams, contributed by Carl Sorensen. Translations status pages +are now available from the documentation start page. Two +predefined commands @code{\pointAndClickOn}, +@code{\pointAndClickOff} have also been added. +@* +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.55 available. @emph{August 6, 2008} + +LilyPond 2.11.55 is out. This release fixes several bugs, and for octavation brackets +@code{set-octavation} has been replaced by a more user-friendly command, @code{\ottava}. +@* +@bugfixes{2_11_55,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.54 available. @emph{July 30, 2008} + +LilyPond 2.11.54 is out. This release fixes a bug in tie formatting +following a line break, and changes the behavior of @code{short-indent} +so that short instrument names are no longer indented in the margin. +@* +@bugfixes{2_11_54,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.53 available. @emph{July 23, 2008} + +LilyPond 2.11.53 is out. This release fixes a lot of bugs. +@* +@bugfixes{2_11_53,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.52 available. @emph{July 14, 2008} + +Release 2.11.52 fixes wrong offset of a bar number when it follows +a breath mark, and syntax changes made in recent development +releases are now fully listed on the News page. +@* +@bugfixes{2_11_52,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.51 available. @emph{July 8, 2008} + +Release 2.11.51 has a couple of bugfixes, and a lot of changes in +predefined command names. Fret diagrams formatting has been +improved by Carl Sorensen, it is now controlled +by @code{fret-diagram-details} property. +@* +@bugfixes{2_11_51,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.50 available. @emph{July 2, 2008} + +Release 2.11.50 adds support for metronome marks with text, and +backslashed numbers for figured bass, contributed by +Reinhold Kainhofer. +@* +@bugfixes{2_11_50,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #13. @emph{June 23, 2008} + +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-13,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #12. @emph{June 16, 2008} + +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-12,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.49 released. @emph{June 12, 2008} + +LilyPond 2.11.49 is out. It fixes a number of bugs, including bugs in beams formatting. +@* +@bugfixes{2_11_49,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.48 released. @emph{June 9, 2008} + +LilyPond 2.11.48 is out. This release fixes a few bugs, and +@code{\compressMusic} has been renamed +to @code{\scaleDurations}. +@* +@bugfixes{2_11_48,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #11. @emph{June 9, 2008} + +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-11,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #10. @emph{June 2, 2008} + +Welcome to this special tenth issue of the @emph{LilyPond Report}, entirely dedicated to Algorithmic Composition systems.@* +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-10,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.47 released. @emph{May 28, 2008} + +LilyPond now allows all text context properties to be markups, +except in @code{\lyricmode}. This release also fixes +regression tests maintenance for developers. +@* +@bugfixes{2_11_47,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.46 available. @emph{May 22, 2008} + +Release 2.11.46 fixes a lot of bugs and includes a rewrite of +dynamics engravers. Support for slur-shaped arpeggios has been added. +@* +@bugfixes{2_11_46,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading RSS feed - @emph{May 21, 2008} + +A RSS feed is now available on lilypond.org. It contains all +news announced on the web site start page: releases, LilyPond +report, new translations of the site and publications. +@uref{http://lilypond.org/web/lilypond-rss-feed.xml,Feed URL}. +The info mailing list (see @ref{Contact}) is still used to +announce releases and special events. +@newsEnd + + +@newsItem +@subsubheading The LilyPond Report #9. @emph{May 05, 2008} + +Welcome to this ninth issue of the @emph{LilyPond Report}!@* +This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community. +Follow @uref{http://valentin.villenave.info/The-LilyPond-Report-9,this link} to read the full issue... +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.45 available. @emph{April 26, 2008} + +Release 2.11.45 fixes a couple of bugs in the formatting +engine. @code{lilypond-book} has been improved, with better +performance, a bugfix about included files, and more flexibility +for preprocessing documents with LaTeX variants. Support for +enclosing text in a rounded box has been contributed by Valentin +Villenave. +@* +@bugfixes{2_11_45,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.44 available. @emph{April 14, 2008} + +Release 2.11.44 is available. Support for figured bass and chord +names has been added to the MusicXML +converter. +@* +@bugfixes{2_11_44,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading lilypond.org日本語訳 (lilypond.org Japanese translation). @emph{2008å¹´4月8日 (April 4, 2008)} + +lilypond.orgのいくつかのページの日本語訳が出来ました。 +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.43 available. @emph{March 31, 2008} + +Release 2.11.43 has been available since March 27. It fixes a +couple of formatting bugs, and the font cache problem with +MS-Windows binaries which caused excessive slowness has been +fixed. +@* +@bugfixes{2_11_43,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.42 available. @emph{March 9, 2008} + +Release 2.11.42 is out. It fixes some formatting and spacing +bugs. +@* +@bugfixes{2_11_42,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading Comparison of music engraving with Finale and LilyPond. @emph{February 25, 2008} + +In three articles, Andrew Hawryluk compares Finale and LilyPond in +general terms, and evaluates in detail engraving capabilities of +both pieces of software. The second article is an instructive +analysis of Rachmaninoff's Piano Prelude 6 engraving, including +comparisons with a reference hand-engraved edition. +@uref{http://www.musicbyandrew.ca/finale-lilypond-1.html,Read +the articles}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.41 available. @emph{February 25, 2008} + +Release 2.11.41 is available. It has a few bugfixes, updated +program messages in French, German, Spanish and Vietnamese, and +updates to the MusicXML converter. +@* +@bugfixes{2_11_41,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.37 available. @emph{January 3, 2008} + +Release 2.11.37 is available. It has a few bugfixes, and +documentation changes. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.36 available. @emph{December 13, 2007} + +Release 2.11.36 is now available. It has many bugfixes, updates +for MusicXML import, and it includes major documentation changes from +Grand Documentation Project. +@* +@bugfixes{2_11_36,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.33 and 2.11.33 available. @emph{September 20, 2007} + +Release 2.11.33 is now available. +@* +@bugfixes{2_10_33,2.10}, +@bugfixes{2_11_33,2.11}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.32 available. @emph{September 2, 2007} + +Release 2.11.32 is now available. +@* +@bugfixes{2_11_32,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.31 available. @emph{August 31, 2007} + +Release 2.11.31 is now available. It has more bugfixes, updates +for MusicXML import and lots of updates for the translations. +@* +@bugfixes{2_11_31,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.30 available. @emph{August 20, 2007} + +Release 2.11.30 is now available. It has various bugfixes among +others in the new spacing code, MusicXML import and lots of updates +for the translations. +@* +@bugfixes{2_11_30,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.29 and 2.11.29 available. @emph{August 11, 2007} + +Release 2.11.29 is now available. 2.10.29 has a few small fixes. +2.11.29 has several bugfixes, among others in the new spacing code, +and lots of updates for the translations. +@* +@bugfixes{2_10_29,2.10}, +@bugfixes{2_11_29,2.11}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.28 for FreeBSD x86_64. @emph{August 10, 2007} + +Release 2.11.28 is now available as a binary installer for +FreeBSD x86_64. Download +@uref{http://lilypond.org/download/binaries/freebsd-64/lilypond-2.11.28-1.freebsd-64.sh,the installer} and +do @emph{sh lilypond-2.11.28-1.freebsd-64.sh} in a command window. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.28 available - @emph{July 25, 2007} +Release 2.11.28 has several updates to the manual and its +translations, an plethora of bugfixes and a complete cleanup of the +spacing engine code. +@* +@bugfixes{2_11_28,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.26 available - @emph{June 8, 2007} + +Release 2.11.26 supports page markers, eg. for use in +tables-of-contents. In addition, it fixes a number of bugs. Enjoy! +@* +@bugfixes{2_11_26,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.25 and 2.11.25 available - @emph{May 20, 2007} + +Release 2.11.25 has support for toplevel page breaking commands, +and page breaking as a whole has been sped up significantly. Enjoy! +@* +@bugfixes{2_10_25,2.10}, +@bugfixes{2_11_25,2.11}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.23 and 2.11.23 available - @emph{May 1, 2007} +This has lots of bugfixes. +@* +@bugfixes{2_10_23,2.10}, +@bugfixes{2_11_23,2.11}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading Übersetzung der Dokumentation - @emph{10. April 2007} +Die Kapitel 1-5 (der Abschnitt für Anfänger) des +LilyPond-Benutzerhandbuchs +sind auf deutsch übersetzt — sie sind erhältlich für +die @ref{Changes} +online und @ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.22 available - @emph{April 10, 2007} +This release has updates of the dot collision code. +@* +@bugfixes{2_11_22,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.21 available - @emph{March 24, 2007} +This release has some documentation updates. +@* +@bugfixes{2_11_21,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading Traduction de la documentation en français - @emph{25 février 2007} +Les chapitres 1 à 4 et 6 du manuel de l'utilisateur sont +désormais traduits, et disponibles en ligne — @uref{@@DOC@@v2.10/Documentation/user/lilypond/index.fr.html,version +2.10}, @uref{@@DOC@@v2.11/Documentation/user/lilypond/index.fr.html,version +2.11}. Les traductions sont également incluses dans la @uref{install,documentation téléchargeable}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.20 and 2.11.20 available - @emph{February 25, 2007} +This release fixes many bugs. +@* +@bugfixes{2_10_20,2.10}, +@bugfixes{2_11_20,2.11}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.19 and 2.11.19 available - @emph{February 18, 2007} +This release fixes many bugs. +@* +@bugfixes{2_10_19,2.10}, +@bugfixes{2_11_19,2.11}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.18 available - @emph{February 12, 2007} +This release fixes still more bugs, and included +singing support through festival contributed by Milan Zamazal. +@* +@bugfixes{2_11_18,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.17 available - @emph{February 9, 2007} +This release fixes still more bugs. +@* +@bugfixes{2_11_17,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.16 and 2.11.16 available - @emph{February 4, 2007} +This release fixes many bugs. +(@bugfixes{2_10_16,2.10}, +@bugfixes{2_11_16,2.11}, +@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.15 and 2.11.15 available - @emph{February 1, 2007} +This release will stretch piano staves on a +system-by-system basis and add a few glyphs: a black harmonic note +head and the slashed mirrored flat. +@* +@bugfixes{2_10_15,2.10}, +@bugfixes{2_11_15,2.11}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.14 and 2.11.14 available - @emph{January 26, 2007} +This release has a rewrite of the line-spanner code, responsible for +among other glissandi and text-crescendos, making them more flexible. +@* +@bugfixes{2_11_14,}, +@ref{Changes}, +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.13 and 2.11.13 available - @emph{January 17, 2007} +This release fixes a few minor but irritating bugs. In addition, the +2.11 release has updates of the tutorial. +@* +@bugfixes{2_11_13,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.12 available - @emph{January 17, 2007} +This release fixes lots of bugs. In particular, the tie formatting has +been further improved, and memory usage has been improved enormously. +@* +@bugfixes{2_11_12,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.12 available - @emph{January 17, 2007} +This release mirrors 2.11.12. Notably, it has the same memory +usage improvements. +@* +@bugfixes{2_10_12,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.11 available - @emph{January 12, 2007} +This release mostly has the same fixes as 2.11.11. +@* +@bugfixes{2_10_11,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.11 available - @emph{January 11, 2007} +This release has further fixes for popular bugs. Timing of the MIDI +output won't get confused by tuplets and grace notes anymore. Some fat +has also been trimmed of the skyline code performance. +@* +@bugfixes{2_11_11,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.10 available - @emph{January 8, 2007} +LilyPond 2.11.10 has further review of the test-suite, performance and +code coverage. This brought to light several problems that were +fixed. Notably, 2.11.10 fixes lots of regressions in optical +correction spacing and MIDI dynamics. Also, this version is 20 to 50 +% faster than previous 2.11 releases. +@* +@bugfixes{2_11_10,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.10 available - @emph{January 8, 2007} +This release fixes several popular bugs, among others: MIDI files +that go silent after (de)crescendi, and tuplets problems with quoting +and part-combining. +@* +@bugfixes{2_10_10,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.9 and 2.10.9 available - @emph{January 3, 2007} +This release has a couple of bugfixes, and —in 2.11.9&mdash +further improvements in the regression test suite +@* +@bugfixes{2_11_9,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.8 and 2.10.8 available - @emph{January 3, 2007} +New! Improved! With even more bugfixes! +@* +@bugfixes{2_11_8,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading @code{lilypond.org} auf deutsch - @emph{31. Dezember 2006} +Die LilyPond-Webseiten sind jetzt auch auf deutsch übersetzt! +@newsEnd + + +@newsItem +@subsubheading @code{lilypond.org} en español - @emph{December 29, 2006} +¡Ya está disponible la versión en español del sitio web de LilyPond! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.7 and 2.10.7 available - @emph{January 1, 2007} +New! Improved! With even more bugfixes! +@* +@bugfixes{2_11_7,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.6 available - @emph{December 30, 2006} +This release supports arbitrary fractional alterations, allowing +music with different microtonal conventions to be typeset. +@* +@bugfixes{2_11_6,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.6 available - @emph{December 30, 2006} +New! Improved! With even more bugfixes! +@* +@bugfixes{2_10_6,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.5 available - @emph{December 24, 2006} +These releases complete the translation infrastructure for +Documentation. +@* +@bugfixes{2_11_5,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.5 available - @emph{December 24, 2006} +New! Improved! With even more bugfixes! +@* +@bugfixes{2_10_5,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.4 available - @emph{December 21, 2006} +The vertical spacing improvements that were introduced in 2.11.0 now work +within a system as well as between systems. +@* +@bugfixes{2_11_4,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.3 available - @emph{December 19, 2006} +This release has @uref{http://lilypond.org/doc/v2.11/compare-v2.10.3/index.html,graphical +test results} and several website build improvements. +@* +@bugfixes{2_11_3,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.3 available - @emph{December 19, 2006} +This release fixes several bugs. +@* +@bugfixes{2_10_3,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LinuxPPC binaries available! - @emph{December 19, 2006} +From now on, our GUB binary builds include support for Linux/PPC. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading Traduction du tutoriel en français. @emph{December 13, 2006} +Fruit du travail d'une équipe de traducteurs, le tutoriel en +français est maintenant disponible en ligne. @uref{@@DOC@@v2.10/Documentation/user/lilypond/Tutorial.fr.html,Version +2.10}, @uref{@@DOC@@v2.11/Documentation/user/lilypond/Tutorial.fr.html,Version +2.11}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.2 available - @emph{December 12, 2006} +This release supports glissandi and harmonics in tablature. +@* +@bugfixes{2_11_2,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.2 available - @emph{December 12, 2006} +A new stable release of LilyPond is available. +@* +@bugfixes{2_10_2,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.1 available - @emph{December 4, 2006} +This release has improved support for horizontal spacing. +@* +@bugfixes{2_11_1,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.1 available - @emph{December 3, 2006} +A new stable release of LilyPond is available. +@* +@bugfixes{2_10_1,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.11.0 available - @emph{November 27, 2006} +This release has improved support for vertical spacing. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.10.0 available - @emph{November 11, 2006} +A new stable release of LilyPond is available. (@uref{announce-v2.10.html,Announcement}, @ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading GIT repository online - @emph{November 11, 2006} +LilyPond development has moved over its source code to @uref{http://git.or.cz,GIT}, the fast version control +system. Check out our repository at @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=summary,gnu.org}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.29 available - @emph{November 5, 2006} +This release has many more bugfixes. +@* +@bugfixes{2_9_29,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.28 available - @emph{November 3, 2006} +This release has many more bugfixes. +@* +@bugfixes{2_9_28,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.27 available - @emph{October 28, 2006} +This release has a new @code{FretBoards} context, and some further +bugfixes. +@* +@bugfixes{2_9_27,}, +@ref{Changes}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading Music streams thesis available - @emph{October 21, 2006} +The last months, Erik Sandberg has been overhauling the internals of +Lily. This change introduces a new intermediate format, Music Streams, +which will make it easier get music data out of LilyPond. A copy of +the thesis is now available from lilypond.org +(@ref{Publications}). +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.26 available - @emph{October 20, 2006} +This release has further bugfixes. +@* +@bugfixes{2_9_26,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.25 available - @emph{October 18, 2006} +This release has more bugfixes; from now on, binaries are also +available for x86/64. +@* +@bugfixes{2_9_25,}, +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.24 available - @emph{October 15, 2006} +This release has support for right hand guitar fingerings, and offers +some bugfixes. (@ref{Changes}, +@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=fixed2924&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary,Bugfixes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.23 available - @emph{October 12, 2006} +This release cuts fragments of EPS directly from your finished score, +and makes it easier to insert ties into lyrics. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.22 available - @emph{October 9, 2006} +Test this release candidate for LilyPond 2.10! (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.21 available - @emph{October 4, 2006} +Test this release candidate for LilyPond 2.10! (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.20 available - @emph{October 3, 2006} +Test this release candidate for LilyPond 2.10! (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.17 available - @emph{September 2, 2006} +This release fixes many bugs. Among others, MacOS X QuickTime now +honors tempo changes are in the MIDI output. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.16 available - @emph{August 25, 2006} +In this release, chords may be partially tied and lyric extenders have +tunable padding. Moreover, many bugs were fixed +(@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.15 available - @emph{August 20, 2006} +This releases fixes many bugs in the 2.9.14 release. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.6 available - @emph{August 8, 2006} +This release contains a few minor bugfixes; the source tarball is also +available. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.14 available - @emph{August 4, 2006} +This release supports instrument name changes, dotted barlines and +better spacing for floating grace notes. In addition, it contains +ongoing work by Erik Sandberg to extend the interpretation phase with +stream support. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.13 available - @emph{July 23, 2006} +This release supports doits and falls, and more tuning options for +grace note spacing and tuplet brackets. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.12 available - @emph{July 18, 2006} +This release supports pdftex for lilypond-book, and uses PdfTeX for +generating manuals, so page numbers and references are now clickable. +(@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.11 available - @emph{July 12, 2006} +This release wraps improvements of the last two weeks. As a new +feature, it supports tunable tuplet number formatting for nested +tuplets. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.10 available - @emph{June 15, 2006} +This releases fixes a couple of bugs in 2.9.9. +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.9 available - @emph{June 15, 2006} +This releases fixes many bugs in 2.9.8 and earlier. +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.8 available - @emph{June 6, 2006} +2.9.8 has support for different spacing sections within a single +score, and better infrastructure for automated regression testing. +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.4 available - @emph{June 4, 2006} +2.8.4 fixes some minor bugs, and includes a backport of the +infrastructure for automated regression testing. +(@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading First test results available - @emph{June 4, 2006} +After a week of frantic tweaking, the first automated testing results +are available. You can now see @uref{http://lilypond.org/doc/v2.9/compare-v2.8.4/index.html,in full +glory} what features are broken in the development release +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.7 available - @emph{May 30, 2006} +2.9.7 has improvements in the formatting for figured bass, and +includes a new framework for detecting bugs earlier, which will make +the development releases even better +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.6 available - @emph{May 24, 2006} +This +release has new features in beam formatting: beams may now be put on +single stems, and obey the @code{beatGrouping} property. MusicXML +converter. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading New essay pages! - @emph{May 22, 2006} +The @emph{Automated Engraving} essay has been updated with material +from the @uref{http://fisl.softwarelivre.org,FISL} talk, with +pages on @uref{about/automated-engraving/problem-statement,modeling +notation} and @uref{about/automated-engraving/scoring-esthetics,algorithms for +esthetics}. Happy reading! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.5 available - @emph{May 17, 2006} +This release supports object rotation, hairpins with circled tips, +hairpins that run to barlines before notes and improvements in the +MusicXML converter. +(@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.4 available - @emph{May 12, 2006} +This release has support for feathered beaming, and note head styles in +the markup @code{\note} command. In addition, it has a lot of updates +of the manual and a clean up of the spring spacer. +(@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.2 available - @emph{May 12, 2006} +This release has fixes for minor bugs and compilation issues. +(@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.3 is out! - @emph{May 7, 2006} +This new release has lots of updates of the manual, courtesy Graham +and the contributors of the mailing. It handles formatting for ties in +arpegiated chords better (feature sponsored by +Steve Doonan), it has al niente hairpins, courtesy of Erlend Aasland, +and some cleanups of the PostScript output, courtesy David Feuer. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading FISL7.0 slides available - @emph{April 22, 2006} +The slides for Han-Wen's talk at +@uref{http://fisl.softwarelivre.org,FISL 7} are now online. +(@ref{Publications}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.1 is out! - @emph{April 3, 2006} +Important bugfixes include CJK font handling and a Darwin/x86 port. +(@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.9.1 is out! - @emph{April 3, 2006} +It's mostly a bugfix release, and it's almoste the same as 2.8.1. This +release mainly fixes problems with CJK font loading. +(@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond on MacOS X/Intel - @emph{March 31, 2006} +LilyPond now also runs on Intel based macs, offering a 400% +speedup over the emulated PowerPC binaries. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.8.0 is out! - @emph{March 22, 2006} +Version 2.8 is here! Read the @uref{announce-v2.8.html,release +announcement}. (@ref{Changes}, @ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.39 is out - @emph{March 17, 2006} +This release has even more bug fixes. Please test before 2.8 is +released. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.38 is out - @emph{March 12, 2006} +This is likely to be the last release candidate before we release 2.8, +so report any bugs that you might find. New attractions include: +lilypond postscript files now work with GSView, cut & pasting lily +code from PDF files should now work, and spacing fixes for +multi-measure rests. +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.37 is out - @emph{March 4, 2006} +This release has more bug fixes. Please help us by testing it! +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.36 is out - @emph{February 24, 2006} +This is another release candidate for 2.8. It has lots of bug fixes +and polishes to the documentation. It also contains support for +creating ties that are only on their right side connected to note +heads, which is handy for repeats (feature sponsored by Steve Doonan). +The documentation suite can now be downloaded as a separate tarball +from lilypond.org. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.35 is out - @emph{February 19, 2006} +This release has lots of bugs fixes. The plan is to release 2.8 at the +end of this month, so bug reports are @strong{very} welcome. By +definition a bug is release critical if it wasn't present in version +2.6. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.34 is out - @emph{February 16, 2006} +This release has a bunch of bugfixes, and new features. Newly created +contexts may also be named with @code{\new Voice = +"alto"}. Thicknesses of tie and slurs may be tuned separately for +the endings and the middle +part. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.33 is out - @emph{February 10, 2006} +Items directly connected with a music input element may be +parenthesized, for example, +@verbatim +{ + c4 -\parenthesize -. + +} +@end verbatim + +This feature was sponsored by Ramana Kumar. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.32 is out - @emph{February 7, 2006} +This release contains some syntax changes: words inside the \paper and +\layout block are henceforth written with dashes, for instance: + +@verbatim +{ + \layout { + ragged-right = ##t + } +} +@end verbatim + +Furthermore, in this release, we have dropped some legacy code from +our library. Now, lily uses standard C++ strings and the STL +vector. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.31 is out - @emph{February 2, 2006} +This release fixes a load of bugs, and has some internal +cleanups. Exported C++ members are now named +ly:class-name::function-name in Scheme instead of +Class_name::function_name. We are now using C++ vectors and strings +instead of our own. The Linux/FreeBSD builds now include wrappers for +Python scripts too, so you can run convert-ly and midi2ly. +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.30 is out - @emph{January 30, 2006} +This release has a few bug fixes, like the solfa note head shape and +collisions, the \epsfile command, and in getting No. ligature in +normal words. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.29 is out - @emph{January 27, 2006} +This release has the following new features. Alignments of staves may +be tuned per system (feature sponsored by Trevor Baca), individual +systems may be positioned manually (feature sponsored by Trevor Baca +and Nicolas Sceaux), a linebreaking configuration can now be saved as +a `.ly' file automatically. This allows vertical alignments to be +stretched to fit pages in a second formatting run (feature sponsored +by Trevor Baca and Nicolas +Sceaux). (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.28 is out - @emph{January 22, 2006} +This release contains numerous small fixes that were already in our +GUB binaries. In addition, it has further polish for formatting of +tied chords. Theses improvements were sponsored by Steve +Doonan. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27, release 4 - @emph{January 13, 2006} + +The fourth release of our Grand Unified Binary for 2.7.27 is +available. This release uses Pango 1.11.1, which has support for +ligatures and kerning. Enjoy! (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27, release 3 - @emph{January 12, 2006} +The third release of our Grand Unified Binaries is available. This +release fixes external font-support, the decompression flag for +Linux. Also, we have support for @strong{FreeBSD} as well! Jump +to the @ref{Old downloads} get them! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27 binaries are out - @emph{January 7, 2006} +Starting with 2.7.26, the development team has been working on the +installers. We're proud to announce another version of these: they are +now available for +@uref{http://lilypond.org/download/binaries/linux-x86/lilypond-2.7.27-1.linux.sh, +Linux/x86}, +@uref{http://lilypond.org/download/binaries/MacOS/lilypond-2.7.27-2.zip, +MacOS X} and +@uref{http://lilypond.org/download/binaries/mingw/lilypond-2.7.27-2.exe, +Windows}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.27 is out - @emph{January 7, 2006} +This release allows you to switch staff lines on and off individually +(feature sponsored by Andrea +Valle). (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading Linux Journal article - @emph{January 2006} +Linux Journal publishes an article on +@uref{http://www.linuxjournal.com/article/8364,@emph{Make +Stunning Schenker Graphs with GNU LilyPond}}. It is a +in-depth but hands-on feature article with crisp LilyPond +graphics. +@* +Author Kris Shaffer remarks +“GNU LilyPond generates beautiful graphics that make commercial +alternatives seem second-rate.” +This article is now available @uref{http://www.linuxjournal.com/article/8583,on-line}. +@newsEnd + + +@newsItem +@subsubheading New binaries for LilyPond 2.7.26 - @emph{January 4, 2006} +The Development team has been working around the clock to improve +to fix the first wave bugs reported by you. The new results for MacOS +and Windows are up on the @ref{Old downloads} +page. Let us know how you fare! +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.26 is out - @emph{December 31, 2005} +This release has an improvement in the MusicXML importer (feature +sponsored by Mark vd Borre's Music Academy): now, staves and voices +are also setup, so you can readily run LilyPond on the .ly output. +The important occasion for this release is our new build +environment: we have completely revamped it, which means that binaries +for all platforms (including MacOS, Windows, Linux/x86, but probably +FreeBSD too) will be more quickly available for download. +A happy 2006 from the LilyPond Development Team! +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.25 is out - @emph{December 24, 2005} +This release has various bugfixes. Also, stems on the center line now +have their directions interpolated to minimize the number of direction +changes (feature sponsored by Basil Crow and Mike +Rolish). (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.24 is out - @emph{December 20, 2005} +This release fixes a couple of bugs, but more importantly, slurs now +avoid TupletNumbers, and tuplet numbers may enter the staff (feature +sponsored by Trent Johnston), tuplet brackets and numbers are +implemented as separate grobs, TupletBracket and TupletNumber (rewrite +sponsored by Trent Johnston), string arguments for music functions may +be specified without # marks. This allows syntactical constructs (like +\clef and \bar) to be expressed in generic music +functions. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.23 is out - @emph{December 19, 2005} +This release has the following new features: +@itemize +@item +Ties in chords are also formatted using score based +formatting. This reduces the number of collisions for ties in chords +(feature sponsored by Steve Doonan). +@item +With the \tweak music function, layout objects that are directly +connected to input may be tuned easily (feature sponsored by Sean Reed +and Bertalan Fodor). +@item +Generic music functions may now also be used on +articulations and chord elements (feature sponsored by Sean Reed and +Bertalan Fodor). +@item +Better support for MusicXML, more options for spacing Lyrics; +it is now possible to separately specify minimum distances for normal +and hyphenated syllables (features sponsored by Mark van den Borre and +Bertalan Fodor. +@end itemize +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.22 is out - @emph{December 9, 2005} +This release has better support for MusicXML: it also supports ties, +beams and editorial accidentals. It also has more options for spacing +Lyrics; it is now possible to separately specify minimum distances for +normal and hyphenated syllables. These features were sponsored by Mark +van den Borre and Bertalan +Fodor. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.21 is out - @emph{December 5, 2005} +Saint Nicholas brings you ... a @uref{http://www.musicxml.org/,MusicXML} convertor for LilyPond! +The convertor is basic, but working. Check out the @uref{http://www.lilypond-design.com/sponsor/open-features.html#inputfilter, +LilyPond Software Design} pages for MusicXML features that can be +sponsored. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.20 is out - @emph{December 2, 2005} +This release contains the following improvements: Texts set in a +TrueType font are now kerned. Using the TeX no longer requires linking +or dynamically opening the kpathsea library, making the backend more +easily usable on various systems (feature sponsored by Christian Ebert +of Black Trash +Productions). (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.5 is out - @emph{December 1, 2005} +This release updates the bugreporting address and reorganizes the +documentation tree. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.19 is out - @emph{November 26, 2005} +This version contains a few bugfixes, and now allows the type of +brackets in system start bracket hierarchies to be specified. Also, +the horizontal alignment of rehearsal marks may be changed: marks can +be put on key signatures, clefs, time signatures, +etc. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.18 is out - @emph{November 21, 2005} +This version features nestable system start delimiters, like bracket, +brace. It also adds "square" line bracket (feature sponsored by Trevor +Baca). It also has refactored routines for tie formatting. This will +make it easier to get better tie formatting for chords (feature +sponsored by Steve Doonan). It also has a few bug +fixes. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.17 is out - @emph{November 17, 2005} +This version has refactored routines for tie formatting. This will +make it easier to get better tie formatting for chords (feature +sponsored by Steve Doonan). It also has a few bug +fixes. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.16 is out - @emph{November 11, 2005} +This release fixes a large number of bugs. Please upgrade before +reporting bugs in the 2.7 series. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.15 is out - @emph{November 3, 2005} +This release has another massive cleanup of the backend. Each grob +property may also be a "grob closure". This means that it is possible +to combine functions. Calculation of extent and offset of grob is now +controlled via the `X-extent', `Y-extent', `X-offset' and `Y-offset' +properties. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.14 is out - @emph{October 23, 2005} +This release has more cleanup in the layout-engine. Now, +properties that have Procedure values are thought to be procedures +that compute said property, i.e. +@verbatim + +\override Beam #'direction = #(lambda (grob) +(if (> (random 10) 5) UP DOWN)) + +@end verbatim +will set a random direction for beams. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.13 is out - @emph{October 18, 2005} +This release features slashed numerals, plus signs and interruptible +extender lines for figured bass. Merging of Figured bass lines has +been made switchable with the figuredBassCenterContinuations +property. For each grob, a subproperty in `callbacks' property defines +the procedure which computes it. This is major internal cleanup, which +also provides advanced tweakability for power +users. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.4 is out - @emph{October 11, 2005} +This release fixes a few minor problems with the stable +series. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.12 is out - @emph{October 07, 2005} +It features more annotations for the page layout engine and some more +sponsored features. Beamlets may stick out of the side of beams +(feature sponsored by Trevor Baca); new support for figured bass with +support for continuation lines and tuning of figures, brackets, and +alignments (feature sponsored by Trent Johnston); vertical alignments +of staves can now be tuned easily for individual systems (feature +sponsored by Nicolas +Sceaux). (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.11 is out - @emph{October 02, 2005} +Vertical spacing for page layout can now be tuned for each system +individually (feature sponsored by Trevor Baca and Nicolas +Sceaux). The slope of a stem-tremolo may be set manually (feature +sponsored by Sven Axelsson). There are a number of cleanups in the +handling and representation of systems, among other features and bug +fixes. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.10 is out - @emph{September 13, 2005} +This version adds proper support for "laissez vibrer ties", just enter +\laissezVibrer after a chord. This feature was sponsored by Henrik +Frisk. It also has a couple of minor +bugfixes. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.9 is out - @emph{September 5, 2005} +This is mainly a bugfix +release. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading Traduction française du site - @emph{September 03, 2005} +Grâce à @uref{about/thanks#website,l'équipe des traducteurs}, +de nombreuses pages du site sont maintenant disponibles en français, +notamment l'@uref{about/automated-engraving/index.fr.html,essai sur +la gravure musicale}. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.8 is out - @emph{August 29, 2005} +This release has support for right-to-left text formatting in markup +commands (sponsored by Aaron Mehl). In addition, it fixes a great +number of bugs, among others, support for writing MIDI files. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading Article in `De Standaard' - @emph{August 20, 2005} +The Belgian newspaper @emph{De Standaard} investigates what drives +Free Software authors in an article titled @emph{Delen van KENNIS +zonder WINSTBEJAG} (Non-profit sharing of +knowlegde) using LilyPond as an example. This marks +LilyPond's first appearance in mainstream printed press. +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.7 is out - @emph{August 22, 2005} +This release has a rewriting of tie formatting which was sponsored by +Bertalan Fodor, Jay Hamilton, Kieren MacMillan, Steve Doonan, Trevor +Baca, and Vicente Solsona +Dellá. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.6 is out - @emph{August 19, 2005} +This release adds support for numbered percent repeats, a feature +sponsored by Yoshinobu Ishizaki. It also has bugfixes for clashes +between slurs and symbols, like fingers dynamic +signs. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.5 is out - @emph{August 16, 2005} +Lily 2.7.5 has a large number of bugfixes, among others, in slur +formatting, spacing, rest collisions and tuplet bracket +formatting. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.4 is out - @emph{August 7, 2005} +LilyPond 2.7.4 has support for proportional notation, where the space +for a note is proportional to the time it +takes. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.3 is out - @emph{August 4, 2005} +This release fixes a memory corruption bug that was triggered by +\override'ing Beam settings. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.2 is out - @emph{August 2, 2005} +This release has a few bugfixes, among them: the autopackage will run +in more platforms, LilyPond will be much quicker for large +lilypond-book documents, and the up and down Fa note heads for shaped +heads have been +swapped. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.3 is out - @emph{July 25, 2005} +LilyPond 2.7.3 has improvements in performance which should result in +faster operations (15 to 20 percent). It also contains the new +"\displayLilyMusic" function. +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.2 is out - @emph{July 21, 2005} +LilyPond 2.7.2 has support for suggested accidentals for musica +ficta notation, easy entry for lyric melismata and improvements for +quicker entry of scores. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6 released - @emph{June 27, 2005} +Version 2.6 is the latest stable release of LilyPond. +It now +installs in a snap on Windows, MacOS X, and any version of Linux (x86). +@strong{Get up and running in minutes!} Pango text formatting lets you +print @strong{Unicode } lyrics in your favorite script and font. Create +@strong{SVG} files, and edit them in Inkscape. +(@uref{announce-v2.6.html,Announcement}, @ref{Old downloads}, @ref{Changes}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7.1 is out - @emph{July 20, 2005} +LilyPond 2.7.1 has no user-visible changes. However, due to +restructuring @qq{under the hood}, this version will be 10 to +20 % faster. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.6.1 is out - @emph{July 11, 2005} +This version fixes a few minor bugs found in +2.6.0, and also works on DOS-based Windows versions. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading LilyPond 2.7 is out - @emph{July 9, 2005} +LilyPond 2.7.0 is out. It has support for paragraph text and +pitched trill notation. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.31 released - @emph{June 22, 2005} +LilyPond 2.5.32 is now available for download (binaries for Fedora + +MacOS only). It has a few very minor bugfixes, and a rewrite of the +TTF embedding code, which should be a lot more robust now. +(@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading Traduction du site de LilyPond - @emph{15 juin 2005} +@uref{about/thanks#website,L'équipe des traducteurs} vous présente +le site de LilyPond en français. Nous travaillons sur la traduction des +pages encore non traduites. Bon surf ! +@newsEnd + + +@newsItem +@subsubheading 2.5.31 for Windows and MacOS - @emph{June 15, 2005} +2.5.31 is now available for both Windows and MacOS X. The Windows +version should now work with embedding TTF fonts, and the MacOS X has +better help functionality. +(@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.31 released - @emph{June 15, 2005} +This release has a few bugfixes. In the MacOS X version, ClickEdit has +been renamed to LilyPond, and you can now upgrade your files and +compile them directly from +LilyPond. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.30 released - @emph{June 10, 2005} +This is (hopefully) the last Release Candidate before 2.6. Give it a +good shake to find those last bugs! (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.29 released - @emph{June 7, 2005} +In this release the documentation also has pictures. In addition, the +Mac version can also read native mac fonts (.dfonts and fonts in +resource forks). (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.27 released - @emph{May 31, 2005} +It has a big bunch of minor bugfixes. This is another release +candidate for version 2.6, which should be released within the next 2 +weeks. Please send a bug report if you find a critical problem with this +release. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading Windows and MacOS installers available - @emph{May 26, 2005} +There are now a native, standalone installers for Windows and +MacOS. They also support PDF point & click. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.26 released - @emph{May 26, 2005} +This release has a couple of small bugfixes. +@newsEnd + + +@newsItem +@subsubheading 2.5.25 released - @emph{May 20, 2005} +This release has many small bugfixes and updates to the +documentation. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.24 released - @emph{May 12, 2005} +2.5.24 fixes a bunch of bugs; in particular, chord symbols (such as +slashed o) should now work on all platforms. This release has a new +feature: it is now possible to make staves appear in a different order +from the order that they were defined. (@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.23 released - @emph{May 6, 2005} +This release has a couple of small bugfixes, and a new feature. It is +now possible to start and stop the @code{StaffSymbol}, during a piece of +music, by doing @code{\stopStaff \startStaff}. This can be used to +produce Ossia staves. (@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading 2.5.22 released - @emph{May 3, 2005} +2.5.22 is a bugfix +release. The most visible improvement is in the PDF : this release +will produce smaller PDF files, with symbols that look better on +screen. +(@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading April 25, 2005 - 2.5.21 released! +2.5.21 has more bugfixes. It also has support for "grid +lines", bar like vertical line, which are aligned with the notes. The +auto-beam engraver was rewritten, so it also works with irregular time +signatures like 5/8. +(@ref{Changes}, +@ref{Old downloads}) +@newsEnd + + +@newsItem +@subsubheading April 18, 2005 +LilyPond 2.5.20 has lots of bugfixes, in particular, MIDI files of +multi-movement pieces don't overwrite each other. Version 2.5.20 also +supports putting arrows on lines, such as glissandi. +More details are in the +the @ref{Changes} +file, or go straight to @ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading April 15, 2005 +LilyPond 2.5.19 was released. The command `\epsfile' allows inclusion +of EPS graphics into markup texts and the music function +`\musicDisplay' will display a music expression as indented +Scheme code. Take a look at +the @ref{Changes} +file and @ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading April 6, 2005 +2.5.18 is a bugfix release. It has many small cleanups in the +web-based documentation, and many small cleanups all over the +place. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading March 31, 2005 +2.5.17 is out. This release features many small bugfixes. In addition, +it has support for string number notation for guitar. This feature was +sponsored by Gunther Strube. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading March 20, 2005 +LilyPond 2.5.16 is out. This release fixes a few minor but irritating +errors. A Fedora Core 3 binary is also available. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading March 14, 2005 +LilyPond 2.5.15 is out. This release has clean ups in the SVG output, +and now uses the LilyPond number font for time signatures. It is +now possible to add text before and after music. This can be used to +add verses after a music. Take a look at the @ref{Changes} +file and @ref{Old downloads}! +@newsEnd + + +@newsItem +@subsubheading March 7, 2005 +LilyPond 2.5.14 is out. It is now possible (and in fact, encouraged), +to build LilyPond either without the Kpathsea TeX library or with the +Kpathsea dynamically loaded, but only for the -btex backend. This +means that packages do not have to depend on TeX anymore. With this, +the Windows download size will go down significantly. Take a look at +the @ref{Changes} +file and download @ref{Old downloads}! +@newsEnd + + +@newsItem +@subsubheading March 7, 2005 +LilyPond 2.4.5 is out. This release backports the tieWaitForNote +feature and has support for tetex-3.0. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 28, 2005 +LilyPond 2.5.13 is available for Fedora Core 3. You need to install @uref{http://lilypond.org/download/binaries/Fedora-3/ghostscript-8.15rc3-0.i386.rpm,ESP +Ghostscript 8.15rc3}. Unfortunately, this version of Ghostscript +lacks the IJS dynamic library, which means that it will conflict with +the gimp-print package. You may install it with --nodeps. Use at your +own risk. +@newsEnd + + +@newsItem +@subsubheading February 28, 2005 +LilyPond 2.5.13 is out. This release has Point and click support for +PDF output. You can read more about it @uref{http://lilypond.org/doc/v2.5/Documentation/user/out-www/lilypond/Point-and-click.html,here}. +Take a look at the @ref{Changes} +file and download @ref{Old downloads}! +@newsEnd + + +@newsItem +@subsubheading February 26, 2005 +The @uref{http://lsr.dsi.unimi.it/,LilyPond Snippet +Repository (LSR)} is a searchable database of LilyPond code +snippets. You can add snippets too, so join the LSR project, and +contribute creative ideas for using LilyPond. +@newsEnd + + +@newsItem +@subsubheading February 21, 2005 +LilyPond 2.5.12 is out. The big news is that this release supports +TrueType fonts. This means that it is now possible to use @strong{all} +fonts available via FontConfig. Also, arpeggios may be written out +using ties and individual objects may have colors! Take a look at +the @ref{Changes} +file and @ref{Old downloads}! +@newsEnd + + +@newsItem +@subsubheading February 4, 2005 +LilyPond 2.5.11 is out. In this +release, foreign character sets are now supported in lilypond-book +too, and it is possible to put system separators between systems. +@ref{Old downloads}! +@newsEnd + + +@newsItem +@subsubheading January 31, 2005 +LilyPond 2.5.10 is out. This release +sports as new EPS backend, based on the PS backend. This backend is +used in the new and improved lilypond-book script. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 26, 2005 +LilyPond 2.5.9 is out. This release fixes a couple of annoying +bugs in the direct PS output for piano braces. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 16, 2005 +LilyPond 2.5.8 is out. This +release has many internal code cleanups. In addition, +accuracy of error reporting has been improved. +See the +@uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.3065&content-type=text/vnd.viewcvs-markup, +change log +} and @ref{Old downloads}! +@newsEnd + + +@newsItem +@subsubheading January 11, 2005 +LilyPond 2.5.7 is out. This release has a completely usable +Pango integration for the PS backend. The default font is +Century Schoolbook from the PS font suite. It also has +small updates to the tablature settings by Erlend Aasland, +assorted manual updates by Graham, and an overhaul of the +font code by Werner. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.3048&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading January 02, 2005 +LilyPond 2.5.6 was released. This is a "technology preview" +release, which means that it has all kinds of nifty +features, but is not actually usable for producing nicely +printed scores. For this reason, an RPM of this release was +not produced. The PS backend is now completely switched over +to Pango/FontConfig: for -f ps, LilyPond only accepts UTF8 +input, all text fonts are loaded through Pango, the TeX +backend now offloads all metric computations to LaTeX, the +SVG and GNOME backends are broken, most probably. +@ref{Old downloads} +and check out the +changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.3013&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading December 28, 2004 +LilyPond 2.5.5 is out. It is the first one to link against +FontConfig and Pango, although it is only available in the "-f +ps" output. The default output format has been changed back TeX +while we stabilize the Pango/FontConfig integration. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev= 1.3000&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading December 20, 2004 +LilyPond 2.5.4 is out. This release has some major +brainsurgery in the font handling. As of now, LilyPond loads +the music fonts in OpenType font format using FreeType. +This has made a lot of things simpler, including font +handling for the GNOME backend and SVG backend. +@ref{Old downloads} +and check out the +changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2974&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading December 3, 2004 +LilyPond 2.5.3 was released. A new script, `\espressivo' has +been added, for a combination of crescendo and decrescendo +on a single note. In markups, expressions stacked with +`\column', `\center-align', etc, are not grouped with `< ... +>' anymore, but with `@{ ... @}'. LilyPond will now avoid line +breaks that cause long texts to stick outside of the page +staff. Grace notes following a main note, used to be entered +by letting the grace notes follow a skip in a parallel +expression. +@ref{Old downloads} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2908&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 26, 2004 +LilyPond 2.5.2 was released. It has several goodies, +including solfa-notation (shaped noteheads), and an easier +mechanism for customizing title, footer and header +layout. Don't forget to rebuild the fonts, as they have been +changed to accomodate the solfa-notation. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2898&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 20, 2004 +LilyPond 2.5.1 is out. This is an experimental release, +containing some proof-of-concept code for our graphical +layout editor. You can add and remove things from the file, +and the tweaks will still work, as long as the tweaked notes +remain in the place (ie. start at the same time-wise and be +part of the same context). Further attractions are: the +gnome backend now also draws beams and slurs, updates to the +SVG backend, support for the lmodern font set for TeX, +various bugfixes. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2881&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 12, 2004 +The LilyPond development is OPEN once again! The first +release of the 2.5 series has the following new Features: +Positioning of slurs can now be adjusted manually, Grace +notes are correctly quoted and formatted when using cue +notes, Cue notes can now be created with +@verbatim + +\cueDuring #VOICE-NAME #DIRECTION { MUSIC } + +@end verbatim +Stemlets (short stems over beamed rests) have been added. +In addition, Jan hacked together some highly experimental +code where you can use the mouse to drag and drop objects in +the -f gnome backend. These tweaks can be saved and are +applied to the PS and TeX output as well. +@ref{Old downloads} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2837&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading November 11, 2004 +LilyPond 2.4.2 is out. This release fixes a number of security +problems with --safe, and adds a lot of polishing fixes. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading November 4, 2004 +LilyPond 2.4.1 is out. This release includes a number of small +fixes that were made to 2.4.0 last week. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2780.2&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 31, 2004 +LilyPond 2.4.0 was just @uref{announce-v2.4.html,released!} +This new stable version has support for page-layout, +completely rewritten slur formatting and many other +improvements. Read about them in the @ref{Changes} +file. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading October 29, 2004 +LilyPond 2.3.26 is out. This is another 2.4 release +candidate. This release fixes a number of minor bugs, and +some problems with the conversion scripts. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2773&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 29, 2004 +2.3.25 is the final release candidate for LilyPond 2.4. +Werner has been overhauling the TeX macros and +lilypond-book. In addition, this release contains an +important fix for raggedbottom page-layout. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2765&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 27, 2004 +LilyPond 2.3.24 is a further polished 2.4 release candidate. +This release has more improvements by Werner for the TeX +backend, and a bunch of other small fixes. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2752&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 24, 2004 +LilyPond 2.3.23 has bugfixes in the documentation, lilypond-book and +--preview output. This release can be considered as a release +candidate for LilyPond 2.4. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2742&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 10, 2004 +LilyPond 2.3.22 fixes a bunch more bugs, to make 2.4 a really +stable release. In addition, it renames the \paper@{@} block to +\layout@{@}. The \bookpaper@{@} block is now called +\paper@{@}. +@ref{Old downloads} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2709&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 09, 2004 +LilyPond 2.3.21 is out. It is a serious release candidate for +the next stable release LilyPond. This version has a cleanup +and some small formatting improvements of the slur +code. +@ref{Old downloads} +and check +out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2692&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading October 02, 2004 +LilyPond 2.3.20 was released. It fixes the biggest problems +with encoding and the TeX backend. As a result, latin1 +characters (like the german SS) show up correctly in the +output once again. Also it has the usual bugfixes and updates +in the documentation. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2674&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 29, 2004 +The LilyPond development team will be present at the @uref{http://www.nluug.nl/events/sane2004/bazaar/index.html,Free +Software Bazaar} of the NLUUG SANE 2004 conference today. If you +are in the neighborhood, drop by for live contact with the Team or +just a friendly chat. Registration is not required to attend. +@newsEnd + + +@newsItem +@subsubheading September 26, 2004 +LilyPond 2.3.19 is out. It's mainly a bugfix release. +@ref{Old downloads} +and check out the changes +in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2652&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 20, 2004 +LilyPond 2.3.18 was released. It has further improvements in +the slur formatting, and a small syntax change: the mode +changing commands (`\chords', `\lyrics', etc.) have been +renamed to `\chordmode', `\lyricmode', etc. The command +`\chords' is an abbreviation for \new ChordNames \chordmode +... `\drums', `\lyrics', `\chords', `\figures' function +similarly. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2614&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 11, 2004 +LilyPond 2.3.16 was released. It fixes a couple of annoying +bugs, and has an important addition in the slur-formatter. Slurs that +pass note heads much closer than the average distance get an extra +penalty. This fixes a lot of difficult slurring cases. See +input/regression/new-slur for some examples. +Please consider this release as a 3.0 pre-release so try to find as +many bugs as possible. A report including a small .ly example +can be filed at bug-lilypond@@gnu.org +In this case, a bug is defined as something that the current 2.3 does +worse than the latest 2.2 release. We want to be sure that no output +will get uglier by upgrading to 3.0, so that once 3.0 is out, nothing +will hold users back in switching. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2562&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 10, 2004 +LilyPond 2.3.15 was released. It fixes for some gaffes with +the new vertical spacing engine, has lots of documentation +updates, and has support for landscape output in the direct +postscript output. Also, the types of events quoted with +`\quote' can now be tuned with `quotedEventTypes'. By default, +only notes and rests end up in quotes. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2553&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading September 6, 2004 +LilyPond 2.3.14 was released and has exciting features! +LilyPond will try to keep staves at the same distances across a +page, but it will stretch distances to prevent collisions; key +signature cancellations are now printed before the bar line; +different voices that all use "\quote" can now refer to each +other. +@ref{Old downloads} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2534&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 29, 2004 +LilyPond now has a Documentation +Editor, Graham Percival. From now on, he will oversee that +useful information flows from the mailiing list into the +manual. Also, if there are unclear sections in the manual, +let him know via one of the mailing lists. +As a start of his career, he worked to transform the +"Templates" section of the website into a readable and comprehensive +chapter of the user manual. +A lot of cheers for Graham! +@newsEnd + + +@newsItem +@subsubheading August 29, 2004 +LilyPond 2.3.13 was released. The new slur code was +improved, scripts can be made to avoid slurs, by setting +inside-slur to #f. It is no longer necessary to instantiate +"up" and "down" staves separately when using +\autochange. Jurgen Reuter refreshed the logic around +mensural flags, so they are adjusted for staff lines once +again. +@ref{Old downloads} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2520&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 24, 2004 +LilyPond 2.2.6 fixes a few minor issues, among others, the +disappearing metronome mark. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.33&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 23, 2004 +LilyPond 2.3.12 is out. This release has a lot of fixes and +a new feature: there is now support for putting two slurs on +chords, both above and below. This is switched on with the +`doubleSlurs' property. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2489&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 3, 2004 +LilyPond 2.3.11 is out. This release basically is 2.3.10 with a few +annoying bugs fixed. +@ref{Old downloads} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2449&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading August 1, 2004 +LilyPond 2.3.10 is out. This release has a major clean-up of the +input/test/ directory. Many examples have been moved to the regression +test or manual, and the superfluous or outdated ones have been +removed. The directory has gone from 146 examples to 72 examples. That +means that we're halfway cleaning it out. Incidentally, the manual +has gone from 200 to 220 pages. New features: +@itemize +@item +Running trills now have their own spanner and event. They are +started and stopped with \startTrillSpan and \stopTrillSpan +@item +There is a new markup command `\postscript' that takes a string +that is dumped as verbatim PostScript +@end itemize + +@ref{Old downloads} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2435&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 30, 2004 +LilyPond 2.3.9 is out. The important change is that lilypond +now once-again directly runs the binary. The old wrapper script has +been renamed to lilypond-latex.py, and should only be used for legacy +projects. The recommended route is either using lilypond directly +(with \book, you can have multiple movements within one document), or +to run lilypond-book with a LaTeX wrapper file. +This release also fixes a bunch of small errors. I now consider +LilyPond feature complete for a 3.0 release. Next on the TODO list is +updating the manual, and after that's done we can release 3.0. The +projected date for this to happen is in about a month. +@ref{Old downloads} +and check out +the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2416&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 23, 2004 +LilyPond 2.3.8 fixes a few minor bugs in the new slur code, +and has rewritten support for ledger lines. Now, in tight +situations, ledger lines will be shortened so they stay +separate. This also required a cleanup of the Ambitus +implementation. +@ref{Old downloads} +and check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2395&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 19, 2004 +LilyPond 2.3.7 was released and has new exciting features! +The slur formatting has been rewritten. The new slur code +works similar to the Beam formatter: scores are assigned for +all esthetic components of a slur. A large number of +combinations for begin and end points is then tried out. +Slurs will now also take into account collisions with staff +lines, scripts (like staccato and accent) and accidentals. In +the LilyPond emacs mode, the `|' will now display the current +beat within the measure. +@ref{Old downloads} +and check out the changes in +the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2383&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 15, 2004 +LilyPond 2.2.5 was released. It has a few bug fixes from +2.3.x. +@ref{Old downloads} +and check +out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.28&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 11, 2004 +An introductory article on LilyPond appeared on @uref{http://www.linuxjournal.com/article.php?sid=7657&mode=thread&order=0,Linux +Journal}. +@newsEnd + + +@newsItem +@subsubheading July 5, 2004 +LilyPond 2.3.6 was released. This release has more updates +for the Fret diagram code (thanks, Carl!), fixes a bunch of +bugs, including a serious one that trashed a lot of beam +formatting, and was also present in the 2.2 series. +@ref{Old downloads} +and check out the changes +in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2306&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading July 5, 2004 +LilyPond 2.2.4 was released. It is mainly a bug fix +release. +@ref{Old downloads} +and +check out the changes in the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.23&content-type=text/vnd.viewcvs-markup,ChangeLog}. +@newsEnd + + +@newsItem +@subsubheading June 25, 2004 +LilyPond 2.3.5 has numerous small bugfixes and cleanups, and +features more work in the experimental GNOME output +module. Adventurous hackers can check the instructions at +scm/output-gnome.scm and try to run +buildscripts/guile-gnome.sh to see what the fuss is all about. +Carl Sorensen also provided us with more patches to the +fret-diagram output. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2293&content-type=text/vnd.viewcvs-markup,ChangeLog} +and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading June 20, 2004 +LilyPond 2.2.3 has a turkish translation and fixes a few minor +bugs that were reported over the past month. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.16&content-type=text/vnd.viewcvs-markup,ChangeLog} for a full description and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading June 13, 2004 +LilyPond 2.3.4 further improves the output backends. As a +result, manual page-breaks, multiple output formats and putting +@code{\score} into markups now works. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2242&content-type=text/vnd.viewcvs-markup,ChangeLog} +and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading May 31, 2004 +LilyPond 2.3.3 has many internal changes relating to the output +backend (PostScript) and page-layout. In addition, it contains a few +bugfixes for recently reported problems. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2207&content-type=text/vnd.viewcvs-markup,ChangeLog} +and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading May 31, 2004 +LilyPond 2.2.2 is out. It has a number of small bugfixes, so upgrade +if any of these errors concern you. Check out the @uref{http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lilypond/ChangeLog?rev=1.2000.2.9,ChangeLog} +or head straight to the +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading May 26, 2004 +LilyPond 2.3.2 is out. This release has a lot of internal +changes relating to page layout, but also sports experimental +fret-diagram code. Check out the @ref{Changes} or head straight to the +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading May 9, 2004 +LilyPond 2.3.1 is out. This release has many new and cool +features. Check out the @ref{Changes} or head straight to the +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading May 4, 2004 +Help LilyPond get better, and join in on LilyPond +development! This +@uref{devel/participating/call-for-help.html,call for +help} was posted on the mailing list a month ago, and we +are still looking for a Release Meister, Code Janitor, +Newsletter editor and a Writer for implementation +Documentation. Of course, any other help is also welcome! +@newsEnd + + +@newsItem +@subsubheading May 3, 2004 +LilyPond 2.2.1 has been released. It fixes a handful of bugs. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading April 17, 2004 +LilyPond 2.2.0 is now available +on Windows, and should find its way to the Cygwin mirrors +soon. +@newsEnd + + +@newsItem +@subsubheading April 12, 2004 +LilyPond 2.3.0 is the first release +in the 2.3 cycle. The focus for 2.3 is page layout, so +instrumentalists can force parts to have page breaks at sane turning +points. This release is @emph{experimental}; expect things to break! +More info in the @ref{Changes}. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading April 8, 2004 +A French article on the new LilyPond +release appeared on @uref{http://linuxfr.org/2004/04/08/15968.html,linuxfr.org}. +@newsEnd + + +@newsItem +@subsubheading April 8, 2004 +Binaries for LilyPond 2.2.0 are available for +MacOS X, Slackware, Mandrake and Debian Woody. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading April 1, 2004 +LilyPond 2.2.0 is out! This new stable version has +completely revamped support for for orchestral score +formatting, cue notes, font size management, lyric formatting, +drum notation/playback and document integration. Read about it in +the @uref{announce-v2.2.html,announcement} or skip to the +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading March 31, 2004 +LilyPond 2.1.37 has build fixes for Cygwin and SUSE, +bugfixes for part-combining and chord tremolos and even more +documentation polish. This should be the final release +candidate; expect only regression bugs to be fixed before +2.2. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading March 30, 2004 +LilyPond 2.1.36 has many fixes in +the user manual. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading March 28, 2004 +LilyPond 2.1..35 fixes a slew of +bugs, and has the @code{raggedlast} option, which causes +paragraph like line breaking for scores. More info in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading March 22, 2004 +LilyPond 2.1.34 fixes minor bugs, and has more rewriting. +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading March 21, 2004 +LilyPond 2.1.33 fixes a serious bug, and a few other +irritations. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading March 20, 2004 +LilyPond 2.1.32 has more rewriting +in the user manual. There is also an experimental +implementation of optimal page breaking (Postscript backend +only). +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading March 15, 2004 +LilyPond 2.1.31 is out. It has fixes the alignment of bass +figures and spurious dynamic warnings in MIDI. New +attractions include rewritten font-selection routines. See +the +@ref{Changes} and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading March 14, 2004 +The +@uref{http://linuxmusician.com/index.php?option=articles&task=viewarticle&artid=10,linuxmusician.com interview} made the +@uref{http://slashdot.org/article.pl?sid=04/03/13/2054227&mode=thread&tid=141&tid=188,slashdot +frontpage!}. +@newsEnd + + +@newsItem +@subsubheading March 11, 2004 +@uref{http://linuxmusician.com,linuxmusician.com} is +running an +@uref{http://linuxmusician.com/index.php?option=articles&task=viewarticle&artid=10,interview} +with Han-Wen Nienhuys and Jan Nieuwenhuizen, the main +authors of LilyPond. +@newsEnd + + +@newsItem +@subsubheading March 11, 2004 +LilyPond 2.1.30 has editorial fixes for the manual, and +experimental support for page layout in the PostScript +backend. See the +@ref{Changes} and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading March 9, 2004 +LilyPond 2.1.29 fixes a couple of MIDI bugs, and has +experimental support for producing titles with +@code{markup}. +@newsEnd + + +@newsItem +@subsubheading February 29, 2004 +In LilyPond 2.1.28 Scheme property functions may be used +argument to @code{set!}. In addition, parts of the manual +have been proofread and corrected in this release. See the +@ref{Changes} and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading February 24, 2004 +LilyPond 2.1.27 takes into account instrument transpositions +when quoting other voices. This release also fixes a number +of lyrics related bugs. See the +@ref{Changes} and +@ref{Old downloads}. +@newsEnd + + +@newsItem +@subsubheading February 23, 2004 +LilyPond 2.1.26 has a new, experimental feature for quoting +other voices in instrumental parts. This can be used to +produce cue notes. More information in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 18, 2004 +LilyPond 2.1.25 fixes many bugs, and changes the conventions +for altering accidental rules. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 16, 2004 +LilyPond 2.1.24 has a big +internal rewrite. One of its practical consequences is that +@code{\with} now also works with @code{Score} +contexts. Further 2.1.23, which was not announced here, +fixes a few bugs caused by the change of @code{\property} +syntax and has updates in the Program Reference document. +More information in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 13, 2004 +LilyPond 2.1.22 has a +simplification of the @code{\property} syntax: it is +shorter and more consistent now. More information in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 12, 2004 +In LilyPond 2.1.21, output +tweaks can be done at multiple levels of the context +hierarchy. In addition, it has a bunch of bugfixes, +improvements in the documentation. More information in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 9, 2004 +LilyPond 2.1.20 has MIDI +output for drums. It also sports a completely rewritten +lilypond-book script, which is cleaner, shorter, and faster. +It also has a large number of bugfixes. +More information in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 5, 2004 +LilyPond 2.1.19 has rewritten +support for drum notation. This release also makes some +long-standing cleanups: the removal of @code{Thread} (all +functionality is now moved into @code{Voice}) and Lyrics +(functionality moved to @code{LyricsVoice}) context. +More information in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 4, 2004 +LilyPond 2.1.18 is out. This +release has the new part-combiner installed by default, and a +similar implementation of @code{autochange}. More information +in the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading February 2, 2004 +LilyPond 2.1.17 is out. It adds texts +(solo, a due) for the part combiner. It also reinstates the +@code{--safe} option which prevents havoc by Scheme exploits. More +information in the +@ref{Changes}. +@newsEnd + + +@newsItem +@subsubheading January 28, 2004 +LilyPond 2.1.16 is out; its main feature +is that it fixes the autobeams gaffe of 2.1.15. The part-combiner +has been tested successfully on larger pieces. In the near future, +expect more part-combining eye-candy. +More information in +the +@ref{Changes}. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 26, 2004 +LilyPond 2.1.15 further improves the part-combiner, and fixes many +bugs, among others in pedal brackets and finger positioning. +More information in +the +@ref{Changes}. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 21, 2004 +LilyPond 2.1.14 +has the first release of the new part combiner. If you have scores that +use part-combining, please consider giving it a test-run. In addition +many bugs relating to mixed staff sizes have been fixed. +More information in +the +@ref{Changes}. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 20, 2004 +The lilypond.org domain has been moved to a new server. This +will result in better connectivity and more bandwidth. Due +to security concerns, the new server does not offer FTP +access, but only HTTP downloads. +@newsEnd + + +@newsItem +@subsubheading January 20, 2004 +LilyPond 2.1.13 fixes a small but +nasty bug in side-positioning placement, and some bugs in +tuplet, tie and accidental formatting. This release contains +rudimentary work on a new part-combiner. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 19, 2004 +LilyPond 2.1.12 fixes many bugs +and improves formatting of ottava brackets. More information in +the +@ref{Changes}. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 18, 2004 +LilyPond 2.1.11 is now also +available for Windows! For downloading, go +@uref{http://www.inf.bme.hu/~berti/lilypond/,here}. +@newsEnd + + +@newsItem +@subsubheading January 17, 2004 +In 2.1.11, the mechanism for +setting staff size and page is much simplified. In addition +there are improvements in the notehead shape, and there is +balloon help! +More information in the +@ref{Changes}. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 16, 2004 +LilyPond 2.1.10 has a load of +bugfixes and a shorter syntax for octave checks. More +information in the +@ref{Changes}. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 13, 2004 +LilyPond 2.1.9 has a new mechanism +for adding lyrics to melodies. It is now possible to have +different melismatic variations for each stanza. More +information in the +@ref{Changes}. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 9, 2004 +LilyPond 2.1.8 has an important new +feature: it is now possible to use @code{\property} to tune +the appearance of spanning objects like @code{StaffSymbol} and +@code{SystemStartBrace}. In addition, contexts may be +modified with @code{\remove} and @code{\consists} for +individual music expressions. +More information in the +@ref{Changes}. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 7, 2004 +An update to the stable branch, +version 2.0.2, was released today. It contains a couple of +minor bugfixes. @ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading January 6, 2004 +LilyPond 2.1.7 continues to +improve the layout of the Schubert test piece; this release +focuses on dot placement and multi measure rests centering. +More information in the +@ref{Changes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading January 4, 2004 +LilyPond 2.1.6 continues to +improve the layout of lyrics. More +information in the +@uref{@@DOC@@v2.1/Documentation/topdocs/out-www/NEWS.html,release +notes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading January 2, 2004 +in LilyPond 2.1.5, the lyric +alignment is completely revamped, and now matches my Edition +Peters version of the Schubert song Sängers Morgen. More +information in the +@ref{Changes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 30, 2003 +LilyPond 2.1.4 is released. Font shapes and linethickness +are now truly different for different staff sizes, thus lending +an engraved look to scores printed in smaller type too. See the +@ref{Changes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 23, 2003 +LilyPond 2.1.3 released. +Interpreting and formatting is now done while parsing the +file. This allows for Scheme manipulation of music, and could +be used to implement experimental MusicXML output (volunteers +to implement this are welcome!) See the +@ref{Changes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 17, 2003 +LilyPond 2.1.2 released. This +release has a new mechanism for setting font sizes, which +combines different font design sizes and continuous font +scaling. See the +@ref{Changes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading December 16, 2003 +LilyPond 2.1.1 released. This +release wraps together all the small fixes made during +Han-Wen's absence. See the +@ref{Changes} and download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading October 11, 2003 +LilyPond 2.1.0 released. See the +@ref{Changes} and +download @uref{install/#2.1,here}. +@newsEnd + + +@newsItem +@subsubheading October 11, 2003 +LilyPond 2.0.1 binaries for Mandrake 9.1 +available from +@uref{http://rpm.nyvalls.se/sound9.1.html,here} +thanks to Heikki Junes. +@newsEnd + + +@newsItem +@subsubheading October 9, 2003 +LilyPond 2.0.1 binaries for Slackware 9 +available from @uref{install/#2.0,here}, +thanks to Ricardo Hoffman. +@newsEnd + + +@newsItem +@subsubheading October 5, 2003 +LilyPond 2.0.1 binaries are available for Macos X, many thanks to +Matthias Neeracher. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading October 4, 2003 +LilyPond 2.0.1 binaries are available for Windows (Cygwin +version 1.5). +@ref{Old downloads}. Thanks to Bertalan +Fodor, our new Cygwin maintainer! +@newsEnd + + +@newsItem +@subsubheading September 29, 2003 +LilyPond 2.0.1 is released. It +contains minor bugfixes. +See the @ref{Changes} +or download @uref{install/#2.0,here} directly. +@newsEnd + + +@newsItem +@subsubheading September 27, 2003 +PlanetCCRMA has been updated to include LilyPond 2.0. Go +@uref{http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html#lilypond, +here} to download. Thanks to Fernando Pablo +Lopez-Lezcano! +@newsEnd + + +@newsItem +@subsubheading September 24, 2003 +LilyPond 2.0.0 is released. The +focus of this release is cleanups of the syntax: entering music is +now much easier and more efficient. Read the announcement +@uref{announce-v2.0.html,here}, or go to the +@uref{install/#2.0,download page} directly. +@newsEnd + + +@newsItem +@subsubheading September 24, 2003 +LilyPond 1.9.10 is released. This is +the final LilyPond 2.0 release candidate. Check +the @ref{Changes} and +download @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading September 23, 2003 +LilyPond 1.9.9 is released. This is +the second LilyPond 2.0 prerelease. Check +the @ref{Changes} and +download @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading September 19, 2003 +LilyPond 1.9.8 is released. This is +the first LilyPond 2.0 prerelease. Check +the @ref{Changes} and +download @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading September 17, 2003 +LilyPond 1.9.7 is released. LilyPond +now has support for quarter tone accidentals! +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading September 16, 2003 +LilyPond 1.9.6 is released. +It has a lot of minor fixes and updates. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading September 10, 2003 +LilyPond 1.9.5 is released. +With this release, the 1.9 branch is feature +complete. After some stabilization and documentation work, 2.0 +will be available in a few weeks. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading September 9, 2003 +LilyPond 1.8.2 is released. This +release fixes a couple of minor bugs. +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading September 7, 2003 +LilyPond 1.8 binaries are available +for Windows (Cygwin version 1.5). +@ref{Old downloads} +@newsEnd + + +@newsItem +@subsubheading August 31, 2003 +LilyPond 1.9.4 is released. +@emph{This is an experimental release}: read the +@uref{http://lists.gnu.org/archive/html/lilypond-devel/2003-08/msg00133.html,announcement} +before trying. +@newsEnd + + +@newsItem +@subsubheading August 31, 2003 +LilyPond 1.8 binaries for slackware +available. Get them @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading August 31, 2003 +LilyPond 1.9.3 is released. This +release supports tagging for music version control, and has better +fingering placement flexibility. Read the +@ref{Changes} and get it @uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 28, 2003 +LilyPond 1.9.2 is released. Read the +@ref{Changes} and get it +@uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 26, 2003 +LilyPond 1.9.1 is released. Read the +@ref{Changes} and get it +@uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 25, 2003 +The LilyPond 1.9 development release is available. Read the +@ref{Changes} and get it +@uref{download#1.9,here}. +@newsEnd + + +@newsItem +@subsubheading August 25, 2003 +Mandrake 9.1 RPMS available, get them +@uref{http://rpm.nyvalls.se/sound9.1.html,here}. +@newsEnd + + +@newsItem +@subsubheading August 21, 2003 +LilyPond 1.8.1 was released. Get it @uref{install/,here}, or +read the @ref{Changes}. +@newsEnd + + +@newsItem +@subsubheading August 18, 2003 +PlanetCCRMA (eg. RedHat 8 and 9) +has been updated to 1.8. +Download @uref{http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html#lilypond,here.} +@newsEnd + + +@newsItem +@subsubheading August 7, 2003 +LilyPond 1.8 is released. Read +@ref{Changes} and get it @uref{install/,here}. +@newsEnd + + +@newsItem +@subsubheading August 7, 2003 +New website went live! +@newsEnd + + +@newsItem +@subsubheading August 6, 2003 +Announced new website. +@newsEnd + + +@newsItem +@subsubheading August 1, 2003 +LilyPond 1.7.30 released. +@newsEnd + + +@newsItem +@subsubheading July 30, 2003 +Website: present @uref{about/automated-engraving/index.html,treatise} +about music engraving, music printing software, and LilyPond's +unique faculties. +@newsEnd + + +@newsItem +@subsubheading July 29, 2003 +1.7.29 - release candidate 4 has been released. Packages for +Red Hat, Debian, Cygwin are @uref{install/,available}. +@newsEnd + diff --git a/Documentation/web/others-did.bib b/Documentation/web/others-did.bib new file mode 100644 index 0000000000..1d9627af7d --- /dev/null +++ b/Documentation/web/others-did.bib @@ -0,0 +1,39 @@ + +@inproceedings{percival08, + title = {Generating Targeted Rhythmic Exercises for Music Students +with Constraint Satisfaction Programming}, + author = {Graham Percival and Tosten Anders and George Tzanetakis}, + booktitle = {International Computer Music Conference}, + year = 2008, +} + +@inproceedings{passos09, + title = {Functional Harmonic Analysis and Computational Musicology +in Rameau}, + author = {Alexandre Tachard Passos and Marcos Sampaio and Pedro +Kröger and Givaldo de Cidra}, + booktitle = {Proceedings of the 12th Brazilian Symposium on Computer +Music}, + year = 2009, + pages = {207--210}, +} + +@inproceedings{simoes07, + title = {Using Text Mining Techniques for Classical Music Scores +Analysis}, + author = {Alberto Simões and Anália Lourenço and José João Almeida}, + booktitle = {New Trends in Artificial Intelligence}, + editor = {J. Neves et al.}, + year = 2007, +} + +@inproceedings{baird05, + title = {Real-time generation of music notation via audience interaction using +python and GNU LilyPond}, + author = {Kevin C. Baird}, + booktitle = {New Interfaces for Music Expression}, + year = 2005, + month = "May", + location = "Vancouver, Canada" +} + diff --git a/Documentation/web/server/GNUmakefile b/Documentation/web/server/GNUmakefile new file mode 100644 index 0000000000..b8e004a888 --- /dev/null +++ b/Documentation/web/server/GNUmakefile @@ -0,0 +1,7 @@ +depth=../../.. +LOCALSTEPMAKE_TEMPLATES = ly +include $(depth)/make/stepmake.make + +EXTRA_DIST_FILES = favicon.ico robots.txt +EXTRA_DIST_FILES += lilypond.org.htaccess website-dir.htaccess + diff --git a/Documentation/web/server/favicon.ico b/Documentation/web/server/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..82d4b3f86143a9313146d64c1a868286887f05de GIT binary patch literal 318 zcmZQzU<5(|0RaXO&|qX>5ChRb3=&ZQVnzlQAj!bc045;>L^T6L%$Ao7S&PaUSaZKK zB=3E}@c;jR2Cu?kh96nx3~lG8Bk91-OoM~+GBC5eyc|TQ18I-|kSZ?^FNe`(<>iHf zg5e-R5f>Nn^78aT7Z(>tpq>;L1``O)Wa1)TmIf4daS=;Pb4hV=a{(IUmgeG?0x~%b OLV}rTY1mywyeI%;B0mQJ literal 0 HcmV?d00001 diff --git a/Documentation/web/server/lilypond.org.htaccess b/Documentation/web/server/lilypond.org.htaccess new file mode 100644 index 0000000000..d696f1093e --- /dev/null +++ b/Documentation/web/server/lilypond.org.htaccess @@ -0,0 +1,127 @@ +# htaccess for root dir of lilypond.org +# ---------------------------------------------------- +# The file comes from git master: +# Documentation/web/server/lilypond.org.htaccess +# +# Please do not edit it directly (unless something +# is critically broken); instead, change it in git +# and then do the: +# update-git.sh +# check-git.sh +# copy-git.sh +# make-website.sh +# as discussed in: +# Contributor 5.2 Uploading and security +# ---------------------------------------------------- + +RewriteEngine On + +# Deny following of symlinks by robots. +# HTTrack is a known offender. +# better yet, to redirect this to page that tells adminstrator +# about brokenness +RewriteCond %{HTTP_USER_AGENT} httrack [NC] +RewriteRule ^.*/source/.*$ /please-respect-robots.txt.html [L] + +# Permanent top level entry points -- ./doc +RedirectMatch ^/music-glossary /glossary +RedirectMatch ^/tutorial /learning +RedirectMatch ^/documentation/$ /doc +# Possibly resurrect this with new web site +# This breaks the documentation index with old site +# RedirectMatch ^/documentation$ /doc +# +RedirectMatch ^/bugs /bug-reports +#RedirectMatch ^/bugs http://code.google.com/p/lilypond/issues/list +RedirectMatch ^/wiki http://wiki.lilynet.net +# the new website already has an /authors +#RedirectMatch ^/authors /doc/Documentation/topdocs/AUTHORS +# the new website has news on the main page +RedirectMatch ^/news / +RedirectMatch ^/stable /doc/stable +# the new website has a dedicated page for development. +#RedirectMatch ^/development /doc/development + +#old# default doc dir +RedirectMatch ^/doc/*$ /doc/v2.14 +# make attempt at `latest' symlink avoid ^v catch-all doc fix rule below +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 +# RedirectMatch ^(.*/)/+(.*)$ $1$2 + +########################################### + +## Rewrite all non-existing files at toplevel to the /web/ dir, so our +## internal structure for rsync doesn't have to be changed. +## This works for the current/old site as well as the new one. + +RewriteEngine on +RewriteBase / + +SetEnvIf REQUEST_URI .* WEB=/website + +# Rewrite empty to /web +RewriteCond %{REQUEST_URI} ^/*$ +RewriteRule ^(/*)$ %{ENV:WEB}/ [QSA,L] + +# css Request without directory part +RewriteCond %{REQUEST_URI} ^/?[^/]+[.]css$ +# ...that does not match match an existing file +RewriteCond %{REQUEST_FILENAME} !-f +# ...and does not match an existing directory +RewriteCond %{REQUEST_FILENAME} !-d +# ...prefix with web +RewriteRule ^(.+)$ %{ENV:WEB}/$1 [QSA,L] + +# Request without trailing slash +RewriteCond %{REQUEST_URI} !.*/$ +# ...that would access a directory in /web +RewriteCond %{DOCUMENT_ROOT}%{ENV:WEB}%{REQUEST_URI} -d +# ...and does not start with /web +RewriteCond %{REQUEST_URI} !^%{ENV:WEB} +RewriteCond %{REQUEST_URI} !^/website +# ...and does not start with /doc$ +RewriteCond %{REQUEST_URI} !^/doc$ +# ...add trailing slash for [menu] and to avoid /web/ in browser url +RewriteRule ^(.+)$ http://%{HTTP_HOST}/$1/ [R,QSA,L] + +# Request that does not start with /web +RewriteCond %{REQUEST_URI} !^/website +RewriteCond %{REQUEST_URI} !^%{ENV:WEB} +# ...and does not start with /doc/ +RewriteCond %{REQUEST_URI} !^/doc/ +# ...and is not /doc$ +RewriteCond %{REQUEST_URI} !^/doc$ +# ...and does not match match an existing file +RewriteCond %{REQUEST_FILENAME} !-f +# ...and does not match an existing directory +RewriteCond %{REQUEST_FILENAME} !-d +# ..prefix with /web +RewriteRule ^(.+)$ %{ENV:WEB}/$1 [QSA,L] + +########################################### + +# latin1 version copied to web and doc/2.x +AddDefaultCharset utf-8 +AddCharset utf-8 .html +AddCharset utf-8 .de +AddCharset utf-8 .en +AddCharset utf-8 .es +AddCharset utf-8 .fr +AddCharset utf-8 .nl +AddCharset utf-8 .txt + +# fix broken auto language selection for Hungarian +AddLanguage hu .hu + + + +# FIXME: separate this from the main "root" .htaccess material +DirectoryIndex index + diff --git a/Documentation/web/server/robots.txt b/Documentation/web/server/robots.txt new file mode 100644 index 0000000000..27db672a39 --- /dev/null +++ b/Documentation/web/server/robots.txt @@ -0,0 +1,19 @@ +# avoid 404s -- so that we can take action if any occur in /stats + +User-agent: * +Disallow: /doc/v1.6/ +Disallow: /doc/v1.8/ +Disallow: /doc/v1.9/ +Disallow: /doc/v2.0/ +Disallow: /doc/v2.1/ +Disallow: /doc/v2.2/ +Disallow: /doc/v2.3/ +Disallow: /doc/v2.4/ +Disallow: /doc/v2.5/ +Disallow: /doc/v2.6/ +Disallow: /doc/v2.7/ +Disallow: /doc/v2.8/ +Disallow: /doc/v2.9/ +Disallow: /doc/v2.10/ +Disallow: /doc/v2.11/ +Disallow: /doc/v2.13/ diff --git a/Documentation/web/server/website-dir.htaccess b/Documentation/web/server/website-dir.htaccess new file mode 100644 index 0000000000..21e3aada16 --- /dev/null +++ b/Documentation/web/server/website-dir.htaccess @@ -0,0 +1,2 @@ +# htaccess for /website/ dir of lilypond.org +DirectoryIndex index diff --git a/Documentation/web/we-wrote.bib b/Documentation/web/we-wrote.bib new file mode 100644 index 0000000000..aeae6d4435 --- /dev/null +++ b/Documentation/web/we-wrote.bib @@ -0,0 +1,30 @@ + +@inproceedings{hanwen06, + title = {LilyPond, Automated music formatting and the Art of Shipping}, + author = {Han-Wen Nienhuys}, + booktitle = {Forum Internacional Software Livre 2006 (FISL7.0)}, + year = 2006, + note = {(@uref{http://lilypond.org/web/images/FISL7-slides.pdf, PDF 1095k})} +} + +@mastersthesis{sandberg06, + title = {Separating input language and formatter in GNU LilyPond}, + author = {Erik Sandberg}, + year = 2006, + month = "March", + school = {Uppsala University, Department of Information Technology}, + note = {(@uref{http://lilypond.org/web/images/thesis-erik-sandberg, PDF 750k})} +} + +@inproceedings{hanwen03, + title = {LilyPond, a system for automated music engraving}, + author = {Han-Wen Nienhuys and Jan Nieuwenhuizen}, + booktitle = {Colloquium on Musical Informatics (XIV CIM 2003)}, + year = 2003, + month = "May", + location = {Firenze, Italy}, + note = {(@uref{http://lilypond.org/web/images/xivcim.pdf, PDF 95k})} +} + + + diff --git a/Documentation/zh/GNUmakefile b/Documentation/zh/GNUmakefile new file mode 100644 index 0000000000..9e9d8bda16 --- /dev/null +++ b/Documentation/zh/GNUmakefile @@ -0,0 +1,10 @@ +ISOLANG = zh +depth = ../.. +# SUBDIRS = web learning notation texidocs usage included essay extending +SUBDIRS = web texidocs +STEPMAKE_TEMPLATES = documentation +LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root +NO_PDF_FILES = 1 +EXTRA_DIST_FILES = web.texi + +include $(depth)/make/stepmake.make diff --git a/Documentation/zh/macros.itexi b/Documentation/zh/macros.itexi new file mode 100644 index 0000000000..02b3bf4316 --- /dev/null +++ b/Documentation/zh/macros.itexi @@ -0,0 +1,801 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@ignore + Translation of GIT committish: 676dd9eed5f81540f71c3e3e55666c60f7af36ac + + 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 + + +@include version.itexi +@include common-macros.itexi + +@ignore +**************************** +MACRO DEFINITIONS GUIDELINES +**************************** + +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). + +Macro definitions which contain text that should be translated in +translations should be in macros.itexi. +@end ignore + +@c ***** Displaying text ***** + +@c To get decent quotes in `foo' and ``foo''. + +@macro q{TEXT} +@quoteleft{}\TEXT\@quoteright{} +@end macro + +@macro qq{TEXT} +@quotedblleft{}\TEXT\@quotedblright{} +@end macro + + +@ifhtml + +@macro warning{TEXT} +@html +
    +@end html +@strong{Note:} \TEXT\ +@c keep the space for proper nesting of

    + +@html +
    +@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro warning{TEXT} +@quotation +@quotation +@cartouche +@b{Note:} \TEXT\ +@end cartouche +@end quotation +@end quotation +@end macro + +@end ifnothtml + +@c do not translate the following macro -- it is used in +@c an untranslated manual. + +@ifhtml + +@macro advanced{TEXT} +@html +
    +@end html +@strong{Advanced note:} \TEXT\ +@c keep the space for proper nesting of

    + +@html +
    +@end html +@end macro + +@end ifhtml + +@ifnothtml + +@macro advanced{TEXT} +@quotation +@b{Advanced note:} \TEXT\ +@end quotation +@end macro + +@end ifnothtml + + +@macro docMain +@cartouche +For more information about how this manual fits with the other +documentation, or to read this manual in other formats, see +@rweb{Manuals}. + +如果你需要任何手册,完整的文档可以在 @w{@uref{http://@/www@/.lilypond@/.org/}} 找到。 +@end cartouche +@end macro + + +@macro lilyTitlePage{TITLE} +@c This produces the unified index +@syncodeindex fn cp +@syncodeindex vr cp + + +@c ***** Copyright stuff ***** +@ifset FDL +@copying +@copyrightDeclare + +@quotation +在由自由软件协会发布的 GNU 自由文档协议,1.1版及以后版本的条款内,允许复制,分发和/或修改本文档和没有不变的部分。 +这个协议的复本在标题为《GNU 自由文档协议》的段。 + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying +@end ifset + +@ifclear FDL +@copying +This document has been placed in the public domain. +@end copying +@end ifclear + + + +@c ***** Title page ***** +@ifnottex +@node 首页 +@top LilyPond --- \TITLE\ +@translationof Top + +@cartouche +@manualIntro{} +@end cartouche +@end ifnottex + +@finalout + +@titlepage +@title LilyPond +@subtitle 乐谱排版系统 +@titlefont{\TITLE\} +@author LilyPond 开发团队 + +@vskip 60pt + +@cartouche +@manualIntro{} +@end cartouche + +@vskip 40pt + +@docMain{} + +@vskip 0pt plus 1filll + +@insertcopying + +LilyPond 版本 @version{} +@end titlepage + +@end macro + + +@c ***** Headings in a doc subsection ***** + +@c The next macro is a dummy currently since texinfo doesn't +@c provide a real ragged-right environment yet. +@c +@c Don't insert an empty line after @predefined! Right now +@c it doesn't matter, but a future implementation will probably +@c add some code which needs this restriction. + +@macro predefined +@noindent +@subsubheading 预定义命令 +@end macro + +@c Due to a bug in texi2html (texi2html.pl CVS versions <= 1.245) +@c the next macro must not be empty. + +@macro endpredefined +@c +@end macro + + +@macro snippets +@noindent +@subsubheading 已选择的片断 +@end macro + + +@c Don't insert an empty line after @seealso! Otherwise we get +@c unwanted extra vertical space in the PDF output. + +@macro seealso +@noindent +@subsubheading 参见 +@indent +@end macro + + +@macro knownissues +@noindent +@subsubheading 已知的问题和警告 +@end macro + + + +@c ***** Links and references ***** + +@c Definitions for references: +@c +@c @rweb +@c @ressay +@c @rglos +@c @rinternals +@c @rlearning +@c @rlsr +@c @rprogram +@c @ruser +@c @rchanges +@c @rextend +@c @rcontrib +@c +@c All these also have a @...named version which allows to specify the +@c displayed text for the reference as second argument. +@c +@c ***** HTML + bigpage is a special case (other manual names); all other +@c formats are treated similarly. + + +@c *** not TeX *** + +@ifnottex + +@c ** bigpage ** + +@ifset bigpage + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary-big-page,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary-big-page,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning-big-page,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,learning-big-page,Learning Manual} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation-big-page,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation-big-page,Notation Reference} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending-big-page,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extending} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes-big-page,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes-big-page,Changes} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor-big-page,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web-big-page,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web-big-page,General Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay-big-page,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay-big-page,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage-big-page,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage-big-page,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets-big-page,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets-big-page,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals-big-page,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals-big-page,Internals Reference} +@end macro + +@end ifset + + +@c ** not bigpage ** + +@ifclear bigpage + +@ifnotinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,notation,Notation Reference} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,web,General Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,essay,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,usage,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,usage,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,snippets,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,internals,Internals Reference} +@end macro + +@end ifnotinfo + +@ifinfo + +@macro rglos{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-learning,Learning Manual} +@end macro + +@macro ruser{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Notation Reference} +@end macro + +@macro rchanges{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes} +@end macro + +@macro rextend{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-web, General Information} +@end macro + +@macro ressay{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Essay} +@end macro + +@macro rprogram{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-usage,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Application Usage} +@end macro + +@macro rlsr{TEXT} +@ref{\TEXT\,,,lilypond-snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Snippets} +@end macro + +@macro rinternals{TEXT} +@vindex \TEXT\ +@ref{\TEXT\,,,lilypond-internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@vindex \TEXT\ +@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Internals Reference} +@end macro + +@end ifinfo + +@end ifclear + +@end ifnottex + + +@c *** TeX *** + +@iftex + +@c All commands below should work in the middle of the line; +@c we thus must not use @vindex directly since it works only if placed +@c on a line of its own. To overcome this problem, we define a +@c replacement macro using the internal definition of @vindex which +@c delimits arguments in the standard way (i.e., with braces). + +@tex +\gdef\lilyvindex#1{\doind{vr}{\code{#1}}\ignorespaces} +@end tex + +@macro rglos{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,music-glossary,Music Glossary} +@end macro + +@macro rglosnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,music-glossary,Music Glossary} +@end macro + +@macro rlearning{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,learning,Learning Manual} +@end macro + +@macro rlearningnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,learning,Learning Manual} +@end macro + +@macro ruser{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,notation,Notation Reference} +@end macro + +@macro rusernamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,notation,Notation Reference} +@end macro + +@macro rchanges{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,changes,Changes} +@end macro + +@macro rchangesnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,changes,Changes} +@end macro + +@macro rextend{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,extending,Extending} +@end macro + +@macro rextendnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,extending,Extending} +@end macro + +@macro rcontrib{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,contributor,Contributor's Guide} +@end macro + +@macro rcontribnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide} +@end macro + +@macro rweb{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,web,General Information} +@end macro + +@macro rwebnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,web,General Information} +@end macro + +@macro ressay{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,essay,Essay} +@end macro + +@macro ressaynamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,essay,Essay} +@end macro + +@macro rprogram{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,usage,Application Usage} +@end macro + +@macro rprogramnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,usage,Application Usage} +@end macro + +@macro rlsr{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,snippets,Snippets} +@end macro + +@macro rlsrnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,snippets,Snippets} +@end macro + +@macro rinternals{TEXT} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,,internals,Internals Reference} +@end macro + +@macro rinternalsnamed{TEXT,DISPLAY} +@lilyvindex{\TEXT\} +@ref{\TEXT\,,\DISPLAY\,internals,Internals Reference} +@end macro + +@end iftex + +@c ***** Macros specific to the web site ***** + +@ifset web + +@macro exampleImage{IMAGE-FILE} +@html +
    +@end html +@iftex +@image{ly-examples/\IMAGE-FILE\-small,,,\IMAGE-FILE\,png} +@end iftex +@ifinfo +@image{lilypond/ly-examples/\IMAGE-FILE\,,,\IMAGE-FILE\,png} +@end ifinfo +@end macro + +@macro help{TEXT} +@html +
    + + Help wanted: + \TEXT\ +
    +@end html +@end macro + + +@c LEGALESE + +@macro logoLegalLinux +Tux the Linux Penguin was created by +@uref{mailto:lewing@@isc.tamu.edu, lewing@@isc.tamu.edu} with +@uref{http://www.isc.tamu.edu/~lewing/gimp/, the Gnu Image +Manipulation Program}. + +@end macro + +@macro logoLegalFreeBSD +The FreeBSD logo is a registered trademark of +@uref{http://www.freebsd.org/, The FreeBSD Foundation}. + +@end macro + +@macro logoLegalMacOSX +The @qq{X image} is not a registered trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Nihonjoe, Nihonjoe} and +@uref{http://en.wikipedia.org/wiki/User:CyberSkull, CyberSkull}, and +placed under the GNU Free Documentation License version 1.2 or later. +We found the image on +@uref{http://commons.wikimedia.org/wiki/File:Mac_OS_X_Userbox_X.png, +this Wikimedia Commons page}. + +@end macro + +@macro logoLegalWindows +The @qq{four colored rectangles image} is not a registered +trademark. It was created by +@uref{http://en.wikipedia.org/wiki/User:Rohitbd, Rohitbd} and +placed under the GNU Free Documentation License version 1.2. We +found the image on +@uref{http://commons.wikimedia.org/wiki/Category:Microsoft_Windows_logos, +this Wikimedia Commons page}. + +@end macro + +@end ifset diff --git a/Documentation/zh/search-box.ihtml b/Documentation/zh/search-box.ihtml new file mode 100644 index 0000000000..673cc9d8f2 --- /dev/null +++ b/Documentation/zh/search-box.ihtml @@ -0,0 +1,13 @@ +
    + + + +
    diff --git a/Documentation/zh/texidocs/GNUmakefile b/Documentation/zh/texidocs/GNUmakefile new file mode 100644 index 0000000000..0ffa75869c --- /dev/null +++ b/Documentation/zh/texidocs/GNUmakefile @@ -0,0 +1,5 @@ +depth=../../.. + +EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) + +include $(depth)/make/stepmake.make diff --git a/Documentation/zh/translations.itexi b/Documentation/zh/translations.itexi new file mode 100644 index 0000000000..b0da0472ce --- /dev/null +++ b/Documentation/zh/translations.itexi @@ -0,0 +1,175 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + + +@ifhtml + +@html + + + +@end html +@end ifhtml +@emph{最近更新 Thu Mar 24 14:52:33 UTC 2011 +} +@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 + +@headitem +LilyPond -- 每一个人的五线谱 +@tab 翻译者 +@tab 校对 +@tab 已翻译 +@tab 最新 +@tab 其它信息 +@item +段标题 +@* +585 +@tab Ben Luo +@tab +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Ben Luo +@tab +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab pre-GDP +@item +简介 +@* +4506 +@tab +@tab +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab +@tab pre-GDP +@item +下载 +@* +1183 +@tab Ben Luo +@tab +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab pre-GDP +@item +手册 +@* +1200 +@tab Ben Luo +@tab +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab pre-GDP +@item +社区 +@* +1755 +@tab +@tab +@tab +@ifhtml + +@html +是 +@end html +@end ifhtml +@ifnothtml +是 +@end ifnothtml +@tab +@tab pre-GDP +@end multitable + diff --git a/Documentation/zh/web.texi b/Documentation/zh/web.texi new file mode 100644 index 0000000000..50505b30e8 --- /dev/null +++ b/Documentation/zh/web.texi @@ -0,0 +1,311 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: zh -*- +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + 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 + +@setfilename web.info +@settitle LilyPond -- 每一个人的五线谱 +@documentencoding UTF-8 +@documentlanguage zh +@afourpaper + +@c `Web' was imported 2009-08-05 with git commit b938d71... +@c @macro copyrightDeclare +@c Copyright @copyright{} 2009--2011 by the authors. +@c @end macro + +@c Translators: Ben Luo + +@set FDL +@set web +@include macros.itexi +@include weblinks.itexi + +@afourpaper + +@c don't remove this comment. +@ignore +@omfcreator Graham Percival and Patrick McCarty +@omfdescription General info about the LilyPond music engraving system +@omftype program usage +@omfcategory Applications|Publishing +@omflanguage English +@end ignore + +@copying +Copyright @copyright{} 2009--2011 by the authors. + +@c next line is necessary for broken pre-4.13 texinfo's +@c install-info, so leave it there until we officially +@c bump the required version. -gp +LilyPond 网站由本文件归档。 + +@quotation +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections. A copy of the license is +included in the section entitled ``GNU Free Documentation +License''. +@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 学习手册: (lilypond-learning). 从这开始。 +* Music 术语表: (music-glossary). 为非英语用户。 +* LilyPond: (lilypond-notation). LilyPond 音符参考。 +* LilyPond 片断: (lilypond-snippets). 短的特征,窍门和例子。 +* LilyPond 内部参考: (lilypond-internals). 定义各调节项。 +* LilyPond 应用程序的用法: (lilypond-usage). 安装和运行应用程序。 +* LilyPond 网站: (lilypond-web). 新网站预览。 +* lilypond: (lilypond-usage)运行 lilypond. 借助 LilyPond 程序。 +* abc2ly: (lilypond-usage)借助 abc2ly. 导入 ABC. +* convert-ly: (lilypond-usage)用convert-ly更新文件。 旧的 LilyPond 版本。 +* etf2ly: (lilypond-usage)借用 etf2ly. 导入 Finale. +* lilypond-book: (lilypond-usage)lilypond-book. 文本和音乐合并。 +* midi2ly: (lilypond-usage)借用 midi2ly. 导入 MIDI. +* musicxml2ly: (lilypond-usage)借用 musicxml2ly. 导入 MusicXML. +@end direntry + + +@c TITLE PAGE +@ifnottex +@node Top +@top LilyPond... 每一个人的五线谱 +@end ifnottex + + +@c hack for texi2html, bleh -gp +@ifnothtml + +@finalout + +@titlepage +@title LilyPond +@subtitle 音乐出版系统 +@titlefont{通用信息} +@author LilyPond 开发团队 + +@vskip 0pt plus 1filll +@c @vskip 20pt + +@insertcopying + +LilyPond 版本号 @version{} +@end titlepage +@end ifnothtml +@c end hack for texi2html + + +@c ************************ WEBSITE START *************** + + +@divId{pageHeader} +@heading LilyPond + +... 每一个人的五线谱 +@divEnd + +@c @imageId{cmws,web-clef-g-eight-alpha.png,Catchy Musical Web Snippet} +@imageId{lilylogo,double-lily-modified3,png,LilyPond logo} +@c @im ageId{cmws,web-snippet-alpha.png,Catchy Musical Web Snippet} + +@divId{quickSummary} +@subheading 什么是 LilyPond? + +LilyPond 是一个音乐雕版印刷程序,专用来生产高质量五线谱音乐。它把传统音乐雕版印刷的美学带到计算机打印输出系统。Lilypond是自由软件也是 @uref{http://gnu.org,GNU Project} 的一部分. + + +@divClass{align-right} +更多内容见 @ref{简介}! + +@divEnd +@divEnd + +@divClass{separator} +@divEnd + + +@divId{news} + +@c TODO: generate this automatically, including RSS feed. +@include web/news-front.itexi + +@divClass{float-right} +(@ref{旧闻}) +@divEnd + +@divEnd + +@ifclear web_version + @c do nothing +@end ifclear +@ifset web_version + @c make the box: +@divId{latestVersion} +@subheading 快捷链接 + +@c TODO: javascript to detect OS and suggest download? + +@subsubheading 稳定版 + +@ref{Download, Download @versionStable} + +@ref{Manuals, Manuals @versionStable} + +@subsubheading 不稳定版 + +@ref{Development, Download @versionDevel} + +@ref{Development, Manuals @versionDevel} + +@divEnd +@end ifset + + +@ifnottex + +@divClass{hide} +@menu +* 简介:: 从这开始创建五线谱音乐。 +* 下载:: 获得 Lilypond。 +* 手册:: 阅读完整的手册(RTFM)。 +* 社区:: 和其它用户联络。 +@end menu +@divEnd + +@end ifnottex + +@contents + +@allowcodebreaks false + +@c ****************** GENERAL STUFF FOR INFO ************ +@ignore +Distributions will want to install lilypond.info in postinstall, doing: + + install-info --info-dir=/usr/share/info out[-www]/lilypond-web.info + + * Prepend GNU for dir, must be unique. + + * Do not list the `lilypond' node at toplevel, so that `info lilypond' + goes to Top. + + * List all commands in direntry. + +@end ignore + +@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 ************ +@macro docLinks{name,base,refLink,split,big,bigsize,pdf,pdfsize} +@subheading Read it + +@docLinksBare{\name\,\base\,\refLink\,\split\,\big\,\bigsize\,\pdf\,\pdfsize\} + +@end macro + + +@macro docLinkSplit{name,base,webLink} +@ifclear web_version + @uref{../\base\/index.html, \name\ (分开的 HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkBig{name,base,webLink} +@ifclear web_version + @uref{../\base\-big-page.html, \name\ (大的 HTML)} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + +@macro docLinkPdf{name,base,webLink} +@ifclear web_version + @uref{../\base\.pdf, \base\.pdf} +@end ifclear +@ifset web_version + \webLink\ +@end ifset +@end macro + + +@macro docLinksBare{name,base,refLink,split,big,bigsize,pdf,pdfsize} + +@divClass{keep-bullets} +@itemize + +@item @docLinkSplit{\name\,\base\,\split\} @minus{} + 本手册分解了许多 HTML 页面。 + @*@ @ @emph{(每个页面有一小的下载)} + +@item @docLinkBig{\name\,\base\,\big\} @minus{} + 以单一大HTML页面的方式阅读本手册。 + @*@ @ @emph{(大的单一下载, \bigsize\)} + +@item @docLinkPdf{\name\,\base\,\pdf\} @minus{} + 以PDF文件的方式下载。 + @*@ @ @emph{(大的单一下载, \pdfsize\)} + +@end itemize + +@divEnd + +@end macro + + +@c don't add any extra spaces in this macro -gp +@macro ifWebLinks{webLink,normalLink} +@ifclear web_version + \normalLink\: +@end ifclear +@ifset web_version + \webLink\: +@end ifset +@end macro + + +@ifhtml +@macro contactUsAbout{topic} + +@divClass{heading-center} +@divClass{contactBox} +如果你觉得有其它 \topic\ 需要列在这里,请按照下面的简介让我们知道 +@ref{缺陷报告}. + +@divEnd +@divEnd + +@end macro +@end ifhtml + +@ifnothtml +@macro contactUsAbout{topic} +@cartouche +如果你觉得有其它 \topic\ 需要列在这里,请按照下面的简介让我们知道 +@ref{缺陷报告}. + +@end cartouche + +@end macro +@end ifnothtml + +@include web/introduction.itexi +@include web/download.itexi +@include web/manuals.itexi +@include web/community.itexi + + +@bye diff --git a/Documentation/zh/web/GNUmakefile b/Documentation/zh/web/GNUmakefile new file mode 100644 index 0000000000..425cc1d8e2 --- /dev/null +++ b/Documentation/zh/web/GNUmakefile @@ -0,0 +1,5 @@ +depth = ../../.. + +LOCALSTEPMAKE_TEMPLATES = ly + +include $(depth)/make/stepmake.make diff --git a/Documentation/zh/web/community.itexi b/Documentation/zh/web/community.itexi new file mode 100644 index 0000000000..e839eac80a --- /dev/null +++ b/Documentation/zh/web/community.itexi @@ -0,0 +1,122 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: zh -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c Translators: Ben Luo + +@include included/authors.itexi +@include included/helpus.itexi +@node 社区 +@unnumbered 社区 +@translationof Community + + +@subheading 与社区互动 +@subheading 使 LilyPond 更好 +@subheading 其它 +@menu +* 联系:: +* 小例子:: +* 缺陷报告:: +* 帮助我们:: +* 开发:: +* 作者:: +* 出版物:: +* 旧闻:: +@end menu + +@node 联系 +@unnumberedsec 联系 +@translationof Contact + + +@subheading 用户讨论和帮助 +@subsubheading 用户邮件列表: @code{lilypond-user@@gnu.org} +@subsubheading LilyPond 片断仓库 +@subsubheading IRC +@subsubheading 其它语言 +@subheading 保持沟通 +@subsubheading LilyPond 报告 +@subsubheading 发行版邮件列表: @code{info-lilypond@@gnu.org} +@subheading 开发者讨论 +@subsubheading 开发者邮件列表: @code{lilypond-devel@@gnu.org} +@subsubheading 缺陷邮件列表: @code{bug-lilypond@@gnu.org} +@node 小例子 +@unnumberedsec 小例子 +@translationof Tiny examples + + +@subheading 什么是 @qq{小例子}? +@subheading 为什么创造出来? +@subheading 我如何创造出来? +@node 缺陷报告 +@unnumberedsec 缺陷报告 +@translationof Bug reports + + +@subheading 第1步:了解缺陷 +@subheading 第2步:创建缺陷报告 +@subheading 第3步:发送缺陷报告 +@subheading 第4步:等待回应 +@subheading 其它可能的帮助:表现出渴望的举动 +@node 帮助我们 +@unnumberedsec 帮助我们 +@translationof Help us + + +@node 开发 +@unnumberedsec 开发 +@translationof Development + + +@subheading 发行号 +@subheading 下载 +@subheading 贡献者指南 +@subheading 回归测试 +@subsubheading 发行版 +@subsubheading 稳定版 +@subsubheading 所有版本 +@subheading 手册 +@node 作者 +@unnumberedsec 作者 +@translationof Authors + + +@subheading 目前的开发小组 +@subheading 以前的开发小组 +@subheading 目前的贡献者 +@subsubheading 编程 +@subsubheading 字体 +@subsubheading 文档 +@subsubheading 缺陷组 +@subsubheading 支持 +@subsubheading 翻译 +@subheading 以前的开发小组 +@subsubheading 编程 +@subsubheading 字体 +@subsubheading 文档 +@subsubheading 支持 +@subsubheading 翻译 +@node 出版物 +@unnumberedsec 出版物 +@translationof Publications + + +@subheading 我们写的有关 LilyPond 的文章 +@include we-wrote.itexi +@subheading 别人怎么用 LilyPond 的 +@include others-did.itexi +@node 旧闻 +@unnumberedsec 旧闻 +@translationof Old news + + +@include web/news-front.itexi +@include web/news.itexi + +@c -- SKELETON FILE -- diff --git a/Documentation/zh/web/download.itexi b/Documentation/zh/web/download.itexi new file mode 100644 index 0000000000..5496693b70 --- /dev/null +++ b/Documentation/zh/web/download.itexi @@ -0,0 +1,632 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: zh -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c Translators: Ben Luo + +@include included/generating-output.itexi + +@macro warningTextBased +@warning{LilyPond is a @strong{text-based} music engraver; it is +more similar to a programming language than a graphical score +editing program. Before downloading LilyPond, please read about +our @ref{Text input}.} +@end macro + + +@node 下载 +@unnumbered 下载 +@translationof Download + +@divClass{heading-center} +@ifclear web_version + @c yes, we want versionDevel here, since the online links + @c for @version won't be up yet! + @heading Downloads for LilyPond @versionDevel + +@warning{Links for the stable version of LilyPond can be found at +@uref{http://lilypond.org, lilypond.org}} +@end ifclear +@ifset web_version + @heading Downloads for LilyPond @versionStable +@end ifset + +@warningTextBased + +@divEnd + +@divClass{link-headings} + +@divClass{column-left-top} + +@subheading 使用者 + +@itemize + +@item +@c ref is duplicated to avoid underlining ref as image. +@ref{Unix, @sourceimage{logo-linux,,,} +@sourceimage{logo-freebsd,,,}} +@ref{Unix, Unix (Linux and FreeBSD)} + +@item +@ref{MacOS X, @sourceimage{logo-macosx,,,}} +@ref{MacOS X, MacOS X} + +@item +@ref{Windows, @sourceimage{logo-windows,,,}} +@ref{Windows, Microsoft Windows} + +@end itemize + +@divEnd + +@divClass{column-right-top} +@subheading 开发人员 + +@itemize + +@item +@ref{Source}: +for packagers + +@item +@ref{Old downloads}: +old versions + +@item @ref{Development}: +latest unstable version + +@end itemize +@divEnd + +@divEnd + +@divClass{column-center-bottom} + +@subheading 软件协议 + +LilyPond is published under the +@ref{GPL, GNU General Public License}. +@divEnd + + +@divClass{color1} + +@subheading 捐赠人 + +Many thanks to @uref{http://www.vt.edu/, Virginia Tech} and +@uref{http://www.linuxaudio.org/, linuxaudio.org} for sponsoring +our bandwidth. + +@sourceimage{VTlogo_ITF,,,} +@sourceimage{lao_banner_06_on_white_demo,,,} + +@subheading 法律条文 + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@logoLegalMacOSX + +@logoLegalWindows + +@divEnd +@divEnd + + +@divClass{hide} + +@menu +* Unix:: +* MacOS X:: +* Windows:: +* 源代码:: +* 旧的下载:: +* GPL:: +@end menu +@divEnd + +@node Unix +@unnumberedsec Unix +@translationof Unix + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} + +@subheading Generic Packages or Distribution-Specific Packages? + +Many distributions include LilyPond in their normal package +system. These versions are easier to install and uninstall than +the generic packages, but they may be older. If you wish to use +our generic packages, please uninstall the official version from +your system using the normal package manager for your distribution. +See your distribution's documentation about how to use their +package manager. + +@divEnd + + +@divClass{column-left-top} + +@subheading Generic Packages + +@subsubheading 下载 + +@itemize + +@item +@sourceimage{logo-linux,,,} +@ifclear web_version + @downloadDevelLinuxNormal +@end ifclear +@ifset web_version + @downloadStableLinuxNormal +@end ifset + +(if in doubt, use this) + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxBig + +@item +@sourceimage{logo-linux,,,} +@downloadStableLinuxPPC + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDNormal + +@item +@sourceimage{logo-freebsd,,,} +@downloadStableFreeBSDBig + +@end itemize + +@subsubheading 安装 + +In the shell, type: + +@example +cd PATH-TO-DOWNLOAD-DIRECTORY +sh lilypond-@versionStable{}-OS-TYPE.sh +@end example + +@subsubheading 卸载 + +In the shell, type: + +@example +uninstall-lilypond +@end example + +@divEnd + + + +@divClass{column-right-top} + +@subheading Compiling a file + +@lilypadCommandLine + +@divEnd + + +@divClass{column-left-top} + +@subheading Distribution-specific Packages + +Please use your distribution's package manager to install or +upgrade to these versions. + +@itemize + +@item +@sourceimage{logo-fedora,,,} +@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447, +Fedora: LilyPond 2.12.3} + +@item +@sourceimage{logo-ubuntu,,,} +@uref{http://packages.ubuntu.com/search?keywords=lilypond, +Ubuntu: LilyPond 2.12.2} + +@item +@sourceimage{logo-slackware,,,} +@uref{http://www.johannes-schoepfer.de/lilypond/, +Slackware: LilyPond 2.12.3} + +@item +@sourceimage{logo-debian,,,} +@uref{http://packages.debian.org/search?keywords=lilypond, +Debian: LilyPond 2.12.2} + +@item +@sourceimage{logo-suse,,,} +@uref{http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=lilypond, +openSUSE: LilyPond 2.12.3} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} + +@subheading Legalese + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalLinux + +@logoLegalFreeBSD + +@divEnd +@divEnd + +@node MacOS X +@unnumberedsec MacOS X +@translationof MacOS X + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} + +@subheading 包 +@subsubheading 下载 + +@itemize + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinNormal +For MacOS X 10.4 or higher, running on Intel CPUs (if in doubt, +use this). + +@item +@sourceimage{logo-macosx,,,} +@downloadStableDarwinPPC +For MacOS X 10.4 or higher, running on G3 and G4 CPUs (old Apple +computers). + +@end itemize + +@subsubheading 安装 + +Double-click the downloaded file, then drag it to wherever you +want. + +@subsubheading 卸载 + +Delete the LilyPond.app folder. + +@divEnd + +@divClass{column-right-top} + +@subheading 编译文件 + +@lilypadOSX + +@divEnd + + +@divClass{column-left-top} + +@subheading 在命令行内运行 + +@warning{If you are happy with the GUI, then please ignore these +instructions.} + +@subsubheading MacOS X 里的命令行 + +The most convenient way to run lilypond scripts is by setting up +@qq{helper} scripts of your own. + +@enumerate + +@item +Create a directory to store these scripts, + +@example +mkdir -p ~/bin +cd ~/bin +@end example + + +@item +Create a file called @command{lilypond} which contains + +@divClass{h-scroll-auto} +@example +exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@" +@end example +@divEnd + +@warning{@var{DIR} will generally be @code{/Applications/}} + + +@item +Create similar files @command{lilypond-book}, +@command{convert-ly}, and any other scripts you wish to use, by +replacing the @command{bin/lilypond} with @command{bin/convert-ly} +(or other program name). + + +@item +Make the file executable, + +@example +chmod u+x lilypond +@end example + + +@item +Now, add this directory to your path. Modify (or create) a file +called @code{.profile} in your home directory such that it +contains + +@example +export PATH=$PATH:~/bin +@end example + +This file should end with a blank line. + +@end enumerate + +@subsubheading 调用单独的脚本 + +The scripts --- such as @command{lilypond-book}, @command{convert-ly}, +@command{abc2ly}, and even @command{lilypond} itself --- are included +inside the @code{.app} file for MacOS@tie{}X. + +Scripts can also be run from the command line by invoking them +directly: + +@divClass{h-scroll-auto} +@example +@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond +@end example +@divEnd + +The same is true for all other scripts in that directory, such as +@command{lilypond-book} and @command{convert-ly}. + +@divEnd + + +@divClass{column-center-bottom} + +@subheading 法律条文 + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalMacOSX + +@divEnd +@divEnd + +@node Windows +@unnumberedsec Windows +@translationof Windows + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-left-top} + +@subheading 包 + +@subsubheading 下载 + +@itemize + +@item +@sourceimage{logo-windows,,,} +@downloadStableWindows +For Windows 2000, XP, Vista and Windows 7. + +@end itemize + +@subsubheading 安装 + +@enumerate + +@item +Locate the downloaded file and double-click on it to start the +installer. Follow the instructions given to you by the installer; +we recommend that you leave all the install options checked and +use the default installation location. Click the @q{Finish} button +when the installer has completed. LilyPond is now installed. + +@end enumerate + +@subsubheading 卸载 + +To uninstall LilyPond either: + +@enumerate + +@item +Locate the LilyPond folder from the @q{Start} menu and click on the +@q{Uninstall} icon. Click the @q{Finish} button when the uninstaller +has completed. + +@item +Or from within the Control Panel, locate and select LilyPond and then +choose the option to uninstall/remove the software. Click the @q{Finish} +button when the uninstaller has completed. + +@end enumerate + +@divEnd + + +@divClass{column-right-top} + +@subheading 编译文件 + +@lilypadWindows + +@divEnd + + +@divClass{column-left-top} + +@subheading 在命令行中运行 + +@warning{If you are happy with the GUI, then please ignore these +instructions.} + +@subsubheading Windows 里的命令行 + +@ignore +CHECK: check the following descriptions. +I don't have English version of Windows. +@end ignore + +The most convenient way to run LilyPond is by adding the folder +which contains LilyPond executable files to the environmental variable +@qq{Path}. + + +@enumerate +@item +Open your @qq{System} on the Control Panel, +select Advanced tab and click Environmental Variables button. + +@item +Select the Variable @qq{Path} from Environmental variables list +and click the Edit button. +You will be presented a window titled @qq{Edit System Variable}; +append to @qq{Variable value} the name of the folder +which contains LilyPond executable files like this: + +@example +[@var{pre-set paths}];@var{DIR}\LilyPond\usr\bin +@end example + +@warning{@var{DIR} will generally be @code{C:\Program Files}.} + +@noindent +and click @qq{OK} button to close the window. + +@end enumerate + +@subsubheading 调用单独的可运行文件 + +LilyPond executable files +-- such as lilypond, lilypond-book, convert-ly, and so on -- +can be run from the command-line by invoking them: + +@example +lilypond test.ly +@end example + +@divEnd + + +@divClass{column-center-bottom} + +@subheading 法律条文 + +@divClass{legal} +All logos and product images are copyright and trademark +acknowledged. + +@logoLegalWindows + +@divEnd +@divEnd + +@node 源代码 +@unnumberedsec 源代码 +@translationof Source + +@divClass{heading-center} +@warningTextBased +@divEnd + +@warning{We @strong{do not} recommend that you attempt to build +LilyPond yourself; almost all user needs are better met with the +pre-built version.} + +@divClass{column-left-bottom} + +@subheading 源代码包 + +@downloadStableSource{} + +For an extensive listing of all versions (old and new), see our +@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, +download site}. + +@divEnd + +@divClass{column-right-bottom} + +@subheading 编译指导 + +Instructions are listed in @rcontrib{Compiling}. + +@divEnd + +@node 旧的下载 +@unnumberedsec 旧的下载 +@translationof Old downloads + +@divClass{heading-center} +@warningTextBased +@divEnd + +@divClass{column-center-top} + +@subheading 所有版本 + +包含所有版本(旧和新)的列表见我们的 +@uref{http://download.linuxaudio.org/lilypond/binaries/, download +site}. + +@divEnd + +@node GPL +@unnumberedsec GPL +@translationof GPL + +@divClass{column-center-top} +@subheading 软件许可证 + +GNU LilyPond 在 GNU 通用公共许可证下发布。 +在 @ref{Freedom} 里我们介绍了这个许可证以及我们选择它的原因。 + +@divEnd + +@divClass{column-center-bottom} + +@subheading GNU 通用公共许可证 + +@include gpl.itexi + +@divEnd diff --git a/Documentation/zh/web/introduction.itexi b/Documentation/zh/web/introduction.itexi new file mode 100644 index 0000000000..d0ec2cdd6a --- /dev/null +++ b/Documentation/zh/web/introduction.itexi @@ -0,0 +1,140 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: zh -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c Translators: Ben Luo + +@node 简介 +@unnumbered 简介 +@translationof Introduction + + +@subheading 我们的目标 +@subheading LilyPond 作什么 +@subheading 使用 LilyPond +@subheading LilyPond 如何工作 +@menu +* 特色:: +* 例子:: +* 自由:: +* 背景:: +* 生产:: +* 测评:: +* 文本输入:: +* 编辑更简单:: +@end menu + +@node 特色 +@unnumberedsec 特色 +@translationof Features + + +@subheading 优雅 +@subsubheading 杰出的古典雕版风格 +@subsubheading 有效的版面选择 +@subheading 易于使用 +@subsubheading 基于文本的输入 +@subsubheading 音乐和文本混合 +@subsubheading 易用性 +@subsubheading 可扩展的设计 +@subheading 环境 +@subsubheading 自由软件 +@subsubheading 出色的支持 +@subsubheading 高级编辑器 +@subheading 现在哪? +@node 例子 +@unnumberedsec 例子 +@translationof Examples + + +@subsubheading 古典音乐 +@subsubheading 复杂的乐谱 +@subsubheading 早期音乐 +@subsubheading 现代音乐 +@subsubheading 有效,灵活地创造表演材料 +@subsubheading 谱号 +@subsubheading 申克分析图 +@subsubheading 声乐 +@subsubheading 教育方面的应用 +@subsubheading 流行音乐 +@subsubheading 大型项目 +@subheading 现在哪? +@node 自由 +@unnumberedsec 自由 +@translationof Freedom + + +@subheading 自由软件 +@subheading 使用者的好处在哪? +@subheading 为什么 LilyPond 的开发者会无偿 @qq{赠送} 他们的工作? +@subheading 现在哪? +@node 背景 +@unnumberedsec 背景 +@translationof Background + + +@subheading 背景文章 +@subheading 现在哪? +@node 生产 +@unnumberedsec 生产 +@translationof Productions + + +@subheading 音乐厅 +@subheading 出版的五线谱音乐 +@subheading 现在哪? +@node 测评 +@unnumberedsec 测评 +@translationof Reviews + + +@subheading 出版的文章 +@subheading 用户推荐 +@subsubheading @uref{http://nyphil.org/meet/orchestra/index.cfm?page=profile&personNum=7, Carter Brey}, Principal Cellist, New York Philharmonic +@subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, professor of Composition, Musikhochschule Freiburg +@subsubheading Darius Blasband, composer (Brussels, Belgium) +@subsubheading Kieren MacMillan, composer (Toronto, Canada) +@subsubheading Chris Cannam, lead programmer of the @uref{http://www.rosegardenmusic.com/, RoseGarden} project +@subsubheading Chris Snyder, @uref{http://www.adoromusicpub.com/, Adoro Music Publishing} +@subsubheading David Bobroff, Bass Trombone, Iceland Symphony Orchestra +@subsubheading Vaylor Trucks, Electric guitar player (Yes, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, related to}) +@subsubheading @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}, @uref{http://www.mutopiaproject.org/, Mutopia} contributor +@subsubheading @uref{http://www.troff.org/whoswho.html#werner, Werner Lemberg}, Conductor at the Theatre in Koblenz, Germany and distinguished GNU Hacker +@subsubheading Paul Davis, developer of @uref{http://jackaudio.org/, JACK} and @uref{http://www.ardour.org/, Ardour} +@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, Dr. Mika Kuuskankare}, researcher at the @uref{http://siba.fi, Sibelius Academy Finland}, composer and author of Expressive Notation Package (ENP) +@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, Musician, professional typesetter and long time SCORE user +@subheading 现在哪? +@node 文本输入 +@unnumberedsec 文本输入 +@translationof Text input + + +@subheading @qq{编译} 音乐 +@subsubheading 就像 A B C 一样简单 +@subsubheading 流行音乐 +@subsubheading 配器部分 +@subsubheading 初学者的文档 +@subsubheading 更简单的编辑环境 +@subheading 现在哪? +@node 编辑更简单 +@unnumberedsec 编辑更简单 +@translationof Easier editing + + +@subheading LilyPondTool +@subheading Frescobaldi +@subheading Denemo +@subheading 文本编辑器 +@subheading 可以导出 LilyPond 代码的程序 +@subsubheading 音符,谱号和 MIDI 编辑器: +@subsubheading 算法代码生成器 +@subheading 其它开发不活跃的程序 +@subheading 现在哪? +@subheading 法律术语 + +@c -- SKELETON FILE -- diff --git a/Documentation/zh/web/manuals.itexi b/Documentation/zh/web/manuals.itexi new file mode 100644 index 0000000000..5667e237ae --- /dev/null +++ b/Documentation/zh/web/manuals.itexi @@ -0,0 +1,545 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: zh -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c Translators: Ben Luo + +@node 手册 +@unnumbered 手册 +@translationof Manuals + +@macro details{reference} +@spanClass{detail} +(@ref{\reference\, details of \reference\}) +@spanEnd +@end macro + +@divClass{heading-center} +@ifclear web_version + @heading LilyPond @version 手册 +@end ifclear +@ifset web_version + @heading LilyPond @versionStable 手册 +@end ifset + +@divEnd + +@divClass{link-headings} + +@divClass{column-center-top} + + +@subheading 简介 + +@itemize + +@item +@ref{Text input}: +LilyPond 是@strong{基于文本} 的音乐雕版印刷程序。首先读这里! + +@item +@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Learning}} + @qq{must-read} LilyPond 的简单介绍。 +@details{Learning} + +@item +@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossary}} +@emph{(optional reading)} 音乐术语和翻译。 +@details{Glossary} + +@item +@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}} +@emph{(optional reading)} 计算机雕版印刷程序的背景信息。 +@details{Essay} + +@end itemize + +@divEnd + +@divClass{column-left-top} + +@subheading 正式用法 + +@itemize + +@item +@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notation}} +语法参考。 +@details{Notation} + +@item +@ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Usage}} +运行程序。 +@details{Usage} + +@item +@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}} +短的技巧和窍门。 +@details{Snippets} + +@end itemize + +@divEnd + + +@divClass{column-right-top} + +@subheading 不常用的用法 + +@itemize + +@item +@ref{FAQ}: +常见问题。 + +@item +@ref{Top, Web}: +本文档。 +@details{Web} + +@item +@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}} +有什么新东西? +@details{Changes} + +@item +@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}} +有想像力的调整。 +@details{Extending} + +@item +@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}} +调整参考。 +@details{Internals} + +@end itemize + +@divEnd + + +@divClass{column-center-bottom} + +@subheading 其它资料 +@itemize + +@item +@ref{Translated}: +针对非英语读者的翻译情况。 + +@item +@ref{All}: +可下载和旧的手册。 + +@item +@ref{Development}: +不稳定版的手册 + +@item +@ref{FDL}: +这些文档在 GNU 自由文档许可证下发行。 + +@end itemize + +@divEnd + +@divEnd + + +@divClass{hide} + +@menu +* 学习:: 学习。 +* 术语表:: 术语表。 +* 文章:: 文章。 +* 五线谱:: 参考。 +* 使用:: 使用。 +* 片断:: 片断。 +* 常见问题:: 常见问题。 +* Web:: Web. +* 变化:: 新闻。 +* 扩展:: 编程。 +* 内部:: 内部。 +* 翻译:: 翻译。 +* 所有:: 所有手册。 +* FDL:: 许可证。 +@end menu + +@divEnd + + +@c TRANSLATORS, most of the text in this file came from +@c LM 1.1 About the documentation (before this section was +@c removed in July 2009). + +@node 学习 +@unnumberedsec 学习 +@translationof Learning + +@divClass{column-left-top} +@subheading 学习手册 +本书解释了如何开始学习 LilyPond,同时也用简单的术语解释了一些关键的概念。 +你应该顺序地读这些章节。 + +在每一大段的后面有@strong{参见}一段,它包含有对其它大段的交叉参考: +在第一次阅读的时候你不应该去看这些交叉参考。当你读完所有手册,你可能希望 +再读某些段,并去看些交叉参考来得到更多的信息。 +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Learning, learning, + @rlearningnamed{Top,Learning}, + @manualStableLearningSplit, + @manualStableLearningBig, 1.5 MB, + @manualStableLearningPdf, 3 MB} + +@divEnd + +@node 术语表 +@unnumberedsec 术语表 +@translationof Glossary + +@divClass{column-left-top} +@subheading 术语表 +这解释了音乐术语也包括了不同语言的翻译。如果你对五线谱不熟悉,或者对音乐术语(尤其如果你不是以英语为母语的人)不熟悉,强烈建议你看术语表。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Music glossary, music-glossary, + @rglosnamed{Top,Music glossary}, + @manualStableGlossarySplit, + @manualStableGlossaryBig, 1 MB, + @manualStableGlossaryPdf, 1.5 MB} + +@divEnd + + +@node 文章 +@unnumberedsec 文章 +@translationof Essay + + +@divClass{column-left-top} +@subheading 文章 + +本书给出了音乐出版的简要历史,随后检查了 LilyPond 的雕版印刷技术。 +也对比了 LilyPond 和其它雕版印刷系统的不同。 + +@warning{更详细的印刷例子都是以PDF的形式进行分析,因为PDF版本有更高的分辨率。} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Essay, essay, + @ressaynamed{Top,Essay}, + @manualStableEssaySplit, + @manualStableEssayBig, 2 MB, + @manualStableEssayPdf, 2.5 MB} + +@divEnd + +@node 五线谱 +@unnumberedsec 五线谱 +@translationof Notation + +@divClass{column-left-top} +@subheading 五线谱参考 +本书解释了 LilyPond 所有生成五线谱的命令。 + +@warning{五线谱参考假设读者知道学习手册里的基本资料,也熟悉在术语表里 +英语音乐术语。} + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Notation, notation, + @rusernamed{Top,Notation}, + @manualStableNotationSplit, + @manualStableNotationBig, 7 MB, + @manualStableNotationPdf, 18 MB} + +@divEnd + + +@node 使用 +@unnumberedsec 使用 +@translationof Usage + +@divClass{column-left-top} +@subheading 使用手册 + +这本书解释如何执行程序,如何让 LilyPond 五线谱和其它程序集成,也提出 +一些为了有效使用的 @qq{best practices} 。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Usage, usage, + @rprogramnamed{Top,Usage}, + @manualStableUsageSplit, + @manualStableUsageBig, 300 KB, + @manualStableUsagePdf, 400 KB} + +@divEnd + +@node 片断 +@unnumberedsec 片断 +@translationof Snippets + +@divClass{column-left-top} +@subheading 片断 + +这里显示的 LilyPond 片断集是从 +@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} +(LSR)来的。所有的片断都是在公共域内。 + +注意:本文档不是 LSR 的精确子集。LSR 运行在 LilyPond 的稳定版上,所以任何 +发行版中有关新特性的示例必须单独添加。它们保存在 @file{Documentation/snippets/new/} LilyPond 的源代码树里。 + +The list of snippets for each subsection of the Notation are also +linked from the @strong{参见} portion. +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Snippets, snippets, + @rlsrnamed{Top,Snippets}, + @manualStableSnippetsSplit, + @manualStableSnippetsBig, 2.5 MB, + @manualStableSnippetsPdf, 8 MB} + +@divEnd + +@node 常见问题 +@unnumberedsec 常见问题 +@translationof FAQ + +@divClass{column-center-top} +@subheading 问题简介 + +@subsubheading Where are the graphical canvas, menus, and toolbars? + +LilyPond 要求你以文本的方式写音乐。请阅读有关我们的 @ref{Text input}. + +@subsubheading 这里有很多文档!我都要读吗? + +你需要读 @ref{Learning, Learning manual}。对于其它文档,你只需要读那些和 +你创作有关的段落。 + +@subsubheading 那里仍然有许多读物!这值得吗? + +请你自己决定;那些你可能想要用 LilyPond 的原因在 @ref{Introduction}里。 + +@divEnd + +@divClass{column-center-bottom} +@subheading 使用的问题 + +@subsubheading 有些不工作!我如何修正? + +这在 @rprogram{Troubleshooting}里解释。 + +@subsubheading 为什么你要改变语法? + +这在 @rprogram{Why does the syntax change?} 里解释。 + +@divEnd +@node Web +@unnumberedsec Web +@translationof Web + +@divClass{column-left-top} +@subheading Web + +本手册提供了有关 LilyPond 的通用信息。它也包含了有关不同社区论坛,缺陷 +报告和开发的信息。 + +@divEnd + +@divClass{column-right-bottom} +@subheading 读它 + +@subsubheading 最新手册 + +@divClass{keep-bullets} +@itemize +@ref{Top,Web} +@end itemize +@divEnd + +@subsubheading 在 @versionDevel 里的 Web 手册 + +@docLinksBare{Web, web, + @ref{Top,Web}, + @manualDevelWebSplit, + @manualDevelWebBig, 1 MB, + @manualDevelWebPdf, 2 MB} + +@divEnd + +@node 变化 +@unnumberedsec 变化 +@translationof Changes + +@divClass{column-left-top} +@subheading 变化 + +这总结了从上一个稳定版的 LilyPond 之后的重要变化和新特性。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Changes, changes, + @rchangesnamed{Top,Changes}, + @manualStableChangesSplit, + @manualStableChangesBig, 6 KB, + @manualStableChangesPdf, 200 KB} + +@divEnd + +@node 扩展 +@unnumberedsec 扩展 +@translationof Extending + +@divClass{column-left-top} +@subheading 扩展 LilyPond + +本手册解释了如何为 Lilypond 写扩展程序。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Extending, extending, + @rextendnamed{Top,Extending}, + @manualStableExtendingSplit, + @manualStableExtendingBig, 200 KB, + @manualStableExtendingPdf, 400 KB} + +@divEnd + +@node 内部 +@unnumberedsec 内部 +@translationof Internals + +@divClass{column-left-top} +@subheading 内部参考 + +这是一个交叉链接页面的集合,这些页面把每一个 LilyPond 的类,对象和函数 +的本质细节进行了归档。它是从格式化好的源码中直接生成的。 + +几乎所有格式化好的内部函数用户可以直接使用。例如,绝大部分控制粗细值,距 +离等的变量可以在输入文件中改变。LilyPond 有大量格式化选项,所有这些选项 +都在这份文档中进行了描述。每一个五线谱的段都有一个子段 @b{参见},它指向 +生成的文档。 + +@divEnd + +@divClass{column-right-bottom} + +@docLinks{Internals, internals, + @rinternalsnamed{Top,Internals}, + @manualStableInternalsSplit, + @manualStableInternalsBig, 2.5 MB, + @manualStableInternalsPdf, 2.8 MB} + +@divEnd + +@node 翻译 +@unnumberedsec 翻译 +@translationof Translated + +@divClass{column-center-bottom} +@subheading 翻译状态 +@include translations.itexi +@divEnd + +@node 所有 +@unnumberedsec 所有 +@translationof All + +@divClass{column-left-top} +@subheading 可下载的版本 +@ifclear web_version +可下载的压缩包只在 @uref{http://lilypond.org} 可见。 +@end ifclear +@ifset web_version + +@divClass{keep-bullets} +@itemize + +@item @doctarballStable + +@end itemize + +@divEnd +@end ifset + +@divEnd + +@divClass{column-right-bottom} +@subheading 前一个稳定版 +@divClass{keep-bullets} +@itemize + +@item @uref{http://lilypond.org/doc/v2.12/Documentation/, +LilyPond 2.12 Documentation} + +@item @uref{http://lilypond.org/doc/v2.11/Documentation/, +LilyPond 2.11 Documentation} + +@item @uref{http://lilypond.org/doc/v2.10/Documentation/, +LilyPond 2.10 Documentation} + +@item @uref{http://lilypond.org/doc/v2.8/Documentation/, +LilyPond 2.8 Documentation} + +@item @uref{http://lilypond.org/doc/v2.6/Documentation/, +LilyPond 2.6 Documentation} + +@item @uref{http://lilypond.org/doc/v2.4/Documentation/out-www/, +LilyPond 2.4 Documentation} + +@item @uref{http://lilypond.org/doc/v2.2/Documentation/out-www/, +LilyPond 2.2 Documentation} + +@item @uref{http://lilypond.org/doc/v2.0/Documentation/out-www/, +LilyPond 2.0 Documentation} + +@item @uref{http://lilypond.org/doc/v1.8/Documentation/out-www/, +LilyPond 1.8 Documentation} + +@item @uref{http://lilypond.org/doc/v1.6/Documentation/out-www/, +LilyPond 1.6 Documentation} + +@end itemize + +@divEnd +@divEnd + +@node FDL +@unnumberedsec FDL +@translationof FDL + +@divClass{column-center-top} +@subheading 文档许可证 +GNU LilyPond 在 GNU 通用公共许可证下发布。 +在 @ref{Freedom} 里我们介绍了这个许可证以及我们选择它的原因。 + +@divEnd + +@divClass{column-center-bottom} +@subheading GNU 自由文档许可证 1.1 +@include fdl.itexi +@divEnd diff --git a/Documentation/zh/web/news-front.itexi b/Documentation/zh/web/news-front.itexi new file mode 100644 index 0000000000..2a0e5461c2 --- /dev/null +++ b/Documentation/zh/web/news-front.itexi @@ -0,0 +1,16 @@ +@c -*- coding: utf-8; mode: texinfo; documentlanguage: zh -*- +@c This file is part of web.texi +@ignore + Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955 + + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c Translators: Ben Luo + +@subsubheading 第一个预发行版收回 @emph{Jan 13, 2011} +@subsubheading 2.14 的第一个预发行版 - LilyPond 2.13.46 发布了! @emph{Jan 12, 2011} +@subsubheading LilyPond 2.13.45 发布了! @emph{Jan 3, 2011} + +@c -- SKELETON FILE -- diff --git a/GNUmakefile.in b/GNUmakefile.in index 0684e47b31..d616202092 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -17,7 +17,8 @@ SUBDIRS = python scripts \ documentation-dir=$(if $(findstring no,$(DOCUMENTATION)),,Documentation) SCRIPTS = configure autogen.sh smart-autogen.sh smart-configure.sh -README_FILES = COPYING DEDICATION ROADMAP THANKS HACKING +README_FILES = COPYING COPYING.FDL DEDICATION ROADMAP THANKS HACKING \ + LICENSE LICENSE.DOCUMENTATION TOPDOC_FILES = AUTHORS INSTALL README NEWS TOPDOC_TXT_FILES = $(addprefix $(top-build-dir)/Documentation/topdocs/$(outdir)/,$(addsuffix .txt,$(TOPDOC_FILES))) IN_FILES := $(call src-wildcard,*.in) @@ -25,7 +26,7 @@ IN_FILES := $(call src-wildcard,*.in) RELEASE_FILES = ChangeLog RELEASE-COMMIT RELEASE_OUT_FILES = $(RELEASE_FILES:%=$(outdir)/%) OUT_DIST_FILES += $(RELEASE_OUT_FILES) -EXTRA_DIST_FILES = VERSION .gitignore \ +EXTRA_DIST_FILES = VERSION .gitignore .mailmap \ $(README_FILES) $(SCRIPTS) $(IN_FILES) INSTALLATION_DIR=$(local_lilypond_datadir) INSTALLATION_FILES=$(config_make) VERSION @@ -38,7 +39,7 @@ LOCALSTEPMAKE_TEMPLATES=lilypond include $(depth)/make/stepmake.make -local-dist: refresh-release-files dist-toplevel-txt-files +local-dist: refresh-release-files dist-toplevel-txt-files all: $(outdir)/VERSION @@ -69,8 +70,8 @@ local-clean-ChangeLog: dist-toplevel-txt-files: top-doc -mkdir -p $(distdir) - ln $(TOPDOC_TXT_FILES) $(distdir)/ - ln $(top-src-dir)/stepmake/aclocal.m4 $(distdir)/ + ln $(TOPDOC_TXT_FILES) $(distdir) + ln $(top-src-dir)/stepmake/aclocal.m4 $(distdir) info: $(foreach d, $(INFO_DIRECTORIES),$(MAKE) -C $(d) out=www info && ) true @@ -100,7 +101,8 @@ ifeq ($(out),www) # installed in non-recursing target from TOP-SRC-DIR install-WWW: -$(INSTALL) -m 755 -d $(DESTDIR)$(webdir) - rsync -rl --exclude='*.signature' $(outdir)/offline-root/ $(DESTDIR)$(webdir) + rsync -rl --exclude='*.signature' $(outdir)/offline-root $(DESTDIR)$(webdir) + $(MAKE) -C Documentation omf-local-install install-info-WWW: $(foreach d, $(INFO_DIRECTORIES),$(MAKE) -C $(d) install-info && ) true @@ -108,8 +110,7 @@ install-info-WWW: uninstall-WWW: rm -rf $(DESTDIR)$(webdir) -rmdir $(package_docdir) - $(MAKE) -C Documentation/user uninstall - $(MAKE) -C input/lsr uninstall + $(MAKE) -C Documentation uninstall # For online docs with content negotiation, issue `make doc WEB_TARGETS=online' @@ -122,9 +123,13 @@ WWW-post: $(buildscript-dir)/mutopia-index -o $(outdir)/examples.html input/ find $(outdir) -name '*-root' | xargs rm -rf $(buildscript-dir)/www_post $(PACKAGE_NAME) $(TOPLEVEL_VERSION) $(outdir) "$(WEB_TARGETS)" - find $(outdir)/offline-root -type l -delete -endif + find $(outdir)/offline-root -type l | xargs rm -f +endif # ifeq ($(out),www) +# For those who cannot for the life in them remember to type +# WEB_TARGETS=..., just bloody make all doc stuff, already. +all-doc: + $(MAKE) WEB_TARGETS='online offline' doc tree-prefix = $(outdir) tree-bin = $(tree-prefix)/bin @@ -151,9 +156,9 @@ build-dir-setup: $(tree-share-prefix)/lilypond-force PO_FILES = $(call src-wildcard,$(src-depth)/po/*.po) HELP_CATALOGS = $(PO_FILES:po/%.po=%) -CATALOGS = $(HELP_CATALOGS:lilypond=) +CATALOGS = $(HELP_CATALOGS:lilypond=) -$(tree-share-prefix)/lilypond-force link-tree: GNUmakefile $(outdir)/VERSION +$(tree-share-prefix)/lilypond-force link-tree: GNUmakefile $(outdir)/VERSION # Preparing LilyPond tree for build-dir exec cd $(top-build-dir)/$(outbase) && rm -rf bin lib share mkdir -p $(tree-bin) @@ -205,10 +210,12 @@ $(tree-share-prefix)/mf-link-tree link-mf-tree: $(tree-share-prefix)/lilypond-fo rm -f $(tree-share-prefix)/fonts/type1/* && \ cd $(tree-share-prefix)/fonts/otf && \ ln -s ../../../../../../mf/$(outconfbase)/*.otf . - -cd $(tree-share-prefix)/fonts/ && \ + -cd $(tree-share-prefix)/fonts && \ ln -s ../../../../../mf/$(outconfbase)/fonts.conf . -cd $(tree-share-prefix)/fonts/svg && \ ln -s ../../../../../../mf/$(outconfbase)/*.svg . + -cd $(tree-share-prefix)/fonts/svg && \ + ln -s ../../../../../../mf/$(outconfbase)/*.woff . -cd $(tree-share-prefix)/fonts/tfm && \ ln -s ../../../../../../mf/$(outconfbase)/*.tfm . -cd $(tree-share-prefix)/fonts/type1 && \ @@ -234,6 +241,7 @@ grand-replace: $(MAKE) -C scripts/build PATH=$(buildscript-dir):$(PATH) $(buildscript-dir)/grand-replace + ################################################################ # testing @@ -241,28 +249,37 @@ RESULT_DIR=$(top-build-dir)/out/test-results test: - @echo -en 'For tracking crashes: use\n\n\t' - @echo 'grep sourcefilename `grep -L systems.texi out/lybook-db/*/*log|sed s/log/ly/g`' + @echo 'For tracking crashes: use' + @echo + @echo ' grep sourcefilename `grep -L systems.texi out/lybook-testdb/*/*log|sed s/log/ly/g`' @echo - $(MAKE) -C input/regression/ out=test local-test + $(MAKE) -C input/regression out=test local-test + $(MAKE) -C input/regression/midi out=test local-test $(MAKE) -C input/regression/musicxml out=test local-test + $(MAKE) -C input/regression/abc2ly out=test local-test + $(MAKE) -C input/regression/lilypond-book out=test local-test -test-baseline: +test-baseline: @if test -d .git ; then \ $(if $(shell git diff), echo "commit before base lining" && false,true) ; \ fi - $(MAKE) + $(MAKE) $(MAKE) test - $(MAKE) out=test -C input/regression/ local-test-baseline + $(MAKE) out=test -C input/regression local-test-baseline + $(MAKE) out=test -C input/regression/midi local-test-baseline $(MAKE) out=test -C input/regression/musicxml local-test-baseline + $(MAKE) out=test -C input/regression/abc2ly local-test-baseline + $(MAKE) out=test -C input/regression/lilypond-book local-test-baseline $(MAKE) test-snippets-clean local-check: test rm -rf $(RESULT_DIR) mkdir -p $(RESULT_DIR) - $(buildscript-dir)/output-distance --create-images --output-dir $(RESULT_DIR) input/regression/out-test-baseline input/regression/out-test/ - @find input ly -name '*.ly' -print |grep -v 'out.*/' | xargs grep '\\version' -L | grep -v "standard input" |sed 's/^/**** Missing version: /g' + $(buildscript-dir)/output-distance --create-images --output-dir $(RESULT_DIR) \ + input/regression/out-test-baseline input/regression/out-test \ + input/regression/midi/out-test-baseline input/regression/midi/out-test + @find input ly -name '*.ly' -print |grep -v 'out.*/' | xargs grep '\\version' -L | grep -v "standard input" |sed 's/^/**** Missing version: /g' test-redo: @@ -273,10 +290,18 @@ test-redo: $(MAKE) check test-clean: test-snippets-clean - $(MAKE) -C input/regression/ out=test clean + $(MAKE) -C input/regression out=test clean snippets-clean: rm -rf out/lybook-db test-snippets-clean: rm -rf out/lybook-testdb + +# we want this separate for security; see CG 4.2. -gp +website: + $(MAKE) config_make=$(config_make) \ + top-src-dir=$(top-src-dir) \ + -f $(top-src-dir)/make/website.make \ + website + diff --git a/INSTALL.txt b/INSTALL.txt index 09be506e99..594698c1d8 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -5,212 +5,397 @@ Table of Contents ***************** INSTALL - compiling and installing GNU LilyPond - Precompiled binaries - Downloading - Compiling from source - Downloading source code - Requirements - Compilation - Running requirements - Requirements for building documentation - Building LilyPond - Compiling - Compiling for multiple platforms - Compiling outside the source tree - Useful `make' variables - Building documentation - Commands for building documentation - Building documentation without compiling LilyPond - Testing LilyPond - Problems + Overview of compiling + Requirements + Requirements for running LilyPond + Requirements for compiling LilyPond + Requirements for building documentation + Getting the source code + Configuring `make' + Running `./autogen.sh' + Running `../configure' + Configuration options + Checking build dependencies + Configuring target directories + Compiling LilyPond + Using `make' + Saving time with the `-j' option + Compiling for multiple platforms + Useful `make' variables + Post-compilation options + Installing LilyPond from a local build + Generating documentation + Documentation editor's edit/compile cycle + Building documentation + Saving time with `CPU_COUNT' + AJAX search + Installing documentation + Building documentation without compiling + Testing LilyPond binary + Problems Bison 1.875 + Compiling on MacOS X Solaris FreeBSD International fonts + Using lilypond python libraries + Concurrent stable and development versions + Build system -There are two sets of releases for LilyPond: stable releases, and -unstable development releases. Stable versions have an even-numbered -`minor' version number (i.e. 2.8, 2.10, 2.12, etc). Development -versions have an odd-numbered `minor' version number (i.e. 2.7, 2.9, -2.11, etc). +Overview of compiling +===================== - Building LilyPond is a very involved process, so we *highly* -recommend using the precompiled binaries. +Compiling LilyPond from source is an involved process, and is only +recommended for developers and packagers. Typical program users are +instead encouraged to obtain the program from a package manager (on +Unix) or by downloading a precompiled binary configured for a specific +operating system. Pre-compiled binaries are available on the *note +Download: (lilypond-web)Download. page. -Precompiled binaries -==================== + Compiling LilyPond from source is necessary if you want to build, +install, or test your own version of the program. -Downloading ------------ + A successful compile can also be used to generate and install the +documentation, incorporating any changes you may have made. However, a +successful compile is not a requirement for generating the +documentation. The documentation can be built using a Git repository +in conjunction with a locally installed copy of the program. For more +information, see *note Building documentation without compiling::. -Check out `http://lilypond.org/web/install/' for up to date information -on binary packages for your platform. If your operating system is not -covered on that general page, please see the complete list at -`http://download.linuxaudio.org/lilypond/binaries/' + Attempts to compile LilyPond natively on Windows have been +unsuccessful, though a workaround is available (see *note Lilydev: +(lilypond-contributor)Lilydev.). - We currently create binaries for +Requirements +============ - darwin-ppc - MacOS X powerpc - darwin-x86 - MacOS X intel - freebsd-64 - FreeBSD 6.x, x86_64 - freebsd-x86 - FreeBSD 4.x, x86 - linux-64 - Any GNU/Linux distribution, x86_64 - linux-ppc - Any GNU/Linux distribution, powerpc - linux-x86 - Any GNU/Linux distribution, x86 - mingw - Windows x86 +Requirements for running LilyPond +--------------------------------- +Running LilyPond requires proper installation of the following software: -Known issues and warnings -......................... + * DejaVu fonts (http://www.dejavu-fonts.org/) (normally installed by + default) -If you have MacOS 10.3 or 10.4 and you would like to use Python scripts -such as `convert-ly' and `lilypond-book', see *note Setup for MacOS X: -(lilypond-program)Setup for MacOS X. + * FontConfig (http://www.fontconfig.org/) (2.4.0 or newer) -Compiling from source -===================== + * Freetype (http://www.freetype.org/) (2.1.10 or newer) -Downloading source code ------------------------ + * Ghostscript (http://www.ghostscript.com) (8.60 or newer) -Download source + * Guile (http://www.gnu.org/software/guile/guile.html) (1.8.2 or + newer) - * tarballs from `http://lilypond.org/download/' by HTTP. + * Pango (http://www.pango.org/) (1.12 or newer) - * tarballs from `http://download.linuxaudio.org/lilypond/' by HTTP. + * Python (http://www.python.org) (2.4 or newer) - * GIT from git.sv.gnu.org - (http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=summary) + International fonts are required to create music with international +text or lyrics. - git clone git://git.sv.gnu.org/lilypond.git +Requirements for compiling LilyPond +----------------------------------- - The repository does not contain generated files. To create - `configure', run - ./autogen.sh +Below is a full list of packages needed to build LilyPond. However, +for most common distributions there is an easy way of installing most +all build dependencies in one go: - For information on packaging, see `http://lilypond.org/devel'. +Distribution Command +-------------------------------------------------------------------------- +Debian, Ubuntu `sudo apt-get build-dep lilypond' +Fedora, RHEL `sudo yum-builddep lilypond' +openSUSE, SLED `sudo zypper --build-deps-only + source-install lilypond' -Requirements ------------- + * Everything listed in *note Requirements for running LilyPond:: -Compilation -........... + * Development packages for the above items (which should include + header files and libraries). + + Red Hat Fedora: -In addition to the packages needed for running LilyPond (see below), you -need the following extra packages for building. + guile-devel-VERSION + fontconfig-devel-VERSION + freetype-devel-VERSION + pango-devel-VERSION + python-devel-VERSION - When installing a binary package FOO, you may need to install the -FOO-devel, libFOO-dev or FOO-dev package too. + Debian GNU/Linux: - * FontForge (http://fontforge.sf.net/) 20060125 or newer. + guile-VERSION-dev + libfontconfig1-dev + libfreetype6-dev + libpango1.0-dev + pythonVERSION-dev + + * Flex (http://flex.sourceforge.net/) + + * FontForge (http://fontforge.sf.net/) (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.) + + * GNU Bison (http://www.gnu.org/software/bison/) + + * GNU Compiler Collection (http://gcc.gnu.org/) (3.4 or newer, 4.X + recommended) + + * GNU gettext (http://www.gnu.org/software/gettext/gettext.html) + (0.17 or newer) + + * GNU Make (http://www.gnu.org/software/make/) (3.78 or newer) * MetaFont (http://metafont.tutorial.free.fr/) (mf-nowin, mf, mfw or - mfont binaries) and MetaPost - (http://cm.bell-labs.com/who/hobby/MetaPost.html) (mpost binary), - usually packaged with a LaTeX distribution like tetex or texlive. + mfont binaries), usually packaged with TeX + (http://www.latex-project.org/ftp.html). - * t1utils (http://www.lcdf.org/~eddietwo/type/#t1utils) (version - 1.33 or newer recommended). + * MetaPost (http://cm.bell-labs.com/who/hobby/MetaPost.html) (mpost + binary), usually packaged with TeX + (http://www.latex-project.org/ftp.html). - * New Century Schoolbook fonts, as PFB files. These are shipped with - X11 and Ghostscript, and are named `c059033l.pfb' `c059036l.pfb', - `c059013l.pfb' and `c059016l.pfb'. + * Perl (http://www.perl.org/) - * GUILE (http://www.gnu.org/software/guile/guile.html) (version - 1.8.2 or newer). If you are installing binary packages, you may - need to install guile-devel or guile-dev or libguile-dev too. + * Texinfo (http://www.gnu.org/software/texinfo/) (4.11 or newer) - * Texinfo (ftp://ftp.gnu.org/gnu/texinfo/) (version 4.11 or newer). + * Type 1 utilities (http://www.lcdf.org/~eddietwo/type/#t1utils) + (1.33 or newer recommended) - * The GNU c++ compiler (http://gcc.gnu.org/) (version 3.4 or newer. - 4.x is strongly recommended). +Requirements for building documentation +--------------------------------------- - * Python (http://www.python.org) (version 2.4 or newer) +You can view the documentation online at +`http://www.lilypond.org/doc/', but you can also build it locally. +This process requires some additional tools and packages: - * GNU Make (ftp://ftp.gnu.org/gnu/make/) (version 3.78 or newer). + * Everything listed in *note Requirements for compiling LilyPond:: - * gettext (http://www.gnu.org/software/gettext/gettext.html) - (version 0.17 or newer). + * ImageMagick (http://www.imagemagick.org/) - * Flex (http://www.gnu.org/software/flex/). + * Netpbm (http://netpbm.sourceforge.net/) - * Perl (http://www.perl.org/). + * gzip (http://gzip.org/) - * GNU Bison (http://www.gnu.org/software/bison/). + * rsync (http://rsync.samba.org/) - * All packages required for running, including development packages - with header files and libraries. + * Texi2HTML (http://www.nongnu.org/texi2html/) (1.82) + * International fonts -Running requirements -.................... + Red Hat Fedora: -Running LilyPond requires proper installation of the following software + fonts-arabic + fonts-hebrew + fonts-ja + fonts-xorg-truetype + taipeifonts + ttfonts-ja + ttfonts-zh_CN - * Freetype (http://www.freetype.org/) (version 2.1.10 or newer). + Debian GNU/Linux: - * FontConfig (http://fontconfig.org/) (version 2.2 or newer). + emacs-intl-fonts + ttf-kochi-gothic + ttf-kochi-mincho + xfonts-bolkhov-75dpi + xfonts-cronyx-75dpi + xfonts-cronyx-100dpi + xfonts-intl-.* - * Pango (http://www.pango.org/) (version 1.12 or newer). +Getting the source code +======================= - * GUILE (http://www.gnu.org/software/guile/guile.html) (version - 1.8.2 or newer), or patch 1.8.1 with - `http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch'. +Downloading the Git repository +------------------------------ - * Python (http://www.python.org) (version 2.4 or newer). +In general, developers compile LilyPond from within a local Git +repository. Setting up a local Git repository is explained in *note +Starting with Git: (lilypond-contributor)Starting with Git. - * Ghostscript (http://www.ghostscript.com) (version 8.15 or newer. - 8.60 recommended) +Downloading a source tarball +---------------------------- - * Dejaview. (This is normally installed by default) +Packagers are encouraged to use source tarballs for compiling. - International fonts are required to create music with international -text or lyrics. + The tarball for the latest stable release is available on the *note +Source: (lilypond-web)Source. page. -Requirements for building documentation -....................................... +The latest source code snapshot +(http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=snapshot) is also +available as a tarball from the GNU Savannah Git server. + +All tagged releases (including legacy stable versions and the most +recent development release) are available here: + + `http://download.linuxaudio.org/lilypond/source/' + + Download the tarball to your `~/src/' directory, or some other +appropriate place. + + Note: Be careful where you unpack the tarball! Any + subdirectories of the current folder named `lilypond/' or + `lilypond-X.Y.Z/' (where X.Y.Z is the release number) will be + overwritten if there is a name clash with the tarball. + + Unpack the tarball with this command: + + tar -xzf lilypond-X.Y.Z.tar.gz + + This creates a subdirectory within the current directory called +`lilypond-X.Y.Z/'. Once unpacked, the source files occupy about 40 MB +of disk space. + + Windows users wanting to look at the source code may have to +download and install the free-software 7zip archiver +(http://www.7-zip.org) to extract the tarball. + +Configuring `make' +================== + +Running `./autogen.sh' +---------------------- + +After you unpack the tarball (or download the Git repository), the +contents of your top source directory should be similar to the current +source tree listed at +`http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=tree'. + + Next, you need to create the generated files; enter the following +command from your top source directory: + + ./autogen.sh --noconfigure + + This will generate a number of files and directories to aid +configuration, such as `configure', `README.txt', etc. + + Next, create the build directory with: + + mkdir build/ + cd build/ + + We heavily recommend building lilypond inside a separate directory +with this method. + +Running `../configure' +---------------------- + +Configuration options +..................... + + Note: make sure that you are in the `build/' subdirectory of + your source tree. + +The `../configure' command (generated by `./autogen.sh') provides many +options for configuring `make'. To see them all, run: + + ../configure --help + +Checking build dependencies +........................... -You can view the documentation online at `http://lilypond.org/doc/', -but you can also build it locally. This process requires a successful -compile of LilyPond, and some additional tools and packages: + Note: make sure that you are in the `build/' subdirectory of + your source tree. - * The netpbm utilities (http://netpbm.sourceforge.net/) +When `../configure' is run without any arguments, it will check to make +sure your system has everything required for compilation: - * ImageMagick + ../configure - * International fonts (see input/regression/utf-8.ly for hints about - which font packages are necessary for your platform) + If any build dependency is missing, `../configure' will return with: - * Ghostscript 8.60 or newer, or 8.50 with the patch from - `http://bugs.ghostscript.com/show_bug.cgi?id=688154' and the patch - from `http://bugs.ghostscript.com/show_bug.cgi?id=688017'. + ERROR: Please install required programs: FOO - * Texi2HTML (http://www.nongnu.org/texi2html/) 1.80 or newer + The following message is issued if you are missing programs that are +only needed for building the documentation: - * rsync + WARNING: Please consider installing optional programs: BAR -Building LilyPond ------------------ + If you intend to build the documentation locally, you will need to +install or update these programs accordingly. -Compiling -......... + Note: `../configure' may fail to issue warnings for certain + documentation build requirements that are not met. If you + experience problems when building the documentation, you may + need to do a manual check of *note Requirements for building + documentation::. -To install GNU LilyPond, type +Configuring target directories +.............................. + + Note: make sure that you are in the `build/' subdirectory of + your source tree. + +If you intend to use your local build to install a local copy of the +program, you will probably want to configure the installation +directory. Here are the relevant lines taken from the output of +`../configure --help': + + By default, ``make install'' will install all the files in + `/usr/local/bin', `/usr/local/lib' etc. You can specify an + installation prefix other than `/usr/local' using ``--prefix'', + for instance ``--prefix=$HOME''. + + A typical installation prefix is `$HOME/usr': + + ../configure --prefix=$HOME/usr + + Note that if you plan to install a local build on a system where you +do not have root privileges, you will need to do something like this +anyway--`make install' will only succeed if the installation prefix +points to a directory where you have write permission (such as your +home directory). The installation directory will be automatically +created if necessary. + + The location of the `lilypond' command installed by this process +will be `PREFIX/bin/lilypond'; you may want to add `PREFIX/bin/' to +your `$PATH' if it is not already included. + + It is also possible to specify separate installation directories for +different types of program files. See the full output of +`../configure --help' for more information. + + If you encounter any problems, please see *note Problems::. + +Compiling LilyPond +================== + +Using `make' +------------ + + Note: make sure that you are in the `build/' subdirectory of + your source tree. + +LilyPond is compiled with the `make' command. Assuming `make' is +configured properly, you can simply run: - gunzip -c lilypond-x.y.z | tar xf - - cd lilypond-x.y.z - ./configure # run with --help for applicable options make - su -c 'make install' -If you are not root, you should choose a `--prefix' argument that -points into your home directory, e.g. + `make' is short for `make all'. To view a list of `make' targets, +run: + + make help + + TODO: Describe what `make' actually does. - ./configure --prefix=$HOME/usr +Saving time with the `-j' option +-------------------------------- + +If your system has multiple CPUs, you can speed up compilation by +adding `-jX' to the `make' command, where `X' is one more than the +number of cores you have. For example, a typical Core2Duo machine +would use: + + make -j3 + + If you get errors using the `-j' option, and `make' succeeds without +it, try lowering the `X' value. + + Because multiple jobs run in parallel when `-j' is used, it can be +difficult to determine the source of an error when one occurs. In that +case, running `make' without the `-j' is advised. Compiling for multiple platforms -................................ +-------------------------------- If you want to build multiple versions of LilyPond with different configuration settings, you can use the `--enable-config=CONF' option @@ -220,47 +405,193 @@ profiling, then use the following for the normal build ./configure --prefix=$HOME/usr/ --enable-checking make - make install and for the profiling version, specify a different configuration - ./configure --prefix=$HOME/usr/ --enable-profiling --enable-config=prof --disable-checking + ./configure --prefix=$HOME/usr/ --enable-profiling \ + --enable-config=prof --disable-checking make conf=prof + + If you wish to install a copy of the build with profiling, don't +forget to use `conf=CONF' when issuing `make install': + make conf=prof install -Compiling outside the source tree -................................. -It is possible to compile LilyPond in a build tree different from the -source tree, with `--srcdir' option of `configure': +See also +........ + + - mkdir lily-build && cd lily-build - SOURCEDIR/configure --srcdir=SOURCEDIR + *note Installing LilyPond from a local build:: Useful `make' variables -....................... +----------------------- If a less verbose build output if desired, the variable `QUIET_BUILD' may be set to `1' on `make' command line, or in `local.make' at top of the build tree. -Building documentation ----------------------- +Post-compilation options +======================== + +Installing LilyPond from a local build +-------------------------------------- + +If you configured `make' to install your local build in a directory +where you normally have write permission (such as your home directory), +and you have compiled LilyPond by running `make', you can install the +program in your target directory by running: + + make install + + If instead, your installation directory is not one that you can +normally write to (such as the default `/usr/local/', which typically +is only writeable by the superuser), you will need to temporarily +become the superuser when running `make install': + + sudo make install + +or... + + su -c 'make install' + + If you don't have superuser privileges, then you need to configure +the installation directory to one that you can write to, and then +re-install. See *note Configuring target directories::. + +Generating documentation +------------------------ + +Documentation editor's edit/compile cycle +......................................... + + * Initial documentation build: + + make [-jX] + make [-jX CPU_COUNT=X] doc _## can take an hour or more_ + + * Edit/compile cycle: + + _## edit source files, then..._ + + make [-jX] _## needed if editing outside_ + _## Documentation/, but useful anyway_ + _## for finding Texinfo errors._ + touch Documentation/*te?? _## bug workaround_ + make [-jX CPU_COUNT=X] doc _## usually faster than initial build._ -This requires a successful compile of LilyPond, or using an external -LilyPond binary. + * Reset: -Commands for building documentation -................................... + In some cases, it is possible to clean the compiled documentation + with `make doc-clean', but this method is not guaranteed to fix + everything. Instead, we recommend that you delete your `build/' + directory, and begin compiling from scratch. Since the + documentation compile takes much longer than the non-documentation + compile, this does not increase the overall time by a great deal. -The documentation is built by issuing + +Building documentation +...................... + +After a successful compile (using `make'), the documentation can be +built by issuing: make doc - After compilation, the HTML documentation tree is available in -`out-www/offline-root/', and can be browsed locally. + The first time you run `make doc', the process can easily take an +hour or more. After that, `make doc' only makes changes to the +pre-built documentation where needed, so it may only take a minute or +two to test changes if the documentation is already built. + + If `make doc' succeeds, the HTML documentation tree is available in +`out-www/offline-root/', and can be browsed locally. Various portions +of the documentation can be found by looking in `out/' and `out-www' +subdirectories in other places in the source tree, but these are only +_portions_ of the docs. Please do not complain about anything which is +broken in those places; the only complete set of documentation is in +`out-www/offline-root/' from the top of the source tree. + + Compilation of documentation in Info format with images can be done +separately by issuing: + + make info + + +Known issues and warnings +......................... + +If source files have changed since the last documentation build, output +files that need to be rebuilt are normally rebuilt, even if you do not +run `make doc-clean' first. However, build dependencies in the +documentation are so complex that some newly-edited files may not be +rebuilt as they should be; a workaround is to `touch' the top source +file for any manual you've edited. For example, if you make changes to +a file in `notation/', do: + + touch Documentation/notation.tely + +The top sources possibly affected by this are: + + Documentation/extend.texi + Documentation/changes.tely + Documentation/contributor.texi + Documentation/essay.tely + Documentation/extending.tely + Documentation/learning.tely + Documentation/notation.tely + Documentation/snippets.tely + Documentation/usage.tely + Documentation/web.texi + +You can `touch' all of them at once with: + + touch Documentation/*te?? + +However, this will rebuild all of the manuals indiscriminately--it is +more efficient to `touch' only the affected files. + +Saving time with `CPU_COUNT' +............................ + +The most time consuming task for building the documentation is running +LilyPond to build images of music, and there cannot be several +simultaneously running `lilypond-book' instances, so the `-j' `make' +option does not significantly speed up the build process. To help +speed it up, the makefile variable `CPU_COUNT' may be set in +`local.make' or on the command line to the number of `.ly' files that +LilyPond should process simultaneously, e.g. on a bi-processor or dual +core machine: + + make -j3 CPU_COUNT=3 doc + +The recommended value of `CPU_COUNT' is one plus the number of cores or +processors, but it is advisable to set it to a smaller value unless +your system has enough RAM to run that many simultaneous LilyPond +instances. Also, values for the `-j' option that pose problems with +`make' are less likely to pose problems with `make doc' (this applies +to both `-j' and `CPU_COUNT'). For example, with a quad-core processor, +it is possible for `make -j5 CPU_COUNT=5 doc' to work consistently even +if `make -j5' rarely succeeds. + +AJAX search +........... + +To build the documentation with interactive searching, use: - The HTML, PDF and if available Info files can be installed into the + make doc AJAX_SEARCH=1 + + This requires PHP, and you must view the docs via a http connection +(you cannot view them on your local filesystem). + + Note: Due to potential security or load issues, this option is + not enabled in the official documentation builds. Enable at + your own risk. + +Installing documentation +........................ + +The HTML, PDF and if available Info files can be installed into the standard documentation path by issuing make install-doc @@ -269,12 +600,7 @@ This also installs Info documentation with images if the installation prefix is properly set; otherwise, instructions to complete proper installation of Info documentation are printed on standard output. - Compilation of documentation in Info format with images can be done -separately by issuing - - make info - -Separate installation of this documentation is done by issuing + To install the Info documentation separately, run: make install-info @@ -302,43 +628,13 @@ available with from every directory in the build tree. Most targets for documentation maintenance are available from `Documentation/'; for more information, -see the Contributors' Guide, section _Documentation work_. +see *note Documentation work: (lilypond-contributor)Documentation work. The makefile variable `QUIET_BUILD' may be set to `1' for a less verbose build output, just like for building the programs. - - -Known issues and warnings -......................... - -The most time consuming task for building the documentation is running -LilyPond to build images of music, and there cannot be several -simultaneously running `lilypond-book' instances, so `-j' `make' option -does not significantly speed up the build process. To help speed it -up, the makefile variable CPU_COUNT may be set in `local.make' or on -the command line to the number of `.ly' files that LilyPond should -process simultaneously, e.g. on a bi-processor or dual core machine - - make -j3 CPU_COUNT=3 doc - -The recommended value of CPU_COUNT is one plus the number of cores or -processors, but it is advisable to set it to a smaller value if your -system has not enough RAM to run that many simultaneous LilyPond -instances. - - If source files have changed since last documentation build, output -files that need to be rebuilt are normally rebuilt, even if you do not -run `make doc-clean' first. However, building dependencies in the -documentation are so complex that rebuilding of some targets may not be -triggered as they should be; a workaround is to force rebuilding by -touching appropriate files, e.g. - - touch Documentation/user/*.itely - touch input/lsr/*.ly - -Building documentation without compiling LilyPond -................................................. +Building documentation without compiling +........................................ The documentation can be built locally without compiling LilyPond binary, if LilyPond is already installed on your system. @@ -347,19 +643,19 @@ binary, if LilyPond is already installed on your system. ./autogen.sh # ignore any warning messages cp GNUmakefile.in GNUmakefile - make -C python + make -C scripts && make -C python nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc Please note that this may break sometimes - for example, if a new feature is added with a test file in input/regression, even the latest development release of LilyPond will fail to build the docs. - You may build the manual without building all the `input/*' stuff: -change directory, for example to `Documentation/user', issue `make -doc', which will build documentation in a subdirectory `out-www' from -the source files in current directory. In this case, if you also want -to browse the documentation in its post-processed form, change back to -top directory and issue + You may build the manual without building all the `input/*' stuff +(i.e. mostly regression tests): change directory, for example to +`Documentation/', issue `make doc', which will build documentation in a +subdirectory `out-www' from the source files in current directory. In +this case, if you also want to browse the documentation in its +post-processed form, change back to top directory and issue make out=www WWW-post @@ -373,47 +669,35 @@ GNU/Linux, I use this: export LD_LIBRARY_PATH=/usr/lib exec /usr/bin/pngtopnm "$@" - On MacOS X, I use this: + On MacOS X with fink, I use this: export DYLD_LIBRARY_PATH=/sw/lib exec /sw/bin/pngtopnm "$@" -Testing LilyPond ----------------- - -LilyPond comes with an extensive suite that exercises the entire -program. This suite can be used to automatically check the impact of a -change. This is done as follows - - make test-baseline - _## apply your changes, compile_ - make check + On MacOS X with macports, you should use this: - This will leave an HTML page `out/test-results/index.html'. This -page shows all the important differences that your change introduced, -whether in the layout, MIDI, performance or error reporting. +export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib +exec /opt/local/bin/pngtopnm "$@" - To rerun tests, use +Testing LilyPond binary +----------------------- - make test-redo _## redo files differing from baseline_ - make test-clean _## remove all test results_ +LilyPond comes with an extensive suite that exercises the entire +program. This suite can be used to test that the binary has been built +correctly. -and then run `make check' again. + The test suite can be executed with: - For tracking memory usage as part of this test, you will need GUILE -CVS; especially the following patch: -`http://lilypond.org/vc/gub.darcs/patches/guile-1.9-gcstats.patch'. +make test - For checking the coverage of the test suite, do the following + If the test suite completes successfully, the LilyPond binary has +been verified. - ./scripts/auxiliar/build-coverage.sh - _# uncovered files, least covered first_ - ./scripts/auxiliar/coverage.py --summary out-cov/*.cc - _# consecutive uncovered lines, longest first_ - ./scripts/auxiliar/coverage.py --uncovered out-cov/*.cc + More information on the regression test suite is found at *note +Regression tests: (lilypond-contributor)Regression tests. Problems --------- +======== For help and questions use . Send bug reports to . @@ -433,6 +717,47 @@ recompile bison 1.875 with the following fix # save $ make +Compiling on MacOS X +.................... + +Here are special instructions for compiling under MacOS X. These +instructions assume that dependencies are installed using MacPorts. +(http://www.macports.org/) The instructions have been tested using OS X +10.5 (Leopard). + + First, install the relevant dependencies using MacPorts. + + Next, add the following to your relevant shell initialization files. +This is `~/.profile' by default. You should create this file if it +does not exist. + + export PATH=/opt/local/bin:/opt/local/sbin:$PATH + export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:$DYLD_FALLBACK_LIBRARY_PATH + + Now you must edit the generated `config.make' file. Change + + FLEXLEXER_FILE = /usr/include/FlexLexer.h + +to: + + FLEXLEXER_FILE = /opt/local/include/FlexLexer.h + + At this point, you should verify that you have the appropriate fonts +installed with your ghostscript installation. Check `ls +/opt/local/share/ghostscript/fonts' for: 'c0590*' files (.pfb, .pfb and +.afm). If you don't have them, run the following commands to grab them +from the ghostscript SVN server and install them in the appropriate +location: + + svn export http://svn.ghostscript.com/ghostscript/tags/urw-fonts-1.0.7pre44/ + sudo mv urw-fonts-1.0.7pre44/* /opt/local/share/ghostscript/fonts/ + rm -rf urw-fonts-1.07pre44 + + Now run the `./configure' script. To avoid complications with +automatic font detection, add + + --with-ncsb-dir=/opt/local/share/ghostscript/fonts + Solaris ....... @@ -463,7 +788,7 @@ for your hierarchy.) International fonts ................... -On MacOS X, all fonts are installed by default. However, finding all +On Mac OS X, all fonts are installed by default. However, finding all system fonts requires a bit of configuration; see this post (http://lists.gnu.org/archive/html/lilypond-user/2007-03/msg00472.html) on the `lilypond-user' mailing list. @@ -484,3 +809,75 @@ Debian GNU/Linux ttf-kochi-gothic ttf-kochi-mincho \ xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi +Using lilypond python libraries +............................... + +If you want to use lilypond's python libraries (either running certain +build scripts manually, or using them in other programs), set +`PYTHONPATH' to `python/out' in your build directory, or +`.../usr/lib/lilypond/current/python' in the installation directory +structure. + +Concurrent stable and development versions +========================================== + +It can be useful to have both the stable and the development versions +of Lilypond available at once. One way to do this on GNU/Linux is to +install the stable version using the precompiled binary, and run the +development version from the source tree. After running `make all' +from the top directory of the Lilypond source files, there will be a +binary called `lilypond' in the `out' directory: + + /lilypond/out/bin/lilypond + + This binary can be run without actually doing the `make install' +command. The advantage to this is that you can have all of the latest +changes available after pulling from git and running `make all', +without having to uninstall the old version and reinstall the new. + + So, to use the stable version, install it as usual and use the +normal commands: + + lilypond foobar.ly + + To use the development version, create a link to the binary in the +source tree by saving the following line in a file somewhere in your +`$PATH': + + exec /lilypond/out/bin/lilypond "$@" + + Save it as `Lilypond' (with a capital L to distinguish it from the +stable `lilypond'), and make it executable: + + chmod +x Lilypond + + Then you can invoke the development version this way: + + Lilypond foobar.ly + + TODO: ADD + + - other compilation tricks for developers + +Build system +============ + +We currently use make and stepmake, which is complicated and only used +by us. Hopefully this will change in the future. + +Version-specific texinfo macros +............................... + + * made with `scripts/build/create-version-itexi.py' and + `scripts/build/create-weblinks-itexi.py' + + * used extensively in the `WEBSITE_ONLY_BUILD' version of the + website (made with `website.make', used on lilypond.org) + + * not (?) used in the main docs? + + * the numbers in VERSION file: MINOR_VERSION should be 1 more than + the last release, VERSION_DEVEL should be the last *online* + release. Yes, VERSION_DEVEL is less than VERSION. + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..753f485dbe --- /dev/null +++ b/LICENSE @@ -0,0 +1,34 @@ +GNU 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. + +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 . + +A copy of the license is contained in the file COPYING. + +The following exceptions apply: + + * It does not apply to the documentation files (contained in + the directory tree Documentation/). The documentation is + covered in the file LICENSE.DOCUMENTATION. + + * It does not apply to ly/articulate.ly, which is only licensed + under the GPL version 3 (not any later versions). + + * If you create a document which uses fonts included in LilyPond, + and embed this font or unaltered portions of this font into the + document, then this font does not by itself cause the resulting + document to be covered by the GNU General Public License. This + exception does not however invalidate any other reasons why the + document might be covered by the GNU General Public License. + If you modify one or more of the fonts, you may extend this + exception to your version of the fonts but you are not obliged + to do so. If you do not wish to do so, delete this exception + statement from your version. diff --git a/LICENSE.DOCUMENTATION b/LICENSE.DOCUMENTATION new file mode 100644 index 0000000000..9949d449e4 --- /dev/null +++ b/LICENSE.DOCUMENTATION @@ -0,0 +1,19 @@ +Permission is granted to copy, distribute and/or modify the +documentation for GNU LilyPond under the terms of the GNU Free +Documentation License as published by the Free Software Foundation, +either version 1.3, or (at your option) any later version; with no +Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. + +A copy of the license is contained in the file COPYING.FDL. + +The following exceptions apply: + + * It does not apply to input files (contained in the + directory tree Documentation/snippets/); these are in + the public domain. + + * It does not apply to any manual which explicitly states + another license. + + * It does not apply to the MusicXML unit test suite, + which is licensed under the MIT license. diff --git a/NEWS.txt b/NEWS.txt index 1a11d9b769..64fcff492d 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -1,286 +1,392 @@ -New features in 2.12 since 2.10 +New features in 2.14 since 2.12 ******************************* - * Fret diagrams can now have variable string thickness: + * 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. - [image of music] + * 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. + \include "articulate.ly" + \articulate << + all the rest of the score... + >> - * A new fret diagram orientation, opposing-landscape, is available: + * Single beat repeats for sixteenth or shorter notes and beat + repeats for measures containing notes of varying durations are now + supported. - [image of music] + [image of music] + * Lilypond now engraves woodwind fingering charts. - * Unbeamed 128th notes are now supported: + [image of music] - [image of music] + * MIDI output has been improved + * the option `\set Score.midiChannelMapping = #'voice' puts + each voice on its own midi MIDI channel + * the option `\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. - * Extending LilyPond's existing support for microtones, there are - now arrowed accidentals for the notation of microtonal alterations. - To use them, redefine the `glyph-name-alist' property of - `Accidental' as in the following example which uses quartertones - to typeset arrowed accidentals. Alternatively, it is possible to - define separate names for all notes with arrowed accidentals (see - `ly/makam.ly' for boilerplate code). + * the default, `\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. - [image of music] + * dynamics are now rendered as note velocities, no longer as + midi volume. This improves the sound on [high end] midi + renderers. + * MIDI-import through Midi2ly is improved + * Midi2ly now also works on Windows systems - * Straight flags (used in old scores of e.g. Bach, but also in - different form in modern scores of e.g. Stockhausen) are now - implemented: + * MIDI-files with more than 32 tracks are now handled - [image of music] + * notes on certain simultaneous voices no longer ignored + + * notes overrunning a bar line are no longer truncated + + * initial key signature and time signature are respected + + * a problem with octaves in subsequent tracks/voices is fixed + + * initial support for multiple voices notated on one staff + + * the instrumentName is set from track data + + * new -skip option, rests are displayed by default + * rests overrunning a bar line are not truncated - * `\bookpart' blocks may be used to split a book into several parts, - separated by a page break, in order to ease the page breaking, or - to use different `\paper' settings in different parts. + * new -include-header option for setting titles - \bookpart { - \header { - title = "Book title" - subtitle = "First part" + * new -preview option for big MIDI-files + The first feature was sponsored by Valentin Villenave, the other + features were sponsored by Image-Line Software for FL Studio. + + * A new `Completion_rest_engraver' is available for automatically + converting long rests which overrun bar lines, matching the + `Completion_heads_engraver' for notes + \layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" } - \score { ... } - ... } - \bookpart { - \header { - subtitle = "Second part" - } - \score { ... } - ... + This feature was sponsored by Image-Line Software for FL Studio. + + * Dots can be added to the table of contents items using: + \paper { + tocItemMarkup = \tocItemWithDotsMarkup } - * Nested contexts of the same type are now allowed. This deprecates - `InnerStaffGroup' and `InnerChoirStaff'. + * New markup commands `\pattern' and `\fill-with-pattern' are + available. [image of music] - [image of music] + * A minimal composer toolkit of modal transformations is provided. + A motif may be transposed, inverted and/or converted to its + retrograde within any scale. + [image of music] - * Percent repeat counters can be shown at regular intervals using the - context property `repeatCountVisibility'. + * Added minimal support for black mensural notation. - [image of music] + * Enhanced support for obliqua shapes within white mensural + ligatures. + [image of music] - * In addition to the already existing `showLastLength' property, - `showFirstLength' can now be set as well, rendering only the first - measures of a piece. Both properties may be set at the same time: + * New markup functions `\with-link' and `\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. - [image of music] + * Compound time signatures are now supported by the `\compoundMeter' + command, which can be used instead of `\time': + [image of music] - * The file extension for MIDI can be set using the command-line - program default `midi-extension'. For Windows, the default - extension has been changed to `.mid'. + * Lyrics above a staff must have their `staff-affinity' set to + `DOWN' or must have their `alignAboveContext' property set in + order to be properly aligned. For more information, see *note + Placing lyrics vertically: (lilypond-notation)Placing lyrics + vertically. - * Two variations on the default double repeat bar line are now - available. + * `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 + `stringTunings' is set to a Scheme constant value. - [image of music] + New commands `makeStringTuning' and `contextStringTuning' allow + the creation of string tunings in the form of a Lilypond chord + construct. + * By using `\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. - * Four automatic accidentals rules have been added: `neo-modern', - `neo-modern-cautionary', `dodecaphonic' and `teaching'. The - following example illustrates `neo-modern' rule. + [image of music] - [image of music] + * Note names can be selected with a new `\language "italiano"' + command, which can be used in safe mode. The old `\include + "italiano.ly"' syntax is still supported for now, but will be + deprecated in the future. + + * autobeaming is now disabled by `\cadenzaOn' and enabled by + `\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. + * 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. - * Flags can now be generated with Scheme-code using the `'flag' - `Stem' grob property. Existing scores will work without change. + * The part-combiner's decision to combine/not combine notes can now + be customized [image of music] - * Harp pedalling diagrams were added: + * Tablature staves show fret numbers only by default. To get the + former style, `\tabFullNotation' is provided. - [image of music] + * Funk-style and Walker-style shape notes have been added. + * Rests will no longer keep a staff alive if + `\RemoveEmptyStaffContext' is used. - * Predefined, user-configurable, transposable fret diagrams are now - available in the `FretBoards' context: + * New option `-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. - [image of music] + * 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. + * The SVG backend has optional support for WOFF fonts + (http://www.w3.org/Submission/WOFF). Using the Scheme option `-d + svg-woff' together with the SVG backend selection `-d + backend=svg', produces SVG output with CSS WOFF font selection. - * The following syntax changes were made, in chronological order. In - addition, fret diagram properties have been moved to - `fret-diagram-details', and the `#'style' property is used to - select solid/dashed lines instead of `#'dash-fraction'. - - 'break-align-symbol -> 'break-align-symbols - scripts.caesura -> scripts.caesura.curved - \setEasyHeads -> \easyHeadsOn - \easyHeadsOff (new command) - \fatText -> \textLengthOn - \emptyText -> \textLengthOff - \set hairpinToBarline -> \override Hairpin #'to-barline - \compressMusic -> \scaleDurations - \octave -> \octaveCheck - \arpeggioUp -> \arpeggioArrowUp - \arpeggioDown -> \arpeggioArrowDown - \arpeggioNeutral -> \arpeggioNormal - \setTextCresc -> \crescTextCresc - \setTextDecresc -> \dimTextDecresc - \setTextDecr -> \dimTextDecr - \setTextDim -> \dimTextDim - \setHairpinCresc -> \crescHairpin - \setHairpinDecresc -> \dimHairpin - \sustainUp -> \sustainOff - \sustainDown -> \sustainOn - \sostenutoDown -> \sostenutoOn - \sostenutoUp -> \sostenutoOff - 'infinite-spacing-height -> 'extra-spacing-height - #(set-octavation oct) -> \ottava #oct - \put-adjacent markup axis dir markup -> \put-adjacent axis dir markup markup - \pointAndClickOn (new command) - \pointAndClickOff (new command) - \center-align -> \center-column - \hcenter -> \center-align - printallheaders -> print-all-headers - \bigger -> \larger (already existing command) - systemSeparatorMarkup -> system-separator-markup - - Moreover, some files in the `ly/' directory have been renamed; the - *-init.ly filenames are now only used for files that are - automatically included, while such files as `makam-init.ly' or - `gregorian-init.ly' have been renamed to `makam.ly' or - `gregorian.ly'. - - * The "tex" and "texstr" backends have been removed. Font are now - accessed via the fontconfig library; the Pango library is used to - display text strings. - - * Metronome marks can now also contain a textual description. The - duration and count (if given) are shown in parentheses after the - text. + * 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: old version + (http://lilypond.org/doc/v2.12/Documentation/user/lilypond/The-Feta-font.html#Clef-glyphs), + new version + (http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#Clef-glyphs). + + * Text crescendo spanners can now be added directly using `\cresc', + `\dim' and `\decresc'. [image of music] - * In figured bass you can now also use a backslash through a number - to indicate a raised 6th step. + * The documented syntax of `lilypond' environments in the LaTeX mode + of `lilypond-book' has been changed to conform with standard LaTeX + syntax: options now come after the environment name: + \begin{lilypond}[OPTIONS] ... - [image of music] + The previous syntax with options after `\begin' is still accepted + by `lilypond-book' but deprecated. Something like + sed -i '/begin\[/s/begin\(\[[^]]*]\)\({lilypond}\)/begin\2\1/' + + might do the trick for conversion. + * 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. - * Arpeggios may now use "parenthesis" style brackets: + * A variant of the Segno sign is provided: [image of music] - * Single-system scores are now naturally spaced instead of being - stretched to fill the line width. This can be changed by setting - `ragged-right = ##f'. + * Context modifications (`\with' blocks) can be stored in variables + and inserted into contexts or other `\with' blocks: - * Enclosing text within boxes with rounded corners is now possible, - using the `\rounded-box' markup command. + 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 + } + } + } + [image of music] - * `lilypond-book' can run any program instead of `latex' to guess - the line width, thanks to `--latex-program' command line option. - * Underlining is now possible with the `\underline' markup command. + * A half-open articulation was added: - * It is now possible to specify, using the `page-count' variable in - the paper block, the number of pages that will be used. + [image of music] - * A new page breaking function, `ly:minimal-breaking', is dedicated - to books with many pages or a lot of text. - * A table of contents is included using `\markuplines - \table-of-contents'. Elements are added to it using the - `\tocItem' command. + This is sometimes used to indicate half-open hi-hats. - * Text spreading over several pages is entered using the - `\markuplines' keyword. Builtin markup list commands, such as - `\justified-lines' or `\wordwrap-lines' may be used, and new ones - created using the `define-markup-list-command' Scheme macro. + * The Unicode Bidirectional Algorithm is now fully supported for + single-line markup due to enhanced integration with Pango. - * Particular points of a book may be marked with the `\label' - command. Then, the page where these points are placed can be - referred to using the `\page-ref' markup command. + * LilyPond is now licensed under the GNU GPL v3+. - * Page breaking and page turning commands (`\pageBreak', - `\noPageBreak', etc.) can be used at top-level, between scores and - top-level markups. + * In tablature, frets can be indicated with labels other than + numbers: - * The following options are now changed as a `-d' sub-option: - `--backend', `--safe', `--preview' and `--no-pages' (which became - `-dno-print-pages'). The `-b' option does not exist any more. + \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")) + 4. 8 4 + } + [image of music] - * Improved testing procedures now catch changes in CPU and memory - performance, page layout, MIDI results and warnings. This helps to - reduce the number of regression errors during development, - resulting in more stable releases. - See `INSTALL.html#Testing-LilyPond' for more information. + * Layout objects can be printed over a white background, which + whites-out objects in lower layers which lie beneath: - * Nested properties, such as `'details' in `Slur', can be reverted - as well. The syntax for this is + \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 + [image of music] - \revert Slur #'(details closeness-factor) - * All line spanners are more flexible now in the configuration of - their end points. This includes glissando, voice followers, text - crescendos and other text spanners. The old syntax for setting - text on line spanners is no longer valid. + * Chords can be repeated using the `q' shortcut: - [image of music] + 8.-^ q16 q4-^ + [image of music] - This feature was sponsored by Trevor Bača. + * With two-sided mode, margins for odd and even pages can be set + using `inner-margin' and `outer-margin': - * The environment variable `LILYPONDPREFIX' has been renamed - `LILYPOND_DATADIR'. + \paper { + two-sided = ##t + inner-margin = 10 \mm + outer-margin = 20 \mm + } - * Notes or rests, such as a typical end note, that fill an entire - measure are preceded by some more space. + * Paper margin defaults, as specified in + `ly/paper-defaults-init.ly', apply to the default paper size (a4) + and are automatically scaled according to the paper size chosen. - [image of music] + * All combinations of `left-margin', `right-margin' and `line-width' + work now. There is no more need to set `line-width' manually + unless you explicitly want to. + * Support for using an alternative music font, such as Gonville, is + now added. - * All `\score's in a lilypond-book fragment are now inserted into - the document. Also, toplevel markups don't result in an entire - page. + * In addition to the existing `\hspace' markup command, a new + `\vspace' command has been added to provide an easy and flexible + way to add vertical space in markups. - * Alterations (such as a sharp or flat) may now be arbitrary - fractions. This allows some forms of microtonal music. For - example, Turkish makam music uses 1/9th tone alterations. + * The direction of manual beams can be set with `^[' and `_['. + + * A version of the breve note head has been added with two vertical + lines on each side. [image of music] - * Tie directions may be set with `^~' and `_~'. + * 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. + + [image of music] - * Tablature now supports harmonics and slides: + + * Braces in markup can now be selected by point size using the + markup commands `\left-brace' and `\right-brace'. [image of music] - This feature was sponsored by Mike Amundsen + * 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: + #(ly:set-option 'delete-intermediate-files #f) + + * Dashed and dotted slurs, phrasing slurs, and ties have been made + variable thickness, and partially dashed slurs are now available: - * Horizontal spacing now follows object outlines more accurately. - This allows tighter horizontal spacing. + [image of music] + + + * An eyeglasses markup was added, indicating strongly to look at the + conductor for instructions: [image of music] - * Objects that belong outside of the staff are now positioned - automatically to avoid collisions. + * A snap-pizzicato (also known as Bartok-pizzicato) articulation was + added: [image of music] - * Staves are spaced vertically using a skyline algorithm. This helps - prevent uneven vertical spacing. + * Tuplet number formatting functions are now available to print + other fractions and to add notes to the number or fraction: [image of music] + * FretBoards now have a chordChanges property to keep repeated + FretBoard objects from being typeset. + + * 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 `staff-affinity' is defined. Some + page formatting variables (`page-top-space', `between-system-space + -padding', and `before- between- after-title-space') have been + replaced by flexible vertical dimensions. +  diff --git a/README.txt b/README.txt index 8b16693718..6b35be73f5 100644 --- a/README.txt +++ b/README.txt @@ -25,7 +25,7 @@ The primary download site for sourcecode is For compiling and running LilyPond see the installation instructions. These instructions can be found when you unpack lilypond, as -`lilypond-x.y.z/INSTALL.txt'. They are also available on the web at +`lilypond-x.y.z/INSTALL.txt'. They are also available on the web at `http://lilypond.org/doc/v2.12/Documentation/topdocs/INSTALL.html'. 1.4 Documentation @@ -45,27 +45,27 @@ list, not to us personally. We have the following mailing lists: * info-lilypond@gnu.org - (http://mail.gnu.org/mailman/listinfo/info-lilypond) is a + (http://lists.gnu.org/mailman/listinfo/info-lilypond) is a low-volume list for information on LilyPond project. This list is moderated; ask David R. Linn or Han-Wen to send announcements for this list. * lilypond-devel@gnu.org - (http://mail.gnu.org/mailman/listinfo/lilypond-devel) for + (http://lists.gnu.org/mailman/listinfo/lilypond-devel) for discussions about developing LilyPond, in particular the unstable series. * lilypond-user@gnu.org - (http://mail.gnu.org/mailman/listinfo/lilypond-user) for + (http://lists.gnu.org/mailman/listinfo/lilypond-user) for discussions about using LilyPond, in particular the stable series. * bug-lilypond@gnu.org - (http://mail.gnu.org/mailman/listinfo/bug-lilypond) for sending + (http://lists.gnu.org/mailman/listinfo/bug-lilypond) for sending bugreports. * lilypond-cvs@gnu.org - (http://mail.gnu.org/mailman/listinfo/lilypond-cvs) for log files - from the autobuild. + (http://lists.gnu.org/mailman/listinfo/lilypond-cvs) for log + files from the autobuild. You can search the lists from our searching facilities (http://lilypond.org/search). diff --git a/ROADMAP b/ROADMAP index c027bec55e..8b66091810 100644 --- a/ROADMAP +++ b/ROADMAP @@ -1,52 +1,105 @@ Prebuilt Documentation and packages are available from: - http://lilypond.org + http://www.lilypond.org LilyPond development is hosted at: http://savannah.gnu.org/projects/lilypond -Here is a simple explanation of the directory layout for LilyPond's -source files. +Here is a simple explanation of the directory layout for +LilyPond's source files. - . Toplevel READMEs, ChangeLog, build bootstrapping, - patches for third party programs - Documentation/ - bibliography/ .bib files with references to books and articles - misc/ Old announcements, ChangeLogs and NEWS - pictures/ The logo - topdocs/ Sources for the toplevel READMEs - (README.txt, INSTALL.txt, NEWS.txt etc.) - user/ User manuals - po/ Translated manual node names - fr/ es/ de/ Docs translated to French, Spanish, German, resp. - elisp/ Emacs LilyPond mode and syntax coloring - flower/ A simple C++ library - input/ Music input examples - lsr/ Snippets from the LilyPond Snippet Repository - (auto-generated, do not modify!) - manual/ Examples from the manual - mutopia/ Real music, more at www.mutopiaproject.org - new/ Snippets which are too new for LSR - regression/ Testing of features, one test per file - texidocs/ Translations of texidoc and doctitle fields - (for input/lsr) - tutorial/ Examples from the tutorial - lily/ C++ sources for the LilyPond binary - ly/ System music include files - make/ Specific make subroutines and packaging for - Red Hat-like distributions (.spec files) - mf/ MetaFont sources for the Emmentaler and Aybabtu fonts - po/ Translations for binaries and end-user scripts - ps/ PostScript library files - python/ Python modules, MIDI module - auxiliar/ Python modules used by maintenance scripts - or in the build process - scm/ Scheme sources for LilyPond and subroutine files - scripts/ End-user scripts - auxiliar/ Scripts for maintaining the sources and scripts - for the build process that need not be built - build/ Scripts for the build process that must be built - stepmake/ Generic make subroutine files - tex/ TeX and texinfo library files - vim/ Vi(M) LilyPond mode and syntax coloring + +. Toplevel READMEs, ChangeLog, +| build bootstrapping, patches +| for third party programs +| +|-- Documentation/ Top sources for manuals +| | +| | +| | INDIVIDUAL CHAPTERS FOR EACH MANUAL: +| | +| |-- contributor/ Contributor's Guide +| |-- essay/ Essay on automated music engraving +| |-- extending/ Extending +| |-- learning/ Learning Manual +| |-- notation/ Notation Reference +| |-- usage/ Usage +| |-- web/ The website +| | `-- ly-examples/ .ly files for the "Examples" page +| | +| | +| | TRANSLATED MANUALS: +| | Each language's directory can contain... +| | 1) translated versions of: +| | * top sources for manuals +| | * individual chapters for each manual +| | 2) a texidocs/ directory for snippet translations +| | +| |-- de/ German +| |-- es/ Spanish +| |-- fr/ French +| |-- hu/ Hungarian +| |-- it/ Italian +| |-- ja/ Japanese +| |-- nl/ Dutch +| | +| | +| | MISCELLANEOUS DOC STUFF: +| | +| |-- css/ CSS files for HTML docs +| |-- included/ .ly files used in the manuals +| |-- logo/ Web logo and "note" icon +| |-- misc/ Old announcements, ChangeLogs and NEWS +| |-- pictures/ Images used (eps/jpg/png/svg) +| | `-- pdf/ (pdf) +| |-- po/ Translated build/maintenance scripts +| |-- snippets/ Auto-generated .ly snippets (from the LSR) +| | `-- new/ Snippets too new for the LSR +| `-- topdocs/ AUTHORS, INSTALL, README +| +| +| C++ SOURCES: +| +|-- flower/ A simple C++ library +|-- lily/ C++ sources for the LilyPond binary +| +| +| LIBRARIES: +| +|-- ly/ .ly \include files +|-- mf/ MetaFont sources for Emmentaler fonts +|-- ps/ PostScript library files +|-- scm/ Scheme sources for LilyPond and subroutine files +|-- tex/ TeX and texinfo library files +| +| +| SCRIPTS: +| +|-- python/ Python modules, MIDI module +| `-- auxiliar/ Python modules for build/maintenance +|-- scripts/ End-user scripts (--> lilypond/usr/bin/) +| |-- auxiliar/ Maintenance and non-essential build scripts +| `-- build/ Essential build scripts +| +| +| BUILD PROCESS: +| (also see SCRIPTS section above) +| +|-- make/ Specific make subroutine files +|-- stepmake/ Generic make subroutine files +| +| +| REGRESSION TESTS: +| +|-- input/ +| `-- regression/ .ly regression tests +| |-- abc2ly/ .abc regression tests +| `-- musicxml/ .xml and .itexi regression tests +| +| +| MISCELLANEOUS: +| +|-- elisp/ Emacs LilyPond mode and syntax coloring +|-- vim/ Vi(M) LilyPond mode and syntax coloring +`-- po/ Translations for binaries and end-user scripts diff --git a/THANKS b/THANKS index 5132608f47..64e2a1f97c 100644 --- a/THANKS +++ b/THANKS @@ -1,3 +1,53 @@ +Release 2.13 +************ + +DEVELOPMENT TEAM + +Han-Wen Nienhuys - Core development +Jan Nieuwenhuizen - Core development +Graham Percival - Release Meister +Valentin Villenave - LSR Editor and Bug Meister +Mats Bengtsson - Support Guru +John Mandereau - Translation Meister +Trevor Daniels - Documentation Editor + +CONTRIBUTORS + +Carl Sorensen - Fret diagrams +Jonathan Kulp - Documentation Patches +Ralph Palmer - Documentation Indexing + +TRANSLATORS + +Francisco Vila +Jean-Charles Malahieude +Till Rettig +Yoshiki Sawada + +FROGS + +Carl Sorensen - Frog meister +Andrew Hawryluk +Andrew Wilson +Marek Klein +Ian Hulin +Frédéric Bron +Hajo Dezelski +Kieren MacMillan + + +BUG HUNTERS/SUGGESTIONS + +Chris Liddell +Chris Snyder +David Kastrup +Karim Haddad +Mark Polesky +Martin Tarenskeen +Michael Käppler +Nick Payne + + Release 2.12 ************ diff --git a/VERSION b/VERSION index 0becd80f6f..1d1d9069c9 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 -MINOR_VERSION=12 -PATCH_LEVEL=3 +MINOR_VERSION=14 +PATCH_LEVEL=2 MY_PATCH_LEVEL= - +VERSION_STABLE=2.14.1 +VERSION_DEVEL=2.15.1 diff --git a/aclocal.m4 b/aclocal.m4 index 83c07c3a2d..8fe2dddb72 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -32,9 +32,13 @@ AC_DEFUN(STEPMAKE_GET_VERSION, [ ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -174,19 +178,23 @@ AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [ pipe_b=yes AC_ARG_ENABLE(debugging, - [ --enable-debugging compile with debugging info. Default: on], + [AS_HELP_STRING([--enable-debugging], + [compile with debugging info. Default: on])], [debug_b=$enableval]) AC_ARG_ENABLE(optimising, - [ --enable-optimising compile with optimising. Default: on], + [AS_HELP_STRING([--enable-optimising], + [compile with optimising. Default: on])], [optimise_b=$enableval]) AC_ARG_ENABLE(profiling, - [ --enable-profiling compile with gprof support. Default: off], + [AS_HELP_STRING([--enable-profiling], + [compile with gprof support. Default: off])], [profile_b=$enableval]) AC_ARG_ENABLE(pipe, - [ --enable-pipe compile with -pipe. Default: on], + [AS_HELP_STRING([--enable-pipe], + [compile with -pipe. Default: on])], [pipe_b=$enableval]) if test "$optimise_b" = yes; then @@ -254,7 +262,6 @@ AC_DEFUN(STEPMAKE_COMPILE, [ ]) AC_DEFUN(STEPMAKE_CXX, [ - AC_LANG([C++]) AC_PROG_CXX STEPMAKE_OPTIONAL_REQUIRED(CXX, c++, $1) @@ -399,7 +406,7 @@ EOF fi for d in 2 3 4 ; do - for mf in `cd $srcdir ; find -maxdepth $d -mindepth $d -name GNUmakefile`; do + for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name GNUmakefile`; do mkdir -p $(dirname $mf) cat < $mf print 'depth=' + ('../' * ( $d-1 ) ) @@ -408,7 +415,7 @@ print 'include \$(configure-srcdir)/$mf' print 'MODULE_INCLUDES += \$(src-dir)/\$(outbase)' EOF done - for mf in `cd $srcdir ; find -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do + for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do mkdir -p $(dirname $mf) cat < $mf print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make' @@ -419,7 +426,7 @@ EOF cat < GNUmakefile -depth = ./ +depth = . include config\$(if \$(conf),-\$(conf),).make include \$(configure-srcdir)/GNUmakefile.in EOF @@ -448,7 +455,6 @@ AC_DEFUN(STEPMAKE_FLEXLEXER, [ fi # check for yyFlexLexer.yy_current_buffer, # in 2.5.4 <= flex < 2.5.29 - AC_LANG_PUSH(C++) AC_CACHE_CHECK([for yyFlexLexer.yy_current_buffer], [stepmake_cv_flexlexer_yy_current_buffer], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @@ -468,7 +474,6 @@ class yy_flex_lexer: public yyFlexLexer if test $stepmake_cv_flexlexer_yy_current_buffer = yes; then AC_DEFINE(HAVE_FLEXLEXER_YY_CURRENT_BUFFER, 1, [Define to 1 if yyFlexLexer has yy_current_buffer.]) fi - AC_LANG_POP(C++) ]) @@ -507,24 +512,8 @@ AC_DEFUN(STEPMAKE_GETTEXT, [ AC_SUBST(localedir) AC_DEFINE_UNQUOTED(LOCALEDIR, ["${LOCALEDIR}"]) - # ouch. autoconf <= 2.57's gettext check fails for - # g++ >= 3.3 (with -std=gnu++98, the default). - # While the check is OK for g++ -std=c++98, - # LilyPond needs GNU g++, so who is to blame here? - # Use a workaround until this is resolved: - # for g++ >= 3.3, select C language. - GCC_UNSUPPORTED= - STEPMAKE_CHECK_VERSION_UNSUPPORTED(CXX, GCC_UNSUPPORTED, 3.3) - if test -n "$GCC_UNSUPPORTED"; then - AC_MSG_WARN([autoconf <= 2.59 with g++ >= 3.3 gettext test broken.]) - AC_MSG_WARN([Trying gcc, cross fingers.]) - AC_LANG_PUSH(C) - fi AC_CHECK_LIB(intl, gettext) AC_CHECK_FUNCS(gettext) - if test -n "$GCC_UNSUPPORTED"; then - AC_LANG_POP(C) - fi ]) @@ -639,7 +628,6 @@ AC_DEFUN(STEPMAKE_GXX, [ AC_DEFUN(STEPMAKE_INIT, [ - AC_PREREQ(2.50) . $srcdir/VERSION FULL_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL MICRO_VERSION=$PATCH_LEVEL @@ -761,8 +749,9 @@ AC_DEFUN(STEPMAKE_INIT, [ CONFIGSUFFIX= AC_ARG_ENABLE(config, - [ --enable-config=CONF put settings in config-CONF.make and config-CONF.h; - do `make conf=CONF' to get output in ./out-CONF], + [AS_HELP_STRING([--enable-config=CONF], + [put settings in config-CONF.make and config-CONF.h; + do `make conf=CONF' to get output in ./out-CONF])], [CONFIGURATION=$enableval]) ##'`# @@ -853,12 +842,14 @@ AC_DEFUN(STEPMAKE_LOCALE, [ # with/enable ?? AC_ARG_WITH(localedir, - [ --with-localedir=DIR location of locales. Default: PREFIX/share/locale ], + [AS_HELP_STRING([--with-localedir=DIR], + [location of locales. Default: PREFIX/share/locale])], localedir=$with_localedir, localedir='${prefix}/share/locale') AC_ARG_WITH(lang, - [ --with-lang=LANG use LANG as language to emit messages], + [AS_HELP_STRING([--with-lang=LANG], + [use LANG as language to emit messages])], language=$with_lang, language=English) @@ -962,30 +953,32 @@ AC_DEFUN(STEPMAKE_PYTHON, [ AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [ AC_ARG_WITH(python-include, - [ --with-python-include=DIR - location of the python include dir],[ - if test "$withval" = "yes" -o "$withval" = "no"; then - AC_MSG_WARN(Usage: --with-python-include=includedir) - else - PYTHON_CFLAGS="-I${withval}" - fi - ]) + [AS_HELP_STRING([--with-python-include=DIR], + [location of the python include dir])],[ + if test "$withval" = "yes" -o "$withval" = "no"; then + AC_MSG_WARN(Usage: --with-python-include=includedir) + else + PYTHON_CFLAGS="-I${withval}" + fi + ]) AC_ARG_WITH(python-lib, - [ --with-python-lib=NAME name of the python lib],[ - if test "$withval" = "yes" -o "$withval" = "no"; then - AC_MSG_WARN(Usage: --with-python-lib=name) - else - LDFLAGS="$LDFLAGS -l${withval}" - fi - ]) + [AS_HELP_STRING([--with-python-lib=NAME], + [name of the python lib])],[ + if test "$withval" = "yes" -o "$withval" = "no"; then + AC_MSG_WARN(Usage: --with-python-lib=name) + else + LDFLAGS="$LDFLAGS -l${withval}" + fi + ]) AC_CHECK_PROGS(PYTHON_CONFIG, python-config, no) if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then # Clean out junk: http://bugs.python.org/issue3290 # Python headers may need some -f* flags, leave them in. - PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/ -\(W\|D\|O\|m\)\(\w\|-\|=\|,\)\+//g'` + # We want the sed commands to look like 's/-[WDOm][[:alnum:][:punct:]][[:alnum:][:punct:]]*//g' and 's/-arch [^[:space:]]*//g', but automake eats brackets. + PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'` PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags` fi @@ -1012,7 +1005,6 @@ AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [ AC_DEFUN(STEPMAKE_STL_DATA_METHOD, [ - AC_LANG_PUSH(C++) AC_CACHE_CHECK([for stl.data () method], [stepmake_cv_stl_data_method], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @@ -1026,7 +1018,6 @@ void *p = v.data (); if test $stepmake_cv_stl_data_method = yes; then AC_DEFINE(HAVE_STL_DATA_METHOD, 1, [define if stl classes have data () method]) fi - AC_LANG_POP(C++) ]) @@ -1038,7 +1029,6 @@ AC_DEFUN(STEPMAKE_TEXMF_DIRS, [ AC_DEFUN(STEPMAKE_TEXMF, [ STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1) STEPMAKE_PROGS(METAPOST, mpost, $1) - # STEPMAKE_PROGS(INIMETAFONT, inimf inimfont "$METAFONT -ini", $1) AC_MSG_CHECKING(for working metafont mode) modelist='ljfour lj4 lj3 lj2 ljet laserjet' @@ -1135,28 +1125,6 @@ AC_DEFUN(STEPMAKE_FREETYPE2, [ fi ]) -AC_DEFUN(STEPMAKE_GTK2, [ - PKG_CHECK_MODULES(GTK2, $1 >= $3, have_gtk2=yes, true) - if test "$have_gtk2" = yes ; then - AC_DEFINE(HAVE_GTK2) - # Do not pollute user-CPPFLAGS with configure-CPPFLAGS - save_CPPFLAGS="$CPPFLAGS" - save_LIBS="$LIBS" - CPPFLAGS="$GTK2_CFLAGS $CPPFLAGS" - LIBS="$GTK2_LIBS $LIBS" - AC_SUBST(GTK2_CFLAGS) - AC_SUBST(GTK2_LIBS) - CPPFLAGS="$save_CPPFLAGS" - LIBS="$save_LIBS" - else - # UGR - # r="lib$1-dev or $1-devel" - r="libgtk2.0-dev or gtk2-devel" - ver="`pkg-config --modversion $1`" - STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"]) - fi -]) - AC_DEFUN(STEPMAKE_PANGO, [ PKG_CHECK_MODULES(PANGO, $1 >= $3, have_pango16=yes, true) if test "$have_pango16" = yes ; then diff --git a/autogen.sh b/autogen.sh index 2fd8bebd5a..34c022e082 100755 --- a/autogen.sh +++ b/autogen.sh @@ -18,26 +18,6 @@ if [ ! -f autogen.sh -o stepmake/autogen.sh -nt autogen.sh ]; then exec ./autogen.sh "$@" fi -# Be paranoid: check for autoconf >= 2.50 -# Some setups have both autoconf 2.13 and 2.5x available through -# a wrapper script: /usr/bin/autoconf. -# This wrapper may incorrectly autoselect autoconf 2.50, but it -# advertises itself as autoconf 2.13. -# If you have such a setup, invoke this script as: -# autoconf=autoconf2.50 ./autogen.sh -for i in autoconf2.50 autoconf-2.50 autoconf false; do - version=`$i --version 2>/dev/null | head -n 1 | awk '{print $NF}' | awk -F. '{print $1 * 100 + $2}'` - if test "0$version" -ge 250; then - autoconf=$i - break - fi -done - -if test -z "$autoconf"; then - echo "ERROR: Please install autoconf 2.50 or newer" - exit 1 -fi - for i in $srcdir/configure.in #`find $srcdir -name configure.in -print` do dir=`dirname $i` @@ -45,8 +25,11 @@ do ( cd $dir echo "Running autoconf ..." - $autoconf + autoconf || exit 1 ) + # Autoconf automatically checks its own minimum required + # version, and it aborts when the check fails. + test "$?" -eq 1 && exit 1 done #conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c diff --git a/config.hh.in b/config.hh.in index 034e123d78..3863a88d0d 100644 --- a/config.hh.in +++ b/config.hh.in @@ -19,9 +19,6 @@ /* define if you have fopencookie */ #define HAVE_FOPENCOOKIE 0 -/* define if you have funopen */ -#define HAVE_FUNOPEN 0 - /* define if you have gettext */ #define HAVE_GETTEXT 0 @@ -34,9 +31,6 @@ /* define if you have memmem */ #define HAVE_MEMMEM 0 -/* define if you have mbrtowc */ -#define HAVE_MBRTOWC 0 - /* define if you have snprintf */ #define HAVE_SNPRINTF 0 @@ -49,9 +43,6 @@ /* define if you have vsnprintf */ #define HAVE_VSNPRINTF 0 -/* define if you have wcrtomb */ -#define HAVE_WCRTOMB 0 - /* define if you have yyFlexLexer.yy_current_buffer */ #undef HAVE_FLEXLEXER_YY_CURRENT_BUFFER @@ -92,14 +83,14 @@ /* define if you have sstream */ #define HAVE_SSTREAM 0 -/* define if you have boost/lambda/lambda.hpp */ -#define HAVE_BOOST_LAMBDA_LAMBDA_HPP 0 - /* define if you have fontconfig */ #define HAVE_FONTCONFIG 0 /* define if you have pango FT2 binding */ #define HAVE_PANGO_FT2 0 -/* define if you have utf8/wchar.h */ -#define HAVE_UTF8_WCHAR_H 0 +/* define if Guile has types scm_t_hash_fold_fn and scm_t_hash_handle_fn */ +#define HAVE_GUILE_HASH_FUNC 0 + +/* define if Guile has type scm_t_subr */ +#define HAVE_GUILE_SUBR_TYPE 0 diff --git a/config.make.in b/config.make.in index 71530a30c0..93158d88f4 100644 --- a/config.make.in +++ b/config.make.in @@ -12,7 +12,6 @@ package-depth = @package_depth@ ################################################################ FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@ -GTK2_CFLAGS = @GTK2_CFLAGS@ GUILE_CFLAGS = @GUILE_CFLAGS@ PANGO_FT2_CFLAGS = @PANGO_FT2_CFLAGS@ @@ -24,7 +23,6 @@ CONFIG_CXXFLAGS = @CXXFLAGS@ $(GUILE_CFLAGS) $(FREETYPE2_CFLAGS) $(PANGO_FT2_CFL FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ GUILE_LIBS = @GUILE_LDFLAGS@ -GTK2_LIBS = @GTK2_LIBS@ FREETYPE2_LIBS = @FREETYPE2_LIBS@ PANGO_FT2_LIBS = @PANGO_FT2_LIBS@ @@ -103,12 +101,12 @@ CC = @CC@ CONFIGSUFFIX = @CONFIGSUFFIX@ CROSS = @cross_compiling@ CXX = @CXX@ +DBLATEX = @DBLATEX@ DEFINES = @DEFS@ @DEFINES@ DEFS = @DEFS@ DOCUMENTATION = @DOCUMENTATION@ -DOTEXE = @DOTEXE@ FIND = @FIND@ -FCMATCH = @FCMATCH@ +FCLIST = @FCLIST@ FLEX = @FLEX@ FLEXLEXER_FILE = @FLEXLEXER_FILE@ FONTFORGE = @FONTFORGE@ @@ -117,9 +115,6 @@ GUILE = @GUILE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ -ICFLAGS = @ICFLAGS@ -ILDFLAGS = @ILDFLAGS@ -INIMETAFONT = @INIMETAFONT@ LD = @LD@ LINK_GXX_STATICALLY = @LINK_GXX_STATICALLY@ LN = @LN@ @@ -131,6 +126,7 @@ MFMODE = @MFMODE@ MSGFMT = @MSGFMT@ PAPERSIZE=a4 PATHSEP = @PATHSEP@ +PDFLATEX = @PDFLATEX@ PERL = @PERL@ PLATFORM_WINDOWS = @PLATFORM_WINDOWS@ PYTHON = @PYTHON@ @@ -138,7 +134,6 @@ TARGET_PYTHON = @PYTHON@ RANLIB = @RANLIB@ ROOTSEP = @ROOTSEP@ SHELL = @SHELL@ -SPLITTING_MAKEINFO = @SPLITTING_MAKEINFO@ TAR = @TAR@ WINDRES = @WINDRES@ YACC = @YACC@ diff --git a/configure b/configure index 914184d1e8..9086d57d45 100755 --- a/configure +++ b/configure @@ -639,6 +639,12 @@ ac_subst_vars='VPATH LTLIBOBJS REQUIRED OPTIONAL +RSYNC +ZIPDOC +IMAGEMAGICK +NETPBM +PDFLATEX +DBLATEX TEXI2HTML MAKEINFO PERL @@ -652,15 +658,12 @@ FONTCONFIG_CFLAGS PANGO_FT2_LIBS PANGO_FT2_CFLAGS HOST_ARCH -GTK2_LIBS -GTK2_CFLAGS PKG_CONFIG LIBOBJS T1ASM FONTFORGE GHOSTSCRIPT PYTHON_CONFIG -CPP GUILE_LDFLAGS GUILE_CFLAGS GUILE_CONFIG @@ -777,7 +780,6 @@ ac_user_opts=' enable_option_checking enable_config enable_documentation -enable_gui with_ncsb_dir enable_relocation enable_rpath @@ -804,8 +806,7 @@ CXXFLAGS CCC YACC YFLAGS -CXXCPP -CPP' +CXXCPP' # Initialize some variables set by options. @@ -1430,25 +1431,24 @@ Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-config=CONF put settings in config-CONF.make and config-CONF.h; - do `make conf=CONF' to get output in ./out-CONF - --enable-documentation build Documentation. Default: on - --enable-gui compile with experimental GNOME output. Default: off - --enable-relocation compile with dynamic relocation. Default: off - --enable-rpath hardcode runtime library path. Default: off + do `make conf=CONF' to get output in ./out-CONF + --enable-documentation build Documentation. Default: on + --enable-relocation compile with dynamic relocation. Default: off + --enable-rpath hardcode runtime library path. Default: off --enable-static-gxx link libstdc++.a statically. Default: off - --enable-debugging compile with debugging info. Default: on - --enable-optimising compile with optimising. Default: on - --enable-profiling compile with gprof support. Default: off - --enable-pipe compile with -pipe. Default: on + --enable-debugging compile with debugging info. Default: on + --enable-optimising compile with optimising. Default: on + --enable-profiling compile with gprof support. Default: off + --enable-pipe compile with -pipe. Default: on Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-ncsb-dir=DIR location of Century Schoolbook fonts. - --with-localedir=DIR location of locales. Default: PREFIX/share/locale + --with-localedir=DIR location of locales. Default: PREFIX/share/locale --with-lang=LANG use LANG as language to emit messages --with-python-include=DIR - location of the python include dir + location of the python include dir --with-python-lib=NAME name of the python lib Some influential environment variables: @@ -1467,7 +1467,6 @@ Some influential environment variables: This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. CXXCPP C++ preprocessor - CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1995,7 +1994,6 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - . $srcdir/VERSION FULL_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL MICRO_VERSION=$PATCH_LEVEL @@ -2286,9 +2284,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -2431,9 +2433,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -2577,9 +2583,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -2840,9 +2850,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -3041,14 +3055,6 @@ fi -gui_b=no -# Check whether --enable-gui was given. -if test "${enable_gui+set}" = set; then - enableval=$enable_gui; gui_b=$enableval -fi - - - # Check whether --with-ncsb-dir was given. if test "${with_ncsb_dir+set}" = set; then @@ -4259,6 +4265,11 @@ fi { $as_echo "$as_me:$LINENO: result: $NCSB_SOURCE_FILES" >&5 $as_echo "$NCSB_SOURCE_FILES" >&6; } +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu @@ -4304,9 +4315,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -4434,9 +4449,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -4484,12 +4503,6 @@ $as_echo "$ver" >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -4929,9 +4942,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -5045,12 +5062,6 @@ _ACEOF fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - { $as_echo "$as_me:$LINENO: checking for stl.data () method" >&5 $as_echo_n "checking for stl.data () method... " >&6; } if test "${stepmake_cv_stl_data_method+set}" = set; then @@ -5113,12 +5124,6 @@ cat >>confdefs.h <<\_ACEOF _ACEOF fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - @@ -5223,9 +5228,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -5713,9 +5722,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -5790,9 +5803,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -5943,9 +5960,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -6762,12 +6783,6 @@ done fi # check for yyFlexLexer.yy_current_buffer, # in 2.5.4 <= flex < 2.5.29 - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - { $as_echo "$as_me:$LINENO: checking for yyFlexLexer.yy_current_buffer" >&5 $as_echo_n "checking for yyFlexLexer.yy_current_buffer... " >&6; } if test "${stepmake_cv_flexlexer_yy_current_buffer+set}" = set; then @@ -6836,12 +6851,6 @@ cat >>confdefs.h <<\_ACEOF _ACEOF fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - { $as_echo "$as_me:$LINENO: checking FlexLexer.h location" >&5 @@ -6860,12 +6869,6 @@ EOF { $as_echo "$as_me:$LINENO: result: $FLEXLEXER_FILE" >&5 $as_echo "$FLEXLEXER_FILE" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - lang=English ALL_LINGUAS="en nl" @@ -6925,90 +6928,6 @@ $as_echo "$as_me: WARNING: $language not supported; available are: $ALL_LINGUAS" #define LOCALEDIR "${LOCALEDIR}" _ACEOF - # ouch. autoconf <= 2.57's gettext check fails for - # g++ >= 3.3 (with -std=gnu++98, the default). - # While the check is OK for g++ -std=c++98, - # LilyPond needs GNU g++, so who is to blame here? - # Use a workaround until this is resolved: - # for g++ >= 3.3, select C language. - GCC_UNSUPPORTED= - - r="`eval echo '$'"CXX"`" - { $as_echo "$as_me:$LINENO: checking $r version" >&5 -$as_echo_n "checking $r version... " >&6; } - exe=` - ## which doesn't work in ash, if /usr/bin/which isn't installed - ## type -p doesn't work in ash - ## command -v doesn't work in zsh - ## command -v "$r" 2>&1 - ## this test should work in ash, bash, pdksh (ksh), zsh - type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' -` - ver=` - ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' - ## - ## ARG. - ## Workaround for broken Debian gcc version string: - ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) - ## - ## -V: Workaround for python - - #dnl - - ## Assume and hunt for dotted version multiplet. - ## use eval trickery, because we cannot use multi-level $() instead of `` - ## for compatibility reasons. - - ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" - - if test -z "$_ver"; then - ## If empty, try date [fontforge] - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ - | head -n 1 \ - | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" - fi - echo "$_ver" - #dnl -` - num=` - echo "$ver" | awk -F. ' - { - if ($3) {three = $3} - else {three = 0} - } - {printf "%.0f\n", $1*1000000 + $2*1000 + three}' -` - sup=` - echo "3.3" | awk -F. ' - { - if ($3) {three = $3} - else {three = 0} - } - {printf "%.0f\n", $1*1000000 + $2*1000 + three}' -` - { $as_echo "$as_me:$LINENO: result: $ver" >&5 -$as_echo "$ver" >&6; } - if test "$num" -ge "$sup"; then - - eval "GCC_UNSUPPORTED"=\"`eval echo \"'$'GCC_UNSUPPORTED\" \""$r < 3.3 (installed: $ver)"\"`\" - - fi - - if test -n "$GCC_UNSUPPORTED"; then - { $as_echo "$as_me:$LINENO: WARNING: autoconf <= 2.59 with g++ >= 3.3 gettext test broken." >&5 -$as_echo "$as_me: WARNING: autoconf <= 2.59 with g++ >= 3.3 gettext test broken." >&2;} - { $as_echo "$as_me:$LINENO: WARNING: Trying gcc, cross fingers." >&5 -$as_echo "$as_me: WARNING: Trying gcc, cross fingers." >&2;} - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - fi { $as_echo "$as_me:$LINENO: checking for gettext in -lintl" >&5 $as_echo_n "checking for gettext in -lintl... " >&6; } @@ -7054,7 +6973,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -7153,7 +7072,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -7185,14 +7104,6 @@ _ACEOF fi done - if test -n "$GCC_UNSUPPORTED"; then - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - fi @@ -7297,9 +7208,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -7444,9 +7359,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -7589,9 +7508,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -7632,7 +7555,6 @@ $as_echo "$ver" >&6; } fi - # STEPMAKE_PROGS(INIMETAFONT, inimf inimfont "$METAFONT -ini", REQUIRED) { $as_echo "$as_me:$LINENO: checking for working metafont mode" >&5 $as_echo_n "checking for working metafont mode... " >&6; } @@ -7754,9 +7676,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -7799,291 +7725,52 @@ $as_echo "$ver" >&6; } -## should check for 1.8.2 ? -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ## First, let's just see if we can find Guile at all. + test -n "$target_alias" && target_guile_config=$target_alias-guile-config + test -n "$host_alias" && host_guile_config=$host_alias-guile-config + { $as_echo "$as_me:$LINENO: checking for guile-config" >&5 +$as_echo_n "checking for guile-config... " >&6; } + for guile_config in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config; do + { $as_echo "$as_me:$LINENO: result: $guile_config" >&5 +$as_echo "$guile_config" >&6; } + if ! $guile_config --version > /dev/null 2>&1 ; then + { $as_echo "$as_me:$LINENO: WARNING: cannot execute $guile_config" >&5 +$as_echo "$as_me: WARNING: cannot execute $guile_config" >&2;} + { $as_echo "$as_me:$LINENO: checking if we are cross compiling" >&5 +$as_echo_n "checking if we are cross compiling... " >&6; } + GUILE_CONFIG='echo no guile-config' + else + GUILE_CONFIG=$guile_config + break + fi + done - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext + r="`eval echo '$'"GUILE_CONFIG"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GUILE_CONFIG"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test $? -ne 0; then - # Passes both tests. -ac_preproc_ok=: -break -fi + eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$guile_config\"`\" -rm -f conftest.err conftest.$ac_ext + if test "REQUIRED" = "REQUIRED"; then + command="echo ERROR: $guile_config not found" + # abort configure process here? + else + command="- echo $guile_config not found" + fi + eval "GUILE_CONFIG"='$command' + false + else + true + fi -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - ## First, let's just see if we can find Guile at all. - test -n "$target_alias" && target_guile_config=$target_alias-guile-config - test -n "$host_alias" && host_guile_config=$host_alias-guile-config - { $as_echo "$as_me:$LINENO: checking for guile-config" >&5 -$as_echo_n "checking for guile-config... " >&6; } - for guile_config in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config; do - { $as_echo "$as_me:$LINENO: result: $guile_config" >&5 -$as_echo "$guile_config" >&6; } - if ! $guile_config --version > /dev/null 2>&1 ; then - { $as_echo "$as_me:$LINENO: WARNING: cannot execute $guile_config" >&5 -$as_echo "$as_me: WARNING: cannot execute $guile_config" >&2;} - { $as_echo "$as_me:$LINENO: checking if we are cross compiling" >&5 -$as_echo_n "checking if we are cross compiling... " >&6; } - GUILE_CONFIG='echo no guile-config' - else - GUILE_CONFIG=$guile_config - break - fi - done - - - r="`eval echo '$'"GUILE_CONFIG"`" - if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GUILE_CONFIG"`' : '.*\(echo\)' > /dev/null; then - true - else - ##STEPMAKE_WARN(cannot find . ) - false - fi - - if test $? -ne 0; then - - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$guile_config\"`\" - - if test "REQUIRED" = "REQUIRED"; then - command="echo ERROR: $guile_config not found" - # abort configure process here? - else - command="- echo $guile_config not found" - fi - eval "GUILE_CONFIG"='$command' - false - else - true - fi - - if test $? -ne 0; then + if test $? -ne 0; then eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"'guile-config (guile-devel, guile-dev or libguile-dev package)'\"`\" @@ -8099,7 +7786,7 @@ $as_echo_n "checking if we are cross compiling... " >&6; } fi # urg. should test functionality rather than version. - if test $? -eq 0 -a -n "1.8.0"; then + if test $? -eq 0 -a -n "1.8.2"; then r="`eval echo '$'"GUILE_CONFIG"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 @@ -8131,9 +7818,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -8154,7 +7845,7 @@ $as_echo_n "checking $r version... " >&6; } {printf "%.0f\n", $1*1000000 + $2*1000 + three}' ` req=` - echo "1.8.0" | awk -F. ' + echo "1.8.2" | awk -F. ' { if ($3) {three = $3} else {three = 0} @@ -8165,7 +7856,7 @@ $as_echo_n "checking $r version... " >&6; } $as_echo "$ver" >&6; } if test "$num" -lt "$req"; then - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 1.8.0 (installed: $ver)"\"`\" + eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 1.8.2 (installed: $ver)"\"`\" fi vervar="`echo GUILE_CONFIG | tr 'a-z' 'A-Z'`_VERSION" @@ -8252,7 +7943,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes @@ -8292,7 +7983,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes @@ -8308,7 +7999,7 @@ rm -f conftest.err conftest.$ac_ext $as_echo "$ac_header_preproc" >&6; } # So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} @@ -8401,7 +8092,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -8500,7 +8191,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -8557,12 +8248,15 @@ _ACEOF - -## check rational bugfix. -save_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS" -{ $as_echo "$as_me:$LINENO: checking GUILE rational bugfix" >&5 -$as_echo_n "checking GUILE rational bugfix... " >&6; } +# check for 3 typedefs added in Guile 1.9 +save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$GUILE_CFLAGS $CXXFLAGS" +{ $as_echo "$as_me:$LINENO: checking for scm_t_hash_fold_fn" >&5 +$as_echo_n "checking for scm_t_hash_fold_fn... " >&6; } +if test "${ac_cv_type_scm_t_hash_fold_fn+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_scm_t_hash_fold_fn=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -8570,160 +8264,230 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include -#ifdef SCM_FRACTION_REDUCED_BIT -#error -#endif +int +main () +{ +if (sizeof (scm_t_hash_fold_fn)) + return 0; + ; + return 0; +} _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - }; then - { $as_echo "$as_me:$LINENO: result: ok" >&5 -$as_echo "ok" >&6; } + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +if (sizeof ((scm_t_hash_fold_fn))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - REQUIRED="$REQUIRED GUILE-with-rational-bugfix" -{ $as_echo "$as_me:$LINENO: result: Must have patched GUILE rational support. See INSTALL.txt" >&5 -$as_echo "Must have patched GUILE rational support. See INSTALL.txt" >&6; } + ac_cv_type_scm_t_hash_fold_fn=yes fi -rm -f conftest.err conftest.$ac_ext -CPPFLAGS="$save_CPPFLAGS" - - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Check whether --with-python-include was given. -if test "${with_python_include+set}" = set; then - withval=$with_python_include; - if test "$withval" = "yes" -o "$withval" = "no"; then - { $as_echo "$as_me:$LINENO: WARNING: Usage: --with-python-include=includedir" >&5 -$as_echo "$as_me: WARNING: Usage: --with-python-include=includedir" >&2;} - else - PYTHON_CFLAGS="-I${withval}" - fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_scm_t_hash_fold_fn" >&5 +$as_echo "$ac_cv_type_scm_t_hash_fold_fn" >&6; } +if test "x$ac_cv_type_scm_t_hash_fold_fn" = x""yes; then +cat >>confdefs.h <<_ACEOF +#define HAVE_SCM_T_HASH_FOLD_FN 1 +_ACEOF - -# Check whether --with-python-lib was given. -if test "${with_python_lib+set}" = set; then - withval=$with_python_lib; - if test "$withval" = "yes" -o "$withval" = "no"; then - { $as_echo "$as_me:$LINENO: WARNING: Usage: --with-python-lib=name" >&5 -$as_echo "$as_me: WARNING: Usage: --with-python-lib=name" >&2;} - else - LDFLAGS="$LDFLAGS -l${withval}" - fi +cat >>confdefs.h <<\_ACEOF +#define HAVE_GUILE_HASH_FUNC 1 +_ACEOF fi - - - for ac_prog in python-config -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PYTHON_CONFIG+set}" = set; then +{ $as_echo "$as_me:$LINENO: checking for scm_t_hash_handle_fn" >&5 +$as_echo_n "checking for scm_t_hash_handle_fn... " >&6; } +if test "${ac_cv_type_scm_t_hash_handle_fn+set}" = set; then $as_echo_n "(cached) " >&6 else - if test -n "$PYTHON_CONFIG"; then - ac_cv_prog_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test. + ac_cv_type_scm_t_hash_handle_fn=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +if (sizeof (scm_t_hash_handle_fn)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +if (sizeof ((scm_t_hash_handle_fn))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PYTHON_CONFIG="$ac_prog" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_scm_t_hash_handle_fn=yes fi -fi -PYTHON_CONFIG=$ac_cv_prog_PYTHON_CONFIG -if test -n "$PYTHON_CONFIG"; then - { $as_echo "$as_me:$LINENO: result: $PYTHON_CONFIG" >&5 -$as_echo "$PYTHON_CONFIG" >&6; } + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - { $as_echo "$as_me:$LINENO: result: no" >&5 -$as_echo "no" >&6; } -fi + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - test -n "$PYTHON_CONFIG" && break -done -test -n "$PYTHON_CONFIG" || PYTHON_CONFIG="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_scm_t_hash_handle_fn" >&5 +$as_echo "$ac_cv_type_scm_t_hash_handle_fn" >&6; } +if test "x$ac_cv_type_scm_t_hash_handle_fn" = x""yes; then - if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then - # Clean out junk: http://bugs.python.org/issue3290 - # Python headers may need some -f* flags, leave them in. - PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/ -\(W\|D\|O\|m\)\(\w\|-\|=\|,\)\+//g'` - PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags` - fi +cat >>confdefs.h <<_ACEOF +#define HAVE_SCM_T_HASH_HANDLE_FN 1 +_ACEOF - if test -z "$PYTHON_CFLAGS" -a "$cross_compiling" = "no"; then - #dnl - # alternatively, for python >= 2.0 - # 'import sys, distutils.sysconfig; sys.stdout.write (distutils.sysconfig.get_python_inc ())' - PYTHON_INCLUDE=`$PYTHON -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'` - PYTHON_CFLAGS="-I$PYTHON_INCLUDE" - #dnl - fi +cat >>confdefs.h <<\_ACEOF +#define HAVE_GUILE_HASH_FUNC 1 +_ACEOF - if test -z "$PYTHON_HEADER"; then - CPPFLAGS="$PYTHON_CFLAGS $CPPFLAGS" +fi -for ac_header in Python.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then +{ $as_echo "$as_me:$LINENO: checking for scm_t_subr" >&5 +$as_echo_n "checking for scm_t_subr... " >&6; } +if test "${ac_cv_type_scm_t_subr+set}" = set; then $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } + ac_cv_type_scm_t_subr=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> +#include + +int +main () +{ +if (sizeof (scm_t_subr)) + return 0; + ; + return 0; +} _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -8740,31 +8504,94 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +if (sizeof ((scm_t_subr))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no + ac_cv_type_scm_t_subr=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_scm_t_subr" >&5 +$as_echo "$ac_cv_type_scm_t_subr" >&6; } +if test "x$ac_cv_type_scm_t_subr" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_SCM_T_SUBR 1 +_ACEOF + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GUILE_SUBR_TYPE 1 +_ACEOF + +fi + +CXXFLAGS="$save_CXXFLAGS" + +## check rational bugfix. +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS" +{ $as_echo "$as_me:$LINENO: checking GUILE rational bugfix" >&5 +$as_echo_n "checking GUILE rational bugfix... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include <$ac_header> +#include +#ifdef SCM_FRACTION_REDUCED_BIT +#error +#endif + _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in @@ -8780,36 +8607,228 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then - ac_header_preproc=yes + { $as_echo "$as_me:$LINENO: result: ok" >&5 +$as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no + REQUIRED="$REQUIRED GUILE-with-rational-bugfix" +{ $as_echo "$as_me:$LINENO: result: Must have patched GUILE rational support. See INSTALL.txt" >&5 +$as_echo "Must have patched GUILE rational support. See INSTALL.txt" >&6; } fi rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } +CPPFLAGS="$save_CPPFLAGS" -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 + + + +# Check whether --with-python-include was given. +if test "${with_python_include+set}" = set; then + withval=$with_python_include; + if test "$withval" = "yes" -o "$withval" = "no"; then + { $as_echo "$as_me:$LINENO: WARNING: Usage: --with-python-include=includedir" >&5 +$as_echo "$as_me: WARNING: Usage: --with-python-include=includedir" >&2;} + else + PYTHON_CFLAGS="-I${withval}" + fi + +fi + + + +# Check whether --with-python-lib was given. +if test "${with_python_lib+set}" = set; then + withval=$with_python_lib; + if test "$withval" = "yes" -o "$withval" = "no"; then + { $as_echo "$as_me:$LINENO: WARNING: Usage: --with-python-lib=name" >&5 +$as_echo "$as_me: WARNING: Usage: --with-python-lib=name" >&2;} + else + LDFLAGS="$LDFLAGS -l${withval}" + fi + +fi + + + for ac_prog in python-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PYTHON_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_CONFIG"; then + ac_cv_prog_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PYTHON_CONFIG="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +PYTHON_CONFIG=$ac_cv_prog_PYTHON_CONFIG +if test -n "$PYTHON_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $PYTHON_CONFIG" >&5 +$as_echo "$PYTHON_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON_CONFIG" && break +done +test -n "$PYTHON_CONFIG" || PYTHON_CONFIG="no" + + + if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then + # Clean out junk: http://bugs.python.org/issue3290 + # Python headers may need some -f* flags, leave them in. + # We want the sed commands to look like 's/-[WDOm][[:alnum:][:punct:]][[:alnum:][:punct:]]*//g' and 's/-arch [^[:space:]]*//g', but automake eats brackets. + PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/-[WDOm][[:alnum:][:punct:]][[:alnum:][:punct:]]*//g' | sed -e 's/-arch [^[:space:]]*//g'` + PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags` + fi + + if test -z "$PYTHON_CFLAGS" -a "$cross_compiling" = "no"; then + #dnl + # alternatively, for python >= 2.0 + # 'import sys, distutils.sysconfig; sys.stdout.write (distutils.sysconfig.get_python_inc ())' + PYTHON_INCLUDE=`$PYTHON -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'` + PYTHON_CFLAGS="-I$PYTHON_INCLUDE" + #dnl + fi + + if test -z "$PYTHON_HEADER"; then + CPPFLAGS="$PYTHON_CFLAGS $CPPFLAGS" + +for ac_header in Python.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} @@ -8965,7 +8984,7 @@ $as_echo "no" >&6; } fi - if test -n "8.15"; then + if test -n "8.60"; then r="`eval echo '$'"GHOSTSCRIPT"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 @@ -8997,9 +9016,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -9020,7 +9043,7 @@ $as_echo_n "checking $r version... " >&6; } {printf "%.0f\n", $1*1000000 + $2*1000 + three}' ` req=` - echo "8.15" | awk -F. ' + echo "8.60" | awk -F. ' { if ($3) {three = $3} else {three = 0} @@ -9031,7 +9054,7 @@ $as_echo_n "checking $r version... " >&6; } $as_echo "$ver" >&6; } if test "$num" -lt "$req"; then - eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 8.15 (installed: $ver)"\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 8.60 (installed: $ver)"\"`\" fi vervar="`echo GHOSTSCRIPT | tr 'a-z' 'A-Z'`_VERSION" @@ -9153,7 +9176,7 @@ $as_echo "no" >&6; } fi - if test -n "20050624"; then + if test -n "20100501"; then r="`eval echo '$'"FONTFORGE"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 @@ -9185,9 +9208,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -9208,7 +9235,7 @@ $as_echo_n "checking $r version... " >&6; } {printf "%.0f\n", $1*1000000 + $2*1000 + three}' ` req=` - echo "20050624" | awk -F. ' + echo "20100501" | awk -F. ' { if ($3) {three = $3} else {three = 0} @@ -9219,7 +9246,7 @@ $as_echo_n "checking $r version... " >&6; } $as_echo "$ver" >&6; } if test "$num" -lt "$req"; then - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 20050624 (installed: $ver)"\"`\" + eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 20100501 (installed: $ver)"\"`\" fi vervar="`echo FONTFORGE | tr 'a-z' 'A-Z'`_VERSION" @@ -9230,18 +9257,17 @@ $as_echo "$ver" >&6; } fi - - for ac_prog in t1asm + for ac_prog in fontforge do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_T1ASM+set}" = set; then +if test "${ac_cv_prog_FONTFORGE+set}" = set; then $as_echo_n "(cached) " >&6 else - if test -n "$T1ASM"; then - ac_cv_prog_T1ASM="$T1ASM" # Let the user override the test. + if test -n "$FONTFORGE"; then + ac_cv_prog_FONTFORGE="$FONTFORGE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -9250,7 +9276,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_T1ASM="$ac_prog" + ac_cv_prog_FONTFORGE="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -9260,24 +9286,24 @@ IFS=$as_save_IFS fi fi -T1ASM=$ac_cv_prog_T1ASM -if test -n "$T1ASM"; then - { $as_echo "$as_me:$LINENO: result: $T1ASM" >&5 -$as_echo "$T1ASM" >&6; } +FONTFORGE=$ac_cv_prog_FONTFORGE +if test -n "$FONTFORGE"; then + { $as_echo "$as_me:$LINENO: result: $FONTFORGE" >&5 +$as_echo "$FONTFORGE" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$T1ASM" && break + test -n "$FONTFORGE" && break done -test -n "$T1ASM" || T1ASM="no" +test -n "$FONTFORGE" || FONTFORGE="no" - r="`eval echo '$'"T1ASM"`" - if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"T1ASM"`' : '.*\(echo\)' > /dev/null; then + r="`eval echo '$'"FONTFORGE"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"FONTFORGE"`' : '.*\(echo\)' > /dev/null; then true else ##STEPMAKE_WARN(cannot find . ) @@ -9286,31 +9312,31 @@ test -n "$T1ASM" || T1ASM="no" if test $? -ne 0; then - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"t1asm\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"fontforge\"`\" - if test "REQUIRED" = "REQUIRED"; then - command="echo ERROR: t1asm not found" + if test "OPTIONAL" = "REQUIRED"; then + command="echo ERROR: fontforge not found" # abort configure process here? else - command="- echo t1asm not found" + command="- echo fontforge not found" fi - eval "T1ASM"='$command' + eval "FONTFORGE"='$command' false else true fi if test $? -eq 0; then - # Extract the first word of "t1asm", so it can be a program name with args. -set dummy t1asm; ac_word=$2 + # Extract the first word of "fontforge", so it can be a program name with args. +set dummy fontforge; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_T1ASM+set}" = set; then +if test "${ac_cv_path_FONTFORGE+set}" = set; then $as_echo_n "(cached) " >&6 else - case $T1ASM in + case $FONTFORGE in [\\/]* | ?:[\\/]*) - ac_cv_path_T1ASM="$T1ASM" # Let the user override the test with a path. + ac_cv_path_FONTFORGE="$FONTFORGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9320,7 +9346,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_T1ASM="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_FONTFORGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -9331,19 +9357,19 @@ IFS=$as_save_IFS ;; esac fi -T1ASM=$ac_cv_path_T1ASM -if test -n "$T1ASM"; then - { $as_echo "$as_me:$LINENO: result: $T1ASM" >&5 -$as_echo "$T1ASM" >&6; } +FONTFORGE=$ac_cv_path_FONTFORGE +if test -n "$FONTFORGE"; then + { $as_echo "$as_me:$LINENO: result: $FONTFORGE" >&5 +$as_echo "$FONTFORGE" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi - if test -n ""; then + if test -n "20110222"; then - r="`eval echo '$'"T1ASM"`" + r="`eval echo '$'"FONTFORGE"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 $as_echo_n "checking $r version... " >&6; } exe=` @@ -9373,9 +9399,205 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" + + if test -z "$_ver"; then + ## If empty, try date [fontforge] + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + | head -n 1 \ + | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" + fi + echo "$_ver" + #dnl +` + fi + num=` + echo "$ver" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + req=` + echo "20110222" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + { $as_echo "$as_me:$LINENO: result: $ver" >&5 +$as_echo "$ver" >&6; } + if test "$num" -lt "$req"; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 20110222 (installed: $ver)"\"`\" + + fi + vervar="`echo FONTFORGE | tr 'a-z' 'A-Z'`_VERSION" + eval `echo $vervar=$num` +## AC_SUBST(`eval echo $vervar`) + + fi + fi + + + + for ac_prog in t1asm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_T1ASM+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$T1ASM"; then + ac_cv_prog_T1ASM="$T1ASM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_T1ASM="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +T1ASM=$ac_cv_prog_T1ASM +if test -n "$T1ASM"; then + { $as_echo "$as_me:$LINENO: result: $T1ASM" >&5 +$as_echo "$T1ASM" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$T1ASM" && break +done +test -n "$T1ASM" || T1ASM="no" + + + + r="`eval echo '$'"T1ASM"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"T1ASM"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi + + if test $? -ne 0; then + + eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"t1asm\"`\" + + if test "REQUIRED" = "REQUIRED"; then + command="echo ERROR: t1asm not found" + # abort configure process here? + else + command="- echo t1asm not found" + fi + eval "T1ASM"='$command' + false + else + true + fi + + if test $? -eq 0; then + # Extract the first word of "t1asm", so it can be a program name with args. +set dummy t1asm; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_T1ASM+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $T1ASM in + [\\/]* | ?:[\\/]*) + ac_cv_path_T1ASM="$T1ASM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_T1ASM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +T1ASM=$ac_cv_path_T1ASM +if test -n "$T1ASM"; then + { $as_echo "$as_me:$LINENO: result: $T1ASM" >&5 +$as_echo "$T1ASM" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test -n ""; then + + r="`eval echo '$'"T1ASM"`" + { $as_echo "$as_me:$LINENO: checking $r version" >&5 +$as_echo_n "checking $r version... " >&6; } + exe=` + ## which doesn't work in ash, if /usr/bin/which isn't installed + ## type -p doesn't work in ash + ## command -v doesn't work in zsh + ## command -v "$r" 2>&1 + ## this test should work in ash, bash, pdksh (ksh), zsh + type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' +` + if test -n ""; then + ver="" + else + ver=` + ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' + ## + ## ARG. + ## Workaround for broken Debian gcc version string: + ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) + ## + ## -V: Workaround for python + + #dnl + + ## Assume and hunt for dotted version multiplet. + ## use eval trickery, because we cannot use multi-level $() instead of `` + ## for compatibility reasons. + + ## grab the first version number in --version output. + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -9466,7 +9688,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes @@ -9506,7 +9728,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes @@ -9522,7 +9744,7 @@ rm -f conftest.err conftest.$ac_ext $as_echo "$ac_header_preproc" >&6; } # So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} @@ -9570,15 +9792,8 @@ fi done -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -for ac_header in sstream boost/lambda/lambda.hpp +for ac_header in sstream do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then @@ -9723,12 +9938,6 @@ fi done -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5 $as_echo_n "checking whether stat file-mode macros are broken... " >&6; } if test "${ac_cv_header_stat_broken+set}" = set; then @@ -9775,7 +9984,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stat_broken=no @@ -9960,7 +10169,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -10054,7 +10263,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -10093,10 +10302,7 @@ done - - - -for ac_func in chroot fopencookie funopen gettext isinf mbrtowc memmem snprintf vsnprintf wcrtomb +for ac_func in chroot fopencookie gettext isinf memmem snprintf vsnprintf do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 @@ -10164,7 +10370,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -10197,273 +10403,40 @@ fi done -for ac_header in utf8/wchar.h + + for ac_prog in pkg-config do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then $as_echo_n "(cached) " >&6 +else + if test -n "$PKG_CONFIG"; then + ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PKG_CONFIG="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - LIBS="$LIBS -lutf8" -fi - -done - -{ $as_echo "$as_me:$LINENO: checking for library containing mbrtowc" >&5 -$as_echo_n "checking for library containing mbrtowc... " >&6; } -if test "${ac_cv_search_mbrtowc+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mbrtowc (); -int -main () -{ -return mbrtowc (); - ; - return 0; -} -_ACEOF -for ac_lib in '' mingwex msvcp60; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then - ac_cv_search_mbrtowc=$ac_res -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_mbrtowc+set}" = set; then - break -fi -done -if test "${ac_cv_search_mbrtowc+set}" = set; then - : -else - ac_cv_search_mbrtowc=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_mbrtowc" >&5 -$as_echo "$ac_cv_search_mbrtowc" >&6; } -ac_res=$ac_cv_search_mbrtowc -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - - - - for ac_prog in pkg-config -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then - $as_echo_n "(cached) " >&6 -else - if test -n "$PKG_CONFIG"; then - ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PKG_CONFIG="$ac_prog" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -PKG_CONFIG=$ac_cv_prog_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } +fi +PKG_CONFIG=$ac_cv_prog_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } @@ -10532,9 +10505,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -10576,7 +10553,30 @@ $as_echo "$ver" >&6; } fi -if test "$gui_b" = "yes"; then +{ $as_echo "$as_me:$LINENO: checking whether to enable dynamic relocation" >&5 +$as_echo_n "checking whether to enable dynamic relocation... " >&6; } +if test "$reloc_b" = "yes"; then + cat >>confdefs.h <<\_ACEOF +#define ARGV0_RELOCATION 1 +_ACEOF + +fi +{ $as_echo "$as_me:$LINENO: result: $reloc_b" >&5 +$as_echo "$reloc_b" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for rpath linkage" >&5 +$as_echo_n "checking for rpath linkage... " >&6; } +if test "$rpath_b" = "yes"; then + LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,\\\$\$ORIGIN/../lib" +elif test "$rpath_b" != "no"; then + LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,$rpath_b" +fi +{ $as_echo "$as_me:$LINENO: result: $rpath_b" >&5 +$as_echo "$rpath_b" >&6; } + +HOST_ARCH=`$CC -dumpmachine` + + succeeded=no @@ -10633,155 +10633,10 @@ fi else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - { $as_echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.4.0" >&5 -$as_echo_n "checking for gtk+-2.0 >= 2.4.0... " >&6; } + { $as_echo "$as_me:$LINENO: checking for pangoft2 >= 1.6.0" >&5 +$as_echo_n "checking for pangoft2 >= 1.6.0... " >&6; } - if $PKG_CONFIG --exists "gtk+-2.0 >= 2.4.0" ; then - { $as_echo "$as_me:$LINENO: result: yes" >&5 -$as_echo "yes" >&6; } - succeeded=yes - - { $as_echo "$as_me:$LINENO: checking GTK2_CFLAGS" >&5 -$as_echo_n "checking GTK2_CFLAGS... " >&6; } - GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.4.0"` - { $as_echo "$as_me:$LINENO: result: $GTK2_CFLAGS" >&5 -$as_echo "$GTK2_CFLAGS" >&6; } - - { $as_echo "$as_me:$LINENO: checking GTK2_LIBS" >&5 -$as_echo_n "checking GTK2_LIBS... " >&6; } - GTK2_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.4.0"` - { $as_echo "$as_me:$LINENO: result: $GTK2_LIBS" >&5 -$as_echo "$GTK2_LIBS" >&6; } - else - GTK2_CFLAGS="" - GTK2_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. - GTK2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.4.0"` - - fi - - - - fi - fi - - if test $succeeded = yes; then - have_gtk2=yes - else - true - fi - - if test "$have_gtk2" = yes ; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_GTK2 1 -_ACEOF - - # Do not pollute user-CPPFLAGS with configure-CPPFLAGS - save_CPPFLAGS="$CPPFLAGS" - save_LIBS="$LIBS" - CPPFLAGS="$GTK2_CFLAGS $CPPFLAGS" - LIBS="$GTK2_LIBS $LIBS" - - - CPPFLAGS="$save_CPPFLAGS" - LIBS="$save_LIBS" - else - # UGR - # r="libgtk+-2.0-dev or gtk+-2.0-devel" - r="libgtk2.0-dev or gtk2-devel" - ver="`pkg-config --modversion gtk+-2.0`" - - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 2.4.0 (installed: $ver)"\"`\" - - fi - -fi - -{ $as_echo "$as_me:$LINENO: checking whether to enable dynamic relocation" >&5 -$as_echo_n "checking whether to enable dynamic relocation... " >&6; } -if test "$reloc_b" = "yes"; then - cat >>confdefs.h <<\_ACEOF -#define ARGV0_RELOCATION 1 -_ACEOF - -fi -{ $as_echo "$as_me:$LINENO: result: $reloc_b" >&5 -$as_echo "$reloc_b" >&6; } - -{ $as_echo "$as_me:$LINENO: checking for rpath linkage" >&5 -$as_echo_n "checking for rpath linkage... " >&6; } -if test "$rpath_b" = "yes"; then - LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,\\\$\$ORIGIN/../lib" -elif test "$rpath_b" != "no"; then - LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,$rpath_b" -fi -{ $as_echo "$as_me:$LINENO: result: $rpath_b" >&5 -$as_echo "$rpath_b" >&6; } - -HOST_ARCH=`$CC -dumpmachine` - - - - - succeeded=no - - if test -z "$PKG_CONFIG"; then - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:$LINENO: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi - - if test "$PKG_CONFIG" = "no" ; then - echo "*** The pkg-config script could not be found. Make sure it is" - echo "*** in your path, or set the PKG_CONFIG environment variable" - echo "*** to the full path to pkg-config." - echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." - else - PKG_CONFIG_MIN_VERSION=0.9.0 - if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - { $as_echo "$as_me:$LINENO: checking for pangoft2 >= 1.6.0" >&5 -$as_echo_n "checking for pangoft2 >= 1.6.0... " >&6; } - - if $PKG_CONFIG --exists "pangoft2 >= 1.6.0" ; then + if $PKG_CONFIG --exists "pangoft2 >= 1.6.0" ; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes @@ -10873,7 +10728,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes @@ -10913,7 +10768,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes @@ -10929,7 +10784,7 @@ rm -f conftest.err conftest.$ac_ext $as_echo "$ac_header_preproc" >&6; } # So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} @@ -11046,7 +10901,7 @@ $as_echo "$ac_try_echo") >&5 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || @@ -11092,7 +10947,6 @@ done fi -#STEPMAKE_PANGO(pango, REQUIRED, 1.6.0) succeeded=no @@ -11149,23 +11003,23 @@ fi else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - { $as_echo "$as_me:$LINENO: checking for fontconfig >= 2.2.0" >&5 -$as_echo_n "checking for fontconfig >= 2.2.0... " >&6; } + { $as_echo "$as_me:$LINENO: checking for fontconfig >= 2.4.0" >&5 +$as_echo_n "checking for fontconfig >= 2.4.0... " >&6; } - if $PKG_CONFIG --exists "fontconfig >= 2.2.0" ; then + if $PKG_CONFIG --exists "fontconfig >= 2.4.0" ; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes { $as_echo "$as_me:$LINENO: checking FONTCONFIG_CFLAGS" >&5 $as_echo_n "checking FONTCONFIG_CFLAGS... " >&6; } - FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig >= 2.2.0"` + FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig >= 2.4.0"` { $as_echo "$as_me:$LINENO: result: $FONTCONFIG_CFLAGS" >&5 $as_echo "$FONTCONFIG_CFLAGS" >&6; } { $as_echo "$as_me:$LINENO: checking FONTCONFIG_LIBS" >&5 $as_echo_n "checking FONTCONFIG_LIBS... " >&6; } - FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig >= 2.2.0"` + FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig >= 2.4.0"` { $as_echo "$as_me:$LINENO: result: $FONTCONFIG_LIBS" >&5 $as_echo "$FONTCONFIG_LIBS" >&6; } else @@ -11173,7 +11027,7 @@ $as_echo "$FONTCONFIG_LIBS" >&6; } FONTCONFIG_LIBS="" ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. - FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fontconfig >= 2.2.0"` + FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fontconfig >= 2.4.0"` fi @@ -11206,7 +11060,7 @@ _ACEOF r="libfontconfig-dev or fontconfig-devel" ver="`pkg-config --modversion fontconfig`" - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 2.2.0 (installed: $ver)"\"`\" + eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 2.4.0 (installed: $ver)"\"`\" fi @@ -11441,28 +11295,1019 @@ _ACEOF - { $as_echo "$as_me:$LINENO: checking for some flavor of Windows" >&5 -$as_echo_n "checking for some flavor of Windows... " >&6; } - if test "$CYGWIN$MINGW32" = "nono"; then - PLATFORM_WINDOWS=no - else - PLATFORM_WINDOWS=yes + { $as_echo "$as_me:$LINENO: checking for some flavor of Windows" >&5 +$as_echo_n "checking for some flavor of Windows... " >&6; } + if test "$CYGWIN$MINGW32" = "nono"; then + PLATFORM_WINDOWS=no + else + PLATFORM_WINDOWS=yes + fi + { $as_echo "$as_me:$LINENO: result: $PLATFORM_WINDOWS" >&5 +$as_echo "$PLATFORM_WINDOWS" >&6; } + + + for ac_prog in $target-windres windres +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$WINDRES"; then + ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WINDRES="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +WINDRES=$ac_cv_prog_WINDRES +if test -n "$WINDRES"; then + { $as_echo "$as_me:$LINENO: result: $WINDRES" >&5 +$as_echo "$WINDRES" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$WINDRES" && break +done +test -n "$WINDRES" || WINDRES="no" + + + + r="`eval echo '$'"WINDRES"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"WINDRES"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi + + if test $? -ne 0; then + + eval "x"=\"`eval echo \"'$'x\" \"$target-windres windres\"`\" + + if test "x" = "REQUIRED"; then + command="echo ERROR: $target-windres windres not found" + # abort configure process here? + else + command="- echo $target-windres windres not found" + fi + eval "WINDRES"='$command' + false + else + true + fi + + if test $? -eq 0 -a -n ""; then + + r="`eval echo '$'"WINDRES"`" + { $as_echo "$as_me:$LINENO: checking $r version" >&5 +$as_echo_n "checking $r version... " >&6; } + exe=` + ## which doesn't work in ash, if /usr/bin/which isn't installed + ## type -p doesn't work in ash + ## command -v doesn't work in zsh + ## command -v "$r" 2>&1 + ## this test should work in ash, bash, pdksh (ksh), zsh + type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' +` + if test -n ""; then + ver="" + else + ver=` + ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' + ## + ## ARG. + ## Workaround for broken Debian gcc version string: + ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) + ## + ## -V: Workaround for python + + #dnl + + ## Assume and hunt for dotted version multiplet. + ## use eval trickery, because we cannot use multi-level $() instead of `` + ## for compatibility reasons. + + ## grab the first version number in --version output. + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" + + if test -z "$_ver"; then + ## If empty, try date [fontforge] + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + | head -n 1 \ + | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" + fi + echo "$_ver" + #dnl +` + fi + num=` + echo "$ver" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + req=` + echo "" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + { $as_echo "$as_me:$LINENO: result: $ver" >&5 +$as_echo "$ver" >&6; } + if test "$num" -lt "$req"; then + + eval "x"=\"`eval echo \"'$'x\" \""$r >= (installed: $ver)"\"`\" + + fi + vervar="`echo WINDRES | tr 'a-z' 'A-Z'`_VERSION" + eval `echo $vervar=$num` +## AC_SUBST(`eval echo $vervar`) + + fi + + + + +## Optional tools for building documentation, website, extra fonts. + +# guile executable for some scripts + + + for ac_prog in guile +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GUILE+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$GUILE"; then + ac_cv_prog_GUILE="$GUILE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_GUILE="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +GUILE=$ac_cv_prog_GUILE +if test -n "$GUILE"; then + { $as_echo "$as_me:$LINENO: result: $GUILE" >&5 +$as_echo "$GUILE" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GUILE" && break +done +test -n "$GUILE" || GUILE="no" + + + + r="`eval echo '$'"GUILE"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GUILE"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi + + if test $? -ne 0; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"guile\"`\" + + if test "OPTIONAL" = "REQUIRED"; then + command="echo ERROR: guile not found" + # abort configure process here? + else + command="- echo guile not found" + fi + eval "GUILE"='$command' + false + else + true + fi + + if test $? -eq 0; then + # Extract the first word of "guile", so it can be a program name with args. +set dummy guile; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_GUILE+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $GUILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_GUILE="$GUILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GUILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +GUILE=$ac_cv_path_GUILE +if test -n "$GUILE"; then + { $as_echo "$as_me:$LINENO: result: $GUILE" >&5 +$as_echo "$GUILE" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test -n ""; then + + r="`eval echo '$'"GUILE"`" + { $as_echo "$as_me:$LINENO: checking $r version" >&5 +$as_echo_n "checking $r version... " >&6; } + exe=` + ## which doesn't work in ash, if /usr/bin/which isn't installed + ## type -p doesn't work in ash + ## command -v doesn't work in zsh + ## command -v "$r" 2>&1 + ## this test should work in ash, bash, pdksh (ksh), zsh + type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' +` + if test -n ""; then + ver="" + else + ver=` + ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' + ## + ## ARG. + ## Workaround for broken Debian gcc version string: + ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) + ## + ## -V: Workaround for python + + #dnl + + ## Assume and hunt for dotted version multiplet. + ## use eval trickery, because we cannot use multi-level $() instead of `` + ## for compatibility reasons. + + ## grab the first version number in --version output. + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" + + if test -z "$_ver"; then + ## If empty, try date [fontforge] + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + | head -n 1 \ + | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" + fi + echo "$_ver" + #dnl +` + fi + num=` + echo "$ver" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + req=` + echo "" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + { $as_echo "$as_me:$LINENO: result: $ver" >&5 +$as_echo "$ver" >&6; } + if test "$num" -lt "$req"; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" + + fi + vervar="`echo GUILE | tr 'a-z' 'A-Z'`_VERSION" + eval `echo $vervar=$num` +## AC_SUBST(`eval echo $vervar`) + + fi + fi + + + +# perl for help2man. + + + for ac_prog in perl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PERL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$PERL"; then + ac_cv_prog_PERL="$PERL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PERL="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +PERL=$ac_cv_prog_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:$LINENO: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PERL" && break +done +test -n "$PERL" || PERL="no" + + + + r="`eval echo '$'"PERL"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PERL"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi + + if test $? -ne 0; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"perl\"`\" + + if test "OPTIONAL" = "REQUIRED"; then + command="echo ERROR: perl not found" + # abort configure process here? + else + command="- echo perl not found" + fi + eval "PERL"='$command' + false + else + true + fi + + if test $? -eq 0; then + # Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PERL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:$LINENO: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test -n ""; then + + r="`eval echo '$'"PERL"`" + { $as_echo "$as_me:$LINENO: checking $r version" >&5 +$as_echo_n "checking $r version... " >&6; } + exe=` + ## which doesn't work in ash, if /usr/bin/which isn't installed + ## type -p doesn't work in ash + ## command -v doesn't work in zsh + ## command -v "$r" 2>&1 + ## this test should work in ash, bash, pdksh (ksh), zsh + type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' +` + if test -n ""; then + ver="" + else + ver=` + ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' + ## + ## ARG. + ## Workaround for broken Debian gcc version string: + ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) + ## + ## -V: Workaround for python + + #dnl + + ## Assume and hunt for dotted version multiplet. + ## use eval trickery, because we cannot use multi-level $() instead of `` + ## for compatibility reasons. + + ## grab the first version number in --version output. + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" + + if test -z "$_ver"; then + ## If empty, try date [fontforge] + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + | head -n 1 \ + | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" + fi + echo "$_ver" + #dnl +` + fi + num=` + echo "$ver" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + req=` + echo "" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + { $as_echo "$as_me:$LINENO: result: $ver" >&5 +$as_echo "$ver" >&6; } + if test "$num" -lt "$req"; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" + + fi + vervar="`echo PERL | tr 'a-z' 'A-Z'`_VERSION" + eval `echo $vervar=$num` +## AC_SUBST(`eval echo $vervar`) + + fi + fi + + + + + for ac_prog in makeinfo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_MAKEINFO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$MAKEINFO"; then + ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MAKEINFO="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +MAKEINFO=$ac_cv_prog_MAKEINFO +if test -n "$MAKEINFO"; then + { $as_echo "$as_me:$LINENO: result: $MAKEINFO" >&5 +$as_echo "$MAKEINFO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MAKEINFO" && break +done +test -n "$MAKEINFO" || MAKEINFO="no" + + + + r="`eval echo '$'"MAKEINFO"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"MAKEINFO"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi + + if test $? -ne 0; then + + eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"makeinfo\"`\" + + if test "REQUIRED" = "REQUIRED"; then + command="echo ERROR: makeinfo not found" + # abort configure process here? + else + command="- echo makeinfo not found" + fi + eval "MAKEINFO"='$command' + false + else + true + fi + + if test $? -eq 0 -a -n "4.11"; then + + r="`eval echo '$'"MAKEINFO"`" + { $as_echo "$as_me:$LINENO: checking $r version" >&5 +$as_echo_n "checking $r version... " >&6; } + exe=` + ## which doesn't work in ash, if /usr/bin/which isn't installed + ## type -p doesn't work in ash + ## command -v doesn't work in zsh + ## command -v "$r" 2>&1 + ## this test should work in ash, bash, pdksh (ksh), zsh + type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' +` + if test -n ""; then + ver="" + else + ver=` + ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' + ## + ## ARG. + ## Workaround for broken Debian gcc version string: + ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) + ## + ## -V: Workaround for python + + #dnl + + ## Assume and hunt for dotted version multiplet. + ## use eval trickery, because we cannot use multi-level $() instead of `` + ## for compatibility reasons. + + ## grab the first version number in --version output. + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" + + if test -z "$_ver"; then + ## If empty, try date [fontforge] + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + | head -n 1 \ + | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" + fi + echo "$_ver" + #dnl +` + fi + num=` + echo "$ver" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + req=` + echo "4.11" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + { $as_echo "$as_me:$LINENO: result: $ver" >&5 +$as_echo "$ver" >&6; } + if test "$num" -lt "$req"; then + + eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 4.11 (installed: $ver)"\"`\" + + fi + vervar="`echo MAKEINFO | tr 'a-z' 'A-Z'`_VERSION" + eval `echo $vervar=$num` +## AC_SUBST(`eval echo $vervar`) + + fi + + + for ac_prog in texi2html +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_TEXI2HTML+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$TEXI2HTML"; then + ac_cv_prog_TEXI2HTML="$TEXI2HTML" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_TEXI2HTML="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +TEXI2HTML=$ac_cv_prog_TEXI2HTML +if test -n "$TEXI2HTML"; then + { $as_echo "$as_me:$LINENO: result: $TEXI2HTML" >&5 +$as_echo "$TEXI2HTML" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TEXI2HTML" && break +done +test -n "$TEXI2HTML" || TEXI2HTML="no" + + + + r="`eval echo '$'"TEXI2HTML"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"TEXI2HTML"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi + + if test $? -ne 0; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"texi2html\"`\" + + if test "OPTIONAL" = "REQUIRED"; then + command="echo ERROR: texi2html not found" + # abort configure process here? + else + command="- echo texi2html not found" + fi + eval "TEXI2HTML"='$command' + false + else + true + fi + + if test $? -eq 0 -a -n "1.82"; then + + r="`eval echo '$'"TEXI2HTML"`" + { $as_echo "$as_me:$LINENO: checking $r version" >&5 +$as_echo_n "checking $r version... " >&6; } + exe=` + ## which doesn't work in ash, if /usr/bin/which isn't installed + ## type -p doesn't work in ash + ## command -v doesn't work in zsh + ## command -v "$r" 2>&1 + ## this test should work in ash, bash, pdksh (ksh), zsh + type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' +` + if test -n ""; then + ver="" + else + ver=` + ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' + ## + ## ARG. + ## Workaround for broken Debian gcc version string: + ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) + ## + ## -V: Workaround for python + + #dnl + + ## Assume and hunt for dotted version multiplet. + ## use eval trickery, because we cannot use multi-level $() instead of `` + ## for compatibility reasons. + + ## grab the first version number in --version output. + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" + + if test -z "$_ver"; then + ## If empty, try date [fontforge] + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + | head -n 1 \ + | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" + fi + echo "$_ver" + #dnl +` + fi + num=` + echo "$ver" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + req=` + echo "1.82" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + { $as_echo "$as_me:$LINENO: result: $ver" >&5 +$as_echo "$ver" >&6; } + if test "$num" -lt "$req"; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 1.82 (installed: $ver)"\"`\" + + fi + vervar="`echo TEXI2HTML | tr 'a-z' 'A-Z'`_VERSION" + eval `echo $vervar=$num` +## AC_SUBST(`eval echo $vervar`) + + fi + + + for ac_prog in dblatex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DBLATEX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DBLATEX"; then + ac_cv_prog_DBLATEX="$DBLATEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DBLATEX="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DBLATEX=$ac_cv_prog_DBLATEX +if test -n "$DBLATEX"; then + { $as_echo "$as_me:$LINENO: result: $DBLATEX" >&5 +$as_echo "$DBLATEX" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DBLATEX" && break +done +test -n "$DBLATEX" || DBLATEX="no" + + + + r="`eval echo '$'"DBLATEX"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"DBLATEX"`' : '.*\(echo\)' > /dev/null; then + true + else + ##STEPMAKE_WARN(cannot find . ) + false + fi + + if test $? -ne 0; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"dblatex\"`\" + + if test "OPTIONAL" = "REQUIRED"; then + command="echo ERROR: dblatex not found" + # abort configure process here? + else + command="- echo dblatex not found" + fi + eval "DBLATEX"='$command' + false + else + true + fi + + if test $? -eq 0 -a -n ""; then + + r="`eval echo '$'"DBLATEX"`" + { $as_echo "$as_me:$LINENO: checking $r version" >&5 +$as_echo_n "checking $r version... " >&6; } + exe=` + ## which doesn't work in ash, if /usr/bin/which isn't installed + ## type -p doesn't work in ash + ## command -v doesn't work in zsh + ## command -v "$r" 2>&1 + ## this test should work in ash, bash, pdksh (ksh), zsh + type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}' +` + if test -n ""; then + ver="" + else + ver=` + ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}' + ## + ## ARG. + ## Workaround for broken Debian gcc version string: + ## gcc (GCC) 3.1.1 20020606 (Debian prerelease) + ## + ## -V: Workaround for python + + #dnl + + ## Assume and hunt for dotted version multiplet. + ## use eval trickery, because we cannot use multi-level $() instead of `` + ## for compatibility reasons. + + ## grab the first version number in --version output. + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" + + if test -z "$_ver"; then + ## If empty, try date [fontforge] + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + | head -n 1 \ + | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" + fi + echo "$_ver" + #dnl +` + fi + num=` + echo "$ver" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + req=` + echo "" | awk -F. ' + { + if ($3) {three = $3} + else {three = 0} + } + {printf "%.0f\n", $1*1000000 + $2*1000 + three}' +` + { $as_echo "$as_me:$LINENO: result: $ver" >&5 +$as_echo "$ver" >&6; } + if test "$num" -lt "$req"; then + + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" + + fi + vervar="`echo DBLATEX | tr 'a-z' 'A-Z'`_VERSION" + eval `echo $vervar=$num` +## AC_SUBST(`eval echo $vervar`) + fi - { $as_echo "$as_me:$LINENO: result: $PLATFORM_WINDOWS" >&5 -$as_echo "$PLATFORM_WINDOWS" >&6; } - for ac_prog in $target-windres windres + for ac_prog in pdflatex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_WINDRES+set}" = set; then +if test "${ac_cv_prog_PDFLATEX+set}" = set; then $as_echo_n "(cached) " >&6 else - if test -n "$WINDRES"; then - ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. + if test -n "$PDFLATEX"; then + ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -11471,7 +12316,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_WINDRES="$ac_prog" + ac_cv_prog_PDFLATEX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -11481,24 +12326,24 @@ IFS=$as_save_IFS fi fi -WINDRES=$ac_cv_prog_WINDRES -if test -n "$WINDRES"; then - { $as_echo "$as_me:$LINENO: result: $WINDRES" >&5 -$as_echo "$WINDRES" >&6; } +PDFLATEX=$ac_cv_prog_PDFLATEX +if test -n "$PDFLATEX"; then + { $as_echo "$as_me:$LINENO: result: $PDFLATEX" >&5 +$as_echo "$PDFLATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$WINDRES" && break + test -n "$PDFLATEX" && break done -test -n "$WINDRES" || WINDRES="no" +test -n "$PDFLATEX" || PDFLATEX="no" - r="`eval echo '$'"WINDRES"`" - if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"WINDRES"`' : '.*\(echo\)' > /dev/null; then + r="`eval echo '$'"PDFLATEX"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PDFLATEX"`' : '.*\(echo\)' > /dev/null; then true else ##STEPMAKE_WARN(cannot find . ) @@ -11507,15 +12352,15 @@ test -n "$WINDRES" || WINDRES="no" if test $? -ne 0; then - eval "x"=\"`eval echo \"'$'x\" \"$target-windres windres\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"pdflatex\"`\" - if test "x" = "REQUIRED"; then - command="echo ERROR: $target-windres windres not found" + if test "OPTIONAL" = "REQUIRED"; then + command="echo ERROR: pdflatex not found" # abort configure process here? else - command="- echo $target-windres windres not found" + command="- echo pdflatex not found" fi - eval "WINDRES"='$command' + eval "PDFLATEX"='$command' false else true @@ -11523,7 +12368,7 @@ test -n "$WINDRES" || WINDRES="no" if test $? -eq 0 -a -n ""; then - r="`eval echo '$'"WINDRES"`" + r="`eval echo '$'"PDFLATEX"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 $as_echo_n "checking $r version... " >&6; } exe=` @@ -11553,9 +12398,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -11587,34 +12436,27 @@ $as_echo_n "checking $r version... " >&6; } $as_echo "$ver" >&6; } if test "$num" -lt "$req"; then - eval "x"=\"`eval echo \"'$'x\" \""$r >= (installed: $ver)"\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" fi - vervar="`echo WINDRES | tr 'a-z' 'A-Z'`_VERSION" + vervar="`echo PDFLATEX | tr 'a-z' 'A-Z'`_VERSION" eval `echo $vervar=$num` ## AC_SUBST(`eval echo $vervar`) fi - - -## Optional tools for building documentation, website, extra fonts. - -# guile executable for some scripts - - - for ac_prog in guile + for ac_prog in pngtopnm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_GUILE+set}" = set; then +if test "${ac_cv_prog_NETPBM+set}" = set; then $as_echo_n "(cached) " >&6 else - if test -n "$GUILE"; then - ac_cv_prog_GUILE="$GUILE" # Let the user override the test. + if test -n "$NETPBM"; then + ac_cv_prog_NETPBM="$NETPBM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -11623,7 +12465,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_GUILE="$ac_prog" + ac_cv_prog_NETPBM="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -11633,24 +12475,24 @@ IFS=$as_save_IFS fi fi -GUILE=$ac_cv_prog_GUILE -if test -n "$GUILE"; then - { $as_echo "$as_me:$LINENO: result: $GUILE" >&5 -$as_echo "$GUILE" >&6; } +NETPBM=$ac_cv_prog_NETPBM +if test -n "$NETPBM"; then + { $as_echo "$as_me:$LINENO: result: $NETPBM" >&5 +$as_echo "$NETPBM" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$GUILE" && break + test -n "$NETPBM" && break done -test -n "$GUILE" || GUILE="no" +test -n "$NETPBM" || NETPBM="no" - r="`eval echo '$'"GUILE"`" - if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GUILE"`' : '.*\(echo\)' > /dev/null; then + r="`eval echo '$'"NETPBM"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"NETPBM"`' : '.*\(echo\)' > /dev/null; then true else ##STEPMAKE_WARN(cannot find . ) @@ -11659,64 +12501,23 @@ test -n "$GUILE" || GUILE="no" if test $? -ne 0; then - eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"guile\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"pngtopnm\"`\" if test "OPTIONAL" = "REQUIRED"; then - command="echo ERROR: guile not found" + command="echo ERROR: pngtopnm not found" # abort configure process here? else - command="- echo guile not found" + command="- echo pngtopnm not found" fi - eval "GUILE"='$command' + eval "NETPBM"='$command' false else true fi - if test $? -eq 0; then - # Extract the first word of "guile", so it can be a program name with args. -set dummy guile; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_GUILE+set}" = set; then - $as_echo_n "(cached) " >&6 -else - case $GUILE in - [\\/]* | ?:[\\/]*) - ac_cv_path_GUILE="$GUILE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GUILE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - ;; -esac -fi -GUILE=$ac_cv_path_GUILE -if test -n "$GUILE"; then - { $as_echo "$as_me:$LINENO: result: $GUILE" >&5 -$as_echo "$GUILE" >&6; } -else - { $as_echo "$as_me:$LINENO: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test -n ""; then + if test $? -eq 0 -a -n ""; then - r="`eval echo '$'"GUILE"`" + r="`eval echo '$'"NETPBM"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 $as_echo_n "checking $r version... " >&6; } exe=` @@ -11746,9 +12547,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -11783,29 +12588,24 @@ $as_echo "$ver" >&6; } eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" fi - vervar="`echo GUILE | tr 'a-z' 'A-Z'`_VERSION" + vervar="`echo NETPBM | tr 'a-z' 'A-Z'`_VERSION" eval `echo $vervar=$num` ## AC_SUBST(`eval echo $vervar`) - fi fi - -# perl for help2man. - - - for ac_prog in perl + for ac_prog in convert do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PERL+set}" = set; then +if test "${ac_cv_prog_IMAGEMAGICK+set}" = set; then $as_echo_n "(cached) " >&6 else - if test -n "$PERL"; then - ac_cv_prog_PERL="$PERL" # Let the user override the test. + if test -n "$IMAGEMAGICK"; then + ac_cv_prog_IMAGEMAGICK="$IMAGEMAGICK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -11814,7 +12614,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PERL="$ac_prog" + ac_cv_prog_IMAGEMAGICK="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -11824,24 +12624,24 @@ IFS=$as_save_IFS fi fi -PERL=$ac_cv_prog_PERL -if test -n "$PERL"; then - { $as_echo "$as_me:$LINENO: result: $PERL" >&5 -$as_echo "$PERL" >&6; } +IMAGEMAGICK=$ac_cv_prog_IMAGEMAGICK +if test -n "$IMAGEMAGICK"; then + { $as_echo "$as_me:$LINENO: result: $IMAGEMAGICK" >&5 +$as_echo "$IMAGEMAGICK" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$PERL" && break + test -n "$IMAGEMAGICK" && break done -test -n "$PERL" || PERL="no" +test -n "$IMAGEMAGICK" || IMAGEMAGICK="no" - r="`eval echo '$'"PERL"`" - if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PERL"`' : '.*\(echo\)' > /dev/null; then + r="`eval echo '$'"IMAGEMAGICK"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"IMAGEMAGICK"`' : '.*\(echo\)' > /dev/null; then true else ##STEPMAKE_WARN(cannot find . ) @@ -11850,64 +12650,23 @@ test -n "$PERL" || PERL="no" if test $? -ne 0; then - eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"perl\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"convert\"`\" if test "OPTIONAL" = "REQUIRED"; then - command="echo ERROR: perl not found" + command="echo ERROR: convert not found" # abort configure process here? else - command="- echo perl not found" + command="- echo convert not found" fi - eval "PERL"='$command' + eval "IMAGEMAGICK"='$command' false else true fi - if test $? -eq 0; then - # Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PERL+set}" = set; then - $as_echo_n "(cached) " >&6 -else - case $PERL in - [\\/]* | ?:[\\/]*) - ac_cv_path_PERL="$PERL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - ;; -esac -fi -PERL=$ac_cv_path_PERL -if test -n "$PERL"; then - { $as_echo "$as_me:$LINENO: result: $PERL" >&5 -$as_echo "$PERL" >&6; } -else - { $as_echo "$as_me:$LINENO: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test -n ""; then + if test $? -eq 0 -a -n ""; then - r="`eval echo '$'"PERL"`" + r="`eval echo '$'"IMAGEMAGICK"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 $as_echo_n "checking $r version... " >&6; } exe=` @@ -11937,9 +12696,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -11974,27 +12737,25 @@ $as_echo "$ver" >&6; } eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" fi - vervar="`echo PERL | tr 'a-z' 'A-Z'`_VERSION" + vervar="`echo IMAGEMAGICK | tr 'a-z' 'A-Z'`_VERSION" eval `echo $vervar=$num` ## AC_SUBST(`eval echo $vervar`) - fi fi +# this name avoids a conflict with ZIP in stepmake/aclocal.m4 - - - for ac_prog in makeinfo + for ac_prog in zip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_MAKEINFO+set}" = set; then +if test "${ac_cv_prog_ZIPDOC+set}" = set; then $as_echo_n "(cached) " >&6 else - if test -n "$MAKEINFO"; then - ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. + if test -n "$ZIPDOC"; then + ac_cv_prog_ZIPDOC="$ZIPDOC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -12003,7 +12764,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_MAKEINFO="$ac_prog" + ac_cv_prog_ZIPDOC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -12013,24 +12774,24 @@ IFS=$as_save_IFS fi fi -MAKEINFO=$ac_cv_prog_MAKEINFO -if test -n "$MAKEINFO"; then - { $as_echo "$as_me:$LINENO: result: $MAKEINFO" >&5 -$as_echo "$MAKEINFO" >&6; } +ZIPDOC=$ac_cv_prog_ZIPDOC +if test -n "$ZIPDOC"; then + { $as_echo "$as_me:$LINENO: result: $ZIPDOC" >&5 +$as_echo "$ZIPDOC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$MAKEINFO" && break + test -n "$ZIPDOC" && break done -test -n "$MAKEINFO" || MAKEINFO="no" +test -n "$ZIPDOC" || ZIPDOC="no" - r="`eval echo '$'"MAKEINFO"`" - if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"MAKEINFO"`' : '.*\(echo\)' > /dev/null; then + r="`eval echo '$'"ZIPDOC"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"ZIPDOC"`' : '.*\(echo\)' > /dev/null; then true else ##STEPMAKE_WARN(cannot find . ) @@ -12039,23 +12800,23 @@ test -n "$MAKEINFO" || MAKEINFO="no" if test $? -ne 0; then - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"makeinfo\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"zip\"`\" - if test "REQUIRED" = "REQUIRED"; then - command="echo ERROR: makeinfo not found" + if test "OPTIONAL" = "REQUIRED"; then + command="echo ERROR: zip not found" # abort configure process here? else - command="- echo makeinfo not found" + command="- echo zip not found" fi - eval "MAKEINFO"='$command' + eval "ZIPDOC"='$command' false else true fi - if test $? -eq 0 -a -n "4.11"; then + if test $? -eq 0 -a -n ""; then - r="`eval echo '$'"MAKEINFO"`" + r="`eval echo '$'"ZIPDOC"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 $as_echo_n "checking $r version... " >&6; } exe=` @@ -12085,9 +12846,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -12108,7 +12873,7 @@ $as_echo_n "checking $r version... " >&6; } {printf "%.0f\n", $1*1000000 + $2*1000 + three}' ` req=` - echo "4.11" | awk -F. ' + echo "" | awk -F. ' { if ($3) {three = $3} else {three = 0} @@ -12119,27 +12884,27 @@ $as_echo_n "checking $r version... " >&6; } $as_echo "$ver" >&6; } if test "$num" -lt "$req"; then - eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 4.11 (installed: $ver)"\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" fi - vervar="`echo MAKEINFO | tr 'a-z' 'A-Z'`_VERSION" + vervar="`echo ZIPDOC | tr 'a-z' 'A-Z'`_VERSION" eval `echo $vervar=$num` ## AC_SUBST(`eval echo $vervar`) fi - for ac_prog in texi2html + for ac_prog in rsync do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_TEXI2HTML+set}" = set; then +if test "${ac_cv_prog_RSYNC+set}" = set; then $as_echo_n "(cached) " >&6 else - if test -n "$TEXI2HTML"; then - ac_cv_prog_TEXI2HTML="$TEXI2HTML" # Let the user override the test. + if test -n "$RSYNC"; then + ac_cv_prog_RSYNC="$RSYNC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -12148,7 +12913,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_TEXI2HTML="$ac_prog" + ac_cv_prog_RSYNC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -12158,24 +12923,24 @@ IFS=$as_save_IFS fi fi -TEXI2HTML=$ac_cv_prog_TEXI2HTML -if test -n "$TEXI2HTML"; then - { $as_echo "$as_me:$LINENO: result: $TEXI2HTML" >&5 -$as_echo "$TEXI2HTML" >&6; } +RSYNC=$ac_cv_prog_RSYNC +if test -n "$RSYNC"; then + { $as_echo "$as_me:$LINENO: result: $RSYNC" >&5 +$as_echo "$RSYNC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$TEXI2HTML" && break + test -n "$RSYNC" && break done -test -n "$TEXI2HTML" || TEXI2HTML="no" +test -n "$RSYNC" || RSYNC="no" - r="`eval echo '$'"TEXI2HTML"`" - if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"TEXI2HTML"`' : '.*\(echo\)' > /dev/null; then + r="`eval echo '$'"RSYNC"`" + if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"RSYNC"`' : '.*\(echo\)' > /dev/null; then true else ##STEPMAKE_WARN(cannot find . ) @@ -12184,23 +12949,23 @@ test -n "$TEXI2HTML" || TEXI2HTML="no" if test $? -ne 0; then - eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"texi2html\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"rsync\"`\" if test "OPTIONAL" = "REQUIRED"; then - command="echo ERROR: texi2html not found" + command="echo ERROR: rsync not found" # abort configure process here? else - command="- echo texi2html not found" + command="- echo rsync not found" fi - eval "TEXI2HTML"='$command' + eval "RSYNC"='$command' false else true fi - if test $? -eq 0 -a -n "1.80"; then + if test $? -eq 0 -a -n ""; then - r="`eval echo '$'"TEXI2HTML"`" + r="`eval echo '$'"RSYNC"`" { $as_echo "$as_me:$LINENO: checking $r version" >&5 $as_echo_n "checking $r version... " >&6; } exe=` @@ -12230,9 +12995,13 @@ $as_echo_n "checking $r version... " >&6; } ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -12253,7 +13022,7 @@ $as_echo_n "checking $r version... " >&6; } {printf "%.0f\n", $1*1000000 + $2*1000 + three}' ` req=` - echo "1.80" | awk -F. ' + echo "" | awk -F. ' { if ($3) {three = $3} else {three = 0} @@ -12264,16 +13033,17 @@ $as_echo_n "checking $r version... " >&6; } $as_echo "$ver" >&6; } if test "$num" -lt "$req"; then - eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 1.80 (installed: $ver)"\"`\" + eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= (installed: $ver)"\"`\" fi - vervar="`echo TEXI2HTML | tr 'a-z' 'A-Z'`_VERSION" + vervar="`echo RSYNC | tr 'a-z' 'A-Z'`_VERSION" eval `echo $vervar=$num` ## AC_SUBST(`eval echo $vervar`) fi + cat >>confdefs.h <<_ACEOF #define FLOWER_VERSION "${FULL_FLOWER_VERSION}" _ACEOF @@ -13604,7 +14374,7 @@ EOF fi for d in 2 3 4 ; do - for mf in `cd $srcdir ; find -maxdepth $d -mindepth $d -name GNUmakefile`; do + for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name GNUmakefile`; do mkdir -p $(dirname $mf) cat < $mf print 'depth=' + ('../' * ( $d-1 ) ) @@ -13613,7 +14383,7 @@ print 'include \$(configure-srcdir)/$mf' print 'MODULE_INCLUDES += \$(src-dir)/\$(outbase)' EOF done - for mf in `cd $srcdir ; find -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do + for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do mkdir -p $(dirname $mf) cat < $mf print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make' @@ -13624,7 +14394,7 @@ EOF cat < GNUmakefile -depth = ./ +depth = . include config\$(if \$(conf),-\$(conf),).make include \$(configure-srcdir)/GNUmakefile.in EOF diff --git a/configure.in b/configure.in index 20728eb937..cf0178f457 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,7 @@ dnl configure.in -*-shell-script-*- -dnl Process this file with autoconf to produce a configure script. +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.60) # Bootstrap the init proces. AC_INIT @@ -18,40 +20,39 @@ STEPMAKE_INIT AC_CONFIG_SRCDIR([lily/main.cc]) # Move to aclocal.m4? -AC_CONFIG_HEADER([$CONFIGFILE.hh:config.hh.in]) +AC_CONFIG_HEADERS([$CONFIGFILE.hh:config.hh.in]) # Uncomment the configuration options your package needs. DOCUMENTATION=yes AC_ARG_ENABLE(documentation, - [ --enable-documentation build Documentation. Default: on], + [AS_HELP_STRING([--enable-documentation], + [build Documentation. Default: on])], [DOCUMENTATION=$enableval]) AC_SUBST(DOCUMENTATION) -gui_b=no -AC_ARG_ENABLE(gui, - [ --enable-gui compile with experimental GNOME output. Default: off], - [gui_b=$enableval]) - - AC_ARG_WITH(ncsb-dir, - [ --with-ncsb-dir=DIR location of Century Schoolbook fonts.], + [AS_HELP_STRING([--with-ncsb-dir=DIR], + [location of Century Schoolbook fonts.])], [NCSB_DIR=$withval], [NCSB_DIR=""]) reloc_b=no AC_ARG_ENABLE(relocation, - [ --enable-relocation compile with dynamic relocation. Default: off], + [AS_HELP_STRING([--enable-relocation], + [compile with dynamic relocation. Default: off])], [reloc_b=$enableval]) rpath_b=no AC_ARG_ENABLE(rpath, - [ --enable-rpath hardcode runtime library path. Default: off], + [AS_HELP_STRING([--enable-rpath], + [hardcode runtime library path. Default: off])], [rpath_b=$enableval]) LINK_GXX_STATICALLY=no AC_ARG_ENABLE(static-gxx, - [ --enable-static-gxx link libstdc++.a statically. Default: off], + [AS_HELP_STRING([--enable-static-gxx], + [link libstdc++.a statically. Default: off])], [LINK_GXX_STATICALLY=$enableval]) AC_SUBST(LINK_GXX_STATICALLY) @@ -87,7 +88,7 @@ else fi AC_MSG_RESULT($NCSB_SOURCE_FILES) - +AC_LANG([C++]) STEPMAKE_PYTHON(REQUIRED, 2.4) STEPMAKE_GCC(REQUIRED, 3.4) @@ -104,58 +105,55 @@ STEPMAKE_BISON(OPTIONAL, 1.29) STEPMAKE_FLEX(REQUIRED) STEPMAKE_FLEXLEXER(REQUIRED) STEPMAKE_FLEXLEXER_LOCATION -AC_LANG_C STEPMAKE_LOCALE STEPMAKE_GETTEXT STEPMAKE_MSGFMT(REQUIRED) STEPMAKE_TEXMF(REQUIRED) STEPMAKE_TEXMF_DIRS - -## should check for 1.8.2 ? -STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.0) - +STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.2) + +# check for 3 typedefs added in Guile 1.9 +save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$GUILE_CFLAGS $CXXFLAGS" +AC_CHECK_TYPES([scm_t_hash_fold_fn, scm_t_hash_handle_fn], + [AC_DEFINE(HAVE_GUILE_HASH_FUNC)], [], + [#include ]) +AC_CHECK_TYPES([scm_t_subr], + [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [], + [#include ]) +CXXFLAGS="$save_CXXFLAGS" ## check rational bugfix. save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS" AC_MSG_CHECKING(GUILE rational bugfix) -AC_TRY_CPP( -#include +AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include #ifdef SCM_FRACTION_REDUCED_BIT -#error +#error #endif -, -AC_MSG_RESULT(ok), -REQUIRED="$REQUIRED GUILE-with-rational-bugfix" -AC_MSG_RESULT(Must have patched GUILE rational support. See INSTALL.txt)) +]])],[AC_MSG_RESULT(ok)],[REQUIRED="$REQUIRED GUILE-with-rational-bugfix" +AC_MSG_RESULT(Must have patched GUILE rational support. See INSTALL.txt)]) CPPFLAGS="$save_CPPFLAGS" STEPMAKE_PYTHON_DEVEL(REQUIRED) -STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, OPTIONAL, 8.15) +STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, OPTIONAL, 8.60) -STEPMAKE_PATH_PROG(FONTFORGE, fontforge, REQUIRED, 20050624) +STEPMAKE_PATH_PROG(FONTFORGE, fontforge, REQUIRED, 20100501) +STEPMAKE_PATH_PROG(FONTFORGE, fontforge, OPTIONAL, 20110222) STEPMAKE_PATH_PROG(T1ASM, t1asm, REQUIRED) AC_CHECK_HEADERS([assert.h grp.h libio.h pwd.h sys/stat.h wchar.h fpu_control.h]) -AC_LANG_PUSH(C++) -AC_CHECK_HEADERS([sstream boost/lambda/lambda.hpp]) -AC_LANG_POP(C++) +AC_CHECK_HEADERS([sstream]) AC_HEADER_STAT AC_FUNC_MEMCMP AC_FUNC_VPRINTF -AC_CHECK_FUNCS([chroot fopencookie funopen gettext isinf mbrtowc memmem snprintf vsnprintf wcrtomb]) -AC_CHECK_HEADERS([utf8/wchar.h], LIBS="$LIBS -lutf8") -AC_SEARCH_LIBS(mbrtowc, [mingwex msvcp60]) +AC_CHECK_FUNCS([chroot fopencookie gettext isinf memmem snprintf vsnprintf]) STEPMAKE_PROGS(PKG_CONFIG, pkg-config, REQUIRED, 0.9.0) -if test "$gui_b" = "yes"; then - STEPMAKE_GTK2(gtk+-2.0, REQUIRED, 2.4.0) -fi - AC_MSG_CHECKING(whether to enable dynamic relocation) if test "$reloc_b" = "yes"; then AC_DEFINE(ARGV0_RELOCATION) @@ -174,8 +172,7 @@ HOST_ARCH=`$CC -dumpmachine` AC_SUBST(HOST_ARCH) STEPMAKE_PANGO_FT2(pangoft2, REQUIRED, 1.6.0) -#STEPMAKE_PANGO(pango, REQUIRED, 1.6.0) -STEPMAKE_FONTCONFIG(fontconfig, REQUIRED, 2.2.0) +STEPMAKE_FONTCONFIG(fontconfig, REQUIRED, 2.4.0) STEPMAKE_FREETYPE2(freetype2, REQUIRED, 2.1.10) STEPMAKE_WINDOWS @@ -189,7 +186,15 @@ STEPMAKE_GUILE(OPTIONAL) STEPMAKE_PERL(OPTIONAL) STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11) -STEPMAKE_PROGS(TEXI2HTML, texi2html, OPTIONAL, 1.80) +STEPMAKE_PROGS(TEXI2HTML, texi2html, OPTIONAL, 1.82) +STEPMAKE_PROGS(DBLATEX, dblatex, OPTIONAL) +STEPMAKE_PROGS(PDFLATEX, pdflatex, OPTIONAL) +STEPMAKE_PROGS(NETPBM, pngtopnm, OPTIONAL) +STEPMAKE_PROGS(IMAGEMAGICK, convert, OPTIONAL) +# this name avoids a conflict with ZIP in stepmake/aclocal.m4 +STEPMAKE_PROGS(ZIPDOC, zip, OPTIONAL) +STEPMAKE_PROGS(RSYNC, rsync, OPTIONAL) + AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}") diff --git a/elisp/lilypond-mode.el b/elisp/lilypond-mode.el index 97778dc460..d39b0d1d2f 100644 --- a/elisp/lilypond-mode.el +++ b/elisp/lilypond-mode.el @@ -1,15 +1,26 @@ -;;;; -;;;; lilypond-mode.el --- Major mode for editing GNU LilyPond music scores -;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; lilypond-mode.el -- Major mode for editing GNU LilyPond music scores +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; (c) 1999--2009 Jan Nieuwenhuizen -;;;; +;;;; Copyright (C) 1999--2011 Jan Nieuwenhuizen ;;;; Changed 2001--2003 Heikki Junes ;;;; * Add PS-compilation, PS-viewing and MIDI-play (29th Aug 2001) ;;;; * Keyboard shortcuts (12th Sep 2001) ;;;; * Inserting tags, inspired on sgml-mode (11th Oct 2001) ;;;; * Autocompletion & Info (23rd Nov 2002) +;;;; +;;;; 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 . + ;;; Inspired on auctex @@ -32,7 +43,7 @@ "File prefix for commands on buffer or region.") (defvar LilyPond-master-file nil - "Master file that Lilypond will be run on.") + "Master file that LilyPond will be run on.") ;; FIXME: find ``\score'' in buffers / make settable? (defun LilyPond-get-master-file () @@ -756,7 +767,7 @@ command." (define-key LilyPond-mode-map "\C-cb" 'LilyPond-what-beat) (define-key LilyPond-mode-map "\C-cf" 'font-lock-fontify-buffer) (define-key LilyPond-mode-map "\C-ci" 'LilyPond-insert-tag-current) - ;; the following will should be overriden by Lilypond Quick Insert Mode + ;; the following will should be overridden by LilyPond Quick Insert Mode (define-key LilyPond-mode-map "\C-cq" 'LilyPond-quick-insert-mode) (define-key LilyPond-mode-map "\C-c;" 'LilyPond-comment-region) (define-key LilyPond-mode-map ")" 'LilyPond-electric-close-paren) @@ -1144,11 +1155,12 @@ LilyPond-command-alist\t\talist from name to command" ;; Use Command on Region even for inactive mark (region). (if (string-match "XEmacs\\|Lucid" emacs-version) - (setq zmacs-regions nil) + (progn + (setq zmacs-regions nil) + (make-local-hook 'post-command-hook)) ; XEmacs requires (setq mark-even-if-inactive t)) ;; Context dependent syntax tables in LilyPond-mode - (make-local-hook 'post-command-hook) ; XEmacs requires (add-hook 'post-command-hook 'LilyPond-mode-context-set-syntax-table nil t) ;; Turn on paren-mode buffer-locally, i.e., in LilyPond-mode diff --git a/elisp/lilypond-song.el b/elisp/lilypond-song.el index 9886dac685..a86a6a5893 100644 --- a/elisp/lilypond-song.el +++ b/elisp/lilypond-song.el @@ -1,24 +1,22 @@ -;;; lilypond-song.el --- Emacs support for LilyPond singing - -;; Copyright (C) 2006 Brailcom, o.p.s. - -;; Author: Milan Zamazal - -;; COPYRIGHT NOTICE - -;; 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 2 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, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +;;;; lilypond-song.el --- Emacs support for LilyPond singing +;;;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2006 Brailcom, o.p.s. +;;;; Author: Milan Zamazal +;;;; +;;;; 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 . ;;; Commentary: diff --git a/elisp/lilypond-what-beat.el b/elisp/lilypond-what-beat.el index b7d7d98787..4a00ed36c3 100644 --- a/elisp/lilypond-what-beat.el +++ b/elisp/lilypond-what-beat.el @@ -1,262 +1,262 @@ -; Features: -; -; -> Counts number of notes between last | and point. Adds durations of -; each note up, and returns result. -; -; -> Works well on notes and chords. -; -; -> Ignores most keywords, like \override -; -; -> Is aware of certain keywords which often contain parameters that -; look like notes, but should not be counted. -; | a \key b \minor c % b is not counted, but a and c are. -; -; -> Ignores Scheme expressions, which start with # -; -; -> Doesn't ignore the \times keyword. Intelligently handles triplets. -; -; -; Caveats: -; -; -> Doesn't work on regions that aren't preceded by a |. This is because such -; notes are only delimited by a {, and what-beat can't distinguish a { that -; opens a set of notes from an internal { (say from a triplet) -; -; -> Doesn't work with << >> expressions or nested {} expressions (unless -; {} is part of a keyword like \times) -; -; -> Keywords abutted against a note are not visible to what-beat, and -; can therefore surreptitiosly sneak fake notes into what-beat. -; | c\glissando f <- BAD: the f gets counted, but shouldn't -; | c \glissando f <- GOOD: the f gets ignored -; -; -> Does not look outside notes context. Derivation rules don't work: -; str = \notes { a8 b c d } -; \score { \notes { | e4 %{ gets counted }% \str %{gets ignored}% -; -; -> Does not handle repeats. -; -; -> Ignores \bar commands (and does not get confused by a | inside a \bar) -; - -; Recognizes pitch & octave -(setq pitch-regex "\\([a-z]+[,']*\\|<[^>]*>\\)\\(=[,']*\\)?") -; Recognizes duration -(setq duration-regex "[ \t\n]*\\(\\(\\(128\\|6?4\\|3?2\\|16?\\|8\\)\\([.]*\\)\\)\\([ \t]*[*][ \t]*\\([0-9]+\\)\\(/\\([1-9][0-9]*\\)\\)?\\)?\\)") - -; These keywords precede notes that should not be counted during beats -(setq Parm-Keywords '("key" "clef" "appoggiatura" "acciaccatura" "grace" - "override" "revert" "glissando")) - - -(defun extract-match (string match-num) - (if (null (match-beginning match-num)) - nil - (substring string (match-beginning match-num) (match-end match-num)))) - - -(defun add-fractions (f1 f2) - "Adds two fractions, both are (numerator denominator)" - (set 'result (list (+ (* (car f1) (cadr f2)) (* (car f2) (cadr f1))) - (* (cadr f1) (cadr f2)))) - (set 'result (reduce-fraction result 2)) - (set 'result (reduce-fraction result 3)) - (set 'result (reduce-fraction result 5)) - (set 'result (reduce-fraction result 7)) -) - - -(defun reduce-fraction (f divisor) - "Eliminates divisor from fraction if present" - (while (and (= 0 (% (car result) divisor)) - (= 0 (% (cadr result) divisor)) - (< 1 (cadr result)) - (< 0 (car result))) - (set 'result (list (/ (car result) divisor) (/ (cadr result) divisor)))) - result -) - - -(defun parse-duration (duration) - "Returns a duration string parsed as '(numerator denominator)" - (string-match duration-regex duration) - (let ((result (list 1 (string-to-int (extract-match duration 2)))) - (dots (extract-match duration 4)) - (numerator (or (extract-match duration 6) "1")) - (denominator (or (extract-match duration 8) "1"))) - (if (and (not (null dots)) (< 0 (string-width dots))) - (dotimes (dummy (string-width dots)) - (set 'result (list (1+ (* 2 (car result))) (* 2 (cadr result)))))) - (list (* (string-to-int numerator) (car result)) - (* (string-to-int denominator) (cadr result))) -)) - -(defun walk-note-duration () -"Returns duration of next note, moving point past note. -If point is not before a note, returns nil -If next note has no duration, returns t" - (if (not (looking-at pitch-regex)) - nil - (progn - (goto-char (match-end 0)) - (if (not (looking-at duration-regex)) - t - (progn - (goto-char (match-end 0)) - (parse-duration (match-string 0))))))) - -; returns nil if not at a comment -(defun skip-comment () - (if (not (char-equal ?\% (following-char))) - nil - (progn - (forward-char) - (if (char-equal ?\{ (following-char)) - (re-search-forward "}%" nil t) - (progn - (skip-chars-forward "^\n") - (forward-char))) - t -))) - -; returns nil if not at a quotation -(defun skip-quotation () - (if (not (char-equal ?\" (following-char))) - nil - (progn - (forward-char) - (skip-chars-forward "^\"") - (forward-char) - t -))) - -; returns nil if not at a sexp -(defun skip-sexp () - (interactive) - (if (not (char-equal ?\# (following-char))) - nil - (progn - (forward-char) - (if (char-equal ?\' (following-char)) - (forward-char)) - (if (not (char-equal ?\( (following-char))) - (skip-chars-forward "^ \t\n") - (progn - (let ((paren 1)) - (while (< 0 paren) - (forward-char) - (cond ((char-equal ?\( (following-char)) - (setq paren (1+ paren))) - ((char-equal ?\) (following-char)) - (setq paren (1- paren))))) - (forward-char) - t -)))))) - -(defun goto-note-begin () - (interactive) - ; skip anything that is not ws. And skip any comments or quotations - (while (or (< 0 (skip-chars-forward "^ \t\n~%#\"")) - (skip-comment) - (skip-quotation) - (skip-sexp))) - ; Now skip anything that isn't alphanum or \. And skip comments or quotations - (while (or (< 0 (skip-chars-forward "^A-Za-z<%}#=\"")) - (skip-comment) - (skip-quotation) - (skip-sexp))) - ; (skip-chars-forward "^\\") Why doesn't this work?!! - (if (char-equal ?\\ (preceding-char)) - (backward-char)) -) - - -(defun skip-good-keywords () - (if (looking-at "\\\\\\([a-z]*\\)") - (progn - (goto-char (match-end 0)) - (if (member (match-string 1) Parm-Keywords) - (progn - (if (looking-at "[ \t\n]*?\\([a-z0-9_]+\\|{[^}]*}\\|\"[^\"]*\"\\)") - (goto-char (match-end 0)) - (error "Improper regex match:") - (error "Unknown text: %s") -)))))) - -(defun find-measure-start () - (let ((start (re-search-backward "\|" 0 t))) - (if (null start) - -1 - (if (looking-at "[^ \n\t]*\"") - (find-measure-start) - (point) -)))) - -(defun get-beat () - (save-excursion - (save-restriction - (let* ((end (point)) - (measure-start (find-measure-start)) - (last-dur (or (re-search-backward duration-regex 0 t) -1)) - (duration (if (= -1 last-dur) 0 (parse-duration (match-string 0)))) - (result '(0 1))) ; 0 in fraction form - (if (= measure-start -1) - (error "No | before point") - (progn - (goto-char (1+ measure-start)) - (goto-note-begin) - (while (< (point) end) - (set 'new-duration (walk-note-duration)) - (if (null new-duration) - (if (not (looking-at "\\\\times[ \t]*\\([1-9]*\\)/\\([1-9]*\\)[ \t\n]*{")) - (skip-good-keywords) - - ; handle \times specially - (let ((numerator (string-to-int (match-string 1))) - (denominator (string-to-int (match-string 2)))) - (goto-char (match-end 0)) - (goto-note-begin) - (while (and (not (looking-at "}")) - (< (point) end)) - (set 'new-duration (walk-note-duration)) - (if (null new-duration) - (if (looking-at "\\\\[a-z]*[ \t]*[a-z]*") - (goto-char (match-end 0)) - (error "Unknown text: %S %s" result(buffer-substring (point) end)))) - (if (not (eq new-duration t)) - (set 'duration new-duration)) - (set 'result (add-fractions result - (list (* numerator (car duration)) - (* denominator (cadr duration))))) - (goto-note-begin)) - (if (< (point) end) - (forward-char 1)))) ; skip } - - (if (not (eq new-duration t)) - (set 'duration new-duration)) - (set 'result (add-fractions result duration))) - (goto-note-begin)) - - result -)))))) - -(defun LilyPond-what-beat () - "Returns how much of a measure lies between last measaure '|' and point. -Recognizes chords, and triples." - (interactive) - (let ((beat (get-beat))) - (message "Beat: %d/%d" (car beat) (cadr beat))) -) - -(defun LilyPond-electric-bar () - "Indicate the number of beats in last measure when a | is inserted" - (interactive) - (self-insert-command 1) - (save-excursion - (save-restriction - (backward-char) - (LilyPond-what-beat) - (forward-char) -))) - - +; Features: +; +; -> Counts number of notes between last | and point. Adds durations of +; each note up, and returns result. +; +; -> Works well on notes and chords. +; +; -> Ignores most keywords, like \override +; +; -> Is aware of certain keywords which often contain parameters that +; look like notes, but should not be counted. +; | a \key b \minor c % b is not counted, but a and c are. +; +; -> Ignores Scheme expressions, which start with # +; +; -> Doesn't ignore the \times keyword. Intelligently handles triplets. +; +; +; Caveats: +; +; -> Doesn't work on regions that aren't preceded by a |. This is because such +; notes are only delimited by a {, and what-beat can't distinguish a { that +; opens a set of notes from an internal { (say from a triplet) +; +; -> Doesn't work with << >> expressions or nested {} expressions (unless +; {} is part of a keyword like \times) +; +; -> Keywords abutted against a note are not visible to what-beat, and +; can therefore surreptitiosly sneak fake notes into what-beat. +; | c\glissando f <- BAD: the f gets counted, but shouldn't +; | c \glissando f <- GOOD: the f gets ignored +; +; -> Does not look outside notes context. Derivation rules don't work: +; str = \notes { a8 b c d } +; \score { \notes { | e4 %{ gets counted }% \str %{gets ignored}% +; +; -> Does not handle repeats. +; +; -> Ignores \bar commands (and does not get confused by a | inside a \bar) +; + +; Recognizes pitch & octave +(setq pitch-regex "\\([a-z]+[,']*\\|<[^>]*>\\)\\(=[,']*\\)?") +; Recognizes duration +(setq duration-regex "[ \t\n]*\\(\\(\\(128\\|6?4\\|3?2\\|16?\\|8\\)\\([.]*\\)\\)\\([ \t]*[*][ \t]*\\([0-9]+\\)\\(/\\([1-9][0-9]*\\)\\)?\\)?\\)") + +; These keywords precede notes that should not be counted during beats +(setq Parm-Keywords '("key" "clef" "appoggiatura" "acciaccatura" "grace" + "override" "revert" "glissando")) + + +(defun extract-match (string match-num) + (if (null (match-beginning match-num)) + nil + (substring string (match-beginning match-num) (match-end match-num)))) + + +(defun add-fractions (f1 f2) + "Adds two fractions, both are (numerator denominator)" + (set 'result (list (+ (* (car f1) (cadr f2)) (* (car f2) (cadr f1))) + (* (cadr f1) (cadr f2)))) + (set 'result (reduce-fraction result 2)) + (set 'result (reduce-fraction result 3)) + (set 'result (reduce-fraction result 5)) + (set 'result (reduce-fraction result 7)) +) + + +(defun reduce-fraction (f divisor) + "Eliminates divisor from fraction if present" + (while (and (= 0 (% (car result) divisor)) + (= 0 (% (cadr result) divisor)) + (< 1 (cadr result)) + (< 0 (car result))) + (set 'result (list (/ (car result) divisor) (/ (cadr result) divisor)))) + result +) + + +(defun parse-duration (duration) + "Returns a duration string parsed as '(numerator denominator)" + (string-match duration-regex duration) + (let ((result (list 1 (string-to-int (extract-match duration 2)))) + (dots (extract-match duration 4)) + (numerator (or (extract-match duration 6) "1")) + (denominator (or (extract-match duration 8) "1"))) + (if (and (not (null dots)) (< 0 (string-width dots))) + (dotimes (dummy (string-width dots)) + (set 'result (list (1+ (* 2 (car result))) (* 2 (cadr result)))))) + (list (* (string-to-int numerator) (car result)) + (* (string-to-int denominator) (cadr result))) +)) + +(defun walk-note-duration () +"Returns duration of next note, moving point past note. +If point is not before a note, returns nil +If next note has no duration, returns t" + (if (not (looking-at pitch-regex)) + nil + (progn + (goto-char (match-end 0)) + (if (not (looking-at duration-regex)) + t + (progn + (goto-char (match-end 0)) + (parse-duration (match-string 0))))))) + +; returns nil if not at a comment +(defun skip-comment () + (if (not (char-equal ?\% (following-char))) + nil + (progn + (forward-char) + (if (char-equal ?\{ (following-char)) + (re-search-forward "}%" nil t) + (progn + (skip-chars-forward "^\n") + (forward-char))) + t +))) + +; returns nil if not at a quotation +(defun skip-quotation () + (if (not (char-equal ?\" (following-char))) + nil + (progn + (forward-char) + (skip-chars-forward "^\"") + (forward-char) + t +))) + +; returns nil if not at a sexp +(defun skip-sexp () + (interactive) + (if (not (char-equal ?\# (following-char))) + nil + (progn + (forward-char) + (if (char-equal ?\' (following-char)) + (forward-char)) + (if (not (char-equal ?\( (following-char))) + (skip-chars-forward "^ \t\n") + (progn + (let ((paren 1)) + (while (< 0 paren) + (forward-char) + (cond ((char-equal ?\( (following-char)) + (setq paren (1+ paren))) + ((char-equal ?\) (following-char)) + (setq paren (1- paren))))) + (forward-char) + t +)))))) + +(defun goto-note-begin () + (interactive) + ; skip anything that is not ws. And skip any comments or quotations + (while (or (< 0 (skip-chars-forward "^ \t\n~%#\"")) + (skip-comment) + (skip-quotation) + (skip-sexp))) + ; Now skip anything that isn't alphanum or \. And skip comments or quotations + (while (or (< 0 (skip-chars-forward "^A-Za-z<%}#=\"")) + (skip-comment) + (skip-quotation) + (skip-sexp))) + ; (skip-chars-forward "^\\") Why doesn't this work?!! + (if (char-equal ?\\ (preceding-char)) + (backward-char)) +) + + +(defun skip-good-keywords () + (if (looking-at "\\\\\\([a-z]*\\)") + (progn + (goto-char (match-end 0)) + (if (member (match-string 1) Parm-Keywords) + (progn + (if (looking-at "[ \t\n]*?\\([a-z0-9_]+\\|{[^}]*}\\|\"[^\"]*\"\\)") + (goto-char (match-end 0)) + (error "Improper regex match:") + (error "Unknown text: %s") +)))))) + +(defun find-measure-start () + (let ((start (re-search-backward "\|" 0 t))) + (if (null start) + -1 + (if (looking-at "[^ \n\t]*\"") + (find-measure-start) + (point) +)))) + +(defun get-beat () + (save-excursion + (save-restriction + (let* ((end (point)) + (measure-start (find-measure-start)) + (last-dur (or (re-search-backward duration-regex 0 t) -1)) + (duration (if (= -1 last-dur) 0 (parse-duration (match-string 0)))) + (result '(0 1))) ; 0 in fraction form + (if (= measure-start -1) + (error "No | before point") + (progn + (goto-char (1+ measure-start)) + (goto-note-begin) + (while (< (point) end) + (set 'new-duration (walk-note-duration)) + (if (null new-duration) + (if (not (looking-at "\\\\times[ \t]*\\([1-9]*\\)/\\([1-9]*\\)[ \t\n]*{")) + (skip-good-keywords) + + ; handle \times specially + (let ((numerator (string-to-int (match-string 1))) + (denominator (string-to-int (match-string 2)))) + (goto-char (match-end 0)) + (goto-note-begin) + (while (and (not (looking-at "}")) + (< (point) end)) + (set 'new-duration (walk-note-duration)) + (if (null new-duration) + (if (looking-at "\\\\[a-z]*[ \t]*[a-z]*") + (goto-char (match-end 0)) + (error "Unknown text: %S %s" result(buffer-substring (point) end)))) + (if (not (eq new-duration t)) + (set 'duration new-duration)) + (set 'result (add-fractions result + (list (* numerator (car duration)) + (* denominator (cadr duration))))) + (goto-note-begin)) + (if (< (point) end) + (forward-char 1)))) ; skip } + + (if (not (eq new-duration t)) + (set 'duration new-duration)) + (set 'result (add-fractions result duration))) + (goto-note-begin)) + + result +)))))) + +(defun LilyPond-what-beat () + "Returns how much of a measure lies between last measaure '|' and point. +Recognizes chords, and triples." + (interactive) + (let ((beat (get-beat))) + (message "Beat: %d/%d" (car beat) (cadr beat))) +) + +(defun LilyPond-electric-bar () + "Indicate the number of beats in last measure when a | is inserted" + (interactive) + (self-insert-command 1) + (save-excursion + (save-restriction + (backward-char) + (LilyPond-what-beat) + (forward-char) +))) + + diff --git a/flower/README b/flower/README index 75bc0679e7..a6f99ba345 100644 --- a/flower/README +++ b/flower/README @@ -1,5 +1,5 @@ -This library contains some general purpose routines which aren't -standardised libraries yet. It may be replaced by STL in time. +This library contains some general purpose routines which we/a/ren't +standardised libraries yet. It may be replaced by STL in time. It was written by: @@ -8,5 +8,3 @@ It was written by: and Jan Nieuwenhuizen - -It is licensed under the GNU LGPL. diff --git a/flower/TODO b/flower/TODO index 5586845c99..6229ff65fb 100644 --- a/flower/TODO +++ b/flower/TODO @@ -16,8 +16,6 @@ * Automake, libtool - * LGPL? - * disable this auto conv: const pointer -> bool -> string * Pointer_array diff --git a/flower/cpu-timer.cc b/flower/cpu-timer.cc index 9a2fcc4c73..a72d5fe7ba 100644 --- a/flower/cpu-timer.cc +++ b/flower/cpu-timer.cc @@ -1,9 +1,20 @@ /* - cpu-timer.cc -- implement Cpu_timer + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "cpu-timer.hh" diff --git a/flower/file-name.cc b/flower/file-name.cc index 2d9f1454fb..ccb923355f 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -1,10 +1,21 @@ /* - file-name.cc - implement File_name + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "file-name.hh" diff --git a/flower/file-path.cc b/flower/file-path.cc index 513a146ad6..97b9f24362 100644 --- a/flower/file-path.cc +++ b/flower/file-path.cc @@ -1,10 +1,21 @@ /* - file-path.cc - implement File_path + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "file-path.hh" diff --git a/flower/getopt-long.cc b/flower/getopt-long.cc index 5d8b4259f3..51e11d896c 100644 --- a/flower/getopt-long.cc +++ b/flower/getopt-long.cc @@ -1,7 +1,20 @@ /* - process command line, GNU style. + This file is part of LilyPond, the GNU music typesetter. - this is Copyleft (c) 1996--2009 Han-Wen Nienhuys, + Copyright (C) 1996--2011 Han-Wen Nienhuys, + + 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 . */ #include "getopt-long.hh" diff --git a/flower/include/arithmetic-operator.hh b/flower/include/arithmetic-operator.hh index f626aac749..a1d6c6d3a3 100644 --- a/flower/include/arithmetic-operator.hh +++ b/flower/include/arithmetic-operator.hh @@ -1,9 +1,20 @@ /* - arithmetic-operator.hh -- declare + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef ARITHMETIC_OPERATOR_HH diff --git a/flower/include/axis.hh b/flower/include/axis.hh index 46b159b14f..4d575a38ae 100644 --- a/flower/include/axis.hh +++ b/flower/include/axis.hh @@ -1,9 +1,20 @@ /* - axes.hh -- declare Axis + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef AXES_HH diff --git a/flower/include/compare.hh b/flower/include/compare.hh index febadd3d55..cb4cbf3d17 100644 --- a/flower/include/compare.hh +++ b/flower/include/compare.hh @@ -1,7 +1,20 @@ /* - flowerlib + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef COMPARE_HH #define COMPARE_HH diff --git a/flower/include/cpu-timer.hh b/flower/include/cpu-timer.hh index ff7d5bb0d7..6e0b997a61 100644 --- a/flower/include/cpu-timer.hh +++ b/flower/include/cpu-timer.hh @@ -1,9 +1,20 @@ /* - cpu-timer.hh -- declare Cpu_timer + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef CPU_TIMER_HH diff --git a/flower/include/direction.hh b/flower/include/direction.hh index fab90f19d5..befd0aa2ac 100644 --- a/flower/include/direction.hh +++ b/flower/include/direction.hh @@ -1,9 +1,20 @@ /* - direction.hh -- declare Direction + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef DIRECTION_HH @@ -64,7 +75,13 @@ flip (Direction *i) if d > 0: the max operator if d < 0: the min operator */ -template T minmax (Direction d, T, T); +template T minmax (Direction d, T a, T b) +{ + if (d == UP) + return max (a, b); + else + return min (a, b); +} // String direction_string (Direction, Axis); diff --git a/flower/include/drul-array.hh b/flower/include/drul-array.hh index b895dc9c64..4db1cb133b 100644 --- a/flower/include/drul-array.hh +++ b/flower/include/drul-array.hh @@ -1,9 +1,20 @@ /* - drul-array.hh -- declare Drul_array + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef DRUL_ARRAY_HH diff --git a/flower/include/file-name.hh b/flower/include/file-name.hh index a840aea74f..f0d982f017 100644 --- a/flower/include/file-name.hh +++ b/flower/include/file-name.hh @@ -1,9 +1,20 @@ /* - file-name.hh -- declare File_name + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef FILE_NAME_HH diff --git a/flower/include/file-path.hh b/flower/include/file-path.hh index ee62d94b15..235d0a5d0c 100644 --- a/flower/include/file-path.hh +++ b/flower/include/file-path.hh @@ -1,9 +1,20 @@ /* - file-path.hh -- declare File_path + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef FILE_PATH_HH diff --git a/flower/include/flower-proto.hh b/flower/include/flower-proto.hh index 34e56961a1..adb6d349b1 100644 --- a/flower/include/flower-proto.hh +++ b/flower/include/flower-proto.hh @@ -1,7 +1,20 @@ /* - flower-proto.hh -- typenames in flowerlib + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef FLOWER_PROTO_HH diff --git a/flower/include/guile-compatibility.hh b/flower/include/guile-compatibility.hh index c40e3b3b35..b65ce2cfe6 100644 --- a/flower/include/guile-compatibility.hh +++ b/flower/include/guile-compatibility.hh @@ -1,83 +1,39 @@ /* - guile-compatibility.hh -- declare compat functions for GUILE 1.6 + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef GUILE_COMPATIBILITY_HH #define GUILE_COMPATIBILITY_HH -#if SCM_MINOR_VERSION < 7 -/* guile-1.6.x compatibility */ - -inline SCM scm_cdr (SCM x) -{ - if (SCM_NCONSP (x)) - abort (); - return SCM_CDR (x); -} -inline SCM scm_car (SCM x) -{ - if (SCM_NCONSP (x)) - abort (); - return SCM_CAR (x); -} -#define SCM_I_CONSP(x) SCM_CONSP (x) -inline SCM scm_caar (SCM x) { return SCM_CAAR (x); } -inline SCM scm_cdar (SCM x) { return SCM_CDAR (x); } -inline SCM scm_cadr (SCM x) { return SCM_CADR (x); } -inline SCM scm_cddr (SCM x) { return SCM_CDDR (x); } -inline SCM scm_caddr (SCM x) { return SCM_CADDR (x); } -inline SCM scm_cdadr (SCM x) { return SCM_CDADR (x); } -inline SCM scm_caadr (SCM x) { return SCM_CAADR (x); } -inline SCM scm_cadar (SCM x) { return SCM_CADAR (x); } -#define scm_gc_unregister_collectable_memory(a, b, c) scm_done_free (b) -#define scm_gc_register_collectable_memory(a, b, c) scm_done_malloc (b) -#define scm_is_vector(x) (SCM_VECTORP ((SCM) x)) -#define SCM_HASHTABLE_P(x) (SCM_VECTORP ((SCM) x)) -#define SCM_VECTOR_REF(v, i) (SCM_VELTS ((v))[ (i)]) -#define scm_from_bool(x) (x ? SCM_BOOL_T : SCM_BOOL_F) -#define scm_from_int(x) SCM_MAKINUM (x) -#define scm_from_unsigned_integer(x) scm_uint2num (x) -#define scm_from_unsigned(x) scm_uint2num (x) -#define scm_from_uint32(x) scm_uint2num (x) -#define scm_is_integer(x) SCM_INUMP (x) -#define scm_is_string(x) SCM_STRINGP (x) -#define scm_hash_table_p scm_vector_p -#define scm_from_locale_stringn(s, n) scm_mem2string (s, n) -#define scm_from_locale_string(x) scm_makfrom0str (x) -#define scm_i_string_chars(x) SCM_STRING_CHARS (x) -#define scm_i_string_length(x) SCM_STRING_LENGTH (x) -inline int ly_c_number_p (SCM x) { return SCM_NUMBERP (x); } -#define scm_is_number(x) (scm_number_p (x) == SCM_BOOL_T) -inline int ly_scm2int (SCM x) { return scm_num2int (x, 0, "ly_scm2int"); } -#define scm_to_int(x) (ly_scm2int (x)) -inline int ly_scm2unsigned (SCM x) { return scm_num2uint (x, 0, "ly_scm2unsigned"); } -#define scm_to_unsigned(x) (ly_scm2unsigned (x)) -inline int ly_c_symbol_p (SCM x) { return SCM_SYMBOLP (x); } -#define scm_is_symbol(x) ly_c_symbol_p (x) -inline int ly_c_boolean_p (SCM x) { return SCM_BOOLP (x); } -#define scm_is_bool(x) ly_c_boolean_p (x) -inline int ly_c_eq_p (SCM x, SCM y) { return SCM_EQ_P (x, y); } -#define scm_is_eq(x, y) (SCM_EQ_P ((x), (y))) - -#define scm_c_string_length(x) SCM_STRING_LENGTH (x) -#define scm_is_pair(x) (SCM_CONSP (x)) - -#define scm_c_vector_length(x) SCM_VECTOR_LENGTH (x) -#define scm_c_vector_ref(x, y) SCM_VECTOR_REF (x, y) - -inline double ly_scm2double (SCM x) { return scm_num2dbl (x, "ly_scm2double"); } -#define scm_to_double(x) (ly_scm2double (x)) -#define scm_from_double(x) (scm_make_real (x)) - -#else /* !SCM_MINOR_VERSION < 7 */ - -#define scm_to_unsigned(x) scm_to_uint32 (x) +#if SCM_MAJOR_VERSION == 1 +#if SCM_MINOR_VERSION > 6 && SCM_MINOR_VERSION < 9 +/* + GUILE V1.7.0 - V1.8.n +*/ #define scm_from_unsigned(x) scm_from_unsigned_integer (x) - -#endif /* !SCM_MINOR_VERSION < 7 */ - +#else // SCM_MINOR_VERSION >= 9 +/* + GUILE V1.9.n +*/ +#endif // SCM_MINOR_VERSION > 6 && SCM_MINOR_VERSION < 9 +#else // SCM_MAJOR_VERSION != 1 +/* + Add any compatibility definitions here for Guile V2.n +*/ +#endif // SCM_MAJOR_VERSION == 1 #endif /* GUILE_COMPATIBILITY_HH */ diff --git a/flower/include/international.hh b/flower/include/international.hh index f4216736a2..f20a49d8f3 100644 --- a/flower/include/international.hh +++ b/flower/include/international.hh @@ -1,9 +1,20 @@ /* - international.hh -- declare stuff for internationalization + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #ifndef INTERNATIONAL_HH @@ -15,7 +26,7 @@ /** Internationalisation: _i ("to be translated") gets an entry in the POT file - gettext () must be invoked explicitely to do the actual "translation". + gettext () must be invoked explicitly to do the actual "translation". See flower/getopt-long.cc. */ #define _i(sz) sz diff --git a/flower/include/interval-set.hh b/flower/include/interval-set.hh index eda3a5ef26..91410142ed 100644 --- a/flower/include/interval-set.hh +++ b/flower/include/interval-set.hh @@ -1,9 +1,20 @@ /* - interval-set.hh -- declare Interval_set + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004 Han-Wen Nienhuys + 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 . */ #ifndef INTERVAL_SET_HH diff --git a/flower/include/interval.hh b/flower/include/interval.hh index a38c14b0fc..be7074c242 100644 --- a/flower/include/interval.hh +++ b/flower/include/interval.hh @@ -1,7 +1,20 @@ /* - interval.hh -- part of flowerlib + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef INTERVAL_HH @@ -14,7 +27,7 @@ /* A T interval. This represents the closed interval [left,right]. No invariants. T must be a totally ordered ring (with division, anyway ..) - At instantiation, the function infinity () has to be defined explicitely. */ + At instantiation, the function infinity () has to be defined explicitly. */ template struct Interval_t : public Drul_array { @@ -55,10 +68,15 @@ struct Interval_t : public Drul_array at (RIGHT) = max (at (RIGHT), p); } T length () const; + + // Returns RIGHT - LEFT, even if the interval is empty. T delta () const; void set_empty (); void set_full (); + void unite_disjoint (Interval_t h, T padding, Direction d); + Interval_t union_disjoint (Interval_t h, T padding, Direction d) const; + bool is_empty () const { return at (LEFT) > at (RIGHT); @@ -121,7 +139,7 @@ struct Interval_t : public Drul_array static bool left_less (Interval_t const &a, Interval_t const &b) { - return a[LEFT] < b[RIGHT]; + return a[LEFT] < b[LEFT]; } }; diff --git a/flower/include/interval.tcc b/flower/include/interval.tcc index faf9f3db02..2f002a7e00 100644 --- a/flower/include/interval.tcc +++ b/flower/include/interval.tcc @@ -1,9 +1,20 @@ /* - interval.tcc -- implement Interval_t + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #ifndef INTERVAL_TCC @@ -96,6 +107,31 @@ Interval_t::unite (Interval_t h) at (RIGHT) = max (h.at (RIGHT), at (RIGHT)); } +/* Unites h and this interval, but in such a way + that h will lie in a particular direction from this + interval, with a minimum amount of space in between. + (That is, h will be translated before we unite, if + that is necessary to prevent overlap. */ +template +void +Interval_t::unite_disjoint (Interval_t h, T padding, Direction d) +{ + T dir = d; + T translation = dir * (at (d) + dir * padding - h.at (-d)); + if (translation > (T) 0) + h.translate (translation); + unite (h); +} + +template +Interval_t +Interval_t::union_disjoint (Interval_t h, T padding, Direction d) const +{ + Interval_t iv = *this; + iv.unite_disjoint (h, padding, d); + return iv; +} + template void Interval_t::intersect (Interval_t h) diff --git a/flower/include/libc-extension.hh b/flower/include/libc-extension.hh index 4378a11aca..3f356582c7 100644 --- a/flower/include/libc-extension.hh +++ b/flower/include/libc-extension.hh @@ -1,9 +1,20 @@ /* - libc-extension.hh -- declare some string.h extensions + This file is part of LilyPond, the GNU music typesetter. - source file of the flowerlib + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef LIBC_EXTENSION_HH diff --git a/flower/include/matrix.hh b/flower/include/matrix.hh index 6706c58878..0447d4a17b 100644 --- a/flower/include/matrix.hh +++ b/flower/include/matrix.hh @@ -1,9 +1,20 @@ /* - matrix.hh -- declare and implement 2d arrays + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #ifndef MATRIX_HH diff --git a/flower/include/memory-stream.hh b/flower/include/memory-stream.hh index 438463dc09..b4114eccf5 100644 --- a/flower/include/memory-stream.hh +++ b/flower/include/memory-stream.hh @@ -1,9 +1,20 @@ /* - memory-stream.hh -- declare Memory_out_stream + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef MEMORY_STREAM_HH diff --git a/flower/include/offset.hh b/flower/include/offset.hh index 9be837ea74..e5ee4d0730 100644 --- a/flower/include/offset.hh +++ b/flower/include/offset.hh @@ -1,7 +1,20 @@ /* - offset.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef OFFSET_HH diff --git a/flower/include/parray.hh b/flower/include/parray.hh index bef32612f0..7af20291e4 100644 --- a/flower/include/parray.hh +++ b/flower/include/parray.hh @@ -1,9 +1,20 @@ /* - parray.hh -- declare Pointer_array + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef PARRAY_HH diff --git a/flower/include/polynomial.hh b/flower/include/polynomial.hh index 54c38a8dbe..6959dc40bf 100644 --- a/flower/include/polynomial.hh +++ b/flower/include/polynomial.hh @@ -1,8 +1,24 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1993--2011 Han-Wen Nienhuys + + 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 . +*/ /* - * poly.h -- routines for manipulation of polynomials in one var - * - * (c) 1993--2009 Han-Wen Nienhuys + * polynomial.hh -- routines for manipulation of polynomials in one var */ #ifndef POLY_H diff --git a/flower/include/pqueue.hh b/flower/include/pqueue.hh index 6ee7e3a74a..981a37e463 100644 --- a/flower/include/pqueue.hh +++ b/flower/include/pqueue.hh @@ -1,9 +1,20 @@ /* - pqueue.hh -- declare PQueue_ent and PQueue + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef PQUEUE_HH diff --git a/flower/include/rational.hh b/flower/include/rational.hh index ff14900805..bf01c8b931 100644 --- a/flower/include/rational.hh +++ b/flower/include/rational.hh @@ -1,9 +1,20 @@ /* - rational.hh -- declare rational helpers + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef RATIONAL_HH diff --git a/flower/include/real.hh b/flower/include/real.hh index eba8a50b8e..a104454ad5 100644 --- a/flower/include/real.hh +++ b/flower/include/real.hh @@ -1,9 +1,20 @@ /* - real.hh -- declare Real + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef REAL_HH diff --git a/flower/include/std-string.hh b/flower/include/std-string.hh index 4cf82d33fd..fc4a1d1745 100644 --- a/flower/include/std-string.hh +++ b/flower/include/std-string.hh @@ -1,9 +1,20 @@ /* - std-string.hh -- declare string + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Jan Nieuwenhuizen - (c) 2006--2009 Jan Nieuwenhuizen + 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 . */ #ifndef STD_STRING_HH diff --git a/flower/include/std-vector.hh b/flower/include/std-vector.hh index 1b7ae23856..43fed22f68 100644 --- a/flower/include/std-vector.hh +++ b/flower/include/std-vector.hh @@ -1,9 +1,20 @@ /* - std-vector.hh -- declare vector + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Jan Nieuwenhuizen - (c) 2006--2009 Jan Nieuwenhuizen + 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 . */ #ifndef STD_VECTOR_HH @@ -26,10 +37,6 @@ using namespace std; -#if HAVE_BOOST_LAMBDA_LAMBDA_HPP -#include -#endif - template int default_compare (T const &a, T const &b) { @@ -63,7 +70,7 @@ typedef size_t vsize; #if HAVE_STL_DATA_METHOD #include #else /* !HAVE_STL_DATA_METHOD */ -#define vector __vector +#define vector __flower_vector #include #undef vector @@ -71,21 +78,21 @@ namespace std { /* Interface without pointer arithmetic (iterator) semantics. */ template > - class vector : public __vector + class vector : public __flower_vector { public: - typedef typename __vector::iterator iterator; - typedef typename __vector::const_iterator const_iterator; + typedef typename __flower_vector::iterator iterator; + typedef typename __flower_vector::const_iterator const_iterator; - vector () : __vector () + vector () : __flower_vector () { } - vector (vector const& v) : __vector (v) + vector (vector const& v) : __flower_vector (v) { } - vector (const_iterator b, const_iterator e) : __vector (b, e) + vector (const_iterator b, const_iterator e) : __flower_vector (b, e) { } @@ -227,18 +234,6 @@ find (vector const &v, T const &key) return find (v.begin (), v.end (), key); } -#if HAVE_BOOST_LAMBDA_LAMBDA_HPP -#include -using namespace boost::lambda; -template -void -junk_pointers (vector &v) -{ - for_each (v.begin (), v.end (), (delete _1, _1 = 0)); - v.clear (); -} -#else - template struct del : public unary_function { void operator() (T x) @@ -256,7 +251,6 @@ junk_pointers (vector &v) for_each (v.begin (), v.end (), del ()); v.clear (); } -#endif /* HAVE_BOOST_LAMBDA */ vector string_split (string str, char c); string string_join (vector const &strs, string infix); diff --git a/flower/include/string-convert.hh b/flower/include/string-convert.hh index 1277890929..21ec7f189e 100644 --- a/flower/include/string-convert.hh +++ b/flower/include/string-convert.hh @@ -22,6 +22,7 @@ public: static string pad_to (string s, int length); static string bool_string (bool b); static string bin2dec (string bin_string); + static string bin2hex (Byte bin_char); static string bin2hex (string bin_string); static string dec2bin (string str); static int bin2int (string bin_string); diff --git a/flower/include/tuple.hh b/flower/include/tuple.hh index 1b47e14914..1f8b0b28fb 100644 --- a/flower/include/tuple.hh +++ b/flower/include/tuple.hh @@ -1,10 +1,20 @@ /* - tuple.hh -- declare Tuple + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen Nienhuys - (c) 2006--2009 Han-Wen Nienhuys + 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 . */ #ifndef TUPLE_HH diff --git a/flower/include/virtual-methods.hh b/flower/include/virtual-methods.hh index b3b9cf008e..1d6b02388e 100644 --- a/flower/include/virtual-methods.hh +++ b/flower/include/virtual-methods.hh @@ -1,9 +1,20 @@ /* - virtual-methods.hh -- declare macros for our do-it-yourself RTTI + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef VIRTUAL_METHODS_HH @@ -12,10 +23,6 @@ #include using namespace std; -#define classname(class_ptr) demangle_classname (typeid (* (class_ptr))) - -char const * -demangle_classname (type_info const &); /* diff --git a/flower/include/warn.hh b/flower/include/warn.hh index eafdccaeca..3c2a6dc0a9 100644 --- a/flower/include/warn.hh +++ b/flower/include/warn.hh @@ -1,9 +1,20 @@ /* - warn.hh -- declare Error message functions + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef WARN_HH @@ -17,5 +28,6 @@ void non_fatal_error (string); void programming_error (string s); void progress_indication (string s); void warning (string s); +void successful (string s); #endif /* WARN_HH */ diff --git a/flower/international.cc b/flower/international.cc index 7c27dde6cc..17a9d49007 100644 --- a/flower/international.cc +++ b/flower/international.cc @@ -1,9 +1,20 @@ /* - international.cc -- implement stuff for internationalisation + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "config.hh" diff --git a/flower/interval-set.cc b/flower/interval-set.cc index 49ad550bf9..24b05c8419 100644 --- a/flower/interval-set.cc +++ b/flower/interval-set.cc @@ -1,9 +1,20 @@ /* - interval-set.hh -- implement Interval_set + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004 Han-Wen Nienhuys + 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 . */ #include "interval-set.hh" diff --git a/flower/interval.cc b/flower/interval.cc index 64f431f4f5..a372c0c5a8 100644 --- a/flower/interval.cc +++ b/flower/interval.cc @@ -1,9 +1,20 @@ /* - interval.cc -- instantiate Interval_t + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "interval.hh" diff --git a/flower/libc-extension.cc b/flower/libc-extension.cc index cca8771e73..fee28d8e15 100644 --- a/flower/libc-extension.cc +++ b/flower/libc-extension.cc @@ -1,10 +1,21 @@ /* - libc-extension.cc -- compensate for lacking libc functions. + This file is part of LilyPond, the GNU music typesetter. - source file of the flowerlib - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include @@ -23,7 +34,7 @@ strnlwr (char *start, int n) char *p = start + n; while (--p >= start) { - *p = tolower (*p); /* a macro on some compilers */ + *p = (char)tolower (*p); /* a macro on some compilers */ } return start; } @@ -34,7 +45,7 @@ strnupr (char *start, int n) char *p = start + n; while (--p >= start) { - *p = toupper (*p); /* a macro on some compilers */ + *p = (char)toupper (*p); /* a macro on some compilers */ } return start; } diff --git a/flower/memory-stream.cc b/flower/memory-stream.cc index 29917e79b0..a560a926de 100644 --- a/flower/memory-stream.cc +++ b/flower/memory-stream.cc @@ -1,9 +1,20 @@ /* - memory-stream.cc -- implement Memory_out_stream + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include diff --git a/flower/offset.cc b/flower/offset.cc index 4693c113ef..41b42d8b97 100644 --- a/flower/offset.cc +++ b/flower/offset.cc @@ -1,9 +1,20 @@ /* - offset.cc -- implement Offset + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "offset.hh" diff --git a/flower/polynomial.cc b/flower/polynomial.cc index b34700b2d0..1530baee83 100644 --- a/flower/polynomial.cc +++ b/flower/polynomial.cc @@ -1,7 +1,20 @@ /* - poly.cc -- routines for manipulation of polynomials in one var + This file is part of LilyPond, the GNU music typesetter. - (c) 1993--2009 Han-Wen Nienhuys + Copyright (C) 1993--2011 Han-Wen Nienhuys + + 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 . */ #include "polynomial.hh" diff --git a/flower/rational.cc b/flower/rational.cc index f1d661a736..7fe157c542 100644 --- a/flower/rational.cc +++ b/flower/rational.cc @@ -1,9 +1,20 @@ /* - rational.cc -- implement Rational + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "rational.hh" @@ -20,7 +31,7 @@ double Rational::to_double () const { if (sign_ == -1 || sign_ == 1 || sign_ == 0) - return ((double)sign_) * num_ / den_; + return (double)sign_ * (double)num_ / (double)den_; if (sign_ == -2) return -HUGE_VAL; else if (sign_ == 2) @@ -354,7 +365,7 @@ Rational::to_string () const int Rational::to_int () const { - return (int) num () / den (); + return (int)(num () / den ()); } int diff --git a/flower/real.cc b/flower/real.cc index 55537f8fa5..20d8069669 100644 --- a/flower/real.cc +++ b/flower/real.cc @@ -3,11 +3,9 @@ #include using namespace std; -const Real infinity_f = #ifdef INFINITY - INFINITY +const Real infinity_f = INFINITY; #else - HUGE_VAL +const Real infinity_f = HUGE_VAL; #endif - ; - + diff --git a/flower/rtti.cc b/flower/rtti.cc deleted file mode 100644 index 39941f8f74..0000000000 --- a/flower/rtti.cc +++ /dev/null @@ -1,13 +0,0 @@ -#include -using namespace std; - -#include "virtual-methods.hh" - -char const * -demangle_classname (type_info const &t) -{ - char const *s = t.name (); - while (isdigit (*s)) - s++; - return s; -} diff --git a/flower/std-string.cc b/flower/std-string.cc index 285c51883c..18ee4a832e 100644 --- a/flower/std-string.cc +++ b/flower/std-string.cc @@ -1,9 +1,20 @@ /* - std-string.cc -- implement external interface for Std_String + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Jan Nieuwenhuizen - (c) 2006--2009 Jan Nieuwenhuizen + 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 . */ #include "std-string.hh" @@ -80,7 +91,8 @@ string & replace_all (string *str, string const &find, string const &replace) { ssize len = find.length (); - for (ssize i = str->find (find); i != NPOS; i = str->find (find, i + len)) + ssize replen = replace.length (); + for (ssize i = str->find (find); i != NPOS; i = str->find (find, i + replen)) *str = str->replace (i, len, replace); return *str; } diff --git a/flower/string-convert.cc b/flower/string-convert.cc index ef64af25b6..c372520c16 100644 --- a/flower/string-convert.cc +++ b/flower/string-convert.cc @@ -33,6 +33,15 @@ String_convert::bool_string (bool b) return string (b ? "true" : "false"); } +string +String_convert::bin2hex (Byte bin_char) +{ + string str; + str += to_string ((char) nibble2hex_byte ((Byte)(bin_char >> 4))); + str += to_string ((char) nibble2hex_byte (bin_char++)); + return str; +} + string String_convert::bin2hex (string bin_string) { @@ -40,7 +49,7 @@ String_convert::bin2hex (string bin_string) Byte const *byte = (Byte const*)bin_string.data (); for (ssize i = 0; i < bin_string.length (); i++) { - str += to_string ((char)nibble2hex_byte (*byte >> 4)); + str += to_string ((char)nibble2hex_byte ((Byte)(*byte >> 4))); str += to_string ((char)nibble2hex_byte (*byte++)); } return str; @@ -197,9 +206,9 @@ Byte String_convert::nibble2hex_byte (Byte byte) { if ((byte & 0x0f) <= 9) - return (byte & 0x0f) + '0'; + return (Byte)((byte & 0x0f) + '0'); else - return (byte & 0x0f) - 10 + 'a'; + return (Byte)((byte & 0x0f) - 10 + 'a'); } /** Convert an integer to a string diff --git a/flower/warn.cc b/flower/warn.cc index 8529477cde..1c2f4ed134 100644 --- a/flower/warn.cc +++ b/flower/warn.cc @@ -1,9 +1,20 @@ /* - warn.cc -- implement warnings + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "warn.hh" @@ -41,6 +52,13 @@ message (string s) progress_indication (s); } +/* Display a success message. Always starts on a new line. */ +void +successful (string s) +{ + message (_f ("success: %s", s.c_str ()) + "\n"); +} + /* Display a warning message. Always starts on a new line. */ void warning (string s) diff --git a/input/GNUmakefile b/input/GNUmakefile index f6cc680093..5d7ab2c02f 100644 --- a/input/GNUmakefile +++ b/input/GNUmakefile @@ -1,10 +1,5 @@ depth = .. -SUBDIRS = regression tutorial mutopia manual lsr new texidocs - -examples = typography-demo les-nereides wilhelmus proportional bach-schenker cary - -LOCALSTEPMAKE_TEMPLATES=ly mutopia -EXTRA_DIST_FILES=paddy.abc +SUBDIRS = regression include $(depth)/make/stepmake.make diff --git a/input/bach-schenker.ly b/input/bach-schenker.ly deleted file mode 100644 index 25c6a2ba57..0000000000 --- a/input/bach-schenker.ly +++ /dev/null @@ -1,258 +0,0 @@ -% -*-coding: utf-8 -*- - -\header{ - composer = "J.S. Bach" - title = "Wenn wir in höchsten Nöten sein" - subtitle = "Analysis from Gene Biringer's Schenker Text, Ex. 5-27" -% "BWV641" - enteredby = "Kris Shaffer" -} - -%% -%% See http://www.shaffermusic.com/doc/schenker/index.html for more information -%% - -I = \once \override NoteColumn #'ignore-collision = ##t - -\version "2.12.0" - -staffPiano = \new PianoStaff { - \set Score.timing = ##f - \set PianoStaff.followVoice = ##t - - << - \new Staff = "RH" { % Right hand - \clef treble - \key g \major - \relative c'' { - \override Staff.NoteCollision - #'merge-differently-headed = ##t - << - { - \override Beam #'positions = #'(8 . 8) - \override NoteHead #'transparent = ##t - \override NoteHead #'duration-log = #1 - s1 b8[^\markup { - \override #'(baseline-skip . 0.5) - \column { \small {^ 3} } - } - s4. s1 a8^\markup { - \override #'(baseline-skip . 0.5) - \column { \small {^ 2} } - } - s4. s2 g8]^\markup { - \override #'(baseline-skip . 0.5) - \column { \small {^ 1} } - } - s4. - \revert Beam #'positions - \revert NoteHead #'transparent - \revert NoteHead #'duration-log - } - \\ - { - \override Stem #'transparent = ##t - s1 - \once \override Slur #'height-limit = #6 - \once \override Slur #'extra-offset = #'(1.25 . 0) - \slurDashed - \I b2_( s2 - \once \override NoteHead #'transparent = ##t - b4) s - \once \override Slur #'height-limit = #3.25 - \once \override Slur #'extra-offset = #'(.75 . 0) - a2_( s4 - \once \override NoteHead #'transparent = ##t - a) - g2 - \revert Stem #'transparent - } - \\ - \override Staff.NoteCollision - #'merge-differently-headed = ##t - { - \override Beam #'positions = #'(4 . -3.25) - \stemUp - g8[ s s4 s2 - \stemDown - \once \override NoteHead #'transparent = ##t - \I b8] s8 - \override Beam #'positions = #'(3 . -2.25) - \stemUp - a8[ s s4 - \stemDown - c8] s s2 s s - } - \\ - { - \override Stem #'transparent = ##t - \override Stem #'length = #0 - g4_\( fis^(_\markup { \tiny N } g)\) - a^(^\markup { \tiny P } b2) - b4^(^\markup { \tiny P } - \stemUp - \revert Stem #'transparent - \override Stem #'length = #10 - c8)^( s - \override Stem #'length = #14 - b4) s s - \override Stem #'length = #0 - \override Stem #'transparent = ##t - \once \override Slur #'extra-offset = #'(0 . 0.35) - c4^\( b_(_\markup { \tiny P } a)\) s2 - \revert Stem #'length - } - \\ - { - \override Stem #'transparent = ##t - \override NoteHead #'transparent = ##t - \override Stem #'length = #0 - s1 s4 e4 s - \change Staff = "LH" - fis,4 s2 - \revert Stem #'transparent - \revert NoteHead #'transparent - \revert Stem #'length - } - \\ - { - \override Stem #'transparent = ##t - \override NoteHead #'transparent = ##t - \override Stem #'length = #0 - s1 s s2 - fis'4 s - \change Staff = "LH" - g,4 s s2 - \revert Stem #'transparent - \revert NoteHead #'transparent - \revert Stem #'length - } - >> - \bar "|." - } - } - - \new Staff = "LH" { % Left hand - \clef bass - \key g \major - \relative c' { - \override Staff.NoteCollision - #'merge-differently-headed = ##t - << - { - \override Beam #'positions = #'(-8 . -8) - \override NoteHead #'transparent = ##t - \stemDown - \I g8[_\markup { \bold I } s4. s1 s s2 - \I d8_\markup { \bold V } s4. - \I g,8]_\markup { \bold I } s4. - \revert Beam #'positions - \revert NoteHead #'transparent - } - \\ - { - \override Stem #'transparent = ##t - \stemDown - \override TextScript #'extra-offset = #'(-11.75 . -12.25) - \I g'2 s1 s s2 \I d2 g,2 - \revert Stem #'transparent - } - \\ - { - \override Stem #'transparent = ##t - \once \override NoteHead #'transparent = ##t - \override Stem #'length = #0 - g'4 - \once \override TextScript #'padding = #0.25 - a4_(^\markup { \tiny P } b) - fis4^(^\markup { \tiny P } e) - \once \override NoteHead #'transparent = ##t - \once \override Slur #'height-limit = #1.5 - c4^( - d)^\markup { \tiny N } - \once \override NoteHead #'transparent = ##t - \once \override Slur #'extra-offset = #'(0 . 0.5) - \I fis,4_( - \revert Stem #'transparent - \override Stem #'length = #10 - \stemDown - g4) s - \once \override Slur #'extra-offset = #'(0 . 0.25) - \I c8_( s - \override Stem #'transparent = ##t - \revert Stem #'length - a4) - \once \override NoteHead #'transparent = ##t - \I d4^( d,4) s2 - } - \\ - { - \override Stem #'transparent = ##t - \override NoteHead #'transparent = ##t - \I g'4^( s b) s2 - \revert Stem #'transparent - \revert NoteHead #'transparent - \override Beam #'positions = #'(-4 . 1) - \stemDown - c,8[ s s4 - \stemUp - fis,8] s - \override Beam #'positions = #'(1 . -4) - g8[ s - \stemDown - b8] s - \revert Beam #'positions - \override Stem #'transparent = ##t - \override NoteHead #'transparent = ##t - c4^( s d4) s s2 - } - \\ - { - \override Stem #'transparent = ##t - \override NoteHead #'transparent = ##t - \override Stem #'length = #0 - \stemDown - \once \override Slur #'height-limit = #3 - \once \override Slur #'extra-offset = #'(0 . 0.25) - \I g4_( s2. e4) s2. s2 s1 s2 - \revert Stem #'transparent - \revert NoteHead #'transparent - } - \\ - { - \override Stem #'transparent = ##t - \override NoteHead #'transparent = ##t - \slurDashed - \once \override Slur #'height-limit = #6.0 - \once \override Slur #'extra-offset = #'(0.5 . -0.25) - \override Stem #'length = #0 - g4_( s2. s1 g,4) s s1 s2 - \revert Stem #'transparent - \revert NoteHead #'transparent - } - >> - \bar "|." - } - } - >> -} - - -\score { - << - \staffPiano - >> - - \midi { - } - - \layout { - indent = 0.0 - ragged-right = ##t - \context { \Staff \remove "Time_signature_engraver" } - } -} - - -\paper { -} diff --git a/input/cary-layout.ly b/input/cary-layout.ly deleted file mode 100644 index 740a025086..0000000000 --- a/input/cary-layout.ly +++ /dev/null @@ -1,104 +0,0 @@ - -\version "2.12.0" - -\layout { - indent = #0 - ragged-right = ##t - \context { - \Score - - proportionalNotationDuration = #(ly:make-moment 1 64) - \override Beam #'breakable = ##t - autoBeaming = ##f - tupletFullLength = ##t - \override BarNumber #'transparent = ##t - \override BarLine #'transparent = ##t - \override SpanBar #'transparent = ##t - \override Beam #'break-overshoot = #'(-0.5 . 1.0) - \override TextScript #'staff-padding = #6 - \override Glissando #'thickness = #3 - \override SpacingSpanner #'strict-grace-spacing = ##t - \override TupletBracket #'bracket-visibility = ##t - \override NoteColumn #'ignore-collision = ##t - } -} - -\paper { - 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 } } - printfirst-page-number = ##t - print-page-number = ##t - ragged-last-bottom = ##t -} - -#(set-global-staff-size 14) - - -%% definitions. - - -ppX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "pp" #:hspace 0))) -pX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "p" #:hspace 0))) -mpX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "mp" #:hspace 0))) -fX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "f" #:hspace 0))) -ffX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "ff" #:hspace 0))) -sfp = #(make-dynamic-script "sfp") -sfpp = #(make-dynamic-script "sfpp") -sffp = #(make-dynamic-script "sffp") -sffpp = #(make-dynamic-script "sffpp") - -beam = #(define-music-function (parser location left right) (number? number?) - (cond ((and (= left 0) (> right 0)) - #{ - \set stemRightBeamCount = #$right - #}) - - ((and (> left 0) (= right 0)) - #{ - \set stemLeftBeamCount = #$left - #}) - - (else - #{ - \set stemLeftBeamCount = #$left - \set stemRightBeamCount = #$right - #}) - ) -) - -fraction = #(define-music-function (parser location music) (ly:music?) - #{ \tweak #'text #tuplet-number::calc-fraction-text $music #}) - -triangle = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(do do do do do do do) $music #}) - -semicircle = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(re re re re re re re) $music #}) - -blackdiamond = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(mi mi mi mi mi mi mi) $music #}) - -tiltedtriangle = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(fa fa fa fa fa fa fa) $music #}) - -square = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(la la la la la la la) $music #}) - -wedge = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(ti ti ti ti ti ti ti) $music #}) - -harmonic = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) $music #}) - -cross = #(define-music-function (parser location music) (ly:music?) - #{ \once \set shapeNoteStyles = #'#(cross cross cross cross cross cross cross) $music #}) - -white = #(define-music-function (parser location music) (ly:music?) - #{ \once \override NoteHead #'duration-log = #1 $music #}) - diff --git a/input/example-1.ly b/input/example-1.ly deleted file mode 100644 index 517be6e0bc..0000000000 --- a/input/example-1.ly +++ /dev/null @@ -1,21 +0,0 @@ -%%% A simple scale in LilyPond - -\relative { - c d e f g a b c -} - -%{ -Type - - lilypond example-1 - xpdf example-1 # or your PDF viewer here - -For learning LilyPond, please read the tutorial - - http://lilypond.org/tutorial - -also included in the user-manual. -%} - -%% Optional version number -\version "2.12.0" diff --git a/input/example-2.ly b/input/example-2.ly deleted file mode 100644 index 64282ab3c2..0000000000 --- a/input/example-2.ly +++ /dev/null @@ -1,21 +0,0 @@ -%%% Some tied, slurred and beamed notes of different taste in LilyPond -\relative { - a'2 ~ a4( e8[) e] a,16[ a a a] -} - -%{ -Type - - lilypond example-2 - xpdf example-2 # or your PDF viewer here - -For learning LilyPond, please read the tutorial - - http://lilypond.org/tutorial - -also included in the user-manual. -%} - -%% Optional version number -\version "2.12.0" - diff --git a/input/example-3.ly b/input/example-3.ly deleted file mode 100644 index 34291864c9..0000000000 --- a/input/example-3.ly +++ /dev/null @@ -1,36 +0,0 @@ -%%% A full example with two staves - -\header { - title = "And now, example 3" - copyright = "public domain" -} - -one = \relative { - c' d e f -} - -two = \relative { - \clef "bass" - c2 g2 -} - -<< - \new Staff \one - \new Staff \two ->> - -%{ -Type - - lilypond example-3 - xpdf example-3 # or your PDF viewer here - -For learning LilyPond, please read the tutorial - - http://lilypond.org/tutorial - -also included in the user-manual. -%} - -%% Optional version number -\version "2.12.0" diff --git a/input/lsr/GNUmakefile b/input/lsr/GNUmakefile deleted file mode 100644 index 8afa862bb2..0000000000 --- a/input/lsr/GNUmakefile +++ /dev/null @@ -1,70 +0,0 @@ -depth = ../.. - -# urg, can't name itely templates foo.itely.in because of standard rule - -STEPMAKE_TEMPLATES=documentation texinfo -LOCALSTEPMAKE_TEMPLATES=lilypond ly -EXTRA_DIST_FILES += README $(call src-wildcard,*.snippet-list) - -default: - -ifneq ($(out),) -MAIN_INFO_DOC = lilypond-snippets -INFO_DOCS = lilypond-snippets -INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info) -INFO_IMAGES_DIR = lilypond-snippets -DEST_INFO_IMAGES_SUBDIR = input/lsr -endif - -include $(depth)/make/stepmake.make - -TEXI2HTML_FLAGS += -D short_toc - -IN_ITELY_FILES = $(call src-wildcard,*-intro.itely) -GENERATED_ITELY_FILES = $(IN_ITELY_FILES:%-intro.itely=$(outdir)/%.itely) - -$(outdir)/%.itely: %-intro.itely %.snippet-list - xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^) - -$(outdir)/lilypond-snippets.texi: $(GENERATED_ITELY_FILES) $(LY_FILES) - -source-links = $(outdir)/source $(outdir)/lilypond-snippets/source - -$(outdir)/source: - @rm -f $(@) - ln -sf $(depth) $(@) - -$(outdir)/%/source: - @rm -f $(@) - mkdir -p $(dir $@) - ln -sf $(depth)/.. $(@) - -info: $(INFO_FILES) - -ifneq ($(out),www) -# cancel install-info target and $(INFO_FILES) 'default' target -# (there is no lilypond-snippets.info without images) -local-install-info: - -$(INFO_FILES): - true -endif - -local-clean: - rm -f $(INFO_IMAGES_DIR) - -ifeq ($(out),www) -# All web targets, except info image symlinks and info docs are -# installed in non-recursing target from TOP-SRC-DIR -local-install-WWW: local-install-info -local-uninstall-WWW: local-uninstall-info - -local-WWW-1: info $(outdir)/lilypond-snippets.pdf \ - $(outdir)/lilypond-snippets.texi - -local-WWW-2: $(outdir)/lilypond-snippets/index.html \ - $(outdir)/lilypond-snippets-big-page.html \ - $(source-links) -endif - -.SECONDARY: diff --git a/input/lsr/README b/input/lsr/README deleted file mode 100644 index 8c8683f216..0000000000 --- a/input/lsr/README +++ /dev/null @@ -1,20 +0,0 @@ -This directory contains examples generated automatically from LSR: -http://lsr.dsi.unimi.it/ - -To update this directory, do at top of the source tree - -scripts/auxiliar/makelsr.py DIR - -where DIR is the directory unpacked from lsr-snippets-doc-DATE tarball -available on http://lsr.dsi.unimi.it/download. - -Snippets in input/new may "overwrite" snippets from LSR, e.g. for -snippets that convert-ly can't automatically convert to current ly -syntax; snippets may also be added to input/new to demonstrate new -features in development series. - -Any changes made to .ly files will be lost next time makelsr.py is -run. Please make updates to the LSR database or input/new directly. -You must be an editor to change "approved" snippets in LSR; otherwise -just copy the snippet you want to modify in a new snippet, and tag it -with the "correction-wanted" tag. diff --git a/input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly b/input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly deleted file mode 100644 index 025435740b..0000000000 --- a/input/lsr/adding-a-figured-bass-above-or-below-the-notes.ly +++ /dev/null @@ -1,63 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords, ancient-notation, contexts-and-engravers" - - texidoces = " -Al escribir un bajo cifrado, existe una forma de especificar si -queremos que las cifras se sitúen encima o debajo de las notas del -bajo, mediante la definición de la propiedad -@code{BassFigureAlignmentPositioning #'direction} (exclusivamente -dentro de un contexto @code{Staff}). Se puede elegir entre -@code{#UP} (o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, -centrado) y @code{#DOWN} (o @code{#-1}, abajo). - -Como podemos ver, esta propiedad se puede cambiar tantas veces -como queramos. Utilice @code{\\once \\override} si no quiere que el -truco se aplique a toda la partitura. - -" - doctitlees = "Añadir un bajo cifrado encima o debajo de las notas" - - doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes" - - texidoc = " -When writing a figured bass, here's a way to specify if you want your -figures to be placed above or below the bass notes, by defining the -@code{BassFigureAlignmentPositioning #'direction} property (exclusively -in a @code{Staff} context). Choices are @code{#UP} (or @code{#1}), -@code{#CENTER} (or @code{#0}) and @code{#DOWN} (or @code{#-1}). - -As you can see here, this property can be changed as many times as you -wish. Use @code{\\once \\override} if you don't want the tweak to apply -to the whole score. - -" - doctitle = "Adding a figured bass above or below the notes" -} % begin verbatim - -bass = { - \clef bass - g4 b, c d - e d8 c d2 -} -continuo = \figuremode { - <_>4 <6>8 - \once \override Staff.BassFigureAlignmentPositioning #'direction = #CENTER - <5/>8 <_>4 - \override Staff.BassFigureAlignmentPositioning #'direction = #UP - <_+>4 <6> - \set Staff.useBassFigureExtenders = ##t - \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN - <4>4. <4>8 <_+>4 -} -\score { - << - \new Staff = bassStaff \bass - \context Staff = bassStaff \continuo - >> -} - - diff --git a/input/lsr/adding-ambitus-per-voice.ly b/input/lsr/adding-ambitus-per-voice.ly deleted file mode 100644 index 3e0dcb4464..0000000000 --- a/input/lsr/adding-ambitus-per-voice.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, staff-notation, vocal-music" - - doctitlees = "Añadir un ámbito por voz" - texidoces = " -Se puede añadir un ámbito por cada voz. En este caso, el ámbito se -debe desplazar manualmente para evitar colisiones. - -" - -texidocde = " -Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie -manual verschoben werden, um Zusammenstöße zu verhindern. - -" -doctitlede = "Ambitus pro Stimme hinzufügen" - - texidoc = " -Ambitus can be added per voice. In this case, the ambitus must be moved -manually to prevent collisions. - -" - doctitle = "Adding ambitus per voice" -} % begin verbatim - -\new Staff << - \new Voice \with { - \consists "Ambitus_engraver" - } \relative c'' { - \override Ambitus #'X-offset = #2.0 - \voiceOne - c4 a d e - f1 - } - \new Voice \with { - \consists "Ambitus_engraver" - } \relative c' { - \voiceTwo - es4 f g as - b1 - } ->> - diff --git a/input/lsr/adding-an-extra-staff-at-a-line-break.ly b/input/lsr/adding-an-extra-staff-at-a-line-break.ly deleted file mode 100644 index 56bb6baf53..0000000000 --- a/input/lsr/adding-an-extra-staff-at-a-line-break.ly +++ /dev/null @@ -1,61 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, contexts-and-engravers, breaks" - - 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 -(reservado para hacer sitio a un cambio de armadura que de todas -formas no se va a imprimir). La solución alternativa es añadir un -ajuste para @code{Staff.explicitKeySignatureVisibility} como se -muestra en el ejemplo. En las versiones 2.10 y anteriores, -también se necesita un ajuste similar para las indicaciones de -compás (véase el ejemplo). - -" - doctitlees = "Añadir un pentagrama adicional en un salto de línea" - - texidoc = " -When adding a new staff at a line break, some extra space is -unfortunately added at the end of the line before the break (to fit in -a key signature change, which will never be printed anyway). The -workaround is to add a setting of -@code{Staff.explicitKeySignatureVisibility} as is shown in the example. -In versions 2.10 and earlier, a similar setting for the time signatures -is also required (see the example). - - - -" - doctitle = "Adding an extra staff at a line break" -} % begin verbatim - -\score { - \new StaffGroup \relative c'' { - \new Staff - \key f \major - c1 c^"Unwanted extra space" \break - << { c1 | c } - \new Staff { - \key f \major - \once \override Staff.TimeSignature #'stencil = ##f - c1 | c - } - >> - c1 | c^"Fixed here" \break - << { c1 | c } - \new Staff { - \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible - % The next line is not needed in 2.11.x or later: - \once \override Staff.TimeSignature #'break-visibility = #end-of-line-invisible - \key f \major - \once \override Staff.TimeSignature #'stencil = ##f - c1 | c - } - >> - } -} - diff --git a/input/lsr/adding-an-extra-staff.ly b/input/lsr/adding-an-extra-staff.ly deleted file mode 100644 index cbdafda5e6..0000000000 --- a/input/lsr/adding-an-extra-staff.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, contexts-and-engravers" - - texidoces = " -Se puede añadir (posiblemente de forma temporal) un pentagrama -nuevo una vez que la pieza ha comenzado. - -" - doctitlees = "Añadir un pentagrama nuevo" - - texidoc = " -An extra staff can be added (possibly temporarily) after the start of a -piece. - -" - doctitle = "Adding an extra staff" -} % begin verbatim - -\score { - << - \new Staff \relative c'' { c1 | c | c | c | c } - \new StaffGroup \relative c'' { - \new Staff { - c1 | c << - c1 \new Staff { - \once \override Staff.TimeSignature #'stencil = ##f - c1 - } - >> - c1 - } - } - >> -} - diff --git a/input/lsr/adding-bar-lines-to-chordnames-context.ly b/input/lsr/adding-bar-lines-to-chordnames-context.ly deleted file mode 100644 index c29a3eacd5..0000000000 --- a/input/lsr/adding-bar-lines-to-chordnames-context.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoces = " -Para añadir indicaciones de línea divisoria dentro del contexto de -los nombres de acorde @code{ChordNames}, incluya el grabador -@code{Bar_engraver}. - -" - doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)" - - texidoc = " -To add bar line indications in the @code{ChordNames} context, add the -@code{Bar_engraver}. - -" - doctitle = "Adding bar lines to ChordNames context" -} % begin verbatim - -\new ChordNames \with { - \override BarLine #'bar-size = #4 - \consists "Bar_engraver" -} -\chordmode { - f1:maj7 f:7 bes:7 -} - - diff --git a/input/lsr/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly b/input/lsr/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly deleted file mode 100644 index c794480c20..0000000000 --- a/input/lsr/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly +++ /dev/null @@ -1,46 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, expressive-marks" - - texidoces = " -La sintaxis de LilyPond puede implicar muchas colocaciones poco -comunes para los paréntesis, corchetes, etc, que a veces se tienen -que intercalar. Por ejemplo, al introducir una barra manual, el -corchete izquierdo de apertura se debe escribir después de la nota -inicial y de su duración, no antes. De forma similar, el corchete -derecho de cierre debe seguir inmediatamente a la nota que se -quiere situar al final del barrado, incluso si esta nota resulta -estar dentro de un grupo de valoración especial. Este fragmento de -código muestra cómo combinar el barrado manual, las ligaduras de -expresión y de unión y las ligaduras de fraseo, con secciones de -valoración especial (encerradas entre llaves). - -" - doctitlees = "Añadir barras, ligaduras de expresión y de unión, etc. cuando se usan ritmos con y sin grupos de valoración especial." - - texidoc = " -LilyPond syntax can involve many unusual placements for parentheses, -brackets etc., which might sometimes have to be interleaved. For -example, when entering a manual beam, the left square bracket has to be -placed after the starting note and its duration, not before. Similarly, -the right square bracket should directly follow the note which is to be -at the end of the requested beaming, even if this note happens to be -inside a tuplet section. This snippet demonstrates how to combine -manual beaming, manual slurs, ties and phrasing slurs with tuplet -sections (enclosed within curly braces). - -" - doctitle = "Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms" -} % begin verbatim - -{ - r16[ g16 \times 2/3 { r16 e'8] } - g16( a \times 2/3 { b d e') } - g8[( a \times 2/3 { b d') e'] ~ } - \time 2/4 - \times 4/5 { e'32\( a b d' e' } a'4.\) -} - diff --git a/input/lsr/adding-fingerings-to-a-score.ly b/input/lsr/adding-fingerings-to-a-score.ly deleted file mode 100644 index 422b1c5fd2..0000000000 --- a/input/lsr/adding-fingerings-to-a-score.ly +++ /dev/null @@ -1,18 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, fretted-strings" - - texidoc = " -Fingering instructions can be entered using a simple syntax. - -" - doctitle = "Adding fingerings to a score" -} % begin verbatim - -\relative c'' { - c4-1 d-2 f-4 e-3 -} - diff --git a/input/lsr/adding-fingerings-to-tablatures.ly b/input/lsr/adding-fingerings-to-tablatures.ly deleted file mode 100644 index 468fad55e8..0000000000 --- a/input/lsr/adding-fingerings-to-tablatures.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - texidocfr = "Ajout de doigtés à des tablatures" - - doctitlefr = " -L'ajout de doigtés à des tablatures s'obtient en conjuguant des -@code{\\markup} et des @code{\\finger}. -" - - texidoc = " -To add fingerings to tablatures, use a combination of @code{\\markup} -and @code{\\finger}. - -" - doctitle = "Adding fingerings to tablatures" -} % begin verbatim - -one = \markup { \finger 1 } -two = \markup { \finger 2 } -threeTwo = \markup { - \override #'(baseline-skip . 2) - \column { - \finger 3 - \finger 2 - } -} -threeFour = \markup { - \override #'(baseline-skip . 2) - \column { - \finger 3 - \finger 4 - } -} - -\score { - \new TabStaff { - \stemUp - e8\4^\one b\2 ^>[ b\2 e\4] - ^>^\threeTwo[ b\2 e\4] - } -} - diff --git a/input/lsr/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly b/input/lsr/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly deleted file mode 100644 index 9ed6baf65e..0000000000 --- a/input/lsr/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -La función @code{\\parenthesize} es un truco especial que encierra -objetos entre paréntesis. El grob asociado es -@code{Score.ParenthesesItem}. - -" - doctitlees = "Encerrar entre paréntesis una marca expresiva o una nota de un acorde" - - texidoc = " -The @code{\\parenthesize} function is a special tweak that encloses -objects in parentheses. The associated grob is -@code{Score.ParenthesesItem}. - -" - doctitle = "Adding parentheses around an expressive mark or chordal note" -} % begin verbatim - -\relative c' { - c2-\parenthesize -> - \override ParenthesesItem #'padding = #0.1 - \override ParenthesesItem #'font-size = #-4 - 2 -} - - diff --git a/input/lsr/adding-the-current-date-to-a-score.ly b/input/lsr/adding-the-current-date-to-a-score.ly deleted file mode 100644 index aa62a4a373..0000000000 --- a/input/lsr/adding-the-current-date-to-a-score.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, titles" - - texidoces = " -Con algo de código de Scheme, se puede añadir fácilmente la fecha -actual a una partitura. -" - doctitlees = "Añadir la fecha actual a una partitura" - - texidocfr = " -Avec un peu de code Scheme, voici comment ajouter facilement -la date du jour à votre partition. -" - - doctitlefr = "Ajout de la date du jour à une partition" - - texidoc = " -With a little Scheme code, the current date can easily be added to a -score. - -" - doctitle = "Adding the current date to a score" -} % begin verbatim - -% first, define a variable to hold the formatted date: -date = #(strftime "%d-%m-%Y" (localtime (current-time))) - -% use it in the title block: -\header { - title = "Including the date!" - subtitle = \date -} - -\score { - \relative c'' { - c4 c c c - } -} -% and use it in a \markup block: -\markup { - \date -} - diff --git a/input/lsr/adding-volta-brackets-to-additional-staves.ly b/input/lsr/adding-volta-brackets-to-additional-staves.ly deleted file mode 100644 index c615480a7f..0000000000 --- a/input/lsr/adding-volta-brackets-to-additional-staves.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats" - - texidoces = " -El grabador @code{Volta_engraver} reside de forma predeterminada -dentro del contexto de @code{Score}, y los corchetes de la repetición -se imprimen así normalmente sólo encima del pentagrama superior. Esto -se puede ajustar añadiendo el grabador @code{Volta_engraver} al -contexto de @code{Staff} en que deban aparecer los corchetes; véase -también el fragmento de código \"Volta multi staff\". - -" - doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas" - - texidoc = " -The @code{Volta_engraver} by default resides in the @code{Score} -context, and brackets for the repeat are thus normally only printed -over the topmost staff. This can be adjusted by adding the -@code{Volta_engraver} to the @code{Staff} context where the brackets -should appear; see also the \"Volta multi staff\" snippet. - -" - doctitle = "Adding volta brackets to additional staves" -} % begin verbatim - -<< - \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } - \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } - \new Staff \with { \consists "Volta_engraver" } { c'2 g' e' a' } - \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } ->> - diff --git a/input/lsr/additional-voices-to-avoid-collisions.ly b/input/lsr/additional-voices-to-avoid-collisions.ly deleted file mode 100644 index 32eb654aad..0000000000 --- a/input/lsr/additional-voices-to-avoid-collisions.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes" - - doctitlees = "Voces adicionales para evitar colisiones" - texidoces = " -En ciertos casos de polifonía compleja, se necesitan voces adicionales -para evitar colisiones entre las notas. Las voces adicionales se -añaden definiendo una variable que utiliza la función de Scheme -context-spec-music. - -" - - texidoc = " -In some instances of complex polyphonic music, additional voices are -necessary to prevent collisions between notes. If more than four -parallel voices are needed, additional voices can be added by defining -a variable using the Scheme function @code{context-spec-music}. - -" - doctitle = "Additional voices to avoid collisions" -} % begin verbatim - -voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) -\relative c'' { - \time 3/4 \key d \minor \partial 2 - << - { \voiceOne - a4. a8 - e'4 e4. e8 - f4 d4. c8 - } \\ { - \voiceThree - f,2 - bes4 a2 - a4 s2 - } \\ { - \voiceFive - s2 - g4 g2 - f4 f2 - } \\ { - \voiceTwo - d2 - d4 cis2 - d4 bes2 - } - >> -} - diff --git a/input/lsr/adjusting-lyrics-vertical-spacing.ly b/input/lsr/adjusting-lyrics-vertical-spacing.ly deleted file mode 100644 index db1c17cbb3..0000000000 --- a/input/lsr/adjusting-lyrics-vertical-spacing.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, vocal-music, spacing" - - texidoces = " -Este fragmento de código muestra cómo situar la línea de base de la -letra más cerca del pentagrama. - -" - doctitlees = "Ajuste del especiado vertical de la letra" - - texidocfr = " -Cet extrait illustre la manière de rapprocher la ligne de paroles -de la portée. - -" - doctitlefr = "Ajustement de l'espacement vertical des paroles" - - - texidoc = " -This snippet shows how to bring the lyrics line closer to the staff. - -" - doctitle = "Adjusting lyrics vertical spacing" -} % begin verbatim - -% Default layout: -<< - \new Staff \new Voice = melody \relative c' { - c4 d e f - g4 f e d - c1 - } - \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } - -% Reducing the minimum space below the staff and above the lyrics: - \new Staff \with { - \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 4) - } - \new Voice = melody \relative c' { - c4 d e f - g4 f e d - c1 - } - \new Lyrics \with { - \override VerticalAxisGroup #'minimum-Y-extent = #'(-1.2 . 1) - } - \lyricsto melody { aa aa aa aa aa aa aa aa aa } ->> - diff --git a/input/lsr/adjusting-the-shape-of-falls-and-doits.ly b/input/lsr/adjusting-the-shape-of-falls-and-doits.ly deleted file mode 100644 index a0f5f2a824..0000000000 --- a/input/lsr/adjusting-the-shape-of-falls-and-doits.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Puede ser necesario trucar la propiedad -@code{shortest-duration-space} para poder ajustar el tamaño de las -caídas y subidas de tono («falls» y «doits»). - -" - doctitlees = "Ajustar la forma de las subidas y caídas de tono" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um -das Aussehen von unbestimmten Glissandi anzupassen. - -" - doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen" - - texidoc = " -The @code{shortest-duration-space} property may have to be tweaked to -adjust the shape of falls and doits. - -" - doctitle = "Adjusting the shape of falls and doits" -} % begin verbatim - -\relative c'' { - \override Score.SpacingSpanner #'shortest-duration-space = #4.0 - c2-\bendAfter #+5 - c2-\bendAfter #-3 - c2-\bendAfter #+8 - c2-\bendAfter #-6 -} - diff --git a/input/lsr/aligning-and-centering-instrument-names.ly b/input/lsr/aligning-and-centering-instrument-names.ly deleted file mode 100644 index c791cf0c4d..0000000000 --- a/input/lsr/aligning-and-centering-instrument-names.ly +++ /dev/null @@ -1,86 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, paper-and-layout, titles" - - texidoces = " -Los nombres de instrumento se imprimen generalmente a la izquierda de -los pentagramas. Para alinear los nombres de varios instrumentos -distintos, sitúelos dentro de un bloque @code{\\markup} y utilice una -de las siguientes posiblidades: - -* - Nombres de instrumento alineados por la derecha: es el - comportamiento predeterminado - -* - Nombres de instrumento centrados: la utilización de la instrucción - @code{\\hcenter-in #n} sitúa los nombres de instrumento dentro de - un rectángulo separado, donde @code{n} es la anchura del - rectángulo - -* - Nombres de instrumento alineados por la izquierda: los nombres se - imprimen en la parte superior de un rectángulo vacío, utilizando - la instrucción @code{\\combine} con un objeto @code{\\hspace #n}. - -" - doctitlees = "Alinear y centrar los nombres de instrumento" - - texidoc = " -The horizontal alignment of instrument names is tweaked by changing the -@code{Staff.InstrumentName #'self-alignment-X} property. The -@code{\\layout} variables @code{indent} and @code{short-indent} define -the space in which the instrument names are aligned before the first -and the following systems, respectively. - -" - doctitle = "Aligning and centering instrument names" -} % begin verbatim - -\paper { - left-margin = 3\cm -} - -\score { - \new StaffGroup << - \new Staff { - \override Staff.InstrumentName #'self-alignment-X = #LEFT - \set Staff.instrumentName = \markup \left-column { - "Left aligned" - "instrument name" - } - \set Staff.shortInstrumentName = #"Left" - c''1 - \break - c''1 - } - \new Staff { - \override Staff.InstrumentName #'self-alignment-X = #CENTER - \set Staff.instrumentName = \markup \center-column { - Centered - "instrument name" - } - \set Staff.shortInstrumentName = #"Centered" - g'1 - g'1 - } - \new Staff { - \override Staff.InstrumentName #'self-alignment-X = #RIGHT - \set Staff.instrumentName = \markup \right-column { - "Right aligned" - "instrument name" - } - \set Staff.shortInstrumentName = #"Right" - e'1 - e'1 - } - >> - \layout { - ragged-right = ##t - indent = 4\cm - short-indent = 2\cm - } -} diff --git a/input/lsr/aligning-bar-numbers.ly b/input/lsr/aligning-bar-numbers.ly deleted file mode 100644 index f1d171c3bc..0000000000 --- a/input/lsr/aligning-bar-numbers.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -Bar numbers by default are right-aligned to their parent object. This -is usually the left edge of a line or, if numbers are printed within a -line, the left hand side of a bar line. The numbers may also be -positioned directly over the bar line or left-aligned to the bar line. - -" - doctitle = "Aligning bar numbers" -} % begin verbatim - -\relative c' { - \set Score.currentBarNumber = #111 - \override Score.BarNumber #'break-visibility = #'#(#t #t #t) - % Increase the size of the bar number by 2 - \override Score.BarNumber #'font-size = #2 - % Print a bar number every second measure - \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) - c1 | c1 - % Center-align bar numbers - \override Score.BarNumber #'self-alignment-X = #CENTER - c1 | c1 - % Left-align bar numbers - \override Score.BarNumber #'self-alignment-X = #LEFT - c1 | c1 -} - diff --git a/input/lsr/aligning-marks-with-various-notation-objects.ly b/input/lsr/aligning-marks-with-various-notation-objects.ly deleted file mode 100644 index 40a4c11e50..0000000000 --- a/input/lsr/aligning-marks-with-various-notation-objects.ly +++ /dev/null @@ -1,90 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text" - - 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 -objetos se encuentran @code{ambitus}, @code{breathing-sign}, -@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge}, -@code{key-cancellation}, @code{key-signature} y @code{time-signature}. - -En estos casos, las marcas de texto se centran horizontalmente sobre -el objeto, aunque esto se puede cambiar, como se muestra en la segunda -línea de este ejemplo (en una partitura con varios pentagramas, se -debe hacer este ajuste para todos los pentagramas). - -" - doctitlees = "Alinear marcas con varios objetos de notación" - - texidoc = " -If specified, text marks may be aligned with notation objects other -than bar lines. These objects include @code{ambitus}, -@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, -@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and -@code{time-signature}. - - - -In such cases, text marks will be horizontally centered above the -object. However this can be changed, as demonstrated on the second line -of this example (in a score with multiple staves, this setting should -be done for all the staves). - - - -" - doctitle = "Aligning marks with various notation objects" -} % begin verbatim - -\relative c' { - e1 - - % the RehearsalMark will be centered above the Clef - \override Score.RehearsalMark #'break-align-symbols = #'(clef) - \key a \major - \clef treble - \mark "↓" - e1 - - % the RehearsalMark will be centered above the TimeSignature - \override Score.RehearsalMark #'break-align-symbols = #'(time-signature) - \key a \major - \clef treble - \time 3/4 - \mark "↓" - e2. - - % the RehearsalMark will be centered above the KeySignature - \override Score.RehearsalMark #'break-align-symbols = #'(key-signature) - \key a \major - \clef treble - \time 4/4 - \mark "↓" - e1 - - \break - e1 - - % the RehearsalMark will be aligned with the left edge of the KeySignature - \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT - \mark "↓" - \key a \major - e1 - - % the RehearsalMark will be aligned with the right edge of the KeySignature - \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT - \key a \major - \mark "↓" - e1 - - % the RehearsalMark will be aligned with the left edge of the KeySignature - % and then shifted right by one unit. - \once \override Score.KeySignature #'break-align-anchor = #1 - \key a \major - \mark "↓" - e1 -} diff --git a/input/lsr/aligning-objects-created-with-the--mark-command.ly b/input/lsr/aligning-objects-created-with-the--mark-command.ly deleted file mode 100644 index 8cd5b58c2a..0000000000 --- a/input/lsr/aligning-objects-created-with-the--mark-command.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text" - - texidoc = " -By default the @code{\\mark} command centers objects over a bar line. -This behavior can be modified to align at right or left. - -" - doctitle = "Aligning objects created with the \\mark command" -} % begin verbatim - -\relative c' { - c1 \mark "(Center)" - c1 - \once \override Score.RehearsalMark #'self-alignment-X = #LEFT - \mark "(Left)" - c4 c c c - c4 c c c - \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT - \mark "(Right)" - c1 -} - - diff --git a/input/lsr/allowing-fingerings-to-be-printed-inside-the-staff.ly b/input/lsr/allowing-fingerings-to-be-printed-inside-the-staff.ly deleted file mode 100644 index 30b4e02a5f..0000000000 --- a/input/lsr/allowing-fingerings-to-be-printed-inside-the-staff.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, fretted-strings, spacing" - - texidoces = " -Las cifras de digitación se imprimen de forma predeterminada fuera -del pentagrama. Sin embargo, este comportamiento se puede -cancelar. - -" - doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - texidocfr = " -L'empilement des indications de doigté se fait par défaut à l'extérieur de la portée. Néanmoins, il est possible d'annuler ce comportement. - -" - doctitlefr = "Impression des doigtés à l'intérieur de la portée" - - texidoc = " -By default, vertically oriented fingerings are positioned outside the -staff. However, this behavior can be canceled. - -" - doctitle = "Allowing fingerings to be printed inside the staff" -} % begin verbatim - -\relative c' { - 2 - \once \override Fingering #'staff-padding = #'() - 2 -} - diff --git a/input/lsr/ambitus-with-multiple-voices.ly b/input/lsr/ambitus-with-multiple-voices.ly deleted file mode 100644 index 4477c8e60c..0000000000 --- a/input/lsr/ambitus-with-multiple-voices.ly +++ /dev/null @@ -1,48 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, vocal-music" - - doctitlees = "Ámbitos con varias voces" - texidoces = " -La adición del grabador @code{Ambitus_engraver} al contexto de -@code{Staff} crea un solo ámbito por pentagrama, incluso en el caso de -pentagramas con varias voces. - -" - -texidocde = " -Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext -hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem -Fall, dass mehrere Stimmen sich im gleichen System befinden. -" - doctitlede = "Ambitus mit vielen Stimmen" - - texidoc = " -Adding the @code{Ambitus_engraver} to the @code{Staff} context creates -a single ambitus per staff, even in the case of staves with multiple -voices. - -" - doctitle = "Ambitus with multiple voices" -} % begin verbatim - -\new Staff \with { - \consists "Ambitus_engraver" - } -<< - \new Voice \relative c'' { - \voiceOne - c4 a d e - f1 - } - \new Voice \relative c' { - \voiceTwo - es4 f g as - b1 - } ->> - - diff --git a/input/lsr/ambitus.ly b/input/lsr/ambitus.ly deleted file mode 100644 index 6d343008f0..0000000000 --- a/input/lsr/ambitus.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, vocal-music" - - texidoc = " -Ambitus indicate pitch ranges for voices. - - -Accidentals only show up if they are not part of the key signature. -@code{AmbitusNoteHead} grobs also have ledger lines. - -" - doctitle = "Ambitus" -} % begin verbatim - -\layout { - \context { - \Voice - \consists "Ambitus_engraver" - } -} - -<< - \new Staff { - \relative c' { - \time 2/4 - c4 f' - } - } - \new Staff { - \relative c' { - \time 2/4 - \key d \major - cis4 as' - } - } ->> - diff --git a/input/lsr/analysis-brackets-above-the-staff.ly b/input/lsr/analysis-brackets-above-the-staff.ly deleted file mode 100644 index ad9000d305..0000000000 --- a/input/lsr/analysis-brackets-above-the-staff.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, tweaks-and-overrides" - - texidoces = " -De forma predeterminada se añaden corchetes de análisis sencillos -debajo del pentagrama. El ejemplo siguiente muestra una manera de -colocarlos por encima. - -" - doctitlees = "Corchetes de análisis encima del pentagrama" - - texidoc = " -Simple horizontal analysis brackets are added below the staff by -default. The following example shows a way to place them above the -staff instead. - -" - doctitle = "Analysis brackets above the staff" -} % begin verbatim - -\layout { - \context { - \Voice - \consists "Horizontal_bracket_engraver" - } -} -\relative c'' { - \once \override HorizontalBracket #'direction = #UP - c2\startGroup - d2\stopGroup -} - diff --git a/input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly b/input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly deleted file mode 100644 index 3748eec84d..0000000000 --- a/input/lsr/ancient-notation-template----modern-transcription-of-gregorian-music.ly +++ /dev/null @@ -1,70 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "ancient-notation, template" - - texidoces = " -Este ejemplo muestra cómo hacer una transcripción moderna de canto -gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza -solamente cabezas de nota de blanca y de negra, y unas marcas -especiales que indican silencios de distintas longitudes. - -" - - doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)" - - texidocde = " -Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen -Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur -halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die -Länge von Pausen an. -" - - texidoc = " -This example demonstrates how to do modern transcription of Gregorian -music. Gregorian music has no measure, no stems; it uses only half and -quarter note heads, and special marks, indicating rests of different -length. - -" - doctitle = "Ancient notation template -- modern transcription of gregorian music" -} % begin verbatim - -\include "gregorian.ly" - -chant = \relative c' { - \set Score.timing = ##f - f4 a2 \divisioMinima - g4 b a2 f2 \divisioMaior - g4( f) f( g) a2 \finalis -} - -verba = \lyricmode { - Lo -- rem ip -- sum do -- lor sit a -- met -} - -\score { - \new Staff << - \new Voice = "melody" \chant - \new Lyrics = "one" \lyricsto melody \verba - >> - \layout { - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Bar_engraver" - \override Stem #'transparent = ##t - } - \context { - \Voice - \override Stem #'length = #0 - } - \context { - \Score - barAlways = ##t - } - } -} - diff --git a/input/lsr/ancient-time-signatures.ly b/input/lsr/ancient-time-signatures.ly deleted file mode 100644 index 6afc8df5f6..0000000000 --- a/input/lsr/ancient-time-signatures.ly +++ /dev/null @@ -1,27 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "ancient-notation" - - texidoces = " -Las indicaciones de compás también se pueden grabar en estilo antiguo. - -" - doctitlees = "Indicaciones de compás antiguas" - - texidoc = " -Time signatures may also be engraved in an old style. - - - -" - doctitle = "Ancient time signatures" -} % begin verbatim - -{ - \override Staff.TimeSignature #'style = #'neomensural - s1 -} - diff --git a/input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly b/input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly deleted file mode 100644 index a6b1c24f87..0000000000 --- a/input/lsr/applying-note-head-styles-depending-on-the-step-of-the-scale.ly +++ /dev/null @@ -1,100 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, editorial-annotations" - - doctitlees = "Aplicar estilos de cabeza según la nota de la escala" - texidoces = " -La propiedad @code{shapeNoteStyles} se puede usar para definir varios -estilos de cabezas de nota para cada grado de la escala (según esté -establecido por la armadura o por la propiedad \"tonic\"). Esta -propiedad requiere un conjunto de símbolos, que pueden ser puramente -arbitrarios (se permiten expresiones geométricas como @code{triangle}, -triángulo, @code{cross}, aspas, y @code{xcircle}, círculo con aspas) o -basados en una antigua tradición americana de grabado (ciertos nombres -de nota latinos trambién se permiten). - -Dicho esto, para imitar antiguos cancioneros americanos, existen varios -estilos predefinidos de cabezas de nota disponibles a través de -instrucciones de abreviatura como @code{\\aikenHeads} o -@code{\\sacredHarpHeads}. - -Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, -y muestra la capacidad de transportar una melodía sin perder la -correspondencia entre las funciones armónicas y los estilos de cabezas de -nota. - -" - - doctitlede = "Notenkopfstile besierend auf der Tonleiterstufe erstellen" - texidocde = " -Die @code{shapeNoteStyles}-(NotenFormenStile)-Eigenschaft kann benutzt -werden, um verschiedene Notenstile für jeden Schritt der Tonleiter -zudefinieren (vorgegeben von der Tonart oder der @q{tonic} -(Tonika)-Eigneschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen, -welche beliebig sein können (geometrische Ausdrücke wie @code{triangle} -(Dreieck), @code{cross} (Kreuz) und @code{xcircle} (X-Kreis) sind erlaubt) -oder basierend auf einer alten amerikanischen Notensatztradition (einige -lateinische Notenbezeichnungen sind auch erlaubt). - -Um alte amerikanische Liederbücher zu imitieren, gibt es einige -vordefinierte Notenstile wie etwa @code{\\aikenHeads} (im Stil von Aiken) -oder @code{\\sacredHarpHeads} (im Stil der Sacred Harp-Tradition). - -Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und -eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den -harmonischen Funktionen und dem Notenstil verloren geht. - -" - - texidoc = " -The @code{shapeNoteStyles} property can be used to define various note -head styles for each step of the scale (as set by the key signature or -the \"tonic\" property). This property requires a set of symbols, which -can be purely arbitrary (geometrical expressions such as -@code{triangle}, @code{cross}, and @code{xcircle} are allowed) or based -on old American engraving tradition (some latin note names are also -allowed). - -That said, to imitate old American song books, there are several -predefined note head styles available through shortcut commands such as -@code{\\aikenHeads} or @code{\\sacredHarpHeads}. - -This example shows different ways to obtain shape note heads, and -demonstrates the ability to transpose a melody without losing the -correspondence between harmonic functions and note head styles. - -" - doctitle = "Applying note head styles depending on the step of the scale" -} % begin verbatim - -fragment = { - \key c \major - c2 d - e2 f - g2 a - b2 c -} - -\score { - \new Staff { - \transpose c d - \relative c' { - \set shapeNoteStyles = #'#(do re mi fa - #f la ti) - \fragment - } - - \break - - \relative c' { - \set shapeNoteStyles = #'#(cross triangle fa #f - mensural xcircle diamond) - \fragment - } - } - \layout { ragged-right = ##t } -} - diff --git a/input/lsr/arabic-improvisation.ly b/input/lsr/arabic-improvisation.ly deleted file mode 100644 index d2d012b18d..0000000000 --- a/input/lsr/arabic-improvisation.ly +++ /dev/null @@ -1,37 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "world-music" - - 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 -@code{\cadenzaOn}. Podría ser necesario ajustar el estilo de -alteraciones accidentales, porque la ausencia de líneas divisorias -hará que la alteración aparezca una sola vez. He aquí un ejemplo de -cómo podría ser el comienzo de una improvisación @emph{hijaz}: - -" -doctitlees = "Improvisación de música árabe" - - texidoc = " -For improvisations or taqasim which are temporarily free, the time -signature can be omitted and @code{\\cadenzaOn} can be used. Adjusting -the accidental style might be required, since the absence of bar lines -will cause the accidental to be marked only once. Here is an example -of what could be the start of a hijaz improvisation: - -" - doctitle = "Arabic improvisation" -} % begin verbatim - -\include "arabic.ly" - -\relative sol' { - \key re \kurd - #(set-accidental-style 'forget) - \cadenzaOn - sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol -} diff --git a/input/lsr/automatic-beam-subdivisions.ly b/input/lsr/automatic-beam-subdivisions.ly deleted file mode 100644 index e30e47d6f7..0000000000 --- a/input/lsr/automatic-beam-subdivisions.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Se pueden subdividir las barras automáticamente. Estableciendo la -propiedad @code{subdivideBeams}, las barras se subdividen en -posiciones de pulso (tal y como se especifica en @code{beatLength}). - -" - doctitlees = "Subdivisiones de barra automáticas" - - texidoc = " -Beams can be subdivided automatically. By setting the property -@code{subdivideBeams}, beams are subdivided at beat positions (as -specified in @code{beatLength}). - -" - doctitle = "Automatic beam subdivisions" -} % begin verbatim - -\new Staff { - \relative c'' { - << - { - \voiceOne - \set subdivideBeams = ##t - b32[ a g f c' b a g - b32^"subdivide beams" a g f c' b a g] - } - \new Voice { - \voiceTwo - b32_"default"[ a g f c' b a g - b32 a g f c' b a g] - } - >> - \oneVoice - \set beatLength = #(ly:make-moment 1 8) - b32^"beatLength 1 8"[ a g f c' b a g] - \set beatLength = #(ly:make-moment 1 16) - b32^"beatLength 1 16"[ a g f c' b a g] - } -} - diff --git a/input/lsr/avoiding-collisions-with-chord-fingerings.ly b/input/lsr/avoiding-collisions-with-chord-fingerings.ly deleted file mode 100644 index b0c4377ec9..0000000000 --- a/input/lsr/avoiding-collisions-with-chord-fingerings.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, editorial-annotations, chords, tweaks-and-overrides" - - texidoc = " -Fingerings and string numbers applied to individual notes will -automatically avoid beams and stems, but this is not true by default -for fingerings and string numbers applied to the individual notes of -chords. The following example shows how this default behavior can be -overridden. - -" - doctitle = "Avoiding collisions with chord fingerings" -} % begin verbatim - -\relative c' { - \set fingeringOrientations = #'(up) - \set stringNumberOrientations = #'(up) - \set strokeFingerOrientations = #'(up) - - % Default behavior - r8 - 8 - 8 - 8 - - % Corrected to avoid collisions - r8 - \override Fingering #'add-stem-support = ##t - 8 - \override StringNumber #'add-stem-support = ##t - 8 - \override StrokeFinger #'add-stem-support = ##t - 8 -} - diff --git a/input/lsr/beam-endings-in-score-context.ly b/input/lsr/beam-endings-in-score-context.ly deleted file mode 100644 index 7f3b7d5d84..0000000000 --- a/input/lsr/beam-endings-in-score-context.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Las reglas de final de barra especificadas en el contexto -@code{Score} se aplican a todos los pentagramas, pero se pueden -modificar tanto en los niveles de @code{Staff} como de -@code{Voice}: - -" - doctitlees = "Finales de barra en el contexto Score" - - texidoc = " -Beam-ending rules specified in the @code{Score} context apply to all -staves, but can be modified at both @code{Staff} and @code{Voice} -levels: - -" - doctitle = "Beam endings in Score context" -} % begin verbatim - -\relative c'' { - \time 5/4 - % Set default beaming for all staves - #(score-override-auto-beam-setting '(end * * 5 4) 3 8) - #(score-override-auto-beam-setting '(end * * 5 4) 7 8) - << - \new Staff { - c8 c c c c c c c c c - } - \new Staff { - % Modify beaming for just this staff - #(override-auto-beam-setting '(end * * 5 4) 6 8 'Staff) - #(revert-auto-beam-setting '(end * * 5 4) 7 8 'Staff) - c8 c c c c c c c c c - } - \new Staff { - % Inherit beaming from Score context - << - { - \voiceOne - c8 c c c c c c c c c - } - % Modify beaming for this voice only - \new Voice { - \voiceTwo - #(override-auto-beam-setting '(end * * 5 4) 6 8) - #(revert-auto-beam-setting '(end * * 5 4) 7 8) - a8 a a a a a a a a a - } - >> - } - >> -} - diff --git a/input/lsr/beam-grouping-in-7-8-time.ly b/input/lsr/beam-grouping-in-7-8-time.ly deleted file mode 100644 index cba44312f6..0000000000 --- a/input/lsr/beam-grouping-in-7-8-time.ly +++ /dev/null @@ -1,46 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - 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 -barras automáticas se debe especificar la forma de agrupamiento. -Por ejemplo, para agrupar todas las barras en la forma 2-3-2 en el -compás de 7/8, especificamos los finales de barra en 2/8 y 5/8: - -" - doctitlees = "Agrupamiento de las barras en el compás de 7/8" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Es gibt keine automatischen Balkengruppen für 7/8-Takte. Wenn diese -Taktart benötigt wird, müssen die Gruppierungen definiert werden. Um -beispielsweise alle Noten in 2/8-3/8-2/8 aufzuteilen, müssen Balkenenden -für 2/8 und 5/8 definiert werden: - -" - doctitlede = "Balkengruppen für 7/8-Takte" - - texidoc = " -There are no default automatic beam groupings specified for 7/8 time, -so if automatic beams are required the grouping must be specified. For -example, to group all beams 2-3-2 in 7/8 time, specify beam endings at -2/8 and 5/8: - -" - doctitle = "Beam grouping in 7/8 time" -} % begin verbatim - -\relative c'' { - \time 7/8 - % rhythm 2-3-2 - a8 a a a a a a - #(override-auto-beam-setting '(end * * 7 8) 2 8) - #(override-auto-beam-setting '(end * * 7 8) 5 8) - a8 a a a a a a -} - diff --git a/input/lsr/beams-across-line-breaks.ly b/input/lsr/beams-across-line-breaks.ly deleted file mode 100644 index dd4906380e..0000000000 --- a/input/lsr/beams-across-line-breaks.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Normalmente están prohibidos los saltos de línea si las barras -atraviesan las líneas divisorias. Se puede cambiar este -comportamiento como se muestra aquí: - -" - doctitle = "Barras que atraviesan saltos de línea" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - -texidocde = " -Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert -werden. - -" - doctitlede = "Balken über Zeilenumbrüche" - - texidoc = " -Line breaks are normally forbidden when beams cross bar lines. This -behavior can be changed as shown: - -" - doctitle = "Beams across line breaks" -} % begin verbatim - -\relative c'' { - \override Beam #'breakable = ##t - c8 c[ c] c[ c] c[ c] c[ \break - c8] c[ c] c[ c] c[ c] c -} - - diff --git a/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly b/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly deleted file mode 100644 index 6bc53fbba7..0000000000 --- a/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, text" - - texidoces = " -La instrucción @code{\\whiteout} intercala un rectángulo blanco -debajo de un elemento de marcado. Este rectángulo blanco no tapa -a ningún otro objeto gráfico, puesto que las líneas del pentagrama -están en una capa inferior a la de la mayor parte de los otros -objetos. - -" - doctitlees = "Poner en blanco las líneas del pentagrama utilizando la instrucción \\whiteout" - - texidoc = " -The @code{\\whiteout} command underlays a markup with a white box. -Since staff lines are in a lower layer than most other grobs, this -white box will not overlap any other grob. - -" - doctitle = "Blanking staff lines using the \\whiteout command" -} % begin verbatim - -\layout { ragged-right = ##f } -\relative c' { - \override TextScript #'extra-offset = #'(2 . 4) - c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c -} - diff --git a/input/lsr/broken-crescendo-hairpin.ly b/input/lsr/broken-crescendo-hairpin.ly deleted file mode 100644 index 5e83a9f2eb..0000000000 --- a/input/lsr/broken-crescendo-hairpin.ly +++ /dev/null @@ -1,76 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - 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 -respectiva del regulador, tapándola. El rectángulo se define como -código PostScript dentro de un elemento de marcado de texto. - -Para realizar un ajuste fino de la posición y el tamaño del -elemento de marcado, se puede establecer el número que precede a -@code{setgray} en la definición de PostScript a un valor menor que -la unidad, haciendo que sea de color gris. Los dos números que -están antes de @code{scale} en el código PostScript son los -responsables del ancho y la altura del rectángulo, y los dos -números que están antes de @code{translate} cambian las -coordenadas X e Y de origen del rectángulo. - -Asegúrse de poner el regulador en una capa más baja que el -elemento de marcado de texto para trazar el rectángulo encima del -regulador. - -" - doctitlees = "Regulador interrumpido" - - texidoc = " -In order to make parts of a crescendo hairpin invisible, the following -method is used: A white rectangle is drawn on top of the respective -part of the crescendo hairpin, making it invisible. The rectangle is -defined as postscript code within a text markup. - -To fine-tune the position and size of the markup, the number preceding -@code{setgray} in the postscript definition can be set to a value less -than one, making it grey. The two numbers before @code{scale} in the -postscript code are responsible for the width and height of the -rectangle, the two numbers before @code{translate} change the x- and -y-origin of the rectangle. - - -Make sure to put the hairpin in a lower layer than the text markup to -draw the rectangle over the hairpin. - -" - doctitle = "Broken Crescendo Hairpin" -} % begin verbatim - -\relative c' { - << { - \dynamicUp - \override DynamicLineSpanner #'staff-padding = #4 - r2 r16 c'8.\pp r4 - } - \\ - { - \override DynamicLineSpanner #'layer = #0 - des,2\mf\< ~ - \override TextScript #'layer = #2 - des16_\markup { - \postscript #" - 1.9 -8 translate - 5 4 scale - 1 setgray - 0 0 moveto - 0 1 lineto - 1 1 lineto - 1 0 lineto - 0 0 lineto - fill" - } - r8. des4 ~ des16->\sff - } >> -} diff --git a/input/lsr/caesura-railtracks-with-fermata.ly b/input/lsr/caesura-railtracks-with-fermata.ly deleted file mode 100644 index b364fecc42..0000000000 --- a/input/lsr/caesura-railtracks-with-fermata.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - - texidoces = " -A veces se denota una «cesura» con una doble marca de respiración -parecida a las vías del tren, con un calderón encima. Este -fragmento de código presenta una combinación de estas dos marcas, -visualmente satisfactoria. - -" - doctitlees = "Cesura tipo \"vías del tren\" con calderón" - - texidoc = " -A caesura is sometimes denoted by a double \"railtracks\" breath mark -with a fermata sign positioned above. This snippet should present an -optically pleasing combination of railtracks and fermata. - -" - doctitle = "Caesura (\"railtracks\") with fermata" -} % begin verbatim - -\relative c'' { - c2. - % construct the symbol - \override BreathingSign #'text = \markup { - \line { - \musicglyph #"scripts.caesura.curved" - \translate #'(-1.75 . 1.6) - \musicglyph #"scripts.ufermata" - } - } - \breathe c4 - % set the breathe mark back to normal - \revert BreathingSign #'text - c2. \breathe c4 - \bar "|." -} diff --git a/input/lsr/center-text-below-hairpin-dynamics.ly b/input/lsr/center-text-below-hairpin-dynamics.ly deleted file mode 100644 index d0c7d200f1..0000000000 --- a/input/lsr/center-text-below-hairpin-dynamics.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, text" - - texidoces = " -Este ejemplo proporciona una función para tipografiar un regulador -con texto por debajo, como \"molto\" o \"poco\". El ejemplo -ilustra también cómo modificar la manera en que se imprime -normalmente un objeto, utilizando código de Scheme. - -" - doctitlees = "Centrar texto debajo de un regulador" - - texidoc = " -This example provides a function to typeset a hairpin (de)crescendo -with some additional text below it, such as \"molto\" or \"poco\". The -example also illustrates how to modify the way an object is normally -printed, using some Scheme code. - -" - doctitle = "Center text below hairpin dynamics" -} % begin verbatim - -hairpinWithCenteredText = -#(define-music-function (parser location text) (markup?) -#{ - \override Voice.Hairpin #'stencil = #(lambda (grob) - (ly:stencil-aligned-to - (ly:stencil-combine-at-edge - (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER) - Y DOWN - (ly:stencil-aligned-to (grob-interpret-markup grob $text) X CENTER)) - X LEFT)) -#}) - -hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } -hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } - -\layout { ragged-right = ##f } - -\relative c' { - \hairpinMolto - c2\< c\f - \hairpinMore - c2\< c\f -} diff --git a/input/lsr/changing--flageolet-mark-size.ly b/input/lsr/changing--flageolet-mark-size.ly deleted file mode 100644 index 1a3fcffdc9..0000000000 --- a/input/lsr/changing--flageolet-mark-size.ly +++ /dev/null @@ -1,37 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, unfretted-strings" - - texidoces = " -Para hacer más pequeño el círculo de @code{\\flageolet} (armónico) -utilice la siguiente función de Scheme. - -" - doctitlees = "Cambiar el tamaño de la marca de \\flageolet" - - texidoc = " -To make the @code{\\flageolet} circle smaller use the following Scheme -function. - -" - doctitle = "Changing \\flageolet mark size" -} % begin verbatim - -smallFlageolet = -#(let ((m (make-music 'ArticulationEvent - 'articulation-type "flageolet"))) - (ly:music-set-property! m 'tweaks - (acons 'font-size -3 - (ly:music-property m 'tweaks))) - m) - -\layout { ragged-right = ##f } - -\relative c'' { - d4^\flageolet_\markup { default size } d_\flageolet - c4^\smallFlageolet_\markup { smaller } c_\smallFlageolet -} - diff --git a/input/lsr/changing-a-single-notes-size-in-a-chord.ly b/input/lsr/changing-a-single-notes-size-in-a-chord.ly deleted file mode 100644 index 699b90bf78..0000000000 --- a/input/lsr/changing-a-single-notes-size-in-a-chord.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides" - - texidoces = " -Se pueden modificar notas individuales de un acorde con la -instrucción @code{\\tweak}, alterando la propiedad -@code{font-size}. - -Dentro de un acorde (entre ángulos simples @code{< >}), antes de -la nota que queremos alterar, situamos la instrucción -@code{\\tweak} seguida por @code{#'font-size} y definimos el -tamaño adecuado como @code{#-2} (una cabeza pequeña). - -" - doctitlees = "Modificar el tamaño de una nota suelta de un acorde" - - texidoc = " -Individual note heads in a chord can be modified with the -@code{\\tweak} command inside a chord, by altering the @code{font-size} -property. - - -Inside the chord (within the brackets @code{< >}), before the note to -be altered, place the @code{\\tweak} command, followed by -@code{#'font-size} and define the proper size like @code{#-2} (a tiny -notehead). - - - -" - doctitle = "Changing a single note's size in a chord" -} % begin verbatim - -\relative { - <\tweak #'font-size #+2 c e g c \tweak #'font-size #-2 e>1^\markup { A tiny e }_\markup { A big c } -} - diff --git a/input/lsr/changing-beam-knee-gap.ly b/input/lsr/changing-beam-knee-gap.ly deleted file mode 100644 index 3eb75d403b..0000000000 --- a/input/lsr/changing-beam-knee-gap.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Se insertan automáticamente barras en ángulo cuando se detecta un -intervalo muy grande entre las notas. Se puede hacer un ajuste -fino de este comportamiento a través de la propiedad -@code{auto-knee-gap}. Se traza una barra doblada si el salto es -mayor que el valor de @code{auto-knee-gap} más el ancho del objeto -barra (que depende de la duración de las notas y de la inclinación -de la barra). De forma predeterminada @code{auto-knee-gap} está -establecido a 5.5 espacios de pentagrama. - -" - doctitlees = "Cambiar el salto de las barras en ángulo" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Balken mit Hälsen in unterschiedliche Richtungen werden automatisch -erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses -Verhalten kann durch die @code{auto-knee-gap}-Eigenschaft beeinflusst -werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer -ist als der Wert von @code{auto-knee-gap} plus der Dicke des Balkens -(was von der Notendauer und der Neigung des Balkens abhängt). Der -Standardwert von @code{auto-knee-gap} ist 5.5 Notensystemabstände. - -" - doctitlede = "Balken für weit außeinander liegende Noten ändern" - - texidoc = " -Kneed beams are inserted automatically when a large gap is detected -between the note heads. This behavior can be tuned through the -@code{auto-knee-gap} property. A kneed beam is drawn if the gap is -larger than the value of @code{auto-knee-gap} plus the width of the -beam object (which depends on the duration of the notes and the slope -of the beam). By default @code{auto-knee-gap} is set to 5.5 staff -spaces. - -" - doctitle = "Changing beam knee gap" -} % begin verbatim - -{ - f8 f''8 f8 f''8 - \override Beam #'auto-knee-gap = #6 - f8 f''8 f8 f''8 -} - diff --git a/input/lsr/changing-chord-separator.ly b/input/lsr/changing-chord-separator.ly deleted file mode 100644 index d21e310c8a..0000000000 --- a/input/lsr/changing-chord-separator.ly +++ /dev/null @@ -1,29 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoces = " -Se puede establecer el separador entre las distintas partes del -nombre de un acorde para que sea cualquier elemento de marcado. - -" - doctitlees = "Modificación del separador de acordes" - - texidoc = " -The separator between different parts of a chord name can be set to any -markup. - -" - doctitle = "Changing chord separator" -} % begin verbatim - -\chords { - c:7sus4 - \set chordNameSeparator - = \markup { \typewriter | } - c:7sus4 -} - diff --git a/input/lsr/changing-form-of-multi-measure-rests.ly b/input/lsr/changing-form-of-multi-measure-rests.ly deleted file mode 100644 index 64e437c152..0000000000 --- a/input/lsr/changing-form-of-multi-measure-rests.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - doctitlees = "Cambiar la forma de los silencios multicompás" - texidoces = " -Si hay diez compases de silencio o menos, se imprime en el pentagrama -una serie de silencios de breve y longa (conocidos en alemán como -\"Kirchenpausen\", «silencios eclesiásticos»); en caso contrario se -muestra una barra normal. Este número predeterminado de diez se -puede cambiar sobreescribiendo la propiedad @code{expand-limit}: - -" - -texidocde = " -Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa- -und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten -wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von -zehn kann geändert werden, indem man die @code{expand-limit}-Eigenschaft -setzt: -" - doctitlede = "Die Erscheinung von Pausentakten ändern" - - texidoc = " -If there are ten or fewer measures of rests, a series of longa and -breve rests (called in German \"Kirchenpausen\" - church rests) is -printed within the staff; otherwise a simple line is shown. This -default number of ten may be changed by overriding the -@code{expand-limit} property. - -" - doctitle = "Changing form of multi-measure rests" -} % begin verbatim - -\relative c'' { - \compressFullBarRests - R1*2 | R1*5 | R1*9 - \override MultiMeasureRest #'expand-limit = #3 - R1*2 | R1*5 | R1*9 -} diff --git a/input/lsr/changing-midi-output-to-one-channel-per-voice.ly b/input/lsr/changing-midi-output-to-one-channel-per-voice.ly deleted file mode 100644 index f3153cd539..0000000000 --- a/input/lsr/changing-midi-output-to-one-channel-per-voice.ly +++ /dev/null @@ -1,78 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "contexts-and-engravers, midi" - - texidoces = " -Al producir una salida MIDI, el comportamiento predeterminado es -que cada pentagrama representa un canal MIDI, con todas las voces -de dicho pentagrama mezcladas. Esto reduce al mínimo el riesgo de -que se agote el número de canales MIDI disponibles, pues existe un -máximo de 16 canales por pista. - -Sin embargo, cuando se traslada el interpretador -@code{Staff_performer} al contexto @code{Voice}, cada voz de un -pentagrama puede tener su propio canal MIDI, como se muestra en el -siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se -crean dos canales MIDI, cada uno con un @code{midiInstrument} -distinto. - -" - doctitlees = "Modificar la salida MIDI para que tenga un canal por cada voz" - - texidoc = " -When outputting MIDI, the default behavior is for each staff to -represent one MIDI channel, with all the voices on a staff amalgamated. -This minimizes the risk of running out of MIDI channels, since there -are only 16 available per track. - -However, by moving the @code{Staff_performer} to the @code{Voice} -context, each voice on a staff can have its own MIDI channel, as is -demonstrated by the following example: despite being on the same staff, -two MIDI channels are created, each with a different -@code{midiInstrument}. - -" - doctitle = "Changing MIDI output to one channel per voice" -} % begin verbatim - -\score { - \new Staff << - \new Voice \relative c''' { - \set midiInstrument = #"flute" - \voiceOne - \key g \major - \time 2/2 - r2 g-"Flute" ~ - g fis ~ - fis4 g8 fis e2 ~ - e4 d8 cis d2 - } - \new Voice \relative c'' { - \set midiInstrument = #"clarinet" - \voiceTwo - b1-"Clarinet" - a2. b8 a - g2. fis8 e - fis2 r - } - >> - \layout { } - \midi { - \context { - \Staff - \remove "Staff_performer" - } - \context { - \Voice - \consists "Staff_performer" - } - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 2) - } - } -} - diff --git a/input/lsr/changing-partcombine-texts.ly b/input/lsr/changing-partcombine-texts.ly deleted file mode 100644 index 2d4070b21a..0000000000 --- a/input/lsr/changing-partcombine-texts.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes" - - 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 -y de unísono: - -" - doctitlees = "Cambiar los textos de partcombine" - - texidoc = " -When using the automatic part combining feature, the printed text for -the solo and unison sections may be changed: - -" - doctitle = "Changing partcombine texts" -} % begin verbatim - -\new Staff << - \set Staff.soloText = #"girl" - \set Staff.soloIIText = #"boy" - \set Staff.aDueText = #"together" - \partcombine - \relative c'' { - g4 g r r - a2 g - } - \relative c'' { - r4 r a( b) - a2 g - } ->> - diff --git a/input/lsr/changing-stanza-fonts.ly b/input/lsr/changing-stanza-fonts.ly deleted file mode 100644 index 37ec4291a3..0000000000 --- a/input/lsr/changing-stanza-fonts.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music" - - texidoc = " -Fonts can be changed independently for each stanza, including the font -used for printing the stanza number. - -" - doctitle = "Changing stanza fonts" -} % begin verbatim - -\new Voice { - \time 3/4 - g2 e4 - a2 f4 - g2. -} -\addlyrics { - \set stanza = #"1. " - Hi, my name is Bert. -} -\addlyrics { - \override StanzaNumber #'font-name = #"DejaVu" - \set stanza = #"2. " - \override LyricText #'font-family = #'typewriter - Oh, ché -- ri, je t'aime -} - diff --git a/input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly b/input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly deleted file mode 100644 index 80cc0c2490..0000000000 --- a/input/lsr/changing-text-and-spanner-styles-for-text-dynamics.ly +++ /dev/null @@ -1,54 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Se puede modificar el texto empleado para los crescendos y -decrescendos modificando las propiedades de contexto -@code{crescendoText} y @code{decrescendoText}. El estiloo de la -línea de extensión se puede cambiar modificando la propiedad -@code{'style} de @code{DynamicTextSpanner}. El valor -predeterminado es @code{'hairpin} (regulador), y entre otros -valores posibles se encuentran @code{'line} (línea), -@code{'dashed-line} (línea intermitente) y @code{'dotted-line} -(línea de puntos): - -" - doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Der Text, der für Crescendo und Decrescendo gestzt wird, kann geändert -werden, indem man die Eigenschaften @code{crescendoText} und -@code{decrescendoText} verändert. Der Stil des Streckers kann auch -geändert werden, indem die @code{'style}-Eigenschaft des -@code{DynamicTextSpanner} beeinflusst wird. Der Standardwert ist -@code{'hairpin}, ander Möglichkeiten sind @code{'line}, @code{'dashed-line} -und @code{'dotted-line}: -" - doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern" - - texidoc = " -The text used for crescendos and decrescendos can be changed by -modifying the context properties @code{crescendoText} and -@code{decrescendoText}. The style of the spanner line can be changed by -modifying the @code{'style} property of @code{DynamicTextSpanner}. The -default value is @code{'hairpin}, and other possible values include -@code{'line}, @code{'dashed-line} and @code{'dotted-line}. - -" - doctitle = "Changing text and spanner styles for text dynamics" -} % begin verbatim - -\relative c'' { - \set crescendoText = \markup { \italic { cresc. poco } } - \set crescendoSpanner = #'text - \override DynamicTextSpanner #'style = #'dotted-line - a2\< a - a2 a - a2 a - a2 a\mf -} diff --git a/input/lsr/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly b/input/lsr/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly deleted file mode 100644 index d0a052d4e1..0000000000 --- a/input/lsr/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly +++ /dev/null @@ -1,34 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, editorial-annotations" - - texidoces = " -Se puede cambiar el aspecto de las ligaduras de expresión de -continuas a punteadas o intermitentes. - -" - doctitlees = "Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente" - - texidoc = " -The appearance of slurs may be changed from solid to dotted or dashed. - -" - doctitle = "Changing the appearance of a slur from solid to dotted or dashed" -} % begin verbatim - -\relative c' { - c4( d e c) - \slurDotted - c4( d e c) - \slurSolid - c4( d e c) - \slurDashed - c4( d e c) - \slurSolid - c4( d e c) -} - - diff --git a/input/lsr/changing-the-breath-mark-symbol.ly b/input/lsr/changing-the-breath-mark-symbol.ly deleted file mode 100644 index 8373898c94..0000000000 --- a/input/lsr/changing-the-breath-mark-symbol.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -El glifo de la marca de respiración se puede ajustar -sobreescribiendo la propiedad de texto del objeto de presentación -@code{BreathingSign}, con cualquier otro texto de marcado. - -" - doctitlees = "Cambiar el símbolo de la marca de respiración" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Das Schriftzeichen für das Atemzeichen kann verändert werden, indem -die Text-Eigenschaft des @code{BreathingSign}-Layoutobjekts mit einer -beliebigen Textbeschriftung definiert wird. - -" - doctitlede = "Das Atemzeichen-Symbol verändern" - - texidoc = " -The glyph of the breath mark can be tuned by overriding the text -property of the @code{BreathingSign} layout object with any markup -text. - -" - doctitle = "Changing the breath mark symbol" -} % begin verbatim - -\relative c'' { - c2 - \override BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" } - \breathe - d2 -} diff --git a/input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly b/input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly deleted file mode 100644 index 90437311bd..0000000000 --- a/input/lsr/changing-the-chord-names-to-german-or-semi-german-notation.ly +++ /dev/null @@ -1,55 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoces = " -La nomenclatura inglesa (predeterminada) para los acordes del -cifrado americano se puede cambiar por la alemana -(@code{\\germanChords} sustituye B y Bes por H y B) o por la semi-alemana -(@code{\\semiGermanChords} sustituye B y Bes por H y Bb). - -" - doctitlees = "Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana" - - texidoc = " -The english naming of chords (default) can be changed to german -(@code{\\germanChords} replaces B and Bes to H and B) or semi-german -(@code{\\semiGermanChords} replaces B and Bes to H and Bb). - - - - -" - doctitle = "Changing the chord names to German or semi-German notation" -} % begin verbatim - -music = \chordmode { - c1/c cis/cis - b/b bis/bis bes/bes -} - -%% The following is only here to print the names of the -%% chords styles; it can be removed if you do not need to -%% print them. - -\layout { - \context {\ChordNames \consists Instrument_name_engraver } -} - -<< - \new ChordNames { - \set ChordNames.instrumentName = #"default" - \music - } - \new ChordNames { - \set ChordNames.instrumentName = #"german" - \germanChords \music } - \new ChordNames { - \set ChordNames.instrumentName = #"semi-german" - \semiGermanChords \music } - \context Voice { \music } ->> - diff --git a/input/lsr/changing-the-default-text-font-family.ly b/input/lsr/changing-the-default-text-font-family.ly deleted file mode 100644 index 41876c7154..0000000000 --- a/input/lsr/changing-the-default-text-font-family.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, tweaks-and-overrides" - - texidoc = " -The default font families for text can be overridden with -@code{make-pango-font-tree}. - -" - doctitle = "Changing the default text font family" -} % begin verbatim - -\paper { - % change for other default global staff size. - myStaffSize = #20 - %{ - run - lilypond -dshow-available-fonts blabla - to show all fonts available in the process log. - %} - - #(define fonts - (make-pango-font-tree "Times New Roman" - "Nimbus Sans" - "Luxi Mono" -;; "Helvetica" -;; "Courier" - (/ myStaffSize 20))) -} - -\relative c'' { - c4^\markup { - roman: foo \bold bla \italic bar \italic \bold baz - } - c'4_\markup { - \override #'(font-family . sans) - { - sans: foo \bold bla \italic bar \italic \bold baz - } - } - c'2^\markup { - \override #'(font-family . typewriter) - { - mono: foo \bold bla \italic bar \italic \bold baz - } - } -} - - diff --git a/input/lsr/changing-the-number-of-lines-in-a-staff.ly b/input/lsr/changing-the-number-of-lines-in-a-staff.ly deleted file mode 100644 index 9cf365905d..0000000000 --- a/input/lsr/changing-the-number-of-lines-in-a-staff.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation" - - texidoc = " -The number of lines in a staff may changed by overriding the -@code{StaffSymbol} property @code{line-count}. - - - - -" - doctitle = "Changing the number of lines in a staff" -} % begin verbatim - -upper = \relative c'' { - c4 d e f -} - -lower = \relative c { - \clef bass - c4 b a g -} - -\score { - \context PianoStaff << - \new Staff { - \upper - } - \new Staff { - \override Staff.StaffSymbol #'line-count = #4 - \lower - } - >> -} - diff --git a/input/lsr/changing-the-positions-of-figured-bass-alterations.ly b/input/lsr/changing-the-positions-of-figured-bass-alterations.ly deleted file mode 100644 index 860dde68f5..0000000000 --- a/input/lsr/changing-the-positions-of-figured-bass-alterations.ly +++ /dev/null @@ -1,35 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - 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 -@code{figuredBassAlterationDirection} y -@code{figuredBassPlusDirection}. - -" - doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado" - - texidoc = " -Accidentals and plus signs can appear before or after the numbers, -depending on the @code{figuredBassAlterationDirection} and -@code{figuredBassPlusDirection} properties. - -" - doctitle = "Changing the positions of figured bass alterations" -} % begin verbatim - -\figures { - <6\+> <5+> <6 4-> r - \set figuredBassAlterationDirection = #RIGHT - <6\+> <5+> <6 4-> r - \set figuredBassPlusDirection = #RIGHT - <6\+> <5+> <6 4-> r - \set figuredBassAlterationDirection = #LEFT - <6\+> <5+> <6 4-> r -} - diff --git a/input/lsr/changing-the-staff-size.ly b/input/lsr/changing-the-staff-size.ly deleted file mode 100644 index b4ed717b42..0000000000 --- a/input/lsr/changing-the-staff-size.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides, paper-and-layout" - - texidoc = " -Though the simplest way to resize staves is to use -@code{#(set-global-staff-size xx)}, an individual staff's size can be -changed by scaling the properties @code{'staff-space} and -@code{fontSize}. - -" - doctitle = "Changing the staff size" -} % begin verbatim - -<< - \new Staff { - \relative c'' { - \dynamicDown - c8\ff c c c c c c c - } - } - \new Staff \with { - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - } { - \clef bass - c8 c c c c\f c c c - } ->> - diff --git a/input/lsr/changing-the-tempo-without-a-metronome-mark.ly b/input/lsr/changing-the-tempo-without-a-metronome-mark.ly deleted file mode 100644 index 7053b577ae..0000000000 --- a/input/lsr/changing-the-tempo-without-a-metronome-mark.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, midi" - - texidoces = " -Para cambiar el tempo en la salida MIDI sin -imprimir nada, hacemos invisible la indicación metronómica: - -" - - doctitlees = "Cambiar el tempo sin indicación metronómica" - - texidoc = " -To change the tempo in MIDI output without printing anything, make the -metronome mark invisible. - -" - doctitle = "Changing the tempo without a metronome mark" -} % begin verbatim - -\score { - \new Staff \relative c' { - \tempo 4 = 160 - c4 e g b - c4 b d c - \set Score.tempoHideNote = ##t - \tempo 4 = 96 - d,4 fis a cis - d4 cis e d - } - \layout { } - \midi { } -} diff --git a/input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly b/input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly deleted file mode 100644 index 615c355259..0000000000 --- a/input/lsr/changing-the-time-signature-without-affecting-the-beaming.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -La instrucción @code{\time} establece las propiedades -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y -@code{measureLength} en el contexto @code{Timing}, que normalmente -tiene el alias @code{Score}. La modificación del valor de -@code{timeSignatureFraction} hace que se imprima la nueva indicación -de compás sin que cambie ninguna de las demás propiedades: - -" - doctitlees = "Cambio de compás sin afectar al barrado" - - texidoc = " -The @code{\\time} command sets the properties -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} -and @code{measureLength} in the @code{Timing} context, which is -normally aliased to @code{Score}. Changing the value of -@code{timeSignatureFraction} causes the new time signature symbol to be -printed without changing any of the other properties: - -" - doctitle = "Changing the time signature without affecting the beaming" -} % begin verbatim - -\relative c'' { - \time 3/4 - a16 a a a a a a a a a a a - - % Change time signature symbol but keep 3/4 beaming - % due to unchanged underlying time signature - \set Score.timeSignatureFraction = #'(12 . 16) - a16 a a a a a a a a a a a - - \time 12/16 - % Lose 3/4 beaming now \time has been changed - a16 a a a a a a a a a a a -} - diff --git a/input/lsr/changing-the-tuplet-number.ly b/input/lsr/changing-the-tuplet-number.ly deleted file mode 100644 index ca86f5297f..0000000000 --- a/input/lsr/changing-the-tuplet-number.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - doctitlees = "Cambiar el número del grupo especial" - texidoces = " - -De forma predeterminada sólo se imprime el numerador del grupo -especial sobre el corchete de grupo, es decir, el denominador del -argumento de la instrucción @code{\\times}. De forma alternativa, se -puede imprimr un quebrado en la forma numerador:denominador del número -del grupo, o eliminar el número. - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer -dargestellt, wie er dem @code{\\times}-Befehl übergeben wird. -Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl -vollständig unterdrücken. - -" - doctitlede = "Die Zahl der N-tole verändern" - - texidoc = " -By default, only the numerator of the tuplet number is printed over the -tuplet bracket, i.e., the denominator of the argument to the -@code{\\times} command. Alternatively, num:den of the tuplet number may -be printed, or the tuplet number may be suppressed altogether. - -" - doctitle = "Changing the tuplet number" -} % begin verbatim - -\relative c'' { - \times 2/3 { c8 c c } - \times 2/3 { c8 c c } - \override TupletNumber #'text = #tuplet-number::calc-fraction-text - \times 2/3 { c8 c c } - \override TupletNumber #'stencil = ##f - \times 2/3 { c8 c c } -} - diff --git a/input/lsr/chant-or-psalms-notation.ly b/input/lsr/chant-or-psalms-notation.ly deleted file mode 100644 index 17aa31b209..0000000000 --- a/input/lsr/chant-or-psalms-notation.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers" - - texidoces = " -Este tipo de notación se utiliza para el canto de los Salmos, en -que las estrofas no siempre tienen la misma longitud. - -" - doctitlees = "Notación de responsos o salmos" - - texidoc = " -This form of notation is used for the chant of the Psalms, where verses -aren't always the same length. - -" - doctitle = "Chant or psalms notation" -} % begin verbatim - -stemOn = { \revert Staff.Stem #'transparent } -stemOff = { \override Staff.Stem #'transparent = ##t } - -\score { - \new Staff \with { \remove "Time_signature_engraver" } - { - \key g \minor - \cadenzaOn - \stemOff a'\breve bes'4 g'4 - \stemOn a'2 \bar "||" - \stemOff a'\breve g'4 a'4 - \stemOn f'2 \bar "||" - \stemOff a'\breve^\markup { \italic flexe } - \stemOn g'2 \bar "||" - } -} - diff --git a/input/lsr/chord-name-exceptions.ly b/input/lsr/chord-name-exceptions.ly deleted file mode 100644 index 122bba0a20..0000000000 --- a/input/lsr/chord-name-exceptions.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoces = " -Se puede usar la propiedad @code{chordNameExceptions} para -almacenar una lista de notaciones espaciales para acordes -específicos. - -" - doctitlees = "Excepciones para los nombres de acorde" - - texidoc = " -The property @code{chordNameExceptions} can be used to store a list of -special notations for specific chords. - -" - doctitle = "Chord name exceptions" -} % begin verbatim - -% modify maj9 and 6(add9) -% Exception music is chords with markups -chExceptionMusic = { - 1-\markup { \super "maj9" } - 1-\markup { \super "6(add9)" } -} - -% Convert music to list and prepend to existing exceptions. -chExceptions = #( append - ( sequential-music-to-chord-exceptions chExceptionMusic #t) - ignatzekExceptions) - -theMusic = \chordmode { - g1:maj9 g1:6.9 - \set chordNameExceptions = #chExceptions - g1:maj9 g1:6.9 -} - -\layout { - ragged-right = ##t -} - -<< \context ChordNames \theMusic - \context Voice \theMusic ->> - diff --git a/input/lsr/chord-name-major7.ly b/input/lsr/chord-name-major7.ly deleted file mode 100644 index 674f6e1d2b..0000000000 --- a/input/lsr/chord-name-major7.ly +++ /dev/null @@ -1,20 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoc = " -The layout of the major 7 can be tuned with @code{majorSevenSymbol}. - -" - doctitle = "chord name major7" -} % begin verbatim - -\chords { - c:7+ - \set majorSevenSymbol = \markup { j7 } - c:7+ -} - diff --git a/input/lsr/clip-systems.ly b/input/lsr/clip-systems.ly deleted file mode 100644 index 8db309ebb8..0000000000 --- a/input/lsr/clip-systems.ly +++ /dev/null @@ -1,91 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "paper-and-layout" - - texidoc = " -This code shows how to clip (extract) snippets from a full score. - -This file needs to be run separately with @code{-dclip-systems}; the -snippets page may not adequately show the results. - -The result will be files named -@samp{base-from-start-to-end[-count].eps}. - - -If system starts and ends are included, they include extents of the -System grob, e.g., instrument names. - - -Grace notes at the end point of the region are not included. - - -Regions can span multiple systems. In this case, multiple EPS files -are generated. - -" - doctitle = "Clip systems" -} % begin verbatim - -#(ly:set-option 'clip-systems) -#(set! output-count 1) - -origScore = \score { - \relative c' { - \set Staff.instrumentName = #"bla" - c1 - d1 - \grace c16 e1 - \key d \major - f1 \break - \clef bass - g,1 - fis1 - } -} - -\book { - \score { - \origScore - \layout { - % Each clip-region is a (START . END) pair - % where both are rhythmic-locations. - - % (make-rhythmic-locations BAR-NUMBER NUM DEN) - % means NUM/DEN whole-notes into bar numbered BAR-NUMBER - - clip-regions = #(list - (cons - (make-rhythmic-location 2 0 1) - (make-rhythmic-location 4 0 1)) - - (cons - (make-rhythmic-location 0 0 1) - (make-rhythmic-location 4 0 1)) - - (cons - (make-rhythmic-location 0 0 1) - (make-rhythmic-location 6 0 1)) - ) - } - } -} - -#(set! output-count 0) -#(ly:set-option 'clip-systems #f) - -\book { - \score { \origScore } - \markup { \bold \fontsize #6 clips } - \score { - \lyrics { - \markup { from-2.0.1-to-4.0.1-clip.eps } - \markup { - \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" - (ly:parser-output-name parser)) } - } - } -} - diff --git a/input/lsr/clusters.ly b/input/lsr/clusters.ly deleted file mode 100644 index d953c203ab..0000000000 --- a/input/lsr/clusters.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes, chords, keyboards" - - texidoces = " -Los «clusters» o racimos son un mecanismo para indicar la -interpretación de un ámbito de notas al mismo tiempo. - -" - doctitlees = "Clusters («racimos»)" - - texidoc = " -Clusters are a device to denote that a complete range of notes is to be -played. - -" - doctitle = "Clusters" -} % begin verbatim - -fragment = \relative c' { - c4 f 4 - 8 a4 c2 4 - e2 c -} - -<< - \new Staff \fragment - \new Staff \makeClusters \fragment ->> - diff --git a/input/lsr/coloring-notes-depending-on-their-pitch.ly b/input/lsr/coloring-notes-depending-on-their-pitch.ly deleted file mode 100644 index 38445dffe7..0000000000 --- a/input/lsr/coloring-notes-depending-on-their-pitch.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, editorial-annotations" - - texidoc = " -It is possible to color note heads depending on their pitch and/or -their names: the function used in this example even makes it possible -to distinguish enharmonics. - -" - doctitle = "Coloring notes depending on their pitch" -} % begin verbatim - -%Association list of pitches to colors. -#(define color-mapping - (list - (cons (ly:make-pitch 0 0 0) (x11-color 'red)) - (cons (ly:make-pitch 0 0 1/2) (x11-color 'green)) - (cons (ly:make-pitch 0 1 -1/2) (x11-color 'green)) - (cons (ly:make-pitch 0 2 0) (x11-color 'red)) - (cons (ly:make-pitch 0 2 1/2) (x11-color 'green)) - (cons (ly:make-pitch 0 3 -1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 3 0) (x11-color 'green)) - (cons (ly:make-pitch 0 4 1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 5 0) (x11-color 'green)) - (cons (ly:make-pitch 0 5 -1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 6 1/2) (x11-color 'red)) - (cons (ly:make-pitch 0 1 0) (x11-color 'blue)) - (cons (ly:make-pitch 0 3 1/2) (x11-color 'blue)) - (cons (ly:make-pitch 0 4 -1/2) (x11-color 'blue)) - (cons (ly:make-pitch 0 5 1/2) (x11-color 'blue)) - (cons (ly:make-pitch 0 6 -1/2) (x11-color 'blue)))) - -%Compare pitch and alteration (not octave). -#(define (pitch-equals? p1 p2) - (and - (= (ly:pitch-alteration p1) (ly:pitch-alteration p2)) - (= (ly:pitch-notename p1) (ly:pitch-notename p2)))) - -#(define (pitch-to-color pitch) - (let ((color (assoc pitch color-mapping pitch-equals?))) - (if color - (cdr color)))) - -#(define (color-notehead grob) - (pitch-to-color - (ly:event-property (event-cause grob) 'pitch))) - -\score { - \new Staff \relative c' { - \override NoteHead #'color = #color-notehead - c8 b d dis ees f g aes - } -} diff --git a/input/lsr/combining-dynamics-with-markup-texts.ly b/input/lsr/combining-dynamics-with-markup-texts.ly deleted file mode 100644 index 54f4a1f838..0000000000 --- a/input/lsr/combining-dynamics-with-markup-texts.ly +++ /dev/null @@ -1,30 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, text" - - texidoces = " -Ciertas indicaciones dinámicas pueden llevar textos (como \"più -forte\" o \"piano subito\"). Se pueden producir usando un -bloque @code{\\markup}. - -" - doctitlees = "Combinar indicaciones dinámicas con marcados textuales" - - texidoc = " -Some dynamics may involve text indications (such as \"più forte\" or -\"piano subito\"). They can be produced using a @code{\\markup} block. - -" - doctitle = "Combining dynamics with markup texts" -} % begin verbatim - -piuF = \markup { \italic più \dynamic f } -\layout { ragged-right = ##f } -\relative c'' { - c2\f c-\piuF -} - - diff --git a/input/lsr/combining-two-parts-on-the-same-staff.ly b/input/lsr/combining-two-parts-on-the-same-staff.ly deleted file mode 100644 index ff6990a062..0000000000 --- a/input/lsr/combining-two-parts-on-the-same-staff.ly +++ /dev/null @@ -1,89 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes, text" - - texidoces = " -La herramienta de combinación de partes ( instrucción -@code{\\partcombine}) permite la combinación de varias partes -diferentes sobre el mismo pentagrama. Las indicaciones textuales -tales como \"solo\" o \"a2\" se añaden de forma predeterminada; -para quitarlas, sencillamente establezca la propiedad -@code{printPartCombineTexts} al valor \"falso\". Para partituras -vocales (como himnos), no hay necesidad de añadir los textos -\"solo\" o \"a2\", por lo que se deben desactivar. Sin embargo, -podría ser mejor no usarlo si hay solos, porque éstos no se -indicarán. En tales casos podría ser preferible la notación -polifónica estándar. - -Este fragmento de código presenta las tres formas en que se pueden -imprimir dos partes sobre un solo pentagrama: polifonía estándar, -@code{\\partcombine} sin textos, y @code{\\partcombine} con -textos. - -" - doctitlees = "Combinar dos partes sobre el mismo pentagrama" - - texidoc = " -The part combiner tool ( @code{\\partcombine} command ) allows the -combination of several different parts on the same staff. Text -directions such as \"solo\" or \"a2\" are added by default; to remove -them, simply set the property @code{printPartCombineTexts} to -\"false\". For vocal scores (hymns), there is no need to add -\"solo\"/\"a2\" texts, so they should be switched off. However, it -might be better not to use it if there are any solos, as they won't be -indicated. In such cases, standard polyphonic notation may be -preferable. - -This snippet presents the three ways two parts can be printed on a same -staff: standard polyphony, @code{\\partcombine} without texts, and -@code{\\partcombine} with texts. - - - - -" - doctitle = "Combining two parts on the same staff" -} % begin verbatim - -musicUp = \relative c'' { - \time 4/4 - a4 c4.( g8) a4 | - g4 e' g,( a8 b) | - c b a2. -} - -musicDown = \relative c'' { - g4 e4.( d8) c4 | - r2 g'4( f8 e) | - d2 \stemDown a -} - -\score { - << - << - \new Staff { - \set Staff.instrumentName = "Standard polyphony " - << \musicUp \\ \musicDown >> - } - \new Staff \with { printPartCombineTexts = ##f } { - \set Staff.instrumentName = "PartCombine without texts " - \partcombine \musicUp \musicDown - } - \new Staff { - \set Staff.instrumentName = "PartCombine with texts " - \partcombine \musicUp \musicDown - } - >> - >> - \layout { - indent = 6.0\cm - \context { - \Score - \override SystemStartBar #'collapse-height = #30 - } - } -} - diff --git a/input/lsr/compound-time-signatures.ly b/input/lsr/compound-time-signatures.ly deleted file mode 100644 index 003b9c8c44..0000000000 --- a/input/lsr/compound-time-signatures.ly +++ /dev/null @@ -1,60 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - doctitlees = "Indicaciones de compases compuestos" - texidoces = " -Las indicaciones de compás poco frecuentes como \"5/8\" se pueden -ejecutar como compases compuestos (p.ej. \"3/8 + 2/8\"), que combinan -dos o más metros diferentes. LilyPond puede hacer la música de este -tipo fácil de leer e interpretar, imprimiendo explícitamente las -indicaciones de compás compuesto y adaptando el comportamiento -automático de las barras (también se pueden añadir indicaciones -gráficas de la agrupación de compases; véase el fragmento de código -apropiado en la base de datos). - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Ungerade Taktarten werden (wie etwa \"5/8\") werden oft als zusammengesetzte -Taktarten interpretiert (bspw. \"3/8 + 2/8\"), in welchen zwei oder mehr -Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, -indem entsprechende Taktarten gesetzt werden und die automatische -Bebalkung angepasst wird. - -" - doctitlede = "Zusammengesetzte Taktarten" - - texidoc = " -Odd 20th century time signatures (such as \"5/8\") can often be played -as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or -more inequal metrics. LilyPond can make such music quite easy to read -and play, by explicitly printing the compound time signatures and -adapting the automatic beaming behavior. (Graphic measure grouping -indications can also be added; see the appropriate snippet in this -database.) - -" - doctitle = "Compound time signatures" -} % begin verbatim - -#(define ((compound-time one two num) grob) - (grob-interpret-markup grob - (markup #:override '(baseline-skip . 0) #:number - (#:line ( - (#:column (one num)) - #:vcenter "+" - (#:column (two num))))))) - -\relative c' { - \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8") - \time 5/8 - #(override-auto-beam-setting '(end 1 8 5 8) 1 4) - c8 d e fis gis - c8 fis, gis e d - c8 d e4 gis8 -} diff --git a/input/lsr/conducting-signs,-measure-grouping-signs.ly b/input/lsr/conducting-signs,-measure-grouping-signs.ly deleted file mode 100644 index 1ff95278c9..0000000000 --- a/input/lsr/conducting-signs,-measure-grouping-signs.ly +++ /dev/null @@ -1,56 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Las opciones para agrupar los pulsos de un compás están a nuestra -disposición a través de la función de Scheme -@code{set-time-signature}, que acepta tres argumentos: el número -de pulsos, la longitud del pulso, y la agrupación interna de los -pulsos dentro del compás. Si se incluye el grabador -@code{Measure_grouping_engraver}, la función crea también símbolos -de agrupación @code{MeasureGrouping}. Dichos símbolos facilitan -la lectura de la música moderna de cierta complejidad rítmica. En -el ejemplo, el compás de 9/8 se subdivide en 2, 2, 2 y 3. Esto se -pasa a la función @code{set-time-signature} como tercer argumento: -@code{'(2 2 2 3)}: - -" -doctitlees = "Símbolos de dirección, símbolos de agrupación de compás" - - texidoc = " -Options to group beats within a bar are available through the Scheme -function @code{set-time-signature}, which takes three arguments: the -number of beats, the beat length, and the internal grouping of beats in -the measure. If the @code{Measure_grouping_engraver} is included, the -function will also create @code{MeasureGrouping} signs. Such signs -ease reading rhythmically complex modern music. In the example, the -9/8 measure is subdivided in 2, 2, 2 and 3. This is passed to -@code{set-time-signature} as the third argument: @code{'(2 2 2 3)}: - -" - doctitle = "Conducting signs, measure grouping signs" -} % begin verbatim - -\score { - \relative c'' { - #(set-time-signature 9 8 '(2 2 2 3)) - #(revert-auto-beam-setting '(end * * 9 8) 3 8) - #(override-auto-beam-setting '(end 1 8 9 8) 1 4) - #(override-auto-beam-setting '(end 1 8 9 8) 2 4) - #(override-auto-beam-setting '(end 1 8 9 8) 3 4) - g8 g d d g g a( bes g) | - #(set-time-signature 5 8 '(3 2)) - a4. g4 - } - \layout { - \context { - \Staff - \consists "Measure_grouping_engraver" - } - } -} - diff --git a/input/lsr/contemporary-glissando.ly b/input/lsr/contemporary-glissando.ly deleted file mode 100644 index ede768b62b..0000000000 --- a/input/lsr/contemporary-glissando.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Se puede tipografiar un gissando contemporáneo sin nota final -utilizando una nota oculta y temporalización de cadenza. - -" - doctitlees = "Glissando contemporáneo" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem -eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird. - -" - doctitlede = "Moderne Glissandi" - - texidoc = " -A contemporary glissando without a final note can be typeset using a -hidden note and cadenza timing. - -" - doctitle = "Contemporary glissando" -} % begin verbatim - -\relative c'' { - \time 3/4 - \override Glissando #'style = #'zigzag - c4 c - \cadenzaOn - c4\glissando - \hideNotes - c,,4 - \unHideNotes - \cadenzaOff - \bar "|" -} - diff --git a/input/lsr/controlling-the-placement-of-chord-fingerings.ly b/input/lsr/controlling-the-placement-of-chord-fingerings.ly deleted file mode 100644 index d488c5cb98..0000000000 --- a/input/lsr/controlling-the-placement-of-chord-fingerings.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, chords, keyboards, fretted-strings" - - texidoces = " -Se puede controlar con precisión la colocación de los números de digitación. - -" - doctitlees = "Controlar la colocación de las digitaciones de acordes" - - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Le positionnement des doigtés peut être contrôlé de manière très précise. - -" - doctitlefr = "Conrôle du positionnement des doigtés" - - texidoc = " -The placement of fingering numbers can be controlled precisely. - -" - doctitle = "Controlling the placement of chord fingerings" -} % begin verbatim - -\relative c' { - \set fingeringOrientations = #'(left) - 4 - \set fingeringOrientations = #'(down) - 4 - \set fingeringOrientations = #'(down right up) - 4 - \set fingeringOrientations = #'(up) - 4 - \set fingeringOrientations = #'(left) - 2 - \set fingeringOrientations = #'(down) - 2 -} - - diff --git a/input/lsr/controlling-the-vertical-ordering-of-scripts.ly b/input/lsr/controlling-the-vertical-ordering-of-scripts.ly deleted file mode 100644 index d8327c96dc..0000000000 --- a/input/lsr/controlling-the-vertical-ordering-of-scripts.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - - texidoces = " -El orden vertical que ocupan las inscripciones gráficas está -controlado con la propiedad @code{script-priority}. Cuanto más -bajo es este número, más cerca de la nota se colocará. En este -ejemplo, el @code{TextScript} (el sostenido) tiene primero la -prioridad más baja, por lo que se sitúa en la posición más baja en -el primer ejemplo. En el segundo, el semitrino (el @code{Script}) -es el que la tiene más baja, por lo que se sitúa en la parte -interior. Cuando dos objetos tienen la misma prioridad, el orden -en que se introducen determina cuál será el que aparece en primer -lugar. - -" - doctitlees = "Controlar la ordenación vertical de las inscripciones" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Die vertikale Anordnung von Beschriftungen wird mit der -@code{'script-priority}-Eigenschaft kontrolliert. Um so kleiner die -Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In -diesem Beispiel hat das @code{TextScript}-Objekt (das Kreuz) zuerst -die niedrigste Priorität, wird also auch am niedrigsten in dem ersten -Beispiel gesetzt. Im zweiten Fall hat der Praller (das @code{Script}) -die niedrigste Priorität, darum wird er am nächsten zum System gesetzt. -Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge -anhand ihres Auftretens in der Quelldatei entschieden. - -" - doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren" - - texidoc = " -The vertical ordering of scripts is controlled with the -@code{'script-priority} property. The lower this number, the closer it -will be put to the note. In this example, the @code{TextScript} (the -sharp symbol) first has the lowest priority, so it is put lowest in the -first example. In the second, the prall trill (the @code{Script}) has -the lowest, so it is on the inside. When two objects have the same -priority, the order in which they are entered determines which one -comes first. - -" - doctitle = "Controlling the vertical ordering of scripts" -} % begin verbatim - -\relative c''' { - \once \override TextScript #'script-priority = #-100 - a2^\prall^\markup { \sharp } - - \once \override Script #'script-priority = #-100 - a2^\prall^\markup { \sharp } -} - diff --git a/input/lsr/controlling-tuplet-bracket-visibility.ly b/input/lsr/controlling-tuplet-bracket-visibility.ly deleted file mode 100644 index 74c356cb89..0000000000 --- a/input/lsr/controlling-tuplet-bracket-visibility.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -The default behavior of tuplet-bracket visibility is to print a bracket -unless there is a beam of the same length as the tuplet. To control the -visibility of tuplet brackets, set the property -@code{'bracket-visibility} to either @code{#t} (always print a -bracket), @code{#f} (never print a bracket) or @code{#'if-no-beam} -(only print a bracket if there is no beam). - -" - doctitle = "Controlling tuplet bracket visibility" -} % begin verbatim - -music = \relative c'' { - \times 2/3 { c16[ d e } f8] - \times 2/3 { c8 d e } - \times 2/3 { c4 d e } -} - -\new Voice { - \relative c' { - << \music s4^"default" >> - \override TupletBracket #'bracket-visibility = #'if-no-beam - << \music s4^"'if-no-beam" >> - \override TupletBracket #'bracket-visibility = ##t - << \music s4^"#t" >> - \override TupletBracket #'bracket-visibility = ##f - << \music s4^"#f" >> - } -} - - diff --git a/input/lsr/creating-a-delayed-turn.ly b/input/lsr/creating-a-delayed-turn.ly deleted file mode 100644 index 3ed5d9a528..0000000000 --- a/input/lsr/creating-a-delayed-turn.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides" - -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 -varias sobreescriturasw de propiedades. La propiedad -@code{outside-staff-priority} se debe establecer al valor #f, pues en -caso contrario tendría prioridad sobre la propiedad @code{avoid-slur -property}. El valor de @code{halign} se utiliza para colocar el -grupeto horizontalmente. - -" - -doctitlees = "Crear un grupeto de anticipación" - - texidoc = " -Creating a delayed turn, where the lower note of the turn uses the -accidental, requires several overrides. The -@code{outside-staff-priority} property must be set to @code{#f}, as -otherwise this would take precedence over the @code{avoid-slur -property}. The value of @code{halign} is used to position the turn -horizontally. - -" - doctitle = "Creating a delayed turn" -} % begin verbatim - -\relative c'' { - \once \override TextScript #'avoid-slur = #'inside - \once \override TextScript #'outside-staff-priority = ##f - c2(^\markup \tiny \override #'(baseline-skip . 1) { - \halign #-4 - \center-column { - \sharp - \musicglyph #"scripts.turn" - } - } - d4.) c8 -} diff --git a/input/lsr/creating-arpeggios-across-notes-in-different-voices.ly b/input/lsr/creating-arpeggios-across-notes-in-different-voices.ly deleted file mode 100644 index d4967879e8..0000000000 --- a/input/lsr/creating-arpeggios-across-notes-in-different-voices.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Se puede trazar un símbolo de arpegio entre notas de distintas -voces que están sobre el mismo pentagrama si el grabador -@code{Span_arpeggio_engraver} se traslada al contexto de -@code{Staff} context: - -" - doctitlees = "Crear arpegios entre notas de voces distintas" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Ein Arpeggio kann zwischen Noten aus unterschidlichen Stimmen auf demselben -System gezogen werden, wenn der @code{Span_arpeggio_engraver} in den -@code{Staff}-Kontext verschoben wird: - -" - doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen" - - texidoc = " -An arpeggio can be drawn across notes in different voices on the same -staff if the @code{Span_arpeggio_engraver} is moved to the @code{Staff} -context: - -" - doctitle = "Creating arpeggios across notes in different voices" -} % begin verbatim - -\new Staff \with { - \consists "Span_arpeggio_engraver" -} -\relative c' { - \set Staff.connectArpeggios = ##t - << - { 4\arpeggio 2 } \\ - { 2\arpeggio 2 } - >> -} - diff --git a/input/lsr/creating-blank-staves.ly b/input/lsr/creating-blank-staves.ly deleted file mode 100644 index 538b549ff1..0000000000 --- a/input/lsr/creating-blank-staves.ly +++ /dev/null @@ -1,58 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout" - - 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} del contexto @code{Score}, y los -grabadores de la indicación de compás -@code{Time_signature_engraver}, de la clave @code{Clef_engraver} y -de los compases @code{Bar_engraver} del contexto de @code{Staff}. - -" - doctitlees = "Crear pentagramas en blanco" - - texidoc = " -To create blank staves, generate empty measures then remove the -@code{Bar_number_engraver} from the @code{Score} context, and the -@code{Time_signature_engraver}, @code{Clef_engraver} and -@code{Bar_engraver} from the @code{Staff} context. - -" - doctitle = "Creating blank staves" -} % begin verbatim - -#(set-global-staff-size 20) - -\score { - { - \repeat unfold 12 { s1 \break } - } - \layout { - indent = 0\in - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Clef_engraver" - \remove "Bar_engraver" - } - \context { - \Score - \remove "Bar_number_engraver" - } - } -} - -\paper { - #(set-paper-size "letter") - ragged-last-bottom = ##f - line-width = 7.5\in - left-margin = 0.5\in - bottom-margin = 0.25\in - top-margin = 0.25\in -} - diff --git a/input/lsr/creating-cross-staff-arpeggios-in-a-piano-staff.ly b/input/lsr/creating-cross-staff-arpeggios-in-a-piano-staff.ly deleted file mode 100644 index bac8cdbd4f..0000000000 --- a/input/lsr/creating-cross-staff-arpeggios-in-a-piano-staff.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Dentro de un @code{PianoStaff}, es posible hacer que un arpegio -cruce entre los pentagramas ajustando la propiedad -@code{PianoStaff.connectArpeggios}. - -" - doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Arpeggio über mehrere Systeme können in anderen Kontexten als dem -@code{PianoStaff} erstellt werden, wenn der @code{Span_arpeggio_engraver} -in den @code{Score}-Kontext eingefügt wird. - -" - doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten" - - texidoc = " -In a @code{PianoStaff}, it is possible to let an arpeggio cross between -the staves by setting the property @code{PianoStaff.connectArpeggios}. - - -" - doctitle = "Creating cross-staff arpeggios in a piano staff" -} % begin verbatim - -\new PianoStaff \relative c'' << - \set PianoStaff.connectArpeggios = ##t - \new Staff { - 4\arpeggio - 4\arpeggio - 4\arpeggio - 4\arpeggio - } - \new Staff { - \clef bass - \repeat unfold 4 { - 4\arpeggio - } - } ->> - diff --git a/input/lsr/creating-cross-staff-arpeggios-in-other-contexts.ly b/input/lsr/creating-cross-staff-arpeggios-in-other-contexts.ly deleted file mode 100644 index 7dfc106468..0000000000 --- a/input/lsr/creating-cross-staff-arpeggios-in-other-contexts.ly +++ /dev/null @@ -1,59 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Se pueden crear arpegios que se cruzan entre pentagramas dentro de -contextos distintos a @code{PianoStaff} si se incluye el grabador -@code{Span_arpeggio_engraver} en el contexto de @code{Score}. - -" - doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio -zwischen beiden Systemen zu verbinden, indem die -@code{PianoStaff.connectArpeggios}-Eigenschaft gesetzt wird. - - -" - doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen" - - texidoc = " -Cross-staff arpeggios can be created in contexts other than -@code{PianoStaff} if the @code{Span_arpeggio_engraver} is included in -the @code{Score} context. - -" - doctitle = "Creating cross-staff arpeggios in other contexts" -} % begin verbatim - -\score { - \new StaffGroup { - \set Score.connectArpeggios = ##t - << - \new Voice \relative c' { - 2\arpeggio - 2\arpeggio - 1\arpeggio - } - \new Voice \relative c { - \clef bass - 2\arpeggio - 2\arpeggio - 1\arpeggio - } - >> - } - \layout { - \context { - \Score - \consists "Span_arpeggio_engraver" - } - } -} - diff --git a/input/lsr/creating-metronome-marks-in-markup-mode.ly b/input/lsr/creating-metronome-marks-in-markup-mode.ly deleted file mode 100644 index de8b721df1..0000000000 --- a/input/lsr/creating-metronome-marks-in-markup-mode.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation" - - texidoces = " -Se pueden crear indicaciones metronómicas nuevas en modo de -marcado, pero no cambian el tempo en la salida MIDI. - -" - doctitlees = "Crear indicaciones metronómicas en modo de marcado" - - - texidoc = " -New metronome marks can be created in markup mode, but they will not -change the tempo in MIDI output. - -" - doctitle = "Creating metronome marks in markup mode" -} % begin verbatim - -\relative c' { - \tempo \markup { - \concat { - ( - \smaller \general-align #Y #DOWN \note #"16." #1 - " = " - \smaller \general-align #Y #DOWN \note #"8" #1 - ) - } - } - c1 - c4 c' c,2 -} diff --git a/input/lsr/creating-real-parenthesized-dynamics.ly b/input/lsr/creating-real-parenthesized-dynamics.ly deleted file mode 100644 index 870671166c..0000000000 --- a/input/lsr/creating-real-parenthesized-dynamics.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, text" - - 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 -tiene un inconveniente: los objetos que se crean se comportarán -como elementos de marcado de texto y no como indicaciones -dinámicas. - -Sin embargo, es posible crear un objeto similar utilizando el -código de Scheme equivalente (como se explica en \"Interfaz del -programador de elementos de marcado\"), en combinación con la -función @code{make-dynamic-script}. De esta forma, el elemento de -marcado se tratará como una indicación dinámica, y por tanto -seguirá siendo compatible con instrucciones como -@code{\\dynamicUp} o @code{\\dynamicDown}. - -" - doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis" - - texidoc = " -Although the easiest way to add parentheses to a dynamic mark is to use -a @code{\\markup} block, this method has a downside: the created -objects will behave like text markups, and not like dynamics. - -However, it is possible to create a similar object using the equivalent -Scheme code (as described in \"Markup programmer interface\"), combined -with the @code{make-dynamic-script} function. This way, the markup will -be regarded as a dynamic, and therefore will remain compatible with -commands such as @code{\\dynamicUp} or @code{\\dynamicDown}. - - - -" - doctitle = "Creating \"real\" parenthesized dynamics" -} % begin verbatim - -parenF = #(make-dynamic-script (markup #:line (#:normal-text #:italic - #:fontsize 2 "(" #:hspace -0.8 #:dynamic "f" #:normal-text - #:italic #:fontsize 2 ")"))) - -\relative c'' { - c4\parenF c c \dynamicUp c\parenF -} - diff --git a/input/lsr/custodes.ly b/input/lsr/custodes.ly deleted file mode 100644 index da0eb0da67..0000000000 --- a/input/lsr/custodes.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "ancient-notation, tweaks-and-overrides" - - texidoces = " -Se pueden tipografiar «custos» en diferentes estilos. - -" - doctitlees = "Custos" - - texidoc = " -Custodes may be engraved in various styles. - -" - doctitle = "Custodes" -} % begin verbatim - -\layout { ragged-right = ##t } - -\new Staff \with { \consists "Custos_engraver" } \relative c' { - \override Staff.Custos #'neutral-position = #4 - - \override Staff.Custos #'style = #'hufnagel - c1^"hufnagel" \break - 1 - - \override Staff.Custos #'style = #'medicaea - c1^"medicaea" \break - 1 - - \override Staff.Custos #'style = #'vaticana - c1^"vaticana" \break - 1 - - \override Staff.Custos #'style = #'mensural - c1^"mensural" \break - 1 -} - diff --git a/input/lsr/default-direction-of-stems-on-the-center-line-of-the-staff.ly b/input/lsr/default-direction-of-stems-on-the-center-line-of-the-staff.ly deleted file mode 100644 index 4f2fe64389..0000000000 --- a/input/lsr/default-direction-of-stems-on-the-center-line-of-the-staff.ly +++ /dev/null @@ -1,31 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations" - - texidoces = " -La dirección predeterminada de las plicas sobre la tercera línea -del pentagrama está determinada por la propiedad -@code{neutral-direction} del objeto @code{Stem}. - -" - doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama" - - texidoc = " -The default direction of stems on the center line of the staff is set -by the @code{Stem} property @code{neutral-direction}. - -" - doctitle = "Default direction of stems on the center line of the staff" -} % begin verbatim - -\relative c'' { - a4 b c b - \override Stem #'neutral-direction = #up - a4 b c b - \override Stem #'neutral-direction = #down - a4 b c b -} - diff --git a/input/lsr/defining-predefined-fretboards-for-other-instruments.ly b/input/lsr/defining-predefined-fretboards-for-other-instruments.ly deleted file mode 100644 index a64b4ad7af..0000000000 --- a/input/lsr/defining-predefined-fretboards-for-other-instruments.ly +++ /dev/null @@ -1,146 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - texidoces = " - -Se pueden añadir diagramas de posiciones predefinidas para -instrumentos nuevos además de los estándar que se usan para la -guitarra. Este archivo muestra cómo se hace, definiendo una afinación -nueva y unas cuantas posiciones para el cuatro venezolano. - -Este archivo también muestra cómo se pueden incluir las digitaciones -en los acordes que se usan como puntos de referencia para la búsqueda -de acordes en la tabla, y mostrarse en el diagrama de posiciones y la -tablatura @code{TabStaff}, pero no en la música. - -Estas posiciones no se pueden transportar porque contienen información -de las cuerdas. Hay planes para corregir esto en un futuro. - -" - doctitlees = "Definición de posiciones predefinidas para otros instrumentos" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -La liste des diagrammes standards prédéfinis pour la guitare peut être - augmentée d'autres définitions spécifiques à d'autres instruments. -Voici comment définir un nouvel accordage ainsi que quelques diagrammes -prédéfinis pour le @qq{cuatro vénézuélien}. - -Cet exemple illustre aussi la manière d'ajouter des doigtés aux -accords ; ils serviront de référence pour la boucle d'accord et seront -indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. - -Ces diagrémmes ne peuvent pas être transposés, dans la mesure où ils -contiennent des informations sur les condes. Ceci est amené à évoluer. - -" - doctitlefr = "Création de diagrammes de fret prédéfinis pour -d'autres instruments" - - texidoc = " -Predefined fret diagrams can be added for new instruments in addition -to the standards used for guitar. This file shows how this is done by -defining a new string-tuning and a few predefined fretboards for the -Venezuelan cuatro. - -This file also shows how fingerings can be included in the chords used -as reference points for the chord lookup, and displayed in the fret -diagram and the @code{TabStaff}, but not the music. - - -These fretboards are not transposable because they contain string -information. This is planned to be corrected in the future. - -" - doctitle = "Defining predefined fretboards for other instruments" -} % begin verbatim - -% add FretBoards for the Cuatro -% Note: This section could be put into a separate file -% predefined-cuatro-fretboards.ly -% and \included into each of your compositions - -cuatroTuning = #'(11 18 14 9) - -dSix = { } -dMajor = { } -aMajSeven = { } -dMajSeven = { } -gMajor = { } - -\storePredefinedDiagram \dSix - #cuatroTuning - #"o;o;o;o;" -\storePredefinedDiagram \dMajor - #cuatroTuning - #"o;o;o;3-3;" -\storePredefinedDiagram \aMajSeven - #cuatroTuning - #"o;2-2;1-1;2-3;" -\storePredefinedDiagram \dMajSeven - #cuatroTuning - #"o;o;o;1-1;" -\storePredefinedDiagram \gMajor - #cuatroTuning - #"2-2;o;1-1;o;" - -% end of potential include file /predefined-cuatro-fretboards.ly - - -#(set-global-staff-size 16) - -primerosNames = \chordmode { - d:6 d a:maj7 d:maj7 - g -} -primeros = { - \dSix \dMajor \aMajSeven \dMajSeven - \gMajor -} - -\score { - << - \new ChordNames { - \set chordChanges = ##t - \primerosNames - } - - \new Staff { - \new Voice \with { - \remove "New_fingering_engraver" - } - \relative c'' { - \primeros - } - } - - \new FretBoards { - \set stringTunings = #cuatroTuning - \override FretBoard - #'(fret-diagram-details string-count) = #'4 - \override FretBoard - #'(fret-diagram-details finger-code) = #'in-dot - \primeros - } - - \new TabStaff \relative c'' { - \set TabStaff.stringTunings = #cuatroTuning - \primeros - } - - >> - - \layout { - \context { - \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 16) - } - } - \midi { } -} diff --git a/input/lsr/display-bracket-with-only-one-staff-in-a-system.ly b/input/lsr/display-bracket-with-only-one-staff-in-a-system.ly deleted file mode 100644 index cc0e44e137..0000000000 --- a/input/lsr/display-bracket-with-only-one-staff-in-a-system.ly +++ /dev/null @@ -1,60 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides" - - texidoces = " -Si hay un solo pentagrama en un de los tipos de sistema -@code{ChoirStaff} o @code{StaffGroup}, el comportamiento -predeterminado es que no se imprima el corchete en la barra inicial. -Esto se puede cambiar sobreescribiendo las propiedades adecuadas. - -Observe que en contextos como @code{PianoStaff} y -@code{GrandStaff} en que los sistemas empiezan con una llave en -lugar de un corchete, se debe establecer el valor de una propiedad -distinta, como se ve en el segundo sistema del ejemplo. - -" - doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama" - - - texidoc = " -If there is only one staff in one of the staff types @code{ChoirStaff} -or @code{StaffGroup}, the bracket and the starting bar line will not be -displayed as standard behavior. This can be changed by overriding the -relevant properties. - -Note that in contexts such as @code{PianoStaff} and @code{GrandStaff} -where the systems begin with a brace instead of a bracket, another -property has to be set, as shown on the second system in the example. - -" - doctitle = "Display bracket with only one staff in a system" -} % begin verbatim - -\markup \left-column { - \score { - \new StaffGroup << - % Must be lower than the actual number of staff lines - \override StaffGroup.SystemStartBracket #'collapse-height = #1 - \override Score.SystemStartBar #'collapse-height = #1 - \new Staff { - c'1 - } - >> - \layout { } - } - \null - \score { - \new PianoStaff << - \override PianoStaff.SystemStartBrace #'collapse-height = #1 - \override Score.SystemStartBar #'collapse-height = #1 - \new Staff { - c'1 - } - >> - \layout { } - } -} diff --git a/input/lsr/displaying-complex-chords.ly b/input/lsr/displaying-complex-chords.ly deleted file mode 100644 index aef40d9c09..0000000000 --- a/input/lsr/displaying-complex-chords.ly +++ /dev/null @@ -1,31 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes, chords" - - texidoc = " -Here is a way to display a chord where the same note is played twice -with different accidentals. - -" - doctitle = "Displaying complex chords" -} % begin verbatim - -fixA = { - \once \override Stem #'length = #9 - \once \override Accidental #'extra-offset = #'(0.3 . 0) -} -fixB = { - \once \override NoteHead #'extra-offset = #'(1.7 . 0) - \once \override Stem #'rotation = #'(45 0 0) - \once \override Stem #'extra-offset = #'(-0.2 . -0.2) - \once \override Stem #'flag-style = #'no-flag - \once \override Accidental #'extra-offset = #'(3.1 . 0) -} - -\relative c' { - << { \fixA 8 } \\ { \voiceThree \fixB dis } >> s -} - diff --git a/input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly b/input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly deleted file mode 100644 index cea81a132b..0000000000 --- a/input/lsr/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly +++ /dev/null @@ -1,63 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches" - - 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 -Webern (la \"Segunda\" escuela de Viena), cada nota de la escala de -doce tonos se debe tratar con igualdad, sin ninguna jerarquía como los -grados clásicos tonales. Por tanto, estos compositores imprimen una -alteración accidental para cada nota, incluso en las notas naturales, -para enfatizar su nuevo enfoque de la teoría y el lenguaje musicales. - -Este fragmento de código muestra cómo conseguir dichas reglas de -notación. - -" - - texidocde = " - In Werken des fürhen 20. Jahrhundert, angefangen mit Schönberg, Berg - und Webern (die zweite Wiener Schule), wird jeder Ton der - Zwölftonleiter als gleichwertig erachtet, ohne hierarchische - Ordnung. Deshalb wird in dieser Musik für jede Note ein Versetzungszeichen - ausgegeben, auch für unalterierte Tonhöhen, um das neue Verständnis - der Musiktheorie und Musiksprache zu verdeutlichen. - - Dieser Schnipsel zeigt, wie derartige Notationsregeln zu erstellen sind. - " - -doctitlede = "Versetzungszeichen für jede Note im Stil der Zwölftonmusik" - - texidoc = " -In early 20th century works, starting with Schoenberg, Berg and Webern -(the \"Second\" Viennese school), every pitch in the twelve-tone scale -has to be regarded as equal, without any hierarchy such as the -classical (tonal) degrees. Therefore, these composers print one -accidental for each note, even at natural pitches, to emphasize their -new approach to music theory and language. - -This snippet shows how to achieve such notation rules. - -" - doctitle = "Dodecaphonic-style accidentals for each note including naturals" -} % begin verbatim - -\score { - \new Staff { - #(set-accidental-style 'dodecaphonic) - c'4 dis' cis' cis' - c'4 dis' cis' cis' - c'4 c' dis' des' - } - \layout { - \context { - \Staff - \remove "Key_engraver" - } - } -} - diff --git a/input/lsr/dotted-harmonics.ly b/input/lsr/dotted-harmonics.ly deleted file mode 100644 index b2c337c2d3..0000000000 --- a/input/lsr/dotted-harmonics.ly +++ /dev/null @@ -1,24 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "unfretted-strings, tweaks-and-overrides" - - texidoc = " -Artificial harmonics using @code{\\harmonic} do not show dots. To -override this behavior, set the context property @code{harmonicDots}. - -" - doctitle = "Dotted harmonics" -} % begin verbatim - -\relative c''' { - \time 3/4 - \key f \major - \set harmonicDots = ##t - 2. ~ - 4. 8( ) - 2. - 2. -} diff --git a/input/lsr/double-glissando.ly b/input/lsr/double-glissando.ly deleted file mode 100644 index c2c74d224f..0000000000 --- a/input/lsr/double-glissando.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, simultaneous-notes" - - texidoc = " -To connect chords with glissando lines, attach a second glissando to a -hidden voice. - -" - doctitle = "Double glissando" -} % begin verbatim - -\relative c { - \clef bass - << - { - % new voice ( = \voiceOne), hidden - \hideNotes - % attach glissando to note heads - e2\glissando g - } - \\ - { - % original voice with chords rearranged so that - % glissando is attached to a & c - 2\glissando - } - >> -} - diff --git a/input/lsr/drawing-boxes-around-grobs.ly b/input/lsr/drawing-boxes-around-grobs.ly deleted file mode 100644 index 63b64b1a80..0000000000 --- a/input/lsr/drawing-boxes-around-grobs.ly +++ /dev/null @@ -1,34 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, tweaks-and-overrides" - - texidoc = " -The @code{print-function} can be overridden to draw a box around an -arbitrary grob. - -" - doctitle = "Drawing boxes around grobs" -} % begin verbatim - -\relative c'' { - \override TextScript #'stencil = - #(make-stencil-boxer 0.1 0.3 ly:text-interface::print) - c'4^"foo" - - \override Stem #'stencil = - #(make-stencil-boxer 0.05 0.25 ly:stem::print) - \override Score.RehearsalMark #'stencil = - #(make-stencil-boxer 0.15 0.3 ly:text-interface::print) - b8 - - \revert Stem #'stencil - c4. c4 - \mark "F" - c1 -} - - - diff --git a/input/lsr/embedding-native-postscript-in-a--markup-block.ly b/input/lsr/embedding-native-postscript-in-a--markup-block.ly deleted file mode 100644 index b24fffc534..0000000000 --- a/input/lsr/embedding-native-postscript-in-a--markup-block.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, text" - - texidoces = " -Se puede insertar códico PostScript directamente dentro de un -bloque @code{\\markup}. - -" - doctitlees = "Empotrar PostScript nativo dentro de un bloque \\markup" - - texidoc = " -PostScript code can be directly inserted inside a @code{\\markup} -block. - -" - doctitle = "Embedding native PostScript in a \\markup block" -} % begin verbatim - -% PostScript is a registered trademark of Adobe Systems Inc. - -\relative c'' { - a4-\markup { \postscript #"3 4 moveto 5 3 rlineto stroke" } - -\markup { \postscript #"[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " } - - b4-\markup { \postscript #"3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" } - s2 - a'1 -} - diff --git a/input/lsr/engravers-one-by-one.ly b/input/lsr/engravers-one-by-one.ly deleted file mode 100644 index 1defdf8b3b..0000000000 --- a/input/lsr/engravers-one-by-one.ly +++ /dev/null @@ -1,317 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "contexts-and-engravers" - - texidoces = " -Del problema central de la notación, esto es, crear un determinado -símbolo, se encargan los «plugins» o complementos añadidos. Cada -uno de los complementos se conoce como un grabador. En este -ejemplo, los grabadores se van activando uno por uno, en el orden -siguiente: - -- cabeza de las notas, - -- el símbolo del pentagrama, - -- clave, - -- plicas, - -- barras, ligaduras de expresión, acentos, - -- alteraciones, líneas divisorias, indicación del compás, y armadura. - -Los grabadores se encuentran agrupados. Por ejemplo, las cabezas -de nota, ligaduras de expresión, barras de corchea, etc. forman un -contexto de voz. Los grabadores de la armadura, alteraciones, -compás, etc. forman un contexto de pentagrama. - -Sólo podemos ver el primer ejemplo en este documento; para ver los -demás debemos descartar el fragmento de código y procesarlo en -nuestro ordenador. - -" - doctitlees = "Los grabadores, uno por uno" - - texidoc = " -The notation problem, creating a certain symbol, is handled by plugins. -Each plugin is called an Engraver. In this example, engravers are -switched on one by one, in the following order: - -- note heads - - -- staff symbol, - - -- clef, - - -- stem, - - -- beams, slurs, accents, - - -- accidentals, bar lines, time signature, and key signature. - - - -Engravers are grouped. For example, note heads, slurs, beams etc. form -a Voice context. Engravers for key, accidental, bar, etc. form a Staff -context. - - -You may only see the first example in this document; please download -this snippet and run it from your own computer. - -" - doctitle = "Engravers one-by-one" -} % begin verbatim - -%% sample music -topVoice = \relative c' { - \key d\major - es8([ g] a[ fis]) - b4 - b16[-. b-. b-. cis-.] - d4-> -} - -botVoice = \relative c' { - \key d\major - c8[( f] b[ a)] - es4 - es16[-. es-. es-. fis-.] - b4-> -} - -hoom = \relative c { - \key d \major - \clef bass - g8-. r - r4 - fis8-. - r8 - r4 - b'4-> -} - -pah = \relative c' { - r8 b-. - r4 - r8 g8-. - r16 g-. r8 - \clef treble - fis'4-> -} - -% -% setup for Request->Element conversion. Guru-only -% - -MyStaff =\context { - \type "Engraver_group" - \name Staff - - \description "Handles clefs, bar lines, keys, accidentals. It can contain -@code{Voice} contexts." - - - \consists "Output_property_engraver" - - \consists "Font_size_engraver" - - \consists "Volta_engraver" - \consists "Separating_line_group_engraver" - \consists "Dot_column_engraver" - - \consists "Ottava_spanner_engraver" - \consists "Rest_collision_engraver" - \consists "Piano_pedal_engraver" - \consists "Piano_pedal_align_engraver" - \consists "Instrument_name_engraver" - \consists "Grob_pq_engraver" - \consists "Forbid_line_break_engraver" - \consists "Axis_group_engraver" - - \consists "Pitch_squash_engraver" - - \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6) - extraVerticalExtent = ##f - verticalExtent = ##f - localKeySignature = #'() - - % explicitly set instrument, so we don't get - % weird effects when doing instrument names for - % piano staves - - instrumentName = #'() - shortInstrumentName = #'() - - \accepts "Voice" -} - - -MyVoice = \context { - \type "Engraver_group" - \name Voice - - \description " - Corresponds to a voice on a staff. This context handles the - conversion of dynamic signs, stems, beams, super- and subscripts, - slurs, ties, and rests. - - You have to instantiate this explicitly if you want to have - multiple voices on the same staff." - - localKeySignature = #'() - \consists "Font_size_engraver" - - % must come before all - \consists "Output_property_engraver" - \consists "Arpeggio_engraver" - \consists "Multi_measure_rest_engraver" - \consists "Text_spanner_engraver" - \consists "Grob_pq_engraver" - \consists "Note_head_line_engraver" - \consists "Glissando_engraver" - \consists "Ligature_bracket_engraver" - \consists "Breathing_sign_engraver" - % \consists "Rest_engraver" - \consists "Grace_beam_engraver" - \consists "New_fingering_engraver" - \consists "Chord_tremolo_engraver" - \consists "Percent_repeat_engraver" - \consists "Slash_repeat_engraver" - -%{ - Must come before text_engraver, but after note_column engraver. - -%} - \consists "Text_engraver" - \consists "Dynamic_engraver" - \consists "Fingering_engraver" - - \consists "Script_column_engraver" - \consists "Rhythmic_column_engraver" - \consists "Cluster_spanner_engraver" - \consists "Tie_engraver" - \consists "Tie_engraver" - \consists "Tuplet_engraver" - \consists "Note_heads_engraver" - \consists "Rest_engraver" - - \consists "Skip_event_swallow_translator" -} - - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - - -MyStaff = \context { - \MyStaff - \consists "Staff_symbol_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyStaff = \context { - \MyStaff - \consists "Clef_engraver" - \remove "Pitch_squash_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyVoice = \context { - \MyVoice - \consists "Stem_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyVoice = \context { - \MyVoice - \consists "Beam_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyVoice= \context { - \MyVoice - \consists "Phrasing_slur_engraver" - \consists "Slur_engraver" - \consists "Script_engraver" -} - - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyStaff = \context { - \MyStaff - \consists "Bar_engraver" - \consists "Time_signature_engraver" -} - -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - -MyStaff = \context { - \MyStaff - \consists "Accidental_engraver" - \consists "Key_engraver" -} -\score { - \topVoice - \layout { - \context { \MyStaff } - \context { \MyVoice } - } -} - - diff --git a/input/lsr/engraving-ties-manually.ly b/input/lsr/engraving-ties-manually.ly deleted file mode 100644 index 4ef5148c54..0000000000 --- a/input/lsr/engraving-ties-manually.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - doctitlees = "Grabado manual de las ligaduras" - texidoces = " -Se pueden grabar a mano las ligaduras modificando la propiedad -@code{tie-configuration} del objeto @code{TieColumn}. El primer número -indica la distancia a partir de la tercera línea del pentagrama en -espacios de pentagrama, y el segundo número indica la dirección (1 = -hacia arriba, -1 = hacia abajo). - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Überbindungen können manuell gesetzt werden, indem man die -@code{tie-configuration}-Eigenschaft des @code{TieColumn}-Objekts -beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in -Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben, --1 = nach unten). - -" - doctitlede = "Bindebögen manuell setzen" - - texidoc = " -Ties may be engraved manually by changing the @code{tie-configuration} -property of the @code{TieColumn} object. The first number indicates the -distance from the center of the staff in staff-spaces, and the second -number indicates the direction (1 = up, -1 = down). - -" - doctitle = "Engraving ties manually" -} % begin verbatim - -\relative c' { - 2 ~ - \override TieColumn #'tie-configuration = - #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1)) - ~ -} - diff --git a/input/lsr/entering-several-tuplets-using-only-one--times-command.ly b/input/lsr/entering-several-tuplets-using-only-one--times-command.ly deleted file mode 100644 index bb6d35bdc5..0000000000 --- a/input/lsr/entering-several-tuplets-using-only-one--times-command.ly +++ /dev/null @@ -1,62 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times" - texidoces = " -La propiedad @code{tupletSpannerDuration} establece cuánto debe durar -cada grupo de valoración especial contenido dentro del corchete que -aparece después de @code{\\times}. Así, se pueden escribir muchos -tresillos seguidos dentro de una sola expresión @code{\\times}, -ahorrando trabajo de teclado. - -En el ejemplo se muestran dos tresillos, aunque se ha escrito -@code{\\times} una sola vez. - - -Para ver más inforamción sobre @code{make-moment}, véase -\"Administración del tiempo\". - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede -der N-tolen innerhalb der Klammern nach dem @code{\\times}-Befehl -dauert. Auf diese Art können etwa viele Triolen nacheinander mit nur -einem @code{\\times}-Befehl geschrieben werden. - -Im Beispiel sind zwei Triolen zu sehen, obwohl @code{\\times} nur -einmal geschrieben wurde. - -Mehr Information über @code{make-moment} gibt es in \"Verwaltung der Zeiteinheiten\". - -" - doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen" - - texidoc = " -The property @code{tupletSpannerDuration} sets how long each of the -tuplets contained within the brackets after @code{\\times} should last. -Many consecutive tuplets can then be placed within a single -@code{\\times} expression, thus saving typing. - -In the example, two triplets are shown, while @code{\\times} was -entered only once. - - -For more information about @code{make-moment}, see \"Time -administration\". - -" - doctitle = "Entering several tuplets using only one \\times command" -} % begin verbatim - -\relative c' { - \time 2/4 - \set tupletSpannerDuration = #(ly:make-moment 1 4) - \times 2/3 { c8 c c c c c } -} - diff --git a/input/lsr/expressive-marks.snippet-list b/input/lsr/expressive-marks.snippet-list deleted file mode 100644 index 52e644d012..0000000000 --- a/input/lsr/expressive-marks.snippet-list +++ /dev/null @@ -1,39 +0,0 @@ -adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly -adding-parentheses-around-an-expressive-mark-or-chordal-note.ly -adjusting-the-shape-of-falls-and-doits.ly -breathing-signs.ly -broken-crescendo-hairpin.ly -caesura-railtracks-with-fermata.ly -center-text-below-hairpin-dynamics.ly -changing--flageolet-mark-size.ly -changing-text-and-spanner-styles-for-text-dynamics.ly -changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly -changing-the-breath-mark-symbol.ly -combining-dynamics-with-markup-texts.ly -contemporary-glissando.ly -controlling-the-vertical-ordering-of-scripts.ly -creating-a-delayed-turn.ly -creating-arpeggios-across-notes-in-different-voices.ly -creating-cross-staff-arpeggios-in-a-piano-staff.ly -creating-cross-staff-arpeggios-in-other-contexts.ly -creating-real-parenthesized-dynamics.ly -creating-simultaneous-rehearsal-marks.ly -creating-slurs-across-voices.ly -creating-text-spanners.ly -double-glissando.ly -hiding-the-extender-line-for-text-dynamics.ly -horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly -inserting-a-caesura.ly -laissez-vibrer-ties.ly -line-arrows.ly -modifying-default-values-for-articulation-shorthand-notation.ly -piano-template-with-centered-dynamics.ly -positioning-text-markups-inside-slurs.ly -printing-hairpins-using-al-niente-notation.ly -printing-metronome-and-rehearsal-marks-below-the-staff.ly -setting-hairpin-behavior-at-bar-lines.ly -setting-the-minimum-length-of-hairpins.ly -snap-pizzicato-markup-bartok-pizzicato.ly -using-double-slurs-for-legato-chords.ly -vertical-line-as-a-baroque-articulation-mark.ly -vertically-aligning-dynamics-across-multiple-notes.ly diff --git a/input/lsr/faking-a-hammer-in-tablatures.ly b/input/lsr/faking-a-hammer-in-tablatures.ly deleted file mode 100644 index 9ff1735ded..0000000000 --- a/input/lsr/faking-a-hammer-in-tablatures.ly +++ /dev/null @@ -1,24 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - texidoc = " -A hammer in tablature can be faked with slurs. - -" - doctitle = "Faking a hammer in tablatures" -} % begin verbatim - -\score { - \new TabStaff { - \relative c'' { - c4( d) d( d) - d2( c) - } - } -} - - diff --git a/input/lsr/fine-tuning-pedal-brackets.ly b/input/lsr/fine-tuning-pedal-brackets.ly deleted file mode 100644 index 150d4cadac..0000000000 --- a/input/lsr/fine-tuning-pedal-brackets.ly +++ /dev/null @@ -1,25 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "keyboards, tweaks-and-overrides" - - texidoc = " -The appearance of pedal brackets may be altered in different ways. - -" - doctitle = "Fine-tuning pedal brackets" -} % begin verbatim - -\paper { ragged-right = ##f } -\relative c'' { - c2\sostenutoOn c - c2\sostenutoOff c - \once \override Staff.PianoPedalBracket #'shorten-pair = #'(-7 . -2) - c2\sostenutoOn c - c2\sostenutoOff c - \once \override Staff.PianoPedalBracket #'edge-height = #'(0 . 3) - c2\sostenutoOn c - c2\sostenutoOff c -} diff --git a/input/lsr/fingerings,-string-indications,-and-right-hand-fingerings.ly b/input/lsr/fingerings,-string-indications,-and-right-hand-fingerings.ly deleted file mode 100644 index 7aef035a1d..0000000000 --- a/input/lsr/fingerings,-string-indications,-and-right-hand-fingerings.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - texidoces = " -En este ejemplo se combinan las digitaciones de la mano izquierda, -indicaciones del número de cuerda y digitaciones de la mano -derecha. - -" - doctitlees = "Digitaciones, indicación del número de cuerda y digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -L'exemple suivant illustre comment combiner des doigtés pour la main -gauche, des indications de corrde et des doigtés pour la main droite. - -" - doctitlefr = "Doigtés, indications de cordeet doigtés main droite" - - - texidoc = " -This example combines left-hand fingering, string indications, and -right-hand fingering. - -" - doctitle = "Fingerings, string indications, and right-hand fingerings" -} % begin verbatim - -#(define RH rightHandFinger) - -\relative c { - \clef "treble_8" - 4 - 4 - 4 - 4 -} - diff --git a/input/lsr/flamenco-notation.ly b/input/lsr/flamenco-notation.ly deleted file mode 100644 index 4319ecc404..0000000000 --- a/input/lsr/flamenco-notation.ly +++ /dev/null @@ -1,249 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - texidoc = " -For flamenco guitar, special notation is used: - - -* a golpe symbol to indicate a slap on the guitar body with the nail of -the ring finger - - -* an arrow to indicate (the direction of) strokes - - -* different letters for fingering (\"p\": thumb, \"i\": index finger, -\"m\": middle finger, \"a\": ring finger and \"x\": little finger) - - -* 3- and 4-finger rasgueados; stroke upwards with all fingers, ending -with an up- and down using the index finger - - -* abanicos: strokes (in tuples) with thumb (down), little and index -finger (both up). There's also an abanico 2 where middle and ring -finger are used instead of the little finger. - - -* alza pua: fast playing with the thumb - - -Most figures use arrows in combination with fingering; with abanicos -and rasgueados, noteheads are printed only for the first chord. - -This snippet contains some header-like code that can be copied as -@samp{flamenco.ly} and included in source files. - -" - doctitle = "Flamenco notation" -} % begin verbatim - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%% Cut here ----- Start 'flamenco.ly' - -% Text indicators -abanico = \markup { \italic Abanico } -rasgueaso = \markup { \italic Ras. } -alzapua = \markup { \italic Alzapua } - -% Finger stroke symbols -strokeUp = \markup { \postscript #" - 0.1 setlinewidth - 0.5 0 moveto - 0.5 2 lineto - 0.2 1.4 lineto - 0.5 2 moveto - 0.8 1.4 lineto - stroke -"} - -strokeDown = \markup { \postscript #" - 0.1 setlinewidth - 0.5 2 moveto - 0.5 0 lineto - 0.2 0.6 lineto - 0.5 0 moveto - 0.8 0.6 lineto - stroke -"} - -% Golpe symbol -golpe = \markup { \postscript #" - 0.2 setlinewidth - 0 0 moveto - 1 0 lineto - 1 1 lineto - stroke - "\postscript #" - 0.1 setlinewidth - -0.6 -0.1 moveto - -0.6 1.0 lineto - 0.5 1.0 lineto - stroke -"} - -strokeUpGolpe = \markup { \column { \golpe \line { \strokeUp }}} -iUpGolpe = \markup { \column { \golpe \line { \small i } \line { \strokeUp }}} - -% Strokes for all fingers -pUp = \markup { \column { \small p \line { \strokeUp }}} -pDown = \markup { \column { \small p \line { \strokeDown }}} -iUp = \markup { \column { \small i \line { \strokeUp }}} -iDown = \markup { \column { \small i \line { \strokeDown }}} -mUp = \markup { \column { \small m \line { \strokeUp }}} -mDown = \markup { \column { \small m \line { \strokeDown }}} -aUp = \markup { \column { \small a \line { \strokeUp }}} -aDown = \markup { \column { \small a \line { \strokeDown }}} -xUp = \markup { \column { \small x \line { \strokeUp }}} -xDown = \markup { \column { \small x \line { \strokeDown }}} - - -% Just handy :) -tupletOff = { - \once \override TupletNumber #'stencil = ##f - \once \override TupletBracket #'stencil = ##f -} - -tupletsOff = { - \override TupletNumber #'stencil = ##f - \override TupletBracket #'bracket-visibility = #'if-no-beam -} - -tupletsOn = { - \override TupletBracket #'bracket-visibility = #'default - \revert TupletNumber #'stencil -} - -headsOff = { - \override TabNoteHead #'transparent = ##t - \override NoteHead #'transparent = ##t - \override NoteHead #'no-ledgers = ##t -} - -headsOn = { - \override TabNoteHead #'transparent = ##f - \override NoteHead #'transparent = ##f - \override NoteHead #'no-ledgers = ##f -} - -%%%%%%% Cut here ----- End 'flamenco.ly' -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -part = \relative c' { - 8^\iUp - 8^\iDown - r4 - r2^\golpe - - 8^\iUp - 8^\iDown - 8^\iUpGolpe - 8^\iDown - r2 - - 16^\aUp - \headsOff - ^\mUp - ^\iUp - ^\iDown~ - \headsOn - 2 - r4 - - \tupletOff - \times 4/5 { - 16^\xUp - \headsOff - ^\aUp - ^\mUp - ^\iUp - ^\iDown~ - \headsOn - } - 2 - r4 - - \tupletsOff - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - \times 2/3 { - 8^\pDown - \headsOff - ^\xUp - ^\iUp - \headsOn - } - - \tupletsOff - \override Beam #'positions = #'(2 . 2) - \times 2/3 { - a8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \times 2/3 { - a,8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \times 2/3 { - a,8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \times 2/3 { - a,8^\markup{ \small p } - ^\strokeUpGolpe - ^\strokeDown - } - \tupletsOn - - \once \override TextScript #'extra-offset = #'(0 . -1) - 1_\golpe^\mUp - \bar "|." -} - -\score { - \new StaffGroup << - \context Staff = "part" << - \clef G - \transpose c c' - { - \part - } - >> - \context TabStaff { - \part - } - >> - \layout { - ragged-right = ##t - } -} - - diff --git a/input/lsr/flat-flags-and-beam-nibs.ly b/input/lsr/flat-flags-and-beam-nibs.ly deleted file mode 100644 index 36f12c9fb5..0000000000 --- a/input/lsr/flat-flags-and-beam-nibs.ly +++ /dev/null @@ -1,144 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " - Son posibles tanto los corchetes rectos sobre notas sueltas como -extremos de barra sueltos en figuras unidas, con una combinación de -@code{stemLeftBeamCount}, @code{stemRightBeamCount} e indicadores de -barra @code{[ ]} emparejados. - - - - -Para corchetes rectos que apunten a la derecha sobre notas sueltas, -use indicadores de barra emparejados @code{[ ]} y establezca -@code{stemLeftBeamCount} a cero (véase el ejemplo 1). - - - - -Para corchetes rectos que apunten a la izquierda, establezca en su -lugar @code{stemRightBeamCount} (ejemplo 2). - - - - -Para extremos sueltos que apunten a la derecha al final de un conjunto -de notas unidas, establezca @code{stemRightBeamCount} a un valor -positivo. Y para extremos sueltos que apunten a la izquierda al -principio de un conjunto de notas unidas, establezca -@code{stemLeftBeamCount} en su lugar (ejemplo 3). - - - - -A veces, para una nota suelta rodeada de silencios tiene sentido que -lleve los dos extremos sueltos del corchete plano, apuntando a derecha -e izquierda. Hágalo solamente con indicadores de barra emparejados -@code{[ ]} (ejemplo 4). - - - - -(Observe que @code{\\set stemLeftBeamCount} siempre equivale a -@code{\\once \\set}. En otras palabras, los ajustes de la cantidad de -barras no se recuerdan, y por ello el par de corchetes planos -aplicados a la nota Do semicorchea @code{c'16 [ ]} del último ejemplo -no tiene nada que ver con el @code{\\set} de dos notas por detrás.) - - - - -" - doctitlees = "Corchetes rectos y extremos de barra sueltos" - - texidoc = " - Flat flags on lone notes and beam nibs at the ends of beamed figures -are both possible with a combination of @code{stemLeftBeamCount}, -@code{stemRightBeamCount} and paired @code{[]} beam indicators. - - - - -For right-pointing flat flags on lone notes, use paired @code{[]} beam -indicators and set @code{stemLeftBeamCount} to zero (see Example 1). - - - - -For left-pointing flat flags, set @code{stemRightBeamCount} instead -(Example 2). - - - - -For right-pointing nibs at the end of a run of beamed notes, set -@code{stemRightBeamCount} to a positive value. And for left-pointing -nibs at the start of a run of beamed notes, set -@code{stemLeftBeamCount} instead (Example 3). - - - - -Sometimes it may make sense for a lone note surrounded by rests to -carry both a left- and right-pointing flat flag. Do this with paired -@code{[]} beam indicators alone (Example 4). - - - - -(Note that @code{\\set stemLeftBeamCount} is always equivalent to -@code{\\once \\set}. In other words, the beam count settings are not -\"sticky\", so the pair of flat flags attached to the lone -@code{c'16[]} in the last example have nothing to do with the -@code{\\set} two notes prior.) - - - - -" - doctitle = "Flat flags and beam nibs" -} % begin verbatim - -\score { - << - % Example 1 - \new RhythmicStaff { - \set stemLeftBeamCount = #0 - c16[] - r8. - } - - % Example 2 - \new RhythmicStaff { - r8. - \set stemRightBeamCount = #0 - c16[] - } - - % Example 3 - \new RhythmicStaff { - c16 c - \set stemRightBeamCount = #2 - c16 r r - \set stemLeftBeamCount = #2 - c16 c c - } - - % Example 4 - \new RhythmicStaff { - c16 c - \set stemRightBeamCount = #2 - c16 r - c16[] - r16 - \set stemLeftBeamCount = #2 - c16 c - } - >> -} - diff --git a/input/lsr/flute-slap-notation.ly b/input/lsr/flute-slap-notation.ly deleted file mode 100644 index c5b5d8d787..0000000000 --- a/input/lsr/flute-slap-notation.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "winds" - - texidoc = " -It is possible to indicate special articulation techniques such as a -flute's \"tongue slap\" by replacing the note head with the appropriate -glyph. - -" - doctitle = "Flute slap notation" -} % begin verbatim - -slap = -#(define-music-function (parser location music) (ly:music?) -#{ - \override NoteHead #'stencil = #(lambda (grob) - (grob-interpret-markup grob - (markup #:musicglyph "scripts.sforzato"))) - \override NoteHead #'extra-offset = #'(0.1 . 0.0) - $music - \revert NoteHead #'stencil - \revert NoteHead #'extra-offset -#}) - -\relative c' { - c4 \slap c d r \slap { g a } b r -} - diff --git a/input/lsr/forcing-horizontal-shift-of-notes.ly b/input/lsr/forcing-horizontal-shift-of-notes.ly deleted file mode 100644 index d18a8e0061..0000000000 --- a/input/lsr/forcing-horizontal-shift-of-notes.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes, tweaks-and-overrides" - - doctitlees = "Forzar el desplazamiento horizontal de las notas" - texidoces = " -Cuando el motor de tipografiado no es capaz de todo, se puede usar la -propiedad force-hshift del objeto NoteColumn para sobreescribir -decisiones de tipografiado. Las unidades de medida que se usan aquí -son espacios de pentagrama. - -" - texidoc = " -When the typesetting engine cannot cope, the following syntax can be -used to override typesetting decisions. The units of measure used here -are staff spaces. - -" - doctitle = "Forcing horizontal shift of notes" -} % begin verbatim - -\relative c' << - { - 2 - } - \\ - { - 2 - \once \override NoteColumn #'force-hshift = #1.7 - 2 - } ->> - diff --git a/input/lsr/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly b/input/lsr/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly deleted file mode 100644 index 7f4a9cbb77..0000000000 --- a/input/lsr/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly +++ /dev/null @@ -1,37 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -This snippet demonstrates how to obtain automatic ordered rehearsal -marks, but from the letter or number desired. - -" - doctitle = "Forcing rehearsal marks to start from a given letter or number" -} % begin verbatim - -\relative c''{ - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark #14 - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark \default - \break - \set Score.markFormatter = #format-mark-numbers - c1 \mark #1 - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark #14 - c1 \mark \default - c1 \mark \default - c1 \mark \default - c1 \mark \default -} - diff --git a/input/lsr/formatting-lyrics-syllables.ly b/input/lsr/formatting-lyrics-syllables.ly deleted file mode 100644 index a126c875d3..0000000000 --- a/input/lsr/formatting-lyrics-syllables.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, vocal-music" - - texidoc = " -To format individual syllables in lyrics, use @code{\\markup @{ .... -@}} on these lyrics. - -" - doctitle = "Formatting lyrics syllables" -} % begin verbatim - -% Tip taken from http://lists.gnu.org/archive/html/lilypond-user/2007-12/msg00215.html -\header { - title = "Markup can be used inside lyrics!" -} - -mel = \relative c'' { c4 c c c } -lyr = \lyricmode { - Lyrics \markup { \italic "can" } \markup {\with-color #red "contain" } - \markup {\fontsize #8 \bold "Markup!" } -} - -<< - \context Voice = melody \mel - \context Lyrics \lyricsto melody \lyr ->> - - diff --git a/input/lsr/fretted-strings.snippet-list b/input/lsr/fretted-strings.snippet-list deleted file mode 100644 index d379d2cf87..0000000000 --- a/input/lsr/fretted-strings.snippet-list +++ /dev/null @@ -1,20 +0,0 @@ -adding-fingerings-to-a-score.ly -adding-fingerings-to-tablatures.ly -allowing-fingerings-to-be-printed-inside-the-staff.ly -controlling-the-placement-of-chord-fingerings.ly -customizing-fretboard-fret-diagrams.ly -customizing-markup-fret-diagrams.ly -defining-predefined-fretboards-for-other-instruments.ly -faking-a-hammer-in-tablatures.ly -fingerings,-string-indications,-and-right-hand-fingerings.ly -flamenco-notation.ly -fret-diagrams-explained-and-developed.ly -guitar-strum-rhythms.ly -how-to-change-fret-diagram-position.ly -jazz-combo-template.ly -laissez-vibrer-ties.ly -letter-tablature-formatting.ly -modern-tab-text-clef.ly -placement-of-right-hand-fingerings.ly -polyphony-in-tablature.ly -stem-and-beam-behavior-in-tablature.ly diff --git a/input/lsr/grid-lines--changing-their-appearance.ly b/input/lsr/grid-lines--changing-their-appearance.ly deleted file mode 100644 index 1d1198bc1c..0000000000 --- a/input/lsr/grid-lines--changing-their-appearance.ly +++ /dev/null @@ -1,64 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations" - - texidoces = " -Se puede cambiar el aspecto de las líneas de rejilla -sobreescribiendo algunas de sus propiedades. - -" - doctitlees = "Líneas de rejilla: modificar su aspecto" - - texidoc = " -The appearance of grid lines can be changed by overriding some of their -properties. - -" - doctitle = "Grid lines: changing their appearance" -} % begin verbatim - -\score { - \new ChoirStaff << - \new Staff { - \relative c'' { - \stemUp - c'4. d8 e8 f g4 - } - } - \new Staff { - \relative c { - % this moves them up one staff space from the default position - \override Score.GridLine #'extra-offset = #'(0.0 . 1.0) - \stemDown - \clef bass - \once \override Score.GridLine #'thickness = #5.0 - c4 - \once \override Score.GridLine #'thickness = #1.0 - g'4 - \once \override Score.GridLine #'thickness = #3.0 - f4 - \once \override Score.GridLine #'thickness = #5.0 - e4 - } - } - >> - \layout { - \context { - \Staff - % set up grids - \consists "Grid_point_engraver" - % set the grid interval to one quarter note - gridInterval = #(ly:make-moment 1 4) - } - \context { - \Score - \consists "Grid_line_span_engraver" - % this moves them to the right half a staff space - \override NoteColumn #'X-offset = #-0.5 - } - } -} - diff --git a/input/lsr/grouping-beats.ly b/input/lsr/grouping-beats.ly deleted file mode 100644 index 5e8b92d282..0000000000 --- a/input/lsr/grouping-beats.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Los patrones de barrado se pueden alterar con la propiedad -@code{beatGrouping}: - -" - doctitlees = "Agrupar los pulsos" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Balkengruppen können mit der @code{beatGrouping}-Eigenschaft geändert -werden: - -" - doctitlede = "Notengruppen" - - texidoc = " -Beaming patterns may be altered with the @code{beatGrouping} property: - -" - doctitle = "Grouping beats" -} % begin verbatim - -\relative c'' { - \time 5/16 - #(override-auto-beam-setting '(end * * 5 16) 5 16) - \set beatGrouping = #'(2 3) - c8^"(2+3)" c16 c8 - \set beatGrouping = #'(3 2) - c8^"(3+2)" c16 c8 -} - - diff --git a/input/lsr/guitar-strum-rhythms.ly b/input/lsr/guitar-strum-rhythms.ly deleted file mode 100644 index baa31203ad..0000000000 --- a/input/lsr/guitar-strum-rhythms.ly +++ /dev/null @@ -1,68 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, fretted-strings" - - 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. - -" - doctitlees = "Ritmos rasgueados de guitarra" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -In Guitarrennotation kann neben Melodie, Akkordbezeichnungen und -Bunddiagrammen auch der Schlagrhythmus angegeben werden. - -" - doctitldee = "Schlagrhythmus für Guitarren" - - texidoc = " -For guitar music, it is possible to show strum rhythms, along with -melody notes, chord names and fret diagrams. - -" - doctitle = "Guitar strum rhythms" -} % begin verbatim - -\include "predefined-guitar-fretboards.ly" -<< - \new ChordNames { - \chordmode { - c1 f g c - } - } - \new FretBoards { - \chordmode { - c1 f g c - } - } - \new Voice \with { - \consists "Pitch_squash_engraver" - } { - \relative c'' { - \improvisationOn - c4 c8 c c4 c8 c - f4 f8 f f4 f8 f - g4 g8 g g4 g8 g - c4 c8 c c4 c8 c - } - } - \new Voice = "melody" { - \relative c'' { - c2 e4 e4 - f2. r4 - g2. a4 - e4 c2. - } - } - \new Lyrics { - \lyricsto "melody" { - This is my song. - I like to sing. - } - } ->> diff --git a/input/lsr/heavily-customized-polymetric-time-signatures.ly b/input/lsr/heavily-customized-polymetric-time-signatures.ly deleted file mode 100644 index b311b94ff3..0000000000 --- a/input/lsr/heavily-customized-polymetric-time-signatures.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, percussion" - - texidoc = " -Though the polymetric time signature shown was not the most essential -item here, it has been included to show the beat of this piece (which -is the template of a real Balkan song!). - -" - doctitle = "Heavily customized polymetric time signatures" -} % begin verbatim - -#(define plus (markup #:vcenter "+")) -#(define ((custom-time-signature one two three four five six - seven eight nine ten eleven num) grob) - (grob-interpret-markup grob - (markup #:override '(baseline-skip . 0) #:number - (#:line ( - (#:column (one num)) plus - (#:column (two num)) plus - (#:column (three num)) plus - (#:column (four num)) plus - (#:column (five num)) plus - (#:column (six num)) plus - (#:column (seven num)) plus - (#:column (eight num)) plus - (#:column (nine num)) plus - (#:column (ten num)) plus - (#:column (eleven num))))))) - -melody = \relative c'' { - \set Staff.instrumentName = #"Bb Sop." - \key g \major - #(set-time-signature 25 8 '(3 2 2 3 2 2 2 2 3 2 2)) - \override Staff.TimeSignature #'stencil = - #(custom-time-signature "3" "2" "2" "3" "2" "2" - "2" "2" "3" "2" "2" "8") - c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break - c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4 - c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break - c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 - c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break -} - -drum = \new DrumStaff \drummode { - \bar "|:" bd4.^\markup { "Drums" } sn4 bd \bar ":" sn4. - bd4 sn \bar ":" bd sn bd4. sn4 bd \bar ":|" -} - -{ - \melody - \drum -} diff --git a/input/lsr/hiding-the-extender-line-for-text-dynamics.ly b/input/lsr/hiding-the-extender-line-for-text-dynamics.ly deleted file mode 100644 index c3a4a95763..0000000000 --- a/input/lsr/hiding-the-extender-line-for-text-dynamics.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - 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. -Esta línea se puede suprimir de la siguiente manera: - -" - doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie -gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf foldenge Weise -unterdrückt werden: - -" - doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken" - - texidoc = " -Text style dynamic changes (such as cresc. and dim.) are printed with a -dashed line showing their extent. This line can be suppressed in the -following way: - -" - doctitle = "Hiding the extender line for text dynamics" -} % begin verbatim - -\relative c'' { - \override DynamicTextSpanner #'dash-period = #-1.0 - \crescTextCresc - c1\< | d | b | c\! -} - diff --git a/input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly b/input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly deleted file mode 100644 index 445e8a5f54..0000000000 --- a/input/lsr/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly +++ /dev/null @@ -1,161 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - - texidoc = " -Some dynamic expressions involve additional text, like \"sempre pp\". -Since lilypond aligns all dynamics centered on the note, the \\pp would -be displayed way after the note it applies to. - -To correctly align the \"sempre \\pp\" horizontally, so that it is -aligned as if it were only the \\pp, there are several approaches: - -* Simply use @code{\\once\\override DynamicText #'X-offset = #-9.2} -before the note with the dynamics to manually shift it to the correct -position. Drawback: This has to be done manually each time you use that -dynamic markup... * Add some padding (@code{#:hspace 7.1}) into the -definition of your custom dynamic mark, so that after lilypond -center-aligns it, it is already correctly aligned. Drawback: The -padding really takes up that space and does not allow any other markup -or dynamics to be shown in that position. - -* Shift the dynamic script @code{\\once\\override ... #'X-offset = ..}. -Drawback: @code{\\once\\override} is needed for every invocation! - -* Set the dimensions of the additional text to 0 (using -@code{#:with-dimensions '(0 . 0) '(0 . 0)}). Drawback: To lilypond -\"sempre\" has no extent, so it might put other stuff there and create -collisions (which are not detected by the collision dection!). Also, -there seems to be some spacing, so it's not exactly the same alignment -as without the additional text - -* Add an explicit shifting directly inside the scheme function for the -dynamic-script. - -* Set an explicit alignment inside the dynamic-script. By default, this -won't have any effect, only if one sets X-offset! Drawback: One needs -to set @code{DynamicText #'X-offset}, which will apply to all dynamic -texts! Also, it is aligned at the right edge of the additional text, -not at the center of pp. - - - - -" - doctitle = "Horizontally aligning custom dynamics (e.g. \"sempre pp\", \"piu f\", \"subito p\")" -} % begin verbatim - -\header { title = "Horizontally aligning custom dynamics" } - -\paper { ragged-right = ##f } - -% Solution 1: Using a simple markup with a particular halign value -% Drawback: It's a markup, not a dynamic command, so \dynamicDown -% etc. will have no effect -semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" } - -% Solution 2: Using a dynamic script & shifting with -% \once \override ... #'X-offset = .. -% Drawback: \once \override needed for every invocation -semppK = -#(make-dynamic-script - (markup #:line - (#:normal-text - #:italic "sempre" - #:dynamic "pp"))) - -% Solution 3: Padding the dynamic script so the center-alignment -% puts it at the correct position -% Drawback: the padding really reserves the space, nothing else can be there -semppT = -#(make-dynamic-script - (markup #:line - (#:normal-text - #:italic "sempre" - #:dynamic "pp" - #:hspace 7.1))) - -% Solution 4: Dynamic, setting the dimensions of the additional text to 0 -% Drawback: To lilypond "sempre" has no extent, so it might put -% other stuff there => collisions -% Drawback: Also, there seems to be some spacing, so it's not exactly the -% same alignment as without the additional text -semppM = -#(make-dynamic-script - (markup #:line (#:with-dimensions '(0 . 0) '(0 . 0) - #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) - -% Solution 5: Dynamic with explicit shifting inside the scheme function -semppG = -#(make-dynamic-script - (markup - #:hspace 0 #:translate '(-18.85 . 0) - #:line( #:normal-text #:italic "sempre" #:dynamic "pp"))) - -% Solution 6: Dynamic with explicit alignment. This has only effect, if one sets X-offset! -% Drawback: One needs to set DynamicText #'X-offset! -% Drawback: Aligned at the right edge of the additional text, not at the center of pp -semppMII = -#(make-dynamic-script (markup #:line(#:right-align - #:normal-text #:italic "sempre" #:dynamic "pp"))) - -\context StaffGroup << - \context Staff = "s" << - \set Staff.instrumentName = "Normal" - \relative c'' { - \key es \major - c4\pp c\p c c | c\ff c c\pp c - } - >> - \context Staff = "sMarkup" << - \set Staff.instrumentName = \markup \column { Normal markup } - \relative c'' { - \key es \major - c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c - } - >> - \context Staff = "sK" << - \set Staff.instrumentName = \markup \column { Explicit shifting } - \relative c'' { - \key es \major - \once \override DynamicText #'X-offset = #-9.2 - c4\semppK c\p c c - c4\ff c - \once \override DynamicText #'X-offset = #-9.2 - c4\semppK c - } - >> - \context Staff = "sT" << - \set Staff.instrumentName = \markup \column { Right padding } - \relative c'' { - \key es \major - c4\semppT c\p c c | c\ff c c\semppT c - } - >> - \context Staff = "sM" << - \set Staff.instrumentName = \markup \column { Setting dimension "to zero" } - \relative c'' { - \key es \major - c4\semppM c\p c c | c\ff c c\semppM c - } - >> - \context Staff = "sG" << - \set Staff.instrumentName = \markup \column { Shifting inside dynamics } - \relative c'' { - \key es \major - c4\semppG c\p c c | c\ff c c\semppG c - } - >> - \context Staff = "sMII" << - \set Staff.instrumentName = \markup \column { Alignment inside dynamics } - \relative c'' { - \key es \major - % Setting to ##f (false) gives the same result - \override DynamicText #'X-offset = #0 - c4\semppMII c\p c c | c\ff c c\semppMII c - } - >> ->> diff --git a/input/lsr/how-to-put-ties-between-syllables-in-lyrics.ly b/input/lsr/how-to-put-ties-between-syllables-in-lyrics.ly deleted file mode 100644 index c0382d8132..0000000000 --- a/input/lsr/how-to-put-ties-between-syllables-in-lyrics.ly +++ /dev/null @@ -1,18 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, vocal-music" - - texidoc = " -This can be achieved by separating those syllables by tildes. - -" - doctitle = "How to put ties between syllables in lyrics" -} % begin verbatim - -\lyrics { - wa~o~a -} - diff --git a/input/lsr/incipit.ly b/input/lsr/incipit.ly deleted file mode 100644 index d09025ef74..0000000000 --- a/input/lsr/incipit.ly +++ /dev/null @@ -1,281 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, ancient-notation" - - texidoces = " -Los «incipit» se pueden escribir utilizando el grob del nombre del -instruemento, pero manteniendo independientes las definiciones del -nombre del instrumento y del incipit." - - doctitlees = "Incipit" - - texidoc = " -Incipits can be added using the instrument name grob, but keeping -separate the instrument name definition and the incipit definition. - -" - doctitle = "Incipit" -} % begin verbatim - -incipit = -#(define-music-function (parser location incipit-music) (ly:music?) - #{ - \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT - \once \override Staff.InstrumentName #'self-alignment-Y = #UP - \once \override Staff.InstrumentName #'Y-offset = #4 - \once \override Staff.InstrumentName #'padding = #0.3 - \once \override Staff.InstrumentName #'stencil = - #(lambda (grob) - (let* ((instrument-name (ly:grob-property grob 'long-text)) - (layout (ly:output-def-clone (ly:grob-layout grob))) - (music (make-music 'SequentialMusic - 'elements (list (make-music 'ContextSpeccedMusic - 'context-type 'MensuralStaff - 'element (make-music 'PropertySet - 'symbol 'instrumentName - 'value instrument-name)) - $incipit-music))) - (score (ly:make-score music)) - (mm (ly:output-def-lookup layout 'mm)) - (indent (ly:output-def-lookup layout 'indent)) - (width (ly:output-def-lookup layout 'incipit-width)) - (incipit-width (if (number? width) - (* width mm) - (* indent 0.5)))) - (ly:output-def-set-variable! layout 'indent (- indent incipit-width)) - (ly:output-def-set-variable! layout 'line-width indent) - (ly:output-def-set-variable! layout 'ragged-right #f) - (ly:output-def-set-variable! layout 'ragged-last #f) - (ly:output-def-set-variable! layout 'system-count 1) - (ly:score-add-output-def! score layout) - (ly:grob-set-property! grob 'long-text - (markup #:score score)) - (ly:system-start-text::print grob))) - #}) - -%%%%%%%%%%%%%%%%%%%%%%%%% - -global = { - \set Score.skipBars = ##t - \key g \major - \time 4/4 - - % the actual music - \skip 1*8 - - % let finis bar go through all staves - \override Staff.BarLine #'transparent = ##f - - % finis bar - \bar "|." -} - -discantusIncipit = << - \new MensuralVoice = "discantusIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "neomensural-c1" - \key f \major - \time 2/2 - c''1. - } - >> - \new Lyrics \lyricsto discantusIncipit { IV- } ->> - -discantusNotes = { - \transpose c' c'' { - \clef "treble" - d'2. d'4 | - b e' d'2 | - c'4 e'4.( d'8 c' b | - a4) b a2 | - b4.( c'8 d'4) c'4 | - \once \override NoteHead #'transparent = ##t - c'1 | - b\breve | - } -} - -discantusLyrics = \lyricmode { - Ju -- bi -- | - la -- te De -- | - o, om -- - nis ter -- | - ra, __ om- | - "..." | - -us. | -} - -altusIncipit = << - \new MensuralVoice = "altusIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "neomensural-c3" - \key f \major - \time 2/2 - r1 f'1. - } - >> - \new Lyrics \lyricsto altusIncipit { IV- } ->> - -altusNotes = { - \transpose c' c'' { - \clef "treble" - % two measures - r2 g2. e4 fis g | - a2 g4 e | - fis g4.( fis16 e fis4) | - g1 | - \once \override NoteHead #'transparent = ##t - g1 | - g\breve | - } -} - -altusLyrics = \lyricmode { - % two measures - Ju -- bi -- la -- te | - De -- o, om -- | - nis ter -- ra, | - "..." | - -us. | -} - -tenorIncipit = << - \new MensuralVoice = "tenorIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "neomensural-c4" - \key f \major - \time 2/2 - r\longa - r\breve - r1 c'1. - } - >> - \new Lyrics \lyricsto tenorIncipit { IV- } ->> - -tenorNotes = { - \transpose c' c' { - \once \override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 3) - \clef "treble_8" - R1 | - R1 | - R1 | - % two measures - r2 d'2. d'4 b e' | - \once \override NoteHead #'transparent = ##t - e'1 | - d'\breve | - } -} - -tenorLyrics = \lyricmode { - % two measures - Ju -- bi -- la -- te | - "..." | - -us. -} - -bassusIncipit = << - \new MensuralVoice = "bassusIncipit" << - \repeat unfold 9 { s1 \noBreak } - { - \clef "bass" - \key f \major - \time 2/2 - %% incipit - r\maxima - f1. - } - >> - \new Lyrics \lyricsto bassusIncipit { IV- } ->> - -bassusNotes = { - \transpose c' c' { - \clef "bass" - R1 | - R1 | - R1 | - R1 | - g2. e4 | - \once \override NoteHead #'transparent = ##t - e1 | - g\breve | - } -} - -bassusLyrics = \lyricmode { - Ju -- bi- | - "..." | - -us. -} - -\score { - << - \new StaffGroup = choirStaff << - \new Voice = "discantusNotes" << - \global - \set Staff.instrumentName = #"Discantus" - \incipit \discantusIncipit - \discantusNotes - >> - \new Lyrics = "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } - \new Voice = "altusNotes" << - \global - \set Staff.instrumentName = #"Altus" - \incipit \altusIncipit - \altusNotes - >> - \new Lyrics = "altusLyrics" \lyricsto altusNotes { \altusLyrics } - \new Voice = "tenorNotes" << - \global - \set Staff.instrumentName = #"Tenor" - \incipit \tenorIncipit - \tenorNotes - >> - \new Lyrics = "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } - \new Voice = "bassusNotes" << - \global - \set Staff.instrumentName = #"Bassus" - \incipit \bassusIncipit - \bassusNotes - >> - \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } - >> - >> - \layout { - \context { - \Score - %% no bar lines in staves or lyrics - \override BarLine #'transparent = ##t - } - %% the next two instructions keep the lyrics between the bar lines - \context { - \Lyrics - \consists "Bar_engraver" - \consists "Separating_line_group_engraver" - } - \context { - \Voice - %% no slurs - \override Slur #'transparent = ##t - %% Comment in the below "\remove" command to allow line - %% breaking also at those bar lines where a note overlaps - %% into the next measure. The command is commented out in this - %% short example score, but especially for large scores, you - %% will typically yield better line breaking and thus improve - %% overall spacing if you comment in the following command. - %%\remove "Forbid_line_break_engraver" - } - indent = 6\cm - incipit-width = 4\cm - } -} diff --git a/input/lsr/indicating-cross-staff-chords-with-arpeggio-bracket.ly b/input/lsr/indicating-cross-staff-chords-with-arpeggio-bracket.ly deleted file mode 100644 index b2320c2990..0000000000 --- a/input/lsr/indicating-cross-staff-chords-with-arpeggio-bracket.ly +++ /dev/null @@ -1,61 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "keyboards" - - texidoces = " -Un corchete de arpegio puede indicar que se tienen que tocadr con la -misma mano notas que están en dos pentagramas distintos. Para hacerlo, -el @code{PianoStaff} se debe configurar para que acepte símbolos de -arpegio de pentagrama cruzado y los símbolos de arpegio se deben -configurar a la forma de corchete en el contexto de @code{PianoStaff}. - -(Debussy, Les collines d’Anacapri, m. 65) - -" - doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio" - - texidoc = " -An arpeggio bracket can indicate that notes on two different staves are -to be played with the same hand. In order to do this, the -@code{PianoStaff} must be set to accept cross-staff arpeggios and the -arpeggios must be set to the bracket shape in the @code{PianoStaff} -context. - - -(Debussy, Les collines d’Anacapri, m. 65) - -" - doctitle = "Indicating cross-staff chords with arpeggio bracket" -} % begin verbatim - -\new PianoStaff << - \set PianoStaff.connectArpeggios = ##t - \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket - \new Staff { - \relative c' { - \key b \major - \time 6/8 - b8-.(\arpeggio fis'-.\> cis-. e-. gis-. b-.)\!\fermata^\laissezVibrer - \bar "||" - } - } - \new Staff { - \relative c' { - \clef bass - \key b \major - << - { - 2.\arpeggio - } - \\ - { - 2. - } - >> - } - } ->> - diff --git a/input/lsr/inserting-a-caesura.ly b/input/lsr/inserting-a-caesura.ly deleted file mode 100644 index 81efd07340..0000000000 --- a/input/lsr/inserting-a-caesura.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - - texidoces = " -Las marcas de cesura se pueden crear sobreescribiendo la propiedad -@code{'text} del objeto @code{BreathingSign}. También está disponible -una marca de cesura curva. - -" - doctitlees = "Insertar una cesura" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft -des @code{BreathingSign}-Objektes verändert wird. Ein gekrümmtes -Zäsurzeichen ist auch möglich. -" - doctitlede = "Eine Zäsur einfügen" - - texidoc = " -Caesura marks can be created by overriding the @code{'text} property of -the @code{BreathingSign} object. A curved caesura mark is also -available. - -" - doctitle = "Inserting a caesura" -} % begin verbatim - -\relative c'' { - \override BreathingSign #'text = \markup { - \musicglyph #"scripts.caesura.straight" - } - c8 e4. \breathe g8. e16 c4 - - \override BreathingSign #'text = \markup { - \musicglyph #"scripts.caesura.curved" - } - g8 e'4. \breathe g8. e16 c4 -} diff --git a/input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly b/input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly deleted file mode 100644 index 651100ee0c..0000000000 --- a/input/lsr/inserting-score-fragments-above-a-staff,-as-markups.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation" - - texidoc = " -The @code{\\markup} command is quite versatile. In this snippet, it -contains a @code{\\score} block instead of texts or marks. - -" - doctitle = "Inserting score fragments above a staff, as markups" -} % begin verbatim - -tuning = \markup { - \score { - \new Staff \with { \remove "Time_signature_engraver" } - { - \clef bass 1 - } - \layout { ragged-right = ##t } - } -} - -\header { - title = "Solo Cello Suites" - subtitle = "Suite IV" - subsubtitle = \markup { Originalstimmung: \general-align #Y #CENTER \tuning } -} - -\layout { ragged-right = ##f } - -\relative c'' { - \time 4/8 - \times 2/3 { c8 d e } \times 2/3 { c d e } - \times 2/3 { c8 d e } \times 2/3 { c d e } - g8 a g a - g8 a g a -} - diff --git a/input/lsr/isolated-percent-repeats.ly b/input/lsr/isolated-percent-repeats.ly deleted file mode 100644 index cf6355faa7..0000000000 --- a/input/lsr/isolated-percent-repeats.ly +++ /dev/null @@ -1,30 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats" - - texidoces = " -También se pueden imprimir símbolos de porcentaje sueltos. Esto se -hace introduciendo un silencio multicompás con una función de -impresión distinta: - -" - doctitlees = "Símbolos de porcentaje sueltos" - - texidoc = " -Isolated percents can also be printed. This is done by entering a -multi-measure rest with a different print function: - -" - doctitle = "Isolated percent repeats" -} % begin verbatim - -\relative c'' { - \override MultiMeasureRest #'stencil - = #ly:multi-measure-rest::percent - \override MultiMeasureRest #'thickness = #0.48 - R1 -} - diff --git a/input/lsr/laissez-vibrer-ties.ly b/input/lsr/laissez-vibrer-ties.ly deleted file mode 100644 index f71c9e9f34..0000000000 --- a/input/lsr/laissez-vibrer-ties.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, keyboards, fretted-strings" - - texidoc = " -Laissez vibrer ties have a fixed size. Their formatting can be tuned -using @code{'tie-configuration}. - -" - doctitle = "Laissez vibrer ties" -} % begin verbatim - -\relative c' { - 4\laissezVibrer r \laissezVibrer r - 4\laissezVibrer r 4.\laissezVibrer r8 - - 4\laissezVibrer r - \override LaissezVibrerTieColumn #'tie-configuration - = #`((-7 . ,DOWN) - (-5 . ,DOWN) - (-3 . ,UP) - (-1 . ,UP)) - 4\laissezVibrer r -} - diff --git a/input/lsr/letter-tablature-formatting.ly b/input/lsr/letter-tablature-formatting.ly deleted file mode 100644 index 9b247dcb22..0000000000 --- a/input/lsr/letter-tablature-formatting.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, fretted-strings" - - texidoc = " -Tablature can be formatted using letters instead of numbers. - -" - doctitle = "Letter tablature formatting" -} % begin verbatim - -#(define (letter-tablature-format str context event) - (let ((tuning (ly:context-property context 'stringTunings)) - (pitch (ly:event-property event 'pitch))) - (make-whiteout-markup - (make-vcenter-markup - (string (integer->char - (+ (char->integer #\a) - (- (ly:pitch-semitones pitch) - (list-ref tuning (- str 1)))))))))) - -music = \relative c { - c4 d e f - g4 a b c - d4 e f g -} - -<< - \new Staff { - \clef "G_8" - \music - } - \new TabStaff \with { - tablatureFormat = #letter-tablature-format - } - { - \music - } ->> diff --git a/input/lsr/lilypond-snippets.tely b/input/lsr/lilypond-snippets.tely deleted file mode 100644 index 0062153a2b..0000000000 --- a/input/lsr/lilypond-snippets.tely +++ /dev/null @@ -1,216 +0,0 @@ -\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- -@setfilename lilypond-snippets.info -@settitle LilyPond snippets -@documentencoding UTF-8 -@documentlanguage en - -@iftex -@afourpaper -@c don't replace quotes with directed quotes -@tex -\gdef\SETtxicodequoteundirected{Foo} -\gdef\SETtxicodequotebacktick{Bla} -@end tex -@end iftex - -@include version.itexi - -@ifnothtml -@macro lydoctitle{TEXT} -@unnumberedsec \TEXT\ -@end macro -@end ifnothtml - -@ifhtml - -@macro lydoctitle{TEXT} -@node \TEXT\ -@unnumberedsec \TEXT\ -@end macro - -@ifset bigpage - -@macro rlearning{NAME} -See also Learning Manual, section -@ref{\NAME\,,,lilypond-learning-big-page,Learning Manual}. -@end macro - -@macro ruser{NAME} -These snippets illustrate the Notation Reference, -section @ref{\NAME\,,,lilypond-big-page,Notation Reference}. -@end macro - -@end ifset - - -@ifclear bigpage - -@macro rlearning{NAME} -See also Learning Manual, section -@ref{\NAME\,,,lilypond-learning,Learning Manual}. -@end macro - -@macro ruser{NAME} -These snippets illustrate the Notation Reference, -section @ref{\NAME\,,,lilypond,Notation Reference}. -@end macro - -@end ifclear - -@end ifhtml - - -@ifnothtml - -@macro rlearning{NAME} -See also @ref{\NAME\,,,lilypond-learning,Learning Manual}. -@end macro - -@macro ruser{NAME} -These snippets illustrate @ref{\NAME\,,,lilypond,Notation Reference}. -@end macro - -@end ifnothtml - -@dircategory GNU LilyPond --- the music typesetter -@direntry -* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples. -@end direntry - -@finalout - -@titlepage -@title LilyPond -@subtitle The music typesetter -@titlefont{Snippets} -@author LilyPond Snippet Repository contributors - -@vskip 20pt - -This document shows a selected set of LilyPond snippets from the -@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} -(LSR). It is in the public domain. - -We would like to address many thanks to Sebastiano Vigna for maintaining -LSR web site and database, and the University of Milano for hosting LSR. - -Please note that this document is not an exact subset of LSR: some -snippets come from @file{input/new} LilyPond sources directory, and -snippets from LSR are converted through @command{convert-ly}, as LSR is -based on a stable LilyPond version, and this document is for version -@c @value{version}. - -Snippets are grouped by tags; tags listed in the table of contents match -a section of LilyPond notation manual. Snippets may have several tags, -and not all LSR tags may appear in this document. - -In the HTML version of this document, you can click on the file name -or figure for each example to see the corresponding input file. - -@end titlepage - -@iftex -@contents -@end iftex - -@ifnottex -@node Top -@top GNU LilyPond --- Snippets List - -@ifhtml -@ifclear bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-snippets.pdf,PDF} and as -@uref{source/input/lsr/lilypond-snippets-big-page.html,one big page}. -@end ifclear -@ifset bigpage -This document is also available as a -@uref{source/Documentation/user/lilypond-snippets.pdf,PDF} and as -@uref{source/input/lsr/lilypond-snippets/index.html,HTML indexed multiple pages}. -@end ifset -@end ifhtml - -This document shows a selected set of LilyPond snippets from the -@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} -(LSR). It is in the public domain. - -Please note that it is not an exact subset of LSR: some snippets come -from @file{input/new} LilyPond sources directory, and snippets from LSR -are converted through @command{convert-ly}, as LSR is based on a stable -LilyPond version, and this document is for version @version{}. - -Snippets are grouped by tags; tags listed in the table of contents match -a section of LilyPond notation manual. Snippets may have several tags, -and not all LSR tags may appear in this document. - -In the HTML version of this document, you can click on the file name -or figure for each example to see the corresponding input file. -@end ifnottex - -@c maybe generate/update @menu and @includes automatically? --jm -@menu -Musical notation -* Pitches:: -* Rhythms:: -* Expressive marks:: -* Repeats:: -* Simultaneous notes:: -* Staff notation:: -* Editorial annotations:: -* Text:: - -Specialist notation -* Vocal music:: -* Chords:: -* Keyboards:: -* Percussion:: -* Fretted strings:: -* Unfretted strings:: -* Winds:: -* Ancient notation:: -* World music:: - -Other collections -* Contexts and engravers:: -* Tweaks and overrides:: -* Paper and layout:: -* Titles:: -* Spacing:: -* MIDI:: -* Templates:: -@end menu - -@contents - - -@c Please take care of naming every .itely -@c with an existing tag name. - -@include pitches.itely -@include rhythms.itely -@include expressive-marks.itely -@include repeats.itely -@include simultaneous-notes.itely -@include staff-notation.itely -@include editorial-annotations.itely -@include text.itely - -@include vocal-music.itely -@include chords.itely -@include keyboards.itely -@include percussion.itely -@include fretted-strings.itely -@include unfretted-strings.itely -@include winds.itely -@include ancient-notation.itely -@include world-music.itely - -@include contexts-and-engravers.itely -@include tweaks-and-overrides.itely -@include paper-and-layout.itely -@include titles.itely -@include spacing.itely -@include midi.itely -@include template.itely - -@bye diff --git a/input/lsr/lyrics-alignment.ly b/input/lsr/lyrics-alignment.ly deleted file mode 100644 index 9787ac8c92..0000000000 --- a/input/lsr/lyrics-alignment.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, vocal-music" - - texidoces = " -La alineación horizontal de la letra se puede ajustar sobreescribiendo -la propiedad @code{self-alignment-X} del objeto @code{LyricText}. -@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; -sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y -@code{#RIGHT}. - -" - doctitlees = "Alineación de la letra" - - texidoc = " -Horizontal alignment for lyrics cam be set by overriding the -@code{self-alignment-X} property of the @code{LyricText} object. -@code{#-1} is left, @code{#0} is center and @code{#1} is right; -however, you can use @code{#LEFT}, @code{#CENTER} and @code{#RIGHT} as -well. - -" - doctitle = "Lyrics alignment" -} % begin verbatim - -\layout { ragged-right = ##f } -\relative c'' { - c1 - c1 - c1 -} -\addlyrics { - \once \override LyricText #'self-alignment-X = #LEFT - "This is left-aligned" - \once \override LyricText #'self-alignment-X = #CENTER - "This is centered" - \once \override LyricText #'self-alignment-X = #1 - "This is right-aligned" -} - diff --git a/input/lsr/makam-example.ly b/input/lsr/makam-example.ly deleted file mode 100644 index 416d2aaf32..0000000000 --- a/input/lsr/makam-example.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, world-music" - - texidoces = " -El «Makam» es un tipo de melodía de Turquía que -utiliza intervalos microtonales de 1/9 de tono. Consulte el -archivo de inicio @code{makam.ly} (véase el 'Manual de -aprendizaje @version{}, 4.6.3 Otras fuentes de información' para -averiguar la situación de este archivo) para ver detalles de los -nombres de las notas y las alteraciones. - -" - doctitlees = "El «Makam»" - - texidoc = " -Makam is a type of melody from Turkey using 1/9th-tone microtonal -alterations. Consult the initialization file @samp{ly/makam.ly} for -details of pitch names and alterations. - -" - doctitle = "Makam example" -} % begin verbatim - -% Initialize makam settings -\include "makam.ly" - -\relative c' { - \set Staff.keySignature = #`((3 . ,BAKIYE) (6 . ,(- KOMA))) - c4 cc db fk - gbm4 gfc gfb efk - fk4 db cc c -} diff --git a/input/lsr/making-an-object-invisible-with-the-transparent-property.ly b/input/lsr/making-an-object-invisible-with-the-transparent-property.ly deleted file mode 100644 index 927cc4e273..0000000000 --- a/input/lsr/making-an-object-invisible-with-the-transparent-property.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides" - - texidoc = " -Setting the @code{transparent} property will cause an object to be -printed in \"invisible ink\": the object is not printed, but all its -other behavior is retained. The object still takes up space, it takes -part in collisions, and slurs, ties and beams can be attached to it. - - -This snippet demonstrates how to connect different voices using ties. -Normally, ties only connect two notes in the same voice. By -introducing a tie in a different voice, and blanking the first up-stem -in that voice, the tie appears to cross voices. - -" - doctitle = "Making an object invisible with the 'transparent property" -} % begin verbatim - -\relative c'' { - \time 2/4 - << - { - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - b8 ~ b\noBeam - \once \override Stem #'transparent = ##t - \once \override Stem #'length = #8 - g8 ~ g\noBeam - } - \\ - { - b8 g g e - } - >> -} diff --git a/input/lsr/making-some-staff-lines-thicker-than-the-others.ly b/input/lsr/making-some-staff-lines-thicker-than-the-others.ly deleted file mode 100644 index 309005b36b..0000000000 --- a/input/lsr/making-some-staff-lines-thicker-than-the-others.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, editorial-annotations" - - 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 -conseguir añadiendo más líneas muy cerca de la línea que se quiere -destacar, utilizando la propiedad @code{line-positions} del objeto -@code{StaffSymbol}. - -" - doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras" - - texidoc = " -For pedagogical purposes, a staff line can be thickened (e.g., the -middle line, or to emphasize the line of the G clef). This can be -achieved by adding extra lines very close to the line that should be -emphasized, using the @code{line-positions} property of the -@code{StaffSymbol} object. - -" - doctitle = "Making some staff lines thicker than the others" -} % begin verbatim - -{ - \override Staff.StaffSymbol #'line-positions = #'(-4 -2 -0.2 0 0.2 2 4) - d'4 e' f' g' -} - diff --git a/input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly b/input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly deleted file mode 100644 index a24b8e2724..0000000000 --- a/input/lsr/manually-break-figured-bass-extenders-for-only-some-numbers.ly +++ /dev/null @@ -1,30 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoc = " -Figured bass often uses extenders to indicate continuation of the -corresponding step. However, in this case lilypond is in greedy-mode -and uses extenders whenever possible. To break individual extenders, -one can simply use a modifier \\! to a number, which breaks any -extender attributed to that number right before the number. - -" - doctitle = "Manually break figured bass extenders for only some numbers" -} % begin verbatim - -bassfigures = \figuremode { - \set useBassFigureExtenders = ##t - <6 4>4 <6 4\!> <6 4\!> <6 4\!> | <6\! 4\!> <6 4> <6 4\!> <6 4> -} - -<< - \new Staff \relative c'' { c1 c1 } - \new FiguredBass \bassfigures ->> - - - diff --git a/input/lsr/manually-controlling-beam-positions.ly b/input/lsr/manually-controlling-beam-positions.ly deleted file mode 100644 index 6407d39ecf..0000000000 --- a/input/lsr/manually-controlling-beam-positions.ly +++ /dev/null @@ -1,29 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -Beam positions may be controlled manually, by overriding the -@code{positions} setting of the @code{Beam} grob. - - - - -" - doctitle = "Manually controlling beam positions" -} % begin verbatim - -\relative c' { - \time 2/4 - % from upper staff-line (position 2) to center (position 0) - \override Beam #'positions = #'(2 . 0) - c8 c - % from center to one above center (position 1) - \override Beam #'positions = #'(0 . 1) - c8 c -} - - diff --git a/input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly b/input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly deleted file mode 100644 index 800d93b974..0000000000 --- a/input/lsr/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, vocal-music" - - texidoc = " -This example shows how to put crosses on stems. Mark the beginning of -a spoken section with the @code{\\speakOn} keyword, and end it with the -@code{\\speakOff} keyword. - -" - doctitle = "Marking notes of spoken parts with a cross on the stem" -} % begin verbatim - -speakOn = { - \override Stem #'stencil = #(lambda (grob) - (let* ((x-parent (ly:grob-parent grob X)) - (is-rest? (ly:grob? (ly:grob-object x-parent 'rest)))) - (if is-rest? - empty-stencil - (ly:stencil-combine-at-edge - (ly:stem::print grob) - Y - (- (ly:grob-property grob 'direction)) - (grob-interpret-markup grob - (markup #:hspace -1.025 #:fontsize -4 - #:musicglyph "noteheads.s2cross")) - -2.3 0)))) -} - -speakOff = { - \revert Stem #'stencil -} - -\score { - \new Staff { - \relative c'' { - a4 b a c - \speakOn - g4 f r g - b4 r d e - \speakOff - c4 a g f - } - } -} - diff --git a/input/lsr/measure-counter.ly b/input/lsr/measure-counter.ly deleted file mode 100644 index 9574a6ccb1..0000000000 --- a/input/lsr/measure-counter.ly +++ /dev/null @@ -1,39 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats, staff-notation, editorial-annotations" - - texidoces = " -Este fragmento de código proporciona una solución alternativa a la -producción de contadores de compás utilizando repeticiones -transparentes de tipo porcentaje. - -" - doctitlees = "Contador de compases" - - texidoc = " -This snippet provides a workaround for emitting measure counters using -transparent percent repeats. - -" - doctitle = "Measure counter" -} % begin verbatim - -<< - \context Voice = "foo" { - \clef bass - c4 r g r - c4 r g r - c4 r g r - c4 r g r - } - \context Voice = "foo" { - \set countPercentRepeats = ##t - \override PercentRepeat #'transparent = ##t - \override PercentRepeatCounter #'staff-padding = #1 - \repeat percent 4 { s1 } - } ->> - diff --git a/input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly b/input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly deleted file mode 100644 index bcb7b00fd5..0000000000 --- a/input/lsr/mensurstriche-layout-bar-lines-between-the-staves.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides" - - texidoces = " -La disposición «mensurstriche» en que las líneas divisorias no -están dibujadas sobre los pentagramas, sino entre ellos, se puede -conseguir con un @code{StaffGroup} en vez de un @code{ChoirStaff}. -La línea divisoria sobre los pentagramas se borra estableciendo la -propiedad @code{transparent}. - -" - - doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)" - - texidoc = " -The mensurstriche-layout where the bar lines do not show on the staves -but between staves can be achieved with a @code{StaffGroup} instead of -a @code{ChoirStaff}. The bar line on staves is blanked out by setting -the @code{transparent} property. - -" - doctitle = "Mensurstriche layout (bar lines between the staves)" -} % begin verbatim - -global = { - \override Staff.BarLine #'transparent = ##t - s1 s - % the final bar line is not interrupted - \revert Staff.BarLine #'transparent - \bar "|." -} -\new StaffGroup \relative c'' { - << - \new Staff { << \global { c1 c } >> } - \new Staff { << \global { c c } >> } - >> -} - diff --git a/input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly b/input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly deleted file mode 100644 index 81820cecf9..0000000000 --- a/input/lsr/merging-multi-measure-rests-in-a-polyphonic-part.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -When using multi-measure rests in a polyphonic staff, the rests will be -placed differently depending on the voice they belong to. However they -can be printed on the same staff line, using the following setting. - -" - doctitle = "Merging multi-measure rests in a polyphonic part" -} % begin verbatim - -normalPos = \revert MultiMeasureRest #'staff-position - -{ - << - { - c''1 - R1 - c''1 - \normalPos - R1 - } - \\ - { - c'1 - R1 - c'1 - \normalPos - R1 - } - >> -} - diff --git a/input/lsr/modern-tab-text-clef.ly b/input/lsr/modern-tab-text-clef.ly deleted file mode 100644 index f7bee1b4cb..0000000000 --- a/input/lsr/modern-tab-text-clef.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, fretted-strings" - - texidoc = " -Use a markup text to replace the (TAB) clef glyph with a modern font. - -" - doctitle = "Modern TAB text clef" -} % begin verbatim - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -\new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - a -} diff --git a/input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly b/input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly deleted file mode 100644 index 260fa3e87c..0000000000 --- a/input/lsr/modifying-default-values-for-articulation-shorthand-notation.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Las abreviaturas se encuentran definidas dentro del archivo -@code{ly/script-init.ly}, donde las variables @code{dashHat}, -@code{dashPlus}, @code{dashDash}, @code{dashBar}, -@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben -valores predeterminados. Se pueden modificar estos valores -predeterminados para las abreviaturas. Por ejemplo, para asociar -la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del -semitrino en lugar del símbolo predeterminado +, asigne el valor -@code{trill} a la variable @code{dashPlus}: - -" - doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Die Abkürzungen sind in der Datei @samp{ly/script-init.ly} definiert, wo -den Variablen @code{dashHat}, @code{dashPlus}, @code{dashDash}, -@code{dashBar}, @code{dashLarger}, @code{dashDot} und -@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte -können verändert werden. Um zum Beispiel die Abkürzung -@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu -assoziieren, muss der Wert @code{trill} der Variable -@code{dashPlus} zugewiesen werden: - -" - doctitlede = "Die Standardwerte für Arkkikulationsabkürzungen verändern" - - texidoc = " -The shorthands are defined in @samp{ly/script-init.ly}, where the -variables @code{dashHat}, @code{dashPlus}, @code{dashDash}, -@code{dashBar}, @code{dashLarger}, @code{dashDot}, and -@code{dashUnderscore} are assigned default values. The default values -for the shorthands can be modified. For example, to associate the -@code{-+} (@code{dashPlus}) shorthand with the trill symbol instead of -the default + symbol, assign the value @code{trill} to the variable -@code{dashPlus}: - -" - doctitle = "Modifying default values for articulation shorthand notation" -} % begin verbatim - -\relative c'' { c1-+ } -dashPlus = "trill" -\relative c'' { c1-+ } - diff --git a/input/lsr/multi-measure-rest-markup.ly b/input/lsr/multi-measure-rest-markup.ly deleted file mode 100644 index 6baa1bdade..0000000000 --- a/input/lsr/multi-measure-rest-markup.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, text" - -texidoces = " -Los elementos de marcado aplicados a un silencio multicompás se -centran encima o debajo de éste. Los elementos de marcado extensos -que se adjuntan a silencios multicompás no producen la expansión del -compás. Para expandir un silencio multicompás de forma que quepa todo -el marcado, utilice un silencio de separación con un marcado aplicado -antes del silencio multicompás. - -Observe que el silencio separador produce la inserción de un compás. -El texto aplicado a un siencio sparador de esta forma se alinea por la -izquierda a la posición en que la nota estaría situada dentro del -compás, pero si la longitud del compás está determinada por la -longitud del texto, éste aparecerá centrado. - -" - -doctitlees = "Marcado de silencios multicompás" - texidoc = " -Markups attached to a multi-measure rest will be centered above or -below it. Long markups attached to multi-measure rests do not cause -the measure to expand. To expand a multi-measure rest to fit the -markup, use a spacer rest with an attached markup before the -multi-measure rest. - -Note that the spacer rest causes a bar line to be inserted. Text -attached to a spacer rest in this way is left-aligned to the position -where the note would be placed in the measure, but if the measure -length is determined by the length of the text, the text will appear to -be centered. - -" - doctitle = "Multi-measure rest markup" -} % begin verbatim - -\relative c' { - \compressFullBarRests - \textLengthOn - s1*0^\markup { [MAJOR GENERAL] } - R1*19 - s1*0_\markup { \italic { Cue: ... it is yours } } - s1*0^\markup { A } - R1*30^\markup { [MABEL] } - \textLengthOff - c4^\markup { CHORUS } d f c -} diff --git a/input/lsr/nesting-staves.ly b/input/lsr/nesting-staves.ly deleted file mode 100644 index 73223a5b86..0000000000 --- a/input/lsr/nesting-staves.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides" - - texidoces = " -Se puede utilizar la propiedad -@code{systemStartDelimiterHierarchy} para crear grupos de -pentagramas anidados de forma más compleja. La instrucción -@code{\\set StaffGroup.systemStartDelimiterHierarchy} toma una -lista alfabética del número de pentagramas producidos. Se puede -proporcionar antes de cada pentagrama un delimitador de comienzo -de sistema. Se debe encerrar entre corchetes y admite tantos -pentagramas como encierren las llaves. Se pueden omitir los -elementos de la lista, pero el primer corchete siempre abarca -todos los pentagramas. Las posibilidades son -@code{SystemStartBar}, @code{SystemStartBracket}, -@code{SystemStartBrace} y @code{SystemStartSquare}. - -" - doctitlees = "Anidado de grupos de pentagramas" - - texidoc = " -The property @code{systemStartDelimiterHierarchy} can be used to make -more complex nested staff groups. The command @code{\\set -StaffGroup.systemStartDelimiterHierarchy} takes an alphabetical list of -the number of staves produced. Before each staff a system start -delimiter can be given. It has to be enclosed in brackets and takes as -much staves as the brackets enclose. Elements in the list can be -omitted, but the first bracket takes always the complete number of -staves. The possibilities are @code{SystemStartBar}, -@code{SystemStartBracket}, @code{SystemStartBrace}, and -@code{SystemStartSquare}. - -" - doctitle = "Nesting staves" -} % begin verbatim - -\new StaffGroup -\relative c'' << - \set StaffGroup.systemStartDelimiterHierarchy - = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a - (SystemStartSquare b) ) c ) d) - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } - \new Staff { c1 } ->> - diff --git a/input/lsr/non-traditional-key-signatures.ly b/input/lsr/non-traditional-key-signatures.ly deleted file mode 100644 index be636059d6..0000000000 --- a/input/lsr/non-traditional-key-signatures.ly +++ /dev/null @@ -1,92 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, staff-notation" - - doctitlees = "Armaduras de tonalidad no tradicionales" - texidoces = " -La muy utilizada instrucción @code{\\key} establece la propiedad -@code{keySignature} property, dentro del contexto @code{Staff}. - -Para crear armaduras de tonalidad no estándar, ajuste esta propiedad -directamente. El formato de esta instrucción es una lista: - -@code{\\set Staff.keySignature = #`(((octava . paso) . alteración) -((octava . paso) . alteración) ...)} donde, para cada elemento dentro -de la lista, @code{octava} especifica la octava (siendo cero la octava -desde el Do central hasta el Si por encima), @code{paso} especifica la -nota dentro de la octava (cero significa Do y 6 significa Si), y -@code{alteración} es @code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (observe -la coma precedente.) - -Alternativamente, para cada elemento de la lista el uso del formato -más conciso @code{(paso . alteración)} especifica que la misma -alteración debe estar en todas las octavas. - -He aquí un ejemplo de una posible armadura para generar una escala -exátona: -" - - doctitlede = "Untypische Tonarten" - texidocde = " -Der üblicherweise benutzte @code{\\key}-Befehl setzt die -@code{keySignature}-Eigenschaft im @code{Staff}-Kontext. - -Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft -direkt setzen. Das Format für den Befehl ist eine Liste: @code{ \\set -Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave -. Schritt) . Alteration) ...)} wobei für jedes Element in der Liste -@code{Oktave} die Oktave angibt (0@tie{}ist die Oktave vom -eingestrichenen@tie{}C bis zum eingestrichenen@tie{}H), @code{Schritt} gibt -die Note innerhalb der Oktave an (0@tie{}heißt@tie{}C und -6@tie{}heißt@tie{}H), und @code{Alteration} ist @code{,SHARP ,FLAT -,DOUBLE-SHARP} usw. (Beachte das beginnende Komma.) - -Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format -@code{(Schritt . Alteration)} gesetzt werden, wobei dann die Einstellungen -für alle Oktaven gelten. - -Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter: -" - - texidoc = " -The commonly used @code{\\key} command sets the @code{keySignature} -property, in the @code{Staff} context. - -To create non-standard key signatures, set this property directly. The -format of this command is a list: - -@code{ \\set Staff.keySignature = #`(((octave . step) . alter) ((octave -. step) . alter) ...) } where, for each element in the list, -@code{octave} specifies the octave (0 being the octave from middle C to -the B above), @code{step} specifies the note within the octave (0 means -C and 6 means B), and @code{alter} is @code{,SHARP ,FLAT ,DOUBLE-SHARP} -etc. (Note the leading comma.) The accidentals in the key signature -will appear in the reverse order to that in which they are specified. - - -Alternatively, for each item in the list, using the more concise format -@code{(step . alter)} specifies that the same alteration should hold in -all octaves. - - -For microtonal scales where a \"sharp\" is not 100 cents, @code{alter} -refers to the alteration as a proportion of a 200-cent whole tone. - - -Here is an example of a possible key signature for generating a -whole-tone scale: - -" - doctitle = "Non-traditional key signatures" -} % begin verbatim - -\relative c' { - \set Staff.keySignature = #`(((0 . 3) . ,SHARP) - ((0 . 5) . ,FLAT) - ((0 . 6) . ,FLAT)) - c4 d e fis - aes4 bes c2 -} diff --git a/input/lsr/orchestra,-choir-and-piano-template.ly b/input/lsr/orchestra,-choir-and-piano-template.ly deleted file mode 100644 index 158af839d6..0000000000 --- a/input/lsr/orchestra,-choir-and-piano-template.ly +++ /dev/null @@ -1,163 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "template" - - texidoc = " -This template demonstrates the use of nested @code{StaffGroup} and -@code{GrandStaff} contexts to sub-group instruments of the same type -together, and the use of @code{\\transpose} for transposing -instruments. All music in variables is stored in C. Music may be -entered in C or, alternatively, entered in the instrument key and -transposed to C before being assigned to a variable. - -" - doctitle = "Orchestra, choir and piano template" -} % begin verbatim - -#(set-global-staff-size 17) - -\paper { - indent = 3.0\cm - short-indent = 1.5\cm -} - -fluteMusic = \relative c { \key c \major c'1 d } -oboeMusic = \relative c { \key c \major c'1 d } -clarinetMusic = \relative c { \key c \major c'1 d } -bassoonMusic = \relative c { \clef bass \key c \major c1 d } -trumpetMusic = \relative c { \key c \major c''1 d } -tromboneMusic = \relative c { \key c \major c1 d } -hornIMusic = \relative c { c'1 d } -hornIIMusic = \relative c { c1 d } -percussionMusic = \relative c { \key c \major c1 d } -sopranoMusic = \relative c'' { \key c \major c1 d } -sopranoLyrics = \lyricmode { Sop -- ra } -altoIMusic = \relative c' { \key c \major c1 d } -altoILyrics = \lyricmode { A -- one } -altoIIMusic = \relative c' { \key c \major c1 d } -altoIILyrics = \lyricmode { A -- two } -tenorMusic = \relative c' { \key c \major c1 d } -tenorLyrics = \lyricmode { Ten -- or } -pianoRHMusic = \relative c { \key c \major c'1 d } -pianoLHMusic = \relative c { \key c \major c1 d } -violinIMusic = \relative c { \key c \major c'1 d } -violinIIMusic = \relative c { \key c \major c'1 d } -violaMusic = \relative c { \clef alto \key c \major c'1 d } -celloMusic = \relative c { \clef bass \key c \major c1 d } -bassMusic = \relative c { \clef "bass_8" \key c \major c,1 d } - -\score { - \new GrandStaff = "GrandStaff_score" << - \new StaffGroup = "StaffGroup_woodwinds" << - \new Staff = "Staff_flute" { - \set Staff.instrumentName = #"Flute" - \fluteMusic - } - \new Staff = "Staff_oboe" { - \set Staff.instrumentName = #"Oboe" - \oboeMusic - } - \new Staff = "Staff_clarinet" { - \set Staff.instrumentName = \markup \concat { "Clarinet in B" \flat } - \transposition bes - \transpose bes c' \clarinetMusic - } - \new Staff = "Staff_bassoon" { - \set Staff.instrumentName = #"Bassoon" - \bassoonMusic - } - >> - \new StaffGroup = "StaffGroup_brass" << - \new GrandStaff << - \new Staff = "Staff_hornI" { - \set Staff.instrumentName = #"Horn I" - \transposition f - \transpose f c' \hornIMusic - } - \new Staff = "Staff_hornII" { - \set Staff.instrumentName = #"Horn II" - \clef bass - \transposition f' - \transpose f c \hornIIMusic - } - >> - \new Staff = "Staff_trumpet" { - \set Staff.instrumentName = #"Trumpet in C" - \trumpetMusic - } - \new Staff = "Staff_trombone" { - \set Staff.instrumentName = #"Trombone" - \clef bass - \tromboneMusic - } - >> - \new RhythmicStaff = "RhythmicStaff_percussion" << - \set RhythmicStaff.instrumentName = #"Percussion" - \percussionMusic - >> - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" - \new Staff { \pianoRHMusic } - \new Staff { - \clef bass - \pianoLHMusic - } - >> - \new ChoirStaff = "ChoirStaff_choir" << - \new Staff = "Staff_soprano" { - \set Staff.instrumentName = #"Soprano" - \new Voice = "soprano" - \sopranoMusic - } - \new Lyrics \lyricsto "soprano" { \sopranoLyrics } - \new GrandStaff = "GrandStaff_altos" \with { \accepts Lyrics } << - \new Staff = "Staff_altoI" { - \set Staff.instrumentName = #"Alto I" - \new Voice = "altoI" - \altoIMusic - } - \new Lyrics \lyricsto "altoI" { \altoILyrics } - \new Staff = "Staff_altoII" { - \set Staff.instrumentName = #"Alto II" - \new Voice = "altoII" - \altoIIMusic - } - \new Lyrics \lyricsto "altoII" { \altoIILyrics } - >> - \new Staff = "Staff_tenor" { - \set Staff.instrumentName = #"Tenor" - \clef "treble_8" - \new Voice = "tenor" - \tenorMusic - } - \new Lyrics \lyricsto "tenor" { \tenorLyrics } - >> - \new StaffGroup = "StaffGroup_strings" << - \new GrandStaff = "GrandStaff_violins" << - \new Staff = "Staff_violinI" { - \set Staff.instrumentName = #"Violin I" - \violinIMusic - } - \new Staff = "Staff_violinII" { - \set Staff.instrumentName = #"Violin II" - \violinIIMusic - } - >> - \new Staff = "Staff_viola" { - \set Staff.instrumentName = #"Viola" - \violaMusic - } - \new Staff = "Staff_cello" { - \set Staff.instrumentName = #"Cello" - \celloMusic - } - \new Staff = "Staff_bass" { - \set Staff.instrumentName = #"Double Bass" - \bassMusic - } - >> - >> -} diff --git a/input/lsr/ottava-text.ly b/input/lsr/ottava-text.ly deleted file mode 100644 index 245a68d139..0000000000 --- a/input/lsr/ottava-text.ly +++ /dev/null @@ -1,49 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, text" - - texidoces = " -Internamente, la función @code{set-octavation} establece las -propiedades @code{ottavation} (por ejemplo, a @code{\"8va\"} o a -@code{\"8vb\"}) y @code{middleCPosition}. Para sobreescribir el texto -del corchete, ajuste @code{ottavation} despues de invocar a -@code{set-octavation}. -" - doctitlees = "Texto de octava alta y baja" - - -texidocde = " -Intern setzt die @code{set-octavation}-Funktion die Eigenschaften -@code{ottavation} (etwa auf den Wert @code{\"8va\"} oder @code{\"8vb\"}) -und @code{middleCPosition}. Um den Text der Oktavierungsklammer zu -ändern, kann @code{ottavation} manuell gesetzt werden, nachdem -@code{set-octavation} benützt wurde. - -" - -doctitlede = "Ottava-Text" - - texidoc = " -Internally, @code{\\ottava} sets the properties @code{ottavation} (for -example, to @code{\"8va\"} or @code{\"8vb\"}) and -@code{middleCPosition}. To override the text of the bracket, set -@code{ottavation} after invoking @code{\\ottava}. - -" - doctitle = "Ottava text" -} % begin verbatim - -{ - \ottava #1 - \set Staff.ottavation = #"8" - c''1 - \ottava #0 - c'1 - \ottava #1 - \set Staff.ottavation = #"Text" - c''1 -} - diff --git a/input/lsr/outputting-the-version-number.ly b/input/lsr/outputting-the-version-number.ly deleted file mode 100644 index 1666f205c5..0000000000 --- a/input/lsr/outputting-the-version-number.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, titles" - - texidoc = " -By putting the output of - @code{lilypond-version} into a lyric, it is possible to print the - version number of LilyPond in a score, or in a document generated - with @code{lilypond-book}. Another possibility is to append the - version number to the doc-string, in this manner: - -" - doctitle = "Outputting the version number" -} % begin verbatim - -\score { - \new Lyrics { - \override Score.RehearsalMark #'self-alignment-X = #LEFT - \mark #(string-append "Processed with LilyPond version " (lilypond-version)) - s2 - } -} - - - diff --git a/input/lsr/percent-repeat-count-visibility.ly b/input/lsr/percent-repeat-count-visibility.ly deleted file mode 100644 index 3d55200a65..0000000000 --- a/input/lsr/percent-repeat-count-visibility.ly +++ /dev/null @@ -1,30 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats, tweaks-and-overrides" - - texidoces = " -Se pueden mostrar los contadores de las repeticiones del tipo -porcentaje a intervalos regulares mediante el establecimiento de -la propiedad de contexto @code{repeatCountVisibility}. - -" - doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" - - texidoc = " -Percent repeat counters can be shown at regular intervals by setting -the context property @code{repeatCountVisibility}. - -" - doctitle = "Percent repeat count visibility" -} % begin verbatim - -\relative c'' { - \set countPercentRepeats = ##t - \set repeatCountVisibility = #(every-nth-repeat-count-visible 5) - \repeat percent 10 { c1 } \break - \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) - \repeat percent 6 { c1 d1 } -} diff --git a/input/lsr/percent-repeat-counter.ly b/input/lsr/percent-repeat-counter.ly deleted file mode 100644 index af00725dd4..0000000000 --- a/input/lsr/percent-repeat-counter.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats" - - texidoces = " -Las repeticiones de compases completos mayores de dos repeticiones -pueden llevar un contador si se activa la propiedad adecuada, como se -ve en este ejemplo: - -" - doctitlees = "Percent repeat counter" - - texidoc = " -Measure repeats of more than two repeats can get a counter when the -convenient property is switched, as shown in this example: - -" - doctitle = "Percent repeat counter" -} % begin verbatim - -\relative c'' { - \set countPercentRepeats = ##t - \repeat percent 4 { c1 } -} - diff --git a/input/lsr/permitting-line-breaks-within-beamed-tuplets.ly b/input/lsr/permitting-line-breaks-within-beamed-tuplets.ly deleted file mode 100644 index a8cc75f9d0..0000000000 --- a/input/lsr/permitting-line-breaks-within-beamed-tuplets.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra" - texidoces = " -Este ejemplo artificial muestra cómo se pueden permitir tanto los -saltos de línea manuales como los automáticos dentro de un grupo de -valoración especial unido por una barra. Observe que estos grupos -sincopados se deben barrar manualmente. - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch -manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt -werden können. Diese unregelmäßige Bebalkung muss allerdings manuell -gesetzt werden. - -" - doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben" - - texidoc = " -This artificial example shows how both manual and automatic line breaks -may be permitted to within a beamed tuplet. Note that such off-beat -tuplets have to be beamed manually. - -" - doctitle = "Permitting line breaks within beamed tuplets" -} % begin verbatim - -\layout { - \context { - \Voice - % Permit line breaks within tuplets - \remove "Forbid_line_break_engraver" - % Allow beams to be broken at line breaks - \override Beam #'breakable = ##t - } -} -\relative c'' { - a8 - \repeat unfold 5 { \times 2/3 { c[ b a] } } - % Insert a manual line break within a tuplet - \times 2/3 { c[ b \bar "" \break a] } - \repeat unfold 5 { \times 2/3 { c[ b a] } } - c8 -} - diff --git a/input/lsr/piano-template-simple.ly b/input/lsr/piano-template-simple.ly deleted file mode 100644 index 88c6fff4dc..0000000000 --- a/input/lsr/piano-template-simple.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "keyboards, template" - - texidoces = " -Presentamos a continuación una plantilla de piano sencilla con algunas -notas. - -" - doctitlees = "Plantilla de piano (sencilla)" - - texidocde = " -Hier ein einfaches Klaviersystem. - -" - doctitlede = "Vorlage für einfache Klaviernotation" - - texidoc = " -Here is a simple piano staff with some notes. - -" - doctitle = "Piano template (simple)" -} % begin verbatim - -upper = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -lower = \relative c { - \clef bass - \key c \major - \time 4/4 - - a2 c -} - -\score { - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/piano-template-with-centered-dynamics.ly b/input/lsr/piano-template-with-centered-dynamics.ly deleted file mode 100644 index 348ad910c7..0000000000 --- a/input/lsr/piano-template-with-centered-dynamics.ly +++ /dev/null @@ -1,100 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, keyboards, template" - - texidoces = " -Muchas partituras de piano tienen las indicaciones dinámicas -centradas entre los dos pentagramas. Esto requiere un poco de -trucaje, pero puesto que la plantilla está aquí mismo, no tenemos -que hacer este trucaje por nuestra cuenta. - -" - doctitlees = "Plantilla de piano con matices centrados" - - texidocde = " -In der meisten Klaviernotation werden die Dynamikzeichen zwischen -den beiden Systemen zentriert. Für LilyPond muss man die Einstellungen -etwas anpassen, aber Sie können ja das angepasste Beispiel von hier -kopieren. -" - - texidoc = " -Many piano scores have the dynamics centered between the two staves. -This requires a bit of tweaking to implement, but since the template is -right here, you don't have to do the tweaking yourself. - -" - doctitle = "Piano template with centered dynamics" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -upper = \relative c'' { - \clef treble - a4 b c d -} - -lower = \relative c { - \clef bass - a2 c -} - -dynamics = { - s2\fff\> s4 s\!\pp -} - -pedal = { - s2\sustainOn s\sustainOff -} - -\score { - \new PianoStaff = "PianoStaff_pf" << - \new Staff = "Staff_pfUpper" << \global \upper >> - \new Dynamics = "Dynamics_pf" \dynamics - \new Staff = "Staff_pfLower" << \global \lower >> - \new Dynamics = "pedal" \pedal - >> - - \layout { - % define Dynamics context - \context { - \type "Engraver_group" - \name Dynamics - \alias Voice - \consists "Output_property_engraver" - \consists "Piano_pedal_engraver" - \consists "Script_engraver" - \consists "New_dynamic_engraver" - \consists "Dynamic_align_engraver" - \consists "Text_engraver" - \consists "Skip_event_swallow_translator" - \consists "Axis_group_engraver" - - pedalSustainStrings = #'("Ped." "*Ped." "*") - pedalUnaCordaStrings = #'("una corda" "" "tre corde") - \override DynamicLineSpanner #'Y-offset = #0 - \override TextScript #'font-size = #2 - \override TextScript #'font-shape = #'italic - \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 1) - } - % modify PianoStaff context to accept Dynamics context - \context { - \PianoStaff - \accepts Dynamics - } - } -} - -\score { - \new PianoStaff = "PianoStaff_pf" << - \new Staff = "Staff_pfUpper" << \global \upper \dynamics \pedal >> - \new Staff = "Staff_pfLower" << \global \lower \dynamics \pedal >> - >> - \midi { } -} diff --git a/input/lsr/piano-template-with-centered-lyrics.ly b/input/lsr/piano-template-with-centered-lyrics.ly deleted file mode 100644 index ad36e2611b..0000000000 --- a/input/lsr/piano-template-with-centered-lyrics.ly +++ /dev/null @@ -1,67 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, keyboards, template" - - 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. - -" - doctitlees = "Plantilla de piano con letra centrada" - - texidocde = " -Anstatt ein eigenes System für Melodie und Text zu schreiben, können -Sie den Text auch zwischen die beiden Klaviersysteme schreiben -(und damit das zusätzliche System für die Gesangstimme auslassen). -" - - texidoc = " -Instead of having a full staff for the melody and lyrics, lyrics can be -centered between the staves of a piano staff. - -" - doctitle = "Piano template with centered lyrics" -} % begin verbatim - -upper = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -lower = \relative c { - \clef bass - \key c \major - \time 4/4 - - a2 c -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -\score { - \new GrandStaff << - \new Staff = upper { \new Voice = "singer" \upper } - \new Lyrics \lyricsto "singer" \text - \new Staff = lower { \lower } - >> - \layout { - \context { - \GrandStaff - \accepts "Lyrics" - } - \context { - \Lyrics - \consists "Bar_engraver" - } - } - \midi { } -} - diff --git a/input/lsr/piano-template-with-melody-and-lyrics.ly b/input/lsr/piano-template-with-melody-and-lyrics.ly deleted file mode 100644 index 03c3c3b4b6..0000000000 --- a/input/lsr/piano-template-with-melody-and-lyrics.ly +++ /dev/null @@ -1,70 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music, keyboards, template" - - 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. - -" - doctitlees = "Plantilla de piano con melodía y letra" - - texidocde = " -Das nächste Beispiel ist typisch für ein Lied: Im oberen System die -Melodie mit Text, darunter Klavierbegleitung. -" - - texidoc = " -Here is a typical song format: one staff with the melody and lyrics, -with piano accompaniment underneath. - -" - doctitle = "Piano template with melody and lyrics" -} % begin verbatim - -melody = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a b c d -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -upper = \relative c'' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -lower = \relative c { - \clef bass - \key c \major - \time 4/4 - - a2 c -} - -\score { - << - \new Voice = "mel" { \autoBeamOff \melody } - \new Lyrics \lyricsto mel \text - \new PianoStaff << - \new Staff = "upper" \upper - \new Staff = "lower" \lower - >> - >> - \layout { - \context { \RemoveEmptyStaffContext } - } - \midi { } -} - diff --git a/input/lsr/pitches.snippet-list b/input/lsr/pitches.snippet-list deleted file mode 100644 index d6f0217428..0000000000 --- a/input/lsr/pitches.snippet-list +++ /dev/null @@ -1,17 +0,0 @@ -adding-ambitus-per-voice.ly -ambitus-with-multiple-voices.ly -ambitus.ly -applying-note-head-styles-depending-on-the-step-of-the-scale.ly -coloring-notes-depending-on-their-pitch.ly -creating-a-sequence-of-notes-on-various-pitches.ly -dodecaphonic-style-accidentals-for-each-note-including-naturals.ly -generating-random-notes.ly -makam-example.ly -non-traditional-key-signatures.ly -ottava-text.ly -preventing-extra-naturals-from-being-automatically-added.ly -preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly -quoting-another-voice-with-transposition.ly -separating-key-cancellations-from-key-signature-changes.ly -transposing-pitches-with-minimum-accidentals-smart-transpose.ly -tweaking-clef-properties.ly diff --git a/input/lsr/placement-of-right-hand-fingerings.ly b/input/lsr/placement-of-right-hand-fingerings.ly deleted file mode 100644 index 53e6002629..0000000000 --- a/input/lsr/placement-of-right-hand-fingerings.ly +++ /dev/null @@ -1,50 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - texidoces = " -Es posible ejercer un mayor control sobre la colocación de las -digitaciones de la mano derecha estableciendo el valor de una -propiedad específica, como se muestra en el ejemplo siguiente. - -" - doctitlees = "Posicionamiento de digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Vous disposez d'une propriété spécifique qui permet de contrôler plus -finement le positionnement des doigtés main droite, comme l'indique -l'exemple suivant. - -" - doctitlefr = "Positionnement des doigtés main droite" - - - texidoc = " -It is possible to exercise greater control over the placement of -right-hand fingerings by setting a specific property, as demonstrated -in the following example. - -" - doctitle = "Placement of right-hand fingerings" -} % begin verbatim - -#(define RH rightHandFinger) - -\relative c { - \clef "treble_8" - - \set strokeFingerOrientations = #'(up down) - 4 - - \set strokeFingerOrientations = #'(up right down) - 4 - - \set strokeFingerOrientations = #'(left) - 2 -} - diff --git a/input/lsr/polyphony-in-tablature.ly b/input/lsr/polyphony-in-tablature.ly deleted file mode 100644 index e2ff175fbc..0000000000 --- a/input/lsr/polyphony-in-tablature.ly +++ /dev/null @@ -1,60 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - texidoces = " -La polifonía se crea de la misma forma en un @code{TabStaff} que -en una pauta normal. - -" - doctitlees = "Polifonía en tablaturas" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Une section polyphonique s'obtient dans un @code{TabStaff} de la -même manière que dans une portée normale. - -" - doctitlefr = "Polyphonie en mode tablature" - - texidoc = " -Polyphony is created the same way in a @code{TabStaff} as in a regular -staff. - -" - doctitle = "Polyphony in tablature" -} % begin verbatim - -upper = \relative c' { - \time 12/8 - \key e \minor - \voiceOne - r4. r8 e, fis g16 b g e e' b c b a g fis e -} - -lower = \relative c { - \key e \minor - \voiceTwo - r16 e d c b a g4 fis8 e fis g a b c -} - -\score { - << - \new StaffGroup = "tab with traditional" << - \new Staff = "guitar traditional" << - \clef "treble_8" - \context Voice = "upper" \upper - \context Voice = "lower" \lower - >> - \new TabStaff = "guitar tab" << - \context TabVoice = "upper" \upper - \context TabVoice = "lower" \lower - >> - >> - >> -} - diff --git a/input/lsr/positioning-grace-notes-with-floating-space.ly b/input/lsr/positioning-grace-notes-with-floating-space.ly deleted file mode 100644 index c42479c6a3..0000000000 --- a/input/lsr/positioning-grace-notes-with-floating-space.ly +++ /dev/null @@ -1,31 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -Setting the property @code{'strict-grace-spacing} makes the musical -columns for grace notes 'floating', i.e., decoupled from the non-grace -notes: first the normal notes are spaced, then the (musical columns of -the) graces are put left of the musical columns for the main notes. - -" - doctitle = "Positioning grace notes with floating space" -} % begin verbatim - -\relative c'' { - << - \override Score.SpacingSpanner #'strict-grace-spacing = ##t - \new Staff \new Voice { - \afterGrace c4 { c16[ c8 c16] } - c8[ \grace { b16[ d] } c8] - c4 r - } - \new Staff { - c16 c c c c c c c c4 r - } - >> -} - diff --git a/input/lsr/positioning-multi-measure-rests.ly b/input/lsr/positioning-multi-measure-rests.ly deleted file mode 100644 index 3f48e725ce..0000000000 --- a/input/lsr/positioning-multi-measure-rests.ly +++ /dev/null @@ -1,67 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - doctitlees = "Posicionar los silencios multicompás" - texidoces = " -A diferencia de los silencios normales, no existe una instrucción -predefinida para modificar la posición predefinida de un símbolo -multicompás sobre el pentagrama, adjuntándolo a una nota, -independientemente de cuál sea su forma. Sin embargo, en la música -polifónica los silencios multicompás de las voces de numeración par e -impar están separados verticalmente. La colocación de los silencios -multicompás se puede controlar como se ve a continuación: - -" - -texidocde = " -Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die -vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an -eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die -Position der Pausen von geraden und ungeraden Stimmen voneinander -unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert -werden: - " - doctitlede = "Positionierung von Ganztaktpausen" - - texidoc = " -Unlike ordinary rests, there is no predefined command to change the -staff position of a multi-measure rest symbol of either form by -attaching it to a note. However, in polyphonic music multi-measure -rests in odd-numbered and even-numbered voices are vertically -separated. The positioning of multi-measure rests can be controlled as -follows: - -" - doctitle = "Positioning multi-measure rests" -} % begin verbatim - -\relative c'' { - % Multi-measure rests by default are set under the fourth line - R1 - % They can be moved with an override - \override MultiMeasureRest #'staff-position = #-2 - R1 - % A value of 0 is the default position; - % the following trick moves the rest to the center line - \override MultiMeasureRest #'staff-position = #-0.01 - R1 - % Multi-measure rests in odd-numbered voices are under the top line - << { R1 } \\ { a1 } >> - % Multi-measure rests in even-numbered voices are under the bottom line - << { c1 } \\ { R1 } >> - % They remain separated even in empty measures - << { R1 } \\ { R1 } >> - % This brings them together even though there are two voices - \compressFullBarRests - << - \revert MultiMeasureRest #'staff-position - { R1*3 } - \\ - \revert MultiMeasureRest #'staff-position - { R1*3 } - >> -} diff --git a/input/lsr/positioning-text-markups-inside-slurs.ly b/input/lsr/positioning-text-markups-inside-slurs.ly deleted file mode 100644 index 3be3e34164..0000000000 --- a/input/lsr/positioning-text-markups-inside-slurs.ly +++ /dev/null @@ -1,31 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides" - - texidoces = " - -Los elementos de marcado de texto deben tener la propiedad -@code{outside-staff-priority} establecida al valor falso para que se -impriman por dentro de las ligaduras de expresión. - -" - doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras" - - texidoc = " -Text markups need to have the @code{outside-staff-priority} property -set to false in order to be printed inside slurs. - -" - doctitle = "Positioning text markups inside slurs" -} % begin verbatim - -\relative c'' { - \override TextScript #'avoid-slur = #'inside - \override TextScript #'outside-staff-priority = ##f - c2(^\markup { \halign #-10 \natural } d4.) c8 -} - - diff --git a/input/lsr/preventing-extra-naturals-from-being-automatically-added.ly b/input/lsr/preventing-extra-naturals-from-being-automatically-added.ly deleted file mode 100644 index 4da093f508..0000000000 --- a/input/lsr/preventing-extra-naturals-from-being-automatically-added.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches" - - texidocfr = " -En accord avec les règles standards de l'écriture musicale, on grave -un bécarre avant un dièse ou un bémol si on a besoin d'annuler une -altération précédente. Pour modifier ce comportement, assignez la propriété -@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux). -" -doctitlees = "Evitar que se añadan becuadros adicionales automáticamente" -texidoces = " -Según las reglas estándar de composición tipográfica, se imprime un becuadro -antes de un sostenido o un bemol cuando se tiene que cancelar una alteración anterior -en la misma nota. Para modificar este comportamiento, establezca el valor de la -propiedad @code{extraNatural} a @code{##f} (falso) dentro del -contexto de @code{Staff}. - -" - -doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch -hinzugefügt werden" - -texidocde = "Den tranditionellen Notensatzregeln zufolge wird ein -Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn -ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden -soll. Um dieses Verhalten zu ändern, muss die Eigenschaft -@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden. -" - - texidoc = " -In accordance with standard typesetting rules, a natural sign is -printed before a sharp or flat if a previous accidental on the same -note needs to be canceled. To change this behavior, set the -@code{extraNatural} property to \"false\" in the @code{Staff} context. - - - -" - doctitle = "Preventing extra naturals from being automatically added" -} % begin verbatim - -\relative c'' { - aeses4 aes ais a - \set Staff.extraNatural = ##f - aeses4 aes ais a -} - diff --git a/input/lsr/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly b/input/lsr/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly deleted file mode 100644 index 930878d8bf..0000000000 --- a/input/lsr/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly +++ /dev/null @@ -1,47 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches" - -doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura" -texidoces = " -Cuando cambia la armadura de la tonalidad, se imprimen becuadros -automáticamente para cancelar las alteraciones de las armaduras -anteriores. Esto se puede evitar estableciendo al valor \"falso\" la -propiedad @code{printKeyCancellation} del contexto @code{Staff}. - -" - -doctitlede = "Auflösungzeichen nicht setzen, wenn die Tonart wechselt" - -texidocde = " -Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben, -um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann -verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft -im @code{Staff}-Kontext auf \"false\" gesetzt wird. -" - - texidoc = " -When the key signature changes, natural signs are automatically printed -to cancel any accidentals from previous key signatures. This may be -prevented by setting to \"false\" the @code{printKeyCancellation} -property in the @code{Staff} context. - -" - doctitle = "Preventing natural signs from being printed when the key signature changes" -} % begin verbatim - -\relative c' { - \key d \major - a4 b cis d - \key g \minor - a4 bes c d - \set Staff.printKeyCancellation = ##f - \key d \major - a4 b cis d - \key g \minor - a4 bes c d -} - diff --git a/input/lsr/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/input/lsr/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly deleted file mode 100644 index 5974038965..0000000000 --- a/input/lsr/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats, tweaks-and-overrides" - - texidoces = " -Se puede imprimir una línea divisoria de la forma @code{|:} al -principio de la pieza, sobreescribiendo la propiedad correspondiente: - -" - doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza" - - texidoc = " -A @code{|:} bar line can be printed at the beginning of a piece, by -overriding the relevant property: - -" - doctitle = "Printing a repeat sign at the beginning of a piece" -} % begin verbatim - -\relative c'' { - \once \override Score.BreakAlignment #'break-align-orders = - #(make-vector 3 '(instrument-name - left-edge - ambitus - span-bar - breathing-sign - clef - key-signature - time-signature - staff-bar - custos - span-bar)) - \bar "|:" - c1 - d1 - d4 e f g -} - diff --git a/input/lsr/printing-bar-numbers-at-regular-intervals.ly b/input/lsr/printing-bar-numbers-at-regular-intervals.ly deleted file mode 100644 index 0e1548f0b6..0000000000 --- a/input/lsr/printing-bar-numbers-at-regular-intervals.ly +++ /dev/null @@ -1,28 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -Bar numbers can be printed at regular intervals by setting the property -@code{barNumberVisibility}. Here the bar numbers are printed every two -measures except at the end of the line. - -" - doctitle = "Printing bar numbers at regular intervals" -} % begin verbatim - -\relative c' { - \override Score.BarNumber #'break-visibility = #'#(#f #t #t) - \set Score.currentBarNumber = #11 - % Permit first bar number to be printed - \bar "" - % Print a bar number every second measure - \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) - c1 | c | c | c | c - \break - c1 | c | c | c | c -} - diff --git a/input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly b/input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly deleted file mode 100644 index 442207f015..0000000000 --- a/input/lsr/printing-bar-numbers-inside-boxes-or-circles.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -Bar numbers can also be printed inside boxes or circles. - -" - doctitle = "Printing bar numbers inside boxes or circles" -} % begin verbatim - -\relative c' { - % Prevent bar numbers at the end of a line and permit them elsewhere - \override Score.BarNumber #'break-visibility = #end-of-line-invisible - \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4) - - % Increase the size of the bar number by 2 - \override Score.BarNumber #'font-size = #2 - - % Draw a box round the following bar number(s) - \override Score.BarNumber #'stencil - = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) - \repeat unfold 5 { c1 } - - % Draw a circle round the following bar number(s) - \override Score.BarNumber #'stencil - = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) - \repeat unfold 4 { c1 } \bar "|." -} - diff --git a/input/lsr/printing-hairpins-using-al-niente-notation.ly b/input/lsr/printing-hairpins-using-al-niente-notation.ly deleted file mode 100644 index e02f2ceb5e..0000000000 --- a/input/lsr/printing-hairpins-using-al-niente-notation.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Se pueden imprimir reguladores con un círculo en la punta -(notación «al niente») estableciendo la propiedad -@code{circled-tip} del objeto @code{Hairpin} al valor @code{#t}. - -" - doctitlees = "Impresión de reguladores utilizando la notación «al niente»" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " - Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze - notiert werden (al niente = bis zum Nichts), indem die -@code{circled-tip}-Eigenschaft des @code{Hairpin}-Objekts auf -@code{#t} gesetzt wird. - -" - doctitlede = "Crescendo Klammern al niente schreiben" - - texidoc = " -Hairpins may be printed with a circled tip (al niente notation) by -setting the @code{circled-tip} property of the @code{Hairpin} object to -@code{#t}. - -" - doctitle = "Printing hairpins using al niente notation" -} % begin verbatim - -\relative c'' { - \override Hairpin #'circled-tip = ##t - c2\< c\! - c4\> c\< c2\! -} - diff --git a/input/lsr/printing-marks-at-the-end-of-a-line-or-a-score.ly b/input/lsr/printing-marks-at-the-end-of-a-line-or-a-score.ly deleted file mode 100644 index c07d0ba287..0000000000 --- a/input/lsr/printing-marks-at-the-end-of-a-line-or-a-score.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text" - - texidoces = " -Las marcas se pueden imprimir al final de la línea actual, en vez de -al comienzo de la línea siguiente. Esto es útil principalmente cuando -se tiene que añadir una marca al final de la partitura (donde no hay -línea siguiente). - -En tales casos, el extremo derecho de la marca se tiene que alinear -con la última línea divisoria, como muestra la segunda línea de este -ejemplo. - -" - doctitlees = "Imprimir marcas al final de la línea o de la partitura" - - texidoc = " -Marks can be printed at the end of the current line, instead of the -beginning of the following line. This is particularly useful when a -mark has to be added at the end of a score -- when there is no next -line. - -In such cases, the right end of the mark has to be aligned with the -final bar line, as demonstrated on the second line of this example. - -" - doctitle = "Printing marks at the end of a line or a score" -} % begin verbatim - -\relative c'' { - \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible - g2 c - d,2 a' - \mark \default - \break - g2 b, - c1 \bar "||" - \override Score.RehearsalMark #'self-alignment-X = #RIGHT - \mark "D.C. al Fine" -} - diff --git a/input/lsr/printing-marks-on-every-staff.ly b/input/lsr/printing-marks-on-every-staff.ly deleted file mode 100644 index c9467820b2..0000000000 --- a/input/lsr/printing-marks-on-every-staff.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text" - - texidoces = " -Aunque normalmente las marcas de texto sólo se imprimen sobre el -pentagrama superior, también se pueden imprimir en otro pentagrama -cualquiera. - -" - doctitlees = "Imprimir marcas en cualquier pentagrama" - - texidoc = " -Although text marks are normally only printed above the topmost staff, -they may also be printed on every staff. - -" - doctitle = "Printing marks on every staff" -} % begin verbatim - -\score { - << - \new Staff { c''1 \mark "molto" c'' } - \new Staff { c'1 \mark "molto" c' } - >> - \layout { - \context { - \Score - \remove "Mark_engraver" - \remove "Staff_collecting_engraver" - } - \context { - \Staff - \consists "Mark_engraver" - \consists "Staff_collecting_engraver" - } - } -} - diff --git a/input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly b/input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly deleted file mode 100644 index bbd068ccd8..0000000000 --- a/input/lsr/printing-metronome-and-rehearsal-marks-below-the-staff.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, expressive-marks, staff-notation, tweaks-and-overrides" - - texidoces = " -De forma predeterminada, las indicaciones metronómicas y las -letras de ensayo se imprimen encima del pentagrama. Para -colocarlas debajo del pentagrama, simplemente ajustamos -adecuadamente las propiedades @code{side-axis} y @code{direction} -de @code{MetronomeMark} o de @code{RehearsalMark}. - -" - - doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama" - - texidoc = " -By default, metronome and rehearsal marks are printed above the staff. -To place them below the staff simply set the @code{direction} property -of @code{MetronomeMark} or @code{RehearsalMark} appropriately. - -" - doctitle = "Printing metronome and rehearsal marks below the staff" -} % begin verbatim - -\layout { ragged-right = ##f } - -{ - % Metronome marks below the staff - \override Score.MetronomeMark #'direction = #DOWN - \tempo 8. = 120 - c''1 - - % Rehearsal marks below the staff - \override Score.RehearsalMark #'direction = #DOWN - \mark \default - c''1 -} - diff --git a/input/lsr/printing-music-with-different-time-signatures.ly b/input/lsr/printing-music-with-different-time-signatures.ly deleted file mode 100644 index f54a7b9837..0000000000 --- a/input/lsr/printing-music-with-different-time-signatures.ly +++ /dev/null @@ -1,145 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, percussion" - - texidoc = " -In the following snippet, two parts have a completely different time -signature, yet remain synchronized. The bar lines can no longer be -printed at the @code{Score} level; to allow independent bar lines in -each part, the @code{Default_barline_engraver} and -@code{Timing_translator} are moved from the @code{Score} context to the -@code{Staff} context. - -" - doctitle = "Printing music with different time signatures" -} % begin verbatim - -\paper { - indent = #0 - ragged-right = ##t -} - -global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } } - -\layout { - \context { - \Score - \remove "Timing_translator" - \remove "Time_signature_engraver" - \remove "Default_bar_line_engraver" - \override SpacingSpanner #'uniform-stretching = ##t - \override SpacingSpanner #'strict-note-spacing = ##t - proportionalNotationDuration = #(ly:make-moment 1 64) - } - \context { - \Staff - \consists "Timing_translator" - \consists "Default_bar_line_engraver" - \consists "Time_signature_engraver" - } - \context { - \Voice - \remove "Forbid_line_break_engraver" - tupletFullLength = ##t - } -} - -Bassklarinette = \new Staff << - \global { - \bar "|" - \clef treble - \time 3/8 - d''4. - - \bar "|" - \time 3/4 - r8 des''2( c''8) - - \bar "|" - \time 7/8 - r4. ees''2 ~ - - \bar "|" - \time 2/4 - \tupletUp - \times 2/3 { ees''4 r4 d''4 ~ } - - \bar "|" - \time 3/8 - \tupletUp - \times 3/4 { d''4 r4 } - - \bar "|" - \time 2/4 - e''2 - - \bar "|" - \time 3/8 - es''4. - - \bar "|" - \time 3/4 - r8 d''2 r8 - \bar "|" - } ->> - -Perkussion = \new StaffGroup << - \new Staff << - \global { - \bar "|" - \clef percussion - \time 3/4 - r4 c'2 ~ - - \bar "|" - c'2. - - \bar "|" - R2. - - \bar "|" - r2 g'4 ~ - - \bar "|" - g'2. ~ - - \bar "|" - g'2. - } - >> - \new Staff << - \global { - \bar "|" - \clef percussion - \time 3/4 - R2. - - \bar "|" - g'2. ~ - - \bar "|" - g'2. - - \bar "|" - r4 g'2 ~ - - \bar "|" - g'2 r4 - - \bar "|" - g'2. - } - >> ->> - -\score { - << - \Bassklarinette - \Perkussion - >> -} - diff --git a/input/lsr/printing-text-from-right-to-left.ly b/input/lsr/printing-text-from-right-to-left.ly deleted file mode 100644 index 275406dea6..0000000000 --- a/input/lsr/printing-text-from-right-to-left.ly +++ /dev/null @@ -1,25 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "editorial-annotations, text, world-music" - - texidoc = " -It is possible to print text from right to left in a markup object, as -demonstrated here. - -" - doctitle = "Printing text from right to left" -} % begin verbatim - -{ - b1^\markup { - \line { i n g i r u m i m u s n o c t e } - } - f'_\markup { - \override #'(text-direction . -1) - \line { i n g i r u m i m u s n o c t e } - } -} - diff --git a/input/lsr/printing-the-bar-number-for-the-first-measure.ly b/input/lsr/printing-the-bar-number-for-the-first-measure.ly deleted file mode 100644 index 6d693668bf..0000000000 --- a/input/lsr/printing-the-bar-number-for-the-first-measure.ly +++ /dev/null @@ -1,24 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -By default, the first bar number in a score is suppressed if it is less -than or equal to `1'. By setting @code{barNumberVisibility} to -@code{all-bar-numbers-visible}, any bar number can be printed for the -first measure and all subsequent measures. Note that an empty bar line -must be inserted before the first note for this to work. - -" - doctitle = "Printing the bar number for the first measure" -} % begin verbatim - -\relative c' { - \set Score.barNumberVisibility = #all-bar-numbers-visible - \bar "" - c1 d e f \break - g1 e d c -} diff --git a/input/lsr/proportional-strict-notespacing.ly b/input/lsr/proportional-strict-notespacing.ly deleted file mode 100644 index f9d7e6bead..0000000000 --- a/input/lsr/proportional-strict-notespacing.ly +++ /dev/null @@ -1,29 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "tweaks-and-overrides, spacing" - - texidoc = " -If @code{strict-note-spacing} is set spacing of notes is not influenced -by bars or clefs within a system. Rather, they are placed just before -the note that occurs at the same time. This may cause collisions. - -" - doctitle = "Proportional strict notespacing" -} % begin verbatim - -\relative c'' << - \override Score.SpacingSpanner #'strict-note-spacing = ##t - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - \new Staff { - c8[ c \clef alto c c \grace { d16 } c8 c] c4 - c2 \grace { c16[ c16] } c2 - } - \new Staff { - c2 \times 2/3 { c8 \clef bass cis,, c } c4 - c1 - } ->> - diff --git a/input/lsr/quoting-another-voice-with-transposition.ly b/input/lsr/quoting-another-voice-with-transposition.ly deleted file mode 100644 index 934db073ca..0000000000 --- a/input/lsr/quoting-another-voice-with-transposition.ly +++ /dev/null @@ -1,56 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, staff-notation" - - texidoces = " -Los pasajes citados tienen en cuenta la transposición de la fuente -tanto como la del destino. En este ejemplo, todos los -instrumentos interpreta una nota con el sonido del Do central; el -destino de un instrumento transpositor en Fa. La parte de destino -se puede transponer utilizando @code{\\transpose}. En este caso -se transportan todas las notas (incluidas las citadas). - -" - -doctitlees = "Citar otra voz con transposición" - texidoc = " -Quotations take into account the transposition of both source and -target. In this example, all instruments play sounding middle C; the -target is an instrument in F. The target part may be transposed using -@code{\\transpose}. In this case, all the pitches (including the -quoted ones) are transposed. - -" - doctitle = "Quoting another voice with transposition" -} % begin verbatim - -\addQuote clarinet { - \transposition bes - \repeat unfold 8 { d'16 d' d'8 } -} - -\addQuote sax { - \transposition es' - \repeat unfold 16 { a8 } -} - -quoteTest = { - % french horn - \transposition f - g'4 - << \quoteDuring #"clarinet" { \skip 4 } s4^"clar." >> - << \quoteDuring #"sax" { \skip 4 } s4^"sax." >> - g'4 -} - -{ - \set Staff.instrumentName = - \markup { - \center-column { Horn \line { in F } } - } - \quoteTest - \transpose c' d' << \quoteTest s4_"up a tone" >> -} diff --git a/input/lsr/quoting-another-voice.ly b/input/lsr/quoting-another-voice.ly deleted file mode 100644 index 901ee1779c..0000000000 --- a/input/lsr/quoting-another-voice.ly +++ /dev/null @@ -1,63 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation" - - texidoces = " -La propiedad @code{quotedEventTypes} determina los tipos de -eventos musicales que resultan citados. El valor predeterminado -es @code{(note-event rest-event)}, que significa que sólo aparecen -en la expresión @code{\\quoteDuring} las notas y los silencios. -En el ejemplo siguiente, el silencio de semicorchea no aparece en -el fragmento citado porque @code{rest-event} no está dentro de los -@code{quotedEventTypes}. - -" - doctitlees = "Citar otra voz" - texidoc = " -The @code{quotedEventTypes} property determines the music event types -that are quoted. The default value is @code{(note-event rest-event)}, -which means that only notes and rests of the quoted voice appear in the -@code{\\quoteDuring} expression. In the following example, a 16th rest -is not quoted since @code{rest-event} is not in -@code{quotedEventTypes}. - -" - doctitle = "Quoting another voice" -} % begin verbatim - -quoteMe = \relative c' { - fis4 r16 a8.-> b4\ff c -} -\addQuote quoteMe \quoteMe - -original = \relative c'' { - c8 d s2 - \once \override NoteColumn #'ignore-collision = ##t - es8 gis8 -} - -<< - \new Staff { - \set Staff.instrumentName = #"quoteMe" - \quoteMe - } - \new Staff { - \set Staff.instrumentName = #"orig" - \original - } - \new Staff \relative c'' << - \set Staff.instrumentName = #"orig+quote" - \set Staff.quotedEventTypes = - #'(note-event articulation-event) - \original - \new Voice { - s4 - \set fontSize = #-4 - \override Stem #'length-fraction = #(magstep -4) - \quoteDuring #"quoteMe" { \skip 2. } - } - >> ->> diff --git a/input/lsr/redefining-grace-note-global-defaults.ly b/input/lsr/redefining-grace-note-global-defaults.ly deleted file mode 100644 index fdf6fa2ee2..0000000000 --- a/input/lsr/redefining-grace-note-global-defaults.ly +++ /dev/null @@ -1,35 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -The global defaults for grace notes are stored in the identifiers -@code{startGraceMusic}, @code{stopGraceMusic}, -@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic}, -@code{startAppoggiaturaMusic} and @code{stopAppoggiaturaMusic}, which -are defined in the file @code{ly/grace-init.ly}. By redefining them -other effects may be obtained. - -" - doctitle = "Redefining grace note global defaults" -} % begin verbatim - -startAcciaccaturaMusic = { - s1*0( - \override Stem #'stroke-style = #"grace" - \slurDashed -} - -stopAcciaccaturaMusic = { - \revert Stem #'stroke-style - \slurSolid - s1*0) -} - -\relative c'' { - \acciaccatura d8 c1 -} - diff --git a/input/lsr/removing-bar-numbers-from-a-score.ly b/input/lsr/removing-bar-numbers-from-a-score.ly deleted file mode 100644 index a86a1f645f..0000000000 --- a/input/lsr/removing-bar-numbers-from-a-score.ly +++ /dev/null @@ -1,27 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, contexts-and-engravers" - - texidoc = " -Bar numbers can be removed entirely by removing the -@code{Bar_number_engraver} from the @code{Score} context. - -" - doctitle = "Removing bar numbers from a score" -} % begin verbatim - -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} - -\relative c'' { - c4 c c c \break - c4 c c c -} - diff --git a/input/lsr/removing-the-first-empty-line.ly b/input/lsr/removing-the-first-empty-line.ly deleted file mode 100644 index 6553757568..0000000000 --- a/input/lsr/removing-the-first-empty-line.ly +++ /dev/null @@ -1,70 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides, breaks" - - texidoces = " -El primer pentagrama vacío también se puede suprimir de la -partitura estableciendo la propiedad @code{remove-first} de -@code{VerticalAxisGroup}. Esto se puede hacer globalmente dentro -del bloque @code{\\layout}, o localmente dentro del pentagrama -concreto que se quiere suprimir. En este último caso, tenemos que -especificar el contexto (@code{Staff} se aplica sólo al pentagrama -actual) delante de la propiedad. - -El pentagrama inferior del segundo grupo no se elimina, porque el -ajuste sólo se aplica al pentagrama concreto dentro del que se -escribe. - -" - doctitlees = "Quitar la primera línea vacía" - - texidoc = " -The first empty staff can also be removed from the score by setting the -@code{VerticalAxisGroup} property @code{remove-first}. This can be done -globally inside the @code{\\layout} block, or locally inside the -specific staff that should be removed. In the latter case, you have to -specify the context (@code{Staff} applies only to the current staff) in -front of the property. - -The lower staff of the second staff group is not removed, because the -setting applies only to the specific staff inside of which it is -written. - -" - doctitle = "Removing the first empty line" -} % begin verbatim - -\layout { - \context { - \RemoveEmptyStaffContext - % To use the setting globally, uncomment the following line: - % \override VerticalAxisGroup #'remove-first = ##t - } -} -\new StaffGroup << - \new Staff \relative c' { - e4 f g a \break - c1 - } - \new Staff { - % To use the setting globally, comment this line, - % uncomment the line in the \layout block above - \override Staff.VerticalAxisGroup #'remove-first = ##t - R1 \break - R - } ->> -\new StaffGroup << - \new Staff \relative c' { - e4 f g a \break - c1 - } - \new Staff { - R1 \break - R - } ->> - diff --git a/input/lsr/rest-styles.ly b/input/lsr/rest-styles.ly deleted file mode 100644 index c8967608ac..0000000000 --- a/input/lsr/rest-styles.ly +++ /dev/null @@ -1,57 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, ancient-notation, tweaks-and-overrides" - - doctitlees = "Estilos de silencios" - texidoces = " -Los silencios se pueden imprimir en distintos estilos. -" - - doctitlede = "Pausenstile" - texidocde = " -Pausen können in verschiedenen Stilen dargestellt werden. -" - - texidoc = " -Rests may be used in various styles. - - - - -" - doctitle = "Rest styles" -} % begin verbatim - -\layout { - indent = 0.0 - \context { - \Staff - \remove "Time_signature_engraver" - } -} - -\new Staff \relative c { - \cadenzaOn - \override Staff.Rest #'style = #'mensural - r\maxima^\markup \typewriter { mensural } - r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 - \bar "" - - \override Staff.Rest #'style = #'neomensural - r\maxima^\markup \typewriter { neomensural } - r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 - \bar "" - - \override Staff.Rest #'style = #'classical - r\maxima^\markup \typewriter { classical } - r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 - \bar "" - - \override Staff.Rest #'style = #'default - r\maxima^\markup \typewriter { default } - r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 -} - diff --git a/input/lsr/reverting-default-beam-endings.ly b/input/lsr/reverting-default-beam-endings.ly deleted file mode 100644 index c094bf2afe..0000000000 --- a/input/lsr/reverting-default-beam-endings.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} -en 12/8, en primer lugar tenemos que sobreescribir los finales de -barra predeterminados en 12/8, y después preparar los finales de -barra nuevos: - -" - doctitlees = "Alteración de los finales de barra predeterminados" - - texidoc = " -To typeset beams grouped @code{3-4-3-2} in 12/8 it is necessary first -to override the default beam endings in 12/8, and then to set up the -new beaming endings: - -" - doctitle = "Reverting default beam endings" -} % begin verbatim - -\relative c'' { - \time 12/8 - - % Default beaming - a8 a a a a a a a a a a a - - % Revert default values in scm/auto-beam.scm for 12/8 time - #(revert-auto-beam-setting '(end * * 12 8) 3 8) - #(revert-auto-beam-setting '(end * * 12 8) 3 4) - #(revert-auto-beam-setting '(end * * 12 8) 9 8) - a8 a a a a a a a a a a a - - % Set new values for beam endings - #(override-auto-beam-setting '(end * * 12 8) 3 8) - #(override-auto-beam-setting '(end * * 12 8) 7 8) - #(override-auto-beam-setting '(end * * 12 8) 10 8) - a8 a a a a a a a a a a a -} - diff --git a/input/lsr/rhythmic-slashes.ly b/input/lsr/rhythmic-slashes.ly deleted file mode 100644 index 1af0472f16..0000000000 --- a/input/lsr/rhythmic-slashes.ly +++ /dev/null @@ -1,51 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -In \"simple\" lead-sheets, sometimes no actual notes are written, -instead only \"rhythmic patterns\" and chords above the measures are -notated giving the structure of a song. Such a feature is for example -useful while creating/transcribing the structure of a song and also -when sharing lead sheets with guitarists or jazz musicians. The -standard support for this using @code{\\repeat percent} is unsuitable -here since the first beat has to be an ordinary note or rest. This -example shows two solutions to this problem, by redefining ordinary -rests to be printed as slashes. (If the duration of each beat is not a -quarter note, replace the @code{r4} in the definitions with a rest of -the appropriate duration). - -" - doctitle = "Rhythmic slashes" -} % begin verbatim - -% Macro to print single slash -rs = { - \once \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash - \once \override Rest #'thickness = #0.48 - \once \override Rest #'slope = #1.7 - r4 -} - -% Function to print a specified number of slashes -comp = #(define-music-function (parser location count) ( integer?) - #{ - \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash - \override Rest #'thickness = #0.48 - \override Rest #'slope = #1.7 - \repeat unfold $count { r4 } - \revert Rest #'stencil - #} -) - -\score { - \relative c' { - c4 d e f | - \rs \rs \rs \rs | - \comp #4 | - } -} - diff --git a/input/lsr/score-for-diatonic-accordion.ly b/input/lsr/score-for-diatonic-accordion.ly deleted file mode 100644 index 6aaa748634..0000000000 --- a/input/lsr/score-for-diatonic-accordion.ly +++ /dev/null @@ -1,234 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "template" - - texidoc = " -A template to write a score for a diatonic accordion. - -- There is a horizontal staff indicating if the accordion must be -pushed (thick line) or pulled (thin line) - -- There is a small rhythmic staff with lyrics that describes the bass -buttons to press. The bar lines are made from gridlines - -- The tabulator staff for diatonic accordions shows the geographic -position of the buttons and not (as for every other instrument) the -pitch of the notes; the keys on the melody-side of the accordion are -placed in three columns and about 12 rows - - -In the tabulator staff notation the outermost column is described with -notes between lines, the innermost column is described with notes -between lines and a cross as accidental, and the middle column is -described with notes on a line, whereby the row in the middle is -represented on the middle line in the staff. - - -Some words to transpose piano notes to the diatonic accordion: - - -1. Every diatonic accordion is built for some keys only (for example, -for the keys of C major and F major), so it is important to transpose a -piano melody to match one of these keys. Transpose the source code, not -only the output because this code is required later on to translate it -once more to the tabulator staff. This can be done with the command -@code{displayLilyMusic}. - - -2. You have to alternate the push- and pull-direction of the accordion -regularly. If the player has a too long part to pull the accordion gets -broken. On the other hand, some harmonies are only available in one -direction. Considering this, decide which parts of the melody are the -push-parts and which the pull-parts. - - -3. For each pull- or push-part translate the piano notes to the -according tabulature representation. - - -This snippet comes with a useful optional macro for the jEdit text -editor. - -" - doctitle = "Score for diatonic accordion" -} % begin verbatim - -verse = \lyricmode { Wie gross bist du! Wie gross bist du! } - -harmonies = \new ChordNames \chordmode { - \germanChords - \set chordChanges = ##t - bes8 bes8 bes8 - es2 f - bes1 -} - -NoStem = \override Stem #'transparent = ##t -NoNoteHead = \override NoteHead #'transparent = ##t -ZeroBeam = \override Beam #'positions = #'(0 . 0) - -staffTabLine = \new Staff \with { - \remove "Time_signature_engraver" - \remove "Clef_engraver" -} { - \override Staff.StaffSymbol #'line-positions = #'(0) -% Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline - \set Staff.midiInstrument = #"choir aahs" - \key c \major - \relative c'' - { - % disable the following line to see the the noteheads while writing the song - \NoNoteHead - \override NoteHead #'no-ledgers = ##t - - % The beam between 8th-notes is used to draw the push-line - %How to fast write the push-lines: - % 1. write repeatedly 'c c c c c c c c |' for the whole length of the song - % 2. uncomment the line \NoNoteHead - % 3. compile - % 4. Mark the positions on which push/pull changes. - % In the score-picture click on the position the push- or pull-part starts - % (on the noteHead, the cursor will change to a hand-icon). - % The cursor in the source code will jump just at this position. - % a) If a push-part starts there, replace the 'c' by an 'e[' - % b) If a pull-part starts there, replace the 'c' by an 's' - % 5. Switch into 'overwrite-mode' by pressing the 'ins' key. - % 6. For the pull-parts overwrite the 'c' with 's' - % 7. For every push-part replace the last 'c' with 'e]' - % 8. Switch into 'insert-mode' again - % 9. At last it should look lik e.g. (s s e[ c | c c c c c c c c | c c c c c c e] s s) - % 10. re-enable the line \NoNoteHead - \autoBeamOff - \ZeroBeam - s8 s s e[ c c c c c c e] | s s s s s - } -} - -%{ -%} - -% Accordion melody in tabulator score -% 1. Place a copy of the piano melody below -% 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made -% 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then change the second line using the transformation paper -% or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' -% Tips: -% - In jEdit Search & Replace mark the Option 'Keep Dialog' - -AccordionTabTwoCBesDur = { - % pull 1 - %8 8 8 | -8 8 8 | - % push 2 - %4 | -4 | - % pull 3 -% 2 r8 } - 2 r8 } - - AccordionTab= { \dynamicUp -% 1. Place a copy of the piano melody above -% 2. Separate piano melody into pull- and push-parts according to the staffTabLine you've already made -% 3. For each line: Double the line. Remark the 1st one (Keeps unchanged as reference) and then -% change the second line using the transformation paper -% Tips: -% - In jEdit Search & Replace mark the Option 'Keep Dialog' -% - -\AccordionTabTwoCBesDur - } - - - - \layout { - \context { - \Staff - \consists "Grid_point_engraver" - - gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar - - % The following line has to be adjusted O-F-T-E-N. - \override GridPoint #'Y-extent = #'(-2 . -21) - } - \context { - \ChoirStaff - \remove "System_start_delimiter_engraver" - } -} - -staffVoice = \new Staff=astaffvoice { - \time 4/4 - \set Staff.instrumentName="Voice" - \set Staff.midiInstrument="voice oohs" - \key bes \major - \partial 8*3 - \clef treble - { - \context Voice = "melodyVoi" - { 8 8 8 | 4 | 2 r8 } - \bar "|." - } -} - -staffAccordionMel = \new Staff \with { \remove "Clef_engraver" } { - #(set-accidental-style 'forget) %Set the accidentals (Vorzeichen) for each note, - %do not remember them for the rest of the measure. - \time 4/4 - \set Staff.instrumentName="Accordion" - \set Staff.midiInstrument="voice oohs" - \key c \major - \clef treble - { \AccordionTab \bar "|." } -} - - AltOn = #(define-music-function (parser location mag) (number?) - #{ \override Stem #'length = #$(* 7.0 mag) - \override NoteHead #'font-size = - #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) - - AltOff = { - \revert Stem #'length - \revert NoteHead #'font-size - } - -BassRhytm = {s4 s8 | c2 c2 | c2 s8 } -LyricBassRhythmI= \lyricmode { c b | c } - -staffBassRhytm = \new Staff=staffbass \with { \remove "Clef_engraver" } { - % This is not a RhythmicStaff because it must be possible to append lyrics. - - \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y - \override Staff.StaffSymbol #'line-positions = #'( 0 ) - % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid - % Search for 'grid' in this page to find all related functions - \time 4/4 - { - \context Voice = "VoiceBassRhytm" - \stemDown \AltOn #0.6 - \relative c'' - { - \BassRhytm - } - \AltOff - \bar "|." - } -} - -\new Score -\with { - \consists "Grid_line_span_engraver" %The vertical line (simulating a bar-line) in the staffBassRhytm is a gridline -} -\new ChoirStaff - << - \harmonies - \staffVoice - \context Lyrics = "lmelodyVoi" \with {alignBelowContext=astaffvoice} { \lyricsto "melodyVoi" \verse } - \staffAccordionMel - \staffTabLine - \staffBassRhytm - \context Lyrics = "lBassRhytmAboveI" \with {alignAboveContext=staffbass} \lyricsto VoiceBassRhytm \LyricBassRhythmI - >> -%} - diff --git a/input/lsr/setting-hairpin-behavior-at-bar-lines.ly b/input/lsr/setting-hairpin-behavior-at-bar-lines.ly deleted file mode 100644 index 550ea28f62..0000000000 --- a/input/lsr/setting-hairpin-behavior-at-bar-lines.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, tweaks-and-overrides" - - 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 -inmediatamente precedente. Se puede controlar este comportamiento -sobreescribiendo la propiedad @code{to-barline}. - -" - doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note -eines Taktes ist, wird die Klammer an der vorhergehenden Tatklinie -beendet. Dieses Verhalten kann auch mit der Eigenschaft -@code{'to-barline} geändert werden: -" - doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen" - - texidoc = " -If the note which ends a hairpin falls on a downbeat, the hairpin stops -at the bar line immediately preceding. This behavior can be controlled -by overriding the @code{'to-barline} property. - -" - doctitle = "Setting hairpin behavior at bar lines" -} % begin verbatim - -\relative c'' { - e4\< e2. - e1\! - \override Hairpin #'to-barline = ##f - e4\< e2. - e1\! -} diff --git a/input/lsr/setting-the-minimum-length-of-hairpins.ly b/input/lsr/setting-the-minimum-length-of-hairpins.ly deleted file mode 100644 index fdf517146c..0000000000 --- a/input/lsr/setting-the-minimum-length-of-hairpins.ly +++ /dev/null @@ -1,38 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Si los reguladores son demasiado cortos, se pueden alargar -modificando la propiedad @code{minimum-length} del objeto -@code{Hairpin}. - -" - doctitlees = "Ajustar la longitud mínima de los reguladores" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem -die @code{minimum-length}-Eigenschaft des @code{Hairpin}-Objektes -verändert wird. - -" - doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen" - - texidoc = " -If hairpins are too short, they can be lengthened by modifying the -@code{minimum-length} property of the @code{Hairpin} object. - -" - doctitle = "Setting the minimum length of hairpins" -} % begin verbatim - -\relative c'' { - c4\< c\! d\> e\! - \override Hairpin #'minimum-length = #5 - << f1 { s4 s\< s\> s\! } >> -} - diff --git a/input/lsr/shortening-volta-brackets.ly b/input/lsr/shortening-volta-brackets.ly deleted file mode 100644 index 45ac8ede0b..0000000000 --- a/input/lsr/shortening-volta-brackets.ly +++ /dev/null @@ -1,41 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats" - - texidoces = " -De forma predeterminada, los corchetes de primera y segunda vez se -trazan encima de los finales alternativos completos, pero es posible -acortartlos estableciendo un valor cierto para -@code{voltaSpannerDuration}. En el ejemplo siguiente, el corchete -sólo dura un compás, que corresponde a una duración de 3/4. - -" - doctitlees = "Shortening volta brackets" - - texidoc = " -By default, the volta brackets will be drawn over all of the -alternative music, but it is possible to shorten them by setting -@code{voltaSpannerDuration}. In the next example, the bracket only -lasts one measure, which is a duration of 3/4. - -" - doctitle = "Shortening volta brackets" -} % begin verbatim - -\relative c'' { - \time 3/4 - c4 c c - \set Score.voltaSpannerDuration = #(ly:make-moment 3 4) - \repeat volta 5 { d4 d d } - \alternative { - { - e4 e e - f4 f f - } - { g4 g g } - } -} - diff --git a/input/lsr/showing-chords-at-changes.ly b/input/lsr/showing-chords-at-changes.ly deleted file mode 100644 index e46904628e..0000000000 --- a/input/lsr/showing-chords-at-changes.ly +++ /dev/null @@ -1,35 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoces = " -Se pueden imprimir los acordes exclusivamente al comienzo de las -líneas y cuando cambia el acorde. - -" - doctitlees = "Imprimir los acordes cuando se produce un cambio" - - texidoc = " -Chord names can be displayed only at the start of lines and when the -chord changes. - -" - doctitle = "Showing chords at changes" -} % begin verbatim - -harmonies = \chordmode { - c1:m c:m \break c:m c:m d -} -<< - \new ChordNames { - \set chordChanges = ##t - \harmonies - } - \new Staff { - \relative c' { \harmonies } - } ->> - diff --git a/input/lsr/simple-lead-sheet.ly b/input/lsr/simple-lead-sheet.ly deleted file mode 100644 index 5f6912ba7f..0000000000 --- a/input/lsr/simple-lead-sheet.ly +++ /dev/null @@ -1,30 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords" - - texidoces = " -Al juntar nombres de acorde en cifrado americano, melodía y letra, -obtenemos una hoja guía de acordes o «lead sheet»: - -" - doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" - - texidoc = " -When put together, chord names, a melody, and lyrics form a lead sheet: - -" - doctitle = "Simple lead sheet" -} % begin verbatim - -<< - \chords { c2 g:sus4 f e } - \relative c'' { - a4 e c8 e r4 - b2 c4( d) - } - \addlyrics { One day this shall be free __ } ->> - diff --git a/input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly b/input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly deleted file mode 100644 index 28acf942ea..0000000000 --- a/input/lsr/single-staff-template-with-notes,-lyrics,-and-chords.ly +++ /dev/null @@ -1,56 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music, chords, template" - - texidoces = " -Esta plantilla facilita la preparación de una canción con melodía, -letra y acordes. - -" - doctitlees = "Plantilla de pentagrama único con música, letra y acordes" - - texidocde = " -Mit diesem Beispiel können Sie einen Song mit Melodie, -Text und Akkorden schreiben. -" - - texidoc = " -This template allows the preparation of a song with melody, words, and -chords. - -" - doctitle = "Single staff template with notes, lyrics, and chords" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -harmonies = \chordmode { - a2 c -} - -\score { - << - \new ChordNames { - \set chordChanges = ##t - \harmonies - } - \new Voice = "one" { \autoBeamOff \melody } - \new Lyrics \lyricsto "one" \text - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly b/input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly deleted file mode 100644 index 9f9822ce03..0000000000 --- a/input/lsr/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly +++ /dev/null @@ -1,64 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music, chords, template" - - texidoces = " -Presentamos a continuación un ejemplo de plantilla para una hoja -guía de acordes con melodía, letra, acordes y diagramas de -trastes. -" - - doctitlees = "Plantilla para un pentagrama único con música, letra, acordes y trastes" - - texidoc = " -Here is a simple lead sheet template with melody, lyrics, chords and -fret diagrams. - -" - doctitle = "Single staff template with notes, lyrics, chords and frets" -} % begin verbatim - -verseI = \lyricmode { - \set stanza = #"1." - This is the first verse -} - -verseII = \lyricmode { - \set stanza = #"2." - This is the second verse. -} - -theChords = \chordmode { - % insert chords for chordnames and fretboards here - c2 g4 c -} - -staffMelody = \relative c' { - \key c \major - \clef treble - % Type notes for melody here - c4 d8 e f4 g - \bar "|." -} - -\score { - << - \context ChordNames { \theChords } - \context FretBoards { \theChords } - \new Staff { - \context Voice = "voiceMelody" { \staffMelody } - } - \new Lyrics = "lyricsI" { - \lyricsto "voiceMelody" \verseI - } - \new Lyrics = "lyricsII" { - \lyricsto "voiceMelody" \verseII - } - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-notes-and-chords.ly b/input/lsr/single-staff-template-with-notes-and-chords.ly deleted file mode 100644 index 69742408c5..0000000000 --- a/input/lsr/single-staff-template-with-notes-and-chords.ly +++ /dev/null @@ -1,54 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "chords, template" - - texidoces = " -¿Quiere preparar una hoja guía de acordes (o «lead sheet») con -melodía y acordes? ¡No busque más! - -" - -doctitlees = "Plantilla de pentagrama único con música y acordes" - - texidocde = " -Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist -das richtige Beispiel für Sie! -" - - texidoc = " -Want to prepare a lead sheet with a melody and chords? Look no further! - - -" - doctitle = "Single staff template with notes and chords" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - f4 e8[ c] d4 g - a2 ~ a -} - -harmonies = \chordmode { - c4:m f:min7 g:maj c:aug - d2:dim b:sus -} - -\score { - << - \new ChordNames { - \set chordChanges = ##t - \harmonies - } - \new Staff \melody - >> - \layout{ } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-notes-and-lyrics.ly b/input/lsr/single-staff-template-with-notes-and-lyrics.ly deleted file mode 100644 index 324c30fe5a..0000000000 --- a/input/lsr/single-staff-template-with-notes-and-lyrics.ly +++ /dev/null @@ -1,61 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music, template" - - 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 -el barrado automático, que es lo más frecuente en las partes vocales -antiguas. Para usar el barrado automático modifique o marque como un -comentario la línea correspondiente. - -" - doctitlees = "Plantilla de pentagrama único don notas y letra" - - texidocde = " -Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren -Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen -Sie es mit LilyPond. In dem Beispiel wird die automatische -Balkenverbindung ausgeschaltet (mit dem Befehl @code{\autoBeamOff}), -wie es für Vokalmusik üblich ist. -Wenn Sie die Balken wieder einschalten wollen, müssen Sie die -entsprechende Zeile entweder ändern oder auskommentieren. -" - - texidoc = " -This small template demonstrates a simple melody with lyrics. Cut and -paste, add notes, then words for the lyrics. This example turns off -automatic beaming, which is common for vocal parts. To use automatic -beaming, change or comment out the relevant line. - -" - doctitle = "Single staff template with notes and lyrics" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -text = \lyricmode { - Aaa Bee Cee Dee -} - -\score{ - << - \new Voice = "one" { - \autoBeamOff - \melody - } - \new Lyrics \lyricsto "one" \text - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/single-staff-template-with-only-notes.ly b/input/lsr/single-staff-template-with-only-notes.ly deleted file mode 100644 index 21844ecfdf..0000000000 --- a/input/lsr/single-staff-template-with-only-notes.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "template" - - 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 -un archivo, escriba las notas y ¡ya está! - -" - doctitlees = "Plantilla de un solo pentagrama, con notas únicamente" - - texidocde = " -Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein -Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen -Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben -eine vollständige Notationsdatei. -" - - texidoc = " -This very simple template gives you a staff with notes, suitable for a -solo instrument or a melodic fragment. Cut and paste this into a file, -add notes, and you're finished! - -" - doctitle = "Single staff template with only notes" -} % begin verbatim - -melody = \relative c' { - \clef treble - \key c \major - \time 4/4 - - a4 b c d -} - -\score { - \new Staff \melody - \layout { } - \midi { } -} - diff --git a/input/lsr/skips-in-lyric-mode-2.ly b/input/lsr/skips-in-lyric-mode-2.ly deleted file mode 100644 index 1c48689154..0000000000 --- a/input/lsr/skips-in-lyric-mode-2.ly +++ /dev/null @@ -1,21 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, vocal-music" - - texidoc = " -Although @code{s} skips cannot be used in @code{\\lyricmode} (it is -taken to be a literal \"s\", not a space), double quotes (@code{\"\"}) -or underscores (@code{_}) are available.So for example: - -" - doctitle = "Skips in lyric mode (2)" -} % begin verbatim - -<< - \relative c'' { a4 b c d } - \new Lyrics \lyricmode { a4 "" _ gap } ->> - diff --git a/input/lsr/skips-in-lyric-mode.ly b/input/lsr/skips-in-lyric-mode.ly deleted file mode 100644 index cfe80eab3b..0000000000 --- a/input/lsr/skips-in-lyric-mode.ly +++ /dev/null @@ -1,21 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, vocal-music" - - texidoc = " -The @code{s} syntax for skips is only available in note mode and chord -mode. In other situations, for example, when entering lyrics, using the -@code{\\skip} command is recommended. - -" - doctitle = "Skips in lyric mode" -} % begin verbatim - -<< - \relative { a'1 a } - \new Lyrics \lyricmode { \skip 1 bla1 } ->> - diff --git a/input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly b/input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly deleted file mode 100644 index 8c321d8499..0000000000 --- a/input/lsr/snap-pizzicato-markup-bartok-pizzicato.ly +++ /dev/null @@ -1,66 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, unfretted-strings" - - 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 -@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un -chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se -denota mediante una circunferencia con una línea vertical corta que parte -del centro de aquélla hacia fuera. Aunque Lilypond no tiene ninguna -instrucción predefinida para crear esta marca, es fácil hacer la definición -y colocarla directamente en el archivo de lilypond. -" - - doctitlede = "Bartók-Pizzicato" - texidocde = " -Das Bartók-Pizzicato @q{ist eine besondere Form des Pizzicato, bei dem der -Spieler die Saite auf das Griffbrett aufschlagen lässt, sodass zusätzlich -zum angeschlagenen Ton ein scharfes, knallendes Geräusch ertönt} -(Wikipedia). Es wird dargestellt als kleiner Kreis mit einer vertikalen -Linie, die vom Kreiszentrum aus nach oben weist und ein Stück außerhalb des -Kreises endet. Lilypond hat keinen eigenen Glyphen für dieses Symbol; es -ist aber einfach, direkt eine Definition in die Eingabedatei einzufügen. -" - - texidoc = " -A snap-pizzicato (also known as \"Bartok pizzicato\") is a \"strong -pizzicato where the string is plucked vertically by snapping and -rebounds off the fingerboard of the instrument\" (Wikipedia). It is -denoted by a cicle with a vertical line going from the center upwards -outside the circle. While Lilypond does not have a pre-defined command -to created this markup, it is easy to create a definition and place it -directly into the lilypond file. - -" - doctitle = "Snap-pizzicato markup (\"Bartok pizzicato\")" -} % begin verbatim - -#(define-markup-command (snappizz layout props) () - (interpret-markup layout props - (markup #:stencil - (ly:stencil-translate-axis - (ly:stencil-add - (make-circle-stencil 0.7 0.1 #f) - (ly:make-stencil - (list 'draw-line 0.1 0 0.1 0 1) - '(-0.1 . 0.1) '(0.1 . 1))) - 0.7 X)))) - -snapPizzicato = \markup \snappizz - -% now it can be used as \snappizzicato after the note/chord -% Note that a direction (-, ^ or _) is required. -\relative c' { - c4^\snapPizzicato - % This does NOT work: - %\snapPizzicato - -\snapPizzicato - ^\snapPizzicato - _\snapPizzicato -} - diff --git a/input/lsr/specifying-context-with-beatgrouping.ly b/input/lsr/specifying-context-with-beatgrouping.ly deleted file mode 100644 index 8e074d5aa1..0000000000 --- a/input/lsr/specifying-context-with-beatgrouping.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoces = " -Mediante la especificación del contexto, el efecto de -@code{beatGrouping} puede limitarse al contexto especificado, y -sobreescribirse los valores establecidos en contextos de niveles más -altos: - -" - doctitlees = "Especificar el contexto con beatGrouping" - - texidoc = " -By specifying the context, the effect of @code{beatGrouping} can be -limited to the context specified, and the values which may have been -set in higher-level contexts can be overridden. The @code{\\set} -commands must be placed after all @code{\\time} commands: - -" - doctitle = "Specifying context with beatGrouping" -} % begin verbatim - -\score { - \new Staff << - \time 7/8 - \new Voice { - \relative c'' { - \set Staff.beatGrouping = #'(2 3 2) - a8 a a a a a a - } - } - \new Voice { - \relative c' { - \voiceTwo - \set beatGrouping = #'(1 3 3) - f8 f f f f f f - } - } - >> -} diff --git a/input/lsr/staff-notation.snippet-list b/input/lsr/staff-notation.snippet-list deleted file mode 100644 index 5c9b6db9b4..0000000000 --- a/input/lsr/staff-notation.snippet-list +++ /dev/null @@ -1,28 +0,0 @@ -adding-ambitus-per-voice.ly -adding-an-extra-staff-at-a-line-break.ly -adding-an-extra-staff.ly -changing-the-number-of-lines-in-a-staff.ly -changing-the-staff-size.ly -changing-the-tempo-without-a-metronome-mark.ly -creating-blank-staves.ly -creating-metronome-marks-in-markup-mode.ly -display-bracket-with-only-one-staff-in-a-system.ly -incipit.ly -inserting-score-fragments-above-a-staff,-as-markups.ly -letter-tablature-formatting.ly -making-some-staff-lines-thicker-than-the-others.ly -measure-counter.ly -mensurstriche-layout-bar-lines-between-the-staves.ly -modern-tab-text-clef.ly -nesting-staves.ly -non-traditional-key-signatures.ly -printing-metronome-and-rehearsal-marks-below-the-staff.ly -quoting-another-voice-with-transposition.ly -quoting-another-voice.ly -removing-the-first-empty-line.ly -tick-bar-lines.ly -time-signature-in-parentheses.ly -tweaking-clef-properties.ly -use-square-bracket-at-the-start-of-a-staff-group.ly -volta-below-chords.ly -volta-multi-staff.ly diff --git a/input/lsr/stand-alone-two-column-markup.ly b/input/lsr/stand-alone-two-column-markup.ly deleted file mode 100644 index ae1eeba66a..0000000000 --- a/input/lsr/stand-alone-two-column-markup.ly +++ /dev/null @@ -1,45 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text" - - texidoces = " -Los textos independientes se pueden disponer en varias columnas -utilizando instrucciones @code{\\markup}: - -" - doctitlees = "Elemento de marcado de texto independiente en dos columnas" - - texidoc = " -Stand-alone text may be arranged in several columns using -@code{\\markup} commands: - -" - doctitle = "Stand-alone two-column markup" -} % begin verbatim - -\markup { - \fill-line { - \hspace #1 - \column { - \line { O sacrum convivium } - \line { in quo Christus sumitur, } - \line { recolitur memoria passionis ejus, } - \line { mens impletur gratia, } - \line { futurae gloriae nobis pignus datur. } - \line { Amen. } - } - \hspace #2 - \column { - \line { \italic { O sacred feast } } - \line { \italic { in which Christ is received, } } - \line { \italic { the memory of His Passion is renewed, } } - \line { \italic { the mind is filled with grace, } } - \line { \italic { and a pledge of future glory is given to us. } } - \line { \italic { Amen. } } - } - \hspace #1 - } -} diff --git a/input/lsr/stem-and-beam-behavior-in-tablature.ly b/input/lsr/stem-and-beam-behavior-in-tablature.ly deleted file mode 100644 index 51ca6a01fa..0000000000 --- a/input/lsr/stem-and-beam-behavior-in-tablature.ly +++ /dev/null @@ -1,43 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "fretted-strings" - - 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 -poner horizontales, como se muestra en este ejemplo. - -" - doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -La direction des hampes se gère dans les tablatures tout comme en -notation traditionnelle. Les ligatures peuvvent être mises à l'horizontale -comme le montre cet exemple. - -" - doctitlefr = "Hampes et ligatures en mode tablature" - - texidoc = " -The direction of stems is controlled the same way in tablature as in -traditional notation. Beams can be made horizontal, as shown in this -example. - -" - doctitle = "Stem and beam behavior in tablature" -} % begin verbatim - -\new TabStaff { - \relative c { - g16 b d g b d g b - \stemDown - \override Beam #'damping = #+inf.0 - g,,16 b d g b d g b - } -} - diff --git a/input/lsr/stemlets.ly b/input/lsr/stemlets.ly deleted file mode 100644 index a38fd2e0b2..0000000000 --- a/input/lsr/stemlets.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -In some notational conventions beams are allowed to extend over rests. -Depending on preference, these beams may drop 'stemlets' to help the -eye appreciate the rhythm better, and in some modern music the rest -itself is omitted and only the stemlet remains. - - -This snippet shows a progression from traditional notation, to beams -over the rest, to stemlets over the rest, to stemlets alone. Stemlets -are generated by overriding the @code{'stemlet-length} property of -@code{Stem}, while rests are hidden by setting @code{'transparent = -##t}. - - -Some @code{\\markup} elements are included in the source to highlight -the different notations. - -" - doctitle = "Stemlets" -} % begin verbatim - -\paper { ragged-right = ##f } - -{ - c'16^\markup { traditional } d' r f' - g'16[^\markup { beams over rests } f' r d'] - - % N.B. use Score.Stem to set for the whole score. - \override Staff.Stem #'stemlet-length = #0.75 - - c'16[^\markup { stemlets over rests } d' r f'] - g'16[^\markup { stemlets and no rests } f' \once \override Rest #'transparent = ##t r d'] -} - - diff --git a/input/lsr/string-quartet-template-simple.ly b/input/lsr/string-quartet-template-simple.ly deleted file mode 100644 index 2557eb3abc..0000000000 --- a/input/lsr/string-quartet-template-simple.ly +++ /dev/null @@ -1,82 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "unfretted-strings, template" - - texidoces = " -Esta plantilla muestra un cuarteto de cuerda normal. También utiliza -una sección @code{\\global} para el compás y la armadura - -" - doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" - - texidocde = " -Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier -wird auch eine @qq{@code{\global}}-Variable für Taktart und -Vorzeichen benutzt. -" - - texidoc = " -This template demonstrates a simple string quartet. It also uses a -@code{\\global} section for time and key signatures - -" - doctitle = "String quartet template (simple)" -} % begin verbatim - -global= { - \time 4/4 - \key c \major -} - -violinOne = \new Voice \relative c'' { - \set Staff.instrumentName = #"Violin 1 " - - c2 d - e1 - - \bar "|." -} - -violinTwo = \new Voice \relative c'' { - \set Staff.instrumentName = #"Violin 2 " - - g2 f - e1 - - \bar "|." -} - -viola = \new Voice \relative c' { - \set Staff.instrumentName = #"Viola " - \clef alto - - e2 d - c1 - - \bar "|." -} - -cello = \new Voice \relative c' { - \set Staff.instrumentName = #"Cello " - \clef bass - - c2 b - a1 - - \bar "|." -} - -\score { - \new StaffGroup << - \new Staff << \global \violinOne >> - \new Staff << \global \violinTwo >> - \new Staff << \global \viola >> - \new Staff << \global \cello >> - >> - \layout { } - \midi { } -} - diff --git a/input/lsr/string-quartet-template-with-separate-parts.ly b/input/lsr/string-quartet-template-with-separate-parts.ly deleted file mode 100644 index 36ff573cb2..0000000000 --- a/input/lsr/string-quartet-template-with-separate-parts.ly +++ /dev/null @@ -1,164 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "unfretted-strings, template" - - texidoces = " -El fragmento de código \"Plantilla de cuarteto de cuerda\" produce un -resultado satisfactorio para el cuarteto, pero ¿y si tenemos que -imprimir las particellas? Esta nueva plantilla muestra cómo usar la -funcionalidad @code{\\tag} (etiqueta) para dividir fácilmente una -pieza en particellas indicviduales. - -Tenemos que dividir esta plantilla en archivos independientes; los -nombres de archivo están dentro de los comentarios al principio de -cada archivo. @code{piece.ly} contiene todas las definiciones de -música. Los otros archivos (@code{score.ly}, @code{vn1.ly}, -@code{vn2.ly}, @code{vla.ly} y @code{vlc.ly}) producen la particella -correspondiente. - -¡No olvide quitar los comentarios que hemos especificado cuando use -los archivos independientes! - -" - doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" - - texidocde = " -Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, -aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel -oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt -voneinander notieren können. Im nächsten Beispiel wird nun -gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen. - -Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen -sind in den Kommentaren am Anfang jeder Datei enthalten. @code{piece.ly} -enthält die Noten. Die anderen Dateien -- @code{score.ly}, -@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly} und -@code{vlc.ly} -- erstellen daraus die entsprechenden Stimmen bzw. die -Partitur (@code{score.ly}). Mit @code{\tag} wird den Stimmen ein Name -zugewiesen, auf den zurückgegriffen werden kann. -" - - texidoc = " -The \"String quartet template\" snippet produces a nice string quartet, -but what if you needed to print parts? This new template demonstrates -how to use the @code{\\tag} feature to easily split a piece into -individual parts. - -You need to split this template into separate files; the filenames are -contained in comments at the beginning of each file. @code{piece.ly} -contains all the music definitions. The other files – @code{score.ly}, -@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly}, and @code{vlc.ly} – -produce the appropriate part. - - -Do not forget to remove specified comments when using separate files! - -" - doctitle = "String quartet template with separate parts" -} % begin verbatim - -%%%%% piece.ly -%%%%% (This is the global definitions file) - -global= { - \time 4/4 - \key c \major -} - -Violinone = \new Voice { \relative c''{ - \set Staff.instrumentName = #"Violin 1 " - - c2 d e1 - -\bar "|." }} %********************************* -Violintwo = \new Voice { \relative c''{ - \set Staff.instrumentName = #"Violin 2 " - - g2 f e1 - -\bar "|." }} %********************************* -Viola = \new Voice { \relative c' { - \set Staff.instrumentName = #"Viola " - \clef alto - - e2 d c1 - -\bar "|." }} %********************************* -Cello = \new Voice { \relative c' { - \set Staff.instrumentName = #"Cello " - \clef bass - - c2 b a1 - -\bar "|."}} %********************************** - -music = { - << - \tag #'score \tag #'vn1 \new Staff { << \global \Violinone >> } - \tag #'score \tag #'vn2 \new Staff { << \global \Violintwo>> } - \tag #'score \tag #'vla \new Staff { << \global \Viola>> } - \tag #'score \tag #'vlc \new Staff { << \global \Cello>> } - >> -} - -%%% These are the other files you need to save on your computer - -%%%%% score.ly -%%%%% (This is the main file) - - -%\include "piece.ly" %%% uncomment this line when using a separate file -#(set-global-staff-size 14) -\score { - \new StaffGroup \keepWithTag #'score \music - \layout { } - \midi { } -} - - -%{ Uncomment this block when using separate files - -%%%%% vn1.ly -%%%%% (This is the Violin 1 part file) - -\include "piece.ly" -\score { - \keepWithTag #'vn1 \music - \layout { } -} - - -%%%%% vn2.ly -%%%%% (This is the Violin 2 part file) - -\include "piece.ly" -\score { - \keepWithTag #'vn2 \music - \layout { } -} - - -%%%%% vla.ly -%%%%% (This is the Viola part file) - -\include "piece.ly" -\score { - \keepWithTag #'vla \music - \layout { } -} - - -%%%%% vlc.ly -%%%%% (This is the Cello part file) - -\include "piece.ly" -\score { - \keepWithTag #'vlc \music - \layout { } -} - -%} - diff --git a/input/lsr/sub-dividing-beams.ly b/input/lsr/sub-dividing-beams.ly deleted file mode 100644 index ed6f2584c5..0000000000 --- a/input/lsr/sub-dividing-beams.ly +++ /dev/null @@ -1,58 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoces = " -Las barras de semicorcheas (o notas más breves) seguidas no se -subdividen de forma predeterminada. Esto es: las tres (o más) -barras se prolongan, sin dividirse, sobre grupos completos de -notas. Este comportamiento se puede modificar para que las barras -se subdividan en subgrupos mediante el establecimiento de la -propiedad @code{subdivideBeams}. Cuando está establecida, las -diversas barras se subdividen a intervalos definidos por el valor -actual de la longitud del pulso @code{beatLength} reduciendo las -barras múltiples a una sola entre los subgrupos. Observe que el -valor predeterminado de @code{beatLength} es de una negra si no -está establecido explícitamente. Se debe establecer al valor de -una fracción que da la duración el subgrupo de barras utilizando -la función @code{make-moment}, como se muestra aquí: - -" - doctitlees = "Subdivisión de las barras de semicorchea" - - texidoc = " -The beams of consecutive 16th (or shorter) notes are, by default, not -sub-divided. That is, the three (or more) beams stretch unbroken over -entire groups of notes. This behavior can be modified to sub-divide -the beams into sub-groups by setting the property -@code{subdivideBeams}. When set, multiple beams will be sub-divided at -intervals defined by the current value of @code{beatLength} by reducing -the multiple beams to just one beam between the sub-groups. Note that -@code{beatLength} defaults to one over the denominator of the current -time signature if not set explicitly. It must be set to a fraction -giving the duration of the beam sub-group using the @code{make-moment} -function, as shown here: - - - -" - doctitle = "Sub-dividing beams" -} % begin verbatim - -\relative c'' { - c32[ c c c c c c c] - \set subdivideBeams = ##t - c32[ c c c c c c c] - - % Set beam sub-group length to an eighth note - \set beatLength = #(ly:make-moment 1 8) - c32[ c c c c c c c] - - % Set beam sub-group length to a sixteenth note - \set beatLength = #(ly:make-moment 1 16) - c32[ c c c c c c c] -} - diff --git a/input/lsr/suppressing-warnings-for-clashing-note-columns.ly b/input/lsr/suppressing-warnings-for-clashing-note-columns.ly deleted file mode 100644 index d3cecd2370..0000000000 --- a/input/lsr/suppressing-warnings-for-clashing-note-columns.ly +++ /dev/null @@ -1,29 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "simultaneous-notes, tweaks-and-overrides" - - texidoc = " -If notes from two voices with stems in the same direction are placed at -the same position, and both voices have no shift or the same shift -specified, the error message \"warning: ignoring too many clashing note -columns\" will appear when compiling the LilyPond file. This message -can be suppressed by setting the @code{'ignore-collision} property of -the @code{NoteColumn} object to @code{#t}. - -" - doctitle = "Suppressing warnings for clashing note columns" -} % begin verbatim - -ignore = \override NoteColumn #'ignore-collision = ##t - -\relative c' { - << - \ignore - { \stemDown f2 g } - \\ - { c2 c, } - >> -} diff --git a/input/lsr/table-of-contents.ly b/input/lsr/table-of-contents.ly deleted file mode 100644 index 491f6a6968..0000000000 --- a/input/lsr/table-of-contents.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "paper-and-layout" - - texidoc = " -A table of contents is included using @code{\\markuplines -\\table-of-contents}. The TOC items are added with the -@code{\\tocItem} command. - -" - doctitle = "Table of contents" -} % begin verbatim - -#(set-default-paper-size "a6") - -\book { - \markuplines \table-of-contents - \pageBreak - \tocItem \markup { The first score } - \score { - { - c'1 \pageBreak - \mark "A" \tocItem \markup { Mark A } - d'1 - } - } - \pageBreak - \tocItem \markup { The second score } - \score { - { e'1 } - \header { piece = "Second score" } - } -} diff --git a/input/lsr/three-sided-box.ly b/input/lsr/three-sided-box.ly deleted file mode 100644 index 896593aa7a..0000000000 --- a/input/lsr/three-sided-box.ly +++ /dev/null @@ -1,52 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, text" - - texidoc = " -This example shows how to add a markup command to get a three sided box -around some text (or other markup). - -" - doctitle = "Three-sided box" -} % begin verbatim - -% New command to add a three sided box, with sides north, west and south -% Based on the box-stencil command defined in scm/stencil.scm -% Note that ";" is used to comment a line in Scheme -#(define-public (NWS-box-stencil stencil thickness padding) - "Add a box around STENCIL, producing a new stencil." - (let* ((x-ext (interval-widen (ly:stencil-extent stencil 0) padding)) - (y-ext (interval-widen (ly:stencil-extent stencil 1) padding)) - (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) - (x-rule (make-filled-box-stencil - (interval-widen x-ext thickness) (cons 0 thickness)))) -; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) - (set! stencil (ly:stencil-combine-at-edge stencil X -1 y-rule padding)) - (set! stencil (ly:stencil-combine-at-edge stencil Y 1 x-rule 0.0)) - (set! stencil (ly:stencil-combine-at-edge stencil Y -1 x-rule 0.0)) - stencil)) - -% The corresponding markup command, based on the \box command defined -% in scm/define-markup-commands.scm -#(define-markup-command (NWS-box layout props arg) (markup?) - "Draw a box round @var{arg}. Looks at @code{thickness}, -@code{box-padding} and @code{font-size} properties to determine line -thickness and padding around the markup." - (let* ((th (chain-assoc-get 'thickness props 0.1)) - (size (chain-assoc-get 'font-size props 0)) - (pad (* (magstep size) - (chain-assoc-get 'box-padding props 0.2))) - (m (interpret-markup layout props arg))) - (NWS-box-stencil m th pad))) - -% Test it: - -\layout { ragged-right = ##f } -\relative c' { - c2^\markup { \NWS-box ABCD } - c2^\markup { \NWS-box \note #"4" #1.0 } -} - diff --git a/input/lsr/tick-bar-lines.ly b/input/lsr/tick-bar-lines.ly deleted file mode 100644 index a49da4a4d4..0000000000 --- a/input/lsr/tick-bar-lines.ly +++ /dev/null @@ -1,23 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation" - - texidoc = " -'Tick' bar lines are often used in music where the bar line is used -only for coordination and is not meant to imply any rhythmic stress. - -" - doctitle = "Tick bar lines" -} % begin verbatim - -\relative c' { - \set Score.defaultBarType = #"'" - c4 d e f - g4 f e d - c4 d e f - g4 f e d - \bar "|." -} diff --git a/input/lsr/time-signature-in-parentheses.ly b/input/lsr/time-signature-in-parentheses.ly deleted file mode 100644 index c26a7a6802..0000000000 --- a/input/lsr/time-signature-in-parentheses.ly +++ /dev/null @@ -1,21 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, tweaks-and-overrides" - - texidoc = " -The time signature can be enclosed within parentheses. - -" - doctitle = "Time signature in parentheses" -} % begin verbatim - -\relative c'' { - \override Staff.TimeSignature #'stencil = #(lambda (grob) - (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) - \time 2/4 - a4 b8 c -} - diff --git a/input/lsr/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly b/input/lsr/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly deleted file mode 100644 index 8a31255ef5..0000000000 --- a/input/lsr/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly +++ /dev/null @@ -1,40 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -Sometimes, a time signature should not print the whole fraction (e.g. -7/4), but only the numerator (7 in this case). This can be easily done -by using \\override Staff.TimeSignature #'style = #'single-digit to -change the style permanently. By using \\revert Staff.TimeSignature -#'style, this setting can be reversed. To apply the single-digit style -to only one time signature, use the \\override command and prefix it -with a \\once. - -" - doctitle = "Time signature printing only the numerator as a number (instead of the fraction)" -} % begin verbatim - -\relative c'' { - \time 3/4 - c4 c c - % Change the style permanently - \override Staff.TimeSignature #'style = #'single-digit - \time 2/4 - c c - \time 3/4 - c c c - % Revert to default style: - \revert Staff.TimeSignature #'style - \time 2/4 - c c - % single-digit style only for the next time signature - \once \override Staff.TimeSignature #'style = #'single-digit - \time 5/4 - c c c c c - \time 2/4 - c c -} diff --git a/input/lsr/transcription-of-ancient-music-with-incipit.ly b/input/lsr/transcription-of-ancient-music-with-incipit.ly deleted file mode 100644 index 056c540250..0000000000 --- a/input/lsr/transcription-of-ancient-music-with-incipit.ly +++ /dev/null @@ -1,291 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "ancient-notation, tweaks-and-overrides" - - texidoces = " -A modo de alternativa para obtener auténticos «incipit» -independientes de la partitura principal, se incluyen como -elemento de marcado en el campo que se usa normalmente para el -nombre del instrumento. Por el momento, la letra sólo se puede -añadir como marcado directo. Por desgracia, su espaciado no es -análogo al de la letra principal. - -" - doctitlees = "Transcripción de música antigua con incipit" - - texidoc = " -As a workaround to get real incipits which are independent from the -main score these are included as a markup into the field normally used -for the instrument name. As for now lyrics can only be added as a -direct markup. It doesn't unfortunately conform with the spacing of the -main lyrics. - -" - doctitle = "Transcription of Ancient music with incipit" -} % begin verbatim - -global = { - \set Score.skipBars = ##t - \key g \major - \time 4/4 - - %make the staff lines invisible on staves - \override Staff.BarLine #'transparent = ##t - \skip 1*8 % the actual music - - % let finis bar go through all staves - \override Staff.BarLine #'transparent = ##f - - % finis bar - \bar "|." -} - - -discantusNotes = { - \transpose c' c'' { - \clef "treble" - d'2. d'4 | - b e' d'2 | - c'4 e'4.( d'8 c' b | - a4) b a2 | - b4.( c'8 d'4) c'4 | - \once \override NoteHead #'transparent = ##t c'1 | - b\breve | - } -} - -discantusLyrics = \lyricmode { - Ju -- bi -- | - la -- te De -- | - o, om -- - nis ter -- | - ra, __ om- | - "..." | - -us. | -} - -altusNotes = { - \transpose c' c'' { - \clef "treble" - r2 g2. e4 fis g | % two bars - a2 g4 e | - fis g4.( fis16 e fis4) | - g1 | - \once \override NoteHead #'transparent = ##t g1 | - g\breve | - } -} - -altusLyrics = \lyricmode { - Ju -- bi -- la -- te | % two bars - De -- o, om -- | - nis ter -- ra, | - "..." | - -us. | -} - -tenorNotes = { - \transpose c' c' { - \clef "treble_8" - R1 | - R1 | - R1 | - r2 d'2. d'4 b e' | % two bars - \once \override NoteHead #'transparent = ##t e'1 | - d'\breve | - } -} - -tenorLyrics = \lyricmode { - Ju -- bi -- la -- te | % two bars - "..." | - -us. -} - -bassusNotes = { - \transpose c' c' { - \clef "bass" - R1 | - R1 | - R1 | - R1 | - g2. e4 | - \once \override NoteHead #'transparent = ##t e1 | - g\breve | - } -} - -bassusLyrics = \lyricmode { - Ju -- bi- | - "..." | - -us. -} - -incipitDiscantus = \markup{ - \score{ - { - \set Staff.instrumentName="Discantus " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "neomensural-c1" - \key f \major - \time 2/2 - c''1._"IV-" s2 %two bars - \skip 1*8 % eight bars - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm - } - } -} - -incipitAltus = \markup{ - \score{ - { - \set Staff.instrumentName="Altus " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "neomensural-c3" - \key f \major - \time 2/2 - r1 % one bar - f'1._"IV-" s2 % two bars - \skip 1*7 % seven bars - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm - } - } -} - -incipitTenor = \markup{ - \score{ { - \set Staff.instrumentName = "Tenor " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "neomensural-c4" - \key f \major - \time 2/2 - r\longa % four bars - r\breve % two bars - r1 % one bar - c'1._"IV-" s2 % two bars - \skip 1 % one bar - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm -} -} -} - -incipitBassus = \markup{ - \score{ { - \set Staff.instrumentName = "Bassus " - \override NoteHead #'style = #'neomensural - \override Rest #'style = #'neomensural - \override Staff.TimeSignature #'style = #'neomensural - \cadenzaOn - \clef "bass" - \key f \major - \time 2/2 - % incipit - r\maxima % eight bars - f1._"IV-" s2 % two bars - } - \layout { - \context {\Voice - \remove Ligature_bracket_engraver - \consists Mensural_ligature_engraver - } - line-width=4.5\cm - } - } -} - -%StaffGroup is used instead of ChoirStaff to get bar lines between systems -\score { - << - \new StaffGroup = choirStaff << - \new Voice = - "discantusNotes" << \global - \set Staff.instrumentName=\incipitDiscantus - \discantusNotes >> - \new Lyrics = - "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics } - - \new Voice = - "altusNotes" << \global - \set Staff.instrumentName=\incipitAltus - \altusNotes >> - \new Lyrics = - "altusLyrics" \lyricsto altusNotes { \altusLyrics } - - \new Voice = - "tenorNotes" << \global - \set Staff.instrumentName=\incipitTenor - \tenorNotes >> - \new Lyrics = - "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics } - - \new Voice = - "bassusNotes" << \global - \set Staff.instrumentName=\incipitBassus - \bassusNotes >> - >> - \new Lyrics = - "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics } - %Keep the bass lyrics outside of the staff group to avoid bar lines - %between the lyrics. - >> - - \layout { - \context { - \Score - - % no bars in staves - \override BarLine #'transparent = ##t - } - % the next three instructions keep the lyrics between the barlines - \context { \Lyrics - \consists "Bar_engraver" - \override BarLine #'transparent = ##t } - \context { \StaffGroup \consists "Separating_line_group_engraver" } - \context { - \Voice - - % no slurs - \override Slur #'transparent = ##t - - % Comment in the below "\remove" command to allow line - % breaking also at those barlines where a note overlaps - % into the next bar. The command is commented out in this - % short example score, but especially for large scores, you - % will typically yield better line breaking and thus improve - % overall spacing if you comment in the following command. - %\remove "Forbid_line_break_engraver" - } - indent=5\cm - } -} - diff --git a/input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly b/input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly deleted file mode 100644 index 138606c341..0000000000 --- a/input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly +++ /dev/null @@ -1,147 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches" - -doctitlees = "Transportar música con el menor número de alteraciones" -texidoces = " -Este ejemplo utiliza código de Scheme para forzar las -modificaciones enarmónicas de las notas, y así tener el menor -número de alteraciones accidentales. En este caso se aplican las -siguientes reglas: - -@itemize -@item -Se quitan las dobles alteraciones - -@item -Si sostenido -> Do - -@item -Mi sistenido -> Fa - -@item -Do bemol -> Si - -@item -Fa bemol -> Mi - -@end itemize - -De esta forma se selecciona el mayor número de notas enarmónicas -naturales. - -" - -doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren." - -texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische -Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl -an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die -folgenden Regeln: - -@itemize -@item -Doppelte Versetzungszeichen sollen entfernt werden - -@item -His -> C - -@item -Eis -> F - -@item -Ces -> B - -@item -Fes -> E - -@end itemize - -Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische -Variante gewählt. -" - - - texidoc = " -This example uses some Scheme code to enforce enharmonic modifications -for notes in order to have the minimum number of accidentals. In this -case, the following rules apply: - -Double accidentals should be removed - - -B sharp -> C - - -E sharp -> F - - -C flat -> B - - -F flat -> E - - -In this manner, the most natural enharmonic notes are chosen. - -" - doctitle = "Transposing pitches with minimum accidentals (\"Smart\" transpose)" -} % begin verbatim - -#(define (naturalize-pitch p) - (let ((o (ly:pitch-octave p)) - (a (* 4 (ly:pitch-alteration p))) - ;; alteration, a, in quarter tone steps, - ;; for historical reasons - (n (ly:pitch-notename p))) - (cond - ((and (> a 1) (or (eq? n 6) (eq? n 2))) - (set! a (- a 2)) - (set! n (+ n 1))) - ((and (< a -1) (or (eq? n 0) (eq? n 3))) - (set! a (+ a 2)) - (set! n (- n 1)))) - (cond - ((> a 2) (set! a (- a 4)) (set! n (+ n 1))) - ((< a -2) (set! a (+ a 4)) (set! n (- n 1)))) - (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7)))) - (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7)))) - (ly:make-pitch o n (/ a 4)))) - -#(define (naturalize music) - (let ((es (ly:music-property music 'elements)) - (e (ly:music-property music 'element)) - (p (ly:music-property music 'pitch))) - (if (pair? es) - (ly:music-set-property! - music 'elements - (map (lambda (x) (naturalize x)) es))) - (if (ly:music? e) - (ly:music-set-property! - music 'element - (naturalize e))) - (if (ly:pitch? p) - (begin - (set! p (naturalize-pitch p)) - (ly:music-set-property! music 'pitch p))) - music)) - -naturalizeMusic = -#(define-music-function (parser location m) - (ly:music?) - (naturalize m)) - -music = \relative c' { c4 d e g } - -\score { - \new Staff { - \transpose c ais { \music } - \naturalizeMusic \transpose c ais { \music } - \transpose c deses { \music } - \naturalizeMusic \transpose c deses { \music } - } - \layout { } -} diff --git a/input/lsr/tweaking-clef-properties.ly b/input/lsr/tweaking-clef-properties.ly deleted file mode 100644 index d3fbef3b4e..0000000000 --- a/input/lsr/tweaking-clef-properties.ly +++ /dev/null @@ -1,156 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "pitches, staff-notation, tweaks-and-overrides" - - doctitlees = "Trucaje de las propiedades de clave" - texidoces = " -La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de -@code{clefGlyph}, @code{clefPosition} (que controla la posición -vertical de la clave), @code{middleCPosition} y -@code{clefOctavation}. Se imprime una clave cada vez que se -modifica cualquiera de las propiedades excepto -@code{middleCPosition}. - -Observe que la modificación del glifo, la posición de la clave o -su octavación, no cambian 'per se' la posición de las siguientes -notas del pentagrama: para hacer esto también se debe especificar -la posición del Do central. Los parámetros posicionales están en -relación con la tercera línea del pentagrama, los números -positivos desplazan hacia arriba, contando una unidad por cada -línea y espacio. El valor de @code{clefOctavation} se -establecería normalmente a 7, -7, 15 or -15, pero son válidos -otros valores. - -Cuando se produce un cambio de clave en el salto de línea se -imprime la clave nueva tanto al final de la línea anterior como al -principio de la nueva, de forma predeterminada. Si no se necesita -la clave de advertencia al final de la línea anterior, se puede -quitar estableciendo el valor de la propiedad -@code{explicitClefVisibility} de @code{Staff}, a -@code{end-of-line-invisible}. El comportamiento predeterminado se -puede recuperar con @code{\\unset Staff.explicitClefVisibility}. - -Los siguientes ejemplos muestran las posibilidades cuando se -ajustan estas propiedades manualmente. En la primera línea, los -cambios manuales preservan el posicionamiento relativo estándar de -las claves y las notas, pero no lo hacen en la segunda línea. -" - - doctitlede = "Eigenschaften des Schlüssels optimieren" - texidocde = " -Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem -expliziten Setzen der Eigenschaften von @code{clefGlyph}, -@code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt), -@code{middleCPosition} und @code{clefOctavation}. Ein Schlüssel wird -ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich -ändert. - -Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der -Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten -auf dem System: das geschieht nur, wenn auch die Position des -eingestrichenen@tie{}C (middleCPosition) angegeben wird. Die -Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen -positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie -plus Zwischenraum. Der @code{clefOctavation}-Wert ist normalerweise auf 7, --7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig. - -Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue -Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile -ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht -erforderlich ist, kann er unterdrückt werden, indem die -@code{explicitClefVisibility}-Eigenschaft des @code{Staff}-Kontextes auf den -Wert @code{end-of-line-invisible} gesetzt wird. Das Standardverhalten kann -mit @code{\\unset Staff.explicitClefVisibility} wieder hergestellt werden. - -Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese -Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen -Änderungen die ursprüngliche relative Positionierung von Schlüssel und -Noten, auf der zweiten Zeile nicht. -" - - texidoc = " -The command @code{\\clef \"treble_8\"} is equivalent to setting -@code{clefGlyph}, @code{clefPosition} (which controls the vertical -position of the clef), @code{middleCPosition} and -@code{clefOctavation}. A clef is printed when any of the properties -except @code{middleCPosition} are changed. - - -Note that changing the glyph, the position of the clef, or the -octavation does not in itself change the position of subsequent notes -on the staff: the position of middle C must also be specified to do -this. The positional parameters are relative to the staff center line, -positive numbers displacing upwards, counting one for each line and -space. The @code{clefOctavation} value would normally be set to 7, -7, -15 or -15, but other values are valid. - - -When a clef change takes place at a line break the new clef symbol is -printed at both the end of the previous line and the beginning of the -new line by default. If the warning clef at the end of the previous -line is not required it can be suppressed by setting the @code{Staff} -property @code{explicitClefVisibility} to the value -@code{end-of-line-invisible}. The default behavior can be recovered -with @code{\\unset Staff.explicitClefVisibility}. - -The following examples show the possibilities when setting these -properties manually. On the first line, the manual changes preserve the -standard relative positioning of clefs and notes, whereas on the second -line, they do not. - -" - doctitle = "Tweaking clef properties" -} % begin verbatim - -\layout { ragged-right = ##t } - -{ - % The default treble clef - c'1 - % The standard bass clef - \set Staff.clefGlyph = #"clefs.F" - \set Staff.clefPosition = #2 - \set Staff.middleCPosition = #6 - c'1 - % The baritone clef - \set Staff.clefGlyph = #"clefs.C" - \set Staff.clefPosition = #4 - \set Staff.middleCPosition = #4 - c'1 - % The standard choral tenor clef - \set Staff.clefGlyph = #"clefs.G" - \set Staff.clefPosition = #-2 - \set Staff.clefOctavation = #-7 - \set Staff.middleCPosition = #1 - c'1 - % A non-standard clef - \set Staff.clefPosition = #0 - \set Staff.clefOctavation = #0 - \set Staff.middleCPosition = #-4 - c'1 \break - - % The following clef changes do not preserve - % the normal relationship between notes and clefs: - - \set Staff.clefGlyph = #"clefs.F" - \set Staff.clefPosition = #2 - c'1 - \set Staff.clefGlyph = #"clefs.G" - c'1 - \set Staff.clefGlyph = #"clefs.C" - c'1 - \set Staff.clefOctavation = #7 - c'1 - \set Staff.clefOctavation = #0 - \set Staff.clefPosition = #0 - c'1 - - % Return to the normal clef: - - \set Staff.middleCPosition = #0 - c'1 -} - diff --git a/input/lsr/tweaking-grace-layout-within-music.ly b/input/lsr/tweaking-grace-layout-within-music.ly deleted file mode 100644 index e6875bee91..0000000000 --- a/input/lsr/tweaking-grace-layout-within-music.ly +++ /dev/null @@ -1,29 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoc = " -The layout of grace expressions can be changed throughout the music -using the functions @code{add-grace-property} and -@code{remove-grace-property}. The following example undefines the -@code{Stem} direction for this grace, so that stems do not always point -up, and changes the default note heads to crosses. - -" - doctitle = "Tweaking grace layout within music" -} % begin verbatim - -\relative c'' { - \new Staff { - #(remove-grace-property 'Voice 'Stem 'direction) - #(add-grace-property 'Voice 'NoteHead 'style 'cross) - \new Voice { - \acciaccatura { f16 } g4 - \grace { d16[ e] } f4 - \appoggiatura { f,32[ g a] } e2 - } - } -} diff --git a/input/lsr/tweaks-and-overrides.snippet-list b/input/lsr/tweaks-and-overrides.snippet-list deleted file mode 100644 index efcbf26794..0000000000 --- a/input/lsr/tweaks-and-overrides.snippet-list +++ /dev/null @@ -1,55 +0,0 @@ -analysis-brackets-above-the-staff.ly -avoiding-collisions-with-chord-fingerings.ly -caesura-railtracks-with-fermata.ly -changing-a-single-notes-size-in-a-chord.ly -changing-form-of-multi-measure-rests.ly -changing-properties-for-individual-grobs.ly -changing-the-default-text-font-family.ly -changing-the-staff-size.ly -controlling-the-vertical-ordering-of-scripts.ly -controlling-tuplet-bracket-visibility.ly -creating-a-delayed-turn.ly -creating-simultaneous-rehearsal-marks.ly -creating-text-spanners.ly -custodes.ly -customizing-fretboard-fret-diagrams.ly -customizing-markup-fret-diagrams.ly -display-bracket-with-only-one-staff-in-a-system.ly -dotted-harmonics.ly -drawing-boxes-around-grobs.ly -drawing-circles-around-various-objects.ly -fine-tuning-pedal-brackets.ly -forcing-horizontal-shift-of-notes.ly -fret-diagrams-explained-and-developed.ly -horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly -how-to-change-fret-diagram-position.ly -inserting-a-caesura.ly -line-arrows.ly -making-an-object-invisible-with-the-transparent-property.ly -manually-controlling-beam-positions.ly -mensurstriche-layout-bar-lines-between-the-staves.ly -nesting-staves.ly -percent-repeat-count-visibility.ly -positioning-multi-measure-rests.ly -positioning-text-markups-inside-slurs.ly -printing-a-repeat-sign-at-the-beginning-of-a-piece.ly -printing-bar-numbers-inside-boxes-or-circles.ly -printing-metronome-and-rehearsal-marks-below-the-staff.ly -proportional-strict-notespacing.ly -removing-the-first-empty-line.ly -rest-styles.ly -rhythmic-slashes.ly -separating-key-cancellations-from-key-signature-changes.ly -setting-hairpin-behavior-at-bar-lines.ly -specifying-context-with-beatgrouping.ly -suppressing-warnings-for-clashing-note-columns.ly -time-signature-in-parentheses.ly -time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly -transcription-of-ancient-music-with-incipit.ly -tweaking-clef-properties.ly -tweaking-grace-layout-within-music.ly -using-beatlength-and-beatgrouping.ly -using-postscript-to-generate-special-note-head-shapes.ly -using-the--tweak-command-to-tweak-individual-grobs.ly -vertically-aligned-dynamics-and-textscripts.ly -vertically-aligning-ossias-and-lyrics.ly diff --git a/input/lsr/use-square-bracket-at-the-start-of-a-staff-group.ly b/input/lsr/use-square-bracket-at-the-start-of-a-staff-group.ly deleted file mode 100644 index fcbbbbd171..0000000000 --- a/input/lsr/use-square-bracket-at-the-start-of-a-staff-group.ly +++ /dev/null @@ -1,32 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "staff-notation, contexts-and-engravers" - - texidoces = " -Se puede usar el delimitador de comienzo de un sistema -@code{SystemStartSquare} estableciéndolo explícitamente dentro de -un contexto @code{StaffGroup} o @code{ChoirStaffGroup}. - -" - doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas" - - texidoc = " -The system start delimiter @code{SystemStartSquare} can be used by -setting it explicitly in a @code{StaffGroup} or @code{ChoirStaffGroup} -context. - -" - doctitle = "Use square bracket at the start of a staff group" -} % begin verbatim - -\score { - \new StaffGroup { << - \set StaffGroup.systemStartDelimiter = #'SystemStartSquare - \new Staff { c'4 d' e' f' } - \new Staff { c'4 d' e' f' } - >> } -} - diff --git a/input/lsr/using-beatlength-and-beatgrouping.ly b/input/lsr/using-beatlength-and-beatgrouping.ly deleted file mode 100644 index c148611cfa..0000000000 --- a/input/lsr/using-beatlength-and-beatgrouping.ly +++ /dev/null @@ -1,65 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms, tweaks-and-overrides" - - texidoces = " -La propiedad @code{measureLength} determina dónde se deben insertar -líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo -se deben generar las barras autoomáticas para las duraciones de barra -y compases para los que no hay ninguna regla definida para los finales -de barra. Este ejemplo muestra distintas dormas de controlar el -barrado mediante el establecimiento de estas propiedades. Las -explicaciones están en forma de comentarios dentro del código. - -" - doctitlees = "Utilización de beatLength y beatGrouping" - - texidoc = " -The property @code{measureLength} determines where bar lines should be -inserted and, with @code{beatLength} and @code{beatGrouping}, how -automatic beams should be generated for beam durations and time -signatures for which no beam-ending rules are defined. This example -shows several ways of controlling beaming by setting these properties. -The explanations are shown as comments in the code. - -" - doctitle = "Using beatLength and beatGrouping" -} % begin verbatim - -\relative c'' { - \time 3/4 - % The default in 3/4 time is to beam in three groups - % each of a quarter note length - a16 a a a a a a a a a a a - - \time 12/16 - % No auto-beaming is defined for 12/16 - a16 a a a a a a a a a a a - - \time 3/4 - % Change time signature symbol, but retain underlying 3/4 beaming - \set Score.timeSignatureFraction = #'(12 . 16) - a16 a a a a a a a a a a a - - % The 3/4 time default grouping of (1 1 1) and beatLength of 1/8 - % are not consistent with a measureLength of 3/4, so the beams - % are grouped at beatLength intervals - \set Score.beatLength = #(ly:make-moment 1 8) - a16 a a a a a a a a a a a - - % Specify beams in groups of (3 3 2 3) 1/16th notes - % 3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply, - % and beams are grouped at beatLength (1/16) intervals - \set Score.beatLength = #(ly:make-moment 1 16) - \set Score.beatGrouping = #'(3 3 2 3) - a16 a a a a a a a a a a a - - % Specify beams in groups of (3 4 2 3) 1/16th notes - % 3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies - \set Score.beatLength = #(ly:make-moment 1 16) - \set Score.beatGrouping = #'(3 4 2 3) - a16 a a a a a a a a a a a -} diff --git a/input/lsr/using-double-slurs-for-legato-chords.ly b/input/lsr/using-double-slurs-for-legato-chords.ly deleted file mode 100644 index 47f82c267f..0000000000 --- a/input/lsr/using-double-slurs-for-legato-chords.ly +++ /dev/null @@ -1,35 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Algunos compositores escriben dos ligaduras cuando quieren acordes -legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. - -" - doctitlees = "Utilizar ligaduras dobles para acordes legato" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert -werden. Das kann mit der Eigenschaft @code{doubleSlurs} erreicht werden. - -" - doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen" - - texidoc = " -Some composers write two slurs when they want legato chords. This can -be achieved by setting @code{doubleSlurs}. - -" - doctitle = "Using double slurs for legato chords" -} % begin verbatim - -\relative c' { - \set doubleSlurs = ##t - 4( ) -} - diff --git a/input/lsr/using-grace-note-slashes-with-normal-heads.ly b/input/lsr/using-grace-note-slashes-with-normal-heads.ly deleted file mode 100644 index 586ad5bf8c..0000000000 --- a/input/lsr/using-grace-note-slashes-with-normal-heads.ly +++ /dev/null @@ -1,20 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - texidoc = " -The slash through the stem found in acciaccaturas can be applied in -other situations. - -" - doctitle = "Using grace note slashes with normal heads" -} % begin verbatim - -\relative c'' { - \override Stem #'stroke-style = #"grace" - c8( d2) e8( f4) -} - diff --git a/input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly b/input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly deleted file mode 100644 index 23c0ca66b3..0000000000 --- a/input/lsr/using-the--tweak-command-to-tweak-individual-grobs.ly +++ /dev/null @@ -1,26 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "tweaks-and-overrides" - - texidoc = " -With the @code{\\tweak} command, every grob can be tuned directly. -Here are some examples of available tweaks. - -" - doctitle = "Using the \\tweak command to tweak individual grobs" -} % begin verbatim - -\relative c' { - \time 2/4 - \set fingeringOrientations = #'(right) - < - \tweak #'font-size #3 c - \tweak #'color #red d-\tweak #'font-size #8 -4 - \tweak #'style #'cross g - \tweak #'duration-log #2 a - >2 -} - diff --git a/input/lsr/using-ties-with-arpeggios.ly b/input/lsr/using-ties-with-arpeggios.ly deleted file mode 100644 index b0c83267c8..0000000000 --- a/input/lsr/using-ties-with-arpeggios.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "rhythms" - - doctitlees = "Uso de ligaduras en los arpegios" - texidoces = " -En ocasiones se usan ligaduras de unión para escribir los arpegios. -En este caso, las dos notas ligadas no tienen que ser consecutivas. -Esto se puede conseguir estableciendo la propiedad -@code{tieWaitForNote} al valor \"verdadero\". La misma funcionalidad -es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero -en principio, también se puede usar para notas normales consecutivas, -como se muestra en este ejemplo. - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " - Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In - diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander. -Das Verhalten kann erreicht werden, indem die @code{tieWaitForNote}-Eigenschaft -auf @code{#t} gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa -ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch -für normale Überbindungen eingesetzt werden -" - doctitlede = "Überbingungen für Arpeggio genutzen" - - texidoc = " -Ties are sometimes used to write out arpeggios. In this case, two tied -notes need not be consecutive. This can be achieved by setting the -@code{tieWaitForNote} property to @code{#t}. The same feature is also -useful, for example, to tie a tremolo to a chord, but in principle, it -can also be used for ordinary consecutive notes. - -" - doctitle = "Using ties with arpeggios" -} % begin verbatim - -\relative c' { - \set tieWaitForNote = ##t - \grace { c16[ ~ e ~ g] ~ } 2 - \repeat tremolo 8 { c32 ~ c' ~ } 1 - e8 ~ c ~ a ~ f ~ 2 - \tieUp - c8 ~ a - \tieDown - \tieDotted - g8 ~ c g2 -} - diff --git a/input/lsr/vertical-line-as-a-baroque-articulation-mark.ly b/input/lsr/vertical-line-as-a-baroque-articulation-mark.ly deleted file mode 100644 index 5af736d832..0000000000 --- a/input/lsr/vertical-line-as-a-baroque-articulation-mark.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks, ancient-notation" - - texidoc = " -This short vertical line placed above the note is commonly used in -baroque music. Its meaning can vary, but generally indicates notes -that should be played with more \"weight\". The following example -demonstrates how to achieve such a notation. - -" - doctitle = "Vertical line as a baroque articulation mark" -} % begin verbatim - -upline = -#(let* ((m (make-music 'ArticulationEvent - 'articulation-type "stopped" - 'direction 1))) - (ly:music-set-property! m 'tweaks - (acons 'font-size 3 - (acons 'text (markup - #:postscript " - .15 setlinewidth - 0 -1 0 1.5 lineto - stroke") - (acons 'stencil ly:text-interface::print - (ly:music-property m 'tweaks))))) - m) - - -\relative c' { - a'^\upline a( c a) -} diff --git a/input/lsr/vertically-aligned-dynamics-and-textscripts.ly b/input/lsr/vertically-aligned-dynamics-and-textscripts.ly deleted file mode 100644 index 97116f9872..0000000000 --- a/input/lsr/vertically-aligned-dynamics-and-textscripts.ly +++ /dev/null @@ -1,62 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "tweaks-and-overrides, spacing" - - texidoces = " -Mediante el establecimiento de la propiedad @code{Y-extent} a un valor -adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e -indicaciones dinámicas textuales) se pueden alinear con un punto de -referencia común, independientemente de sus dimensiones. De esta -manera, todos los elementos estarán alineados verticalmente, -produciendo así un resultado más satisfactorio. - -Se usa una idea similar para alinear las inscripciones de texto a lo -largo de su línea de base. - -" - doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt, -können alle @code{DynamicLineSpanner}-Objekte (Crescendo-Klammern und -Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer -wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden. -Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz -sieht ansprechender aus. - -Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer -Grundlinie auszurichten. - -" - doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen" - - texidoc = " -By setting the @code{'Y-extent} property to a suitable value, all -@code{DynamicLineSpanner} objects (hairpins and dynamic texts) can be -aligned to a common reference point, regardless of their actual extent. -This way, every element will be vertically aligned, thus producing a -more pleasing output. - -The same idea is used to align the text scripts along their baseline. - -" - doctitle = "Vertically aligned dynamics and textscripts" -} % begin verbatim - -music = \relative c'' { - c2\p^\markup { gorgeous } c\f^\markup { fantastic } - c4\p c\f\> c c\!\p -} - -{ - \music \break - \override DynamicLineSpanner #'staff-padding = #2.0 - \override DynamicLineSpanner #'Y-extent = #'(-1.5 . 1.5) - \override TextScript #'Y-extent = #'(-1.5 . 1.5) - \music -} - diff --git a/input/lsr/vertically-aligning-dynamics-across-multiple-notes.ly b/input/lsr/vertically-aligning-dynamics-across-multiple-notes.ly deleted file mode 100644 index 4dc951213c..0000000000 --- a/input/lsr/vertically-aligning-dynamics-across-multiple-notes.ly +++ /dev/null @@ -1,33 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "expressive-marks" - - texidoces = " -Las expresiones dinámicas que se comienzan, terminan o se producen -en la misma nota se alinean verticalmente. Para asegurar que las -expresiones dinámicas se alinean cuando no se producen sobre la -misma nota, incremente la propiedad @code{staff-padding} del -objeto @code{DynamicLineSpanner}. - -" - doctitlees = "Alinear verticalmente expresiones dinámicas que abarcan varias notas" - - texidoc = " -Dynamics that occur at, begin on, or end on the same note will be -vertically aligned. To ensure that dynamics are aligned when they do -not occur on the same note, increase the @code{staff-padding} property -of the @code{DynamicLineSpanner} object. - -" - doctitle = "Vertically aligning dynamics across multiple notes" -} % begin verbatim - -\relative c' { - \override DynamicLineSpanner #'staff-padding = #4 - c2\p f\mf - g2\< b4\> c\! -} - diff --git a/input/lsr/vertically-aligning-ossias-and-lyrics.ly b/input/lsr/vertically-aligning-ossias-and-lyrics.ly deleted file mode 100644 index ef3f3d6394..0000000000 --- a/input/lsr/vertically-aligning-ossias-and-lyrics.ly +++ /dev/null @@ -1,53 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music, tweaks-and-overrides, spacing" - - texidoces = " -Este fragmento de código muestra el uso de las propiedades de -contexto @code{alignBelowContext} y @code{alignAboveContext} para -controlar la posición de la letra y los compases de ossia. - -" - doctitlees = "Alineación vertical de la letra y los compases de ossia" - - texidoc = " -This snippet demonstrates the use of the context properties -@code{alignBelowContext} and @code{alignAboveContext} to control the -positioning of lyrics and ossias. - -" - doctitle = "Vertically aligning ossias and lyrics" -} % begin verbatim - -\paper { - ragged-right = ##t -} - -\relative c' << - \new Staff = "1" { c4 c s2 } - \new Staff = "2" { c4 c s2 } - \new Staff = "3" { c4 c s2 } - { \skip 2 - << - \lyrics { - \set alignBelowContext = #"1" - lyrics4 below - } - \new Staff \with { - alignAboveContext = #"3" - fontSize = #-2 - \override StaffSymbol #'staff-space = #(magstep -2) - \remove "Time_signature_engraver" - } { - \times 4/6 { - \override TextScript #'padding = #3 - c8[^"ossia above" d e d e f] - } - } - >> - } ->> - diff --git a/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly b/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly deleted file mode 100644 index adceb33224..0000000000 --- a/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly +++ /dev/null @@ -1,118 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music, keyboards, template" - - texidoces = " -Esta plantilla añade una reducción de piano automática a la partitura -vocal SATB estándar que se mostró en la \"Plantilla de conjunto -vocal\". Esto presenta uno de los puntos fuertes de LilyPond: podemos -usar una definición de música más de una vez. Si se hace cualquier -cambio en las notas de la parte vocal (digamos @code{tenorMusic}), -entonces los cambios se aplicarán también a la reducción de piano. - -" - doctitlees = "Plantilla de conjunto vocal con reducción de piano automática" - - texidocde = " -In diesem Beispiel wird ein automatischer Klavierauszug zu der -Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond --- man kann eine Variable mehr als einmal benutzen. Wenn Sie -irgendeine Änderung an einer Chorstimme vornehmen, (etwa -tenorMusic), verändert sich auch der Klavierauszug entsprechend. -" - - texidoc = " -This template adds an automatic piano reduction to the standard SATB -vocal score demonstrated in \"Vocal ensemble template\". This -demonstrates one of the strengths of LilyPond – you can use a music -definition more than once. If any changes are made to the vocal notes -(say, @code{tenorMusic}), then the changes will also apply to the piano -reduction. - -" - doctitle = "Vocal ensemble template with automatic piano reduction" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -sopMusic = \relative c'' { - c4 c c8[( b)] c4 -} -sopWords = \lyricmode { - hi hi hi hi -} - -altoMusic = \relative c' { - e4 f d e -} -altoWords =\lyricmode { - ha ha ha ha -} - -tenorMusic = \relative c' { - g4 a f g -} -tenorWords = \lyricmode { - hu hu hu hu -} - -bassMusic = \relative c { - c4 c g c -} -bassWords = \lyricmode { - ho ho ho ho -} - -\score { - << - \new ChoirStaff << - \new Lyrics = sopranos { s1 } - \new Staff = women << - \new Voice = sopranos { \voiceOne << \global \sopMusic >> } - \new Voice = altos { \voiceTwo << \global \altoMusic >> } - >> - \new Lyrics = altos { s1 } - \new Lyrics = tenors { s1 } - \new Staff = men << - \clef bass - \new Voice = tenors { \voiceOne <<\global \tenorMusic >> } - \new Voice = basses { \voiceTwo <<\global \bassMusic >> } - >> - \new Lyrics = basses { s1 } - \context Lyrics = sopranos \lyricsto sopranos \sopWords - \context Lyrics = altos \lyricsto altos \altoWords - \context Lyrics = tenors \lyricsto tenors \tenorWords - \context Lyrics = basses \lyricsto basses \bassWords - >> - \new PianoStaff << - \new Staff << - \set Staff.printPartCombineTexts = ##f - \partcombine - << \global \sopMusic >> - << \global \altoMusic >> - >> - \new Staff << - \clef bass - \set Staff.printPartCombineTexts = ##f - \partcombine - << \global \tenorMusic >> - << \global \bassMusic >> - >> - >> - >> - \layout { - \context { - % a little smaller so lyrics - % can be closer to the staff - \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) - } - } -} - diff --git a/input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly b/input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly deleted file mode 100644 index a8995f7073..0000000000 --- a/input/lsr/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly +++ /dev/null @@ -1,96 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "text, vocal-music, contexts-and-engravers, template" - - texidoces = " -Esta plantilla es, básicamente, la misma que la sencilla plantilla -\"Conjunto vocal\", excepto que aquí todas las líneas de letra se -colocan utilizando @code{alignAboveContext} y -@code{alignBelowContext}. - -" - doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" - - texidocde = " -In diesem Beispiel werden die Texte mit den Befehlen -@code{alignAboveContext} und @code{alignBelowContext} -über und unter dem System angeordnet. -" - - texidoc = " -This template is basically the same as the simple \"Vocal ensemble\" -template, with the exception that here all the lyrics lines are placed -using @code{alignAboveContext} and @code{alignBelowContext}. - -" - doctitle = "Vocal ensemble template with lyrics aligned below and above the staves" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -sopMusic = \relative c'' { - c4 c c8[( b)] c4 -} -sopWords = \lyricmode { - hi hi hi hi -} - -altoMusic = \relative c' { - e4 f d e -} -altoWords = \lyricmode { - ha ha ha ha -} - -tenorMusic = \relative c' { - g4 a f g -} -tenorWords = \lyricmode { - hu hu hu hu -} - -bassMusic = \relative c { - c4 c g c -} -bassWords = \lyricmode { - ho ho ho ho -} - -\score { - \new ChoirStaff << - \new Staff = women << - \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } - \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } - >> - \new Lyrics \with { alignAboveContext = women } \lyricsto sopranos \sopWords - \new Lyrics \with { alignBelowContext = women } \lyricsto altos \altoWords - % we could remove the line about this with the line below, since we want - % the alto lyrics to be below the alto Voice anyway. - % \new Lyrics \lyricsto altos \altoWords - - \new Staff = men << - \clef bass - \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } - \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } - >> - \new Lyrics \with { alignAboveContext = men } \lyricsto tenors \tenorWords - \new Lyrics \with { alignBelowContext = men } \lyricsto basses \bassWords - % again, we could replace the line above this with the line below. - % \new Lyrics \lyricsto basses \bassWords - >> - \layout { - \context { - % a little smaller so lyrics - % can be closer to the staff - \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) - } - } -} - diff --git a/input/lsr/vocal-ensemble-template.ly b/input/lsr/vocal-ensemble-template.ly deleted file mode 100644 index ec83303759..0000000000 --- a/input/lsr/vocal-ensemble-template.ly +++ /dev/null @@ -1,109 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "vocal-music, template" - - 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 -todas las partes. Por ejemplo, el compás y la armadura casi siempre -son los mismos para todas. Como en la plantilla \"Himno\", las cuatro -voces se reagrupan en sólo dos pentagramas. - -" - doctitlees = "Plantilla de conjunto vocal" - - texidocde = " -Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren -Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, -die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa -sind fast immer gleich in allen Stimmen. -" - - texidoc = " -Here is a standard four-part SATB vocal score. With larger ensembles, -it is often useful to include a section which is included in all parts. -For example, the time signature and key signature are almost always the -same for all parts. Like in the \"Hymn\" template, the four voices are -regrouped on only two staves. - -" - doctitle = "Vocal ensemble template" -} % begin verbatim - -global = { - \key c \major - \time 4/4 -} - -sopMusic = \relative c'' { - c4 c c8[( b)] c4 -} -sopWords = \lyricmode { - hi hi hi hi -} - -altoMusic = \relative c' { - e4 f d e -} -altoWords = \lyricmode { - ha ha ha ha -} - -tenorMusic = \relative c' { - g4 a f g -} -tenorWords = \lyricmode { - hu hu hu hu -} - -bassMusic = \relative c { - c4 c g c -} -bassWords = \lyricmode { - ho ho ho ho -} - -\score { - \new ChoirStaff << - \new Lyrics = sopranos { s1 } - \new Staff = women << - \new Voice = "sopranos" { - \voiceOne - << \global \sopMusic >> - } - \new Voice = "altos" { - \voiceTwo - << \global \altoMusic >> - } - >> - \new Lyrics = "altos" { s1 } - \new Lyrics = "tenors" { s1 } - \new Staff = men << - \clef bass - \new Voice = "tenors" { - \voiceOne - << \global \tenorMusic >> - } - \new Voice = "basses" { - \voiceTwo << \global \bassMusic >> - } - >> - \new Lyrics = basses { s1 } - \context Lyrics = sopranos \lyricsto sopranos \sopWords - \context Lyrics = altos \lyricsto altos \altoWords - \context Lyrics = tenors \lyricsto tenors \tenorWords - \context Lyrics = basses \lyricsto basses \bassWords - >> - \layout { - \context { - % a little smaller so lyrics - % can be closer to the staff - \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) - } - } -} - diff --git a/input/lsr/vocal-music.snippet-list b/input/lsr/vocal-music.snippet-list deleted file mode 100644 index 1a8ef8ebb1..0000000000 --- a/input/lsr/vocal-music.snippet-list +++ /dev/null @@ -1,21 +0,0 @@ -adding-ambitus-per-voice.ly -adjusting-lyrics-vertical-spacing.ly -ambitus-with-multiple-voices.ly -ambitus.ly -changing-stanza-fonts.ly -chant-or-psalms-notation.ly -formatting-lyrics-syllables.ly -how-to-put-ties-between-syllables-in-lyrics.ly -lyrics-alignment.ly -marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly -piano-template-with-melody-and-lyrics.ly -single-staff-template-with-notes,-lyrics,-and-chords.ly -single-staff-template-with-notes,-lyrics,-chords-and-frets.ly -single-staff-template-with-notes-and-lyrics.ly -skips-in-lyric-mode-2.ly -skips-in-lyric-mode.ly -vertically-aligning-ossias-and-lyrics.ly -vertically-centered-common-lyrics.ly -vocal-ensemble-template-with-automatic-piano-reduction.ly -vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly -vocal-ensemble-template.ly diff --git a/input/lsr/volta-below-chords.ly b/input/lsr/volta-below-chords.ly deleted file mode 100644 index 55640fe17b..0000000000 --- a/input/lsr/volta-below-chords.ly +++ /dev/null @@ -1,44 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats, staff-notation, chords" - - texidoces = " -Mediante la adición del grabador @code{Volta_engraver} al -pentagrama pertinente, se pueden poner los corchetes de primera y -segunda vez debajo de los acordes. - -" - doctitlees = "Corchetes de primera y segunda vez debajo de los acordes" - - texidoc = " -By adding the @code{Volta_engraver} to the relevant staff, volte can be -put under chords. - -" - doctitle = "Volta below chords" -} % begin verbatim - -\score { - << - \chords { - c1 - c1 - } - \new Staff \with { - \consists "Volta_engraver" - } - { - \repeat volta 2 { c'1 } - \alternative { c' } - } - >> - \layout { - \context { - \Score - \remove "Volta_engraver" - } - } -} diff --git a/input/lsr/volta-multi-staff.ly b/input/lsr/volta-multi-staff.ly deleted file mode 100644 index 022b46a8e5..0000000000 --- a/input/lsr/volta-multi-staff.ly +++ /dev/null @@ -1,36 +0,0 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -\version "2.12.3" - -\header { - lsrtags = "repeats, staff-notation" - - texidoc = " -By adding the @code{Volta_engraver} to the relevant staff, volte can be -put over staves other than the topmost one in a score. - -" - doctitle = "Volta multi staff" -} % begin verbatim - -voltaMusic = \relative c'' { - \repeat volta 2 { - c1 - } - \alternative { - d1 - e - } -} - -<< - \new StaffGroup << - \new Staff \voltaMusic - \new Staff \voltaMusic - >> - \new StaffGroup << - \new Staff \with { \consists "Volta_engraver" } - \voltaMusic - \new Staff \voltaMusic - >> ->> diff --git a/input/lsr/winds.snippet-list b/input/lsr/winds.snippet-list deleted file mode 100644 index d707cf7af7..0000000000 --- a/input/lsr/winds.snippet-list +++ /dev/null @@ -1 +0,0 @@ -flute-slap-notation.ly diff --git a/input/manual/GNUmakefile b/input/manual/GNUmakefile deleted file mode 100644 index 6ba37af6fc..0000000000 --- a/input/manual/GNUmakefile +++ /dev/null @@ -1,9 +0,0 @@ -depth = ../.. - -STEPMAKE_TEMPLATES=documentation - -EXTRA_DIST_FILES= README -EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) -EXTRA_DIST_FILES+=$(call src-wildcard,*.ily) - -include $(depth)/make/stepmake.make diff --git a/input/manual/README b/input/manual/README deleted file mode 100644 index f6e3131efb..0000000000 --- a/input/manual/README +++ /dev/null @@ -1,5 +0,0 @@ -This is for large examples that are included in the manual. Most of these -examples are distinct snippets; files that are also included in the -regression tests should be copied from input/regression/ into this -direction and listed here. - diff --git a/input/manual/ancient-headword.ly b/input/manual/ancient-headword.ly deleted file mode 100644 index 3b1136e989..0000000000 --- a/input/manual/ancient-headword.ly +++ /dev/null @@ -1,135 +0,0 @@ -\version "2.12.0" - -#(set-global-staff-size 15) -\paper{ - ragged-right=##t - line-width=17\cm - indent=0\cm -} - -\layout { - \context { \Score - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -\include "gregorian.ly" - -\score { - << - \new VaticanaVoice = "cantus" { - \clef "vaticana-do3" - % Verse 1 — Salve, Regína - a\melisma \[ a \flexa g \pes a\melismaEnd \] d - \divisioMinima - \[ a\melisma \flexa g\melismaEnd \] - \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] - \[ e\melisma \flexa d\melismaEnd \] - \divisioMaior - c d \[d\melisma \flexa c\melismaEnd \] d - \[ e\melisma \pes f\melismaEnd\] g - \[d\melisma \pes e \flexa c\melismaEnd \] d - \finalis - % Verse 2 — Vita, dulcédo - % a\melisma \[ a \flexa g \pes a\melismaEnd \] d - % \divisioMinima - % \[ a\melisma \flexa g\melismaEnd \] - % \[ f\melisma \flexa e f \pes g \flexa f\melismaEnd \] - % \[ e\melisma \flexa d\melismaEnd \] - % \divisioMaior - % c d \[e\melisma \pes f\melismaEnd \] g - % \[d\melisma \pes e \flexa c\melismaEnd \] d - % \finalis - % Verse 3 — Ad te clamámus - \[ d\melisma \pes f\melismaEnd\] a g - \[ g\melisma \flexa f \pes a\melismaEnd\] e - \divisioMaior - g f \[ e\melisma \flexa d \pes g\melismaEnd \] - \divisioMinima - c d \[ e\melisma \flexa d \pes g\melismaEnd \] - \[ f\melisma \flexa e\melismaEnd \] d - \finalis - % Verse 4 — Ad te suspirámus - \[ d\melisma \pes f\melismaEnd \] a c' g - \[ g\melisma \flexa f \pes g\melismaEnd \] a - \divisioMaior - d \[ f\melisma \pes \deminutum g\melismaEnd \] g d - \[ \virga f\melisma \inclinatum e \inclinatum d\melismaEnd \] - c \divisioMaior - d \[ d\melisma \flexa c \pes f\melismaEnd \] - \[ g\melisma \pes a\melismaEnd \] - g \[ f\melisma \flexa e\melismaEnd \] g - \[ f\melisma \flexa \deminutum e\melismaEnd \] - \[ d\melisma \flexa c \pes d\melismaEnd \] - \finalis - % Verse 5 — Eia ergo, Advocáta nostra - f\melisma \[ f \pes g\melismaEnd \] f - \[ g\melisma \pes \deminutum a\melismaEnd \] a - \divisioMinima - c' g \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] d g a - \divisioMaior - d' d' \[ c'\melisma \flexa b c' \pes d'\melismaEnd \] a - \divisioMinima - d' c' a \[ g\melisma \flexa f \pes a\melismaEnd \] g - \[ d\melisma \pes e\melismaEnd \] f - \[ \virga e\melisma \inclinatum d \inclinatum c\melismaEnd \] - \divisioMaior - \[ c\melisma \pes d\melismaEnd \] - f \[ g\melisma \flexa \deminutum f\melismaEnd \] - \[ d\melisma \flexa c \pes d\melismaEnd \] d - \finalis - % Verse 6 — Et Jesum - d a, \[ c\melisma \pes d\melismaEnd \] - \divisioMinima - d \[ d\melisma \pes e\melismaEnd \] \[ e\melisma \flexa d d\melismaEnd \] - c g f \[ e\melisma \flexa \deminutum d\melismaEnd \] g - \[ f\melisma \flexa e\melismaEnd \] - \[ d\melisma \flexa c \pes d\melismaEnd \] - \[ d\melisma \pes a \] \virga bes\melismaEnd a - \divisioMinima - \[ \virga a\melisma \inclinatum g \inclinatum f\melismaEnd \] g d f - \[ f\melisma \flexa e\melismaEnd \] \[ d\melisma \flexa c\melismaEnd \] - \divisioMinima - \[ e\melisma \pes f \flexa e\melismaEnd \] d d - \finalis - % Verse 7 ad finem — O clemens: O pia: O dulcis Virgo María - a\melisma \[a \flexa g a \quilisma b \pes c'\melismaEnd \] - \[ \virga b\melisma \inclinatum a \inclinatum g\melismaEnd \] a - \finalis - \[ g\melisma \pes a \quilisma b \pes c' \] \[ c' \flexa b\melismaEnd \] - \[ a\melisma \flexa g\melismaEnd \] \[ g\melisma \pes a\melismaEnd \] - \finalis - \[ a\melisma \flexa d \virga f \inclinatum e \inclinatum d \inclinatum c d \] - \divisioMinima - \[ d \pes e f \pes g\melismaEnd \] - \[ g\melisma \flexa \deminutum f\melismaEnd \] - \[ g\melisma \pes a\melismaEnd \] - d c d \[ d\melisma \pes g \flexa f f\melismaEnd \] - \[ e\melisma \flexa d\melismaEnd \] - \finalis - } - \new Lyrics \lyricsto "cantus" { - Sal- ve, Re- gí- na, ma- ter mi- se- ri- cór- di- ae: - % Vi- ta, dul- cé- do, et spes no- stra, sal- ve. - Ad te cla- má- mus, éx- su- les, fi- li- i He- vae. - Ad te su- spi- rá- mus, ge- mén- tes et flen- tes in hac la- cri- má- rum - val- le. - E- ia er- go, Ad- vo- cá- ta no- stra, il- los tu- os mi- se- ri- cór- des - ó- cu- los ad nos con- vér- te. - Et Je- sum, be- ne- díc- tum fruc- tum ven- tris tu- i, no- bis post hoc - ex- sí- li- um os- tén- de. - O cle- mens: - O pi- a: - O dul- cis Vir- go Ma- rí- a. - } - >> -} - -\layout { - \context { - \Staff - \consists Custos_engraver - } -} - diff --git a/input/manual/chord-names-languages.ly b/input/manual/chord-names-languages.ly deleted file mode 100644 index e446afa4fb..0000000000 --- a/input/manual/chord-names-languages.ly +++ /dev/null @@ -1,47 +0,0 @@ -\version "2.12.0" -\header { - texidoc = "@cindex Chord Names German -The english naming of chords (default) can be changed to german -(@code{\germanChords} replaces B and Bes to H and B), semi-german -(@code{\semiGermanChords} replaces B and Bes to H and Bb), italian -(@code{\italianChords} uses Do Re Mi Fa Sol La Si), or french -(@code{\frenchChords} replaces Re to Ré). - -" } - -scm = \chordmode { - e1/d c:m - % c/c cis/cis - % yeah, we get the idea. -hwn - - % cisis/cisis ces/ces ceses/ceses - b/b bis/bis bes/bes - % beses/beses -} - - -\layout { - ragged-right = ##t - \context {\ChordNames \consists Instrument_name_engraver } -} - -<< - \new ChordNames { - \set instrumentName = #"default" - \scm - } - \new ChordNames { - \set instrumentName = #"german" - \germanChords \scm } - \new ChordNames { - \set instrumentName = #"semi-german" - \semiGermanChords \scm } - \new ChordNames { - \set instrumentName = #"italian" - \italianChords \scm } - \new ChordNames { - \set instrumentName = #"french" - \frenchChords \scm } - - \context Voice { \scm } ->> diff --git a/input/manual/chords-headword.ly b/input/manual/chords-headword.ly deleted file mode 100644 index f8a661fd71..0000000000 --- a/input/manual/chords-headword.ly +++ /dev/null @@ -1,101 +0,0 @@ -\version "2.12.0" -#(set-global-staff-size 15) -\paper{ - ragged-right=##f - line-width=15\cm - indent=0\cm -} - -\layout { - \context { \Score - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -theChords = \chordmode { - \time 2/2 - f1 | c2 f2 | f1 | c2 f2| %\break - f2 bes2 | f1 | c2:7 f | c1 | \break -} - -verseOne = \lyricmode{ - \set stanza = "1. " - Fair is the sun - shine, - Fair - er the moon - light - And all the stars __ _ in heav'n a -- bove; -} - -verseTwo = \lyricmode{ - \set stanza = "2. " - Fair are the mead - ows, - Fair - er the wood - land, - Robed in the flow -- ers of bloom -- ing spring; -} - -Soprano = { - \time 2/2 - \key f \major - \stemUp - f'2 f'4 f' | g'4 e' f'2 | a'4. a'8 a'4 a' | bes'4 g' a'2 | -c''2 f''4 d'' | c''2 bes'4 a' | bes'2 a' | g'1 | -} - -Alto = { - \key f \major - c'2 c'4 c' | d'4 c' c'2 | f'4. f'8 f'4 fis' | g'4 e' f'2 | - f'2 f'4 f' | f'2 g'4 f' | e'2 f' | e'1 | -} - -Tenor = { - \key f \major - \stemDown - a2 a4 a | bes4 g a2 | c'4. c'8 d'4 d' | d'4 c' c'2 | - a2 d'4 bes | a2 c'4 c' | c'2 c' | c'1 | -} - -Bass = { - \key f \major - f2 f4 f | bes,4 c f2 | f4. e8 d4 c | bes,4 c f2 | - f2 bes,4 d | f2 e4 f | g2 f | c1 | -} - - -\score { - << - \new ChordNames { \theChords } - \context Staff = upper { - \context Voice = sop { - << - \Soprano - \Alto - >> - } - } - \context Lyrics="LyrOne" \lyricsto "sop" {\verseOne} - \context Lyrics="LyrTwo" \lyricsto "sop" {\verseTwo} - \context Staff = lower { - \new Voice { - \clef bass - #(set-accidental-style 'modern-cautionary) - << - \Tenor - \Bass - >> - } - } - >> - -\layout { - %between-system-space = 1\mm - indent = 0 - \context { - \Score - \remove "Bar_number_engraver" - } - \context { \Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 1) - } - } -} -\paper { } diff --git a/input/manual/divisiones.ly b/input/manual/divisiones.ly deleted file mode 100644 index 6307c9ac8c..0000000000 --- a/input/manual/divisiones.ly +++ /dev/null @@ -1,42 +0,0 @@ -% possible rename to ancient- or gregorian- ? -\header { - texidoc = "@cindex Divisiones - -Divisiones are ancient variants of breathing signs. -Choices are @code{divisioMinima}, @code{divisioMaior}, -@code{divisioMaxima} and @code{finalis}, @code{virgula} and -@code{caesura}. - -" } - -\version "2.12.0" - -\include "gregorian.ly" - -\score { - << - \context VaticanaVoice { - \override TextScript #'padding = #3 - g a g - s^\markup { "divisio minima" } - \divisioMinima - g a g - s^\markup { "divisio maior" } - \divisioMaior - g a g - s^\markup { "divisio maxima" } - \divisioMaxima - \break - g a g - s^\markup { "finalis" } - \finalis - g a g - s^\markup { "virgula" } - \virgula - g a g - s^\markup { "caesura" } - \caesura - g a g - } - >> -} diff --git a/input/manual/editorial-headword.ly b/input/manual/editorial-headword.ly deleted file mode 100644 index b834181f48..0000000000 --- a/input/manual/editorial-headword.ly +++ /dev/null @@ -1,101 +0,0 @@ -\version "2.12.0" -\include "english.ly" -#(set-global-staff-size 15) -\paper{ - ragged-right=##t - line-width=17\cm - indent=0\cm -} - -\layout { - \context { \Score - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -% NR 1.7 Editorial annotations - -% Beethoven, Op. 31, No. 3 -% Piano sonata 18, Movt II, Scherzo -% Measures 9 - 14 - -\layout { } - -\new PianoStaff << - - % RH Staff - \new Staff { - \clef treble - \key af \major - \time 2/4 - \set Staff.fingeringOrientations = #'(up up) - \set Score.currentBarNumber = #9 - \partial 8 - 8 \staccato - | - \set doubleSlurs = ##t - 4 ( - 8 \staccato ) - \noBeam - c''8-5 \staccato \pp - | - \set doubleSlurs = ##f - bf'8.. ( - af'32 - g'8 ) \staccato - f'8 \staccato - | - e'4-2 - r8 - \once \override Script #'script-priority = #-100 - \afterGrace - f'8 ( \trill ^ \markup { \finger "3-2" } - { e'16 [ f'16 ] } - | - g'8..-3 - f'32 - e'8-1 ) \staccato - d'8-2 \staccato - | - c'4 - r4 - } - - % LH Staff - \new Staff { - \key af \major - \clef treble - \override Fingering #'direction = #down - \set Staff.fingeringOrientations = #'(down down) - \partial 8 - 8 \staccato - \set doubleSlurs = ##t - 4 ( - 8 ) \staccato - \noBeam - \clef bass - c'8-1 \staccato - | - \set doubleSlurs = ##f - bf8.. ( - af32 - g8-1 ) \staccato - f8 \staccato - | - e4 - r8 - \afterGrace - f8 ( \trill _ \markup { \finger "2-1" } - { e16 [ f16 ] } - | - g8..-1 - f32 - e8 ) \staccato - d8 \staccato - | - c4 - r4 - } - ->> diff --git a/input/manual/expressive-headword.ly b/input/manual/expressive-headword.ly deleted file mode 100644 index ed62f91ee1..0000000000 --- a/input/manual/expressive-headword.ly +++ /dev/null @@ -1,263 +0,0 @@ -\version "2.12.0" -\include "english.ly" -#(set-global-staff-size 15) -\paper { - line-width = 16\cm - indent = 0\cm -} - -% NR 1.3 Expressive marks - -% L. v. Beethoven, Op. 49 no. 1 -% Piano sonata 19 - "Leichte Sonate" -% measures 1 - 12 - -%\layout { -% \context { -% \Score -% \override SpacingSpanner #'base-shortest-duration = -% #(ly:make-moment 1 20) -% } -%} - -\new PianoStaff << - - % RH Staff - \new Staff { - \clef treble - \key g \major - \time 6/8 - \partial 2 - \once \override TextScript #'staff-padding = #2 - d'8 \staccato - ^ \markup { \column { - RONDO - \italic Allegro } } - d'8 \staccato - g'8 \staccato - a'8 \staccato - - | - - b'8 [ ( - g'8 ] ) - e'8 \staccato - e' \staccato - a'8 \staccato - b'8 \staccato - - | - - c''8 [ ( - a'8 ] ) - e''8 \staccato - d''8 \staccato - c''8 \staccato - b'8 \staccato - - | - - a'8 \staccato - g'8 \staccato - a'8 \staccato - \acciaccatura { g'16 [ a'16 ] } - bf'8 - a'8 \staccato - g'8 \staccato - - | - - fs'8 [ ( - d'8 ] ) - d'8 \staccato - d'8 \staccato - g'8 \staccato - a'8 \staccato - - | - - b'8 [ ( - g'8 ] ) - e'8 \staccato - e'8 \staccato - a'8 \staccato - b'8 \staccato - - | - - c''8 [ ( - a'8 ] ) - e''8 \staccato - d''8 \staccato - c''8 \staccato - b'8 \staccato - - | - - a'8 \staccato - g'8 \staccato - a'8 \staccato - << - { - \voiceOne - d'8 - g'8 - fs'8 - \oneVoice - } - \new Voice { - \voiceTwo - d'4 - c'8 - \oneVoice - } - >> - - | - - 4 \tenuto - d'8 \staccato - g'8 \staccato - b'8 \staccato - d''8 \staccato - - | - - d''8 ( - 8 \staccato ) - 8 \staccato - d''8 ( - 8 \staccato ) - 8 \staccato - - | - - d''8 ( - 8 \staccato ) - 8 \staccato - d''8 ( - 8 \staccato ) - 8 \staccato - - | - - d''8 \staccato - 8 \staccato - 8 \staccato - d'' \staccato - 8 \staccato - 8 \staccato - - | - - 4 \fermata - r8 r4 r8 - } - - % LH Staff - \new Staff { - \clef bass - \key g \major - \time 6/8 - \partial 2 - r8 - r8 - 8 \staccato - 8 \staccato - - | - - 4 - r8 - r8 - 8 \staccato - 8 \staccato - - | - - 4 - r8 - r8 - 8 \staccato - 8 \staccato - - | - - 8 \staccato - 8 \staccato - 8 \staccato - 4. ( - - | - - d'4 ) - r8 - r8 - 8 \staccato - 8 \staccato - - | - - 4 - r8 - r8 - 8 \staccato - 8 \staccato - - | - - 4 - r8 - r8 - 8 \staccato - 8 \staccato - - | - - 8 \staccato - 8 \staccato - 8 \staccato - 4 - 8 \staccato - - | - - 4 \tenuto - r8 - r4 - r8 - - | - - r8 - 8 \staccato - 8 \staccato - r8 - 8 \staccato - 8 \staccato - - | - - r8 - 8 \staccato - 8 \staccato - r8 - 8 \staccato - 8 \staccato - - | - - r8 - 8 \staccato - 8 \staccato - r8 - 8 \staccato - 8 \staccato - - | - - 4 \fermata - r8 r4 r8 - } - ->> diff --git a/input/manual/figured-bass-headword.ly b/input/manual/figured-bass-headword.ly deleted file mode 100644 index 8f666920c0..0000000000 --- a/input/manual/figured-bass-headword.ly +++ /dev/null @@ -1,117 +0,0 @@ -\version "2.12.0" -#(set-global-staff-size 15) -\paper{ - ragged-right=##f - line-width=16\cm - indent=1.5\cm -} - -\layout { - \context { \Score - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -% NR 2.7.3 Figured bass - -% Arcangelo Corelli, 12 Sonate da Camera, Op. 2 -% Sonata II, Allemanda -% measures 1 - 88 -% Coded by Neil Puttock; modified by Carl Sorensen - -extendOn = \bassFigureExtendersOn -extendOff = \bassFigureExtendersOff - -\score { - - \new StaffGroup << - - \new GrandStaff << - - \new Staff = "violinoI" { - \set Staff.instrumentName = \markup { - \hcenter-in #11 - \line { Violino I. } - } - \time 4/4 - \mark \markup { \italic Adagio. } - \partial 8 - r16 a'16 | - a'8. [ d''16 d''8. e''16 ] cis''8 a'4 a''16 bes''16 | - cis''8 d''16 ( e'' ) e''8. d''16 d''4 r8 d''16 e''16 | - f''8 f''4 g''16 ( f''16 ) e''8 e''4 f''16 ( e''16 ) | - d''8. d''16 g''16 ( f''16 ) e''16 ( d''16 ) cis''8 - cis''4 cis''16 cis''16 | - d''8 d''8 c''8. c''16 c''8 ( b'4 ) b'16 b'16 | - c''8 c''8 bes'8. bes'16 bes'8 ( a'4 ) a''16 a''16 | - a''8 g''8 g''8. g''16 g''8 ( f''8 ) r8 f''8 | - } - - \new Staff = "violinoII" { - \set Staff.instrumentName = \markup { - \hcenter-in #11 - \line { Violino II. } - } - \time 4/4 - \partial 8 - r16 f'16 | - f'8. g'16 g'4 a'4 r8 d''16 d''16 | - e''8 a'8 cis''8. d''16 d''4 r8 f''16 g''16 | - a''8 a''8 d''8. d''16 g'8 g'8 c''8. c''16 | - f'8. f''16 bes''16 ( a''16 ) g''16 ( f''16 ) e''8 e''4 e''16 e''16 | - a'8 fis''8 g''8 a''8 d''8 d''4 d''16 d''16 | - g'8 e''8 f''8 g''8 c''8 c''4 cis''16 cis''16 | - d''8 d''8 e''8. e''16 e''8 a'8 r8 d''8 | - } - - >> - - \new Staff = "violone" { - \set Staff.instrumentName = \markup { - \hcenter-in #13 { - \center-column { - Violone, - \line { e Cembalo. } - } - } - } - \time 4/4 - \clef bass - \partial 8 - r16 d16 | - d4 bes,4 a,4 f4 | - g8 f16 g16 a8 a,8 d4 d'4 ~ | - d'8 c'8 b4 c'8 c'16 bes16 a4 | - bes8 bes16 a16 g4 a8 a,4 a16 g16 | - fis8 d8 e8 fis8 g8 g,4 g16 f16 | - e8 c8 d8 e8 f8 f,4 a,8 | - b,4 cis4 d4 r8 d'8 | - } - - \new FiguredBass \figuremode { - \set figuredBassAlterationDirection = #RIGHT - \set figuredBassPlusDirection = #RIGHT - \override VerticalAxisGroup #'minimum-Y-extent = #'() - \override BassFigureAlignment #'stacking-dir = #DOWN - s8 | - s4 <6>4 <_+>4 <6>4 | - <6 4\+ 2>8 <6>8 <_+> s8 s2 | - <5>8 <6 4>8 <6 5>4 s4 <5>8 <6>8 | - s4 <6 5 _-> <_+>2 | - <6>8 <_+>8 <6>8 <6 5>8 <5 4>8 \extendOn <5 _!>8 \extendOff s4 | - <6>4 <6->8 <6 5->8 <5 4->8 \extendOn <5 3>4 \extendOff <5 _+>8 | - <7>8 <6>8 <5>4 <9 4>8 <8 3>8 s4 | - } - - >> - - \layout { - \context { - \Score - \override RehearsalMark #'break-align-symbols = #'(time-signature) - \override RehearsalMark #'self-alignment-X = #LEFT - \override TimeSignature #'break-align-anchor-alignment = #LEFT - } - } -} diff --git a/input/manual/font-table.ly b/input/manual/font-table.ly deleted file mode 100644 index b468deb016..0000000000 --- a/input/manual/font-table.ly +++ /dev/null @@ -1,224 +0,0 @@ -#(set-global-staff-size 16) - -#(begin - - ;; some helper functions - - (define (filter-out pred lst) - (filter (lambda (x) (not (pred x))) lst)) - - (define (filter-out-group glyph-list substring) - (filter-out (lambda (x) (string-contains x substring)) glyph-list)) - - (define (filter-out-groups glyph-list . substrings) - (let loop ((new glyph-list) (rem substrings)) - (if (null? rem) - new - (loop (filter-out-group new (car rem)) - (cdr rem))))) - - (define (get-group glyph-list substring) - (filter (lambda (x) (string-contains x substring)) glyph-list)) - - (define glyph-list - (delete ".notdef" - (ly:otf-glyph-list (ly:system-font-load "emmentaler-20")))) - - ;;;;;;;;; - - ;; define these 3 groups first since they're - ;; harder to get with (get-groups ...) - (define numbers - '("plus" "comma" "hyphen" "period" - "zero" "one" "two" "three" "four" - "five" "six" "seven" "eight" "nine")) - - (define default-noteheads - '("noteheads.uM2" "noteheads.dM2" "noteheads.sM1" - "noteheads.s0" "noteheads.s1" "noteheads.s2")) - - (define dynamics - '("space" "f" "m" "p" "r" "s" "z")) - - ;; remove them from the glyph-list - (for-each - (lambda (x) (set! glyph-list (delete x glyph-list))) - (append numbers - default-noteheads - dynamics)) - - ;;;;;;;;; - - ;; extract ancient-music groups before extracting default - ;; accidentals, rests, etc. to prevent duplication. - (define vaticana (get-group glyph-list "vaticana")) - (define medicaea (get-group glyph-list "medicaea")) - (define hufnagel (get-group glyph-list "hufnagel")) - (define neomensural (get-group glyph-list "neomensural")) - - ;; remove neomensural before defining mensural; otherwise, searching - ;; for "mensural" would return "neomensural" matches too. - (set! glyph-list - (filter-out-groups - glyph-list - "vaticana" - "medicaea" - "hufnagel" - "neomensural")) - - ;; get the rest of the ancient-music groups - (define mensural (get-group glyph-list "mensural")) - (define petrucci (get-group glyph-list "petrucci")) - (define solesmes (get-group glyph-list "solesmes")) - - ;; remove them from the glyph-list - (set! glyph-list - (filter-out-groups - glyph-list - "mensural" - "petrucci" - "solesmes")) - - ;; This would only get "rests.2classical". - ;; We're leaving it with the other rests for now. - ;; (define classical (get-group glyph-list "classical")) - ;; (set! glyph-list (filter-out-groups glyph-list "classical")) - - ;;;;;;;;; - - ;; get everything else except noteheads. - ;; * Some accidentals contain "slash" substring, so extract - ;; "accidentals" before extracting "slash" (noteheads). - ;; * Also use "pedal." not "pedal", for example, to prevent things - ;; like "scripts.upedalheel" ending up in the "pedal." list. - ;; * This doesn't apply to the ancient stuff because searching for - ;; "vaticana." (as an example) would miss things like - ;; "dots.dotvaticana" - (define clefs (get-group glyph-list "clefs.")) - (define timesig (get-group glyph-list "timesig.")) - (define accidentals (get-group glyph-list "accidentals.")) - (define rests (get-group glyph-list "rests.")) - (define flags (get-group glyph-list "flags.")) - (define dots (get-group glyph-list "dots.")) - (define scripts (get-group glyph-list "scripts.")) - (define arrowheads (get-group glyph-list "arrowheads.")) - (define brackettips (get-group glyph-list "brackettips.")) - (define pedal (get-group glyph-list "pedal.")) - (define accordion (get-group glyph-list "accordion.")) - - ;; remove them from the glyph-list - (set! glyph-list - (filter-out-groups - glyph-list - "clefs." - "timesig." - "accidentals." - "rests." - "flags." - "dots." - "scripts." - "arrowheads." - "brackettips." - "pedal." - "accordion.")) - - ;;;;;;;;; - - ;; get special noteheads - (define cross (get-group glyph-list "cross")) - (define diamond (get-group glyph-list "diamond")) - (define harmonic (get-group glyph-list "harmonic")) - (define slash (get-group glyph-list "slash")) - (define triangle (get-group glyph-list "triangle")) - (define xcircle (get-group glyph-list "xcircle")) - - (define special-noteheads - (append cross - diamond - harmonic - slash - triangle - xcircle)) - - ;; remove special noteheads from the glyph-list - (set! glyph-list - (filter-out-groups - glyph-list - "cross" - "diamond" - "harmonic" - "slash" - "triangle" - "xcircle")) - - ;; (lazy solution) - ;; any remaining glyphs containing "noteheads." should be shape-notes. - (define shape-note-noteheads (get-group glyph-list "noteheads.")) - - ;; remove shape-note-noteheads from the glyph-list - (set! glyph-list (filter-out-group glyph-list "noteheads.")) - - ;;;;;;;;; - - ;; simple debug test for any glyphs that didn't make it. - (if #f - (if (null? glyph-list) - (format #t "No glyphs are missing from the table.\n") - (format #t "You missed these glyphs: ~a\n" glyph-list))) - -) % end of (begin ...) - -\paper { - %% ugh. text on toplevel is a bit broken... - - oddHeaderMarkup = \markup {} - evenHeaderMarkup = \markup {} - oddFooterMarkup = \markup {} - evenFooterMarkup = \markup {} - } - -\version "2.12.0" - -#(define-markup-command (doc-char layout props name) (string?) - (interpret-markup layout props - (let* ((n (string-length name))) - (if (> n 24) - ;; split long glyph names near the middle at dots - (let* ((middle-pos (round (/ n 2))) - (left-dot-pos (string-rindex name #\. 0 middle-pos)) - (right-dot-pos (string-index name #\. middle-pos)) - (left-distance (if (number? left-dot-pos) - (- middle-pos left-dot-pos) - middle-pos)) - (right-distance (if (number? right-dot-pos) - (- right-dot-pos middle-pos) - middle-pos)) - (split-pos (if (> left-distance right-distance) - right-dot-pos - left-dot-pos)) - (left (substring name 0 split-pos)) - (right (substring name split-pos))) - (markup - #:pad-to-box '(0 . 36) '(-2 . 2) #:column (#:typewriter left - #:typewriter #:concat (" " right)) - #:pad-to-box '(-2 . 4) '(-3.5 . 3.5) #:huge #:musicglyph name)) - (markup - #:pad-to-box '(0 . 36) '(-2 . 2) #:typewriter name - #:pad-to-box '(-2 . 4) '(-3.5 . 3.5) #:huge #:musicglyph name))))) - -#(define-markup-list-command (doc-chars layout props names) (list?) - (define (min-length lst n) - "(min (length lst) n)" - (if (or (null? lst) (<= n 0)) - 0 - (1+ (min-length (cdr lst) (1- n))))) - (define (doc-chars-aux names acc) - (let* ((n (min-length names 2)) - (head (take names n)) - (tail (drop names n))) - (if (null? head) - (reverse! acc) - (doc-chars-aux tail - (cons (make-line-markup (map make-doc-char-markup head)) - acc))))) - (interpret-markup-list layout props (doc-chars-aux names (list)))) diff --git a/input/manual/fretted-headword.ly b/input/manual/fretted-headword.ly deleted file mode 100644 index dc97841f20..0000000000 --- a/input/manual/fretted-headword.ly +++ /dev/null @@ -1,144 +0,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" % -%*****************************************************************% - -\version "2.12.0" - -#(set-global-staff-size 15) -\paper { - line-width = 17\cm - indent = 0\cm -} - -\layout { - \context { - \Score - \remove "Bar_number_engraver" - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -%%%% shortcuts -% fingering orientations -sfol = \set fingeringOrientations = #'(left) -sfor = \set fingeringOrientations = #'(right) -sfod = \set fingeringOrientations = #'(down) -sfou = \set fingeringOrientations = #'(up) - -% string number orientations -ssnol = \set stringNumberOrientations = #'(left) %(down right up) -ssnou = \set stringNumberOrientations = #'(up) -ssnod = \set stringNumberOrientations = #'(down) -ssnor = \set stringNumberOrientations = #'(right) - -% define fingering offset -FO = #(define-music-function (parser location offsetX offsetY) (number? number?) -#{ - \once \override Voice.Fingering #'extra-offset = #(cons $offsetX $offsetY) -#}) - -% markups -rit = \markup \center-align { \bold { \italic { " rit." } } } -dim = \markup \center-align { \italic { " dim." } } -andantino = \markup \left-align { \italic { \bold { \fontsize #2.5 { "Andantino" } } } } -benmarcato = \markup { \italic { \bold { "il canto ben marcato" } } } -pdolce = #(make-dynamic-script (markup #:line (#:dynamic "p" #:normal-text #:italic "dol."))) - -%%% THE MUSIC %%% - -melody = \relative c { - \clef "treble_8" - \key d \major - \time 4/4 - \voiceOne - \sfol - e,32 a' c e - e, a c e - e,, a' c e - e, a c e - f4\rest 4-> | % m. 1 - - e,,,32 gis' b e - e, gis b e - e,, gis' b e - e, gis b e - f4\rest \FO #'0.4 #'0.5 4 | % m. 2 - - d4\rest -> d4\rest^\rit 4-> | % m. 3 - 1 | % m. 4 - - \bar "||" - \key a \minor - R1 % m. 5 - - e'4^\benmarcato e8. d16-4 - d4-4 \times 2/3 { \sfou \FO #'-0.3 #'0.6 4 b8 } | % end of m. 6 - - \FO #'-0.3 #'0.3 - 4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7 - - \FO #'-0.3 #'0.3 - 4 \times 2/3 { \sfol \FO #'0.3 #'0.0 4 e8 } e4 % beg of m. 8 - \times 2/3 { \sfou 4 c8 } | % end of m. 8 - - b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 4 e | % end of m. 9 - - e4 e8. d16-4 d4 \times 2/3 { c4 b8 } | % m. 10 - - \times 2/3 { a4 a8 b4 c8 } % beg of m. 11 - \sfou \FO #'-0.3 #'0.3 - 4^\< \times 2/3 { e4 8\! } | % end of m. 11 -} - -bass = \relative c { - \key d \major - \time 4/4 - \voiceTwo - - e,8\fp[ e'] e,[ e'] e, \sfol c, | % m. 1 - - e,,8\fp[ e'] e,[ e'] e, \sfod \FO #'0.2 #'-0.2 % beg m. 2 - \sfol \FO #'0.3 #'0.0 b | % end m. 2 - - e,,8 e' gis e e, e' gis_\dim e | % m. 3 - - e,1 | % m. 4 - - %% new section starts here in A minor - #(revert-auto-beam-setting '(end 1 12 4 4) 1 4) - #(revert-auto-beam-setting '(end 1 12 4 4) 3 4) - \once \override TextScript #'staff-padding = #1.7 - \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5 - - \times 2/3 { a,8\pdolce e' a c a e } % beg m. 6 - \times 2/3 { e,8 \sfou c gis e } | % end m. 6 - - \times 2/3 { a,8 a c e, b' a, e' a c a e } | % m. 7 - - \times 2/3 { f,8 f' a \sfol \FO #'0.3 #'-0.5 a f fis, d' a' d a d, } | % m. 8 - - \times 2/3 { 8 d' g d' g, d % beg m. 9 - \sfod \FO #'0.0 #'-2.0 \sfou b gis e } | % end m. 9 - - \times 2/3 { a,8 e' a c a e e, e' gis c gis e } | % m. 10 - - \times 2/3 { a,8 e' a b a e f, f' a d a f } | % m. 11 -} - -\score { - \new Staff = "guitar" << - \context Voice = "upper" { \melody } - \context Voice = "lower" { \bass } - >> - \layout { - \context { - \Score - \override Fingering #'staff-padding = #'() - \override TupletNumber #'stencil = ##f - \override TupletBracket #'bracket-visibility = ##f - } - } - \midi { } -} diff --git a/input/manual/keyboard-headword.ly b/input/manual/keyboard-headword.ly deleted file mode 100644 index 8793965d37..0000000000 --- a/input/manual/keyboard-headword.ly +++ /dev/null @@ -1,241 +0,0 @@ -\version "2.12.0" -\include "english.ly" - -#(set-global-staff-size 15) -\paper { - line-width = 16\cm - indent = 0\cm -} - -% NR 2.2 Keyboard instruments - -% M. Ravel, Sonatine (1905) -% First movement - -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} - -fermataLong = \markup { - \override #'(direction . 1) - \override #'(baseline-skip . 2) { - \dir-column { - \musicglyph #"scripts.ufermata" - \text \italic \center-align long - } - } -} - -\new PianoStaff << - \set PianoStaff.connectArpeggios = ##t - \new Staff { - \time 2/4 - \key fs \major - << - \new Voice { - \voiceOne - fs''8 ( ^\markup { - \override #'(baseline-skip . 2.4) \column { - \line \bold { Un peu retenu } - \line \italic { très expressif } - } - } - es''16 - cs''16 - as'4 ) - | - fs''8 ( - es''16 - cs''16 - as'4 ) - | - fs''8 ( - es''16 - cs''16 - as'8 - cs''8 ) - | - } - \new Voice { - \voiceTwo - gs'8\rest \ppp - fs'4 ( - es'8 ) - | - gs'8\rest - fs'4 ( - es'8 ) - | - gs'8\rest - fs'4 ( - es'8 ) - | - } - >> - \clef bass - 4 ( ^ \markup \bold { Rall. } - \override Script #'stencil = #(lambda (grob) - ly:script::print (grob-interpret-markup grob fermataLong)) - 8 ) \fermata - \noBeam - \clef treble - \slurUp - \once \override Hairpin #'to-barline = ##f - 8 ( \pp \> - | - 4. \! ) ^\markup \bold { a Tempo } - \slurUp - 8 ^\( \> - | - 4. \! \) - << - \new Voice { - \voiceOne - 8 ( - | - cs'8 ^\markup \bold { Rallentando } - b16 - cs'16 - d'8 - e'16 - fs'16 - | - 4. ) - s8 - | - r8 - 4 \arpeggio - e''16 ( ^\markup \bold { Lent } - fs''16 - | - \voiceTwo - 2 ) - | - } - \new Voice { - \voiceTwo - s8 - | - 4 \< - 4 \> - | - s4. \! - \slurUp - \once \override Script #'direction = #UP - 8 ( \accent - | - 4. ) - \once \override Hairpin #'to-barline = ##f - 8 \ppp \> - | - s8 \! - \stemDown - \once \override Script #'direction = #UP - \ottava #1 - \voiceOne - \once \override PianoStaff.Arpeggio #'padding = #0.8 - 4. \arpeggio \fermata - \ottava #0 - \bar "|." - } - >> - } - \new Staff << - \set Staff.pedalSustainStyle = #'bracket - \key fs \major - \clef bass - \new Voice { - \voiceOne - ds'4 \tenuto - cs'4 \tenuto - | - ds'4 \tenuto - cs'4 \tenuto - | - ds'4 \tenuto - cs'4 \tenuto - | - s8 - \clef treble - 8 [ - \clef bass - 8 \fermata ] - s8 - | - fs8\rest - \clef treble - 4 \tenuto - s8 - | - fs8\rest - \clef treble - 4 \tenuto - s8 - | - s2 - | - ds8\rest - \clef treble - 4 - \clef bass - s8 - | - s8 - \clef treble - 4 \arpeggio - \clef bass - s8 - | - s8 - \clef treble - 4. \arpeggio \fermata - | - } - \new Voice { - \voiceTwo - ds'8 [ ( - < ds bs >8 - cs'8 - < ds as >8 ] ) - | - ds'8 [ ( - < ds bs >8 - cs'8 - < ds as >8 ] ) - | - ds'8 [ ( - < ds bs >8 - cs'8 - < ds as >8 ] ) - | - \once \override Script #'outside-staff-priority = #100 - \once \override TextScript #'outside-staff-priority = #500 - 4. \fermata _\markup \italic { ped. } - 8 ( - | - 4. ) \sustainOn - \clef bass - 8 \( \sustainOff - | - 4. \) \sustainOn - \clef bass - 8 ( \sustainOff - | - 4 - 4 - | - 4. ) \sustainOn - 8 ( \sustainOff - | - 4. ) \sustainOn - \slurUp - 8 ( \sustainOff \sustainOn - | - 2 ) \sustainOff \sustainOn - | - } - >> ->> diff --git a/input/manual/pitches-headword.ly b/input/manual/pitches-headword.ly deleted file mode 100644 index d69c44a97f..0000000000 --- a/input/manual/pitches-headword.ly +++ /dev/null @@ -1,143 +0,0 @@ -\version "2.12.0" -\include "english.ly" -#(set-global-staff-size 15) -\paper{ - ragged-right=##t - line-width=17\cm - indent=0\cm -} - -\layout { - \context { \Score - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -% NR 1.1 Pitches - -% L. v. Beethoven -% Piano sonata 21 - Dem Grafen von Waldstein Gewidmet -% chorale at measures 34 - 40+ - -\new PianoStaff << - - % RH Staff - \new Staff << - - % RH Voice 1 - \new Voice { - \set Score.currentBarNumber = #34 - \voiceOne - gs''2 ( ^ \markup \italic { dolce e molto ligato } - fs''4 - e''4 - | - ds''2 - cs''2 ) - | - ds''2 ( - e''4 - fs''4 - | - 2 - 2 ) - | - \oneVoice - \clef bass - 2 ( - 4 - 4 - | - 2 - 2 ) - | - \voiceOne - b2 %( - cs'4 - ds'4 - | - \clef treble - 4 %) - r4 r2 - } - - % RH Voice 2 - \new Voice { - \voiceTwo - \override Staff.DynamicLineSpanner #'staff-padding = #2.5 - 2 \p - 4 - 4 - | - 2 - e'2 - | - \once \override TextScript #'staff-padding = #2.5 - 2 _ \markup \italic { cresc. } - b'4 - 4 - | - b'2. ( \sf \> - a'4 ) - \clef bass - | \break - s1 \p - | - s1 - | - 4 ( - 2. ) - | - s4 - r4 r2 - } - - >> - - % LH Staff - \new Staff { - \override Staff.SustainPedalLineSpanner #'staff-padding = #5 - 2 ( \sustainOn - 4 \sustainOff - 4 - | - 2 - 2 ) \sustainOn - | - \clef bass - \slurDown - 2 ( \sustainOff - 4 - 4 \sustainOn - | - \clef treble - \voiceOne - << - { - 2 - 2 ) - } - \new Voice { - \voiceTwo - b1 \sustainOff - } - >> - \oneVoice - | - %\break - \clef bass - 2 ( - 4 - 4 - | - 2 - 2 ) \sustainOn - | - 1 ( \sustainOff - | - 4 ) - r4 r2 - } - ->> diff --git a/input/manual/repeats-headword.ly b/input/manual/repeats-headword.ly deleted file mode 100644 index faba778a12..0000000000 --- a/input/manual/repeats-headword.ly +++ /dev/null @@ -1,124 +0,0 @@ -\version "2.12.0" -\include "english.ly" -#(set-global-staff-size 15) -\paper { - line-width = 16\cm - indent = 0\cm -} - -% NR 1.7 Repeats - -% Beethoven, Op. 57 -% Piano sonata 23 - Dem Grafen Franz von Brunswick Gewidmet -% Movt II, Andante con moto -% Measures 9 - 16 - -\new PianoStaff << - - \new Staff = RH { - \clef bass - \key df \major - \time 2/4 - \set Score.currentBarNumber = #9 - \bar "|:" - 4 ( - 8.. - 32 - | - 8. ) - 16 ( - 8 - 8 ) - | - 4 ( - 8.. - 32 - | - 8. ) - \slurDown - 16 ( - << - { - \voiceTwo - gf8 - f8 ) - } - \new Voice { - \voiceOne - 16 - ef'16 - 8 - } - >> - \oneVoice - | - 4 ( - 8.. - 32 - \clef treble - | - 8. ) - 16 ( - 16 - gf'16 - 8 ) - | - \slurUp - 4 - \change Staff = LH - \voiceOne - 4 - | - 4. - \change Staff = RH - \oneVoice - r8 - \clef bass - \bar ":|" - } - - \new Staff = LH { - \clef bass - \key df \major - \time 2/4 - 4 ( - 8.. - 32 - | - 8. ) - 16 ( - 8 - 8 ) - | - 4 ( - 8.. - 32 - | - 8. ) - 16 ( - 8 - ) - | - 4 ( - 8.. - 32 - | - 8. ) - 16 ( - 8 - 8 ) - | - \voiceTwo - gf,4 ( - af,4 ~ ) - | - af,16. [ ( - gf,32 - f,16. - ef,32 ] - df,8 ) - \oneVoice - r8 - } - ->> diff --git a/input/manual/rhythms-headword.ly b/input/manual/rhythms-headword.ly deleted file mode 100644 index a48f05ca9e..0000000000 --- a/input/manual/rhythms-headword.ly +++ /dev/null @@ -1,209 +0,0 @@ -\version "2.12.0" -\include "english.ly" -#(set-global-staff-size 15) -\paper { - line-width = 16\cm - indent = 0\cm -} - -% NR 1.2 Rhythms - -% Beethoven, Op. 81a -% Piano sonata 26 - Das Lebewohl -% Movt II - Abwesenheit -% Measures 31 - 34 - -\layout { - \context { - \Score - \override SpacingSpanner #'base-shortest-duration = - #(ly:make-moment 1 40) - %\override SpacingSpanner #'strict-grace-spacing = ##t - } -} - -\new PianoStaff << - - % RH Staff - \new Staff { - \clef treble - \key c \minor - \time 2/4 - \set Score.currentBarNumber = #31 - - 8 ( -\markup { - \override #'(baseline-skip . 2) \italic \column { - \line { a tempo } - cantabile - } - } - 8 ) - ~ - 8 ( - 16 - 16 ) - - | - - \afterGrace - 8 [ ( - { - e''16 [ - f''16 - e''16 - d''16 ] - } - 16 - 16 ] ) - \once \override TextScript #'padding = #3.8 - 16 ( \staccato -\markup { \italic cresc. } - 16 ) \staccato - 32 ( - 32 ) - 32 ( - 32 ) - - | - - \once \override DynamicLineSpanner #'padding = #2 - b''32 ( \p \> - c'''32 - d'''32 - c'''32 ) \! - g''8 ( - ~ - g''32 [ - a''64 - g''64 ) ] - - a''64 ( [ - g''64 ) - bf''64 ( - a''64 ) ] - - bf''64 ( [ - a''64 ) - c'''64 ( - b''64 ) ] - - c'''128 ( [ - b''128 - d'''128 - c'''128 - f'''64 - f''64 ) ] - - | - - \afterGrace - 8 [ ( - { - e''16 [ - f''16 - e''16 - d''16 ] - } - 16 - 16 ] ) - 16 ( \staccato -\markup { \italic cresc. } - 16 ) \staccato - 32 ( - 32 ) - 32 ( - 32 ) - } - - % LH Staff - \new Staff { - \clef bass - \key c \minor - \time 2/4 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - | - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - | - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - | - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - - 32 - c'32 - 32 - c'32 - } - ->> diff --git a/input/manual/screech-boink.ly b/input/manual/screech-boink.ly deleted file mode 100644 index a49cd240db..0000000000 --- a/input/manual/screech-boink.ly +++ /dev/null @@ -1,73 +0,0 @@ -\version "2.12.0" -\header { - title = "Screech and boink" - subtitle = "Random complex notation" - composer = "Han-Wen Nienhuys" -} - -\score { - \context PianoStaff << - \new Staff = "up" { - \time 4/8 - \key c \minor - - - << { - \revert Stem #'direction - \change Staff = down - \set subdivideBeams = ##t - g16.[ - \change Staff = up - c'''32 \change Staff = down - g32 \change Staff = up - c'''32 \change Staff = down - g16] - \change Staff = up - \stemUp - \set followVoice = ##t - c'''32([ b''16 a''16 gis''16 g''32)] } \\ - { s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] } \\ - { s4 \autoBeamOff d''8.. f''32 } \\ - { s4 es''4 } - >> - } - - \new Staff = "down" { - \clef bass - \key c \minor - \set subdivideBeams = ##f - \override Stem #'french-beaming = ##t - \override Beam #'thickness = #0.3 - \override Stem #'thickness = #4.0 - g'16[ b16 fis16 g16] - << \makeClusters { - as16 - - - } \\ - { - \override Staff.Arpeggio #'arpeggio-direction =#down - 4\arpeggio } - >> - } - >> - - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 8) - } - } - - - - \layout { - ragged-right = ##t - - \context { - \Staff - \consists Horizontal_bracket_engraver - } - - } -} diff --git a/input/manual/script-chart.ly b/input/manual/script-chart.ly deleted file mode 100644 index 5dc23d0dae..0000000000 --- a/input/manual/script-chart.ly +++ /dev/null @@ -1,58 +0,0 @@ -\version "2.12.0" - -% this chart is used in the manual too. - -\header { - texidoc ="@cindex Feta scripts - -This chart shows all articulations, or scripts, that feta font contains. - -" -} - -\score { - << - \override Score.LyricText #'font-family = #'typewriter - \override Score.LyricText #'font-shape = #'upright - \context Staff { - \set Score.timing = ##f - \set Score.barAlways = ##t - \override Score.SeparationItem #'padding = #2.5 - \override Staff.BarLine #'transparent = ##t - c''\accent c''\marcato c''\staccatissimo c''\espressivo - c''\staccato c''\tenuto c''\portato - c''\upbow c''\downbow c''\flageolet - c''\thumb c''^\lheel c''\rheel - c''^\ltoe c''\rtoe c''\open - c''\stopped c''\turn c''\reverseturn - c''\trill c''\prall c''\mordent - c''\prallprall c''\prallmordent c''\upprall - c''\downprall c''\upmordent c''\downmordent - c''\pralldown c''\prallup c''\lineprall - c''\signumcongruentiae c''\shortfermata c''\fermata - c''\longfermata c''\verylongfermata c''\segno - c''\coda c''\varcoda - } - \context Lyrics \lyricmode { - accent__ marcato__ staccatissimo__ espressivo__ - staccato__ tenuto__ portato__ - upbow__ downbow__ flageolet__ - thumb__ lheel__ rheel__ - ltoe__ rtoe__ open__ - stopped__ turn__ reverseturn__ - trill__ prall__ mordent__ - prallprall__ prallmordent__ upprall__ - downprall__ upmordent__ downmordent__ - pralldown__ prallup__ lineprall__ - signumcongruentiae__ shortfermata__ fermata__ - longfermata__ verylongfermata__ segno__ - coda__ varcoda__ - } - >> - \layout { - line-width = 5.1\in - indent = 0.0\mm - } - } - - diff --git a/input/manual/simultaneous-headword.ly b/input/manual/simultaneous-headword.ly deleted file mode 100644 index a6b5ff8e47..0000000000 --- a/input/manual/simultaneous-headword.ly +++ /dev/null @@ -1,313 +0,0 @@ -\version "2.12.0" -\include "english.ly" -#(set-global-staff-size 15) -\paper{ - ragged-right=##t - line-width=17\cm - indent=0\cm -} - -\layout { - \context { \Score - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -% NR 1.5 Simultaneous notes - -% L. v. Beethoven, Op. 111 -% Piano sonata 32 -% Movt II - Arietta - Adagio molto semplice e cantabile -% measures 108 - 118 - -\layout { - \context { - \Score - \override SpacingSpanner #'base-shortest-duration = - #(ly:make-moment 1 18) - \override NonMusicalPaperColumn #'line-break-system-details = - #'((alignment-offsets . (0 -12))) - } -} - -trillflat = - \once \override TrillSpanner #'(bound-details left text) = - #(markup #:translate-scaled '(-0.05 . -1) - #:concat (#:musicglyph "scripts.trill" - #:translate '(-0.5 . 1.9) #:fontsize -7 #:flat)) - - -\new PianoStaff << - - % RH - \new Staff << - \clef treble - \key c \major - \time 9/16 - \set Score.currentBarNumber = #108 - - % RH voice 1 - \new Voice { - - \voiceOne - s4. - s8. - - | - - s4. - a''8 \p \> [ ( - g''16 ] ) - - | - - g''4. - af''8 [ ( - g''16 ] ) - - | - - g''8. [ - g''8. - g''8. \pp ] - - | - - g''8. [ - af''8. - af''8. ] - - | - - af''8. [ - af''8. - af''8. ] - - | - \break - - \trillflat - af''4. \startTrillSpan - ~ - af''8. - ~ - - | - - af''4. - ~ - af''8. - ~ - - | - - \oneVoice - 8. [ - a''8. \p \< - bf''8. ] - ~ - - | - - bf''8. [ - b''8. - c'''8. ] - ~ - - \bar "||" - - \key ef \major - c'''8. [ - cs'''8. \f ] \stopTrillSpan - r8. - - } - - % RH voice 2 - \new Voice { - \voiceTwo - \override Voice.TrillSpanner #'direction = #down - d''4. \f \startTrillSpan - ~ - d''8. - ~ - - | - - d''4. - ~ - d''8. - ~ - - | - - d''8. \stopTrillSpan - \trillflat - d''4. \startTrillSpan - ~ - - | - - d''4. - ~ - d''8. - ~ - - | - - d''4. - ~ - d''8. - ~ - - | - - d''4. - ~ - d''8. \stopTrillSpan - ~ - - | - - \trillflat - d''4. \startTrillSpan - ~ - d''8. - ~ - - | - - d''4. - ~ - d''8. - ~ - - | - - \once \override NoteColumn #'ignore-collision = ##t - \once \override NoteHead #'transparent = ##t - \once \override Dots #'transparent = ##t - \once \override Stem #'transparent = ##t - d''8. \stopTrillSpan - s4. - - | - - s8. - s8. - - } - - >> - - % LH staff - \new Staff { - \clef bass - \key c \major - \time 9/16 - - r8. - r8. - 8 [ ( - 16 ] ) - - | - - 4. - \clef treble - c''8 [ ( - b'16 ] ) - - | - - b'4. - c''8 [ ( - b'16 ] ) - - | - - b'8. [ - b'8. - b'8. ] - - | - - b'8. [ - bf'8. ] - \clef bass - 8 [ ( - 16 ] ) - - | - - 4. - \clef treble - f'8 [ ( - bf16 ] ) - - | - - << - - \new Voice { - \voiceOne - \override Voice.TrillSpanner #'direction = #up - f'4. \startTrillSpan - ~ - f'8. - ~ - - | - - f'4. - ~ - f'8. - ~ - - | - - f'8. \stopTrillSpan - } - - \new Voice { - \voiceTwo - \override Voice.TrillSpanner #'direction = #down - bf8. [ - bf8. - bf8. ] - - | - - bf8. [ - bf8. - bf8. ] - - | - - bf8. - } - - >> - - \oneVoice - r8. - r8. - - | - - r8. - r8. - r8. - \clef bass - - | - - \key ef \major - r8. - r8. - r8. - - } - ->> diff --git a/input/manual/staff-headword.ly b/input/manual/staff-headword.ly deleted file mode 100644 index f7fa2e4145..0000000000 --- a/input/manual/staff-headword.ly +++ /dev/null @@ -1,119 +0,0 @@ -\version "2.12.0" -\include "catalan.ly" -#(set-global-staff-size 15) -\paper{ - ragged-right=##t - line-width=17\cm - indent=0\cm -} - -\header { - mutopiatitle = "Napolitan Dance (Swan Lake)" - mutopiacomposer = "TchaikovskyPI" - mutopiainstrument = "Piano, Trumpet, Percussion" - source = "New arrangement" - style = "Classical" - copyright = "Public Domain" - maintainer = "Laurence Sardain" - lastupdated = "2006/Dec/21" -% title = "Le Lac des Cygnes" -% subtitle = "Danse Napolitaine" -% composer = "Piotr Ilitch Tchaïkovski" -% arranger = "arr. Laurence Sardain" -% footer = "Mutopia-2006/12/22-896" -} - -trompette = \relative do'' { - \clef treble - \key mib \major - \time 2/4 - R2^\markup { \italic Comodo } | - r8 \once \override TextScript #'padding = #2.0 - sib16-.^\markup {\dynamic p \italic grazioso} do-. mib( re)-. do-. sib-. | - re8-. r8 re4->( | - re8) do16-. re-. mib( re) do-. re-. | - do8-. r8 sib4-> | -} - -tambourin = \relative do' { - \time 2/4 - r8 do16 do do8 do | - r8 do16 do do8 do | - r8 do r do | - r8 do16 do do8 do | - r8 do r do | -} - -tambourinMidi = \drummode { - \time 2/4 - r8 tamb16 tamb tamb8 tamb | - r8 tamb16 tamb tamb8 tamb | - r8 tamb r tamb | - r8 tamb16 tamb tamb8 tamb | - r8 tamb r tamb | -} - -upper = \relative do' { - \clef treble - \key mib \major - \time 2/4 - r8\p 16-. -. 8-. -. | - r8 16-. -. 8-. -. | - r8 16-. -. 8-. -. | - r8 16-. -. 8-. -. | - r8 16-. -. 8-. -. | -} - -lower = \relative do { - \clef bass - \key mib \major - \time 2/4 - mib4-. r4 | - sib-. r | - fa'-. r | - sib, r | - mib4-. r4 | -} - - -\score { - << - \context Staff = "trumpet" << - \set Staff.instrumentName = \markup { "Trumpet" \concat{ B \teeny \raise #0.4 \flat } } - \transpose sib do' - \trompette - >> - \context RhythmicStaff = "tambourin" << - \set Staff.instrumentName = "Tambourine" - \tambourin - >> - \context PianoStaff = "prima" << - \set PianoStaff.instrumentName = "Piano " - \context Staff = "uppera" \upper - \context Staff = "lowera" \lower - >> - >> - \layout { } -} -\score { - << - \context Staff = "trumpet" { - \set Staff.midiInstrument = "trumpet" - \trompette - } - \context DrumStaff = "tambourin" { - \tambourinMidi - } - \context Staff = "piano" << - \upper - \lower - >> - >> - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 72 4) - } - } -} - diff --git a/input/manual/text-headword.ly b/input/manual/text-headword.ly deleted file mode 100644 index 40af604f84..0000000000 --- a/input/manual/text-headword.ly +++ /dev/null @@ -1,236 +0,0 @@ -\version "2.12.0" -\include "english.ly" -#(set-global-staff-size 15) -\paper{ - line-width = 16\cm - indent = 0\cm -} - -\layout { - \context { \Score - \override PaperColumn #'keep-inside-line = ##t - \override NonMusicalPaperColumn #'keep-inside-line = ##t - } -} - -% NR 1.8 Text - -% L. v. Beethoven, Op. 110 -% Piano sonata 31 -% measures 1 - 7 - -\layout { - \context { - \Score - \override SpacingSpanner #'base-shortest-duration = - #(ly:make-moment 1 20) - %\override NonMusicalPaperColumn #'line-break-system-details = - %#'((alignment-offsets . (0 -12))) - } -} - -\new PianoStaff << - - % RH staff - \new Staff { - \clef treble - \key af \major - \time 3/4 - - \once \override TextScript #'staff-padding = #4 - 4. ( - _ \markup { \dynamic p \italic { con amabilità } } - 8 ) - 8. [ - 16 ] - - | - - 4 - 2 - _ \markup { \italic { ten. } } - - | - - << - - \new Voice { - \voiceOne - ef''4. ( - df''8 [ ) - ef'' ( - f'' ) ] - - | - - \once \override TextScript #'staff-padding = #4 - ef''8. ( - _ \markup { \italic { tranqu. } } - d''16 ) - df''8 \trill \fermata - _ \markup { \italic { ten. } } - } - - \new Voice { - \voiceTwo - af'4. - af'8 [ - af'8 - af'8 ] - - | - - g'4 - g'8 - } - - >> - - \oneVoice - \once \override TextScript #'staff-padding = #4 - df''32 - _ \markup { \italic dolce } - c''32 - df''32 - ef''32 - \acciaccatura { df''[ ef'' ] } - f''8 - ef''16 - df''16 - - | - \break - \overrideProperty "Score.NonMusicalPaperColumn" - #'line-break-system-details #'((alignment-offsets . (0 -12))) - - c''4. ( - ^ \markup \italic { cantabile, con intimissimo sentimento, - ma sempre molto dolce e semplice } - ef''4 - af''8 ) - - | - - af''4 ( - g''2 ) - - | - - bf''4. ( - g''4 - ef''8 ) - - | - } - - % LH - \new Staff { - \clef bass - \key af \major - \time 3/4 - - 4. ( - 8 ) - 8. [ - 16 ] - - | - - 4 - 2 ^ \markup { \italic ten. } - - | - - << - - \new Voice { - \voiceOne - ef8 [ ( - af8 - c'8 - bf8 ) - c'8 ( \staccato - df'8 ] ) \staccato - - | - - bf4 - bf8 ^ \markup { \italic ten. } - } - - \new Voice { - \voiceTwo - c4. ( - f8 [ ) - ef8 ( \staccato - df8 ] ) \staccato - - | - - ef4 - ef8 \fermata - } - - >> - - \oneVoice - r8 - r4 - \clef treble - - | - - \override Staff.SustainPedalLineSpanner #'outside-staff-priority = #1000 - \override Staff.SustainPedalLineSpanner #'staff-padding = #7 - \once \override TextScript #'padding = #2 - af16 \sustainOn - ^ \markup \italic { non staccato } - _ \markup \italic { molto \concat {\dynamic {p},} sempre tranquillo - ed egualmente, non rubato } - 16 - 16 - 16 - af16 - 16 - 16 - 16 - af16 \sustainOn - 16 - 16 - 16 - - | - - bf16 \sustainOn - 16 - 16 - 16 - bf16 \sustainOn - 16 - 16 - 16 - bf16 - 16 - 16 - 16 - - | - - \override Staff.SustainPedalLineSpanner #'staff-padding = #4 - df'16 \sustainOn - 16 - 16 - 16 - df'16 - 16 - 16 - 16 - df'16 \sustainOn - 16 - 16 - 16 - - | - } - ->> diff --git a/input/manual/unfretted-headword.ly b/input/manual/unfretted-headword.ly deleted file mode 100644 index de75aa582c..0000000000 --- a/input/manual/unfretted-headword.ly +++ /dev/null @@ -1,223 +0,0 @@ -% #!lilypond lcp-extract.ly -*- coding: utf-8; -*- - -%%% -%%% les-cinq-pieds: -%%% extract for the lilypond documentaton project -%%% - -%% Title: Les cinq pieds -%% Composer: David Séverin -%% Date: Juillet 2007 -%% Instrument: Violon Solo -%% Dedication: A mon épouse Lívia De Souza Vidal -%% Additional: avec l'aide de Krzysztof Wagenaar - -%% Statement: - -%% Here by, I, the composer, agree that this extract of my composition -%% be in the public domain and can be part of, used and presented in -%% the Lilypond Documention Project. - -%% Statement Date: Octber the 9th, 2008 - - -\version "2.12.0" -#(set-global-staff-size 15) - -%%% -%%% Abreviations -%%% - -db = \markup { \musicglyph #"scripts.downbow" } -dub = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" } } -dubetc = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" "..." } } - -ub = \markup { \musicglyph #"scripts.upbow" } -udb = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" } } -udbetc = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" "..." } } - -fermaTa = \markup \musicglyph #"scripts.ufermata" - -accel = \markup \tiny \italic \bold "accel..." -ritar = \markup \tiny \italic \bold "ritar..." - -ignore = \override NoteColumn #'ignore-collision = ##t - - -%% -%% Strings -%% - -svib = \markup \small "s. vib." -pvib = \markup \small "p. vib." -mvib = \markup \small "m. vib." -sulp = \markup \small "s.p." -norm = \markup \small "n." - -quatre = \markup \teeny "IV" - - -%% -%% Shifting Notes -%% - -shift = \once \override NoteColumn #'force-hshift = #0.9 -shifta = \once \override NoteColumn #'force-hshift = #1.2 -shiftb = \once \override NoteColumn #'force-hshift = #1.4 - - -%% -%% Hairpin -%% - -% aniente = "a niente" -aniente = \once \override Hairpin #'circled-tip = ##t - - -%% -%% Tuplets -%% - -tupletbp = \once \override Staff.TupletBracket #'padding = #2.25 - - -%% -%% Flag [Note Head - Stem] -%% - -noflag = \once \override Stem #'flag-style = #'no-flag - -%%% -%%% Functions -%%% - -#(define-markup-command (colmark layout props args) - (markup-list?) - (let ((entries (cons (list '(baseline-skip . 2.3)) props) - )) - (interpret-markup layout entries - (make-column-markup - (map (lambda (arg) - (markup arg)) - (reverse args)))))) - - -%%% -%%% Instruments -%%% - -ViolinSolo = \relative c' { - - \voiceOne - - \set Score.markFormatter = #format-mark-box-numbers - \override Score.VoltaBracket #'font-name = #"sans" - \override Score.VoltaBracket #'extra-offset = #'(0 . 1) - \override SpacingSpanner #'uniform-stretching = ##t - - - %% Measure 1 - \time 25/8 - \mark \default - r2 ^\markup \colmark { \italic "fatigué" " " \bold "lentement"} r4 r r8 - << - { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \svib } \shifta e1 } \\ - { d2 \open \mf \< ~ \aniente d1 \! \> r4 r ^\markup \colmark { " " \fermaTa } \! } - >> - - - %% Measure 2 - \time 7/4 - \set Score.repeatCommands = #'((volta "1) n. 2) s.p.")) - << - { \shift d2 \glissando ^\markup \colmark { \quatre \udbetc } \shifta e1 } \\ - { d2 \open \mf \< ~ d1 \! \> ~ d4 ^\markup \colmark { " " \fermaTa } \! } - >> - \set Score.repeatCommands = #'((volta #f)) - - - %% Measure 3 - \time 15/4 - << - { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \pvib \norm } \shifta e1 \glissando d2 } \\ - { d2 \open \mf \< ~ d1 ~ d2 \ff ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp} - >> - \break - - %% Measure 4 - \time 4/4 - \stemUp - \tupletDown - \times 2/3 { d4 ^\markup \colmark { \quatre \db \accel } d d } - \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d } - - - - %% Measure 5 - \time 5/4 - \tupletbp \times 2/3 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d } - \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db \sulp } d _\open d } - \tupletbp \times 2/3 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d } - d2 \ff ^\markup \colmark { " " \pvib } \> - - - %% Measure 6 - \time 5/8 - \once \override Beam #'grow-direction = #RIGHT % \featherDurations #(ly:make-moment 2 3) - { d16 \staccato - [ d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato] - } - \break - - - %% Measure 7 - \time 7/4 - \tupletbp \times 2/3 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d } - \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db } d _\open d } - \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d } - \times 2/3 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d } - \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ } - - - %% Measure 8 - d4 ^\markup \colmark { " " " " \pvib \norm } - deh2 d dih \< - - - %% Measure 9 - << - { \shift d2 \glissando ^\markup \colmark { \quatre } \shifta e1 } \\ - { d2 \open ~ d1 ^\markup \colmark { " " " " \mvib } } - >> - \breathe r4 \! - -} - - -%%% -%%% Score -%%% - -\score { - - << - \relative << - \new Staff \ViolinSolo - >> - - \override Score.Rest #'transparent = ##t - \set Score.defaultBarType = "empty" - >> - - \layout { - indent = 0.0 - \context { - \Staff - \remove "Time_signature_engraver" - } - \context { - \Score - \remove "Bar_number_engraver" - } - } -} diff --git a/input/manual/wind-headword.ly b/input/manual/wind-headword.ly deleted file mode 100644 index 6d8fa0a27b..0000000000 --- a/input/manual/wind-headword.ly +++ /dev/null @@ -1,46 +0,0 @@ -\version "2.12.0" -#(set-global-staff-size 15) -\paper { - line-width = 16\cm - indent = 0\cm -} - -% NR 2.whatever Wind - -% Tchaikovsky -% Nutcracker Suite, VII Dance of the Merlitons -\score { - \new StaffGroup << - \new Staff \relative c'' { - \set Staff.instrumentName = "Flauto I,II" - \once \override Score.RehearsalMark #'self-alignment-X = #-1 - \once \override Score.RehearsalMark #'break-align-symbols = -#'(time-signature) - \once \override Score.TimeSignature -#'break-align-anchor-alignment = #LEFT - \once \override Score.RehearsalMark #'padding = #4 - \mark \markup \large \bold {Moderato assai} - \key d \major - \time 2/4 - \compressFullBarRests - R2*2 - 16-.\p -. -. -. 8-. -. - -.\< 32( 4--)\mf - 16-. -. -. -. - (\> ) -. -.\! - 4--\sf \acciaccatura {8} 4--\mf - } - \new Staff \relative c' { - \set Staff.instrumentName = "Flauto III" - \key d \major - \time 2/4 - \compressFullBarRests - R2*2_\markup{Gr.Fl.} - fis16-.\p e-. fis-. e-. fis8-. e-. - g8-.\< fis32( a d fis a4--)\mf - b16-. a-. b-. a-. g(\> fis) d-. a-.\! - g4--\sf \acciaccatura fis'8 g4--\mf - } - >> -} - diff --git a/input/mutopia-header.ly b/input/mutopia-header.ly deleted file mode 100644 index 4f14732018..0000000000 --- a/input/mutopia-header.ly +++ /dev/null @@ -1,37 +0,0 @@ -\version "2.12.0" -\header { - title = "Title" - subtitle = "Subtitle" - subsubtitle = "Subsubtitle" - opus = "Opus 1" - piece = "Piece" - composer = "Composer" - enteredby = "JCN" - instrument = "Instrument printed over the score" - - % mutopia headers. - mutopiatitle = "" - mutopiacomposer = "" - mutopiaopus = "" - mutopiainstrument = "File under these instruments at mutopia." - date = "1807" - - source = "Urtext edition" - - style = "Classical" - copyright = "Public Domain" - maintainer = "Jan Nieuwenhuizen" - maintainerEmail = "janneke@gnu.org" - lastupdated = "2001/Mar/19" - mutopiapublicdomain = "\\parbox{\paper-width}{\\thefooter\\quad\\small - \\\\This music is part of the Mutopia project, - \\texttt{http://www.mutopiaproject.org/}\\\\It has been typeset - and placed in the public domain by " + \maintainer + - ".\\\\Unrestricted modification and redistribution is permitted - and encouraged---copy this music and share it.}" - tagline = \mutopiapublicdomain - footer = "pre-Mutopia-2001/mm/dd-nn" -} - -%% the music -{ c'' } \ No newline at end of file diff --git a/input/mutopia/E.Satie/GNUmakefile b/input/mutopia/E.Satie/GNUmakefile deleted file mode 100644 index fecc9eade1..0000000000 --- a/input/mutopia/E.Satie/GNUmakefile +++ /dev/null @@ -1,9 +0,0 @@ - -depth = ../../.. - -examples=petite-ouverture-a-danser -LOCALSTEPMAKE_TEMPLATES=ly mutopia - -include $(depth)/make/stepmake.make - - diff --git a/input/mutopia/E.Satie/petite-ouverture-a-danser.ly b/input/mutopia/E.Satie/petite-ouverture-a-danser.ly deleted file mode 100644 index 268f413972..0000000000 --- a/input/mutopia/E.Satie/petite-ouverture-a-danser.ly +++ /dev/null @@ -1,157 +0,0 @@ -\header { - title = "Petite Ouverture à danser" - subtitle = "4" - source = "" - composer = "Erik Satie (1866-1925)" - enteredby = "jcn" - copyright = "Public Domain" -} - -\version "2.12.0" - -global = { - \key a \minor - \time 2/4 - s2*10 - \bar "||" - s2*11 - \bar "||" - \time 3/4 - s2. - \bar "||" - \time 2/4 - s2*4 - \bar "||" - \time 3/4 - s2.*2 - \bar "||" - \time 2/4 - s2*18 - \bar "|." -} - -i = \context Staff \relative c''\new Voice { - \voiceOne - - c8.( es16 bes4 ~ | bes8) r c8.( bes16 | des4 c8. bes16 | c4 ~ c8) r | - c4( f,8. as16 | bes4 ~ bes8) r | f8.( es16 f4 | es f) | - g8.( es16 f4 ~ | f) f8 r - - % Au mouvement - f4 ( g | a2 ~ | a) | a4-- a-> ~ | a8 r b!8.( a16 | b4) c-- ~ | - c8 r b8.( d16 | a4 ~ a8) r | d4( cis | c! b8. d16 | a4 ~ a8) r - - a8.( g16 a4 ~ a8) r | - - a4-> ~ a8 r | g8.( a16 fis4) | e8.( d16 e4 | fis ~ fis8) r - - d4( d-- ~ d8) r e4( f!2 ~ | - - f4 ~ f8) r | es4( g | as bes ~ | bes) c( | b!2) | c4( d | bes2) | c4~ c8 r | - - % copy from begin: 1-10 - c8.( es16 bes4 ~ | bes8) r c8.( bes16 | des4 c8. bes16 | c4 ~ c8) r | - c4( f,8. as16 | bes4 ~ bes8) r | f8.( es16 f4 | es f) | -% g8.( es16 f4 ~ | f) f8 r ? - g8.( es16 f4 ~ | f) ~ f8 r - -} - -ii = \context Staff \relative c'\new Voice{ - \voiceTwo - - r8 r | r r | r r | - r r | r r | r r | - r r | r bes r | r r | - r r - - % Au movement - r r | r r | r r | - r r | r r | r r | r r | - r r | r r | r r | - r r | - - r r r | - - r r | r r | r r | - r r | - - \change Staff=bass\voiceOne - r r r | r - \change Staff=treble\voiceTwo - r r | - - r r | r r | r r | - r r | r r | r r | - r r | r r | - - - % copy from begin: 1-10 - r8 r | r r | r r | - r r | r r | r r | - r r | r bes r | r r | - r r - -} - -lower = \context Staff \relative c \new Voice{ - - 4 | r | | r | - | r | | - | | r | - - % Au movement - | | r | | - r | | r | r | | - | r | - - r | - - r | | | r | - - r | | - - r | | | | - | | r | r - - % copy from begin: 1-10 - 4 | r | | r | - | r | | - | | r | - -} - -\score { - \context PianoStaff << - \new Staff = "treble" << - \global - \clef violin - \i - \ii - >> - \new Staff = "bass" << - \global - \clef bass - \lower - >> - >> - \layout { - \context { - \Score - \override SpacingSpanner #'spacing-increment = #3 - } - } - - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 60 4) - } - } - - -} - -%% Local Variables: -%% coding: utf-8 -%% End: diff --git a/input/mutopia/F.Schubert/GNUmakefile b/input/mutopia/F.Schubert/GNUmakefile deleted file mode 100644 index e592e2832f..0000000000 --- a/input/mutopia/F.Schubert/GNUmakefile +++ /dev/null @@ -1,8 +0,0 @@ -depth = ../../.. - -examples=morgenlied -LOCALSTEPMAKE_TEMPLATES=ly mutopia - -include $(depth)/make/stepmake.make - - diff --git a/input/mutopia/F.Schubert/standchen.ly b/input/mutopia/F.Schubert/standchen.ly deleted file mode 100644 index 10797cd6d9..0000000000 --- a/input/mutopia/F.Schubert/standchen.ly +++ /dev/null @@ -1,461 +0,0 @@ -#(ly:set-option 'old-relative) - -instrument = "Piano" - -\header { - title = "Ständchen" - subtitle = "(Serenade)" - subsubtitle = "Leise flehen meine Lieder" - opus = "D. 957 No. 4" - date = "August 1828" - composer = "Franz Schubert (1797-1828)" - poet = "Text by Ludwig Rellstab (1799-1860)" - enteredby = "JCN" - copyright = "public domain" - % instrument = \instrument - - % mutopia headers. - mutopiatitle = "Standchen" - mutopiasubtitle = "Leise flehen meine Lieder" - mutopiacomposer = "Franz Schubert (1797-1828)" - mutopiapoet = "Ludwig Rellstab (1799-1860)" - mutopiaopus = "D957.4" - mutopiainstrument = \instrument - date = "1828/08" - style = "Romantic" - source = "Schubert-Lieder Edition Schott No. 608, (Not dated). - Jubilaeums-Ausgabe zum 100. Todestage (~1928)." - - copyright = "Public Domain" - maintainer = "Jan Nieuwenhuizen" - maintainerEmail = "janneke@gnu.org" - lastupdated = "2001/Apr/27" - mutopiapublicdomain = "\\parbox[b]{\\paper-width}{\\thefooter\\quad\\small - \\\\This music is part of the Mutopia project, - \\texttt{http://www.mutopiaproject.org/}\\\\It has been typeset - and placed in the public domain by " + \maintainer + - ".\\\\Unrestricted modification and redistribution is permitted - and encouraged---copy this music and share it.}" - tagline = \mutopiapublicdomain - footer = "Mutopia-2001/04/27-xx" -} - -\version "2.12.0" - -#(set-global-staff-size 16) - -vocalVerse = \relative c''{ - \dynamicUp - \times 2/3 { g8[( as)] g } c4. g8 | - \times 2/3 { f8[( g)] f } c'4 f,8 r | - g4.-> f8 \times 2/3 { f[( es)] d } | - es2 r4 | - R2. | - R2. | - \times 2/3 { g8[( as)] g } es'4. g,8 | - \times 2/3 { f8[( g)] f } d'4. c8 | - bes4. as8 \times 2/3 { as[( g)] f } | - g2 r4 | - R2. | - R2. | - g8. b16 es4. d8 | - c8. g16 es4. c8 | - \grace { - \override Stem #'stroke-style = #"grace" - as'32[( bes ] - \revert Stem #'stroke-style } - \times 2/3 { as8[)( g)] as } c4. as8 | - g2. | - \grace { - \override Stem #'stroke-style = #"grace" - f32[( g ] - \revert Stem #'stroke-style } - \times 2/3 { f8[)( e)] f } as4. f8 | - - es!2. | - g8. b16 es4. d8 | - c8. g16 e4. c8 | - \grace { - \override Stem #'stroke-style = #"grace" - a'32[( b ] - \revert Stem #'stroke-style } - \times 2/3 { a!8[)( gis)] a } c4. a8 | - g!2. | - \times 2/3 { d'8[\f( cis)] d } f4. b,8 | - c!2. | -} - -vocalThrough = \relative c{ - \dynamicUp - g''8. g16 b8. b16 d8. d16 | - c4 b r | - g4. b8 d8. c16 | - b2 r4 | - e4. d8 \times 2/3 { d[( c)] b } | - a8. b16 c4-> a8 r | - R2. | - R2. | - \grace { - \override Stem #'stroke-style = #"grace" - a32[( b ] - \revert Stem #'stroke-style } - \times 2/3 { a!8[)( gis)] a } c4. a8 | - g!2. | - \times 2/3 { d'8[\f( cis)] d } f4. b,8 | - c!2. ~ | - % bug: slur on other staff fools lily into extending melisma - c4 r c | - as2. | - g | - e2 r4 | -} - -lyricVerseOne = \lyricmode { - Lei -- se fle -- hen mei -- ne Lie -- der - durch die Nacht zu dir; - in den stil -- len Hain her nie -- der, - Lieb -- chen, komm zu mir! - - Flüs -- ternd schlan -- ke Wip -- fel rau -- schen - in des Mon -- des Licht, - in des Mon -- des Licht; - - des Ver -- rä -- ters feind -- lich Lau -- schen - fürch -- te, Hol -- de, nicht, - fürch -- te, Hol -- de, nicht. -} - -lyricVerseTwo = \lyricmode{ - Hörst die Nach -- ti -- gal -- len schla -- gen? - ach! sie fle -- hen dich, - mit der Tö -- ne sü -- "\ss en" Kla -- gen - fle -- hen sie für mich. - - Sie -- ver -- "steh'n" des Bu -- sens Seh -- nen, - ken -- nen Lieb -- es -- schmerz, - ken -- nen Lieb -- es -- schmerz, - - rüh -- ren mit den Sil -- ber -- tö -- nen - jed -- es wei -- che Herz, - jed -- es wei -- che Herz. -} - -lyricThrough = \lyricmode{ - La\ss auch dir die Brust be -- we -- gen - Lieb -- chen, hö -- re mich! - be -- bend harr' ich dir ent -- ge -- gen! - - komm, be -- glük -- ke mich! - komm, be -- glük -- ke mich, __ - be -- glük -- ke mich! -} - -trebleIntro = \relative c{ - r8^"\bf Mäßig"\pp -. -. -. -. -. | - r8 -. -. -. -. -. | - r8 -. -. -. -. -. | - r8 -. -. -. -. -. | -} - -trebleVerseOne = \relative c{ - %5 - r8 | - r8 | - r8 | - r8 | - 4.( 8) - \times 2/3 { ([ )] } - - %10 - 2. | - r8 | - r8 | - r8 | - r8 - [ - - - ] - ( - 4.() - 8) - - \times 2/3 { ([ )] } - %16 - 2. | - r8 | - r8 | - r8\pp | - %20 - r8 | - \grace { - \override Stem #'stroke-style = #"grace" - as'32[( bes ] - \revert Stem #'stroke-style } - - \times 2/3 { as8[)( g as] } c4.-> as8) | - g2. | - r8 | - r8 | - r8 | - r8 | - \times 2/3 { \f( } - 4.-> 8) | -} - -trebleEentje = \relative c' \context Voice { - \stemNeutral - 2 r4 | - 2\(\mf 8.(-> 16)\) | - % urg: slurs with staccati are ugly - 4. 8-.( -. )-. | - 4. 8-.( -. )-. | - 2 4\pp | - 2\( 8.( 16)\) | - 4.\( 8(-. -. )\)-. | - 4. 8(-. -. )-. | - %60 - 2 r4 | -} - -trebleThrough = \relative c'{ - \stemNeutral - 2. | - %61 - R2. | - 8.[\< 16 8. 16\>\! 8. 16] | - - %% score has double slur on chord. - 4( ) r\! - - 4. 8 8.->[ c16] | - %65 - 2.~(\f - 2) r4 - << - { a'8. b16 c4^> ( a8) r | - a8. b16 c4^> ( a8) r | - }\\{ - 4 2 | - 4 2 | - } >> - - % 4 bars copied from end verse1 - r8 | - %70 - r8 | - \times 2/3 { 8( } - - 4.-> 8) - 2. | - 2. | - \override TextScript #'font-shape = #'italic - 2._"decresc." - \revert TextScript #'font-shape - - %75 - 2. | - 2 4\pp | - - % four copied from begin eentje - 2( 8.-> 16) | - 4. 8(-. -. )-. | - 4. 8(-. -. )-. | - %80 - - \override TextScript #'font-shape = #'italic - 2._"dim." - \revert TextScript #'font-shape - - 2. | - 2.\fermata | -} - -bassIntro = \relative c{ - \dynamicUp -%1 - 2 r4 | - 2 r4 | - 2 r4 | - 2 r4 | -} - -bassVerseOne = \relative c{ -% \clef bass - \dynamicUp -%5 - 2 r4 | - 2 r4 | - 2 r4 | - 2 r4 | - 8 [ ] | -%10 - 8 [ ] | - 2 r4 | - 2 r4 | - 2 r4 | - 2 r4 | -%15 - bes'8 [ ] | - es,8 [ ] | - 2 r4 | - 2 r4 | - 2 r4 | - 2 r4 | - 8 [ ] | - 8 [ ] | - 2 r4 | - 2 r4 | - 2 r4 | - 2 r4 | - 8 [ ] | - c,8 [ ] | -} - -bassEentje = \relative c{ - \dynamicUp - 8 [ ] | - c,8 [ ] | - 8 [ ] | - c,8 [ ] | - 8 [ ] | - c,8 [ ] | - 8 [ ] | - c,8 [ ] | -} - -bassThrough = \relative c{ - \dynamicUp - %61 - 8^"cresc." [ -> ] | - 8 [ -> ] | - % copied - 8 [ -> ] | - 8 [ -> ] | - %65 - 8 [\> \!] | - 8 [ ] | - 8 [ ] | - 8 [ ] | - % 4 bars copied from end verse1 - 2\p r4 | - %70 - 2 r4 | - 8 [ ] | - c,8\> [ < e g c> \! ] | - - 8 [ ] | - 8 [ ] | - %75 - 8 [ ] | - c,8 [ ] | - c,8 [ ] | - c,8 [ ] | - g,8 [ ] | - %80 - c,8 [ ] | - c,8 [ ] | - 2._\fermata | -} - -global = { - \time 3/4 - \key es \major - \skip 1 * 3/4 * 4 - \break - \skip 1 * 3/4 * 25 - \break - \skip 1 * 3/4 * 6 - \break - \skip 1 * 3/4 * 41 - \break - \skip 1 * 3/4 * 6 - \bar "|." -} - -allLyrics = { - % maybe should be bigger by default, in grob-description.scm ? - \lyricsto "leise" \new Lyrics { - \lyricVerseOne - \lyricVerseTwo - \lyricThrough -} } - -vocals = \new Voice = "leise" { - \clef treble - % certainly no auto-beaming for vocals - \autoBeamOff - - \dynamicUp - % duh 1 != 3/4 - R1 * 3/4 * 4 - \vocalVerse - R1 * 3/4 * 8 - \vocalVerse - \vocalThrough - R1 * 3/4 * 6 -} - -trebleStaff = \new Staff = "treble"<< - \set Staff.midiInstrument = "acoustic grand" - \global - { - \clef treble - - \trebleIntro - \trebleVerseOne - \trebleEentje - \trebleVerseOne - \trebleThrough - } ->> - -bassStaff = \new Staff = "bass"<< - \set Staff.midiInstrument = "acoustic grand" - \global - \clef bass - {\bassIntro - \bassVerseOne - \bassEentje - \bassVerseOne - \bassThrough} ->> - - -\score{ - << - \new Staff << - \set Staff.midiInstrument = "synth voice" - %% insert \transpose if necessary, depending on voice range. - \global - \vocals - >> - \allLyrics - \context PianoStaff << - \trebleStaff - \bassStaff - >> - >> - \layout { - % Use - % textheight = 280.\mm - % line-width = 190.\mm - % to get this on 3 pages of a4. - - % Mandatory Mutopia settings yield 4 pages :( - textheight = 270.0\mm - line-width = 180.0\mm - - \context { \RemoveEmptyStaffContext } - } - - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 54 4) - } - } - - -} - diff --git a/input/mutopia/GNUmakefile b/input/mutopia/GNUmakefile deleted file mode 100644 index 5c6839fccb..0000000000 --- a/input/mutopia/GNUmakefile +++ /dev/null @@ -1,9 +0,0 @@ -depth = ../.. - -LOCALSTEPMAKE_TEMPLATES=ly mutopia -EXTRA_DIST_FILES += claop.py -SUBDIRS = J.S.Bach F.Schubert E.Satie W.A.Mozart R.Schumann - -include $(depth)/make/stepmake.make - - diff --git a/input/mutopia/J.S.Bach/GNUmakefile b/input/mutopia/J.S.Bach/GNUmakefile deleted file mode 100644 index e65ceefe04..0000000000 --- a/input/mutopia/J.S.Bach/GNUmakefile +++ /dev/null @@ -1,11 +0,0 @@ -# input/mutopia/J.S.Bach/GNUmakefile - -depth = ../../.. - -EXTRA_DIST_FILES= - -LOCALSTEPMAKE_TEMPLATES=ly mutopia -examples=wtk1-fugue2 baerenreiter-sarabande - -include $(depth)/make/stepmake.make - diff --git a/input/mutopia/J.S.Bach/bwv940.ly b/input/mutopia/J.S.Bach/bwv940.ly deleted file mode 100644 index 8ba1bb45af..0000000000 --- a/input/mutopia/J.S.Bach/bwv940.ly +++ /dev/null @@ -1,172 +0,0 @@ -#(ly:set-option 'old-relative) -\version "2.12.0" - -%{ - Header for Petites Preludes. - - Six Petits Preludes, - Collection Johann Peter Kellner - ca 1703 - 1707 - - Kellner was a student of Bach's that copied some 90 works of his master. -%} - - - - -\header{ - title = "Praeludium" - composer = "Johann Sebastian Bach (1685-1750)" - enteredby = "JCN,HWN" - opus= "BWV 940" - - - % mutopia headers. - mutopiacomposer = "J.S.Bach (1685-1750)" - mutopiaopus = "BWV940" - - mutopiainstrument = "Harpsichord,Clavichord" - date = "1700s" - source = "Ed. Henry Lemoine Urtext" - style = "Baroque" - copyright = "Public Domain" - maintainer = "Jan Nieuwenhuizen" - maintainerEmail = "janneke@gnu.org" - lastupdated = "2003/Aug/22" - mutopiapublicdomain = "\\parbox{\paper-width}{\\thefooter\\quad\\small - \\\\This music is part of the Mutopia project, - \\texttt{http://www.mutopiaproject.org/}\\\\It has been typeset - and placed in the public domain by " + \maintainer + - ".\\\\Unrestricted modification and redistribution is permitted - and encouraged---copy this music and share it.}" - tagline = \mutopiapublicdomain - footer = "Mutopia-2003/08/22-nr" -} - -one = \relative c{ - \skip 1 | - \stemUp - r4 d''2 cis4 | - \stemNeutral - d16 a' g f e f cis d - e8.\mordent f16 d8.\prall cis16 | - \stemUp\tieUp - cis4 ~ cis16 a d8 ~ d4 a | - %5 - b2 ~ b4 a ~ | - a16 a \stemUp g! f g4 ~ g f ~ | - f16 a g f e16 g8. ~ g16 g f e d f8. ~ | - f16 f e d b'4 a g | - - fis4 g r8 g16 bes e4 | - %10 - d1 - \bar "|." -} - -two = \relative c{ - r16 d'' c bes a bes f g - a8.\mordent bes16 g8.\prall f16 | - \stemDown - f2 e2 | - \change Staff=lower \stemUp - r4 a, bes b | - \change Staff=upper \stemDown\tieDown - r16 b' a g f8. f16 e2 ~ | - %5 - e2 ~ e4 ~ e16 e f! d | - s4 e4_\mordent~ e4 d4 ~ | - d4. cis16 d cis4 d ~ | - d8 r r16 e f d r16 e f d r d e cis | - r16 e d c! bes! d8. s4 r16 bes' a g | - %10 - fis1 -} - -three = \relative c{ - \stemUp - f2 e | - \stemNeutral - d16 d' c bes a bes f g - a8.\mordent bes16 - g8.\prall f16 | - f2 g4 gis | - a2 ~ a16 a g f e f c d | - %5 - e8.\mordent f16 d8.\prall c16 \stemNeutral c4. d8 | - \stemDown \tieDown - - e4 ~ e16 f e d cis a b cis d e f d | - \override TextScript #'font-style = #'finger - bes2 a ~ | - a a | - d, cis' | - %10 - a'1 - \bar "|." -} - -four = \relative c{ - \stemDown - d2 cis | - \skip 1*2 | - \skip 4*3 - \change Staff=upper \stemUp - \override NoteColumn #'horizontal-shift = #1 - c''4 | - %5 - a gis ~ gis16 gis fis e - \skip 4*1 - \change Staff=lower \stemDown - \override NoteColumn #'horizontal-shift = #0 - \stemUp\tieUp - b2 a | - g a4. gis16 a | - gis2 < g cis,>8 e4 | - d4. fis16 g r16 bes8. ~ bes4 | - %10 - \stemDown - << d,1 { \textLengthOn s4^\markup { \hspace #20 } - s4^\markup { \hspace #1 } s4 } - >> -} - -global = { - \time 4/4 - \key f \major -} - -\score{ - % Allegretto - \new PianoStaff << - \new Staff = "upper" << - \global - \new Voice = "i"\one - \new Voice = "ii" \two - >> - \new Staff = "lower" << - \global - \clef "bass" - \new Voice = "iii" \three - \new Voice = "iv" \four - >> - >> - \layout{ - line-width = 17.0 \cm - \context { - \Score - \override SpacingSpanner #'spacing-increment = #2.0 - } - } - - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 40 4) - } - } - - -} - - diff --git a/input/mutopia/J.S.Bach/wtk1-fugue2.ly b/input/mutopia/J.S.Bach/wtk1-fugue2.ly deleted file mode 100644 index a92188df11..0000000000 --- a/input/mutopia/J.S.Bach/wtk1-fugue2.ly +++ /dev/null @@ -1,232 +0,0 @@ -\header { - title = "Fuga a 3 voci" - opus = "BWV 847-Fuga" - source = "Henle's Urtext" - composer = "Johann Sebastian Bach (1685-1750)" - enteredby = "hwn, wl, jcn" - - % mutopia headers. - mutopiatitle = "Das Wohltemperierte Clavier I, Fuga II (c-minor)" - mutopiacomposer = "J. S. Bach (1685-1750)" - mutopiainstrument = "Piano" - mutopiaopus = "BWV847" - style = "baroque" - copyright = "Public Domain" - maintainer = "hanwen@cs.uu.nl" - %% TODO: handle \footer, \head[er] properly - footer = "Mutopia-2002/08/19-6" - - tagline = \markup { - \smaller - \column { - \line { \footer } - \line { - "This music is part of the Mutopia project, " - \typewriter { "http://sca.uwaterloo.ca/Mutopia/" } - } - \line { - #(ly:export (string-append - "It has been typeset and placed in the public " - "domain by " maintainer "." )) - } - \justify { - Unrestricted modification and redistribution - is permitted and encouraged. Copy this music - and share it! - } - } - } - lastupdated = "2002/August/19" - } - - - -\version "2.12.0" - - - - -dux = \context Voice = "two" \relative c''{ - \voiceTwo - \clef violin - - r8 c16 b c8 g as c16 b c8 d | - g, c16 b c8 d f,16 g as4 g16 f | - es c' b a g f! es d c8 es' d c | - bes a bes c fis, g a fis | - %%5 - g4 r16 c, d es f g as8~ as16 d, es f | - g a bes8 ~ bes16 es, f g as g f es d8 c'16 b! | - % forced accident! - c4 r4 r8 f es d | - r8 as g f g f16 es f8 d | - g4 r8 b c c16 b c8 g | - %%10 - as4 r8 a bes bes16 a bes8 f | - g4 r8 g as as g - \change Staff = bass \stemUp - f | - r8 - as, bes c r8 as16 g as8 f8 | - bes8 c bes as bes g f es | - f des' c bes c as g f | - %%15 - g8 - \change Staff = treble - \stemDown - - g'16 fis g8 c, - es - g16 fis! g8 a | - d, g16 fis g8 a! c,16 d es4 d16 c | % forced accident! - bes8 r8 r16 d e fis g a bes8 ~ bes16 e, f g | - a bes c8 ~ c16 fis,16 g a bes8 es,!16 d es8 g, | - as f'16 es f8 a,8 bes g'16 f g8 b, | - %%20 - c16 f es d - c - \change Staff = bass - \stemUp - bes! as g - f8 \change Staff = treble - \stemDown - as' g f | - es d es f b, c d b | - c4 r8 e8 f f16 e f8 c | - d4 r8 d8 es8 es16 d es8 bes | - c2 ~ c8 d16 es f es f d | - %%25 - b8 r8 r b c r r es | - d r r f ~ f r r f | - es as g f es d es f | - b, c d b b c r c | - f16 d es c ~ c8 b c4 r8 e | - %%30 - f4 r8 f f es16 d es8 | - r r 2 | -} - - -comes = \context Voice = "one" \relative c'' { - \voiceOne - \override MultiMeasureRest #'staff-position = #6 - R1 | - R1 | - r8 g'16 fis g8 c, es g16 fis g8 a | - d,8 g16 fis g8 a c,16 d es4 d16 c | - %%5 - bes8 es16 d es8 g,8 as f'16 es f8 a, - bes8 g'16 f g8 b, c8 d16 es f4 ~ | - f8 es16 d c16 bes ! as g f8 as' g f - es d es f b, c d b | - c g'16 fis g8 d es4 r8 e8 | - %%10 - f f16 e f8 c8 d4 r8 d | - es8 es16 d es8 bes c es16 d es8 f | - bes, es16 d es8 f as,16 bes c4 bes16 as | - \stemNeutral g16 es f g as bes c d es d c d es f g a | - bes f, g as bes c d e f es d es f g a b | - %%15 - \stemUp c8 b16 a g f! es d c8 es d c | - bes a bes c fis,! g a fis | % forced accident - g8 d'16 c d8 r8 r8 e16 d e8 r8 | - r fis16 e fis8 r r g,16 f g8 r8 | - r8 a16 g a8 r r b16 a b8 r | - %%20 - r8 c16 b c8 g as c16 b c8 d | - g, c16 b c8 d f,16 g as4 g16 f | - es8 c'16 b c8 g as4 r8 a | - bes8 bes16 a bes8 f8 g4 r8 g ~ | - g as16 bes c b c as f2 ~ | - %%25 - f8 d'16 c d8 f, es es'16 d es8 g, | - f f'16 es f8 as, g16 f' es d c b a g | - c8 f es d r as g f | - g f16 es f8 d as' g r a | - b c f,16 es d c c8 c'16 b c8 g | - %%30 - as c16 b c8 g,8 c16 b c8 d | - f,16 g as4 g16 f e2 | -} - -bassdux = \context Voice = "three" \relative c' { - \clef bass - R1 | - R | - R | - R | - %%5 - R | - R1 | - r8 c16 b c8 g as c16 b c8 d | - g, c16 b c8 d f,16 g as4 g16 f | - es c' b a g f es d c d es d c bes! as! g | - % -> \classic_accidentals - %%10 - f bes' as g f es d c bes c d c bes as g f | - es as' g f es des c bes as8 c' bes as | - g8 f g as d, es f d | - es as g f g es d c | - d bes' as g as f es d! | - %%15 - es8 r8 r4 r8 c bes a | - r es' d c d c16 bes c8 d | - g,8 bes'16 a bes8 d, es c'16 bes c8 e, | - f d'16 c d8 fis, g4 r16 g, a b | - c16 d es8~ es16 a, bes c d es f8~ f16 b, c d | - %%20 - es8 r r e \stemNeutral \stemDown f f, es! d \stemNeutral | - r as' g f g f16 es f8 g | - c16 d es d c bes as g f bes' as g f es d c | - bes c d c bes as g f es as' g f es d c bes | - as bes c bes as g f es d g' f es d c b a | - %%25 - g4 r4 r16 g a b c d es f | - g f as g f es d c b8 c16 b c8 g | - as c16 b c8 d g, c16 b c8 d | - f,16 g as4 g16 f es4 r8 es' | - d c g' g, - %%30 - << { c2 ~ | c1 ~ | c1 } \\ - { c,2 ~ | c1 ~ | c1 } - >> -} - - -\book { - \score { - - \context Score \with - { - \override SpacingSpanner #'spacing-increment = #1.0 - \override SpacingSpanner #'shortest-duration-space = #1.9 - } \context PianoStaff << - \override Score.TimeSignature #'style = #'C - \context Staff = "treble" << - \key c \minor - \dux - { \comes \bar "|." } - \time 4/4 - >> - \context Staff = "bass" << - \key c \minor - \bassdux - >> - >> - - \header{ - opus = "BWV 847" - } - \layout {} - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 84 4) - } - } - } - \paper { - line-width = 18.0 \cm - ragged-last-bottom = ##f - } -} diff --git a/input/mutopia/R.Schumann/GNUmakefile b/input/mutopia/R.Schumann/GNUmakefile deleted file mode 100644 index 9db7efecb1..0000000000 --- a/input/mutopia/R.Schumann/GNUmakefile +++ /dev/null @@ -1,8 +0,0 @@ -depth = ../../.. - -examples= -LOCALSTEPMAKE_TEMPLATES=ly mutopia - -include $(depth)/make/stepmake.make - - diff --git a/input/mutopia/R.Schumann/romanze-op28-2.ly b/input/mutopia/R.Schumann/romanze-op28-2.ly deleted file mode 100644 index a83fb3cec5..0000000000 --- a/input/mutopia/R.Schumann/romanze-op28-2.ly +++ /dev/null @@ -1,298 +0,0 @@ -% NOT FINISHED!!!! - -\include "deutsch.ly" - -#(set-global-staff-size 16) - -\version "2.12.0" - -\header { - title = "Romanzen" - opus = "op. 28/2" - composer = "Robert Schumann (1810-1856)" - enteredby="Rune Zedeler" - maintainer="rune@zedeler.dk" - mutopiatitle = "Romanzen - op. 28/2" - mutopiacomposer = "R. Schumann 1810-1856" - mutopiainstrument = "Piano" - style = "Romantic" - copyright = "Public Domain" -} - -u = { \change Staff = up \stemDown } -m = { \change Staff = mid \stemUp } - -% -% d = .. complains about note names. -% -#(define d #{ \change Staff = down \stemUp #}) - -forcedBreak = \break - -global = { \key fis \major \time 6/8 - \set Score.beatLength = #(ly:make-moment 3 8) - \repeat volta 2 { s2.*8 } s2.*26 \bar "|." -} - -righta = \transpose c cis' { - % \stemUp \slurUp \tieUp - \stemUp - \repeat volta 2 { - \override TextScript #'extra-offset = #'(-8.0 . 2.5) - \m a,16[^\p( \u c^\markup { - \large "Einfach (" - \note #"8" #1 - \large " = 100)" } - a c ] \m g,[ \u c^3 ] \m b,[ \u c^2 b c] \m a,[ \u c^3]) | - \revert TextScript #'extra-offset - \m f,[( \u c f c] \m g,[ \u c^4] \m a,[ \u c^2 a c8 c16)] | - \m c16[( \u f c' f] \m b,[ \u f] \m d[ \u f^3 d' f^2] \m c[ \u f)^4] | - \m f,16[( \u c16^3 f c] \m g,[ \u c^4] \m a,[ \u c^2 a c8 c16)] | - \m a,[( \u c a c] \m c[ \u d c' d] \m b,[ \u d] \m a,[ \u d)^3] | - \m g,[( \u c^2 g c] \m b,[ \u c b c] \m a,[ \u c] \m g,[ \u cis)^3] | - \m f,[( \u d^3 f d] \m g,[ \u d g d] \m g,[ \u c] \m a,[ \u a)] | - \m g,[( \u c g c] \m f,[ \u h,^2 g h,] \m e,[ \u c^2 g c)] | - } - \forcedBreak - \stemUp \slurUp \tieUp - b4^5( 8~ a g^4 | - f4^5 e8^5~e d4)^4 | - as4^4( 8~ g^5 f^4 | - es4^5 d8^5~d c4)^4 | - c^4( es8^5~ d^3 f) | - e4^4( g8^5~ f^3 as) | - g4^4 b8^5~b a c'^5~ | - c' b^4 ges^5 des^3 b,^5 \d ges,16[^4 f,] | - e,^2^\markup { \large "ritard..." } cis,^1 \u r8 r r4 r16 \d gis,^2^"R.H."] | - - - \forcedBreak - \m a,16[^\p( \u c a c] \m g,[ \u c^3] \m b,[ \u c^2 b c] \m a,[ \u c)^3 ]| - \m f,[( \u c f c] \m g,[ \u c^4] \m a,[ \u c^2 a c8 c16)] | - \m c16[( \u f c' f] \m b,[ \u f] \m d[ \u f^3 d' f^2] \m c[ \u f)]^4 | - \m f,[( \u c^3 f c] \m g,[ \u c^4] \m a,[ \u c^2 a c8 cis16)] | - \m a,[( \u d^2 a d] \m c[ \u d c' d] \m b,[ \u d)^3] r8 | - \m c16[( \u f c' f] \m es[ \u f es' f] \m d[ \u f)^3] \m f[( \u as^2] | - f'[ as)] \m f[( \u as f' as)] r8^\fermata r16 e'^2( f' g' | \stemNeutral \tieNeutral - as' des'^1 c'8^\markup { \finger "2-3" } h~h c'16) \clef F e,16[(^2 f, g,] | - \forcedBreak - - as,[^5 h,,^2)] \clef G 8[( 16 c'] 4.~ - 8) s4 s8 r16 h^2( c' d' | - es' ges-1 f-2 a-1 c'-2 f'-4 \stemUp \tieUp e'-5 d' c' b-4 a^\prall^\markup { \finger "2-4-3" } g | - f) f'-5( e'-5 d'-4 c'-3 f')-5 4( 8 | - 4 8 f16^4 d'^5~ d'8.[ c'16^4] | - \forcedBreak - << f8)^3_\pp \new Voice = "another" { \m a,16[ \u c8 c16] } >> \m g,[ \u c_3] \m b,[^\markup { \finger "2-1" } \u c8 c16] \m a,[ \u c]~ | \stemNeutral - c16 c8_4 c c16~c c8_2 c c16~ | - c16 c8 c c16~c c8 c c16~ | - c16 c8 c c16 r4^\fermata r8 | \bar "|." - -} - -rightb = \transpose c cis' { - \relative c { \stemDown \slurDown - \repeat volta 2 { - a4^1( g8^1 b4^1 a8^1 | - f8..^1 f32^1 g8^2 a4.)^1 | - c4^1( b8 d4 c8 | - f,8.. f32^1 g8^2 a4.) | - a4(^1 c8^1_\accent~c b^1 a^1 | - g4) b8^1_\accent(~b a^1 g^1 | - f4)^1 g8_\accent(~g g_. a_. | - g4 f8~f e4) | - } - } - \u \slurUp - g16_4 d b, d g e cis g_4 f_3 d_1 e_2 b, | - d_3 a,_2 f, a, cis_4 a, e, a, d a,8 g,16 | - f_4 c as, c f d h, f_4 es_3 c_1 d_2 as, | - c_3 g,_2 es, g, h,_4 g, d, g, c g,8 f,16 | - c g, es, g, es c_3 as, c^2 d^3 c h, c | - e des b,\< des g e_3 ces_4 d_2 f^3 d cis d | - \once \override PhrasingSlur #'extra-offset = #'(0 . 3) - g\( fes des fes b g_3 es_1\! ges_2 a^3 ges f_1 ges_2 | - r ges_2 b des_1 ges b,_2 des ges,^1 b, \d des,^1 \stemDown \transpose c' c { b,[_1 as,] | - g,8 b,16[ g, e, cis,] d,\)_4 \< f, h, d_3 f_2 r16\! } - - \change Staff=mid - \relative c { \stemDown \slurDown - a4^1( g8^1 b4^1 a8^1 | - f8..^1 f32^1 g8^2 a4.)^1 | - c4^1( b8 d4 c8 | - f,8.. f32^1 g8^2 a4.) | - a4^1( c8^1_\accent~[c b)] g16^1([ b^2] | - c4)^1 es8^1~es d^1 f^1~ | - \override PianoStaff.Arpeggio #'direction = #UP - f f8.. f32^1( as4.)^\fermata\arpeggio ~ | - \revert PianoStaff.Arpeggio #'direction - \stemUp \tieUp as r4 r8 | - } - s2. s - \u s4. \grace { - \override Stem #'stroke-style = #"grace" - f8( - \revert Stem #'stroke-style } - f4) e8 | - f g16_2 b_1 a_2 gis_1 c_2 h, c cis_1 d_2 b,_1 | - \tieDown c4.~16\< \tieNeutral ~ < f^3 h >8[\>\! < e b^2> \!] | - \change Staff=mid - \transpose c' c { - a4^1( g8^1 b4 a8^2 | - f8..^1 f32^1 g8^2 a8..) \slurUp 32( 8 | - 8..) 32( 8 4.\>) ~ | - a~ a\!^\fermata \bar "|." - } -} - -lefta = \transpose c cis { - \stemUp \slurUp \tieUp - \repeat volta 2 { - f4^1( e8^1 g4^1 f8^1 | - d8..^1 d32^2 e8^1 f4.) | - a4^1( g8 b4 a8 | - d8..^1 d32^2 e8^1 f4.) | - fis4^1 a8^1^\accent(~a g^1 f^1 | - e4)^1 g8^1^\accent(~g f^1 e^1 | - d4)^1 f8^1^\accent(~f e^. dis^1^. | - e4^1 d8^1~d c4)^1 | - } - \d \tieNeutral \slurDown - << - \transpose c' c { - g4 a8~a f g | a4 g8~g f e | - d4 g8~g es f | g4 f8~f es d | - c4 r8 f4 as8~ | as g b as4 ces'8~ | - ces' b des' c'4 \new Voice = "another" { \stemUp \tieUp 8~ | - es' des'4^1~ \stemDown des'8.[ c'16] } - } - \transpose c' c, { - g4(-4 a8-3~a f-5 g-4 | a4-3 g8-\markup { \finger "4-3" } ~g f-4 e-5 | - d4)-\markup { \finger "4-5" }( g8-3~g es f-4 | g4-3 f8-4~f es d-4 | - c4) r8 f4-4( as8-5~ | as g-4 b)-5 as4-5( ces'8-4~ | - ces' b des'-4 c'4)-5( 8 | - \stemDown \tieDown des'4.)_5~des'~ | - \override NoteColumn #'horizontal-shift = #-1 des' s - } - >> - \change Staff=down \stemUp \slurUp \tieUp \phrasingSlurUp - f4^1( e8^1 g4^1 f8^1 | - d8..^1 d32^2 e8^1 f4.) | - a4^1( g8 b4 a8 | - d8..^1 d32^2 e8^1 f4.) | - fis4 a8^\accent~a g s | - a4 c'8^\accent(~c' b) d'^\accent~ | - d' d'8..^\accent d'32-1 s4. | - s2.*2 - s8 r16 h\( c' d' es' as g8\arpeggio fis( - ges)\) f16-2( a-1 c'-3 f')-1 \grace { - \override Stem #'stroke-style = #"grace" - \stemDown \slurUp b,[( f] \stemUp - \revert Stem #'stroke-style } - e')-1( d' c' b-1 a-2\prall g - f16)-4 f' d'-1 c'-2 h-1 s4. - s2. - f4^1( e8 g4 f8 | - d8..^1 d32-2 e8^1 f8..) d32^2( e8^1 | - f8..) d32-2( e8^1 f4.)^1 ~ | - f~ f\fermata | -} - -leftb = \transpose c cis { - \stemDown \slurDown \tieDown - \repeat volta 2 { - f16^\p c f, c e c-3 g c-2 f, c f c | - d c f, c-3 e c f c f, c8 c16-3 | - a16 c f, c g c-3 b c f, c a c | - d c f, c-3 e c f c-2 f, c8 c16 | - fis d-2 d, d a[ d] g, d g d f h,-3 | - e c-2 c, c g[ c] f, c f c e a,-3 | - d a, d, a, f[ g,-2] h,, g, e c, dis fis,-5 | - e c g,-4 c d g,-2 c,[ g, c g,] c,8 | - } - - s2.*9 | - - f16^\p c c, c e c-3 g c-2 c, c f c | - d c c, c-3 e c f c f, c8 c16-3 | - a16 c f, c g c-3 b c f, c a c | - d c f, c-3 e c f c-2 f, c8 cis16 | - fis^1 d d, d a[ d_2] g, d g d_3 b,[_5( g_2] | - a) c_3 f, c c'[ f_2] b, f b f_3 d' as | - h, as d' as h, as( f'4.)^\fermata\arpeggio_2 ~ - \d \stemDown f'8. \clef G \stemNeutral \tieNeutral \phrasingSlurDown - \transpose c c' { e16[_4( f g] as[ des_3] c8[_4 )]~ | - } \clef F [( ] 8.) h,16_4\( c d | - \voiceTwo - es as,_3 g,8 fis,~fis, g,_4\arpeggio gis,_5~ | - gis, 16\) r16 r8 r4 cis8( | - d) e( f16_4 d_5 c4.)_ \markup { \finger "4-3" }~ | - \oneVoice - c16( h,_4 c_3 cis_1 d_2 b,_3 a,_4 as,_1 g,8 c,8) | - \change Staff = down \stemDown \tieDown - f16^\pp c f, c e c-3 g c-2 f, c f c | - d c f, c-3 e c f c-2 f, c-3 e c | - f c-2 f, c-3 e c ~ c c8 c c16 ~ | - c c8 c c16 r4_\fermata r8 \bar "|." | -} - - -\paper { - indent = 0.5 \in - % textheight = 29.8 \cm - pagenumber = no - line-width = 17.0 \cm -} - -\score { - \context PianoStaff << - #(set-accidental-style 'piano-cautionary) - \override PianoStaff.NoteCollision #'merge-differently-dotted = ##t - \set PianoStaff.connectArpeggios = ##t - \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket - - \override PianoStaff.InstrumentName #'font-size = #6 - \override PianoStaff.InstrumentName #'font-shape = #'italic - \override PianoStaff.InstrumentName #'font-magnification = #3 - - \set PianoStaff.instrumentName = " 2." - \new Staff = "up" { - \override Staff.DynamicLineSpanner #'direction = #DOWN - \clef G <<\global \new Voice = "upv" \righta >> - } - \new Staff = "mid" { - \override Staff.InstrumentName #'font-size = #0 - \override Staff.InstrumentName #'font-shape = #'upright - \override Staff.InstrumentName #'font-magnification = #1 - \override Staff.InstrumentName #'extra-offset = #'(0 . 6) - % \set Staff.instrumentName = "\\begin{turn}{-90}{Rechte Hand}\\end{turn}" - \set Staff.instrumentName = \markup { \column { Rechte Hand } \hspace #2 } - \clef F <<\global \new Voice = "midv" \rightb>> - } - \new Staff = "down" { - \override Staff.DynamicLineSpanner #'direction = #UP - \clef F - << \global \new Voice \lefta \new Voice \leftb >> - } - >> - \layout { - \context { - \RemoveEmptyStaffContext - } - \context { - \Score - \override SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1 8) - } - } - - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 100 8) - } - } - - -} - - diff --git a/input/mutopia/W.A.Mozart/GNUmakefile b/input/mutopia/W.A.Mozart/GNUmakefile deleted file mode 100644 index 5a98a7a49a..0000000000 --- a/input/mutopia/W.A.Mozart/GNUmakefile +++ /dev/null @@ -1,10 +0,0 @@ -# - -depth = ../../.. - -examples=mozart-hrn-3 -LOCALSTEPMAKE_TEMPLATES=ly mutopia - -include $(depth)/make/stepmake.make - - diff --git a/input/mutopia/claop.py b/input/mutopia/claop.py deleted file mode 100644 index 8edd91fedf..0000000000 --- a/input/mutopia/claop.py +++ /dev/null @@ -1,308 +0,0 @@ -import sys - - -copyright = """copyright 1992. Peter Wallin. Verbatim redistribution -permitted """ - - - -""" - -This file produces the Score for CLA(O)P II -- a piece by -Peter Wallin (pwallin@post8.tele.dk). - -The score produced by this file is -copyright 1992. Peter -Wallin. Verbatim redistribution permitted - - - - -From: Rune Zedeler -Sender: lilypond-devel-admin@gnu.org -To: LilyPond Devel -Subject: CLA(O)P II -Date: Wed, 12 Jun 2002 02:14:05 +0200 - -The concert went well. -I talked to the composer and he agreed to include the score in lilypond -as long as his name was maintained and as long as he kept the copyrights -- that is people are not allowed to make changes to the score. - -I think including CLA(O)P II is a Good Thing because it stress tests -lilypond very well. This is also why I think that including only an -excerpt from it is stupid. -I am not sure how the inclusion should be. -The raw lilypond file is 750k; gzip'ed 40k. -Alternatively one could include the generating c-file into lilypond. -Or perhaps we should just wait till I manage to redo it in scheme... :-) - --Rune - -""" - - - -#//set to 1, 385 to typeset the whole score -start_measure =1 -no_measures = 385 -voices = 48 - -durs = ["16","8","8.","4"] -grund = [ - "x x x x xx x", - "x x xx xx x xx x", - "xx xx x xx xx x xx xx x ", - - "x x x xx xx ", - "x xx xx x xx xx ", - "x xx x xx xx x xx xx x x", - - "x x xx xx x ", - "xx xx x xx xx x ", - "xx x xx xx x xx xx x xx ", - - "x xx xx x x ", - "x xx x xx xx x x", - "x x xx xx x xx xx x xx x", - - "xx xx x x x ", - "xx x xx xx x xx ", - "x xx xx x xx xx x xx xx ", - - "x xx x x x x", - "x x xx xx x xx x", - "xx xx x xx xx x xx xx x ", - - "xx x x x xx ", - "x xx xx x xx xx ", - "x xx x xx xx x xx xx x x", - - - "x x x x xx x", - "xx xx x xx xx x ", - "xx x xx xx x xx xx x xx ", - - "x x x xx xx ", - "x xx x xx xx x x", - "x x xx xx x xx xx x xx x", - - "x x xx xx x ", - "xx x xx xx x xx ", - "x xx xx x xx xx x xx xx ", - - "x xx xx x x ", - "x x xx xx x xx x", - "xx xx x xx xx x xx xx x ", - - "xx xx x x x ", - "x xx xx x xx xx ", - "x xx x xx xx x xx xx x x", - - "x xx x x x x", - "xx xx x xx xx x ", - "xx x xx xx x xx xx x xx ", - - "xx x x x xx ", - "x xx x xx xx x x", - "x x xx xx x xx xx x xx x", - - "x x x x xx x", - "xx x xx xx x xx ", - "x xx xx x xx xx x xx xx ", - - "x x x xx xx ", - "x x xx xx x xx x", - "xx xx x xx xx x xx xx x " -] - -accents = '' -accstr = '' - - -def stemme(st) : - adr = [0] * (385*16) - pos = st*48+44 - - for i in range(0,100): - adr[384*16-i*28] = ord ('X') - - for k in range(0,48): - if k: - for j in range(0,8): - adr[pos] = 0 - pos += 1 - - for j in range(0,4): - for c in grund[k]: - if c ==' ' : - adr[pos] = 0 - else: - adr[pos] = 3-j+ord ('a') - pos += 1 - - for i in range(0,385*16): - ac = accents[48*4+i-((48+24-st)%48)*4] - if ac: - adr[i]=ac - - return adr - - -def print1(ch) : - accstr="" - if ch >= ord('A') and ch <=ord('D'): - ch += ord('a')-ord('A') - accstr="->" - - namestr = '' - cr = chr (ch) - - if cr=='a': - namestr="a" - elif cr=='b': - namestr="b" - elif cr=='c': - namestr="d'" - elif cr=='d': - namestr="e'" - elif cr=='X': - namestr="\\override Staff.NoteHead #'style = #'cross c'" - accstr="-^ \\revert Staff.NoteHead #'style" - else: - print 'foo', cr, chr(ch), ch == 'd', "A%sA" % cr - raise 'foo' - - return (namestr,accstr) - - -namestr = '' -accstr = '' - -def print4(ptr): - val = reduce (lambda x,y : x|y, ptr) -# sys.stderr.write ('%d ' % val) - if not val: - sys.stdout.write ("r4 ") - else: - dur=-1 - - global namestr - global accstr - if ptr[0]==0: - sys.stdout.write ("~") - (namestr, accstr) = print1(val) - - for c in ptr: - if c==0: - dur += 1 - else: - if dur>=0: - sys.stdout.write( "%s%s%s " % (namestr,durs[dur],accstr)) - (namestr, accstr) = print1(c) - dur=0 - - sys.stdout.write( "%s%s%s "% (namestr,durs[dur],accstr)) - - - -def print8(ptr) : - val = reduce (lambda x,y : x|y, ptr) - if val: - print4(ptr[0:4]) - print4(ptr[4:8]) - else: - sys.stdout.write ("r2 ") - - -def print16(ptr): - val = reduce (lambda x,y : x|y, ptr) - if val: - print8(ptr[0:8]) - print8(ptr[8:16]) - else: - sys.stdout.write("R1 ") - -accents = [0] *(500*16) -for i in range(0,32): - pos=i*12*16+4*48 - accents[pos]=ord('D') - if(i<31) : - if(i>0): - accents[pos+4*12]=ord('A') - accents[pos+4*23]=ord('C') - accents[pos+4*35]=ord('B' ) - - -sys.stdout.write ('%%{\n %s \n %%}' % copyright) -sys.stdout.write (r""" -\version "2.7.29" -#(set-global-staff-size 11) - -\header { - title = "CLA(O)P II" - composer = "Peter Wallin (1992-93)" - copyright = "Copyright (1992-93) Peter Wallin, verbatim redistribution permitted" -} - - -""") - - - - - -for st in range(1,voices+1): - str=stemme(st) - ststr=chr((st-1)/24+ord('A')) + chr ((st-1)%24+ord('A')) - sys.stdout.write(r''' - -stemme%s = { -\clef percussion -\set Staff.instrument = "%d" -\set Staff.instr = "%d" -\set Score.currentBarNumber = #%d -''' - % (ststr,st,st,start_measure)) - - for i in range(start_measure-1, start_measure-1+no_measures): - print16(str[i*16:i*16+16]) - sys.stdout.write (" \n") - - sys.stdout.write ("\\bar\"|.\" }\n") - - -sys.stdout.write (r""" -<< - \override Score.BarNumber #'padding = #2.5 - #(override-auto-beam-setting '(end * * * *) 1 4) - \set Score.skipBars = ##t - \context StaffGroup << - \override StaffGroup.Stem #'direction = #UP -""") - - -for st in range(1,voices+1): - ststr=chr((st-1)/24+ord('A')) + chr ((st-1)%24+ord('A')) - ststr = 'stemme' + ststr - sys.stdout.write (r"""\context Staff="%s" \%s -""" % (ststr,ststr)) - -sys.stdout.write (r""">> ->> -#(set-default-paper-size "a3") -\paper { - linewidth = 26.0\cm - indent = 0 - textheight = 38.0\cm - %hsize = 30.0 \cm - %vsize = 42.0 \cm -} -\layout { - \context { - \Staff - \override StaffSymbol #'line-count = #3 - minimumVerticalExtent = #'(-3 . 3) - } -} -""") diff --git a/input/new/GNUmakefile b/input/new/GNUmakefile deleted file mode 100644 index bc32848ae7..0000000000 --- a/input/new/GNUmakefile +++ /dev/null @@ -1,7 +0,0 @@ -depth = ../.. - -STEPMAKE_TEMPLATES=documentation -EXTRA_DIST_FILES=README -EXTRA_DIST_FILES+=$(call src-wildcard,*.ly) - -include $(depth)/make/stepmake.make diff --git a/input/new/README b/input/new/README deleted file mode 100644 index 058fd73515..0000000000 --- a/input/new/README +++ /dev/null @@ -1,17 +0,0 @@ -This directory is for examples of new features in the current -unstable development series. These snippets will be added to LSR -when it supports a version of LilyPond that includes these features. - -When adding a file to this directory, please start the file with - -\version "2.x.y" -\header { - lsrtags = "rhythms,expressive-marks" % use existing LSR tags other than -% 'docs'; see makelsr.py for the list of tags used to sort snippets. - texidoc = "This code demonstrates ..." % this will be formated by Texinfo - doctitle = "Snippet title" % please put this at the end so that - the '% begin verbatim' mark is added correctly by makelsr.py. -} - - -and name the file snippet-title.ly. diff --git a/input/paddy.abc b/input/paddy.abc deleted file mode 100644 index 0aadebc63c..0000000000 --- a/input/paddy.abc +++ /dev/null @@ -1,16 +0,0 @@ -% -% This is NOT a lilypond input file. It is an ABC file, see -% http://www.gre.ac.uk/~c.walshaw/abc/ -% -% LilyPond includes import tools for Finale, Musedata, ABC, MIDI and PMX -% -X:1 -T:Paddy O'Rafferty -C:Trad. -M:6/8 -K:D -dff cee|def gfe|dff cee|dfe dBA|dff cee|def gfe|faf gfe|1 dfe dBA:|2 dfe dcB|| -~A3 B3|gfe fdB|AFA B2c|dfe dcB|~A3 ~B3|efe efg|faf gfe|1 dfe dcB:|2 dfe dBA|| -fAA eAA|def gfe|fAA eAA|dfe dBA|fAA eAA|def gfe|faf gfe|dfe dBA:| - - diff --git a/input/proportional.ly b/input/proportional.ly deleted file mode 100644 index 4ee27da27a..0000000000 --- a/input/proportional.ly +++ /dev/null @@ -1,127 +0,0 @@ -\version "2.12.0" - -\header -{ - title = "Proportional notation" - copyright = "© 2005 Trevor Bača - verbatim reproduction permitted." -} - -\layout -{ - indent = #0.0 - \context { - \Voice - \remove "Forbid_line_break_engraver" - \override TupletNumber #'text = #tuplet-number::calc-fraction-text - tupletFullLength = ##t - \override Beam #'breakable = ##t - } - \context { - \Score - \override TupletBracket #'edge-text = #(cons - (markup #:arrow-head X LEFT #f) - (markup #:arrow-head X RIGHT #f)) - \override SpacingSpanner #'uniform-stretching = ##t - \override SpacingSpanner #'strict-note-spacing = ##t - proportionalNotationDuration = #(ly:make-moment 1 64) - \override TimeSignature #'break-visibility = #end-of-line-invisible - \override Beam #'break-overshoot = #'(-0.5 . 1.0) - \override TupletBracket #'break-overshoot = #'(-0.5 . 1.0) - \override TupletBracket #'staff-padding = #3.5 - } - \context { - % we want over print if necessary. - \RhythmicStaff - \remove "Separating_line_group_engraver" - } -} - -staffKind = "RhythmicStaff" - -%staffKind = "Staff" - -\relative c'' -\new StaffGroup << - \new \staffKind << - { - \skip 2 - \skip 2 - \break \time 4/8 - \skip 1 \break \time 4/8 - \skip 1 \break \time 4/8 - } - - { - \time 4/8 - - \times 7/9 { - \times 4/6 { - r8 c32[ c c c c c c c] r4 - c32[ c32 c16 } - \times 5/4 { - c16 c c] c32[ c32 c16 c] r8 } - } - - \times 10/12 { - \times 7/6 { - c32[ c32 c8 c16] r4 - c16[ c16 c16. c32 - } - \times 5/8 { - c16 c16 c16. c32] r8 c8[ c8] r4. - } - } - - \times 4/7 { - r8 - c16[ c16 - \times 5/4 { - c16 r16 c8 c c - } - } - - \times 3/4 { - c8] - c16[ c - \times 2/3 { - c16 c16] - r4 } - } - } - >> - \new \staffKind - << - { - \times 9/5 { - r8. c16[ c c - \grace { - \stemDown - c32[ c32] - \stemNeutral - } - c16 c c - c - } - \times 4/7 { - c16 c c c ] - \times 5/4 { - c16[ c32 c32] - r4 - c32[ c c16 - } - } - \times 10/12 { - \times 7/10 { - c16 c16 c8] r4 c4 - c16[ c8 c16 c16 r8 c16 - } - c16 c32 c32] - r4. - c16.[ - c32 - } - c16 c16] - - } - >> ->> diff --git a/input/puer-fragment.ly b/input/puer-fragment.ly deleted file mode 100644 index f05fa6a0a7..0000000000 --- a/input/puer-fragment.ly +++ /dev/null @@ -1,286 +0,0 @@ -\version "2.12.0" -\header { - title = "Puer natus est nobis" - subtitle = "Antiphona ad introitum VII" - texidoc = " - -Demonstrate gregorian chant notation - -This file pretty nicely demonstrates what still does not work among -ligatures: (i) horizontal spacing between ligatures and lyrics -aligment is broken; (ii) there is no satisfactory support for -initials; (iii) all scripts are broken as soon as they appear within -ligatures, and episem is broken also outside of ligatures; (iv) -augmentum dots is missing; (v) accidentals must be placed before the -ligature (not demonstrated in this example)." - -} - -#(set-global-staff-size 26) -\include "gregorian.ly" - -%%% N.B.: Yes, I know, the formatting of the following looks awful, -%%% but this is intentional for editorial purposes (simplifies some -%%% global search/replace operations in emacs). - -cantus = \new VaticanaVoice = "cantus" { - \set Staff.instrumentName = \markup { - \column { - " " " " " " " " "VII" " " - { - \larger \larger \larger \larger - \larger \larger \larger \larger - \larger \larger \larger \larger - "P" - } - } - } - \[ - g4\melisma %%% Pu- - \pes - d'\melismaEnd - \] - d'\augmentum %%% er - \[ - d'\melisma %%% na- - \pes e' \flexa - d'\melismaEnd - \] - c' %%% tus - \[ - c'\melisma %%% est - c' - c'\melismaEnd - \] - \[ - d'\melisma %%% no- - \flexa c' e' \flexa - d'\melismaEnd - \] - d'\augmentum %%% bis, - \divisioMaior - \[ - g\melisma %%% et - \pes \deminutum - d'\melismaEnd - \] - \[ - d'\melisma %%% fí- - \pes e' \flexa - d'\melismaEnd - \] - \[ - c'\melisma %%% li- - \flexa - b\melismaEnd - \] - a %%% us - \[ - c'\melisma %%% da- - c' \pes - d'\melismaEnd - \] - c' %%% tus- - c' %%% est - \[ - c'\melisma %%% no- - \pes d' \flexa c' - c'\melismaEnd - \] - \[ - g\melisma %%% bis: - \pes a \flexa - g\melismaEnd\augmentum - \] - \divisioMaxima - g %%% cu- - a %%% ius - c' %%% im- - \[ - b\melisma %%% pé- - \pes d' e' - \pes f'\melismaEnd - \] - \[ - d'\melisma %%% ri- - \flexa c'\melismaEnd - \] - c'\augmentum %%% um - \divisioMinima - c' %%% su- - c' %%% per - \[ - d'\melisma %%% hú- - \flexa c' - e' \flexa - d'\melismaEnd - \] - \[ - c'\melisma %%% me- - \flexa b\melismaEnd - \] - \[ - c'\melisma %%% rum - c' c'\melismaEnd - \] - \[ - c'\melisma %%% e- - \flexa a - c' \flexa b - \virga c' \inclinatum b - \inclinatum a\melismaEnd - \] - \[ - b\melisma %%% ius: - \augmentum \flexa - a\melismaEnd \augmentum - \] - \divisioMaxima - \[ - c'\melisma %%% et - \flexa b\melismaEnd - \] - c' %%% vo- - \[ - c'\melisma %%% cá- - \pes e' \flexa - d'\melismaEnd - \] - c' %%% bi- - \[ - c'\melisma %%% tur - c' c'\melismaEnd - \] - c' %%% no- - \[ - c'\melisma %%% men - c' c'\melismaEnd - \] - \[ - c'\melisma %%% e- - \pes d' \flexa b - \virga c' \inclinatum b - \inclinatum a\melismaEnd - \] - \[ - b\melisma %%% ius, - \augmentum \flexa - a\melismaEnd\augmentum - \] - \divisioMaior - \[ - c'\melisma %%% ma- - \pes e'\melismaEnd - \] - d' %%% gni - \[ - g\melisma %%% con- - \pes \deminutum - c'\melismaEnd - \] - c' %%% sí- - \[ - c'\melisma %%% li- - c' c' \flexa a\melismaEnd - \] - a %%% i - \[ - a\melisma %%% An- - \pes c' \flexa a - \quilisma b \pes - c'\melismaEnd - \] - \[ - g\melisma %%% ge- - \pes a \flexa - g\melismaEnd - \] - g\augmentum %%% lus. - s_\markup { \italic { "Ps." } } - \finalis - \[ - g\melisma %%% Can- - \pes c' \flexa b\melismaEnd - \] - \[ - c'\melisma %%% tá- - \pes d'\melismaEnd - \] - d' %%% te - d' %%% Dó- - d' %%% mi- - d' %%% no - \[ - d'\melisma %%% cán- - \pes f'\melismaEnd - \] - e' %%% ti- - e' %%% cum - \[ - e'\melisma %%% no- - \flexa d'\melismaEnd - \] - \[ - d'\melisma %%% vum: - \augmentum \pes - e'\melismaEnd \augmentum - \] - \[ - d'\melisma %%% qui- - \flexa b\melismaEnd - \] - \[ - c'\melisma %%% a - \pes d'\melismaEnd - \] - d' %%% mi- - d' %%% ra- - \[ - d'\melisma %%% bí- - \quilisma e' - \pes f'\melismaEnd - \] - d' %%% li- - c' %%% a - \[ - c'\melisma %%% fe- - c' c'\melismaEnd - \] - \[ - a\melisma %%% cit. - \augmentum \flexa - g\melismaEnd \augmentum - \] - \finalis -} - -verba = \new Lyrics = "verba" \lyricmode { - U -- ER na -- tus est no -- bis, - et fí -- li -- us da -- tus est no -- "bis :" - cu -- ius im -- pé -- ri -- um su -- per - hú -- me -- rum e -- "ius :" et vo -- cá -- - bi -- tur no -- men e -- ius, ma -- gni - con -- sí -- li -- i An -- ge -- lus. - Can -- tá -- te Dó -- mi -- no cán -- - ti -- cum no -- "vum :" qui -- a mi -- ra -- - bí -- li -- a fe -- cit. -} - -\paper { -% line-thickness = \staff-space / 7.0 -% line-thickness = \staff-space / 3.0 -} - -\score { - << - \cantus - \lyricsto "cantus" \verba - >> - \layout { - indent = 17.0\mm - } -} - -%%% Local Variables: -%%% coding: utf-8 -%%% End: diff --git a/input/regression/AAA-intro-regression.tely b/input/regression/AAA-intro-regression.tely old mode 100644 new mode 100755 index 0353678e9e..bfb802a144 --- a/input/regression/AAA-intro-regression.tely +++ b/input/regression/AAA-intro-regression.tely @@ -1,12 +1,12 @@ @unnumbered Introduction This document presents proofs for -LilyPond @lilypondversion). When the +LilyPond @lilypondversion. When the text corresponds with the shown notation, we consider LilyPond Officially BugFree (tm). This document is intended for finding bugs and for documenting bugfixes. -In the web version of this document, you can click on the file name +In the web version of this document, you can click on the file name or figure for each example to see the corresponding input file. TODO: order of tests (file names!), test only one feature per test. diff --git a/input/regression/GNUmakefile b/input/regression/GNUmakefile index 753d483bd9..cc769e7c2f 100644 --- a/input/regression/GNUmakefile +++ b/input/regression/GNUmakefile @@ -6,4 +6,4 @@ LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc include $(depth)/make/stepmake.make TITLE=LilyPond Regression Tests -SUBDIRS=musicxml +SUBDIRS=midi musicxml abc2ly lilypond-book diff --git a/input/regression/abc2ly/GNUmakefile b/input/regression/abc2ly/GNUmakefile new file mode 100644 index 0000000000..7356f99cb3 --- /dev/null +++ b/input/regression/abc2ly/GNUmakefile @@ -0,0 +1,14 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation texinfo tex +LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc abc + +TEXI2HTML_FLAGS += --nomenu + +TMP = $(sort $(ABC_FILES) $(TEXINFO_SOURCES) ) +COLLATED_FILES = ${TMP:%.abc=$(outdir)/%.ly} + + +include $(depth)/make/stepmake.make + +TITLE=abc2ly test suite diff --git a/input/regression/abc2ly/clefs.abc b/input/regression/abc2ly/clefs.abc new file mode 100644 index 0000000000..18403238ac --- /dev/null +++ b/input/regression/abc2ly/clefs.abc @@ -0,0 +1,13 @@ +X: 1 +T: Various different clefs +L: 1/4 +K: none +CEGc | [K: C treble] CEGc |[K: Cm bass]CEGc | +w: none | treble | bass | +[K: C bass3]CEGc | [K: Cm alto4]CEGc| [K: C alto]CEGc | +w: baritone | tenor | alto | +[K: Cm alto2]CEGc | [K: C alto1]CEGc | [K: Cm treble-8]CEGc | +w: mezzosoprano | soprano | treble-8 | +[K: C treble-8va]CEGc | [K: Cm treble+8]CEGc | [K: C treble8]CEGc |] +w: treble-8va | treble+8 | treble8 | + diff --git a/input/regression/abc2ly/grace.abc b/input/regression/abc2ly/grace.abc new file mode 100644 index 0000000000..8faaff2a7a --- /dev/null +++ b/input/regression/abc2ly/grace.abc @@ -0,0 +1,6 @@ +X:1 +T:abc2ly grace note bug (missing square bracket, duration of grace notes) +M:C +L:1/8 +K:E Dorian +{ga}gdgb {a}g>d gA B>ABD B>DA>F|e>ceBe + } diff --git a/input/regression/accidental-collision.ly b/input/regression/accidental-collision.ly index 062e1f8cf4..b238f477aa 100644 --- a/input/regression/accidental-collision.ly +++ b/input/regression/accidental-collision.ly @@ -2,7 +2,7 @@ texidoc = "accidentals avoid stems of other notes too." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/accidental-contemporary.ly b/input/regression/accidental-contemporary.ly index 9da5027861..4aadbb95a5 100644 --- a/input/regression/accidental-contemporary.ly +++ b/input/regression/accidental-contemporary.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Several automatic accidental rules diff --git a/input/regression/accidental-double.ly b/input/regression/accidental-double.ly index 3d91d10f11..e393282148 100644 --- a/input/regression/accidental-double.ly +++ b/input/regression/accidental-double.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "If two forced accidentals happen at the same time, only one sharp sign is printed." diff --git a/input/regression/accidental-forced-tie-barline.ly b/input/regression/accidental-forced-tie-barline.ly index 0511b85163..b62d22a11f 100644 --- a/input/regression/accidental-forced-tie-barline.ly +++ b/input/regression/accidental-forced-tie-barline.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Cautionary accidentals applied to tied notes after a diff --git a/input/regression/accidental-forced-tie.ly b/input/regression/accidental-forced-tie.ly index e28d873672..c875dc81e0 100644 --- a/input/regression/accidental-forced-tie.ly +++ b/input/regression/accidental-forced-tie.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Accidentals can be forced with ! and ? even if the notes are tied." @@ -8,6 +8,6 @@ ragged-right = ##t } -\relative { - gis'4 ~ gis!~ gis? - } +\relative c'' { + gis4 ~ gis!~ gis? +} diff --git a/input/regression/accidental-ledger.ly b/input/regression/accidental-ledger.ly index 51dfe52819..4c55bc267c 100644 --- a/input/regression/accidental-ledger.ly +++ b/input/regression/accidental-ledger.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/accidental-octave.ly b/input/regression/accidental-octave.ly index 129f579599..da4c1e195a 100644 --- a/input/regression/accidental-octave.ly +++ b/input/regression/accidental-octave.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" diff --git a/input/regression/accidental-piano.ly b/input/regression/accidental-piano.ly index 1c85862ed7..6c47b306b7 100644 --- a/input/regression/accidental-piano.ly +++ b/input/regression/accidental-piano.ly @@ -6,7 +6,7 @@ accidental." } -\version "2.12.0" +\version "2.14.0" \layout { diff --git a/input/regression/accidental-placement-padding.ly b/input/regression/accidental-placement-padding.ly new file mode 100644 index 0000000000..5151237061 --- /dev/null +++ b/input/regression/accidental-placement-padding.ly @@ -0,0 +1,12 @@ +\version "2.14.0" + +\header { + texidoc = "Accidental padding works for all accidentals, including +those modifying the same pitch." +} + +\relative c' { + \override Staff.AccidentalPlacement #'padding = #2 + 1 + 1 +} diff --git a/input/regression/accidental-placement-samepitch.ly b/input/regression/accidental-placement-samepitch.ly index 4a1b407aa1..29d8bf7daf 100644 --- a/input/regression/accidental-placement-samepitch.ly +++ b/input/regression/accidental-placement-samepitch.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "When two (or more) accidentals modify the same pitch, diff --git a/input/regression/accidental-placement.ly b/input/regression/accidental-placement.ly index a7ed3c6420..6937225eed 100644 --- a/input/regression/accidental-placement.ly +++ b/input/regression/accidental-placement.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/accidental-quarter.ly b/input/regression/accidental-quarter.ly index 165e4c15a3..93406f9c3a 100644 --- a/input/regression/accidental-quarter.ly +++ b/input/regression/accidental-quarter.ly @@ -3,7 +3,7 @@ texidoc = "Quarter tone notation is supported, including threequarters flat." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } \relative c'' { diff --git a/input/regression/accidental-single-double.ly b/input/regression/accidental-single-double.ly index 4cdbc78967..4d7c1d56f7 100644 --- a/input/regression/accidental-single-double.ly +++ b/input/regression/accidental-single-double.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" A sharp sign after a double sharp sign, as well as a flat sign diff --git a/input/regression/accidental-suggestions.ly b/input/regression/accidental-suggestions.ly index 3e0ae0c72e..5f2eff948f 100644 --- a/input/regression/accidental-suggestions.ly +++ b/input/regression/accidental-suggestions.ly @@ -7,7 +7,7 @@ denoting Musica Ficta." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/accidental-tie-overridden.ly b/input/regression/accidental-tie-overridden.ly new file mode 100644 index 0000000000..bdc67a5781 --- /dev/null +++ b/input/regression/accidental-tie-overridden.ly @@ -0,0 +1,23 @@ +\version "2.14.0" + +\header { + texidoc = "The presence of an accidental after a broken tie can be +overridden." +} +\layout { + ragged-right = ##t +} + +mus = \relative c' { + \override Accidental #'hide-tied-accidental-after-break = ##t + f1~ + f2~f4 % ~ f8 + fis8 gis8 ~ + \break + gis1 +} + +<< + \new NoteNames \mus + \new Voice { \key g \major \mus } +>> diff --git a/input/regression/accidental-tie.ly b/input/regression/accidental-tie.ly index 04a4b372d1..739d919e4c 100644 --- a/input/regression/accidental-tie.ly +++ b/input/regression/accidental-tie.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The second and third notes should not get accidentals, diff --git a/input/regression/accidental-unbroken-tie-spacing.ly b/input/regression/accidental-unbroken-tie-spacing.ly index a9857e4026..8ca5e3920a 100644 --- a/input/regression/accidental-unbroken-tie-spacing.ly +++ b/input/regression/accidental-unbroken-tie-spacing.ly @@ -1,13 +1,9 @@ \header { -texidoc = "Tied accidentaled notes (which cause reminder accidentals) do not -wreak havoc in the spacing when unbroken." +texidoc = "Tied notes with accidentals do not cause problems with spacing." } -\version "2.12.0" -\layout { - ragged-right = ##t -} +\version "2.14.0" \relative c' { \clef treble diff --git a/input/regression/accidental-voice.ly b/input/regression/accidental-voice.ly index a1be03b654..819e3b78f8 100644 --- a/input/regression/accidental-voice.ly +++ b/input/regression/accidental-voice.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } \header{ diff --git a/input/regression/accidental.ly b/input/regression/accidental.ly index 587ef751fd..06ccc02b98 100644 --- a/input/regression/accidental.ly +++ b/input/regression/accidental.ly @@ -1,10 +1,10 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Accidentals work: the second note does not get a sharp. The third and -fourth show forced and courtesy accidentals. +fourth show forced and cautionary accidentals. " } diff --git a/input/regression/alignment-order.ly b/input/regression/alignment-order.ly index a5bec4114f..3bca500d09 100644 --- a/input/regression/alignment-order.ly +++ b/input/regression/alignment-order.ly @@ -3,7 +3,7 @@ anywhere in the vertical alignment. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/alignment-vertical-manual-setting.ly b/input/regression/alignment-vertical-manual-setting.ly index b176e931ce..1448acf835 100644 --- a/input/regression/alignment-vertical-manual-setting.ly +++ b/input/regression/alignment-vertical-manual-setting.ly @@ -1,12 +1,12 @@ \header { - texidoc = "Alignments may be changed pre system by setting - @code{alignment-offsets} in the @code{line-break-system-details} + texidoc = "Alignments may be changed per system by setting + @code{alignment-distances} in the @code{line-break-system-details} property" } -\version "2.12.0" +\version "2.14.0" \book { \score { @@ -17,17 +17,17 @@ \overrideProperty #"Score.NonMusicalPaperColumn" #'line-break-system-details - #'((alignment-offsets . (#f #f -30))) + #'((alignment-distances . (#f 20))) c1 \break \overrideProperty #"Score.NonMusicalPaperColumn" #'line-break-system-details - #'((alignment-offsets . (0 -5 -20))) + #'((alignment-distances . (5 15))) c1 \break \overrideProperty #"Score.NonMusicalPaperColumn" #'line-break-system-details - #'((alignment-offsets . (0 -15 -20))) + #'((alignment-distances . (15 5))) c1 c } >> diff --git a/input/regression/alignment-vertical-spacing.ly b/input/regression/alignment-vertical-spacing.ly deleted file mode 100644 index 2140e3754e..0000000000 --- a/input/regression/alignment-vertical-spacing.ly +++ /dev/null @@ -1,51 +0,0 @@ - -\header { - - texidoc = "By setting properties in @code{NonMusicalPaperColumn}, vertical -spacing of alignments can be adjusted per system. - -By setting @code{alignment-extra-space} or -@code{fixed-alignment-extra-space} an individual system may be -stretched vertically. - -For technical reasons, @code{overrideProperty} has to be used for -setting properties on individual object. @code{\override} in a -@code{\context} block may still be used for global overrides. - -" - -} - -\version "2.12.0" - -#(set-global-staff-size 13) - -\relative c'' -\new StaffGroup << - \new Staff { - c1\break - c\break c\break - } - \new Staff { c1 c c } - \new PianoStaff << - \new Voice { - \set PianoStaff.instrumentName = #"piano" - \set PianoStaff.shortInstrumentName = #"pn" - c1_"normal" - - \overrideProperty - #"Score.NonMusicalPaperColumn" - #'line-break-system-details - #'((fixed-alignment-extra-space . 15)) - c_"fixed-aligment-extra-space" - - \overrideProperty - #"Score.NonMusicalPaperColumn" - #'line-break-system-details - #'((alignment-extra-space . 15)) - c_"aligment-extra-space" - } - { c1 c c } - >> ->> - diff --git a/input/regression/ambitus-gap.ly b/input/regression/ambitus-gap.ly new file mode 100644 index 0000000000..339939ec1a --- /dev/null +++ b/input/regression/ambitus-gap.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { + texidoc = "The gaps between an @code{AmbitusLine} and its +note heads are set by the @code{gap} property." +} + +\layout { + \context { + \Voice + \consists "Ambitus_engraver" + } +} + +\new Staff { + \time 2/4 + \override AmbitusLine #'gap = #1 + c'4 g'' +} + diff --git a/input/regression/ambitus-percussion-staves.ly b/input/regression/ambitus-percussion-staves.ly index 59012766f5..521698ab27 100644 --- a/input/regression/ambitus-percussion-staves.ly +++ b/input/regression/ambitus-percussion-staves.ly @@ -1,4 +1,4 @@ -\version "2.12.2" +\version "2.14.0" \header { texidoc = "Adding ambitus to percussion contexts does not cause diff --git a/input/regression/ambitus-pitch-ordering.ly b/input/regression/ambitus-pitch-ordering.ly index 91b2d86d97..a70446530e 100644 --- a/input/regression/ambitus-pitch-ordering.ly +++ b/input/regression/ambitus-pitch-ordering.ly @@ -1,13 +1,11 @@ -\header { - texidoc = "Ambituses use actual pitch not lexicographic ordering." - } - -\version "2.12.0" +\version "2.14.0" -\paper { - ragged-right=##t +\header { + texidoc = "Ambitus use actual pitch not lexicographic ordering." } \new Voice \with { \consists "Ambitus_engraver" } { - \clef F c eis fes + \clef F + c4 eis fes2 } + diff --git a/input/regression/ambitus-with-ligature.ly b/input/regression/ambitus-with-ligature.ly new file mode 100644 index 0000000000..c82e51ce40 --- /dev/null +++ b/input/regression/ambitus-with-ligature.ly @@ -0,0 +1,15 @@ +\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 \] +} diff --git a/input/regression/ambitus.ly b/input/regression/ambitus.ly index f53e3e987b..7c36449dfc 100644 --- a/input/regression/ambitus.ly +++ b/input/regression/ambitus.ly @@ -1,27 +1,34 @@ +\version "2.14.0" + \header { - texidoc = "Ambituses indicate pitch ranges for voices. + texidoc = "Ambitus indicate pitch ranges for voices. Accidentals only show up if they're not part of key -signature. @code{AmbitusNoteHead} grobs also have ledger lines. - +signature. @code{AmbitusNoteHead} grobs also have ledger lines. +The noteheads are printed in overstrike, so there's only one +visible; the accidentals are prevented from colliding. " } -\version "2.12.0" \layout { - ragged-right = ##t - \context { - \Voice - \consists Ambitus_engraver - } + \context { + \Voice + \consists "Ambitus_engraver" + } } -\relative << - \new Staff { \time 2/4 c4 f' } - \new Staff \relative { - \time 2/4 - \key d \major - cis as' - } + \new Staff \relative c'{ + \time 2/4 + c4 f' + } + \new Staff \relative c' { + \time 2/4 + \key d \major + cis as' + } + \new Staff \relative c' { + \time 2/4 + c4 cis + } >> diff --git a/input/regression/apply-context.ly b/input/regression/apply-context.ly index afa55683f3..b83c906bd5 100644 --- a/input/regression/apply-context.ly +++ b/input/regression/apply-context.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/apply-output.ly b/input/regression/apply-output.ly index d107e4a42f..79d2d75b5a 100644 --- a/input/regression/apply-output.ly +++ b/input/regression/apply-output.ly @@ -1,7 +1,7 @@ -\version "2.12.0" +\version "2.14.0" \header { - texidoc = "The @code{\applyOutput} expression is the most flexible way to + texidoc = "The @code{\\applyOutput} expression is the most flexible way to tune properties for individual grobs. Here, the layout of a note head is changed depending on its vertical diff --git a/input/regression/arpeggio-bracket.ly b/input/regression/arpeggio-bracket.ly index 3446871a65..60d1dc4257 100644 --- a/input/regression/arpeggio-bracket.ly +++ b/input/regression/arpeggio-bracket.ly @@ -1,7 +1,7 @@ \layout { ragged-right= ##t } -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" A square bracket on the left indicates that the player should not diff --git a/input/regression/arpeggio-collision.ly b/input/regression/arpeggio-collision.ly index ba82ac1293..56ccaafb6b 100644 --- a/input/regression/arpeggio-collision.ly +++ b/input/regression/arpeggio-collision.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Arpeggio stays clear of accidentals and flipped note heads." diff --git a/input/regression/arpeggio-no-overshoot.ly b/input/regression/arpeggio-no-overshoot.ly index 7b10077911..823c50bf3f 100644 --- a/input/regression/arpeggio-no-overshoot.ly +++ b/input/regression/arpeggio-no-overshoot.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Arpeggios do not overshoot the highest note head. diff --git a/input/regression/arpeggio-no-staff-symbol.ly b/input/regression/arpeggio-no-staff-symbol.ly new file mode 100644 index 0000000000..25cd8c2ac1 --- /dev/null +++ b/input/regression/arpeggio-no-staff-symbol.ly @@ -0,0 +1,10 @@ +\version "2.14.0" + +\header { + texidoc = "Arpeggios stil work in the absence of a staff-symbol." +} + +\new Staff \with { \remove "Staff_symbol_engraver" } +\relative c' { + \arpeggio +} diff --git a/input/regression/arpeggio-parenthesis.ly b/input/regression/arpeggio-parenthesis.ly index dd43018272..728bcef431 100644 --- a/input/regression/arpeggio-parenthesis.ly +++ b/input/regression/arpeggio-parenthesis.ly @@ -1,17 +1,12 @@ +\version "2.14.0" \header { - texidoc = "There is a variant of the arpeggio sign that uses a - `vertical slur' instead of the wiggle." - +`vertical slur' instead of the wiggle." } -\version "2.12.0" - \relative c' { - \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur - + \arpeggioParenthesis % Note: does not work for cross staff arpeggios. - \override Arpeggio #'X-extent = #ly:grob::stencil-width 2\arpeggio ~ c } diff --git a/input/regression/arpeggio-span-collision.ly b/input/regression/arpeggio-span-collision.ly new file mode 100644 index 0000000000..3f405b4515 --- /dev/null +++ b/input/regression/arpeggio-span-collision.ly @@ -0,0 +1,25 @@ +\version "2.14.0" + +\header { + texidoc = "Cross-staff or -voice arpeggios which include single +note heads as anchors do not collide with previous note heads or +prefatory material." +} +ddddd = { d'16 d'16 d'16 d'16 d'4\arpeggio } +sdf = { s4 4\arpeggio } +\score { + \new PianoStaff << + \new Staff { + \set PianoStaff.connectArpeggios = ##t + << \transpose c c'{ \ddddd \sdf } \\ { \sdf \ddddd } >> + << { a'1\arpeggio } \\ { f'2\arpeggio e' } >> + } + \new Staff { + R1 + d'\arpeggio + } + >> + \layout { + line-width = 90\mm + } +} diff --git a/input/regression/arpeggio-span-one-staff.ly b/input/regression/arpeggio-span-one-staff.ly index 03712af013..c7606ecbdf 100644 --- a/input/regression/arpeggio-span-one-staff.ly +++ b/input/regression/arpeggio-span-one-staff.ly @@ -2,7 +2,7 @@ texidoc = "Span arpeggios within one staff also work" } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } \new PianoStaff << diff --git a/input/regression/arpeggio.ly b/input/regression/arpeggio.ly index abe2054cd5..1652dfb697 100644 --- a/input/regression/arpeggio.ly +++ b/input/regression/arpeggio.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Arpeggios are supported, both cross-staff and broken single staff. diff --git a/input/regression/articulation-snappizzicato.ly b/input/regression/articulation-snappizzicato.ly new file mode 100644 index 0000000000..10bd6489f2 --- /dev/null +++ b/input/regression/articulation-snappizzicato.ly @@ -0,0 +1,6 @@ +\header { + texidoc = "The snappizzicato articulation adds a snappizzicato sign to the note." +} +\version "2.14.0" + +\relative c'' { c4\snappizzicato } diff --git a/input/regression/augmentum.ly b/input/regression/augmentum.ly index 2d5d2f7423..1e189c8783 100644 --- a/input/regression/augmentum.ly +++ b/input/regression/augmentum.ly @@ -2,7 +2,7 @@ texidoc = "Augmentum dots are accounted for in horizontal spacing." } -\version "2.12.0" +\version "2.14.0" \include "gregorian.ly" \score { diff --git a/input/regression/auto-beam-bar.ly b/input/regression/auto-beam-bar.ly index 19ec38d721..9f15da02e6 100644 --- a/input/regression/auto-beam-bar.ly +++ b/input/regression/auto-beam-bar.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="No auto beams will be put over (manual) repeat bars." diff --git a/input/regression/auto-beam-beaming-override.ly b/input/regression/auto-beam-beaming-override.ly index afa8b99160..9e8356286e 100644 --- a/input/regression/auto-beam-beaming-override.ly +++ b/input/regression/auto-beam-beaming-override.ly @@ -8,14 +8,14 @@ beaming pattern related functions at the start of an autobeam." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } { \time 2/4 b16 b b b b16 b b b \set subdivideBeams = ##t - \set Score.beatLength = #(ly:make-moment 1 8) + \set Score.baseMoment = #(ly:make-moment 1 8) b16 b b b b16 b b b } diff --git a/input/regression/auto-beam-beat-grouping.ly b/input/regression/auto-beam-beat-grouping.ly deleted file mode 100644 index 1a9761d2db..0000000000 --- a/input/regression/auto-beam-beat-grouping.ly +++ /dev/null @@ -1,30 +0,0 @@ -\version "2.12.0" -\header { - - texidoc = "Autobeaming will break beams according to beatGrouping -if the total length of the beat groups is equal to measureLength. -Otherwise, it will break beams according to beatLength." -} - -{ - \time 12/16 - - % default beatLength is 1/16; beatGrouping for this time is '() - b16 b b b b b b b b b b b % beatlength is used to breatk these beams - % use beatGrouping to get 1/8 groups - \set Timing.beatGrouping = #'(2 2 2 2 2 2) % 6*2 = 12 so beatGrouping applies - b16 b b b b b b b b b b b % beam groups are 1/8 - % use beatLength to get 1/8 groups -- beatGrouping no longer applies - \set Score.beatLength = #(ly:make-moment 2 16 ) % 12*2/16 = 24/16 - % bad beatGrouping; use - % beatLength (1/8 notes) - b16 b b b b b b b b b b b - % make custom beatGrouping - \set Timing.beatGrouping = #'(3 1 2) % 6*2/16 = 12/16 - b16 b b b b b b b b b b b - % change beatLength - \set Score.beatLength = #(ly:make-moment 3 16 ) % 6*3/16 = 18/16; use beatLength - b16 b b b b b b b b b b b - \set Score.beatLength = #(ly:make-moment 4 16 ) % 6*4/16 = 24/16; use beatLength - b16 b b b b b b b b b b b -} diff --git a/input/regression/auto-beam-breathe.ly b/input/regression/auto-beam-breathe.ly new file mode 100644 index 0000000000..66db8d1a4e --- /dev/null +++ b/input/regression/auto-beam-breathe.ly @@ -0,0 +1,16 @@ +\version "2.14.0" + +\header { + texidoc = "Automatic beams are ended early if a breathing sign is +encountered." +} + +\relative c' { + \time 1/1 + \repeat unfold 8 c8 + c8 c + \breathe + c8 c c c c + \breathe + c8 +} diff --git a/input/regression/auto-beam-no-beam.ly b/input/regression/auto-beam-no-beam.ly index e0656c40ad..be7c874d31 100644 --- a/input/regression/auto-beam-no-beam.ly +++ b/input/regression/auto-beam-no-beam.ly @@ -1,14 +1,14 @@ \header { - + texidoc = "The autobeamer may be switched off for a single note with @code{\\noBeam}." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } -\relative { c8 c-\noBeam c c } +\relative c' { c8 c-\noBeam c c } diff --git a/input/regression/auto-beam-partial-grace.ly b/input/regression/auto-beam-partial-grace.ly new file mode 100644 index 0000000000..18b61dc3e9 --- /dev/null +++ b/input/regression/auto-beam-partial-grace.ly @@ -0,0 +1,13 @@ +\version "2.14.0" + +\header { + texidoc = "Grace notes at the start of a partial measure do not +break autobeaming." +} + +\relative c' { + \partial 4 + \grace e16 + d8 d + c8 c c c c c c c +} diff --git a/input/regression/auto-beam-partial.ly b/input/regression/auto-beam-partial.ly new file mode 100644 index 0000000000..b8f8157259 --- /dev/null +++ b/input/regression/auto-beam-partial.ly @@ -0,0 +1,13 @@ +\header { + texidoc="Autobeaming works properly in partial measures." +} + +\version "2.14.0" + + + +\relative c'' { + \time 6/8 + \partial 2 + a8 a a a | +} diff --git a/input/regression/auto-beam-recheck.ly b/input/regression/auto-beam-recheck.ly new file mode 100644 index 0000000000..8e368de5d4 --- /dev/null +++ b/input/regression/auto-beam-recheck.ly @@ -0,0 +1,15 @@ +\version "2.14.0" +\header { + + texidoc = "In 4/4 time, the first and second and third and fourth +beats should be beamed together if only eighth notes are involved. +If any shorter notes are included, each beat should be beamed separately." + +} +\layout { ragged-right = ##t } + +\relative c'' { + \repeat unfold 8 { a8} | + a8 a a a16 a a8 a a16 a a8 | + r16 a8. a8 a16 a r8. a16 a8 a16 a | +} diff --git a/input/regression/auto-beam-triplet.ly b/input/regression/auto-beam-triplet.ly index 01cee7f831..2a7bb39c7a 100644 --- a/input/regression/auto-beam-triplet.ly +++ b/input/regression/auto-beam-triplet.ly @@ -4,7 +4,7 @@ texidoc = "Automatic beaming is also done on tuplets." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right= ##t } \relative c''{ diff --git a/input/regression/auto-beam-tuplets.ly b/input/regression/auto-beam-tuplets.ly index bf62d31599..b3f2b9b61c 100644 --- a/input/regression/auto-beam-tuplets.ly +++ b/input/regression/auto-beam-tuplets.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Tuplet-spanner should not put (visible) brackets on diff --git a/input/regression/auto-beam.ly b/input/regression/auto-beam.ly index 44e5e529ec..6496d04415 100644 --- a/input/regression/auto-beam.ly +++ b/input/regression/auto-beam.ly @@ -3,7 +3,7 @@ beam." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/auto-change.ly b/input/regression/auto-change.ly index 8cbaa3db20..c7c503a85f 100644 --- a/input/regression/auto-change.ly +++ b/input/regression/auto-change.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/autobeam-nobeam.ly b/input/regression/autobeam-nobeam.ly new file mode 100644 index 0000000000..b986d26262 --- /dev/null +++ b/input/regression/autobeam-nobeam.ly @@ -0,0 +1,14 @@ +\version "2.14.0" + +\header { + + texidoc = " + \noBeam should terminate an autobeam, even if it's not a + recommended place for stopping a beam. In this example, + the first three eighth notes should be beamed. + " +} + +\relative c'{ + c8 d e f\noBeam g a b c +} diff --git a/input/regression/autobeam-show-defaults.ly b/input/regression/autobeam-show-defaults.ly new file mode 100644 index 0000000000..59a948ce59 --- /dev/null +++ b/input/regression/autobeam-show-defaults.ly @@ -0,0 +1,144 @@ +\version "2.14.0" + +\header { + + texidoc = " +Default autobeam settings have been set for a number of time signatures. +Each score shows the desired beaming +" + +} + +{ + \time 2/2 + a8^\markup "Beams should end at 4/8, 6/8, and 8/8" + \repeat unfold 6 a8 a16 a32 a64 a128 a +} +{ + \time 2/4 + a8^\markup "Beams should end at 2/8 and 4/8" + \repeat unfold 6 a8 + a16 a32 a64 a128 a +} +{ + \time 2/8 + a8^\markup "Beams should end at 1/8 and 2/8" + \repeat unfold 2 a8 + a16 a32 a64 a128 a +} +{ + \time 2/16 + a16^\markup "Beams should end at 1/16 and 2/16" + a a a32 a64 a128 a +} +{ + \time 3/2 + a8^\markup "Beams should end at 4/8, 8/8, 10/8 and 12/8" + \repeat unfold 10 a8 a16 a32 a64 a128 a } +{ + \time 3/4 + a8^\markup "1/8 beams should end at 3/4; smaller beams should end at 1/4, 2/4, and 3/4" + \repeat unfold 5 a8 + \repeat unfold 11 a16 a32 a64 a128 a +} +{ + \time 3/8 + a8^\markup "Beams should end at 3/8" + a a + \repeat unfold 5 a16 a32 a64 a128 a +} +{ + \time 3/16 + a16^\markup "Beams should end at 1/16, 2/16, and 3/16" + \repeat unfold 4 a16 + a32 a64 a128 a +} +{ + \time 4/2 + a8^\markup "Beams should end at 4/8, 8/8, 12/8, 14/8, and 16/8" + \repeat unfold 14 a8 + a16 a32 a64 a128 a +} +{ + \time 4/4 + a8^\markup "Beams should end at 4/8, 6/8, and 8/8" + \repeat unfold 6 a8 + a16 a32 a64 a128 a +} +{ + \time 4/16 + a8^\markup "Beams should end at 1/16, 2/16, 3/16, and 4/16" + a \repeat unfold 7 a16 + a32 a64 a128 a +} +{ + \time 4/8 + a8^\markup "Beams should end at 2/8 and 4/8" + \repeat unfold 6 a8 + a16 a32 a64 a128 a +} +{ + \time 6/4 + a8^\markup "Beams should end at 6/8, 8/8, 10/8, and 12/8" + \repeat unfold 10 a8 + a16 a32 a64 a128 a +} +{ + \time 6/8 + a8^\markup "Beams should end at 3/8 and 6/8" + \repeat unfold 10 a8 + a16 a32 a64 a128 a +} +{ + \time 9/4 + a8^\markup "Beams should end at 6/8, 12/8, 14/8, 16/8, and 18/8" + \repeat unfold 16 + a8 a16 a32 a64 a128 a +} +{ + \time 9/8 + a8^\markup "Beams should end at 3/8, 6/8, and 9/8" + \repeat unfold 7 a8 + a16 a32 a64 a128 a +} +{ + \time 9/16 + a8^\markup "Beams should end at 3/16, 6/16, and 9/16" + \repeat unfold 3 a8 + \repeat unfold 9 a16 + a32 a64 a128 a +} +{ + \time 12/4 + a8^\markup "Beams should end at 6/8, 12/8, 18/8, 20/8, 22/8, and 24/8" + \repeat unfold 22 a8 + a16 a32 a64 a128 a +} +{ + \time 12/8 + a8^\markup "Beams should end at 3/8, 6/8, 9/8, and 12/8" + \repeat unfold 22 a8 + a16 a32 a64 a128 a +} +{ + \time 12/16 + a8^\markup + \column { + "1/8 beams should end at 6/16 and 12/16" + "Shorter beams should end at 3/16, 6/16, 9/16, and 12/16" + } + \repeat unfold 5 a8 + \repeat unfold 11 a16 + a32 a64 a128 a +} +{ \time 5/8 + a8^\markup "Beams should end at 3/8 and 5/8" + \repeat unfold 8 a8 + a16 a32 a64 a128 a +} +{ + \time 8/8 + a8^\markup "Beams should end at 3/8, 6/8, and 8/8" + \repeat unfold 14 a8 a + 16 a32 a64 a128 a +} diff --git a/input/regression/autobeam-start-at-beginning-of-measure-in-3-4.ly b/input/regression/autobeam-start-at-beginning-of-measure-in-3-4.ly new file mode 100644 index 0000000000..a6b8652bf6 --- /dev/null +++ b/input/regression/autobeam-start-at-beginning-of-measure-in-3-4.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + + texidoc = " +3/4 beaming has special rules, that are hardcoded in the autobeam +routines. When the beaming is changed, beams should start at the +beginning of the measure. In this case, the measure should be beamed +in two. +" +} + +\relative c' { + \time 3/4 + \set Timing.baseMoment = #(ly:make-moment 1 8) + \set Timing.beatStructure = #'(3 3) + \set Timing.beamExceptions = #'() + c8 c c c c c +} diff --git a/input/regression/automatic-polyphony-context-id.ly b/input/regression/automatic-polyphony-context-id.ly new file mode 100644 index 0000000000..a825222600 --- /dev/null +++ b/input/regression/automatic-polyphony-context-id.ly @@ -0,0 +1,36 @@ +\version "2.14.0" + +\header { + texidoc = "The bottom-level contexts in polyphony shorthand are +allocated a context id in order of creation, starting with +@code{\"1\"}. +This snippet will fail to compile if either voice has an invalid +@code{context-id} string. +" +} + +assertContextId = +#(define-music-function (parser location id) (string?) + (let ((music (make-music 'ApplyContext + 'procedure + (lambda (ctx) + (and + (not (string=? (ly:context-id ctx) id)) + (ly:error "context-id mismatch found: expecting ~s, got ~s" + id + (ly:context-id ctx))))))) + music)) + +\relative c'' { + << + { + \assertContextId "1" + c4 d e2 + } + \\ + { + \assertContextId "2" + a,4 b c2 + } + >> +} diff --git a/input/regression/automatic-polyphony-drumstaff.ly b/input/regression/automatic-polyphony-drumstaff.ly new file mode 100644 index 0000000000..0f53dfe71c --- /dev/null +++ b/input/regression/automatic-polyphony-drumstaff.ly @@ -0,0 +1,15 @@ +\version "2.14.0" + +\header{ texidoc = "In a DrumStaff, automatic polyphony can be used without + explicitly initializing separate voices." + } + +\score { + \new DrumStaff { + \drummode { + bd4 sn4 bd4 sn4 + << { \repeat unfold 16 hh16 } \\ { bd4 sn4 bd4 sn4 } >> + bd4 sn4 bd4 sn4 + } + } +} \ No newline at end of file diff --git a/input/regression/automatic-polyphony-tabstaff.ly b/input/regression/automatic-polyphony-tabstaff.ly new file mode 100644 index 0000000000..bed980d736 --- /dev/null +++ b/input/regression/automatic-polyphony-tabstaff.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header{ texidoc = "In a TabStaff, automatic polyphony can be used without + explicitly initializing separate voices." + } + +test = { + c'1 + << { c'4 d' e' f' } \\ { g,1 } >> + c'1 +} + +\score { + << + \new Staff { \clef "treble_8" \test } + \new TabStaff { \test } + >> +} \ No newline at end of file diff --git a/input/regression/backend-excercise.ly b/input/regression/backend-excercise.ly index 3806b37c02..06120020d9 100644 --- a/input/regression/backend-excercise.ly +++ b/input/regression/backend-excercise.ly @@ -2,31 +2,31 @@ texidoc = "Excercise all output functions" } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } -\relative { +\relative c'' { \new StaffGroup \new PianoStaff << \new Staff { \ottava #1 - \times 2/3 { c'8[\< f]( f''\!) } + \times 2/3 { c8[\< f]( f''\!) } \ottava #0 4 \override TextScript #'color = #red g4^"red" } - + \new Staff \relative c'' { \makeClusters { 8 4 } - + \override Glissando #'style = #'zigzag \slurDashed f2( \glissando f') \easyHeadsOn - f e + f e } >> } diff --git a/input/regression/backend-svg.ly b/input/regression/backend-svg.ly index 69116f1b38..18e83a2eb3 100644 --- a/input/regression/backend-svg.ly +++ b/input/regression/backend-svg.ly @@ -5,7 +5,7 @@ \include "typography-demo.ly" -\version "2.12.0" +\version "2.14.0" #(define outname (ly:parser-output-name parser)) diff --git a/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly b/input/regression/baerenreiter-sarabande.ly similarity index 81% rename from input/mutopia/J.S.Bach/baerenreiter-sarabande.ly rename to input/regression/baerenreiter-sarabande.ly index 7012fe762f..abf0cc0637 100644 --- a/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly +++ b/input/regression/baerenreiter-sarabande.ly @@ -1,9 +1,9 @@ -\version "2.12.0" +\version "2.14.0" forcedLastBreak = { \break } -%% We want this to perfectly match the Baerenreiter spacing. -%% If we're not using 6 systems, there's definately a problem. +%% We want this to perfectly match the Bärenreiter spacing. +%% If we're not using 6 systems, there's definitely a problem. #(define (assert-system-count smob n) (let ((systems (length (ly:spanner-broken-into (ly:grob-original @@ -13,22 +13,22 @@ forcedLastBreak = { \break } ;;(warn (string-append "Got " (number->string systems) " systems (expecting " (number->string n)))))) - + #(define (assert-system-count-override count) (ly:export #{ \override NoteHead #'after-line-breaking = #(lambda (smob) (assert-system-count smob $count)) #})) - + \header { title = "Solo Cello Suite II" piece ="Sarabande" composer = "Johann Sebastian Bach (1685-1750)" editor = "August Wenzinger" - source= "B\\\"arenreiter Urtext" + source= "Bärenreiter Urtext" - texidoc = "The B\\\"arenreiter edition of the Cello Suites is the + texidoc = "The Bärenreiter edition of the Cello Suites is the most beautifully typeset piece of music in our collection of music (we both own one. It is also lovely on French Horn). This piece does not include articulation, but it does follows the same beaming and @@ -39,11 +39,11 @@ As of lilypond 1.5.42, the spacing and beam quanting is almost identical. There are two tweaks in this file: a line-break was forced before -measure 25, we get back the linebreaking of Baerenreiter. The stem +measure 25, we get back the linebreaking of Bärenreiter. The stem direction is forced in measure 24. The last beam of that measure is up -in Baerenreiter because of context. We don't detect that yet. +in Bärenreiter because of context. We don't detect that yet. -Note that the Barenreiter edition contains a few engraving +Note that the Bärenreiter edition contains a few engraving mistakes. The second line begins with measure 6 (but prints 5). The |: half way in measure 13 has been forgotten. " @@ -53,17 +53,17 @@ half way in measure 13 has been forgotten. sarabandeA = \context Voice \relative c { \override Staff.NoteCollision #'merge-differently-dotted = ##t - + << { d8. e16 e4.\trill d16 e } \\ { d4 a2 } >> - 4. e'8[ d c] | + 4. e'8[ d c] | bes[ g'] f[ e16(f] g[ a bes d,)] | cis4.\trill b8[ a g] | - %% check spacing without accs: + %% check spacing without accs: %% c4.\trill bes8[ a g] | - + << { d'8. e16 e4.\trill d16 e | f4. d8[ e f] } \\ @@ -85,7 +85,7 @@ sarabandeA = \context Voice \relative c { %% 11 e'8[ f] c,[ g'] f'[ e] | f4 f,2 | - << { a'4 a4.\trill bes8 + << { a'4 a4.\trill bes8 c bes16 a } \\ { f8[ es] es4. r8 d4 } >> @@ -93,14 +93,14 @@ sarabandeA = \context Voice \relative c { bes[ g'] a,[ fis'] es'[ d] | - + %%16 < bes d, g, >4.\trill a8[ g f!] | e bes a f' g a | d, as g es' f g | cis,[ bes'] a[ g16 f] e!8[ f16 d] | cis8 e16 a a,8. g'16 f8(e) | - + %%21 << { d e16(f) f4. e16(d) | e8 f16(g) g4. a16(bes) | @@ -162,7 +162,7 @@ smallerPaper = \layout { \Score \override SpacingSpanner #'spacing-increment = #0.96 } - + indent = 5.6 \mm line-width = 146.8 \mm } @@ -171,8 +171,11 @@ smallerPaper = \layout { ragged-bottom = ##t indent = 7. \mm line-width =183.5 \mm - between-system-space = 25\mm - between-system-padding = 0\mm + obsolete-between-system-space = 25\mm + system-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space) + system-system-spacing #'padding = #0 + score-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space) + score-system-spacing #'padding = #0 system-count = 6 %% annotatespacing = ##t @@ -182,7 +185,7 @@ smallerPaper = \layout { \score{ \sarabandeCelloStaff \layout { } - + \midi { \context { \Score @@ -192,7 +195,7 @@ smallerPaper = \layout { \header{ - opus= "" + opus= "" piece ="Sarabande" } } } diff --git a/input/regression/balloon.ly b/input/regression/balloon.ly index a60f89e57c..2acc43ff15 100644 --- a/input/regression/balloon.ly +++ b/input/regression/balloon.ly @@ -5,14 +5,23 @@ with lines and explanatory text added." } -\version "2.12.0" +\version "2.14.0" \layout{ ragged-right = ##t } -\new Voice \with {\consists "Balloon_engraver" } -{ - \relative c' { - \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } - 8 +\score{ + \new Voice \with {\consists "Balloon_engraver" } + { + \relative c' { + \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" } + 8 + } + } + + \layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##f + } } } diff --git a/input/regression/bar-check-redefine.ly b/input/regression/bar-check-redefine.ly index 7a11169537..8bc0d20b64 100644 --- a/input/regression/bar-check-redefine.ly +++ b/input/regression/bar-check-redefine.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The meaning of @code{|} is stored in the identifier @code{pipeSymbol}." diff --git a/input/regression/bar-extent.ly b/input/regression/bar-extent.ly new file mode 100644 index 0000000000..f29196802b --- /dev/null +++ b/input/regression/bar-extent.ly @@ -0,0 +1,88 @@ +\header { + texidoc = "Bar line extent can be customised and the customised value + must be respected when staff symbol is changed temporarily (e.g. to + simulate ledger lines of renaissance prints and manuscripts); + moreover, span bars should not enter the staves." +} + + +\version "2.14.0" + +ledgerUp = +{ + s2 + \stopStaff + \override Staff.StaffSymbol #'line-positions = #'(-4 -2 0 2 4 6) + \startStaff + s2 + \noBreak + s2 + \stopStaff + \revert Staff.StaffSymbol #'line-positions + \startStaff + s2 +} + +ledgerDown = +{ + s2 + \stopStaff + \override Staff.StaffSymbol #'line-positions = #'(-6 -4 -2 0 2 4) + \startStaff + s1 + \stopStaff + \revert Staff.StaffSymbol #'line-positions + \startStaff + s2 +} + +\new StaffGroup +<< + \new Staff \with + { + \override BarLine #'bar-extent = #'(-1 . 1.5) + } + { + \ledgerUp \ledgerDown + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + s1*4 + s1*4 + } + + \new Staff \with + { + \override BarLine #'bar-extent = #'(0 . 0) + } + { + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + \ledgerDown \ledgerUp + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + } + + \new Staff \with + { + \override BarLine #'bar-extent = #'(-2 . 0) + } + { + s1*4 + \ledgerUp \ledgerDown + s1*4 + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerDown \ledgerUp + \ledgerUp \ledgerDown + \ledgerDown \ledgerUp + } +>> diff --git a/input/regression/bar-line-dashed.ly b/input/regression/bar-line-dashed.ly index 4267f02490..cf6ebd09bb 100644 --- a/input/regression/bar-line-dashed.ly +++ b/input/regression/bar-line-dashed.ly @@ -3,7 +3,7 @@ lines exactly. Dashed barlines between staves start and end on a half dash precisely." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/bar-line-dotted.ly b/input/regression/bar-line-dotted.ly index f662c3c9e4..eb7a63c6ca 100644 --- a/input/regression/bar-line-dotted.ly +++ b/input/regression/bar-line-dotted.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/bar-line-segno.ly b/input/regression/bar-line-segno.ly new file mode 100644 index 0000000000..4865ed7297 --- /dev/null +++ b/input/regression/bar-line-segno.ly @@ -0,0 +1,25 @@ +\version "2.14.0" + +\header { texidoc = "Segno bar lines can be used to mark + the begin and the end of a segno part." + } + +\paper { ragged-right = ##t } + +\relative \new StaffGroup << + \new Staff { + c4 \bar "S" c \bar "|S" c \bar "S|" c \bar ":|S" \break + c4 c \bar ":|S|:" c c \bar ":|S.|:" \break + c4 c c2 \bar ".S|:" \break + c1 \bar ":|S." \break + c1 \bar "S" \break + c1 } + \new Staff { + c4 c c c + c4 c c c + c4 c c c + c4 c c c + c4 c c c + c1 + } +>> diff --git a/input/regression/bar-line-thick.ly b/input/regression/bar-line-thick.ly new file mode 100644 index 0000000000..68fde67aa2 --- /dev/null +++ b/input/regression/bar-line-thick.ly @@ -0,0 +1,15 @@ + +\header { texidoc = "A thick bar line is created by \bar \".\", which is consistent with e.g. \bar \"|.\"" } + +\version "2.14.0" + +\paper { ragged-right = ##t } + +\relative \new StaffGroup << + \new Staff { + c4 \bar "." c } + \new Staff { + c c + } +>> + diff --git a/input/regression/bar-line-tick.ly b/input/regression/bar-line-tick.ly index e0f7642dbc..be2d6ffca6 100644 --- a/input/regression/bar-line-tick.ly +++ b/input/regression/bar-line-tick.ly @@ -2,7 +2,7 @@ \header { texidoc = "A ticked bar line is a short line of the same length as a staff space, centered on the top-most barline." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/bar-number.ly b/input/regression/bar-number.ly index 1711e9a9ad..398a82ff5d 100644 --- a/input/regression/bar-number.ly +++ b/input/regression/bar-number.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/bar-scripts.ly b/input/regression/bar-scripts.ly index 263cbe374d..f57fe3d182 100644 --- a/input/regression/bar-scripts.ly +++ b/input/regression/bar-scripts.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/beam-auto-knee.ly b/input/regression/beam-auto-knee.ly index c607d4e1fd..53ee89f514 100644 --- a/input/regression/beam-auto-knee.ly +++ b/input/regression/beam-auto-knee.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/beam-auto.ly b/input/regression/beam-auto.ly index 8e90e1d325..9c1bdff5ff 100644 --- a/input/regression/beam-auto.ly +++ b/input/regression/beam-auto.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = "@cindex Beaming Presets There are presets for the @code{auto-beam} engraver in the case of common diff --git a/input/regression/beam-beamlet-break.ly b/input/regression/beam-beamlet-break.ly index fd29e25909..f882985eb5 100644 --- a/input/regression/beam-beamlet-break.ly +++ b/input/regression/beam-beamlet-break.ly @@ -1,15 +1,15 @@ \header { texidoc = "beamlets don't run to end of line if there are no other beamlets on the same height." - + } -\version "2.12.0" +\version "2.14.0" \paper { raggedright = ##t } -\relative { +\relative c' { \time 1/4 \override Beam #'breakable = ##t r16 r16. c32[ c16 \break c8. ] r16 diff --git a/input/regression/beam-beamlet-grace.ly b/input/regression/beam-beamlet-grace.ly index 7c899f343b..f790d4bd76 100644 --- a/input/regression/beam-beamlet-grace.ly +++ b/input/regression/beam-beamlet-grace.ly @@ -3,7 +3,7 @@ texidoc = "Beamlets in grace notes remain readable." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/beam-beat-grouping.ly b/input/regression/beam-beat-grouping.ly index e3af9219b5..508f20dbfe 100644 --- a/input/regression/beam-beat-grouping.ly +++ b/input/regression/beam-beat-grouping.ly @@ -1,18 +1,19 @@ \header { - texidoc = "Beaming patterns obey the @code{beatGrouping} property. " + texidoc = "Default beaming patterns can be set for the current time +signature. " } \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \relative c'' { \time 5/16 - \set beatGrouping = #'(2 3) + \set beatStructure = #'(2 3) c8[^"(2+3)" c16 c8] - \set beatGrouping = #'(3 2) + \set beatStructure = #'(3 2) c8[^"(3+2)" c16 c8] } diff --git a/input/regression/beam-break-no-bar.ly b/input/regression/beam-break-no-bar.ly index c249e18152..1ad1910491 100644 --- a/input/regression/beam-break-no-bar.ly +++ b/input/regression/beam-break-no-bar.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \new Staff \with { \remove Bar_engraver diff --git a/input/regression/beam-break.ly b/input/regression/beam-break.ly index fffd0c4ff9..b10ab895ff 100644 --- a/input/regression/beam-break.ly +++ b/input/regression/beam-break.ly @@ -4,7 +4,7 @@ " } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right= ##t } \relative c'' { diff --git a/input/regression/beam-center-slope.ly b/input/regression/beam-center-slope.ly index 6d202523f4..1f777a09f2 100644 --- a/input/regression/beam-center-slope.ly +++ b/input/regression/beam-center-slope.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="Simple beams on middle staffline are allowed to be diff --git a/input/regression/beam-collision-accidentals.ly b/input/regression/beam-collision-accidentals.ly new file mode 100644 index 0000000000..df37e003c0 --- /dev/null +++ b/input/regression/beam-collision-accidentals.ly @@ -0,0 +1,12 @@ +\version "2.14.0" +\header { + texidoc = "Beams only check for collisions with in-line accidentals." +} + +{ + \set suggestAccidentals = ##t + a'8[ fis'16 g'16] + \unset suggestAccidentals + c'8 [ des'' ] + r2 +} \ No newline at end of file diff --git a/input/regression/beam-collision-basic.ly b/input/regression/beam-collision-basic.ly new file mode 100644 index 0000000000..b235c358df --- /dev/null +++ b/input/regression/beam-collision-basic.ly @@ -0,0 +1,90 @@ +\version "2.14.0" +\header { + texidoc = "Manual beams do not collide with notes." +} + +\layout { +% debug-beam-scoring = ##t + indent = #0.0 +} + +\relative \new Staff { + + << + \new Voice { + \voiceOne + \repeat unfold 8 { c8[ c] } + } + \new Voice \relative c'' { + \voiceThree + \autoBeamOff + f r e r + d r c r + b r a r + g r f r + } + >> + \break + + %% The same with double collisions, to check for scaling problems. + << + \new Voice { + \voiceOne + \repeat unfold 8 { c8[ c] } + } + \new Voice \relative c'' { + \voiceThree + \autoBeamOff + f f e e + d d c c + b b a a + g g f f + } + >> + \break + + << + \new Voice { + \repeat unfold 8 \relative { + \voiceOne + c8[ + \voiceTwo + c''] + } + } + \new Voice \relative { + \voiceFour + s8 f + s8 g + s8 a + s8 b + s8 c + s8 d + s8 e + } + >> + + \break + << + \new Voice { + \repeat unfold 8 \relative { + \voiceOne + + %% We must use a wider interval, otherwise the beam will be + %% positioned to descend. + a8[ + \voiceTwo + c''] + } + } + \new Voice \relative { + \voiceFour + \autoBeamOff + \stemUp f' \stemDown f, + \stemUp e' \stemDown g, + \stemUp d' \stemDown a + \stemUp c \stemDown b + } + >> +} + diff --git a/input/regression/beam-collision-beamcount.ly b/input/regression/beam-collision-beamcount.ly new file mode 100644 index 0000000000..5ed29dee3f --- /dev/null +++ b/input/regression/beam-collision-beamcount.ly @@ -0,0 +1,41 @@ +\version "2.14.0" +\header { + texidoc = "Manual beams do not collide with notes." +} + +\layout { +% debug-beam-scoring = ##t + indent = #0.0 +} + +\relative \new Staff { + + << + \new Voice { + \voiceOne + \repeat unfold 4 { c8[ c] } + } + \new Voice \relative c'' { + \voiceThree + \autoBeamOff + b r a r + g r f r + } + >> + + | + + << + \new Voice { + \voiceOne + \repeat unfold 4 { c16[ c] } + } + \new Voice \relative c'' { + \voiceThree + \autoBeamOff + b r a r + g r f r + } + >> + +} diff --git a/input/regression/beam-collision-classic.ly b/input/regression/beam-collision-classic.ly new file mode 100644 index 0000000000..808b52bb82 --- /dev/null +++ b/input/regression/beam-collision-classic.ly @@ -0,0 +1,58 @@ +\header { + texinfo = "Beam collisions from modern works" + } + +\layout { + ragged-right = ##t +% debug-beam-scoring = ##t +} + +\version "2.14.0" + +\new Staff +{ + % Stockhausen (without hemiolas) + \relative c''' { + \stemUp + a8[ \clef bass es,,,, + r8 + \clef G + gis'''] + } + r8 r4 | + + % Ligeti 1st etude. + \relative c'' + << + { g8[ a b c d] } \\ + { s4. 4. } + >> + r4. + + % Ligeti 1st etude. + \relative c'' + << + { + s4. 4. + } \\ + { +% \override Beam #'inspect-quants = #'(-4 . -3) + a8[ d e f g] + } + >> + r4. + + % Ligeti 1st etude. + \relative c' + << + { 2. } \\ + { a'8[ b c] } + >> + + % Schubert morgenlied. + \clef bass + \relative c { + a16[ d fis d a d] + } + +} diff --git a/input/regression/beam-collision-cross-staff.ly b/input/regression/beam-collision-cross-staff.ly new file mode 100644 index 0000000000..04c1720081 --- /dev/null +++ b/input/regression/beam-collision-cross-staff.ly @@ -0,0 +1,26 @@ +\header { + texidoc = "cross staff beams work with collisions." +} + +\version "2.14.0" + +<< + \new Staff = "PianoRH" s4. + \new Staff = "PianoLH" { + d''8 [b''! \change Staff = "PianoRH" d'' ] + } +>> + +<< + \new Staff = up \relative c' { + c8 c c c + c c c c + b' b b b + } + \new Staff = down \relative c' { + s8 c c \change Staff = up c + \change Staff = down c [ c s16 \change Staff = up a'16 s16 a16 ] + \stemUp + \change Staff = down b8 b b b \change Staff = up + } +>> diff --git a/input/regression/beam-collision-feasible-region.ly b/input/regression/beam-collision-feasible-region.ly new file mode 100644 index 0000000000..833155ae7e --- /dev/null +++ b/input/regression/beam-collision-feasible-region.ly @@ -0,0 +1,42 @@ +\version "2.14.0" + +\header { + texidoc = "A rough guess for collisions is taken into account when + choosing initial beam configurations; the initial position may be + chosen to be either above or below large collisions." +} + +\layout { + ragged-right = ##t +} + +partOne = << + { s4 s8 \key f \major s8 } + { + g8[ c'''8] + g8[ c'''8] + } +>> + +partTwo = << + { \clef bass \key c \major s4 s8 \key f \major s8 } + { + c,8[ e'8] + c,8[ e'8] + } +>> + +partThree = << + { \clef bass \key c \major s4 s8 \key f \major s8 } + { + b,,8[ e'8] + b,,8[ e'8] + } +>> + +\new Voice { + \partOne + \partTwo + \partThree +} + diff --git a/input/regression/beam-collision-grace.ly b/input/regression/beam-collision-grace.ly new file mode 100644 index 0000000000..d922949f8c --- /dev/null +++ b/input/regression/beam-collision-grace.ly @@ -0,0 +1,16 @@ + + +\version "2.14.0" + +\header { texidoc = " +The beaming algorithm handles collisions between beams and +grace notes too. +" } + +\relative c' { + e'8[ f e \grace { f,16[ a] } e'8] +} + +\relative c'{ + d16 e f \grace d'8 g,16 +} \ No newline at end of file diff --git a/input/regression/beam-collision-large-object.ly b/input/regression/beam-collision-large-object.ly new file mode 100644 index 0000000000..f2f9f0fbbd --- /dev/null +++ b/input/regression/beam-collision-large-object.ly @@ -0,0 +1,15 @@ +\header { + texidoc = "Behave sensibly in the presence of large collisions." +} + +\version "2.14.0" +\new Staff { + << + { \voiceOne s2 } + \\ + { \voiceTwo e4 e } + \\ + { \voiceFour + f''8[ e'' gis'' gis''] } + >> +} diff --git a/input/regression/beam-collision-off.ly b/input/regression/beam-collision-off.ly new file mode 100644 index 0000000000..eaa9c9c5b3 --- /dev/null +++ b/input/regression/beam-collision-off.ly @@ -0,0 +1,32 @@ +\version "2.14.0" +\header { + texidoc = "Beams can be allowed to collide with grobs by overriding +the collision-interfaces property." +} + +\relative c' { + c8 [ des' ] + \once \override Beam #'collision-interfaces = #'(beam-interface + clef-interface + ;inline-accidental-interface + key-signature-interface + note-head-interface + time-signature-interface) + c,8 [ des'! ] + c, [ \key des \major d ] + \once \override Beam #'collision-interfaces = #'(beam-interface + clef-interface + inline-accidental-interface + ;key-signature-interface + note-head-interface + time-signature-interface) + c [ \key c \major d ] + g [ \grace { a [ d ] } g, ] + \once \override Beam #'collision-interfaces = #'(;beam-interface + clef-interface + inline-accidental-interface + key-signature-interface + note-head-interface + time-signature-interface) + g [ \grace { a [ d ] } g, ] +} diff --git a/input/regression/beam-collision-opposite-stem.ly b/input/regression/beam-collision-opposite-stem.ly new file mode 100644 index 0000000000..f8310c679a --- /dev/null +++ b/input/regression/beam-collision-opposite-stem.ly @@ -0,0 +1,29 @@ +\header { + texidoc = "Meshing stems in oppositely directed beams are handled + correctly." +} + +\version "2.14.0" + +\layout { + ragged-right = ##t +} + +{ + \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 e16 [ s cis, ] } \\ { b''16 [ s b ] } >> } + \relative c'' { << { s16 d16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 c16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 b16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 a16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 g16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 c,16 [ s cis' ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 c,16 [ s cis'' ] } \\ { b16 [ s b ] } >> } + \relative c'' { << { s16 f,16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 e,16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 d,16 [ s cis ] } \\ { b'16 [ s b ] } >> } + \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s d ] } >> } + \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s f' ] } >> } + \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s a ] } >> } + \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s gis ] } >> } +} diff --git a/input/regression/beam-collision-prefatory-matter.ly b/input/regression/beam-collision-prefatory-matter.ly new file mode 100644 index 0000000000..d48b803820 --- /dev/null +++ b/input/regression/beam-collision-prefatory-matter.ly @@ -0,0 +1,31 @@ +\header { + texinfo = "Beams do not collide with clefs, key signatures, time + signatures" +} + +\layout { + ragged-right = ##t +% debug-beam-scoring = ##t +} + +\version "2.14.0" + +\relative { + \time 2/4 + c8[ \clef "bass" e,, ] + r8 + e8[ | + \time 1/4 + e] + e[ + e] r8 + \time 4/4 + + e[ + \key f \major + e] + e[ + \key cis \major + e] + +} diff --git a/input/regression/beam-collision-scaled-staff.ly b/input/regression/beam-collision-scaled-staff.ly new file mode 100644 index 0000000000..4dbc4facca --- /dev/null +++ b/input/regression/beam-collision-scaled-staff.ly @@ -0,0 +1,14 @@ +\version "2.14.0" +\header { + texidoc = "Beam collisions are resistant to scaled down staves." +} + +\new Staff \with { + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) } +<< + \relative c'' { e16[ f] } + \\ + \relative c''' { \autoBeamOff g b } +>> diff --git a/input/regression/beam-collision-voice-only.ly b/input/regression/beam-collision-voice-only.ly new file mode 100644 index 0000000000..82b5e979c9 --- /dev/null +++ b/input/regression/beam-collision-voice-only.ly @@ -0,0 +1,14 @@ +\version "2.14.0" +\header { + texidoc = "Beam collision can be tweaked to only apply to the grobs +within the beam's original voice." +} + +\relative c' { + \time 5/4 + << { c8[ s c ] } \\ { s8 c' s8 } >> + c,[ des' ] + \override Staff . Beam #'collision-voice-only = ##t + << { c,8[ s c ] } \\ { s8 c' s8 } >> + c,[ des'! ] +} diff --git a/input/regression/beam-concave-chord.ly b/input/regression/beam-concave-chord.ly index 14e6790832..5d5aa30826 100644 --- a/input/regression/beam-concave-chord.ly +++ b/input/regression/beam-concave-chord.ly @@ -1,7 +1,11 @@ -\version "2.12.0" - +\version "2.14.0" +\header { +texidoc = "Concave beaming works for chords as well as monophonic +music. +" +} -morgenliedBeam = \relative c'' \new Voice{ +morgenliedBeam = \relative c'' \new Voice { \time 3/8 % morgenlied c16 b c e g | @@ -9,11 +13,12 @@ morgenliedBeam = \relative c'' \new Voice{ c16 b c e g | } -rachmaninovBeams = \relative \new Voice { +rachmaninovBeams = \relative c' \new Voice { \voiceOne \time 4/4 \key c \minor - 8 ~ + 8[ ] ~ + 8[ ] } horizontalBeams = { @@ -26,30 +31,32 @@ nonHorizontalBeams = { } \layout { ragged-right = ##t - } +} % cut & paste from beam-concave.ly #(define (<> x y) (not (= x y))) -mustBeHorizontal = - \override Staff.Beam #'positions = #(ly:make-simple-closure - (ly:make-simple-closure - (append - (list chain-grob-member-functions `(,cons 0 0)) - (check-slope-callbacks =)))) -mustNotBeHorizontal = - \override Staff.Beam #'positions = #(ly:make-simple-closure - (ly:make-simple-closure - (append - (list chain-grob-member-functions `(,cons 0 0)) - (check-slope-callbacks <>)))) - +mustBeHorizontal = { + \override Staff.Beam #'positions = + #(ly:make-simple-closure + (ly:make-simple-closure + (append + (list chain-grob-member-functions `(,cons 0 0)) + (check-slope-callbacks =)))) +} +mustNotBeHorizontal = { + \override Staff.Beam #'positions = + #(ly:make-simple-closure + (ly:make-simple-closure + (append + (list chain-grob-member-functions `(,cons 0 0)) + (check-slope-callbacks <>)))) +} \new Voice { \mustBeHorizontal - r1 + R1 \horizontalBeams \mustNotBeHorizontal \nonHorizontalBeams } - diff --git a/input/regression/beam-concave-damped.ly b/input/regression/beam-concave-damped.ly index 135995d63f..5af60763c2 100644 --- a/input/regression/beam-concave-damped.ly +++ b/input/regression/beam-concave-damped.ly @@ -2,7 +2,7 @@ texidoc = "Beams that are not strictly concave are damped according to their concaveness. " } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/beam-concave.ly b/input/regression/beam-concave.ly index 093f30d918..d47a9b1cbb 100644 --- a/input/regression/beam-concave.ly +++ b/input/regression/beam-concave.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = "Fully concave beams should be horizontal. Informally spoken, @@ -6,7 +6,7 @@ beam. If an up-beam has high notes on its center stems, then we call it concave. - If a beam is fails a test, the desired slope is printed next to it. + If a beam fails a test, the desired slope is printed next to it. " } diff --git a/input/regression/beam-cross-staff-auto-knee.ly b/input/regression/beam-cross-staff-auto-knee.ly index 3c9b1650fa..aaa8ed933a 100644 --- a/input/regression/beam-cross-staff-auto-knee.ly +++ b/input/regression/beam-cross-staff-auto-knee.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/beam-cross-staff-script.ly b/input/regression/beam-cross-staff-script.ly index 772075495b..357f58e8b6 100644 --- a/input/regression/beam-cross-staff-script.ly +++ b/input/regression/beam-cross-staff-script.ly @@ -7,7 +7,7 @@ staves." } -\version "2.12.0" +\version "2.14.0" \new PianoStaff << \new Staff = RH { diff --git a/input/regression/beam-cross-staff-slope.ly b/input/regression/beam-cross-staff-slope.ly index 61be2c5242..495d40522e 100644 --- a/input/regression/beam-cross-staff-slope.ly +++ b/input/regression/beam-cross-staff-slope.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Cross staff (kneed) beams do not cause extreme slopes." } diff --git a/input/regression/beam-cross-staff.ly b/input/regression/beam-cross-staff.ly index 0b711c7453..10f39d6888 100644 --- a/input/regression/beam-cross-staff.ly +++ b/input/regression/beam-cross-staff.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Beams can be typeset over fixed distance aligned staves, beam diff --git a/input/regression/beam-damp.ly b/input/regression/beam-damp.ly index 2feffff8cc..d2b75117ae 100644 --- a/input/regression/beam-damp.ly +++ b/input/regression/beam-damp.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "@cindex Beam Damp Beams are less steep than the notes they encompass. " } \layout{ diff --git a/input/regression/beam-default-lengths.ly b/input/regression/beam-default-lengths.ly index 9ec0c2bb1b..e6e3a26516 100644 --- a/input/regression/beam-default-lengths.ly +++ b/input/regression/beam-default-lengths.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Beamed stems have standard lengths if possible. Quantization diff --git a/input/regression/beam-extreme.ly b/input/regression/beam-extreme.ly index 61462dd7b8..3c8bfd14ad 100644 --- a/input/regression/beam-extreme.ly +++ b/input/regression/beam-extreme.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Beams should behave reasonably well, even under extreme circumstances. diff --git a/input/regression/beam-feather-breaking.ly b/input/regression/beam-feather-breaking.ly new file mode 100644 index 0000000000..326b653aa1 --- /dev/null +++ b/input/regression/beam-feather-breaking.ly @@ -0,0 +1,137 @@ +\version "2.14.0" +\header { + texidoc = "Feathered beams should have the same progress of their feathering +at the end of a line break as they do at the beginning of the next line." +} + +\paper { + left-margin = 2\cm + line-width = 10\cm + ragged-right = ##t + indent = 0\cm +} + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #RIGHT + a32[ b c d e f g a ] + \once \override Voice . Beam #'grow-direction = #LEFT + a[ g f e d c b a] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #RIGHT + a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #RIGHT + a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #RIGHT + a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #LEFT + a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #LEFT + a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #LEFT + a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Stem #'direction = #DOWN + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #RIGHT + a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Stem #'direction = #DOWN + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #RIGHT + a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Stem #'direction = #DOWN + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #RIGHT + a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Stem #'direction = #DOWN + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #LEFT + a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Stem #'direction = #DOWN + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #LEFT + a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|" +} >> + +\new Staff << + \relative c' { + \cadenzaOn + \override Staff . TimeSignature #'stencil = ##f + \override Voice . Stem #'direction = #DOWN + \override Voice . Beam #'breakable = ##t + \once \override Voice . Beam #'grow-direction = #LEFT + a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|" +} >> diff --git a/input/regression/beam-feather-knee-stem-length.ly b/input/regression/beam-feather-knee-stem-length.ly index 58b602c149..030497c225 100644 --- a/input/regression/beam-feather-knee-stem-length.ly +++ b/input/regression/beam-feather-knee-stem-length.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc="In feathered beams, stems in knees reach up to the feathered part correctly. diff --git a/input/regression/beam-feather.ly b/input/regression/beam-feather.ly index cf40c01aaa..038b0a582a 100644 --- a/input/regression/beam-feather.ly +++ b/input/regression/beam-feather.ly @@ -1,12 +1,12 @@ \header { texidoc = "Specifying @code{grow-direction} on a beam, will cause - feathered beaming. The @code{\featherDurations} function can be used + feathered beaming. The @code{\\featherDurations} function can be used to adjust note durations." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/beam-flat-retain-direction.ly b/input/regression/beam-flat-retain-direction.ly index 01fcc2deda..605298b4ac 100644 --- a/input/regression/beam-flat-retain-direction.ly +++ b/input/regression/beam-flat-retain-direction.ly @@ -3,7 +3,7 @@ texidoc = "Even very flat but slanted patterns should give slanted beams. " } -\version "2.12.0" +\version "2.14.0" \layout{ line-width = 15\cm debug-beam-scoring = ##t diff --git a/input/regression/beam-forced-direction.ly b/input/regression/beam-forced-direction.ly new file mode 100644 index 0000000000..7bb8a718bb --- /dev/null +++ b/input/regression/beam-forced-direction.ly @@ -0,0 +1,12 @@ +\version "2.14.0" + +\header { + texidoc = "The direction of manual beams can be forced using +@code{_} and @code{^}. +" +} + +\relative c' { + \time 2/4 + c8_[] c'^[ d e] +} diff --git a/input/regression/beam-french.ly b/input/regression/beam-french.ly index 14d33b001d..463b1f597e 100644 --- a/input/regression/beam-french.ly +++ b/input/regression/beam-french.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "In French style beaming, the stems do not go between beams." diff --git a/input/regression/beam-funky-beamlet.ly b/input/regression/beam-funky-beamlet.ly index 356b0d0db5..f38061157d 100644 --- a/input/regression/beam-funky-beamlet.ly +++ b/input/regression/beam-funky-beamlet.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" Funky kneed beams with beamlets also work. The beamlets diff --git a/input/regression/beam-funky.ly b/input/regression/beam-funky.ly index 6bff9fd2cb..d576c44d4b 100644 --- a/input/regression/beam-funky.ly +++ b/input/regression/beam-funky.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "In complex configurations of knee beaming, according to diff --git a/input/regression/beam-isknee.ly b/input/regression/beam-isknee.ly index 0c26f0db97..2a54620968 100644 --- a/input/regression/beam-isknee.ly +++ b/input/regression/beam-isknee.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="@cindex Beam Isknee diff --git a/input/regression/beam-knee-symmetry.ly b/input/regression/beam-knee-symmetry.ly index 1c8048e3d9..737f64ac84 100644 --- a/input/regression/beam-knee-symmetry.ly +++ b/input/regression/beam-knee-symmetry.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Point-symmetric beams should receive the same diff --git a/input/regression/beam-length.ly b/input/regression/beam-length.ly index 768930adb0..289b5ad018 100644 --- a/input/regression/beam-length.ly +++ b/input/regression/beam-length.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/beam-manual-beaming.ly b/input/regression/beam-manual-beaming.ly index 744c6632b3..2784d31aaa 100644 --- a/input/regression/beam-manual-beaming.ly +++ b/input/regression/beam-manual-beaming.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/beam-multiple-cross-staff.ly b/input/regression/beam-multiple-cross-staff.ly index 861fbd0bca..879e0037be 100644 --- a/input/regression/beam-multiple-cross-staff.ly +++ b/input/regression/beam-multiple-cross-staff.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Kneed beams (often happens with cross-staff beams) diff --git a/input/regression/beam-multiplicity-over-rests.ly b/input/regression/beam-multiplicity-over-rests.ly index ddf2cc147a..56b703c297 100644 --- a/input/regression/beam-multiplicity-over-rests.ly +++ b/input/regression/beam-multiplicity-over-rests.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "When a beam goes over a rest, there should not be any diff --git a/input/regression/beam-outside-beamlets.ly b/input/regression/beam-outside-beamlets.ly index 358dc18948..df34625fd0 100644 --- a/input/regression/beam-outside-beamlets.ly +++ b/input/regression/beam-outside-beamlets.ly @@ -3,7 +3,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/beam-over-barline.ly b/input/regression/beam-over-barline.ly index 8a01631a98..893f3f8b64 100644 --- a/input/regression/beam-over-barline.ly +++ b/input/regression/beam-over-barline.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Explicit beams may cross barlines. " } diff --git a/input/regression/beam-position.ly b/input/regression/beam-position.ly index 174a7dfe82..d55e1c391f 100644 --- a/input/regression/beam-position.ly +++ b/input/regression/beam-position.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Beams on ledgered notes should always reach the middle staff diff --git a/input/regression/beam-quant-standard.ly b/input/regression/beam-quant-standard.ly index 33b37bd29a..465325b7a1 100644 --- a/input/regression/beam-quant-standard.ly +++ b/input/regression/beam-quant-standard.ly @@ -3,95 +3,95 @@ texidoc = "This file tests a few standard beam quants, taken from Ted Ross' book. If LilyPond finds another quant, the correct quant is printed over the beam." - + } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t #(define debug-beam-quanting #t) } -filler = \new Voice \relative { +filler = \new Voice \relative c' { \hideNotes e4 e } - % + % %% %% Ross p108--112 -primes = \relative { - \time 3/4 +primes = \relative c' { + \time 3/4 \assertBeamQuant #'(0 . 0) #'(0 . 0) c8[ c] \filler \assertBeamQuant #'(1 . -1) #'(1 . -1) d8[ d] - + \filler - + \assertBeamQuant #'(1 . 0) #'(1 . 0) e8[ e] \filler - - + + \assertBeamQuant #'(2 . -1) #'(2 . -1) f8[ f] \filler - - + + \assertBeamQuant #'(2 . 0) #'(2 . 0) g8[ g] \filler - - + + \assertBeamQuant #'(2 . 1) #'(2 . 1) a8[ a] \filler - + %{ \once \override Beam #'inspect-quants = #'(2.2 . 2.2) - \assertBeamQuant + \assertBeamQuant a8[ a] \filler - + %} - + } -seconds = \relative { - +seconds = \relative c' { + \assertBeamQuant #'(0 . 0) #'(0 . 1) a8[ b] \filler - + \assertBeamQuant #'(0 . 0) #'(0 . 1) b8[ c] \filler - + \assertBeamQuant #'(0 . 0) #'(0 . 1) c8[ d] \filler - + \assertBeamQuant #'(1 . -1) #'(1 . 0) d8[ e] \filler - - + + \assertBeamQuant #'(1 . 0) #'(1 . 1) e8[ f] \filler - - + + \assertBeamQuant #'(2 . -1) #'(2 . 0) f8[ g] \filler - - + + \assertBeamQuant #'(2 . 0) #'(2 . 1) g8[ a] \filler @@ -101,13 +101,13 @@ seconds = \relative { \filler } -filler = \new Voice \relative { +filler = \new Voice \relative c' { \hideNotes e4 e4. } - % Ross, p122 -primeSixteenths = \relative { + % Ross, p122 +primeSixteenths = \relative c' { \stemUp \assertBeamQuant #'(0 . -1) #'(0 . -1) g16[ g] diff --git a/input/regression/beam-quanting-32nd.ly b/input/regression/beam-quanting-32nd.ly index e0c444697c..a4f097e568 100644 --- a/input/regression/beam-quanting-32nd.ly +++ b/input/regression/beam-quanting-32nd.ly @@ -8,7 +8,7 @@ texidoc = "Stem lengths take precedence over beam quants: `forbidden' } -\version "2.12.0" +\version "2.14.0" \relative c''{ \time 3/8 diff --git a/input/regression/beam-quanting-horizontal.ly b/input/regression/beam-quanting-horizontal.ly index 91f7d22393..e0fffda4f7 100644 --- a/input/regression/beam-quanting-horizontal.ly +++ b/input/regression/beam-quanting-horizontal.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/beam-quarter.ly b/input/regression/beam-quarter.ly index ac1d57819d..fb5c4359cf 100644 --- a/input/regression/beam-quarter.ly +++ b/input/regression/beam-quarter.ly @@ -1,12 +1,11 @@ +\version "2.14.0" -\version "2.12.0" -\header -{ +#(ly:set-option 'warning-as-error #f) + +\header { texidoc= "Quarter notes may be beamed: the beam is halted momentarily." } -\layout { ragged-right = ##t } - \relative c'' { c8[ c4 c8] % should warn here! } diff --git a/input/regression/beam-rest.ly b/input/regression/beam-rest.ly index e02f4bbaf0..6f2b7bd5b8 100644 --- a/input/regression/beam-rest.ly +++ b/input/regression/beam-rest.ly @@ -3,7 +3,7 @@ texidoc = "The number of beams does not change on a rest." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/beam-second.ly b/input/regression/beam-second.ly index 1971bd8fd1..d440258c82 100644 --- a/input/regression/beam-second.ly +++ b/input/regression/beam-second.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/beam-shortened-lengths.ly b/input/regression/beam-shortened-lengths.ly index 6cd91987a3..28b23fea18 100644 --- a/input/regression/beam-shortened-lengths.ly +++ b/input/regression/beam-shortened-lengths.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="Beams in unnatural direction, have shortened stems, but do not look too short." diff --git a/input/regression/beam-single-stem.ly b/input/regression/beam-single-stem.ly index 742e4f0e22..b5c6a3c9b6 100644 --- a/input/regression/beam-single-stem.ly +++ b/input/regression/beam-single-stem.ly @@ -4,7 +4,7 @@ clip-edges is switched off automatically." } -\version "2.12.0" +\version "2.14.0" \relative c' { d16[] diff --git a/input/regression/beam-skip.ly b/input/regression/beam-skip.ly new file mode 100644 index 0000000000..fdd47ecb64 --- /dev/null +++ b/input/regression/beam-skip.ly @@ -0,0 +1,22 @@ + +\header { + texidoc = "Beams over skips do not cause a segfault." +} + +\version "2.14.2" + +\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}>> +} diff --git a/input/regression/beam-slope-stemlet.ly b/input/regression/beam-slope-stemlet.ly index 002e3e9239..1035befb31 100644 --- a/input/regression/beam-slope-stemlet.ly +++ b/input/regression/beam-slope-stemlet.ly @@ -6,7 +6,7 @@ as invisible stems." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/beam-unconnected-beamlets.ly b/input/regression/beam-unconnected-beamlets.ly index f7477b4b71..d5e78d5e30 100644 --- a/input/regression/beam-unconnected-beamlets.ly +++ b/input/regression/beam-unconnected-beamlets.ly @@ -6,7 +6,7 @@ \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \relative c'' { \override Stem #'max-beam-connect = #1 diff --git a/input/regression/beaming-ternary-metrum.ly b/input/regression/beaming-ternary-metrum.ly index 907edf10f4..cf9957e036 100644 --- a/input/regression/beaming-ternary-metrum.ly +++ b/input/regression/beaming-ternary-metrum.ly @@ -1,12 +1,11 @@ -\version "2.12.0" +\version "2.14.0" \header { - texidoc = "Automatic beaming works also in ternary time sigs. In - this case, the 8th is a beat, so the 16ths are split into two - groups. This can be avoided by overriding @code{beatLength} to be - three 8th notes." + texidoc = "Automatic beaming works also in ternary time sigs. + As desired, the measure is split in half, with beats 1-3 and + 4-6 beamed together as a whole." } @@ -14,8 +13,7 @@ \relative c'' { \time 6/8 - c8.[ c16 c16 c16] - \set beatLength = #(ly:make-moment 3 8) - c8.[ c16 c16 c16] + c8. c16 c16 c16 + c8. c16 c16 c16 } diff --git a/input/regression/beaming.ly b/input/regression/beaming.ly index d982b35b9f..32ad72a4f7 100644 --- a/input/regression/beaming.ly +++ b/input/regression/beaming.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/beams.ly b/input/regression/beams.ly index d49f4153b5..bf972b961e 100644 --- a/input/regression/beams.ly +++ b/input/regression/beams.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Beaming can be also given explicitly." } diff --git a/input/regression/bend-after.ly b/input/regression/bend-after.ly index c3213befe0..fd77154b3c 100644 --- a/input/regression/bend-after.ly +++ b/input/regression/bend-after.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/bend-dot.ly b/input/regression/bend-dot.ly index 0e1b239d8d..b0d2eb6364 100644 --- a/input/regression/bend-dot.ly +++ b/input/regression/bend-dot.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Bends avoid dots, but only if necessary." } diff --git a/input/regression/book-identifier-markup.ly b/input/regression/book-identifier-markup.ly new file mode 100644 index 0000000000..ee6c02460e --- /dev/null +++ b/input/regression/book-identifier-markup.ly @@ -0,0 +1,14 @@ +\version "2.14.0" + +\header { + texidoc = "A @code{\\book} or @code{\\bookpart} identifier can contain +top-level markup and page-markers." +} + +mypart = \bookpart { + \relative c' { c1 } + \label #'marker + \markup { Page \page-ref #'marker "8" "?" } +} + +\bookpart { \mypart } diff --git a/input/regression/book-label-no-segfault.ly b/input/regression/book-label-no-segfault.ly new file mode 100644 index 0000000000..d011c4ecc2 --- /dev/null +++ b/input/regression/book-label-no-segfault.ly @@ -0,0 +1,10 @@ +\version "2.14.0" + +\header { + texidoc = " +A book(part) can contain only a label without causing a segfault. +" +} + +\book {\markup "foo"} % necessary to produce some output +\book { \label #'foo } diff --git a/input/regression/bookpart-variable.ly b/input/regression/bookpart-variable.ly new file mode 100644 index 0000000000..992294c4ba --- /dev/null +++ b/input/regression/bookpart-variable.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + + +\header { + texidoc = " +A @code{\bookpart} variable can be inserted in a @code{\book}. +No segfault should occur in this case. +" +} + +mypart = \bookpart { + \relative c' { + c1 + } +} + +\book { + \mypart +} diff --git a/input/regression/bookparts.ly b/input/regression/bookparts.ly index a814fb5e07..75ab8a54b5 100644 --- a/input/regression/bookparts.ly +++ b/input/regression/bookparts.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "A book can be split into several parts with different paper settings, diff --git a/input/regression/break-alignment-anchor-alignment.ly b/input/regression/break-alignment-anchor-alignment.ly index 79a1237ac7..27ef71291d 100644 --- a/input/regression/break-alignment-anchor-alignment.ly +++ b/input/regression/break-alignment-anchor-alignment.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The default callback for break-align-anchor in clefs and time/key diff --git a/input/regression/break-alignment-anchors.ly b/input/regression/break-alignment-anchors.ly index 1161967d8d..3810a85f95 100644 --- a/input/regression/break-alignment-anchors.ly +++ b/input/regression/break-alignment-anchors.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The break-align-anchor property of a break-aligned grob gives diff --git a/input/regression/break.ly b/input/regression/break.ly index afce0368a2..a0017fb4f9 100644 --- a/input/regression/break.ly +++ b/input/regression/break.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/breathing-sign-ancient.ly b/input/regression/breathing-sign-ancient.ly index 3115d6a625..af5f207b4f 100644 --- a/input/regression/breathing-sign-ancient.ly +++ b/input/regression/breathing-sign-ancient.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/breathing-sign-custom-staff.ly b/input/regression/breathing-sign-custom-staff.ly new file mode 100644 index 0000000000..693989ceca --- /dev/null +++ b/input/regression/breathing-sign-custom-staff.ly @@ -0,0 +1,13 @@ +\version "2.14.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 +} diff --git a/input/regression/breathing-sign.ly b/input/regression/breathing-sign.ly index 763529a44c..dd425c1757 100644 --- a/input/regression/breathing-sign.ly +++ b/input/regression/breathing-sign.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Breathing signs are available in different tastes: commas (default), diff --git a/input/regression/center-title.ly b/input/regression/center-title.ly new file mode 100644 index 0000000000..eddd3e38c4 --- /dev/null +++ b/input/regression/center-title.ly @@ -0,0 +1,17 @@ +\version "2.14.0" + +\header { + + texidoc = " +Long titles should be properly centered. + +" + + title = \markup \center-column { + "How Razorback Jumping Frogs Level Six Piqued Gymnasts" + } +} + +\score { + s1 +} diff --git a/input/regression/chord-changes.ly b/input/regression/chord-changes.ly index 163ea98ee9..fcc12f31d1 100644 --- a/input/regression/chord-changes.ly +++ b/input/regression/chord-changes.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="Property chordChanges: display chord names only when diff --git a/input/regression/chord-name-entry-11.ly b/input/regression/chord-name-entry-11.ly index d72b975e68..8a3017d4cb 100644 --- a/input/regression/chord-name-entry-11.ly +++ b/input/regression/chord-name-entry-11.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/chord-name-entry.ly b/input/regression/chord-name-entry.ly index e5e6dc826a..970f7df26c 100644 --- a/input/regression/chord-name-entry.ly +++ b/input/regression/chord-name-entry.ly @@ -1,10 +1,10 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Chords can be produced with the chordname entry -code (@code{\chordmode} mode), using a pitch and a suffix. Here, +code (@code{\\chordmode} mode), using a pitch and a suffix. Here, the suffixes are printed below pitches. " diff --git a/input/regression/chord-name-exceptions.ly b/input/regression/chord-name-exceptions.ly index 86dc2e5159..c5d1e756da 100644 --- a/input/regression/chord-name-exceptions.ly +++ b/input/regression/chord-name-exceptions.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The property @code{chordNameExceptions} can used diff --git a/input/regression/chord-name-major7.ly b/input/regression/chord-name-major7.ly index ac280c4043..3a6a4f82ff 100644 --- a/input/regression/chord-name-major7.ly +++ b/input/regression/chord-name-major7.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The layout of the major 7 can be tuned with @code{majorSevenSymbol}." diff --git a/input/regression/chord-names-bass.ly b/input/regression/chord-names-bass.ly index a09642746e..f169280673 100644 --- a/input/regression/chord-names-bass.ly +++ b/input/regression/chord-names-bass.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/chord-names-in-grand-staff.ly b/input/regression/chord-names-in-grand-staff.ly new file mode 100644 index 0000000000..528a2f0089 --- /dev/null +++ b/input/regression/chord-names-in-grand-staff.ly @@ -0,0 +1,29 @@ +\version "2.14.0" + +\header { + + texidoc = " +GrandStaff contexts accept chord names. The chord name in this +example should be printed above the top staff. +" +} + +\score { + \new GrandStaff + << + \chords { + f1 + } + \new Staff { + \relative c'' { + a4 a a a + } + } + \new Staff { + \clef "bass" + \relative c { + a4 a a a + } + } + >> +} diff --git a/input/regression/chord-names-languages.ly b/input/regression/chord-names-languages.ly index e446afa4fb..c119c83867 100644 --- a/input/regression/chord-names-languages.ly +++ b/input/regression/chord-names-languages.ly @@ -1,11 +1,11 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "@cindex Chord Names German The english naming of chords (default) can be changed to german -(@code{\germanChords} replaces B and Bes to H and B), semi-german -(@code{\semiGermanChords} replaces B and Bes to H and Bb), italian -(@code{\italianChords} uses Do Re Mi Fa Sol La Si), or french -(@code{\frenchChords} replaces Re to Ré). +(@code{\\germanChords} replaces B and Bes to H and B), semi-german +(@code{\\semiGermanChords} replaces B and Bes to H and Bb), italian +(@code{\\italianChords} uses Do Re Mi Fa Sol La Si), or french +(@code{\\frenchChords} replaces Re to Ré). " } diff --git a/input/regression/chord-names-lower-case-minor.ly b/input/regression/chord-names-lower-case-minor.ly new file mode 100644 index 0000000000..d4ee0e821f --- /dev/null +++ b/input/regression/chord-names-lower-case-minor.ly @@ -0,0 +1,15 @@ +\version "2.14.0" + +\header { + + texidoc = "Minor chords may be printed as lowercase letters, + in which case the `m' suffix is omitted in the output." + +} + + +\chords { + d:m + \set chordNameLowercaseMinor = ##t + d:m +} diff --git a/input/regression/chord-repetition-relative.ly b/input/regression/chord-repetition-relative.ly new file mode 100644 index 0000000000..65e75c5e60 --- /dev/null +++ b/input/regression/chord-repetition-relative.ly @@ -0,0 +1,13 @@ +\version "2.14.0" + +\header { + texidoc = " +Chord repetition handles \\relative mode: the repeated chords have +the same octaves as the original one. +" +} + +{ + 4^"absolute" q q q + \relative c' { 4^"relative" q q q } +} \ No newline at end of file diff --git a/input/regression/chord-repetition-script-stack.ly b/input/regression/chord-repetition-script-stack.ly new file mode 100644 index 0000000000..ce7208ebd2 --- /dev/null +++ b/input/regression/chord-repetition-script-stack.ly @@ -0,0 +1,11 @@ +\version "2.14.0" + +\header { + texidoc = "Post events such as fingerings and scripts added to a +chord repetition follow the same basic stacking order as chords. +" +} + +\relative c' { + 2-1-2-3 q_"q"-1-2-3 +} diff --git a/input/regression/chord-repetition.ly b/input/regression/chord-repetition.ly new file mode 100644 index 0000000000..6416bfbdd2 --- /dev/null +++ b/input/regression/chord-repetition.ly @@ -0,0 +1,13 @@ +\version "2.14.0" + +\header { + texidoc = " +A repetition symbol can be used to repeat the previous chord and save +typing. Only note events are copied: articulations, text scripts, +fingerings, etc are not repeated. +" +} + +\relative c' { + 8\p( q) q4-| q8.\(^"text" q16 q4-|\) +} diff --git a/input/regression/chord-scripts.ly b/input/regression/chord-scripts.ly index b95cde22f0..1bdc25dc37 100644 --- a/input/regression/chord-scripts.ly +++ b/input/regression/chord-scripts.ly @@ -1,19 +1,16 @@ +\version "2.14.0" -\version "2.12.0" \header { - -texidoc = "Scripts can also be attached to chord elements." - + texidoc = "Scripts can also be attached to chord elements. +They obey manual direction indicators." } -\relative c''{ - < c-. > 4 - < c-> > 4 - < c-. e-. g-. b-. > - < c^^ > 4 - < c_^ > 4 - < c_^ e^^ > 4 - < c_^ e^^ > 4 - - +\relative c'' { + < c-. >4 + < c-> >4 + < c-. e-. g-. b-. >4 + < c^^ >4 + < c_^ >4 + < c_^ e^^ >4 + < c_^ e_^ >4 } diff --git a/input/regression/chord-tremolo-articulations.ly b/input/regression/chord-tremolo-articulations.ly new file mode 100644 index 0000000000..5d1cfbd0fc --- /dev/null +++ b/input/regression/chord-tremolo-articulations.ly @@ -0,0 +1,22 @@ +\version "2.14.0" + +\header{ +texidoc=" +Articulations on chord tremolos should not confuse the time-scaling of the +notes. In particular, only the number of real notes should be considered. +" +} + +\context Voice \relative c' { + \repeat "tremolo" 4 { d16\f e-. } + \repeat "tremolo" 4 { d16-> e } | \barNumberCheck #2 + \repeat "tremolo" 4 { d16 e\f } + \repeat "tremolo" 8 { d32\> e\! } | \barNumberCheck #3 + \repeat "tremolo" 2 { d8\trill e } + \repeat "tremolo" 2 { d8\sfz e } | \barNumberCheck #4 + + \time 2/4 + \repeat "tremolo" 8 { d32^"Markup" e } | \barNumberCheck #5 + c4 c4 +} + diff --git a/input/regression/chord-tremolo-other-commands.ly b/input/regression/chord-tremolo-other-commands.ly new file mode 100644 index 0000000000..3096e7e6d3 --- /dev/null +++ b/input/regression/chord-tremolo-other-commands.ly @@ -0,0 +1,24 @@ +\version "2.14.2" + +\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 } + >> +} diff --git a/input/regression/chord-tremolo-scaled-durations.ly b/input/regression/chord-tremolo-scaled-durations.ly index 9822581a5a..0b8c6c8ad1 100644 --- a/input/regression/chord-tremolo-scaled-durations.ly +++ b/input/regression/chord-tremolo-scaled-durations.ly @@ -1,4 +1,4 @@ -\version "2.11.32" +\version "2.14.0" \header { texidoc = "Don't allow scaled durations to confuse the tremolo beaming. diff --git a/input/regression/chord-tremolo-short.ly b/input/regression/chord-tremolo-short.ly index 883dbbea20..725833bfa6 100644 --- a/input/regression/chord-tremolo-short.ly +++ b/input/regression/chord-tremolo-short.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " Tremolo repeats can be constructed for short tremolos (total duration smaller than 1/4) too. Only some of the beams are connected to the stems. diff --git a/input/regression/chord-tremolo-single.ly b/input/regression/chord-tremolo-single.ly index e55106c4ec..70505aa275 100644 --- a/input/regression/chord-tremolo-single.ly +++ b/input/regression/chord-tremolo-single.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="Chord tremolos on a single note." diff --git a/input/regression/chord-tremolo-stem-direction.ly b/input/regression/chord-tremolo-stem-direction.ly index d385510ca7..4101c525cc 100644 --- a/input/regression/chord-tremolo-stem-direction.ly +++ b/input/regression/chord-tremolo-stem-direction.ly @@ -5,12 +5,12 @@ } -\version "2.12.0" +\version "2.14.0" \paper{ ragged-right = ##t } -\relative { +\relative c { \stemDown - \repeat tremolo 16 {d,32 a'32 } -} + \repeat tremolo 16 { d32 a'32 } +} diff --git a/input/regression/chord-tremolo-whole.ly b/input/regression/chord-tremolo-whole.ly index 8b2e27e182..a628a3ba3f 100644 --- a/input/regression/chord-tremolo-whole.ly +++ b/input/regression/chord-tremolo-whole.ly @@ -3,7 +3,7 @@ notes." } -\version "2.12.0" +\version "2.14.0" \relative c'''{ \repeat tremolo 32{ g64 a } diff --git a/input/regression/chord-tremolo.ly b/input/regression/chord-tremolo.ly index 6f84eab5bd..58fdee42bf 100644 --- a/input/regression/chord-tremolo.ly +++ b/input/regression/chord-tremolo.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/chordnames-nochord.ly b/input/regression/chordnames-nochord.ly new file mode 100644 index 0000000000..50a3c3090b --- /dev/null +++ b/input/regression/chordnames-nochord.ly @@ -0,0 +1,30 @@ +\version "2.14.0" + +\header { + texidoc = "Rests in music passed to ChordNames context display noChordSymbol. +noChordSymbol is treated like a ChordName with respect to chordChanges. +" +} + +myChords = \chordmode { + c1 r1 r1 \break + r1 g1 c1 \break +} + +\score { + << + \new ChordNames { + \myChords + \set chordChanges = ##t + \myChords + } + \new FretBoards { + \myChords + \myChords + } + \new Staff { + \myChords + \myChords + } + >> +} diff --git a/input/regression/chords-funky-ignatzek.ly b/input/regression/chords-funky-ignatzek.ly index b5349a3cfc..64949c23af 100644 --- a/input/regression/chords-funky-ignatzek.ly +++ b/input/regression/chords-funky-ignatzek.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/chromatic-scales.ly b/input/regression/chromatic-scales.ly index d0b0298731..f90a01f1a3 100644 --- a/input/regression/chromatic-scales.ly +++ b/input/regression/chromatic-scales.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="@code{staffLineLayoutFunction} is used to change the position of the notes. This sets @code{staffLineLayoutFunction} to @code{ly:pitch-semitones} to @@ -7,7 +7,7 @@ space and line equal to one semitone. " } -scales = \relative { +scales = \relative c' { a ais b c cis d dis e f fis g gis a } diff --git a/input/regression/clef-oct-visibility.ly b/input/regression/clef-oct-visibility.ly new file mode 100644 index 0000000000..9838112f23 --- /dev/null +++ b/input/regression/clef-oct-visibility.ly @@ -0,0 +1,28 @@ +\version "2.14.0" + +\header { + + texidoc = "Octavation signs may be added to clefs. By default, +their break-visibility is derived from the associated clef, but it may +be overridden explicitly. The initial treble_8 clef should not have an +8, while the treble_8 clef after the tenor clef should. +These settings also need to apply to clefs on new lines." + +} +\layout { ragged-right = ##t } + + +\relative c' { + \override Staff.OctavateEight #'break-visibility = #all-invisible + + \clef "treble_8" + c2 c | + c c | \break + c \clef "tenor" c | + \revert Staff.OctavateEight #'break-visibility + \clef "treble_8" + c2 c | + c c | \break + c c +} + diff --git a/input/regression/clef-oct.ly b/input/regression/clef-oct.ly index 80b43a1fea..0e67e283d0 100644 --- a/input/regression/clef-oct.ly +++ b/input/regression/clef-oct.ly @@ -1,5 +1,5 @@ -\version "2.12.0" \header { +\version "2.14.0" \header { texidoc = "Octavation signs may be added to clefs. These octavation signs may be placed below or above (meaning an octave diff --git a/input/regression/clef-octavation.ly b/input/regression/clef-octavation.ly new file mode 100644 index 0000000000..0397cb70f9 --- /dev/null +++ b/input/regression/clef-octavation.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + + texidoc="Octavate symbols should be correctly positioned close to +the parent clef." + +} +\score { + << + \new Staff { \clef "G^8" g''1 } + \new Staff { \clef "F^8" c'1 } + \new Staff { \clef "C^8" c''1 } + \new Staff { \clef "G_8" g1 } + \new Staff { \clef "F_8" c,1 } + \new Staff { \clef "C_8" c1 } + >> +} diff --git a/input/regression/clef-ottava.ly b/input/regression/clef-ottava.ly index a277e253e5..2e932ec6aa 100644 --- a/input/regression/clef-ottava.ly +++ b/input/regression/clef-ottava.ly @@ -5,7 +5,7 @@ but they don't confuse one another." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t} diff --git a/input/regression/clef-warn.ly b/input/regression/clef-warn.ly index 5f3b410e9d..425f4a4fa5 100644 --- a/input/regression/clef-warn.ly +++ b/input/regression/clef-warn.ly @@ -1,10 +1,12 @@ +\version "2.14.0" + +#(ly:set-option 'warning-as-error #f) + \header { texidoc = "Unknown clef name warning displays available clefs" - } - +} -\version "2.12.0" { \clef "foo" c4 - } +} diff --git a/input/regression/clefs.ly b/input/regression/clefs.ly index 02c727d0b3..09bd1c18b4 100644 --- a/input/regression/clefs.ly +++ b/input/regression/clefs.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/clip-systems.ly b/input/regression/clip-systems.ly index 1bf7c926d1..3533514972 100644 --- a/input/regression/clip-systems.ly +++ b/input/regression/clip-systems.ly @@ -19,14 +19,13 @@ The result will be files named } -\version "2.12.0" +\version "2.14.0" #(ly:set-option 'clip-systems) - -#(set! output-count 1) +#(define output-suffix "1") origScore = \score{ - \relative { + \relative c' { \set Staff.instrumentName = #"bla" c1 d @@ -70,8 +69,8 @@ origScore = \score{ } } -#(set! output-count 0) #(ly:set-option 'clip-systems #f) +#(define output-suffix #f) \book { \score { \origScore } diff --git a/input/regression/cluster-break.ly b/input/regression/cluster-break.ly index 4e0cc405e7..fa8c46056c 100644 --- a/input/regression/cluster-break.ly +++ b/input/regression/cluster-break.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Clusters behave well across line breaks." } diff --git a/input/regression/cluster-cross-staff.ly b/input/regression/cluster-cross-staff.ly index 2b0d627b23..f1864d1938 100644 --- a/input/regression/cluster-cross-staff.ly +++ b/input/regression/cluster-cross-staff.ly @@ -7,7 +7,7 @@ ragged-right= ##t } -\version "2.12.0" +\version "2.14.0" \new PianoStaff << \new Staff = "up" { diff --git a/input/regression/cluster-single-note.ly b/input/regression/cluster-single-note.ly index b8f91cea5f..e148f1ad09 100644 --- a/input/regression/cluster-single-note.ly +++ b/input/regression/cluster-single-note.ly @@ -4,5 +4,5 @@ } -\version "2.12.0" +\version "2.14.0" \relative c' { \makeClusters } diff --git a/input/regression/cluster-style.ly b/input/regression/cluster-style.ly index 37dfcbb0e4..dbacc46785 100644 --- a/input/regression/cluster-style.ly +++ b/input/regression/cluster-style.ly @@ -1,6 +1,6 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Clusters behave well across line breaks." } diff --git a/input/regression/cluster.ly b/input/regression/cluster.ly index ae74c3bc76..fb214fcc52 100644 --- a/input/regression/cluster.ly +++ b/input/regression/cluster.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Clusters are a device to denote that a complete range of notes is to be played." diff --git a/input/regression/collision-2.ly b/input/regression/collision-2.ly index e6317fa4ec..5219ae9092 100644 --- a/input/regression/collision-2.ly +++ b/input/regression/collision-2.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Single head notes may collide. " } diff --git a/input/regression/collision-alignment.ly b/input/regression/collision-alignment.ly index b77a116c10..510c5b5e80 100644 --- a/input/regression/collision-alignment.ly +++ b/input/regression/collision-alignment.ly @@ -7,7 +7,7 @@ \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \relative << \new Staff { diff --git a/input/regression/collision-dots-invert.ly b/input/regression/collision-dots-invert.ly index d882cde643..61231bb136 100644 --- a/input/regression/collision-dots-invert.ly +++ b/input/regression/collision-dots-invert.ly @@ -6,7 +6,7 @@ } \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \relative c'' { << 2\\ { 4 4 } >> << { 2 } \\ { 4. 8 } >> diff --git a/input/regression/collision-dots-move.ly b/input/regression/collision-dots-move.ly index e684871811..d04b0f7c9b 100644 --- a/input/regression/collision-dots-move.ly +++ b/input/regression/collision-dots-move.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "If dotted note heads must remain on the left side, diff --git a/input/regression/collision-dots-up-space-dotted.ly b/input/regression/collision-dots-up-space-dotted.ly index 272ea3578b..2e1e067e2b 100644 --- a/input/regression/collision-dots-up-space-dotted.ly +++ b/input/regression/collision-dots-up-space-dotted.ly @@ -6,7 +6,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper{ ragged-right=##t } diff --git a/input/regression/collision-dots.ly b/input/regression/collision-dots.ly index 264a3350d0..5de4559757 100644 --- a/input/regression/collision-dots.ly +++ b/input/regression/collision-dots.ly @@ -2,7 +2,7 @@ on the right side." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right= ##t } % todo: b2 (up) + b8 down looks strange compared to c2up + b8. (down) diff --git a/input/regression/collision-harmonic-no-dots.ly b/input/regression/collision-harmonic-no-dots.ly index 6d7b69ba68..98bd6521a0 100644 --- a/input/regression/collision-harmonic-no-dots.ly +++ b/input/regression/collision-harmonic-no-dots.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "Collision resolution involving dotted harmonic heads diff --git a/input/regression/collision-head-chords.ly b/input/regression/collision-head-chords.ly index 248e674809..86ef4053ad 100644 --- a/input/regression/collision-head-chords.ly +++ b/input/regression/collision-head-chords.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Note heads in collisions should be merged if they have the same positions in the extreme note heads. diff --git a/input/regression/collision-head-solfa-fa.ly b/input/regression/collision-head-solfa-fa.ly index e6a3cf1b10..0bd7091385 100644 --- a/input/regression/collision-head-solfa-fa.ly +++ b/input/regression/collision-head-solfa-fa.ly @@ -4,15 +4,22 @@ block-shaped note." } -\version "2.12.0" +\version "2.14.0" -<< +{ \key c \major \set Staff.shapeNoteStyles = #'#(do re mi fa #f la ti) - - { f'4 } - \\ - { f'4 } ->> + << + { f'4 } + \\ + { f'4 } + >> + \set Staff.shapeNoteStyles = #'#(do re mi faThin #f la ti) + << + { f'4 } + \\ + { f'4 } + >> +} diff --git a/input/regression/collision-heads.ly b/input/regression/collision-heads.ly index 11387aecf3..1a0a9fba83 100644 --- a/input/regression/collision-heads.ly +++ b/input/regression/collision-heads.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Open and black note heads are not merged by default." diff --git a/input/regression/collision-manual.ly b/input/regression/collision-manual.ly index 7acb4befbc..e8ce7b8124 100644 --- a/input/regression/collision-manual.ly +++ b/input/regression/collision-manual.ly @@ -2,13 +2,13 @@ texidoc = "Collision resolution may be forced manually with @code{force-hshift}. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } -\relative { +\relative c' { << { f \override NoteColumn #'force-hshift = #0.1 f } \\ diff --git a/input/regression/collision-merge-differently-dotted.ly b/input/regression/collision-merge-differently-dotted.ly index 77ea8e2877..9b9fd6c007 100644 --- a/input/regression/collision-merge-differently-dotted.ly +++ b/input/regression/collision-merge-differently-dotted.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "If @code{NoteCollision} has diff --git a/input/regression/collision-merge-differently-headed.ly b/input/regression/collision-merge-differently-headed.ly index 88ae8082c9..67c131013c 100644 --- a/input/regression/collision-merge-differently-headed.ly +++ b/input/regression/collision-merge-differently-headed.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = diff --git a/input/regression/collision-merge-dots.ly b/input/regression/collision-merge-dots.ly index 9b3b44697f..a39df3d38c 100644 --- a/input/regression/collision-merge-dots.ly +++ b/input/regression/collision-merge-dots.ly @@ -4,7 +4,7 @@ } \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" { \relative c'' \new Staff { diff --git a/input/regression/collision-mesh.ly b/input/regression/collision-mesh.ly index 53b02aa4cb..e4e7db8d4d 100644 --- a/input/regression/collision-mesh.ly +++ b/input/regression/collision-mesh.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Oppositely stemmed chords, meshing into each other, are resolved." diff --git a/input/regression/collision-seconds.ly b/input/regression/collision-seconds.ly index 2dd97fddc0..70b0e052e0 100644 --- a/input/regression/collision-seconds.ly +++ b/input/regression/collision-seconds.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Seconds do not confuse the collision algorithm too much. The best diff --git a/input/regression/collision-whole.ly b/input/regression/collision-whole.ly index 20f0d71946..f6987eca60 100644 --- a/input/regression/collision-whole.ly +++ b/input/regression/collision-whole.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Mixed collisions with whole notes require asymmetric shifts." diff --git a/input/regression/collisions.ly b/input/regression/collisions.ly index e3e6816325..9ba5c5bf25 100644 --- a/input/regression/collisions.ly +++ b/input/regression/collisions.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" In addition to normal collision rules, there is support for polyphony, diff --git a/input/regression/color.ly b/input/regression/color.ly index 9f4f875292..8403fddfe1 100644 --- a/input/regression/color.ly +++ b/input/regression/color.ly @@ -1,14 +1,14 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = "Each grob can have a color assigned to it. -Use the @code{\override} and @code{\revert} expressions to set the +Use the @code{\\override} and @code{\\revert} expressions to set the @code{color} property." } \paper { ragged-right = ##t } -\relative { +\relative c' { \override Accidental #'color = #darkgreen \override Beam #'color = #cyan \override NoteHead #'color = #darkyellow diff --git a/input/regression/completion-heads-factor.ly b/input/regression/completion-heads-factor.ly new file mode 100644 index 0000000000..a36da3accd --- /dev/null +++ b/input/regression/completion-heads-factor.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header{ +texidoc=" + +If the @code{Note_heads_engraver} is replaced by the @code{Completion_heads_engraver}, +notes with a duration factor still keep their requested appearance. + +" +} + +#(set-paper-size "a6") + +\layout { ragged-right= ##t } + + +\new Voice \with { + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" +} \relative c'{ + + c\breve | + c1*2 | + c2*4 | + c8*20 +} diff --git a/input/regression/completion-heads-lyrics.ly b/input/regression/completion-heads-lyrics.ly index ff0801f8fe..71d243d801 100644 --- a/input/regression/completion-heads-lyrics.ly +++ b/input/regression/completion-heads-lyrics.ly @@ -1,7 +1,7 @@ \header { texidoc = "You can put lyrics under completion heads." } -\version "2.12.0" +\version "2.14.0" mel = \relative c'' { c1. c1. @@ -12,7 +12,7 @@ lyr = \lyricmode { } \score { - \new Score << + << \new Staff << \new Voice = "completion" \with { \remove "Note_heads_engraver" diff --git a/input/regression/completion-heads-multiple-ties.ly b/input/regression/completion-heads-multiple-ties.ly index eb7948a35b..6d6066fc5a 100644 --- a/input/regression/completion-heads-multiple-ties.ly +++ b/input/regression/completion-heads-multiple-ties.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/completion-heads-polyphony-2.ly b/input/regression/completion-heads-polyphony-2.ly new file mode 100644 index 0000000000..d6104c3fef --- /dev/null +++ b/input/regression/completion-heads-polyphony-2.ly @@ -0,0 +1,21 @@ +\version "2.14.0" + +\header { + texidoc = " +Complex completion heads work properly in a polyphonic environment. +" +} + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + } +} + +\context Staff \relative c'' << + { c4. c c c4 c4. c4 } + \\ + { g8 g2 g1 g4. } +>> diff --git a/input/regression/completion-heads-polyphony.ly b/input/regression/completion-heads-polyphony.ly index e275aa9e12..e0eb1d52c5 100644 --- a/input/regression/completion-heads-polyphony.ly +++ b/input/regression/completion-heads-polyphony.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Completion heads are broken across bar lines. This was diff --git a/input/regression/completion-heads-tie.ly b/input/regression/completion-heads-tie.ly index 8bd6028aa1..6dffca3f8e 100644 --- a/input/regression/completion-heads-tie.ly +++ b/input/regression/completion-heads-tie.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper{ ragged-right=##t } diff --git a/input/regression/completion-heads-tuplets.ly b/input/regression/completion-heads-tuplets.ly new file mode 100644 index 0000000000..03893a50db --- /dev/null +++ b/input/regression/completion-heads-tuplets.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { + texidoc = " +Completion heads may be used with tuplets (and compressed music) too. +" +} + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + } +} + +\context Staff \relative c'' { + \set tupletSpannerDuration = #(ly:make-moment 1 1) + \times 2/3 { g1 g g } +} diff --git a/input/regression/completion-heads.ly b/input/regression/completion-heads.ly index 708dc0fb4a..31f644f75e 100644 --- a/input/regression/completion-heads.ly +++ b/input/regression/completion-heads.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/completion-rest.ly b/input/regression/completion-rest.ly new file mode 100644 index 0000000000..63aa5b37e0 --- /dev/null +++ b/input/regression/completion-rest.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header{ +texidoc=" + +If the @code{Rest_engraver} is replaced by the @code{Completion_rest_engraver}, +rests with a duration factor still keep their requested appearance. + +" +} + +#(set-paper-size "a6") + +\layout { ragged-right= ##t } + + +\new Voice \with { + \remove "Rest_engraver" + \consists "Completion_rest_engraver" +} \relative c'{ + + r\breve | + r1*2 | + r2*4 | + r8*20 +} diff --git a/input/regression/compound-time-signatures.ly b/input/regression/compound-time-signatures.ly new file mode 100644 index 0000000000..37a54cc4bc --- /dev/null +++ b/input/regression/compound-time-signatures.ly @@ -0,0 +1,44 @@ +\version "2.14.0" + +\header { + texidoc = "Create compound time signatures. The argument is a Scheme list +of lists. Each list describes one fraction, with the last entry being the +denominator, while the first entries describe the summands in the +enumerator. If the time signature consists of just one fraction, +the list can be given directly, i.e. not as a list containing a single list. +For example, a time signature of (3+1)/8 + 2/4 would be created as +@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8 +as @code{\\compoundMeter #'((3 2 8))} or shorter +@code{\\compoundMeter #'(3 2 8)}. +" +} + + + +\relative c' { + \compoundMeter #'(1 2 3 4 8) + \repeat unfold 10 c8 \repeat unfold 20 c16 \break + + \time 3/4 + \repeat unfold 6 c8 \repeat unfold 12 c16 \break + + \compoundMeter #'((1 2 3 4 8) (2 4)) + \repeat unfold 14 c8 \repeat unfold 28 c16 \break + + \compoundMeter #'((1 2 3 4 8) (2 4) (2 3 8)) + \repeat unfold 19 c8 \repeat unfold 38 c16 \break + + \compoundMeter #'(1 2 3 4 8) + \repeat unfold 10 c8 \repeat unfold 20 c16 \break + + \compoundMeter #'((1 8) (3 8)) + \repeat unfold 4 c8 \repeat unfold 8 c16 \break + + \compoundMeter #'((3 8) (1 8)) + \repeat unfold 4 c8 \repeat unfold 8 c16 \break + + \time 4/4 + \repeat unfold 8 c8 \repeat unfold 16 c16 \break + + \bar"|." +} diff --git a/input/regression/context-die-staff.ly b/input/regression/context-die-staff.ly index 14ad542784..596784050f 100644 --- a/input/regression/context-die-staff.ly +++ b/input/regression/context-die-staff.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "a staff should die if there is reference to it." diff --git a/input/regression/context-mod-context.ly b/input/regression/context-mod-context.ly new file mode 100644 index 0000000000..02e98e43ea --- /dev/null +++ b/input/regression/context-mod-context.ly @@ -0,0 +1,43 @@ +\version "2.14.0" + +\header { +texidoc = "Context modifications can be stored into a variable as a +\with object. They can be later inserted directly into a context definition." +} + +% Some sample modifications to be inserted into a \with block later on +ctxmod = \with { + \remove "Time_signature_engraver" + \consists "Ambitus_engraver" + \override StaffSymbol #'line-count = 4 +} + +music = \relative c'' { \key fis \minor c1 d e } + +\score { << + \new Staff { \music} + >> + \layout { + \context { \Staff + \ctxmod + \override NoteHead #'style = #'petrucci + } + } +} + + +\score { << + \new Staff { \music} + >> + \layout { + \context { \Staff + \override StaffSymbol #'line-count = 3 + \override NoteHead #'style = #'petrucci + } + % Should override the above definitions, but not reset others + \context { \Staff + \ctxmod + } + } +} + diff --git a/input/regression/context-mod-with.ly b/input/regression/context-mod-with.ly new file mode 100644 index 0000000000..68ae7af707 --- /dev/null +++ b/input/regression/context-mod-with.ly @@ -0,0 +1,45 @@ +\version "2.14.0" + +\header { +texidoc = "Context modifications can be stored into a variable as a +\with object. They can be later inserted into another \with block." +} + +% Some sample modifications to be inserted into a \with block later on +ctxmod = \with { + \remove "Time_signature_engraver" + \consists "Ambitus_engraver" + \override StaffSymbol #'line-count = 4 +} + +music = \relative c'' { \key fis \minor c1 d e } + +\score { << + % No modifications: + \new Staff { \music } + % Some context modifications manually written in a \with block + \new Staff \with { + \remove "Time_signature_engraver" + \consists "Ambitus_engraver" + \override StaffSymbol #'line-count = 4 + } { \music } + % The same mods as direct value of \with + \new Staff \with \ctxmod { \music } + % Mods as part of a \with block + \new Staff \with { \ctxmod } { \music } + % Mods before a context mod in a with block are working: + \new Staff \with { + \remove "Clef_engraver" + \ctxmod + } { \music } + % Mods before and after a context mod in a with block are working: + \new Staff \with { + \remove "Clef_engraver" + \ctxmod + \remove "Key_engraver" + } { \music } + % Mods can be inserted instead of a \with block (i.e. \with is not required) + \new Staff \ctxmod { \music } + \new Staff { \music } +>> +} diff --git a/input/regression/context-nested-staffgroup.ly b/input/regression/context-nested-staffgroup.ly index c22007fe51..387ef2a55c 100644 --- a/input/regression/context-nested-staffgroup.ly +++ b/input/regression/context-nested-staffgroup.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Contexts of the same type can be nested." } diff --git a/input/regression/cue-clef-begin-of-score.ly b/input/regression/cue-clef-begin-of-score.ly new file mode 100644 index 0000000000..012130c2b0 --- /dev/null +++ b/input/regression/cue-clef-begin-of-score.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { + texidoc = "Clefs for cue notes at the start of a score should print the +standard clef plus a small cue clef after the time/key signature." +} + +vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 } +\addQuote vIQuote { \vI } + +Solo = \relative c'' { + \clef "bass" + \cueDuringWithClef #"vIQuote" #DOWN #"treble" { r2 } d,,4 d4 | +} + +\score { + << + \new Staff \new Voice \Solo + >> +} diff --git a/input/regression/cue-clef-keysignature.ly b/input/regression/cue-clef-keysignature.ly new file mode 100644 index 0000000000..6824e64de9 --- /dev/null +++ b/input/regression/cue-clef-keysignature.ly @@ -0,0 +1,17 @@ +\version "2.14.2" + +\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 | + } +} diff --git a/input/regression/cue-clef-new-line.ly b/input/regression/cue-clef-new-line.ly new file mode 100644 index 0000000000..bfe5e504d2 --- /dev/null +++ b/input/regression/cue-clef-new-line.ly @@ -0,0 +1,30 @@ +\version "2.14.0" + +\header { + texidoc = "Clefs for cue notes and line breaks. If the cue notes start in a +new line, the cue clef should not be printed at the end of the previous line. +Similarly, an end clef for cue notes ending at a line break should only be +printed at the end of the line. + +Cue notes going over a line break should print the standard clef on the new +line plus an additional cue clef after the time/key signature." +} + +vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 } +\addQuote vIQuote { \vI } + +Solo = \relative c { + \clef "bass" + c1 | \break + \cueDuringWithClef #"vIQuote" #UP #"tenor" { R1 } | \break + c1 | + \cueDuringWithClef #"vIQuote" #UP #"tenor" { R1 | \break + R1 } | + c1 +} + +\score { + << + \new Staff \new Voice \Solo + >> +} diff --git a/input/regression/cue-clef-octavation.ly b/input/regression/cue-clef-octavation.ly new file mode 100644 index 0000000000..ceb0d54211 --- /dev/null +++ b/input/regression/cue-clef-octavation.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header { + texidoc = "Octavation for clefs for cue notes." +} + +vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 } +\addQuote vIQuote { \vI } + +Solo = \relative c' { + \clef "treble_8" c1 | + \cueDuringWithClef #"vIQuote" #UP #"bass^8" { R1 } | + c1 | \break + c c + \clef "bass^8" c1 | + \cueDuringWithClef #"vIQuote" #UP #"treble_8" { R1 R1 } | + c + \cueDuringWithClef #"vIQuote" #UP #"treble_8" { R1 \break R } | + c +} + +\score { + << + \new Staff \new Voice \Solo + >> +} diff --git a/input/regression/cue-clef.ly b/input/regression/cue-clef.ly new file mode 100644 index 0000000000..1b5ee627d4 --- /dev/null +++ b/input/regression/cue-clef.ly @@ -0,0 +1,25 @@ +\version "2.14.0" + +\header { + texidoc = "Clefs for cue notes: Print a cue clef at the begin of the cue +notes and a cancelling clef after the cue notes." +} + +vI = \relative c'' { \clef "treble" \repeat unfold 16 g4 } +\addQuote vIQuote { \vI } + +Solo = \relative c { + \clef "bass" + c4 \cueDuringWithClef #"vIQuote" #DOWN #"treble" { + r4 r2 | + r4 + } c4 c2 | + \cueDuringWithClef #"vIQuote" #DOWN "soprano" { R1*2 } | + c1 +} + +\score { + << + \new Staff \new Voice \Solo + >> +} diff --git a/input/regression/custos.ly b/input/regression/custos.ly index 8520260739..258da68716 100644 --- a/input/regression/custos.ly +++ b/input/regression/custos.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Custodes may be engraved in various styles." } diff --git a/input/regression/dead-notes.ly b/input/regression/dead-notes.ly new file mode 100644 index 0000000000..6abd144911 --- /dev/null +++ b/input/regression/dead-notes.ly @@ -0,0 +1,39 @@ +\version "2.14.0" + +\header{ texidoc = "Muted notes (also called dead notes) are supported + within normal staves and tablature." + } + +mynotes = \relative c,, { + \deadNotesOn + e8. e16 + \deadNotesOff + g4 a b | + e8. \deadNote e16 g4 a b | + e,4. \deadNote { e8 e e } e4 | + < e, \deadNote b' e >8 < e \deadNote b' e > < e \deadNote b' e >4 < e \deadNote b' e >4 r + \bar "|." +} + +\context StaffGroup << + \context Staff { + \context Voice { % Warning: explicit voice instantiation is required + % to have deadNotesOff work properly + % when deadNotesOn comes at the beginning + % of the piece + \clef "bass_8" + \mynotes + } + } + \context TabStaff { + \context TabVoice { % Warning: explicit voice instantiation is + % required to have deadNotesOff work properly + % when deadNotesOn comes at the beginning + % of the piece + \set TabStaff.stringTunings = #bass-tuning + \mynotes + } + } +>> + + diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly index 80d41549ee..c156234cb8 100644 --- a/input/regression/display-lily-tests.ly +++ b/input/regression/display-lily-tests.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.2" #(use-modules (srfi srfi-13) (ice-9 format)) @@ -41,8 +41,8 @@ result-info "BUG") input output)) (make-music 'SequentialMusic 'void #t))))) - -test = + +test = #(define-music-function (parser location result-info strings) (string? pair?) (test-function parser location result-info strings)) @@ -51,7 +51,7 @@ test = %%% \header { texidoc = "This is a test of the display-lily-music unit. Problems are reported on the -stderr of this run." +stderr of this run." } %% Sequential music @@ -76,6 +76,8 @@ stderr of this run." \test "" ##[ R1.*2/3 #] % MultiMeasureRestMusicGroup, MultiMeasureRestEvent \test "" ##[ \skip 2.*3/4 #] % SkipMusic \test "" ##[ < c\1 e\3 >4.*3/4-. #] % EventChord, NoteEvent, StringNumberEvent, ArticulationEvent +\test "" ##[ < c-1\4 >8 #] +\test "NOT A BUG" ##[ { < c e g c' > q8-. } #] % RepeatedChord %% tags \test "" ##[ { \tag #'foo { c4 d } } #] @@ -100,9 +102,9 @@ stderr of this run." \test "" ##[ \lyricmode { a -- b } #] % HyphenEvent \test "" ##[ \lyricmode { a __ b } #] % ExtenderEvent \test "" ##[ \lyricmode { "a " } #] % LyricEvent -\test "" ##[ \lyricsto "foo" { bla bla } #] % LyricCombineMusic +\test "" ##[ \lyricsto "foo" { bla bla } #] % LyricCombineMusic \test "" ##[ { { c d } - \addlyrics { bla bla } } #] + \addlyrics { bla bla } } #] %% Drums \test "" ##[ \drums { hihat } #] @@ -132,6 +134,7 @@ stderr of this run." \test "" ##[ { c( c) c^( c^) c_( c_) } #] % SlurEvent \test "" ##[ { c\< c\! c^\< c^\! c_\< c_\! } #] % CrescendoEvent \test "" ##[ { c\> c\! c^\> c^\! c_\> c_\! } #] % DecrescendoEvent +\test "" ##[ { c\episemInitium c\episemFinis } #] % EpisemaEvent \test "" ##[ { c\( c\) c^\( c^\) c_\( c_\) } #] % PhrasingSlurEvent \test "" ##[ { c\sustainOn c\sustainOff } #] % SustainEvent \test "" ##[ { c\sostenutoOn c\sostenutoOff } #] % SostenutoEvent @@ -145,6 +148,8 @@ stderr of this run." \test "" ##[ \breathe #] \test "" ##[ { c \[ c \] } #] % LigatureEvent \test "" ##[ \~ #] % PesOrFlexaEvent +\test "" ##[ { c-\bendAfter #3 } #] % BendAfterEvent +\test "" ##[ < c-\rightHandFinger #1 > #] % StrokeFingerEvent \test "" ##[ \break #] \test "" ##[ \noBreak #] @@ -161,6 +166,9 @@ stderr of this run." \test "" ##[ \mark \default #] % MarkEvent \test "" ##[ \mark "Allegro" #] \test "" ##[ \tempo 4 = 120 #] % MetronomeChangeEvent +\test "" ##[ \tempo 4 = 108 ~ 116 #] +\test "" ##[ \tempo "Allegro" 4 = 132 #] +\test "" ##[ \tempo "Andante" #] %% key, time, clef, bar \test "" ##[ \key \default #] % KeyChangeEvent @@ -189,7 +197,7 @@ stderr of this run." \test "" ##[ \repeat unfold 2 { c d } #] % UnfoldedRepeatedMusic \test "" ##[ \repeat percent 2 { c d } #] % PercentRepeatedMusic \test "" ##[ \repeat tremolo 4 { c16 d } #] % TremoloRepeatedMusic -\test "" ##[ \repeat volta 2 { c4 d } \alternative { { c d } { e f } } #] % +\test "" ##[ \repeat volta 2 { c4 d } \alternative { { c d } { e f } } #] % %% Context creation \test "" ##[ \new Staff { c d } #] % ContextSpeccedMusic @@ -208,9 +216,9 @@ stderr of this run." \test "" ##[ \unset autoBeaming #] %% Layout properties \test "" ##[ \override Staff . Stem #'thickness = #4.0 #] % OverrideProperty -\test "" ##[ \once \override Beam #'thickness = #0.6 #] +\test "" ##[ \once \override Beam #'beam-thickness = #0.6 #] \test "" ##[ \revert Staff . Stem #'thickness #] % RevertProperty -\test "" ##[ \revert Beam #'thickness #] +\test "" ##[ \revert Beam #'beam-thickness #] %% \applyOutput \test "" ##[ \applyOutput #'Foo #(lambda (arg) (list)) #] @@ -220,7 +228,7 @@ stderr of this run." %% \partial \test "" ##[ \partial 2 #] \test "" ##[ \partial 8. #] -\test #"TODO? exotic durations in \\partial" ##[ \partial 4*2/3 #] +\test "" ##[ \partial 4*2/3 #] %% \partcombine \test "" ##[ \partcombine { c e } @@ -230,6 +238,14 @@ stderr of this run." \test "" ##[ \cueDuring #"foo" #1 { c d } #] \test "" ##[ \quoteDuring #"foo" { c d } #] +%% \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. diff --git a/input/regression/dot-column-note-collision.ly b/input/regression/dot-column-note-collision.ly new file mode 100644 index 0000000000..7e9650565a --- /dev/null +++ b/input/regression/dot-column-note-collision.ly @@ -0,0 +1,9 @@ +\version "2.14.0" + +\header { + texidoc = "Dots and note-heads should not collide." +} + +{ + 4. s8 \small 4. s8 4. s8 4. s8 +} diff --git a/input/regression/dot-column-rest-collision.ly b/input/regression/dot-column-rest-collision.ly index 95f0db9aeb..3419f7304f 100644 --- a/input/regression/dot-column-rest-collision.ly +++ b/input/regression/dot-column-rest-collision.ly @@ -2,7 +2,7 @@ texidoc = "Dot columns do not trigger beam slanting too early." } -\version "2.12.0" +\version "2.14.0" \paper{ ragged-right=##t } << { e''8 e''8 g'' g''} \\ diff --git a/input/regression/dot-dot-count-override.ly b/input/regression/dot-dot-count-override.ly index 46a22d2311..b7bd2bc96d 100644 --- a/input/regression/dot-dot-count-override.ly +++ b/input/regression/dot-dot-count-override.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "The @code{dot-count} property diff --git a/input/regression/dot-flag-collision.ly b/input/regression/dot-flag-collision.ly index 2c51af61e5..045816968f 100644 --- a/input/regression/dot-flag-collision.ly +++ b/input/regression/dot-flag-collision.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Dots move to the right when a collision with the (up)flag happens." } diff --git a/input/regression/dot-rest-beam-trigger.ly b/input/regression/dot-rest-beam-trigger.ly index cae9b796a6..51822ad38e 100644 --- a/input/regression/dot-rest-beam-trigger.ly +++ b/input/regression/dot-rest-beam-trigger.ly @@ -6,7 +6,7 @@ } -\version "2.12.0" +\version "2.14.0" \new Staff \relative c'' { << diff --git a/input/regression/dot-rest-horizontal-spacing.ly b/input/regression/dot-rest-horizontal-spacing.ly new file mode 100644 index 0000000000..ebb0bb60c5 --- /dev/null +++ b/input/regression/dot-rest-horizontal-spacing.ly @@ -0,0 +1,8 @@ +\version "2.14.0" + +\header { + texidoc = "The dots on a dotted rest are correctly accounted for +in horizontal spacing." +} + +{ r16. cis'' } diff --git a/input/regression/dot-up-voice-collision.ly b/input/regression/dot-up-voice-collision.ly index a18dac6a32..72eb56cc59 100644 --- a/input/regression/dot-up-voice-collision.ly +++ b/input/regression/dot-up-voice-collision.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/dots.ly b/input/regression/dots.ly index a82d7f4d1e..204703ef87 100644 --- a/input/regression/dots.ly +++ b/input/regression/dots.ly @@ -1,4 +1,4 @@ -\version "2.12.0" \header{ +\version "2.14.0" \header{ texidoc=" Both noteheads and rests can have dots. diff --git a/input/regression/double-repeat-default-volta.ly b/input/regression/double-repeat-default-volta.ly index d1a8086c47..985498fb06 100644 --- a/input/regression/double-repeat-default-volta.ly +++ b/input/regression/double-repeat-default-volta.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "For volte, the style of double repeats can be set diff --git a/input/regression/double-repeat.ly b/input/regression/double-repeat.ly index 825dfd84cf..2bb21245f5 100644 --- a/input/regression/double-repeat.ly +++ b/input/regression/double-repeat.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Three types of double repeat bar line are supported." diff --git a/input/regression/drums.ly b/input/regression/drums.ly index ddc05e4d5a..517930db87 100644 --- a/input/regression/drums.ly +++ b/input/regression/drums.ly @@ -7,7 +7,7 @@ } -\version "2.12.0" +\version "2.14.0" drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh \repeat "unfold" 5 {hhc8 hho hhc8 hh16 hh} hhc4 r4 r2 } drl = \drummode {\repeat "unfold" 3 {bd4 sn8 bd bd4 << bd ss >> } bd8 tommh tommh bd toml toml bd tomfh16 tomfh } @@ -19,7 +19,7 @@ timb = \drummode { \repeat "unfold" 2 {timh4 ssh timl8 ssh r timh r4 ssh8 timl r \new DrumStaff \with { drumStyleTable = #timbales-style \override StaffSymbol #'line-count = #2 - \override BarLine #'bar-size = #2 + \override BarLine #'bar-extent = #'(-1 . 1) } << \set Staff.instrumentName = "timbales" \timb diff --git a/input/regression/duration-identifier-compressed.ly b/input/regression/duration-identifier-compressed.ly new file mode 100644 index 0000000000..356f6ff048 --- /dev/null +++ b/input/regression/duration-identifier-compressed.ly @@ -0,0 +1,15 @@ +\version "2.14.0" + +\header { + texidoc = "The compression factor of a duration identifier is +correctly accounted for by the parser." +} + +% looks like a whole note, has duration of half note +wholeHalved = #(ly:make-duration 0 0 1 2) + + +\relative c' { + c\wholeHalved c | + c\wholeHalved. c4 | +} diff --git a/input/regression/dynamics-alignment-breaker.ly b/input/regression/dynamics-alignment-breaker.ly new file mode 100644 index 0000000000..1a4c1812b4 --- /dev/null +++ b/input/regression/dynamics-alignment-breaker.ly @@ -0,0 +1,21 @@ +\version "2.14.0" + +\header { + texidoc = "Hairpins, DynamicTextSpanners and dynamics can be +positioned independently using @code{\\breakDynamicSpan}, which +causes the alignment spanner to end prematurely. +" +} + +\relative c' { + c1^\< + \dimTextDim + c1_\> + f,1\p + + c'1^\< + \breakDynamicSpan + c1_\> + \breakDynamicSpan + f,1\p +} diff --git a/input/regression/dynamics-alignment-no-line.ly b/input/regression/dynamics-alignment-no-line.ly new file mode 100644 index 0000000000..03a26d4b46 --- /dev/null +++ b/input/regression/dynamics-alignment-no-line.ly @@ -0,0 +1,16 @@ +\version "2.14.0" + +\header { + texidoc = "If the line for a @code{DynamicTextSpanner} is hidden, the +alignment spanner for dynamics is ended early. This allows consecutive +dynamics to be unlinked." +} + +\relative g' { + g4\p\cresc g g g + g,1\f + + \override DynamicTextSpanner #'style = #'none + g'4\p\cresc g g g + g,1\f +} diff --git a/input/regression/dynamics-broken-hairpin.ly b/input/regression/dynamics-broken-hairpin.ly index d4dde92492..83b9473569 100644 --- a/input/regression/dynamics-broken-hairpin.ly +++ b/input/regression/dynamics-broken-hairpin.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = "Broken crescendi should be open on one side." } diff --git a/input/regression/dynamics-context-textspan.ly b/input/regression/dynamics-context-textspan.ly new file mode 100644 index 0000000000..1b7faf0716 --- /dev/null +++ b/input/regression/dynamics-context-textspan.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + texidoc = "Text spanners work in the @code{Dynamics} context." +} + +<< + \new Staff \relative c' { + c1 | c + } + \new Dynamics { + \override TextSpanner #'(bound-details left text) = #"rit." + s1\startTextSpan + s1\stopTextSpan + } + \new Staff \relative c' { + c1 | c + } +>> diff --git a/input/regression/dynamics-custom-text-spanner-postfix.ly b/input/regression/dynamics-custom-text-spanner-postfix.ly new file mode 100644 index 0000000000..cb2a63e038 --- /dev/null +++ b/input/regression/dynamics-custom-text-spanner-postfix.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header { +texidoc = "Postfix functions for custom crescendo text spanners. The spanners +should start on the first note of the measure. One has to use -\mycresc, +otherwise the spanner start will rather be assigned to the next note." +} + +% Two functions for (de)crescendo spanners where you can explicitly give the +% spanner text. +mycresc = #(define-music-function (parser location mymarkup) (string?) + (make-music 'CrescendoEvent 'span-direction START + 'span-type 'text 'span-text mymarkup)) +mydecresc = #(define-music-function (parser location mymarkup) (string?) + (make-music 'DecrescendoEvent 'span-direction START + 'span-type 'text 'span-text mymarkup)) + +\relative c' { + c4-\mycresc "custom cresc" c4 c4 c4 | + c4 c4 c4 c4 | + c4-\mydecresc "custom decresc" c4 c4 c4 | + c4 c4\! c4 c4 +} + + + diff --git a/input/regression/dynamics-glyphs.ly b/input/regression/dynamics-glyphs.ly index 6a58b087de..7193ab1740 100644 --- a/input/regression/dynamics-glyphs.ly +++ b/input/regression/dynamics-glyphs.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header {texidoc = "Dynamic letters are kerned, and their weight matches that of the hairpin signs. The dynamic scripts should be diff --git a/input/regression/dynamics-hairpin-length.ly b/input/regression/dynamics-hairpin-length.ly index 30dd6d78f3..822dd773f7 100644 --- a/input/regression/dynamics-hairpin-length.ly +++ b/input/regression/dynamics-hairpin-length.ly @@ -6,7 +6,7 @@ respectively." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/dynamics-line.ly b/input/regression/dynamics-line.ly index e263d925c5..dc22d33a30 100644 --- a/input/regression/dynamics-line.ly +++ b/input/regression/dynamics-line.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Dynamics appear below or above the staff. If multiple dynamics are linked with (de)crescendi, they should be on the same diff --git a/input/regression/dynamics-rest-positioning.ly b/input/regression/dynamics-rest-positioning.ly new file mode 100644 index 0000000000..c0f87345bb --- /dev/null +++ b/input/regression/dynamics-rest-positioning.ly @@ -0,0 +1,11 @@ +\version "2.14.0" + +\header { + texidoc = "Text dynamics are positioned correctly on rests, i.e., +centered on the parent object." +} + +\relative c'' { + g2\p r\p + g4\f s r4\f s +} diff --git a/input/regression/dynamics-text-left-text-alignment.ly b/input/regression/dynamics-text-left-text-alignment.ly new file mode 100644 index 0000000000..544fa6c65d --- /dev/null +++ b/input/regression/dynamics-text-left-text-alignment.ly @@ -0,0 +1,13 @@ +\version "2.14.0" +\header { + texidoc = "The left text of a @code{DynamicTextSpanner} is +left-aligned to its anchor note. +" +} + +\relative c' { + \crescTextCresc + \dimTextDim + c4\< c c c\! + c4\> c c c\! +} diff --git a/input/regression/dynamics-text-right-padding.ly b/input/regression/dynamics-text-right-padding.ly new file mode 100644 index 0000000000..c4f4ca8a32 --- /dev/null +++ b/input/regression/dynamics-text-right-padding.ly @@ -0,0 +1,12 @@ +\version "2.14.0" +\header { + texidoc = "The space between an absolute dynamic and a dynamic text +span can be changed using @code{'right-padding}. +" +} + +\relative c' { + \dimTextDim + \once \override DynamicText #'right-padding = #0 + c4\fff\> c c c\! +} diff --git a/input/regression/dynamics-text-spanner-abs-dynamic.ly b/input/regression/dynamics-text-spanner-abs-dynamic.ly index 9136370790..5f493c9867 100644 --- a/input/regression/dynamics-text-spanner-abs-dynamic.ly +++ b/input/regression/dynamics-text-spanner-abs-dynamic.ly @@ -7,7 +7,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } \relative c' { diff --git a/input/regression/dynamics-text-spanner-padding.ly b/input/regression/dynamics-text-spanner-padding.ly index 1afe18bbc6..60237bebfb 100644 --- a/input/regression/dynamics-text-spanner-padding.ly +++ b/input/regression/dynamics-text-spanner-padding.ly @@ -4,7 +4,7 @@ from the notes. " } -\version "2.12.0" +\version "2.14.0" \layout { indent = 0.0\mm diff --git a/input/regression/dynamics-text-spanner-postfix.ly b/input/regression/dynamics-text-spanner-postfix.ly new file mode 100644 index 0000000000..75e6e1aa1f --- /dev/null +++ b/input/regression/dynamics-text-spanner-postfix.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { +texidoc = "The \cresc, \dim and \decresc spanners are now postfix operators +and produce one text spanner. Defining custom spanners is also easy. +Hairpin and text crescendi can be easily mixed. \< and \> produce +hairpins by default, \cresc etc. produce text spanners by default." +} + +% Some sample text dynamic spanners, to be used as postfix operators +crpoco = #(make-music 'CrescendoEvent 'span-direction START + 'span-type 'text 'span-text "cresc. poco a poco") + +\relative c' { + c4\cresc d4 e4 f4 | + g4 a4\! b4\crpoco c4 | + c4 d4 e4 f4 | + g4 a4\! b4\< c4 | + g4\dim a4 b4\decresc c4\! +} diff --git a/input/regression/dynamics-unbound-hairpin.ly b/input/regression/dynamics-unbound-hairpin.ly index 9b2eed583b..efdb0eb54f 100644 --- a/input/regression/dynamics-unbound-hairpin.ly +++ b/input/regression/dynamics-unbound-hairpin.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Crescendi may start off-notes, however, they should not collapse into flat lines." diff --git a/input/regression/easy-notation-accidentals.ly b/input/regression/easy-notation-accidentals.ly new file mode 100644 index 0000000000..310cd62576 --- /dev/null +++ b/input/regression/easy-notation-accidentals.ly @@ -0,0 +1,13 @@ +\version "2.14.0" + +\header { + texidoc = " +Accidentals are positioned correctly when using Easy notation. +" +} + +\relative c' { + \easyHeadsOn + c4 cis cisis2 + e4 ees eeses2 +} diff --git a/input/regression/easy-notation.ly b/input/regression/easy-notation.ly index 908e54f0e0..a147cca20d 100644 --- a/input/regression/easy-notation.ly +++ b/input/regression/easy-notation.ly @@ -1,11 +1,11 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " Easy-notation (or Ez-notation) prints names in note heads. You also get ledger lines, of course." } -\relative { +\relative c' { \easyHeadsOn f1 e f2 e diff --git a/input/regression/episema.ly b/input/regression/episema.ly new file mode 100644 index 0000000000..57691fada9 --- /dev/null +++ b/input/regression/episema.ly @@ -0,0 +1,16 @@ +\version "2.14.0" + +\header { + texidoc = "An episema can be typeset over a single neume or a +melisma. Its position is quantized between staff lines." +} + +#(set-global-staff-size 26) +\include "gregorian.ly" + +\new VaticanaVoice { + \revert Score.SpacingSpanner #'packed-spacing + a\episemInitium\episemFinis + \[ a\episemInitium \pes b \flexa a\episemFinis \] + \[ a\episemInitium \pes b \flexa a b\episemFinis \flexa a \] +} diff --git a/input/regression/fermata-rest-position.ly b/input/regression/fermata-rest-position.ly index dd49b82a55..4a7e3c6598 100644 --- a/input/regression/fermata-rest-position.ly +++ b/input/regression/fermata-rest-position.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " Fermatas over multimeasure rests are positioned as over normal rests. diff --git a/input/regression/figured-bass-alteration.ly b/input/regression/figured-bass-alteration.ly index c2bfb93c3f..75c7d048de 100644 --- a/input/regression/figured-bass-alteration.ly +++ b/input/regression/figured-bass-alteration.ly @@ -3,7 +3,7 @@ texidoc = "Bass figures can carry alterations." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right= ##t diff --git a/input/regression/figured-bass-continuation-center.ly b/input/regression/figured-bass-continuation-center.ly index d354ff691a..27fe204c74 100644 --- a/input/regression/figured-bass-continuation-center.ly +++ b/input/regression/figured-bass-continuation-center.ly @@ -6,7 +6,7 @@ true." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/figured-bass-continuation-end-position.ly b/input/regression/figured-bass-continuation-end-position.ly new file mode 100644 index 0000000000..4901303df5 --- /dev/null +++ b/input/regression/figured-bass-continuation-end-position.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + texidoc = "Figured bass extender for figures of different width (e.g. with +alteration or two-digit figures) should still stop at the same position." + +} + +\figures { + \set useBassFigureExtenders = ##t + \set figuredBassAlterationDirection = #RIGHT + <6 5+ 3>4. + <6 5+ 2>4. + r4 + <12 5>4. + <12 5>4. + r4 +} \ No newline at end of file diff --git a/input/regression/figured-bass-continuation-forbid.ly b/input/regression/figured-bass-continuation-forbid.ly index d369a07e83..b4599ee67b 100644 --- a/input/regression/figured-bass-continuation-forbid.ly +++ b/input/regression/figured-bass-continuation-forbid.ly @@ -4,7 +4,7 @@ may be forbidden. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } \figures { diff --git a/input/regression/figured-bass-continuation-modifiers.ly b/input/regression/figured-bass-continuation-modifiers.ly index b58615c8d5..638b550451 100644 --- a/input/regression/figured-bass-continuation-modifiers.ly +++ b/input/regression/figured-bass-continuation-modifiers.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" << \relative \new Voice { diff --git a/input/regression/figured-bass-continuation.ly b/input/regression/figured-bass-continuation.ly index e939a6f07c..5bec65ddbf 100644 --- a/input/regression/figured-bass-continuation.ly +++ b/input/regression/figured-bass-continuation.ly @@ -5,7 +5,7 @@ figures. They are switched on with @code{useBassFigureExtenders}" } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/figured-bass-durations.ly b/input/regression/figured-bass-durations.ly new file mode 100644 index 0000000000..54ed642422 --- /dev/null +++ b/input/regression/figured-bass-durations.ly @@ -0,0 +1,29 @@ +\version "2.14.0" + +\header { + + texidoc = "Bass figures and extenders shall also work correctly if the +figure has a different duration than the bass note. In particular, if a +timestep does not have a new figure (because the old figure still goes on), +extenders should be drawn and not be reset. +" + +} + + +\paper { ragged-right = ##t } + + +<< + \context Voice << + { + \clef bass + c4 c c c | c c c c | + } + \figuremode { + <3>2 <3> \set Staff.useBassFigureExtenders = ##t <3> \set Staff.useBassFigureExtenders = ##f <3> + } + >> +>> + + diff --git a/input/regression/figured-bass-extenders-markup.ly b/input/regression/figured-bass-extenders-markup.ly new file mode 100644 index 0000000000..720dfaf9b6 --- /dev/null +++ b/input/regression/figured-bass-extenders-markup.ly @@ -0,0 +1,27 @@ +\version "2.14.0" + +\header { + + texidoc = "When using extender lines in FiguredBass, markup objects should +be treated like ordinary figures and work correctly with extender lines. + +Extenders should only be used if the markup is really identical." + +} + + +\paper { ragged-right = ##t } + +<< + \context Voice { + c'4 c' c' c' + c' c' c' c' + } + \figures { + \bassFigureExtendersOn + <6>4 <\markup{"Text"}> s <\markup{\draw-circle #0.7 #0.1 ##f }> | + <\markup{\draw-circle #0.7 #0.1 ##f } 5> + <\markup{\draw-circle #0.5 #0.1 ##t }> + <\markup{\draw-circle #0.7 #0.1 ##t }> <6> + } +>> diff --git a/input/regression/figured-bass-ignore-rest.ly b/input/regression/figured-bass-ignore-rest.ly new file mode 100644 index 0000000000..7ee4d4c8f0 --- /dev/null +++ b/input/regression/figured-bass-ignore-rest.ly @@ -0,0 +1,37 @@ +\version "2.14.0" + +\header { + + texidoc = "When figures appear inside a voice, @code{ignoreFiguredBassRest} + causes all figures on rests to be discarded and all spanners ended. + If set to @code{##f}, figures on rests are printed. +" + +} + + +\paper { ragged-right = ##t } + + +<< + \new Voice << + { + \clef bass + c4 r c r | + c4 r c r | + c4 r c r | + } + \figuremode { + % Default: + <3>4 <3> <3> \set Staff.useBassFigureExtenders = ##t <3> \set Staff.useBassFigureExtenders = ##f | + % ignore figures on rests, regardless of extenders + \set Staff.ignoreFiguredBassRest = ##t + <3>4 <3> <3> \set Staff.useBassFigureExtenders = ##t <3> \set Staff.useBassFigureExtenders = ##f | + % print figures on rests, regardless of extenders + \set Staff.ignoreFiguredBassRest = ##f + <3>4 <3> <3> \set Staff.useBassFigureExtenders = ##t <3> \set Staff.useBassFigureExtenders = ##f | + } + >> +>> + + diff --git a/input/regression/figured-bass-implicit.ly b/input/regression/figured-bass-implicit.ly index fc4823aa17..4c3876a265 100644 --- a/input/regression/figured-bass-implicit.ly +++ b/input/regression/figured-bass-implicit.ly @@ -6,7 +6,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/figured-bass-slashed-numbers.ly b/input/regression/figured-bass-slashed-numbers.ly index 0289c3e9a2..16c55e5fdd 100644 --- a/input/regression/figured-bass-slashed-numbers.ly +++ b/input/regression/figured-bass-slashed-numbers.ly @@ -1,4 +1,10 @@ -\version "2.12.0" +\version "2.14.0" + +\header { +texidoc = "Figured bass supports numbers with slashes through +them. +" +} bassfigures = \figuremode { <0/ 1/ 2/> <3/ 4/ 5/> <6/ 7/ 8/> <9/ 10/ 11/> <12/ 13/ 100/> diff --git a/input/regression/figured-bass-staff.ly b/input/regression/figured-bass-staff.ly index 02dd09f080..788f8c3f03 100644 --- a/input/regression/figured-bass-staff.ly +++ b/input/regression/figured-bass-staff.ly @@ -3,7 +3,7 @@ ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/figured-bass.ly b/input/regression/figured-bass.ly index cbcb40c96f..f480aa4168 100644 --- a/input/regression/figured-bass.ly +++ b/input/regression/figured-bass.ly @@ -1,11 +1,11 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " Figured bass is created by the FiguredBass context which responds to figured bass events and rest events. You must enter these -using the special @code{\figuremode @{ @}} mode, which allows you to +using the special @code{\\figuremode @{ @}} mode, which allows you to type numbers, like @code{<4 6+>} and add slashes, backslashes and pluses. You can also enter markup strings. The vertical alignment may also be tuned. diff --git a/input/regression/fill-line-test.ly b/input/regression/fill-line-test.ly index beb9ce9bb7..341082f693 100644 --- a/input/regression/fill-line-test.ly +++ b/input/regression/fill-line-test.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/filter-translators.ly b/input/regression/filter-translators.ly new file mode 100644 index 0000000000..cd68546602 --- /dev/null +++ b/input/regression/filter-translators.ly @@ -0,0 +1,21 @@ +\version "2.14.0" + +\header { + texidoc = "Context modification via @code{\\with} filters translators +of the wrong type: performers for an @code{Engraver_group} and engravers +for a @code{Performer_group}. In this test, the +@code{Instrument_name_engraver} is added to a @code{StaffGroup}, but +does not affect midi output, since it is filtered out." +} + +\score { + \new StaffGroup \with { + \consists "Instrument_name_engraver" + instrumentName = #"StaffGroup" + } + { + a'1 + } + \layout { } + \midi { } +} diff --git a/input/regression/finger-chords-accidental.ly b/input/regression/finger-chords-accidental.ly index 6d6310ec07..760cd2ba27 100644 --- a/input/regression/finger-chords-accidental.ly +++ b/input/regression/finger-chords-accidental.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Scripts left of a chord avoid accidentals." @@ -12,5 +12,5 @@ r4 \set fingeringOrientations = #'(left) - + } diff --git a/input/regression/finger-chords-dot.ly b/input/regression/finger-chords-dot.ly index 93a64de295..987f5ab858 100644 --- a/input/regression/finger-chords-dot.ly +++ b/input/regression/finger-chords-dot.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "Scripts right of a chord avoid dots." diff --git a/input/regression/finger-chords-order.ly b/input/regression/finger-chords-order.ly index a216d3d9d9..8d54a8a9cf 100644 --- a/input/regression/finger-chords-order.ly +++ b/input/regression/finger-chords-order.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { @@ -9,7 +9,7 @@ is independent of up/down direction." \paper { ragged-right = ##t } -\relative { +\relative c' { %% input order is not 1 2 3 , output is. 4 diff --git a/input/regression/finger-chords.ly b/input/regression/finger-chords.ly index abb0fb2783..233a628b54 100644 --- a/input/regression/finger-chords.ly +++ b/input/regression/finger-chords.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "It is possible to associate diff --git a/input/regression/fingering-cross-staff.ly b/input/regression/fingering-cross-staff.ly index 7a2a310e41..9d38a417c6 100644 --- a/input/regression/fingering-cross-staff.ly +++ b/input/regression/fingering-cross-staff.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Fingerings work correctly with cross-staff beams." diff --git a/input/regression/fingering.ly b/input/regression/fingering.ly index 383ebe060b..219831a676 100644 --- a/input/regression/fingering.ly +++ b/input/regression/fingering.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Automatic fingering tries to put fingering instructions diff --git a/input/regression/flags-default.ly b/input/regression/flags-default.ly index ebcfc115af..c74e64e767 100644 --- a/input/regression/flags-default.ly +++ b/input/regression/flags-default.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" #(set-global-staff-size 17) \header { diff --git a/input/regression/flags-in-scheme.ly b/input/regression/flags-in-scheme.ly index 1ee3d1c3cc..b26f9b71d6 100644 --- a/input/regression/flags-in-scheme.ly +++ b/input/regression/flags-in-scheme.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The 'flag property of the Stem grob can be set to a custom diff --git a/input/regression/flags-straight-stockhausen-boulez.ly b/input/regression/flags-straight-stockhausen-boulez.ly index 49008ee3b1..7a13d64bae 100644 --- a/input/regression/flags-straight-stockhausen-boulez.ly +++ b/input/regression/flags-straight-stockhausen-boulez.ly @@ -1,4 +1,11 @@ -\version "2.12.0" +\version "2.14.0" + +\header { +texidoc = "Flags can be drawn straight in the style used by +Stockhausen and Boulez. +" +} + stemLength = #(define-music-function (parser location length) (number?) "Set the length of the next stem explicitly." @@ -27,4 +34,4 @@ stemLength = #(define-music-function (parser location length) (number?) \bar"|.|" \stemLength #1.25 16 \stemLength #1.3 8 -} \ No newline at end of file +} diff --git a/input/regression/flags-straight.ly b/input/regression/flags-straight.ly index 171902ba6a..918985e6ef 100644 --- a/input/regression/flags-straight.ly +++ b/input/regression/flags-straight.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Straight flag styles." diff --git a/input/regression/follow-voice-break.ly b/input/regression/follow-voice-break.ly index 5c7b10a017..45cc987c7b 100644 --- a/input/regression/follow-voice-break.ly +++ b/input/regression/follow-voice-break.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = " The line-spanners connects to the Y position of the note on the next line. diff --git a/input/regression/follow-voice-consecutive.ly b/input/regression/follow-voice-consecutive.ly index 2a52080bbe..79a3cdd43e 100644 --- a/input/regression/follow-voice-consecutive.ly +++ b/input/regression/follow-voice-consecutive.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc= "The voice follower is not confused when set for consecutive diff --git a/input/regression/font-bogus-ligature.ly b/input/regression/font-bogus-ligature.ly index b5abe6ccb5..37e83eb2d8 100644 --- a/input/regression/font-bogus-ligature.ly +++ b/input/regression/font-bogus-ligature.ly @@ -5,12 +5,21 @@ This may happen with incorrect font versions. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##T } -{ - c4^"November WHITMAN" +\score{ + { + c4^"November WHITMAN" + } + + \layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##f + } + } } diff --git a/input/regression/font-family-override.ly b/input/regression/font-family-override.ly index 39c9b6849a..e077176761 100644 --- a/input/regression/font-family-override.ly +++ b/input/regression/font-family-override.ly @@ -5,10 +5,10 @@ } -\version "2.12.0" +\version "2.14.0" -\paper { - % change for other default global staff size. +\paper { + % change for other default global staff size. myStaffSize = #20 @@ -18,11 +18,11 @@ lilypond -dshow-available-fonts blabla - to show all fonts available in the process log. - + to show all fonts available in the process log. + %} - + #(define fonts (make-pango-font-tree "Times New Roman" "Nimbus Sans" @@ -34,19 +34,29 @@ (/ myStaffSize 20))) } -\relative { +\score { + \relative c'' { - c'^\markup { roman: foo \bold bla \italic bar \italic \bold baz } - c'_\markup { - \override #'(font-family . sans) - { - sans: foo \bold bla \italic bar \italic \bold baz + c^\markup { roman: foo \bold bla \italic bar \italic \bold baz } + c'_\markup { + \override #'(font-family . sans) + { + sans: foo \bold bla \italic bar \italic \bold baz + } + } + c'^\markup { + \override #'(font-family . typewriter) + { + mono: foo \bold bla \italic bar \italic \bold baz + } } } - c'^\markup { - \override #'(font-family . typewriter) - { - mono: foo \bold bla \italic bar \italic \bold baz + + \layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##f } } -} + +} diff --git a/input/regression/font-kern.ly b/input/regression/font-kern.ly index 0e9f887721..f50a771dfe 100644 --- a/input/regression/font-kern.ly +++ b/input/regression/font-kern.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Text set in TrueType Fonts that contain kerning tables, are kerned. " diff --git a/input/regression/font-name-font-size.ly b/input/regression/font-name-font-size.ly new file mode 100644 index 0000000000..429bf99473 --- /dev/null +++ b/input/regression/font-name-font-size.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { + texidoc = " +Setting the @code{font-name} property does not change the font +size. The two strings below should be concatenated and have the +same font size. + +Note that `the same font size' is related to what lilypond reports +on the console if in verbose mode (3.865234375 units for this +regression test). If you actually look at the two fonts the +optical size differs enormously. +" +} + +\markup \concat { + "pfsm" + \override #'(font-name . "Emmentaler-20") + "pfsm" +} diff --git a/input/regression/font-name.ly b/input/regression/font-name.ly index 062f2f7549..c4d2fc765e 100644 --- a/input/regression/font-name.ly +++ b/input/regression/font-name.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { @@ -13,6 +13,7 @@ without size specification." { + \override Score.PaperColumn #'keep-inside-line = ##f \override Staff.TimeSignature #'font-name = #"Times New Roman" \time 3/4 \set Score.skipBars = ##t diff --git a/input/regression/font-postscript.ly b/input/regression/font-postscript.ly index 71517886c2..0fa6b4f707 100644 --- a/input/regression/font-postscript.ly +++ b/input/regression/font-postscript.ly @@ -4,7 +4,7 @@ fonts. The file @file{font.scm} shows how to define the scheme-function @code{make-century-schoolbook-tree}." } -\version "2.12.0" +\version "2.14.0" \paper { #(define text-font-defaults diff --git a/input/regression/footnote-break-visibility.ly b/input/regression/footnote-break-visibility.ly new file mode 100644 index 0000000000..23e9035a71 --- /dev/null +++ b/input/regression/footnote-break-visibility.ly @@ -0,0 +1,25 @@ +\version "2.14.0" +\header { + texidoc = "With grobs that have break visibility, footnotes will +automatically print to the first line of the break. This behavior +can be overrided." +} + +#(set-default-paper-size "a6") + +\book { + +\new Staff \with { \consists "Footnote_engraver" } +{ + \relative c' { + c1 + \footnoteGrob #'TimeSignature #'(0 . 2) "foo" "bar" + \time 3/4 + \break \pageBreak + c2. + \once \override Staff . FootnoteItem #'break-visibility = ##(#f #f #t) + \footnoteGrob #'TimeSignature #'(0 . 2) "foo" "bar" + \time 4/4 + \break \pageBreak + c1 \bar "|." +}}} diff --git a/input/regression/footnote-footer-padding.ly b/input/regression/footnote-footer-padding.ly new file mode 100644 index 0000000000..ce37e71426 --- /dev/null +++ b/input/regression/footnote-footer-padding.ly @@ -0,0 +1,32 @@ +\version "2.14.0" +\header { + texidoc = "The padding between a footnote and the footer can be tweaked." +} + +#(set-default-paper-size "a6") + +\paper { + footnote-footer-padding = 1\in +} + +\book { + + \relative c' { + \footnoteGrob #'NoteHead + #'(1 . -1) + \markup { \tiny 1 } + \markup { 1. Tiny space below. } + e1 + + \footnoteGrob #'NoteHead + #'(1 . -1) + \markup { \tiny 2 } + \markup { 2. Tiny space below. } + e1 + + \footnoteGrob #'NoteHead + #'(1 . -1) + \markup { \tiny 3 } + \markup { 3. Big space below. } + e1 +}} diff --git a/input/regression/footnote-spanner.ly b/input/regression/footnote-spanner.ly new file mode 100644 index 0000000000..6efca6671b --- /dev/null +++ b/input/regression/footnote-spanner.ly @@ -0,0 +1,60 @@ +\version "2.14.0" +\header { + texidoc = "Footnotes are annotated at the correct place, and the +annotation goes to the correct page." +} + +#(set-default-paper-size "a6") + +\paper { ragged-last-bottom = ##f } + +\book { + +\relative c'' { +\footnoteGrob #'Hairpin + #'(0.5 . 0.5) + \markup { \tiny "1." } + \markup { 1. \justify { Goes to the first broken spanner. } } +b4\< c d a +b c d a +b c d a +b c d a +b c d a +b c d a \break \pageBreak +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a\! + +\once \override FootnoteSpanner #'spanner-placement = #RIGHT +\footnoteGrob #'Hairpin + #'(0.5 . 0.5) + \markup { \tiny "2." } + \markup { 2. \justify { Goes to the last broken spanner. } } +b4\< c d a +b c d a +b c d a +b c d a +b c d a +b c d a \break \pageBreak +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d a +b c d\! +}} diff --git a/input/regression/footnote.ly b/input/regression/footnote.ly new file mode 100644 index 0000000000..f13347d31a --- /dev/null +++ b/input/regression/footnote.ly @@ -0,0 +1,33 @@ +\version "2.14.0" +\header { + texidoc = "Lilypond does footnotes." +} + +#(set-default-paper-size "a6") +\book { + +\markup { + a \footnote \concat { b \super 1 } "1. c" + \footnote \concat { d \super 2 } "2. e" + \footnote \line { f \super 3 } "3. g" +} + +\markup { h i } + +\relative c' { +\footnoteGrob #'NoteHead #'(1 . -1) \markup { \tiny 4 } \markup { 4. j } +a b c d } + +\pageBreak + +\markup { k \footnote \concat { l \super 5 } \line { 5. m } } + +\relative c' { a1 } + +\relative c' { + d4 e + < f a-\footnote #'(1 . -1) \markup { \tiny 6 } \markup { 6. n } c > + \footnoteGrob #'Beam #'(1 . 1) \markup { \tiny 7 } \markup { 7. o } + \footnoteGrob #'Hairpin #'(1 . 1) \markup { \tiny 8 } \markup { 8. p } + a8\< [ b c d\f ] r2. | +}} diff --git a/input/regression/fret-board-alignment.ly b/input/regression/fret-board-alignment.ly index cc347c098b..deecc69232 100644 --- a/input/regression/fret-board-alignment.ly +++ b/input/regression/fret-board-alignment.ly @@ -5,7 +5,7 @@ at the fret-zero, string 1 intersection." } -\version "2.12.2" +\version "2.14.0" \include "predefined-guitar-fretboards.ly" diff --git a/input/regression/fret-boards.ly b/input/regression/fret-boards.ly index c99f27d474..c822bd6a6e 100644 --- a/input/regression/fret-boards.ly +++ b/input/regression/fret-boards.ly @@ -6,7 +6,7 @@ best when one string number is indicated in advance " } -\version "2.12.0" +\version "2.14.0" foo = \relative c { _\markup { diff --git a/input/regression/fret-diagram-origins.ly b/input/regression/fret-diagram-origins.ly index 4042bf5ddd..b8d0f135a0 100644 --- a/input/regression/fret-diagram-origins.ly +++ b/input/regression/fret-diagram-origins.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" diff --git a/input/regression/fret-diagrams-capo.ly b/input/regression/fret-diagrams-capo.ly index 82fb21e92b..81c867a003 100644 --- a/input/regression/fret-diagrams-capo.ly +++ b/input/regression/fret-diagrams-capo.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" diff --git a/input/regression/fret-diagrams-dots.ly b/input/regression/fret-diagrams-dots.ly index a38d0b2218..1321ba6ad8 100644 --- a/input/regression/fret-diagrams-dots.ly +++ b/input/regression/fret-diagrams-dots.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" diff --git a/input/regression/fret-diagrams-fingering.ly b/input/regression/fret-diagrams-fingering.ly index 5833e0b998..f8c19a72ba 100644 --- a/input/regression/fret-diagrams-fingering.ly +++ b/input/regression/fret-diagrams-fingering.ly @@ -1,10 +1,10 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" Finger labels can be added, either in dots or below strings. -Dot color can be changed, and fingering label font size -can be adjusted. +Dot color can be changed globally or on a per-dot basis, +and fingering label font size can be adjusted. " } @@ -17,6 +17,8 @@ can be adjusted. c1 | c1 | c1 | + c1 | + c1 | c1 } @@ -81,7 +83,28 @@ can be adjusted. (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3))} - + %% dot color inversion, white on black + \once \override TextScript #'fret-diagram-details + #'dot-color = #'black + c' ^\markup { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1 inverted) + (place-fret 4 5 2) + (place-fret 3 5 3 inverted) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3))} + %% dot color inversion, black on white + \once \override TextScript #'fret-diagram-details + #'dot-color = #'white + c' ^\markup { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1 inverted) + (place-fret 4 5 2) + (place-fret 3 5 3 inverted) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3))} } >> diff --git a/input/regression/fret-diagrams-fret-label.ly b/input/regression/fret-diagrams-fret-label.ly index e45755c8f2..cb840ba8cf 100644 --- a/input/regression/fret-diagrams-fret-label.ly +++ b/input/regression/fret-diagrams-fret-label.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" @@ -12,6 +12,7 @@ size, and number type. << \chords { + c1 | c1 | c1 | c1 @@ -61,6 +62,21 @@ size, and number type. (place-fret 1 3 1) (barre 5 1 3))} + %% C major for guitar, verbose style + \revert TextScript #'fret-diagram-details #'label-dir + \once \override TextScript #'fret-diagram-details + #'number-type = #'custom + \once \override TextScript #'fret-diagram-details + #'fret-label-custom-format = #"~d°" + c' ^\markup { + \fret-diagram-verbose #'((mute 6) + (place-fret 5 3 1) + (place-fret 4 5 2) + (place-fret 3 5 3) + (place-fret 2 5 4) + (place-fret 1 3 1) + (barre 5 1 3))} + } >> diff --git a/input/regression/fret-diagrams-landscape.ly b/input/regression/fret-diagrams-landscape.ly index 37ca35e0ac..5d1fd05785 100644 --- a/input/regression/fret-diagrams-landscape.ly +++ b/input/regression/fret-diagrams-landscape.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" diff --git a/input/regression/fret-diagrams-opposing-landscape.ly b/input/regression/fret-diagrams-opposing-landscape.ly index c3d359c748..15d4c916ed 100644 --- a/input/regression/fret-diagrams-opposing-landscape.ly +++ b/input/regression/fret-diagrams-opposing-landscape.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" diff --git a/input/regression/fret-diagrams-size.ly b/input/regression/fret-diagrams-size.ly new file mode 100644 index 0000000000..e492b5d85a --- /dev/null +++ b/input/regression/fret-diagrams-size.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header { + texidoc=" +Fret diagrams can be scaled using the @code{size} property. +The position and size of first fret label, mute/open signs, fingers, +relative to the diagram grid, shall be the same in all cases. + +" +} + +myFretDiagram = +\markup \fret-diagram-verbose #'((place-fret 6 6 "P") + (place-fret 5 8 2) + (place-fret 4 8 2) + (place-fret 3 7 1) + (place-fret 2 8 3) + (mute 1)) + +\markup \override #'(fret-diagram-details . ((finger-code . below-string))) { + \myFretDiagram + \hspace #4 + \override #'(size . 1.5) \myFretDiagram + \hspace #8 + \override #'(size . 3) \myFretDiagram +} diff --git a/input/regression/fret-diagrams-string-frets.ly b/input/regression/fret-diagrams-string-frets.ly index e4f8ab40b6..97474dedb7 100644 --- a/input/regression/fret-diagrams-string-frets.ly +++ b/input/regression/fret-diagrams-string-frets.ly @@ -1,8 +1,8 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" -Number of frets and number of strings can be changed from the +Number of frets and number of strings can be changed from the defaults. " @@ -25,7 +25,7 @@ defaults. \fret-diagram #"6-x;5-x;4-o;3-2-1;2-3-2;1-2-3;" } | - % A chord for ukelele -- change both string and fret count + % A chord for ukulele -- change both string and fret count a'1 ^\markup { \fret-diagram #"w:4;h:5;4-2-2;3-1-1;2-o;1-o;" } diff --git a/input/regression/fret-diagrams-string-thickness.ly b/input/regression/fret-diagrams-string-thickness.ly index 2a2d2b5928..bfbb323f89 100644 --- a/input/regression/fret-diagrams-string-thickness.ly +++ b/input/regression/fret-diagrams-string-thickness.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" diff --git a/input/regression/fret-diagrams-xo-label.ly b/input/regression/fret-diagrams-xo-label.ly index df97be4c49..c1403b8921 100644 --- a/input/regression/fret-diagrams-xo-label.ly +++ b/input/regression/fret-diagrams-xo-label.ly @@ -1,9 +1,9 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" -The label for the lowest fret can be changed in location, -size, and number type. +The size, spacing, and symbols used to indicate open and muted strings +can be changed. " } @@ -20,24 +20,24 @@ size, and number type. \new Voice { \textLengthOn - %% D major for guitar, terse style + %% D major for guitar, terse style d'1 ^\markup { \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"} - %% D major for guitar, terse style - \once \override TextScript #'fret-diagram-details - #'top-fret-thickness = #5 - \once \override TextScript #'fret-diagram-details + %% D major for guitar, terse style + \once \override TextScript #'fret-diagram-details + #'top-fret-thickness = #5 + \once \override TextScript #'fret-diagram-details #'xo-font-magnification = #0.3 d'1 ^\markup { \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"} - %% D major for guitar, terse style - \override TextScript #'fret-diagram-details - #'mute-string = #"M" - \override TextScript #'fret-diagram-details + %% D major for guitar, terse style + \override TextScript #'fret-diagram-details + #'mute-string = #"M" + \override TextScript #'fret-diagram-details #'open-string = #"*" - \override TextScript #'fret-diagram-details + \override TextScript #'fret-diagram-details #'xo-padding = #0.5 d'1 ^\markup { \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"} diff --git a/input/regression/fretboard-chordchanges.ly b/input/regression/fretboard-chordchanges.ly new file mode 100644 index 0000000000..7ce738cea1 --- /dev/null +++ b/input/regression/fretboard-chordchanges.ly @@ -0,0 +1,21 @@ +\header{ + + texidoc = "FretBoards can be set to display only when the chord changes +or at the beginning of a new line." + +} + + \version "2.14.0" + +myChords = \chordmode { + c1 c1 \break + c1 c1 \break + \set chordChanges = ##t + c1 c1 \break +} + +<< + \new ChordNames { \myChords } + \new FretBoards { \myChords } + \new Staff { \myChords } +>> diff --git a/input/regression/full-measure-rest-fermata.ly b/input/regression/full-measure-rest-fermata.ly new file mode 100644 index 0000000000..f68effa060 --- /dev/null +++ b/input/regression/full-measure-rest-fermata.ly @@ -0,0 +1,25 @@ +\version "2.14.0" + +\header { + texidoc=" +Fermata over full-measure rests should invert when below and +be closer to the staff than other articulations." +} +\layout { + ragged-right = ##t +} +\relative c'' { + R1 + a1^"should be lower" + R1^"should be higher" + \break + R1 + R1^"should be lower" + a1^"should be higher" + \break + a1^"should be above fermata" + R1^\fermataMarkup + \break + a1_"should be below fermata" + R1_\fermataMarkup +} diff --git a/input/regression/general-scheme-bindings.ly b/input/regression/general-scheme-bindings.ly index 27e8c874b1..29db12f184 100644 --- a/input/regression/general-scheme-bindings.ly +++ b/input/regression/general-scheme-bindings.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" %% todo : use macro, to show the statement tested. #(ly:progress "~a\n" (ly:expand-environment "${HOME} $HOME $$ ")) diff --git a/input/regression/generic-output-property.ly b/input/regression/generic-output-property.ly index da8c41ff39..b5b3b26025 100644 --- a/input/regression/generic-output-property.ly +++ b/input/regression/generic-output-property.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/glissando-broken-unkilled.ly b/input/regression/glissando-broken-unkilled.ly new file mode 100644 index 0000000000..8d5fb4b8ed --- /dev/null +++ b/input/regression/glissando-broken-unkilled.ly @@ -0,0 +1,36 @@ +\version "2.14.0" + +\header { + texidoc = "Broken glissandi anticipate the pitch on the next line." +} + +\score { + \relative c' { + \override Glissando #'after-line-breaking = ##t + \override Glissando #'breakable = ##t + c1\glissando + \break + c'1 + \break + c,1\glissando + \break + s2 c'2 + } + \layout { + ragged-right = ##t + } +} + +\score { + \relative c' { + \override Glissando #'after-line-breaking = ##t + \override Glissando #'breakable = ##t + c1\glissando + \break + c'1 + \break + c,1\glissando + \break + s2 c'2 + } +} diff --git a/input/regression/glissando-broken.ly b/input/regression/glissando-broken.ly index 4234a68bb7..9d41d5d878 100644 --- a/input/regression/glissando-broken.ly +++ b/input/regression/glissando-broken.ly @@ -2,7 +2,7 @@ texidoc = "If broken, Glissandi anticipate on the pitch of the next line." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##T } diff --git a/input/regression/glissando-chord-linebreak.ly b/input/regression/glissando-chord-linebreak.ly new file mode 100644 index 0000000000..957bf9da7c --- /dev/null +++ b/input/regression/glissando-chord-linebreak.ly @@ -0,0 +1,27 @@ +\version "2.14.0" + +\header { + + texidoc = " +A glissando between chords should not interfere with line breaks. In +this case, the music should be in two lines and there should be no +warning messages issued. Also, the glissando should be printed. +" + +} + +theNotes = { + 4 + \glissando + d +} + +\score { + \new Staff { + \relative c'' { + \theNotes + \break + \theNotes + } + } +} diff --git a/input/regression/glissando-chord.ly b/input/regression/glissando-chord.ly new file mode 100644 index 0000000000..11d3030a1a --- /dev/null +++ b/input/regression/glissando-chord.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + texidoc = "LilyPond typesets glissandi between chords." +} + +\relative c' { + c1 \glissando g' + c,1 \glissando s1 g' + 1 \glissando + 1 \glissando s1 + \set glissandoMap = #'((0 . 1) (1 . 0)) + 1 \glissando s1 + \set glissandoMap = #'((0 . 0) (0 . 1) (0 . 2)) + c1 \glissando s1 + \set glissandoMap = #'((2 . 0) (1 . 0) (0 . 0)) + 1 \glissando s1 c +} diff --git a/input/regression/glissando-consecutive.ly b/input/regression/glissando-consecutive.ly new file mode 100644 index 0000000000..41f9873f81 --- /dev/null +++ b/input/regression/glissando-consecutive.ly @@ -0,0 +1,13 @@ +\version "2.14.0" +%% This should really be 2.15.0, because the glissando code +%% hasn't been backported -- this is a git-only test at this point + +\header { + + texidoc = "Lilypond prints consecutive glissandi." + +} + +\relative c' { + c1 \glissando d1 \glissando e1 +} diff --git a/input/regression/glissando-index.ly b/input/regression/glissando-index.ly new file mode 100644 index 0000000000..3f3d662762 --- /dev/null +++ b/input/regression/glissando-index.ly @@ -0,0 +1,14 @@ +% FIXME: this is a fake version number to allow git master +% to compile. See discussion on lilypond-devel. +\version "2.14.0" + +\header { + texidoc = "Individual glissandi within a chord can be tweaked." +} + +\relative c' { + \once \override Voice . Glissando #'style = + #(lambda (grob) + (if (eq? 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default)) + 1 \glissando s1 +} diff --git a/input/regression/glissando-no-break.ly b/input/regression/glissando-no-break.ly index 2d22b57359..0ce1613e18 100644 --- a/input/regression/glissando-no-break.ly +++ b/input/regression/glissando-no-break.ly @@ -1,10 +1,10 @@ \header { - texidoc = "Glissandi are not broken. Here a @code{\break} is ineffective. + texidoc = "Glissandi are not broken. Here a @code{\\break} is ineffective. Use @code{breakable} grob property to override." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/glissando.ly b/input/regression/glissando.ly index fb780e1d27..4b352ebe58 100644 --- a/input/regression/glissando.ly +++ b/input/regression/glissando.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/grace-auto-beam.ly b/input/regression/grace-auto-beam.ly index a187226420..c22fc5eb09 100644 --- a/input/regression/grace-auto-beam.ly +++ b/input/regression/grace-auto-beam.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The autobeamer is not confused by grace notes." diff --git a/input/regression/grace-bar-line.ly b/input/regression/grace-bar-line.ly index 0cf52ae3c7..50686c47f5 100644 --- a/input/regression/grace-bar-line.ly +++ b/input/regression/grace-bar-line.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Bar line should come before the grace note." } diff --git a/input/regression/grace-bar-number.ly b/input/regression/grace-bar-number.ly index c1771d8739..f557eadc55 100644 --- a/input/regression/grace-bar-number.ly +++ b/input/regression/grace-bar-number.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Grace notes do tricky things with timing. If a measure diff --git a/input/regression/grace-beam.ly b/input/regression/grace-beam.ly index 9089d64dd0..3d97e210d8 100644 --- a/input/regression/grace-beam.ly +++ b/input/regression/grace-beam.ly @@ -9,7 +9,7 @@ Unbeamed grace notes are not put into normal beams. \layout { ragged-right= ##t } -\version "2.12.0" +\version "2.14.0" \relative c'' { c4 d8[ \grace { e32[ d c d] } e8] diff --git a/input/regression/grace-direction-polyphony.ly b/input/regression/grace-direction-polyphony.ly index bc364f105e..965803eb67 100644 --- a/input/regression/grace-direction-polyphony.ly +++ b/input/regression/grace-direction-polyphony.ly @@ -1,10 +1,10 @@ \header { - texidoc = "The @code{\voiceOne} setting is retained after + texidoc = "The @code{\\voiceOne} setting is retained after finishing the grace section." } -\version "2.12.0" +\version "2.14.0" \relative c''' { \voiceOne diff --git a/input/regression/grace-end-2.ly b/input/regression/grace-end-2.ly index 88ba608824..aa94183bae 100644 --- a/input/regression/grace-end-2.ly +++ b/input/regression/grace-end-2.ly @@ -1,8 +1,9 @@ +\version "2.14.0" + +#(ly:set-option 'warning-as-error #f) \header { texidoc = "Grace notes at the end of an expression don't cause crashes." - } - -\version "2.12.0" +} -{ e' \acciaccatura << e'8 \\ cis' >> } +{ e' \acciaccatura << e'8 \\ cis' >> } diff --git a/input/regression/grace-end.ly b/input/regression/grace-end.ly index 1155d98921..9beaad1ee1 100644 --- a/input/regression/grace-end.ly +++ b/input/regression/grace-end.ly @@ -1,24 +1,12 @@ +\version "2.14.0" -\version "2.12.0" -\header { +#(ly:set-option 'warning-as-error #f) +\header { texidoc="@cindex Grace End Grace notes after the last note do not confuse the timing code." - - -} - -\layout { - ragged-right = ##t } - - \context Voice \relative c' { - - c4 \grace { d16[ d16] } - + c4 \grace { d16[ d16] } } - - - diff --git a/input/regression/grace-nest1.ly b/input/regression/grace-nest1.ly index 35f97d56d4..887d63815c 100644 --- a/input/regression/grace-nest1.ly +++ b/input/regression/grace-nest1.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Grace code should not be confused by nested sequential music containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example." diff --git a/input/regression/grace-nest2.ly b/input/regression/grace-nest2.ly index 3c1bba2567..855d5bdfef 100644 --- a/input/regression/grace-nest2.ly +++ b/input/regression/grace-nest2.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Grace code should not be confused by nested sequential music containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example." diff --git a/input/regression/grace-nest3.ly b/input/regression/grace-nest3.ly index 61d2e2852a..713489865e 100644 --- a/input/regression/grace-nest3.ly +++ b/input/regression/grace-nest3.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "In nested syntax, graces are still properly handled." } diff --git a/input/regression/grace-nest4.ly b/input/regression/grace-nest4.ly index cec7d109c8..862b748d44 100644 --- a/input/regression/grace-nest4.ly +++ b/input/regression/grace-nest4.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Also in the nested syntax here, grace notes appear rightly." } diff --git a/input/regression/grace-nest5.ly b/input/regression/grace-nest5.ly index 2d0baac2ca..fe501f9d26 100644 --- a/input/regression/grace-nest5.ly +++ b/input/regression/grace-nest5.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Graces notes may have the same duration as the main note." } diff --git a/input/regression/grace-part-combine.ly b/input/regression/grace-part-combine.ly index fe04f094fa..515c40b4e7 100644 --- a/input/regression/grace-part-combine.ly +++ b/input/regression/grace-part-combine.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Grace notes may be put in a @code{partcombine}r." } diff --git a/input/regression/grace-partial.ly b/input/regression/grace-partial.ly index 69b4f9ad70..527b92b506 100644 --- a/input/regression/grace-partial.ly +++ b/input/regression/grace-partial.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/grace-staff-length.ly b/input/regression/grace-staff-length.ly index 319cac2240..61be9136a8 100644 --- a/input/regression/grace-staff-length.ly +++ b/input/regression/grace-staff-length.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = "Stripped version of trip.ly. Staves should be of correct length." } diff --git a/input/regression/grace-start.ly b/input/regression/grace-start.ly index d8838b2b1b..05165c719e 100644 --- a/input/regression/grace-start.ly +++ b/input/regression/grace-start.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Pieces may begin with grace notes." } diff --git a/input/regression/grace-stem-length.ly b/input/regression/grace-stem-length.ly index d4c831f6cf..30cb14feef 100644 --- a/input/regression/grace-stem-length.ly +++ b/input/regression/grace-stem-length.ly @@ -3,7 +3,7 @@ normal notes, if possible. They should never be longer, even if that would lead to beam quanting problems." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/grace-stems.ly b/input/regression/grace-stems.ly index 43eab6278b..6bad83c68e 100644 --- a/input/regression/grace-stems.ly +++ b/input/regression/grace-stems.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = "Here @code{startGraceMusic} should set @code{no-stem-extend} to true; the two grace beams should be the same here. diff --git a/input/regression/grace-sync.ly b/input/regression/grace-sync.ly index 13d96ffb79..99cfc7e5ea 100644 --- a/input/regression/grace-sync.ly +++ b/input/regression/grace-sync.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Grace notes in different voices/staves are synchronized." } diff --git a/input/regression/grace-types.ly b/input/regression/grace-types.ly index 0885a04fc9..2bf342676a 100644 --- a/input/regression/grace-types.ly +++ b/input/regression/grace-types.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "There are three different kinds of grace types: the base grace switches to smaller type, the appoggiatura inserts also a slur, and the diff --git a/input/regression/grace-unfold-repeat.ly b/input/regression/grace-unfold-repeat.ly index c2df025858..354add8d8c 100644 --- a/input/regression/grace-unfold-repeat.ly +++ b/input/regression/grace-unfold-repeat.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "When grace notes are entered with unfolded repeats, line breaks take place before grace notes. diff --git a/input/regression/grace-volta-repeat-2.ly b/input/regression/grace-volta-repeat-2.ly index 1df9fec9c4..2b37691c61 100644 --- a/input/regression/grace-volta-repeat-2.ly +++ b/input/regression/grace-volta-repeat-2.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/grace-volta-repeat.ly b/input/regression/grace-volta-repeat.ly index a24e2e1538..9808c736fa 100644 --- a/input/regression/grace-volta-repeat.ly +++ b/input/regression/grace-volta-repeat.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/grace.ly b/input/regression/grace.ly index 36462f342c..347058ab77 100644 --- a/input/regression/grace.ly +++ b/input/regression/grace.ly @@ -1,10 +1,10 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" You can have beams, notes, chords, stems etc. within a -@code{\grace} section. If there are tuplets, the grace notes will not +@code{\\grace} section. If there are tuplets, the grace notes will not be under the brace. Main note scripts do not end up on the grace note. diff --git a/input/regression/graphviz.ly b/input/regression/graphviz.ly index 3687d3dc74..42fab60ad3 100644 --- a/input/regression/graphviz.ly +++ b/input/regression/graphviz.ly @@ -3,7 +3,7 @@ } -\version "2.12.0" +\version "2.14.0" \include "graphviz-init.ly" #(whitelist-grob 'NoteHead) diff --git a/input/regression/grid-lines.ly b/input/regression/grid-lines.ly index 8a99130511..57d1eaf372 100644 --- a/input/regression/grid-lines.ly +++ b/input/regression/grid-lines.ly @@ -5,7 +5,7 @@ staves synchronized with the notes." } -\version "2.12.0" +\version "2.14.0" skips = { @@ -39,28 +39,27 @@ skips = \context { \RhythmicStaff \consists "Grid_point_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) gridInterval = #(ly:make-moment 1 8) - \override BarLine #'bar-size = #0.05 + \override BarLine #'bar-extent = #'(-0.025 . 0.025) } \context { \StaffGroup \remove "System_start_delimiter_engraver" } + \context { + \Score + \consists "Grid_line_span_engraver" + \override SystemStartBrace #'transparent = ##t + + \override NoteColumn #'X-offset = #-0.5 + \override NoteHead #'Y-offset = #0.75 + } } \layout { ragged-right = ##t } -\new Score -\with { - \consists "Grid_line_span_engraver" - \override SystemStartBrace #'transparent = ##t - - \override NoteColumn #'X-offset = #-0.5 - \override NoteHead #'Y-offset = #0.75 - -} +\score { \new StaffGroup << \new RhythmicStaff \with { @@ -84,4 +83,5 @@ skips = } >> +} diff --git a/input/regression/grob-tweak.ly b/input/regression/grob-tweak.ly index ae4f1deffc..9430633ce0 100644 --- a/input/regression/grob-tweak.ly +++ b/input/regression/grob-tweak.ly @@ -6,7 +6,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/hairpin-barline-break.ly b/input/regression/hairpin-barline-break.ly index 88973d0bee..4d442a3655 100644 --- a/input/regression/hairpin-barline-break.ly +++ b/input/regression/hairpin-barline-break.ly @@ -5,7 +5,7 @@ do not print that ending. But on the previous line, this hairpin should not be left open, and should end at the bar line. " } -\version "2.12.0" +\version "2.14.0" \relative c' { c1\> diff --git a/input/regression/hairpin-circled.ly b/input/regression/hairpin-circled.ly index e01f244d75..f50d02653f 100644 --- a/input/regression/hairpin-circled.ly +++ b/input/regression/hairpin-circled.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { @@ -10,10 +10,12 @@ followed by a crescendo al niente should only print one circle." \layout { ragged-right = ##t } \relative c'' { - \override Hairpin #'circled-tip = ##t - c1\< d\! d\> c\! e\> c\< d\! \break - c\< \break - e d\! c\> \break - e d\! + \override Hairpin #'circled-tip = ##t + c1\< d\! d\> c\! + \override Hairpin #'to-barline = ##f + e\> c\< d\! \break + c\< \break + e d\! c\> \break + e d\! } diff --git a/input/regression/hairpin-dashed.ly b/input/regression/hairpin-dashed.ly index 0607b291e2..df85da0ace 100644 --- a/input/regression/hairpin-dashed.ly +++ b/input/regression/hairpin-dashed.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc ="Hairpin crescendi may be dashed. " diff --git a/input/regression/hairpin-ending.ly b/input/regression/hairpin-ending.ly index a5e33c426c..176d36e252 100644 --- a/input/regression/hairpin-ending.ly +++ b/input/regression/hairpin-ending.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { @@ -12,6 +12,7 @@ into them." \layout { ragged-right = ##t } \relative c'' { + \override Score.PaperColumn #'keep-inside-line = ##f c4 \> c4 c4\! c4_\ff \> c4 c4\!\p << diff --git a/input/regression/hairpin-neighboring-span-dynamics.ly b/input/regression/hairpin-neighboring-span-dynamics.ly new file mode 100644 index 0000000000..69fe8958a7 --- /dev/null +++ b/input/regression/hairpin-neighboring-span-dynamics.ly @@ -0,0 +1,27 @@ +\version "2.14.0" + +\header { + texidoc = "Bound padding for hairpins also works with neighboring +@code{DynamicTextSpanner} grobs. In this case, @code{bound-padding} +is not scaled down. +" +} + +\relative c' { + \override Hairpin #'to-barline = ##f + c2\> + \dimTextDim + c2\> + \dimHairpin + c\> c\! \break + \dimTextDim + c2\> + \override Hairpin #'bound-padding = #5 + \dimHairpin + c2\> + \dimTextDim + c2\> c\! \break + \crescHairpin + c2\< c\< + c2\< c\! +} diff --git a/input/regression/hairpin-to-barline-mark.ly b/input/regression/hairpin-to-barline-mark.ly index c6d10938e7..808e68515a 100644 --- a/input/regression/hairpin-to-barline-mark.ly +++ b/input/regression/hairpin-to-barline-mark.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/hairpin-to-barline.ly b/input/regression/hairpin-to-barline.ly index 2a0a9db357..00d6c648ae 100644 --- a/input/regression/hairpin-to-barline.ly +++ b/input/regression/hairpin-to-barline.ly @@ -5,7 +5,7 @@ should end at that bar line. " } -\version "2.12.0" +\version "2.14.0" \relative c'' { \override Hairpin #'bound-padding = #1.0 diff --git a/input/regression/hairpin-to-rest.ly b/input/regression/hairpin-to-rest.ly index 1f5d4800a7..53f3db049e 100644 --- a/input/regression/hairpin-to-rest.ly +++ b/input/regression/hairpin-to-rest.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Hairpins end at the left edge of a rest." } diff --git a/input/regression/hara-kiri-alive-with.ly b/input/regression/hara-kiri-alive-with.ly new file mode 100644 index 0000000000..770f9e9842 --- /dev/null +++ b/input/regression/hara-kiri-alive-with.ly @@ -0,0 +1,23 @@ +\version "2.14.0" + +\header { + texidoc = "Staves in a PianoStaff remain alive as long as any of +the staves has something interesting." +} + +\layout { + \context { + \Staff + \RemoveEmptyStaves + \override VerticalAxisGroup #'remove-first = ##t + } +} + +<< + \new Staff { c'1 \break c'1 \break c'1 } + \new PianoStaff + << + \new Staff { d'1 R1 R1 } + \new Staff { R1 e'1 R1 } + >> +>> diff --git a/input/regression/hara-kiri-drumstaff.ly b/input/regression/hara-kiri-drumstaff.ly new file mode 100644 index 0000000000..46adbc9a3b --- /dev/null +++ b/input/regression/hara-kiri-drumstaff.ly @@ -0,0 +1,49 @@ +\version "2.14.0" +\header { + texidoc = + + " Hara-kiri staves are suppressed if they are empty. This +example really contains three drum staves, but as it progresses, empty ones +are removed: this example has three staves, but some of them +disappear: note how the 2nd line only has the bar number 2. (That the +bar number is printed might be considered a bug, however, the scenario +of all staves disappearing does not happen in practice.) + +Any staff brackets and braces are removed, both in the single staff +and no staff case. +" + +} + +\layout { + ragged-right = ##t + \context { + \DrumStaff + \RemoveEmptyStaves + } +} + +\transpose c c'' +\context StaffGroup << + \new DrumStaff + \drummode { + sn4 sn sn sn \break + s1 \break + sn4 sn sn sn \break + sn sn sn sn + } + \new DrumStaff + \drummode { + hh4 hh hh hh + s1 + s1 + s1 + } + \new DrumStaff + \drummode { + bd4 bd bd bd + s1 + bd4 bd bd bd + s1 + } +>> diff --git a/input/regression/hara-kiri-keep-previous-settings.ly b/input/regression/hara-kiri-keep-previous-settings.ly new file mode 100644 index 0000000000..0b6b66ef05 --- /dev/null +++ b/input/regression/hara-kiri-keep-previous-settings.ly @@ -0,0 +1,43 @@ +\version "2.14.0" + +\header { texidoc = + + "Inserting the harakiri settings globally into the Staff context should +not erase previous settings to the Staff context. +" + +} + +\layout { + ragged-right= ##t + \context { + \Staff + \override StaffSymbol #'line-count = 4 + \consists "Ambitus_engraver" + \remove "Clef_engraver" + } +} + +% Old \RemoveEmptyStaffContext: Will erase previous settings... +\score { + << + \new Staff \relative c'' { c4 c c c \break s1 \break c4 c c c \break c c c c} + \new Staff \relative c'' { d4 d d d s1 s1 s1 } + \new Staff \relative c'' { e4 e e e s1 e4 e e e s1 } + >> + \layout { + \context { \RemoveEmptyStaffContext } + } +} + +% New \RemoveEmptyStaves settings: Preserves previous settings... +\score { + << + \new Staff \relative c'' { c4 c c c \break s1 \break c4 c c c \break c c c c} + \new Staff \relative c'' { d4 d d d s1 s1 s1 } + \new Staff \relative c'' { e4 e e e s1 e4 e e e s1 } + >> + \layout { + \context { \Staff \RemoveEmptyStaves } + } +} diff --git a/input/regression/hara-kiri-percent-repeat.ly b/input/regression/hara-kiri-percent-repeat.ly index d1ce10f1cd..e0975e1e2c 100644 --- a/input/regression/hara-kiri-percent-repeat.ly +++ b/input/regression/hara-kiri-percent-repeat.ly @@ -1,16 +1,21 @@ +\version "2.14.0" + \header { - texidoc = "Staves with percent repeats are not killed." + texidoc = "Staves, RhythmicStaves, TabStaves and DrumStaves + with percent repeats are not suppressed." } -\version "2.12.0" - << - \new Staff { c''1 c'' \break c'' c'' } - \new Staff \repeat percent 4 { c'1 } ->> + \new Staff { c''1 c'' \break c'' c'' } + \new Staff \repeat percent 4 { c'1 } + \new TabStaff \repeat percent 4 { c1 } + \new DrumStaff \drummode { \repeat percent 4 { hh1 } } + \new RhythmicStaff \repeat percent 4 { c'1 } +>> \layout { - \context { - \RemoveEmptyStaffContext - } + \context { \Staff \RemoveEmptyStaves } + \context { \RhythmicStaff \RemoveEmptyStaves } + \context { \DrumStaff \RemoveEmptyStaves } + \context { \TabStaff \RemoveEmptyStaves } } diff --git a/input/regression/hara-kiri-pianostaff.ly b/input/regression/hara-kiri-pianostaff.ly deleted file mode 100644 index e347ad2029..0000000000 --- a/input/regression/hara-kiri-pianostaff.ly +++ /dev/null @@ -1,36 +0,0 @@ -\version "2.12.0" - -\header { texidoc = - - " Hara-kiri staves kill themselves if they are empty. This -example really contains three staves, but as they progress, empty ones -are removed: this example has three staves, but some of them -disappear: note how the 2nd line only has the bar number 2. (That the -bar number is printed might be considered a bug, however, the scenario -of all staves disappearing does not happen in practice.) - -Any staff brackets and braces are removed, both in the single staff -and no staff case. - -This example was done with a pianostaff, which has fixed distance -alignment; this should not confuse the mechanism. -" - -} - -\layout { - ragged-right= ##t - \context { - \RemoveEmptyStaffContext - } -} - -\transpose c c'' -\context PianoStaff << - \new Staff { c4 c c c \break s1 \break c4 c c c \break c c c c} - \new Staff { d4 d d d s1 s1 s1 } - \new Staff { e4 e e e s1 e4 e e e s1 } ->> - - - diff --git a/input/regression/hara-kiri-rhythmicstaff.ly b/input/regression/hara-kiri-rhythmicstaff.ly new file mode 100644 index 0000000000..89d2e3416e --- /dev/null +++ b/input/regression/hara-kiri-rhythmicstaff.ly @@ -0,0 +1,45 @@ +\version "2.14.0" +\header { + texidoc = + + " Hara-kiri staves are suppressed if they are empty. This +example really contains three rhythmic staves, but as it progresses, empty ones +are removed: this example has three staves, but some of them +disappear: note how the 2nd line only has the bar number 2. (That the +bar number is printed might be considered a bug, however, the scenario +of all staves disappearing does not happen in practice.) + +Any staff brackets and braces are removed, both in the single staff +and no staff case. +" + +} + +\layout { + ragged-right= ##t + \context { + \RhythmicStaff + \RemoveEmptyStaves + } +} + +\context StaffGroup << + \new RhythmicStaff { + c4 c c c \break + s1 \break + c4 c c c \break + c c c c + } + \new RhythmicStaff { + c4 c c c + s1 + s1 + s1 + } + \new RhythmicStaff { + c4 c c c + s1 + c4 c c c + s1 + } +>> diff --git a/input/regression/hara-kiri-staff.ly b/input/regression/hara-kiri-staff.ly new file mode 100644 index 0000000000..b73e8bf8b3 --- /dev/null +++ b/input/regression/hara-kiri-staff.ly @@ -0,0 +1,34 @@ +\version "2.14.0" + +\header { texidoc = + + " Hara-kiri staves kill themselves if they are empty. This +example really contains three staves, but as they progress, empty ones +are removed: this example has three staves, but some of them +disappear: note how the 2nd line only has the bar number 2. (That the +bar number is printed might be considered a bug, however, the scenario +of all staves disappearing does not happen in practice.) + +Any staff brackets and braces are removed, both in the single staff +and no staff case. +" + +} + +\layout { + ragged-right= ##t + \context { + \Staff + \RemoveEmptyStaves + } +} + +\transpose c c'' +\context GrandStaff << + \new Staff { c4 c c c \break s1 \break c4 c c c \break c c c c} + \new Staff { d4 d d d s1 s1 s1 } + \new Staff { e4 e e e s1 e4 e e e s1 } +>> + + + diff --git a/input/regression/hara-kiri-stanza-number.ly b/input/regression/hara-kiri-stanza-number.ly index 18386a8cdd..6648e1d18f 100644 --- a/input/regression/hara-kiri-stanza-number.ly +++ b/input/regression/hara-kiri-stanza-number.ly @@ -11,7 +11,7 @@ lines." ragged-right = ##T } -\version "2.12.0" +\version "2.14.0" << \new Voice = melody \relative c'{ diff --git a/input/regression/hara-kiri-tabstaff.ly b/input/regression/hara-kiri-tabstaff.ly new file mode 100644 index 0000000000..8f251b3c99 --- /dev/null +++ b/input/regression/hara-kiri-tabstaff.ly @@ -0,0 +1,44 @@ +\version "2.14.0" + +\header { + texidoc = + + " Hara-kiri staves are suppressed if they are empty. This +example really contains three tab staves, but as it progresses, empty ones +are removed: this example has three staves, but some of them +disappear: note how the 2nd line only has the bar number 2. (That the +bar number is printed might be considered a bug, however, the scenario +of all staves disappearing does not happen in practice.)" + +} + +\layout { + ragged-right= ##t + \context { + \TabStaff + \RemoveEmptyStaves + } +} + + +\new GrandStaff << + \new TabStaff { + c4 c c c \break + s1 \break + c4 c c c \break + c c c c + } + \new TabStaff { + d4 d d d + s1 + s1 + s1 + } + \new TabStaff { + e4 e e e + s1 + e4 e e e + s1 + } +>> + diff --git a/input/regression/harp-pedals-sanity-checks.ly b/input/regression/harp-pedals-sanity-checks.ly index 38c4f45089..63270dfb4a 100644 --- a/input/regression/harp-pedals-sanity-checks.ly +++ b/input/regression/harp-pedals-sanity-checks.ly @@ -1,4 +1,6 @@ -\version "2.12.0" +\version "2.14.0" + +#(ly:set-option 'warning-as-error #f) \header { texidoc = "The harp-pedal markup function does some sanity checks. All @@ -7,6 +9,7 @@ a warning is printed out, but they should still look okay." } \relative c'' { + \override Score.PaperColumn #'keep-inside-line = ##f % Sanity checks: #pedals != 7: c1^\markup \harp-pedal #"^-v|--" % Sanity checks: no divider, multiple dividers, divider on wrong position: diff --git a/input/regression/harp-pedals-tweaking.ly b/input/regression/harp-pedals-tweaking.ly index ad3f95552a..6d28c5d5ad 100644 --- a/input/regression/harp-pedals-tweaking.ly +++ b/input/regression/harp-pedals-tweaking.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Harp pedals can be tweaked through the size, thickness and @@ -6,6 +6,7 @@ harp-pedal-details properties of TextScript." } \relative c'' { + \override Score.PaperColumn #'keep-inside-line = ##f \override Voice.TextScript #'(harp-pedal-details box-width) = #1 \once \override Voice.TextScript #'size = #1.5 \once \override Voice.TextScript #'thickness = #7 diff --git a/input/regression/harp-pedals.ly b/input/regression/harp-pedals.ly index 7f19767e21..e7e1c1c7d6 100644 --- a/input/regression/harp-pedals.ly +++ b/input/regression/harp-pedals.ly @@ -1,4 +1,6 @@ -\version "2.12.0" +\version "2.14.0" + +#(ly:set-option 'warning-as-error #f) \header { texidoc = "Basic harp diagram functionality, including circled pedal boxes. diff --git a/input/regression/horizontal-bracket-break.ly b/input/regression/horizontal-bracket-break.ly index c0ff49d0d5..17d2d7b718 100644 --- a/input/regression/horizontal-bracket-break.ly +++ b/input/regression/horizontal-bracket-break.ly @@ -2,7 +2,7 @@ texidoc = "Horizontal brackets connect over line breaks." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } \new Voice \with { diff --git a/input/regression/horizontal-bracket-tweak.ly b/input/regression/horizontal-bracket-tweak.ly new file mode 100644 index 0000000000..4a7b9a9d3c --- /dev/null +++ b/input/regression/horizontal-bracket-tweak.ly @@ -0,0 +1,20 @@ +\version "2.14.2" + +\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 +} diff --git a/input/regression/horizontal-bracket.ly b/input/regression/horizontal-bracket.ly index ae9a48c66c..bfa8c5da61 100644 --- a/input/regression/horizontal-bracket.ly +++ b/input/regression/horizontal-bracket.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/identifier-following-chordmode.ly b/input/regression/identifier-following-chordmode.ly index 34dec04102..bec19ea680 100644 --- a/input/regression/identifier-following-chordmode.ly +++ b/input/regression/identifier-following-chordmode.ly @@ -2,12 +2,12 @@ texidoc = "Identifiers following a chordmode section are not interpreted as chordmode tokens. In the following snippet, the -identifier `m' is not interpreted by the lexer as as a minor chord +identifier `m' is not interpreted by the lexer as a minor chord modifier." } -\version "2.12.0" +\version "2.14.0" myDisplayMusic = #(define-music-function (parser location music) diff --git a/input/regression/identifiers.ly b/input/regression/identifiers.ly index a201349411..d77b50580f 100644 --- a/input/regression/identifiers.ly +++ b/input/regression/identifiers.ly @@ -2,7 +2,7 @@ \header { texidoc = "test identifiers." } -\version "2.12.0" +\version "2.14.0" num = #3 mus = { c'4 } diff --git a/input/regression/incipit.ly b/input/regression/incipit.ly index 31d9e6f252..ad25f3a7cf 100644 --- a/input/regression/incipit.ly +++ b/input/regression/incipit.ly @@ -1,56 +1,62 @@ -\header { - - texidoc = "Incipit can be printed using an InstrumentName grob." +\version "2.14.0" +\header { + texidoc = "Incipits can be printed using an @code{InstrumentName} +grob." } -\version "2.12.0" - -%% to avoid warnings: +%% to prevent warnings/programming errors: #(set-object-property! 'music 'backend-type? ly:music?) #(set-object-property! 'music 'backend-doc "Incipit music") +#(ly:add-interface 'incipit-interface "An incipit." '(music)) +#(let* ((instrument-def (assoc 'InstrumentName all-grob-descriptions)) + (meta-def (assoc 'meta (cdr instrument-def))) + (interfaces-def (assoc 'interfaces (cdr meta-def))) + (interfaces (cdr interfaces-def))) + (set-cdr! interfaces-def (cons 'incipit-interface interfaces))) \score { \new Staff { %% All this would be shortcuted by an appropriate music function: \override Staff.InstrumentName #'music = ##{ \clef "petrucci-c1" c'4 d' e' f' #} \override Staff.InstrumentName #'self-alignment-X = #RIGHT - \override Staff.InstrumentName #'self-alignment-Y = #UP - \override Staff.InstrumentName #'Y-offset = #4 \override Staff.InstrumentName #'padding = #0 - \override Staff.InstrumentName #'stencil = - #(lambda (grob) - (let* ((instrument-name (ly:grob-property grob 'long-text)) - (layout (ly:output-def-clone (ly:grob-layout grob))) - (music (make-music 'SequentialMusic - 'elements (list (make-music 'ContextSpeccedMusic - 'context-type 'MensuralStaff - 'element (make-music 'PropertySet - 'symbol 'instrumentName - 'value instrument-name)) - (ly:grob-property grob 'music)))) - (score (ly:make-score music)) - (mm (ly:output-def-lookup layout 'mm)) - (indent (ly:output-def-lookup layout 'indent)) - (incipit-width (ly:output-def-lookup layout 'incipit-width)) - (scaled-incipit-width (if (number? incipit-width) - (* incipit-width mm) - (* indent 0.5)))) - (ly:output-def-set-variable! layout 'indent (- indent scaled-incipit-width)) - (ly:output-def-set-variable! layout 'line-width indent) - (ly:output-def-set-variable! layout 'ragged-right #f) - (ly:score-add-output-def! score layout) - (set! (ly:grob-property grob 'long-text) - (markup #:score score)) - (ly:system-start-text::print grob))) + \override Staff.InstrumentName #'stencil = + #(lambda (grob) + (let* ((instrument-name (ly:grob-property grob 'long-text)) + (layout (ly:output-def-clone (ly:grob-layout grob))) + (music (make-sequential-music + (list (context-spec-music + (make-sequential-music + (list (make-property-set + 'instrumentName instrument-name) + (make-grob-property-set + 'VerticalAxisGroup + 'Y-extent '(-4 . 4)))) + 'MensuralStaff) + (ly:grob-property grob 'music)))) + (score (ly:make-score music)) + (mm (ly:output-def-lookup layout 'mm)) + (indent (ly:output-def-lookup layout 'indent)) + (incipit-width (ly:output-def-lookup layout 'incipit-width)) + (scaled-incipit-width (if (number? incipit-width) + (* incipit-width mm) + (* indent 0.5)))) + (ly:output-def-set-variable! layout 'indent (- indent scaled-incipit-width)) + (ly:output-def-set-variable! layout 'line-width indent) + (ly:output-def-set-variable! layout 'ragged-right #f) + (ly:score-add-output-def! score layout) + (set! (ly:grob-property grob 'long-text) + (markup #:score score)) + (system-start-text::print grob))) %% the instrument name definition is separated: - \set Staff.instrumentName = \markup Instrument - c'4 d' e' f' g'1 + \set Staff.instrumentName = #"Instrument" + c'4 d' e' f' + g'1 } \layout { - ragged-right = ##t indent = 5\cm - incipit-width = 3 \cm + incipit-width = 3\cm } } \ No newline at end of file diff --git a/input/regression/include-string.ly b/input/regression/include-string.ly new file mode 100644 index 0000000000..5c88e94804 --- /dev/null +++ b/input/regression/include-string.ly @@ -0,0 +1,8 @@ +\version "2.14.0" + +\header { + texidoc = "@code{ly:parser-include-string} should include the current +string like a file @code{\\include}." +} + +#(ly:parser-include-string parser "\\relative c' { a4 b c d }") diff --git a/input/regression/incompatible-stem-warning.ly b/input/regression/incompatible-stem-warning.ly new file mode 100644 index 0000000000..287c67403d --- /dev/null +++ b/input/regression/incompatible-stem-warning.ly @@ -0,0 +1,22 @@ +\version "2.14.0" + +\header { + + texidoc = " +Combine several kinds of stems in parallel voices. +" + +} + +\new Voice { \time 4/1 + << c'\breve e'8 >> + << c'8 e'\breve >> | + << c'\longa e'1 >> | + << c'1 e'\longa >> | + << c'2 e'1 >> + << c'1 e'2 >> + << c'2 e'4 >> + << c'4 e'2 >> + << c'2 e'8 >> + << c'8 e'2 >> +} diff --git a/input/regression/instrument-cue-name.ly b/input/regression/instrument-cue-name.ly new file mode 100644 index 0000000000..adef665099 --- /dev/null +++ b/input/regression/instrument-cue-name.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + + texidoc = "The @code{Voice.instrumentCueName} property generates instrument +names for cue notes. It can also be unset properly." + } + + +\relative c'' { + c4 + \set Voice.instrumentCueName = "In.1" + c2. + \set Voice.instrumentCueName = "I.2" + c1 + \unset Voice.instrumentCueName + c +} diff --git a/input/regression/instrument-name-dynamic.ly b/input/regression/instrument-name-dynamic.ly index f7faa7e09d..358c050b01 100644 --- a/input/regression/instrument-name-dynamic.ly +++ b/input/regression/instrument-name-dynamic.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " @@ -11,7 +11,7 @@ indent = 0\cm } -\relative { +\relative c' { \set Staff.shortInstrumentName = "foo" f1 | f1 | f1 | f1\< | f1 | f1\! | diff --git a/input/regression/instrument-name-groups.ly b/input/regression/instrument-name-groups.ly new file mode 100644 index 0000000000..755d5df25d --- /dev/null +++ b/input/regression/instrument-name-groups.ly @@ -0,0 +1,39 @@ +\version "2.14.0" +\header { + texidoc=" +Instrument names can also be attached to staff groups. +" +} + +\paper { + left-margin = 3\cm +} +\layout { + ragged-right = ##t +} + + +\new StaffGroup \with { instrumentName = #"StaffGroup" } << + \new PianoStaff \with { instrumentName = #"PianoStaff" } << + \new Staff \with { instrumentName = #"Right" } { c''4 } + \new Staff \with { instrumentName = #"Left" } { \clef bass c4 } + >> + + \new ChoirStaff \with { instrumentName = #"ChoirStaff" } << + \new Staff { c''4 } + \new Staff { c''4 } + \new Staff { c''4 } + >> + \new GrandStaff \with { instrumentName = #"GrandStaff" } << + \new Staff \with { instrumentName = #"I" } { c''4 } + \new Staff \with { instrumentName = #"II" } { \clef bass c4 } + >> + % Nested groups should not inherit the instrument name from the parent group + \new StaffGroup \with { instrumentName = #"nested group" } << + \new Staff { c''4 } + \new StaffGroup << + \new Staff { c''4 } + \new Staff { c''4 } + >> + >> +>> diff --git a/input/regression/instrument-name-hara-kiri.ly b/input/regression/instrument-name-hara-kiri.ly index 55b209d349..f402271b2f 100644 --- a/input/regression/instrument-name-hara-kiri.ly +++ b/input/regression/instrument-name-hara-kiri.ly @@ -1,21 +1,18 @@ +\version "2.14.0" \header { + texidoc = "Instrument names are removed when the staves are +killed off. - texidoc = "@code{PianoStaff.instrument} and -@code{PianoStaff.instr} are removed when the staves are killed off. - -In this example, the 2nd staff (marked by the barnumber 2) disappears -as does the instrument name. " - +In this example, the second staff (marked by the bar number 2) +disappears, as does the instrument name." } - -\version "2.12.0" - \new PianoStaff << - \new Staff { - \override Staff.VerticalAxisGroup #'remove-empty = ##t - \set PianoStaff.instrumentName ="up" - \set PianoStaff.shortInstrumentName ="u" - c'1\break R - } - >> +\new PianoStaff << + \new Staff { + \override Staff.VerticalAxisGroup #'remove-empty = ##t + \set PianoStaff.instrumentName = #"up" + \set PianoStaff.shortInstrumentName = #"u" + c'1\break R + } +>> diff --git a/input/regression/instrument-name-markup.ly b/input/regression/instrument-name-markup.ly index 3af4924721..89da9963fc 100644 --- a/input/regression/instrument-name-markup.ly +++ b/input/regression/instrument-name-markup.ly @@ -9,7 +9,7 @@ including alterations. " \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" textFlat = \markup {\smaller \flat} diff --git a/input/regression/instrument-name-partial.ly b/input/regression/instrument-name-partial.ly index 87ad6f4dfd..595fb66b15 100644 --- a/input/regression/instrument-name-partial.ly +++ b/input/regression/instrument-name-partial.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Instrument names are also printed on partial starting measures." } diff --git a/input/regression/instrument-name-volta.ly b/input/regression/instrument-name-volta.ly new file mode 100644 index 0000000000..22496702ec --- /dev/null +++ b/input/regression/instrument-name-volta.ly @@ -0,0 +1,40 @@ +\version "2.14.0" + +\header { + texidoc = "Moving the @code{Volta_engraver} to the @code{Staff} +context does not affect @code{InstrumentName} alignment." +} + +testMusik = \relative c'' { + \repeat volta 2 { + c1 \break + } \alternative { + { c1 \break } + { c1 \break } + } +} + +\score { + \new Staff \relative c' { + \set Staff.shortInstrumentName = #"Instr." + \repeat volta 2 { + c1 \break + } + \alternative { + { c1 \break } + { c1 \break } + } + } +} +\layout { + ragged-right = ##t + short-indent = 5\mm + \context { + \Score + \remove "Volta_engraver" + } + \context { + \Staff + \consists "Volta_engraver" + } +} diff --git a/input/regression/instrument-name-x-align.ly b/input/regression/instrument-name-x-align.ly index 190807c950..7a03f5f345 100644 --- a/input/regression/instrument-name-x-align.ly +++ b/input/regression/instrument-name-x-align.ly @@ -2,13 +2,13 @@ texidoc = "Instrument names horizontal alignment is tweaked by changing the @code{Staff.Instrument #'self-alignment-X} property. The -@code{\layout} variables @code{indent} and @code{short-indent} define +@code{\\layout} variables @code{indent} and @code{short-indent} define the space where the instrument names are aligned before the first and the following systems, respectively." } -\version "2.12.0" +\version "2.14.0" \paper { left-margin = 3\cm } \score { \new StaffGroup << diff --git a/input/regression/instrument-name.ly b/input/regression/instrument-name.ly index 121dd42087..7f31123fc9 100644 --- a/input/regression/instrument-name.ly +++ b/input/regression/instrument-name.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Staff margins are also markings attached to barlines. They should be diff --git a/input/regression/instrument-switch.ly b/input/regression/instrument-switch.ly index 81235e297a..a03a636d1a 100644 --- a/input/regression/instrument-switch.ly +++ b/input/regression/instrument-switch.ly @@ -5,7 +5,7 @@ properties for an in staff instrument switch. " } -\version "2.12.0" +\version "2.14.0" \addInstrumentDefinition #"bassClar" #`((instrumentTransposition . ,(ly:make-pitch -1 6 FLAT)) (instrumentName . "bla") diff --git a/input/regression/invalid-engraver.ly b/input/regression/invalid-engraver.ly new file mode 100644 index 0000000000..347c76471f --- /dev/null +++ b/input/regression/invalid-engraver.ly @@ -0,0 +1,16 @@ +\version "2.14.0" + +#(ly:set-option 'warning-as-error #f) + +\header { + texidoc = "Engravers which do not exist produce a warning." +} + +\layout { + \context { + \Voice + \consists "Rhythmic_column_engraver_foo" + } +} + +{ a4 } diff --git a/input/regression/key-clefs.ly b/input/regression/key-clefs.ly index 761f062710..9f966fe4d9 100644 --- a/input/regression/key-clefs.ly +++ b/input/regression/key-clefs.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Each clef has its own accidental placing rules. "} diff --git a/input/regression/key-signature-cancellation-extra-natural.ly b/input/regression/key-signature-cancellation-extra-natural.ly deleted file mode 100644 index 676e1dc2ef..0000000000 --- a/input/regression/key-signature-cancellation-extra-natural.ly +++ /dev/null @@ -1,23 +0,0 @@ -\header { - - texidoc = "If @code{extraNatural} is set then keys that are not - altered farther away (eg from sharp to double sharp) are - cancelled. Otherwise only keys that do not occur in the new key - signature are cancelled." } - - -\version "2.12.0" - -\paper { - ragged-right = ##t -} -{ - \set Staff.extraNatural = ##f - \key fes \major r1 - \key as \major r1_"No B-natural (#f)" - \set Staff.extraNatural = ##t - \key gis \major r1 - \key b \major r1_"with F-natural (#t)" - -} - diff --git a/input/regression/key-signature-cancellation.ly b/input/regression/key-signature-cancellation.ly index 8193110ff4..6a62e5e1d2 100644 --- a/input/regression/key-signature-cancellation.ly +++ b/input/regression/key-signature-cancellation.ly @@ -6,7 +6,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/key-signature-left-edge.ly b/input/regression/key-signature-left-edge.ly new file mode 100644 index 0000000000..5f8e646e7a --- /dev/null +++ b/input/regression/key-signature-left-edge.ly @@ -0,0 +1,22 @@ +\header { + + texidoc = "If the clef engraver is removed, the key signature shall use a +proper padding > 0 to the start of the staff lines." + +} + +\version "2.14.0" + +m = \relative c' { \key f \major c8 } + +% Default spacing should not be affected +\score { + \new Staff \m +} + +% Key signature should not touch the left edge +\score { + \new Staff \with { + \remove "Clef_engraver" + } \m +} diff --git a/input/regression/key-signature-padding.ly b/input/regression/key-signature-padding.ly index a27bde7cff..6d23c9e375 100644 --- a/input/regression/key-signature-padding.ly +++ b/input/regression/key-signature-padding.ly @@ -5,11 +5,11 @@ } -\version "2.12.0" +\version "2.14.0" { \override Staff.KeySignature #'padding-pairs = #'((("accidentals.flat" . "accidentals.sharp.slashslash.stemstemstem") . 0.5)) - \set Staff.keySignature = #`((2 . ,SEMI-FLAT) (6 . ,THREE-Q-SHARP) (4 . ,FLAT)) + \set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT)) e2 } diff --git a/input/regression/key-signature-scordatura-persist.ly b/input/regression/key-signature-scordatura-persist.ly index 1baea097bd..96932d84c0 100644 --- a/input/regression/key-signature-scordatura-persist.ly +++ b/input/regression/key-signature-scordatura-persist.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "When a custom key signature has entries which are diff --git a/input/regression/key-signature-scordatura.ly b/input/regression/key-signature-scordatura.ly index 93710c2c70..4b63f973c1 100644 --- a/input/regression/key-signature-scordatura.ly +++ b/input/regression/key-signature-scordatura.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "By setting @code{Staff.keySignature} directly, key signatures can be set invidually per pitch. @@ -11,9 +11,9 @@ key signatures can be set invidually per pitch. } \relative c' \new Staff { - \set Staff.keySignature = #`(((1 . 2) . ,SHARP) ((0 . 3) . ,FLAT)) + \set Staff.keySignature = #`(((0 . 3) . ,FLAT) ((1 . 2) . ,SHARP)) f8 a c e - \set Staff.keySignature = #`(((1 . 2) . ,FLAT) ((0 . 4) . ,DOUBLE-SHARP)) + \set Staff.keySignature = #`(((0 . 4) . ,DOUBLE-SHARP) ((1 . 2) . ,FLAT)) e a, g a } diff --git a/input/regression/key-signature-space.ly b/input/regression/key-signature-space.ly new file mode 100644 index 0000000000..28c113fc9a --- /dev/null +++ b/input/regression/key-signature-space.ly @@ -0,0 +1,19 @@ +\header { + + texidoc = "Key signatures get the required amount of horizontal space." + +} +\version "2.14.0" +<< + \new Staff { + \voiceOne + \key f\minor + f'4 f' f' f' + \key b\major + e''8 e'' e''4 e''2 + } + \new Staff { + R1 \bar "||" + R1 + } +>> diff --git a/input/regression/keys.ly b/input/regression/keys.ly index 0a3fb7e8a5..5fca40bf7d 100644 --- a/input/regression/keys.ly +++ b/input/regression/keys.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Key signatures may appear on key changes, even without a barline. @@ -25,7 +25,7 @@ are created also on a clef change. \break \key bes \major % \major c2 \clef alto c2 \key d \major \clef treble c2 - \set Staff.keySignature = #`((2 . ,SEMI-FLAT) (6 . ,THREE-Q-SHARP) (4 . ,FLAT)) + \set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT)) e2 } diff --git a/input/regression/laissez-vibrer-arpeggio.ly b/input/regression/laissez-vibrer-arpeggio.ly new file mode 100644 index 0000000000..a063cc4658 --- /dev/null +++ b/input/regression/laissez-vibrer-arpeggio.ly @@ -0,0 +1,15 @@ +\header { + + texidoc = " +l.v. ties should not collide with arpeggio indications. +" +} + +\version "2.14.0" % regression: 2.10.33 and 2.8.8 are ok + +{ + \laissezVibrer \arpeggio + \laissezVibrer \arpeggio \mark "Ties should not collide" + \laissezVibrer \arpeggio + \laissezVibrer \arpeggio + } diff --git a/input/regression/laissez-vibrer-tie-beam.ly b/input/regression/laissez-vibrer-tie-beam.ly index 840f5b28f8..a9565711c8 100644 --- a/input/regression/laissez-vibrer-tie-beam.ly +++ b/input/regression/laissez-vibrer-tie-beam.ly @@ -1,11 +1,11 @@ \header { - texidoc = "@code{\laissezVibrer} ties on beamed notes don't trigger + texidoc = "@code{\\laissezVibrer} ties on beamed notes don't trigger premature beam slope calculation. " } -\version "2.12.0" +\version "2.14.0" \paper{ ragged-right=##t diff --git a/input/regression/laissez-vibrer-tie-head-direction.ly b/input/regression/laissez-vibrer-tie-head-direction.ly new file mode 100644 index 0000000000..e129578d34 --- /dev/null +++ b/input/regression/laissez-vibrer-tie-head-direction.ly @@ -0,0 +1,14 @@ +\version "2.14.0" +\header { + + texidoc = "The 'head-direction of a LaissezVibrerTieColumn should +be able to be set without causing a segmentation fault." + +} + +\relative c'' { + c2 \laissezVibrer + \once \override LaissezVibrerTieColumn #'head-direction = #RIGHT + c \laissezVibrer +} + diff --git a/input/regression/laissez-vibrer-ties.ly b/input/regression/laissez-vibrer-ties.ly index 934bf27091..8aa20f383a 100644 --- a/input/regression/laissez-vibrer-ties.ly +++ b/input/regression/laissez-vibrer-ties.ly @@ -10,16 +10,16 @@ They have fixed size. Their formatting can be tuned with " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } -\relative { +\relative c' { \laissezVibrer r4 \laissezVibrer r \laissezVibrer r - 4.\laissezVibrer r + 4.\laissezVibrer r8 4\laissezVibrer r \override LaissezVibrerTieColumn #'tie-configuration diff --git a/input/regression/landscape.ly b/input/regression/landscape.ly index 477e67babb..4c095efe6f 100644 --- a/input/regression/landscape.ly +++ b/input/regression/landscape.ly @@ -1,9 +1,9 @@ -\version "2.12.0" +\version "2.14.0" #(set-default-paper-size "a6" 'landscape) \header { texidoc = " Scores may be printed in landscape mode."} -pattern = \relative { a b c d \break } +pattern = \relative c' { a b c d \break } \book { \score { diff --git a/input/regression/ledger-line-minimum.ly b/input/regression/ledger-line-minimum.ly index 471818e9d2..cdbe1e6153 100644 --- a/input/regression/ledger-line-minimum.ly +++ b/input/regression/ledger-line-minimum.ly @@ -7,7 +7,7 @@ disappearing." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t} \relative c'' { \time 2/4 diff --git a/input/regression/ledger-line-shorten.ly b/input/regression/ledger-line-shorten.ly index 04ec6a9f95..6f99a91626 100644 --- a/input/regression/ledger-line-shorten.ly +++ b/input/regression/ledger-line-shorten.ly @@ -2,13 +2,13 @@ texidoc = "Ledger lines are shortened when they are very close. This ensures that ledger lines stay separate." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } -\relative { +\relative c' { \time 2/4 c4 diff --git a/input/regression/ledger-lines-varying-staves.ly b/input/regression/ledger-lines-varying-staves.ly index f7c78d5849..e037de7f79 100644 --- a/input/regression/ledger-lines-varying-staves.ly +++ b/input/regression/ledger-lines-varying-staves.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Ledger lines should appear at every other location for a variety of staves using both @code{line-count} and diff --git a/input/les-nereides.ly b/input/regression/les-nereides.ly similarity index 85% rename from input/les-nereides.ly rename to input/regression/les-nereides.ly index 3d88381fc5..fad2500f5b 100644 --- a/input/les-nereides.ly +++ b/input/regression/les-nereides.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { composer = "ARTHUR GRAY" @@ -7,6 +7,8 @@ enteredby = "JCN" piece = "Allegretto scherzando" copyright = "public domain" + + texidoc="Highly tweaked example of lilypond output" } %{ @@ -40,9 +42,9 @@ treble = \new Voice \relative c''{ 8 | %4 4)\sustainOn - + \change Staff=treble - + \slurUp \set PianoStaff.connectArpeggios = ##t @@ -53,10 +55,10 @@ treble = \new Voice \relative c''{ \grace { cis8 \revert Stem #'direction - + a16[-5_( fis dis] \ottava #0 - + cis32[ a-1 fis-4 dis] cis[ a fis)-2] % the small grace in lower staff comes after us s32 @@ -68,16 +70,16 @@ treble = \new Voice \relative c''{ | %5 r8 8(\mf - + % \fingerUp \override Fingering #'direction = #UP - + e)-1-4-5 r | %6 r 8(\mf e) r - + | %7 \bar "||" } @@ -102,7 +104,7 @@ trebleTwo = \new Voice \relative c''{ \override Fingering #'slur-padding = #0.1 8[( | %6 - )] cis'4. d4 + )] cis'4. d4 8[( | %7 )] @@ -111,36 +113,36 @@ trebleTwo = \new Voice \relative c''{ bass = \new Voice \relative c{ \partial 2 \key a \major - + \slurDown \dynamicUp r8. e,16(\f_2 8[ ] | %2 %\override Staff.SustainPedalLineSpanner #'staff-padding = #5 %tweak - + 4\sustainOn \change Staff=treble \stemDown 4)\arpeggio - + \change Staff=bass \stemNeutral - + r8. cis,,16(\sustainOff 8 - + | %3 4\sustainOn \change Staff=treble - + \stemNeutral - \stemDown + \stemDown )\arpeggio \change Staff=bass \stemNeutral r2 - + | %4 \stemDown 4 @@ -150,46 +152,46 @@ bass = \new Voice \relative c{ %urg: staff-change: ! on dis \arpeggio >> - + \grace { \override Stem #'stroke-style = #"grace" - + s8 s16 s s s32 s s s s s \clef bass 32(\sustainOff\sustainOn - + \revert Stem #'stroke-style } 2) - + | %5 \slurUp - + % \fingerDown \override Fingering #'direction = #DOWN - + %\override Staff.SustainPedalLineSpanner #'staff-padding = #3.5 %tweak \set Staff.pedalSustainStyle = #'mixed %%a,8 e'[-5(]) - + a,8\sustainOn e'[-5(])-2-3 %%r b,-5 4 r b,-5\sustainOff\sustainOn 4-3-5 \slurNeutral e,8[-5(\sustainOff - + | %6 a)-2]\sustainOn \slurUp e'[()] r b,\sustainOff\sustainOn 4 \slurNeutral e,8[(\sustainOff - + | %7 a)] } @@ -217,7 +219,7 @@ middleDynamics = { s32 s s\> s s32 s s\! s - + } \textLengthOn s32 s-"rall." s s s8 s4 @@ -225,7 +227,7 @@ middleDynamics = { | %5 s2-"a tempo" s8 s \> s s - | %6 + | %6 s8\! s2 s8 s\> s | %7 @@ -235,6 +237,8 @@ middleDynamics = { theScore = \score{ \context PianoStaff << \new Staff = "treble" << + \set beamExceptions = #'((end . (((1 . 8) . (2 2 2 2)) + ((1 . 32) . (4 4 4 4 4 4 4 4))))) \treble \trebleTwo >> @@ -253,35 +257,13 @@ theScore = \score{ pedalSustainStrings = #'("Ped." "*Ped." "*") \remove Bar_number_engraver } - \context { - \type "Engraver_group" - \name Dynamics - \consists "Output_property_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 0) - - \consists "Script_engraver" - \consists "Dynamic_engraver" - \consists "Text_engraver" - - %%\override TextScript #'font-size = #1 - \override TextScript #'font-shape = #'italic - - \consists "Skip_event_swallow_translator" - - \consists "Axis_group_engraver" - } - - \context { - \PianoStaff - \accepts Dynamics - } } } - + \book{ \score { \theScore } } - + %%% Local variables: %%% coding: utf-8 %%% LilyPond-indent-level:2 diff --git a/input/regression/ligature-bracket.ly b/input/regression/ligature-bracket.ly index 756559c919..167f9f7943 100644 --- a/input/regression/ligature-bracket.ly +++ b/input/regression/ligature-bracket.ly @@ -2,7 +2,7 @@ texidoc = "The ligature bracket right-end is not affected by other voices." } -\version "2.12.0" +\version "2.14.0" << \new Staff {\[b2 b\] | \[b b\] } \new Staff {b2 b | b4 b b b } diff --git a/input/regression/lily-in-scheme.ly b/input/regression/lily-in-scheme.ly index e9b34f6ec5..15da5e6453 100644 --- a/input/regression/lily-in-scheme.ly +++ b/input/regression/lily-in-scheme.ly @@ -4,15 +4,15 @@ them with a @code{$}, both in a LilyPond context or in a Scheme context. -In this example, the @code{\withpaddingA}, @code{\withpaddingB} and -@code{\withpaddingC} music functions set different kinds of padding on +In this example, the @code{\\withpaddingA}, @code{\\withpaddingB} and +@code{\\withpaddingC} music functions set different kinds of padding on the @code{TextScript} grob. " } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } withPaddingA = #(define-music-function (parser location padding music) (number? ly:music?) diff --git a/input/regression/lilypond-book/GNUmakefile b/input/regression/lilypond-book/GNUmakefile new file mode 100644 index 0000000000..a1e5bdc3b7 --- /dev/null +++ b/input/regression/lilypond-book/GNUmakefile @@ -0,0 +1,10 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation texinfo +LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc lilypond-book + +COLLATED_FILES = $(OUT_FILES) + +include $(depth)/make/stepmake.make + +TITLE=lilypond-book Test Suite diff --git a/input/regression/lilypond-book/html-include-space-after-tag.html b/input/regression/lilypond-book/html-include-space-after-tag.html new file mode 100644 index 0000000000..0a408c1772 --- /dev/null +++ b/input/regression/lilypond-book/html-include-space-after-tag.html @@ -0,0 +1,9 @@ + + +Including a ly file with newline and spaces in the tags. + +include.ly + + + diff --git a/input/regression/lilypond-book/html-inline-newline-during-tag.html b/input/regression/lilypond-book/html-inline-newline-during-tag.html new file mode 100644 index 0000000000..658655cf3d --- /dev/null +++ b/input/regression/lilypond-book/html-inline-newline-during-tag.html @@ -0,0 +1,6 @@ + + +Some music in a line of text with a newline before the tag end. + + diff --git a/input/regression/lilypond-book/html-inline-no-options.html b/input/regression/lilypond-book/html-inline-no-options.html new file mode 100644 index 0000000000..8670c2ce8a --- /dev/null +++ b/input/regression/lilypond-book/html-inline-no-options.html @@ -0,0 +1,4 @@ + +Some music in a line of text. + + diff --git a/input/regression/lilypond-book/html-inline-option.html b/input/regression/lilypond-book/html-inline-option.html new file mode 100644 index 0000000000..dfb1099d95 --- /dev/null +++ b/input/regression/lilypond-book/html-inline-option.html @@ -0,0 +1,4 @@ + +Some music in a line of text. + + diff --git a/input/regression/lilypond-book/html-lilypond-block.html b/input/regression/lilypond-book/html-lilypond-block.html new file mode 100644 index 0000000000..dfaf1c1e81 --- /dev/null +++ b/input/regression/lilypond-book/html-lilypond-block.html @@ -0,0 +1,10 @@ + + +A simple lilypond snippet as a stand-alone paragraph: + + +\relative c' {\repeat unfold 20 c4} + + + + diff --git a/input/regression/lilypond-book/html-newline-after-tag.html b/input/regression/lilypond-book/html-newline-after-tag.html new file mode 100644 index 0000000000..2ad549cab8 --- /dev/null +++ b/input/regression/lilypond-book/html-newline-after-tag.html @@ -0,0 +1,10 @@ + + +Lilypond fragment with newlines before the end tags. + +\key c \minor c4 es g2 + + + diff --git a/input/regression/lilypond-book/html-space-after-tag.html b/input/regression/lilypond-book/html-space-after-tag.html new file mode 100644 index 0000000000..a0be117f61 --- /dev/null +++ b/input/regression/lilypond-book/html-space-after-tag.html @@ -0,0 +1,8 @@ + + +Lilypond fragment with spaces and tabs before the end tags. + +\key c \minor c4 es g2 + + + diff --git a/input/regression/lilypond-book/html-version-newline.html b/input/regression/lilypond-book/html-version-newline.html new file mode 100644 index 0000000000..8519705199 --- /dev/null +++ b/input/regression/lilypond-book/html-version-newline.html @@ -0,0 +1,6 @@ + + +Lilypond version: + + diff --git a/input/regression/lilypond-book/html-version.html b/input/regression/lilypond-book/html-version.html new file mode 100644 index 0000000000..3fdc33272d --- /dev/null +++ b/input/regression/lilypond-book/html-version.html @@ -0,0 +1,5 @@ + + +Lilypond version: + + diff --git a/input/regression/lilypond-book/include.ly b/input/regression/lilypond-book/include.ly new file mode 100644 index 0000000000..566a2a72b6 --- /dev/null +++ b/input/regression/lilypond-book/include.ly @@ -0,0 +1,4 @@ +\version "2.14.0" +\score { + \relative c'' { \key c \minor c4 es g2 } +} diff --git a/input/regression/lilypond-book/include2.ly b/input/regression/lilypond-book/include2.ly new file mode 100644 index 0000000000..91fd2e094b --- /dev/null +++ b/input/regression/lilypond-book/include2.ly @@ -0,0 +1,4 @@ +\version "2.14.0" +\score { + \relative c'' { \key c \minor d4 es g2 } +} diff --git a/input/regression/lilypond-book/include3.ily b/input/regression/lilypond-book/include3.ily new file mode 100644 index 0000000000..818ff12bd1 --- /dev/null +++ b/input/regression/lilypond-book/include3.ily @@ -0,0 +1,15 @@ +\version "2.13.20" + +\header { +doctitlees = "If you see this 'translated' doctitle, language detection work" + +texidoces = "If you see this 'translated' texidoc, language detection work" + + texidoc = "Original texidoc (you should not see this!)" + doctitle = "Original doctitle (you should not see this!)" +} + +\relative c'' { + c1 +} + diff --git a/input/regression/lilypond-book/papersize-docs.tely b/input/regression/lilypond-book/papersize-docs.tely new file mode 100644 index 0000000000..e47e57fb25 --- /dev/null +++ b/input/regression/lilypond-book/papersize-docs.tely @@ -0,0 +1,43 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@setfilename papersize-docs.info +@settitle Different paper sizes for documentation +@documentencoding UTF-8 +@documentlanguage en +@afourpaper + +@node Top +@top Different paper sizes for documentation. + +This is a sample of a small papersize, which is useful when you +want to add a @code{\book@{@}} around some input. + +@lilypond[verbatim,papersize=a8landscape] +\book { + \header { + title = "A scale in LilyPond" + } + \score { + \relative c' { + c4 d e f + } + } +} +@end lilypond + +Here is a different paper size, and a changed tagline. + +@lilypond[verbatim,quote,papersize=a8] +\book { + \header { + title = "A scale in LilyPond" + tagline = "... music notation for Everyone" + } + \score { + \relative c' { + c4 d e f + } + } +} +@end lilypond + +@bye diff --git a/input/regression/lilypond-book/suffix-html.html b/input/regression/lilypond-book/suffix-html.html new file mode 100644 index 0000000000..a8582f7817 --- /dev/null +++ b/input/regression/lilypond-book/suffix-html.html @@ -0,0 +1,8 @@ + + +Testing lilypond-book HTML mode with .html file suffix. + +\key c \minor c4 es g2 + + + diff --git a/input/regression/lilypond-book/suffix-htmly.htmly b/input/regression/lilypond-book/suffix-htmly.htmly new file mode 100644 index 0000000000..0c7e83af75 --- /dev/null +++ b/input/regression/lilypond-book/suffix-htmly.htmly @@ -0,0 +1,8 @@ + + +Testing lilypond-book HTML mode with .htmly file suffix. + +\key c \minor c4 es g2 + + + diff --git a/input/regression/lilypond-book/suffix-itely.itely b/input/regression/lilypond-book/suffix-itely.itely new file mode 100644 index 0000000000..8b89751f52 --- /dev/null +++ b/input/regression/lilypond-book/suffix-itely.itely @@ -0,0 +1,14 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename suffix-itely.info +@settitle lilypond-book Suffix test for itely + +@node Top +@top Suffix test for itely + +Testing lilypond-book texinfo mode with .itely file suffix. +@lilypond[fragment,relative=2] +\key c \minor c4 e d2 +@end lilypond + + +@bye diff --git a/input/regression/lilypond-book/suffix-latex.latex b/input/regression/lilypond-book/suffix-latex.latex new file mode 100644 index 0000000000..80fb0049b3 --- /dev/null +++ b/input/regression/lilypond-book/suffix-latex.latex @@ -0,0 +1,7 @@ +\documentclass{article} +\begin{document} +Testing lilypond-book tex mode with .latex file suffix. +\begin[fragment,relative=2]{lilypond} +\key c \minor c4 e d2 +\end{lilypond} +\end{document} diff --git a/input/regression/lilypond-book/suffix-lytex.lytex b/input/regression/lilypond-book/suffix-lytex.lytex new file mode 100644 index 0000000000..e9216aa0d0 --- /dev/null +++ b/input/regression/lilypond-book/suffix-lytex.lytex @@ -0,0 +1,7 @@ +\documentclass{article} +\begin{document} +Testing lilypond-book tex mode with .lytex file suffix. +\begin[fragment,relative=2]{lilypond} +\key c \minor c4 es d2 +\end{lilypond} +\end{document} diff --git a/input/regression/lilypond-book/suffix-lyxml.lyxml b/input/regression/lilypond-book/suffix-lyxml.lyxml new file mode 100644 index 0000000000..0e8c8ae9a4 --- /dev/null +++ b/input/regression/lilypond-book/suffix-lyxml.lyxml @@ -0,0 +1,14 @@ + + + + Suffix test for lyxml + Testing lilypond-book DocBook mode with .lyxml file suffix. + + + + \key c \minor c4 es g2 + + + + + \ No newline at end of file diff --git a/input/regression/lilypond-book/suffix-tely.tely b/input/regression/lilypond-book/suffix-tely.tely new file mode 100644 index 0000000000..60a2eb09ef --- /dev/null +++ b/input/regression/lilypond-book/suffix-tely.tely @@ -0,0 +1,14 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename suffix-tely.info +@settitle lilypond-book Suffix test for tely + +@node Top +@top Suffix test for tely + +Testing lilypond-book texinfo mode with .tely file suffix. +@lilypond[fragment,relative=2] +\key c \minor c4 e d2 +@end lilypond + + +@bye diff --git a/input/regression/lilypond-book/suffix-tex.tex b/input/regression/lilypond-book/suffix-tex.tex new file mode 100644 index 0000000000..d388c6f3e6 --- /dev/null +++ b/input/regression/lilypond-book/suffix-tex.tex @@ -0,0 +1,7 @@ +\documentclass{article} +\begin{document} +Testing lilypond-book tex mode with .tex file suffix. +\begin{lilypond}[fragment,relative=2] +\key c \minor c4 dis d2 +\end{lilypond} +\end{document} diff --git a/input/regression/lilypond-book/suffix-texi.texi b/input/regression/lilypond-book/suffix-texi.texi new file mode 100644 index 0000000000..0670343e96 --- /dev/null +++ b/input/regression/lilypond-book/suffix-texi.texi @@ -0,0 +1,14 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename suffix-texi.info +@settitle lilypond-book Suffix test for texi + +@node Top +@top Suffix test for texi + +Testing lilypond-book texinfo mode with .texi file suffix. +@lilypond[fragment,relative=2] +\key c \minor c4 e d2 +@end lilypond + + +@bye diff --git a/input/regression/lilypond-book/suffix-texinfo.texinfo b/input/regression/lilypond-book/suffix-texinfo.texinfo new file mode 100644 index 0000000000..11cea1521d --- /dev/null +++ b/input/regression/lilypond-book/suffix-texinfo.texinfo @@ -0,0 +1,14 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; -*- +@setfilename suffix-texinfo.info +@settitle lilypond-book Suffix test for texinfo + +@node Top +@top Suffix test for texinfo + +Testing lilypond-book texinfo mode with .texinfo file suffix. +@lilypond[fragment,relative=2] +\key c \minor c4 e d2 +@end lilypond + + +@bye diff --git a/input/regression/lilypond-book/suffix-xml.xml b/input/regression/lilypond-book/suffix-xml.xml new file mode 100644 index 0000000000..d04ce54e3f --- /dev/null +++ b/input/regression/lilypond-book/suffix-xml.xml @@ -0,0 +1,8 @@ + + +Testing lilypond-book HTML mode with .xml file suffix. + +\key c \minor c4 es g2 + + + diff --git a/input/regression/lilypond-book/tex-auto-linebreak.lytex b/input/regression/lilypond-book/tex-auto-linebreak.lytex new file mode 100644 index 0000000000..a76e9e17c8 --- /dev/null +++ b/input/regression/lilypond-book/tex-auto-linebreak.lytex @@ -0,0 +1,22 @@ +\documentclass[a4paper]{article} + +\begin{document} + +Documents for \verb+lilypond-book+ may freely mix music and text. The music +snippets will be properly line-broken. For example, + +\begin{lilypond} +\relative c' { + c2 g'2 \times 2/3 { f8 e d } c'2 g4 + c,2 g'2 \times 2/3 { f8 e d } c'2 g4 + c,2 g'2 \times 2/3 { f8 e d } c'2 g4 + c,2 g'2 \times 2/3 { f8 e d } c'2 g4 + c,2 g'2 \times 2/3 { f8 e d } c'2 g4 + c,2 g'2 \times 2/3 { f8 e d } c'2 g4 + c,2 g'2 \times 2/3 { f8 e d } c'2 g4 + c,2 g'2 \times 2/3 { f8 e d } c'2 g4 +} +\end{lilypond} + + +\end{document} \ No newline at end of file diff --git a/input/regression/lilypond-book/tex-comment-firstline.lytex b/input/regression/lilypond-book/tex-comment-firstline.lytex new file mode 100644 index 0000000000..5d0ae0c0a3 --- /dev/null +++ b/input/regression/lilypond-book/tex-comment-firstline.lytex @@ -0,0 +1,17 @@ +% A comment on the first line should not confuse lilypond-book's format +% detection +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +\section{A coment on the first line of the file} + +This should not confuse the auto-detection of lilypond-book... + +\begin{lilypond} +\score{ + \relative c'{c d e f g a b c} +} +\end{lilypond} + +\end{document} diff --git a/input/regression/lilypond-book/tex-comments.lytex b/input/regression/lilypond-book/tex-comments.lytex new file mode 100644 index 0000000000..72bf7f2a81 --- /dev/null +++ b/input/regression/lilypond-book/tex-comments.lytex @@ -0,0 +1,28 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + + +\subsection{LaTeX comments} +This is a line with lilypond code +after the comment char % \lilypond{\context Voice <>} +% \lilypond{\context Voice <>} + +If you do not see any music above +this line, then lilypond-book is handling latex comments pretty well :-) + +The following snippet is preceded by a comment that would start a lilypond +environment + +%%\begin{lilypond} +\begin{lilypond}[11pt,fragment] +\context Voice <> +\end{lilypond} + +A single-line comment inside a fragment does not confuse lilypond-book: + +\begin{lilypond}[fragment] +c d e %\score +\end{lilypond} + +\end{document} diff --git a/input/regression/lilypond-book/tex-compatibility-mode.lytex b/input/regression/lilypond-book/tex-compatibility-mode.lytex new file mode 100644 index 0000000000..aab288e7b3 --- /dev/null +++ b/input/regression/lilypond-book/tex-compatibility-mode.lytex @@ -0,0 +1,10 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} +\section{LilyPond snippets with deprecated options} + +A snippet with a deprecated option, triggering compatibility mode: + +\lilypond[11pt,fragment]{c' e' g'} + +\end{document} diff --git a/input/regression/lilypond-book/tex-footnote.lytex b/input/regression/lilypond-book/tex-footnote.lytex new file mode 100644 index 0000000000..cd7c9307c4 --- /dev/null +++ b/input/regression/lilypond-book/tex-footnote.lytex @@ -0,0 +1,11 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} +\section{LilyPond snippets in a footnote} + +Test for snippets in a footnote\footnote{Here's the footnote: +\lilypond[fragment]{c' e' g'} }: +\marginpar{ Yes, even as marginpar +\lilypond[fragment]{c' d' e'} } + +\end{document} diff --git a/input/regression/lilypond-book/tex-fragment.lytex b/input/regression/lilypond-book/tex-fragment.lytex new file mode 100644 index 0000000000..4adc809b8a --- /dev/null +++ b/input/regression/lilypond-book/tex-fragment.lytex @@ -0,0 +1,19 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +\section{Using lilypond-book's fragment option} + +If a snippet is not a fully valid LilyPond file, you have +to use the \verb|fragment| option: + +\begin{lilypond}[fragment] +c d e +\end{lilypond} + +% TODO: \verb does not yet work!!! +There is also a shorthand version %\verb|\lilypond[fragment]{c' e' g'}|: + +\lilypond[fragment]{c' e' g'} + +\end{document} diff --git a/input/regression/lilypond-book/tex-graphics-package-added.lytex b/input/regression/lilypond-book/tex-graphics-package-added.lytex new file mode 100644 index 0000000000..d94360ab54 --- /dev/null +++ b/input/regression/lilypond-book/tex-graphics-package-added.lytex @@ -0,0 +1,10 @@ +\documentclass[a4paper]{article} + +\begin{document} + +\section{Lilypond-book should add the graphicx package} + +If a latex file does not yet include the graphicx package, it is added by +lilypond-book. + +\end{document} diff --git a/input/regression/lilypond-book/tex-include-file.lytex b/input/regression/lilypond-book/tex-include-file.lytex new file mode 100644 index 0000000000..6705a7ff14 --- /dev/null +++ b/input/regression/lilypond-book/tex-include-file.lytex @@ -0,0 +1,5 @@ +\documentclass{article} +\begin{document} +Including Lilypond file: +\lilypondfile{include2.ly} +\end{document} diff --git a/input/regression/lilypond-book/tex-include-options.lytex b/input/regression/lilypond-book/tex-include-options.lytex new file mode 100644 index 0000000000..a53fb5dcd0 --- /dev/null +++ b/input/regression/lilypond-book/tex-include-options.lytex @@ -0,0 +1,5 @@ +\documentclass{article} +\begin{document} +Including Lilypond file with options (quote and noindent): +\lilypondfile[quote,noindent]{include2.ly} +\end{document} diff --git a/input/regression/lilypond-book/tex-inline-lilypond.lytex b/input/regression/lilypond-book/tex-inline-lilypond.lytex new file mode 100644 index 0000000000..0d4886a5b0 --- /dev/null +++ b/input/regression/lilypond-book/tex-inline-lilypond.lytex @@ -0,0 +1,4 @@ +\documentclass{article} +\begin{document} +Adding Lilypond code inline: \lilypond[relative=2]{ d g ceses } +\end{document} diff --git a/input/regression/lilypond-book/tex-lilypond-block.lytex b/input/regression/lilypond-book/tex-lilypond-block.lytex new file mode 100644 index 0000000000..ad76d3c2f5 --- /dev/null +++ b/input/regression/lilypond-book/tex-lilypond-block.lytex @@ -0,0 +1,15 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +\section{Simple lilypond blocks} + +A simple scale: + +\begin{lilypond} +\score{ + \relative c' { c d e f g a b c } +} +\end{lilypond} + +\end{document} diff --git a/input/regression/lilypond-book/tex-lilypond-inside-itemize.lytex b/input/regression/lilypond-book/tex-lilypond-inside-itemize.lytex new file mode 100644 index 0000000000..91d78bb60f --- /dev/null +++ b/input/regression/lilypond-book/tex-lilypond-inside-itemize.lytex @@ -0,0 +1,21 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +\section{Lilypond snippets inside lists:} + +Itemize environment: +\begin{itemize} +\item +\lilypond[11pt,fragment]{ c'} do +\item +\lilypond[11pt,fragment]{d'} re +\item +\lilypond[11pt,fragment]{e'} mi +\item +\lilypond[11pt,fragment]{f'} fa +\item +\lilypond[11pt,fragment]{g'} sol +\end{itemize} + +\end{document} diff --git a/input/regression/lilypond-book/tex-lilypond-inside-table.lytex b/input/regression/lilypond-book/tex-lilypond-inside-table.lytex new file mode 100644 index 0000000000..a75c4df735 --- /dev/null +++ b/input/regression/lilypond-book/tex-lilypond-inside-table.lytex @@ -0,0 +1,20 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +\section{Lilypond snippets inside tables:} + +Tables: + +\begin{tabular}{|l|l|r|} +\hline +\em Notes & \em Name \\ +\hline +\lilypond[11pt,fragment,filename="cdur"]{\context Voice <>} & major \\ +\lilypond[11pt,fragment]{\context Voice <>} & minor \\ +\lilypond[11pt,fragment]{\context Voice <>} & diminished \\ +\lilypond[11pt,fragment]{\context Voice <>} & augmented \\ +\hline +\end{tabular} + +\end{document} diff --git a/input/regression/lilypond-book/tex-lilypondversion.lytex b/input/regression/lilypond-book/tex-lilypondversion.lytex new file mode 100644 index 0000000000..d8102c7672 --- /dev/null +++ b/input/regression/lilypond-book/tex-lilypondversion.lytex @@ -0,0 +1,10 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +Version: \lilypondversion + +A digit immediately after the version: \lilypondversion9 +A formula immediately after the version: \lilypondversion$x_k$ + +\end{document} diff --git a/input/regression/lilypond-book/tex-paragraphs.lytex b/input/regression/lilypond-book/tex-paragraphs.lytex new file mode 100644 index 0000000000..da2452981e --- /dev/null +++ b/input/regression/lilypond-book/tex-paragraphs.lytex @@ -0,0 +1,30 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + + +\section{Paragraphs and line spacing} + +Testing of spacing. The next music is surrounded by an empty line. +text text text text text text text text text text text text +text text text text text text text text text text text text + +\begin{lilypond} +\score{ \relative c'{ c d e f g a b c} } +\end{lilypond} + +text text text text text text text text text text text text +text text text text text text text text text text text text +text text text text text text text text text text text text + +Next has no empty lines. +text text text text text text text text text text text text +text text text text text text text text text text text text +text text text text text text text text text text text text +\begin{lilypond} +\score{ \relative c'{ c d e f g a b c} } +\end{lilypond} +text text text text text text text text text text text text +text text text text text text text text text text text text + +\end{document} diff --git a/input/regression/lilypond-book/tex-snippet-options.lytex b/input/regression/lilypond-book/tex-snippet-options.lytex new file mode 100644 index 0000000000..1f175af37e --- /dev/null +++ b/input/regression/lilypond-book/tex-snippet-options.lytex @@ -0,0 +1,38 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +\section{Snippet options} + +Fragment: +\begin{lilypond}[fragment] +c d e %\score +\end{lilypond} + +This shows the verbatim option: +\begin{lilypond}[fragment,verbatim] +c' d' e' +\end{lilypond} + +printfilename: +\lilypondfile[printfilename]{include.ly} + +staffsize: +\begin{lilypond}[staffsize=7,fragment] +\context Voice <> +\end{lilypond} +\lilypond[fragment,staffsize=7]{\context Voice <>} + +relative: +\lilypond[relative=1]{ c4 f b e } + +quote: +\lilypond[quote,fragment]{\relative c' c1 } + +fragment, quote, staffsize=26, verbatim: +\begin{lilypond}[fragment,quote,staffsize=26,verbatim] + c'4 f16 +\end{lilypond} + + +\end{document} diff --git a/input/regression/lilypond-book/tex-twocolumn.lytex b/input/regression/lilypond-book/tex-twocolumn.lytex new file mode 100644 index 0000000000..69c10bb7be --- /dev/null +++ b/input/regression/lilypond-book/tex-twocolumn.lytex @@ -0,0 +1,17 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} +\twocolumn + +\section{A latex file with two columns} + +In this example, the width auto-detection shall detect the two columns +and produce snippets that have the smaller width for a column! + +\begin{lilypond} +\score{ + \relative c'{c d e f g a b c | c d e f g a b c | c d e f g a b c} +} +\end{lilypond} + +\end{document} diff --git a/input/regression/lilypond-book/tex-verbatim.lytex b/input/regression/lilypond-book/tex-verbatim.lytex new file mode 100644 index 0000000000..363138d454 --- /dev/null +++ b/input/regression/lilypond-book/tex-verbatim.lytex @@ -0,0 +1,45 @@ +\documentclass[a4paper, 12pt]{article} + +\begin{document} + +\section{verb and verbatim} + +This file should not contain (and produce) any lilypond images! + +Snippets inside a verbatim environment or a comment are not run through +lilypond, but left as is. + +% TODO: These do not yet work, as \verb is explicitly disabled in lilypond-book for now! +% \verb|\lilypond[fragment]{c' d' e'}| +% +% and + +\begin{verbatim} +\begin{lilypond} +c d e +\end{lilypond} +\end{verbatim} + + +As you can see, the begin/end lilypond commands inside +do not confuse lilypond-book. + +% TODO: These do not yet work, as \verb is explicitly disabled in lilypond-book for now! +% \verb|\begin{lilypond}[fragment]c d e\end{lilypond}| + +% \verb+\lilypondfile[quote,noindent]{screech-boink.ly}+ + +Neither does a verbatim inside verb: + +\verb|\begin{verbatim}\begin{lilypond}[fragment]c d e\end{lilypond}\end{verbatim}| + +or verb inside verbatim: + +\begin{verbatim} +\verb|\begin{lilypond}[fragment]c d e\end{lilypond}| +\end{verbatim} + +But these are just to stress \verb|lilypond-book|. + + +\end{document} diff --git a/input/regression/lilypond-book/tex-version.lytex b/input/regression/lilypond-book/tex-version.lytex new file mode 100644 index 0000000000..9509cc8a31 --- /dev/null +++ b/input/regression/lilypond-book/tex-version.lytex @@ -0,0 +1,4 @@ +\documentclass{article} +\begin{document} +Lilypond version: \lilypondversion +\end{document} diff --git a/input/regression/lilypond-book/texinfo-include-language-detection-included.itely b/input/regression/lilypond-book/texinfo-include-language-detection-included.itely new file mode 100644 index 0000000000..e8b101b68b --- /dev/null +++ b/input/regression/lilypond-book/texinfo-include-language-detection-included.itely @@ -0,0 +1,2 @@ +The texidoc of the following snippet should be "translated": +@lilypondfile[printfilename,texidoc,doctitle]{include3.ily} diff --git a/input/regression/lilypond-book/texinfo-include-language-detection.tely b/input/regression/lilypond-book/texinfo-include-language-detection.tely new file mode 100644 index 0000000000..d4c4c1e396 --- /dev/null +++ b/input/regression/lilypond-book/texinfo-include-language-detection.tely @@ -0,0 +1,13 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@setfilename texinfo-language-detection.info +@settitle Texinfo language detection +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@node Top +@top Texinfo language detection + +@include texinfo-include-language-detection-included.itely + +@bye diff --git a/input/regression/lilypond-book/texinfo-language-detection.tely b/input/regression/lilypond-book/texinfo-language-detection.tely new file mode 100644 index 0000000000..7bf5289342 --- /dev/null +++ b/input/regression/lilypond-book/texinfo-language-detection.tely @@ -0,0 +1,15 @@ +\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@setfilename texinfo-language-detection.info +@settitle Texinfo language detection +@documentencoding UTF-8 +@documentlanguage es +@afourpaper + +@node Top +@top Texinfo language detection + +The texidoc of the following snippet should be "translated": +@lilypondfile[printfilename,texidoc,doctitle]{include3.ily} + + +@bye diff --git a/input/regression/line-arrows.ly b/input/regression/line-arrows.ly index fad16d4159..dfae4a2f2a 100644 --- a/input/regression/line-arrows.ly +++ b/input/regression/line-arrows.ly @@ -2,7 +2,7 @@ texidoc = "Arrows can be applied to text-spanners and line-spanners (such as the Glissando)" } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/line-dash-small-period.ly b/input/regression/line-dash-small-period.ly index e55b6ec602..def6afe7cd 100644 --- a/input/regression/line-dash-small-period.ly +++ b/input/regression/line-dash-small-period.ly @@ -5,9 +5,9 @@ } -\version "2.12.0" +\version "2.14.0" -\relative { +\relative c' { \override Staff.OttavaBracket #'dash-period = #0.1 \override Score.OttavaBracket #'dash-fraction = #1 diff --git a/input/regression/line-dashed-period.ly b/input/regression/line-dashed-period.ly index c370429bd2..4051398e65 100644 --- a/input/regression/line-dashed-period.ly +++ b/input/regression/line-dashed-period.ly @@ -5,7 +5,7 @@ starts and ends on a full dash. " } -\version "2.12.0" +\version "2.14.0" \layout { indent = 0.0\mm @@ -15,7 +15,6 @@ starts and ends on a full dash. " \relative << \new Staff { \crescTextCresc - \set crescendoSpanner = #'line c1_\< c c1\! } \new Staff { diff --git a/input/regression/line-style-zigzag-spacing.ly b/input/regression/line-style-zigzag-spacing.ly index e2de30aedc..8aaa4a0104 100644 --- a/input/regression/line-style-zigzag-spacing.ly +++ b/input/regression/line-style-zigzag-spacing.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Setting @code{'zigzag} style for spanners does not diff --git a/input/regression/line-style.ly b/input/regression/line-style.ly index e2b9c99b73..f3d31640ad 100644 --- a/input/regression/line-style.ly +++ b/input/regression/line-style.ly @@ -1,10 +1,7 @@ +\version "2.14.0" + \header { - texidoc = "Cover all line styles available" - -} -\version "2.12.0" -\paper { - ragged-right = ##T + texidoc = "Cover all line styles available." } \relative c'' { @@ -16,9 +13,12 @@ d,2 \glissando d'2 \override Glissando #'style = #'dotted-line d,2 \glissando d'2 - + \override Glissando #'style = #'zigzag d,2 \glissando d'2 \override Glissando #'style = #'trill d,2 \glissando d'2 + + \override Glissando #'style = #'none + d,2 \glissando d'2 } diff --git a/input/regression/lyric-combine-empty-warning.ly b/input/regression/lyric-combine-empty-warning.ly new file mode 100644 index 0000000000..f87a266fc9 --- /dev/null +++ b/input/regression/lyric-combine-empty-warning.ly @@ -0,0 +1,23 @@ +\version "2.14.2" + +\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 { } +>> diff --git a/input/regression/lyric-combine-new.ly b/input/regression/lyric-combine-new.ly index 35824868cc..16cc40bf18 100644 --- a/input/regression/lyric-combine-new.ly +++ b/input/regression/lyric-combine-new.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "With the @code{\\lyricsto} mechanism, individual lyric lines can be associated with one melody line. Each lyric line diff --git a/input/regression/lyric-combine-polyphonic.ly b/input/regression/lyric-combine-polyphonic.ly index 1420c43521..eced3eae5e 100644 --- a/input/regression/lyric-combine-polyphonic.ly +++ b/input/regression/lyric-combine-polyphonic.ly @@ -1,8 +1,8 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc ="Polyphonic rhythms and rests do not disturb -@code{\lyricsto}." +@code{\\lyricsto}." } diff --git a/input/regression/lyric-combine-switch-voice-2.ly b/input/regression/lyric-combine-switch-voice-2.ly index ac2c7a4286..e8e2e97b3e 100644 --- a/input/regression/lyric-combine-switch-voice-2.ly +++ b/input/regression/lyric-combine-switch-voice-2.ly @@ -2,7 +2,7 @@ { texidoc = "switching voices in the middle of the lyrics is possible using @code{lyricsto}." } -\version "2.12.0" +\version "2.14.0" << \relative \new Voice = "lahlah" { diff --git a/input/regression/lyric-combine-switch-voice.ly b/input/regression/lyric-combine-switch-voice.ly index adc362e02b..1b50b1a2a1 100644 --- a/input/regression/lyric-combine-switch-voice.ly +++ b/input/regression/lyric-combine-switch-voice.ly @@ -5,7 +5,7 @@ if the switch occurs together with context instantiation." } -\version "2.12.0" +\version "2.14.0" << \relative \new Voice = "lahlah" { diff --git a/input/regression/lyric-combine.ly b/input/regression/lyric-combine.ly index 424653ee48..0b5bf4db9c 100644 --- a/input/regression/lyric-combine.ly +++ b/input/regression/lyric-combine.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/lyric-extender-broken.ly b/input/regression/lyric-extender-broken.ly index f35111b316..0de0f3863a 100644 --- a/input/regression/lyric-extender-broken.ly +++ b/input/regression/lyric-extender-broken.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/lyric-extender-completion.ly b/input/regression/lyric-extender-completion.ly new file mode 100644 index 0000000000..7e7a79628d --- /dev/null +++ b/input/regression/lyric-extender-completion.ly @@ -0,0 +1,21 @@ +\version "2.14.0" + +\header { + + texidoc= "A LyricExtender should end at the right place even if there are more notes in the voice than lyrics." + +} + +<< + +\new Staff \relative c' { + \new Voice = "upper" { + \voiceTwo + g'1( | + c,) | + d | + } +} +\new Lyrics \lyricsto "upper" \lyricmode { Ah __ } + +>> diff --git a/input/regression/lyric-extender-includegraces.ly b/input/regression/lyric-extender-includegraces.ly new file mode 100644 index 0000000000..693555693d --- /dev/null +++ b/input/regression/lyric-extender-includegraces.ly @@ -0,0 +1,17 @@ +\version "2.14.0" + +\header { + texidoc=" +If @code{includeGraceNotes} is enabled, lyric extenders work as +expected also for syllables starting under grace notes. +" +} + +\relative c' { + c2 \grace { c16([ d e f] } g2) + f1 +} +\addlyrics { + \set includeGraceNotes = ##t + _ Ah __ fa +} diff --git a/input/regression/lyric-extender-no-heads.ly b/input/regression/lyric-extender-no-heads.ly index 8bafe34191..f263db9ae7 100644 --- a/input/regression/lyric-extender-no-heads.ly +++ b/input/regression/lyric-extender-no-heads.ly @@ -6,7 +6,7 @@ without a lyric attached." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/lyric-extender-rest.ly b/input/regression/lyric-extender-rest.ly index ccf9aff74d..94d84c2a6d 100644 --- a/input/regression/lyric-extender-rest.ly +++ b/input/regression/lyric-extender-rest.ly @@ -10,7 +10,7 @@ is not terminated upon encountering a rest. " ragged-right = ##T } -\version "2.12.0" +\version "2.14.0" << \new Voice = "one" \relative c'' { diff --git a/input/regression/lyric-extender-right-margin.ly b/input/regression/lyric-extender-right-margin.ly index 0317b53493..62029c715b 100644 --- a/input/regression/lyric-extender-right-margin.ly +++ b/input/regression/lyric-extender-right-margin.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Extenders will not protrude into the right margin" } @@ -6,7 +6,6 @@ \score{ { \relative c' { - \override Score.PaperColumn #'keep-inside-line = ##t c4 d e f ~ | \break f4 e d c | } @@ -16,4 +15,4 @@ e d c } } -} \ No newline at end of file +} diff --git a/input/regression/lyric-extender.ly b/input/regression/lyric-extender.ly index 07cbce7772..66a0360bcb 100644 --- a/input/regression/lyric-extender.ly +++ b/input/regression/lyric-extender.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/lyric-hyphen-break.ly b/input/regression/lyric-hyphen-break.ly index 4e906329ac..b1ecf25294 100644 --- a/input/regression/lyric-hyphen-break.ly +++ b/input/regression/lyric-hyphen-break.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/lyric-hyphen-grace.ly b/input/regression/lyric-hyphen-grace.ly new file mode 100644 index 0000000000..9535ea232a --- /dev/null +++ b/input/regression/lyric-hyphen-grace.ly @@ -0,0 +1,31 @@ +\header { + + texidoc = "No hyphen should be printed under a grace note at the start +of a line if the grace's main note starts a new syllable." +} + +\version "2.14.0" +<< + \new Staff { + \appoggiatura f'8 g'2 g'( | \break + \appoggiatura f'8 g'2) \appoggiatura f'8 g'2 | \break + \appoggiatura f'8 g'2 g' | \break + g'2 g' | + } + \addlyrics { + \lyricmode { + bla -- bla -- bla -- bla -- bla -- bla -- bla + } + } + \new Staff { + g'2 g' | + g'2 g' | + g'2 g' | + g'2 g' | + } + \addlyrics { + \lyricmode { + bla -- bla -- bla -- bla -- bla -- bla -- bla -- bla + } + } +>> diff --git a/input/regression/lyric-hyphen-retain.ly b/input/regression/lyric-hyphen-retain.ly index e567981a87..9b965b0723 100644 --- a/input/regression/lyric-hyphen-retain.ly +++ b/input/regression/lyric-hyphen-retain.ly @@ -9,12 +9,12 @@ property, but it may be shortened down to @code{minimum-length} in tight situations. If in this it still does not fit, the hyphen will be omitted. -Like all overrides within @code{\lyricsto} and @code{\addlyrics}, the +Like all overrides within @code{\\lyricsto} and @code{\\addlyrics}, the effect of a setting is delayed is one syllable." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/lyric-hyphen.ly b/input/regression/lyric-hyphen.ly index ae3ea0e7eb..1a285722b7 100644 --- a/input/regression/lyric-hyphen.ly +++ b/input/regression/lyric-hyphen.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "In lyrics, hyphens may be used." } diff --git a/input/regression/lyric-ignore-melisma-alignment.ly b/input/regression/lyric-ignore-melisma-alignment.ly index dec5231a5a..994b8cfc04 100644 --- a/input/regression/lyric-ignore-melisma-alignment.ly +++ b/input/regression/lyric-ignore-melisma-alignment.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "If @code{ignoreMelismata} is set, lyrics should remain diff --git a/input/regression/lyric-melisma-alignment.ly b/input/regression/lyric-melisma-alignment.ly new file mode 100644 index 0000000000..67d82abe8c --- /dev/null +++ b/input/regression/lyric-melisma-alignment.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + texidoc = "@code{lyricMelismaAlignment} sets the default alignment for melismata. +It works with both automatic and manual melismata." +} + +\relative c' { + c4^"auto"( d e f) + \set melismaBusyProperties = #'() + c4^"manual" d e f +} +\addlyrics { + \set lyricMelismaAlignment = #RIGHT + right-align __ + \set lyricMelismaAlignment = #CENTER + center __ _ _ _ +} diff --git a/input/regression/lyric-melisma-manual.ly b/input/regression/lyric-melisma-manual.ly index 4072c40d7b..a2d608abd8 100644 --- a/input/regression/lyric-melisma-manual.ly +++ b/input/regression/lyric-melisma-manual.ly @@ -1,17 +1,15 @@ -\header { - - texidoc = "Melisma's may be entered manually by substituting - @code{_} for lyrics on notes that are part of the melisma." - -} +\version "2.14.0" -\version "2.12.0" -\paper { - ragged-right = ##t +\header { + texidoc = "Melismata may be entered manually by substituting +@code{_} for lyrics on notes that are part of the melisma." } -\relative { +\relative c' { \set melismaBusyProperties = #'() - c d( e) f f( e) e e } -\addlyrics - { Ky -- _ _ ri __ _ _ _ e } + c4 d( e) f + f4( e) e e +} +\addlyrics { + Ky -- _ _ ri __ _ _ _ e +} diff --git a/input/regression/lyric-melisma-melisma.ly b/input/regression/lyric-melisma-melisma.ly new file mode 100644 index 0000000000..af0290ab22 --- /dev/null +++ b/input/regression/lyric-melisma-melisma.ly @@ -0,0 +1,11 @@ +\version "2.14.0" +\header { + texidoc = "A syllable aligned with a melisma delimited with +@code{\melisma} and @code{\melismaEnd} should be left-aligned. +" +} + +\relative c' { + c4 c c16\melisma d e f \melismaEnd g4 +} +\addlyrics { ha ha looong __ ho } diff --git a/input/regression/lyric-no-association-rhythm.ly b/input/regression/lyric-no-association-rhythm.ly index 4003d721f4..669a53ae1d 100644 --- a/input/regression/lyric-no-association-rhythm.ly +++ b/input/regression/lyric-no-association-rhythm.ly @@ -8,7 +8,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } \score { diff --git a/input/regression/lyric-phrasing.ly b/input/regression/lyric-phrasing.ly index 93d143c6e4..34724d77af 100644 --- a/input/regression/lyric-phrasing.ly +++ b/input/regression/lyric-phrasing.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " diff --git a/input/regression/lyric-tie.ly b/input/regression/lyric-tie.ly index 049bb4a47d..e1f2117adc 100644 --- a/input/regression/lyric-tie.ly +++ b/input/regression/lyric-tie.ly @@ -3,7 +3,7 @@ texidoc = "Tildes in lyric syllables are converted to tie symbols." } -\version "2.12.0" +\version "2.14.0" \lyrics { wa~o~a diff --git a/input/regression/lyrics-after-grace.ly b/input/regression/lyrics-after-grace.ly index d168464638..22f9c3a976 100644 --- a/input/regression/lyrics-after-grace.ly +++ b/input/regression/lyrics-after-grace.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/lyrics-aligned-above-stay-close-to-staff.ly b/input/regression/lyrics-aligned-above-stay-close-to-staff.ly new file mode 100644 index 0000000000..1514066784 --- /dev/null +++ b/input/regression/lyrics-aligned-above-stay-close-to-staff.ly @@ -0,0 +1,45 @@ +\version "2.14.0" + +\header { + title = "Aligned-above lyrics should stay close to their staff" + texidoc = "Lyrics aligned above a context should stay close to that +context when stretching. The Bass I lyric line stays with the +Bass staff. +" +} + +\paper { ragged-last-bottom = ##f } + +tune = \relative c { \repeat unfold 2 { c4( e) g2 | \break c1 } +\bar "|." } + +\score { + + \context ChoirStaff << + + \new Staff = tenors << + \clef "treble_8" + \new Voice = tenori { \voiceOne \tune } + \new Voice = tenorii { \voiceTwo \tune } + >> + \new Staff = basses << + \clef "bass" + \new Voice = bassi { \voiceOne \tune } + \new Voice = bassii { \voiceTwo \tune } + >> + + \new Lyrics \with {alignAboveContext=tenors} \lyricsto tenori { + Te -- nor one! A -- _ bove! + } + \new Lyrics \with {alignBelowContext=tenors} \lyricsto tenorii { + Te -- nor two! Be -- _ low! + } + \new Lyrics \with {alignAboveContext=basses} \lyricsto bassi { + Bas -- ses one! A -- _ bove! + } + \new Lyrics \with {alignBelowContext=basses} \lyricsto bassii { + Bas -- ses two! Be -- _ low! + } + >> + \layout {} + } diff --git a/input/regression/lyrics-bar.ly b/input/regression/lyrics-bar.ly index f8b7d83575..1a82752274 100644 --- a/input/regression/lyrics-bar.ly +++ b/input/regression/lyrics-bar.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" @@ -11,27 +11,29 @@ lyrics do not collide with barlines. ragged-right = ##t } -<< - \new Staff \with - { -% \remove "Bar_engraver" - } - { - b1 \bar "|:" b1 \bar ":|" +\relative c'' << + \new Voice = "a"{ + b1 \bar "|:" b1 \bar ":|" b1 \bar "|." } - \context Lyrics \with { + \new Lyrics \with { \consists "Bar_engraver" \consists "Separating_line_group_engraver" - \override BarLine #'bar-size = #4 - } \lyricmode { - looooooooooooooooooooooooooooooooooong1 syllable + } \lyricsto "a" { + bars lengthened if } - \lyrics { - no Bar_Engraver_Bar_Engraver_Bar_Engraver + \new Lyrics \lyricsto "a" { + required for noncollision + } + \new Staff { + b1 b1 b1 } - \new Staff \with { -% \remove "Bar_engraver" - } { b1 b1 } >> - +\layout { + \context { + \Lyrics + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'minimum-distance = #4.2 + \override LyricText #'Y-offset = #-0.7 + \override BarLine #'bar-extent = #'(-2 . 2) + } +} diff --git a/input/regression/lyrics-includegraces.ly b/input/regression/lyrics-includegraces.ly new file mode 100644 index 0000000000..a3e778459d --- /dev/null +++ b/input/regression/lyrics-includegraces.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header { + texidoc=" +Setting @code{includeGraceNotes} enables lyrics syllables to be +assigned to grace notes. +" +} + +\relative c' { + f4 \appoggiatura a32 b4 + \grace { f16[ a16] } b2 + \afterGrace b2 { f16[ a16] } + \appoggiatura a32 b4 + \acciaccatura a8 b4 +} +\addlyrics { + normal + \set includeGraceNotes = ##t + case, + gra -- ce case, + after -- grace case, + \set ignoreMelismata = ##t + app. case, + acc. case. +} diff --git a/input/regression/lyrics-melisma-beam.ly b/input/regression/lyrics-melisma-beam.ly index 008bb69e7b..4d1f4fc158 100644 --- a/input/regression/lyrics-melisma-beam.ly +++ b/input/regression/lyrics-melisma-beam.ly @@ -1,7 +1,8 @@ -\version "2.12.0" +\version "2.14.0" \header { - texidoc = "Melismata are triggered by manual beams." + texidoc = "Melismata are triggered by manual beams. Notes in a + melisma take their natural spacing over a long syllable." } \layout { ragged-right = ##t } @@ -13,9 +14,9 @@ \new Staff \relative c'' { \set Staff.autoBeaming = ##f - c8 c8[ c8 c8] c8 } - - \lyricsto "" \new Lyrics \lyricmode { bla bla bla } + g4 d8[ b8 d8 g8] g4 + } + \lyricsto "" \new Lyrics \lyricmode { bla blaa -- bla } >> diff --git a/input/regression/lyrics-no-notes.ly b/input/regression/lyrics-no-notes.ly index 3c6ef07e79..924127a701 100644 --- a/input/regression/lyrics-no-notes.ly +++ b/input/regression/lyrics-no-notes.ly @@ -6,8 +6,9 @@ paper column is very wide." \layout{ ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" << + \override Score.PaperColumn #'keep-inside-line = ##f \new Staff \relative c' { \key aes \major \context Voice = "1" { diff --git a/input/regression/lyrics-tenor-clef.ly b/input/regression/lyrics-tenor-clef.ly index bc1f016967..3d916d89bc 100644 --- a/input/regression/lyrics-tenor-clef.ly +++ b/input/regression/lyrics-tenor-clef.ly @@ -2,18 +2,11 @@ texidoc = "Lyrics are not lowered despite the presence of an octavation 8." } -\version "2.12.0" -\layout { - \context { - \Staff - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - \context { - \Lyrics - \override VerticalAxisGroup #'minimum-Y-extent = ##f - } - ragged-right = ##t +\version "2.14.0" + +\paper { + ragged-right = ##t } -\relative { \clef "G_8" c c c c } +\relative c' { \clef "G_8" c c c c } \addlyrics { bla bla bla bla } diff --git a/input/regression/markup-arrows.ly b/input/regression/markup-arrows.ly index aaa4d0cbe2..2dfa45e6c5 100644 --- a/input/regression/markup-arrows.ly +++ b/input/regression/markup-arrows.ly @@ -26,4 +26,4 @@ } } -\version "2.12.0" +\version "2.14.0" diff --git a/input/regression/markup-bidi-explicit-embedding.ly b/input/regression/markup-bidi-explicit-embedding.ly new file mode 100644 index 0000000000..2393956321 --- /dev/null +++ b/input/regression/markup-bidi-explicit-embedding.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + texidoc = " +The explicit directional embedding codes, U+202A and U+202B, are +supported in single-line markup strings. The embeddings must be +terminated with the pop directional formatting character, U+202C. +" +} + +\markup { + \column { + "אבה אבה \"ABC!\" אבה אבה!" + "אבה אבה \"‪ABC!‬\" אבה אבה!" + \null + "abc def \"אבה!\" ghi jkl!" + "abc def \"‫אבה!‬\" ghi jkl!" + } +} diff --git a/input/regression/markup-bidi-explicit-overrides.ly b/input/regression/markup-bidi-explicit-overrides.ly new file mode 100644 index 0000000000..5e1b0b76a8 --- /dev/null +++ b/input/regression/markup-bidi-explicit-overrides.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + texidoc = " +The explicit directional override codes, U+202D and U+202E, are +supported in single-line markup strings. The overrides must be +terminated with the pop directional formatting character, U+202C. +" +} + +\markup { + \column { + "אבג דהו זחט יךכ" + "‭אבג דהו זחט יךכ‬" + \null + "abc def ghi jkl" + "‮abc def ghi jkl‬" + } +} diff --git a/input/regression/markup-bidi-implicit-marks.ly b/input/regression/markup-bidi-implicit-marks.ly new file mode 100644 index 0000000000..234e44be41 --- /dev/null +++ b/input/regression/markup-bidi-implicit-marks.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + texidoc = " +The implicit directional marks, U+200E and U+200F, are supported +in single-line markup strings. +" +} + +\markup { + \column { + "אבה \"ABC!\" אבה" + "אבה \"ABC!‎\" אבה" + \null + "abc \"אבה!\" def" + "abc \"אבה!‏\" def" + } +} diff --git a/input/regression/markup-bidi-pango.ly b/input/regression/markup-bidi-pango.ly index e950beaa66..e532d17106 100644 --- a/input/regression/markup-bidi-pango.ly +++ b/input/regression/markup-bidi-pango.ly @@ -1,10 +1,12 @@ -\version "2.12.0" +\version "2.14.0" \header { - texidoc = "A single pango string is considered to have one -direction. The hebrew in this example (including punctuation) is set -right-to-left, with the first word (containing 1) on the right." + texidoc = "A single Pango string is processed according to the +Unicode Bidirectional Algorithm. The strong Hebrew characters in +this example are set right-to-left, and the Latin numerals, space +character, and punctuation are set according to the rules of the +algorithm." } diff --git a/input/regression/markup-brace-warning.ly b/input/regression/markup-brace-warning.ly new file mode 100644 index 0000000000..904a70a36b --- /dev/null +++ b/input/regression/markup-brace-warning.ly @@ -0,0 +1,17 @@ +\version "2.14.0" + +#(ly:set-option 'warning-as-error #f) + +\header { + texidoc = "If @code{\\left-brace} or @code{\\right-brace} cannot +find a match for the given point size, it should default +gracefully to either @code{brace0} or @code{brace575} and display +a warning. +" +} + +\markup { + % warning message expected; should default to 10.5 pt for + % global-staff-size = 20 + \left-brace #10 +} diff --git a/input/regression/markup-braces.ly b/input/regression/markup-braces.ly new file mode 100644 index 0000000000..5878f18789 --- /dev/null +++ b/input/regression/markup-braces.ly @@ -0,0 +1,15 @@ +\version "2.14.0" + +\header { + texidoc = "The markup command @code{\\left-brace} selects a +@code{fetaBraces} glyph based on point size, using a binary search. +@code{\\right-brace} is simply a @code{\\left-brace} rotated 180 +degrees. +" +} + +\markup { + \left-brace #30 + \hspace #2 + \right-brace #40 +} diff --git a/input/regression/markup-column-align.ly b/input/regression/markup-column-align.ly index 5d5a2c56c4..180b8825bd 100644 --- a/input/regression/markup-column-align.ly +++ b/input/regression/markup-column-align.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Fixed horizontal alignment of columns of text can be set using diff --git a/input/regression/markup-commands.ly b/input/regression/markup-commands.ly index 688cd2e6a6..5f52e9bb65 100644 --- a/input/regression/markup-commands.ly +++ b/input/regression/markup-commands.ly @@ -5,33 +5,42 @@ } \paper { ragged-right = ##T } -\version "2.12.0" +\version "2.14.0" -{ - g'_\markup { - \column { - \line { - foo \magnify #2 foo - LOWER \lower #3 LOWER - \large \bold { normal \normal-text normal } - Small-Caps \smallCaps Small-Caps - } - - \override #'(line-width . 50) - \override #'(bla . "This is a field containing text. Blah blah -blah. This is a field containing text. Blah blah blah. This is a -field containing text. Blah blah blah. This is a field containing -text. Blah blah blah. This is a field containing text. Blah blah -blah.") - \column { - justify: - \justify-field #'bla - wordwrap: - \wordwrap-field #'bla +\score{ + { + g'_\markup { + \column { + \line { + foo \magnify #2 foo + LOWER \lower #3 LOWER + \large \bold { normal \normal-text normal } + Small-Caps \smallCaps Small-Caps + } + + \override #'(line-width . 50) + \override #'(bla . "This is a field containing text. Blah blah + blah. This is a field containing text. Blah blah blah. This is a + field containing text. Blah blah blah. This is a field containing + text. Blah blah blah. This is a field containing text. Blah blah + blah.") + \column { + justify: + \justify-field #'bla + wordwrap: + \wordwrap-field #'bla + } + + draw-line: \draw-line #'(5 . 3) + \underline "underlined" } + } + } - draw-line: \draw-line #'(5 . 3) - \underline "underlined" + \layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##f } } } diff --git a/input/regression/markup-diacritic-marks.ly b/input/regression/markup-diacritic-marks.ly new file mode 100644 index 0000000000..4f8b389de7 --- /dev/null +++ b/input/regression/markup-diacritic-marks.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + texidoc = " +Diacritic marks are rendered and positioned correctly. The +diacritic on line 1 looks like a lower-underline and is centered +beneath the main character. The diacritic on line 2 is positioned +to the left of the main character, with a tiny space of +separation. The diacritic on line 3 is positioned directly above +the main character, either centered or shifted slightly to the +left. +" +} + +\markup { + \column { + כַ וּ וֹ + } +} diff --git a/input/regression/markup-eps.ly b/input/regression/markup-eps.ly index 224af32c24..4026d0587c 100644 --- a/input/regression/markup-eps.ly +++ b/input/regression/markup-eps.ly @@ -3,7 +3,7 @@ texidoc = "The epsfile markup command reads an EPS file" } -\version "2.12.0" +\version "2.14.0" #(let* ((port (open-output-file "box.eps"))) diff --git a/input/regression/markup-eyeglasses.ly b/input/regression/markup-eyeglasses.ly new file mode 100644 index 0000000000..8fa263aef2 --- /dev/null +++ b/input/regression/markup-eyeglasses.ly @@ -0,0 +1,6 @@ +\header { + texidoc = "The eyeglasses markup function prints out eyeglasses." +} +\version "2.14.0" + +\relative c'' { \mark \markup{ \eyeglasses } c4_\markup{ \eyeglasses } } diff --git a/input/regression/markup-line-thickness.ly b/input/regression/markup-line-thickness.ly index 2738783884..53eb619a3e 100644 --- a/input/regression/markup-line-thickness.ly +++ b/input/regression/markup-line-thickness.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/markup-lines-identifier.ly b/input/regression/markup-lines-identifier.ly new file mode 100644 index 0000000000..579a735d9f --- /dev/null +++ b/input/regression/markup-lines-identifier.ly @@ -0,0 +1,19 @@ +\version "2.14.0" + +\header { + texidoc = "Text that can spread over pages is entered with the +@code{\\markuplines} command. It can be assigned to a variable and inserted +at top-level with or without preceding it by @code{\\markuplines}." +} + +#(set-default-paper-size "a6") + +mytext = \markuplines { + \justified-lines { + Lorem ipsum dolor sit amet, consectetur adipisici elit, sed + eiusmod tempor incidunt ut labore et dolore magna aliqua. ... + } +} + +\markuplines \mytext +\mytext diff --git a/input/regression/markup-lines.ly b/input/regression/markup-lines.ly index 03500ebfd1..c0f61f2348 100644 --- a/input/regression/markup-lines.ly +++ b/input/regression/markup-lines.ly @@ -1,38 +1,50 @@ -\version "2.12.0" +\version "2.14.0" \header { + tagline = ##f texidoc = "Text that can spread over pages is entered with the -@code{\\markuplines} command." +@code{\\markuplines} command. Widowed and orphaned lines are avoided +at the begininng and end of a @code{\\markuplines} containing more +than one line." } -#(set-default-paper-size "a6") +#(set-default-paper-size "a7") #(define-markup-list-command (paragraph layout props args) (markup-list?) (interpret-markup-list layout props (make-justified-lines-markup-list (cons (make-hspace-markup 2) args)))) - -%% Candide, Voltaire -\markuplines \override-lines #'(baseline-skip . 2.5) { - \paragraph { - Il y avait en Westphalie, dans le château de M. le baron de - Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné - les mœurs les plus douces. Sa physionomie annonçait son âme. - Il avait le jugement assez droit, avec l'esprit le plus simple ; - c'est, je crois, pour cette raison qu'on le nommait Candide. Les - anciens domestiques de la maison soupçonnaient qu'il était fils - de la sœur de monsieur le baron et d'un bon et honnête - gentilhomme du voisinage, que cette demoiselle ne voulut jamais - épouser parce qu'il n'avait pu prouver que soixante et onze - quartiers, et que le reste de son arbre généalogique avait été - perdu par l'injure du temps. +\book { + \markuplines {} % Empty list is handled gracefully + %% Candide, Voltaire + \markuplines \override-lines #'(baseline-skip . 3.0) { + \paragraph { % The final two lines are placed on page 2. + Il y avait en Westphalie, dans le château de M. le baron de + Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné + les mœurs les plus douces. Sa physionomie annonçait son âme. + Il avait le jugement assez droit, avec l'esprit le plus simple ; + c'est, je crois, pour cette raison qu'on le nommait Candide. Les + anciens domestiques de la maison soupçonnaient qu'il était fils + de la sœur de monsieur le baron et d'un bon et honnête + gentilhomme du voisinage, que cette demoiselle ne voulut jamais + épouser parce qu'il n'avait pu prouver que soixante et onze + quartiers, et que le reste de son arbre généalogique avait été + perdu par l'injure du temps. (not orphaned) + } + } + \markuplines \override-lines #'(baseline-skip . 3.9) { + \paragraph { + Monsieur le baron était un des plus puissants seigneurs de la + Westphalie, car son château avait une porte et des fenêtres. Sa + grande salle même était ornée d'une tapisserie. Tous les chiens + de ses basses-cours composaient une meute dans le besoin ; ses + palefreniers étaient ses piqueurs; le vicaire du village était + son grand-aumônier. Ils l'appelaient tous monseigneur, et ils + riaient quand il faisait des contes. + } } - \paragraph { - Monsieur le baron était un des plus puissants seigneurs de la - Westphalie, car son château avait une porte et des fenêtres. Sa - grande salle même était ornée d'une tapisserie. Tous les chiens - de ses basses-cours composaient une meute dans le besoin ; ses - palefreniers étaient ses piqueurs; le vicaire du village était - son grand-aumônier. Ils l'appelaient tous monseigneur, et ils - riaient quand il faisait des contes. + \markuplines { + \paragraph { % A single-line paragraph may be orphaned + Madame la ... (may be orphaned) + } } } diff --git a/input/regression/markup-music-glyph.ly b/input/regression/markup-music-glyph.ly index 7fddd618c4..4aec56f9ee 100644 --- a/input/regression/markup-music-glyph.ly +++ b/input/regression/markup-music-glyph.ly @@ -1,17 +1,19 @@ -\header { +\version "2.14.0" - texidoc = "Reset fontname for musicglyph. For unknown glyphs, we print a warning." +#(ly:set-option 'warning-as-error #f) -} +\header { + texidoc = "Reset fontname for musicglyph. +For unknown glyphs, we print a warning." -\version "2.12.0" +} { - c'^\markup - { - \override #'(font-name . "Sans") - { c'est un B \flat \musicglyph #"UNKNOWN-GLYPH" } - % to get \flat, do: - % \normal-text \flat + c'^\markup { + \override #'(font-name . "Sans") { + c'est un B \flat \musicglyph #"UNKNOWN-GLYPH" + } + % to get \flat, do: + % \normal-text \flat } } diff --git a/input/regression/markup-note-dot.ly b/input/regression/markup-note-dot.ly index 1c5f807765..88319b9c8b 100644 --- a/input/regression/markup-note-dot.ly +++ b/input/regression/markup-note-dot.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " A dotted whole note displayed via the @code{\\note} diff --git a/input/regression/markup-note-grob-style.ly b/input/regression/markup-note-grob-style.ly new file mode 100644 index 0000000000..8f3e882d97 --- /dev/null +++ b/input/regression/markup-note-grob-style.ly @@ -0,0 +1,20 @@ +\version "2.14.0" + +\header { + texidoc = "The @code{'style} property from grobs such as +@code{TimeSignature} and @code{TextSpanner} does not affect +the default note head style for @code{\\note} and +@code{\\note-by-number}." +} + +\relative c' { + \override Staff.TimeSignature #'stencil = + #(lambda (grob) + (grob-interpret-markup grob + (markup #:override '(baseline-skip . 0) + #:column (#:number "2" #:note "2" DOWN)))) + \override TextSpanner #'(bound-details left text) = + \markup { \note #"16" #UP } + c1\startTextSpan + c1\stopTextSpan +} diff --git a/input/regression/markup-note-styles.ly b/input/regression/markup-note-styles.ly new file mode 100644 index 0000000000..11d655f442 --- /dev/null +++ b/input/regression/markup-note-styles.ly @@ -0,0 +1,38 @@ +\version "2.14.0" + +\header { + texidoc = "@code{\\note-by-number} and @code{\\note} support +all note head styles." +} + +#(define-markup-command (show-note-styles layout props) () + (interpret-markup layout props + (make-column-markup + (map + (lambda (style) + (make-line-markup + (list + (make-pad-to-box-markup '(0 . 20) '(0 . 0) + (symbol->string style)) + (make-override-markup + (cons 'line-width 60) + (make-override-markup + (cons 'style style) + (make-fill-line-markup + (map + (lambda (dur-log) + (make-note-by-number-markup + dur-log 0 UP)) + '(-3 -2 -1 0 1 2)))))))) + '(default altdefault + baroque neomensural + mensural petrucci + harmonic harmonic-black + harmonic-mixed diamond + cross xcircle + triangle slash))))) + +\markup { + \override #'(baseline-skip . 6) + \show-note-styles +} diff --git a/input/regression/markup-note.ly b/input/regression/markup-note.ly index 0cdc526b35..7488531e2b 100644 --- a/input/regression/markup-note.ly +++ b/input/regression/markup-note.ly @@ -3,54 +3,64 @@ texidoc = "The note markup function may be used to make metronome markings. It works for a variety of flag, dot and duration settings." } -\version "2.12.0" - -\relative c'' -{ - c4^\markup { - \note #"1" #1 - \note #"2" #1 - \note #"4" #1 - \note #"8" #1 - \note #"16" #1 - \note #"32" #1 - \note #"64" #1 - - \note #"1" #-1 - \note #"2" #-1 - \note #"4" #-1 - \note #"8" #-1 - \note #"16" #-1 - \note #"32" #-1 - \note #"64" #-1 - - \note #"1." #-1 - \note #"2." #-1 - \note #"4." #-1 - \note #"8." #-1 - \note #"16." #-1 - \note #"32." #-1 - \note #"64." #-1 - - \note #"1." #1 - \note #"2." #1 - \note #"4." #1 - \note #"8." #1 - \note #"16." #1 - \note #"32." #1 - \note #"64." #1 - - \override #'(style . cross) - { \note-by-number #2 #1 #1 - \note-by-number #2 #1 #-1 - } - \override #'(style . triangle) - { \note-by-number #2 #1 #1 - \note-by-number #2 #1 #-1 +\version "2.14.0" + +\score { + \relative c'' + { + c4^\markup { + \note #"1" #1 + \note #"2" #1 + \note #"4" #1 + \note #"8" #1 + \note #"16" #1 + \note #"32" #1 + \note #"64" #1 + + \note #"1" #-1 + \note #"2" #-1 + \note #"4" #-1 + \note #"8" #-1 + \note #"16" #-1 + \note #"32" #-1 + \note #"64" #-1 + + \note #"1." #-1 + \note #"2." #-1 + \note #"4." #-1 + \note #"8." #-1 + \note #"16." #-1 + \note #"32." #-1 + \note #"64." #-1 + + \note #"1." #1 + \note #"2." #1 + \note #"4." #1 + \note #"8." #1 + \note #"16." #1 + \note #"32." #1 + \note #"64." #1 + + \override #'(style . cross) + { \note-by-number #2 #1 #1 + \note-by-number #2 #1 #-1 + } + \override #'(style . triangle) + { \note-by-number #2 #1 #1 + \note-by-number #2 #1 #-1 + } + } + \override NoteHead #'style = #'triangle + c4 a } - \override NoteHead #'style = #'triangle - c4 a -} + \layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##f + } + } + +} diff --git a/input/regression/markup-path-fill.ly b/input/regression/markup-path-fill.ly new file mode 100644 index 0000000000..6d0f5422a2 --- /dev/null +++ b/input/regression/markup-path-fill.ly @@ -0,0 +1,17 @@ +\version "2.14.0" + +\header { + texidoc = " +The @code{\\path} markup command supports the @code{filled} +property to toggle its fill. +" +} + +\markup { + \override #'(filled . #t) { + \path #0.2 #'((moveto 1 1) + (lineto 1 6) + (curveto 3 8 5 6 1 1) + (closepath)) + } +} diff --git a/input/regression/markup-path-linecap.ly b/input/regression/markup-path-linecap.ly new file mode 100644 index 0000000000..aca5352374 --- /dev/null +++ b/input/regression/markup-path-linecap.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header { + texidoc = " +The @code{\\path} markup command supports the +@code{line-cap-style} property with values of @code{butt}, +@code{round}, and @code{square}. +" +} + +myPath = +#'((moveto 0 0) (lineto 5 0)) + +\markup { + \column { + \override #'(line-cap-style . butt) { + \path #1 #myPath + } + \override #'(line-cap-style . round) { + \path #1 #myPath + } + \override #'(line-cap-style . square) { + \path #1 #myPath + } + } +} diff --git a/input/regression/markup-path-linejoin.ly b/input/regression/markup-path-linejoin.ly new file mode 100644 index 0000000000..bf4aa5e112 --- /dev/null +++ b/input/regression/markup-path-linejoin.ly @@ -0,0 +1,26 @@ +\version "2.14.0" + +\header { + texidoc = " +The @code{\\path} markup command supports the +@code{line-join-style} property with values of @code{bevel}, +@code{round}, and @code{miter}. +" +} + +myPath = +#'((moveto 0 0) (rlineto 2 5) (rlineto 2 -5)) + +\markup { + \column { + \override #'(line-join-style . bevel) { + \path #1 #myPath + } + \override #'(line-join-style . round) { + \path #1 #myPath + } + \override #'(line-join-style . miter) { + \path #1 #myPath + } + } +} diff --git a/input/regression/markup-path.ly b/input/regression/markup-path.ly new file mode 100644 index 0000000000..dd5976f1a1 --- /dev/null +++ b/input/regression/markup-path.ly @@ -0,0 +1,23 @@ +\version "2.14.0" + +\header { + texidoc = " +The @code{\\path} markup command allows the user to draw +arbitrary paths using a simple syntax. The two paths below +should be identical. +" +} + +\markup { + \column { + \path #0.2 #'((moveto 1 1) + (lineto 1 6) + (curveto 3 8 5 6 1 1) + (closepath)) + + \path #0.2 #'((rmoveto 1 1) + (rlineto 0 5) + (rcurveto 2 2 4 0 0 -5) + (closepath)) + } +} diff --git a/input/regression/markup-scheme.ly b/input/regression/markup-scheme.ly index 1e4295c804..7f5fd19e05 100644 --- a/input/regression/markup-scheme.ly +++ b/input/regression/markup-scheme.ly @@ -25,7 +25,7 @@ For maintenance reasons, we don't excercise the entire markup command set. -\version "2.12.0" +\version "2.14.0" { \textLengthOn diff --git a/input/regression/markup-score-multi-system.ly b/input/regression/markup-score-multi-system.ly new file mode 100644 index 0000000000..6dd9f88d21 --- /dev/null +++ b/input/regression/markup-score-multi-system.ly @@ -0,0 +1,22 @@ +\version "2.14.0" + +\header { + texidoc = "\\markup \\score displays all systems. Spacing between + systems is set using @code{baseline-skip}. +" +} + + +\markup { + \override #'(baseline-skip . 10) + \score { + \new Staff \relative c' { + c4 d e f \break + g1 + } + \layout { + indent = 0 + ragged-right = ##t + } + } +} diff --git a/input/regression/markup-score.ly b/input/regression/markup-score.ly index 8c686ec5ba..96fe251704 100644 --- a/input/regression/markup-score.ly +++ b/input/regression/markup-score.ly @@ -2,7 +2,7 @@ texidoc = "Use \\score block as markup command." } -\version "2.12.0" +\version "2.14.0" tuning = \markup { \score { @@ -22,11 +22,11 @@ tuning = \markup { subsubtitle = \markup { "Originalstimmung:" \tuning } } -\relative { +\relative c'' { \time 4/8 - \times 2/3 { c'8 d e } \times 2/3 {c d e} \times 2/3 { c8 d e } \times 2/3 {c d e} - g8 a8 g8 a - g8 a8 g8 a + \times 2/3 { c8 d e } \times 2/3 {c d e} + g8 a8 g8 a + g8 a8 g8 a } diff --git a/input/regression/markup-stack.ly b/input/regression/markup-stack.ly index 4d84c3e2c1..a461a7f87c 100644 --- a/input/regression/markup-stack.ly +++ b/input/regression/markup-stack.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header {texidoc="Markup scripts may be stacked."} \layout { ragged-right = ##t} { diff --git a/input/regression/markup-syntax.ly b/input/regression/markup-syntax.ly index 8a59a454b6..899909df27 100644 --- a/input/regression/markup-syntax.ly +++ b/input/regression/markup-syntax.ly @@ -1,51 +1,61 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Demo of markup texts, using LilyPond syntax." } -{ - f'1-\markup { - foo - \raise #0.2 \hbracket \bold bar +\score { + { + f'1-\markup { + foo + \raise #0.2 \hbracket \bold bar - \override #'(baseline-skip . 4) - \bracket \column { - baz - bazr - bla + \override #'(baseline-skip . 4) + \bracket \column { + baz + bazr + bla + } + \hspace #2.0 + \override #'(font-encoding . fetaMusic) { + \lookup #"noteheads-0" + } + \semiflat + { } + \combine "X" "+" + \combine "o" "/" } - \hspace #2.0 - \override #'(font-encoding . fetaMusic) { - \lookup #"noteheads-0" + g'1-\markup { + % \char-number #"abc1234abc" + \box \column { + \line { "string 1" } + \line { "string 2" } + \concat { "f" "i" } + } + " " + \draw-circle #1 #0.3 ##f + " " + \draw-circle #1 #0.3 ##t + " " + \italic Norsk + \super "2" + " " + \raise #3.0 \whiteout white-out + \circle \dynamic p + \with-color #green Green + \dynamic sfzp + \huge { "A" \smaller "A" \smaller \smaller "A" + \smaller \smaller \smaller "A" } + \sub "alike" } - \semiflat - { } - \combine "X" "+" - \combine "o" "/" + c''4 } - g'1-\markup { - % \char-number #"abc1234abc" - \box \column { - \line { "string 1" } - \line { "string 2" } - \concat { "f" "i" } + + \layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##f } - " " - \draw-circle #1 #0.3 ##f - " " - \draw-circle #1 #0.3 ##t - " " - \italic Norsk - \super "2" - " " - \raise #3.0 \whiteout white-out - \circle \dynamic p - \with-color #green Green - \dynamic sfzp - \huge { "A" \smaller "A" \smaller \smaller "A" - \smaller \smaller \smaller "A" } - \sub "alike" - } - c''4 + } + } diff --git a/input/regression/markup-user.ly b/input/regression/markup-user.ly index 6377347060..8c4afdf6ac 100644 --- a/input/regression/markup-user.ly +++ b/input/regression/markup-user.ly @@ -9,16 +9,23 @@ the @code{define-markup-command} scheme macro." -\version "2.12.0" +\version "2.14.0" #(define-markup-command (upcase paper props str) (string?) "Upcase the string characters. Syntax: \\upcase #\"string\"" (interpret-markup paper props (make-simple-markup (string-upcase str)))) - -{ - c''-\markup \upcase #"hello world" +\score{ + { + c''-\markup \upcase #"hello world" % produces a "HELLO WORLD" markup -} + } + \layout { + \context { + \Score + \override PaperColumn #'keep-inside-line = ##f + } + } +} diff --git a/input/regression/markup-word-wrap.ly b/input/regression/markup-word-wrap.ly index ef9e5b065d..b9d58998bc 100644 --- a/input/regression/markup-word-wrap.ly +++ b/input/regression/markup-word-wrap.ly @@ -1,11 +1,11 @@ \header { - texidoc = "The markup commands @code{\wordwrap} and @code{\justify} + texidoc = "The markup commands @code{\\wordwrap} and @code{\\justify} produce simple paragraph text." } -\version "2.12.0" +\version "2.14.0" \markup { this is normal text diff --git a/input/regression/measure-grouping.ly b/input/regression/measure-grouping.ly index 3ddb019925..0e35f38b33 100644 --- a/input/regression/measure-grouping.ly +++ b/input/regression/measure-grouping.ly @@ -7,7 +7,7 @@ brackets above beats when the beats of a time signature are grouped. " } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/mensural-ligatures.ly b/input/regression/mensural-ligatures.ly index 787cde444b..eb87f9c6e2 100644 --- a/input/regression/mensural-ligatures.ly +++ b/input/regression/mensural-ligatures.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Mensural ligatures show different shapes, depending on the @@ -17,6 +17,7 @@ \context { \Score \override SpacingSpanner #'packed-spacing = ##t + \override PaperColumn #'keep-inside-line = ##f } } @@ -27,7 +28,7 @@ #(set-accidental-style 'forget) \textLengthOn - % ligaturae binaria +% ligaturae binaria \[ b\breve^\markup { \column { { \bold "ligaturae binaria" } "BL" } } @@ -81,7 +82,7 @@ \bar "|" \break - % ligaturae ternariae, quaternariae, etc. (sicut in Apel[1]) +% ligaturae ternariae, quaternariae, etc. (sicut in Apel[1]) \[ b\breve^\markup { @@ -136,7 +137,7 @@ \bar "|" \break - % examples from "dtv-Atlas zur Musik" [2] +% examples from "dtv-Atlas zur Musik" [2] \[ d'\breve^\markup { \column { { \bold "dtv-Atlas" } "BBL" } } @@ -184,7 +185,7 @@ \bar "|" \break - % some ligatures from Ockeghem: Missa De plus en plus +% some ligatures from Ockeghem: Missa De plus en plus \[ c'\maxima^\markup { @@ -212,12 +213,15 @@ \] \[ - b\longa^\markup { "LBBBBB" } + \override NoteHead #'style = #'blackpetrucci + b\longa^\markup { "LBBBBB." } c'\breve d' g + \once \override NoteHead #'ligature-flexa = ##t f - g + \revert NoteHead #'style + g\breve. \] \[ @@ -229,9 +233,11 @@ \] \[ + \override NoteHead #'style = #'blackpetrucci e'1^\markup { "SSB" } a g\breve + \revert NoteHead #'style \] \[ @@ -241,9 +247,35 @@ e' \] + \[ + \override NoteHead #'style = #'blackpetrucci + e'\longa^\markup { "LBB" } + f'\breve + \revert NoteHead #'style + e' + \] + + \[ + \override NoteHead #'style = #'blackpetrucci + b\breve^\markup { "BBBBBBL" } + g + \override NoteHead #'ligature-flexa = ##t + \override NoteHead #'flexa-width = #3 + f + f' + \override NoteHead #'flexa-width = #5 + b + c' + \revert NoteHead #'style + % though ligature-flexa is still ##t, this pair must be drawn as recta + b\longa + \revert NoteHead #'flexa-width + \revert NoteHead #'ligature-flexa + \] + \bar "|" \break - % some from the Requiem +% some from the Requiem \[ a1^\markup { \column { { \bold "Ockeghem: Requiem" } "SSBBBBBBBL" } } @@ -267,8 +299,18 @@ \] \bar "|" \break +} - % crazy ligatures +\context Staff \with +{ + \override StaffSymbol #'line-count = #4 +} +{ + \clef "petrucci-c5" + \set Staff.printKeyCancellation = ##f + \cadenzaOn % turn off bar lines + #(set-accidental-style 'forget) + \textLengthOn \[ c\breve^\markup { \column { { \bold "crazy ligatures" } "BBBBB" } } @@ -298,16 +340,16 @@ \[ b^\markup { "B.B." } a - \] % TODO: dots within ligatures must be placed above heads + \] % TODO the first dot is too high to avoid a non-existent (ledger) line \bar "|" \break - % invalid ligatures (those commented out are rejected with explanation) +% invalid ligatures (those commented out are rejected with explanation) - % \[ - % a1^\markup { \column { { \bold "invalid ligatures" } "SS" } } - % as - % \] +% \[ +% a1^\markup { \column { { \bold "invalid ligatures" } "SS" } } +% as +% \] \[ a\breve^\markup { "BBB" } @@ -315,23 +357,23 @@ as \] - % \[ - % f\longa^\markup { "LLB" } - % g - % f\breve - % \] +% \[ +% f\longa^\markup { "LLB" } +% g +% f\breve +% \] - % \[ - % f\breve^\markup { "BSLB" } - % a1 - % g\longa - % a\breve - % \] +% \[ +% f\breve^\markup { "BSLB" } +% a1 +% g\longa +% a\breve +% \] } % Litterae: % % [1] Willi Apel: The Notation of Polyphonic Music. 900-1600. -% [2] Ulrich Michels: dtv-Altlas zur Musik, 1977. +% [2] Ulrich Michels: dtv-Atlas zur Musik, 1977. % diff --git a/input/regression/mensural.ly b/input/regression/mensural.ly index e5b2477648..58da11d407 100644 --- a/input/regression/mensural.ly +++ b/input/regression/mensural.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "There is limited support for mensural notation: note head diff --git a/input/regression/metronome-mark-loose-column.ly b/input/regression/metronome-mark-loose-column.ly new file mode 100644 index 0000000000..799b14ef69 --- /dev/null +++ b/input/regression/metronome-mark-loose-column.ly @@ -0,0 +1,27 @@ +\version "2.14.2" + +\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 + } + } +} diff --git a/input/regression/metronome-marking-align-order.ly b/input/regression/metronome-marking-align-order.ly new file mode 100644 index 0000000000..3c5f596dc3 --- /dev/null +++ b/input/regression/metronome-marking-align-order.ly @@ -0,0 +1,28 @@ +\version "2.14.0" + +\header { + texidoc = "Metronome marks respect symbol order in +@code{break-align-symbols}. + +In this example, the default is changed to +@code{'(time-signature key-signature)}: since @code{key-signature} +is second in the list, the mark should only be aligned with the key +signature if there is no time signature present, as in the second +measure. +" +} + +\paper { + ragged-right = ##t +} + +\relative c' { + \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT + \override Score.MetronomeMark #'break-align-symbols = #'(time-signature key-signature) + \key c \minor + \tempo "Time" + c1 + \key as \major + \tempo "Key" + c1 +} diff --git a/input/regression/metronome-marking-break-align.ly b/input/regression/metronome-marking-break-align.ly new file mode 100644 index 0000000000..6d21f0203d --- /dev/null +++ b/input/regression/metronome-marking-break-align.ly @@ -0,0 +1,35 @@ +\version "2.14.0" + +\header { + texidoc = "@code{\\tempo} marks are aligned with the time signature +or first musical element unless the first element is a multi-measure +rest: in this case, the tempo mark is aligned with the bar line. + +By overriding @code{break-align-symbols} the default alignment can be +changed, as shown by the final metronome mark in this snippet, aligned +with a key signature. +" +} + +\layout { + line-width = 50\mm +} + +\relative c' { + \tempo "T-first" + c1 + \mark \default + \tempo "T-note" + c1 \break + \tempo "T-break" + c1 + \tempo "T-rest" + R1 \break + \time 8/8 + \tempo "T-time" + R1 + \override Score.MetronomeMark #'break-align-symbols = #'(key-signature) + \key as \major + \tempo "T-key" + R1 +} diff --git a/input/regression/metronome-marking.ly b/input/regression/metronome-marking.ly index 409687cdfb..4726024b70 100644 --- a/input/regression/metronome-marking.ly +++ b/input/regression/metronome-marking.ly @@ -14,7 +14,7 @@ The marking is left aligned with the time signature, if there is one. \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \relative c'' { \tempo \breve = 100 c1 c1 \tempo 8.. = 50 c1 diff --git a/input/regression/metronome-multimeasure-rest-no-segfault.ly b/input/regression/metronome-multimeasure-rest-no-segfault.ly new file mode 100644 index 0000000000..ceec61db50 --- /dev/null +++ b/input/regression/metronome-multimeasure-rest-no-segfault.ly @@ -0,0 +1,27 @@ +\version "2.14.0" +\header { + texidoc = " +A metronome marking can be added to a multimeasure rest whose +engraver was moved to the Staff, without segfaulting. +" +} + + +\score { + \new Staff { + \tempo 4=150 + R1 | + } + \layout { + \context { + \Score + \remove "Metronome_mark_engraver" + \remove "Staff_collecting_engraver" + } + \context { + \Staff + \consists "Metronome_mark_engraver" + } + } +} + diff --git a/input/regression/metronome-parenthesized.ly b/input/regression/metronome-parenthesized.ly index 97a4bc7d18..b8d841f006 100644 --- a/input/regression/metronome-parenthesized.ly +++ b/input/regression/metronome-parenthesized.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/metronome-range.ly b/input/regression/metronome-range.ly new file mode 100644 index 0000000000..29a4a15ddc --- /dev/null +++ b/input/regression/metronome-range.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + texidoc = " +Tempo ranges are supported. By default, numbers are +printed with an en-dash character, separated by thin-spaces. +" +} + +\relative c'' { + \tempo 4 = 66 ~ 72 + c1 | c + #(ly:export + (make-event-chord (list (make-music 'TempoChangeEvent + 'tempo-unit (ly:make-duration 2 0 1 1) + 'metronome-count (cons 124 132))))) + c1 | c +} diff --git a/input/regression/metronome-text.ly b/input/regression/metronome-text.ly index 44d0bd23c9..f5f826a673 100644 --- a/input/regression/metronome-text.ly +++ b/input/regression/metronome-text.ly @@ -1,38 +1,41 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" -The tempo command supports text markup and/or duration=count. Using the -Score.hideTempoNote, one can hide the duration=count in the tempo mark. +The tempo command supports text markup and/or duration=count. Using +@code{Score.tempoHideNote}, one can hide the duration=count in the tempo mark. " } \relative c'' { \tempo "Allegro" c1 \tempo "Allegro" c1 - \set Score.tempoText = #"blah" d1 - \tempo \markup{\italic \medium "Allegro"} c1\break - \tempo 4=120 c1 - \tempo "Allegro" 4=120 c1 - \tempo "Allegro" 4=120 c1 - \tempo "Allegro" 4=110 c1 - \tempo "Allegretto" 4=110 c1\break + #(ly:export + (make-event-chord (list (make-music 'TempoChangeEvent + 'text "blah")))) + d1 + \tempo \markup { \italic \medium "Allegro" } c1 \break + \tempo 4 = 120 c1 + \tempo "Allegro" 4 = 120 c1 + \tempo "Allegro" 4 = 120 c1 + \tempo "Allegro" 4 = 110 c1 + \tempo "Allegretto" 4 = 110 c1 \break \set Score.tempoHideNote = ##f - \tempo "Allegro" 4=120 c1 + \tempo "Allegro" 4 = 120 c1 \set Score.tempoHideNote = ##t - \tempo "No note" 8=160 c1 + \tempo "No note" 8 = 160 c1 \tempo "Still not" c1 % No text and also no note => \null markup - \tempo 4=100 c1 - \tempo "Allegro" 4=120 c1 + \tempo 4 = 100 c1 + \tempo "Allegro" 4 = 120 c1 \set Score.tempoHideNote = ##f - \tempo "With note" 8=80 c1\break + \tempo "With note" 8 = 80 c1 \break % Unsetting the tempoText using only note=count: - \tempo 8=80 c1 - \tempo "Allegro" 8=80 c1 - \tempo 8=80 c1 + \tempo 8 = 80 c1 + \tempo "Allegro" 8 = 80 c1 + \tempo 8 = 80 c1 % Unsetting the count using only text \tempo "no note (text-only)" c1 diff --git a/input/regression/midi-drums.ly b/input/regression/midi-drums.ly index bd00285cf2..7f6870f680 100644 --- a/input/regression/midi-drums.ly +++ b/input/regression/midi-drums.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Midi can create drums." } diff --git a/input/regression/midi-dynamics.ly b/input/regression/midi-dynamics.ly index ee18823a3d..9194bf2d58 100644 --- a/input/regression/midi-dynamics.ly +++ b/input/regression/midi-dynamics.ly @@ -5,10 +5,10 @@ } -\version "2.12.0" +\version "2.14.0" \score { - \relative { + \relative c' { \set midiMinimumVolume = #0.0 \set midiMaximumVolume = #1.0 diff --git a/input/regression/midi-grace.ly b/input/regression/midi-grace.ly index 4f5feffc66..64d6273b4d 100644 --- a/input/regression/midi-grace.ly +++ b/input/regression/midi-grace.ly @@ -5,7 +5,7 @@ off will appear at tick 768 (2 * 384)." } -\version "2.12.0" +\version "2.14.0" \score { \relative c' { c4 diff --git a/input/regression/midi-key-signature.ly b/input/regression/midi-key-signature.ly new file mode 100644 index 0000000000..ce95beb1b6 --- /dev/null +++ b/input/regression/midi-key-signature.ly @@ -0,0 +1,15 @@ +\version "2.14.0" +\header { + texidoc = "MIDI key signatures are output, using an approximate +key signature if MIDI format cannot represent the true key signature" +} + +\include "arabic.ly" +\score { + \relative do' { + \key fa \bayati + fa4 solsb lab sib + } + \midi { } + \layout { } +} diff --git a/input/regression/midi-lyric-barcheck.ly b/input/regression/midi-lyric-barcheck.ly index 42ba0fbe0d..4a2c973b0c 100644 --- a/input/regression/midi-lyric-barcheck.ly +++ b/input/regression/midi-lyric-barcheck.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Lyrics in MIDI are aligned to ties and beams: diff --git a/input/regression/midi-microtone-off.ly b/input/regression/midi-microtone-off.ly index 893ed44626..9524f6c0aa 100644 --- a/input/regression/midi-microtone-off.ly +++ b/input/regression/midi-microtone-off.ly @@ -4,12 +4,12 @@ the next (possibly grace) note. " } -\version "2.12.0" +\version "2.14.0" \score { - - \relative { + + \relative c' { a geseh \acciaccatura a geseh } diff --git a/input/regression/midi-microtone.ly b/input/regression/midi-microtone.ly index 478c925234..4d1216d35e 100644 --- a/input/regression/midi-microtone.ly +++ b/input/regression/midi-microtone.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The pitch wheel is used for microtones." } diff --git a/input/regression/midi-notes.ly b/input/regression/midi-notes.ly new file mode 100644 index 0000000000..7ed715d36f --- /dev/null +++ b/input/regression/midi-notes.ly @@ -0,0 +1,21 @@ +\header { + + texidoc = "A MIDI note-off event precedes a simultaneous note-on event +for the same pitch in the same MIDI channel, so that all notes are heard. +Run @code{timidity -idvvv file.midi |grep Midi} to see midi events." + +} + +\version "2.14.0" + +\score { + << + \new Staff << + {r4 g' r2 | r2 a'4 r } \\ + {g'4 r r2 | r2 r4 a' } + >> + \new Staff { r2 g'2 | a'2 r2 } + >> + \midi {} + \layout {} +} diff --git a/input/regression/midi-partial.ly b/input/regression/midi-partial.ly index d5aad2d06a..72cb7c611f 100644 --- a/input/regression/midi-partial.ly +++ b/input/regression/midi-partial.ly @@ -1,7 +1,7 @@ \header { texidoc = "MIDI and partial measures work together." } -\version "2.12.0" +\version "2.14.0" \score { { \partial 4 diff --git a/input/regression/midi-pedal.ly b/input/regression/midi-pedal.ly index c599902164..e9c4f23da1 100644 --- a/input/regression/midi-pedal.ly +++ b/input/regression/midi-pedal.ly @@ -5,10 +5,10 @@ } -\version "2.12.0" +\version "2.14.0" \score { - \relative { + \relative c' { { { c16 e g c } diff --git a/input/regression/midi-scales.ly b/input/regression/midi-scales.ly index 9c7ae95b06..6c9a6f2083 100644 --- a/input/regression/midi-scales.ly +++ b/input/regression/midi-scales.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" % candidate for regression. -gp \header { texidoc="Converting LilyPond input to MIDI and then again back with diff --git a/input/regression/midi-transposition.ly b/input/regression/midi-transposition.ly index 8c6da9a33d..797331de03 100644 --- a/input/regression/midi-transposition.ly +++ b/input/regression/midi-transposition.ly @@ -2,7 +2,7 @@ { texidoc = "should deliver f' in MIDI" } -\version "2.12.0" +\version "2.14.0" \score { { diff --git a/input/regression/midi-tuplets.ly b/input/regression/midi-tuplets.ly index 89fbe822c2..43b8fcde08 100644 --- a/input/regression/midi-tuplets.ly +++ b/input/regression/midi-tuplets.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " diff --git a/input/regression/midi-unisons.ly b/input/regression/midi-unisons.ly new file mode 100644 index 0000000000..e3c5f1b505 --- /dev/null +++ b/input/regression/midi-unisons.ly @@ -0,0 +1,20 @@ +\header { + + texidoc = "In overlapping unisons, within a single MIDI channel, +either the first note is truncated, or the notes are merged if +@code{midiMergeUnisons} is @code{#t}. Run +@code{timidity -idvvv file.midi |grep Midi} to see midi events." + +} + +\version "2.14.2" + +\score { + { + \set Score.midiChannelMapping = #'staff + \new Staff << {r8 g'4.} \\ {g'4. r8} >> + \new Staff \with { midiMergeUnisons = ##t } << {r8 a'4.} \\ {a'4. r8} >> + } + \midi {} + \layout {} +} diff --git a/input/regression/midi-volume-equaliser.ly b/input/regression/midi-volume-equaliser.ly index 7586ae4a35..df240189cd 100644 --- a/input/regression/midi-volume-equaliser.ly +++ b/input/regression/midi-volume-equaliser.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "@cindex Midi Volume Equaliser The full orchestra plays a note, where groups stop one after diff --git a/input/regression/midi/GNUmakefile b/input/regression/midi/GNUmakefile new file mode 100644 index 0000000000..682bf82db5 --- /dev/null +++ b/input/regression/midi/GNUmakefile @@ -0,0 +1,13 @@ +depth = ../../.. + +STEPMAKE_TEMPLATES=documentation texinfo tex +LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc midi + +TEXI2HTML_FLAGS += --nomenu + +TMP = $(sort $(LY_FILES) $(TEXINFO_SOURCES) ) +COLLATED_FILES = ${TMP:%.ly=$(outdir)/%-midi.ly} + +include $(depth)/make/stepmake.make + +TITLE=MIDI test suite diff --git a/input/regression/midi/key-initial.ly b/input/regression/midi/key-initial.ly new file mode 100644 index 0000000000..f1a8f00833 --- /dev/null +++ b/input/regression/midi/key-initial.ly @@ -0,0 +1,85 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out/initial-key.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out/initial-key.header +\header { +texidoc="keys work in MIDI, this is d-minor" +options="" +} +% end + +trackAchannelA = { + + + \key d \minor + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + + \set Staff.instrumentName = "trackB:voiceA" + d'4 e f g + | % 2 + a bes cis d + | % 3 + +} + +trackB = << + \context Voice = voiceA \trackBchannelA +>> + + +trackCchannelA = { + + \set Staff.instrumentName = "trackB:" + + + \key d \minor + +} + +trackC = << + \context Voice = voiceA \trackCchannelA +>> + + +\score { + << + \context Staff=trackB \trackA + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/key-option-all-staves.ly b/input/regression/midi/key-option-all-staves.ly new file mode 100644 index 0000000000..2ba3fa8d27 --- /dev/null +++ b/input/regression/midi/key-option-all-staves.ly @@ -0,0 +1,24 @@ +\version "2.14.0" + +\header { +texidoc="Midi2ly --key works on all staves, this is G major (--key=1)" +options="--key=1" +} + +\score { + << + \context Staff = "treble" << + \context Voice="one" \relative c'' { + fis + } + >> + \context Staff = "bass" << + \context Voice="two" \relative c { + \clef bass + fis + } + >> + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/key-option.ly b/input/regression/midi/key-option.ly new file mode 100644 index 0000000000..47b96b4cc7 --- /dev/null +++ b/input/regression/midi/key-option.ly @@ -0,0 +1,81 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/option-key.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out-www/option-key.header +\header { +texidoc="midi2ly @code{--key} works, this is F major" +options="--key=-1" +} +% end + +trackAchannelA = { + + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + + \set Staff.instrumentName = "trackB:voiceA" + f'4 g a bes + | % 2 + c d e f + | % 3 + +} + +trackB = << + \context Voice = voiceA \trackBchannelA +>> + + +trackCchannelA = { + + \set Staff.instrumentName = "trackB:" + + +} + +trackC = << + \context Voice = voiceA \trackCchannelA +>> + + +\score { + << + \context Staff=trackB \trackA + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/lyrics-addlyrics.ly b/input/regression/midi/lyrics-addlyrics.ly new file mode 100644 index 0000000000..c84077abce --- /dev/null +++ b/input/regression/midi/lyrics-addlyrics.ly @@ -0,0 +1,40 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out/initial-key.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out/initial-key.header +\header { +texidoc="Lyrics are preserved" +options="" +} +% end + +\score { + << + \relative c'' { + \key g \major + \time 6/8 + d4 b8 c4 a8 | d4 b8 g4 + } + \addlyrics { + Girls and boys come | out to play, + } + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/partcombine.ly b/input/regression/midi/partcombine.ly new file mode 100644 index 0000000000..6cd50b03d9 --- /dev/null +++ b/input/regression/midi/partcombine.ly @@ -0,0 +1,46 @@ +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +\header { +texidoc="Partcombined music is preserved" +options="--skip" +} + +instrumentOne = \relative c' { + 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 +} + +\score { +<< + \new Staff = "staff" \partcombine \instrumentOne \instrumentTwo + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/quantize-duration-2.ly b/input/regression/midi/quantize-duration-2.ly new file mode 100644 index 0000000000..26f7d65a7c --- /dev/null +++ b/input/regression/midi/quantize-duration-2.ly @@ -0,0 +1,65 @@ +% Lily was here -- automatically converted by out/bin/midi2ly from /home/janneke/testmidi.mid +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +\header { +texidoc="midi2ly @code{--duration-quant} preserves first note length (16)" +options="--duration-quant=16" +} + +trackAchannelA = { + + + \key a \major + + % [TEXT_EVENT] Nokia Tune + + \tempo 4 = 120 + + + \key a \major + + \time 3/8 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelB = \relative c { + e'''4*41/192 r4*7/192 d4*41/192 r4*7/192 fis,4*89/192 r4*7/192 gis4*89/192 + r4*7/192 + | % 2 + cis4*41/192 r4*7/192 b4*41/192 r4*7/192 d,4*89/192 r4*7/192 e4*89/192 +} + +trackB = << + \context Voice = voiceA \trackBchannelB +>> + + +\score { + << + \context Staff=trackB \trackA + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/quantize-duration.ly b/input/regression/midi/quantize-duration.ly new file mode 100644 index 0000000000..f0d6bed9ae --- /dev/null +++ b/input/regression/midi/quantize-duration.ly @@ -0,0 +1,62 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out-www/voice-2.header +\header { +texidoc="midi2ly @code{--duration-quant} quantizes durations of notes" +options="--duration-quant=4" +} +% end + +trackAchannelA = { + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + r4*1/8 c4*7/8 + c4*7/8 r4*1/8 +} + +trackB = << + \context Voice = voiceA \trackBchannelA +>> + + +\score { + << + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/quantize-start.ly b/input/regression/midi/quantize-start.ly new file mode 100644 index 0000000000..2e5497f11e --- /dev/null +++ b/input/regression/midi/quantize-start.ly @@ -0,0 +1,62 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out-www/voice-2.header +\header { +texidoc="midi2ly @code{--start-quant} quantizes start of notes" +options="--start-quant=4" +} +% end + +trackAchannelA = { + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + r4*1/8 c4*7/8 + c4*7/8 r4*1/8 +} + +trackB = << + \context Voice = voiceA \trackBchannelA +>> + + +\score { + << + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/rest-dynamic.ly b/input/regression/midi/rest-dynamic.ly new file mode 100644 index 0000000000..ae1232b297 --- /dev/null +++ b/input/regression/midi/rest-dynamic.ly @@ -0,0 +1,13 @@ +\version "2.14.0" +\header { +texidoc="LilyPond respects rests, also when there are dynamics" +options="" +} + +\score { + \new Staff \relative c' { + \time 2/4 e4 e r4 e\f | + } + \layout {} + \midi {} +} diff --git a/input/regression/midi/rest.ly b/input/regression/midi/rest.ly new file mode 100644 index 0000000000..01e3c056e6 --- /dev/null +++ b/input/regression/midi/rest.ly @@ -0,0 +1,69 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/rest.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out-www/rest.header +\header { +texidoc="midi2ly identifies rests" +options="" +} +% end + +trackAchannelA = { + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + r4 + \set Staff.instrumentName = "trackB:voiceA" + a r4 a + | % 2 + +} + +trackB = << + + \clef bass + + \context Voice = voiceA \trackBchannelA +>> + + +\score { + << + \context Staff=trackB \trackA + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/staff-map-instrument.ly b/input/regression/midi/staff-map-instrument.ly new file mode 100644 index 0000000000..46ae610b8c --- /dev/null +++ b/input/regression/midi/staff-map-instrument.ly @@ -0,0 +1,45 @@ +\version "2.14.0" + +\header { +texidoc="Midi2ly remaps voices correctly to staves in MIDI-files that use instrument<->channel mapping when combined with voice<->track mapping. TODO: pianostaff" +options="" +} + +\score { +%% TODO:PIANOSTAFF \context PianoStaff << + << + \context Staff = "treble" << + \set Score.midiChannelMapping = #'instrument + \context Voice="one" \relative c'' { + \time 4/4 + \key c \minor + \voiceOne +%comes +%7 + f8 es16 d c16 bes ! as g f8 as' g f +%8 es8 d es f b, c d b | + f,16 g as4 g16 f e2 | + } + \context Voice="two" \relative c'' { + \voiceTwo +%dux +%7 + c4 r4 r8 f es d | +%8 r8 as g f g f16 es f8 d | + 8 r r 2 | + } + >> + \context Staff = "bass" << + \context Voice="three" \relative c' { + \key c \minor + \clef bass +%7 + r8 c16 b c8 g as c16 b c8 d | +%8 g8 c16 b c8 d f,16 g as4 g16 f | + 1 + } + >> + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/staff-map-voice.ly b/input/regression/midi/staff-map-voice.ly new file mode 100644 index 0000000000..baa1f75bc6 --- /dev/null +++ b/input/regression/midi/staff-map-voice.ly @@ -0,0 +1,45 @@ +\version "2.14.0" + +\header { +texidoc="Midi2ly remaps voices correctly to staves in MIDI-files that use voice<->channel mapping when combined with staff<->track mapping. TODO: pianostaff" +options="" +} + +\score { +%% TODO:PIANOSTAFF \context PianoStaff << + << + \context Staff = "treble" << + \set Score.midiChannelMapping = #'voice + \context Voice="one" \relative c'' { + \time 4/4 + \key c \minor + \voiceOne +%comes +%7 + f8 es16 d c16 bes ! as g f8 as' g f +%8 es8 d es f b, c d b | + f,16 g as4 g16 f e2 | + } + \context Voice="two" \relative c'' { + \voiceTwo +%dux +%7 + c4 r4 r8 f es d | +%8 r8 as g f g f16 es f8 d | + 8 r r 2 | + } + >> + \context Staff = "bass" << + \context Voice="three" \relative c' { + \key c \minor + \clef bass +%7 + r8 c16 b c8 g as c16 b c8 d | +%8 g8 c16 b c8 d f,16 g as4 g16 f | + 1 + } + >> + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/voice-2.ly b/input/regression/midi/voice-2.ly new file mode 100644 index 0000000000..3a0d68b170 --- /dev/null +++ b/input/regression/midi/voice-2.ly @@ -0,0 +1,75 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out-www/voice-2.header +\header { +texidoc="midi2ly maps two voices nicely on one staff as \voiceOne, \voiceTwo" +options="" +} +% end + +trackAchannelA = { + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + \voiceOne + + \set Staff.instrumentName = ":1" + e''4 e e e + | % 2 + +} + +trackBchannelB = \relative c { + \voiceTwo + f' f f f + | % 2 + +} + +trackB = << + \context Voice = voiceA \trackBchannelA + \context Voice = voiceB \trackBchannelB +>> + + +\score { + << + \context Staff=trackB \trackA + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/voice-4.ly b/input/regression/midi/voice-4.ly new file mode 100644 index 0000000000..2ef09e7b69 --- /dev/null +++ b/input/regression/midi/voice-4.ly @@ -0,0 +1,91 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-4.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out-www/voice-4.header +\header { +texidoc="midi2ly maps four voices nicely on one staff as \voiceOne, \voiceTwo, \voiceThree, \voiceFour" +options="" +} +% end + +trackAchannelA = { + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + \voiceOne + + \set Staff.instrumentName = ":1" + 2 b + | % 2 + +} + +trackBchannelB = \relative c { + \voiceThree + c''4. d8 e4 f + | % 2 + +} + +trackBchannelC = \relative c { + \voiceFour + d'1 + | % 2 + +} + +trackBchannelD = \relative c { + \voiceTwo + c'4 c2 c4 + | % 2 + +} + +trackB = << + \context Voice = voiceA \trackBchannelA + \context Voice = voiceB \trackBchannelB + \context Voice = voiceC \trackBchannelC + \context Voice = voiceD \trackBchannelD +>> + + +\score { + << + \context Staff=trackB \trackA + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/midi/voice-5.ly b/input/regression/midi/voice-5.ly new file mode 100644 index 0000000000..184b7865b9 --- /dev/null +++ b/input/regression/midi/voice-5.ly @@ -0,0 +1,98 @@ +% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-4.midi +\version "2.14.0" + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +\midi { + \context { + \Score + midiChannelMapping = #'instrument + } +} + +% included from ./out-www/voice-5.header +\header { +texidoc="midi2ly still produces output for a staff with five voices. However, in such cases, most probably the the correct \voiceOne, \voiceX... mapping is lost." +options="" +} +% end + +trackAchannelA = { + + % [SEQUENCE_TRACK_NAME] control track + + % [TEXT_EVENT] creator: + + % [TEXT_EVENT] GNU LilyPond 2.13.54 + + \time 4/4 + + \tempo 4 = 60 + +} + +trackA = << + \context Voice = voiceA \trackAchannelA +>> + + +trackBchannelA = \relative c { + \voiceOne + + \set Staff.instrumentName = ":1" + 2 b + | % 2 + +} + +trackBchannelB = \relative c { + \voiceThree + c''4. d8 e4 f + | % 2 + +} + +trackBchannelC = \relative c { + \voiceFour + d'1 + | % 2 + +} + +trackBchannelD = \relative c { + \voiceTwo + c'4 c2 c4 + | % 2 + +} + +trackBchannelE = \relative c { + s1 d1 + | % 2 + +} + +trackB = << + \context Voice = voiceA \trackBchannelA + \context Voice = voiceB \trackBchannelB + \context Voice = voiceC \trackBchannelC + \context Voice = voiceD \trackBchannelD + \context Voice = voiceE \trackBchannelE +>> + + +\score { + << + \context Staff=trackB \trackA + \context Staff=trackB \trackB + >> + \layout {} + \midi {} +} diff --git a/input/regression/mm-rests2.ly b/input/regression/mm-rests2.ly index e997d55b48..2f920fa28e 100644 --- a/input/regression/mm-rests2.ly +++ b/input/regression/mm-rests2.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/modal-transforms.ly b/input/regression/modal-transforms.ly new file mode 100644 index 0000000000..cc50074660 --- /dev/null +++ b/input/regression/modal-transforms.ly @@ -0,0 +1,36 @@ +\version "2.14.0" +\header { + texidoc = "\modalTranspose, \retrograde, \inversion and +\modalInversion work for an octatonic motif." +} + +cOctatonicScale = { + c' d' ees' f' + ges' aes' a' b' +} +motif = { + c'8. ees'16 ges'8. a'16 + b'8. aes'16 f'8. d'16 +} + +\score { + \new Staff { + \time 4/4 + << + { + \motif + \modalTranspose c' f' \cOctatonicScale \motif + \retrograde \motif + \modalInversion aes' b' \cOctatonicScale \motif + \inversion aes' b' \motif + } + { + s1-"Octatonic motif" | + s1-"motif transposed from c to f" | + s1-"motif in retrograde" | + s1-"motif inverted around aes to b" | + s1-"motif inverted exactly" + } + >> + } +} diff --git a/input/regression/modern-tab-clef-scaled.ly b/input/regression/modern-tab-clef-scaled.ly new file mode 100644 index 0000000000..d1ad29e231 --- /dev/null +++ b/input/regression/modern-tab-clef-scaled.ly @@ -0,0 +1,39 @@ +\version "2.14.0" + +\header{ texidoc = "The sans serif style tab clef is automatically adjusted to + different string spacings." + } + +guitar = \relative c { + c4 d e f + e4 d c2 +} + +\score { + << + \new Staff { + \clef "treble_8" + \guitar + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #guitar-tuning + \guitar + } + >> +} + +\score { + << + \new Staff { + \clef "treble_8" + \guitar + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #guitar-tuning + \override TabStaff.StaffSymbol #'staff-space = #1.0 % default value is 1.5 + \guitar + } + >> +} \ No newline at end of file diff --git a/input/regression/modern-tab-clef.ly b/input/regression/modern-tab-clef.ly new file mode 100644 index 0000000000..b9fc3f945e --- /dev/null +++ b/input/regression/modern-tab-clef.ly @@ -0,0 +1,44 @@ +\version "2.14.0" + +\header{ texidoc = "Sans serif style tab clefs are supported by @code{\\clef moderntab}. + This alternative clef supports four- to seven-stringed instruments + and is scaled automatically." + } + +bass = \relative c, { + c4 d e f + e4 d c2 +} + +guitar = \relative c { + c4 d e f + e4 d c2 +} + +\score { + << + \new Staff { + \clef "bass_8" + \bass + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #bass-four-string-tuning + \bass + } + >> +} + +\score { + << + \new Staff { + \clef "treble_8" + \guitar + } + \new TabStaff { + \clef "moderntab" + \set TabStaff.stringTunings = #guitar-seven-string-tuning + \guitar + } + >> +} \ No newline at end of file diff --git a/input/mutopia/F.Schubert/morgenlied.ly b/input/regression/morgenlied.ly similarity index 96% rename from input/mutopia/F.Schubert/morgenlied.ly rename to input/regression/morgenlied.ly index b7941a4f55..9d67c32ca2 100644 --- a/input/mutopia/F.Schubert/morgenlied.ly +++ b/input/regression/morgenlied.ly @@ -27,7 +27,7 @@ been lowered } -\version "2.12.0" +\version "2.14.0" manuscriptBreak = { \break } @@ -38,8 +38,7 @@ manuscriptBreak = { \break } %#(set-global-staff-size (* 5.8 mm)) line-width = #(* mm 160) indent = 8\mm - interscoreline = 2.\mm - between-system-space = 15\mm + system-system-spacing #'basic-distance = #10.3 ragged-bottom = ##t } @@ -171,12 +170,11 @@ pianoLH = \relative c'' \repeat volta 2 { \layout { \context { \Lyrics - \override VerticalAxisGroup #'minimum-Y-extent = #'(-0.5 . 2.5) \override LyricText #'font-size = #-1 } \context { \Score - \override Beam #'thickness = #0.55 + \override Beam #'beam-thickness = #0.55 \override SpacingSpanner #'spacing-increment = #1.0 \override Slur #'height-limit = #1.5 } diff --git a/input/mutopia/W.A.Mozart/mozart-hrn-3.ly b/input/regression/mozart-hrn-3.ly similarity index 82% rename from input/mutopia/W.A.Mozart/mozart-hrn-3.ly rename to input/regression/mozart-hrn-3.ly index 4e983cebb5..985b415a9e 100644 --- a/input/mutopia/W.A.Mozart/mozart-hrn-3.ly +++ b/input/regression/mozart-hrn-3.ly @@ -14,7 +14,7 @@ style = "classical" maintainer = "hanwen@xs4all.nl" maintainerEmail = "hanwen@xs4all.nl" - maintainerWeb = "http://www.xs4all.nl/~hanwen/" + maintainerWeb = "http://www.xs4all.nl/~hanwen/" lastupdated = "2002/May/21" source = "Edition Breitkopf 2563" footer = "Mutopia-2002/05/21-25" @@ -32,16 +32,15 @@ " and share it!")) } } } -} -%{ + texidoc=" This is the Mozart 3 for horn. It's from an Edition Breitkopf EB 2563, edited by Henri Kling. Henri Kling (1842-1918) was a horn -virtuoso that taught in Geneva. - -%} +virtuoso that taught in Geneva. +" +} -\version "2.12.0" +\version "2.14.0" \include "mozart-hrn3-defs.ily" \include "mozart-hrn3-allegro.ily" @@ -49,7 +48,9 @@ virtuoso that taught in Geneva. \include "mozart-hrn3-rondo.ily" \paper { - between-system-space = 20 \mm + obsolete-between-system-space = 20 \mm + system-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space) + score-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space) } @@ -57,8 +58,8 @@ virtuoso that taught in Geneva. \score { { \transpose c' bes \allegro } \layout { } - \header { piece = "Allegro" opus = "" } - + \header { piece = "Allegro" opus = "" } + \midi { \context { \Score @@ -71,8 +72,8 @@ virtuoso that taught in Geneva. \score { { \transpose c' bes \romanze } - \header { piece = "Romanze" opus = "" } - + \header { piece = "Romanze" opus = "" } + \midi { \context { \Score @@ -88,7 +89,7 @@ virtuoso that taught in Geneva. { { \transpose c' bes \rondo } \header { piece = "Rondo" opus = "" } - + \midi { \context { \Score diff --git a/input/mutopia/W.A.Mozart/mozart-hrn3-allegro.ily b/input/regression/mozart-hrn3-allegro.ily similarity index 93% rename from input/mutopia/W.A.Mozart/mozart-hrn3-allegro.ily rename to input/regression/mozart-hrn3-allegro.ily index d788aeecbc..5f4f1d7269 100644 --- a/input/mutopia/W.A.Mozart/mozart-hrn3-allegro.ily +++ b/input/regression/mozart-hrn3-allegro.ily @@ -55,15 +55,15 @@ allegro = a[( g) d'( b)] a[( g) e'( c) ] b8[( a)] a4 r4 a8[ a] a[( \< b c cis\!\> ] d4 c\!) - ais8[( b)] r8 \cresc b b[( c)] r c + ais8[( b)] r8 b\cresc b[( c)] r c cis[ ( d)] r4 r2 - \endcresc g,1\f ~ g2 ~ g8[ a16 b] c[( d) e c] + g,1\!\f ~ g2 ~ g8[ a16 b] c[( d) e c] %% 64 f4-. d-. b-. g-. R1 - c,2\p e4 g c \cresc e g4. e8 | - \endcresc d4.\f e16[ fis] g[ ( fis) e d] c[( b) a g] + c,2\p e4 g c e\cresc g4. e8 | + d4.\!\f e16[ fis] g[ ( fis) e d] c[( b) a g] << a1(\trill { s2 \grace { @@ -146,9 +146,9 @@ allegro = R1 c1 ~ c | - c8[-. c-.] r c-. cis[( d)] r\cresc d-. | + c8[-. c-.] r c-. cis[( d)] r d-.\cresc | dis[( e)] r e-. e[( f)] r f-. | - g4-.\f\endcresc e-. c-. bes-. | + g4-.\!\f e-. c-. bes-. | g-.\ff e-. c-. r | a'2 ~ a8[_""_\markup { \bold \italic "sempre " \dynamic "f" } b16 c] d[( e d e)] diff --git a/input/mutopia/W.A.Mozart/mozart-hrn3-defs.ily b/input/regression/mozart-hrn3-defs.ily similarity index 83% rename from input/mutopia/W.A.Mozart/mozart-hrn3-defs.ily rename to input/regression/mozart-hrn3-defs.ily index c234ffd3d5..fe9966d71f 100644 --- a/input/mutopia/W.A.Mozart/mozart-hrn3-defs.ily +++ b/input/regression/mozart-hrn3-defs.ily @@ -6,12 +6,6 @@ ritenuto = \markup { \italic "rit." } \version "2.11.61" -cresc = { - #(ly:export (make-event-chord (list (make-span-event 'CrescendoEvent START)))) - \set crescendoText = \markup { \italic \bold "cresc." } - \set crescendoSpanner = #'text -} - \layout { \context { \Score diff --git a/input/mutopia/W.A.Mozart/mozart-hrn3-romanze.ily b/input/regression/mozart-hrn3-romanze.ily similarity index 100% rename from input/mutopia/W.A.Mozart/mozart-hrn3-romanze.ily rename to input/regression/mozart-hrn3-romanze.ily diff --git a/input/mutopia/W.A.Mozart/mozart-hrn3-rondo.ily b/input/regression/mozart-hrn3-rondo.ily similarity index 91% rename from input/mutopia/W.A.Mozart/mozart-hrn3-rondo.ily rename to input/regression/mozart-hrn3-rondo.ily index b4372ef72f..81e7834417 100644 --- a/input/mutopia/W.A.Mozart/mozart-hrn3-rondo.ily +++ b/input/regression/mozart-hrn3-rondo.ily @@ -133,11 +133,10 @@ rondo = \relative c' R2. | r8 g[ g] g[ g g] es'4. ~ es8[ d c] - \cresc b4. c4. d4. e4. + b4.\cresc c4. d4. e4. \mark "F" - \endcresc - f2.\f ~ | + f2.\!\f ~ | f4 r8 r4 r8 r8 g,[\> g] g[ g g] @@ -161,10 +160,10 @@ rondo = \relative c' c[ ( e) g,-.] c[ ( e) g,-.] c[ ( e) g,-.] c[ ( e) g,-.] \mark "H" - \cresc g'2. bes,2. + g'2.\cresc bes,2. a4. b16[ c d e f g] a4. f4 d8 - \endcresc c8[\f g' e] c[ g e] + c8[\!\f g' e] c[ g e] c[ e' c] g[ e c] g4 r8 g''8[ e c] @@ -181,15 +180,15 @@ rondo = \relative c' R2.*5 r8 r8^\fermata d8\p d[ e f] g[ ( e) c] d[( e) d] - \cresc c[ c c] d[ e f] + c[\cresc c c] d[ e f] g[( e) c] d[( e) d] - \endcresc c4\f r8 r4 r8 + c4\!\f r8 r4 r8 R2.*5 c8[\f c, c] c[ c c] c4 r8 c4 r8 - %This is technically incorrect, since we started with an 8th - % upstep, but both eulenburg and EB do this as well. + % This is technically incorrect, since we started with an 8th + % note pickup, but both eulenburg and EB do this as well. c4 r8 r4 r8 \bar "|." } diff --git a/input/regression/multi-measure-rest-center.ly b/input/regression/multi-measure-rest-center.ly index 9189e0c6a8..c5fab88be7 100644 --- a/input/regression/multi-measure-rest-center.ly +++ b/input/regression/multi-measure-rest-center.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The multimeasure rest is centered exactly between bar lines." diff --git a/input/regression/multi-measure-rest-center2.ly b/input/regression/multi-measure-rest-center2.ly index 22eaae2cd0..8b6348726a 100644 --- a/input/regression/multi-measure-rest-center2.ly +++ b/input/regression/multi-measure-rest-center2.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/multi-measure-rest-grace.ly b/input/regression/multi-measure-rest-grace.ly index 1e5d20359f..cf1d7d6bf6 100644 --- a/input/regression/multi-measure-rest-grace.ly +++ b/input/regression/multi-measure-rest-grace.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/multi-measure-rest-instr-name.ly b/input/regression/multi-measure-rest-instr-name.ly index 70c01d70fa..08ce7ab16b 100644 --- a/input/regression/multi-measure-rest-instr-name.ly +++ b/input/regression/multi-measure-rest-instr-name.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "There are both long and short instrument names. diff --git a/input/regression/multi-measure-rest-multi-staff-center.ly b/input/regression/multi-measure-rest-multi-staff-center.ly index 14ddd436cf..5ed91a15b1 100644 --- a/input/regression/multi-measure-rest-multi-staff-center.ly +++ b/input/regression/multi-measure-rest-multi-staff-center.ly @@ -1,17 +1,19 @@ -\header { texidoc = "The centering of multi-measure rests is -independent on prefatory matter in other staves." - - } - - -\version "2.12.0" -\layout { ragged-right = ##t } - - -<< \new Staff { R1 } - \new Staff { f'1 \clef bass } - - >> - - - +\version "2.14.0" + +\header { + texidoc = "Though the default spacing for multi-measure rests +is affected by prefatory matter in other staves, centering can be +restored by overriding @code{spacing-pair}." +} + +<< + \new Staff { + \once \override MultiMeasureRest #'spacing-pair = + #'(break-alignment . staff-bar) + R1 + } + \new Staff { + f'1 + \clef bass + } +>> diff --git a/input/regression/multi-measure-rest-spacing.ly b/input/regression/multi-measure-rest-spacing.ly index e0f268b176..d4fc8c7687 100644 --- a/input/regression/multi-measure-rest-spacing.ly +++ b/input/regression/multi-measure-rest-spacing.ly @@ -8,7 +8,7 @@ extra spacing column is created. This should not cause problems." ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" << diff --git a/input/regression/multi-measure-rest-text.ly b/input/regression/multi-measure-rest-text.ly index 05ab44cd81..2e2d4324da 100644 --- a/input/regression/multi-measure-rest-text.ly +++ b/input/regression/multi-measure-rest-text.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/multi-measure-rest-usebreve.ly b/input/regression/multi-measure-rest-usebreve.ly index 9bb8af348f..2ed4f9c791 100644 --- a/input/regression/multi-measure-rest-usebreve.ly +++ b/input/regression/multi-measure-rest-usebreve.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="For longer measure lengths, the breve rest is used." diff --git a/input/regression/multi-measure-rest.ly b/input/regression/multi-measure-rest.ly index 7edfd5939e..d3a31db9e9 100644 --- a/input/regression/multi-measure-rest.ly +++ b/input/regression/multi-measure-rest.ly @@ -1,16 +1,15 @@ -\version "2.12.0" -\header{ +\version "2.14.0" +\header { texidoc=" -Multi-measure rests do not collide with barlines and clefs. They +Multi-measure rests do not collide with bar lines and clefs. They are not expanded when you set @code{Score.skipBars}. Although the -multi-measure-rest is a Spanner, minimum distances are set to keep it -colliding from barlines. - -Rests over measures during longer than 2 wholes use breve rests. When -more than 10 or more measures (tunable through @code{expand-limit}) -are used then a different symbol is used. +multi-measure-rest is a Spanner, minimum distances are set to stop it +colliding with bar lines. +Rests over measures lasting longer than 2 wholes use breve rests. When +more than 10 measures (tunable through @code{expand-limit}) are used +then a different symbol is used. " } @@ -19,19 +18,16 @@ are used then a different symbol is used. \Score skipBars = ##t } - ragged-right = ##t } - { - \time 3/4 \key cis \major + \time 3/4 + \key cis \major R2.*15 R2.*7 R2.*9 R2.*11 - + \clef bass \time 8/4 R1*2 } - - diff --git a/input/regression/multiple-time-sig-settings.ly b/input/regression/multiple-time-sig-settings.ly new file mode 100644 index 0000000000..2caad79c8e --- /dev/null +++ b/input/regression/multiple-time-sig-settings.ly @@ -0,0 +1,34 @@ +\version "2.14.0" + +\header { + texidoc = " +Multiple overrides to the default time signature settings can be +added. In this example, notes should be beamed as indicated +by the markups. +" +} + +\new Staff{ + \relative c' { + \overrideTimeSignatureSettings + #'(4 . 4) % time signature fraction + #'(1 . 4) % base moment fraction + #'(1 1 1 1) % beatStructure + #'() % beamExceptions + \overrideTimeSignatureSettings + #'(3 . 4) % time signature fraction + #'(1 . 4) % base moment fraction + #'(1 1 1) % beatStructure + #'() % beamExceptions + \time 4/4 + c8^\markup {"Beam by 1/4"} c c c c c c c | + \time 3/4 + c8^\markup {"Beam by 1/4"} c c c c c | + \revertTimeSignatureSettings #'(4 . 4) + \revertTimeSignatureSettings #'(3 . 4) + \time 4/4 + c8^\markup {"Beam by 1/2"} c c c c c c c | + \time 3/4 + c8^\markup {"Beam by 3/4"} c c c c c | + } +} diff --git a/input/regression/music-function-end-spanners.ly b/input/regression/music-function-end-spanners.ly index 510af5eddd..f36e586340 100644 --- a/input/regression/music-function-end-spanners.ly +++ b/input/regression/music-function-end-spanners.ly @@ -6,7 +6,7 @@ end span events at the end of a note." } -\version "2.12.0" +\version "2.14.0" \paper{ ragged-right = ##T } diff --git a/input/regression/music-function-post-event.ly b/input/regression/music-function-post-event.ly new file mode 100644 index 0000000000..77346dcc87 --- /dev/null +++ b/input/regression/music-function-post-event.ly @@ -0,0 +1,22 @@ +\version "2.14.0" + +\header +{ + + texidoc = "Music functions may be attached to notes; +in this case they must be introduced by a direction +indicator. If a non-neutral direction is given (i.e. +anything else than a dash), then the 'direction property +of the resulting object is set accordingly." + +} + +dynScript = +#(define-music-function (parser location text) (string?) + (make-dynamic-script text)) + +\relative c' { + c1-\dynScript "pp" + c^\dynScript "fp" + c_\dynScript "spz" +} diff --git a/input/regression/music-function-string-markup.ly b/input/regression/music-function-string-markup.ly new file mode 100644 index 0000000000..849539ad8f --- /dev/null +++ b/input/regression/music-function-string-markup.ly @@ -0,0 +1,17 @@ +\version "2.14.0" + +\header { + texidoc = "Music functions accept strings as markup arguments +when using the type predicate @code{markup?} +" +} + +testFunc = +#(define-music-function (parser location text music) (markup? ly:music?) + ;; dummy function, does nothing + music) + +\relative c' { + \testFunc "test string" + c2 +} diff --git a/input/regression/music-function.ly b/input/regression/music-function.ly index 6a6ade9ce3..352dba89cb 100644 --- a/input/regression/music-function.ly +++ b/input/regression/music-function.ly @@ -3,11 +3,11 @@ texidoc = "Music functions are generic music transformation functions, which can be used to extend music syntax seamlessly. Here we -demonstrate a @code{\myBar} function, which works similar to -@code{\bar}, but is implemented completely in Scheme." +demonstrate a @code{\\myBar} function, which works similar to +@code{\\bar}, but is implemented completely in Scheme." } -\version "2.12.0" +\version "2.14.0" myBar = #(define-music-function (parser location bar-type) (string?) (context-spec-music diff --git a/input/regression/music-map.ly b/input/regression/music-map.ly index 661dc03511..c0e8816ebf 100644 --- a/input/regression/music-map.ly +++ b/input/regression/music-map.ly @@ -4,13 +4,13 @@ "With @code{music-map}, you can apply functions operating on a single piece of music to an entire music expression. In this example, -the the function @code{notes-to-skip} changes a note to a skip. When +the function @code{notes-to-skip} changes a note to a skip. When applied to an entire music expression in the 1st measure, the scripts and dynamics are left over. These are put onto the 2nd measure." } -\version "2.12.0" +\version "2.14.0" #(define (notes-to-skip m) "Convert all stuff with duration (notes, lyrics, bass figures, etc.) to skips. @@ -29,7 +29,7 @@ Scripts and dynamics are maintained. \layout { ragged-right= ##t } -foobar = \transpose c c' { c4\>-^ c4-^ c4\!-^ c4-^ } +foobar = \transpose c c' { c4\>-^ c4-^ c4\!-^ c4-^ } \relative c'' \context Voice { @@ -37,5 +37,5 @@ foobar = \transpose c c' { c4\>-^ c4-^ c4\!-^ c4-^ } << \applyMusic #(lambda (x) (music-map notes-to-skip x)) \foobar - { d8 d d d d d d d } >> + { d8 d d d d d d d } >> } diff --git a/input/regression/musicxml/00-Introduction.itexi b/input/regression/musicxml/00-Introduction.itexi index 7be82e7f06..f3eab7559b 100644 --- a/input/regression/musicxml/00-Introduction.itexi +++ b/input/regression/musicxml/00-Introduction.itexi @@ -18,6 +18,13 @@ files available for testing purposes. The complete set of MusicXML test files contained in this suite can be downloaded @uref{MusicXML-TestSuite-0.1.zip,here} as a ZIP archive. +@heading License of the test suite + +This collection of MusicXML test files is distributed under the +@uref{http://www.opensource.org/licenses/mit-license.php,MIT license}, which +means that you can use the files for any purpose, as long as you leave the +copyright notice (or the LICENSE file) intact. + @heading Connection with @uref{http://www.lilypond.org/,LilyPond} At the same time as providing a generic test suite for MusicXML document, diff --git a/input/regression/musicxml/01e-Pitches-ParenthesizedAccidentals.xml b/input/regression/musicxml/01e-Pitches-ParenthesizedAccidentals.xml new file mode 100644 index 0000000000..d10c459533 --- /dev/null +++ b/input/regression/musicxml/01e-Pitches-ParenthesizedAccidentals.xml @@ -0,0 +1,223 @@ + + + + + + Accidentals can be cautionary + or editorial. Each measure has a normal accidental, an editorial, + a cautionary and an editioal and cautionary accidental. + + + + + MusicXML Part + + + + + + + 1 + + 0 + major + + + + G + 2 + + + + + D + -1 + 4 + + 1 + 1 + quarter + flat + + + + D + -1 + 4 + + 1 + 1 + quarter + flat + + + + D + -1 + 4 + + 1 + 1 + quarter + flat + + + + D + -1 + 4 + + 1 + 1 + quarter + flat + + + + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + + + + D + -2 + 4 + + 1 + 1 + quarter + double-flat + + + + D + -2 + 4 + + 1 + 1 + quarter + double-flat + + + + D + -2 + 4 + + 1 + 1 + quarter + double-flat + + + + D + -2 + 4 + + 1 + 1 + quarter + double-flat + + + + + + + C + 2 + 4 + + 1 + 1 + quarter + double-sharp + + + + C + 2 + 4 + + 1 + 1 + quarter + double-sharp + + + + C + 2 + 4 + + 1 + 1 + quarter + double-sharp + + + + C + 2 + 4 + + 1 + 1 + quarter + double-sharp + + + + + diff --git a/input/regression/musicxml/01f-Pitches-ParenthesizedMicrotoneAccidentals.xml b/input/regression/musicxml/01f-Pitches-ParenthesizedMicrotoneAccidentals.xml new file mode 100644 index 0000000000..96158eef40 --- /dev/null +++ b/input/regression/musicxml/01f-Pitches-ParenthesizedMicrotoneAccidentals.xml @@ -0,0 +1,224 @@ + + + + + + Microtone accidentals can be + cautionary or editorial. Each measure has a normal accidental, + an editorial, a cautionary and an editioal and cautionary + accidental. + + + + + MusicXML Part + + + + + + + 1 + + 0 + major + + + + G + 2 + + + + + D + -0.5 + 4 + + 1 + 1 + quarter + quarter-flat + + + + D + -0.5 + 4 + + 1 + 1 + quarter + quarter-flat + + + + D + -0.5 + 4 + + 1 + 1 + quarter + quarter-flat + + + + D + -0.5 + 4 + + 1 + 1 + quarter + quarter-flat + + + + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + C + 1 + 4 + + 1 + 1 + quarter + sharp + + + + + + + D + -1.5 + 4 + + 1 + 1 + quarter + three-quarters-flat + + + + D + -1.5 + 4 + + 1 + 1 + quarter + three-quarters-flat + + + + D + -1.5 + 4 + + 1 + 1 + quarter + three-quarters-flat + + + + D + -1.5 + 4 + + 1 + 1 + quarter + three-quarters-flat + + + + + + + C + 1.5 + 4 + + 1 + 1 + quarter + three-quarters-sharp + + + + C + 1.5 + 4 + + 1 + 1 + quarter + three-quarters-sharp + + + + C + 1.5 + 4 + + 1 + 1 + quarter + three-quarters-sharp + + + + C + 1.5 + 4 + + 1 + 1 + quarter + three-quarters-sharp + + + + + diff --git a/input/regression/musicxml/03a-Rhythm-Durations.xml b/input/regression/musicxml/03a-Rhythm-Durations.xml index e0dab25041..b9fc0b1508 100644 --- a/input/regression/musicxml/03a-Rhythm-Durations.xml +++ b/input/regression/musicxml/03a-Rhythm-Durations.xml @@ -39,7 +39,7 @@ 1024 1 - longa + long @@ -150,7 +150,7 @@ 1536 1 - longa + long @@ -272,7 +272,7 @@ 1792 1 - longa + long diff --git a/input/regression/musicxml/03d-Rhythm-DottedDurations-Factors.xml b/input/regression/musicxml/03d-Rhythm-DottedDurations-Factors.xml new file mode 100644 index 0000000000..2a53d2c7f7 --- /dev/null +++ b/input/regression/musicxml/03d-Rhythm-DottedDurations-Factors.xml @@ -0,0 +1,306 @@ + + + + + + Several durations can be written + with dots. For multimeasure rests, we can also have durations that + cannot be expressed with dotted notes (like 5/8). + + + + + MusicXML Part + + + + + + + 4 + + + + + C + 5 + + 2 + 1 + eighth + + + + + + + 1 + + + + + 2 + 1 + + + + + + + + + + C + 5 + + 4 + 1 + quarter + + + + + + + 1 + + + + + 4 + 1 + + + + + + + + + + C + 5 + + 12 + 1 + half + + + + + + + + 1 + + + + + 12 + 1 + + + + + + + + + + C + 5 + + 16 + 1 + whole + + + + + + + 1 + + + + + 16 + 1 + + + + + + + + + + C + 5 + + 4 + 1 + quarter + + + + C + 5 + + 1 + 1 + 16th + + + + + + + 1 + + + + + 5 + 1 + + + + + + + + + + C + 5 + + 14 + 1 + half + + + + + + + + 1 + + + + + 14 + 1 + + + + + + + + + + C + 5 + + 16 + 1 + whole + + + + C + 5 + + 2 + 1 + eighth + + + + + + + 1 + + + + + 18 + 1 + + + + + + + + + + C + 5 + + 1 + 1 + 16th + + + + + + + 1 + + + + + 62 + 1 + + + + + + + + + + C + 5 + + 16 + 1 + whole + + + + diff --git a/input/regression/musicxml/11c-TimeSignatures-CompoundSimple.xml b/input/regression/musicxml/11c-TimeSignatures-CompoundSimple.xml index 576ad4e87c..e0c5cb53ff 100644 --- a/input/regression/musicxml/11c-TimeSignatures-CompoundSimple.xml +++ b/input/regression/musicxml/11c-TimeSignatures-CompoundSimple.xml @@ -96,7 +96,6 @@ 4 8 - 1 whole diff --git a/input/regression/musicxml/13c-KeySignatures-NonTraditional.xml b/input/regression/musicxml/13c-KeySignatures-NonTraditional.xml index 60872a970b..fa77803890 100644 --- a/input/regression/musicxml/13c-KeySignatures-NonTraditional.xml +++ b/input/regression/musicxml/13c-KeySignatures-NonTraditional.xml @@ -22,11 +22,11 @@ 1 - 3 + F 1 - 5 + A -1 - 6 + B -1 8[ diff --git a/input/regression/rest-collision-beam-restdir.ly b/input/regression/rest-collision-beam-restdir.ly index 642512bd8f..918b2366b2 100644 --- a/input/regression/rest-collision-beam-restdir.ly +++ b/input/regression/rest-collision-beam-restdir.ly @@ -3,7 +3,7 @@ account properly." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/rest-collision-beam.ly b/input/regression/rest-collision-beam.ly index 1ec5441eb2..1e5dd64a47 100644 --- a/input/regression/rest-collision-beam.ly +++ b/input/regression/rest-collision-beam.ly @@ -4,7 +4,7 @@ collision." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/rest-collision-note-duration.ly b/input/regression/rest-collision-note-duration.ly index 5ccce39650..9d47dc667e 100644 --- a/input/regression/rest-collision-note-duration.ly +++ b/input/regression/rest-collision-note-duration.ly @@ -1,4 +1,4 @@ -\version "2.12.2" +\version "2.14.0" \header { texidoc = "Vertical rest positions in a multi-voice staff should obey the duration of diff --git a/input/regression/rest-collision.ly b/input/regression/rest-collision.ly index 1b98c177cf..884c059dc0 100644 --- a/input/regression/rest-collision.ly +++ b/input/regression/rest-collision.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Rests should not collide with beams, stems and noteheads. Rests may diff --git a/input/regression/rest-dot-position.ly b/input/regression/rest-dot-position.ly index 78a587d58c..ffd1f69832 100644 --- a/input/regression/rest-dot-position.ly +++ b/input/regression/rest-dot-position.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/rest-ledger.ly b/input/regression/rest-ledger.ly index 7ea955a369..8c87844510 100644 --- a/input/regression/rest-ledger.ly +++ b/input/regression/rest-ledger.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Whole and half rests moving outside the staff should get ledger lines." diff --git a/input/regression/rest-note-collision.ly b/input/regression/rest-note-collision.ly index 16a19df926..bfdf061f79 100644 --- a/input/regression/rest-note-collision.ly +++ b/input/regression/rest-note-collision.ly @@ -7,7 +7,7 @@ } -\version "2.12.0" +\version "2.14.0" \new Staff { << diff --git a/input/regression/rest-pitch.ly b/input/regression/rest-pitch.ly index a413b7f4ca..93a9531558 100644 --- a/input/regression/rest-pitch.ly +++ b/input/regression/rest-pitch.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Rests can have pitches--these will be affected by diff --git a/input/regression/rest-pitched-beam.ly b/input/regression/rest-pitched-beam.ly index a3f6c90e0a..4ce2fe3fff 100644 --- a/input/regression/rest-pitched-beam.ly +++ b/input/regression/rest-pitched-beam.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" \relative c'{ a\rest a8[ a\rest b] diff --git a/input/regression/rest-polyphonic-2.ly b/input/regression/rest-polyphonic-2.ly new file mode 100644 index 0000000000..90229e14d2 --- /dev/null +++ b/input/regression/rest-polyphonic-2.ly @@ -0,0 +1,19 @@ +\header { + + texidoc = "Rests avoid notes. Each rest is moved in the direction +of the stems in its voice. Rests may overlap other rests in voices +with the same stem direction, in which case a warning is given, but +is supressed if the rest has a pitch." + +} + +\version "2.14.2" + +\new Staff << + \relative c''' { g8 g g r r2 } \\ + \relative c' { a4\rest c r2 } \\ + \relative c'' { c4 c r2 } \\ + \relative c'' { r2 g } +>> + + diff --git a/input/regression/rest-polyphonic.ly b/input/regression/rest-polyphonic.ly index 08e681a103..2a210d0d85 100644 --- a/input/regression/rest-polyphonic.ly +++ b/input/regression/rest-polyphonic.ly @@ -9,7 +9,7 @@ even if there is no opposite note or rest. The amount is two \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \new Staff \relative c' { diff --git a/input/regression/rest.ly b/input/regression/rest.ly index 49656162bd..81e47ea824 100644 --- a/input/regression/rest.ly +++ b/input/regression/rest.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/rhythmic-staff.ly b/input/regression/rhythmic-staff.ly index 10447e4b1e..8fd73df219 100644 --- a/input/regression/rhythmic-staff.ly +++ b/input/regression/rhythmic-staff.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/safe.ly b/input/regression/safe.ly index 00952f2ddd..b57f16fda9 100644 --- a/input/regression/safe.ly +++ b/input/regression/safe.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" "expect-error" = ##t diff --git a/input/regression/scheme-book-scores.ly b/input/regression/scheme-book-scores.ly new file mode 100644 index 0000000000..5c78b21dd3 --- /dev/null +++ b/input/regression/scheme-book-scores.ly @@ -0,0 +1,62 @@ +\version "2.14.0" + +\header { + + texidoc = "Scores can be generated with scheme, too, and inserted into the +current book(part). Generated and explicit scores can be mixed, the header +informations from top- and booklevel stack correctly." + +} + +#(use-modules (scm display-lily)) + +% Sample score, which adds a score (containing just one note) to the current +% book/bookpart/at toplevel using scheme rather than the parser. +% That score is supposed to use the global header information, too. +#(define add-one-note-score + (let ((pitch 0)) + (lambda (parser) + (let* ((scmpitch (ly:make-pitch 0 pitch 0)) + (music (make-music 'EventChord + 'elements (list (make-music 'NoteEvent + 'duration (ly:make-duration 2 0 1 1) + 'pitch scmpitch)))) + (score (scorify-music music parser)) + (layout (ly:output-def-clone $defaultlayout)) + (desc (markup #:large #:line ((ly:format "Score with a ~a" + (note-name->lily-string scmpitch parser)))))) + (ly:score-add-output-def! score layout) + (add-text parser desc) + (add-score parser score)) + (set! pitch (modulo (1+ pitch) 7))))) + +oneNoteScore = +#(define-music-function (parser location) () + (add-one-note-score parser) + (make-music 'Music 'void #t)) + +%%% + +\header { + title = "Main Title" + subtitle = "Main subtitle" + piece = "Piecetitle" +} + +\oneNoteScore + +\bookpart { + \header { title ="Title 1" subtitle="Sub1"} + \oneNoteScore + \score { \relative c' c1 } + \oneNoteScore +} + + +\bookpart { + \score { \relative c' c1 } + \oneNoteScore +} + +\oneNoteScore + diff --git a/input/regression/scheme-engraver-instance.ly b/input/regression/scheme-engraver-instance.ly new file mode 100644 index 0000000000..4136171a10 --- /dev/null +++ b/input/regression/scheme-engraver-instance.ly @@ -0,0 +1,36 @@ +\header { + + texidoc = "Scheme engravers may be instantiated, with + instance-scoped slots, by defining a 1 argument procedure which + shall return the engraver definition as an alist, with the private + slots defined in a closure. The argument procedure argument is the + context where the engraver is instantiated." + +} + +\version "2.14.0" + +\layout { + \context { + \Voice + \consists + #(let ((instance-counter 0)) + (lambda (context) + (set! instance-counter (1+ instance-counter)) + (let ((instance-id instance-counter) + (private-note-counter 0)) + `((listeners + (note-event + . ,(lambda (engraver event) + (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 + private-note-counter)))))))))) + } +} + +<< + \relative c'' { c4 d e f } + \\ \relative c' { c4 d e f } +>> \ No newline at end of file diff --git a/input/regression/scheme-engraver.ly b/input/regression/scheme-engraver.ly new file mode 100644 index 0000000000..d5fefc6507 --- /dev/null +++ b/input/regression/scheme-engraver.ly @@ -0,0 +1,75 @@ +\header { + + texidoc = "\\consists can take a scheme alist as arguments, which + should be functions, which will be invoked as engraver functions." + +} + +\version "2.14.0" + +\layout { + \context { + \Voice + \consists + #(list + (cons 'initialize + (lambda (trans) + (display (list "initialize" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (cons 'start-translation-timestep + (lambda (trans) + (display (list "start-trans" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (cons 'listeners + (list + (cons 'rest-event (lambda (engraver event) + (let* + ((x (ly:engraver-make-grob engraver 'TextScript event))) + (display (list "caught event" event "\ncreate:\n" x "\n")) + (ly:grob-set-property! x 'text "hi")) + )) + )) + (cons 'acknowledgers + (list + (cons 'note-head-interface + (lambda (engraver grob source-engraver) + (display (list "saw head: " grob " coming from " source-engraver)) + )) + )) + (cons 'end-acknowledgers + (list + (cons 'beam-interface + (lambda (engraver grob source-engraver) + (display (list "saw end of beam: " grob " coming from " source-engraver)) + )) + )) + (cons 'process-music + (lambda (trans) + (display (list "process-music" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (cons 'process-acknowledged + (lambda (trans) + (display (list "process-acknowledged" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (cons 'stop-translation-timestep + (lambda (trans) + (display (list "stop-trans" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (cons 'finalize + (lambda (trans) + (display (list "finalize" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + ) + + }} + + +\relative c' { + c8[ r c] +} diff --git a/input/regression/scheme-text-spanner.ly b/input/regression/scheme-text-spanner.ly new file mode 100644 index 0000000000..6541f05a34 --- /dev/null +++ b/input/regression/scheme-text-spanner.ly @@ -0,0 +1,206 @@ +\version "2.14.0" + +\header { + texidoc = "Use @code{define-event-class}, scheme engraver methods, +and grob creation methods to create a fully functional text spanner +in scheme." +} + +#(define-event-class 'scheme-text-span-event + '(scheme-text-span-event + span-event + music-event + StreamEvent)) + +#(define (add-grob-definition grob-name grob-entry) + (let* ((meta-entry (assoc-get 'meta grob-entry)) + (class (assoc-get 'class meta-entry)) + (ifaces-entry (assoc-get 'interfaces meta-entry))) + (set-object-property! grob-name 'translation-type? list?) + (set-object-property! grob-name 'is-grob? #t) + (set! ifaces-entry (append (case class + ((Item) '(item-interface)) + ((Spanner) '(spanner-interface)) + ((Paper_column) '((item-interface + paper-column-interface))) + ((System) '((system-interface + spanner-interface))) + (else '(unknown-interface))) + ifaces-entry)) + (set! ifaces-entry (uniq-list (sort ifaces-entry symbol> diff --git a/input/regression/skiptypesetting-show-first-and-last.ly b/input/regression/skiptypesetting-show-first-and-last.ly index 1395cea129..727be4e61b 100644 --- a/input/regression/skiptypesetting-show-first-and-last.ly +++ b/input/regression/skiptypesetting-show-first-and-last.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" showFirstLength = R1*1 showLastLength = R1*2 diff --git a/input/regression/skiptypesetting-show-first.ly b/input/regression/skiptypesetting-show-first.ly index 027f33e365..4f088ea46c 100644 --- a/input/regression/skiptypesetting-show-first.ly +++ b/input/regression/skiptypesetting-show-first.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" showFirstLength = R1*3 \paper { diff --git a/input/regression/skiptypesetting-show-last.ly b/input/regression/skiptypesetting-show-last.ly index e1845924b0..2549441068 100644 --- a/input/regression/skiptypesetting-show-last.ly +++ b/input/regression/skiptypesetting-show-last.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" showLastLength = R1*3 \paper { diff --git a/input/regression/skiptypesetting-tuplet.ly b/input/regression/skiptypesetting-tuplet.ly index 07ec57e54e..4f87ffd0df 100644 --- a/input/regression/skiptypesetting-tuplet.ly +++ b/input/regression/skiptypesetting-tuplet.ly @@ -7,7 +7,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##T } diff --git a/input/regression/skyline-debug.ly b/input/regression/skyline-debug.ly index d6fb9e1077..6746e2ae05 100644 --- a/input/regression/skyline-debug.ly +++ b/input/regression/skyline-debug.ly @@ -1,7 +1,7 @@ \header { texidoc = "@code{-ddebug-skyline} draws the outline of the skyline used." } -\version "2.12.0" +\version "2.14.0" #(set-default-paper-size "a6" ) diff --git a/input/regression/skyline-horizontal-padding.ly b/input/regression/skyline-horizontal-padding.ly new file mode 100644 index 0000000000..194e8ec765 --- /dev/null +++ b/input/regression/skyline-horizontal-padding.ly @@ -0,0 +1,27 @@ +\version "2.14.0" + +\header { + texidoc = " +The skyline-horizontal-padding property can be set for System +in order to keep systems from being spaced too closely together. +In this example, the low notes from a system should not be +interleaved with the high notes from the next system. +" +} + +\book { + \score { + { + \override Staff.TimeSignature #'stencil = ##f + \repeat unfold 3 { c' c' \break} + } + \layout { + indent = 0 + ragged-right = ##t + \context { + \Score + \override System #'skyline-horizontal-padding = #1.5 + } + } + } +} diff --git a/input/regression/skyline-vertical-placement.ly b/input/regression/skyline-vertical-placement.ly index 731db4f2c5..d8b44e95fd 100644 --- a/input/regression/skyline-vertical-placement.ly +++ b/input/regression/skyline-vertical-placement.ly @@ -5,8 +5,9 @@ using a skyline algorithm so that they don't collide with other objects." \layout {ragged-right = ##t} -\version "2.12.0" +\version "2.14.0" \relative c''' { + \override Score.PaperColumn #'keep-inside-line = ##f \override TextScript #'outside-staff-priority = #2 \override DynamicLineSpanner #'outside-staff-priority = #1 c diff --git a/input/regression/skyline-vertical-spacing.ly b/input/regression/skyline-vertical-spacing.ly index 159e1ca856..8109616c93 100644 --- a/input/regression/skyline-vertical-spacing.ly +++ b/input/regression/skyline-vertical-spacing.ly @@ -7,7 +7,7 @@ systems more uniform." \paper {ragged-right = ##t} #(set-default-paper-size "a6") -\version "2.12.0" +\version "2.14.0" \book { \score { { diff --git a/input/regression/slur-broken-trend.ly b/input/regression/slur-broken-trend.ly index f2c524e823..64b4834aa4 100644 --- a/input/regression/slur-broken-trend.ly +++ b/input/regression/slur-broken-trend.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" @@ -35,7 +35,7 @@ in unbroken state. ) s2..\break \stemNeutral - \new Voice \relative { + \new Voice \relative c' { c'8[( c c c] g2 ~ | \break g1) | \break \slurDown c8[( c] g4 ~ g2 ~ | \break diff --git a/input/regression/slur-clef.ly b/input/regression/slur-clef.ly index e9534fcbb1..e0974b8a25 100644 --- a/input/regression/slur-clef.ly +++ b/input/regression/slur-clef.ly @@ -6,6 +6,6 @@ ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \new Staff { \clef bass c4^( \clef "G" g'4) s2 c''1_( f'') } diff --git a/input/regression/slur-cross-staff-beam.ly b/input/regression/slur-cross-staff-beam.ly index 43230682be..713f35c175 100644 --- a/input/regression/slur-cross-staff-beam.ly +++ b/input/regression/slur-cross-staff-beam.ly @@ -1,13 +1,13 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Slurs that depend on a cross-staff beam are not calculated until after line-breaking." } -\paper{ ragged-right=##t } +\paper { ragged-right=##t } \score { \new PianoStaff << - \context Staff = rh \relative { c'8([ d) \change Staff = lh c,] } + \context Staff = rh \relative c'' { c8([ d) \change Staff = lh c,] } \context Staff = lh { s4. } >> -} \ No newline at end of file +} diff --git a/input/regression/slur-cross-staff.ly b/input/regression/slur-cross-staff.ly index 3db78778ad..6b27436034 100644 --- a/input/regression/slur-cross-staff.ly +++ b/input/regression/slur-cross-staff.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Slurs behave decently when broken across a linebreak. diff --git a/input/regression/slur-dash.ly b/input/regression/slur-dash.ly index cd80e244b8..c133568989 100644 --- a/input/regression/slur-dash.ly +++ b/input/regression/slur-dash.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header {texidoc = "@cindex Slur, dotted, dashed The appearance of slurs may be changed from solid to dotted or dashed. " @@ -7,16 +7,23 @@ The appearance of slurs may be changed from solid to dotted or dashed. \relative c'{ - c( d e c) | + c( d e c) | \slurDotted - c( d e c) | + c( d e c) | \slurDashed - c( d e c) | - \override Slur #'dash-period = #2.0 - \override Slur #'dash-fraction = #0.4 - c( d e c) | + c( d e c) | + \slurHalfDashed + c( d e c) | + \slurHalfSolid + c( d e c) | + \slurDashPattern #0.4 #2.0 + c( d e c) | + \once \override Slur #'dash-definition = #'((0 0.25 1 1) + (0.3 0.7 0.4 0.75) + (0.75 1.0 1.0 1.0)) + c( d e c) | \slurSolid - c( d e c) | + c( d e c) | } diff --git a/input/regression/slur-dots.ly b/input/regression/slur-dots.ly index 6b5ba394ad..5c94c8ad65 100644 --- a/input/regression/slur-dots.ly +++ b/input/regression/slur-dots.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc="Slurs should not get confused by augmentation dots. With a lot of dots, the problems becomes more visible." diff --git a/input/regression/slur-double.ly b/input/regression/slur-double.ly index 93386d8a1b..2fc2900016 100644 --- a/input/regression/slur-double.ly +++ b/input/regression/slur-double.ly @@ -3,10 +3,10 @@ texidoc = "Some composers use slurs both above and below chords. This can be typeset by setting @code{doubleSlurs}" } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } -\relative { +\relative c' { \set doubleSlurs = ##t 4 ( ) } diff --git a/input/regression/slur-dynamics.ly b/input/regression/slur-dynamics.ly index d596231620..7cc17026bf 100644 --- a/input/regression/slur-dynamics.ly +++ b/input/regression/slur-dynamics.ly @@ -4,7 +4,7 @@ texidoc = "Dynamics avoid collision with slur." } -\version "2.12.0" +\version "2.14.0" \layout { indent = 0\mm ragged-right = ##t diff --git a/input/regression/slur-extreme.ly b/input/regression/slur-extreme.ly index 47d7d5ec30..d5b45e0314 100644 --- a/input/regression/slur-extreme.ly +++ b/input/regression/slur-extreme.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/slur-grace.ly b/input/regression/slur-grace.ly new file mode 100644 index 0000000000..eeebe458db --- /dev/null +++ b/input/regression/slur-grace.ly @@ -0,0 +1,12 @@ +\version "2.14.2" + +\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 | +} diff --git a/input/regression/slur-manual.ly b/input/regression/slur-manual.ly index 36ab15345e..992a4a28d9 100644 --- a/input/regression/slur-manual.ly +++ b/input/regression/slur-manual.ly @@ -6,10 +6,10 @@ positioning of the slur. It selects the slur configuration closest to the given pair. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##T } -\relative { +\relative c' { \override Slur #'positions = #'(-4 . -5) e( f g) } diff --git a/input/regression/slur-multiple-linebreak.ly b/input/regression/slur-multiple-linebreak.ly new file mode 100644 index 0000000000..1bf370e261 --- /dev/null +++ b/input/regression/slur-multiple-linebreak.ly @@ -0,0 +1,26 @@ +\version "2.14.2" + +#(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 diff --git a/input/regression/slur-multiple.ly b/input/regression/slur-multiple.ly new file mode 100644 index 0000000000..7773632238 --- /dev/null +++ b/input/regression/slur-multiple.ly @@ -0,0 +1,21 @@ +\version "2.14.2" + +#(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 | + +} diff --git a/input/regression/slur-nice.ly b/input/regression/slur-nice.ly index bc0f9c3310..1aab761c28 100644 --- a/input/regression/slur-nice.ly +++ b/input/regression/slur-nice.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Slurs should look nice and symmetric. The curvature may increase diff --git a/input/regression/slur-rest.ly b/input/regression/slur-rest.ly index 07c48656ef..b41bb93225 100644 --- a/input/regression/slur-rest.ly +++ b/input/regression/slur-rest.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc ="Slurs may be placed over rests. The slur will avoid diff --git a/input/regression/slur-scoring.ly b/input/regression/slur-scoring.ly index a1b1ee4506..e2810eea9b 100644 --- a/input/regression/slur-scoring.ly +++ b/input/regression/slur-scoring.ly @@ -7,20 +7,20 @@ one big file, since changing one score parameter for one situation may affect several other situations. - Tunable parameters are in @file{scm/slur.scm}. + Tunable parameters are in @file{scm/slur.scm}. " } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t % #(define debug-slur-scoring #t) } -\relative { - - \grace e'=''16( d8.[) c16] +\relative c'' { + + \grace e=''16( d8.[) c16] d=''8.[ \grace f16( e16)] s2 << {c=''8.([ es16] bes4~bes )} @@ -28,20 +28,20 @@ {r8 r r } >> \new Voice { \voiceOne b='8[ c16( d]) } - g,='8[( a b b! ] c4 bes) + g,='8[( a b b! ] c4 bes) bes='8( f' des bes) as4( bes) r8 d( f e d c b a) cis=''4( d) f=''16( e) d( c) s4 - + c=''2(~c8 d16 c b8 a) - + 4 ( f ) f ^( f ) f _( f ) _( g ) _( \stemDown g \stemNeutral ) - c,='^( c'' c) + c,='^( c'' c) c,,^( c'') c,,^( c') | b='2( a4) s4 @@ -54,14 +54,14 @@ | << { b='8[( c]) } \\ { b='8[( c]) }>> - + s2.| e4( dis4) - e4( dis4) + e4( dis4) g,='16( b d fis) \clef bass a,,=8[ e16(f] g[ a b d,)] s4 | \break e=8[( f] g[ a b d,)] s4 | - + \clef treble \new Voice { \slurDown diff --git a/input/regression/slur-script-inside.ly b/input/regression/slur-script-inside.ly index e4bdaae3ad..0c85c5eb0f 100644 --- a/input/regression/slur-script-inside.ly +++ b/input/regression/slur-script-inside.ly @@ -8,7 +8,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/slur-script.ly b/input/regression/slur-script.ly index 84629752eb..60864a7483 100644 --- a/input/regression/slur-script.ly +++ b/input/regression/slur-script.ly @@ -6,7 +6,7 @@ slur responds appropriately if a script is moved." } -\version "2.12.0" +\version "2.14.0" \layout { indent = 0\mm ragged-right = ##t diff --git a/input/regression/slur-symmetry-1.ly b/input/regression/slur-symmetry-1.ly index a1d04f0a91..08ed383af0 100644 --- a/input/regression/slur-symmetry-1.ly +++ b/input/regression/slur-symmetry-1.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Symmetric figures should lead to symmetric slurs." diff --git a/input/regression/slur-symmetry.ly b/input/regression/slur-symmetry.ly index aea6979bc2..fc1dc2bedd 100644 --- a/input/regression/slur-symmetry.ly +++ b/input/regression/slur-symmetry.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Symmetric figures should lead to symmetric slurs." diff --git a/input/regression/slur-tilt.ly b/input/regression/slur-tilt.ly index ee5e3c1e87..58d399565b 100644 --- a/input/regression/slur-tilt.ly +++ b/input/regression/slur-tilt.ly @@ -8,7 +8,7 @@ point into one note head, and point over another note head." \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \relative c'' { \time 2/4 diff --git a/input/regression/slur-tuplet.ly b/input/regression/slur-tuplet.ly index eb5bae7aea..0f2e8e2755 100644 --- a/input/regression/slur-tuplet.ly +++ b/input/regression/slur-tuplet.ly @@ -5,14 +5,14 @@ This may not work if the slur starts after the tuplet. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t % #(define debug-slur-scoring #t) } -\relative { +\relative c' { \slurUp \override TupletBracket #'bracket-visibility = ##f \override Slur #'(details region-size) = #6 diff --git a/input/regression/song-associated-voice.ly b/input/regression/song-associated-voice.ly index aceb759d8d..a404b6f00a 100644 --- a/input/regression/song-associated-voice.ly +++ b/input/regression/song-associated-voice.ly @@ -1,4 +1,10 @@ -\version "2.12.0" +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +associated voices. +" +} + \include "festival.ly" diff --git a/input/regression/song-basic-nonenglish.ly b/input/regression/song-basic-nonenglish.ly index 4538db7ff0..207a16d805 100644 --- a/input/regression/song-basic-nonenglish.ly +++ b/input/regression/song-basic-nonenglish.ly @@ -1,10 +1,14 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +non-english syllabels. +" +} \include "festival.ly" \festivalsyl #"song-basic-nonenglish.xml" { \tempo 4 = 100 } { -\relative { c e g r } +\relative c' { c e g r } \addlyrics { ov -- čá -- ci } } #(ly:progress "song-basic-nonenglish") diff --git a/input/regression/song-basic.ly b/input/regression/song-basic.ly index 06d3e3b4f7..6b238b9ff0 100644 --- a/input/regression/song-basic.ly +++ b/input/regression/song-basic.ly @@ -1,11 +1,15 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +basic songs. +" +} \include "festival.ly" \festival #"song-basic.xml" { \tempo 4 = 100 } { \time 3/4 -\relative { c2 r2 e4 g2. } +\relative c' { c2 r2 e4 g2. } \addlyrics { play the game } } #(ly:progress "song-basic") diff --git a/input/regression/song-breathe.ly b/input/regression/song-breathe.ly index f0484c130e..6b52aaa3e1 100644 --- a/input/regression/song-breathe.ly +++ b/input/regression/song-breathe.ly @@ -1,11 +1,15 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +breath marks. +" +} \include "festival.ly" \festival #"song-breathe.xml" { \tempo 4 = 100 } { \time 3/4 -\relative { c2 e \breathe g } +\relative c' { c2 e \breathe g } \addlyrics { play the game } } #(ly:progress "song-breathe") diff --git a/input/regression/song-melisma.ly b/input/regression/song-melisma.ly index 6eb9527061..a78f8a5096 100644 --- a/input/regression/song-melisma.ly +++ b/input/regression/song-melisma.ly @@ -1,5 +1,9 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +melismas. +" +} \include "festival.ly" \festival #"song-melisma.xml" { \tempo 4 = 100 } diff --git a/input/regression/song-reordering.ly b/input/regression/song-reordering.ly index 97081984a8..328c56a3cc 100644 --- a/input/regression/song-reordering.ly +++ b/input/regression/song-reordering.ly @@ -1,5 +1,9 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +reordered lyrics. +" +} \include "festival.ly" \festival #"song-reordering.xml" { \tempo 4 = 100 } diff --git a/input/regression/song-reordering2.ly b/input/regression/song-reordering2.ly index 222b16d70a..68bd7aaf13 100644 --- a/input/regression/song-reordering2.ly +++ b/input/regression/song-reordering2.ly @@ -1,5 +1,9 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +reordered lyrics. +" +} \include "festival.ly" \festival #"song-reordering2.xml" { \tempo 4 = 100 } diff --git a/input/regression/song-repetition.ly b/input/regression/song-repetition.ly index e4b5ffa7dc..e64cb4c050 100644 --- a/input/regression/song-repetition.ly +++ b/input/regression/song-repetition.ly @@ -1,5 +1,9 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +repeat signs. +" +} \include "festival.ly" \score{ diff --git a/input/regression/song-skip-noword.ly b/input/regression/song-skip-noword.ly index 17e578f945..b683410d5f 100644 --- a/input/regression/song-skip-noword.ly +++ b/input/regression/song-skip-noword.ly @@ -1,10 +1,14 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +lyrics which are not complete words. +" +} \include "festival.ly" #(set! *skip-word* #f) \festival #"song-skip-noword.xml" { \tempo 4 = 100 } -\relative { c c g' } +\relative c' { c c g' } \addlyrics { twin -- \skip 4 kle diff --git a/input/regression/song-skip.ly b/input/regression/song-skip.ly index 825e548cae..598f8b1de1 100644 --- a/input/regression/song-skip.ly +++ b/input/regression/song-skip.ly @@ -1,9 +1,13 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +skips. +" +} \include "festival.ly" \festival #"song-skip.xml" { \tempo 4 = 100 } -\relative { c c g' } +\relative c' { c c g' } \addlyrics { twin -- \skip 4 kle diff --git a/input/regression/song-slurs.ly b/input/regression/song-slurs.ly index 57a54df7a6..646366c002 100644 --- a/input/regression/song-slurs.ly +++ b/input/regression/song-slurs.ly @@ -1,5 +1,9 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +slurs. +" +} \include "festival.ly" \festival #"song-slurs.xml" { \tempo 4 = 100 } diff --git a/input/regression/song-splitpart.ly b/input/regression/song-splitpart.ly index 9079a66a2b..8ae1e31841 100644 --- a/input/regression/song-splitpart.ly +++ b/input/regression/song-splitpart.ly @@ -1,5 +1,9 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +divided voices. +" +} \include "festival.ly" \score{ diff --git a/input/regression/song-stanzas.ly b/input/regression/song-stanzas.ly index 51fa612507..00307be6e0 100644 --- a/input/regression/song-stanzas.ly +++ b/input/regression/song-stanzas.ly @@ -1,11 +1,15 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +multiple stanzas. +" +} \include "festival.ly" \festival #"song-stanzas.xml" { \tempo 4 = 100 } { \time 3/4 -\relative { c2 e4 g2. } +\relative c' { c2 e4 g2. } \addlyrics { play the game } \addlyrics { speel het spel } \addlyrics { joue le jeu } diff --git a/input/regression/song-tempo.ly b/input/regression/song-tempo.ly index 7eec2b6d4e..18939dcadb 100644 --- a/input/regression/song-tempo.ly +++ b/input/regression/song-tempo.ly @@ -1,11 +1,15 @@ -\version "2.12.0" - +\version "2.14.0" +\header { + texidoc="Festival song synthesis output supports +changing tempo in the middle of a piece. +" +} \include "festival.ly" \festival #"song-tempo.xml" { \tempo 4=90 } { \time 3/4 -\relative { c4 e g \tempo 4=60 c, e g } +\relative c' { c4 e g \tempo 4=60 c, e g } \addlyrics { do re mi do re mi } } #(ly:progress "song-tempo") diff --git a/input/regression/spacing-accidental-rest.ly b/input/regression/spacing-accidental-rest.ly new file mode 100644 index 0000000000..bba75ec1ff --- /dev/null +++ b/input/regression/spacing-accidental-rest.ly @@ -0,0 +1,8 @@ +\version "2.14.0" + +\header { + texidoc = "Accidentals don't collide with shifted-down rests." +} + +\new Staff << g'4 \\ {r8 aeses} >> + diff --git a/input/regression/spacing-accidental-staffs.ly b/input/regression/spacing-accidental-staffs.ly index 17cbeb1cb3..a7b2580dcc 100644 --- a/input/regression/spacing-accidental-staffs.ly +++ b/input/regression/spacing-accidental-staffs.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Accidentals in different staves do not affect the diff --git a/input/regression/spacing-accidental-stretch.ly b/input/regression/spacing-accidental-stretch.ly index 931d443836..c343f37102 100644 --- a/input/regression/spacing-accidental-stretch.ly +++ b/input/regression/spacing-accidental-stretch.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Accidentals do not influence the amount of stretchable space. diff --git a/input/regression/spacing-accidental-tie.ly b/input/regression/spacing-accidental-tie.ly index afcd919335..00b94623b8 100644 --- a/input/regression/spacing-accidental-tie.ly +++ b/input/regression/spacing-accidental-tie.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Horizontal spacing works as expected on tied notes with diff --git a/input/regression/spacing-accidental.ly b/input/regression/spacing-accidental.ly index 4cb0338040..3d8b7c6833 100644 --- a/input/regression/spacing-accidental.ly +++ b/input/regression/spacing-accidental.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Accidentals sticking out to the left diff --git a/input/regression/spacing-bar-accidental.ly b/input/regression/spacing-bar-accidental.ly index edc807ba5f..b3087d4ddd 100644 --- a/input/regression/spacing-bar-accidental.ly +++ b/input/regression/spacing-bar-accidental.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout{ ragged-right = ##t } diff --git a/input/regression/spacing-bar-arpeggio.ly b/input/regression/spacing-bar-arpeggio.ly index cdec5b2039..b96b690313 100644 --- a/input/regression/spacing-bar-arpeggio.ly +++ b/input/regression/spacing-bar-arpeggio.ly @@ -3,7 +3,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout{ragged-right=##t} \new Staff { diff --git a/input/regression/spacing-bar-stem.ly b/input/regression/spacing-bar-stem.ly index c35d683139..69f73930f4 100644 --- a/input/regression/spacing-bar-stem.ly +++ b/input/regression/spacing-bar-stem.ly @@ -9,7 +9,7 @@ to 1.5 staff space." } -\version "2.12.0" +\version "2.14.0" \layout{ ragged-right = ##t } diff --git a/input/regression/spacing-bar-whole-measure.ly b/input/regression/spacing-bar-whole-measure.ly index eac6426ea6..4a7302a4c2 100644 --- a/input/regression/spacing-bar-whole-measure.ly +++ b/input/regression/spacing-bar-whole-measure.ly @@ -3,13 +3,13 @@ } -\version "2.12.0" +\version "2.14.0" \layout{ ragged-right=##t } -\new Staff \relative { +\new Staff \relative c' { \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print \override Score.NonMusicalPaperColumn #'layer = #1 diff --git a/input/regression/spacing-clef-first-note.ly b/input/regression/spacing-clef-first-note.ly index 0024fc0a6a..86763f7653 100644 --- a/input/regression/spacing-clef-first-note.ly +++ b/input/regression/spacing-clef-first-note.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Clef changes at the start of a line get much more space diff --git a/input/regression/spacing-correction-accidentals.ly b/input/regression/spacing-correction-accidentals.ly index b6c342a349..a6a56b3602 100644 --- a/input/regression/spacing-correction-accidentals.ly +++ b/input/regression/spacing-correction-accidentals.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "If right hand stems have accidentals, optical spacing diff --git a/input/regression/spacing-empty-bar.ly b/input/regression/spacing-empty-bar.ly new file mode 100644 index 0000000000..9c630faab9 --- /dev/null +++ b/input/regression/spacing-empty-bar.ly @@ -0,0 +1,10 @@ +\version "2.14.0" + +\header { + texidoc = "Empty barlines do not affect spacing." +} + +{ + c'4 c' \bar "" c' c' \break + \repeat unfold 10 { c' c' c' c' \bar "" \noBreak } +} \ No newline at end of file diff --git a/input/regression/spacing-end-of-line.ly b/input/regression/spacing-end-of-line.ly index 70fceceaaa..1e3450584e 100644 --- a/input/regression/spacing-end-of-line.ly +++ b/input/regression/spacing-end-of-line.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc ="Broken engraving of a bar at the end of a line does not upset diff --git a/input/regression/spacing-ended-voice.ly b/input/regression/spacing-ended-voice.ly index f4b4b83605..3a4842c997 100644 --- a/input/regression/spacing-ended-voice.ly +++ b/input/regression/spacing-ended-voice.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " A voicelet (a very short voice to get polyphonic chords correct) should not confuse the spacing engine." diff --git a/input/regression/spacing-folded-clef-cross-staff.ly b/input/regression/spacing-folded-clef-cross-staff.ly index 03c169b25f..13b8eea0d6 100644 --- a/input/regression/spacing-folded-clef-cross-staff.ly +++ b/input/regression/spacing-folded-clef-cross-staff.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Clefs are also folded under cross staff constructs." } diff --git a/input/regression/spacing-folded-clef.ly b/input/regression/spacing-folded-clef.ly index 720c9834bf..755c5d9509 100644 --- a/input/regression/spacing-folded-clef.ly +++ b/input/regression/spacing-folded-clef.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "A clef can be folded below notes in a different staff, if this does not disrupt the flow of the notes." diff --git a/input/regression/spacing-folded-clef2.ly b/input/regression/spacing-folded-clef2.ly index d272a005e1..2278f9c751 100644 --- a/input/regression/spacing-folded-clef2.ly +++ b/input/regression/spacing-folded-clef2.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "A clef can be folded below notes in a different staff, if diff --git a/input/regression/spacing-folded-clef3.ly b/input/regression/spacing-folded-clef3.ly index e919050d10..465dc30ab0 100644 --- a/input/regression/spacing-folded-clef3.ly +++ b/input/regression/spacing-folded-clef3.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Voices that go back and forth between staves do not confuse the spacing engine." diff --git a/input/regression/spacing-grace-duration.ly b/input/regression/spacing-grace-duration.ly index e7b7b936a4..1961cd845b 100644 --- a/input/regression/spacing-grace-duration.ly +++ b/input/regression/spacing-grace-duration.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Spacing uses the duration of the notes, but disregards diff --git a/input/regression/spacing-grace.ly b/input/regression/spacing-grace.ly index 2c76e8b36a..533bed9353 100644 --- a/input/regression/spacing-grace.ly +++ b/input/regression/spacing-grace.ly @@ -5,7 +5,7 @@ run are spaced accordingly. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/spacing-horizontal-skyline-grace.ly b/input/regression/spacing-horizontal-skyline-grace.ly index 3b0db9daf2..4772d87498 100644 --- a/input/regression/spacing-horizontal-skyline-grace.ly +++ b/input/regression/spacing-horizontal-skyline-grace.ly @@ -6,7 +6,7 @@ and the barline do not collide." } -\version "2.12.0" +\version "2.14.0" \paper { diff --git a/input/regression/spacing-horizontal-skyline.ly b/input/regression/spacing-horizontal-skyline.ly index bf59899597..5f04d7ca35 100644 --- a/input/regression/spacing-horizontal-skyline.ly +++ b/input/regression/spacing-horizontal-skyline.ly @@ -3,14 +3,14 @@ texidoc = "accidentals may be folded under preceding notes." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } -\relative { - \stemUp c''4...*1/2 +\relative c''' { + \stemUp c4...*1/2 ceses,,! eses! @@ -19,6 +19,6 @@ ceses! geses'! ceses,! - + } - + diff --git a/input/regression/spacing-knee-compressed.ly b/input/regression/spacing-knee-compressed.ly index ad74e1837e..f3bcb4a025 100644 --- a/input/regression/spacing-knee-compressed.ly +++ b/input/regression/spacing-knee-compressed.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Spacing corrections for kneed beams still work when @@ -6,6 +6,14 @@ compression is involved." } \paper { line-width = 14.4\cm } + +\layout { + \context { + \Voice + \override Beam #'auto-knee-gap = #1 + } +} + rh = \change Staff = "rh" lh = \change Staff = "lh" \new PianoStaff << diff --git a/input/regression/spacing-knee.ly b/input/regression/spacing-knee.ly index b5c1895385..2f17c31629 100644 --- a/input/regression/spacing-knee.ly +++ b/input/regression/spacing-knee.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "For knees, the spacing correction is such that the diff --git a/input/regression/spacing-loose-grace-error.ly b/input/regression/spacing-loose-grace-error.ly index 470754f059..8a4752c269 100644 --- a/input/regression/spacing-loose-grace-error.ly +++ b/input/regression/spacing-loose-grace-error.ly @@ -7,7 +7,7 @@ texidoc = "Even in case of incorrect contexts (eg. shortlived } -\version "2.12.0" +\version "2.14.0" %% \new Staff cause shortlived, disconnected Voice contexts diff --git a/input/regression/spacing-loose-grace-linebreak.ly b/input/regression/spacing-loose-grace-linebreak.ly index 8cc2597294..3790c2a3a2 100644 --- a/input/regression/spacing-loose-grace-linebreak.ly +++ b/input/regression/spacing-loose-grace-linebreak.ly @@ -4,12 +4,17 @@ across a line break, it gets attached to the end of line." } -\version "2.12.0" +\version "2.14.0" -\new Score \with { - \override SpacingSpanner #'strict-grace-spacing = ##t - \override PaperColumn #'used = ##t -} << +\layout { + \context { + \Score + \override SpacingSpanner #'strict-grace-spacing = ##t + } +} + +\score { + << \new Staff << @@ -36,4 +41,5 @@ across a line break, it gets attached to the end of line." } >> >> +} diff --git a/input/regression/spacing-loose-grace.ly b/input/regression/spacing-loose-grace.ly index 77d50385d6..93c08d3e1a 100644 --- a/input/regression/spacing-loose-grace.ly +++ b/input/regression/spacing-loose-grace.ly @@ -8,7 +8,7 @@ spacing." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/spacing-mark-width.ly b/input/regression/spacing-mark-width.ly index 0b138d1cce..fa1159040e 100644 --- a/input/regression/spacing-mark-width.ly +++ b/input/regression/spacing-mark-width.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/spacing-measure-length.ly b/input/regression/spacing-measure-length.ly index 8cfa85df4a..5e94e485ca 100644 --- a/input/regression/spacing-measure-length.ly +++ b/input/regression/spacing-measure-length.ly @@ -6,7 +6,7 @@ This means that the 3/8 setting does not affect the whole rest spacing." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/spacing-multi-tuplet.ly b/input/regression/spacing-multi-tuplet.ly index f6b578fdf0..6fe2acea27 100644 --- a/input/regression/spacing-multi-tuplet.ly +++ b/input/regression/spacing-multi-tuplet.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ @@ -8,13 +8,14 @@ hence it must be switched on explicitly with the @code{uniform-stretching} property of @code{SpacingSpanner}." } - +\layout{ + \context{ + \Score + \override SpacingSpanner #'uniform-stretching = ##t + } +} \relative c' { - \new Score \with - { - \override SpacingSpanner #'uniform-stretching = ##t - } \context StaffGroup << \new Staff \context Voice { \times 2/10 { c8[ c c c c c c c c c] } diff --git a/input/regression/spacing-no-note.ly b/input/regression/spacing-no-note.ly index fd1b3cc9af..0f1d347cce 100644 --- a/input/regression/spacing-no-note.ly +++ b/input/regression/spacing-no-note.ly @@ -6,7 +6,7 @@ more space. " } \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" { \time 2/4 \repeat "percent" 3 { c'4 } diff --git a/input/regression/spacing-non-adjacent-columns1.ly b/input/regression/spacing-non-adjacent-columns1.ly index 8176f2416a..2acaa15909 100644 --- a/input/regression/spacing-non-adjacent-columns1.ly +++ b/input/regression/spacing-non-adjacent-columns1.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \paper {ragged-right = ##t} \header { texidoc = "The spacing engine avoids collisions between non-adjacent columns." diff --git a/input/regression/spacing-non-adjacent-columns2.ly b/input/regression/spacing-non-adjacent-columns2.ly index 06579ae87b..542acbe259 100644 --- a/input/regression/spacing-non-adjacent-columns2.ly +++ b/input/regression/spacing-non-adjacent-columns2.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \paper {ragged-right = ##t} \header { texidoc = "The spacing engine avoids collisions between non-adjacent columns." diff --git a/input/regression/spacing-note-flags.ly b/input/regression/spacing-note-flags.ly index 6a85c59d01..eaaa5a3032 100644 --- a/input/regression/spacing-note-flags.ly +++ b/input/regression/spacing-note-flags.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/spacing-packed.ly b/input/regression/spacing-packed.ly index 138dbf01b3..c6c7aeffc2 100644 --- a/input/regression/spacing-packed.ly +++ b/input/regression/spacing-packed.ly @@ -10,9 +10,9 @@ " } -\version "2.12.0" +\version "2.14.0" -\relative { +\relative c' { \override Score.SpacingSpanner #'packed-spacing = ##t c2 d4 f8[ g] a } diff --git a/input/regression/spacing-paper-column-padding.ly b/input/regression/spacing-paper-column-padding.ly index 45a19519e7..c16f12249e 100644 --- a/input/regression/spacing-paper-column-padding.ly +++ b/input/regression/spacing-paper-column-padding.ly @@ -1,4 +1,4 @@ -\version "2.12.1" +\version "2.14.0" \header { texidoc = "The space after a paper column can be increased by overriding diff --git a/input/regression/spacing-proportional.ly b/input/regression/spacing-proportional.ly index 2cc2b6cfd1..df17362ee5 100644 --- a/input/regression/spacing-proportional.ly +++ b/input/regression/spacing-proportional.ly @@ -6,7 +6,7 @@ to the distance for the given duration." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/spacing-ragged-last.ly b/input/regression/spacing-ragged-last.ly index 817ac43190..cd5216675d 100644 --- a/input/regression/spacing-ragged-last.ly +++ b/input/regression/spacing-ragged-last.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/spacing-rest.ly b/input/regression/spacing-rest.ly index a55f4cbaf1..4e6aabae5e 100644 --- a/input/regression/spacing-rest.ly +++ b/input/regression/spacing-rest.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Rests get a little less space, since they are narrower. However, the quarter rest in feta font is relatively wide, causing this diff --git a/input/regression/spacing-section.ly b/input/regression/spacing-section.ly index 065cb423df..f166129a44 100644 --- a/input/regression/spacing-section.ly +++ b/input/regression/spacing-section.ly @@ -1,7 +1,7 @@ \header { texidoc = "New sections for spacing can be started with -@code{\newSpacingSection}. In this example, a section is started at +@code{\\newSpacingSection}. In this example, a section is started at the 4/16, and a 16th in the second section takes as much space as a 8th in first section." @@ -11,8 +11,8 @@ the 4/16, and a 16th in the second section takes as much space as a { ragged-right = ##t } -\version "2.12.0" -\relative { +\version "2.14.0" +\relative c' { \time 2/4 c4 c8 c c8 c c4 c16[ c c8] c4 diff --git a/input/regression/spacing-short-notes.ly b/input/regression/spacing-short-notes.ly index 8af2ae378c..d05ef1dd7c 100644 --- a/input/regression/spacing-short-notes.ly +++ b/input/regression/spacing-short-notes.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Notes that are shorter than the common shortest note get a diff --git a/input/regression/spacing-space-to-barline.ly b/input/regression/spacing-space-to-barline.ly index 78dd605705..1402d58559 100644 --- a/input/regression/spacing-space-to-barline.ly +++ b/input/regression/spacing-space-to-barline.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "When space-to-barline is false, we measure the space between the note and the diff --git a/input/regression/spacing-stem-bar.ly b/input/regression/spacing-stem-bar.ly index 570dc6c873..07e64a8ab7 100644 --- a/input/regression/spacing-stem-bar.ly +++ b/input/regression/spacing-stem-bar.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Upstem notes before a barline are printed with some extra diff --git a/input/regression/spacing-stem-direction.ly b/input/regression/spacing-stem-direction.ly index a595db3ca2..f65d803c33 100644 --- a/input/regression/spacing-stem-direction.ly +++ b/input/regression/spacing-stem-direction.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/spacing-stem-same-direction.ly b/input/regression/spacing-stem-same-direction.ly index aa66276338..12e9b4168e 100644 --- a/input/regression/spacing-stem-same-direction.ly +++ b/input/regression/spacing-stem-same-direction.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "For juxtaposed chords with the same direction, a slight optical correction is used. It is constant, and works only if diff --git a/input/regression/spacing-stick-out.ly b/input/regression/spacing-stick-out.ly index d89ee89e22..91177649cc 100644 --- a/input/regression/spacing-stick-out.ly +++ b/input/regression/spacing-stick-out.ly @@ -1,18 +1,17 @@ \header { - texidoc = "If @code{keep-inside-line} is set for the relevant - PaperColumn, LilyPond will space a line to prevent text sticking out - of the right margin." + texidoc = "LilyPond will space a line to prevent text sticking out of the + right margin unless @code{keep-inside-line} is false for the relevant + PaperColumn." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } -\relative { - \override Score.PaperColumn #'keep-inside-line = ##t +\relative c' { c1 c1^"This is a really long text" c } diff --git a/input/regression/spacing-strict-notespacing.ly b/input/regression/spacing-strict-notespacing.ly index 63792bd589..705684a53f 100644 --- a/input/regression/spacing-strict-notespacing.ly +++ b/input/regression/spacing-strict-notespacing.ly @@ -9,7 +9,7 @@ time. This may cause collisions. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/spacing-strict-spacing-grace.ly b/input/regression/spacing-strict-spacing-grace.ly index 64614ebf87..b61f51d448 100644 --- a/input/regression/spacing-strict-spacing-grace.ly +++ b/input/regression/spacing-strict-spacing-grace.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" << \override Score.SpacingSpanner #'strict-grace-spacing = ##t diff --git a/input/regression/spacing-to-empty-barline.ly b/input/regression/spacing-to-empty-barline.ly index af26d8e5ca..17091dd510 100644 --- a/input/regression/spacing-to-empty-barline.ly +++ b/input/regression/spacing-to-empty-barline.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "An empty barline does not confuse the spacing engine too much. @@ -17,11 +17,8 @@ The two scores should look approximately the same." \type "Engraver_group" \consists "Output_property_engraver" \consists "Bar_engraver" - \consists "Skip_event_swallow_translator" \consists "Axis_group_engraver" - \override VerticalAxisGroup #'Y-extent = ##f - \override VerticalAxisGroup #'minimum-Y-extent = ##f \override BarLine #'transparent = ##t } } diff --git a/input/regression/spacing-to-grace.ly b/input/regression/spacing-to-grace.ly index 483e7eef58..fb504663e9 100644 --- a/input/regression/spacing-to-grace.ly +++ b/input/regression/spacing-to-grace.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc ="Space from a normal note (or barline) to a grace note is diff --git a/input/regression/spacing-uniform-stretching.ly b/input/regression/spacing-uniform-stretching.ly index f32952e387..25af2105f1 100644 --- a/input/regression/spacing-uniform-stretching.ly +++ b/input/regression/spacing-uniform-stretching.ly @@ -6,7 +6,7 @@ } -\version "2.12.0" +\version "2.14.0" \relative c'' << diff --git a/input/regression/span-bar-break.ly b/input/regression/span-bar-break.ly index 3ac07160ff..ce598eaa1f 100644 --- a/input/regression/span-bar-break.ly +++ b/input/regression/span-bar-break.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/span-bar-partial.ly b/input/regression/span-bar-partial.ly index 6ef67048fe..4d206bfa76 100644 --- a/input/regression/span-bar-partial.ly +++ b/input/regression/span-bar-partial.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Span bars can be turned on/off on a staff-by-staff basis." } diff --git a/input/regression/span-bar-spacing.ly b/input/regression/span-bar-spacing.ly index 0133543e99..2d3287c38e 100644 --- a/input/regression/span-bar-spacing.ly +++ b/input/regression/span-bar-spacing.ly @@ -3,7 +3,7 @@ the accidentals should not collide with the bar lines." } -\version "2.12.0" +\version "2.14.0" upper = \relative c' { \key f \minor \time 12/8 diff --git a/input/regression/span-bar.ly b/input/regression/span-bar.ly index feb9520716..fc777550fc 100644 --- a/input/regression/span-bar.ly +++ b/input/regression/span-bar.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Span bars are drawn only between staff bar lines. By setting bar lines to transparent, they are shown only between systems. diff --git a/input/regression/spanner-after-line-breaking.ly b/input/regression/spanner-after-line-breaking.ly new file mode 100644 index 0000000000..632da4ac38 --- /dev/null +++ b/input/regression/spanner-after-line-breaking.ly @@ -0,0 +1,36 @@ +\version "2.14.0" + +\header { +texidoc = "The visibility of left-broken line spanners and hairpins +which end on the first note (i.e., span no time between bounds) is +controlled by the callback @code{ly:spanner::kill-zero-spanned-time}. +" +} + +\paper { ragged-right = ##t } + +\relative c' { + \override TextSpanner #'bound-details = + #'((left + (Y . 0) + (padding . 0.25) + (attach-dir . -1) + (text . "L")) + (right + (Y . 0) + (padding . 0.25) + (text . "R")) + (left-broken + (padding . 5) + (text . #f)) + (right-broken + (text . #f))) + c1\startTextSpan\< \break + \override Hairpin #'to-barline = ##f + \override Hairpin #'after-line-breaking = ##f + c2\stopTextSpan\! + \override TextSpanner #'after-line-breaking = + #ly:spanner::kill-zero-spanned-time + c\startTextSpan\< \break + c1\!\stopTextSpan +} diff --git a/input/regression/spanner-break-beyond-parent.ly b/input/regression/spanner-break-beyond-parent.ly index 4961d82e76..7c49de4d1f 100644 --- a/input/regression/spanner-break-beyond-parent.ly +++ b/input/regression/spanner-break-beyond-parent.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-bottom = ##t } diff --git a/input/regression/spanner-break-overshoot.ly b/input/regression/spanner-break-overshoot.ly index 43953bbe65..369c3cb815 100644 --- a/input/regression/spanner-break-overshoot.ly +++ b/input/regression/spanner-break-overshoot.ly @@ -1,20 +1,18 @@ +\version "2.14.0" \header { - texidoc = "The @code{break-overshoot} property sets the amount that -a spanner (in this case: the beam) in case of a line break extends -beyond the rightmost column and extends to the left beyond the +a spanner (in this case: the beam and tuplet bracket) in case of a line +break extends beyond the rightmost column and extends to the left beyond the prefatory matter." - } -\version "2.12.0" - \paper { ragged-right = ##t } \relative c'' { \override Beam #'break-overshoot = #'(1.0 . 2.0) \override TupletBracket #'break-overshoot = #'(1.0 . 2.0) + \override TupletBracket #'bracket-visibility = ##t \override Beam #'breakable = ##t c2.. \times 2/3 { c8.[ \break c8.] } } diff --git a/input/regression/staccato-pos.ly b/input/regression/staccato-pos.ly index 025bf892d2..8ec9e0fa55 100644 --- a/input/regression/staccato-pos.ly +++ b/input/regression/staccato-pos.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ diff --git a/input/regression/staff-halfway.ly b/input/regression/staff-halfway.ly index bb3f17e80e..553c1f0aac 100644 --- a/input/regression/staff-halfway.ly +++ b/input/regression/staff-halfway.ly @@ -2,7 +2,7 @@ texidoc = "Staves can be started and stopped at command. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/staff-line-positions.ly b/input/regression/staff-line-positions.ly index 498bd6ef52..0b801a8744 100644 --- a/input/regression/staff-line-positions.ly +++ b/input/regression/staff-line-positions.ly @@ -6,7 +6,7 @@ } -\version "2.12.0" +\version "2.14.0" \new Staff \relative c' { diff --git a/input/regression/staff-mixed-size.ly b/input/regression/staff-mixed-size.ly index c3bcc78b6a..07f0fb5638 100644 --- a/input/regression/staff-mixed-size.ly +++ b/input/regression/staff-mixed-size.ly @@ -1,21 +1,21 @@ \header { - + texidoc = "Staves may be present in several sizes within a score. -This is achieved with an internal scaling factor. If the scaling factor is -forgotten in some places, objects generally become too thick or too +This is achieved with an internal scaling factor. If the scaling factor is +forgotten in some places, objects generally become too thick or too large on smaller staves." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } -melody = \relative { +melody = \relative c''' { \override DynamicText #'extra-offset = #'(0 . 3) - s1-\f c''8[(\< r a g]) e[ r d( ])\! \times 2/3 { d4 d d } + s1-\f c8[(\< r a g]) e[ r d( ])\! \times 2/3 { d4 d d } } << @@ -26,8 +26,6 @@ melody = \relative { \melody } \new Staff { - \relative c' { - \melody - } + \melody } >> diff --git a/input/regression/staff-online-symbol-absence.ly b/input/regression/staff-online-symbol-absence.ly index 583c690ece..6f60654502 100644 --- a/input/regression/staff-online-symbol-absence.ly +++ b/input/regression/staff-online-symbol-absence.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Symbols that need on-staffline info (like dots and ties) diff --git a/input/regression/staff-tabstaff-spacing.ly b/input/regression/staff-tabstaff-spacing.ly new file mode 100644 index 0000000000..b5673fc44b --- /dev/null +++ b/input/regression/staff-tabstaff-spacing.ly @@ -0,0 +1,31 @@ +\version "2.14.0" + +\header { + + texidoc = " +The space between scores containing Staffs and TabStaffs should +be consistent. In this example, all of the spacings should be +equivalent. +" +} + +\score { + { c'4 d' e' f' g'1 } + \header { + piece = "Title 1" + } +} +\score { + \new TabStaff { + c'4 d' e' f' g'1 + } + \header { + piece = "Title 2" + } +} +\score { + { c'4 d' e' f' g'1 } + \header { + piece = "Title 3" + } +} diff --git a/input/regression/staff-tweak.ly b/input/regression/staff-tweak.ly index 53b0affb6d..f7e525c653 100644 --- a/input/regression/staff-tweak.ly +++ b/input/regression/staff-tweak.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The staff is a grob (graphical object) which may be adjusted as well, for example, to have 6 thick lines and a slightly large @code{staff-space}. diff --git a/input/regression/stanza-number.ly b/input/regression/stanza-number.ly index 8af4a9b2a7..28ed6567b8 100644 --- a/input/regression/stanza-number.ly +++ b/input/regression/stanza-number.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Stanza numbers are put left of their lyric. They are aligned in a column." } diff --git a/input/regression/stem-direction-context.ly b/input/regression/stem-direction-context.ly index 18315d1eaa..773a8801a8 100644 --- a/input/regression/stem-direction-context.ly +++ b/input/regression/stem-direction-context.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \relative c'' \new Voice \with { \consists "Melody_engraver" \override Stem #'neutral-direction = #'() diff --git a/input/regression/stem-direction.ly b/input/regression/stem-direction.ly index 56fd43186b..698575e912 100644 --- a/input/regression/stem-direction.ly +++ b/input/regression/stem-direction.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/regression/stem-length-estimation.ly b/input/regression/stem-length-estimation.ly new file mode 100644 index 0000000000..fd3c194d7c --- /dev/null +++ b/input/regression/stem-length-estimation.ly @@ -0,0 +1,38 @@ +\version "2.14.0" + +\header { + texidoc = "Stems with overridden 'length should not confuse height estimation. +This example should fit snugly on one page. +" +} + +#(define (assert-single-page layout props arg) + (if (and (= (chain-assoc-get 'page:page-number props -1) + (ly:output-def-lookup layout 'first-page-number)) + (chain-assoc-get 'page:last? props -1)) + (interpret-markup layout props arg) + (ly:error "failed to fit test on single page"))) + +\paper { + #(set-paper-size "a6") + tagline = ##f + indent = #0 + system-system-spacing = #'((padding . 1.2)) + oddHeaderMarkup = \markup \on-the-fly #assert-single-page \null +} + +\book { + \score { + \new Voice { + \voiceTwo + \override Stem #'length = #0 + \repeat unfold 144 a4 + } + \layout { + \context { + \Score + \remove "Bar_number_engraver" + } + } + } +} diff --git a/input/regression/stem-shorten.ly b/input/regression/stem-shorten.ly index 6274e711c6..074012b4d5 100644 --- a/input/regression/stem-shorten.ly +++ b/input/regression/stem-shorten.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/stem-stemlet-whole.ly b/input/regression/stem-stemlet-whole.ly index ba69bf2c31..eff15d8a2f 100644 --- a/input/regression/stem-stemlet-whole.ly +++ b/input/regression/stem-stemlet-whole.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Stemlets don't cause stems on whole notes." } diff --git a/input/regression/stem-stemlet.ly b/input/regression/stem-stemlet.ly index 5603b34457..5c6e50481b 100644 --- a/input/regression/stem-stemlet.ly +++ b/input/regression/stem-stemlet.ly @@ -5,10 +5,10 @@ length can be set with @code{stemlet-length}." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } -\relative { +\relative c' { \override Stem #'stemlet-length = #0.75 c8[ r8 c16 r16 c8] c4 diff --git a/input/regression/stem-tremolo-forced-dir.ly b/input/regression/stem-tremolo-forced-dir.ly index 9b716b74c7..ba60b84ba2 100644 --- a/input/regression/stem-tremolo-forced-dir.ly +++ b/input/regression/stem-tremolo-forced-dir.ly @@ -1,8 +1,16 @@ -\version "2.12.0" +\version "2.14.0" + +\header { +texidoc = "Tremolo works even when a stem is forced in a +particular direction. +" +} + \layout { ragged-right = ##t } \relative c { \clef bass \stemUp f4 : 32 + \stemDown g,4 : 32 } diff --git a/input/regression/stem-tremolo-position.ly b/input/regression/stem-tremolo-position.ly index e423eeb7c0..c7215c722a 100644 --- a/input/regression/stem-tremolo-position.ly +++ b/input/regression/stem-tremolo-position.ly @@ -5,7 +5,7 @@ tilted extra on stem-down notes with a flag." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##T } diff --git a/input/regression/stem-tremolo-staff-space.ly b/input/regression/stem-tremolo-staff-space.ly index 5d4e85d6bd..b551e11c93 100644 --- a/input/regression/stem-tremolo-staff-space.ly +++ b/input/regression/stem-tremolo-staff-space.ly @@ -4,7 +4,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/stem-tremolo.ly b/input/regression/stem-tremolo.ly index df26319330..166ebbceb6 100644 --- a/input/regression/stem-tremolo.ly +++ b/input/regression/stem-tremolo.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" Stem tremolos or rolls are tremolo signs that look like beam segments diff --git a/input/regression/stencil-color-rotation.ly b/input/regression/stencil-color-rotation.ly index 7e89fa2cb1..9f4191dfd6 100644 --- a/input/regression/stencil-color-rotation.ly +++ b/input/regression/stencil-color-rotation.ly @@ -2,7 +2,7 @@ texidoc = "Combinations of rotation and color do work." } -\version "2.12.0" +\version "2.14.0" \relative c'{ \override Hairpin #'rotation = #'(20 -1 0) \override Hairpin #'color = #(x11-color 'LimeGreen) diff --git a/input/regression/stencil-hacking.ly b/input/regression/stencil-hacking.ly index b95fffb857..304c3461df 100644 --- a/input/regression/stencil-hacking.ly +++ b/input/regression/stencil-hacking.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" You can write stencil callbacks in Scheme, thus providing custom glyphs for notation elements. A simple example is diff --git a/input/regression/stencil-scale.ly b/input/regression/stencil-scale.ly new file mode 100644 index 0000000000..7d564050e5 --- /dev/null +++ b/input/regression/stencil-scale.ly @@ -0,0 +1,23 @@ +\version "2.14.0" + +\header { + texidoc = "Stencils can be scaled using @code{ly:stencil-scale}. +Negative values will flip or mirror the stencil without changing its origin; this +may result in collisions unless the scaled stencil is realigned (e.g., the time +signature in this test)." +} + +\relative c' { + \override Staff.Clef #'stencil = + #(lambda (grob) + (ly:stencil-scale (ly:clef::print grob) 1 -1)) + \override Staff.TimeSignature #'stencil = + #(lambda (grob) + (ly:stencil-aligned-to + (ly:stencil-scale (ly:time-signature::print grob) -2 1) + X LEFT)) + \override MultiMeasureRestText #'stencil = + #(lambda (grob) + (ly:stencil-scale (ly:text-interface::print grob) 2 1.6)) + R1\fermataMarkup +} diff --git a/input/regression/string-number-around-slur.ly b/input/regression/string-number-around-slur.ly index bd4a5b4d5c..0e48e0f878 100644 --- a/input/regression/string-number-around-slur.ly +++ b/input/regression/string-number-around-slur.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "String numbers should only be moved outside slurs when there diff --git a/input/regression/string-number.ly b/input/regression/string-number.ly index 1b8692de79..106c5a93c7 100644 --- a/input/regression/string-number.ly +++ b/input/regression/string-number.ly @@ -4,12 +4,12 @@ positioning mechanism as finger instructions." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } -\relative { +\relative c' { c4 \set fingeringOrientations = #'(down left up) diff --git a/input/regression/system-extents.ly b/input/regression/system-extents.ly index 4ff06b0385..47b183e5f5 100644 --- a/input/regression/system-extents.ly +++ b/input/regression/system-extents.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The size of every system is correctly determined; this diff --git a/input/regression/system-overstrike.ly b/input/regression/system-overstrike.ly index e584dde393..18a5b0051c 100644 --- a/input/regression/system-overstrike.ly +++ b/input/regression/system-overstrike.ly @@ -1,22 +1,19 @@ -\version "2.12.0" -\header { texidoc = "By setting between-system-padding to a negative -value, it is possible to eliminate the anti-collision constraints. -Then setting @code{between-system-space} to a low (nonzero) value, -print systems in overstrike. +\version "2.14.0" -Unfortunately, this does not show in the colllated texinfo document. Run this example stand-alone to see the effect. +\header { + texidoc = "By setting the padding between systems to a negative +value, it is possible to eliminate the anti-collision constraints. " - } -\paper { - ragged-bottom =##t - between-system-padding = - 4\cm - between-system-space = 3\mm -} +\book { + \paper { + ragged-bottom = ##t + system-system-spacing = #'((basic-distance . 1) (padding . -10)) + } -{ + { c1 \break c'''1 + } } - diff --git a/input/regression/system-separator-spaceable-staves.ly b/input/regression/system-separator-spaceable-staves.ly new file mode 100644 index 0000000000..de2a1aad97 --- /dev/null +++ b/input/regression/system-separator-spaceable-staves.ly @@ -0,0 +1,31 @@ +\version "2.14.0" + +\header { + texidoc = "System separator positioning works with all spaceable +staff contexts." +} + + +\paper { + system-separator-markup = \slashSeparator + indent = 0 +} + +\book { + \new TabStaff { + c'1 + } + + \new Staff { + c'1 + } + + \new DrumStaff { + c'1 + } + + \new RhythmicStaff { + c'1 + } +} + diff --git a/input/regression/system-separator.ly b/input/regression/system-separator.ly index 840a650ef4..4082b80a58 100644 --- a/input/regression/system-separator.ly +++ b/input/regression/system-separator.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "System separators may be defined as markups in the diff --git a/input/regression/system-start-bracket.ly b/input/regression/system-start-bracket.ly index 242f8d75f9..6b04bdaff8 100644 --- a/input/regression/system-start-bracket.ly +++ b/input/regression/system-start-bracket.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "A piano context included within a staff group should cause the piano brace to be drawn to the left of the staff angle diff --git a/input/regression/system-start-heavy-bar.ly b/input/regression/system-start-heavy-bar.ly index 25b84c21ac..d0499a7e55 100644 --- a/input/regression/system-start-heavy-bar.ly +++ b/input/regression/system-start-heavy-bar.ly @@ -1,7 +1,7 @@ \header { texidoc = "A heavy-bar system start delimiter may be created by tuning the @code{SystemStartBar} grob." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/system-start-nesting.ly b/input/regression/system-start-nesting.ly index 1b9e249b4e..301abd1084 100644 --- a/input/regression/system-start-nesting.ly +++ b/input/regression/system-start-nesting.ly @@ -2,7 +2,7 @@ created with the @code{systemStartDelimiterHierarchy} property." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/tablature-banjo.ly b/input/regression/tablature-banjo.ly index cc5515b0fc..75f68bd0a8 100644 --- a/input/regression/tablature-banjo.ly +++ b/input/regression/tablature-banjo.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/tablature-chord-repetition.ly b/input/regression/tablature-chord-repetition.ly new file mode 100644 index 0000000000..e89b1c52f1 --- /dev/null +++ b/input/regression/tablature-chord-repetition.ly @@ -0,0 +1,30 @@ +\version "2.14.0" + +\header { + texidoc = "In a TabStaff, the chord repetition function needs +to save the string information. This is handled by +@code{\\tabChordRepetition}." +} + +\tabChordRepetition + +Guitar = \relative c' { + r8 < gis\4 cis\3 b\2 > ~ q4 q8 ~ q q4 +} + +\score { + \new StaffGroup << + \new Staff { + \new Voice { + \clef "treble_8" + \override Voice.StringNumber #'transparent = ##t + \Guitar + } + } + \new TabStaff { + \new TabVoice { + \Guitar + } + } + >> +} diff --git a/input/regression/tablature-default-strings.ly b/input/regression/tablature-default-strings.ly new file mode 100644 index 0000000000..674ad96152 --- /dev/null +++ b/input/regression/tablature-default-strings.ly @@ -0,0 +1,31 @@ +\version "2.14.0" + +\header { + texidoc = " +Context property @code{defaultStrings} defines desired strings +for fret calculations if no strings are defined explicitly. +" +} + +mymusic = \relative c { + 4 + \set defaultStrings = #'(5 3) + 4 + 4 + 4 + 2\6\4 + \unset defaultStrings + 2 +} + +\score { + << + \new Staff { + \clef "treble_8" + \mymusic + } + \new TabStaff { + \mymusic + } + >> +} diff --git a/input/regression/tablature-dot-placement.ly b/input/regression/tablature-dot-placement.ly new file mode 100644 index 0000000000..8554a7057e --- /dev/null +++ b/input/regression/tablature-dot-placement.ly @@ -0,0 +1,29 @@ +\version "2.14.0" + +\header { + + texidoc = " +With full notation, the dots on the tablature heads should +respect two-digit fret numbers. +" + +} + +myMusic = \relative c' { + 4. + 4. + 4 +} + +\score { + << + \new Staff { + \clef "treble_8" + \myMusic + } + \new TabStaff { + \tabFullNotation + \myMusic + } + >> +} diff --git a/input/regression/tablature-fretboard-open-string.ly b/input/regression/tablature-fretboard-open-string.ly new file mode 100644 index 0000000000..63a559e04d --- /dev/null +++ b/input/regression/tablature-fretboard-open-string.ly @@ -0,0 +1,41 @@ +\version "2.14.0" +\header +{ + texidoc = + "Tablatures derived from stored fretboard diagrams display open strings +as fret 0 in the tablature. The tablature and fretboard should match." +} + +#(define c-shape-fretboard-table (make-fretboard-table)) + +\storePredefinedDiagram #c-shape-fretboard-table + \chordmode{c} + #guitar-tuning + "x;3-3;2-2;o;1-1;o;" + +cShape = { + \set predefinedDiagramTable = #c-shape-fretboard-table +} + +Chords = \chordmode { + \cShape + c,1 | +} + +\score { + << + \new ChordNames { + \Chords + } + \new FretBoards { + \Chords + } + \new Staff { + \clef "treble_8" + \Chords + } + \new TabStaff { + \Chords + } + >> +} diff --git a/input/regression/tablature-full-notation.ly b/input/regression/tablature-full-notation.ly new file mode 100644 index 0000000000..8e31540b88 --- /dev/null +++ b/input/regression/tablature-full-notation.ly @@ -0,0 +1,43 @@ +\version "2.14.0" + +\header{ texidoc = "As default, tablature staves show only the fret numbers, because + in most situations, they are combined with normal staves. + When used without standard notation, @code{tabFullNotation} + can be used." + } + +tabstuff = { + \time 3/4 + \compressFullBarRests + c4^"test" d( e) | + f4\f g a^\fermata | + R2.*3 | + c8\<\( c16 c ~ c2\! | + c'2.\) | + \mark \default + R2. | + \ottava #1 + r4 d'4 r8 e | + \ottava #0 + \times 3/4 { b,4 c \glissando d\5 \glissando c } | + c4. d-_( | + e\varcoda-> ) + \override TextSpanner #'(bound-details left text) = "rit." f\startTextSpan | + g ~ g\prall | + g\thumb e-.\stopTextSpan + \bar "|." +} + +\score { + << + \new Staff { \clef "G_8" \tabstuff } + \new TabStaff { \tabstuff } + >> +} + +\score { + \new TabStaff { + \tabFullNotation + \tabstuff + } +} diff --git a/input/regression/tablature-glissando.ly b/input/regression/tablature-glissando.ly new file mode 100644 index 0000000000..bcfbcaf52d --- /dev/null +++ b/input/regression/tablature-glissando.ly @@ -0,0 +1,23 @@ +\version "2.14.0" + +\header{ texidoc = "Glissando lines in tablature have the right slope." + } + +\paper { ragged-right = ##f } % strech the staff to make glissando lines visible + +glissandotest = \relative c { + c4\5 \glissando d\5 \glissando e\5 f\5 | + c4\5 \glissando d\5 \glissando c2\5 | + c4\5 \glissando c'\4 c\4 \glissando c,\5 + \bar "|." +} + +\context StaffGroup << + \context Staff << + \clef "G_8" + \glissandotest + >> + \context TabStaff << + \glissandotest + >> +>> diff --git a/input/regression/tablature-grace-notes.ly b/input/regression/tablature-grace-notes.ly new file mode 100644 index 0000000000..99561d531e --- /dev/null +++ b/input/regression/tablature-grace-notes.ly @@ -0,0 +1,24 @@ +\version "2.14.0" + +\header{ texidoc = "Fret numbers belonging to grace notes are smaller." + } + +gracenotes = \relative c { + c4 d e f + \grace e8 c4 d e f + \grace \parenthesize e8 c4 d e f + \appoggiatura e8 c4 d e f + \acciaccatura e8 c4 d e f + \bar "|." +} + +\context StaffGroup << + \context Staff << + \clef "G_8" + \gracenotes + >> + \context TabStaff << + \gracenotes + >> +>> + diff --git a/input/regression/tablature-harmonic-functions.ly b/input/regression/tablature-harmonic-functions.ly new file mode 100644 index 0000000000..c09624bbc7 --- /dev/null +++ b/input/regression/tablature-harmonic-functions.ly @@ -0,0 +1,50 @@ +\version "2.14.0" + +\header { + texidoc = " +Harmonics can be specified either by ratio or by fret number. +" +} + +test = { + e,4 + \harmonicByRatio #1/2 e,\6 + \harmonicByRatio #1/3 a,\5 + \harmonicByRatio #2/3 d,\4 | + \harmonicByRatio #1/4 { g8\3 b\2 e'\1 b\2 < g b e >2 } | + e,1 | % check whether tab note head is restored + \harmonicByFret #12 e'4\1 ~ + \harmonicByFret #12 e'4\1 ( + \ottava #1 + \harmonicByFret #7 e'4\1) + \harmonicByFret #5 e'8\1 + \ottava #2 + \harmonicByFret #4 < b\2 e'\1 >8 | + \harmonicByFret #3 < g\3 b\2 e'\1 >4 + \harmonicByFret #2.7 < g\3 b\2 e'\1 >4 + \harmonicByFret #2.3 < g\3 b\2 e'\1 >4 + \harmonicByFret #2 < g\3 b\2 e'\1 >4 | + \ottava #0 + e,1 | % check whether tab note head is restored +} + +\paper { + ragged-right = ##f +} + +\score { + << + \new Staff { + \new Voice { + \clef "treble_8" + \override Voice.StringNumber #'transparent = ##t + \test + } + } + \new TabStaff { + \new TabVoice { + \test + } + } + >> +} diff --git a/input/regression/tablature-harmonic-tie.ly b/input/regression/tablature-harmonic-tie.ly new file mode 100644 index 0000000000..6ec2d473c7 --- /dev/null +++ b/input/regression/tablature-harmonic-tie.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + texidoc = " +When a harmonic note is tied in tablature, neither the fret number +nor the harmonic brackets for the second note appear in the tablature. +" +} + +music = \relative c' { + s2. 4 ~ | + 1 | +} + +\new StaffGroup << + \new Staff { \clef "G_8" \music } + \new TabStaff { \clef "moderntab" \music } +>> diff --git a/input/regression/tablature-harmonic.ly b/input/regression/tablature-harmonic.ly index 1a32a62cd2..71a531071b 100644 --- a/input/regression/tablature-harmonic.ly +++ b/input/regression/tablature-harmonic.ly @@ -1,11 +1,17 @@ -\version "2.12.0" +\version "2.14.0" \header { - texidoc = "Harmonics get angled brackets in tablature" + texidoc = "Harmonics get angled brackets in tablature. + Harmonics in chords should retain their proper position, + regardless of whether or not strings are specified. + In this example, the harmonics should always be on string 1." } \new TabVoice \relative c' { - + 4 + 4 + 4 + 4 } diff --git a/input/regression/tablature-letter.ly b/input/regression/tablature-letter.ly new file mode 100644 index 0000000000..3fc098e8d8 --- /dev/null +++ b/input/regression/tablature-letter.ly @@ -0,0 +1,43 @@ +\version "2.14.0" + +\header { + texidoc = " +A sample tablature with lettered tab, +using fretLabels to modify the fret letters. + +By default, letters are drawn sequentially from the alphabet, +but if the context property fretLabels is defined, these are +substituted. If specified, the length of fretLabels must be +sufficient to label all the frets used. A warning is issued +if the length is too short. +" +} + +notes = \relative c' { + \time 3/4 + 4. 8 4 + \set fretLabels = #`("a" "b" ,(markup #:italic #:smaller "c")) + 4. 8 4 + \set fretLabels = #`(,(markup #:with-color red "a") + "b" + ,(markup #:italic #:smaller "c")) + 4. 8 4 + \set fretLabels = #'("α" "β" "γ") + 4. 8 4 +} + +\score { + \new TabStaff + \with { + stringTunings = #`(,(ly:make-pitch 1 3 0) + ,(ly:make-pitch 1 1 0) + ,(ly:make-pitch 0 5 0) + ,(ly:make-pitch 0 3 0) + ,(ly:make-pitch 0 1 0) + ,(ly:make-pitch -1 5 0)) + tablatureFormat = #fret-letter-tablature-format + } + \new TabVoice { + \notes + } +} diff --git a/input/regression/tablature-negative-fret.ly b/input/regression/tablature-negative-fret.ly new file mode 100644 index 0000000000..fd7b7cea2e --- /dev/null +++ b/input/regression/tablature-negative-fret.ly @@ -0,0 +1,32 @@ +\version "2.14.0" + +\header { + + texidoc = " +Negative fret numbers calculated due to assigning a string number +can be displayed, ignored, or recalculated. Here we should have +all three cases demonstrated. +" + +} + +myMusic = \relative c' { + 1 ^\markup { recalculate } + \set TabStaff.handleNegativeFrets = #'include + 1 ^ \markup { include } + \set TabStaff.handleNegativeFrets = #'ignore + 1 ^ \markup { ignore } +} + +\score { + << + \new Staff { + \clef "treble_8" + \textLengthOn + \myMusic + } + \new TabStaff { + \myMusic + } + >> +} diff --git a/input/regression/tablature-slide.ly b/input/regression/tablature-slide.ly index 6fd511f09c..9dddd63e6b 100644 --- a/input/regression/tablature-slide.ly +++ b/input/regression/tablature-slide.ly @@ -4,7 +4,7 @@ texidoc = "Tab supports slides." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##T } diff --git a/input/regression/tablature-string-tunings.ly b/input/regression/tablature-string-tunings.ly index d8f735e435..0808e8d565 100644 --- a/input/regression/tablature-string-tunings.ly +++ b/input/regression/tablature-string-tunings.ly @@ -1,3 +1,5 @@ +\version "2.14.0" + \header { texidoc = "For other tunings, it is sufficient to set @@ -6,12 +8,13 @@ } -\version "2.12.0" - \new TabStaff { - \set TabStaff.stringTunings = #'(5 10 15 20) + \set TabStaff.stringTunings = #`(,(ly:make-pitch 0 3 0) + ,(ly:make-pitch 0 5 SHARP) + ,(ly:make-pitch 1 1 SHARP) + ,(ly:make-pitch 1 4 SHARP)) \relative c'' { c4 d e f } } - + diff --git a/input/regression/tablature-tie-behaviour.ly b/input/regression/tablature-tie-behaviour.ly new file mode 100644 index 0000000000..e3f54916e8 --- /dev/null +++ b/input/regression/tablature-tie-behaviour.ly @@ -0,0 +1,63 @@ +\version "2.14.0" + +\header{ texidoc = "In tablature, notes that are tied to are invisible + except after a line break or within a second volta; + here, the fret number is displayed in parentheses. + + As an option, the notes that are tied to may become + invisible completely, even after line breaks." + } + +firstpart = \relative c { + f2 ~ f4 e + g8 g ~ g g ~ g g~ g g ~ + g1 +} + +secondpart = \relative c' { + c1 ~ \break c2 ~ c +} + +thirdpart = \relative c' { + \repeat volta 2 { + < c\3 e\2 g\1 >4 < c\3 e\2 g\1 > ~ < c\3 e\2 g\1 >\laissezVibrer r + c4. d8 e2 ~ + } + \alternative { { e2 r } { e2\repeatTie e2^\fermata } } + } + +\context StaffGroup << + \context Staff { + \clef "G_8" + \override Voice.StringNumber #'transparent = ##t % remove circled string numbers + \firstpart + \secondpart + \thirdpart + } + \context TabStaff { + \firstpart + \secondpart + \thirdpart + } +>> + +\context StaffGroup << + \context Staff { + \clef "G_8" + \override Voice.StringNumber #'transparent = ##t % remove circled string numbers + \firstpart + \secondpart + \thirdpart + \secondpart + \thirdpart + } + \context TabStaff { + \hideSplitTiedTabNotes + \firstpart + \secondpart + \thirdpart + \showSplitTiedTabNotes + \secondpart + \thirdpart + } +>> diff --git a/input/regression/tablature-tie-spanner.ly b/input/regression/tablature-tie-spanner.ly new file mode 100644 index 0000000000..bdcf14c91e --- /dev/null +++ b/input/regression/tablature-tie-spanner.ly @@ -0,0 +1,31 @@ +\version "2.14.0" + +\header { + texidoc = " +If a slur or a glissando follows a tie, the +corresponding fret number is displayed in parentheses. +" +} + +music = { + c'4 ~ c'4 ( d'2 ) | + c'4 ~ c'4 \glissando d'2 | + c'4 ~ c'4 d'2 | + c'4 \glissando d'2. | +} + +\score { + << + \new Staff { + \new Voice { + \clef "G_8" + \music + } + } + \new TabStaff { + \new TabVoice { + \music + } + } + >> +} diff --git a/input/regression/tablature-tremolo.ly b/input/regression/tablature-tremolo.ly new file mode 100644 index 0000000000..23593b503e --- /dev/null +++ b/input/regression/tablature-tremolo.ly @@ -0,0 +1,41 @@ +\version "2.14.0" + +\header { + + texidoc = " +Tremolos will appear on tablature staffs only if +@code{\\tabFullNotation} is active. Otherwise, no +tremolo indications are displayed on the TabStaff. +Also, tablature beams are the same thickness on TabStaff +and Staff." + + doctitle = "Tablature tremolo" +} + +music = { + 4:16 + \stemUp + \repeat tremolo 4 c'16 + \repeat tremolo 2 { c16 d } + \repeat tremolo 4 { 16 } +} + +\score { + << + \new Staff { + \clef "treble_8" + \music + } + \new TabStaff { + \music + } + >> +} + +\score { + \new TabStaff { + \tabFullNotation + \music + } +} + diff --git a/input/regression/tablature-zero-finger.ly b/input/regression/tablature-zero-finger.ly new file mode 100644 index 0000000000..89db7ab1aa --- /dev/null +++ b/input/regression/tablature-zero-finger.ly @@ -0,0 +1,27 @@ +\version "2.14.0" + +\header { + texidoc=" +A fingering indication of zero counts as an open string for fret +calculations. An inappropriate request for an open string will generate +a warning message and set the requested pitch in the tablature. +" +} + +mymusic = \relative c { + \set minimumFret = #1 + 1 + +} + +\score { + << + \new Staff { + \clef "treble_8" + \mymusic + } + \new TabStaff { + \mymusic + } + >> +} diff --git a/input/regression/tablature.ly b/input/regression/tablature.ly index 0c631e87a1..baf6236308 100644 --- a/input/regression/tablature.ly +++ b/input/regression/tablature.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc = "@cindex Tabulature A sample tablature, with both normal staff and tab. @@ -16,8 +16,9 @@ partition = { \key e \major - <> + \5\4 + \5 } diff --git a/input/regression/tag-filter.ly b/input/regression/tag-filter.ly index dca241b0d7..324416642b 100644 --- a/input/regression/tag-filter.ly +++ b/input/regression/tag-filter.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "The @code{\\tag} command marks music expressions with a diff --git a/input/regression/test-output-distance.ly b/input/regression/test-output-distance.ly index 84bb5773d7..3c32147b58 100644 --- a/input/regression/test-output-distance.ly +++ b/input/regression/test-output-distance.ly @@ -5,7 +5,7 @@ it should always show up in the output-distance testing. " } -\version "2.12.0" +\version "2.14.0" #(define time (gettimeofday)) @@ -18,5 +18,5 @@ it should always show up in the output-distance testing. " ragged-right = ##f } -\relative { c4 d f8_\f[ g-.] } +\relative c' { c4 d f8_\f[ g-.] } diff --git a/input/regression/text-spanner-attachment-alignment.ly b/input/regression/text-spanner-attachment-alignment.ly index 942de5ff4d..4391527ec7 100644 --- a/input/regression/text-spanner-attachment-alignment.ly +++ b/input/regression/text-spanner-attachment-alignment.ly @@ -9,7 +9,7 @@ ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" << \new Staff { \override TextSpanner #'(bound-details left text) = "*" diff --git a/input/regression/text-spanner-full-rest.ly b/input/regression/text-spanner-full-rest.ly new file mode 100644 index 0000000000..e7d1054d7b --- /dev/null +++ b/input/regression/text-spanner-full-rest.ly @@ -0,0 +1,12 @@ +\version "2.14.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 +} diff --git a/input/regression/text-spanner-override-order.ly b/input/regression/text-spanner-override-order.ly index 09baf614e2..f253832ab0 100644 --- a/input/regression/text-spanner-override-order.ly +++ b/input/regression/text-spanner-override-order.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" sample = \relative c'' { c2\startTextSpan c2 \break diff --git a/input/regression/text-spanner.ly b/input/regression/text-spanner.ly index 27a00ca0e4..287099354e 100644 --- a/input/regression/text-spanner.ly +++ b/input/regression/text-spanner.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc= "Text spanners should not repeat start text when broken." } diff --git a/input/regression/tie-accidental.ly b/input/regression/tie-accidental.ly index 609437b95d..2f9c3bb2d6 100644 --- a/input/regression/tie-accidental.ly +++ b/input/regression/tie-accidental.ly @@ -4,7 +4,7 @@ " } -\version "2.12.0" +\version "2.14.0" \paper { debug-tie-scoring = ##t diff --git a/input/regression/tie-arpeggio-collision.ly b/input/regression/tie-arpeggio-collision.ly index a874e2b411..8788604fc3 100644 --- a/input/regression/tie-arpeggio-collision.ly +++ b/input/regression/tie-arpeggio-collision.ly @@ -8,7 +8,7 @@ unarpegiated case." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t } diff --git a/input/regression/tie-arpeggio.ly b/input/regression/tie-arpeggio.ly index e402303b19..6c31362363 100644 --- a/input/regression/tie-arpeggio.ly +++ b/input/regression/tie-arpeggio.ly @@ -9,10 +9,10 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } -\relative { +\relative c' { c~ e~ g~ \set tieWaitForNote = ##t c~ e~ g~ diff --git a/input/regression/tie-broken-minimum-length.ly b/input/regression/tie-broken-minimum-length.ly index c7e9c512ee..d11ea4505b 100644 --- a/input/regression/tie-broken-minimum-length.ly +++ b/input/regression/tie-broken-minimum-length.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { @@ -13,7 +13,7 @@ has a @code{minimum-length} of 5." line-width = 40.0\mm } -\relative { +\relative c' { \override Tie #'minimum-length = #5 f2. f16 f f f ~ | \break f1 diff --git a/input/regression/tie-broken-other-staff.ly b/input/regression/tie-broken-other-staff.ly index b5ba583827..f92810fe06 100644 --- a/input/regression/tie-broken-other-staff.ly +++ b/input/regression/tie-broken-other-staff.ly @@ -3,7 +3,7 @@ in other staves." } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/tie-broken.ly b/input/regression/tie-broken.ly index 41b71dc00b..552af677b9 100644 --- a/input/regression/tie-broken.ly +++ b/input/regression/tie-broken.ly @@ -3,7 +3,7 @@ texidoc = "Ties behave properly at line breaks." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } diff --git a/input/regression/tie-chord-broken-extremal.ly b/input/regression/tie-chord-broken-extremal.ly index 71fb2f6156..c2a5dcabd7 100644 --- a/input/regression/tie-chord-broken-extremal.ly +++ b/input/regression/tie-chord-broken-extremal.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " diff --git a/input/regression/tie-chord-debug.ly b/input/regression/tie-chord-debug.ly index 4a5abc2551..7226a6a5e5 100644 --- a/input/regression/tie-chord-debug.ly +++ b/input/regression/tie-chord-debug.ly @@ -5,7 +5,7 @@ decisions made." } -\version "2.12.0" +\version "2.14.0" \paper { diff --git a/input/regression/tie-chord-partial.ly b/input/regression/tie-chord-partial.ly index d5ab64e1e0..ee8fa529c6 100644 --- a/input/regression/tie-chord-partial.ly +++ b/input/regression/tie-chord-partial.ly @@ -2,13 +2,13 @@ { texidoc = "Individual chord notes can also be tied" } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } -\relative { +\relative c' { } diff --git a/input/regression/tie-chord.ly b/input/regression/tie-chord.ly index 2688680580..f4e973dc69 100644 --- a/input/regression/tie-chord.ly +++ b/input/regression/tie-chord.ly @@ -13,7 +13,7 @@ each system. " } -\version "2.12.0" +\version "2.14.0" \paper { indent = #0.0 diff --git a/input/regression/tie-dash.ly b/input/regression/tie-dash.ly new file mode 100644 index 0000000000..4913ae0bfa --- /dev/null +++ b/input/regression/tie-dash.ly @@ -0,0 +1,33 @@ +\version "2.14.0" +\header {texidoc = "@cindex Tie, dotted, dashed +The appearance of ties may be changed from solid to dotted or dashed. +" +} +\layout{ ragged-right=##t } + + +\relative c'{ + c2 ~ c | + \tieDotted + c2 ~ c | + \tieDashed + c2 ~ c | + \tieHalfDashed + c2 ~ c | + \tieHalfSolid + c2 ~ c | + \tieDashPattern #0.4 #2.0 + c2 ~ c | + \once \override Tie #'dash-definition = #'((0 0.25 1 1) + (0.3 0.7 0.4 0.75) + (0.75 1.0 1.0 1.0)) + c2 ~ c | + \tieSolid + c2 ~ c | +} + + + + + + diff --git a/input/regression/tie-direction-broken.ly b/input/regression/tie-direction-broken.ly index 25570e613f..e87b510310 100644 --- a/input/regression/tie-direction-broken.ly +++ b/input/regression/tie-direction-broken.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { diff --git a/input/regression/tie-direction-manual.ly b/input/regression/tie-direction-manual.ly index f6a6610c8c..fb09db7cf0 100644 --- a/input/regression/tie-direction-manual.ly +++ b/input/regression/tie-direction-manual.ly @@ -4,7 +4,7 @@ This makes correction in complex chords easier." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right= ##t diff --git a/input/regression/tie-dot.ly b/input/regression/tie-dot.ly index 9b2107c64e..070009e96b 100644 --- a/input/regression/tie-dot.ly +++ b/input/regression/tie-dot.ly @@ -3,7 +3,7 @@ texidoc = "Ties avoid collisions with dots." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##T } diff --git a/input/regression/tie-grace.ly b/input/regression/tie-grace.ly index c2e5606365..9351ef89d4 100644 --- a/input/regression/tie-grace.ly +++ b/input/regression/tie-grace.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Tying a grace to a following grace or main note works." } diff --git a/input/regression/tie-manual-vertical-tune.ly b/input/regression/tie-manual-vertical-tune.ly index 0edfd18e16..7b6c58edfd 100644 --- a/input/regression/tie-manual-vertical-tune.ly +++ b/input/regression/tie-manual-vertical-tune.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "If using integers, the tie will vertically tuned for diff --git a/input/regression/tie-manual.ly b/input/regression/tie-manual.ly index 95be03dd47..1a2c128c57 100644 --- a/input/regression/tie-manual.ly +++ b/input/regression/tie-manual.ly @@ -11,7 +11,7 @@ You can leave a Tie alone by introducing a non-pair value } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##t diff --git a/input/regression/tie-pitched-trill.ly b/input/regression/tie-pitched-trill.ly new file mode 100644 index 0000000000..636cdfe498 --- /dev/null +++ b/input/regression/tie-pitched-trill.ly @@ -0,0 +1,12 @@ +\version "2.14.2" + +\header { + texidoc = "The pitch of a pitched trill should not trigger a warning for + unterminated ties." +} + +\relative c' { + \pitchedTrill + c1~\startTrillSpan d + c1\stopTrillSpan +} diff --git a/input/regression/tie-semi-single.ly b/input/regression/tie-semi-single.ly index a5c226dc00..f666db35e8 100644 --- a/input/regression/tie-semi-single.ly +++ b/input/regression/tie-semi-single.ly @@ -8,7 +8,7 @@ tweaked with @code{#'direction}." } -\version "2.12.0" +\version "2.14.0" \layout{ragged-right=##t} { diff --git a/input/regression/tie-single-chord.ly b/input/regression/tie-single-chord.ly index ab5410d6bb..9d35d3a1db 100644 --- a/input/regression/tie-single-chord.ly +++ b/input/regression/tie-single-chord.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { diff --git a/input/regression/tie-single-manual.ly b/input/regression/tie-single-manual.ly index c505453d7f..5859b488a6 100644 --- a/input/regression/tie-single-manual.ly +++ b/input/regression/tie-single-manual.ly @@ -5,7 +5,7 @@ specifying their @code{direction} and/or @code{staff-position}." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/tie-single.ly b/input/regression/tie-single.ly index c8e3278eb5..899c927b4c 100644 --- a/input/regression/tie-single.ly +++ b/input/regression/tie-single.ly @@ -22,7 +22,7 @@ that otherwise don't fit in a space ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" frag = \relative c'' { diff --git a/input/regression/tie-unterminated.ly b/input/regression/tie-unterminated.ly new file mode 100644 index 0000000000..26b5559d8a --- /dev/null +++ b/input/regression/tie-unterminated.ly @@ -0,0 +1,14 @@ +\version "2.14.0" +#(ly:set-option 'warning-as-error #f) + +\header { + texidoc = "When a tie is followed only by unmatching notes and the tie cannot + be created, lilypond prints out a warning unless @code{tieWaitForNote} is set." +} + +\relative c' { + c1~ c | + c1~ | + c1~ d | + 1~ c | +} diff --git a/input/regression/tie-whole.ly b/input/regression/tie-whole.ly index e63d02b788..4c684dac7e 100644 --- a/input/regression/tie-whole.ly +++ b/input/regression/tie-whole.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } \relative diff --git a/input/regression/time-signature-settings-by-staff.ly b/input/regression/time-signature-settings-by-staff.ly new file mode 100644 index 0000000000..b5ddc6f818 --- /dev/null +++ b/input/regression/time-signature-settings-by-staff.ly @@ -0,0 +1,45 @@ +\version "2.14.0" + +\header { + texidoc = " +Default values for time signature settings can vary by staff if the +@code{Timing_translator} and @code{Default_bar_line_engraver} are +moved from @code{Score} to @code{Staff}. In this case, the upper staff +should be beamed 3/4, 1/4. The lower staff should be beamed 1/4, 3/4. +" +} + +\score { + \new StaffGroup << + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(3 1) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + \new Staff { + \overrideTimeSignatureSettings + #'(4 . 4) % timeSignatureFraction + #'(1 . 4) % baseMomentFraction + #'(1 3) % beatStructure + #'() % beamExceptions + \time 4/4 + \repeat unfold 8 {c''8} + } + >> + \layout { + \context { + \Score + \remove "Timing_translator" + \remove "Default_bar_line_engraver" + } + \context { + \Staff + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } + } +} diff --git a/input/regression/to-xml.ly b/input/regression/to-xml.ly index 1ac46ee0ef..2ade5476e3 100644 --- a/input/regression/to-xml.ly +++ b/input/regression/to-xml.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" testMusic = { << c''4 \\ g'4 >> } diff --git a/input/regression/toc.ly b/input/regression/toc.ly index 94fe0f08e7..c16018afbb 100644 --- a/input/regression/toc.ly +++ b/input/regression/toc.ly @@ -1,9 +1,10 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "A table of contents is included using @code{\\markuplines \\table-of-contents}. The toc items are added with -the @code{\\tocItem} command." +the @code{\\tocItem} command. In the PDF backend, the toc items are linked +to the corresponding pages." } #(set-default-paper-size "a6") diff --git a/input/regression/trill-spanner-auto-stop.ly b/input/regression/trill-spanner-auto-stop.ly index 36c21fdea2..a9733a2d0a 100644 --- a/input/regression/trill-spanner-auto-stop.ly +++ b/input/regression/trill-spanner-auto-stop.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "Consecutive trill spans work without explicit @code{\\stopTrillSpan} commands, since successive trill spanners diff --git a/input/regression/trill-spanner-broken.ly b/input/regression/trill-spanner-broken.ly index 1ec7f8b17c..34b0c8f79c 100644 --- a/input/regression/trill-spanner-broken.ly +++ b/input/regression/trill-spanner-broken.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = " diff --git a/input/regression/trill-spanner-chained.ly b/input/regression/trill-spanner-chained.ly index 18417b92d0..59ebc0cac3 100644 --- a/input/regression/trill-spanner-chained.ly +++ b/input/regression/trill-spanner-chained.ly @@ -1,4 +1,4 @@ -\version "2.12.3" +\version "2.14.0" \header { texidoc = "Chained trills end at the next trill or barline. Collisions can be prevented by overriding @code{bound-details}. diff --git a/input/regression/trill-spanner-grace.ly b/input/regression/trill-spanner-grace.ly index 02b032aa26..cf75670f1a 100644 --- a/input/regression/trill-spanner-grace.ly +++ b/input/regression/trill-spanner-grace.ly @@ -2,7 +2,7 @@ texidoc = "Trill spanner can end on a grace note" } -\version "2.12.0" +\version "2.14.0" \layout { ragged-right = ##T } diff --git a/input/regression/trill-spanner-pitched-consecutive.ly b/input/regression/trill-spanner-pitched-consecutive.ly index acd8e7b057..3480435b25 100644 --- a/input/regression/trill-spanner-pitched-consecutive.ly +++ b/input/regression/trill-spanner-pitched-consecutive.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Pitched trills on consecutive notes with the same diff --git a/input/regression/trill-spanner-pitched-forced.ly b/input/regression/trill-spanner-pitched-forced.ly index 2580752122..7d3a9f4cd2 100644 --- a/input/regression/trill-spanner-pitched-forced.ly +++ b/input/regression/trill-spanner-pitched-forced.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Pitched trill accidentals can be forced." diff --git a/input/regression/trill-spanner-pitched.ly b/input/regression/trill-spanner-pitched.ly index 182639ac6c..31ea764129 100644 --- a/input/regression/trill-spanner-pitched.ly +++ b/input/regression/trill-spanner-pitched.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { @@ -12,6 +12,6 @@ ragged-right = ##t } -\relative { +\relative c' { \pitchedTrill c4.\startTrillSpan es f\stopTrillSpan } diff --git a/input/regression/trill-spanner-scaled.ly b/input/regression/trill-spanner-scaled.ly new file mode 100644 index 0000000000..7c50c65579 --- /dev/null +++ b/input/regression/trill-spanner-scaled.ly @@ -0,0 +1,22 @@ +\version "2.14.0" + +\header { + texidoc = " +The horizontal position of the beginning of a trill spanner is +positioned correctly relative to the note head it is attached to, +even if scaled to a smaller size. +" +} + +<< + \new Staff \with { + fontSize = #-6 + \override StaffSymbol #'staff-space = #(magstep -6) + } + \relative c' { + c1\startTrillSpan | c\stopTrillSpan | + } + \new Staff \relative c' { + c1\startTrillSpan | c\stopTrillSpan | + } +>> diff --git a/input/regression/trill-spanner.ly b/input/regression/trill-spanner.ly index 180c60c2f4..b9dd36d968 100644 --- a/input/regression/trill-spanner.ly +++ b/input/regression/trill-spanner.ly @@ -5,7 +5,7 @@ the wavy line should appear to come from the crook of the r" } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t } \relative c'' { c1\startTrillSpan diff --git a/input/regression/tuplet-beam.ly b/input/regression/tuplet-beam.ly index 1b9d32ee59..caef660f53 100644 --- a/input/regression/tuplet-beam.ly +++ b/input/regression/tuplet-beam.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "In combination with a beam, the bracket of the tuplet diff --git a/input/regression/tuplet-bracket-cross-staff.ly b/input/regression/tuplet-bracket-cross-staff.ly index 346287177a..f94bccd404 100644 --- a/input/regression/tuplet-bracket-cross-staff.ly +++ b/input/regression/tuplet-bracket-cross-staff.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/tuplet-bracket-visibility.ly b/input/regression/tuplet-bracket-visibility.ly new file mode 100644 index 0000000000..94827649b6 --- /dev/null +++ b/input/regression/tuplet-bracket-visibility.ly @@ -0,0 +1,39 @@ +\version "2.14.0" + +\header { + texidoc = "The default behavior of tuplet-bracket visibility is to print a bracket +unless there is a beam of the same length as the tuplet. Overriding +@code{'bracket-visibility} changes the bracket visibility as follows: + +@itemize + +@item +@code{#t} (always print a bracket) + +@item +@code{#f} (never print a bracket) + +@item +@code{#'if-no-beam} (only print a bracket if there is no beam) + +@end itemize +" +} + +music = \relative c'' { + \times 2/3 { c16[ d e } f8] + \times 2/3 { c8 d e } + \times 2/3 { c4 d e } +} + +\new Voice { + \relative c' { + << \music s4^"default" >> + \override TupletBracket #'bracket-visibility = #'if-no-beam + << \music s4^"'if-no-beam" >> + \override TupletBracket #'bracket-visibility = ##t + << \music s4^"#t" >> + \override TupletBracket #'bracket-visibility = ##f + << \music s4^"#f" >> + } +} diff --git a/input/regression/tuplet-broken.ly b/input/regression/tuplet-broken.ly index d8ceec7eb8..365e205631 100644 --- a/input/regression/tuplet-broken.ly +++ b/input/regression/tuplet-broken.ly @@ -8,7 +8,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t diff --git a/input/regression/tuplet-full-length-extent.ly b/input/regression/tuplet-full-length-extent.ly index cff49efa3c..0a02f74031 100644 --- a/input/regression/tuplet-full-length-extent.ly +++ b/input/regression/tuplet-full-length-extent.ly @@ -4,7 +4,7 @@ attaching column for a full-length tuplet bracket can be ignored." } -\version "2.12.0" +\version "2.14.0" \new Staff { \set tupletFullLength = ##t diff --git a/input/regression/tuplet-full-length-note.ly b/input/regression/tuplet-full-length-note.ly index 92a8f362b1..7055e9efba 100644 --- a/input/regression/tuplet-full-length-note.ly +++ b/input/regression/tuplet-full-length-note.ly @@ -6,7 +6,7 @@ the next note, by setting @code{tupletFullLengthNote}." } -\version "2.12.0" +\version "2.14.0" \new RhythmicStaff { \set tupletFullLength = ##t diff --git a/input/regression/tuplet-full-length.ly b/input/regression/tuplet-full-length.ly index 53ac8d57da..8d38604c37 100644 --- a/input/regression/tuplet-full-length.ly +++ b/input/regression/tuplet-full-length.ly @@ -5,7 +5,7 @@ start of the next non-tuplet note. " } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t indent = 0.0 } diff --git a/input/regression/tuplet-gap.ly b/input/regression/tuplet-gap.ly index 373e9c1567..5210a0dc42 100644 --- a/input/regression/tuplet-gap.ly +++ b/input/regression/tuplet-gap.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout { indent = 0.0\mm diff --git a/input/regression/tuplet-nest-beam.ly b/input/regression/tuplet-nest-beam.ly index c6e53caa47..8c2674bb48 100644 --- a/input/regression/tuplet-nest-beam.ly +++ b/input/regression/tuplet-nest-beam.ly @@ -5,7 +5,7 @@ } -\version "2.12.0" +\version "2.14.0" \paper{ ragged-right=##t } diff --git a/input/regression/tuplet-nest.ly b/input/regression/tuplet-nest.ly index c090b2beb7..dfdd543450 100644 --- a/input/regression/tuplet-nest.ly +++ b/input/regression/tuplet-nest.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc=" Tuplets may be nested." diff --git a/input/regression/tuplet-no-stems.ly b/input/regression/tuplet-no-stems.ly index 1bd57dde6e..702b9cf0eb 100644 --- a/input/regression/tuplet-no-stems.ly +++ b/input/regression/tuplet-no-stems.ly @@ -3,7 +3,7 @@ } -\version "2.12.0" +\version "2.14.0" \layout{ \context{ diff --git a/input/regression/tuplet-properties.ly b/input/regression/tuplet-properties.ly index 06681150f5..6d7ab0ddd5 100644 --- a/input/regression/tuplet-properties.ly +++ b/input/regression/tuplet-properties.ly @@ -1,3 +1,4 @@ +\version "2.14.0" \header { texidoc = "Tuplet bracket formatting supports numerous options, @@ -5,40 +6,33 @@ for instance, bracketed (B) and non-bracketed (NB). " } - -\version "2.12.0" - - - \context Voice \relative c'' { \times 2/3 { c'8 c,, c } \times 2/3 { c'8 c'' c,, } - - \times 2/3 { c8[^"NB" c c] } - - \times 2/3 { c8^"B" c[ c] } + \times 2/3 { c8[^"NB" c c] } + + \times 2/3 { c8^"B" c[ c] } \times 2/4 { r8_"B" c,[ c'] r8 } - - \override TupletBracket #'bracket-visibility = #'if-no-beam - \times 2/3 { c8[ c c] } - + + \override TupletBracket #'bracket-visibility = #'if-no-beam + \times 2/3 { c8[ c c] } + \tupletUp - \override TupletNumber #'transparent = ##t - \times 2/3 { c8^""^""^"up, no digit" c[ c] } - \revert TupletNumber #'transparent + \override TupletNumber #'stencil = ##f + \times 2/3 { c8^""^""^"up, no digit" c[ c] } + \revert TupletNumber #'stencil - \override TupletBracket #'bracket-visibility = ##t - \override TupletBracket #'shorten-pair = #'(2.0 . 2.0) + \override TupletBracket #'bracket-visibility = ##t + \override TupletBracket #'edge-height = #'(0 . 0) + \override TupletBracket #'shorten-pair = #'(2.0 . 2.0) \times 4/6 { c_"shorter, no edges" f b b f c} \revert TupletBracket #'edge-height \revert TupletBracket #'shorten-pair - \override TupletBracket #'bracket-flare = #'(0.5 . 0.5) + + \override TupletBracket #'bracket-flare = #'(0.5 . 0.5) \times 2/3 { b^""^""^"angled edges" b b } \tupletNeutral \times 2/3 { b b b } - } - - diff --git a/input/regression/tuplet-rest.ly b/input/regression/tuplet-rest.ly index ca991b0eb5..3e7776d4a6 100644 --- a/input/regression/tuplet-rest.ly +++ b/input/regression/tuplet-rest.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Tuplets may contain rests. " diff --git a/input/regression/tuplet-single-note.ly b/input/regression/tuplet-single-note.ly index f5cd442413..8e5fcc135a 100644 --- a/input/regression/tuplet-single-note.ly +++ b/input/regression/tuplet-single-note.ly @@ -4,7 +4,7 @@ texidoc = "Show tuplet numbers also on single-note tuplets (otherwise the timing would look messed up!), but don't show a bracket. Make sure that tuplets without any notes don't show any number, either." } -\version "2.12.0" +\version "2.14.0" \paper { ragged-right = ##t indent = 0.0 } diff --git a/input/regression/tuplet-slope.ly b/input/regression/tuplet-slope.ly index 51f319fb0e..b79c3687eb 100644 --- a/input/regression/tuplet-slope.ly +++ b/input/regression/tuplet-slope.ly @@ -15,7 +15,7 @@ The bracket direction is determined by the dominating stem direction. ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" \new Voice { \relative c'' { diff --git a/input/regression/tuplet-staffline-collision.ly b/input/regression/tuplet-staffline-collision.ly index 6bbdbe6d45..c41a0957e7 100644 --- a/input/regression/tuplet-staffline-collision.ly +++ b/input/regression/tuplet-staffline-collision.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Horizontal tuplet brackets are shifted vertically diff --git a/input/regression/tuplet-text-different-numbers.ly b/input/regression/tuplet-text-different-numbers.ly new file mode 100644 index 0000000000..e59e8de666 --- /dev/null +++ b/input/regression/tuplet-text-different-numbers.ly @@ -0,0 +1,15 @@ +\version "2.14.0" +\header{ + texidoc="Non-standard tuplet texts: Printing other tuplet fractions than the ones actually assigned." +} +\layout { ragged-right= ##t } + + +\context Voice \relative c'' { + \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. } +} diff --git a/input/regression/tuplet-text-fraction-with-notes.ly b/input/regression/tuplet-text-fraction-with-notes.ly new file mode 100644 index 0000000000..7a4e1e2a3c --- /dev/null +++ b/input/regression/tuplet-text-fraction-with-notes.ly @@ -0,0 +1,12 @@ +\version "2.14.0" +\header{ + texidoc="Non-standard tuplet texts: Printing a tuplet fraction with note durations assigned to both the denominator and the numerator." +} + + +\context Voice \relative c'' { + \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. } +} diff --git a/input/regression/tuplet-text-note-appended.ly b/input/regression/tuplet-text-note-appended.ly new file mode 100644 index 0000000000..5aadbfee2d --- /dev/null +++ b/input/regression/tuplet-text-note-appended.ly @@ -0,0 +1,13 @@ +\version "2.14.0" +\header{ + texidoc="Non-standard tuplet texts: Appending a note value to the normal text and to the fraction text." +} +\layout { ragged-right= ##t } + + +\context Voice \relative c'' { + \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 } +} diff --git a/input/regression/tuplets.ly b/input/regression/tuplets.ly index 63fd9643e3..9572742fa8 100644 --- a/input/regression/tuplets.ly +++ b/input/regression/tuplets.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" \header{ texidoc=" diff --git a/input/typography-demo.ly b/input/regression/typography-demo.ly similarity index 95% rename from input/typography-demo.ly rename to input/regression/typography-demo.ly index 9938f6ce11..e97ec8b8f7 100644 --- a/input/typography-demo.ly +++ b/input/regression/typography-demo.ly @@ -8,7 +8,7 @@ heavily mutilated Edition Peters Morgenlied by Schubert" } -\version "2.12.0" +\version "2.14.0" ignoreMelisma = \set ignoreMelismata = ##t ignoreMelismaOff = \unset ignoreMelismata @@ -19,8 +19,7 @@ ignoreMelismaOff = \unset ignoreMelismata %#(set-global-staff-size (* 5.8 mm)) indent = #(* mm 4) line-width = #(* mm 140) - interscoreline = 2.\mm - between-system-space = 15\mm + system-system-spacing #'basic-distance = #10.3 ragged-bottom = ##t } @@ -146,12 +145,11 @@ pianoLH = \relative c'' \repeat volta 2\new Voice { \layout { \context { \Lyrics - \override VerticalAxisGroup #'minimum-Y-extent = #'(-0.85 . 2.2) \override LyricText #'font-size = #-1 } \context { \Score - \override Beam #'thickness = #0.55 + \override Beam #'beam-thickness = #0.55 \override Beam #'auto-knee-gap = #4.0 \override SpacingSpanner #'spacing-increment = #1.0 \override Stem #'stemlet-length = #0.5 diff --git a/input/regression/utf-8-mixed-text.ly b/input/regression/utf-8-mixed-text.ly index 47e9f7513b..eb6d00446b 100644 --- a/input/regression/utf-8-mixed-text.ly +++ b/input/regression/utf-8-mixed-text.ly @@ -5,6 +5,6 @@ } -\version "2.12.0" +\version "2.14.0" -\markup { "Здравствуйт Hallo" } +\markup { "Здравствуйте Hallo" } diff --git a/input/regression/utf-8.ly b/input/regression/utf-8.ly index d8c5c5c9d5..ab0d30d6d9 100644 --- a/input/regression/utf-8.ly +++ b/input/regression/utf-8.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" %% Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs @@ -9,14 +9,14 @@ You may have to install additional fonts. Red Hat Fedora taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ - ttfonts-zh_CN fonts-ja fonts-hebrew + ttfonts-zh_CN fonts-ja fonts-hebrew Debian GNU/Linux apt-get install emacs-intl-fonts xfonts-intl-.* \ ttf-kochi-gothic ttf-kochi-mincho \ - xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi -%} + xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi +%} \header { @@ -26,7 +26,7 @@ Pango based backend. Depending on the fonts installed, this fragment will render Bulgarian (Cyrillic), Hebrew, Japanese and Portuguese. " - + } % Cyrillic font @@ -34,19 +34,19 @@ bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. } -hebrew = \lyricmode { +hebrew = \lyricmode { זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. } -japanese = \lyricmode { +japanese = \lyricmode { いろはにほへど ちりぬるを わがよたれぞ つねならむ うゐのおくや まけふこえて - あさきゆめみじ ゑひもせず + あさきゆめみじ ゑひもせず } % "a legal song to you" -portuguese = \lyricmode { +portuguese = \lyricmode { à vo -- cê uma can -- ção legal } @@ -54,7 +54,7 @@ portuguese = \lyricmode { ragged-right = ##T } -\relative { +\relative c' { c2 d e f g f e } \addlyrics { \bulgarian } diff --git a/input/regression/voice-follower.ly b/input/regression/voice-follower.ly index c06de358c1..463d20fa17 100644 --- a/input/regression/voice-follower.ly +++ b/input/regression/voice-follower.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc= " diff --git a/input/regression/volta-broken-left-edge.ly b/input/regression/volta-broken-left-edge.ly index 0bcac60ab4..a598aeaed9 100644 --- a/input/regression/volta-broken-left-edge.ly +++ b/input/regression/volta-broken-left-edge.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc ="Broken volta spanners behave correctly at their left edge in all cases." diff --git a/input/regression/volta-markup-text.ly b/input/regression/volta-markup-text.ly index 6e0ad569dc..f2cb7f1f2a 100644 --- a/input/regression/volta-markup-text.ly +++ b/input/regression/volta-markup-text.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "Volte using @code{repeatCommands} can have markup diff --git a/input/regression/volta-multi-staff-inner-staff.ly b/input/regression/volta-multi-staff-inner-staff.ly index 564f6657af..ecbb891728 100644 --- a/input/regression/volta-multi-staff-inner-staff.ly +++ b/input/regression/volta-multi-staff-inner-staff.ly @@ -12,7 +12,7 @@ volta brackets on staves other than the topmost one." } } -\version "2.12.0" +\version "2.14.0" vmus = { \repeat volta 2 c1 \alternative { d e } } diff --git a/input/regression/volta-multi-staff.ly b/input/regression/volta-multi-staff.ly index 0a87f89b2c..e9100b0c3a 100644 --- a/input/regression/volta-multi-staff.ly +++ b/input/regression/volta-multi-staff.ly @@ -3,7 +3,7 @@ } \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.14.0" vmus = { \repeat volta 2 c1 \alternative { d e } } diff --git a/input/regression/warn-conflicting-key-signatures.ly b/input/regression/warn-conflicting-key-signatures.ly index 80dc236fa2..75d6cfc63a 100644 --- a/input/regression/warn-conflicting-key-signatures.ly +++ b/input/regression/warn-conflicting-key-signatures.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" \header { texidoc = "If you specify two different key signatures at one point, a diff --git a/input/regression/warn-unterminated-span-dynamic.ly b/input/regression/warn-unterminated-span-dynamic.ly index 88c35b2840..fd53599ffb 100644 --- a/input/regression/warn-unterminated-span-dynamic.ly +++ b/input/regression/warn-unterminated-span-dynamic.ly @@ -1,4 +1,6 @@ -\version "2.12.3" +\version "2.14.0" + +#(ly:set-option 'warning-as-error #f) \header { texidoc = "A warning is printed if a dynamic spanner is diff --git a/input/regression/whiteout-lower-layers.ly b/input/regression/whiteout-lower-layers.ly new file mode 100644 index 0000000000..b9aa99fc76 --- /dev/null +++ b/input/regression/whiteout-lower-layers.ly @@ -0,0 +1,21 @@ +\version "2.14.0" + +\header { texidoc = "If the 'whiteout property of a +grob is set to #t, that part of all objects in lower +layers which falls under the extent of the grob is +whited out. Here the TimeSignature whites out the +Tie but not the StaffSymbol. +" +} + +\relative c' { + \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 +} + diff --git a/input/regression/whiteout.ly b/input/regression/whiteout.ly index e75a168216..bb0fae9691 100644 --- a/input/regression/whiteout.ly +++ b/input/regression/whiteout.ly @@ -5,7 +5,7 @@ markup. The whitening effect only is only guaranteed for staff lines, since staff lines are in a lower layer than most other grobs. " } -\version "2.12.0" +\version "2.14.0" \paper { diff --git a/input/regression/woodwind-diagrams-empty.ly b/input/regression/woodwind-diagrams-empty.ly new file mode 100644 index 0000000000..f2404adabb --- /dev/null +++ b/input/regression/woodwind-diagrams-empty.ly @@ -0,0 +1,70 @@ +\version "2.14.0" + +\header { + texidoc="Empty woodwind diagrams for all instruments +in woodwind-diagrams.scm." +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'piccolo + #'() + } +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'flute + #'() + } +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'oboe + #'() + } +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'clarinet + #'() + } +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'bass-clarinet + #'() + } +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'saxophone + #'() + } +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'bassoon + #'() + } +} + +\relative c' { + c1^\markup { + \woodwind-diagram + #'contrabassoon + #'() + } +} diff --git a/input/regression/woodwind-diagrams-key-lists.ly b/input/regression/woodwind-diagrams-key-lists.ly new file mode 100644 index 0000000000..1b70d8f7fa --- /dev/null +++ b/input/regression/woodwind-diagrams-key-lists.ly @@ -0,0 +1,18 @@ +\version "2.14.0" + +\header { + texidoc="Lists all possible keys for all instruments in +woodwind-diagrams.scm" +} + +#(print-keys-verbose 'piccolo) +#(print-keys-verbose 'flute) +#(print-keys-verbose 'flute-b-extension) +#(print-keys-verbose 'oboe) +#(print-keys-verbose 'clarinet) +#(print-keys-verbose 'bass-clarinet) +#(print-keys-verbose 'low-bass-clarinet) +#(print-keys-verbose 'saxophone) +#(print-keys-verbose 'baritone-saxophone) +#(print-keys-verbose 'bassoon) +#(print-keys-verbose 'contrabassoon) diff --git a/input/regression/zero-staff-space.ly b/input/regression/zero-staff-space.ly new file mode 100644 index 0000000000..62e2e16bc9 --- /dev/null +++ b/input/regression/zero-staff-space.ly @@ -0,0 +1,15 @@ +\version "2.14.0" + +\header { + texidoc=" +Setting staff-space to 0 does not cause a segmentation fault. +" +} + +\new Staff \with { + \override StaffSymbol #'staff-space = #0 + } { + \relative c' { + c1 + } +} diff --git a/input/sakura-sakura.ly b/input/sakura-sakura.ly deleted file mode 100644 index 2b86466b06..0000000000 --- a/input/sakura-sakura.ly +++ /dev/null @@ -1,66 +0,0 @@ -%% sakura-sakura.ly - -\version "2.12.0" - - -\header { - title = "さくら さくら" - subtitle = "(Sakura, sakura)" -} - - -\score { - - << - \relative c'' { - %% Beams are melismata, no autobeams. - \set Staff.autoBeaming = ##f - - | a4 a b2 | a4 a b2 - | a4 b c b | a4 b8[ a] f2 - | e4 c e f | e4 e8[ c] b2 - | a'4 b c b | a4 b8[ a] f2 - | e4 c e f | e4 e8[ c] b2 - | a'4 a b2 | a4 a b2 - | d,4 e b'8[ a] f4 | e1 \bar "|." - } - \addlyrics { - - - %{ - - Try the following if the default font doesn't work for you, - run - - lilypond -dshow-available-fonts blabla - - this will show all fonts available to LilyPond, substitute - FAMILY-NAME below and uncomment - - %} - %% \override Lyrics . LyricText #'font-name = #"FAMILY-NAME" - - さ く ら さ く ら - の や ま も さ と も - み わ た す か ぎ り - か す み か く も か - あ さ ひ に に を う - さ く ら さ く ら - は な ざ か り - } - >> - \layout { } - - \midi { - \context { - \Score - tempoWholesPerMinute = #(ly:make-moment 120 4) - } - } - - - } - -%%% Local Variables: -%%% coding: utf-8 -%%% End: diff --git a/input/simple-song.ly b/input/simple-song.ly deleted file mode 100644 index b05fa4613d..0000000000 --- a/input/simple-song.ly +++ /dev/null @@ -1,17 +0,0 @@ - -%% A simple song in LilyPond -<< - \relative { - \clef bass - d,2 d c4 bes a2 \break - c2 c d4 f g2 - } - \addlyrics { - My first Li -- ly song, - Not much can go wrong! - } ->> - -%% Optional helper for automatic updating by convert-ly. May be omitted. -\version "2.12.0" - diff --git a/input/texidocs/GNUmakefile b/input/texidocs/GNUmakefile deleted file mode 100644 index 6142dd9bd3..0000000000 --- a/input/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/input/texidocs/accordion-discant-symbols.texidoc b/input/texidocs/accordion-discant-symbols.texidoc deleted file mode 100644 index d51d2530ed..0000000000 --- a/input/texidocs/accordion-discant-symbols.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Los símbolos específicos de acordeón discanto se escriben mediante -@code{\\markup}. Se puede trucar la colocación vertical de los -símbolos modificando los argumentos de @code{\\raise}. - -" - doctitlees = "Símbolos de acordeón discanto" - - doctitlede = "Symbole für Akkordeon-Diskantregister" - texidocde = " -Diskantregister für Akkordeon können mit @code{\\markup} dargestellt werden. -Die vertikale Position der einzelnen Elemente werden mit @code{\\raise} -angepasst. -" diff --git a/input/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc b/input/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc deleted file mode 100644 index 0f43098559..0000000000 --- a/input/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - texidoces = " -Al escribir un bajo cifrado, existe una forma de especificar si -queremos que las cifras se sitúen encima o debajo de las notas del -bajo, mediante la definición de la propiedad -@code{BassFigureAlignmentPositioning #'direction} (exclusivamente -dentro de un contexto @code{Staff}). Se puede elegir entre -@code{#UP} (o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, -centrado) y @code{#DOWN} (o @code{#-1}, abajo). - -Como podemos ver, esta propiedad se puede cambiar tantas veces -como queramos. Utilice @code{\\once \\override} si no quiere que el -truco se aplique a toda la partitura. - -" - doctitlees = "Añadir un bajo cifrado encima o debajo de las notas" - - doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes" diff --git a/input/texidocs/adding-ambitus-per-voice.texidoc b/input/texidocs/adding-ambitus-per-voice.texidoc deleted file mode 100644 index 73499a58bf..0000000000 --- a/input/texidocs/adding-ambitus-per-voice.texidoc +++ /dev/null @@ -1,13 +0,0 @@ - doctitlees = "Añadir un ámbito por voz" - texidoces = " -Se puede añadir un ámbito por cada voz. En este caso, el ámbito se -debe desplazar manualmente para evitar colisiones. - -" - -texidocde = " -Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie -manual verschoben werden, um Zusammenstöße zu verhindern. - -" -doctitlede = "Ambitus pro Stimme hinzufügen" diff --git a/input/texidocs/adding-an-extra-staff-at-a-line-break.texidoc b/input/texidocs/adding-an-extra-staff-at-a-line-break.texidoc deleted file mode 100644 index 2934719e67..0000000000 --- a/input/texidocs/adding-an-extra-staff-at-a-line-break.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - 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 -(reservado para hacer sitio a un cambio de armadura que de todas -formas no se va a imprimir). La solución alternativa es añadir un -ajuste para @code{Staff.explicitKeySignatureVisibility} como se -muestra en el ejemplo. En las versiones 2.10 y anteriores, -también se necesita un ajuste similar para las indicaciones de -compás (véase el ejemplo). - -" - doctitlees = "Añadir un pentagrama adicional en un salto de línea" diff --git a/input/texidocs/adding-an-extra-staff.texidoc b/input/texidocs/adding-an-extra-staff.texidoc deleted file mode 100644 index 5f1d89ac9d..0000000000 --- a/input/texidocs/adding-an-extra-staff.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se puede añadir (posiblemente de forma temporal) un pentagrama -nuevo una vez que la pieza ha comenzado. - -" - doctitlees = "Añadir un pentagrama nuevo" diff --git a/input/texidocs/adding-bar-lines-to-chordnames-context.texidoc b/input/texidocs/adding-bar-lines-to-chordnames-context.texidoc deleted file mode 100644 index 3be495f20a..0000000000 --- a/input/texidocs/adding-bar-lines-to-chordnames-context.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Para añadir indicaciones de línea divisoria dentro del contexto de -los nombres de acorde @code{ChordNames}, incluya el grabador -@code{Bar_engraver}. - -" - doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)" diff --git a/input/texidocs/adding-drum-parts.texidoc b/input/texidocs/adding-drum-parts.texidoc deleted file mode 100644 index 965a6e59bb..0000000000 --- a/input/texidocs/adding-drum-parts.texidoc +++ /dev/null @@ -1,25 +0,0 @@ - texidoces = " -Mediante la utilización de las potentes herramientas preconfiguradas -como la función @code{\\drummode} y el contexto @code{DrumStaff}, la -introducción de partes para percusión es muy fácil: las percusiones se -sitúan en sus propias posiciones de pentagrama (con una clave -especial) y tienen las cabezas correspondientes al instrumento. Es -posible añadir un símbolo adicional a la percusión o reducir el número -de líneas. - -" - doctitlees = "Escritura de partes de percusión" - - texidocfr = " -Grâce à la puissance des outils préconfigurés tels que la fonction -@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de -parties pour percussions est extrêmement simplifiée : chaque composant -d'une batterie trouve sa place sur une portée dédiée (avec une clef -spécifique) et les têtes de note sont spécifiques à chaque élément. -Il est également possible d'affecter un symbole particulier à chaque -élément, tout comme de restreindre le nombre de lignes de la portée. - -" - - doctitlefr = "Ajout de parties de batterie" - diff --git a/input/texidocs/adding-fingerings-to-tablatures.texidoc b/input/texidocs/adding-fingerings-to-tablatures.texidoc deleted file mode 100644 index 4fc9caf6d3..0000000000 --- a/input/texidocs/adding-fingerings-to-tablatures.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidocfr = "Ajout de doigtés à des tablatures" - - doctitlefr = " -L'ajout de doigtés à des tablatures s'obtient en conjuguant des -@code{\\markup} et des @code{\\finger}. -" diff --git a/input/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc b/input/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc deleted file mode 100644 index ec777d5df2..0000000000 --- a/input/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -La función @code{\\parenthesize} es un truco especial que encierra -objetos entre paréntesis. El grob asociado es -@code{Score.ParenthesesItem}. - -" - doctitlees = "Encerrar entre paréntesis una marca expresiva o una nota de un acorde" diff --git a/input/texidocs/adding-the-current-date-to-a-score.texidoc b/input/texidocs/adding-the-current-date-to-a-score.texidoc deleted file mode 100644 index 4e6a67cdf7..0000000000 --- a/input/texidocs/adding-the-current-date-to-a-score.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - texidoces = " -Con algo de código de Scheme, se puede añadir fácilmente la fecha -actual a una partitura. -" - doctitlees = "Añadir la fecha actual a una partitura" - - texidocfr = " -Avec un peu de code Scheme, voici comment ajouter facilement -la date du jour à votre partition. -" - - doctitlefr = "Ajout de la date du jour à une partition" diff --git a/input/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/input/texidocs/adding-volta-brackets-to-additional-staves.texidoc deleted file mode 100644 index 287a587ac9..0000000000 --- a/input/texidocs/adding-volta-brackets-to-additional-staves.texidoc +++ /dev/null @@ -1,10 +0,0 @@ - texidoces = " -El grabador @code{Volta_engraver} reside de forma predeterminada -dentro del contexto de @code{Score}, y los corchetes de la repetición -se imprimen así normalmente sólo encima del pentagrama superior. Esto -se puede ajustar añadiendo el grabador @code{Volta_engraver} al -contexto de @code{Staff} en que deban aparecer los corchetes; véase -también el fragmento de código \"Volta multi staff\". - -" - doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas" diff --git a/input/texidocs/additional-voices-to-avoid-collisions.texidoc b/input/texidocs/additional-voices-to-avoid-collisions.texidoc deleted file mode 100644 index 13eaef686a..0000000000 --- a/input/texidocs/additional-voices-to-avoid-collisions.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - doctitlees = "Voces adicionales para evitar colisiones" - texidoces = " -En ciertos casos de polifonía compleja, se necesitan voces adicionales -para evitar colisiones entre las notas. Las voces adicionales se -añaden definiendo una variable que utiliza la función de Scheme -context-spec-music. - -" diff --git a/input/texidocs/adjusting-lyrics-vertical-spacing.texidoc b/input/texidocs/adjusting-lyrics-vertical-spacing.texidoc deleted file mode 100644 index f37ef0f206..0000000000 --- a/input/texidocs/adjusting-lyrics-vertical-spacing.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Este fragmento de código muestra cómo situar la línea de base de la -letra más cerca del pentagrama. - -" - doctitlees = "Ajuste del especiado vertical de la letra" - - texidocfr = " -Cet extrait illustre la manière de rapprocher la ligne de paroles -de la portée. - -" - doctitlefr = "Ajustement de l'espacement vertical des paroles" - diff --git a/input/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/input/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc deleted file mode 100644 index fc1f697bb0..0000000000 --- a/input/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc +++ /dev/null @@ -1,15 +0,0 @@ - texidoces = " -Puede ser necesario trucar la propiedad -@code{shortest-duration-space} para poder ajustar el tamaño de las -caídas y subidas de tono («falls» y «doits»). - -" - doctitlees = "Ajustar la forma de las subidas y caídas de tono" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um -das Aussehen von unbestimmten Glissandi anzupassen. - -" - doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen" diff --git a/input/texidocs/aligning-and-centering-instrument-names.texidoc b/input/texidocs/aligning-and-centering-instrument-names.texidoc deleted file mode 100644 index 7e31af0802..0000000000 --- a/input/texidocs/aligning-and-centering-instrument-names.texidoc +++ /dev/null @@ -1,23 +0,0 @@ - texidoces = " -Los nombres de instrumento se imprimen generalmente a la izquierda de -los pentagramas. Para alinear los nombres de varios instrumentos -distintos, sitúelos dentro de un bloque @code{\\markup} y utilice una -de las siguientes posiblidades: - -* - Nombres de instrumento alineados por la derecha: es el - comportamiento predeterminado - -* - Nombres de instrumento centrados: la utilización de la instrucción - @code{\\hcenter-in #n} sitúa los nombres de instrumento dentro de - un rectángulo separado, donde @code{n} es la anchura del - rectángulo - -* - Nombres de instrumento alineados por la izquierda: los nombres se - imprimen en la parte superior de un rectángulo vacío, utilizando - la instrucción @code{\\combine} con un objeto @code{\\hspace #n}. - -" - doctitlees = "Alinear y centrar los nombres de instrumento" diff --git a/input/texidocs/aligning-lyrics.texidoc b/input/texidocs/aligning-lyrics.texidoc deleted file mode 100644 index d3ff20e317..0000000000 --- a/input/texidocs/aligning-lyrics.texidoc +++ /dev/null @@ -1,9 +0,0 @@ - texidoces = " -La alineación horizontal de la letra se puede ajustar sobreescribiendo -la propiedad @code{self-alignment-X} del objeto @code{LyricText}. -@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; -sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y -@code{#RIGHT}. - -" - doctitlees = "Alineación de la letra" diff --git a/input/texidocs/aligning-marks-with-various-notation-objects.texidoc b/input/texidocs/aligning-marks-with-various-notation-objects.texidoc deleted file mode 100644 index 31b46fc676..0000000000 --- a/input/texidocs/aligning-marks-with-various-notation-objects.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - 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 -objetos se encuentran @code{ambitus}, @code{breathing-sign}, -@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge}, -@code{key-cancellation}, @code{key-signature} y @code{time-signature}. - -En estos casos, las marcas de texto se centran horizontalmente sobre -el objeto, aunque esto se puede cambiar, como se muestra en la segunda -línea de este ejemplo (en una partitura con varios pentagramas, se -debe hacer este ajuste para todos los pentagramas). - -" - doctitlees = "Alinear marcas con varios objetos de notación" diff --git a/input/texidocs/alignment-vertical-spacing.texidoc b/input/texidocs/alignment-vertical-spacing.texidoc deleted file mode 100644 index f41623fe21..0000000000 --- a/input/texidocs/alignment-vertical-spacing.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -Mediante el establecimiento de las propiedades de -@code{NonMusicalPaperColumn} se puede ajustar el espaciado vertical en -cada sistema. - -Ajustando @code{alignment-extra-space} o -@code{fixed-alignment-extra-space} se puede ampliar verticalmente un -sistema individual. - -Por razones técnicas, se debe usar @code{\\overrideProperty} para -cambiar estas propiedades dentro de un pentagrama; aún se debe usar -@code{\\override} dentro de un bloque @code{\\context} para las -sobreescrituras globales. - -" - doctitlees = "Espaciado de la alineación vertical" diff --git a/input/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/input/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc deleted file mode 100644 index db3924f422..0000000000 --- a/input/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Las cifras de digitación se imprimen de forma predeterminada fuera -del pentagrama. Sin embargo, este comportamiento se puede -cancelar. - -" - doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - texidocfr = " -L'empilement des indications de doigté se fait par défaut à l'extérieur de la portée. Néanmoins, il est possible d'annuler ce comportement. - -" - doctitlefr = "Impression des doigtés à l'intérieur de la portée" diff --git a/input/texidocs/ambitus-with-multiple-voices.texidoc b/input/texidocs/ambitus-with-multiple-voices.texidoc deleted file mode 100644 index 478eb93163..0000000000 --- a/input/texidocs/ambitus-with-multiple-voices.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - doctitlees = "Ámbitos con varias voces" - texidoces = " -La adición del grabador @code{Ambitus_engraver} al contexto de -@code{Staff} crea un solo ámbito por pentagrama, incluso en el caso de -pentagramas con varias voces. - -" - -texidocde = " -Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext -hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem -Fall, dass mehrere Stimmen sich im gleichen System befinden. -" - doctitlede = "Ambitus mit vielen Stimmen" diff --git a/input/texidocs/ancient-fonts.texidoc b/input/texidocs/ancient-fonts.texidoc deleted file mode 100644 index a04f65fdd9..0000000000 --- a/input/texidocs/ancient-fonts.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Aquí se muestran muchos (¿o quizá todos?) de los símbolos que -están contemplados por la capacidad de LilyPond para la música -antigua. -" - - doctitlees = "Tipografía de música antigua" - - texidocfr =" -Voici comment graver la plupart, sinon tous les symboles que -LilyPond prend en charge en matière de musique ancienne. - -" - doctitlefr = "Gravure de musique ancienne" diff --git a/input/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/input/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc deleted file mode 100644 index 2c922a5af0..0000000000 --- a/input/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -Este ejemplo muestra cómo hacer una transcripción moderna de canto -gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza -solamente cabezas de nota de blanca y de negra, y unas marcas -especiales que indican silencios de distintas longitudes. - -" - - doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)" - - texidocde = " -Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen -Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur -halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die -Länge von Pausen an. -" diff --git a/input/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/input/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc deleted file mode 100644 index 9bde002085..0000000000 --- a/input/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc +++ /dev/null @@ -1,37 +0,0 @@ - texidoces = " -Al transcribir música mensural, es útil un «incipit» al compienzo -de la pieza para indicar la tonalidad y el tempo -originales. Aunque los músicos actuales están acostumbrados a las -barras de compás para reconocer con más facilidad los patrones -rítmicos, durante el período de la música mensural aún no se -habíen inventado las líneas divisorias; de hecho, la medida solía -cambiar a cada pocas notas. Como compromiso, a menudo las líneas -divisorias se imprimen entre los pentagramas en vez de hacerlo -encima de ellos. - -" - doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)" - - texidocde = " -Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein -Incipit an den Anfang des Stückes zu stellen, damit klar ist, wie -Tempo und Schlüssel in der Originalnotation gesetzt waren. Während -heutzutage Musiker an Taktlinien gewöhnt sind, um Rhythmen schneller -zu erkennen, wurden diese in der Mensuralmusik nicht verwendet. -Tatsächlich ändern sich die Rhythmen auch oft alle paar Noten. Als -ein Kompromiss werden die Notenlinien nicht auf dem System, sondern -zwischen den Systemen geschrieben. -" - - texidocfr = " -Lorsque l'on transcrit de la musique mensurale, il est d'usage -d'indiquer en début de partition, par un « incipit », les tonalité -et tempo originaux. De nos jours, les musiciens ont l'habitude de -voir des barres de mesure qui les aide à appréhender la structure -rythmique. Ces barres n'existaient pas du temps où ces œuvres ont -été écrites ; en fait, la métrique évoluait au fil de la pièce. Un -compromis consiste à imprimer des barres de mesure entre les portées -plutôt que sur la portée elle-même. - -" - doctitle = "Exemples de notation ancienne -- transcription moderne de musique mensurale" diff --git a/input/texidocs/ancient-time-signatures.texidoc b/input/texidocs/ancient-time-signatures.texidoc deleted file mode 100644 index 728ddeeda0..0000000000 --- a/input/texidocs/ancient-time-signatures.texidoc +++ /dev/null @@ -1,5 +0,0 @@ - texidoces = " -Las indicaciones de compás también se pueden grabar en estilo antiguo. - -" - doctitlees = "Indicaciones de compás antiguas" diff --git a/input/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/input/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc deleted file mode 100644 index f56602a210..0000000000 --- a/input/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc +++ /dev/null @@ -1,43 +0,0 @@ - doctitlees = "Aplicar estilos de cabeza según la nota de la escala" - texidoces = " -La propiedad @code{shapeNoteStyles} se puede usar para definir varios -estilos de cabezas de nota para cada grado de la escala (según esté -establecido por la armadura o por la propiedad \"tonic\"). Esta -propiedad requiere un conjunto de símbolos, que pueden ser puramente -arbitrarios (se permiten expresiones geométricas como @code{triangle}, -triángulo, @code{cross}, aspas, y @code{xcircle}, círculo con aspas) o -basados en una antigua tradición americana de grabado (ciertos nombres -de nota latinos trambién se permiten). - -Dicho esto, para imitar antiguos cancioneros americanos, existen varios -estilos predefinidos de cabezas de nota disponibles a través de -instrucciones de abreviatura como @code{\\aikenHeads} o -@code{\\sacredHarpHeads}. - -Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, -y muestra la capacidad de transportar una melodía sin perder la -correspondencia entre las funciones armónicas y los estilos de cabezas de -nota. - -" - - doctitlede = "Notenkopfstile besierend auf der Tonleiterstufe erstellen" - texidocde = " -Die @code{shapeNoteStyles}-(NotenFormenStile)-Eigenschaft kann benutzt -werden, um verschiedene Notenstile für jeden Schritt der Tonleiter -zudefinieren (vorgegeben von der Tonart oder der @q{tonic} -(Tonika)-Eigneschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen, -welche beliebig sein können (geometrische Ausdrücke wie @code{triangle} -(Dreieck), @code{cross} (Kreuz) und @code{xcircle} (X-Kreis) sind erlaubt) -oder basierend auf einer alten amerikanischen Notensatztradition (einige -lateinische Notenbezeichnungen sind auch erlaubt). - -Um alte amerikanische Liederbücher zu imitieren, gibt es einige -vordefinierte Notenstile wie etwa @code{\\aikenHeads} (im Stil von Aiken) -oder @code{\\sacredHarpHeads} (im Stil der Sacred Harp-Tradition). - -Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und -eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den -harmonischen Funktionen und dem Notenstil verloren geht. - -" diff --git a/input/texidocs/arabic-improvisation.texidoc b/input/texidocs/arabic-improvisation.texidoc deleted file mode 100644 index fe59a77fa4..0000000000 --- a/input/texidocs/arabic-improvisation.texidoc +++ /dev/null @@ -1,10 +0,0 @@ - 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 -@code{\cadenzaOn}. Podría ser necesario ajustar el estilo de -alteraciones accidentales, porque la ausencia de líneas divisorias -hará que la alteración aparezca una sola vez. He aquí un ejemplo de -cómo podría ser el comienzo de una improvisación @emph{hijaz}: - -" -doctitlees = "Improvisación de música árabe" diff --git a/input/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc b/input/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc deleted file mode 100644 index 30b0dfd5d3..0000000000 --- a/input/texidocs/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.texidoc +++ /dev/null @@ -1,21 +0,0 @@ - texidoces = " -En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma -predeterminada como dos grupos de cuatro. - -Utilizando un macro que seobreescribe el comportamiento automático del -barrado, este fragmento de código cambia el barrado a pulsos de negra. - -" - doctitlees = "Barras automáticas de dos en dos en los compases de 4/4 o de 2/2" - -%% Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a - texidocfr = " -Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées -par défaut en deux groupes de quatre. - -En utilisant une macro qui modifie le comportement des ligatures -automatiques, voici comment obtenir des ligatures basées sur la valeur -d'une noire. - -" - doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" diff --git a/input/texidocs/avoiding-collisions-of-chord-fingering-with-beams.texidoc b/input/texidocs/avoiding-collisions-of-chord-fingering-with-beams.texidoc deleted file mode 100644 index 89b0d4ba63..0000000000 --- a/input/texidocs/avoiding-collisions-of-chord-fingering-with-beams.texidoc +++ /dev/null @@ -1,20 +0,0 @@ - texidoces = " -Las digitaciones y los números de cuerda aplicados a notas -individuales evitan a las barras automáticamente, pero de forma -predeterminada esto no es cierto para las digitaciones y números -de cuerda que se aplican a notas concretas de acordes. El ejemplo -siguiente muestra cómo se puede sobreescribir este comportamiento -predeterminado: - -" - doctitlees = "Evitar colisiones entre digitaciones de acordes y barras de corchea" - -%% Translation of GIT committish: 98dc713cb34b498f145badf23d14957367a19ece - texidocfr = " -Les doigtés et les numéros de cordes attachés à des notes seules -évitent automatiquement les barres de ligature, mais ce n'est pas le cas par -défaut pour les doigtés ou numéros de cordes attachés aux notes d'un -accord. L'exemple qui suit montre comment ce comportement par défaut -peut être corrigé. -" - doctitlefr = "Éviter les collisions entre les doigtés d'accords et les ligatures" diff --git a/input/texidocs/beam-endings-in-score-context.texidoc b/input/texidocs/beam-endings-in-score-context.texidoc deleted file mode 100644 index 7a9e9ea1a3..0000000000 --- a/input/texidocs/beam-endings-in-score-context.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " -Las reglas de final de barra especificadas en el contexto -@code{Score} se aplican a todos los pentagramas, pero se pueden -modificar tanto en los niveles de @code{Staff} como de -@code{Voice}: - -" - doctitlees = "Finales de barra en el contexto Score" diff --git a/input/texidocs/beam-grouping-in-7-8-time.texidoc b/input/texidocs/beam-grouping-in-7-8-time.texidoc deleted file mode 100644 index 376417c63f..0000000000 --- a/input/texidocs/beam-grouping-in-7-8-time.texidoc +++ /dev/null @@ -1,19 +0,0 @@ - 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 -barras automáticas se debe especificar la forma de agrupamiento. -Por ejemplo, para agrupar todas las barras en la forma 2-3-2 en el -compás de 7/8, especificamos los finales de barra en 2/8 y 5/8: - -" - doctitlees = "Agrupamiento de las barras en el compás de 7/8" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Es gibt keine automatischen Balkengruppen für 7/8-Takte. Wenn diese -Taktart benötigt wird, müssen die Gruppierungen definiert werden. Um -beispielsweise alle Noten in 2/8-3/8-2/8 aufzuteilen, müssen Balkenenden -für 2/8 und 5/8 definiert werden: - -" - doctitlede = "Balkengruppen für 7/8-Takte" diff --git a/input/texidocs/beams-across-line-breaks.texidoc b/input/texidocs/beams-across-line-breaks.texidoc deleted file mode 100644 index dffc70185b..0000000000 --- a/input/texidocs/beams-across-line-breaks.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -Normalmente están prohibidos los saltos de línea si las barras -atraviesan las líneas divisorias. Se puede cambiar este -comportamiento como se muestra aquí: - -" - doctitle = "Barras que atraviesan saltos de línea" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - -texidocde = " -Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert -werden. - -" - doctitlede = "Balken über Zeilenumbrüche" diff --git a/input/texidocs/caesura-railtracks-with-fermata.texidoc b/input/texidocs/caesura-railtracks-with-fermata.texidoc deleted file mode 100644 index af663e28f6..0000000000 --- a/input/texidocs/caesura-railtracks-with-fermata.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " -A veces se denota una «cesura» con una doble marca de respiración -parecida a las vías del tren, con un calderón encima. Este -fragmento de código presenta una combinación de estas dos marcas, -visualmente satisfactoria. - -" - doctitlees = "Cesura tipo \"vías del tren\" con calderón" diff --git a/input/texidocs/center-text-below-hairpin-dynamics.texidoc b/input/texidocs/center-text-below-hairpin-dynamics.texidoc deleted file mode 100644 index 504a57467f..0000000000 --- a/input/texidocs/center-text-below-hairpin-dynamics.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " -Este ejemplo proporciona una función para tipografiar un regulador -con texto por debajo, como \"molto\" o \"poco\". El ejemplo -ilustra también cómo modificar la manera en que se imprime -normalmente un objeto, utilizando código de Scheme. - -" - doctitlees = "Centrar texto debajo de un regulador" diff --git a/input/texidocs/changing--flageolet-mark-size.texidoc b/input/texidocs/changing--flageolet-mark-size.texidoc deleted file mode 100644 index bcc9e3aaab..0000000000 --- a/input/texidocs/changing--flageolet-mark-size.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Para hacer más pequeño el círculo de @code{\\flageolet} (armónico) -utilice la siguiente función de Scheme. - -" - doctitlees = "Cambiar el tamaño de la marca de \\flageolet" diff --git a/input/texidocs/changing-a-single-notes-size-in-a-chord.texidoc b/input/texidocs/changing-a-single-notes-size-in-a-chord.texidoc deleted file mode 100644 index 2b2566507c..0000000000 --- a/input/texidocs/changing-a-single-notes-size-in-a-chord.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - texidoces = " -Se pueden modificar notas individuales de un acorde con la -instrucción @code{\\tweak}, alterando la propiedad -@code{font-size}. - -Dentro de un acorde (entre ángulos simples @code{< >}), antes de -la nota que queremos alterar, situamos la instrucción -@code{\\tweak} seguida por @code{#'font-size} y definimos el -tamaño adecuado como @code{#-2} (una cabeza pequeña). - -" - doctitlees = "Modificar el tamaño de una nota suelta de un acorde" diff --git a/input/texidocs/changing-beam-knee-gap.texidoc b/input/texidocs/changing-beam-knee-gap.texidoc deleted file mode 100644 index 5a8cc19dee..0000000000 --- a/input/texidocs/changing-beam-knee-gap.texidoc +++ /dev/null @@ -1,25 +0,0 @@ - texidoces = " -Se insertan automáticamente barras en ángulo cuando se detecta un -intervalo muy grande entre las notas. Se puede hacer un ajuste -fino de este comportamiento a través de la propiedad -@code{auto-knee-gap}. Se traza una barra doblada si el salto es -mayor que el valor de @code{auto-knee-gap} más el ancho del objeto -barra (que depende de la duración de las notas y de la inclinación -de la barra). De forma predeterminada @code{auto-knee-gap} está -establecido a 5.5 espacios de pentagrama. - -" - doctitlees = "Cambiar el salto de las barras en ángulo" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Balken mit Hälsen in unterschiedliche Richtungen werden automatisch -erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses -Verhalten kann durch die @code{auto-knee-gap}-Eigenschaft beeinflusst -werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer -ist als der Wert von @code{auto-knee-gap} plus der Dicke des Balkens -(was von der Notendauer und der Neigung des Balkens abhängt). Der -Standardwert von @code{auto-knee-gap} ist 5.5 Notensystemabstände. - -" - doctitlede = "Balken für weit außeinander liegende Noten ändern" diff --git a/input/texidocs/changing-chord-separator.texidoc b/input/texidocs/changing-chord-separator.texidoc deleted file mode 100644 index aab9131b9f..0000000000 --- a/input/texidocs/changing-chord-separator.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se puede establecer el separador entre las distintas partes del -nombre de un acorde para que sea cualquier elemento de marcado. - -" - doctitlees = "Modificación del separador de acordes" diff --git a/input/texidocs/changing-form-of-multi-measure-rests.texidoc b/input/texidocs/changing-form-of-multi-measure-rests.texidoc deleted file mode 100644 index 03b3b70746..0000000000 --- a/input/texidocs/changing-form-of-multi-measure-rests.texidoc +++ /dev/null @@ -1,18 +0,0 @@ - doctitlees = "Cambiar la forma de los silencios multicompás" - texidoces = " -Si hay diez compases de silencio o menos, se imprime en el pentagrama -una serie de silencios de breve y longa (conocidos en alemán como -\"Kirchenpausen\", «silencios eclesiásticos»); en caso contrario se -muestra una barra normal. Este número predeterminado de diez se -puede cambiar sobreescribiendo la propiedad @code{expand-limit}: - -" - -texidocde = " -Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa- -und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten -wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von -zehn kann geändert werden, indem man die @code{expand-limit}-Eigenschaft -setzt: -" - doctitlede = "Die Erscheinung von Pausentakten ändern" diff --git a/input/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc b/input/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc deleted file mode 100644 index a36492cd80..0000000000 --- a/input/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -Al producir una salida MIDI, el comportamiento predeterminado es -que cada pentagrama representa un canal MIDI, con todas las voces -de dicho pentagrama mezcladas. Esto reduce al mínimo el riesgo de -que se agote el número de canales MIDI disponibles, pues existe un -máximo de 16 canales por pista. - -Sin embargo, cuando se traslada el interpretador -@code{Staff_performer} al contexto @code{Voice}, cada voz de un -pentagrama puede tener su propio canal MIDI, como se muestra en el -siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se -crean dos canales MIDI, cada uno con un @code{midiInstrument} -distinto. - -" - doctitlees = "Modificar la salida MIDI para que tenga un canal por cada voz" diff --git a/input/texidocs/changing-partcombine-texts.texidoc b/input/texidocs/changing-partcombine-texts.texidoc deleted file mode 100644 index fa2eeea973..0000000000 --- a/input/texidocs/changing-partcombine-texts.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - 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 -y de unísono: - -" - doctitlees = "Cambiar los textos de partcombine" diff --git a/input/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/input/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc deleted file mode 100644 index 7046f20102..0000000000 --- a/input/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc +++ /dev/null @@ -1,25 +0,0 @@ - texidoces = " -Se puede modificar el texto empleado para los crescendos y -decrescendos modificando las propiedades de contexto -@code{crescendoText} y @code{decrescendoText}. El estiloo de la -línea de extensión se puede cambiar modificando la propiedad -@code{'style} de @code{DynamicTextSpanner}. El valor -predeterminado es @code{'hairpin} (regulador), y entre otros -valores posibles se encuentran @code{'line} (línea), -@code{'dashed-line} (línea intermitente) y @code{'dotted-line} -(línea de puntos): - -" - doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Der Text, der für Crescendo und Decrescendo gestzt wird, kann geändert -werden, indem man die Eigenschaften @code{crescendoText} und -@code{decrescendoText} verändert. Der Stil des Streckers kann auch -geändert werden, indem die @code{'style}-Eigenschaft des -@code{DynamicTextSpanner} beeinflusst wird. Der Standardwert ist -@code{'hairpin}, ander Möglichkeiten sind @code{'line}, @code{'dashed-line} -und @code{'dotted-line}: -" - doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern" diff --git a/input/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc b/input/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc deleted file mode 100644 index cad9421f0a..0000000000 --- a/input/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se puede cambiar el aspecto de las ligaduras de expresión de -continuas a punteadas o intermitentes. - -" - doctitlees = "Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente" diff --git a/input/texidocs/changing-the-breath-mark-symbol.texidoc b/input/texidocs/changing-the-breath-mark-symbol.texidoc deleted file mode 100644 index fdd1c4ebfd..0000000000 --- a/input/texidocs/changing-the-breath-mark-symbol.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -El glifo de la marca de respiración se puede ajustar -sobreescribiendo la propiedad de texto del objeto de presentación -@code{BreathingSign}, con cualquier otro texto de marcado. - -" - doctitlees = "Cambiar el símbolo de la marca de respiración" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Das Schriftzeichen für das Atemzeichen kann verändert werden, indem -die Text-Eigenschaft des @code{BreathingSign}-Layoutobjekts mit einer -beliebigen Textbeschriftung definiert wird. - -" - doctitlede = "Das Atemzeichen-Symbol verändern" diff --git a/input/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc b/input/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc deleted file mode 100644 index 046a964afb..0000000000 --- a/input/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " -La nomenclatura inglesa (predeterminada) para los acordes del -cifrado americano se puede cambiar por la alemana -(@code{\\germanChords} sustituye B y Bes por H y B) o por la semi-alemana -(@code{\\semiGermanChords} sustituye B y Bes por H y Bb). - -" - doctitlees = "Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana" diff --git a/input/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc b/input/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc deleted file mode 100644 index 682557c805..0000000000 --- a/input/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - 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 -@code{figuredBassAlterationDirection} y -@code{figuredBassPlusDirection}. - -" - doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado" diff --git a/input/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/input/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc deleted file mode 100644 index 2991d5221b..0000000000 --- a/input/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Para cambiar el tempo en la salida MIDI sin -imprimir nada, hacemos invisible la indicación metronómica: - -" - - doctitlees = "Cambiar el tempo sin indicación metronómica" diff --git a/input/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc b/input/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc deleted file mode 100644 index b241ac7e0c..0000000000 --- a/input/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc +++ /dev/null @@ -1,10 +0,0 @@ - texidoces = " -La instrucción @code{\time} establece las propiedades -@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y -@code{measureLength} en el contexto @code{Timing}, que normalmente -tiene el alias @code{Score}. La modificación del valor de -@code{timeSignatureFraction} hace que se imprima la nueva indicación -de compás sin que cambie ninguna de las demás propiedades: - -" - doctitlees = "Cambio de compás sin afectar al barrado" diff --git a/input/texidocs/changing-the-tuplet-number.texidoc b/input/texidocs/changing-the-tuplet-number.texidoc deleted file mode 100644 index ef7a2c0494..0000000000 --- a/input/texidocs/changing-the-tuplet-number.texidoc +++ /dev/null @@ -1,20 +0,0 @@ - doctitlees = "Cambiar el número del grupo especial" - texidoces = " - -De forma predeterminada sólo se imprime el numerador del grupo -especial sobre el corchete de grupo, es decir, el denominador del -argumento de la instrucción @code{\\times}. De forma alternativa, se -puede imprimr un quebrado en la forma numerador:denominador del número -del grupo, o eliminar el número. - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer -dargestellt, wie er dem @code{\\times}-Befehl übergeben wird. -Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl -vollständig unterdrücken. - -" - doctitlede = "Die Zahl der N-tole verändern" diff --git a/input/texidocs/chant-or-psalms-notation.texidoc b/input/texidocs/chant-or-psalms-notation.texidoc deleted file mode 100644 index c0ddbada64..0000000000 --- a/input/texidocs/chant-or-psalms-notation.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Este tipo de notación se utiliza para el canto de los Salmos, en -que las estrofas no siempre tienen la misma longitud. - -" - doctitlees = "Notación de responsos o salmos" diff --git a/input/texidocs/chord-name-exceptions.texidoc b/input/texidocs/chord-name-exceptions.texidoc deleted file mode 100644 index a173aa4a4c..0000000000 --- a/input/texidocs/chord-name-exceptions.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Se puede usar la propiedad @code{chordNameExceptions} para -almacenar una lista de notaciones espaciales para acordes -específicos. - -" - doctitlees = "Excepciones para los nombres de acorde" diff --git a/input/texidocs/clusters.texidoc b/input/texidocs/clusters.texidoc deleted file mode 100644 index fe97313012..0000000000 --- a/input/texidocs/clusters.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Los «clusters» o racimos son un mecanismo para indicar la -interpretación de un ámbito de notas al mismo tiempo. - -" - doctitlees = "Clusters («racimos»)" diff --git a/input/texidocs/combining-dynamics-with-markup-texts.texidoc b/input/texidocs/combining-dynamics-with-markup-texts.texidoc deleted file mode 100644 index 518f9e48f6..0000000000 --- a/input/texidocs/combining-dynamics-with-markup-texts.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Ciertas indicaciones dinámicas pueden llevar textos (como \"più -forte\" o \"piano subito\"). Se pueden producir usando un -bloque @code{\\markup}. - -" - doctitlees = "Combinar indicaciones dinámicas con marcados textuales" diff --git a/input/texidocs/combining-two-parts-on-the-same-staff.texidoc b/input/texidocs/combining-two-parts-on-the-same-staff.texidoc deleted file mode 100644 index 55c8c0be30..0000000000 --- a/input/texidocs/combining-two-parts-on-the-same-staff.texidoc +++ /dev/null @@ -1,20 +0,0 @@ - texidoces = " -La herramienta de combinación de partes ( instrucción -@code{\\partcombine}) permite la combinación de varias partes -diferentes sobre el mismo pentagrama. Las indicaciones textuales -tales como \"solo\" o \"a2\" se añaden de forma predeterminada; -para quitarlas, sencillamente establezca la propiedad -@code{printPartCombineTexts} al valor \"falso\". Para partituras -vocales (como himnos), no hay necesidad de añadir los textos -\"solo\" o \"a2\", por lo que se deben desactivar. Sin embargo, -podría ser mejor no usarlo si hay solos, porque éstos no se -indicarán. En tales casos podría ser preferible la notación -polifónica estándar. - -Este fragmento de código presenta las tres formas en que se pueden -imprimir dos partes sobre un solo pentagrama: polifonía estándar, -@code{\\partcombine} sin textos, y @code{\\partcombine} con -textos. - -" - doctitlees = "Combinar dos partes sobre el mismo pentagrama" diff --git a/input/texidocs/compound-time-signatures.texidoc b/input/texidocs/compound-time-signatures.texidoc deleted file mode 100644 index 7b4818a4b6..0000000000 --- a/input/texidocs/compound-time-signatures.texidoc +++ /dev/null @@ -1,23 +0,0 @@ - doctitlees = "Indicaciones de compases compuestos" - texidoces = " -Las indicaciones de compás poco frecuentes como \"5/8\" se pueden -ejecutar como compases compuestos (p.ej. \"3/8 + 2/8\"), que combinan -dos o más metros diferentes. LilyPond puede hacer la música de este -tipo fácil de leer e interpretar, imprimiendo explícitamente las -indicaciones de compás compuesto y adaptando el comportamiento -automático de las barras (también se pueden añadir indicaciones -gráficas de la agrupación de compases; véase el fragmento de código -apropiado en la base de datos). - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Ungerade Taktarten werden (wie etwa \"5/8\") werden oft als zusammengesetzte -Taktarten interpretiert (bspw. \"3/8 + 2/8\"), in welchen zwei oder mehr -Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, -indem entsprechende Taktarten gesetzt werden und die automatische -Bebalkung angepasst wird. - -" - doctitlede = "Zusammengesetzte Taktarten" diff --git a/input/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/input/texidocs/conducting-signs,-measure-grouping-signs.texidoc deleted file mode 100644 index be915a231e..0000000000 --- a/input/texidocs/conducting-signs,-measure-grouping-signs.texidoc +++ /dev/null @@ -1,15 +0,0 @@ - texidoces = " -Las opciones para agrupar los pulsos de un compás están a nuestra -disposición a través de la función de Scheme -@code{set-time-signature}, que acepta tres argumentos: el número -de pulsos, la longitud del pulso, y la agrupación interna de los -pulsos dentro del compás. Si se incluye el grabador -@code{Measure_grouping_engraver}, la función crea también símbolos -de agrupación @code{MeasureGrouping}. Dichos símbolos facilitan -la lectura de la música moderna de cierta complejidad rítmica. En -el ejemplo, el compás de 9/8 se subdivide en 2, 2, 2 y 3. Esto se -pasa a la función @code{set-time-signature} como tercer argumento: -@code{'(2 2 2 3)}: - -" -doctitlees = "Símbolos de dirección, símbolos de agrupación de compás" diff --git a/input/texidocs/contemporary-glissando.texidoc b/input/texidocs/contemporary-glissando.texidoc deleted file mode 100644 index f0527b9432..0000000000 --- a/input/texidocs/contemporary-glissando.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Se puede tipografiar un gissando contemporáneo sin nota final -utilizando una nota oculta y temporalización de cadenza. - -" - doctitlees = "Glissando contemporáneo" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem -eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird. - -" - doctitlede = "Moderne Glissandi" diff --git a/input/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/input/texidocs/controlling-the-placement-of-chord-fingerings.texidoc deleted file mode 100644 index fdeb7fb4f2..0000000000 --- a/input/texidocs/controlling-the-placement-of-chord-fingerings.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Se puede controlar con precisión la colocación de los números de digitación. - -" - doctitlees = "Controlar la colocación de las digitaciones de acordes" - - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Le positionnement des doigtés peut être contrôlé de manière très précise. - -" - doctitlefr = "Conrôle du positionnement des doigtés" diff --git a/input/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/input/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc deleted file mode 100644 index cae858c591..0000000000 --- a/input/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc +++ /dev/null @@ -1,29 +0,0 @@ - texidoces = " -El orden vertical que ocupan las inscripciones gráficas está -controlado con la propiedad @code{script-priority}. Cuanto más -bajo es este número, más cerca de la nota se colocará. En este -ejemplo, el @code{TextScript} (el sostenido) tiene primero la -prioridad más baja, por lo que se sitúa en la posición más baja en -el primer ejemplo. En el segundo, el semitrino (el @code{Script}) -es el que la tiene más baja, por lo que se sitúa en la parte -interior. Cuando dos objetos tienen la misma prioridad, el orden -en que se introducen determina cuál será el que aparece en primer -lugar. - -" - doctitlees = "Controlar la ordenación vertical de las inscripciones" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Die vertikale Anordnung von Beschriftungen wird mit der -@code{'script-priority}-Eigenschaft kontrolliert. Um so kleiner die -Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In -diesem Beispiel hat das @code{TextScript}-Objekt (das Kreuz) zuerst -die niedrigste Priorität, wird also auch am niedrigsten in dem ersten -Beispiel gesetzt. Im zweiten Fall hat der Praller (das @code{Script}) -die niedrigste Priorität, darum wird er am nächsten zum System gesetzt. -Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge -anhand ihres Auftretens in der Quelldatei entschieden. - -" - doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren" diff --git a/input/texidocs/creating-a-delayed-turn.texidoc b/input/texidocs/creating-a-delayed-turn.texidoc deleted file mode 100644 index 730839f834..0000000000 --- a/input/texidocs/creating-a-delayed-turn.texidoc +++ /dev/null @@ -1,12 +0,0 @@ -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 -varias sobreescriturasw de propiedades. La propiedad -@code{outside-staff-priority} se debe establecer al valor #f, pues en -caso contrario tendría prioridad sobre la propiedad @code{avoid-slur -property}. El valor de @code{halign} se utiliza para colocar el -grupeto horizontalmente. - -" - -doctitlees = "Crear un grupeto de anticipación" diff --git a/input/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/input/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc deleted file mode 100644 index 0eec1a9abb..0000000000 --- a/input/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - texidoces = " -Se puede trazar un símbolo de arpegio entre notas de distintas -voces que están sobre el mismo pentagrama si el grabador -@code{Span_arpeggio_engraver} se traslada al contexto de -@code{Staff} context: - -" - doctitlees = "Crear arpegios entre notas de voces distintas" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Ein Arpeggio kann zwischen Noten aus unterschidlichen Stimmen auf demselben -System gezogen werden, wenn der @code{Span_arpeggio_engraver} in den -@code{Staff}-Kontext verschoben wird: - -" - doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen" diff --git a/input/texidocs/creating-blank-staves.texidoc b/input/texidocs/creating-blank-staves.texidoc deleted file mode 100644 index 64bb7464d4..0000000000 --- a/input/texidocs/creating-blank-staves.texidoc +++ /dev/null @@ -1,10 +0,0 @@ - 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} del contexto @code{Score}, y los -grabadores de la indicación de compás -@code{Time_signature_engraver}, de la clave @code{Clef_engraver} y -de los compases @code{Bar_engraver} del contexto de @code{Staff}. - -" - doctitlees = "Crear pentagramas en blanco" diff --git a/input/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/input/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc deleted file mode 100644 index 9aa3a4d8c0..0000000000 --- a/input/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -Dentro de un @code{PianoStaff}, es posible hacer que un arpegio -cruce entre los pentagramas ajustando la propiedad -@code{PianoStaff.connectArpeggios}. - -" - doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Arpeggio über mehrere Systeme können in anderen Kontexten als dem -@code{PianoStaff} erstellt werden, wenn der @code{Span_arpeggio_engraver} -in den @code{Score}-Kontext eingefügt wird. - -" - doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten" diff --git a/input/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/input/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc deleted file mode 100644 index 3d67a665d8..0000000000 --- a/input/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - texidoces = " -Se pueden crear arpegios que se cruzan entre pentagramas dentro de -contextos distintos a @code{PianoStaff} si se incluye el grabador -@code{Span_arpeggio_engraver} en el contexto de @code{Score}. - -" - doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio -zwischen beiden Systemen zu verbinden, indem die -@code{PianoStaff.connectArpeggios}-Eigenschaft gesetzt wird. - - -" - doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen" diff --git a/input/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/input/texidocs/creating-metronome-marks-in-markup-mode.texidoc deleted file mode 100644 index 722a09a2d7..0000000000 --- a/input/texidocs/creating-metronome-marks-in-markup-mode.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Se pueden crear indicaciones metronómicas nuevas en modo de -marcado, pero no cambian el tempo en la salida MIDI. - -" - doctitlees = "Crear indicaciones metronómicas en modo de marcado" - diff --git a/input/texidocs/creating-real-parenthesized-dynamics.texidoc b/input/texidocs/creating-real-parenthesized-dynamics.texidoc deleted file mode 100644 index 09cb23ecda..0000000000 --- a/input/texidocs/creating-real-parenthesized-dynamics.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - 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 -tiene un inconveniente: los objetos que se crean se comportarán -como elementos de marcado de texto y no como indicaciones -dinámicas. - -Sin embargo, es posible crear un objeto similar utilizando el -código de Scheme equivalente (como se explica en \"Interfaz del -programador de elementos de marcado\"), en combinación con la -función @code{make-dynamic-script}. De esta forma, el elemento de -marcado se tratará como una indicación dinámica, y por tanto -seguirá siendo compatible con instrucciones como -@code{\\dynamicUp} o @code{\\dynamicDown}. - -" - doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis" diff --git a/input/texidocs/custodes.texidoc b/input/texidocs/custodes.texidoc deleted file mode 100644 index d082df2927..0000000000 --- a/input/texidocs/custodes.texidoc +++ /dev/null @@ -1,5 +0,0 @@ - texidoces = " -Se pueden tipografiar «custos» en diferentes estilos. - -" - doctitlees = "Custos" diff --git a/input/texidocs/customizing-fretboard-fret-diagrams.texidoc b/input/texidocs/customizing-fretboard-fret-diagrams.texidoc deleted file mode 100644 index c7cc16ee06..0000000000 --- a/input/texidocs/customizing-fretboard-fret-diagrams.texidoc +++ /dev/null @@ -1,11 +0,0 @@ - texidoces = " -Se pueden establecer las propiedades de los diagramas de -posiciones de acordes por medio de @code{'fret-diagram-details}. -Para los diagramas de posiciones de FretBoard, se aplican los -overrides (sobreescrituras) al objeto @code{FretBoards.FretBoard}. -Como @code{Voice}, @code{FretBoards} es un contexto del nivel -inferior, y por tanto se puede omitir su nombre en la -sobreescritura de propiedades. - -" - doctitlees = "Personalizar los diagramas de posiciones" diff --git a/input/texidocs/customizing-markup-fret-diagrams.texidoc b/input/texidocs/customizing-markup-fret-diagrams.texidoc deleted file mode 100644 index 2e8f6e6b79..0000000000 --- a/input/texidocs/customizing-markup-fret-diagrams.texidoc +++ /dev/null @@ -1,20 +0,0 @@ - texidoces = " -Se pueden establecer las propiedades de los diagramas de -posiciones a través de @code{'fret-diagram-details}. Para los -diagramas de posiciones de marcado, se pueden aplicar overrides -(sobreescrituras) al objeto @code{Voice.TextScript} o directamente al elemento de marcado. - -" - doctitlees = "Personalizar diagramas de posiciones de marcado" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Les propriétés d'un diagramme de fret sont modifiables grâce au -@code{'fret-diagram-details}. Lorsqu'ils sont générés sous forme -de @code{\markup}, rien n'empêche de les modifier en jouant sur les -réglages de l'objet @code{Voice.TextScript} ou bien directement sur -le @qq{markup}. - -" - doctitlefr = "Personnalisation des diagrammes de fret" diff --git a/input/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc b/input/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc deleted file mode 100644 index 40b6a9a2e1..0000000000 --- a/input/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -La dirección predeterminada de las plicas sobre la tercera línea -del pentagrama está determinada por la propiedad -@code{neutral-direction} del objeto @code{Stem}. - -" - doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama" diff --git a/input/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc b/input/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc deleted file mode 100644 index 56da6dbf1e..0000000000 --- a/input/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc +++ /dev/null @@ -1,36 +0,0 @@ - texidoces = " - -Se pueden añadir diagramas de posiciones predefinidas para -instrumentos nuevos además de los estándar que se usan para la -guitarra. Este archivo muestra cómo se hace, definiendo una afinación -nueva y unas cuantas posiciones para el cuatro venezolano. - -Este archivo también muestra cómo se pueden incluir las digitaciones -en los acordes que se usan como puntos de referencia para la búsqueda -de acordes en la tabla, y mostrarse en el diagrama de posiciones y la -tablatura @code{TabStaff}, pero no en la música. - -Estas posiciones no se pueden transportar porque contienen información -de las cuerdas. Hay planes para corregir esto en un futuro. - -" - doctitlees = "Definición de posiciones predefinidas para otros instrumentos" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -La liste des diagrammes standards prédéfinis pour la guitare peut être - augmentée d'autres définitions spécifiques à d'autres instruments. -Voici comment définir un nouvel accordage ainsi que quelques diagrammes -prédéfinis pour le @qq{cuatro vénézuélien}. - -Cet exemple illustre aussi la manière d'ajouter des doigtés aux -accords ; ils serviront de référence pour la boucle d'accord et seront -indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans la musique. - -Ces diagrémmes ne peuvent pas être transposés, dans la mesure où ils -contiennent des informations sur les condes. Ceci est amené à évoluer. - -" - doctitlefr = "Création de diagrammes de fret prédéfinis pour -d'autres instruments" diff --git a/input/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/input/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc deleted file mode 100644 index 2735ccb5cf..0000000000 --- a/input/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Si hay un solo pentagrama en un de los tipos de sistema -@code{ChoirStaff} o @code{StaffGroup}, el comportamiento -predeterminado es que no se imprima el corchete en la barra inicial. -Esto se puede cambiar sobreescribiendo las propiedades adecuadas. - -Observe que en contextos como @code{PianoStaff} y -@code{GrandStaff} en que los sistemas empiezan con una llave en -lugar de un corchete, se debe establecer el valor de una propiedad -distinta, como se ve en el segundo sistema del ejemplo. - -" - doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama" - diff --git a/input/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc b/input/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc deleted file mode 100644 index 37d52b0feb..0000000000 --- a/input/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc +++ /dev/null @@ -1,26 +0,0 @@ - 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 -Webern (la \"Segunda\" escuela de Viena), cada nota de la escala de -doce tonos se debe tratar con igualdad, sin ninguna jerarquía como los -grados clásicos tonales. Por tanto, estos compositores imprimen una -alteración accidental para cada nota, incluso en las notas naturales, -para enfatizar su nuevo enfoque de la teoría y el lenguaje musicales. - -Este fragmento de código muestra cómo conseguir dichas reglas de -notación. - -" - - texidocde = " - In Werken des fürhen 20. Jahrhundert, angefangen mit Schönberg, Berg - und Webern (die zweite Wiener Schule), wird jeder Ton der - Zwölftonleiter als gleichwertig erachtet, ohne hierarchische - Ordnung. Deshalb wird in dieser Musik für jede Note ein Versetzungszeichen - ausgegeben, auch für unalterierte Tonhöhen, um das neue Verständnis - der Musiktheorie und Musiksprache zu verdeutlichen. - - Dieser Schnipsel zeigt, wie derartige Notationsregeln zu erstellen sind. - " - -doctitlede = "Versetzungszeichen für jede Note im Stil der Zwölftonmusik" diff --git a/input/texidocs/embedding-native-postscript-in-a--markup-block.texidoc b/input/texidocs/embedding-native-postscript-in-a--markup-block.texidoc deleted file mode 100644 index 81f02dc355..0000000000 --- a/input/texidocs/embedding-native-postscript-in-a--markup-block.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se puede insertar códico PostScript directamente dentro de un -bloque @code{\\markup}. - -" - doctitlees = "Empotrar PostScript nativo dentro de un bloque \\markup" diff --git a/input/texidocs/engravers-one-by-one.texidoc b/input/texidocs/engravers-one-by-one.texidoc deleted file mode 100644 index 2e74af4927..0000000000 --- a/input/texidocs/engravers-one-by-one.texidoc +++ /dev/null @@ -1,30 +0,0 @@ - texidoces = " -Del problema central de la notación, esto es, crear un determinado -símbolo, se encargan los «plugins» o complementos añadidos. Cada -uno de los complementos se conoce como un grabador. En este -ejemplo, los grabadores se van activando uno por uno, en el orden -siguiente: - -- cabeza de las notas, - -- el símbolo del pentagrama, - -- clave, - -- plicas, - -- barras, ligaduras de expresión, acentos, - -- alteraciones, líneas divisorias, indicación del compás, y armadura. - -Los grabadores se encuentran agrupados. Por ejemplo, las cabezas -de nota, ligaduras de expresión, barras de corchea, etc. forman un -contexto de voz. Los grabadores de la armadura, alteraciones, -compás, etc. forman un contexto de pentagrama. - -Sólo podemos ver el primer ejemplo en este documento; para ver los -demás debemos descartar el fragmento de código y procesarlo en -nuestro ordenador. - -" - doctitlees = "Los grabadores, uno por uno" diff --git a/input/texidocs/engraving-ties-manually.texidoc b/input/texidocs/engraving-ties-manually.texidoc deleted file mode 100644 index df91c6cbf4..0000000000 --- a/input/texidocs/engraving-ties-manually.texidoc +++ /dev/null @@ -1,20 +0,0 @@ - doctitlees = "Grabado manual de las ligaduras" - texidoces = " -Se pueden grabar a mano las ligaduras modificando la propiedad -@code{tie-configuration} del objeto @code{TieColumn}. El primer número -indica la distancia a partir de la tercera línea del pentagrama en -espacios de pentagrama, y el segundo número indica la dirección (1 = -hacia arriba, -1 = hacia abajo). - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Überbindungen können manuell gesetzt werden, indem man die -@code{tie-configuration}-Eigenschaft des @code{TieColumn}-Objekts -beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in -Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben, --1 = nach unten). - -" - doctitlede = "Bindebögen manuell setzen" diff --git a/input/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/input/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc deleted file mode 100644 index 9fddfd89af..0000000000 --- a/input/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc +++ /dev/null @@ -1,31 +0,0 @@ - doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times" - texidoces = " -La propiedad @code{tupletSpannerDuration} establece cuánto debe durar -cada grupo de valoración especial contenido dentro del corchete que -aparece después de @code{\\times}. Así, se pueden escribir muchos -tresillos seguidos dentro de una sola expresión @code{\\times}, -ahorrando trabajo de teclado. - -En el ejemplo se muestran dos tresillos, aunque se ha escrito -@code{\\times} una sola vez. - - -Para ver más inforamción sobre @code{make-moment}, véase -\"Administración del tiempo\". - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede -der N-tolen innerhalb der Klammern nach dem @code{\\times}-Befehl -dauert. Auf diese Art können etwa viele Triolen nacheinander mit nur -einem @code{\\times}-Befehl geschrieben werden. - -Im Beispiel sind zwei Triolen zu sehen, obwohl @code{\\times} nur -einmal geschrieben wurde. - -Mehr Information über @code{make-moment} gibt es in \"Verwaltung der Zeiteinheiten\". - -" - doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen" diff --git a/input/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc b/input/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc deleted file mode 100644 index 8a64960c1f..0000000000 --- a/input/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - texidoces = " -En este ejemplo se combinan las digitaciones de la mano izquierda, -indicaciones del número de cuerda y digitaciones de la mano -derecha. - -" - doctitlees = "Digitaciones, indicación del número de cuerda y digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -L'exemple suivant illustre comment combiner des doigtés pour la main -gauche, des indications de corrde et des doigtés pour la main droite. - -" - doctitlefr = "Doigtés, indications de cordeet doigtés main droite" - diff --git a/input/texidocs/flat-flags-and-beam-nibs.texidoc b/input/texidocs/flat-flags-and-beam-nibs.texidoc deleted file mode 100644 index f2c6543691..0000000000 --- a/input/texidocs/flat-flags-and-beam-nibs.texidoc +++ /dev/null @@ -1,50 +0,0 @@ - texidoces = " - Son posibles tanto los corchetes rectos sobre notas sueltas como -extremos de barra sueltos en figuras unidas, con una combinación de -@code{stemLeftBeamCount}, @code{stemRightBeamCount} e indicadores de -barra @code{[ ]} emparejados. - - - - -Para corchetes rectos que apunten a la derecha sobre notas sueltas, -use indicadores de barra emparejados @code{[ ]} y establezca -@code{stemLeftBeamCount} a cero (véase el ejemplo 1). - - - - -Para corchetes rectos que apunten a la izquierda, establezca en su -lugar @code{stemRightBeamCount} (ejemplo 2). - - - - -Para extremos sueltos que apunten a la derecha al final de un conjunto -de notas unidas, establezca @code{stemRightBeamCount} a un valor -positivo. Y para extremos sueltos que apunten a la izquierda al -principio de un conjunto de notas unidas, establezca -@code{stemLeftBeamCount} en su lugar (ejemplo 3). - - - - -A veces, para una nota suelta rodeada de silencios tiene sentido que -lleve los dos extremos sueltos del corchete plano, apuntando a derecha -e izquierda. Hágalo solamente con indicadores de barra emparejados -@code{[ ]} (ejemplo 4). - - - - -(Observe que @code{\\set stemLeftBeamCount} siempre equivale a -@code{\\once \\set}. En otras palabras, los ajustes de la cantidad de -barras no se recuerdan, y por ello el par de corchetes planos -aplicados a la nota Do semicorchea @code{c'16 [ ]} del último ejemplo -no tiene nada que ver con el @code{\\set} de dos notas por detrás.) - - - - -" - doctitlees = "Corchetes rectos y extremos de barra sueltos" diff --git a/input/texidocs/forcing-horizontal-shift-of-notes.texidoc b/input/texidocs/forcing-horizontal-shift-of-notes.texidoc deleted file mode 100644 index 36b110f895..0000000000 --- a/input/texidocs/forcing-horizontal-shift-of-notes.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - doctitlees = "Forzar el desplazamiento horizontal de las notas" - texidoces = " -Cuando el motor de tipografiado no es capaz de todo, se puede usar la -propiedad force-hshift del objeto NoteColumn para sobreescribir -decisiones de tipografiado. Las unidades de medida que se usan aquí -son espacios de pentagrama. - -" \ No newline at end of file diff --git a/input/texidocs/grid-lines--changing-their-appearance.texidoc b/input/texidocs/grid-lines--changing-their-appearance.texidoc deleted file mode 100644 index 2f81dff24f..0000000000 --- a/input/texidocs/grid-lines--changing-their-appearance.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se puede cambiar el aspecto de las líneas de rejilla -sobreescribiendo algunas de sus propiedades. - -" - doctitlees = "Líneas de rejilla: modificar su aspecto" diff --git a/input/texidocs/grouping-beats.texidoc b/input/texidocs/grouping-beats.texidoc deleted file mode 100644 index b0bbfd8ac3..0000000000 --- a/input/texidocs/grouping-beats.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Los patrones de barrado se pueden alterar con la propiedad -@code{beatGrouping}: - -" - doctitlees = "Agrupar los pulsos" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Balkengruppen können mit der @code{beatGrouping}-Eigenschaft geändert -werden: - -" - doctitlede = "Notengruppen" diff --git a/input/texidocs/guitar-strum-rhythms.texidoc b/input/texidocs/guitar-strum-rhythms.texidoc deleted file mode 100644 index 14a4be109b..0000000000 --- a/input/texidocs/guitar-strum-rhythms.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - 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. - -" - doctitlees = "Ritmos rasgueados de guitarra" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -In Guitarrennotation kann neben Melodie, Akkordbezeichnungen und -Bunddiagrammen auch der Schlagrhythmus angegeben werden. - -" - doctitldee = "Schlagrhythmus für Guitarren" diff --git a/input/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/input/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc deleted file mode 100644 index 0d36875589..0000000000 --- a/input/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - 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. -Esta línea se puede suprimir de la siguiente manera: - -" - doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie -gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf foldenge Weise -unterdrückt werden: - -" - doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken" diff --git a/input/texidocs/incipit.texidoc b/input/texidocs/incipit.texidoc deleted file mode 100644 index cfc7f25597..0000000000 --- a/input/texidocs/incipit.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Los «incipit» se pueden escribir utilizando el grob del nombre del -instruemento, pero manteniendo independientes las definiciones del -nombre del instrumento y del incipit." - - doctitlees = "Incipit" diff --git a/input/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc b/input/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc deleted file mode 100644 index 182f963f6e..0000000000 --- a/input/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc +++ /dev/null @@ -1,11 +0,0 @@ - texidoces = " -Un corchete de arpegio puede indicar que se tienen que tocadr con la -misma mano notas que están en dos pentagramas distintos. Para hacerlo, -el @code{PianoStaff} se debe configurar para que acepte símbolos de -arpegio de pentagrama cruzado y los símbolos de arpegio se deben -configurar a la forma de corchete en el contexto de @code{PianoStaff}. - -(Debussy, Les collines d’Anacapri, m. 65) - -" - doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio" diff --git a/input/texidocs/inserting-a-caesura.texidoc b/input/texidocs/inserting-a-caesura.texidoc deleted file mode 100644 index fcad8c5843..0000000000 --- a/input/texidocs/inserting-a-caesura.texidoc +++ /dev/null @@ -1,15 +0,0 @@ - texidoces = " -Las marcas de cesura se pueden crear sobreescribiendo la propiedad -@code{'text} del objeto @code{BreathingSign}. También está disponible -una marca de cesura curva. - -" - doctitlees = "Insertar una cesura" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft -des @code{BreathingSign}-Objektes verändert wird. Ein gekrümmtes -Zäsurzeichen ist auch möglich. -" - doctitlede = "Eine Zäsur einfügen" diff --git a/input/texidocs/isolated-percent-repeats.texidoc b/input/texidocs/isolated-percent-repeats.texidoc deleted file mode 100644 index 757dfb6673..0000000000 --- a/input/texidocs/isolated-percent-repeats.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -También se pueden imprimir símbolos de porcentaje sueltos. Esto se -hace introduciendo un silencio multicompás con una función de -impresión distinta: - -" - doctitlees = "Símbolos de porcentaje sueltos" diff --git a/input/texidocs/jazz-combo-template.texidoc b/input/texidocs/jazz-combo-template.texidoc deleted file mode 100644 index c44c36634d..0000000000 --- a/input/texidocs/jazz-combo-template.texidoc +++ /dev/null @@ -1,19 +0,0 @@ - texidoces = " -Ésta es una plantilla bastante avanzada, para un conjunto de -jazz. Observe que la notación de todos los instrumentos está en -@code{\\key c \\major} (Do mayor). Esto se refiere al tono de -concierto; la armadura se transporta automáticamente si la música está -dentro de una sección @code{\\transpose}. - -" - doctitlees = "Plantilla para combo de jazz" - - texidocde = " -Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung: -Alle Instrumente sind in @code{\key c \major} (C-Dur) notiert. Das bezieht sich -auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn -sich die Noten innerhalb eines @code{\transpose}-Abschnitts befinden. - -" - - doctitlede = "Vorlage für Jazz-Combo" diff --git a/input/texidocs/line-arrows.texidoc b/input/texidocs/line-arrows.texidoc deleted file mode 100644 index 9e921c823a..0000000000 --- a/input/texidocs/line-arrows.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se pueden aplicar puntas de flecha a los elementos de extensión de -texto y de línea (como el Glissando). - -" - doctitlees = "Puntas de flecha para las líneas" diff --git a/input/texidocs/lyrics-alignment.texidoc b/input/texidocs/lyrics-alignment.texidoc deleted file mode 100644 index d3ff20e317..0000000000 --- a/input/texidocs/lyrics-alignment.texidoc +++ /dev/null @@ -1,9 +0,0 @@ - texidoces = " -La alineación horizontal de la letra se puede ajustar sobreescribiendo -la propiedad @code{self-alignment-X} del objeto @code{LyricText}. -@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha; -sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y -@code{#RIGHT}. - -" - doctitlees = "Alineación de la letra" diff --git a/input/texidocs/makam-example.texidoc b/input/texidocs/makam-example.texidoc deleted file mode 100644 index 5ee9cb431d..0000000000 --- a/input/texidocs/makam-example.texidoc +++ /dev/null @@ -1,10 +0,0 @@ - texidoces = " -El «Makam» es un tipo de melodía de Turquía que -utiliza intervalos microtonales de 1/9 de tono. Consulte el -archivo de inicio @code{makam.ly} (véase el 'Manual de -aprendizaje @version{}, 4.6.3 Otras fuentes de información' para -averiguar la situación de este archivo) para ver detalles de los -nombres de las notas y las alteraciones. - -" - doctitlees = "El «Makam»" diff --git a/input/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/input/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc deleted file mode 100644 index 0abea560de..0000000000 --- a/input/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc +++ /dev/null @@ -1,9 +0,0 @@ - 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 -conseguir añadiendo más líneas muy cerca de la línea que se quiere -destacar, utilizando la propiedad @code{line-positions} del objeto -@code{StaffSymbol}. - -" - doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras" diff --git a/input/texidocs/measure-counter.texidoc b/input/texidocs/measure-counter.texidoc deleted file mode 100644 index 6ee83af845..0000000000 --- a/input/texidocs/measure-counter.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Este fragmento de código proporciona una solución alternativa a la -producción de contadores de compás utilizando repeticiones -transparentes de tipo porcentaje. - -" - doctitlees = "Contador de compases" diff --git a/input/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/input/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc deleted file mode 100644 index d648717ca1..0000000000 --- a/input/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc +++ /dev/null @@ -1,10 +0,0 @@ - texidoces = " -La disposición «mensurstriche» en que las líneas divisorias no -están dibujadas sobre los pentagramas, sino entre ellos, se puede -conseguir con un @code{StaffGroup} en vez de un @code{ChoirStaff}. -La línea divisoria sobre los pentagramas se borra estableciendo la -propiedad @code{transparent}. - -" - - doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)" diff --git a/input/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/input/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc deleted file mode 100644 index f17539ac85..0000000000 --- a/input/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc +++ /dev/null @@ -1,27 +0,0 @@ - texidoces = " -Las abreviaturas se encuentran definidas dentro del archivo -@code{ly/script-init.ly}, donde las variables @code{dashHat}, -@code{dashPlus}, @code{dashDash}, @code{dashBar}, -@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben -valores predeterminados. Se pueden modificar estos valores -predeterminados para las abreviaturas. Por ejemplo, para asociar -la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del -semitrino en lugar del símbolo predeterminado +, asigne el valor -@code{trill} a la variable @code{dashPlus}: - -" - doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Die Abkürzungen sind in der Datei @samp{ly/script-init.ly} definiert, wo -den Variablen @code{dashHat}, @code{dashPlus}, @code{dashDash}, -@code{dashBar}, @code{dashLarger}, @code{dashDot} und -@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte -können verändert werden. Um zum Beispiel die Abkürzung -@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu -assoziieren, muss der Wert @code{trill} der Variable -@code{dashPlus} zugewiesen werden: - -" - doctitlede = "Die Standardwerte für Arkkikulationsabkürzungen verändern" diff --git a/input/texidocs/multi-measure-rest-markup.texidoc b/input/texidocs/multi-measure-rest-markup.texidoc deleted file mode 100644 index 36662526e7..0000000000 --- a/input/texidocs/multi-measure-rest-markup.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -texidoces = " -Los elementos de marcado aplicados a un silencio multicompás se -centran encima o debajo de éste. Los elementos de marcado extensos -que se adjuntan a silencios multicompás no producen la expansión del -compás. Para expandir un silencio multicompás de forma que quepa todo -el marcado, utilice un silencio de separación con un marcado aplicado -antes del silencio multicompás. - -Observe que el silencio separador produce la inserción de un compás. -El texto aplicado a un siencio sparador de esta forma se alinea por la -izquierda a la posición en que la nota estaría situada dentro del -compás, pero si la longitud del compás está determinada por la -longitud del texto, éste aparecerá centrado. - -" - -doctitlees = "Marcado de silencios multicompás" \ No newline at end of file diff --git a/input/texidocs/nesting-staves.texidoc b/input/texidocs/nesting-staves.texidoc deleted file mode 100644 index b730d5d4f8..0000000000 --- a/input/texidocs/nesting-staves.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -Se puede utilizar la propiedad -@code{systemStartDelimiterHierarchy} para crear grupos de -pentagramas anidados de forma más compleja. La instrucción -@code{\\set StaffGroup.systemStartDelimiterHierarchy} toma una -lista alfabética del número de pentagramas producidos. Se puede -proporcionar antes de cada pentagrama un delimitador de comienzo -de sistema. Se debe encerrar entre corchetes y admite tantos -pentagramas como encierren las llaves. Se pueden omitir los -elementos de la lista, pero el primer corchete siempre abarca -todos los pentagramas. Las posibilidades son -@code{SystemStartBar}, @code{SystemStartBracket}, -@code{SystemStartBrace} y @code{SystemStartSquare}. - -" - doctitlees = "Anidado de grupos de pentagramas" diff --git a/input/texidocs/non-traditional-key-signatures.texidoc b/input/texidocs/non-traditional-key-signatures.texidoc deleted file mode 100644 index a641b1bf93..0000000000 --- a/input/texidocs/non-traditional-key-signatures.texidoc +++ /dev/null @@ -1,45 +0,0 @@ - doctitlees = "Armaduras de tonalidad no tradicionales" - texidoces = " -La muy utilizada instrucción @code{\\key} establece la propiedad -@code{keySignature} property, dentro del contexto @code{Staff}. - -Para crear armaduras de tonalidad no estándar, ajuste esta propiedad -directamente. El formato de esta instrucción es una lista: - -@code{\\set Staff.keySignature = #`(((octava . paso) . alteración) -((octava . paso) . alteración) ...)} donde, para cada elemento dentro -de la lista, @code{octava} especifica la octava (siendo cero la octava -desde el Do central hasta el Si por encima), @code{paso} especifica la -nota dentro de la octava (cero significa Do y 6 significa Si), y -@code{alteración} es @code{,SHARP ,FLAT ,DOUBLE-SHARP} etc. (observe -la coma precedente.) - -Alternativamente, para cada elemento de la lista el uso del formato -más conciso @code{(paso . alteración)} especifica que la misma -alteración debe estar en todas las octavas. - -He aquí un ejemplo de una posible armadura para generar una escala -exátona: -" - - doctitlede = "Untypische Tonarten" - texidocde = " -Der üblicherweise benutzte @code{\\key}-Befehl setzt die -@code{keySignature}-Eigenschaft im @code{Staff}-Kontext. - -Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft -direkt setzen. Das Format für den Befehl ist eine Liste: @code{ \\set -Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave -. Schritt) . Alteration) ...)} wobei für jedes Element in der Liste -@code{Oktave} die Oktave angibt (0@tie{}ist die Oktave vom -eingestrichenen@tie{}C bis zum eingestrichenen@tie{}H), @code{Schritt} gibt -die Note innerhalb der Oktave an (0@tie{}heißt@tie{}C und -6@tie{}heißt@tie{}H), und @code{Alteration} ist @code{,SHARP ,FLAT -,DOUBLE-SHARP} usw. (Beachte das beginnende Komma.) - -Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format -@code{(Schritt . Alteration)} gesetzt werden, wobei dann die Einstellungen -für alle Oktaven gelten. - -Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter: -" diff --git a/input/texidocs/ottava-text.texidoc b/input/texidocs/ottava-text.texidoc deleted file mode 100644 index 3212b96c08..0000000000 --- a/input/texidocs/ottava-text.texidoc +++ /dev/null @@ -1,20 +0,0 @@ - texidoces = " -Internamente, la función @code{set-octavation} establece las -propiedades @code{ottavation} (por ejemplo, a @code{\"8va\"} o a -@code{\"8vb\"}) y @code{middleCPosition}. Para sobreescribir el texto -del corchete, ajuste @code{ottavation} despues de invocar a -@code{set-octavation}. -" - doctitlees = "Texto de octava alta y baja" - - -texidocde = " -Intern setzt die @code{set-octavation}-Funktion die Eigenschaften -@code{ottavation} (etwa auf den Wert @code{\"8va\"} oder @code{\"8vb\"}) -und @code{middleCPosition}. Um den Text der Oktavierungsklammer zu -ändern, kann @code{ottavation} manuell gesetzt werden, nachdem -@code{set-octavation} benützt wurde. - -" - -doctitlede = "Ottava-Text" diff --git a/input/texidocs/percent-repeat-count-visibility.texidoc b/input/texidocs/percent-repeat-count-visibility.texidoc deleted file mode 100644 index e0321cd3fc..0000000000 --- a/input/texidocs/percent-repeat-count-visibility.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Se pueden mostrar los contadores de las repeticiones del tipo -porcentaje a intervalos regulares mediante el establecimiento de -la propiedad de contexto @code{repeatCountVisibility}. - -" - doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" diff --git a/input/texidocs/percent-repeat-counter.texidoc b/input/texidocs/percent-repeat-counter.texidoc deleted file mode 100644 index 60ea3c1303..0000000000 --- a/input/texidocs/percent-repeat-counter.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Las repeticiones de compases completos mayores de dos repeticiones -pueden llevar un contador si se activa la propiedad adecuada, como se -ve en este ejemplo: - -" - doctitlees = "Percent repeat counter" diff --git a/input/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/input/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc deleted file mode 100644 index 81ffebf6ac..0000000000 --- a/input/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc +++ /dev/null @@ -1,18 +0,0 @@ - doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra" - texidoces = " -Este ejemplo artificial muestra cómo se pueden permitir tanto los -saltos de línea manuales como los automáticos dentro de un grupo de -valoración especial unido por una barra. Observe que estos grupos -sincopados se deben barrar manualmente. - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " -Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch -manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt -werden können. Diese unregelmäßige Bebalkung muss allerdings manuell -gesetzt werden. - -" - doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben" diff --git a/input/texidocs/piano-template-simple.texidoc b/input/texidocs/piano-template-simple.texidoc deleted file mode 100644 index 42c95f4fcd..0000000000 --- a/input/texidocs/piano-template-simple.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - texidoces = " -Presentamos a continuación una plantilla de piano sencilla con algunas -notas. - -" - doctitlees = "Plantilla de piano (sencilla)" - - texidocde = " -Hier ein einfaches Klaviersystem. - -" - doctitlede = "Vorlage für einfache Klaviernotation" diff --git a/input/texidocs/piano-template-with-centered-dynamics.texidoc b/input/texidocs/piano-template-with-centered-dynamics.texidoc deleted file mode 100644 index 0b85421b21..0000000000 --- a/input/texidocs/piano-template-with-centered-dynamics.texidoc +++ /dev/null @@ -1,15 +0,0 @@ - texidoces = " -Muchas partituras de piano tienen las indicaciones dinámicas -centradas entre los dos pentagramas. Esto requiere un poco de -trucaje, pero puesto que la plantilla está aquí mismo, no tenemos -que hacer este trucaje por nuestra cuenta. - -" - doctitlees = "Plantilla de piano con matices centrados" - - texidocde = " -In der meisten Klaviernotation werden die Dynamikzeichen zwischen -den beiden Systemen zentriert. Für LilyPond muss man die Einstellungen -etwas anpassen, aber Sie können ja das angepasste Beispiel von hier -kopieren. -" diff --git a/input/texidocs/piano-template-with-centered-lyrics.texidoc b/input/texidocs/piano-template-with-centered-lyrics.texidoc deleted file mode 100644 index 67dcbd406b..0000000000 --- a/input/texidocs/piano-template-with-centered-lyrics.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - 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. - -" - doctitlees = "Plantilla de piano con letra centrada" - - texidocde = " -Anstatt ein eigenes System für Melodie und Text zu schreiben, können -Sie den Text auch zwischen die beiden Klaviersysteme schreiben -(und damit das zusätzliche System für die Gesangstimme auslassen). -" diff --git a/input/texidocs/piano-template-with-melody-and-lyrics.texidoc b/input/texidocs/piano-template-with-melody-and-lyrics.texidoc deleted file mode 100644 index 186e3cb0f4..0000000000 --- a/input/texidocs/piano-template-with-melody-and-lyrics.texidoc +++ /dev/null @@ -1,11 +0,0 @@ - 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. - -" - doctitlees = "Plantilla de piano con melodía y letra" - - texidocde = " -Das nächste Beispiel ist typisch für ein Lied: Im oberen System die -Melodie mit Text, darunter Klavierbegleitung. -" diff --git a/input/texidocs/placement-of-right-hand-fingerings.texidoc b/input/texidocs/placement-of-right-hand-fingerings.texidoc deleted file mode 100644 index 8af88dff45..0000000000 --- a/input/texidocs/placement-of-right-hand-fingerings.texidoc +++ /dev/null @@ -1,18 +0,0 @@ - texidoces = " -Es posible ejercer un mayor control sobre la colocación de las -digitaciones de la mano derecha estableciendo el valor de una -propiedad específica, como se muestra en el ejemplo siguiente. - -" - doctitlees = "Posicionamiento de digitaciones de mano derecha" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Vous disposez d'une propriété spécifique qui permet de contrôler plus -finement le positionnement des doigtés main droite, comme l'indique -l'exemple suivant. - -" - doctitlefr = "Positionnement des doigtés main droite" - diff --git a/input/texidocs/polyphony-in-tablature.texidoc b/input/texidocs/polyphony-in-tablature.texidoc deleted file mode 100644 index bdfbd5c1e0..0000000000 --- a/input/texidocs/polyphony-in-tablature.texidoc +++ /dev/null @@ -1,15 +0,0 @@ - texidoces = " -La polifonía se crea de la misma forma en un @code{TabStaff} que -en una pauta normal. - -" - doctitlees = "Polifonía en tablaturas" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -Une section polyphonique s'obtient dans un @code{TabStaff} de la -même manière que dans une portée normale. - -" - doctitlefr = "Polyphonie en mode tablature" diff --git a/input/texidocs/positioning-multi-measure-rests.texidoc b/input/texidocs/positioning-multi-measure-rests.texidoc deleted file mode 100644 index 549729ee3b..0000000000 --- a/input/texidocs/positioning-multi-measure-rests.texidoc +++ /dev/null @@ -1,21 +0,0 @@ - doctitlees = "Posicionar los silencios multicompás" - texidoces = " -A diferencia de los silencios normales, no existe una instrucción -predefinida para modificar la posición predefinida de un símbolo -multicompás sobre el pentagrama, adjuntándolo a una nota, -independientemente de cuál sea su forma. Sin embargo, en la música -polifónica los silencios multicompás de las voces de numeración par e -impar están separados verticalmente. La colocación de los silencios -multicompás se puede controlar como se ve a continuación: - -" - -texidocde = " -Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die -vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an -eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die -Position der Pausen von geraden und ungeraden Stimmen voneinander -unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert -werden: - " - doctitlede = "Positionierung von Ganztaktpausen" diff --git a/input/texidocs/positioning-text-markups-inside-slurs.texidoc b/input/texidocs/positioning-text-markups-inside-slurs.texidoc deleted file mode 100644 index 18dfa0073d..0000000000 --- a/input/texidocs/positioning-text-markups-inside-slurs.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " - -Los elementos de marcado de texto deben tener la propiedad -@code{outside-staff-priority} establecida al valor falso para que se -impriman por dentro de las ligaduras de expresión. - -" - doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras" diff --git a/input/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/input/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc deleted file mode 100644 index 9fe28471bc..0000000000 --- a/input/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc +++ /dev/null @@ -1,25 +0,0 @@ - texidocfr = " -En accord avec les règles standards de l'écriture musicale, on grave -un bécarre avant un dièse ou un bémol si on a besoin d'annuler une -altération précédente. Pour modifier ce comportement, assignez la propriété -@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux). -" -doctitlees = "Evitar que se añadan becuadros adicionales automáticamente" -texidoces = " -Según las reglas estándar de composición tipográfica, se imprime un becuadro -antes de un sostenido o un bemol cuando se tiene que cancelar una alteración anterior -en la misma nota. Para modificar este comportamiento, establezca el valor de la -propiedad @code{extraNatural} a @code{##f} (falso) dentro del -contexto de @code{Staff}. - -" - -doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch -hinzugefügt werden" - -texidocde = "Den tranditionellen Notensatzregeln zufolge wird ein -Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn -ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden -soll. Um dieses Verhalten zu ändern, muss die Eigenschaft -@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden. -" diff --git a/input/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/input/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc deleted file mode 100644 index d60d6b3260..0000000000 --- a/input/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc +++ /dev/null @@ -1,17 +0,0 @@ -doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura" -texidoces = " -Cuando cambia la armadura de la tonalidad, se imprimen becuadros -automáticamente para cancelar las alteraciones de las armaduras -anteriores. Esto se puede evitar estableciendo al valor \"falso\" la -propiedad @code{printKeyCancellation} del contexto @code{Staff}. - -" - -doctitlede = "Auflösungzeichen nicht setzen, wenn die Tonart wechselt" - -texidocde = " -Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben, -um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann -verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft -im @code{Staff}-Kontext auf \"false\" gesetzt wird. -" diff --git a/input/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/input/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc deleted file mode 100644 index a8002752c9..0000000000 --- a/input/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se puede imprimir una línea divisoria de la forma @code{|:} al -principio de la pieza, sobreescribiendo la propiedad correspondiente: - -" - doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza" diff --git a/input/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/input/texidocs/printing-hairpins-using-al-niente-notation.texidoc deleted file mode 100644 index 624a217f94..0000000000 --- a/input/texidocs/printing-hairpins-using-al-niente-notation.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - texidoces = " -Se pueden imprimir reguladores con un círculo en la punta -(notación «al niente») estableciendo la propiedad -@code{circled-tip} del objeto @code{Hairpin} al valor @code{#t}. - -" - doctitlees = "Impresión de reguladores utilizando la notación «al niente»" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " - Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze - notiert werden (al niente = bis zum Nichts), indem die -@code{circled-tip}-Eigenschaft des @code{Hairpin}-Objekts auf -@code{#t} gesetzt wird. - -" - doctitlede = "Crescendo Klammern al niente schreiben" diff --git a/input/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc b/input/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc deleted file mode 100644 index 0be5d5b47b..0000000000 --- a/input/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - texidoces = " -Las marcas se pueden imprimir al final de la línea actual, en vez de -al comienzo de la línea siguiente. Esto es útil principalmente cuando -se tiene que añadir una marca al final de la partitura (donde no hay -línea siguiente). - -En tales casos, el extremo derecho de la marca se tiene que alinear -con la última línea divisoria, como muestra la segunda línea de este -ejemplo. - -" - doctitlees = "Imprimir marcas al final de la línea o de la partitura" diff --git a/input/texidocs/printing-marks-on-every-staff.texidoc b/input/texidocs/printing-marks-on-every-staff.texidoc deleted file mode 100644 index e68a7ca520..0000000000 --- a/input/texidocs/printing-marks-on-every-staff.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Aunque normalmente las marcas de texto sólo se imprimen sobre el -pentagrama superior, también se pueden imprimir en otro pentagrama -cualquiera. - -" - doctitlees = "Imprimir marcas en cualquier pentagrama" diff --git a/input/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/input/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc deleted file mode 100644 index 8649c918ad..0000000000 --- a/input/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc +++ /dev/null @@ -1,10 +0,0 @@ - texidoces = " -De forma predeterminada, las indicaciones metronómicas y las -letras de ensayo se imprimen encima del pentagrama. Para -colocarlas debajo del pentagrama, simplemente ajustamos -adecuadamente las propiedades @code{side-axis} y @code{direction} -de @code{MetronomeMark} o de @code{RehearsalMark}. - -" - - doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama" diff --git a/input/texidocs/quoting-another-voice-with-transposition.texidoc b/input/texidocs/quoting-another-voice-with-transposition.texidoc deleted file mode 100644 index fc0ab58aa6..0000000000 --- a/input/texidocs/quoting-another-voice-with-transposition.texidoc +++ /dev/null @@ -1,11 +0,0 @@ - texidoces = " -Los pasajes citados tienen en cuenta la transposición de la fuente -tanto como la del destino. En este ejemplo, todos los -instrumentos interpreta una nota con el sonido del Do central; el -destino de un instrumento transpositor en Fa. La parte de destino -se puede transponer utilizando @code{\\transpose}. En este caso -se transportan todas las notas (incluidas las citadas). - -" - -doctitlees = "Citar otra voz con transposición" \ No newline at end of file diff --git a/input/texidocs/quoting-another-voice.texidoc b/input/texidocs/quoting-another-voice.texidoc deleted file mode 100644 index b3ef3b5ca6..0000000000 --- a/input/texidocs/quoting-another-voice.texidoc +++ /dev/null @@ -1,11 +0,0 @@ - texidoces = " -La propiedad @code{quotedEventTypes} determina los tipos de -eventos musicales que resultan citados. El valor predeterminado -es @code{(note-event rest-event)}, que significa que sólo aparecen -en la expresión @code{\\quoteDuring} las notas y los silencios. -En el ejemplo siguiente, el silencio de semicorchea no aparece en -el fragmento citado porque @code{rest-event} no está dentro de los -@code{quotedEventTypes}. - -" - doctitlees = "Citar otra voz" \ No newline at end of file diff --git a/input/texidocs/removing-the-first-empty-line.texidoc b/input/texidocs/removing-the-first-empty-line.texidoc deleted file mode 100644 index 19b690b3a2..0000000000 --- a/input/texidocs/removing-the-first-empty-line.texidoc +++ /dev/null @@ -1,15 +0,0 @@ - texidoces = " -El primer pentagrama vacío también se puede suprimir de la -partitura estableciendo la propiedad @code{remove-first} de -@code{VerticalAxisGroup}. Esto se puede hacer globalmente dentro -del bloque @code{\\layout}, o localmente dentro del pentagrama -concreto que se quiere suprimir. En este último caso, tenemos que -especificar el contexto (@code{Staff} se aplica sólo al pentagrama -actual) delante de la propiedad. - -El pentagrama inferior del segundo grupo no se elimina, porque el -ajuste sólo se aplica al pentagrama concreto dentro del que se -escribe. - -" - doctitlees = "Quitar la primera línea vacía" diff --git a/input/texidocs/rest-styles.texidoc b/input/texidocs/rest-styles.texidoc deleted file mode 100644 index 3e472931ff..0000000000 --- a/input/texidocs/rest-styles.texidoc +++ /dev/null @@ -1,9 +0,0 @@ - doctitlees = "Estilos de silencios" - texidoces = " -Los silencios se pueden imprimir en distintos estilos. -" - - doctitlede = "Pausenstile" - texidocde = " -Pausen können in verschiedenen Stilen dargestellt werden. -" diff --git a/input/texidocs/reverting-default-beam-endings.texidoc b/input/texidocs/reverting-default-beam-endings.texidoc deleted file mode 100644 index 66ef71eef8..0000000000 --- a/input/texidocs/reverting-default-beam-endings.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " -Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} -en 12/8, en primer lugar tenemos que sobreescribir los finales de -barra predeterminados en 12/8, y después preparar los finales de -barra nuevos: - -" - doctitlees = "Alteración de los finales de barra predeterminados" diff --git a/input/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/input/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc deleted file mode 100644 index a521fdbf2f..0000000000 --- a/input/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - 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 -inmediatamente precedente. Se puede controlar este comportamiento -sobreescribiendo la propiedad @code{to-barline}. - -" - doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note -eines Taktes ist, wird die Klammer an der vorhergehenden Tatklinie -beendet. Dieses Verhalten kann auch mit der Eigenschaft -@code{'to-barline} geändert werden: -" - doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen" diff --git a/input/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/input/texidocs/setting-the-minimum-length-of-hairpins.texidoc deleted file mode 100644 index d729f7cb0f..0000000000 --- a/input/texidocs/setting-the-minimum-length-of-hairpins.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - texidoces = " -Si los reguladores son demasiado cortos, se pueden alargar -modificando la propiedad @code{minimum-length} del objeto -@code{Hairpin}. - -" - doctitlees = "Ajustar la longitud mínima de los reguladores" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem -die @code{minimum-length}-Eigenschaft des @code{Hairpin}-Objektes -verändert wird. - -" - doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen" diff --git a/input/texidocs/shortening-volta-brackets.texidoc b/input/texidocs/shortening-volta-brackets.texidoc deleted file mode 100644 index ca73f604e4..0000000000 --- a/input/texidocs/shortening-volta-brackets.texidoc +++ /dev/null @@ -1,9 +0,0 @@ - texidoces = " -De forma predeterminada, los corchetes de primera y segunda vez se -trazan encima de los finales alternativos completos, pero es posible -acortartlos estableciendo un valor cierto para -@code{voltaSpannerDuration}. En el ejemplo siguiente, el corchete -sólo dura un compás, que corresponde a una duración de 3/4. - -" - doctitlees = "Shortening volta brackets" diff --git a/input/texidocs/showing-chords-at-changes.texidoc b/input/texidocs/showing-chords-at-changes.texidoc deleted file mode 100644 index c4acc6824d..0000000000 --- a/input/texidocs/showing-chords-at-changes.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Se pueden imprimir los acordes exclusivamente al comienzo de las -líneas y cuando cambia el acorde. - -" - doctitlees = "Imprimir los acordes cuando se produce un cambio" diff --git a/input/texidocs/simple-lead-sheet.texidoc b/input/texidocs/simple-lead-sheet.texidoc deleted file mode 100644 index 930276aaef..0000000000 --- a/input/texidocs/simple-lead-sheet.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Al juntar nombres de acorde en cifrado americano, melodía y letra, -obtenemos una hoja guía de acordes o «lead sheet»: - -" - doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" diff --git a/input/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/input/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc deleted file mode 100644 index 0fe0a5c01e..0000000000 --- a/input/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc +++ /dev/null @@ -1,11 +0,0 @@ - texidoces = " -Esta plantilla facilita la preparación de una canción con melodía, -letra y acordes. - -" - doctitlees = "Plantilla de pentagrama único con música, letra y acordes" - - texidocde = " -Mit diesem Beispiel können Sie einen Song mit Melodie, -Text und Akkorden schreiben. -" diff --git a/input/texidocs/single-staff-template-with-notes-and-chords.texidoc b/input/texidocs/single-staff-template-with-notes-and-chords.texidoc deleted file mode 100644 index 2044578bae..0000000000 --- a/input/texidocs/single-staff-template-with-notes-and-chords.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - texidoces = " -¿Quiere preparar una hoja guía de acordes (o «lead sheet») con -melodía y acordes? ¡No busque más! - -" - -doctitlees = "Plantilla de pentagrama único con música y acordes" - - texidocde = " -Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist -das richtige Beispiel für Sie! -" diff --git a/input/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/input/texidocs/single-staff-template-with-notes-and-lyrics.texidoc deleted file mode 100644 index fceb221a6d..0000000000 --- a/input/texidocs/single-staff-template-with-notes-and-lyrics.texidoc +++ /dev/null @@ -1,19 +0,0 @@ - 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 -el barrado automático, que es lo más frecuente en las partes vocales -antiguas. Para usar el barrado automático modifique o marque como un -comentario la línea correspondiente. - -" - doctitlees = "Plantilla de pentagrama único don notas y letra" - - texidocde = " -Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren -Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen -Sie es mit LilyPond. In dem Beispiel wird die automatische -Balkenverbindung ausgeschaltet (mit dem Befehl @code{\autoBeamOff}), -wie es für Vokalmusik üblich ist. -Wenn Sie die Balken wieder einschalten wollen, müssen Sie die -entsprechende Zeile entweder ändern oder auskommentieren. -" diff --git a/input/texidocs/single-staff-template-with-only-notes.texidoc b/input/texidocs/single-staff-template-with-only-notes.texidoc deleted file mode 100644 index 31276c8755..0000000000 --- a/input/texidocs/single-staff-template-with-only-notes.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - 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 -un archivo, escriba las notas y ¡ya está! - -" - doctitlees = "Plantilla de un solo pentagrama, con notas únicamente" - - texidocde = " -Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein -Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen -Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben -eine vollständige Notationsdatei. -" diff --git a/input/texidocs/snap-pizzicato-markup-bartok-pizzicato.texidoc b/input/texidocs/snap-pizzicato-markup-bartok-pizzicato.texidoc deleted file mode 100644 index 39b62da5b9..0000000000 --- a/input/texidocs/snap-pizzicato-markup-bartok-pizzicato.texidoc +++ /dev/null @@ -1,21 +0,0 @@ - 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 -@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un -chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se -denota mediante una circunferencia con una línea vertical corta que parte -del centro de aquélla hacia fuera. Aunque Lilypond no tiene ninguna -instrucción predefinida para crear esta marca, es fácil hacer la definición -y colocarla directamente en el archivo de lilypond. -" - - doctitlede = "Bartók-Pizzicato" - texidocde = " -Das Bartók-Pizzicato @q{ist eine besondere Form des Pizzicato, bei dem der -Spieler die Saite auf das Griffbrett aufschlagen lässt, sodass zusätzlich -zum angeschlagenen Ton ein scharfes, knallendes Geräusch ertönt} -(Wikipedia). Es wird dargestellt als kleiner Kreis mit einer vertikalen -Linie, die vom Kreiszentrum aus nach oben weist und ein Stück außerhalb des -Kreises endet. Lilypond hat keinen eigenen Glyphen für dieses Symbol; es -ist aber einfach, direkt eine Definition in die Eingabedatei einzufügen. -" diff --git a/input/texidocs/specifying-context-with-beatgrouping.texidoc b/input/texidocs/specifying-context-with-beatgrouping.texidoc deleted file mode 100644 index ca54068db2..0000000000 --- a/input/texidocs/specifying-context-with-beatgrouping.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " -Mediante la especificación del contexto, el efecto de -@code{beatGrouping} puede limitarse al contexto especificado, y -sobreescribirse los valores establecidos en contextos de niveles más -altos: - -" - doctitlees = "Especificar el contexto con beatGrouping" diff --git a/input/texidocs/stand-alone-two-column-markup.texidoc b/input/texidocs/stand-alone-two-column-markup.texidoc deleted file mode 100644 index 5bd0d8abf4..0000000000 --- a/input/texidocs/stand-alone-two-column-markup.texidoc +++ /dev/null @@ -1,6 +0,0 @@ - texidoces = " -Los textos independientes se pueden disponer en varias columnas -utilizando instrucciones @code{\\markup}: - -" - doctitlees = "Elemento de marcado de texto independiente en dos columnas" diff --git a/input/texidocs/stem-and-beam-behavior-in-tablature.texidoc b/input/texidocs/stem-and-beam-behavior-in-tablature.texidoc deleted file mode 100644 index fb0ee9f4f9..0000000000 --- a/input/texidocs/stem-and-beam-behavior-in-tablature.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - 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 -poner horizontales, como se muestra en este ejemplo. - -" - doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas" - -%% Translation of GIT committish: 3f880f886831b8c72c9e944b3872458c30c6c839 - - texidocfr = " -La direction des hampes se gère dans les tablatures tout comme en -notation traditionnelle. Les ligatures peuvvent être mises à l'horizontale -comme le montre cet exemple. - -" - doctitlefr = "Hampes et ligatures en mode tablature" diff --git a/input/texidocs/string-quartet-template-simple.texidoc b/input/texidocs/string-quartet-template-simple.texidoc deleted file mode 100644 index b6f1b4a185..0000000000 --- a/input/texidocs/string-quartet-template-simple.texidoc +++ /dev/null @@ -1,12 +0,0 @@ - texidoces = " -Esta plantilla muestra un cuarteto de cuerda normal. También utiliza -una sección @code{\\global} para el compás y la armadura - -" - doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" - - texidocde = " -Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier -wird auch eine @qq{@code{\global}}-Variable für Taktart und -Vorzeichen benutzt. -" diff --git a/input/texidocs/string-quartet-template-with-separate-parts.texidoc b/input/texidocs/string-quartet-template-with-separate-parts.texidoc deleted file mode 100644 index 7f6cc68d5f..0000000000 --- a/input/texidocs/string-quartet-template-with-separate-parts.texidoc +++ /dev/null @@ -1,35 +0,0 @@ - texidoces = " -El fragmento de código \"Plantilla de cuarteto de cuerda\" produce un -resultado satisfactorio para el cuarteto, pero ¿y si tenemos que -imprimir las particellas? Esta nueva plantilla muestra cómo usar la -funcionalidad @code{\\tag} (etiqueta) para dividir fácilmente una -pieza en particellas indicviduales. - -Tenemos que dividir esta plantilla en archivos independientes; los -nombres de archivo están dentro de los comentarios al principio de -cada archivo. @code{piece.ly} contiene todas las definiciones de -música. Los otros archivos (@code{score.ly}, @code{vn1.ly}, -@code{vn2.ly}, @code{vla.ly} y @code{vlc.ly}) producen la particella -correspondiente. - -¡No olvide quitar los comentarios que hemos especificado cuando use -los archivos independientes! - -" - doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" - - texidocde = " -Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, -aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel -oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt -voneinander notieren können. Im nächsten Beispiel wird nun -gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen. - -Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen -sind in den Kommentaren am Anfang jeder Datei enthalten. @code{piece.ly} -enthält die Noten. Die anderen Dateien -- @code{score.ly}, -@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly} und -@code{vlc.ly} -- erstellen daraus die entsprechenden Stimmen bzw. die -Partitur (@code{score.ly}). Mit @code{\tag} wird den Stimmen ein Name -zugewiesen, auf den zurückgegriffen werden kann. -" diff --git a/input/texidocs/sub-dividing-beams.texidoc b/input/texidocs/sub-dividing-beams.texidoc deleted file mode 100644 index a7b377dac9..0000000000 --- a/input/texidocs/sub-dividing-beams.texidoc +++ /dev/null @@ -1,17 +0,0 @@ - texidoces = " -Las barras de semicorcheas (o notas más breves) seguidas no se -subdividen de forma predeterminada. Esto es: las tres (o más) -barras se prolongan, sin dividirse, sobre grupos completos de -notas. Este comportamiento se puede modificar para que las barras -se subdividan en subgrupos mediante el establecimiento de la -propiedad @code{subdivideBeams}. Cuando está establecida, las -diversas barras se subdividen a intervalos definidos por el valor -actual de la longitud del pulso @code{beatLength} reduciendo las -barras múltiples a una sola entre los subgrupos. Observe que el -valor predeterminado de @code{beatLength} es de una negra si no -está establecido explícitamente. Se debe establecer al valor de -una fracción que da la duración el subgrupo de barras utilizando -la función @code{make-moment}, como se muestra aquí: - -" - doctitlees = "Subdivisión de las barras de semicorchea" diff --git a/input/texidocs/suppressing-compiler-warnings-when-two-glissandos-intersect.texidoc b/input/texidocs/suppressing-compiler-warnings-when-two-glissandos-intersect.texidoc deleted file mode 100644 index b858583dfc..0000000000 --- a/input/texidocs/suppressing-compiler-warnings-when-two-glissandos-intersect.texidoc +++ /dev/null @@ -1,8 +0,0 @@ - texidoces = " -Cuando dos o más glissandi se cruzan, aparece un mensaje de -advertencia \"se ignoran demasiadas columnas de notas que chocan -entre sí\" al procesar el archivo de LilyPond. He aquí una forma -de evitar este mensaje. - -" - doctitlees = "Suprimir las advertencias del compilador cuando se cruzan dos glissandos" diff --git a/input/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/input/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc deleted file mode 100644 index d011b1b8d3..0000000000 --- a/input/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc +++ /dev/null @@ -1,59 +0,0 @@ -doctitlees = "Transportar música con el menor número de alteraciones" -texidoces = " -Este ejemplo utiliza código de Scheme para forzar las -modificaciones enarmónicas de las notas, y así tener el menor -número de alteraciones accidentales. En este caso se aplican las -siguientes reglas: - -@itemize -@item -Se quitan las dobles alteraciones - -@item -Si sostenido -> Do - -@item -Mi sistenido -> Fa - -@item -Do bemol -> Si - -@item -Fa bemol -> Mi - -@end itemize - -De esta forma se selecciona el mayor número de notas enarmónicas -naturales. - -" - -doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren." - -texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische -Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl -an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die -folgenden Regeln: - -@itemize -@item -Doppelte Versetzungszeichen sollen entfernt werden - -@item -His -> C - -@item -Eis -> F - -@item -Ces -> B - -@item -Fes -> E - -@end itemize - -Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische -Variante gewählt. -" - diff --git a/input/texidocs/tweaking-clef-properties.texidoc b/input/texidocs/tweaking-clef-properties.texidoc deleted file mode 100644 index fe851e2ff6..0000000000 --- a/input/texidocs/tweaking-clef-properties.texidoc +++ /dev/null @@ -1,65 +0,0 @@ - doctitlees = "Trucaje de las propiedades de clave" - texidoces = " -La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de -@code{clefGlyph}, @code{clefPosition} (que controla la posición -vertical de la clave), @code{middleCPosition} y -@code{clefOctavation}. Se imprime una clave cada vez que se -modifica cualquiera de las propiedades excepto -@code{middleCPosition}. - -Observe que la modificación del glifo, la posición de la clave o -su octavación, no cambian 'per se' la posición de las siguientes -notas del pentagrama: para hacer esto también se debe especificar -la posición del Do central. Los parámetros posicionales están en -relación con la tercera línea del pentagrama, los números -positivos desplazan hacia arriba, contando una unidad por cada -línea y espacio. El valor de @code{clefOctavation} se -establecería normalmente a 7, -7, 15 or -15, pero son válidos -otros valores. - -Cuando se produce un cambio de clave en el salto de línea se -imprime la clave nueva tanto al final de la línea anterior como al -principio de la nueva, de forma predeterminada. Si no se necesita -la clave de advertencia al final de la línea anterior, se puede -quitar estableciendo el valor de la propiedad -@code{explicitClefVisibility} de @code{Staff}, a -@code{end-of-line-invisible}. El comportamiento predeterminado se -puede recuperar con @code{\\unset Staff.explicitClefVisibility}. - -Los siguientes ejemplos muestran las posibilidades cuando se -ajustan estas propiedades manualmente. En la primera línea, los -cambios manuales preservan el posicionamiento relativo estándar de -las claves y las notas, pero no lo hacen en la segunda línea. -" - - doctitlede = "Eigenschaften des Schlüssels optimieren" - texidocde = " -Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem -expliziten Setzen der Eigenschaften von @code{clefGlyph}, -@code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt), -@code{middleCPosition} und @code{clefOctavation}. Ein Schlüssel wird -ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich -ändert. - -Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der -Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten -auf dem System: das geschieht nur, wenn auch die Position des -eingestrichenen@tie{}C (middleCPosition) angegeben wird. Die -Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen -positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie -plus Zwischenraum. Der @code{clefOctavation}-Wert ist normalerweise auf 7, --7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig. - -Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue -Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile -ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht -erforderlich ist, kann er unterdrückt werden, indem die -@code{explicitClefVisibility}-Eigenschaft des @code{Staff}-Kontextes auf den -Wert @code{end-of-line-invisible} gesetzt wird. Das Standardverhalten kann -mit @code{\\unset Staff.explicitClefVisibility} wieder hergestellt werden. - -Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese -Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen -Änderungen die ursprüngliche relative Positionierung von Schlüssel und -Noten, auf der zweiten Zeile nicht. -" diff --git a/input/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/input/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc deleted file mode 100644 index 4485333736..0000000000 --- a/input/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Se puede usar el delimitador de comienzo de un sistema -@code{SystemStartSquare} estableciéndolo explícitamente dentro de -un contexto @code{StaffGroup} o @code{ChoirStaffGroup}. - -" - doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas" diff --git a/input/texidocs/using-beatlength-and-beatgrouping.texidoc b/input/texidocs/using-beatlength-and-beatgrouping.texidoc deleted file mode 100644 index cf456b0696..0000000000 --- a/input/texidocs/using-beatlength-and-beatgrouping.texidoc +++ /dev/null @@ -1,11 +0,0 @@ - texidoces = " -La propiedad @code{measureLength} determina dónde se deben insertar -líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo -se deben generar las barras autoomáticas para las duraciones de barra -y compases para los que no hay ninguna regla definida para los finales -de barra. Este ejemplo muestra distintas dormas de controlar el -barrado mediante el establecimiento de estas propiedades. Las -explicaciones están en forma de comentarios dentro del código. - -" - doctitlees = "Utilización de beatLength y beatGrouping" diff --git a/input/texidocs/using-double-slurs-for-legato-chords.texidoc b/input/texidocs/using-double-slurs-for-legato-chords.texidoc deleted file mode 100644 index 4908707a75..0000000000 --- a/input/texidocs/using-double-slurs-for-legato-chords.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Algunos compositores escriben dos ligaduras cuando quieren acordes -legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. - -" - doctitlees = "Utilizar ligaduras dobles para acordes legato" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert -werden. Das kann mit der Eigenschaft @code{doubleSlurs} erreicht werden. - -" - doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen" diff --git a/input/texidocs/using-ties-with-arpeggios.texidoc b/input/texidocs/using-ties-with-arpeggios.texidoc deleted file mode 100644 index 8c4bd89573..0000000000 --- a/input/texidocs/using-ties-with-arpeggios.texidoc +++ /dev/null @@ -1,22 +0,0 @@ - doctitlees = "Uso de ligaduras en los arpegios" - texidoces = " -En ocasiones se usan ligaduras de unión para escribir los arpegios. -En este caso, las dos notas ligadas no tienen que ser consecutivas. -Esto se puede conseguir estableciendo la propiedad -@code{tieWaitForNote} al valor \"verdadero\". La misma funcionalidad -es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero -en principio, también se puede usar para notas normales consecutivas, -como se muestra en este ejemplo. - -" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> - texidocde = " - Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In - diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander. -Das Verhalten kann erreicht werden, indem die @code{tieWaitForNote}-Eigenschaft -auf @code{#t} gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa -ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch -für normale Überbindungen eingesetzt werden -" - doctitlede = "Überbingungen für Arpeggio genutzen" diff --git a/input/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/input/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc deleted file mode 100644 index a948376455..0000000000 --- a/input/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc +++ /dev/null @@ -1,28 +0,0 @@ - texidoces = " -Mediante el establecimiento de la propiedad @code{Y-extent} a un valor -adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e -indicaciones dinámicas textuales) se pueden alinear con un punto de -referencia común, independientemente de sus dimensiones. De esta -manera, todos los elementos estarán alineados verticalmente, -produciendo así un resultado más satisfactorio. - -Se usa una idea similar para alinear las inscripciones de texto a lo -largo de su línea de base. - -" - doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente" - -%% Translation of GIT committish :<6ce7f350682dfa99af97929be1dec6b9f1cbc01a> -texidocde = " -Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt, -können alle @code{DynamicLineSpanner}-Objekte (Crescendo-Klammern und -Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer -wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden. -Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz -sieht ansprechender aus. - -Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer -Grundlinie auszurichten. - -" - doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen" diff --git a/input/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/input/texidocs/vertically-aligning-ossias-and-lyrics.texidoc deleted file mode 100644 index ff259d2d3b..0000000000 --- a/input/texidocs/vertically-aligning-ossias-and-lyrics.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Este fragmento de código muestra el uso de las propiedades de -contexto @code{alignBelowContext} y @code{alignAboveContext} para -controlar la posición de la letra y los compases de ossia. - -" - doctitlees = "Alineación vertical de la letra y los compases de ossia" diff --git a/input/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/input/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc deleted file mode 100644 index 2821f695a3..0000000000 --- a/input/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc +++ /dev/null @@ -1,18 +0,0 @@ - texidoces = " -Esta plantilla añade una reducción de piano automática a la partitura -vocal SATB estándar que se mostró en la \"Plantilla de conjunto -vocal\". Esto presenta uno de los puntos fuertes de LilyPond: podemos -usar una definición de música más de una vez. Si se hace cualquier -cambio en las notas de la parte vocal (digamos @code{tenorMusic}), -entonces los cambios se aplicarán también a la reducción de piano. - -" - doctitlees = "Plantilla de conjunto vocal con reducción de piano automática" - - texidocde = " -In diesem Beispiel wird ein automatischer Klavierauszug zu der -Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond --- man kann eine Variable mehr als einmal benutzen. Wenn Sie -irgendeine Änderung an einer Chorstimme vornehmen, (etwa -tenorMusic), verändert sich auch der Klavierauszug entsprechend. -" diff --git a/input/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/input/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc deleted file mode 100644 index 0942b05210..0000000000 --- a/input/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc +++ /dev/null @@ -1,14 +0,0 @@ - texidoces = " -Esta plantilla es, básicamente, la misma que la sencilla plantilla -\"Conjunto vocal\", excepto que aquí todas las líneas de letra se -colocan utilizando @code{alignAboveContext} y -@code{alignBelowContext}. - -" - doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" - - texidocde = " -In diesem Beispiel werden die Texte mit den Befehlen -@code{alignAboveContext} und @code{alignBelowContext} -über und unter dem System angeordnet. -" diff --git a/input/texidocs/vocal-ensemble-template.texidoc b/input/texidocs/vocal-ensemble-template.texidoc deleted file mode 100644 index 1fb66634a3..0000000000 --- a/input/texidocs/vocal-ensemble-template.texidoc +++ /dev/null @@ -1,16 +0,0 @@ - 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 -todas las partes. Por ejemplo, el compás y la armadura casi siempre -son los mismos para todas. Como en la plantilla \"Himno\", las cuatro -voces se reagrupan en sólo dos pentagramas. - -" - doctitlees = "Plantilla de conjunto vocal" - - texidocde = " -Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren -Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, -die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa -sind fast immer gleich in allen Stimmen. -" diff --git a/input/texidocs/volta-below-chords.texidoc b/input/texidocs/volta-below-chords.texidoc deleted file mode 100644 index 9554f5d73f..0000000000 --- a/input/texidocs/volta-below-chords.texidoc +++ /dev/null @@ -1,7 +0,0 @@ - texidoces = " -Mediante la adición del grabador @code{Volta_engraver} al -pentagrama pertinente, se pueden poner los corchetes de primera y -segunda vez debajo de los acordes. - -" - doctitlees = "Corchetes de primera y segunda vez debajo de los acordes" diff --git a/input/tutorial/GNUmakefile b/input/tutorial/GNUmakefile deleted file mode 100644 index 0213aefb4f..0000000000 --- a/input/tutorial/GNUmakefile +++ /dev/null @@ -1,9 +0,0 @@ -depth = ../.. - -LOCALSTEPMAKE_TEMPLATES=ly mutopia - -EXTRA_DIST_FILES= lbook-texi-test.texi lbook-latex-test.tex lbook-html-test.html - -include $(depth)/make/stepmake.make - - diff --git a/input/tutorial/lbook-html-test.html b/input/tutorial/lbook-html-test.html deleted file mode 100644 index 0a64062447..0000000000 --- a/input/tutorial/lbook-html-test.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - -

    -Documents for lilypond-book may freely mix music and text. For -example, - -\relative { - c2^"test" g'2 \times 2/3 { f8 e d } c'2 g4 -} - - - - c'4 f16 - - -

    - -

    - Other languages: English. -
    - Using automatic language selection. -

    - diff --git a/input/tutorial/lbook-latex-test.tex b/input/tutorial/lbook-latex-test.tex deleted file mode 100644 index badee25b83..0000000000 --- a/input/tutorial/lbook-latex-test.tex +++ /dev/null @@ -1,48 +0,0 @@ -\documentclass[a4paper]{article} - -\begin{document} - -Documents for lilypond-book may freely mix music and text. For -example, - -\begin{lilypond} -\relative { - c2^"test" g'2 \times 2/3 { f8 e d } c'2 g4 -} -\end{lilypond} - -Options are put in brackets. - -\begin[fragment,quote,staffsize=26,verbatim]{lilypond} - c'4 f16 -\end{lilypond} - -Larger examples can be put in a separate file, and introduced with -\verb+\lilypondfile+. - -%\lilypondfile[quote,noindent]{screech-boink.ly} - - - -The line length of a \LaTeX{} document matches the length of music -fragment: bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla -bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla -bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla -bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla -bla bla bla bla bla bla - -\begin{lilypond} -{ -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' -} -\end{lilypond} - - -\end{document} diff --git a/input/tutorial/lbook-texi-test.texi b/input/tutorial/lbook-texi-test.texi deleted file mode 100644 index 69209999c2..0000000000 --- a/input/tutorial/lbook-texi-test.texi +++ /dev/null @@ -1,34 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@setfilename lilbook.info -@settitle lilypond-book test -@node Top, , , -@top - -@chapter lilypond-book test - -@section Introduction - -Blah blah blah Blah blah blah Blah blah blah Blah blah blah Blah blah -blah - -Fragment: - - -@lilypond -\relative { - c2 g'2^"test" \times 2/3 { f8 e d } c'2 g4 -} -@end lilypond - - -Bla bla blah - -This is a multipage / multipicture fragment: - -@lilypond -\book { - \score { { c1 \break \pageBreak c1 } } -} -@end lilypond - -@bye diff --git a/input/twinkle-pop.ly b/input/twinkle-pop.ly deleted file mode 100644 index 6e261127ba..0000000000 --- a/input/twinkle-pop.ly +++ /dev/null @@ -1,67 +0,0 @@ -\version "2.12.0" -\header{ - filename = "twinkle-pop.ly" - composer = "traditional" - enteredby = "HWN, chords by Johan Vromans" - copyright = "public domain" -} - - -melodie = \relative c'' { - \clef "violin" - \time 2/4 - - | c4 c | g' g | a a | g2 - | f4 f | e e | d d | c2 - | g'4 g | f f | e e | d d - | g g | f f | e e | d d - %% copy 1-8 - | c4 c | g' g | a a | g2 - | f4 f | e e | d d | c2 \bar "|." -} - -acc = \chords { - c2 c f c - f c g:7 c - g f c g:7 - g f c g:7 - %% copy 1-8 - c2 c f c - f c g:7 c -} - -text = \lyrics { - \override LyricText #'font-shape = #'italic - - Ah!4 vous dir -- ai -- je ma man2 - Ce4 qui cau -- se mon tour -- ment2 - Pa4 -- pa veut que je rai -- so -- nne - Comme4 un -- e grand -- e per -- so -- nne - Moi4 je dis que les bon -- bons2 - Val4 -- ent mieux que la rai -- son2 - -} - -\score { - << - \acc - \new Staff = "melody" \melodie - \text - >> - \header{ - title = "Ah, vous dirais-je, maman " - } - \layout { } -} - -\score { - << - \context ChordNames \transpose c d\acc - \context Staff = "melody" \transpose c d\melodie - \context Lyrics \text - >> - \header{ - piece = \markup { "clarinet in B" \flat } - } - \layout { } -} diff --git a/input/wilhelmus.ly b/input/wilhelmus.ly deleted file mode 100644 index 411ed3c7b5..0000000000 --- a/input/wilhelmus.ly +++ /dev/null @@ -1,179 +0,0 @@ -\version "2.12.0" - -\header { - texidoc = "Wilhelmus van Nassouwe" - title = "Wilhelmus van Nassouwe" - composer = "Valerius" - subtitle = "Neder-landtsche gedenck-clanck" - opus = "1626" - copyright = "public domain" - enteredby = "janneke@gnu.org" -} - -%% hymn tricks -noclefs = { - s1 - \override Staff.Clef #'break-visibility = - #all-invisible -} - -setMargins = { - %% \context Staff \applyContext #(set-extra-space 'TimeSignature - %% 'first-note -> extra-space 4.5 - - \override Staff.TimeSignature #'space-alist #'first-note = #'(extra-space . 9.5) - \override Staff.KeySignature #'space-alist #'staff-bar = #'(extra-space . 15) - \override Score.LeftEdge #'space-alist #'key-signature = #'(extra-space . 1) - -} - -pipeSymbol = { - %% Set height of bar line to 2 staff-spaces - \once \override Staff.BarLine #'bar-size = #2 - %% Move barline one staff-space up - \once \override Staff.BarLine #'extra-offset = #'(0 . 1) - \bar "|" -} - -myBreak = { \bar "" \break } - -\layout { - indent = 0.0\mm - line-width = 120.0\mm - textheight = 270.0\mm -} - -voice = \relative c' { - \clef violin - \key g \major - d4 | g g a a b | a8 \myBreak - b8 | c4 b a a | g2. \myBreak - - d4 | g g a a | b a8 \myBreak - b8 | c4 b a a| g2. \myBreak - - %% Hack for better left tekst margin - %% b8[ c] | d2 e4 d2 c4 | b a8 \myBreak - \set melismaBusyProperties = #'() - b8[ c] | - \unset melismaBusyProperties - d2 e4 d2 c4 b | a8 \myBreak - b8 | c4 b a g | a2. \myBreak - - d,4 | g4.\melisma a8\melismaEnd b2 a2 g4 | fis e8 \myBreak - d8 | e4 g g fis | - - \override NoteHead #'style = #'neomensural - - g\breve - - %% justified lines: - %%\override Staff.BarLine #'extra-offset = #'(12 . 0) - %% ragged-right: - \override Staff.BarLine #'extra-offset = #'(23 . 0) - \bar "|." -} - -stich = \relative c'' { - \override Staff.NoteCollision #'merge-differently-dotted = ##t - \set fontSize = #-3 - \override Stem #'length-fraction = #(magstep -3) - - \voiceTwo - \partial 4 - s4 s s a8[ b] c[ a] s4. - s8 s4 s a8 g s4 s2. - - s4 s s a8[ b] c[ a] s4. - s8 s4 s a8 g s4 s2. - - s8 s s2 s4 s2 s4 s s8 - s8 s4 s s s s2. - - s4 g8[ fis g a] s2 s2 s4 s s8 - s8 e8[ fis] -} - -modernText = \lyricmode { - Wil -- hel -- mus van Nas -- sou -- we - ben ik van duit -- sen bloed, - - den va -- der -- land ge -- trou -- we - blijf ik tot in den dood. - - Een prin -- se van O -- ran -- je - ben ik vrij on -- ver -- veerd, - - den ko -- ning van His -- pan -- je - heb ik al -- tijd ge -- eerd. -} - -text = \lyricmode { - Wil -- hel -- mus van Nas -- sou -- we - Ben ick van duyt -- schen bloet, - Den Va -- der -- landt ghe -- trou -- we, - blyf ick tot in den doot! - %% Hack for better left text margin: - %% Een Prin -- ce van O -- ran -- gien - Een " " Prin -- ce van O -- ran -- gien - Ben ick, vry, on -- ver -- veert; - Den Co -- ninck van His -- pan -- gien - Heb ick al -- tijt ghe -- eert. -} - -oneHalfNoteTime = \markup { - \override #'(baseline-skip . 0) - \column { - \line { \number "1" } - \line { \smaller \smaller \note #"2" #-0.6 } - } -} - -\layout { - ragged-right = ##t - - \context { - \Score - %% defaults - %% (shortest-duration-space . 2.0) - %% (spacing-increment . 1.2) - %% (base-shortest-duration . ,(ly:make-moment 1 8)) - %% wider spacing - \override SpacingSpanner #'shortest-duration-space = #3.0 - \override SpacingSpanner #'spacing-increment = #1.2 - \override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 1 8) - } -} - -\score { - \context Score << - \context Staff << - \override Staff.StaffSymbol #'width = #'80 - \set Staff.autoBeaming = ##f - \set Score.timing = ##f - \setMargins - - %% Less vertical space needed with lyrics - \override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(2 . 2) - - %% Custom time signature - \override Staff.TimeSignature #'stencil = #ly:text-interface::print - \override Staff.TimeSignature #'text = #oneHalfNoteTime - \override Staff.TimeSignature #'style = #'() - \noclefs - - \new Voice = "voice" \voice - \new Voice = "stich" \stich - >> - \lyricsto "voice" \new Lyrics { - \override VerticalAxisGroup #'minimum-Y-extent = #'(2 . 2) - \text - } - >> - \layout {} - \midi {} -} - -%%% Local variables: -%%% LilyPond-indent-level:2 -%%% End: diff --git a/input/xiao-haizi-guai-guai.ly b/input/xiao-haizi-guai-guai.ly deleted file mode 100644 index 4fb107d344..0000000000 --- a/input/xiao-haizi-guai-guai.ly +++ /dev/null @@ -1,42 +0,0 @@ -%% xiao-haizi-guai-guai.ly -%% -%% (xiao3: small, -%% hai2zi5: child, -%% guai1-guai1: well-behaved) - -\version "2.12.0" - -\header { - title = "小孩子乖乖" - subtitle = "(Xiao3 hai2zi5 guai1 guai1)" -} - -<< - \relative c'' { - %% Beams are melismata, no autobeams. - \set Staff.autoBeaming = ##f - - | g4 c8 a g4 g - | e4 g8 a g4 g - | a4 g8 e d4 d - | e4 g8[ e] d[ e] c4 - - | a'8 g a g e a g4 - | e8 g e d c4 r - | a8 c d e c4 r \bar "|." - } - \addlyrics { - 小 å­© 子 乖 乖 - 把 門 兒 開 開 - å¿« 點 兒 開 開 - 我 要 進 來 - - 不 開 不 開 不 能 開 - ä½  是 大 野 狼 - 不 讓 ä½  進 來 - } ->> - -%%% Local Variables: -%%% coding: utf-8 -%%% End: diff --git a/lily/GNUmakefile b/lily/GNUmakefile index 508020c039..4056eefb93 100644 --- a/lily/GNUmakefile +++ b/lily/GNUmakefile @@ -37,15 +37,15 @@ O_FILES += $(outdir)/lilypond.rc.o $(outdir)/lilypond: $(outdir)/lilypond.rc.o $(outdir)/lilypond.rc.o: $(outdir)/lilypond.ico $(outdir)/ly.ico -$(top-build-dir)/Documentation/pictures/$(outbase)/lilypond.ico: - $(MAKE) -C $(top-build-dir)/Documentation/pictures +$(top-build-dir)/Documentation/logo/$(outbase)/lilypond.ico: + $(MAKE) -C $(top-build-dir)/Documentation/logo -$(outdir)/lilypond.ico: $(top-build-dir)/Documentation/pictures/$(outbase)/lilypond.ico +$(outdir)/lilypond.ico: $(top-build-dir)/Documentation/logo/$(outbase)/lilypond.ico cp $< $@ -$(top-build-dir)/Documentation/pictures/$(outbase)/ly.ico: - $(MAKE) -C $(top-build-dir)/Documentation/pictures +$(top-build-dir)/Documentation/logo/$(outbase)/ly.ico: + $(MAKE) -C $(top-build-dir)/Documentation/logo -$(outdir)/ly.ico: $(top-build-dir)/Documentation/pictures/$(outbase)/ly.ico +$(outdir)/ly.ico: $(top-build-dir)/Documentation/logo/$(outbase)/ly.ico cp $< $@ endif @@ -57,7 +57,7 @@ default: $(outdir)/libstdc++.a: rm -f $@ - ln -s `$(CXX) -print-file-name=libstdc++.a` $(outdir)/ + ln -s `$(CXX) -print-file-name=libstdc++.a` $(outdir) ifeq ($(LINK_GXX_STATICALLY),yes) $(outdir)/lilypond: $(outdir)/libstdc++.a diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index f84e281d48..9bd02ee828 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -1,10 +1,21 @@ /* - accidental-engraver.cc -- implement Accidental_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Modified 2001--2002 by Rune Zedeler + + 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 . */ #include "accidental-placement.hh" @@ -69,7 +80,7 @@ protected: void stop_translation_timestep (); void process_acknowledged (); - + virtual void finalize (); virtual void derived_mark () const; @@ -234,8 +245,8 @@ Accidental_engraver::process_acknowledged () bool cautionary = to_boolean (note->get_property ("cautionary")); if (caut.score () > acc.score ()) { - acc.need_acc |= caut.need_acc; - acc.need_restore |= caut.need_restore; + acc.need_acc |= caut.need_acc; + acc.need_restore |= caut.need_restore; cautionary = true; } @@ -250,7 +261,7 @@ Accidental_engraver::process_acknowledged () */ if (!note->in_event_class ("trill-span-event")) { - if (acc.need_acc) + if (acc.need_acc) create_accidental (&accidentals_[i], acc.need_restore, cautionary); if (forced || cautionary) @@ -321,7 +332,7 @@ Accidental_engraver::make_standard_accidental (Stream_event * /* note */, Accidental_placement::add_accidental (accidental_placement_, a); note_head->set_object ("accidental-grob", a->self_scm ()); - + return a; } @@ -366,7 +377,7 @@ Accidental_engraver::stop_translation_timestep () } for (vsize i = accidentals_.size (); i--;) - { + { Stream_event *note = accidentals_[i].melodic_; Context *origin = accidentals_[i].origin_; @@ -404,7 +415,7 @@ Accidental_engraver::stop_translation_timestep () else { /* - not really really correct if there is more than one + not really correct if there is more than one note head with the same notename. */ localsig = ly_assoc_prepend_x (localsig, key, @@ -426,6 +437,7 @@ Accidental_engraver::stop_translation_timestep () accidental_placement_ = 0; accidentals_.clear (); + note_columns_.clear (); left_objects_.clear (); right_objects_.clear (); } diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index 02f0a2a609..4a535c7857 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -1,26 +1,36 @@ /* - accidental-placement.cc -- implement Accidental_placement + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys -*/ + 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 . +*/ #include "accidental-placement.hh" -#include "item.hh" -#include "rhythmic-head.hh" #include "accidental-interface.hh" +#include "item.hh" #include "music.hh" #include "note-collision.hh" #include "note-column.hh" #include "pointer-group-interface.hh" +#include "rhythmic-head.hh" #include "skyline.hh" #include "stream-event.hh" #include "warn.hh" -static Pitch* +static Pitch * accidental_pitch (Grob *acc) { SCM cause = acc->get_parent (Y_AXIS)->get_property ("cause"); @@ -66,8 +76,8 @@ Accidental_placement::add_accidental (Grob *me, Grob *a) */ void Accidental_placement::split_accidentals (Grob *accs, - vector *break_reminder, - vector *real_acc) + vector *break_reminder, + vector *real_acc) { for (SCM acs = accs->get_object ("accidental-grobs"); scm_is_pair (acs); acs = scm_cdr (acs)) @@ -83,18 +93,18 @@ Accidental_placement::split_accidentals (Grob *accs, } } -vector -Accidental_placement::get_relevant_accidentals (vector const &elts, Grob *left) +vector +Accidental_placement::get_relevant_accidentals (vector const &elts, Grob *left) { - vector br; - vector ra; - vector ret; + vector br; + vector ra; + vector ret; bool right = dynamic_cast (left)->break_status_dir () == RIGHT; for (vsize i = 0; i < elts.size (); i++) { split_accidentals (elts[i], &br, &ra); - + ret.insert (ret.end (), ra.begin (), ra.end ()); if (right) @@ -109,7 +119,7 @@ struct Accidental_placement_entry Skyline right_skyline_; Interval vertical_extent_; vector extents_; - vector grobs_; + vector grobs_; }; Real ape_priority (Accidental_placement_entry const *a) @@ -161,15 +171,15 @@ acc_less (Grob *const &a, Grob *const &b) /* TODO: should favor - b - b + * b + * b placement */ void -stagger_apes (vector *apes) +stagger_apes (vector *apes) { - vector asc = *apes; + vector asc = *apes; vector_sort (asc, &ape_less); @@ -194,10 +204,10 @@ stagger_apes (vector *apes) reverse (*apes); } -static vector +static vector build_apes (SCM accs) { - vector apes; + vector apes; for (SCM s = accs; scm_is_pair (s); s = scm_cdr (s)) { Accidental_placement_entry *ape = new Accidental_placement_entry; @@ -213,9 +223,9 @@ build_apes (SCM accs) static void set_ape_skylines (Accidental_placement_entry *ape, - Grob **common) + Grob **common, Real padding) { - vector accs (ape->grobs_); + vector accs (ape->grobs_); vector_sort (accs, &acc_less); /* We know that each accidental has the same note name and we assume that @@ -238,7 +248,7 @@ set_ape_skylines (Accidental_placement_entry *ape, if (i == accs.size () - 1 || p->get_octave () != last_octave) { last_offset = 0; - offset = a->extent (a, X_AXIS)[LEFT] - 0.2; + offset = a->extent (a, X_AXIS)[LEFT] - padding; } else if (p->get_alteration () == last_alteration) a->translate_axis (last_offset, X_AXIS); @@ -247,9 +257,8 @@ set_ape_skylines (Accidental_placement_entry *ape, Real this_offset = offset - a->extent (a, X_AXIS)[RIGHT]; a->translate_axis (this_offset, X_AXIS); - /* FIXME: read the padding from the AccidentalPlacement grob */ last_offset = this_offset; - offset -= a->extent (a, X_AXIS).length () + 0.2; + offset -= a->extent (a, X_AXIS).length () + padding; } vector boxes = Accidental_interface::accurate_boxes (a, common); @@ -265,11 +274,11 @@ set_ape_skylines (Accidental_placement_entry *ape, ape->right_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, RIGHT); } -static vector -extract_heads_and_stems (vector const &apes) +static vector +extract_heads_and_stems (vector const &apes) { - vector note_cols; - vector ret; + vector note_cols; + vector ret; for (vsize i = apes.size (); i--;) { @@ -310,14 +319,13 @@ extract_heads_and_stems (vector const &apes) if (Grob *s = Rhythmic_head::get_stem (ret[i])) ret.push_back (s); - - vector_sort (ret, less ()); + vector_sort (ret, less ()); uniq (ret); return ret; } -static Grob* -common_refpoint_of_accidentals (vector const &apes, Axis a) +static Grob * +common_refpoint_of_accidentals (vector const &apes, Axis a) { Grob *ret = 0; @@ -334,7 +342,7 @@ common_refpoint_of_accidentals (vector const &apes, } static Skyline -build_heads_skyline (vector const &heads_and_stems, +build_heads_skyline (vector const &heads_and_stems, Grob **common) { vector head_extents; @@ -351,13 +359,13 @@ build_heads_skyline (vector const &heads_and_stems, */ static Interval position_apes (Grob *me, - vector const &apes, + vector const &apes, Skyline const &heads_skyline) { Real padding = robust_scm2double (me->get_property ("padding"), 0.2); Skyline left_skyline = heads_skyline; left_skyline.raise (-robust_scm2double (me->get_property ("right-padding"), 0)); - + /* Add accs entries right-to-left. */ @@ -391,7 +399,6 @@ position_apes (Grob *me, return width; } - /* This routine computes placements of accidentals. During add_accidental (), accidentals are already grouped by note, so that @@ -404,12 +411,11 @@ position_apes (Grob *me, TODO: more advanced placement. Typically, the accs should be placed to form a C shape, like this - - ## - b b - # # - b - b b + * ## + * b b + * # # + * b + * b b The naturals should be left of the C as well; they should be separate accs. @@ -442,23 +448,24 @@ Accidental_placement::calc_positioning_done (SCM smob) return SCM_BOOL_T; me->set_property ("positioning-done", SCM_BOOL_T); - + SCM accs = me->get_object ("accidental-grobs"); if (!scm_is_pair (accs)) return SCM_BOOL_T; - vector apes = build_apes (accs); + vector apes = build_apes (accs); Grob *common[] = {me, 0}; - vector heads_and_stems = extract_heads_and_stems (apes); + vector heads_and_stems = extract_heads_and_stems (apes); common[Y_AXIS] = common_refpoint_of_accidentals (apes, Y_AXIS); common[Y_AXIS] = common_refpoint_of_array (heads_and_stems, common[Y_AXIS], Y_AXIS); common[X_AXIS] = common_refpoint_of_array (heads_and_stems, me, X_AXIS); + Real padding = robust_scm2double (me->get_property ("padding"), 0.2); for (vsize i = apes.size (); i--;) - set_ape_skylines (apes[i], common); + set_ape_skylines (apes[i], common, padding); Skyline heads_skyline = build_heads_skyline (heads_and_stems, common); stagger_apes (&apes); @@ -478,9 +485,8 @@ ADD_INTERFACE (Accidental_placement, /* properties */ "accidental-grobs " "direction " - "left-padding " "padding " "positioning-done " "right-padding " "script-priority " - ) + ); diff --git a/lily/accidental.cc b/lily/accidental.cc index 0e81a6bea2..bee99c641d 100644 --- a/lily/accidental.cc +++ b/lily/accidental.cc @@ -1,9 +1,20 @@ /* - accidental.cc -- implement Accidental_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "accidental-interface.hh" @@ -67,7 +78,8 @@ Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM) if (to_boolean (me->get_property ("forced")) || !unsmob_grob (me->get_object ("tie")) - || rank == start + 1) /* we are at the start of a line */ + || (rank == start + 1 && /* we are at the start of a line */ + !to_boolean (me->get_property ("hide-tied-accidental-after-break")))) { Stencil *s = unsmob_stencil (get_stencil (me)); if (s) @@ -163,8 +175,9 @@ Accidental_interface::print (SCM smob) Grob *me = unsmob_grob (smob); Grob *tie = unsmob_grob (me->get_object ("tie")); - if (tie && !tie->original () - && !to_boolean (me->get_property ("forced"))) + if (tie && + (to_boolean (me->get_property ("hide-tied-accidental-after-break")) + || (!tie->original () && !to_boolean (me->get_property ("forced"))))) { me->suicide (); return SCM_EOL; @@ -218,8 +231,9 @@ ADD_INTERFACE (Accidental_interface, "alteration " "avoid-slur " "forced " + "glyph-name-alist " + "hide-tied-accidental-after-break " "parenthesized " "restore-first " - "glyph-name-alist " "tie " ); diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 216323644f..2fd49f5162 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -1,9 +1,20 @@ /* - align-interface.cc -- implement Align_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "align-interface.hh" @@ -12,6 +23,8 @@ #include "hara-kiri-group-spanner.hh" #include "international.hh" #include "item.hh" +#include "page-layout-problem.hh" +#include "paper-book.hh" #include "paper-column.hh" #include "pointer-group-interface.hh" #include "spanner.hh" @@ -19,16 +32,10 @@ #include "system.hh" #include "warn.hh" -/* - TODO: for vertical spacing, should also include a rod & spring - scheme of sorts into this: the alignment should default to a certain - distance between element refpoints, unless bbox force a bigger - distance. - */ -MAKE_SCHEME_CALLBACK (Align_interface, calc_positioning_done, 1); +MAKE_SCHEME_CALLBACK (Align_interface, align_to_minimum_distances, 1); SCM -Align_interface::calc_positioning_done (SCM smob) +Align_interface::align_to_minimum_distances (SCM smob) { Grob *me = unsmob_grob (smob); @@ -37,53 +44,30 @@ Align_interface::calc_positioning_done (SCM smob) SCM axis = scm_car (me->get_property ("axes")); Axis ax = Axis (scm_to_int (axis)); - Align_interface::align_elements_to_extents (me, ax); + Align_interface::align_elements_to_minimum_distances (me, ax); return SCM_BOOL_T; } -/* - TODO: This belongs to the old two-pass spacing. Delete me. -*/ -MAKE_SCHEME_CALLBACK (Align_interface, stretch_after_break, 1) +MAKE_SCHEME_CALLBACK (Align_interface, align_to_ideal_distances, 1); SCM -Align_interface::stretch_after_break (SCM grob) +Align_interface::align_to_ideal_distances (SCM smob) { - Grob *me = unsmob_grob (grob); + Grob *me = unsmob_grob (smob); - Spanner *me_spanner = dynamic_cast (me); - extract_grob_set (me, "elements", elems); + me->set_property ("positioning-done", SCM_BOOL_T); - if (me_spanner && elems.size ()) - { - Grob *common = common_refpoint_of_array (elems, me, Y_AXIS); - - /* force position callbacks */ - for (vsize i = 0; i < elems.size (); i++) - elems[i]->relative_coordinate (common, Y_AXIS); - - SCM details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details"); - SCM extra_space_handle = scm_assoc (ly_symbol2scm ("fixed-alignment-extra-space"), details); - - Real extra_space = robust_scm2double (scm_is_pair (extra_space_handle) - ? scm_cdr (extra_space_handle) - : SCM_EOL, - 0.0); - - Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"), - DOWN); - Real delta = extra_space / elems.size () * stacking_dir; - for (vsize i = 0; i < elems.size (); i++) - elems[i]->translate_axis (i * delta, Y_AXIS); - } - - return SCM_UNSPECIFIED; + Align_interface::align_elements_to_ideal_distances (me); + + return SCM_BOOL_T; } /* for each grob, find its upper and lower skylines. If the grob has an empty extent, delete it from the list instead. If the extent is non-empty but there is no skyline available (or pure is true), just create a flat skyline from the bounding box */ +// TODO(jneem): the pure and non-pure parts seem to share very little +// code. Split them into 2 functions, perhaps? static void get_skylines (Grob *me, vector *const elements, @@ -106,23 +90,6 @@ get_skylines (Grob *me, if (skys) skylines = *skys; - /* this is perhaps an abuse of minimum-?-extent: maybe we should create - another property? But it seems that the only (current) use of - minimum-Y-extent is to separate vertically-aligned elements */ - SCM min_extent = g->get_property (a == X_AXIS - ? ly_symbol2scm ("minimum-X-extent") - : ly_symbol2scm ("minimum-Y-extent")); - - if (is_number_pair (min_extent)) - { - Box b; - Interval other_extent = g->extent (other_common, other_axis (a)); - b[a] = ly_scm2interval (min_extent); - b[other_axis (a)] = other_extent; - if (!other_extent.is_empty ()) - skylines.insert (b, 0, other_axis (a)); - } - /* This skyline was calculated relative to the grob g. In order to compare it to skylines belonging to other grobs, we need to shift it so that it is relative to the common reference. */ @@ -133,11 +100,37 @@ get_skylines (Grob *me, { assert (a == Y_AXIS); Interval extent = g->pure_height (g, start, end); + + // This is a hack to get better accuracy on the pure-height of VerticalAlignment. + // It's quite common for a treble clef to be the highest element of one system + // and for a low note (or lyrics) to be the lowest note on another. The two will + // never collide, but the pure-height stuff only works with bounding boxes, so it + // doesn't know that. The result is a significant over-estimation of the pure-height, + // especially on systems with many staves. To correct for this, we build a skyline + // in two parts: the part we did above contains most of the grobs (note-heads, etc.) + // while the bit we're about to do only contains the breakable grobs at the beginning + // of the system. This way, the tall treble clefs are only compared with the treble + // clefs of the other staff and they will be ignored if the staff above is, for example, + // lyrics. + if (Axis_group_interface::has_interface (g) + && !Hara_kiri_group_spanner::request_suicide (g, start, end)) + { + extent = Axis_group_interface::rest_of_line_pure_height (g, start, end); + Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start); + if (!begin_of_line_extent.is_empty ()) + { + Box b; + b[a] = begin_of_line_extent; + b[other_axis (a)] = Interval (-infinity_f, -1); + skylines.insert (b, 0, other_axis (a)); + } + } + if (!extent.is_empty ()) { Box b; b[a] = extent; - b[other_axis (a)] = Interval (-infinity_f, infinity_f); + b[other_axis (a)] = Interval (0, infinity_f); skylines.insert (b, 0, other_axis (a)); } } @@ -151,76 +144,130 @@ get_skylines (Grob *me, } vector -Align_interface::get_extents_aligned_translates (Grob *me, - vector const &all_grobs, - Axis a, - bool pure, int start, int end) +Align_interface::get_minimum_translations (Grob *me, + vector const &all_grobs, + Axis a) { - Spanner *me_spanner = dynamic_cast (me); + return internal_get_minimum_translations (me, all_grobs, a, true, false, 0, 0); +} +vector +Align_interface::get_pure_minimum_translations (Grob *me, + vector const &all_grobs, + Axis a, int start, int end) +{ + return internal_get_minimum_translations (me, all_grobs, a, true, true, start, end); +} - SCM line_break_details = SCM_EOL; - if (a == Y_AXIS && me_spanner) - { - if (pure) - line_break_details = get_root_system (me)->column (start)->get_property ("line-break-system-details"); - else - line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details"); +vector +Align_interface::get_minimum_translations_without_min_dist (Grob *me, + vector const &all_grobs, + Axis a) +{ + return internal_get_minimum_translations (me, all_grobs, a, false, false, 0, 0); +} - if (!me->get_system () && !pure) - me->programming_error ("vertical alignment called before line-breaking"); - } +// If include_fixed_spacing is false, the only constraints that will be measured +// here are those that result from collisions (+ padding) and minimum-distance +// between adjacent staves. +// If include_fixed_spacing is true, constraints from line-break-system-details, +// basic-distance+stretchable=0, and staff-staff-spacing of spaceable staves +// with loose lines in between, are included as well. +// - If you want to find the minimum height of a system, include_fixed_spacing should be true. +// - If you're going to actually lay out the page, then it should be false (or +// else centered dynamics will break when there is a fixed alignment). +vector +Align_interface::internal_get_minimum_translations (Grob *me, + vector const &all_grobs, + Axis a, + bool include_fixed_spacing, + bool pure, int start, int end) +{ + if (!pure && a == Y_AXIS && dynamic_cast (me) && !me->get_system ()) + me->programming_error ("vertical alignment called before line-breaking"); + + // If include_fixed_spacing is true, we look at things like system-system-spacing + // and alignment-distances, which only make sense for the toplevel VerticalAlignment. + // If we aren't toplevel, we're working on something like BassFigureAlignment + // and so we definitely don't want to include alignment-distances! + if (!dynamic_cast (me->get_parent (Y_AXIS))) + include_fixed_spacing = false; Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"), DOWN); - vector elems (all_grobs); // writable copy vector skylines; get_skylines (me, &elems, a, pure, start, end, &skylines); Real where = 0; - /* TODO: extra-space stuff belongs to two-pass spacing. Delete me */ - SCM extra_space_handle = scm_assq (ly_symbol2scm ("alignment-extra-space"), line_break_details); - Real extra_space = robust_scm2double (scm_is_pair (extra_space_handle) - ? scm_cdr (extra_space_handle) - : SCM_EOL, - 0.0); - - Real padding = robust_scm2double (me->get_property ("padding"), 0.0); + Real default_padding = robust_scm2double (me->get_property ("padding"), 0.0); vector translates; Skyline down_skyline (stacking_dir); + Real last_spaceable_element_pos = 0; + Grob *last_spaceable_element = 0; + Skyline last_spaceable_skyline (stacking_dir); + int spaceable_count = 0; for (vsize j = 0; j < elems.size (); j++) { Real dy = 0; + Real padding = default_padding; + if (j == 0) - dy = skylines[j][-stacking_dir].max_height (); + dy = skylines[j][-stacking_dir].max_height () + padding; else { - down_skyline.merge (skylines[j-1][stacking_dir]); - dy = down_skyline.distance (skylines[j][-stacking_dir]); + SCM spec = Page_layout_problem::get_spacing_spec (elems[j-1], elems[j], pure, start, end); + Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding")); + + dy = down_skyline.distance (skylines[j][-stacking_dir]) + padding; + + Real min_distance = 0; + 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 + // constraints coming from the previous spaceable staff + // as well as from the previous staff. + spec = Page_layout_problem::get_spacing_spec (last_spaceable_element, elems[j], pure, start, end); + Real spaceable_padding = 0; + Page_layout_problem::read_spacing_spec (spec, + &spaceable_padding, + ly_symbol2scm ("padding")); + dy = max(dy, (last_spaceable_skyline.distance (skylines[j][-stacking_dir]) + + stacking_dir*(last_spaceable_element_pos - where) + spaceable_padding)); + + Real spaceable_min_distance = 0; + if (Page_layout_problem::read_spacing_spec (spec, + &spaceable_min_distance, + ly_symbol2scm ("minimum-distance"))) + dy = max (dy, spaceable_min_distance + stacking_dir*(last_spaceable_element_pos - where)); + + dy = max (dy, Page_layout_problem::get_fixed_spacing (last_spaceable_element, elems[j], spaceable_count, + pure, start, end)); + } } if (isinf (dy)) /* if the skyline is empty, maybe max_height is infinity_f */ dy = 0.0; - dy = max (0.0, dy + padding + extra_space / elems.size ()); + dy = max (0.0, dy); down_skyline.raise (-stacking_dir * dy); + down_skyline.merge (skylines[j][stacking_dir]); where += stacking_dir * dy; translates.push_back (where); - } - SCM offsets_handle = scm_assq (ly_symbol2scm ("alignment-offsets"), - line_break_details); - if (scm_is_pair (offsets_handle)) - { - vsize i = 0; - - for (SCM s = scm_cdr (offsets_handle); - scm_is_pair (s) && i < translates.size (); s = scm_cdr (s), i++) + if (Page_layout_problem::is_spaceable (elems[j])) { - if (scm_is_number (scm_car (s))) - translates[i] = scm_to_double (scm_car (s)); + spaceable_count++; + last_spaceable_element = elems[j]; + last_spaceable_element_pos = where; + last_spaceable_skyline = down_skyline; } } @@ -242,69 +289,45 @@ Align_interface::get_extents_aligned_translates (Grob *me, } void -Align_interface::align_elements_to_extents (Grob *me, Axis a) +Align_interface::align_elements_to_ideal_distances (Grob *me) +{ + System *sys = me->get_system (); + if (sys) + { + Page_layout_problem layout (NULL, SCM_EOL, scm_list_1 (sys->self_scm ())); + layout.solution (true); + } + else + programming_error ("vertical alignment called before line breaking"); +} + +void +Align_interface::align_elements_to_minimum_distances (Grob *me, Axis a) { extract_grob_set (me, "elements", all_grobs); - vector translates = get_extents_aligned_translates (me, all_grobs, a, false, 0, 0); + vector translates = get_minimum_translations (me, all_grobs, a); if (translates.size ()) for (vsize j = 0; j < all_grobs.size (); j++) all_grobs[j]->translate_axis (translates[j], a); } -/* After we have already determined the y-offsets of our children, we may still - want to stretch them a little. */ -void -Align_interface::stretch (Grob *me, Real amount, Axis a) -{ - extract_grob_set (me, "elements", elts); - Real non_empty_elts = stretchable_children_count (me); - Real offset = 0.0; - Direction dir = robust_scm2dir (me->get_property ("stacking-dir"), DOWN); - for (vsize i = 1; i < elts.size (); i++) - { - if (!elts[i]->extent (me, a).is_empty () - && !to_boolean (elts[i]->get_property ("keep-fixed-while-stretching"))) - offset += amount / non_empty_elts; - elts[i]->translate_axis (dir * offset, a); - } - me->flush_extent_cache (Y_AXIS); -} - Real Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, int end) { extract_grob_set (me, "elements", all_grobs); - SCM dy_scm = me->get_property ("forced-distance"); + vector translates = get_pure_minimum_translations (me, all_grobs, Y_AXIS, start, end); - if (scm_is_number (dy_scm)) + if (translates.size ()) { - Real dy = scm_to_double (dy_scm) * robust_scm2dir (me->get_property ("stacking-dir"), DOWN); - Real pos = 0; for (vsize i = 0; i < all_grobs.size (); i++) - { - if (all_grobs[i] == ch) - return pos; - if (!Hara_kiri_group_spanner::has_interface (all_grobs[i]) - || !Hara_kiri_group_spanner::request_suicide (all_grobs[i], start, end)) - pos += dy; - } + if (all_grobs[i] == ch) + return translates[i]; } else - { - vector translates = get_extents_aligned_translates (me, all_grobs, Y_AXIS, true, start, end); + return 0; - if (translates.size ()) - { - for (vsize i = 0; i < all_grobs.size (); i++) - if (all_grobs[i] == ch) - return translates[i]; - } - else - return 0; - } - - programming_error (_ ("tried to get a translation for something that is no child of mine")); + programming_error ("tried to get a translation for something that is no child of mine"); return 0; } @@ -340,55 +363,12 @@ Align_interface::set_ordered (Grob *me) ga->set_ordered (true); } -int -Align_interface::stretchable_children_count (Grob const *me) -{ - extract_grob_set (me, "elements", elts); - int ret = 0; - - /* start at 1: we will never move the first child while stretching */ - for (vsize i = 1; i < elts.size (); i++) - if (!to_boolean (elts[i]->get_property ("keep-fixed-while-stretching")) - && !elts[i]->extent (elts[i], Y_AXIS).is_empty ()) - ret++; - - return ret; -} - -MAKE_SCHEME_CALLBACK (Align_interface, calc_max_stretch, 1) -SCM -Align_interface::calc_max_stretch (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Spanner *spanner_me = dynamic_cast (me); - Real ret = 0; - - if (spanner_me && stretchable_children_count (me) > 0) - { - Paper_column *left = dynamic_cast (spanner_me->get_bound (LEFT)); - Real height = me->extent (me, Y_AXIS).length (); - SCM line_break_details = left->get_property ("line-break-system-details"); - SCM fixed_offsets = scm_assq (ly_symbol2scm ("alignment-offsets"), - line_break_details); - - /* if there are fixed offsets, we refuse to stretch */ - if (fixed_offsets != SCM_BOOL_F) - ret = 0; - else - ret = height * height / 80.0; /* why this, exactly? -- jneem */ - } - return scm_from_double (ret); -} - ADD_INTERFACE (Align_interface, "Order grobs from top to bottom, left to right, right to left" " or bottom to top. For vertical alignments of staves, the" " @code{break-system-details} of the left" " @rinternals{NonMusicalPaperColumn} may be set to tune" - " vertical spacing. Set @code{alignment-extra-space} to add" - " extra space for staves. Set" - " @code{fixed-alignment-extra-space} to force staves in" - " @code{PianoStaff}s further apart.", + " vertical spacing.", /* properties */ "align-dir " @@ -397,5 +377,4 @@ ADD_INTERFACE (Align_interface, "padding " "positioning-done " "stacking-dir " - "threshold " ); diff --git a/lily/all-font-metrics-scheme.cc b/lily/all-font-metrics-scheme.cc index 1391b1d8ff..0dd78123ea 100644 --- a/lily/all-font-metrics-scheme.cc +++ b/lily/all-font-metrics-scheme.cc @@ -1,11 +1,21 @@ -/* - all-font-metrics-scheme.cc -- implement bindings for - All_font_metrics. - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #include "all-font-metrics.hh" @@ -29,7 +39,7 @@ LY_DEFINE (ly_system_font_load, "ly:system-font-load", 1, 0, 0, " additional SFNT font tables called @code{LILC}," " @code{LILF}, and @code{LILY}, needed for typesetting" " musical elements. Currently, only the Emmentaler and" - " the Aybabtu fonts fulfill these requirements.\n" + " the Emmentaler-Brace fonts fulfill these requirements.\n" "\n" "Note that only @code{ly:font-get-glyph} and derived" " code (like @code{\\lookup}) can access glyphs from" diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc index 344d3a3e75..23119125aa 100644 --- a/lily/all-font-metrics.cc +++ b/lily/all-font-metrics.cc @@ -1,9 +1,20 @@ /* - all-font-metrics.cc -- implement All_font_metrics + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "all-font-metrics.hh" @@ -38,11 +49,9 @@ All_font_metrics::All_font_metrics (string path) #if HAVE_PANGO_FT2 PangoFontMap *pfm = pango_ft2_font_map_new (); - pango_ft2_fontmap_ - = G_TYPE_CHECK_INSTANCE_CAST (pfm, - PANGO_TYPE_FT2_FONT_MAP, - PangoFT2FontMap); - pango_dpi_ = 1200; + pango_ft2_fontmap_ = PANGO_FT2_FONT_MAP (pfm); + + pango_dpi_ = PANGO_RESOLUTION; pango_ft2_font_map_set_resolution (pango_ft2_fontmap_, pango_dpi_, pango_dpi_); diff --git a/lily/ambitus-engraver.cc b/lily/ambitus-engraver.cc index 2585bd8bc1..221c1e8881 100644 --- a/lily/ambitus-engraver.cc +++ b/lily/ambitus-engraver.cc @@ -1,11 +1,22 @@ /* - ambitus-engraver.cc -- implement Ambitus_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2002--2009 Juergen Reuter + Copyright (C) 2002--2011 Juergen Reuter Han-Wen Nienhuys . */ #include "engraver.hh" @@ -82,8 +93,8 @@ Ambitus_engraver::create_ambitus () Ambitus_engraver::Ambitus_engraver () { ambitus_ = 0; - heads_[LEFT] = heads_[RIGHT] = 0; - accidentals_[LEFT] = accidentals_[RIGHT] = 0; + heads_.set (0, 0); + accidentals_.set (0, 0); group_ = 0; is_typeset_ = false; start_key_sig_ = SCM_EOL; @@ -145,8 +156,7 @@ Ambitus_engraver::finalize () if (ambitus_ && !pitch_interval_.is_empty ()) { Grob *accidental_placement = - make_item ("AccidentalPlacement", - accidentals_[DOWN]->self_scm ()); + make_item ("AccidentalPlacement", accidentals_[DOWN]->self_scm ()); Direction d = DOWN; do @@ -154,8 +164,7 @@ Ambitus_engraver::finalize () Pitch p = pitch_interval_[d]; heads_[d]->set_property ("cause", causes_[d]->self_scm()); heads_[d]->set_property ("staff-position", - scm_from_int (start_c0_ - + p.steps ())); + scm_from_int (start_c0_ + p.steps ())); SCM handle = scm_assoc (scm_cons (scm_from_int (p.get_octave ()), scm_from_int (p.get_notename ())), @@ -166,25 +175,32 @@ Ambitus_engraver::finalize () start_key_sig_); Rational sig_alter = (handle != SCM_BOOL_F) - ? robust_scm2rational (scm_cdr (handle), Rational (0)) : Rational (0); + ? robust_scm2rational (scm_cdr (handle), Rational (0)) + : Rational (0); + + const Pitch other = pitch_interval_[-d]; - if (sig_alter == p.get_alteration ()) + if (sig_alter == p.get_alteration () + && !((p.steps () == other.steps ()) + && (p.get_alteration () != other.get_alteration ()))) { accidentals_[d]->suicide (); heads_[d]->set_object ("accidental-grob", SCM_EOL); } else - { - accidentals_[d]->set_property ("alteration", ly_rational2scm (p.get_alteration ())); - } - Separation_item::add_conditional_item (heads_[d], accidental_placement); - Accidental_placement::add_accidental (accidental_placement, accidentals_[d]); + accidentals_[d]-> + set_property ("alteration", + ly_rational2scm (p.get_alteration ())); + Separation_item::add_conditional_item (heads_[d], + accidental_placement); + Accidental_placement::add_accidental (accidental_placement, + accidentals_[d]); + Pointer_group_interface::add_grob (ambitus_, + ly_symbol2scm ("note-heads"), + heads_[d]); } while (flip (&d) != DOWN); - - Pointer_group_interface::add_grob (ambitus_, ly_symbol2scm ("note-heads"), heads_[DOWN]); - Pointer_group_interface::add_grob (ambitus_, ly_symbol2scm ("note-heads"), heads_[UP]); Axis_group_interface::add_element (group_, accidental_placement); } else @@ -194,7 +210,7 @@ Ambitus_engraver::finalize () { accidentals_[d]->suicide (); heads_[d]->suicide (); - } + } while (flip (&d) != DOWN); ambitus_->suicide (); @@ -204,7 +220,7 @@ Ambitus_engraver::finalize () ADD_ACKNOWLEDGER (Ambitus_engraver, note_head); ADD_TRANSLATOR (Ambitus_engraver, /* doc */ - "", + "Create an ambitus.", /* create */ "AccidentalPlacement " @@ -214,7 +230,8 @@ ADD_TRANSLATOR (Ambitus_engraver, "AmbitusNoteHead ", /* read */ - "", + "keySignature " + "middleCPosition ", /* write */ "" diff --git a/lily/ambitus.cc b/lily/ambitus.cc deleted file mode 100644 index 85fb297886..0000000000 --- a/lily/ambitus.cc +++ /dev/null @@ -1,78 +0,0 @@ -/* - ambitus.cc -- implement Ambitus - - source file of the GNU LilyPond music typesetter - - (c) 2002--2009 Juergen Reuter -*/ - -#include "ambitus.hh" - -#include "staff-symbol-referencer.hh" -#include "pitch.hh" -#include "note-head.hh" -#include "item.hh" -#include "font-interface.hh" -#include "output-def.hh" -#include "lookup.hh" -#include "pointer-group-interface.hh" - -MAKE_SCHEME_CALLBACK (Ambitus, print, 1); -SCM -Ambitus::print (SCM smob) -{ - Item *me = (Item *) unsmob_grob (smob); - Stencil stencil; - - // FIXME : should be Ambitus_line join heads - extract_grob_set (me, "note-heads", heads); - if (to_boolean (me->get_property ("join-heads")) - && heads.size () > 1) - { - Grob *common - = common_refpoint_of_array (vector (heads.begin (), - heads.begin () + 2), - me, Y_AXIS); - - Grob *minh = heads[0]; - Grob *maxh = heads[1]; - - if (minh->relative_coordinate (common, Y_AXIS) - > maxh->relative_coordinate (common, Y_AXIS)) - { - Grob *t = maxh; - maxh = minh; - minh = t; - } - - Real pad = 0.35; - Real pmax = maxh->extent (common, Y_AXIS)[DOWN] - pad; - Real pmin = minh->extent (common, Y_AXIS)[UP] + pad; - - if (pmin < pmax) - { - Real linethickness = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")) - * robust_scm2double (me->get_property ("thickness"), 1.0); - Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); - Interval x_extent = 0.5 * linethickness * Interval (-1, 1); - Interval y_extent = Interval (pmin, pmax); - Box line_box (x_extent, y_extent); - - Stencil line = Lookup::round_filled_box (line_box, blotdiameter); - line.translate_axis (- me->relative_coordinate (common, Y_AXIS), - Y_AXIS); - return line.smobbed_copy (); - } - } - - return SCM_EOL; -} - -ADD_INTERFACE (Ambitus, - "The line between note heads for a pitch range.", - - /* properties */ - "join-heads " - "note-heads " - "thickness " - ); diff --git a/lily/apply-context-iterator.cc b/lily/apply-context-iterator.cc index 7874509da2..65c7fe00a4 100644 --- a/lily/apply-context-iterator.cc +++ b/lily/apply-context-iterator.cc @@ -1,9 +1,20 @@ /* - apply-context-iterator.cc -- implement Apply_context_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index f5546ee5c6..62be51d90b 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -1,9 +1,20 @@ /* - arpeggio-engraver.cc -- implement Arpeggio_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "engraver.hh" diff --git a/lily/arpeggio.cc b/lily/arpeggio.cc index 7873b5f39c..b609f846d7 100644 --- a/lily/arpeggio.cc +++ b/lily/arpeggio.cc @@ -1,9 +1,20 @@ /* - arpeggio.cc -- implement Arpeggio + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "arpeggio.hh" @@ -19,6 +30,15 @@ #include "stem.hh" #include "warn.hh" +static Stencil +get_squiggle (Grob *me) +{ + Font_metric *fm = Font_interface::get_default_font (me); + Stencil squiggle = fm->find_by_name ("scripts.arpeggio"); + + return squiggle; +} + Grob * Arpeggio::get_common_y (Grob *me) { @@ -35,13 +55,13 @@ Arpeggio::get_common_y (Grob *me) return common; } -MAKE_SCHEME_CALLBACK(Arpeggio, calc_positions, 1); +MAKE_SCHEME_CALLBACK (Arpeggio, calc_positions, 1); SCM Arpeggio::calc_positions (SCM grob) { Grob *me = unsmob_grob (grob); Grob *common = get_common_y (me); - + /* TODO: @@ -58,13 +78,12 @@ Arpeggio::calc_positions (SCM grob) Grob *stem = stems[i]; Grob *ss = Staff_symbol_referencer::get_staff_symbol (stem); Interval iv = Stem::head_positions (stem); - iv *= Staff_symbol::staff_space (ss) / 2.0; - - heads.unite (iv + ss->relative_coordinate (common, Y_AXIS) - - my_y); + iv *= Staff_symbol_referencer::staff_space (me) / 2.0; + Real staff_y = ss ? ss->relative_coordinate (common, Y_AXIS) : 0.0; + heads.unite (iv + staff_y - my_y); } - heads *= 1/Staff_symbol_referencer::staff_space(me); + heads *= 1 / Staff_symbol_referencer::staff_space (me); return ly_interval2scm (heads); } @@ -75,17 +94,27 @@ Arpeggio::print (SCM smob) { Grob *me = unsmob_grob (smob); Interval heads = robust_scm2interval (me->get_property ("positions"), - Interval()) + Interval ()) * Staff_symbol_referencer::staff_space (me); - + if (heads.is_empty () || heads.length () < 0.5) { - if (!to_boolean (me->get_property ("transparent"))) + if (to_boolean (me->get_property ("transparent"))) + { + /* + This is part of a cross-staff/-voice span-arpeggio, + so we need to ensure `heads' is large enough to encompass + a single trill-element since the span-arpeggio depends on + its children to prevent collisions. + */ + heads.unite (get_squiggle (me).extent (Y_AXIS)); + } + else { me->warning ("no heads for arpeggio found?"); me->suicide (); + return SCM_EOL; } - return SCM_EOL; } SCM ad = me->get_property ("arpeggio-direction"); @@ -94,8 +123,7 @@ Arpeggio::print (SCM smob) dir = to_dir (ad); Stencil mol; - Font_metric *fm = Font_interface::get_default_font (me); - Stencil squiggle = fm->find_by_name ("scripts.arpeggio"); + Stencil squiggle (get_squiggle (me)); /* Compensate for rounding error which may occur when a chord @@ -110,14 +138,13 @@ Arpeggio::print (SCM smob) Stencil arrow; if (dir) { + Font_metric *fm = Font_interface::get_default_font (me); arrow = fm->find_by_name ("scripts.arpeggio.arrow." + to_string (dir)); heads[dir] -= dir * arrow.extent (Y_AXIS).length (); } while (mol.extent (Y_AXIS).length () + epsilon < heads.length ()) - { - mol.add_at_edge (Y_AXIS, UP, squiggle, 0.0); - } + mol.add_at_edge (Y_AXIS, UP, squiggle, 0.0); mol.translate_axis (heads[LEFT], Y_AXIS); if (dir) @@ -135,7 +162,7 @@ Arpeggio::brew_chord_bracket (SCM smob) { Grob *me = unsmob_grob (smob); Interval heads = robust_scm2interval (me->get_property ("positions"), - Interval()) + Interval ()) * Staff_symbol_referencer::staff_space (me); Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")); @@ -153,8 +180,9 @@ SCM Arpeggio::brew_chord_slur (SCM smob) { Grob *me = unsmob_grob (smob); + SCM dash_definition = me->get_property ("dash-definition"); Interval heads = robust_scm2interval (me->get_property ("positions"), - Interval()) + Interval ()) * Staff_symbol_referencer::staff_space (me); Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")); @@ -165,7 +193,7 @@ Arpeggio::brew_chord_slur (SCM smob) Bezier curve = slur_shape (dy, height_limit, ratio); curve.rotate (M_PI / 2); - Stencil mol (Lookup::slur (curve, lt, lt)); + Stencil mol (Lookup::slur (curve, lt, lt, dash_definition)); mol.translate_axis (heads[LEFT], Y_AXIS); return mol.smobbed_copy (); } @@ -179,16 +207,7 @@ SCM Arpeggio::width (SCM smob) { Grob *me = unsmob_grob (smob); - Stencil arpeggio = Font_interface::get_default_font (me)->find_by_name ("scripts.arpeggio"); - - return ly_interval2scm (arpeggio.extent (X_AXIS)); -} - -MAKE_SCHEME_CALLBACK (Arpeggio, height, 1); -SCM -Arpeggio::height (SCM smob) -{ - return Grob::stencil_height (smob); + return ly_interval2scm (get_squiggle (me).extent (X_AXIS)); } MAKE_SCHEME_CALLBACK (Arpeggio, pure_height, 3); @@ -199,17 +218,17 @@ Arpeggio::pure_height (SCM smob, SCM, SCM) if (to_boolean (me->get_property ("cross-staff"))) return ly_interval2scm (Interval ()); - return height (smob); + return Grob::stencil_height (smob); } ADD_INTERFACE (Arpeggio, - "Functions and settings for drawing an arpeggio symbol (a" - " wavy line left to noteheads.", + "Functions and settings for drawing an arpeggio symbol.", /* properties */ "arpeggio-direction " "positions " "script-priority " // TODO: make around-note-interface "stems " + "dash-definition " // TODO: make apply to non-slur arpeggios ); diff --git a/lily/articulations.cc b/lily/articulations.cc new file mode 100644 index 0000000000..93018656a5 --- /dev/null +++ b/lily/articulations.cc @@ -0,0 +1,85 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Carl Sorensen + + 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 . +*/ +#include "engraver.hh" + +#include "articulations.hh" +#include "stream-event.hh" +#include "warn.hh" +#include "context.hh" + +/* + Return an articulation list given a note_events vector and an + articulation_events vector. + + This is necessary, because the articulations come as events if + they are entered outside of a chord structure, and as articulations + if they are inside the chord structure. So potentially we need to + combine the two types. +*/ + +SCM +articulation_list (vector note_events, + vector articulation_events, + char const *articulation_name) +{ + vector string_events; + SCM articulations = SCM_EOL; + vsize j = 0; + + for (vsize i = 0; i < note_events.size (); i++) + { + + Stream_event *event = note_events[i]; + + Stream_event *articulation_event = 0; + + /* + For notes inside a chord construct, string indications are + stored as articulations on the note, so we check through + the notes + */ + for (SCM s = event->get_property ("articulations"); + !articulation_event && scm_is_pair (s); s = scm_cdr (s)) + { + Stream_event *art = unsmob_stream_event (scm_car (s)); + + if (art->in_event_class (articulation_name)) + articulation_event = art; + } + + /* + For string indications listed outside a chord construct, + a string_number_event is generated, so if there was no string + in the articulations, we check for string events outside + the chord construct + */ + if (!articulation_event && j < articulation_events.size ()) + { + articulation_event = articulation_events[j]; + if (j + 1 < articulation_events.size ()) + j++; + } + articulations = scm_cons ((articulation_event + ? articulation_event->self_scm () + : SCM_EOL), + articulations); + } + + return (scm_reverse (articulations)); +} diff --git a/lily/audio-column.cc b/lily/audio-column.cc index 4c24351aa4..105eb1dda8 100644 --- a/lily/audio-column.cc +++ b/lily/audio-column.cc @@ -1,15 +1,25 @@ /* - audio-column.cc -- implement Audio_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "audio-column.hh" #include "audio-item.hh" -#include "performance.hh" Audio_column::Audio_column (Moment when) { diff --git a/lily/audio-element-info.cc b/lily/audio-element-info.cc index c3cda8b40e..e7db515aab 100644 --- a/lily/audio-element-info.cc +++ b/lily/audio-element-info.cc @@ -1,9 +1,20 @@ /* - Audio-element-info.cc -- implement Audio_element_info + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "audio-element-info.hh" diff --git a/lily/audio-element.cc b/lily/audio-element.cc index 093724cee1..cd3f7c8d18 100644 --- a/lily/audio-element.cc +++ b/lily/audio-element.cc @@ -1,9 +1,20 @@ /* - audio-element.cc -- implement Audio_element + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include diff --git a/lily/audio-item.cc b/lily/audio-item.cc index 33e54d713a..76a3923848 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -1,9 +1,20 @@ /* - audio-item.cc -- implement Audio items. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "audio-item.hh" @@ -28,27 +39,31 @@ Audio_item::get_column () const } Audio_item::Audio_item () + : audio_column_ (0) + , channel_ (0) { - audio_column_ = 0; } Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposing) + : pitch_ (p) + , length_mom_ (m) + , transposing_ (transposing) + , dynamic_ (0) + , tied_ (0) + , tie_event_ (tie_event) { - pitch_ = p; - length_mom_ = m; - tied_ = 0; - transposing_ = transposing; - tie_event_ = tie_event; } void -Audio_note::tie_to (Audio_note *t) +Audio_note::tie_to (Audio_note *t, Moment skip) { tied_ = t; Audio_note *first = t; while (first->tied_) first = first->tied_; - first->length_mom_ += length_mom_; + // Add the skip to the tied note and the length of the appended note + // to the full duration of the tie... + first->length_mom_ += skip + length_mom_; length_mom_ = 0; } @@ -59,8 +74,9 @@ Audio_key::Audio_key (int acc, bool major) } Audio_dynamic::Audio_dynamic () + : volume_ (-1) + , silent_ (false) { - volume_ = -1; } Audio_span_dynamic::Audio_span_dynamic () @@ -111,12 +127,12 @@ Audio_span_dynamic::render () if (dynamics_.size () <= 1) { - programming_error ("(de)crescendo on items with specified volume."); + programming_error ("Impossible or ambiguous (de)crescendo in MIDI."); return ; } - + Real delta_v = grow_dir_ * 0.1; - + Real start_v = dynamics_[0]->volume_; if (dynamics_.back ()->volume_ < 0) dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, 1.0), 0.1); @@ -126,17 +142,17 @@ Audio_span_dynamic::render () Moment start = dynamics_[0]->get_column ()->when (); Real total_t = moment_to_real (dynamics_.back ()->get_column ()->when () - start); - + for (vsize i = 1; i < dynamics_.size (); i ++) { Moment dt_moment = dynamics_[i]->get_column ()->when () - start; Real dt = moment_to_real (dt_moment); - + Real v = start_v + delta_v * (dt / total_t); - dynamics_[i]->volume_ = v; + dynamics_[i]->volume_ = v; } } diff --git a/lily/audio-staff.cc b/lily/audio-staff.cc index bde50ae80a..ddab7e04bc 100644 --- a/lily/audio-staff.cc +++ b/lily/audio-staff.cc @@ -1,9 +1,20 @@ /* - audio-staff.cc -- implement Audio_staff + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "audio-staff.hh" @@ -13,23 +24,22 @@ #include "midi-walker.hh" void -Audio_staff::add_audio_item (Audio_item *l) +Audio_staff::add_audio_item (Audio_item *ai) { - audio_items_.push_back (l); + audio_items_.push_back (ai); } Audio_staff::Audio_staff () + : percussion_ (false), merge_unisons_ (false) { - channel_ = -1; } void -Audio_staff::output (Midi_stream &midi_stream, int channel) +Audio_staff::output (Midi_stream &midi_stream, int track, bool port) { - Midi_track midi_track; - midi_track.number_ = channel; + Midi_track midi_track (track, port); - Midi_walker i (this, &midi_track, channel); + Midi_walker i (this, &midi_track); for (; i.ok (); i++) i.process (); diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 4c813a7038..0d5fa60ed2 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -1,9 +1,20 @@ /* - auto-beam-engraver.cc -- implement Auto_beam_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Jan Nieuwenhuizen - (c) 1999--2009 Jan Nieuwenhuizen + 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 . */ #include "bar-line.hh" @@ -34,29 +45,32 @@ protected: DECLARE_ACKNOWLEDGER (rest); DECLARE_ACKNOWLEDGER (beam); DECLARE_ACKNOWLEDGER (bar_line); + DECLARE_ACKNOWLEDGER (breathing_sign); DECLARE_ACKNOWLEDGER (stem); DECLARE_TRANSLATOR_LISTENER (beam_forbid); void process_acknowledged (); private: - bool test_moment (Direction, Moment); - void consider_begin (Moment); - void consider_end (Moment); + bool test_moment (Direction, Moment, Moment); + void consider_begin (Moment, Moment); + void consider_end (Moment, Moment); Spanner *create_beam (); void begin_beam (); void end_beam (); void junk_beam (); bool is_same_grace_state (Grob *e); + void recheck_beam (); void typeset_beam (); + vector *remove_end_stems (vsize); Stream_event *forbid_; /* - shortest_mom is the shortest note in the beam. + shortest_mom_ is the shortest note in the beam. */ Moment shortest_mom_; Spanner *finished_beam_; - vector *stems_; + vector *stems_; int process_acknowledged_count_; Moment last_add_mom_; @@ -66,6 +80,7 @@ private: Moment extend_mom_; Moment beam_start_moment_; Moment beam_start_location_; + Context *beam_start_context_; // We act as if beam were created, and start a grouping anyway. Beaming_pattern *grouping_; @@ -76,8 +91,8 @@ private: Beaming_options beaming_options_; Beaming_options finished_beaming_options_; - - + + void check_bar_property (); }; @@ -97,7 +112,7 @@ Auto_beam_engraver::check_bar_property () if (scm_is_string (get_property ("whichBar")) && beam_start_moment_ < now) { - consider_end (shortest_mom_); + consider_end (measure_position (context ()), shortest_mom_); junk_beam (); } } @@ -105,26 +120,28 @@ Auto_beam_engraver::check_bar_property () void Auto_beam_engraver::process_music () { + Moment now = now_mom (); /* don't beam over skips */ if (stems_) { - Moment now = now_mom (); if (extend_mom_ < now) end_beam (); } if (scm_is_string (get_property ("whichBar"))) { - consider_end (shortest_mom_); + consider_end (measure_position (context ()), shortest_mom_); junk_beam (); } if (forbid_) { - consider_end (shortest_mom_); - junk_beam (); + if (stems_) + end_beam (); + else + junk_beam (); } } @@ -133,7 +150,7 @@ Auto_beam_engraver::Auto_beam_engraver () forbid_ = 0; process_acknowledged_count_ = 0; stems_ = 0; - shortest_mom_ = Moment (Rational (1, 8)); + shortest_mom_ = Moment (Rational (1, 4)); finished_beam_ = 0; finished_grouping_ = 0; grouping_ = 0; @@ -148,36 +165,37 @@ Auto_beam_engraver::listen_beam_forbid (Stream_event *ev) } bool -Auto_beam_engraver::test_moment (Direction dir, Moment test) +Auto_beam_engraver::test_moment (Direction dir, Moment test_mom, Moment dur) { - return scm_call_3 (get_property ("autoBeamCheck"), + return scm_call_4 (get_property ("autoBeamCheck"), context ()->self_scm (), scm_from_int (dir), - test.smobbed_copy ()) + test_mom.smobbed_copy (), + dur.smobbed_copy ()) != SCM_BOOL_F; } void -Auto_beam_engraver::consider_begin (Moment test_mom) +Auto_beam_engraver::consider_begin (Moment test_mom, Moment dur) { bool on = to_boolean (get_property ("autoBeaming")); if (!stems_ && on && !forbid_) { - bool b = test_moment (START, test_mom); + bool b = test_moment (START, test_mom, dur); if (b) begin_beam (); } } void -Auto_beam_engraver::consider_end (Moment test_mom) +Auto_beam_engraver::consider_end (Moment test_mom, Moment dur) { if (stems_) { /* Allow already started autobeam to end: don't check for autoBeaming */ - bool b = test_moment (STOP, test_mom); + bool b = test_moment (STOP, test_mom, dur); if (b) end_beam (); } @@ -194,7 +212,7 @@ Auto_beam_engraver::create_beam () return 0; /* - Can't use make_spanner_from_properties () because we have to use + Can't use make_spanner () because we have to use beam_settings_. */ Spanner *beam = new Spanner (beam_settings_); @@ -202,7 +220,9 @@ Auto_beam_engraver::create_beam () for (vsize i = 0; i < stems_->size (); i++) Beam::add_stem (beam, (*stems_)[i]); - announce_grob (beam, (*stems_)[0]->self_scm ()); + Grob_info i = make_grob_info (beam, (*stems_)[0]->self_scm ()); + i.rerouting_daddy_context_ = beam_start_context_; + announce_grob (i); return beam; } @@ -216,11 +236,12 @@ Auto_beam_engraver::begin_beam () return; } - stems_ = new vector; + stems_ = new vector; grouping_ = new Beaming_pattern (); beaming_options_.from_context (context ()); beam_settings_ = updated_grob_properties (context (), ly_symbol2scm ("Beam")); + beam_start_context_ = context ()->get_parent_context (); beam_start_moment_ = now_mom (); beam_start_location_ = robust_scm2moment (get_property ("measurePosition"), Moment (0)); @@ -238,7 +259,7 @@ Auto_beam_engraver::junk_beam () grouping_ = 0; beam_settings_ = SCM_EOL; - shortest_mom_ = Moment (Rational (1, 8)); + shortest_mom_ = Moment (Rational (1, 4)); } void @@ -249,10 +270,13 @@ Auto_beam_engraver::end_beam () else { finished_beam_ = create_beam (); - + if (finished_beam_) { - announce_end_grob (finished_beam_, SCM_EOL); + Grob_info i = make_grob_info (finished_beam_, SCM_EOL); + i.rerouting_daddy_context_ = beam_start_context_; + + announce_end_grob (i); finished_grouping_ = grouping_; finished_beaming_options_ = beaming_options_; } @@ -262,7 +286,7 @@ Auto_beam_engraver::end_beam () beam_settings_ = SCM_EOL; } - shortest_mom_ = Moment (Rational (1, 8)); + shortest_mom_ = Moment (Rational (1, 4)); } void @@ -272,7 +296,7 @@ Auto_beam_engraver::typeset_beam () { if (!finished_beam_->get_bound (RIGHT)) finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT)); - + finished_grouping_->beamify (finished_beaming_options_); Beam::set_beaming (finished_beam_, finished_grouping_); finished_beam_ = 0; @@ -317,6 +341,14 @@ Auto_beam_engraver::acknowledge_bar_line (Grob_info /* info */) end_beam (); } +void +Auto_beam_engraver::acknowledge_breathing_sign (Grob_info /* info */) +{ + check_bar_property (); + if (stems_) + end_beam (); +} + void Auto_beam_engraver::acknowledge_rest (Grob_info /* info */) { @@ -371,12 +403,20 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info) return; Moment dur = unsmob_duration (ev->get_property ("duration"))->get_length (); - - consider_end (dur); - consider_begin (dur); + Moment measure_now = measure_position (context ()); + bool recheck_needed = false; if (dur < shortest_mom_) + { + /* new shortest moment, so store it and set recheck_needed */ shortest_mom_ = dur; + recheck_needed = true; + } + + /* end should be based on shortest_mom_, begin should be + based on current duration */ + consider_end (measure_now, shortest_mom_); + consider_begin (measure_now, dur); if (!stems_) return; @@ -387,24 +427,98 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info) stems_->push_back (stem); last_add_mom_ = now; extend_mom_ = max (extend_mom_, now) + get_event_length (ev, now); + if (recheck_needed) + recheck_beam (); +} + +void +Auto_beam_engraver::recheck_beam () +{ + /* + Recheck the beam after the shortest duration has changed + If shorter duration has created a new break, typeset the + first part of the beam and reset the current beam to just + the last part of the beam + */ + Beaming_pattern *new_grouping_ = 0; + vector *new_stems_ = 0; + Moment temporary_shortest_mom; + SCM temporary_beam_settings; + + bool found_end; + + + for (vsize i = 0; i < stems_->size () - 1;) + { + found_end = test_moment (STOP, + grouping_->end_moment (i), + shortest_mom_); + if (!found_end) + i++; + else + { + /* + Save the current beam settings and shortest_mom_ + Necessary because end_beam destroys them + */ + temporary_shortest_mom = shortest_mom_; + temporary_beam_settings = beam_settings_; + + /* Eliminate (and save) the items no longer part of the first beam */ + + new_grouping_ = grouping_->split_pattern (i); + new_stems_ = remove_end_stems (i); + + end_beam (); + typeset_beam (); + + /* now recreate the unbeamed data structures */ + stems_ = new_stems_; + grouping_ = new_grouping_; + shortest_mom_ = temporary_shortest_mom; + beam_settings_ = temporary_beam_settings; + + i = 0; + } + + } + +} + +/* + Remove all stems with an index greater than split_index + from stems_, and return a vector containing all of the + removed stems +*/ +vector * +Auto_beam_engraver::remove_end_stems (vsize split_index) +{ + vector *removed_stems = 0; + removed_stems = new vector ; + + for (vsize j = split_index + 1; j < stems_->size (); j++) + removed_stems->push_back ((*stems_).at (j)); + for (vsize j = split_index + 1; j < stems_->size ();) + stems_->pop_back (); + return removed_stems; } void Auto_beam_engraver::process_acknowledged () { - if (extend_mom_ > now_mom ()) + Moment now = now_mom(); + if (extend_mom_ > now) return; if (!process_acknowledged_count_) { - consider_end (shortest_mom_); - consider_begin (shortest_mom_); + Moment measure_now = measure_position (context ()); + consider_end (measure_now, shortest_mom_); } else if (process_acknowledged_count_ > 1) { if (stems_) { - Moment now = now_mom (); if ((extend_mom_ < now) || ((extend_mom_ == now) && (last_add_mom_ != now))) end_beam (); @@ -419,25 +533,28 @@ Auto_beam_engraver::process_acknowledged () ADD_ACKNOWLEDGER (Auto_beam_engraver, stem); ADD_ACKNOWLEDGER (Auto_beam_engraver, bar_line); ADD_ACKNOWLEDGER (Auto_beam_engraver, beam); +ADD_ACKNOWLEDGER (Auto_beam_engraver, breathing_sign); ADD_ACKNOWLEDGER (Auto_beam_engraver, rest); ADD_TRANSLATOR (Auto_beam_engraver, - /* doc */ - "Generate beams based on measure characteristics and observed" - " Stems. Uses @code{beatLength}, @code{measureLength}, and" - " @code{measurePosition} to decide when to start and stop a" - " beam. Overriding beaming is done through" - " @ref{Stem_engraver} properties @code{stemLeftBeamCount} and" - " @code{stemRightBeamCount}.", - - /* create */ - "Beam ", - - /* read */ - "autoBeaming " - "autoBeamSettings " - "beatLength " - "subdivideBeams ", - - /* write */ - "" - ); + /* doc */ + "Generate beams based on measure characteristics and observed" + " Stems. Uses @code{baseMoment}, @code{beatStructure}," + " @code{beamExceptions}, @code{measureLength}, and" + " @code{measurePosition} to decide when to start and stop a" + " beam. Overriding beaming is done through" + " @ref{Stem_engraver} properties @code{stemLeftBeamCount} and" + " @code{stemRightBeamCount}.", + + /* create */ + "Beam ", + + /* read */ + "autoBeaming " + "baseMoment " + "beamExceptions " + "beatStructure " + "subdivideBeams ", + + /* write */ + "" + ); diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc index 8ac1ccf337..76e43dbccd 100644 --- a/lily/auto-change-iterator.cc +++ b/lily/auto-change-iterator.cc @@ -1,9 +1,20 @@ /* - auto-change-iterator.cc -- implement Auto_change_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 4f19938ef8..60d16767b0 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -1,9 +1,20 @@ /* - axis-group-engraver.cc -- implement Axis_group_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "axis-group-engraver.hh" @@ -19,10 +30,15 @@ Axis_group_engraver::Axis_group_engraver () { - must_be_last_ = true; staffline_ = 0; } +bool +Axis_group_engraver::must_be_last () const +{ + return true; +} + void Axis_group_engraver::process_music () { diff --git a/lily/axis-group-interface-scheme.cc b/lily/axis-group-interface-scheme.cc index ff16505c7b..744bff13aa 100644 --- a/lily/axis-group-interface-scheme.cc +++ b/lily/axis-group-interface-scheme.cc @@ -1,9 +1,20 @@ /* - axis-group-interface-scheme.cc -- implement Axis_group_interface bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "axis-group-interface.hh" @@ -35,3 +46,13 @@ LY_DEFINE (ly_relative_group_extent, "ly:relative-group-extent", return ly_interval2scm (ext); } +LY_DEFINE (ly_axis_group_interface__add_element, "ly:axis-group-interface::add-element", + 2, 0, 0, (SCM grob, SCM grob_element), + "Set @var{grob} the parent of @var{grob-element} on all axes of" + " @var{grob}.") +{ + LY_ASSERT_SMOB (Grob, grob, 1); + LY_ASSERT_SMOB (Grob, grob_element, 2); + Axis_group_interface::add_element (unsmob_grob (grob), unsmob_grob (grob_element)); + return SCM_UNSPECIFIED; +} diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 31f7beb8d0..0b399fd248 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -1,28 +1,43 @@ /* - axis-group-interface.cc -- implement Axis_group_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "axis-group-interface.hh" #include "align-interface.hh" #include "directional-element-interface.hh" -#include "pointer-group-interface.hh" #include "grob-array.hh" #include "hara-kiri-group-spanner.hh" #include "international.hh" #include "lookup.hh" #include "paper-column.hh" #include "paper-score.hh" +#include "pointer-group-interface.hh" #include "separation-item.hh" #include "skyline-pair.hh" +#include "staff-grouper-interface.hh" #include "stencil.hh" #include "system.hh" #include "warn.hh" +static bool +pure_staff_priority_less (Grob *const &g1, Grob *const &g2); + void Axis_group_interface::add_element (Grob *me, Grob *e) { @@ -74,26 +89,66 @@ Axis_group_interface::relative_group_extent (vector const &elts, return r; } +Interval +Axis_group_interface::sum_partial_pure_heights (Grob *me, int start, int end) +{ + Interval iv = begin_of_line_pure_height (me, start); + iv.unite (rest_of_line_pure_height (me, start, end)); -/* - FIXME: pure extent handling has a lot of ad-hoc caching. - This should be done with grob property callbacks. + return iv; +} - --hwn -*/ +Interval +Axis_group_interface::part_of_line_pure_height (Grob *me, bool begin, int start, int end) +{ + Spanner *sp = dynamic_cast (me); + SCM cache_symbol = begin + ? ly_symbol2scm ("begin-of-line-pure-height") + : ly_symbol2scm ("rest-of-line-pure-height"); + SCM cached = sp->get_cached_pure_property (cache_symbol, start, end); + if (scm_is_pair (cached)) + return robust_scm2interval (cached, Interval (0, 0)); + + SCM adjacent_pure_heights = me->get_property ("adjacent-pure-heights"); + Interval ret; + + if (!scm_is_pair (adjacent_pure_heights)) + ret = Interval (0, 0); + else + { + SCM these_pure_heights = begin + ? scm_car (adjacent_pure_heights) + : scm_cdr (adjacent_pure_heights); + + if (scm_is_vector (these_pure_heights)) + ret = combine_pure_heights (me, these_pure_heights, start, end); + else + ret = Interval (0, 0); + } + + sp->cache_pure_property (cache_symbol, start, end, ly_interval2scm (ret)); + return ret; +} + +Interval +Axis_group_interface::begin_of_line_pure_height (Grob *me, int start) +{ + return part_of_line_pure_height (me, true, start, start + 1); +} Interval -Axis_group_interface::cached_pure_height (Grob *me, int start, int end) +Axis_group_interface::rest_of_line_pure_height (Grob *me, int start, int end) +{ + return part_of_line_pure_height (me, false, start, end); +} + +Interval +Axis_group_interface::combine_pure_heights (Grob *me, SCM measure_extents, int start, int end) { Paper_score *ps = get_root_system (me)->paper_score (); vector breaks = ps->get_break_indices (); vector cols = ps->get_columns (); - SCM extents = me->get_property ("adjacent-pure-heights"); - - if (!scm_is_vector (extents)) - return Interval (0, 0); - Interval ext; for (vsize i = 0; i + 1 < breaks.size (); i++) { @@ -102,68 +157,114 @@ Axis_group_interface::cached_pure_height (Grob *me, int start, int end) break; if (r >= start) - ext.unite (ly_scm2interval (scm_c_vector_ref (extents, i))); + ext.unite (ly_scm2interval (scm_c_vector_ref (measure_extents, i))); } return ext; } +// adjacent-pure-heights is a pair of vectors, each of which has one element +// for every measure in the score. The first vector stores, for each measure, +// the combined height of the elements that are present only when the bar +// is at the beginning of a line. The second vector stores, for each measure, +// the combined height of the elements that are present only when the bar +// is not at the beginning of a line. MAKE_SCHEME_CALLBACK (Axis_group_interface, adjacent_pure_heights, 1) SCM Axis_group_interface::adjacent_pure_heights (SCM smob) { Grob *me = unsmob_grob (smob); - Grob *common = calc_pure_elts_and_common (me); - extract_grob_set (me, "pure-relevant-items", items); - extract_grob_set (me, "pure-relevant-spanners", spanners); + Grob *common = unsmob_grob (me->get_object ("pure-Y-common")); + extract_grob_set (me, "pure-relevant-grobs", elts); Paper_score *ps = get_root_system (me)->paper_score (); - vector breaks = ps->get_break_indices (); - vector cols = ps->get_columns (); + vector ranks = ps->get_break_ranks (); - SCM ret = scm_c_make_vector (breaks.size () - 1, SCM_EOL); - vsize it_index = 0; - for (vsize i = 0; i + 1 < breaks.size (); i++) + vector begin_line_heights; + vector mid_line_heights; + vector begin_line_staff_heights; + vector mid_line_staff_heights; + begin_line_heights.resize (ranks.size () - 1); + mid_line_heights.resize (ranks.size () - 1); + + for (vsize i = 0; i < elts.size (); ++i) { - int start = Paper_column::get_rank (cols[breaks[i]]); - int end = Paper_column::get_rank (cols[breaks[i+1]]); - Interval iv; + Grob *g = elts[i]; - for (vsize j = it_index; j < items.size (); j++) - { - Item *it = dynamic_cast (items[j]); - int rank = it->get_column ()->get_rank (); + if (to_boolean (g->get_property ("cross-staff"))) + continue; - if (rank <= end && it->pure_is_visible (start, end) - && !to_boolean (it->get_property ("cross-staff"))) - { - Interval dims = items[j]->pure_height (common, start, end); - if (!dims.is_empty ()) - iv.unite (dims); - } + bool outside_staff = scm_is_number (g->get_property ("outside-staff-priority")); + Real padding = robust_scm2double (g->get_property ("outside-staff-padding"), 0.5); - if (rank < end) - it_index++; - else if (rank > end) - break; + // When we encounter the first outside-staff grob, make a copy + // of the current heights to use as an estimate for the staff heights. + // Note that the outside-staff approximation that we use here doesn't + // consider any collisions that might occur between outside-staff grobs, + // but only the fact that outside-staff grobs may need to be raised above + // the staff. + if (outside_staff && begin_line_staff_heights.empty ()) + { + begin_line_staff_heights = begin_line_heights; + mid_line_staff_heights = mid_line_heights; } - for (vsize j = 0; j < spanners.size (); j++) + // TODO: consider a pure version of get_grob_direction? + Direction d = to_dir (g->get_property_data ("direction")); + d = (d == CENTER) ? UP : d; + + Interval_t rank_span = g->spanned_rank_interval (); + vsize first_break = lower_bound (ranks, (vsize)rank_span[LEFT], less ()); + if (first_break > 0 && ranks[first_break] >= (vsize)rank_span[LEFT]) + first_break--; + + for (vsize j = first_break; j+1 < ranks.size () && (int)ranks[j] <= rank_span[RIGHT]; ++j) { - Interval_t rank_span = spanners[j]->spanned_rank_interval (); - if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start - && !to_boolean (spanners[j]->get_property ("cross-staff"))) + int start = ranks[j]; + int end = ranks[j+1]; + + // Take grobs that are visible with respect to a slightly longer line. + // Otherwise, we will never include grobs at breakpoints which aren't + // end-of-line-visible. + int visibility_end = j + 2 < ranks.size () ? ranks[j+2] : end; + + if (g->pure_is_visible (start, visibility_end)) { - Interval dims = spanners[j]->pure_height (common, start, end); + Interval dims = g->pure_height (common, start, end); if (!dims.is_empty ()) - iv.unite (dims); + { + if (rank_span[LEFT] <= start) + { + if (outside_staff) + begin_line_heights[j].unite ( + begin_line_staff_heights[j].union_disjoint (dims, padding, d)); + else + begin_line_heights[j].unite (dims); + } + if (rank_span[RIGHT] > start) + { + if (outside_staff) + mid_line_heights[j].unite ( + mid_line_staff_heights[j].union_disjoint (dims, padding, d)); + else + mid_line_heights[j].unite (dims); + } + } } } + } - scm_vector_set_x (ret, scm_from_int (i), ly_interval2scm (iv)); + // Convert begin_line_heights and min_line_heights to SCM. + SCM begin_scm = scm_c_make_vector (ranks.size () - 1, SCM_EOL); + SCM mid_scm = scm_c_make_vector (ranks.size () - 1, SCM_EOL); + for (vsize i = 0; i < begin_line_heights.size (); ++i) + { + scm_vector_set_x (begin_scm, scm_from_int (i), ly_interval2scm (begin_line_heights[i])); + scm_vector_set_x (mid_scm, scm_from_int (i), ly_interval2scm (mid_line_heights[i])); } - return ret; + + return scm_cons (begin_scm, mid_scm); } Interval @@ -174,43 +275,26 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end) Unfortunately, it isn't always true, particularly if there is a VerticalAlignment somewhere in the descendants. - Apart from PianoStaff, which has a fixed VerticalAlignment so it doesn't - count, the only VerticalAlignment comes from Score. This makes it + Usually, the only VerticalAlignment comes from Score. This makes it reasonably safe to assume that if our parent is a VerticalAlignment, we can assume additivity and cache things nicely. */ Grob *p = me->get_parent (Y_AXIS); if (p && Align_interface::has_interface (p)) - return Axis_group_interface::cached_pure_height (me, start, end); + return Axis_group_interface::sum_partial_pure_heights (me, start, end); - Grob *common = calc_pure_elts_and_common (me); - extract_grob_set (me, "pure-relevant-items", items); - extract_grob_set (me, "pure-relevant-spanners", spanners); + Grob *common = unsmob_grob (me->get_object ("pure-Y-common")); + extract_grob_set (me, "pure-relevant-grobs", elts); Interval r; - - for (vsize i = 0; i < items.size (); i++) - { - Item *it = dynamic_cast (items[i]); - int rank = it->get_column ()->get_rank (); - - if (rank > end) - break; - else if (rank >= start && it->pure_is_visible (start, end) - && !to_boolean (it->get_property ("cross-staff"))) - { - Interval dims = it->pure_height (common, start, end); - if (!dims.is_empty ()) - r.unite (dims); - } - } - - for (vsize i = 0; i < spanners.size (); i++) + for (vsize i = 0; i < elts.size (); i++) { - Interval_t rank_span = spanners[i]->spanned_rank_interval (); + Grob *g = elts[i]; + Interval_t rank_span = g->spanned_rank_interval (); if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start - && !to_boolean (spanners[i]->get_property ("cross-staff"))) + && g->pure_is_visible (start, end) + && !to_boolean (g->get_property ("cross-staff"))) { - Interval dims = spanners[i]->pure_height (common, start, end); + Interval dims = g->pure_height (common, start, end); if (!dims.is_empty ()) r.unite (dims); } @@ -300,7 +384,7 @@ Axis_group_interface::combine_skylines (SCM smob) } return ret.smobbed_copy (); } - + SCM Axis_group_interface::generic_group_extent (Grob *me, Axis a) { @@ -334,56 +418,57 @@ Axis_group_interface::staff_extent (Grob *me, Grob *refp, Axis ext_a, Grob *staf } -Grob * -Axis_group_interface::calc_pure_elts_and_common (Grob *me) +MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_pure_relevant_grobs, 1); +SCM +Axis_group_interface::calc_pure_relevant_grobs (SCM smob) { - if (Grob *c = unsmob_grob (me->get_object ("pure-Y-common"))) - return c; - + Grob *me = unsmob_grob (smob); + extract_grob_set (me, "elements", elts); - vector relevant_items; - vector relevant_spanners; + vector relevant_grobs; SCM pure_relevant_p = ly_lily_module_constant ("pure-relevant?"); for (vsize i = 0; i < elts.size (); i++) { if (to_boolean (scm_apply_1 (pure_relevant_p, elts[i]->self_scm (), SCM_EOL))) + relevant_grobs.push_back (elts[i]); + + if (Item *it = dynamic_cast (elts[i])) { - if (dynamic_cast (elts[i])) - relevant_items.push_back (elts[i]); - else if (dynamic_cast (elts[i])) - relevant_spanners.push_back (elts[i]); + Direction d = LEFT; + do + { + Item *piece = it->find_prebroken_piece (d); + if (piece && to_boolean (scm_apply_1 (pure_relevant_p, piece->self_scm (), SCM_EOL))) + relevant_grobs.push_back (piece); + } + while (flip (&d) != LEFT); } - - - Item *it = dynamic_cast (elts[i]); - Direction d = LEFT; - if (it) - do - { - Item *piece = it->find_prebroken_piece (d); - if (piece && to_boolean (scm_apply_1 (pure_relevant_p, piece->self_scm (), SCM_EOL))) - relevant_items.push_back (piece); - } - while (flip (&d) != LEFT); } - vector_sort (relevant_items, Item::less); - Grob *common = common_refpoint_of_array (relevant_items, me, Y_AXIS); - common = common_refpoint_of_array (relevant_spanners, common, Y_AXIS); + vector_sort (relevant_grobs, pure_staff_priority_less); + SCM grobs_scm = Grob_array::make_array (); + unsmob_grob_array (grobs_scm)->set_array (relevant_grobs); - me->set_object ("pure-Y-common", common->self_scm ()); - - SCM items_scm = Grob_array::make_array (); - SCM spanners_scm = Grob_array::make_array (); + return grobs_scm; +} - unsmob_grob_array (items_scm)->set_array (relevant_items); - unsmob_grob_array (spanners_scm)->set_array (relevant_spanners); - me->set_object ("pure-relevant-items", items_scm); - me->set_object ("pure-relevant-spanners", spanners_scm); +MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_pure_y_common, 1); +SCM +Axis_group_interface::calc_pure_y_common (SCM smob) +{ + Grob *me = unsmob_grob (smob); - return common; + extract_grob_set (me, "pure-relevant-grobs", elts); + Grob *common = common_refpoint_of_array (elts, me, Y_AXIS); + if (!common) + { + me->programming_error ("No common parent found in calc_pure_y_common."); + return SCM_EOL; + } + + return common->self_scm (); } SCM @@ -396,7 +481,7 @@ Axis_group_interface::calc_common (Grob *me, Axis axis) me->programming_error ("No common parent found in calc_common axis."); return SCM_EOL; } - + return common->self_scm (); } @@ -418,8 +503,13 @@ Axis_group_interface::calc_y_common (SCM grob) Interval Axis_group_interface::pure_group_height (Grob *me, int start, int end) { - Grob *common = calc_pure_elts_and_common (me); - + Grob *common = unsmob_grob (me->get_object ("pure-Y-common")); + + if (!common) + { + programming_error ("no pure Y common refpoint"); + return Interval (); + } Real my_coord = me->relative_coordinate (common, Y_AXIS); Interval r (relative_pure_height (me, start, end)); @@ -442,7 +532,7 @@ Axis_group_interface::get_children (Grob *me, vector *found) } } -bool +static bool staff_priority_less (Grob * const &g1, Grob * const &g2) { Real priority_1 = robust_scm2double (g1->get_property ("outside-staff-priority"), -infinity_f); @@ -466,6 +556,15 @@ staff_priority_less (Grob * const &g1, Grob * const &g2) return start_1 < start_2; } +static bool +pure_staff_priority_less (Grob * const &g1, Grob * const &g2) +{ + Real priority_1 = robust_scm2double (g1->get_property ("outside-staff-priority"), -infinity_f); + Real priority_2 = robust_scm2double (g2->get_property ("outside-staff-priority"), -infinity_f); + + return priority_1 < priority_2; +} + static void add_boxes (Grob *me, Grob *x_common, Grob *y_common, vector *const boxes, Skyline_pair *skylines) { @@ -554,7 +653,7 @@ add_grobs_of_one_priority (Skyline_pair *const skylines, b.translate (Offset (0, dir*dist)); elements[i]->translate_axis (dir*dist, Y_AXIS); } - (*skylines)[dir].insert (b, 0, X_AXIS); + skylines->insert (b, 0, X_AXIS); elements[i]->set_property ("outside-staff-priority", SCM_BOOL_F); last_affected_position[dir] = b[X_AXIS][RIGHT]; } @@ -614,7 +713,7 @@ Axis_group_interface::skyline_spacing (Grob *me, vector elements) SCM priority = elements[i]->get_property ("outside-staff-priority"); vector current_elts; current_elts.push_back (elements[i]); - while (i + 1 < elements.size () + while (i + 1 < elements.size () && scm_eq_p (elements[i+1]->get_property ("outside-staff-priority"), priority)) { if (!to_boolean (elements[i+1]->get_property ("cross-staff"))) @@ -628,21 +727,6 @@ Axis_group_interface::skyline_spacing (Grob *me, vector elements) return skylines; } -MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_max_stretch, 1) -SCM -Axis_group_interface::calc_max_stretch (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Real ret = 0; - extract_grob_set (me, "elements", elts); - - for (vsize i = 0; i < elts.size (); i++) - if (Axis_group_interface::has_interface (elts[i])) - ret += robust_scm2double (elts[i]->get_property ("max-stretch"), 0.0); - - return scm_from_double (ret); -} - MAKE_SCHEME_CALLBACK (Axis_group_interface, print, 1) SCM Axis_group_interface::print (SCM smob) @@ -662,20 +746,79 @@ Axis_group_interface::print (SCM smob) return ret.smobbed_copy (); } +MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_pure_staff_staff_spacing, 3) +SCM +Axis_group_interface::calc_pure_staff_staff_spacing (SCM smob, SCM start, SCM end) +{ + return calc_maybe_pure_staff_staff_spacing (unsmob_grob (smob), + true, + scm_to_int (start), + scm_to_int (end)); +} + +MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_staff_staff_spacing, 1) +SCM +Axis_group_interface::calc_staff_staff_spacing (SCM smob) +{ + return calc_maybe_pure_staff_staff_spacing (unsmob_grob (smob), + false, + 0, + INT_MAX); +} + +SCM +Axis_group_interface::calc_maybe_pure_staff_staff_spacing (Grob *me, bool pure, int start, int end) +{ + Grob *grouper = unsmob_grob (me->get_object ("staff-grouper")); + + if (grouper) + { + bool within_group = Staff_grouper_interface::maybe_pure_within_group (grouper, me, pure, start, end); + if (within_group) + return grouper->get_maybe_pure_property ("staff-staff-spacing", pure, start, end); + else + return grouper->get_maybe_pure_property ("staffgroup-staff-spacing", pure, start, end); + } + return me->get_maybe_pure_property ("default-staff-staff-spacing", pure, start, end); +} + +Real +Axis_group_interface::minimum_distance (Grob *g1, Grob *g2, Axis a) +{ + SCM sym = ly_symbol2scm ((a == Y_AXIS) ? "vertical-skylines" : "horizontal-skylines"); + + Skyline_pair *s1 = Skyline_pair::unsmob (g1->get_property (sym)); + Skyline_pair *s2 = Skyline_pair::unsmob (g2->get_property (sym)); + if (s1 && s2) + return (*s1)[DOWN].distance ((*s2)[UP]); + return 0; +} + ADD_INTERFACE (Axis_group_interface, "An object that groups other layout objects.", + // TODO: some of these properties are specific to + // VerticalAxisGroup. We should split off a + // vertical-axis-group-interface. /* properties */ - "X-common " - "Y-common " "adjacent-pure-heights " "axes " + "default-staff-staff-spacing " "elements " - "keep-fixed-while-stretching " "max-stretch " "no-alignment " - "pure-Y-common " + "nonstaff-nonstaff-spacing " + "nonstaff-relatedstaff-spacing " + "nonstaff-unrelatedstaff-spacing " + "pure-relevant-grobs " "pure-relevant-items " "pure-relevant-spanners " + "pure-Y-common " + "staff-affinity " + "staff-grouper " + "staff-staff-spacing " + "system-Y-offset " "vertical-skylines " + "X-common " + "Y-common " ); diff --git a/lily/balloon-engraver.cc b/lily/balloon-engraver.cc index d13c527ef6..95e807339f 100644 --- a/lily/balloon-engraver.cc +++ b/lily/balloon-engraver.cc @@ -1,10 +1,20 @@ -/* - balloon-engraver.cc -- implement Balloon_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" diff --git a/lily/balloon.cc b/lily/balloon.cc index 0c82fdca8e..c4efb46b68 100644 --- a/lily/balloon.cc +++ b/lily/balloon.cc @@ -1,25 +1,41 @@ /* - balloon.cc -- implement Balloon + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "text-interface.hh" #include "grob.hh" +#include "item.hh" #include "line-interface.hh" #include "lookup.hh" #include "font-interface.hh" #include "lily-guile.hh" #include "output-def.hh" #include "misc.hh" +#include "spanner.hh" class Balloon_interface { public: DECLARE_SCHEME_CALLBACK (print, (SCM)); + DECLARE_SCHEME_CALLBACK (print_spanner, (SCM)); DECLARE_GROB_INTERFACE (); + + static SCM internal_balloon_print (Grob *me, Grob *p, Offset off); }; MAKE_SCHEME_CALLBACK (Balloon_interface, print, 1); @@ -28,19 +44,60 @@ Balloon_interface::print (SCM smob) { Grob *me = unsmob_grob (smob); + if (Item *item = dynamic_cast (me)) + if (!Item::break_visible (item)) + return SCM_EOL; + Grob *p = me->get_parent (X_AXIS); - + Offset off (me->relative_coordinate (p, X_AXIS), me->relative_coordinate (p, Y_AXIS)); + return internal_balloon_print (me, p, off); +} + +MAKE_SCHEME_CALLBACK (Balloon_interface, print_spanner, 1); +SCM +Balloon_interface::print_spanner (SCM smob) +{ + Spanner *me = unsmob_spanner (smob); + Spanner *orig = dynamic_cast (me->original ()); + + if (orig) + { + Direction spanner_placement = robust_scm2dir (me->get_property ("spanner-placement"), LEFT); + + Spanner *wanted = (spanner_placement != RIGHT) + ? orig->broken_intos_[0] + : orig->broken_intos_.back (); + + if (me != wanted) + return SCM_EOL; + } + + + Spanner *p = dynamic_cast (me->get_parent (Y_AXIS)); + + if (!p) + return SCM_EOL; + + Offset off (me->relative_coordinate (me->get_bound (LEFT), X_AXIS), + me->relative_coordinate (p, Y_AXIS)); + return internal_balloon_print (me, p, off); +} + +SCM +Balloon_interface::internal_balloon_print (Grob *me, Grob *p, Offset off) +{ Box b (p->extent (p, X_AXIS), p->extent (p, Y_AXIS)); - Real padding = robust_scm2double (me->get_property ("padding"), .1); b.widen (padding, padding); // FIXME - Stencil fr = Lookup::frame (b, 0.1, 0.05); + Stencil fr; + if (to_boolean (me->get_property ("annotation-balloon"))) + fr = Lookup::frame (b, 0.1, 0.05); SCM bt = me->get_property ("text"); SCM chain = Font_interface::text_font_alist_chain (me); @@ -60,7 +117,8 @@ Balloon_interface::print (SCM smob) Offset z2 = z1 + off; - fr.add_stencil (Line_interface::line (me, z1, z2)); + if (to_boolean (me->get_property ("annotation-line"))) + fr.add_stencil (Line_interface::line (me, z1, z2)); text_stil->translate (z2); fr.add_stencil (*text_stil); @@ -74,7 +132,10 @@ ADD_INTERFACE (Balloon_interface, " object.", /* properties */ + "annotation-balloon " + "annotation-line " "padding " + "spanner-placement " "text " ); diff --git a/lily/bar-check-iterator.cc b/lily/bar-check-iterator.cc index 8ac67109bf..09f06b1fc2 100644 --- a/lily/bar-check-iterator.cc +++ b/lily/bar-check-iterator.cc @@ -1,9 +1,20 @@ /* - bar-check-iterator.cc -- implement Bar_check_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index 6bf118ae8b..badd058e54 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -1,10 +1,21 @@ /* - bar-engraver.cc -- implement Bar_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "bar-line.hh" diff --git a/lily/bar-line.cc b/lily/bar-line.cc index c9d9159a4c..a2d6588726 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -1,35 +1,42 @@ /* - bar-line.cc -- implement Bar_line + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "bar-line.hh" #include "all-font-metrics.hh" #include "font-interface.hh" +#include "line-interface.hh" #include "lookup.hh" #include "output-def.hh" #include "paper-column.hh" #include "staff-symbol-referencer.hh" -#include "line-interface.hh" MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_extent, 1) SCM Bar_line::calc_bar_extent (SCM smob) { + Interval result; Grob *me = unsmob_grob (smob); + if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) + result = staff->extent (staff, Y_AXIS); - SCM size = me->get_property ("bar-size"); - - if (!scm_is_number (size) - || !Staff_symbol_referencer::get_staff_symbol (me)) - return ly_interval2scm (Interval ()); - - Real h = scm_to_double (size); - return ly_interval2scm (Interval (-h/2, h/2)); + return ly_interval2scm (result); } Interval @@ -41,6 +48,12 @@ Bar_line::bar_y_extent (Grob *me, Grob *refpoint) return iv; } +bool +Bar_line::non_empty_barline (Grob *me) +{ + return has_interface (me) && !me->extent (me, X_AXIS).is_empty (); +} + MAKE_SCHEME_CALLBACK (Bar_line, print, 1); SCM Bar_line::print (SCM smob) @@ -48,22 +61,24 @@ Bar_line::print (SCM smob) Grob *me = unsmob_grob (smob); SCM s = me->get_property ("glyph-name"); - SCM barsize = me->get_property ("bar-size"); - - if (scm_is_string (s) && scm_is_number (barsize)) + SCM extent = me->get_property ("bar-extent"); + + if (scm_is_string (s) && is_number_pair (extent)) { string str = ly_scm2string (s); - Real sz = robust_scm2double (barsize, 0); - if (sz <= 0) - return SCM_EOL; + Interval ex = ly_scm2interval (extent); + if (ex.length () > 0) + { + Stencil result = compound_barline (me, str, ex, false); - return compound_barline (me, str, sz, false).smobbed_copy (); + return result.smobbed_copy (); + } } return SCM_EOL; } Stencil -Bar_line::compound_barline (Grob *me, string str, Real h, +Bar_line::compound_barline (Grob *me, string str, Interval const &extent, bool rounded) { Real kern = robust_scm2double (me->get_property ("kern"), 1); @@ -79,8 +94,8 @@ Bar_line::compound_barline (Grob *me, string str, Real h, hair *= staffline; fatline *= staffline; - Stencil thin = simple_barline (me, hair, h, rounded); - Stencil thick = simple_barline (me, fatline, h, rounded); + Stencil thin = simple_barline (me, hair, extent, rounded); + Stencil thick = simple_barline (me, fatline, extent, rounded); Stencil dot = Font_interface::get_default_font (me)->find_by_name ("dots.dot"); int lines = Staff_symbol_referencer::line_count (me); @@ -93,29 +108,24 @@ Bar_line::compound_barline (Grob *me, string str, Real h, colon.add_stencil (dot); colon.translate_axis (-dist / 2, Y_AXIS); + Real const h = extent.length (); Stencil m; - Grob *staff = Staff_symbol_referencer::get_staff_symbol (me); - Real center = 0; - if (staff) - { - Interval staff_extent = staff->extent (staff, Y_AXIS); - center = staff_extent.center (); - } if (str == "||:") str = "|:"; + if (str == "|S" || str == "S|") + str = "S"; + if (str == "") { - Stencil empty = Lookup::blank (Box (Interval (0, 0), Interval (-h / 2, h / 2))); - empty.translate_axis (center, Y_AXIS); + Stencil empty = Lookup::blank (Box (Interval (0, 0), extent)); return empty; } else if (str == "|") - { - thin.translate_axis (center, Y_AXIS); - return thin; - } + return thin; + else if (str == ".") + return thick; else if (str == "|." || (h == 0 && str == ":|")) { m.add_at_edge (X_AXIS, LEFT, thick, 0); @@ -152,7 +162,6 @@ Bar_line::compound_barline (Grob *me, string str, Real h, m.add_at_edge (X_AXIS, LEFT, colon, kern); m.add_at_edge (X_AXIS, RIGHT, thin, kern); m.add_at_edge (X_AXIS, RIGHT, colon, kern); - } else if (str == ":|.:") { @@ -177,44 +186,100 @@ Bar_line::compound_barline (Grob *me, string str, Real h, /* should align to other side? this never appears on the system-start? + m.add_at_edge (X_AXIS, RIGHT, thin, 0); + m.add_at_edge (X_AXIS, RIGHT, thin, thinkern); */ - m.add_at_edge (X_AXIS, RIGHT, thin, 0); + m.add_at_edge (X_AXIS, LEFT, thin, thinkern); m.add_at_edge (X_AXIS, RIGHT, thin, thinkern); } - else if (str == ":") + else if (str.find ("S") != NPOS || str == "|._.|") { - int c = (Staff_symbol_referencer::line_count (me)); - - for (int i = 0; i < c - 1; i++) + // Handle all varsegno stuff + Stencil segno; + segno.add_at_edge (X_AXIS, LEFT, thin, thinkern); + segno.add_at_edge (X_AXIS, RIGHT, thin, thinkern); + segno.add_stencil (Font_interface::get_default_font (me)->find_by_name ("scripts.varsegno")); + + if (str == "S") + m.add_stencil (segno); + else if (str == "S|:" || str == ".S|:") { - Real y = (- (c - 1.0) / 2 + 0.5 + i) * staff_space; - Stencil d (dot); - - d.translate_axis (y, Y_AXIS); - m.add_stencil (d); + m.add_at_edge (X_AXIS, RIGHT, thick, 0); + m.add_at_edge (X_AXIS, RIGHT, thin, kern); + m.add_at_edge (X_AXIS, RIGHT, colon, kern); + m.add_at_edge (X_AXIS, LEFT, segno, thinkern); + } + else if (str == ":|S" || str == ":|S.") + { + m.add_at_edge (X_AXIS, LEFT, thick, 0); + m.add_at_edge (X_AXIS, LEFT, thin, kern); + m.add_at_edge (X_AXIS, LEFT, colon, kern); + m.add_at_edge (X_AXIS, RIGHT, segno, thinkern); + } + else if (str == ":|S|:" || str == ":|S.|:") + { + m.add_at_edge (X_AXIS, LEFT, thick, 0); + m.add_at_edge (X_AXIS, LEFT, thin, kern); + m.add_at_edge (X_AXIS, LEFT, colon, kern); + m.add_at_edge (X_AXIS, RIGHT, segno, thinkern); + m.add_at_edge (X_AXIS, RIGHT, thick, thinkern); + m.add_at_edge (X_AXIS, RIGHT, thin, kern); + m.add_at_edge (X_AXIS, RIGHT, colon, kern); + } + else if (str == "|._.|") // :|S|: or :|S.|: without segno and colon + { + // get the width of the segno sign + Real segno_width = segno.extent (X_AXIS).length (); + m.add_at_edge (X_AXIS, LEFT, thick, 0); + m.add_at_edge (X_AXIS, LEFT, thin, kern); + m.add_at_edge (X_AXIS, RIGHT, thick, segno_width + 2 * thinkern); + m.add_at_edge (X_AXIS, RIGHT, thin, kern); } + // end varsegno block } - else if (str == "dashed") + else if (str == ":") { - m = dashed_bar_line (me, h, hair); + if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) + { + Interval staff_extent = staff->extent (staff, Y_AXIS); + + /* + assume staff lines are disposed equally at unit space; + put a dot into each space within extent (may extend staff_extent). + + staff_extent is an interval of two integers or two half-integers; + in the former case dots are to be placed at half-integers, + in the latter at integers. + + these integers are not exact due to staff line thickness. + */ + int const pos = int (rint (staff_extent.at (UP) * 2)); + Real const correction = pos & 1 ? 0.0 : 0.5; + + for (int i = int (rint (extent.at (DOWN) + (0.5 - correction))), + e = int (rint (extent.at (UP) + (0.5 - correction))); + i < e; + ++i) + { + Stencil d (dot); + + d.translate_axis (i + correction, Y_AXIS); + m.add_stencil (d); + } + } } + else if (str == "dashed") + m = dashed_bar_line (me, extent, hair); else if (str == "'") - { - m = tick_bar_line (me, h, rounded); - } - else if (str == ".") - { - m = dot; - } + m = tick_bar_line (me, extent.at (UP), rounded); - m.translate_axis (center, Y_AXIS); return m; } Stencil Bar_line::simple_barline (Grob *me, Real w, - Real h, + Interval const &extent, bool rounded) { Real blot @@ -222,8 +287,7 @@ Bar_line::simple_barline (Grob *me, ? me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")) : 0.0; - return Lookup::round_filled_box (Box (Interval (0, w), - Interval (-h / 2, h / 2)), blot); + return Lookup::round_filled_box (Box (Interval (0, w), extent), blot); } Stencil @@ -238,26 +302,11 @@ Bar_line::tick_bar_line (Grob *me, Real h, bool rounded) : 0.0; return Lookup::round_filled_box (Box (Interval (0, line_thick), - Interval (h / 2 - th, h / 2 + th)), blot); -} - - -MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_size, 1); -SCM -Bar_line::calc_bar_size (SCM smob) -{ - Grob *me = unsmob_grob (smob); - if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) - { - Interval staff_y = staff->extent (staff, Y_AXIS); - return scm_from_double (staff_y.is_empty () ? 0.0 : staff_y.length ()); - } - return scm_from_int (0); + Interval (h - th, h + th)), blot); } - Stencil -Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) +Bar_line::dashed_bar_line (Grob *me, Interval const &extent, Real thick) { Real dash_size = 1.0 - robust_scm2double (me->get_property ("gap"), 0.3); @@ -265,25 +314,32 @@ Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) this is a tad complex for what we want to achieve, but with a simple line, the round blotting interferes with staff line connections. - */ + */ Real ss = Staff_symbol_referencer::staff_space (me); - int count = Staff_symbol_referencer::line_count (me); - Real line_thick = Staff_symbol_referencer::line_thickness (me); + Real const h = extent.length (); + int dashes = int (rint (h / ss)); - if (fabs (line_thick + (count -1) * ss - h) < 0.1) // ugh. + /* + there are two concerns: + 1. one dash plus one space should be one staff space + 2. the line should begin and end with half a dash + + both can be satisfied, if the extent is (roughly) an integer + multiple of staff space. + */ + if (fabs (h / ss - dashes) < 0.1) { - Real blot = - me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); + Real blot + = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); - Real half_space = ss/2; + Real const half_dash = dash_size / 2; Stencil bar; - - for (int i = (count-1); i >= -(count-1); i -= 2) + + for (int i = 0; i <= dashes; ++i) { - Real top_y = min ((i + dash_size) * half_space, - (count-1) * half_space + line_thick / 2); - Real bot_y = max ((i - dash_size) * half_space, - -(count-1) * half_space - line_thick/2); + Real top_y = extent.at (DOWN) + + (i == dashes ? h : (i + half_dash) * ss); + Real bot_y = extent.at (DOWN) + (i ? (i - half_dash) * ss : 0.0); bar.add_stencil (Lookup::round_filled_box (Box (Interval (0, thick), Interval (bot_y, top_y)), @@ -296,15 +352,14 @@ Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) /* We have to scale the dashing so it starts and ends with half a dash exactly. - */ - int dashes = int (rint (h / ss)); + */ Real total_dash_size = h / dashes; Real factor = (dash_size - thick) / ss; - + SCM at = scm_list_n (ly_symbol2scm ("dashed-line"), scm_from_double (thick), scm_from_double (factor * total_dash_size), - scm_from_double ((1-factor) * total_dash_size), + scm_from_double ((1 - factor) * total_dash_size), scm_from_double (0), scm_from_double (h), scm_from_double (factor * total_dash_size * 0.5), @@ -315,7 +370,7 @@ Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) box.add_point (Offset (0, h)); Stencil s (box, at); - s.translate (Offset (thick/2, -h/2)); + s.translate (Offset (thick / 2, extent.at (DOWN))); return s; } return Stencil (); @@ -355,21 +410,38 @@ ADD_INTERFACE (Bar_line, "Print a special bar symbol. It replaces the regular bar" " symbol with a special symbol. The argument @var{bartype}" " is a string which specifies the kind of bar line to print." - " Options are @code{:|}, @code{|:}, @code{:|:}, @code{:|.|:}," - " @code{:|.:}, @code{||}, @code{|.}, @code{.|}, @code{.|.}," - " @code{|.|}, @code{:} and @code{dashed}.\n" + " Options are @code{|}, @code{:|}, @code{|:}, @code{:|:}, @code{:|.|:}," + " @code{:|.:}, @code{.}, @code{||}, @code{|.}, @code{.|}, @code{.|.}," + " @code{|.|}, @code{:}, @code{dashed}, @code{'} and @code{S}.\n" "\n" - "These produce, respectively, a right repeat, a left repeat," + "These produce, respectively, a normal bar line, a right repeat, a left repeat," " a thick double repeat, a thin-thick-thin double repeat," - " a thin-thick double repeat, a double bar, a start bar," + " a thin-thick double repeat, a thick bar, a double bar, a start bar," " an end bar, a thick double bar, a thin-thick-thin bar," - " a dotted bar and a dashed bar." - " In addition, there is an option" + " a dotted bar, a dashed bar, a tick as bar line and a segno bar.\n" + "\n" + "In addition, there is an option" " @code{||:} which is equivalent to @code{|:} except at line" " breaks, where it produces a double bar (@code{||}) at the" " end of the line and a repeat sign (@code{|:}) at the" " beginning of the new line.\n" "\n" + "For segno, @code{S} produces a segno sign except at line breaks," + " where it produces a double bar (@code{||}) at the" + " end of the line and a segno sign at the beginning of the new line." + " @code{|S} is equivalent to @code{S} but produces a simple bar line" + " (@code{|}) instead of a double bar line (@code{||}) at line breaks." + " @code{S|} produces the segno sign at line breaks and starts the following" + " line without special bar lines.\n" + "\n" + "@code{S|:} and @code{:|S} are used for repeat/segno combinations that are" + " separated at line breaks. Alternatively, @code{.S|:} and @code{:|S.}" + " may be used which combine repeat signs and segno at the same line in" + " case of a line break. @code{:|S|:} is a combination of a left repeat" + " (@code{:|}), a segno (@code{S}) and a right repeat @code{|:} which" + " splits before the segno at line breaks; @code{:|S.|:} splits after" + " the segno sign.\n" + "\n" "If @var{bartype} is set to @code{empty} then nothing is" " printed, but a line break is allowed at that spot.\n" "\n" @@ -384,6 +456,5 @@ ADD_INTERFACE (Bar_line, "thick-thickness " "glyph " "glyph-name " - "bar-size " "bar-extent " ); diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index 61242297cd..82bc09f0ed 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -1,9 +1,20 @@ /* - bar-number-engraver.cc -- implement Bar_number_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "paper-column.hh" @@ -26,7 +37,6 @@ protected: Item *text_; protected: void stop_translation_timestep (); - DECLARE_ACKNOWLEDGER (break_aligned); DECLARE_ACKNOWLEDGER (break_alignment); void process_music (); void create_items (); @@ -62,28 +72,6 @@ Bar_number_engraver::Bar_number_engraver () text_ = 0; } - -/* - see rehearsal mark comments. - */ -void -Bar_number_engraver::acknowledge_break_aligned (Grob_info inf) -{ - Grob *s = inf.grob (); - if (text_ - && !text_->get_parent (X_AXIS) - && dynamic_cast (s) - && (s->get_property_data ("break-align-symbol") - == text_->get_property_data ("break-align-symbol"))) - { - /* - By default this would land on the Paper_column -- so why - doesn't it work when you leave this out? */ - text_->set_parent (s, X_AXIS); - } -} - - void Bar_number_engraver::acknowledge_break_alignment (Grob_info inf) { @@ -116,7 +104,6 @@ Bar_number_engraver::create_items () } -ADD_ACKNOWLEDGER (Bar_number_engraver, break_aligned); ADD_ACKNOWLEDGER (Bar_number_engraver, break_alignment); ADD_TRANSLATOR (Bar_number_engraver, diff --git a/lily/beam-collision-engraver.cc b/lily/beam-collision-engraver.cc new file mode 100644 index 0000000000..cdb4be6270 --- /dev/null +++ b/lily/beam-collision-engraver.cc @@ -0,0 +1,191 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2011 Mike Solomon + + 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 . +*/ + +#include "beam.hh" +#include "engraver.hh" +#include "item.hh" +#include "note-head.hh" +#include "pointer-group-interface.hh" +#include "stem.hh" + +class Beam_collision_engraver : public Engraver +{ +protected: + vector beams_; + vector covered_grobs_; + + DECLARE_ACKNOWLEDGER (note_head); + DECLARE_ACKNOWLEDGER (stem); + DECLARE_ACKNOWLEDGER (accidental); + DECLARE_ACKNOWLEDGER (clef); + DECLARE_ACKNOWLEDGER (key_signature); + DECLARE_ACKNOWLEDGER (time_signature); + DECLARE_ACKNOWLEDGER (beam); + + virtual void finalize (); + +private: + bool covered_grob_has_interface (Grob *covered_grob, Grob *beam); + +public: + TRANSLATOR_DECLARATIONS (Beam_collision_engraver); +}; + +Beam_collision_engraver::Beam_collision_engraver () {} + +bool +Beam_collision_engraver::covered_grob_has_interface (Grob *covered_grob, Grob *beam) +{ + SCM interfaces = beam->get_property ("collision-interfaces"); + + for (SCM l = interfaces; scm_is_pair (l); l = scm_cdr (l)) + { + if (covered_grob->internal_has_interface (scm_car (l))) + return true; + } + + return false; +} + +void +Beam_collision_engraver::finalize () +{ + if (!covered_grobs_.size ()) + return; + + vector_sort (covered_grobs_, Grob_info::less); + vector_sort (beams_, Grob_info::less); + vsize start = 0; + + for (vsize i = 0; i < beams_.size (); i++) + { + Grob *beam_grob = beams_[i].grob (); + + Context *beam_context = beams_[i].context (); + + Interval_t beam_spanned_rank_ = beam_grob->spanned_rank_interval (); + // Start considering grobs at the first grob whose end falls at or after the beam's beginning. + while (covered_grobs_[start].grob ()->spanned_rank_interval ()[RIGHT] < beam_spanned_rank_[LEFT]) + start++; + + // Stop when the grob's beginning comes after the beam's end. + for (vsize j = start; j < covered_grobs_.size (); j++) + { + Grob *covered_grob = covered_grobs_[j].grob (); + Context *covered_grob_context = covered_grobs_[j].context (); + + Interval_t covered_grob_spanned_rank = covered_grob->spanned_rank_interval (); + if (covered_grob_spanned_rank[LEFT] > beam_spanned_rank_[RIGHT]) + break; + /* + Only consider grobs whose end falls at or after the beam's beginning. + If the grob is a beam, it cannot start before beams_[i]. + Also, if the user wants to check for collisions only in the beam's voice, + then make sure the beam and the covered_grob are in the same voice. + */ + if ((covered_grob_spanned_rank[RIGHT] >= beam_spanned_rank_[LEFT]) + && !(to_boolean (beam_grob->get_property ("collision-voice-only")) + && (covered_grob_context != beam_context)) + && !(Beam::has_interface (covered_grob) + && (covered_grob_spanned_rank[LEFT] <= beam_spanned_rank_[LEFT])) + && covered_grob_has_interface (covered_grob, beam_grob)) + { + // Do not consider note heads attached to the beam. + if (Stem::has_interface (covered_grob)) + if (unsmob_grob (covered_grob->get_object ("beam"))) + continue; + + if (Grob *stem = unsmob_grob (covered_grob->get_object ("stem"))) + if (Grob *beam = unsmob_grob (stem->get_object ("beam"))) + if (beam == beam_grob) + continue; + + Pointer_group_interface::add_grob (beam_grob, ly_symbol2scm ("covered-grobs"), covered_grob); + } + } + } +} + +void +Beam_collision_engraver::acknowledge_note_head (Grob_info i) +{ + covered_grobs_.push_back (i); +} + +void +Beam_collision_engraver::acknowledge_stem (Grob_info i) +{ + covered_grobs_.push_back (i); +} + +void +Beam_collision_engraver::acknowledge_accidental (Grob_info i) +{ + if (i.grob ()->internal_has_interface (ly_symbol2scm ("inline-accidental-interface"))) + covered_grobs_.push_back (i); +} + +void +Beam_collision_engraver::acknowledge_clef (Grob_info i) +{ + covered_grobs_.push_back (i); +} + +void +Beam_collision_engraver::acknowledge_key_signature (Grob_info i) +{ + covered_grobs_.push_back (i); +} + +void +Beam_collision_engraver::acknowledge_time_signature (Grob_info i) +{ + covered_grobs_.push_back (i); +} + +void +Beam_collision_engraver::acknowledge_beam (Grob_info i) +{ + beams_.push_back (i); + covered_grobs_.push_back (i); +} + +#include "translator.icc" + +ADD_ACKNOWLEDGER (Beam_collision_engraver, note_head); +ADD_ACKNOWLEDGER (Beam_collision_engraver, stem); +ADD_ACKNOWLEDGER (Beam_collision_engraver, accidental); +ADD_ACKNOWLEDGER (Beam_collision_engraver, clef); +ADD_ACKNOWLEDGER (Beam_collision_engraver, key_signature); +ADD_ACKNOWLEDGER (Beam_collision_engraver, time_signature); +ADD_ACKNOWLEDGER (Beam_collision_engraver, beam); + +ADD_TRANSLATOR (Beam_collision_engraver, + /* doc */ + "Help beams avoid colliding with notes and clefs in other voices.", + + /* create */ + "", + + /* read */ + "", + + /* write */ + "" + ); diff --git a/lily/beam-concave.cc b/lily/beam-concave.cc index 48d45c8599..7ca626b609 100644 --- a/lily/beam-concave.cc +++ b/lily/beam-concave.cc @@ -1,10 +1,20 @@ -/* - beam-concave.cc -- implement Concaveness for beams. - - source file of the GNU LilyPond music typesetter - - (c) 2004 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2004 Han-Wen Nienhuys + + 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 . */ /* diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index 43c1264741..04e571f68a 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -1,14 +1,26 @@ /* - beam-engraver.cc -- implement Beam_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "beam.hh" #include "beaming-pattern.hh" #include "context.hh" +#include "directional-element-interface.hh" #include "drul-array.hh" #include "duration.hh" #include "engraver.hh" @@ -37,6 +49,8 @@ protected: Stream_event *stop_ev_; + Direction forced_direction_; + Beaming_pattern *beam_info_; Beaming_pattern *finished_beam_info_; @@ -48,7 +62,7 @@ protected: Beaming_options beaming_options_; Beaming_options finished_beaming_options_; - + void typeset_beam (); void set_melisma (bool); @@ -91,6 +105,7 @@ Beam_engraver::Beam_engraver () finished_beam_ = 0; finished_beam_info_ = 0; beam_info_ = 0; + forced_direction_ = CENTER; stop_ev_ = 0; start_ev_ = 0; prev_start_ev_ = 0; @@ -103,7 +118,13 @@ Beam_engraver::listen_beam (Stream_event *ev) Direction d = to_dir (ev->get_property ("span-direction")); if (d == START && valid_start_point ()) - ASSIGN_EVENT_ONCE (start_ev_, ev); + { + ASSIGN_EVENT_ONCE (start_ev_, ev); + + Direction updown = to_dir (ev->get_property ("direction")); + if (updown) + forced_direction_ = updown; + } else if (d == STOP && valid_end_point ()) ASSIGN_EVENT_ONCE (stop_ev_, ev); } @@ -130,7 +151,9 @@ Beam_engraver::process_music () set_melisma (true); prev_start_ev_ = start_ev_; beam_ = make_spanner ("Beam", start_ev_->self_scm ()); - Moment mp (robust_scm2moment (get_property ("measurePosition"), Moment (0))); + + Moment mp (robust_scm2moment (get_property ("measurePosition"), + Moment (0))); beam_start_location_ = mp; beam_start_mom_ = now_mom (); @@ -144,7 +167,7 @@ Beam_engraver::process_music () if (stop_ev_ && beam_) { announce_end_grob (beam_, stop_ev_->self_scm ()); - + } } @@ -155,13 +178,20 @@ Beam_engraver::typeset_beam () { if (!finished_beam_->get_bound (RIGHT)) finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT)); - + if (forced_direction_) + { + Grob *stem = finished_beam_->get_bound (RIGHT); + set_grob_direction (stem, forced_direction_); + forced_direction_ = CENTER; + } finished_beam_info_->beamify (finished_beaming_options_); + Beam::set_beaming (finished_beam_, finished_beam_info_); delete finished_beam_info_; finished_beam_info_ = 0; finished_beam_ = 0; + } } @@ -171,9 +201,7 @@ Beam_engraver::start_translation_timestep () start_ev_ = 0; if (beam_) - { - set_melisma (true); - } + set_melisma (true); } void @@ -184,7 +212,7 @@ Beam_engraver::stop_translation_timestep () finished_beam_ = beam_; finished_beam_info_ = beam_info_; finished_beaming_options_ = beaming_options_; - + stop_ev_ = 0; beam_ = 0; beam_info_ = 0; @@ -214,20 +242,16 @@ Beam_engraver::acknowledge_rest (Grob_info info) { if (beam_ && !scm_is_number (info.grob ()->get_property_data ("staff-position"))) - { - chain_offset_callback (info.grob (), - Beam::rest_collision_callback_proc, Y_AXIS); - } + chain_offset_callback (info.grob (), + Beam::rest_collision_callback_proc, Y_AXIS); } - - void Beam_engraver::acknowledge_stem (Grob_info info) { if (!beam_) return; - + Moment now = now_mom (); if (!valid_start_point ()) return; @@ -236,8 +260,6 @@ Beam_engraver::acknowledge_stem (Grob_info info) if (Stem::get_beam (stem)) return; - - Stream_event *ev = info.ultimate_event_cause (); if (!ev->in_event_class ("rhythmic-event")) { @@ -258,8 +280,10 @@ Beam_engraver::acknowledge_stem (Grob_info info) */ } - stem->set_property ("duration-log", - scm_from_int (durlog)); + if (forced_direction_) + set_grob_direction (stem, forced_direction_); + + stem->set_property ("duration-log", scm_from_int (durlog)); Moment stem_location = now - beam_start_mom_ + beam_start_location_; beam_info_->add_stem (stem_location, max (durlog- 2, 0), @@ -274,13 +298,14 @@ ADD_TRANSLATOR (Beam_engraver, /* doc */ "Handle @code{Beam} events by engraving beams. If omitted," " then notes are printed with flags instead of beams.", - + /* create */ "Beam ", /* read */ + "baseMoment " "beamMelismaBusy " - "beatLength " + "beatStructure " "subdivideBeams ", /* write */ @@ -293,7 +318,7 @@ public: TRANSLATOR_DECLARATIONS (Grace_beam_engraver); DECLARE_TRANSLATOR_LISTENER (beam); - + protected: virtual bool valid_start_point (); virtual bool valid_end_point (); @@ -341,13 +366,14 @@ ADD_TRANSLATOR (Grace_beam_engraver, "Handle @code{Beam} events by engraving beams. If omitted," " then notes are printed with flags instead of beams. Only" " engraves beams when we are at grace points in time.", - + /* create */ "Beam ", /* read */ + "baseMoment " "beamMelismaBusy " - "beatLength " + "beatStructure " "subdivideBeams ", /* write */ diff --git a/lily/beam-performer.cc b/lily/beam-performer.cc index bd85a6a1f1..d14879bf93 100644 --- a/lily/beam-performer.cc +++ b/lily/beam-performer.cc @@ -1,9 +1,20 @@ /* - beam-performer.cc -- implement Beam_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Jan Nieuwenhuizen - (c) 1996--2009 Jan Nieuwenhuizen + 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 . */ #include "performer.hh" diff --git a/lily/beam-quanting.cc b/lily/beam-quanting.cc index ed13214502..c5cafd5cfa 100644 --- a/lily/beam-quanting.cc +++ b/lily/beam-quanting.cc @@ -1,26 +1,44 @@ /* - beam-quanting.cc -- implement Beam quanting functions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ -#include "beam.hh" +#include "beam-scoring-problem.hh" #include +#include +#include using namespace std; -#include "grob.hh" #include "align-interface.hh" +#include "beam.hh" +#include "direction.hh" +#include "directional-element-interface.hh" +#include "grob.hh" #include "international.hh" +#include "libc-extension.hh" +#include "main.hh" #include "output-def.hh" #include "pointer-group-interface.hh" #include "staff-symbol-referencer.hh" +#include "stencil.hh" #include "stem.hh" #include "warn.hh" -#include "main.hh" Real get_detail (SCM alist, SCM sym, Real def) @@ -37,323 +55,488 @@ Beam_quant_parameters::fill (Grob *him) { SCM details = him->get_property ("details"); - /* - TODO: The default values should be copied to define-grobs.scm. - */ - INTER_QUANT_PENALTY = get_detail (details, ly_symbol2scm ("inter-quant-penalty"), 1000.0); + // General + BEAM_EPS = get_detail (details, ly_symbol2scm ("beam-eps"), 1e-3); + REGION_SIZE = get_detail (details, ly_symbol2scm ("region-size"), 2); + + // forbidden quants SECONDARY_BEAM_DEMERIT = get_detail (details, ly_symbol2scm ("secondary-beam-demerit"), 10.0); STEM_LENGTH_DEMERIT_FACTOR = get_detail (details, ly_symbol2scm ("stem-length-demerit-factor"), 5); - REGION_SIZE = get_detail (details, ly_symbol2scm ("region-size"), 2); - BEAM_EPS = get_detail (details, ly_symbol2scm ("beam-eps"), 1e-3); + HORIZONTAL_INTER_QUANT_PENALTY = get_detail (details, ly_symbol2scm ("horizontal-inter-quant"), 500); + STEM_LENGTH_LIMIT_PENALTY = get_detail (details, ly_symbol2scm ("stem-length-limit-penalty"), 5000); DAMPING_DIRECTION_PENALTY = get_detail (details, ly_symbol2scm ("damping-direction-penalty"), 800); HINT_DIRECTION_PENALTY = get_detail (details, ly_symbol2scm ("hint-direction-penalty"), 20); MUSICAL_DIRECTION_FACTOR = get_detail (details, ly_symbol2scm ("musical-direction-factor"), 400); IDEAL_SLOPE_FACTOR = get_detail (details, ly_symbol2scm ("ideal-slope-factor"), 10); ROUND_TO_ZERO_SLOPE = get_detail (details, ly_symbol2scm ("round-to-zero-slope"), 0.02); + + // Collisions + COLLISION_PENALTY = get_detail (details, ly_symbol2scm ("collision-penalty"), 500); + COLLISION_PADDING = get_detail (details, ly_symbol2scm ("collision-padding"), 0.5); + STEM_COLLISION_FACTOR = get_detail (details, ly_symbol2scm ("stem-collision-factor"), 0.1); } +// Add x if x is positive, add |x|*fac if x is negative. static Real shrink_extra_weight (Real x, Real fac) { return fabs (x) * ((x < 0) ? fac : 1.0); } -struct Quant_score +/****************************************************************/ + +Beam_configuration::Beam_configuration () +{ + y = Interval (0.0, 0.0); + demerits = 0.0; + next_scorer_todo = ORIGINAL_DISTANCE; +} + +bool Beam_configuration::done () const +{ + return next_scorer_todo >= NUM_SCORERS; +} + +void Beam_configuration::add (Real demerit, const string &reason) { - Real yl; - Real yr; - Real demerits; + demerits += demerit; #if DEBUG_BEAM_SCORING - string score_card_; + if (demerit) + score_card_ += to_string (" %s %.2f", reason.c_str (), demerit); #endif -}; +} + +Beam_configuration* Beam_configuration::new_config (Interval start, + Interval offset) +{ + Beam_configuration* qs = new Beam_configuration; + qs->y = Interval (int (start[LEFT]) + offset[LEFT], + int (start[RIGHT]) + offset[RIGHT]); + + // This orders the sequence so we try combinations closest to the + // the ideal offset first. + Real start_score = abs (offset[RIGHT]) + abs (offset[LEFT]); + qs->demerits = start_score / 1000.0; + qs->next_scorer_todo = ORIGINAL_DISTANCE + 1; + + return qs; +} + +Real +Beam_scoring_problem::y_at (Real x, Beam_configuration const* p) const { + return p->y[LEFT] + (x - x_span[LEFT]) * p->y.delta() / x_span.delta(); +} + +/****************************************************************/ /* TODO: - Make all demerits customisable - - One sensible check per demerit (what's this --hwn) - - Add demerits for quants per se, as to forbid a specific quant entirely */ -int -best_quant_score_idx (vector const &qscores) -{ - Real best = 1e6; - int best_idx = -1; - for (vsize i = qscores.size (); i--;) - { - if (qscores[i].demerits < best) - { - best = qscores [i].demerits; - best_idx = i; - } - } - - return best_idx; +// This is a temporary hack to see how much we can gain by using a +// priority queue on the beams to score. +static int score_count = 0; +LY_DEFINE (ly_beam_score_count, "ly:beam-score-count", 0, 0, 0, + (), + "count number of beam scores.") { + return scm_from_int (score_count); } -MAKE_SCHEME_CALLBACK (Beam, quanting, 2); -SCM -Beam::quanting (SCM smob, SCM posns) +void Beam_scoring_problem::add_collision (Real x, Interval y, + Real score_factor) { - Grob *me = unsmob_grob (smob); + if (edge_dirs[LEFT] == edge_dirs[RIGHT]) { + Direction d = edge_dirs[LEFT]; - Beam_quant_parameters parameters; - parameters.fill (me); + Real quant_range_y = quant_range[LEFT][-d] + + (x - x_span[LEFT]) * (quant_range[RIGHT][-d] - quant_range[LEFT][-d]) / x_span.delta(); - Real yl = scm_to_double (scm_car (posns)); - Real yr = scm_to_double (scm_cdr (posns)); + if (d*(quant_range_y - minmax(d, y[UP], y[DOWN])) > 0) { + return; + } + } - /* - Calculations are relative to a unit-scaled staff, i.e. the quants are - divided by the current staff_space. - */ - Real ss = Staff_symbol_referencer::staff_space (me); - Real thickness = Beam::get_thickness (me) / ss; - Real slt = Staff_symbol_referencer::line_thickness (me) / ss; + Beam_collision c; + c.beam_y_.set_empty (); - Real dy_mus = robust_scm2double (me->get_property ("least-squares-dy"), 0); - Real straddle = 0.0; - Real sit = (thickness - slt) / 2; - Real inter = 0.5; - Real hang = 1.0 - (thickness - slt) / 2; - Real quants [] = {straddle, sit, inter, hang }; + for (vsize j = 0; j < segments_.size (); j++) + { + if (segments_[j].horizontal_.contains(x)) + c.beam_y_.add_point (segments_[j].vertical_count_ * beam_translation); + if (segments_[j].horizontal_[LEFT] > x) + break; + } + c.beam_y_.widen (0.5 * beam_thickness); + + c.x_ = x; - int num_quants = int (sizeof (quants) / sizeof (Real)); - vector quantsl; - vector quantsr; + y *= 1/staff_space; + c.y_ = y; + c.base_penalty_ = score_factor; + collisions_.push_back (c); +} - /* - going to REGION_SIZE == 2, yields another 0.6 second with - wtk1-fugue2. +void Beam_scoring_problem::init_collisions (vector grobs) +{ + Grob* common_x = NULL; + segments_ = Beam::get_beam_segments (beam, &common_x); + vector_sort (segments_, beam_segment_less); + if (common[X_AXIS] != common_x) + { + programming_error ("Disagree on common x. Skipping collisions in beam scoring."); + return; + } - (result indexes between 70 and 575) ? --hwn. + set stems; + for (vsize i = 0; i < grobs.size (); i++) { + Box b; + for (Axis a = X_AXIS; a < NO_AXES; incr (a)) + b[a] = grobs[i]->extent(common[a], a); - */ + Real width = b[X_AXIS].length (); + Real width_factor = sqrt (width / staff_space); - /* - Do stem computations. These depend on YL and YR linearly, so we can - precompute for every stem 2 factors. - */ - vector stems - = extract_grob_array (me, "stems"); - vector stem_infos; - vector base_lengths; - vector stem_xposns; + Direction d = LEFT; + do + add_collision (b[X_AXIS][d], b[Y_AXIS], width_factor); + while (flip (&d) != LEFT); - Drul_array dirs_found (0, 0); - Grob *common[2]; + Grob* stem = unsmob_grob (grobs[i]->get_object ("stem")); + if (stem && Stem::has_interface (stem) && Stem::is_normal_stem (stem)) + { + stems.insert (stem); + } + } + + for (set::const_iterator it(stems.begin ()); it != stems.end (); it++) + { + Grob *s = *it; + Real x = s->extent (common[X_AXIS], X_AXIS).center(); + + Direction stem_dir = get_grob_direction (*it); + Interval y; + y.set_full (); + y[-stem_dir] = Stem::chord_start_y (*it) + (*it)->relative_coordinate (common[Y_AXIS], Y_AXIS) + - beam->relative_coordinate (common[Y_AXIS], Y_AXIS); + + Real factor = parameters.STEM_COLLISION_FACTOR; + if (!unsmob_grob (s->get_object ("beam")) + && !Stem::flag (s).is_empty ()) + factor = 1.0; + add_collision (x, y, factor); + } +} + +void Beam_scoring_problem::init_stems () +{ + extract_grob_set (beam, "covered-grobs", collisions); + extract_grob_set (beam, "stems", stems); for (int a = 2; a--;) - common[a] = common_refpoint_of_array (stems, me, Axis (a)); - - Grob *fvs = first_normal_stem (me); - Grob *lvs = last_normal_stem (me); - Real xl = fvs ? fvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0; - Real xr = fvs ? lvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0; - - /* - We store some info to quickly interpolate. The stemlength are - affine linear in YL and YR. If YL == YR == 0, then we might have - stem_y != 0.0, when we're cross staff. - - */ + { + common[a] = common_refpoint_of_array (stems, beam, Axis (a)); + common[a] = common_refpoint_of_array (collisions, common[a], Axis (a)); + } + + Drul_array edge_stems(Beam::first_normal_stem (beam), + Beam::last_normal_stem (beam)); + Direction d = LEFT; + do + x_span[d] = edge_stems[d] ? edge_stems[d]->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0; + while (flip (&d) != LEFT); + + Drul_array dirs_found (0, 0); for (vsize i = 0; i < stems.size (); i++) { Grob *s = stems[i]; - + if (!Stem::is_normal_stem (s)) + continue; + Stem_info si (Stem::get_stem_info (s)); - si.scale (1 / ss); + si.scale (1 / staff_space); stem_infos.push_back (si); - dirs_found[stem_infos.back ().dir_] = true; + dirs_found[si.dir_] = true; bool f = to_boolean (s->get_property ("french-beaming")) - && s != lvs && s != fvs; - - if (Stem::is_normal_stem (s)) - { - base_lengths.push_back (calc_stem_y (me, s, common, xl, xr, CENTER, - Interval (0, 0), f) / ss); - } - else - { - base_lengths.push_back (0); - } + && s != edge_stems[LEFT] && s != edge_stems[RIGHT]; - stem_xposns.push_back (s->relative_coordinate (common[X_AXIS], X_AXIS)); + Real y = Beam::calc_stem_y (beam, s, common, x_span[LEFT], x_span[RIGHT], CENTER, + Interval (0, 0), f); + base_lengths.push_back (y / staff_space); + stem_xpositions.push_back (s->relative_coordinate (common[X_AXIS], X_AXIS)); + } + + edge_dirs = Drul_array (CENTER, CENTER); + if (stem_infos.size ()) + { + edge_dirs = Drul_array (stem_infos[0].dir_, + stem_infos.back().dir_); } - bool xstaff = Align_interface::has_interface (common[Y_AXIS]); - Direction ldir = Direction (stem_infos[0].dir_); - Direction rdir = Direction (stem_infos.back ().dir_); - bool is_knee = dirs_found[LEFT] && dirs_found[RIGHT]; + is_xstaff = Align_interface::has_interface (common[Y_AXIS]); + is_knee = dirs_found[LEFT] && dirs_found[RIGHT]; + + staff_radius = Staff_symbol_referencer::staff_radius (beam); + edge_beam_counts = Drul_array + (Stem::beam_multiplicity (stems[0]).length () + 1, + Stem::beam_multiplicity (stems.back ()).length () + 1); - int region_size = (int) parameters.REGION_SIZE; + // TODO - why are we dividing by staff_space? + beam_translation = Beam::get_beam_translation (beam) / staff_space; + + d = LEFT; + do + { + quant_range[d].set_full (); + if (!edge_stems[d]) + continue; + + Real stem_offset = edge_stems[d]->relative_coordinate (common[Y_AXIS], Y_AXIS) + - beam->relative_coordinate (common[Y_AXIS], Y_AXIS); + Interval heads = Stem::head_positions(edge_stems[d]) * 0.5 * staff_space; + + Direction ed = edge_dirs[d]; + heads.widen(0.5 * staff_space + + (edge_beam_counts[d] - 1) * beam_translation + beam_thickness * .5); + quant_range[d][-ed] = heads[ed] + stem_offset; + } + while (flip (&d) != LEFT); + + init_collisions (collisions); +} +Beam_scoring_problem::Beam_scoring_problem (Grob *me, Drul_array ys) +{ + beam = me; + unquanted_y = ys; + /* - Knees are harder, lets try some more possibilities for knees. + Calculations are relative to a unit-scaled staff, i.e. the quants are + divided by the current staff_space. */ + staff_space = Staff_symbol_referencer::staff_space (me); + beam_thickness = Beam::get_beam_thickness (me) / staff_space; + line_thickness = Staff_symbol_referencer::line_thickness (me) / staff_space; + + // This is the least-squares DY, corrected for concave beams. + musical_dy = robust_scm2double (me->get_property ("least-squares-dy"), 0); + + parameters.fill (me); + init_stems (); +} + +void +Beam_scoring_problem::generate_quants (vector *scores) const +{ + int region_size = (int) parameters.REGION_SIZE; + + // Knees and collisions are harder, lets try some more possibilities if (is_knee) region_size += 2; + if (collisions_.size ()) + region_size += 2; + + Real straddle = 0.0; + Real sit = (beam_thickness - line_thickness) / 2; + Real inter = 0.5; + Real hang = 1.0 - (beam_thickness - line_thickness) / 2; + Real base_quants [] = {straddle, sit, inter, hang}; + int num_base_quants = int (sizeof (base_quants) / sizeof (Real)); /* Asymetry ? should run to <= region_size ? */ + vector unshifted_quants; for (int i = -region_size; i < region_size; i++) - for (int j = 0; j < num_quants; j++) + for (int j = 0; j < num_base_quants; j++) { - quantsl.push_back (i + quants[j] + int (yl)); - quantsr.push_back (i + quants[j] + int (yr)); + unshifted_quants.push_back (i + base_quants[j]); } - vector qscores; - - for (vsize l = 0; l < quantsl.size (); l++) - for (vsize r = 0; r < quantsr.size (); r++) + for (vsize i = 0; i < unshifted_quants.size (); i++) + for (vsize j = 0; j < unshifted_quants.size (); j++) { - Quant_score qs; - qs.yl = quantsl[l]; - qs.yr = quantsr[r]; - qs.demerits = 0.0; - - qscores.push_back (qs); + Beam_configuration *c = + Beam_configuration::new_config (unquanted_y, + Interval (unshifted_quants[i], + unshifted_quants[j])); + + Direction d = LEFT; + do + { + if (!quant_range[d].contains (c->y[d])) + { + delete c; + c = NULL; + break; + } + } + while (flip (&d) != LEFT); + if (c) + scores->push_back (c); } + +} - /* This is a longish function, but we don't separate this out into - neat modular separate subfunctions, as the subfunctions would be - called for many values of YL, YR. By precomputing various - parameters outside of the loop, we can save a lot of time. */ - for (vsize i = qscores.size (); i--;) - { - Real d = score_slopes_dy (qscores[i].yl, qscores[i].yr, - dy_mus, yr- yl, - xr - xl, - xstaff, ¶meters); - qscores[i].demerits += d; -#if DEBUG_BEAM_SCORING - qscores[i].score_card_ += to_string ("S%.2f", d); -#endif +void Beam_scoring_problem::one_scorer (Beam_configuration* config) const +{ + score_count ++; + switch (config->next_scorer_todo) { + case SLOPE_IDEAL: + score_slope_ideal (config); + break; + case SLOPE_DIRECTION: + score_slope_direction (config); + break; + case SLOPE_MUSICAL: + score_slope_musical (config); + break; + case FORBIDDEN: + score_forbidden_quants (config); + break; + case STEM_LENGTHS: + score_stem_lengths (config); + break; + case COLLISIONS: + score_collisions (config); + break; + case HORIZONTAL_INTER: + score_horizontal_inter_quants (config); + break; + + case NUM_SCORERS: + case ORIGINAL_DISTANCE: + default: + assert (false); + } + config->next_scorer_todo++; +} + + +Beam_configuration * +Beam_scoring_problem::force_score (SCM inspect_quants, const vector &configs) const +{ + Drul_array ins = ly_scm2interval (inspect_quants); + Real mindist = 1e6; + Beam_configuration *best = NULL; + for (vsize i = 0; i < configs.size (); i++) + { + Real d = fabs (configs[i]->y[LEFT]- ins[LEFT]) + fabs (configs[i]->y[RIGHT] - ins[RIGHT]); + if (d < mindist) + { + best = configs[i]; + mindist = d; + } } + if (mindist > 1e5) + programming_error ("cannot find quant"); - Real rad = Staff_symbol_referencer::staff_radius (me); - Drul_array edge_beam_counts - (Stem::beam_multiplicity (stems[0]).length () + 1, - Stem::beam_multiplicity (stems.back ()).length () + 1); - - Real beam_translation = get_beam_translation (me) / ss; - - Real reasonable_score = (is_knee) ? 200000 : 100; - for (vsize i = qscores.size (); i--;) - if (qscores[i].demerits < reasonable_score) - { - Real d = score_forbidden_quants (qscores[i].yl, qscores[i].yr, - rad, slt, thickness, beam_translation, - edge_beam_counts, ldir, rdir, ¶meters); - qscores[i].demerits += d; - -#if DEBUG_BEAM_SCORING - qscores[i].score_card_ += to_string (" F %.2f", d); -#endif - } - - for (vsize i = qscores.size (); i--;) - if (qscores[i].demerits < reasonable_score) - { - Real d = score_stem_lengths (stems, stem_infos, - base_lengths, stem_xposns, - xl, xr, - is_knee, - qscores[i].yl, qscores[i].yr, ¶meters); - qscores[i].demerits += d; - -#if DEBUG_BEAM_SCORING - qscores[i].score_card_ += to_string (" L %.2f", d); -#endif - } + while (!best->done ()) + one_scorer (best); + + return best; +} - int best_idx = best_quant_score_idx (qscores); +Drul_array +Beam_scoring_problem::solve () const { + vector configs; + generate_quants (&configs); -#if DEBUG_BEAM_SCORING - SCM inspect_quants = me->get_property ("inspect-quants"); - if (to_boolean (me->layout ()->lookup_variable (ly_symbol2scm ("debug-beam-scoring"))) - && scm_is_pair (inspect_quants)) + if (configs.empty ()) { - Drul_array ins = ly_scm2interval (inspect_quants); - - Real mindist = 1e6; - for (vsize i = 0; i < qscores.size (); i++) - { - Real d = fabs (qscores[i].yl- ins[LEFT]) + fabs (qscores[i].yr - ins[RIGHT]); - if (d < mindist) - { - best_idx = i; - mindist = d; - } - } - if (mindist > 1e5) - programming_error ("cannot find quant"); + programming_error ("No viable beam quanting found. Using unquanted y value."); + return unquanted_y; } -#endif - Interval final_positions; - if (best_idx < 0) + Beam_configuration *best = NULL; + + bool debug = + to_boolean (beam->layout ()->lookup_variable (ly_symbol2scm ("debug-beam-scoring"))); + SCM inspect_quants = beam->get_property ("inspect-quants"); + if (scm_is_pair (inspect_quants)) { - warning (_ ("no feasible beam position")); - final_positions = Interval (0, 0); + debug = true; + best = force_score (inspect_quants, configs); } else { - final_positions = Drul_array (qscores[best_idx].yl, - qscores[best_idx].yr); + std::priority_queue, + Beam_configuration_less> queue; + for (vsize i = 0; i < configs.size(); i++) + queue.push(configs[i]); + + /* + TODO + + It would be neat if we generated new configurations on the + fly, depending on the best complete score so far, eg. + + if (best->done()) { + if (best->demerits < sqrt(queue.size()) + break; + while (best->demerits > sqrt(queue.size()) { + generate and insert new configuration + } + } + + that would allow us to do away with region_size altogether. + */ + while (true) { + best = queue.top (); + if (best->done ()) + break; + + queue.pop (); + one_scorer (best); + queue.push (best); + } } - + + Interval final_positions = best->y; + #if DEBUG_BEAM_SCORING - if (best_idx >= 0 - && to_boolean (me->layout ()->lookup_variable (ly_symbol2scm ("debug-beam-scoring")))) + if (debug) { - qscores[best_idx].score_card_ += to_string ("i%d", best_idx); - // debug quanting - me->set_property ("quant-score", - ly_string2scm (qscores[best_idx].score_card_)); + int completed = 0; + for (vsize i = 0; i < configs.size (); i++) + { + if (configs[i]->done ()) + completed++; + } + + string card = best->score_card_ + to_string (" c%d/%d", completed, configs.size()); + beam->set_property ("annotation", ly_string2scm (card)); } #endif - return ly_interval2scm (final_positions); + junk_pointers (configs); + return final_positions; } -Real -Beam::score_stem_lengths (vector const &stems, - vector const &stem_infos, - vector const &base_stem_ys, - vector const &stem_xs, - Real xl, Real xr, - bool knee, - Real yl, Real yr, - - Beam_quant_parameters const *parameters) +void +Beam_scoring_problem::score_stem_lengths (Beam_configuration* config) const { - Real limit_penalty = parameters->STEM_LENGTH_LIMIT_PENALTY; + Real limit_penalty = parameters.STEM_LENGTH_LIMIT_PENALTY; Drul_array score (0, 0); Drul_array count (0, 0); - for (vsize i = 0; i < stems.size (); i++) + for (vsize i = 0; i < stem_xpositions.size (); i++) { - Grob *s = stems[i]; - if (!Stem::is_normal_stem (s)) - continue; - - Real x = stem_xs[i]; - Real dx = xr - xl; - Real beam_y = dx ? yr * (x - xl) / dx + yl * (xr - x) / dx : (yr + yl) / 2; - Real current_y = beam_y + base_stem_ys[i]; - Real length_pen = parameters->STEM_LENGTH_DEMERIT_FACTOR; + Real x = stem_xpositions[i]; + Real dx = x_span.delta (); + Real beam_y = dx + ? config->y[RIGHT] * (x - x_span[LEFT]) / dx + config->y[LEFT] * (x_span[RIGHT] - x) / dx + : (config->y[RIGHT] + config->y[LEFT]) / 2; + Real current_y = beam_y + base_lengths[i]; + Real length_pen = parameters.STEM_LENGTH_DEMERIT_FACTOR; Stem_info info = stem_infos[i]; Direction d = info.dir_; @@ -366,33 +549,28 @@ Beam::score_stem_lengths (vector const &stems, /* We introduce a power, to make the scoring strictly convex. Otherwise a symmetric knee beam (up/down/up/down) does not have an optimum in the middle. */ - if (knee) + if (is_knee) ideal_score = pow (ideal_score, 1.1); score[d] += length_pen * ideal_score; - count[d]++; } + /* Divide by number of stems, to make the measure scale-free. */ Direction d = DOWN; do score[d] /= max (count[d], 1); while (flip (&d) != DOWN); - return score[LEFT] + score[RIGHT]; + config->add (score[LEFT] + score[RIGHT], "L"); } -Real -Beam::score_slopes_dy (Real yl, Real yr, - Real dy_mus, Real dy_damp, - Real dx, - bool xstaff, - - Beam_quant_parameters const *parameters) +void +Beam_scoring_problem::score_slope_direction (Beam_configuration *config) const { - Real dy = yr - yl; + Real dy = config->y.delta (); + Real damped_dy = unquanted_y.delta(); Real dem = 0.0; - /* DAMPING_DIRECTION_PENALTY is a very harsh measure, while for complex beaming patterns, horizontal is often a good choice. @@ -400,34 +578,52 @@ Beam::score_slopes_dy (Real yl, Real yr, TODO: find a way to incorporate the complexity of the beam in this penalty. */ - if (sign (dy_damp) != sign (dy)) + if (sign (damped_dy) != sign (dy)) { if (!dy) { - if (fabs (dy_damp / dx) > parameters->ROUND_TO_ZERO_SLOPE) - dem += parameters->DAMPING_DIRECTION_PENALTY; + if (fabs (damped_dy / x_span.delta ()) > parameters.ROUND_TO_ZERO_SLOPE) + dem += parameters.DAMPING_DIRECTION_PENALTY; else - dem += parameters->HINT_DIRECTION_PENALTY; + dem += parameters.HINT_DIRECTION_PENALTY; } else - dem += parameters->DAMPING_DIRECTION_PENALTY; + dem += parameters.DAMPING_DIRECTION_PENALTY; } - - dem += parameters->MUSICAL_DIRECTION_FACTOR - * max (0.0, (fabs (dy) - fabs (dy_mus))); - Real slope_penalty = parameters->IDEAL_SLOPE_FACTOR; + config->add (dem, "Sd"); +} + +// Score for going against the direction of the musical pattern +void +Beam_scoring_problem::score_slope_musical (Beam_configuration *config) const +{ + Real dy = config->y.delta (); + Real dem = parameters.MUSICAL_DIRECTION_FACTOR + * max (0.0, (fabs (dy) - fabs (musical_dy))); + config->add (dem, "Sm"); +} + +// Score deviation from calculated ideal slope. +void +Beam_scoring_problem::score_slope_ideal (Beam_configuration *config) const +{ + Real dy = config->y.delta (); + Real damped_dy = unquanted_y.delta(); + Real dem = 0.0; + + Real slope_penalty = parameters.IDEAL_SLOPE_FACTOR; /* Xstaff beams tend to use extreme slopes to get short stems. We put in a penalty here. */ - if (xstaff) + if (is_xstaff) slope_penalty *= 10; /* Huh, why would a too steep beam be better than a too flat one ? */ - dem += shrink_extra_weight (fabs (dy_damp) - fabs (dy), 1.5) + dem += shrink_extra_weight (fabs (damped_dy) - fabs (dy), 1.5) * slope_penalty; - return dem; + config->add (dem, "Si"); } static Real @@ -436,36 +632,43 @@ my_modf (Real x) return x - floor (x); } +// TODO - there is some overlap with forbidden quants, but for +// horizontal beams, it is much more serious to have stafflines +// appearing in the wrong place, so we have a separate scorer. +void +Beam_scoring_problem::score_horizontal_inter_quants (Beam_configuration *config) const +{ + if (config->y.delta () == 0.0 + && abs (config->y[LEFT]) < staff_radius * staff_space) + { + Real yshift = config->y[LEFT] - 0.5 * staff_space; + if (fabs (my_round (yshift) - yshift) < 0.01 * staff_space) + config->add (parameters.HORIZONTAL_INTER_QUANT_PENALTY, "H"); + } +} + /* TODO: The fixed value SECONDARY_BEAM_DEMERIT is probably flawed: because for 32nd and 64th beams the forbidden quants are relatively more important than stem lengths. */ -Real -Beam::score_forbidden_quants (Real yl, Real yr, - Real radius, - Real slt, - Real thickness, Real beam_translation, - Drul_array beam_counts, - Direction ldir, Direction rdir, - - Beam_quant_parameters const *parameters) +void +Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const { - Real dy = yr - yl; - Drul_array y (yl, yr); - Drul_array dirs (ldir, rdir); + Real dy = config->y.delta (); - Real extra_demerit = parameters->SECONDARY_BEAM_DEMERIT / (max (beam_counts[LEFT], beam_counts[RIGHT])); + Real extra_demerit = parameters.SECONDARY_BEAM_DEMERIT / + max (edge_beam_counts[LEFT], edge_beam_counts[RIGHT]); Direction d = LEFT; Real dem = 0.0; - Real eps = parameters->BEAM_EPS; - + Real eps = parameters.BEAM_EPS; + do { - for (int j = 1; j <= beam_counts[d]; j++) + for (int j = 1; j <= edge_beam_counts[d]; j++) { - Direction stem_dir = dirs[d]; + Direction stem_dir = edge_dirs[d]; /* The 2.2 factor is to provide a little leniency for @@ -473,15 +676,15 @@ Beam::score_forbidden_quants (Real yl, Real yr, will be in the gap of the (2, sit) quant, leading to a false demerit. */ - Real gap1 = y[d] - stem_dir * ((j - 1) * beam_translation + thickness / 2 - slt / 2.2); - Real gap2 = y[d] - stem_dir * (j * beam_translation - thickness / 2 + slt / 2.2); + Real gap1 = config->y[d] - stem_dir * ((j - 1) * beam_translation + beam_thickness / 2 - line_thickness / 2.2); + Real gap2 = config->y[d] - stem_dir * (j * beam_translation - beam_thickness / 2 + line_thickness / 2.2); Interval gap; gap.add_point (gap1); gap.add_point (gap2); - for (Real k = -radius; - k <= radius + eps; k += 1.0) + for (Real k = -staff_radius; + k <= staff_radius + eps; k += 1.0) if (gap.contains (k)) { Real dist = min (fabs (gap[UP] - k), fabs (gap[DOWN] - k)); @@ -499,43 +702,74 @@ Beam::score_forbidden_quants (Real yl, Real yr, } while ((flip (&d)) != LEFT); - if (max (beam_counts[LEFT], beam_counts[RIGHT]) >= 2) + if (max (edge_beam_counts[LEFT], edge_beam_counts[RIGHT]) >= 2) { Real straddle = 0.0; - Real sit = (thickness - slt) / 2; + Real sit = (beam_thickness - line_thickness) / 2; Real inter = 0.5; - Real hang = 1.0 - (thickness - slt) / 2; + Real hang = 1.0 - (beam_thickness - line_thickness) / 2; Direction d = LEFT; do { - if (beam_counts[d] >= 2 - && fabs (y[d] - dirs[d] * beam_translation) < radius + inter) + if (edge_beam_counts[d] >= 2 + && fabs (config->y[d] - edge_dirs[d] * beam_translation) < staff_radius + inter) { - if (dirs[d] == UP && dy <= eps - && fabs (my_modf (y[d]) - sit) < eps) + // TODO up/down symmetry. + if (edge_dirs[d] == UP && dy <= eps + && fabs (my_modf (config->y[d]) - sit) < eps) dem += extra_demerit; - if (dirs[d] == DOWN && dy >= eps - && fabs (my_modf (y[d]) - hang) < eps) + if (edge_dirs[d] == DOWN && dy >= eps + && fabs (my_modf (config->y[d]) - hang) < eps) dem += extra_demerit; } - if (beam_counts[d] >= 3 - && fabs (y[d] - 2 * dirs[d] * beam_translation) < radius + inter) + if (edge_beam_counts[d] >= 3 + && fabs (config->y[d] - 2 * edge_dirs[d] * beam_translation) < staff_radius + inter) { - if (dirs[d] == UP && dy <= eps - && fabs (my_modf (y[d]) - straddle) < eps) + // TODO up/down symmetry. + if (edge_dirs[d] == UP && dy <= eps + && fabs (my_modf (config->y[d]) - straddle) < eps) dem += extra_demerit; - if (dirs[d] == DOWN && dy >= eps - && fabs (my_modf (y[d]) - straddle) < eps) + if (edge_dirs[d] == DOWN && dy >= eps + && fabs (my_modf (config->y[d]) - straddle) < eps) dem += extra_demerit; } } while (flip (&d) != LEFT); } - return dem; + config->add (dem, "F"); } +void +Beam_scoring_problem::score_collisions (Beam_configuration *config) const +{ + Real demerits = 0.0; + for (vsize i = 0; i < collisions_.size (); i++) + { + Interval collision_y = collisions_[i].y_; + Real x = collisions_[i].x_; + + Real center_beam_y = y_at (x, config); + Interval beam_y = center_beam_y + collisions_[i].beam_y_; + + Real dist = infinity_f; + if (!intersection (beam_y, collision_y).is_empty ()) + dist = 0.0; + else + dist = min (beam_y.distance (collision_y[DOWN]), + beam_y.distance (collision_y[UP])); + + Real scale_free = + max (parameters.COLLISION_PADDING - dist, 0.0)/ + parameters.COLLISION_PADDING; + demerits += + collisions_[i].base_penalty_ * + pow (scale_free, 3) * parameters.COLLISION_PENALTY; + } + + config->add (demerits, "C"); +} diff --git a/lily/beam.cc b/lily/beam.cc index 83d82e3cca..66c58ef8dc 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -1,10 +1,21 @@ /* - beam.cc -- implement Beam + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ /* @@ -26,22 +37,26 @@ #include "beam.hh" +#include "align-interface.hh" +#include "beam-scoring-problem.hh" #include "beaming-pattern.hh" #include "directional-element-interface.hh" -#include "main.hh" +#include "grob-array.hh" #include "international.hh" #include "interval-set.hh" #include "item.hh" #include "least-squares.hh" #include "lookup.hh" +#include "main.hh" #include "misc.hh" +#include "note-head.hh" #include "output-def.hh" #include "pointer-group-interface.hh" +#include "rhythmic-head.hh" #include "spanner.hh" #include "staff-symbol-referencer.hh" #include "stem.hh" #include "warn.hh" -#include "grob-array.hh" #if DEBUG_BEAM_SCORING #include "text-interface.hh" // debug output. @@ -62,6 +77,12 @@ Beam_stem_segment::Beam_stem_segment () dir_ = CENTER; } +bool +beam_segment_less (Beam_segment const& a, Beam_segment const& b) +{ + return a.horizontal_[LEFT] < b.horizontal_[LEFT]; +} + Beam_segment::Beam_segment () { vertical_count_ = 0; @@ -82,9 +103,9 @@ Beam::add_stem (Grob *me, Grob *s) } Real -Beam::get_thickness (Grob *me) +Beam::get_beam_thickness (Grob *me) { - return robust_scm2double (me->get_property ("thickness"), 0) + return robust_scm2double (me->get_property ("beam-thickness"), 0) * Staff_symbol_referencer::staff_space (me); } @@ -95,12 +116,12 @@ Beam::get_beam_translation (Grob *me) int beam_count = get_beam_count (me); Real staff_space = Staff_symbol_referencer::staff_space (me); Real line = Staff_symbol_referencer::line_thickness (me); - Real thickness = get_thickness (me); + Real beam_thickness = get_beam_thickness (me); Real fract = robust_scm2double (me->get_property ("length-fraction"), 1.0); - + Real beam_translation = beam_count < 4 - ? (2 * staff_space + line - thickness) / 2.0 - : (3 * staff_space + line - thickness) / 3.0; + ? (2 * staff_space + line - beam_thickness) / 2.0 + : (3 * staff_space + line - beam_thickness) / 3.0; return fract * beam_translation; } @@ -125,15 +146,15 @@ SCM Beam::calc_normal_stems (SCM smob) { Grob *me = unsmob_grob (smob); - + extract_grob_set (me, "stems", stems); SCM val = Grob_array::make_array (); Grob_array *ga = unsmob_grob_array (val); for (vsize i = 0; i < stems.size (); i++) if (Stem::is_normal_stem (stems[i])) ga->add (stems[i]); - - return val; + + return val; } MAKE_SCHEME_CALLBACK (Beam, calc_direction, 1); @@ -162,7 +183,7 @@ Beam::calc_direction (SCM smob) return SCM_UNSPECIFIED; } - else + else { Grob *stem = first_normal_stem (me); @@ -171,8 +192,8 @@ Beam::calc_direction (SCM smob) */ if (!stem) stem = stems[0]; - - if (is_direction (stem->get_property_data ("direction"))) + + if (is_direction (stem->get_property_data ("direction"))) dir = to_dir (stem->get_property_data ("direction")); else dir = to_dir (stem->get_property ("default-direction")); @@ -183,7 +204,7 @@ Beam::calc_direction (SCM smob) { if (!dir) dir = get_default_dir (me); - + consider_auto_knees (me); } @@ -191,7 +212,7 @@ Beam::calc_direction (SCM smob) { set_stem_directions (me, dir); } - + return scm_from_int (dir); } @@ -244,12 +265,12 @@ SCM Beam::calc_beaming (SCM smob) { Grob *me = unsmob_grob (smob); - + extract_grob_set (me, "stems", stems); Slice last_int; last_int.set_empty (); - + SCM last_beaming = scm_cons (SCM_EOL, scm_list_1 (scm_from_int (0))); Direction last_dir = CENTER; for (vsize i = 0; i < stems.size (); i++) @@ -288,7 +309,7 @@ Beam::calc_beaming (SCM smob) else { /* - FIXME: what's this for? + FIXME: what's this for? */ SCM s = scm_cdr (this_beaming); for (; scm_is_pair (s); s = scm_cdr (s)) @@ -298,7 +319,7 @@ Beam::calc_beaming (SCM smob) last_int.add_point (np); } } - + if (scm_ilength (scm_cdr (this_beaming)) > 0) { last_beaming = this_beaming; @@ -316,8 +337,9 @@ operator <(Beam_stem_segment const &a, return a.rank_ < b.rank_; } -typedef map > Position_stem_segments_map; +typedef map > Position_stem_segments_map; +// TODO - should store result in a property? vector Beam::get_beam_segments (Grob *me_grob, Grob **common) { @@ -334,7 +356,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) commonx = me->get_bound (RIGHT)->common_refpoint (commonx, X_AXIS); *common = commonx; - + int gap_count = robust_scm2int (me->get_property ("gap-count"), 0); Real gap_length = robust_scm2double (me->get_property ("gap"), 0.0); @@ -370,13 +392,13 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) int beam_rank = scm_to_int (scm_car (s)); ranks.add_point (beam_rank); } - + for (SCM s = index_get_cell (beaming, d); scm_is_pair (s); s = scm_cdr (s)) { if (!scm_is_integer (scm_car (s))) continue; - + int beam_rank = scm_to_int (scm_car (s)); Beam_stem_segment seg; seg.stem_ = stem; @@ -386,9 +408,9 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) seg.stem_index_ = i; seg.dir_ = d; seg.max_connect_ = robust_scm2int (stem->get_property ("max-beam-connect"), 1000); - + Direction stem_dir = get_grob_direction (stem); - + seg.gapped_ = (stem_dir * beam_rank < (stem_dir * ranks[-stem_dir] + gap_count)); stem_segments[beam_rank].push_back (seg); @@ -439,12 +461,12 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) bool inside_stem = (event_dir == LEFT) ? seg.stem_index_ > 0 : seg.stem_index_ + 1 < stems.size () ; - + bool event = on_beam_bound || abs (seg.rank_ - neighbor_seg.rank_) > 1 || (abs (vertical_count) >= seg.max_connect_ || abs (vertical_count) >= neighbor_seg.max_connect_); - + if (!event) // Then this edge of the current segment is irrelevent because it will // be connected with the next segment in the event_dir direction. @@ -520,7 +542,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) } while (flip (&event_dir) != LEFT); } - + } return segments; @@ -533,6 +555,8 @@ Beam::print (SCM grob) Spanner *me = unsmob_spanner (grob); Grob *commonx = 0; vector segments = get_beam_segments (me, &commonx); + if (!segments.size ()) + return SCM_EOL; Interval span; if (normal_stem_count (me)) @@ -542,7 +566,7 @@ Beam::print (SCM grob) } else { - extract_grob_set (me, "stems", stems); + extract_grob_set (me, "stems", stems); span[LEFT] = stems[0]->relative_coordinate (commonx, X_AXIS); span[RIGHT] = stems.back ()->relative_coordinate (commonx, X_AXIS); } @@ -564,43 +588,84 @@ Beam::print (SCM grob) Real dy = pos[RIGHT] - pos[LEFT]; Real slope = (dy && span.length ()) ? dy / span.length () : 0; - Real thick = get_thickness (me); + Real beam_thickness = get_beam_thickness (me); Real beam_dy = get_beam_translation (me); Direction feather_dir = to_dir (me->get_property ("grow-direction")); - + + Interval placements = robust_scm2interval (me->get_property ("normalized-endpoints"), Interval (0.0, 0.0)); + Stencil the_beam; + + int extreme = (segments[0].vertical_count_ == 0 + ? segments[0].vertical_count_ + : segments.back ().vertical_count_); + for (vsize i = 0; i < segments.size (); i ++) { Real local_slope = slope; + /* + Makes local slope proportional to the ratio of the length of this beam + to the total length. + */ if (feather_dir) - { - local_slope += feather_dir * segments[i].vertical_count_ * beam_dy / span.length (); - } - - Stencil b = Lookup::beam (local_slope, segments[i].horizontal_.length (), thick, blot); + local_slope += (feather_dir * segments[i].vertical_count_ + * beam_dy + * placements.length () + / span.length ()); + + Stencil b = Lookup::beam (local_slope, segments[i].horizontal_.length (), beam_thickness, blot); b.translate_axis (segments[i].horizontal_[LEFT], X_AXIS); - - b.translate_axis (local_slope - * (segments[i].horizontal_[LEFT] - span.linear_combination (feather_dir)) - + pos.linear_combination (feather_dir) - + beam_dy * segments[i].vertical_count_, Y_AXIS); - the_beam.add_stencil (b); + Real multiplier = feather_dir ? placements[LEFT] : 1.0; + + Interval weights (1 - multiplier, multiplier); + + if (feather_dir != LEFT) + weights.swap (); + + // we need two translations: the normal one and + // the one of the lowest segment + int idx[] = {i, extreme}; + Real translations[2]; + + for (int j = 0; j < 2; j++) + translations[j] = slope + * (segments[idx[j]].horizontal_[LEFT] - span.linear_combination (CENTER)) + + pos.linear_combination (CENTER) + + beam_dy * segments[idx[j]].vertical_count_; + + Real weighted_average = translations[0] * weights[LEFT] + translations[1] * weights[RIGHT]; + + /* + Tricky. The manipulation of the variable `weighted_average' below ensures + that beams with a RIGHT grow direction will start from the position of the + lowest segment at 0, and this error will decrease and decrease over the + course of the beam. Something with a LEFT grow direction, on the other + hand, will always start in the correct place but progressively accrue + error at broken places. This code shifts beams up given where they are + in the total span length (controlled by the variable `multiplier'). To + better understand what it does, try commenting it out: you'll see that + all of the RIGHT growing beams immediately start too low and get better + over line breaks, whereas all of the LEFT growing beams start just right + and get worse over line breaks. + */ + Real factor = Interval (multiplier, 1 - multiplier).linear_combination (feather_dir); + + if (segments[0].vertical_count_ < 0 && feather_dir) + weighted_average += beam_dy * (segments.size () - 1) * factor; + + b.translate_axis (weighted_average, Y_AXIS); + + the_beam.add_stencil (b); + } - + #if (DEBUG_BEAM_SCORING) SCM annotation = me->get_property ("annotation"); - if (!scm_is_string (annotation)) - { - SCM debug = me->layout ()->lookup_variable (ly_symbol2scm ("debug-beam-scoring")); - if (to_boolean (debug)) - annotation = me->get_property ("quant-score"); - } - if (scm_is_string (annotation)) { - extract_grob_set (me, "stems", stems); + extract_grob_set (me, "stems", stems); /* This code prints the demerits for each beam. Perhaps this @@ -610,10 +675,13 @@ Beam::print (SCM grob) string str; SCM properties = Font_interface::text_font_alist_chain (me); + properties = scm_cons(scm_acons (ly_symbol2scm ("font-size"), scm_from_int (-5), SCM_EOL), + properties); + Direction stem_dir = stems.size () ? to_dir (stems[0]->get_property ("direction")) : UP; Stencil score = *unsmob_stencil (Text_interface::interpret_markup - (me->layout ()->self_scm (), properties, annotation)); + (me->layout ()->self_scm (), properties, annotation)); if (!score.is_empty ()) { @@ -626,7 +694,7 @@ Beam::print (SCM grob) the_beam.translate_axis (-me->relative_coordinate (commonx, X_AXIS), X_AXIS); return the_beam.smobbed_copy (); } - + Direction Beam::get_default_dir (Grob *me) { @@ -680,7 +748,7 @@ Beam::get_default_dir (Grob *me) else if (extremes[UP] < -extremes[DOWN]) return UP; } - + Direction dir = CENTER; Direction d = CENTER; if ((d = (Direction) sign (count[UP] - count[DOWN]))) @@ -693,7 +761,7 @@ Beam::get_default_dir (Grob *me) dir = d; else dir = to_dir (me->get_property ("neutral-direction")); - + return dir; } @@ -794,7 +862,7 @@ Beam::consider_auto_knees (Grob *me) } Real beam_translation = get_beam_translation (me); - Real beam_thickness = Beam::get_thickness (me); + Real beam_thickness = Beam::get_beam_thickness (me); int beam_count = Beam::get_beam_count (me); Real height_of_beams = beam_thickness / 2 + (beam_count - 1) * beam_translation; @@ -842,25 +910,25 @@ set_minimum_dy (Grob *me, Real *dy) */ Real ss = Staff_symbol_referencer::staff_space (me); - Real thickness = Beam::get_thickness (me) / ss; + Real beam_thickness = Beam::get_beam_thickness (me) / ss; Real slt = Staff_symbol_referencer::line_thickness (me) / ss; - Real sit = (thickness - slt) / 2; + Real sit = (beam_thickness - slt) / 2; Real inter = 0.5; - Real hang = 1.0 - (thickness - slt) / 2; + Real hang = 1.0 - (beam_thickness - slt) / 2; *dy = sign (*dy) * max (fabs (*dy), min (min (sit, inter), hang)); } } - + MAKE_SCHEME_CALLBACK (Beam, calc_stem_shorten, 1) SCM Beam::calc_stem_shorten (SCM smob) { Grob *me = unsmob_grob (smob); - + /* shortening looks silly for x staff beams */ @@ -884,7 +952,7 @@ Beam::calc_stem_shorten (SCM smob) shorten *= forced_fraction; - + if (shorten) return scm_from_double (shorten); @@ -898,7 +966,7 @@ Beam::no_visible_stem_positions (Grob *me, Interval default_value) extract_grob_set (me, "stems", stems); if (stems.empty ()) return default_value; - + Interval head_positions; Slice multiplicity; for (vsize i = 0; i < stems.size(); i++) @@ -908,7 +976,11 @@ Beam::no_visible_stem_positions (Grob *me, Interval default_value) } 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); @@ -976,7 +1048,7 @@ Beam::calc_least_squares_positions (SCM smob, SCM /* posns */) { /* FIXME. -> UP */ Direction d = (Direction) (sign (chord.delta ()) * UP); - pos[d] = get_thickness (me) / 2; + pos[d] = get_beam_thickness (me) / 2; pos[-d] = -pos[d]; } else @@ -1020,6 +1092,19 @@ Beam::calc_least_squares_positions (SCM smob, SCM /* posns */) return ly_interval2scm (pos); } + +// Assuming V is not empty, pick a 'reasonable' point inside V. +static Real +point_in_interval (Interval v, Real dist) +{ + if (isinf (v[DOWN])) + return v[UP] - dist; + else if (isinf (v[UP])) + return v[DOWN] + dist; + else + return v.center (); +} + /* We can't combine with previous function, since check concave and slope damping comes first. @@ -1032,41 +1117,43 @@ SCM Beam::shift_region_to_valid (SCM grob, SCM posns) { Grob *me = unsmob_grob (grob); + /* Code dup. */ vector x_posns; extract_grob_set (me, "stems", stems); - Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS); - Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS); + extract_grob_set (me, "covered-grobs", covered); + Grob *common[NO_AXES] = { me, me }; + for (Axis a = X_AXIS; a < NO_AXES; incr (a)) { + common[a] = common_refpoint_of_array (stems, me, a); + common[a] = common_refpoint_of_array (covered, common[a], a); + } Grob *fvs = first_normal_stem (me); if (!fvs) return posns; - - Real x0 = fvs->relative_coordinate (commonx, X_AXIS); + Interval x_span; + x_span[LEFT] = fvs->relative_coordinate (common[X_AXIS], X_AXIS); for (vsize i = 0; i < stems.size (); i++) { Grob *s = stems[i]; - Real x = s->relative_coordinate (commonx, X_AXIS) - x0; + Real x = s->relative_coordinate (common[X_AXIS], X_AXIS) - x_span[LEFT]; x_posns.push_back (x); } Grob *lvs = last_normal_stem (me); - if (!lvs) - return posns; - - Real dx = lvs->relative_coordinate (commonx, X_AXIS) - x0; + x_span[RIGHT] = lvs->relative_coordinate (common[X_AXIS], X_AXIS); Drul_array pos = ly_scm2interval (posns); scale_drul (&pos, Staff_symbol_referencer::staff_space (me)); - Real dy = pos[RIGHT] - pos[LEFT]; - Real y = pos[LEFT]; - Real slope = dx ? (dy / dx) : 0.0; + Real beam_dy = pos[RIGHT] - pos[LEFT]; + Real beam_left_y = pos[LEFT]; + Real slope = x_span.delta () ? (beam_dy / x_span.delta ()) : 0.0; /* Shift the positions so that we have a chance of finding good @@ -1074,6 +1161,7 @@ Beam::shift_region_to_valid (SCM grob, SCM posns) */ Interval feasible_left_point; feasible_left_point.set_full (); + for (vsize i = 0; i < stems.size (); i++) { Grob *s = stems[i]; @@ -1081,7 +1169,6 @@ Beam::shift_region_to_valid (SCM grob, SCM posns) continue; Direction d = get_grob_direction (s); - Real left_y = Stem::get_stem_info (s).shortest_y_ - slope * x_posns [i]; @@ -1091,8 +1178,8 @@ Beam::shift_region_to_valid (SCM grob, SCM posns) ourselves, so translate: */ left_y - += + s->relative_coordinate (commony, Y_AXIS) - - me->relative_coordinate (commony, Y_AXIS); + += + s->relative_coordinate (common[Y_AXIS], Y_AXIS) + - me->relative_coordinate (common[Y_AXIS], Y_AXIS); Interval flp; flp.set_full (); @@ -1101,20 +1188,180 @@ Beam::shift_region_to_valid (SCM grob, SCM posns) feasible_left_point.intersect (flp); } - if (feasible_left_point.is_empty ()) - warning (_ ("no viable initial configuration found: may not find good beam slope")); - else if (!feasible_left_point.contains (y)) + vector filtered; + /* + We only update these for objects that are too large for quanting + to find a workaround. Typically, these are notes with + stems, and timesig/keysig/clef, which take out the entire area + inside the staff as feasible. + + The code below disregards the thickness and multiplicity of the + beam. This should not be a problem, as the beam quanting will + take care of computing the impact those exactly. + */ + Real min_y_size = 2.0; + + // A list of intervals into which beams may not fall + vector forbidden_intervals; + + for (vsize i = 0; i < covered.size(); i++) + { + if (!covered[i]->is_live()) + continue; + + if (Beam::has_interface (covered[i]) && is_cross_staff (covered[i])) + continue; + + Box b; + for (Axis a = X_AXIS; a < NO_AXES; incr (a)) + b[a] = covered[i]->extent (common[a], a); + + if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ()) + continue; + + if (intersection (b[X_AXIS], x_span).is_empty ()) + continue; + + filtered.push_back (covered[i]); + Grob *head_stem = Rhythmic_head::get_stem (covered[i]); + if (head_stem && Stem::is_normal_stem (head_stem) + && Note_head::has_interface (covered[i])) + { + if (Stem::get_beam (head_stem)) + { + /* + We must assume that stems are infinitely long in this + case, as asking for the length of the stem typically + leads to circular dependencies. + + This strategy assumes that we don't want to handle the + collision of beams in opposite non-forced directions + with this code, where shortening the stems of both + would resolve the problem, eg. + + x x + | | + ===== + + ===== + | | + x x + + Such beams would need a coordinating grob to resolve + the collision, since both will likely want to occupy + the centerline. + */ + Direction stemdir = get_grob_direction (head_stem); + b[Y_AXIS][stemdir] = stemdir * infinity_f; + } + else + { + // TODO - should we include the extent of the stem here? + } + } + + if (b[Y_AXIS].length () < min_y_size) + continue; + + Direction d = LEFT; + do + { + Real x = b[X_AXIS][d] - x_span[LEFT]; + Real dy = slope * x; + + Direction yd = DOWN; + Interval disallowed; + do + { + Real left_y = b[Y_AXIS][yd]; + + left_y -= dy; + + // Translate back to beam as ref point. + left_y -= me->relative_coordinate (common[Y_AXIS], Y_AXIS); + + disallowed[yd] = left_y; + } + while (flip (&yd) != DOWN); + + forbidden_intervals.push_back (disallowed); + } + while (flip (&d) != LEFT); + } + + Grob_array *arr = + Pointer_group_interface::get_grob_array (me, + ly_symbol2scm ("covered-grobs")); + arr->set_array (filtered); + + vector_sort (forbidden_intervals, Interval::left_less); + Real epsilon = 1.0e-10; + Interval feasible_beam_placements (beam_left_y, beam_left_y); + + /* + forbidden_intervals contains a vector of intervals in which + the beam cannot start. it iterates through these intervals, + pushing feasible_beam_placements epsilon over or epsilon under a + collision. when this type of change happens, the loop is marked + as "dirty" and re-iterated. + + TODO: figure out a faster ways that this loop can happen via + a better search algorithm and/or OOP. + */ + + bool dirty = false; + do + { + dirty = false; + for (vsize i = 0; i < forbidden_intervals.size (); i++) + { + Direction d = DOWN; + do + { + if (forbidden_intervals[i][d] == d * infinity_f) + feasible_beam_placements[d] = d * infinity_f; + else if (forbidden_intervals[i].contains (feasible_beam_placements[d])) + { + feasible_beam_placements[d] = d * epsilon + forbidden_intervals[i][d]; + dirty = true; + } + } + while (flip (&d) != DOWN); + } + } + while (dirty); + + // if the beam placement falls out of the feasible region, we push it + // to infinity so that it can never be a feasible candidate below + Direction d = DOWN; + do + { + if (!feasible_left_point.contains (feasible_beam_placements[d])) + feasible_beam_placements[d] = d*infinity_f; + } + while (flip (&d) != DOWN); + + if ((feasible_beam_placements[UP] == infinity_f && feasible_beam_placements[DOWN] == -infinity_f) && !feasible_left_point.is_empty ()) { - const int REGION_SIZE = 2; // UGH UGH - if (isinf (feasible_left_point[DOWN])) - y = feasible_left_point[UP] - REGION_SIZE; - else if (isinf (feasible_left_point[UP])) - y = feasible_left_point[DOWN]+ REGION_SIZE; + // We are somewhat screwed: we have a collision, but at least + // there is a way to satisfy stem length constraints. + beam_left_y = point_in_interval (feasible_left_point, 2.0); + } + else if (!feasible_left_point.is_empty ()) + { + // Only one of them offers is feasible solution. Pick that one. + if (abs (beam_left_y - feasible_beam_placements[DOWN]) > abs (beam_left_y - feasible_beam_placements[UP])) + beam_left_y = feasible_beam_placements[UP]; else - y = feasible_left_point.center (); + beam_left_y = feasible_beam_placements[DOWN]; + } + else + { + // We are completely screwed. + warning (_ ("no viable initial configuration found: may not find good beam slope")); } - pos = Drul_array (y, (y + dy)); + pos = Drul_array (beam_left_y, (beam_left_y + beam_dy)); scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me)); return ly_interval2scm (pos); @@ -1133,7 +1380,6 @@ Beam::slope_damping (SCM smob, SCM posns) if (normal_stem_count (me) <= 1) return posns; - SCM s = me->get_property ("damping"); Real damping = scm_to_double (s); Real concaveness = robust_scm2double (me->get_property ("concaveness"), 0.0); @@ -1143,7 +1389,7 @@ Beam::slope_damping (SCM smob, SCM posns) me->set_property ("least-squares-dy", scm_from_double (0)); damping = 0; } - + if (damping) { scale_drul (&pos, Staff_symbol_referencer::staff_space (me)); @@ -1175,6 +1421,21 @@ Beam::slope_damping (SCM smob, SCM posns) return ly_interval2scm (pos); } + +MAKE_SCHEME_CALLBACK (Beam, quanting, 2); +SCM +Beam::quanting (SCM smob, SCM posns) +{ + Grob *me = unsmob_grob (smob); + Drul_array ys(0, 0); + ys = robust_scm2drul (posns, ys); + Beam_scoring_problem problem (me, ys); + + ys = problem.solve (); + return ly_interval2scm (ys); +} + + /* Report slice containing the numbers that are both in (car BEAMING) and (cdr BEAMING) @@ -1198,7 +1459,7 @@ where_are_the_whole_beams (SCM beaming) in POS for stem S. This Y position is relative to S. */ Real Beam::calc_stem_y (Grob *me, Grob *stem, Grob **common, - Real xl, Real xr, Direction feather_dir, + Real xl, Real xr, Direction feather_dir, Drul_array pos, bool french) { Real beam_translation = get_beam_translation (me); @@ -1222,15 +1483,15 @@ Beam::calc_stem_y (Grob *me, Grob *stem, Grob **common, /* feather dir = 1 , relx 0->1 : factor 0 -> 1 - feather dir = 0 , relx 0->1 : factor 1 -> 1 - feather dir = -1, relx 0->1 : factor 1 -> 0 + feather dir = 0 , relx 0->1 : factor 1 -> 1 + feather dir = -1, relx 0->1 : factor 1 -> 0 */ Real feather_factor = 1; if (feather_dir > 0) feather_factor = relx; else if (feather_dir < 0) feather_factor = 1 - relx; - + stem_y += feather_factor * beam_translation * beam_multiplicity[Direction(((french) ? DOWN : UP)*stem_dir)]; Real id = me->relative_coordinate (common[Y_AXIS], Y_AXIS) @@ -1243,7 +1504,7 @@ Beam::calc_stem_y (Grob *me, Grob *stem, Grob **common, Hmm. At this time, beam position and slope are determined. Maybe, stem directions and length should set to relative to the chord's position of the beam. */ -MAKE_SCHEME_CALLBACK (Beam, set_stem_lengths, 1); +MAKE_SCHEME_CALLBACK (Beam, set_stem_lengths, 1); SCM Beam::set_stem_lengths (SCM smob) { @@ -1254,7 +1515,7 @@ Beam::set_stem_lengths (SCM smob) (void) me->get_property ("beaming"); SCM posns = me->get_property ("positions"); - + extract_grob_set (me, "stems", stems); if (!stems.size ()) return posns; @@ -1272,7 +1533,7 @@ Beam::set_stem_lengths (SCM smob) if (robust_scm2int (me->get_property ("gap-count"), 0)) { gap = true; - thick = get_thickness (me); + thick = get_beam_thickness (me); } Grob *fvs = first_normal_stem (me); @@ -1359,7 +1620,7 @@ Beam::forced_stem_count (Grob *me) /* I can imagine counting those boundaries as a half forced stem, but let's count them full for now. */ Direction defdir = to_dir (s->get_property ("default-direction")); - + if (abs (Stem::chord_start_y (s)) > 0.1 && defdir && get_grob_direction (s) != defdir) @@ -1408,7 +1669,7 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset) return scm_from_int (0); Real offset = robust_scm2double (prev_offset, 0.0); - + Grob *st = unsmob_grob (rest->get_object ("stem")); Grob *stem = st; if (!stem) @@ -1431,9 +1692,9 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset) Drul_array visible_stems (first_normal_stem (beam), last_normal_stem (beam)); extract_grob_set (beam, "stems", stems); - + Grob *common = common_refpoint_of_array (stems, beam, X_AXIS); - + Real x0 = visible_stems[LEFT]->relative_coordinate (common, X_AXIS); Real dx = visible_stems[RIGHT]->relative_coordinate (common, X_AXIS) - x0; Real slope = dy && dx ? dy / dx : 0; @@ -1443,7 +1704,7 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset) + (stem->relative_coordinate (common, X_AXIS) - x0) * slope; Real beam_translation = get_beam_translation (beam); - Real beam_thickness = Beam::get_thickness (beam); + Real beam_thickness = Beam::get_beam_thickness (beam); /* TODO: this is not strictly correct for 16th knee beams. @@ -1457,13 +1718,9 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset) Grob *common_y = rest->common_refpoint (beam, Y_AXIS); - /* - TODO: this is dubious, because this call needs the info we're - computing right now. - */ - Interval rest_extent = rest->extent (common_y, Y_AXIS); - rest_extent.translate (offset); - + Interval rest_extent = rest->extent (rest, Y_AXIS); + rest_extent.translate (offset + rest->get_parent (Y_AXIS)->relative_coordinate (common_y, Y_AXIS)); + Real rest_dim = rest_extent[d]; Real minimum_distance = staff_space * (robust_scm2double (stem->get_property ("stemlet-length"), 0.0) @@ -1552,19 +1809,57 @@ Beam::get_direction_beam_count (Grob *me, Direction d) ADD_INTERFACE (Beam, "A beam.\n" "\n" - "The @code{thickness} property is the weight of beams," + "The @code{beam-thickness} property is the weight of beams," " measured in staffspace. The @code{direction} property is" " not user-serviceable. Use the @code{direction} property" - " of @code{Stem} instead.", - + " of @code{Stem} instead.\n" + "\n" + "The following properties may be set in the @code{details}" + " list.\n" + "\n" + "@table @code\n" + "@item stem-length-demerit-factor\n" + "Demerit factor used for inappropriate stem lengths.\n" + "@item secondary-beam-demerit\n" + "Demerit used in quanting calculations for multiple" + " beams.\n" + "@item region-size\n" + "Size of region for checking quant scores.\n" + "@item beam-eps\n" + "Epsilon for beam quant code to check for presence" + " in gap.\n" + "@item stem-length-limit-penalty\n" + "Penalty for differences in stem lengths on a beam.\n" + "@item damping-direction-penalty\n" + "Demerit penalty applied when beam direction is different" + " from damping direction.\n" + "@item hint-direction-penalty\n" + "Demerit penalty applied when beam direction is different" + " from damping direction, but damping slope is" + " <= @code{round-to-zero-slope}.\n" + "@item musical-direction-factor\n" + "Demerit scaling factor for difference between" + " beam slope and music slope.\n" + "@item ideal-slope-factor\n" + "Demerit scaling factor for difference between" + " beam slope and damping slope.\n" + "@item round-to-zero-slope\n" + "Damping slope which is considered zero for purposes of" + " calculating direction penalties.\n" + "@end table\n", + /* properties */ "annotation " "auto-knee-gap " "beamed-stem-shorten " "beaming " + "beam-thickness " "break-overshoot " "clip-edges " "concaveness " + "collision-interfaces " + "collision-voice-only " + "covered-grobs " "damping " "details " "direction " @@ -1578,9 +1873,7 @@ ADD_INTERFACE (Beam, "neutral-direction " "normal-stems " "positions " - "quant-score " "quantized-positions " "shorten " "stems " - "thickness " ); diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index 251e65bb99..b823d2ecda 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -1,20 +1,24 @@ /* - beaming-pattern.cc -- implement Beam_rhythmic_element, Beaming_pattern + This file is part of LilyPond, the GNU music typesetter. - A Beaming_pattern object takes a set of stems at given moments and calculates - the pattern of their beam. That is, it works out, for each stem, how many - beams should be connected to the right and left sides of that stem. In - calculating this, Beaming_pattern takes into account - - the rhythmic position of the stems - - the options that are defined in Beaming_options + Copyright (C) 1999--2011 Han-Wen Nienhuys - source file of the GNU LilyPond music typesetter + 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. - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ -#include "beaming-pattern.hh" #include "context.hh" +#include "beaming-pattern.hh" /* Represents a stem belonging to a beam. Sometimes (for example, if the stem @@ -52,7 +56,7 @@ Beam_rhythmic_element::de_grace () { if (start_moment_.grace_part_) { - start_moment_.main_part_ = start_moment_.grace_part_; + start_moment_.main_part_ = start_moment_.grace_part_; start_moment_.grace_part_ = 0; } } @@ -150,7 +154,7 @@ Beaming_pattern::beamify (Beaming_options const &options) void Beaming_pattern::find_rhythmic_importance (Beaming_options const &options) { - Moment measure_pos (0); + Moment measure_pos (0); SCM grouping = options.grouping_; vsize i = 0; @@ -169,10 +173,10 @@ Beaming_pattern::find_rhythmic_importance (Beaming_options const &options) if (infos_[i].start_moment_ == measure_pos) infos_[i].rhythmic_importance_ = -2; - // Mark the start of each beat up to the end of this beat group. - for (int beat = 1; beat <= count; beat++) + // Mark the start of each unit up to the end of this beat group. + for (int unit = 1; unit <= count; unit++) { - Moment next_measure_pos = measure_pos + options.beat_length_; + Moment next_measure_pos = measure_pos + options.base_moment_; while (i < infos_.size () && infos_[i].start_moment_ < next_measure_pos) { @@ -185,7 +189,7 @@ Beaming_pattern::find_rhythmic_importance (Beaming_options const &options) // in an 8th-note triplet with a quarter-note beat, 1/3 of a beat should be // more important than 1/2. if (infos_[i].rhythmic_importance_ >= 0) - infos_[i].rhythmic_importance_ = (dt / options.beat_length_).den (); + infos_[i].rhythmic_importance_ = (int) (dt / options.base_moment_).den (); i++; } @@ -240,13 +244,60 @@ Beaming_pattern::beamlet_count (int i, Direction d) const return infos_.at (i).beam_count_drul_[d]; } +Moment +Beaming_pattern::start_moment (int i) const +{ + return infos_.at (i).start_moment_; +} + +Moment +Beaming_pattern::end_moment (int i) const +{ + Duration *dur = new Duration (2 + max (beamlet_count (i, LEFT), + beamlet_count (i, RIGHT)), + 0); + + return infos_.at (i).start_moment_ + dur->get_length(); +} + +bool +Beaming_pattern::invisibility (int i) const +{ + return infos_.at (i).invisible_; +} + +/* + Split a beamin pattern at index i and return a new + Beaming_pattern containing the removed elements +*/ +Beaming_pattern * +Beaming_pattern::split_pattern (int i) +{ + Beaming_pattern* new_pattern=0; + int count; + + new_pattern = new Beaming_pattern (); + for (vsize j=i+1; jadd_stem (start_moment (j), + count, + invisibility (j)); + } + for (vsize j=i+1; jget_property ("beatGrouping"); + grouping_ = context->get_property ("beatStructure"); subdivide_beams_ = to_boolean (context->get_property ("subdivideBeams")); - beat_length_ = robust_scm2moment (context->get_property ("beatLength"), Moment (1, 4)); - measure_length_ = robust_scm2moment (context->get_property ("measureLength"), Moment (4, 4)); + base_moment_ = robust_scm2moment (context->get_property ("baseMoment"), + Moment (1, 4)); + measure_length_ = robust_scm2moment (context->get_property ("measureLength"), + Moment (4, 4)); } Beaming_options::Beaming_options () diff --git a/lily/bend-engraver.cc b/lily/bend-engraver.cc index 3a08a45532..cd2d47a9d7 100644 --- a/lily/bend-engraver.cc +++ b/lily/bend-engraver.cc @@ -1,9 +1,20 @@ /* - bend-engraver.cc -- implement Bend_engraver + This file is part of LilyPond, the GNU music typesetter. - (c) 2006--2009 Han-Wen Nienhuys + Copyright (C) 2006--2011 Han-Wen Nienhuys - + 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 . */ #include "engraver.hh" diff --git a/lily/bezier-bow.cc b/lily/bezier-bow.cc index e3707c1390..587d3d65db 100644 --- a/lily/bezier-bow.cc +++ b/lily/bezier-bow.cc @@ -1,9 +1,20 @@ /* - bezier.cc -- implement Bezier and Bezier_bow + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #include "misc.hh" diff --git a/lily/bezier.cc b/lily/bezier.cc index 3712b9213e..e15b04827a 100644 --- a/lily/bezier.cc +++ b/lily/bezier.cc @@ -1,9 +1,20 @@ /* - bezier.cc -- implement Bezier and Bezier_bow + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #include "bezier.hh" @@ -265,3 +276,52 @@ Bezier::reverse () b2.control_[CONTROL_COUNT - i - 1] = control_[i]; *this = b2; } + + +/* + Subdivide a bezier at T into LEFT_PART and RIGHT_PART + using deCasteljau's algorithm. +*/ +void +Bezier::subdivide (Real t, Bezier *left_part, Bezier *right_part) const +{ + Offset p[CONTROL_COUNT][CONTROL_COUNT]; + + for (int i = 0; i < CONTROL_COUNT ; i++) + p[i][CONTROL_COUNT - 1 ] = control_[i]; + for (int j = CONTROL_COUNT - 2; j >= 0 ; j--) + for (int i = 0; i < CONTROL_COUNT -1; i++) + p[i][j] = p[i][j+1] + t * (p[i+1][j+1] - p[i][j+1]); + for (int i = 0; i < CONTROL_COUNT; i++) + { + left_part->control_[i]=p[0][CONTROL_COUNT - 1 - i]; + right_part->control_[i]=p[i][i]; + } +} + +/* + Extract a portion of a bezier from T_MIN to T_MAX +*/ + +Bezier +Bezier::extract (Real t_min, Real t_max) const +{ + if ((t_min < 0) || (t_max) > 1) + programming_error + ("bezier extract arguments outside of limits: curve may have bad shape"); + if (t_min >= t_max) + programming_error + ("lower bezier extract value not less than upper value: curve may have bad shape"); + Bezier bez1, bez2, bez3, bez4; + if (t_min == 0.0) + bez2 = *this; + else + subdivide (t_min, &bez1, &bez2); + if (t_max == 1.0) + return bez2; + else + { + bez2.subdivide ((t_max-t_min)/(1-t_min), &bez3, &bez4); + return bez3; + } +} diff --git a/lily/book-scheme.cc b/lily/book-scheme.cc index 0c0896668f..339e2c2829 100644 --- a/lily/book-scheme.cc +++ b/lily/book-scheme.cc @@ -1,9 +1,20 @@ /* - book-scheme.cc -- implement Book bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "book.hh" @@ -111,10 +122,46 @@ LY_DEFINE (ly_book_add_score_x, "ly:book-add-score!", LY_DEFINE (ly_book_add_bookpart_x, "ly:book-add-bookpart!", 2, 0, 0, (SCM book_smob, SCM book_part), - "Add @var{book_part} to @var{book-smob} book part list.") + "Add @var{book-part} to @var{book-smob} book part list.") { LY_ASSERT_SMOB (Book, book_smob, 1); Book *book = unsmob_book (book_smob); book->add_bookpart (book_part); return SCM_UNSPECIFIED; } + +LY_DEFINE (ly_book_book_parts, "ly:book-book-parts", + 1, 0, 0, (SCM book), + "Return book parts in @var{book}.") +{ + LY_ASSERT_SMOB (Book, book, 1); + Book *b = unsmob_book (book); + return b->bookparts_; +} + +LY_DEFINE (ly_book_paper, "ly:book-paper", + 1, 0, 0, (SCM book), + "Return paper in @var{book}.") +{ + LY_ASSERT_SMOB (Book, book, 1); + Book *b = unsmob_book (book); + return b->paper_ ? b->paper_->self_scm () : SCM_BOOL_F; +} + +LY_DEFINE (ly_book_header, "ly:book-header", + 1, 0, 0, (SCM book), + "Return header in @var{book}.") +{ + LY_ASSERT_SMOB (Book, book, 1); + Book *b = unsmob_book (book); + return b->header_ ? b->header_ : SCM_BOOL_F; +} + +LY_DEFINE (ly_book_scores, "ly:book-scores", + 1, 0, 0, (SCM book), + "Return scores in @var{book}.") +{ + LY_ASSERT_SMOB (Book, book, 1); + Book *b = unsmob_book (book); + return b->scores_; +} diff --git a/lily/book.cc b/lily/book.cc index 48a5a4c552..e1fdef644d 100644 --- a/lily/book.cc +++ b/lily/book.cc @@ -1,9 +1,20 @@ /* - book.cc -- implement Book + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "book.hh" @@ -50,21 +61,27 @@ Book::Book (Book const &s) paper_ = s.paper_->clone (); paper_->unprotect (); } - + input_location_ = make_input (*s.origin ()); - header_ = ly_make_anonymous_module (false); + header_ = ly_make_module (false); if (ly_is_module (s.header_)) ly_module_copy (header_, s.header_); - SCM *t = &scores_; for (SCM p = s.scores_; scm_is_pair (p); p = scm_cdr (p)) { - Score *newscore = unsmob_score (scm_car (p))->clone (); + SCM entry = scm_car (p); - *t = scm_cons (newscore->self_scm (), SCM_EOL); + if (Score *newscore = unsmob_score (entry)) + *t = scm_cons (newscore->clone ()->unprotect (), SCM_EOL); + else if (Page_marker *marker = unsmob_page_marker (entry)) + *t = scm_cons (marker->clone ()->unprotect (), SCM_EOL); + else + { + /* This entry is a markup list */ + *t = scm_cons (entry, SCM_EOL); + } t = SCM_CDRLOC (*t); - newscore->unprotect (); } t = &bookparts_; @@ -101,7 +118,7 @@ Book::mark_smob (SCM s) scm_gc_mark (book->scores_); scm_gc_mark (book->bookparts_); scm_gc_mark (book->input_location_); - + return book->header_; } @@ -127,10 +144,10 @@ Book::set_parent (Book *parent) paper_->unprotect (); } paper_->parent_ = parent->paper_; - /* If this part is the first child of parent, copy its header */ - if (ly_is_module (parent->header_) && (scm_is_null (parent->bookparts_))) + /* Copy the header block of the parent */ + if (ly_is_module (parent->header_)) { - SCM tmp_header = ly_make_anonymous_module (false); + SCM tmp_header = ly_make_module (false); ly_module_copy (tmp_header, parent->header_); if (ly_is_module (header_)) ly_module_copy (tmp_header, header_); @@ -147,7 +164,7 @@ Book::add_scores_to_bookpart () { if (scm_is_pair (scores_)) { - /* If scores have been added to this book, add them to a child + /* If scores have been added to this book, add them to a child * book part */ Book *part = new Book; part->set_parent (this); @@ -174,7 +191,7 @@ Book::error_found () if (Score *score = unsmob_score (scm_car (s))) if (score->error_found_) return true; - + for (SCM part = bookparts_; scm_is_pair (part); part = scm_cdr (part)) if (Book *bookpart = unsmob_book (scm_car (part))) if (bookpart->error_found ()) @@ -217,11 +234,11 @@ Book::process_score (SCM s, Paper_book *output_paper_book, Output_def *layout) { SCM outputs = score ->book_rendering (output_paper_book->paper_, layout); - + while (scm_is_pair (outputs)) { Music_output *output = unsmob_music_output (scm_car (outputs)); - + if (Performance *perf = dynamic_cast (output)) output_paper_book->add_performance (perf->self_scm ()); else if (Paper_score *pscore = dynamic_cast (output)) @@ -230,7 +247,7 @@ Book::process_score (SCM s, Paper_book *output_paper_book, Output_def *layout) output_paper_book->add_score (score->get_header ()); output_paper_book->add_score (pscore->self_scm ()); } - + outputs = scm_cdr (outputs); } } @@ -239,7 +256,7 @@ Book::process_score (SCM s, Paper_book *output_paper_book, Output_def *layout) output_paper_book->add_score (scm_car (s)); else assert (0); - + } /* Concatenate all score or book part outputs into a Paper_book @@ -277,8 +294,9 @@ Book::process (Output_def *default_paper, } else { + paper_book->paper_->normalize (); /* Process scores */ - /* Render in order of parsing. */ + /* Render in order of parsing. */ for (SCM s = scm_reverse (scores_); scm_is_pair (s); s = scm_cdr (s)) { process_score (s, paper_book, default_layout); diff --git a/lily/box.cc b/lily/box.cc index f35f935204..6b6088bf19 100644 --- a/lily/box.cc +++ b/lily/box.cc @@ -1,9 +1,20 @@ /* - box.cc -- implement Box + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #include "box.hh" diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index 922978f2b1..76d6e891f6 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -1,9 +1,20 @@ /* - break-align-engraver.cc -- implement Break_align_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" #include "protected-scm.hh" @@ -58,6 +69,13 @@ Break_align_engraver::derived_mark () const 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); @@ -84,7 +102,7 @@ Break_align_engraver::acknowledge_break_aligned (Grob_info inf) SCM align_name = item->get_property ("break-align-symbol"); if (!scm_is_symbol (align_name)) return; - + if (!align_) create_alignment (inf); diff --git a/lily/break-alignment-interface.cc b/lily/break-alignment-interface.cc index 437d09e67c..18f0ae8404 100644 --- a/lily/break-alignment-interface.cc +++ b/lily/break-alignment-interface.cc @@ -1,9 +1,20 @@ /* - break-alignment-interface.cc -- implement Break_alignment_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ @@ -370,6 +381,7 @@ ADD_INTERFACE (Break_alignable_interface, /* properties */ "break-align-symbols " + "non-break-align-symbols " ); ADD_INTERFACE (Break_aligned_interface, diff --git a/lily/break-substitution.cc b/lily/break-substitution.cc index e4d6a9a853..2cd29707d6 100644 --- a/lily/break-substitution.cc +++ b/lily/break-substitution.cc @@ -1,9 +1,20 @@ /* - break-substitution.cc -- implement grob break substitution. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include @@ -284,8 +295,8 @@ struct Substitution_entry } else { - left_ = sr[LEFT]; - right_ = sr[RIGHT]; + left_ = (short) sr[LEFT]; + right_ = (short) sr[RIGHT]; } } Substitution_entry () diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index b65131579f..4e583881c0 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -1,15 +1,26 @@ /* - breathing_sign-engraver.cc -- implement Breathing_sign_engraver + This file is part of LilyPond, the GNU music typesetter. - (c) 1999--2009 Michael Krause + Copyright (C) 1999--2011 Michael Krause written for the GNU LilyPond music typesetter TODO: - . Cancel any beams running through the breathing sign - ([e8 \breathe f e f] should become [e8] \breathe [f e f]) . Spacing is not yet completely pretty + + 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 . */ #include "breathing-sign.hh" diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index 58c399bf70..a59bd65070 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -1,31 +1,35 @@ /* - breathing_sign.cc -- implement Breathing_sign + This file is part of LilyPond, the GNU music typesetter. - (c) 1999--2009 Michael Krause + Copyright (C) 1999--2011 Michael Krause + Extensions for ancient notation (c) 2003--2011 by Juergen Reuter - written for the GNU LilyPond music typesetter + 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. - TODO: --> see breathing-sign-engraver.cc + 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. - Extensions for ancient notation (c) 2003--2009 by Juergen Reuter + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #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 @@ -169,14 +173,20 @@ Breathing_sign::offset_callback (SCM smob) 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 " ); diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index 698c9e8a4a..04647c111c 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -1,9 +1,20 @@ /* - change-iterator.cc -- implement Change_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "change-iterator.hh" diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index f8858998a1..d0ced5a395 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -1,9 +1,20 @@ /* - chord-name-engraver.cc -- implement Chord_name_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #include "chord-name.hh" @@ -16,6 +27,7 @@ #include "pitch.hh" #include "protected-scm.hh" #include "stream-event.hh" +#include "text-interface.hh" #include "warn.hh" #include "translator.icc" @@ -29,11 +41,13 @@ protected: virtual void finalize (); virtual void derived_mark () const; DECLARE_TRANSLATOR_LISTENER (note); + DECLARE_TRANSLATOR_LISTENER (rest); private: Item *chord_name_; vector notes_; - + SCM last_chord_; + Stream_event *rest_event_; }; void @@ -51,68 +65,80 @@ Chord_name_engraver::Chord_name_engraver () { chord_name_ = 0; last_chord_ = SCM_EOL; + rest_event_ = 0; } void Chord_name_engraver::process_music () -{ - if (!notes_.size ()) - return; - +{ + SCM markup; SCM bass = SCM_EOL; SCM inversion = SCM_EOL; SCM pitches = SCM_EOL; - Stream_event *inversion_event = 0; - for (vsize i = 0; i < notes_.size (); i++) + if (rest_event_) { - Stream_event *n = notes_[i]; - SCM p = n->get_property ("pitch"); - if (!unsmob_pitch (p)) - continue; - - if (n->get_property ("inversion") == SCM_BOOL_T) - { - inversion_event = n; - inversion = p; - } - else if (n->get_property ("bass") == SCM_BOOL_T) - bass = p; - else - pitches = scm_cons (p, pitches); + SCM no_chord_markup = get_property ("noChordSymbol"); + if (!Text_interface::is_markup (no_chord_markup)) + return; + markup = no_chord_markup; } - - if (inversion_event) - { - SCM oct = inversion_event->get_property ("octavation"); - if (scm_is_number (oct)) - { - Pitch *p = unsmob_pitch (inversion_event->get_property ("pitch")); - int octavation = scm_to_int (oct); - Pitch orig = p->transposed (Pitch (-octavation, 0, 0)); - - pitches = scm_cons (orig.smobbed_copy (), pitches); - } - else - programming_error ("inversion does not have original pitch"); + else + { + if (!notes_.size ()) + return; + + Stream_event *inversion_event = 0; + for (vsize i = 0; i < notes_.size (); i++) + { + Stream_event *n = notes_[i]; + SCM p = n->get_property ("pitch"); + if (!unsmob_pitch (p)) + continue; + + if (n->get_property ("inversion") == SCM_BOOL_T) + { + inversion_event = n; + inversion = p; + } + else if (n->get_property ("bass") == SCM_BOOL_T) + bass = p; + else + pitches = scm_cons (p, pitches); + } + + if (inversion_event) + { + SCM oct = inversion_event->get_property ("octavation"); + if (scm_is_number (oct)) + { + Pitch *p = unsmob_pitch (inversion_event->get_property ("pitch")); + int octavation = scm_to_int (oct); + Pitch orig = p->transposed (Pitch (-octavation, 0, 0)); + + pitches = scm_cons (orig.smobbed_copy (), pitches); + } + else + programming_error ("inversion does not have original pitch"); + } + + pitches = scm_sort_list (pitches, Pitch::less_p_proc); + + SCM name_proc = get_property ("chordNameFunction"); + markup = scm_call_4 (name_proc, pitches, bass, inversion, + context ()->self_scm ()); } - - pitches = scm_sort_list (pitches, Pitch::less_p_proc); - - SCM name_proc = get_property ("chordNameFunction"); - SCM markup = scm_call_4 (name_proc, pitches, bass, inversion, - context ()->self_scm ()); - /* Ugh. */ SCM chord_as_scm = scm_cons (pitches, scm_cons (bass, inversion)); - chord_name_ = make_item ("ChordName", notes_[0]->self_scm ()); + chord_name_ = make_item ("ChordName", + rest_event_ ? rest_event_->self_scm () : notes_[0]->self_scm ()); chord_name_->set_property ("text", markup); - SCM s = get_property ("chordChanges"); - if (to_boolean (s) && scm_is_pair (last_chord_) + SCM chord_changes = get_property("chordChanges"); + if (to_boolean (chord_changes) && scm_is_pair (last_chord_) && ly_is_equal (chord_as_scm, last_chord_)) chord_name_->set_property ("begin-of-line-visible", SCM_BOOL_T); @@ -126,11 +152,19 @@ Chord_name_engraver::listen_note (Stream_event *ev) notes_.push_back (ev); } +IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, rest); +void +Chord_name_engraver::listen_rest (Stream_event *ev) +{ + ASSIGN_EVENT_ONCE(rest_event_, ev); +} + void Chord_name_engraver::stop_translation_timestep () { chord_name_ = 0; notes_.clear (); + rest_event_ = 0; } /* @@ -139,7 +173,7 @@ Chord_name_engraver::stop_translation_timestep () */ ADD_TRANSLATOR (Chord_name_engraver, /* doc */ - "Catch note events and generate the appropriate chordname.", + "Catch note and rest events and generate the appropriate chordname.", /* create */ "ChordName ", @@ -151,7 +185,8 @@ ADD_TRANSLATOR (Chord_name_engraver, "chordNoteNamer " "chordRootNamer " "chordNameExceptions " - "majorSevenSymbol ", + "majorSevenSymbol " + "noChordSymbol ", /* write */ "" diff --git a/lily/chord-name.cc b/lily/chord-name.cc index 6cfe2def10..ad0d91d3db 100644 --- a/lily/chord-name.cc +++ b/lily/chord-name.cc @@ -1,9 +1,20 @@ /* - chord-name.cc -- implement Chord_name + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Jan Nieuwenhuizen - (c) 1999--2009 Jan Nieuwenhuizen + 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 . */ #include "chord-name.hh" @@ -33,7 +44,7 @@ Chord_name::after_line_breaking (SCM smob) } ADD_INTERFACE (Chord_name, - "A chord name.", + "A chord label (name or fretboard).", /* properties */ "begin-of-line-visible " diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index 28790b5a86..1cd9147839 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -1,10 +1,21 @@ /* - chord-tremolo-engraver.cc -- implement Chord_tremolo_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Han-Wen Nienhuys + Copyright (C) 2000--2011 Han-Wen Nienhuys Erik Sandberg + + 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 . */ #include "beam.hh" @@ -43,10 +54,10 @@ class Chord_tremolo_engraver : public Engraver protected: Stream_event *repeat_; - // current direction of beam (first RIGHT, then LEFT) - Direction beam_dir_; - Spanner *beam_; + // Store the pointer to the previous stem, so we can create a beam if + // necessary and end the spanner + Grob *previous_stem_; protected: virtual void finalize (); @@ -59,7 +70,7 @@ Chord_tremolo_engraver::Chord_tremolo_engraver () { beam_ = 0; repeat_ = 0; - beam_dir_ = CENTER; + previous_stem_ = 0; } IMPLEMENT_TRANSLATOR_LISTENER (Chord_tremolo_engraver, tremolo_span); @@ -69,18 +80,15 @@ Chord_tremolo_engraver::listen_tremolo_span (Stream_event *ev) Direction span_dir = to_dir (ev->get_property ("span-direction")); if (span_dir == START) { - if (ASSIGN_EVENT_ONCE (repeat_, ev)) - { - beam_dir_ = RIGHT; - } + ASSIGN_EVENT_ONCE (repeat_, ev); } else if (span_dir == STOP) { if (!repeat_) - ev->origin ()->warning (_ ("No tremolo to end")); + ev->origin ()->warning (_ ("No tremolo to end")); repeat_ = 0; beam_ = 0; - beam_dir_ = CENTER; + previous_stem_ = 0; } } @@ -115,17 +123,26 @@ Chord_tremolo_engraver::acknowledge_stem (Grob_info info) int gap_count = min (flags, intlog2 (repeat_count) + 1); Grob *s = info.grob (); - Stem::set_beaming (s, flags, beam_dir_); + if (previous_stem_) + { + // FIXME: We know that the beam has ended only in listen_tremolo_span + // but then it is too late for Spanner_break_forbid_engraver + // to allow a line break... So, as a nasty hack, announce the + // spanner's end after each note except the first. The only + // "drawback" is that for multi-note tremolos a break would + // theoretically be allowed after the second note (but since + // that note is typically not at a barline, I don't think + // anyone will ever notice!) + announce_end_grob (beam_, previous_stem_->self_scm ()); + // Create the whole beam between previous and current note + Stem::set_beaming (previous_stem_, flags, RIGHT); + Stem::set_beaming (s, flags, LEFT); + } if (Stem::duration_log (s) != 1) - beam_->set_property ("gap-count", scm_from_int (gap_count)); + beam_->set_property ("gap-count", scm_from_int (gap_count)); + - if (beam_dir_ == RIGHT) - { - beam_dir_ = LEFT; - announce_end_grob (beam_, s->self_scm ()); - } - if (info.ultimate_event_cause ()->in_event_class ("rhythmic-event")) Beam::add_stem (beam_, s); else @@ -136,6 +153,9 @@ Chord_tremolo_engraver::acknowledge_stem (Grob_info info) else ::warning (s); } + // Store current grob, so we can possibly end the spanner here (and + // reset the beam direction to RIGHT) + previous_stem_ = s; } } diff --git a/lily/chord-tremolo-iterator.cc b/lily/chord-tremolo-iterator.cc index e7d9d495b1..c4454544b6 100644 --- a/lily/chord-tremolo-iterator.cc +++ b/lily/chord-tremolo-iterator.cc @@ -1,10 +1,21 @@ /* - chord-tremolo-iterator.cc -- implement Chord_tremolo_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Han-Wen Nienhuys + Copyright (C) 2000--2011 Han-Wen Nienhuys Erik Sandberg + + 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 . */ #include "chord-tremolo-iterator.hh" @@ -29,11 +40,6 @@ Chord_tremolo_iterator::get_music_list () const int elt_count = body_is_sequential ? scm_ilength (body->get_property ("elements")) : 1; - if (body_is_sequential && - (elt_count != 2 - && elt_count != 1)) - mus->origin ()->warning (_f ("expect 2 elements for chord tremolo, found %d", elt_count)); - if (elt_count <= 0) elt_count = 1; @@ -46,7 +52,7 @@ Chord_tremolo_iterator::get_music_list () const return scm_list_2 (ev->unprotect (), body->self_scm ()); } else - { + { SCM tremolo_symbol = ly_symbol2scm ("TremoloSpanEvent"); SCM start_event_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tremolo_symbol, scm_from_int (START)); unsmob_music (start_event_scm)->set_spot (*origin); diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 52d094e243..5ddfea627e 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -1,11 +1,21 @@ /* - clef-engraver.cc -- implement Clef_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys + Mats Bengtsson - (c) 1997--2009 Han-Wen Nienhuys , + 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. - Mats Bengtsson + 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 . */ #include @@ -26,8 +36,6 @@ class Clef_engraver : public Engraver public: TRANSLATOR_DECLARATIONS (Clef_engraver); - Direction octave_dir_; - protected: void stop_translation_timestep (); void process_music (); @@ -57,7 +65,6 @@ Clef_engraver::derived_mark () const Clef_engraver::Clef_engraver () { clef_ = 0; - octave_dir_ = CENTER; octavate_ = 0; /* @@ -83,7 +90,7 @@ Clef_engraver::set_glyph () void Clef_engraver::acknowledge_bar_line (Grob_info info) { - Item *item = dynamic_cast (info.grob ()); + Item *item = info.item (); if (item && scm_is_string (get_property ("clefGlyph"))) create_clef (); } @@ -131,6 +138,15 @@ Clef_engraver::process_music () inspect_clef_properties (); } +static void apply_on_children (Context *context, SCM fun) +{ + scm_call_1(fun, context->self_scm()); + for (SCM s = context->children_contexts (); + scm_is_pair(s); s = scm_cdr (s)) + apply_on_children(unsmob_context (scm_car(s)), fun); +} + + void Clef_engraver::inspect_clef_properties () { @@ -145,9 +161,8 @@ Clef_engraver::inspect_clef_properties () || scm_equal_p (octavation, prev_octavation_) == SCM_BOOL_F || to_boolean (force_clef)) { - set_context_property_on_children (context (), - ly_symbol2scm ("localKeySignature"), - get_property ("keySignature")); + apply_on_children(context (), + ly_lily_module_constant ("invalidate-alterations")); set_glyph (); if (prev_cpos_ != SCM_BOOL_F || to_boolean (get_property ("firstClef"))) @@ -179,11 +194,7 @@ Clef_engraver::stop_translation_timestep () vis = get_property ("explicitClefVisibility"); if (vis) - { - clef_->set_property ("break-visibility", vis); - if (octavate_) - octavate_->set_property ("break-visibility", vis); - } + clef_->set_property ("break-visibility", vis); clef_ = 0; diff --git a/lily/clef.cc b/lily/clef.cc index 80e480751d..c6ad530e41 100644 --- a/lily/clef.cc +++ b/lily/clef.cc @@ -1,9 +1,20 @@ /* - clef.cc -- implement Clef_item + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "clef.hh" diff --git a/lily/cluster-engraver.cc b/lily/cluster-engraver.cc index bf25dce7b5..7ef6b63477 100644 --- a/lily/cluster-engraver.cc +++ b/lily/cluster-engraver.cc @@ -1,9 +1,21 @@ /* - cluster-engraver.cc -- implement Cluster_engraver - - (c) 2002--2009 Juergen Reuter + This file is part of LilyPond, the GNU music typesetter. + Copyright (C) 2002--2011 Juergen Reuter Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" diff --git a/lily/cluster.cc b/lily/cluster.cc index d872fca6be..9922839099 100644 --- a/lily/cluster.cc +++ b/lily/cluster.cc @@ -1,11 +1,21 @@ /* - cluster.cc -- implement Cluster + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Juergen Reuter + Han-Wen Nienhuys - (c) 2002--2009 Juergen Reuter + 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. - Han-Wen Nienhuys + 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 . */ #include "cluster.hh" diff --git a/lily/coherent-ligature-engraver.cc b/lily/coherent-ligature-engraver.cc index 5b1ec9cdc8..eb8fcaabb1 100644 --- a/lily/coherent-ligature-engraver.cc +++ b/lily/coherent-ligature-engraver.cc @@ -1,9 +1,20 @@ /* - coherent-ligature-engraver.cc -- implement Coherent_ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #include "coherent-ligature-engraver.hh" diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc index a645f36f7e..a92a2a7171 100644 --- a/lily/collision-engraver.cc +++ b/lily/collision-engraver.cc @@ -1,9 +1,20 @@ /* - collision-engraver.cc -- implement Collision_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/column-x-positions.cc b/lily/column-x-positions.cc index 134f84b73b..d1e87dd0a3 100644 --- a/lily/column-x-positions.cc +++ b/lily/column-x-positions.cc @@ -1,9 +1,20 @@ /* - column-x-positions.cc -- implement Column_x_positions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "column-x-positions.hh" diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index b4c4afb087..a2c606f472 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -1,7 +1,20 @@ /* - completion-note-heads-engraver.cc -- Completion_heads_engraver + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys + + 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 . */ #include @@ -14,33 +27,17 @@ using namespace std; #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; } -}; - -int compare(Pending_tie const &a, Pending_tie const &b) -{ - return compare(a.when_, b.when_); -} - - /* How does this work? @@ -58,24 +55,22 @@ int compare(Pending_tie const &a, Pending_tie const &b) class Completion_heads_engraver : public Engraver { - vector notes_; - vector prev_notes_; - + vector notes_; + vector prev_notes_; // Must remember notes for explicit ties. - vector tie_note_candidates_; - vector tie_note_candidate_events_; - vector ties_; - PQueue pending_ties_; - vector note_events_; - - Stream_event *current_tie_event_; + vector tie_note_candidates_; + vector tie_note_candidate_events_; + vector ties_; + vector note_events_; + Spanner *tie_column_; Moment note_end_mom_; bool is_first_; Rational left_to_do_; Rational do_nothing_until_; + Rational factor_; Moment next_barline_moment (); - Item *make_note_head (Stream_event*); + Item *make_note_head (Stream_event *); public: TRANSLATOR_DECLARATIONS (Completion_heads_engraver); @@ -87,14 +82,12 @@ protected: 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); @@ -102,7 +95,7 @@ void 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); @@ -111,16 +104,8 @@ Completion_heads_engraver::listen_note (Stream_event *ev) 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 () @@ -135,7 +120,7 @@ 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 ()); @@ -157,14 +142,6 @@ Completion_heads_engraver::process_music () 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 (); @@ -174,22 +151,33 @@ Completion_heads_engraver::process_music () Duration note_dur; Duration *orig = 0; if (left_to_do_) - note_dur = Duration (left_to_do_, false); + { + /* + note that note_dur may be strictly less than left_to_do_ + (say, if left_to_do_ == 5/8) + */ + if (factor_.denominator () == 1 && factor_ > Rational (1, 1)) + note_dur = Duration (left_to_do_, false); + else + note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_); + } else { orig = unsmob_duration (note_events_[0]->get_property ("duration")); note_dur = *orig; + factor_ = note_dur.factor (); + left_to_do_ = orig->get_length (); } Moment nb = next_barline_moment (); if (nb.main_part_ && nb < note_dur.get_length ()) { - note_dur = Duration (nb.main_part_, false); - - do_nothing_until_ = now.main_part_ + note_dur.get_length (); + if (factor_.denominator () == 1 && factor_ > Rational (1, 1)) + note_dur = Duration (nb.main_part_, false); + else + note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_); } - if (orig) - left_to_do_ = orig->get_length (); + do_nothing_until_ = now.main_part_ + note_dur.get_length (); for (vsize i = 0; left_to_do_ && i < note_events_.size (); i++) { @@ -200,41 +188,42 @@ Completion_heads_engraver::process_music () event = event->clone (); SCM pits = note_events_[i]->get_property ("pitch"); - event->set_property ("pitch", pits); event->set_property ("duration", note_dur.smobbed_copy ()); 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_[j]->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. */ @@ -250,11 +239,12 @@ Completion_heads_engraver::make_tie (Grob *left, Grob *right) 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_; @@ -265,11 +255,6 @@ void 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_; @@ -284,6 +269,7 @@ Completion_heads_engraver::start_translation_timestep () Completion_heads_engraver::Completion_heads_engraver () { + tie_column_ = 0; } ADD_TRANSLATOR (Completion_heads_engraver, @@ -294,13 +280,14 @@ ADD_TRANSLATOR (Completion_heads_engraver, /* create */ "NoteHead " - "Dots " - "Tie ", + "Tie " + "TieColumn ", /* read */ - "middleCPosition " + "measureLength " "measurePosition " - "measureLength ", + "middleCPosition " + "timing ", /* write */ "completionBusy " diff --git a/lily/completion-rest-engraver.cc b/lily/completion-rest-engraver.cc new file mode 100644 index 0000000000..3d8d7211ff --- /dev/null +++ b/lily/completion-rest-engraver.cc @@ -0,0 +1,249 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1997--2011 Han-Wen Nienhuys + Jan Nieuwenhuizen + + 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 . +*/ + +#include +using namespace std; + +#include "dot-column.hh" +#include "dots.hh" +#include "duration.hh" +#include "global-context.hh" +#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 "warn.hh" + +#include "translator.icc" + +/* + How does this work? + + When we catch the rest, we predict the end of the rest. We keep the + events living until we reach the predicted end-time. + + Every time process_music () is called and there are rest events, we + figure out how long the rest to typeset should be. It should be no + longer than what's specified, than what is left to do and it should + not cross barlines. + + We copy the events into scratch rest events, to make sure that we get + all durations exactly right. +*/ + +class Completion_rest_engraver : public Engraver +{ + vector rests_; + vector prev_rests_; + vector rest_events_; + Moment rest_end_mom_; + bool is_first_; + Rational left_to_do_; + Rational do_nothing_until_; + Rational factor_; + + Moment next_barline_moment (); + Item *make_rest (Stream_event*); + +public: + TRANSLATOR_DECLARATIONS (Completion_rest_engraver); + +protected: + virtual void initialize (); + void start_translation_timestep (); + void process_music (); + void stop_translation_timestep (); + DECLARE_TRANSLATOR_LISTENER (rest); +}; + +void +Completion_rest_engraver::initialize () +{ + is_first_ = false; +} + +IMPLEMENT_TRANSLATOR_LISTENER (Completion_rest_engraver, rest); +void +Completion_rest_engraver::listen_rest (Stream_event *ev) +{ + rest_events_.push_back (ev); + + is_first_ = true; + Moment now = now_mom (); + Moment musiclen = get_event_length (ev, now); + + rest_end_mom_ = max (rest_end_mom_, (now + musiclen)); + do_nothing_until_ = Rational (0, 0); +} + +/* + The duration _until_ the next barline. +*/ +Moment +Completion_rest_engraver::next_barline_moment () +{ + Moment *e = unsmob_moment (get_property ("measurePosition")); + Moment *l = unsmob_moment (get_property ("measureLength")); + if (!e || !l || !to_boolean (get_property ("timing"))) + { + return Moment (0, 0); + } + + return (*l - *e); +} + +Item* +Completion_rest_engraver::make_rest (Stream_event *ev) +{ + Item *rest = make_item ("Rest", ev->self_scm ()); + if (Pitch *p = unsmob_pitch (ev->get_property ("pitch"))) + { + int pos = p->steps (); + SCM c0 = get_property ("middleCPosition"); + if (scm_is_number (c0)) + pos += scm_to_int (c0); + rest->set_property ("staff-position", scm_from_int (pos)); + } + + return rest; +} + +void +Completion_rest_engraver::process_music () +{ + if (!is_first_ && !left_to_do_) + return; + + is_first_ = false; + + Moment now = now_mom (); + if (do_nothing_until_ > now.main_part_) + return; + + Duration rest_dur; + Duration appearance; + Duration *orig = 0; + if (left_to_do_) + { + /* + rest that rest_dur may be strictly less than left_to_do_ + (say, if left_to_do_ == 5/8) + */ + if (factor_.denominator () == 1 && factor_ > Rational (1, 1)) + rest_dur = Duration (left_to_do_, false); + else + rest_dur = Duration (left_to_do_ / factor_, false).compressed (factor_); + appearance = Duration (left_to_do_, false); + } + else + { + orig = unsmob_duration (rest_events_[0]->get_property ("duration")); + rest_dur = *orig; + factor_ = rest_dur.factor (); + left_to_do_ = orig->get_length (); + } + Moment nb = next_barline_moment (); + if (nb.main_part_ && nb < rest_dur.get_length ()) + { + if (factor_.denominator () == 1 && factor_ > Rational (1, 1)) + rest_dur = Duration (nb.main_part_, false); + else + rest_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_); + } + + do_nothing_until_ = now.main_part_ + rest_dur.get_length (); + + for (vsize i = 0; left_to_do_ && i < rest_events_.size (); i++) + { + bool need_clone = !orig || *orig != rest_dur; + Stream_event *event = rest_events_[i]; + + if (need_clone) + event = event->clone (); + + SCM pits = rest_events_[i]->get_property ("pitch"); + event->set_property ("pitch", pits); + event->set_property ("duration", rest_dur.smobbed_copy ()); + event->set_property ("length", Moment (rest_dur.get_length ()).smobbed_copy ()); + event->set_property ("duration-log", scm_from_int (rest_dur.duration_log ())); + + Item *rest = make_rest (event); + if (need_clone) + event->unprotect (); + rests_.push_back (rest); + } + + left_to_do_ -= rest_dur.get_length (); + if (left_to_do_) + get_global_context ()->add_moment_to_process (now.main_part_ + rest_dur.get_length()); + /* + don't do complicated arithmetic with grace rests. + */ + if (orig && now_mom ().grace_part_) + left_to_do_ = Rational (0, 0); +} + +void +Completion_rest_engraver::stop_translation_timestep () +{ + if (rests_.size ()) + prev_rests_ = rests_; + rests_.clear (); +} + +void +Completion_rest_engraver::start_translation_timestep () +{ + Moment now = now_mom (); + if (rest_end_mom_.main_part_ <= now.main_part_) + { + rest_events_.clear (); + prev_rests_.clear (); + } + context ()->set_property ("restCompletionBusy", + ly_bool2scm (rest_events_.size ())); +} + +Completion_rest_engraver::Completion_rest_engraver () +{ +} + +ADD_TRANSLATOR (Completion_rest_engraver, + /* doc */ + "This engraver replaces @code{Rest_engraver}. It plays" + " some trickery to break long rests into the next measure." + , + /* create */ + "Rest " + , + /* read */ + "middleCPosition " + "measurePosition " + "measureLength " + , + /* write */ + "restCompletionBusy " + ); diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc index 3a56aa4754..f6f84b8090 100644 --- a/lily/constrained-breaking.cc +++ b/lily/constrained-breaking.cc @@ -1,10 +1,20 @@ /* - constrained-breaking.cc -- implement a line breaker that - support limits on the number of systems + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #include "constrained-breaking.hh" @@ -12,6 +22,7 @@ #include "international.hh" #include "main.hh" #include "output-def.hh" +#include "page-layout-problem.hh" #include "paper-column.hh" #include "paper-score.hh" #include "simple-spacer.hh" @@ -21,7 +32,7 @@ /* We use the following optimal substructure. Let W (A) be our weight function. - Let A_{k, n} = (a_{k, n,1}, ... a_{k, n, k}) be the optimal set of line breaks + Let A_{k, n} = (a_{k, n, 1}, ... a_{k, n, k}) be the optimal set of line breaks for k systems and n potential breakpoints. a_{k, n, k} = n (it is the end of the piece) @@ -173,10 +184,13 @@ Constrained_breaking::solve (vsize start, vsize end, vsize sys_count) { if (brk != end_brk) { - warning (_ ("cannot find line breaking that satisfies constraints" )); + brk = st.at (brk, sys).prev_; + sys--; + warning (_ ("cannot find line breaking that satisfies constraints")); ret.push_back (space_line (brk, end_brk)); } - /* build up the good solution */ + + /* build up the good part of the solution */ for (vsize cur_sys = sys; cur_sys != VPOS; cur_sys--) { vsize prev_brk = st.at (brk, cur_sys).prev_; @@ -236,16 +250,52 @@ Constrained_breaking::best_solution (vsize start, vsize end) std::vector Constrained_breaking::line_details (vsize start, vsize end, vsize sys_count) { - vsize brk = prepare_solution (start, end, sys_count); + vsize end_brk = prepare_solution (start, end, sys_count); Matrix const &st = state_[start]; vector ret; - for (int sys = sys_count-1; sys >= 0 && brk != VPOS; sys--) + /* This loop structure is C&Ped from solve(). */ + /* find the first solution that satisfies constraints */ + for (vsize sys = sys_count-1; sys != VPOS; sys--) { - ret.push_back (st.at (brk, sys).details_); - brk = st.at (brk, sys).prev_; + for (vsize brk = end_brk; brk != VPOS; brk--) + { + if (!isinf (st.at (brk, sys).details_.force_)) + { + if (brk != end_brk) + { + /* + During initialize(), we only fill out a + Line_details for lines that are valid (ie. not too + long), otherwise line breaking becomes O(n^3). + In case sys_count is such that no valid solution + is found, we need to fill in the Line_details. + */ + Line_details details; + brk = st.at (brk, sys).prev_; + sys--; + fill_line_details (&details, brk, end_brk); + ret.push_back (details); + } + + /* build up the good part of the solution */ + for (vsize cur_sys = sys; cur_sys != VPOS; cur_sys--) + { + vsize prev_brk = st.at (brk, cur_sys).prev_; + assert (brk != VPOS); + ret.push_back (st.at (brk, cur_sys).details_); + brk = prev_brk; + } + reverse (ret); + return ret; + } + } } - reverse (ret); + + /* if we get to here, just put everything on one line */ + Line_details details; + fill_line_details (&details, 0, end_brk); + ret.push_back (details); return ret; } @@ -330,19 +380,62 @@ Constrained_breaking::initialize () ragged_right_ = to_boolean (pscore_->layout ()->c_variable ("ragged-right")); ragged_last_ = to_boolean (pscore_->layout ()->c_variable ("ragged-last")); - + system_system_space_ = 0; + system_markup_space_ = 0; + system_system_padding_ = 0; + system_system_min_distance_ = 0; + score_system_padding_ = 0; + score_system_min_distance_ = 0; + score_markup_padding_ = 0; + score_markup_min_distance_ = 0; + Output_def *l = pscore_->layout (); - System *sys = pscore_->root_system (); - Real space = robust_scm2double (l->c_variable ("ideal-system-space"), 0); - SCM padding_scm = l->c_variable ("page-breaking-between-system-padding"); - if (!scm_is_number (padding_scm)) - padding_scm = l->c_variable ("between-system-padding"); - Real padding = robust_scm2double (padding_scm, 0.0); + + SCM spacing_spec = l->c_variable ("system-system-spacing"); + SCM between_scores_spec = l->c_variable ("score-system-spacing"); + SCM title_spec = l->c_variable ("score-markup-spacing"); + SCM page_breaking_spacing_spec = l->c_variable ("page-breaking-system-system-spacing"); + + Page_layout_problem::read_spacing_spec (spacing_spec, + &system_system_space_, + ly_symbol2scm ("basic-distance")); + Page_layout_problem::read_spacing_spec (page_breaking_spacing_spec, + &system_system_space_, + ly_symbol2scm ("basic-distance")); + Page_layout_problem::read_spacing_spec (title_spec, + &system_markup_space_, + ly_symbol2scm ("basic-distance")); + + Page_layout_problem::read_spacing_spec (spacing_spec, + &system_system_padding_, + ly_symbol2scm ("padding")); + Page_layout_problem::read_spacing_spec (between_scores_spec, + &score_system_padding_, + ly_symbol2scm ("padding")); + Page_layout_problem::read_spacing_spec (page_breaking_spacing_spec, + &system_system_padding_, + ly_symbol2scm ("padding")); + Page_layout_problem::read_spacing_spec (title_spec, + &score_markup_padding_, + ly_symbol2scm ("padding")); + + Page_layout_problem::read_spacing_spec (between_scores_spec, + &score_system_min_distance_, + ly_symbol2scm ("minimum-distance")); + Page_layout_problem::read_spacing_spec (spacing_spec, + &system_system_min_distance_, + ly_symbol2scm ("minimum-distance")); + Page_layout_problem::read_spacing_spec (page_breaking_spacing_spec, + &system_system_min_distance_, + ly_symbol2scm ("minimum-distance")); + Page_layout_problem::read_spacing_spec (title_spec, + &score_markup_min_distance_, + ly_symbol2scm ("minimum-distance")); Interval first_line = line_dimensions_int (pscore_->layout (), 0); Interval other_lines = line_dimensions_int (pscore_->layout (), 1); /* do all the rod/spring problems */ - breaks_ = pscore_->find_break_indices (); + breaks_ = pscore_->get_break_indices (); all_ = pscore_->root_system ()->used_columns (); lines_.resize (breaks_.size (), breaks_.size (), Line_details ()); vector forces = get_line_forces (all_, @@ -353,9 +446,6 @@ Constrained_breaking::initialize () { for (vsize j = i + 1; j < breaks_.size (); j++) { - int start = Paper_column::get_rank (all_[breaks_[i]]); - int end = Paper_column::get_rank (all_[breaks_[j]]); - Interval extent = sys->pure_height (sys, start, end); bool last = j == breaks_.size () - 1; bool ragged = ragged_right_ || (last && ragged_last_); Line_details &line = lines_.at (j, i); @@ -366,28 +456,7 @@ Constrained_breaking::initialize () if (isinf (line.force_)) break; - Grob *c = all_[breaks_[j]]; - line.break_penalty_ = robust_scm2double (c->get_property ("line-break-penalty"), 0); - line.page_penalty_ = robust_scm2double (c->get_property ("page-break-penalty"), 0); - line.turn_penalty_ = robust_scm2double (c->get_property ("page-turn-penalty"), 0); - line.break_permission_ = c->get_property ("line-break-permission"); - line.page_permission_ = c->get_property ("page-break-permission"); - line.turn_permission_ = c->get_property ("page-turn-permission"); - - /* turn permission should always be stricter than page permission - and page permission should always be stricter than line permission */ - line.page_permission_ = min_permission (line.break_permission_, - line.page_permission_); - line.turn_permission_ = min_permission (line.page_permission_, - line.turn_permission_); - - line.extent_ = (extent.is_empty () - || isnan (extent[LEFT]) - || isnan (extent[RIGHT])) - ? Interval (0, 0) : extent; - line.padding_ = padding; - line.space_ = space; - line.inverse_hooke_ = extent.length () + space; + fill_line_details (&line, i, j); } } @@ -403,6 +472,60 @@ Constrained_breaking::initialize () state_.resize (start_.size ()); } +/* + Fills out all of the information contained in a Line_details, + except for information about horizontal spacing. +*/ +void +Constrained_breaking::fill_line_details (Line_details *const out, vsize start, vsize end) +{ + int start_rank = Paper_column::get_rank (all_[breaks_[start]]); + int end_rank = Paper_column::get_rank (all_[breaks_[end]]); + System *sys = pscore_->root_system (); + Interval begin_of_line_extent = sys->begin_of_line_pure_height (start_rank, end_rank); + Interval rest_of_line_extent = sys->rest_of_line_pure_height (start_rank, end_rank); + bool last = (end == breaks_.size () - 1); + + Grob *c = all_[breaks_[end]]; + out->last_column_ = c; + out->break_penalty_ = robust_scm2double (c->get_property ("line-break-penalty"), 0); + out->page_penalty_ = robust_scm2double (c->get_property ("page-break-penalty"), 0); + out->turn_penalty_ = robust_scm2double (c->get_property ("page-turn-penalty"), 0); + out->break_permission_ = c->get_property ("line-break-permission"); + out->page_permission_ = c->get_property ("page-break-permission"); + out->turn_permission_ = c->get_property ("page-turn-permission"); + + /* turn permission should always be stricter than page permission + and page permission should always be stricter than line permission */ + out->page_permission_ = min_permission (out->break_permission_, + out->page_permission_); + out->turn_permission_ = min_permission (out->page_permission_, + out->turn_permission_); + + begin_of_line_extent = (begin_of_line_extent.is_empty () + || isnan (begin_of_line_extent[LEFT]) + || isnan (begin_of_line_extent[RIGHT])) + ? Interval (0, 0) : begin_of_line_extent; + rest_of_line_extent = (rest_of_line_extent.is_empty () + || isnan (rest_of_line_extent[LEFT]) + || isnan (rest_of_line_extent[RIGHT])) + ? Interval (0, 0) : rest_of_line_extent; + out->shape_ = Line_shape (begin_of_line_extent, rest_of_line_extent); + out->padding_ = last ? score_system_padding_ : system_system_padding_; + out->title_padding_ = score_markup_padding_; + out->min_distance_ = last ? score_system_min_distance_ : system_system_min_distance_; + out->title_min_distance_ = score_markup_min_distance_; + out->space_ = system_system_space_; + out->title_space_ = system_markup_space_; + out->inverse_hooke_ = out->full_height () + system_system_space_; + + out->footnotes_ = sys->get_footnotes_in_range (start_rank, end_rank); + + out->refpoint_extent_ = sys->pure_refpoint_extent (start_rank, end_rank); + if (out->refpoint_extent_.is_empty ()) + out->refpoint_extent_ = Interval (0, 0); +} + Real Constrained_breaking::combine_demerits (Real force, Real prev_force) { @@ -412,3 +535,90 @@ Constrained_breaking::combine_demerits (Real force, Real prev_force) return force * force + (prev_force - force) * (prev_force - force); } +Line_details::Line_details (Prob *pb, Output_def *paper) +{ + SCM spec = paper->c_variable ("markup-system-spacing"); + SCM title_spec = paper->c_variable ("markup-markup-spacing"); + padding_ = 0; + title_padding_ = 0; + min_distance_ = 0; + title_min_distance_ = 0; + space_ = 0; + title_space_ = 0; + Page_layout_problem::read_spacing_spec (spec, &space_, ly_symbol2scm ("basic-distance")); + Page_layout_problem::read_spacing_spec (title_spec, &title_space_, ly_symbol2scm ("basic-distance")); + Page_layout_problem::read_spacing_spec (spec, &padding_, ly_symbol2scm ("padding")); + Page_layout_problem::read_spacing_spec (title_spec, &title_padding_, ly_symbol2scm ("padding")); + Page_layout_problem::read_spacing_spec (spec, &min_distance_, ly_symbol2scm ("minimum-distance")); + 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))); + + last_column_ = 0; + force_ = 0; + Interval stencil_extent = unsmob_stencil (pb->get_property ("stencil"))->extent (Y_AXIS); + shape_ = Line_shape (stencil_extent, stencil_extent); // pretend it goes all the way across + tallness_ = 0; + bottom_padding_ = 0; + inverse_hooke_ = 1.0; + break_permission_ = ly_symbol2scm ("allow"); + page_permission_ = pb->get_property ("page-break-permission"); + turn_permission_ = pb->get_property ("page-turn-permission"); + break_penalty_ = 0; + page_penalty_ = robust_scm2double (pb->get_property ("page-break-penalty"), 0); + turn_penalty_ = robust_scm2double (pb->get_property ("page-turn-penalty"), 0); + title_ = to_boolean (pb->get_property ("is-title")); + compressed_lines_count_ = 1; + compressed_nontitle_lines_count_ = title_ ? 0 : 1; + SCM last_scm = pb->get_property ("last-markup-line"); + last_markup_line_ = to_boolean (last_scm); + SCM first_scm = pb->get_property ("first-markup-line"); + first_markup_line_ = to_boolean (first_scm); + tight_spacing_ = to_boolean (pb->get_property ("tight-spacing")); + refpoint_extent_ = Interval (0, 0); +} + +Real +Line_details::full_height () const +{ + Interval ret; + ret.unite(shape_.begin_); + ret.unite(shape_.rest_); + return ret.length(); +} + +Real +Line_details::tallness () const +{ + return tallness_; +} + +Real +Line_details::spring_length (Line_details const &next_line) const +{ + // space_ measures the spring which goes from the bottom refpoint + // of this to the top refpoint of next_line. We want to return + // the stretchable space between the bottom of this's extent to + // the top of next_line's extent. + Real refpoint_dist = tallness_ + refpoint_extent_[DOWN] - next_line.refpoint_extent_[UP]; + Real space = next_line.title_ ? title_space_ : space_; + return max (0.0, space - refpoint_dist); +} + +Line_shape::Line_shape (Interval begin, Interval rest) +{ + begin_ = begin; + rest_ = rest; +} + +Line_shape +Line_shape::piggyback (Line_shape mount, Real padding) const +{ + Real elevation = max (begin_[UP]-mount.begin_[DOWN], rest_[UP]-mount.rest_[DOWN]); + Interval begin = Interval (begin_[DOWN], elevation + mount.begin_[UP] + padding); + Interval rest = Interval (rest_[DOWN], elevation + mount.rest_[UP] + padding); + return Line_shape (begin, rest); +} diff --git a/lily/context-def.cc b/lily/context-def.cc index 31b821655c..26e79f56ab 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -1,9 +1,20 @@ /* - context-def.cc -- implement Context_def + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ /* TODO: should junk this class an replace by @@ -55,7 +66,7 @@ Context_def::Context_def (Context_def const &s) smobify_self (); description_ = s.description_; - input_location_ = make_input (*s.origin ()); + input_location_ = make_input (*s.origin ()); default_child_ = s.default_child_; accept_mods_ = s.accept_mods_; property_ops_ = s.property_ops_; @@ -88,7 +99,7 @@ SCM Context_def::mark_smob (SCM smob) { ASSERT_LIVE_IS_ALLOWED (); - + Context_def *me = (Context_def *) SCM_CELL_WORD_1 (smob); scm_gc_mark (me->description_); @@ -125,11 +136,7 @@ Context_def::add_context_mod (SCM mod) else if (ly_symbol2scm ("consists") == tag || ly_symbol2scm ("remove") == tag) { - if (!get_translator (sym)) - warning (_f ("program has no such type: `%s'", - ly_symbol2string (sym).c_str ())); - else - translator_mods_ = scm_cons (scm_list_2 (tag, sym), translator_mods_); + translator_mods_ = scm_cons (scm_list_2 (tag, sym), translator_mods_); } else if (ly_symbol2scm ("accepts") == tag || ly_symbol2scm ("denies") == tag) @@ -198,7 +205,7 @@ Context_def::get_default_child (SCM user_mod) const - the first element in the list defines a context that is a valid child of the context defined by this Context_def - each subsequent element in the list defines a context that is a valid child - of the the context defined by the preceding element in the list + of the context defined by the preceding element in the list - the last element in the list defines a context with the given name The ADDITIONAL_ACCEPTS parameter is a list of additional contexts that this diff --git a/lily/context-handle.cc b/lily/context-handle.cc index 42760fa59d..0ee1778661 100644 --- a/lily/context-handle.cc +++ b/lily/context-handle.cc @@ -1,9 +1,20 @@ /* - context-handle.cc -- implement Context_handle + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "context-handle.hh" diff --git a/lily/context-mod-scheme.cc b/lily/context-mod-scheme.cc new file mode 100644 index 0000000000..bf1432be6d --- /dev/null +++ b/lily/context-mod-scheme.cc @@ -0,0 +1,46 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Jan Nieuwenhuizen + Han-Wen Nienhuys + + 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 . +*/ + +#include "context.hh" +#include "context-mod.hh" + +LY_DEFINE (ly_get_context_mods, + "ly:get-context-mods", + 1, 0, 0, (SCM contextmod), + "Returns the list of context modifications stored in" + " @var{contextmod}.") +{ + Context_mod *tr = unsmob_context_mod (contextmod); + LY_ASSERT_SMOB (Context_mod, contextmod, 1); + return tr->get_mods (); +} + +LY_DEFINE (ly_add_context_mod, + "ly:add-context-mod", + 2, 0, 0, (SCM contextmods, SCM modification), + "Adds the given context @var{modification} to the list" + " @var{contextmods} of context modifications.") +{ + Context_mod *ctxmod = unsmob_context_mod (contextmods); + LY_ASSERT_SMOB (Context_mod, contextmods, 1); + ctxmod->add_context_mod (modification); + return SCM_UNSPECIFIED; +} + diff --git a/lily/context-mod.cc b/lily/context-mod.cc new file mode 100644 index 0000000000..a028930c2b --- /dev/null +++ b/lily/context-mod.cc @@ -0,0 +1,76 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Reinhold Kainhofer + + 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 . +*/ + +#include "context-mod.hh" + +Context_mod::Context_mod () +{ + mods_ = SCM_EOL; +} + +Context_mod::Context_mod (Context_mod const &s) +{ + mods_ = s.mods_; +} + +#include "ly-smobs.icc" +IMPLEMENT_SIMPLE_SMOBS (Context_mod); +IMPLEMENT_DEFAULT_EQUAL_P (Context_mod); + +int +Context_mod::print_smob (SCM smob, SCM port, scm_print_state*) +{ + Context_mod *me = (Context_mod *) SCM_CELL_WORD_1 (smob); + + scm_puts ("#mods_, port); + scm_puts (">", port); + return 1; +} + +SCM +Context_mod::mark_smob (SCM smob) +{ + ASSERT_LIVE_IS_ALLOWED (); + + Context_mod *me = (Context_mod *) SCM_CELL_WORD_1 (smob); + + scm_gc_mark (me->mods_); + return me->mods_; +} + +void +Context_mod::add_context_mod (SCM mod) +{ + mods_ = scm_cons (mod, mods_); +} + +void +Context_mod::add_context_mods (SCM mods) +{ + for (SCM m = mods; scm_is_pair (m); m = scm_cdr (m)) + add_context_mod (scm_car (m)); +} + +SCM +Context_mod::get_mods () const +{ + return scm_reverse (mods_); +} + diff --git a/lily/context-property.cc b/lily/context-property.cc index 4645901b37..4d1de24034 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -1,10 +1,20 @@ /* - context-property.cc -- implement manipulation of immutable Grob - property lists. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" @@ -35,7 +45,7 @@ general_pushpop_property (Context *context, } sloppy_general_pushpop_property (context, context_property, - grob_property_path, new_value); + grob_property_path, new_value); } @@ -45,10 +55,10 @@ general_pushpop_property (Context *context, alist defined in a parent context. BASED-ON should always be a tail of ALIST. - Push or pop (depending on value of VAL) a single entry entry from a + Push or pop (depending on value of VAL) a single entry from a translator property list by name of PROP. GROB_PROPERTY_PATH indicates nested alists, eg. '(beamed-stem-lengths details) - + */ void execute_override_property (Context *context, @@ -57,7 +67,7 @@ execute_override_property (Context *context, SCM new_value) { SCM current_context_val = SCM_EOL; - + Context *where = context->where_defined (context_property, ¤t_context_val); @@ -82,10 +92,17 @@ execute_override_property (Context *context, SCM target_alist = scm_car (current_context_val); + /* + If the car is a list, the property path comes from a nested override + using list syntax inside a \context block + */ + if (scm_is_pair (scm_car (grob_property_path))) + grob_property_path = scm_car (grob_property_path); + SCM symbol = scm_car (grob_property_path); if (scm_is_pair (scm_cdr (grob_property_path))) { - new_value = nested_property_alist (ly_assoc_get (symbol, target_alist, + new_value = nested_property_alist (ly_assoc_get (symbol, target_alist, SCM_EOL), scm_cdr (grob_property_path), new_value); @@ -153,7 +170,7 @@ execute_revert_property (Context *context, programming_error ("Grob property path should be list of symbols."); return; } - + SCM symbol = scm_car (grob_property_path); if (scm_is_pair (scm_cdr (grob_property_path))) { @@ -161,7 +178,7 @@ execute_revert_property (Context *context, SCM new_val = nested_property_revert_alist (current_sub_alist, scm_cdr (grob_property_path)); - + if (scm_is_pair (current_alist) && scm_caar (current_alist) == symbol && current_alist != daddy) @@ -173,7 +190,7 @@ execute_revert_property (Context *context, else { SCM new_alist = evict_from_alist (symbol, current_alist, daddy); - + if (new_alist == daddy) context->unset_property (context_property); else @@ -196,7 +213,7 @@ execute_pushpop_property (Context *context, scm_list_1 (grob_property), new_value); } - + /* PRE_INIT_OPS is in the order specified, and hence must be reversed. */ diff --git a/lily/context-scheme.cc b/lily/context-scheme.cc index 9ce9a9baa0..043bfaa924 100644 --- a/lily/context-scheme.cc +++ b/lily/context-scheme.cc @@ -1,20 +1,43 @@ /* - context-scheme.cc -- Context bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "context.hh" #include "context-def.hh" #include "dispatcher.hh" +LY_DEFINE (ly_context_current_moment, + "ly:context-current-moment", + 1, 0, 0, (SCM context), + "Return the current moment of @var{context}.") +{ + Context *tr = unsmob_context (context); + + LY_ASSERT_SMOB (Context, context, 1); + + return tr->now_mom ().smobbed_copy (); +} + LY_DEFINE (ly_context_id, "ly:context-id", 1, 0, 0, (SCM context), "Return the ID string of @var{context}," - " i.e., for @code{\\context Voice = one @dots{}}" + " i.e., for @code{\\context Voice = \"one\" @dots{}}" " return the string @code{one}.") { Context *tr = unsmob_context (context); @@ -27,7 +50,7 @@ LY_DEFINE (ly_context_id, "ly:context-id", LY_DEFINE (ly_context_name, "ly:context-name", 1, 0, 0, (SCM context), "Return the name of @var{context}," - " i.e., for @code{\\context Voice = one @dots{}}" + " i.e., for @code{\\context Voice = \"one\" @dots{}}" " return the symbol @code{Voice}.") { LY_ASSERT_SMOB (Context, context, 1); @@ -43,7 +66,7 @@ LY_DEFINE (ly_context_grob_definition, "ly:context-grob-definition", " @var{context} as an alist.") { Context *tr = unsmob_context (context); - + LY_ASSERT_SMOB (Context, context, 1); LY_ASSERT_TYPE (ly_is_symbol, name, 2); @@ -69,14 +92,17 @@ LY_DEFINE (ly_context_pushpop_property, "ly:context-pushpop-property", } LY_DEFINE (ly_context_property, "ly:context-property", - 2, 0, 0, (SCM c, SCM name), - "Return the value of @var{name} from context @var{c}.") + 2, 1, 0, (SCM context, SCM sym, SCM def), + "Return the value for property @var{sym} in @var{context}." + " If @var{def} is given, and property value is @code{'()}," + " return @var{def}.") { - LY_ASSERT_SMOB (Context, c, 1); - LY_ASSERT_TYPE (ly_is_symbol, name, 2); + LY_ASSERT_SMOB (Context, context, 1); + LY_ASSERT_TYPE (ly_is_symbol, sym, 2); - Context *t = unsmob_context (c); - return t->internal_get_property (name); + Context *t = unsmob_context (context); + SCM result = t->internal_get_property (sym); + return def != SCM_UNDEFINED && scm_is_null (result) ? def : result; } LY_DEFINE (ly_context_set_property_x, "ly:context-set-property!", @@ -101,7 +127,7 @@ LY_DEFINE (ly_context_property_where_defined, "ly:context-property-where-defined { LY_ASSERT_SMOB (Context, context, 1); LY_ASSERT_TYPE (ly_is_symbol, name, 2); - + Context *tr = unsmob_context (context); SCM val; @@ -119,7 +145,7 @@ LY_DEFINE (ly_context_unset_property, "ly:context-unset-property", 2, 0, 0, LY_ASSERT_SMOB (Context, context, 1); LY_ASSERT_TYPE (ly_is_symbol, name, 2); Context *tr = unsmob_context (context); - + tr->unset_property (name); return SCM_UNSPECIFIED; } diff --git a/lily/context-specced-music-iterator.cc b/lily/context-specced-music-iterator.cc index bb8851f5b2..b02d023545 100644 --- a/lily/context-specced-music-iterator.cc +++ b/lily/context-specced-music-iterator.cc @@ -1,10 +1,20 @@ /* - context-specced-music-iterator.cc -- implement - Context_specced_music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "music-wrapper-iterator.hh" diff --git a/lily/context.cc b/lily/context.cc index b2ada8fe7f..0d7fbe35f6 100644 --- a/lily/context.cc +++ b/lily/context.cc @@ -1,9 +1,20 @@ /* - context.cc -- implement Context + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" @@ -103,7 +114,7 @@ Context::create_unique_context (SCM name, string id, SCM operations) if (gthis && gthis->get_score_context ()) return gthis->get_score_context ()->create_unique_context (name, id, operations); - vector path = path_to_acceptable_context (name); + vector path = path_to_acceptable_context (name); if (path.size ()) { Context *current = this; @@ -157,7 +168,7 @@ Context::find_create_context (SCM n, string id, SCM operations) if (n == ly_symbol2scm ("Bottom")) { - Context *tg = get_default_interpreter (); + Context *tg = get_default_interpreter (id); return tg; } @@ -375,7 +386,7 @@ Context::is_bottom_context () const } Context * -Context::get_default_interpreter () +Context::get_default_interpreter (string context_id) { if (!is_bottom_context ()) { @@ -390,8 +401,8 @@ Context::get_default_interpreter () t = unsmob_context_def (this->definition_); } - Context *tg = create_context (t, "", SCM_EOL); - return tg->get_default_interpreter (); + Context *tg = create_context (t, context_id, SCM_EOL); + return tg->get_default_interpreter (context_id); } return this; } @@ -479,10 +490,13 @@ Context::instrumented_set_property (SCM sym, SCM val, const char*, int, const ch void Context::internal_set_property (SCM sym, SCM val) { + bool type_check_ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?")); + if (do_internal_type_checking_global) - assert (type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"))); + assert (type_check_ok); - properties_dict ()->set (sym, val); + if (type_check_ok) + properties_dict ()->set (sym, val); } /* @@ -761,3 +775,13 @@ melisma_busy (Context *tr) return busy; } + +bool +check_repeat_count_visibility (Context const *context, SCM count) +{ + SCM proc = context->get_property ("repeatCountVisibility"); + return (ly_is_procedure (proc) + && to_boolean (scm_call_2 (proc, + count, + context->self_scm ()))); +} diff --git a/lily/control-track-performer.cc b/lily/control-track-performer.cc index d1e677db63..611bd6b48b 100644 --- a/lily/control-track-performer.cc +++ b/lily/control-track-performer.cc @@ -12,7 +12,6 @@ class Control_track_performer : public Performer { Audio_staff *control_track_; - vector texts_; void add_text (Audio_text::Type, string); TRANSLATOR_DECLARATIONS (Control_track_performer); @@ -46,7 +45,6 @@ Control_track_performer::add_text (Audio_text::Type text_type, string str) { Audio_item *text = new Audio_text (text_type, str); control_track_->add_audio_item (text); - texts_.push_back (text); announce_element (Audio_element_info (text, 0)); diff --git a/lily/cue-clef-engraver.cc b/lily/cue-clef-engraver.cc new file mode 100644 index 0000000000..c597b368e1 --- /dev/null +++ b/lily/cue-clef-engraver.cc @@ -0,0 +1,230 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1997--2011 Han-Wen Nienhuys + Mats Bengtsson + Copyright (C) 2010--2011 Reinhold Kainhofer + + 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 . +*/ + +#include +using namespace std; + +#include "item.hh" +#include "context.hh" +#include "bar-line.hh" +#include "staff-symbol-referencer.hh" +#include "engraver.hh" +#include "direction.hh" +#include "side-position-interface.hh" +#include "warn.hh" +#include "international.hh" + +#include "translator.icc" + +class Cue_clef_engraver : public Engraver +{ +public: + TRANSLATOR_DECLARATIONS (Cue_clef_engraver); + +protected: + void stop_translation_timestep (); + void process_music (); + DECLARE_ACKNOWLEDGER (bar_line); + + virtual void derived_mark () const; +private: + Item *clef_; + Item *octavate_; + + SCM prev_glyph_; + SCM prev_cpos_; + SCM prev_octavation_; + void create_clef (); + void create_end_clef (); + void set_glyph (); + void inspect_clef_properties (); + void create_octavate_eight (SCM oct); +}; + +void +Cue_clef_engraver::derived_mark () const +{ + scm_gc_mark (prev_octavation_); + scm_gc_mark (prev_cpos_); + scm_gc_mark (prev_glyph_); +} + +Cue_clef_engraver::Cue_clef_engraver () +{ + clef_ = 0; + octavate_ = 0; + + prev_octavation_ = prev_cpos_ = prev_glyph_ = SCM_EOL; +} + +void +Cue_clef_engraver::set_glyph () +{ + SCM glyph_sym = ly_symbol2scm ("glyph"); + SCM basic = ly_symbol2scm ("CueClef"); + execute_pushpop_property (context (), basic, glyph_sym, SCM_UNDEFINED); + execute_pushpop_property (context (), basic, glyph_sym, get_property ("cueClefGlyph")); + + basic = ly_symbol2scm ("CueEndClef"); + execute_pushpop_property (context (), basic, glyph_sym, SCM_UNDEFINED); + execute_pushpop_property (context (), basic, glyph_sym, get_property ("clefGlyph")); +} + +/** + Generate a clef at the start of a measure. (when you see a Bar, + ie. a breakpoint) +*/ +void +Cue_clef_engraver::acknowledge_bar_line (Grob_info info) +{ + Item *item = info.item (); + if (item && scm_is_string (get_property ("cueClefGlyph"))) + create_clef (); +} + +void +Cue_clef_engraver::create_octavate_eight (SCM oct) +{ + if (scm_is_number (oct) && scm_to_int (oct)) + { + Item *g = make_item ("OctavateEight", SCM_EOL); + + int abs_oct = scm_to_int (oct); + int dir = sign (abs_oct); + abs_oct = abs (abs_oct) + 1; + + SCM txt = scm_number_to_string (scm_from_int (abs_oct), + scm_from_int (10)); + + g->set_property ("text", + scm_list_n (ly_lily_module_constant ("vcenter-markup"), + txt, SCM_UNDEFINED)); + Side_position_interface::add_support (g, clef_); + + g->set_parent (clef_, Y_AXIS); + g->set_parent (clef_, X_AXIS); + g->set_property ("direction", scm_from_int (dir)); + octavate_ = g; + } +} + +void +Cue_clef_engraver::create_clef () +{ + if (!clef_) + { + Item *c = make_item ("CueClef", SCM_EOL); + + clef_ = c; + SCM cpos = get_property ("cueClefPosition"); + if (scm_is_number (cpos)) + clef_->set_property ("staff-position", cpos); + + create_octavate_eight (get_property ("cueClefOctavation")); + } +} + +void +Cue_clef_engraver::create_end_clef () +{ + if (!clef_) + { + clef_ = make_item ("CueEndClef", SCM_EOL); + SCM cpos = get_property ("clefPosition"); + if (scm_is_number (cpos)) + clef_->set_property ("staff-position", cpos); + + create_octavate_eight (get_property ("clefOctavation")); + } +} + +void +Cue_clef_engraver::process_music () +{ + inspect_clef_properties (); +} + +void +Cue_clef_engraver::inspect_clef_properties () +{ + SCM glyph = get_property ("cueClefGlyph"); + SCM clefpos = get_property ("cueClefPosition"); + SCM octavation = get_property ("cueClefOctavation"); + + if (scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F + || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F + || scm_equal_p (octavation, prev_octavation_) == SCM_BOOL_F) + { + set_glyph (); + if (scm_is_string (glyph)) + { + create_clef (); + if (clef_) + clef_->set_property ("non-default", SCM_BOOL_T); + } + else + create_end_clef (); + + prev_cpos_ = clefpos; + prev_glyph_ = glyph; + prev_octavation_ = octavation; + } + +} + +void +Cue_clef_engraver::stop_translation_timestep () +{ + if (clef_) + { + SCM vis = 0; + if (to_boolean (clef_->get_property ("non-default"))) + vis = get_property ("explicitCueClefVisibility"); + + if (vis) + clef_->set_property ("break-visibility", vis); + + clef_ = 0; + octavate_ = 0; + } +} + +ADD_ACKNOWLEDGER (Cue_clef_engraver, bar_line); +ADD_TRANSLATOR (Cue_clef_engraver, + /* doc */ + "Determine and set reference point for pitches in cued voices.", + + /* create */ + "CueClef " + "CueEndClef " + "OctavateEight ", + + /* read */ + "cueClefGlyph " + "cueClefOctavation " + "cueClefPosition " + "explicitCueClefVisibility " + "middleCCuePosition " + "clefOctavation ", + + /* write */ + "" + ); diff --git a/lily/custos-engraver.cc b/lily/custos-engraver.cc index 8709c87f0a..f1111e829e 100644 --- a/lily/custos-engraver.cc +++ b/lily/custos-engraver.cc @@ -1,10 +1,21 @@ /* - custos-engraver.cc -- implement Custos_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Juergen Reuter , + Copyright (C) 2000--2011 Juergen Reuter , Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" diff --git a/lily/custos.cc b/lily/custos.cc index 56259d56a5..f312e4a8ab 100644 --- a/lily/custos.cc +++ b/lily/custos.cc @@ -1,9 +1,20 @@ /* - custos.cc -- implement Custos + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Juergen Reuter - (c) 2000--2009 Juergen Reuter + 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 . */ /* TODO: diff --git a/lily/default-bar-line-engraver.cc b/lily/default-bar-line-engraver.cc index f36c18f687..5bd1232e30 100644 --- a/lily/default-bar-line-engraver.cc +++ b/lily/default-bar-line-engraver.cc @@ -1,14 +1,24 @@ /* - timing-engraver.cc -- implement Default_bar_line_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" #include "context.hh" -#include "multi-measure-rest.hh" #include "grob.hh" #include "warn.hh" diff --git a/lily/dimension-cache.cc b/lily/dimension-cache.cc index 3eb0a89cb3..8f0022957a 100644 --- a/lily/dimension-cache.cc +++ b/lily/dimension-cache.cc @@ -1,9 +1,20 @@ /* - dimension-cache.cc -- implement Dimension_cache + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ diff --git a/lily/dimensions-scheme.cc b/lily/dimensions-scheme.cc index af20945c73..3524faf49b 100644 --- a/lily/dimensions-scheme.cc +++ b/lily/dimensions-scheme.cc @@ -1,9 +1,20 @@ /* - dimensions-scheme.cc -- implement Dimension handling + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "lily-guile.hh" diff --git a/lily/directional-element-interface.cc b/lily/directional-element-interface.cc index 98ea9b53f4..1f7a620129 100644 --- a/lily/directional-element-interface.cc +++ b/lily/directional-element-interface.cc @@ -1,9 +1,20 @@ /* - directional-element-interface.cc -- implement Directional_element + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "directional-element-interface.hh" @@ -16,7 +27,8 @@ get_grob_direction (Grob *me) SCM d = me->get_property ("direction"); if (d == ly_symbol2scm ("calculation-in-progress")) { - programming_error ("Grob direction requested while calculation in progress. "); + programming_error ("Grob direction requested while calculation in" + " progress. "); return UP; } if (!is_direction (d)) diff --git a/lily/dispatcher-scheme.cc b/lily/dispatcher-scheme.cc index b86232c480..bd928173d4 100644 --- a/lily/dispatcher-scheme.cc +++ b/lily/dispatcher-scheme.cc @@ -1,9 +1,20 @@ /* - dispatcher.cc -- implement Scheme bindings for Dispatcher + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Erik Sandberg - (c) 2006--2009 Erik Sandberg + 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 . */ #include "dispatcher.hh" diff --git a/lily/dispatcher.cc b/lily/dispatcher.cc index 29ad2ba376..856090fdb1 100644 --- a/lily/dispatcher.cc +++ b/lily/dispatcher.cc @@ -1,9 +1,20 @@ /* - dispatcher.cc -- implement Dispatcher + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Erik Sandberg - (c) 2005-2006 Erik Sandberg + 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 . */ #include "dispatcher.hh" @@ -13,7 +24,7 @@ #include "warn.hh" IMPLEMENT_SMOBS (Dispatcher); -IMPLEMENT_TYPE_P (Dispatcher, "dispatcher"); +IMPLEMENT_TYPE_P (Dispatcher, "ly:dispatcher?"); IMPLEMENT_DEFAULT_EQUAL_P (Dispatcher); Dispatcher::~Dispatcher () @@ -174,7 +185,7 @@ Dispatcher::internal_add_listener (Listener l, SCM ev_class, int priority) SCM list = scm_hashq_ref (listeners_, ev_class, SCM_EOL); if (!scm_is_pair (list)) { - /* Tell all dispatchers that we listen to, that we want to hear ev_class + /* Tell all dispatchers that we listen to, that we want to hear ev_class events */ for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp)) { @@ -184,7 +195,7 @@ Dispatcher::internal_add_listener (Listener l, SCM ev_class, int priority) } listen_classes_ = scm_cons (ev_class, listen_classes_); } - SCM entry = scm_cons (scm_int2num (priority), l.smobbed_copy ()); + SCM entry = scm_cons (scm_from_int (priority), l.smobbed_copy ()); list = scm_merge (list, scm_list_1 (entry), ly_lily_module_constant ("car<")); scm_hashq_set_x (listeners_, ev_class, list); } @@ -244,7 +255,7 @@ Dispatcher::register_as_listener (Dispatcher *disp) return; } - dispatchers_ = scm_acons (disp->self_scm (), scm_int2num (priority), dispatchers_); + dispatchers_ = scm_acons (disp->self_scm (), scm_from_int (priority), dispatchers_); Listener list = GET_LISTENER (dispatch); for (SCM cl = listen_classes_; scm_is_pair (cl); cl = scm_cdr (cl)) diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 7be2bbdc90..e83011281b 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -1,9 +1,20 @@ /* - dot-column-engraver.cc -- implement Dot_column_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "rhythmic-head.hh" diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 9536e97f30..17d7effd7c 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -1,9 +1,20 @@ /* - dot-column.cc -- implement Dot_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "dot-column.hh" @@ -99,12 +110,17 @@ Dot_column::calc_positioning_done (SCM smob) y.add_point (y1); y.add_point (y2); } + else if (Note_head::has_interface (s)) + y = Interval (-1, 1); else - y = s->extent (s, Y_AXIS); + { + programming_error ("unknown grob in dot col support"); + continue; + } y *= 2 / ss; y += Staff_symbol_referencer::get_position (s); - + Box b (s->extent (commonx, X_AXIS), y); boxes.push_back (b); @@ -112,7 +128,7 @@ Dot_column::calc_positioning_done (SCM smob) stems.insert (stem); } - for (set::const_iterator i(stems.begin()); + for (set::const_iterator i (stems.begin()); i != stems.end (); i++) { Grob *stem = (*i); @@ -122,7 +138,7 @@ Dot_column::calc_positioning_done (SCM smob) Interval y = flag.extent (Y_AXIS) * (2 / ss) + Stem::stem_end_position (stem); - + Interval x = stem->relative_coordinate (commonx, X_AXIS) + flag.extent (X_AXIS); @@ -132,8 +148,13 @@ Dot_column::calc_positioning_done (SCM smob) vector_sort (dots, position_less); for (vsize i = dots.size (); i--;) - if (!dots[i]->is_live ()) - dots.erase (dots.begin () + i); + { + if (!dots[i]->is_live ()) + dots.erase (dots.begin () + i); + else + // Undo any fake translations that were done in add_head. + dots[i]->translate_axis (-dots[i]->relative_coordinate (me, X_AXIS), X_AXIS); + } Dot_formatting_problem problem (boxes, base_x); @@ -194,9 +215,14 @@ Dot_column::add_head (Grob *me, Grob *head) Pointer_group_interface::add_grob (me, ly_symbol2scm ("dots"), d); d->set_property ("Y-offset", Grob::x_parent_positioning_proc); - // Dot formatting requests the Y-offset, -which- for rests may - // trigger post-linebreak callbacks. - if (!Rest::has_interface (head)) + // Dot formatting requests the Y-offset, which for rests may + // trigger post-linebreak callbacks. On the other hand, we need the + // correct X-offset of the dots for horizontal collision avoidance. + // The translation here is undone in calc_positioning_done, where we + // do the X-offset properly. + if (Rest::has_interface (head)) + d->translate_axis (head->extent (head, X_AXIS).length (), X_AXIS); + else d->set_property ("X-offset", Grob::x_parent_positioning_proc); Axis_group_interface::add_element (me, d); } diff --git a/lily/dot-configuration.cc b/lily/dot-configuration.cc index 559f83be2e..b72bd54ef7 100644 --- a/lily/dot-configuration.cc +++ b/lily/dot-configuration.cc @@ -1,11 +1,20 @@ /* - dot-implement.cc -- declare Dot_configuration + This file is part of LilyPond, the GNU music typesetter. - Source file of the GNU LilyPond music typesetter. Distributed under - terms of the GNU General Public License. LilyPond comes with NO - WARRANTY. + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include diff --git a/lily/dot-formatting-problem.cc b/lily/dot-formatting-problem.cc index cd443a2e6c..1d83f64b31 100644 --- a/lily/dot-formatting-problem.cc +++ b/lily/dot-formatting-problem.cc @@ -1,11 +1,20 @@ -/* - dot-formatting-problem.cc -- implement Dot_formatting_problem +/* + This file is part of LilyPond, the GNU music typesetter. + Copyright (C) 2007--2011 Han-Wen Nienhuys - file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys - + 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 . */ #include "dot-formatting-problem.hh" diff --git a/lily/dots-engraver.cc b/lily/dots-engraver.cc index 11b384749a..efe927e0ec 100644 --- a/lily/dots-engraver.cc +++ b/lily/dots-engraver.cc @@ -1,10 +1,20 @@ -/* - dots-engraver.cc -- implement Dots_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" diff --git a/lily/dots.cc b/lily/dots.cc index f2a88b95e9..8319118752 100644 --- a/lily/dots.cc +++ b/lily/dots.cc @@ -1,9 +1,20 @@ /* - dots.cc -- implement Dots + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "dots.hh" diff --git a/lily/double-percent-repeat-engraver.cc b/lily/double-percent-repeat-engraver.cc new file mode 100644 index 0000000000..ad64657e97 --- /dev/null +++ b/lily/double-percent-repeat-engraver.cc @@ -0,0 +1,113 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2011 Neil Puttock + + 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 . +*/ + +#include "engraver.hh" +#include "global-context.hh" +#include "international.hh" +#include "item.hh" +#include "side-position-interface.hh" +#include "stream-event.hh" +#include "warn.hh" + +#include "translator.icc" + +class Double_percent_repeat_engraver : public Engraver +{ +public: + TRANSLATOR_DECLARATIONS (Double_percent_repeat_engraver); + +protected: + Stream_event *percent_event_; + + // moment (global time) where percent started + Moment start_mom_; + + DECLARE_TRANSLATOR_LISTENER (double_percent); + + void process_music (); +}; + +Double_percent_repeat_engraver::Double_percent_repeat_engraver () +{ + percent_event_ = 0; +} + +IMPLEMENT_TRANSLATOR_LISTENER (Double_percent_repeat_engraver, double_percent); +void +Double_percent_repeat_engraver::listen_double_percent (Stream_event *ev) +{ + if (!percent_event_) + { + Moment meas_len (robust_scm2moment (get_property ("measureLength"), + Moment (1))); + start_mom_ = now_mom () + meas_len; + get_global_context ()->add_moment_to_process (start_mom_); + percent_event_ = ev; + } + else + ASSIGN_EVENT_ONCE (percent_event_, ev); +} + +void +Double_percent_repeat_engraver::process_music () +{ + if (percent_event_ && now_mom ().main_part_ == start_mom_.main_part_) + { + Item *double_percent = make_item ("DoublePercentRepeat", + percent_event_->self_scm ()); + + SCM count = percent_event_->get_property ("repeat-count"); + if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats")) + && check_repeat_count_visibility (context (), count)) + { + Item *double_percent_counter + = make_item ("DoublePercentRepeatCounter", + percent_event_->self_scm ()); + + SCM text = scm_number_to_string (count, scm_from_int (10)); + double_percent_counter->set_property ("text", text); + + Side_position_interface::add_support (double_percent_counter, + double_percent); + double_percent_counter->set_parent (double_percent, Y_AXIS); + double_percent_counter->set_parent (double_percent, X_AXIS); + } + // forbid breaks on a % line + context ()->get_score_context ()->set_property ("forbidBreak", + SCM_BOOL_T); + percent_event_ = 0; + } +} + +ADD_TRANSLATOR (Double_percent_repeat_engraver, + /* doc */ + "Make double measure repeats.", + + /* create */ + "DoublePercentRepeat " + "DoublePercentRepeatCounter ", + + /* read */ + "countPercentRepeats " + "measureLength " + "repeatCountVisibility ", + + /* write */ + "forbidBreak " + ); diff --git a/lily/drum-note-engraver.cc b/lily/drum-note-engraver.cc index 1309f448d3..605876ef60 100644 --- a/lily/drum-note-engraver.cc +++ b/lily/drum-note-engraver.cc @@ -1,7 +1,20 @@ /* - drum-note-engraver.cc + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys + + 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 . */ #include @@ -22,9 +35,8 @@ using namespace std; class Drum_notes_engraver : public Engraver { - vector notes_; - vector scripts_; - vector events_; + vector scripts_; + vector events_; public: TRANSLATOR_DECLARATIONS (Drum_notes_engraver); @@ -89,8 +101,6 @@ Drum_notes_engraver::process_music () scripts_.push_back (p); } } - - notes_.push_back (note); } } @@ -124,16 +134,13 @@ Drum_notes_engraver::acknowledge_note_column (Grob_info inf) void Drum_notes_engraver::stop_translation_timestep () { - notes_.clear (); scripts_.clear (); - events_.clear (); } ADD_ACKNOWLEDGER (Drum_notes_engraver, stem); ADD_ACKNOWLEDGER (Drum_notes_engraver, note_column); - ADD_TRANSLATOR (Drum_notes_engraver, /* doc */ "Generate drum note heads.", @@ -148,4 +155,3 @@ ADD_TRANSLATOR (Drum_notes_engraver, /* write */ "" ); - diff --git a/lily/drum-note-performer.cc b/lily/drum-note-performer.cc index ee445f5ad8..b28a7cd9ec 100644 --- a/lily/drum-note-performer.cc +++ b/lily/drum-note-performer.cc @@ -1,9 +1,20 @@ /* - note-performer.cc -- implement Drum_note_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Jan Nieuwenhuizen - (c) 1996--2009 Jan Nieuwenhuizen + 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 . */ #include "performer.hh" @@ -24,8 +35,7 @@ protected: void process_music (); DECLARE_TRANSLATOR_LISTENER (note); private: - vector note_evs_; - vector notes_; + vector note_evs_; }; Drum_note_performer::Drum_note_performer () @@ -70,7 +80,6 @@ Drum_note_performer::process_music () tie_event, Pitch (0, 0, 0)); Audio_element_info info (p, n); announce_element (info); - notes_.push_back (p); } } @@ -80,7 +89,6 @@ Drum_note_performer::process_music () void Drum_note_performer::stop_translation_timestep () { - notes_.clear (); note_evs_.clear (); } diff --git a/lily/duration-scheme.cc b/lily/duration-scheme.cc index 8ac8b2d6e3..439362bf82 100644 --- a/lily/duration-scheme.cc +++ b/lily/duration-scheme.cc @@ -1,10 +1,21 @@ /* - duration.cc -- implement Duration + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter - - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "duration.hh" diff --git a/lily/duration.cc b/lily/duration.cc index 0b80b1ce1f..194ce3a89e 100644 --- a/lily/duration.cc +++ b/lily/duration.cc @@ -1,10 +1,21 @@ /* - duration.cc -- implement Duration + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter - - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "duration.hh" @@ -50,8 +61,8 @@ Duration::Duration (Rational r, bool scale) satisfies the left inequality and is within a factor of 2 of satistying the right one. Therefore either k = k' or k = k'+1 */ - int p = r.num (); - int q = r.den (); + int p = (int) r.num (); + int q = (int) r.den (); int k = intlog2 (q) - intlog2 (p); if (shift_left(p, k) < q) k++; diff --git a/lily/dynamic-align-engraver.cc b/lily/dynamic-align-engraver.cc index ac5e0e4c21..f62c45f0dc 100644 --- a/lily/dynamic-align-engraver.cc +++ b/lily/dynamic-align-engraver.cc @@ -1,10 +1,21 @@ -/* - dynamic-align-engraver.cc -- implement Dynamic_align_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2008--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2008--2011 Han-Wen Nienhuys + + + 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 . */ #include @@ -23,8 +34,10 @@ 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); DECLARE_END_ACKNOWLEDGER (dynamic); protected: @@ -32,57 +45,87 @@ protected: private: void create_line_spanner (Stream_event *cause); - Spanner* line_; - - vector ended_; - vector started_; - vector scripts_; - vector support_; - - set running_; + Spanner *line_; + vector ended_; + vector started_; + vector scripts_; + vector support_; + + set running_; + + bool early_end_; }; Dynamic_align_engraver::Dynamic_align_engraver () { line_ = 0; + early_end_ = false; } ADD_ACKNOWLEDGER (Dynamic_align_engraver, dynamic); ADD_ACKNOWLEDGER (Dynamic_align_engraver, note_column); +ADD_ACKNOWLEDGER (Dynamic_align_engraver, footnote_spanner); ADD_END_ACKNOWLEDGER (Dynamic_align_engraver, dynamic); void -Dynamic_align_engraver::create_line_spanner (Stream_event* event) +Dynamic_align_engraver::create_line_spanner (Stream_event *event) { if (!line_) line_ = make_spanner ("DynamicLineSpanner", - event ? event->self_scm() : SCM_EOL); + event ? event->self_scm () : SCM_EOL); } void Dynamic_align_engraver::acknowledge_end_dynamic (Grob_info info) { - if (Spanner::has_interface(info.grob())) + if (Spanner::has_interface (info.grob ())) ended_.push_back (info.spanner ()); } +void +Dynamic_align_engraver::acknowledge_footnote_spanner (Grob_info info) +{ + Grob *parent = info.grob ()->get_parent (Y_AXIS); + if (line_ && parent + && parent->internal_has_interface (ly_symbol2scm ("dynamic-interface"))) + Axis_group_interface::add_element (line_, info.grob ()); +} + void Dynamic_align_engraver::acknowledge_note_column (Grob_info info) { 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 (); create_line_spanner (cause); - if (Spanner::has_interface(info.grob())) - started_.push_back (info.spanner ()); - else if (info.item()) - scripts_.push_back (info.item()); + 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; + } + else if (info.item ()) + scripts_.push_back (info.item ()); else - info.grob ()->programming_error ("Unknown dynamic grob."); + info.grob ()->programming_error ("unknown dynamic grob"); Axis_group_interface::add_element (line_, info.grob ()); @@ -96,20 +139,21 @@ Dynamic_align_engraver::acknowledge_dynamic (Grob_info info) void Dynamic_align_engraver::stop_translation_timestep () { - for (vsize i = 0; i < started_.size(); i++) + for (vsize i = 0; i < started_.size (); i++) running_.insert (started_[i]); - for (vsize i = 0; i < ended_.size(); i++) + for (vsize i = 0; i < ended_.size (); i++) { Spanner *sp = ended_[i]; - set::iterator it = running_.find (sp); - if (it != running_.end()) + set::iterator it = running_.find (sp); + if (it != running_.end ()) running_.erase (it); else - started_[i]->programming_error ("Lost track of this dynamic spanner."); + started_[i]->programming_error ("lost track of this dynamic spanner"); } - bool end = line_ && running_.empty (); + bool end = line_ && (running_.empty () + || early_end_); Direction d = LEFT; do { @@ -117,18 +161,19 @@ Dynamic_align_engraver::stop_translation_timestep () && ((d == LEFT && !line_->get_bound (LEFT)) || (end && d == RIGHT && !line_->get_bound (RIGHT)))) { - vector const &spanners = - (d == LEFT) ? started_ : ended_; - + vector const &spanners + = (d == LEFT) ? started_ : ended_; + Grob *bound = 0; - if (scripts_.size()) + if (scripts_.size ()) bound = scripts_[0]; - else if (spanners.size()) + else if (spanners.size ()) bound = spanners[0]->get_bound (d); else { - programming_error ("Started DynamicLineSpanner but have no left bound."); bound = unsmob_grob (get_property ("currentMusicalColumn")); + if (!early_end_) + programming_error ("started DynamicLineSpanner but have no left bound"); } line_->set_bound (d, bound); @@ -139,8 +184,11 @@ Dynamic_align_engraver::stop_translation_timestep () for (vsize i = 0; line_ && i < support_.size (); i++) Side_position_interface::add_support (line_, support_[i]); - if (end) - line_ = 0; + if (end) + { + line_ = 0; + early_end_ = false; + } ended_.clear (); started_.clear (); @@ -148,10 +196,9 @@ Dynamic_align_engraver::stop_translation_timestep () support_.clear (); } - ADD_TRANSLATOR (Dynamic_align_engraver, /* doc */ - "Align hairpins and dynamic texts on a horizontal line", + "Align hairpins and dynamic texts on a horizontal line.", /* create */ "DynamicLineSpanner ", diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 5359ca3416..14522c6376 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -1,9 +1,20 @@ /* - dynamic-engraver.cc -- implement Dynamic_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "axis-group-interface.hh" diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index 2e0ccc0944..d96545af95 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -1,9 +1,20 @@ /* - dynamic-performer.cc -- implement Dynamic_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "performer.hh" @@ -133,7 +144,6 @@ Dynamic_performer::process_music () announce_element (info); } - if (span_dynamic_) span_dynamic_->add_absolute (absolute_); diff --git a/lily/easy-notation.cc b/lily/easy-notation.cc deleted file mode 100644 index 8838efee2d..0000000000 --- a/lily/easy-notation.cc +++ /dev/null @@ -1,104 +0,0 @@ -/* - easy-notation.cc -- implement easy notation heads - - source file of the GNU LilyPond music typesetter - - (c) 2005--2009 Han-Wen Nienhuys -*/ - -#include "note-head.hh" - -#include -using namespace std; - -#include "font-interface.hh" -#include "grob.hh" -#include "music.hh" -#include "output-def.hh" -#include "staff-symbol-referencer.hh" -#include "stem.hh" -#include "stream-event.hh" -#include "text-interface.hh" -#include "rhythmic-head.hh" - -/* - -TODO: move to scheme - -*/ -MAKE_SCHEME_CALLBACK (Note_head, brew_ez_stencil, 1); -SCM -Note_head::brew_ez_stencil (SCM smob) -{ - Grob *me = unsmob_grob (smob); - int log = Rhythmic_head::duration_log (me); - - SCM cause = me->get_property ("cause"); - SCM spitch = unsmob_stream_event (cause)->get_property ("pitch"); - Pitch *pit = unsmob_pitch (spitch); - - SCM idx = scm_from_int (pit->get_notename ()); - SCM names = me->get_property ("note-names"); - SCM charstr = SCM_EOL; - if (scm_is_vector (names)) - charstr = scm_vector_ref (names, idx); - else - { - char s[2] = "a"; - s[0] = char ((pit->get_notename () + 2) % 7 + 'a'); - s[0] = char (toupper (s[0])); - charstr = scm_from_locale_string (s); - } - - SCM letter - = Text_interface::interpret_string (me->layout ()->self_scm (), - Font_interface::text_font_alist_chain (me), - charstr); - - Stencil l (*unsmob_stencil (letter)); - l.align_to (X_AXIS, CENTER); - l.align_to (Y_AXIS, CENTER); - - l = Stencil (Box (), l.expr ()); - Real ss = Staff_symbol_referencer::staff_space (me); - Real lt = Staff_symbol_referencer::line_thickness (me); - - Real radius = (ss + lt) / 2.0; - Real stem_thick = 1.3 * lt; - if (Grob *stem = unsmob_grob (me->get_object ("stem"))) - stem_thick = Stem::thickness (stem); - - int black = (log >= 2); - - Stencil head; - Box extent (Interval (-radius, radius), - Interval (-radius, radius)); - - Stencil black_head (extent, - scm_list_4 (ly_symbol2scm ("circle"), - scm_from_double (radius), - scm_from_double (0.0), - SCM_BOOL_T)); - Stencil white_head; - if (black) - l = l.in_color (1, 1, 1); - else - { - white_head = Stencil (extent, - scm_list_4 (ly_symbol2scm ("circle"), - scm_from_double (radius - stem_thick), - scm_from_double (0.0), - SCM_BOOL_T)); - - white_head = white_head.in_color (1, 1, 1); - } - - Stencil total; - total.add_stencil (l); - total.add_stencil (white_head); - total.add_stencil (black_head); - total.translate_axis (radius, X_AXIS); - - return total.smobbed_copy (); -} - diff --git a/lily/enclosing-bracket.cc b/lily/enclosing-bracket.cc index 4bb732efdc..d7cd672843 100644 --- a/lily/enclosing-bracket.cc +++ b/lily/enclosing-bracket.cc @@ -1,10 +1,21 @@ /* - enclosing-bracket.cc -- implement Enclosing_bracket + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "stencil.hh" diff --git a/lily/engraver-group.cc b/lily/engraver-group.cc index 44f0f538e5..a5782d23b0 100644 --- a/lily/engraver-group.cc +++ b/lily/engraver-group.cc @@ -1,9 +1,20 @@ /* - engraver-group.cc -- implement Engraver_group + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" @@ -59,9 +70,16 @@ Engraver_group::announce_grob (Grob_info info) { announce_infos_.push_back (info); + Context *dad_con = context_->get_parent_context (); + if (info.rerouting_daddy_context_) + { + dad_con = info.rerouting_daddy_context_; + info.rerouting_daddy_context_ = 0; + } + Engraver_group *dad_eng - = context_->get_parent_context () - ? dynamic_cast (context_->get_parent_context ()->implementation ()) + = dad_con + ? dynamic_cast (dad_con->implementation ()) : 0; if (dad_eng) diff --git a/lily/engraver-scheme.cc b/lily/engraver-scheme.cc new file mode 100644 index 0000000000..fa71a1444b --- /dev/null +++ b/lily/engraver-scheme.cc @@ -0,0 +1,56 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1997--2011 Han-Wen Nienhuys + + 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 . +*/ + +#include "engraver.hh" +#include "grob.hh" + +LY_DEFINE (ly_engraver_make_grob, "ly:engraver-make-grob", + 3, 0, 0, (SCM engraver, SCM grob_name, SCM cause), + "Create a grob originating from given @var{engraver} instance," + " with given @var{grob-name}, a symbol." + " @var{cause} should either be another grob" + " or a music event.") +{ + LY_ASSERT_TYPE (unsmob_engraver, engraver, 1); + LY_ASSERT_TYPE (ly_is_symbol, grob_name, 2); + LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3); + + Grob *g = unsmob_engraver (engraver)-> + internal_make_grob(grob_name, cause, + ly_symbol2string (grob_name).c_str (), + "scheme", 0, "scheme"); + return g->self_scm (); +} + +LY_DEFINE (ly_engraver_announce_end_grob, "ly:engraver-announce-end-grob", + 3, 0, 0, (SCM engraver, SCM grob, SCM cause), + "Announce the end of a grob (i.e., the end of a spanner)" + " originating from given @var{engraver} instance, with" + " @var{grob} being a grob. @var{cause} should either" + " be another grob or a music event.") +{ + LY_ASSERT_TYPE (unsmob_engraver, engraver, 1); + LY_ASSERT_SMOB (Grob, grob, 2); + LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3); + + unsmob_engraver (engraver)-> + announce_end_grob (unsmob_grob (grob), cause); + + return SCM_UNSPECIFIED; +} diff --git a/lily/engraver.cc b/lily/engraver.cc index 7724b1c395..12615eb8d6 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -1,9 +1,20 @@ /* - engraver.cc -- implement Engraver + This file is part of LilyPond, the GNU music typesetter. - Sourcefile of GNU LilyPond music type setter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -32,54 +43,43 @@ Engraver::announce_grob (Grob_info inf) void Engraver::announce_end_grob (Grob_info inf) { + inf.start_end_ = STOP; get_daddy_engraver ()->announce_grob (inf); } -/* - CAUSE is the object (typically a Stream_event object) that - was the reason for making E. -*/ -void -Engraver::announce_grob (Grob *e, SCM cause) +Grob_info +Engraver::make_grob_info(Grob *e, SCM cause) { /* TODO: Remove Music code when it's no longer needed */ if (Music *m = unsmob_music (cause)) { cause = m->to_event ()->unprotect (); } - if (unsmob_stream_event (cause) || unsmob_grob (cause)) + if (e->get_property ("cause") == SCM_EOL + && (unsmob_stream_event (cause) || unsmob_grob (cause))) e->set_property ("cause", cause); - Grob_info i (this, e); - - Engraver_group *g = get_daddy_engraver (); - if (g) - g->announce_grob (i); + return Grob_info (this, e); } - /* - CAUSE is the object (typically a Music object) that + CAUSE is the object (typically a Stream_event object) that was the reason for making E. */ void -Engraver::announce_end_grob (Grob *e, SCM cause) +Engraver::announce_grob (Grob *e, SCM cause) { - /* TODO: Remove Music code when it's no longer needed */ - if (Music *m = unsmob_music (cause)) - { - cause = m->to_event ()->unprotect (); - } - if (e->get_property ("cause") == SCM_EOL - && (unsmob_stream_event (cause) || unsmob_grob (cause))) - e->set_property ("cause", cause); + announce_grob (make_grob_info (e, cause)); +} - Grob_info i (this, e); - i.start_end_ = STOP; - Engraver_group *g = get_daddy_engraver (); - if (g) - g->announce_grob (i); +/* + CAUSE is the object (typically a grob or stream-event object) that + was the reason for ending E. */ +void +Engraver::announce_end_grob (Grob *e, SCM cause) +{ + announce_end_grob (make_grob_info (e, cause)); } @@ -164,13 +164,26 @@ Engraver::internal_make_column (SCM x, char const *name, } Spanner * -Engraver::internal_make_spanner (SCM x, SCM cause, char const *name, char const *file, int line, char const *fun) +Engraver::internal_make_spanner (SCM x, SCM cause, char const *name, + char const *file, int line, char const *fun) { Spanner *sp = dynamic_cast (internal_make_grob (x, cause, name, file, line, fun)); assert (sp); return sp; } +Engraver* +unsmob_engraver (SCM eng) +{ + return dynamic_cast (unsmob_translator (eng)); +} + +bool +ly_is_grob_cause (SCM obj) +{ + return unsmob_grob (obj) || unsmob_stream_event (obj) || (obj == SCM_EOL); +} + #include "translator.icc" ADD_TRANSLATOR (Engraver, @@ -187,3 +200,4 @@ ADD_TRANSLATOR (Engraver, "" ); + diff --git a/lily/episema-engraver.cc b/lily/episema-engraver.cc new file mode 100644 index 0000000000..38d3950848 --- /dev/null +++ b/lily/episema-engraver.cc @@ -0,0 +1,179 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Neil Puttock + + 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 . +*/ + +#include "engraver.hh" +#include "international.hh" +#include "note-column.hh" +#include "pointer-group-interface.hh" +#include "side-position-interface.hh" +#include "spanner.hh" +#include "stream-event.hh" + +#include "translator.icc" + +class Episema_engraver : public Engraver +{ +public: + TRANSLATOR_DECLARATIONS (Episema_engraver); +protected: + virtual void finalize (); + DECLARE_TRANSLATOR_LISTENER (episema); + DECLARE_ACKNOWLEDGER (note_column); + DECLARE_ACKNOWLEDGER (note_head); + void stop_translation_timestep (); + void process_music (); + +private: + Spanner *span_; + Spanner *finished_; + Stream_event *current_event_; + Drul_array event_drul_; + vector note_columns_; + void typeset_all (); +}; + +Episema_engraver::Episema_engraver () +{ + finished_ = 0; + current_event_ = 0; + span_ = 0; + event_drul_.set (0, 0); +} + +IMPLEMENT_TRANSLATOR_LISTENER (Episema_engraver, episema); +void +Episema_engraver::listen_episema (Stream_event *ev) +{ + Direction d = to_dir (ev->get_property ("span-direction")); + // Must not ASSIGN_EVENT_ONCE here, since episema + // can be typeset over a single neume + event_drul_[d] = ev; +} + +void +Episema_engraver::process_music () +{ + if (event_drul_[START]) + { + if (current_event_) + event_drul_[START]->origin ()->warning (_ ("already have an episema")); + else + { + current_event_ = event_drul_[START]; + span_ = make_spanner ("Episema", event_drul_[START]->self_scm ()); + + event_drul_[START] = 0; + } + } + if (event_drul_[STOP]) + { + if (!span_) + event_drul_[STOP] + ->origin ()->warning (_ ("cannot find start of episema")); + else + { + finished_ = span_; + announce_end_grob (finished_, SCM_EOL); + span_ = 0; + current_event_ = 0; + note_columns_.clear (); + } + } +} + +void +Episema_engraver::typeset_all () +{ + if (finished_) + { + if (!finished_->get_bound (RIGHT)) + { + Grob *col = (note_columns_.size () + ? note_columns_.back () + : unsmob_grob (get_property ("currentMusicalColumn"))); + finished_->set_bound (RIGHT, col); + } + finished_ = 0; + } +} + +void +Episema_engraver::stop_translation_timestep () +{ + if (span_ && !span_->get_bound (LEFT)) + { + Grob *col = (note_columns_.size () + ? note_columns_.front () + : unsmob_grob (get_property ("currentMusicalColumn"))); + span_->set_bound (LEFT, col); + } + + typeset_all (); + event_drul_.set (0, 0); +} + +void +Episema_engraver::finalize () +{ + typeset_all (); + if (span_) + { + current_event_->origin ()->warning (_ ("unterminated episema")); + span_->suicide (); + span_ = 0; + } +} + +void +Episema_engraver::acknowledge_note_column (Grob_info info) +{ + note_columns_.push_back (info.grob ()); +} + +void +Episema_engraver::acknowledge_note_head (Grob_info info) +{ + if (span_) + { + Side_position_interface::add_support (span_, info.grob ()); + add_bound_item (span_, info.grob ()); + } + else if (finished_) + { + Side_position_interface::add_support (finished_, info.grob ()); + add_bound_item (finished_, info.grob ()); + } +} + +ADD_ACKNOWLEDGER (Episema_engraver, note_column); +ADD_ACKNOWLEDGER (Episema_engraver, note_head); + +ADD_TRANSLATOR (Episema_engraver, + /* doc */ + "Create an @emph{Editio Vaticana}-style episema line.", + + /* create */ + "Episema ", + + /* read */ + "", + + /* write */ + "" + ); diff --git a/lily/event-chord-iterator.cc b/lily/event-chord-iterator.cc index c678da031e..a22c9ace6b 100644 --- a/lily/event-chord-iterator.cc +++ b/lily/event-chord-iterator.cc @@ -1,9 +1,20 @@ /* - event-chord-iterator.cc -- implement Event_chord_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "event-chord-iterator.hh" diff --git a/lily/event-iterator.cc b/lily/event-iterator.cc index c29761a5d8..fd8e376641 100644 --- a/lily/event-iterator.cc +++ b/lily/event-iterator.cc @@ -1,9 +1,20 @@ /* - event-chord-iterator.cc -- implement Event_chord_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "event-iterator.hh" diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index f3f711de0f..49fcbcaf3f 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -1,11 +1,22 @@ /* - extender-engraver.cc -- implement Extender_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1999--2009 Glen Prideaux , + Copyright (C) 1999--2011 Glen Prideaux , Han-Wen Nienhuys , Jan Nieuwenhuizen + + 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 . */ #include "context.hh" @@ -18,7 +29,6 @@ #include "stream-event.hh" #include "warn.hh" #include "spanner.hh" - #include "translator.icc" void completize_extender (Spanner *sp); @@ -34,6 +44,7 @@ public: protected: DECLARE_TRANSLATOR_LISTENER (extender); + DECLARE_TRANSLATOR_LISTENER (completize_extender); DECLARE_ACKNOWLEDGER (lyric_syllable); virtual void finalize (); @@ -56,6 +67,24 @@ Extender_engraver::listen_extender (Stream_event *ev) ASSIGN_EVENT_ONCE (ev_, ev); } + +/* + A CompletizeExtenderEvent is sent at the end of each lyrics block + to ensure any pending extender can be correctly terminated if the lyrics + end before the associated voice (this prevents the right bound being extended + to the next note-column if no lyric follows the extender) +*/ +IMPLEMENT_TRANSLATOR_LISTENER (Extender_engraver, completize_extender); +void +Extender_engraver::listen_completize_extender (Stream_event * /* ev */) +{ + if (pending_extender_) + { + completize_extender (pending_extender_); + pending_extender_ = 0; + } +} + void Extender_engraver::process_music () { @@ -84,7 +113,7 @@ Extender_engraver::stop_translation_timestep () if (extender_ || pending_extender_) { Context *voice = get_voice_to_lyrics (context ()); - Grob *h = voice ? get_current_note_head (voice) : 0; + Grob *h = voice ? get_current_note_head (voice, to_boolean (get_property ("includeGraceNotes"))) : 0; if (h) { @@ -108,7 +137,6 @@ Extender_engraver::stop_translation_timestep () completize_extender (pending_extender_); pending_extender_ = 0; } - } if (extender_) { @@ -162,7 +190,8 @@ ADD_TRANSLATOR (Extender_engraver, "LyricExtender ", /* read */ - "extendersOverRests ", + "extendersOverRests " + "includeGraceNotes ", /* write */ "" diff --git a/lily/figured-bass-continuation.cc b/lily/figured-bass-continuation.cc index 141bc5cc5d..7fd868c559 100644 --- a/lily/figured-bass-continuation.cc +++ b/lily/figured-bass-continuation.cc @@ -1,10 +1,21 @@ /* - figured-bass-continuation.cc -- implement Figured_bass_continuation + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "line-interface.hh" diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index f9ed3329f1..c0b4c09b92 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -1,10 +1,21 @@ /* - figured-bass-engraver.cc -- implement Figured_bass_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -25,45 +36,70 @@ struct Figure_group { Spanner *group_; Spanner *continuation_line_; - + SCM number_; SCM alteration_; SCM augmented_; SCM diminished_; SCM augmented_slash_; - - Item *figure_item_; + SCM text_; + + Item *figure_item_; Stream_event *current_event_; - bool force_no_continuation_; - + Figure_group () { figure_item_ = 0; - force_no_continuation_ = false; continuation_line_ = 0; - number_ = SCM_EOL; - alteration_ = SCM_EOL; - augmented_ = SCM_EOL; - diminished_ = SCM_EOL; - augmented_slash_ = SCM_EOL; + reset_figure (); group_ = 0; current_event_ = 0; } + /* Reset (or init) all figure information to FALSE */ + void reset_figure () + { + number_ = SCM_BOOL_F; + alteration_ = SCM_BOOL_F; + augmented_ = SCM_BOOL_F; + diminished_ = SCM_BOOL_F; + augmented_slash_ = SCM_BOOL_F; + text_ = SCM_BOOL_F; + } + /* Mark the members of the struct as used for the GUILE Garbage Collection */ + void gc_mark () const + { + scm_gc_mark (number_); + scm_gc_mark (alteration_); + scm_gc_mark (augmented_); + scm_gc_mark (diminished_); + scm_gc_mark (augmented_slash_); + scm_gc_mark (text_); + } + bool group_is_equal_to (Stream_event *evt) const + { + return + ly_is_equal (number_, evt->get_property ("figure")) + && ly_is_equal (alteration_, evt->get_property ("alteration")) + && ly_is_equal (augmented_, evt->get_property ("augmented")) + && ly_is_equal (diminished_, evt->get_property ("diminished")) + && ly_is_equal (augmented_slash_, evt->get_property ("augmented-slash")) + && ly_is_equal (text_, evt->get_property ("text")); + } bool is_continuation () const { return current_event_ - && !force_no_continuation_ - && ly_is_equal (number_, - current_event_->get_property ("figure")) - && ly_is_equal (alteration_, - current_event_->get_property ("alteration")) - && ly_is_equal (augmented_, - current_event_->get_property ("augmented")) - && ly_is_equal (diminished_, - current_event_->get_property ("diminished")) - && ly_is_equal (augmented_slash_, - current_event_->get_property ("augmented-slash")); + && group_is_equal_to (current_event_); + } + void assign_from_event (Stream_event *currevt, Item *item) + { + number_ = current_event_->get_property ("figure"); + alteration_ = currevt->get_property ("alteration"); + augmented_ = currevt->get_property ("augmented"); + diminished_ = currevt->get_property ("diminished"); + augmented_slash_ = currevt->get_property ("augmented-slash"); + text_ = currevt->get_property ("text"); + figure_item_ = item; } }; @@ -82,88 +118,73 @@ protected: vector new_events_; bool continuation_; bool new_event_found_; - + Moment stop_moment_; - Stream_event *rest_event_; + bool have_rest_; DECLARE_TRANSLATOR_LISTENER (rest); DECLARE_TRANSLATOR_LISTENER (bass_figure); - virtual void derived_mark () const; + virtual void derived_mark () const; void start_translation_timestep (); void stop_translation_timestep (); void process_music (); }; +Figured_bass_engraver::Figured_bass_engraver () +{ + alignment_ = 0; + continuation_ = false; + have_rest_ = 0; + new_event_found_ = false; +} + void Figured_bass_engraver::derived_mark () const { for (vsize i = 0; i < groups_.size (); i++) { - scm_gc_mark (groups_[i].number_); - scm_gc_mark (groups_[i].alteration_); - scm_gc_mark (groups_[i].augmented_); - scm_gc_mark (groups_[i].diminished_); - scm_gc_mark (groups_[i].augmented_slash_); + groups_[i].gc_mark (); } } void -Figured_bass_engraver::stop_translation_timestep () +Figured_bass_engraver::start_translation_timestep () { - if (groups_.empty () - || now_mom ().main_part_ < stop_moment_.main_part_ + if (now_mom ().main_part_ < stop_moment_.main_part_ || now_mom ().grace_part_ < Rational (0)) return ; - - bool found = false; - for (vsize i = 0; !found && i < groups_.size (); i++) - found = found || groups_[i].current_event_; - if (!found) - clear_spanners (); -} + have_rest_ = 0; + new_events_.clear (); + for (vsize i = 0; i < groups_.size (); i++) + groups_[i].current_event_ = 0; -Figured_bass_engraver::Figured_bass_engraver () -{ - alignment_ = 0; continuation_ = false; - rest_event_ = 0; - new_event_found_ = false; } void -Figured_bass_engraver::start_translation_timestep () +Figured_bass_engraver::stop_translation_timestep () { - if (now_mom ().main_part_ < stop_moment_.main_part_ + if (groups_.empty () + || now_mom ().main_part_ < stop_moment_.main_part_ || now_mom ().grace_part_ < Rational (0)) return ; - - rest_event_ = 0; - new_events_.clear (); - for (vsize i = 0; i < groups_.size (); i++) - groups_[i].current_event_ = 0; - continuation_ = false; + bool found = false; + for (vsize i = 0; !found && i < groups_.size (); i++) + found = found || groups_[i].current_event_; - + if (!found) + clear_spanners (); } IMPLEMENT_TRANSLATOR_LISTENER (Figured_bass_engraver, rest); void -Figured_bass_engraver::listen_rest (Stream_event *ev) +Figured_bass_engraver::listen_rest (Stream_event *) { - if (to_boolean (get_property ("ignoreFiguredBassRest"))) - { - new_event_found_ = true; - - /* - No ASSIGN_EVENT_ONCE () ; otherwise we get warnings about - polyphonic rests. - */ - rest_event_ = ev; - } + have_rest_ = true; } IMPLEMENT_TRANSLATOR_LISTENER (Figured_bass_engraver, bass_figure); @@ -174,22 +195,22 @@ Figured_bass_engraver::listen_bass_figure (Stream_event *ev) Moment stop = now_mom () + get_event_length (ev, now_mom ()); stop_moment_ = max (stop_moment_, stop); - if (to_boolean (get_property ("useBassFigureExtenders"))) + // Handle no-continuation here, don't even add it to the already existing + // spanner... This fixes some layout issues (figure will be placed separately) + bool no_continuation = to_boolean (ev->get_property ("no-continuation")); + if (to_boolean (get_property ("useBassFigureExtenders")) && !no_continuation) { - SCM fig = ev->get_property ("figure"); for (vsize i = 0; i < groups_.size (); i++) - { - if (!groups_[i].current_event_ - && ly_is_equal (groups_[i].number_, fig)) - { - groups_[i].current_event_ = ev; - groups_[i].force_no_continuation_ - = to_boolean (ev->get_property ("no-continuation")); - continuation_ = true; - return; - } - } - } + { + if (!groups_[i].current_event_ + && groups_[i].group_is_equal_to (ev)) + { + groups_[i].current_event_ = ev; + continuation_ = true; + return; + } + } + } new_events_.push_back (ev); } @@ -200,36 +221,36 @@ Figured_bass_engraver::center_continuations (vector const &consecutive { vector left_figs; for (vsize j = consecutive_lines.size (); j--;) - left_figs.push_back (consecutive_lines[j]->get_bound (LEFT)); + left_figs.push_back (consecutive_lines[j]->get_bound (LEFT)); SCM ga = Grob_array::make_array (); unsmob_grob_array (ga)->set_array (left_figs); for (vsize j = consecutive_lines.size (); j--;) - consecutive_lines[j]->set_object ("figures", - unsmob_grob_array (ga)->smobbed_copy ()); + consecutive_lines[j]->set_object ("figures", + unsmob_grob_array (ga)->smobbed_copy ()); } } void Figured_bass_engraver::center_repeated_continuations () -{ +{ vector consecutive_lines; for (vsize i = 0; i <= groups_.size (); i++) { if (i < groups_.size () - && groups_[i].continuation_line_ - && (consecutive_lines.empty () - || (consecutive_lines[0]->get_bound (LEFT)->get_column () - == groups_[i].continuation_line_->get_bound (LEFT)->get_column () - && consecutive_lines[0]->get_bound (RIGHT)->get_column () - == groups_[i].continuation_line_->get_bound (RIGHT)->get_column ()))) - consecutive_lines.push_back (groups_[i].continuation_line_); - else - { - center_continuations (consecutive_lines); - consecutive_lines.clear (); - } + && groups_[i].continuation_line_ + && (consecutive_lines.empty () + || (consecutive_lines[0]->get_bound (LEFT)->get_column () + == groups_[i].continuation_line_->get_bound (LEFT)->get_column () + && consecutive_lines[0]->get_bound (RIGHT)->get_column () + == groups_[i].continuation_line_->get_bound (RIGHT)->get_column ()))) + consecutive_lines.push_back (groups_[i].continuation_line_); + else + { + center_continuations (consecutive_lines); + consecutive_lines.clear (); + } } } @@ -239,80 +260,41 @@ Figured_bass_engraver::clear_spanners () if (!alignment_) return; - if (alignment_) - { - announce_end_grob (alignment_, SCM_EOL); - alignment_ = 0; - } + announce_end_grob (alignment_, SCM_EOL); + alignment_ = 0; if (to_boolean (get_property ("figuredBassCenterContinuations"))) center_repeated_continuations (); - + for (vsize i = 0; i < groups_.size (); i++) { if (groups_[i].group_) - { - announce_end_grob (groups_[i].group_ , SCM_EOL); - groups_[i].group_ = 0; - } - + { + announce_end_grob (groups_[i].group_ , SCM_EOL); + groups_[i].group_ = 0; + } + if (groups_[i].continuation_line_) - { - announce_end_grob (groups_[i].continuation_line_ , SCM_EOL); - groups_[i].continuation_line_ = 0; - } + { + announce_end_grob (groups_[i].continuation_line_ , SCM_EOL); + groups_[i].continuation_line_ = 0; + } } /* Check me, groups_.clear () ? */ } -void -Figured_bass_engraver::add_brackets () -{ - vector encompass; - bool inside = false; - for (vsize i = 0; i < groups_.size (); i ++) - { - if (!groups_[i].current_event_) - continue; - - if (to_boolean (groups_[i].current_event_->get_property ("bracket-start"))) - inside = true; - - if (inside && groups_[i].figure_item_) - encompass.push_back (groups_[i].figure_item_); - - if (to_boolean (groups_[i].current_event_->get_property ("bracket-stop"))) - { - inside = false; - - Item * brack = make_item ("BassFigureBracket", groups_[i].current_event_->self_scm ()); - for (vsize j = 0; j < encompass.size (); j++) - { - Pointer_group_interface::add_grob (brack, - ly_symbol2scm ("elements"), - encompass[j]); - } - encompass.clear (); - } - } -} - void Figured_bass_engraver::process_music () { - if (alignment_ && !to_boolean (get_property ("useBassFigureExtenders"))) + bool use_extenders = to_boolean (get_property ("useBassFigureExtenders")); + if (alignment_ && !use_extenders) clear_spanners (); - - if (rest_event_) - { - clear_spanners (); - groups_.clear (); - return; - } - - if (!continuation_ - && new_events_.empty ()) + + // If we have a rest, or we have no new or continued events, clear all spanners + bool ignore_rest = to_boolean (get_property ("ignoreFiguredBassRest")); + if ((ignore_rest && have_rest_) || + (!continuation_ && new_events_.empty ())) { clear_spanners (); groups_.clear (); @@ -321,18 +303,17 @@ Figured_bass_engraver::process_music () if (!new_event_found_) return; - + new_event_found_ = false; /* - Don't need to sync alignments, if we're not using extenders. + Don't need to sync alignments, if we're not using extenders. */ - bool use_extenders = to_boolean (get_property ("useBassFigureExtenders")); if (!use_extenders) { clear_spanners (); } - + if (!continuation_) { clear_spanners (); @@ -343,15 +324,16 @@ Figured_bass_engraver::process_music () for (vsize i = 0; i < new_events_.size (); i++) { while (k < groups_.size () - && groups_[k].current_event_) - k++; - + && groups_[k].current_event_) + k++; + if (k >= groups_.size ()) - { - Figure_group group; - groups_.push_back (group); - } - + { + Figure_group group; + groups_.push_back (group); + } + + groups_[k].reset_figure (); groups_[k].current_event_ = new_events_[i]; groups_[k].figure_item_ = 0; k++; @@ -360,76 +342,72 @@ Figured_bass_engraver::process_music () for (vsize i = 0; i < groups_.size (); i++) { if (!groups_[i].is_continuation ()) - { - groups_[i].number_ = SCM_BOOL_F; - groups_[i].alteration_ = SCM_BOOL_F; - groups_[i].augmented_ = SCM_BOOL_F; - groups_[i].diminished_ = SCM_BOOL_F; - groups_[i].augmented_slash_ = SCM_BOOL_F; - } + { + groups_[i].reset_figure (); + } } if (use_extenders) { vector junk_continuations; for (vsize i = 0; i < groups_.size (); i++) - { - Figure_group &group = groups_[i]; - - if (group.is_continuation ()) - { - if (!group.continuation_line_) - { - Spanner * line - = make_spanner ("BassFigureContinuation", SCM_EOL); - Item * item = group.figure_item_; - group.continuation_line_ = line; - line->set_bound (LEFT, item); - - /* - Don't add as child. This will cache the wrong - (pre-break) stencil when callbacks are triggered. - */ - line->set_parent (group.group_, Y_AXIS); - Pointer_group_interface::add_grob (line, ly_symbol2scm ("figures"), item); - - group.figure_item_ = 0; - } - } - else if (group.continuation_line_) - junk_continuations.push_back (i); - } + { + Figure_group &group = groups_[i]; + + if (group.is_continuation ()) + { + if (!group.continuation_line_) + { + Spanner * line + = make_spanner ("BassFigureContinuation", SCM_EOL); + Item * item = group.figure_item_; + group.continuation_line_ = line; + line->set_bound (LEFT, item); + + /* + Don't add as child. This will cache the wrong + (pre-break) stencil when callbacks are triggered. + */ + line->set_parent (group.group_, Y_AXIS); + Pointer_group_interface::add_grob (line, ly_symbol2scm ("figures"), item); + + group.figure_item_ = 0; + } + } + else if (group.continuation_line_) + junk_continuations.push_back (i); + } /* - Ugh, repeated code. + Ugh, repeated code. */ vector consecutive; if (to_boolean (get_property ("figuredBassCenterContinuations"))) - { - for (vsize i = 0; i <= junk_continuations.size (); i++) - { - if (i < junk_continuations.size () - && (i == 0 || junk_continuations[i-1] == junk_continuations[i] - 1)) - consecutive.push_back (groups_[junk_continuations[i]].continuation_line_); - else - { - center_continuations (consecutive); - consecutive.clear (); - if (i < junk_continuations.size ()) - consecutive.push_back (groups_[junk_continuations[i]].continuation_line_); - } - } - } + { + for (vsize i = 0; i <= junk_continuations.size (); i++) + { + if (i < junk_continuations.size () + && (i == 0 || junk_continuations[i-1] == junk_continuations[i] - 1)) + consecutive.push_back (groups_[junk_continuations[i]].continuation_line_); + else + { + center_continuations (consecutive); + consecutive.clear (); + if (i < junk_continuations.size ()) + consecutive.push_back (groups_[junk_continuations[i]].continuation_line_); + } + } + } for (vsize i = 0; i < junk_continuations.size (); i++) - groups_[junk_continuations[i]].continuation_line_ = 0; + groups_[junk_continuations[i]].continuation_line_ = 0; } - + create_grobs (); add_brackets (); } void -Figured_bass_engraver::create_grobs () +Figured_bass_engraver::create_grobs () { Grob *muscol = dynamic_cast (unsmob_grob (get_property ("currentMusicalColumn"))); @@ -444,84 +422,110 @@ Figured_bass_engraver::create_grobs () for (vsize i = 0; i < groups_.size (); i++) { Figure_group &group = groups_[i]; - + if (group.current_event_) - { - Item *item - = make_item ("BassFigure", - group.current_event_->self_scm ()); - - - SCM fig = group.current_event_->get_property ("figure"); - if (!group.group_) - { - group.group_ = make_spanner ("BassFigureLine", SCM_EOL); - group.group_->set_bound (LEFT, muscol); - Align_interface::add_element (alignment_, - group.group_); - } - - if (scm_memq (fig, get_property ("implicitBassFigures")) != SCM_BOOL_F) - { - item->set_property ("transparent", SCM_BOOL_T); - item->set_property ("implicit", SCM_BOOL_T); - } - - group.number_ = fig; - group.alteration_ = group.current_event_->get_property ("alteration"); - group.augmented_ = group.current_event_->get_property ("augmented"); - group.diminished_ = group.current_event_->get_property ("diminished"); - group.augmented_slash_ = group.current_event_->get_property ("augmented-slash"); - - SCM text = group.current_event_->get_property ("text"); - if (!Text_interface::is_markup (text) - && ly_is_procedure (proc)) - { - text = scm_call_3 (proc, fig, group.current_event_->self_scm (), - context ()->self_scm ()); - } - - item->set_property ("text", text); - - Axis_group_interface::add_element (group.group_, item); - group.figure_item_ = item; - } + { + Item *item + = make_item ("BassFigure", group.current_event_->self_scm ()); + group.assign_from_event (group.current_event_, item); + + if (!group.group_) + { + group.group_ = make_spanner ("BassFigureLine", SCM_EOL); + group.group_->set_bound (LEFT, muscol); + Align_interface::add_element (alignment_, group.group_); + } + + if (scm_memq (group.number_, get_property ("implicitBassFigures")) != SCM_BOOL_F) + { + item->set_property ("transparent", SCM_BOOL_T); + item->set_property ("implicit", SCM_BOOL_T); + } + + SCM text = group.text_; + if (!Text_interface::is_markup (text) + && ly_is_procedure (proc)) + { + text = scm_call_3 (proc, group.number_, group.current_event_->self_scm (), + context ()->self_scm ()); + } + + item->set_property ("text", text); + + Axis_group_interface::add_element (group.group_, item); + } if (group.continuation_line_) - { - /* - UGH should connect to the bass staff, and get the note heads. - */ - group.figure_item_->set_property ("transparent", SCM_BOOL_T); - group.continuation_line_->set_bound (RIGHT, group.figure_item_); - } - + { + /* + UGH should connect to the bass staff, and get the note heads. + For now, simply set the hidden figure to a default value to + ensure the extenders of different figures always end at the same + position, e.g. in <12 5> <12 5> + */ + group.figure_item_->set_property ("transparent", SCM_BOOL_T); + group.figure_item_->set_property ("text", ly_string2scm ("0")); + group.continuation_line_->set_bound (RIGHT, group.figure_item_); + } + if (groups_[i].group_) - groups_[i].group_->set_bound (RIGHT, muscol); + groups_[i].group_->set_bound (RIGHT, muscol); } } +void +Figured_bass_engraver::add_brackets () +{ + vector encompass; + bool inside = false; + for (vsize i = 0; i < groups_.size (); i ++) + { + if (!groups_[i].current_event_) + continue; + + if (to_boolean (groups_[i].current_event_->get_property ("bracket-start"))) + inside = true; + + if (inside && groups_[i].figure_item_) + encompass.push_back (groups_[i].figure_item_); + + if (to_boolean (groups_[i].current_event_->get_property ("bracket-stop"))) + { + inside = false; + + Item * brack = make_item ("BassFigureBracket", groups_[i].current_event_->self_scm ()); + for (vsize j = 0; j < encompass.size (); j++) + { + Pointer_group_interface::add_grob (brack, + ly_symbol2scm ("elements"), + encompass[j]); + } + encompass.clear (); + } + } +} + ADD_TRANSLATOR (Figured_bass_engraver, - /* doc */ - "Make figured bass numbers.", - - /* create */ - "BassFigure " - "BassFigureAlignment " - "BassFigureBracket " - "BassFigureContinuation " - "BassFigureLine ", - - /* read */ - "figuredBassAlterationDirection " - "figuredBassCenterContinuations " - "figuredBassFormatter " - "implicitBassFigures " - "useBassFigureExtenders " - "ignoreFiguredBassRest ", - - /* write */ - "" - ); + /* doc */ + "Make figured bass numbers.", + + /* create */ + "BassFigure " + "BassFigureAlignment " + "BassFigureBracket " + "BassFigureContinuation " + "BassFigureLine ", + + /* read */ + "figuredBassAlterationDirection " + "figuredBassCenterContinuations " + "figuredBassFormatter " + "implicitBassFigures " + "useBassFigureExtenders " + "ignoreFiguredBassRest ", + + /* write */ + "" + ); diff --git a/lily/figured-bass-position-engraver.cc b/lily/figured-bass-position-engraver.cc index 705bba24b7..6db165a9ba 100644 --- a/lily/figured-bass-position-engraver.cc +++ b/lily/figured-bass-position-engraver.cc @@ -1,10 +1,21 @@ /* - figured-bass-position-engraver.cc -- implement Figured_bass_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/file-name-map.cc b/lily/file-name-map.cc index 63ae7eced0..e0fd5d5fba 100644 --- a/lily/file-name-map.cc +++ b/lily/file-name-map.cc @@ -1,9 +1,20 @@ /* - file-name-map.cc -- implement map_file_name () + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc index 235fdd666d..8002378698 100644 --- a/lily/fingering-engraver.cc +++ b/lily/fingering-engraver.cc @@ -1,9 +1,20 @@ /* - fingering-engraver.cc -- implement Fingering_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -130,9 +141,6 @@ Fingering_engraver::make_script (Direction d, Stream_event *r, int i) void Fingering_engraver::stop_translation_timestep () { - if (!fingerings_.size ()) - return; - fingerings_.clear (); events_.clear (); } diff --git a/lily/font-config-scheme.cc b/lily/font-config-scheme.cc index 65ad68fe43..cc01f20692 100644 --- a/lily/font-config-scheme.cc +++ b/lily/font-config-scheme.cc @@ -1,10 +1,20 @@ /* - font-config-scheme.cc -- implement FontConfig bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "lily-guile.hh" diff --git a/lily/font-config.cc b/lily/font-config.cc index 7737068c2e..54f04bee8e 100644 --- a/lily/font-config.cc +++ b/lily/font-config.cc @@ -1,9 +1,20 @@ /* - font-config.cc -- implement FontConfig related functions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "config.hh" @@ -28,28 +39,14 @@ init_fontconfig () if (be_verbose_global) message (_ ("Initializing FontConfig...")); + /* TODO: Find a way for Fontconfig to update its cache, if needed. */ font_config_global = FcInitLoadConfig (); - FcChar8 *cache_file = FcConfigGetCache (font_config_global); - -#if 0 - // always returns 0 for FC 2.4 - if (!cache_file) - programming_error ("Cannot find file for FontConfig cache."); -#endif - /* - This is a terrible kludge, but there is apparently no way for - FontConfig to signal whether it needs to rescan directories. - */ - if (cache_file - && !is_file ((char const *)cache_file)) - message (_f ("Rebuilding FontConfig cache %s, this may take a while...", cache_file)); vector dirs; /* Extra trailing slash suddenly breaks fontconfig (fc-cache 2.5.0) on windows. */ dirs.push_back (lilypond_datadir + "/fonts/otf"); - dirs.push_back (lilypond_datadir + "/fonts/type1"); for (vsize i = 0; i < dirs.size (); i++) { @@ -61,21 +58,14 @@ init_fontconfig () } if (be_verbose_global) - message (_ ("Building font database.")); + message (_ ("Building font database...")); + FcConfigBuildFonts (font_config_global); FcConfigSetCurrent (font_config_global); + if (be_verbose_global) message ("\n"); - if (cache_file - && !is_file ((char*)cache_file)) - { - /* inhibit future messages. */ - FILE *f = fopen ((char*)cache_file, "w"); - if (f) - fclose (f); - } - } #else diff --git a/lily/font-interface.cc b/lily/font-interface.cc index 9bd1095458..4085140311 100644 --- a/lily/font-interface.cc +++ b/lily/font-interface.cc @@ -1,9 +1,20 @@ /* - font-interface.cc -- implement Font_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "font-interface.hh" diff --git a/lily/font-metric-scheme.cc b/lily/font-metric-scheme.cc index bb4dbd401c..fda67e11ba 100644 --- a/lily/font-metric-scheme.cc +++ b/lily/font-metric-scheme.cc @@ -1,9 +1,20 @@ /* - font-metric-scheme.cc -- implement Font_metric scheme bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "font-metric.hh" @@ -20,7 +31,8 @@ LY_DEFINE (ly_font_get_glyph, "ly:font-get-glyph", "\n" "Note that this command can only be used to access glyphs from" " fonts loaded with @code{ly:system-font-load}; currently, this" - " means either the Emmentaler or Aybabtu fonts, corresponding" + " means either the Emmentaler or Emmentaler-Brace " + " fonts, corresponding" " to the font encodings @code{fetaMusic} and @code{fetaBraces}," " respectively.") { @@ -34,25 +46,6 @@ LY_DEFINE (ly_font_get_glyph, "ly:font-get-glyph", return m.smobbed_copy (); } -LY_DEFINE (ly_get_glyph, "ly:get-glyph", - 2, 0, 0, - (SCM font, SCM index), - "Retrieve a stencil for the glyph numbered @var{index}" - " in @var{font}.\n" - "\n" - "Note that this command can only be used to access glyphs from" - " fonts loaded with @code{ly:system-font-load}; currently, this" - " means either the Emmentaler or Aybabtu fonts, corresponding" - " to the font encodings @code{fetaMusic} and @code{fetaBraces}," - " respectively.") -{ - Font_metric *fm = unsmob_metrics (font); - LY_ASSERT_SMOB (Font_metric, font, 1); - LY_ASSERT_TYPE (scm_is_number, index,2); - - return fm->get_ascii_char_stencil (scm_to_int (index)).smobbed_copy (); -} - LY_DEFINE (ly_font_glyph_name_to_index, "ly:font-glyph-name-to-index", 2, 0, 0, (SCM font, SCM name), @@ -60,7 +53,7 @@ LY_DEFINE (ly_font_glyph_name_to_index, "ly:font-glyph-name-to-index", "\n" "Note that this command can only be used to access glyphs from" " fonts loaded with @code{ly:system-font-load}; currently, this" - " means either the Emmentaler or Aybabtu fonts, corresponding" + " means either the Emmentaler or Emmentaler-Brace fonts, corresponding" " to the font encodings @code{fetaMusic} and @code{fetaBraces}," " respectively.") { @@ -78,7 +71,7 @@ LY_DEFINE (ly_font_index_to_charcode, "ly:font-index-to-charcode", "\n" "Note that this command can only be used to access glyphs from" " fonts loaded with @code{ly:system-font-load}; currently, this" - " means either the Emmentaler or Aybabtu fonts, corresponding" + " means either the Emmentaler or Emmentaler-Brace fonts, corresponding" " to the font encodings @code{fetaMusic} and @code{fetaBraces}," " respectively.") { @@ -96,7 +89,7 @@ LY_DEFINE (ly_font_glyph_name_to_charcode, "ly:font-glyph-name-to-charcode", "\n" "Note that this command can only be used to access glyphs from" " fonts loaded with @code{ly:system-font-load}; currently, this" - " means either the Emmentaler or Aybabtu fonts, corresponding" + " means either the Emmentaler or Emmentaler-Brace fonts, corresponding" " to the font encodings @code{fetaMusic} and @code{fetaBraces}," " respectively.") { @@ -107,25 +100,6 @@ LY_DEFINE (ly_font_glyph_name_to_charcode, "ly:font-glyph-name-to-charcode", return scm_from_unsigned_integer (fm->index_to_charcode (fm->name_to_index (ly_scm2string (name)))); } -LY_DEFINE (ly_text_dimension, "ly:text-dimension", - 2, 0, 0, - (SCM font, SCM text), - "Given the font metric in @var{font} and the string @var{text}," - " compute the extents of that text in that font. The return" - " value is a pair of number-pairs.") -{ - Box b; - Modified_font_metric *fm = dynamic_cast - (unsmob_metrics (font)); - - LY_ASSERT_SMOB (Font_metric, font, 1); - LY_ASSERT_TYPE (scm_is_string, text, 2); - Stencil stc (fm->text_stencil (ly_scm2string (text))); - return scm_cons (ly_interval2scm (stc.extent (X_AXIS)), - ly_interval2scm (stc.extent (Y_AXIS))); -} - - /* TODO: when are non string retvals allowed? */ diff --git a/lily/font-metric.cc b/lily/font-metric.cc index 12d8807831..458528dd2e 100644 --- a/lily/font-metric.cc +++ b/lily/font-metric.cc @@ -1,11 +1,20 @@ /* - font-metric.cc -- implement Font_metric + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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. - Mats Bengtsson (the ugly TeX parsing in text_dimension) + 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 . */ #include "font-metric.hh" @@ -41,7 +50,7 @@ Font_metric::find_by_name (string s) const expr = scm_list_3 (ly_symbol2scm ("named-glyph"), self_scm (), ly_string2scm (s)); - b = get_indexed_char (idx); + b = get_indexed_char_dimensions (idx); } Stencil q (b, expr); @@ -70,17 +79,11 @@ Font_metric::count () const } Box -Font_metric::get_ascii_char (size_t) const +Font_metric::get_indexed_char_dimensions (size_t) const { return Box (Interval (0, 0), Interval (0, 0)); } -Box -Font_metric::get_indexed_char (size_t k) const -{ - return get_ascii_char (k); -} - size_t Font_metric::name_to_index (string) const { @@ -135,35 +138,10 @@ Font_metric::font_name () const return s; } -size_t -Font_metric::index_to_ascii (size_t i) const -{ - return i; -} - size_t Font_metric::index_to_charcode (size_t i) const { - return index_to_ascii (i); -} - -Stencil -Font_metric::get_ascii_char_stencil (size_t code) const -{ - SCM at = scm_list_3 (ly_symbol2scm ("char"), self_scm (), - scm_from_unsigned (code)); - Box b = get_ascii_char (code); - return Stencil (b, at); -} - -Stencil -Font_metric::get_indexed_char_stencil (size_t code) const -{ - size_t idx = index_to_ascii (code); - SCM at = scm_list_3 (ly_symbol2scm ("char"), self_scm (), - scm_from_unsigned (idx)); - Box b = get_indexed_char (code); - return Stencil (b, at); + return i; } Offset @@ -179,21 +157,11 @@ Font_metric::sub_fonts () const } Stencil -Font_metric::word_stencil (string str) const -{ - return text_stencil (str); -} - -Stencil -Font_metric::text_stencil (string /* str */) const +Font_metric::text_stencil (Output_def *state, + string, bool) const { - programming_error("Cannot get a text stencil from this font"); + (void) state; + + programming_error ("Cannot get a text stencil from this font"); return Stencil (Box (), SCM_EOL); } - -Box -Font_metric::text_dimension (string) const -{ - return Box (Interval (0, 0), Interval (0, 0)); -} - diff --git a/lily/font-select.cc b/lily/font-select.cc index 2de54e3955..f9f42ae25e 100644 --- a/lily/font-select.cc +++ b/lily/font-select.cc @@ -1,9 +1,20 @@ /* - font-select.cc -- implement property -> font_metric routines. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Han-Wen Nienhuys - (c) 2003--2009 Han-Wen Nienhuys + 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 . */ diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index b9dfb058ef..c95e104c87 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -1,9 +1,20 @@ /* - font-size-engraver.cc -- implement Font_size_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "grob.hh" diff --git a/lily/footnote-engraver.cc b/lily/footnote-engraver.cc new file mode 100644 index 0000000000..7539bf9503 --- /dev/null +++ b/lily/footnote-engraver.cc @@ -0,0 +1,136 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2011 Mike Solomon + + 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 . +*/ + +#include "engraver.hh" + +#include "stream-event.hh" +#include "item.hh" +#include "pointer-group-interface.hh" +#include "spanner.hh" + +#include "translator.icc" + +class Footnote_engraver : public Engraver +{ + TRANSLATOR_DECLARATIONS (Footnote_engraver); + + DECLARE_TRANSLATOR_LISTENER (footnote); + DECLARE_ACKNOWLEDGER (grob); + DECLARE_END_ACKNOWLEDGER (grob); + vector events_; + vector > annotated_spanners_; + + void stop_translation_timestep (); + + void footnotify (Grob *, Stream_event *); +}; + +IMPLEMENT_TRANSLATOR_LISTENER (Footnote_engraver, footnote); +void +Footnote_engraver::listen_footnote (Stream_event *ev) +{ + events_.push_back (ev); +} + +void +Footnote_engraver::stop_translation_timestep () +{ + events_.clear (); +} + +Footnote_engraver::Footnote_engraver () +{ +} + +void +Footnote_engraver::footnotify (Grob *g, Stream_event *event) +{ + Spanner *s = dynamic_cast(g); + + if (s) + { + Spanner *b = make_spanner ("FootnoteSpanner", event->self_scm ()); + b->set_parent (s, Y_AXIS); + b->set_parent (s, X_AXIS); + Grob *bound = unsmob_grob (get_property ("currentMusicalColumn")); + b->set_bound (LEFT, bound); + annotated_spanners_.push_back (Drul_array (s,b)); + } + else + { + Grob *b = make_item ("FootnoteItem", event->self_scm ()); + b->set_parent (g, Y_AXIS); + b->set_parent (g, X_AXIS); + } +} + +void +Footnote_engraver::acknowledge_grob (Grob_info info) +{ + Stream_event *cause = info.event_cause (); + + SCM arts = cause ? cause->get_property ("articulations") : SCM_EOL; + for (SCM s = arts; scm_is_pair (s); s = scm_cdr (s)) + { + Stream_event *e = unsmob_stream_event (scm_car (s)); + if (e->in_event_class ("footnote-event")) + footnotify (info.grob (), e); + } + + for (vsize i = 0; i < events_.size (); i++) + { + if (info.grob ()->name () == ly_symbol2string (events_[i]->get_property ("symbol"))) + footnotify (info.grob (), events_[i]); + } +} + +void +Footnote_engraver::acknowledge_end_grob (Grob_info info) +{ + Spanner *s = dynamic_cast(info.grob ()); + + if (s) + for (vsize i = 0; i < annotated_spanners_.size (); i++) + { + if (annotated_spanners_[i][LEFT] == s) + { + Grob *bound = unsmob_grob (get_property ("currentMusicalColumn")); + annotated_spanners_[i][RIGHT]->set_bound (RIGHT, bound); + break; + } + } +} + +ADD_ACKNOWLEDGER (Footnote_engraver, grob); +ADD_END_ACKNOWLEDGER (Footnote_engraver, grob); + +ADD_TRANSLATOR (Footnote_engraver, + /* doc */ + "Create footnote texts.", + + /* create */ + "FootnoteItem " + "FootnoteSpanner ", + + /*read*/ + "currentMusicalColumn ", + + /*write*/ + "" + ); diff --git a/lily/forbid-break-engraver.cc b/lily/forbid-break-engraver.cc index f44d7bc27f..81c03e15be 100644 --- a/lily/forbid-break-engraver.cc +++ b/lily/forbid-break-engraver.cc @@ -1,9 +1,20 @@ /* - forbid-break-engraver.cc -- implement Forbid_line_break_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--_2005 Han-Wen Nienhuys - (c) 2002--_2005 Han-Wen Nienhuys + 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 . */ #include "context.hh" #include "duration.hh" diff --git a/lily/freetype-error.cc b/lily/freetype-error.cc index 8e5d435bc6..21cec33111 100644 --- a/lily/freetype-error.cc +++ b/lily/freetype-error.cc @@ -1,10 +1,21 @@ -/* - freetype-error.cc -- implement freetype error messages - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #include "freetype.hh" @@ -16,7 +27,7 @@ const struct Freetype_error_message { - int err_code; + FT_Error err_code; const char* err_msg; } ft_errors[] = @@ -28,7 +39,7 @@ const struct Freetype_error_message #include string -freetype_error_string (int code) +freetype_error_string (FT_Error code) { for (Freetype_error_message const *p = ft_errors; p->err_msg; p ++) diff --git a/lily/freetype.cc b/lily/freetype.cc index 08d7733461..7ad6b42d6a 100644 --- a/lily/freetype.cc +++ b/lily/freetype.cc @@ -1,9 +1,20 @@ /* - freetype.cc -- implement Freetype routines. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "freetype.hh" @@ -14,7 +25,7 @@ FT_Library freetype2_library; void init_freetype () { - int errorcode = FT_Init_FreeType (&freetype2_library); + FT_Error errorcode = FT_Init_FreeType (&freetype2_library); if (errorcode) error ("cannot initialize FreeType"); } diff --git a/lily/fretboard-engraver.cc b/lily/fretboard-engraver.cc index f284161a80..cb4345ccad 100644 --- a/lily/fretboard-engraver.cc +++ b/lily/fretboard-engraver.cc @@ -1,13 +1,27 @@ /* - fretboard-engraver.cc -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 2006 Han-Wen Nienhuys + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #include #include using namespace std; +#include "articulations.hh" #include "context.hh" #include "item.hh" #include "engraver.hh" @@ -23,23 +37,35 @@ using namespace std; class Fretboard_engraver : public Engraver { Item *fret_board_; - - vector note_events_; - vector tabstring_events_; + + vector note_events_; + vector tabstring_events_; + vector fingering_events_; public: TRANSLATOR_DECLARATIONS (Fretboard_engraver); protected: + void stop_translation_timestep (); + void process_music (); + virtual void derived_mark () const; DECLARE_TRANSLATOR_LISTENER (note); DECLARE_TRANSLATOR_LISTENER (string_number); - void process_music (); + DECLARE_TRANSLATOR_LISTENER (fingering); - void stop_translation_timestep (); +private: + SCM last_fret_notes_; }; +void +Fretboard_engraver::derived_mark () const +{ + scm_gc_mark (last_fret_notes_); +} + Fretboard_engraver::Fretboard_engraver () { fret_board_ = 0; + last_fret_notes_ = SCM_EOL; } IMPLEMENT_TRANSLATOR_LISTENER (Fretboard_engraver, note); @@ -56,24 +82,40 @@ Fretboard_engraver::listen_string_number (Stream_event *ev) tabstring_events_.push_back (ev); } +IMPLEMENT_TRANSLATOR_LISTENER (Fretboard_engraver, fingering); +void +Fretboard_engraver::listen_fingering (Stream_event *ev) +{ + fingering_events_.push_back (ev); +} + void Fretboard_engraver::process_music () { if (!note_events_.size ()) - return ; - + return; + + SCM tab_strings = articulation_list (note_events_, + tabstring_events_, + "string-number-event"); + SCM fingers = articulation_list (note_events_, + fingering_events_, + "fingering-event"); fret_board_ = make_item ("FretBoard", note_events_[0]->self_scm ()); - + SCM fret_notes = ly_cxx_vector_to_list (note_events_); SCM proc = get_property ("noteToFretFunction"); if (ly_is_procedure (proc)) - { - scm_call_4 (proc, - context ()->self_scm (), - fret_board_->self_scm (), - - ly_cxx_vector_to_list (note_events_), - ly_cxx_vector_to_list (tabstring_events_)); - } + scm_call_4 (proc, + context ()->self_scm (), + fret_notes, + scm_list_2 (tab_strings, fingers), + fret_board_->self_scm ()); + SCM changes = get_property ("chordChanges"); + if (to_boolean (changes) && scm_is_pair (last_fret_notes_) + && ly_is_equal (last_fret_notes_, fret_notes)) + fret_board_->set_property ("begin-of-line-visible", SCM_BOOL_T); + + last_fret_notes_ = fret_notes; } void @@ -82,25 +124,29 @@ Fretboard_engraver::stop_translation_timestep () fret_board_ = 0; note_events_.clear (); tabstring_events_.clear (); + fingering_events_.clear (); } ADD_TRANSLATOR (Fretboard_engraver, /* doc */ - "Generate one or more tablature noteheads from event of type" + "Generate fret diagram from one or more events of type" " @code{NoteEvent}.", /* create */ "FretBoard ", /* read */ - "stringTunings " - "minimumFret " - "maximumFretStretch " - "tablatureFormat " + "chordChanges " + "defaultStrings " "highStringOne " - "predefinedDiagramTable", + "maximumFretStretch " + "minimumFret " + "noteToFretFunction " + "predefinedDiagramTable " + "stringTunings " + "tablatureFormat ", /* write */ "" - ); + ); diff --git a/lily/function-documentation.cc b/lily/function-documentation.cc index 87f6cd1019..8d7c14b999 100644 --- a/lily/function-documentation.cc +++ b/lily/function-documentation.cc @@ -1,9 +1,20 @@ /* - function-documentation.cc -- Scheme doc strings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include @@ -58,7 +69,7 @@ LY_DEFINE (ly_get_all_function_documentation, "ly:get-all-function-documentation #include -map type_names; +map type_names; void ly_add_type_predicate (void *ptr, @@ -80,14 +91,15 @@ predicate_to_typename (void *ptr) } /* type predicates. */ -#include "spanner.hh" +#include "global-context.hh" +#include "input.hh" #include "item.hh" #include "music.hh" #include "music-function.hh" -#include "performance.hh" #include "paper-score.hh" -#include "global-context.hh" -#include "input.hh" +#include "performance.hh" +#include "spanner.hh" +#include "stream-event.hh" void init_func_doc () @@ -117,6 +129,7 @@ init_func_doc () ly_add_type_predicate ((void*) &unsmob_item, "Item"); ly_add_type_predicate ((void*) &unsmob_music, "Music"); ly_add_type_predicate ((void*) &unsmob_spanner, "Spanner"); + ly_add_type_predicate ((void*) &unsmob_stream_event, "Stream_event"); } ADD_SCM_INIT_FUNC (func_doc, init_func_doc); diff --git a/lily/general-scheme.cc b/lily/general-scheme.cc index 8b5766387e..ae31e1eb9f 100644 --- a/lily/general-scheme.cc +++ b/lily/general-scheme.cc @@ -1,10 +1,21 @@ /* - lily-guile.cc -- implement assorted Guile bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "config.hh" @@ -12,20 +23,22 @@ #include #include #include /* memset */ +#include using namespace std; +#include "dimensions.hh" +#include "file-name.hh" +#include "file-path.hh" #include "international.hh" #include "libc-extension.hh" #include "lily-guile.hh" -#include "misc.hh" -#include "warn.hh" -#include "version.hh" -#include "dimensions.hh" #include "main.hh" -#include "file-path.hh" +#include "misc.hh" +#include "program-option.hh" #include "relocate.hh" -#include "file-name.hh" #include "string-convert.hh" +#include "version.hh" +#include "warn.hh" LY_DEFINE (ly_start_environment, "ly:start-environment", 0, 0, 0, (), @@ -67,7 +80,9 @@ LY_DEFINE (ly_find_file, "ly:find-file", */ LY_DEFINE (ly_gulp_file, "ly:gulp-file", 1, 1, 0, (SCM name, SCM size), - "Read the file @var{name}, and return its contents in a string." + "Read @var{size} characters from the file @var{name}," + " and return its contents in a string." + " If @var{size} is undefined, the entire file is read." " The file is looked up using the search path.") { LY_ASSERT_TYPE (scm_is_string, name, 1); @@ -77,7 +92,7 @@ LY_DEFINE (ly_gulp_file, "ly:gulp-file", LY_ASSERT_TYPE (scm_is_number, size, 2); sz = scm_to_int (size); } - + string contents = gulp_file_to_string (ly_scm2string (name), true, sz); return scm_from_locale_stringn (contents.c_str (), contents.length ()); } @@ -123,26 +138,48 @@ LY_DEFINE (ly_programming_error, "ly:programming-error", { LY_ASSERT_TYPE (scm_is_string, str, 1); str = scm_simple_format (SCM_BOOL_F, str, rest); - programming_error (ly_scm2string (str)); + + if (get_program_option ("warning-as-error")) + error (ly_scm2string (str)); + else + programming_error (ly_scm2string (str)); + return SCM_UNSPECIFIED; } +LY_DEFINE (ly_success, "ly:success", + 1, 0, 1, (SCM str, SCM rest), + "A Scheme callable function to issue a success message @var{str}." + " The message is formatted with @code{format} and @var{rest}.") +{ + LY_ASSERT_TYPE (scm_is_string, str, 1); + str = scm_simple_format (SCM_BOOL_F, str, rest); + successful (ly_scm2string (str)); + return SCM_UNSPECIFIED; + +} LY_DEFINE (ly_warning, "ly:warning", 1, 0, 1, (SCM str, SCM rest), - "A Scheme callable function to issue the warning @code{str}." - " The message is formatted with @code{format} and @code{rest}.") + "A Scheme callable function to issue the warning @var{str}." + " The message is formatted with @code{format} and @var{rest}.") { LY_ASSERT_TYPE (scm_is_string, str, 1); str = scm_simple_format (SCM_BOOL_F, str, rest); - warning (ly_scm2string (str)); + + if (get_program_option ("warning-as-error")) + error (ly_scm2string (str)); + else + warning (ly_scm2string (str)); + return SCM_UNSPECIFIED; } LY_DEFINE (ly_dir_p, "ly:dir?", 1, 0, 0, (SCM s), - "A type predicate. The direction@tie{}@code{s} is @code{-1}," - " @code{0} or@tie{}@code{1}, where @code{-1} represents" - " left or down and @code{1} represents right or up.") + "Is @var{s} a direction? Valid directions are @code{-1}," + " @code{0}, or@tie{}@code{1}, where @code{-1} represents" + " left or down, @code{1}@tie{}represents right or up, and @code{0}" + " represents a neutral direction.") { if (scm_is_number (s)) { @@ -153,20 +190,35 @@ LY_DEFINE (ly_dir_p, "ly:dir?", } LY_DEFINE (ly_assoc_get, "ly:assoc-get", - 2, 1, 0, - (SCM key, SCM alist, SCM default_value), - "Return value if @var{key} in @var{alist}, else @code{default-value}" - " (or @code{#f} if not specified).") + 2, 2, 0, + (SCM key, SCM alist, SCM default_value, SCM strict_checking), + "Return value if @var{key} in @var{alist}, else @var{default-value}" + " (or @code{#f} if not specified). If @var{strict-checking} is set" + " to @code{#t} and @var{key} is not in @var{alist}, a programming_error" + " is output.") { LY_ASSERT_TYPE(ly_cheap_is_list, alist, 2); - + SCM handle = scm_assoc (key, alist); if (scm_is_pair (handle)) return scm_cdr (handle); - + if (default_value == SCM_UNDEFINED) default_value = SCM_BOOL_F; + if (strict_checking == SCM_BOOL_T) + { + string key_string = ly_scm2string + (scm_object_to_string (key, SCM_UNDEFINED)); + string default_value_string = ly_scm2string + (scm_object_to_string (default_value, + SCM_UNDEFINED)); + programming_error ("Cannot find key `" + + key_string + + "' in alist, setting to `" + + default_value_string + "'."); + } + return default_value; } @@ -182,13 +234,65 @@ LY_DEFINE (ly_string_substitute, "ly:string-substitute", string ss = ly_scm2string (s); replace_all (&ss, ly_scm2string (a), ly_scm2string (b)); - + return ly_string2scm (ss); } - + +bool +is_not_escape_character (Byte c) +{ + switch (c) + { + case '-': + case '.': + case '/': + case '0'...'9': + case ':': + case 'A'...'Z': + case '_': + case 'a'...'z': + return true; + } + + return false; +} + +LY_DEFINE (ly_string_percent_encode, "ly:string-percent-encode", + 1, 0, 0, (SCM str), + "Encode all characters in string @var{str} with hexadecimal" + " percent escape sequences, with the following exceptions:" + " characters @code{-}, @code{.}, @code{/}, and @code{_}; and" + " characters in ranges @code{0-9}, @code{A-Z}, and @code{a-z}.") +{ + LY_ASSERT_TYPE (scm_is_string, str, 1); + + string orig_str = ly_scm2string (str); + string new_str = ""; + + vsize i = 0; + vsize n = orig_str.size (); + + while (i < n) + { + Byte cur = orig_str[i]; + + if (is_not_escape_character (cur)) + new_str += cur; + else + { + new_str += '%'; + new_str += String_convert::bin2hex (cur); + } + + i++; + } + + return ly_string2scm (new_str); +} + LY_DEFINE (ly_number_2_string, "ly:number->string", 1, 0, 0, (SCM s), - "Convert @var{num} to a string without generating many decimals.") + "Convert @var{s} to a string without generating many decimals.") { LY_ASSERT_TYPE (scm_is_number, s, 1); @@ -311,10 +415,11 @@ LY_DEFINE (ly_effective_prefix, "ly:effective-prefix", } LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get", - 2, 1, 0, (SCM key, SCM achain, SCM dfault), + 2, 2, 0, (SCM key, SCM achain, SCM default_value, SCM strict_checking), "Return value for @var{key} from a list of alists @var{achain}." - " If no entry is found, return @var{dfault} or @code{#f} if no" - " @var{dfault} is specified.") + " If no entry is found, return @var{default-value} or @code{#f} if" + " @var{default-value} is not specified. With @var{strict-checking}" + " set to @code{#t}, a programming_error is output in such cases.") { if (scm_is_pair (achain)) { @@ -322,9 +427,23 @@ LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get", if (scm_is_pair (handle)) return scm_cdr (handle); else - return ly_chain_assoc_get (key, scm_cdr (achain), dfault); + return ly_chain_assoc_get (key, scm_cdr (achain), default_value); + } + + if (strict_checking == SCM_BOOL_T) + { + string key_string = ly_scm2string + (scm_object_to_string (key, SCM_UNDEFINED)); + string default_value_string = ly_scm2string + (scm_object_to_string (default_value, + SCM_UNDEFINED)); + programming_error ("Cannot find key `" + + key_string + + "' in achain, setting to `" + + default_value_string + "'."); } - return dfault == SCM_UNDEFINED ? SCM_BOOL_F : dfault; + + return default_value == SCM_UNDEFINED ? SCM_BOOL_F : default_value; } @@ -335,12 +454,13 @@ LY_DEFINE (ly_stderr_redirect, "ly:stderr-redirect", LY_ASSERT_TYPE (scm_is_string, file_name, 1); string m = "w"; + FILE *stderrfile; if (mode != SCM_UNDEFINED && scm_string_p (mode)) m = ly_scm2string (mode); /* dup2 and (fileno (current-error-port)) do not work with mingw'c gcc -mwindows. */ - fflush (stderr); - freopen (ly_scm2string (file_name).c_str (), m.c_str (), stderr); + fflush (stderr); + stderrfile = freopen (ly_scm2string (file_name).c_str (), m.c_str (), stderr); return SCM_UNSPECIFIED; } @@ -357,7 +477,7 @@ LY_DEFINE (ly_hash_table_keys, "ly:hash-table-keys", 1,0,0, (SCM tab), "Return a list of keys in @var{tab}.") { - return scm_internal_hash_fold ((Hash_closure_function) & accumulate_symbol, + return scm_internal_hash_fold ((scm_t_hash_fold_fn) &accumulate_symbol, NULL, SCM_EOL, tab); } @@ -366,11 +486,11 @@ LY_DEFINE (ly_camel_case_2_lisp_identifier, "ly:camel-case->lisp-identifier", "Convert @code{FooBar_Bla} to @code{foo-bar-bla} style symbol.") { LY_ASSERT_TYPE (ly_is_symbol, name_sym, 1); - + /* TODO: should use strings instead? */ - + const string in = ly_symbol2string (name_sym); string result = camel_case_to_lisp_identifier (in); @@ -385,7 +505,7 @@ LY_DEFINE (ly_expand_environment, "ly:expand-environment", return ly_string2scm (expand_environment_variables (ly_scm2string (str))); } - + LY_DEFINE (ly_truncate_list_x, "ly:truncate-list!", 2, 0, 0, (SCM lst, SCM i), @@ -410,7 +530,7 @@ LY_DEFINE (ly_truncate_list_x, "ly:truncate-list!", } string -format_single_argument (SCM arg, int precision) +format_single_argument (SCM arg, int precision, bool escape = false) { if (scm_is_integer (arg) && scm_exact_p (arg) == SCM_BOOL_T) return (String_convert::int_string (scm_to_int (arg))); @@ -429,22 +549,36 @@ format_single_argument (SCM arg, int precision) return (String_convert::form_string ("%.*lf", precision, val)); } else if (scm_is_string (arg)) - return (ly_scm2string (arg)); + { + string s = ly_scm2string (arg); + if (escape) + { + // Escape backslashes and double quotes, wrap it in double quotes + replace_all (&s, "\\", "\\\\"); + replace_all (&s, "\"", "\\\""); + // don't replace percents, since the png backend uses %d as escape sequence + // replace_all (&s, "%", "\\%"); + replace_all (&s, "$", "\\$"); + s = "\"" + s + "\""; + } + return s; + } else if (scm_is_symbol (arg)) return (ly_symbol2string (arg)); else { - ly_progress (scm_from_locale_string ("Unsupported SCM value for format: ~a"), + ly_progress (scm_from_locale_string ("\nUnsupported SCM value for format: ~a"), scm_list_1 (arg)); } - - - return ""; + + + return ""; } LY_DEFINE (ly_format, "ly:format", 1, 0, 1, (SCM str, SCM rest), - "LilyPond specific format, supporting @code{~a} and @code{~[0-9]f}.") + "LilyPond specific format, supporting @code{~a} and @code{~[0-9]f}." + " Basic support for @code{~s} is also provided.") { LY_ASSERT_TYPE (scm_is_string, str, 1); @@ -460,7 +594,7 @@ LY_DEFINE (ly_format, "ly:format", if (tilde == NPOS) break ; - + tilde ++; char spec = format.at (tilde ++); @@ -470,16 +604,16 @@ LY_DEFINE (ly_format, "ly:format", { if (!scm_is_pair (rest)) { - programming_error (string (__FUNCTION__) + programming_error (string (__FUNCTION__) + ": not enough arguments for format."); return ly_string2scm (""); } - + SCM arg = scm_car (rest); rest = scm_cdr (rest); int precision = 8; - + if (spec == '$') precision = 2; else if (isdigit (spec)) @@ -487,9 +621,11 @@ LY_DEFINE (ly_format, "ly:format", precision = spec - '0'; spec = format.at (tilde ++); } - + if (spec == 'a' || spec == 'A' || spec == 'f' || spec == '$') results.push_back (format_single_argument (arg, precision)); + else if (spec == 's' || spec == 'S') + results.push_back (format_single_argument (arg, precision, true)); else if (spec == 'l') { SCM s = arg; @@ -502,7 +638,7 @@ LY_DEFINE (ly_format, "ly:format", if (s != SCM_EOL) results.push_back (format_single_argument (s, precision)); - + } } @@ -511,12 +647,12 @@ LY_DEFINE (ly_format, "ly:format", if (scm_is_pair (rest)) programming_error (string (__FUNCTION__) - + ": too many arguments"); + + ": too many arguments"); vsize len = 0; for (vsize i = 0; i < results.size (); i++) len += results[i].size (); - + char *result = (char*) scm_malloc (len + 1); char *ptr = result; for (vsize i = 0; i < results.size (); i++) @@ -525,6 +661,76 @@ LY_DEFINE (ly_format, "ly:format", ptr += results[i].size (); } *ptr = '\0'; - + return scm_take_locale_stringn (result, len); } + +int +ly_run_command (char *argv[], char **standard_output, char **standard_error) +{ + GError *error = 0; + int exit_status = 0; + int flags = G_SPAWN_SEARCH_PATH; + if (!standard_output) + flags |= G_SPAWN_STDOUT_TO_DEV_NULL; + if (!standard_error) + flags |= G_SPAWN_STDERR_TO_DEV_NULL; + if (!g_spawn_sync (0, argv, 0, GSpawnFlags (flags), + 0, 0, + standard_output, standard_error, + &exit_status, &error)) + { + fprintf (stderr, "failed (%d): %s: %s\n", exit_status, argv[0], error->message); + g_error_free (error); + if (!exit_status) + exit_status = -1; + } + + return exit_status; +} + +static char * +ly_scm2utf8 (SCM str) +{ + char *p = ly_scm2str0 (str); + char *g = g_locale_to_utf8 (p, -1, 0, 0, 0); + free (p); + return g; +} + +LY_DEFINE (ly_spawn, "ly:spawn", + 1, 0, 1, (SCM command, SCM rest), + "Simple interface to g_spawn_sync" + " @var{str}." + " The error is formatted with @code{format} and @var{rest}.") + +{ + LY_ASSERT_TYPE (scm_is_string, command, 1); + + int argc = scm_is_pair (rest) ? scm_ilength (rest) : 0; + char **argv = new char*[argc + 2]; + + int n = 0; + argv[n++] = ly_scm2utf8 (command); + for (SCM s = rest; scm_is_pair (s); s = scm_cdr (s)) + argv[n++] = ly_scm2utf8 (scm_car (s)); + argv[n] = 0; + + char *standard_output = 0; + char *standard_error = 0; + int exit_status = be_verbose_global + ? ly_run_command (argv, &standard_output, &standard_error) + : ly_run_command (argv, 0, 0); + + if (be_verbose_global) + { + fprintf (stderr, "\n%s", standard_output); + fprintf (stderr, "%s", standard_error); + } + + for (int i = 0; i < n; i++) + free (argv[i]); + delete[] argv; + + return scm_from_int (exit_status); +} diff --git a/lily/glissando-engraver.cc b/lily/glissando-engraver.cc index 488d22e2f0..26b869dd51 100644 --- a/lily/glissando-engraver.cc +++ b/lily/glissando-engraver.cc @@ -1,14 +1,26 @@ /* - note-head-line-engraver.cc -- implement Note_head_line_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "engraver.hh" #include "international.hh" +#include "pointer-group-interface.hh" #include "rhythmic-head.hh" #include "spanner.hh" #include "stream-event.hh" @@ -24,21 +36,28 @@ public: protected: DECLARE_TRANSLATOR_LISTENER (glissando); - DECLARE_ACKNOWLEDGER (rhythmic_head); + DECLARE_ACKNOWLEDGER (note_column); virtual void finalize (); void stop_translation_timestep (); void process_music (); + private: - Spanner *line_; - Spanner *last_line_; + vector lines_; + vector kill_me_; + bool start_glissandi; + bool stop_glissandi; + Stream_event *event_; + vector note_column_1; + vector note_column_2; }; Glissando_engraver::Glissando_engraver () { - last_line_ = line_ = 0; event_ = 0; + start_glissandi = false; + stop_glissandi = false; } IMPLEMENT_TRANSLATOR_LISTENER (Glissando_engraver, glissando); @@ -52,44 +71,87 @@ void Glissando_engraver::process_music () { if (event_) - line_ = make_spanner ("Glissando", event_->self_scm ()); + start_glissandi = true; } void -Glissando_engraver::acknowledge_rhythmic_head (Grob_info info) +Glissando_engraver::acknowledge_note_column (Grob_info info) { Grob *g = info.grob (); - if (line_) - line_->set_bound (LEFT, g); - - if (last_line_) + if (stop_glissandi) { - last_line_->set_bound (RIGHT, g); - announce_end_grob (last_line_, g->self_scm ()); + extract_grob_set (g, "note-heads", note_heads); + int glissando_index = 0; + for (vsize i=0; i < note_column_1.size (); i++) + { + if (note_column_2[i] >= note_heads.size ()) + { + kill_me_.push_back (lines_[i]); + announce_end_grob (lines_[i], SCM_EOL); + } + else + { + lines_[i]->set_bound (RIGHT, note_heads[note_column_2[i]]); + lines_[i]->set_property ("glissando-index", scm_from_int (glissando_index)); + glissando_index++; + announce_end_grob (lines_[i], note_heads[note_column_2[i]]->self_scm ()); + } + } + lines_.clear (); + note_column_1.clear (); + note_column_2.clear (); + stop_glissandi = false; } + + if (start_glissandi) + { + extract_grob_set (g, "note-heads", note_heads); + SCM map = get_property ("glissandoMap"); + if (map == SCM_EOL) + for (vsize i = 0; i < note_heads.size (); i++) + { + note_column_1.push_back (i); + note_column_2.push_back (i); + } + else + for (SCM m = map; scm_is_pair (m); m = scm_cdr (m)) + { + SCM candidate = scm_car (m); + if (!scm_is_pair (candidate)) + continue; + int n1 = robust_scm2int (scm_car (candidate), -1); + int n2 = robust_scm2int (scm_cdr (candidate), -1); + if (n1 < 0 || n2 < 0 || n1 >= note_heads.size ()) + continue; + note_column_1.push_back (vsize (n1)); + note_column_2.push_back (vsize (n2)); + } + for (vsize i=0; i < note_column_1.size (); i++) + { + lines_.push_back (make_spanner ("Glissando", event_->self_scm ())); + lines_.back ()->set_bound (LEFT, note_heads[note_column_1[i]]); + } + } } void Glissando_engraver::stop_translation_timestep () { - if (last_line_ && last_line_->get_bound (RIGHT)) - { - last_line_ = 0; - } - if (line_) + + if (start_glissandi) { - if (last_line_) + if (stop_glissandi) programming_error ("overwriting glissando"); - last_line_ = line_; + stop_glissandi = true; + start_glissandi = false; } - line_ = 0; event_ = 0; } void Glissando_engraver::finalize () { - if (line_) + if (!lines_.empty ()) { string msg = _ ("unterminated glissando"); @@ -98,12 +160,15 @@ Glissando_engraver::finalize () else warning (msg); - line_->suicide (); - line_ = 0; + for (vsize i=0; i < lines_.size (); i++) + lines_[i]->suicide (); } + + for (vsize i=0; i < kill_me_.size (); i++) + kill_me_[i]->suicide (); } -ADD_ACKNOWLEDGER (Glissando_engraver, rhythmic_head); +ADD_ACKNOWLEDGER (Glissando_engraver, note_column); ADD_TRANSLATOR (Glissando_engraver, /* doc */ "Engrave glissandi.", @@ -112,7 +177,7 @@ ADD_TRANSLATOR (Glissando_engraver, "Glissando ", /* read */ - "", + "glissandoMap ", /* write */ "" diff --git a/lily/global-context-scheme.cc b/lily/global-context-scheme.cc index d672178a54..46bdae7b90 100644 --- a/lily/global-context-scheme.cc +++ b/lily/global-context-scheme.cc @@ -1,9 +1,20 @@ /* - global-context-scheme.cc -- implement Global_context bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "cpu-timer.hh" @@ -24,25 +35,25 @@ LY_DEFINE (ly_format_output, "ly:format-output", " in its final state.") { Global_context *g = dynamic_cast (unsmob_context (context)); - - LY_ASSERT_TYPE (unsmob_global_context, context, 1) + + LY_ASSERT_TYPE (unsmob_global_context, context, 1); SCM output = g->get_output (); progress_indication ("\n"); if (Music_output *od = unsmob_music_output (output)) od->process (); - + return output; } LY_DEFINE (ly_make_global_translator, "ly:make-global-translator", - 1, 0, 0, (SCM global), - "Create a translator group and connect it to the global context" - " @var{global}. The translator group is returned.") + 1, 0, 0, (SCM global), + "Create a translator group and connect it to the global context" + " @var{global}. The translator group is returned.") { Global_context *g = dynamic_cast (unsmob_context (global)); - LY_ASSERT_TYPE (unsmob_global_context, global, 1) + LY_ASSERT_TYPE (unsmob_global_context, global, 1); Translator_group *tg = new Translator_group (); tg->connect_to_context (g); @@ -54,10 +65,10 @@ LY_DEFINE (ly_make_global_translator, "ly:make-global-translator", LY_DEFINE (ly_make_global_context, "ly:make-global-context", 1, 0, 0, (SCM output_def), "Set up a global interpretation context, using the output" - " block @var{output_def}. The context is returned.") + " block @var{output-def}. The context is returned.") { LY_ASSERT_SMOB (Output_def, output_def, 1); - Output_def *odef = unsmob_output_def (output_def); + Output_def *odef = unsmob_output_def (output_def); Global_context *glob = new Global_context (odef); diff --git a/lily/global-context.cc b/lily/global-context.cc index 13d9738cd0..8d4164c4b2 100644 --- a/lily/global-context.cc +++ b/lily/global-context.cc @@ -1,9 +1,20 @@ /* - global-context.cc -- implement Global_context + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "global-context.hh" @@ -189,7 +200,7 @@ Global_context::previous_moment () const } Context * -Global_context::get_default_interpreter () +Global_context::get_default_interpreter (string /* context_id */) { if (get_score_context ()) return get_score_context ()->get_default_interpreter (); diff --git a/lily/global-ctor.cc b/lily/global-ctor.cc index adf15fd614..d3c68da8ac 100644 --- a/lily/global-ctor.cc +++ b/lily/global-ctor.cc @@ -1,9 +1,20 @@ /* - global-ctor.cc -- implement global constructors + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "global-ctor.hh" diff --git a/lily/grace-engraver.cc b/lily/grace-engraver.cc index c377166d63..5055b86807 100644 --- a/lily/grace-engraver.cc +++ b/lily/grace-engraver.cc @@ -1,9 +1,20 @@ /* - grace-engraver.cc -- implement Grace_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -80,10 +91,8 @@ Grace_engraver::consider_change_grace_settings () = scm_cons (scm_cons (c->self_scm (), entry), grace_settings_); } else - { - programming_error ("cannot find context: "); - scm_display (context_name, scm_current_error_port ()); - } + programming_error ("cannot find context from graceSettings: " + + ly_symbol2string (context_name)); } } diff --git a/lily/grace-iterator.cc b/lily/grace-iterator.cc index 3c0e8bb3b4..2ca53ff561 100644 --- a/lily/grace-iterator.cc +++ b/lily/grace-iterator.cc @@ -1,9 +1,20 @@ /* - grace-music.cc -- implement Grace_music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "grace-iterator.hh" diff --git a/lily/grace-music.cc b/lily/grace-music.cc index 3445eab175..13835c8027 100644 --- a/lily/grace-music.cc +++ b/lily/grace-music.cc @@ -1,9 +1,20 @@ /* - grace-music.cc -- implement Grace_music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "music.hh" diff --git a/lily/grace-spacing-engraver.cc b/lily/grace-spacing-engraver.cc index a2a333c782..45c2bb7e7c 100644 --- a/lily/grace-spacing-engraver.cc +++ b/lily/grace-spacing-engraver.cc @@ -1,10 +1,21 @@ /* - grace-spacing-engraver.cc -- implement Grace_spacing_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen - (c) 2006--2009 Han-Wen + 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 . */ #include "engraver.hh" diff --git a/lily/gregorian-ligature-engraver.cc b/lily/gregorian-ligature-engraver.cc index fc2235bd64..fccf35355f 100644 --- a/lily/gregorian-ligature-engraver.cc +++ b/lily/gregorian-ligature-engraver.cc @@ -1,9 +1,20 @@ /* - gregorian-ligature-engraver.cc -- implement Gregorian_ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #include "gregorian-ligature-engraver.hh" diff --git a/lily/gregorian-ligature.cc b/lily/gregorian-ligature.cc index 4c84c89dee..f0606102cb 100644 --- a/lily/gregorian-ligature.cc +++ b/lily/gregorian-ligature.cc @@ -1,9 +1,20 @@ /* - gregorian-ligature.cc -- implement Gregorian_ligature + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Han-Wen Nienhuys - (c) 2003--2009 Han-Wen Nienhuys + 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 . */ #include "gregorian-ligature.hh" diff --git a/lily/grid-line-interface.cc b/lily/grid-line-interface.cc index fd47291580..e942cb0a0e 100644 --- a/lily/grid-line-interface.cc +++ b/lily/grid-line-interface.cc @@ -1,9 +1,20 @@ /* - grid-line-interface.cc -- implement Grid_line_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "grid-line-interface.hh" diff --git a/lily/grid-line-span-engraver.cc b/lily/grid-line-span-engraver.cc index 15ce55a13d..ad80c9ea7e 100644 --- a/lily/grid-line-span-engraver.cc +++ b/lily/grid-line-span-engraver.cc @@ -1,9 +1,20 @@ /* - grid-line-span-engraver.cc -- implement Grid_line_span_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/grid-point-engraver.cc b/lily/grid-point-engraver.cc index 95899aa25a..eb6376e98e 100644 --- a/lily/grid-point-engraver.cc +++ b/lily/grid-point-engraver.cc @@ -1,9 +1,20 @@ /* - grid-line-engraver.cc -- implement Grid_point_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/grob-array-scheme.cc b/lily/grob-array-scheme.cc index 62329e940a..5326626e0e 100644 --- a/lily/grob-array-scheme.cc +++ b/lily/grob-array-scheme.cc @@ -1,10 +1,21 @@ /* - grob-array-scheme.cc -- implement Grob_array bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "grob-array.hh" @@ -31,10 +42,20 @@ LY_DEFINE (ly_grob_array_ref, "ly:grob-array-ref", LY_ASSERT_SMOB (Grob_array, grob_arr, 1); LY_ASSERT_TYPE (scm_is_integer, index, 2); - vsize i = scm_to_unsigned (index); + vsize i = scm_to_uint (index); if (i == VPOS || i >= me->size ()) - scm_out_of_range (NULL, scm_from_unsigned (i)); + scm_out_of_range (NULL, scm_from_unsigned_integer (i)); return me->grob (i)->self_scm (); } +LY_DEFINE (ly_grob_array_2_list, "ly:grob-array->list", + 1, 0, 0, + (SCM grob_arr), + "Return the elements of @var{grob-arr} as a Scheme list.") +{ + Grob_array *me = unsmob_grob_array (grob_arr); + LY_ASSERT_SMOB (Grob_array, grob_arr, 1); + + return grob_array_to_list (me); +} diff --git a/lily/grob-array.cc b/lily/grob-array.cc index 9cf6e39e5f..217ea78aa9 100644 --- a/lily/grob-array.cc +++ b/lily/grob-array.cc @@ -1,9 +1,20 @@ /* - grob-array.cc -- implement Grob_array + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "grob-array.hh" @@ -118,3 +129,16 @@ grob_list_to_grob_array (SCM lst) return arr_scm; } +SCM +grob_array_to_list (Grob_array *array) +{ + SCM list = SCM_EOL; + SCM *tail = &list; + + for (vsize i = 0; i < array->size (); i++) + { + *tail = scm_cons (array->grob (i)->self_scm (), SCM_EOL); + tail = SCM_CDRLOC (*tail); + } + return list; +} diff --git a/lily/grob-info.cc b/lily/grob-info.cc index 68ca9f3880..b710477a8e 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -1,9 +1,20 @@ /* - grob-info.cc -- implement Grob_info + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" @@ -19,6 +30,7 @@ Grob_info::Grob_info (Translator *t, Grob *g) origin_trans_ = t; grob_ = g; start_end_ = START; + rerouting_daddy_context_ = 0; /* assert here, because this is easier to debug. @@ -31,6 +43,7 @@ Grob_info::Grob_info () grob_ = 0; start_end_ = START; origin_trans_ = 0; + rerouting_daddy_context_ = 0; } Stream_event * @@ -83,3 +96,9 @@ Grob_info::ultimate_event_cause () const } return unsmob_stream_event (cause); } + +bool +Grob_info::less (Grob_info i, Grob_info j) +{ + return Grob::less (i.grob (), j.grob ()); +} diff --git a/lily/grob-interface-scheme.cc b/lily/grob-interface-scheme.cc index 0472d5bef6..75755994d3 100644 --- a/lily/grob-interface-scheme.cc +++ b/lily/grob-interface-scheme.cc @@ -1,9 +1,20 @@ /* - grob-interface-scheme.cc -- implement grob interface bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "lily-guile.hh" @@ -27,21 +38,24 @@ internal_add_interface (SCM a, SCM b, SCM c) } LY_DEFINE (ly_add_interface, "ly:add-interface", - 3, 0, 0, (SCM a, SCM b, SCM c), - "Add an interface description.") + 3, 0, 0, (SCM iface, SCM desc, SCM props), + "Add a new grob interface. @var{iface} is the" + " interface name, @var{desc} is the interface" + " description, and @var{props} is the list of" + " user-settable properties for the interface.") { - LY_ASSERT_TYPE (ly_is_symbol, a, 1); - LY_ASSERT_TYPE (scm_is_string, b, 2); - LY_ASSERT_TYPE (ly_is_list, c, 3); + LY_ASSERT_TYPE (ly_is_symbol, iface, 1); + LY_ASSERT_TYPE (scm_is_string, desc, 2); + LY_ASSERT_TYPE (ly_is_list, props, 3); - internal_add_interface (a,b,c); + internal_add_interface (iface, desc, props); return SCM_UNSPECIFIED; } LY_DEFINE (ly_all_grob_interfaces, "ly:all-grob-interfaces", 0, 0, 0, (), - "Get a hash table with all interface descriptions.") + "Return the hash table with all grob interface descriptions.") { return all_ifaces; } diff --git a/lily/grob-interface.cc b/lily/grob-interface.cc index 74cd104d37..2771a8001c 100644 --- a/lily/grob-interface.cc +++ b/lily/grob-interface.cc @@ -1,9 +1,20 @@ /* - grob-interface.cc -- implement graphic objects interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "grob-interface.hh" diff --git a/lily/grob-pq-engraver.cc b/lily/grob-pq-engraver.cc index eee3d7d707..57ba04f9c9 100644 --- a/lily/grob-pq-engraver.cc +++ b/lily/grob-pq-engraver.cc @@ -1,9 +1,20 @@ /* - grob-pq-engraver.cc -- implement Grob_pq_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" diff --git a/lily/grob-property.cc b/lily/grob-property.cc index 55b06d6dfa..f174f7ee01 100644 --- a/lily/grob-property.cc +++ b/lily/grob-property.cc @@ -191,6 +191,26 @@ Grob::internal_get_property (SCM sym) const return val; } +/* Unlike internal_get_property, this function does no caching. Use it, therefore, with caution. */ +SCM +Grob::internal_get_pure_property (SCM sym, int start, int end) const +{ + SCM val = internal_get_property_data (sym); + if (ly_is_procedure (val)) + return call_pure_function (val, scm_list_1 (self_scm ()), start, end); + if (is_simple_closure (val)) + return evaluate_with_simple_closure (self_scm (), + simple_closure_expression (val), + true, start, end); + return val; +} + +SCM +Grob::internal_get_maybe_pure_property (SCM sym, bool pure, int start, int end) const +{ + return pure ? internal_get_pure_property (sym, start, end) : internal_get_property (sym); +} + SCM Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc) { diff --git a/lily/grob-scheme.cc b/lily/grob-scheme.cc index 9c6f238895..9554883464 100644 --- a/lily/grob-scheme.cc +++ b/lily/grob-scheme.cc @@ -1,10 +1,21 @@ /* - grob-scheme.cc -- Scheme entry points for the grob datatype + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "warn.hh" // error () @@ -17,7 +28,8 @@ LY_DEFINE (ly_grob_property_data, "ly:grob-property-data", 2, 0, 0, (SCM grob, SCM sym), - "Retrieve @var{sym} for @var{grob} but don't process callbacks.") + "Return the value for property @var{sym} of @var{grob}," + " but do not process callbacks.") { Grob *sc = unsmob_grob (grob); @@ -44,23 +56,43 @@ LY_DEFINE (ly_grob_set_property_x, "ly:grob-set-property!", return SCM_UNSPECIFIED; } +LY_DEFINE (ly_grob_set_nested_property_x, "ly:grob-set-nested-property!", + 3, 0, 0, (SCM grob, SCM symlist, SCM val), + "Set nested property @var{symlist} in grob @var{grob} to value @var{val}.") +{ + Grob *sc = unsmob_grob (grob); + + LY_ASSERT_SMOB (Grob, grob, 1); + + bool type_ok = ly_cheap_is_list (symlist); + + if (type_ok) + for (SCM s = symlist; scm_is_pair (s) && type_ok; s = scm_cdr (s)) + type_ok &= ly_is_symbol (scm_car (s)); + + SCM_ASSERT_TYPE (type_ok, symlist, SCM_ARG2, __FUNCTION__, "list of symbols"); + + set_nested_property (sc, symlist, val); + return SCM_UNSPECIFIED; +} + + LY_DEFINE (ly_grob_property, "ly:grob-property", - 2, 1, 0, (SCM grob, SCM sym, SCM deflt), - "Return the value of a value in grob@tie{}@var{g} of property" - " @var{sym}. It returns @code{'()} (end-of-list) or" - " @var{deflt} (if specified) if @var{sym} is undefined" - " in@tie{}@var{g}.") + 2, 1, 0, (SCM grob, SCM sym, SCM val), + "Return the value for property @var{sym} of @var{grob}." + " If no value is found, return @var{val} or @code{'()}" + " if @var{val} is not specified.") { Grob *sc = unsmob_grob (grob); - + LY_ASSERT_SMOB (Grob, grob, 1); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); - if (deflt == SCM_UNDEFINED) - deflt = SCM_EOL; + if (val == SCM_UNDEFINED) + val = SCM_EOL; SCM retval = sc->internal_get_property (sym); if (retval == SCM_EOL) - retval = deflt; + retval = val; return retval; } @@ -79,9 +111,9 @@ LY_DEFINE (ly_grob_interfaces, "ly:grob-interfaces", LY_DEFINE (ly_grob_object, "ly:grob-object", 2, 0, 0, (SCM grob, SCM sym), - "Return the value of a pointer in grob@tie{}@var{g} of property" + "Return the value of a pointer in grob @var{grob} of property" " @var{sym}. It returns @code{'()} (end-of-list) if @var{sym}" - " is undefined in@tie{}@var{g}.") + " is undefined in @var{grob}.") { Grob *sc = unsmob_grob (grob); @@ -92,6 +124,18 @@ LY_DEFINE (ly_grob_object, "ly:grob-object", } +LY_DEFINE (ly_grob_set_object_x, "ly:grob-set-object!", + 3, 0, 0, (SCM grob, SCM sym, SCM val), + "Set @var{sym} in grob @var{grob} to value @var{val}.") +{ + Grob *sc = unsmob_grob (grob); + + LY_ASSERT_SMOB (Grob, grob, 1); + LY_ASSERT_TYPE (ly_is_symbol, sym, 2); + + sc->set_object (sym, val); + return SCM_UNSPECIFIED; +} /* TODO: make difference between scaled and unscalead variable in calling (i.e different funcs.) */ @@ -214,6 +258,22 @@ LY_DEFINE (ly_grob_parent, "ly:grob-parent", return par ? par->self_scm () : SCM_EOL; } +LY_DEFINE (ly_grob_set_parent_x, "ly:grob-set-parent!", + 3, 0, 0, (SCM grob, SCM axis, SCM parent_grob), + "Set @var{parent-grob} the parent of grob @var{grob} in axis @var{axis}.") +{ + Grob *gr = unsmob_grob (grob); + Grob *parent = unsmob_grob (parent_grob); + + LY_ASSERT_SMOB (Grob, grob, 1); + LY_ASSERT_TYPE (is_axis, axis, 2); + LY_ASSERT_SMOB (Grob, parent_grob, 3); + + Axis a = Axis (scm_to_int (axis)); + gr->set_parent (parent, a); + return SCM_UNSPECIFIED; +} + LY_DEFINE (ly_grob_properties, "ly:grob-properties", 1, 0, 0, (SCM grob), "Get the mutable properties of @var{grob}.") @@ -277,7 +337,7 @@ LY_DEFINE (ly_grob_suicide_x, "ly:grob-suicide!", LY_DEFINE (ly_grob_translate_axis_x, "ly:grob-translate-axis!", 3, 0, 0, (SCM grob, SCM d, SCM a), - "Translate @var{g} on axis@tie{}@var{a} over" + "Translate @var{grob} on axis@tie{}@var{a} over" " distance@tie{}@var{d}.") { Grob *me = unsmob_grob (grob); @@ -292,7 +352,7 @@ LY_DEFINE (ly_grob_translate_axis_x, "ly:grob-translate-axis!", LY_DEFINE (ly_grob_default_font, "ly:grob-default-font", 1, 0, 0, (SCM grob), - "Return the default font for grob @var{gr}.") + "Return the default font for grob @var{grob}.") { Grob *gr = unsmob_grob (grob); @@ -342,3 +402,20 @@ LY_DEFINE (ly_grob_common_refpoint_of_array, "ly:grob-common-refpoint-of-array", Grob *refp = common_refpoint_of_array (ga->array (), gr, Axis (scm_to_int (axis))); return refp ? refp->self_scm () : SCM_BOOL_F; } + +LY_DEFINE (ly_grob_chain_callback, "ly:grob-chain-callback", + 3, 0, 0, (SCM grob, SCM proc, SCM sym), + "Find the callback that is stored as property" + " @var{sym} of grob @var{grob} and chain @var{proc}" + " to the head of this, meaning that it is called" + " using @var{grob} and the previous callback's result.") +{ + Grob *gr = unsmob_grob (grob); + + LY_ASSERT_SMOB (Grob, grob, 1); + LY_ASSERT_TYPE (ly_is_procedure, proc, 2); + LY_ASSERT_TYPE (ly_is_symbol, sym, 3); + + chain_callback (gr, proc, sym); + return SCM_UNSPECIFIED; +} diff --git a/lily/grob-smob.cc b/lily/grob-smob.cc index 4cdccf63cf..edebcbe95e 100644 --- a/lily/grob-smob.cc +++ b/lily/grob-smob.cc @@ -1,9 +1,20 @@ /* - grob-smob.cc -- implement GROB smob routines. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "grob.hh" diff --git a/lily/grob.cc b/lily/grob.cc index a3f41a856d..c613effccc 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -1,9 +1,20 @@ /* - grob.cc -- implement Grob + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "grob.hh" @@ -11,6 +22,7 @@ #include #include "align-interface.hh" +#include "axis-group-interface.hh" #include "input.hh" #include "international.hh" #include "item.hh" @@ -19,6 +31,7 @@ #include "music.hh" #include "output-def.hh" #include "pointer-group-interface.hh" +#include "program-option.hh" #include "stencil.hh" #include "stream-event.hh" #include "system.hh" @@ -110,7 +123,9 @@ Grob::get_print_stencil () const if (Stencil *m = unsmob_stencil (stil)) { retval = *m; - if (to_boolean (get_property ("transparent"))) + bool transparent = to_boolean (get_property ("transparent")); + + if (transparent) retval = Stencil (m->extent_box (), SCM_EOL); else { @@ -142,6 +157,16 @@ Grob::get_print_stencil () const retval = Stencil (retval.extent_box (), expr); } + /* process whiteout */ + /* a grob has to be visible, otherwise the whiteout property has no effect */ + if (!transparent && to_boolean (get_property ("whiteout"))) + { + /* Call the scheme procedure stencil-whiteout in scm/stencils.scm */ + /* to add a round-filled-box stencil to the stencil list */ + retval + = *unsmob_stencil (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"), + retval.smobbed_copy())); + } } return retval; @@ -166,6 +191,16 @@ Grob::get_system () const return 0; } +/* This version of get_system is more reliable than this->get_system () + before line-breaking has been done, at which point there is only + one system in the whole score and we can find it just by following + parent pointers. */ +System * +Grob::get_system(Grob *me) +{ + Grob *p = me->get_parent (X_AXIS); + return p ? get_system (p) : dynamic_cast(me); +} void Grob::handle_broken_dependencies () @@ -426,10 +461,7 @@ Grob::extent (Grob *refp, Axis a) const Interval Grob::pure_height (Grob *refp, int start, int end) { - SCM proc = get_property_data (ly_symbol2scm ("Y-extent")); - SCM iv_scm = call_pure_function (proc, - scm_list_1 (self_scm ()), - start, end); + SCM iv_scm = get_pure_property ("Y-extent", start, end); Interval iv = robust_scm2interval (iv_scm, Interval (0, 0)); Real offset = pure_relative_y_coordinate (refp, start, end); @@ -460,6 +492,19 @@ Grob::spanned_rank_interval () const return Interval_t (-1, 0); } +bool +Grob::pure_is_visible (int /* start */, int /* end */) const +{ + return true; +} + +/* Sort grobs according to their starting column. */ +bool +Grob::less (Grob *g1, Grob *g2) +{ + return g1->spanned_rank_interval ()[LEFT] < g2->spanned_rank_interval ()[LEFT]; +} + /**************************************************************** REFPOINTS ****************************************************************/ @@ -533,6 +578,9 @@ Grob::fixup_refpoint () void Grob::warning (string s) const { + if (get_program_option ("warning-as-error")) + error (s); + SCM cause = self_scm (); while (Grob *g = unsmob_grob (cause)) cause = g->get_property ("cause"); @@ -559,6 +607,9 @@ Grob::name () const void Grob::programming_error (string s) const { + if (get_program_option ("warning-as-error")) + error (s); + SCM cause = self_scm (); while (Grob *g = unsmob_grob (cause)) cause = g->get_property ("cause"); @@ -569,7 +620,7 @@ Grob::programming_error (string s) const if (Music *m = unsmob_music (cause)) m->origin ()->message (s); else if (Stream_event *ev = unsmob_stream_event (cause)) - ev->origin ()->warning (s); + ev->origin ()->message (s); else ::message (s); } @@ -606,8 +657,8 @@ ADD_INTERFACE (Grob, " properties are variables that are specific to one grob." " Typically, lists of other objects, or results from" " computations are stored in mutable properties. In" - " particular, every call to @code{set-grob-property} (or its" - " C++ equivalent) sets a mutable property.\n" + " particular, every call to @code{ly:grob-set-property!}" + " (or its C++ equivalent) sets a mutable property.\n" "\n" "The properties @code{after-line-breaking} and" " @code{before-line-breaking} are dummies that are not" @@ -643,6 +694,7 @@ ADD_INTERFACE (Grob, "staff-symbol " "stencil " "transparent " + "whiteout " ); /**************************************************************** @@ -740,3 +792,18 @@ robust_relative_extent (Grob *me, Grob *refpoint, Axis a) return ext; } +// Checks whether there is a vertical alignment in the chain of +// parents between this and commony. +bool +Grob::check_cross_staff (Grob *commony) +{ + if (Align_interface::has_interface (commony)) + return true; + + for (Grob *g = this; g && g != commony; g = g->get_parent (Y_AXIS)) + if (Align_interface::has_interface (g)) + return true; + + return false; +} + diff --git a/lily/guile-init.cc b/lily/guile-init.cc index 6c2422e76b..5f1bb6e27f 100644 --- a/lily/guile-init.cc +++ b/lily/guile-init.cc @@ -1,10 +1,21 @@ -/* - guile-init.cc -- implement GUILE init routines. - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #include "lily-guile.hh" diff --git a/lily/hairpin.cc b/lily/hairpin.cc index e5dea58244..399b5d995e 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -1,9 +1,20 @@ /* - hairpin.cc -- implement Hairpin + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "hairpin.hh" @@ -20,48 +31,27 @@ #include "note-column.hh" #include "warn.hh" -MAKE_SCHEME_CALLBACK (Hairpin, after_line_breaking, 1); +MAKE_SCHEME_CALLBACK (Hairpin, pure_height, 3); SCM -Hairpin::after_line_breaking (SCM smob) +Hairpin::pure_height (SCM smob, SCM, SCM) { - Spanner *me = dynamic_cast (unsmob_grob (smob)); - consider_suicide (me); + Grob *me = unsmob_grob (smob); + Real height = robust_scm2double (me->get_property ("height"), 0.0) + * Staff_symbol_referencer::staff_space (me); - return SCM_UNSPECIFIED; -} + Real thickness = robust_scm2double (me->get_property ("thickness"), 1) + * Staff_symbol_referencer::line_thickness (me); -void -Hairpin::consider_suicide (Spanner*me) -{ - Drul_array broken; - Drul_array bounds; - Direction d = LEFT; - do - { - bounds[d] = me->get_bound (d); - broken[d] = bounds[d]->break_status_dir () != CENTER; - } - while (flip (&d) != LEFT); - - if (broken[LEFT] - && ly_is_equal (bounds[RIGHT]->get_column ()->get_property ("when"), - bounds[LEFT]->get_property ("when"))) - me->suicide (); + height += thickness / 2; + return ly_interval2scm (Interval (-height, height)); } MAKE_SCHEME_CALLBACK (Hairpin, print, 1); - SCM Hairpin::print (SCM smob) { - Spanner *me = dynamic_cast (unsmob_grob (smob)); + Spanner *me = unsmob_spanner (smob); - if (Spanner *orig = dynamic_cast (me->original ())) - { - for (vsize i = 0; i < orig->broken_intos_.size (); i++) - Hairpin::consider_suicide (orig->broken_intos_[i]); - } - SCM s = me->get_property ("grow-direction"); if (!is_direction (s)) { @@ -84,7 +74,7 @@ Hairpin::print (SCM smob) broken[RIGHT] = broken[RIGHT] && me->broken_neighbor (RIGHT); broken[RIGHT] = broken[RIGHT] && me->broken_neighbor (RIGHT)->is_live (); - + if (broken[RIGHT]) { Spanner *next = me->broken_neighbor (RIGHT); @@ -100,8 +90,8 @@ Hairpin::print (SCM smob) Use the height and thickness of the hairpin when making a circled tip */ bool circled_tip = ly_scm2bool (me->get_property ("circled-tip")); - Real height = robust_scm2double (me->get_property ("height"), 0.2) * - Staff_symbol_referencer::staff_space (me); + Real height = robust_scm2double (me->get_property ("height"), 0.2) + * Staff_symbol_referencer::staff_space (me); /* FIXME: 0.525 is still just a guess... */ @@ -109,7 +99,7 @@ Hairpin::print (SCM smob) Real thick = 1.0; if (circled_tip) thick = robust_scm2double (me->get_property ("thickness"), 1.0) - * Staff_symbol_referencer::line_thickness (me); + * Staff_symbol_referencer::line_thickness (me); do { @@ -131,37 +121,47 @@ Hairpin::print (SCM smob) else { bool neighbor_found = false; - extract_grob_set (me, "adjacent-hairpins", pins); - for (vsize i = 0; i < pins.size (); i++) + Spanner *adjacent; + extract_grob_set (me, "adjacent-spanners", neighbors); + for (vsize i = 0; i < neighbors.size (); i++) { /* FIXME: this will fuck up in case of polyphonic notes in other voices. Need to look at note-columns in the current staff/voice. */ - - Spanner *pin = dynamic_cast (pins[i]); - if (pin - && (pin->get_bound (LEFT)->get_column () == b->get_column () - || pin->get_bound (RIGHT)->get_column () == b->get_column ())) - neighbor_found = true; + adjacent = dynamic_cast (neighbors[i]); + if (adjacent + && (adjacent->get_bound (-d)->get_column () + == b->get_column ())) + { + neighbor_found = true; + break; + } } Interval e = robust_relative_extent (b, common, X_AXIS); if (neighbor_found) { - /* - Handle back-to-back hairpins with a circle in the middle - */ - if (circled_tip && (grow_dir != d)) - x_points[d] = e.center () + d * (rad - thick / 2.0); - /* - If we're hung on a paper column, that means we're not - adjacent to a text-dynamic, and we may move closer. We - make the padding a little smaller, here. - */ + if (Hairpin::has_interface (adjacent)) + { + /* + Handle back-to-back hairpins with a circle in the middle + */ + if (circled_tip && (grow_dir != d)) + x_points[d] = e.center () + d * (rad - thick / 2.0); + /* + If we're hung on a paper column, that means we're not + adjacent to a text-dynamic, and we may move closer. We + make the padding a little smaller, here. + */ + else + x_points[d] = e.center () - d * padding / 3; + } + // Our neighbor is a dynamic text spanner, so add the + // same amount of padding as for text dynamics else - x_points[d] = e.center () - d * padding / 3; + x_points[d] = e[-d] - d * padding; } else { @@ -170,10 +170,10 @@ Hairpin::print (SCM smob) x_points[d] = e[-d]; else x_points[d] = e[d]; - + Item *bound = me->get_bound (d); if (bound->is_non_musical (bound)) - x_points[d] -= d * padding; + x_points[d] -= d * padding; } } } @@ -232,16 +232,16 @@ Hairpin::print (SCM smob) if (circled_tip) { Box extent (Interval (-rad, rad), Interval (-rad, rad)); - + /* Hmmm, perhaps we should have a Lookup::circle () method? */ Stencil circle (extent, - scm_list_4 (ly_symbol2scm ("circle"), - scm_from_double (rad), - scm_from_double (thick), - SCM_BOOL_F)); + scm_list_4 (ly_symbol2scm ("circle"), + scm_from_double (rad), + scm_from_double (thick), + SCM_BOOL_F)); /* - don't add another circle the hairpin is broken + don't add another circle if the hairpin is broken */ if (!broken[tip_dir]) mol.add_at_edge (X_AXIS, tip_dir, Stencil (circle), 0); @@ -257,7 +257,7 @@ ADD_INTERFACE (Hairpin, "A hairpin crescendo or decrescendo.", /* properties */ - "adjacent-hairpins " + "adjacent-spanners " "circled-tip " "bound-padding " "grow-direction " diff --git a/lily/hara-kiri-engraver.cc b/lily/hara-kiri-engraver.cc index 9724d105fb..b8cd0cb9da 100644 --- a/lily/hara-kiri-engraver.cc +++ b/lily/hara-kiri-engraver.cc @@ -1,9 +1,20 @@ /* - hara-kiri-engraver.cc -- implement Hara_kiri_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "axis-group-engraver.hh" diff --git a/lily/hara-kiri-group-spanner.cc b/lily/hara-kiri-group-spanner.cc index acd65da2f1..c32735aa8e 100644 --- a/lily/hara-kiri-group-spanner.cc +++ b/lily/hara-kiri-group-spanner.cc @@ -1,10 +1,21 @@ /* - hara-kiri-vertical-group-spanner.cc -- implement Hara_kiri_group_spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "hara-kiri-group-spanner.hh" @@ -65,6 +76,20 @@ bool find_in_range (SCM vector, int low, int hi, int min, int max) bool Hara_kiri_group_spanner::request_suicide (Grob *me, int start, int end) +{ + if (!request_suicide_alone (me, start, end)) + return false; + + extract_grob_set (me, "keep-alive-with", friends); + for (vsize i = 0; i < friends.size (); ++i) + if (friends[i]->is_live () && !request_suicide_alone (friends[i], start, end)) + return false; + + return true; +} + +bool +Hara_kiri_group_spanner::request_suicide_alone (Grob *me, int start, int end) { if (!to_boolean (me->get_property ("remove-empty"))) return false; @@ -161,6 +186,7 @@ ADD_INTERFACE (Hara_kiri_group_spanner, /* properties */ "items-worth-living " "important-column-ranks " + "keep-alive-with " "remove-empty " "remove-first " ); diff --git a/lily/horizontal-bracket-engraver.cc b/lily/horizontal-bracket-engraver.cc index 52ec11e1d7..9d5c00503d 100644 --- a/lily/horizontal-bracket-engraver.cc +++ b/lily/horizontal-bracket-engraver.cc @@ -1,20 +1,30 @@ /* - horizontal-bracket-engraver.cc -- implement - Horizontal_bracket_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #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" @@ -22,8 +32,8 @@ class Horizontal_bracket_engraver : public Engraver { public: TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver); - vector bracket_stack_; - vector events_; + vector bracket_stack_; + vector events_; vsize pop_count_; vsize push_count_; @@ -33,22 +43,6 @@ public: 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; @@ -107,10 +101,26 @@ Horizontal_bracket_engraver::process_music () 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 */ + "" + ); diff --git a/lily/horizontal-bracket.cc b/lily/horizontal-bracket.cc index c5594359a1..f7a0337a3b 100644 --- a/lily/horizontal-bracket.cc +++ b/lily/horizontal-bracket.cc @@ -1,9 +1,20 @@ /* - horizontal-bracket.cc -- implement Horizontal_bracket + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "horizontal-bracket.hh" diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc index 3a1684491b..55696e9315 100644 --- a/lily/hyphen-engraver.cc +++ b/lily/hyphen-engraver.cc @@ -1,11 +1,22 @@ /* - hyphen-engraver.cc -- implement Hyphen_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1999--2009 Glen Prideaux , + Copyright (C) 1999--2011 Glen Prideaux , Han-Wen Nienhuys , Jan Nieuwenhuizen + + 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 . */ #include "engraver.hh" @@ -52,13 +63,13 @@ void Hyphen_engraver::acknowledge_lyric_syllable (Grob_info i) { Item *item = i.item (); - + if (!hyphen_) hyphen_ = make_spanner ("LyricSpace", item->self_scm ()); if (hyphen_) hyphen_->set_bound (LEFT, item); - + if (finished_hyphen_) finished_hyphen_->set_bound (RIGHT, item); } @@ -126,7 +137,7 @@ Hyphen_engraver::stop_translation_timestep () finished_hyphen_ = 0; finished_ev_ = 0; } - + if (finished_hyphen_ && hyphen_) { programming_error ("hyphen not finished yet"); @@ -139,7 +150,7 @@ Hyphen_engraver::stop_translation_timestep () finished_hyphen_ = hyphen_; finished_ev_ = ev_; } - + hyphen_ = 0; ev_ = 0; } diff --git a/lily/identifier-smob.cc b/lily/identifier-smob.cc index 0b0460c1ff..d0e9f6e473 100644 --- a/lily/identifier-smob.cc +++ b/lily/identifier-smob.cc @@ -1,10 +1,20 @@ /* - identifier-smob.cc -- implement glue to pass Scheme expressions off as - identifiers. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "identifier-smob.hh" diff --git a/lily/includable-lexer.cc b/lily/includable-lexer.cc index 2eb5df5cb3..4c6766c7fd 100644 --- a/lily/includable-lexer.cc +++ b/lily/includable-lexer.cc @@ -1,9 +1,20 @@ /* - includable-lexer.cc -- implement Includable_lexer + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "includable-lexer.hh" @@ -110,6 +121,12 @@ Includable_lexer::new_input (string name, string data, Sources *sources) yy_switch_to_buffer (yy_create_buffer (file->get_istream (), YY_BUF_SIZE)); } +void +Includable_lexer::add_string_include (string data) +{ + pending_string_includes_.push_back (data); +} + /** pop the inputstack. conceptually this is a destructor, but it does not destruct the Source_file that Includable_lexer::new_input creates. */ diff --git a/lily/include/accidental-interface.hh b/lily/include/accidental-interface.hh index 0764fb7f34..c3e6f51667 100644 --- a/lily/include/accidental-interface.hh +++ b/lily/include/accidental-interface.hh @@ -1,9 +1,20 @@ /* - accidental-interface.hh -- declare Accidental_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #ifndef ACCIDENTAL_INTERFACE_HH diff --git a/lily/include/accidental-placement.hh b/lily/include/accidental-placement.hh index d5dd0c7c82..6f9696ef5e 100644 --- a/lily/include/accidental-placement.hh +++ b/lily/include/accidental-placement.hh @@ -1,9 +1,20 @@ /* - accidental-placement.hh -- declare Accidental_placement + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #ifndef ACCIDENTAL_PLACEMENT_HH diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh index 149ef321c1..0cc63b2ad1 100644 --- a/lily/include/align-interface.hh +++ b/lily/include/align-interface.hh @@ -1,9 +1,20 @@ /* - align-interface.hh -- declare Align_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef ALIGN_INTERFACE_HH @@ -13,17 +24,17 @@ #include "std-vector.hh" #include "grob-interface.hh" -struct Align_interface +class Align_interface { - DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); - DECLARE_SCHEME_CALLBACK (stretch_after_break, (SCM element)); - DECLARE_SCHEME_CALLBACK (calc_max_stretch, (SCM)); - static void stretch (Grob *, Real amount, Axis a); - static void align_elements_to_extents (Grob *, Axis a); - static vector get_extents_aligned_translates (Grob *, vector const&, - Axis a, - bool safe, int start, int end); - static int stretchable_children_count (Grob const*); +public: + DECLARE_SCHEME_CALLBACK (align_to_minimum_distances, (SCM)); + DECLARE_SCHEME_CALLBACK (align_to_ideal_distances, (SCM)); + static void align_elements_to_minimum_distances(Grob *, Axis a); + static void align_elements_to_ideal_distances(Grob *); + static vector get_minimum_translations (Grob *, vector const&, Axis a); + static vector get_minimum_translations_without_min_dist (Grob *, vector const&, Axis a); + static vector get_pure_minimum_translations (Grob *, vector const&, + Axis a, int start, int end); static void set_ordered (Grob *); static Axis axis (Grob *); static void add_element (Grob *, Grob *); @@ -32,6 +43,12 @@ struct Align_interface DECLARE_GROB_INTERFACE(); static Real get_pure_child_y_translation (Grob *, Grob *child, int start, int end); + +protected: + static vector internal_get_minimum_translations (Grob *, vector const&, + Axis a, + bool include_fixed_spacing, + bool pure, int start, int end); }; #endif /* ALIGN_INTERFACE_HH */ diff --git a/lily/include/all-font-metrics.hh b/lily/include/all-font-metrics.hh index 184e4751d5..d170e818a7 100644 --- a/lily/include/all-font-metrics.hh +++ b/lily/include/all-font-metrics.hh @@ -1,9 +1,20 @@ /* - all-fonts.hh -- declare All_font_metrics + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #ifndef ALL_FONTS_HH diff --git a/lily/include/ambitus.hh b/lily/include/ambitus.hh deleted file mode 100644 index dc8d3c9bfd..0000000000 --- a/lily/include/ambitus.hh +++ /dev/null @@ -1,24 +0,0 @@ -/* - ambitus.hh - - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Juergen Reuter -*/ - -#ifndef AMBITUS_HH -#define AMBITUS_HH - -#include "lily-proto.hh" -#include "grob-interface.hh" - -struct Ambitus -{ - DECLARE_SCHEME_CALLBACK (print, (SCM smob)); - DECLARE_GROB_INTERFACE(); - static Slice get_positions (Grob *); - static Interval head_width (Grob *me, Grob *common); -}; - -#endif // AMBITUS_HH - diff --git a/lily/include/arpeggio.hh b/lily/include/arpeggio.hh index a7a01dde6c..094afe687b 100644 --- a/lily/include/arpeggio.hh +++ b/lily/include/arpeggio.hh @@ -1,9 +1,20 @@ /* - arpegio.hh -- declare Arpeggio + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #ifndef ARPEGGIO_HH @@ -22,7 +33,6 @@ public: DECLARE_SCHEME_CALLBACK (brew_chord_bracket, (SCM)); DECLARE_SCHEME_CALLBACK (brew_chord_slur, (SCM)); DECLARE_SCHEME_CALLBACK (width, (SCM)); - DECLARE_SCHEME_CALLBACK (height, (SCM)); DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM)); DECLARE_GROB_INTERFACE(); }; diff --git a/lily/include/articulations.hh b/lily/include/articulations.hh new file mode 100644 index 0000000000..f30c3bfac7 --- /dev/null +++ b/lily/include/articulations.hh @@ -0,0 +1,31 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Carl Sorensen + + 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 . +*/ + +#ifndef ARTICULATIONS_HH +#define ARTICULATIONS_HH + +#include "lily-guile.hh" +#include "stream-event.hh" + +SCM articulation_list (vector notes, + vector articulations, + char const *articulation_name); + +#endif /* ARTICULATIONS_HH */ + diff --git a/lily/include/audio-column.hh b/lily/include/audio-column.hh index 60cc824aa3..4f51d8c00c 100644 --- a/lily/include/audio-column.hh +++ b/lily/include/audio-column.hh @@ -1,7 +1,20 @@ /* - audio-column.hh -- declare Audio_column + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef AUDIO_COLUMN_HH diff --git a/lily/include/audio-element-info.hh b/lily/include/audio-element-info.hh index 6222db2587..9f58f4ea0d 100644 --- a/lily/include/audio-element-info.hh +++ b/lily/include/audio-element-info.hh @@ -1,9 +1,20 @@ /* - audio-item-info.hh -- declare Audio_item_info + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef AUDIO_ITEM_INFO_HH diff --git a/lily/include/audio-element.hh b/lily/include/audio-element.hh index 54d6c7db72..fac2068773 100644 --- a/lily/include/audio-element.hh +++ b/lily/include/audio-element.hh @@ -1,9 +1,20 @@ /* - audio-element.hh -- declare Audio_element + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef AUDIO_ELEMENT_HH diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 0fc59fd960..da0abbce38 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -1,7 +1,20 @@ /* - audio-item.hh -- declare Audio_items + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Jan Nieuwenhuizen + Copyright (C) 1996--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef AUDIO_ITEM_HH @@ -14,8 +27,10 @@ class Audio_item : public Audio_element { public: - Audio_item (); Audio_column *audio_column_; + int channel_; + + Audio_item (); Audio_column *get_column () const; virtual void render (); @@ -31,6 +46,7 @@ public: Audio_dynamic (); Real volume_; + bool silent_; }; class Audio_span_dynamic : public Audio_element @@ -68,11 +84,13 @@ class Audio_note : public Audio_item public: Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposition); - void tie_to (Audio_note *); + // with tieWaitForNote, there might be a skip between the tied notes! + void tie_to (Audio_note *, Moment skip = 0); Pitch pitch_; Moment length_mom_; Pitch transposing_; + Audio_dynamic* dynamic_; Audio_note *tied_; bool tie_event_; diff --git a/lily/include/audio-staff.hh b/lily/include/audio-staff.hh index d3e29e80bc..665593edd6 100644 --- a/lily/include/audio-staff.hh +++ b/lily/include/audio-staff.hh @@ -1,7 +1,20 @@ /* - audio-staff.hh -- declare Audio_staff + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Jan Nieuwenhuizen + Copyright (C) 1996--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef AUDIO_STAFF_HH @@ -13,13 +26,14 @@ struct Audio_staff : public Audio_element { - void add_audio_item (Audio_item *l); - void output (Midi_stream &midi_stream_r, int track); + void add_audio_item (Audio_item *ai); + void output (Midi_stream &midi_stream_r, int track, bool port); Audio_staff (); + bool percussion_; + bool merge_unisons_; vector audio_items_; - int channel_; }; #endif // AUDIO_STAFF_HH diff --git a/lily/include/axis-group-engraver.hh b/lily/include/axis-group-engraver.hh index fa9e3c91d9..2f63de076c 100644 --- a/lily/include/axis-group-engraver.hh +++ b/lily/include/axis-group-engraver.hh @@ -1,9 +1,20 @@ /* - axis-group-engraver.hh -- declare Axis_group_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef AXIS_GROUP_ENGRAVER_HH @@ -26,6 +37,8 @@ protected: void process_acknowledged (); virtual Spanner *get_spanner (); virtual void add_element (Grob *); + virtual bool must_be_last () const; + public: TRANSLATOR_DECLARATIONS (Axis_group_engraver); }; diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index 6dd2e7b95c..fa66202096 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -1,9 +1,20 @@ /* - axis-group-interface.hh -- declare Axis_group_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef AXIS_GROUP_INTERFACE_HH @@ -25,15 +36,23 @@ struct Axis_group_interface DECLARE_SCHEME_CALLBACK (pure_height, (SCM smob, SCM start, SCM end)); DECLARE_SCHEME_CALLBACK (calc_skylines, (SCM smob)); DECLARE_SCHEME_CALLBACK (combine_skylines, (SCM smob)); - DECLARE_SCHEME_CALLBACK (calc_max_stretch, (SCM smob)); DECLARE_SCHEME_CALLBACK (print, (SCM smob)); DECLARE_SCHEME_CALLBACK (adjacent_pure_heights, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_staff_staff_spacing, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_pure_staff_staff_spacing, (SCM, SCM, SCM)); + DECLARE_SCHEME_CALLBACK (calc_pure_relevant_grobs, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_pure_relevant_items, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_pure_relevant_spanners, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_pure_y_common, (SCM)); static Interval relative_group_extent (vector const &list, Grob *common, Axis); static Interval relative_pure_height (Grob *me, int start, int end); - static Interval cached_pure_height (Grob *me, int, int); + static Interval combine_pure_heights (Grob *me, SCM, int, int); + static Interval sum_partial_pure_heights (Grob *me, int, int); + static Interval begin_of_line_pure_height (Grob *me, int); + 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 Grob *calc_pure_elts_and_common (Grob*); static Skyline_pair skyline_spacing (Grob *me, vector elements); static void add_element (Grob *me, Grob *); static void set_axes (Grob *, Axis, Axis); @@ -41,6 +60,8 @@ struct Axis_group_interface static void get_children (Grob *, vector *); static Interval staff_extent (Grob *me, Grob *ref, Axis, Grob *staff, Axis); static SCM calc_common (Grob *, Axis); + static Real minimum_distance (Grob*, Grob*, Axis); + static SCM calc_maybe_pure_staff_staff_spacing (Grob*, bool, int, int); DECLARE_GROB_INTERFACE(); }; diff --git a/lily/include/bar-line.hh b/lily/include/bar-line.hh index 51e6f9c005..442fe27770 100644 --- a/lily/include/bar-line.hh +++ b/lily/include/bar-line.hh @@ -1,11 +1,24 @@ /* - bar.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ -#ifndef BAR_HH -#define BAR_HH +#ifndef BAR_LINE_HH +#define BAR_LINE_HH #include "lily-proto.hh" #include "grob-interface.hh" @@ -15,15 +28,17 @@ class Bar_line public: DECLARE_GROB_INTERFACE(); - static Stencil dashed_bar_line (Grob *me, Real h, Real thick); + static Stencil dashed_bar_line (Grob *me, Interval const &extent, Real thick); static Stencil tick_bar_line (Grob *me, Real h, bool rounded); - static Stencil compound_barline (Grob *, string, Real height, bool rounded); - static Stencil simple_barline (Grob *, Real wid, Real height, bool rounded); + static Stencil compound_barline (Grob *, string, Interval const &extent, + bool rounded); + static Stencil simple_barline (Grob *, Real wid, Interval const &extent, + bool rounded); static Interval bar_y_extent (Grob *, Grob *); + static bool non_empty_barline (Grob *me); + DECLARE_SCHEME_CALLBACK (calc_bar_extent, (SCM)); - DECLARE_SCHEME_CALLBACK (calc_bar_size, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_anchor, (SCM)); }; -#endif // BAR_HH - +#endif // BAR_LINE_HH diff --git a/lily/include/bar.hh b/lily/include/bar.hh deleted file mode 100644 index fc62f6525e..0000000000 --- a/lily/include/bar.hh +++ /dev/null @@ -1,28 +0,0 @@ -/* - bar.hh -- part of GNU LilyPond - - (c) 1996--2009 Han-Wen Nienhuys -*/ - -#ifndef BAR_HH -#define BAR_HH - -#include "lily-proto.hh" -#include "grob-interface.hh" - -/** - A vertical bar. -*/ -class Bar -{ -public: - DECLARE_GROB_INTERFACE(); - - static Stencil compound_barline (Grob *, string, Real height); - static Stencil simple_barline (Grob *, Real wid, Real height); - DECLARE_SCHEME_CALLBACK (get_staff_bar_size, (SCM)); - DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM)); -}; -#endif // BAR_HH - diff --git a/lily/include/beam-scoring-problem.hh b/lily/include/beam-scoring-problem.hh new file mode 100644 index 0000000000..08664049e8 --- /dev/null +++ b/lily/include/beam-scoring-problem.hh @@ -0,0 +1,187 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1996--2011 Han-Wen Nienhuys + Jan Nieuwenhuizen + + 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 . +*/ + +#ifndef BEAM_SCORING_PROBLEM_HH +#define BEAM_SCORING_PROBLEM_HH + +#include "beam.hh" +#include "interval.hh" +#include "lily-guile.hh" +#include "lily-proto.hh" +#include "main.hh" // DEBUG_BEAM_SCORING +#include "std-vector.hh" +#include "stem-info.hh" + +enum Scorers { + // Should be ordered by increasing expensiveness. + ORIGINAL_DISTANCE, + SLOPE_IDEAL, + SLOPE_MUSICAL, + SLOPE_DIRECTION, + HORIZONTAL_INTER, + FORBIDDEN, + STEM_LENGTHS, + COLLISIONS, + NUM_SCORERS, +}; + +struct Beam_configuration +{ + Interval y; + Real demerits; +#if DEBUG_BEAM_SCORING + string score_card_; +#endif + + int next_scorer_todo; + + Beam_configuration (); + bool done () const; + void add (Real demerit, const string &reason); + static Beam_configuration* new_config(Interval start, + Interval offset); +}; + +// Comparator for a queue of Beam_configuration*. +class Beam_configuration_less +{ +public: + bool operator() (Beam_configuration* const& l, Beam_configuration* const& r) + { + // Invert + return l->demerits > r->demerits; + } +}; + + +struct Beam_quant_parameters +{ + Real SECONDARY_BEAM_DEMERIT; + Real STEM_LENGTH_DEMERIT_FACTOR; + Real REGION_SIZE; + + /* + threshold to combat rounding errors. + */ + Real BEAM_EPS; + + // possibly ridiculous, but too short stems just won't do + Real STEM_LENGTH_LIMIT_PENALTY; + Real DAMPING_DIRECTION_PENALTY; + Real MUSICAL_DIRECTION_FACTOR; + Real HINT_DIRECTION_PENALTY; + Real IDEAL_SLOPE_FACTOR; + Real ROUND_TO_ZERO_SLOPE; + Real COLLISION_PENALTY; + Real COLLISION_PADDING; + Real HORIZONTAL_INTER_QUANT_PENALTY; + Real STEM_COLLISION_FACTOR; + + void fill (Grob *him); +}; + +struct Beam_collision { + Real x_; + Interval y_; + Real base_penalty_; + + // Need to add beam_config->y to get actual offsets. + Interval beam_y_; +}; + + +/* + Parameters for a single beam. Precomputed to save time in + scoring individual configurations. + + TODO - use trailing _ on data members. + + */ +class Beam_scoring_problem +{ +public: + Beam_scoring_problem (Grob *me, Drul_array ys); + Drul_array solve() const; + +private: + Grob *beam; + + Interval unquanted_y; + + Real staff_space; + Real beam_thickness; + Real line_thickness; + Real musical_dy; + + Interval x_span; + + vector stem_infos; + + /* + Do stem computations. These depend on YL and YR linearly, so we can + precompute for every stem 2 factors. + + We store some info to quickly interpolate. The stemlengths are + affine linear in YL and YR. If YL == YR == 0, then we might have + stem_y != 0.0, when we're cross staff. + */ + vector base_lengths; + vector stem_xpositions; + + Grob *common[2]; + bool is_xstaff; + bool is_knee; + + Beam_quant_parameters parameters; + + Real staff_radius; + Drul_array edge_beam_counts; + Drul_array edge_dirs; + + // Half-open intervals, representing allowed positions for the beam, + // starting from close to the notehead to the direction of the stem + // end. This is used for quickly weeding out invalid + // Beam_configurations. + Drul_array quant_range; + Real beam_translation; + vector collisions_; + vector segments_; + + void init_stems (); + void init_collisions (vector grobs); + void add_collision (Real x, Interval y, Real factor); + + void one_scorer (Beam_configuration* config) const; + Beam_configuration *force_score (SCM inspect_quants, + const vector &configs) const; + Real y_at (Real x, Beam_configuration const* c) const; + + // Scoring functions: + void score_forbidden_quants (Beam_configuration *config) const; + void score_horizontal_inter_quants (Beam_configuration *config) const; + void score_slope_ideal (Beam_configuration *config) const; + void score_slope_direction (Beam_configuration *config) const; + void score_slope_musical (Beam_configuration *config) const; + void score_stem_lengths (Beam_configuration* config) const; + void generate_quants(vector* scores) const; + void score_collisions (Beam_configuration *config) const; +}; + +#endif /* BEAM_SCORING_PROBLEM_HH */ diff --git a/lily/include/beam.hh b/lily/include/beam.hh index 89a11a263b..f541a216be 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -1,10 +1,21 @@ /* - beam.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter - - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #ifndef BEAM_HH @@ -15,32 +26,6 @@ #include "lily-proto.hh" #include "stem-info.hh" -/* - TODO: move quanting in separate file. -*/ -struct Beam_quant_parameters -{ - Real INTER_QUANT_PENALTY; - Real SECONDARY_BEAM_DEMERIT; - Real STEM_LENGTH_DEMERIT_FACTOR; - Real REGION_SIZE; - - /* - threshold to combat rounding errors. - */ - Real BEAM_EPS; - - // possibly ridiculous, but too short stems just won't do - Real STEM_LENGTH_LIMIT_PENALTY; - Real DAMPING_DIRECTION_PENALTY; - Real MUSICAL_DIRECTION_FACTOR; - Real HINT_DIRECTION_PENALTY; - Real IDEAL_SLOPE_FACTOR; - Real ROUND_TO_ZERO_SLOPE; - - void fill (Grob *him); -}; - struct Beam_segment { int vertical_count_; @@ -48,6 +33,8 @@ struct Beam_segment Beam_segment (); }; +bool beam_segment_less (Beam_segment const& a, Beam_segment const& b); + struct Beam_stem_segment { Beam_stem_segment (); @@ -60,7 +47,6 @@ struct Beam_stem_segment bool gapped_; Direction dir_; int max_connect_; - }; @@ -80,7 +66,7 @@ public: static void set_stemlens (Grob *); static int get_beam_count (Grob *me); static Real get_beam_translation (Grob *me); - static Real get_thickness (Grob *me); + static Real get_beam_thickness (Grob *me); static void connect_beams (Grob *me); static vector get_beam_segments (Grob *me_grob, Grob **common); static Interval no_visible_stem_positions (Grob *me, Interval default_value); @@ -102,30 +88,19 @@ public: DECLARE_SCHEME_CALLBACK (slope_damping, (SCM, SCM)); DECLARE_SCHEME_CALLBACK (quanting, (SCM, SCM)); -static Real score_slopes_dy (Real, Real, Real, Real, Real, bool, Beam_quant_parameters const *); - - static Real score_stem_lengths (vector const &stems, - vector const &stem_infos, - vector const &base_stem_ys, - vector const &stem_xs, - Real xl, Real xr, - bool knee, - Real yl, Real yr, Beam_quant_parameters const *); - static Real score_forbidden_quants (Real, Real, - Real, Real, Real, Real, - Drul_array, Direction, Direction, - Beam_quant_parameters const *); - static int get_direction_beam_count (Grob *me, Direction d); + private: + friend class Beam_scoring_problem; + static Direction get_default_dir (Grob *); static void set_stem_directions (Grob *, Direction); static void consider_auto_knees (Grob *); static void set_stem_shorten (Grob *); + static int forced_stem_count (Grob *); static Real calc_stem_y (Grob *, Grob *s, Grob **c, Real, Real, Direction, Drul_array pos, bool french); - static int forced_stem_count (Grob *); }; diff --git a/lily/include/beaming-pattern.hh b/lily/include/beaming-pattern.hh index 36c63c7502..6eed0606b3 100644 --- a/lily/include/beaming-pattern.hh +++ b/lily/include/beaming-pattern.hh @@ -1,9 +1,20 @@ /* - beaming-pattern.hh -- declare beaming-pattern.hh + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef BEAMING_PATTERN_HH @@ -17,11 +28,11 @@ struct Beaming_options { SCM grouping_; bool subdivide_beams_; - Moment beat_length_; + Moment base_moment_; Moment measure_length_; Beaming_options (); - void from_context (Context*); + void from_context (Context*); }; struct Beam_rhythmic_element @@ -31,7 +42,7 @@ struct Beam_rhythmic_element int rhythmic_importance_; bool invisible_; - + Beam_rhythmic_element (Moment, int, bool); Beam_rhythmic_element (); @@ -47,12 +58,16 @@ class Beaming_pattern { public: Beaming_pattern (); - + void beamify (Beaming_options const&); void de_grace (); void add_stem (Moment d, int beams, bool invisible); int beamlet_count (int idx, Direction d) const; - + bool invisibility (int idx) const; + Moment start_moment (int idx) const; + Moment end_moment (int idx) const; + Beaming_pattern* split_pattern(int idx); + private: vector infos_; Direction flag_direction (Beaming_options const&, vsize) const; diff --git a/lily/include/bezier.hh b/lily/include/bezier.hh index a04d449725..bd66558a19 100644 --- a/lily/include/bezier.hh +++ b/lily/include/bezier.hh @@ -1,7 +1,20 @@ /* - bezier.hh -- declare Bezier and Bezier_bow + This file is part of LilyPond, the GNU music typesetter. - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef BEZIER_HH @@ -22,6 +35,8 @@ public: void reverse (); void rotate (Real); void translate (Offset); + void subdivide (Real, Bezier *, Bezier *) const; + Bezier extract (Real, Real) const; Real get_other_coordinate (Axis a, Real x) const; vector solve_point (Axis, Real coordinate) const; diff --git a/lily/include/book.hh b/lily/include/book.hh index d7ae227801..fa74cd5654 100644 --- a/lily/include/book.hh +++ b/lily/include/book.hh @@ -1,9 +1,20 @@ /* - book.hh -- declare Book + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef BOOK_HH @@ -20,7 +31,6 @@ class Book DECLARE_SMOBS (Book); public: - string user_key_; SCM header_; Output_def *paper_; SCM scores_; @@ -28,8 +38,8 @@ public: SCM input_location_; Book (Book const &); - Input *origin() const; - VIRTUAL_COPY_CONSTRUCTOR(Book, Book); + Input *origin () const; + VIRTUAL_COPY_CONSTRUCTOR (Book, Book); Book (); void add_score (SCM); void add_bookpart (SCM); diff --git a/lily/include/break-align-interface.hh b/lily/include/break-align-interface.hh index 128d4e2b12..c3c594ba96 100644 --- a/lily/include/break-align-interface.hh +++ b/lily/include/break-align-interface.hh @@ -1,9 +1,20 @@ /* - break-align-interface.hh -- declare Break_alignment_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef BREAK_ALIGN_INTERFACE_HH diff --git a/lily/include/breathing-sign.hh b/lily/include/breathing-sign.hh index 271de504f9..948dd09d75 100644 --- a/lily/include/breathing-sign.hh +++ b/lily/include/breathing-sign.hh @@ -1,7 +1,7 @@ /* breathing-sign.hh - Copyright (c) 1999--2009 Michael Krause + Copyright (c) 1999--2011 Michael Krause written for the GNU LilyPond music typesetter */ diff --git a/lily/include/change-iterator.hh b/lily/include/change-iterator.hh index c7ecfda15c..99a3dde190 100644 --- a/lily/include/change-iterator.hh +++ b/lily/include/change-iterator.hh @@ -1,9 +1,20 @@ /* - change-iterator.hh -- declare Change_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef CHANGE_ITERATOR_HH diff --git a/lily/include/chord-name.hh b/lily/include/chord-name.hh index bf4c6b62bf..91e6593361 100644 --- a/lily/include/chord-name.hh +++ b/lily/include/chord-name.hh @@ -1,9 +1,20 @@ /* - chord-name.hh -- declare Chord_name + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Jan Nieuwenhuizen - (c) 1999--2009 Jan Nieuwenhuizen + 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 . */ #ifndef CHORD_NAME_HH diff --git a/lily/include/chord-tremolo-iterator.hh b/lily/include/chord-tremolo-iterator.hh index fe89ed6616..9ab96ec5d4 100644 --- a/lily/include/chord-tremolo-iterator.hh +++ b/lily/include/chord-tremolo-iterator.hh @@ -1,9 +1,20 @@ /* - chord-tremolo-iterator.hh -- declare Chord_tremolo_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef CHORD_TREMOLO_ITERATOR_HH diff --git a/lily/include/clef.hh b/lily/include/clef.hh index 038d21f7aa..50cd925f70 100644 --- a/lily/include/clef.hh +++ b/lily/include/clef.hh @@ -1,9 +1,20 @@ /* - clef.hh -- declare Clef + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef CLEF_HH diff --git a/lily/include/cluster.hh b/lily/include/cluster.hh index a116bf0a9e..2c7bc1dac8 100644 --- a/lily/include/cluster.hh +++ b/lily/include/cluster.hh @@ -1,9 +1,20 @@ /* - cluster.hh + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Juergen Reuter - (c) 2002--2009 Juergen Reuter + 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 . */ #ifndef CLUSTER_HH diff --git a/lily/include/coherent-ligature-engraver.hh b/lily/include/coherent-ligature-engraver.hh index bacf575e43..c109a69ce9 100644 --- a/lily/include/coherent-ligature-engraver.hh +++ b/lily/include/coherent-ligature-engraver.hh @@ -1,9 +1,20 @@ /* - coherent-ligature-engraver.hh -- declare Coherent_ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #ifndef COHERENT_LIGATURE_ENGRAVER_HH #define COHERENT_LIGATURE_ENGRAVER_HH diff --git a/lily/include/column-x-positions.hh b/lily/include/column-x-positions.hh index f95b865d7b..3b6410b646 100644 --- a/lily/include/column-x-positions.hh +++ b/lily/include/column-x-positions.hh @@ -1,7 +1,20 @@ /* - column-x-positions.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys + + 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 . */ #ifndef COLUMN_X_POSITIONS_HH diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index 157411a83c..d0e631d901 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -1,10 +1,20 @@ /* - constrained-breaking.hh -- declare a line breaker that - supports limits on the number of systems + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #ifndef CONSTRAINED_BREAKING_HH @@ -14,14 +24,44 @@ #include "matrix.hh" #include "prob.hh" +/* + * Begin/rest-of-line hack. This geometrical shape is a crude approximation + * of Skyline, but it is better than a rectangle. + */ +struct Line_shape +{ + Interval begin_; + Interval rest_; + + Line_shape () + { + } + Line_shape (Interval begin, Interval rest); + Line_shape piggyback (Line_shape mount, Real padding) const; +}; + struct Line_details { + Grob *last_column_; Real force_; - Interval extent_; /* Y-extent of the system */ + Line_shape shape_; + vector footnotes_; /* The footnotes at the bottom of the + page, where each stencil represents + a different footnote. */ + Interval refpoint_extent_; /* The refpoints of the first and last + spaceable staff in this line. min-distance + should be measured from the bottom + refpoint_extent of one line to the + top refpoint_extent of the next. */ + Real tallness_; /* Y-extent, adjusted according to begin/rest-of-line*/ Real padding_; /* compulsory space after this system (if we're not last on a page) */ + Real title_padding_; + Real min_distance_; + Real title_min_distance_; Real bottom_padding_; Real space_; /* spring length */ + Real title_space_; Real inverse_hooke_; SCM break_permission_; @@ -33,13 +73,30 @@ struct Line_details { bool title_; + /* The page-breaker deals with forbidden page breaks by "compressing" + two Line_detailses into one. The following fields are used by the + page-breaker to keep track of this. If the number of fields needed + by the page-breaker grows, it might be a good idea to create a separate + class. */ + int compressed_lines_count_; + int compressed_nontitle_lines_count_; + bool last_markup_line_; + bool first_markup_line_; + bool tight_spacing_; + Line_details () { + last_column_ = 0; force_ = infinity_f; padding_ = 0; + title_padding_ = 0; bottom_padding_ = 0; + min_distance_ = 0; + title_min_distance_ = 0; space_ = 0; + title_space_ = 0; inverse_hooke_ = 1; + tight_spacing_ = false; break_permission_ = ly_symbol2scm ("allow"); page_permission_ = ly_symbol2scm ("allow"); turn_permission_ = ly_symbol2scm ("allow"); @@ -47,24 +104,18 @@ struct Line_details { page_penalty_ = 0; turn_penalty_ = 0; title_ = false; + compressed_lines_count_ = 1; + compressed_nontitle_lines_count_ = 1; + last_markup_line_ = false; + first_markup_line_ = false; + tallness_ = 0; + refpoint_extent_ = Interval (0, 0); } - Line_details (Prob *pb) - { - force_ = 0; - extent_ = unsmob_stencil (pb->get_property ("stencil")) ->extent (Y_AXIS); - padding_ = robust_scm2double (pb->get_property ("next-padding"), 0); - bottom_padding_ = 0; - space_ = robust_scm2double (pb->get_property ("next-space"), 1.0); - inverse_hooke_ = 1.0; - break_permission_ = ly_symbol2scm ("allow"); - page_permission_ = pb->get_property ("page-break-permission"); - turn_permission_ = pb->get_property ("page-turn-permission"); - break_penalty_ = 0; - page_penalty_ = robust_scm2double (pb->get_property ("page-break-penalty"), 0); - turn_penalty_ = robust_scm2double (pb->get_property ("page-turn-penalty"), 0); - title_ = to_boolean (pb->get_property ("is-title")); - } + Line_details (Prob *pb, Output_def *paper); + Real full_height () const; + Real tallness () const; + Real spring_length (Line_details const &next_line) const; }; /* @@ -116,6 +167,15 @@ private: bool ragged_right_; bool ragged_last_; + Real system_system_min_distance_; + Real system_system_padding_; + Real system_system_space_; + Real system_markup_space_; + Real score_system_min_distance_; + Real score_system_padding_; + Real score_markup_min_distance_; + Real score_markup_padding_; + /* the (i,j)th entry is the configuration for breaking between columns i and j */ Matrix lines_; @@ -138,6 +198,7 @@ private: Real combine_demerits (Real force, Real prev_force); - bool calc_subproblem(vsize start, vsize systems, vsize max_break_index); + bool calc_subproblem (vsize start, vsize systems, vsize max_break_index); + void fill_line_details (Line_details *const, vsize, vsize); }; #endif /* CONSTRAINED_BREAKING_HH */ diff --git a/lily/include/context-def.hh b/lily/include/context-def.hh index b5ea240b70..6024c68e06 100644 --- a/lily/include/context-def.hh +++ b/lily/include/context-def.hh @@ -1,9 +1,20 @@ /* - context-def.hh -- declare Context_def + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef CONTEXT_DEF_HH diff --git a/lily/include/context-handle.hh b/lily/include/context-handle.hh index 91cc722270..c9980eb46c 100644 --- a/lily/include/context-handle.hh +++ b/lily/include/context-handle.hh @@ -1,9 +1,20 @@ /* - context-handle.hh -- declare Context_handle + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef CONTEXT_HANDLE_HH diff --git a/lily/include/context-mod.hh b/lily/include/context-mod.hh new file mode 100644 index 0000000000..3bcb987263 --- /dev/null +++ b/lily/include/context-mod.hh @@ -0,0 +1,58 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Reinhold Kainhofer + + 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 . +*/ + +/** + * context-mod.hh + * Implement a structure to store context modifications to be inserted + * at some later point + */ + +#ifndef CONTEXT_MOD_HH +#define CONTEXT_MOD_HH + +#include "lily-proto.hh" +#include "smobs.hh" +#include "virtual-methods.hh" + + +/* + Modifications for an interpretation context as given in the + input. +*/ +struct Context_mod +{ +private: + SCM mods_; +public: + void add_context_mod (SCM); + void add_context_mods (SCM); + + VIRTUAL_COPY_CONSTRUCTOR (Context_mod, Context_mod); + + SCM get_mods () const; + + Context_mod (); + Context_mod (Context_mod const &); + DECLARE_SIMPLE_SMOBS (Context_mod); +}; + +DECLARE_UNSMOB (Context_mod, context_mod); + +#endif /* CONTEXT_MOD_HH */ + diff --git a/lily/include/context.hh b/lily/include/context.hh index 31c436a936..4121f84c78 100644 --- a/lily/include/context.hh +++ b/lily/include/context.hh @@ -1,9 +1,20 @@ /* - context.hh -- declare Context + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef CONTEXT_HH @@ -103,7 +114,7 @@ public: virtual Context *get_score_context () const; virtual Output_def *get_output_def () const; virtual Moment now_mom () const; - virtual Context *get_default_interpreter (); + virtual Context *get_default_interpreter (string context_id = ""); bool is_alias (SCM) const; void add_alias (SCM); @@ -135,7 +146,7 @@ Context *find_context_below (Context *where, bool melisma_busy (Context *); Context *get_voice_to_lyrics (Context *lyrics); -Grob *get_current_note_head (Context *voice); +Grob *get_current_note_head (Context *voice, bool include_grace_notes); Grob *get_current_rest (Context *voice); DECLARE_UNSMOB (Context, context); @@ -143,6 +154,9 @@ Moment measure_position (Context const *context); Moment measure_position (Context const *context, Duration const *dur); Rational measure_length (Context const *context); int measure_number (Context const *context); + +bool check_repeat_count_visibility (Context const *context, SCM count); + void set_context_property_on_children (Context *trans, SCM sym, SCM val); /* Shorthand for creating and broadcasting stream events. */ @@ -157,4 +171,3 @@ SCM nested_property_revert_alist (SCM alist, SCM prop_path); SCM evict_from_alist (SCM, SCM, SCM); #endif /* CONTEXT_HH */ - diff --git a/lily/include/custos.hh b/lily/include/custos.hh index c6295f6ff1..9638a51657 100644 --- a/lily/include/custos.hh +++ b/lily/include/custos.hh @@ -1,9 +1,20 @@ /* - custos.hh + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Juergen Reuter - (c) 2000--2009 Juergen Reuter + 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 . */ #ifndef CUSTOS_HH diff --git a/lily/include/dimension-cache.hh b/lily/include/dimension-cache.hh index 102139ac9b..84ea317d53 100644 --- a/lily/include/dimension-cache.hh +++ b/lily/include/dimension-cache.hh @@ -1,9 +1,20 @@ /* - dimension-cache.hh -- declare Dimension_cache + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #ifndef DIMENSION_CACHE_HH diff --git a/lily/include/directional-element-interface.hh b/lily/include/directional-element-interface.hh index 6e55104c2a..07aae0be66 100644 --- a/lily/include/directional-element-interface.hh +++ b/lily/include/directional-element-interface.hh @@ -1,9 +1,20 @@ /* - directional-element.hh -- declare Directional_element + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef DIRECTIONAL_ELEMENT_HH diff --git a/lily/include/dispatcher.hh b/lily/include/dispatcher.hh index a849699247..d812b27c63 100644 --- a/lily/include/dispatcher.hh +++ b/lily/include/dispatcher.hh @@ -1,9 +1,20 @@ /* - dispatcher.hh -- declare Dispatcher + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005 Erik Sandberg - (c) 2005 Erik Sandberg + 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 . */ #ifndef DISPATCHER_HH diff --git a/lily/include/dot-column.hh b/lily/include/dot-column.hh index ade16d2566..5337c85d6e 100644 --- a/lily/include/dot-column.hh +++ b/lily/include/dot-column.hh @@ -1,9 +1,20 @@ /* - dot-column.hh -- declare Dot_column Dot_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef DOT_COLUMN_HH diff --git a/lily/include/dot-configuration.hh b/lily/include/dot-configuration.hh index 3b01eb3c70..b6b39dd41d 100644 --- a/lily/include/dot-configuration.hh +++ b/lily/include/dot-configuration.hh @@ -1,11 +1,20 @@ /* - dot-configuration.hh -- declare Dot_configuration + This file is part of LilyPond, the GNU music typesetter. - Source file of the GNU LilyPond music typesetter. Distributed under - terms of the GNU General Public License. LilyPond comes with NO - WARRANTY. + Copyright (C) 2007--2011 Han-Wen Nienhuys - (c) 2007--2009 Han-Wen Nienhuys + 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 . */ #ifndef DOT_CONFIGURATION_HH diff --git a/lily/include/dots.hh b/lily/include/dots.hh index 8d02561baf..366e4f13e2 100644 --- a/lily/include/dots.hh +++ b/lily/include/dots.hh @@ -1,9 +1,20 @@ /* - dots.hh -- declare Dots + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef DOTS_HH diff --git a/lily/include/duration.hh b/lily/include/duration.hh index 69cbba5e9d..003b9e8efa 100644 --- a/lily/include/duration.hh +++ b/lily/include/duration.hh @@ -1,9 +1,20 @@ /* - duration.hh -- declare Duration + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #ifndef DURATION_HH diff --git a/lily/include/engraver-group.hh b/lily/include/engraver-group.hh index 99a59d17ca..9bb3aba0c3 100644 --- a/lily/include/engraver-group.hh +++ b/lily/include/engraver-group.hh @@ -1,9 +1,20 @@ /* - engraver-group.hh -- declare Engraver_group + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef ENGRAVER_GROUP_HH diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh index fe9482c7e0..162724b808 100644 --- a/lily/include/engraver.hh +++ b/lily/include/engraver.hh @@ -1,9 +1,20 @@ /* - engraver.hh -- declare Engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #ifndef ENGRAVER_HH @@ -20,7 +31,7 @@ class Engraver : public Translator { Grob *internal_make_grob (SCM sym, SCM cause, char const *name, char const *f, int l, char const *fun); - + friend SCM ly_engraver_make_grob (SCM, SCM, SCM); friend class Engraver_group; protected: /* @@ -41,6 +52,8 @@ public: void announce_grob (Grob *, SCM cause); void announce_end_grob (Grob *, SCM cause); + Grob_info make_grob_info (Grob *, SCM cause); + Item *internal_make_item (SCM sym, SCM cause, char const *name, char const *f, int l, char const *fun); Spanner *internal_make_spanner (SCM sym, SCM cause, char const *name, @@ -58,5 +71,7 @@ public: #define make_spanner(x, cause) internal_make_spanner (ly_symbol2scm (x), cause, x, __FILE__, __LINE__, __FUNCTION__) #define make_paper_column(x) internal_make_column (ly_symbol2scm (x), x, __FILE__, __LINE__, __FUNCTION__) +Engraver* unsmob_engraver (SCM eng); +bool ly_is_grob_cause (SCM obj); #endif // ENGRAVER_HH diff --git a/lily/include/event-chord-iterator.hh b/lily/include/event-chord-iterator.hh index e7d9bc3374..7c902f863d 100644 --- a/lily/include/event-chord-iterator.hh +++ b/lily/include/event-chord-iterator.hh @@ -1,9 +1,20 @@ /* - event-chord-iterator.hh -- declare Event_chord_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef EVENT_CHORD_ITERATOR_HH diff --git a/lily/include/event-iterator.hh b/lily/include/event-iterator.hh index 9e6570c7be..adabf9d704 100644 --- a/lily/include/event-iterator.hh +++ b/lily/include/event-iterator.hh @@ -1,10 +1,21 @@ /* - event-iter.hh -- declare Event_chord_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys + Copyright (C) 2006--2011 Han-Wen Nienhuys Erik Sandberg + + 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 . */ #ifndef EVENT_ITERATOR_HH diff --git a/lily/include/file-name-map.hh b/lily/include/file-name-map.hh index 78034c785e..e6a338da80 100644 --- a/lily/include/file-name-map.hh +++ b/lily/include/file-name-map.hh @@ -1,9 +1,20 @@ /* - file-name-map.hh -- declare map_file_name() + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef FILE_NAME_MAP_HH diff --git a/lily/include/font-interface.hh b/lily/include/font-interface.hh index de502aa2eb..5e9fb5ecee 100644 --- a/lily/include/font-interface.hh +++ b/lily/include/font-interface.hh @@ -1,9 +1,20 @@ /* - font-interface.hh -- declare Font_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef FONT_INTERFACE_HH diff --git a/lily/include/font-metric.hh b/lily/include/font-metric.hh index 8346b4378a..8c287da18b 100644 --- a/lily/include/font-metric.hh +++ b/lily/include/font-metric.hh @@ -1,24 +1,34 @@ /* - font-metric.hh -- declare Font_metric + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef FONT_METRIC_HH #define FONT_METRIC_HH #include "box.hh" +#include "freetype.hh" #include "lily-proto.hh" #include "smobs.hh" #include "virtual-methods.hh" -#include "freetype.hh" #include -using namespace std; -typedef map Index_to_charcode_map; +typedef std::map Index_to_charcode_map; class Font_metric { @@ -28,31 +38,20 @@ public: SCM description_; string file_name_; - virtual Stencil text_stencil (string) const; - virtual Stencil word_stencil (string) const; - - // ugh. - virtual Box text_dimension (string) const; + // Return stencil for given string. output_state may be modified to + // record the font. + virtual Stencil text_stencil (Output_def *output_state, + string text, bool music) const; virtual string font_name () const; virtual size_t count () const; virtual Offset attachment_point (string) const; virtual Offset get_indexed_wxwy (size_t) const; - virtual Box get_indexed_char (size_t index) const; - virtual Box get_ascii_char (size_t ascii) const; - - /* - WTF are these vsize ? - - Font_metric is not related to vector<> - */ + virtual Box get_indexed_char_dimensions (size_t index) const; virtual size_t name_to_index (string) const; virtual size_t index_to_charcode (size_t) const; - virtual size_t index_to_ascii (size_t) const; virtual Real design_size () const; virtual Stencil find_by_name (string) const; - virtual Stencil get_indexed_char_stencil (size_t k) const; - virtual Stencil get_ascii_char_stencil (size_t k) const; virtual SCM sub_fonts () const; virtual SCM font_file_name () const; DECLARE_SMOBS (Font_metric); @@ -69,12 +68,6 @@ protected: int get_encoded_index (Font_metric *m, string input_coding, int code); -class Simple_font_metric : public Font_metric -{ - DECLARE_CLASSNAME(Simple_font_metric); -public: -}; - DECLARE_UNSMOB (Font_metric, metrics); char *pfb2pfa (Byte const *pfb, int length); diff --git a/lily/include/freetype.hh b/lily/include/freetype.hh index 310e5893cd..f16864e358 100644 --- a/lily/include/freetype.hh +++ b/lily/include/freetype.hh @@ -1,9 +1,20 @@ /* - freetype.hh -- declare Freetype global settings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef FREETYPE_HH @@ -17,6 +28,6 @@ void init_freetype (); extern FT_Library freetype2_library; -string freetype_error_string (int code); +string freetype_error_string (FT_Error code); #endif /* FREETYPE_HH */ diff --git a/lily/include/global-context.hh b/lily/include/global-context.hh index f291284d91..c814b61c07 100644 --- a/lily/include/global-context.hh +++ b/lily/include/global-context.hh @@ -1,9 +1,20 @@ /* - global-context.hh -- declare Global_context + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef GLOBAL_CONTEXT_HH @@ -35,7 +46,7 @@ public: virtual SCM get_output (); virtual Output_def *get_output_def () const; virtual Moment now_mom () const; - virtual Context *get_default_interpreter (); + virtual Context *get_default_interpreter (string context_id = ""); Moment previous_moment () const; protected: diff --git a/lily/include/global-ctor.hh b/lily/include/global-ctor.hh index 1355ad006d..4e4b3b3da2 100644 --- a/lily/include/global-ctor.hh +++ b/lily/include/global-ctor.hh @@ -1,9 +1,20 @@ /* - global-ctor.hh -- declare Global construction stuff. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef GLOBAL_CTOR_HH diff --git a/lily/include/grace-fixup.hh b/lily/include/grace-fixup.hh index 5f27d3f9d5..f18dc7e286 100644 --- a/lily/include/grace-fixup.hh +++ b/lily/include/grace-fixup.hh @@ -1,9 +1,20 @@ /* - grace-fixup.hh -- declare Grace_fixup + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef GRACE_FIXUP_HH diff --git a/lily/include/grace-iterator.hh b/lily/include/grace-iterator.hh index fd31117850..2efb1754e3 100644 --- a/lily/include/grace-iterator.hh +++ b/lily/include/grace-iterator.hh @@ -1,9 +1,20 @@ /* - grace-iterator.hh -- declare Grace_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef NEWGRACE_ITERATOR_HH diff --git a/lily/include/gregorian-ligature-engraver.hh b/lily/include/gregorian-ligature-engraver.hh index 538d5aa17f..790de04a8c 100644 --- a/lily/include/gregorian-ligature-engraver.hh +++ b/lily/include/gregorian-ligature-engraver.hh @@ -1,9 +1,20 @@ /* - gregorian-ligature-engraver.hh -- declare Gregorian_ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #ifndef GREGORIAN_LIGATURE_ENGRAVER_HH #define GREGORIAN_LIGATURE_ENGRAVER_HH diff --git a/lily/include/gregorian-ligature.hh b/lily/include/gregorian-ligature.hh index e84ba67409..cfe81bcf94 100644 --- a/lily/include/gregorian-ligature.hh +++ b/lily/include/gregorian-ligature.hh @@ -1,9 +1,20 @@ /* - gregorian-ligature.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #ifndef GREGORIAN_LIGATURE_HH @@ -50,14 +61,10 @@ public: * These definitions may be extended by more specific Gregorian * ligatures such as vaticana-ligature.hh. */ -#define PES_LOWER 0x0001 // this is a head before "\~" in an - // ascending melody -#define PES_UPPER 0x0002 // this is a head after "\~" in an - // ascending melody -#define FLEXA_LEFT 0x0004 // this is a head before "\~" in a -// descending melody -#define FLEXA_RIGHT 0x0008 // this is a head after "\~" in a -// descending melody +#define PES_LOWER 0x0001 // this is a head before "\~" in an ascending melody +#define PES_UPPER 0x0002 // this is a head after "\~" in an ascending melody +#define FLEXA_LEFT 0x0004 // this is a head before "\~" in a descending melody +#define FLEXA_RIGHT 0x0008 // this is a head after "\~" in a descending melody #define AFTER_DEMINUTUM 0x0020 // previous head was a deminutum #endif /* GREGORIAN_LIGATURE_HH */ diff --git a/lily/include/grid-line-interface.hh b/lily/include/grid-line-interface.hh index 9fd1caddd5..9adfea1480 100644 --- a/lily/include/grid-line-interface.hh +++ b/lily/include/grid-line-interface.hh @@ -1,9 +1,20 @@ /* - grid-line-interface.hh -- declare Grid_line_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef GRID_LINE_INTERFACE_HH diff --git a/lily/include/grob-array.hh b/lily/include/grob-array.hh index f94f2d33cf..f33bc82f71 100644 --- a/lily/include/grob-array.hh +++ b/lily/include/grob-array.hh @@ -1,9 +1,20 @@ /* - grob-array.hh -- declare Grob_array + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef GROB_ARRAY_HH @@ -42,6 +53,7 @@ DECLARE_UNSMOB (Grob_array, grob_array); vector const &ly_scm2link_array (SCM x); SCM grob_list_to_grob_array (SCM lst); +SCM grob_array_to_list (Grob_array *array); #endif /* GROB_ARRAY_HH */ diff --git a/lily/include/grob-info.hh b/lily/include/grob-info.hh index 30c8f558bf..56a49170a4 100644 --- a/lily/include/grob-info.hh +++ b/lily/include/grob-info.hh @@ -1,9 +1,20 @@ /* - grob-info.hh -- declare Grob_info + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef STAFFELEMINFO_HH @@ -21,6 +32,7 @@ class Grob_info Translator *origin_trans_; Grob *grob_; Direction start_end_; + friend class Engraver; public: @@ -37,6 +49,15 @@ public: Item *item () const; Spanner *spanner () const; + static bool less (Grob_info i, Grob_info j); + + /* + For contexts that change staves, it may be desirable to emit a + grob into a staff other than the current one. If this is non-null, + this grob should be announced in this context instead of the + daddy_context_. + */ + Context *rerouting_daddy_context_; }; #endif // STAFFELEMINFO_HH diff --git a/lily/include/grob-interface.hh b/lily/include/grob-interface.hh index fcb67ceeaa..2c476bbb94 100644 --- a/lily/include/grob-interface.hh +++ b/lily/include/grob-interface.hh @@ -1,9 +1,20 @@ /* - interface.hh -- declare Interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #ifndef INTERFACE_HH diff --git a/lily/include/grob.hh b/lily/include/grob.hh index 66cc0530b7..eda94b6d58 100644 --- a/lily/include/grob.hh +++ b/lily/include/grob.hh @@ -1,9 +1,20 @@ /* - grob.hh -- declare Grob + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #ifndef GROB_HH @@ -54,8 +65,8 @@ public: friend SCM ly_grob_basic_properties (SCM); /* standard callbacks */ - DECLARE_SCHEME_CALLBACK(x_parent_positioning, (SCM)); - DECLARE_SCHEME_CALLBACK(y_parent_positioning, (SCM)); + DECLARE_SCHEME_CALLBACK (x_parent_positioning, (SCM)); + DECLARE_SCHEME_CALLBACK (y_parent_positioning, (SCM)); DECLARE_SCHEME_CALLBACK (stencil_height, (SCM smob)); DECLARE_SCHEME_CALLBACK (stencil_width, (SCM smob)); @@ -80,6 +91,8 @@ public: SCM get_property_alist_chain (SCM) const; SCM internal_get_property (SCM symbol) const; SCM internal_get_property_data (SCM symbol) const; + SCM internal_get_pure_property (SCM symbol, int start, int end) const; + SCM internal_get_maybe_pure_property (SCM symbol, bool pure, int start, int end) const; SCM internal_get_non_callback_marker_property_data (SCM symbol) const; SCM internal_get_object (SCM symbol) const; void internal_set_object (SCM sym, SCM val); @@ -94,6 +107,7 @@ public: /* class hierarchy */ virtual System *get_system () const; + static System *get_system (Grob *); virtual void do_break_processing (); virtual Grob *find_broken_piece (System *) const; virtual void discretionary_processing (); @@ -128,6 +142,9 @@ public: void fixup_refpoint (); virtual Interval_t spanned_rank_interval () const; + virtual bool pure_is_visible (int start, int end) const; + bool check_cross_staff (Grob *common); + static bool less (Grob *g1, Grob *g2); }; /* smob utilities */ diff --git a/lily/include/group-interface.hh b/lily/include/group-interface.hh index c3ef881105..48ddac33a8 100644 --- a/lily/include/group-interface.hh +++ b/lily/include/group-interface.hh @@ -1,9 +1,20 @@ /* - group-interface.hh -- declare Group_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef GROUP_INTERFACE_HH diff --git a/lily/include/hairpin.hh b/lily/include/hairpin.hh index d59934335c..9e636f6e8c 100644 --- a/lily/include/hairpin.hh +++ b/lily/include/hairpin.hh @@ -1,9 +1,20 @@ /* - hairpin.hh -- declare Hairpin + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef HAIRPIN_HH @@ -16,8 +27,7 @@ struct Hairpin { public: DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); - static void consider_suicide (Spanner*); + DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM)); DECLARE_GROB_INTERFACE(); }; diff --git a/lily/include/hara-kiri-group-spanner.hh b/lily/include/hara-kiri-group-spanner.hh index 968257b4c6..294415577b 100644 --- a/lily/include/hara-kiri-group-spanner.hh +++ b/lily/include/hara-kiri-group-spanner.hh @@ -1,9 +1,20 @@ /* - hara-kiri-vertical-group-spanner.hh -- declare Har_kiri_vertical_group_spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #ifndef HARA_KIRI_VERTICAL_GROUP_SPANNER_HH @@ -23,6 +34,7 @@ public: DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); DECLARE_GROB_INTERFACE(); static bool request_suicide (Grob *me, int start, int end); + static bool request_suicide_alone (Grob *me, int start, int end); static void consider_suicide (Grob *me); static void add_interesting_item (Grob *me, Grob *n); }; diff --git a/lily/include/horizontal-bracket.hh b/lily/include/horizontal-bracket.hh index eb2a579c40..3d140ae839 100644 --- a/lily/include/horizontal-bracket.hh +++ b/lily/include/horizontal-bracket.hh @@ -1,9 +1,20 @@ /* - horizontal-bracket.hh -- declare Horizontal_bracket + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef HORIZONTAL_BRACKET_HH diff --git a/lily/include/identifier-smob.hh b/lily/include/identifier-smob.hh index 783025e3e6..529e7919f2 100644 --- a/lily/include/identifier-smob.hh +++ b/lily/include/identifier-smob.hh @@ -1,9 +1,20 @@ /* - identifier-smob.hh -- declare identifier smob. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #ifndef IDENTIFIER_SMOB_HH diff --git a/lily/include/includable-lexer.hh b/lily/include/includable-lexer.hh index 150c4d5c62..a7ca04ca24 100644 --- a/lily/include/includable-lexer.hh +++ b/lily/include/includable-lexer.hh @@ -1,9 +1,20 @@ /* - includable-lexer.hh -- declare Includable_lexer + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef INCLUDABLE_LEXER_HH @@ -31,6 +42,7 @@ protected: bool close_input (); vector include_stack_; vector char_count_stack_; + vector pending_string_includes_; public: @@ -45,6 +57,7 @@ public: virtual void new_input (string s, Sources *); void new_input (string name, string data, Sources *); + void add_string_include (string data); char const *here_str0 () const; }; diff --git a/lily/include/input.hh b/lily/include/input.hh index 94e00527a2..b8dc7384ca 100644 --- a/lily/include/input.hh +++ b/lily/include/input.hh @@ -1,9 +1,20 @@ /* - input.hh -- declare Input + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef INPUT_HH @@ -45,7 +56,7 @@ public: int end_line_number ()const; int end_column_number ()const; - void get_counts (int *line, int *char_count, int *col) const; + void get_counts (int *, int *, int *, int *) const; Input (Input const &i); Input (); diff --git a/lily/include/item.hh b/lily/include/item.hh index bfaa671ed5..d3478245dd 100644 --- a/lily/include/item.hh +++ b/lily/include/item.hh @@ -1,9 +1,20 @@ /* - item.hh -- declare Item + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef ITEM_HH #define ITEM_HH @@ -29,9 +40,8 @@ public: static bool is_non_musical (Grob *); static bool break_visible(Grob *); - static bool less (Grob * const&, Grob * const&); bool is_broken () const; - bool pure_is_visible (int start, int end) const; + virtual bool pure_is_visible (int start, int end) const; Direction break_status_dir () const; diff --git a/lily/include/keyword.hh b/lily/include/keyword.hh index ca359ead57..56173de258 100644 --- a/lily/include/keyword.hh +++ b/lily/include/keyword.hh @@ -1,7 +1,20 @@ /* - keyword.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef KEYWORD_HH diff --git a/lily/include/least-squares.hh b/lily/include/least-squares.hh index aa8bd84e46..368e33dba8 100644 --- a/lily/include/least-squares.hh +++ b/lily/include/least-squares.hh @@ -1,7 +1,20 @@ /* - leastsquare.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef LEASTSQUARE_HH diff --git a/lily/include/ligature-engraver.hh b/lily/include/ligature-engraver.hh index 92cc15940e..4a2da856c2 100644 --- a/lily/include/ligature-engraver.hh +++ b/lily/include/ligature-engraver.hh @@ -1,9 +1,20 @@ /* - ligature-engraver.hh -- declare Ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Juergen Reuter - (c) 2002--2009 Juergen Reuter + 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 . */ #ifndef LIGATURE_ENGRAVER_HH @@ -20,7 +31,7 @@ protected: 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; diff --git a/lily/include/lily-guile-macros.hh b/lily/include/lily-guile-macros.hh index fa5b8a08e4..ba2c955248 100644 --- a/lily/include/lily-guile-macros.hh +++ b/lily/include/lily-guile-macros.hh @@ -1,14 +1,27 @@ /* - lily-guile-macros.hh -- declare GUILE interaction macros. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef LILY_GUILE_MACROS_HH #define LILY_GUILE_MACROS_HH +#include "config.hh" + #ifndef SMOB_FREE_RETURN_VAL #define SMOB_FREE_RETURN_VAL(CL) 0 #endif @@ -21,6 +34,11 @@ #define SCM_UNPACK(x) (x) #endif +/* For backward compatability with Guile 1.8 */ +#if !HAVE_GUILE_SUBR_TYPE +typedef SCM (*scm_t_subr) (GUILE_ELLIPSIS); +#endif + /* Unreliable with gcc-2.x FIXME: should add check for x86 as well? */ #define CACHE_SYMBOLS @@ -30,7 +48,7 @@ /* this lets us "overload" macros such as get_property to take symbols as well as strings */ inline SCM -scm_or_str2symbol (char const *c) { return scm_str2symbol (c); } +scm_or_str2symbol (char const *c) { return scm_from_locale_symbol (c); } inline SCM scm_or_str2symbol (SCM s) { @@ -38,7 +56,7 @@ scm_or_str2symbol (SCM s) { return s; } -/* Using this trick we cache the value of scm_str2symbol ("fooo") where +/* Using this trick we cache the value of scm_from_locale_symbol ("fooo") where "fooo" is a constant string. This is done at the cost of one static variable per ly_symbol2scm() use, and one boolean evaluation for every call. @@ -58,7 +76,7 @@ scm_or_str2symbol (SCM s) { value; \ }) #else -inline SCM ly_symbol2scm (char const *x) { return scm_str2symbol ((x)); } +inline SCM ly_symbol2scm (char const *x) { return scm_from_locale_symbol ((x)); } #endif /* @@ -76,11 +94,11 @@ inline SCM ly_symbol2scm (char const *x) { return scm_str2symbol ((x)); } if (__builtin_constant_p ((x))) \ { \ if (!cached) \ - value = cached = scm_eval (scm_str2symbol (x), \ - global_lily_module); \ + value = cached = scm_eval (scm_from_locale_symbol (x), \ + global_lily_module); \ } \ else \ - value = scm_eval (scm_str2symbol (x), global_lily_module); \ + value = scm_eval (scm_from_locale_symbol (x), global_lily_module); \ value; \ }) @@ -125,7 +143,7 @@ string predicate_to_typename (void *ptr); string id = mangle_cxx_identifier (cxx); \ TYPE ::FUNC ## _proc = scm_c_define_gsubr (id.c_str(), \ (ARGCOUNT-OPTIONAL_COUNT), OPTIONAL_COUNT, 0, \ - (Scheme_function_unknown) TYPE::FUNC); \ + (scm_t_subr) TYPE::FUNC); \ ly_add_function_documentation (TYPE :: FUNC ## _proc, id.c_str(), "", \ DOC); \ scm_c_export (id.c_str (), NULL); \ @@ -163,7 +181,7 @@ void ly_check_name (string cxx, string fname); INITPREFIX ## init () \ { \ FNAME ## _proc = scm_c_define_gsubr (PRIMNAME, REQ, OPT, VAR, \ - (Scheme_function_unknown) FNAME); \ + (scm_t_subr) FNAME); \ ly_check_name (#FNAME, PRIMNAME);\ ly_add_function_documentation (FNAME ## _proc, PRIMNAME, #ARGLIST, \ DOCSTRING); \ @@ -185,6 +203,10 @@ void ly_check_name (string cxx, string fname); VAR, ARGLIST, DOCSTRING) #define get_property(x) internal_get_property (ly_symbol2scm (x)) +#define get_pure_property(x,y,z) \ + internal_get_pure_property (ly_symbol2scm (x), y, z) +#define get_maybe_pure_property(w,x,y,z) \ + internal_get_maybe_pure_property (ly_symbol2scm (w), x, y, z) #define get_property_data(x) internal_get_property_data (ly_symbol2scm (x)) #define get_object(x) internal_get_object (ly_symbol2scm (x)) #define set_object(x, y) internal_set_object (ly_symbol2scm (x), y) diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index 797d22d0a5..3fefd5dc3c 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -1,9 +1,20 @@ /* - lily-guile.hh encapsulate guile + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #ifndef LILY_GUILE_HH @@ -48,14 +59,14 @@ SCM ly_rational2scm (Rational); SCM ly_offset2scm (Offset); Offset ly_scm2offset (SCM); SCM ly_chain_assoc (SCM key, SCM achain); -SCM ly_chain_assoc_get (SCM key, SCM achain, SCM dfault); +SCM ly_chain_assoc_get (SCM key, SCM achain, SCM default_value, SCM strict_checking = SCM_BOOL_F); SCM ly_assoc_cdr (SCM key, SCM alist); -SCM ly_assoc_get (SCM key, SCM alist, SCM def); +SCM ly_assoc_get (SCM key, SCM alist, SCM default_value, SCM strict_checking = SCM_BOOL_F); Interval ly_scm2interval (SCM); Drul_array ly_scm2realdrul (SCM); Slice int_list_to_slice (SCM l); SCM ly_interval2scm (Drul_array); -char *ly_scm2newstr (SCM str, size_t *lenp); +char *ly_scm2str0 (SCM str); Real robust_scm2double (SCM, double); int robust_scm2int (SCM, int); diff --git a/lily/include/lily-lexer.hh b/lily/include/lily-lexer.hh index 4062e3410f..4f5f92d4e1 100644 --- a/lily/include/lily-lexer.hh +++ b/lily/include/lily-lexer.hh @@ -1,9 +1,20 @@ /* - lexer.hh -- declare Lily_lexer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef MY_LILY_LEXER_HH @@ -19,6 +30,20 @@ bool busy_parsing (); void kill_lexer (); void set_lexer (); +struct Chord_repetition +{ + Chord_repetition () + { + last_chord_ = SCM_EOL; + repetition_function_ = SCM_EOL; + repetition_symbol_ = SCM_EOL; + } + + SCM repetition_symbol_; + SCM repetition_function_; + SCM last_chord_; +}; + class Lily_lexer : public Includable_lexer { DECLARE_SMOBS (Lily_lexer); @@ -38,8 +63,8 @@ private: int hidden_state_; public: vector extra_token_types_; - void *lexval; - Input *lexloc; + void *lexval_; + Input *lexloc_; bool is_main_input_; Sources *sources_; @@ -48,6 +73,8 @@ public: SCM chordmodifier_tab_; SCM pitchname_tab_stack_; + Chord_repetition chord_repetition_; + int error_level_; Input last_input_; @@ -83,12 +110,13 @@ public: void push_note_state (SCM tab); void pop_state (); void LexerError (char const *); - void set_identifier (SCM name_string, SCM); + void set_identifier (SCM path, SCM val); int get_state () const; bool is_note_state () const; bool is_chord_state () const; bool is_lyric_state () const; bool is_figure_state () const; + bool is_clean () const; }; #endif /* MY_LILY_LEXER_HH */ diff --git a/lily/include/lily-parser.hh b/lily/include/lily-parser.hh index 79d586f1e9..fe58940460 100644 --- a/lily/include/lily-parser.hh +++ b/lily/include/lily-parser.hh @@ -1,9 +1,20 @@ /* - lily-parser.hh -- declare Lily_parser + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef LILY_PARSER_HH @@ -52,6 +63,7 @@ public: void clear (); void do_init_file (); void do_yyparse (); + void include_string (string ly_code); void parse_file (string init, string name, string out_name); void parse_string (string ly_code); void parser_error (string); diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 40df1bfab3..5cde918e3f 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -1,9 +1,20 @@ /* - lily-proto.hh -- declare class names. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef LILY_PROTO_HH @@ -31,6 +42,9 @@ class Axis_group_engraver; class Bar_engraver; class Bar_req_collect_engraver; class Beaming_pattern; +class Beam_scoring_problem; +class Beam_configuration; +class Beam_quant_parameters; class Bezier; class Bezier_bow; class Book; @@ -43,6 +57,7 @@ class Cluster_engraver; class Column_x_positions; class Context; class Context_def; +class Context_mod; class Context_specced_music; class Dispatcher; class Dot_column; @@ -117,9 +132,6 @@ class Music_wrapper; class Music_wrapper_iterator; class Note_performer; class Output_def; -class Object_key; -class Object_key_dumper; -class Object_key_undumper; class Open_type_font; class Output_property; class Page_breaking; @@ -141,6 +153,7 @@ class Relative_octave_music; class Repeated_music; class Scale; class Scheme_hash_table; +class Scheme_engraver; class Score; class Score_context; class Score_engraver; @@ -166,8 +179,6 @@ class Staff_group_bar_engraver; class Staff_performer; class Stencil; class Stream_event; -class Swallow_engraver; -class Swallow_performer; class System; class Tempo_performer; class Tie; @@ -185,10 +196,10 @@ class Translator; class Translator_change; class Translator_group; class Transposed_music; -class Type_swallow_translator; class yyFlexLexer; -typedef void (*Engraver_void_function_engraver_grob_info) (Engraver *, Grob_info); +typedef void (*Engraver_void_function_engraver_grob_info) (Engraver *, + Grob_info); typedef void (*Translator_void_method_ptr) (Translator *); #endif /* LILY_PROTO_HH */ diff --git a/lily/include/lily-version.hh b/lily/include/lily-version.hh index c6c93fce8f..e2bca68b8a 100644 --- a/lily/include/lily-version.hh +++ b/lily/include/lily-version.hh @@ -1,9 +1,20 @@ /* - lily-version.hh -- declare version strings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Jan Nieuwenhuizen - (c) 1999--2009 Jan Nieuwenhuizen + 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 . */ #ifndef LILY_VERSION_HH diff --git a/lily/include/lilypond-version.hh b/lily/include/lilypond-version.hh index 3fd0f98fed..a832beb7c3 100644 --- a/lily/include/lilypond-version.hh +++ b/lily/include/lilypond-version.hh @@ -1,9 +1,20 @@ /* - lilypond-version.hh -- declare LilyPond_version + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #ifndef LILYPOND_VERSION_HH diff --git a/lily/include/line-interface.hh b/lily/include/line-interface.hh index 1103a6121e..1888062132 100644 --- a/lily/include/line-interface.hh +++ b/lily/include/line-interface.hh @@ -1,9 +1,20 @@ /* - line-interface.hh -- declare + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef LINE_INTERFACE_HH diff --git a/lily/include/listener.hh b/lily/include/listener.hh index 5b290f4f20..ed7aced9c9 100644 --- a/lily/include/listener.hh +++ b/lily/include/listener.hh @@ -1,9 +1,20 @@ /* - listener.hh -- declare Listener + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005 Erik Sandberg - (c) 2005 Erik Sandberg + 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 . */ #ifndef LISTENER_HH diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index 8f0844df71..d7157cf3c7 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -1,10 +1,21 @@ /* - lookup.hh -- declare Lookup + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #ifndef LOOKUP_HH @@ -20,10 +31,11 @@ struct Lookup static Stencil rotated_box (Real slope, Real width, Real thick, Real blot); static Stencil round_filled_polygon (vector const &points, Real blotdiameter); static Stencil frame (Box b, Real thick, Real blot); - static Stencil slur (Bezier controls, Real cthick, Real thick); - static Stencil bezier_sandwich (Bezier top_curve, Bezier bottom_curve); + static Stencil slur (Bezier controls, Real cthick, Real thick, + SCM dash_definition); + static Stencil bezier_sandwich (Bezier top_curve, Bezier bottom_curve, + Real thickness); static Stencil beam (Real slope, Real width, Real thick, Real blot); - static Stencil dashed_slur (Bezier b, Real thick, Real dash_period, Real dash_fraction); static Stencil blank (Box b); static Stencil filled_box (Box b); static Stencil round_filled_box (Box b, Real blotdiameter); diff --git a/lily/include/ly-module.hh b/lily/include/ly-module.hh index 8b76533f54..f4483ed2d9 100644 --- a/lily/include/ly-module.hh +++ b/lily/include/ly-module.hh @@ -1,16 +1,28 @@ /* - ly-module.hh -- declare module related helper functions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #ifndef LY_MODULE_HH #define LY_MODULE_HH +#include "config.hh" #include "lily-guile.hh" -SCM ly_make_anonymous_module (bool safe); +SCM ly_make_module (bool safe); SCM ly_module_copy (SCM dest, SCM src); SCM ly_module_2_alist (SCM mod); SCM ly_module_lookup (SCM module, SCM sym); @@ -18,14 +30,15 @@ SCM ly_modules_lookup (SCM modules, SCM sym, SCM); SCM ly_module_symbols (SCM mod); void ly_reexport_module (SCM mod); inline bool ly_is_module (SCM x) { return SCM_MODULEP (x); } -SCM ly_clear_anonymous_modules (); -void clear_anonymous_modules (); + SCM ly_use_module (SCM mod, SCM used); -/* Ugh signature of scm_internal_hash_fold () is inaccurate. */ -typedef SCM (*Hash_closure_function) (GUILE_ELLIPSIS); +/* For backward compatability with Guile 1.8 */ +#if !HAVE_GUILE_HASH_FUNC +typedef SCM (*scm_t_hash_fold_fn) (GUILE_ELLIPSIS); +typedef SCM (*scm_t_hash_handle_fn) (GUILE_ELLIPSIS); +#endif -#define MODULE_GC_KLUDGE #endif /* LY_MODULE_HH */ diff --git a/lily/include/ly-smobs.icc b/lily/include/ly-smobs.icc index 1cbd6ae389..1cb9e32590 100644 --- a/lily/include/ly-smobs.icc +++ b/lily/include/ly-smobs.icc @@ -1,14 +1,26 @@ /* - ly-smobs.icc -- implement smob glue. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef LY_SMOBS_ICC #define LY_SMOBS_ICC +#include "lily-guile-macros.hh" #include "smobs.hh" #define IMPLEMENT_TYPE_P(CL, FUNCNAME) \ @@ -16,7 +28,7 @@ void init_type_ ## CL () \ { \ SCM subr = scm_c_define_gsubr (FUNCNAME, 1, 0, 0, \ - (Scheme_function_unknown) CL::smob_p); \ + (scm_t_subr) CL::smob_p); \ CL ## _type_p_proc = subr; \ ly_add_function_documentation (subr, FUNCNAME, "(SCM x)", \ "Is @var{x} a @code{" #CL "} object?"); \ diff --git a/lily/include/lyric-extender.hh b/lily/include/lyric-extender.hh index 121774446e..94709ae72c 100644 --- a/lily/include/lyric-extender.hh +++ b/lily/include/lyric-extender.hh @@ -2,7 +2,7 @@ /* extender-spanner.hh -- part of GNU LilyPond - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen */ #ifndef EXTENDER_SPANNER_HH diff --git a/lily/include/lyric-hyphen.hh b/lily/include/lyric-hyphen.hh index 1551382e66..4617832282 100644 --- a/lily/include/lyric-hyphen.hh +++ b/lily/include/lyric-hyphen.hh @@ -1,7 +1,20 @@ /* - hyphen-spanner.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1999--2009 Glen Prideaux + Copyright (C) 1999--2011 Glen Prideaux + + 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 . */ #ifndef HYPHEN_SPANNER_HH diff --git a/lily/include/main.hh b/lily/include/main.hh index 8b0df589a4..7fa0905c83 100644 --- a/lily/include/main.hh +++ b/lily/include/main.hh @@ -1,9 +1,20 @@ /* - main.hh -- declare global entry points + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef MAIN_HH #define MAIN_HH diff --git a/lily/include/measure-grouping-spanner.hh b/lily/include/measure-grouping-spanner.hh index a595ceece4..0748770e6f 100644 --- a/lily/include/measure-grouping-spanner.hh +++ b/lily/include/measure-grouping-spanner.hh @@ -1,9 +1,20 @@ /* - measure-grouping-spanner.hh -- declare + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #ifndef MEASURE_GROUPING_SPANNER_HH diff --git a/lily/include/melody-spanner.hh b/lily/include/melody-spanner.hh index ba51c486ea..bcfab163e5 100644 --- a/lily/include/melody-spanner.hh +++ b/lily/include/melody-spanner.hh @@ -1,10 +1,20 @@ /* - melody-spanner.hh -- declare Melody_spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef MELODY_SPANNER_HH diff --git a/lily/include/mensural-ligature.hh b/lily/include/mensural-ligature.hh index fdc4e30651..cb676e5916 100644 --- a/lily/include/mensural-ligature.hh +++ b/lily/include/mensural-ligature.hh @@ -1,10 +1,21 @@ /* - mensural-ligature.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2002--2009 Juergen Reuter , + Copyright (C) 2002--2011 Juergen Reuter , Pal Benko + + 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 . */ #ifndef MENSURAL_LIGATURE_HH @@ -23,10 +34,12 @@ #define MLP_BREVIS 0x04 // mensural brevis head #define MLP_LONGA 0x08 // mensural brevis head with right cauda #define MLP_MAXIMA 0x10 // mensural maxima head without stem -#define MLP_FLEXA 0x20 // mensural flexa-like shape +#define MLP_FLEXA_BEGIN 0x20 // start of obliqua +#define MLP_FLEXA_END 0x40 // end of obliqua #define MLP_STEM (MLP_UP | MLP_DOWN) #define MLP_SINGLE_HEAD (MLP_BREVIS | MLP_LONGA | MLP_MAXIMA) +#define MLP_FLEXA (MLP_FLEXA_BEGIN | MLP_FLEXA_END) #define MLP_ANY (MLP_FLEXA | MLP_SINGLE_HEAD) struct Mensural_ligature diff --git a/lily/include/midi-chunk.hh b/lily/include/midi-chunk.hh index 00cfb15675..c567e904f1 100644 --- a/lily/include/midi-chunk.hh +++ b/lily/include/midi-chunk.hh @@ -1,10 +1,20 @@ -/* - midi-chunk.hh -- declare Midi_chunk - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #ifndef MIDI_CHUNK_HH @@ -40,7 +50,7 @@ public: void set (string header_string, string data_string, string footer_string); virtual string to_string () const; virtual string data_string () const; - DECLARE_CLASSNAME(Midi_chunk); + DECLARE_CLASSNAME (Midi_chunk); virtual ~Midi_chunk (); private: string data_string_; @@ -51,7 +61,7 @@ private: class Midi_header : public Midi_chunk { public: - DECLARE_CLASSNAME(Midi_header); + DECLARE_CLASSNAME (Midi_header); Midi_header (int format, int tracks, int clocks_per_4); }; @@ -60,11 +70,12 @@ class Midi_track : public Midi_chunk { public: int number_; - DECLARE_CLASSNAME(Midi_track); + int port_; + DECLARE_CLASSNAME (Midi_track); vector events_; - Midi_track (); + Midi_track (int number, bool port); ~Midi_track (); void add (int, Midi_item *midi); diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index 15ca2f0292..cc59ed0abe 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -1,7 +1,20 @@ /* - midi-item.hh -- declare Midi items + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef MIDI_ITEM_HH @@ -20,7 +33,7 @@ string int2midi_varint_string (int i); class Midi_item { public: - DECLARE_CLASSNAME(Midi_item); + DECLARE_CLASSNAME (Midi_item); Midi_item (); virtual ~Midi_item (); virtual char const *name () const; @@ -35,8 +48,8 @@ class Midi_channel_item : public Midi_item { public: int channel_; - DECLARE_CLASSNAME(Midi_channel_item); - Midi_channel_item (); + DECLARE_CLASSNAME (Midi_channel_item); + Midi_channel_item (Audio_item *ai); }; class Midi_duration : public Midi_item @@ -57,7 +70,7 @@ class Midi_instrument : public Midi_channel_item public: Midi_instrument (Audio_instrument *); - DECLARE_CLASSNAME(Midi_instrument); + DECLARE_CLASSNAME (Midi_instrument); virtual string to_string () const; Audio_instrument *audio_; @@ -67,7 +80,7 @@ class Midi_key : public Midi_item { public: Midi_key (Audio_key *); - DECLARE_CLASSNAME(Midi_key); + DECLARE_CLASSNAME (Midi_key); virtual string to_string () const; @@ -78,7 +91,7 @@ class Midi_time_signature : public Midi_item { public: Midi_time_signature (Audio_time_signature *); - DECLARE_CLASSNAME(Midi_time_signature); + DECLARE_CLASSNAME (Midi_time_signature); virtual string to_string () const; @@ -90,7 +103,7 @@ class Midi_note : public Midi_channel_item { public: Midi_note (Audio_note *); - DECLARE_CLASSNAME(Midi_note); + DECLARE_CLASSNAME (Midi_note); int get_semitone_pitch () const; int get_fine_tuning () const; @@ -107,7 +120,7 @@ class Midi_note_off : public Midi_note { public: Midi_note_off (Midi_note *); - DECLARE_CLASSNAME(Midi_note_off); + DECLARE_CLASSNAME (Midi_note_off); virtual string to_string () const; @@ -123,7 +136,7 @@ public: TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, MARKER, CUE_POINT }; - DECLARE_CLASSNAME(Midi_text); + DECLARE_CLASSNAME (Midi_text); Midi_text (Audio_text *); @@ -136,7 +149,7 @@ class Midi_dynamic : public Midi_channel_item { public: Midi_dynamic (Audio_dynamic *); - DECLARE_CLASSNAME(Midi_dynamic); + DECLARE_CLASSNAME (Midi_dynamic); virtual string to_string () const; @@ -147,7 +160,7 @@ class Midi_piano_pedal : public Midi_channel_item { public: Midi_piano_pedal (Audio_piano_pedal *); - DECLARE_CLASSNAME(Midi_piano_pedal); + DECLARE_CLASSNAME (Midi_piano_pedal); virtual string to_string () const; @@ -158,13 +171,11 @@ class Midi_tempo : public Midi_item { public: Midi_tempo (Audio_tempo *); - DECLARE_CLASSNAME(Midi_tempo); + DECLARE_CLASSNAME (Midi_tempo); virtual string to_string () const; Audio_tempo *audio_; }; - - #endif // MIDI_ITEM_HH diff --git a/lily/include/midi-stream.hh b/lily/include/midi-stream.hh index 6b9bd0c573..de719d2991 100644 --- a/lily/include/midi-stream.hh +++ b/lily/include/midi-stream.hh @@ -1,7 +1,20 @@ /* - midi-stream.hh -- declare Midi_stream + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef MIDI_STREAM_HH diff --git a/lily/include/midi-walker.hh b/lily/include/midi-walker.hh index 2ee7cc9417..3d99b34021 100644 --- a/lily/include/midi-walker.hh +++ b/lily/include/midi-walker.hh @@ -1,8 +1,21 @@ /* - midi-walker.hh -- declare Midi_walker + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #ifndef MIDI_WALKER_HH @@ -26,22 +39,22 @@ int compare (Midi_note_event const &left, Midi_note_event const &right); class Midi_walker { public: - Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track, - int channel); + Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track); ~Midi_walker (); void process (); void operator ++ (int); bool ok () const; void finalize (); + private: void do_start_note (Midi_note *note); void do_stop_notes (int); void output_event (int, Midi_item *l); Midi_item *get_midi (Audio_item*); - int channel_; Midi_track *track_; - Audio_staff *staff_; + bool percussion_; + bool merge_unisons_; vsize index_; vector items_; PQueue stop_note_queue; diff --git a/lily/include/mingw-compatibility.hh b/lily/include/mingw-compatibility.hh index b32d047732..3fa2a69d04 100644 --- a/lily/include/mingw-compatibility.hh +++ b/lily/include/mingw-compatibility.hh @@ -1,9 +1,20 @@ /* - mingw-compatibility.hh -- MINGW workarounds + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Jan Nieuwenhuizen - (c) 2005--2009 Jan Nieuwenhuizen + 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 . */ #ifndef MINGW_COMPATIBILITY_HH diff --git a/lily/include/minimal-page-breaking.hh b/lily/include/minimal-page-breaking.hh index 35dbae9d14..84207b0e14 100644 --- a/lily/include/minimal-page-breaking.hh +++ b/lily/include/minimal-page-breaking.hh @@ -1,11 +1,20 @@ /* - minimal-page-breaking.hh -- declare a page-breaker that stacks as - many systems on a page before moving to the next one. Specialized - for books with many pages, or a lot of text. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2007--2011 Nicolas Sceaux - (c) 2007--2009 Nicolas Sceaux + 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 . */ #ifndef MINIMAL_PAGE_BREAKING_HH diff --git a/lily/include/misc.hh b/lily/include/misc.hh index 12392c0cac..f36e7cecc6 100644 --- a/lily/include/misc.hh +++ b/lily/include/misc.hh @@ -1,9 +1,20 @@ /* - misc.hh -- declare miscellaneous functions. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef MISC_HH @@ -47,6 +58,7 @@ Real directed_round (Real f, Direction d); Real peak_around (Real epsilon, Real threshold, Real x); Real convex_amplifier (Real standard_x, Real increase_factor, Real x); string camel_case_to_lisp_identifier (string in); +vsize utf8_char_len (char); #endif diff --git a/lily/include/modified-font-metric.hh b/lily/include/modified-font-metric.hh index 101949674c..04af68b6e7 100644 --- a/lily/include/modified-font-metric.hh +++ b/lily/include/modified-font-metric.hh @@ -1,9 +1,20 @@ /* - modified-font-metric.hh -- declare Font_metric + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef MODIFIED_FONT_METRIC_HH @@ -15,9 +26,7 @@ struct Modified_font_metric : public Font_metric { public: - Box text_dimension (string) const; - Box word_dimension (string) const; - Stencil text_stencil (string) const; + Stencil text_stencil (Output_def *output_state, string, bool) const; static SCM make_scaled_font_metric (Font_metric *fm, Real magnification); size_t count () const; @@ -36,9 +45,7 @@ protected: string font_name () const; Real design_size () const; void derived_mark () const; - Box get_indexed_char (size_t) const; - size_t index_to_ascii (size_t) const; - Box get_ascii_char (size_t) const; + Box get_indexed_char_dimensions (size_t) const; }; #endif /* MODIFIED_FONT_METRIC_HH */ diff --git a/lily/include/moment.hh b/lily/include/moment.hh index 87bbdb9b31..6a3922066e 100644 --- a/lily/include/moment.hh +++ b/lily/include/moment.hh @@ -1,9 +1,20 @@ /* - moment.hh -- declare Moment + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef MOMENT_HH diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh index ecc82974ac..7c07b3c8dc 100644 --- a/lily/include/multi-measure-rest.hh +++ b/lily/include/multi-measure-rest.hh @@ -1,9 +1,20 @@ /* - multi-measure-rest.hh -- declare Multi_measure_rest + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #ifndef MULTI_MEASURE_REST_HH diff --git a/lily/include/music-function.hh b/lily/include/music-function.hh index f5d44ff365..986337b39c 100644 --- a/lily/include/music-function.hh +++ b/lily/include/music-function.hh @@ -1,9 +1,20 @@ /* - music-head.hh -- declare music_function + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef MUSIC_FUNCTION_HH diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index 90d870833e..863f87f31b 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -1,9 +1,20 @@ /* - music-iterator.hh -- declare Music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef MUSIC_ITERATOR_HH diff --git a/lily/include/music-output.hh b/lily/include/music-output.hh index 7ad760eb21..27c6c423a8 100644 --- a/lily/include/music-output.hh +++ b/lily/include/music-output.hh @@ -1,9 +1,20 @@ /* - music-output.hh -- declare Music_output + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef MUSIC_OUTPUT_HH diff --git a/lily/include/music-sequence.hh b/lily/include/music-sequence.hh index e01058bbfc..711209ca1f 100644 --- a/lily/include/music-sequence.hh +++ b/lily/include/music-sequence.hh @@ -1,9 +1,20 @@ /* - music-sequence.hh -- declare Music_sequence + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef MUSIC_SEQUENCE_HH @@ -22,6 +33,7 @@ public: DECLARE_SCHEME_CALLBACK (first_start_callback, (SCM)); DECLARE_SCHEME_CALLBACK (simultaneous_relative_callback, (SCM, SCM)); DECLARE_SCHEME_CALLBACK (event_chord_relative_callback, (SCM, SCM)); + DECLARE_SCHEME_CALLBACK (repeated_chord_relative_callback, (SCM, SCM)); Pitch do_relative_octave (Pitch p, bool b); diff --git a/lily/include/music-wrapper-iterator.hh b/lily/include/music-wrapper-iterator.hh index b36fd6a97a..82a069574e 100644 --- a/lily/include/music-wrapper-iterator.hh +++ b/lily/include/music-wrapper-iterator.hh @@ -1,9 +1,20 @@ /* - music-wrapper-iterator.hh -- declare Music_wrapper_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #ifndef MUSIC_WRAPPER_ITERATOR_HH diff --git a/lily/include/music-wrapper.hh b/lily/include/music-wrapper.hh index 4554a1d114..1017afd627 100644 --- a/lily/include/music-wrapper.hh +++ b/lily/include/music-wrapper.hh @@ -1,9 +1,20 @@ /* - music-wrapper.hh -- declare Music_wrapper + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #ifndef MUSIC_WRAPPER_HH diff --git a/lily/include/music.hh b/lily/include/music.hh index 00d6f1962c..e3fdb3f83d 100644 --- a/lily/include/music.hh +++ b/lily/include/music.hh @@ -1,9 +1,20 @@ /* - music.hh -- declare Music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef MUSIC_HH diff --git a/lily/include/note-collision.hh b/lily/include/note-collision.hh index b416f1d153..b2464067c8 100644 --- a/lily/include/note-collision.hh +++ b/lily/include/note-collision.hh @@ -1,9 +1,20 @@ /* - collision.hh -- declare Collision + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef COLLISION_HH diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index d745d68613..d2138e9fcd 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -1,9 +1,20 @@ /* - note-column.hh -- declare Note_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef NOTE_COLUMN_HH @@ -26,7 +37,6 @@ public: static Grob *accidentals (Grob *me); static Grob *arpeggio (Grob *me); static Slice head_positions_interval (Grob *me); - static void translate_rests (Grob *me, int dy); static Grob *first_head (Grob *me); static Grob *get_rest (Grob *me); static void set_stem (Grob *me, Grob *); diff --git a/lily/include/note-head.hh b/lily/include/note-head.hh index 6e759b1e9c..a7faff9305 100644 --- a/lily/include/note-head.hh +++ b/lily/include/note-head.hh @@ -1,7 +1,20 @@ /* - note-head.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef NOTEHEAD_HH @@ -18,6 +31,7 @@ public: DECLARE_SCHEME_CALLBACK (brew_ez_stencil, (SCM)); DECLARE_SCHEME_CALLBACK (stem_x_shift, (SCM)); DECLARE_SCHEME_CALLBACK (calc_stem_attachment, (SCM)); + DECLARE_SCHEME_CALLBACK (include_ledger_line_height, (SCM)); DECLARE_GROB_INTERFACE(); static Real stem_attachment_coordinate (Grob *, Axis a); diff --git a/lily/include/note-spacing.hh b/lily/include/note-spacing.hh index f7d5dfb65f..d5465b639f 100644 --- a/lily/include/note-spacing.hh +++ b/lily/include/note-spacing.hh @@ -1,9 +1,20 @@ /* - note-spacing.hh -- declare Note_spacing + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #ifndef NOTE_SPACING_HH diff --git a/lily/include/open-type-font.hh b/lily/include/open-type-font.hh index 475cc4c169..486606fd95 100644 --- a/lily/include/open-type-font.hh +++ b/lily/include/open-type-font.hh @@ -1,9 +1,20 @@ /* - open-type-font.hh -- declare Open_type_font + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef OPEN_TYPE_FONT_HH @@ -42,7 +53,7 @@ public: ~Open_type_font (); Offset attachment_point (string) const; size_t count () const; - Box get_indexed_char (size_t) const; + Box get_indexed_char_dimensions (size_t) const; size_t name_to_index (string) const; //size_t glyph_name_to_charcode (string) const; size_t index_to_charcode (size_t) const; diff --git a/lily/include/optimal-page-breaking.hh b/lily/include/optimal-page-breaking.hh index f47efa9f92..1bfd8d5b1b 100644 --- a/lily/include/optimal-page-breaking.hh +++ b/lily/include/optimal-page-breaking.hh @@ -1,11 +1,20 @@ /* - optimal-page-breaking.hh -- declare a page-breaker that - will break pages in such a way that both horizontal and - vertical spacing will be acceptable + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #ifndef OPTIMAL_PAGE_BREAKING_HH diff --git a/lily/include/output-def.hh b/lily/include/output-def.hh index b683cc61f1..531bd12543 100644 --- a/lily/include/output-def.hh +++ b/lily/include/output-def.hh @@ -1,13 +1,24 @@ /* - music-output-def.hh -- declare Output_def + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ -#ifndef MUSIC_OUTPUT_DEF_HH -#define MUSIC_OUTPUT_DEF_HH +#ifndef OUTPUT_DEF_HH +#define OUTPUT_DEF_HH #include "lily-proto.hh" #include "virtual-methods.hh" @@ -47,7 +58,6 @@ public: Output_def *parent_; Input input_origin_; - string user_key_; Output_def (Output_def const&); Output_def (); @@ -58,13 +68,14 @@ public: SCM c_variable (string id) const; SCM lookup_variable (SCM sym) const; void set_variable (SCM sym, SCM val); + void normalize (); Real get_dimension (SCM symbol) const; }; SCM get_font_table (Output_def *def); void assign_context_def (Output_def *m, SCM transdef); SCM find_context_def (Output_def const *m, SCM name); -Interval line_dimensions_int (Output_def*def, int); +Interval line_dimensions_int (Output_def *def, int); Font_metric *select_encoded_font (Output_def *layout, SCM chain); @@ -74,9 +85,10 @@ DECLARE_UNSMOB (Output_def, output_def); Font_metric* find_pango_font (Output_def *layout, SCM descr, Real factor); -Font_metric *find_scaled_font (Output_def *od, Font_metric *f, Real magnification); +Font_metric *find_scaled_font (Output_def *od, Font_metric *f, + Real magnification); Output_def *scale_output_def (Output_def *def, Real scale); Real output_scale (Output_def*); -#endif /* MUSIC_OUTPUT_DEF_HH */ +#endif /* OUTPUT_DEF_HH */ diff --git a/lily/include/page-breaking.hh b/lily/include/page-breaking.hh index 0070a980ca..17f64d754b 100644 --- a/lily/include/page-breaking.hh +++ b/lily/include/page-breaking.hh @@ -1,10 +1,20 @@ /* - page-breaking.hh -- declare a superclass and utility - functions for several different page-breaking algorithms + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #ifndef PAGE_BREAKING_HH @@ -42,24 +52,30 @@ struct System_spec struct Break_position { /* - index in system_spec_index_, if VPOS start of book. + index into system_specs_, if this is VPOS, the Break_position represents the + start of the book. */ vsize system_spec_index_; - /* if system_spec_index_ is a score, then we start at the score_brk_'th possible - page-break in the score */ + /* if system_spec_index_ indexes a score, then we start at the score_brk_'th + possible page-break in the score */ vsize score_break_; - /* if system_spec_index_ is a score, this points to the broken column */ + /* if system_spec_index_ indexes a score, this points to the broken column */ Grob *col_; bool score_ender_; + /* if non-zero, this is the (fixed, uncompressed) number of lines between + this Break_position and the previous. */ + int forced_line_count_; + Break_position (vsize s=VPOS, vsize brk=VPOS, Grob *g=NULL, bool end=false) { system_spec_index_ = s; score_break_ = brk; col_ = g; score_ender_ = end; + forced_line_count_ = 0; } /* @@ -84,6 +100,7 @@ class Page_breaking { public: typedef bool (*Break_predicate) (Grob *); + typedef bool (*Prob_break_predicate) (Prob *); typedef vector Line_division; /* @@ -94,16 +111,29 @@ public: */ virtual SCM solve () = 0; - Page_breaking (Paper_book *pb, Break_predicate); + Page_breaking (Paper_book *pb, Break_predicate, Prob_break_predicate); virtual ~Page_breaking (); bool ragged () const; bool ragged_last () const; bool is_last () const; bool ends_score () const; + int systems_per_page () const; + int max_systems_per_page () const; + int min_systems_per_page () const; Real page_height (int page_number, bool last) const; - Real page_top_space () const; + Real paper_height () const; vsize system_count () const; + Real footnote_separator_stencil_height () const; + Real footnote_padding () const; + Real footnote_footer_padding () const; + Real line_count_penalty (int line_count) const; + int line_count_status (int line_count) const; + bool too_many_lines (int line_count) const; + bool too_few_lines (int line_count) const; + Real min_whitespace_at_top_of_page (Line_details const&) const; + Real min_whitespace_at_bottom_of_page (Line_details const&) const; + int orphan_penalty () const; protected: Paper_book *book_; @@ -118,6 +148,7 @@ protected: void break_into_pieces (vsize start, vsize end, Line_division const &div); SCM systems (); + SCM footnotes (); void set_current_breakpoints (vsize start, vsize end, @@ -129,11 +160,14 @@ protected: vsize current_configuration_count () const; Line_division current_configuration (vsize configuration_index) const; Page_spacing_result space_systems_on_n_pages (vsize configuration_index, - vsize n, vsize first_page_num); + vsize n, vsize first_page_num); Page_spacing_result space_systems_on_n_or_one_more_pages (vsize configuration_index, vsize n, - vsize first_page_num); + vsize first_page_num, + Real penalty_for_fewer_pages); Page_spacing_result space_systems_on_best_pages (vsize configuration_index, - vsize first_page_num); + vsize first_page_num); + Page_spacing_result space_systems_with_fixed_number_per_page (vsize configuration_index, + vsize first_page_num); Page_spacing_result pack_systems_on_least_pages (vsize configuration_index, vsize first_page_num); vsize min_page_count (vsize configuration_index, vsize first_page_num); @@ -150,8 +184,14 @@ private: vector line_breaking_; bool ragged_; bool ragged_last_; - Real page_top_space_; + int systems_per_page_; + int max_systems_per_page_; + int min_systems_per_page_; vsize system_count_; + Real footnote_separator_stencil_height_; + Real footnote_padding_; + Real footnote_footer_padding_; + int orphan_penalty_; vector current_configurations_; vector current_chunks_; @@ -159,11 +199,16 @@ private: vsize current_end_breakpoint_; void cache_line_details (vsize configuration_index); + void compute_line_heights (); void clear_line_details_cache (); vsize cached_configuration_index_; vector cached_line_details_; vector uncompressed_line_details_; + Real paper_height_; + mutable vector page_height_cache_; + mutable vector last_page_height_cache_; + vector chunk_list (vsize start, vsize end); Line_division system_count_bounds (vector const &chunks, bool min); void line_breaker_args (vsize i, @@ -182,6 +227,9 @@ private: Page_spacing_result space_systems_on_2_pages (vsize configuration_index, vsize first_page_num); Page_spacing_result finalize_spacing_result (vsize configuration_index, Page_spacing_result); void create_system_list (); - void find_chunks_and_breaks (Break_predicate); + 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); }; #endif /* PAGE_BREAKING_HH */ diff --git a/lily/include/page-layout-problem.hh b/lily/include/page-layout-problem.hh new file mode 100644 index 0000000000..ff6fcece22 --- /dev/null +++ b/lily/include/page-layout-problem.hh @@ -0,0 +1,98 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2009--2011 Joe Neeman + + 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 . +*/ + +#ifndef PAGE_LAYOUT_HH +#define PAGE_LAYOUT_HH + +#include "simple-spacer.hh" +#include "skyline.hh" + +class Page_layout_problem +{ +public: + Page_layout_problem (Paper_book*, SCM page, SCM systems); + + SCM solution (bool ragged); + void set_header_height (Real); + void set_footer_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 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); + static void add_footnotes_to_footer (SCM footnotes, Stencil *foot, Paper_book *pb); + +protected: + void append_system (System*, Spring const&, Real indent, Real padding); + void append_prob (Prob*, Spring const&, Real padding); + + void solve_rod_spring_problem (bool ragged); + SCM find_system_offsets (); + void distribute_loose_lines (vector const&, vector const&, Real, Real); + + static void build_system_skyline (vector const&, vector const&, Skyline* up, Skyline* down); + static vector filter_dead_elements (vector const&); + + // This is a union (in spirit). + // Either staves must be empty or prob must be null. + typedef struct Element { + Prob *prob; + vector staves; + vector min_offsets; + // Store the appropriate '*-*-spacing 'padding, + // for spacing any adjacent loose line + Real padding; + + Element (vector const& a, vector const& o, Real p) + { + staves = a; + min_offsets = o; + padding = p; + prob = 0; + } + + Element (Prob *p, Real pad) + { + prob = p; + padding = pad; + } + } Element; + + static Interval first_staff_extent (Element const&); + static Interval last_staff_extent (Element const&); + static Interval prob_extent (Prob*); + static SCM get_details (Element const&); + static SCM details_get_property (SCM details, const char*); + static void alter_spring_from_spacing_spec (SCM spec, Spring* spring); + static void mark_as_spaceable (Grob*); + + vector springs_; + vector elements_; + vector solution_; + Skyline bottom_skyline_; + Real page_height_; + Real header_height_; + Real footer_height_; + Real header_padding_; + Real footer_padding_; +}; + +#endif /* PAGE_LAYOUT_HH */ diff --git a/lily/include/page-marker.hh b/lily/include/page-marker.hh index 12ddb8ccdf..6c3769828f 100644 --- a/lily/include/page-marker.hh +++ b/lily/include/page-marker.hh @@ -1,15 +1,27 @@ /* - page-marker.hh -- declare Page_marker + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2007--2011 Nicolas Sceaux - (c) 2007--2009 Nicolas Sceaux + 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 . */ #ifndef PAGE_MARKER_HH #define PAGE_MARKER_HH #include "smobs.hh" +#include "virtual-methods.hh" class Page_marker { @@ -21,7 +33,9 @@ class Page_marker public: Page_marker (); - + Page_marker (Page_marker const &); + VIRTUAL_COPY_CONSTRUCTOR (Page_marker, Page_marker); + void set_permission (SCM symbol, SCM permission); void set_label (SCM label); diff --git a/lily/include/page-spacing-result.hh b/lily/include/page-spacing-result.hh index 870fbda7e1..6d32bc6c2b 100644 --- a/lily/include/page-spacing-result.hh +++ b/lily/include/page-spacing-result.hh @@ -1,10 +1,20 @@ -/* - page-spacing-result.hh -- declare Page_spacing_result - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #ifndef PAGE_SPACING_RESULT_HH @@ -13,15 +23,25 @@ #include "std-vector.hh" #include "lily-proto.hh" +// This enum is a bitfield: since we use one System_count_status +// to represent the system count of several pages simultaneously, +// it could be that one page has too many systems while another +// has too few. +typedef enum { + SYSTEM_COUNT_OK = 0, + SYSTEM_COUNT_TOO_MANY = 1, + SYSTEM_COUNT_TOO_FEW = 2 +} System_count_status; + struct Page_spacing_result { vector systems_per_page_; vector force_; Real penalty_; Real demerits_; + int system_count_status_; Real average_force () const; vsize page_count () const; - vsize system_count () const; void print () const; Page_spacing_result (); }; diff --git a/lily/include/page-spacing.hh b/lily/include/page-spacing.hh index 96dba0ffa6..206bcbf426 100644 --- a/lily/include/page-spacing.hh +++ b/lily/include/page-spacing.hh @@ -1,10 +1,20 @@ /* - page-spacing.hh -- routines for spacing systems - vertically across pages + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #ifndef PAGE_SPACING_HH @@ -13,6 +23,26 @@ #include "constrained-breaking.hh" #include "page-spacing-result.hh" +/* This is a penalty that we add whenever a page breaking solution + is not bad enough to completely discard, but bad enough that + it is worse than any "proper" solution. For example, if we didn't + manage to fit systems on the desired number of pages or if there was + too big for a page. + + This constant is large enough that it dominates any reasonable penalty, + but small enough that nothing will overflow to infinity (so that we + can still distinguish bad spacings by the number of BAD_SPACING_PENALTYs + that they incur. + + BAD_SPACING_PENALTY is for occasions where the spacing is bad. + TERRIBLE_SPACING_PENALTY is for when we are disregarding a user override + (for example, we are failing to satisfy min-systems-per-page). These user + overrides are more important than getting good spacing, so they get a + larger penalty. +*/ +const Real BAD_SPACING_PENALTY = 1e6; +const Real TERRIBLE_SPACING_PENALTY = 1e8; + /* for page_count > 2, we use a dynamic algorithm similar to constrained-breaking -- we have a class that stores the intermediate @@ -23,6 +53,7 @@ class Page_spacer public: Page_spacer (vector const &lines, vsize first_page_num, Page_breaking const*); Page_spacing_result solve (vsize page_count); + Page_spacing_result solve (); private: struct Page_spacing_node @@ -33,18 +64,28 @@ private: force_ = infinity_f; penalty_ = infinity_f; prev_ = VPOS; + system_count_status_ = SYSTEM_COUNT_OK; + page_ = 0; } Real demerits_; Real force_; Real penalty_; vsize prev_; + vsize page_; + int system_count_status_; }; Page_breaking const *breaker_; vsize first_page_num_; vector lines_; + + // If a page-count is requested, we use state_, which + // is indexed by page*system, for our dynamic programming + // intermediate storage. Otherwise, we use simple_state_, + // which is indexed only by system. Matrix state_; + vector simple_state_; vsize max_page_count_; bool ragged_; @@ -61,20 +102,23 @@ struct Page_spacing Real rod_height_; Real spring_len_; Real inverse_spring_k_; - Real page_top_space_; + bool has_footnotes_; Line_details last_line_; Line_details first_line_; + Page_breaking const *breaker_; - Page_spacing (Real page_height, Real page_top_space) + Page_spacing (Real page_height, Page_breaking const *breaker) { page_height_ = page_height; - page_top_space_ = page_top_space; + breaker_ = breaker; + has_footnotes_ = false; clear (); } void calc_force (); void resize (Real new_height); + Real account_for_footnotes (Line_details const &line); void append_system (const Line_details &line); void prepend_system (const Line_details &line); void clear (); diff --git a/lily/include/page-turn-page-breaking.hh b/lily/include/page-turn-page-breaking.hh index f5e7ada761..6717e5ba4a 100644 --- a/lily/include/page-turn-page-breaking.hh +++ b/lily/include/page-turn-page-breaking.hh @@ -1,11 +1,20 @@ /* - page-turn-page-breaking.hh -- break lines and pages optimally - for a whole Paper_book such that page turns can only occur - at specific places. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #ifndef PAGE_TURN_PAGE_BREAKING_HH diff --git a/lily/include/pango-font.hh b/lily/include/pango-font.hh index 09f3ff7fad..3d435af9ca 100644 --- a/lily/include/pango-font.hh +++ b/lily/include/pango-font.hh @@ -1,9 +1,20 @@ /* - pango-font.hh -- declare Pango_font + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef PANGO_FONT_HH @@ -38,12 +49,11 @@ public: string description_string () const; SCM font_file_name () const; void register_font_file (string, string, int); - Stencil text_stencil (string, bool tight) const; - Stencil pango_item_string_stencil (PangoItem const *, string, bool tight) const; + Stencil pango_item_string_stencil (PangoGlyphItem const *) const; - virtual Stencil word_stencil (string) const; - virtual Stencil text_stencil (string) const; + virtual Stencil text_stencil (Output_def *output_state, + string text, bool music) const; virtual void derived_mark () const; }; diff --git a/lily/include/paper-book.hh b/lily/include/paper-book.hh index 90e816f66d..dd05ee41d2 100644 --- a/lily/include/paper-book.hh +++ b/lily/include/paper-book.hh @@ -1,9 +1,20 @@ /* - paper-book.hh -- declare Paper_book + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Jan Nieuwenhuizen - (c) 2004--2009 Jan Nieuwenhuizen + 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 . */ #ifndef PAPER_BOOK_HH #define PAPER_BOOK_HH diff --git a/lily/include/paper-column-engraver.hh b/lily/include/paper-column-engraver.hh index d0b2a97bf1..449b26d9a4 100644 --- a/lily/include/paper-column-engraver.hh +++ b/lily/include/paper-column-engraver.hh @@ -1,9 +1,20 @@ /* - paper-column-engraver.hh -- declare Paper_column_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef PAPER_COLUMN_ENGRAVER_HH @@ -45,6 +56,7 @@ protected: Paper_column *musical_column_; vector items_; bool first_; + bool made_columns_; Moment last_moment_; public: diff --git a/lily/include/paper-column.hh b/lily/include/paper-column.hh index 719e7d5e49..bc2eec12c2 100644 --- a/lily/include/paper-column.hh +++ b/lily/include/paper-column.hh @@ -1,9 +1,20 @@ /* - paper-column.hh -- declare Paper_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef PAPER_COLUMN_HH @@ -18,9 +29,6 @@ class Paper_column : public Item /// if lines are broken then this column is in #line# System *system_; - // ugh: friend declarations. - friend void set_loose_columns (System *which, Column_x_positions const *posns); - friend class System; public: Paper_column (SCM); Paper_column (Paper_column const &); @@ -50,8 +58,7 @@ public: static bool is_breakable (Grob *); static bool is_extraneous_column_from_ligature (Grob *); static Real minimum_distance (Grob *l, Grob *r); - static Interval break_align_width (Grob *me); + static Interval break_align_width (Grob *me, SCM align_sym); }; #endif // PAPER_COLUMN_HH - diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh index 6779e1d942..c0cb9f22ef 100644 --- a/lily/include/paper-outputter.hh +++ b/lily/include/paper-outputter.hh @@ -1,9 +1,20 @@ /* - paper-outputter.hh -- declare Paper_outputter + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef PAPER_OUTPUTTER_HH @@ -29,13 +40,15 @@ public: DECLARE_SMOBS (Paper_outputter); public: - SCM file () const; + Paper_outputter (SCM port, string format); + + void close (); SCM dump_string (SCM); + SCM file () const; + SCM module () const; void output_scheme (SCM scm); - Paper_outputter (SCM port, string format); - SCM scheme_to_string (SCM); void output_stencil (Stencil); - void close (); + SCM scheme_to_string (SCM); }; Paper_outputter *get_paper_outputter (string, string); diff --git a/lily/include/paper-score.hh b/lily/include/paper-score.hh index b55fd90727..aec2846232 100644 --- a/lily/include/paper-score.hh +++ b/lily/include/paper-score.hh @@ -1,9 +1,20 @@ /* - paper-score.hh -- declare Paper_score + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #ifndef PAPER_SCORE_HH @@ -22,6 +33,7 @@ class Paper_score : public Music_output mutable vector cols_; mutable vector break_indices_; + mutable vector break_ranks_; public: Paper_score (Output_def *); @@ -32,11 +44,12 @@ public: void typeset_system (System *); vector calc_breaking (); - vector find_break_indices () const; vector get_break_indices () const; + vector get_break_ranks () const; vector get_columns () const; SCM get_paper_systems (); protected: + void find_break_indices () const; virtual void process (); virtual void derived_mark () const; diff --git a/lily/include/paper-system.hh b/lily/include/paper-system.hh index 25af72e025..1aaa530b8a 100644 --- a/lily/include/paper-system.hh +++ b/lily/include/paper-system.hh @@ -1,9 +1,20 @@ /* - paper-system.hh -- declare Paper_system + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Jan Nieuwenhuizen - (c) 2004--2009 Jan Nieuwenhuizen + 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 . */ #ifndef PAPER_SYSTEM_HH #define PAPER_SYSTEM_HH @@ -19,5 +30,6 @@ */ Prob *make_paper_system (SCM immutable_init); void paper_system_set_stencil (Prob *prob, Stencil s); +SCM get_footnotes (SCM expr); #endif /* PAPER_SYSTEM_HH */ diff --git a/lily/include/parse-scm.hh b/lily/include/parse-scm.hh index f6bff19a65..0322502e16 100644 --- a/lily/include/parse-scm.hh +++ b/lily/include/parse-scm.hh @@ -1,9 +1,20 @@ /* - lily-guile.hh encapsulate guile + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef PARSE_SCM_HH diff --git a/lily/include/percent-repeat-item.hh b/lily/include/percent-repeat-item.hh index 5f23473745..a9e59e35f5 100644 --- a/lily/include/percent-repeat-item.hh +++ b/lily/include/percent-repeat-item.hh @@ -1,9 +1,20 @@ /* - percent-repeat-item.hh -- declare Percent_repeat_item_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #ifndef PERCENT_REPEAT_ITEM_HH @@ -19,7 +30,7 @@ public: DECLARE_SCHEME_CALLBACK (beat_slash, (SCM)); DECLARE_SCHEME_CALLBACK (double_percent, (SCM)); static Stencil x_percent (Grob *, int); - static Stencil brew_slash (Grob *); + static Stencil brew_slash (Grob *, int); }; #endif /* PERCENT_REPEAT_ITEM_HH */ diff --git a/lily/include/performance.hh b/lily/include/performance.hh index 2553131f10..9612fb8aed 100644 --- a/lily/include/performance.hh +++ b/lily/include/performance.hh @@ -1,7 +1,20 @@ /* - performance.hh -- declare Performance + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef PERFORMANCE_HH @@ -14,7 +27,7 @@ class Performance : public Music_output { public: - Performance (); + Performance (bool ports=false); ~Performance (); DECLARE_CLASSNAME(Performance); @@ -30,6 +43,7 @@ public: vector audio_staffs_; vector audio_elements_; Output_def *midi_; + bool ports_; }; #endif /* PERFORMANCE_HH */ diff --git a/lily/include/performer-group.hh b/lily/include/performer-group.hh index 1a7d8087d8..16cc7d71cc 100644 --- a/lily/include/performer-group.hh +++ b/lily/include/performer-group.hh @@ -1,8 +1,21 @@ /* - performer-group.hh -- declare Performer_group + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #ifndef PERFORMER_GROUP_HH diff --git a/lily/include/performer.hh b/lily/include/performer.hh index a94165a6bd..686479c6f1 100644 --- a/lily/include/performer.hh +++ b/lily/include/performer.hh @@ -1,8 +1,21 @@ /* - performer.hh -- declare Performer + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #ifndef PERFORMER_HH @@ -27,5 +40,7 @@ protected: virtual void create_audio_elements (); }; +Performer *unsmob_performer (SCM perf); + #endif /* PERFORMER_HH */ diff --git a/lily/include/pitch-interval.hh b/lily/include/pitch-interval.hh index 15df8ee933..a6e027f8ba 100644 --- a/lily/include/pitch-interval.hh +++ b/lily/include/pitch-interval.hh @@ -1,9 +1,20 @@ /* - pitch-interval.hh -- declare Pitch_interval + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef PITCH_INTERVAL_HH diff --git a/lily/include/pitch.hh b/lily/include/pitch.hh index 42a76522f4..1ef59f3e94 100644 --- a/lily/include/pitch.hh +++ b/lily/include/pitch.hh @@ -1,27 +1,38 @@ /* - pitch.hh -- declare Pitch + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ -#ifndef MUSICAL_PITCH_HH -#define MUSICAL_PITCH_HH +#ifndef PITCH_HH +#define PITCH_HH #include "lily-proto.hh" #include "smobs.hh" #include "rational.hh" -/** A "tonal" pitch. This is a pitch used in diatonal western music - (24 quartertones in an octave), as opposed to a frequency in Hz or a - integer number of semitones. - - Pitch is lexicographically ordered by (octave, notename, - alteration). +/* + A "tonal" pitch. This is a pitch used in diatonal western music + (24 quartertones in an octave), as opposed to a frequency in Hz or a + integer number of semitones. + Pitch is lexicographically ordered by (octave, notename, alteration). */ + class Pitch { private: @@ -49,6 +60,8 @@ public: Pitch transposed (Pitch) const; Pitch to_relative_octave (Pitch) const; + Pitch normalized () const; + static int compare (Pitch const &, Pitch const &); int steps () const; @@ -75,15 +88,15 @@ enum { DOUBLE_SHARP, }; -extern Rational DOUBLE_FLAT_ALTERATION; -extern Rational THREE_Q_FLAT_ALTERATION; -extern Rational FLAT_ALTERATION; -extern Rational SEMI_FLAT_ALTERATION; -extern Rational NATURAL_ALTERATION; -extern Rational SEMI_SHARP_ALTERATION; -extern Rational SHARP_ALTERATION; -extern Rational THREE_Q_SHARP_ALTERATION; -extern Rational DOUBLE_SHARP_ALTERATION; +extern Rational DOUBLE_FLAT_ALTERATION; +extern Rational THREE_Q_FLAT_ALTERATION; +extern Rational FLAT_ALTERATION; +extern Rational SEMI_FLAT_ALTERATION; +extern Rational NATURAL_ALTERATION; +extern Rational SEMI_SHARP_ALTERATION; +extern Rational SHARP_ALTERATION; +extern Rational THREE_Q_SHARP_ALTERATION; +extern Rational DOUBLE_SHARP_ALTERATION; SCM ly_pitch_diff (SCM pitch, SCM root); SCM ly_pitch_transpose (SCM p, SCM delta); @@ -94,5 +107,4 @@ INSTANTIATE_COMPARE (Pitch, Pitch::compare); extern SCM pitch_less_proc; Pitch pitch_interval (Pitch const &from, Pitch const &to); -#endif /* MUSICAL_PITCH_HH */ - +#endif /* PITCH_HH */ diff --git a/lily/include/pointer-group-interface.hh b/lily/include/pointer-group-interface.hh index 54b0e5b906..4d1a96aede 100644 --- a/lily/include/pointer-group-interface.hh +++ b/lily/include/pointer-group-interface.hh @@ -1,9 +1,20 @@ /* - pointer-group-interface.hh -- declare Pointer_group_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef POINTER_GROUP_INTERFACE_HH diff --git a/lily/include/prob.hh b/lily/include/prob.hh index 069aa07924..5d4a50029f 100644 --- a/lily/include/prob.hh +++ b/lily/include/prob.hh @@ -1,9 +1,20 @@ /* - property-object.hh -- declare Property_object + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Jan Nieuwenhuizen - (c) 2004--2009 Jan Nieuwenhuizen + 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 . */ #ifndef PROPERTY_OBJECT_HH @@ -50,7 +61,7 @@ public: DECLARE_UNSMOB(Prob,prob); SCM ly_prob_set_property_x (SCM system, SCM sym, SCM value); -SCM ly_prob_property (SCM system, SCM sym, SCM dfault); +SCM ly_prob_property (SCM prob, SCM sym, SCM val); SCM ly_prob_type_p (SCM obj, SCM sym); diff --git a/lily/include/profile.hh b/lily/include/profile.hh index 53a7175eb7..3a2deab250 100644 --- a/lily/include/profile.hh +++ b/lily/include/profile.hh @@ -1,9 +1,20 @@ /* - profile.hh -- declare property profiling utils. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef PROFILE_HH diff --git a/lily/include/program-option.hh b/lily/include/program-option.hh index ec4103619e..607a8ecdf8 100644 --- a/lily/include/program-option.hh +++ b/lily/include/program-option.hh @@ -1,9 +1,20 @@ /* - program-option.hh -- declare Scheme options + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Jan Nieuwenhuizen - (c) 2001--2009 Jan Nieuwenhuizen + 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 . */ #ifndef SCM_OPTION_HH #define SCM_OPTION_HH diff --git a/lily/include/property-iterator.hh b/lily/include/property-iterator.hh index 349929b7c5..8aa0cec11d 100644 --- a/lily/include/property-iterator.hh +++ b/lily/include/property-iterator.hh @@ -1,9 +1,20 @@ /* - property-iterator.hh -- declare Property_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef PROPERTY_ITERATOR_HH diff --git a/lily/include/protected-scm.hh b/lily/include/protected-scm.hh index d5a6463bc0..b8f9b084c2 100644 --- a/lily/include/protected-scm.hh +++ b/lily/include/protected-scm.hh @@ -1,9 +1,20 @@ /* - protected-scm.hh -- declare Protected_scm + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #ifndef PROTECTED_SCM_HH diff --git a/lily/include/relocate.hh b/lily/include/relocate.hh index 56ab9c5056..796af63660 100644 --- a/lily/include/relocate.hh +++ b/lily/include/relocate.hh @@ -1,10 +1,20 @@ /* - relocate.hh -- declare relocation functions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef RELOCATE_HH diff --git a/lily/include/repeated-music.hh b/lily/include/repeated-music.hh index 818d1c822f..62368cbc56 100644 --- a/lily/include/repeated-music.hh +++ b/lily/include/repeated-music.hh @@ -1,9 +1,20 @@ /* - repeated-music.hh -- declare Repeated_music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef REPEATED_MUSIC_HH diff --git a/lily/include/rest-collision.hh b/lily/include/rest-collision.hh index 1d25a2cda5..a954b6f24b 100644 --- a/lily/include/rest-collision.hh +++ b/lily/include/rest-collision.hh @@ -1,9 +1,20 @@ /* - rest-collision.hh -- declare Rest_collision + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef REST_COLLISION_HH @@ -18,7 +29,6 @@ public: static void add_column (Grob *me, Grob *); DECLARE_GROB_INTERFACE(); - DECLARE_SCHEME_CALLBACK (force_shift_callback, (SCM element)); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM element)); DECLARE_SCHEME_CALLBACK (force_shift_callback_rest, (SCM element, SCM off)); static SCM do_shift (Grob *); diff --git a/lily/include/rest.hh b/lily/include/rest.hh index be31f3ae0f..053e3960c0 100644 --- a/lily/include/rest.hh +++ b/lily/include/rest.hh @@ -1,9 +1,20 @@ /* - rest.hh -- declare Rest + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef REST_HH @@ -22,6 +33,7 @@ public: static string glyph_name (Grob *, int, string, bool); static SCM brew_internal_stencil (Grob*, bool); static SCM generic_extent_callback (Grob*, Axis); + static void translate (Grob *me, int dy); DECLARE_SCHEME_CALLBACK (polyphonic_offset_callback, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (width, (SCM)); diff --git a/lily/include/rhythmic-head.hh b/lily/include/rhythmic-head.hh index f625bfd6e0..7dbe9fa2e7 100644 --- a/lily/include/rhythmic-head.hh +++ b/lily/include/rhythmic-head.hh @@ -1,9 +1,20 @@ /* - rhythmic-head.hh -- declare Rhythmic_head + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef RHYTHMIC_HEAD_HH diff --git a/lily/include/rod.hh b/lily/include/rod.hh index d89b34f802..ae837e1f67 100644 --- a/lily/include/rod.hh +++ b/lily/include/rod.hh @@ -1,9 +1,20 @@ /* - rod.hh -- declare Rod, Column_rod + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #ifndef ROD_HH diff --git a/lily/include/scale.hh b/lily/include/scale.hh index 14be01b9d2..7f6a881762 100644 --- a/lily/include/scale.hh +++ b/lily/include/scale.hh @@ -1,10 +1,20 @@ -/* - scale.hh -- declare Scale - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #ifndef SCALE_HH diff --git a/lily/include/scheme-engraver.hh b/lily/include/scheme-engraver.hh new file mode 100644 index 0000000000..9ae0591bb4 --- /dev/null +++ b/lily/include/scheme-engraver.hh @@ -0,0 +1,79 @@ +/* + scheme-engraver.hh -- declare Scheme_engraver + + source file of the GNU LilyPond music typesetter + + Copyright (c) 2009--2011 Han-Wen Nienhuys + + 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 . + +*/ + +#ifndef SCHEME_ENGRAVER_HH +#define SCHEME_ENGRAVER_HH + +#include "engraver.hh" + +class Scheme_engraver : public Engraver { +public: + void init_from_scheme (SCM definition); + TRANSLATOR_DECLARATIONS_NO_LISTENER (Scheme_engraver); + + static Listener get_listener (void *generic_arg, SCM event); + +protected: + ~Scheme_engraver (); + + void stop_translation_timestep (); + void start_translation_timestep (); + void process_music (); + void process_acknowledged (); + + virtual void initialize (); + virtual void finalize (); + virtual void derived_mark () const; + virtual translator_listener_record *get_listener_list () const; + virtual bool must_be_last () const; + +private: + void acknowledge_grob_by_hash (Grob_info info, SCM iface_function_hash); + void init_acknowledgers (SCM alist, SCM *hash); + + DECLARE_ACKNOWLEDGER (grob); + DECLARE_END_ACKNOWLEDGER (grob); + + bool must_be_last_; + + SCM acknowledge_grob_function_; + SCM stop_translation_timestep_function_; + SCM start_translation_timestep_function_; + SCM process_music_function_; + SCM process_acknowledged_function_; + SCM initialize_function_; + SCM finalize_function_; + + // hashq table of interface-symbol -> scheme-function + SCM interface_acknowledger_hash_; + SCM interface_end_acknowledger_hash_; + + // Alist of listened-symbol . scheme-function + SCM listeners_alist_; + + // We dont use this, but need it for the documentation boilerplate. + static translator_listener_record *listener_list_; + translator_listener_record *per_instance_listeners_; +}; + +#endif /* SCHEME_ENGRAVER_HH */ + diff --git a/lily/include/scheme-listener.hh b/lily/include/scheme-listener.hh index d96c7d779a..e7d89d73bc 100644 --- a/lily/include/scheme-listener.hh +++ b/lily/include/scheme-listener.hh @@ -1,9 +1,20 @@ /* - scheme-listener.hh -- Declare Scheme_listener + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Erik Sandberg - (c) 2006--2009 Erik Sandberg + 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 . */ #ifndef SCHEME_LISTENER_HH diff --git a/lily/include/scm-hash.hh b/lily/include/scm-hash.hh index 8bd8245b62..2d21c4787e 100644 --- a/lily/include/scm-hash.hh +++ b/lily/include/scm-hash.hh @@ -1,9 +1,20 @@ /* - scm-hash.hh -- declare Scheme hasher. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef SCM_HASH_HH diff --git a/lily/include/score-engraver.hh b/lily/include/score-engraver.hh index 6afe354120..3be8eb42f1 100644 --- a/lily/include/score-engraver.hh +++ b/lily/include/score-engraver.hh @@ -1,9 +1,20 @@ /* - score-engraver.hh -- declare Score_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef SCORE_ENGRAVER_HH diff --git a/lily/include/score-performer.hh b/lily/include/score-performer.hh index b77890c08c..eba810f59d 100644 --- a/lily/include/score-performer.hh +++ b/lily/include/score-performer.hh @@ -1,8 +1,21 @@ /* - score-performer.hh -- declare Score_performer + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #ifndef SCORE_PERFORMER_HH diff --git a/lily/include/score.hh b/lily/include/score.hh index ab6fcca3b5..24bf2e997c 100644 --- a/lily/include/score.hh +++ b/lily/include/score.hh @@ -1,9 +1,20 @@ /* - score.hh -- declare Score + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef SCORE_HH @@ -24,17 +35,16 @@ class Score SCM input_location_; SCM header_; public: - Input *origin() const; - - vector defs_; - string user_key_; + Input *origin () const; + + vector defs_; bool error_found_; Score (); Score (Score const &); VIRTUAL_COPY_CONSTRUCTOR (Score, Score); - + SCM get_music () const; void add_output_def (Output_def *def); void set_music (SCM music); @@ -45,7 +55,6 @@ public: DECLARE_UNSMOB (Score, score); -SCM ly_render_output (SCM, SCM); SCM ly_run_translator (SCM, SCM); #endif /* SCORE_HH */ diff --git a/lily/include/script-column.hh b/lily/include/script-column.hh index 01c1b992a6..ea76373e55 100644 --- a/lily/include/script-column.hh +++ b/lily/include/script-column.hh @@ -1,9 +1,20 @@ /* - g-script-column.hh -- declare Script_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef Script_COLUMN_HH diff --git a/lily/include/script-interface.hh b/lily/include/script-interface.hh index 2032b88296..4ec00d01df 100644 --- a/lily/include/script-interface.hh +++ b/lily/include/script-interface.hh @@ -1,9 +1,20 @@ /* - script-interface.hh -- + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef SCRIPT_INTERFACE_HH @@ -21,6 +32,8 @@ class Script_interface { public: static Stencil get_stencil (Grob *, Direction d); + static Direction get_direction (Grob *); + DECLARE_GROB_INTERFACE(); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_direction, (SCM)); diff --git a/lily/include/self-alignment-interface.hh b/lily/include/self-alignment-interface.hh index c42f2f4411..be51ee061a 100644 --- a/lily/include/self-alignment-interface.hh +++ b/lily/include/self-alignment-interface.hh @@ -1,9 +1,20 @@ /* - side-position-interface.hh -- declare Side_position_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef SELF_ALIGNMENT_INTERFACE_HH @@ -16,7 +27,7 @@ struct Self_alignment_interface { DECLARE_GROB_INTERFACE(); - static SCM aligned_on_self (Grob *me, Axis a); + static SCM aligned_on_self (Grob *me, Axis a, bool pure, int start, int end); static SCM centered_on_object (Grob *me, Axis a); static SCM aligned_on_parent (Grob *me, Axis a); static void set_center_parent (Grob *me, Axis a); @@ -25,6 +36,8 @@ struct Self_alignment_interface DECLARE_SCHEME_CALLBACK (x_aligned_on_self, (SCM element)); DECLARE_SCHEME_CALLBACK (y_aligned_on_self, (SCM element)); + DECLARE_SCHEME_CALLBACK (pure_y_aligned_on_self, (SCM element, SCM start, SCM end)); + DECLARE_SCHEME_CALLBACK (centered_on_x_parent, (SCM element)); DECLARE_SCHEME_CALLBACK (centered_on_y_parent, (SCM element)); DECLARE_SCHEME_CALLBACK (x_centered_on_y_parent, (SCM element)); diff --git a/lily/include/semi-tie-column.hh b/lily/include/semi-tie-column.hh index 8cc8063dfb..58511cb170 100644 --- a/lily/include/semi-tie-column.hh +++ b/lily/include/semi-tie-column.hh @@ -1,10 +1,21 @@ /* - semi-tie-column.hh -- declare Laissez_vibrer_tie_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef SEMI_TIE_COLUMN_HH diff --git a/lily/include/semi-tie.hh b/lily/include/semi-tie.hh index 8b0c936e7d..8cbb3601d7 100644 --- a/lily/include/semi-tie.hh +++ b/lily/include/semi-tie.hh @@ -1,10 +1,20 @@ /* - semi-tie.hh -- declare Laissez_vibrer_tie + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef SEMI_TIE_HH diff --git a/lily/include/separation-item.hh b/lily/include/separation-item.hh index cba70b751c..8eb4086f09 100644 --- a/lily/include/separation-item.hh +++ b/lily/include/separation-item.hh @@ -1,9 +1,20 @@ /* - single-malt-grouping-item.hh -- declare Separation_item + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef SINGLE_MALT_GROUPING_ITEM_HH diff --git a/lily/include/sequential-iterator.hh b/lily/include/sequential-iterator.hh index d53cf184c6..60bdac96bf 100644 --- a/lily/include/sequential-iterator.hh +++ b/lily/include/sequential-iterator.hh @@ -1,9 +1,20 @@ /* - sequential-iterator.hh -- declare Sequential_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #ifndef SEQUENTIAL_ITERATOR_HH diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh index 0febd15be3..624bff4e89 100644 --- a/lily/include/side-position-interface.hh +++ b/lily/include/side-position-interface.hh @@ -1,9 +1,20 @@ /* - side-position-interface.hh -- declare Side_position_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef SIDE_POSITION_INTERFACE_HH @@ -27,6 +38,7 @@ public: DECLARE_SCHEME_CALLBACK (y_aligned_side, (SCM element, SCM current)); DECLARE_SCHEME_CALLBACK (pure_y_aligned_side, (SCM element, SCM start, SCM end, SCM current)); DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM element)); + DECLARE_SCHEME_CALLBACK (move_to_extremal_staff, (SCM)); static SCM aligned_side (Grob*me, Axis a, bool pure, int start, int end, Real *current_off_ptr); @@ -37,7 +49,6 @@ public: DECLARE_GROB_INTERFACE(); static void add_support (Grob *, Grob *); static void add_staff_support (Grob *); - static Direction get_direction (Grob *); }; #endif /* SIDE_POSITION_INTERFACE_HH */ diff --git a/lily/include/simple-closure.hh b/lily/include/simple-closure.hh index 2d4f83525f..c77985634d 100644 --- a/lily/include/simple-closure.hh +++ b/lily/include/simple-closure.hh @@ -1,10 +1,20 @@ /* - simple-closure.hh -- declare simple closures + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef SIMPLE_CLOSURE_HH diff --git a/lily/include/simple-music-iterator.hh b/lily/include/simple-music-iterator.hh index dc453a7505..f046b84689 100644 --- a/lily/include/simple-music-iterator.hh +++ b/lily/include/simple-music-iterator.hh @@ -1,9 +1,20 @@ /* - simple-music-iterator.hh -- declare Simple_music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef SIMPLE_MUSIC_ITERATOR_HH diff --git a/lily/include/simple-spacer.hh b/lily/include/simple-spacer.hh index a0d5f0704b..895fbcf8d8 100644 --- a/lily/include/simple-spacer.hh +++ b/lily/include/simple-spacer.hh @@ -1,9 +1,20 @@ /* - simple-spacer.hh -- declare Simple_spacer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef SIMPLE_SPACER_HH diff --git a/lily/include/simultaneous-music-iterator.hh b/lily/include/simultaneous-music-iterator.hh index 36698a1bde..ff1100fb6d 100644 --- a/lily/include/simultaneous-music-iterator.hh +++ b/lily/include/simultaneous-music-iterator.hh @@ -1,9 +1,20 @@ /* - simultaneous-music-iterator.hh -- declare Simultaneous_music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef SIMULTANEOUS_MUSIC_ITERATOR_HH diff --git a/lily/include/skyline-pair.hh b/lily/include/skyline-pair.hh index c7f9182108..b32bd13815 100644 --- a/lily/include/skyline-pair.hh +++ b/lily/include/skyline-pair.hh @@ -1,10 +1,20 @@ -/* - skyline-pair.hh -- declare Skyline_pair - - source file of the GNU LilyPond music typesetter - - (c) 2008--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2008--2011 Han-Wen Nienhuys + + 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 . */ #ifndef SKYLINE_PAIR_HH diff --git a/lily/include/skyline.hh b/lily/include/skyline.hh index 26830b92c9..bb637a21bb 100644 --- a/lily/include/skyline.hh +++ b/lily/include/skyline.hh @@ -1,9 +1,20 @@ /* - skyline.hh -- declare Skyline class. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #ifndef SKYLINE_HH @@ -42,7 +53,7 @@ class Skyline private: list buildings_; Direction sky_; - + void internal_merge_skyline (list*, list*, list *const result); list internal_build_skyline (list*, Real, Axis, Direction); @@ -52,10 +63,11 @@ private: public: Skyline (); Skyline (Skyline const &src); + Skyline (Skyline const &src, Real horizon_padding, Axis a); Skyline (Direction sky); Skyline (vector const &bldgs, Real horizon_padding, Axis a, Direction sky); Skyline (Box const &b, Real horizon_padding, Axis a, Direction sky); - + vector to_points (Axis) const; void merge (Skyline const &); void insert (Box const &, Real horizon_padding, Axis); @@ -63,10 +75,11 @@ public: void print_points () const; void raise (Real); void shift (Real); - Real distance (Skyline const &) const; + Real distance (Skyline const &, Real horizon_padding = 0) const; Real height (Real airplane) const; Real max_height () const; void set_minimum_height (Real height); + void clear (); bool is_empty () const; }; diff --git a/lily/include/slur-configuration.hh b/lily/include/slur-configuration.hh index 850a4c0fa6..a4d78f99c9 100644 --- a/lily/include/slur-configuration.hh +++ b/lily/include/slur-configuration.hh @@ -1,9 +1,20 @@ /* - slur-configuration.hh -- declare Slur_configuration + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef SLUR_CONFIGURATION_HH @@ -13,17 +24,6 @@ #include "lily-proto.hh" #include "std-vector.hh" - -enum Configuration_tag - { - SLUR_STEM = 0x01, - SLUR_HEAD = 0x02, - SLUR_FREE = 0x04, - SLUR_FREE_HEAD = 0x08, - SLUR_FREE_STEM = 0x10, - SLUR_STEM_TIP = 0x10, - }; - class Slur_configuration { Real score_; @@ -33,9 +33,20 @@ public: Drul_array attachment_; Bezier curve_; Real height_; - unsigned tags_; int index_; + enum Slur_scorers + { + INITIAL_SCORE, + SLOPE, + EDGES, + EXTRA_ENCOMPASS, + ENCOMPASS, + NUM_SCORERS, + }; + + int next_scorer_todo; + Slur_configuration (); Real score () const { return score_; } @@ -44,12 +55,28 @@ public: void generate_curve (Slur_score_state const &state, Real r0, Real h_inf, vector const &); - void calculate_score (Slur_score_state const &); + void run_next_scorer (Slur_score_state const &); + bool done () const; + static Slur_configuration *new_config (Drul_array const &offs, int idx); + protected: void score_extra_encompass (Slur_score_state const &); void score_slopes (Slur_score_state const &); void score_edges (Slur_score_state const &); void score_encompass (Slur_score_state const &); + + friend class Slur_configuration_less; +}; + +// Comparator for a queue of Beam_configuration*. +class Slur_configuration_less +{ +public: + bool operator () (Slur_configuration* const& l, Slur_configuration* const& r) + { + // Invert + return l->score_ > r->score_; + } }; #endif /* SLUR_CONFIGURATION_HH */ diff --git a/lily/include/slur-score-parameters.hh b/lily/include/slur-score-parameters.hh index a1d2b4a5da..49d159b939 100644 --- a/lily/include/slur-score-parameters.hh +++ b/lily/include/slur-score-parameters.hh @@ -1,10 +1,20 @@ /* - slur-score-paramaters.hh -- declare Slur_score_parameters + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen Nienhuys - (c) 2006--2009 Han-Wen Nienhuys + 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 . */ #ifndef SLUR_SCORE_PARAMATERS_HH diff --git a/lily/include/slur-scoring.hh b/lily/include/slur-scoring.hh index 6c4dd5da2f..866b216942 100644 --- a/lily/include/slur-scoring.hh +++ b/lily/include/slur-scoring.hh @@ -1,9 +1,20 @@ /* - slur-scoring.hh -- declare Slur_score_parameters + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef SLUR_SCORING_HH @@ -24,7 +35,6 @@ struct Extra_collision_info Extra_collision_info (Grob *g, Real idx, Interval x, Interval y, Real p); Extra_collision_info (); - }; struct Encompass_info @@ -94,9 +104,10 @@ struct Slur_score_state Slur_score_state (); ~Slur_score_state (); - Bezier get_best_curve (); + Slur_configuration *get_forced_configuration (Interval ys) const; + Slur_configuration *get_best_curve () const; void fill (Grob *); - void set_next_direction (); + Direction slur_direction () const; vector generate_avoid_offsets () const; Drul_array get_bound_info () const; @@ -107,7 +118,6 @@ struct Slur_score_state Encompass_info get_encompass_info (Grob *col) const; vector get_extra_encompass_infos () const; Real move_away_from_staffline (Real y, Grob *on_staff) const; - int get_closest_index (SCM inspect_quants) const; Grob *breakable_bound_item (Direction) const; }; diff --git a/lily/include/slur.hh b/lily/include/slur.hh index ef7d123090..7abc764559 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -1,9 +1,20 @@ /* - slur.hh -- declare Slur + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #ifndef SLUR_HH diff --git a/lily/include/smobs.hh b/lily/include/smobs.hh index 12819f28f5..cf6ffcc9a3 100644 --- a/lily/include/smobs.hh +++ b/lily/include/smobs.hh @@ -1,9 +1,20 @@ /* - smobs.hh -- declare smob related stuff. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef SMOBS_HH @@ -145,13 +156,17 @@ extern bool parsed_objects_should_be_dead; #ifndef NDEBUG #define ASSERT_LIVE_IS_ALLOWED() \ - static bool passed_here_once;\ - if (parsed_objects_should_be_dead && !passed_here_once) { \ - ::programming_error (string ("Parsed object should be dead: ") + __PRETTY_FUNCTION__ ); \ - passed_here_once = true;\ - } + do { \ + static bool passed_here_once;\ + if (parsed_objects_should_be_dead && !passed_here_once) { \ + ::programming_error (string ("Parsed object should be dead: ") + __PRETTY_FUNCTION__ ); \ + passed_here_once = true;\ + } \ + } \ + while (0) #else -#define ASSERT_LIVE_IS_ALLOWED() +#define ASSERT_LIVE_IS_ALLOWED() do { } \ + while (0) #endif #endif /* SMOBS_HH */ diff --git a/lily/include/source-file.hh b/lily/include/source-file.hh index 2fd1bfc073..9dedceb48b 100644 --- a/lily/include/source-file.hh +++ b/lily/include/source-file.hh @@ -1,9 +1,20 @@ /* - source-file.hh -- declare Source_file + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Jan Nieuwenhuizen - (c) 1999--2009 Jan Nieuwenhuizen + 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 . */ #ifndef SOURCE_FILE_HH @@ -53,7 +64,7 @@ public: public: Slice line_slice (char const *pos_str0) const; string line_string (char const *pos_str0) const; - void get_counts (char const *pos_str0, int *, int *, int *) const; + void get_counts (char const *pos_str0, int *, int *, int *, int *) const; SCM get_port () const; string name_; diff --git a/lily/include/sources.hh b/lily/include/sources.hh index 32dbb2ad45..b873ac8bc0 100644 --- a/lily/include/sources.hh +++ b/lily/include/sources.hh @@ -1,7 +1,20 @@ /* - sources.hh -- part of LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef SOURCES_HH diff --git a/lily/include/spaceable-grob.hh b/lily/include/spaceable-grob.hh index 71768b7cb3..5788fecb47 100644 --- a/lily/include/spaceable-grob.hh +++ b/lily/include/spaceable-grob.hh @@ -1,9 +1,20 @@ /* - spaceable-grob.hh -- declare Spaceable_grob + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef SPACEABLE_GROB_HH diff --git a/lily/include/spacing-interface.hh b/lily/include/spacing-interface.hh index 32df5aeb3a..5b23672c30 100644 --- a/lily/include/spacing-interface.hh +++ b/lily/include/spacing-interface.hh @@ -1,9 +1,20 @@ /* - spacing-interface.hh -- declare Spacing_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "grob-interface.hh" #include "lily-proto.hh" diff --git a/lily/include/spacing-options.hh b/lily/include/spacing-options.hh index 7f52d45820..c96f1d0cfb 100644 --- a/lily/include/spacing-options.hh +++ b/lily/include/spacing-options.hh @@ -1,10 +1,20 @@ -/* - spacing-options.hh -- declare Spacing_options - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #ifndef SPACING_OPTIONS_HH diff --git a/lily/include/spacing-spanner.hh b/lily/include/spacing-spanner.hh index 72848b898f..d469c3f463 100644 --- a/lily/include/spacing-spanner.hh +++ b/lily/include/spacing-spanner.hh @@ -1,9 +1,20 @@ /* - spacing-spanner.hh -- declare Spacing spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef SPACING_SPANNER_HH diff --git a/lily/include/span-bar.hh b/lily/include/span-bar.hh index d06b514afc..7ebedb4d46 100644 --- a/lily/include/span-bar.hh +++ b/lily/include/span-bar.hh @@ -1,9 +1,20 @@ /* - span-bar.hh -- declare Span_bar + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef SPAN_BAR_HH @@ -26,7 +37,6 @@ public: static void add_bar (Grob *, Grob *); static void evaluate_glyph (Grob *); DECLARE_SCHEME_CALLBACK (width, (SCM smob)); - DECLARE_SCHEME_CALLBACK (calc_bar_size, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_glyph_name, (SCM)); DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM)); diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 24176326d3..7bda060c86 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -1,7 +1,20 @@ /* - spanner.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef SPANNER_HH @@ -35,7 +48,9 @@ class Spanner : public Grob public: DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_normalized_endpoints, (SCM)); DECLARE_SCHEME_CALLBACK (bounds_width, (SCM)); + DECLARE_SCHEME_CALLBACK (kill_zero_spanned_time, (SCM)); vector broken_intos_; @@ -64,7 +79,12 @@ public: DECLARE_GROB_INTERFACE(); virtual System *get_system () const; + SCM get_cached_pure_property (SCM sym, int start, int end); + void cache_pure_property (SCM sym, int start, int end, SCM value); + protected: + SCM pure_property_cache_; + void set_my_columns (); virtual Grob *clone () const; virtual void do_break_processing (); @@ -74,5 +94,4 @@ protected: void add_bound_item (Spanner *, Grob *); bool spanner_less (Spanner *s1, Spanner *s2); -int broken_spanner_index (Spanner const *sp); #endif diff --git a/lily/include/spring.hh b/lily/include/spring.hh index c379889adb..7172809499 100644 --- a/lily/include/spring.hh +++ b/lily/include/spring.hh @@ -1,9 +1,20 @@ /* - spring.hh -- declare Spring + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef SPRING_HH @@ -39,10 +50,13 @@ public: void set_distance (Real); void set_min_distance (Real); + void ensure_min_distance (Real); void set_inverse_stretch_strength (Real); void set_inverse_compress_strength (Real); void set_blocking_force (Real); void set_default_strength (); + void set_default_compress_strength (); + void set_default_stretch_strength (); void operator*= (Real); bool operator> (Spring const&) const; diff --git a/lily/include/staff-grouper-interface.hh b/lily/include/staff-grouper-interface.hh new file mode 100644 index 0000000000..d26169e4bd --- /dev/null +++ b/lily/include/staff-grouper-interface.hh @@ -0,0 +1,33 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2009--2011 Joe Neeman + + 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 . +*/ + +#ifndef STAFF_GROUPER_INTERFACE_HH +#define STAFF_GROUPER_INTERFACE_HH + +#include "grob.hh" + +class Staff_grouper_interface +{ +public: + DECLARE_GROB_INTERFACE (); + + static bool maybe_pure_within_group (Grob *, Grob *child, bool, int, int); +}; + +#endif /* STAFF_GROUPER_INTERFACE_HH */ diff --git a/lily/include/staff-spacing.hh b/lily/include/staff-spacing.hh index 593c59af23..fb572dc157 100644 --- a/lily/include/staff-spacing.hh +++ b/lily/include/staff-spacing.hh @@ -1,9 +1,20 @@ /* - staff-spacing.hh -- declare Staff_spacing + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #ifndef STAFF_SPACING_HH diff --git a/lily/include/staff-symbol-referencer.hh b/lily/include/staff-symbol-referencer.hh index 434ff92d80..ed6156c62c 100644 --- a/lily/include/staff-symbol-referencer.hh +++ b/lily/include/staff-symbol-referencer.hh @@ -1,9 +1,20 @@ /* - staff-sym-referencer.hh -- declare staff_symbol_referencer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #ifndef STAFF_SYMBOL_REFERENCER_HH @@ -40,7 +51,7 @@ public: static Interval extent_in_staff (Grob *); }; -int compare_position (Grob *const &, Grob *const &);\ +int compare_position (Grob *const &, Grob *const &); bool position_less (Grob *const &, Grob *const &); #endif /* STAFF_SYMBOL_REFERENCER_HH */ diff --git a/lily/include/staff-symbol.hh b/lily/include/staff-symbol.hh index 2529c00508..1c091c6388 100644 --- a/lily/include/staff-symbol.hh +++ b/lily/include/staff-symbol.hh @@ -1,9 +1,20 @@ /* - staff-symbol.hh -- declare Staff_symbol + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef STAFF_SYMBOL_HH @@ -25,6 +36,7 @@ public: static int get_steps (Grob *); static int line_count (Grob *); static bool on_line (Grob *me, int pos); + static Interval line_span (Grob *); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (height, (SCM)); DECLARE_GROB_INTERFACE(); diff --git a/lily/include/stem-info.hh b/lily/include/stem-info.hh index 1a67675d3a..252961e532 100644 --- a/lily/include/stem-info.hh +++ b/lily/include/stem-info.hh @@ -1,9 +1,20 @@ /* - stem-info.hh -- declare Stem_info + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #ifndef STEM_INFO_HH diff --git a/lily/include/stem-tremolo.hh b/lily/include/stem-tremolo.hh index 9782c753f2..f3f5931adc 100644 --- a/lily/include/stem-tremolo.hh +++ b/lily/include/stem-tremolo.hh @@ -1,9 +1,20 @@ /* - stem-tremolo.hh -- declare Abbreviation + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef ABBREV_HH diff --git a/lily/include/stem.hh b/lily/include/stem.hh index b404862ee9..27fe988b61 100644 --- a/lily/include/stem.hh +++ b/lily/include/stem.hh @@ -1,7 +1,20 @@ /* - stem.hh -- declare Stem + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef STEM_HH diff --git a/lily/include/stencil.hh b/lily/include/stencil.hh index 538d0acc04..2e38cdfdfc 100644 --- a/lily/include/stencil.hh +++ b/lily/include/stencil.hh @@ -1,9 +1,20 @@ /* - stencil.hh -- declare Stencil + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef STENCIL_HH #define STENCIL_HH @@ -68,6 +79,7 @@ public: void rotate_degrees_absolute (Real, Offset); void align_to (Axis a, Real x); void translate_axis (Real, Axis); + void scale (Real, Real); Interval extent (Axis) const; Box extent_box () const; diff --git a/lily/include/stream-event.hh b/lily/include/stream-event.hh index ebdc17925c..18b162a17c 100644 --- a/lily/include/stream-event.hh +++ b/lily/include/stream-event.hh @@ -1,9 +1,20 @@ /* - stream-event.hh -- declare Stream_event + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Erik Sandberg - (c) 2005-2006 Erik Sandberg + 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 . */ #ifndef STREAM_EVENT_HH @@ -35,7 +46,6 @@ public: #define in_event_class(class_name) internal_in_event_class (ly_symbol2scm (class_name)) Stream_event *unsmob_stream_event (SCM); -DECLARE_TYPE_P (Stream_event); SCM ly_event_deep_copy (SCM); #endif /* STREAM_EVENT_HH */ diff --git a/lily/include/stream.hh b/lily/include/stream.hh index 9c3ab818de..2547900e9e 100644 --- a/lily/include/stream.hh +++ b/lily/include/stream.hh @@ -1,9 +1,20 @@ /* - stream.hh -- declare compatibility glue for gcc 3. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #ifndef STREAM_HH diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh index 0b966e4427..5131eeb469 100644 --- a/lily/include/system-start-delimiter.hh +++ b/lily/include/system-start-delimiter.hh @@ -1,9 +1,20 @@ /* - System-start-delimiter.hh -- declare System_start_delimiter + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef SYSTEM_START_DELIMITER_HH diff --git a/lily/include/system.hh b/lily/include/system.hh index 3fc805a959..940f6a5fb8 100644 --- a/lily/include/system.hh +++ b/lily/include/system.hh @@ -1,7 +1,20 @@ /* - system.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef SYSTEM_HH @@ -23,15 +36,30 @@ class System : public Spanner void init_elements (); friend class Paper_score; // ugh. Paper_score *pscore_; // ugh. - + bool checked_footnotes_; + vector footnote_grobs_; // TODO: make this a grob array + public: Paper_score *paper_score () const; + Grob *get_vertical_alignment (); + Grob *get_extremal_staff (Direction dir, Interval const&); + Grob *get_pure_bound (Direction dir, int start, int end); + Grob *get_maybe_pure_bound (Direction dir, bool pure, int start, int end); int get_rank () const; + vector get_footnotes_in_range (vsize st, vsize end); + void get_footnote_grobs_in_range (vector &out, vsize st, vsize end); + Stencil make_footnote_stencil (Real padding); void do_break_substitution_and_fixup_refpoints (); void post_processing (); + void populate_footnote_grob_vector (); SCM get_paper_system (); SCM get_paper_systems (); SCM get_broken_system_grobs (); + SCM get_broken_footnote_stencils (); + + DECLARE_SCHEME_CALLBACK (calc_pure_relevant_grobs, (SCM)); + DECLARE_SCHEME_CALLBACK (height, (SCM)); + DECLARE_SCHEME_CALLBACK (calc_pure_height, (SCM, SCM, SCM)); System (SCM); System (System const &); @@ -50,9 +78,17 @@ public: void typeset_grob (Grob *); void pre_processing (); + Interval begin_of_line_pure_height (vsize start, vsize end); + Interval rest_of_line_pure_height (vsize start, vsize end); + Interval pure_refpoint_extent (vsize start, vsize end); + void collect_labels (Grob const *, SCM *); + protected: virtual void derived_mark () const; virtual Grob *clone () const; + +private: + Interval part_of_line_pure_height (vsize start, vsize end, bool begin); }; void set_loose_columns (System *which, Column_x_positions const *posns); diff --git a/lily/include/text-interface.hh b/lily/include/text-interface.hh index fabcbbc516..e01bd4aeab 100644 --- a/lily/include/text-interface.hh +++ b/lily/include/text-interface.hh @@ -1,10 +1,21 @@ /* - text-interface.hh -- declare markup functions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Han-Wen Nienhuys + Copyright (C) 1998--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #ifndef TEXT_ITEM diff --git a/lily/include/tie-column-format.hh b/lily/include/tie-column-format.hh index 48c5c42d8c..0a5ca6cacf 100644 --- a/lily/include/tie-column-format.hh +++ b/lily/include/tie-column-format.hh @@ -1,10 +1,20 @@ /* - tie-column-format.hh -- declare Tie column format routines. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef TIE_COLUMN_FORMAT_HH diff --git a/lily/include/tie-column.hh b/lily/include/tie-column.hh index 07afd51859..3821f3b80a 100644 --- a/lily/include/tie-column.hh +++ b/lily/include/tie-column.hh @@ -1,9 +1,20 @@ /* - tie-column.hh -- declare Tie_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #ifndef TIE_COLUMN_HH diff --git a/lily/include/tie-configuration.hh b/lily/include/tie-configuration.hh index 01e32b6913..715928fd9b 100644 --- a/lily/include/tie-configuration.hh +++ b/lily/include/tie-configuration.hh @@ -1,10 +1,20 @@ /* - tie-configuration.hh -- declare Tie_configuration + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef TIE_CONFIGURATION_HH diff --git a/lily/include/tie-details.hh b/lily/include/tie-details.hh index ca24bd4599..e43fc7e13a 100644 --- a/lily/include/tie-details.hh +++ b/lily/include/tie-details.hh @@ -1,10 +1,20 @@ /* - tie-details.hh -- declare Tie_details + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen Nienhuys - (c) 2006--2009 Han-Wen Nienhuys + 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 . */ #ifndef TIE_DETAILS_HH diff --git a/lily/include/tie-formatting-problem.hh b/lily/include/tie-formatting-problem.hh index 35aa73817c..9799839cb3 100644 --- a/lily/include/tie-formatting-problem.hh +++ b/lily/include/tie-formatting-problem.hh @@ -1,10 +1,20 @@ /* - tie-formatting-problem.hh -- declare Tie_formatting_problem + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef TIE_FORMATTING_PROBLEM_HH diff --git a/lily/include/tie-specification.hh b/lily/include/tie-specification.hh index 68734adc22..a41aa3626b 100644 --- a/lily/include/tie-specification.hh +++ b/lily/include/tie-specification.hh @@ -1,10 +1,20 @@ -/* - tie-specification.hh -- declare Tie_specification - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #ifndef TIE_SPECIFICATION_HH diff --git a/lily/include/tie.hh b/lily/include/tie.hh index 172e02733f..9da006c8ef 100644 --- a/lily/include/tie.hh +++ b/lily/include/tie.hh @@ -1,9 +1,20 @@ /* - tie.hh -- declare Tie + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef TIE_HH diff --git a/lily/include/time-scaled-music-iterator.hh b/lily/include/time-scaled-music-iterator.hh index 379e202f03..b3a4ce480d 100644 --- a/lily/include/time-scaled-music-iterator.hh +++ b/lily/include/time-scaled-music-iterator.hh @@ -1,10 +1,21 @@ /* - compressed-music-iterator.hh -- declare Time_scaled_music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Han-Wen Nienhuys , + Copyright (C) 1998--2011 Han-Wen Nienhuys , Erik Sandberg + + 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 . */ #ifndef TIME_SCALED_MUSIC_ITERATOR_HH diff --git a/lily/include/time-signature.hh b/lily/include/time-signature.hh index ac327d653c..95190025bc 100644 --- a/lily/include/time-signature.hh +++ b/lily/include/time-signature.hh @@ -1,7 +1,20 @@ /* - time_signature.hh -- declare Time_signature + This file is part of LilyPond, the GNU music typesetter. - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys + + 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 . */ #ifndef METER_HH diff --git a/lily/include/timing-translator.hh b/lily/include/timing-translator.hh index 8c85bcd1ef..bd0a0788c2 100644 --- a/lily/include/timing-translator.hh +++ b/lily/include/timing-translator.hh @@ -1,9 +1,20 @@ /* - timing-translator.hh -- declare Timing_translator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef TIMING_TRANSLATOR_HH diff --git a/lily/include/translator-dispatch-list.hh b/lily/include/translator-dispatch-list.hh index ba041f4af6..1504ebcecc 100644 --- a/lily/include/translator-dispatch-list.hh +++ b/lily/include/translator-dispatch-list.hh @@ -1,9 +1,20 @@ /* - translator-dispatch-list.hh -- declare Translator_dispatch_list + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef TRANSLATOR_DISPATCH_LIST_HH diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index 237d0367c2..3eaf8a85b7 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -1,9 +1,20 @@ /* - translator-group.hh -- declare Translator_group + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef TRANSLATOR_GROUP_HH diff --git a/lily/include/translator.hh b/lily/include/translator.hh index f5065f50b2..d2723929ee 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -1,9 +1,20 @@ /* - translator.hh -- declare Translator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #ifndef TRANSLATOR_HH @@ -21,6 +32,11 @@ struct Acknowledge_information { SCM symbol_; Engraver_void_function_engraver_grob_info function_; + + Acknowledge_information () { + symbol_ = SCM_EOL; + function_ = 0; + } }; @@ -30,14 +46,21 @@ struct Acknowledge_information listeners to a context. */ typedef struct translator_listener_record { - Listener (*get_listener_) (void *); + Listener (*get_listener_) (void *, SCM event_class); SCM event_class_; struct translator_listener_record *next_; + + translator_listener_record () { + next_ = 0; + event_class_ = SCM_EOL; + get_listener_ = 0; + } + } translator_listener_record; -#define TRANSLATOR_DECLARATIONS(NAME) \ + +#define TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME) \ private: \ - static translator_listener_record *listener_list_; \ public: \ NAME (); \ VIRTUAL_COPY_CONSTRUCTOR (Translator, NAME); \ @@ -46,6 +69,8 @@ private: \ virtual void fetch_precomputable_methods (Translator_void_method_ptr methods[]); \ virtual SCM static_translator_description () const; \ virtual SCM translator_description () const; \ + static Engraver_void_function_engraver_grob_info static_get_acknowledger (SCM sym); \ + static Engraver_void_function_engraver_grob_info static_get_end_acknowledger(SCM); \ virtual Engraver_void_function_engraver_grob_info get_acknowledger (SCM sym) \ { \ return static_get_acknowledger (sym); \ @@ -54,8 +79,12 @@ private: \ { \ return static_get_end_acknowledger (sym); \ } \ - static Engraver_void_function_engraver_grob_info static_get_acknowledger (SCM sym); \ - static Engraver_void_function_engraver_grob_info static_get_end_acknowledger(SCM); \ + /* end #define */ + +#define TRANSLATOR_DECLARATIONS(NAME) \ + TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME) \ +private: \ + static translator_listener_record *listener_list_; \ public: \ virtual translator_listener_record *get_listener_list () const \ { \ @@ -69,7 +98,7 @@ inline void listen_ ## m (Stream_event *); \ /* Should be private */ \ static void _internal_declare_ ## m (); \ private: \ -static Listener _get_ ## m ## _listener (void *); \ + static Listener _get_ ## m ## _listener (void *, SCM); \ DECLARE_LISTENER (_listen_scm_ ## m); #define DECLARE_ACKNOWLEDGER(x) public : void acknowledge_ ## x (Grob_info); protected: @@ -91,12 +120,7 @@ class Translator { void init (); -protected: - bool must_be_last_; - public: - bool must_be_last () const; - Context *context () const { return daddy_context_; } Translator (Translator const &); @@ -106,11 +130,12 @@ public: virtual Output_def *get_output_def () const; virtual Translator_group *get_daddy_translator ()const; virtual Moment now_mom () const; + virtual bool must_be_last () const; virtual void initialize (); virtual void finalize (); - /*should maybe be virtual*/ + /* should maybe be virtual */ void connect_to_context (Context *c); void disconnect_from_context (Context *c); @@ -129,7 +154,10 @@ protected: // should be private. Context *daddy_context_; void protect_event (SCM ev); virtual void derived_mark () const; - static void add_translator_listener (translator_listener_record **listener_list, translator_listener_record *r, Listener (*get_listener) (void *), const char *ev_class); + static void add_translator_listener (translator_listener_record **listener_list, + translator_listener_record *r, + Listener (*get_listener) (void *, SCM), + const char *ev_class); SCM static_translator_description (const char *grobs, const char *desc, translator_listener_record *listener_list, @@ -138,6 +166,7 @@ protected: // should be private. friend class Translator_group; }; + void add_translator (Translator *trans); Translator *get_translator (SCM s); @@ -153,4 +182,5 @@ extern bool internal_event_assignment (Stream_event **old_ev, Stream_event *new_ #define ASSIGN_EVENT_ONCE(o,n) internal_event_assignment (&o, n, __FUNCTION__) + #endif // TRANSLATOR_HH diff --git a/lily/include/translator.icc b/lily/include/translator.icc index f6c815fabc..a7bb910608 100644 --- a/lily/include/translator.icc +++ b/lily/include/translator.icc @@ -1,9 +1,20 @@ /* - translator.icc -- declare Translator glue wiring. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #ifndef TRANSLATOR_ICC @@ -21,7 +32,6 @@ A macro to automate administration of translators. */ #define ADD_THIS_TRANSLATOR(T) \ - translator_listener_record *T::listener_list_; \ SCM T::static_description_ = SCM_EOL; \ static void _ ## T ## _adder () \ { \ @@ -34,12 +44,15 @@ { \ return static_description_; \ } \ - ADD_GLOBAL_CTOR (_ ## T ## _adder); + ADD_GLOBAL_CTOR (_ ## T ## _adder); \ + /* end define */ -#define ADD_TRANSLATOR(classname, desc, grobs, read, write) \ +#define DEFINE_TRANSLATOR_LISTENER_LIST(T) \ + translator_listener_record *T::listener_list_; \ + /* end define */ + +#define DEFINE_ACKNOWLEDGERS(classname) \ Drul_array< vector > classname::acknowledge_static_array_drul_; \ - IMPLEMENT_FETCH_PRECOMPUTABLE_METHODS (classname); \ - ADD_THIS_TRANSLATOR (classname); \ Engraver_void_function_engraver_grob_info \ classname::static_get_acknowledger (SCM sym) \ { \ @@ -50,12 +63,22 @@ { \ return generic_get_acknowledger (sym, &acknowledge_static_array_drul_[STOP]); \ } \ + /* end define */ + +#define DEFINE_TRANSLATOR_DOC(classname, desc, grobs, read, write) \ SCM \ classname::static_translator_description () const \ { \ return Translator::static_translator_description (grobs, desc, listener_list_, read, write); \ } +#define ADD_TRANSLATOR(classname, desc, grobs, read, write) \ + IMPLEMENT_FETCH_PRECOMPUTABLE_METHODS (classname); \ + ADD_THIS_TRANSLATOR (classname); \ + DEFINE_TRANSLATOR_DOC(classname, desc, grobs, read, write) \ + DEFINE_ACKNOWLEDGERS(classname) \ + DEFINE_TRANSLATOR_LISTENER_LIST(classname) \ + #define IMPLEMENT_FETCH_PRECOMPUTABLE_METHODS(T) \ void \ T::fetch_precomputable_methods (Translator_void_method_ptr ptrs[]) \ @@ -119,9 +142,10 @@ cl :: _internal_declare_ ## m () \ ADD_SCM_INIT_FUNC (cl ## _declare_event_ ## m, cl::_internal_declare_ ## m); \ \ Listener \ -cl :: _get_ ## m ## _listener (void *me) \ + cl :: _get_ ## m ## _listener (void *me, SCM unused) \ { \ cl *obj = (cl *) me; \ + (void) unused; \ return obj->GET_LISTENER (_listen_scm_ ## m); \ } \ \ diff --git a/lily/include/tuplet-bracket.hh b/lily/include/tuplet-bracket.hh index 794ac9524e..17285a0917 100644 --- a/lily/include/tuplet-bracket.hh +++ b/lily/include/tuplet-bracket.hh @@ -1,7 +1,20 @@ /* - tuplet-bracket.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef Tuplet_bracket_HH @@ -27,9 +40,10 @@ public: static void get_bounds (Grob *, Grob **, Grob **); static void add_column (Grob *me, Item *); static void add_beam (Grob *me, Grob *); - static Grob *parallel_beam (Grob *me, vector const &cols, bool *equally_long); + static Grob *parallel_beam (Grob *me, vector const &cols, + bool *equally_long); static void calc_position_and_height (Grob *, Real *, Real *dy); - static Stencil make_bracket (Grob *me, Axis protusion_axis, + static Stencil make_bracket (Grob *me, Axis protrusion_axis, Offset dz, Drul_array height, Interval gap, Drul_array widen, Drul_array shorten); diff --git a/lily/include/type-swallow-translator.hh b/lily/include/type-swallow-translator.hh deleted file mode 100644 index 7e798e043d..0000000000 --- a/lily/include/type-swallow-translator.hh +++ /dev/null @@ -1,44 +0,0 @@ -/* - type-swallow-translator.hh -- declare Type_swallow_translator - - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys -*/ - -#ifndef TYPESWALLOW_TRANSLATOR_HH -#define TYPESWALLOW_TRANSLATOR_HH - -#include "translator.hh" - -/** eat a certain type of event - (Duh, it's good for your skin) -*/ -class Type_swallow_translator : public Translator -{ -protected: - string swallow_string_; - bool try_music (Music *); -public: - VIRTUAL_COPY_CONS (Translator); -}; - -#define DECLARE_EVENT_SWALLOWER(TYPE) \ - struct TYPE ## _swallow_translator : public Type_swallow_translator \ - { \ - TRANSLATOR_DECLARATIONS (TYPE ## _swallow_translator); \ - }; \ - TYPE ## _swallow_translator ::TYPE ## _swallow_translator () \ - { \ - swallow_string_ = #TYPE; \ - } \ - ADD_TRANSLATOR (TYPE ## _swallow_translator, \ - "Swallow events of " #TYPE " type.", \ - "", \ - "general-music", \ - "", \ - "", \ - ""); - -#endif // TYPESWALLOW_TRANSLATOR_HH - diff --git a/lily/include/vaticana-ligature.hh b/lily/include/vaticana-ligature.hh index 70b820f31b..7379510aa8 100644 --- a/lily/include/vaticana-ligature.hh +++ b/lily/include/vaticana-ligature.hh @@ -1,9 +1,20 @@ /* - vaticana-ligature.hh + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #ifndef VATICANA_LIGATURE_HH diff --git a/lily/include/volta-bracket.hh b/lily/include/volta-bracket.hh index 413e6f6aa1..12821ffa0b 100644 --- a/lily/include/volta-bracket.hh +++ b/lily/include/volta-bracket.hh @@ -1,7 +1,20 @@ /* - volta-spanner.hh -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen + + 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 . */ #ifndef VOLTA_SPANNER_HH diff --git a/lily/input-scheme.cc b/lily/input-scheme.cc index f313a3c27e..379c2fa9bd 100644 --- a/lily/input-scheme.cc +++ b/lily/input-scheme.cc @@ -1,9 +1,20 @@ /* - input-scheme.cc -- implement Input bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "std-string.hh" @@ -46,10 +57,8 @@ LY_DEFINE (ly_input_file_line_char_column, LY_ASSERT_TYPE (unsmob_input, sip, 1); Input *ip = unsmob_input (sip); - int l = 0; - int ch = 0; - int col = 0; - ip->get_counts (&l, &ch, &col); + int l, ch, col, offset = 0; + ip->get_counts (&l, &ch, &col, &offset); return scm_list_4 (ly_string2scm (ip->file_string ()), scm_from_int (l), scm_from_int (ch), diff --git a/lily/input-smob.cc b/lily/input-smob.cc index 8affedab7c..716c41d713 100644 --- a/lily/input-smob.cc +++ b/lily/input-smob.cc @@ -1,9 +1,20 @@ /* - input-smob.cc -- implement Input smob + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "input.hh" diff --git a/lily/input.cc b/lily/input.cc index 084b1f3b64..cbb609941f 100644 --- a/lily/input.cc +++ b/lily/input.cc @@ -1,9 +1,20 @@ /* - input.cc -- implement Input + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "input.hh" @@ -12,6 +23,7 @@ using namespace std; #include "international.hh" +#include "program-option.hh" #include "source-file.hh" #include "sources.hh" #include "warn.hh" @@ -79,15 +91,22 @@ Input::message (string s) const void Input::programming_error (string s) const { - message (_f ("programming error: %s", s.c_str ())); - message (_ ("continuing, cross fingers") + "\n"); + if (get_program_option ("warning-as-error")) + ::error (s); + else { + message (_f ("programming error: %s", s.c_str ())); + message (_ ("continuing, cross fingers") + "\n"); + } } void Input::warning (string s) const { - message (_f ("warning: %s", s)); + if (get_program_option ("warning-as-error")) + ::error (s); + else + message (_f ("warning: %s", s)); } void @@ -139,8 +158,8 @@ Input::line_number () const int Input::column_number () const { - int line, chr, col = 0; - source_file_->get_counts (start_, &line, &chr, &col); + int line, chr, col, offset = 0; + source_file_->get_counts (start_, &line, &chr, &col, &offset); return col; } @@ -156,16 +175,16 @@ Input::end_line_number () const int Input::end_column_number () const { - int line, chr, col = 0; - source_file_->get_counts (end_, &line, &chr, &col); + int line, chr, col, offset = 0; + source_file_->get_counts (end_, &line, &chr, &col, &offset); return col; } void -Input::get_counts (int *line, int *chr, int *col) const +Input::get_counts (int *line, int *chr, int *col, int *offset) const { - source_file_->get_counts (start_, line, chr, col); + source_file_->get_counts (start_, line, chr, col, offset); } void diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index d3ee12950e..56fa84ee26 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -1,9 +1,20 @@ /* - instrument-name-engraver.cc -- implement Instrument_name_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -27,7 +38,7 @@ protected: SCM long_text_; SCM short_text_; - vector axis_groups_; + vector axis_groups_; virtual void finalize (); DECLARE_ACKNOWLEDGER (axis_group); @@ -35,8 +46,17 @@ protected: void start_spanner (); void consider_start_spanner (); void stop_spanner (); + + virtual void derived_mark () const; }; +void +Instrument_name_engraver::derived_mark () const +{ + scm_gc_mark (long_text_); + scm_gc_mark (short_text_); +} + Instrument_name_engraver::Instrument_name_engraver () { text_spanner_ = 0; @@ -63,7 +83,7 @@ Instrument_name_engraver::consider_start_spanner () long_text = get_property ("vocalName"); short_text = get_property ("shortVocalName"); } - + if ((Text_interface::is_markup (long_text) || Text_interface::is_markup (short_text)) && (!text_spanner_ @@ -73,7 +93,6 @@ Instrument_name_engraver::consider_start_spanner () if (text_spanner_) stop_spanner (); - short_text_ = short_text; long_text_ = long_text; @@ -85,7 +104,7 @@ void Instrument_name_engraver::start_spanner () { text_spanner_ = make_spanner ("InstrumentName", SCM_EOL); - + Grob *col = unsmob_grob (get_property ("currentCommandColumn")); text_spanner_->set_bound (LEFT, col); text_spanner_->set_property ("text", short_text_); @@ -101,7 +120,6 @@ Instrument_name_engraver::start_spanner () text_spanner_->programming_error ("cannot find root system"); } - void Instrument_name_engraver::acknowledge_axis_group (Grob_info info) { @@ -112,6 +130,7 @@ Instrument_name_engraver::acknowledge_axis_group (Grob_info info) && !info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")) && !info.grob ()->internal_has_interface (ly_symbol2scm ("piano-pedal-interface")) + && !info.grob ()->internal_has_interface (ly_symbol2scm ("volta-interface")) && (!Align_interface::has_interface (info.grob ()))) { axis_groups_.push_back (info.grob ()); @@ -122,26 +141,27 @@ void Instrument_name_engraver::finalize () { if (text_spanner_) - { - stop_spanner (); - } + stop_spanner (); } void Instrument_name_engraver::stop_spanner () { for (vsize i = 0; i < axis_groups_.size (); i++) - Pointer_group_interface::add_grob (text_spanner_, ly_symbol2scm ("elements"), axis_groups_[i]); + Pointer_group_interface::add_grob (text_spanner_, + ly_symbol2scm ("elements"), + axis_groups_[i]); text_spanner_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn"))); - Pointer_group_interface::set_ordered (text_spanner_, ly_symbol2scm ("elements"), false); + Pointer_group_interface::set_ordered (text_spanner_, + ly_symbol2scm ("elements"), + false); text_spanner_ = 0; } -#include "translator.icc" ADD_ACKNOWLEDGER (Instrument_name_engraver, axis_group); @@ -154,8 +174,8 @@ ADD_TRANSLATOR (Instrument_name_engraver, /* read */ "currentCommandColumn " - "shortInstrumentName " "instrumentName " + "shortInstrumentName " "shortVocalName " "vocalName ", diff --git a/lily/instrument-switch-engraver.cc b/lily/instrument-switch-engraver.cc index a2830554ed..8ae322fae0 100644 --- a/lily/instrument-switch-engraver.cc +++ b/lily/instrument-switch-engraver.cc @@ -1,14 +1,27 @@ /* - instrument-switch-engraver.cc -- implement + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen Nienhuys - (c) 2006--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" #include "item.hh" +#include "text-interface.hh" + #include "translator.icc" @@ -22,8 +35,15 @@ protected: void stop_translation_time_step (); void process_music (); + + virtual void derived_mark () const; }; +void +Instrument_switch_engraver::derived_mark () const +{ + scm_gc_mark (cue_name_); +} Instrument_switch_engraver::Instrument_switch_engraver () { @@ -38,11 +58,14 @@ void Instrument_switch_engraver::process_music () { SCM cue_text = get_property ("instrumentCueName"); - + if (!scm_is_eq (cue_name_, cue_text)) { - text_ = make_item ("InstrumentSwitch", SCM_EOL); - text_->set_property ("text", cue_text); + if (Text_interface::is_markup (cue_text)) + { + text_ = make_item ("InstrumentSwitch", SCM_EOL); + text_->set_property ("text", cue_text); + } cue_name_ = cue_text; } } diff --git a/lily/item-scheme.cc b/lily/item-scheme.cc index 6e540a327d..405fe776cd 100644 --- a/lily/item-scheme.cc +++ b/lily/item-scheme.cc @@ -1,10 +1,21 @@ /* - item-scheme.cc -- implement Item bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "item.hh" diff --git a/lily/item.cc b/lily/item.cc index e559f6abed..0a853484e0 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -1,9 +1,20 @@ /* - item.cc -- implement Item + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "item.hh" @@ -242,12 +253,6 @@ Item::pure_height (Grob *g, int start, int end) return cached_pure_height_ + pure_relative_y_coordinate (g, start, end); } -bool -Item::less (Grob * const &g1, Grob * const &g2) -{ - return dynamic_cast (g1)->get_column ()->get_rank () < dynamic_cast (g2)->get_column ()->get_rank (); -} - ADD_INTERFACE (Item, "Grobs can be distinguished in their role in the horizontal" " spacing. Many grobs define constraints on the spacing by" diff --git a/lily/keep-alive-together-engraver.cc b/lily/keep-alive-together-engraver.cc new file mode 100644 index 0000000000..8cda5a0d5f --- /dev/null +++ b/lily/keep-alive-together-engraver.cc @@ -0,0 +1,85 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Joe Neeman + + 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 . +*/ + +#include "context.hh" +#include "dispatcher.hh" +#include "engraver.hh" +#include "grob.hh" +#include "grob-array.hh" + +#include "translator.icc" + +class Keep_alive_together_engraver: public Engraver +{ + vector group_spanners_; + +public: + TRANSLATOR_DECLARATIONS (Keep_alive_together_engraver); + DECLARE_ACKNOWLEDGER (hara_kiri_group_spanner); + + virtual void finalize (); +}; + +Keep_alive_together_engraver::Keep_alive_together_engraver () +{ +} + +void +Keep_alive_together_engraver::acknowledge_hara_kiri_group_spanner (Grob_info i) +{ + group_spanners_.push_back (i.grob ()); +} + +void +Keep_alive_together_engraver::finalize () +{ + for (vsize i = 0; i < group_spanners_.size (); ++i) + { + SCM grob_array_scm = Grob_array::make_array (); + Grob_array *ga = unsmob_grob_array (grob_array_scm); + + // It would make Hara_kiri_group_spanner::request_suicide a _little_ + // faster if we removed each grob from its own array. It seems + // unnecessary for now, though. + ga->set_array (group_spanners_); + group_spanners_[i]->set_object ("keep-alive-with", grob_array_scm); + } +} + +ADD_ACKNOWLEDGER (Keep_alive_together_engraver, hara_kiri_group_spanner); + +ADD_TRANSLATOR (Keep_alive_together_engraver, + /* doc */ + "This engraver collects all @code{Hara_kiri_group_spanner}s " + "that are created in contexts at or below its own. " + "These spanners are then tied together so that one will " + "be removed only if all are removed. For example, " + "if a @code{StaffGroup} uses this engraver, then the staves " + "in the group will all be visible as long as there is a note " + "in at least one of them.", + + /* create */ + "", + + /* read */ + "", + + /* write */ + "" + ); diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 11234556fd..2264e27876 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -1,9 +1,20 @@ /* - key-engraver.cc -- implement Key_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "bar-line.hh" @@ -61,12 +72,15 @@ Key_engraver::create_key (bool is_default) 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"); - bool extranatural = to_boolean (get_property ("extraNatural")); if ((to_boolean (get_property ("printKeyCancellation")) || key == SCM_EOL) @@ -79,9 +93,8 @@ Key_engraver::create_key (bool is_default) SCM new_alter_pair = scm_assoc (scm_caar (s), key); Rational old_alter = robust_scm2rational (scm_cdar (s), 0); if (new_alter_pair == SCM_BOOL_F - || (extranatural - && (ly_scm2rational (scm_cdr (new_alter_pair)) - old_alter)*old_alter - < Rational (0))) + || ((ly_scm2rational (scm_cdr (new_alter_pair)) - old_alter) * old_alter + < Rational (0))) { *tail = scm_cons (scm_car (s), *tail); tail = SCM_CDRLOC (*tail); @@ -94,13 +107,13 @@ Key_engraver::create_key (bool is_default) key_event_ ? key_event_->self_scm () : SCM_EOL); - cancellation_->set_property ("alteration-alist", restore); + cancellation_->set_property ("alteration-alist", scm_reverse (restore)); cancellation_->set_property ("c0-position", get_property ("middleCPosition")); } } - item_->set_property ("alteration-alist", key); + item_->set_property ("alteration-alist", scm_reverse (key)); } if (!is_default) @@ -185,10 +198,10 @@ Key_engraver::read_event (Stream_event const *r) } if (warn) - r->origin ()->warning ("No ordering for key signature alterations"); + r->origin ()->warning ("Incomplete keyAlterationOrder for key signature"); } - context ()->set_property ("keySignature", accs); + context ()->set_property ("keySignature", scm_reverse (accs)); context ()->set_property ("tonic", r->get_property ("tonic")); } @@ -221,7 +234,8 @@ ADD_TRANSLATOR (Key_engraver, "keyAlterationOrder " "keySignature " "lastKeySignature " - "printKeyCancellation ", + "printKeyCancellation " + "middleCClefPosition ", /* write */ "keySignature " diff --git a/lily/key-performer.cc b/lily/key-performer.cc index 327a53c042..93d932b8d5 100644 --- a/lily/key-performer.cc +++ b/lily/key-performer.cc @@ -1,9 +1,20 @@ /* - key-performer.cc -- implement Key_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "audio-item.hh" diff --git a/lily/key-signature-interface.cc b/lily/key-signature-interface.cc index d0f30268eb..f05dc7dabe 100644 --- a/lily/key-signature-interface.cc +++ b/lily/key-signature-interface.cc @@ -1,11 +1,22 @@ /* - key-item.cc -- implement Key_signature_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys keyplacement by Mats Bengtsson + + 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 . */ #include "accidental-interface.hh" diff --git a/lily/laissez-vibrer-engraver.cc b/lily/laissez-vibrer-engraver.cc index 762d56d980..49c64ce772 100644 --- a/lily/laissez-vibrer-engraver.cc +++ b/lily/laissez-vibrer-engraver.cc @@ -1,12 +1,22 @@ /* - laissez-vibrer-engraver.cc -- implement Laissez_vibrer_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys -*/ + 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 . +*/ #include "engraver.hh" #include "item.hh" @@ -20,8 +30,8 @@ class Laissez_vibrer_engraver : public Engraver Stream_event *event_; Grob *lv_column_; vector lv_ties_; - - void stop_translation_timestep (); + + void stop_translation_timestep (); DECLARE_ACKNOWLEDGER (note_head); protected: DECLARE_TRANSLATOR_LISTENER (laissez_vibrer); @@ -56,34 +66,33 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf) if (!event_) return; + SCM cause = event_->self_scm (); + if (!lv_column_) - { - lv_column_ = make_item ("LaissezVibrerTieColumn", event_->self_scm ()); - } + lv_column_ = make_item ("LaissezVibrerTieColumn", cause); - SCM cause = event_->self_scm (); Grob *lv_tie = make_item ("LaissezVibrerTie", cause); lv_tie->set_object ("note-head", inf.grob ()->self_scm ()); - + Pointer_group_interface::add_grob (lv_column_, ly_symbol2scm ("ties"), lv_tie); if (is_direction (unsmob_stream_event (cause)->get_property ("direction"))) { Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction")); - lv_tie->set_property ("direction", scm_from_int (d)); + lv_tie->set_property ("direction", scm_from_int (d)); } - + lv_tie->set_parent (lv_column_, Y_AXIS); lv_ties_.push_back (lv_tie); } ADD_ACKNOWLEDGER (Laissez_vibrer_engraver, note_head); -ADD_TRANSLATOR (Laissez_vibrer_engraver, +ADD_TRANSLATOR (Laissez_vibrer_engraver, /* doc */ "Create laissez vibrer items.", - + /* create */ "LaissezVibrerTie " "LaissezVibrerTieColumn ", diff --git a/lily/least-squares.cc b/lily/least-squares.cc index 2e9382f503..048920b192 100644 --- a/lily/least-squares.cc +++ b/lily/least-squares.cc @@ -1,9 +1,20 @@ /* - least-squares.cc -- implement minimise_least_squares + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #include "least-squares.hh" diff --git a/lily/ledger-line-engraver.cc b/lily/ledger-line-engraver.cc index d5ba5da8c8..bd0a323e97 100644 --- a/lily/ledger-line-engraver.cc +++ b/lily/ledger-line-engraver.cc @@ -1,9 +1,20 @@ /* - ledger-line-engraver.cc -- implement Ledger_line_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "pointer-group-interface.hh" diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc index ff2c4141a1..a518bc9225 100644 --- a/lily/ledger-line-spanner.cc +++ b/lily/ledger-line-spanner.cc @@ -1,9 +1,20 @@ /* - ledger-line-spanner.cc -- implement Ledger_line_spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include @@ -309,7 +320,7 @@ Ledger_line_spanner::print (SCM smob) Item *h = dynamic_cast (heads[i]); int pos = Staff_symbol_referencer::get_rounded_position (h); - if (!staff_extent.contains (pos - sign (pos))) + if (!staff_extent.contains (pos - sign (pos)) && !staff_extent.is_empty ()) { Interval head_size = h->extent (common[X_AXIS], X_AXIS); Interval ledger_size = head_size; diff --git a/lily/lexer.ll b/lily/lexer.ll index 1ad6b667da..882418242d 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -1,13 +1,23 @@ %{ // -*-Fundamental-*- /* - lexer.ll -- implement the Flex lexer + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys + Jan Nieuwenhuizen - (c) 1996--2009 Han-Wen Nienhuys - Jan Nieuwenhuizen -*/ + 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 . +*/ /* backup rules @@ -41,6 +51,7 @@ using namespace std; #include "interval.hh" #include "lily-guile.hh" #include "lily-lexer.hh" +#include "lily-parser.hh" #include "lilypond-version.hh" #include "main.hh" #include "music.hh" @@ -75,10 +86,10 @@ bool is_valid_version (string s); yylval.string = new string #define yylval \ - (*(YYSTYPE*)lexval) + (*(YYSTYPE*)lexval_) #define yylloc \ - (*(YYLTYPE*)lexloc) + (*(YYLTYPE*)lexloc_) #define YY_USER_ACTION add_lexed_char (YYLeng ()); @@ -174,7 +185,7 @@ BOM_UTF8 \357\273\277 /* Use the trailing context feature. Otherwise, the BOM will not be found if the file starts with an identifier definition. */ {BOM_UTF8}/.* { - if (this->lexloc->line_number () != 1 || this->lexloc->column_number () != 0) + if (this->lexloc_->line_number () != 1 || this->lexloc_->column_number () != 0) { LexerError (_ ("stray UTF-8 BOM encountered").c_str ()); exit (1); @@ -187,13 +198,13 @@ BOM_UTF8 \357\273\277 "%{" { yy_push_state (longcomment); } - %[^{\n\r].*[\n\r] { + %[^{\n\r][^\n\r]*[\n\r] { } %[^{\n\r] { // backup rule } %[\n\r] { } - %[^{\n\r].* { + %[^{\n\r][^\n\r]* { } {WHITE}+ { @@ -356,6 +367,11 @@ BOM_UTF8 \357\273\277 yylval.scm = unpack_identifier(sval); return identifier_type (yylval.scm); } + + for (size_t i = 0; i < pending_string_includes_.size (); i++) + new_input ("", pending_string_includes_[i], + parser_->sources_); + pending_string_includes_.clear (); yylval.scm = sval; return SCM_TOKEN; @@ -421,7 +437,7 @@ BOM_UTF8 \357\273\277 \\{ESCAPED} { *yylval.string += to_string (escaped_char (YYText ()[1])); } - [^\\"]+ { + [^\\""]+ { *yylval.string += YYText (); } \" { @@ -518,58 +534,53 @@ BOM_UTF8 \357\273\277 } {MARKUPCOMMAND} { string str (YYText () + 1); + + int token_type = MARKUP_FUNCTION; SCM s = lookup_markup_command (str); - SCM s2 = lookup_markup_list_command (str); - if (scm_is_pair (s) && scm_is_symbol (scm_cdr (s)) ) { - yylval.scm = scm_car(s); - SCM tag = scm_cdr(s); - if (tag == ly_symbol2scm("markup0")) - return MARKUP_HEAD_MARKUP0; - if (tag == ly_symbol2scm("empty")) - return MARKUP_HEAD_EMPTY; - else if (tag == ly_symbol2scm ("markup0-markup1")) - return MARKUP_HEAD_MARKUP0_MARKUP1; - else if (tag == ly_symbol2scm ("markup-list0")) - return MARKUP_HEAD_LIST0; - else if (tag == ly_symbol2scm ("scheme0")) - return MARKUP_HEAD_SCM0; - else if (tag == ly_symbol2scm ("scheme0-scheme1")) - return MARKUP_HEAD_SCM0_SCM1; - else if (tag == ly_symbol2scm ("scheme0-markup1")) - return MARKUP_HEAD_SCM0_MARKUP1; - else if (tag == ly_symbol2scm ("scheme0-scheme1-markup2")) - return MARKUP_HEAD_SCM0_SCM1_MARKUP2; - else if (tag == ly_symbol2scm ("scheme0-scheme1-markup2-markup3")) - return MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3; - else if (tag == ly_symbol2scm ("scheme0-markup1-markup2")) - return MARKUP_HEAD_SCM0_MARKUP1_MARKUP2; - else if (tag == ly_symbol2scm ("scheme0-scheme1-scheme2")) - return MARKUP_HEAD_SCM0_SCM1_SCM2; - else { - programming_error ("no parser tag defined for this markup signature"); - ly_display_scm (s); - assert(false); - } - } else if (scm_is_pair (s2) && scm_is_symbol (scm_cdr (s2))) { - yylval.scm = scm_car(s2); - SCM tag = scm_cdr(s2); - if (tag == ly_symbol2scm("empty")) - return MARKUP_LIST_HEAD_EMPTY; - else if (tag == ly_symbol2scm ("scheme0")) - return MARKUP_LIST_HEAD_SCM0; - else if (tag == ly_symbol2scm ("markup-list0")) - return MARKUP_LIST_HEAD_LIST0; - else if (tag == ly_symbol2scm ("scheme0-markup-list1")) - return MARKUP_LIST_HEAD_SCM0_LIST1; - else if (tag == ly_symbol2scm ("scheme0-scheme1-markup-list2")) - return MARKUP_LIST_HEAD_SCM0_SCM1_LIST2; - else { - programming_error ("no parser tag defined for this markup list signature"); - ly_display_scm (s); - assert(false); - } - } else - return scan_escaped_word (str); + + // lookup-markup-command returns a pair with the car + // being the function to call, and the cdr being the + // call signature specified to define-markup-command, + // a list of predicates. + + if (!scm_is_pair (s)) { + // If lookup-markup-command was not successful, we + // try lookup-markup-list-command instead. + // If this fails as well, we just scan and return + // the escaped word. + s = lookup_markup_list_command (str); + if (scm_is_pair (s)) + token_type = MARKUP_LIST_FUNCTION; + else + return scan_escaped_word (str); + } + + // If the list of predicates is, say, + // (number? number? markup?), then tokens + // EXPECT_MARKUP EXPECT_SCM EXPECT_SCM EXPECT_NO_MORE_ARGS + // will be generated. Note that we have to push them + // in reverse order, so the first token pushed in the + // loop will be EXPECT_NO_MORE_ARGS. + + yylval.scm = scm_car(s); + + // yylval now contains the function to call as token + // value (for token type MARKUP_FUNCTION or + // MARKUP_LIST_FUNCTION). + + push_extra_token(EXPECT_NO_MORE_ARGS); + s = scm_cdr(s); + for (; scm_is_pair(s); s = scm_cdr(s)) { + SCM predicate = scm_car(s); + + if (predicate == ly_lily_module_constant ("markup-list?")) + push_extra_token(EXPECT_MARKUP_LIST); + else if (predicate == ly_lily_module_constant ("markup?")) + push_extra_token(EXPECT_MARKUP); + else + push_extra_token(EXPECT_SCM); + } + return token_type; } [{}] { return YYText ()[0]; @@ -830,6 +841,9 @@ Lily_lexer::scan_bare_word (string str) yylval.scm = scm_cdr (handle); return CHORD_MODIFIER; } + if ((chord_repetition_.repetition_symbol_ != SCM_EOL) + && to_boolean (scm_equal_p (chord_repetition_.repetition_symbol_, sym))) + return CHORD_REPETITION; } yylval.scm = ly_string2scm (str); diff --git a/lily/ligature-bracket-engraver.cc b/lily/ligature-bracket-engraver.cc index 3421896831..b467ec998a 100644 --- a/lily/ligature-bracket-engraver.cc +++ b/lily/ligature-bracket-engraver.cc @@ -1,19 +1,29 @@ /* - ligature-bracket-engraver.cc -- implement Ligature_bracket_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Juergen Reuter - (c) 2002--2009 Juergen Reuter + 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 . */ #include "international.hh" -#include "ligature-engraver.hh" +#include "engraver.hh" #include "note-column.hh" #include "tuplet-bracket.hh" #include "spanner.hh" #include "stream-event.hh" -#include "spanner.hh" #include "item.hh" #include "translator.icc" diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc index c3830b4b02..99e86ed20b 100644 --- a/lily/ligature-engraver.cc +++ b/lily/ligature-engraver.cc @@ -1,9 +1,20 @@ /* - ligature-engraver.cc -- implement Ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Juergen Reuter - (c) 2002--2009 Juergen Reuter + 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 . */ #include "ligature-engraver.hh" @@ -132,7 +143,7 @@ Ligature_engraver::process_music () 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 ()); } } @@ -144,8 +155,9 @@ Ligature_engraver::stop_translation_timestep () { if (!finished_primitives_.size ()) { - finished_ligature_->programming_error ("Ligature_engraver::stop_translation_timestep (): " - "junking empty ligature"); + finished_ligature_->programming_error ( + "Ligature_engraver::stop_translation_timestep ():" + " junking empty ligature"); } else { @@ -182,15 +194,13 @@ Ligature_engraver::current_ligature () } 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); } } diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index d81eec8982..1763a5cebb 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -1,10 +1,21 @@ /* - lily-guile.cc -- implement assorted SCM interface functions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "lily-guile.hh" @@ -127,12 +138,10 @@ ly_string2scm (string const &str) str.length ()); } - char * -ly_scm2newstr (SCM str, size_t *lenp) +ly_scm2str0 (SCM str) { - char* p = scm_to_locale_stringn(str, lenp); - return p; + return scm_to_locale_string (str); } /* @@ -650,7 +659,7 @@ SCM parse_symbol_list (char const *symbols) { while (isspace (*symbols)) - *symbols++; + symbols++; string s = symbols; replace_all (&s, '\n', ' '); replace_all (&s, '\t', ' '); diff --git a/lily/lily-lexer-scheme.cc b/lily/lily-lexer-scheme.cc index fa783bd175..e2be4fca43 100644 --- a/lily/lily-lexer-scheme.cc +++ b/lily/lily-lexer-scheme.cc @@ -1,10 +1,21 @@ -/* - lily-lexer-scheme.cc -- implement Lily_lexer bindings. - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #include "lily-lexer.hh" diff --git a/lily/lily-lexer.cc b/lily/lily-lexer.cc index 25d2c98c25..1160fe69f6 100644 --- a/lily/lily-lexer.cc +++ b/lily/lily-lexer.cc @@ -1,9 +1,20 @@ /* - lily-lexer.cc -- implement Lily_lexer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "lily-lexer.hh" @@ -12,6 +23,7 @@ #include using namespace std; +#include "context.hh" // for nested_property_alist #include "international.hh" #include "interval.hh" #include "keyword.hh" @@ -59,7 +71,6 @@ static Keyword_ent the_key_tab[] {"name", NAME}, {"new", NEWCONTEXT}, {"notemode", NOTEMODE}, - {"objectid", OBJECTID}, {"once", ONCE}, {"override", OVERRIDE}, {"paper", PAPER}, @@ -95,9 +106,10 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser) error_level_ = 0; is_main_input_ = false; start_module_ = SCM_EOL; + chord_repetition_ = Chord_repetition (); smobify_self (); - add_scope (ly_make_anonymous_module (false)); + add_scope (ly_make_module (false)); push_note_state (scm_c_make_hash_table (0)); chordmodifier_tab_ = scm_make_vector (scm_from_int (1), SCM_EOL); } @@ -105,12 +117,13 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser) Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser) : Includable_lexer () { - parser_ = parser; + parser_ = parser; keytable_ = (src.keytable_) ? new Keyword_table (*src.keytable_) : 0; chordmodifier_tab_ = src.chordmodifier_tab_; pitchname_tab_stack_ = src.pitchname_tab_stack_; sources_ = src.sources_; start_module_ = SCM_EOL; + chord_repetition_ = src.chord_repetition_; error_level_ = src.error_level_; is_main_input_ = src.is_main_input_; @@ -123,7 +136,7 @@ Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser) SCM *tail = &scopes; for (SCM s = src.scopes_; scm_is_pair (s); s = scm_cdr (s)) { - SCM newmod = ly_make_anonymous_module (false); + SCM newmod = ly_make_module (false); ly_module_copy (newmod, scm_car (s)); *tail = scm_cons (newmod, SCM_EOL); tail = SCM_CDRLOC (*tail); @@ -190,7 +203,7 @@ Lily_lexer::keyword_list () const { if (!keytable_) return SCM_EOL; - + SCM l = SCM_EOL; SCM *tail = &l; for (vsize i = 0; i < keytable_->table_.size (); i++) @@ -230,7 +243,6 @@ Lily_lexer::start_main_input () yy_flex_debug = get_program_option ("debug-lexer"); parser_->set_yydebug (get_program_option ("debug-parser")); - new_input (main_input_name_, sources_); scm_module_define (scm_car (scopes_), @@ -256,12 +268,20 @@ Lily_lexer::new_input (string str, Sources *ss) Includable_lexer::new_input (str, ss); } +// PATH is either a single symbol (or string) or a list of symbols +// giving the path to a nested property. A symbol is treated the same +// as a list of length 1. void -Lily_lexer::set_identifier (SCM name, SCM s) +Lily_lexer::set_identifier (SCM path, SCM val) { - SCM sym = name; - if (scm_is_string (name)) - sym = scm_string_to_symbol (name); + SCM sym = path; + if (scm_is_string (path)) + sym = scm_string_to_symbol (path); + else if (scm_is_pair (path)) + { + sym = scm_car (path); + path = scm_cdr (path); + } if (scm_is_symbol (sym)) { @@ -273,7 +293,13 @@ Lily_lexer::set_identifier (SCM name, SCM s) SCM mod = scm_car (scopes_); - scm_module_define (mod, sym, s); + if (scm_is_pair (path)) + { + SCM prev = ly_module_lookup (mod, sym); + if (prev != SCM_BOOL_F) + val = nested_property_alist (scm_variable_ref (prev), path, val); + } + scm_module_define (mod, sym, val); } else programming_error ("identifier is not a symbol"); @@ -287,7 +313,7 @@ Lily_lexer::LexerError (char const *s) else { error_level_ |= 1; - Input spot (*lexloc); + Input spot (*lexloc_); spot.error (s); } } @@ -312,7 +338,7 @@ Lily_lexer::escaped_char (char c) const Input Lily_lexer::here_input () const { - return Input (*lexloc); + return Input (*lexloc_); } void @@ -329,8 +355,8 @@ void Lily_lexer::add_lexed_char (int count) { char const *start = here_str0 (); - lexloc->set (get_source_file (), - start, start + count); + lexloc_->set (get_source_file (), + start, start + count); char_count_stack_.back () += count; } @@ -344,7 +370,7 @@ SCM Lily_lexer::mark_smob (SCM s) { ASSERT_LIVE_IS_ALLOWED (); - + Lily_lexer *lexer = (Lily_lexer *) SCM_CELL_WORD_1 (s); scm_gc_mark (lexer->chordmodifier_tab_); @@ -365,3 +391,9 @@ Lily_lexer::print_smob (SCM s, SCM port, scm_print_state*) scm_puts (" >", port); return 1; } + +bool +Lily_lexer::is_clean () const +{ + return include_stack_.empty (); +} diff --git a/lily/lily-parser-scheme.cc b/lily/lily-parser-scheme.cc index f58f2ea0fa..6a5f8d791b 100644 --- a/lily/lily-parser-scheme.cc +++ b/lily/lily-parser-scheme.cc @@ -1,9 +1,20 @@ /* - lily-parser-scheme.cc -- implement Lily_parser bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include @@ -189,7 +200,25 @@ LY_DEFINE (ly_parser_parse_string, "ly:parser-parse-string", Lily_parser *parser = unsmob_lily_parser (parser_smob); LY_ASSERT_TYPE (scm_is_string, ly_code, 2); - parser->parse_string (ly_scm2string (ly_code)); + if (!parser->lexer_->is_clean ()) + parser->parser_error (_ ("ly:parser-parse-string is only valid with a new parser." + " Use ly:parser-include-string instead.")); + else + parser->parse_string (ly_scm2string (ly_code)); + + return SCM_UNSPECIFIED; +} + +LY_DEFINE (ly_parser_include_string, "ly:parser-include-string", + 2, 0, 0, (SCM parser_smob, SCM ly_code), + "Include the string @var{ly-code} into the input stream" + " for @var{parser-smob}.") +{ + LY_ASSERT_SMOB (Lily_parser, parser_smob, 1); + Lily_parser *parser = unsmob_lily_parser (parser_smob); + LY_ASSERT_TYPE (scm_is_string, ly_code, 2); + + parser->include_string (ly_scm2string (ly_code)); return SCM_UNSPECIFIED; } @@ -212,6 +241,32 @@ LY_DEFINE (ly_parser_set_note_names, "ly:parser-set-note-names", return SCM_UNSPECIFIED; } +LY_DEFINE (ly_parser_set_repetition_symbol, "ly:parser-set-repetition-symbol", + 2, 0, 0, (SCM parser, SCM sym), + "Replace the current repetition symbol in @var{parser}." + " @var{sym} is the new repetition symbol.") +{ + LY_ASSERT_SMOB (Lily_parser, parser, 1); + Lily_parser *p = unsmob_lily_parser (parser); + + p->lexer_->chord_repetition_.repetition_symbol_ = sym; + + return SCM_UNSPECIFIED; +} + +LY_DEFINE (ly_parser_set_repetition_function, "ly:parser-set-repetition-function", + 2, 0, 0, (SCM parser, SCM fun), + "Replace the current repetition function in @var{parser}." + " @var{fun} is the new repetition function.") +{ + LY_ASSERT_SMOB (Lily_parser, parser, 1); + Lily_parser *p = unsmob_lily_parser (parser); + + p->lexer_->chord_repetition_.repetition_function_ = fun; + + return SCM_UNSPECIFIED; +} + LY_DEFINE (ly_parser_output_name, "ly:parser-output-name", 1, 0, 0, (SCM parser), "Return the base name of the output file.") diff --git a/lily/lily-parser.cc b/lily/lily-parser.cc index eb59e7bda3..2ee77b1e6d 100644 --- a/lily/lily-parser.cc +++ b/lily/lily-parser.cc @@ -1,10 +1,21 @@ /* - lily-parser.cc -- implement Lily_parser + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "lily-parser.hh" @@ -53,7 +64,7 @@ Lily_parser::Lily_parser (Lily_parser const &src) { lexer_ = new Lily_lexer (*src.lexer_, this); } - + lexer_->unprotect (); } @@ -86,7 +97,7 @@ Lily_parser::print_smob (SCM s, SCM port, scm_print_state*) void Lily_parser::parse_file (string init, string name, string out_name) { - // TODO: use $parser + // TODO: use $parser lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ()); output_basename_ = out_name; @@ -131,12 +142,12 @@ Lily_parser::parse_file (string init, string name, string out_name) void Lily_parser::parse_string (string ly_code) { - // TODO: use $parser + // TODO: use $parser lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ()); lexer_->main_input_name_ = ""; - lexer_->is_main_input_ = true; + lexer_->is_main_input_ = true; lexer_->new_input (lexer_->main_input_name_, ly_code, sources_); SCM mod = lexer_->set_current_scope (); @@ -153,6 +164,12 @@ Lily_parser::parse_string (string ly_code) error_level_ = error_level_ | lexer_->error_level_; } +void +Lily_parser::include_string (string ly_code) +{ + lexer_->add_string_include (ly_code); +} + void Lily_parser::clear () { @@ -162,7 +179,7 @@ Lily_parser::clear () lexer_->remove_scope (); } - lexer_ = 0; + lexer_ = 0; } char const * @@ -193,7 +210,7 @@ IMPLEMENT_DEFAULT_EQUAL_P (Lily_parser); /**************************************************************** - OUTPUT-DEF + OUTPUT-DEF ****************************************************************/ Output_def * @@ -203,7 +220,7 @@ get_layout (Lily_parser *parser) Output_def *layout = unsmob_output_def (id); layout = layout ? layout->clone () : new Output_def; layout->set_variable (ly_symbol2scm ("is-layout"), SCM_BOOL_T); - + return layout; } @@ -253,7 +270,7 @@ push_paper (Lily_parser *parser, Output_def *paper) void pop_paper (Lily_parser *parser) { - if (! scm_is_null (parser->lexer_->lookup_identifier ("$papers"))) + if (scm_is_pair (parser->lexer_->lookup_identifier ("$papers"))) parser->lexer_->set_identifier (ly_symbol2scm ("$papers"), scm_cdr (parser->lexer_->lookup_identifier ("$papers"))); } @@ -277,13 +294,13 @@ get_header (Lily_parser *parser) ly_module_copy (nid, id); id = nid; } - + return id; } -SCM +SCM Lily_parser::make_scope () const { - SCM module = ly_make_anonymous_module (be_safe_global); - return module; + SCM module = ly_make_module (be_safe_global); + return module; } diff --git a/lily/lily-version.cc b/lily/lily-version.cc index 2163e0b472..d118c3c50a 100644 --- a/lily/lily-version.cc +++ b/lily/lily-version.cc @@ -1,9 +1,20 @@ /* - lily-version.cc -- implement version strings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Jan Nieuwenhuizen - (c) 1999--2009 Jan Nieuwenhuizen + 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 . */ #include "lily-version.hh" diff --git a/lily/lilypond-version.cc b/lily/lilypond-version.cc index aa192a30c7..e7b686a208 100644 --- a/lily/lilypond-version.cc +++ b/lily/lilypond-version.cc @@ -1,9 +1,20 @@ /* - lilypond-version.cc -- implement Lilypond_version + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #include diff --git a/lily/lilypond.rc.in b/lily/lilypond.rc.in index e85138e5a1..52b059b6a8 100644 --- a/lily/lilypond.rc.in +++ b/lily/lilypond.rc.in @@ -20,7 +20,7 @@ VS_VERSION_INFO VERSIONINFO VALUE "FileDescription", "LilyPond" VALUE "FileVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_LEVEL@.@BUILD_VERSION@" VALUE "InternalName", "LilyPond@" - VALUE "LegalCopyright ", "Copyright (C) 1995--2009 Han-Wen Nienhuys and Jan Nieuwenhuizen, and others." + VALUE "LegalCopyright ", "Copyright (C) 1995--2011 Han-Wen Nienhuys and Jan Nieuwenhuizen, and others." VALUE "OriginalFilename", "lilypond.exe" VALUE "ProductName", "LilyPond" VALUE "ProductVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_LEVEL@" diff --git a/lily/line-interface.cc b/lily/line-interface.cc index 2fa6d61bb7..ebbd62ef4f 100644 --- a/lily/line-interface.cc +++ b/lily/line-interface.cc @@ -1,18 +1,29 @@ /* - line-interface.cc -- implement Line_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "line-interface.hh" -#include "staff-symbol-referencer.hh" +#include "font-interface.hh" +#include "grob.hh" #include "lookup.hh" #include "output-def.hh" -#include "grob.hh" -#include "font-interface.hh" +#include "staff-symbol-referencer.hh" Stencil Line_interface::make_arrow (Offset begin, Offset end, @@ -37,15 +48,9 @@ Line_interface::make_trill_line (Grob *me, Offset from, Offset to) { - Offset dz = (to-from); - SCM alist_chain = Font_interface::text_font_alist_chain (me); - SCM style_alist = scm_list_n (scm_cons (ly_symbol2scm ("font-encoding"), - ly_symbol2scm ("fetaMusic")), - SCM_UNDEFINED); + Offset dz = (to - from); - Font_metric *fm = select_font (me->layout (), - scm_cons (style_alist, - alist_chain)); + Font_metric *fm = Font_interface::get_default_font (me); Stencil elt = fm->find_by_name ("scripts.trill_element"); elt.align_to (Y_AXIS, CENTER); @@ -77,7 +82,7 @@ Line_interface::make_zigzag_line (Grob *me, Offset from, Offset to) { - Offset dz = to -from; + Offset dz = to - from; Real thick = Staff_symbol_referencer::line_thickness (me); thick *= robust_scm2double (me->get_property ("thickness"), 1.0); // todo: staff sym referencer? @@ -198,11 +203,11 @@ Line_interface::line (Grob *me, Offset from, Offset to) SCM type = me->get_property ("style"); if (type == ly_symbol2scm ("zigzag")) - { - return make_zigzag_line (me, from, to); - } + return make_zigzag_line (me, from, to); else if (type == ly_symbol2scm ("trill")) return make_trill_line (me, from, to); + else if (type == ly_symbol2scm ("none")) + return Stencil (); Stencil stencil; @@ -221,7 +226,7 @@ Line_interface::line (Grob *me, Offset from, Offset to) if (period <= 0) return Stencil (); - Real len = (to-from).length (); + Real len = (to - from).length (); int n = (int) rint ((len - period * fraction) / period); n = max (0, n); @@ -231,7 +236,7 @@ Line_interface::line (Grob *me, Offset from, Offset to) TODO: figure out something intelligent for really short sections. */ - period = ((to-from).length () - period * fraction) / n; + period = ((to - from).length () - period * fraction) / n; } stencil = make_dashed_line (thick, from, to, period, fraction); } @@ -244,21 +249,20 @@ Line_interface::line (Grob *me, Offset from, Offset to) ADD_INTERFACE (Line_interface, "Generic line objects. Any object using lines supports this." " The property @code{style} can be @code{line}," - " @code{dashed-line}, @code{trill}, @code{dotted-line} or" - " @code{zigzag}.\n" + " @code{dashed-line}, @code{trill}, @code{dotted-line}," + " @code{zigzag} or @code{none} (a transparent line).\n" "\n" "For @code{dashed-line}, the length of the dashes is tuned" " with @code{dash-fraction}. If the latter is set to@tie{}0, a" - " dotted line is produced. If @code{dash-period} is negative," - " the line is made transparent.", + " dotted line is produced.", /* properties */ - "dash-period " + "arrow-length " + "arrow-width " "dash-fraction " - "thickness " + "dash-period " "style " + "thickness " "zigzag-length " "zigzag-width " - "arrow-length " - "arrow-width ") - + ); diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc index b19151987f..0235243628 100644 --- a/lily/line-spanner.cc +++ b/lily/line-spanner.cc @@ -1,9 +1,20 @@ /* - line-spanner.cc -- implement Line_spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "align-interface.hh" @@ -13,7 +24,6 @@ #include "item.hh" #include "lily-proto.hh" #include "line-interface.hh" -#include "moment.hh" #include "output-def.hh" #include "pointer-group-interface.hh" #include "spanner.hh" @@ -26,7 +36,6 @@ class Line_spanner { public: DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); DECLARE_SCHEME_CALLBACK (calc_left_bound_info, (SCM)); DECLARE_SCHEME_CALLBACK (calc_left_bound_info_and_text, (SCM)); DECLARE_SCHEME_CALLBACK (calc_right_bound_info, (SCM)); @@ -37,7 +46,7 @@ public: Spanner *parent_spanner (Grob *g) { if (Spanner::has_interface (g)) - return dynamic_cast (g); + return dynamic_cast (g); return parent_spanner (g->get_parent (Y_AXIS)); } @@ -66,7 +75,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) for (SCM s = scm_reverse (extra); scm_is_pair (s); s = scm_cdr (s)) details = scm_cons (scm_car (s), details); } - + if (details == SCM_BOOL_F) details = ly_assoc_get (ly_symbol2scm ("default"), bound_details, SCM_EOL); @@ -80,7 +89,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) properties, text), details); } - + if (!scm_is_number (ly_assoc_get (ly_symbol2scm ("X"), details, SCM_BOOL_F))) { Direction attach = (Direction) @@ -98,13 +107,13 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) bound_grob = (dir == LEFT) ? columns[0] : columns.back(); } - + details = scm_acons (ly_symbol2scm ("X"), scm_from_double (robust_relative_extent (bound_grob, commonx, X_AXIS) .linear_combination (attach)), details); } - + if (!scm_is_number (ly_assoc_get (ly_symbol2scm ("Y"), details, SCM_BOOL_F))) { @@ -130,11 +139,12 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) 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. + /* + 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)); @@ -147,8 +157,10 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) } else { - /* We fall back to assuming that the distance between staves doesn't - change over line breaks. */ + /* + 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 (); @@ -202,7 +214,7 @@ Line_spanner::calc_left_bound_info_and_text (SCM smob) properties, text), alist); } - + return alist; } @@ -212,29 +224,9 @@ Line_spanner::print (SCM smob) { Spanner *me = dynamic_cast (unsmob_grob (smob)); - Interval_t moments = me->spanned_time (); - /* - We remove the line at the start of the line. For piano voice - indicators, it makes no sense to have them at the start of the - line. - - I'm not sure what the official rules for glissandi are, but - usually the 2nd note of the glissando is "exact", so when playing - from the start of the line, there is no need to glide. - - From a typographical p.o.v. this makes sense, since the amount of - space left of a note at the start of a line is very small. - - --hwn. - - */ - if (moments.length () == Moment (0,0)) - return SCM_EOL; - Drul_array bounds (me->get_property ("left-bound-info"), me->get_property ("right-bound-info")); - Grob *commonx = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS); commonx = me->common_refpoint (commonx, X_AXIS); @@ -247,7 +239,7 @@ Line_spanner::print (SCM smob) bounds[d], SCM_BOOL_F), 0.0), robust_scm2double (ly_assoc_get (ly_symbol2scm ("Y"), bounds[d], SCM_BOOL_F), 0.0)); - + span_points[d] = z; } while (flip (&d) != LEFT); @@ -255,8 +247,13 @@ Line_spanner::print (SCM smob) Drul_array gaps (0, 0); Drul_array arrows (0, 0); Drul_array anchor_align (0, 0); - Drul_array stencils (0,0); - Drul_array common_y (0, 0); + Drul_array stencils (0,0); + Drul_array common_y (0, 0); + + // For scaling of 'padding and 'stencil-offset + Real magstep + = pow (2, robust_scm2double (me->get_property ("font-size"), 0.0) / 6); + do { gaps[d] = robust_scm2double (ly_assoc_get (ly_symbol2scm ("padding"), @@ -264,13 +261,13 @@ Line_spanner::print (SCM smob) 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); + 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"), bounds[d], SCM_BOOL_F)); if (!common_y[d]) - common_y[d] = me; + common_y[d] = me; } while (flip (&d) != LEFT); @@ -279,6 +276,12 @@ Line_spanner::print (SCM smob) 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]; + + span_points[LEFT][Y_AXIS] += normalized_endpoints[LEFT] * y_length; + span_points[RIGHT][Y_AXIS] -= (1 - normalized_endpoints[RIGHT]) * y_length; + Offset dz = (span_points[RIGHT] - span_points[LEFT]); Offset dz_dir = dz.direction (); if (gaps[LEFT] + gaps[RIGHT] > dz.length ()) @@ -289,7 +292,7 @@ Line_spanner::print (SCM smob) Stencil line; do { - span_points[d] += -d * gaps[d] * dz.direction (); + span_points[d] += -d * gaps[d] * magstep * dz.direction (); if (stencils[d]) { @@ -303,15 +306,12 @@ Line_spanner::print (SCM smob) SCM off = ly_assoc_get (ly_symbol2scm ("stencil-offset"), bounds[d], SCM_BOOL_F); - if (scm_is_number (align)) + if (scm_is_number (align)) s.align_to (Y_AXIS, scm_to_double (align)); - /* - todo: should use font-size. - */ if (is_number_pair (off)) - s.translate (ly_scm2offset (off)); - + s.translate (ly_scm2offset (off) * magstep); + line.add_stencil (s); } } @@ -332,7 +332,7 @@ Line_spanner::print (SCM smob) if (line_right[X_AXIS] > line_left[X_AXIS]) { line.add_stencil (Line_interface::line (me, line_left, line_right)); - + line.add_stencil (Line_interface::arrows (me, span_points[LEFT], span_points[RIGHT], @@ -342,7 +342,7 @@ Line_spanner::print (SCM smob) line.translate (Offset (-me->relative_coordinate (commonx, X_AXIS), -me->relative_coordinate (my_common_y, Y_AXIS))); - + return line.smobbed_copy (); } @@ -361,4 +361,3 @@ ADD_INTERFACE (Line_spanner, "thickness " "to-barline " ); - diff --git a/lily/listener.cc b/lily/listener.cc index c8202a9d34..686ee3ad67 100644 --- a/lily/listener.cc +++ b/lily/listener.cc @@ -1,9 +1,20 @@ /* - listener.cc -- implement Listener and Listener_target + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005 Erik Sandberg - (c) 2005 Erik Sandberg + 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 . */ #include "listener.hh" @@ -58,4 +69,4 @@ Listener::equal_p (SCM a, SCM b) } IMPLEMENT_SIMPLE_SMOBS (Listener); -IMPLEMENT_TYPE_P (Listener, "listener"); +IMPLEMENT_TYPE_P (Listener, "ly:listener?"); diff --git a/lily/lookup.cc b/lily/lookup.cc index 014d2ec8ab..aec43fe8fb 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -1,11 +1,22 @@ /* - lookup.cc -- implement simple Lookup methods. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "lookup.hh" @@ -86,28 +97,6 @@ Lookup::beam (Real slope, Real width, Real thick, Real blot) return Stencil (b, expr); } -Stencil -Lookup::dashed_slur (Bezier b, Real thick, Real dash_period, Real dash_fraction) -{ - SCM l = SCM_EOL; - - Real on = dash_fraction * dash_period; - Real off = dash_period - on; - - for (int i = 4; i--;) - l = scm_cons (ly_offset2scm (b.control_[i]), l); - - SCM at = (scm_list_n (ly_symbol2scm ("dashed-slur"), - scm_from_double (thick), - scm_from_double (on), - scm_from_double (off), - ly_quote_scm (l), - SCM_UNDEFINED)); - - Box box (b.extent (X_AXIS), b.extent (Y_AXIS)); - return Stencil (box, at); -} - Stencil Lookup::rotated_box (Real slope, Real width, Real thick, Real blot) { @@ -365,47 +354,75 @@ Lookup::frame (Box b, Real thick, Real blot) Make a smooth curve along the points */ Stencil -Lookup::slur (Bezier curve, Real curvethick, Real linethick) +Lookup::slur (Bezier curve, Real curvethick, Real linethick, + SCM dash_details) { + Stencil return_value; + + /* + calculate the offset for the two beziers that make the sandwich + for the slur + */ Real alpha = (curve.control_[3] - curve.control_[0]).arg (); Bezier back = curve; Offset perp = curvethick * complex_exp (Offset (0, alpha + M_PI / 2)) * 0.5; - back.reverse (); back.control_[1] += perp; back.control_[2] += perp; curve.control_[1] -= perp; curve.control_[2] -= perp; - - SCM scontrols[8]; - - for (int i = 0; i < 4; i++) - scontrols[i] = ly_offset2scm (back.control_[i]); - for (int i = 0; i < 4; i++) - scontrols[i + 4] = ly_offset2scm (curve.control_[i]); - - /* - Need the weird order b.o. the way PS want its arguments - */ - int indices[] = {5, 6, 7, 4, 1, 2, 3, 0}; - SCM list = SCM_EOL; - for (int i = 8; i--;) - list = scm_cons (scontrols[indices[i]], list); - - SCM at = (scm_list_n (ly_symbol2scm ("bezier-sandwich"), - ly_quote_scm (list), - scm_from_double (linethick), - SCM_UNDEFINED)); - Box b (curve.extent (X_AXIS), - curve.extent (Y_AXIS)); - - b[X_AXIS].unite (back.extent (X_AXIS)); - b[Y_AXIS].unite (back.extent (Y_AXIS)); - - b.widen (0.5 * linethick, 0.5 * linethick); - return Stencil (b, at); + + if (!scm_is_pair (dash_details)) + { + /* solid slur */ + return_value = bezier_sandwich (back, curve, linethick); + } + else + { + /* dashed or combination slur */ + int num_segments = scm_to_int (scm_length (dash_details)); + for (int i=0; i - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "lily-guile.hh" @@ -12,81 +23,71 @@ #include "std-string.hh" #include "protected-scm.hh" -#ifdef MODULE_GC_KLUDGE -Protected_scm anonymous_modules = SCM_EOL; -bool perform_gc_kludge; -#endif - -void -clear_anonymous_modules () -{ -#ifdef MODULE_GC_KLUDGE - for (SCM s = anonymous_modules; - scm_is_pair (s); - s = scm_cdr (s)) - { - SCM module = scm_car (s); - SCM closure = SCM_MODULE_EVAL_CLOSURE (module); - SCM prop = scm_procedure_property (closure, ly_symbol2scm ("module")); - - if (ly_is_module (prop)) - { - scm_set_procedure_property_x (closure, ly_symbol2scm ("module"), - SCM_BOOL_F); - } - } - anonymous_modules = SCM_EOL; -#endif -} SCM -ly_make_anonymous_module (bool safe) +ly_make_module (bool safe) { SCM mod = SCM_EOL; if (!safe) { - SCM maker = ly_lily_module_constant ("make-module"); - - SCM scm_module = ly_lily_module_constant ("the-scm-module"); + /* Look up (evaluate) Scheme make-module function and call it */ + SCM maker = ly_lily_module_constant ("make-module"); mod = scm_call_0 (maker); - scm_module_define (mod, ly_symbol2scm ("%module-public-interface"), - mod); - + /* + Look up and call Guile module-export-all! or, when using + Guile V1.8, the compatible shim defined in lily.scm. + */ + SCM module_export_all_x = ly_lily_module_constant ("module-export-all!"); + scm_call_1 (module_export_all_x, mod); + + /* + Evaluate Guile module "the-root-module", + and ensure we inherit definitions from it and the "lily" module + N.B. this used to be "the-scm-module" and is deprecated in + Guile V1.9/2.0 + */ + SCM scm_module = ly_lily_module_constant ("the-root-module"); ly_use_module (mod, scm_module); ly_use_module (mod, global_lily_module); } else { + /* Evaluate and call make-safe-lilypond-module */ SCM proc = ly_lily_module_constant ("make-safe-lilypond-module"); mod = scm_call_0 (proc); } -#ifdef MODULE_GC_KLUDGE - if (perform_gc_kludge) - anonymous_modules = scm_cons (mod, anonymous_modules); -#endif - return mod; } SCM ly_use_module (SCM mod, SCM used) { - SCM expr - = scm_list_3 (ly_symbol2scm ("module-use!"), - mod, - scm_list_2 (ly_symbol2scm ("module-public-interface"), - used)); - + /* + Pick up the module's interface definition. + TODO - Replace inline evaluations (interpreted) + with guile API calls if these become available. + */ + SCM scm_module_use = ly_symbol2scm ("module-use!"); + SCM scm_module_public_interface = ly_symbol2scm ("module-public-interface"); + SCM iface = scm_list_2 (scm_module_public_interface, used); + /* + Set up to interpret + '(module_use! (module-public-interface ))' + */ + SCM expr = scm_list_3 (scm_module_use, mod, iface); + /* + Now return SCM value, this is the result of interpreting + '(eval (module-use! (module-public-interface )) "lily")' + */ return scm_eval (expr, global_lily_module); } #define FUNC_NAME __FUNCTION__ - SCM ly_module_symbols (SCM mod) { @@ -115,7 +116,8 @@ LY_DEFINE (ly_module_2_alist, "ly:module->alist", SCM_VALIDATE_MODULE (1, mod); SCM obarr = SCM_MODULE_OBARRAY (mod); - return scm_internal_hash_fold ((Hash_closure_function) & entry_to_alist, NULL, SCM_EOL, obarr); + return scm_internal_hash_fold ((scm_t_hash_fold_fn) &entry_to_alist, + NULL, SCM_EOL, obarr); } void @@ -133,57 +135,3 @@ ly_reexport_module (SCM mod) { ly_export (mod, ly_module_symbols (mod)); } - -#ifdef MODULE_GC_KLUDGE -static SCM -redefine_keyval (void * /* closure */, - SCM key, - SCM val, - SCM result) -{ - SCM new_tab = result; - scm_hashq_set_x (new_tab, key, val); - return new_tab; -} - -/* - UGH UGH. - Kludge for older GUILE 1.6 versions. -*/ -void -make_stand_in_procs_weak () -{ - /* - Ugh, ABI breakage for 1.6.5: scm_stand_in_procs is a hashtab from - 1.6.5 on. - */ - if (scm_is_pair (scm_stand_in_procs)) - { - return; - } - - if (scm_weak_key_hash_table_p (scm_stand_in_procs) == SCM_BOOL_T) - { -#if (SCM_MINOR_VERSION == 7) - perform_gc_kludge = false; -#endif - return; - } - - - perform_gc_kludge = true; - - - SCM old_tab = scm_stand_in_procs; - SCM new_tab = scm_make_weak_key_hash_table (scm_from_int (257)); - - new_tab = scm_internal_hash_fold ((Hash_closure_function) & redefine_keyval, - NULL, - new_tab, - old_tab); - - scm_stand_in_procs = new_tab; -} - -ADD_SCM_INIT_FUNC (make_stand_in_procs_weak, make_stand_in_procs_weak); -#endif diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc index 8b5a4b4992..5327ff9ced 100644 --- a/lily/lyric-combine-music-iterator.cc +++ b/lily/lyric-combine-music-iterator.cc @@ -1,9 +1,20 @@ /* - new-lyric-combine-iterator.cc -- implement Lyric_combine_music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "dispatcher.hh" @@ -52,6 +63,7 @@ private: DECLARE_LISTENER (check_new_context); bool music_found_; + bool lyrics_found_; Context *lyrics_context_; Context *music_context_; SCM lyricsto_voice_name_; @@ -65,6 +77,7 @@ private: 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; @@ -267,6 +280,7 @@ Lyric_combine_music_iterator::process (Moment /* when */) if (new_voice) set_music_context (new_voice); + lyrics_found_ = true; if (!music_context_) return; @@ -282,14 +296,13 @@ Lyric_combine_music_iterator::process (Moment /* when */) set_music_context (0); } - if (music_context_ && (start_new_syllable () || (busy_moment_ >= pending_grace_moment_)) && lyric_iter_->ok ()) { Moment now = music_context_->now_mom (); - if (now.grace_part_) + if (now.grace_part_ && !to_boolean (lyrics_context_->get_property ("includeGraceNotes"))) { pending_grace_moment_ = now; pending_grace_moment_.grace_part_ = Rational (0); @@ -299,7 +312,7 @@ Lyric_combine_music_iterator::process (Moment /* when */) { pending_grace_moment_.set_infinite (1); } - + Moment m = lyric_iter_->pending_moment (); lyrics_context_->set_property (ly_symbol2scm ("associatedVoiceContext"), music_context_->self_scm ()); @@ -322,10 +335,12 @@ Lyric_combine_music_iterator::do_quit () 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_) diff --git a/lily/lyric-combine-music.cc b/lily/lyric-combine-music.cc index c47a6e3a99..e8b67e6b07 100644 --- a/lily/lyric-combine-music.cc +++ b/lily/lyric-combine-music.cc @@ -1,9 +1,20 @@ /* - lyric-combine-music.cc -- implement Lyric_combine_music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "music.hh" diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index 74d15e4df1..c52cba8356 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -1,10 +1,21 @@ /* - lyric-engraver.cc -- implement Lyric_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "context.hh" @@ -62,16 +73,27 @@ Lyric_engraver::process_music () if (ly_is_equal (text, scm_from_locale_string (" "))) { if (last_text_) - last_text_->set_property ("self-alignment-X", scm_from_int (LEFT)); + last_text_->set_property ("self-alignment-X", + get_property ("lyricMelismaAlignment")); } else text_ = make_item ("LyricText", event_->self_scm ()); } + + Context *voice = get_voice_to_lyrics (context ()); + if (last_text_ + && voice + && to_boolean (voice->get_property ("melismaBusy")) + && !to_boolean (context ()->get_property ("ignoreMelismata"))) + last_text_->set_property ("self-alignment-X", + get_property ("lyricMelismaAlignment")); } Context * get_voice_to_lyrics (Context *lyrics) { + bool searchForVoice = to_boolean (lyrics->get_property ("searchForVoice")); + SCM avc = lyrics->get_property ("associatedVoiceContext"); if (Context *c = unsmob_context (avc)) return c; @@ -81,7 +103,7 @@ get_voice_to_lyrics (Context *lyrics) if (scm_is_string (voice_name)) nm = ly_scm2string (voice_name); - else if (nm == "") + else if (nm == "" || !searchForVoice) return 0; else { @@ -113,7 +135,7 @@ get_voice_to_lyrics (Context *lyrics) } Grob * -get_current_note_head (Context *voice) +get_current_note_head (Context *voice, bool include_grace_notes) { Moment now = voice->now_mom (); for (SCM s = voice->get_property ("busyGrobs"); @@ -127,10 +149,13 @@ get_current_note_head (Context *voice) continue; } - if (end_mom->main_part_ > now.main_part_ - && dynamic_cast (g) - && Note_head::has_interface (g)) - return g; + if (((end_mom->main_part_ > now.main_part_) || + (include_grace_notes && end_mom->grace_part_ > now.grace_part_)) + && dynamic_cast (g) + && Note_head::has_interface (g)) + { + return g; + } } return 0; @@ -145,7 +170,8 @@ Lyric_engraver::stop_translation_timestep () if (voice) { - Grob *head = get_current_note_head (voice); + bool include_grace_notes = to_boolean (get_property ("includeGraceNotes")); + Grob *head = get_current_note_head (voice, include_grace_notes); if (head) { @@ -153,7 +179,7 @@ Lyric_engraver::stop_translation_timestep () if (melisma_busy (voice) && !to_boolean (get_property ("ignoreMelismata"))) text_->set_property ("self-alignment-X", - get_property("lyricMelismaAlignment")); + get_property ("lyricMelismaAlignment")); } else { @@ -177,7 +203,9 @@ ADD_TRANSLATOR (Lyric_engraver, /* read */ "ignoreMelismata " - "lyricMelismaAlignment ", + "includeGraceNotes " + "lyricMelismaAlignment " + "searchForVoice", /* write */ "" diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc index 5e254b45ee..088881fc1d 100644 --- a/lily/lyric-extender.cc +++ b/lily/lyric-extender.cc @@ -1,9 +1,21 @@ /* - lyric-extender.cc -- implement Lyric_extender - source file of the GNU LilyPond music typesetter + This file is part of LilyPond, the GNU music typesetter. - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "lyric-extender.hh" diff --git a/lily/lyric-hyphen.cc b/lily/lyric-hyphen.cc index 3b2dab06f1..5fae21fc34 100644 --- a/lily/lyric-hyphen.cc +++ b/lily/lyric-hyphen.cc @@ -1,9 +1,20 @@ /* - hyphen-spanner.cc -- implement Lyric_hyphen + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Han-Wen Nienhuys - (c) 2003--2009 Han-Wen Nienhuys + 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 . */ #include "lyric-hyphen.hh" diff --git a/lily/lyric-performer.cc b/lily/lyric-performer.cc index b318ab90fe..decb4c9c6c 100644 --- a/lily/lyric-performer.cc +++ b/lily/lyric-performer.cc @@ -1,9 +1,20 @@ /* - lyric-performer.cc -- implement Lyric_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "audio-item.hh" diff --git a/lily/main.cc b/lily/main.cc index 2d293343c5..9e33ec13dc 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -1,9 +1,20 @@ /* - main.cc -- implement main () entrypoint. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "main.hh" @@ -102,8 +113,9 @@ static char const *NOTICE static char const *WARRANTY = _i (" This program is free software; you can redistribute it and/or\n" - "modify it under the terms of the GNU General Public License version 2\n" - "as published by the Free Software Foundation.\n" + "modify it under the terms of the GNU General Public License as \n" + "published by the Free Software Foundation, either version 3 of\n" + "the License, or (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" @@ -128,7 +140,7 @@ static Getopt_long *option_parser = 0; /* Internationalisation kludge in two steps: * use _i () to get entry in POT file - * call gettext () explicitely for actual "translation" */ + * call gettext () explicitly for actual "translation" */ static Long_option_init options_static[] = { @@ -172,14 +184,18 @@ char const *LILYPOND_DATADIR = PACKAGE_DATADIR "/" TOPLEVEL_VERSION; && defined(HAVE_FPU_CONTROL_H) && (HAVE_FPU_CONTROL_H == 1)) #include -static void configure_fpu() { +static void +configure_fpu () +{ fpu_control_t fpu_control = 0x027f; _FPU_SETCW (fpu_control); } #else -static void configure_fpu() { +static void +configure_fpu () +{ } #endif /* defined(__x86__) || defined(__i386__) */ @@ -219,9 +235,9 @@ dir_info (FILE *out) static void copyright () { - /* Do not update the copyright years here, run grand-replace.sh. */ - printf (_f ("Copyright (c) %s by\n%s and others.", "1996--2009", - AUTHORS).c_str ()); + /* Do not update the copyright years here, run `make grand-replace' */ + printf ("%s", (_f ("Copyright (c) %s by\n%s and others.", "1996--2011", + AUTHORS).c_str ())); printf ("\n"); } @@ -247,25 +263,25 @@ LY_DEFINE (ly_usage, "ly:usage", "Print usage message.") { /* No version number or newline here. It confuses help2man. */ - printf (_f ("Usage: %s [OPTION]... FILE...", PROGRAM_NAME).c_str ()); + printf ("%s", (_f ("Usage: %s [OPTION]... FILE...", PROGRAM_NAME).c_str ())); printf ("\n\n"); - printf (_ ("Typeset music and/or produce MIDI from FILE.").c_str ()); + printf ("%s", (_ ("Typeset music and/or produce MIDI from FILE.").c_str ())); printf ("\n\n"); - printf (_ ("LilyPond produces beautiful music notation.").c_str ()); + printf ("%s", (_ ("LilyPond produces beautiful music notation.").c_str ())); printf ("\n"); - printf (_f ("For more information, see %s", PROGRAM_URL).c_str ()); + printf ("%s", (_f ("For more information, see %s", PROGRAM_URL).c_str ())); printf ("\n\n"); - printf (_ ("Options:").c_str ()); + printf ("%s", (_ ("Options:").c_str ())); printf ("\n"); - printf (Long_option_init::table_string (options_static).c_str ()); + printf ("%s", Long_option_init::table_string (options_static).c_str ()); printf ("\n"); /* Translators, please translate this string as - "Report bugs in English via %s", + "Report bugs in English via %s", or if there is a LilyPond users list or forum in your language - "Report bugs in English via %s or in YOUR_LANG via URI" */ - printf (_f ("Report bugs via %s", - "http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs" - ).c_str ()); + "Report bugs in English via %s or in YOUR_LANG via URI" */ + printf ("%s", (_f ("Report bugs via %s", + "http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs" + ).c_str ())); printf ("\n"); printf ("\n"); return SCM_UNSPECIFIED; @@ -278,7 +294,7 @@ warranty () printf ("\n"); copyright (); printf ("\n"); - printf (_ (WARRANTY).c_str ()); + printf ("%s", (_ (WARRANTY).c_str ())); } static void @@ -409,7 +425,7 @@ main_with_guile (void *, int, char **) *tail = scm_cons (scm_from_locale_string (arg), SCM_EOL); tail = SCM_CDRLOC (*tail); } - + delete option_parser; option_parser = 0; @@ -504,9 +520,10 @@ parse_argv (int argc, char **argv) case 'j': jail_spec = option_parser->optional_argument_str0_; break; - + case 'e': - init_scheme_code_global += option_parser->optional_argument_str0_ + string (" "); + init_scheme_code_global + += option_parser->optional_argument_str0_ + string (" "); break; case 'w': warranty (); @@ -561,7 +578,7 @@ parse_argv (int argc, char **argv) void setup_guile_env () { - const char *yield = getenv ("LILYPOND_GC_YIELD"); + char const *yield = getenv ("LILYPOND_GC_YIELD"); bool overwrite = true; if (!yield) { @@ -581,7 +598,7 @@ setup_guile_env () } vector start_environment_global; - + int main (int argc, char **argv, char **envp) { @@ -589,7 +606,7 @@ main (int argc, char **argv, char **envp) for (char **p = envp; *p; p++) start_environment_global.push_back(*p); - + if (getenv ("LILYPOND_VERBOSE")) be_verbose_global = true; @@ -614,7 +631,7 @@ main (int argc, char **argv, char **envp) #else scm_boot_guile (argc, argv, main_with_guile, 0); #endif - + /* Only reachable if GUILE exits. That is an error. */ return 1; } diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index 76977f91c6..67ad884824 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -1,9 +1,20 @@ /* - mark-engraver.cc -- implement Mark_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #include @@ -32,6 +43,7 @@ class Mark_engraver : public Engraver void create_items (Stream_event *); Item *text_; + Item *final_text_; Stream_event *mark_ev_; public: @@ -39,7 +51,9 @@ public: protected: void process_music (); + void start_translation_timestep (); void stop_translation_timestep (); + virtual void finalize (); DECLARE_TRANSLATOR_LISTENER (mark); DECLARE_ACKNOWLEDGER (break_alignment); @@ -48,6 +62,7 @@ protected: Mark_engraver::Mark_engraver () { text_ = 0; + final_text_ = 0; mark_ev_ = 0; } @@ -57,11 +72,14 @@ Mark_engraver::acknowledge_break_alignment (Grob_info inf) Grob *s = inf.grob (); if (text_ && dynamic_cast (s)) - { - text_->set_parent (s, X_AXIS); - } + text_->set_parent (s, X_AXIS); } +void +Mark_engraver::start_translation_timestep () +{ + final_text_ = 0; +} void Mark_engraver::stop_translation_timestep () @@ -70,11 +88,21 @@ Mark_engraver::stop_translation_timestep () { text_->set_object ("side-support-elements", grob_list_to_grob_array (get_property ("stavesFound"))); + final_text_ = text_; text_ = 0; } mark_ev_ = 0; } +void +Mark_engraver::finalize () +{ + if (final_text_) + final_text_->set_property ("break-visibility", + scm_c_make_vector (3, SCM_BOOL_T)); + final_text_ = 0; +} + void Mark_engraver::create_items (Stream_event *ev) { diff --git a/lily/measure-grouping-engraver.cc b/lily/measure-grouping-engraver.cc index 03192a1def..7a788dc3d2 100644 --- a/lily/measure-grouping-engraver.cc +++ b/lily/measure-grouping-engraver.cc @@ -1,9 +1,20 @@ /* - measure-grouping-engraver.cc -- implement Measure_grouping_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "warn.hh" @@ -61,18 +72,18 @@ Measure_grouping_engraver::process_music () if (now.grace_part_) return; - SCM grouping = get_property ("beatGrouping"); + SCM grouping = get_property ("beatStructure"); if (scm_is_pair (grouping)) { Moment *measpos = unsmob_moment (get_property ("measurePosition")); Rational mp = measpos->main_part_; - Moment *beatlen_mom = unsmob_moment (get_property ("beatLength")); - Rational beat_length = beatlen_mom->main_part_; + Moment *base_mom = unsmob_moment (get_property ("baseMoment")); + Rational base_moment = base_mom->main_part_; Rational where (0); for (SCM s = grouping; scm_is_pair (s); - where += Rational ((int) scm_to_int (scm_car (s))) * beat_length, + where += Rational ((int) scm_to_int (scm_car (s))) * base_moment, s = scm_cdr (s)) { int grouplen = scm_to_int (scm_car (s)); @@ -83,19 +94,21 @@ Measure_grouping_engraver::process_music () programming_error ("last grouping not finished yet"); continue; } + if (grouplen > 1) + { + grouping_ = make_spanner ("MeasureGrouping", SCM_EOL); + grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn"))); - grouping_ = make_spanner ("MeasureGrouping", SCM_EOL); - grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn"))); - - stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length; - get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_)); + stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * base_moment; + get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_)); - if (grouplen == 3) - grouping_->set_property ("style", ly_symbol2scm ("triangle")); - else - grouping_->set_property ("style", ly_symbol2scm ("bracket")); + if (grouplen == 3) + grouping_->set_property ("style", ly_symbol2scm ("triangle")); + else + grouping_->set_property ("style", ly_symbol2scm ("bracket")); - break; + break; + } } } } @@ -115,10 +128,10 @@ ADD_TRANSLATOR (Measure_grouping_engraver, "MeasureGrouping ", /* read */ - "beatLength " + "baseMoment " + "beatStructure " "currentMusicalColumn " - "measurePosition " - "beatGrouping ", + "measurePosition ", /* write */ "" diff --git a/lily/measure-grouping-spanner.cc b/lily/measure-grouping-spanner.cc index 1e407d17cc..db6b4fced2 100644 --- a/lily/measure-grouping-spanner.cc +++ b/lily/measure-grouping-spanner.cc @@ -1,9 +1,20 @@ /* - measure-grouping-spanner.cc -- implement Measure_grouping + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "measure-grouping-spanner.hh" diff --git a/lily/melody-engraver.cc b/lily/melody-engraver.cc index 3dc1d28448..96873d3293 100644 --- a/lily/melody-engraver.cc +++ b/lily/melody-engraver.cc @@ -1,9 +1,20 @@ /* - melody-engraver.cc -- implement Melody_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ diff --git a/lily/melody-spanner.cc b/lily/melody-spanner.cc index 2dbcd56cab..8a96a2feb7 100644 --- a/lily/melody-spanner.cc +++ b/lily/melody-spanner.cc @@ -1,10 +1,21 @@ /* - melody-spanner.cc -- implement Melody_spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "melody-spanner.hh" diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc index 249506ed34..ead5f1f0ad 100644 --- a/lily/mensural-ligature-engraver.cc +++ b/lily/mensural-ligature-engraver.cc @@ -1,10 +1,21 @@ /* - mensural-ligature-engraver.cc -- implement Mensural_ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2002--2009 Juergen Reuter , + Copyright (C) 2002--2011 Juergen Reuter , Pal Benko + + 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 . */ #include "coherent-ligature-engraver.hh" @@ -48,7 +59,7 @@ protected: virtual Spanner *create_ligature_spanner (); virtual void build_ligature (Spanner *ligature, vector primitives); DECLARE_TRANSLATOR_LISTENER (ligature); - + public: TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver); @@ -67,7 +78,7 @@ Mensural_ligature_engraver::listen_ligature (Stream_event *ev) Mensural_ligature_engraver::Mensural_ligature_engraver () { - brew_ligature_primitive_proc = + brew_ligature_primitive_proc = Mensural_ligature::brew_ligature_primitive_proc; } @@ -115,7 +126,7 @@ Mensural_ligature_engraver::transform_heads (vector primitives) } int pitch = unsmob_pitch (nr->get_property ("pitch"))->steps (); - int delta_pitch = 0; + int prim = 0; if (at_beginning) { @@ -131,14 +142,12 @@ Mensural_ligature_engraver::transform_heads (vector primitives) } else { - delta_pitch = pitch - prev_pitch; - if (delta_pitch == 0) + if (pitch == prev_pitch) { nr->origin ()->warning (_ ("prime interval within ligature -> skipping")); at_beginning = true; - primitive->set_property ("primitive", - scm_from_int (MLP_NONE)); + prim = MLP_NONE; continue; } } @@ -148,14 +157,14 @@ Mensural_ligature_engraver::transform_heads (vector primitives) { nr->origin ()->warning (_ ("mensural ligature: duration none of Mx, L, B, S -> skipping")); - primitive->set_property ("primitive", - scm_from_int (MLP_NONE)); + prim = MLP_NONE; at_beginning = true; continue; } - // apply_transition replacement begins bool general_case = true; + bool make_flexa = false; + bool allow_flexa = true; // first check special cases // 1. beginning @@ -164,9 +173,7 @@ Mensural_ligature_engraver::transform_heads (vector primitives) // a. semibreves if (duration_log == 0) { - primitive->set_property ("primitive", - scm_from_int (MLP_UP | MLP_BREVIS)); - prev_semibrevis = prev_brevis_shape = true; + prim = MLP_UP | MLP_BREVIS; general_case = false; } // b. descendens longa or brevis @@ -176,11 +183,8 @@ Mensural_ligature_engraver::transform_heads (vector primitives) && duration_log > -3) { int left_stem = duration_log == -1 ? MLP_DOWN : 0; - - primitive->set_property ("primitive", - scm_from_int (left_stem | MLP_BREVIS)); - prev_brevis_shape = true; - prev_semibrevis = general_case = false; + prim = left_stem | MLP_BREVIS; + general_case = false; } } // 2. initial semibrevis must be followed by another one @@ -189,15 +193,14 @@ Mensural_ligature_engraver::transform_heads (vector primitives) prev_semibrevis = false; if (duration_log == 0) { - primitive->set_property ("primitive", scm_from_int (MLP_BREVIS)); + prim = MLP_BREVIS; general_case = false; } else { nr->origin ()->warning (_ ("semibrevis must be followed by another one -> skipping")); - primitive->set_property ("primitive", - scm_from_int (MLP_NONE)); + prim = MLP_NONE; at_beginning = true; continue; } @@ -208,27 +211,20 @@ Mensural_ligature_engraver::transform_heads (vector primitives) nr->origin ()->warning (_ ("semibreves can only appear at the beginning of a ligature,\n" "and there may be only zero or two of them")); - primitive->set_property ("primitive", - scm_from_int (MLP_NONE)); + prim = MLP_NONE; at_beginning = true; continue; } // 4. end, descendens - else if (i == s - 1 && delta_pitch < 0) + else if (i == s - 1 && pitch < prev_pitch) { // brevis; previous note must be turned into flexa if (duration_log == -1) { if (prev_brevis_shape) { - prev_primitive->set_property - ("primitive", - scm_from_int - (MLP_FLEXA - | (scm_to_int (prev_primitive->get_property ("primitive")) - & MLP_DOWN))); - primitive->set_property ("primitive", scm_from_int (MLP_NONE)); - break; // no more notes, no join + make_flexa = true; + general_case = false; } else { @@ -237,54 +233,90 @@ Mensural_ligature_engraver::transform_heads (vector primitives) "when the last note is a descending brevis,\n" "the penultimate note must be another one,\n" "or the ligatura must be LB or SSB")); - primitive->set_property ("primitive", scm_from_int (MLP_NONE)); + prim = MLP_NONE; break; } } // longa else if (duration_log == -2) { - primitive->set_property ("primitive", scm_from_int (MLP_BREVIS)); - general_case = false; + prim = MLP_BREVIS; + general_case = allow_flexa = false; } - // else maxima; fall through regular case below + // else maxima; fall through to regular case below } + if (allow_flexa + && to_boolean (primitive->get_property ("ligature-flexa"))) + { + /* + flexa requested, check whether allowed: + - there should be a previous note + - both of the notes must be of brevis shape + (i.e. can't be maxima or flexa; + longa is forbidden as well - it's nonexistent anyway) + - no compulsory flexa for the next note, + i.e. it's not an ultimate descending breve + */ + make_flexa = !at_beginning && prev_brevis_shape && duration_log > -2; + if (make_flexa && i == s - 2) + { + /* + check last condition: look ahead to next note + */ + Grob_info next_info = primitives[i + 1]; + Item *next_primitive = dynamic_cast (next_info.grob ()); + if (Rhythmic_head::duration_log (next_primitive) == -1) + { + /* + breve: check whether descending + */ + int const next_pitch = unsmob_pitch + (next_info.event_cause ()->get_property ("pitch"))->steps (); + if (next_pitch < pitch) + /* + sorry, forbidden + */ + make_flexa = false; + } + } + } + if (general_case) { - static int const shape[3] = {MLP_MAXIMA, MLP_LONGA, MLP_BREVIS}; + static int const shape[3] = {MLP_MAXIMA, MLP_LONGA, MLP_BREVIS}; - primitive->set_property ("primitive", - scm_from_int (shape[duration_log + 3])); - prev_brevis_shape = duration_log == -1; + prim = shape[duration_log + 3]; } + if (make_flexa) + { + /* + turn the note with the previous one into a flexa + */ + prev_primitive->set_property + ("primitive", + scm_from_int + (MLP_FLEXA_BEGIN + | (scm_to_int (prev_primitive->get_property ("primitive")) + & MLP_STEM))); + prev_primitive->set_property + ("flexa-interval", scm_from_int (pitch - prev_pitch)); + prim = MLP_FLEXA_END; + primitive->set_property + ("flexa-interval", scm_from_int (pitch - prev_pitch)); + } + // join_primitives replacement - if (!at_beginning) - { - /* - if the previous note is longa-shaped and this note is lower, - then the joining line may hide the stem, so it is made longer - to serve as stem as well - */ - if (delta_pitch < 0 - && (scm_to_int (prev_primitive->get_property ("primitive")) - & MLP_LONGA)) - { - delta_pitch -= 6; - // instead of number 6 - // the legth of the longa stem should be queried something like - // Font_interface::get_default_font (ligature)->find_by_name - // ("noteheads.sM2mensural").extent (Y_AXIS).length () - } - prev_primitive->set_property ("join-right-amount", - scm_from_int (delta_pitch)); - // perhaps set add-join as well - } + if (!(at_beginning || make_flexa)) + prev_primitive->set_property ("add-join", ly_bool2scm (true)); + at_beginning = false; prev_primitive = primitive; prev_pitch = pitch; - // apply_transition replacement ends + primitive->set_property ("primitive", scm_from_int (prim)); + prev_brevis_shape = (prim & MLP_BREVIS) != 0; + prev_semibrevis = (prim & MLP_UP) != 0; } } @@ -314,16 +346,11 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature, Real head_width = Font_interface::get_default_font (ligature)-> find_by_name ("noteheads.sM1mensural").extent (X_AXIS).length (); - Real flexa_width - = robust_scm2double (ligature->get_property ("flexa-width"), 2); Real maxima_head_width = Font_interface::get_default_font (ligature)-> - find_by_name ("noteheads.sM1neomensural").extent (X_AXIS).length (); - - flexa_width *= Staff_symbol_referencer::staff_space (ligature); - - Real half_flexa_width = 0.5 * (flexa_width + thickness); + find_by_name ("noteheads.sM3ligmensural").extent (X_AXIS).length (); + Item *prev_primitive = NULL; for (vsize i = 0; i < primitives.size (); i++) { Item *primitive = dynamic_cast (primitives[i].grob ()); @@ -331,31 +358,36 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature, primitive->set_property ("thickness", scm_from_double (thickness)); - switch (output & MLP_ANY) - { - case MLP_NONE: - primitive->set_property ("head-width", - scm_from_double (half_flexa_width)); - break; - case MLP_BREVIS: - case MLP_LONGA: - primitive->set_property ("head-width", - scm_from_double (head_width)); - break; - case MLP_MAXIMA: - primitive->set_property ("head-width", - scm_from_double (maxima_head_width)); - break; - case MLP_FLEXA: - primitive->set_property ("head-width", - scm_from_double (half_flexa_width)); - primitive->set_property ("flexa-width", - scm_from_double (flexa_width)); - break; - default: - programming_error (_ ("unexpected case fall-through")); - break; - } + switch (output & MLP_ANY) { + case MLP_BREVIS: + case MLP_LONGA: + primitive->set_property ("head-width", scm_from_double (head_width)); + break; + case MLP_MAXIMA: + primitive->set_property ("head-width", + scm_from_double (maxima_head_width)); + break; + case MLP_FLEXA_BEGIN: + /* + the next note (should be MLP_FLEXA_END) will handle this one + */ + break; + case MLP_FLEXA_END: + { + SCM flexa_scm = primitive->get_property ("flexa-width"); + Real const flexa_width = robust_scm2double (flexa_scm, 2.0); + SCM head_width = scm_from_double (0.5 * (flexa_width + thickness)); + primitive->set_property ("head-width", head_width); + prev_primitive->set_property ("head-width", head_width); + prev_primitive->set_property ("flexa-width", flexa_scm); + } + break; + default: + programming_error (_ ("unexpected case fall-through")); + break; + } + + prev_primitive = primitive; } } @@ -364,43 +396,69 @@ Mensural_ligature_engraver::fold_up_primitives (vector primitives) { Item *first = 0; Real distance = 0.0; - Real dot_shift = 0.0; + Real staff_space = 0.0; + Real thickness = 0.0; + for (vsize i = 0; i < primitives.size (); i++) { Item *current = dynamic_cast (primitives[i].grob ()); if (i == 0) { first = current; - dot_shift = 1.5 * Staff_symbol_referencer::staff_space (first); + staff_space = Staff_symbol_referencer::staff_space (first); + thickness = scm_to_double (current->get_property ("thickness")); } move_related_items_to_column (current, first->get_column (), distance); - distance - += scm_to_double (current->get_property ("head-width")) - - scm_to_double (current->get_property ("thickness")); + Real head_width = scm_to_double (current->get_property ("head-width")); + distance += head_width - thickness; if (Rhythmic_head::dot_count (current) > 0) - // Move dots above/behind the ligature. + /* + Move dots above/behind the ligature. + dots should also avoid staff lines. + */ { + Grob *dot_gr = Rhythmic_head::get_dots (current); + + bool const on_line = Staff_symbol_referencer::on_line + (current, + robust_scm2int (current->get_property ("staff-position"), 0)); + Real vert_shift = on_line ? staff_space * 0.5 : 0.0; + bool const flexa_begin = + scm_to_int (current->get_property ("primitive")) + & MLP_FLEXA_BEGIN; + if (i + 1 < primitives.size ()) - // dot in the midst => move above head + /* + dot in the midst => avoid next note; + what to avoid and where depends on + being on a line or between lines + */ { - // FIXME: Amount of vertical dot-shift should depend on - // pitch. - // - // FIXME: dot placement is horizontally slightly off. - Rhythmic_head::get_dots (current)->translate_axis (dot_shift, Y_AXIS); - } - else - // trailing dot => move behind head - { - double head_width = - scm_to_double (current->get_property ("head-width")); - Rhythmic_head::get_dots (current)-> - translate_axis (head_width, X_AXIS); + int const delta = + scm_to_int (current->get_property ("delta-position")); + if (flexa_begin) + vert_shift += delta < 0 + ? staff_space : (on_line ? -2.0 : -1.0) * staff_space; + else if (on_line) + { + if (0 < delta && delta < 3) + vert_shift -= staff_space; + } + else if (delta == 1 || delta == -1) + vert_shift -= delta * staff_space; } + + dot_gr->translate_axis (vert_shift, Y_AXIS); + + /* + move all dots behind head + */ + dot_gr->translate_axis + ((flexa_begin ? staff_space * 0.6 : head_width) - 2.0*thickness, X_AXIS); } } } @@ -415,7 +473,7 @@ Mensural_ligature_engraver::build_ligature (Spanner *ligature, } 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 */ diff --git a/lily/mensural-ligature.cc b/lily/mensural-ligature.cc index 4f9e64c961..ad2f0918a9 100644 --- a/lily/mensural-ligature.cc +++ b/lily/mensural-ligature.cc @@ -1,10 +1,21 @@ /* - mensural-ligature.cc -- implement Mensural_ligature + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2002--2009 Juergen Reuter , + Copyright (C) 2002--2011 Juergen Reuter , Pal Benko + + 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 . */ #include "mensural-ligature.hh" @@ -19,18 +30,38 @@ #include "warn.hh" /* + draws one half a flexa, i.e. a portion corresponding to a single note. + this way coloration of the two notes building up the flexa can be + handled independently. + * TODO: divide this function into mensural and neo-mensural style. * * TODO: move this function to class Lookup? */ Stencil brew_flexa (Grob *me, - Real interval, bool solid, Real width, - Real vertical_line_thickness) + Real thickness, + bool begin) { Real staff_space = Staff_symbol_referencer::staff_space (me); + + /* + The thickness of the horizontal lines of the flexa shape + should be equal to that of the horizontal lines of the + neomensural brevis note head (see mf/parmesan-heads.mf). + */ + Real const horizontal_line_thickness = staff_space * 0.35; + + // URGH! vertical_line_thickness is adjustable (via thickness + // property), while horizontal_line_thickness is constant. + // Maybe both should be adjustable independently? + + Real height = staff_space - horizontal_line_thickness; + Stencil stencil; + Real const interval = + robust_scm2double (me->get_property ("flexa-interval"), 0.0); Real slope = (interval / 2.0 * staff_space) / width; // Compensate optical illusion regarding vertical position of left @@ -39,52 +70,42 @@ brew_flexa (Grob *me, Real slope_correction = 0.2 * staff_space * sign (slope); Real corrected_slope = slope + slope_correction / width; - Stencil stencil; if (solid) // colorated flexae { - Stencil solid_head - = Lookup::beam (corrected_slope, width, staff_space, 0.0); - stencil.add_stencil (solid_head); + stencil = Lookup::beam (corrected_slope, width * 0.5, staff_space, 0.0); } else // outline { - /* - The thickness of the horizontal lines of the flexa shape - should be equal to that of the horizontal lines of the - neomensural brevis note head (see mf/parmesan-heads.mf). - */ - Real const horizontal_line_thickness = staff_space * 0.35; - - // URGH! vertical_line_thickness is adjustable (via thickness - // property), while horizontal_line_thickness is constant. - // Maybe both should be adjustable independently? - - Real height = staff_space - horizontal_line_thickness; - - Stencil left_edge - = Lookup::beam (corrected_slope, vertical_line_thickness, height, 0.0); - stencil.add_stencil (left_edge); - - Stencil right_edge - = Lookup::beam (corrected_slope, vertical_line_thickness, height, 0.0); - right_edge.translate_axis (width - vertical_line_thickness, X_AXIS); - right_edge.translate_axis ((width - vertical_line_thickness) * - corrected_slope, Y_AXIS); - stencil.add_stencil (right_edge); - - Stencil bottom_edge - = Lookup::beam (corrected_slope, width, - horizontal_line_thickness, 0.0); - bottom_edge.translate_axis (-0.5 * height, Y_AXIS); + stencil = Lookup::beam (corrected_slope, thickness, height, 0.0); + if (!begin) + { + stencil.translate_axis (width*0.5 - thickness, X_AXIS); + stencil.translate_axis (corrected_slope * (width*0.5 - thickness), + Y_AXIS); + } + + Stencil bottom_edge = + Lookup::beam (corrected_slope, width * 0.5, horizontal_line_thickness, + 0.0); + bottom_edge.translate_axis (-0.5*height, Y_AXIS); stencil.add_stencil (bottom_edge); - Stencil top_edge - = Lookup::beam (corrected_slope, width, - horizontal_line_thickness, 0.0); - top_edge.translate_axis (+0.5 * height, Y_AXIS); + Stencil top_edge = + Lookup::beam (corrected_slope, width * 0.5, horizontal_line_thickness, + 0.0); + top_edge.translate_axis (+0.5*height, Y_AXIS); stencil.add_stencil (top_edge); } - stencil.translate_axis (ypos_correction, Y_AXIS); + + if (begin) + stencil.translate_axis (ypos_correction, Y_AXIS); + else + { + stencil.translate_axis (0.5 * thickness, X_AXIS); + + stencil.translate_axis (interval / -4.0 * staff_space, Y_AXIS); + } + return stencil; } @@ -94,52 +115,61 @@ internal_brew_primitive (Grob *me) SCM primitive_scm = me->get_property ("primitive"); if (primitive_scm == SCM_EOL) { - programming_error ("Mensural_ligature: " - "undefined primitive -> ignoring grob"); + programming_error ("Mensural_ligature:" + " undefined primitive -> ignoring grob"); return Lookup::blank (Box (Interval (0, 0), Interval (0, 0))); } int primitive = scm_to_int (primitive_scm); Stencil out; - int delta_pitch = 0; Real thickness = 0.0; Real width = 0.0; + Real flexa_width = 0.0; Real staff_space = Staff_symbol_referencer::staff_space (me); - if (primitive & MLP_ANY) - thickness = robust_scm2double (me->get_property ("thickness"), .14); - if (primitive & MLP_FLEXA) + bool const color = + me->get_property ("style") == ly_symbol2scm ("blackpetrucci"); + bool const semi = + me->get_property ("style") == ly_symbol2scm ("semipetrucci"); + + if (primitive & MLP_ANY) { - delta_pitch = robust_scm2int (me->get_property ("delta-position"), - 0); - width - = robust_scm2double (me->get_property ("flexa-width"), 2.0 * staff_space); + thickness = robust_scm2double (me->get_property ("thickness"), .14); + width = robust_scm2double (me->get_property ("head-width"), staff_space); } - if (primitive & MLP_SINGLE_HEAD) - width = robust_scm2double (me->get_property ("head-width"), staff_space); + if (primitive & MLP_FLEXA) + flexa_width = robust_scm2double (me->get_property ("flexa-width"), 2.0) + * staff_space; + + int const note_shape = primitive & MLP_ANY; - switch (primitive & MLP_ANY) + switch (note_shape) { case MLP_NONE: return Lookup::blank (Box (Interval (0, 0), Interval (0, 0))); case MLP_LONGA: // mensural brevis head with right cauda out = Font_interface::get_default_font (me)->find_by_name - ("noteheads.sM2mensural"); + (color ? "noteheads.sM2blackmensural" : + semi ? "noteheads.sM2semimensural" : "noteheads.sM2mensural"); break; case MLP_BREVIS: // mensural brevis head out = Font_interface::get_default_font (me)->find_by_name - ("noteheads.sM1mensural"); + (color ? "noteheads.sM1blackmensural" : + semi ? "noteheads.sM1semimensural" : "noteheads.sM1mensural"); break; case MLP_MAXIMA: // should be mensural maxima head without stem out = Font_interface::get_default_font (me)->find_by_name - ("noteheads.sM1neomensural"); + (color ? "noteheads.sM3blackligmensural" : + semi ? "noteheads.sM3semiligmensural" : "noteheads.sM3ligmensural"); break; - case MLP_FLEXA: - out = brew_flexa (me, delta_pitch, false, width, thickness); + case MLP_FLEXA_BEGIN: + case MLP_FLEXA_END: + out = brew_flexa (me, color, flexa_width, thickness, + note_shape == MLP_FLEXA_BEGIN); break; default: - programming_error (_ ("Mensural_ligature: " - "unexpected case fall-through")); + programming_error (_ ("Mensural_ligature:" + " unexpected case fall-through")); return Lookup::blank (Box (Interval (0, 0), Interval (0, 0))); } @@ -165,11 +195,9 @@ internal_brew_primitive (Grob *me) out.add_stencil (join); } - SCM join_right_scm = me->get_property ("join-right-amount"); - - if (scm_is_number (join_right_scm)) + if (to_boolean (me->get_property ("add-join"))) { - int join_right = scm_to_int (join_right_scm); + int join_right = scm_to_int (me->get_property ("delta-position")); if (join_right) { Real y_top = join_right * 0.5 * staff_space; @@ -179,6 +207,19 @@ internal_brew_primitive (Grob *me) { y_bottom = y_top; y_top = 0.0; + + /* + if the previous note is longa-shaped, + the joining line may hide the stem, so made it longer + to serve as stem as well + */ + if (primitive & MLP_LONGA) + /* + instead of 3.0 the length of a longa stem should be used + Font_interface::get_default_font (???)->find_by_name + ("noteheads.s-2mensural").extent (Y_AXIS).length () * 0.5 + */ + y_bottom -= 3.0 * staff_space; } Interval x_extent (width - thickness, width); @@ -224,10 +265,10 @@ ADD_INTERFACE (Mensural_ligature, /* properties */ "delta-position " - "flexa-width " + "ligature-flexa " "head-width " - "join-right-amount " + "add-join " + "flexa-interval " "primitive " "thickness " ); - diff --git a/lily/metronome-engraver.cc b/lily/metronome-engraver.cc index aa75bcb993..09606c261e 100644 --- a/lily/metronome-engraver.cc +++ b/lily/metronome-engraver.cc @@ -1,9 +1,20 @@ /* - metronome-engraver.cc -- implement Metronome_mark_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #include @@ -15,6 +26,7 @@ using namespace std; #include "duration.hh" #include "grob-array.hh" #include "item.hh" +#include "music.hh" #include "stream-event.hh" #include "text-interface.hh" @@ -22,36 +34,91 @@ using namespace std; class Metronome_mark_engraver : public Engraver { + Item *text_; + Grob *support_; + Grob *bar_; + Stream_event *tempo_ev_; + public: TRANSLATOR_DECLARATIONS (Metronome_mark_engraver); -protected: - Item *text_; - Grob *bar_line_; - SCM last_duration_; - SCM last_count_; - SCM last_text_; - protected: - virtual void derived_mark () const; void stop_translation_timestep (); void process_music (); + + DECLARE_ACKNOWLEDGER (break_aligned); + DECLARE_ACKNOWLEDGER (break_alignment); + DECLARE_ACKNOWLEDGER (grob); + + DECLARE_TRANSLATOR_LISTENER (tempo_change); }; Metronome_mark_engraver::Metronome_mark_engraver () { text_ = 0; - last_duration_ = SCM_EOL; - last_count_ = SCM_EOL; - last_text_ = SCM_EOL; + support_ = 0; + bar_ = 0; + tempo_ev_ = 0; +} + +IMPLEMENT_TRANSLATOR_LISTENER (Metronome_mark_engraver, tempo_change); +void +Metronome_mark_engraver::listen_tempo_change (Stream_event *ev) +{ + ASSIGN_EVENT_ONCE (tempo_ev_, ev); +} + +static bool +safe_is_member (SCM scm, SCM lst) +{ + return scm_list_p (lst) == SCM_BOOL_T + && scm_member (scm, lst) != SCM_BOOL_F; +} + +void +Metronome_mark_engraver::acknowledge_break_aligned (Grob_info info) +{ + Grob *g = info.grob (); + + if (text_ + && g->get_property ("break-align-symbol") + == ly_symbol2scm ("staff-bar")) + bar_ = g; + else if (text_ + && !support_ + && safe_is_member (g->get_property ("break-align-symbol"), + text_->get_property ("break-align-symbols")) + && Item::break_visible (g)) + { + support_ = g; + text_->set_parent (g, X_AXIS); + } + if (bar_ || support_) + text_->set_property ("non-musical", SCM_BOOL_T); +} + +void +Metronome_mark_engraver::acknowledge_break_alignment (Grob_info info) +{ + Grob *g = info.grob (); + + if (text_ + && support_ + && dynamic_cast (g)) + text_->set_parent (g, X_AXIS); } void -Metronome_mark_engraver::derived_mark () const +Metronome_mark_engraver::acknowledge_grob (Grob_info info) { - scm_gc_mark (last_count_); - scm_gc_mark (last_duration_); - scm_gc_mark (last_text_); + Grob *g = info.grob (); + + if (text_) + for (SCM s = text_->get_property ("non-break-align-symbols"); + scm_is_pair (s); + s = scm_cdr (s)) + if (g->internal_has_interface (scm_car (s))) + text_->set_parent (g, X_AXIS); } void @@ -59,44 +126,53 @@ Metronome_mark_engraver::stop_translation_timestep () { if (text_) { - Grob *mc = unsmob_grob (get_property ("currentMusicalColumn")); - text_->set_parent (mc, X_AXIS); + if (text_->get_parent (X_AXIS) + && text_->get_parent (X_AXIS)->internal_has_interface (ly_symbol2scm ("multi-measure-rest-interface")) + && bar_) + text_->set_parent (bar_, X_AXIS); + else if (!support_) + { + /* + Gardner Read "Music Notation", p.278 + + Align the metronome mark over the time signature (or the + first notational element of the measure if no time + signature is present in that measure). + */ + if (Grob *mc = unsmob_grob (get_property ("currentMusicalColumn"))) + text_->set_parent (mc, X_AXIS); + else if (Grob *cc = unsmob_grob (get_property ("currentCommandColumn"))) + text_->set_parent (cc, X_AXIS); + } text_->set_object ("side-support-elements", grob_list_to_grob_array (get_property ("stavesFound"))); text_ = 0; + support_ = 0; + bar_ = 0; + tempo_ev_ = 0; } } void Metronome_mark_engraver::process_music () { - SCM count = get_property ("tempoUnitCount"); - SCM duration = get_property ("tempoUnitDuration"); - SCM text = get_property ("tempoText"); - - if ( ( (unsmob_duration (duration) && scm_is_number (count)) - || Text_interface::is_markup (text) ) - && !(ly_is_equal (count, last_count_) - && ly_is_equal (duration, last_duration_) - && ly_is_equal (text, last_text_))) + if (tempo_ev_) { - text_ = make_item ("MetronomeMark", SCM_EOL); + text_ = make_item ("MetronomeMark", tempo_ev_->self_scm ()); SCM proc = get_property ("metronomeMarkFormatter"); - SCM result = scm_call_4 (proc, - text, - duration, - count, + SCM result = scm_call_2 (proc, + tempo_ev_->self_scm (), context ()->self_scm ()); text_->set_property ("text", result); } - - last_duration_ = duration; - last_count_ = count; - last_text_ = text; } +ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_aligned); +ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_alignment); +ADD_ACKNOWLEDGER (Metronome_mark_engraver, grob); + ADD_TRANSLATOR (Metronome_mark_engraver, /* doc */ "Engrave metronome marking. This delegates the formatting" @@ -109,11 +185,10 @@ ADD_TRANSLATOR (Metronome_mark_engraver, "MetronomeMark ", /* read */ - "stavesFound " + "currentCommandColumn " + "currentMusicalColumn " "metronomeMarkFormatter " - "tempoUnitDuration " - "tempoUnitCount " - "tempoText " + "stavesFound " "tempoHideNote ", /* write */ diff --git a/lily/midi-chunk.cc b/lily/midi-chunk.cc index d6ad38e315..0aa11eb549 100644 --- a/lily/midi-chunk.cc +++ b/lily/midi-chunk.cc @@ -1,10 +1,21 @@ -/* - midi-chunk.cc -- implement Midi_chunk - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #include "midi-chunk.hh" @@ -13,7 +24,8 @@ #include "std-string.hh" #include "string-convert.hh" -Midi_track::Midi_track () +Midi_track::Midi_track (int number, bool port) + : number_ (number) { // 4D 54 72 6B MTrk // 00 00 00 3B chunk length (59) @@ -29,8 +41,6 @@ Midi_track::Midi_track () // mi = 0: major key // mi = 1: minor key - number_ = 0; - char const *data_str0 = "" // "00" "ff58" "0404" "0218" "08" // "00" "ff51" "0307" "a120" @@ -45,6 +55,13 @@ Midi_track::Midi_track () // only for format 0 (currently using format 1)? data_string += String_convert::hex2bin (data_str0); + if (port) + { + string port = "00" "ff" "21" "01" + + String_convert::int2hex (number_, 2, '0'); + data_string += String_convert::hex2bin (port); + } + char const *footer_str0 = "00" "ff2f" "00"; string footer_string = String_convert::hex2bin (footer_str0); @@ -93,7 +110,6 @@ Midi_event::to_string () const { string delta_string = int2midi_varint_string (delta_ticks_); string midi_string = midi_->to_string (); - assert (midi_string.length ()); return delta_string + midi_string; } /**************************************************************** diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 63b6be6b11..1fcb259ae1 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -1,9 +1,20 @@ /* - midi-item.cc -- implement MIDI items. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "midi-item.hh" @@ -61,8 +72,9 @@ Midi_duration::to_string () const } Midi_instrument::Midi_instrument (Audio_instrument *a) + : Midi_channel_item (a) + , audio_ (a) { - audio_ = a; audio_->str_ = String_convert::to_lower (audio_->str_); } @@ -76,7 +88,7 @@ Midi_instrument::to_string () const SCM program = scm_call_1 (proc, ly_symbol2scm (audio_->str_.c_str ())); found = (program != SCM_BOOL_F); if (found) - program_byte = scm_to_int (program); + program_byte = (Byte) scm_to_int (program); else warning (_f ("no such MIDI instrument: `%s'", audio_->str_.c_str ())); @@ -89,9 +101,9 @@ Midi_item::Midi_item () { } -Midi_channel_item::Midi_channel_item () +Midi_channel_item::Midi_channel_item (Audio_item *ai) + : channel_ (ai->channel_) { - channel_ = 0; } Midi_item::~Midi_item () @@ -122,8 +134,8 @@ int2midi_varint_string (int i) } Midi_key::Midi_key (Audio_key *a) + : audio_ (a) { - audio_ = a; } string @@ -139,9 +151,9 @@ Midi_key::to_string () const } Midi_time_signature::Midi_time_signature (Audio_time_signature *a) + : audio_ (a) + , clocks_per_1_ (18) { - audio_ = a; - clocks_per_1_ = 18; } string @@ -167,12 +179,13 @@ Midi_time_signature::to_string () const } Midi_note::Midi_note (Audio_note *a) + : Midi_channel_item (a) + , audio_ (a) + , dynamic_byte_ (a->dynamic_ && a->dynamic_->volume_ >= 0 + ? Byte (a->dynamic_->volume_ * 0x7f) : Byte (0x5a)) { - audio_ = a; - dynamic_byte_ = 0x5a; } - int Midi_note::get_fine_tuning () const { @@ -251,8 +264,9 @@ Midi_note_off::to_string () const } Midi_dynamic::Midi_dynamic (Audio_dynamic *a) + : Midi_channel_item (a) + , audio_ (a) { - audio_ = a; } string @@ -274,14 +288,19 @@ Midi_dynamic::to_string () const if (volume > full_scale) volume = (int)full_scale; + int const volume_default = 100; + if (audio_->volume_ < 0 || audio_->silent_) + volume = volume_default; + str += ::to_string ((char)0x07); str += ::to_string ((char)volume); return str; } Midi_piano_pedal::Midi_piano_pedal (Audio_piano_pedal *a) + : Midi_channel_item (a) + , audio_ (a) { - audio_ = a; } string @@ -303,8 +322,8 @@ Midi_piano_pedal::to_string () const } Midi_tempo::Midi_tempo (Audio_tempo *a) + : audio_ (a) { - audio_ = a; } string @@ -317,8 +336,8 @@ Midi_tempo::to_string () const } Midi_text::Midi_text (Audio_text *a) + : audio_ (a) { - audio_ = a; } string diff --git a/lily/midi-stream.cc b/lily/midi-stream.cc index 8b84798f62..c7a48ad706 100644 --- a/lily/midi-stream.cc +++ b/lily/midi-stream.cc @@ -1,9 +1,20 @@ /* - midi-stream.cc -- implement Midi_stream + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "midi-stream.hh" diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc index 70d3e31fd6..6fbb780a1b 100644 --- a/lily/midi-walker.cc +++ b/lily/midi-walker.cc @@ -1,10 +1,21 @@ /* - midi-walker.cc -- implement Midi_walker + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "midi-walker.hh" @@ -41,15 +52,15 @@ audio_item_less (Audio_item * const a, return a->get_column ()->when_ < b->get_column ()->when_; } -Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track, - int channel) +Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track) { - channel_ = channel; track_ = track; index_ = 0; items_ = audio_staff->audio_items_; vector_sort (items_, audio_item_less); last_tick_ = 0; + percussion_ = audio_staff->percussion_; + merge_unisons_ = audio_staff->merge_unisons_; } Midi_walker::~Midi_walker () @@ -71,31 +82,43 @@ Midi_walker::do_start_note (Midi_note *note) { Audio_item *ptr = items_[index_]; assert (note->audio_ == ptr); - int stop_ticks = int (moment_to_real (note->audio_->length_mom_) * Real (384 * 4)) - + ptr->audio_column_->ticks (); - - bool play_start = true; + int now_ticks = ptr->audio_column_->ticks (); + int stop_ticks = int (moment_to_real (note->audio_->length_mom_) * + Real (384 * 4)) + now_ticks; for (vsize i = 0; i < stop_note_queue.size (); i++) { - /* if this pith already in queue */ + /* if this pitch already in queue */ if (stop_note_queue[i].val->get_semitone_pitch () == note->get_semitone_pitch ()) { - if (stop_note_queue[i].key < stop_ticks) + int queued_ticks + = stop_note_queue[i].val->audio_->audio_column_->ticks (); + // If the two notes started at the same time, or option is set, + if (now_ticks == queued_ticks || merge_unisons_) { - /* let stopnote in queue be ignored, - new stop note wins */ - stop_note_queue[i].ignore_ = true; - - /* don't replay start note, */ - play_start = false; + // merge them. + if (stop_note_queue[i].key < stop_ticks) + { + Midi_note_event e; + e.val = stop_note_queue[i].val; + e.key = stop_ticks; + stop_note_queue[i].ignore_ = true; + stop_note_queue.insert (e); + } + note = 0; break; } else { - /* skip this stopnote, - don't play the start note */ - note = 0; + // A note was played that interruped a played note. + // Stop the old note, and continue to the greatest moment + // between the two. + if (stop_note_queue[i].key > stop_ticks) + { + stop_ticks = stop_note_queue[i].key; + } + output_event (now_ticks, stop_note_queue[i].val); + stop_note_queue[i].ignore_ = true; break; } } @@ -107,11 +130,10 @@ Midi_walker::do_start_note (Midi_note *note) e.val = new Midi_note_off (note); midi_events_.push_back (e.val); - e.key = int (stop_ticks); + e.key = stop_ticks; stop_note_queue.insert (e); - if (play_start) - output_event (ptr->audio_column_->ticks (), note); + output_event (now_ticks, note); } } @@ -160,9 +182,6 @@ Midi_walker::process () if (Midi_item *midi = get_midi (audio)) { - if (Midi_channel_item *mci = dynamic_cast (midi)) - mci->channel_ = channel_; - if (Midi_note *note = dynamic_cast (midi)) { if (note->audio_->length_mom_.to_bool ()) @@ -177,6 +196,11 @@ Midi_item* Midi_walker::get_midi (Audio_item *i) { Midi_item *mi = Midi_item::get_midi (i); + + if (percussion_) + if (Midi_channel_item *mci = dynamic_cast (mi)) + mci->channel_ = 9; + midi_events_.push_back (mi); return mi; } diff --git a/lily/minimal-page-breaking.cc b/lily/minimal-page-breaking.cc index 4588dddc3a..ded389733e 100644 --- a/lily/minimal-page-breaking.cc +++ b/lily/minimal-page-breaking.cc @@ -1,11 +1,20 @@ /* - minimal-page-breaking.cc -- implement a page-breaker that stacks as - many systems on a page before moving to the next one. Specialized - for books with many pages, or a lot of text. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2007--2011 Nicolas Sceaux - (c) 2007--2009 Nicolas Sceaux + 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 . */ #include "international.hh" @@ -14,14 +23,8 @@ #include "page-spacing.hh" #include "paper-book.hh" -static bool -is_break (Grob *) -{ - return false; -} - Minimal_page_breaking::Minimal_page_breaking (Paper_book *pb) - : Page_breaking (pb, is_break) + : Page_breaking (pb, 0, 0) { } diff --git a/lily/misc.cc b/lily/misc.cc index ee55a00c7e..4b7dc472ed 100644 --- a/lily/misc.cc +++ b/lily/misc.cc @@ -1,14 +1,26 @@ /* - misc.cc -- implement various stuff + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "misc.hh" +#include "warn.hh" /* Return the 2-log, rounded down @@ -86,3 +98,22 @@ camel_case_to_lisp_identifier (string in) return result; } +vsize +utf8_char_len (char current) +{ + vsize char_len = 1; + + // U+10000 - U+10FFFF + if ((current & 0xF0) == 0xF0) + char_len = 4; + // U+0800 - U+FFFF + else if ((current & 0xE0) == 0xE0) + char_len = 3; + // U+0080 - U+07FF + else if ((current & 0xC0) == 0xC0) + char_len = 2; + else if (current & 0x80) + programming_error ("invalid UTF-8 string"); + + return char_len; +} diff --git a/lily/modified-font-metric.cc b/lily/modified-font-metric.cc index 6972b44f92..eff730176b 100644 --- a/lily/modified-font-metric.cc +++ b/lily/modified-font-metric.cc @@ -1,9 +1,20 @@ /* - modified-font-metric.cc -- declare Modified_font_metric + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include using namespace std; @@ -43,17 +54,9 @@ Modified_font_metric::design_size () const } Box -Modified_font_metric::get_indexed_char (vsize i) const -{ - Box b = orig_->get_indexed_char (i); - b.scale (magnification_); - return b; -} - -Box -Modified_font_metric::get_ascii_char (vsize i) const +Modified_font_metric::get_indexed_char_dimensions (vsize i) const { - Box b = orig_->get_ascii_char (i); + Box b = orig_->get_indexed_char_dimensions (i); b.scale (magnification_); return b; } @@ -90,24 +93,19 @@ Modified_font_metric::index_to_charcode (vsize i) const return orig_->index_to_charcode (i); } -vsize -Modified_font_metric::index_to_ascii (vsize k) const -{ - return orig_->index_to_ascii (k); -} - void Modified_font_metric::derived_mark () const { } Stencil -Modified_font_metric::text_stencil (string text) const +Modified_font_metric::text_stencil (Output_def *state, + string text, bool feta) const { Box b; if (Pango_font *pf = dynamic_cast (orig_)) { - Stencil stc = pf->text_stencil (text); + Stencil stc = pf->text_stencil (state, text, feta); Box b = stc.extent_box (); @@ -116,28 +114,7 @@ Modified_font_metric::text_stencil (string text) const return scaled; } - return Font_metric::text_stencil (text); -} - -Box -Modified_font_metric::text_dimension (string text) const -{ - Box b; - Interval ydims; - Real w = 0.0; - - for (ssize i = 0; i < text.length (); i++) - { - Box b = get_ascii_char ((unsigned char)text[i]); - - w += b[X_AXIS].length (); - ydims.unite (b[Y_AXIS]); - } - if (ydims.is_empty ()) - ydims = Interval (0, 0); - - b = Box (Interval (0, w), ydims); - return b; + return Font_metric::text_stencil (state, text, feta); } Font_metric * diff --git a/lily/module-scheme.cc b/lily/module-scheme.cc index 8938229e59..f2e66459a0 100644 --- a/lily/module-scheme.cc +++ b/lily/module-scheme.cc @@ -1,9 +1,20 @@ /* - lily/module-scheme.cc -- implement module bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "ly-module.hh" @@ -36,23 +47,12 @@ LY_DEFINE (ly_module_copy, "ly:module-copy", { #define FUNC_NAME __FUNCTION__ SCM_VALIDATE_MODULE (1, src); - scm_internal_hash_fold ((Hash_closure_function) & module_define_closure_func, + scm_internal_hash_fold ((scm_t_hash_fold_fn) &module_define_closure_func, (void *) dest, SCM_EOL, SCM_MODULE_OBARRAY (src)); return SCM_UNSPECIFIED; } -LY_DEFINE (ly_clear_anonymous_modules, "ly:clear-anonymous-modules", - 0, 0, 0, (), - "Plug a GUILE 1.6 and 1.7 memory leak by breaking a weak" - " reference pointer cycle explicitly.") -{ -#ifdef MODULE_GC_KLUDGE - clear_anonymous_modules (); -#endif - - return SCM_UNSPECIFIED; -} /* Lookup SYM, but don't give error when it is not defined. */ SCM diff --git a/lily/moment-scheme.cc b/lily/moment-scheme.cc index 591fc38adc..6b10541403 100644 --- a/lily/moment-scheme.cc +++ b/lily/moment-scheme.cc @@ -1,9 +1,20 @@ /* - moment.cc -- implement Moment bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "moment.hh" diff --git a/lily/moment.cc b/lily/moment.cc index 3ca7e520db..ae6ea63dd2 100644 --- a/lily/moment.cc +++ b/lily/moment.cc @@ -1,9 +1,20 @@ /* - moment.cc -- implement Moment + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "moment.hh" diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index fa84af9c4b..3fbcdb612b 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -1,8 +1,21 @@ /* - multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver + This file is part of LilyPond, the GNU music typesetter. - (c) 1998--2009 Jan Nieuwenhuizen + Copyright (C) 1998--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "multi-measure-rest.hh" @@ -267,7 +280,6 @@ ADD_TRANSLATOR (Multi_measure_rest_engraver, /* read */ "internalBarNumber " "restNumberThreshold " - "breakableSeparationItem " "currentCommandColumn " "measurePosition " "measureLength ", diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 7ce96126f4..9628402a5e 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -1,41 +1,56 @@ /* - multi-measure-rest.cc -- implement Multi_measure_rest + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Jan Nieuwenhuizen - (c) 1998--2009 Jan Nieuwenhuizen + 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 . */ #include "multi-measure-rest.hh" -#include "warn.hh" +#include "font-interface.hh" +#include "lookup.hh" +#include "misc.hh" #include "output-def.hh" #include "paper-column.hh" // urg -#include "font-interface.hh" +#include "percent-repeat-item.hh" #include "rest.hh" -#include "misc.hh" +#include "separation-item.hh" #include "spanner.hh" #include "staff-symbol-referencer.hh" #include "system.hh" #include "text-interface.hh" -#include "percent-repeat-item.hh" -#include "lookup.hh" -#include "separation-item.hh" +#include "warn.hh" Interval Multi_measure_rest::bar_width (Spanner *me) { + SCM spacing_pair = me->get_property ("spacing-pair"); Interval iv; Direction d = LEFT; do { Item *col = me->get_bound (d)->get_column (); - - Interval coldim = Paper_column::break_align_width (col); + SCM align_sym + = (scm_is_pair (spacing_pair) + ? index_get_cell (spacing_pair, d) + : ly_symbol2scm ("staff-bar")); + Interval coldim = Paper_column::break_align_width (col, align_sym); iv[d] = coldim[-d]; } - while ((flip (&d)) != LEFT); + while (flip (&d) != LEFT); return iv; } @@ -48,6 +63,7 @@ Multi_measure_rest::percent (SCM smob) Spanner *sp = dynamic_cast (me); Stencil r = Percent_repeat_item_interface::x_percent (me, 1); + r.translate_axis (-r.extent (X_AXIS).center (), X_AXIS); // ugh copy & paste. @@ -121,11 +137,9 @@ Multi_measure_rest::symbol_stencil (Grob *me, Real space) return s; } - SCM alist_chain = Font_interface::music_font_alist_chain (me); - Real staff_space = Staff_symbol_referencer::staff_space (me); - Font_metric *musfont - = select_font (me->layout (), alist_chain); + + Font_metric *musfont = Font_interface::get_default_font (me); SCM sml = me->get_property ("use-breve-rest"); if (measures == 1) @@ -282,7 +296,7 @@ Multi_measure_rest::calculate_spacing_rods (Grob *me, Real length) if (! (sp->get_bound (LEFT) && sp->get_bound (RIGHT))) { programming_error ("Multi_measure_rest::get_rods (): I am not spanned!"); - return ; + return; } Item *li = sp->get_bound (LEFT)->get_column (); @@ -325,9 +339,9 @@ Multi_measure_rest::set_spacing_rods (SCM smob) Real sym_width = symbol_stencil (me, 0.0).extent (X_AXIS).length (); calculate_spacing_rods (me, sym_width); - return SCM_UNSPECIFIED; + return SCM_UNSPECIFIED; } - + MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_text_rods, 1); SCM Multi_measure_rest::set_text_rods (SCM smob) @@ -348,12 +362,12 @@ ADD_INTERFACE (Multi_measure_rest, "A rest that spans a whole number of measures.", /* properties */ + "bound-padding " "expand-limit " - "measure-count " "hair-thickness " + "measure-count " + "minimum-length " + "spacing-pair " "thick-thickness " "use-breve-rest " - "bound-padding " - "minimum-length " ); - diff --git a/lily/music-function-scheme.cc b/lily/music-function-scheme.cc index c22634f152..b6473b19d1 100644 --- a/lily/music-function-scheme.cc +++ b/lily/music-function-scheme.cc @@ -19,8 +19,8 @@ LY_DEFINE (ly_music_function_extract, "ly:music-function-extract", 1, 0, 0, LY_DEFINE (ly_make_music_function, "ly:make-music-function", 2, 0, 0, (SCM signature, SCM func), "Make a function to process music, to be used for the" - " parser. @code{func} is the function, and @code{signature}" - " describes its arguments. @code{signature} is a list" + " parser. @var{func} is the function, and @var{signature}" + " describes its arguments. @var{signature} is a list" " containing either @code{ly:music?} predicates or other type" " predicates.") { diff --git a/lily/music-function.cc b/lily/music-function.cc index d093f25a95..85eecb7c33 100644 --- a/lily/music-function.cc +++ b/lily/music-function.cc @@ -1,9 +1,20 @@ /* - music-function.cc -- implement music_function + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "music-function.hh" diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index 057d4f01eb..46d9fb035d 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -1,9 +1,20 @@ /* - music-iterator.cc -- implement Music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ diff --git a/lily/music-output.cc b/lily/music-output.cc index 6a613feb5e..9b8a99c724 100644 --- a/lily/music-output.cc +++ b/lily/music-output.cc @@ -1,9 +1,20 @@ /* - music-output.cc -- implement Music_output + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "music-output.hh" diff --git a/lily/music-scheme.cc b/lily/music-scheme.cc index c90acd5f17..c0e4eb3167 100644 --- a/lily/music-scheme.cc +++ b/lily/music-scheme.cc @@ -1,9 +1,20 @@ /* - music-scheme.cc -- implement Music bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "music.hh" @@ -21,13 +32,14 @@ LY_DEFINE (ly_music_length, "ly:music-length", return sc->get_length ().smobbed_copy (); } -LY_DEFINE (ly_music_property, - "ly:music-property", 2, 1, 0, (SCM mus, SCM sym, SCM dfault), - "Get the property @var{sym} of music expression @var{mus}." - " If @var{sym} is undefined, return @code{'()}.") +LY_DEFINE (ly_music_property, "ly:music-property", + 2, 1, 0, (SCM mus, SCM sym, SCM val), + "Return the value for property @var{sym} of music expression" + " @var{mus}. If no value is found, return @var{val} or" + " @code{'()} if @var{val} is not specified.") { LY_ASSERT_TYPE (unsmob_music, mus, 1); - return ly_prob_property (mus, sym, dfault); + return ly_prob_property (mus, sym, val); } LY_DEFINE (ly_music_set_property_x, "ly:music-set-property!", @@ -57,7 +69,7 @@ LY_DEFINE (ly_make_music, "ly:make-music", LY_DEFINE (ly_music_p, "ly:music?", 1, 0, 0, (SCM obj), - "Type predicate.") + "Is @var{obj} a music object?") { return scm_from_bool (unsmob_music (obj)); } @@ -76,8 +88,7 @@ LY_DEFINE (ly_music_mutable_properties, "ly:music-mutable-properties", LY_DEFINE (ly_music_list_p, "ly:music-list?", 1, 0, 0, (SCM lst), - "Type predicate: Return true if @var{lst} is a list" - " of music objects.") + "Is @var{lst} a list of music objects?") { if (scm_list_p (lst) == SCM_BOOL_T) while (scm_is_pair (lst)) diff --git a/lily/music-sequence.cc b/lily/music-sequence.cc index 70a2eaa862..8c9642c860 100644 --- a/lily/music-sequence.cc +++ b/lily/music-sequence.cc @@ -1,9 +1,20 @@ /* - music-sequence.cc -- implement Music_sequence + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "music-sequence.hh" @@ -182,3 +193,58 @@ Music_sequence::event_chord_relative_callback (SCM music, SCM pitch) p, true).smobbed_copy (); } +MAKE_SCHEME_CALLBACK (Music_sequence, repeated_chord_relative_callback, 2); +SCM +Music_sequence::repeated_chord_relative_callback (SCM music, SCM pitch) +{ + Music *me = unsmob_music (music); + Music *repeated_chord = unsmob_music (me->get_property ("element")); + Music *original_chord = unsmob_music (me->get_property ("original-chord")); + + /* A repeated chord octave is not computed from the previous pitch, + * (this function `pitch' argument), but from the original chord, so + * that repeated chords have the same octave have the original chord, + * even though other simple notes have been entered meanwhile. + */ + assert (repeated_chord); + Pitch *p = 0; + /* Get the original chord first pitch */ + if (original_chord) + { + for (SCM s = original_chord->get_property ("elements"); scm_is_pair (s); s = scm_cdr (s)) + { + if (Music *m = unsmob_music (scm_car (s))) + { + p = unsmob_pitch (m->get_property ("pitch")); + if (p) + break; + } + } + } + /* Use the `pitch' argument if no pitch found in original chord. */ + if (! p) + p = unsmob_pitch (pitch); + + /* Change the first note pitch to -1, to avoid octaviation. Indeed, + * the first pitch should be the same as the original chord first + * pitch. */ + for (SCM s = repeated_chord->get_property ("elements"); scm_is_pair (s); s = scm_cdr (s)) + { + if (Music *m = unsmob_music (scm_car (s))) + { + Pitch *first_pitch = unsmob_pitch (m->get_property ("pitch")); + if (first_pitch) + { + Pitch new_pitch = Pitch (-1, + first_pitch->get_notename (), + first_pitch->get_alteration ()); + m->set_property ("pitch", new_pitch.smobbed_copy ()); + break; + } + } + } + music_list_to_relative (repeated_chord->get_property ("elements"), *p, true).smobbed_copy (); + /* Return `pitch' instead of the repeated chord first pitch, + * because `pitch' is the last explicitly entered pitch */ + return pitch; +} diff --git a/lily/music-wrapper-iterator.cc b/lily/music-wrapper-iterator.cc index 304497a489..4a47357355 100644 --- a/lily/music-wrapper-iterator.cc +++ b/lily/music-wrapper-iterator.cc @@ -1,9 +1,20 @@ /* - music-wrapper-iterator.cc -- implement Music_wrapper_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "music-wrapper-iterator.hh" diff --git a/lily/music-wrapper.cc b/lily/music-wrapper.cc index 3e6a7d7c0b..00eb2f11cd 100644 --- a/lily/music-wrapper.cc +++ b/lily/music-wrapper.cc @@ -1,9 +1,20 @@ /* - music-wrapper.cc -- implement Music_wrapper + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "music-wrapper.hh" diff --git a/lily/music.cc b/lily/music.cc index f96d424b21..401e9efafb 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -1,9 +1,20 @@ /* - music.cc -- implement Music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "music.hh" @@ -39,7 +50,7 @@ Music::Music (SCM init) { length_callback_ = SCM_EOL; start_callback_ = SCM_EOL; - + length_callback_ = get_property ("length-callback"); if (!ly_is_procedure (length_callback_)) length_callback_ = duration_length_callback_proc; @@ -161,7 +172,8 @@ Music::to_relative_octave (Pitch last) SCM callback = get_property ("to-relative-callback"); if (ly_is_procedure (callback)) { - Pitch *p = unsmob_pitch (scm_call_2 (callback, self_scm (), last.smobbed_copy ())); + Pitch *p = unsmob_pitch (scm_call_2 (callback, self_scm (), + last.smobbed_copy ())); return *p; } @@ -179,7 +191,8 @@ Music::compress (Moment factor) compress_music_list (get_property ("elements"), factor); Duration *d = unsmob_duration (get_property ("duration")); if (d) - set_property ("duration", d->compressed (factor.main_part_).smobbed_copy ()); + set_property ("duration", + d->compressed (factor.main_part_).smobbed_copy ()); } /* @@ -194,14 +207,23 @@ transpose_mutable (SCM alist, Pitch delta) SCM prop = scm_car (entry); SCM val = scm_cdr (entry); SCM new_val = val; - + if (Pitch *p = unsmob_pitch (val)) { Pitch transposed = p->transposed (delta); if (transposed.get_alteration ().abs () > Rational (1,1)) { - warning (_f ("transposition by %s makes alteration larger than double", - delta.to_string ())); + string delta_str; + if (delta.get_alteration ().abs () > Rational (1, 1)) + delta_str = (delta.normalized ().to_string () + + " " + _ ("(normalized pitch)")); + else + delta_str = delta.to_string (); + + warning (_f ("Transposing %s by %s makes alteration larger than double", + p->to_string (), + delta_str)); + transposed = transposed.normalized (); } new_val = transposed.smobbed_copy (); @@ -254,9 +276,7 @@ Music::to_event () const // catch programming mistakes. if (!internal_is_music_type (class_name)) - { - programming_error ("Not a music type"); - } + programming_error ("Not a music type"); Stream_event *e = new Stream_event (class_name, mutable_property_alist_); Moment length = get_length (); @@ -322,6 +342,5 @@ Music::duration_length_callback (SCM m) Music * unsmob_music (SCM m) { - return dynamic_cast (unsmob_prob (m)); + return dynamic_cast (unsmob_prob (m)); } - diff --git a/lily/nested-property.cc b/lily/nested-property.cc index fb62c7d80a..db897d3fd8 100644 --- a/lily/nested-property.cc +++ b/lily/nested-property.cc @@ -31,7 +31,7 @@ evict_from_alist (SCM symbol, SCM alist, SCM alist_end) /* PROP_PATH should be big-to-small ordering */ -SCM +SCM nested_property_alist (SCM alist, SCM prop_path, SCM value) { SCM new_value = SCM_BOOL_F; @@ -52,17 +52,19 @@ nested_property_alist (SCM alist, SCM prop_path, SCM value) Recursively purge alist of prop_path: revert ((sym, val) : L, [sym]) = L - revert ((sym, val) : L, sym : props) = + revert ((sym, val) : L, sym : props) = (sym, revert (val, rest-props)) ++ L revert ((sym, val) : L, p ++ rest-props) = (sym, val) : revert (L, p ++ rest-props) */ -SCM +SCM nested_property_revert_alist (SCM alist, SCM prop_path) { + int copy_count = 0; + bool drop = false; assert(scm_is_pair (prop_path)); - + SCM wanted_sym = scm_car (prop_path); SCM new_list = SCM_EOL; @@ -71,6 +73,7 @@ nested_property_revert_alist (SCM alist, SCM prop_path) { SCM sub_sym = scm_caar (s); SCM old_val = scm_cdar (s); + drop = false; if (sub_sym == wanted_sym) { @@ -81,25 +84,48 @@ nested_property_revert_alist (SCM alist, SCM prop_path) /* nothing changed: drop newly constructed list. */ if (old_val == new_val) return alist; - + *tail = scm_acons (sub_sym, new_val, SCM_EOL); tail = SCM_CDRLOC(*tail); + *tail = scm_cdr (s); + return new_list; } else { - /* old value is dropped. */ + /* old value should be dropped only if we have another copy of it in the alist */ + copy_count++; + /* + Only drop the first instance found. + the overridden value is always the first + if this was the only copy, we will return + the original list anyways so it is not relevant + if we drop this pair + */ + if (copy_count == 1) + drop = true; } - - *tail = scm_cdr (s); - return new_list; + /* we now iterate over every item */ } - - *tail = scm_acons (sub_sym, old_val, SCM_EOL); - tail = SCM_CDRLOC (*tail); + /* + Make a new list with every item + except for the eventual dropped one + */ + if (!drop) + { + *tail = scm_acons (sub_sym, old_val, SCM_EOL); + tail = SCM_CDRLOC (*tail); + } } - /* Wanted symbol not found: drop newly constructed list. */ - return alist; + /* + If we find more than one copy of the property + push the new list, else it means we are trying to + revert the original value + */ + if (copy_count > 1) + return new_list; + else + return alist; } @@ -109,7 +135,7 @@ set_nested_property (Grob *me, SCM big_to_small, SCM value) SCM alist = me->get_property (scm_car (big_to_small)); alist = nested_property_alist (alist, scm_cdr (big_to_small), value); - + me->set_property (scm_car (big_to_small), alist); } diff --git a/lily/new-dynamic-engraver.cc b/lily/new-dynamic-engraver.cc index ac652216f7..e225d97f1f 100644 --- a/lily/new-dynamic-engraver.cc +++ b/lily/new-dynamic-engraver.cc @@ -1,15 +1,23 @@ -/* - new-dynamic-engraver.cc -- implement New_dynamic_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2008--2009 Han-Wen Nienhuys - -*/ +/* + This file is part of LilyPond, the GNU music typesetter. + Copyright (C) 2008--2011 Han-Wen Nienhuys -#include "engraver.hh" + 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 . +*/ + +#include "engraver.hh" #include "hairpin.hh" #include "international.hh" #include "item.hh" @@ -35,12 +43,14 @@ protected: virtual void finalize (); private: + SCM get_property_setting (Stream_event *evt, char const *evprop, + char const *ctxprop); string get_spanner_type (Stream_event *ev); Drul_array accepted_spanevents_drul_; Spanner *current_spanner_; Spanner *finished_spanner_; - + Item *script_; Stream_event *script_event_; Stream_event *current_span_event_; @@ -72,12 +82,24 @@ New_dynamic_engraver::listen_span_dynamic (Stream_event *ev) ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[d], ev); } +SCM +New_dynamic_engraver::get_property_setting (Stream_event *evt, + char const *evprop, + char const *ctxprop) +{ + SCM spanner_type = evt->get_property (evprop); + if (spanner_type == SCM_EOL) + spanner_type = get_property (ctxprop); + return spanner_type; +} void New_dynamic_engraver::process_music () { if (current_spanner_ - && (accepted_spanevents_drul_[STOP] || script_event_ || accepted_spanevents_drul_[START])) + && (accepted_spanevents_drul_[STOP] + || script_event_ + || accepted_spanevents_drul_[START])) { Stream_event *ender = accepted_spanevents_drul_[STOP]; if (!ender) @@ -85,7 +107,7 @@ New_dynamic_engraver::process_music () if (!ender) ender = accepted_spanevents_drul_[START]; - + finished_spanner_ = current_spanner_; announce_end_grob (finished_spanner_, ender->self_scm ()); current_spanner_ = 0; @@ -97,7 +119,8 @@ New_dynamic_engraver::process_music () current_span_event_ = accepted_spanevents_drul_[START]; string start_type = get_spanner_type (current_span_event_); - SCM cresc_type = get_property ((start_type + "Spanner").c_str ()); + SCM cresc_type = get_property_setting (current_span_event_, "span-type", + (start_type + "Spanner").c_str ()); if (cresc_type == ly_symbol2scm ("text")) { @@ -105,11 +128,10 @@ New_dynamic_engraver::process_music () = make_spanner ("DynamicTextSpanner", accepted_spanevents_drul_[START]->self_scm ()); - SCM text = get_property ((start_type + "Text").c_str ()); + SCM text = get_property_setting (current_span_event_, "span-text", + (start_type + "Text").c_str ()); if (Text_interface::is_markup (text)) - { - current_spanner_->set_property ("text", text); - } + current_spanner_->set_property ("text", text); } else { @@ -121,16 +143,17 @@ New_dynamic_engraver::process_music () } current_spanner_ = make_spanner ("Hairpin", current_span_event_->self_scm ()); - if (finished_spanner_) - { - Pointer_group_interface::add_grob (finished_spanner_, - ly_symbol2scm ("adjacent-hairpins"), - current_spanner_); - - Pointer_group_interface::add_grob (current_spanner_, - ly_symbol2scm ("adjacent-hairpins"), - finished_spanner_); - } + } + if (finished_spanner_) + { + if (Hairpin::has_interface (finished_spanner_)) + Pointer_group_interface::add_grob (finished_spanner_, + ly_symbol2scm ("adjacent-spanners"), + current_spanner_); + if (Hairpin::has_interface (current_spanner_)) + Pointer_group_interface::add_grob (current_spanner_, + ly_symbol2scm ("adjacent-spanners"), + finished_spanner_); } } @@ -143,33 +166,22 @@ New_dynamic_engraver::process_music () if (finished_spanner_) finished_spanner_->set_bound (RIGHT, script_); if (current_spanner_) - { - current_spanner_->set_bound (LEFT, script_); - - if (!Hairpin::has_interface (current_spanner_)) - set_nested_property (current_spanner_, - scm_list_3 (ly_symbol2scm ("bound-details"), - ly_symbol2scm ("left"), - ly_symbol2scm ("attach-dir") - ), - scm_from_int (RIGHT)); - - } + current_spanner_->set_bound (LEFT, script_); } } - - void New_dynamic_engraver::stop_translation_timestep () { if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT)) - finished_spanner_->set_bound (RIGHT, - unsmob_grob (get_property ("currentMusicalColumn"))); + finished_spanner_ + ->set_bound (RIGHT, + unsmob_grob (get_property ("currentMusicalColumn"))); if (current_spanner_ && !current_spanner_->get_bound (LEFT)) - current_spanner_->set_bound (LEFT, - unsmob_grob (get_property ("currentMusicalColumn"))); + current_spanner_ + ->set_bound (LEFT, + unsmob_grob (get_property ("currentMusicalColumn"))); script_ = 0; script_event_ = 0; accepted_spanevents_drul_.set (0, 0); @@ -205,6 +217,7 @@ New_dynamic_engraver::get_spanner_type (Stream_event *ev) type = "crescendo"; else programming_error ("unknown dynamic spanner type"); + return type; } @@ -214,10 +227,16 @@ New_dynamic_engraver::acknowledge_note_column (Grob_info info) if (script_ && !script_->get_parent (X_AXIS)) { extract_grob_set (info.grob (), "note-heads", heads); - if (heads.size ()) + /* + Spacing constraints may require dynamics to be aligned on rests, + so check for a rest if this note column has no note heads. + */ + Grob *x_parent = (heads.size () + ? heads[0] + : unsmob_grob (info.grob ()->get_object ("rest"))); + if (x_parent) { - Grob *head = heads[0]; - script_->set_parent (head, X_AXIS); + script_->set_parent (x_parent, X_AXIS); Self_alignment_interface::set_center_parent (script_, X_AXIS); } } @@ -231,10 +250,7 @@ New_dynamic_engraver::acknowledge_note_column (Grob_info info) ADD_ACKNOWLEDGER (New_dynamic_engraver, note_column); ADD_TRANSLATOR (New_dynamic_engraver, /* doc */ - "Create hairpins, dynamic texts, and their vertical" - " alignments. The symbols are collected onto a" - " @code{DynamicLineSpanner} grob which takes care of vertical" - " positioning.", + "Create hairpins, dynamic texts and dynamic text spanners.", /* create */ "DynamicTextSpanner " diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index 8c249e4fab..db99dede95 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -1,27 +1,37 @@ /* - fingering-engraver.cc -- implement New_fingering_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" #include "international.hh" +#include "item.hh" #include "rhythmic-head.hh" #include "script-interface.hh" #include "self-alignment-interface.hh" #include "side-position-interface.hh" #include "stem.hh" #include "stream-event.hh" -#include "item.hh" #include "warn.hh" #include "translator.icc" - struct Finger_tuple { Grob *head_; @@ -53,7 +63,7 @@ class New_fingering_engraver : public Engraver vector articulations_; vector string_numbers_; - vector heads_; + vector heads_; Grob *stem_; void position_all (); @@ -134,7 +144,11 @@ New_fingering_engraver::add_script (Grob *head, event->get_property ("articulation-type"), 0); ft.script_ = g; ft.script_->set_parent (head, X_AXIS); - + + SCM forced_dir = event->get_property ("direction"); + if (to_dir (forced_dir)) + ft.script_->set_property ("direction", forced_dir); + articulations_.push_back (ft); } @@ -149,8 +163,7 @@ New_fingering_engraver::add_fingering (Grob *head, ft.script_ = internal_make_item (grob_sym, event->self_scm (), ly_symbol2string (grob_sym).c_str (), - __FILE__, __LINE__, __FUNCTION__ - ); + __FILE__, __LINE__, __FUNCTION__); Side_position_interface::add_support (ft.script_, head); @@ -255,7 +268,7 @@ New_fingering_engraver::position_scripts (SCM orientations, else if (unsmob_grob (ft.head_->get_object ("dot"))) Side_position_interface::add_support (f, unsmob_grob (ft.head_->get_object ("dot"))); - + Self_alignment_interface::set_align_self (f, Y_AXIS); Self_alignment_interface::set_center_parent (f, Y_AXIS); Side_position_interface::set_axis (f, X_AXIS); @@ -279,7 +292,7 @@ New_fingering_engraver::position_scripts (SCM orientations, Self_alignment_interface::set_align_self (f, X_AXIS); Self_alignment_interface::set_center_parent (f, X_AXIS); Side_position_interface::set_axis (f, Y_AXIS); - + f->set_property ("direction", scm_from_int (d)); } } @@ -294,7 +307,6 @@ New_fingering_engraver::stop_translation_timestep () heads_.clear (); } - void New_fingering_engraver::position_all () { @@ -318,7 +330,7 @@ New_fingering_engraver::position_all () &stroke_fingerings_); stroke_fingerings_.clear (); } - + for (vsize i = articulations_.size (); i--;) { Grob *script = articulations_[i].script_; @@ -340,7 +352,6 @@ New_fingering_engraver::New_fingering_engraver () stem_ = 0; } - ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head); ADD_ACKNOWLEDGER (New_fingering_engraver, stem); @@ -361,7 +372,7 @@ ADD_TRANSLATOR (New_fingering_engraver, "harmonicDots " "strokeFingerOrientations " "stringNumberOrientations ", - + /* write */ "" ); diff --git a/lily/note-collision.cc b/lily/note-collision.cc index d93260afd6..b0049c69ea 100644 --- a/lily/note-collision.cc +++ b/lily/note-collision.cc @@ -1,9 +1,20 @@ /* - note-collision.cc -- implement Note_collision + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "note-collision.hh" @@ -42,7 +53,7 @@ check_meshing_chords (Grob *me, Drul_array stems (Note_column::get_stem (clash_down), Note_column::get_stem (clash_up)); - + Grob *head_up = Note_column::first_head (clash_up); Grob *head_down = Note_column::first_head (clash_down); @@ -181,16 +192,18 @@ check_meshing_chords (Grob *me, direction. In case of a collision, one of them should be removed, so the resulting note does not look like a block. */ + SCM up_style = head_up->get_property ("style"); + SCM down_style = head_down->get_property ("style"); if (merge_possible - && head_up->get_property ("style") == ly_symbol2scm ("fa") - && head_down->get_property ("style") == ly_symbol2scm ("fa")) + && (up_style == ly_symbol2scm ("fa") || up_style == ly_symbol2scm ("faThin")) + && (down_style == ly_symbol2scm ("fa") || down_style == ly_symbol2scm ("faThin"))) { Interval uphead_size = head_up->extent (head_up, Y_AXIS); Offset att = Offset (0.0, -1.0); head_up->set_property ("stem-attachment", ly_offset2scm (att)); - head_up->set_property ("transparent", SCM_BOOL_T); + head_up->set_property ("transparent", SCM_BOOL_T); } - + if (merge_possible) { shift_amount = 0; @@ -229,7 +242,7 @@ check_meshing_chords (Grob *me, If upper head is eighth note or shorter, and lower head is half note, shift by the difference between the open and filled note head widths, otherwise upper stem will be misaligned slightly. - */ + */ if (Stem::duration_log (stems[DOWN]) == 1 && Stem::duration_log (stems[UP]) >= 3) shift_amount = (1 - head_up->extent (head_up, X_AXIS).length () / @@ -263,7 +276,7 @@ check_meshing_chords (Grob *me, shift_amount *= 0.17; /* - + */ if (full_collide && down_ball_type * up_ball_type == 0) @@ -277,7 +290,7 @@ check_meshing_chords (Grob *me, else if (down_ball_type == 0 && up_ball_type == 2) shift_amount *= 0.75; } - + /* * Fix issue #44: * @@ -347,13 +360,13 @@ check_meshing_chords (Grob *me, } -MAKE_SCHEME_CALLBACK (Note_collision_interface, calc_positioning_done, 1) +MAKE_SCHEME_CALLBACK (Note_collision_interface, calc_positioning_done, 1) SCM Note_collision_interface::calc_positioning_done (SCM smob) { Grob *me = unsmob_grob (smob); me->set_property ("positioning-done", SCM_BOOL_T); - + Drul_array > clash_groups = get_clash_groups (me); Direction d = UP; @@ -535,7 +548,7 @@ Note_collision_interface::automatic_shift (Grob *me, { Grob *g = clash_groups[UP][i]; Grob *dc = Note_column::dot_column (g); - + if (dc) for (vsize j = i + 1; j < clash_groups[UP].size (); j++) { @@ -543,7 +556,7 @@ Note_collision_interface::automatic_shift (Grob *me, Side_position_interface::add_support (dc, stem); } } - + /* Check if chords are meshing */ diff --git a/lily/note-column-scheme.cc b/lily/note-column-scheme.cc new file mode 100644 index 0000000000..bf76ce9112 --- /dev/null +++ b/lily/note-column-scheme.cc @@ -0,0 +1,48 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Nicolas Sceaux + + 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 . +*/ + +#include "note-column.hh" +#include "lily-guile.hh" +#include "grob.hh" + +LY_DEFINE (ly_note_column_accidentals, "ly:note-column-accidentals", + 1, 0, 0, (SCM note_column), + "Return the @code{AccidentalPlacement} grob from @var{note-column}" + " if any, or @code{SCM_EOL} otherwise.") +{ + Grob *grob = unsmob_grob (note_column); + LY_ASSERT_SMOB (Grob, note_column, 1); + Grob *acc = Note_column::accidentals (grob); + if (acc) + return acc->self_scm (); + return SCM_EOL; +} + +LY_DEFINE (ly_note_column_dot_column, "ly:note-column-dot-column", + 1, 0, 0, (SCM note_column), + "Return the @code{DotColumn} grob from @var{note-column}" + " if any, or @code{SCM_EOL} otherwise.") +{ + Grob *grob = unsmob_grob (note_column); + LY_ASSERT_SMOB (Grob, note_column, 1); + Grob *dot_column = Note_column::dot_column (grob); + if (dot_column) + return dot_column->self_scm (); + return SCM_EOL; +} diff --git a/lily/note-column.cc b/lily/note-column.cc index bb1cd21df1..2ba81c66c4 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -1,9 +1,20 @@ /* - note-column.cc -- implement Note_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "note-column.hh" @@ -126,22 +137,6 @@ Note_column::add_head (Grob *me, Grob *h) Axis_group_interface::add_element (me, h); } -/** - translate the rest symbols vertically by amount DY, but only if - they have no staff-position set. -*/ -void -Note_column::translate_rests (Grob *me, int dy) -{ - Grob *r = unsmob_grob (me->get_object ("rest")); - if (r && !scm_is_number (r->get_property ("staff-position"))) - { - r->translate_axis (dy * Staff_symbol_referencer::staff_space (r) / 2.0, Y_AXIS); - Grob *p = r->get_parent (Y_AXIS); - p->flush_extent_cache (Y_AXIS); - } -} - Grob * Note_column::first_head (Grob *me) { @@ -150,7 +145,7 @@ Note_column::first_head (Grob *me) } /* - Return the first Accidentals grob that we find in a note-head. + Return the first AccidentalPlacement grob that we find in a note-head. */ Grob * Note_column::accidentals (Grob *me) @@ -185,7 +180,7 @@ Note_column::dot_column (Grob *me) if (dots) return dots->get_parent (X_AXIS); } - + return 0; } diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index 59151f6950..2d41d10758 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -1,9 +1,20 @@ /* - note-head-line-engraver.cc -- implement Note_head_line_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "engraver.hh" diff --git a/lily/note-head-scheme.cc b/lily/note-head-scheme.cc index f3cd1f3d34..6698973339 100644 --- a/lily/note-head-scheme.cc +++ b/lily/note-head-scheme.cc @@ -1,10 +1,21 @@ /* - note-head-scheme.cc -- implement Note_head bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen Nienhuys - (c) 2006--2009 Han-Wen Nienhuys + 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 . */ #include "note-head.hh" diff --git a/lily/note-head.cc b/lily/note-head.cc index 3f446eeff7..aeb7b4a19b 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -1,9 +1,20 @@ /* - notehead.cc -- implement Note_head + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "note-head.hh" @@ -16,9 +27,11 @@ using namespace std; #include "directional-element-interface.hh" #include "font-interface.hh" +#include "grob.hh" #include "international.hh" +#include "staff-symbol.hh" +#include "staff-symbol-referencer.hh" #include "warn.hh" -#include "grob.hh" static Stencil internal_print (Grob *me, string *font_char) @@ -95,6 +108,31 @@ Note_head::print (SCM smob) return internal_print (me, &idx).smobbed_copy (); } +MAKE_SCHEME_CALLBACK (Note_head, include_ledger_line_height, 1); +SCM +Note_head::include_ledger_line_height (SCM smob) +{ + Grob *me = unsmob_grob (smob); + Grob *staff = Staff_symbol_referencer::get_staff_symbol (me); + + if (staff) + { + Real ss = Staff_symbol::staff_space (staff); + Interval lines = Staff_symbol::line_span (staff) * (ss / 2.0); + Real my_pos = Staff_symbol_referencer::get_position (me) * ss / 2.0; + Interval my_ext = me->extent (me, Y_AXIS) + my_pos; + + // The +1 and -1 come from the fact that we only want to add + // the interval between the note and the first ledger line, not + // the whole interval between the note and the staff. + Interval iv (min (0.0, lines[UP] - my_ext[DOWN] + 1), + max (0.0, lines[DOWN] - my_ext[UP] - 1)); + return ly_interval2scm (iv); + } + + return ly_interval2scm (Interval (0, 0)); +} + Real Note_head::stem_attachment_coordinate (Grob *me, Axis a) { @@ -112,7 +150,7 @@ Note_head::get_stem_attachment (Font_metric *fm, string key) int k = fm->name_to_index (key); if (k >= 0) { - Box b = fm->get_indexed_char (k); + Box b = fm->get_indexed_char_dimensions (k); Offset wxwy = fm->attachment_point (key); for (int i = X_AXIS ; i < NO_AXES; i++) { diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 426eb7d844..4aa97dd4b9 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -1,7 +1,20 @@ /* - note-heads-engraver.cc -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" @@ -22,8 +35,7 @@ using namespace std; class Note_heads_engraver : public Engraver { - vector notes_; - vector note_evs_; + vector note_evs_; public: TRANSLATOR_DECLARATIONS (Note_heads_engraver); @@ -49,8 +61,8 @@ void Note_heads_engraver::process_music () { SCM c0 = get_property ("middleCPosition"); - SCM layout_proc = get_property("staffLineLayoutFunction"); - + SCM layout_proc = get_property ("staffLineLayoutFunction"); + for (vsize i = 0; i < note_evs_.size (); i++) { Stream_event *ev = note_evs_[i]; @@ -67,16 +79,17 @@ Note_heads_engraver::process_music () int pos; if (pit == 0) pos = 0; - else if (ly_is_procedure (layout_proc)){ - SCM pitch = ev->get_property("pitch"); - pos = scm_to_int(scm_call_1 (layout_proc, pitch)); - } - else + else if (ly_is_procedure (layout_proc)) + { + SCM pitch = ev->get_property ("pitch"); + pos = scm_to_int (scm_call_1 (layout_proc, pitch)); + } + else pos = pit->steps (); if (scm_is_number (c0)) - pos += scm_to_int(c0); - + pos += scm_to_int (c0); + note->set_property ("staff-position", scm_from_int (pos)); /* @@ -99,15 +112,12 @@ Note_heads_engraver::process_music () if (scm_is_symbol (style)) note->set_property ("style", style); } - - notes_.push_back (note); } } void Note_heads_engraver::stop_translation_timestep () { - notes_.clear (); note_evs_.clear (); } diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc index 1e1e01acb1..d2a6b91535 100644 --- a/lily/note-name-engraver.cc +++ b/lily/note-name-engraver.cc @@ -1,9 +1,20 @@ /* - note-name-engraver.cc -- implement Note_name_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -18,8 +29,7 @@ class Note_name_engraver : public Engraver public: TRANSLATOR_DECLARATIONS (Note_name_engraver); - vector events_; - vector texts_; + vector events_; DECLARE_TRANSLATOR_LISTENER (note); void process_music (); void stop_translation_timestep (); @@ -51,14 +61,12 @@ Note_name_engraver::process_music () { Item *t = make_item ("NoteName", events_[0]->self_scm ()); t->set_property ("text", ly_string2scm (s)); - texts_.push_back (t); } } void Note_name_engraver::stop_translation_timestep () { - texts_.clear (); events_.clear (); } diff --git a/lily/note-performer.cc b/lily/note-performer.cc index 0a9f79f08a..ff3f5b3f81 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -1,9 +1,20 @@ /* - note-performer.cc -- implement Note_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Jan Nieuwenhuizen - (c) 1996--2009 Jan Nieuwenhuizen + 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 . */ #include "performer.hh" diff --git a/lily/note-spacing-engraver.cc b/lily/note-spacing-engraver.cc index 1859344b94..761e01aa0b 100644 --- a/lily/note-spacing-engraver.cc +++ b/lily/note-spacing-engraver.cc @@ -1,10 +1,20 @@ -/* - note-spacing-engraver.cc -- implement Note_spacing_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys - +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc index bd796a7135..73faa02100 100644 --- a/lily/note-spacing.cc +++ b/lily/note-spacing.cc @@ -1,33 +1,38 @@ /* - note-spacing.cc -- implement Note_spacing + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "note-spacing.hh" +#include "accidental-placement.hh" #include "bar-line.hh" #include "directional-element-interface.hh" #include "grob-array.hh" -#include "paper-column.hh" #include "moment.hh" #include "note-column.hh" -#include "warn.hh" -#include "stem.hh" +#include "output-def.hh" +#include "paper-column.hh" +#include "pointer-group-interface.hh" #include "separation-item.hh" #include "spacing-interface.hh" #include "staff-spacing.hh" -#include "accidental-placement.hh" -#include "output-def.hh" -#include "pointer-group-interface.hh" - -static bool -non_empty_barline (Grob *me) -{ - return Bar_line::has_interface (me) && !me->extent (me, X_AXIS).is_empty (); -} +#include "stem.hh" +#include "warn.hh" /* TODO: detect hshifts due to collisions, and account for them in @@ -38,29 +43,29 @@ Spring Note_spacing::get_spacing (Grob *me, Item *right_col, Real base_space, Real increment) { - vector note_columns = Spacing_interface::left_note_columns (me); + vector note_columns = Spacing_interface::left_note_columns (me); Real left_head_end = 0; for (vsize i = 0; i < note_columns.size (); i++) { - SCM r = note_columns[i]->get_object ("rest"); - Grob *g = unsmob_grob (r); - Grob *col = note_columns[i]->get_column (); - - if (!g) - g = Note_column::first_head (note_columns[i]); - - /* - Ugh. If Stem is switched off, we don't know what the - first note head will be. - */ - if (g) - { - if (g->common_refpoint (col, X_AXIS) != col) - programming_error ("Note_spacing::get_spacing (): Common refpoint incorrect"); - else - left_head_end = g->extent (col, X_AXIS)[RIGHT]; - } + SCM r = note_columns[i]->get_object ("rest"); + Grob *g = unsmob_grob (r); + Grob *col = note_columns[i]->get_column (); + + if (!g) + g = Note_column::first_head (note_columns[i]); + + /* + Ugh. If Stem is switched off, we don't know what the + first note head will be. + */ + if (g) + { + if (g->common_refpoint (col, X_AXIS) != col) + programming_error ("Note_spacing::get_spacing (): Common refpoint incorrect"); + else + left_head_end = g->extent (col, X_AXIS)[RIGHT]; + } } /* @@ -86,7 +91,7 @@ Note_spacing::get_spacing (Grob *me, Item *right_col, { Grob *bar = Pointer_group_interface::find_grob (right_col, ly_symbol2scm ("elements"), - non_empty_barline); + Bar_line::non_empty_barline); if (bar) { @@ -114,7 +119,7 @@ knee_correction (Grob *note_spacing, Grob *right_stem, Real increment) { Real note_head_width = increment; Grob *head = right_stem ? Stem::support_head (right_stem) : 0; - Grob *rcolumn = dynamic_cast (head)->get_column (); + Grob *rcolumn = dynamic_cast (head)->get_column (); Interval head_extent; if (head) @@ -159,44 +164,43 @@ same_direction_correction (Grob *note_spacing, Drul_array head_posns) { /* Correct for the following situation: - + X X | | | | | X | | | | ======== - + ^ move the center one to the left. - - + + this effect seems to be much more subtle than the stem-direction stuff (why?), and also does not scale with the difference in stem length. - + */ Interval hp = head_posns[LEFT]; hp.intersect (head_posns[RIGHT]); if (!hp.is_empty ()) return 0; - + Direction lowest = (head_posns[LEFT][DOWN] > head_posns[RIGHT][UP]) ? RIGHT : LEFT; - + Real delta = head_posns[-lowest][DOWN] - head_posns[lowest][UP]; Real corr = robust_scm2double (note_spacing->get_property ("same-direction-correction"), 0); - + return (delta > 1) ? -lowest * corr : 0; } - /* - Correct for optical illusions. See [Wanske] p. 138. The combination - up-stem + down-stem should get extra space, the combination - down-stem + up-stem less. + Correct for optical illusions. See [Wanske] p. 138. The combination + up-stem + down-stem should get extra space, the combination + down-stem + up-stem less. - TODO: have to check whether the stems are in the same staff. + TODO: have to check whether the stems are in the same staff. */ void Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, @@ -224,23 +228,25 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, Grob *bar = Spacing_interface::extremal_break_aligned_grob (me, RIGHT, rcolumn->break_status_dir (), &bar_xextent); - if (bar && dynamic_cast (bar)->get_column () == rcolumn) + if (bar && dynamic_cast (bar)->get_column () == rcolumn) bar_yextent = Staff_spacing::bar_y_positions (bar); do { - vector const &items (ly_scm2link_array (props [d])); + vector const &items (ly_scm2link_array (props [d])); for (vsize i = 0; i < items.size (); i++) { Item *it = dynamic_cast (items[i]); if (!Note_column::has_interface (it)) continue; + if (d == RIGHT && it->get_column () != rcolumn) + continue; /* Find accidentals which are sticking out of the right side. */ - if (d == RIGHT) - acc_right = acc_right || Note_column::accidentals (it); + if (d == RIGHT) + acc_right = acc_right || Note_column::accidentals (it); Grob *stem = Note_column::get_stem (it); @@ -273,8 +279,8 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, can't look at stem-end-position, since that triggers beam slope computations. */ - Real stem_end = hp[stem_dir] + - stem_dir * robust_scm2double (stem->get_property ("length"), 7); + Real stem_end = hp[stem_dir] + + stem_dir * robust_scm2double (stem->get_property ("length"), 7); stem_posns[d] = Interval (min (chord_start, stem_end), max (chord_start, stem_end)); diff --git a/lily/open-type-font-scheme.cc b/lily/open-type-font-scheme.cc index 2d33394fc8..fd48290aa0 100644 --- a/lily/open-type-font-scheme.cc +++ b/lily/open-type-font-scheme.cc @@ -1,9 +1,20 @@ /* - open-type-font.cc -- implement Open_type_font + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "modified-font-metric.hh" @@ -15,6 +26,7 @@ LY_DEFINE (ly_font_sub_fonts, "ly:font-sub-fonts", 1, 0, 0, " names of the subfonts within @var{font}.") { LY_ASSERT_SMOB (Font_metric, font, 1); + Font_metric *fm = unsmob_metrics (font); return fm->sub_fonts (); } @@ -26,9 +38,11 @@ LY_DEFINE (ly_otf_font_glyph_info, "ly:otf-font-glyph-info", 2, 0, 0, { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); - Open_type_font *otf = dynamic_cast (fm->original_font ()); + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) + : dynamic_cast (unsmob_metrics (font)); - SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OTF font-metric"); + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); LY_ASSERT_TYPE (scm_is_string, glyph, 2); SCM sym = scm_string_to_symbol (glyph); @@ -42,11 +56,11 @@ LY_DEFINE (ly_otf_font_table_data, "ly:otf-font-table-data", 2, 0, 0, { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); - - Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) : dynamic_cast (unsmob_metrics (font)); - SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "Open type font"); + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); LY_ASSERT_TYPE (scm_is_string, tag, 2); char ctag [5] = " "; @@ -65,25 +79,39 @@ LY_DEFINE (ly_otf_font_p, "ly:otf-font?", 1, 0, 0, { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); - - Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) : dynamic_cast (unsmob_metrics (font)); return scm_from_bool (otf); } -LY_DEFINE (ly_otf_glyph_list, "ly:otf-glyph-list", - 1, 0, 0, (SCM font), - "Return a list of glyph names for @var{font}.") +LY_DEFINE (ly_otf_glyph_count, "ly:otf-glyph-count", 1, 0, 0, + (SCM font), + "Return the number of glyphs in @var{font}.") { Modified_font_metric *fm = dynamic_cast (unsmob_metrics (font)); + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) + : dynamic_cast (unsmob_metrics (font)); - Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); + + return scm_from_int ((int) otf->count ()); +} + +LY_DEFINE (ly_otf_glyph_list, "ly:otf-glyph-list", 1, 0, 0, + (SCM font), + "Return a list of glyph names for @var{font}.") +{ + Modified_font_metric *fm + = dynamic_cast (unsmob_metrics (font)); + Open_type_font *otf = fm + ? dynamic_cast (fm->original_font ()) : dynamic_cast (unsmob_metrics (font)); + SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); - SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OTF font"); return otf->glyph_list (); - } diff --git a/lily/open-type-font.cc b/lily/open-type-font.cc index 3d007be811..50c89a4065 100644 --- a/lily/open-type-font.cc +++ b/lily/open-type-font.cc @@ -1,9 +1,20 @@ /* - open-type-font.cc -- implement Open_type_font + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "open-type-font.hh" @@ -25,7 +36,7 @@ load_table (char const *tag_str, FT_Face face, FT_ULong *length) *length = 0; FT_ULong tag = FT_MAKE_TAG (tag_str[0], tag_str[1], tag_str[2], tag_str[3]); - int error_code = FT_Load_Sfnt_Table (face, tag, 0, NULL, length); + FT_Error error_code = FT_Load_Sfnt_Table (face, tag, 0, NULL, length); if (!error_code) { FT_Byte *buffer = (FT_Byte *) malloc (*length); @@ -39,7 +50,7 @@ load_table (char const *tag_str, FT_Face face, FT_ULong *length) return buffer; } else - programming_error (_f ("Free type error: %s", + programming_error (_f ("FreeType error: %s", freetype_error_string (error_code).c_str () )); @@ -94,7 +105,7 @@ FT_Face open_ft_face (string str, FT_Long idx) { FT_Face face; - int error_code = FT_New_Face (freetype2_library, str.c_str (), idx, &face); + FT_Error error_code = FT_New_Face (freetype2_library, str.c_str (), idx, &face); if (error_code == FT_Err_Unknown_File_Format) error (_f ("unsupported font format: %s", str.c_str ())); @@ -156,12 +167,12 @@ Open_type_font::attachment_point (string glyph_name) const } Box -Open_type_font::get_indexed_char (size_t signed_idx) const +Open_type_font::get_indexed_char_dimensions (size_t signed_idx) const { if (SCM_HASHTABLE_P (lily_index_to_bbox_table_)) { SCM box = scm_hashq_ref (lily_index_to_bbox_table_, - scm_from_unsigned (signed_idx), SCM_BOOL_F); + scm_from_unsigned_integer (signed_idx), SCM_BOOL_F); Box *box_ptr = Box::unsmob (box); if (box_ptr) return *box_ptr; @@ -171,7 +182,8 @@ Open_type_font::get_indexed_char (size_t signed_idx) const { const size_t len = 256; char name[len]; - size_t code = FT_Get_Glyph_Name (face_, signed_idx, name, len); + FT_Error code = FT_Get_Glyph_Name (face_, FT_UInt (signed_idx), + name, FT_UInt (len)); if (code) warning (_f ("FT_Get_Glyph_Name () Freetype error: %s", freetype_error_string (code))); @@ -196,22 +208,20 @@ Open_type_font::get_indexed_char (size_t signed_idx) const b.scale (point_constant); scm_hashq_set_x (lily_index_to_bbox_table_, - scm_from_unsigned (signed_idx), + scm_from_unsigned_integer (signed_idx), b.smobbed_copy ()); return b; } } - FT_UInt idx = signed_idx; - FT_Load_Glyph (face_, - idx, - FT_LOAD_NO_SCALE); + FT_UInt idx = FT_UInt (signed_idx); + FT_Load_Glyph (face_, idx, FT_LOAD_NO_SCALE); FT_Glyph_Metrics m = face_->glyph->metrics; - int hb = m.horiBearingX; - int vb = m.horiBearingY; - Box b (Interval (-hb, m.width - hb), - Interval (-vb, m.height - vb)); + FT_Pos hb = m.horiBearingX; + FT_Pos vb = m.horiBearingY; + Box b (Interval (Real (-hb), Real (m.width - hb)), + Interval (Real (-vb), Real (m.height - vb))); b.scale (design_size () / Real (face_->units_per_EM)); return b; @@ -221,8 +231,8 @@ size_t Open_type_font::name_to_index (string nm) const { char *nm_str = (char *) nm.c_str (); - if (size_t idx = FT_Get_Name_Index (face_, nm_str)) - return idx; + if (FT_UInt idx = FT_Get_Name_Index (face_, nm_str)) + return (size_t) idx; return (size_t) -1; } @@ -230,13 +240,22 @@ Open_type_font::name_to_index (string nm) const size_t Open_type_font::index_to_charcode (size_t i) const { - return ((Open_type_font *) this)->index_to_charcode_map_[i]; + map::const_iterator iter; + iter = index_to_charcode_map_.find (FT_UInt (i)); + + if (iter != index_to_charcode_map_.end ()) + return (size_t) iter->second; + else + { + programming_error ("Invalid index for character"); + return 0; + } } size_t Open_type_font::count () const { - return ((Open_type_font *) this)->index_to_charcode_map_.size (); + return index_to_charcode_map_.size (); } Real @@ -251,7 +270,7 @@ Open_type_font::design_size () const which will trip errors more quickly. --hwn. */ - scm_from_unsigned (1)); + scm_from_unsigned_integer (1)); return scm_to_double (entry) * Real (point_constant); } @@ -285,7 +304,6 @@ Open_type_font::font_name () const return FT_Get_Postscript_Name (face_); } - SCM Open_type_font::glyph_list () const { @@ -296,7 +314,7 @@ Open_type_font::glyph_list () const { const size_t len = 256; char name[len]; - size_t code = FT_Get_Glyph_Name (face_, i, name, len); + FT_Error code = FT_Get_Glyph_Name (face_, i, name, len); if (code) warning (_f ("FT_Get_Glyph_Name () error: %s", freetype_error_string (code).c_str ())); diff --git a/lily/optimal-page-breaking.cc b/lily/optimal-page-breaking.cc index 44e96602e8..e404711b4b 100644 --- a/lily/optimal-page-breaking.cc +++ b/lily/optimal-page-breaking.cc @@ -1,11 +1,20 @@ /* - optimal-page-breaking.cc -- implement a page-breaker that - will break pages in such a way that both horizontal and - vertical spacing will be acceptable + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #include "international.hh" @@ -17,14 +26,8 @@ #include "prob.hh" #include "system.hh" -static bool -is_break (Grob *) -{ - return false; -} - Optimal_page_breaking::Optimal_page_breaking (Paper_book *pb) - : Page_breaking (pb, is_break) + : Page_breaking (pb, 0, 0) { } @@ -32,21 +35,25 @@ Optimal_page_breaking::~Optimal_page_breaking () { } +extern bool debug_page_breaking_scoring; + SCM Optimal_page_breaking::solve () { vsize end = last_break_position (); vsize max_sys_count = max_system_count (0, end); vsize first_page_num = robust_scm2int (book_->paper_->c_variable ("first-page-number"), 1); - SCM forced_page_count = book_->paper_->c_variable ("page-count"); set_to_ideal_line_configuration (0, end); Page_spacing_result best; + SCM forced_page_count = book_->paper_->c_variable ("page-count"); vsize page_count = robust_scm2int (forced_page_count, 1); Line_division ideal_line_division = current_configuration (0); Line_division best_division = ideal_line_division; vsize min_sys_count = 1; + + // Note that system_count () only counts non-title systems. vsize ideal_sys_count = system_count (); if (!scm_is_integer (forced_page_count)) @@ -55,9 +62,8 @@ Optimal_page_breaking::solve () message (_ ("Finding the ideal number of pages...")); best = space_systems_on_best_pages (0, first_page_num); - page_count = best.systems_per_page_.size (); - ideal_sys_count = best.system_count (); + page_count = best.systems_per_page_.size (); min_sys_count = ideal_sys_count - best.systems_per_page_.back (); if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1) @@ -67,10 +73,32 @@ Optimal_page_breaking::solve () } else { - /* todo: the following line will spit out programming errors if the + /* If systems-per-page and page-count are both specified, we know exactly + how many systems should be present. */ + if (systems_per_page () > 0) + { + ideal_sys_count = systems_per_page () * page_count; + + if (ideal_sys_count > max_system_count (0, end) + || ideal_sys_count < min_system_count (0, end)) + { + warning (_ ("could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page")); + ideal_sys_count = system_count (); + min_sys_count = page_count; + } + else + { + set_current_breakpoints (0, end, ideal_sys_count); + min_sys_count = max_sys_count = ideal_sys_count; + ideal_line_division = best_division = current_configuration (0); + } + } + else + min_sys_count = page_count; + + /* TODO: the following line will spit out programming errors if the ideal line spacing doesn't fit on PAGE_COUNT pages */ best = space_systems_on_n_pages (0, page_count, first_page_num); - min_sys_count = page_count; } if (page_count == 1) @@ -82,42 +110,54 @@ Optimal_page_breaking::solve () /* try a smaller number of systems than the ideal number for line breaking */ Line_division bound = ideal_line_division; - for (vsize sys_count = ideal_sys_count; --sys_count >= min_sys_count;) + for (vsize sys_count = ideal_sys_count + 1; --sys_count >= min_sys_count;) { Page_spacing_result best_for_this_sys_count; set_current_breakpoints (0, end, sys_count, Line_division (), bound); + if (debug_page_breaking_scoring) + message (_f ("trying %d systems", (int)sys_count)); + for (vsize i = 0; i < current_configuration_count (); i++) { - vsize min_p_count = min_page_count (i, first_page_num); Page_spacing_result cur; - if (min_p_count == page_count || scm_is_integer (forced_page_count)) + if (scm_is_integer (forced_page_count)) cur = space_systems_on_n_pages (i, page_count, first_page_num); else - cur = space_systems_on_n_or_one_more_pages (i, page_count-1, first_page_num); + cur = space_systems_on_best_pages (i, first_page_num); - if (cur.demerits_ < best_for_this_sys_count.demerits_ || isinf (best_for_this_sys_count.demerits_)) + if (cur.demerits_ < best_for_this_sys_count.demerits_) { best_for_this_sys_count = cur; bound = current_configuration (i); } } - if (best_for_this_sys_count.demerits_ < best.demerits_ || isinf (best.demerits_)) + if (debug_page_breaking_scoring) + message (_f ("best score for this sys-count: %f", best_for_this_sys_count.demerits_)); + + if (best_for_this_sys_count.demerits_ < best.demerits_) { best = best_for_this_sys_count; best_division = bound; } - /* if the pages are stretched on average, stop trying to reduce sys_count */ - if (best_for_this_sys_count.page_count () < page_count - && best_for_this_sys_count.average_force () > 0) - break; - + /* Check to see if we already have too few systems. There are two ways + we check this: if we are trying one less than the ideal number of pages + and the pages are stretched on average then we have too + few systems. If the spacing is worse than BAD_SPACING_PENALTY, then we + have too few systems. In either case, though, we need to continue reducing + the number of systems if max-systems-per-page requires it. */ + if (!(best.system_count_status_ & SYSTEM_COUNT_TOO_MANY)) + { + if (best_for_this_sys_count.page_count () < page_count + && best_for_this_sys_count.average_force () > 0) + break; - if (isinf (best_for_this_sys_count.demerits_)) - break; + if (best_for_this_sys_count.demerits_ >= BAD_SPACING_PENALTY) + break; + } } /* try a larger number of systems than the ideal line breaking number. This @@ -129,6 +169,9 @@ Optimal_page_breaking::solve () Real best_demerits_for_this_sys_count = infinity_f; set_current_breakpoints (0, end, sys_count, bound); + if (debug_page_breaking_scoring) + message (_f ("trying %d systems", (int)sys_count)); + for (vsize i = 0; i < current_configuration_count (); i++) { vsize min_p_count = min_page_count (i, first_page_num); @@ -136,22 +179,29 @@ Optimal_page_breaking::solve () if (min_p_count > page_count) continue; - else + else if (scm_is_integer (forced_page_count)) cur = space_systems_on_n_pages (i, page_count, first_page_num); + else + cur = space_systems_on_best_pages (i, first_page_num); - if (cur.demerits_ < best.demerits_ || isinf (best.demerits_)) + if (cur.demerits_ < best.demerits_) { best = cur; best_division = current_configuration (i); } - if (cur.demerits_ < best_demerits_for_this_sys_count || isinf (best_demerits_for_this_sys_count)) + if (cur.demerits_ < best_demerits_for_this_sys_count) { best_demerits_for_this_sys_count = cur.demerits_; bound = current_configuration (i); } } - if (isinf (best_demerits_for_this_sys_count)) + + if (debug_page_breaking_scoring) + message (_f ("best score for this sys-count: %f", best_demerits_for_this_sys_count)); + + if (best_demerits_for_this_sys_count >= BAD_SPACING_PENALTY + && !(best.system_count_status_ & SYSTEM_COUNT_TOO_FEW)) break; } diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc index 3ea133e483..1fa77ec799 100644 --- a/lily/ottava-bracket.cc +++ b/lily/ottava-bracket.cc @@ -1,9 +1,20 @@ /* - ottava-bracket.cc -- implement Ottava_bracket + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "text-interface.hh" diff --git a/lily/ottava-engraver.cc b/lily/ottava-engraver.cc index f4a8a8b91c..fd59b33b8e 100644 --- a/lily/ottava-engraver.cc +++ b/lily/ottava-engraver.cc @@ -1,18 +1,30 @@ /* - ottava-engraver.cc -- implement Ottava_spanner_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ -#include "protected-scm.hh" +#include "engraver.hh" +#include "item.hh" #include "note-column.hh" +#include "protected-scm.hh" #include "side-position-interface.hh" -#include "engraver.hh" #include "spanner.hh" #include "text-interface.hh" -#include "item.hh" + class Ottava_spanner_engraver : public Engraver { @@ -137,8 +149,8 @@ ADD_TRANSLATOR (Ottava_spanner_engraver, "OttavaBracket ", /* read */ + "middleCOffset " "ottavation " - "originalMiddleCPosition " "currentMusicalColumn ", /* write */ diff --git a/lily/out/parser.cc b/lily/out/parser.cc index e17a8f0700..9c1de4bdbd 100644 --- a/lily/out/parser.cc +++ b/lily/out/parser.cc @@ -101,106 +101,95 @@ MIDI = 290, NAME = 291, NOTEMODE = 292, - OBJECTID = 293, - OCTAVE = 294, - ONCE = 295, - OVERRIDE = 296, - PAPER = 297, - PARTIAL = 298, - RELATIVE = 299, - REMOVE = 300, - REPEAT = 301, - REST = 302, - REVERT = 303, - SCORE = 304, - SEQUENTIAL = 305, - SET = 306, - SIMULTANEOUS = 307, - SKIP = 308, - TEMPO = 309, - TIMES = 310, - TRANSPOSE = 311, - TYPE = 312, - UNSET = 313, - WITH = 314, - TIME_T = 315, - NEWCONTEXT = 316, - CHORD_BASS = 317, - CHORD_CARET = 318, - CHORD_COLON = 319, - CHORD_MINUS = 320, - CHORD_SLASH = 321, - ANGLE_OPEN = 322, - ANGLE_CLOSE = 323, - DOUBLE_ANGLE_OPEN = 324, - DOUBLE_ANGLE_CLOSE = 325, - E_BACKSLASH = 326, - E_ANGLE_CLOSE = 327, - E_CHAR = 328, - E_CLOSE = 329, - E_EXCLAMATION = 330, - E_BRACKET_OPEN = 331, - E_OPEN = 332, - E_BRACKET_CLOSE = 333, - E_ANGLE_OPEN = 334, - E_PLUS = 335, - E_TILDE = 336, - EXTENDER = 337, - FIGURE_CLOSE = 338, - FIGURE_OPEN = 339, - FIGURE_SPACE = 340, - HYPHEN = 341, - CHORDMODIFIERS = 342, - LYRIC_MARKUP = 343, - MULTI_MEASURE_REST = 344, - DIGIT = 345, - E_UNSIGNED = 346, - UNSIGNED = 347, - EXPECT_MARKUP = 348, - EXPECT_MUSIC = 349, - EXPECT_SCM = 350, + OCTAVE = 293, + ONCE = 294, + OVERRIDE = 295, + PAPER = 296, + PARTIAL = 297, + RELATIVE = 298, + REMOVE = 299, + REPEAT = 300, + REST = 301, + REVERT = 302, + SCORE = 303, + SEQUENTIAL = 304, + SET = 305, + SIMULTANEOUS = 306, + SKIP = 307, + TEMPO = 308, + TIMES = 309, + TRANSPOSE = 310, + TYPE = 311, + UNSET = 312, + WITH = 313, + TIME_T = 314, + NEWCONTEXT = 315, + CHORD_BASS = 316, + CHORD_CARET = 317, + CHORD_COLON = 318, + CHORD_MINUS = 319, + CHORD_SLASH = 320, + ANGLE_OPEN = 321, + ANGLE_CLOSE = 322, + DOUBLE_ANGLE_OPEN = 323, + DOUBLE_ANGLE_CLOSE = 324, + E_BACKSLASH = 325, + E_ANGLE_CLOSE = 326, + E_CHAR = 327, + E_CLOSE = 328, + E_EXCLAMATION = 329, + E_BRACKET_OPEN = 330, + E_OPEN = 331, + E_BRACKET_CLOSE = 332, + E_ANGLE_OPEN = 333, + E_PLUS = 334, + E_TILDE = 335, + EXTENDER = 336, + FIGURE_CLOSE = 337, + FIGURE_OPEN = 338, + FIGURE_SPACE = 339, + HYPHEN = 340, + CHORDMODIFIERS = 341, + LYRIC_MARKUP = 342, + MULTI_MEASURE_REST = 343, + DIGIT = 344, + E_UNSIGNED = 345, + UNSIGNED = 346, + EXPECT_MARKUP = 347, + EXPECT_MUSIC = 348, + EXPECT_SCM = 349, + EXPECT_MARKUP_LIST = 350, EXPECT_NO_MORE_ARGS = 351, BOOK_IDENTIFIER = 352, CHORDMODIFIER_PITCH = 353, CHORD_MODIFIER = 354, - CONTEXT_DEF_IDENTIFIER = 355, - DRUM_PITCH = 356, - DURATION_IDENTIFIER = 357, - EVENT_IDENTIFIER = 358, - FRACTION = 359, - LYRICS_STRING = 360, - LYRIC_MARKUP_IDENTIFIER = 361, - MARKUP_HEAD_EMPTY = 362, - MARKUP_HEAD_LIST0 = 363, - MARKUP_HEAD_MARKUP0 = 364, - MARKUP_HEAD_MARKUP0_MARKUP1 = 365, - MARKUP_HEAD_SCM0 = 366, - MARKUP_HEAD_SCM0_MARKUP1 = 367, - MARKUP_HEAD_SCM0_SCM1 = 368, - MARKUP_HEAD_SCM0_SCM1_MARKUP2 = 369, - MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3 = 370, - MARKUP_HEAD_SCM0_MARKUP1_MARKUP2 = 371, - MARKUP_HEAD_SCM0_SCM1_SCM2 = 372, - MARKUP_LIST_HEAD_EMPTY = 373, - MARKUP_LIST_HEAD_LIST0 = 374, - MARKUP_LIST_HEAD_SCM0 = 375, - MARKUP_LIST_HEAD_SCM0_LIST1 = 376, - MARKUP_LIST_HEAD_SCM0_SCM1_LIST2 = 377, - MARKUP_IDENTIFIER = 378, - MUSIC_FUNCTION = 379, - MUSIC_IDENTIFIER = 380, - NOTENAME_PITCH = 381, - NUMBER_IDENTIFIER = 382, - OUTPUT_DEF_IDENTIFIER = 383, - REAL = 384, - RESTNAME = 385, - SCM_IDENTIFIER = 386, - SCM_TOKEN = 387, - SCORE_IDENTIFIER = 388, - STRING = 389, - STRING_IDENTIFIER = 390, - TONICNAME_PITCH = 391, - UNARY_MINUS = 392 + CHORD_REPETITION = 355, + CONTEXT_DEF_IDENTIFIER = 356, + CONTEXT_MOD_IDENTIFIER = 357, + DRUM_PITCH = 358, + DURATION_IDENTIFIER = 359, + EVENT_IDENTIFIER = 360, + FRACTION = 361, + LYRICS_STRING = 362, + LYRIC_MARKUP_IDENTIFIER = 363, + MARKUP_FUNCTION = 364, + MARKUP_LIST_FUNCTION = 365, + MARKUP_IDENTIFIER = 366, + MARKUPLINES_IDENTIFIER = 367, + MUSIC_FUNCTION = 368, + MUSIC_IDENTIFIER = 369, + NOTENAME_PITCH = 370, + NUMBER_IDENTIFIER = 371, + OUTPUT_DEF_IDENTIFIER = 372, + REAL = 373, + RESTNAME = 374, + SCM_IDENTIFIER = 375, + SCM_TOKEN = 376, + SCORE_IDENTIFIER = 377, + STRING = 378, + STRING_IDENTIFIER = 379, + TONICNAME_PITCH = 380, + UNARY_MINUS = 381 }; #endif /* Tokens. */ @@ -239,112 +228,101 @@ #define MIDI 290 #define NAME 291 #define NOTEMODE 292 -#define OBJECTID 293 -#define OCTAVE 294 -#define ONCE 295 -#define OVERRIDE 296 -#define PAPER 297 -#define PARTIAL 298 -#define RELATIVE 299 -#define REMOVE 300 -#define REPEAT 301 -#define REST 302 -#define REVERT 303 -#define SCORE 304 -#define SEQUENTIAL 305 -#define SET 306 -#define SIMULTANEOUS 307 -#define SKIP 308 -#define TEMPO 309 -#define TIMES 310 -#define TRANSPOSE 311 -#define TYPE 312 -#define UNSET 313 -#define WITH 314 -#define TIME_T 315 -#define NEWCONTEXT 316 -#define CHORD_BASS 317 -#define CHORD_CARET 318 -#define CHORD_COLON 319 -#define CHORD_MINUS 320 -#define CHORD_SLASH 321 -#define ANGLE_OPEN 322 -#define ANGLE_CLOSE 323 -#define DOUBLE_ANGLE_OPEN 324 -#define DOUBLE_ANGLE_CLOSE 325 -#define E_BACKSLASH 326 -#define E_ANGLE_CLOSE 327 -#define E_CHAR 328 -#define E_CLOSE 329 -#define E_EXCLAMATION 330 -#define E_BRACKET_OPEN 331 -#define E_OPEN 332 -#define E_BRACKET_CLOSE 333 -#define E_ANGLE_OPEN 334 -#define E_PLUS 335 -#define E_TILDE 336 -#define EXTENDER 337 -#define FIGURE_CLOSE 338 -#define FIGURE_OPEN 339 -#define FIGURE_SPACE 340 -#define HYPHEN 341 -#define CHORDMODIFIERS 342 -#define LYRIC_MARKUP 343 -#define MULTI_MEASURE_REST 344 -#define DIGIT 345 -#define E_UNSIGNED 346 -#define UNSIGNED 347 -#define EXPECT_MARKUP 348 -#define EXPECT_MUSIC 349 -#define EXPECT_SCM 350 +#define OCTAVE 293 +#define ONCE 294 +#define OVERRIDE 295 +#define PAPER 296 +#define PARTIAL 297 +#define RELATIVE 298 +#define REMOVE 299 +#define REPEAT 300 +#define REST 301 +#define REVERT 302 +#define SCORE 303 +#define SEQUENTIAL 304 +#define SET 305 +#define SIMULTANEOUS 306 +#define SKIP 307 +#define TEMPO 308 +#define TIMES 309 +#define TRANSPOSE 310 +#define TYPE 311 +#define UNSET 312 +#define WITH 313 +#define TIME_T 314 +#define NEWCONTEXT 315 +#define CHORD_BASS 316 +#define CHORD_CARET 317 +#define CHORD_COLON 318 +#define CHORD_MINUS 319 +#define CHORD_SLASH 320 +#define ANGLE_OPEN 321 +#define ANGLE_CLOSE 322 +#define DOUBLE_ANGLE_OPEN 323 +#define DOUBLE_ANGLE_CLOSE 324 +#define E_BACKSLASH 325 +#define E_ANGLE_CLOSE 326 +#define E_CHAR 327 +#define E_CLOSE 328 +#define E_EXCLAMATION 329 +#define E_BRACKET_OPEN 330 +#define E_OPEN 331 +#define E_BRACKET_CLOSE 332 +#define E_ANGLE_OPEN 333 +#define E_PLUS 334 +#define E_TILDE 335 +#define EXTENDER 336 +#define FIGURE_CLOSE 337 +#define FIGURE_OPEN 338 +#define FIGURE_SPACE 339 +#define HYPHEN 340 +#define CHORDMODIFIERS 341 +#define LYRIC_MARKUP 342 +#define MULTI_MEASURE_REST 343 +#define DIGIT 344 +#define E_UNSIGNED 345 +#define UNSIGNED 346 +#define EXPECT_MARKUP 347 +#define EXPECT_MUSIC 348 +#define EXPECT_SCM 349 +#define EXPECT_MARKUP_LIST 350 #define EXPECT_NO_MORE_ARGS 351 #define BOOK_IDENTIFIER 352 #define CHORDMODIFIER_PITCH 353 #define CHORD_MODIFIER 354 -#define CONTEXT_DEF_IDENTIFIER 355 -#define DRUM_PITCH 356 -#define DURATION_IDENTIFIER 357 -#define EVENT_IDENTIFIER 358 -#define FRACTION 359 -#define LYRICS_STRING 360 -#define LYRIC_MARKUP_IDENTIFIER 361 -#define MARKUP_HEAD_EMPTY 362 -#define MARKUP_HEAD_LIST0 363 -#define MARKUP_HEAD_MARKUP0 364 -#define MARKUP_HEAD_MARKUP0_MARKUP1 365 -#define MARKUP_HEAD_SCM0 366 -#define MARKUP_HEAD_SCM0_MARKUP1 367 -#define MARKUP_HEAD_SCM0_SCM1 368 -#define MARKUP_HEAD_SCM0_SCM1_MARKUP2 369 -#define MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3 370 -#define MARKUP_HEAD_SCM0_MARKUP1_MARKUP2 371 -#define MARKUP_HEAD_SCM0_SCM1_SCM2 372 -#define MARKUP_LIST_HEAD_EMPTY 373 -#define MARKUP_LIST_HEAD_LIST0 374 -#define MARKUP_LIST_HEAD_SCM0 375 -#define MARKUP_LIST_HEAD_SCM0_LIST1 376 -#define MARKUP_LIST_HEAD_SCM0_SCM1_LIST2 377 -#define MARKUP_IDENTIFIER 378 -#define MUSIC_FUNCTION 379 -#define MUSIC_IDENTIFIER 380 -#define NOTENAME_PITCH 381 -#define NUMBER_IDENTIFIER 382 -#define OUTPUT_DEF_IDENTIFIER 383 -#define REAL 384 -#define RESTNAME 385 -#define SCM_IDENTIFIER 386 -#define SCM_TOKEN 387 -#define SCORE_IDENTIFIER 388 -#define STRING 389 -#define STRING_IDENTIFIER 390 -#define TONICNAME_PITCH 391 -#define UNARY_MINUS 392 +#define CHORD_REPETITION 355 +#define CONTEXT_DEF_IDENTIFIER 356 +#define CONTEXT_MOD_IDENTIFIER 357 +#define DRUM_PITCH 358 +#define DURATION_IDENTIFIER 359 +#define EVENT_IDENTIFIER 360 +#define FRACTION 361 +#define LYRICS_STRING 362 +#define LYRIC_MARKUP_IDENTIFIER 363 +#define MARKUP_FUNCTION 364 +#define MARKUP_LIST_FUNCTION 365 +#define MARKUP_IDENTIFIER 366 +#define MARKUPLINES_IDENTIFIER 367 +#define MUSIC_FUNCTION 368 +#define MUSIC_IDENTIFIER 369 +#define NOTENAME_PITCH 370 +#define NUMBER_IDENTIFIER 371 +#define OUTPUT_DEF_IDENTIFIER 372 +#define REAL 373 +#define RESTNAME 374 +#define SCM_IDENTIFIER 375 +#define SCM_TOKEN 376 +#define SCORE_IDENTIFIER 377 +#define STRING 378 +#define STRING_IDENTIFIER 379 +#define TONICNAME_PITCH 380 +#define UNARY_MINUS 381 /* Copy the first part of user declarations. */ -#line 10 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 21 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" #define YYDEBUG 1 @@ -361,7 +339,7 @@ ((Current).set_location ((Rhs)[1], (Rhs)[N])) -#line 56 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 67 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" // -*-Fundamental-*- /* @@ -382,6 +360,7 @@ using namespace std; #include "book.hh" #include "context-def.hh" +#include "context-mod.hh" #include "dimensions.hh" #include "file-path.hh" #include "input.hh" @@ -423,7 +402,7 @@ using namespace std; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 98 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 110 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Book *book; Output_def *outputdef; @@ -434,7 +413,7 @@ typedef union YYSTYPE int i; } /* Line 187 of yacc.c. */ -#line 438 "out/parser.cc" +#line 417 "out/parser.cc" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -456,7 +435,7 @@ typedef struct YYLTYPE /* Copy the second part of user declarations. */ -#line 108 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 120 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" #define MY_MAKE_MUSIC(x, spot) make_music_with_input (ly_symbol2scm (x), spot) @@ -499,7 +478,7 @@ void set_music_properties (Music *p, SCM a); /* Line 216 of yacc.c. */ -#line 503 "out/parser.cc" +#line 482 "out/parser.cc" #ifdef short # undef short @@ -716,20 +695,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2076 +#define YYLAST 1916 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 159 +#define YYNTOKENS 148 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 140 +#define YYNNTS 145 /* YYNRULES -- Number of rules. */ -#define YYNRULES 408 +#define YYNRULES 415 /* YYNRULES -- Number of states. */ -#define YYNSTATES 589 +#define YYNSTATES 585 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 392 +#define YYMAXUTOK 381 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -740,16 +719,16 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 157, 2, 2, 2, 2, 2, 150, - 148, 149, 154, 138, 151, 137, 143, 155, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 156, 2, - 2, 142, 2, 158, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 146, 2, 2, 2, 2, 2, 139, + 137, 138, 143, 127, 140, 126, 132, 144, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 145, 2, + 2, 131, 2, 147, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 145, 2, 146, 152, 153, 2, 2, 2, 2, + 2, 134, 2, 135, 141, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 140, 144, 141, 147, 2, 2, 2, + 2, 2, 2, 129, 133, 130, 136, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -775,8 +754,7 @@ static const yytype_uint8 yytranslate[] = 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 139 + 125, 128 }; #if YYDEBUG @@ -784,207 +762,210 @@ static const yytype_uint8 yytranslate[] = YYRHS. */ static const yytype_uint16 yyprhs[] = { - 0, 0, 3, 4, 7, 10, 13, 16, 19, 21, - 23, 25, 27, 29, 31, 33, 35, 37, 39, 40, - 43, 48, 50, 52, 56, 58, 60, 62, 64, 66, - 68, 70, 72, 74, 76, 78, 80, 82, 87, 88, - 90, 94, 97, 102, 103, 105, 108, 111, 114, 117, - 120, 123, 126, 129, 132, 137, 138, 140, 143, 146, - 149, 152, 155, 158, 161, 164, 169, 171, 173, 176, + 0, 0, 3, 4, 7, 10, 13, 16, 18, 20, + 22, 24, 26, 28, 30, 32, 34, 36, 37, 40, + 45, 47, 49, 53, 58, 60, 62, 64, 66, 68, + 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, + 93, 94, 96, 100, 103, 106, 111, 112, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 143, 144, 146, + 149, 152, 155, 158, 161, 164, 167, 172, 174, 176, 179, 182, 185, 187, 190, 192, 194, 196, 198, 201, - 205, 208, 211, 214, 219, 225, 231, 234, 237, 238, - 241, 244, 247, 249, 251, 252, 257, 263, 268, 272, - 277, 281, 283, 285, 287, 289, 290, 291, 297, 298, - 301, 303, 305, 307, 309, 311, 313, 317, 321, 325, - 327, 331, 335, 337, 339, 341, 344, 345, 348, 350, - 356, 362, 366, 368, 373, 376, 380, 382, 384, 386, - 388, 390, 392, 394, 396, 398, 400, 402, 406, 409, - 410, 414, 415, 420, 423, 424, 429, 434, 436, 439, - 441, 445, 448, 454, 458, 460, 462, 464, 466, 468, - 470, 472, 474, 476, 478, 481, 483, 487, 493, 497, - 502, 505, 507, 510, 512, 514, 518, 520, 522, 524, - 526, 528, 530, 532, 534, 536, 539, 543, 545, 547, - 551, 555, 556, 559, 565, 568, 570, 572, 577, 580, - 585, 588, 590, 593, 595, 597, 599, 601, 604, 607, - 610, 612, 615, 617, 620, 624, 625, 628, 630, 633, - 635, 637, 640, 643, 645, 647, 649, 651, 653, 655, - 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, - 677, 678, 680, 683, 686, 688, 691, 693, 696, 698, - 701, 704, 706, 709, 712, 714, 716, 718, 720, 722, - 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, - 744, 746, 748, 749, 751, 754, 757, 759, 763, 767, - 769, 773, 774, 777, 779, 782, 784, 786, 788, 790, - 792, 794, 796, 798, 800, 803, 806, 809, 811, 813, - 815, 817, 819, 822, 823, 826, 830, 831, 833, 840, - 843, 846, 849, 851, 853, 856, 858, 860, 863, 868, - 869, 872, 874, 876, 879, 882, 884, 886, 888, 890, - 894, 896, 899, 902, 906, 910, 912, 914, 918, 922, - 925, 927, 929, 931, 933, 936, 939, 941, 943, 945, - 947, 948, 951, 952, 955, 957, 958, 962, 963, 967, - 969, 970, 974, 976, 979, 981, 983, 985, 987, 990, - 994, 995, 998, 1001, 1003, 1006, 1009, 1013, 1018, 1020, - 1023, 1027, 1029, 1032, 1034, 1036, 1038, 1040, 1041, 1047, - 1050, 1055, 1059, 1064, 1070, 1072, 1075, 1079, 1082 + 205, 208, 211, 214, 219, 225, 228, 229, 232, 235, + 238, 240, 242, 243, 248, 254, 259, 263, 268, 272, + 274, 276, 278, 280, 281, 287, 290, 292, 293, 295, + 296, 299, 302, 304, 306, 308, 310, 312, 314, 318, + 322, 326, 330, 332, 336, 340, 344, 346, 348, 350, + 353, 354, 357, 359, 365, 371, 375, 377, 382, 385, + 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, + 409, 411, 415, 418, 419, 423, 424, 428, 429, 434, + 435, 440, 443, 446, 447, 452, 457, 459, 462, 464, + 468, 471, 477, 481, 483, 485, 487, 489, 491, 493, + 495, 497, 499, 501, 504, 507, 509, 513, 519, 523, + 528, 531, 533, 536, 538, 540, 544, 546, 548, 550, + 552, 554, 556, 558, 560, 562, 565, 569, 573, 575, + 577, 581, 585, 586, 589, 595, 598, 600, 602, 607, + 610, 615, 618, 620, 623, 625, 627, 629, 631, 634, + 637, 640, 642, 645, 647, 650, 654, 655, 658, 660, + 663, 665, 667, 670, 673, 675, 677, 679, 681, 683, + 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, + 705, 707, 708, 710, 713, 716, 718, 721, 723, 726, + 728, 731, 734, 736, 739, 742, 744, 746, 748, 750, + 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, + 772, 774, 776, 778, 779, 781, 784, 787, 789, 793, + 797, 799, 803, 804, 807, 809, 812, 814, 816, 818, + 820, 822, 824, 826, 828, 830, 833, 836, 839, 841, + 843, 845, 847, 849, 852, 853, 856, 860, 861, 863, + 870, 873, 876, 879, 881, 883, 886, 888, 890, 893, + 898, 899, 902, 904, 906, 909, 912, 914, 916, 918, + 920, 924, 926, 929, 932, 934, 938, 942, 946, 948, + 950, 954, 958, 961, 963, 965, 967, 969, 972, 975, + 977, 979, 981, 983, 984, 987, 988, 991, 993, 994, + 998, 1000, 1001, 1005, 1007, 1008, 1012, 1014, 1017, 1019, + 1021, 1023, 1025, 1027, 1030, 1034, 1035, 1038, 1041, 1044, + 1048, 1052, 1054, 1056, 1060, 1064, 1066, 1069, 1071, 1073, + 1075, 1077, 1078, 1084, 1087, 1090 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 160, 0, -1, -1, 160, 162, -1, 160, 167, -1, - 160, 1, -1, 160, 26, -1, 38, 134, -1, 165, - -1, 171, -1, 173, -1, 175, -1, 193, -1, 286, - -1, 284, -1, 178, -1, 132, -1, 131, -1, -1, - 164, 167, -1, 25, 140, 164, 141, -1, 134, -1, - 105, -1, 166, 142, 168, -1, 163, -1, 175, -1, - 171, -1, 173, -1, 178, -1, 169, -1, 184, -1, - 234, -1, 274, -1, 220, -1, 163, -1, 286, -1, - 90, -1, 15, 140, 170, 141, -1, -1, 100, -1, - 170, 24, 163, -1, 170, 216, -1, 9, 140, 172, - 141, -1, -1, 97, -1, 172, 177, -1, 172, 173, - -1, 172, 175, -1, 172, 193, -1, 172, 286, -1, - 172, 284, -1, 172, 165, -1, 172, 1, -1, 172, - 161, -1, 10, 140, 174, 141, -1, -1, 97, -1, - 174, 177, -1, 174, 175, -1, 174, 193, -1, 174, - 286, -1, 174, 284, -1, 174, 165, -1, 174, 1, - -1, 174, 161, -1, 49, 140, 176, 141, -1, 184, - -1, 133, -1, 176, 161, -1, 176, 165, -1, 176, - 178, -1, 176, 1, -1, 178, -1, 181, 141, -1, - 42, -1, 35, -1, 28, -1, 179, -1, 180, 140, - -1, 180, 140, 128, -1, 181, 167, -1, 181, 169, - -1, 181, 1, -1, 54, 252, 142, 278, -1, 54, - 220, 252, 142, 278, -1, 54, 286, 252, 142, 278, - -1, 54, 220, -1, 54, 286, -1, -1, 183, 184, - -1, 183, 163, -1, 183, 1, -1, 189, -1, 193, - -1, -1, 8, 140, 183, 141, -1, 46, 221, 279, - 184, 185, -1, 50, 140, 183, 141, -1, 140, 183, - 141, -1, 52, 140, 183, 141, -1, 69, 183, 70, - -1, 223, -1, 125, -1, 219, -1, 211, -1, -1, - -1, 59, 191, 140, 192, 141, -1, -1, 192, 216, - -1, 202, -1, 194, -1, 188, -1, 187, -1, 163, - -1, 221, -1, 94, 199, 184, -1, 93, 199, 286, - -1, 95, 199, 195, -1, 96, -1, 93, 198, 286, - -1, 95, 198, 195, -1, 96, -1, 196, -1, 197, - -1, 124, 199, -1, -1, 142, 221, -1, 200, -1, - 15, 221, 201, 190, 184, -1, 61, 221, 201, 190, - 184, -1, 55, 254, 184, -1, 186, -1, 56, 245, - 245, 184, -1, 203, 194, -1, 204, 190, 194, -1, - 205, -1, 209, -1, 37, -1, 20, -1, 22, -1, - 12, -1, 29, -1, 21, -1, 23, -1, 13, -1, - 30, -1, 44, 249, 184, -1, 44, 193, -1, -1, - 4, 207, 194, -1, -1, 206, 4, 208, 194, -1, - 194, 206, -1, -1, 31, 221, 210, 184, -1, 11, - 134, 142, 134, -1, 163, -1, 212, 163, -1, 212, - -1, 134, 142, 222, -1, 58, 221, -1, 41, 221, - 213, 142, 163, -1, 48, 221, 163, -1, 14, -1, - 45, -1, 6, -1, 17, -1, 18, -1, 7, -1, - 57, -1, 19, -1, 36, -1, 214, -1, 215, 134, - -1, 221, -1, 221, 143, 221, -1, 41, 217, 213, - 142, 222, -1, 48, 217, 163, -1, 51, 217, 142, - 222, -1, 58, 217, -1, 218, -1, 40, 218, -1, - 134, -1, 135, -1, 220, 138, 220, -1, 134, -1, - 105, -1, 135, -1, 220, -1, 105, -1, 277, -1, - 163, -1, 286, -1, 90, -1, 266, 233, -1, 89, - 251, 233, -1, 231, -1, 224, -1, 225, 251, 233, - -1, 67, 226, 68, -1, -1, 226, 227, -1, 244, - 280, 281, 239, 233, -1, 101, 233, -1, 229, -1, - 124, -1, 228, 94, 198, 227, -1, 228, 198, -1, - 228, 94, 198, 234, -1, 228, 198, -1, 232, -1, - 53, 250, -1, 76, -1, 78, -1, 71, -1, 144, - -1, 43, 250, -1, 60, 254, -1, 32, 222, -1, - 81, -1, 32, 16, -1, 182, -1, 27, 16, -1, - 27, 126, 131, -1, -1, 233, 234, -1, 237, -1, - 137, 230, -1, 86, -1, 82, -1, 248, 238, -1, - 248, 237, -1, 235, -1, 91, -1, 145, -1, 146, - -1, 147, -1, 148, -1, 149, -1, 75, -1, 77, - -1, 74, -1, 72, -1, 79, -1, 236, -1, 103, - -1, 256, -1, 246, -1, 247, -1, -1, 142, -1, - 142, 241, -1, 142, 240, -1, 150, -1, 240, 150, - -1, 151, -1, 241, 151, -1, 126, -1, 126, 240, - -1, 126, 241, -1, 136, -1, 136, 240, -1, 136, - 241, -1, 242, -1, 244, -1, 243, -1, 286, -1, - 220, -1, 90, -1, 152, -1, 138, -1, 137, -1, - 144, -1, 68, -1, 143, -1, 153, -1, 153, -1, - 152, -1, 137, -1, 242, -1, 253, -1, -1, 253, - -1, 278, 255, -1, 102, 255, -1, 252, -1, 253, - 154, 278, -1, 253, 154, 104, -1, 104, -1, 92, - 155, 92, -1, -1, 255, 143, -1, 156, -1, 156, - 278, -1, 90, -1, 92, -1, 134, -1, 286, -1, - 137, -1, 138, -1, 157, -1, 85, -1, 257, -1, - 259, 146, -1, 259, 258, -1, 259, 260, -1, 80, - -1, 75, -1, 155, -1, 71, -1, 259, -1, 145, - 259, -1, -1, 262, 261, -1, 84, 262, 83, -1, - -1, 47, -1, 244, 280, 281, 239, 251, 264, -1, - 101, 251, -1, 130, 251, -1, 267, 251, -1, 265, - -1, 268, -1, 263, 251, -1, 282, -1, 105, -1, - 243, 251, -1, 243, 251, 270, 269, -1, -1, 269, - 271, -1, 64, -1, 63, -1, 66, 243, -1, 62, - 243, -1, 270, -1, 272, -1, 99, -1, 273, -1, - 272, 143, 273, -1, 278, -1, 278, 138, -1, 278, - 65, -1, 274, 138, 275, -1, 274, 137, 275, -1, - 275, -1, 276, -1, 276, 154, 276, -1, 276, 155, - 276, -1, 137, 276, -1, 277, -1, 92, -1, 129, - -1, 127, -1, 129, 127, -1, 92, 127, -1, 92, - -1, 90, -1, 278, -1, 127, -1, -1, 280, 157, - -1, -1, 281, 158, -1, 106, -1, -1, 88, 283, - 288, -1, -1, 34, 285, 289, -1, 123, -1, -1, - 33, 287, 288, -1, 289, -1, 295, 296, -1, 296, - -1, 290, -1, 291, -1, 293, -1, 295, 291, -1, - 140, 292, 141, -1, -1, 292, 298, -1, 292, 289, - -1, 118, -1, 119, 289, -1, 120, 163, -1, 121, - 163, 289, -1, 122, 163, 163, 289, -1, 109, -1, - 112, 163, -1, 114, 163, 163, -1, 294, -1, 295, - 294, -1, 134, -1, 123, -1, 106, -1, 135, -1, - -1, 49, 297, 140, 176, 141, -1, 111, 163, -1, - 117, 163, 163, 163, -1, 113, 163, 163, -1, 116, - 163, 298, 298, -1, 115, 163, 163, 298, 298, -1, - 107, -1, 108, 289, -1, 110, 298, 298, -1, 295, - 296, -1, 296, -1 + 149, 0, -1, -1, 149, 150, -1, 149, 155, -1, + 149, 1, -1, 149, 26, -1, 153, -1, 159, -1, + 161, -1, 163, -1, 182, -1, 278, -1, 276, -1, + 166, -1, 121, -1, 120, -1, -1, 152, 155, -1, + 25, 129, 152, 130, -1, 123, -1, 107, -1, 154, + 131, 156, -1, 154, 204, 131, 156, -1, 151, -1, + 163, -1, 159, -1, 161, -1, 166, -1, 157, -1, + 172, -1, 225, -1, 266, -1, 211, -1, 151, -1, + 278, -1, 276, -1, 89, -1, 178, -1, 15, 129, + 158, 130, -1, -1, 101, -1, 158, 24, 151, -1, + 158, 207, -1, 158, 178, -1, 9, 129, 160, 130, + -1, -1, 97, -1, 160, 165, -1, 160, 161, -1, + 160, 163, -1, 160, 182, -1, 160, 278, -1, 160, + 276, -1, 160, 153, -1, 160, 1, -1, 10, 129, + 162, 130, -1, -1, 97, -1, 162, 165, -1, 162, + 163, -1, 162, 182, -1, 162, 278, -1, 162, 276, + -1, 162, 153, -1, 162, 1, -1, 48, 129, 164, + 130, -1, 172, -1, 122, -1, 164, 153, -1, 164, + 166, -1, 164, 1, -1, 166, -1, 169, 130, -1, + 41, -1, 35, -1, 28, -1, 167, -1, 168, 129, + -1, 168, 129, 117, -1, 169, 155, -1, 169, 157, + -1, 169, 1, -1, 53, 243, 131, 265, -1, 53, + 213, 243, 131, 265, -1, 53, 213, -1, -1, 171, + 172, -1, 171, 151, -1, 171, 1, -1, 177, -1, + 182, -1, -1, 8, 129, 171, 130, -1, 45, 212, + 271, 172, 173, -1, 49, 129, 171, 130, -1, 129, + 171, 130, -1, 51, 129, 171, 130, -1, 68, 171, + 69, -1, 214, -1, 114, -1, 210, -1, 202, -1, + -1, 58, 179, 129, 181, 130, -1, 58, 102, -1, + 102, -1, -1, 178, -1, -1, 181, 207, -1, 181, + 102, -1, 191, -1, 183, -1, 176, -1, 175, -1, + 151, -1, 212, -1, 93, 188, 172, -1, 92, 188, + 278, -1, 92, 188, 212, -1, 94, 188, 184, -1, + 96, -1, 92, 187, 278, -1, 92, 187, 212, -1, + 94, 187, 184, -1, 96, -1, 185, -1, 186, -1, + 113, 188, -1, -1, 131, 212, -1, 189, -1, 15, + 212, 190, 180, 172, -1, 60, 212, 190, 180, 172, + -1, 54, 245, 172, -1, 174, -1, 55, 236, 236, + 172, -1, 192, 183, -1, 193, 180, 183, -1, 194, + -1, 200, -1, 37, -1, 20, -1, 22, -1, 12, + -1, 29, -1, 21, -1, 23, -1, 13, -1, 30, + -1, 43, 240, 172, -1, 43, 182, -1, -1, 4, + 196, 183, -1, -1, 4, 197, 114, -1, -1, 195, + 4, 198, 183, -1, -1, 195, 4, 199, 114, -1, + 183, 195, -1, 114, 195, -1, -1, 31, 212, 201, + 172, -1, 11, 123, 131, 123, -1, 151, -1, 203, + 151, -1, 203, -1, 123, 131, 213, -1, 57, 212, + -1, 40, 212, 204, 131, 213, -1, 47, 212, 151, + -1, 14, -1, 44, -1, 6, -1, 17, -1, 18, + -1, 7, -1, 56, -1, 19, -1, 36, -1, 205, + -1, 206, 123, -1, 206, 151, -1, 212, -1, 212, + 132, 212, -1, 40, 208, 204, 131, 213, -1, 47, + 208, 151, -1, 50, 208, 131, 213, -1, 57, 208, + -1, 209, -1, 39, 209, -1, 123, -1, 124, -1, + 211, 127, 211, -1, 123, -1, 107, -1, 124, -1, + 211, -1, 107, -1, 269, -1, 151, -1, 278, -1, + 89, -1, 257, 224, -1, 100, 242, 224, -1, 88, + 242, 224, -1, 222, -1, 215, -1, 216, 242, 224, + -1, 66, 217, 67, -1, -1, 217, 218, -1, 235, + 272, 273, 230, 224, -1, 103, 224, -1, 220, -1, + 113, -1, 219, 93, 187, 218, -1, 219, 187, -1, + 219, 93, 187, 225, -1, 219, 187, -1, 223, -1, + 52, 241, -1, 75, -1, 77, -1, 70, -1, 133, + -1, 42, 241, -1, 59, 245, -1, 32, 213, -1, + 80, -1, 32, 16, -1, 170, -1, 27, 16, -1, + 27, 115, 120, -1, -1, 224, 225, -1, 228, -1, + 239, 221, -1, 85, -1, 81, -1, 239, 229, -1, + 239, 228, -1, 226, -1, 90, -1, 134, -1, 135, + -1, 136, -1, 137, -1, 138, -1, 74, -1, 76, + -1, 73, -1, 71, -1, 78, -1, 227, -1, 105, + -1, 247, -1, 237, -1, 238, -1, -1, 131, -1, + 131, 232, -1, 131, 231, -1, 139, -1, 231, 139, + -1, 140, -1, 232, 140, -1, 115, -1, 115, 231, + -1, 115, 232, -1, 125, -1, 125, 231, -1, 125, + 232, -1, 233, -1, 235, -1, 234, -1, 278, -1, + 211, -1, 89, -1, 141, -1, 127, -1, 126, -1, + 133, -1, 67, -1, 132, -1, 142, -1, 142, -1, + 141, -1, 126, -1, 233, -1, 244, -1, -1, 244, + -1, 270, 246, -1, 104, 246, -1, 243, -1, 244, + 143, 270, -1, 244, 143, 106, -1, 106, -1, 91, + 144, 91, -1, -1, 246, 132, -1, 145, -1, 145, + 270, -1, 89, -1, 91, -1, 123, -1, 278, -1, + 126, -1, 127, -1, 146, -1, 84, -1, 248, -1, + 250, 135, -1, 250, 249, -1, 250, 251, -1, 79, + -1, 74, -1, 144, -1, 70, -1, 250, -1, 134, + 250, -1, -1, 253, 252, -1, 83, 253, 82, -1, + -1, 46, -1, 235, 272, 273, 230, 242, 255, -1, + 103, 242, -1, 119, 242, -1, 258, 242, -1, 256, + -1, 259, -1, 254, 242, -1, 274, -1, 107, -1, + 234, 242, -1, 234, 242, 261, 260, -1, -1, 260, + 262, -1, 63, -1, 62, -1, 65, 234, -1, 61, + 234, -1, 261, -1, 263, -1, 99, -1, 264, -1, + 263, 132, 264, -1, 270, -1, 270, 127, -1, 270, + 64, -1, 270, -1, 270, 136, 270, -1, 266, 127, + 267, -1, 266, 126, 267, -1, 267, -1, 268, -1, + 268, 143, 268, -1, 268, 144, 268, -1, 126, 268, + -1, 269, -1, 91, -1, 118, -1, 116, -1, 118, + 116, -1, 91, 116, -1, 91, -1, 89, -1, 270, + -1, 116, -1, -1, 272, 146, -1, -1, 273, 147, + -1, 108, -1, -1, 87, 275, 280, -1, 112, -1, + -1, 34, 277, 281, -1, 111, -1, -1, 33, 279, + 280, -1, 281, -1, 289, 290, -1, 290, -1, 112, + -1, 282, -1, 283, -1, 285, -1, 289, 283, -1, + 129, 284, 130, -1, -1, 284, 292, -1, 284, 281, + -1, 110, 287, -1, 95, 287, 281, -1, 94, 287, + 151, -1, 96, -1, 286, -1, 92, 287, 292, -1, + 109, 92, 287, -1, 288, -1, 289, 288, -1, 123, + -1, 111, -1, 108, -1, 124, -1, -1, 48, 291, + 129, 164, 130, -1, 109, 286, -1, 289, 290, -1, + 290, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 452, 452, 453, 455, 457, 460, 467, 471, 474, - 480, 486, 493, 498, 502, 506, 523, 524, 529, 533, - 539, 548, 549, 553, 564, 569, 573, 577, 581, 585, - 588, 600, 603, 606, 609, 612, 615, 621, 628, 632, - 636, 647, 655, 665, 674, 679, 684, 690, 696, 701, - 705, 709, 712, 717, 723, 729, 733, 738, 742, 748, - 753, 757, 761, 764, 768, 774, 780, 790, 795, 798, - 801, 813, 824, 837, 846, 851, 856, 865, 872, 876, - 886, 889, 892, 898, 901, 904, 907, 910, 923, 926, - 936, 939, 956, 957, 961, 964, 971, 978, 981, 987, - 990, 996, 997, 998, 999, 1003, 1004, 1004, 1013, 1014, - 1020, 1021, 1025, 1026, 1030, 1031, 1039, 1045, 1048, 1053, - 1056, 1059, 1064, 1069, 1070, 1074, 1081, 1082, 1089, 1092, - 1095, 1099, 1102, 1103, 1109, 1120, 1128, 1129, 1133, 1139, - 1146, 1151, 1159, 1166, 1172, 1177, 1184, 1192, 1196, 1203, - 1203, 1212, 1212, 1221, 1224, 1224, 1233, 1240, 1243, 1249, - 1255, 1259, 1263, 1268, 1275, 1276, 1278, 1279, 1280, 1282, - 1283, 1284, 1285, 1289, 1290, 1296, 1305, 1312, 1319, 1325, - 1331, 1339, 1342, 1348, 1351, 1354, 1359, 1362, 1365, 1370, - 1373, 1376, 1379, 1382, 1385, 1394, 1403, 1408, 1409, 1414, - 1432, 1439, 1440, 1446, 1472, 1483, 1488, 1501, 1504, 1513, - 1516, 1522, 1525, 1528, 1533, 1538, 1541, 1555, 1561, 1566, - 1574, 1577, 1581, 1584, 1588, 1606, 1609, 1616, 1619, 1622, - 1627, 1632, 1640, 1648, 1652, 1660, 1663, 1666, 1669, 1672, - 1675, 1678, 1681, 1684, 1687, 1693, 1707, 1710, 1718, 1721, - 1732, 1733, 1734, 1735, 1739, 1742, 1748, 1751, 1757, 1760, - 1765, 1777, 1780, 1785, 1794, 1800, 1801, 1805, 1810, 1816, - 1824, 1827, 1830, 1833, 1836, 1839, 1842, 1848, 1849, 1850, - 1855, 1861, 1867, 1871, 1878, 1887, 1896, 1899, 1902, 1910, - 1911, 1917, 1920, 1926, 1929, 1937, 1940, 1943, 1944, 1948, - 1949, 1950, 1954, 1958, 1969, 1973, 1984, 2007, 2010, 2013, - 2016, 2022, 2025, 2032, 2035, 2041, 2048, 2049, 2053, 2079, - 2086, 2099, 2111, 2114, 2119, 2129, 2132, 2138, 2141, 2148, - 2151, 2157, 2160, 2163, 2166, 2172, 2175, 2178, 2184, 2185, - 2191, 2194, 2197, 2209, 2212, 2215, 2219, 2222, 2225, 2231, - 2234, 2239, 2242, 2245, 2248, 2251, 2258, 2261, 2267, 2268, - 2275, 2276, 2280, 2281, 2289, 2293, 2292, 2302, 2301, 2310, - 2314, 2313, 2322, 2325, 2328, 2334, 2337, 2340, 2346, 2353, - 2359, 2360, 2363, 2369, 2372, 2375, 2378, 2381, 2387, 2390, - 2393, 2399, 2402, 2408, 2411, 2414, 2417, 2420, 2420, 2429, - 2432, 2435, 2438, 2441, 2444, 2447, 2450, 2456, 2460 + 0, 456, 456, 457, 459, 461, 464, 471, 474, 480, + 486, 493, 498, 502, 506, 523, 524, 529, 533, 539, + 548, 549, 553, 556, 568, 573, 577, 581, 585, 589, + 592, 604, 607, 610, 613, 616, 619, 622, 625, 631, + 638, 642, 646, 657, 660, 672, 683, 695, 701, 706, + 712, 718, 723, 727, 731, 734, 742, 749, 754, 760, + 764, 770, 775, 779, 783, 786, 793, 799, 809, 814, + 817, 829, 840, 853, 862, 867, 872, 881, 888, 892, + 902, 905, 908, 914, 917, 920, 933, 936, 946, 949, + 966, 967, 971, 974, 981, 988, 991, 997, 1000, 1006, + 1007, 1008, 1009, 1013, 1013, 1018, 1022, 1029, 1032, 1039, + 1042, 1045, 1053, 1054, 1058, 1059, 1063, 1064, 1072, 1078, + 1081, 1084, 1089, 1092, 1095, 1098, 1103, 1108, 1109, 1113, + 1120, 1121, 1128, 1131, 1138, 1146, 1149, 1150, 1156, 1167, + 1179, 1180, 1184, 1190, 1197, 1202, 1210, 1217, 1223, 1228, + 1235, 1243, 1247, 1254, 1254, 1263, 1263, 1269, 1269, 1275, + 1275, 1284, 1287, 1290, 1290, 1299, 1306, 1309, 1315, 1321, + 1325, 1329, 1334, 1341, 1342, 1344, 1345, 1346, 1348, 1349, + 1350, 1351, 1355, 1356, 1359, 1373, 1382, 1389, 1396, 1402, + 1408, 1416, 1419, 1425, 1428, 1431, 1436, 1439, 1442, 1447, + 1450, 1453, 1456, 1459, 1462, 1471, 1480, 1488, 1494, 1499, + 1506, 1524, 1531, 1532, 1538, 1564, 1575, 1580, 1593, 1596, + 1605, 1608, 1614, 1617, 1620, 1625, 1630, 1633, 1647, 1651, + 1656, 1662, 1665, 1669, 1672, 1676, 1694, 1697, 1704, 1707, + 1714, 1719, 1724, 1732, 1740, 1744, 1752, 1755, 1758, 1761, + 1764, 1767, 1770, 1773, 1776, 1779, 1785, 1799, 1802, 1810, + 1813, 1824, 1825, 1826, 1827, 1831, 1834, 1840, 1843, 1849, + 1852, 1857, 1869, 1872, 1877, 1886, 1892, 1893, 1897, 1902, + 1908, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1940, 1941, + 1942, 1947, 1953, 1959, 1963, 1970, 1979, 1989, 1992, 1995, + 2003, 2004, 2010, 2013, 2019, 2022, 2030, 2033, 2036, 2037, + 2041, 2042, 2043, 2047, 2051, 2062, 2066, 2077, 2100, 2103, + 2106, 2109, 2115, 2118, 2125, 2128, 2134, 2141, 2142, 2146, + 2172, 2179, 2192, 2204, 2207, 2212, 2222, 2225, 2231, 2234, + 2241, 2244, 2250, 2253, 2256, 2259, 2265, 2268, 2271, 2277, + 2278, 2284, 2287, 2290, 2296, 2299, 2311, 2314, 2317, 2321, + 2324, 2327, 2333, 2336, 2341, 2344, 2347, 2350, 2353, 2360, + 2363, 2369, 2370, 2376, 2377, 2381, 2382, 2390, 2394, 2393, + 2402, 2406, 2405, 2414, 2418, 2417, 2426, 2429, 2432, 2438, + 2441, 2444, 2447, 2453, 2460, 2466, 2467, 2470, 2476, 2482, + 2485, 2488, 2494, 2495, 2501, 2507, 2510, 2516, 2519, 2522, + 2525, 2528, 2528, 2537, 2543, 2547 }; #endif @@ -1004,53 +985,48 @@ static const char *const yytname[] = "\"\\\\key\"", "\"\\\\layout\"", "\"\\\\lyricmode\"", "\"\\\\lyrics\"", "\"\\\\lyricsto\"", "\"\\\\mark\"", "\"\\\\markup\"", "\"\\\\markuplines\"", "\"\\\\midi\"", "\"\\\\name\"", - "\"\\\\notemode\"", "\"\\\\objectid\"", "\"\\\\octave\"", "\"\\\\once\"", - "\"\\\\override\"", "\"\\\\paper\"", "\"\\\\partial\"", - "\"\\\\relative\"", "\"\\\\remove\"", "\"\\\\repeat\"", "\"\\\\rest\"", - "\"\\\\revert\"", "\"\\\\score\"", "\"\\\\sequential\"", "\"\\\\set\"", - "\"\\\\simultaneous\"", "\"\\\\skip\"", "\"\\\\tempo\"", "\"\\\\times\"", - "\"\\\\transpose\"", "\"\\\\type\"", "\"\\\\unset\"", "\"\\\\with\"", - "\"\\\\time\"", "\"\\\\new\"", "\"/+\"", "\"^\"", "\":\"", "\"-\"", - "\"/\"", "\"<\"", "\">\"", "\"<<\"", "\">>\"", "\"\\\\\"", "\"\\\\>\"", + "\"\\\\notemode\"", "\"\\\\octave\"", "\"\\\\once\"", "\"\\\\override\"", + "\"\\\\paper\"", "\"\\\\partial\"", "\"\\\\relative\"", "\"\\\\remove\"", + "\"\\\\repeat\"", "\"\\\\rest\"", "\"\\\\revert\"", "\"\\\\score\"", + "\"\\\\sequential\"", "\"\\\\set\"", "\"\\\\simultaneous\"", + "\"\\\\skip\"", "\"\\\\tempo\"", "\"\\\\times\"", "\"\\\\transpose\"", + "\"\\\\type\"", "\"\\\\unset\"", "\"\\\\with\"", "\"\\\\time\"", + "\"\\\\new\"", "\"/+\"", "\"^\"", "\":\"", "\"-\"", "\"/\"", "\"<\"", + "\">\"", "\"<<\"", "\">>\"", "\"\\\\\"", "\"\\\\>\"", "\"\\\\C[haracter]\"", "\"\\\\)\"", "\"\\\\!\"", "\"\\\\[\"", "\"\\\\(\"", "\"\\\\]\"", "\"\\\\<\"", "\"\\\\+\"", "\"\\\\~\"", "\"__\"", "FIGURE_CLOSE", "FIGURE_OPEN", "\"_\"", "\"--\"", "CHORDMODIFIERS", "LYRIC_MARKUP", "MULTI_MEASURE_REST", "DIGIT", "E_UNSIGNED", "UNSIGNED", "EXPECT_MARKUP", "EXPECT_MUSIC", "EXPECT_SCM", - "EXPECT_NO_MORE_ARGS", "BOOK_IDENTIFIER", "CHORDMODIFIER_PITCH", - "CHORD_MODIFIER", "CONTEXT_DEF_IDENTIFIER", "DRUM_PITCH", + "EXPECT_MARKUP_LIST", "EXPECT_NO_MORE_ARGS", "BOOK_IDENTIFIER", + "CHORDMODIFIER_PITCH", "CHORD_MODIFIER", "CHORD_REPETITION", + "CONTEXT_DEF_IDENTIFIER", "CONTEXT_MOD_IDENTIFIER", "DRUM_PITCH", "DURATION_IDENTIFIER", "EVENT_IDENTIFIER", "FRACTION", "LYRICS_STRING", - "LYRIC_MARKUP_IDENTIFIER", "MARKUP_HEAD_EMPTY", "MARKUP_HEAD_LIST0", - "MARKUP_HEAD_MARKUP0", "MARKUP_HEAD_MARKUP0_MARKUP1", "MARKUP_HEAD_SCM0", - "MARKUP_HEAD_SCM0_MARKUP1", "MARKUP_HEAD_SCM0_SCM1", - "MARKUP_HEAD_SCM0_SCM1_MARKUP2", "MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3", - "MARKUP_HEAD_SCM0_MARKUP1_MARKUP2", "MARKUP_HEAD_SCM0_SCM1_SCM2", - "MARKUP_LIST_HEAD_EMPTY", "MARKUP_LIST_HEAD_LIST0", - "MARKUP_LIST_HEAD_SCM0", "MARKUP_LIST_HEAD_SCM0_LIST1", - "MARKUP_LIST_HEAD_SCM0_SCM1_LIST2", "MARKUP_IDENTIFIER", - "MUSIC_FUNCTION", "MUSIC_IDENTIFIER", "NOTENAME_PITCH", - "NUMBER_IDENTIFIER", "OUTPUT_DEF_IDENTIFIER", "REAL", "RESTNAME", - "SCM_IDENTIFIER", "SCM_TOKEN", "SCORE_IDENTIFIER", "STRING", - "STRING_IDENTIFIER", "TONICNAME_PITCH", "'-'", "'+'", "UNARY_MINUS", - "'{'", "'}'", "'='", "'.'", "'|'", "'['", "']'", "'~'", "'('", "')'", - "'''", "','", "'^'", "'_'", "'*'", "'/'", "':'", "'!'", "'?'", "$accept", - "lilypond", "object_id_setting", "toplevel_expression", "embedded_scm", - "lilypond_header_body", "lilypond_header", "assignment_id", "assignment", - "identifier_init", "context_def_spec_block", "context_def_spec_body", - "book_block", "book_body", "bookpart_block", "bookpart_body", - "score_block", "score_body", "paper_block", "output_def", - "output_def_head", "output_def_head_with_mode_switch", "output_def_body", - "tempo_event", "music_list", "music", "alternative_music", - "repeated_music", "sequential_music", "simultaneous_music", - "simple_music", "optional_context_mod", "@1", "context_mod_list", + "LYRIC_MARKUP_IDENTIFIER", "MARKUP_FUNCTION", "MARKUP_LIST_FUNCTION", + "MARKUP_IDENTIFIER", "MARKUPLINES_IDENTIFIER", "MUSIC_FUNCTION", + "MUSIC_IDENTIFIER", "NOTENAME_PITCH", "NUMBER_IDENTIFIER", + "OUTPUT_DEF_IDENTIFIER", "REAL", "RESTNAME", "SCM_IDENTIFIER", + "SCM_TOKEN", "SCORE_IDENTIFIER", "STRING", "STRING_IDENTIFIER", + "TONICNAME_PITCH", "'-'", "'+'", "UNARY_MINUS", "'{'", "'}'", "'='", + "'.'", "'|'", "'['", "']'", "'~'", "'('", "')'", "'''", "','", "'^'", + "'_'", "'*'", "'/'", "':'", "'!'", "'?'", "$accept", "lilypond", + "toplevel_expression", "embedded_scm", "lilypond_header_body", + "lilypond_header", "assignment_id", "assignment", "identifier_init", + "context_def_spec_block", "context_def_spec_body", "book_block", + "book_body", "bookpart_block", "bookpart_body", "score_block", + "score_body", "paper_block", "output_def", "output_def_head", + "output_def_head_with_mode_switch", "output_def_body", "tempo_event", + "music_list", "music", "alternative_music", "repeated_music", + "sequential_music", "simultaneous_music", "simple_music", + "context_modification", "@1", "optional_context_mod", "context_mod_list", "composite_music", "grouped_music_list", "function_scm_argument", "function_arglist_music_last", "function_arglist_nonmusic_last", "function_arglist_nonmusic", "function_arglist", "generic_prefix_music_scm", "optional_id", "prefix_composite_music", "mode_changing_head", "mode_changing_head_with_context", - "relative_music", "new_lyrics", "@2", "@3", "re_rhythmed_music", "@4", - "context_change", "property_path_revved", "property_path", - "property_operation", "context_def_mod", "context_mod", + "relative_music", "new_lyrics", "@2", "@3", "@4", "@5", + "re_rhythmed_music", "@6", "context_change", "property_path_revved", + "property_path", "property_operation", "context_def_mod", "context_mod", "context_prop_spec", "simple_music_property_def", "music_property_def", "string", "simple_string", "scalar", "event_chord", "note_chord_element", "chord_body", "chord_body_elements", "chord_body_element", @@ -1067,13 +1043,14 @@ static const char *const yytname[] = "br_bass_figure", "figure_list", "figure_spec", "optional_rest", "simple_element", "simple_chord_elements", "lyric_element", "new_chord", "chord_items", "chord_separator", "chord_item", "step_numbers", - "step_number", "number_expression", "number_term", "number_factor", - "bare_number", "bare_unsigned", "unsigned_number", "exclamations", - "questions", "lyric_markup", "@5", "full_markup_list", "@6", - "full_markup", "@7", "markup_top", "markup_list", "markup_composed_list", - "markup_braced_list", "markup_braced_list_body", "markup_command_list", - "markup_head_1_item", "markup_head_1_list", "simple_markup", "@8", - "markup", 0 + "step_number", "tempo_range", "number_expression", "number_term", + "number_factor", "bare_number", "bare_unsigned", "unsigned_number", + "exclamations", "questions", "lyric_markup", "@7", "full_markup_list", + "@8", "full_markup", "@9", "markup_top", "markup_list", + "markup_composed_list", "markup_braced_list", "markup_braced_list_body", + "markup_command_list", "markup_command_basic_arguments", + "markup_command_list_arguments", "markup_head_1_item", + "markup_head_1_list", "simple_markup", "@10", "markup", 0 }; #endif @@ -1094,103 +1071,104 @@ static const yytype_uint16 yytoknum[] = 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 45, 43, 392, - 123, 125, 61, 46, 124, 91, 93, 126, 40, 41, - 39, 44, 94, 95, 42, 47, 58, 33, 63 + 375, 376, 377, 378, 379, 380, 45, 43, 381, 123, + 125, 61, 46, 124, 91, 93, 126, 40, 41, 39, + 44, 94, 95, 42, 47, 58, 33, 63 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 159, 160, 160, 160, 160, 160, 161, 162, 162, - 162, 162, 162, 162, 162, 162, 163, 163, 164, 164, - 165, 166, 166, 167, 167, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 169, 170, 170, - 170, 170, 171, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 173, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 175, 176, 176, 176, 176, - 176, 176, 177, 178, 179, 179, 179, 180, 181, 181, - 181, 181, 181, 182, 182, 182, 182, 182, 183, 183, - 183, 183, 184, 184, 185, 185, 186, 187, 187, 188, - 188, 189, 189, 189, 189, 190, 191, 190, 192, 192, - 193, 193, 194, 194, 195, 195, 196, 197, 197, 198, - 198, 198, 199, 199, 199, 200, 201, 201, 202, 202, - 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, - 203, 203, 203, 204, 204, 204, 204, 205, 205, 207, - 206, 208, 206, 209, 210, 209, 211, 212, 212, 213, - 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 216, 216, 217, 217, 218, 218, 218, - 218, 219, 219, 220, 220, 220, 221, 221, 221, 222, - 222, 222, 222, 222, 222, 223, 223, 223, 223, 224, - 225, 226, 226, 227, 227, 227, 228, 229, 229, 230, - 230, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 232, 232, 232, 232, 232, 233, 233, 234, 234, 234, - 234, 234, 234, 234, 235, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 237, 237, 237, 238, 238, - 239, 239, 239, 239, 240, 240, 241, 241, 242, 242, - 242, 243, 243, 243, 244, 245, 245, 246, 246, 246, - 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, - 249, 250, 251, 251, 252, 252, 253, 253, 253, 254, - 254, 255, 255, 256, 256, 257, 257, 257, 257, 258, - 258, 258, 259, 259, 259, 259, 259, 260, 260, 260, - 260, 261, 261, 262, 262, 263, 264, 264, 265, 265, - 265, 265, 266, 266, 266, 267, 267, 268, 268, 269, - 269, 270, 270, 270, 270, 271, 271, 271, 272, 272, - 273, 273, 273, 274, 274, 274, 275, 275, 275, 276, - 276, 277, 277, 277, 277, 277, 278, 278, 279, 279, - 280, 280, 281, 281, 282, 283, 282, 285, 284, 286, - 287, 286, 288, 288, 288, 289, 289, 289, 290, 291, - 292, 292, 292, 293, 293, 293, 293, 293, 294, 294, - 294, 295, 295, 296, 296, 296, 296, 297, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 298, 298 + 0, 148, 149, 149, 149, 149, 149, 150, 150, 150, + 150, 150, 150, 150, 150, 151, 151, 152, 152, 153, + 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, + 158, 158, 158, 158, 158, 159, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 161, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 163, 164, 164, 164, + 164, 164, 165, 166, 167, 167, 167, 168, 169, 169, + 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, + 172, 172, 173, 173, 174, 175, 175, 176, 176, 177, + 177, 177, 177, 179, 178, 178, 178, 180, 180, 181, + 181, 181, 182, 182, 183, 183, 184, 184, 185, 186, + 186, 186, 187, 187, 187, 187, 188, 188, 188, 189, + 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 192, 192, 192, 192, 192, 193, 193, 193, + 193, 194, 194, 196, 195, 197, 195, 198, 195, 199, + 195, 200, 200, 201, 200, 202, 203, 203, 204, 205, + 205, 205, 205, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 207, 207, 207, 208, 208, 209, 209, 209, + 209, 210, 210, 211, 211, 211, 212, 212, 212, 213, + 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, + 215, 216, 217, 217, 218, 218, 218, 219, 220, 220, + 221, 221, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 223, 223, 223, 223, 223, 224, 224, 225, 225, + 225, 225, 225, 225, 225, 226, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 228, 228, 228, 229, + 229, 230, 230, 230, 230, 231, 231, 232, 232, 233, + 233, 233, 234, 234, 234, 235, 236, 236, 237, 237, + 237, 238, 238, 238, 238, 238, 238, 238, 239, 239, + 239, 240, 241, 242, 242, 243, 243, 244, 244, 244, + 245, 245, 246, 246, 247, 247, 248, 248, 248, 248, + 249, 249, 249, 250, 250, 250, 250, 250, 251, 251, + 251, 251, 252, 252, 253, 253, 254, 255, 255, 256, + 256, 256, 256, 257, 257, 257, 258, 258, 259, 259, + 260, 260, 261, 261, 261, 261, 262, 262, 262, 263, + 263, 264, 264, 264, 265, 265, 266, 266, 266, 267, + 267, 267, 268, 268, 269, 269, 269, 269, 269, 270, + 270, 271, 271, 272, 272, 273, 273, 274, 275, 274, + 276, 277, 276, 278, 279, 278, 280, 280, 280, 281, + 281, 281, 281, 282, 283, 284, 284, 284, 285, 286, + 286, 286, 287, 287, 288, 289, 289, 290, 290, 290, + 290, 291, 290, 290, 292, 292 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { - 0, 2, 0, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, - 4, 1, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 4, 0, 1, - 3, 2, 4, 0, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 4, 0, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 4, 1, 1, 2, 2, + 0, 2, 0, 2, 2, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 2, 4, + 1, 1, 3, 4, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, + 0, 1, 3, 2, 2, 4, 0, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 4, 0, 1, 2, + 2, 2, 2, 2, 2, 2, 4, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 2, 3, - 2, 2, 2, 4, 5, 5, 2, 2, 0, 2, - 2, 2, 1, 1, 0, 4, 5, 4, 3, 4, - 3, 1, 1, 1, 1, 0, 0, 5, 0, 2, - 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, - 3, 3, 1, 1, 1, 2, 0, 2, 1, 5, - 5, 3, 1, 4, 2, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 2, 0, - 3, 0, 4, 2, 0, 4, 4, 1, 2, 1, - 3, 2, 5, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 3, 5, 3, 4, + 2, 2, 2, 4, 5, 2, 0, 2, 2, 2, + 1, 1, 0, 4, 5, 4, 3, 4, 3, 1, + 1, 1, 1, 0, 5, 2, 1, 0, 1, 0, + 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, + 3, 3, 1, 3, 3, 3, 1, 1, 1, 2, + 0, 2, 1, 5, 5, 3, 1, 4, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 2, 0, 3, 0, 3, 0, 4, 0, + 4, 2, 2, 0, 4, 4, 1, 2, 1, 3, + 2, 5, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 1, 3, 5, 3, 4, 2, 1, 2, 1, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 3, 1, 1, 3, - 3, 0, 2, 5, 2, 1, 1, 4, 2, 4, - 2, 1, 2, 1, 1, 1, 1, 2, 2, 2, - 1, 2, 1, 2, 3, 0, 2, 1, 2, 1, - 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 3, 3, 1, 1, + 3, 3, 0, 2, 5, 2, 1, 1, 4, 2, + 4, 2, 1, 2, 1, 1, 1, 1, 2, 2, + 2, 1, 2, 1, 2, 3, 0, 2, 1, 2, + 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 1, 2, 2, 1, 2, 1, 2, 1, 2, - 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 2, 2, 1, 2, 1, 2, 1, + 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 2, 2, 1, 3, 3, 1, - 3, 0, 2, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, - 1, 1, 2, 0, 2, 3, 0, 1, 6, 2, - 2, 2, 1, 1, 2, 1, 1, 2, 4, 0, - 2, 1, 1, 2, 2, 1, 1, 1, 1, 3, - 1, 2, 2, 3, 3, 1, 1, 3, 3, 2, - 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, - 0, 2, 0, 2, 1, 0, 3, 0, 3, 1, - 0, 3, 1, 2, 1, 1, 1, 1, 2, 3, - 0, 2, 2, 1, 2, 2, 3, 4, 1, 2, - 3, 1, 2, 1, 1, 1, 1, 0, 5, 2, - 4, 3, 4, 5, 1, 2, 3, 2, 1 + 1, 1, 1, 0, 1, 2, 2, 1, 3, 3, + 1, 3, 0, 2, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, + 1, 1, 1, 2, 0, 2, 3, 0, 1, 6, + 2, 2, 2, 1, 1, 2, 1, 1, 2, 4, + 0, 2, 1, 1, 2, 2, 1, 1, 1, 1, + 3, 1, 2, 2, 1, 3, 3, 3, 1, 1, + 3, 3, 2, 1, 1, 1, 1, 2, 2, 1, + 1, 1, 1, 0, 2, 0, 2, 1, 0, 3, + 1, 0, 3, 1, 0, 3, 1, 2, 1, 1, + 1, 1, 1, 2, 3, 0, 2, 2, 2, 3, + 3, 1, 1, 3, 3, 1, 2, 1, 1, 1, + 1, 0, 5, 2, 2, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1198,663 +1176,633 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 5, 0, 0, 141, 145, 0, 139, - 143, 140, 144, 0, 6, 76, 142, 146, 0, 370, - 367, 75, 138, 74, 0, 0, 0, 0, 0, 0, - 0, 0, 88, 22, 369, 0, 17, 16, 21, 88, - 3, 24, 8, 0, 4, 9, 10, 11, 15, 77, - 0, 0, 132, 113, 112, 12, 111, 128, 110, 0, - 105, 136, 137, 14, 13, 43, 55, 187, 186, 188, - 126, 18, 154, 0, 0, 258, 148, 280, 0, 0, - 0, 88, 88, 0, 289, 0, 261, 264, 266, 265, - 0, 126, 0, 0, 0, 0, 122, 123, 124, 125, - 0, 0, 78, 82, 0, 73, 80, 81, 149, 153, - 134, 106, 0, 44, 0, 56, 0, 0, 105, 0, - 0, 397, 395, 404, 0, 388, 0, 0, 0, 0, - 0, 0, 0, 0, 383, 0, 0, 0, 0, 394, - 393, 396, 380, 371, 372, 375, 376, 377, 391, 0, - 374, 368, 0, 254, 256, 259, 260, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, - 215, 213, 214, 220, 313, 365, 282, 282, 326, 364, - 102, 282, 216, 222, 147, 92, 93, 104, 181, 103, - 101, 198, 282, 197, 211, 282, 360, 282, 322, 225, - 282, 323, 325, 357, 356, 359, 358, 0, 67, 0, - 66, 0, 0, 0, 131, 262, 263, 0, 105, 91, - 100, 90, 89, 0, 0, 0, 98, 0, 243, 242, - 240, 241, 244, 230, 229, 36, 234, 351, 246, 353, - 352, 183, 184, 279, 235, 236, 237, 238, 239, 278, - 277, 293, 34, 23, 29, 26, 27, 25, 28, 30, - 33, 31, 233, 245, 227, 0, 247, 32, 345, 346, - 350, 35, 79, 38, 0, 151, 0, 135, 52, 0, - 42, 53, 51, 46, 47, 45, 72, 48, 50, 49, - 63, 54, 64, 62, 58, 57, 59, 61, 60, 127, - 0, 20, 19, 155, 0, 405, 0, 408, 0, 399, - 389, 0, 0, 0, 0, 0, 384, 385, 0, 0, - 0, 378, 392, 373, 255, 257, 0, 223, 0, 221, - 194, 190, 192, 189, 219, 191, 193, 182, 0, 175, - 291, 217, 286, 281, 291, 0, 0, 212, 86, 0, - 87, 180, 218, 0, 0, 0, 225, 283, 319, 320, - 225, 327, 362, 324, 195, 321, 94, 71, 65, 68, - 69, 70, 97, 99, 290, 133, 0, 117, 116, 114, - 118, 115, 355, 354, 206, 0, 0, 228, 349, 294, - 0, 274, 269, 272, 271, 275, 273, 270, 276, 268, - 232, 231, 248, 249, 267, 0, 0, 0, 0, 39, - 0, 150, 0, 108, 7, 129, 0, 407, 406, 401, - 390, 0, 0, 0, 386, 0, 379, 382, 0, 381, - 0, 224, 157, 159, 0, 0, 285, 0, 284, 178, - 0, 0, 0, 0, 200, 225, 202, 0, 205, 360, - 315, 302, 295, 296, 297, 0, 303, 311, 314, 298, - 366, 196, 199, 0, 332, 331, 0, 329, 361, 250, - 279, 226, 0, 96, 130, 0, 0, 0, 119, 210, - 185, 344, 343, 347, 348, 166, 169, 164, 167, 168, - 171, 0, 172, 0, 165, 0, 170, 0, 0, 37, - 173, 0, 41, 152, 0, 0, 0, 402, 400, 387, - 156, 158, 0, 176, 292, 288, 287, 179, 0, 83, - 0, 204, 0, 208, 362, 312, 310, 308, 307, 299, - 300, 304, 309, 301, 305, 306, 334, 333, 328, 251, - 363, 282, 88, 0, 0, 0, 40, 0, 0, 161, - 0, 174, 107, 109, 398, 403, 177, 84, 85, 0, - 250, 337, 335, 330, 336, 338, 340, 253, 252, 316, - 0, 120, 209, 121, 0, 163, 160, 207, 225, 0, - 342, 341, 317, 318, 95, 0, 203, 339, 162 + 2, 0, 1, 5, 0, 0, 145, 149, 0, 143, + 147, 144, 148, 0, 6, 76, 146, 150, 0, 384, + 381, 75, 142, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 86, 21, 383, 380, 0, 0, 16, 15, + 20, 86, 3, 24, 7, 0, 4, 8, 9, 10, + 14, 77, 0, 0, 136, 115, 114, 11, 113, 132, + 112, 0, 107, 140, 141, 13, 12, 46, 57, 197, + 196, 198, 130, 17, 163, 0, 0, 269, 152, 291, + 0, 0, 0, 86, 86, 0, 300, 0, 272, 275, + 277, 276, 0, 130, 0, 0, 0, 0, 126, 127, + 128, 129, 153, 162, 0, 0, 166, 168, 0, 78, + 82, 0, 73, 80, 81, 161, 138, 103, 106, 108, + 0, 47, 0, 58, 0, 0, 107, 0, 0, 411, + 409, 0, 0, 408, 389, 407, 410, 395, 385, 386, + 390, 391, 392, 405, 0, 388, 0, 382, 0, 265, + 267, 270, 271, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 212, 226, 224, 225, 231, + 324, 378, 293, 293, 293, 337, 377, 100, 293, 227, + 233, 151, 90, 91, 102, 191, 101, 99, 209, 293, + 208, 222, 293, 373, 293, 333, 236, 293, 334, 336, + 370, 369, 372, 371, 0, 68, 0, 67, 0, 0, + 0, 135, 273, 274, 0, 107, 89, 98, 88, 87, + 0, 0, 0, 0, 0, 157, 96, 0, 254, 253, + 251, 252, 255, 241, 240, 37, 245, 364, 257, 366, + 365, 193, 194, 290, 246, 247, 248, 249, 250, 289, + 288, 304, 34, 22, 29, 26, 27, 25, 28, 30, + 38, 33, 31, 244, 256, 238, 0, 258, 32, 358, + 359, 363, 36, 35, 167, 0, 79, 40, 105, 0, + 139, 55, 45, 54, 49, 50, 48, 72, 51, 53, + 52, 65, 56, 64, 60, 59, 61, 63, 62, 131, + 0, 19, 18, 164, 0, 0, 0, 0, 401, 413, + 0, 402, 398, 0, 393, 406, 387, 266, 268, 0, + 234, 0, 232, 204, 200, 202, 199, 230, 201, 203, + 192, 0, 185, 302, 228, 297, 292, 302, 0, 0, + 223, 204, 364, 85, 0, 190, 229, 0, 0, 0, + 236, 294, 236, 330, 331, 236, 338, 375, 335, 205, + 332, 92, 71, 66, 69, 70, 95, 97, 301, 137, + 0, 120, 119, 118, 116, 121, 117, 154, 156, 0, + 0, 368, 367, 0, 362, 305, 0, 285, 280, 217, + 283, 282, 286, 284, 281, 287, 279, 0, 239, 243, + 242, 259, 260, 278, 0, 0, 0, 0, 23, 41, + 0, 109, 133, 0, 404, 0, 0, 0, 394, 397, + 0, 415, 396, 0, 235, 0, 0, 296, 0, 295, + 188, 0, 0, 0, 211, 236, 213, 0, 216, 373, + 326, 313, 306, 307, 308, 0, 314, 322, 325, 309, + 379, 207, 206, 210, 0, 343, 342, 0, 340, 374, + 261, 290, 237, 0, 94, 134, 158, 160, 195, 0, + 0, 0, 122, 221, 357, 356, 360, 361, 175, 178, + 173, 176, 177, 180, 0, 181, 0, 174, 0, 179, + 0, 0, 39, 44, 182, 0, 43, 0, 0, 400, + 399, 0, 403, 414, 165, 0, 186, 303, 299, 298, + 189, 0, 83, 354, 215, 0, 219, 375, 323, 321, + 319, 318, 310, 311, 315, 320, 312, 316, 317, 345, + 344, 339, 262, 376, 293, 86, 0, 0, 0, 42, + 0, 0, 170, 0, 183, 184, 111, 104, 110, 412, + 187, 84, 0, 0, 261, 348, 346, 341, 347, 349, + 351, 264, 263, 327, 0, 124, 123, 220, 125, 0, + 172, 169, 355, 218, 236, 0, 353, 352, 328, 329, + 93, 0, 214, 350, 171 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 369, 40, 221, 119, 370, 43, 44, 253, - 107, 410, 45, 114, 46, 116, 47, 209, 285, 286, - 49, 50, 51, 183, 92, 222, 473, 52, 53, 54, - 185, 112, 276, 504, 186, 56, 380, 97, 98, 479, - 99, 57, 118, 58, 59, 60, 61, 109, 274, 412, - 62, 120, 187, 433, 434, 500, 501, 502, 338, 188, - 189, 333, 339, 334, 190, 191, 192, 353, 446, 386, - 448, 387, 193, 194, 364, 471, 262, 263, 264, 401, - 541, 155, 156, 87, 195, 196, 90, 402, 403, 265, - 78, 341, 356, 342, 357, 85, 436, 266, 456, 534, - 457, 535, 458, 354, 197, 583, 198, 199, 200, 201, - 538, 467, 563, 564, 565, 267, 268, 269, 270, 344, - 207, 362, 469, 202, 355, 63, 74, 336, 73, 143, - 144, 145, 146, 320, 147, 148, 306, 307, 304, 308 + -1, 1, 42, 325, 127, 364, 45, 46, 253, 254, + 410, 255, 122, 256, 124, 257, 206, 286, 258, 51, + 52, 53, 180, 94, 219, 464, 54, 55, 56, 182, + 119, 279, 120, 497, 183, 58, 375, 99, 100, 473, + 101, 59, 126, 60, 61, 62, 63, 103, 223, 224, + 379, 380, 64, 128, 184, 107, 108, 494, 495, 496, + 331, 185, 186, 326, 332, 327, 187, 188, 189, 347, + 436, 437, 438, 398, 190, 191, 359, 462, 263, 264, + 265, 400, 534, 151, 152, 89, 192, 193, 92, 401, + 402, 266, 80, 334, 350, 335, 351, 87, 427, 267, + 446, 527, 447, 528, 448, 348, 194, 579, 195, 196, + 197, 198, 531, 458, 557, 558, 559, 512, 268, 269, + 270, 271, 337, 204, 357, 460, 199, 349, 272, 76, + 329, 75, 138, 139, 140, 141, 313, 142, 311, 312, + 143, 144, 145, 304, 422 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -396 +#define YYPACT_NINF -370 static const yytype_int16 yypact[] = { - -396, 1355, -396, -396, -53, 5, -396, -396, 166, -396, - -396, -396, -396, 39, -396, -396, -396, -396, 166, -396, - -396, -396, -396, -396, 1803, 166, 56, 102, 123, 57, - -70, 166, -396, -396, -396, 291, -396, -396, -396, -396, - -396, -396, -396, -91, -396, -396, -396, -396, -396, -396, - 129, 63, -396, -396, -396, -396, 66, -396, -396, 29, - 75, -396, -396, -396, -396, 46, 73, -396, -396, -396, - -35, -396, -396, 1838, 227, 50, -396, -396, 1677, -37, - 1551, -396, -396, 1, -396, 1677, 50, -396, -396, -396, - -70, -35, 694, 291, 291, 291, -396, -396, -396, -396, - 820, 545, 94, -396, 135, -396, -396, -396, -396, 199, - -396, -396, 29, -396, 1407, -396, 1490, 166, 75, 58, - 1677, -396, -396, -396, 227, -396, 407, 55, 55, 55, - 55, 55, 55, 55, -396, 227, 55, 55, 55, -396, - -396, -396, -396, -396, -396, -396, -396, -396, -396, 1873, - -396, -396, 243, -396, -396, 131, 136, 159, 16, 266, - 193, 166, 229, 166, 166, 229, 160, 166, 57, -396, - -396, -396, -396, -396, -396, -396, 229, 229, -396, -396, - -396, 229, -396, -396, -396, -396, -396, -396, -396, -396, - -396, -396, 229, -396, -396, 229, -396, 229, -396, -396, - 229, -396, -396, -396, -396, -396, -396, 1677, -396, 61, - -396, 954, 1088, 204, -396, 131, 136, 1677, 75, -396, - -396, -396, -396, 10, 1677, 83, -396, 105, -396, -396, - -396, -396, -396, -396, -396, -396, -396, 171, -396, -396, - 180, -396, -396, 30, -396, -396, -396, -396, -396, -396, - -396, 33, -396, -396, -396, -396, -396, -396, -396, -396, - 185, -396, -396, -396, -396, 1767, -396, 69, -396, 74, - -396, -396, -396, 234, 29, -396, 192, -396, -396, 206, - -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, - -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, - 1677, -396, -396, -396, 198, -396, 407, -396, 407, -396, - -396, 55, 55, 55, 407, 55, -396, -396, 227, 55, - 359, -396, -396, -396, -396, -396, 200, -396, 212, -396, - -396, -396, -396, 185, -396, -396, -396, -396, 55, 208, - -396, -396, -396, 205, -396, 55, 220, -396, -25, 223, - 229, -396, -396, 20, 82, 1838, -396, 205, -396, -396, - -396, 312, 209, -396, 1920, -396, 364, -396, -396, -396, - -396, -396, -396, -396, -396, -396, 1677, -396, -396, -396, - -396, -396, -396, -396, -396, 143, 332, -396, -396, -396, - 112, -396, -396, -396, -396, -396, -396, -396, -396, 185, - -396, -396, -396, -396, -396, 143, 143, 143, 143, -396, - 219, -396, 29, -396, -396, -396, 1551, -396, -396, -396, - -396, 407, 407, 55, -396, 227, -396, -396, 1873, -396, - 246, -396, -396, 55, 240, 166, 245, 169, 245, -396, - 289, 249, 33, 250, -396, -396, -396, 342, -396, -396, - -396, -396, -396, -396, -396, 86, -396, 178, -396, -396, - -396, 1920, 1920, 260, -396, -396, 260, -396, -396, -100, - 275, -396, 274, -396, -396, 232, 232, 232, -396, -396, - -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, - -396, 55, -396, 166, -396, 166, -396, 166, 273, -396, - -396, 283, -396, -396, 272, 67, 407, -396, -396, -396, - -396, -396, 289, -396, -396, -396, -396, -396, 33, -396, - 33, 1920, 232, -396, 209, 178, -396, -396, -396, -396, - -396, -396, -396, -396, -396, -396, -396, -396, 341, 50, - -396, 229, -396, 10, 1920, 83, -396, 55, 55, -396, - 289, -396, -396, -396, -396, -396, -396, -396, -396, -44, - -100, -396, -396, -396, 276, -396, -18, 131, 136, 383, - 1222, -396, -396, -396, 292, -396, -396, -396, -396, 33, - -396, -396, -396, -396, -396, 55, 1920, -396, -396 + -370, 1281, -370, -370, -66, -58, -370, -370, -8, -370, + -370, -370, -370, -9, -370, -370, -370, -370, -8, -370, + -370, -370, -370, -370, 1758, -8, 15, 18, 34, 50, + 75, -8, -370, -370, -370, -370, 285, 168, -370, -370, + -370, -370, -370, -370, -370, 150, -370, -370, -370, -370, + -370, -370, 48, 41, -370, -370, -370, -370, 168, -370, + -370, 16, -5, -370, -370, -370, -370, 84, 91, -370, + -370, -370, 74, -370, -370, 777, -35, -52, -370, -370, + 1643, 7, 1528, -370, -370, 95, -370, 1643, -52, -370, + -370, -370, 75, 74, 675, 285, 285, 285, -370, -370, + -370, -370, 117, 239, 790, 537, -370, 10, 125, 131, + -370, 139, -370, -370, -370, 239, -370, 185, -370, -370, + 16, -370, 1330, -370, 1433, -8, -5, 115, 1643, -370, + -370, 310, 362, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, 260, -370, 180, -370, -19, -370, + -370, 166, 167, 187, 25, 126, 78, -8, 106, -8, + -8, 106, 355, -8, 50, -370, -370, -370, -370, -370, + -370, -370, 106, 106, 106, -370, -370, 168, 106, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, 106, + -370, -370, 106, -370, 106, -370, -370, 106, -370, -370, + -370, -370, -370, -370, 1643, -370, 45, -370, 913, 1036, + 221, -370, 166, 167, 1643, -5, -370, -370, -370, -370, + 26, 1643, 220, 16, 201, 207, -370, -15, -370, -370, + -370, -370, -370, -370, -370, -370, -370, 208, -370, -370, + 210, -370, -370, 20, -370, -370, -370, -370, -370, -370, + -370, -13, -370, -370, -370, -370, -370, -370, -370, -370, + -370, 211, -370, -370, -370, -370, 1757, -370, 87, -370, + 135, -370, -370, -370, -370, 537, -370, 231, -370, 217, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + 1643, -370, -370, -370, 218, 362, 362, 362, -370, -370, + 362, -370, -370, 153, -370, -370, -370, -370, -370, 228, + -370, 219, -370, -370, -370, -370, 211, -370, -370, -370, + -370, 10, 229, -370, -370, -370, 224, -370, 10, 233, + -370, 120, 60, 106, 234, -370, -370, 40, 222, 777, + -370, 224, -370, -370, -370, -370, 366, 214, -370, 1771, + -370, 364, -370, -370, -370, -370, -370, -370, -370, -370, + 1643, -370, -370, -370, -370, -370, -370, -370, -370, 16, + 259, -370, -370, 108, -370, -370, 205, -370, -370, -370, + -370, -370, -370, -370, -370, -370, 211, 324, -370, -370, + -370, -370, -370, -370, 108, 108, 108, 108, -370, -370, + 278, -370, -370, 1528, -370, 10, -35, 301, -370, -370, + 260, -370, -370, 251, -370, 263, -8, 250, 63, 250, + -370, 399, 264, -13, -370, -370, -370, 371, -370, -370, + -370, -370, -370, -370, -370, 28, -370, 672, -370, -370, + -370, 1771, 1771, 1771, 262, -370, -370, 262, -370, -370, + -62, -370, -370, 261, -370, -370, -370, -370, -370, 133, + 133, 133, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, 10, -370, -8, -370, -8, -370, + -8, 268, -370, -370, -370, 170, -370, 379, 54, -370, + -370, 301, -370, -370, -370, 399, -370, -370, -370, -370, + -370, -13, -370, 255, 1771, 133, -370, 214, 672, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, 141, -52, -370, 106, -370, 26, 1771, 220, -370, + 10, 10, -370, 399, -370, -370, -370, -370, -370, -370, + -370, -370, -13, 154, -62, -370, -370, -370, 271, -370, + -14, 166, 167, 361, 1159, -370, -370, -370, -370, 280, + -370, -370, -370, -370, -370, -13, -370, -370, -370, -370, + -370, 399, 1771, -370, -370 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -396, -396, 48, -396, -1, -396, 36, -396, -7, -396, - 340, -396, 344, -396, -17, -396, -8, 26, 327, 3, - -396, -396, -396, -396, -33, -26, -396, -396, -396, -396, - -396, -77, -396, -396, 37, -43, -97, -396, -396, -337, - 316, -396, 358, -396, -396, -396, -396, -396, -396, -396, - -396, -396, -396, -396, -96, -396, -396, -51, 121, 294, - -396, -81, -6, -395, -396, -396, -396, -396, -102, -329, - -396, -396, -396, -396, -321, -92, -396, -396, 194, -396, - -98, -79, -78, 434, -16, -27, 373, -396, -396, -396, - -396, 318, -164, -137, -89, 317, 140, -396, -396, -396, - 31, -396, -396, -396, -396, -396, -396, -396, -396, -396, - -396, -50, -396, -396, -87, -396, -101, -225, -148, -74, - -396, 47, -29, -396, -396, 59, -396, 0, -396, 142, - -64, -396, -122, -396, -396, -126, -52, -58, -396, -274 + -370, -370, -370, -1, -370, 44, -370, 38, 138, 368, + -370, 438, -370, 65, -370, 56, 27, 318, 5, -370, + -370, -370, -370, -36, -47, -370, -370, -370, -370, -370, + -79, -370, -83, -370, 36, -37, -95, -370, -370, -369, + 256, -370, 354, -370, -370, -370, -370, 390, -370, -370, + -370, -370, -370, -370, -370, -370, -299, -370, -370, -48, + 157, 294, -370, -77, -4, -151, -370, -370, -370, -370, + -98, 194, -370, -370, -370, -370, -301, -96, -370, -370, + 195, -370, -86, -81, -80, 445, -20, -28, 378, -370, + -370, -370, -370, 311, -158, -124, 51, 313, 143, -370, + -370, -370, 42, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -46, -370, -370, -84, -22, -370, -146, + -213, -143, -78, -370, 53, -24, -370, -370, 61, -370, + 0, -370, 146, -53, -370, -119, -370, -370, 365, -7, + -126, -59, -131, -370, 81 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -1 -static const yytype_uint16 yytable[] = +#define YYTABLE_NINF -371 +static const yytype_int16 yytable[] = { - 41, 64, 70, 89, 48, 206, 100, 215, 216, 261, - 151, 335, 72, 358, 88, 150, 110, 359, 388, 79, - 260, 149, 152, 322, 447, 91, 322, 321, 360, 349, - 321, 361, 327, 363, 418, 461, 365, 42, 55, 462, - 422, 300, 539, 19, 106, 517, 429, 580, 211, 212, - 41, 101, 184, 203, 210, 204, 75, 445, 540, 214, - 305, 76, 367, 89, 103, 203, 86, 204, 367, 277, - 108, 316, 152, 343, 88, 259, 343, 340, 104, 27, - 384, 28, 75, 152, 256, 348, 13, 65, 444, 15, - 205, 323, 13, 257, 303, 15, 21, 283, 32, 279, - 252, 271, 21, 23, 258, 279, 284, 117, 294, 23, - 523, 299, 302, 390, 289, 19, 298, 556, 41, 19, - 581, 445, 237, 203, 521, 204, 309, 310, 311, 312, - 313, 314, 315, 34, 111, 317, 318, 319, 543, 544, - 545, 376, 328, 113, 384, 66, 75, 506, 507, 83, - 282, 287, 293, 296, 384, 576, 213, 239, 332, 240, - 388, 84, 281, 33, 292, 450, 350, 451, 33, 39, - 115, 451, 452, 288, 453, 297, 452, 389, 453, 71, - 322, 366, 483, 484, 399, 559, 36, 37, 67, 36, - 37, 375, 38, 19, 36, 37, 80, 38, 378, 301, - 153, 154, 368, 275, 105, 34, 405, 406, 554, 34, - 67, 441, 371, 443, 36, 37, 454, 68, 69, 381, - 454, 70, 272, 377, 379, 485, 486, 455, 407, 408, - 447, 411, 555, 487, 161, 237, 488, 489, 490, 68, - 69, 163, 81, 491, 164, 273, 241, 242, 417, 526, - 203, 167, 204, 527, 424, 492, 427, 586, 528, 203, - 493, 204, 340, 82, 494, 404, 152, 495, 428, 102, - 239, 67, 240, 515, 415, 273, 496, 497, 485, 486, - 385, 324, 329, 34, 345, 346, 487, 325, 351, 488, - 489, 490, 335, 326, 241, 242, 374, 150, 382, 19, - 68, 69, 322, 149, 481, 482, 321, 383, 492, 480, - 419, 420, 421, 493, 423, 529, 530, 494, 425, 203, - 495, 204, 19, 390, 531, 475, 449, 477, 478, 496, - 497, 340, 413, 532, 409, 533, 125, 432, 416, 128, - 414, 130, 430, 431, 439, 134, 135, 136, 137, 138, - 474, 435, 125, 498, 459, 128, 330, 130, 237, 437, - 499, 509, 440, 516, 335, 442, 468, 142, 519, 503, - 417, 331, 472, 152, 463, 464, 465, 569, 466, 330, - 510, 237, 512, 142, 93, 94, 95, 96, 514, 34, - 210, 518, 520, 239, 331, 240, 86, 36, 37, 384, - 241, 242, 335, 463, 464, 465, 498, 466, 121, 223, - 224, 225, 34, 552, 542, 550, 239, 551, 240, 579, - 36, 37, 508, 241, 242, 475, 476, 477, 478, 513, - 582, 203, 511, 204, 585, 475, 522, 477, 478, 332, - 561, 254, 505, 295, 557, 255, 558, 536, 573, 218, - 537, 574, 572, 553, 337, 459, 121, 577, 77, 400, - 567, 568, 578, 217, 566, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 347, 438, 352, 525, 547, 562, 548, - 546, 549, 587, 140, 141, 560, 524, 460, 0, 142, - 426, 0, 0, 0, 0, 566, 0, 0, 371, 570, - 0, 332, 0, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 0, 0, 0, 0, 0, - 139, 0, 449, 0, 0, 0, 0, 0, 0, 381, - 0, 140, 141, 571, 379, 0, 432, 575, 0, 332, - 0, 0, 0, 0, 4, 5, 157, 6, 7, 0, - 227, 0, 0, 0, 0, 9, 10, 11, 12, 0, - 0, 0, 158, 15, 16, 17, 18, 159, 19, 0, - 21, 0, 22, 0, 588, 160, 161, 23, 162, 24, - 0, 25, 0, 163, 26, 27, 164, 28, 165, 166, - 29, 30, 0, 167, 0, 168, 31, 0, 0, 0, - 0, 0, 169, 0, 32, 0, 170, 228, 0, 229, - 230, 171, 231, 172, 232, 0, 173, 233, 0, 174, - 0, 234, 0, 175, 176, 235, 236, 237, 0, 0, - 0, 0, 0, 0, 0, 0, 177, 0, 238, 0, - 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34, 35, - 180, 75, 239, 0, 240, 181, 36, 37, 0, 241, - 242, 86, 243, 0, 0, 39, 0, 0, 0, 182, - 244, 245, 246, 247, 248, 219, 0, 249, 250, 0, - 0, 251, 0, 0, 0, 157, 6, 7, 0, 8, - 0, 0, 0, 0, 9, 10, 11, 12, 0, 0, - 0, 158, 0, 16, 17, 18, 159, 0, 0, 0, - 0, 22, 0, 0, 160, 161, 0, 162, 24, 0, - 25, 0, 163, 0, 27, 164, 28, 165, 166, 29, - 30, 0, 167, 0, 168, 31, 0, 0, 0, 0, - 0, 169, 0, 32, 220, 170, 0, 0, 0, 0, - 171, 0, 172, 0, 0, 173, 0, 0, 174, 0, - 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, - 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35, 180, - 75, 219, 0, 0, 181, 36, 37, 0, 0, 0, - 86, 157, 6, 7, 39, 8, 0, 0, 182, 0, - 9, 10, 11, 12, 0, 0, 0, 158, 0, 16, - 17, 18, 159, 0, 0, 0, 0, 22, 0, 0, - 160, 161, 0, 162, 24, 0, 25, 0, 163, 0, - 27, 164, 28, 165, 166, 29, 30, 0, 167, 0, - 168, 31, 0, 0, 0, 0, 0, 169, 0, 32, - 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, - 0, 173, 0, 0, 174, 0, 0, 0, 175, 176, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 177, 0, 0, 0, 178, 179, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 180, 75, 0, 0, 0, - 181, 36, 37, 0, 0, 219, 86, 0, 0, 0, - 39, 226, 0, 0, 182, 157, 6, 7, 0, 8, - 0, 0, 0, 0, 9, 10, 11, 12, 0, 0, - 0, 158, 0, 16, 17, 18, 159, 0, 0, 0, - 0, 22, 0, 0, 160, 161, 0, 162, 24, 0, - 25, 0, 163, 0, 27, 164, 28, 165, 166, 29, - 30, 0, 167, 0, 168, 31, 0, 0, 0, 0, - 0, 169, 0, 32, 0, 170, 0, 0, 0, 0, - 171, 0, 172, 0, 0, 173, 0, 0, 174, 0, - 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, - 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35, 180, - 75, 0, 0, 0, 181, 36, 37, 0, 0, 219, - 86, 0, 0, 0, 39, 372, 0, 0, 182, 157, - 6, 7, 0, 8, 0, 0, 0, 0, 9, 10, - 11, 12, 0, 0, 0, 158, 0, 16, 17, 18, - 159, 0, 0, 0, 0, 22, 0, 0, 160, 161, - 0, 162, 24, 0, 25, 0, 163, 0, 27, 164, - 28, 165, 166, 29, 30, 0, 167, 0, 168, 31, - 0, 0, 0, 0, 0, 169, 0, 32, 0, 170, - 0, 0, 0, 0, 171, 0, 172, 0, 0, 173, - 0, 0, 174, 0, 0, 0, 175, 176, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, - 0, 0, 0, 178, 179, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 180, 75, 0, 0, 0, 181, 36, - 37, 0, 0, 219, 86, 0, 0, 0, 39, 373, - 0, 0, 182, 157, 6, 7, 0, 8, 0, 0, - 0, 0, 9, 10, 11, 12, 0, 0, 0, 158, - 0, 16, 17, 18, 159, 0, 0, 0, 0, 22, - 0, 0, 160, 161, 0, 162, 24, 0, 25, 0, - 163, 0, 27, 164, 28, 165, 166, 29, 30, 0, - 167, 0, 168, 31, 0, 0, 0, 0, 0, 169, - 0, 32, 0, 170, 0, 0, 0, 0, 171, 0, - 172, 0, 0, 173, 0, 0, 174, 0, 0, 0, - 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 177, 0, 0, 0, 178, 179, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 180, 75, 0, - 0, 0, 181, 36, 37, 2, 3, 0, 86, 0, - 0, 0, 39, 584, 4, 5, 182, 6, 7, 0, + 43, 66, 91, 203, 72, 104, 50, 212, 213, 262, + 90, 343, 328, 316, 74, 352, 353, 148, 315, 328, + 354, 81, 315, 147, 116, 314, 260, 93, 261, 314, + 384, 355, 425, 181, 356, 207, 358, 57, 344, 360, + 211, 320, 110, 300, 106, 44, 362, 208, 209, 451, + 576, 452, 43, 117, 453, 362, 111, 49, 259, 19, + 78, 19, 65, 67, 91, 27, 48, 28, 516, 532, + 13, 68, 90, 15, 146, 132, 200, 134, 201, 13, + 21, 303, 15, 280, 32, 533, 23, 149, 150, 21, + 146, 113, 69, 218, 137, 23, 200, 118, 201, 69, + 536, 537, 538, 218, 252, 273, 274, 434, 70, 71, + 137, 237, 441, 577, 277, 70, 71, 442, 157, 443, + 73, 299, 290, 202, 298, 159, 43, 287, 160, 287, + 38, 39, 370, 69, 514, 163, 239, 34, 240, 34, + 321, 85, 322, 435, 82, 41, 553, 83, 33, 70, + 71, 444, 200, 389, 201, 77, 86, 361, 288, 19, + 296, 38, 39, 84, 40, 302, 283, 369, 293, 508, + 384, 112, 102, 385, 373, 363, 381, 109, 285, 262, + 294, 121, 421, 289, 549, 297, 377, 284, 123, 396, + 77, -369, -369, 476, 477, 200, 260, 201, 261, 237, + 88, 129, 454, 455, 456, 125, 457, 218, 218, 336, + 333, 365, 336, 404, 405, 323, 371, 237, 376, 432, + 372, 374, 33, 72, 239, 469, 240, 471, 259, 472, + 200, -155, 201, 324, 383, 38, 39, 34, 40, 210, + 555, 569, 239, 225, 240, 301, 38, 39, 276, 241, + 242, -370, -370, 412, 420, 19, 275, 435, 474, 475, + 419, 130, 131, 132, 133, 134, 403, 389, 277, 77, + 38, 39, 305, 582, 252, 273, 135, 136, 406, 407, + 510, 105, 137, 418, 478, 479, 421, 278, 328, 503, + 38, 39, 480, 544, 315, 481, 482, 483, 414, 415, + 416, 314, 484, 417, 440, 317, 441, 318, 129, 468, + 319, 442, 368, 443, 485, 378, 338, 339, 486, 439, + 345, -159, 487, 465, 381, 488, 382, 69, 241, 242, + 106, 493, 409, 34, 489, 490, 117, 430, 386, 424, + 38, 39, 466, 70, 71, 444, 411, 413, 449, 129, + 509, 220, 221, 222, 550, 513, 445, 148, 501, 423, + 459, 426, 328, 500, 431, 433, 207, 428, 130, 131, + 503, 133, 463, 467, 504, 315, 563, 95, 96, 97, + 118, 98, 507, 135, 136, 478, 479, 88, 19, 137, + 535, 552, 571, 480, 505, 511, 481, 482, 483, 543, + 328, 491, 305, 575, 306, 307, 308, 578, 492, 130, + 131, 581, 133, 408, 499, 485, 469, 470, 471, 486, + 472, 114, 506, 487, 135, 136, 488, 454, 455, 456, + 584, 457, 19, 513, 529, 489, 490, 530, 328, 47, + 498, 567, 295, 568, 341, 449, 342, 215, 115, 548, + 330, 561, 562, 560, 310, 573, 306, 307, 308, 333, + 397, 399, 324, 469, 515, 471, 34, 472, 574, 79, + 214, 239, 340, 240, 572, 38, 39, 346, 241, 242, + 429, 546, 540, 539, 541, 556, 542, 518, 323, 551, + 237, 583, 517, 554, 545, 450, 309, 560, 502, 564, + 0, 0, 491, 365, 0, 0, 324, 0, 0, 547, + 34, 0, 0, 0, 0, 239, 0, 240, 0, 38, + 39, 0, 241, 242, 0, 439, 0, 0, 0, 0, + 0, 0, 565, 0, 376, 0, 566, 374, 0, 106, + 570, 0, 0, 0, 0, 0, 4, 5, 153, 6, + 7, 0, 227, 0, 0, 0, 0, 9, 10, 11, + 12, 0, 0, 218, 154, 15, 16, 17, 18, 155, + 19, 20, 21, 0, 22, 0, 156, 157, 23, 158, + 24, 0, 25, 0, 159, 26, 27, 160, 28, 161, + 162, 29, 30, 0, 163, 117, 164, 31, 0, 0, + 0, 0, 0, 165, 0, 32, 0, 166, 228, 0, + 229, 230, 167, 231, 168, 232, 0, 169, 233, 0, + 170, 0, 234, 0, 171, 172, 235, 236, 237, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 0, 118, + 174, 0, 238, 0, 175, 176, 0, 0, 34, 35, + 36, 177, 77, 239, 0, 240, 178, 38, 39, 0, + 241, 242, 88, 243, 0, 0, 41, 0, 0, 0, + 179, 244, 245, 246, 247, 248, 216, 0, 249, 250, + 0, 0, 251, 0, 0, 0, 153, 6, 7, 0, 8, 0, 0, 0, 0, 9, 10, 11, 12, 0, - 13, 14, 0, 15, 16, 17, 18, 0, 19, 20, - 21, 0, 22, 0, 0, 0, 0, 23, 0, 24, - 0, 25, 0, 0, 26, 27, 0, 28, 278, 0, - 29, 30, 0, 0, 0, 0, 31, 5, 0, 6, - 7, 0, 8, 0, 32, 0, 0, 9, 10, 11, - 12, 0, 13, 0, 0, 15, 16, 17, 18, 0, - 19, 20, 21, 0, 22, 279, 0, 0, 0, 23, - 0, 24, 0, 25, 0, 0, 26, 27, 0, 28, - 33, 0, 29, 30, 0, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 0, 0, 32, 0, 34, 35, - 0, 0, 0, 0, 0, 0, 36, 37, 0, 38, - 0, 290, 0, 0, 0, 39, 0, 0, 0, 0, - 0, 0, 6, 7, 0, 8, 0, 0, 0, 0, + 0, 0, 154, 0, 16, 17, 18, 155, 0, 0, + 0, 0, 22, 0, 156, 157, 0, 158, 24, 0, + 25, 0, 159, 0, 27, 160, 28, 161, 162, 29, + 30, 0, 163, 0, 164, 31, 0, 0, 0, 0, + 0, 165, 519, 32, 217, 166, 520, 0, 0, 0, + 167, 521, 168, 0, 0, 169, 0, 0, 170, 0, + 0, 0, 171, 172, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 173, 0, 0, 174, 0, + 0, 0, 175, 176, 0, 0, 0, 0, 36, 177, + 77, 216, 0, 0, 178, 38, 39, 0, 522, 523, + 88, 153, 6, 7, 41, 8, 0, 524, 179, 0, + 9, 10, 11, 12, 0, 0, 525, 154, 526, 16, + 17, 18, 155, 0, 0, 129, 0, 22, 0, 156, + 157, 0, 158, 24, 0, 25, 0, 159, 0, 27, + 160, 28, 161, 162, 29, 30, 0, 163, 0, 164, + 31, 0, 0, 0, 0, 0, 165, 0, 32, 0, + 166, 0, 0, 0, 0, 167, 0, 168, 0, 0, + 169, 0, 0, 170, 0, 0, 0, 171, 172, 0, + 0, 0, 0, 0, 0, 130, 131, 132, 133, 134, + 173, 0, 0, 174, 0, 0, 0, 175, 176, 0, + 135, 136, 0, 36, 177, 77, 137, 0, 0, 178, + 38, 39, 0, 0, 216, 88, 0, 0, 0, 41, + 226, 0, 0, 179, 153, 6, 7, 0, 8, 0, + 0, 0, 0, 9, 10, 11, 12, 0, 0, 0, + 154, 0, 16, 17, 18, 155, 0, 0, 0, 0, + 22, 0, 156, 157, 0, 158, 24, 0, 25, 0, + 159, 0, 27, 160, 28, 161, 162, 29, 30, 0, + 163, 0, 164, 31, 0, 0, 0, 0, 0, 165, + 0, 32, 0, 166, 0, 0, 0, 0, 167, 0, + 168, 0, 0, 169, 0, 0, 170, 0, 0, 0, + 171, 172, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 173, 0, 0, 174, 0, 0, 0, + 175, 176, 0, 0, 0, 0, 36, 177, 77, 0, + 0, 0, 178, 38, 39, 0, 0, 216, 88, 0, + 0, 0, 41, 366, 0, 0, 179, 153, 6, 7, + 0, 8, 0, 0, 0, 0, 9, 10, 11, 12, + 0, 0, 0, 154, 0, 16, 17, 18, 155, 0, + 0, 0, 0, 22, 0, 156, 157, 0, 158, 24, + 0, 25, 0, 159, 0, 27, 160, 28, 161, 162, + 29, 30, 0, 163, 0, 164, 31, 0, 0, 0, + 0, 0, 165, 0, 32, 0, 166, 0, 0, 0, + 0, 167, 0, 168, 0, 0, 169, 0, 0, 170, + 0, 0, 0, 171, 172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 173, 0, 0, 174, + 0, 0, 0, 175, 176, 0, 0, 0, 0, 36, + 177, 77, 0, 0, 0, 178, 38, 39, 0, 0, + 216, 88, 0, 0, 0, 41, 367, 0, 0, 179, + 153, 6, 7, 0, 8, 0, 0, 0, 0, 9, + 10, 11, 12, 0, 0, 0, 154, 0, 16, 17, + 18, 155, 0, 0, 0, 0, 22, 0, 156, 157, + 0, 158, 24, 0, 25, 0, 159, 0, 27, 160, + 28, 161, 162, 29, 30, 0, 163, 0, 164, 31, + 0, 0, 0, 0, 0, 165, 0, 32, 0, 166, + 0, 0, 0, 0, 167, 0, 168, 0, 0, 169, + 0, 0, 170, 0, 0, 0, 171, 172, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, + 0, 0, 174, 0, 0, 0, 175, 176, 0, 0, + 0, 0, 36, 177, 77, 0, 0, 0, 178, 38, + 39, 2, 3, 0, 88, 0, 0, 0, 41, 580, + 4, 5, 179, 6, 7, 0, 8, 0, 0, 0, + 0, 9, 10, 11, 12, 0, 13, 14, 0, 15, + 16, 17, 18, 0, 19, 20, 21, 0, 22, 0, + 0, 0, 23, 0, 24, 0, 25, 0, 0, 26, + 27, 281, 28, 0, 0, 29, 30, 0, 0, 0, + 5, 31, 6, 7, 0, 8, 0, 0, 0, 32, 9, 10, 11, 12, 0, 13, 0, 0, 15, 16, - 17, 18, 0, 19, 20, 21, 0, 22, 279, 0, - 34, 35, 23, 0, 24, 0, 25, 0, 0, 26, - 27, 0, 28, 0, 0, 29, 30, 39, 280, 0, - 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 157, 6, 7, 0, 8, 0, 0, 0, - 0, 9, 10, 11, 12, 0, 0, 0, 158, 0, - 16, 17, 18, 159, 0, 0, 0, 0, 22, 0, - 0, 160, 161, 0, 162, 24, 0, 25, 0, 163, - 0, 27, 164, 28, 165, 166, 29, 30, 0, 167, - 0, 168, 31, 34, 35, 0, 0, 0, 169, 0, - 32, 0, 170, 0, 0, 0, 0, 171, 0, 172, - 39, 291, 173, 0, 0, 174, 0, 0, 0, 175, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 177, 0, 0, 0, 178, 179, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 35, 180, 75, 0, 0, - 0, 181, 0, 0, 208, 0, 0, 86, 157, 6, - 7, 39, 8, 0, 0, 182, 0, 9, 10, 11, - 12, 0, 0, 0, 158, 0, 16, 17, 18, 159, - 0, 0, 0, 0, 22, 0, 0, 160, 161, 0, - 162, 24, 0, 25, 0, 163, 0, 27, 164, 28, - 165, 166, 29, 30, 0, 167, 0, 168, 31, 0, - 0, 0, 0, 0, 169, 0, 32, 0, 170, 0, - 0, 0, 0, 171, 0, 172, 0, 0, 173, 0, - 0, 174, 0, 0, 0, 175, 176, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, - 0, 0, 178, 179, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 35, 180, 75, 0, 0, 0, 181, 0, 0, - 0, 0, 0, 86, 0, 6, 7, 39, 8, 0, - 0, 182, 0, 9, 10, 11, 12, 0, 0, 0, - 0, 0, 16, 17, 18, 391, 0, 0, 0, 228, - 22, 229, 230, 0, 231, 0, 232, 24, 0, 25, - 0, 0, 0, 27, 0, 28, 0, 392, 29, 30, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 238, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 241, 242, 0, 393, 394, 0, 0, 0, 0, - 395, 396, 244, 245, 246, 247, 248, 0, 0, 397, - 398, 0, 121, 251, 0, 0, 0, 35, 0, 75, + 17, 18, 0, 19, 20, 21, 0, 22, 0, 0, + 0, 23, 0, 24, 0, 25, 0, 0, 26, 27, + 0, 28, 0, 0, 29, 30, 0, 0, 33, 0, + 31, 0, 34, 35, 36, 37, 0, 0, 32, 0, + 0, 38, 39, 0, 40, 0, 0, 0, 0, 0, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 39, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 140, 141, 0, 0, 0, 0, 142, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 0, 228, 0, 229, 230, 139, 231, 0, 232, - 0, 0, 233, 0, 0, 0, 234, 140, 141, 0, - 0, 236, 0, 142, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 34, 35, 36, 37, 6, 7, 0, 8, 0, + 0, 0, 0, 9, 10, 11, 12, 0, 13, 41, + 282, 15, 16, 17, 18, 0, 19, 20, 21, 0, + 22, 0, 0, 0, 23, 0, 24, 0, 25, 0, + 0, 26, 27, 0, 28, 0, 0, 29, 30, 0, + 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, - 0, 0, 0, 0, 0, 244, 245, 246, 247, 248, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, + 6, 7, 0, 8, 34, 35, 36, 37, 9, 10, + 11, 12, 0, 0, 0, 154, 0, 16, 17, 18, + 155, 0, 41, 292, 0, 22, 0, 156, 157, 0, + 158, 24, 0, 25, 0, 159, 0, 27, 160, 28, + 161, 162, 29, 30, 0, 163, 0, 164, 31, 0, + 0, 0, 0, 0, 165, 0, 32, 0, 166, 0, + 0, 0, 0, 167, 0, 168, 0, 0, 169, 0, + 0, 170, 0, 0, 0, 171, 172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, + 0, 174, 0, 0, 0, 175, 176, 0, 0, 0, + 0, 36, 177, 77, 0, 0, 0, 178, 0, 0, + 205, 0, 0, 88, 153, 6, 7, 41, 8, 0, + 0, 179, 0, 9, 10, 11, 12, 0, 0, 0, + 154, 0, 16, 17, 18, 155, 0, 0, 0, 0, + 22, 0, 156, 157, 0, 158, 24, 0, 25, 0, + 159, 0, 27, 160, 28, 161, 162, 29, 30, 0, + 163, 0, 164, 31, 0, 0, 0, 0, 0, 165, + 0, 32, 0, 166, 0, 0, 0, 0, 167, 0, + 168, 0, 0, 169, 0, 0, 170, 0, 0, 0, + 171, 172, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 173, 0, 0, 174, 0, 0, 0, + 175, 176, 0, 0, 0, 0, 36, 177, 77, 0, + 0, 0, 178, 0, 0, 0, 0, 0, 88, 0, + 6, 7, 41, 8, 0, 0, 179, 0, 9, 10, + 11, 12, 0, 0, 0, 0, 0, 16, 17, 18, + 19, 0, 0, 0, 0, 22, 0, 0, 0, 0, + 0, 24, 0, 25, 0, 0, 0, 27, 0, 28, + 0, 0, 29, 30, 0, 0, 0, 0, 31, 0, + 0, 0, 0, 0, 387, 0, 32, 0, 228, 0, + 229, 230, 0, 231, 0, 232, 0, 0, 0, 0, + 0, 0, 228, 0, 229, 230, 388, 231, 0, 232, + 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, + 0, 236, 238, 0, 0, 0, 0, 0, 34, 0, + 389, 36, 37, 77, 0, 0, 238, 0, 0, 0, + 241, 242, 0, 390, 391, 0, 0, 41, 0, 392, + 393, 244, 245, 246, 247, 248, 0, 461, 394, 395, + 0, 0, 251, 0, 0, 244, 245, 246, 247, 248, 0, 0, 249, 250, 0, 0, 251 }; static const yytype_int16 yycheck[] = { - 1, 1, 8, 30, 1, 79, 39, 86, 86, 101, - 74, 159, 18, 177, 30, 73, 59, 181, 243, 25, - 101, 73, 74, 149, 353, 31, 152, 149, 192, 166, - 152, 195, 16, 197, 308, 356, 200, 1, 1, 360, - 314, 118, 142, 33, 51, 440, 320, 65, 81, 82, - 51, 142, 78, 90, 80, 92, 126, 101, 158, 85, - 124, 24, 1, 90, 1, 90, 136, 92, 1, 112, - 4, 135, 124, 162, 90, 101, 165, 102, 15, 50, - 124, 52, 126, 135, 101, 166, 25, 140, 68, 28, - 127, 149, 25, 101, 120, 28, 35, 114, 69, 38, - 101, 101, 35, 42, 101, 38, 114, 142, 116, 42, - 447, 117, 119, 138, 114, 33, 116, 512, 119, 33, - 138, 101, 92, 90, 445, 92, 127, 128, 129, 130, - 131, 132, 133, 123, 59, 136, 137, 138, 475, 476, - 477, 218, 126, 97, 124, 140, 126, 421, 422, 92, - 114, 114, 116, 116, 124, 550, 155, 127, 159, 129, - 385, 104, 114, 105, 116, 83, 166, 85, 105, 140, - 97, 85, 90, 114, 92, 116, 90, 251, 92, 140, - 306, 207, 407, 408, 265, 522, 131, 132, 105, 131, - 132, 217, 134, 33, 131, 132, 140, 134, 224, 141, - 150, 151, 141, 4, 141, 123, 137, 138, 141, 123, - 105, 348, 209, 350, 131, 132, 134, 134, 135, 225, - 134, 227, 128, 223, 225, 6, 7, 145, 154, 155, - 559, 274, 506, 14, 41, 92, 17, 18, 19, 134, - 135, 48, 140, 24, 51, 140, 134, 135, 306, 71, - 90, 58, 92, 75, 318, 36, 320, 578, 80, 90, - 41, 92, 102, 140, 45, 265, 318, 48, 320, 140, - 127, 105, 129, 104, 300, 140, 57, 58, 6, 7, - 137, 150, 16, 123, 163, 164, 14, 151, 167, 17, - 18, 19, 440, 134, 134, 135, 92, 355, 127, 33, - 134, 135, 428, 355, 405, 406, 428, 127, 36, 390, - 311, 312, 313, 41, 315, 137, 138, 45, 319, 90, - 48, 92, 33, 138, 146, 93, 353, 95, 96, 57, - 58, 102, 140, 155, 100, 157, 109, 338, 140, 112, - 134, 114, 142, 131, 345, 118, 119, 120, 121, 122, - 376, 143, 109, 134, 354, 112, 90, 114, 92, 154, - 141, 425, 142, 437, 512, 142, 157, 140, 442, 412, - 428, 105, 8, 425, 62, 63, 64, 541, 66, 90, - 134, 92, 142, 140, 93, 94, 95, 96, 143, 123, - 416, 142, 142, 127, 105, 129, 136, 131, 132, 124, - 134, 135, 550, 62, 63, 64, 134, 66, 49, 93, - 94, 95, 123, 141, 140, 142, 127, 134, 129, 143, - 131, 132, 423, 134, 135, 93, 94, 95, 96, 435, - 47, 90, 433, 92, 142, 93, 94, 95, 96, 440, - 99, 101, 416, 116, 518, 101, 520, 463, 545, 91, - 466, 547, 544, 504, 160, 455, 49, 559, 24, 265, - 539, 539, 560, 90, 538, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 165, 344, 168, 455, 493, 538, 495, - 491, 497, 579, 134, 135, 524, 449, 355, -1, 140, - 141, -1, -1, -1, -1, 579, -1, -1, 505, 542, - -1, 512, -1, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, -1, -1, -1, -1, -1, - 123, -1, 559, -1, -1, -1, -1, -1, -1, 545, - -1, 134, 135, 543, 545, -1, 547, 548, -1, 550, - -1, -1, -1, -1, 9, 10, 11, 12, 13, -1, - 15, -1, -1, -1, -1, 20, 21, 22, 23, -1, - -1, -1, 27, 28, 29, 30, 31, 32, 33, -1, - 35, -1, 37, -1, 585, 40, 41, 42, 43, 44, - -1, 46, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, -1, 60, 61, -1, -1, -1, - -1, -1, 67, -1, 69, -1, 71, 72, -1, 74, - 75, 76, 77, 78, 79, -1, 81, 82, -1, 84, - -1, 86, -1, 88, 89, 90, 91, 92, -1, -1, - -1, -1, -1, -1, -1, -1, 101, -1, 103, -1, - 105, 106, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, 124, - 125, 126, 127, -1, 129, 130, 131, 132, -1, 134, - 135, 136, 137, -1, -1, 140, -1, -1, -1, 144, - 145, 146, 147, 148, 149, 1, -1, 152, 153, -1, - -1, 156, -1, -1, -1, 11, 12, 13, -1, 15, - -1, -1, -1, -1, 20, 21, 22, 23, -1, -1, - -1, 27, -1, 29, 30, 31, 32, -1, -1, -1, - -1, 37, -1, -1, 40, 41, -1, 43, 44, -1, - 46, -1, 48, -1, 50, 51, 52, 53, 54, 55, - 56, -1, 58, -1, 60, 61, -1, -1, -1, -1, - -1, 67, -1, 69, 70, 71, -1, -1, -1, -1, - 76, -1, 78, -1, -1, 81, -1, -1, 84, -1, - -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 101, -1, -1, -1, 105, - 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, - 126, 1, -1, -1, 130, 131, 132, -1, -1, -1, - 136, 11, 12, 13, 140, 15, -1, -1, 144, -1, - 20, 21, 22, 23, -1, -1, -1, 27, -1, 29, - 30, 31, 32, -1, -1, -1, -1, 37, -1, -1, - 40, 41, -1, 43, 44, -1, 46, -1, 48, -1, - 50, 51, 52, 53, 54, 55, 56, -1, 58, -1, - 60, 61, -1, -1, -1, -1, -1, 67, -1, 69, - -1, 71, -1, -1, -1, -1, 76, -1, 78, -1, - -1, 81, -1, -1, 84, -1, -1, -1, 88, 89, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 124, 125, 126, -1, -1, -1, - 130, 131, 132, -1, -1, 1, 136, -1, -1, -1, - 140, 141, -1, -1, 144, 11, 12, 13, -1, 15, - -1, -1, -1, -1, 20, 21, 22, 23, -1, -1, - -1, 27, -1, 29, 30, 31, 32, -1, -1, -1, - -1, 37, -1, -1, 40, 41, -1, 43, 44, -1, - 46, -1, 48, -1, 50, 51, 52, 53, 54, 55, - 56, -1, 58, -1, 60, 61, -1, -1, -1, -1, - -1, 67, -1, 69, -1, 71, -1, -1, -1, -1, - 76, -1, 78, -1, -1, 81, -1, -1, 84, -1, - -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 101, -1, -1, -1, 105, - 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, - 126, -1, -1, -1, 130, 131, 132, -1, -1, 1, - 136, -1, -1, -1, 140, 141, -1, -1, 144, 11, - 12, 13, -1, 15, -1, -1, -1, -1, 20, 21, - 22, 23, -1, -1, -1, 27, -1, 29, 30, 31, - 32, -1, -1, -1, -1, 37, -1, -1, 40, 41, - -1, 43, 44, -1, 46, -1, 48, -1, 50, 51, - 52, 53, 54, 55, 56, -1, 58, -1, 60, 61, - -1, -1, -1, -1, -1, 67, -1, 69, -1, 71, - -1, -1, -1, -1, 76, -1, 78, -1, -1, 81, - -1, -1, 84, -1, -1, -1, 88, 89, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, - -1, -1, -1, 105, 106, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 124, 125, 126, -1, -1, -1, 130, 131, - 132, -1, -1, 1, 136, -1, -1, -1, 140, 141, - -1, -1, 144, 11, 12, 13, -1, 15, -1, -1, - -1, -1, 20, 21, 22, 23, -1, -1, -1, 27, - -1, 29, 30, 31, 32, -1, -1, -1, -1, 37, - -1, -1, 40, 41, -1, 43, 44, -1, 46, -1, - 48, -1, 50, 51, 52, 53, 54, 55, 56, -1, - 58, -1, 60, 61, -1, -1, -1, -1, -1, 67, - -1, 69, -1, 71, -1, -1, -1, -1, 76, -1, - 78, -1, -1, 81, -1, -1, 84, -1, -1, -1, - 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 101, -1, -1, -1, 105, 106, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 124, 125, 126, -1, - -1, -1, 130, 131, 132, 0, 1, -1, 136, -1, - -1, -1, 140, 141, 9, 10, 144, 12, 13, -1, + 1, 1, 30, 81, 8, 41, 1, 88, 88, 105, + 30, 162, 155, 144, 18, 173, 174, 76, 144, 162, + 178, 25, 148, 76, 61, 144, 105, 31, 105, 148, + 243, 189, 331, 80, 192, 82, 194, 1, 162, 197, + 87, 16, 1, 126, 45, 1, 1, 83, 84, 350, + 64, 352, 53, 58, 355, 1, 15, 1, 105, 33, + 24, 33, 1, 129, 92, 49, 1, 51, 437, 131, + 25, 129, 92, 28, 109, 110, 89, 112, 91, 25, + 35, 128, 28, 120, 68, 147, 41, 139, 140, 35, + 109, 53, 107, 94, 129, 41, 89, 102, 91, 107, + 469, 470, 471, 104, 105, 105, 107, 67, 123, 124, + 129, 91, 84, 127, 129, 123, 124, 89, 40, 91, + 129, 125, 122, 116, 124, 47, 127, 122, 50, 124, + 120, 121, 215, 107, 435, 57, 116, 111, 118, 111, + 115, 91, 16, 103, 129, 129, 515, 129, 107, 123, + 124, 123, 89, 113, 91, 115, 106, 204, 122, 33, + 124, 120, 121, 129, 123, 127, 122, 214, 124, 106, + 383, 130, 4, 251, 221, 130, 116, 129, 122, 275, + 124, 97, 313, 122, 130, 124, 223, 122, 97, 266, + 115, 131, 132, 406, 407, 89, 275, 91, 275, 91, + 125, 48, 61, 62, 63, 131, 65, 208, 209, 158, + 104, 206, 161, 126, 127, 89, 220, 91, 222, 343, + 220, 222, 107, 227, 116, 92, 118, 94, 275, 96, + 89, 114, 91, 107, 126, 120, 121, 111, 123, 144, + 99, 540, 116, 4, 118, 130, 120, 121, 117, 123, + 124, 131, 132, 300, 313, 33, 131, 103, 404, 405, + 313, 108, 109, 110, 111, 112, 266, 113, 129, 115, + 120, 121, 92, 574, 275, 275, 123, 124, 143, 144, + 431, 131, 129, 130, 6, 7, 417, 102, 431, 420, + 120, 121, 14, 123, 420, 17, 18, 19, 305, 306, + 307, 420, 24, 310, 82, 139, 84, 140, 48, 386, + 123, 89, 91, 91, 36, 114, 159, 160, 40, 347, + 163, 114, 44, 370, 116, 47, 116, 107, 123, 124, + 331, 410, 101, 111, 56, 57, 58, 338, 127, 120, + 120, 121, 379, 123, 124, 123, 129, 129, 348, 48, + 428, 95, 96, 97, 505, 433, 134, 416, 417, 131, + 146, 132, 505, 416, 131, 131, 413, 143, 108, 109, + 501, 111, 8, 114, 123, 501, 534, 92, 93, 94, + 102, 96, 132, 123, 124, 6, 7, 125, 33, 129, + 129, 136, 543, 14, 131, 131, 17, 18, 19, 131, + 543, 123, 92, 132, 94, 95, 96, 46, 130, 108, + 109, 131, 111, 275, 415, 36, 92, 93, 94, 40, + 96, 53, 426, 44, 123, 124, 47, 61, 62, 63, + 581, 65, 33, 511, 454, 56, 57, 457, 581, 1, + 413, 537, 124, 538, 89, 445, 91, 93, 58, 497, + 156, 532, 532, 531, 92, 553, 94, 95, 96, 104, + 266, 266, 107, 92, 93, 94, 111, 96, 554, 24, + 92, 116, 161, 118, 552, 120, 121, 164, 123, 124, + 337, 102, 486, 484, 488, 531, 490, 445, 89, 511, + 91, 575, 439, 517, 495, 349, 131, 575, 417, 535, + -1, -1, 123, 498, -1, -1, 107, -1, -1, 130, + 111, -1, -1, -1, -1, 116, -1, 118, -1, 120, + 121, -1, 123, 124, -1, 553, -1, -1, -1, -1, + -1, -1, 536, -1, 538, -1, 536, 538, -1, 540, + 541, -1, -1, -1, -1, -1, 9, 10, 11, 12, + 13, -1, 15, -1, -1, -1, -1, 20, 21, 22, + 23, -1, -1, 564, 27, 28, 29, 30, 31, 32, + 33, 34, 35, -1, 37, -1, 39, 40, 41, 42, + 43, -1, 45, -1, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, -1, -1, + -1, -1, -1, 66, -1, 68, -1, 70, 71, -1, + 73, 74, 75, 76, 77, 78, -1, 80, 81, -1, + 83, -1, 85, -1, 87, 88, 89, 90, 91, -1, + -1, -1, -1, -1, -1, -1, -1, 100, -1, 102, + 103, -1, 105, -1, 107, 108, -1, -1, 111, 112, + 113, 114, 115, 116, -1, 118, 119, 120, 121, -1, + 123, 124, 125, 126, -1, -1, 129, -1, -1, -1, + 133, 134, 135, 136, 137, 138, 1, -1, 141, 142, + -1, -1, 145, -1, -1, -1, 11, 12, 13, -1, 15, -1, -1, -1, -1, 20, 21, 22, 23, -1, - 25, 26, -1, 28, 29, 30, 31, -1, 33, 34, - 35, -1, 37, -1, -1, -1, -1, 42, -1, 44, - -1, 46, -1, -1, 49, 50, -1, 52, 1, -1, - 55, 56, -1, -1, -1, -1, 61, 10, -1, 12, - 13, -1, 15, -1, 69, -1, -1, 20, 21, 22, - 23, -1, 25, -1, -1, 28, 29, 30, 31, -1, - 33, 34, 35, -1, 37, 38, -1, -1, -1, 42, - -1, 44, -1, 46, -1, -1, 49, 50, -1, 52, - 105, -1, 55, 56, -1, -1, -1, -1, 61, -1, - -1, -1, -1, -1, -1, -1, 69, -1, 123, 124, - -1, -1, -1, -1, -1, -1, 131, 132, -1, 134, - -1, 1, -1, -1, -1, 140, -1, -1, -1, -1, - -1, -1, 12, 13, -1, 15, -1, -1, -1, -1, + -1, -1, 27, -1, 29, 30, 31, 32, -1, -1, + -1, -1, 37, -1, 39, 40, -1, 42, 43, -1, + 45, -1, 47, -1, 49, 50, 51, 52, 53, 54, + 55, -1, 57, -1, 59, 60, -1, -1, -1, -1, + -1, 66, 70, 68, 69, 70, 74, -1, -1, -1, + 75, 79, 77, -1, -1, 80, -1, -1, 83, -1, + -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 100, -1, -1, 103, -1, + -1, -1, 107, 108, -1, -1, -1, -1, 113, 114, + 115, 1, -1, -1, 119, 120, 121, -1, 126, 127, + 125, 11, 12, 13, 129, 15, -1, 135, 133, -1, + 20, 21, 22, 23, -1, -1, 144, 27, 146, 29, + 30, 31, 32, -1, -1, 48, -1, 37, -1, 39, + 40, -1, 42, 43, -1, 45, -1, 47, -1, 49, + 50, 51, 52, 53, 54, 55, -1, 57, -1, 59, + 60, -1, -1, -1, -1, -1, 66, -1, 68, -1, + 70, -1, -1, -1, -1, 75, -1, 77, -1, -1, + 80, -1, -1, 83, -1, -1, -1, 87, 88, -1, + -1, -1, -1, -1, -1, 108, 109, 110, 111, 112, + 100, -1, -1, 103, -1, -1, -1, 107, 108, -1, + 123, 124, -1, 113, 114, 115, 129, -1, -1, 119, + 120, 121, -1, -1, 1, 125, -1, -1, -1, 129, + 130, -1, -1, 133, 11, 12, 13, -1, 15, -1, + -1, -1, -1, 20, 21, 22, 23, -1, -1, -1, + 27, -1, 29, 30, 31, 32, -1, -1, -1, -1, + 37, -1, 39, 40, -1, 42, 43, -1, 45, -1, + 47, -1, 49, 50, 51, 52, 53, 54, 55, -1, + 57, -1, 59, 60, -1, -1, -1, -1, -1, 66, + -1, 68, -1, 70, -1, -1, -1, -1, 75, -1, + 77, -1, -1, 80, -1, -1, 83, -1, -1, -1, + 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 100, -1, -1, 103, -1, -1, -1, + 107, 108, -1, -1, -1, -1, 113, 114, 115, -1, + -1, -1, 119, 120, 121, -1, -1, 1, 125, -1, + -1, -1, 129, 130, -1, -1, 133, 11, 12, 13, + -1, 15, -1, -1, -1, -1, 20, 21, 22, 23, + -1, -1, -1, 27, -1, 29, 30, 31, 32, -1, + -1, -1, -1, 37, -1, 39, 40, -1, 42, 43, + -1, 45, -1, 47, -1, 49, 50, 51, 52, 53, + 54, 55, -1, 57, -1, 59, 60, -1, -1, -1, + -1, -1, 66, -1, 68, -1, 70, -1, -1, -1, + -1, 75, -1, 77, -1, -1, 80, -1, -1, 83, + -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, -1, -1, 103, + -1, -1, -1, 107, 108, -1, -1, -1, -1, 113, + 114, 115, -1, -1, -1, 119, 120, 121, -1, -1, + 1, 125, -1, -1, -1, 129, 130, -1, -1, 133, + 11, 12, 13, -1, 15, -1, -1, -1, -1, 20, + 21, 22, 23, -1, -1, -1, 27, -1, 29, 30, + 31, 32, -1, -1, -1, -1, 37, -1, 39, 40, + -1, 42, 43, -1, 45, -1, 47, -1, 49, 50, + 51, 52, 53, 54, 55, -1, 57, -1, 59, 60, + -1, -1, -1, -1, -1, 66, -1, 68, -1, 70, + -1, -1, -1, -1, 75, -1, 77, -1, -1, 80, + -1, -1, 83, -1, -1, -1, 87, 88, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, + -1, -1, 103, -1, -1, -1, 107, 108, -1, -1, + -1, -1, 113, 114, 115, -1, -1, -1, 119, 120, + 121, 0, 1, -1, 125, -1, -1, -1, 129, 130, + 9, 10, 133, 12, 13, -1, 15, -1, -1, -1, + -1, 20, 21, 22, 23, -1, 25, 26, -1, 28, + 29, 30, 31, -1, 33, 34, 35, -1, 37, -1, + -1, -1, 41, -1, 43, -1, 45, -1, -1, 48, + 49, 1, 51, -1, -1, 54, 55, -1, -1, -1, + 10, 60, 12, 13, -1, 15, -1, -1, -1, 68, 20, 21, 22, 23, -1, 25, -1, -1, 28, 29, - 30, 31, -1, 33, 34, 35, -1, 37, 38, -1, - 123, 124, 42, -1, 44, -1, 46, -1, -1, 49, - 50, -1, 52, -1, -1, 55, 56, 140, 141, -1, - -1, 61, -1, -1, -1, -1, -1, -1, -1, 69, - -1, -1, 11, 12, 13, -1, 15, -1, -1, -1, - -1, 20, 21, 22, 23, -1, -1, -1, 27, -1, - 29, 30, 31, 32, -1, -1, -1, -1, 37, -1, - -1, 40, 41, -1, 43, 44, -1, 46, -1, 48, - -1, 50, 51, 52, 53, 54, 55, 56, -1, 58, - -1, 60, 61, 123, 124, -1, -1, -1, 67, -1, - 69, -1, 71, -1, -1, -1, -1, 76, -1, 78, - 140, 141, 81, -1, -1, 84, -1, -1, -1, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 101, -1, -1, -1, 105, 106, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, -1, -1, - -1, 130, -1, -1, 133, -1, -1, 136, 11, 12, - 13, 140, 15, -1, -1, 144, -1, 20, 21, 22, - 23, -1, -1, -1, 27, -1, 29, 30, 31, 32, - -1, -1, -1, -1, 37, -1, -1, 40, 41, -1, - 43, 44, -1, 46, -1, 48, -1, 50, 51, 52, - 53, 54, 55, 56, -1, 58, -1, 60, 61, -1, - -1, -1, -1, -1, 67, -1, 69, -1, 71, -1, - -1, -1, -1, 76, -1, 78, -1, -1, 81, -1, - -1, 84, -1, -1, -1, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, - -1, -1, 105, 106, -1, -1, -1, -1, -1, -1, + 30, 31, -1, 33, 34, 35, -1, 37, -1, -1, + -1, 41, -1, 43, -1, 45, -1, -1, 48, 49, + -1, 51, -1, -1, 54, 55, -1, -1, 107, -1, + 60, -1, 111, 112, 113, 114, -1, -1, 68, -1, + -1, 120, 121, -1, 123, -1, -1, -1, -1, -1, + 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, 124, 125, 126, -1, -1, -1, 130, -1, -1, - -1, -1, -1, 136, -1, 12, 13, 140, 15, -1, - -1, 144, -1, 20, 21, 22, 23, -1, -1, -1, - -1, -1, 29, 30, 31, 68, -1, -1, -1, 72, - 37, 74, 75, -1, 77, -1, 79, 44, -1, 46, - -1, -1, -1, 50, -1, 52, -1, 90, 55, 56, - -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, - 103, -1, 69, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 49, -1, -1, - 123, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 134, 135, -1, 137, 138, -1, -1, -1, -1, - 143, 144, 145, 146, 147, 148, 149, -1, -1, 152, - 153, -1, 49, 156, -1, -1, -1, 124, -1, 126, + -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, + -1, 111, 112, 113, 114, 12, 13, -1, 15, -1, + -1, -1, -1, 20, 21, 22, 23, -1, 25, 129, + 130, 28, 29, 30, 31, -1, 33, 34, 35, -1, + 37, -1, -1, -1, 41, -1, 43, -1, 45, -1, + -1, 48, 49, -1, 51, -1, -1, 54, 55, -1, + -1, -1, -1, 60, -1, -1, -1, -1, -1, -1, + -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 140, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 134, 135, -1, -1, -1, -1, 140, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, -1, 72, -1, 74, 75, 123, 77, -1, 79, - -1, -1, 82, -1, -1, -1, 86, 134, 135, -1, - -1, 91, -1, 140, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 137, -1, -1, - -1, -1, -1, -1, -1, 145, 146, 147, 148, 149, - -1, -1, 152, 153, -1, -1, 156 + -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, + 12, 13, -1, 15, 111, 112, 113, 114, 20, 21, + 22, 23, -1, -1, -1, 27, -1, 29, 30, 31, + 32, -1, 129, 130, -1, 37, -1, 39, 40, -1, + 42, 43, -1, 45, -1, 47, -1, 49, 50, 51, + 52, 53, 54, 55, -1, 57, -1, 59, 60, -1, + -1, -1, -1, -1, 66, -1, 68, -1, 70, -1, + -1, -1, -1, 75, -1, 77, -1, -1, 80, -1, + -1, 83, -1, -1, -1, 87, 88, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, -1, + -1, 103, -1, -1, -1, 107, 108, -1, -1, -1, + -1, 113, 114, 115, -1, -1, -1, 119, -1, -1, + 122, -1, -1, 125, 11, 12, 13, 129, 15, -1, + -1, 133, -1, 20, 21, 22, 23, -1, -1, -1, + 27, -1, 29, 30, 31, 32, -1, -1, -1, -1, + 37, -1, 39, 40, -1, 42, 43, -1, 45, -1, + 47, -1, 49, 50, 51, 52, 53, 54, 55, -1, + 57, -1, 59, 60, -1, -1, -1, -1, -1, 66, + -1, 68, -1, 70, -1, -1, -1, -1, 75, -1, + 77, -1, -1, 80, -1, -1, 83, -1, -1, -1, + 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 100, -1, -1, 103, -1, -1, -1, + 107, 108, -1, -1, -1, -1, 113, 114, 115, -1, + -1, -1, 119, -1, -1, -1, -1, -1, 125, -1, + 12, 13, 129, 15, -1, -1, 133, -1, 20, 21, + 22, 23, -1, -1, -1, -1, -1, 29, 30, 31, + 33, -1, -1, -1, -1, 37, -1, -1, -1, -1, + -1, 43, -1, 45, -1, -1, -1, 49, -1, 51, + -1, -1, 54, 55, -1, -1, -1, -1, 60, -1, + -1, -1, -1, -1, 67, -1, 68, -1, 71, -1, + 73, 74, -1, 76, -1, 78, -1, -1, -1, -1, + -1, -1, 71, -1, 73, 74, 89, 76, -1, 78, + -1, -1, 81, -1, -1, -1, 85, -1, -1, -1, + -1, 90, 105, -1, -1, -1, -1, -1, 111, -1, + 113, 113, 114, 115, -1, -1, 105, -1, -1, -1, + 123, 124, -1, 126, 127, -1, -1, 129, -1, 132, + 133, 134, 135, 136, 137, 138, -1, 126, 141, 142, + -1, -1, 145, -1, -1, 134, 135, 136, 137, 138, + -1, -1, 141, 142, -1, -1, 145 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 160, 0, 1, 9, 10, 12, 13, 15, 20, + 0, 149, 0, 1, 9, 10, 12, 13, 15, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 33, - 34, 35, 37, 42, 44, 46, 49, 50, 52, 55, - 56, 61, 69, 105, 123, 124, 131, 132, 134, 140, - 162, 163, 165, 166, 167, 171, 173, 175, 178, 179, - 180, 181, 186, 187, 188, 193, 194, 200, 202, 203, - 204, 205, 209, 284, 286, 140, 140, 105, 134, 135, - 221, 140, 221, 287, 285, 126, 193, 242, 249, 221, - 140, 140, 140, 92, 104, 254, 136, 242, 243, 244, - 245, 221, 183, 93, 94, 95, 96, 196, 197, 199, - 183, 142, 140, 1, 15, 141, 167, 169, 4, 206, - 194, 59, 190, 97, 172, 97, 174, 142, 201, 164, - 210, 49, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 134, 135, 140, 288, 289, 290, 291, 293, 294, 295, - 296, 289, 295, 150, 151, 240, 241, 11, 27, 32, - 40, 41, 43, 48, 51, 53, 54, 58, 60, 67, - 71, 76, 78, 81, 84, 88, 89, 101, 105, 106, - 125, 130, 144, 182, 184, 189, 193, 211, 218, 219, - 223, 224, 225, 231, 232, 243, 244, 263, 265, 266, - 267, 268, 282, 90, 92, 127, 278, 279, 133, 176, - 184, 183, 183, 155, 184, 240, 241, 245, 201, 1, - 70, 163, 184, 199, 199, 199, 141, 15, 72, 74, - 75, 77, 79, 82, 86, 90, 91, 92, 103, 127, - 129, 134, 135, 137, 145, 146, 147, 148, 149, 152, - 153, 156, 163, 168, 169, 171, 173, 175, 178, 184, - 220, 234, 235, 236, 237, 248, 256, 274, 275, 276, - 277, 286, 128, 140, 207, 4, 191, 194, 1, 38, - 141, 161, 165, 173, 175, 177, 178, 193, 284, 286, - 1, 141, 161, 165, 175, 177, 193, 284, 286, 221, - 190, 141, 167, 184, 297, 289, 295, 296, 298, 163, - 163, 163, 163, 163, 163, 163, 289, 163, 163, 163, - 292, 291, 294, 296, 150, 151, 134, 16, 126, 16, - 90, 105, 163, 220, 222, 277, 286, 218, 217, 221, - 102, 250, 252, 253, 278, 217, 217, 250, 220, 252, - 286, 217, 254, 226, 262, 283, 251, 253, 251, 251, - 251, 251, 280, 251, 233, 251, 184, 1, 141, 161, - 165, 178, 141, 141, 92, 184, 190, 286, 184, 163, - 195, 221, 127, 127, 124, 137, 228, 230, 276, 278, - 138, 68, 90, 137, 138, 143, 144, 152, 153, 220, - 237, 238, 246, 247, 286, 137, 138, 154, 155, 100, - 170, 194, 208, 140, 134, 184, 140, 296, 298, 163, - 163, 163, 298, 163, 289, 163, 141, 289, 295, 298, - 142, 131, 163, 212, 213, 143, 255, 154, 255, 163, - 142, 252, 142, 252, 68, 101, 227, 228, 229, 244, - 83, 85, 90, 92, 134, 145, 257, 259, 261, 286, - 288, 233, 233, 62, 63, 64, 66, 270, 157, 281, - 137, 234, 8, 185, 184, 93, 94, 95, 96, 198, - 220, 275, 275, 276, 276, 6, 7, 14, 17, 18, - 19, 24, 36, 41, 45, 48, 57, 58, 134, 141, - 214, 215, 216, 194, 192, 176, 298, 298, 163, 289, - 134, 163, 142, 221, 143, 104, 278, 222, 142, 278, - 142, 233, 94, 198, 280, 259, 71, 75, 80, 137, - 138, 146, 155, 157, 258, 260, 243, 243, 269, 142, - 158, 239, 140, 198, 198, 198, 163, 221, 221, 221, - 142, 134, 141, 216, 141, 298, 222, 278, 278, 198, - 281, 99, 270, 271, 272, 273, 278, 240, 241, 251, - 183, 286, 234, 195, 213, 163, 222, 227, 239, 143, - 65, 138, 47, 264, 141, 142, 233, 273, 163 + 34, 35, 37, 41, 43, 45, 48, 49, 51, 54, + 55, 60, 68, 107, 111, 112, 113, 114, 120, 121, + 123, 129, 150, 151, 153, 154, 155, 159, 161, 163, + 166, 167, 168, 169, 174, 175, 176, 182, 183, 189, + 191, 192, 193, 194, 200, 276, 278, 129, 129, 107, + 123, 124, 212, 129, 212, 279, 277, 115, 182, 233, + 240, 212, 129, 129, 129, 91, 106, 245, 125, 233, + 234, 235, 236, 212, 171, 92, 93, 94, 96, 185, + 186, 188, 4, 195, 171, 131, 151, 203, 204, 129, + 1, 15, 130, 155, 157, 195, 183, 58, 102, 178, + 180, 97, 160, 97, 162, 131, 190, 152, 201, 48, + 108, 109, 110, 111, 112, 123, 124, 129, 280, 281, + 282, 283, 285, 288, 289, 290, 109, 281, 289, 139, + 140, 231, 232, 11, 27, 32, 39, 40, 42, 47, + 50, 52, 53, 57, 59, 66, 70, 75, 77, 80, + 83, 87, 88, 100, 103, 107, 108, 114, 119, 133, + 170, 172, 177, 182, 202, 209, 210, 214, 215, 216, + 222, 223, 234, 235, 254, 256, 257, 258, 259, 274, + 89, 91, 116, 270, 271, 122, 164, 172, 171, 171, + 144, 172, 231, 232, 236, 190, 1, 69, 151, 172, + 188, 188, 188, 196, 197, 4, 130, 15, 71, 73, + 74, 76, 78, 81, 85, 89, 90, 91, 105, 116, + 118, 123, 124, 126, 134, 135, 136, 137, 138, 141, + 142, 145, 151, 156, 157, 159, 161, 163, 166, 172, + 178, 211, 225, 226, 227, 228, 239, 247, 266, 267, + 268, 269, 276, 278, 151, 131, 117, 129, 102, 179, + 183, 1, 130, 153, 161, 163, 165, 166, 182, 276, + 278, 1, 130, 153, 163, 165, 182, 276, 278, 212, + 180, 130, 155, 172, 291, 92, 94, 95, 96, 286, + 92, 286, 287, 284, 283, 288, 290, 139, 140, 123, + 16, 115, 16, 89, 107, 151, 211, 213, 269, 278, + 209, 208, 212, 104, 241, 243, 244, 270, 208, 208, + 241, 89, 91, 213, 243, 208, 245, 217, 253, 275, + 242, 244, 242, 242, 242, 242, 242, 272, 242, 224, + 242, 172, 1, 130, 153, 166, 130, 130, 91, 172, + 180, 212, 278, 172, 151, 184, 212, 183, 114, 198, + 199, 116, 116, 126, 268, 270, 127, 67, 89, 113, + 126, 127, 132, 133, 141, 142, 211, 219, 221, 228, + 229, 237, 238, 278, 126, 127, 143, 144, 156, 101, + 158, 129, 172, 129, 287, 287, 287, 287, 130, 281, + 289, 290, 292, 131, 120, 204, 132, 246, 143, 246, + 151, 131, 243, 131, 67, 103, 218, 219, 220, 235, + 82, 84, 89, 91, 123, 134, 248, 250, 252, 278, + 280, 224, 224, 224, 61, 62, 63, 65, 261, 146, + 273, 126, 225, 8, 173, 172, 183, 114, 211, 92, + 93, 94, 96, 187, 267, 267, 268, 268, 6, 7, + 14, 17, 18, 19, 24, 36, 40, 44, 47, 56, + 57, 123, 130, 178, 205, 206, 207, 181, 164, 151, + 281, 289, 292, 290, 123, 131, 212, 132, 106, 270, + 213, 131, 265, 270, 224, 93, 187, 272, 250, 70, + 74, 79, 126, 127, 135, 144, 146, 249, 251, 234, + 234, 260, 131, 147, 230, 129, 187, 187, 187, 151, + 212, 212, 212, 131, 123, 151, 102, 130, 207, 130, + 213, 265, 136, 187, 273, 99, 261, 262, 263, 264, + 270, 231, 232, 242, 171, 212, 278, 225, 184, 204, + 151, 213, 270, 218, 230, 132, 64, 127, 46, 255, + 130, 131, 224, 264, 213 }; #define yyerrok (yyerrstatus = 0) @@ -2691,45 +2639,40 @@ yyreduce: switch (yyn) { case 3: -#line 453 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 457 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { ;} break; case 4: -#line 455 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 459 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { ;} break; case 5: -#line 457 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 461 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->error_level_ = 1; ;} break; case 6: -#line 460 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 464 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->error_level_ = 1; ;} break; case 7: -#line 467 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { (yyval.scm) = (yyvsp[(2) - (2)].scm); ;} - break; - - case 8: -#line 471 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 471 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), (yyvsp[(1) - (1)].scm)); ;} break; - case 9: -#line 474 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 8: +#line 474 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Book *book = (yyvsp[(1) - (1)].book); SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-book-handler"); @@ -2738,8 +2681,8 @@ yyreduce: ;} break; - case 10: -#line 480 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 9: +#line 480 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Book *bookpart = (yyvsp[(1) - (1)].book); SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-bookpart-handler"); @@ -2748,19 +2691,19 @@ yyreduce: ;} break; - case 11: -#line 486 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 10: +#line 486 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Score *score = (yyvsp[(1) - (1)].score); - + SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-score-handler"); scm_call_2 (proc, PARSER->self_scm (), score->self_scm ()); score->unprotect (); ;} break; - case 12: -#line 493 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 11: +#line 493 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *music = unsmob_music ((yyvsp[(1) - (1)].scm)); SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-music-handler"); @@ -2768,24 +2711,24 @@ yyreduce: ;} break; - case 13: -#line 498 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 12: +#line 498 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-text-handler"); scm_call_2 (proc, PARSER->self_scm (), scm_list_1 ((yyvsp[(1) - (1)].scm))); ;} break; - case 14: -#line 502 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 13: +#line 502 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-text-handler"); scm_call_2 (proc, PARSER->self_scm (), (yyvsp[(1) - (1)].scm)); ;} break; - case 15: -#line 506 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 14: +#line 506 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM id = SCM_EOL; Output_def * od = (yyvsp[(1) - (1)].outputdef); @@ -2802,43 +2745,51 @@ yyreduce: ;} break; - case 18: -#line 529 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 17: +#line 529 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = get_header (PARSER); PARSER->lexer_->add_scope ((yyval.scm)); ;} break; - case 19: -#line 533 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 18: +#line 533 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - + ;} break; - case 20: -#line 539 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 19: +#line 539 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = PARSER->lexer_->remove_scope (); ;} break; - case 21: -#line 548 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 20: +#line 548 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 22: -#line 549 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 21: +#line 549 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 23: -#line 553 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 22: +#line 553 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->set_identifier ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm)); + ;} + break; + case 23: +#line 556 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + SCM path = scm_cons (scm_string_to_symbol ((yyvsp[(1) - (4)].scm)), (yyvsp[(2) - (4)].scm)); + PARSER->lexer_->set_identifier (path, (yyvsp[(4) - (4)].scm)); + ; /* TODO: devise standard for protection in parser. @@ -2850,12 +2801,12 @@ all objects can be unprotected as soon as they're here. break; case 24: -#line 564 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 568 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { ;} break; case 25: -#line 569 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 573 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].score)->self_scm (); (yyvsp[(1) - (1)].score)->unprotect (); @@ -2863,7 +2814,7 @@ all objects can be unprotected as soon as they're here. break; case 26: -#line 573 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 577 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].book)->self_scm (); (yyvsp[(1) - (1)].book)->unprotect (); @@ -2871,7 +2822,7 @@ all objects can be unprotected as soon as they're here. break; case 27: -#line 577 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 581 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].book)->self_scm (); (yyvsp[(1) - (1)].book)->unprotect (); @@ -2879,7 +2830,7 @@ all objects can be unprotected as soon as they're here. break; case 28: -#line 581 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 585 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].outputdef)->self_scm (); (yyvsp[(1) - (1)].outputdef)->unprotect (); @@ -2887,14 +2838,14 @@ all objects can be unprotected as soon as they're here. break; case 29: -#line 585 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 589 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 30: -#line 588 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 592 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { /* Hack: Create event-chord around standalone events. Prevents the identifier from being interpreted as a post-event. */ @@ -2910,72 +2861,86 @@ all objects can be unprotected as soon as they're here. break; case 31: -#line 600 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 604 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 32: -#line 603 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 607 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 33: -#line 606 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 610 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 34: -#line 609 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 613 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 35: -#line 612 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 616 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 36: -#line 615 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 619 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); + (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 37: -#line 622 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 622 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = (yyvsp[(3) - (4)].scm); + (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); ;} break; case 38: -#line 628 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 625 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = (yyvsp[(1) - (1)].scm); + ;} + break; + + case 39: +#line 632 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = (yyvsp[(3) - (4)].scm); + ;} + break; + + case 40: +#line 638 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = Context_def::make_scm (); unsmob_context_def ((yyval.scm))->origin ()->set_spot ((yyloc)); ;} break; - case 39: -#line 632 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 41: +#line 642 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); unsmob_context_def ((yyval.scm))->origin ()->set_spot ((yyloc)); ;} break; - case 40: -#line 636 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 42: +#line 646 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Context_def*td = unsmob_context_def ((yyval.scm)); @@ -2989,23 +2954,35 @@ all objects can be unprotected as soon as they're here. ;} break; - case 41: -#line 647 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 43: +#line 657 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - unsmob_context_def ((yyval.scm))->add_context_mod ((yyvsp[(2) - (2)].scm)); + unsmob_context_def ((yyval.scm))->add_context_mod ((yyvsp[(2) - (2)].scm)); ;} break; - case 42: -#line 655 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 44: +#line 660 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + Context_def *td = unsmob_context_def ((yyval.scm)); + SCM new_mods = unsmob_context_mod ((yyvsp[(2) - (2)].scm))->get_mods (); + for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) { + td->add_context_mod (scm_car (m)); + } + ;} + break; + + case 45: +#line 672 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book) = (yyvsp[(3) - (4)].book); pop_paper (PARSER); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F); ;} break; - case 43: -#line 665 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 46: +#line 683 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book) = new Book; init_papers (PARSER); @@ -3013,21 +2990,25 @@ all objects can be unprotected as soon as they're here. (yyval.book)->paper_ = dynamic_cast (unsmob_output_def (PARSER->lexer_->lookup_identifier ("$defaultpaper"))->clone ()); (yyval.book)->paper_->unprotect (); push_paper (PARSER, (yyval.book)->paper_); - (yyval.book)->header_ = PARSER->lexer_->lookup_identifier ("$defaultheader"); + (yyval.book)->header_ = PARSER->lexer_->lookup_identifier ("$defaultheader"); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-book"), (yyval.book)->self_scm ()); + PARSER->lexer_->set_identifier (ly_symbol2scm ("book-output-suffix"), SCM_BOOL_F); + PARSER->lexer_->set_identifier (ly_symbol2scm ("book-filename"), SCM_BOOL_F); ;} break; - case 44: -#line 674 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 47: +#line 695 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book) = unsmob_book ((yyvsp[(1) - (1)].scm)); (yyval.book)->protect (); (yyval.book)->origin ()->set_spot ((yyloc)); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-book"), (yyvsp[(1) - (1)].scm)); ;} break; - case 45: -#line 679 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 48: +#line 701 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book)->paper_ = (yyvsp[(2) - (2)].outputdef); (yyvsp[(2) - (2)].outputdef)->unprotect (); @@ -3035,8 +3016,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 46: -#line 684 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 49: +#line 706 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Book *bookpart = (yyvsp[(2) - (2)].book); SCM proc = PARSER->lexer_->lookup_identifier ("book-bookpart-handler"); @@ -3045,8 +3026,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 47: -#line 690 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 50: +#line 712 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Score *score = (yyvsp[(2) - (2)].score); SCM proc = PARSER->lexer_->lookup_identifier ("book-score-handler"); @@ -3055,8 +3036,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 48: -#line 696 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 51: +#line 718 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *music = unsmob_music ((yyvsp[(2) - (2)].scm)); SCM proc = PARSER->lexer_->lookup_identifier ("book-music-handler"); @@ -3064,31 +3045,31 @@ all objects can be unprotected as soon as they're here. ;} break; - case 49: -#line 701 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 52: +#line 723 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM proc = PARSER->lexer_->lookup_identifier ("book-text-handler"); scm_call_2 (proc, (yyval.book)->self_scm (), scm_list_1 ((yyvsp[(2) - (2)].scm))); ;} break; - case 50: -#line 705 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 53: +#line 727 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM proc = PARSER->lexer_->lookup_identifier ("book-text-handler"); scm_call_2 (proc, (yyval.book)->self_scm (), (yyvsp[(2) - (2)].scm)); ;} break; - case 51: -#line 709 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 54: +#line 731 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book)->header_ = (yyvsp[(2) - (2)].scm); ;} break; - case 52: -#line 712 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 55: +#line 734 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book)->paper_ = 0; (yyval.book)->scores_ = SCM_EOL; @@ -3096,47 +3077,43 @@ all objects can be unprotected as soon as they're here. ;} break; - case 53: -#line 717 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.book)->user_key_ = ly_scm2string ((yyvsp[(2) - (2)].scm)); - ;} - break; - - case 54: -#line 723 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 56: +#line 742 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book) = (yyvsp[(3) - (4)].book); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F); ;} break; - case 55: -#line 729 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 57: +#line 749 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book) = new Book; (yyval.book)->origin ()->set_spot ((yyloc)); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), (yyval.book)->self_scm ()); ;} break; - case 56: -#line 733 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 58: +#line 754 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book) = unsmob_book ((yyvsp[(1) - (1)].scm)); (yyval.book)->protect (); (yyval.book)->origin ()->set_spot ((yyloc)); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), (yyvsp[(1) - (1)].scm)); ;} break; - case 57: -#line 738 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 59: +#line 760 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book)->paper_ = (yyvsp[(2) - (2)].outputdef); (yyvsp[(2) - (2)].outputdef)->unprotect (); ;} break; - case 58: -#line 742 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 60: +#line 764 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Score *score = (yyvsp[(2) - (2)].score); SCM proc = PARSER->lexer_->lookup_identifier ("bookpart-score-handler"); @@ -3145,8 +3122,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 59: -#line 748 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 61: +#line 770 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *music = unsmob_music ((yyvsp[(2) - (2)].scm)); SCM proc = PARSER->lexer_->lookup_identifier ("bookpart-music-handler"); @@ -3154,53 +3131,46 @@ all objects can be unprotected as soon as they're here. ;} break; - case 60: -#line 753 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 62: +#line 775 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM proc = PARSER->lexer_->lookup_identifier ("bookpart-text-handler"); scm_call_2 (proc, (yyval.book)->self_scm (), scm_list_1 ((yyvsp[(2) - (2)].scm))); ;} break; - case 61: -#line 757 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 63: +#line 779 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM proc = PARSER->lexer_->lookup_identifier ("bookpart-text-handler"); scm_call_2 (proc, (yyval.book)->self_scm (), (yyvsp[(2) - (2)].scm)); ;} break; - case 62: -#line 761 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 64: +#line 783 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book)->header_ = (yyvsp[(2) - (2)].scm); ;} break; - case 63: -#line 764 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 65: +#line 786 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.book)->paper_ = 0; (yyval.book)->scores_ = SCM_EOL; ;} break; - case 64: -#line 768 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.book)->user_key_ = ly_scm2string ((yyvsp[(2) - (2)].scm)); - ;} - break; - - case 65: -#line 774 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 66: +#line 793 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.score) = (yyvsp[(3) - (4)].score); ;} break; - case 66: -#line 780 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 67: +#line 799 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM m = (yyvsp[(1) - (1)].scm); SCM scorify = ly_lily_module_constant ("scorify-music"); @@ -3213,8 +3183,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 67: -#line 790 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 68: +#line 809 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.score) = unsmob_score ((yyvsp[(1) - (1)].scm)); (yyval.score)->protect (); @@ -3222,27 +3192,20 @@ all objects can be unprotected as soon as they're here. ;} break; - case 68: -#line 795 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.score)->user_key_ = ly_scm2string ((yyvsp[(2) - (2)].scm)); - ;} - break; - case 69: -#line 798 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 814 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.score)->set_header ((yyvsp[(2) - (2)].scm)); ;} break; case 70: -#line 801 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 817 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if ((yyvsp[(2) - (2)].outputdef)->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T) { PARSER->parser_error ((yylsp[(2) - (2)]), _("\\paper cannot be used in \\score, use \\layout instead")); - + } else { @@ -3253,14 +3216,14 @@ all objects can be unprotected as soon as they're here. break; case 71: -#line 813 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 829 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.score)->error_found_ = true; ;} break; case 72: -#line 824 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 840 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.outputdef) = (yyvsp[(1) - (1)].outputdef); if ((yyval.outputdef)->lookup_variable (ly_symbol2scm ("is-paper")) != SCM_BOOL_T) @@ -3273,7 +3236,7 @@ all objects can be unprotected as soon as they're here. break; case 73: -#line 837 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 853 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.outputdef) = (yyvsp[(1) - (2)].outputdef); @@ -3283,7 +3246,7 @@ all objects can be unprotected as soon as they're here. break; case 74: -#line 846 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 862 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.outputdef) = get_paper (PARSER); (yyval.outputdef)->input_origin_ = (yyloc); @@ -3292,7 +3255,7 @@ all objects can be unprotected as soon as they're here. break; case 75: -#line 851 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 867 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Output_def *p = get_midi (PARSER); (yyval.outputdef) = p; @@ -3301,7 +3264,7 @@ all objects can be unprotected as soon as they're here. break; case 76: -#line 856 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 872 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Output_def *p = get_layout (PARSER); @@ -3311,7 +3274,7 @@ all objects can be unprotected as soon as they're here. break; case 77: -#line 865 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 881 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_initial_state (); (yyval.outputdef) = (yyvsp[(1) - (1)].outputdef); @@ -3319,7 +3282,7 @@ all objects can be unprotected as soon as they're here. break; case 78: -#line 872 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 888 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.outputdef) = (yyvsp[(1) - (2)].outputdef); (yyval.outputdef)->input_origin_.set_spot ((yyloc)); @@ -3327,7 +3290,7 @@ all objects can be unprotected as soon as they're here. break; case 79: -#line 876 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 892 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyvsp[(1) - (3)].outputdef)->unprotect (); @@ -3341,70 +3304,56 @@ all objects can be unprotected as soon as they're here. break; case 80: -#line 886 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 902 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { ;} break; case 81: -#line 889 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 905 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { assign_context_def ((yyval.outputdef), (yyvsp[(2) - (2)].scm)); ;} break; case 82: -#line 892 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 908 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { ;} break; case 83: -#line 898 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 914 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), SCM_BOOL_F, (yyvsp[(2) - (4)].scm), scm_int2num ((yyvsp[(4) - (4)].i))); + (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), SCM_EOL, (yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm)); ;} break; case 84: -#line 901 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 917 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), make_simple_markup((yyvsp[(2) - (5)].scm)), (yyvsp[(3) - (5)].scm), scm_int2num ((yyvsp[(5) - (5)].i))); + (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(5) - (5)].scm)); ;} break; case 85: -#line 904 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 920 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), scm_int2num ((yyvsp[(5) - (5)].i))); + (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), (yyvsp[(2) - (2)].scm)); ;} break; case 86: -#line 907 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = MAKE_SYNTAX ("tempoText", (yyloc), make_simple_markup((yyvsp[(2) - (2)].scm)) ); - ;} - break; - - case 87: -#line 910 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = MAKE_SYNTAX ("tempoText", (yyloc), (yyvsp[(2) - (2)].scm) ); - ;} - break; - - case 88: -#line 923 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 933 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons (SCM_EOL, SCM_EOL); ;} break; - case 89: -#line 926 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 87: +#line 936 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM s = (yyval.scm); SCM c = scm_cons ((yyvsp[(2) - (2)].scm), SCM_EOL); @@ -3417,18 +3366,18 @@ all objects can be unprotected as soon as they're here. ;} break; - case 90: -#line 936 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 88: +#line 946 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { ;} break; - case 91: -#line 939 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 89: +#line 949 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *m = MY_MAKE_MUSIC("Music", (yyloc)); - // ugh. code dup + // ugh. code dup m->set_property ("error-found", SCM_BOOL_T); SCM s = (yyval.scm); SCM c = scm_cons (m->self_scm (), SCM_EOL); @@ -3442,149 +3391,197 @@ all objects can be unprotected as soon as they're here. ;} break; - case 94: -#line 961 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 92: +#line 971 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 95: -#line 964 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 93: +#line 974 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_car ((yyvsp[(3) - (4)].scm)); ;} break; - case 96: -#line 972 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 94: +#line 982 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("repeat", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(4) - (5)].scm), (yyvsp[(5) - (5)].scm)); ;} break; - case 97: -#line 978 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 95: +#line 988 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("sequential-music", (yyloc), scm_car ((yyvsp[(3) - (4)].scm))); ;} break; - case 98: -#line 981 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 96: +#line 991 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("sequential-music", (yyloc), scm_car ((yyvsp[(2) - (3)].scm))); ;} break; - case 99: -#line 987 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 97: +#line 997 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("simultaneous-music", (yyloc), scm_car ((yyvsp[(3) - (4)].scm))); ;} break; - case 100: -#line 990 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 98: +#line 1000 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("simultaneous-music", (yyloc), scm_car ((yyvsp[(2) - (3)].scm))); ;} break; + case 103: +#line 1013 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { PARSER->lexer_->push_initial_state (); ;} + break; + + case 104: +#line 1014 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + PARSER->lexer_->pop_state (); + (yyval.scm) = (yyvsp[(4) - (5)].scm); + ;} + break; + case 105: -#line 1003 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { (yyval.scm) = SCM_EOL; ;} +#line 1019 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = (yyvsp[(2) - (2)].scm); + ;} break; case 106: -#line 1004 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { PARSER->lexer_->push_initial_state (); ;} +#line 1023 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = (yyvsp[(1) - (1)].scm); + ;} break; case 107: -#line 1006 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 1029 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - PARSER->lexer_->pop_state (); - (yyval.scm) = (yyvsp[(4) - (5)].scm); - ;} + (yyval.scm) = SCM_EOL; + ;} break; case 108: -#line 1013 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { (yyval.scm) = SCM_EOL; ;} +#line 1033 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = (yyvsp[(1) - (1)].scm); + ;} break; case 109: -#line 1014 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 1039 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm)); - ;} + (yyval.scm) = Context_mod ().smobbed_copy (); + ;} break; case 110: -#line 1020 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} +#line 1042 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + unsmob_context_mod ((yyvsp[(1) - (2)].scm))->add_context_mod ((yyvsp[(2) - (2)].scm)); + ;} break; case 111: -#line 1021 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} +#line 1045 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + Context_mod *md = unsmob_context_mod ((yyvsp[(2) - (2)].scm)); + if (md) + unsmob_context_mod ((yyvsp[(1) - (2)].scm))->add_context_mods (md->get_mods ()); + ;} break; case 112: -#line 1025 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 1053 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; case 113: -#line 1026 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 1054 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} + break; + + case 114: +#line 1058 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} + break; + + case 115: +#line 1059 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 116: -#line 1039 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 118: +#line 1072 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 117: -#line 1045 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 119: +#line 1078 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 118: -#line 1048 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 120: +#line 1081 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 119: -#line 1053 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 121: +#line 1084 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); + ;} + break; + + case 122: +#line 1089 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 120: -#line 1056 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 123: +#line 1092 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 121: -#line 1059 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 124: +#line 1095 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 122: -#line 1064 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 125: +#line 1098 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); + ;} + break; + + case 126: +#line 1103 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { /* This is for 0-ary functions, so they don't need to read a lookahead token */ @@ -3592,60 +3589,68 @@ all objects can be unprotected as soon as they're here. ;} break; - case 125: -#line 1074 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 129: +#line 1113 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_append2 (scm_list_2 ((yyvsp[(1) - (2)].scm), make_input ((yyloc))), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL)); ;} break; - case 126: -#line 1081 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 130: +#line 1120 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 127: -#line 1082 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 131: +#line 1121 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(2) - (2)].scm); ;} break; - case 128: -#line 1089 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 132: +#line 1128 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = run_music_function (PARSER, (yyvsp[(1) - (1)].scm)); ;} break; - case 129: -#line 1092 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 133: +#line 1131 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(5) - (5)].scm), (yyvsp[(4) - (5)].scm), SCM_BOOL_F); + Context_mod *ctxmod = unsmob_context_mod ((yyvsp[(4) - (5)].scm)); + SCM mods = SCM_EOL; + if (ctxmod) + mods = ctxmod->get_mods (); + (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(5) - (5)].scm), mods, SCM_BOOL_F); ;} break; - case 130: -#line 1095 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 134: +#line 1138 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(5) - (5)].scm), (yyvsp[(4) - (5)].scm), SCM_BOOL_T); + Context_mod *ctxmod = unsmob_context_mod ((yyvsp[(4) - (5)].scm)); + SCM mods = SCM_EOL; + if (ctxmod) + mods = ctxmod->get_mods (); + (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(5) - (5)].scm), mods, SCM_BOOL_T); ;} break; - case 131: -#line 1099 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 135: +#line 1146 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("time-scaled-music", (yyloc), (yyvsp[(2) - (3)].scm), (yyvsp[(3) - (3)].scm)); ;} break; - case 132: -#line 1102 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 136: +#line 1149 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 133: -#line 1103 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 137: +#line 1150 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Pitch from = *unsmob_pitch ((yyvsp[(2) - (4)].scm)); Pitch to = *unsmob_pitch ((yyvsp[(3) - (4)].scm)); @@ -3654,8 +3659,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 134: -#line 1109 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 138: +#line 1156 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if ((yyvsp[(1) - (2)].scm) == ly_symbol2scm ("chords")) { @@ -3669,10 +3674,14 @@ all objects can be unprotected as soon as they're here. ;} break; - case 135: -#line 1120 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 139: +#line 1167 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), (yyvsp[(1) - (3)].scm), SCM_EOL, (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), SCM_BOOL_T); + Context_mod *ctxmod = unsmob_context_mod ((yyvsp[(2) - (3)].scm)); + SCM mods = SCM_EOL; + if (ctxmod) + mods = ctxmod->get_mods (); + (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), (yyvsp[(1) - (3)].scm), SCM_EOL, (yyvsp[(3) - (3)].scm), mods, SCM_BOOL_T); if ((yyvsp[(1) - (3)].scm) == ly_symbol2scm ("ChordNames")) { (yyval.scm) = MAKE_SYNTAX ("unrelativable-music", (yyloc), (yyval.scm)); @@ -3681,18 +3690,18 @@ all objects can be unprotected as soon as they're here. ;} break; - case 136: -#line 1128 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 140: +#line 1179 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 137: -#line 1129 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 141: +#line 1180 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 138: -#line 1133 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 142: +#line 1184 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM nn = PARSER->lexer_->lookup_identifier ("pitchnames"); PARSER->lexer_->push_note_state (alist_to_hashq (nn)); @@ -3701,8 +3710,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 139: -#line 1140 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 143: +#line 1191 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM nn = PARSER->lexer_->lookup_identifier ("drumPitchNames"); PARSER->lexer_->push_note_state (alist_to_hashq (nn)); @@ -3711,8 +3720,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 140: -#line 1146 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 144: +#line 1197 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_figuredbass_state (); @@ -3720,8 +3729,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 141: -#line 1151 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 145: +#line 1202 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM nn = PARSER->lexer_->lookup_identifier ("chordmodifiers"); PARSER->lexer_->chordmodifier_tab_ = alist_to_hashq (nn); @@ -3732,15 +3741,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 142: -#line 1160 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 146: +#line 1211 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_lyric_state (); (yyval.scm) = ly_symbol2scm ("lyrics"); ;} break; - case 143: -#line 1166 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 147: +#line 1217 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM nn = PARSER->lexer_->lookup_identifier ("drumPitchNames"); PARSER->lexer_->push_note_state (alist_to_hashq (nn)); @@ -3749,8 +3758,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 144: -#line 1172 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 148: +#line 1223 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_figuredbass_state (); @@ -3758,8 +3767,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 145: -#line 1177 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 149: +#line 1228 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM nn = PARSER->lexer_->lookup_identifier ("chordmodifiers"); PARSER->lexer_->chordmodifier_tab_ = alist_to_hashq (nn); @@ -3769,36 +3778,36 @@ all objects can be unprotected as soon as they're here. ;} break; - case 146: -#line 1185 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 150: +#line 1236 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_lyric_state (); (yyval.scm) = ly_symbol2scm ("Lyrics"); ;} break; - case 147: -#line 1192 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 151: +#line 1243 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Pitch start = *unsmob_pitch ((yyvsp[(2) - (3)].scm)); (yyval.scm) = make_music_relative (start, (yyvsp[(3) - (3)].scm), (yyloc)); ;} break; - case 148: -#line 1196 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 152: +#line 1247 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Pitch middle_c (0, 0, 0); (yyval.scm) = make_music_relative (middle_c, (yyvsp[(2) - (2)].scm), (yyloc)); ;} break; - case 149: -#line 1203 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 153: +#line 1254 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_lyric_state (); ;} break; - case 150: -#line 1205 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 154: +#line 1256 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { /* Can also use music at the expensive of two S/Rs similar to \repeat \alternative */ @@ -3808,89 +3817,125 @@ all objects can be unprotected as soon as they're here. ;} break; - case 151: -#line 1212 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 155: +#line 1263 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + PARSER->lexer_->push_lyric_state (); ;} + break; + + case 156: +#line 1265 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + PARSER->lexer_->pop_state (); + (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), SCM_EOL); + ;} + break; + + case 157: +#line 1269 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_lyric_state (); ;} break; - case 152: -#line 1214 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 158: +#line 1271 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->pop_state (); (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(1) - (4)].scm)); ;} break; - case 153: -#line 1221 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 159: +#line 1275 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + PARSER->lexer_->push_lyric_state (); + ;} + break; + + case 160: +#line 1277 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + PARSER->lexer_->pop_state (); + (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(1) - (4)].scm)); + ;} + break; + + case 161: +#line 1284 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("add-lyrics", (yyloc), (yyvsp[(1) - (2)].scm), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL)); ;} break; - case 154: -#line 1224 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 162: +#line 1287 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = MAKE_SYNTAX ("add-lyrics", (yyloc), (yyvsp[(1) - (2)].scm), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL)); + ;} + break; + + case 163: +#line 1290 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_lyric_state (); ;} break; - case 155: -#line 1226 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 164: +#line 1292 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->pop_state (); (yyval.scm) = MAKE_SYNTAX ("lyric-combine", (yyloc), (yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm)); ;} break; - case 156: -#line 1233 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 165: +#line 1299 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("context-change", (yyloc), scm_string_to_symbol ((yyvsp[(2) - (4)].scm)), (yyvsp[(4) - (4)].scm)); ;} break; - case 157: -#line 1240 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 166: +#line 1306 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(1) - (1)].scm), SCM_EOL); ;} break; - case 158: -#line 1243 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 167: +#line 1309 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm)); ;} break; - case 159: -#line 1249 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 168: +#line 1315 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_reverse_x ((yyvsp[(1) - (1)].scm), SCM_EOL); ;} break; - case 160: -#line 1255 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 169: +#line 1321 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_3 (ly_symbol2scm ("assign"), scm_string_to_symbol ((yyvsp[(1) - (3)].scm)), (yyvsp[(3) - (3)].scm)); ;} break; - case 161: -#line 1259 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 170: +#line 1325 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_2 (ly_symbol2scm ("unset"), scm_string_to_symbol ((yyvsp[(2) - (2)].scm))); ;} break; - case 162: -#line 1263 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 171: +#line 1329 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_append (scm_list_2 (scm_list_3 (ly_symbol2scm ("push"), scm_string_to_symbol ((yyvsp[(2) - (5)].scm)), (yyvsp[(5) - (5)].scm)), @@ -3898,73 +3943,88 @@ all objects can be unprotected as soon as they're here. ;} break; - case 163: -#line 1268 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 172: +#line 1334 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_3 (ly_symbol2scm ("pop"), scm_string_to_symbol ((yyvsp[(2) - (3)].scm)), (yyvsp[(3) - (3)].scm)); ;} break; - case 164: -#line 1275 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 173: +#line 1341 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("consists"); ;} break; - case 165: -#line 1276 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 174: +#line 1342 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("remove"); ;} break; - case 166: -#line 1278 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 175: +#line 1344 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("accepts"); ;} break; - case 167: -#line 1279 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 176: +#line 1345 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("default-child"); ;} break; - case 168: -#line 1280 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 177: +#line 1346 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("denies"); ;} break; - case 169: -#line 1282 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 178: +#line 1348 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("alias"); ;} break; - case 170: -#line 1283 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 179: +#line 1349 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("translator-type"); ;} break; - case 171: -#line 1284 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 180: +#line 1350 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("description"); ;} break; - case 172: -#line 1285 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 181: +#line 1351 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("context-name"); ;} break; - case 173: -#line 1289 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 182: +#line 1355 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 174: -#line 1290 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 183: +#line 1356 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm)); ;} break; - case 175: -#line 1296 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 184: +#line 1359 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + if (ly_symbol2scm ("consists") != (yyvsp[(1) - (2)].scm)) + { + (yyval.scm) = SCM_EOL; + PARSER->parser_error ((yylsp[(1) - (2)]), _ ("only \\consists takes non-string argument.")); + } + else + { + (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm)); + } + ;} + break; + + case 185: +#line 1373 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if (!is_regular_identifier ((yyvsp[(1) - (1)].scm))) { @@ -3976,18 +4036,18 @@ all objects can be unprotected as soon as they're here. ;} break; - case 176: -#line 1305 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 186: +#line 1382 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_2 (scm_string_to_symbol ((yyvsp[(1) - (3)].scm)), scm_string_to_symbol ((yyvsp[(3) - (3)].scm))); ;} break; - case 177: -#line 1312 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 187: +#line 1389 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_append (scm_list_2 (scm_list_n (scm_car ((yyvsp[(2) - (5)].scm)), + (yyval.scm) = scm_append (scm_list_2 (scm_list_n (scm_car ((yyvsp[(2) - (5)].scm)), ly_symbol2scm ("OverrideProperty"), scm_cadr ((yyvsp[(2) - (5)].scm)), (yyvsp[(5) - (5)].scm), SCM_UNDEFINED), @@ -3995,8 +4055,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 178: -#line 1319 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 188: +#line 1396 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_4 (scm_car ((yyvsp[(2) - (3)].scm)), ly_symbol2scm ("RevertProperty"), @@ -4005,8 +4065,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 179: -#line 1325 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 189: +#line 1402 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_4 (scm_car ((yyvsp[(2) - (4)].scm)), ly_symbol2scm ("PropertySet"), @@ -4015,8 +4075,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 180: -#line 1331 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 190: +#line 1408 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_3 (scm_car ((yyvsp[(2) - (2)].scm)), ly_symbol2scm ("PropertyUnset"), @@ -4024,106 +4084,106 @@ all objects can be unprotected as soon as they're here. ;} break; - case 181: -#line 1339 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 191: +#line 1416 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("property-operation"), scm_cons (PARSER->self_scm (), scm_cons2 (make_input ((yyloc)), SCM_BOOL_F, (yyvsp[(1) - (1)].scm)))); ;} break; - case 182: -#line 1342 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 192: +#line 1419 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("property-operation"), scm_cons (PARSER->self_scm (), scm_cons2 (make_input ((yyloc)), SCM_BOOL_T, (yyvsp[(2) - (2)].scm)))); ;} break; - case 183: -#line 1348 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 193: +#line 1425 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 184: -#line 1351 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 194: +#line 1428 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 185: -#line 1354 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 195: +#line 1431 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_string_append (scm_list_2 ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm))); ;} break; - case 186: -#line 1359 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 196: +#line 1436 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 187: -#line 1362 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 197: +#line 1439 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 188: -#line 1365 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 198: +#line 1442 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 189: -#line 1370 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 199: +#line 1447 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 190: -#line 1373 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 200: +#line 1450 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 191: -#line 1376 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 201: +#line 1453 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 192: -#line 1379 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 202: +#line 1456 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 193: -#line 1382 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 203: +#line 1459 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 194: -#line 1385 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 204: +#line 1462 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); ;} break; - case 195: -#line 1394 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 205: +#line 1471 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM elts = ly_append2 ((yyvsp[(1) - (2)].scm), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL)); @@ -4135,23 +4195,43 @@ all objects can be unprotected as soon as they're here. ;} break; - case 196: -#line 1403 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 206: +#line 1480 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Input i; i.set_location ((yylsp[(1) - (3)]), (yylsp[(3) - (3)])); - (yyval.scm) = MAKE_SYNTAX ("multi-measure-rest", i, (yyvsp[(2) - (3)].scm), (yyvsp[(3) - (3)].scm)); + (yyval.scm) = MAKE_SYNTAX ("repetition-chord", i, + PARSER->lexer_->chord_repetition_.last_chord_, + PARSER->lexer_->chord_repetition_.repetition_function_, + (yyvsp[(2) - (3)].scm), scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL)); ;} break; - case 199: -#line 1415 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 207: +#line 1488 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + Input i; + i.set_location ((yylsp[(1) - (3)]), (yylsp[(3) - (3)])); + (yyval.scm) = MAKE_SYNTAX ("multi-measure-rest", i, (yyvsp[(2) - (3)].scm), + scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL)); + ;} + break; + + case 209: +#line 1499 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + PARSER->lexer_->chord_repetition_.last_chord_ = (yyval.scm); + ;} + break; + + case 210: +#line 1507 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *m = unsmob_music ((yyvsp[(1) - (3)].scm)); SCM dur = unsmob_duration ((yyvsp[(2) - (3)].scm))->smobbed_copy (); SCM es = m->get_property ("elements"); SCM postevs = scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL); - + for (SCM s = es; scm_is_pair (s); s = scm_cdr (s)) unsmob_music (scm_car (s))->set_property ("duration", dur); es = ly_append2 (es, postevs); @@ -4162,27 +4242,27 @@ all objects can be unprotected as soon as they're here. ;} break; - case 200: -#line 1433 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 211: +#line 1525 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("event-chord", (yyloc), scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL)); ;} break; - case 201: -#line 1439 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 212: +#line 1531 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 202: -#line 1440 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 213: +#line 1532 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm)); ;} break; - case 203: -#line 1447 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 214: +#line 1539 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { int q = (yyvsp[(3) - (5)].i); int ex = (yyvsp[(2) - (5)].i); @@ -4210,8 +4290,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 204: -#line 1472 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 215: +#line 1564 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *n = MY_MAKE_MUSIC ("NoteEvent", (yyloc)); n->set_property ("duration", (yyvsp[(2) - (2)].scm)); @@ -4225,15 +4305,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 205: -#line 1483 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { + case 216: +#line 1575 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { (yyval.scm) = run_music_function (PARSER, (yyvsp[(1) - (1)].scm)); ;} break; - case 206: -#line 1488 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 217: +#line 1580 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { 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))))) @@ -4243,50 +4323,50 @@ all objects can be unprotected as soon as they're here. ;} break; - case 207: -#line 1501 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 218: +#line 1593 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_append2 (scm_list_2 ((yyvsp[(1) - (4)].scm), make_input ((yyloc))), scm_reverse_x ((yyvsp[(3) - (4)].scm), scm_list_1 ((yyvsp[(4) - (4)].scm)))); ;} break; - case 208: -#line 1504 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 219: +#line 1596 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_append2 (scm_list_2 ((yyvsp[(1) - (2)].scm), make_input ((yyloc))), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL)); ;} break; - case 209: -#line 1513 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 220: +#line 1605 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_append2 (scm_list_2 ((yyvsp[(1) - (4)].scm), make_input ((yyloc))), scm_reverse_x ((yyvsp[(3) - (4)].scm), scm_list_1 ((yyvsp[(4) - (4)].scm)))); ;} break; - case 210: -#line 1516 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 221: +#line 1608 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_append2 (scm_list_2 ((yyvsp[(1) - (2)].scm), make_input ((yyloc))), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL)); ;} break; - case 211: -#line 1522 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 222: +#line 1614 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 212: -#line 1525 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 223: +#line 1617 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("skip-music", (yyloc), (yyvsp[(2) - (2)].scm)); ;} break; - case 213: -#line 1528 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 224: +#line 1620 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *m = MY_MAKE_MUSIC ("LigatureEvent", (yyloc)); m->set_property ("span-direction", scm_from_int (START)); @@ -4294,8 +4374,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 214: -#line 1533 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 225: +#line 1625 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *m = MY_MAKE_MUSIC ("LigatureEvent", (yyloc)); m->set_property ("span-direction", scm_from_int (STOP)); @@ -4303,15 +4383,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 215: -#line 1538 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 226: +#line 1630 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MAKE_SYNTAX ("voice-separator", (yyloc), SCM_UNDEFINED); ;} break; - case 216: -#line 1541 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 227: +#line 1633 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM pipe = PARSER->lexer_->lookup_identifier ("pipeSymbol"); @@ -4328,17 +4408,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 217: -#line 1555 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 228: +#line 1647 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - Moment m = - unsmob_duration ((yyvsp[(2) - (2)].scm))->get_length (); - (yyval.scm) = MAKE_SYNTAX ("property-operation", (yyloc), SCM_BOOL_F, ly_symbol2scm ("Timing"), ly_symbol2scm ("PropertySet"), ly_symbol2scm ("measurePosition"), m.smobbed_copy ()); - (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), ly_symbol2scm ("Score"), SCM_BOOL_F, (yyval.scm), SCM_EOL, SCM_BOOL_F); + (yyval.scm) = MAKE_SYNTAX ("partial", (yyloc), (yyvsp[(2) - (2)].scm)); ;} break; - case 218: -#line 1561 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 229: +#line 1651 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM proc = ly_lily_module_constant ("make-time-signature-set"); @@ -4346,52 +4424,50 @@ all objects can be unprotected as soon as they're here. ;} break; - case 219: -#line 1566 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 230: +#line 1656 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - SCM proc = ly_lily_module_constant ("make-mark-set"); - - (yyval.scm) = scm_call_1 (proc, (yyvsp[(2) - (2)].scm)); + (yyval.scm) = MAKE_SYNTAX ("make-mark-set", (yyloc), (yyvsp[(2) - (2)].scm)); ;} break; - case 220: -#line 1574 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 231: +#line 1662 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = MY_MAKE_MUSIC ("PesOrFlexaEvent", (yyloc))->unprotect (); ;} break; - case 221: -#line 1577 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 232: +#line 1665 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *m = MY_MAKE_MUSIC ("MarkEvent", (yyloc)); (yyval.scm) = m->unprotect (); ;} break; - case 222: -#line 1581 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 233: +#line 1669 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 223: -#line 1584 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 234: +#line 1672 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *key = MY_MAKE_MUSIC ("KeyChangeEvent", (yyloc)); (yyval.scm) = key->unprotect (); ;} break; - case 224: -#line 1588 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 235: +#line 1676 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *key = MY_MAKE_MUSIC ("KeyChangeEvent", (yyloc)); if (scm_ilength ((yyvsp[(3) - (3)].scm)) > 0) - { + { key->set_property ("pitch-alist", (yyvsp[(3) - (3)].scm)); key->set_property ("tonic", Pitch (0, 0, 0).smobbed_copy ()); key->transpose (* unsmob_pitch ((yyvsp[(2) - (3)].scm))); @@ -4403,37 +4479,41 @@ all objects can be unprotected as soon as they're here. ;} break; - case 225: -#line 1606 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 236: +#line 1694 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 226: -#line 1609 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 237: +#line 1697 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { unsmob_music ((yyvsp[(2) - (2)].scm))->set_spot ((yylsp[(2) - (2)])); (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyval.scm)); ;} break; - case 227: -#line 1616 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 238: +#line 1704 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 228: -#line 1619 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 239: +#line 1707 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = run_music_function (PARSER, (yyvsp[(2) - (2)].scm)); + if ((yyvsp[(1) - (2)].i)) + { + unsmob_music ((yyval.scm))->set_property ("direction", scm_from_int ((yyvsp[(1) - (2)].i))); + } ;} break; - case 229: -#line 1622 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 240: +#line 1714 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if (!PARSER->lexer_->is_lyric_state ()) PARSER->parser_error ((yylsp[(1) - (1)]), _ ("have to be in Lyric mode for lyrics")); @@ -4441,8 +4521,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 230: -#line 1627 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 241: +#line 1719 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if (!PARSER->lexer_->is_lyric_state ()) PARSER->parser_error ((yylsp[(1) - (1)]), _ ("have to be in Lyric mode for lyrics")); @@ -4450,8 +4530,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 231: -#line 1632 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 242: +#line 1724 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if ((yyvsp[(1) - (2)].i)) { @@ -4462,8 +4542,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 232: -#line 1640 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 243: +#line 1732 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if ((yyvsp[(1) - (2)].i)) { @@ -4474,8 +4554,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 234: -#line 1652 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 245: +#line 1744 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *s = MY_MAKE_MUSIC ("StringNumberEvent", (yyloc)); s->set_property ("string-number", scm_from_int ((yyvsp[(1) - (1)].i))); @@ -4483,78 +4563,78 @@ all objects can be unprotected as soon as they're here. ;} break; - case 235: -#line 1660 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 246: +#line 1752 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("bracketOpenSymbol"); ;} break; - case 236: -#line 1663 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 247: +#line 1755 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = ly_symbol2scm ("bracketCloseSymbol"); + (yyval.scm) = ly_symbol2scm ("bracketCloseSymbol"); ;} break; - case 237: -#line 1666 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 248: +#line 1758 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("tildeSymbol"); ;} break; - case 238: -#line 1669 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 249: +#line 1761 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("parenthesisOpenSymbol"); ;} break; - case 239: -#line 1672 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 250: +#line 1764 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("parenthesisCloseSymbol"); ;} break; - case 240: -#line 1675 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 251: +#line 1767 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("escapedExclamationSymbol"); ;} break; - case 241: -#line 1678 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 252: +#line 1770 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("escapedParenthesisOpenSymbol"); ;} break; - case 242: -#line 1681 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 253: +#line 1773 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("escapedParenthesisCloseSymbol"); ;} break; - case 243: -#line 1684 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 254: +#line 1776 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("escapedBiggerSymbol"); ;} break; - case 244: -#line 1687 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 255: +#line 1779 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("escapedSmallerSymbol"); ;} break; - case 245: -#line 1693 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 256: +#line 1785 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM predefd = PARSER->lexer_->lookup_identifier_symbol ((yyvsp[(1) - (1)].scm)); Music *m = 0; @@ -4571,15 +4651,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 246: -#line 1707 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 257: +#line 1799 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 247: -#line 1710 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 258: +#line 1802 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *a = MY_MAKE_MUSIC ("TremoloEvent", (yyloc)); a->set_property ("tremolo-type", scm_from_int ((yyvsp[(1) - (1)].i))); @@ -4587,15 +4667,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 248: -#line 1718 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 259: +#line 1810 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 249: -#line 1721 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 260: +#line 1813 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM s = PARSER->lexer_->lookup_identifier ("dash" + ly_scm2string ((yyvsp[(1) - (1)].scm))); Music *a = MY_MAKE_MUSIC ("ArticulationEvent", (yyloc)); @@ -4606,63 +4686,63 @@ all objects can be unprotected as soon as they're here. ;} break; - case 250: -#line 1732 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 261: +#line 1824 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 251: -#line 1733 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 262: +#line 1825 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int (0); ;} break; - case 252: -#line 1734 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 263: +#line 1826 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int (-(yyvsp[(2) - (2)].i)); ;} break; - case 253: -#line 1735 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 264: +#line 1827 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int ((yyvsp[(2) - (2)].i)); ;} break; - case 254: -#line 1739 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 265: +#line 1831 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 1; ;} break; - case 255: -#line 1742 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 266: +#line 1834 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) ++; ;} break; - case 256: -#line 1748 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 267: +#line 1840 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 1; ;} break; - case 257: -#line 1751 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 268: +#line 1843 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i)++; ;} break; - case 258: -#line 1757 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 269: +#line 1849 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 259: -#line 1760 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 270: +#line 1852 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Pitch p = *unsmob_pitch ((yyvsp[(1) - (2)].scm)); p = p.transposed (Pitch ((yyvsp[(2) - (2)].i),0,0)); @@ -4670,8 +4750,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 260: -#line 1765 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 271: +#line 1857 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Pitch p =* unsmob_pitch ((yyvsp[(1) - (2)].scm)); p = p.transposed (Pitch (-(yyvsp[(2) - (2)].i),0,0)); @@ -4679,15 +4759,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 261: -#line 1777 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 272: +#line 1869 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 262: -#line 1780 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 273: +#line 1872 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Pitch p = *unsmob_pitch ((yyvsp[(1) - (2)].scm)); p = p.transposed (Pitch ((yyvsp[(2) - (2)].i),0,0)); @@ -4695,8 +4775,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 263: -#line 1785 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 274: +#line 1877 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Pitch p = *unsmob_pitch ((yyvsp[(1) - (2)].scm)); @@ -4705,15 +4785,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 264: -#line 1794 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 275: +#line 1886 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 267: -#line 1805 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 278: +#line 1897 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *t = MY_MAKE_MUSIC ("TextScriptEvent", (yyloc)); t->set_property ("text", (yyvsp[(1) - (1)].scm)); @@ -4721,8 +4801,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 268: -#line 1810 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 279: +#line 1902 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *t = MY_MAKE_MUSIC ("TextScriptEvent", (yyloc)); t->set_property ("text", @@ -4731,8 +4811,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 269: -#line 1816 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 280: +#line 1908 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *t = MY_MAKE_MUSIC ("FingeringEvent", (yyloc)); t->set_property ("digit", scm_from_int ((yyvsp[(1) - (1)].i))); @@ -4740,102 +4820,102 @@ all objects can be unprotected as soon as they're here. ;} break; - case 270: -#line 1824 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 281: +#line 1916 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_locale_string ("Hat"); ;} break; - case 271: -#line 1827 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 282: +#line 1919 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_locale_string ("Plus"); ;} break; - case 272: -#line 1830 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 283: +#line 1922 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_locale_string ("Dash"); ;} break; - case 273: -#line 1833 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 284: +#line 1925 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_locale_string ("Bar"); ;} break; - case 274: -#line 1836 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 285: +#line 1928 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_locale_string ("Larger"); ;} break; - case 275: -#line 1839 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 286: +#line 1931 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_locale_string ("Dot"); ;} break; - case 276: -#line 1842 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 287: +#line 1934 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_locale_string ("Underscore"); ;} break; - case 277: -#line 1848 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 288: +#line 1940 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = DOWN; ;} break; - case 278: -#line 1849 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 289: +#line 1941 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = UP; ;} break; - case 279: -#line 1850 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 290: +#line 1942 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = CENTER; ;} break; - case 280: -#line 1855 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 291: +#line 1947 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 281: -#line 1861 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 292: +#line 1953 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 282: -#line 1867 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 293: +#line 1959 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Duration dd = PARSER->default_duration_; (yyval.scm) = dd.smobbed_copy (); ;} break; - case 283: -#line 1871 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 294: +#line 1963 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); PARSER->default_duration_ = *unsmob_duration ((yyval.scm)); ;} break; - case 284: -#line 1878 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 295: +#line 1970 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { int len = 0; if (!is_duration ((yyvsp[(1) - (2)].i))) @@ -4847,32 +4927,33 @@ all objects can be unprotected as soon as they're here. ;} break; - case 285: -#line 1887 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 296: +#line 1979 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Duration *d = unsmob_duration ((yyvsp[(1) - (2)].scm)); Duration k (d->duration_log (), d->dot_count () + (yyvsp[(2) - (2)].i)); + k = k.compressed (d->factor ()); *d = k; (yyval.scm) = (yyvsp[(1) - (2)].scm); ;} break; - case 286: -#line 1896 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 297: +#line 1989 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 287: -#line 1899 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 298: +#line 1992 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = unsmob_duration ((yyval.scm))->compressed ( (yyvsp[(3) - (3)].i)) .smobbed_copy (); ;} break; - case 288: -#line 1902 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 299: +#line 1995 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Rational m (scm_to_int (scm_car ((yyvsp[(3) - (3)].scm))), scm_to_int (scm_cdr ((yyvsp[(3) - (3)].scm)))); @@ -4880,41 +4961,41 @@ all objects can be unprotected as soon as they're here. ;} break; - case 289: -#line 1910 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 300: +#line 2003 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 290: -#line 1911 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 301: +#line 2004 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons (scm_from_int ((yyvsp[(1) - (3)].i)), scm_from_int ((yyvsp[(3) - (3)].i))); ;} break; - case 291: -#line 1917 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 302: +#line 2010 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 0; ;} break; - case 292: -#line 1920 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 303: +#line 2013 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) ++; ;} break; - case 293: -#line 1926 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 304: +#line 2019 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 0; ;} break; - case 294: -#line 1929 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 305: +#line 2022 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if (!is_duration ((yyvsp[(2) - (2)].i))) PARSER->parser_error ((yylsp[(2) - (2)]), _f ("not a duration: %d", (yyvsp[(2) - (2)].i))); @@ -4922,55 +5003,55 @@ all objects can be unprotected as soon as they're here. ;} break; - case 295: -#line 1937 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 306: +#line 2030 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); ;} break; - case 296: -#line 1940 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 307: +#line 2033 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); ;} break; - case 297: -#line 1943 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 308: +#line 2036 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 298: -#line 1944 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 309: +#line 2037 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 299: -#line 1948 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 310: +#line 2041 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_rational2scm (FLAT_ALTERATION); ;} break; - case 300: -#line 1949 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 311: +#line 2042 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_rational2scm (SHARP_ALTERATION); ;} break; - case 301: -#line 1950 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 312: +#line 2043 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int (0); ;} break; - case 302: -#line 1954 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 313: +#line 2047 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *bfr = MY_MAKE_MUSIC ("BassFigureEvent", (yyloc)); (yyval.scm) = bfr->unprotect (); ;} break; - case 303: -#line 1958 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 314: +#line 2051 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *bfr = MY_MAKE_MUSIC ("BassFigureEvent", (yyloc)); (yyval.scm) = bfr->self_scm (); @@ -4984,16 +5065,16 @@ all objects can be unprotected as soon as they're here. ;} break; - case 304: -#line 1969 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 315: +#line 2062 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (2)].scm); unsmob_music ((yyvsp[(1) - (2)].scm))->set_property ("bracket-stop", SCM_BOOL_T); ;} break; - case 305: -#line 1973 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 316: +#line 2066 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *m = unsmob_music ((yyvsp[(1) - (2)].scm)); if (scm_to_double ((yyvsp[(2) - (2)].scm))) { @@ -5007,8 +5088,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 306: -#line 1984 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 317: +#line 2077 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *m = unsmob_music ((yyvsp[(1) - (2)].scm)); if ((yyvsp[(2) - (2)].scm) == ly_symbol2scm ("plus")) @@ -5030,82 +5111,82 @@ all objects can be unprotected as soon as they're here. ;} break; - case 307: -#line 2007 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 318: +#line 2100 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("plus"); ;} break; - case 308: -#line 2010 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 319: +#line 2103 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("exclamation"); ;} break; - case 309: -#line 2013 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 320: +#line 2106 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("slash"); ;} break; - case 310: -#line 2016 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 321: +#line 2109 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("backslash"); ;} break; - case 311: -#line 2022 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 322: +#line 2115 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 312: -#line 2025 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 323: +#line 2118 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(2) - (2)].scm); unsmob_music ((yyval.scm))->set_property ("bracket-start", SCM_BOOL_T); ;} break; - case 313: -#line 2032 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 324: +#line 2125 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 314: -#line 2035 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 325: +#line 2128 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm)); ;} break; - case 315: -#line 2041 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 326: +#line 2134 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL); ;} break; - case 316: -#line 2048 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 327: +#line 2141 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 0; ;} break; - case 317: -#line 2049 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 328: +#line 2142 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 1; ;} break; - case 318: -#line 2053 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 329: +#line 2146 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if (!PARSER->lexer_->is_note_state ()) PARSER->parser_error ((yylsp[(1) - (6)]), _ ("have to be in Note mode for notes")); @@ -5115,7 +5196,7 @@ all objects can be unprotected as soon as they're here. n = MY_MAKE_MUSIC ("RestEvent", (yyloc)); else n = MY_MAKE_MUSIC ("NoteEvent", (yyloc)); - + n->set_property ("pitch", (yyvsp[(1) - (6)].scm)); n->set_property ("duration", (yyvsp[(5) - (6)].scm)); @@ -5134,19 +5215,19 @@ all objects can be unprotected as soon as they're here. ;} break; - case 319: -#line 2079 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 330: +#line 2172 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *n = MY_MAKE_MUSIC ("NoteEvent", (yyloc)); n->set_property ("duration", (yyvsp[(2) - (2)].scm)); n->set_property ("drum-type", (yyvsp[(1) - (2)].scm)); - (yyval.scm) = n->unprotect (); + (yyval.scm) = n->unprotect (); ;} break; - case 320: -#line 2086 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 331: +#line 2179 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Music *ev = 0; if (ly_scm2string ((yyvsp[(1) - (2)].scm)) == "s") { @@ -5155,15 +5236,15 @@ all objects can be unprotected as soon as they're here. } else { ev = MY_MAKE_MUSIC ("RestEvent", (yyloc)); - + } ev->set_property ("duration", (yyvsp[(2) - (2)].scm)); (yyval.scm) = ev->unprotect (); ;} break; - case 321: -#line 2099 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 332: +#line 2192 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if (!PARSER->lexer_->is_lyric_state ()) PARSER->parser_error ((yylsp[(1) - (2)]), _ ("have to be in Lyric mode for lyrics")); @@ -5175,15 +5256,15 @@ all objects can be unprotected as soon as they're here. ;} break; - case 322: -#line 2111 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 333: +#line 2204 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm)); ;} break; - case 323: -#line 2114 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 334: +#line 2207 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { if (!PARSER->lexer_->is_chord_state ()) PARSER->parser_error ((yylsp[(1) - (1)]), _ ("have to be in Chord mode for chords")); @@ -5191,8 +5272,8 @@ all objects can be unprotected as soon as they're here. ;} break; - case 324: -#line 2119 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 335: +#line 2212 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { for (SCM s = (yyvsp[(1) - (2)].scm); scm_is_pair (s); s = scm_cdr (s)) { @@ -5202,491 +5283,510 @@ all objects can be unprotected as soon as they're here. ;} break; - case 325: -#line 2129 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 336: +#line 2222 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 326: -#line 2132 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 337: +#line 2225 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 327: -#line 2138 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 338: +#line 2231 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = make_chord_elements ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm), SCM_EOL); ;} break; - case 328: -#line 2141 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 339: +#line 2234 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM its = scm_reverse_x ((yyvsp[(4) - (4)].scm), SCM_EOL); (yyval.scm) = make_chord_elements ((yyvsp[(1) - (4)].scm), (yyvsp[(2) - (4)].scm), scm_cons ((yyvsp[(3) - (4)].scm), its)); ;} break; - case 329: -#line 2148 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 340: +#line 2241 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = SCM_EOL; + (yyval.scm) = SCM_EOL; ;} break; - case 330: -#line 2151 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 341: +#line 2244 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyval.scm)); ;} break; - case 331: -#line 2157 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 342: +#line 2250 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("chord-colon"); ;} break; - case 332: -#line 2160 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 343: +#line 2253 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = ly_symbol2scm ("chord-caret"); ;} break; - case 333: -#line 2163 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 344: +#line 2256 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_2 (ly_symbol2scm ("chord-slash"), (yyvsp[(2) - (2)].scm)); ;} break; - case 334: -#line 2166 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 345: +#line 2259 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_2 (ly_symbol2scm ("chord-bass"), (yyvsp[(2) - (2)].scm)); ;} break; - case 335: -#line 2172 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 346: +#line 2265 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 336: -#line 2175 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 347: +#line 2268 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_reverse_x ((yyvsp[(1) - (1)].scm), SCM_EOL); ;} break; - case 337: -#line 2178 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 348: +#line 2271 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 338: -#line 2184 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 349: +#line 2277 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(1) - (1)].scm), SCM_EOL); ;} break; - case 339: -#line 2185 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 350: +#line 2278 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyval.scm)); ;} break; - case 340: -#line 2191 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 351: +#line 2284 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = make_chord_step ((yyvsp[(1) - (1)].i), 0); ;} break; - case 341: -#line 2194 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 352: +#line 2287 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = make_chord_step ((yyvsp[(1) - (2)].i), SHARP_ALTERATION); ;} break; - case 342: -#line 2197 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 353: +#line 2290 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = make_chord_step ((yyvsp[(1) - (2)].i), FLAT_ALTERATION); ;} break; - case 343: -#line 2209 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 354: +#line 2296 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); + ;} + break; + + case 355: +#line 2299 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = scm_cons (scm_from_int ((yyvsp[(1) - (3)].i)), scm_from_int ((yyvsp[(3) - (3)].i))); + ;} + break; + + case 356: +#line 2311 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_sum ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm)); ;} break; - case 344: -#line 2212 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 357: +#line 2314 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_difference ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm)); ;} break; - case 346: -#line 2219 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 359: +#line 2321 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 347: -#line 2222 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 360: +#line 2324 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_product ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm)); ;} break; - case 348: -#line 2225 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 361: +#line 2327 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_divide ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm)); ;} break; - case 349: -#line 2231 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 362: +#line 2333 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { /* %prec UNARY_MINUS */ (yyval.scm) = scm_difference ((yyvsp[(2) - (2)].scm), SCM_UNDEFINED); ;} break; - case 351: -#line 2239 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 364: +#line 2341 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); ;} break; - case 352: -#line 2242 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 365: +#line 2344 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 353: -#line 2245 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 366: +#line 2347 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 354: -#line 2248 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 367: +#line 2350 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_double (scm_to_double ((yyvsp[(1) - (2)].scm)) *scm_to_double ((yyvsp[(2) - (2)].scm))); ;} break; - case 355: -#line 2251 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 368: +#line 2353 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_double ((yyvsp[(1) - (2)].i) *scm_to_double ((yyvsp[(2) - (2)].scm))); ;} break; - case 356: -#line 2258 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 369: +#line 2360 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = (yyvsp[(1) - (1)].i); ;} break; - case 357: -#line 2261 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 370: +#line 2363 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = (yyvsp[(1) - (1)].i); ;} break; - case 358: -#line 2267 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 371: +#line 2369 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i)); ;} break; - case 359: -#line 2268 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 372: +#line 2370 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 360: -#line 2275 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 373: +#line 2376 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 0; ;} break; - case 361: -#line 2276 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 374: +#line 2377 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) ++; ;} break; - case 362: -#line 2280 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 375: +#line 2381 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) = 0; ;} break; - case 363: -#line 2281 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 376: +#line 2382 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.i) ++; ;} break; - case 364: -#line 2289 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 377: +#line 2390 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 365: -#line 2293 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 378: +#line 2394 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_markup_state (); ;} break; - case 366: -#line 2294 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 379: +#line 2395 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(3) - (3)].scm); PARSER->lexer_->pop_state (); ;} break; - case 367: -#line 2302 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 380: +#line 2402 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = (yyvsp[(1) - (1)].scm); + ;} + break; + + case 381: +#line 2406 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_markup_state (); ;} break; - case 368: -#line 2303 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 382: +#line 2407 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(3) - (3)].scm); PARSER->lexer_->pop_state (); ;} break; - case 369: -#line 2310 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 383: +#line 2414 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 370: -#line 2314 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 384: +#line 2418 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { PARSER->lexer_->push_markup_state (); ;} break; - case 371: -#line 2315 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 385: +#line 2419 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(3) - (3)].scm); PARSER->lexer_->pop_state (); ;} break; - case 372: -#line 2322 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_2 (ly_lily_module_constant ("line-markup"), (yyvsp[(1) - (1)].scm)); + case 386: +#line 2426 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = scm_list_2 (ly_lily_module_constant ("line-markup"), (yyvsp[(1) - (1)].scm)); ;} break; - case 373: -#line 2325 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 387: +#line 2429 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_car (scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), (yyvsp[(1) - (2)].scm), scm_list_1 ((yyvsp[(2) - (2)].scm)))); ;} break; - case 374: -#line 2328 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 388: +#line 2432 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 375: -#line 2334 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 389: +#line 2438 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 376: -#line 2337 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 390: +#line 2441 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 377: -#line 2340 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 391: +#line 2444 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { + (yyval.scm) = (yyvsp[(1) - (1)].scm); + ;} + break; + + case 392: +#line 2447 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm)); ;} break; - case 378: -#line 2346 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 393: +#line 2453 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm)); - + ;} break; - case 379: -#line 2353 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 394: +#line 2460 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL); ;} break; - case 380: -#line 2359 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 395: +#line 2466 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = SCM_EOL; ;} break; - case 381: -#line 2360 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 396: +#line 2467 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm)); ;} break; - case 382: -#line 2363 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_append_x (scm_list_2 (scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL), (yyvsp[(1) - (2)].scm))); - ;} - break; - - case 383: -#line 2369 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 397: +#line 2470 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm)); + (yyval.scm) = scm_reverse_x ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm)); ;} break; - case 384: -#line 2372 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 398: +#line 2476 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm)); + (yyval.scm) = scm_cons ((yyvsp[(1) - (2)].scm), scm_reverse_x((yyvsp[(2) - (2)].scm), SCM_EOL)); ;} break; - case 385: -#line 2375 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 399: +#line 2482 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm)); + (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 386: -#line 2378 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 400: +#line 2485 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_3 ((yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(3) - (3)].scm)); + (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 387: -#line 2381 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 401: +#line 2488 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_4 ((yyvsp[(1) - (4)].scm), (yyvsp[(2) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(4) - (4)].scm)); + (yyval.scm) = SCM_EOL; ;} break; - case 388: -#line 2387 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm)); - ;} + case 402: +#line 2494 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" + { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 389: -#line 2390 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 403: +#line 2495 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm)); + (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm)); ;} break; - case 390: -#line 2393 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 404: +#line 2501 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_3 ((yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(3) - (3)].scm)); + (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL)); ;} break; - case 391: -#line 2399 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 405: +#line 2507 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm)); ;} break; - case 392: -#line 2402 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 406: +#line 2510 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm)); ;} break; - case 393: -#line 2408 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 407: +#line 2516 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = make_simple_markup ((yyvsp[(1) - (1)].scm)); ;} break; - case 394: -#line 2411 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 408: +#line 2519 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 395: -#line 2414 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 409: +#line 2522 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 396: -#line 2417 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 410: +#line 2525 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} break; - case 397: -#line 2420 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 411: +#line 2528 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM nn = PARSER->lexer_->lookup_identifier ("pitchnames"); PARSER->lexer_->push_note_state (alist_to_hashq (nn)); ;} break; - case 398: -#line 2423 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 412: +#line 2531 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Score * sc = (yyvsp[(4) - (5)].score); (yyval.scm) = scm_list_2 (ly_lily_module_constant ("score-markup"), sc->self_scm ()); @@ -5695,72 +5795,23 @@ all objects can be unprotected as soon as they're here. ;} break; - case 399: -#line 2429 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm)); - ;} - break; - - case 400: -#line 2432 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_4 ((yyvsp[(1) - (4)].scm), (yyvsp[(2) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(4) - (4)].scm)); - ;} - break; - - case 401: -#line 2435 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_3 ((yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(3) - (3)].scm)); - ;} - break; - - case 402: -#line 2438 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_4 ((yyvsp[(1) - (4)].scm), (yyvsp[(2) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(4) - (4)].scm)); - ;} - break; - - case 403: -#line 2441 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_5 ((yyvsp[(1) - (5)].scm), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(4) - (5)].scm), (yyvsp[(5) - (5)].scm)); - ;} - break; - - case 404: -#line 2444 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm)); - ;} - break; - - case 405: -#line 2447 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" - { - (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm),(yyvsp[(2) - (2)].scm)); - ;} - break; - - case 406: -#line 2450 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 413: +#line 2537 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { - (yyval.scm) = scm_list_3 ((yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(3) - (3)].scm)); + (yyval.scm) = scm_cons ((yyvsp[(1) - (2)].scm), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL)); ;} break; - case 407: -#line 2456 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 414: +#line 2543 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { SCM mapper = ly_lily_module_constant ("map-markup-command-list"); (yyval.scm) = scm_car (scm_call_2 (mapper, (yyvsp[(1) - (2)].scm), scm_list_1 ((yyvsp[(2) - (2)].scm)))); ;} break; - case 408: -#line 2460 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" + case 415: +#line 2547 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;} @@ -5768,7 +5819,7 @@ all objects can be unprotected as soon as they're here. /* Line 1267 of yacc.c. */ -#line 5772 "out/parser.cc" +#line 5823 "out/parser.cc" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5988,7 +6039,7 @@ yyreturn: } -#line 2465 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 2552 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" void @@ -6028,13 +6079,17 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) } else if (scm_is_number (sid)) { *destination = sid; return NUMBER_IDENTIFIER; - } else if (unsmob_context_def (sid)) { - Context_def *def= unsmob_context_def (sid)->clone (); + } else if (unsmob_context_def (sid)) { + Context_def *def= unsmob_context_def (sid)->clone (); + + *destination = def->self_scm (); + def->unprotect (); - *destination = def->self_scm (); - def->unprotect (); - - return CONTEXT_DEF_IDENTIFIER; + return CONTEXT_DEF_IDENTIFIER; + } else if (unsmob_context_mod (sid)) { + *destination = unsmob_context_mod (sid)->smobbed_copy (); + + return CONTEXT_MOD_IDENTIFIER; } else if (unsmob_score (sid)) { Score *score = new Score (*unsmob_score (sid)); *destination = score->self_scm (); @@ -6058,7 +6113,7 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) } else if (unsmob_output_def (sid)) { Output_def *p = unsmob_output_def (sid); p = p->clone (); - + *destination = p->self_scm (); p->unprotect (); return OUTPUT_DEF_IDENTIFIER; @@ -6067,9 +6122,12 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) if (is_lyric_state ()) return LYRIC_MARKUP_IDENTIFIER; return MARKUP_IDENTIFIER; + } else if (Text_interface::is_markup_list (sid)) { + *destination = sid; + return MARKUPLINES_IDENTIFIER; } - return -1; + return -1; } SCM @@ -6203,7 +6261,7 @@ make_music_relative (Pitch start, SCM music, Input loc) { Music *relative = MY_MAKE_MUSIC ("RelativeOctaveMusic", loc); relative->set_property ("element", music); - + Music *m = unsmob_music (music); Pitch last = m->to_relative_octave (start); if (lily_1_8_relative) @@ -6217,8 +6275,8 @@ yylex (YYSTYPE *s, YYLTYPE *loc, void *v) Lily_parser *pars = (Lily_parser*) v; Lily_lexer *lex = pars->lexer_; - lex->lexval = (void*) s; - lex->lexloc = loc; + lex->lexval_ = (void*) s; + lex->lexloc_ = loc; lex->prepare_for_next_token (); return lex->yylex (); } diff --git a/lily/out/parser.hh b/lily/out/parser.hh index c90ff7ef2a..122e9937a0 100644 --- a/lily/out/parser.hh +++ b/lily/out/parser.hh @@ -74,106 +74,95 @@ MIDI = 290, NAME = 291, NOTEMODE = 292, - OBJECTID = 293, - OCTAVE = 294, - ONCE = 295, - OVERRIDE = 296, - PAPER = 297, - PARTIAL = 298, - RELATIVE = 299, - REMOVE = 300, - REPEAT = 301, - REST = 302, - REVERT = 303, - SCORE = 304, - SEQUENTIAL = 305, - SET = 306, - SIMULTANEOUS = 307, - SKIP = 308, - TEMPO = 309, - TIMES = 310, - TRANSPOSE = 311, - TYPE = 312, - UNSET = 313, - WITH = 314, - TIME_T = 315, - NEWCONTEXT = 316, - CHORD_BASS = 317, - CHORD_CARET = 318, - CHORD_COLON = 319, - CHORD_MINUS = 320, - CHORD_SLASH = 321, - ANGLE_OPEN = 322, - ANGLE_CLOSE = 323, - DOUBLE_ANGLE_OPEN = 324, - DOUBLE_ANGLE_CLOSE = 325, - E_BACKSLASH = 326, - E_ANGLE_CLOSE = 327, - E_CHAR = 328, - E_CLOSE = 329, - E_EXCLAMATION = 330, - E_BRACKET_OPEN = 331, - E_OPEN = 332, - E_BRACKET_CLOSE = 333, - E_ANGLE_OPEN = 334, - E_PLUS = 335, - E_TILDE = 336, - EXTENDER = 337, - FIGURE_CLOSE = 338, - FIGURE_OPEN = 339, - FIGURE_SPACE = 340, - HYPHEN = 341, - CHORDMODIFIERS = 342, - LYRIC_MARKUP = 343, - MULTI_MEASURE_REST = 344, - DIGIT = 345, - E_UNSIGNED = 346, - UNSIGNED = 347, - EXPECT_MARKUP = 348, - EXPECT_MUSIC = 349, - EXPECT_SCM = 350, + OCTAVE = 293, + ONCE = 294, + OVERRIDE = 295, + PAPER = 296, + PARTIAL = 297, + RELATIVE = 298, + REMOVE = 299, + REPEAT = 300, + REST = 301, + REVERT = 302, + SCORE = 303, + SEQUENTIAL = 304, + SET = 305, + SIMULTANEOUS = 306, + SKIP = 307, + TEMPO = 308, + TIMES = 309, + TRANSPOSE = 310, + TYPE = 311, + UNSET = 312, + WITH = 313, + TIME_T = 314, + NEWCONTEXT = 315, + CHORD_BASS = 316, + CHORD_CARET = 317, + CHORD_COLON = 318, + CHORD_MINUS = 319, + CHORD_SLASH = 320, + ANGLE_OPEN = 321, + ANGLE_CLOSE = 322, + DOUBLE_ANGLE_OPEN = 323, + DOUBLE_ANGLE_CLOSE = 324, + E_BACKSLASH = 325, + E_ANGLE_CLOSE = 326, + E_CHAR = 327, + E_CLOSE = 328, + E_EXCLAMATION = 329, + E_BRACKET_OPEN = 330, + E_OPEN = 331, + E_BRACKET_CLOSE = 332, + E_ANGLE_OPEN = 333, + E_PLUS = 334, + E_TILDE = 335, + EXTENDER = 336, + FIGURE_CLOSE = 337, + FIGURE_OPEN = 338, + FIGURE_SPACE = 339, + HYPHEN = 340, + CHORDMODIFIERS = 341, + LYRIC_MARKUP = 342, + MULTI_MEASURE_REST = 343, + DIGIT = 344, + E_UNSIGNED = 345, + UNSIGNED = 346, + EXPECT_MARKUP = 347, + EXPECT_MUSIC = 348, + EXPECT_SCM = 349, + EXPECT_MARKUP_LIST = 350, EXPECT_NO_MORE_ARGS = 351, BOOK_IDENTIFIER = 352, CHORDMODIFIER_PITCH = 353, CHORD_MODIFIER = 354, - CONTEXT_DEF_IDENTIFIER = 355, - DRUM_PITCH = 356, - DURATION_IDENTIFIER = 357, - EVENT_IDENTIFIER = 358, - FRACTION = 359, - LYRICS_STRING = 360, - LYRIC_MARKUP_IDENTIFIER = 361, - MARKUP_HEAD_EMPTY = 362, - MARKUP_HEAD_LIST0 = 363, - MARKUP_HEAD_MARKUP0 = 364, - MARKUP_HEAD_MARKUP0_MARKUP1 = 365, - MARKUP_HEAD_SCM0 = 366, - MARKUP_HEAD_SCM0_MARKUP1 = 367, - MARKUP_HEAD_SCM0_SCM1 = 368, - MARKUP_HEAD_SCM0_SCM1_MARKUP2 = 369, - MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3 = 370, - MARKUP_HEAD_SCM0_MARKUP1_MARKUP2 = 371, - MARKUP_HEAD_SCM0_SCM1_SCM2 = 372, - MARKUP_LIST_HEAD_EMPTY = 373, - MARKUP_LIST_HEAD_LIST0 = 374, - MARKUP_LIST_HEAD_SCM0 = 375, - MARKUP_LIST_HEAD_SCM0_LIST1 = 376, - MARKUP_LIST_HEAD_SCM0_SCM1_LIST2 = 377, - MARKUP_IDENTIFIER = 378, - MUSIC_FUNCTION = 379, - MUSIC_IDENTIFIER = 380, - NOTENAME_PITCH = 381, - NUMBER_IDENTIFIER = 382, - OUTPUT_DEF_IDENTIFIER = 383, - REAL = 384, - RESTNAME = 385, - SCM_IDENTIFIER = 386, - SCM_TOKEN = 387, - SCORE_IDENTIFIER = 388, - STRING = 389, - STRING_IDENTIFIER = 390, - TONICNAME_PITCH = 391, - UNARY_MINUS = 392 + CHORD_REPETITION = 355, + CONTEXT_DEF_IDENTIFIER = 356, + CONTEXT_MOD_IDENTIFIER = 357, + DRUM_PITCH = 358, + DURATION_IDENTIFIER = 359, + EVENT_IDENTIFIER = 360, + FRACTION = 361, + LYRICS_STRING = 362, + LYRIC_MARKUP_IDENTIFIER = 363, + MARKUP_FUNCTION = 364, + MARKUP_LIST_FUNCTION = 365, + MARKUP_IDENTIFIER = 366, + MARKUPLINES_IDENTIFIER = 367, + MUSIC_FUNCTION = 368, + MUSIC_IDENTIFIER = 369, + NOTENAME_PITCH = 370, + NUMBER_IDENTIFIER = 371, + OUTPUT_DEF_IDENTIFIER = 372, + REAL = 373, + RESTNAME = 374, + SCM_IDENTIFIER = 375, + SCM_TOKEN = 376, + SCORE_IDENTIFIER = 377, + STRING = 378, + STRING_IDENTIFIER = 379, + TONICNAME_PITCH = 380, + UNARY_MINUS = 381 }; #endif /* Tokens. */ @@ -212,113 +201,102 @@ #define MIDI 290 #define NAME 291 #define NOTEMODE 292 -#define OBJECTID 293 -#define OCTAVE 294 -#define ONCE 295 -#define OVERRIDE 296 -#define PAPER 297 -#define PARTIAL 298 -#define RELATIVE 299 -#define REMOVE 300 -#define REPEAT 301 -#define REST 302 -#define REVERT 303 -#define SCORE 304 -#define SEQUENTIAL 305 -#define SET 306 -#define SIMULTANEOUS 307 -#define SKIP 308 -#define TEMPO 309 -#define TIMES 310 -#define TRANSPOSE 311 -#define TYPE 312 -#define UNSET 313 -#define WITH 314 -#define TIME_T 315 -#define NEWCONTEXT 316 -#define CHORD_BASS 317 -#define CHORD_CARET 318 -#define CHORD_COLON 319 -#define CHORD_MINUS 320 -#define CHORD_SLASH 321 -#define ANGLE_OPEN 322 -#define ANGLE_CLOSE 323 -#define DOUBLE_ANGLE_OPEN 324 -#define DOUBLE_ANGLE_CLOSE 325 -#define E_BACKSLASH 326 -#define E_ANGLE_CLOSE 327 -#define E_CHAR 328 -#define E_CLOSE 329 -#define E_EXCLAMATION 330 -#define E_BRACKET_OPEN 331 -#define E_OPEN 332 -#define E_BRACKET_CLOSE 333 -#define E_ANGLE_OPEN 334 -#define E_PLUS 335 -#define E_TILDE 336 -#define EXTENDER 337 -#define FIGURE_CLOSE 338 -#define FIGURE_OPEN 339 -#define FIGURE_SPACE 340 -#define HYPHEN 341 -#define CHORDMODIFIERS 342 -#define LYRIC_MARKUP 343 -#define MULTI_MEASURE_REST 344 -#define DIGIT 345 -#define E_UNSIGNED 346 -#define UNSIGNED 347 -#define EXPECT_MARKUP 348 -#define EXPECT_MUSIC 349 -#define EXPECT_SCM 350 +#define OCTAVE 293 +#define ONCE 294 +#define OVERRIDE 295 +#define PAPER 296 +#define PARTIAL 297 +#define RELATIVE 298 +#define REMOVE 299 +#define REPEAT 300 +#define REST 301 +#define REVERT 302 +#define SCORE 303 +#define SEQUENTIAL 304 +#define SET 305 +#define SIMULTANEOUS 306 +#define SKIP 307 +#define TEMPO 308 +#define TIMES 309 +#define TRANSPOSE 310 +#define TYPE 311 +#define UNSET 312 +#define WITH 313 +#define TIME_T 314 +#define NEWCONTEXT 315 +#define CHORD_BASS 316 +#define CHORD_CARET 317 +#define CHORD_COLON 318 +#define CHORD_MINUS 319 +#define CHORD_SLASH 320 +#define ANGLE_OPEN 321 +#define ANGLE_CLOSE 322 +#define DOUBLE_ANGLE_OPEN 323 +#define DOUBLE_ANGLE_CLOSE 324 +#define E_BACKSLASH 325 +#define E_ANGLE_CLOSE 326 +#define E_CHAR 327 +#define E_CLOSE 328 +#define E_EXCLAMATION 329 +#define E_BRACKET_OPEN 330 +#define E_OPEN 331 +#define E_BRACKET_CLOSE 332 +#define E_ANGLE_OPEN 333 +#define E_PLUS 334 +#define E_TILDE 335 +#define EXTENDER 336 +#define FIGURE_CLOSE 337 +#define FIGURE_OPEN 338 +#define FIGURE_SPACE 339 +#define HYPHEN 340 +#define CHORDMODIFIERS 341 +#define LYRIC_MARKUP 342 +#define MULTI_MEASURE_REST 343 +#define DIGIT 344 +#define E_UNSIGNED 345 +#define UNSIGNED 346 +#define EXPECT_MARKUP 347 +#define EXPECT_MUSIC 348 +#define EXPECT_SCM 349 +#define EXPECT_MARKUP_LIST 350 #define EXPECT_NO_MORE_ARGS 351 #define BOOK_IDENTIFIER 352 #define CHORDMODIFIER_PITCH 353 #define CHORD_MODIFIER 354 -#define CONTEXT_DEF_IDENTIFIER 355 -#define DRUM_PITCH 356 -#define DURATION_IDENTIFIER 357 -#define EVENT_IDENTIFIER 358 -#define FRACTION 359 -#define LYRICS_STRING 360 -#define LYRIC_MARKUP_IDENTIFIER 361 -#define MARKUP_HEAD_EMPTY 362 -#define MARKUP_HEAD_LIST0 363 -#define MARKUP_HEAD_MARKUP0 364 -#define MARKUP_HEAD_MARKUP0_MARKUP1 365 -#define MARKUP_HEAD_SCM0 366 -#define MARKUP_HEAD_SCM0_MARKUP1 367 -#define MARKUP_HEAD_SCM0_SCM1 368 -#define MARKUP_HEAD_SCM0_SCM1_MARKUP2 369 -#define MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3 370 -#define MARKUP_HEAD_SCM0_MARKUP1_MARKUP2 371 -#define MARKUP_HEAD_SCM0_SCM1_SCM2 372 -#define MARKUP_LIST_HEAD_EMPTY 373 -#define MARKUP_LIST_HEAD_LIST0 374 -#define MARKUP_LIST_HEAD_SCM0 375 -#define MARKUP_LIST_HEAD_SCM0_LIST1 376 -#define MARKUP_LIST_HEAD_SCM0_SCM1_LIST2 377 -#define MARKUP_IDENTIFIER 378 -#define MUSIC_FUNCTION 379 -#define MUSIC_IDENTIFIER 380 -#define NOTENAME_PITCH 381 -#define NUMBER_IDENTIFIER 382 -#define OUTPUT_DEF_IDENTIFIER 383 -#define REAL 384 -#define RESTNAME 385 -#define SCM_IDENTIFIER 386 -#define SCM_TOKEN 387 -#define SCORE_IDENTIFIER 388 -#define STRING 389 -#define STRING_IDENTIFIER 390 -#define TONICNAME_PITCH 391 -#define UNARY_MINUS 392 +#define CHORD_REPETITION 355 +#define CONTEXT_DEF_IDENTIFIER 356 +#define CONTEXT_MOD_IDENTIFIER 357 +#define DRUM_PITCH 358 +#define DURATION_IDENTIFIER 359 +#define EVENT_IDENTIFIER 360 +#define FRACTION 361 +#define LYRICS_STRING 362 +#define LYRIC_MARKUP_IDENTIFIER 363 +#define MARKUP_FUNCTION 364 +#define MARKUP_LIST_FUNCTION 365 +#define MARKUP_IDENTIFIER 366 +#define MARKUPLINES_IDENTIFIER 367 +#define MUSIC_FUNCTION 368 +#define MUSIC_IDENTIFIER 369 +#define NOTENAME_PITCH 370 +#define NUMBER_IDENTIFIER 371 +#define OUTPUT_DEF_IDENTIFIER 372 +#define REAL 373 +#define RESTNAME 374 +#define SCM_IDENTIFIER 375 +#define SCM_TOKEN 376 +#define SCORE_IDENTIFIER 377 +#define STRING 378 +#define STRING_IDENTIFIER 379 +#define TONICNAME_PITCH 380 +#define UNARY_MINUS 381 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 98 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.12/lily/parser.yy" +#line 110 "/main/src/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.14/lily/parser.yy" { Book *book; Output_def *outputdef; @@ -329,7 +307,7 @@ typedef union YYSTYPE int i; } /* Line 1489 of yacc.c. */ -#line 333 "out/parser.hh" +#line 311 "out/parser.hh" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/lily/output-def-scheme.cc b/lily/output-def-scheme.cc index f3b7a1cf0a..d1ee310837 100644 --- a/lily/output-def-scheme.cc +++ b/lily/output-def-scheme.cc @@ -1,9 +1,20 @@ /* - output-def-scheme.cc -- implement Output_def bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "output-def.hh" @@ -15,22 +26,22 @@ #include "lily-parser.hh" LY_DEFINE (ly_output_def_lookup, "ly:output-def-lookup", - 2, 1, 0, (SCM pap, SCM sym, SCM def), - "Look up @var{sym} in the @var{pap} output definition" - " (e.g., @code{\\paper}). Return the value or @var{def}" - " (which defaults to @code{'()}) if undefined.") + 2, 1, 0, (SCM def, SCM sym, SCM val), + "Return the value of @var{sym} in output definition @var{def}" + " (e.g., @code{\\paper}). If no value is found, return" + " @var{val} or @code{'()} if @var{val} is undefined.") { - LY_ASSERT_SMOB (Output_def, pap, 1); - Output_def *op = unsmob_output_def (pap); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *op = unsmob_output_def (def); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); SCM answer = op->lookup_variable (sym); if (answer == SCM_UNDEFINED) { - if (def == SCM_UNDEFINED) - def = SCM_EOL; + if (val == SCM_UNDEFINED) + val = SCM_EOL; - answer = def; + answer = val; } return answer; @@ -38,7 +49,7 @@ LY_DEFINE (ly_output_def_lookup, "ly:output-def-lookup", LY_DEFINE (ly_output_def_scope, "ly:output-def-scope", 1, 0, 0, (SCM def), - "Get the variable scope inside @var{def}.") + "Return the variable scope inside @var{def}.") { LY_ASSERT_SMOB (Output_def, def, 1); Output_def *op = unsmob_output_def (def); @@ -47,7 +58,7 @@ LY_DEFINE (ly_output_def_scope, "ly:output-def-scope", LY_DEFINE (ly_output_def_parent, "ly:output-def-parent", 1, 0, 0, (SCM def), - "Get the parent output definition of @var{def}.") + "Return the parent output definition of @var{def}.") { LY_ASSERT_SMOB (Output_def, def, 1); Output_def *op = unsmob_output_def (def); @@ -96,17 +107,17 @@ LY_DEFINE (ly_output_description, "ly:output-description", LY_DEFINE (ly_output_def_p, "ly:output-def?", 1, 0, 0, (SCM def), - "Is @var{def} a layout definition?") + "Is @var{def} an output definition?") { return ly_bool2scm (unsmob_output_def (def)); } LY_DEFINE (ly_paper_outputscale, "ly:paper-outputscale", - 1, 0, 0, (SCM bp), - "Get output-scale for @var{bp}.") + 1, 0, 0, (SCM def), + "Return the output-scale for output definition @var{def}.") { - LY_ASSERT_SMOB (Output_def, bp, 1); - Output_def *b = unsmob_output_def (bp); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *b = unsmob_output_def (def); return scm_from_double (output_scale (b)); } @@ -118,35 +129,37 @@ LY_DEFINE (ly_make_output_def, "ly:make-output-def", return bp->unprotect (); } -LY_DEFINE (ly_paper_get_font, "ly:paper-get-font", 2, 0, 0, - (SCM paper_smob, SCM chain), - "Return a font metric satisfying the font-qualifiers" - " in the alist chain @var{chain}. (An alist chain is a" - " list of alists, containing grob properties.)") +LY_DEFINE (ly_paper_get_font, "ly:paper-get-font", + 2, 0, 0, (SCM def, SCM chain), + "Find a font metric in output definition @var{def} satisfying" + " the font-qualifiers in alist chain @var{chain}, and return" + " it. (An alist chain is a list of alists, containing grob" + " properties.)") { - LY_ASSERT_SMOB (Output_def, paper_smob, 1); + LY_ASSERT_SMOB (Output_def, def, 1); - Output_def *paper = unsmob_output_def (paper_smob); + Output_def *paper = unsmob_output_def (def); Font_metric *fm = select_font (paper, chain); return fm->self_scm (); } -LY_DEFINE (ly_paper_get_number, "ly:paper-get-number", 2, 0, 0, - (SCM layout_smob, SCM name), - "Return the layout variable @var{name}.") +LY_DEFINE (ly_paper_get_number, "ly:paper-get-number", + 2, 0, 0, (SCM def, SCM sym), + "Return the value of variable @var{sym} in output definition" + " @var{def} as a double.") { - LY_ASSERT_SMOB (Output_def, layout_smob, 1); - Output_def *layout = unsmob_output_def (layout_smob); - return scm_from_double (layout->get_dimension (name)); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *layout = unsmob_output_def (def); + return scm_from_double (layout->get_dimension (sym)); } LY_DEFINE (ly_paper_fonts, "ly:paper-fonts", - 1, 0, 0, - (SCM bp), - "Return fonts from the @code{\\paper} block @var{bp}.") + 1, 0, 0, (SCM def), + "Return a list containing the fonts from output definition" + " @var{def} (e.g., @code{\\paper}).") { - LY_ASSERT_SMOB (Output_def, bp, 1); - Output_def *b = unsmob_output_def (bp); + LY_ASSERT_SMOB (Output_def, def, 1); + Output_def *b = unsmob_output_def (def); SCM tab1 = b->lookup_variable (ly_symbol2scm ("scaled-fonts")); SCM tab2 = b->lookup_variable (ly_symbol2scm ("pango-fonts")); diff --git a/lily/output-def.cc b/lily/output-def.cc index f9fbda9fb6..a67e8edb67 100644 --- a/lily/output-def.cc +++ b/lily/output-def.cc @@ -1,9 +1,20 @@ /* - music-output-def.cc -- implement Output_def + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "output-def.hh" @@ -11,6 +22,7 @@ #include "context-def.hh" #include "file-path.hh" #include "global-context.hh" +#include "international.hh" #include "interval.hh" #include "main.hh" #include "output-def.hh" @@ -29,8 +41,8 @@ Output_def::Output_def () parent_ = 0; smobify_self (); - - scope_ = ly_make_anonymous_module (false); + + scope_ = ly_make_module (false); } Output_def::Output_def (Output_def const &s) @@ -40,7 +52,7 @@ Output_def::Output_def (Output_def const &s) smobify_self (); input_origin_ = s.input_origin_; - scope_ = ly_make_anonymous_module (false); + scope_ = ly_make_module (false); if (ly_is_module (s.scope_)) ly_module_copy (scope_, s.scope_); } @@ -75,7 +87,7 @@ assign_context_def (Output_def * m, SCM transdef) { SCM sym = tp->get_context_name (); m->set_variable (sym, transdef); - } + } } /* find the translator for NAME. NAME must be a symbol. */ @@ -109,10 +121,10 @@ Output_def::lookup_variable (SCM sym) const SCM var = ly_module_lookup (scope_, sym); if (SCM_VARIABLEP (var) && SCM_VARIABLE_REF (var) != SCM_UNDEFINED) return SCM_VARIABLE_REF (var); - + if (parent_) return parent_->lookup_variable (sym); - + return SCM_UNDEFINED; } @@ -128,7 +140,114 @@ Output_def::set_variable (SCM sym, SCM val) scm_module_define (scope_, sym, val); } - +void +Output_def::normalize () +{ + Real paper_width; + SCM scm_paper_width = c_variable ("paper-width"); + + bool twosided = to_boolean (c_variable ("two-sided")); + // We don't distinguish between outer-margin / left-margin and so on + // until page-stencil positioning in page.scm + Real left_margin, left_margin_default; + SCM scm_left_margin_default = (twosided + ? c_variable ("outer-margin-default-scaled") + : c_variable ("left-margin-default-scaled")); + SCM scm_left_margin = (twosided + ? c_variable ("outer-margin") + : c_variable ("left-margin")); + + Real right_margin, right_margin_default; + SCM scm_right_margin_default = (twosided + ? c_variable ("inner-margin-default-scaled") + : c_variable ("right-margin-default-scaled")); + SCM scm_right_margin = (twosided + ? c_variable ("inner-margin") + : c_variable ("right-margin")); + + if (scm_paper_width == SCM_UNDEFINED + || scm_left_margin_default == SCM_UNDEFINED + || scm_right_margin_default == SCM_UNDEFINED) + { + programming_error ("called normalize () on paper with missing settings"); + return; + } + else + { + paper_width = scm_to_double (scm_paper_width); + left_margin_default = scm_to_double (scm_left_margin_default); + right_margin_default = scm_to_double (scm_right_margin_default); + } + + Real line_width; + Real line_width_default + = paper_width - left_margin_default - right_margin_default; + SCM scm_line_width = c_variable ("line-width"); + + Real binding_offset = 0; + if (twosided) + binding_offset = robust_scm2double (c_variable ("binding-offset"), 0); + + if (scm_line_width == SCM_UNDEFINED) + { + left_margin = ((scm_left_margin == SCM_UNDEFINED) + ? left_margin_default + : scm_to_double (scm_left_margin)); + right_margin = ((scm_right_margin == SCM_UNDEFINED) + ? right_margin_default + : scm_to_double (scm_right_margin)) + binding_offset; + line_width = paper_width - left_margin - right_margin; + } + else + { + line_width = scm_to_double (scm_line_width); + if (scm_left_margin == SCM_UNDEFINED) + { + // Vertically center systems if only line-width is given + if (scm_right_margin == SCM_UNDEFINED) + { + left_margin = (paper_width - line_width) / 2; + right_margin = left_margin; + } + else + { + right_margin = scm_to_double (scm_right_margin) + binding_offset; + left_margin = paper_width - line_width - right_margin; + } + } + else + { + left_margin = scm_to_double (scm_left_margin); + right_margin = ((scm_right_margin == SCM_UNDEFINED) + ? (paper_width - line_width - left_margin) + : scm_to_double (scm_right_margin)) + binding_offset; + } + } + + if (to_boolean (c_variable ("check-consistency"))) + { + // Consistency checks. If values don't match, set defaults. + if (abs (paper_width - line_width - left_margin - right_margin) > 1e-6) + { + line_width = line_width_default; + left_margin = left_margin_default; + right_margin = right_margin_default; + warning (_ ("margins do not fit with line-width, setting default values")); + } + else if ((left_margin < 0) || (right_margin < 0)) + { + line_width = line_width_default; + left_margin = left_margin_default; + right_margin = right_margin_default; + warning (_ ("systems run off the page due to improper paper settings, setting default values")); + } + } + + set_variable (ly_symbol2scm ("left-margin"), scm_from_double (left_margin)); + set_variable (ly_symbol2scm ("right-margin"), scm_from_double (right_margin)); + set_variable (ly_symbol2scm ("line-width"), scm_from_double (line_width)); +} + /* FIXME. This is broken until we have a generic way of putting lists inside the \layout block. */ Interval diff --git a/lily/output-property-engraver.cc b/lily/output-property-engraver.cc index d7f075d321..08196f8dc9 100644 --- a/lily/output-property-engraver.cc +++ b/lily/output-property-engraver.cc @@ -1,11 +1,21 @@ -/* - output-property-engraver.cc -- implement Output_property_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Han-Wen Nienhuys - - */ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2000--2011 Han-Wen Nienhuys + + 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 . +*/ #include "engraver.hh" #include "context.hh" diff --git a/lily/page-breaking-scheme.cc b/lily/page-breaking-scheme.cc index e258fe6856..653815dd30 100644 --- a/lily/page-breaking-scheme.cc +++ b/lily/page-breaking-scheme.cc @@ -1,10 +1,20 @@ /* - page-breaking-scheme.cc -- implement bindings to the various - page-breakers + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #include "paper-book.hh" diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index a5fe6278d0..fe1d163658 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -1,21 +1,144 @@ /* - page-breaking.cc -- implement a superclass and utility - functions shared by various page-breaking algorithms + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . +*/ + +/* + This is a utility class for page-breaking algorithms. There are some complex + parts of this class, some of which are useful to understand if you intend + to write a page breaking algorithm (ie. a subclass of Page_breaking). Most + of these complexities were introduced in order to break the problem of + page-breaking into simpler subproblems and to hide some of the bookkeeping + complexities of page breaking from the page breaking algorithms. + + COMPRESSED LINES + There are several functions that actually distribute systems across pages + (for example, the space_systems_XXX and pack_systems_XXX functions). If + each of these functions had to handle \noPageBreak, it would be a mess. + Therefore, we handle \noPageBreak by "compressing" the list of systems + before doing any layout: we concatenate any two systems separated by a + \noPageBreak into a single system. The page-breaking functions can do their + magic without encountering a \noPageBreak; we then "uncompress" the systems + at the end. We almost always work with cached_line_details_, which are + "compressed." + + CHUNKS + The basic operation of a page breaking algorithm is to repeatedly request + some systems from the line-breaker and place those systems on some pages. + With each repetition, the page breaking algorithm asks the line-breaker for + some systems that it thinks will help it achieve a better layout. The + Page_breaking class provides functionality to facilitate this in the case + that the page breaking algorithm only cares about the number of systems. + + Even if a page breaking algorithm only cares number of systems, there may + be many ways to satisfy its request. For example, in a piece with 2 scores + and a request for 10 systems, we could return 5 systems from each score or + 4 from the first and 6 from the second. Even within a score, we might + want to try several different line breaking configurations with a fixed + system count; if there is a forced \pageBreak, for example, we might wish + to tweak the number of systems on both sides of the \pageBreak independently. + + The Page_breaking class takes care of finding these configurations. It + divides the piece into "chunks" and sets up the line-breaker in such a way + that the number of systems in each chunk can be modified independently. + Chunks never cross score boundaries; each title and markup is its own chunk. + When a page breaking algorithm requests a number of systems, the Page_breaker + stores an array of potential configurations, which the page breaking + algorithm can iterate over using current_configuration(vsize). + + LINE_DIVISION + A Line_division is simply a way of storing the exact way in which the + total number of systems is distributed among chunks. Note that a + Line_division may not (in fact, usually will not) describe all of the chunks + in the entire book. Rather, it will describe the subset of chunks that lie + between some fixed starting and ending point. This subset of chunks changes + whenever a page breaking algorithm asks to consider a different pair of + starting and ending breakpoints. In particular, a Line_division should be + discarded after a call to set_current_breakpoints, since that Line_division + refers to a subset of chunks which might be different from the current + subset of chunks under consideration. + + HOW TO WRITE A PAGE BREAKING ALGORITHM + All page breakers supported by this class work more-or-less in the same way. + First, they request a particular number of systems by saying + set_current_breakpoints (0, last_break_position (), system_count) + (never mind what the first two arguments do, I'll get to them later). + Alternatively, you can do + set_to_ideal_line_configuration (0, last_break_position ()), + and the number of systems will be automatically chosen according to what + the line breaker wants. + + If there are multiple scores, there will be many different ways to achieve + a certain number of lines. You can see how many alternatives are available + with current_configuration_count (). For every i from 0 to + current_configuration_count ()-1, you can see the line division of the + corresponding configuration with current_configuration (i), or you can try + out various page configurations with one of the space_systems_xxx or + pack_systems_xxx functions. The first argument to each of these functions + is the configuration index. + + When you're done trying out configurations and you've picked the one + you want, do + break_into_pieces (0, last_break_position (), line_division_that_you_want); + return make_pages (systems_per_page, systems ()); + where systems_per_page is a vector of numbers telling how many systems are + on each page. You can get your systems_per_page vector by looking inside + the Page_spacing_results that are returned by space_systems_xxx or + pack_systems_xxx. + + A note on performance: set_current_breakpoints is EXPONENTIALLY SLOW unless + you constrain it by giving it a lower or an upper bound on the configurations + it looks for. Optimal_page_breaking, for example, works by trying + out a bunch of configurations, increasing the system count by one, trying + again and so on. Each time we increase the system count, we assume that the + best new configurations are going to be elementwise larger than the + best configuration for the previous system count (in other words, we're going + to get a new configuration just by adding an extra line to sone score + and leaving the rest the same). Therefore, we pass the best previous line + division as an lower bound to set_current_breakpoints. + + Now you should be in a position to understand Optimal_page_breaking::solve. + Go ahead and read that before finding out, in the next paragraph, + what the first two arguments to set_current_breakpoints do. + + "BREAKS" + Sometimes, it's useful to run this whole page-breaking machinery on a subset + of the book. To do this, you can mark certain "breaks" in the book (a poor + choice of name, perhaps, since a "break" here is different from a page break) + and you can run page breaking between any two breaks. You mark your breaks + by providing a Break_predicate (and, if you want, a Prob_break_predicate) + to Page_breaking's constructor. You then choose a subset of your book + by passing the starting and ending breaks to set_current_breakpoints. You + can see an example of this in Page_turn_page_breaking, where there is a break + everywhere that a page turn is allowed. */ #include "page-breaking.hh" #include "international.hh" #include "item.hh" +#include "line-interface.hh" #include "output-def.hh" +#include "page-layout-problem.hh" #include "page-spacing.hh" #include "paper-book.hh" #include "paper-score.hh" #include "paper-system.hh" +#include "text-interface.hh" #include "system.hh" #include "warn.hh" @@ -32,17 +155,37 @@ compress_lines (const vector &orig) { Line_details const &old = ret.back (); Line_details compressed = orig[i]; - compressed.extent_[DOWN] = old.extent_[DOWN]; - compressed.extent_[UP] = old.extent_[UP] + orig[i].extent_.length () + old.padding_; + /* + We must account for the padding between the lines that we are compressing. + The padding values come from "old," which is the upper system here. Note + the meaning of tight-spacing: if a system has tight-spacing, then the padding + _before_ it is ignored. + */ + Real padding = 0; + if (!orig[i].tight_spacing_) + padding = orig[i].title_ ? old.title_padding_ : old.padding_; + + // FIXME: double check these. Doesn't foo.piggyback (bar) mean + // that foo goes on top? + // TODO: break out a Line_details::piggyback from here? + compressed.shape_ = old.shape_.piggyback (orig[i].shape_, padding); + compressed.refpoint_extent_[UP] = old.refpoint_extent_[UP]; + compressed.refpoint_extent_[DOWN] += compressed.shape_.rest_[UP] - old.shape_.rest_[UP]; compressed.space_ += old.space_; compressed.inverse_hooke_ += old.inverse_hooke_; - compressed.title_ = old.title_; - /* we don't need the force_ field for the vertical spacing, - so we use force_ = n to signal that the line was compressed, - reducing the number of lines by n (and force_ = 0 otherwise). - This makes uncompression much easier. */ - compressed.force_ = old.force_ + 1; + compressed.compressed_lines_count_ = old.compressed_lines_count_ + 1; + compressed.compressed_nontitle_lines_count_ = + old.compressed_nontitle_lines_count_ + (compressed.title_ ? 0 : 1); + + // compressed.title_ is true if and only if the first of its + // compressed lines was a title. + compressed.title_ = old.title_; + + // adds footnotes of one line to the footnotes of another + compressed.footnotes_.insert (compressed.footnotes_.begin (), + old.footnotes_.begin (), old.footnotes_.end ()); + ret.back () = compressed; } else @@ -68,7 +211,7 @@ uncompress_solution (vector const &systems_per_page, { int compressed_count = 0; for (vsize j = start_sys; j < start_sys + systems_per_page[i]; j++) - compressed_count += (int)compressed[j].force_; + compressed_count += compressed[j].compressed_lines_count_ - 1; ret.push_back (systems_per_page[i] + compressed_count); start_sys += systems_per_page[i]; @@ -95,15 +238,46 @@ Page_breaking::next_system (Break_position const &break_pos) const return sys + 1; /* this page starts with a new System_spec */ } -Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break) +Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break, Prob_break_predicate prob_break) { book_ = pb; system_count_ = 0; + paper_height_ = robust_scm2double (pb->paper_->c_variable ("paper-height"), 1.0); ragged_ = to_boolean (pb->paper_->c_variable ("ragged-bottom")); ragged_last_ = to_boolean (pb->paper_->c_variable ("ragged-last-bottom")); - page_top_space_ = robust_scm2double (pb->paper_->c_variable ("page-top-space"), 0); + systems_per_page_ = max (0, robust_scm2int (pb->paper_->c_variable ("systems-per-page"), 0)); + max_systems_per_page_ = max (0, robust_scm2int (pb->paper_->c_variable ("max-systems-per-page"), 0)); + min_systems_per_page_ = max (0, robust_scm2int (pb->paper_->c_variable ("min-systems-per-page"), 0)); + orphan_penalty_ = robust_scm2int (pb->paper_->c_variable ("orphan-penalty"), 100000); + + Stencil *footnote_separator = Page_layout_problem::get_footnote_separator_stencil (pb->paper_); + + if (footnote_separator) + { + Interval separator_extent = footnote_separator->extent (Y_AXIS); + Real separator_span = separator_extent.length (); + + footnote_separator_stencil_height_ = separator_span; + } + else + footnote_separator_stencil_height_ = 0.0; + + 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); + + 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")); + min_systems_per_page_ = max_systems_per_page_ = 0; + } + if (max_systems_per_page_ && min_systems_per_page_ > max_systems_per_page_) + { + warning (_f ("min-systems-per-page is larger than max-systems-per-page, ignoring both values")); + min_systems_per_page_ = max_systems_per_page_ = 0; + } + create_system_list (); - find_chunks_and_breaks (is_break); + find_chunks_and_breaks (is_break, prob_break); } Page_breaking::~Page_breaking () @@ -122,10 +296,26 @@ Page_breaking::ragged_last () const return ragged_last_; } -Real -Page_breaking::page_top_space () const +int +Page_breaking::systems_per_page () const +{ + return systems_per_page_; +} + +int +Page_breaking::max_systems_per_page () const { - return page_top_space_; + if (systems_per_page_) + return systems_per_page_; + return max_systems_per_page_; +} + +int +Page_breaking::min_systems_per_page () const +{ + if (systems_per_page_) + return systems_per_page_; + return min_systems_per_page_; } vsize @@ -134,6 +324,58 @@ Page_breaking::system_count () const return system_count_; } +Real +Page_breaking::footnote_separator_stencil_height () const +{ + return footnote_separator_stencil_height_; +} + +Real +Page_breaking::footnote_padding () const +{ + return footnote_padding_; +} + +Real +Page_breaking::footnote_footer_padding () const +{ + return footnote_footer_padding_; +} + +bool +Page_breaking::too_many_lines (int line_count) const +{ + return max_systems_per_page () > 0 && line_count > max_systems_per_page (); +} + +bool +Page_breaking::too_few_lines (int line_count) const +{ + return line_count < min_systems_per_page (); +} + +Real +Page_breaking::line_count_penalty (int line_count) const +{ + if (too_many_lines (line_count)) + return (line_count - max_systems_per_page ()) * TERRIBLE_SPACING_PENALTY; + if (too_few_lines (line_count)) + return (min_systems_per_page () - line_count) * TERRIBLE_SPACING_PENALTY; + + return 0; +} + +int +Page_breaking::line_count_status (int line_count) const +{ + if (too_many_lines (line_count)) + return SYSTEM_COUNT_TOO_MANY; + if (too_few_lines (line_count)) + return SYSTEM_COUNT_TOO_FEW; + + return SYSTEM_COUNT_OK; +} + /* translate indices into breaks_ into start-end parameters for the line breaker */ void Page_breaking::line_breaker_args (vsize sys, @@ -199,9 +441,8 @@ Page_breaking::systems () ->get_broken_system_grobs (); ret = scm_cons (lines, ret); } - else + else if (Prob *pb = system_specs_[sys].prob_) { - Prob *pb = system_specs_[sys].prob_; ret = scm_cons (scm_list_1 (pb->self_scm ()), ret); pb->unprotect (); } @@ -209,25 +450,62 @@ Page_breaking::systems () return scm_append (scm_reverse (ret)); } -Real -Page_breaking::page_height (int page_num, bool last) const +SCM +Page_breaking::make_page (int page_num, bool last) const { bool last_part = ly_scm2bool (book_->paper_->c_variable ("is-last-bookpart")); SCM mod = scm_c_resolve_module ("scm page"); - SCM calc_height = scm_c_module_lookup (mod, "calc-printable-height"); - SCM make_page = scm_c_module_lookup (mod, "make-page"); - - calc_height = scm_variable_ref (calc_height); - make_page = scm_variable_ref (make_page); - - SCM page = scm_apply_0 (make_page, scm_list_n ( - book_->self_scm (), - ly_symbol2scm ("page-number"), scm_from_int (page_num), - ly_symbol2scm ("is-last-bookpart"), scm_from_bool (last_part), - ly_symbol2scm ("is-bookpart-last-page"), scm_from_bool (last), - SCM_UNDEFINED)); - SCM height = scm_apply_1 (calc_height, page, SCM_EOL); - return scm_to_double (height) - page_top_space_; + SCM make_page_scm = scm_c_module_lookup (mod, "make-page"); + + make_page_scm = scm_variable_ref (make_page_scm); + + return scm_apply_0 (make_page_scm, + scm_list_n (book_->self_scm (), + ly_symbol2scm ("page-number"), scm_from_int (page_num), + ly_symbol2scm ("is-last-bookpart"), scm_from_bool (last_part), + ly_symbol2scm ("is-bookpart-last-page"), scm_from_bool (last), + SCM_UNDEFINED)); +} + +// Returns the total height of the paper, including margins and +// space for the header/footer. This is an upper bound on +// page_height, and it doesn't depend on the current page. +Real +Page_breaking::paper_height () const +{ + return paper_height_; +} + +Real +Page_breaking::page_height (int page_num, bool last) const +{ + // The caches allow us to store the page heights for any + // non-negative page numbers. We use a negative value in the + // cache to signal that that position has not yet been initialized. + // This means that we won't cache properly if page_num is negative or + // if calc_height returns a negative number. But that's likely to + // be rare, so it shouldn't affect performance. + vector& cache = last ? last_page_height_cache_ : page_height_cache_; + if (page_num >= 0 && (int) cache.size () > page_num && cache[page_num] >= 0) + return cache[page_num]; + else + { + SCM mod = scm_c_resolve_module ("scm page"); + SCM page = make_page (page_num, last); + SCM calc_height = scm_c_module_lookup (mod, "calc-printable-height"); + calc_height = scm_variable_ref (calc_height); + + SCM height_scm = scm_apply_1 (calc_height, page, SCM_EOL); + Real height = scm_to_double (height_scm); + + if (page_num >= 0) + { + if ((int) cache.size () <= page_num) + cache.resize (page_num + 1, -1); + cache[page_num] = height; + } + return height; + } } SCM @@ -243,38 +521,96 @@ Page_breaking::breakpoint_property (vsize breakpoint, char const *str) } SCM -Page_breaking::make_pages (vector lines_per_page, SCM systems) +Page_breaking::get_page_configuration (SCM systems, int page_num, bool ragged, bool last) { - SCM layout_module = scm_c_resolve_module ("scm layout-page-layout"); - SCM page_module = scm_c_resolve_module ("scm page"); + SCM dummy_page = make_page (page_num, last); + Page_layout_problem layout (book_, dummy_page, systems); + return scm_is_pair (systems) ? layout.solution (ragged) : SCM_EOL; +} - SCM make_page = scm_c_module_lookup (layout_module, "stretch-and-draw-page"); +SCM +Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool last) +{ + // Create a stencil for each system. + SCM paper_systems = SCM_EOL; + for (SCM s = scm_reverse (systems); scm_is_pair (s); s = scm_cdr (s)) + { + SCM paper_system = scm_car (s); + if (Grob *g = unsmob_grob (scm_car (s))) + { + System *sys = dynamic_cast (g); + paper_system = sys->get_paper_system (); + } + + paper_systems = scm_cons (paper_system, paper_systems); + } + + // Create the page and draw it. + SCM page = make_page (page_num, last); + SCM page_module = scm_c_resolve_module ("scm page"); SCM page_stencil = scm_c_module_lookup (page_module, "page-stencil"); - make_page = scm_variable_ref (make_page); page_stencil = scm_variable_ref (page_stencil); - SCM book = book_->self_scm (); + Prob *p = unsmob_prob (page); + p->set_property ("lines", paper_systems); + 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"))); + + p->set_property ("foot-stencil", foot->smobbed_copy ()); + scm_apply_1 (page_stencil, page, SCM_EOL); + + return page; +} + +SCM +Page_breaking::make_pages (vector lines_per_page, SCM systems) +{ + if (scm_is_null (systems)) + return SCM_EOL; + int first_page_number = robust_scm2int (book_->paper_->c_variable ("first-page-number"), 1); - bool last_bookpart = ly_scm2bool (book_->paper_->c_variable ("is-last-bookpart")); SCM ret = SCM_EOL; SCM label_page_table = book_->top_paper ()->c_variable ("label-page-table"); if (label_page_table == SCM_UNDEFINED) label_page_table = SCM_EOL; + // Build a list of (systems . configuration) pairs. Note that we lay out + // the staves and find the configurations before drawing anything. Some + // grobs (like tuplet brackets) look at their neighbours while drawing + // 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; + for (vsize i = 0; i < lines_per_page.size (); i++) { - SCM page_num = scm_from_int (i + first_page_number); - bool partbook_last_page = (i == lines_per_page.size () - 1); - SCM rag = scm_from_bool (ragged () || ( partbook_last_page && ragged_last ())); + int page_num = i + first_page_number; + bool bookpart_last_page = (i == lines_per_page.size () - 1); + 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 page = scm_apply_0 (make_page, - scm_list_n (book, lines, page_num, rag, - scm_from_bool (last_bookpart), - scm_from_bool (partbook_last_page), - SCM_UNDEFINED)); + SCM config = get_page_configuration (lines, page_num, rag, bookpart_last_page); + + systems_and_configs = scm_cons (scm_cons (lines, config), systems_and_configs); + 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)) + { + 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); + /* collect labels */ + SCM page_num_scm = scm_from_int (page_num); for (SCM l = lines ; scm_is_pair (l) ; l = scm_cdr (l)) { SCM labels = SCM_EOL; @@ -287,16 +623,19 @@ Page_breaking::make_pages (vector lines_per_page, SCM systems) labels = prob->get_property ("labels"); for (SCM lbls = labels ; scm_is_pair (lbls) ; lbls = scm_cdr (lbls)) - label_page_table = scm_cons (scm_cons (scm_car (lbls), page_num), + label_page_table = scm_cons (scm_cons (scm_car (lbls), page_num_scm), label_page_table); } - scm_apply_1 (page_stencil, page, SCM_EOL); ret = scm_cons (page, ret); - systems = scm_list_tail (systems, line_count); + --page_num; } + + // By reversing the table, we ensure that duplicated labels (eg. those + // straddling a page turn) will appear in the table with their last + // occurence first. + label_page_table = scm_reverse_x (label_page_table, SCM_EOL); book_->top_paper ()->set_variable (ly_symbol2scm ("label-page-table"), label_page_table); - ret = scm_reverse (ret); return ret; } @@ -316,14 +655,7 @@ Page_breaking::create_system_list () { if (Paper_score *ps = dynamic_cast (unsmob_music_output (scm_car (s)))) { - SCM system_count = ps->layout ()->c_variable ("system-count"); - - if (scm_is_number (system_count)) - s = scm_append (scm_list_3 (scm_list_1 (scm_car (s)), - scm_vector_to_list (ps->get_paper_systems ()), - scm_cdr (s))); - else - system_specs_.push_back (System_spec (ps)); + system_specs_.push_back (System_spec (ps)); } else { @@ -334,10 +666,12 @@ Page_breaking::create_system_list () system_specs_.push_back (System_spec (pb)); } } + if (!system_specs_.size ()) + system_specs_.push_back (System_spec ()); } void -Page_breaking::find_chunks_and_breaks (Break_predicate is_break) +Page_breaking::find_chunks_and_breaks (Break_predicate is_break, Prob_break_predicate prob_is_break) { SCM force_sym = ly_symbol2scm ("force"); @@ -348,35 +682,72 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break) { if (system_specs_[i].pscore_) { - vector cols - = system_specs_[i].pscore_->root_system ()->used_columns (); + vector cols = system_specs_[i].pscore_->root_system ()->used_columns (); + vector forced_line_break_cols; + + SCM system_count = system_specs_[i].pscore_->layout ()->c_variable ("system-count"); + if (scm_is_number (system_count)) + { + // With system-count given, the line configuration for + // this score is fixed. We need to ensure that chunk + // boundaries only occur at line breaks. + Constrained_breaking breaking (system_specs_[i].pscore_); + vector details = breaking.line_details (0, VPOS, scm_to_int (system_count)); + + for (vsize j = 0; j < details.size (); j++) + forced_line_break_cols.push_back (details[j].last_column_); + } + + int last_forced_line_break_idx = 0; + vsize forced_line_break_idx = 0; vector line_breaker_columns; line_breaker_columns.push_back (0); for (vsize j = 1; j < cols.size (); j++) { + if (forced_line_break_cols.size ()) + { + if (forced_line_break_idx >= forced_line_break_cols.size () + || forced_line_break_cols[forced_line_break_idx] != cols[j]) + continue; + else + forced_line_break_idx++; + } + bool last = (j == cols.size () - 1); - bool break_point = is_break (cols[j]); + bool break_point = is_break && is_break (cols[j]); bool chunk_end = cols[j]->get_property ("page-break-permission") == force_sym; Break_position cur_pos = Break_position (i, line_breaker_columns.size (), cols[j], last); + // NOTE: even in the breaks_ list, forced_line_count_ + // refers to the number of lines between a + // Break_position and the start of that /chunk/. This + // is needed for system_count_bounds to work correctly, + // since it mixes Break_positions from breaks_ and + // chunks_. + if (scm_is_number (system_count)) + cur_pos.forced_line_count_ = forced_line_break_idx - last_forced_line_break_idx; + if (break_point || (i == system_specs_.size () - 1 && last)) breaks_.push_back (cur_pos); if (chunk_end || last) - chunks_.push_back (cur_pos); + { + chunks_.push_back (cur_pos); + last_forced_line_break_idx = forced_line_break_idx; + } if ((break_point || chunk_end) && !last) line_breaker_columns.push_back (j); } line_breaking_.push_back (Constrained_breaking (system_specs_[i].pscore_, line_breaker_columns)); } - else + else if (system_specs_[i].prob_) { - /* TODO: we want some way of applying Break_p to a prob? */ - if (i == system_specs_.size () - 1) + bool break_point = prob_is_break && prob_is_break (system_specs_[i].prob_); + if (break_point || i == system_specs_.size () - 1) breaks_.push_back (Break_position (i)); chunks_.push_back (Break_position (i)); @@ -406,6 +777,7 @@ Page_breaking::chunk_list (vsize start_index, vsize end_index) return ret; } +// Returns the minimum number of _non-title_ lines. vsize Page_breaking::min_system_count (vsize start, vsize end) { @@ -418,6 +790,7 @@ Page_breaking::min_system_count (vsize start, vsize end) return ret; } +// Returns the maximum number of _non-title_ lines. vsize Page_breaking::max_system_count (vsize start, vsize end) { @@ -430,6 +803,9 @@ Page_breaking::max_system_count (vsize start, vsize end) return ret; } +// The numbers returned by this function represent either +// the maximum or minimum number of _non-title_ lines +// per chunk. Page_breaking::Line_division Page_breaking::system_count_bounds (vector const &chunks, bool min) @@ -437,12 +813,15 @@ Page_breaking::system_count_bounds (vector const &chunks, assert (chunks.size () >= 2); Line_division ret; - ret.resize (chunks.size () - 1, 1); + ret.resize (chunks.size () - 1, 0); for (vsize i = 0; i + 1 < chunks.size (); i++) { vsize sys = next_system (chunks[i]); - if (system_specs_[sys].pscore_) + + if (chunks[i+1].forced_line_count_) + ret[i] = chunks[i+1].forced_line_count_; + else if (system_specs_[sys].pscore_) { vsize start; vsize end; @@ -525,13 +904,16 @@ Page_breaking::set_to_ideal_line_configuration (vsize start, vsize end) for (vsize i = 0; i+1 < current_chunks_.size (); i++) { vsize sys = next_system (current_chunks_[i]); - if (system_specs_[sys].pscore_) + + if (current_chunks_[i+1].forced_line_count_) + div.push_back (current_chunks_[i+1].forced_line_count_); + else if (system_specs_[sys].pscore_) { line_breaker_args (sys, current_chunks_[i], current_chunks_[i+1], &start, &end); div.push_back (line_breaking_[sys].best_solution (start, end).size ()); } else - div.push_back (1); + div.push_back (0); system_count_ += div.back (); } @@ -551,10 +933,6 @@ Page_breaking::cache_line_details (vsize configuration_index) if (cached_configuration_index_ != configuration_index) { cached_configuration_index_ = configuration_index; - SCM padding_scm = book_->paper_->c_variable ("page-breaking-between-system-padding"); - if (!scm_is_number (padding_scm)) - padding_scm = book_->paper_->c_variable ("between-system-padding"); - Real padding = robust_scm2double (padding_scm, 0.0); Line_division &div = current_configurations_[configuration_index]; uncompressed_line_details_.clear (); @@ -572,14 +950,14 @@ Page_breaking::cache_line_details (vsize configuration_index) } else { - assert (div[i] == 1); - uncompressed_line_details_.push_back (Line_details (system_specs_[sys].prob_)); - uncompressed_line_details_.back ().padding_ = - robust_scm2double (system_specs_[sys].prob_->get_property ("next-padding"), - padding); + assert (div[i] == 0); + uncompressed_line_details_.push_back (system_specs_[sys].prob_ + ? Line_details (system_specs_[sys].prob_, book_->paper_) + : Line_details ()); } } cached_line_details_ = compress_lines (uncompressed_line_details_); + compute_line_heights (); } } @@ -598,19 +976,19 @@ Page_breaking::line_divisions_rec (vsize system_count, Line_division *cur_division) { vsize my_index = cur_division->size (); - vsize others_min = 0; - vsize others_max = 0; + int others_min = 0; + int others_max = 0; for (vsize i = my_index + 1; i < min_sys.size (); i++) { others_min += min_sys[i]; others_max += max_sys[i]; } - others_max = min (others_max, system_count); - vsize real_min = max (min_sys[my_index], system_count - others_max); - vsize real_max = min (max_sys[my_index], system_count - others_min); + others_max = min (others_max, (int) system_count); + int real_min = max ((int) min_sys[my_index], (int) system_count - others_max); + int real_max = min ((int) max_sys[my_index], (int) system_count - others_min); - if (real_min > real_max || real_min <= 0) + if (real_min > real_max || real_min < 0) { /* this should never happen within a recursive call. If it happens at all, it means that we were called with an unsolvable problem @@ -619,7 +997,7 @@ Page_breaking::line_divisions_rec (vsize system_count, return; } - for (vsize i = real_min; i <= real_max; i++) + for (int i = real_min; i <= real_max; i++) { cur_division->push_back (i); if (my_index == min_sys.size () - 1) @@ -630,37 +1008,104 @@ Page_breaking::line_divisions_rec (vsize system_count, } } +void +Page_breaking::compute_line_heights () +{ + Real prev_hanging = 0; + Real prev_hanging_begin = 0; + Real prev_hanging_rest = 0; + + // refpoint_hanging is the y coordinate of the origin of this system. + // It may not be the same as refpoint_extent[UP], which is the + // refpoint of the first spaceable staff in this system. + Real prev_refpoint_hanging = 0; + for (vsize i = 0; i < cached_line_details_.size (); i++) + { + Line_details& cur = cached_line_details_[i]; + Line_shape shape = cur.shape_; + Real a = shape.begin_[UP]; + Real b = shape.rest_[UP]; + bool title = cur.title_; + Real refpoint_hanging = max (prev_hanging_begin + a, prev_hanging_rest + b); + + if (i > 0) + { + Real padding = 0; + Line_details const& prev = cached_line_details_[i-1]; + if (!cur.tight_spacing_) + padding = title + ? prev.title_padding_ + : prev.padding_; + Real min_dist = title + ? prev.title_min_distance_ + : prev.min_distance_; + refpoint_hanging = max (refpoint_hanging + padding, + prev_refpoint_hanging - prev.refpoint_extent_[DOWN] + + cur.refpoint_extent_[UP] + min_dist); + } + + Real hanging_begin = refpoint_hanging - shape.begin_[DOWN]; + Real hanging_rest = refpoint_hanging - shape.rest_[DOWN]; + Real hanging = max (hanging_begin, hanging_rest); + cur.tallness_ = hanging - prev_hanging; + prev_hanging = hanging; + prev_hanging_begin = hanging_begin; + prev_hanging_rest = hanging_rest; + prev_refpoint_hanging = refpoint_hanging; + } +} + vsize Page_breaking::min_page_count (vsize configuration, vsize first_page_num) { vsize ret = 1; + vsize page_starter = 0; Real cur_rod_height = 0; Real cur_spring_height = 0; Real cur_page_height = page_height (first_page_num, false); + int line_count = 0; cache_line_details (configuration); - for (vsize i = 0; i < cached_line_details_.size (); i++) - { - Real ext_len = cached_line_details_[i].extent_.length (); - Real next_rod_height = cur_rod_height + ext_len - + ((cur_rod_height > 0) ? cached_line_details_[i].padding_: 0); - Real next_spring_height = cur_spring_height + cached_line_details_[i].space_; - Real next_height = next_rod_height + (ragged () ? next_spring_height : 0); + if (cached_line_details_.size ()) + cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[0]); - if ((next_height > cur_page_height && cur_rod_height > 0) - || (i > 0 - && cached_line_details_[i-1].page_permission_ == ly_symbol2scm ("force"))) + for (vsize i = 0; i < cached_line_details_.size (); i++) + { + Line_details const &cur = cached_line_details_[i]; + Line_details const *const prev = (i > 0) ? &cached_line_details_[i-1] : 0; + Real ext_len; + if (cur_rod_height > 0) + ext_len = cur.tallness_; + else + ext_len = cur.full_height(); + + Real spring_len = (i > 0) ? prev->spring_length (cur) : 0; + Real next_rod_height = cur_rod_height + ext_len; + Real next_spring_height = cur_spring_height + spring_len; + Real next_height = next_rod_height + (ragged () ? next_spring_height : 0) + + min_whitespace_at_bottom_of_page (cur); + int next_line_count = line_count + cur.compressed_nontitle_lines_count_; + + if ((!too_few_lines (line_count) && (next_height > cur_page_height && cur_rod_height > 0)) + || too_many_lines (next_line_count) + || (prev && prev->page_permission_ == ly_symbol2scm ("force"))) { - cur_rod_height = ext_len; - cur_spring_height = cached_line_details_[i].space_; + line_count = cur.compressed_nontitle_lines_count_; + cur_rod_height = cur.full_height(); + cur_spring_height = 0; + page_starter = i; + cur_page_height = page_height (first_page_num + ret, false); + cur_page_height -= min_whitespace_at_top_of_page (cur); + ret++; } else { cur_rod_height = next_rod_height; cur_spring_height = next_spring_height; + line_count = next_line_count; } } @@ -677,22 +1122,39 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num) calculations that treated it as a non-last page were ok. */ - cur_page_height = page_height (first_page_num + ret - 1, true); - Real cur_height = cur_rod_height + ((ragged_last () || ragged ()) ? cur_spring_height : 0); - if (cur_height > cur_page_height - /* don't increase the page count if the last page had only one system */ - && cur_rod_height > cached_line_details_.back ().extent_.length ()) - ret++; + if (is_last ()) + { + cur_page_height = page_height (first_page_num + ret - 1, true); + cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[page_starter]); + cur_page_height -= min_whitespace_at_bottom_of_page (cached_line_details_.back ()); + + Real cur_height = cur_rod_height + ((ragged_last () || ragged ()) ? cur_spring_height : 0); + if (!too_few_lines (line_count - cached_line_details_.back ().compressed_nontitle_lines_count_) + && cur_height > cur_page_height + /* don't increase the page count if the last page had only one system */ + && cur_rod_height > cached_line_details_.back ().full_height ()) + ret++; + assert (ret <= cached_line_details_.size ()); + } - assert (ret <= cached_line_details_.size ()); return ret; } +// If systems_per_page_ is positive, we don't really try to space on N pages; +// we just put the requested number of systems on each page and penalize +// if the result doesn't have N pages. Page_spacing_result Page_breaking::space_systems_on_n_pages (vsize configuration, vsize n, vsize first_page_num) { Page_spacing_result ret; + if (systems_per_page_ > 0) + { + Page_spacing_result ret = space_systems_with_fixed_number_per_page (configuration, first_page_num); + ret.demerits_ += (ret.force_.size () == n) ? 0 : BAD_SPACING_PENALTY; + return ret; + } + cache_line_details (configuration); bool valid_n = (n >= min_page_count (configuration, first_page_num) && n <= cached_line_details_.size ()); @@ -734,12 +1196,22 @@ Page_breaking::blank_page_penalty () const return robust_scm2double (book_->paper_->lookup_variable (penalty_sym), 0.0); } +// If systems_per_page_ is positive, we don't really try to space on N +// or N+1 pages; see the comment to space_systems_on_n_pages. Page_spacing_result -Page_breaking::space_systems_on_n_or_one_more_pages (vsize configuration, vsize n, vsize first_page_num) +Page_breaking::space_systems_on_n_or_one_more_pages (vsize configuration, vsize n, vsize first_page_num, + Real penalty_for_fewer_pages) { Page_spacing_result n_res; Page_spacing_result m_res; + if (systems_per_page_ > 0) + { + Page_spacing_result ret = space_systems_with_fixed_number_per_page (configuration, first_page_num); + ret.demerits_ += (ret.force_.size () == n || ret.force_.size () == (n-1)) ? 0 : BAD_SPACING_PENALTY; + return ret; + } + cache_line_details (configuration); vsize min_p_count = min_page_count (configuration, first_page_num); bool valid_n = n >= min_p_count || n <= cached_line_details_.size (); @@ -770,11 +1242,11 @@ Page_breaking::space_systems_on_n_or_one_more_pages (vsize configuration, vsize m_res = finalize_spacing_result (configuration, m_res); n_res = finalize_spacing_result (configuration, n_res); - Real penalty = blank_page_penalty (); - n_res.demerits_ += penalty; + Real page_spacing_weight = robust_scm2double (book_->paper_->c_variable ("page-spacing-weight"), 10); + n_res.demerits_ += penalty_for_fewer_pages * page_spacing_weight; if (n_res.force_.size ()) - n_res.force_.back () += penalty; + n_res.force_.back () += penalty_for_fewer_pages; return (m_res.demerits_ < n_res.demerits_) ? m_res : n_res; } @@ -782,33 +1254,74 @@ Page_breaking::space_systems_on_n_or_one_more_pages (vsize configuration, vsize Page_spacing_result Page_breaking::space_systems_on_best_pages (vsize configuration, vsize first_page_num) { - vsize min_p_count = min_page_count (configuration, first_page_num); - Real odd_pages_penalty = blank_page_penalty (); + if (systems_per_page_ > 0) + return space_systems_with_fixed_number_per_page (configuration, first_page_num); cache_line_details (configuration); Page_spacer ps (cached_line_details_, first_page_num, this); - Page_spacing_result best = ps.solve (min_p_count); - best.force_.back () += (min_p_count % 2) ? odd_pages_penalty : 0; - best.demerits_ += (min_p_count % 2) ? odd_pages_penalty : 0; - for (vsize i = min_p_count+1; i <= cached_line_details_.size (); i++) + return finalize_spacing_result (configuration, ps.solve ()); +} + +Page_spacing_result +Page_breaking::space_systems_with_fixed_number_per_page (vsize configuration, + vsize first_page_num) +{ + Page_spacing_result res; + Page_spacing space (page_height (first_page_num, false), this); + vsize line = 0; + vsize page = 0; + vsize page_first_line = 0; + + cache_line_details (configuration); + while (line < cached_line_details_.size ()) { - Page_spacing_result cur = ps.solve (i); - cur.demerits_ += (i % 2) ? odd_pages_penalty : 0; - if (cur.demerits_ < best.demerits_) - best = cur; + page++; + space.clear (); + space.resize (page_height (first_page_num + page, false)); + + int system_count_on_this_page = 0; + while (system_count_on_this_page < systems_per_page_ + && line < cached_line_details_.size ()) + { + Line_details const &cur_line = cached_line_details_[line]; + space.append_system (cur_line); + system_count_on_this_page += cur_line.compressed_nontitle_lines_count_; + line++; + + if (cur_line.page_permission_ == ly_symbol2scm ("force")) + break; + } + + res.systems_per_page_.push_back (line - page_first_line); + + res.force_.push_back (space.force_); + res.penalty_ += cached_line_details_[line-1].page_penalty_; + if (system_count_on_this_page != systems_per_page_) + { + res.penalty_ += abs (system_count_on_this_page - systems_per_page_) * TERRIBLE_SPACING_PENALTY; + res.system_count_status_ |= ((system_count_on_this_page < systems_per_page_)) + ? SYSTEM_COUNT_TOO_FEW : SYSTEM_COUNT_TOO_MANY; + } + + page_first_line = line; } - return finalize_spacing_result (configuration, best); + /* Recalculate forces for the last page because we know now that is + really the last page. */ + space.resize (page_height (first_page_num + page, true)); + res.force_.back () = space.force_; + return finalize_spacing_result (configuration, res); } Page_spacing_result Page_breaking::pack_systems_on_least_pages (vsize configuration, vsize first_page_num) { + // TODO: add support for min/max-systems-per-page. Page_spacing_result res; vsize page = 0; vsize page_first_line = 0; - Page_spacing space (page_height (first_page_num, false), page_top_space_); + Page_spacing space (page_height (first_page_num, false), this); cache_line_details (configuration); for (vsize line = 0; line < cached_line_details_.size (); line++) @@ -874,7 +1387,7 @@ Page_breaking::finalize_spacing_result (vsize configuration, Page_spacing_result Real line_force = 0; Real line_penalty = 0; - Real page_force = 0; + Real page_demerits = res.penalty_; Real page_weighting = robust_scm2double (book_->paper_->c_variable ("page-spacing-weight"), 10); for (vsize i = 0; i < uncompressed_line_details_.size (); i++) @@ -886,10 +1399,8 @@ Page_breaking::finalize_spacing_result (vsize configuration, Page_spacing_result for (vsize i = 0; i < res.force_.size (); i++) { Real f = res.force_[i]; - if (isinf (f) && res.systems_per_page_[i] == 1) - f = 20000; - page_force += f * f; + page_demerits += min(f*f, BAD_SPACING_PENALTY); } /* for a while we tried averaging page and line forces across pages instead @@ -897,7 +1408,7 @@ Page_breaking::finalize_spacing_result (vsize configuration, Page_spacing_result with a very bad page force (for example because of a forced page break), the page breaker will put in a _lot_ of pages so that the bad force becomes averaged out over many pages. */ - res.demerits_ = line_force + line_penalty + (page_force + res.penalty_) * page_weighting; + res.demerits_ = line_force + line_penalty + page_demerits * page_weighting; return res; } @@ -912,15 +1423,20 @@ Page_breaking::finalize_spacing_result (vsize configuration, Page_spacing_result Page_spacing_result Page_breaking::space_systems_on_1_page (vector const &lines, Real page_height, bool ragged) { - Page_spacing space (page_height, page_top_space_); + Page_spacing space (page_height, this); Page_spacing_result ret; + int line_count = 0; for (vsize i = 0; i < lines.size (); i++) - space.append_system (lines[i]); + { + space.append_system (lines[i]); + line_count += lines[i].compressed_nontitle_lines_count_; + } ret.systems_per_page_.push_back (lines.size ()); ret.force_.push_back (ragged ? min (space.force_, 0.0) : space.force_); - ret.penalty_ = lines.back ().page_penalty_ + lines.back ().turn_penalty_; + ret.penalty_ = line_count_penalty (line_count) + lines.back ().page_penalty_ + lines.back ().turn_penalty_; + ret.system_count_status_ |= line_count_status (line_count); /* don't do finalize_spacing_result () because we are only an internal function */ return ret; @@ -947,29 +1463,54 @@ Page_breaking::space_systems_on_2_pages (vsize configuration, vsize first_page_n p1.systems_per_page_.push_back (p2.systems_per_page_[0]); p1.force_.push_back (p2.force_[0]); p1.penalty_ += p2.penalty_ - cached_line_details_[i].turn_penalty_; + p1.system_count_status_ |= p2.system_count_status_; return p1; } vector page1_force; vector page2_force; - Page_spacing page1 (page1_height, page_top_space_); - Page_spacing page2 (page2_height, page_top_space_); + + // page1_penalty and page2_penalty store the penalties based + // on min-systems-per-page and max-systems-per-page. + vector page1_penalty; + vector page2_penalty; + + // page1_status and page2_status keep track of whether the min-systems-per-page + // and max-systems-per-page constraints are satisfied. + vector page1_status; + vector page2_status; + + Page_spacing page1 (page1_height, this); + Page_spacing page2 (page2_height, this); + int page1_line_count = 0; + int page2_line_count = 0; page1_force.resize (cached_line_details_.size () - 1, infinity_f); page2_force.resize (cached_line_details_.size () - 1, infinity_f); + page1_penalty.resize (cached_line_details_.size () - 1, infinity_f); + page2_penalty.resize (cached_line_details_.size () - 1, infinity_f); + page1_status.resize (cached_line_details_.size () - 1, 0); + page2_status.resize (cached_line_details_.size () - 1, 0); /* find the page 1 and page 2 forces for each page-breaking position */ for (vsize i = 0; i < page1_force.size (); i++) { page1.append_system (cached_line_details_[i]); page2.prepend_system (cached_line_details_[cached_line_details_.size () - 1 - i]); + page1_line_count += cached_line_details_[i].compressed_nontitle_lines_count_; + page2_line_count += cached_line_details_[cached_line_details_.size () - 1 - i].compressed_nontitle_lines_count_; + page1_force[i] = (ragged1 && page1.force_ < 0 && i > 0) ? infinity_f : page1.force_; + page1_penalty[i] = line_count_penalty (page1_line_count); + page1_status[i] = line_count_status (page1_line_count); if (ragged2) page2_force[page2_force.size () - 1 - i] = (page2.force_ < 0 && i + 1 < page1_force.size ()) ? infinity_f : 0; else page2_force[page2_force.size () - 1 - i] = page2.force_; + page2_penalty[page2_penalty.size () - 1 - i] = line_count_penalty (page2_line_count); + page2_status[page2_penalty.size () - 1 - i] = line_count_status (page2_line_count); } /* find the position that minimises the sum of the page forces */ @@ -978,8 +1519,12 @@ Page_breaking::space_systems_on_2_pages (vsize configuration, vsize first_page_n for (vsize i = 0; i < page1_force.size (); i++) { Real f = page1_force[i] * page1_force[i] + page2_force[i] * page2_force[i]; - Real uneven = 2 * (page1_force[i] - page2_force[i]); - Real dem = uneven * uneven + f + + // NOTE: we treat max-systems-per-page and min-systems-per-page as soft + // constraints. That is, we penalize harshly when they don't happen + // but we don't completely reject. + Real dem = f + + page1_penalty[i] + page2_penalty[i] + cached_line_details_[i+1].page_penalty_ + cached_line_details_.back ().page_penalty_ + cached_line_details_.back ().turn_penalty_; if (dem < best_demerits) @@ -994,9 +1539,11 @@ Page_breaking::space_systems_on_2_pages (vsize configuration, vsize first_page_n ret.systems_per_page_.push_back (cached_line_details_.size () - best_sys_count); ret.force_.push_back (page1_force[best_sys_count-1]); ret.force_.push_back (page2_force[best_sys_count-1]); + ret.system_count_status_ = page1_status[best_sys_count-1] | page2_status[best_sys_count-1]; ret.penalty_ = cached_line_details_[best_sys_count-1].page_penalty_ + cached_line_details_.back ().page_penalty_ - + cached_line_details_.back ().turn_penalty_; + + cached_line_details_.back ().turn_penalty_ + + page1_penalty[best_sys_count-1] + page2_penalty[best_sys_count-1]; /* don't do finalize_spacing_result () because we are only an internal function */ return ret; @@ -1036,3 +1583,53 @@ Page_breaking::last_break_position () const { return breaks_.size () - 1; } + +// This gives the minimum distance between the top of the +// printable area (ie. the bottom of the top-margin) and +// the extent box of the topmost system. +Real +Page_breaking::min_whitespace_at_top_of_page (Line_details const &line) const +{ + SCM first_system_spacing = book_->paper_->c_variable ("top-system-spacing"); + if (line.title_) + first_system_spacing = book_->paper_->c_variable ("top-markup-spacing"); + + Real min_distance = -infinity_f; + Real padding = 0; + + Page_layout_problem::read_spacing_spec (first_system_spacing, + &min_distance, + ly_symbol2scm ("minimum-distance")); + Page_layout_problem::read_spacing_spec (first_system_spacing, + &padding, + ly_symbol2scm ("padding")); + + // FIXME: take into account the height of the header + Real translate = max (line.shape_.begin_[UP], line.shape_.rest_[UP]); + return max (0.0, max (padding, min_distance - translate)); +} + +Real +Page_breaking::min_whitespace_at_bottom_of_page (Line_details const &line) const +{ + SCM last_system_spacing = book_->paper_->c_variable ("last-bottom-spacing"); + Real min_distance = -infinity_f; + Real padding = 0; + + Page_layout_problem::read_spacing_spec (last_system_spacing, + &min_distance, + ly_symbol2scm ("minimum-distance")); + Page_layout_problem::read_spacing_spec (last_system_spacing, + &padding, + ly_symbol2scm ("padding")); + + // FIXME: take into account the height of the footer + Real translate = min (line.shape_.begin_[DOWN], line.shape_.rest_[DOWN]); + return max (0.0, max (padding, min_distance + translate)); +} + +int +Page_breaking::orphan_penalty () const +{ + return orphan_penalty_; +} diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc new file mode 100644 index 0000000000..9ee2b3fea1 --- /dev/null +++ b/lily/page-layout-problem.cc @@ -0,0 +1,917 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2009--2011 Joe Neeman + + 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 . +*/ + +#include "page-layout-problem.hh" + +#include "align-interface.hh" +#include "axis-group-interface.hh" +#include "hara-kiri-group-spanner.hh" +#include "international.hh" +#include "item.hh" +#include "output-def.hh" +#include "paper-book.hh" +#include "paper-column.hh" +#include "paper-score.hh" +#include "pointer-group-interface.hh" +#include "prob.hh" +#include "skyline-pair.hh" +#include "system.hh" +#include "text-interface.hh" + +/* + Returns a stencil for the footnote of each system. This stencil may + itself be comprised of several footnotes. +*/ + +SCM +Page_layout_problem::get_footnotes_from_lines (SCM lines, Real padding) +{ + 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)) + { + if (Grob *g = unsmob_grob (scm_car (s))) + { + System *sys = dynamic_cast (g); + if (!sys) + { + programming_error ("got a grob for footnotes that wasn't a System"); + continue; + } + footnotes = scm_cons (sys->make_footnote_stencil (padding).smobbed_copy (), footnotes); + } + else if (Prob *p = unsmob_prob (scm_car (s))) + { + SCM stencils = p->get_property ("footnotes"); + if (stencils == SCM_EOL) + continue; + 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); + footnotes = scm_cons (footnote_stencil.smobbed_copy (), footnotes); + } + } + + if (!scm_is_pair (footnotes)) + return SCM_EOL; + + return scm_reverse (footnotes); +} + +Stencil* +Page_layout_problem::get_footnote_separator_stencil (Output_def *paper) +{ + SCM props = scm_call_1 (ly_lily_module_constant ("layout-extract-page-properties"), + paper->self_scm ()); + + SCM markup = paper->c_variable ("footnote-separator-markup"); + + if (!Text_interface::is_markup (markup)) + return NULL; + + SCM footnote_stencil = Text_interface::interpret_markup (paper->self_scm (), + props, markup); + + Stencil *footnote_separator = unsmob_stencil (footnote_stencil); + + return footnote_separator; +} + +void +Page_layout_problem::add_footnotes_to_footer (SCM footnotes, Stencil *foot, Paper_book *pb) +{ + bool footnotes_found = false; + Real footnote_padding = robust_scm2double (pb->paper_->c_variable ("footnote-padding"), 0.0); + Real footnote_footer_padding = robust_scm2double (pb->paper_->c_variable ("footnote-footer-padding"), 0.0); + + footnotes = scm_reverse (footnotes); + + for (SCM s = footnotes; scm_is_pair (s); s = scm_cdr (s)) + { + Stencil *stencil = unsmob_stencil (scm_car (s)); + + if (!stencil) + continue; + + if (!stencil->is_empty ()) + { + foot->add_at_edge (Y_AXIS, UP, *stencil, (!footnotes_found ? footnote_footer_padding : footnote_padding)); + footnotes_found = true; + } + } + + if (footnotes_found) + { + Stencil *separator = get_footnote_separator_stencil (pb->paper_); + if (separator) + foot->add_at_edge (Y_AXIS, UP, *separator, footnote_padding); + } +} + +Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM systems) + : bottom_skyline_ (DOWN) +{ + Prob *page = unsmob_prob (page_scm); + header_height_ = 0; + footer_height_ = 0; + header_padding_ = 0; + footer_padding_ = 0; + page_height_ = 100; + + if (page) + { + 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); + + 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); + } + + // Initially, bottom_skyline_ represents the top of the page. Make + // it solid, so that the top of the first system will be forced + // below the top of the printable area. + bottom_skyline_.set_minimum_height (-header_height_); + + SCM system_system_spacing = SCM_EOL; + SCM score_system_spacing = SCM_EOL; + SCM markup_system_spacing = SCM_EOL; + SCM score_markup_spacing = SCM_EOL; + SCM markup_markup_spacing = SCM_EOL; + + // top_system_spacing controls the spring from the top of the printable + // area to the first staff. It allows the user to control the offset of + // the first staff (as opposed to the top of the first system) from the + // top of the page. Similarly for last_bottom_spacing. + SCM top_system_spacing = SCM_EOL; + SCM last_bottom_spacing = SCM_EOL; + if (pb && pb->paper_) + { + Output_def *paper = pb->paper_; + system_system_spacing = paper->c_variable ("system-system-spacing"); + score_system_spacing = paper->c_variable ("score-system-spacing"); + markup_system_spacing = paper->c_variable ("markup-system-spacing"); + score_markup_spacing = paper->c_variable ("score-markup-spacing"); + markup_markup_spacing = paper->c_variable ("markup-markup-spacing"); + last_bottom_spacing = paper->c_variable ("last-bottom-spacing"); + top_system_spacing = paper->c_variable ("top-system-spacing"); + if (scm_is_pair (systems) && unsmob_prob (scm_car (systems))) + top_system_spacing = paper->c_variable ("top-markup-spacing"); + + // Note: the page height here does _not_ reserve space for headers and + // footers. This is because we want to anchor the top-system-spacing + // spring at the _top_ of the header. + page_height_ -= robust_scm2double (paper->c_variable ("top-margin"), 0) + + robust_scm2double (paper->c_variable ("bottom-margin"), 0); + + read_spacing_spec (top_system_spacing, &header_padding_, ly_symbol2scm ("padding")); + read_spacing_spec (last_bottom_spacing, &footer_padding_, ly_symbol2scm ("padding")); + } + bool last_system_was_title = false; + + + for (SCM s = systems; scm_is_pair (s); s = scm_cdr (s)) + { + bool first = (s == systems); + + if (Grob *g = unsmob_grob (scm_car (s))) + { + System *sys = dynamic_cast (g); + if (!sys) + { + programming_error ("got a grob for vertical spacing that wasn't a System"); + continue; + } + + SCM spec = system_system_spacing; + if (first) + spec = top_system_spacing; + else if (last_system_was_title) + spec = markup_system_spacing; + else if (0 == Paper_column::get_rank (sys->get_bound (LEFT))) + spec = score_system_spacing; + + Spring spring (0, 0); + Real padding = 0.0; + Real indent = line_dimensions_int (sys->paper_score ()->layout (), sys->get_rank ())[LEFT]; + alter_spring_from_spacing_spec (spec, &spring); + read_spacing_spec (spec, &padding, ly_symbol2scm ("padding")); + + append_system (sys, spring, indent, padding); + last_system_was_title = false; + } + else if (Prob *p = unsmob_prob (scm_car (s))) + { + SCM spec = first ? top_system_spacing + : (last_system_was_title ? markup_markup_spacing : score_markup_spacing); + Spring spring (0, 0); + Real padding = 0.0; + alter_spring_from_spacing_spec (spec, &spring); + read_spacing_spec (spec, &padding, ly_symbol2scm ("padding")); + + append_prob (p, spring, padding); + last_system_was_title = true; + } + else + programming_error ("got a system that was neither a Grob nor a Prob"); + } + + Spring last_spring (0, 0); + Real last_padding = 0; + alter_spring_from_spacing_spec (last_bottom_spacing, &last_spring); + read_spacing_spec (last_bottom_spacing, &last_padding, ly_symbol2scm ("padding")); + last_spring.ensure_min_distance (last_padding - bottom_skyline_.max_height () + footer_height_); + springs_.push_back (last_spring); + + if (elements_.size ()) + { + Real bottom_padding = 0; + + // TODO: junk bottom-space now that we have last-bottom-spacing? + // bottom-space has the flexibility that one can do it per-system. + // NOTE: bottom-space is misnamed since it is not stretchable space. + if (Prob *p = elements_.back ().prob) + bottom_padding = robust_scm2double (p->get_property ("bottom-space"), 0); + else if (elements_.back ().staves.size ()) + { + SCM details = get_details (elements_.back ()); + bottom_padding = robust_scm2double (ly_assoc_get (ly_symbol2scm ("bottom-space"), + details, + SCM_BOOL_F), + 0.0); + } + page_height_ -= bottom_padding; + } +} + +void +Page_layout_problem::set_header_height (Real height) +{ + header_height_ = height; +} + +void +Page_layout_problem::set_footer_height (Real height) +{ + footer_height_ = height; +} + +void +Page_layout_problem::append_system (System *sys, Spring const& spring, Real indent, Real padding) +{ + Grob *align = sys->get_vertical_alignment (); + if (!align) + return; + + align->set_property ("positioning-done", SCM_BOOL_T); + + extract_grob_set (align, "elements", all_elts); + vector elts = filter_dead_elements (all_elts); + vector minimum_offsets = Align_interface::get_minimum_translations_without_min_dist (align, elts, Y_AXIS); + vector minimum_offsets_with_min_dist = Align_interface::get_minimum_translations (align, elts, Y_AXIS); + + Skyline up_skyline (UP); + Skyline down_skyline (DOWN); + build_system_skyline (elts, minimum_offsets_with_min_dist, &up_skyline, &down_skyline); + up_skyline.shift (indent); + down_skyline.shift (indent); + + /* + We need to call distance with skyline-horizontal-padding because + the system skyline-horizontal-padding is not added during the creation + of an individual staff. So we add the padding for the distance check + at the time of adding in the system. + */ + Real minimum_distance = up_skyline.distance (bottom_skyline_, robust_scm2double (sys->get_property ("skyline-horizontal-padding"), 0)) + padding; + + Spring spring_copy = spring; + spring_copy.ensure_min_distance (minimum_distance); + springs_.push_back (spring_copy); + + bottom_skyline_ = down_skyline; + elements_.push_back (Element (elts, minimum_offsets, padding)); + + // Add the springs for the VerticalAxisGroups in this system. + + // If the user has specified the offsets of the individual staves, fix the + // springs at the given distances. Otherwise, use stretchable springs. + SCM details = get_details (elements_.back ()); + SCM manual_dists = ly_assoc_get (ly_symbol2scm ("alignment-distances"), details, SCM_EOL); + vsize last_spaceable_staff = 0; + bool found_spaceable_staff = false; + for (vsize i = 0; i < elts.size (); ++i) + { + if (is_spaceable (elts[i])) + { + // We don't add a spring for the first staff, since + // we are only adding springs _between_ staves here. + if (!found_spaceable_staff) + { + found_spaceable_staff = true; + last_spaceable_staff = i; + continue; + } + + Spring spring (0.5, 0.0); + SCM spec = elts[last_spaceable_staff]->get_property ("staff-staff-spacing"); + alter_spring_from_spacing_spec (spec, &spring); + + springs_.push_back (spring); + Real min_distance = (found_spaceable_staff ? minimum_offsets_with_min_dist[last_spaceable_staff] : 0) - minimum_offsets_with_min_dist[i]; + springs_.back ().ensure_min_distance (min_distance); + + if (scm_is_pair (manual_dists)) + { + if (scm_is_number (scm_car (manual_dists))) + { + Real dy = scm_to_double (scm_car (manual_dists)); + + springs_.back ().set_distance (dy); + springs_.back ().set_min_distance (dy); + springs_.back ().set_inverse_stretch_strength (0); + } + manual_dists = scm_cdr (manual_dists); + } + last_spaceable_staff = i; + } + } + + // Corner case: there was only one staff, and it wasn't spaceable. + // Mark it spaceable, because we do not allow non-spaceable staves + // to be at the top or bottom of a system. + if (!found_spaceable_staff && elts.size ()) + mark_as_spaceable (elts[0]); +} + +void +Page_layout_problem::append_prob (Prob *prob, Spring const& spring, Real padding) +{ + Skyline_pair *sky = Skyline_pair::unsmob (prob->get_property ("vertical-skylines")); + Real minimum_distance = 0; + bool tight_spacing = to_boolean (prob->get_property ("tight-spacing")); + + if (sky) + { + minimum_distance = (*sky)[UP].distance (bottom_skyline_); + bottom_skyline_ = (*sky)[DOWN]; + } + else if (Stencil *sten = unsmob_stencil (prob->get_property ("stencil"))) + { + Interval iv = sten->extent (Y_AXIS); + minimum_distance = iv[UP] - bottom_skyline_.max_height (); + + bottom_skyline_.clear (); + bottom_skyline_.set_minimum_height (iv[DOWN]); + } + + Spring spring_copy = spring; + if (tight_spacing) + { + spring_copy.set_min_distance (minimum_distance); + spring_copy.set_inverse_stretch_strength (0.0); + spring_copy.set_distance (0.0); + } + else + spring_copy.ensure_min_distance (minimum_distance + padding); + + springs_.push_back (spring_copy); + elements_.push_back (Element (prob, padding)); +} + +void +Page_layout_problem::solve_rod_spring_problem (bool ragged) +{ + Simple_spacer spacer; + + for (vsize i = 0; i < springs_.size (); ++i) + spacer.add_spring (springs_[i]); + + spacer.solve (page_height_, ragged); + solution_ = spacer.spring_positions (); + + if (!spacer.fits ()) + { + Real overflow = spacer.configuration_length (spacer.force ()) + - page_height_; + if (ragged && overflow < 1e-6) + warning (_ ("cannot fit music on page: ragged-spacing was requested, but page was compressed")); + else + { + warning (_f ("cannot fit music on page: overflow is %f", + overflow)); + warning (_ ("compressing music to fit")); + vsize space_count = solution_.size (); + Real spacing_increment = overflow / (space_count - 2); + for (vsize i = 2; i < space_count; i++) + solution_[i] -= (i-1) * spacing_increment; + } + } +} + +// The solution_ vector stores the position of every live VerticalAxisGroup +// and every title. From that information, +// 1) within each system, stretch the staves so they land at the right position +// 2) find the offset of each system (relative to the printable area of the page). +// TODO: this function is getting too long, maybe split it up? +SCM +Page_layout_problem::find_system_offsets () +{ + SCM system_offsets = SCM_EOL; + SCM *tail = &system_offsets; + + // spring_idx 0 is the top of the page. Interesting values start from 1. + vsize spring_idx = 1; + vector loose_lines; + vector loose_line_min_distances; + Grob *last_spaceable_line = 0; + Real last_spaceable_line_translation = 0; + Interval last_title_extent; + for (vsize i = 0; i < elements_.size (); ++i) + { + if (elements_[i].prob) + { + *tail = scm_cons (scm_from_double (solution_[spring_idx]), SCM_EOL); + tail = SCM_CDRLOC (*tail); + Interval prob_extent = unsmob_stencil (elements_[i].prob->get_property ("stencil"))->extent (Y_AXIS); + + // Lay out any non-spaceable lines between this line and + // the last one. + if (loose_lines.size ()) + { + Interval loose_extent = loose_lines.back ()->extent (loose_lines.back (), Y_AXIS); + Real min_distance = (-loose_extent[DOWN] + prob_extent[UP] + + elements_[i].padding); + + loose_line_min_distances.push_back (min_distance); + loose_lines.push_back (0); + + distribute_loose_lines (loose_lines, loose_line_min_distances, + last_spaceable_line_translation, -solution_[spring_idx]); + loose_lines.clear (); + loose_line_min_distances.clear (); + } + + last_spaceable_line = 0; + last_spaceable_line_translation = -solution_[spring_idx]; + last_title_extent = prob_extent; + spring_idx++; + } + else + { + // Getting this signs right here is a little tricky. The configuration + // we return has zero at the top of the page and positive numbers further + // down, as does the solution_ vector. Within a staff, however, positive + // numbers are up. + // TODO: perhaps change the way the page 'configuration variable works so + // that it is consistent with the usual up/down sign conventions in + // Lilypond. Then this would be less confusing. + + // These two positions are relative to the page (with positive numbers being + // down). + Real first_staff_position = solution_[spring_idx]; + Real first_staff_min_translation = elements_[i].min_offsets.size () ? elements_[i].min_offsets[0] : 0; + Real system_position = first_staff_position + first_staff_min_translation; + + // Position the staves within this system. + vector const& min_offsets = elements_[i].min_offsets; + bool found_spaceable_staff = false; + for (vsize staff_idx = 0; staff_idx < elements_[i].staves.size (); ++staff_idx) + { + Grob *staff = elements_[i].staves[staff_idx]; + staff->set_property ("system-Y-offset", scm_from_double (-system_position)); + + if (is_spaceable (staff)) + { + // this is relative to the system: negative numbers are down. + staff->translate_axis (system_position - solution_[spring_idx], Y_AXIS); + + // Lay out any non-spaceable lines between this line and + // the last one. + if (loose_lines.size ()) + { + if (staff_idx) + loose_line_min_distances.push_back (min_offsets[staff_idx-1] - min_offsets[staff_idx]); + else + loose_line_min_distances.push_back (elements_[i].padding - min_offsets[staff_idx]); + loose_lines.push_back (staff); + + distribute_loose_lines (loose_lines, loose_line_min_distances, + last_spaceable_line_translation, -solution_[spring_idx]); + loose_lines.clear (); + loose_line_min_distances.clear (); + } + last_spaceable_line = staff; + last_spaceable_line_translation = -solution_[spring_idx]; + found_spaceable_staff = true; + spring_idx++; + } + else + { + if (loose_lines.empty ()) + loose_lines.push_back (last_spaceable_line); + + if (staff_idx) + // NOTE: the way we do distances between loose lines (and other lines too, actually) + // is not the most accurate way possible: we only insert rods between adjacent + // lines. To be more accurate, we could insert rods between non-adjacent lines + // using a scheme similar to the one in set_column_rods. + loose_line_min_distances.push_back (min_offsets[staff_idx-1] - min_offsets[staff_idx]); + else + { // this is the first line in a system + Real min_dist = 0; + if (loose_lines.back ()) + // distance to the final line in the preceding system, + // including 'system-system-spacing 'padding + min_dist = (Axis_group_interface::minimum_distance (loose_lines.back (), + staff, + Y_AXIS) + + elements_[i].padding); + else if (!last_title_extent.is_empty ()) + // distance to the preceding title, + // including 'markup-system-spacing 'padding + min_dist = (staff->extent (staff, Y_AXIS)[UP] - last_title_extent[DOWN] + + elements_[i].padding); + else // distance to the top margin + min_dist = header_padding_ + header_height_ + staff->extent (staff, Y_AXIS)[UP]; + + loose_line_min_distances.push_back (min_dist); + } + loose_lines.push_back (staff); + } + } + + // Corner case: even if a system has no live staves, it still takes up + // one spring (a system with one live staff also takes up one spring), + // which we need to increment past. + if (!found_spaceable_staff) + spring_idx++; + + *tail = scm_cons (scm_from_double (system_position), SCM_EOL); + tail = SCM_CDRLOC (*tail); + } + } + + if (loose_lines.size ()) + { + Grob *last = loose_lines.back (); + Interval last_ext = last->extent (last, Y_AXIS); + loose_line_min_distances.push_back (-last_ext[DOWN] + footer_height_ + footer_padding_); + loose_lines.push_back (0); + + distribute_loose_lines (loose_lines, loose_line_min_distances, + last_spaceable_line_translation, -page_height_); + + } + + assert (spring_idx == solution_.size () - 1); + return system_offsets; +} + +// Given two lines that are already spaced (the first and last +// elements of loose_lines), distribute some unspaced lines between +// them. +// first_translation and last_translation are relative to the page. +void +Page_layout_problem::distribute_loose_lines (vector const &loose_lines, + vector const &min_distances, + Real first_translation, Real last_translation) +{ + Simple_spacer spacer; + for (vsize i = 0; i + 1 < loose_lines.size (); ++i) + { + SCM spec = get_spacing_spec (loose_lines[i], loose_lines[i+1], false, 0, INT_MAX); + Spring spring (1.0, 0.0); + alter_spring_from_spacing_spec (spec, &spring); + spring.ensure_min_distance (min_distances[i]); + spacer.add_spring (spring); + } + + // Remember: offsets are decreasing, since we're going from UP to DOWN! + spacer.solve (first_translation - last_translation, false); + + vector solution = spacer.spring_positions (); + for (vsize i = 1; i + 1 < solution.size (); ++i) + { + Real system_offset = scm_to_double (loose_lines[i]->get_property ("system-Y-offset")); + loose_lines[i]->translate_axis (first_translation - solution[i] - system_offset, Y_AXIS); + } +} + +SCM +Page_layout_problem::solution (bool ragged) +{ + solve_rod_spring_problem (ragged); + return find_system_offsets (); +} + +// Build upper and lower skylines for a system. We don't yet know the positions +// of the staves within the system, so we make the skyline as conservative as +// possible. That is, for the upper skyline, we pretend that all of the staves +// in the system are packed together close to the top system; for the lower +// skyline, we pretend that all of the staves are packed together close to +// the bottom system. +// +// The upper skyline is relative to the top staff; the lower skyline is relative to +// the bottom staff. +void +Page_layout_problem::build_system_skyline (vector const& staves, + vector const& minimum_translations, + Skyline *up, + Skyline *down) +{ + if (minimum_translations.empty ()) + return; + + assert (staves.size () == minimum_translations.size ()); + Real first_translation = minimum_translations[0]; + Real last_spaceable_dy = 0; + Real first_spaceable_dy = 0; + bool found_spaceable_staff = false; + + for (vsize i = 0; i < staves.size (); ++i) + { + Real dy = minimum_translations[i] - first_translation; + Grob *g = staves[i]; + Skyline_pair *sky = Skyline_pair::unsmob (g->get_property ("vertical-skylines")); + if (sky) + { + up->raise (-dy); + up->merge ((*sky)[UP]); + up->raise (dy); + + down->raise (-dy); + down->merge ((*sky)[DOWN]); + down->raise (dy); + } + if (is_spaceable (staves[i])) + { + if (!found_spaceable_staff) + { + found_spaceable_staff = true; + first_spaceable_dy = dy; + } + last_spaceable_dy = dy; + } + } + + // Leave the up skyline at a position relative + // to the top spaceable staff. + up->raise (-first_spaceable_dy); + + // Leave the down skyline at a position + // relative to the bottom spaceable staff. + down->raise (-last_spaceable_dy); +} + +Interval +Page_layout_problem::prob_extent (Prob *p) +{ + Stencil *sten = unsmob_stencil (p->get_property ("stencil")); + return sten ? sten->extent (Y_AXIS) : Interval (0, 0); +} + +Interval +Page_layout_problem::first_staff_extent (Element const& e) +{ + if (e.prob) + return prob_extent (e.prob); + else if (e.staves.size ()) + return e.staves[0]->extent (e.staves[0], Y_AXIS); + + return Interval (0, 0); +} + +Interval +Page_layout_problem::last_staff_extent (Element const& e) +{ + if (e.prob) + return prob_extent (e.prob); + else if (e.staves.size ()) + return e.staves.back ()->extent (e.staves.back (), Y_AXIS); + + return Interval (0, 0); +} + +SCM +Page_layout_problem::get_details (Element const& elt) +{ + if (elt.staves.empty ()) + return SCM_EOL; + + return get_details (elt.staves.back ()->get_system ()); +} + +SCM +Page_layout_problem::get_details (Grob *g) +{ + Grob *left_bound = dynamic_cast (g)->get_bound (LEFT); + return left_bound->get_property ("line-break-system-details"); +} + +bool +Page_layout_problem::is_spaceable (Grob *g) +{ + return !scm_is_number (g->get_property ("staff-affinity")); +} + +void +Page_layout_problem::mark_as_spaceable (Grob *g) +{ + g->set_property ("staff-affinity", SCM_BOOL_F); +} + +bool +Page_layout_problem::read_spacing_spec (SCM spec, Real* dest, SCM sym) +{ + SCM pair = scm_sloppy_assq (sym, spec); + if (scm_is_pair (pair) && scm_is_number (scm_cdr (pair))) + { + *dest = scm_to_double (scm_cdr (pair)); + return true; + } + return false; +} + +// If there is a forced, fixed spacing between BEFORE and AFTER, return it. +// Otherwise, return -infinity_f. +// If after is spaceable, it is the (spaceable_index + 1)th spaceable grob in +// its alignment. +Real +Page_layout_problem::get_fixed_spacing (Grob *before, Grob *after, int spaceable_index, bool pure, int start, int end) +{ + Spanner *after_sp = dynamic_cast (after); + SCM cache_symbol = (is_spaceable (before) && is_spaceable (after)) + ? ly_symbol2scm ("spaceable-fixed-spacing") + : ly_symbol2scm ("loose-fixed-spacing"); + if (pure) + { + // The result of this function doesn't depend on "end," so we can reduce the + // size of the cache by ignoring it. + SCM cached = after_sp->get_cached_pure_property (cache_symbol, start, 0); + if (scm_is_number (cached)) + 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. + System *sys = pure ? Grob::get_system (before) : before->get_system (); + Grob *left_bound = sys ? sys->get_maybe_pure_bound (LEFT, pure, start, end) : 0; + + if (is_spaceable (before) && is_spaceable (after) && left_bound) + { + SCM details = left_bound->get_property ("line-break-system-details"); + SCM manual_dists = ly_assoc_get (ly_symbol2scm ("alignment-distances"), details, SCM_EOL); + if (scm_is_pair (manual_dists)) + { + SCM forced = robust_list_ref (spaceable_index - 1, manual_dists); + if (scm_is_number (forced)) + ret = max (ret, scm_to_double (forced)); + } + } + + // 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; +} + +static SCM +add_stretchability (SCM alist, Real stretch) +{ + if (!scm_is_pair (scm_sloppy_assq (ly_symbol2scm ("stretchability"), alist))) + return scm_acons (ly_symbol2scm ("stretchability"), scm_from_double (stretch), alist); + + return alist; +} + +// We want to put a large stretch between a non-spaceable line and its +// non-affinity staff. We want to put an even larger stretch between +// a non-spaceable line and the top/bottom of the page. That way, +// a spacing-affinity UP line at the bottom of the page will still be +// placed close to its staff. +const double LARGE_STRETCH = 10e5; +const double HUGE_STRETCH = 10e7; + +// Returns the spacing spec connecting BEFORE to AFTER. +SCM +Page_layout_problem::get_spacing_spec (Grob *before, Grob *after, bool pure, int start, int end) +{ + // If there are no spacing wishes, return a very flexible spring. + // This will occur, for example, if there are lyrics at the bottom of + // the page, in which case we don't want the spring from the lyrics to + // the bottom of the page to have much effect. + if (!before || !after) + return add_stretchability (SCM_EOL, HUGE_STRETCH); + + if (is_spaceable (before)) + { + if (is_spaceable (after)) + return before->get_maybe_pure_property ("staff-staff-spacing", pure, start, end); + else + { + Direction affinity = to_dir (after->get_maybe_pure_property ("staff-affinity", pure, start, end)); + return (affinity == DOWN) + ? add_stretchability (after->get_maybe_pure_property ("nonstaff-unrelatedstaff-spacing", pure, start, end), + LARGE_STRETCH) + : after->get_maybe_pure_property ("nonstaff-relatedstaff-spacing", pure, start, end); + } + } + else + { + if (is_spaceable (after)) + { + Direction affinity = to_dir (before->get_maybe_pure_property ("staff-affinity", pure, start, end)); + return (affinity == UP) + ? add_stretchability (before->get_maybe_pure_property ("nonstaff-unrelatedstaff-spacing", pure, start, end), + LARGE_STRETCH) + : before->get_maybe_pure_property ("nonstaff-relatedstaff-spacing", pure, start, end); + } + else + { + Direction before_affinity = to_dir (before->get_maybe_pure_property ("staff-affinity", pure, start, end)); + Direction after_affinity = to_dir (after->get_maybe_pure_property ("staff-affinity", pure, start, end)); + static bool warned = false; + if (after_affinity > before_affinity + && !warned && !pure) + { + warning (_ ("staff-affinities should only decrease")); + warned = true; + } + if (before_affinity != UP) + return before->get_maybe_pure_property ("nonstaff-nonstaff-spacing", pure, start, end); + else if (after_affinity != DOWN) + return before->get_maybe_pure_property ("nonstaff-nonstaff-spacing", pure, start, end); + return add_stretchability (before->get_maybe_pure_property ("nonstaff-unrelatedstaff-spacing", pure, start, end), + LARGE_STRETCH); + } + } + + assert (0); + return SCM_BOOL_F; +} + +void +Page_layout_problem::alter_spring_from_spacing_spec (SCM spec, Spring* spring) +{ + Real space; + Real stretch; + Real min_dist; + if (read_spacing_spec (spec, &space, ly_symbol2scm ("basic-distance"))) + spring->set_distance (space); + if (read_spacing_spec (spec, &min_dist, ly_symbol2scm ("minimum-distance"))) + spring->set_min_distance (min_dist); + 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); + } +} + +vector +Page_layout_problem::filter_dead_elements (vector const& input) +{ + vector output; + for (vsize i = 0; i < input.size (); ++i) + { + if (Hara_kiri_group_spanner::has_interface (input[i])) + Hara_kiri_group_spanner::consider_suicide (input[i]); + + if (input[i]->is_live ()) + output.push_back (input[i]); + } + + return output; +} diff --git a/lily/page-marker-scheme.cc b/lily/page-marker-scheme.cc index c0563c87d4..09bb3abdfe 100644 --- a/lily/page-marker-scheme.cc +++ b/lily/page-marker-scheme.cc @@ -1,9 +1,20 @@ /* - page-marker-scheme.cc -- implement Page_marker bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2007--2011 Nicolas Sceaux - (c) 2007--2009 Nicolas Sceaux + 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 . */ #include "page-marker.hh" @@ -22,7 +33,7 @@ LY_DEFINE (ly_make_page_permission_marker, "ly:make-page-permission-marker", LY_DEFINE (ly_make_page_label_marker, "ly:make-page-label-marker", 1, 0, 0, (SCM label), - "Return page marker with label.") + "Return page marker with label @var{label}.") { LY_ASSERT_TYPE (ly_is_symbol, label, 1); Page_marker *page_marker = new Page_marker (); diff --git a/lily/page-marker.cc b/lily/page-marker.cc index 08d58cd60c..b4bbc00e34 100644 --- a/lily/page-marker.cc +++ b/lily/page-marker.cc @@ -1,9 +1,20 @@ /* - page-marker.cc -- implement Page_marker + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2007--2011 Nicolas Sceaux - (c) 2007--2009 Nicolas Sceaux + 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 . */ #include "page-marker.hh" @@ -17,6 +28,14 @@ Page_marker::Page_marker () smobify_self (); } +Page_marker::Page_marker (Page_marker const &src) +{ + symbol_ = src.symbol_; + permission_ = src.permission_; + label_ = src.label_; + smobify_self (); +} + Page_marker::~Page_marker () { } @@ -36,10 +55,10 @@ Page_marker::mark_smob (SCM smob) } int -Page_marker::print_smob (SCM smob, SCM port, scm_print_state*) +Page_marker::print_smob (SCM smob, SCM port, scm_print_state *) { Page_marker *pm = (Page_marker *) SCM_CELL_WORD_1 (smob); - (void)pm; + (void) pm; scm_puts ("#", port); return 1; } @@ -74,5 +93,3 @@ Page_marker::set_label (SCM label) { label_ = label; } - - diff --git a/lily/page-spacing-result.cc b/lily/page-spacing-result.cc index f3d5b21e22..827dbd4444 100644 --- a/lily/page-spacing-result.cc +++ b/lily/page-spacing-result.cc @@ -1,10 +1,21 @@ -/* - page-spacing-result.cc -- implement Page_spacing_result - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #include "page-spacing-result.hh" @@ -14,16 +25,7 @@ Page_spacing_result::Page_spacing_result () { penalty_ = 0; demerits_ = infinity_f; -} - -vsize -Page_spacing_result::system_count () const -{ - vsize total = 0; - for (vsize i = 0; i < systems_per_page_.size(); i++) - total += systems_per_page_[i]; - - return total; + system_count_status_ = SYSTEM_COUNT_OK; } vsize diff --git a/lily/page-spacing.cc b/lily/page-spacing.cc index 71e51fa685..b04d3f394a 100644 --- a/lily/page-spacing.cc +++ b/lily/page-spacing.cc @@ -1,14 +1,25 @@ /* - page-spacing.cc - implement routines for spacing - systems vertically on pages + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #include "page-spacing.hh" +#include "international.hh" #include "matrix.hh" #include "page-breaking.hh" #include "warn.hh" @@ -16,11 +27,12 @@ void Page_spacing::calc_force () { - /* If the first system is a title, we add back in the page-top-space. */ - Real height = first_line_.title_ ? page_height_ + page_top_space_ : page_height_; + Real height = page_height_ + - breaker_->min_whitespace_at_top_of_page (first_line_) + - breaker_->min_whitespace_at_bottom_of_page (last_line_); if (rod_height_ + last_line_.bottom_padding_ >= height) - force_ = infinity_f; + force_ = -infinity_f; else force_ = (height - rod_height_ - last_line_.bottom_padding_ - spring_len_) / max (0.1, inverse_spring_k_); @@ -36,13 +48,19 @@ Page_spacing::resize (Real new_height) void Page_spacing::append_system (const Line_details &line) { - if (!rod_height_) - first_line_ = line; + if (rod_height_) + { + rod_height_ += line.tallness_; + spring_len_ += last_line_.spring_length (line); - rod_height_ += last_line_.padding_; + } + else + { + rod_height_ += line.full_height (); + first_line_ = line; + } - rod_height_ += line.extent_.length (); - spring_len_ += line.space_; + rod_height_ += account_for_footnotes (line); inverse_spring_k_ += line.inverse_hooke_; last_line_ = line; @@ -50,16 +68,41 @@ Page_spacing::append_system (const Line_details &line) calc_force (); } +Real +Page_spacing::account_for_footnotes (Line_details const &line) +{ + Real footnote_height = 0.0; + for (vsize i = 0; i < line.footnotes_.size (); i++) + { + footnote_height += (has_footnotes_ + ? 0.0 + : (breaker_->footnote_separator_stencil_height () + + breaker_->footnote_padding ())); + + has_footnotes_ = true; + Interval extent = line.footnotes_[i]->extent (Y_AXIS); + footnote_height += extent[UP] - extent[DOWN]; + footnote_height += breaker_->footnote_padding (); + } + + return (footnote_height + - (has_footnotes_ + ? breaker_->footnote_padding () + breaker_->footnote_footer_padding () + : 0.0)); +} + void Page_spacing::prepend_system (const Line_details &line) { if (rod_height_) - rod_height_ += line.padding_; + spring_len_ += line.spring_length (first_line_); else last_line_ = line; - rod_height_ += line.extent_.length (); - spring_len_ += line.space_; + rod_height_ -= first_line_.full_height (); + rod_height_ += first_line_.tallness_; + rod_height_ += line.full_height(); + rod_height_ += account_for_footnotes (line); inverse_spring_k_ += line.inverse_hooke_; first_line_ = line; @@ -72,6 +115,7 @@ Page_spacing::clear () { force_ = rod_height_ = spring_len_ = 0; inverse_spring_k_ = 0; + has_footnotes_ = false; } @@ -85,6 +129,38 @@ Page_spacer::Page_spacer (vector const &lines, vsize first_page_nu ragged_last_ = breaker->is_last () && breaker->ragged_last (); } +Page_spacing_result +Page_spacer::solve () +{ + if (simple_state_.empty ()) + { + simple_state_.resize (lines_.size ()); + for (vsize i = 0; i < lines_.size (); ++i) + calc_subproblem (VPOS, i); + } + + Page_spacing_result ret; + ret.penalty_ = simple_state_.back ().penalty_ + + lines_.back ().page_penalty_ + lines_.back ().turn_penalty_; + ret.system_count_status_ = simple_state_.back ().system_count_status_; + + vsize system = lines_.size () - 1; + while (system != VPOS) + { + Page_spacing_node const& cur = simple_state_[system]; + vsize system_count = (cur.prev_ == VPOS) ? system + 1 : system - cur.prev_; + + ret.force_.push_back (cur.force_); + ret.systems_per_page_.push_back (system_count); + ret.demerits_ += cur.force_ * cur.force_; + system = cur.prev_; + } + + reverse (ret.force_); + reverse (ret.systems_per_page_); + return ret; +} + Page_spacing_result Page_spacer::solve (vsize page_count) { @@ -133,6 +209,7 @@ Page_spacer::solve (vsize page_count) ret.force_.resize (page_count); ret.systems_per_page_.resize (page_count); + ret.system_count_status_ = state_.at (system, page_count-1).system_count_status_; ret.penalty_ = state_.at (system, page_count-1).penalty_ + lines_.back ().page_penalty_ + lines_.back ().turn_penalty_; @@ -154,17 +231,14 @@ Page_spacer::solve (vsize page_count) if (extra_systems) { ret.systems_per_page_.back () += extra_systems; - ret.demerits_ += 200000; + ret.force_.back () = BAD_SPACING_PENALTY; } if (extra_pages) { - ret.force_.insert (ret.force_.end (), extra_pages, 200000); + ret.force_.insert (ret.force_.end (), extra_pages, BAD_SPACING_PENALTY); ret.systems_per_page_.insert (ret.systems_per_page_.end (), extra_pages, 0); - ret.demerits_ += 200000; } - - ret.demerits_ += ret.penalty_; return ret; } @@ -185,45 +259,113 @@ Page_spacer::resize (vsize page_count) max_page_count_ = page_count; } +// Carries out one step in the dynamic programming algorithm for putting systems +// on a fixed number of pages. One call to this routine calculates the best +// configuration for putting lines 0 through LINE-1 on PAGE+1 pages, provided that +// we have previously called calc_subproblem(page-1, k) for every k < LINE. +// +// This algorithm is similar to the constrained-breaking algorithm. +// +// If page == VPOS, we act on simple_state_ instead of state_. This is useful if +// we don't want to constrain the number of pages that the solution has. In this +// case, the algorithm looks more like the page-turn-page-breaking algorithm. But +// the subproblems look similar for both, so we reuse this method. bool Page_spacer::calc_subproblem (vsize page, vsize line) { bool last = line == lines_.size () - 1; - Page_spacing space (breaker_->page_height (page + first_page_num_, last), - breaker_->page_top_space ()); - Page_spacing_node &cur = state_.at (line, page); + + // Note: if page == VPOS then we don't actually know yet which page number we're + // working on, so we have to recalculate the page height in the loop. Therefore + // our early-exit condition from the loop depends on paper_height rather than + // page_height (ie. we break only if we would overfill a page without margins + // or headers/footers). Otherwise, the algorithm would not be optimal: + // if our page has a very large header then perhaps + // we should look ahead a few systems in order to find the best solution. A + // good example of this is input/regression/page-spacing-tall-headfoot.ly + vsize page_num = page == VPOS ? 0 : page; + Real paper_height = breaker_->paper_height (); + Page_spacing space (breaker_->page_height (page_num + first_page_num_, last), + breaker_); + Page_spacing_node &cur = page == VPOS ? simple_state_[line] : state_.at (line, page); bool ragged = ragged_ || (ragged_last_ && last); + int line_count = 0; - for (vsize page_start = line+1; page_start > page && page_start--;) + for (vsize page_start = line+1; page_start > page_num && page_start--;) { - Page_spacing_node const *prev = page > 0 ? &state_.at (page_start-1, page-1) : 0; + Page_spacing_node const *prev = 0; + + if (page == VPOS) + { + if (page_start > 0) + { + prev = &simple_state_[page_start-1]; + space.resize (breaker_->page_height (prev->page_ + 1, last)); + } + else + space.resize (breaker_->page_height (first_page_num_, last)); + } + else if (page > 0) + prev = &state_.at (page_start-1, page-1); space.prepend_system (lines_[page_start]); - if (page_start < line && (isinf (space.force_) || (space.force_ < 0 && ragged))) + + bool overfull = (space.rod_height_ > paper_height + || (ragged + && (space.rod_height_ + space.spring_len_ > paper_height))); + // This 'if' statement is a little hard to parse. It won't consider this configuration + // if it is overfull unless the current configuration is the first one with this start + // point. We also make an exception (and consider this configuration) if the previous + // configuration we tried had fewer lines than min-systems-per-page. + if (!breaker_->too_few_lines (line_count) + && page_start < line + && overfull) break; + line_count += lines_[page_start].compressed_nontitle_lines_count_; if (page > 0 || page_start == 0) { + // If the last page is ragged, set its force to zero. This way, we will leave + // the last page half-empty rather than trying to balance things out + // (which only makes sense in non-ragged situations). if (line == lines_.size () - 1 && ragged && last && space.force_ > 0) space.force_ = 0; - /* we may have to deal with single lines that are taller than a page */ - if (isinf (space.force_) && page_start == line) - space.force_ = -200000; + Real demerits = space.force_ * space.force_; + + // Clamp the demerits at BAD_SPACING_PENALTY, even if the page + // is overfull. This ensures that TERRIBLE_SPACING_PENALTY takes + // precedence over overfull pages. + demerits = min (demerits, BAD_SPACING_PENALTY); + demerits += (prev ? prev->demerits_ : 0); - Real dem = fabs (space.force_) + (prev ? prev->demerits_ : 0); - Real penalty = 0; + Real penalty = breaker_->line_count_penalty (line_count); if (page_start > 0) - penalty = lines_[page_start-1].page_penalty_ + penalty += lines_[page_start-1].page_penalty_ + (page % 2 == 0) ? lines_[page_start-1].turn_penalty_ : 0; - dem += penalty; - if (dem < cur.demerits_ || page_start == line) + /* Deal with widow/orphan lines */ + /* Last line of paragraph is first line on the new page */ + if ((page_start > 0) && + (page_start < lines_.size ()) && + (lines_[page_start].last_markup_line_)) + penalty += breaker_->orphan_penalty (); + /* First line of paragraph is last line on the previous page */ + if ((page_start > 0) && + (page_start < lines_.size ()) && + (lines_[page_start-1].first_markup_line_)) + penalty += breaker_->orphan_penalty (); + + demerits += penalty; + if (demerits < cur.demerits_ || page_start == line) { - cur.demerits_ = dem; + cur.demerits_ = demerits; cur.force_ = space.force_; cur.penalty_ = penalty + (prev ? prev->penalty_ : 0); + cur.system_count_status_ = breaker_->line_count_status (line_count) + | (prev ? prev->system_count_status_ : 0); cur.prev_ = page_start - 1; + cur.page_ = prev ? prev->page_ + 1 : first_page_num_; } } diff --git a/lily/page-turn-engraver.cc b/lily/page-turn-engraver.cc index 82cb4dd1a9..5d08a24b91 100644 --- a/lily/page-turn-engraver.cc +++ b/lily/page-turn-engraver.cc @@ -1,9 +1,20 @@ /* - page-turn-engraver.cc -- implement Page_turn_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #include "engraver.hh" diff --git a/lily/page-turn-page-breaking.cc b/lily/page-turn-page-breaking.cc index 97b58467b6..07b61d92bf 100644 --- a/lily/page-turn-page-breaking.cc +++ b/lily/page-turn-page-breaking.cc @@ -1,9 +1,20 @@ /* - page-turn-page-breaking.cc -- implement Page_turn_page_breaking + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006--2009 Joe Neeman + 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 . */ #include "page-turn-page-breaking.hh" @@ -18,14 +29,25 @@ #include "system.hh" #include "warn.hh" +template static bool -is_break (Grob *g) +is_break (T *g) { - return scm_is_symbol (g->get_property ("page-turn-permission")); + bool turnable = scm_is_symbol (g->get_property ("page-turn-permission")); + + if (turnable && + (!scm_is_symbol (g->get_property ("page-break-permission")) + || !scm_is_symbol (g->get_property ("line-break-permission")))) + { + programming_error ("found a page-turnable place which was not breakable"); + turnable = false; + } + + return turnable; } Page_turn_page_breaking::Page_turn_page_breaking (Paper_book *pb) - : Page_breaking (pb, is_break) + : Page_breaking (pb, is_break, is_break) { } @@ -65,14 +87,14 @@ Page_turn_page_breaking::put_systems_on_pages (vsize start, if (start == 0 && auto_first) { if (min_p_count % 2) - result = space_systems_on_n_or_one_more_pages (configuration, min_p_count, page_number); + result = space_systems_on_n_or_one_more_pages (configuration, min_p_count, page_number, 0); else result = space_systems_on_n_pages (configuration, min_p_count, page_number); } else if (page_number % 2 == min_p_count % 2) result = space_systems_on_n_pages (configuration, min_p_count, page_number); else - result = space_systems_on_n_or_one_more_pages (configuration, min_p_count, page_number); + result = space_systems_on_n_or_one_more_pages (configuration, min_p_count, page_number, blank_page_penalty ()); Break_node ret; ret.prev_ = start - 1; @@ -192,8 +214,8 @@ Page_turn_page_breaking::calc_subproblem (vsize ending_breakpoint) if (start == 0 && end == 1 && this_start_best.first_page_number_ == 1 && this_start_best.page_count_ > 1) - warning (_ ("cannot fit the first page turn onto a single page. " - "Consider setting first-page-number to an even number.")); + warning (_ ("cannot fit the first page turn onto a single page." + " Consider setting first-page-number to an even number.")); if (this_start_best.demerits_ < best.demerits_) best = this_start_best; @@ -247,6 +269,9 @@ Page_turn_page_breaking::make_lines (vector *psoln) SCM Page_turn_page_breaking::make_pages (vector const &soln, SCM systems) { + if (scm_is_null (systems)) + return SCM_EOL; + vector lines_per_page; for (vsize i = 0; i < soln.size (); i++) { diff --git a/lily/pango-font-scheme.cc b/lily/pango-font-scheme.cc index b8772bc4c9..f2ae021912 100644 --- a/lily/pango-font-scheme.cc +++ b/lily/pango-font-scheme.cc @@ -1,9 +1,20 @@ /* - pango-font-scheme.cc -- implement Pango_font + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #define PANGO_ENABLE_BACKEND // ugh, why necessary? diff --git a/lily/pango-font.cc b/lily/pango-font.cc index d02b63ae7a..a4fea75109 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -1,12 +1,26 @@ /* - pango-font.cc -- implement Pango_font + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ -#define PANGO_ENABLE_BACKEND // ugh, why necessary? +// Necessary for supporting pango_context_new() and +// pango_context_set_font_map() in Pango < 1.22 +#define PANGO_ENABLE_BACKEND + #include #include @@ -29,14 +43,14 @@ #if HAVE_PANGO_FT2 #include "stencil.hh" -Pango_font::Pango_font (PangoFT2FontMap * /* fontmap */, +Pango_font::Pango_font (PangoFT2FontMap *fontmap, PangoFontDescription const *description, Real output_scale) { physical_font_tab_ = scm_c_make_hash_table (11); PangoDirection pango_dir = PANGO_DIRECTION_LTR; - context_ = pango_ft2_get_context (PANGO_RESOLUTION, - PANGO_RESOLUTION); + context_ = pango_context_new (); + pango_context_set_font_map (context_, PANGO_FONT_MAP (fontmap)); pango_description_ = pango_font_description_copy (description); attribute_list_ = pango_attr_list_new (); @@ -97,35 +111,27 @@ get_unicode_name (char *s, } Stencil -Pango_font::pango_item_string_stencil (PangoItem const *item, - string str, - bool tight_bbox) const +Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const { const int GLYPH_NAME_LEN = 256; char glyph_name[GLYPH_NAME_LEN]; - PangoAnalysis const *pa = &(item->analysis); - PangoGlyphString *pgs = pango_glyph_string_new (); - pango_shape (str.c_str () + item->offset, - item->length, (PangoAnalysis*) pa, pgs); + PangoAnalysis const *pa = &(glyph_item->item->analysis); + PangoGlyphString *pgs = glyph_item->glyphs; PangoRectangle logical_rect; PangoRectangle ink_rect; pango_glyph_string_extents (pgs, pa->font, &ink_rect, &logical_rect); - PangoFcFont *fcfont = G_TYPE_CHECK_INSTANCE_CAST (pa->font, - PANGO_TYPE_FC_FONT, - PangoFcFont); + PangoFcFont *fcfont = PANGO_FC_FONT (pa->font); FT_Face ftface = pango_fc_font_lock_face (fcfont); - PangoRectangle const *which_rect = tight_bbox ? &ink_rect - : &logical_rect; - Box b (Interval (PANGO_LBEARING (logical_rect), PANGO_RBEARING (logical_rect)), - Interval (-PANGO_DESCENT (*which_rect), - PANGO_ASCENT (*which_rect))); + Interval (-PANGO_DESCENT (ink_rect), + PANGO_ASCENT (ink_rect))); + b.scale (scale_); char const *ps_name_str0 = FT_Get_Postscript_Name (ftface); @@ -164,11 +170,18 @@ Pango_font::pango_item_string_stencil (PangoItem const *item, PangoGlyph pg = pgi->glyph; PangoGlyphGeometry ggeo = pgi->geometry; + /* + Zero-width characters are valid Unicode characters, + but glyph lookups need to be skipped. + */ + if (!(pg ^ PANGO_GLYPH_EMPTY)) + continue; + glyph_name[0] = '\0'; if (has_glyph_names) { - int errorcode = FT_Get_Glyph_Name (ftface, pg, glyph_name, - GLYPH_NAME_LEN); + FT_Error errorcode = FT_Get_Glyph_Name (ftface, pg, glyph_name, + GLYPH_NAME_LEN); if (errorcode) programming_error ( _f ("FT_Get_Glyph_Name () error: %s", @@ -212,7 +225,7 @@ Pango_font::pango_item_string_stencil (PangoItem const *item, *tail = scm_cons (scm_list_4 (scm_from_double (ggeo.width * scale_), scm_from_double (ggeo.x_offset * scale_), - scm_from_double (ggeo.y_offset * scale_), + scm_from_double (- ggeo.y_offset * scale_), char_id), SCM_EOL); tail = SCM_CDRLOC (*tail); @@ -284,72 +297,80 @@ Pango_font::physical_font_tab () const return physical_font_tab_; } -Stencil -Pango_font::word_stencil (string str) const -{ - return text_stencil (str, true); -} +extern bool music_strings_to_paths; Stencil -Pango_font::text_stencil (string str) const +Pango_font::text_stencil (Output_def * /* state */, + string str, bool music_string) const { - return text_stencil (str, false); -} - -Stencil -Pango_font::text_stencil (string str, - bool tight) const -{ - GList *items - = pango_itemize (context_, - str.c_str (), - 0, str.length (), attribute_list_, - NULL); + /* + The text assigned to a PangoLayout is automatically divided + into sections and reordered according to the Unicode + Bidirectional Algorithm, if necessary. + */ + PangoLayout *layout = pango_layout_new (context_); + pango_layout_set_text (layout, str.c_str (), -1); + GSList *lines = pango_layout_get_lines (layout); Stencil dest; - Real last_x = 0.0; - Direction text_dir = RIGHT; - for (GList *p = items; p; p = p->next) - { - PangoItem *item = (PangoItem *) p->data; - if (item->analysis.level == PANGO_DIRECTION_RTL) - text_dir = LEFT; - } - - for (GList *ptr = items; ptr; ptr = ptr->next) + for (GSList *l = lines; l; l = l->next) { - PangoItem *item = (PangoItem *) ptr->data; + PangoLayoutLine *line = (PangoLayoutLine *) l->data; + GSList *layout_runs = line->runs; - Stencil item_stencil = pango_item_string_stencil (item, str, tight); - - if (text_dir == RIGHT) + for (GSList *p = layout_runs; p; p = p->next) { + PangoGlyphItem *item = (PangoGlyphItem *) p->data; + Stencil item_stencil = pango_item_string_stencil (item); + item_stencil.translate_axis (last_x, X_AXIS); last_x = item_stencil.extent (X_AXIS)[RIGHT]; - } - else if (text_dir == LEFT) - dest.translate_axis (item_stencil.extent (X_AXIS)[RIGHT], X_AXIS); #if 0 // Check extents. - if (!item_stencil.extent_box ()[X_AXIS].is_empty ()) - { - Stencil frame = Lookup::frame (item_stencil.extent_box (), 0.1, 0.1); - Box empty; - empty.set_empty (); - Stencil dimless_frame (empty, frame.expr ()); - dest.add_stencil (frame); - } + if (!item_stencil.extent_box ()[X_AXIS].is_empty ()) + { + Stencil frame = Lookup::frame (item_stencil.extent_box (), 0.1, 0.1); + Box empty; + empty.set_empty (); + Stencil dimless_frame (empty, frame.expr ()); + dest.add_stencil (frame); + } #endif - dest.add_stencil (item_stencil); + dest.add_stencil (item_stencil); + } } - // UGH. Should have flags per output format signifying supported - // options. string name = get_output_backend_name (); - if (name != "ps" && name != "eps") + string output_mod = "scm output-" + name; + SCM mod = scm_c_resolve_module (output_mod.c_str ()); + + bool has_utf8_string = false; + + if (ly_is_module (mod)) + { + SCM utf8_string = ly_module_lookup (mod, ly_symbol2scm ("utf-8-string")); + /* + has_utf8_string should only be true when utf8_string is a + variable that is bound to a *named* procedure, i.e. not a + lambda expression. + */ + if (utf8_string != SCM_BOOL_F + && scm_procedure_name (SCM_VARIABLE_REF (utf8_string)) != SCM_BOOL_F) + has_utf8_string = true; + } + + bool to_paths = music_strings_to_paths; + + /* + Backends with the utf-8-string expression use it when + 1) the -dmusic-strings-to-paths option is set + and `str' is not a music string, or + 2) the -dmusic-strings-to-paths option is not set. + */ + if (has_utf8_string && ((to_paths && !music_string) || !to_paths)) { // For Pango based backends, we take a shortcut. SCM exp = scm_list_3 (ly_symbol2scm ("utf-8-string"), @@ -361,8 +382,6 @@ Pango_font::text_stencil (string str, return Stencil (b, exp); } - g_list_free (items); - return dest; } diff --git a/lily/pango-select-scheme.cc b/lily/pango-select-scheme.cc index e8f97d26a4..643d407820 100644 --- a/lily/pango-select-scheme.cc +++ b/lily/pango-select-scheme.cc @@ -1,9 +1,20 @@ /* - pango-select-scheme.cc -- implement Pango descr <-> string bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "config.hh" diff --git a/lily/pango-select.cc b/lily/pango-select.cc index 29686d44dd..a0832d4369 100644 --- a/lily/pango-select.cc +++ b/lily/pango-select.cc @@ -1,9 +1,20 @@ /* - pango-select.cc -- implement lily font selection for Pango_fonts. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "dimensions.hh" diff --git a/lily/paper-book-scheme.cc b/lily/paper-book-scheme.cc index 6714a46239..9158444530 100644 --- a/lily/paper-book-scheme.cc +++ b/lily/paper-book-scheme.cc @@ -1,9 +1,20 @@ /* - paper-book-scheme.cc -- implement Paper_book bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "paper-book.hh" @@ -12,41 +23,41 @@ LY_DEFINE (ly_paper_book_pages, "ly:paper-book-pages", 1, 0, 0, (SCM pb), - "Return pages in book @var{pb}.") + "Return pages in @code{Paper_book} object @var{pb}.") { LY_ASSERT_SMOB (Paper_book, pb, 1); return unsmob_paper_book (pb)->pages (); } LY_DEFINE (ly_paper_book_scopes, "ly:paper-book-scopes", - 1, 0, 0, (SCM book), - "Return scopes in layout book @var{book}.") + 1, 0, 0, (SCM pb), + "Return scopes in @code{Paper_book} object @var{pb}.") { - LY_ASSERT_SMOB (Paper_book, book, 1); - Paper_book *pb = unsmob_paper_book (book); + LY_ASSERT_SMOB (Paper_book, pb, 1); + Paper_book *book = unsmob_paper_book (pb); SCM scopes = SCM_EOL; - if (pb->parent_) + if (book->parent_) { - scopes = ly_paper_book_scopes (pb->parent_->self_scm ()); + scopes = ly_paper_book_scopes (book->parent_->self_scm ()); } - if (ly_is_module (pb->header_)) - scopes = scm_cons (pb->header_, scopes); + if (ly_is_module (book->header_)) + scopes = scm_cons (book->header_, scopes); return scopes; } LY_DEFINE (ly_paper_book_performances, "ly:paper-book-performances", - 1, 0, 0, (SCM paper_book), - "Return performances in book @var{paper-book}.") + 1, 0, 0, (SCM pb), + "Return performances in @code{Paper_book} object @var{pb}.") { - LY_ASSERT_SMOB (Paper_book, paper_book, 1); - return unsmob_paper_book (paper_book)->performances (); + LY_ASSERT_SMOB (Paper_book, pb, 1); + return unsmob_paper_book (pb)->performances (); } LY_DEFINE (ly_paper_book_systems, "ly:paper-book-systems", 1, 0, 0, (SCM pb), - "Return systems in book @var{pb}.") + "Return systems in @code{Paper_book} object @var{pb}.") { LY_ASSERT_SMOB (Paper_book, pb, 1); return unsmob_paper_book (pb)->systems (); @@ -54,9 +65,20 @@ LY_DEFINE (ly_paper_book_systems, "ly:paper-book-systems", LY_DEFINE (ly_paper_book_paper, "ly:paper-book-paper", 1, 0, 0, (SCM pb), - "Return pages in book @var{pb}.") + "Return the paper output definition (@code{\\paper})" + " in @code{Paper_book} object @var{pb}.") { LY_ASSERT_SMOB (Paper_book, pb, 1); Paper_book *pbook = unsmob_paper_book (pb); return pbook->paper_->self_scm (); } + +LY_DEFINE (ly_paper_book_header, "ly:paper-book-header", + 1, 0, 0, (SCM pb), + "Return the header definition (@code{\\header})" + " in @code{Paper_book} object @var{pb}.") +{ + LY_ASSERT_SMOB (Paper_book, pb, 1); + Paper_book *pbook = unsmob_paper_book (pb); + return pbook->header_; +} diff --git a/lily/paper-book.cc b/lily/paper-book.cc index fd519d5d75..9907e56d95 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -1,9 +1,20 @@ /* - paper-book.cc -- implement Paper_book + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Jan Nieuwenhuizen - (c) 2004--2009 Jan Nieuwenhuizen + 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 . */ #include "paper-book.hh" @@ -63,7 +74,7 @@ Paper_book::mark_smob (SCM smob) } int -Paper_book::print_smob (SCM smob, SCM port, scm_print_state*) +Paper_book::print_smob (SCM smob, SCM port, scm_print_state *) { Paper_book *b = (Paper_book *) SCM_CELL_WORD_1 (smob); (void)b; @@ -123,7 +134,7 @@ Paper_book::output_aux (SCM output_channel, scm_call_3 (proc, performances (), output_channel, - scm_long2num (*first_performance_number)); + scm_from_long (*first_performance_number)); *first_performance_number += scm_ilength (performances_); } @@ -144,7 +155,7 @@ Paper_book::output_aux (SCM output_channel, if (scores_ == SCM_EOL) return 0; paper_->set_variable (ly_symbol2scm ("first-page-number"), - scm_long2num (*first_page_number)); + scm_from_long (*first_page_number)); paper_->set_variable (ly_symbol2scm ("is-last-bookpart"), ly_bool2scm (is_last)); /* Generate all stencils to trigger font loads. */ @@ -157,14 +168,26 @@ Paper_book::output_aux (SCM output_channel, void Paper_book::output (SCM output_channel) { - int first_page_number = robust_scm2int (paper_->c_variable ("first-page-number"), 1); + int first_page_number + = robust_scm2int (paper_->c_variable ("first-page-number"), 1); int first_performance_number = 0; + + /* FIXME: We need a line-width for ps output (framework-ps.scm:92). + If we don't have any, we take the paper-width unless we know + better which line-width to choose (e.g. if there are \bookparts + with different line-widths) and why we need it at all. + */ + + if (paper_->c_variable ("line-width") == SCM_UNDEFINED) + paper_->set_variable (ly_symbol2scm ("line-width"), + paper_->c_variable ("paper-width")); + if (!output_aux (output_channel, true, &first_page_number, &first_performance_number)) return; - + SCM scopes = SCM_EOL; if (ly_is_module (header_)) scopes = scm_cons (header_, scopes); @@ -175,7 +198,8 @@ Paper_book::output (SCM output_channel) if (get_program_option ("print-pages")) { - SCM framework = ly_module_lookup (mod, ly_symbol2scm ("output-framework")); + SCM framework = ly_module_lookup (mod, + ly_symbol2scm ("output-framework")); if (framework != SCM_BOOL_F) { @@ -193,7 +217,8 @@ Paper_book::output (SCM output_channel) if (get_program_option ("preview")) { - SCM framework = ly_module_lookup (mod, ly_symbol2scm ("output-preview-framework")); + SCM framework + = ly_module_lookup (mod, ly_symbol2scm ("output-preview-framework")); if (framework != SCM_BOOL_F) { @@ -220,7 +245,7 @@ Paper_book::classic_output_aux (SCM output, scm_call_3 (proc, performances (), output, - scm_long2num (*first_performance_number)); + scm_from_long (*first_performance_number)); *first_performance_number += scm_ilength (performances_); } @@ -315,12 +340,12 @@ Paper_book::score_title (SCM header) void set_page_permission (SCM sys, SCM symbol, SCM permission) { - if (Paper_score *ps = dynamic_cast (unsmob_music_output (sys))) + if (Paper_score *ps = dynamic_cast (unsmob_music_output (sys))) { - vector cols = ps->get_columns (); + vector cols = ps->get_columns (); if (cols.size ()) { - Paper_column *col = dynamic_cast (cols.back ()); + Paper_column *col = dynamic_cast (cols.back ()); col->set_property (symbol, permission); col->find_prebroken_piece (LEFT)->set_property (symbol, permission); } @@ -350,7 +375,8 @@ set_system_penalty (SCM sys, SCM header) ly_symbol2scm ("force")); } else - set_page_permission (sys, ly_symbol2scm ("page-break-permission"), SCM_EOL); + set_page_permission (sys, ly_symbol2scm ("page-break-permission"), + SCM_EOL); } } } @@ -358,16 +384,17 @@ set_system_penalty (SCM sys, SCM header) void set_labels (SCM sys, SCM labels) { - if (Paper_score *ps = dynamic_cast (unsmob_music_output (sys))) + if (Paper_score *ps = dynamic_cast (unsmob_music_output (sys))) { vector cols = ps->get_columns (); if (cols.size ()) { - Paper_column *col = dynamic_cast (cols[0]); + Paper_column *col = dynamic_cast (cols[0]); col->set_property ("labels", scm_append_x (scm_list_2 (col->get_property ("labels"), labels))); - Paper_column *col_right = dynamic_cast (col->find_prebroken_piece (RIGHT)); + Paper_column *col_right + = dynamic_cast (col->find_prebroken_piece (RIGHT)); col_right->set_property ("labels", scm_append_x (scm_list_2 (col_right->get_property ("labels"), labels))); @@ -391,7 +418,8 @@ Paper_book::get_score_title (SCM header) TODO: this should come from the \layout {} block, which should override settings from \paper {} */ - SCM props = paper_->lookup_variable (ly_symbol2scm ("score-title-properties")); + SCM props + = paper_->lookup_variable (ly_symbol2scm ("score-title-properties")); Prob *ps = make_paper_system (props); paper_system_set_stencil (ps, title); @@ -406,14 +434,15 @@ SCM Paper_book::get_system_specs () { SCM system_specs = SCM_EOL; - + Stencil title = book_title (); if (!title.is_empty ()) { - SCM props = paper_->lookup_variable (ly_symbol2scm ("book-title-properties")); + SCM props + = paper_->lookup_variable (ly_symbol2scm ("book-title-properties")); Prob *ps = make_paper_system (props); paper_system_set_stencil (ps, title); - + system_specs = scm_cons (ps->self_scm (), system_specs); ps->unprotect (); } @@ -487,28 +516,37 @@ Paper_book::get_system_specs () paper_->self_scm (), page_properties, scm_car (s)); - for (SCM list = texts ; scm_is_pair (list) ; list = scm_cdr (list)) + Prob *first = 0; + Prob *last = 0; + for (SCM list = texts; scm_is_pair (list); list = scm_cdr (list)) { SCM t = scm_car (list); // TODO: init props Prob *ps = make_paper_system (SCM_EOL); - ps->set_property ("page-break-permission", ly_symbol2scm ("allow")); - ps->set_property ("page-turn-permission", ly_symbol2scm ("allow")); - + ps->set_property ("page-break-permission", + ly_symbol2scm ("allow")); + ps->set_property ("page-turn-permission", + ly_symbol2scm ("allow")); + ps->set_property ("last-markup-line", SCM_BOOL_F); + ps->set_property ("first-markup-line", SCM_BOOL_F); + paper_system_set_stencil (ps, *unsmob_stencil (t)); - ps->set_property ("is-title", SCM_BOOL_T); - if (scm_is_pair (scm_cdr (list))) + + SCM footnotes = get_footnotes (unsmob_stencil (t)->expr ()); + ps->set_property ("footnotes", footnotes); + ps->set_property ("is-title", SCM_BOOL_T); + if (list == texts) + first = ps; + else { - /* If an other markup is following, set this markup - * next padding and next space to 0, so that baseline-skip - * only should be taken into account for lines vertical - * spacing. */ - ps->set_property ("next-padding", scm_double2num (0.0)); - ps->set_property ("next-space", scm_double2num (0.0)); + // last line so far, in a multi-line paragraph + last = ps; + //Place closely to previous line, no stretching. + ps->set_property ("tight-spacing", SCM_BOOL_T); } system_specs = scm_cons (ps->self_scm (), system_specs); ps->unprotect (); - + if (scm_is_pair (labels)) { set_labels (scm_car (system_specs), labels); @@ -517,6 +555,14 @@ Paper_book::get_system_specs () // FIXME: figure out penalty. //set_system_penalty (ps, scores_[i].header_); } + /* Set properties to avoid widowed/orphaned lines. + Single-line markup_lists are excluded, but in future + we may want to add the case of a very short, single line. */ + if (first && last) + { + last->set_property ("last-markup-line", SCM_BOOL_T); + first->set_property ("first-markup-line", SCM_BOOL_T); + } } else assert (0); @@ -537,16 +583,20 @@ Paper_book::systems () { for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p)) if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p))) - systems_ = scm_append_x (scm_list_2 (systems_, pbookpart->systems ())); + systems_ = scm_append_x (scm_list_2 (systems_, + pbookpart->systems ())); } else { SCM specs = get_system_specs (); for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s)) { - if (Paper_score *pscore = dynamic_cast (unsmob_music_output (scm_car (s)))) + if (Paper_score *pscore + = dynamic_cast (unsmob_music_output (scm_car (s)))) { - SCM system_list = scm_vector_to_list (pscore->get_paper_systems ()); + SCM system_list + = scm_vector_to_list (pscore->get_paper_systems ()); + system_list = scm_reverse (system_list); systems_ = scm_append (scm_list_2 (system_list, systems_)); } @@ -564,7 +614,7 @@ Paper_book::systems () { Prob *ps = unsmob_prob (scm_car (s)); ps->set_property ("number", scm_from_int (++i)); - + if (last && to_boolean (last->get_property ("is-title")) && !scm_is_number (ps->get_property ("penalty"))) @@ -601,8 +651,11 @@ Paper_book::pages () } else if (scm_is_pair (scores_)) { - SCM proc = paper_->c_variable ("page-breaking-wrapper"); - pages_ = scm_apply_0 (proc, scm_list_1 (self_scm ())); + SCM page_breaking = paper_->c_variable ("page-breaking"); + pages_ = scm_apply_0 (page_breaking, scm_list_1 (self_scm ())); + SCM post_process = paper_->c_variable ("page-post-process"); + if (ly_is_procedure (post_process)) + scm_apply_2 (post_process, paper_->self_scm (), pages_, SCM_EOL); /* set systems_ from the pages */ if (systems_ == SCM_BOOL_F) diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc index 06dd38d9b5..8b2b550f2f 100644 --- a/lily/paper-column-engraver.cc +++ b/lily/paper-column-engraver.cc @@ -1,9 +1,20 @@ /* - paper-column-engraver.cc -- implement Paper_column_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "paper-column-engraver.hh" @@ -31,6 +42,7 @@ Paper_column_engraver::Paper_column_engraver () breaks_ = 0; system_ = 0; first_ = true; + made_columns_ = false; } void @@ -39,6 +51,14 @@ Paper_column_engraver::finalize () if (! (breaks_ % 8)) progress_indication ("[" + to_string (breaks_) + "]"); + if (!made_columns_) + { + make_columns (); + SCM m = now_mom ().smobbed_copy (); + command_column_->set_property ("when", m); + musical_column_->set_property ("when", m); + } + if (command_column_) { if (!scm_is_symbol (command_column_->get_property ("line-break-permission"))) @@ -188,6 +208,9 @@ Paper_column_engraver::process_music () void Paper_column_engraver::stop_translation_timestep () { + if (to_boolean (get_property ("skipTypesetting"))) + return; + SCM m = now_mom ().smobbed_copy (); command_column_->set_property ("when", m); musical_column_->set_property ("when", m); @@ -212,6 +235,7 @@ Paper_column_engraver::stop_translation_timestep () if (to_boolean (get_property ("forbidBreak")) && breaks_) /* don't honour forbidBreak if it occurs on the first moment of a score */ { + command_column_->set_property ("page-turn-permission", SCM_EOL); command_column_->set_property ("page-break-permission", SCM_EOL); command_column_->set_property ("line-break-permission", SCM_EOL); for (vsize i = 0; i < break_events_.size (); i++) @@ -252,11 +276,11 @@ Paper_column_engraver::stop_translation_timestep () void Paper_column_engraver::start_translation_timestep () { - /* - TODO: don't make columns when skipTypesetting is true. - */ - if (!first_) - make_columns (); + if (!first_ && !to_boolean (get_property ("skipTypesetting"))) + { + make_columns (); + made_columns_ = true; + } } ADD_ACKNOWLEDGER (Paper_column_engraver, item); diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 0112599371..f81818ea68 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -1,14 +1,26 @@ /* - paper-column.cc -- implement Paper_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "paper-column.hh" #include "axis-group-interface.hh" +#include "bar-line.hh" #include "break-align-interface.hh" #include "font-interface.hh" #include "grob-array.hh" @@ -46,6 +58,12 @@ Paper_column::get_rank (Grob const *me) return dynamic_cast (me)->rank_; } +void +Paper_column::set_rank (int rank) +{ + rank_ = rank; +} + System * Paper_column::get_system () const { @@ -79,20 +97,20 @@ Paper_column::Paper_column (Paper_column const &src) } int -Paper_column::compare (Grob * const &a, - Grob * const &b) +Paper_column::compare (Grob *const &a, + Grob *const &b) { - return sign (dynamic_cast (a)->rank_ - - dynamic_cast (b)->rank_); + return sign (dynamic_cast (a)->rank_ + - dynamic_cast (b)->rank_); } bool Paper_column::less_than (Grob *const &a, Grob *const &b) { - Paper_column *pa = dynamic_cast (a); - Paper_column *pb = dynamic_cast (b); - + Paper_column *pa = dynamic_cast (a); + Paper_column *pb = dynamic_cast (b); + return pa->rank_ < pb->rank_; } @@ -125,12 +143,16 @@ Paper_column::is_used (Grob *me) extract_grob_set (me, "bounded-by-me", bbm); if (bbm.size ()) return true; - + if (Paper_column::is_breakable (me)) return true; if (to_boolean (me->get_property ("used"))) return true; + + if (scm_is_pair (me->get_property ("labels"))) + return true; + return false; } @@ -143,7 +165,7 @@ Paper_column::is_breakable (Grob *me) Real Paper_column::minimum_distance (Grob *left, Grob *right) { - Drul_array cols (left, right); + Drul_array cols (left, right); Drul_array skys = Drul_array (Skyline (RIGHT), Skyline (LEFT)); Direction d = LEFT; @@ -161,18 +183,37 @@ Paper_column::minimum_distance (Grob *left, Grob *right) } Interval -Paper_column::break_align_width (Grob *me) +Paper_column::break_align_width (Grob *me, SCM align_sym) { Grob *p = me->get_parent (X_AXIS); if (is_musical (me)) { - me->programming_error ("tried to get break-align-width of a non-musical column"); + me->programming_error ("tried to get break-align-width of a musical column"); return Interval (0, 0) + me->relative_coordinate (p, X_AXIS); } - Grob *align = Pointer_group_interface::find_grob (me, ly_symbol2scm ("elements"), - Break_alignment_interface::has_interface); + Grob *align = 0; + if (align_sym == ly_symbol2scm ("staff-bar") + || align_sym == ly_symbol2scm ("break-alignment")) + align + = Pointer_group_interface::find_grob (me, ly_symbol2scm ("elements"), + (align_sym == ly_symbol2scm ("staff-bar") + ? Bar_line::non_empty_barline + : Break_alignment_interface::has_interface)); + else + { + extract_grob_set (me, "elements", elts); + for (vsize i = 0; i < elts.size (); i++) + { + if (elts[i]->get_property ("break-align-symbol") == align_sym) + { + align = elts[i]; + break; + } + } + } + if (!align) return Interval (0, 0) + me->relative_coordinate (p, X_AXIS); @@ -186,7 +227,7 @@ MAKE_SCHEME_CALLBACK (Paper_column, print, 1); SCM Paper_column::print (SCM p) { - Paper_column *me = dynamic_cast (unsmob_grob (p)); + Paper_column *me = dynamic_cast (unsmob_grob (p)); string r = to_string (Paper_column::get_rank (me)); @@ -209,11 +250,11 @@ Paper_column::print (SCM p) Stencil l = Lookup::filled_box (Box (Interval (-0.01, 0.01), Interval (-2, -1))); - + SCM small_letters = scm_cons (scm_acons (ly_symbol2scm ("font-size"), scm_from_int (-6), SCM_EOL), properties); - + int j = 0; for (SCM s = me->get_object ("ideal-distances"); scm_is_pair (s); s = scm_cdr (s)) @@ -222,7 +263,7 @@ Paper_column::print (SCM p) if (!unsmob_grob (scm_cdar (s)) || !unsmob_grob (scm_cdar (s))->get_system ()) continue; - + j++; Real y = -j * 1 -3; vector pts; @@ -230,30 +271,30 @@ Paper_column::print (SCM p) Offset p2 (sp->distance (), y); pts.push_back (p2); - + Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts); Stencil head (musfont->find_by_name ("arrowheads.open.01")); SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (), small_letters, ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ()))); - - id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (sp->distance ()/3, y+1))); + + id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (sp->distance () / 3, y + 1))); id_stencil.add_stencil (head.translated (p2)); id_stencil = id_stencil.in_color (0,0,1); l.add_stencil (id_stencil); } - + for (SCM s = me->get_object ("minimum-distances"); scm_is_pair (s); s = scm_cdr (s)) { Real dist = scm_to_double (scm_cdar (s)); - Grob *other = unsmob_grob (scm_caar (s)); + Grob *other = unsmob_grob (scm_caar (s)); if (!other || other->get_system () != me->get_system ()) continue; j++; - + Real y = -j * 1.0 -3.5; vector pts; pts.push_back (Offset (0, y)); @@ -270,10 +311,9 @@ Paper_column::print (SCM p) small_letters, ly_string2scm (String_convert::form_string ("%5.2lf", dist))); - - id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (dist/3, y-1))); - - + + id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (dist / 3, y - 1))); + id_stencil = id_stencil.in_color (1,0,0); l.add_stencil (id_stencil); } @@ -300,7 +340,7 @@ Paper_column::before_line_breaking (SCM grob) if (!ga) return SCM_UNSPECIFIED; - vector &array (ga->array_reference ()); + vector &array (ga->array_reference ()); for (vsize i = array.size (); i--;) { @@ -334,20 +374,19 @@ Paper_column::is_extraneous_column_from_ligature (Grob *me) if (Rhythmic_head::has_interface (elts[i])) { has_notehead = true; - if (dynamic_cast (elts[i])->get_column () == me) + if (dynamic_cast (elts[i])->get_column () == me) return false; } } return has_notehead; } - ADD_INTERFACE (Paper_column, "@code{Paper_column} objects form the top-most X@tie{}parents" - " for items. There are two types of columns: musical columns," - " where are attached to, and non-musical columns, where" - " bar-lines, clefs, etc., are attached to. The spacing engine" - " determines the X@tie{}positions of these objects.\n" + " for items. There are two types of columns: musical and" + " non-musical, to which musical and non-musical objects are" + " attached respectively. The spacing engine determines the" + " X@tie{}positions of these objects.\n" "\n" "They are numbered, the first (leftmost) is column@tie{}0." " Numbering happens before line breaking, and columns are not" @@ -365,6 +404,7 @@ ADD_INTERFACE (Paper_column, "line-break-system-details " "line-break-penalty " "line-break-permission " + "maybe-loose " "page-break-penalty " "page-break-permission " "page-turn-penalty " @@ -374,6 +414,5 @@ ADD_INTERFACE (Paper_column, "shortest-starter-duration " "spacing " "used " - "when " - ); + "when "); diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 0e6362a4d4..14f1546d60 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -1,9 +1,20 @@ /* - paper-def.cc -- implement Paper_def + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "dimensions.hh" @@ -104,7 +115,7 @@ Output_def * scale_output_def (Output_def *o, Real amount) { SCM proc = ly_lily_module_constant ("scale-layout"); - SCM new_pap = scm_call_2 (proc, o->self_scm (), scm_double2num (amount)); + SCM new_pap = scm_call_2 (proc, o->self_scm (), scm_from_double (amount)); o = unsmob_output_def (new_pap); o->protect (); diff --git a/lily/paper-outputter-scheme.cc b/lily/paper-outputter-scheme.cc index 15b9599a4f..be3d315cf1 100644 --- a/lily/paper-outputter-scheme.cc +++ b/lily/paper-outputter-scheme.cc @@ -1,9 +1,20 @@ /* - paper-outputter-scheme.cc -- implement Paper_outputter bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "paper-outputter.hh" @@ -97,3 +108,13 @@ LY_DEFINE (ly_outputter_output_scheme, "ly:outputter-output-scheme", return SCM_UNSPECIFIED; } + +LY_DEFINE (ly_outputter_module, "ly:outputter-module", + 1, 0, 0, (SCM outputter), + "Return output module of @var{outputter}.") +{ + LY_ASSERT_SMOB (Paper_outputter, outputter, 1); + + Paper_outputter *po = unsmob_outputter (outputter); + return po->module (); +} diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 6aedacca91..e08cbd6590 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -1,10 +1,21 @@ /* - paper-outputter.cc -- implement Paper_outputter + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "paper-outputter.hh" @@ -37,6 +48,13 @@ Paper_outputter::Paper_outputter (SCM port, string format) string module_name = "scm output-" + format; output_module_ = scm_c_resolve_module (module_name.c_str ()); + + /* + Enable errors for undefined stencil routines if + -dwarning-as-error is specified; else enable warnings. + */ + SCM proc = ly_lily_module_constant ("backend-testing"); + scm_call_1 (proc, output_module_); } Paper_outputter::~Paper_outputter () @@ -81,6 +99,12 @@ Paper_outputter::scheme_to_string (SCM scm) return scm_eval (scm, output_module_); } +SCM +Paper_outputter::module () const +{ + return output_module_; +} + void Paper_outputter::output_scheme (SCM scm) { @@ -105,5 +129,14 @@ void Paper_outputter::close () { if (scm_port_p (file_) == SCM_BOOL_T) - scm_close_port (file_); + { + scm_close_port (file_); + /* + Remove the "warning" definitions for missing stencil + expressions so that we start fresh with the next \book + block. --pmccarty + */ + SCM proc = ly_lily_module_constant ("remove-stencil-warnings"); + scm_call_1 (proc, output_module_); + } } diff --git a/lily/paper-score-scheme.cc b/lily/paper-score-scheme.cc index 6f26769f47..033f1b6477 100644 --- a/lily/paper-score-scheme.cc +++ b/lily/paper-score-scheme.cc @@ -1,9 +1,20 @@ /* - paper-score-scheme.cc -- implement Paper_score bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "paper-score.hh" diff --git a/lily/paper-score.cc b/lily/paper-score.cc index 7ae0854e98..9b5e8aa7df 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -1,9 +1,20 @@ /* - paper-score.cc -- implement Paper_score + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #include "paper-score.hh" @@ -58,26 +69,24 @@ Paper_score::typeset_system (System *system) system->unprotect (); } - -vector +void Paper_score::find_break_indices () const { - vector all = root_system ()->used_columns (); - vector retval; + cols_ = root_system ()->used_columns (); + break_indices_.clear (); + break_ranks_.clear (); - for (vsize i = 0; i < all.size (); i++) + for (vsize i = 0; i < cols_.size (); i++) { - Item *it = dynamic_cast (all[i]); - if (Paper_column::is_breakable (all[i]) + Item *it = dynamic_cast (cols_[i]); + if (Paper_column::is_breakable (cols_[i]) && (i == 0 || it->find_prebroken_piece (LEFT)) - && (i == all.size () - 1 || it->find_prebroken_piece (RIGHT))) - retval.push_back (i); + && (i == cols_.size () - 1 || it->find_prebroken_piece (RIGHT))) + { + break_indices_.push_back (i); + break_ranks_.push_back (it->get_column ()->get_rank ()); + } } - - cols_ = all; - break_indices_ = retval; - - return retval; } vector @@ -96,6 +105,14 @@ Paper_score::get_columns () const return cols_; } +vector +Paper_score::get_break_ranks () const +{ + if (break_ranks_.empty ()) + find_break_indices (); + return break_ranks_; +} + vector Paper_score::calc_breaking () { diff --git a/lily/paper-system-scheme.cc b/lily/paper-system-scheme.cc index 137cef0c5c..4187cfa3db 100644 --- a/lily/paper-system-scheme.cc +++ b/lily/paper-system-scheme.cc @@ -1,10 +1,21 @@ -/* - paper-system-scheme.cc -- implement Paper_system bindings. - - source file of the GNU LilyPond music typesetter - - (c) 2008--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2008--2011 Han-Wen Nienhuys + + 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 . */ #include "prob.hh" @@ -13,7 +24,8 @@ LY_DEFINE (ly_paper_system_p, "ly:paper-system?", 1, 0, 0, (SCM obj), - "Type predicate.") + "Is @var{obj} a C++ @code{Prob} object of type" + " @code{paper-system}?") { return ly_prob_type_p (obj, ly_symbol2scm ("paper-system")); } diff --git a/lily/paper-system.cc b/lily/paper-system.cc index 6653b6ddc7..711d919446 100644 --- a/lily/paper-system.cc +++ b/lily/paper-system.cc @@ -1,9 +1,20 @@ /* - paper-system.cc -- implement Prob functions for paper-system + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Jan Nieuwenhuizen - (c) 2004--2009 Jan Nieuwenhuizen + 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 . */ #include "paper-system.hh" @@ -16,6 +27,64 @@ make_paper_system (SCM immutable_init) return prob; } +/* + TODO + it might be interesting to split off the footnotes as well, ie. + + get_footnotes(SCM expr, SCM* footnotes, SCM* cleaned) + + by doing it this way and overwriting the old expr in the caller, + you can make sure nobody tries to handle footnotes differently + downstream. +*/ +SCM +get_footnotes (SCM expr) +{ + if (!scm_is_pair (expr)) + return SCM_EOL; + + SCM head = scm_car (expr); + + if (head == ly_symbol2scm ("delay-stencil-evaluation")) + { + // we likely need to do something here...just don't know what... + return SCM_EOL; + } + + if (head == ly_symbol2scm ("combine-stencil")) + { + SCM out = SCM_EOL; + SCM *tail = &out; + + 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) + { + *tail = scm_cons (footnote, SCM_EOL); + tail = SCM_CDRLOC (*tail); + } + } + return out; + } + if (head == ly_symbol2scm ("translate-stencil")) + return get_footnotes (scm_caddr (expr)); + + if (head == ly_symbol2scm ("footnote")) + return scm_cadr (expr); + + return SCM_EOL; +} + + void paper_system_set_stencil (Prob *prob, Stencil s) { diff --git a/lily/parenthesis-engraver.cc b/lily/parenthesis-engraver.cc index d3382070e0..1fe8005e4d 100644 --- a/lily/parenthesis-engraver.cc +++ b/lily/parenthesis-engraver.cc @@ -1,10 +1,21 @@ /* - parenthesis-engraver.cc -- implement Parenthesis_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/parse-scm.cc b/lily/parse-scm.cc index d1dad300e3..b51dcb296a 100644 --- a/lily/parse-scm.cc +++ b/lily/parse-scm.cc @@ -1,9 +1,20 @@ /* - parse-scm -- Parse a single SCM expression exactly. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "parse-scm.hh" @@ -29,7 +40,7 @@ internal_ly_parse_scm (Parse_start *ps) int off = ps->start_location_.start () - sf->c_str (); - scm_seek (port, scm_long2num (off), scm_long2num (SEEK_SET)); + scm_seek (port, scm_from_long (off), scm_from_long (SEEK_SET)); SCM from = scm_ftell (port); scm_set_port_line_x (port, scm_from_int (ps->start_location_.line_number () -1)); diff --git a/lily/parser.yy b/lily/parser.yy index 462a58de40..0bb4c152f2 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -1,10 +1,21 @@ /* - parser.yy -- Bison/C++ parser for LilyPond + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ %{ @@ -44,7 +55,7 @@ of the parse stack onto the heap. */ or - \repeat { \repeat } \alternative + \repeat { \repeat } \alternative */ @@ -73,6 +84,7 @@ using namespace std; #include "book.hh" #include "context-def.hh" +#include "context-mod.hh" #include "dimensions.hh" #include "file-path.hh" #include "input.hh" @@ -151,8 +163,8 @@ void set_music_properties (Music *p, SCM a); FIXME: Bison needs to translate some of these, eg, STRING. -*/ - +*/ + /* Keyword tokens with plain escaped name. */ %token ACCEPTS "\\accepts" %token ADDLYRICS "\\addlyrics" @@ -187,7 +199,6 @@ void set_music_properties (Music *p, SCM a); %token MIDI "\\midi" %token NAME "\\name" %token NOTEMODE "\\notemode" -%token OBJECTID "\\objectid" %token OCTAVE "\\octave" %token ONCE "\\once" %token OVERRIDE "\\override" @@ -260,36 +271,26 @@ If we give names, Bison complains. %token EXPECT_MARKUP; %token EXPECT_MUSIC; %token EXPECT_SCM; +%token EXPECT_MARKUP_LIST /* After the last argument. */ %token EXPECT_NO_MORE_ARGS; %token BOOK_IDENTIFIER %token CHORDMODIFIER_PITCH %token CHORD_MODIFIER +%token CHORD_REPETITION %token CONTEXT_DEF_IDENTIFIER +%token CONTEXT_MOD_IDENTIFIER %token DRUM_PITCH %token DURATION_IDENTIFIER %token EVENT_IDENTIFIER %token FRACTION %token LYRICS_STRING %token LYRIC_MARKUP_IDENTIFIER -%token MARKUP_HEAD_EMPTY -%token MARKUP_HEAD_LIST0 -%token MARKUP_HEAD_MARKUP0 -%token MARKUP_HEAD_MARKUP0_MARKUP1 -%token MARKUP_HEAD_SCM0 -%token MARKUP_HEAD_SCM0_MARKUP1 -%token MARKUP_HEAD_SCM0_SCM1 -%token MARKUP_HEAD_SCM0_SCM1_MARKUP2 -%token MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3 -%token MARKUP_HEAD_SCM0_MARKUP1_MARKUP2 -%token MARKUP_HEAD_SCM0_SCM1_SCM2 -%token MARKUP_LIST_HEAD_EMPTY -%token MARKUP_LIST_HEAD_LIST0 -%token MARKUP_LIST_HEAD_SCM0 -%token MARKUP_LIST_HEAD_SCM0_LIST1 -%token MARKUP_LIST_HEAD_SCM0_SCM1_LIST2 +%token MARKUP_FUNCTION +%token MARKUP_LIST_FUNCTION %token MARKUP_IDENTIFIER +%token MARKUPLINES_IDENTIFIER %token MUSIC_FUNCTION %token MUSIC_IDENTIFIER %token NOTENAME_PITCH @@ -334,6 +335,7 @@ If we give names, Bison complains. %type chord_body_element %type command_element %type command_event +%type context_modification %type context_change %type direction_less_event %type direction_reqd_event @@ -353,10 +355,10 @@ If we give names, Bison complains. %type output_def_head %type output_def_head_with_mode_switch %type output_def -%type paper_block +%type paper_block %type alternative_music -%type generic_prefix_music_scm +%type generic_prefix_music_scm %type music_list %type absolute_pitch %type assignment_id @@ -396,9 +398,11 @@ If we give names, Bison complains. %type lyric_markup %type markup %type markup_braced_list -%type markup_braced_list_body +%type markup_braced_list_body %type markup_composed_list %type markup_command_list +%type markup_command_list_arguments +%type markup_command_basic_arguments %type markup_head_1_item %type markup_head_1_list %type markup_list @@ -414,7 +418,6 @@ If we give names, Bison complains. %type number_expression %type number_factor %type number_term -%type object_id_setting %type octave_check %type optional_context_mod %type optional_id @@ -433,8 +436,9 @@ If we give names, Bison complains. %type steno_pitch %type steno_tonic_pitch %type step_number -%type step_numbers +%type step_numbers %type string +%type tempo_range %type score_block %type score_body @@ -463,10 +467,6 @@ lilypond: /* empty */ ; -object_id_setting: - OBJECTID STRING { $$ = $2; } - ; - toplevel_expression: lilypond_header { PARSER->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $1); @@ -485,7 +485,7 @@ toplevel_expression: } | score_block { Score *score = $1; - + SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-score-handler"); scm_call_2 (proc, PARSER->self_scm (), score->self_scm ()); score->unprotect (); @@ -531,7 +531,7 @@ lilypond_header_body: PARSER->lexer_->add_scope ($$); } | lilypond_header_body assignment { - + } ; @@ -552,7 +552,11 @@ assignment_id: assignment: assignment_id '=' identifier_init { PARSER->lexer_->set_identifier ($1, $3); - + } + | assignment_id property_path '=' identifier_init { + SCM path = scm_cons (scm_string_to_symbol ($1), $2); + PARSER->lexer_->set_identifier (path, $4); + ; /* TODO: devise standard for protection in parser. @@ -612,9 +616,15 @@ identifier_init: | full_markup { $$ = $1; } + | full_markup_list { + $$ = $1; + } | DIGIT { $$ = scm_from_int ($1); } + | context_modification { + $$ = $1; + } ; context_def_spec_block: @@ -645,7 +655,14 @@ context_def_spec_body: } } | context_def_spec_body context_mod { - unsmob_context_def ($$)->add_context_mod ($2); + unsmob_context_def ($$)->add_context_mod ($2); + } + | context_def_spec_body context_modification { + Context_def *td = unsmob_context_def ($$); + SCM new_mods = unsmob_context_mod ($2)->get_mods (); + for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) { + td->add_context_mod (scm_car (m)); + } } ; @@ -655,6 +672,7 @@ book_block: BOOK '{' book_body '}' { $$ = $3; pop_paper (PARSER); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F); } ; @@ -669,12 +687,16 @@ book_body: $$->paper_ = dynamic_cast (unsmob_output_def (PARSER->lexer_->lookup_identifier ("$defaultpaper"))->clone ()); $$->paper_->unprotect (); push_paper (PARSER, $$->paper_); - $$->header_ = PARSER->lexer_->lookup_identifier ("$defaultheader"); + $$->header_ = PARSER->lexer_->lookup_identifier ("$defaultheader"); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$->self_scm ()); + PARSER->lexer_->set_identifier (ly_symbol2scm ("book-output-suffix"), SCM_BOOL_F); + PARSER->lexer_->set_identifier (ly_symbol2scm ("book-filename"), SCM_BOOL_F); } | BOOK_IDENTIFIER { $$ = unsmob_book ($1); $$->protect (); $$->origin ()->set_spot (@$); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $1); } | book_body paper_block { $$->paper_ = $2; @@ -714,14 +736,12 @@ book_body: $$->scores_ = SCM_EOL; $$->bookparts_ = SCM_EOL; } - | book_body object_id_setting { - $$->user_key_ = ly_scm2string ($2); - } ; bookpart_block: BOOKPART '{' bookpart_body '}' { $$ = $3; + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F); } ; @@ -729,11 +749,13 @@ bookpart_body: { $$ = new Book; $$->origin ()->set_spot (@$); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $$->self_scm ()); } | BOOK_IDENTIFIER { $$ = unsmob_book ($1); $$->protect (); $$->origin ()->set_spot (@$); + PARSER->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $1); } | bookpart_body paper_block { $$->paper_ = $2; @@ -765,9 +787,6 @@ bookpart_body: $$->paper_ = 0; $$->scores_ = SCM_EOL; } - | bookpart_body object_id_setting { - $$->user_key_ = ly_scm2string ($2); - } ; score_block: @@ -792,9 +811,6 @@ score_body: $$->protect (); $$->origin ()->set_spot (@$); } - | score_body object_id_setting { - $$->user_key_ = ly_scm2string ($2); - } | score_body lilypond_header { $$->set_header ($2); } @@ -802,7 +818,7 @@ score_body: if ($2->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T) { PARSER->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead")); - + } else { @@ -895,20 +911,14 @@ output_def_body: ; tempo_event: - TEMPO steno_duration '=' bare_unsigned { - $$ = MAKE_SYNTAX ("tempo", @$, SCM_BOOL_F, $2, scm_int2num ($4)); + TEMPO steno_duration '=' tempo_range { + $$ = MAKE_SYNTAX ("tempo", @$, SCM_EOL, $2, $4); } - | TEMPO string steno_duration '=' bare_unsigned { - $$ = MAKE_SYNTAX ("tempo", @$, make_simple_markup($2), $3, scm_int2num ($5)); + | TEMPO scalar steno_duration '=' tempo_range { + $$ = MAKE_SYNTAX ("tempo", @$, $2, $3, $5); } - | TEMPO full_markup steno_duration '=' bare_unsigned { - $$ = MAKE_SYNTAX ("tempo", @$, $2, $3, scm_int2num ($5)); - } - | TEMPO string { - $$ = MAKE_SYNTAX ("tempoText", @$, make_simple_markup($2) ); - } - | TEMPO full_markup { - $$ = MAKE_SYNTAX ("tempoText", @$, $2 ); + | TEMPO scalar { + $$ = MAKE_SYNTAX ("tempo", @$, $2); } ; @@ -938,7 +948,7 @@ music_list: } | music_list error { Music *m = MY_MAKE_MUSIC("Music", @$); - // ugh. code dup + // ugh. code dup m->set_property ("error-found", SCM_BOOL_T); SCM s = $$; SCM c = scm_cons (m->self_scm (), SCM_EOL); @@ -999,22 +1009,45 @@ simple_music: | context_change ; +context_modification: + WITH { PARSER->lexer_->push_initial_state (); } '{' context_mod_list '}' + { + PARSER->lexer_->pop_state (); + $$ = $4; + } + | WITH CONTEXT_MOD_IDENTIFIER + { + $$ = $2; + } + | CONTEXT_MOD_IDENTIFIER + { + $$ = $1; + } + ; + optional_context_mod: - /**/ { $$ = SCM_EOL; } - | WITH { PARSER->lexer_->push_initial_state (); } - '{' context_mod_list '}' - { - PARSER->lexer_->pop_state (); - $$ = $4; - } - ; + /**/ { + $$ = SCM_EOL; + } + | context_modification + { + $$ = $1; + } + ; context_mod_list: - /* */ { $$ = SCM_EOL; } - | context_mod_list context_mod { - $$ = scm_cons ($2, $1); - } - ; + /**/ { + $$ = Context_mod ().smobbed_copy (); + } + | context_mod_list context_mod { + unsmob_context_mod ($1)->add_context_mod ($2); + } + | context_mod_list CONTEXT_MOD_IDENTIFIER { + Context_mod *md = unsmob_context_mod ($2); + if (md) + unsmob_context_mod ($1)->add_context_mods (md->get_mods ()); + } + ; composite_music: prefix_composite_music { $$ = $1; } @@ -1027,12 +1060,12 @@ grouped_music_list: ; function_scm_argument: - embedded_scm + embedded_scm | simple_string ; /* An argument list. If a function \foo expects scm scm music, then the lexer expands \foo into the token sequence: - MUSIC_FUNCTION EXPECT_MUSIC EXPECT_SCM EXPECT_SCM + 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: @@ -1045,6 +1078,9 @@ function_arglist_nonmusic_last: EXPECT_MARKUP function_arglist full_markup { $$ = scm_cons ($3, $2); } + | EXPECT_MARKUP function_arglist simple_string { + $$ = scm_cons ($3, $2); + } | EXPECT_SCM function_arglist function_scm_argument { $$ = scm_cons ($3, $2); } @@ -1056,6 +1092,9 @@ function_arglist_nonmusic: EXPECT_NO_MORE_ARGS { | EXPECT_MARKUP function_arglist_nonmusic full_markup { $$ = scm_cons ($3, $2); } + | EXPECT_MARKUP function_arglist_nonmusic simple_string { + $$ = scm_cons ($3, $2); + } | EXPECT_SCM function_arglist_nonmusic function_scm_argument { $$ = scm_cons ($3, $2); } @@ -1082,7 +1121,7 @@ optional_id: | '=' simple_string { $$ = $2; } - ; + ; prefix_composite_music: @@ -1090,10 +1129,18 @@ prefix_composite_music: $$ = run_music_function (PARSER, $1); } | CONTEXT simple_string optional_id optional_context_mod music { - $$ = MAKE_SYNTAX ("context-specification", @$, $2, $3, $5, $4, SCM_BOOL_F); + Context_mod *ctxmod = unsmob_context_mod ($4); + SCM mods = SCM_EOL; + if (ctxmod) + mods = ctxmod->get_mods (); + $$ = MAKE_SYNTAX ("context-specification", @$, $2, $3, $5, mods, SCM_BOOL_F); } | NEWCONTEXT simple_string optional_id optional_context_mod music { - $$ = MAKE_SYNTAX ("context-specification", @$, $2, $3, $5, $4, SCM_BOOL_T); + Context_mod *ctxmod = unsmob_context_mod ($4); + SCM mods = SCM_EOL; + if (ctxmod) + mods = ctxmod->get_mods (); + $$ = MAKE_SYNTAX ("context-specification", @$, $2, $3, $5, mods, SCM_BOOL_T); } | TIMES fraction music { @@ -1118,7 +1165,11 @@ prefix_composite_music: PARSER->lexer_->pop_state (); } | mode_changing_head_with_context optional_context_mod grouped_music_list { - $$ = MAKE_SYNTAX ("context-specification", @$, $1, SCM_EOL, $3, $2, SCM_BOOL_T); + Context_mod *ctxmod = unsmob_context_mod ($2); + SCM mods = SCM_EOL; + if (ctxmod) + mods = ctxmod->get_mods (); + $$ = MAKE_SYNTAX ("context-specification", @$, $1, SCM_EOL, $3, mods, SCM_BOOL_T); if ($1 == ly_symbol2scm ("ChordNames")) { $$ = MAKE_SYNTAX ("unrelativable-music", @$, $$); @@ -1129,14 +1180,14 @@ prefix_composite_music: | re_rhythmed_music { $$ = $1; } ; -mode_changing_head: +mode_changing_head: NOTEMODE { SCM nn = PARSER->lexer_->lookup_identifier ("pitchnames"); PARSER->lexer_->push_note_state (alist_to_hashq (nn)); $$ = ly_symbol2scm ("notes"); } - | DRUMMODE + | DRUMMODE { SCM nn = PARSER->lexer_->lookup_identifier ("drumPitchNames"); PARSER->lexer_->push_note_state (alist_to_hashq (nn)); @@ -1162,7 +1213,7 @@ mode_changing_head: } ; -mode_changing_head_with_context: +mode_changing_head_with_context: DRUMS { SCM nn = PARSER->lexer_->lookup_identifier ("drumPitchNames"); PARSER->lexer_->push_note_state (alist_to_hashq (nn)); @@ -1209,18 +1260,33 @@ new_lyrics: $$ = 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 { + 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 { + $$ = MAKE_SYNTAX ("add-lyrics", @$, $1, scm_reverse_x ($2, SCM_EOL)); + } | LYRICSTO simple_string { PARSER->lexer_->push_lyric_state (); } music { @@ -1248,7 +1314,7 @@ property_path_revved: property_path: property_path_revved { $$ = scm_reverse_x ($1, SCM_EOL); - } + } ; property_operation: @@ -1260,7 +1326,7 @@ property_operation: $$ = scm_list_2 (ly_symbol2scm ("unset"), scm_string_to_symbol ($2)); } - | OVERRIDE simple_string property_path '=' embedded_scm { + | OVERRIDE simple_string property_path '=' scalar { $$ = scm_append (scm_list_2 (scm_list_3 (ly_symbol2scm ("push"), scm_string_to_symbol ($2), $5), $3)); @@ -1290,6 +1356,17 @@ context_mod: | context_def_mod STRING { $$ = scm_list_2 ($1, $2); } + | context_def_mod embedded_scm { + if (ly_symbol2scm ("consists") != $1) + { + $$ = SCM_EOL; + PARSER->parser_error (@1, _ ("only \\consists takes non-string argument.")); + } + else + { + $$ = scm_list_2 ($1, $2); + } + } ; context_prop_spec: @@ -1310,7 +1387,7 @@ context_prop_spec: simple_music_property_def: OVERRIDE context_prop_spec property_path '=' scalar { - $$ = scm_append (scm_list_2 (scm_list_n (scm_car ($2), + $$ = scm_append (scm_list_2 (scm_list_n (scm_car ($2), ly_symbol2scm ("OverrideProperty"), scm_cadr ($2), $5, SCM_UNDEFINED), @@ -1400,13 +1477,28 @@ event_chord: i.set_location (@1, @2); $$ = MAKE_SYNTAX ("event-chord", i, elts); } + | CHORD_REPETITION optional_notemode_duration post_events { + Input i; + i.set_location (@1, @3); + $$ = MAKE_SYNTAX ("repetition-chord", i, + PARSER->lexer_->chord_repetition_.last_chord_, + PARSER->lexer_->chord_repetition_.repetition_function_, + $2, scm_reverse_x ($3, SCM_EOL)); + } | MULTI_MEASURE_REST optional_notemode_duration post_events { Input i; i.set_location (@1, @3); - $$ = MAKE_SYNTAX ("multi-measure-rest", i, $2, $3); + $$ = MAKE_SYNTAX ("multi-measure-rest", i, $2, + scm_reverse_x ($3, SCM_EOL)); } | command_element - | note_chord_element + /* note chord elements are memorized into + PARSER->lexer_->chord_repetition_ so that the chord repetition + mechanism copy them when a chord repetition symbol is found + */ + | note_chord_element { + PARSER->lexer_->chord_repetition_.last_chord_ = $$; + } ; @@ -1417,7 +1509,7 @@ note_chord_element: SCM dur = unsmob_duration ($2)->smobbed_copy (); SCM es = m->get_property ("elements"); SCM postevs = scm_reverse_x ($3, SCM_EOL); - + for (SCM s = es; scm_is_pair (s); s = scm_cdr (s)) unsmob_music (scm_car (s))->set_property ("duration", dur); es = ly_append2 (es, postevs); @@ -1480,7 +1572,7 @@ chord_body_element: } $$ = n->unprotect (); } - | music_function_chord_body { + | music_function_chord_body { $$ = run_music_function (PARSER, $1); } ; @@ -1553,9 +1645,7 @@ command_element: } | PARTIAL duration_length { - Moment m = - unsmob_duration ($2)->get_length (); - $$ = MAKE_SYNTAX ("property-operation", @$, SCM_BOOL_F, ly_symbol2scm ("Timing"), ly_symbol2scm ("PropertySet"), ly_symbol2scm ("measurePosition"), m.smobbed_copy ()); - $$ = MAKE_SYNTAX ("context-specification", @$, ly_symbol2scm ("Score"), SCM_BOOL_F, $$, SCM_EOL, SCM_BOOL_F); + $$ = MAKE_SYNTAX ("partial", @$, $2); } | TIME_T fraction { @@ -1564,9 +1654,7 @@ command_element: $$ = scm_apply_2 (proc, scm_car ($2), scm_cdr ($2), SCM_EOL); } | MARK scalar { - SCM proc = ly_lily_module_constant ("make-mark-set"); - - $$ = scm_call_1 (proc, $2); + $$ = MAKE_SYNTAX ("make-mark-set", @$, $2); } ; @@ -1589,7 +1677,7 @@ command_event: Music *key = MY_MAKE_MUSIC ("KeyChangeEvent", @$); if (scm_ilength ($3) > 0) - { + { key->set_property ("pitch-alist", $3); key->set_property ("tonic", Pitch (0, 0, 0).smobbed_copy ()); key->transpose (* unsmob_pitch ($2)); @@ -1611,13 +1699,17 @@ post_events: $$ = scm_cons ($2, $$); } ; - + post_event: direction_less_event { $$ = $1; } - | '-' music_function_event { + | script_dir music_function_event { $$ = run_music_function (PARSER, $2); + if ($1) + { + unsmob_music ($$)->set_property ("direction", scm_from_int ($1)); + } } | HYPHEN { if (!PARSER->lexer_->is_lyric_state ()) @@ -1661,7 +1753,7 @@ direction_less_char: $$ = ly_symbol2scm ("bracketOpenSymbol"); } | ']' { - $$ = ly_symbol2scm ("bracketCloseSymbol"); + $$ = ly_symbol2scm ("bracketCloseSymbol"); } | '~' { $$ = ly_symbol2scm ("tildeSymbol"); @@ -1712,8 +1804,8 @@ direction_less_event: a->set_property ("tremolo-type", scm_from_int ($1)); $$ = a->unprotect (); } - ; - + ; + direction_reqd_event: gen_text_def { $$ = $1; @@ -1887,6 +1979,7 @@ steno_duration: | DURATION_IDENTIFIER dots { Duration *d = unsmob_duration ($1); Duration k (d->duration_log (), d->dot_count () + $2); + k = k.compressed (d->factor ()); *d = k; $$ = $1; } @@ -2059,7 +2152,7 @@ simple_element: n = MY_MAKE_MUSIC ("RestEvent", @$); else n = MY_MAKE_MUSIC ("NoteEvent", @$); - + n->set_property ("pitch", $1); n->set_property ("duration", $5); @@ -2081,7 +2174,7 @@ simple_element: n->set_property ("duration", $2); n->set_property ("drum-type", $1); - $$ = n->unprotect (); + $$ = n->unprotect (); } | RESTNAME optional_notemode_duration { Music *ev = 0; @@ -2091,7 +2184,7 @@ simple_element: } else { ev = MY_MAKE_MUSIC ("RestEvent", @$); - + } ev->set_property ("duration", $2); $$ = ev->unprotect (); @@ -2110,7 +2203,7 @@ simple_element: simple_chord_elements: simple_element { $$ = scm_list_1 ($1); - } + } | new_chord { if (!PARSER->lexer_->is_chord_state ()) PARSER->parser_error (@1, _ ("have to be in Chord mode for chords")); @@ -2122,7 +2215,7 @@ simple_chord_elements: unsmob_music (scm_car (s))->set_property ("duration", $2); } $$ = $1; - } + } ; lyric_element: @@ -2146,7 +2239,7 @@ new_chord: chord_items: /**/ { - $$ = SCM_EOL; + $$ = SCM_EOL; } | chord_items chord_item { $$ = scm_cons ($2, $$); @@ -2197,7 +2290,16 @@ step_number: | bare_unsigned CHORD_MINUS { $$ = make_chord_step ($1, FLAT_ALTERATION); } - ; + ; + +tempo_range: + bare_unsigned { + $$ = scm_from_int ($1); + } + | bare_unsigned '~' bare_unsigned { + $$ = scm_cons (scm_from_int ($1), scm_from_int ($3)); + } + ; /* UTILITIES @@ -2269,7 +2371,6 @@ unsigned_number: $$ = $1; } ; - exclamations: { $$ = 0; } @@ -2298,7 +2399,10 @@ lyric_markup: ; full_markup_list: - MARKUPLINES + MARKUPLINES_IDENTIFIER { + $$ = $1; + } + | MARKUPLINES { PARSER->lexer_->push_markup_state (); } markup_list { $$ = $3; @@ -2319,8 +2423,8 @@ full_markup: ; markup_top: - markup_list { - $$ = scm_list_2 (ly_lily_module_constant ("line-markup"), $1); + markup_list { + $$ = scm_list_2 (ly_lily_module_constant ("line-markup"), $1); } | markup_head_1_list simple_markup { $$ = scm_car (scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), $1, scm_list_1 ($2))); @@ -2331,7 +2435,10 @@ markup_top: ; markup_list: - markup_composed_list { + MARKUPLINES_IDENTIFIER { + $$ = $1; + } + | markup_composed_list { $$ = $1; } | markup_braced_list { @@ -2345,7 +2452,7 @@ markup_list: markup_composed_list: markup_head_1_list markup_braced_list { $$ = scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), $1, $2); - + } ; @@ -2361,37 +2468,38 @@ markup_braced_list_body: $$ = scm_cons ($2, $1); } | markup_braced_list_body markup_list { - $$ = scm_append_x (scm_list_2 (scm_reverse_x ($2, SCM_EOL), $1)); + $$ = scm_reverse_x ($2, $1); } ; markup_command_list: - MARKUP_LIST_HEAD_EMPTY { - $$ = scm_list_1 ($1); + MARKUP_LIST_FUNCTION markup_command_list_arguments { + $$ = scm_cons ($1, scm_reverse_x($2, SCM_EOL)); } - | MARKUP_LIST_HEAD_LIST0 markup_list { - $$ = scm_list_2 ($1, $2); + ; + +markup_command_basic_arguments: + EXPECT_MARKUP_LIST markup_command_list_arguments markup_list { + $$ = scm_cons ($3, $2); } - | MARKUP_LIST_HEAD_SCM0 embedded_scm { - $$ = scm_list_2 ($1, $2); + | EXPECT_SCM markup_command_list_arguments embedded_scm { + $$ = scm_cons ($3, $2); } - | MARKUP_LIST_HEAD_SCM0_LIST1 embedded_scm markup_list { - $$ = scm_list_3 ($1, $2, $3); + | EXPECT_NO_MORE_ARGS { + $$ = SCM_EOL; } - | MARKUP_LIST_HEAD_SCM0_SCM1_LIST2 embedded_scm embedded_scm markup_list { - $$ = scm_list_4 ($1, $2, $3, $4); + ; + +markup_command_list_arguments: + markup_command_basic_arguments { $$ = $1; } + | EXPECT_MARKUP markup_command_list_arguments markup { + $$ = scm_cons ($3, $2); } ; markup_head_1_item: - MARKUP_HEAD_MARKUP0 { - $$ = scm_list_1 ($1); - } - | MARKUP_HEAD_SCM0_MARKUP1 embedded_scm { - $$ = scm_list_2 ($1, $2); - } - | MARKUP_HEAD_SCM0_SCM1_MARKUP2 embedded_scm embedded_scm { - $$ = scm_list_3 ($1, $2, $3); + MARKUP_FUNCTION EXPECT_MARKUP markup_command_list_arguments { + $$ = scm_cons ($1, scm_reverse_x ($3, SCM_EOL)); } ; @@ -2426,32 +2534,11 @@ simple_markup: sc->unprotect (); PARSER->lexer_->pop_state (); } - | MARKUP_HEAD_SCM0 embedded_scm { - $$ = scm_list_2 ($1, $2); - } - | MARKUP_HEAD_SCM0_SCM1_SCM2 embedded_scm embedded_scm embedded_scm { - $$ = scm_list_4 ($1, $2, $3, $4); - } - | MARKUP_HEAD_SCM0_SCM1 embedded_scm embedded_scm { - $$ = scm_list_3 ($1, $2, $3); - } - | MARKUP_HEAD_SCM0_MARKUP1_MARKUP2 embedded_scm markup markup { - $$ = scm_list_4 ($1, $2, $3, $4); - } - | MARKUP_HEAD_SCM0_SCM1_MARKUP2_MARKUP3 embedded_scm embedded_scm markup markup { - $$ = scm_list_5 ($1, $2, $3, $4, $5); - } - | MARKUP_HEAD_EMPTY { - $$ = scm_list_1 ($1); - } - | MARKUP_HEAD_LIST0 markup_list { - $$ = scm_list_2 ($1,$2); - } - | MARKUP_HEAD_MARKUP0_MARKUP1 markup markup { - $$ = scm_list_3 ($1, $2, $3); + | MARKUP_FUNCTION markup_command_basic_arguments { + $$ = scm_cons ($1, scm_reverse_x ($2, SCM_EOL)); } ; - + markup: markup_head_1_list simple_markup { SCM mapper = ly_lily_module_constant ("map-markup-command-list"); @@ -2501,13 +2588,17 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) } else if (scm_is_number (sid)) { *destination = sid; return NUMBER_IDENTIFIER; - } else if (unsmob_context_def (sid)) { - Context_def *def= unsmob_context_def (sid)->clone (); + } else if (unsmob_context_def (sid)) { + Context_def *def= unsmob_context_def (sid)->clone (); + + *destination = def->self_scm (); + def->unprotect (); + + return CONTEXT_DEF_IDENTIFIER; + } else if (unsmob_context_mod (sid)) { + *destination = unsmob_context_mod (sid)->smobbed_copy (); - *destination = def->self_scm (); - def->unprotect (); - - return CONTEXT_DEF_IDENTIFIER; + return CONTEXT_MOD_IDENTIFIER; } else if (unsmob_score (sid)) { Score *score = new Score (*unsmob_score (sid)); *destination = score->self_scm (); @@ -2531,7 +2622,7 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) } else if (unsmob_output_def (sid)) { Output_def *p = unsmob_output_def (sid); p = p->clone (); - + *destination = p->self_scm (); p->unprotect (); return OUTPUT_DEF_IDENTIFIER; @@ -2540,9 +2631,12 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) if (is_lyric_state ()) return LYRIC_MARKUP_IDENTIFIER; return MARKUP_IDENTIFIER; + } else if (Text_interface::is_markup_list (sid)) { + *destination = sid; + return MARKUPLINES_IDENTIFIER; } - return -1; + return -1; } SCM @@ -2676,7 +2770,7 @@ make_music_relative (Pitch start, SCM music, Input loc) { Music *relative = MY_MAKE_MUSIC ("RelativeOctaveMusic", loc); relative->set_property ("element", music); - + Music *m = unsmob_music (music); Pitch last = m->to_relative_octave (start); if (lily_1_8_relative) @@ -2690,8 +2784,8 @@ yylex (YYSTYPE *s, YYLTYPE *loc, void *v) Lily_parser *pars = (Lily_parser*) v; Lily_lexer *lex = pars->lexer_; - lex->lexval = (void*) s; - lex->lexloc = loc; + lex->lexval_ = (void*) s; + lex->lexloc_ = loc; lex->prepare_for_next_token (); return lex->yylex (); } diff --git a/lily/part-combine-engraver.cc b/lily/part-combine-engraver.cc index 23c4bf358d..f12cfbad95 100644 --- a/lily/part-combine-engraver.cc +++ b/lily/part-combine-engraver.cc @@ -1,15 +1,25 @@ /* - part-combine-engraver.cc -- implement PC-engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Jan Nieuwenhuizen + Copyright (C) 2000--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" -#include "multi-measure-rest.hh" #include "note-head.hh" #include "side-position-interface.hh" #include "stem.hh" @@ -28,46 +38,74 @@ protected: DECLARE_ACKNOWLEDGER (stem); DECLARE_TRANSLATOR_LISTENER (part_combine); + DECLARE_TRANSLATOR_LISTENER (note); void process_music (); void stop_translation_timestep (); + void create_item (Stream_event *ev); + private: Item *text_; - Stream_event *event_; + Stream_event *new_event_; // Event happened at this moment + bool note_found_; + // Event possibly from an earlier moment waiting to create a text: + Stream_event *waiting_event_; }; IMPLEMENT_TRANSLATOR_LISTENER (Part_combine_engraver, part_combine); void Part_combine_engraver::listen_part_combine (Stream_event *ev) { - ASSIGN_EVENT_ONCE (event_, ev); + ASSIGN_EVENT_ONCE (new_event_, ev); + // If two events occur at the same moment, discard the second as the + // warning indicates: + waiting_event_ = new_event_; +} + +IMPLEMENT_TRANSLATOR_LISTENER (Part_combine_engraver, note); +void +Part_combine_engraver::listen_note (Stream_event *) +{ + note_found_ = true; } Part_combine_engraver::Part_combine_engraver () { text_ = 0; - event_ = 0; + new_event_ = 0; + waiting_event_ = 0; + note_found_ = false; +} + +void +Part_combine_engraver::create_item (Stream_event *ev) +{ + SCM what = ev->get_property ("class"); + SCM text = SCM_EOL; + if (what == ly_symbol2scm ("solo-one-event")) + text = get_property ("soloText"); + else if (what == ly_symbol2scm ("solo-two-event")) + text = get_property ("soloIIText"); + else if (what == ly_symbol2scm ("unisono-event")) + text = get_property ("aDueText"); + + if (Text_interface::is_markup (text)) + { + text_ = make_item ("CombineTextScript", ev->self_scm ()); + text_->set_property ("text", text); + } } void Part_combine_engraver::process_music () { - if (event_ + if (waiting_event_ && to_boolean (get_property ("printPartCombineTexts"))) { - SCM what = event_->get_property ("class"); - SCM text = SCM_EOL; - if (what == ly_symbol2scm ("solo-one-event")) - text = get_property ("soloText"); - else if (what == ly_symbol2scm ("solo-two-event")) - text = get_property ("soloIIText"); - else if (what == ly_symbol2scm ("unisono-event")) - text = get_property ("aDueText"); - - if (Text_interface::is_markup (text)) - { - text_ = make_item ("CombineTextScript", event_->self_scm ()); - text_->set_property ("text", text); - } + if (note_found_ || !to_boolean (get_property ("partCombineTextsOnNote"))) + { + create_item (waiting_event_); + waiting_event_ = 0; + } } } @@ -95,7 +133,8 @@ void Part_combine_engraver::stop_translation_timestep () { text_ = 0; - event_ = 0; + new_event_ = 0; + note_found_ = false; } ADD_ACKNOWLEDGER (Part_combine_engraver, note_head); @@ -110,6 +149,7 @@ ADD_TRANSLATOR (Part_combine_engraver, /* read */ "printPartCombineTexts " + "partCombineTextsOnNote " "soloText " "soloIIText " "aDueText ", diff --git a/lily/part-combine-iterator.cc b/lily/part-combine-iterator.cc index 5f35a0bba4..adbc2beb32 100644 --- a/lily/part-combine-iterator.cc +++ b/lily/part-combine-iterator.cc @@ -1,9 +1,20 @@ /* - new-part-combine-music-iterator.cc -- implement Part_combine_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" @@ -14,14 +25,14 @@ #include "music-sequence.hh" #include "warn.hh" -typedef enum Outlet_type +enum Outlet_type { CONTEXT_ONE, CONTEXT_TWO, CONTEXT_SHARED, CONTEXT_SOLO, CONTEXT_NULL, NUM_OUTLETS }; -static const char *outlet_names_[NUM_OUTLETS] = +static const char *outlet_names_[NUM_OUTLETS] = {"one", "two", "shared", "solo", "null"}; class Part_combine_iterator : public Music_iterator @@ -46,20 +57,20 @@ private: DECLARE_LISTENER (set_busy); bool busy_; bool notice_busy_; - + bool try_process (Music_iterator *i, Moment m); - + Music_iterator *first_iter_; Music_iterator *second_iter_; Moment start_moment_; SCM split_list_; - Stream_event *unisono_event_; + Stream_event *unisono_event_; Stream_event *solo_one_event_; Stream_event *solo_two_event_; - Stream_event *mmrest_event_; - + Stream_event *mmrest_event_; + enum Status { APART, @@ -124,6 +135,9 @@ Part_combine_iterator::Part_combine_iterator () split_list_ = SCM_EOL; state_ = APART; playing_state_ = APART; + + busy_ = false; + notice_busy_ = false; } void @@ -173,61 +187,6 @@ Part_combine_iterator::ok () const return first_iter_->ok () || second_iter_->ok (); } -void -Part_combine_iterator::chords_together () -{ - if (state_ == TOGETHER) - return; - else - { - playing_state_ = TOGETHER; - state_ = TOGETHER; - - substitute_both (CONTEXT_SHARED, CONTEXT_SHARED); - } -} - -void -Part_combine_iterator::kill_mmrest (int in) -{ - - if (!mmrest_event_) - { - mmrest_event_ = new Stream_event (ly_symbol2scm ("multi-measure-rest-event")); - mmrest_event_->set_property ("duration", SCM_EOL); - mmrest_event_->unprotect (); - } - - handles_[in].get_outlet ()->event_source ()->broadcast (mmrest_event_); -} - -void -Part_combine_iterator::solo1 () -{ - if (state_ == SOLO1) - return; - else - { - state_ = SOLO1; - substitute_both (CONTEXT_SOLO, CONTEXT_NULL); - - kill_mmrest (CONTEXT_TWO); - kill_mmrest (CONTEXT_SHARED); - - if (playing_state_ != SOLO1) - { - if (!solo_one_event_) - { - solo_one_event_ = new Stream_event (ly_symbol2scm ("solo-one-event")); - solo_one_event_->unprotect (); - } - - first_iter_->get_outlet ()->event_source ()->broadcast (solo_one_event_); - } - playing_state_ = SOLO1; - } -} - void Part_combine_iterator::substitute_both (Outlet_type to1, Outlet_type to2) @@ -250,6 +209,20 @@ Part_combine_iterator::substitute_both (Outlet_type to1, } } +void +Part_combine_iterator::kill_mmrest (int in) +{ + + if (!mmrest_event_) + { + mmrest_event_ = new Stream_event (ly_symbol2scm ("multi-measure-rest-event")); + mmrest_event_->set_property ("duration", SCM_EOL); + mmrest_event_->unprotect (); + } + + handles_[in].get_outlet ()->event_source ()->broadcast (mmrest_event_); +} + void Part_combine_iterator::unisono (bool silent) { @@ -279,7 +252,7 @@ Part_combine_iterator::unisono (bool silent) unisono_event_ = new Stream_event (ly_symbol2scm ("unisono-event")); unisono_event_->unprotect (); } - + Context *out = (last_playing_ == SOLO2 ? second_iter_ : first_iter_) ->get_outlet (); @@ -290,6 +263,33 @@ Part_combine_iterator::unisono (bool silent) } } +void +Part_combine_iterator::solo1 () +{ + if (state_ == SOLO1) + return; + else + { + state_ = SOLO1; + substitute_both (CONTEXT_SOLO, CONTEXT_NULL); + + kill_mmrest (CONTEXT_TWO); + kill_mmrest (CONTEXT_SHARED); + + if (playing_state_ != SOLO1) + { + if (!solo_one_event_) + { + solo_one_event_ = new Stream_event (ly_symbol2scm ("solo-one-event")); + solo_one_event_->unprotect (); + } + + first_iter_->get_outlet ()->event_source ()->broadcast (solo_one_event_); + } + playing_state_ = SOLO1; + } +} + void Part_combine_iterator::solo2 () { @@ -308,13 +308,27 @@ Part_combine_iterator::solo2 () solo_two_event_ = new Stream_event (ly_symbol2scm ("solo-two-event")); solo_two_event_->unprotect (); } - + second_iter_->get_outlet ()->event_source ()->broadcast (solo_two_event_); playing_state_ = SOLO2; } } } +void +Part_combine_iterator::chords_together () +{ + if (state_ == TOGETHER) + return; + else + { + playing_state_ = TOGETHER; + state_ = TOGETHER; + + substitute_both (CONTEXT_SHARED, CONTEXT_SHARED); + } +} + void Part_combine_iterator::apart (bool silent) { @@ -356,6 +370,10 @@ Part_combine_iterator::construct_children () set_context (two); second_iter_ = unsmob_iterator (get_iterator (unsmob_music (scm_cadr (lst)))); + + /* Mimic all settings of voiceOne/voiceTwo for the two separate voices...*/ + /* FIXME: Is there any way to use the definition of \voiceOne/\voiceTwo + directly??? */ char const *syms[] = { "Stem", @@ -378,6 +396,17 @@ Part_combine_iterator::construct_children () execute_pushpop_property (two, sym, ly_symbol2scm ("direction"), scm_from_int (-1)); } + /* Handle horizontal shifts for crossing notes */ + execute_pushpop_property (one, ly_symbol2scm ("NoteColumn"), + ly_symbol2scm ("horizontal-shift"), scm_from_int (0)); + execute_pushpop_property (two, ly_symbol2scm ("NoteColumn"), + ly_symbol2scm ("horizontal-shift"), scm_from_int (1)); + /* Also handle MultiMeasureRest positions for voice 1/2 */ + execute_pushpop_property (one, ly_symbol2scm ("MultiMeasureRest"), + ly_symbol2scm ("staff-position"), scm_from_int (4)); + execute_pushpop_property (two, ly_symbol2scm ("MultiMeasureRest"), + ly_symbol2scm ("staff-position"), scm_from_int (-4)); + } IMPLEMENT_LISTENER (Part_combine_iterator, set_busy); @@ -404,7 +433,7 @@ Part_combine_iterator::try_process (Music_iterator *i, Moment m) notice_busy_ = true; i->process (m); - + notice_busy_ = false; return busy_; } diff --git a/lily/partial-iterator.cc b/lily/partial-iterator.cc new file mode 100644 index 0000000000..d38a951465 --- /dev/null +++ b/lily/partial-iterator.cc @@ -0,0 +1,56 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Neil Puttock + + 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 . +*/ + +#include "context.hh" +#include "input.hh" +#include "international.hh" +#include "moment.hh" +#include "music.hh" +#include "simple-music-iterator.hh" + +class Partial_iterator : public Simple_music_iterator +{ +public: + DECLARE_SCHEME_CALLBACK (constructor, ()); + protected: + virtual void process (Moment); +}; + +void +Partial_iterator::process (Moment m) +{ + if (Duration *dur + = unsmob_duration (get_music ()->get_property ("partial-duration"))) + { + Context *ctx = get_outlet (); + Moment now = ctx->now_mom (); + if (now.main_part_ > Rational (0)) + get_music ()->origin ()-> + warning (_ ("trying to use \\partial after the start of a piece")); + Moment length = Moment (dur->get_length ()); + now = Moment (0, now.grace_part_); + ctx->set_property ("measurePosition", (now - length).smobbed_copy ()); + } + else + programming_error ("invalid duration in \\partial"); + + Simple_music_iterator::process (m); +} + +IMPLEMENT_CTOR_CALLBACK (Partial_iterator); diff --git a/lily/pdf-scheme.cc b/lily/pdf-scheme.cc new file mode 100644 index 0000000000..e813e08ec3 --- /dev/null +++ b/lily/pdf-scheme.cc @@ -0,0 +1,83 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2011 Reinhold Kainhofer + + 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 . +*/ + +#include +using namespace std; + +#include "international.hh" +#include "warn.hh" +#include "lily-guile.hh" + + +LY_DEFINE (ly_encode_string_for_pdf, "ly:encode-string-for-pdf", + 1, 0, 0, (SCM str), + "Encode the given string to either Latin1 (which is a subset of" + " the PDFDocEncoding) or if that's not possible to full UTF-16BE" + " with Byte-Order-Mark (BOM).") +{ + LY_ASSERT_TYPE (scm_is_string, str, 1); + char *p = ly_scm2str0 (str); + char *g = NULL; + char const *charset="UTF-8"; // Input is ALWAYS UTF-8! + gsize bytes_written = 0; + + /* First, try to convert to ISO-8859-1 (no encodings required). This will + * fail, if the string contains accented characters, so we do not check + * for errors. */ + g = g_convert (p, -1, "ISO-8859-1", charset, 0, &bytes_written, 0); + /* If that fails, we have to resolve to full UTF-16BE */ + if (!g) + { + GError *e = NULL; + char *g_without_BOM = g_convert (p, -1, "UTF-16BE", charset, 0, &bytes_written, &e); + if (e != NULL) + { + warning (_f("Conversion of string `%s' to UTF-16be failed: %s", p, e->message)); + g_error_free (e); + } + /* UTF-16BE allows/recommends a byte-order-mark (BOM) of two bytes + * \xFE\xFF at the begin of the string. The pdfmark specification + * requires it and depends on it to distinguish PdfDocEncoding from + * UTF-16BE. As g_convert does not automatically prepend this BOM + * for UTF-16BE (only for UTF-16, which uses lower endian by default, + * though), we have to prepend it manually. */ + if (g_without_BOM) // conversion to UTF-16be might have failed (shouldn't!) + { + g = new char[bytes_written+3]; + char const *BOM = "\xFE\xFF"; + strcpy (g, BOM); + memcpy (&g[2], g_without_BOM, bytes_written+1); // Copy string + \0 + free (g_without_BOM); + bytes_written += 2; + } + } + free (p); + + /* Convert back to SCM object and return it */ + /* FIXME guile-2.0: With guile 2.0 the internal representation of a string + * has changed (char vector rather than binary bytes in + * UTF-8). However, with guile 2.0, ly:encode-string-for-pdf + * is no longer needed and can be replaced by the new + * (string->utf16 str 'big) + */ + if (g) + return scm_take_str (g, bytes_written); // scm_take_str eventually frees g! + else + return str; +} diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index ea77254cfc..1b437b2822 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -1,20 +1,27 @@ /* - percent-repeat-engraver.cc -- implement Percent_repeat_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys , Erik Sandberg - (c) 2000--2009 Han-Wen Nienhuys , Erik Sandberg -*/ + 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 . +*/ -#include "score-engraver.hh" -#include "bar-line.hh" +#include "engraver.hh" #include "global-context.hh" #include "international.hh" #include "item.hh" -#include "misc.hh" -#include "repeated-music.hh" #include "side-position-interface.hh" #include "spanner.hh" #include "stream-event.hh" @@ -22,46 +29,32 @@ #include "translator.icc" -/* -* TODO: Create separate Double_percent_repeat_engraver? -* Or, at least move double percent handling to Slash_repeat_engraver -*/ - class Percent_repeat_engraver : public Engraver { void typeset_perc (); - bool check_count_visibility (SCM count); + public: TRANSLATOR_DECLARATIONS (Percent_repeat_engraver); protected: Stream_event *percent_event_; - /// moment (global time) where percent started. - Moment stop_mom_; + // moment (global time) where percent started Moment start_mom_; - - enum Repeat_sign_type - { - UNKNOWN, - MEASURE, - DOUBLE_MEASURE, - }; - Repeat_sign_type repeat_sign_type_; + // moment (global time) where percent should end + Moment stop_mom_; Spanner *percent_; Spanner *percent_counter_; - Grob *first_command_column_; Moment command_moment_; - -protected: + virtual void finalize (); DECLARE_TRANSLATOR_LISTENER (percent); - void stop_translation_timestep (); void start_translation_timestep (); + void stop_translation_timestep (); void process_music (); }; @@ -80,7 +73,8 @@ Percent_repeat_engraver::start_translation_timestep () { if (now_mom ().main_part_ != command_moment_.main_part_) { - first_command_column_ = unsmob_grob (get_property ("currentCommandColumn")); + first_command_column_ + = unsmob_grob (get_property ("currentCommandColumn")); command_moment_ = now_mom (); } @@ -89,7 +83,6 @@ Percent_repeat_engraver::start_translation_timestep () if (percent_) typeset_perc (); percent_event_ = 0; - repeat_sign_type_ = UNKNOWN; } } @@ -100,97 +93,50 @@ Percent_repeat_engraver::listen_percent (Stream_event *ev) if (!percent_event_) { Moment body_length = get_event_length (ev); - Moment meas_len (robust_scm2moment (get_property ("measureLength"), - Moment (1))); - if (meas_len == body_length) - { - repeat_sign_type_ = MEASURE; - start_mom_ = now_mom (); - stop_mom_ = now_mom () + body_length; - get_global_context ()->add_moment_to_process (stop_mom_); - } - else if (Moment (2) * meas_len == body_length) - { - repeat_sign_type_ = DOUBLE_MEASURE; - start_mom_ = now_mom () + meas_len; - stop_mom_ = now_mom () + body_length; /* never used */ - get_global_context ()->add_moment_to_process (start_mom_); - } - else - { - /* - don't warn about percent repeats: slash repeats are not - exactly 1 or 2 measures long. - */ - return; - } + start_mom_ = now_mom (); + stop_mom_ = now_mom () + body_length; + get_global_context ()->add_moment_to_process (stop_mom_); percent_event_ = ev; } else - /* print a warning: no assignment happens because - percent_event_ != 0 */ - ASSIGN_EVENT_ONCE (percent_event_, ev); + { + /* + print a warning: no assignment happens because + percent_event_ != 0 + */ + ASSIGN_EVENT_ONCE (percent_event_, ev); + } } void Percent_repeat_engraver::process_music () { - if (percent_event_ && now_mom ().main_part_ == start_mom_.main_part_) + if (percent_event_ + && now_mom ().main_part_ == start_mom_.main_part_) { - if (repeat_sign_type_ == MEASURE) - { - if (percent_) - typeset_perc (); - - percent_ = make_spanner ("PercentRepeat", percent_event_->self_scm ()); - - Grob *col = first_command_column_; - percent_->set_bound (LEFT, col); - - SCM count = percent_event_->get_property ("repeat-count"); - if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats")) - && check_count_visibility (count)) - { - percent_counter_ - = make_spanner ("PercentRepeatCounter", percent_event_->self_scm ()); - - SCM text = scm_number_to_string (count, scm_from_int (10)); - percent_counter_->set_property ("text", text); - percent_counter_->set_bound (LEFT, col); - Side_position_interface::add_support (percent_counter_, - percent_); - percent_counter_->set_parent (percent_, Y_AXIS); - } - else - percent_counter_ = 0; - } - else if (repeat_sign_type_ == DOUBLE_MEASURE) + if (percent_) + typeset_perc (); + + percent_ = make_spanner ("PercentRepeat", percent_event_->self_scm ()); + + Grob *col = first_command_column_; + percent_->set_bound (LEFT, col); + + SCM count = percent_event_->get_property ("repeat-count"); + if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats")) + && check_repeat_count_visibility (context (), count)) { - Item *double_percent = make_item ("DoublePercentRepeat", percent_event_->self_scm ()); - - SCM count = percent_event_->get_property ("repeat-count"); - if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats")) - && check_count_visibility (count)) - { - Item *double_percent_counter = make_item ("DoublePercentRepeatCounter", - percent_event_->self_scm ()); - - SCM text = scm_number_to_string (count, - scm_from_int (10)); - double_percent_counter->set_property ("text", text); - - Side_position_interface::add_support (double_percent_counter, - double_percent); - double_percent_counter->set_parent (double_percent, Y_AXIS); - double_percent_counter->set_parent (double_percent, X_AXIS); - } - - /* forbid breaks on a % line. Should forbid all breaks, really. */ - context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T); - - /* No more processing needed. */ - repeat_sign_type_ = UNKNOWN; + percent_counter_ = make_spanner ("PercentRepeatCounter", + percent_event_->self_scm ()); + + SCM text = scm_number_to_string (count, scm_from_int (10)); + percent_counter_->set_property ("text", text); + percent_counter_->set_bound (LEFT, col); + Side_position_interface::add_support (percent_counter_, percent_); + percent_counter_->set_parent (percent_, Y_AXIS); } + else + percent_counter_ = 0; } } @@ -208,29 +154,16 @@ Percent_repeat_engraver::finalize () void Percent_repeat_engraver::typeset_perc () { - if (percent_) - { - Grob *col = first_command_column_; - - percent_->set_bound (RIGHT, col); - percent_ = 0; + Grob *col = first_command_column_; - if (percent_counter_) - percent_counter_->set_bound (RIGHT, col); - percent_counter_ = 0; - } -} + percent_->set_bound (RIGHT, col); + percent_ = 0; -bool -Percent_repeat_engraver::check_count_visibility (SCM count) -{ - SCM proc = get_property ("repeatCountVisibility"); - return (ly_is_procedure (proc) && to_boolean (scm_call_2 (proc, - count, - context ()->self_scm ()))); + if (percent_counter_) + percent_counter_->set_bound (RIGHT, col); + percent_counter_ = 0; } - void Percent_repeat_engraver::stop_translation_timestep () { @@ -238,20 +171,17 @@ Percent_repeat_engraver::stop_translation_timestep () ADD_TRANSLATOR (Percent_repeat_engraver, /* doc */ - "Make whole bar and double bar repeats.", + "Make whole measure repeats.", /* create */ - "DoublePercentRepeat " - "DoublePercentRepeatCounter " "PercentRepeat " "PercentRepeatCounter ", /* read */ "countPercentRepeats " "currentCommandColumn " - "measureLength " "repeatCountVisibility ", /* write */ - "forbidBreak " + "" ); diff --git a/lily/percent-repeat-item.cc b/lily/percent-repeat-item.cc index ae8910fca4..1e97753fee 100644 --- a/lily/percent-repeat-item.cc +++ b/lily/percent-repeat-item.cc @@ -1,18 +1,31 @@ /* - percent-repeat-item.cc -- implement Percent_repeat_item_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "percent-repeat-item.hh" + #include "item.hh" -#include "lookup.hh" #include "font-interface.hh" +#include "lookup.hh" +#include "stream-event.hh" Stencil -Percent_repeat_item_interface::brew_slash (Grob *me) +Percent_repeat_item_interface::brew_slash (Grob *me, int count) { Real slope = robust_scm2double (me->get_property ("slope"), 1); Real wid = 2.0 / slope; @@ -21,7 +34,14 @@ Percent_repeat_item_interface::brew_slash (Grob *me) todo: check out if in staff-rule thickness normally. */ Real thick = robust_scm2double (me->get_property ("thickness"), 1); - Stencil m = Lookup::repeat_slash (wid, slope, thick); + Stencil slash = Lookup::repeat_slash (wid, slope, thick); + Stencil m = slash; + + Real slash_neg_kern = + robust_scm2double (me->get_property ("slash-negative-kern"), 1.6); + for (int i = count - 1; i--;) + m.add_at_edge (X_AXIS, RIGHT, slash, -slash_neg_kern); + m.translate_axis (-m.extent (Y_AXIS).center (), Y_AXIS); return m; } @@ -29,16 +49,11 @@ Percent_repeat_item_interface::brew_slash (Grob *me) Stencil Percent_repeat_item_interface::x_percent (Grob *me, int count) { - Stencil m; - Stencil s = brew_slash (me); + Stencil m = brew_slash (me, count); Real dot_neg_kern = robust_scm2double (me->get_property ("dot-negative-kern"), 0.75); - Real slash_neg_kern = - robust_scm2double (me->get_property ("slash-negative-kern"), 1.6); - for (int i = count; i--;) - m.add_at_edge (X_AXIS, RIGHT, s, -slash_neg_kern); Stencil d1 = Font_interface::get_default_font (me)->find_by_name ("dots.dot"); Stencil d2 = d1; d1.translate_axis (0.5, Y_AXIS); @@ -47,7 +62,6 @@ Percent_repeat_item_interface::x_percent (Grob *me, int count) m.add_at_edge (X_AXIS, LEFT, d1, -dot_neg_kern); m.add_at_edge (X_AXIS, RIGHT, d2, -dot_neg_kern); - m.translate_axis (- m.extent (X_AXIS).center (), X_AXIS); return m; } @@ -57,6 +71,7 @@ Percent_repeat_item_interface::double_percent (SCM grob) { Grob *me = unsmob_grob (grob); Stencil m = x_percent (me, 2); + m.translate_axis (-m.extent (X_AXIS).center (), X_AXIS); return m.smobbed_copy (); } @@ -65,18 +80,24 @@ SCM Percent_repeat_item_interface::beat_slash (SCM grob) { Grob *me = unsmob_grob (grob); - Stencil m = brew_slash (me); + Stream_event *cause = unsmob_stream_event (me->get_property ("cause")); + int count = robust_scm2int (cause->get_property ("slash-count"), 1); + + Stencil m; + if (count == 0) + m = x_percent (me, 2); + else + m = brew_slash (me, count); return m.smobbed_copy (); } ADD_INTERFACE (Percent_repeat_item_interface, "Repeats that look like percent signs.", - + /* properties */ "dot-negative-kern " "slash-negative-kern " "slope " "thickness " ); - diff --git a/lily/percent-repeat-iterator.cc b/lily/percent-repeat-iterator.cc index 7f3115c0a1..d829553557 100644 --- a/lily/percent-repeat-iterator.cc +++ b/lily/percent-repeat-iterator.cc @@ -1,12 +1,24 @@ /* - percent-repeat-iterator.cc -- implement Percent_repeat_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2001--2009 Han-Wen Nienhuys + Copyright (C) 2001--2011 Han-Wen Nienhuys Erik Sandberg + + 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 . */ +#include "context.hh" #include "input.hh" #include "repeated-music.hh" #include "sequential-iterator.hh" @@ -30,24 +42,44 @@ Percent_repeat_iterator::Percent_repeat_iterator () SCM Percent_repeat_iterator::get_music_list () const { - /* TODO: Distinction between percent, double-percent and slash */ Music *mus = get_music (); Music *child = Repeated_music::body (mus); SCM length = child->get_length ().smobbed_copy (); SCM child_list = SCM_EOL; + Moment measure_len = measure_length (get_outlet ()); + Moment music_len = robust_scm2moment (length, Moment (0)); + + string event_type; + SCM slash_count = SCM_EOL; + + if (measure_len == music_len) + event_type = "PercentEvent"; + else if (measure_len * Moment (2) == music_len) + event_type = "DoublePercentEvent"; + else + { + slash_count + = scm_call_1 (ly_lily_module_constant ("calc-repeat-slash-count"), + child->self_scm ()); + event_type = "RepeatSlashEvent"; + } int repeats = scm_to_int (mus->get_property ("repeat-count")); for (int i = repeats; i > 1; i--) { - Music *percent = make_music_by_name (ly_symbol2scm ("PercentEvent")); + Music *percent = make_music_by_name (ly_symbol2scm (event_type.c_str ())); percent->set_spot (*mus->origin ()); percent->set_property ("length", length); if (repeats > 1) - percent->set_property ("repeat-count", scm_int2num (i)); - + { + percent->set_property ("repeat-count", scm_from_int (i)); + if (event_type == "RepeatSlashEvent") + percent->set_property ("slash-count", slash_count); + } + child_list = scm_cons (percent->unprotect (), child_list); } - + child_list = scm_cons (child->self_scm (), child_list); return child_list; diff --git a/lily/performance-scheme.cc b/lily/performance-scheme.cc index f69bb7bb62..10a1de6659 100644 --- a/lily/performance-scheme.cc +++ b/lily/performance-scheme.cc @@ -1,9 +1,20 @@ /* - performance-scheme.cc -- implement Performance bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "performance.hh" diff --git a/lily/performance.cc b/lily/performance.cc index 46180d0e5d..bcd8b42c50 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -1,9 +1,20 @@ /* - performance.cc -- implement Performance + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "performance.hh" @@ -23,9 +34,10 @@ using namespace std; #include "string-convert.hh" #include "warn.hh" -Performance::Performance () +Performance::Performance (bool ports) + : midi_ (0) + , ports_ (ports) { - midi_ = 0; } Performance::~Performance () @@ -42,44 +54,17 @@ Performance::output (Midi_stream &midi_stream) const if (be_verbose_global) progress_indication (_ ("Track...") + " "); - int channel = 0; for (vsize i = 0; i < audio_staffs_.size (); i++) { Audio_staff *s = audio_staffs_[i]; if (be_verbose_global) progress_indication ("[" + to_string (i)); - - int midi_channel = s->channel_; - - if (midi_channel < 0) - { - midi_channel = channel; - channel ++; - /* - MIDI players tend to ignore instrument settings on - channel 10, the percussion channel. - */ - if (channel % 16 == 9) - channel ++; - } - - /* - Huh? Why does each staff also have a separate channel? We - should map channels to voices, not staves. --hwn. - */ - if (midi_channel > 15) - { - warning (_ ("MIDI channel wrapped around")); - warning (_ ("remapping modulo 16")); - - midi_channel = midi_channel % 16; - } - - s->output (midi_stream, midi_channel); + s->output (midi_stream, i, ports_); if (be_verbose_global) progress_indication ("]"); } } + void Performance::add_element (Audio_element *p) { diff --git a/lily/performer-group.cc b/lily/performer-group.cc index 1f9e9aee12..70a3f84484 100644 --- a/lily/performer-group.cc +++ b/lily/performer-group.cc @@ -1,10 +1,21 @@ /* - performer-group-performer.cc -- implement Performer_group + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "performer-group.hh" diff --git a/lily/performer.cc b/lily/performer.cc index 357e0df8d1..871367af15 100644 --- a/lily/performer.cc +++ b/lily/performer.cc @@ -1,13 +1,25 @@ /* - performer.cc -- implement Performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "context.hh" +#include "performer.hh" #include "performer-group.hh" #include "warn.hh" @@ -37,3 +49,9 @@ Performer::announce_element (Audio_element_info i) get_daddy_performer ()->announce_element (i); } + +Performer * +unsmob_performer (SCM perf) +{ + return dynamic_cast (unsmob_translator (perf)); +} diff --git a/lily/pfb-scheme.cc b/lily/pfb-scheme.cc index 730442ef05..89666192a3 100644 --- a/lily/pfb-scheme.cc +++ b/lily/pfb-scheme.cc @@ -8,7 +8,8 @@ LY_DEFINE (ly_pfb_2_pfa, "ly:pfb->pfa", 1, 0, 0, (SCM pfb_file_name), - "Convert the contents of a PFB file to PFA.") + "Convert the contents of a Type@tie{}1 font in PFB format" + " to PFA format.") { LY_ASSERT_TYPE (scm_is_string, pfb_file_name, 1); diff --git a/lily/pfb.cc b/lily/pfb.cc index 3d66f3e8a9..ba31e17513 100644 --- a/lily/pfb.cc +++ b/lily/pfb.cc @@ -1,9 +1,20 @@ /* - pfb.cc -- implement pfb conversion. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc index 4cd0c6ee10..839554f7e9 100644 --- a/lily/phrasing-slur-engraver.cc +++ b/lily/phrasing-slur-engraver.cc @@ -1,9 +1,20 @@ /* - phrasing-slur-engraver.cc -- implement Phrasing_slur_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -19,30 +30,32 @@ #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 events_; - Stream_event *running_slur_start_; + vector start_events_; + vector stop_events_; vector slurs_; vector end_slurs_; protected: - void acknowledge_extra_object (Grob_info); + DECLARE_TRANSLATOR_LISTENER (phrasing_slur); DECLARE_ACKNOWLEDGER (accidental); DECLARE_ACKNOWLEDGER (fingering); DECLARE_ACKNOWLEDGER (note_column); @@ -51,33 +64,33 @@ protected: 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 @@ -109,7 +122,7 @@ Phrasing_slur_engraver::acknowledge_fingering (Grob_info info) } void -Phrasing_slur_engraver::acknowledge_text_script (Grob_info info) +Phrasing_slur_engraver::acknowledge_tuplet_number (Grob_info info) { acknowledge_extra_object (info); } @@ -122,13 +135,13 @@ Phrasing_slur_engraver::acknowledge_script (Grob_info 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); } @@ -142,29 +155,57 @@ Phrasing_slur_engraver::acknowledge_slur (Grob_info 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); + } } } @@ -172,7 +213,8 @@ void 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); diff --git a/lily/piano-pedal-align-engraver.cc b/lily/piano-pedal-align-engraver.cc index c82cb7eae1..f5aa652a4a 100644 --- a/lily/piano-pedal-align-engraver.cc +++ b/lily/piano-pedal-align-engraver.cc @@ -1,10 +1,21 @@ -/* - piano-pedal-align-engraver.cc -- implement Piano_pedal_align_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ diff --git a/lily/piano-pedal-bracket.cc b/lily/piano-pedal-bracket.cc index a61474e51b..40ebbaef7d 100644 --- a/lily/piano-pedal-bracket.cc +++ b/lily/piano-pedal-bracket.cc @@ -1,9 +1,20 @@ /* - piano-pedal-bracket.cc -- implement Piano_pedal_bracket + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Han-Wen Nienhuys - (c) 2003--2009 Han-Wen Nienhuys + 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 . */ #include "stencil.hh" diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index fd141ed371..43666efbdd 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -1,13 +1,24 @@ /* - piano-pedal-engraver.cc -- implement Piano_pedal_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Jan Nieuwenhuizen , + Copyright (C) 2000--2011 Jan Nieuwenhuizen , Erik Sandberg Chris Jackson - extended to support bracketed pedals. + + 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 . */ #include "engraver.hh" @@ -157,9 +168,9 @@ init_pedal_types () be careful, as we don't want to loose references to the _sym_ members. */ Pedal_type_info info; - info.event_class_sym_ = scm_str2symbol ((base_ident + "-event").c_str ()); - info.style_sym_ = scm_str2symbol (("pedal" + base_name + "Style").c_str ()); - info.strings_sym_ = scm_str2symbol (("pedal" + base_name + "Strings").c_str ()); + info.event_class_sym_ = scm_from_locale_symbol ((base_ident + "-event").c_str ()); + info.style_sym_ = scm_from_locale_symbol (("pedal" + base_name + "Style").c_str ()); + info.strings_sym_ = scm_from_locale_symbol (("pedal" + base_name + "Strings").c_str ()); info.base_name_ = name; info.pedal_c_str_ = strdup ((base_name + "Pedal").c_str ()); diff --git a/lily/piano-pedal-performer.cc b/lily/piano-pedal-performer.cc index cb5919cabc..cd191d3ea0 100644 --- a/lily/piano-pedal-performer.cc +++ b/lily/piano-pedal-performer.cc @@ -1,9 +1,20 @@ /* - piano-pedal-performer.cc -- implement Piano_pedal_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "performer.hh" @@ -15,7 +26,7 @@ #include "translator.icc" -typedef enum Pedal_type {SOSTENUTO, SUSTAIN, UNA_CORDA, NUM_PEDAL_TYPES}; +enum Pedal_type {SOSTENUTO, SUSTAIN, UNA_CORDA, NUM_PEDAL_TYPES}; /** perform Piano pedals diff --git a/lily/pitch-interval.cc b/lily/pitch-interval.cc index d06d8af713..e92a721ae0 100644 --- a/lily/pitch-interval.cc +++ b/lily/pitch-interval.cc @@ -1,9 +1,20 @@ /* - pitch-interval.cc -- implement Pitch_interval + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "pitch-interval.hh" diff --git a/lily/pitch-scheme.cc b/lily/pitch-scheme.cc index 1ecc247ed1..bc69b633a7 100644 --- a/lily/pitch-scheme.cc +++ b/lily/pitch-scheme.cc @@ -1,9 +1,20 @@ /* - pitch-scheme.cc -- implement scheme functions for Pitch + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "pitch.hh" @@ -157,6 +168,10 @@ LY_DEFINE (ly_set_middle_C_x, "ly:set-middle-C!", Context *c = unsmob_context (context); int clef_pos = robust_scm2int (c->get_property ("middleCClefPosition"), 0); int offset = robust_scm2int (c->get_property ("middleCOffset"), 0); + /* middleCCuePosition overrides the clef! */ + SCM cue_pos = c->get_property ("middleCCuePosition"); + if (scm_is_number (cue_pos)) + clef_pos = robust_scm2int (cue_pos, 0); c->set_property (ly_symbol2scm ("middleCPosition"), scm_from_int (clef_pos + offset)); return SCM_UNDEFINED; diff --git a/lily/pitch-squash-engraver.cc b/lily/pitch-squash-engraver.cc index 764566faab..1ad824ee07 100644 --- a/lily/pitch-squash-engraver.cc +++ b/lily/pitch-squash-engraver.cc @@ -1,9 +1,20 @@ /* - pitch-squash-engraver.cc -- implement Pitch_squash_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/pitch.cc b/lily/pitch.cc index 590d13872f..c87f6f7610 100644 --- a/lily/pitch.cc +++ b/lily/pitch.cc @@ -1,9 +1,20 @@ /* - musical-pitch.cc -- implement Pitch + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "pitch.hh" @@ -45,7 +56,7 @@ Pitch::compare (Pitch const &m1, Pitch const &m2) if (n) return n; if (a) - return a; + return a > (Rational)0; return 0; } @@ -145,7 +156,7 @@ Pitch::to_string () const string s = ::to_string (char (n + 'a')); Rational qtones = alteration_ * Rational (4,1); int qt = int (rint (Real (qtones))); - + s += string (accname[qt + 4]); if (octave_ >= 0) { @@ -277,6 +288,14 @@ Pitch::transposed (Pitch d) const return p; } +Pitch +Pitch::normalized () const +{ + Pitch p = *this; + p.normalize (); + return p; +} + Rational NATURAL_ALTERATION (0); Rational FLAT_ALTERATION (-1, 2); Rational DOUBLE_FLAT_ALTERATION (-1); diff --git a/lily/pitched-trill-engraver.cc b/lily/pitched-trill-engraver.cc index 18482faabd..6960d3e2dd 100644 --- a/lily/pitched-trill-engraver.cc +++ b/lily/pitched-trill-engraver.cc @@ -1,9 +1,20 @@ /* - pitched-trill-engraver.cc -- implement Pitched_trill_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/pointer-group-interface-scheme.cc b/lily/pointer-group-interface-scheme.cc new file mode 100644 index 0000000000..53fe7b2097 --- /dev/null +++ b/lily/pointer-group-interface-scheme.cc @@ -0,0 +1,36 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Han-Wen Nienhuys + + 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 . +*/ + +#include "pointer-group-interface.hh" +#include "grob.hh" + +LY_DEFINE (ly_pointer_group_interface__add_grob, "ly:pointer-group-interface::add-grob", + 3, 0, 0, (SCM grob, SCM sym, SCM grob_element), + "Add @var{grob-element} to @var{grob}'s @var{sym} grob array.") +{ + LY_ASSERT_TYPE (unsmob_grob, grob, 1); + LY_ASSERT_TYPE (ly_is_symbol, sym, 2); + LY_ASSERT_TYPE (unsmob_grob, grob_element, 3); + + Pointer_group_interface::add_grob (unsmob_grob (grob), + sym, + unsmob_grob (grob_element)); + return SCM_UNSPECIFIED; +} + diff --git a/lily/pointer-group-interface.cc b/lily/pointer-group-interface.cc index a8ebb09ffc..78c4166d73 100644 --- a/lily/pointer-group-interface.cc +++ b/lily/pointer-group-interface.cc @@ -1,9 +1,20 @@ /* - pointer-group-interface.cc -- implement Pointer_group_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "pointer-group-interface.hh" diff --git a/lily/prob-scheme.cc b/lily/prob-scheme.cc index cc74f8ada1..57881112d4 100644 --- a/lily/prob-scheme.cc +++ b/lily/prob-scheme.cc @@ -1,9 +1,20 @@ /* - paper-system-scheme.cc -- implement Prob bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "prob.hh" @@ -25,25 +36,27 @@ LY_DEFINE (ly_prob_set_property_x, "ly:prob-set-property!", */ LY_DEFINE (ly_prob_property_p, "ly:prob-property?", 2, 1, 0, (SCM obj, SCM sym), - "Is boolean prop @var{sym} set?") + "Is boolean prop @var{sym} of @var{sym} set?") { return scm_equal_p (SCM_BOOL_T, ly_prob_property (obj, sym, SCM_BOOL_F)); } LY_DEFINE (ly_prob_property, "ly:prob-property", - 2, 1, 0, (SCM obj, SCM sym, SCM dfault), - "Return the value for @var{sym}.") + 2, 1, 0, (SCM prob, SCM sym, SCM val), + "Return the value for property @var{sym} of Prob object" + " @var{prob}. If no value is found, return @var{val} or" + " @code{'()} if @var{val} is not specified.") { - LY_ASSERT_SMOB (Prob, obj, 1); - Prob *ps = unsmob_prob (obj); + LY_ASSERT_SMOB (Prob, prob, 1); + Prob *ps = unsmob_prob (prob); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); - if (dfault == SCM_UNDEFINED) - dfault = SCM_EOL; + if (val == SCM_UNDEFINED) + val = SCM_EOL; SCM retval = ps->internal_get_property (sym); if (retval == SCM_EOL) - return dfault; + return val; else return retval; } @@ -90,7 +103,7 @@ LY_DEFINE (ly_prob_mutable_properties, "ly:prob-mutable-properties", LY_DEFINE (ly_prob_immutable_properties, "ly:prob-immutable-properties", 1, 0, 0, (SCM prob), - "Retrieve an alist of mutable properties.") + "Retrieve an alist of immutable properties.") { LY_ASSERT_SMOB (Prob, prob, 1); Prob *ps = unsmob_prob (prob); diff --git a/lily/prob.cc b/lily/prob.cc index 4d11d193f1..233c5b6d5f 100644 --- a/lily/prob.cc +++ b/lily/prob.cc @@ -1,9 +1,20 @@ /* - prob.cc -- implement Prob + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Jan Nieuwenhuizen - (c) 2004--2009 Jan Nieuwenhuizen + 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 . */ #include "prob.hh" @@ -24,7 +35,7 @@ Prob::equal_p (SCM sa, SCM sb) constructor preserve equality. Perhaps it would be better to use a more strict definition of - equality; e.g., that that two probs are equal iff they can be + equality; e.g., that two probs are equal iff they can be distinguished by calls to ly:prob-property. */ Prob *probs[2] = {unsmob_prob (sa), unsmob_prob (sb)}; @@ -55,7 +66,7 @@ Prob::equal_p (SCM sa, SCM sb) if (scm_caar (aprop) != scm_caar (bprop) || ( !(unsmob_input (aval) && unsmob_input (bval)) - && + && !to_boolean (scm_equal_p (aval, bval)))) return SCM_BOOL_F; } @@ -112,11 +123,11 @@ SCM Prob::mark_smob (SCM smob) { ASSERT_LIVE_IS_ALLOWED (); - + Prob *system = (Prob *) SCM_CELL_WORD_1 (smob); scm_gc_mark (system->mutable_property_alist_); system->derived_mark (); - + return system->immutable_property_alist_; } @@ -131,7 +142,7 @@ Prob::print_smob (SCM smob, SCM port, scm_print_state*) scm_puts (p->class_name (), port); scm_display (p->mutable_property_alist_, port); scm_display (p->immutable_property_alist_, port); - + scm_puts (" >\n", port); return 1; } @@ -165,11 +176,11 @@ Prob::instrumented_set_property (SCM sym, SCM val, const char*, int, const char* } void -Prob::internal_set_property (SCM sym, SCM val) +Prob::internal_set_property (SCM sym, SCM val) { if (do_internal_type_checking_global) type_check_assignment (sym, val); - + mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, sym, val); } diff --git a/lily/profile.cc b/lily/profile.cc index 856060e8bf..4a1c0b08f9 100644 --- a/lily/profile.cc +++ b/lily/profile.cc @@ -1,9 +1,20 @@ /* - profile.cc -- implement profiling utilities. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "profile.hh" diff --git a/lily/program-option-scheme.cc b/lily/program-option-scheme.cc index 1e03c5f951..63266566ac 100644 --- a/lily/program-option-scheme.cc +++ b/lily/program-option-scheme.cc @@ -1,9 +1,20 @@ /* - program-option-scheme.cc -- implement option setting from Scheme + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "program-option.hh" @@ -23,6 +34,7 @@ bool debug_skylines; bool debug_property_callbacks; bool debug_page_breaking_scoring; +bool music_strings_to_paths; bool relative_includes; /* @@ -113,6 +125,13 @@ internal_set_option (SCM var, relative_includes = to_boolean (val); val = scm_from_bool (to_boolean (val)); } + else if (var == ly_symbol2scm ("warning-as-error")) + val = scm_from_bool (to_boolean (val)); + else if (var == ly_symbol2scm ("music-strings-to-paths")) + { + music_strings_to_paths = to_boolean (val); + val = scm_from_bool (to_boolean (val)); + } scm_hashq_set_x (option_hash, var, val); } @@ -181,7 +200,8 @@ LY_DEFINE (ly_option_usage, "ly:option-usage", 0, 0, 0, (), LY_DEFINE (ly_add_option, "ly:add-option", 3, 0, 0, (SCM sym, SCM val, SCM description), - "Add a program option @var{sym} with default @var{val}.") + "Add a program option @var{sym}. @var{val} is the default" + " value and @var{description} is a string description.") { if (!option_hash) option_hash = scm_permanent_object (scm_c_make_hash_table (11)); diff --git a/lily/program-option.cc b/lily/program-option.cc index 81f2d5ab6d..8155025ee4 100644 --- a/lily/program-option.cc +++ b/lily/program-option.cc @@ -1,10 +1,21 @@ -/* - program-option.cc -- program options, non-scheme. - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #include "program-option.hh" diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index d4fa5749c6..62f316b7f1 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -1,9 +1,20 @@ /* - property-iterator.cc -- implement Property_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "property-iterator.hh" diff --git a/lily/protected-scm.cc b/lily/protected-scm.cc index 3a8b19a9d0..4447371a83 100644 --- a/lily/protected-scm.cc +++ b/lily/protected-scm.cc @@ -1,9 +1,20 @@ /* - protected-scm.cc -- implement Protected_scm + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "protected-scm.hh" diff --git a/lily/quote-iterator.cc b/lily/quote-iterator.cc index 58d4378d25..749bc13407 100644 --- a/lily/quote-iterator.cc +++ b/lily/quote-iterator.cc @@ -1,9 +1,20 @@ /* - quote-iterator.cc -- implement Quote_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "music-wrapper-iterator.hh" @@ -34,7 +45,7 @@ public: DECLARE_SCHEME_CALLBACK (constructor, ()); bool quote_ok () const; - bool accept_music_type (Stream_event *) const; + bool accept_music_type (Stream_event *, bool is_cue = true) const; protected: virtual void derived_mark () const; @@ -53,10 +64,17 @@ Quote_iterator::do_quit () } bool -Quote_iterator::accept_music_type (Stream_event *ev) const +Quote_iterator::accept_music_type (Stream_event *ev, bool is_cue) const { - for (SCM accept = get_outlet ()->get_property ("quotedEventTypes"); - scm_is_pair (accept); accept = scm_cdr (accept)) + SCM accept = SCM_EOL; + // Cue notes use the quotedCueEventTypes property, otherwise (and as fallback + // for cue notes if quotedCueEventTypes is not set) use quotedEventTypes + if (is_cue) + accept = get_outlet ()->get_property ("quotedCueEventTypes"); + if (accept == SCM_EOL) + accept = get_outlet ()->get_property ("quotedEventTypes"); + + for (; scm_is_pair (accept); accept = scm_cdr (accept)) { if (ev->internal_in_event_class (scm_car (accept))) return true; @@ -224,6 +242,8 @@ Quote_iterator::process (Moment m) Pitch *me_pitch = unsmob_pitch (get_music ()->get_property ("quoted-transposition")); if (!me_pitch) me_pitch = unsmob_pitch (get_outlet ()->get_property ("instrumentTransposition")); + SCM cid = get_music ()->get_property ("quoted-context-id"); + bool is_cue = scm_is_string (cid) && (ly_scm2string (cid) == "cue"); for (SCM s = scm_cdr (entry); scm_is_pair (s); s = scm_cdr (s)) { @@ -232,7 +252,7 @@ Quote_iterator::process (Moment m) Stream_event *ev = unsmob_stream_event (scm_car (ev_acc)); if (!ev) programming_error ("no music found in quote"); - else if (accept_music_type (ev)) + else if (accept_music_type (ev, is_cue)) { /* create a transposed copy if necessary */ if (quote_pitch || me_pitch) diff --git a/lily/relative-octave-check.cc b/lily/relative-octave-check.cc index e2ed2e6e04..bb597f97cb 100644 --- a/lily/relative-octave-check.cc +++ b/lily/relative-octave-check.cc @@ -1,9 +1,20 @@ /* - relative-octave-check.cc -- implement Relative_octave_check + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "input.hh" diff --git a/lily/relative-octave-music.cc b/lily/relative-octave-music.cc index cbd7969fed..6c23ac3ed7 100644 --- a/lily/relative-octave-music.cc +++ b/lily/relative-octave-music.cc @@ -1,9 +1,20 @@ /* - relative-music.cc -- implement Relative_octave_music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "music.hh" diff --git a/lily/relocate.cc b/lily/relocate.cc index 25e1daa244..628187363b 100644 --- a/lily/relocate.cc +++ b/lily/relocate.cc @@ -1,10 +1,20 @@ /* - relocate.cc -- implement relocation based on argv0 + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "relocate.hh" @@ -191,17 +201,18 @@ setup_paths (char const *argv0_ptr) File_path path; path.parse_path (getenv ("PATH")); - if (be_verbose_global) - warning (_f ("Relocation: from PATH=%s\nargv0=%s", - path.to_string ().c_str (), argv0_ptr)); - #ifndef __MINGW32__ argv0_abs = path.find (argv0_filename.to_string ()); #else /* __MINGW32__ */ + path.prepend (get_working_directory ()); char const *ext[] = {"exe", "", 0 }; argv0_abs = path.find (argv0_filename.to_string (), ext); #endif /* __MINGW32__ */ + if (be_verbose_global) + warning (_f ("Relocation: from PATH=%s\nargv0=%s", + path.to_string ().c_str (), argv0_ptr)); + if (argv0_abs.empty ()) programming_error ("cannot find absolute argv0"); } diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index 4e4b91e3a2..ed2f41fcf0 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -1,9 +1,20 @@ /* - repeat-acknowledge-engraver.cc -- implement Repeat_acknowledge_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/repeat-tie-engraver.cc b/lily/repeat-tie-engraver.cc index 4766cb8186..b2d5d6134e 100644 --- a/lily/repeat-tie-engraver.cc +++ b/lily/repeat-tie-engraver.cc @@ -1,10 +1,21 @@ /* - repeat-tie-engraver.cc -- implement Repeat_tie_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc index 7a004c8263..581b1ac17a 100644 --- a/lily/repeated-music.cc +++ b/lily/repeated-music.cc @@ -1,9 +1,20 @@ /* - repeated-music.cc -- implement Repeated_music + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "repeated-music.hh" diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 4720368c90..d1f1640cf3 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -1,9 +1,20 @@ /* - rest-collision-engraver.cc -- implement Rest_collision_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index 6448492b8f..8be91e3f23 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -1,9 +1,20 @@ /* - rest-collision.cc -- implement Rest_collision + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "rest-collision.hh" @@ -25,23 +36,6 @@ using namespace std; #include "grob.hh" #include "warn.hh" -MAKE_SCHEME_CALLBACK (Rest_collision, force_shift_callback, 1); -SCM -Rest_collision::force_shift_callback (SCM smob) -{ - Grob *them = unsmob_grob (smob); - if (Note_column::has_rests (them)) - { - Grob *collision = unsmob_grob (them->get_object ("rest-collision")); - - if (collision) - { - (void) collision->get_property ("positioning-done"); - } - } - return scm_from_double (0.0); -} - MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Rest_collision, force_shift_callback_rest, 2, 1, ""); SCM Rest_collision::force_shift_callback_rest (SCM rest, SCM offset) @@ -56,8 +50,13 @@ Rest_collision::force_shift_callback_rest (SCM rest, SCM offset) if (scm_is_number (offset)) rest_grob->translate_axis (scm_to_double (offset), Y_AXIS); - if (Note_column::has_interface (parent)) - force_shift_callback (parent->self_scm ()); + if (Note_column::has_interface (parent) && Note_column::has_rests (parent)) + { + Grob *collision = unsmob_grob (parent->get_object ("rest-collision")); + + if (collision) + (void) collision->get_property ("positioning-done"); + } return scm_from_double (0.0); } @@ -67,13 +66,6 @@ Rest_collision::add_column (Grob *me, Grob *p) { Pointer_group_interface::add_grob (me, ly_symbol2scm ("elements"), p); - /* - only add callback for the rests, since we don't move anything - else. - - (not?) - */ - add_offset_callback (p, Rest_collision::force_shift_callback_proc, Y_AXIS); p->set_object ("rest-collision", me->self_scm ()); Grob *rest = unsmob_grob (p->get_object ("rest")); @@ -84,6 +76,14 @@ Rest_collision::add_column (Grob *me, Grob *p) } } +static bool +rest_shift_less (Grob *const &r1, Grob *const &r2) +{ + Grob *col1 = r1->get_parent (X_AXIS); + Grob *col2 = r2->get_parent (X_AXIS); + return Note_column::shift_less (col1, col2); +} + /* TODO: look at horizontal-shift to determine ordering between rests for more than two voices. @@ -141,14 +141,14 @@ Rest_collision::calc_positioning_done (SCM smob) Direction d = get_grob_direction (r); if (d) - ordered_rests[d].push_back (rests[i]); + ordered_rests[d].push_back (r); else rests[d]->warning (_ ("cannot resolve rest collision: rest direction not set")); } Direction d = LEFT; do - vector_sort (ordered_rests[d], Note_column::shift_less); + vector_sort (ordered_rests[d], rest_shift_less); while (flip (&d) != LEFT) ; @@ -175,23 +175,23 @@ Rest_collision::calc_positioning_done (SCM smob) { int amount_down = (int) ceil (diff / 2); diff -= amount_down; - Note_column::translate_rests (ordered_rests[DOWN].back (), - -2 * amount_down); + Rest::translate (ordered_rests[DOWN].back (), + -2 * amount_down); if (diff > 0) - Note_column::translate_rests (ordered_rests[UP].back (), - 2 * int (ceil (diff))); + Rest::translate (ordered_rests[UP].back (), + 2 * int (ceil (diff))); } do { - for (vsize i = ordered_rests[d].size () -1; i-- > 0;) + for (vsize i = ordered_rests[d].size () - 1; i-- > 0;) { Real last_y = ordered_rests[d][i + 1]->extent (common, Y_AXIS)[d]; Real y = ordered_rests[d][i]->extent (common, Y_AXIS)[-d]; Real diff = d * ((last_y - y) / staff_space); if (diff > 0) - Note_column::translate_rests (ordered_rests[d][i], d * (int) ceil (diff) * 2); + Rest::translate (ordered_rests[d][i], d * (int) ceil (diff) * 2); } } while (flip (&d) != LEFT); @@ -201,83 +201,86 @@ Rest_collision::calc_positioning_done (SCM smob) /* Rests and notes. */ - if (rests.size () > 1) - warning (_ ("too many colliding rests")); - Grob *rcol = 0; - Direction dir = CENTER; - - for (vsize i = rests.size (); !rcol && i--;) - if (Note_column::dir (rests[i])) - { - rcol = rests[i]; - dir = Note_column::dir (rcol); - } - - if (!rcol) - return SCM_BOOL_T; - - Grob *rest = Note_column::get_rest (rcol); - Grob *common = common_refpoint_of_array (notes, rcol, Y_AXIS); + // Count how many rests we move + Drul_array rcount (0, 0); - Interval restdim = rcol->extent (common, Y_AXIS); - if (restdim.is_empty ()) - return SCM_BOOL_T; - - Real staff_space = Staff_symbol_referencer::staff_space (rcol); - Real minimum_dist = robust_scm2double (me->get_property ("minimum-distance"), 1.0) * staff_space; - - Interval notedim; - for (vsize i = 0; i < notes.size (); i++) + for (vsize i = 0; i < rests.size (); i++) { - if (Note_column::dir (notes[i]) == -dir - // If the note has already happened (but it has a long duration, so there is a collision), - // don't look at the stem. If we do, the rest gets shifted down a lot and it looks bad. - || dynamic_cast (notes[i])->get_column () != dynamic_cast (rest)->get_column ()) + Grob *rcol = rests[i]; + Direction dir = Note_column::dir (rcol); + if (!dir) + continue; + + Grob *rest = Note_column::get_rest (rcol); + // Do not compute a translation for pre-positioned rests, + // nor count them for the "too many colliding rests" warning + if (scm_is_number (rest->get_property ("staff-position"))) + continue; + + Grob *common = common_refpoint_of_array (notes, rcol, Y_AXIS); + Interval restdim = rest->extent (common, Y_AXIS); + if (restdim.is_empty ()) + continue; + + Real staff_space = Staff_symbol_referencer::staff_space (rcol); + Real minimum_dist = robust_scm2double (me->get_property ("minimum-distance"), 1.0) * staff_space; + + Interval notedim; + for (vsize i = 0; i < notes.size (); i++) { - /* try not to look at the stem, as looking at a beamed - note may trigger beam positioning prematurely. - - This happens with dotted rests, which need Y - positioning to compute X-positioning. - */ - Grob *head = Note_column::first_head (notes[i]); - if (head) - notedim.unite (head->extent (common, Y_AXIS)); + if (Note_column::dir (notes[i]) == -dir + // If the note has already happened (but it has a long + // duration, so there is a collision), don't look at the stem. + // If we do, the rest gets shifted down a lot and it looks bad. + || dynamic_cast (notes[i])->get_column () != dynamic_cast (rest)->get_column ()) + { + /* try not to look at the stem, as looking at a beamed + note may trigger beam positioning prematurely. + + This happens with dotted rests, which need Y + positioning to compute X-positioning. + */ + Grob *head = Note_column::first_head (notes[i]); + if (head) + notedim.unite (head->extent (common, Y_AXIS)); + else + programming_error ("Note_column without first_head()"); + } else - programming_error ("Note_column without first_head()"); + notedim.unite (notes[i]->extent (common, Y_AXIS)); } - else - notedim.unite (notes[i]->extent (common, Y_AXIS)); - } - Real y = dir * max (0.0, - -dir * restdim[-dir] + dir * notedim[dir] + minimum_dist); - - int stafflines = Staff_symbol_referencer::line_count (me); - if (!stafflines) - { - programming_error ("no staff line count"); - stafflines = 5; - } + Real y = dir * max (0.0, + -dir * restdim[-dir] + dir * notedim[dir] + minimum_dist); - // move discretely by half spaces. - int discrete_y = dir * int (ceil (y / (0.5 * dir * staff_space))); + int stafflines = Staff_symbol_referencer::line_count (me); + if (!stafflines) + { + programming_error ("no staff line count"); + stafflines = 5; + } - // move by whole spaces inside the staff. - if (fabs (Staff_symbol_referencer::get_position (rest) - + discrete_y) < stafflines + 1) - { - discrete_y = dir * int (ceil (dir * discrete_y / 2.0) * 2.0); - } + // move discretely by half spaces. + int discrete_y = dir * int (ceil (y / (0.5 * dir * staff_space))); - Note_column::translate_rests (rcol, discrete_y); + // move by whole spaces inside the staff. + if (fabs (Staff_symbol_referencer::get_position (rest) + + discrete_y) < stafflines + 1) + { + discrete_y = dir * int (ceil (dir * discrete_y / 2.0) * 2.0); + } + + Rest::translate (rest, discrete_y); + if (rcount[dir]++) + rest->warning (_ ("too many colliding rests")); + } } return SCM_BOOL_T; } ADD_INTERFACE (Rest_collision, - "Move around ordinary rests (not multi-measure-rests) to avoid" - " conflicts.", + "Move ordinary rests (not multi-measure nor pitched rests)" + " to avoid conflicts.", /* properties */ "minimum-distance " diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index 12d1f84a2e..8a5622ce46 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -1,9 +1,20 @@ /* - rest-engraver.cc -- implement Rest_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/rest.cc b/lily/rest.cc index 7fd5101d84..9b85523f80 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -1,9 +1,20 @@ /* - rest.cc -- implement Rest + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "rest.hh" @@ -150,6 +161,21 @@ Rest::brew_internal_stencil (Grob *me, bool ledgered) return out.smobbed_copy (); } +/** + translate the rest vertically by amount DY, but only if + it doesn't have staff-position set. +*/ +void +Rest::translate (Grob *me, int dy) +{ + if (!scm_is_number (me->get_property ("staff-position"))) + { + me->translate_axis (dy * Staff_symbol_referencer::staff_space (me) / 2.0, Y_AXIS); + Grob *p = me->get_parent (Y_AXIS); + p->flush_extent_cache (Y_AXIS); + } +} + SCM Rest::print (SCM smob) { diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index fa45a95ff3..9768cafcab 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -1,9 +1,20 @@ /* - rhythmic-column-engraver.cc -- implement Rhythmic_column_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/rhythmic-head.cc b/lily/rhythmic-head.cc index 659ba339b7..adeb4a871c 100644 --- a/lily/rhythmic-head.cc +++ b/lily/rhythmic-head.cc @@ -1,9 +1,20 @@ /* - rhythmic-head.cc -- implement Rhythmic_head + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "rhythmic-head.hh" diff --git a/lily/rod.cc b/lily/rod.cc index be04a669ab..1198dee36f 100644 --- a/lily/rod.cc +++ b/lily/rod.cc @@ -1,9 +1,20 @@ /* - rod.cc -- implement Rod, Column_rod + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "rod.hh" diff --git a/lily/scale.cc b/lily/scale.cc index c1f9a81f05..5de25f5c43 100644 --- a/lily/scale.cc +++ b/lily/scale.cc @@ -1,11 +1,22 @@ -/* - scale.cc -- implement Scale - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys 2007--2008 Rune Zedeler 2008 Joe Neeman + + 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 . */ #include "scale.hh" diff --git a/lily/scheme-engraver.cc b/lily/scheme-engraver.cc new file mode 100644 index 0000000000..22774f3952 --- /dev/null +++ b/lily/scheme-engraver.cc @@ -0,0 +1,256 @@ +/* + scheme-engraver.cc -- implement Scheme_engraver + + source file of the GNU LilyPond music typesetter + + Copyright (c) 2009--2011 Han-Wen Nienhuys + + 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 . +*/ + +#include "scheme-engraver.hh" + +#include "grob.hh" + +#include "translator.icc" + +Scheme_engraver::Scheme_engraver () +{ + stop_translation_timestep_function_ = SCM_EOL; + start_translation_timestep_function_ = SCM_EOL; + process_music_function_ = SCM_EOL; + process_acknowledged_function_ = SCM_EOL; + initialize_function_ = SCM_EOL; + finalize_function_ = SCM_EOL; + listeners_alist_ = SCM_EOL; + + interface_acknowledger_hash_ = SCM_EOL; + interface_end_acknowledger_hash_ = SCM_EOL; + + must_be_last_ = false; + per_instance_listeners_ = 0; +} + +Scheme_engraver::~Scheme_engraver () +{ + translator_listener_record *next = 0; + for (translator_listener_record *r = per_instance_listeners_; + r; r = next) + { + next = r->next_; + delete r; + } +} + +// Extracts the value if callable, if not return #f. +static SCM +callable (SCM symbol, SCM defn) +{ + SCM val = ly_assoc_get (symbol, defn, SCM_BOOL_F); + return ly_is_procedure (val) ? val : SCM_BOOL_F; +} + +bool +Scheme_engraver::must_be_last () const +{ + return must_be_last_; +} + +void +Scheme_engraver::init_from_scheme (SCM definition) +{ + start_translation_timestep_function_ = callable (ly_symbol2scm ("start-translation-timestep"), + definition); + stop_translation_timestep_function_ = callable (ly_symbol2scm ("stop-translation-timestep"), + definition); + process_music_function_ = callable (ly_symbol2scm ("process-music"), definition); + process_acknowledged_function_ = callable (ly_symbol2scm ("process-acknowledged"), + definition); + initialize_function_ = callable (ly_symbol2scm ("initialize"), definition); + finalize_function_ = callable (ly_symbol2scm ("finalize"), definition); + + SCM listeners = ly_assoc_get (ly_symbol2scm ("listeners"), definition, SCM_EOL); + + listeners_alist_ = SCM_EOL; + + must_be_last_ = to_boolean (ly_assoc_get (ly_symbol2scm ("must-be-last"), + definition, + SCM_BOOL_F)); + + translator_listener_record **tail = &per_instance_listeners_; + for (SCM p = listeners; scm_is_pair (p); p = scm_cdr (p)) + { + SCM event_class = scm_caar (p); + SCM proc = scm_cdar (p); + + if (!(ly_is_procedure (proc) && ly_is_symbol (event_class))) + continue; + + // We should check the arity of the function? + + // Record for later lookup. + listeners_alist_ = scm_acons (event_class, proc, listeners_alist_); + + translator_listener_record *rec = new translator_listener_record; + *tail = rec; + rec->event_class_ = event_class; + rec->get_listener_ = &Scheme_engraver::get_listener; + tail = &rec->next_; + } + + init_acknowledgers (ly_assoc_get(ly_symbol2scm ("acknowledgers"), + definition, SCM_EOL), + &interface_acknowledger_hash_); + + init_acknowledgers (ly_assoc_get(ly_symbol2scm ("end-acknowledgers"), + definition, SCM_EOL), + &interface_end_acknowledger_hash_); + + // TODO: hook up description, props read/written, grobs created + // etc. to provide automatic documentation. +} + +void +Scheme_engraver::init_acknowledgers (SCM alist, + SCM *hash) +{ + *hash = scm_c_make_hash_table(7); + for (SCM p = alist; scm_is_pair (p); p = scm_cdr (p)) + { + SCM iface = scm_caar (p); + SCM proc = scm_cdar (p); + + if (!(ly_is_procedure (proc) && ly_is_symbol (iface))) + continue; + + scm_hashq_set_x (*hash, iface, proc); + } +} + +// This is the easy way to do it, at the cost of too many invocations +// of Scheme_engraver::acknowledge_grob. The clever dispatching of +// acknowledgers is hardwired to have 1 method per engraver per +// grob-type, which doesn't work for this case. +void +Scheme_engraver::acknowledge_grob (Grob_info info) +{ + acknowledge_grob_by_hash (info, interface_acknowledger_hash_); +} + +void +Scheme_engraver::acknowledge_end_grob (Grob_info info) +{ + acknowledge_grob_by_hash (info, interface_end_acknowledger_hash_); +} + +void +Scheme_engraver::acknowledge_grob_by_hash (Grob_info info, + SCM iface_function_hash) +{ + SCM meta = info.grob ()->internal_get_property (ly_symbol2scm ("meta")); + SCM ifaces = scm_cdr (scm_assoc (ly_symbol2scm ("interfaces"), meta)); + for (SCM s = ifaces; scm_is_pair (s); s = scm_cdr (s)) + { + SCM func = scm_hashq_ref (iface_function_hash, + scm_car (s), SCM_BOOL_F); + + if (ly_is_procedure (func)) + scm_call_3 (func, self_scm (), info.grob ()->self_scm (), + info.origin_translator ()->self_scm ()); + } +} + +static +void call_listen_closure (void *target, SCM ev) +{ + SCM cl = (SCM) target; + SCM func = scm_car (cl); + SCM engraver = scm_cdr (cl); + scm_call_2 (func, engraver, ev); +} + +static +void mark_listen_closure (void *target) +{ + scm_gc_mark ((SCM)target); +} + +Listener_function_table listen_closure = { + call_listen_closure, mark_listen_closure +}; + +/* static */ +Listener +Scheme_engraver::get_listener (void *arg, SCM name) +{ + Scheme_engraver *me = (Scheme_engraver*) arg; + SCM func = ly_assoc_get (name, me->listeners_alist_, SCM_BOOL_F); + assert (ly_is_procedure (func)); + + SCM closure = scm_cons (func, me->self_scm()); + return Listener((void*)closure, &listen_closure); +} + +translator_listener_record * +Scheme_engraver::get_listener_list () const +{ + return per_instance_listeners_; +} + +#define DISPATCH(what) \ + void \ + Scheme_engraver::what () \ + { \ + if (what ## _function_ != SCM_BOOL_F) \ + scm_call_1 (what ## _function_, self_scm ()); \ + } + +DISPATCH(start_translation_timestep); +DISPATCH(stop_translation_timestep); +DISPATCH(initialize); +DISPATCH(finalize); +DISPATCH(process_music); +DISPATCH(process_acknowledged); + +void +Scheme_engraver::derived_mark () const +{ + scm_gc_mark (start_translation_timestep_function_); + scm_gc_mark (stop_translation_timestep_function_); + scm_gc_mark (initialize_function_); + scm_gc_mark (finalize_function_); + scm_gc_mark (process_music_function_); + scm_gc_mark (process_acknowledged_function_); + scm_gc_mark (listeners_alist_); + scm_gc_mark (interface_acknowledger_hash_); + scm_gc_mark (interface_end_acknowledger_hash_); +} + +ADD_ACKNOWLEDGER (Scheme_engraver, grob); +ADD_END_ACKNOWLEDGER (Scheme_engraver, grob); + +ADD_TRANSLATOR (Scheme_engraver, + /* doc */ + "Implement engravers in Scheme. Interprets arguments to" + " @code{\\consists} as callbacks.", + + /* create */ + "", + + /* read */ + "", + + /* write */ + "" + ); diff --git a/lily/scheme-listener-scheme.cc b/lily/scheme-listener-scheme.cc index 7b4f6991a3..436d595ed0 100644 --- a/lily/scheme-listener-scheme.cc +++ b/lily/scheme-listener-scheme.cc @@ -1,9 +1,20 @@ /* - scheme-listener-scheme.cc -- Connect listeners to Scheme through Scheme_listener + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Erik Sandberg - (c) 2006--2009 Erik Sandberg + 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 . */ #include "scheme-listener.hh" diff --git a/lily/scheme-listener.cc b/lily/scheme-listener.cc index 15ef78e9d2..52efdbe541 100644 --- a/lily/scheme-listener.cc +++ b/lily/scheme-listener.cc @@ -1,9 +1,20 @@ /* - scheme-listener.cc -- Implement Scheme_listener + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Erik Sandberg - (c) 2006--2009 Erik Sandberg + 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 . */ #include "scheme-listener.hh" diff --git a/lily/scm-hash.cc b/lily/scm-hash.cc index 4013af3279..858aff52ed 100644 --- a/lily/scm-hash.cc +++ b/lily/scm-hash.cc @@ -1,9 +1,20 @@ /* - scm-hash.cc -- implement Scheme_hash_table + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "scm-hash.hh" @@ -28,7 +39,8 @@ copy_handle (void *closure, SCM handle) static void copy_scm_hashes (SCM dest, SCM src) { - scm_internal_hash_for_each_handle ( (SCM (*)(GUILE_ELLIPSIS)) ©_handle, dest, src); + scm_internal_hash_for_each_handle ((scm_t_hash_handle_fn) ©_handle, + dest, src); } Scheme_hash_table::Scheme_hash_table () @@ -131,7 +143,8 @@ collect_handles (void * /* closure */, SCM Scheme_hash_table::to_alist () const { - return scm_internal_hash_fold ((SCM (*)(GUILE_ELLIPSIS)) &collect_handles, NULL, SCM_EOL, hash_tab_); + return scm_internal_hash_fold ((scm_t_hash_fold_fn) &collect_handles, + NULL, SCM_EOL, hash_tab_); } IMPLEMENT_SMOBS (Scheme_hash_table); diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index eff35efed4..ade345e6d0 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -1,9 +1,20 @@ /* - score-engraver.cc -- implement Score_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "score-engraver.hh" @@ -189,8 +200,7 @@ ADD_TRANSLATOR_GROUP (Score_engraver, /* read */ "currentMusicalColumn " - "currentCommandColumn " - "verticallySpacedContexts ", + "currentCommandColumn ", /* write */ "" diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 9e5db10e88..5257788df6 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -1,9 +1,20 @@ /* - score-performer.cc -- implement Score_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Jan Nieuwenhuizen - (c) 1996--2009 Jan Nieuwenhuizen + 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 . */ #include "score-performer.hh" @@ -108,6 +119,9 @@ IMPLEMENT_LISTENER (Score_performer, finish); void Score_performer::finish (SCM) { + SCM channel_mapping = context ()->get_property ("midiChannelMapping"); + bool use_ports = channel_mapping == ly_symbol2scm ("voice"); + performance_->ports_ = use_ports; recurse_over_translators (context (), &Translator::finalize, &Translator_group::finalize, diff --git a/lily/score-scheme.cc b/lily/score-scheme.cc index c3cf122411..f3afd1429b 100644 --- a/lily/score-scheme.cc +++ b/lily/score-scheme.cc @@ -1,9 +1,20 @@ /* - score-scheme.cc -- implement Score bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "score.hh" @@ -18,7 +29,7 @@ LY_DEFINE (ly_make_score, "ly:make-score", 1, 0, 0, (SCM music), - "Return score with @var{music} encapsulated in @var{score}.") + "Return score with @var{music} encapsulated in it.") { LY_ASSERT_SMOB (Music, music, 1); @@ -62,7 +73,6 @@ LY_DEFINE (ly_score_header, "ly:score-header", return sc->get_header (); } - LY_DEFINE (ly_score_set_header_x, "ly:score-set-header!", 2, 0, 0, (SCM score, SCM module), "Set the score header.") @@ -70,13 +80,12 @@ LY_DEFINE (ly_score_set_header_x, "ly:score-set-header!", LY_ASSERT_SMOB (Score, score, 1); SCM_ASSERT_TYPE (ly_is_module (module), module, SCM_ARG2, __FUNCTION__, "module"); - + Score *sc = unsmob_score (score); sc->set_header (module); return SCM_UNSPECIFIED; } - LY_DEFINE (ly_score_music, "ly:score-music", 1, 0, 0, (SCM score), "Return score music.") @@ -99,8 +108,7 @@ LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format", 2, 0, 0, (SCM score, SCM layout), "Run @var{score} through @var{layout} (an output definition)" " scaled to correct output-scale already, returning a list of" - " layout-lines. This function takes an optional" - " @code{Object_key} argument.") + " layout-lines.") { LY_ASSERT_SMOB (Score, score, 1); LY_ASSERT_SMOB (Output_def, layout, 2); diff --git a/lily/score.cc b/lily/score.cc index ac79dd103f..c3125df5ad 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -1,9 +1,20 @@ /* - score.cc -- implement Score + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "score.hh" @@ -83,7 +94,7 @@ Score::Score (Score const &s) error_found_ = s.error_found_; smobify_self (); - input_location_ = make_input (*s.origin ()); + input_location_ = make_input (*s.origin ()); Music *m = unsmob_music (s.music_); if (m) @@ -100,7 +111,7 @@ Score::Score (Score const &s) defs_.push_back (copy); copy->unprotect (); } - header_ = ly_make_anonymous_module (false); + header_ = ly_make_module (false); if (ly_is_module (s.header_)) ly_module_copy (header_, s.header_); } diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc index c7d623185d..a5be1ef660 100644 --- a/lily/script-column-engraver.cc +++ b/lily/script-column-engraver.cc @@ -1,9 +1,20 @@ /* - script-column-engraver.cc -- implement Script_column_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/script-column.cc b/lily/script-column.cc index b3371e9fd5..b9c9e178f4 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -1,9 +1,20 @@ /* - script-column.cc -- implement Script_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "script-column.hh" @@ -66,7 +77,7 @@ Script_column::row_before_line_breaking (SCM smob) affect_all_grobs.push_back (sc); } else if (sc->get_property_data ("Y-offset") != - Side_position_interface::x_aligned_side_proc) + Side_position_interface::y_aligned_side_proc) { head_scripts_map[sc->get_parent (Y_AXIS)].push_back (sc); } @@ -105,7 +116,7 @@ Script_column::before_line_breaking (SCM smob) Side_position_interface::x_aligned_side_proc) staff_sided.push_back (sc); } - + order_grobs (staff_sided); return SCM_UNSPECIFIED; } @@ -128,26 +139,39 @@ Script_column::order_grobs (vector grobs) SCM ss = scm_reverse_x (scripts_drul[d], SCM_EOL); ss = scm_stable_sort_x (ss, ly_grob_script_priority_less_proc); - Grob *last = 0; - for (SCM s = ss; scm_is_pair (s); s = scm_cdr (s)) + Grob *g = 0; // current grob in list + Grob *last = 0; // previous grob in list + SCM initial_outside_staff = SCM_EOL; // initial outside_staff_priority of current grob + SCM last_initial_outside_staff = SCM_EOL; // initial outside_staff_priority of previous grob + + // loop over all grobs in script column (already sorted by script_priority) + for (SCM s = ss; scm_is_pair (s); + s = scm_cdr (s), last = g, last_initial_outside_staff = initial_outside_staff) { - Grob *g = unsmob_grob (scm_car (s)); - if (last) - { - SCM outside_staff = last->get_property ("outside-staff-priority"); - if (scm_is_number (outside_staff)) - { - /* we allow the outside-staff-priority ordering to override the - script-priority ordering */ - if (!scm_is_number (g->get_property ("outside-staff-priority"))) - g->set_property ("outside-staff-priority", - scm_from_double (scm_to_double (outside_staff) + 0.1)); - } - else + g = unsmob_grob (scm_car (s)); + initial_outside_staff = g->get_property ("outside-staff-priority"); + if (last) //not the first grob in the list + { + SCM last_outside_staff = last->get_property ("outside-staff-priority"); + /* + if outside_staff_priority is missing for previous grob, just + use it as a support for the current grob + */ + if (!scm_is_number (last_outside_staff)) Side_position_interface::add_support (g, last); + /* + if outside_staff_priority is missing or is equal to original + outside_staff_priority of previous grob, set new + outside_staff_priority to just higher than outside_staff_priority + of previous grob in order to preserve ordering. + */ + else if ((!scm_is_number (initial_outside_staff)) || + (fabs (scm_to_double (initial_outside_staff) - + robust_scm2double (last_initial_outside_staff, 0)) < 0.001)) + g->set_property ("outside-staff-priority", + scm_from_double ( + scm_to_double (last_outside_staff) + 0.1)); } - - last = g; } } while (flip (&d) != DOWN); @@ -155,8 +179,8 @@ Script_column::order_grobs (vector grobs) ADD_INTERFACE (Script_column, "An interface that sorts scripts according to their" - " @code{script-priority}.", - + " @code{script-priority} and @code{outside-staff-priority}.", + /* properties */ "" ); diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index ceb4a048f8..f10f29da8a 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -1,9 +1,20 @@ /* - script-engraver.cc -- engrave Scripts: Articulations. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -99,8 +110,8 @@ make_script_from_event (Grob *p, Context *tg, if (art == SCM_BOOL_F) { /* FIXME: */ - warning (_ ("do not know how to interpret articulation: ")); - warning (_ ("scheme encoding: ")); + warning (_ ("do not know how to interpret articulation:")); + warning (_ (" scheme encoding: ")); scm_write (art_type, scm_current_error_port ()); message (""); return; diff --git a/lily/script-interface.cc b/lily/script-interface.cc index 59737b5ac4..a1dfd85dc6 100644 --- a/lily/script-interface.cc +++ b/lily/script-interface.cc @@ -1,9 +1,20 @@ /* - script-interface.cc -- implement Script_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "script-interface.hh" @@ -53,12 +64,28 @@ Script_interface::calc_positioning_done (SCM smob) return SCM_BOOL_T; } +Direction +Script_interface::get_direction (Grob *me) +{ + Direction relative_dir = Direction (1); + SCM reldir = me->get_property ("side-relative-direction"); + if (is_direction (reldir)) + relative_dir = to_dir (reldir); + + SCM other_elt = me->get_object ("direction-source"); + Grob *e = unsmob_grob (other_elt); + if (e) + return (Direction) (relative_dir * get_grob_direction (e)); + + return CENTER; +} + MAKE_SCHEME_CALLBACK (Script_interface, calc_direction, 1); SCM Script_interface::calc_direction (SCM smob) { Grob *me = unsmob_grob (smob); - Direction d = Side_position_interface::get_direction (me); + Direction d = Script_interface::get_direction (me); if (!d) { @@ -126,11 +153,13 @@ ADD_INTERFACE (Script_interface, /* properties */ "add-stem-support " "avoid-slur " + "direction-source " "positioning-done " "script-priority " "script-stencil " - "toward-stem-shift " + "side-relative-direction " "slur " "slur-padding " + "toward-stem-shift " ); diff --git a/lily/script-row-engraver.cc b/lily/script-row-engraver.cc index 21a227228c..430c2c9dc3 100644 --- a/lily/script-row-engraver.cc +++ b/lily/script-row-engraver.cc @@ -1,10 +1,21 @@ -/* - script-row-engraver.cc -- implement Script_row_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" diff --git a/lily/self-aligment-interface.cc b/lily/self-aligment-interface.cc deleted file mode 100644 index 71d2e1f96d..0000000000 --- a/lily/self-aligment-interface.cc +++ /dev/null @@ -1,158 +0,0 @@ -/* - self-alignment-interface.cc -- implement Self_alignment_interface - - source file of the GNU LilyPond music typesetter - - (c) 2004--2009 Han-Wen Nienhuys -*/ - -#include "self-alignment-interface.hh" - -#include "warn.hh" -#include "paper-column.hh" -#include "grob.hh" - -MAKE_SCHEME_CALLBACK (Self_alignment_interface, y_aligned_on_self, 1); -SCM -Self_alignment_interface::y_aligned_on_self (SCM element) -{ - return aligned_on_self (unsmob_grob (element), Y_AXIS); -} - -MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_aligned_on_self, 1); -SCM -Self_alignment_interface::x_aligned_on_self (SCM element) -{ - return aligned_on_self (unsmob_grob (element), X_AXIS); -} - -SCM -Self_alignment_interface::aligned_on_self (Grob *me, Axis a) -{ - SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X") - : ly_symbol2scm ("self-alignment-Y"); - - SCM align (me->internal_get_property (sym)); - if (scm_is_number (align)) - { - Interval ext (me->extent (me, a)); - if (ext.is_empty ()) - programming_error ("cannot align on self: empty element"); - else - return scm_from_double (- ext.linear_combination (scm_to_double (align))); - } - return scm_from_double (0.0); -} - - - -SCM -Self_alignment_interface::centered_on_object (Grob *him, Axis a) -{ - return scm_from_double (robust_relative_extent (him, him, a).center ()); -} - - -MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_x_parent, 1); -SCM -Self_alignment_interface::centered_on_x_parent (SCM smob) -{ - return centered_on_object (unsmob_grob (smob)->get_parent (X_AXIS), X_AXIS); -} - - -MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1); -SCM -Self_alignment_interface::centered_on_y_parent (SCM smob) -{ - return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), Y_AXIS); -} - - -MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_centered_on_y_parent, 1); -SCM -Self_alignment_interface::x_centered_on_y_parent (SCM smob) -{ - return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), X_AXIS); -} - -MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent,1); -SCM -Self_alignment_interface::aligned_on_x_parent (SCM smob) -{ - return aligned_on_parent (unsmob_grob (smob), X_AXIS); -} - -MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_y_parent,1); -SCM -Self_alignment_interface::aligned_on_y_parent (SCM smob) -{ - return aligned_on_parent (unsmob_grob (smob), Y_AXIS); -} - -SCM -Self_alignment_interface::aligned_on_parent (Grob *me, Axis a) -{ - Grob *him = me->get_parent (a); - if (Paper_column::has_interface (him)) - return scm_from_double (0.0); - - Interval he = him->extent (him, a); - - SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X") - : ly_symbol2scm ("self-alignment-Y"); - SCM align_prop (me->internal_get_property (sym)); - - if (!scm_is_number (align_prop)) - return scm_from_int (0); - - Real x = 0.0; - Real align = scm_to_double (align_prop); - - Interval ext (me->extent (me, a)); - if (ext.is_empty ()) - programming_error ("cannot align on self: empty element"); - else - x -= ext.linear_combination (align); - - if (!he.is_empty ()) - x += he.linear_combination (align); - - return scm_from_double (x); -} - -void -Self_alignment_interface::set_center_parent (Grob *me, Axis a) -{ - add_offset_callback (me, - (a==X_AXIS) ? centered_on_x_parent_proc : centered_on_y_parent_proc, - a); -} - -void -Self_alignment_interface::set_align_self (Grob *me, Axis a) -{ - add_offset_callback (me, - (a==X_AXIS) ? x_aligned_on_self_proc : y_aligned_on_self_proc, - a); -} - -ADD_INTERFACE (Self_alignment_interface, - "Position this object on itself and/or on its parent. To this" - " end, the following functions are provided:\n" - "\n" - "@table @code\n" - "@item Self_alignment_interface::[xy]_aligned_on_self\n" - "Align self on reference point, using" - " @code{self-alignment-X} and @code{self-alignment-Y}." - "@item Self_alignment_interface::aligned_on_[xy]_parent\n" - "@item Self_alignment_interface::centered_on_[xy]_parent\n" - "Shift the object so its own reference point is centered on" - " the extent of the parent\n" - "@end table\n", - - /* properties */ - "self-alignment-X " - "self-alignment-Y " - ); - diff --git a/lily/self-alignment-interface.cc b/lily/self-alignment-interface.cc new file mode 100644 index 0000000000..637ce67521 --- /dev/null +++ b/lily/self-alignment-interface.cc @@ -0,0 +1,171 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2004--2011 Han-Wen Nienhuys + + 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 . +*/ + +#include "self-alignment-interface.hh" + +#include "grob.hh" +#include "paper-column.hh" +#include "warn.hh" + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, y_aligned_on_self, 1); +SCM +Self_alignment_interface::y_aligned_on_self (SCM element) +{ + return aligned_on_self (unsmob_grob (element), Y_AXIS, false, 0, 0); +} + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_aligned_on_self, 1); +SCM +Self_alignment_interface::x_aligned_on_self (SCM element) +{ + return aligned_on_self (unsmob_grob (element), X_AXIS, false, 0, 0); +} + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, pure_y_aligned_on_self, 3); +SCM +Self_alignment_interface::pure_y_aligned_on_self (SCM smob, SCM start, SCM end) +{ + return aligned_on_self (unsmob_grob (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX)); +} + +SCM +Self_alignment_interface::aligned_on_self (Grob *me, Axis a, bool pure, int start, int end) +{ + SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X") + : ly_symbol2scm ("self-alignment-Y"); + + SCM align (me->internal_get_property (sym)); + if (scm_is_number (align)) + { + Interval ext (me->maybe_pure_extent (me, a, pure, start, end)); + if (ext.is_empty ()) + programming_error ("cannot align on self: empty element"); + else + return scm_from_double (- ext.linear_combination (scm_to_double (align))); + } + return scm_from_double (0.0); +} + + +SCM +Self_alignment_interface::centered_on_object (Grob *him, Axis a) +{ + return scm_from_double (robust_relative_extent (him, him, a).center ()); +} + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_x_parent, 1); +SCM +Self_alignment_interface::centered_on_x_parent (SCM smob) +{ + return centered_on_object (unsmob_grob (smob)->get_parent (X_AXIS), X_AXIS); +} + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1); +SCM +Self_alignment_interface::centered_on_y_parent (SCM smob) +{ + return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), Y_AXIS); +} + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_centered_on_y_parent, 1); +SCM +Self_alignment_interface::x_centered_on_y_parent (SCM smob) +{ + return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), X_AXIS); +} + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent,1); +SCM +Self_alignment_interface::aligned_on_x_parent (SCM smob) +{ + return aligned_on_parent (unsmob_grob (smob), X_AXIS); +} + +MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_y_parent,1); +SCM +Self_alignment_interface::aligned_on_y_parent (SCM smob) +{ + return aligned_on_parent (unsmob_grob (smob), Y_AXIS); +} + +SCM +Self_alignment_interface::aligned_on_parent (Grob *me, Axis a) +{ + Grob *him = me->get_parent (a); + if (Paper_column::has_interface (him)) + return scm_from_double (0.0); + + Interval he = him->extent (him, a); + + SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X") + : ly_symbol2scm ("self-alignment-Y"); + SCM align_prop (me->internal_get_property (sym)); + + if (!scm_is_number (align_prop)) + return scm_from_int (0); + + Real x = 0.0; + Real align = scm_to_double (align_prop); + + Interval ext (me->extent (me, a)); + if (ext.is_empty ()) + programming_error ("cannot align on self: empty element"); + else + x -= ext.linear_combination (align); + + if (!he.is_empty ()) + x += he.linear_combination (align); + + return scm_from_double (x); +} + +void +Self_alignment_interface::set_center_parent (Grob *me, Axis a) +{ + add_offset_callback (me, + (a == X_AXIS) ? centered_on_x_parent_proc : centered_on_y_parent_proc, + a); +} + +void +Self_alignment_interface::set_align_self (Grob *me, Axis a) +{ + add_offset_callback (me, + (a == X_AXIS) ? x_aligned_on_self_proc : y_aligned_on_self_proc, + a); +} + +ADD_INTERFACE (Self_alignment_interface, + "Position this object on itself and/or on its parent. To this" + " end, the following functions are provided:\n" + "\n" + "@table @code\n" + "@item Self_alignment_interface::[xy]_aligned_on_self\n" + "Align self on reference point, using" + " @code{self-alignment-X} and @code{self-alignment-Y}." + "@item Self_alignment_interface::aligned_on_[xy]_parent\n" + "@item Self_alignment_interface::centered_on_[xy]_parent\n" + "Shift the object so its own reference point is centered on" + " the extent of the parent\n" + "@end table\n", + + /* properties */ + "self-alignment-X " + "self-alignment-Y " + ); diff --git a/lily/semi-tie-column.cc b/lily/semi-tie-column.cc index 508df73a9f..f31e23050a 100644 --- a/lily/semi-tie-column.cc +++ b/lily/semi-tie-column.cc @@ -1,10 +1,21 @@ /* - semi-tie-column.cc -- implement Semi_tie_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "semi-tie-column.hh" diff --git a/lily/semi-tie.cc b/lily/semi-tie.cc index a23ddd40f5..91d50a44be 100644 --- a/lily/semi-tie.cc +++ b/lily/semi-tie.cc @@ -1,10 +1,21 @@ /* - semi-tie.cc -- implement Semi_tie + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "semi-tie-column.hh" diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index 38bb5a3b40..86c45fb55a 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -1,9 +1,20 @@ /* - separating-line-group-engraver.cc -- implement Separating_line_group_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/separation-item.cc b/lily/separation-item.cc index 5f8471a600..013e457034 100644 --- a/lily/separation-item.cc +++ b/lily/separation-item.cc @@ -1,9 +1,20 @@ /* - separation-item.cc -- implement Separation_item + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "separation-item.hh" @@ -69,7 +80,8 @@ Skyline Separation_item::conditional_skyline (Grob *me, Grob *left) { vector bs = boxes (me, left); - return Skyline (bs, 0.1, Y_AXIS, LEFT); + Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0); + return Skyline (bs, horizon_padding, Y_AXIS, LEFT); } @@ -79,8 +91,8 @@ Separation_item::calc_skylines (SCM smob) { Item *me = unsmob_item (smob); vector bs = boxes (me, 0); - /* todo: the horizon_padding is somewhat arbitrary */ - return Skyline_pair (bs, 0.1, Y_AXIS).smobbed_copy (); + Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0); + return Skyline_pair (bs, horizon_padding, Y_AXIS).smobbed_copy (); } /* if left is non-NULL, get the boxes corresponding to the @@ -138,13 +150,13 @@ Separation_item::boxes (Grob *me, Grob *left) Interval extra_width = robust_scm2interval (elts[i]->get_property ("extra-spacing-width"), Interval (-0.1, 0.1)); Interval extra_height = robust_scm2interval (elts[i]->get_property ("extra-spacing-height"), - Interval (-0.1, 0.1)); + Interval (0.0, 0.0)); x[LEFT] += extra_width[LEFT]; x[RIGHT] += extra_width[RIGHT]; y[DOWN] += extra_height[DOWN]; y[UP] += extra_height[UP]; - + if (!x.is_empty () && !y.is_empty ()) out.push_back (Box (x, y)); } @@ -178,4 +190,5 @@ ADD_INTERFACE (Separation_item, "elements " "padding " "horizontal-skylines " + "skyline-vertical-padding " ); diff --git a/lily/sequential-iterator.cc b/lily/sequential-iterator.cc index 3fd7da3839..84d677df00 100644 --- a/lily/sequential-iterator.cc +++ b/lily/sequential-iterator.cc @@ -1,9 +1,20 @@ /* - sequential-iterator.cc -- implement Sequential_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "sequential-iterator.hh" diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index ed3af0577a..9e8c71f6e6 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -1,9 +1,20 @@ /* - side-position-interface.cc -- implement Side_position_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "side-position-interface.hh" @@ -13,8 +24,10 @@ using namespace std; +#include "axis-group-interface.hh" #include "directional-element-interface.hh" #include "grob.hh" +#include "grob-array.hh" #include "main.hh" #include "misc.hh" #include "note-head.hh" @@ -23,6 +36,7 @@ using namespace std; #include "staff-symbol.hh" #include "stem.hh" #include "string-convert.hh" +#include "system.hh" #include "warn.hh" void @@ -31,22 +45,6 @@ Side_position_interface::add_support (Grob *me, Grob *e) Pointer_group_interface::add_unordered_grob (me, ly_symbol2scm ("side-support-elements"), e); } -Direction -Side_position_interface::get_direction (Grob *me) -{ - Direction relative_dir = Direction (1); - SCM reldir = me->get_property ("side-relative-direction"); - if (is_direction (reldir)) - relative_dir = to_dir (reldir); - - SCM other_elt = me->get_object ("direction-source"); - Grob *e = unsmob_grob (other_elt); - if (e) - return (Direction) (relative_dir * get_grob_direction (e)); - - return CENTER; -} - /* Put the element next to the support, optionally taking in account the extent of the support. @@ -64,7 +62,7 @@ Side_position_interface::general_side_position (Grob *me, Axis a, bool use_exten Grob *common = common_refpoint_of_array (support, me->get_parent (a), a); Grob *staff_symbol = Staff_symbol_referencer::get_staff_symbol (me); - bool include_staff = + bool include_staff = staff_symbol && a == Y_AXIS && scm_is_number (me->get_property ("staff-padding")) @@ -94,7 +92,7 @@ Side_position_interface::general_side_position (Grob *me, Axis a, bool use_exten && Stem::has_interface (e) && dir == - get_grob_direction (e)) continue; - + if (e) { if (use_extents) @@ -138,8 +136,8 @@ Side_position_interface::general_side_position (Grob *me, Axis a, bool use_exten if (current_offset) total_off = dir * max (dir * total_off, dir * (*current_offset)); - - + + /* FIXME: 1000 should relate to paper size. */ if (fabs (total_off) > 1000) { @@ -151,6 +149,7 @@ Side_position_interface::general_side_position (Grob *me, Axis a, bool use_exten if (strict_infinity_checking) scm_misc_error (__FUNCTION__, "Improbable offset.", SCM_EOL); } + return scm_from_double (total_off); } @@ -159,15 +158,15 @@ MAKE_SCHEME_CALLBACK (Side_position_interface, y_aligned_on_support_refpoints, 1 SCM Side_position_interface::y_aligned_on_support_refpoints (SCM smob) { - return general_side_position (unsmob_grob (smob), Y_AXIS, false, false, false, 0, 0, 0); + return general_side_position (unsmob_grob (smob), Y_AXIS, false, false, false, 0, 0, 0); } MAKE_SCHEME_CALLBACK (Side_position_interface, pure_y_aligned_on_support_refpoints, 3); SCM Side_position_interface::pure_y_aligned_on_support_refpoints (SCM smob, SCM start, SCM end) { - return general_side_position (unsmob_grob (smob), Y_AXIS, false, false, - true, scm_to_int (start), scm_to_int (end), 0); + return general_side_position (unsmob_grob (smob), Y_AXIS, false, false, + true, scm_to_int (start), scm_to_int (end), 0); } @@ -182,9 +181,9 @@ axis_aligned_side_helper (SCM smob, Axis a, bool pure, int start, int end, SCM c if (scm_is_number (current_off_scm)) { r = scm_to_double (current_off_scm); - current_off_ptr = &r; + current_off_ptr = &r; } - + return Side_position_interface::aligned_side (unsmob_grob (smob), a, pure, start, end, current_off_ptr); } @@ -257,7 +256,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i if (fabs (position) <= 2 * Staff_symbol_referencer::staff_radius (me) + 1 /* In case of a ledger lines, quantize even if we're outside the staff. */ || (Note_head::has_interface (head) - + && abs (Staff_symbol_referencer::get_position (head)) > abs (position))) { o += (rounded - position) * 0.5 * ss; @@ -268,16 +267,20 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i else if (scm_is_number (me->get_property ("staff-padding")) && dir) { Interval iv = me->maybe_pure_extent (me, a, pure, start, end); - - Real padding + + Real staff_padding = Staff_symbol_referencer::staff_space (me) * scm_to_double (me->get_property ("staff-padding")); - Grob *common = me->common_refpoint (staff, Y_AXIS); - - Interval staff_size = staff->maybe_pure_extent (common, Y_AXIS, pure, start, end); - Real diff = dir*staff_size[dir] + padding - dir * (o + iv[-dir]); - o += dir * max (diff, 0.0); + Grob *parent = me->get_parent (Y_AXIS); + Grob *common = me->common_refpoint (staff, Y_AXIS); + Real parent_position = parent->maybe_pure_coordinate (common, Y_AXIS, pure, start, end); + Real staff_position = staff->maybe_pure_coordinate (common, Y_AXIS, pure, start, end); + Interval staff_extent = staff->maybe_pure_extent (staff, a, pure, start, end); + Real diff = (dir * staff_extent[dir] + staff_padding + - dir * (o + iv[-dir]) + + dir * (staff_position - parent_position)); + o += dir * max (diff, 0.0); } } return scm_from_double (o); @@ -302,13 +305,58 @@ Side_position_interface::get_axis (Grob *me) { if (scm_is_number (me->get_property ("side-axis"))) return Axis (scm_to_int (me->get_property ("side-axis"))); - + string msg = String_convert::form_string ("side-axis not set for grob %s.", me->name ().c_str ()); me->programming_error (msg); return NO_AXES; } +MAKE_SCHEME_CALLBACK (Side_position_interface, move_to_extremal_staff, 1); +SCM +Side_position_interface::move_to_extremal_staff (SCM smob) +{ + Grob *me = unsmob_grob (smob); + System *sys = dynamic_cast (me->get_system ()); + Direction dir = get_grob_direction (me); + if (dir != DOWN) + dir = UP; + + Interval iv = me->extent (sys, X_AXIS); + iv.widen (1.0); + Grob *top_staff = sys->get_extremal_staff (dir, iv); + + if (!top_staff) + return SCM_BOOL_F; + + // Only move this grob if it is a direct child of the system. We + // are not interested in moving marks from other staves to the top + // staff; we only want to move marks from the system to the top + // staff. + if (sys != me->get_parent (Y_AXIS)) + return SCM_BOOL_F; + + me->set_parent (top_staff, Y_AXIS); + me->flush_extent_cache (Y_AXIS); + Axis_group_interface::add_element (top_staff, me); + + // Remove any cross-staff side-support dependencies + Grob_array *ga = unsmob_grob_array (me->get_object ("side-support-elements")); + if (ga) + { + vector const& elts = ga->array (); + vector new_elts; + for (vsize i = 0; i < elts.size (); ++i) + { + if (me->common_refpoint (elts[i], Y_AXIS) == top_staff) + new_elts.push_back (elts[i]); + } + ga->set_array (new_elts); + } + return SCM_BOOL_T; +} + + ADD_INTERFACE (Side_position_interface, "Position a victim object (this one) next to other objects" " (the support). The property @code{direction} signifies where" @@ -321,12 +369,10 @@ ADD_INTERFACE (Side_position_interface, /* properties */ "direction " - "direction-source " "minimum-space " "padding " "quantize-position " "side-axis " - "side-relative-direction " "side-support-elements " "slur-padding " "staff-padding " diff --git a/lily/simple-closure.cc b/lily/simple-closure.cc index 34bfd58f1b..7c46c0198b 100644 --- a/lily/simple-closure.cc +++ b/lily/simple-closure.cc @@ -1,10 +1,21 @@ /* - closure.cc -- chained closures. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "simple-closure.hh" @@ -84,8 +95,8 @@ evaluate_with_simple_closure (SCM delayed_argument, } LY_DEFINE (ly_simple_closure_p, "ly:simple-closure?", - 1,0,0, (SCM clos), - "Type predicate.") + 1, 0, 0, (SCM clos), + "Is @var{clos} a simple closure?") { return scm_from_bool (is_simple_closure (clos)); } @@ -93,7 +104,7 @@ LY_DEFINE (ly_simple_closure_p, "ly:simple-closure?", LY_DEFINE (ly_make_simple_closure, "ly:make-simple-closure", 1, 0, 0, (SCM expr), "Make a simple closure. @var{expr} should be form of" - " @code{(@var{func} @var{a1} @var{A2} @dots{})}, and will be" + " @code{(@var{func} @var{a1} @var{a2} @dots{})}, and will be" " invoked as @code{(@var{func} @var{delayed-arg} @var{a1}" " @var{a2} @dots{})}.") { diff --git a/lily/simple-music-iterator.cc b/lily/simple-music-iterator.cc index 706be56838..e2910ba25c 100644 --- a/lily/simple-music-iterator.cc +++ b/lily/simple-music-iterator.cc @@ -1,9 +1,20 @@ /* - simple-music-iterator.cc -- implement Simple_music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "simple-music-iterator.hh" diff --git a/lily/simple-spacer-scheme.cc b/lily/simple-spacer-scheme.cc index 7308de6584..3df7d2f7dd 100644 --- a/lily/simple-spacer-scheme.cc +++ b/lily/simple-spacer-scheme.cc @@ -1,9 +1,20 @@ /* - simple-spacer-scheme.cc -- implement Simple_spacer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 1d38d9a70f..14c7cbeebd 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -1,12 +1,23 @@ /* - simple-spacer.cc -- implement Simple_spacer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1999--2009 Han-Wen Nienhuys + Copyright (C) 1999--2011 Han-Wen Nienhuys TODO: - add support for different stretch/shrink constants? + + 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 . */ #include @@ -216,7 +227,9 @@ Simple_spacer::compress_line () { Spring sp = sorted_springs[i]; - assert (sp.blocking_force () <= cur_force); + if (sp.blocking_force () > cur_force) + continue; + if (isinf (sp.blocking_force ())) break; @@ -234,7 +247,7 @@ Simple_spacer::compress_line () } cur_len -= block_dist; - inv_hooke -= sp.inverse_compress_strength (); + inv_hooke -= compressed ? sp.inverse_compress_strength () : sp.inverse_stretch_strength (); cur_force = sp.blocking_force (); } diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index 0631ba9e8d..3723c2695f 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -1,9 +1,20 @@ /* - simultaneous-music-iterator.cc -- implement Simultaneous_music_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "simultaneous-music-iterator.hh" diff --git a/lily/skyline-pair.cc b/lily/skyline-pair.cc index 61573ee01d..2f7ea73575 100644 --- a/lily/skyline-pair.cc +++ b/lily/skyline-pair.cc @@ -1,10 +1,21 @@ -/* - skyline-pair.cc -- implement Skyline_pair - - source file of the GNU LilyPond music typesetter - - (c) 2008--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2008--2011 Han-Wen Nienhuys + + 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 . */ #include "skyline-pair.hh" diff --git a/lily/skyline.cc b/lily/skyline.cc index a3047a98bb..fe30291f78 100644 --- a/lily/skyline.cc +++ b/lily/skyline.cc @@ -1,8 +1,20 @@ -/* skyline.cc -- implement the Skyline class +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2011 Joe Neeman + + 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. - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Joe Neeman + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "skyline.hh" @@ -107,7 +119,7 @@ Building::precompute (Real start, Real start_height, Real end_height, Real end) y_intercept_ = start_height - slope_ * start; } -Real +Real Building::height (Real x) const { return isinf (x) ? y_intercept_ : slope_*x + y_intercept_; @@ -227,6 +239,10 @@ empty_skyline (list *const ret) ret->push_front (Building (-infinity_f, -infinity_f, -infinity_f, infinity_f)); } +/* + Given Building 'b' with starting wall location 'start', extend each side + with a sloped roofline of width 'horizon_padding'; put the skyline in 'ret' +*/ static void single_skyline (Building b, Real start, Real horizon_padding, list *const ret) { @@ -236,7 +252,7 @@ single_skyline (Building b, Real start, Real horizon_padding, list *co -infinity_f, infinity_f)); if (sloped_neighbours) ret->push_front (b.sloped_neighbour (start, horizon_padding, RIGHT)); - + if (b.end_ > start + EPS) ret->push_front (b); @@ -318,7 +334,8 @@ Skyline::internal_build_skyline (list *boxes, Real horizon_padding, Axis ho { list result; single_skyline (Building (boxes->front (), horizon_padding, horizon_axis, sky), - boxes->front ()[horizon_axis][LEFT], horizon_padding, &result); + boxes->front ()[horizon_axis][LEFT] - horizon_padding, + horizon_padding, &result); return result; } @@ -355,7 +372,7 @@ Skyline::Skyline () Skyline::Skyline (Skyline const &src) { sky_ = src.sky_; - + /* doesn't a list's copy constructor do this? -- jneem */ for (list::const_iterator i = src.buildings_.begin (); i != src.buildings_.end (); i++) @@ -370,6 +387,37 @@ Skyline::Skyline (Direction sky) empty_skyline (&buildings_); } +/* + build padded skyline from an existing skyline with padding + added to it. +*/ + +Skyline::Skyline (Skyline const &src, Real horizon_padding, Axis a) +{ + /* + We extract boxes from the skyline, then build a new skyline from + the boxes. + A box is created for every horizontal portion of the skyline + Because skylines are defined positive, and then inverted if they + are to be down-facing, we create the new skyline in the UP + direction, then give it the down direction if needed. + */ + Real start = -infinity_f; + list boxes; + + // establish a baseline box + boxes.push_back (Box (Interval (-infinity_f, infinity_f), + Interval (0, 0))); + list::const_iterator end = src.buildings_.end (); + for (list::const_iterator i = src.buildings_.begin (); i != end; start=i->end_, i++ ) + if ((i->slope_ == 0) && !isinf (i->y_intercept_)) + boxes.push_back (Box (Interval (start, i->end_), + Interval (-infinity_f , i->y_intercept_))); + buildings_ = internal_build_skyline (&boxes, horizon_padding, X_AXIS, UP); + sky_ = src.sky_; +} + + /* build skyline from a set of boxes. If horizon_padding > 0, expand all the boxes by that amount and add 45-degree sloped boxes to the edges of each box (of @@ -392,7 +440,7 @@ Skyline::Skyline (vector const &boxes, Real horizon_padding, Axis horizon_a if (iv.length () > EPS && !boxes[i][vert_axis].is_empty ()) filtered_boxes.push_front (boxes[i]); } - + buildings_ = internal_build_skyline (&filtered_boxes, horizon_padding, horizon_axis, sky); } @@ -400,7 +448,8 @@ Skyline::Skyline (Box const &b, Real horizon_padding, Axis horizon_axis, Directi { sky_ = sky; Building front (b, horizon_padding, horizon_axis, sky); - single_skyline (front, b[horizon_axis][LEFT], horizon_padding, &buildings_); + single_skyline (front, b[horizon_axis][LEFT] - horizon_padding, + horizon_padding, &buildings_); } void @@ -434,7 +483,8 @@ Skyline::insert (Box const &b, Real horizon_padding, Axis a) return; my_bld.splice (my_bld.begin (), buildings_); - single_skyline (Building (b, horizon_padding, a, sky_), b[a][LEFT], horizon_padding, &other_bld); + single_skyline (Building (b, horizon_padding, a, sky_), b[a][LEFT] - horizon_padding, + horizon_padding, &other_bld); internal_merge_skyline (&other_bld, &my_bld, &buildings_); } @@ -458,15 +508,31 @@ Skyline::shift (Real s) } Real -Skyline::distance (Skyline const &other) const +Skyline::distance (Skyline const &other, Real horizon_padding) const { assert (sky_ == -other.sky_); - list::const_iterator i = buildings_.begin (); - list::const_iterator j = other.buildings_.begin (); + + Skyline const *padded_this = this; + Skyline const *padded_other = &other; + + /* + For systems, padding is not added at creation time. Padding is + added to AxisGroup objects when outside-staff objects are added. + Thus, when we want to place systems with horizontal padding, + we do it at distance calculation time. + */ + if (horizon_padding != 0.0) + { + padded_this = new Skyline (*padded_this, horizon_padding, X_AXIS); + padded_other = new Skyline (*padded_other, horizon_padding, X_AXIS); + } + + list::const_iterator i = padded_this->buildings_.begin (); + list::const_iterator j = padded_other->buildings_.begin (); Real dist = -infinity_f; Real start = -infinity_f; - while (i != buildings_.end () && j != other.buildings_.end ()) + while (i != padded_this->buildings_.end () && j != padded_other->buildings_.end ()) { Real end = min (i->end_, j->end_); Real start_dist = i->height (start) + j->height (start); @@ -542,6 +608,12 @@ Skyline::is_empty () const return b.end_ == infinity_f && b.y_intercept_ == -infinity_f; } +void +Skyline::clear () +{ + buildings_.clear (); + empty_skyline (&buildings_); +} /****************************************************************/ diff --git a/lily/slash-repeat-engraver.cc b/lily/slash-repeat-engraver.cc index 16af23613a..0db3ceffb3 100644 --- a/lily/slash-repeat-engraver.cc +++ b/lily/slash-repeat-engraver.cc @@ -1,28 +1,32 @@ /* - slash-repeat-engraver.cc -- implement Slash_repeat_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Han-Wen Nienhuys , Erik Sandberg + Copyright (C) 2000--2011 Han-Wen Nienhuys , Erik Sandberg + + 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 . */ -#include "bar-line.hh" -#include "global-context.hh" -#include "international.hh" #include "item.hh" -#include "misc.hh" -#include "repeated-music.hh" -#include "score-engraver.hh" -#include "spanner.hh" +#include "engraver.hh" #include "stream-event.hh" -#include "warn.hh" #include "translator.icc" -/** - This acknowledges repeated music with "percent" style. It typesets - a slash sign. +/* + This acknowledges repeated music with "percent" style. It typesets + a slash sign or double percent sign. */ class Slash_repeat_engraver : public Engraver { @@ -31,7 +35,7 @@ public: protected: Stream_event *slash_; protected: - DECLARE_TRANSLATOR_LISTENER (percent); + DECLARE_TRANSLATOR_LISTENER (repeat_slash); void process_music (); }; @@ -40,21 +44,11 @@ Slash_repeat_engraver::Slash_repeat_engraver () slash_ = 0; } -IMPLEMENT_TRANSLATOR_LISTENER (Slash_repeat_engraver, percent); +IMPLEMENT_TRANSLATOR_LISTENER (Slash_repeat_engraver, repeat_slash); void -Slash_repeat_engraver::listen_percent (Stream_event *ev) +Slash_repeat_engraver::listen_repeat_slash (Stream_event *ev) { - /*todo: separate events for percent and slash */ - Moment meas_length - = robust_scm2moment (get_property ("measureLength"), Moment (0)); - - if (get_event_length (ev) < meas_length) ASSIGN_EVENT_ONCE (slash_, ev); - - /* - don't warn if nothing happens: this can happen if there are whole - measure repeats. - */ } void @@ -62,7 +56,11 @@ Slash_repeat_engraver::process_music () { if (slash_) { - make_item ("RepeatSlash", slash_->self_scm ()); + SCM count = slash_->get_property ("slash-count"); + if (scm_to_int (count) == 0) + make_item ("DoubleRepeatSlash", slash_->self_scm ()); + else + make_item ("RepeatSlash", slash_->self_scm ()); slash_ = 0; } } @@ -72,10 +70,11 @@ ADD_TRANSLATOR (Slash_repeat_engraver, "Make beat repeats.", /* create */ + "DoubleRepeatSlash " "RepeatSlash ", /* read */ - "measureLength ", + "", /* write */ "" diff --git a/lily/slur-configuration.cc b/lily/slur-configuration.cc index ce368ab9eb..1285a3bb5d 100644 --- a/lily/slur-configuration.cc +++ b/lily/slur-configuration.cc @@ -1,9 +1,20 @@ /* - slur-configuration.cc -- implement Slur_configuration + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "slur-configuration.hh" @@ -166,12 +177,10 @@ Slur_configuration::generate_curve (Slur_score_state const &state, Slur_configuration::Slur_configuration () { - tags_ = 0x0; score_ = 0.0; index_ = -1; }; - void Slur_configuration::add_score (Real s, string desc) { @@ -402,6 +411,7 @@ Slur_configuration::score_edges (Slur_score_state const &state) Real demerit = factor * dy; if (state.extremes_[d].stem_ && state.extremes_[d].stem_dir_ == state.dir_ + // TODO - Stem::get_beaming() should be precomputed. && !Stem::get_beaming (state.extremes_[d].stem_, -d)) demerit /= 5; @@ -456,11 +466,51 @@ Slur_configuration ::score_slopes (Slur_score_state const &state) add_score (demerit, "slope"); } + +// This is a temporary hack to see how much we can gain by using a +// priority queue on the beams to score. +static int score_count = 0; +LY_DEFINE (ly_slur_score_count, "ly:slur-score-count", 0, 0, 0, + (), + "count number of slur scores.") { + return scm_from_int (score_count); +} + void -Slur_configuration::calculate_score (Slur_score_state const &state) +Slur_configuration::run_next_scorer (Slur_score_state const &state) +{ + switch (next_scorer_todo) { + case EXTRA_ENCOMPASS: + score_extra_encompass (state); + break; + case SLOPE: + score_slopes (state); + break; + case EDGES: + score_edges (state); + break; + case ENCOMPASS: + score_encompass (state); + break; + default: + assert (false); + } + next_scorer_todo++; + score_count++; +} + +bool +Slur_configuration::done () const +{ + return next_scorer_todo >= NUM_SCORERS; +} + +Slur_configuration * +Slur_configuration::new_config (Drul_array const &offs, int idx) { - score_extra_encompass (state); - score_slopes (state); - score_edges (state); - score_encompass (state); + Slur_configuration *conf = new Slur_configuration; + conf->attachment_ = offs; + conf->index_ = idx; + conf->next_scorer_todo = INITIAL_SCORE + 1; + return conf; } diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 13ca895e2e..45aa121a71 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -1,9 +1,20 @@ /* - slur-engraver.cc -- implement Slur_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -37,8 +48,8 @@ */ class Slur_engraver : public Engraver { - Drul_array events_; - Stream_event *running_slur_start_; + vector start_events_; + vector stop_events_; vector slurs_; vector end_slurs_; @@ -67,7 +78,6 @@ public: Slur_engraver::Slur_engraver () { - events_[START] = events_[STOP] = 0; } IMPLEMENT_TRANSLATOR_LISTENER (Slur_engraver, slur); @@ -76,9 +86,9 @@ Slur_engraver::listen_slur (Stream_event *ev) { 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))); } @@ -123,7 +133,6 @@ Slur_engraver::acknowledge_tuplet_number (Grob_info info) acknowledge_extra_object (info); } - void Slur_engraver::acknowledge_script (Grob_info info) { @@ -146,47 +155,71 @@ Slur_engraver::acknowledge_tie (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 ()); } @@ -199,7 +232,7 @@ Slur_engraver::stop_translation_timestep () 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); } @@ -213,7 +246,8 @@ Slur_engraver::stop_translation_timestep () 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); diff --git a/lily/slur-performer.cc b/lily/slur-performer.cc index 422f065fd2..bd466fe8c2 100644 --- a/lily/slur-performer.cc +++ b/lily/slur-performer.cc @@ -1,9 +1,20 @@ /* - slur-performer.cc -- implement Slur_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Jan Nieuwenhuizen - (c) 1996--2009 Jan Nieuwenhuizen + 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 . */ #include "performer.hh" diff --git a/lily/slur-score-parameters.cc b/lily/slur-score-parameters.cc index 00b8effc0f..1683aeea2f 100644 --- a/lily/slur-score-parameters.cc +++ b/lily/slur-score-parameters.cc @@ -1,10 +1,21 @@ /* - slur-score-paramaters.cc -- implement Slur_score_parameters + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen Nienhuys - (c) 2006--2009 Han-Wen Nienhuys + 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 . */ diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index bb2b1f3b2b..63160a9917 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -1,15 +1,28 @@ /* - slur-scoring.cc -- Score based slur formatting + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "slur-scoring.hh" +#include + #include "accidental-interface.hh" #include "beam.hh" #include "directional-element-interface.hh" @@ -67,18 +80,24 @@ Slur_score_state::~Slur_score_state () } /* - copy slur dir forwards across line break. + If a slur is broken across a line break, the direction + of the post-break slur must be the same as the pre-break + slur. */ -void -Slur_score_state::set_next_direction () +Direction +Slur_score_state::slur_direction () const { - if (extremes_[RIGHT].note_column_) - return; + Grob *left_neighbor = slur_->broken_neighbor (LEFT); - if (Grob *neighbor = slur_->broken_neighbor (RIGHT)) - { - set_grob_direction (neighbor, dir_); - } + if (left_neighbor && left_neighbor->is_live ()) + return get_grob_direction (left_neighbor); + + Direction dir = get_grob_direction (slur_); + + if (Grob *right_neighbor = slur_->broken_neighbor (RIGHT)) + set_grob_direction (right_neighbor, dir); + + return dir; } Encompass_info @@ -116,7 +135,7 @@ Slur_score_state::get_encompass_info (Grob *col) const { ei.stem_ = stem->extent (common_[Y_AXIS], Y_AXIS)[dir_]; if (Grob *b = Stem::get_beam (stem)) - ei.stem_ += stem_dir * 0.5 * Beam::get_thickness (b); + ei.stem_ += stem_dir * 0.5 * Beam::get_beam_thickness (b); Interval x = stem->extent (common_[X_AXIS], X_AXIS); ei.x_ = x.is_empty () @@ -204,7 +223,7 @@ Slur_score_state::fill (Grob *me) Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")); thickness_ = robust_scm2double (me->get_property ("thickness"), 1.0) * lt; - dir_ = get_grob_direction (me); + dir_ = slur_direction (); parameters_.fill (me); extract_grob_set (me, "note-columns", columns); @@ -266,8 +285,6 @@ Slur_score_state::fill (Grob *me) = (extremes_[LEFT].stem_ && Stem::get_beam (extremes_[LEFT].stem_)) || (extremes_[RIGHT].stem_ && Stem::get_beam (extremes_[RIGHT].stem_)); - set_next_direction (); - if (is_broken_) musical_dy_ = 0.0; } @@ -288,17 +305,35 @@ Slur::calc_control_points (SCM smob) state.generate_curves (); SCM end_ys = me->get_property ("positions"); - Bezier best; + SCM inspect_quants = me->get_property ("inspect-quants"); + bool debug_slurs = to_boolean (me->layout () + ->lookup_variable (ly_symbol2scm ("debug-slur-scoring"))); + if (is_number_pair (inspect_quants)) + { + debug_slurs = true; + end_ys = inspect_quants; + } + + Slur_configuration *best = NULL; if (is_number_pair (end_ys)) - best = state.configurations_[state.get_closest_index (end_ys)]->curve_; + best = state.get_forced_configuration (ly_scm2interval(end_ys)); else best = state.get_best_curve (); +#if DEBUG_SLUR_SCORING + if (debug_slurs) + { + string total = best->card (); + total += to_string (" TOTAL=%.2f idx=%d", best->score (), best->index_); + me->set_property ("annotation", ly_string2scm (total)); + } +#endif + SCM controls = SCM_EOL; for (int i = 4; i--;) { - Offset o = best.control_[i] + Offset o = best->curve_.control_[i] - Offset (me->relative_coordinate (state.common_[X_AXIS], X_AXIS), me->relative_coordinate (state.common_[Y_AXIS], Y_AXIS)); controls = scm_cons (ly_offset2scm (o), controls); @@ -307,72 +342,52 @@ Slur::calc_control_points (SCM smob) return controls; } -Bezier -Slur_score_state::get_best_curve () +Slur_configuration* +Slur_score_state::get_forced_configuration (Interval ys) const { - int opt_idx = -1; - Real opt = 1e6; - -#if DEBUG_SLUR_SCORING - bool debug_slurs = to_boolean (slur_->layout () - ->lookup_variable (ly_symbol2scm ("debug-slur-scoring"))); - SCM inspect_quants = slur_->get_property ("inspect-quants"); - SCM inspect_index = slur_->get_property ("inspect-index"); - if (debug_slurs - && scm_is_integer (inspect_index)) - { - opt_idx = scm_to_int (inspect_index); - configurations_[opt_idx]->calculate_score (*this); - opt = configurations_[opt_idx]->score (); - } - else if (debug_slurs - && scm_is_pair (inspect_quants)) - { - opt_idx = get_closest_index (inspect_quants); - configurations_[opt_idx]->calculate_score (*this); - opt = configurations_[opt_idx]->score (); - } - else -#endif + Slur_configuration *best = NULL; + Real mindist = 1e6; + for (vsize i = 0; i < configurations_.size (); i++) { - for (vsize i = 0; i < configurations_.size (); i++) - configurations_[i]->calculate_score (*this); - for (vsize i = 0; i < configurations_.size (); i++) + Real d = fabs (configurations_[i]->attachment_[LEFT][Y_AXIS] - ys[LEFT]) + + fabs (configurations_[i]->attachment_[RIGHT][Y_AXIS] - ys[RIGHT]); + if (d < mindist) { - if (configurations_[i]->score () < opt) - { - opt = configurations_[i]->score (); - opt_idx = i; - } + best = configurations_[i]; + mindist = d; } } -#if DEBUG_SLUR_SCORING - if (debug_slurs) - { - string total; - if (opt_idx >= 0) - { - total = configurations_[opt_idx]->card (); - total += to_string (" TOTAL=%.2f idx=%d", configurations_[opt_idx]->score (), opt_idx); - } - else - { - total = "no sol?"; - } + while (!best->done ()) + best->run_next_scorer (*this); - slur_->set_property ("quant-score", - ly_string2scm (total)); - } -#endif + if (mindist > 1e5) + programming_error ("cannot find quant"); - if (opt_idx < 0) - { - opt_idx = 0; - programming_error ("No optimal slur found. Guessing 0."); - } - - return configurations_[opt_idx]->curve_; + return best; +} + + +Slur_configuration * +Slur_score_state::get_best_curve () const +{ + std::priority_queue, + Slur_configuration_less> queue; + for (vsize i = 0; i < configurations_.size (); i++) + queue.push (configurations_[i]); + + Slur_configuration *best = NULL; + while (true) { + best = queue.top (); + if (best->done ()) + break; + + queue.pop (); + best->run_next_scorer (*this); + queue.push (best); + } + + return best; } Grob * @@ -392,28 +407,6 @@ Slur_score_state::breakable_bound_item (Direction d) const return 0; } -int -Slur_score_state::get_closest_index (SCM inspect_quants) const -{ - Drul_array ins = ly_scm2interval (inspect_quants); - - int opt_idx = -1; - Real mindist = 1e6; - for (vsize i = 0; i < configurations_.size (); i++) - { - Real d = fabs (configurations_[i]->attachment_[LEFT][Y_AXIS] - ins[LEFT]) - + fabs (configurations_[i]->attachment_[RIGHT][Y_AXIS] - ins[RIGHT]); - if (d < mindist) - { - opt_idx = i; - mindist = d; - } - } - if (mindist > 1e5) - programming_error ("cannot find quant"); - return opt_idx; -} - /* TODO: should analyse encompasses to determine sensible region, and should limit slopes available. @@ -653,7 +646,6 @@ Slur_score_state::enumerate_attachments (Drul_array end_ys) const os[RIGHT] = base_attachments_[RIGHT]; for (int j = 0; dir_ * os[RIGHT][Y_AXIS] <= dir_ * end_ys[RIGHT]; j++) { - Slur_configuration s; Direction d = LEFT; Drul_array attach_to_stem (false, false); do @@ -714,10 +706,7 @@ Slur_score_state::enumerate_attachments (Drul_array end_ys) const } while (flip (&d) != LEFT); - s.attachment_ = os; - s.index_ = scores.size (); - - scores.push_back (new Slur_configuration (s)); + scores.push_back (Slur_configuration::new_config (os, scores.size ())); os[RIGHT][Y_AXIS] += dir_ * staff_space_ / 2; } diff --git a/lily/slur.cc b/lily/slur.cc index b1794ad401..433406c92a 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -1,10 +1,21 @@ /* - slur.cc -- implement external interface for Slur + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "slur.hh" @@ -82,7 +93,10 @@ Slur::pure_height (SCM smob, SCM start_scm, SCM end_scm) ret.unite (d); } - ret.widen (height * 0.5); + // The +0.5 comes from the fact that we try to place a slur + // 0.5 staff spaces from the note-head. + // (see Slur_score_state.get_base_attachments ()) + ret.widen (height * 0.5 + 0.5); return ly_interval2scm (ret); } @@ -119,25 +133,14 @@ Slur::print (SCM smob) Bezier one = get_curve (me); Stencil a; - SCM p = me->get_property ("dash-period"); - SCM f = me->get_property ("dash-fraction"); - if (scm_is_number (p) && scm_is_number (f)) - a = Lookup::dashed_slur (one, line_thick, robust_scm2double (p, 1.0), - robust_scm2double (f, 0)); - else - a = Lookup::slur (one, - get_grob_direction (me) * base_thick, - line_thick); + SCM dash_definition = me->get_property ("dash-definition"); + a = Lookup::slur (one, + get_grob_direction (me) * base_thick, + line_thick, + dash_definition); #if DEBUG_SLUR_SCORING SCM annotation = me->get_property ("annotation"); - if (!scm_is_string (annotation)) - { - SCM debug = me->layout ()->lookup_variable (ly_symbol2scm ("debug-slur-scoring")); - if (to_boolean (debug)) - annotation = me->get_property ("quant-score"); - } - if (scm_is_string (annotation)) { string str; @@ -160,7 +163,7 @@ Slur::print (SCM smob) /* it would be better to do this at engraver level, but that is - fragile, as the breakabl items are generated on staff level, at + fragile, as the breakable items are generated on staff level, at which point slur starts and ends have to be tracked */ void @@ -279,9 +282,9 @@ Slur::outside_slur_callback (SCM grob, SCM offset_scm) 0.0); yext.widen (slur_padding); - Real EPS = 1e-3; + const Real EPS = 1e-3; Interval bezext (curve.control_[0][X_AXIS], curve.control_[3][X_AXIS]); - bool consider[] = { false, false, false }; + bool consider[] = {false, false, false}; Real ys[] = {0, 0, 0}; bool do_shift = false; @@ -355,7 +358,7 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info, e->set_object ("slur", slur->self_scm ()); } } - else + else if (avoid != ly_symbol2scm ("ignore")) e->warning (_f ("Ignoring grob for slur: %s. avoid-slur not set?", e->name().c_str ())); } @@ -411,14 +414,79 @@ Slur::calc_cross_staff (SCM smob) } ADD_INTERFACE (Slur, - "A slur.", + "A slur." + "\n" + "The following properties may be set in the @code{details}" + " list.\n" + "\n" + "@table @code\n" + "@item region-size\n" + "Size of region (in staff spaces) for determining" + " potential endpoints in the Y direction.\n" + "@item head-encompass-penalty\n" + "Demerit to apply when note heads collide with a slur.\n" + "@item stem-encompass-penalty\n" + "Demerit to apply when stems collide with a slur.\n" + "@item closeness-factor\n" + "Additional demerit used when scoring encompasses.\n" + "@item edge-attraction-factor\n" + "Factor used to calculate the demerit for distances" + " between slur endpoints and their corresponding base" + " attachments.\n" + "@item same-slope-penalty\n" + "Demerit for slurs with attachment points that are" + " horizontally aligned.\n" + "@item steeper-slope-factor\n" + "Factor used to calculate demerit only if this slur is" + " not broken.\n" + "@item non-horizontal-penalty\n" + "Demerit for slurs with attachment points that are not" + " horizontally aligned.\n" + "@item max-slope\n" + "The maximum slope allowed for this slur.\n" + "@item max-slope-factor\n" + "Factor that calculates demerit based on the max slope.\n" + "@item free-head-distance\n" + "The amount of vertical free space that must exist" + " between a slur and note heads.\n" + "@item absolute-closeness-measure\n" + "Factor to calculate demerit for variance between a note" + " head and slur.\n" + "@item extra-object-collision-penalty\n" + "Factor to calculate demerit for extra objects that the" + " slur encompasses, including accidentals, fingerings, and" + " tuplet numbers.\n" + "@item accidental-collision\n" + "Factor to calculate demerit for @code{Accidental} objects" + " that the slur encompasses. This property value replaces" + " the value of @code{extra-object-collision-penalty}.\n" + "@item extra-encompass-free-distance\n" + "The amount of vertical free space that must exist" + " between a slur and various objects it encompasses," + " including accidentals, fingerings, and tuplet numbers.\n" + "@item extra-encompass-collision-distance\n" + "This detail is currently unused.\n" + "@item head-slur-distance-factor\n" + "Factor to calculate demerit for variance between a note" + " head and slur.\n" + "@item head-slur-distance-max-ratio\n" + "The maximum value for the ratio of distance between a" + " note head and slur.\n" + "@item free-slur-distance\n" + "The amount of vertical free space that must exist" + " between adjacent slurs. This subproperty only works" + " for @code{PhrasingSlur}.\n" + "@item edge-slope-exponent\n" + "Factor used to calculate the demerit for the slope of" + " a slur near its endpoints; a larger value yields a" + " larger demerit.\n" + "@end table\n", /* properties */ "annotation " "avoid-slur " /* UGH. */ "control-points " - "dash-fraction " - "dash-period " + "dash-definition " "details " "direction " "eccentricity " @@ -429,7 +497,6 @@ ADD_INTERFACE (Slur, "line-thickness " "note-columns " "positions " - "quant-score " "ratio " "thickness " ); diff --git a/lily/smobs.cc b/lily/smobs.cc index ea2095c3a3..5544d95d7b 100644 --- a/lily/smobs.cc +++ b/lily/smobs.cc @@ -1,9 +1,20 @@ /* - smobs.cc -- implement Smob protection + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "smobs.hh" diff --git a/lily/source-file.cc b/lily/source-file.cc index fc5b03483d..b016763558 100644 --- a/lily/source-file.cc +++ b/lily/source-file.cc @@ -1,10 +1,21 @@ /* - source-file.cc -- implement Source_file + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #if GCC_MAJOR < 4 @@ -16,12 +27,6 @@ #include "config.hh" -#if HAVE_UTF8_WCHAR_H -#include /* mbrtowc */ -#else /* !HAVE_UTF8_WCHAR_H */ -#include /* mbrtowc */ -#endif /* HAVE_UTF8_WCHAR_H */ - #include #if HAVE_SSTREAM @@ -34,6 +39,7 @@ using namespace std; #include "file-name-map.hh" #include "international.hh" +#include "misc.hh" #include "warn.hh" void @@ -42,7 +48,7 @@ Source_file::load_stdin () characters_.clear (); int c; while ((c = fgetc (stdin)) != EOF) - characters_.push_back (c); + characters_.push_back ((char)c); } /* @@ -173,8 +179,8 @@ Source_file::file_line_column_string (char const *context_str0) const return " (" + _ ("position unknown") + ")"; else { - int l, ch, col; - get_counts (context_str0, &l, &ch, &col); + int l, ch, col, offset; + get_counts (context_str0, &l, &ch, &col, &offset); return name_string () + ":" + to_string (l) + ":" + to_string (col); @@ -187,13 +193,13 @@ Source_file::quote_input (char const *pos_str0) const if (!contains (pos_str0)) return " (" + _ ("position unknown") + ")"; - int l, ch, col; - get_counts (pos_str0, &l, &ch, &col); + int l, ch, col, offset; + get_counts (pos_str0, &l, &ch, &col, &offset); string line = line_string (pos_str0); - string context = line.substr (0, ch) + string context = line.substr (0, offset) + to_string ('\n') + to_string (' ', col) - + line.substr (ch, line.length ()-ch); + + line.substr (offset, line.length () - offset); return context; } @@ -253,11 +259,10 @@ void Source_file::get_counts (char const *pos_str0, int *line_number, int *line_char, - int *column) const + int *column, + int *byte_offset) const { *line_number = 0; - *line_char = 0; - *column = 0; if (!contains (pos_str0)) return; @@ -272,36 +277,13 @@ Source_file::get_counts (char const *pos_str0, string line_begin (line_start, left); char const *line_chars = line_begin.c_str (); - *column = 0; *line_char = 0; - - mbstate_t state; - - /* Initialize the state. */ - memset (&state, '\0', sizeof (state)); + *column = 0; + *byte_offset = 0; while (left > 0) { - /* - FIXME, this is apparently locale dependent. - */ -#if HAVE_MBRTOWC - wchar_t multibyte[2]; - size_t thislen = mbrtowc (multibyte, line_chars, left, &state); -#else - size_t thislen = 1; -#endif /* !HAVE_MBRTOWC */ - - /* Stop converting at invalid character; - this can mean we have read just the first part - of a valid character. */ - if (thislen == (size_t) -1) - break; - - /* We want to handle embedded NUL bytes - but the return value is 0. Correct this. */ - if (thislen == 0) - thislen = 1; + size_t thislen = utf8_char_len (*line_chars); if (thislen == 1 && line_chars[0] == '\t') (*column) = (*column / 8 + 1) * 8; @@ -309,6 +291,14 @@ Source_file::get_counts (char const *pos_str0, (*column)++; (*line_char)++; + + /* + To have decent output in UTF-8 aware terminals, + we must keep track of the number of bytes from + the left edge of the terminal. + */ + *byte_offset += thislen; + /* Advance past this character. */ line_chars += thislen; left -= thislen; diff --git a/lily/sources.cc b/lily/sources.cc index 3bedc8cc67..0b33c92f9e 100644 --- a/lily/sources.cc +++ b/lily/sources.cc @@ -1,9 +1,20 @@ /* - source.cc -- implement Sources + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "sources.hh" diff --git a/lily/spaceable-grob.cc b/lily/spaceable-grob.cc index 0412edcf02..268259b088 100644 --- a/lily/spaceable-grob.cc +++ b/lily/spaceable-grob.cc @@ -1,9 +1,20 @@ /* - spaceable-grob.cc -- implement Spaceable_grob + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "spaceable-grob.hh" @@ -95,10 +106,10 @@ ADD_INTERFACE (Spaceable_grob, "allow-loose-spacing " "ideal-distances " "keep-inside-line " - "left-neighbors " + "left-neighbor " "measure-length " "minimum-distances " - "right-neighbors " + "right-neighbor " "spacing-wishes " ); diff --git a/lily/spacing-basic.cc b/lily/spacing-basic.cc index 0f81619bed..6b7773f8de 100644 --- a/lily/spacing-basic.cc +++ b/lily/spacing-basic.cc @@ -1,9 +1,20 @@ /* - spacing-basic.cc -- implement Spacing_spanner, simplistic spacing routines + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "spacing-spanner.hh" @@ -30,7 +41,6 @@ Spring Spacing_spanner::standard_breakable_column_spacing (Grob *me, Item *l, Item *r, Spacing_options const *options) { Real min_dist = max (0.0, Paper_column::minimum_distance (l, r)); - Real ideal; if (Paper_column::is_breakable (l) && Paper_column::is_breakable (r)) { @@ -40,24 +50,33 @@ Spacing_spanner::standard_breakable_column_spacing (Grob *me, Item *l, Item *r, mlen = *dt; Real incr = robust_scm2double (me->get_property ("spacing-increment"), 1); + Real space = incr * double (mlen.main_part_ / options->global_shortest_) * 0.8; + Spring spring = Spring (min_dist + space, min_dist); - ideal = min_dist + incr * double (mlen.main_part_ / options->global_shortest_) * 0.8; + /* + By default, the spring will have an inverse_stretch_strength of space+min_dist. + However, we don't want stretchability to scale with min_dist or else an + empty first measure on a line (which has a large min_dist because of the clef) + will stretch much more than an empty measure later in the line. + */ + spring.set_inverse_stretch_strength (space); + return spring; } - else - { - Moment dt = Paper_column::when_mom (r) - Paper_column::when_mom (l); - if (dt == Moment (0, 0)) - { - /* - In this case, Staff_spacing should handle the job, - using dt when it is 0 is silly. - */ - ideal = min_dist + 0.5; - } - else - ideal = min_dist + options->get_duration_space (dt.main_part_); + Moment dt = Paper_column::when_mom (r) - Paper_column::when_mom (l); + Real ideal; + + if (dt == Moment (0, 0)) + { + /* + In this case, Staff_spacing should handle the job, + using dt when it is 0 is silly. + */ + ideal = min_dist + 0.5; } + else + ideal = min_dist + options->get_duration_space (dt.main_part_); + return Spring (ideal, min_dist); } diff --git a/lily/spacing-determine-loose-columns.cc b/lily/spacing-determine-loose-columns.cc index 20771542fb..5a2411b322 100644 --- a/lily/spacing-determine-loose-columns.cc +++ b/lily/spacing-determine-loose-columns.cc @@ -1,10 +1,20 @@ /* - spacing-determine-loose-columns.cc -- implement Spacing_spanner - methods that decide which columns to turn loose. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "staff-spacing.hh" @@ -47,8 +57,7 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options) } - if (Paper_column::is_musical (col) - || Paper_column::is_breakable (col)) + if (Paper_column::is_musical (col)) return false; /* @@ -73,27 +82,17 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options) */ - extract_grob_set (col, "right-neighbors", rns); - extract_grob_set (col, "left-neighbors", lns); - - if (lns.empty () || rns.empty ()) - return false; - - - Item *l_neighbor = dynamic_cast (lns[0]); - Item *r_neighbor = dynamic_cast (rns[0]); + Item *r_neighbor = unsmob_item (col->get_object ("right-neighbor")); + Item *l_neighbor = unsmob_item (col->get_object ("left-neighbor")); if (!l_neighbor || !r_neighbor) return false; - l_neighbor = l_neighbor->get_column (); - r_neighbor = dynamic_cast (Spacing_interface::right_column (r_neighbor)); - - if (l == l_neighbor && r == r_neighbor) - return false; - - if (!l_neighbor || !r_neighbor) - return false; + /* If a non-empty column (ie. not \bar "") is placed nicely in series with + its neighbor (ie. no funny polyphonic stuff), don't make it loose. + */ + if (l == l_neighbor && r == r_neighbor && col->extent (col, X_AXIS).length () > 0) + return false; /* Only declare loose if the bounds make a little sense. This means @@ -119,7 +118,12 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options) Grob *h = gelts[j]; if (h && h->get_property ("break-align-symbol") == ly_symbol2scm ("staff-bar")) - return false; + { + extract_grob_set (h, "elements", helts); + for (vsize k = helts.size (); k--;) + if ("" != robust_scm2string (helts[k]->get_property ("glyph-name"), "")) + return false; + } } } } @@ -198,21 +202,37 @@ Spacing_spanner::prune_loose_columns (Grob *me, bool loose = (i > 0 && i + 1 < cols->size ()) && is_loose_column (cols->at (i - 1), c, cols->at (i + 1), options); - if (loose) + /* Breakable columns never get pruned; even if they are loose, + their broken pieces are not. However, we mark them so that + the spacing can take their mid-line looseness into account. */ + if (loose && Paper_column::is_breakable (c)) { - extract_grob_set (c, "right-neighbors", rns_arr); - extract_grob_set (c, "left-neighbors", lns_arr); + loose = false; + c->set_property ("maybe-loose", SCM_BOOL_T); + } + /* + Unbreakable columns which only contain page-labels also + never get pruned, otherwise the labels are lost before they can + be collected by the System: so we mark these columns too. + */ + if (!loose && !Paper_column::is_breakable (c) + && scm_is_pair (c->get_property ("labels"))) + { + extract_grob_set (c, "elements", elts); + if (elts.empty ()) + c->set_property ("maybe-loose", SCM_BOOL_T); + } - SCM lns = lns_arr.size () ? lns_arr.back ()->self_scm () : SCM_BOOL_F; - SCM rns = rns_arr.size () ? rns_arr.back ()->self_scm () : SCM_BOOL_F; + if (loose) + { + Grob *right_neighbor = unsmob_grob (c->get_object ("right-neighbor")); + Grob *left_neighbor = unsmob_grob (c->get_object ("left-neighbor")); /* Either object can be non existent, if the score ends prematurely. */ - - extract_grob_set (unsmob_grob (rns), "right-items", right_items); - if (right_items.size () == 0 || !unsmob_grob (lns)) + if (!right_neighbor || !left_neighbor) { c->programming_error ("Cannot determine neighbors for floating column. "); c->set_object ("between-cols", scm_cons (cols->at (i-1)->self_scm (), @@ -220,20 +240,9 @@ Spacing_spanner::prune_loose_columns (Grob *me, } else { - Grob *min_item = 0; - int min_rank = INT_MAX; - for (vsize j = 0; j < right_items.size (); j ++) - { - int rank = dynamic_cast (right_items[j])->get_column ()->get_rank (); - if (rank < min_rank) - { - min_item = right_items[j]; - min_rank = rank; - } - } - - c->set_object ("between-cols", scm_cons (lns, - min_item->self_scm ())); + c->set_object ("between-cols", scm_cons (left_neighbor->self_scm (), + right_neighbor->self_scm ())); + /* Set distance constraints for loose columns @@ -260,72 +269,38 @@ Spacing_spanner::set_explicit_neighbor_columns (vector const &cols) { for (vsize i = 0; i < cols.size (); i++) { - SCM right_neighbors = Grob_array::make_array (); - Grob_array *rn_arr = unsmob_grob_array (right_neighbors); - int min_rank = INT_MAX; - extract_grob_set (cols[i], "spacing-wishes", wishes); - for (vsize k = wishes.size (); k--;) + for (vsize j = wishes.size (); j--;) { - Item *wish = dynamic_cast (wishes[k]); - - Item *lc = wish->get_column (); - Grob *right = Spacing_interface::right_column (wish); - - if (!right) - continue; - - Item *rc = dynamic_cast (right); - - int right_rank = Paper_column::get_rank (rc); - int left_rank = Paper_column::get_rank (lc); - - /* - update the left column. - */ - if (right_rank <= min_rank) - { - if (right_rank < min_rank) - rn_arr->clear (); - - min_rank = right_rank; - rn_arr->add (wish); - } + Item *wish = dynamic_cast (wishes[j]); + Item *left_col = wish->get_column (); + int left_rank = Paper_column::get_rank (left_col); + int min_right_rank = INT_MAX; - /* - update the right column of the wish. - */ - int maxrank = 0; - - extract_grob_set (rc, "left-neighbors", lns_arr); - if (lns_arr.size ()) + extract_grob_set (wish, "right-items", right_items); + for (vsize k = right_items.size (); k--;) { - Item *it = dynamic_cast (lns_arr.back ()); - maxrank = Paper_column::get_rank (it->get_column ()); - } + Item *right_col = dynamic_cast (right_items[k])->get_column (); + int right_rank = Paper_column::get_rank (right_col); - if (left_rank >= maxrank) - { - - if (left_rank > maxrank) + if (right_rank < min_right_rank) { - Grob_array *ga = unsmob_grob_array (rc->get_object ("left-neighbors")); - if (ga) - ga->clear (); + left_col->set_object ("right-neighbor", right_col->self_scm ()); + min_right_rank = right_rank; } - Pointer_group_interface::add_grob (rc, ly_symbol2scm ("left-neighbors"), wish); + Grob *old_left_neighbor = unsmob_grob (right_col->get_object ("left-neighbor")); + if (!old_left_neighbor || left_rank > Paper_column::get_rank (old_left_neighbor)) + right_col->set_object ("left-neighbor", left_col->self_scm ()); } } - - if (rn_arr->size ()) - cols[i]->set_object ("right-neighbors", right_neighbors); } } /* Set neighboring columns that have no left/right-neighbor set yet. Only do breakable non-musical columns, and musical columns. + Why only these? --jneem */ void Spacing_spanner::set_implicit_neighbor_columns (vector const &cols) @@ -336,24 +311,9 @@ Spacing_spanner::set_implicit_neighbor_columns (vector const &cols) if (!Paper_column::is_breakable (it) && !Paper_column::is_musical (it)) continue; - /* - sloppy with typing left/right-neighbors should take list, but paper-column found instead. - */ - extract_grob_set (cols[i], "left-neighbors", lns); - if (lns.empty () && i) - { - SCM ga_scm = Grob_array::make_array (); - Grob_array *ga = unsmob_grob_array (ga_scm); - ga->add (cols[i - 1]); - cols[i]->set_object ("left-neighbors", ga_scm); - } - extract_grob_set (cols[i], "right-neighbors", rns); - if (rns.empty () && i + 1 < cols.size ()) - { - SCM ga_scm = Grob_array::make_array (); - Grob_array *ga = unsmob_grob_array (ga_scm); - ga->add (cols[i + 1]); - cols[i]->set_object ("right-neighbors", ga_scm); - } + if (i && !unsmob_grob (cols[i]->get_object ("left-neighbor"))) + cols[i]->set_object ("left-neighbor", cols[i-1]->self_scm ()); + if (i + 1 < cols.size () && !unsmob_grob (cols[i]->get_object ("right-neighbor"))) + cols[i]->set_object ("right-neighbor", cols[i+1]->self_scm ()); } } diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc index 7051ae75c4..65cea5cbec 100644 --- a/lily/spacing-engraver.cc +++ b/lily/spacing-engraver.cc @@ -1,9 +1,20 @@ /* - spacing-engraver.cc -- implement Spacing_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/spacing-interface.cc b/lily/spacing-interface.cc index f7d6b8d31f..f9d3287cb0 100644 --- a/lily/spacing-interface.cc +++ b/lily/spacing-interface.cc @@ -1,10 +1,20 @@ /* - spacing-interface.cc -- functionality that is shared between Note_spacing - and Staff_spacing + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2007--2011 Joe Neeman - (c) 2007--2009 Joe Neeman + 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 . */ #include "spacing-interface.hh" @@ -92,20 +102,7 @@ Spacing_interface::minimum_distance (Grob *me, Grob *right) } /* - Compute the column of the right-items. This is a big function, - since RIGHT-ITEMS may span more columns (eg. if a clef is inserted, - this will add a new column to RIGHT-ITEMS. Here we look at the - columns, and return the left-most. If there are multiple columns, we - prune RIGHT-ITEMS. - - If we end up pruning, we add a left-neighbor to every column that - gets pruned. This ensures that loose columns in cross-staff music - do indeed get marked as loose. The problem situation is when a voice - passes from staff 1 to staff 2 and a clef appears later on in staff 1. - Then the NoteSpacing attached to the last note in staff 1 has two - right-items: one pointing to the next note in staff 2 and one pointing - to the clef. We will prune the clef right-item here and, unless we add - a left-neighbor to the clef, it won't get marked as loose. + Compute the left-most column of the right-items. */ Item * Spacing_interface::right_column (Grob *me) @@ -116,7 +113,6 @@ Spacing_interface::right_column (Grob *me) Grob_array *a = unsmob_grob_array (me->get_object ("right-items")); Item *mincol = 0; int min_rank = INT_MAX; - bool prune = false; for (vsize i = 0; a && i < a->size (); i++) { Item *ri = a->item (i); @@ -127,31 +123,8 @@ Spacing_interface::right_column (Grob *me) if (rank < min_rank) { min_rank = rank; - if (mincol) - prune = true; - mincol = col; } - else if (rank > min_rank) - prune = true; - } - - if (prune && a) - { - vector &right = a->array_reference (); - for (vsize i = right.size (); i--;) - { - if (dynamic_cast (right[i])->get_column () != mincol) - { - extract_grob_set (right[i], "left-neighbors", lns); - if (lns.empty ()) - Pointer_group_interface::add_grob (right[i], - ly_symbol2scm ("left-neighbors"), - dynamic_cast (me)->get_column ()); - - right.erase (right.begin () + i); - } - } } return mincol; diff --git a/lily/spacing-loose-columns.cc b/lily/spacing-loose-columns.cc index 302cccb133..03cac8431c 100644 --- a/lily/spacing-loose-columns.cc +++ b/lily/spacing-loose-columns.cc @@ -1,9 +1,20 @@ /* - spacing-loose-columns.cc -- implement loose column spacing. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "system.hh" @@ -26,14 +37,13 @@ set_loose_columns (System *which, Column_x_positions const *posns) if (!loose_col_count) return; + for (int i = 0; i < loose_col_count; i++) + dynamic_cast (posns->loose_cols_[i])->set_system (which); + for (int i = 0; i < loose_col_count; i++) { int divide_over = 1; Item *loose = dynamic_cast (posns->loose_cols_[i]); - Paper_column *col = dynamic_cast (loose); - - if (col->get_system ()) - continue; Item *left = 0; Item *right = 0; @@ -45,8 +55,13 @@ set_loose_columns (System *which, Column_x_positions const *posns) if (!scm_is_pair (between)) break; - Item *le = dynamic_cast (unsmob_grob (scm_car (between))); - Item *re = dynamic_cast (unsmob_grob (scm_cdr (between))); + /* If the line was broken at one of the loose columns, split + the clique at that column. */ + if (!loose->get_system ()) + break; + + Paper_column *le = dynamic_cast (unsmob_grob (scm_car (between))); + Paper_column *re = dynamic_cast (unsmob_grob (scm_cdr (between))); if (! (le && re)) break; @@ -66,13 +81,18 @@ set_loose_columns (System *which, Column_x_positions const *posns) loose = right = re->get_column (); } + if (!right) + { + programming_error ("Can't attach loose column sensibly. Attaching to end of system."); + right = which->get_bound (RIGHT); + } + if (right->get_system ()) ; /* do nothing */ else if (right->find_prebroken_piece (LEFT) && right->find_prebroken_piece (LEFT)->get_system () == which) right = right->find_prebroken_piece (LEFT); else if (Paper_column::get_rank (which->get_bound (RIGHT)) < Paper_column::get_rank (right)) - right = which->get_bound (RIGHT); else { @@ -88,12 +108,6 @@ set_loose_columns (System *which, Column_x_positions const *posns) } } - - if (!right) - { - programming_error ("Can't attach loose column sensibly. Attaching to end of system."); - right = which->get_bound (RIGHT); - } Grob *common = right->common_refpoint (left, X_AXIS); clique.push_back (right); @@ -159,12 +173,10 @@ set_loose_columns (System *which, Column_x_positions const *posns) Real my_offset = right_point - distance_to_next; - clique_col->set_system (which); clique_col->translate_axis (my_offset - clique_col->relative_coordinate (common, X_AXIS), X_AXIS); finished_right_column = clique_col; } - } } diff --git a/lily/spacing-options.cc b/lily/spacing-options.cc index f78a94a619..934acb20cc 100644 --- a/lily/spacing-options.cc +++ b/lily/spacing-options.cc @@ -1,10 +1,21 @@ /* - spacing-options.cc -- implement Spacing_options + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Han-Wen Nienhuys - (c) 2006--2009 Han-Wen Nienhuys + 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 . */ #include "spacing-options.hh" diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 99fe9824a8..0395506bbc 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -1,9 +1,20 @@ /* - spacing-spanner.cc -- implement Spacing_spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "spacing-spanner.hh" @@ -38,8 +49,8 @@ Spacing_spanner::get_columns (Grob *me_grob) vsize end = binary_search (all, (Grob*) me->get_bound (RIGHT), &Paper_column::less_than); - all = vector::vector (all.begin () + start, - all.begin () + end + 1); + all = vector (all.begin () + start, + all.begin () + end + 1); return all; } @@ -168,7 +179,7 @@ Spacing_spanner::generate_pair_spacing (Grob *me, if (Paper_column::is_musical (left_col)) { if (!Paper_column::is_musical (right_col) - && options->float_nonmusical_columns_ + && (options->float_nonmusical_columns_ || to_boolean (right_col->get_property ("maybe-loose"))) && after_right_col && Paper_column::is_musical (after_right_col)) { @@ -260,7 +271,7 @@ set_column_rods (vector const &cols, Real padding) bool touches = right_stickout - left_stickout + cur_dist[d] < 0.0; Real dist = 0.0; - /* we set a distance for the line-starter column even if it's non-broken counterpart + /* we set a distance for the line-starter column even if its non-broken counterpart doesn't touch the right column. */ if (lb) Separation_item::set_distance (lb, r_col, padding); @@ -274,6 +285,7 @@ set_column_rods (vector const &cols, Real padding) if (j == i-1) cur_dist[d] = distances[j]; + cur_dist[d] = max (cur_dist[d], dist); done = done && !touches; } while (flip (&d) != LEFT && rb); @@ -324,21 +336,33 @@ Spacing_spanner::musical_column_spacing (Grob *me, else { vector springs; - extract_grob_set (left_col, "right-neighbors", neighbors); + extract_grob_set (left_col, "spacing-wishes", wishes); - for (vsize i = 0; i < neighbors.size (); i++) + for (vsize i = 0; i < wishes.size (); i++) { - Grob *wish = neighbors[i]; + Grob *wish = wishes[i]; + if (Spacing_interface::left_column (wish) != left_col) + { + /* This shouldn't really happen, but the ancient music + stuff really messes up the spacing code, grrr + */ + continue; + } - Item *wish_rcol = Spacing_interface::right_column (wish); - if (Spacing_interface::left_column (wish) != left_col - || (wish_rcol != right_col && wish_rcol != right_col->original ())) - continue; + extract_grob_set (wish, "right-items", right_items); + bool found_matching_column = false; + for (vsize j = 0; j < right_items.size (); j++) + { + Item *it = dynamic_cast (right_items[j]); + if (it && (right_col == it->get_column () + || right_col->original () == it->get_column ())) + found_matching_column = true; + } /* This is probably a waste of time in the case of polyphonic music. */ - if (Note_spacing::has_interface (wish)) + if (found_matching_column && Note_spacing::has_interface (wish)) { Real inc = options->increment_; Grob *gsp = unsmob_grob (left_col->get_object ("grace-spacing")); @@ -516,7 +540,7 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r, { Real full_measure_extra_space = robust_scm2double (l->get_property ("full-measure-extra-space"), 1.0); spring.set_distance (spring.distance () + full_measure_extra_space); - spring.set_default_strength (); + spring.set_default_compress_strength (); } if (options->stretch_uniformly_ && l->break_status_dir () != RIGHT) diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 4630bdc07e..adb465b382 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -1,11 +1,22 @@ /* - span-arpeggio-engraver.cc -- implement Span_arpeggio_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 2000--2009 Jan Nieuwenhuizen + Copyright (C) 2000--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "engraver.hh" diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc index b3709e7336..5378eab765 100644 --- a/lily/span-bar-engraver.cc +++ b/lily/span-bar-engraver.cc @@ -1,9 +1,20 @@ /* - span-bar-engraver.cc -- implement Span_bar_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "bar-line.hh" @@ -40,7 +51,7 @@ void Span_bar_engraver::acknowledge_bar_line (Grob_info i) { int depth = i.origin_contexts (this).size (); - if (depth && Bar_line::has_interface (i.grob ())) + if (depth && !Span_bar::has_interface (i.grob ())) { Item *it = dynamic_cast (i.grob ()); bars_.push_back (it); diff --git a/lily/span-bar.cc b/lily/span-bar.cc index 2c0273ea72..00e22fb085 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -1,9 +1,20 @@ /* - span-bar.cc -- implement Span_bar + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "span-bar.hh" @@ -17,6 +28,8 @@ #include "bar-line.hh" #include "grob.hh" #include "pointer-group-interface.hh" +#include "staff-symbol-referencer.hh" + void Span_bar::add_bar (Grob *me, Grob *b) @@ -63,6 +76,8 @@ Span_bar::print (SCM smobbed_me) { Grob *bar = elements[i]; Interval ext = Bar_line::bar_y_extent (bar, refp); + if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (bar)) + ext.unite (staff->extent (refp, Y_AXIS)); if (ext.is_empty ()) continue; @@ -94,9 +109,8 @@ Span_bar::print (SCM smobbed_me) { Stencil interbar = Bar_line::compound_barline (model_bar, glyph_string, - l.length (), + l, false); - interbar.translate_axis (l.center (), Y_AXIS); span_bar.add_stencil (interbar); } } @@ -117,13 +131,14 @@ Span_bar::width (SCM smob) SCM gn = me->get_property ("glyph-name"); if (!me->is_live ()) return ly_interval2scm (Interval ()); - + string gl = ly_scm2string (gn); /* urg. */ - Stencil m = Bar_line::compound_barline (me, gl, 40 PT, false); + Stencil m = + Bar_line::compound_barline (me, gl, Interval (-20 PT, 20 PT), false); return ly_interval2scm (m.extent (X_AXIS)); } @@ -180,7 +195,7 @@ Span_bar::calc_glyph_name (SCM smob) } string type = ly_scm2string (gl); - if (type == "|:") + if (type == "|:" || type == "||:") type = ".|"; else if (type == ":|") type = "|."; @@ -190,6 +205,14 @@ Span_bar::calc_glyph_name (SCM smob) type = "|.|"; else if (type == ":|.:") type = "|."; + else if (type == "S" || type == "S|" || type == "|S") + type = "||"; + else if (type == "S|:" || type == ".S|:") + type = ".|"; + else if (type == ":|S" || type == ":|S.") + type = "|."; + else if (type == ":|S|:" || type == ":|S.|:") + type = "|._.|"; else if (type == "'") type = ""; @@ -202,21 +225,6 @@ Span_bar::get_spanned_interval (Grob *me) return ly_scm2interval (Axis_group_interface::generic_group_extent (me, Y_AXIS)); } -MAKE_SCHEME_CALLBACK (Span_bar, calc_bar_size, 1); -SCM -Span_bar::calc_bar_size (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Interval iv (get_spanned_interval (me)); - if (iv.is_empty ()) - { - /* This happens if the bars are hara-kiried from under us. */ - me->suicide (); - return scm_from_double (-1); - } - return scm_from_double (iv.length ()); -} - ADD_INTERFACE (Span_bar, "A bar line that is spanned between other barlines. This" " interface is used for bar lines that connect different" @@ -225,5 +233,9 @@ ADD_INTERFACE (Span_bar, /* properties */ "glyph-name " "elements " + "pure-Y-common " + "pure-relevant-grobs " + "pure-relevant-items " + "pure-relevant-spanners " ); diff --git a/lily/spanner-break-forbid-engraver.cc b/lily/spanner-break-forbid-engraver.cc index baac8f83a2..a37056ba8d 100644 --- a/lily/spanner-break-forbid-engraver.cc +++ b/lily/spanner-break-forbid-engraver.cc @@ -1,9 +1,20 @@ -/* - spanner-break-forbid-engraver.cc -- implement Spanner_break_forbid_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ diff --git a/lily/spanner-scheme.cc b/lily/spanner-scheme.cc index d47e4f0285..f2a9f0f939 100644 --- a/lily/spanner-scheme.cc +++ b/lily/spanner-scheme.cc @@ -1,10 +1,21 @@ -/* - spanner-scheme.cc -- implement Spanner bindings. - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Han-Wen Nienhuys +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2007--2011 Han-Wen Nienhuys + + 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 . */ #include "spanner.hh" @@ -17,8 +28,21 @@ LY_DEFINE (ly_spanner_bound, "ly:spanner-bound", { LY_ASSERT_TYPE (unsmob_spanner, spanner, 1); LY_ASSERT_TYPE (is_direction, dir, 2); - - return unsmob_spanner (spanner)->get_bound (to_dir (dir))->self_scm (); + Item *bound = unsmob_spanner (spanner)->get_bound (to_dir (dir)); + return bound ? bound->self_scm () : SCM_EOL; +} + +LY_DEFINE (ly_spanner_set_bound_x, "ly:spanner-set-bound!", + 3, 0, 0, (SCM spanner, SCM dir, SCM item), + "Set grob @var{item} as bound in direction @var{dir} for" + " @var{spanner}.") +{ + LY_ASSERT_TYPE (unsmob_spanner, spanner, 1); + LY_ASSERT_TYPE (is_direction, dir, 2); + LY_ASSERT_TYPE (unsmob_item, item, 3); + + unsmob_spanner (spanner)->set_bound (to_dir (dir), unsmob_item (item)); + return SCM_UNSPECIFIED; } /* TODO: maybe we should return a vector -- random access is more diff --git a/lily/spanner.cc b/lily/spanner.cc index 8533bc72fc..22282aa231 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -1,20 +1,30 @@ /* - spanner.cc -- implement Spanner + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ -#include "pointer-group-interface.hh" #include "libc-extension.hh" -#include "paper-column.hh" +#include "moment.hh" #include "paper-column.hh" #include "paper-score.hh" +#include "pointer-group-interface.hh" #include "stencil.hh" #include "system.hh" #include "warn.hh" -#include "moment.hh" Grob * Spanner::clone () const @@ -70,7 +80,7 @@ Spanner::do_break_processing () Slice parent_rank_slice; parent_rank_slice.set_full (); - + /* Check if our parent in X-direction spans equally wide or wider than we do. @@ -78,11 +88,9 @@ Spanner::do_break_processing () for (int a = X_AXIS; a < NO_AXES; a++) { if (Spanner *parent = dynamic_cast (get_parent ((Axis)a))) - { - parent_rank_slice.intersect (parent->spanned_rank_interval ()); - } + parent_rank_slice.intersect (parent->spanned_rank_interval ()); } - + for (vsize i = 1; i < break_points.size (); i++) { Drul_array bounds; @@ -104,21 +112,20 @@ Spanner::do_break_processing () bool ok = parent_rank_slice.contains (bounds[LEFT]->get_column ()->get_rank ()); ok = ok && parent_rank_slice.contains (bounds[RIGHT]->get_column ()->get_rank ()); - + if (!ok) { programming_error (to_string ("Spanner `%s' is not fully contained in parent spanner. Ignoring orphaned part", name ().c_str ())); continue; } - - + + Spanner *span = dynamic_cast (clone ()); span->set_bound (LEFT, bounds[LEFT]); span->set_bound (RIGHT, bounds[RIGHT]); if (!bounds[LEFT]->get_system () - || !bounds[RIGHT]->get_system () || bounds[LEFT]->get_system () != bounds[RIGHT]->get_system ()) { @@ -178,7 +185,7 @@ Spanner::spanned_time () const Item * Spanner::get_bound (Direction d) const { - return spanned_drul_ [d]; + return spanned_drul_[d]; } /* @@ -209,7 +216,6 @@ Spanner::set_bound (Direction d, Grob *s) [maybe we should try keeping all columns alive?, and perhaps inherit position from their (non-)musical brother] - */ if (dynamic_cast (i)) Pointer_group_interface::add_grob (i, ly_symbol2scm ("bounded-by-me"), this); @@ -219,26 +225,42 @@ Spanner::Spanner (SCM s) : Grob (s) { break_index_ = 0; - spanned_drul_[LEFT] = 0; - spanned_drul_[RIGHT] = 0; + spanned_drul_.set (0, 0); + pure_property_cache_ = SCM_UNDEFINED; } Spanner::Spanner (Spanner const &s) : Grob (s) { - spanned_drul_[LEFT] = spanned_drul_[RIGHT] = 0; + spanned_drul_.set (0, 0); + pure_property_cache_ = SCM_UNDEFINED; } 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; + + Drul_array bounds (get_property ("left-bound-info"), + get_property ("right-bound-info")); - if (r < l) + 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 * @@ -254,7 +276,7 @@ Spanner::get_system () const Grob * Spanner::find_broken_piece (System *l) const { - vsize idx = binary_search (broken_intos_, (Spanner *)l, Spanner::less); + vsize idx = binary_search (broken_intos_, (Spanner *) l, Spanner::less); if (idx != VPOS) return broken_intos_ [idx]; return 0; @@ -266,7 +288,7 @@ Spanner::broken_neighbor (Direction d) const if (!original_) return 0; - vsize k = broken_spanner_index (this); + vsize k = get_break_index (); Spanner *orig = dynamic_cast (original_); int j = int (k) + d; if (j < 0 || vsize (j) >= orig->broken_intos_.size ()) @@ -322,6 +344,8 @@ Spanner::get_broken_left_end_align () const void Spanner::derived_mark () const { + scm_gc_mark (pure_property_cache_); + Direction d = LEFT; do if (spanned_drul_[d]) @@ -363,7 +387,7 @@ Spanner::set_spacing_rods (SCM smob) sp->get_bound (RIGHT)); if (!bounds[LEFT] || !bounds[RIGHT]) return SCM_UNSPECIFIED; - + vector cols (root->broken_col_range (bounds[LEFT]->get_column (), bounds[RIGHT]->get_column ())); @@ -374,30 +398,66 @@ Spanner::set_spacing_rods (SCM smob) r.item_drul_[RIGHT] = cols[0]->find_prebroken_piece (LEFT); r.distance_ = robust_scm2double (num_length, 0); r.add_to_cols (); - + r.item_drul_[LEFT] = cols.back ()->find_prebroken_piece (RIGHT); r.item_drul_[RIGHT] = sp->get_bound (RIGHT); r.add_to_cols (); } - + r.distance_ = robust_scm2double (num_length, 0); r.item_drul_[LEFT] = sp->get_bound (LEFT); r.item_drul_[RIGHT] = sp->get_bound (RIGHT); r.add_to_cols (); } - + return SCM_UNSPECIFIED; } -/* - Return I such that SP == SP->ORIGINAL ()->BROKEN_INTOS_[I]. -*/ -int -broken_spanner_index (Spanner const *sp) +MAKE_SCHEME_CALLBACK (Spanner, calc_normalized_endpoints, 1); +SCM +Spanner::calc_normalized_endpoints (SCM smob) { - Spanner *parent = dynamic_cast (sp->original ()); - /* ugh: casting */ - return find (parent->broken_intos_, (Spanner*) sp) - parent->broken_intos_.begin (); + Spanner *me = unsmob_spanner (smob); + SCM result = SCM_EOL; + + Spanner *orig = dynamic_cast (me->original ()); + + orig = orig ? orig : me; + + if (orig->is_broken ()) + { + Real total_width = 0.0; + vector span_data; + + if (!orig->is_broken ()) + span_data.push_back (orig->spanner_length ()); + else + for (vsize i = 0; i < orig->broken_intos_.size (); i++) + span_data.push_back (orig->broken_intos_[i]->spanner_length ()); + + vector unnormalized_endpoints; + + for (vsize i = 0; i < span_data.size (); i++) + { + unnormalized_endpoints.push_back (Interval (total_width, total_width + span_data[i])); + total_width += span_data[i]; + } + + for (vsize i = 0; i < unnormalized_endpoints.size (); i++) + { + SCM t = ly_interval2scm (1 / total_width * unnormalized_endpoints[i]); + orig->broken_intos_[i]->set_property ("normalized-endpoints", t); + if (me->get_break_index () == i) + result = t; + } + } + else + { + result = scm_cons (scm_from_double (0.0), scm_from_double (1.0)); + orig->set_property ("normalized-endpoints", result); + } + + return result; } Spanner * @@ -412,17 +472,70 @@ Spanner::bounds_width (SCM grob) { Spanner *me = unsmob_spanner (grob); - Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS); Interval w (me->get_bound (LEFT)->relative_coordinate (common, X_AXIS), me->get_bound (RIGHT)->relative_coordinate (common, X_AXIS)); - + w -= me->relative_coordinate (common, X_AXIS); return ly_interval2scm (w); } +MAKE_SCHEME_CALLBACK (Spanner, kill_zero_spanned_time, 1); +SCM +Spanner::kill_zero_spanned_time (SCM grob) +{ + Spanner *me = unsmob_spanner (grob); + /* + Remove the line or hairpin at the start of the line. For + piano voice indicators, it makes no sense to have them at + the start of the line. + + I'm not sure what the official rules for glissandi are, but + usually the 2nd note of the glissando is "exact", so when playing + from the start of the line, there is no need to glide. + + From a typographical p.o.v. this makes sense, since the amount of + space left of a note at the start of a line is very small. + + --hwn. + + */ + if (me->get_bound (LEFT)->break_status_dir ()) + { + Interval_t moments = me->spanned_time (); + moments [LEFT].grace_part_ = 0; + if (moments.length () == Moment (0, 0)) + me->suicide (); + } + + return SCM_UNSPECIFIED; +} + +SCM +Spanner::get_cached_pure_property (SCM sym, int start, int end) +{ + // The pure property cache is indexed by (name start . end), where name is + // a symbol, and start and end are numbers referring to the starting and + // ending column ranks of the current line. + if (scm_hash_table_p (pure_property_cache_) == SCM_BOOL_F) + return SCM_UNDEFINED; + + SCM key = scm_cons (sym, scm_cons (scm_from_int (start), scm_from_int (end))); + return scm_hash_ref (pure_property_cache_, key, SCM_UNDEFINED); +} + +void +Spanner::cache_pure_property (SCM sym, int start, int end, SCM val) +{ + if (scm_hash_table_p (pure_property_cache_) == SCM_BOOL_F) + pure_property_cache_ = scm_c_make_hash_table (17); + + SCM key = scm_cons (sym, scm_cons (scm_from_int (start), scm_from_int (end))); + scm_hash_set_x (pure_property_cache_, key, val); +} + ADD_INTERFACE (Spanner, "Some objects are horizontally spanned between objects. For" " example, slurs, beams, ties, etc. These grobs form a subtype" @@ -432,7 +545,8 @@ ADD_INTERFACE (Spanner, " point of the spanner.", /* properties */ + "normalized-endpoints " "minimum-length " + "spanner-id " "to-barline " ); - diff --git a/lily/spring-smob.cc b/lily/spring-smob.cc index 4b20641e95..a679eeae5f 100644 --- a/lily/spring-smob.cc +++ b/lily/spring-smob.cc @@ -1,9 +1,20 @@ /* - spring.cc -- implement Spring + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "spring.hh" diff --git a/lily/spring.cc b/lily/spring.cc index 67d41c9c39..60bc0aec77 100644 --- a/lily/spring.cc +++ b/lily/spring.cc @@ -1,9 +1,20 @@ /* - spring.cc -- declare Spring + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2007--2011 Joe Neeman - (c) 2007--2009 Joe Neeman + 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 . */ #include "spring.hh" @@ -22,6 +33,8 @@ Spring::Spring (Real dist, Real min_dist) { distance_ = 1.0; min_distance_ = 1.0; + inverse_stretch_strength_ = 1.0; + inverse_compress_strength_ = 1.0; set_distance (dist); set_min_distance (min_dist); @@ -32,10 +45,20 @@ Spring::Spring (Real dist, Real min_dist) void Spring::update_blocking_force () { - if (distance_ == min_distance_) - blocking_force_ = 0.0; + if (min_distance_ > distance_) + blocking_force_ = (min_distance_ - distance_) / inverse_stretch_strength_; 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; } /* scale a spring, but in a way that doesn't violate min_distance */ @@ -43,8 +66,9 @@ void Spring::operator*= (Real r) { distance_ = max (min_distance_, distance_ * r); - inverse_compress_strength_ = distance_ - min_distance_; + inverse_compress_strength_ = max (0.0, distance_ - min_distance_); inverse_stretch_strength_ *= 0.8; + update_blocking_force (); } bool @@ -90,7 +114,6 @@ Spring::set_distance (Real d) programming_error ("insane spring distance requested, ignoring it"); else { - min_distance_ = min (min_distance_, d); distance_ = d; update_blocking_force (); } @@ -104,11 +127,16 @@ Spring::set_min_distance (Real d) else { min_distance_ = d; - distance_ = max (distance_, min_distance_); update_blocking_force (); } } +void +Spring::ensure_min_distance (Real d) +{ + set_min_distance (max (d, min_distance_)); +} + void Spring::set_inverse_stretch_strength (Real f) { @@ -116,6 +144,8 @@ Spring::set_inverse_stretch_strength (Real f) programming_error ("insane spring constant"); else inverse_stretch_strength_ = f; + + update_blocking_force (); } void @@ -147,8 +177,21 @@ Spring::set_blocking_force (Real f) void Spring::set_default_strength () { - inverse_compress_strength_ = distance_ - min_distance_; - inverse_stretch_strength_ = distance_ - min_distance_; + set_default_stretch_strength (); + set_default_compress_strength (); +} + +void +Spring::set_default_compress_strength () +{ + inverse_compress_strength_ = (distance_ >= min_distance_) ? distance_ - min_distance_ : 0; + update_blocking_force (); +} + +void +Spring::set_default_stretch_strength () +{ + inverse_stretch_strength_ = distance_; } Real @@ -157,11 +200,15 @@ Spring::length (Real f) const Real force = max (f, blocking_force_); Real inv_k = force < 0.0 ? inverse_compress_strength_ : inverse_stretch_strength_; - if (isinf (force)) + if (force == infinity_f) { programming_error ("cruelty to springs"); force = 0.0; } - return distance_ + force * inv_k; + // There is a corner case here: if min_distance_ is larger than + // distance_ but the spring is fixed, then inv_k will be zero + // and we need to make sure that we return min_distance_. + return max (min_distance_, distance_ + force * inv_k); } + diff --git a/lily/staff-collecting-engraver.cc b/lily/staff-collecting-engraver.cc index 29b05f4da1..29ddd8d70b 100644 --- a/lily/staff-collecting-engraver.cc +++ b/lily/staff-collecting-engraver.cc @@ -1,9 +1,20 @@ /* - staff-collecting-engraver.cc -- implement Staff_collecting_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "staff-symbol.hh" diff --git a/lily/staff-grouper-interface.cc b/lily/staff-grouper-interface.cc new file mode 100644 index 0000000000..803e1ee82d --- /dev/null +++ b/lily/staff-grouper-interface.cc @@ -0,0 +1,58 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2009--2011 Joe Neeman + + 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 . +*/ + +#include "staff-grouper-interface.hh" + +#include "hara-kiri-group-spanner.hh" +#include "page-layout-problem.hh" +#include "pointer-group-interface.hh" + +/* Checks whether the child grob is in the "interior" of this staff-grouper. + This is the case if the next spaceable, living child after the given one + belongs to the group. +*/ +bool +Staff_grouper_interface::maybe_pure_within_group (Grob *me, Grob *child, bool pure, int start, int end) +{ + extract_grob_set (me, "elements", elts); + + vector::const_iterator i = find (elts, child); + + if (i == elts.end ()) + return false; + + for (++i; i != elts.end (); ++i) + if (Page_layout_problem::is_spaceable (*i) + && ((pure && !Hara_kiri_group_spanner::request_suicide (*i, start, end)) + || (!pure && (*i)->is_live ()))) + return me == unsmob_grob ((*i)->get_object ("staff-grouper")); + + // If there was no spaceable, living child after me, I don't + // count as within the group. + return false; +} + +ADD_INTERFACE (Staff_grouper_interface, + "A grob that collects staves together.", + + /* properties */ + "staff-staff-spacing " + "staffgroup-staff-spacing " + ); + diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 756b5e3a81..bab8ae0257 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -1,17 +1,31 @@ /* - staff-performer.cc -- implement Staff_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ -#include "warn.hh" +#include + #include "audio-column.hh" #include "audio-item.hh" #include "audio-staff.hh" -#include "performer-group.hh" #include "context.hh" +#include "international.hh" +#include "performer-group.hh" +#include "warn.hh" /* Perform a staff. Individual notes should have their instrument (staff-wide) set, so we override play_element () @@ -22,9 +36,6 @@ public: TRANSLATOR_DECLARATIONS (Staff_performer); ~Staff_performer (); - string new_instrument_string (); - string instrument_string_; - protected: virtual void acknowledge_audio_element (Audio_element_info info); virtual void finalize (); @@ -33,13 +44,30 @@ protected: void stop_translation_timestep (); private: - Audio_staff *audio_staff_; + string new_instrument_string (); + void set_instrument_name (string voice); + void set_instrument (int channel, string voice); + int get_channel (string instrument); + Audio_staff* get_audio_staff (string voice); + Audio_staff* new_audio_staff (string voice); + Audio_dynamic* get_dynamic (string voice); + + string instrument_string_; + int channel_; Audio_instrument *instrument_; Audio_text *instrument_name_; Audio_text *name_; Audio_tempo *tempo_; + map staff_map_; + map channel_map_; + map dynamic_map_; + static map static_channel_map_; + static int channel_count_; }; +map Staff_performer::static_channel_map_; +int Staff_performer::channel_count_ = 0; + #include "translator.icc" ADD_TRANSLATOR (Staff_performer, @@ -56,12 +84,12 @@ ADD_TRANSLATOR (Staff_performer, ""); Staff_performer::Staff_performer () + : channel_ (-1) + , instrument_ (0) + , instrument_name_ (0) + , name_ (0) + , tempo_ (0) { - audio_staff_ = 0; - instrument_ = 0; - instrument_name_ = 0; - name_ = 0; - tempo_ = 0; } Staff_performer::~Staff_performer () @@ -71,50 +99,90 @@ Staff_performer::~Staff_performer () void Staff_performer::initialize () { - audio_staff_ = new Audio_staff; - name_ = new Audio_text (Audio_text::TRACK_NAME, context ()->id_string ()); +} - audio_staff_->add_audio_item (name_); - - announce_element (Audio_element_info (audio_staff_, 0)); - announce_element (Audio_element_info (name_, 0)); +Audio_staff* +Staff_performer::new_audio_staff (string voice) +{ + Audio_staff* audio_staff = new Audio_staff; + audio_staff->merge_unisons_ + = to_boolean (get_property ("midiMergeUnisons")); + string track_name = context ()->id_string () + ":" + voice; + if (track_name != ":") + { + name_ = new Audio_text (Audio_text::TRACK_NAME, context ()->id_string () + + ":" + voice); + audio_staff->add_audio_item (name_); + announce_element (Audio_element_info (name_, 0)); + } + announce_element (Audio_element_info (audio_staff, 0)); + staff_map_[voice] = audio_staff; + if (!instrument_string_.empty ()) + set_instrument (channel_, voice); + return audio_staff; } -void -Staff_performer::process_music () +Audio_staff* +Staff_performer::get_audio_staff (string voice) { - string str = new_instrument_string (); - if (str.length ()) + SCM channel_mapping = get_property ("midiChannelMapping"); + if (channel_mapping != ly_symbol2scm ("instrument") + && staff_map_.size ()) + return staff_map_.begin ()->second; + + map::const_iterator i = staff_map_.find (voice); + if (i != staff_map_.end ()) + return i->second; + map::const_iterator e = staff_map_.find (""); + if (staff_map_.size () == 1 && e != staff_map_.end ()) { - instrument_name_ = new Audio_text (Audio_text::INSTRUMENT_NAME, str); - announce_element (Audio_element_info (instrument_name_, 0)); - instrument_ = new Audio_instrument (str); - announce_element (Audio_element_info (instrument_, 0)); - - audio_staff_->add_audio_item (instrument_); - audio_staff_->add_audio_item (instrument_name_); - - /* - Have to be here before notes arrive into the staff. - */ + staff_map_[voice] = e->second; + return e->second; } + return new_audio_staff (voice); +} + +Audio_dynamic* +Staff_performer::get_dynamic (string voice) +{ + map::const_iterator i = dynamic_map_.find (voice); + if (i != dynamic_map_.end ()) + return i->second; + return 0; } void -Staff_performer::stop_translation_timestep () +Staff_performer::process_music () { - SCM proc = ly_lily_module_constant ("percussion?"); +} +void +Staff_performer::set_instrument (int channel, string voice) +{ + instrument_ = new Audio_instrument (instrument_string_); + instrument_->channel_ = channel; + announce_element (Audio_element_info (instrument_, 0)); + Audio_staff* audio_staff = get_audio_staff (voice); + audio_staff->add_audio_item (instrument_); + SCM proc = ly_lily_module_constant ("percussion?"); SCM drums = scm_call_1 (proc, ly_symbol2scm (instrument_string_.c_str ())); - audio_staff_->channel_ = (drums == SCM_BOOL_T ? 9 : -1); - if (name_) - { - name_ = 0; - } - if (tempo_) - { - tempo_ = 0; - } + audio_staff->percussion_ = (drums == SCM_BOOL_T); +} + +void +Staff_performer::set_instrument_name (string voice) +{ + instrument_name_ = new Audio_text (Audio_text::INSTRUMENT_NAME, + instrument_string_); + announce_element (Audio_element_info (instrument_name_, 0)); + get_audio_staff (voice)->add_audio_item (instrument_name_); +} + +void +Staff_performer::stop_translation_timestep () +{ + name_ = 0; + tempo_ = 0; instrument_name_ = 0; instrument_ = 0; } @@ -122,7 +190,8 @@ Staff_performer::stop_translation_timestep () void Staff_performer::finalize () { - audio_staff_ = 0; + staff_map_.clear (); + channel_map_.clear (); } string @@ -140,10 +209,85 @@ Staff_performer::new_instrument_string () return instrument_string_; } +int +Staff_performer::get_channel (string instrument) +{ + SCM channel_mapping = get_property ("midiChannelMapping"); + map& channel_map + = (channel_mapping != ly_symbol2scm ("instrument")) + ? channel_map_ + : static_channel_map_; + + if (channel_mapping == ly_symbol2scm ("staff") + && channel_ >= 0) + return channel_; + + map::const_iterator i = channel_map.find (instrument); + if (i != channel_map.end ()) + return i->second; + + int channel = (channel_mapping == ly_symbol2scm ("staff")) + ? channel_count_++ + : channel_map.size (); + + /* MIDI players tend to ignore instrument settings on channel + 10, the percussion channel. */ + if (channel % 16 == 9) + { + channel_map["percussion"] = channel++; + channel_count_++; + } + + if (channel > 15) + { + warning (_ ("MIDI channel wrapped around")); + warning (_ ("remapping modulo 16")); + channel = channel % 16; + } + + channel_map[instrument] = channel; + return channel; +} + void Staff_performer::acknowledge_audio_element (Audio_element_info inf) { if (Audio_item *ai = dynamic_cast (inf.elem_)) - audio_staff_->add_audio_item (ai); + { + /* map each context (voice) to its own track */ + Context* c = inf.origin_contexts (this)[0]; + string voice; + if (c->is_alias (ly_symbol2scm ("Voice"))) + voice = c->id_string (); + SCM channel_mapping = get_property ("midiChannelMapping"); + string str = new_instrument_string (); + if (channel_mapping != ly_symbol2scm ("instrument")) + channel_ = get_channel (voice); + else if (channel_ < 0 && str.empty ()) + channel_ = get_channel (str); + if (str.length ()) + { + if (channel_mapping != ly_symbol2scm ("voice")) + channel_ = get_channel (str); + set_instrument (channel_, voice); + set_instrument_name (voice); + } + ai->channel_ = channel_; + bool encode_dynamics_as_velocity_ = true; + if (encode_dynamics_as_velocity_) + { + if (Audio_dynamic *d = dynamic_cast (inf.elem_)) + { + dynamic_map_[voice] = d; + // Output volume as velocity: must disable Midi_dynamic output + d->silent_ = true; + } + if (Audio_dynamic *d = get_dynamic (voice)) + if (Audio_note *n = dynamic_cast (inf.elem_)) + n->dynamic_ = d; + } + Audio_staff* audio_staff = get_audio_staff (voice); + audio_staff->add_audio_item (ai); + } } diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc index 3587f70c63..ff064b5c0f 100644 --- a/lily/staff-spacing.cc +++ b/lily/staff-spacing.cc @@ -1,9 +1,20 @@ /* - staff-spacing.cc -- implement Staff_spacing + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2001--2011 Han-Wen Nienhuys - (c) 2001--2009 Han-Wen Nienhuys + 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 . */ #include "staff-spacing.hh" diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index 5d70855273..55e118245f 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -1,9 +1,20 @@ /* - staff-symbol-engraver.cc -- implement Staff_symbol_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -39,7 +50,11 @@ protected: Staff_symbol_engraver::~Staff_symbol_engraver () { - assert (!span_); + if (span_) + { + // Somehow finalize() was not called? + programming_error ("Have a pending spanner in destructor."); + } } Staff_symbol_engraver::Staff_symbol_engraver () @@ -47,8 +62,7 @@ Staff_symbol_engraver::Staff_symbol_engraver () finished_span_ = 0; first_start_ = true; span_ = 0; - span_events_[LEFT] = 0; - span_events_[RIGHT] = 0; + span_events_.set (0, 0); } IMPLEMENT_TRANSLATOR_LISTENER (Staff_symbol_engraver, staff_span); @@ -59,7 +73,7 @@ Staff_symbol_engraver::listen_staff_span (Stream_event *ev) if (d) ASSIGN_EVENT_ONCE (span_events_[d], ev); else - programming_error (_ ("staff-span event has no direction")); + programming_error ("staff-span event has no direction"); } void @@ -97,12 +111,12 @@ Staff_symbol_engraver::stop_spanner () if (!finished_span_->get_bound (RIGHT)) finished_span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn"))); - + announce_end_grob (finished_span_, span_events_[STOP] ? span_events_[STOP]->self_scm () : SCM_EOL); - + finished_span_ = 0; } @@ -111,12 +125,9 @@ Staff_symbol_engraver::stop_translation_timestep () { if ((span_events_[START] || first_start_) && span_) - { - first_start_ = false; - } + first_start_ = false; - span_events_[START] = 0; - span_events_[STOP] = 0; + span_events_.set (0, 0); stop_spanner (); } @@ -134,10 +145,6 @@ Staff_symbol_engraver::finalize () void Staff_symbol_engraver::acknowledge_grob (Grob_info s) { - /* - Perhaps should try to take SeparationItem as bound of the staff - symbol? - */ if (span_ || finished_span_) { Spanner *my = span_ ? span_ : finished_span_; diff --git a/lily/staff-symbol-referencer-scheme.cc b/lily/staff-symbol-referencer-scheme.cc index ebf2686777..e954dd37fe 100644 --- a/lily/staff-symbol-referencer-scheme.cc +++ b/lily/staff-symbol-referencer-scheme.cc @@ -1,19 +1,30 @@ /* - staff-symbol-referencer-scheme.cc -- implement Staff_symbol_referencer bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "grob.hh" -#include "staff-symbol-referencer.hh" -#include "staff-symbol.hh" #include "libc-extension.hh" +#include "staff-symbol.hh" +#include "staff-symbol-referencer.hh" LY_DEFINE (ly_grob_staff_position, "ly:grob-staff-position", - 1, 0, 0, (SCM sg), - "Return the Y-position of @var{sg} relative to the staff.") + 1, 0, 0, (SCM sg), + "Return the Y-position of @var{sg} relative to the staff.") { LY_ASSERT_SMOB (Grob, sg, 1); Grob *g = unsmob_grob (sg); @@ -27,7 +38,8 @@ LY_DEFINE (ly_grob_staff_position, "ly:grob-staff-position", LY_DEFINE (ly_position_on_line_p, "ly:position-on-line?", 2, 0, 0, (SCM sg, SCM spos), - "Return whether @var{pos} is on a line of the staff associated with the the grob @var{sg} (even on an extender line).") + "Return whether @var{spos} is on a line of the staff associated" + " with the grob @var{sg} (even on an extender line).") { LY_ASSERT_SMOB (Grob, sg, 1); LY_ASSERT_TYPE (scm_is_number, spos, 2); @@ -40,10 +52,22 @@ LY_DEFINE (ly_position_on_line_p, "ly:position-on-line?", LY_DEFINE (ly_staff_symbol_line_thickness, "ly:staff-symbol-line-thickness", 1, 0, 0, (SCM grob), - "Returns the line-thickness of the staff associated with @var{grob}.") + "Returns the @code{line-thickness} of the staff associated" + " with @var{grob}.") { LY_ASSERT_SMOB (Grob, grob, 1); Grob *g = unsmob_grob (grob); Real thickness = Staff_symbol_referencer::line_thickness (g); return scm_from_double (thickness); } + +LY_DEFINE (ly_staff_symbol_staff_space, "ly:staff-symbol-staff-space", + 1, 0, 0, (SCM grob), + "Returns the @code{staff-space} of the staff associated" + " with @var{grob}.") +{ + LY_ASSERT_SMOB (Grob, grob, 1); + Grob *g = unsmob_grob (grob); + Real staff_space = Staff_symbol_referencer::staff_space (g); + return scm_from_double (staff_space); +} diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index 17bd099fc6..2939e0c061 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -1,9 +1,20 @@ /* - staff-symbol-referencer.cc -- implement Staff_symbol_referencer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1999--2011 Han-Wen Nienhuys - (c) 1999--2009 Han-Wen Nienhuys + 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 . */ #include "staff-symbol-referencer.hh" @@ -70,9 +81,9 @@ Staff_symbol_referencer::get_position (Grob *me) if (st && c) { Real y = me->relative_coordinate (c, Y_AXIS) - - st->relative_coordinate (c, Y_AXIS); - - p += 2.0 * y / Staff_symbol::staff_space (st); + - st->relative_coordinate (c, Y_AXIS); + Real space = Staff_symbol::staff_space (st); + p = (space == 0) ? 0 : 2.0 * y / space; return p; } else if (!st) @@ -142,7 +153,6 @@ Staff_symbol_referencer::set_position (Grob *me, Real p) oldpos = get_position (me); } - Real ss = Staff_symbol_referencer::staff_space (me); me->translate_axis ((p - oldpos) * ss * 0.5, Y_AXIS); } diff --git a/lily/staff-symbol.cc b/lily/staff-symbol.cc index 0f1d60aa62..d1629dfb24 100644 --- a/lily/staff-symbol.cc +++ b/lily/staff-symbol.cc @@ -1,9 +1,20 @@ /* - staff-symbol.cc -- implement Staff_symbol + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "staff-symbol.hh" @@ -197,6 +208,24 @@ Staff_symbol::on_line (Grob *me, int pos) return ((abs (pos + line_count (me)) % 2) == 1); } +Interval +Staff_symbol::line_span (Grob *me) +{ + SCM line_positions = me->get_property ("line-positions"); + Interval iv; + + if (scm_is_pair (line_positions)) + for (SCM s = line_positions; scm_is_pair (s); s = scm_cdr (s)) + iv.add_point (scm_to_double (scm_car (s))); + else + { + int count = line_count (me); + return Interval (-count + 1, count - 1); + } + + return iv; +} + ADD_INTERFACE (Staff_symbol, "This spanner draws the lines of a staff. A staff symbol" " defines a vertical unit, the @emph{staff space}. Quantities" diff --git a/lily/stanza-number-align-engraver.cc b/lily/stanza-number-align-engraver.cc index 494e64842f..1acf51f362 100644 --- a/lily/stanza-number-align-engraver.cc +++ b/lily/stanza-number-align-engraver.cc @@ -1,9 +1,20 @@ /* - stanza-number-align-engraver.cc -- implement Stanza_number_align_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2011 Han-Wen Nienhuys - (c) 2004--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" diff --git a/lily/stanza-number-engraver.cc b/lily/stanza-number-engraver.cc index 3434f06167..0737e969df 100644 --- a/lily/stanza-number-engraver.cc +++ b/lily/stanza-number-engraver.cc @@ -1,9 +1,20 @@ /* - lyric-number-engraver.cc -- implement Stanza_number_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys , Glen Prideaux - (c) 2000--2009 Han-Wen Nienhuys , Glen Prideaux + 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 . */ #include "engraver.hh" diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index 7db456006c..e21d796765 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -1,9 +1,20 @@ /* - stem-engraver.cc -- implement Stem_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -58,14 +69,14 @@ Stem_engraver::make_stem (Grob_info gi) if (tremolo_ev_) { /* Stem tremolo is never applied to a note by default, - is must me requested. But there is a default for the + it must be requested. But there is a default for the tremolo value: c4:8 c c: - the first and last (quarter) note bothe get one tremolo flag. */ + the first and last (quarter) note both get one tremolo flag. */ int requested_type - = scm_to_int (tremolo_ev_->get_property ("tremolo-type")); + = robust_scm2int (tremolo_ev_->get_property ("tremolo-type"), 0); SCM f = get_property ("tremoloFlags"); if (!requested_type) { @@ -123,11 +134,13 @@ Stem_engraver::acknowledge_rhythmic_head (Grob_info gi) if (!stem_) make_stem (gi); - if (Stem::duration_log (stem_) != d->duration_log ()) + int ds = Stem::duration_log (stem_); + + if (ds != d->duration_log ()) { - // FIXME: - gi.event_cause ()->origin ()->warning (_f ("adding note head to incompatible stem (type = %d)", - 1 << Stem::duration_log (stem_))); + gi.event_cause ()->origin ()->warning (_f ("adding note head to incompatible stem (type = %d/%d)", + ds < 0 ? 1 << -ds : 1, + ds > 0 ? 1 << ds : 1)); gi.event_cause ()->origin ()->warning (_ ("maybe input should specify polyphonic voices")); } diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index ce9e3529b6..4d1678889a 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -1,9 +1,20 @@ /* - stem-tremolo.cc -- implement Stem_tremolo + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "stem-tremolo.hh" diff --git a/lily/stem.cc b/lily/stem.cc index 8ba6f2b6c9..04bc410592 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -1,9 +1,7 @@ /* - stem.cc -- implement Stem + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1996--2009 Han-Wen Nienhuys + Copyright (C) 1996--2011 Han-Wen Nienhuys Jan Nieuwenhuizen TODO: This is way too hairy @@ -11,6 +9,19 @@ TODO: fix naming. Stem-end, chord-start, etc. is all confusing naming. + + 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 . */ #include "stem.hh" @@ -244,7 +255,13 @@ Stem::pure_height (SCM smob, if (!to_boolean (me->get_property ("cross-staff"))) { - Real len = scm_to_double (calc_length (smob)) * ss / 2; + Real len_in_halfspaces; + SCM user_set_len_scm = me->get_property_data ("length"); + if (scm_is_number (user_set_len_scm)) + len_in_halfspaces = scm_to_double (user_set_len_scm); + else + len_in_halfspaces = scm_to_double (calc_length (smob)); + Real len = len_in_halfspaces * ss / 2; Direction dir = get_grob_direction (me); Interval hp = head_positions (me); @@ -254,7 +271,10 @@ Stem::pure_height (SCM smob, iv = Interval (-len, 0); if (!hp.is_empty ()) - iv.translate (hp[dir] * ss / 2); + { + iv.translate (hp[dir] * ss / 2); + iv.add_point (hp[-dir] * ss / 2); + } /* extend the stem (away from the head) to cover the staff */ if (dir == UP) @@ -311,6 +331,7 @@ Stem::calc_length (SCM smob) int durlog = duration_log (me); Real ss = Staff_symbol_referencer::staff_space (me); + Real staff_rad = Staff_symbol_referencer::staff_radius (me); Real length = 7; SCM s = ly_assoc_get (ly_symbol2scm ("lengths"), details, SCM_EOL); if (scm_is_pair (s)) @@ -326,11 +347,25 @@ Stem::calc_length (SCM smob) SCM sshorten = ly_assoc_get (ly_symbol2scm ("stem-shorten"), details, SCM_EOL); SCM scm_shorten = scm_is_pair (sshorten) ? robust_list_ref (max (duration_log (me) - 2, 0), sshorten) : SCM_EOL; - Real shorten = 2* robust_scm2double (scm_shorten, 0); - - /* On boundary: shorten only half */ - if (abs (head_positions (me)[dir]) <= 1) - shorten *= 0.5; + Real shorten_property = 2 * robust_scm2double (scm_shorten, 0); + /* change in length between full-size and shortened stems is executed gradually. + "transition area" = stems between full-sized and fully-shortened. + */ + Real quarter_stem_length = 2 * scm_to_double (robust_list_ref (0, s)); + /* shortening_step = difference in length between consecutive stem lengths + in transition area. The bigger the difference between full-sized + and shortened stems, the bigger shortening_step is. + (but not greater than 1/2 and not smaller than 1/4). + value 6 is heuristic; it determines the suggested transition slope steepnesas. + */ + Real shortening_step = min (max (0.25, (shorten_property / 6)), 0.5); + /* Shortening of unflagged stems should begin on the first stem that sticks + more than 1 staffspace (2 units) out of the staff. + Shortening of flagged stems begins in the same moment as unflagged ones, + but not earlier than on the middle line note. + */ + Real which_step = (min (1.0, quarter_stem_length - (2 * staff_rad) - 2.0)) + abs(hp[dir]); + Real shorten = min (max (0.0, (shortening_step * which_step)), shorten_property); length -= shorten; } @@ -557,7 +592,7 @@ Stem::height (SCM smob) programming_error ("no stem direction"); dir = UP; } - iv[dir] += dir * Beam::get_thickness (beam) * 0.5; + iv[dir] += dir * Beam::get_beam_thickness (beam) * 0.5; } return ly_interval2scm (iv); @@ -740,7 +775,7 @@ Stem::print (SCM smob) else if (stemlet) { Real beam_translation = Beam::get_beam_translation (beam); - Real beam_thickness = Beam::get_thickness (beam); + Real beam_thickness = Beam::get_beam_thickness (beam); int beam_count = beam_multiplicity (me).length () + 1; y2 -= d @@ -884,7 +919,7 @@ Stem::calc_stem_info (SCM smob) } Real beam_translation = Beam::get_beam_translation (beam); - Real beam_thickness = Beam::get_thickness (beam); + Real beam_thickness = Beam::get_beam_thickness (beam); int beam_count = Beam::get_direction_beam_count (beam, my_dir); Real length_fraction = robust_scm2double (me->get_property ("length-fraction"), 1.0); @@ -894,21 +929,26 @@ Stem::calc_stem_info (SCM smob) SCM lengths = ly_assoc_get (ly_symbol2scm ("beamed-lengths"), details, SCM_EOL); Real ideal_length - = scm_to_double (robust_list_ref (beam_count - 1, lengths)) - * staff_space - * length_fraction - - /* stem only extends to center of beam - */ - - 0.5 * beam_thickness; + = (scm_is_pair (lengths) + ? (scm_to_double (robust_list_ref (beam_count - 1, lengths)) + * staff_space + * length_fraction + /* + stem only extends to center of beam + */ + - 0.5 * beam_thickness) + : 0.0); /* Condition: sane minimum free stem length (chord to beams) */ - lengths = ly_assoc_get (ly_symbol2scm ("beamed-minimum-free-lengths"), details, SCM_EOL); + lengths = ly_assoc_get (ly_symbol2scm ("beamed-minimum-free-lengths"), + details, SCM_EOL); Real ideal_minimum_free - = scm_to_double (robust_list_ref (beam_count - 1, lengths)) - * staff_space - * length_fraction; + = (scm_is_pair (lengths) + ? (scm_to_double (robust_list_ref (beam_count - 1, lengths)) + * staff_space + * length_fraction) + : 0.0); Real height_of_my_trem = 0.0; Grob *trem = unsmob_grob (me->get_object ("tremolo-flag")); @@ -925,7 +965,7 @@ Stem::calc_stem_info (SCM smob) It seems that also for ideal minimum length, we must use the maximum beam count (for this direction): - \score{ \notes\relative c''{ [a8 a32] }} + \score { \relative c'' { a8[ a32] } } must be horizontal. */ Real height_of_my_beams = beam_thickness @@ -979,9 +1019,11 @@ Stem::calc_stem_info (SCM smob) details, SCM_EOL); Real minimum_free - = scm_to_double (robust_list_ref (beam_count - 1, bemfl)) - * staff_space - * length_fraction; + = (scm_is_pair (bemfl) + ? (scm_to_double (robust_list_ref (beam_count - 1, bemfl)) + * staff_space + * length_fraction) + : 0.0); Real minimum_length = max (minimum_free, height_of_my_trem) + height_of_my_beams diff --git a/lily/stencil-expression.cc b/lily/stencil-expression.cc index b1f47997dd..d5926c6205 100644 --- a/lily/stencil-expression.cc +++ b/lily/stencil-expression.cc @@ -1,10 +1,20 @@ /* - stencil-expression.cc -- keep track of which expressions are valid - stencil exps. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "stencil.hh" diff --git a/lily/stencil-interpret.cc b/lily/stencil-interpret.cc index 9b9ed4d6a3..4f8c6bbc8b 100644 --- a/lily/stencil-interpret.cc +++ b/lily/stencil-interpret.cc @@ -1,9 +1,20 @@ /* - stencil-interpret.cc -- implement Stencil expression interpreting + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "stencil.hh" @@ -26,6 +37,8 @@ interpret_stencil_expression (SCM expr, interpret_stencil_expression (scm_force (scm_cadr (expr)), func, func_arg, o); return; } + if (head == ly_symbol2scm ("footnote")) + return; if (head == ly_symbol2scm ("translate-stencil")) { o += ly_scm2offset (scm_cadr (expr)); @@ -75,6 +88,22 @@ interpret_stencil_expression (SCM expr, interpret_stencil_expression (scm_caddr (expr), func, func_arg, o); (*func) (func_arg, scm_list_4 (ly_symbol2scm ("resetrotation"), angle, x, y)); + return; + } + else if (head == ly_symbol2scm ("scale-stencil")) + { + SCM args = scm_cadr (expr); + SCM x_scale = scm_car (args); + SCM y_scale = scm_cadr (args); + Offset unscaled = o.scale (Offset (1 / scm_to_double (x_scale), + 1 / scm_to_double (y_scale))); + + (*func) (func_arg, scm_list_3 (ly_symbol2scm ("setscale"), x_scale, + y_scale)); + interpret_stencil_expression (scm_caddr (expr), func, func_arg, + unscaled); + (*func) (func_arg, scm_list_1 (ly_symbol2scm ("resetscale"))); + return; } else diff --git a/lily/stencil-scheme.cc b/lily/stencil-scheme.cc index c2d9d8e961..0e7f0cd8c7 100644 --- a/lily/stencil-scheme.cc +++ b/lily/stencil-scheme.cc @@ -1,9 +1,20 @@ /* - stencil-scheme.cc -- implement Stencil scheme accessors + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ @@ -379,3 +390,20 @@ LY_DEFINE (ly_all_stencil_expressions, "ly:all-stencil-expressions", { return all_stencil_heads (); } + +LY_DEFINE (ly_stencil_scale, "ly:stencil-scale", + 3, 0, 0, (SCM stil, SCM x, SCM y), + "Scale @var{stil} using the horizontal and vertical scaling" + " factors @var{x} and @var{y}.") +{ + Stencil *s = unsmob_stencil (stil); + LY_ASSERT_SMOB (Stencil, stil, 1); + LY_ASSERT_TYPE (scm_is_number, x, 2); + LY_ASSERT_TYPE (scm_is_number, y, 3); + + SCM new_s = s->smobbed_copy (); + Stencil *q = unsmob_stencil (new_s); + + q->scale (scm_to_double (x), scm_to_double (y)); + return new_s; +} diff --git a/lily/stencil.cc b/lily/stencil.cc index c241fa18c2..6a094d2890 100644 --- a/lily/stencil.cc +++ b/lily/stencil.cc @@ -1,9 +1,20 @@ /* - stencil.cc -- implement Stencil + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "stencil.hh" @@ -177,6 +188,17 @@ Stencil::translate_axis (Real x, Axis a) translate (o); } +void +Stencil::scale (Real x, Real y) +{ + expr_ = scm_list_3 (ly_symbol2scm ("scale-stencil"), + scm_list_2 (scm_from_double (x), + scm_from_double (y)), + expr_); + dim_[X_AXIS] *= x; + dim_[Y_AXIS] *= y; +} + void Stencil::add_stencil (Stencil const &s) { diff --git a/lily/stream-event-scheme.cc b/lily/stream-event-scheme.cc index 6ce5477af3..99f8a3c832 100644 --- a/lily/stream-event-scheme.cc +++ b/lily/stream-event-scheme.cc @@ -1,13 +1,31 @@ /* - stream-event.cc -- implement Scheme bindings for Stream_event + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Erik Sandberg - (c) 2006--2009 Erik Sandberg + 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 . */ #include "stream-event.hh" +LY_DEFINE (ly_stream_event_p, "ly:stream-event?", + 1, 0, 0, (SCM obj), + "Is @code{@var{obj}} a @code{Stream_event} object?") +{ + return scm_from_bool (unsmob_stream_event (obj)); +} + LY_DEFINE (ly_make_stream_event, "ly:make-stream-event", 1, 1, 0, (SCM cl, SCM proplist), "Create a stream event of class @var{cl} with the given" @@ -30,7 +48,7 @@ LY_DEFINE (ly_event_property, "ly:event-property", "Get the property @var{sym} of stream event @var{mus}." " If @var{sym} is undefined, return @code{'()}.") { - LY_ASSERT_SMOB (Stream_event, sev, 1); + LY_ASSERT_TYPE (unsmob_stream_event, sev, 1); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); Stream_event *e = unsmob_stream_event (sev); @@ -42,7 +60,7 @@ LY_DEFINE (ly_event_set_property_x, "ly:event-set-property!", 3, 0, 0, (SCM ev, SCM sym, SCM val), "Set property @var{sym} in event @var{ev} to @var{val}.") { - LY_ASSERT_SMOB (Stream_event, ev, 1); + LY_ASSERT_TYPE (unsmob_stream_event, ev, 1); LY_ASSERT_TYPE (ly_is_symbol, sym, 2); return ly_prob_set_property_x (ev, sym, val); diff --git a/lily/stream-event.cc b/lily/stream-event.cc index 12219884b1..840695301a 100644 --- a/lily/stream-event.cc +++ b/lily/stream-event.cc @@ -1,9 +1,20 @@ /* - stream-event.cc -- implement Stream_event + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Erik Sandberg - (c) 2005-2006 Erik Sandberg + 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 . */ #include "stream-event.hh" @@ -62,8 +73,6 @@ Stream_event::internal_in_event_class (SCM class_name) return scm_c_memq (class_name, cl) != SCM_BOOL_F; } -IMPLEMENT_TYPE_P (Stream_event, "ly:stream-event?"); - MAKE_SCHEME_CALLBACK (Stream_event, undump, 1); MAKE_SCHEME_CALLBACK (Stream_event, dump, 1); diff --git a/lily/string-number-engraver.cc b/lily/string-number-engraver.cc deleted file mode 100644 index 3eb0b538af..0000000000 --- a/lily/string-number-engraver.cc +++ /dev/null @@ -1,52 +0,0 @@ -/* - string-number-engraver.cc -- implement String_number_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2005--2009 Han-Wen Nienhuys -*/ - -#include "engraver.hh" - -// Junk String numbers. -class String_number_engraver : public Engraver -{ -public: - TRANSLATOR_DECLARATIONS (String_number_engraver); -protected: - virtual bool try_music (Music *m); -}; - -bool -String_number_engraver::try_music (Music *) -{ - return true; -} - -String_number_engraver::String_number_engraver () -{ -} - -/* - TODO: string numbers are printed right of the note circled. This - engraver should provide this functionality. -*/ - -#include "translator.icc" - -ADD_TRANSLATOR (String_number_engraver, - /* doc */ - "Swallow string number events. The purpose of this engraver" - " is to process tablatures for normal notation. To provent" - " warnings for unprocessed string number events to obscure" - " real error messages, this engraver swallows them all.", - - /* create */ - "", - - /* read */ - "", - - /* write */ - "" - ); diff --git a/lily/sustain-pedal.cc b/lily/sustain-pedal.cc index 4e2a8f529c..74ac54930a 100644 --- a/lily/sustain-pedal.cc +++ b/lily/sustain-pedal.cc @@ -1,9 +1,20 @@ /* - sustain-pedal.cc -- implement Sustain_pedal + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "grob.hh" #include "stencil.hh" diff --git a/lily/swallow-engraver.cc b/lily/swallow-engraver.cc deleted file mode 100644 index f6cf49cdcb..0000000000 --- a/lily/swallow-engraver.cc +++ /dev/null @@ -1,45 +0,0 @@ -/* - swallow-engraver.cc -- implement Swallow_engraver - - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys -*/ - -#include "engraver.hh" - -class Swallow_engraver : public Engraver -{ -public: - TRANSLATOR_DECLARATIONS (Swallow_engraver); -protected: - bool try_music (Music *); -}; - -bool -Swallow_engraver::try_music (Music *) -{ - return true; -} - -Swallow_engraver::Swallow_engraver () -{ -} - -#include "translator.icc" - -ADD_TRANSLATOR (Swallow_engraver, - /* doc */ - "This engraver swallows everything given to it silently." - " The purpose of this is to prevent spurious @q{event junked}" - " warnings.", - - /* create */ - "", - - /* read */ - "", - - /* write */ - "" - ); diff --git a/lily/swallow-perf.cc b/lily/swallow-perf.cc deleted file mode 100644 index f148699c86..0000000000 --- a/lily/swallow-perf.cc +++ /dev/null @@ -1,46 +0,0 @@ -/* - swallow-performer.cc -- implement Swallow_performer - - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys -*/ - -#include "performer.hh" -#include "music.hh" - -class Swallow_performer : public Performer -{ -public: - TRANSLATOR_DECLARATIONS (Swallow_performer); -protected: - virtual bool try_music (Music *); -}; - -bool -Swallow_performer::try_music (Music *m) -{ - if (m->is_mus_type ("melisma-playing-event")) - return false; - else - return true; -} - -Swallow_performer::Swallow_performer () -{} - -#include "translator.icc" - -ADD_TRANSLATOR (Swallow_performer, - /* doc */ - "", - - /* create */ - "", - - /* read */ - "", - - /* write */ - "" - ); diff --git a/lily/system-scheme.cc b/lily/system-scheme.cc deleted file mode 100644 index 37ec8b0549..0000000000 --- a/lily/system-scheme.cc +++ /dev/null @@ -1,43 +0,0 @@ -/* - system-scheme.cc -- implement scheme bindings to System - - source file of the GNU LilyPond music typesetter - - (c) 2007--2009 Joe Neeman -*/ - -#include "align-interface.hh" -#include "pointer-group-interface.hh" -#include "system.hh" - - -LY_DEFINE (ly_system_print, "ly:system-print", - 1, 0, 0, (SCM system), - "Draw the system and return the prob containing its" - " stencil.") -{ - Grob *me = unsmob_grob (system); - System *me_system = dynamic_cast (me); - SCM_ASSERT_TYPE (me, system, SCM_ARG1, __FUNCTION__, "grob"); - - return me_system->get_paper_system (); -} - -LY_DEFINE (ly_system_stretch, "ly:system-stretch", - 2, 0, 0, (SCM system, SCM amount_scm), - "Stretch the system vertically by the given amount." - " This must be called before the system is drawn (for example" - " with @code{ly:system-print}).") -{ - Grob *me = unsmob_grob (system); - Real amount = robust_scm2double (amount_scm, 0.0); - - extract_grob_set (me, "elements", elts); - for (vsize i = 0; i < elts.size (); i++) - if (Align_interface::has_interface (elts[i])) - { - Align_interface::stretch (elts[i], amount, Y_AXIS); - break; - } - return SCM_UNDEFINED; -} diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index ea4fcf38a8..a0bc503925 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -1,32 +1,40 @@ /* - System-start-delimiter-engraver.cc -- implement - System_start_delimiter_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" - -#include "side-position-interface.hh" -#include "system-start-delimiter.hh" -#include "staff-symbol.hh" -#include "pointer-group-interface.hh" -#include "paper-column.hh" #include "output-def.hh" +#include "paper-column.hh" +#include "pointer-group-interface.hh" +#include "side-position-interface.hh" #include "spanner.hh" +#include "staff-symbol.hh" +#include "system-start-delimiter.hh" struct Bracket_nesting_node { public: - virtual ~Bracket_nesting_node (){} + virtual ~Bracket_nesting_node () {} virtual bool add_staff (Grob *) { return false; } - virtual void add_support (Grob *) { } - virtual void set_bound (Direction, Grob *){} - virtual void set_nesting_support (Grob*) {} - virtual void create_grobs (Engraver*, SCM) {} + virtual void add_support (Grob *) {} + virtual void set_bound (Direction, Grob *) {} + virtual void set_nesting_support (Grob *) {} + virtual void create_grobs (Engraver *, SCM) {} }; struct Bracket_nesting_group : public Bracket_nesting_node @@ -35,12 +43,12 @@ struct Bracket_nesting_group : public Bracket_nesting_node vector children_; SCM symbol_; - void from_list (SCM ); + void from_list (SCM); virtual void add_support (Grob *grob); virtual bool add_staff (Grob *grob); - virtual void set_nesting_support (Grob*); + virtual void set_nesting_support (Grob *); virtual void set_bound (Direction, Grob *grob); - virtual void create_grobs (Engraver*, SCM); + virtual void create_grobs (Engraver *, SCM); ~Bracket_nesting_group (); Bracket_nesting_group (); }; @@ -76,12 +84,11 @@ void Bracket_nesting_group::create_grobs (Engraver *engraver, SCM default_type) { SCM type = scm_is_symbol (symbol_) ? symbol_ : default_type; - delimiter_ = engraver->make_spanner (ly_symbol2string (type).c_str (), SCM_EOL); + delimiter_ = engraver->make_spanner (ly_symbol2string (type).c_str (), + SCM_EOL); for (vsize i = 0 ; i < children_.size (); i++) - { - children_[i]->create_grobs (engraver, default_type); - } + children_[i]->create_grobs (engraver, default_type); } void @@ -89,9 +96,7 @@ Bracket_nesting_group::add_support (Grob *g) { Side_position_interface::add_support (g, delimiter_); for (vsize i = 0 ; i < children_.size (); i++) - { - children_[i]->add_support (g); - } + children_[i]->add_support (g); } Bracket_nesting_group::~Bracket_nesting_group () @@ -104,9 +109,7 @@ Bracket_nesting_group::set_bound (Direction d, Grob *g) { delimiter_->set_bound (d, g); for (vsize i = 0 ; i < children_.size (); i++) - { - children_[i]->set_bound (d, g); - } + children_[i]->set_bound (d, g); } void @@ -114,11 +117,9 @@ Bracket_nesting_group::set_nesting_support (Grob *parent) { if (parent) Side_position_interface::add_support (delimiter_, parent); - + for (vsize i = 0 ; i < children_.size (); i++) - { - children_[i]->set_nesting_support (delimiter_); - } + children_[i]->set_nesting_support (delimiter_); } @@ -137,13 +138,10 @@ Bracket_nesting_group::from_list (SCM x) else if (entry == ly_symbol2scm ("SystemStartBrace") || entry == ly_symbol2scm ("SystemStartBracket") || entry == ly_symbol2scm ("SystemStartBar") - || entry == ly_symbol2scm ("SystemStartSquare") - ) + || entry == ly_symbol2scm ("SystemStartSquare")) symbol_ = entry; else - { - children_.push_back (new Bracket_nesting_staff (0)); - } + children_.push_back (new Bracket_nesting_staff (0)); } } @@ -154,11 +152,11 @@ Bracket_nesting_group::add_staff (Grob *grob) { if (children_[i]->add_staff (grob)) { - Pointer_group_interface::add_grob (delimiter_, ly_symbol2scm ("elements"), grob); + Pointer_group_interface::add_grob (delimiter_, + ly_symbol2scm ("elements"), grob); return true; } } - return false; } @@ -174,9 +172,8 @@ public: protected: Bracket_nesting_group *nesting_; - + DECLARE_ACKNOWLEDGER (system_start_delimiter); - DECLARE_ACKNOWLEDGER (system_start_text); DECLARE_ACKNOWLEDGER (staff_symbol); void process_music (); @@ -199,7 +196,8 @@ System_start_delimiter_engraver::process_music () nesting_->from_list (hierarchy); nesting_->create_grobs (this, delimiter_name); - nesting_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); + nesting_->set_bound (LEFT, + unsmob_grob (get_property ("currentCommandColumn"))); } } @@ -229,14 +227,6 @@ System_start_delimiter_engraver::acknowledge_staff_symbol (Grob_info inf) } } - - -void -System_start_delimiter_engraver::acknowledge_system_start_text (Grob_info inf) -{ - nesting_->add_support (inf.grob ()); -} - void System_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info inf) { @@ -247,7 +237,6 @@ System_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info i ADD_ACKNOWLEDGER (System_start_delimiter_engraver, staff_symbol); ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_delimiter); -ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_text); ADD_TRANSLATOR (System_start_delimiter_engraver, /* doc */ diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 62c2bb5271..3f671e3316 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -1,9 +1,20 @@ /* - system-start-delimiter.cc -- implement System_start_delimiter + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "system-start-delimiter.hh" @@ -22,11 +33,7 @@ Stencil System_start_delimiter::staff_bracket (Grob *me, Real height) { - SCM fam = scm_cons (ly_symbol2scm ("font-encoding"), - ly_symbol2scm ("fetaMusic")); - - SCM alist = scm_list_n (fam, SCM_UNDEFINED); - Font_metric *fm = select_font (me->layout (), scm_list_n (alist, SCM_UNDEFINED)); + Font_metric *fm = Font_interface::get_default_font (me); Drul_array tips (fm->find_by_name ("brackettips.down"), fm->find_by_name ("brackettips.up")); @@ -137,15 +144,11 @@ Stencil System_start_delimiter::staff_brace (Grob *me, Real y) { Font_metric *fm = 0; - /* We go through the style sheet to lookup the font file - name. This is better than using find_font directly, - esp. because that triggers mktextfm for non-existent - fonts. */ - SCM fam = scm_cons (ly_symbol2scm ("font-encoding"), - ly_symbol2scm ("fetaBraces")); - SCM alist = scm_list_n (fam, SCM_UNDEFINED); - fm = select_font (me->layout (), scm_list_n (alist, SCM_UNDEFINED)); + /* + Find the default brace font if the user overrides it. + */ + fm = Font_interface::get_default_font (me); int lo = 0; @@ -156,7 +159,7 @@ System_start_delimiter::staff_brace (Grob *me, Real y) do { int cmp = (lo + hi) / 2; - b = fm->get_indexed_char (cmp); + b = fm->get_indexed_char_dimensions (cmp); if (b[Y_AXIS].is_empty () || b[Y_AXIS].length () > y) hi = cmp; else diff --git a/lily/system-start-text.cc b/lily/system-start-text.cc deleted file mode 100644 index 33b0f68f40..0000000000 --- a/lily/system-start-text.cc +++ /dev/null @@ -1,121 +0,0 @@ -/* - system-start-text.cc -- implement System_start_text - - source file of the GNU LilyPond music typesetter - - (c) 2006--2009 Han-Wen Nienhuys - -*/ - -#include "text-interface.hh" -#include "pointer-group-interface.hh" -#include "output-def.hh" -#include "font-interface.hh" -#include "spanner.hh" -#include "stencil.hh" -#include "item.hh" - -class System_start_text -{ -public: - static Stencil get_stencil (Grob *); - DECLARE_GROB_INTERFACE (); - - DECLARE_SCHEME_CALLBACK (print, (SCM)); -}; - -Stencil -System_start_text::get_stencil (Grob *me_grob) -{ - Spanner *me = dynamic_cast (me_grob); - SCM t = me->get_property ("text"); - if (me->get_break_index () == 0) - t = me->get_property ("long-text"); - - - SCM chain = Font_interface::text_font_alist_chain (me); - - SCM scm_stencil = Text_interface::is_markup (t) - ? Text_interface::interpret_markup (me->layout ()->self_scm (), chain, t) - : SCM_EOL; - - - if (Stencil *p = unsmob_stencil (scm_stencil)) - { - SCM align_y = me_grob->get_property ("self-alignment-Y"); - if (scm_is_number (align_y)) - p->align_to (Y_AXIS, robust_scm2double (align_y, 0.0)); - - /* Horizontal alignment according to the self-alignment-X property - * and indent value. */ - Output_def *layout = me_grob->layout (); - Real indent; - if (me->get_break_index () == 0) - indent = robust_scm2double (layout->c_variable ("indent"), 0); - else - indent = robust_scm2double (layout->c_variable ("short-indent"), 0); - Real align_x = robust_scm2double (me->get_property ("self-alignment-X"), 0); - Interval p_extent_x = p->extent (X_AXIS); - Interval padding (0.0, max (0.0, indent - p_extent_x.length ())); - Real right_padding = padding.length () - padding.linear_combination (align_x); - Box box (Interval (p_extent_x[LEFT], p_extent_x[RIGHT] + right_padding), - p->extent (Y_AXIS)); - Stencil *aligned_p = new Stencil (box, p->expr ()); - return *aligned_p; - } - return Stencil (); -} - - -MAKE_SCHEME_CALLBACK (System_start_text, print, 1); -SCM -System_start_text::print (SCM smob) -{ - Spanner *me = unsmob_spanner (smob); - - if (!me->get_bound (LEFT)->break_status_dir ()) - { - me->suicide (); - return SCM_EOL; - } - - extract_grob_set (me, "elements", all_elts); - vector elts; - for (vsize i = 0; i < all_elts.size (); i++) - if (all_elts[i]->is_live ()) - elts.push_back (all_elts[i]); - - if (!elts.size ()) - { - me->suicide (); - return SCM_EOL; - } - - Grob *common = common_refpoint_of_array (elts, me, Y_AXIS); - - Interval ext; - for (vsize i = elts.size (); i--;) - { - Spanner *sp = dynamic_cast (elts[i]); - - if (sp - && sp->get_bound (LEFT) == me->get_bound (LEFT)) - ext.add_point (sp->relative_coordinate (common, Y_AXIS)); - } - - Stencil m = get_stencil (me); - if (!ext.is_empty ()) - m.translate_axis (ext.center (), Y_AXIS); - return m.smobbed_copy (); -} - - -ADD_INTERFACE (System_start_text, - "Text in front of the system.", - - /* properties */ - "text " - "long-text " - "self-alignment-Y " - "self-alignment-X " - ); diff --git a/lily/system.cc b/lily/system.cc index e0964482fc..1cd582de75 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -1,9 +1,20 @@ /* - system.cc -- implement System + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #include "system.hh" @@ -11,17 +22,21 @@ #include "align-interface.hh" #include "all-font-metrics.hh" #include "axis-group-interface.hh" +#include "break-align-interface.hh" #include "grob-array.hh" +#include "hara-kiri-group-spanner.hh" #include "international.hh" #include "lookup.hh" #include "main.hh" #include "output-def.hh" +#include "page-layout-problem.hh" #include "paper-column.hh" #include "paper-score.hh" #include "paper-system.hh" #include "pointer-group-interface.hh" #include "skyline-pair.hh" #include "staff-symbol-referencer.hh" +#include "text-interface.hh" #include "warn.hh" System::System (System const &src) @@ -30,6 +45,7 @@ System::System (System const &src) all_elements_ = 0; pscore_ = 0; rank_ = 0; + checked_footnotes_ = false; init_elements (); } @@ -38,6 +54,7 @@ System::System (SCM s) { all_elements_ = 0; rank_ = 0; + checked_footnotes_ = false; init_elements (); } @@ -106,7 +123,7 @@ System::derived_mark () const } static void -fixup_refpoints (vector const &grobs) +fixup_refpoints (vector const &grobs) { for (vsize i = grobs.size (); i--;) grobs[i]->fixup_refpoint (); @@ -149,7 +166,7 @@ System::do_break_substitution_and_fixup_refpoints () Grob *g = all_elts[j]; g->fixup_refpoint (); } - + count += all_elts.size (); } @@ -170,8 +187,14 @@ System::do_break_substitution_and_fixup_refpoints () that no duplicates are in the list. */ for (vsize i = 0; i < broken_intos_.size (); i++) { - System *child = dynamic_cast (broken_intos_[i]); + System *child = dynamic_cast (broken_intos_[i]); child->all_elements_->remove_duplicates (); + for (vsize j = 0; j < child->all_elements_->size (); j++) + { + Grob *g = child->all_elements_->grob (j); + + (void) g->get_property ("after-line-breaking"); + } } if (be_verbose_global) @@ -207,6 +230,114 @@ System::get_paper_systems () return lines; } +void +System::populate_footnote_grob_vector () +{ + extract_grob_set (this, "all-elements", all_elts); + for (vsize i = 0; i < all_elts.size (); i++) + if (all_elts[i]->internal_has_interface (ly_symbol2scm ("footnote-interface"))) + footnote_grobs_.push_back (all_elts[i]); + + sort (footnote_grobs_.begin (), footnote_grobs_.end (), Grob::less); + checked_footnotes_ = true; +} + +void +System::get_footnote_grobs_in_range (vector &out, vsize start, vsize end) +{ + if (!checked_footnotes_) + populate_footnote_grob_vector (); + + for (vsize i = 0; i < footnote_grobs_.size (); i++) + { + int pos = footnote_grobs_[i]->spanned_rank_interval ()[LEFT]; + bool end_of_line_visible = true; + if (Spanner *s = dynamic_cast(footnote_grobs_[i])) + { + Direction spanner_placement = robust_scm2dir (s->get_property ("spanner-placement"), LEFT); + if (spanner_placement == CENTER) + spanner_placement = LEFT; + + pos = s->spanned_rank_interval ()[spanner_placement]; + } + + if (Item *item = dynamic_cast(footnote_grobs_[i])) + { + if (!Item::break_visible (item)) + continue; + // safeguard to bring down the column rank so that end of line footnotes show up on the correct line + end_of_line_visible = (LEFT == item->break_status_dir ()); + } + + if (pos < int (start)) + continue; + if (pos > int (end)) + break; + if (pos == int (start) && end_of_line_visible) + continue; + if (pos == int (end) && !end_of_line_visible) + continue; + if (!footnote_grobs_[i]->is_live ()) + continue; + + out.push_back (footnote_grobs_[i]); + } +} + +vector +System::get_footnotes_in_range (vsize start, vsize end) +{ + vector footnote_grobs; + get_footnote_grobs_in_range (footnote_grobs, start, end); + vector out; + + for (vsize i = 0; i < footnote_grobs.size (); i++) + { + SCM footnote_markup = footnote_grobs[i]->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); + + Stencil *footnote_stencil = unsmob_stencil (footnote_stl); + out.push_back (footnote_stencil); + } + + return out; +} + +Stencil +System::make_footnote_stencil (Real padding) +{ + 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(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 mol; +} + void System::break_into_pieces (vector const &breaking) { @@ -215,7 +346,7 @@ System::break_into_pieces (vector const &breaking) System *system = dynamic_cast (clone ()); system->rank_ = broken_intos_.size (); - vector c (breaking[i].cols_); + vector c (breaking[i].cols_); pscore_->typeset_system (system); int st = Paper_column::get_rank (c[0]); @@ -223,25 +354,41 @@ System::break_into_pieces (vector const &breaking) Interval iv (pure_height (this, st, end)); system->set_property ("pure-Y-extent", ly_interval2scm (iv)); + get_footnote_grobs_in_range (system->footnote_grobs_, st, end); + system->set_bound (LEFT, c[0]); system->set_bound (RIGHT, c.back ()); SCM system_labels = SCM_EOL; for (vsize j = 0; j < c.size (); j++) { c[j]->translate_axis (breaking[i].config_[j], X_AXIS); - dynamic_cast (c[j])->system_ = system; + dynamic_cast (c[j])->set_system (system); /* collect the column labels */ - SCM col_labels = c[j]->get_property ("labels"); - if (scm_is_pair (col_labels)) - system_labels = scm_append (scm_list_2 (col_labels, system_labels)); + collect_labels (c[j], &system_labels); } + /* + Collect labels from any loose columns too: theses will be set on + an empty bar line or a column which is otherwise unused mid-line + */ + vector loose (breaking[i].loose_cols_); + for (vsize j = 0; j < loose.size (); j++) + collect_labels (loose[j], &system_labels); + system->set_property ("labels", system_labels); - + set_loose_columns (system, &breaking[i]); broken_intos_.push_back (system); } } +void +System::collect_labels (Grob const *col, SCM *labels) +{ + SCM col_labels = col->get_property ("labels"); + if (scm_is_pair (col_labels)) + *labels = scm_append (scm_list_2 (col_labels, *labels)); +} + void System::add_column (Paper_column *p) { @@ -254,7 +401,7 @@ System::add_column (Paper_column *p) ga = unsmob_grob_array (scm_ga); } - p->rank_ = ga->size (); + p->set_rank (ga->size ()); ga->add (p); Axis_group_interface::add_element (this, p); @@ -295,13 +442,6 @@ System::pre_processing () void System::post_processing () { - for (vsize i = 0; i < all_elements_->size (); i++) - { - Grob *g = all_elements_->grob (i); - - (void) g->get_property ("after-line-breaking"); - } - Interval iv (extent (this, Y_AXIS)); if (iv.is_empty ()) programming_error ("system with empty extent"); @@ -312,8 +452,8 @@ System::post_processing () This might seem inefficient, but Stencils are cached per grob anyway. */ - vector all_elts_sorted (all_elements_->array ()); - vector_sort (all_elts_sorted, std::less ()); + vector all_elts_sorted (all_elements_->array ()); + vector_sort (all_elts_sorted, std::less ()); uniq (all_elts_sorted); this->get_stencil (); for (vsize i = all_elts_sorted.size (); i--;) @@ -336,7 +476,6 @@ operator< (Layer_entry const &a, return a.layer_ < b.layer_; } - SCM System::get_paper_system () { @@ -351,8 +490,8 @@ System::get_paper_system () Layer_entry e; e.grob_ = all_elements_->grob (j); e.layer_ = robust_scm2int (e.grob_->get_property ("layer"), 1); - - entries.push_back (e); + + entries.push_back (e); } vector_sort (entries, std::less ()); @@ -363,7 +502,7 @@ System::get_paper_system () if (st.expr () == SCM_EOL) continue; - + Offset o; for (int a = X_AXIS; a < NO_AXES; a++) o[Axis (a)] = g->relative_coordinate (this, Axis (a)); @@ -417,26 +556,30 @@ System::get_paper_system () pl->set_property ("page-turn-penalty", right_bound->get_property ("page-turn-penalty")); Interval staff_refpoints; - extract_grob_set (this, "spaceable-staves", staves); - for (vsize i = 0; i < staves.size (); i++) - if (staves[i]->is_live ()) - staff_refpoints.add_point (staves[i]->relative_coordinate (this, Y_AXIS)); + if (Grob *align = get_vertical_alignment ()) + { + extract_grob_set (align, "elements", staves); + for (vsize i = 0; i < staves.size (); i++) + if (staves[i]->is_live () + && Page_layout_problem::is_spaceable (staves[i])) + staff_refpoints.add_point (staves[i]->relative_coordinate (this, + Y_AXIS)); + } pl->set_property ("staff-refpoint-extent", ly_interval2scm (staff_refpoints)); - pl->set_property ("system-grob", this->self_scm ()); + pl->set_property ("system-grob", this->self_scm ()); return pl->unprotect (); } -vector +vector System::broken_col_range (Item const *left, Item const *right) const { - vector ret; + vector ret; left = left->get_column (); right = right->get_column (); - extract_grob_set (this, "columns", cols); vsize i = Paper_column::get_rank (left); @@ -448,7 +591,7 @@ System::broken_col_range (Item const *left, Item const *right) const && Paper_column::get_rank (cols[i]) < end_rank) { Paper_column *c = dynamic_cast (cols[i]); - if (Paper_column::is_breakable (c) && !c->system_) + if (Paper_column::is_breakable (c) && !c->get_system ()) ret.push_back (c); i++; } @@ -456,10 +599,9 @@ System::broken_col_range (Item const *left, Item const *right) const return ret; } - /** Return all columns, but filter out any unused columns , since they might disrupt the spacing problem. */ -vector +vector System::used_columns () const { extract_grob_set (this, "columns", ro_columns); @@ -472,7 +614,7 @@ System::used_columns () const break; } - vector columns; + vector columns; for (int i = 0; i <= last_breakable; i++) { if (Paper_column::is_used (ro_columns[i])) @@ -488,11 +630,11 @@ System::column (vsize which) const extract_grob_set (this, "columns", columns); if (which >= columns.size ()) return 0; - - return dynamic_cast (columns[which]); + + return dynamic_cast (columns[which]); } -Paper_score* +Paper_score * System::paper_score () const { return pscore_; @@ -505,14 +647,212 @@ System::get_rank () const } System * -get_root_system (Grob *me) +get_root_system (Grob *me) { Grob *system_grob = me; - + while (system_grob->get_parent (Y_AXIS)) system_grob = system_grob->get_parent (Y_AXIS); - return dynamic_cast (system_grob); + return dynamic_cast (system_grob); +} + +Grob * +System::get_vertical_alignment () +{ + extract_grob_set (this, "elements", elts); + Grob *ret = 0; + for (vsize i = 0; i < elts.size (); i++) + if (Align_interface::has_interface (elts[i])) + { + if (ret) + programming_error ("found multiple vertical alignments in this system"); + ret = elts[i]; + } + + if (!ret) + programming_error ("didn't find a vertical alignment in this system"); + return ret; +} + +// Finds the furthest staff in the given direction whose x-extent +// overlaps with the given interval. +Grob * +System::get_extremal_staff (Direction dir, Interval const &iv) +{ + Grob *align = get_vertical_alignment (); + if (!align) + return 0; + + extract_grob_set (align, "elements", elts); + vsize start = (dir == UP) ? 0 : elts.size () - 1; + vsize end = (dir == UP) ? elts.size () : VPOS; + for (vsize i = start; i != end; i += dir) + { + if (Hara_kiri_group_spanner::has_interface (elts[i])) + Hara_kiri_group_spanner::consider_suicide (elts[i]); + + Interval intersection = elts[i]->extent (this, X_AXIS); + intersection.intersect (iv); + if (elts[i]->is_live () && !intersection.is_empty ()) + return elts[i]; + } + return 0; +} + +Interval +System::pure_refpoint_extent (vsize start, vsize end) +{ + Interval ret; + Grob *alignment = get_vertical_alignment (); + if (!alignment) + return Interval (); + + extract_grob_set (alignment, "elements", staves); + vector offsets = Align_interface::get_pure_minimum_translations (alignment, staves, Y_AXIS, start, end); + + for (vsize i = 0; i < offsets.size (); ++i) + if (Page_layout_problem::is_spaceable (staves[i])) + { + ret[UP] = offsets[i]; + break; + } + + for (vsize i = offsets.size (); i--;) + if (Page_layout_problem::is_spaceable (staves[i])) + { + ret[DOWN] = offsets[i]; + break; + } + + return ret; +} + +Interval +System::part_of_line_pure_height (vsize start, vsize end, bool begin) +{ + Grob *alignment = get_vertical_alignment (); + if (!alignment) + return Interval (); + + extract_grob_set (alignment, "elements", staves); + vector offsets = Align_interface::get_pure_minimum_translations (alignment, staves, Y_AXIS, start, end); + + Interval ret; + for (vsize i = 0; i < staves.size (); ++i) + { + Interval iv = begin + ? Axis_group_interface::begin_of_line_pure_height (staves[i], start) + : Axis_group_interface::rest_of_line_pure_height (staves[i], start, end); + if (i < offsets.size ()) + iv.translate (offsets[i]); + ret.unite (iv); + } + + Interval other_elements = begin + ? Axis_group_interface::begin_of_line_pure_height (this, start) + : Axis_group_interface::rest_of_line_pure_height (this, start, end); + + ret.unite (other_elements); + + return ret; +} + +Interval +System::begin_of_line_pure_height (vsize start, vsize end) +{ + return part_of_line_pure_height (start, end, true); +} + +Interval +System::rest_of_line_pure_height (vsize start, vsize end) +{ + return part_of_line_pure_height (start, end, false); +} + +// This differs from Axis_group_interface::calc_pure_relevant_grobs +// because here, we are only interested in those few elements that aren't +// descended from VerticalAlignment (ie. things like RehearsalMark, BarLine). +MAKE_SCHEME_CALLBACK (System, calc_pure_relevant_grobs, 1); +SCM +System::calc_pure_relevant_grobs (SCM smob) +{ + Grob *me = unsmob_grob (smob); + + extract_grob_set (me, "elements", elts); + vector relevant_grobs; + SCM pure_relevant_p = ly_lily_module_constant ("pure-relevant?"); + + for (vsize i = 0; i < elts.size (); ++i) + { + if (!Axis_group_interface::has_interface (elts[i])) + { + if (to_boolean (scm_apply_1 (pure_relevant_p, elts[i]->self_scm (), SCM_EOL))) + relevant_grobs.push_back (elts[i]); + + if (Item *it = dynamic_cast (elts[i])) + { + Direction d = LEFT; + do + { + Item *piece = it->find_prebroken_piece (d); + if (piece && to_boolean (scm_apply_1 (pure_relevant_p, piece->self_scm (), SCM_EOL))) + relevant_grobs.push_back (piece); + } + while (flip (&d) != LEFT); + } + } + } + + SCM grobs_scm = Grob_array::make_array (); + + unsmob_grob_array (grobs_scm)->set_array (relevant_grobs); + return grobs_scm; +} + +MAKE_SCHEME_CALLBACK (System, height, 1); +SCM +System::height (SCM smob) +{ + return Axis_group_interface::height (smob); +} + +MAKE_SCHEME_CALLBACK (System, calc_pure_height, 3); +SCM +System::calc_pure_height (SCM smob, SCM start_scm, SCM end_scm) +{ + System *me = dynamic_cast (unsmob_grob (smob)); + int start = scm_to_int (start_scm); + int end = scm_to_int (end_scm); + + Interval begin = me->begin_of_line_pure_height (start, end); + Interval rest = me->rest_of_line_pure_height (start, end); + begin.unite (rest); + + return ly_interval2scm (begin); +} + +Grob* +System::get_pure_bound (Direction d, int start, int end) +{ + vector ranks = pscore_->get_break_ranks (); + vector indices = pscore_->get_break_indices (); + vector cols = pscore_->get_columns (); + + vsize target_rank = (d == LEFT ? start : end); + vector::const_iterator i = + lower_bound (ranks.begin (), ranks.end (), target_rank, std::less ()); + + if (i != ranks.end () && (*i) == target_rank) + return cols[indices[i - ranks.begin ()]]; + else + return 0; +} + +Grob* +System::get_maybe_pure_bound (Direction d, bool pure, int start, int end) +{ + return pure ? get_pure_bound (d, start, end) : get_bound (d); } ADD_INTERFACE (System, @@ -525,7 +865,5 @@ ADD_INTERFACE (System, "columns " "labels " "pure-Y-extent " - "spaceable-staves " - "skyline-distance " "skyline-horizontal-padding " - ) + ); diff --git a/lily/tab-harmonic-engraver.cc b/lily/tab-harmonic-engraver.cc deleted file mode 100644 index 8c493048bc..0000000000 --- a/lily/tab-harmonic-engraver.cc +++ /dev/null @@ -1,79 +0,0 @@ -/* - tab-harmonic-engraver.cc -- implement Tab_harmonic_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2005--2009 Han-Wen Nienhuys - -*/ - -#include "engraver.hh" - -#include "item.hh" -#include "pointer-group-interface.hh" -#include "simple-closure.hh" -#include "stream-event.hh" -#include "warn.hh" - -#include "translator.icc" - -class Tab_harmonic_engraver : public Engraver -{ - TRANSLATOR_DECLARATIONS (Tab_harmonic_engraver); - -protected: - DECLARE_ACKNOWLEDGER (note_head); -}; - -Tab_harmonic_engraver::Tab_harmonic_engraver () -{ -} - -void -Tab_harmonic_engraver::acknowledge_note_head (Grob_info info) -{ - if (Stream_event *note = info.event_cause ()) - { - for (SCM s = note->get_property ("articulations"); - scm_is_pair (s); s = scm_cdr (s)) - { - Stream_event *ev = unsmob_stream_event (scm_car (s)); - - if (!ev) - continue; - - - if (ev->in_event_class ("harmonic-event")) - { - if (Item *victim = info.item ()) - { - Engraver *eng = dynamic_cast (info.origin_translator ()); - Item *paren = eng->make_item ("HarmonicParenthesesItem", victim->self_scm ()); - Pointer_group_interface::add_grob (paren, ly_symbol2scm ("elements"), victim); - - paren->set_parent (victim, Y_AXIS); - - Real size = robust_scm2double (paren->get_property ("font-size"), 0.0) - + robust_scm2double (victim->get_property ("font-size"), 0.0); - paren->set_property ("font-size", scm_from_double (size)); - } - } - } - } -} - -ADD_ACKNOWLEDGER (Tab_harmonic_engraver, note_head); -ADD_TRANSLATOR (Tab_harmonic_engraver, - /* doc */ - "In a tablature, parenthesize objects whose music cause has" - " the @code{parenthesize} property.", - - /* create */ - "HarmonicParenthesesItem ", - - /* read */ - "", - - /* write */ - "" - ); diff --git a/lily/tab-note-heads-engraver.cc b/lily/tab-note-heads-engraver.cc index f89dad1100..4e3f393a2d 100644 --- a/lily/tab-note-heads-engraver.cc +++ b/lily/tab-note-heads-engraver.cc @@ -1,7 +1,20 @@ /* - tab-note-heads-engraver.cc -- part of GNU LilyPond + This file is part of LilyPond, the GNU music typesetter. - (c) 2002--2009 Han-Wen Nienhuys, Jean-Baptiste Lamy , + Copyright (C) 2002--2011 Han-Wen Nienhuys, Jean-Baptiste Lamy , + + 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 . */ #include @@ -11,6 +24,7 @@ using namespace std; +#include "articulations.hh" #include "duration.hh" #include "item.hh" #include "output-def.hh" @@ -27,16 +41,17 @@ using namespace std; */ class Tab_note_heads_engraver : public Engraver { - vector notes_; + vector note_events_; + vector tabstring_events_; + vector fingering_events_; - vector note_events_; - vector tabstring_events_; public: TRANSLATOR_DECLARATIONS (Tab_note_heads_engraver); protected: DECLARE_TRANSLATOR_LISTENER (note); DECLARE_TRANSLATOR_LISTENER (string_number); + DECLARE_TRANSLATOR_LISTENER (fingering); void process_music (); void stop_translation_timestep (); @@ -60,109 +75,94 @@ Tab_note_heads_engraver::listen_string_number (Stream_event *ev) tabstring_events_.push_back (ev); } +IMPLEMENT_TRANSLATOR_LISTENER (Tab_note_heads_engraver, fingering); +void +Tab_note_heads_engraver::listen_fingering (Stream_event *ev) +{ + fingering_events_.push_back (ev); +} + void Tab_note_heads_engraver::process_music () { - vsize j = 0; - for (vsize i = 0; i < note_events_.size (); i++) - { - SCM string_tunings = get_property ("stringTunings"); - int string_count = scm_ilength (string_tunings); - bool high_string_one = to_boolean (get_property ("highStringOne")); - - Stream_event *event = note_events_[i]; - - Stream_event *tabstring_event = 0; - - for (SCM s = event->get_property ("articulations"); - !tabstring_event && scm_is_pair (s); s = scm_cdr (s)) - { - Stream_event *art = unsmob_stream_event (scm_car (s)); - - if (art->in_event_class ("string-number-event")) - tabstring_event = art; - } - - if (!tabstring_event && j < tabstring_events_.size ()) - { - tabstring_event = tabstring_events_[j]; - if (j + 1 < tabstring_events_.size ()) - j++; - } - - int string_number = 0; - if (tabstring_event) - string_number = scm_to_int (tabstring_event->get_property ("string-number")); - - if (!string_number) - { - SCM scm_pitch = event->get_property ("pitch"); - int min_fret = robust_scm2int (get_property ("minimumFret"), 0); - int start = (high_string_one) ? 1 : string_count; - int end = (high_string_one) ? string_count+1 : 0; - - int i = start; - do - { - int fret = unsmob_pitch (scm_pitch)->rounded_semitone_pitch () - - scm_to_int (robust_list_ref (i - 1, string_tunings)); - - if (fret >= min_fret) - { - string_number = i; - break; - } - i += high_string_one ? 1 : -1; - } - while (i != end); - } - - if (string_number) - { - SCM proc = get_property ("tablatureFormat"); - SCM text = scm_call_3 (proc, scm_from_int (string_number), - context ()->self_scm (), - event->self_scm ()); - Item *note = make_item ("TabNoteHead", event->self_scm ()); - note->set_property ("text", text); - - - int pos = 2 * string_number - string_count - 1; // No tab-note between the string !!! - if (to_boolean (get_property ("stringOneTopmost"))) - pos = - pos; - - note->set_property ("staff-position", scm_from_int (pos)); - - notes_.push_back (note); - } - else - event->origin ()->warning ("could not calculate a string number."); - } + SCM tab_strings = articulation_list (note_events_, + tabstring_events_, + "string-number-event"); + SCM defined_fingers = articulation_list (note_events_, + fingering_events_, + "fingering-event"); + SCM tab_notes = ly_cxx_vector_to_list (note_events_); + SCM proc = get_property ("noteToFretFunction"); + SCM string_fret_finger = SCM_EOL; + if (ly_is_procedure (proc)) + string_fret_finger = scm_call_3 (proc, + context ()->self_scm (), + tab_notes, + scm_list_2 (tab_strings, + defined_fingers)); + SCM note_entry = SCM_EOL; + SCM string_number = SCM_EOL; + SCM fret = SCM_EOL; + SCM fret_label = SCM_EOL; + SCM fret_procedure = get_property ("tablatureFormat"); + SCM staff_line_procedure = get_property ("tabStaffLineLayoutFunction"); + SCM staff_position = SCM_EOL; + vsize fret_count = (vsize) scm_ilength (string_fret_finger); + bool length_changed = (note_events_.size () != fret_count); + vsize index; + + if (string_fret_finger != SCM_EOL) + for (vsize i = 0; i < fret_count; i++) + { + note_entry = scm_list_ref (string_fret_finger, scm_from_int (i)); + string_number = scm_car (note_entry); + if (string_number != SCM_BOOL_F) + { + fret = scm_cadr (note_entry); + fret_label = scm_call_3 (fret_procedure, + context ()->self_scm (), + string_number, + fret); + index = length_changed ? 0 : i; + Item *note = make_item ("TabNoteHead", note_events_[index]->self_scm ()); + note->set_property ("text", fret_label); + staff_position = scm_call_2 (staff_line_procedure, + context ()->self_scm (), + string_number); + note->set_property ("staff-position", staff_position); + } + } } + void Tab_note_heads_engraver::stop_translation_timestep () { - notes_.clear (); note_events_.clear (); tabstring_events_.clear (); + fingering_events_.clear (); } ADD_TRANSLATOR (Tab_note_heads_engraver, /* doc */ - "Generate one or more tablature noteheads from event of type" + "Generate one or more tablature note heads from event of type" " @code{NoteEvent}.", /* create */ "TabNoteHead ", /* read */ + "defaultStrings " + "fretLabels " + "highStringOne " "middleCPosition " - "stringTunings " "minimumFret " + "noteToFretFunction " + "stringOneTopmost " + "stringTunings " "tablatureFormat " - "highStringOne " - "stringOneTopmost ", + "tabStaffLineLayoutFunction ", - /* write */ "" - ); + /* write */ + "" + ); diff --git a/lily/tab-staff-symbol-engraver.cc b/lily/tab-staff-symbol-engraver.cc index 03df300ea2..5b33971127 100644 --- a/lily/tab-staff-symbol-engraver.cc +++ b/lily/tab-staff-symbol-engraver.cc @@ -1,9 +1,20 @@ /* - tab-staff-symbol-engraver.cc -- implement Tab_staff_symbol_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/tab-tie-follow-engraver.cc b/lily/tab-tie-follow-engraver.cc new file mode 100644 index 0000000000..a815c5a3bb --- /dev/null +++ b/lily/tab-tie-follow-engraver.cc @@ -0,0 +1,131 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2011 Carl D. Sorensen + + 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 . +*/ + +#include +#include + +#include "engraver.hh" + +using namespace std; + +#include "context.hh" +#include "item.hh" +#include "spanner.hh" + +#include "translator.icc" + +/* + Change tab-note-head properties when a tie is followed by a + slurs or glissando. +*/ +class Tab_tie_follow_engraver : public Engraver +{ + vector slurs_; + vector glissandi_; + vector note_heads_; + +public: + TRANSLATOR_DECLARATIONS (Tab_tie_follow_engraver); + +protected: + DECLARE_ACKNOWLEDGER (glissando); + DECLARE_ACKNOWLEDGER (slur); + DECLARE_ACKNOWLEDGER (tab_note_head); + + void stop_translation_timestep (); +}; + +Tab_tie_follow_engraver::Tab_tie_follow_engraver () +{ +} + +void +Tab_tie_follow_engraver::acknowledge_glissando (Grob_info info) +{ + glissandi_.push_back (info.spanner ()); +} + +void +Tab_tie_follow_engraver::acknowledge_tab_note_head (Grob_info info) +{ + note_heads_.push_back (info.item ()); +} + +void +Tab_tie_follow_engraver::acknowledge_slur (Grob_info info) +{ + slurs_.push_back (info.spanner ()); +} + +void +Tab_tie_follow_engraver::stop_translation_timestep () +{ + for (vsize k = 0; k < note_heads_.size (); k++) + { + bool spanner_start = false; + for (vsize j = 0; j < slurs_.size (); j++) + { + Item* left_item = slurs_[j]->get_bound (LEFT); + if (left_item) + { + SCM left_cause = left_item->get_property ("cause"); + Item *slur_cause = unsmob_item (left_cause); + if (slur_cause == note_heads_[k]) + { + note_heads_[k]->set_property ("span-start", SCM_BOOL_T); + spanner_start = true; + break; + } + } + } + if (!spanner_start) + for (vsize j = 0; j < glissandi_.size (); j++) + { + Item *left_bound = glissandi_[j]->get_bound (LEFT); + if (left_bound == note_heads_[k]) + { + note_heads_[k]->set_property ("span-start", SCM_BOOL_T); + break; + } + } + } + slurs_.clear (); + glissandi_.clear (); + note_heads_.clear(); +} + +ADD_ACKNOWLEDGER (Tab_tie_follow_engraver, slur); +ADD_ACKNOWLEDGER (Tab_tie_follow_engraver, glissando); +ADD_ACKNOWLEDGER (Tab_tie_follow_engraver, tab_note_head); + + +ADD_TRANSLATOR (Tab_tie_follow_engraver, + /* doc */ + "Adjust TabNoteHead properties when a tie is followed" + " by a slur or glissando.", + + /* create */ + " ", + + /* read */ + " ", + + /* write */ + " " + ); diff --git a/lily/template5.cc b/lily/template5.cc index 681812f8ca..2537ea2bbe 100644 --- a/lily/template5.cc +++ b/lily/template5.cc @@ -1,9 +1,20 @@ /* - template5.cc -- instantiate Intervals + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "moment.hh" diff --git a/lily/tempo-performer.cc b/lily/tempo-performer.cc index 5387d49a3a..95de5faa83 100644 --- a/lily/tempo-performer.cc +++ b/lily/tempo-performer.cc @@ -1,9 +1,20 @@ /* - tempo-performer.cc -- implement Tempo_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "performer.hh" diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index f27a74bf84..270855febd 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -1,19 +1,28 @@ /* - text-engraver.cc -- implement Text_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "directional-element-interface.hh" #include "engraver.hh" -#include "rhythmic-head.hh" +#include "item.hh" #include "side-position-interface.hh" -#include "stem.hh" #include "stream-event.hh" #include "text-interface.hh" -#include "item.hh" #include "translator.icc" @@ -23,12 +32,11 @@ class Text_engraver : public Engraver { vector evs_; - vector texts_; public: TRANSLATOR_DECLARATIONS (Text_engraver); protected: void stop_translation_timestep (); - void process_acknowledged (); + void process_music (); DECLARE_TRANSLATOR_LISTENER (text_script); }; @@ -41,10 +49,8 @@ Text_engraver::listen_text_script (Stream_event *ev) } void -Text_engraver::process_acknowledged () +Text_engraver::process_music () { - if (texts_.size ()) - return; for (vsize i = 0; i < evs_.size (); i++) { Stream_event *r = evs_[i]; @@ -67,14 +73,12 @@ Text_engraver::process_acknowledged () SCM mark = r->get_property ("text"); text->set_property ("text", mark); - texts_.push_back (text); } } void Text_engraver::stop_translation_timestep () { - texts_.clear (); evs_.clear (); } diff --git a/lily/text-interface.cc b/lily/text-interface.cc index 8b55618521..983902f6af 100644 --- a/lily/text-interface.cc +++ b/lily/text-interface.cc @@ -1,23 +1,34 @@ /* - text-interface.cc -- implement Text_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Han-Wen Nienhuys + Copyright (C) 1998--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 . */ #include "text-interface.hh" - -#include "main.hh" #include "config.hh" -#include "pango-font.hh" -#include "warn.hh" -#include "grob.hh" #include "font-interface.hh" -#include "output-def.hh" +#include "grob.hh" +#include "main.hh" +#include "misc.hh" #include "modified-font-metric.hh" +#include "output-def.hh" +#include "pango-font.hh" +#include "warn.hh" static void replace_whitespace (string *str) @@ -27,24 +38,13 @@ replace_whitespace (string *str) while (i < n) { - vsize char_len = 1; char cur = (*str)[i]; - - // U+10000 - U+10FFFF - if ((cur & 0x11110000) == 0x11110000) - char_len = 4; - // U+0800 - U+FFFF - else if ((cur & 0x11100000) == 0x11100000) - char_len = 3; - // U+0080 - U+07FF - else if ((cur & 0x11000000) == 0x11000000) - char_len = 2; - else if (cur & 0x10000000) - programming_error ("invalid utf-8 string"); - else - // avoid the locale-dependent isspace - if (cur == '\n' || cur == '\t' || cur == '\v') - (*str)[i] = ' '; + + // avoid the locale-dependent isspace + if (cur == '\n' || cur == '\t' || cur == '\v') + (*str)[i] = ' '; + + vsize char_len = utf8_char_len (cur); i += char_len; } @@ -64,7 +64,19 @@ Text_interface::interpret_string (SCM layout_smob, Font_metric *fm = select_encoded_font (layout, props); replace_whitespace (&str); - return fm->word_stencil (str).smobbed_copy (); + + /* + We want to filter strings with a music font that pass through + the text interface. Here the font encoding is checked to see + if it matches one of the music font encodings. --pmccarty + */ + SCM encoding = ly_chain_assoc_get (ly_symbol2scm ("font-encoding"), + props, + SCM_BOOL_F); + SCM music_encodings = ly_lily_module_constant ("all-music-font-encodings"); + + bool is_music = (scm_memq (encoding, music_encodings) != SCM_BOOL_F); + return fm->text_stencil (layout, str, is_music).smobbed_copy (); } MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Text_interface, interpret_markup, 3, 0, @@ -138,7 +150,7 @@ Text_interface::is_markup_list (SCM x) ADD_INTERFACE (Text_interface, "A Scheme markup text, see @ruser{Formatting text} and" - " @ruser{New markup command definition}.\n" + " @rextend{New markup command definition}.\n" "\n" "There are two important commands:" " @code{ly:text-interface::print}, which is a" diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index e5b9911810..c18bf098f2 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -1,9 +1,20 @@ /* - text-spanner-engraver.cc -- implement Text_spanner_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ #include "engraver.hh" @@ -41,8 +52,7 @@ Text_spanner_engraver::Text_spanner_engraver () 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); @@ -108,8 +118,7 @@ Text_spanner_engraver::stop_translation_timestep () } typeset_all (); - event_drul_[START] = 0; - event_drul_[STOP] = 0; + event_drul_.set (0, 0); } void @@ -124,20 +133,25 @@ Text_spanner_engraver::finalize () } } - 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); @@ -150,7 +164,7 @@ ADD_TRANSLATOR (Text_spanner_engraver, "TextSpanner ", /* read */ - "", + "currentMusicalColumn ", /* write */ "" diff --git a/lily/tie-column.cc b/lily/tie-column.cc index c236e55bc1..6e0eaecec0 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -1,9 +1,20 @@ /* - tie-column.cc -- implement Tie_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "tie-column.hh" @@ -79,9 +90,7 @@ Tie_column::calc_positioning_done (SCM smob) if (!ties.size ()) return SCM_BOOL_T; - me->set_property ("positioning-done", SCM_BOOL_T); - vector_sort (ties, Tie::less); Tie_formatting_problem problem; @@ -90,9 +99,7 @@ Tie_column::calc_positioning_done (SCM smob) SCM manual_configs = me->get_property ("tie-configuration"); problem.set_manual_tie_configuration (manual_configs); - Ties_configuration base = problem.generate_optimal_configuration (); - for (vsize i = 0; i < base.size (); i++) { SCM cp = Tie::get_control_points (ties[i], problem.common_x_refpoint (), @@ -111,7 +118,8 @@ Tie_column::calc_positioning_done (SCM smob) ADD_INTERFACE (Tie_column, - "Object that sets directions of multiple ties in a tied chord.", + "Object that sets directions of multiple ties in a tied" + " chord.", /* properties */ "positioning-done " diff --git a/lily/tie-configuration.cc b/lily/tie-configuration.cc index ba94725dc0..f84908c651 100644 --- a/lily/tie-configuration.cc +++ b/lily/tie-configuration.cc @@ -1,10 +1,21 @@ /* - tie-configuration.cc -- implement Tie_configuration + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "tie-configuration.hh" diff --git a/lily/tie-details.cc b/lily/tie-details.cc index bc43d1cbd6..f169e1fae9 100644 --- a/lily/tie-details.cc +++ b/lily/tie-details.cc @@ -1,10 +1,21 @@ /* - tie-details.cc -- implement Tie_configuration, Tie_details + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "tie.hh" diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 1a397b3b74..edaba06c7c 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -1,9 +1,20 @@ /* - tie-engraver.cc -- implement Tie_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" @@ -23,7 +34,7 @@ #include "translator.icc" /** - Manufacture ties. Acknowledge noteheads, and put them into a + Manufacture ties. Acknowledge note heads, and put them into a priority queue. If we have a TieEvent, connect the notes that finish just at this time, and note that start at this time. @@ -38,13 +49,18 @@ struct Head_event_tuple SCM tie_definition_; Stream_event *tie_stream_event_; Stream_event *tie_event_; - + // Indicate whether a tie from the same moment has been processed successfully + // This is needed for tied chords, e.g. ~ g, because otherwise the c + // and e will trigger a warning for an unterminated tie! + bool tie_from_chord_created; + Head_event_tuple () { head_ = 0; tie_definition_ = SCM_EOL; tie_event_ = 0; tie_stream_event_ = 0; + tie_from_chord_created = false; } }; @@ -65,6 +81,8 @@ protected: DECLARE_TRANSLATOR_LISTENER (tie); 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); }; @@ -90,6 +108,27 @@ Tie_engraver::listen_tie (Stream_event *ev) ASSIGN_EVENT_ONCE (event_, ev); } +void Tie_engraver::report_unterminated_tie (Head_event_tuple const &tie_start) +{ + // If tie_from_chord_created is set, we have another note at the same + // moment that created a tie, so this is not necessarily an unterminated + // tie. Happens e.g. for ~ g + if (!tie_start.tie_from_chord_created) + 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 () { @@ -119,16 +158,21 @@ Tie_engraver::acknowledge_note_head (Grob_info i) */ 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_; SCM cause = heads_to_tie_[i].tie_event_ ? heads_to_tie_[i].tie_event_->self_scm () : heads_to_tie_[i].tie_stream_event_->self_scm (); - + announce_grob (p, cause); Tie::set_head (p, LEFT, th); Tie::set_head (p, RIGHT, h); @@ -137,11 +181,23 @@ Tie_engraver::acknowledge_note_head (Grob_info i) if (is_direction (unsmob_stream_event (cause)->get_property ("direction"))) { Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction")); - p->set_property ("direction", scm_from_int (d)); + p->set_property ("direction", scm_from_int (d)); } - + 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 + ~ g + */ + for (vsize j = heads_to_tie_.size (); j--;) + { + if (heads_to_tie_[j].end_moment_ == end) + heads_to_tie_[j].tie_from_chord_created = true; + } } } @@ -156,18 +212,21 @@ Tie_engraver::acknowledge_note_head (Grob_info i) void Tie_engraver::start_translation_timestep () { - context ()->set_property ("tieMelismaBusy", - ly_bool2scm (heads_to_tie_.size ())); - if (heads_to_tie_.size () && !to_boolean (get_property ("tieWaitForNote"))) { Moment now = now_mom (); for (vsize i = heads_to_tie_.size (); i--; ) { if (now > heads_to_tie_[i].end_moment_) - heads_to_tie_.erase (heads_to_tie_.begin () + i); + { + report_unterminated_tie (heads_to_tie_[i]); + heads_to_tie_.erase (heads_to_tie_.begin () + i); + } } } + + context ()->set_property ("tieMelismaBusy", + ly_bool2scm (heads_to_tie_.size ())); } void @@ -177,7 +236,12 @@ Tie_engraver::stop_translation_timestep () if (ties_.size ()) { if (!wait) - heads_to_tie_.clear (); + { + vector::iterator it = heads_to_tie_.begin (); + for (; it < heads_to_tie_.end (); it++) + report_unterminated_tie (*it); + heads_to_tie_.clear (); + } for (vsize i = 0; i < ties_.size (); i++) typeset_tie (ties_[i]); @@ -187,7 +251,13 @@ Tie_engraver::stop_translation_timestep () } vector 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]; @@ -196,11 +266,14 @@ Tie_engraver::stop_translation_timestep () if (!left_ev) { - // may happen for ambituses + // may happen for ambitus 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"); Stream_event *tie_event = 0; @@ -212,13 +285,16 @@ Tie_engraver::stop_translation_timestep () Stream_event *ev = unsmob_stream_event (scm_car (s)); if (!ev) continue; - + if (ev->in_event_class ("tie-event")) 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 @@ -239,19 +315,30 @@ Tie_engraver::stop_translation_timestep () end += get_event_length (left_ev); } event_tup.end_moment_ = end; - + new_heads_to_tie.push_back (event_tup); } } if (!wait && new_heads_to_tie.size ()) - heads_to_tie_.clear (); + { + vector::iterator it=heads_to_tie_.begin (); + for (; it < heads_to_tie_.end (); it++) + report_unterminated_tie (*it); + heads_to_tie_.clear (); + } // hmmm, how to do with copy () ? 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 (); } diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index 7eb20666be..0c3279ce21 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -1,10 +1,21 @@ /* - tie-formatting-problem.cc -- implement Tie_formatting_problem + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include @@ -1230,7 +1241,7 @@ Tie_formatting_problem::set_debug_scoring (Ties_configuration const &base) for (vsize i = 0; i < base.size (); i++) { string card = base.complete_tie_card (i); - specifications_[i].tie_grob_->set_property ("quant-score", + specifications_[i].tie_grob_->set_property ("annotation", ly_string2scm (card)); } } diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index 58bc879ec1..5d237c1de3 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -1,9 +1,20 @@ /* - tie-performer.cc -- implement Tie_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "performer.hh" @@ -12,15 +23,29 @@ #include "context.hh" #include "stream-event.hh" #include "translator.icc" +#include + +struct Head_audio_event_tuple +{ + Audio_element_info head_; + // The end moment of the note, so we can calculate a skip and check whether + // the note still goes on + Moment end_moment_; + Head_audio_event_tuple () {} + Head_audio_event_tuple (Audio_element_info h, Moment m) + { + head_ = h; + end_moment_ = m; + } +}; + class Tie_performer : public Performer { Stream_event *event_; - vector now_heads_; - vector now_tied_heads_; - vector heads_to_tie_; - - bool ties_created_; + list now_heads_; + list now_tied_heads_; // new tied notes + list heads_to_tie_; // heads waiting for closing tie protected: void stop_translation_timestep (); @@ -35,7 +60,6 @@ public: Tie_performer::Tie_performer () { event_ = 0; - ties_created_ = false; } IMPLEMENT_TRANSLATOR_LISTENER (Tie_performer, tie); @@ -57,24 +81,38 @@ Tie_performer::acknowledge_audio_element (Audio_element_info inf) { if (Audio_note *an = dynamic_cast (inf.elem_)) { + // for each tied note, store the info and its end moment, so we can + // later on check whether (1) the note is still ongoing and (2) how + // long the skip is with tieWaitForNote + Head_audio_event_tuple inf_mom (inf, now_mom () + an->length_mom_); if (an->tie_event_) - now_tied_heads_.push_back (inf); + now_tied_heads_.push_back (inf_mom); else - now_heads_.push_back (inf); - - for (vsize i = heads_to_tie_.size (); i--;) + now_heads_.push_back (inf_mom); + + // Find a previous note that ties to the current note. If it exists, + // remove it from the heads_to_tie vector and create the tie + list::iterator it; + bool found = false; + Stream_event *right_mus = inf.event_; + for (it = heads_to_tie_.begin (); + !found && (it != heads_to_tie_.end()); + it++) { - Stream_event *right_mus = inf.event_; + Audio_element_info et = (*it).head_; + Audio_note *th = dynamic_cast (et.elem_); + Stream_event *left_mus = et.event_; - Audio_note *th = dynamic_cast (heads_to_tie_[i].elem_); - Stream_event *left_mus = heads_to_tie_[i].event_; - - if (right_mus && left_mus + if (th && right_mus && left_mus && ly_is_equal (right_mus->get_property ("pitch"), left_mus->get_property ("pitch"))) { - an->tie_to (th); - ties_created_ = true; + found = true; + // (*it).moment_ already stores the end of the tied note! + Moment skip = now_mom() - (*it).end_moment_; + an->tie_to (th, skip); + // this invalidates the iterator, we are leaving the loop anyway + heads_to_tie_.erase (it); } } } @@ -87,22 +125,35 @@ Tie_performer::start_translation_timestep () ly_bool2scm (heads_to_tie_.size ())); } +// a predicate implemented as a class, used to delete all tied notes with end +// moment in the past: +class end_moment_passed +{ +protected: + Moment now; +public: + end_moment_passed (Moment mom) : now (mom) {} + bool operator() (const Head_audio_event_tuple &value) { + return (value.end_moment_ <= now); + } +}; + void Tie_performer::stop_translation_timestep () { - if (ties_created_) + // We might have dangling open ties like c~ d. Close them, unless the first + // note is still ongoing or we have we have tieWaitForNote set... + if (!to_boolean (get_property ("tieWaitForNote"))) { - heads_to_tie_.clear (); - ties_created_ = false; + heads_to_tie_.remove_if (end_moment_passed (now_mom ())); } + // Append now_heads_ and now_tied_heads to heads_to_tie_ for the next time step if (event_) { - heads_to_tie_ = now_heads_; + heads_to_tie_.splice (heads_to_tie_.end (), now_heads_); } - - for (vsize i = now_tied_heads_.size (); i--;) - heads_to_tie_.push_back (now_tied_heads_[i]); + heads_to_tie_.splice (heads_to_tie_.end (), now_tied_heads_); event_ = 0; now_heads_.clear (); @@ -117,8 +168,8 @@ ADD_TRANSLATOR (Tie_performer, "", /* read */ - "tieMelismaBusy", + "tieWaitForNote", /* write */ - "" + "tieMelismaBusy" ); diff --git a/lily/tie.cc b/lily/tie.cc index 5c64db6494..e8b21d8544 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -1,9 +1,20 @@ /* - tie.cc -- implement Tie + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "tie.hh" @@ -29,7 +40,6 @@ #include "warn.hh" #include "semi-tie-column.hh" - bool Tie::less (Grob *const &s1, Grob *const &s2) { @@ -46,15 +56,15 @@ Grob * Tie::head (Grob *me, Direction d) { if (is_direction (me->get_property ("head-direction"))) - { - Direction hd = to_dir (me->get_property ("head-direction")); - - return (hd == d) - ? unsmob_grob (me->get_object ("note-head")) - : 0; - } - - Item *it = dynamic_cast (me)->get_bound (d); + { + Direction hd = to_dir (me->get_property ("head-direction")); + + return (hd == d) + ? unsmob_grob (me->get_object ("note-head")) + : 0; + } + + Item *it = dynamic_cast (me)->get_bound (d); if (Note_head::has_interface (it)) return it; else @@ -64,12 +74,18 @@ Tie::head (Grob *me, Direction d) int Tie::get_column_rank (Grob *me, Direction d) { + Grob *col = 0; Spanner *span = dynamic_cast (me); - Grob *h = head (me, d); - if (!h) - h = span->get_bound (d); + if (!span) + col = dynamic_cast (me)->get_column (); + else + { + Grob *h = head (me, d); + if (!h) + h = span->get_bound (d); - Grob *col = dynamic_cast (h)->get_column (); + col = dynamic_cast (h)->get_column (); + } return Paper_column::get_rank (col); } @@ -86,10 +102,9 @@ Tie::get_position (Grob *me) while (flip (&d) != LEFT); /* + TODO: this is theoretically possible for ties across more than 2 + systems.. We should look at the first broken copy. - TODO: this is theoretically possible for ties across more than 2 - systems.. We should look at the first broken copy. - */ programming_error ("Tie without heads. Suicide"); me->suicide (); @@ -109,22 +124,22 @@ Tie::get_position (Grob *me) Direction Tie::get_default_dir (Grob *me) { - Drul_array stems; + Drul_array stems; Direction d = LEFT; do { Grob *one_head = head (me, d); - if (!one_head && dynamic_cast (me)) - one_head = Tie::head (dynamic_cast (me)->broken_neighbor (d), d); - + if (!one_head && dynamic_cast (me)) + one_head = Tie::head (dynamic_cast (me)->broken_neighbor (d), d); + Grob *stem = one_head ? Rhythmic_head::get_stem (one_head) : 0; if (stem) stem = Stem::is_invisible (stem) ? 0 : stem; stems[d] = stem; } - while (flip (&d)!= LEFT); - + while (flip (&d) != LEFT); + if (stems[LEFT] && stems[RIGHT]) { if (get_grob_direction (stems[LEFT]) == UP @@ -138,10 +153,9 @@ Tie::get_default_dir (Grob *me) } else if (int p = get_position (me)) return Direction (sign (p)); - - return to_dir (me->get_property("neutral-direction")); -} + return to_dir (me->get_property ("neutral-direction")); +} MAKE_SCHEME_CALLBACK (Tie, calc_direction, 1); SCM @@ -150,7 +164,7 @@ Tie::calc_direction (SCM smob) Grob *me = unsmob_grob (smob); Grob *yparent = me->get_parent (Y_AXIS); if ((Tie_column::has_interface (yparent) - || Semi_tie_column::has_interface (yparent)) + || Semi_tie_column::has_interface (yparent)) && unsmob_grob_array (yparent->get_object ("ties")) // && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1 ) @@ -164,26 +178,24 @@ Tie::calc_direction (SCM smob) return scm_from_int (Tie::get_default_dir (me)); } - SCM Tie::get_default_control_points (Grob *me_grob) { - Spanner *me = dynamic_cast (me_grob); - Grob *common = me; - common = me->get_bound (LEFT)->common_refpoint (common, X_AXIS); - common = me->get_bound (RIGHT)->common_refpoint (common, X_AXIS); - + Spanner *me = dynamic_cast (me_grob); + Grob *common = me; + common = me->get_bound (LEFT)->common_refpoint (common, X_AXIS); + common = me->get_bound (RIGHT)->common_refpoint (common, X_AXIS); + Tie_formatting_problem problem; problem.from_tie (me); - + Tie_specification spec = problem.get_tie_specification (0); if (!me->is_live ()) return SCM_EOL; - Ties_configuration conf = problem.generate_optimal_configuration (); - + return get_control_points (me, problem.common_x_refpoint (), conf[0], problem.details_); } @@ -192,8 +204,7 @@ SCM Tie::get_control_points (Grob *me, Grob *common, Tie_configuration const &conf, - Tie_details const &details - ) + Tie_details const &details) { Bezier b = conf.get_transformed_bezier (details); b.translate (Offset (- me->relative_coordinate (common, X_AXIS), 0)); @@ -216,39 +227,36 @@ Tie::calc_control_points (SCM smob) Grob *yparent = me->get_parent (Y_AXIS); if ((Tie_column::has_interface (yparent) - || Semi_tie_column::has_interface (yparent)) + || Semi_tie_column::has_interface (yparent)) && unsmob_grob_array (yparent->get_object ("ties"))) { extract_grob_set (yparent, "ties", ties); - if (me->original() && ties.size() == 1 + if (me->original () && ties.size () == 1 && !to_dir (me->get_property_data ("direction"))) { assert (ties[0] == me); set_grob_direction (me, Tie::get_default_dir (me)); - - } + } /* trigger positioning. */ (void) yparent->get_property ("positioning-done"); } SCM cp = me->get_property_data ("control-points"); if (!scm_is_pair (cp)) - { - cp = get_default_control_points (me); - } + cp = get_default_control_points (me); return cp; } /* TODO: merge with Slur::print. - */ +*/ MAKE_SCHEME_CALLBACK (Tie, print, 1); SCM Tie::print (SCM smob) { Grob *me = unsmob_grob (smob); - + SCM cp = me->get_property ("control-points"); Real staff_thick = Staff_symbol_referencer::line_thickness (me); @@ -265,26 +273,14 @@ Tie::print (SCM smob) Stencil a; - SCM p = me->get_property ("dash-period"); - SCM f = me->get_property ("dash-fraction"); - if (scm_is_number (p) && scm_is_number (f)) - a = Lookup::dashed_slur (b, - line_thick, - robust_scm2double (p, 1.0), - robust_scm2double (f, 0)); - else - a = Lookup::slur (b, - get_grob_direction (me) * base_thick, - line_thick); + SCM dash_definition = me->get_property ("dash-definition"); + a = Lookup::slur (b, + get_grob_direction (me) * base_thick, + line_thick, + dash_definition); #if DEBUG_TIE_SCORING SCM annotation = me->get_property ("annotation"); - if (!scm_is_string (annotation)) - { - SCM debug = me->layout ()->lookup_variable (ly_symbol2scm ("debug-tie-scoring")); - if (to_boolean (debug)) - annotation = me->get_property ("quant-score"); - } if (scm_is_string (annotation)) { string str; @@ -300,7 +296,7 @@ Tie::print (SCM smob) /* It would be nice if we could put this in a different layer, but alas, this must be done with a Tie override. - */ + */ a.add_stencil (tm); } #endif @@ -310,25 +306,17 @@ Tie::print (SCM smob) ADD_INTERFACE (Tie, "A horizontal curve connecting two noteheads.", - + /* properties */ "annotation " "avoid-slur " // UGH. "control-points " - "dash-fraction " - "dash-period " + "dash-definition " "details " "direction " "head-direction " "line-thickness " "neutral-direction " - "quant-score " - "separation-item " "staff-position " "thickness " ); - - - - - diff --git a/lily/time-scaled-music-iterator.cc b/lily/time-scaled-music-iterator.cc deleted file mode 100644 index e70c44a485..0000000000 --- a/lily/time-scaled-music-iterator.cc +++ /dev/null @@ -1,142 +0,0 @@ -/* - time-scaled-music-iterator.cc -- implement Time_scaled_music_iterator - - source file of the GNU LilyPond music typesetter - - (c) 1998--2009 Han-Wen Nienhuys , - Erik Sandberg -*/ - -#include "context.hh" -#include "input.hh" -#include "international.hh" -#include "music.hh" -#include "music-wrapper-iterator.hh" -#include "stream-event.hh" - -/* - Iterates \times, by sending TupletSpanEvents at the start/end of each - tuplet bracket. Extra stop/start events are sent at regular - intervals if tupletSpannerDuration is set. -*/ -class Time_scaled_music_iterator : public Music_wrapper_iterator -{ -public: - DECLARE_SCHEME_CALLBACK (constructor, ()); - /* construction */ - DECLARE_CLASSNAME (Time_scaled_music_iterator); - Time_scaled_music_iterator (); -protected: - virtual void process (Moment m); - virtual void construct_children (); - virtual void derived_mark () const; - virtual Moment pending_moment () const; - - Music *create_event (Direction d); - -private: - - /* tupletSpannerDuration */ - Moment spanner_duration_; - - /* next time to add a stop/start pair */ - Moment next_split_mom_; - - /* Recycle start/stop events if tupletSpannerDuration is set. */ - SCM synthesized_events_; - - Context_handle tuplet_handler_; -}; - -Music* -Time_scaled_music_iterator::create_event (Direction d) -{ - SCM ev_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), - ly_symbol2scm ("TupletSpanEvent"), - scm_from_int (d)); - - Music *mus = get_music (); - - Music *ev = unsmob_music (ev_scm); - ev->set_spot (*mus->origin ()); - if (d == START) - { - ev->set_property ("numerator", mus->get_property ("numerator")); - ev->set_property ("denominator", mus->get_property ("denominator")); - ev->set_property ("tweaks", mus->get_property ("tweaks")); - ev->set_property ("length", spanner_duration_.smobbed_copy ()); - } - - synthesized_events_ = scm_cons (ev_scm, synthesized_events_); - return ev; -} - - -Time_scaled_music_iterator::Time_scaled_music_iterator () -{ - spanner_duration_ = next_split_mom_ = 0; - synthesized_events_ = SCM_EOL; -} - - -Moment -Time_scaled_music_iterator::pending_moment () const -{ - Moment next_mom = Music_wrapper_iterator::pending_moment (); - next_mom = min (next_mom, next_split_mom_); - - return next_mom; -} - - -void -Time_scaled_music_iterator::process (Moment m) -{ - if (spanner_duration_.to_bool () && - m.main_part_ == next_split_mom_) - { - descend_to_bottom_context (); - if (tuplet_handler_.get_outlet ()) - create_event (STOP)->send_to_context (tuplet_handler_.get_outlet ()); - - if (m.main_part_ < music_get_length ().main_part_) - { - tuplet_handler_.set_context (get_outlet ()); - report_event (create_event (START)); - - next_split_mom_ += spanner_duration_; - } - else - { - tuplet_handler_.set_context (0); - } - } - Music_wrapper_iterator::process (m); - if (child_iter_ && child_iter_->ok ()) - descend_to_child (child_iter_->get_outlet ()); - -} - -void -Time_scaled_music_iterator::construct_children () -{ - spanner_duration_ = music_get_length (); - - Moment *mp = unsmob_moment (get_outlet ()->get_property ("tupletSpannerDuration")); - if (mp) - spanner_duration_ = min (mp->main_part_, spanner_duration_); - - Music_wrapper_iterator::construct_children (); - - if (child_iter_ && child_iter_->ok ()) - descend_to_child (child_iter_->get_outlet ()); -} - -void -Time_scaled_music_iterator::derived_mark () const -{ - scm_gc_mark (synthesized_events_); - Music_wrapper_iterator::derived_mark (); -} - -IMPLEMENT_CTOR_CALLBACK (Time_scaled_music_iterator); diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index 9d43433604..d0621dd883 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -1,9 +1,20 @@ /* - time-signature-engraver.cc -- implement Time_signature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "engraver-group.hh" diff --git a/lily/time-signature-performer.cc b/lily/time-signature-performer.cc index 740aca82d3..54d4514231 100644 --- a/lily/time-signature-performer.cc +++ b/lily/time-signature-performer.cc @@ -1,9 +1,20 @@ /* - time-signature-performer.cc -- implement Time_signature_performer + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include "audio-item.hh" diff --git a/lily/time-signature.cc b/lily/time-signature.cc index 9beda76748..a1f8a38144 100644 --- a/lily/time-signature.cc +++ b/lily/time-signature.cc @@ -1,9 +1,20 @@ /* - time-signature.cc -- implement Time_signature + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1996--2011 Han-Wen Nienhuys - (c) 1996--2009 Han-Wen Nienhuys + 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 . */ #include "time-signature.hh" @@ -90,7 +101,7 @@ Time_signature::numbered_time_signature (Grob *me, int num, int den) { SCM chain = me->get_property_alist_chain (Font_interface::text_font_alist_chain (me)); chain = scm_cons (scm_list_1 (scm_cons (ly_symbol2scm ("font-encoding"), - ly_symbol2scm ("fetaNumber"))), + ly_symbol2scm ("fetaText"))), chain); SCM sn = Text_interface::interpret_markup (me->layout ()->self_scm (), chain, diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index 57998ace96..d5d069270b 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -1,10 +1,20 @@ /* - timing-translator.cc -- implement Timing_translator + This file is part of LilyPond, the GNU music typesetter. + Copyright (C) 1997--2011 Han-Wen Nienhuys - source file of the GNU LilyPond music typesetter + 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. - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "timing-translator.hh" @@ -12,7 +22,6 @@ #include "warn.hh" #include "translator-group.hh" #include "global-context.hh" -#include "multi-measure-rest.hh" void Timing_translator::stop_translation_timestep () @@ -49,7 +58,7 @@ Timing_translator::initialize () */ context ()->set_property ("measureLength", Moment (Rational (1)).smobbed_copy ()); - context ()->set_property ("beatLength", + context ()->set_property ("baseMoment", Moment (Rational (1, 4)).smobbed_copy ()); } @@ -141,7 +150,10 @@ ADD_TRANSLATOR (Timing_translator, "measurePosition ", /* write */ - "internalBarNumber " + "baseMoment " "currentBarNumber " + "internalBarNumber " + "measureLength " "measurePosition " + "timeSignatureFraction " ); diff --git a/lily/translator-ctors.cc b/lily/translator-ctors.cc index ab1a7db144..b190a927c7 100644 --- a/lily/translator-ctors.cc +++ b/lily/translator-ctors.cc @@ -1,9 +1,20 @@ /* - translator-ctors.cc -- implement Translator construction + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "translator.hh" diff --git a/lily/translator-dispatch-list.cc b/lily/translator-dispatch-list.cc index bf8c70e003..aae00e4e1c 100644 --- a/lily/translator-dispatch-list.cc +++ b/lily/translator-dispatch-list.cc @@ -1,9 +1,20 @@ /* - translator-dispatch-list.cc -- implement Translator_dispatch_list + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "translator-dispatch-list.hh" diff --git a/lily/translator-group-ctors.cc b/lily/translator-group-ctors.cc index d1d03f37f0..5bde18c6b9 100644 --- a/lily/translator-group-ctors.cc +++ b/lily/translator-group-ctors.cc @@ -1,9 +1,20 @@ /* - translator-group-ctors.cc -- implement Translator_group factory. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "score-engraver.hh" diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 64c28ac83d..487037a2dc 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -1,10 +1,21 @@ /* - translator-group.cc -- implement Translator_group + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys , + Copyright (C) 1997--2011 Han-Wen Nienhuys , Erik Sandberg + + 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 . */ #include "translator-group.hh" @@ -12,16 +23,18 @@ #include "context-def.hh" #include "context.hh" #include "dispatcher.hh" +#include "engraver.hh" #include "engraver-group.hh" #include "international.hh" #include "main.hh" #include "music.hh" #include "output-def.hh" +#include "performer.hh" #include "performer-group.hh" +#include "scheme-engraver.hh" #include "scm-hash.hh" #include "warn.hh" - void translator_each (SCM list, Translator_method method) { @@ -41,7 +54,7 @@ Translator_group::connect_to_context (Context *c) if (context_) { programming_error ("translator group is already connected to context " - + context_->context_name ()); + + context_->context_name ()); } context_ = c; @@ -73,13 +86,22 @@ Translator_group::finalize () { } +/* + Both filter_performers and filter_engravers used to use a direct dynamic_cast + on the unsmobbed translator to be filtered, i.e., + + if (dynamic_cast (unsmob_translator (scm_car (*tail)))) + + but this caused mysterious optimisation issues in several GUB builds. See + issue #818 for the background to this change. +*/ SCM filter_performers (SCM ell) { SCM *tail = ℓ for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p)) { - if (dynamic_cast (unsmob_translator (scm_car (*tail)))) + if (unsmob_performer (scm_car (*tail))) *tail = scm_cdr (*tail); else tail = SCM_CDRLOC (*tail); @@ -93,7 +115,7 @@ filter_engravers (SCM ell) SCM *tail = ℓ for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p)) { - if (dynamic_cast (unsmob_translator (scm_car (*tail)))) + if (unsmob_engraver (scm_car (*tail))) *tail = scm_cdr (*tail); else tail = SCM_CDRLOC (*tail); @@ -141,15 +163,38 @@ Translator_group::create_child_translator (SCM sev) for (SCM s = trans_names; scm_is_pair (s); s = scm_cdr (s)) { - Translator *type = get_translator (scm_car (s)); + SCM definition = scm_car (s); + bool is_scheme = false; + + Translator *type = 0; + if (ly_is_symbol (definition)) + type = get_translator (definition); + else if (ly_is_pair (definition)) + { + type = get_translator (ly_symbol2scm ("Scheme_engraver")); + is_scheme = true; + } + else if (ly_is_procedure (definition)) + { + // `definition' is a procedure, which takes the context as + // an argument and evaluates to an a-list scheme engraver + // definition. + definition = scm_call_1 (definition, cs); + type = get_translator (ly_symbol2scm ("Scheme_engraver")); + is_scheme = true; + } + if (!type) warning (_f ("cannot find: `%s'", ly_symbol2string (scm_car (s)).c_str ())); else { - Translator *tr = type->clone (); - SCM str = tr->self_scm (); + Translator *instance = type->clone (); + if (is_scheme) + dynamic_cast (instance)->init_from_scheme (definition); + + SCM str = instance->self_scm (); - if (tr->must_be_last ()) + if (instance->must_be_last ()) { SCM cons = scm_cons (str, SCM_EOL); if (scm_is_pair (trans_list)) @@ -160,13 +205,13 @@ Translator_group::create_child_translator (SCM sev) else trans_list = scm_cons (str, trans_list); - tr->daddy_context_ = new_context; - tr->unprotect (); + instance->daddy_context_ = new_context; + instance->unprotect (); } } /* Filter unwanted translator types. Required to make - \with {\consists "..."} work. */ + \with { \consists "..." } work. */ if (dynamic_cast (g)) g->simple_trans_list_ = filter_performers (trans_list); else if (dynamic_cast (g)) diff --git a/lily/translator-scheme.cc b/lily/translator-scheme.cc index 775e47da0d..7ede1b0eb4 100644 --- a/lily/translator-scheme.cc +++ b/lily/translator-scheme.cc @@ -1,11 +1,23 @@ /* - translator-scheme.cc -- implement Scheme context functions + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ +#include "context.hh" #include "context-def.hh" #include "translator-group.hh" #include "moment.hh" @@ -30,3 +42,14 @@ LY_DEFINE (ly_translator_description, "ly:translator-description", return tr->translator_description (); } + +LY_DEFINE (ly_translator_context, "ly:translator-context", + 1, 0, 0, (SCM trans), + "Return the context of the translator object @var{trans}.") +{ + LY_ASSERT_SMOB (Translator, trans, 1); + Translator *tr = unsmob_translator (trans); + + Context *c = tr->context (); + return c ? c->self_scm () : SCM_BOOL_F; +} diff --git a/lily/translator.cc b/lily/translator.cc index efa375549f..3020006f83 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -1,9 +1,20 @@ /* - translator.cc -- implement Translator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "translator.hh" @@ -25,7 +36,6 @@ Translator::~Translator () void Translator::init () { - must_be_last_ = false; self_scm_ = SCM_EOL; daddy_context_ = 0; smobify_self (); @@ -48,8 +58,8 @@ Translator::Translator () Translator::Translator (Translator const &src) { + (void) src; init (); - must_be_last_ = src.must_be_last_; } Moment @@ -110,15 +120,17 @@ Translator::finalize () void Translator::connect_to_context (Context *c) { - for (translator_listener_record *r = get_listener_list (); r; r=r->next_) - c->events_below ()->add_listener (r->get_listener_ (this), r->event_class_); + for (translator_listener_record *r = get_listener_list (); r; r = r->next_) + c->events_below ()->add_listener (r->get_listener_ (this, r->event_class_), + r->event_class_); } void Translator::disconnect_from_context (Context *c) { - for (translator_listener_record *r = get_listener_list (); r; r=r->next_) - c->events_below ()->remove_listener (r->get_listener_ (this), r->event_class_); + for (translator_listener_record *r = get_listener_list (); r; r = r->next_) + c->events_below ()->remove_listener (r->get_listener_ (this, r->event_class_), + r->event_class_); } static SCM listened_event_class_table; @@ -166,7 +178,7 @@ add_listened_event_class (SCM sym) void Translator::add_translator_listener (translator_listener_record **listener_list, translator_listener_record *r, - Listener (*get_listener) (void *), + Listener (*get_listener) (void *, SCM), const char *ev_class) { /* ev_class is the C++ identifier name. Convert to scm symbol */ @@ -174,7 +186,7 @@ Translator::add_translator_listener (translator_listener_record **listener_list, name = replace_all (&name, '_', '-'); name += "-event"; - SCM class_sym = scm_str2symbol (name.c_str ()); + SCM class_sym = scm_from_locale_symbol (name.c_str ()); add_listened_event_class (class_sym); @@ -247,7 +259,7 @@ IMPLEMENT_TYPE_P (Translator, "ly:translator?"); bool Translator::must_be_last () const { - return must_be_last_; + return false; } void diff --git a/lily/trill-spanner-engraver.cc b/lily/trill-spanner-engraver.cc index 94554b790b..5f4b38d265 100644 --- a/lily/trill-spanner-engraver.cc +++ b/lily/trill-spanner-engraver.cc @@ -1,9 +1,20 @@ /* - trill-spanner-engraver.cc -- implement Trill_spanner_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Jan Nieuwenhuizen - (c) 2000--2009 Jan Nieuwenhuizen + 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 . */ /* diff --git a/lily/ttf.cc b/lily/ttf.cc index d8e2b56f45..4bd6378f27 100644 --- a/lily/ttf.cc +++ b/lily/ttf.cc @@ -1,9 +1,20 @@ /* - ttf.cc -- implement ttf -> pfa routine. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include @@ -67,10 +78,10 @@ print_header (void *out, FT_Face face) = (TT_Header *)FT_Get_Sfnt_Table (face, ft_sfnt_head); lily_cookie_fprintf (out, "/FontBBox [%lf %lf %lf %lf] def\n", - float (ht->xMin) / ht->Units_Per_EM, - float (ht->yMin) / ht->Units_Per_EM, - float (ht->xMax) / ht->Units_Per_EM, - float (ht->yMax) / ht->Units_Per_EM); + float (ht->xMin) / float (ht->Units_Per_EM), + float (ht->yMin) / float (ht->Units_Per_EM), + float (ht->xMax) / float (ht->Units_Per_EM), + float (ht->yMax) / float (ht->Units_Per_EM)); lily_cookie_fprintf (out, "/FontType 42 def\n"); lily_cookie_fprintf (out, "/FontInfo 8 dict dup begin\n"); @@ -101,9 +112,11 @@ print_header (void *out, FT_Face face) lily_cookie_fprintf (out, "/isFixedPitch %s def\n", pt->isFixedPitch ? "true" : "false"); lily_cookie_fprintf (out, "/UnderlinePosition %lf def\n", - float (pt->underlinePosition) / ht->Units_Per_EM); + float (pt->underlinePosition) + / float (ht->Units_Per_EM)); lily_cookie_fprintf (out, "/UnderlineThickness %lf def\n", - float (pt->underlineThickness) / ht->Units_Per_EM); + float (pt->underlineThickness) + / float (ht->Units_Per_EM)); lily_cookie_fprintf (out, "end readonly def\n"); } @@ -157,7 +170,7 @@ void t42_write_table (void *out, FT_Face face, unsigned char const *buffer, if (offset > last_offset + CHUNKSIZE) { if (last_chunk != last_offset) - chunks.push_back (last_offset - last_chunk); + chunks.push_back (FT_UShort (last_offset - last_chunk)); /* a single glyph with more than 64k data is a pathological case but... @@ -168,18 +181,18 @@ void t42_write_table (void *out, FT_Face face, unsigned char const *buffer, chunks.push_back (CHUNKSIZE); rest -= CHUNKSIZE; } - chunks.push_back (rest); + chunks.push_back (FT_UShort (rest)); last_chunk = offset; } else if (offset > last_chunk + CHUNKSIZE) { - chunks.push_back (last_offset - last_chunk); + chunks.push_back (FT_UShort (last_offset - last_chunk)); last_chunk = last_offset; } last_offset = offset; } - chunks.push_back (s - last_chunk); + chunks.push_back (FT_UShort (s - last_chunk)); delete[] loca_buf; } @@ -191,7 +204,7 @@ void t42_write_table (void *out, FT_Face face, unsigned char const *buffer, chunks.push_back (CHUNKSIZE); rest -= CHUNKSIZE; } - chunks.push_back (rest); + chunks.push_back (FT_UShort (rest)); } else chunks.push_back (CHUNKSIZE); @@ -264,11 +277,11 @@ print_body (void *out, FT_Face face) unsigned char *hbuf = new unsigned char[hlength]; unsigned char *p; - hbuf[0] = 0x00; /* version */ + hbuf[0] = 0x00; /* version */ hbuf[1] = 0x01; hbuf[2] = 0x00; hbuf[3] = 0x00; - hbuf[4] = (idx & 0xFF00) >> 8; /* numTables */ + hbuf[4] = (unsigned char) ((idx & 0xFF00) >> 8); /* numTables */ hbuf[5] = idx & 0x00FF; FT_UInt searchRange, entrySelector, rangeShift; @@ -279,11 +292,11 @@ print_body (void *out, FT_Face face) searchRange = 0x10 << entrySelector; rangeShift = (idx << 4) - searchRange; - hbuf[6] = (searchRange & 0xFF00) >> 8; + hbuf[6] = (unsigned char) ((searchRange & 0xFF00) >> 8); hbuf[7] = searchRange & 0x00FF; - hbuf[8] = (entrySelector & 0xFF00) >> 8; + hbuf[8] = (unsigned char) ((entrySelector & 0xFF00) >> 8); hbuf[9] = entrySelector & 0x00FF; - hbuf[10] = (rangeShift & 0xFF00) >> 8; + hbuf[10] = (unsigned char) ((rangeShift & 0xFF00) >> 8); hbuf[11] = rangeShift & 0x00FF; p = &hbuf[12]; @@ -326,24 +339,24 @@ print_body (void *out, FT_Face face) delete[] buf; - *(p++) = (tags[i] & 0xFF000000UL) >> 24; - *(p++) = (tags[i] & 0x00FF0000UL) >> 16; - *(p++) = (tags[i] & 0x0000FF00UL) >> 8; + *(p++) = (unsigned char) ((tags[i] & 0xFF000000UL) >> 24); + *(p++) = (unsigned char) ((tags[i] & 0x00FF0000UL) >> 16); + *(p++) = (unsigned char) ((tags[i] & 0x0000FF00UL) >> 8); *(p++) = tags[i] & 0x000000FFUL; - *(p++) = (checksum & 0xFF000000UL) >> 24; - *(p++) = (checksum & 0x00FF0000UL) >> 16; - *(p++) = (checksum & 0x0000FF00UL) >> 8; + *(p++) = (unsigned char) ((checksum & 0xFF000000UL) >> 24); + *(p++) = (unsigned char) ((checksum & 0x00FF0000UL) >> 16); + *(p++) = (unsigned char) ((checksum & 0x0000FF00UL) >> 8); *(p++) = checksum & 0x000000FFUL; - *(p++) = (offset & 0xFF000000UL) >> 24; - *(p++) = (offset & 0x00FF0000UL) >> 16; - *(p++) = (offset & 0x0000FF00UL) >> 8; + *(p++) = (unsigned char) ((offset & 0xFF000000UL) >> 24); + *(p++) = (unsigned char) ((offset & 0x00FF0000UL) >> 16); + *(p++) = (unsigned char) ((offset & 0x0000FF00UL) >> 8); *(p++) = offset & 0x000000FFUL; - *(p++) = (lengths[i] & 0xFF000000UL) >> 24; - *(p++) = (lengths[i] & 0x00FF0000UL) >> 16; - *(p++) = (lengths[i] & 0x0000FF00UL) >> 8; + *(p++) = (unsigned char) ((lengths[i] & 0xFF000000UL) >> 24); + *(p++) = (unsigned char) ((lengths[i] & 0x00FF0000UL) >> 16); + *(p++) = (unsigned char) ((lengths[i] & 0x0000FF00UL) >> 8); *(p++) = lengths[i] & 0x000000FFUL; /* offset must be a multiple of 4 */ @@ -379,9 +392,9 @@ print_body (void *out, FT_Face face) if (tag == head_tag) { /* in the second pass simply store the computed font checksum */ - buf[8] = (font_checksum & 0xFF000000UL) >> 24; - buf[9] = (font_checksum & 0x00FF0000UL) >> 16; - buf[10] = (font_checksum & 0x0000FF00UL) >> 8; + buf[8] = (unsigned char) ((font_checksum & 0xFF000000UL) >> 24); + buf[9] = (unsigned char) ((font_checksum & 0x00FF0000UL) >> 16); + buf[10] = (unsigned char) ((font_checksum & 0x0000FF00UL) >> 8); buf[11] = font_checksum & 0x000000FFUL; } @@ -440,7 +453,7 @@ print_trailer (void *out, if (glyph_name[0]) { - lily_cookie_fprintf (out, "/%s %d def ", glyph_name, i); + lily_cookie_fprintf (out, "(%s) cvn %d def ", glyph_name, i); output_count ++; } else diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index 4ddb09245e..3bf2d1b49e 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -1,10 +1,21 @@ /* - tuplet-bracket.cc -- implement Tuplet_bracket + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Jan Nieuwenhuizen + Copyright (C) 1997--2011 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ /* @@ -29,7 +40,6 @@ todo: handle breaking elegantly. */ - #include "tuplet-bracket.hh" #include "line-interface.hh" #include "beam.hh" @@ -60,25 +70,22 @@ get_x_bound_item (Grob *me_grob, Direction hdir, Direction my_dir) return g; } - void -flatten_number_pair_property (Grob *me, - Direction xdir, SCM sym) +flatten_number_pair_property (Grob *me, Direction xdir, SCM sym) { Drul_array zero (0, 0); Drul_array pair = robust_scm2drul (me->internal_get_property (sym), zero); pair[xdir] = 0.0; - + me->set_property (sym, ly_interval2scm (pair)); } - /* Return beam that encompasses the span of the tuplet bracket. */ Grob * -Tuplet_bracket::parallel_beam (Grob *me_grob, vector const &cols, +Tuplet_bracket::parallel_beam (Grob *me_grob, vector const &cols, bool *equally_long) { Spanner *me = dynamic_cast (me_grob); @@ -87,21 +94,21 @@ Tuplet_bracket::parallel_beam (Grob *me_grob, vector const &cols, || me->get_bound (RIGHT)->break_status_dir ()) return 0; - Drul_array stems (Note_column::get_stem (cols[0]), - Note_column::get_stem (cols.back ())); + Drul_array stems (Note_column::get_stem (cols[0]), + Note_column::get_stem (cols.back ())); if (!stems[RIGHT] || !stems[LEFT] - || (dynamic_cast (stems[RIGHT])->get_column () + || (dynamic_cast (stems[RIGHT])->get_column () != me->get_bound (RIGHT)->get_column ())) return 0; - Drul_array beams; + Drul_array beams; Direction d = LEFT; - do { + do beams[d] = stems[d] ? Stem::get_beam (stems[d]) : 0; - } while (flip (&d) != LEFT); - + while (flip (&d) != LEFT); + *equally_long = false; if (! (beams[LEFT] && (beams[LEFT] == beams[RIGHT]) && !me->is_broken ())) return 0; @@ -114,29 +121,28 @@ Tuplet_bracket::parallel_beam (Grob *me_grob, vector const &cols, return 0; } - *equally_long = - (beam_stems[0] == stems[LEFT] - && beam_stems.back () == stems[RIGHT]); + *equally_long + = (beam_stems[0] == stems[LEFT] + && beam_stems.back () == stems[RIGHT]); return beams[LEFT]; } - -MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_connect_to_neighbors,1); +MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_connect_to_neighbors, 1); SCM Tuplet_bracket::calc_connect_to_neighbors (SCM smob) { Spanner *me = unsmob_spanner (smob); - Direction dir = get_grob_direction (me); + Direction dir = get_grob_direction (me); Drul_array bounds (get_x_bound_item (me, LEFT, dir), get_x_bound_item (me, RIGHT, dir)); - + Drul_array connect_to_other (false, false); Direction d = LEFT; do { Direction break_dir = bounds[d]->break_status_dir (); - Spanner *orig_spanner = dynamic_cast (me->original ()); + Spanner *orig_spanner = dynamic_cast (me->original ()); vsize neighbor_idx = me->get_break_index () - break_dir; if (break_dir && d == RIGHT @@ -155,27 +161,26 @@ Tuplet_bracket::calc_connect_to_neighbors (SCM smob) } while (flip (&d) != LEFT); - if (connect_to_other[LEFT] || connect_to_other[RIGHT]) return scm_cons (scm_from_bool (connect_to_other[LEFT]), scm_from_bool (connect_to_other[RIGHT])); - + return SCM_EOL; } -Grob* +Grob * Tuplet_bracket::get_common_x (Spanner *me) { extract_grob_set (me, "note-columns", columns); - Grob * commonx = common_refpoint_of_array (columns, me, X_AXIS); + Grob *commonx = common_refpoint_of_array (columns, me, X_AXIS); commonx = commonx->common_refpoint (me->get_bound (LEFT), X_AXIS); commonx = commonx->common_refpoint (me->get_bound (RIGHT), X_AXIS); return commonx; } - -MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_control_points,1) + +MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_control_points, 1) SCM Tuplet_bracket::calc_control_points (SCM smob) { @@ -186,12 +191,12 @@ Tuplet_bracket::calc_control_points (SCM smob) SCM scm_positions = me->get_property ("positions"); if (!me->is_live ()) return SCM_EOL; - + if (!scm_is_pair (scm_positions)) programming_error ("Positions should be number pair"); - + Drul_array positions - = robust_scm2drul (scm_positions, Drul_array (0,0)); + = robust_scm2drul (scm_positions, Drul_array (0, 0)); Grob *commonx = get_common_x (me); Direction dir = get_grob_direction (me); @@ -200,11 +205,10 @@ Tuplet_bracket::calc_control_points (SCM smob) bounds[LEFT] = get_x_bound_item (me, LEFT, dir); bounds[RIGHT] = get_x_bound_item (me, RIGHT, dir); - Drul_array connect_to_other = - robust_scm2booldrul (me->get_property ("connect-to-neighbor"), - Drul_array (false, false)); - - + Drul_array connect_to_other + = robust_scm2booldrul (me->get_property ("connect-to-neighbor"), + Drul_array (false, false)); + Interval x_span; Direction d = LEFT; do @@ -219,10 +223,11 @@ Tuplet_bracket::calc_control_points (SCM smob) if (d == RIGHT) x_span[d] += d * overshoot[d]; else - x_span[d] = robust_relative_extent (bounds[d], commonx, X_AXIS)[RIGHT] + x_span[d] = robust_relative_extent (bounds[d], + commonx, X_AXIS)[RIGHT] - overshoot[LEFT]; } - + else if (d == RIGHT && (columns.empty () || (bounds[d]->get_column () @@ -232,15 +237,15 @@ Tuplet_bracket::calc_control_points (SCM smob) We're connecting to a column, for the last bit of a broken fullLength bracket. */ - Real padding = - robust_scm2double(me->get_property("full-length-padding"), 1.0); + Real padding + = robust_scm2double (me->get_property ("full-length-padding"), 1.0); if (bounds[d]->break_status_dir ()) padding = 0.0; - Real coord = bounds[d]->relative_coordinate(commonx, X_AXIS); + Real coord = bounds[d]->relative_coordinate (commonx, X_AXIS); if (to_boolean (me->get_property ("full-length-to-extent"))) - coord = robust_relative_extent(bounds[d], commonx, X_AXIS)[LEFT]; + coord = robust_relative_extent (bounds[d], commonx, X_AXIS)[LEFT]; coord = max (coord, x_span[LEFT]); @@ -249,8 +254,6 @@ Tuplet_bracket::calc_control_points (SCM smob) } while (flip (&d) != LEFT); - - x_span -= me->get_bound (LEFT)->relative_coordinate (commonx, X_AXIS); return scm_list_2 (ly_offset2scm (Offset (x_span[LEFT], positions[LEFT])), ly_offset2scm (Offset (x_span[RIGHT], positions[RIGHT]))); @@ -272,45 +275,52 @@ Tuplet_bracket::print (SCM smob) extract_grob_set (me, "note-columns", columns); bool equally_long = false; Grob *par_beam = parallel_beam (me, columns, &equally_long); - - bool bracket_visibility = !(par_beam && equally_long); + + bool bracket_visibility = !(par_beam && equally_long); // Flag, print/don't print tuplet bracket. /* - Fixme: the type of this prop is sucky. + FIXME: The type of this prop is sucky. */ - SCM bracket = me->get_property ("bracket-visibility"); - if (scm_is_bool (bracket)) - bracket_visibility = ly_scm2bool (bracket); - else if (bracket == ly_symbol2scm ("if-no-beam")) + SCM bracket_vis_prop = me->get_property ("bracket-visibility"); + bool bracket_prop = ly_scm2bool (bracket_vis_prop); // Flag, user has set bracket-visibility prop. + bool bracket = (bracket_vis_prop == ly_symbol2scm ("if-no-beam")); + if (scm_is_bool (bracket_vis_prop)) + bracket_visibility = bracket_prop; + else if (bracket) bracket_visibility = !par_beam; - - /* Don't print a tuplet bracket and number if no control-points were calculated */ - SCM cpoints = me->get_property ("control-points"); + + /* + Don't print a tuplet bracket and number if + no control-points were calculated + */ + SCM cpoints = me->get_property ("control-points"); if (scm_ilength (cpoints) < 2) { me->suicide (); return SCM_EOL; } /* if the tuplet does not span any time, i.e. a single-note tuplet, hide - the bracket, but still let the number be displayed */ - if (robust_scm2moment (me->get_bound (LEFT)->get_column ()->get_property ("when"), Moment (0)) - == robust_scm2moment (me->get_bound (RIGHT)->get_column ()->get_property ("when"), Moment (0))) - { - bracket_visibility = false; - } - + the bracket, but still let the number be displayed. + Only do this if the user has not explicitly specified bracket-visibility = #t. + */ + if (!to_boolean (bracket_vis_prop) + && (robust_scm2moment (me->get_bound (LEFT)->get_column ()->get_property ("when"), Moment (0)) + == robust_scm2moment (me->get_bound (RIGHT)->get_column ()->get_property ("when"), Moment (0)))) + bracket_visibility = false; + Drul_array points; points[LEFT] = ly_scm2offset (scm_car (cpoints)); points[RIGHT] = ly_scm2offset (scm_cadr (cpoints)); - + Interval x_span (points[LEFT][X_AXIS], points[RIGHT][X_AXIS]); Drul_array positions (points[LEFT][Y_AXIS], points[RIGHT][Y_AXIS]); Output_def *pap = me->layout (); Grob *number_grob = unsmob_grob (me->get_object ("tuplet-number")); - + /* - No bracket when it would be smaller than the number. + Don't print the bracket when it would be smaller than the number. + ...Unless the user has coded bracket-visibility = #t, that is. */ Real gap = 0.; if (bracket_visibility && number_grob) @@ -319,8 +329,8 @@ Tuplet_bracket::print (SCM smob) if (!ext.is_empty ()) { gap = ext.length () + 1.0; - - if (0.75 * x_span.length () < gap) + + if ((0.75 * x_span.length () < gap) && !bracket_prop) bracket_visibility = false; } } @@ -338,14 +348,14 @@ Tuplet_bracket::print (SCM smob) Drul_array edge_stencils; Direction dir = get_grob_direction (me); - + scale_drul (&height, -ss * dir); scale_drul (&flare, ss); scale_drul (&shorten, ss); - Drul_array connect_to_other = - robust_scm2booldrul (me->get_property ("connect-to-neighbor"), - Drul_array (false, false)); + Drul_array connect_to_other + = robust_scm2booldrul (me->get_property ("connect-to-neighbor"), + Drul_array (false, false)); Direction d = LEFT; do @@ -364,11 +374,13 @@ Tuplet_bracket::print (SCM smob) SCM text = index_get_cell (edge_text, d); if (Text_interface::is_markup (text)) { - SCM t = Text_interface::interpret_markup (pap->self_scm (), - properties, text); + SCM t + = Text_interface::interpret_markup (pap->self_scm (), + properties, text); Stencil *edge_text = unsmob_stencil (t); - edge_text->translate_axis (x_span[d] - x_span[LEFT], X_AXIS); + edge_text->translate_axis (x_span[d] - x_span[LEFT], + X_AXIS); edge_stencils[d] = *edge_text; } } @@ -408,7 +420,7 @@ Tuplet_bracket::print (SCM smob) */ Stencil Tuplet_bracket::make_bracket (Grob *me, // for line properties. - Axis protusion_axis, + Axis protrusion_axis, Offset dz, Drul_array height, Interval gap, @@ -420,7 +432,7 @@ Tuplet_bracket::make_bracket (Grob *me, // for line properties. Real length = dz.length (); Drul_array gap_corners; - Axis bracket_axis = other_axis (protusion_axis); + Axis bracket_axis = other_axis (protrusion_axis); Drul_array straight_corners = corners; @@ -440,7 +452,7 @@ Tuplet_bracket::make_bracket (Grob *me, // for line properties. do { flare_corners[d][bracket_axis] = straight_corners[d][bracket_axis]; - flare_corners[d][protusion_axis] += height[d]; + flare_corners[d][protrusion_axis] += height[d]; straight_corners[d][bracket_axis] += -d * flare[d]; } while (flip (&d) != LEFT); @@ -461,7 +473,7 @@ Tuplet_bracket::make_bracket (Grob *me, // for line properties. if (gap.is_empty ()) m.add_stencil (Line_interface::line (me, straight_corners[LEFT], straight_corners[RIGHT])); - + return m; } @@ -474,7 +486,7 @@ Tuplet_bracket::get_bounds (Grob *me, Grob **left, Grob **right) l++; vsize r = columns.size (); - while (r > l && Note_column::has_rests (columns[r-1])) + while (r > l && Note_column::has_rests (columns[r - 1])) r--; *left = *right = 0; @@ -482,7 +494,7 @@ Tuplet_bracket::get_bounds (Grob *me, Grob **left, Grob **right) if (l < r) { *left = columns[l]; - *right = columns[r-1]; + *right = columns[r - 1]; } } @@ -515,25 +527,25 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) if (st && !to_boolean (me->get_property ("cross-staff"))) { Real pad = robust_scm2double (me->get_property ("staff-padding"), -1.0); - if (pad >= 0.0) + if (pad >= 0.0) { staff = st->extent (commony, Y_AXIS) - my_offset; staff.widen (pad); } } - + Direction dir = get_grob_direction (me); bool equally_long = false; Grob *par_beam = parallel_beam (me, columns, &equally_long); - + Item *lgr = get_x_bound_item (me, LEFT, dir); Item *rgr = get_x_bound_item (me, RIGHT, dir); Real x0 = robust_relative_extent (lgr, commonx, X_AXIS)[LEFT]; Real x1 = robust_relative_extent (rgr, commonx, X_AXIS)[RIGHT]; bool follow_beam = par_beam && get_grob_direction (par_beam) == dir - && ! to_boolean (par_beam->get_property ("knee")); + && !to_boolean (par_beam->get_property ("knee")); vector points; if (columns.size () @@ -543,7 +555,7 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) { /* trigger set_stem_ends - */ + */ (void) par_beam->get_property ("quantized-positions"); Drul_array stems (Note_column::get_stem (columns[0]), @@ -551,9 +563,9 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) Real ss = 0.5 * Staff_symbol_referencer::staff_space (me); Real lp = ss * robust_scm2double (stems[LEFT]->get_property ("stem-end-position"), 0.0) - + stems[LEFT]->get_parent (Y_AXIS)->relative_coordinate (commony, Y_AXIS); + + stems[LEFT]->get_parent (Y_AXIS)->relative_coordinate (commony, Y_AXIS); Real rp = ss * robust_scm2double (stems[RIGHT]->get_property ("stem-end-position"), 0.0) - + stems[RIGHT]->get_parent (Y_AXIS)->relative_coordinate (commony, Y_AXIS); + + stems[RIGHT]->get_parent (Y_AXIS)->relative_coordinate (commony, Y_AXIS); *dy = rp - lp; points.push_back (Offset (stems[LEFT]->relative_coordinate (commonx, X_AXIS) - x0, lp)); @@ -594,7 +606,8 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) for (vsize i = 0; i < columns.size (); i++) { - Interval note_ext = Note_column::cross_staff_extent (columns[i], commony); + Interval note_ext = Note_column::cross_staff_extent (columns[i], + commony); Real x = columns[i]->relative_coordinate (commonx, X_AXIS) - x0; points.push_back (Offset (x, note_ext[dir])); @@ -606,7 +619,7 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) points.push_back (Offset (x0 - x0, staff[dir])); points.push_back (Offset (x1 - x0, staff[dir])); } - + /* This is a slight hack. We compute two encompass points from the bbox of the smaller tuplets. @@ -621,12 +634,12 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) if (!tuplets[i]->is_live ()) continue; - + Direction d = LEFT; - Drul_array positions = robust_scm2interval (tuplets[i]->get_property ("positions"), - Interval (0,0)); + Drul_array positions + = robust_scm2interval (tuplets[i]->get_property ("positions"), + Interval (0,0)); - Real other_dy = positions[RIGHT] - positions[LEFT]; do @@ -664,7 +677,7 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) Kind of pointless since we put them outside the staff anyway, but let's leave code for the future when possibly allow them to move into the staff once again. - + This doesn't seem to support cross-staff tuplets atm. */ if (*dy == 0 @@ -681,7 +694,6 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) } } - MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_direction, 1); SCM Tuplet_bracket::calc_direction (SCM smob) @@ -700,10 +712,10 @@ Tuplet_bracket::calc_positions (SCM smob) Real dy = 0.0; Real offset = 0.0; calc_position_and_height (me, &offset, &dy); - + SCM x = scm_cons (scm_from_double (offset), scm_from_double (offset + dy)); - + return x; } @@ -744,28 +756,29 @@ SCM Tuplet_bracket::calc_cross_staff (SCM smob) { Grob *me = unsmob_grob (smob); - Grob *staff_symbol = 0; extract_grob_set (me, "note-columns", cols); + extract_grob_set (me, "tuplets", tuplets); + + Grob *commony = common_refpoint_of_array (cols, me, Y_AXIS); + commony = common_refpoint_of_array (tuplets, commony, Y_AXIS); + if (Grob *st = Staff_symbol_referencer::get_staff_symbol (me)) + commony = st->common_refpoint (commony, Y_AXIS); + if (me->check_cross_staff (commony)) + return SCM_BOOL_T; + bool equally_long = false; Grob *par_beam = parallel_beam (me, cols, &equally_long); - if (par_beam) - return par_beam->get_property ("cross-staff"); + if (par_beam && to_boolean (par_beam->get_property ("cross-staff"))) + return SCM_BOOL_T; for (vsize i = 0; i < cols.size (); i++) { Grob *stem = unsmob_grob (cols[i]->get_object ("stem")); - if (!stem) - continue; - - if (to_boolean (stem->get_property ("cross-staff"))) + if (stem && to_boolean (stem->get_property ("cross-staff"))) return SCM_BOOL_T; - - Grob *stem_staff = Staff_symbol_referencer::get_staff_symbol (stem); - if (staff_symbol && (stem_staff != staff_symbol)) - return SCM_BOOL_T; - staff_symbol = stem_staff; } + return SCM_BOOL_F; } @@ -797,5 +810,3 @@ ADD_INTERFACE (Tuplet_bracket, "thickness " "tuplets " ); - - diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 6ee50151d5..39c120dd75 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -1,9 +1,20 @@ /* - tuplet-engraver.cc -- implement Tuplet_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2009 Han-Wen Nienhuys + 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 . */ #include "beam.hh" @@ -141,7 +152,7 @@ Tuplet_engraver::process_music () stopped_tuplets_[i].bracket_->get_bound (LEFT)); } else - programming_error ("stopped tuplet bracket has left nor right bound."); + programming_error ("stopped tuplet bracket has neither left nor right bound"); } // todo: scrap last_tuplets_, use stopped_tuplets_ only. // clear stopped_tuplets_ at start_translation_timestep diff --git a/lily/tuplet-iterator.cc b/lily/tuplet-iterator.cc new file mode 100644 index 0000000000..97737db0f2 --- /dev/null +++ b/lily/tuplet-iterator.cc @@ -0,0 +1,149 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1998--2011 Han-Wen Nienhuys , + Erik Sandberg + + 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 . +*/ + +#include "context.hh" +#include "input.hh" +#include "international.hh" +#include "music.hh" +#include "music-wrapper-iterator.hh" +#include "stream-event.hh" + +/* + Iterates \times, by sending TupletSpanEvents at the start/end of each + tuplet bracket. Extra stop/start events are sent at regular + intervals if tupletSpannerDuration is set. +*/ +class Tuplet_iterator : public Music_wrapper_iterator +{ +public: + DECLARE_SCHEME_CALLBACK (constructor, ()); + /* construction */ + DECLARE_CLASSNAME (Tuplet_iterator); + Tuplet_iterator (); +protected: + virtual void process (Moment m); + virtual void construct_children (); + virtual void derived_mark () const; + virtual Moment pending_moment () const; + + Music *create_event (Direction d); + +private: + + /* tupletSpannerDuration */ + Moment spanner_duration_; + + /* next time to add a stop/start pair */ + Moment next_split_mom_; + + /* Recycle start/stop events if tupletSpannerDuration is set. */ + SCM synthesized_events_; + + Context_handle tuplet_handler_; +}; + +Music * +Tuplet_iterator::create_event (Direction d) +{ + SCM ev_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), + ly_symbol2scm ("TupletSpanEvent"), + scm_from_int (d)); + + Music *mus = get_music (); + + Music *ev = unsmob_music (ev_scm); + ev->set_spot (*mus->origin ()); + if (d == START) + { + ev->set_property ("numerator", mus->get_property ("numerator")); + ev->set_property ("denominator", mus->get_property ("denominator")); + ev->set_property ("tweaks", mus->get_property ("tweaks")); + ev->set_property ("length", spanner_duration_.smobbed_copy ()); + } + + synthesized_events_ = scm_cons (ev_scm, synthesized_events_); + return ev; +} + +Tuplet_iterator::Tuplet_iterator () +{ + spanner_duration_ = next_split_mom_ = 0; + synthesized_events_ = SCM_EOL; +} + +Moment +Tuplet_iterator::pending_moment () const +{ + Moment next_mom = Music_wrapper_iterator::pending_moment (); + next_mom = min (next_mom, next_split_mom_); + + return next_mom; +} + +void +Tuplet_iterator::process (Moment m) +{ + if (spanner_duration_.to_bool () + && m.main_part_ == next_split_mom_) + { + descend_to_bottom_context (); + if (tuplet_handler_.get_outlet ()) + create_event (STOP)->send_to_context (tuplet_handler_.get_outlet ()); + + if (m.main_part_ < music_get_length ().main_part_) + { + tuplet_handler_.set_context (get_outlet ()); + report_event (create_event (START)); + + next_split_mom_ += spanner_duration_; + } + else + tuplet_handler_.set_context (0); + } + Music_wrapper_iterator::process (m); + if (child_iter_ && child_iter_->ok ()) + descend_to_child (child_iter_->get_outlet ()); + +} + +void +Tuplet_iterator::construct_children () +{ + spanner_duration_ = music_get_length (); + + Moment *mp + = unsmob_moment (get_outlet ()->get_property ("tupletSpannerDuration")); + if (mp) + spanner_duration_ = min (mp->main_part_, spanner_duration_); + + Music_wrapper_iterator::construct_children (); + + if (child_iter_ && child_iter_->ok ()) + descend_to_child (child_iter_->get_outlet ()); +} + +void +Tuplet_iterator::derived_mark () const +{ + scm_gc_mark (synthesized_events_); + Music_wrapper_iterator::derived_mark (); +} + +IMPLEMENT_CTOR_CALLBACK (Tuplet_iterator); diff --git a/lily/tuplet-number.cc b/lily/tuplet-number.cc index 117179eb11..ceff251167 100644 --- a/lily/tuplet-number.cc +++ b/lily/tuplet-number.cc @@ -1,10 +1,21 @@ /* - tuplet-number.cc -- implement Tuplet_number + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "tuplet-bracket.hh" diff --git a/lily/tweak-engraver.cc b/lily/tweak-engraver.cc index eb3167bd5b..1f4f75d870 100644 --- a/lily/tweak-engraver.cc +++ b/lily/tweak-engraver.cc @@ -1,10 +1,21 @@ /* - tweak-engraver.cc -- implement Tweak_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2011 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/type-swallow-translator.cc b/lily/type-swallow-translator.cc deleted file mode 100644 index 19d26eaa79..0000000000 --- a/lily/type-swallow-translator.cc +++ /dev/null @@ -1,92 +0,0 @@ -/* - type-swallow-translator.cc -- implement Type_swallow_translator - - source file of the GNU LilyPond music typesetter - - (c) 1997--2009 Han-Wen Nienhuys -*/ - -#include "translator.hh" -#include "music.hh" - -#include "translator.icc" - -class Skip_event_swallow_translator : public Translator -{ -protected: - virtual bool try_music (Music *) { return true; } - -public: - TRANSLATOR_DECLARATIONS (Skip_event_swallow_translator); -}; - -class Rest_swallow_translator : public Translator -{ -protected: - virtual bool try_music (Music *) { return true; } - -public: - TRANSLATOR_DECLARATIONS (Rest_swallow_translator); -}; - -Skip_event_swallow_translator::Skip_event_swallow_translator () -{ -} - -ADD_TRANSLATOR (Skip_event_swallow_translator, - /* doc */ - "Swallow @code{\\skip}.", - - /* create */ - "", - - /* read */ - "", - - /* write */ - "" - ); - -Rest_swallow_translator::Rest_swallow_translator (){} - -ADD_TRANSLATOR (Rest_swallow_translator, - /* doc */ - "Swallow rest.", - - /* create */ - "", - - /* read */ - "", - - /* write */ - "" - ); - -class Note_swallow_translator : public Translator -{ -protected: - virtual bool try_music (Music *) { return true; } - -public: - TRANSLATOR_DECLARATIONS (Note_swallow_translator); -}; - -Note_swallow_translator::Note_swallow_translator () -{ -} - -ADD_TRANSLATOR (Note_swallow_translator, - /* doc */ - "Swallow notes.", - - /* create */ - "", - - /* read */ - "", - - /* write */ - "" - ); - diff --git a/lily/unfolded-repeat-iterator.cc b/lily/unfolded-repeat-iterator.cc index b3247c0c81..7ee50cbfe6 100644 --- a/lily/unfolded-repeat-iterator.cc +++ b/lily/unfolded-repeat-iterator.cc @@ -1,9 +1,20 @@ /* - unfolded-repeat-iterator.cc -- implement Unfolded_repeat_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "music.hh" diff --git a/lily/vaticana-ligature-engraver.cc b/lily/vaticana-ligature-engraver.cc index 414020db7a..5402a8fb01 100644 --- a/lily/vaticana-ligature-engraver.cc +++ b/lily/vaticana-ligature-engraver.cc @@ -1,9 +1,20 @@ /* - vaticana-ligature-engraver.cc -- implement Vaticana_ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #include "gregorian-ligature-engraver.hh" @@ -91,7 +102,7 @@ Vaticana_ligature_engraver::listen_ligature (Stream_event *ev) Vaticana_ligature_engraver::Vaticana_ligature_engraver () { - brew_ligature_primitive_proc = + brew_ligature_primitive_proc = Vaticana_ligature::brew_ligature_primitive_proc; augmented_primitives_.clear (); } @@ -194,8 +205,8 @@ Vaticana_ligature_engraver::align_heads (vector primitives, { if (!primitives.size ()) { - programming_error ("Vaticana_ligature: " - "empty ligature [ignored]"); + programming_error ("Vaticana_ligature:" + " empty ligature [ignored]"); return 0.0; } @@ -319,8 +330,8 @@ Vaticana_ligature_engraver::align_heads (vector primitives, { if (!prev_primitive) { - primitive->programming_error ("vaticana ligature: add-join: " - "missing previous primitive"); + primitive->programming_error ("Vaticana ligature: add-join:" + " missing previous primitive"); } else { @@ -386,8 +397,9 @@ Vaticana_ligature_engraver::check_for_prefix_loss (Item *primitive) if (prefix_set & ~PES_OR_FLEXA) { string prefs = Gregorian_ligature::prefixes_to_str (primitive); - primitive->warning (_f ("ignored prefix (es) `%s' of this head according " - "to restrictions of the selected ligature style", + primitive->warning (_f ("ignored prefix(es) `%s' of this head" + " according to restrictions of the selected" + " ligature style", prefs.c_str ())); } } @@ -451,9 +463,9 @@ Vaticana_ligature_engraver::check_for_ambiguous_dot_pitch (Grob_info primitive) if (pitch == new_pitch) { primitive.grob ()-> - warning ("Ambiguous use of dots in ligature: there are " - "multiple dotted notes with the same pitch. " - "The ligature should be split."); + warning ("Ambiguous use of dots in ligature: there are" + " multiple dotted notes with the same pitch." + " The ligature should be split."); return; // supress multiple identical warnings } } @@ -509,10 +521,10 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, } else if (augmented_primitives_.size () > 0) { - primitive->warning ("This ligature has a dotted head followed by " - "a non-dotted head. The ligature should be " - "split after the last dotted head before " - "this head."); + primitive->warning ("This ligature has a dotted head followed by" + " a non-dotted head. The ligature should be" + " split after the last dotted head before" + " this head."); } if (is_stacked_head (prefix_set, context_info)) @@ -721,8 +733,8 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, voices/staves also may want to set this property. */ Item *first_primitive = dynamic_cast (primitives[0].grob ()); Paper_column *paper_column = first_primitive->get_column (); - paper_column->warning (_f ("Vaticana_ligature_engraver: " - "setting `spacing-increment = %f': ptr =%ul", + paper_column->warning (_f ("Vaticana_ligature_engraver:" + " setting `spacing-increment = %f': ptr =%ul", ligature_width, paper_column)); paper_column-> set_property ("forced-spacing", scm_from_double (ligature_width)); @@ -730,10 +742,11 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, } 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 together.", + "Handle ligatures by glueing special ligature heads" + " together.", /* create */ "VaticanaLigature " diff --git a/lily/vaticana-ligature.cc b/lily/vaticana-ligature.cc index 3a37fb5dce..7a00cff300 100644 --- a/lily/vaticana-ligature.cc +++ b/lily/vaticana-ligature.cc @@ -1,9 +1,20 @@ /* - vaticana-ligature.cc -- implement Vaticana_ligature + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2011 Juergen Reuter - (c) 2003--2009 Juergen Reuter + 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 . */ #include "vaticana-ligature.hh" @@ -126,7 +137,7 @@ vaticana_brew_flexa (Grob *me, if (solid) { Stencil solid_head - = Lookup::bezier_sandwich (top_curve, bottom_curve); + = Lookup::bezier_sandwich (top_curve, bottom_curve, 0.0); stencil.add_stencil (solid_head); } else // outline @@ -134,13 +145,13 @@ vaticana_brew_flexa (Grob *me, Bezier inner_top_curve = top_curve; inner_top_curve.translate (Offset (0.0, -line_thickness)); Stencil top_edge - = Lookup::bezier_sandwich (top_curve, inner_top_curve); + = Lookup::bezier_sandwich (top_curve, inner_top_curve, 0.0); stencil.add_stencil (top_edge); Bezier inner_bottom_curve = bottom_curve; inner_bottom_curve.translate (Offset (0.0, +line_thickness)); Stencil bottom_edge - = Lookup::bezier_sandwich (bottom_curve, inner_bottom_curve); + = Lookup::bezier_sandwich (bottom_curve, inner_bottom_curve, 0.0); stencil.add_stencil (bottom_edge); /* diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index 365c35cb48..570340f8d9 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -1,9 +1,20 @@ /* - vertical-align-engraver.cc -- implement Vertical_align_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + 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 . */ #include "context.hh" @@ -33,6 +44,8 @@ protected: void process_music (); virtual void finalize (); virtual void initialize (); + + bool top_level_; }; ADD_ACKNOWLEDGER (Vertical_align_engraver, axis_group); @@ -56,6 +69,7 @@ Vertical_align_engraver::Vertical_align_engraver () { valign_ = 0; id_to_group_hashtab_ = SCM_EOL; + top_level_ = false; } void @@ -75,7 +89,9 @@ Vertical_align_engraver::process_music () { if (!valign_) { - valign_ = make_spanner ("VerticalAlignment", SCM_EOL); + top_level_ = to_boolean (get_property ("topLevelAlignment")); + + valign_ = make_spanner (top_level_ ? "VerticalAlignment" : "StaffGrouper", SCM_EOL); valign_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); Align_interface::set_ordered (valign_); } @@ -105,7 +121,7 @@ Vertical_align_engraver::qualifies (Grob_info i) const void Vertical_align_engraver::acknowledge_axis_group (Grob_info i) { - if (qualifies (i)) + if (top_level_ && qualifies (i)) { string id = i.context ()->id_string (); @@ -135,14 +151,27 @@ Vertical_align_engraver::acknowledge_axis_group (Grob_info i) if (arr[i] == before_grob) { arr.insert (arr.begin () + i, added); + + /* Only set staff affinity if it already has one. That way we won't + set staff-affinity on things that don't want it (like staves). */ + if (scm_is_number (added->get_property ("staff-affinity"))) + added->set_property ("staff-affinity", scm_from_int (DOWN)); break; } else if (arr[i] == after_grob) { arr.insert (arr.begin () + i + 1, added); + if (scm_is_number (added->get_property ("staff-affinity"))) + added->set_property ("staff-affinity", scm_from_int (UP)); break; } } } } + else if (qualifies (i)) + { + Pointer_group_interface::add_grob (valign_, ly_symbol2scm ("elements"), i.grob ()); + if (!unsmob_grob (i.grob ()->get_object ("staff-grouper"))) + i.grob ()->set_object ("staff-grouper", valign_->self_scm ()); + } } diff --git a/lily/vertically-spaced-context-engraver.cc b/lily/vertically-spaced-context-engraver.cc deleted file mode 100644 index 750f2e3721..0000000000 --- a/lily/vertically-spaced-context-engraver.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* - vertically-spaced-contexts-engraver.cc -- implement Vertically_spaced_contexts_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2005--2009 Han-Wen Nienhuys -*/ - -#include "engraver.hh" -#include "grob.hh" -#include "axis-group-interface.hh" -#include "context.hh" -#include "pointer-group-interface.hh" - -class Vertically_spaced_contexts_engraver : public Engraver -{ - TRANSLATOR_DECLARATIONS (Vertically_spaced_contexts_engraver); -protected: - virtual void initialize (); - DECLARE_ACKNOWLEDGER (vertically_spaceable); - -private: - Grob *system_; -}; - -Vertically_spaced_contexts_engraver::Vertically_spaced_contexts_engraver () -{ - system_ = 0; -} - -void -Vertically_spaced_contexts_engraver::initialize () -{ - system_ = unsmob_grob (get_property ("rootSystem")); -} - -void -Vertically_spaced_contexts_engraver::acknowledge_vertically_spaceable (Grob_info gi) -{ - if (Axis_group_interface::has_interface (gi.grob ())) - { - SCM spaceable = get_property ("verticallySpacedContexts"); - Context *orig = gi.origin_contexts (this)[0]; - - if (scm_memq (ly_symbol2scm (orig->context_name ().c_str ()), - spaceable) != SCM_BOOL_F) - { - Pointer_group_interface::add_unordered_grob (system_, - ly_symbol2scm ("spaceable-staves"), - gi.grob ()); - } - } -} - -#include "translator.icc" - -ADD_ACKNOWLEDGER (Vertically_spaced_contexts_engraver, vertically_spaceable); -ADD_TRANSLATOR (Vertically_spaced_contexts_engraver, - /* doc */ - "", - - /* create */ - "", - - /* read */ - "verticallySpacedContexts ", - - /* write */ - "verticallySpacedContexts " - ); diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index d5f4bc6daa..6877a1a2eb 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -1,9 +1,20 @@ /* - volta-bracket.cc -- implement Volta_bracket_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Jan Nieuwenhuizen - (c) 1997--2009 Jan Nieuwenhuizen + 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 . */ #include @@ -46,14 +57,17 @@ Volta_bracket_interface::print (SCM smob) Item *bound = dynamic_cast (me)->get_bound (LEFT); /* - not a start, but really broken in two + If the volta bracket appears after a line-break, make + it start after the prefatory matter. */ Real left = 0.; if (bound->break_status_dir () == RIGHT) { Paper_column *pc = bound->get_column (); - left = pc->extent (pc, X_AXIS)[RIGHT] - - bound->relative_coordinate (pc, X_AXIS); + left = pc->break_align_width (pc, ly_symbol2scm ("break-alignment"))[RIGHT] + // For some reason, break_align_width is relative to + // the x-parent of the column. + - bound->relative_coordinate (pc->get_parent (X_AXIS), X_AXIS); } else { diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index bd8e9e2c39..eec8fa46ff 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -1,9 +1,20 @@ /* - volta-engraver.cc -- implement Volta_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2011 Han-Wen Nienhuys - (c) 2000--2009 Han-Wen Nienhuys + 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 . */ #include "engraver.hh" diff --git a/lily/volta-repeat-iterator.cc b/lily/volta-repeat-iterator.cc index 321814b8a8..b7ac2059f1 100644 --- a/lily/volta-repeat-iterator.cc +++ b/lily/volta-repeat-iterator.cc @@ -1,10 +1,20 @@ /* - volta-repeat-iterator.cc -- implement Volta_repeat_iterator + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2011 Han-Wen Nienhuys + 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. - (c) 2002--2009 Han-Wen Nienhuys + 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 . */ #include "music.hh" diff --git a/ly/GNUmakefile b/ly/GNUmakefile index fd82839f73..afdbac3478 100644 --- a/ly/GNUmakefile +++ b/ly/GNUmakefile @@ -3,7 +3,7 @@ depth = .. INI_FILES = $(LY_FILES) EXTRA_DIST_FILES = $(SCM_FILES) -INSTALLATION_DIR=$(local_lilypond_datadir)/ly/ +INSTALLATION_DIR=$(local_lilypond_datadir)/ly INSTALLATION_FILES=$(INI_FILES) STEPMAKE_TEMPLATES=install diff --git a/ly/Welcome-to-LilyPond-MacOS.ly b/ly/Welcome-to-LilyPond-MacOS.ly index 93711b1c71..3c166bd9d6 100644 --- a/ly/Welcome-to-LilyPond-MacOS.ly +++ b/ly/Welcome-to-LilyPond-MacOS.ly @@ -23,7 +23,7 @@ That's it. For more information, visit http://lilypond.org . %} -\version "2.12.0" % necessary for upgrading to future LilyPond versions. +\version "2.14.0" % necessary for upgrading to future LilyPond versions. \header{ title = "A scale in LilyPond" diff --git a/ly/Welcome_to_LilyPond.ly b/ly/Welcome_to_LilyPond.ly index 2b0cec303a..f90f3bce9f 100644 --- a/ly/Welcome_to_LilyPond.ly +++ b/ly/Welcome_to_LilyPond.ly @@ -17,7 +17,7 @@ Now to take it for the first test run. 4. To print or view the result, click on the newly produced file called - test.PDF + test.pdf 5. If you see a piece of music with a scale, LilyPond is working properly. @@ -32,7 +32,7 @@ Good luck with LilyPond! Happy engraving. %} -\version "2.12.0" % necessary for upgrading to future LilyPond versions. +\version "2.14.0" % necessary for upgrading to future LilyPond versions. \header{ title = "A scale in LilyPond" diff --git a/ly/arabic.ly b/ly/arabic.ly index 1a4273871a..3ff4029fd6 100644 --- a/ly/arabic.ly +++ b/ly/arabic.ly @@ -1,5 +1,5 @@ -\version "2.12.0" -\include "italiano.ly" +\version "2.14.0" +\language "italiano" %%%%%%% % @@ -33,52 +33,72 @@ dwn = { % bayati = #`( - (0 . 0) + (0 . ,NATURAL) (1 . ,SEMI-FLAT) (2 . ,FLAT) - (3 . 0) - (4 . 0) + (3 . ,NATURAL) + (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT) ) kurd = #`( - (0 . 0) + (0 . ,NATURAL) (1 . ,FLAT) (2 . ,FLAT) - (3 . 0) - (4 . 0) + (3 . ,NATURAL) + (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT) ) rast = #`( - (0 . 0) - (1 . 0) + (0 . ,NATURAL) + (1 . ,NATURAL) (2 . ,SEMI-FLAT) - (3 . 0) - (4 . 0) - (5 . 0) + (3 . ,NATURAL) + (4 . ,NATURAL) + (5 . ,NATURAL) (6 . ,SEMI-FLAT) ) sikah = #`( - (0 . 0) + (0 . ,NATURAL) (1 . ,SEMI-FLAT) (2 . ,SEMI-FLAT) (3 . ,SEMI-SHARP) - (4 . 0) + (4 . ,NATURAL) (5 . ,SEMI-FLAT) (6 . ,SEMI-FLAT) ) iraq = #`( - (0 . 0) + (0 . ,NATURAL) (1 . ,SEMI-FLAT) (2 . ,SEMI-FLAT) - (3 . 0) + (3 . ,NATURAL) (4 . ,SEMI-FLAT) (5 . ,SEMI-FLAT) (6 . ,SEMI-FLAT) ) +\layout { + \context { + \Score + keyAlterationOrder = + #`( + (6 . ,FLAT) (2 . ,FLAT) (5 . ,FLAT ) (1 . ,FLAT) + (4 . ,FLAT) (0 . ,FLAT) (3 . ,FLAT) + (6 . ,SEMI-FLAT) (2 . ,SEMI-FLAT) (5 . ,SEMI-FLAT ) (1 . ,SEMI-FLAT) + (4 . ,SEMI-FLAT) (0 . ,SEMI-FLAT) (3 . ,SEMI-FLAT) + (3 . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP) + (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP) + (3 . ,SEMI-SHARP) (0 . ,SEMI-SHARP) (4 . ,SEMI-SHARP) (1 . ,SEMI-SHARP) + (5 . ,SEMI-SHARP) (2 . ,SEMI-SHARP) (6 . ,SEMI-SHARP) + (6 . ,DOUBLE-FLAT) (2 . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1 . ,DOUBLE-FLAT) + (4 . ,DOUBLE-FLAT) (0 . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT) + (3 . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (1 . ,DOUBLE-SHARP) + (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP) + ) + } +} diff --git a/ly/articulate.ly b/ly/articulate.ly new file mode 100644 index 0000000000..b7174a72c7 --- /dev/null +++ b/ly/articulate.ly @@ -0,0 +1,636 @@ +% +% Copyright (C) 2008, 2009, 2010, 2011 NICTA +% Author: Peter Chubb +% $Id: articulate.ly,v 1.7 2011-03-24 00:40:00 peterc Exp $ +% +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License, version 3, +% as published by the Free Software Foundation. +% +% WARNING: this file under GPLv3 only, not GPLv3+ +% +% 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. It is +% available in the Lilypond source tree, or at +% http://www.gnu.org/licenses/gpl-3.0.html +% +% This script tries to make MIDI output from LilyPond a little more realistic. +% It tries to take articulations (slurs, staccato, etc) into account, by +% replacing notes with sequential music of suitably time-scaled note plus +% skip. +% +% It also tries to unfold trills turns etc., and take rallentendo +% and accelerando into account. +% +% As my scheme knowledge is poor (I was teaching myself as I went), there +% is much scope for improvement. + +% +%%%USAGE +% In the \score section do: +% \unfoldRepeats \articulate << +% all the rest of the score +% >> +% or use the lilywrap script. +% +% TO DO (prioritised, the ones that'll make the most difference first) +% +% * Dynamics. +% * Fix quantisation for dynamics on single note (replace note +% with tied 128th notes?) -- started, needs work. +% * Make \fp do the right thing (loud start, then quiet). +% +% * Inegalite. Notes on-beat steal time from notes off-beat. +% Degree of stealing is a parameter: from 1.0 (straight) +% to 1.5 (extreme swing). Also fix tenuto to use this. +% +% * add accel (to match rall), and molto rall. I've never seen +% molto accel but some composer somewhere has probably used it. +% +% * Fermata, and Fermata Lunga +% * Add more synonyms for accel and rall: rit ritard stringendo +% +% * Phrasing. +% * Rall at end of piece +% * Very slight accel into a phrase, rall out of it. +% * Dynamics during a phrase???? unclear how these should be in +% the general case +% +% * Trill algorithm needs work. +% +% * Cope with more ornaments/articulations. +% inverted-turns, etc. +% -- accent needs better control of dynamics. +% -- Articulations: mezzo-staccato, portato. +% -- Handling of generic ornaments (in lily, `\stopped'; in +% most early music: ornament this note (trill, turn +% or mordent as the player wishes)) +% * Automatic gruppetto at end of trill; better handling of +% initial/final grace notes on trill +% * Automatic ornaments. +% * Spot cadences and ornament +% * Look for quaver-dotted note for trills, for example. +% * Fill in steps. (Needs lookahead/lookbehind.) +% * `afterturn' -- a turn after the start of a note. +% * accidentals for trills and turns + +% CHANGELOG +% * From Iain Nicol: appoggiatura timings were out; add staccatissimo; fix +% trillSpanner endpoints. +% * Also handle Breathing events (by throwing them away). This isn't ideal; +% one should really shorten the note before a little. But I don't know +% how to do lookahead in scheme. +% * Also ignore explicit line breaks. +% * Add Mordents (reported by Patrick Karl) +% + +\version "2.14.0" + +#(use-modules (ice-9 debug)) +#(use-modules (scm display-lily)) + +% PARAMETERS +% How much to compress notes marked Staccato. CPE Bach says `as short as +% may conveniently be played, as if the keys were too hot to touch'. +% Most modern sources say 1/2 the notated length of a note. +#(define ac:staccatoFactor '(1 . 2)) + +% How much to compress notes marked staccatissimo. +#(define ac:staccatissimoFactor '(1 . 4)) + +% And tenuto (if we ever implement time stealing, this should be >1.0) +#(define ac:tenutoFactor '(1 . 1)) + +% How much to articulate normal notes. CPE Bach says 1/2 (and +% staccato should be `as short as may conveniently be played') but this +% sounds too short for modern music. 7/8 sounds about right. +#(define ac:normalFactor '(7 . 8)) + +% How much to slow down for a rall. or a poco rall. +% (or speed up for accel or poco accel) +#(define ac:rallFactor (ly:make-moment 60 100)) % 40% slowdown +#(define ac:pocoRallFactor (ly:make-moment 90 100)) % 10% slowdown + +% The absolute time for a twiddle in a trill, in minutes. +% Start with 1/4 seconds == 1/240 minutes +#(define ac:maxTwiddleTime (ly:make-moment 1 240)) + + +% Internal variables, don't touch. +% (should probably be part of a context somehow) + +% Whether to slur, or not +#(define ac:inSlur #f) +#(define ac:inPhrasingSlur #f) + +% Whether the current noteevent is in a trill spanner +#(define ac:inTrill #f) + +% assume start in C major. Key change events override this. +% Could get from context, but don't know how. +#(define ac:current-key (make-music + 'KeyChangeEvent + 'tonic + (ly:make-pitch -1 0 0) + 'pitch-alist + (list (cons 0 0) + (cons 1 0) + (cons 2 0) + (cons 3 0) + (cons 4 0) + (cons 5 0) + (cons 6 0)))) + + +#(define ac:currentTempo (ly:make-moment 15 1)) % 4 = 60, measured wholes per minute +#(define ac:lastTempo ac:currentTempo) % for 'a tempo' or 'tempo I' + +% The duration of the current note. Start at a crotchet +% for no good reason. +#(define ac:currentDuration (ly:make-duration 2 0 1 1)) + +% Debugging: display a moment plus some text. +% Returns its moment argument so can be used in-line. +#(define (display-moment text m) + (display text) + (display (list (ly:moment-main-numerator m) "/" (ly:moment-main-denominator m))) + m +) + +% Track tempo (and maybe later, other context properties) +% as they change. Needs to better cope with saving only Tempo I, +% otherwise "a tempo" goes back to the tempo before the last change. +#(define (ac:adjust-props sym music) + (case sym + ((tempoWholesPerMinute) + (set! ac:currentTempo (ly:music-property music 'value)) + (set! ac:lastTempo ac:currentTempo) + ))) + +% Raise note one step in the current diatonic scale. +#(define (ac:up note) + (let* ((pitch (ly:music-property note 'pitch)) + (notename (ly:pitch-notename pitch)) + (new-notename (if (eq? notename 6) 0 (+ 1 notename))) + (alterations (ly:music-property ac:current-key 'pitch-alist)) + (new-alteration (cdr (assq new-notename alterations))) + (new-octave (if (eq? new-notename 0) (+ 1 (ly:pitch-octave pitch)) + (ly:pitch-octave pitch))) + ) + (set! (ly:music-property note 'pitch)(ly:make-pitch new-octave new-notename new-alteration)))) + + +% Lower note one step in the current diatonic scale. +#(define (ac:down note) + (begin (let* ((pitch (ly:music-property note 'pitch)) + (notename (ly:pitch-notename pitch)) + (new-notename (if (eq? notename 0) 6 (- notename 1))) + (alterations (ly:music-property ac:current-key 'pitch-alist)) + (new-alteration (cdr (assq new-notename alterations))) + (new-octave (if (eq? new-notename 6) (- (ly:pitch-octave pitch) 1) + (ly:pitch-octave pitch))) + ) + (set! (ly:music-property note 'pitch)(ly:make-pitch new-octave new-notename new-alteration)))) +) + +% Shorten a note, and save the note's original duration in ac:currentDuration +#(define (ac:articulate-one-note m fraction) + "Replace m with m*fraction" + (if (eq? 'NoteEvent (ly:music-property m 'name)) + (let* + ((dur (ly:music-property m 'duration)) + (l (ly:duration-log dur)) + (d (ly:duration-dot-count dur)) + (factor (ly:duration-factor dur)) + (num (car fraction)) + (denom (cdr fraction))) + (begin + (set! ac:currentDuration dur) + (set! (ly:music-property m 'duration) + (ly:make-duration l d + (* num (car factor)) + (* denom (cdr factor)))))) + m)) + +% helper routine to set duration. +#(define (ac:setduration music duration) + "Set a note's duration." + (let ((eventtype (ly:music-property music 'name))) + (if + (or + (eq? eventtype 'NoteEvent) + (eq? eventtype 'RestEvent) + (eq? eventtype 'SkipEvent)) + (set! (ly:music-property music 'duration) duration)))) + +% Add an articulation event to a note. +% Used in afterGrace to mark all notes as tenuto, so they're not shortened +#(define (ac:add-articulation type music) + (music-map (lambda (m) + (if (eq? 'EventChord (ly:music-property m 'name)) + (set! (ly:music-property m 'elements) + (append (ly:music-property m 'elements) + (list (make-music 'ArticulationEvent 'articulation-type type))))) + m) + music)) + +% Convert a long note to an equivalent set of short notes, tied together. +% This is needed to get smooth dynamics changes. +% Need to deal properly with stuff other than the notes (dynamics, markup etc) +% Still experimental, so disabled for now. +#(define (ac:to128 music) music) + +#(define (ac:to128_disabled music) + (if (or (eq? 'SkipEvent (ly:music-property music 'name)) + (eq? 'NoteEvent (ly:music-property music 'name))) + (let* ((dur (ly:music-property music 'duration)) + (log2 (ly:duration-log dur)) + (shiftcount (- 6 log2)) + (lastm (ly:music-deep-copy (shift-duration-log music shiftcount 0)))) + (set! (ly:music-property music 'elements) + (cons (make-music 'TieEvent) (ly:music-property music 'elements))) + (make-sequential-music (list + (make-repeat "unfold" (1- (expt 2 shiftcount)) + (make-sequential-music (list music)) '()) + lastm))) + music)) + + +% absolute time in minutes of a length of music, as a rational number (moment) +#(define (ac:abstime music) + (ly:moment-div (ly:music-length music) ac:currentTempo)) + +% convert absolute time (in minutes) to a moment in the current tempo +#(define (ac:abs->mom m) + (ly:moment-mul m ac:currentTempo)) + + +% a moment that is ac:maxTwiddletime seconds at the current tempo. +#(define (ac:targetTwiddleTime) + (ac:abs->mom ac:maxTwiddleTime)) + + +% Nearest twiddletime (in minutes) achievable with power-of-2 divisions of +% the original music. (twiddletime is the time for one pair of notes +% in a trill) +% If the music has a precomputed twiddletime (e.g., from \afterGrace) use that. +#(define (ac:twiddletime music) + (let* ((tr (filter (lambda (x) + (and (eq? 'ArticulationEvent (ly:music-property x 'name)) + (string= "trill" (ly:music-property x 'articulation-type)))) + (ly:music-property music 'elements))) + (pre-t (if (pair? tr) (ly:music-property (car tr) 'twiddle) + '())) + (t (ac:targetTwiddleTime))) + (if (ly:moment? pre-t) + pre-t + (let loop ((len (ly:music-length music))) + (if (ly:momentexact + (round (/ (ly:moment-main-numerator c1) + (* 2 (ly:moment-main-denominator c1)))))) + (count (if (< c2 2) 2 c2))) + + (set! (ly:music-property music 'elements) + (filter (lambda (y) (eq? 'NoteEvent (ly:music-property y 'name))) + (ly:music-property music 'elements))) + (map (lambda (y) (ac:setduration y hemisemidur)) + (ly:music-property music 'elements)) + (set! uppernote (ly:music-deep-copy music)) + (map (lambda (y) (ac:up y)) + (filter + (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name))) + (ly:music-property uppernote 'elements))) + + (let* ((trillMusicElements + (let loop ((so_far (list uppernote music)) + (c count)) + (if (> c 1) + (loop (append (list (ly:music-deep-copy uppernote) (ly:music-deep-copy music)) so_far) (1- c)) + so_far))) + (trillMusic (make-sequential-music trillMusicElements)) + (newlen (ly:music-length trillMusic)) + (factor (ly:moment-div orig-len newlen))) + (ly:music-compress trillMusic factor) +; accelerating the music seems to put lily into an infinite loop in +; its layout and midi engines. +; (let* ((realfactor (exp (* (/ 1.0 count) (log 0.75)))) +; (factor (ly:make-moment (inexact->exact (round (* 1024 realfactor))) +; 1024))) +; (ac:accel trillMusic factor)) + ))) + + + + +% If there's an articulation, use it. +% If in a slur, use (1 . 1) instead. +% Treat phrasing slurs as slurs, but allow explicit articulation. +% (Maybe should treat staccato under a phrasing slur as mezzo-staccato?) +% +% Expect an EventChord. +% +% trills, turns, ornaments etc. are also treated as Articulations. +% Split into two functions: +% ac:getactions traverses the elements in the EventChord +% and calculates the parameters. +% ac:articulate-chord applies the actions to each NoteEvent in +% the EventChord. +#(define (ac:getactions music) + (let loop ((factor ac:normalFactor) + (newelements '()) + (es (ly:music-property music 'elements)) + (actions '())) + (if (null? es) + (begin + (set! (ly:music-property music 'elements) (reverse newelements)) + (cond + (ac:inTrill (cons 'trill actions)) + ((and (eq? factor ac:normalFactor) (or ac:inSlur ac:inPhrasingSlur)) + (append actions (list 'articulation '(1 . 1)) )) + (else (append actions (list 'articulation factor))))) + ; else part + (let ((e (car es)) + (tail (cdr es))) + (case (ly:music-property e 'name) + + ((BeamEvent) ; throw away beam events, or they'll be duplicated by turn or trill + (loop factor newelements tail actions)) + + ((LineBreakEvent FingeringEvent MarkEvent BreathingEvent TieEvent SkipEvent RestEvent) ; pass through some events. + (loop (cons 1 1) (cons e newelements) tail actions)) + + ((ArticulationEvent) + (let ((articname (ly:music-property e 'articulation-type))) + ; TODO: add more here + (cond + ((string= articname "staccato") + (loop ac:staccatoFactor newelements tail actions)) + ((string= articname "staccatissimo") + (loop ac:staccatissimoFactor newelements tail actions)) + ((string= articname "tenuto") + (loop ac:tenutoFactor newelements tail actions)) + ((string= articname "mordent") + (loop (cons 1 1) newelements tail (cons 'mordent actions))) + ((string= articname "prall") + (loop (cons 1 1) newelements tail (cons 'trill actions))) + ((string= articname "trill") + (loop (cons 1 1) newelements tail (cons 'trill actions))) + ((string= articname "turn") + (loop (cons 1 1) newelements tail (cons 'turn actions))) + (else (loop factor (cons e newelements) tail actions))))) + + ((TextScriptEvent) + (let ((t (ly:music-property e 'text))) + (if (not (string? t)) + (loop factor (cons e newelements) tail actions) + (begin + (cond + ((or + (string= t "rall") + (string= t "Rall") + (string= t "rit.") + (string= t "rall.")) + (loop factor (cons e newelements) tail (cons 'rall actions))) + ((or + (string= t "poco rall.") + (string= t "poco rit.")) + (loop factor (cons e newelements) tail (cons 'pocoRall actions))) + ((or (string= t "a tempo") + (string= t "tempo I")) + (loop factor (cons e newelements) tail (cons 'aTempo actions))) + (else (loop factor (cons e newelements) tail actions))))))) + + ((SlurEvent) + (let ((direction (ly:music-property e 'span-direction))) + (set! ac:inSlur (eq? direction -1)) + (loop factor newelements tail actions))) + + ((TrillSpanEvent) + (let ((direction (ly:music-property e 'span-direction))) + (set! ac:inTrill (eq? direction -1)) + (if ac:inTrill + (loop factor newelements tail (cons 'trill actions)) + (loop factor (cons e newelements) tail actions)))) + + ((PhrasingSlurEvent) + (let ((direction (ly:music-property e 'span-direction))) + (set! ac:inPhrasingSlur (eq? direction -1)) + (loop factor newelements tail actions))) + + (else (loop factor (cons e newelements) tail actions))))))) + + + +#(define (ac:articulate-chord music) + (begin + (cond + + ((eq? 'EventChord (ly:music-property music 'name)) + (let loop ((actions (ac:getactions music))) + (if (null? actions) + (if (ly:moment> (ly:music-length music) (make-moment 1 4)) + (ac:to128 music) + music) + + (case (car actions) + + ((articulation) + (map + (lambda (x) (ac:articulate-one-note x (cadr actions))) + (ly:music-property music 'elements)) + (let* + ((num (caadr actions)) + (denom (cdadr actions)) + (mult (ly:duration-factor ac:currentDuration)) + (newnum (* (- denom num) (car mult))) + (newdenom (* (cdr mult) denom)) + (len (ly:duration-log ac:currentDuration)) + (dots (ly:duration-dot-count ac:currentDuration))) + + (if (not (eq? num denom)) + (make-sequential-music + (list (ac:to128 music) + (make-music 'EventChord 'elements + (list + (make-music 'RestEvent 'duration (ly:make-duration len dots newnum newdenom)))))) + music))) + + ((rall) + (set! ac:currentTempo (ly:moment-mul ac:currentTempo ac:rallFactor)) + (let ((pset (make-music 'PropertySet + 'value + ac:currentTempo + 'symbol + 'tempoWholesPerMinute))) + (if (null? (cdr actions)) + (make-sequential-music (list pset music)) + (make-sequential-music + (list pset (loop (cdr actions))))))) + + ((pocoRall) + (set! ac:currentTempo (ly:moment-mul ac:currentTempo ac:pocoRallFactor)) + (let ((pset (make-music 'PropertySet + 'value + ac:currentTempo + 'symbol + 'tempoWholesPerMinute))) + (if (null? (cdr actions)) + (make-sequential-music (list pset music)) + (make-sequential-music + (list pset (loop (cdr actions))))))) + + ((aTempo) + (set! ac:currentTempo ac:lastTempo) + (let ((pset (make-music 'PropertySet + 'value + ac:currentTempo + 'symbol + 'tempoWholesPerMinute))) + (if (null? (cdr actions)) + (make-sequential-music (list pset music)) + (make-sequential-music + (list pset (loop (cdr actions))))))) + + ((trill) + (ac:trill music)) + + ((mordent) + (let* + ((dur (ly:music-property + (car (ly:music-property music 'elements)) 'duration)) + (factor (ly:duration-factor dur)) + (gracenote (ly:music-deep-copy music)) + (mainnote (ly:music-deep-copy music)) + (belownote (ly:music-deep-copy music)) + (mordent (make-sequential-music (list gracenote belownote))) +) + (begin + (music-map (lambda (n) + (if (eq? 'NoteEvent (ly:music-property n 'name)) + (set! (ly:music-property n 'duration)(ly:make-duration 3 0 1 1))) + n) + mordent) + (map (lambda (y) (ac:down y)) + (filter + (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name))) + (ly:music-property belownote 'elements))) + (make-sequential-music (list (make-grace-music mordent) mainnote))))) + ((turn) + (let* + ((dur (ly:music-property + (car (ly:music-property music 'elements)) 'duration)) + (factor (ly:duration-factor dur)) + (newdur (ly:make-duration (+ (ly:duration-log dur) 2) + (ly:duration-dot-count dur) (car factor)(cdr factor)))) + (begin + (map (lambda (y) (ac:setduration y newdur)) + (ly:music-property music 'elements)) + (let* ((above (ly:music-deep-copy music)) + (below (ly:music-deep-copy music)) + (newmusic (make-sequential-music (list above music below music)))) + (begin + (map (lambda (y) (ac:down y)) + (filter + (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name))) + (ly:music-property below 'elements))) + (map (lambda (y) (ac:up y)) + (filter + (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name))) + (ly:music-property above 'elements))) + newmusic))))) + )))) + + ((eq? 'KeyChangeEvent (ly:music-property music 'name)) + (set! ac:current-key music) + music + ) + + ((eq? 'PropertySet (ly:music-property music 'name)) + (ac:adjust-props (ly:music-property music 'symbol) music) + music) + + (else music)) + )) + + + +% At last ... here's the music function that aplies all the above to a +% score. +articulate = #(define-music-function (parser location music) + (ly:music?) + "Adjust times of note to add tenuto, staccato and + normal articulations. + " + (music-map ac:articulate-chord music) + ) + + +% Override \afterGrace to be in terms of audio, not spacing. +% Special handling for a gruppetto after a trill. +afterGrace = +#(define-music-function + (parser location main grace) + (ly:music? ly:music?)p + + (let* + ((main-length (ly:music-length main)) + (grace-orig-length (ly:music-length grace)) + (gracelen (ac:twiddletime main)) + (grace-factor (ly:moment-div gracelen grace-orig-length)) + (new-main-length (ly:moment-sub main-length gracelen)) + (factor (ly:moment-div new-main-length main-length)) + ) + (map (lambda (y) (set! (ly:music-property y 'twiddle) gracelen)) + (filter (lambda (z) + (and + (eq? 'ArticulationEvent (ly:music-property z 'name)) + (string= "trill" (ly:music-property z 'articulation-type)))) + (ly:music-property main 'elements))) + (ac:add-articulation "tenuto" grace) + (make-sequential-music (list (ly:music-compress main factor) (ly:music-compress grace grace-factor))))) + +% An appoggiatura takes half the duration of the main note, +% or 1/3 if the note is dotted (i.e., half the undotted equivalent time) +% Somewhere around the end of the 19th, start of 20th century the rules +% changed, but my main interest is early music. +appoggiatura = +#(define-music-function (parser location grace main) + (ly:music? ly:music?) + (let* ((maindur (ly:music-length main)) + (grace-orig-len (ly:music-length grace)) + (main-orig-len (ly:music-length main)) + (numerator (ly:moment-main-numerator maindur)) + (factor (if (eq? (remainder numerator 3) 0) + (ly:make-moment 1 3) (ly:make-moment 1 2)))) + (ly:music-compress grace + (ly:moment-mul factor (ly:moment-div main-orig-len grace-orig-len))) + (ly:music-compress main (ly:moment-sub (ly:make-moment 1 1) factor)) + + (set! (ly:music-property grace 'elements) + (append (ly:music-property grace 'elements) + (list (make-music 'SlurEvent 'span-direction -1)))) + (set! (ly:music-property main 'elements) + (append (ly:music-property main 'elements) + (list (make-music 'SlurEvent 'span-direction 1)))) + (make-sequential-music (list grace main)))) + diff --git a/ly/bagpipe.ly b/ly/bagpipe.ly index 07c39a9bcd..98eafd7e36 100644 --- a/ly/bagpipe.ly +++ b/ly/bagpipe.ly @@ -1,15 +1,15 @@ %{ - Bagpipe music settings for Lilypond. + Bagpipe music settings for LilyPond. This file builds on work by Andrew McNabb (http://www.mcnabbs.org/andrew/) - - Substantial changes and additions made by + + Substantial changes and additions made by Sven Axelsson, the Murray Pipes & Drums of Gothenburg (http://www.murrays.nu) - + $Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $ %} -\version "2.12.0" +\version "2.14.0" % Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde. % Flat notes used mainly in some modern music. @@ -67,23 +67,14 @@ showKeySignature = { % Some common timing tweaks. % Sets the autobeamer to span quarter notes only. Use for fast music. -% TODO: Needs more tweaking quarterBeaming = { - #(override-auto-beam-setting '(end * * * *) 1 4 'Staff) - #(override-auto-beam-setting '(end * * * *) 1 2 'Staff) - #(override-auto-beam-setting '(end * * * *) 3 4 'Staff) - #(override-auto-beam-setting '(end * * * *) 4 4 'Staff) - #(revert-auto-beam-setting '(end 1 32 2 4 ) 1 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 2 4 ) 3 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 1 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 3 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 5 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 7 8 'Staff) + \set Staff.beamExceptions = #'() } halfBeaming = { - #(override-auto-beam-setting '(end * * 2 2) 1 2 'Staff) - #(override-auto-beam-setting '(end * * 2 2) 2 2 'Staff) + \set Staff.beamExceptions = #'((end . (((1 . 8) . (4 4)) + ((1 . 12) . (3 3))))) } + % Reels are in allabreve time with half note beaming. reelTime = { \time 2/2 @@ -92,199 +83,252 @@ reelTime = { % 4/4 marches are written with numerical time signature and with quarter beaming. marchTime = { \time 4/4 - \override Staff.TimeSignature #'style = #'() + \numericTimeSignature \quarterBeaming } +% Add appropriate tweaks needed for piping grace notes to look great. +stemspace = #(define-music-function (parser location extent) (pair?) #{ + \once \override Staff.Stem #'X-extent = #$extent +#}) +pgrace = #(define-music-function (parser location notes) (ly:music?) #{ + \override Score.GraceSpacing #'spacing-increment = #0 + \override Score.Stem #'beamlet-max-length-proportion = #'(0.5 . 0.5) + \grace $notes + \revert Score.Stem #'beamlet-default-length +#}) + % Single grace notes -grG = { \grace { \small G32 } } -gra = { \grace { \small a32 } } -grb = { \grace { \small b32 } } -grc = { \grace { \small c32 } } -grd = { \grace { \small d32 } } -gre = { \grace { \small e32 } } -grf = { \grace { \small f32 } } -grg = { \grace { \small g32 } } -grA = { \grace { \small A32 } } +grG = { \pgrace { \small G32 } } +gra = { \pgrace { \small a32 } } +grb = { \pgrace { \small b32 } } +grc = { \pgrace { \small c32 } } +grd = { \pgrace { \small d32 } } +gre = { \pgrace { \small e32 } } +grf = { \pgrace { \small f32 } } +grg = { \pgrace { \small g32 } } +grA = { \pgrace { \small A32 } } % Doublings -dblG = { \grace { \small g32[ G d] } } -dbla = { \grace { \small g32[ a d] } } -dblb = { \grace { \small g32[ b d] } } -dblc = { \grace { \small g32[ c d] } } -dbld = { \grace { \small g32[ d e] } } -dble = { \grace { \small g32[ e f] } } -dblf = { \grace { \small g32[ f g] } } +dblG = { \pgrace { \small g32[ G d] } } +dbla = { \pgrace { \small g32[ a d] } } +dblb = { \pgrace { \small g32[ b d] } } +dblc = { \pgrace { \small g32[ c d] } } +dbld = { \pgrace { \small g32[ d e] } } +dble = { \pgrace { \small g32[ e f] } } +dblf = { \pgrace { \small g32[ f g] } } % These are the same as the half doublings. -dblg = { \grace { \small g32[ f] } } -dblA = { \grace { \small A32[ g] } } +dblg = { \pgrace { \small g32[ f] } } +dblA = { \pgrace { \small A32[ g] } } % Half doublings -hdblG = { \grace { \small G32[ d] } } -hdbla = { \grace { \small a32[ d] } } -hdblb = { \grace { \small b32[ d] } } -hdblc = { \grace { \small c32[ d] } } -hdbld = { \grace { \small d32[ e] } } -hdble = { \grace { \small e32[ f] } } -hdblf = { \grace { \small f32[ g] } } -hdblg = { \grace { \small g32[ f] } } -hdblA = { \grace { \small A32[ g] } } +hdblG = { \pgrace { \small G32[ d] } } +hdbla = { \pgrace { \small a32[ d] } } +hdblb = { \pgrace { \small b32[ d] } } +hdblc = { \pgrace { \small c32[ d] } } +hdbld = { \pgrace { \small d32[ e] } } +hdble = { \pgrace { \small e32[ f] } } +hdblf = { \pgrace { \small f32[ g] } } +hdblg = { \pgrace { \small g32[ f] } } +hdblA = { \pgrace { \small A32[ g] } } % Thumb doublings -tdblG = { \grace { \small A32[ G d] } } -tdbla = { \grace { \small A32[ a d] } } -tdblb = { \grace { \small A32[ b d] } } -tdblc = { \grace { \small A32[ c d] } } -tdbld = { \grace { \small A32[ d e] } } -tdble = { \grace { \small A32[ e f] } } -tdblf = { \grace { \small A32[ f g] } } -tdblg = { \grace { \small A32[ g f] } } +tdblG = { \pgrace { \small A32[ G d] } } +tdbla = { \pgrace { \small A32[ a d] } } +tdblb = { \pgrace { \small A32[ b d] } } +tdblc = { \pgrace { \small A32[ c d] } } +tdbld = { \pgrace { \small A32[ d e] } } +tdble = { \pgrace { \small A32[ e f] } } +tdblf = { \pgrace { \small A32[ f g] } } +tdblg = { \pgrace { \small A32[ g f] } } % Shakes % A few of these can't really be played and are here only for consistency. -shakea = { \grace { \small g32[ a d a G] } } -shakeb = { \grace { \small g32[ b d b G] } } -shakec = { \grace { \small g32[ c d c G] } } -shaked = { \grace { \small g32[ d e d G] } } -shakee = { \grace { \small g32[ e f e a] } } -shakef = { \grace { \small g32[ f g f a] } } -shakeg = { \grace { \small A32[ f g a] } } -shakeA = { \grace { \small A32[ g A a] } } +shakea = { \pgrace { \small g32[ a e a G] } } +shakeb = { \pgrace { \small g32[ b e b G] } } +shakec = { \pgrace { \small g32[ c e c G] } } +shaked = { \pgrace { \small g32[ d e d G] } } +shakee = { \pgrace { \small g32[ e f e a] } } +shakef = { \pgrace { \small g32[ f g f a] } } +shakeg = { \pgrace { \small A32[ f g a] } } +shakeA = { \pgrace { \small A32[ g A a] } } % Half shakes -hshakea = { \grace { \small a32[ d a G] } } -hshakeb = { \grace { \small b32[ d b G] } } -hshakec = { \grace { \small c32[ d c G] } } -hshaked = { \grace { \small d32[ e d G] } } -hshakee = { \grace { \small e32[ f e a] } } -hshakef = { \grace { \small f32[ g f a] } } -hshakeg = { \grace { \small g32[ f g a] } } -hshakeA = { \grace { \small A32[ g A a] } } +hshakea = { \pgrace { \small a32[ d a G] } } +hshakeb = { \pgrace { \small b32[ d b G] } } +hshakec = { \pgrace { \small c32[ d c G] } } +hshaked = { \pgrace { \small d32[ e d G] } } +hshakee = { \pgrace { \small e32[ f e a] } } +hshakef = { \pgrace { \small f32[ g f a] } } +hshakeg = { \pgrace { \small g32[ f g a] } } +hshakeA = { \pgrace { \small A32[ g A a] } } % Thumb shakes -tshakea = { \grace { \small A32[ a d a G] } } -tshakeb = { \grace { \small A32[ b d b G] } } -tshakec = { \grace { \small A32[ c d c G] } } -tshaked = { \grace { \small A32[ d e d G] } } -tshakee = { \grace { \small A32[ e f e a] } } -tshakef = { \grace { \small A32[ f g f a] } } -tshakeg = { \grace { \small A32[ f g a] } } -tshakeA = { \grace { \small A32[ g A a] } } +tshakea = { \pgrace { \small A32[ a d a G] } } +tshakeb = { \pgrace { \small A32[ b d b G] } } +tshakec = { \pgrace { \small A32[ c d c G] } } +tshaked = { \pgrace { \small A32[ d e d G] } } +tshakee = { \pgrace { \small A32[ e f e a] } } +tshakef = { \pgrace { \small A32[ f g f a] } } +tshakeg = { \pgrace { \small A32[ f g a] } } +tshakeA = { \pgrace { \small A32[ g A a] } } % Slurs % A few of these can't really be played and are here only for consistency. -slura = { \grace { \small g32[ a G] } } -slurb = { \grace { \small g32[ b G] } } -slurc = { \grace { \small g32[ c G] } } -slurd = { \grace { \small g32[ d G] } } -slure = { \grace { \small g32[ e a] } } -slurf = { \grace { \small g32[ f a] } } -slurg = { \grace { \small A32[ f a] } } -slurA = { \grace { \small f32[ a] } } +slura = { \pgrace { \small g32[ a G] } } +slurb = { \pgrace { \small g32[ b G] } } +slurc = { \pgrace { \small g32[ c G] } } +slurd = { \pgrace { \small g32[ d G] } } +wslurd = { \pgrace { \small g32[ d c] } } +slure = { \pgrace { \small g32[ e a] } } +slurf = { \pgrace { \small g32[ f a] } } +slurg = { \pgrace { \small A32[ f a] } } +slurA = { \pgrace { \small f32[ a] } } % Half slurs -hslura = { \grace { \small a32[ G] } } -hslurb = { \grace { \small b32[ G] } } -hslurc = { \grace { \small c32[ G] } } -hslurd = { \grace { \small d32[ G] } } -hslure = { \grace { \small e32[ a] } } -hslurf = { \grace { \small f32[ a] } } -hslurg = { \grace { \small g32[ a] } } -hslurA = { \grace { \small A32[ a] } } +hslura = { \pgrace { \small a32[ G] } } +hslurb = { \pgrace { \small b32[ G] } } +hslurc = { \pgrace { \small c32[ G] } } +hslurd = { \pgrace { \small d32[ G] } } +whslurd = { \pgrace { \small d32[ c] } } +hslure = { \pgrace { \small e32[ a] } } +hslurf = { \pgrace { \small f32[ a] } } +hslurg = { \pgrace { \small g32[ a] } } +hslurA = { \pgrace { \small A32[ a] } } % Thumb slurs -tslura = { \grace { \small A32[ a G] } } -tslurb = { \grace { \small A32[ b G] } } -tslurc = { \grace { \small A32[ c G] } } -tslurd = { \grace { \small A32[ d a] } } -tslure = { \grace { \small A32[ e a] } } -tslurf = { \grace { \small A32[ f a] } } -tslurg = { \grace { \small A32[ f a] } } -tslurA = { \grace { \small f32[ a] } } +tslura = { \pgrace { \small A32[ a G] } } +tslurb = { \pgrace { \small A32[ b G] } } +tslurc = { \pgrace { \small A32[ c G] } } +tslurd = { \pgrace { \small A32[ d G] } } +wtslurd = { \pgrace { \small A32[ d c] } } +tslure = { \pgrace { \small A32[ e a] } } +tslurf = { \pgrace { \small A32[ f a] } } +tslurg = { \pgrace { \small A32[ f a] } } +tslurA = { \pgrace { \small f32[ a] } } % Catches -catcha = { \grace { \small a32[ G d G] } } -catchb = { \grace { \small b32[ G d G] } } -catchc = { \grace { \small c32[ G d G] } } -catchd = { \grace { \small d32[ G b G] } } -catche = { \grace { \small e32[ G d G] } } +catcha = { \pgrace { \small a32[ G d G] } } +catchb = { \pgrace { \small b32[ G d G] } } +catchc = { \pgrace { \small c32[ G d G] } } +catchd = { \pgrace { \small d32[ G b G] } } +catche = { \pgrace { \small e32[ G d G] } } % G-grace catches -gcatcha = { \grace { \small g32[ a G d G] } } -gcatchb = { \grace { \small g32[ b G d G] } } -gcatchc = { \grace { \small g32[ c G d G] } } -gcatchd = { \grace { \small g32[ d G b G] } } -gcatche = { \grace { \small g32[ e G d G] } } +gcatcha = { \pgrace { \small g32[ a G d G] } } +gcatchb = { \pgrace { \small g32[ b G d G] } } +gcatchc = { \pgrace { \small g32[ c G d G] } } +gcatchd = { \pgrace { \small g32[ d G b G] } } +gcatche = { \pgrace { \small g32[ e G d G] } } % Thumb catches -tcatcha = { \grace { \small A32[ a G d G] } } -tcatchb = { \grace { \small A32[ b G d G] } } -tcatchc = { \grace { \small A32[ c G d G] } } -tcatchd = { \grace { \small A32[ d G b G] } } -tcatche = { \grace { \small A32[ e G d G] } } +tcatcha = { \pgrace { \small A32[ a G d G] } } +tcatchb = { \pgrace { \small A32[ b G d G] } } +tcatchc = { \pgrace { \small A32[ c G d G] } } +tcatchd = { \pgrace { \small A32[ d G b G] } } +tcatche = { \pgrace { \small A32[ e G d G] } } + +% Triple strikes (BMW has them all, but I've never seen any but the A one used, so ...) +tripleA = { \pgrace { \small A32[ g A g A g] } } % Throws -thrwd = { \grace { \small G32[ d c] } } -Gthrwd = { \grace { \small d32[ c] } } -gripthrwd = { \grace { \small G32[ d G c] } } -thrwf = { \grace { \small f32[ e g e] } } +thrwd = { \pgrace { \small G32[ d c] } } +Gthrwd = { \pgrace { \small d32[ c] } } +gripthrwd = { \pgrace { \small G32[ d G c] } } +thrwe = { \pgrace { \small e32[ a f a] } } +wthrwe = { \pgrace { \small e32[ d f d] } } +thrwf = { \pgrace { \small f32[ e g e] } } % Birls -birl = { \grace { \small a32[ G a G] } } -wbirl = { \grace { \small G32[ a G] } } -gbirl = { \grace { \small g32[ a G a G] } } -dbirl = { \grace { \small d32[ a G a G] } } +birl = { \pgrace { \small a32[ G a G] } } +wbirl = { \pgrace { \small G32[ a G] } } +gbirl = { \pgrace { \small g32[ a G a G] } } +dbirl = { \pgrace { \small d32[ a G a G] } } % Grips -grip = { \grace { \small G32[ d G] } } -dgrip = { \grace { \small G32[ b G] } } -egrip = { \grace { \small G32[ e G] } } +grip = { \pgrace { \small G32[ d G] } } +dgrip = { \pgrace { \small G32[ b G] } } +egrip = { \pgrace { \small G32[ e G] } } % Taorluaths -taor = { \grace { \small G32[ d G e] } } -dtaor = { \grace { \small G32[ b G e] } } -Gtaor = { \grace { \small d32[ G e] } } -taoramb = { \grace { \small G32[ d G b e] } } -taoramc = { \grace { \small G32[ d G c e] } } -taoramd = { \grace { \small G32[ d G c d e] } } +taor = { \pgrace { \small G32[ d G e] } } +taorjmd = { \pgrace { \small G32[ d a e] } } +taorold = { \pgrace { \small G32[ d G a e] } } +dtaor = { \pgrace { \small G32[ b G e] } } +Gtaor = { \pgrace { \small d32[ G e] } } +taoramb = { \pgrace { \small G32[ d G b e] } } +taoramc = { \pgrace { \small G32[ d G c e] } } +taoramd = { \pgrace { \small G32[ d G c d e] } } % Crunluaths -crun = { \grace { \small G32[ d G e a f a ] } } -dcrun = { \grace { \small G32[ b G e a f a ] } } -Gcrun = { \grace { \small d32[ G e G f a ] } } -crunamb = { \grace { \small G32[ d G b e b f b ] } } -crunamc = { \grace { \small G32[ d G c e c f c ] } } -crunamd = { \grace { \small G32[ d G c d e d f d ] } } +crun = { \pgrace { \small G32[ d G e a f a ] } } +dcrun = { \pgrace { \small G32[ b G e a f a ] } } +Gcrun = { \pgrace { \small d32[ G e G f a ] } } +crunamb = { \pgrace { \small G32[ d G b e b f b ] } } +crunamc = { \pgrace { \small G32[ d G c e c f c ] } } +crunamd = { \pgrace { \small G32[ d G c d e d f d ] } } +crunambfosg = { \pgrace { \small e32[ b f b ] } } +crunamcfosg = { \pgrace { \small e32[ c f c ] } } +crunamdfosg = { \pgrace { \small e32[ d f d ] } } % Special piobaireachd notations -grGcad = { \grace { \small G16 } } -gracad = { \grace { \small a16 } } -cad = { \grace { \small g32[ e8 d32] } } -hcad = { \grace { \small g32[ e8] } } -dre = { \grace { \small e32[ a f a] } } +grGcad = { \pgrace { \small G16 } } +gracad = { \pgrace { \small a16 } } +cad = { \pgrace { \small \stemspace #'(0 . 0.5) g32[ e8 d32] } } +hcad = { \pgrace { \small \stemspace #'(0 . 0.5) g32[ e8] } } +tcad = { \pgrace { \small e8[ d32] } } +thcad = { \pgrace { \small e8 } } +% This is the same as thrwe +dre = { \pgrace { \small e32[ a f a] } } % This is the same as thrwf -dare = { \grace { \small f32[ e g e] } } -bari = { \grace { \small e32[ G f G] } } -dari = { \grace { \small f32[ e g e f e] } } -pthrwd = { \grace { \small G16[ d32 c] } } -darodo = { \grace { \small G32[ d G c G] } } -Gdarodo = { \grace { \small d32[ G c G] } } +dare = { \pgrace { \small f32[ e g e] } } +bari = { \pgrace { \small e32[ G f G] } } +dari = { \pgrace { \small f32[ e g e f e] } } +pthrwd = { \pgrace { \small G16[ d32 c] } } +darodo = { \pgrace { \small G32[ d G c G] } } +Gdarodo = { \pgrace { \small d32[ G c G] } } +pdarodo = { \pgrace { \small G16[ d32 G c G16] } } +pGdarodo = { \pgrace { \small d32[ G c G16] } } +% Weird stuff from Joseph MacDonald’s book +fifteenthcutting = { \pgrace { \small G32[ d a e a f a e a d] } } +fifteenthcuttingG = { \pgrace { \small G32[ d a e G f G e G d] } } +Gfifteenthcutting = { \pgrace { \small d32[ a e a f a e a d] } } +GfifteenthcuttingG = { \pgrace { \small d32[ a e G f G e G d] } } +seventeenthcutting = { \pgrace { \small G32[ d a e a f a e a d a c] } } +seventeenthcuttingG = { \pgrace { \small G32[ d a e G f G e G d G c] } } +Gseventeenthcutting = { \pgrace { \small d32[ a e a f a e a d a c] } } +GseventeenthcuttingG = { \pgrace { \small d32[ a e G f G e G d G c] } } +barluadh = { \pgrace { \small G32[ d a e a f a e a d a c a b a e a f a] } } +barluadhG = { \pgrace { \small G32[ d a e G f G e G d G c G b G e G f G] } } +Gbarluadh = { \pgrace { \small d32[ a e a f a e a d a c a b a e a f a] } } +GbarluadhG = { \pgrace { \small d32[ a e G f G e G d G c G b G e G f G] } } % Non-gracenote piobaireachd markup. -trebling = \markup { - \override #'(baseline-skip . 0.3) - \column { - \musicglyph #"scripts.tenuto" - \musicglyph #"scripts.tenuto" - \musicglyph #"scripts.tenuto" +trebling = \markup { + \override #'(baseline-skip . 0.4) + \column { + \musicglyph #"scripts.tenuto" + \musicglyph #"scripts.tenuto" + \musicglyph #"scripts.tenuto" } } % Abbreviated notation common in piobaireachd scores. % TODO: Make sure these are put on a fixed Y-position. -txtaor = \markup { "T" } -txcrun = \markup { "C" } -txtaorcrun = \markup { \column { "T" "C" } } -% TODO: These characters should be shown upside down. -% Use a postscript markup command for this. -txtaoram = \markup { "T" } -txcrunam = \markup { "C" } -txtaorcrunam = \markup { \column { "T" "C" } } +txtaor = \markup { \center-align "T" } +txcrun = \markup { \center-align "C" } +txtaorcrun = \markup { + \override #'(baseline-skip . 1.8) + \column { + \center-align "T" + \center-align "C" + } +} +% Turn these upside down, as in the Kilberry book. +txtaoram = \markup { \center-align \scale #'(-1 . -1) "T" } +txcrunam = \markup { \center-align \scale #'(-1 . -1) "C" } +txtaorcrunam = \markup { + \override #'(baseline-skip . 1.8) + \column { + \center-align \scale #'(-1 . -1) "T" + \center-align \scale #'(-1 . -1) "C" + } +} diff --git a/ly/catalan.ly b/ly/catalan.ly index aab7edf923..576436e927 100644 --- a/ly/catalan.ly +++ b/ly/catalan.ly @@ -1,79 +1,23 @@ -%{ - - Common catalan names for notes. "b" means flat (bemoll), "d" means sharp - (diesi). Also "s" is included for sharp (sostingut). Both "diesi" and - "sostingut" are approved by "Diccionari de la Llengua Catalana" from - "Institut d'Estudis Catalans". - - Adapted from italiano.ly. - - English: a b c d e f g - Catalan: la si do re mi fa sol - - For spanish naming just use the sharp sign "s" (sostenido) instead of "s" -(sostenido) . -%} - -% contributed by Jaume Obrador <> - - -% For using "sostingut" notation, which is also correct -pitchnamesCatalan = #`( - (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (dob . ,(ly:make-pitch -1 0 FLAT)) - (do . ,(ly:make-pitch -1 0 NATURAL)) - (dod . ,(ly:make-pitch -1 0 SHARP)) - (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (reb . ,(ly:make-pitch -1 1 FLAT)) - (re . ,(ly:make-pitch -1 1 NATURAL)) - (red . ,(ly:make-pitch -1 1 SHARP)) - (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (mib . ,(ly:make-pitch -1 2 FLAT)) - (mi . ,(ly:make-pitch -1 2 NATURAL)) - (mid . ,(ly:make-pitch -1 2 SHARP)) - (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fab . ,(ly:make-pitch -1 3 FLAT)) - (fa . ,(ly:make-pitch -1 3 NATURAL)) - (fad . ,(ly:make-pitch -1 3 SHARP)) - (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (solb . ,(ly:make-pitch -1 4 FLAT)) - (sol . ,(ly:make-pitch -1 4 NATURAL)) - (sold . ,(ly:make-pitch -1 4 SHARP)) - (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (lab . ,(ly:make-pitch -1 5 FLAT)) - (la . ,(ly:make-pitch -1 5 NATURAL)) - (lad . ,(ly:make-pitch -1 5 SHARP)) - (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (sib . ,(ly:make-pitch -1 6 FLAT)) - (si . ,(ly:make-pitch -1 6 NATURAL)) - (sid . ,(ly:make-pitch -1 6 SHARP)) - (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) - - ;; Now that we have espanol.ly, should these be junked? --jcn - (dos . ,(ly:make-pitch -1 0 SHARP)) - (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (res . ,(ly:make-pitch -1 1 SHARP)) - (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (mis . ,(ly:make-pitch -1 2 SHARP)) - (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (fas . ,(ly:make-pitch -1 3 SHARP)) - (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (sols . ,(ly:make-pitch -1 4 SHARP)) - (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (las . ,(ly:make-pitch -1 5 SHARP)) - (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (sis . ,(ly:make-pitch -1 6 SHARP)) - (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) - -pitchnames = \pitchnamesCatalan - -\version "2.12.0" - -#(ly:parser-set-note-names parser pitchnames) +%%%% common Catalan names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "catalan" diff --git a/ly/chord-modifiers-init.ly b/ly/chord-modifiers-init.ly index 98b11b6752..75b804bb05 100644 --- a/ly/chord-modifiers-init.ly +++ b/ly/chord-modifiers-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" chordmodifiers = #default-chord-modifier-list @@ -43,6 +43,11 @@ partialJazzMusic = { -\markup { "m" }-\markup { \normal-size-super "sus2" } } +powerChordSymbol = { + -\markup { \normal-size-super "5" } + 1-\markup { \normal-size-super "5" } +} + %% TODO: compatibility ignatzek code fullJazzExceptions= @@ -51,5 +56,8 @@ fullJazzExceptions= partialJazzExceptions= #(sequential-music-to-chord-exceptions partialJazzMusic #f) +powerChordExceptions = + #(sequential-music-to-chord-exceptions powerChordSymbol #t) + ignatzekExceptions = #(sequential-music-to-chord-exceptions ignatzekExceptionMusic #t) diff --git a/ly/chord-repetition-init.ly b/ly/chord-repetition-init.ly new file mode 100644 index 0000000000..209e2676e0 --- /dev/null +++ b/ly/chord-repetition-init.ly @@ -0,0 +1,79 @@ +%%% -*- Mode: Scheme -*- +\version "2.14.0" +%{ + +The following functions define the chord repetition behavior, and may +be invoked by the user to customize it. + +ly:parser-set-repetition-symbol + set the chord repetition shortcut. + `q' is the default value set in this file. + +ly:parser-set-repetition-function + + set the function that is invoked when a chord repetition symbol + is encountered by the parser: a four argument function + (previous-chord, location, duration, list of articulations) which is + supposed to return a new chord. + `default-repeat-chord' is the default function set in this file. + `tab-repeat-chord' may be used in tablatures to preserve the string information. +%} + +#(define-public ((make-repeat-chord-function chord-element-types note-articulation-types) + previous-chord location duration articulations) + "Make a chord repetition function. +The returned functions copies the notes from @var{previous-chord} into a new chord. +Chord elements, which type is found in @var{chord-element-types}, are copied into +the new chord. Note articulations, which type is found in @var{note-articulation-types}, +are also copied. All other events are not copied into the new chord." + (define (filter-events events event-types) + (filter (lambda (event) + (and (memq (ly:music-property event 'name) event-types) event)) + events)) + ;; If previous-chord has an length property, then it means that it + ;; has been processed by a music iterator. In other words, the chord + ;; has been memorized from an other music block, which is certainly not + ;; what the user has intended, as anywy the result will be buggy. + ;; In that case, raise a warning. + (if (not (and (ly:music? previous-chord) + (null? (ly:music-property previous-chord 'length)))) + (ly:input-message location + (_ "No memorized chord in music block before chord repetition"))) + ;; Instead of copying the previous chord, then removing the + ;; undesired elements (like articulations), a new empty chord is built. + ;; Then, the pitch found in the previous chord are added to the new + ;; chord, without any "decoration" (e.g. cautionary accidentals, + ;; fingerings, text scripts, articulations). Only the events of types + ;; given in `chord-elements-types' and `note-articulation-types' are + ;; copied from the original chord elements and note articulations, + ;; respectively. + (let ((elements (ly:music-property (ly:music-deep-copy previous-chord) 'elements))) + (make-music + 'EventChord + 'origin location + 'elements (append! + (map (lambda (note) + (let ((new-note (make-music 'NoteEvent + 'origin location + 'pitch (ly:music-property note 'pitch) + 'duration duration)) + (articulations + (filter-events (ly:music-property note 'articulations) + note-articulation-types))) + (if (not (null? articulations)) + (set! (ly:music-property new-note 'articulations) + articulations)) + new-note)) + (filter-events elements '(NoteEvent))) + (filter-events elements chord-element-types) + articulations)))) + +#(define-public default-repeat-chord + (make-repeat-chord-function '() '())) + +#(define-public tab-repeat-chord + (make-repeat-chord-function '(StringNumberEvent) '(StringNumberEvent))) + +% default settings +#(ly:parser-set-repetition-symbol parser 'q) +#(ly:parser-set-repetition-function parser default-repeat-chord) diff --git a/ly/declarations-init.ly b/ly/declarations-init.ly index f822e0f3de..268ecaee7e 100644 --- a/ly/declarations-init.ly +++ b/ly/declarations-init.ly @@ -1,4 +1,22 @@ -\version "2.12.0" +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 1996--2011 Han-Wen Nienhuys +%%%% Jan Nieuwenhuizen +%%%% +%%%% 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 . + +\version "2.14.0" %% < 1.8 compatibility switch #(ly:set-option 'old-relative) @@ -8,17 +26,22 @@ breve = #(ly:make-duration -1 0) longa = #(ly:make-duration -2 0) maxima = #(ly:make-duration -3 0) -\include "markup-init.ly" \include "music-functions-init.ly" \include "toc-init.ly" %% default note names are dutch -\include "nederlands.ly" +#(set! default-language "nederlands") +#(note-names-language parser default-language) -\include "drumpitch-init.ly" +\include "drumpitch-init.ly" \include "chord-modifiers-init.ly" \include "script-init.ly" +\include "chord-repetition-init.ly" + +#(define default-fret-table (make-hash-table 101)) +#(define chord-shape-table (make-hash-table 29)) + % declarations for standard directions left = #-1 right = #1 @@ -49,7 +72,7 @@ startStaff = #(make-event-chord (list (make-span-event 'StaffSpanEvent START))) % % Code articulation definitions % -noBeam = #(make-music 'BeamForbidEvent) +noBeam = #(make-music 'BeamForbidEvent) pipeSymbol = #(make-music 'BarCheck) bracketOpenSymbol = #(make-span-event 'BeamEvent START) bracketCloseSymbol = #(make-span-event 'BeamEvent STOP) @@ -63,9 +86,6 @@ escapedBiggerSymbol = #(make-span-event 'DecrescendoEvent START) escapedSmallerSymbol = #(make-span-event 'CrescendoEvent START) -#(define fretboard-table (make-hash-table 100)) -#(define chord-shape-table (make-hash-table 100)) - \include "scale-definitions-init.ly" melisma = #(context-spec-music (make-property-set 'melismaBusy #t) 'Bottom) @@ -73,7 +93,32 @@ melismaEnd = #(context-spec-music (make-property-unset 'melismaBusy) 'Bottom) laissezVibrer = #(make-music 'LaissezVibrerEvent) repeatTie = #(make-music 'RepeatTieEvent) - + +\include "dynamic-scripts-init.ly" +\include "spanners-init.ly" + +%% MAKE-HASH-TABLE in GUILE 1.6 takes mandatory size parameter. +#(define musicQuotes (make-hash-table 29)) + +#(define toplevel-book-handler print-book-with-defaults) +#(define toplevel-bookpart-handler collect-bookpart-for-book) +#(define toplevel-music-handler collect-music-for-book) +#(define toplevel-score-handler collect-scores-for-book) +#(define toplevel-text-handler collect-scores-for-book) + +#(define book-bookpart-handler ly:book-add-bookpart!) +#(define book-music-handler collect-book-music-for-book) +#(define book-score-handler ly:book-add-score!) +#(define book-text-handler ly:book-add-score!) + +#(define bookpart-score-handler ly:book-add-score!) +#(define bookpart-text-handler ly:book-add-score!) +#(define bookpart-music-handler collect-book-music-for-book) + +\include "predefined-fretboards-init.ly" +\include "string-tunings-init.ly" +\include "property-init.ly" + \include "grace-init.ly" \include "midi-init.ly" \include "paper-defaults-init.ly" @@ -85,14 +130,13 @@ repeatTie = #(make-music 'RepeatTieEvent) in = #(* 25.4 mm) pt = #(/ in 72.27) cm = #(* 10 mm) - + \include "engraver-init.ly" #(set-paper-dimension-variables (current-module)) } #(set-default-paper-size (ly:get-option 'paper-size)) - partCombineListener = \layout { \context { \Score @@ -102,28 +146,7 @@ partCombineListener = \layout { } } -\include "dynamic-scripts-init.ly" -\include "spanners-init.ly" -\include "property-init.ly" - setDefaultDurationToQuarter = { c4 } -%% MAKE-HASH-TABLE in GUILE 1.6 takes mandatory size parameter. -#(define musicQuotes (make-hash-table 29)) -#(define toplevel-book-handler print-book-with-defaults) -#(define toplevel-bookpart-handler collect-bookpart-for-book) -#(define toplevel-music-handler collect-music-for-book) -#(define toplevel-score-handler collect-scores-for-book) -#(define toplevel-text-handler collect-scores-for-book) - -#(define book-bookpart-handler ly:book-add-bookpart!) -#(define book-music-handler collect-book-music-for-book) -#(define book-score-handler ly:book-add-score!) -#(define book-text-handler ly:book-add-score!) - -#(define bookpart-score-handler ly:book-add-score!) -#(define bookpart-text-handler ly:book-add-score!) -#(define bookpart-music-handler collect-book-music-for-book) -\include "predefined-fretboards-init.ly" diff --git a/ly/deutsch.ly b/ly/deutsch.ly index 0967f4cad2..480d6f4ae4 100644 --- a/ly/deutsch.ly +++ b/ly/deutsch.ly @@ -1,89 +1,23 @@ -% common german names for notes. "es" means flat, "is" means sharp -% -% by Roland Meier <> -% based on swedish.ly by Mats Bengtsson. - -% 1999/06/09 Bjoern Jacke <> -% added asas and marked ases as `unusual' - - -pitchnamesDeutsch = #`( - (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) - (ces . ,(ly:make-pitch -1 0 FLAT)) - (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT)) - (c . ,(ly:make-pitch -1 0 NATURAL)) - (cih . ,(ly:make-pitch -1 0 SEMI-SHARP)) - (cis . ,(ly:make-pitch -1 0 SHARP)) - (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) - (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - - (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) - (des . ,(ly:make-pitch -1 1 FLAT)) - (deh . ,(ly:make-pitch -1 1 SEMI-FLAT)) - (d . ,(ly:make-pitch -1 1 NATURAL)) - (dih . ,(ly:make-pitch -1 1 SEMI-SHARP)) - (dis . ,(ly:make-pitch -1 1 SHARP)) - (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) - (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - - (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (eseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) - (es . ,(ly:make-pitch -1 2 FLAT)) - (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT)) - (e . ,(ly:make-pitch -1 2 NATURAL)) - (eih . ,(ly:make-pitch -1 2 SEMI-SHARP)) - (eis . ,(ly:make-pitch -1 2 SHARP)) - (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) - (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - - (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) - (fes . ,(ly:make-pitch -1 3 FLAT)) - (feh . ,(ly:make-pitch -1 3 SEMI-FLAT)) - (f . ,(ly:make-pitch -1 3 NATURAL)) - (fih . ,(ly:make-pitch -1 3 SEMI-SHARP)) - (fis . ,(ly:make-pitch -1 3 SHARP)) - (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) - (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - - (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) - (ges . ,(ly:make-pitch -1 4 FLAT)) - (geh . ,(ly:make-pitch -1 4 SEMI-FLAT)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (gih . ,(ly:make-pitch -1 4 SEMI-SHARP)) - (gis . ,(ly:make-pitch -1 4 SHARP)) - (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) - (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - - (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (asah . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) - (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) ;;non-standard name for asas - (aseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) - (as . ,(ly:make-pitch -1 5 FLAT)) - (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT)) - (a . ,(ly:make-pitch -1 5 NATURAL)) - (aih . ,(ly:make-pitch -1 5 SEMI-SHARP)) - (ais . ,(ly:make-pitch -1 5 SHARP)) - (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) - (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - - (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (heseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) - (b . ,(ly:make-pitch -1 6 FLAT)) - (beh . ,(ly:make-pitch -1 6 SEMI-FLAT)) - (h . ,(ly:make-pitch -1 6 NATURAL)) - (hih . ,(ly:make-pitch -1 6 SEMI-SHARP)) - (his . ,(ly:make-pitch -1 6 SHARP)) - (hisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) - (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) - - -pitchnames = \pitchnamesDeutsch - -\version "2.12.0" - -#(ly:parser-set-note-names parser pitchnames) +%%%% common German names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "deutsch" diff --git a/ly/drumpitch-init.ly b/ly/drumpitch-init.ly index 6574a76258..65eec67cc1 100644 --- a/ly/drumpitch-init.ly +++ b/ly/drumpitch-init.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" drumPitchNames = #'((acousticbassdrum . acousticbassdrum) diff --git a/ly/dynamic-scripts-init.ly b/ly/dynamic-scripts-init.ly index a29430f158..33755fdd85 100644 --- a/ly/dynamic-scripts-init.ly +++ b/ly/dynamic-scripts-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" % % declare the standard dynamic identifiers. @@ -7,6 +7,8 @@ #(define (make-dynamic-script str) (make-music 'AbsoluteDynamicEvent 'text str)) + +%% don't exceed ppppp or fffff; see midi.scm. ppppp = #(make-dynamic-script "ppppp") pppp = #(make-dynamic-script "pppp") ppp = #(make-dynamic-script "ppp") @@ -20,6 +22,7 @@ mf = #(make-dynamic-script "mf") ff = #(make-dynamic-script "ff") fff = #(make-dynamic-script "fff") ffff = #(make-dynamic-script "ffff") +fffff = #(make-dynamic-script "fffff") fp = #(make-dynamic-script "fp") sf = #(make-dynamic-script "sf") sfp = #(make-dynamic-script "sfp") diff --git a/ly/english.ly b/ly/english.ly index fec9b11aee..6f485db299 100644 --- a/ly/english.ly +++ b/ly/english.ly @@ -1,135 +1,23 @@ -%{ - English note names spelled out in full, and abbreviated - - ff for double-flat - tqf for three-quarters flat - f for flat - qf for quarter-flat - - qs for quarter-sharp - s for sharp - tqs for three-quarters sharp - x for double-sharp -%} - -pitchnamesEnglish = #`( - (cflatflat . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (cflat . ,(ly:make-pitch -1 0 FLAT)) - (c . ,(ly:make-pitch -1 0 NATURAL)) - (csharp . ,(ly:make-pitch -1 0 SHARP)) - (csharpsharp . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (dflatflat . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (dflat . ,(ly:make-pitch -1 1 FLAT)) - (d . ,(ly:make-pitch -1 1 NATURAL)) - (dsharp . ,(ly:make-pitch -1 1 SHARP)) - (dsharpsharp . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (eflatflat . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (eflat . ,(ly:make-pitch -1 2 FLAT)) - (e . ,(ly:make-pitch -1 2 NATURAL)) - (esharp . ,(ly:make-pitch -1 2 SHARP)) - (esharpsharp . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (fflatflat . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fflat . ,(ly:make-pitch -1 3 FLAT)) - (f . ,(ly:make-pitch -1 3 NATURAL)) - (fsharp . ,(ly:make-pitch -1 3 SHARP)) - (fsharpsharp . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (gflatflat . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (gflat . ,(ly:make-pitch -1 4 FLAT)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (gsharp . ,(ly:make-pitch -1 4 SHARP)) - (gsharpsharp . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (aflatflat . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (aflat . ,(ly:make-pitch -1 5 FLAT)) - (a . ,(ly:make-pitch -1 5 NATURAL)) - (asharp . ,(ly:make-pitch -1 5 SHARP)) - (asharpsharp . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (bflatflat . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (bflat . ,(ly:make-pitch -1 6 FLAT)) - (b . ,(ly:make-pitch -1 6 NATURAL)) - (bsharp . ,(ly:make-pitch -1 6 SHARP)) - (bsharpsharp . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) - - (cff . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (ctqf . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) - (cf . ,(ly:make-pitch -1 0 FLAT)) - (cqf . ,(ly:make-pitch -1 0 SEMI-FLAT)) - (c . ,(ly:make-pitch -1 0 NATURAL)) - (cqs . ,(ly:make-pitch -1 0 SEMI-SHARP)) - (cs . ,(ly:make-pitch -1 0 SHARP)) - (ctqs . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) - (css . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (cx . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - - (dff . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (dtqf . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) - (df . ,(ly:make-pitch -1 1 FLAT)) - (dqf . ,(ly:make-pitch -1 1 SEMI-FLAT)) - (d . ,(ly:make-pitch -1 1 NATURAL)) - (dqs . ,(ly:make-pitch -1 1 SEMI-SHARP)) - (ds . ,(ly:make-pitch -1 1 SHARP)) - (dtqs . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) - (dss . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (dx . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - - (eff . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (etqf . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) - (ef . ,(ly:make-pitch -1 2 FLAT)) - (eqf . ,(ly:make-pitch -1 2 SEMI-FLAT)) - (e . ,(ly:make-pitch -1 2 NATURAL)) - (eqs . ,(ly:make-pitch -1 2 SEMI-SHARP)) - (es . ,(ly:make-pitch -1 2 SHARP)) - (etqs . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) - (ess . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (ex . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - - (fff . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (ftqf . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) - (ff . ,(ly:make-pitch -1 3 FLAT)) - (fqf . ,(ly:make-pitch -1 3 SEMI-FLAT)) - (f . ,(ly:make-pitch -1 3 NATURAL)) - (fqs . ,(ly:make-pitch -1 3 SEMI-SHARP)) - (fs . ,(ly:make-pitch -1 3 SHARP)) - (ftqs . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) - (fss . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (fx . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - - (gff . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (gtqf . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) - (gf . ,(ly:make-pitch -1 4 FLAT)) - (gqf . ,(ly:make-pitch -1 4 SEMI-FLAT)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (gqs . ,(ly:make-pitch -1 4 SEMI-SHARP)) - (gs . ,(ly:make-pitch -1 4 SHARP)) - (gtqs . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) - (gss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (gx . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - - (aff . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (atqf . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) - (af . ,(ly:make-pitch -1 5 FLAT)) - (aqf . ,(ly:make-pitch -1 5 SEMI-FLAT)) - (a . ,(ly:make-pitch -1 5 NATURAL)) - (aqs . ,(ly:make-pitch -1 5 SEMI-SHARP)) - (as . ,(ly:make-pitch -1 5 SHARP)) - (atqs . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) - (ass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (ax . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - - (bff . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (btqf . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) - (bf . ,(ly:make-pitch -1 6 FLAT)) - (bqf . ,(ly:make-pitch -1 6 SEMI-FLAT)) - (b . ,(ly:make-pitch -1 6 NATURAL)) - (bqs . ,(ly:make-pitch -1 6 SEMI-SHARP)) - (bs . ,(ly:make-pitch -1 6 SHARP)) - (btqs . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) - (bss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) - (bx . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) - -pitchnames = \pitchnamesEnglish - -\version "2.12.0" - - -#(ly:parser-set-note-names parser pitchnames) +%%%% common English names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "english" diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index cebd9b8637..d28b8be51b 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -1,4 +1,22 @@ -\version "2.12.0" +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 1996--2011 Han-Wen Nienhuys +%%%% Jan Nieuwenhuizen +%%%% +%%%% 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 . + +\version "2.14.0" \context { \name "Global" @@ -10,33 +28,37 @@ \grobdescriptions #all-grob-descriptions } - \context { \type "Engraver_group" \name "FretBoards" + \description "A context for displaying fret diagrams." - \consists "Output_property_engraver" - - \consists "Axis_group_engraver" \consists "Fretboard_engraver" + \consists "Output_property_engraver" + \consists "Hara_kiri_engraver" \consists "Separating_line_group_engraver" \consists "Font_size_engraver" \consists "Instrument_name_engraver" - predefinedDiagramTable = #fretboard-table + %% explicitly set instrument, so it is not inherited from the parent + instrumentName = #'() + shortInstrumentName = #'() + + predefinedDiagramTable = #default-fret-table + handleNegativeFrets = #'recalculate } \context { \type "Engraver_group" \name "Staff" - - \consists "Output_property_engraver" + + \consists "Output_property_engraver" \consists "Bar_engraver" %% Bar_engraver must be first so default bars aren't overwritten %% with empty ones. - + \consists "Font_size_engraver" - \consists "Separating_line_group_engraver" + \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Staff_collecting_engraver" @@ -45,37 +67,36 @@ \consists "Clef_engraver" \consists "Key_engraver" \consists "Time_signature_engraver" - \consists "Ledger_line_engraver" + \consists "Ledger_line_engraver" \consists "Staff_symbol_engraver" \consists "Collision_engraver" + \consists "Beam_collision_engraver" \consists "Grob_pq_engraver" \consists "Rest_collision_engraver" \consists "Accidental_engraver" \consists "Piano_pedal_engraver" \consists "Piano_pedal_align_engraver" \consists "Instrument_name_engraver" - \consists "String_number_engraver" \consists "Axis_group_engraver" \consists "Figured_bass_engraver" \consists "Figured_bass_position_engraver" \consists "Script_row_engraver" + \consists "Cue_clef_engraver" localKeySignature = #'() createSpacing = ##t - ignoreFiguredBassRest = ##t - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) - - %% explicitly set instrument, so we don't get + ignoreFiguredBassRest = ##f + + %% explicitly set instrument, so we don't get %% weird effects when doing instrument names for %% piano staves - instrumentName = #'() shortInstrumentName = #'() - + \defaultchild "Voice" \accepts "Voice" \accepts "CueVoice" - + \description "Handles clefs, bar lines, keys, accidentals. It can contain @code{Voice} contexts." @@ -86,13 +107,12 @@ \type "Engraver_group" \name "DrumStaff" \alias "Staff" - + \remove "Accidental_engraver" \remove "Ottava_spanner_engraver" - \remove "Key_engraver" + \remove "Key_engraver" \remove "Piano_pedal_engraver" - \remove "String_number_engraver" - + \description "Handles typesetting for percussion." \denies "Voice" @@ -101,15 +121,22 @@ clefGlyph = #"clefs.percussion" clefPosition = #0 - \override Script #'staff-padding = #0.75 + \override Script #'staff-padding = #0.75 } \context { \type "Engraver_group" \name "ChoirStaff" + \consists "Vertical_align_engraver" + topLevelAlignment = ##f + + \consists "Instrument_name_engraver" \consists "System_start_delimiter_engraver" systemStartDelimiter = #'SystemStartBracket + %% explicitly set instrument, so it is not inherited from the parent + instrumentName = #'() + shortInstrumentName = #'() vocalName = #'() shortVocalName = #'() @@ -120,6 +147,7 @@ \accepts "PianoStaff" \accepts "Lyrics" \accepts "ChordNames" + \accepts "FiguredBass" \accepts "ChoirStaff" \accepts "StaffGroup" \defaultchild "Staff" @@ -129,25 +157,24 @@ contained staves are not connected vertically." \context{ \type "Engraver_group" - - \override VerticalAxisGroup #'minimum-Y-extent = ##f + localKeySignature = #'() createSpacing = ##t squashedPosition = #0 \name RhythmicStaff \alias "Staff" - - \override BarLine #'bar-size = #4 + + \override BarLine #'bar-extent = #'(-2 . 2) \override VoltaBracket #'staff-padding = #3 - \override StaffSymbol #'line-count = #1 + \override StaffSymbol #'line-count = #1 \override Stem #'neutral-direction = #UP \override Beam #'neutral-direction = #UP - + \consists "Output_property_engraver" \consists "Font_size_engraver" - \consists "Separating_line_group_engraver" + \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Bar_engraver" \consists "Staff_symbol_engraver" @@ -155,8 +182,12 @@ contained staves are not connected vertically." \consists "Time_signature_engraver" \consists "Instrument_name_engraver" \consists "Axis_group_engraver" - \consists "Ledger_line_engraver" - + \consists "Ledger_line_engraver" + + %% explicitly set instrument, so it is not inherited from the parent + instrumentName = #'() + shortInstrumentName = #'() + \accepts "Voice" \accepts "CueVoice" \defaultchild "Voice" @@ -177,11 +208,10 @@ subscripts, slurs, ties, and rests. You have to instantiate this explicitly if you want to have multiple voices on the same staff." - localKeySignature = #'() \consists "Font_size_engraver" \consists "Pitched_trill_engraver" - \consists "Output_property_engraver" + \consists "Output_property_engraver" \consists "Arpeggio_engraver" \consists "Multi_measure_rest_engraver" \consists "Text_spanner_engraver" @@ -198,7 +228,8 @@ multiple voices on the same staff." \consists "Dots_engraver" \consists "Rest_engraver" \consists "Tweak_engraver" - + \consists "Footnote_engraver" + %% switch on to make stem directions interpolate for the %% center line. % \consists "Melody_engraver" @@ -210,8 +241,9 @@ multiple voices on the same staff." %% must come before Script_column_engraver. \consists "New_fingering_engraver" - + \consists "Chord_tremolo_engraver" + \consists "Double_percent_repeat_engraver" \consists "Percent_repeat_engraver" \consists "Slash_repeat_engraver" \consists "Part_combine_engraver" @@ -235,18 +267,17 @@ multiple voices on the same staff." \consists "Tuplet_engraver" \consists "Grace_engraver" \consists "Instrument_switch_engraver" - \consists "Skip_event_swallow_translator" } \context{ \Voice - + \name CueVoice \alias Voice fontSize = #-4 \override Stem #'length-fraction = #(magstep -4) \override Beam #'length-fraction = #(magstep -4) - \override Beam #'thickness = #0.35 + \override Beam #'beam-thickness = #0.35 } \context { @@ -268,27 +299,37 @@ multiple voices on the same staff." \remove "Fingering_engraver" \remove "Cluster_spanner_engraver" - - \consists "Skip_event_swallow_translator" } \context{ \type "Engraver_group" \name GrandStaff localKeySignature = #'() - + \description "A group of staves, with a brace on the left side, grouping the staves together. The bar lines of the contained staves are connected vertically." + \consists "Instrument_name_engraver" \consists "Span_bar_engraver" \consists "Span_arpeggio_engraver" \consists "System_start_delimiter_engraver" + \consists "Vertical_align_engraver" systemStartDelimiter = #'SystemStartBrace + topLevelAlignment = ##f + %% explicitly set instrument, so it is not inherited from the parent + instrumentName = #'() + shortInstrumentName = #'() \defaultchild "Staff" \accepts "Staff" + \accepts "RhythmicStaff" + \accepts "DrumStaff" + \accepts "TabStaff" + \accepts "Lyrics" \accepts "FiguredBass" + \accepts "Dynamics" + \accepts "ChordNames" } \context{ @@ -296,11 +337,13 @@ contained staves are connected vertically." \name "PianoStaff" \alias "GrandStaff" - \description "Just like @code{GrandStaff} but with support for -instrument names at the start of each system." + \description "Just like @code{GrandStaff}, but the staves are only removed +together, never separately." + + \consists "Vertical_align_engraver" + \consists "Keep_alive_together_engraver" + topLevelAlignment = ##f - \consists "Instrument_name_engraver" - instrumentName = #'() shortInstrumentName = #'() } @@ -309,10 +352,17 @@ instrument names at the start of each system." \type "Engraver_group" \name "StaffGroup" + \consists "Vertical_align_engraver" + topLevelAlignment = ##f + + \consists "Instrument_name_engraver" \consists "Span_bar_engraver" \consists "Span_arpeggio_engraver" - \consists "Output_property_engraver" + \consists "Output_property_engraver" systemStartDelimiter = #'SystemStartBracket + %% explicitly set instrument, so it is not inherited from the parent + instrumentName = #'() + shortInstrumentName = #'() \consists "System_start_delimiter_engraver" @@ -322,43 +372,80 @@ instrument names at the start of each system." \accepts "DrumStaff" \accepts "GrandStaff" \accepts "PianoStaff" - \accepts "TabStaff" + \accepts "TabStaff" \accepts "Lyrics" \accepts "ChordNames" \accepts "FiguredBass" \accepts "ChoirStaff" \accepts "StaffGroup" - + \description "Groups staves while adding a bracket on the left side, grouping the staves together. The bar lines of the contained staves are connected vertically. @code{StaffGroup} only consists of a collection of staves, with a bracket in front and spanning bar lines." } +\context { + \type "Engraver_group" + \name Dynamics + \alias Voice + \consists "Output_property_engraver" + \consists "Bar_engraver" + \consists "Piano_pedal_engraver" + \consists "Script_engraver" + \consists "New_dynamic_engraver" + \consists "Dynamic_align_engraver" + \consists "Text_engraver" + \consists "Text_spanner_engraver" + \consists "Axis_group_engraver" + \consists "Tweak_engraver" + + pedalSustainStrings = #'("Ped." "*Ped." "*") + pedalUnaCordaStrings = #'("una corda" "" "tre corde") + \override VerticalAxisGroup #'staff-affinity = #CENTER + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = + #'((basic-distance . 5) + (padding . 0.5)) + \override TextScript #'font-shape = #'italic + \override DynamicLineSpanner #'Y-offset = #0 + + \description "Holds a single line of dynamics, which will be +centered between the staves surrounding this context." +} + + \context{ \type "Engraver_group" - \override VerticalAxisGroup #'minimum-Y-extent = #'(-0.75 . 2.0) \description "Corresponds to a voice with lyrics. Handles the printing of a single line of lyrics." - + \name "Lyrics" - instrumentName = #'() - shortInstrumentName = #'() - \consists "Lyric_engraver" \consists "Extender_engraver" \consists "Hyphen_engraver" \consists "Stanza_number_engraver" \consists "Instrument_name_engraver" - \consists "Skip_event_swallow_translator" \consists "Font_size_engraver" \consists "Hara_kiri_engraver" + searchForVoice = ##f + %% explicitly set instrument, so it is not inherited from the parent + instrumentName = #'() + shortInstrumentName = #'() \override VerticalAxisGroup #'remove-first = ##t \override VerticalAxisGroup #'remove-empty = ##t - \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t - \override SeparationItem #'padding = #0.2 + \override VerticalAxisGroup #'staff-affinity = #UP + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = + #'((basic-distance . 5.5) + (padding . 0.5) + (stretchability . 1)) + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = + #'((basic-distance . 0) + (minimum-distance . 2.8) + (padding . 0.2) + (stretchability . 0)) + \override VerticalAxisGroup #'nonstaff-unrelatedstaff-spacing #'padding = #1.5 \override InstrumentName #'self-alignment-Y = ##f %% sync with define-grobs.scm ; @@ -366,20 +453,29 @@ printing of a single line of lyrics." %% make sure that barlines aren't collapsed, when %% Bar_engraver is there. - \override BarLine #'bar-size = #0.1 - + \override BarLine #'bar-extent = #'(-0.05 . 0.05) + } \context { \type "Engraver_group" \name NoteNames + \description "A context for printing the names of notes." \consists "Axis_group_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f + \override VerticalAxisGroup #'staff-affinity = #UP + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = + #'((basic-distance . 0) + (minimum-distance . 2.8) + (padding . 0.2) + (stretchability . 0)) + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = + #'((basic-distance . 5.5) + (padding . 0.5) + (stretchability . 1)) + \override VerticalAxisGroup + #'nonstaff-unrelatedstaff-spacing #'padding = 1.5 - - \consists "Rest_swallow_translator" - \consists "Skip_event_swallow_translator" \consists "Tie_engraver" \consists "Note_name_engraver" \consists "Separating_line_group_engraver" @@ -389,41 +485,37 @@ printing of a single line of lyrics." \type "Engraver_group" \name ChordNames \description "Typesets chord names." - - \consists "Rest_swallow_translator" - \consists "Output_property_engraver" + + \consists "Output_property_engraver" \consists "Separating_line_group_engraver" \consists "Chord_name_engraver" - \consists "Skip_event_swallow_translator" \consists "Hara_kiri_engraver" % \consists "Note_spacing_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2) \override VerticalAxisGroup #'remove-first = ##t \override VerticalAxisGroup #'remove-empty = ##t + \override VerticalAxisGroup #'staff-affinity = #DOWN + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #0.5 + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'padding = #0.5 } -RemoveEmptyStaffContext= \context { - \Staff +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 Beam #'auto-knee-gap = #'() \override VerticalAxisGroup #'remove-empty = ##t } -AncientRemoveEmptyStaffContext = \context { -%% why not add by default? - - \RemoveEmptyStaffContext - \accepts "VaticanaVoice" - \accepts "GregorianTranscriptionVoice" - \accepts "MensuralVoice" -} \context { \type "Score_engraver" \name "Score" - + \description "This is the top level notation context. No other context can contain a @code{Score} context. This context handles the administration of time signatures. It also makes sure @@ -436,7 +528,6 @@ automatically when an output definition (a @code{\score} or @code{\layout} block) is processed." \consists "Paper_column_engraver" - \consists "Vertically_spaced_contexts_engraver" \consists "Repeat_acknowledge_engraver" \consists "Staff_collecting_engraver" @@ -448,7 +539,7 @@ automatically when an output definition (a @code{\score} or \consists "System_start_delimiter_engraver" \consists "Mark_engraver" \consists "Volta_engraver" - \consists "Metronome_mark_engraver" + \consists "Metronome_mark_engraver" \consists "Break_align_engraver" \consists "Spacing_engraver" \consists "Grace_spacing_engraver" @@ -456,7 +547,7 @@ automatically when an output definition (a @code{\score} or \consists "Stanza_number_align_engraver" \consists "Bar_number_engraver" \consists "Parenthesis_engraver" - + \defaultchild "Staff" \accepts "FretBoards" @@ -479,14 +570,16 @@ automatically when an output definition (a @code{\score} or noteToFretFunction = #determine-frets + predefinedDiagramTable = ##f soloText = #"Solo" soloIIText = #"Solo II" aDueText = #"a2" printPartCombineTexts = ##t + partCombineTextsOnNote = ##t systemStartDelimiter =#'SystemStartBar drumStyleTable = #drums-style - + melismaBusyProperties = #default-melisma-properties tieWaitForNote = ##f clefGlyph = #"clefs.G" @@ -497,21 +590,32 @@ automatically when an output definition (a @code{\score} or crescendoSpanner = #'hairpin decrescendoSpanner = #'hairpin - + defaultBarType = #"|" doubleRepeatType = #":|:" barNumberVisibility = #first-bar-number-invisible automaticBars = ##t - + explicitClefVisibility = #all-visible + explicitCueClefVisibility = #end-of-line-invisible explicitKeySignatureVisibility = #all-visible implicitTimeSignatureVisibility = #end-of-line-invisible - + repeatCountVisibility = #all-repeat-counts-visible - - autoBeamSettings = #default-auto-beam-settings + + timeSignatureSettings = #default-time-signature-settings + timeSignatureFraction = #'(4 . 4) + +%% These defaults should be the same as the rules established in +%% scm/time-signature-settings.scm for 4/4 time + measureLength = #(ly:make-moment 4 4) + baseMoment = #(ly:make-moment 1 4) + beatStructure = #'(1 1 1 1) + beamExceptions = #'((end . (((1 . 8) . (4 4)) + ((1 . 12) . (3 3 3 3))))) autoBeaming = ##t autoBeamCheck = #default-auto-beam-check + scriptDefinitions = #default-script-alist pedalSustainStrings = #'("Ped." "*Ped." "*") @@ -520,38 +624,39 @@ automatically when an output definition (a @code{\score} or pedalUnaCordaStyle = #'text %% These are in ordinary italic font, including the *, -%% but they are unlikely to be used, +%% but they are unlikely to be used, %% as the default pedal-style for SostenutoPedal is 'mixed': -%% i.e. Sost. Ped_____________________ - pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*") +%% i.e. Sost. Ped_____________________ + pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*") pedalSostenutoStyle = #'mixed - harmonicAccidentals = ##t + harmonicAccidentals = ##t fingeringOrientations = #'(up down) stringNumberOrientations = #'(up down) strokeFingerOrientations = #'(right) - + lyricMelismaAlignment = #LEFT markFormatter = #format-mark-letters rehearsalMark = #1 subdivideBeams = ##f extraNatural = ##t autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave 0)) - autoCautionaries = #'() + autoCautionaries = #'() printKeyCancellation = ##t keyAlterationOrder = #`( (6 . ,FLAT) (2 . ,FLAT) (5 . ,FLAT ) (1 . ,FLAT) (4 . ,FLAT) (0 . ,FLAT) (3 . ,FLAT) (3 . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP) (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP) (6 . ,DOUBLE-FLAT) (2 . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1 . ,DOUBLE-FLAT) (4 . ,DOUBLE-FLAT) (0 . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT) - (3 . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP) + (3 . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (1 . ,DOUBLE-SHARP) (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP) ) barCheckSynchronize = ##f - + %% chord names: chordNameFunction = #ignatzek-chord-names majorSevenSymbol = #whiteTriangleMarkup + chordNameLowercaseMinor = ##f chordNameSeparator = #(make-simple-markup "/") chordNameExceptions = #ignatzekExceptions chordNoteNamer = #'() @@ -559,7 +664,7 @@ automatically when an output definition (a @code{\score} or chordPrefixSpacer = #0 chordNameExceptionsFull = #fullJazzExceptions chordNameExceptionsPartial = #partialJazzExceptions - + noChordSymbol = #(make-simple-markup "N.C.") bassStaffProperties = #'((assign clefGlyph "clefs.F") (assign clefPosition 2) @@ -569,10 +674,11 @@ automatically when an output definition (a @code{\score} or stringOneTopmost = ##t highStringOne = ##t -%% One may change the strings tuning as following : -%% The lenght of the list must be equal to the number of string +%% One may change the string tunings as follows : +%% The length of the list must be equal to the number of strings stringTunings = #guitar-tuning tablatureFormat = #fret-number-tablature-format + tabStaffLineLayoutFunction = #tablature-position-on-lines %% figuredBassFormatter = #format-bass-figure @@ -584,27 +690,38 @@ automatically when an output definition (a @code{\score} or (Voice Stem direction ,UP) (Voice Stem font-size -3) (Voice NoteHead font-size -3) + (Voice TabNoteHead font-size -4) (Voice Dots font-size -3) (Voice Stem length-fraction 0.8) (Voice Stem no-stem-extend #t) - (Voice Beam thickness 0.384) + (Voice Beam beam-thickness 0.384) (Voice Beam length-fraction 0.8) (Voice Accidental font-size -4) (Voice AccidentalCautionary font-size -4) (Voice Slur direction ,DOWN) (Voice Script font-size -3) + (Voice Fingering font-size -8) + (Voice StringNumber font-size -8) ) keepAliveInterfaces = #'( - rhythmic-grob-interface + bass-figure-interface + chord-name-interface + cluster-beacon-interface + fret-diagram-interface + lyric-syllable-interface + note-head-interface + tab-note-head-interface lyric-interface percent-repeat-item-interface percent-repeat-interface - ;; need this, as stanza numbers are items, and appear only once. + ;; need this, as stanza numbers are items, and appear only once. stanza-number-interface ) - quotedEventTypes = #'( + % \quoteDuring is supposed to quote everything, cueDuring only the essentials + quotedEventTypes = #'(StreamEvent) + quotedCueEventTypes = #'( note-event rest-event tie-event @@ -612,8 +729,8 @@ automatically when an output definition (a @code{\score} or tuplet-span-event) instrumentTransposition = #(ly:make-pitch 0 0 0) - verticallySpacedContexts = #'(Staff) - + topLevelAlignment = ##t + timing = ##t } @@ -623,26 +740,26 @@ automatically when an output definition (a @code{\score} or \context { \type "Engraver_group" \name "FiguredBass" + \description "A context for printing a figured bass line." \consists "Figured_bass_engraver" - \consists "Note_swallow_translator" - \consists "Skip_event_swallow_translator" \consists "Separating_line_group_engraver" \consists "Hara_kiri_engraver" \override VerticalAxisGroup #'remove-empty = ##t \override VerticalAxisGroup #'remove-first = ##t - \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2) + \override VerticalAxisGroup #'staff-affinity = #UP + \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #0.5 + \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'padding = #0.5 } \context { \name "Devnull" \type "Engraver_group" -%% don't want to route anything out of here: +%% don't want to route anything out of here: \alias "Staff" \alias "Voice" - \consists "Swallow_engraver" \description "Silently discards all musical information given to this context." } @@ -652,8 +769,8 @@ context." \name "TabVoice" \alias "Voice" \consists "Tab_note_heads_engraver" - \consists "Tab_harmonic_engraver" - + \consists "Tab_tie_follow_engraver" + \remove "Note_heads_engraver" \remove "Fingering_engraver" \remove "New_fingering_engraver" @@ -663,19 +780,69 @@ context." %% TabStaff increase the staff-space, which in turn %% increases beam thickness and spacing; beams are %% too big. We have to adjust the beam settings: - \override Beam #'thickness = #0.32 + \override Beam #'beam-thickness = #0.32 \override Beam #'length-fraction = #0.62 + %% the same goes for tremolo beams + \override StemTremolo #'beam-thickness = #0.32 + %% NOTE: in lily/stem-tremolo.cc, we have length-fraction = 1, + %% and the tablature staff space is scaled (1.5 by default), + %% so we use the inversion of the scale factor: + \override StemTremolo #'length-fraction = #(lambda (grob) + (/ 1 (ly:staff-symbol-staff-space grob))) + \override StemTremolo #'beam-width = #stem-tremolo::calc-tab-width %% No accidental in tablature ! - \remove Accidental_engraver - - \override Glissando #'extra-dy = #0.75 + \remove "Accidental_engraver" + %% make the Stems as short as possible to minimize their influence + %% on the slur::calc-control-points routine + \override Stem #'length = #0 + \override Stem #'no-stem-extend = ##t + \override Stem #'flag-style = #'no-flag + \override Stem #'details = #'((lengths 0 0 0 0 0 0) + (beamed-lengths 0 0 0) + (beamed-minimum-free-lengths 0 0 0) + (beamed-extreme-minimum-free-lengths 0 0) + (stem-shorten 0 0)) + %% after all, the stubs of the stems may still be visible, so ... + \override Stem #'transparent = ##t + %% automatic beams should be suppressed for similar reasons ... + autoBeaming = ##f + %% remove beams, dots and rests ... + \override Beam #'stencil = ##f + \override StemTremolo #'stencil = ##f + \override Dots #'stencil = ##f + \override Rest #'stencil = ##f + \override MultiMeasureRest #'stencil = ##f + \override MultiMeasureRestNumber #'transparent = ##t + \override MultiMeasureRestText #'transparent = ##t + %% ... all kinds of ties/slurs + \override Tie #'stencil = ##f + \override RepeatTie #'stencil = ##f + \override LaissezVibrerTie #'stencil = ##f + \override Slur #'stencil = #slur::draw-tab-slur + \override PhrasingSlur #'stencil = ##f + %% 'tied to' fret numbers become invisible or parenthesized, respectively) + \override Tie #'after-line-breaking = #tie::handle-tab-note-head + \override RepeatTie #'after-line-breaking = #repeat-tie::handle-tab-note-head + %% ... and all kinds of markups, spanners etc. + \override TupletBracket #'stencil = ##f + \override TupletNumber #'stencil = ##f + \override DynamicText #'transparent = ##t + \override DynamicTextSpanner #'stencil = ##f + \override TextSpanner #'stencil = ##f + \override Hairpin #'transparent = ##t + \override Script #'stencil = ##f + \override TextScript #'stencil = ##f + \override Glissando #'stencil = #glissando::draw-tab-glissando + %% the direction for glissando lines will be automatically corrected + \override Glissando #'extra-dy = #glissando::calc-tab-extra-dy \override Glissando #'bound-details #'right = #`((attach-dir . ,LEFT) (padding . 0.3)) \override Glissando #'bound-details #'left = #`((attach-dir . ,RIGHT) (padding . 0.3)) - \override Glissando #'extra-dy = #0.75 - \override Glissando #'gap = #0.2 + %% dead notes + \override TabNoteHead #'glyph-name = #tab-note-head::calc-glyph-name + \override TabNoteHead #'stencil = #tab-note-head::whiteout-if-style-set } \context { @@ -684,37 +851,40 @@ context." \name "TabStaff" \denies "Voice" \consists "Tab_staff_symbol_engraver" - - \description "Context for generating tablature. [DOCME]" + + \description "Context for generating tablature. It accepts only @code{TabVoice} +contexts and handles the line spacing, the tablature clef etc. properly." \accepts "TabVoice" \defaultchild "TabVoice" - - %% 6 strings + + %% 6 strings, bigger spacing \override StaffSymbol #'staff-space = #1.5 %% Don't draw stems over the tablature figures ! \override Stem #'avoid-note-head = ##t - + %% No accidental in tablature ! \remove "Accidental_engraver" \remove "Key_engraver" - \remove "String_number_engraver" + + \remove "Ottava_spanner_engraver" + %% the clef handler + \override Clef #'stencil = #clef::print-modern-tab-if-set + %% no time signature + \override TimeSignature #'stencil = ##f + %% no arpeggios + \override Arpeggio #'stencil = ##f + %% we ignore collision warnings that may occur due to + %% stem overlapping, because we have no stems ;-) + \override NoteColumn #'ignore-collision = ##t %% Special "TAB" clef clefGlyph = #"clefs.tab" clefPosition = #0 + %% Change string if note results in negative fret number + handleNegativeFrets = #'recalculate } -%% TODO: Gregorian Chant contexts should be moved to gregorian.ly, -%% but this does not work (is this a bug or intended behaviour?): -%% -%% If I try to do so, I get "error: unknown escaped string: -%% `\VaticanaStaff'" in params-init.ly. If I also move -%% "\context { \Vaticana*Context }" from params-init.ly to the end -%% of gregorian.ly, then I get "error: parse error, unexpected -%% TRANSLATOR: \context { \VaticanaStaff }" in -%% gregorian.ly. --jr - \context { \Voice \name "VaticanaVoice" @@ -727,6 +897,8 @@ of Editio Vaticana." \remove "Stem_engraver" \remove "Ligature_bracket_engraver" \consists "Vaticana_ligature_engraver" + \remove "Text_spanner_engraver" + \consists "Episema_engraver" %% Set default head for notes outside of \[ \]. \override NoteHead #'style = #'vaticana.punctum @@ -737,15 +909,6 @@ of Editio Vaticana." %% There are no beams in Gregorian Chant notation. autoBeaming = ##f - - %% Prepare TextSpanner for \episem{Initium|Finis} use. - %% - %% FIXME: The line @code{\override TextSpanner #'padding = #-0.1} is - %% required to force the articulation signs being placed vertically - %% tightly to the correpsonding note heads. - %% - \override TextSpanner #'style = #'line - \override TextSpanner #'padding = #-0.1 } \context { @@ -794,6 +957,7 @@ of Editio Vaticana." \Voice \name "GregorianTranscriptionVoice" \alias "Voice" + \consists "Episema_engraver" %% Removing ligature bracket engraver without replacing it by some %% other ligature engraver would cause a "Junking event: `LigatureEvent'" @@ -808,18 +972,6 @@ of Editio Vaticana." %% There are no beams in Gregorian Chant notation. autoBeaming = ##f - %% Prepare TextSpanner for \episem{Initium|Finis} use. - %% - %% N.B.: dash-fraction MUST be unset; otherwise, TextSpanner will - %% always produce dashed lines, regardless of the style property. - %% - %% FIXME: The line @code{\override TextSpanner #'padding = #-0.1} is - %% required to force the articulation signs being placed vertically - %% tightly to the correpsonding note heads. - %% - \override TextSpanner #'dash-fraction = #'() - \override TextSpanner #'style = #'line - \override TextSpanner #'padding = #-0.1 } \context { @@ -901,9 +1053,33 @@ accommodated for typesetting a piece in mensural style." } -RemoveEmptyRhythmicStaffContext= \context { +%% 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 +%% into the desired context. That's just as easy, requires only one line more +%% (the \*Staff), but preserves previous context mods. +%% TODO: DEPRECATED_2.13.17, remove at some point in the future +RemoveEmptyStaffContext = \context { + \Staff + \RemoveEmptyStaves +} + +AncientRemoveEmptyStaffContext = \context { + \VaticanaStaff + \RemoveEmptyStaves +} + +RemoveEmptyDrumStaffContext = \context { + \DrumStaff + \RemoveEmptyStaves +} + +RemoveEmptyRhythmicStaffContext = \context { \RhythmicStaff - \remove "Axis_group_engraver" - \override VerticalAxisGroup #'remove-empty = ##t - \consists "Hara_kiri_engraver" + \RemoveEmptyStaves +} + +RemoveEmptyTabStaffContext = \context { + \TabStaff + \RemoveEmptyStaves } diff --git a/ly/espanol.ly b/ly/espanol.ly index 90305f603e..f95eece6a5 100644 --- a/ly/espanol.ly +++ b/ly/espanol.ly @@ -1,63 +1,23 @@ -%{ - - Common Spanish names for notes. "b" means flat (bemol), "s" means sharp (sostenido). - Adapted from italiano.ly. - - English: a b c d e f g - Spanish: la si do re mi fa sol - -%} - -% contributed by Carlos García Suárez <> - - -% For using "sostingut" notation, which is also correct -pitchnamesEspanol = #`( - (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (dob . ,(ly:make-pitch -1 0 FLAT)) - (do . ,(ly:make-pitch -1 0 NATURAL)) - (dos . ,(ly:make-pitch -1 0 SHARP)) - (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - - (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (reb . ,(ly:make-pitch -1 1 FLAT)) - (re . ,(ly:make-pitch -1 1 NATURAL)) - (res . ,(ly:make-pitch -1 1 SHARP)) - (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - - (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (mib . ,(ly:make-pitch -1 2 FLAT)) - (mi . ,(ly:make-pitch -1 2 NATURAL)) - (mis . ,(ly:make-pitch -1 2 SHARP)) - (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - - (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fab . ,(ly:make-pitch -1 3 FLAT)) - (fa . ,(ly:make-pitch -1 3 NATURAL)) - (fas . ,(ly:make-pitch -1 3 SHARP)) - (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - - (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (solb . ,(ly:make-pitch -1 4 FLAT)) - (sol . ,(ly:make-pitch -1 4 NATURAL)) - (sols . ,(ly:make-pitch -1 4 SHARP)) - (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - - (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (lab . ,(ly:make-pitch -1 5 FLAT)) - (la . ,(ly:make-pitch -1 5 NATURAL)) - (las . ,(ly:make-pitch -1 5 SHARP)) - (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - - (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (sib . ,(ly:make-pitch -1 6 FLAT)) - (si . ,(ly:make-pitch -1 6 NATURAL)) - (sis . ,(ly:make-pitch -1 6 SHARP)) - (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) - -pitchnames = \pitchnamesEspanol - -\version "2.12.0" - -#(ly:parser-set-note-names parser pitchnames) +%%%% common Spanish names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "espanol" diff --git a/ly/festival.ly b/ly/festival.ly index 66313e3f99..cbe88d67c8 100644 --- a/ly/festival.ly +++ b/ly/festival.ly @@ -1,26 +1,23 @@ -% festival.ly --- Festival singing mode output -% -% Copyright (C) 2006, 2007 Brailcom, o.p.s. -% -% Author: Milan Zamazal -% -% COPYRIGHT NOTICE -% -% 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 2 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, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +%%%% Festival singing mode output +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2006, 2007 Brailcom, o.p.s. +%%%% +%%%% Author: Milan Zamazal +%%%% 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 . -\version "2.12.0" +\version "2.14.0" #(use-modules (scm song)) diff --git a/ly/generate-documentation.ly b/ly/generate-documentation.ly index c6b236d5c5..3c4baf305a 100644 --- a/ly/generate-documentation.ly +++ b/ly/generate-documentation.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" % % Running LilyPond on this file generates the documentation diff --git a/ly/generate-interface-doc-init.ly b/ly/generate-interface-doc-init.ly index 20668317a1..9e6183a48c 100644 --- a/ly/generate-interface-doc-init.ly +++ b/ly/generate-interface-doc-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" % % Running LilyPond on this file generates the short interface doc diff --git a/ly/grace-init.ly b/ly/grace-init.ly index ea89bb2e4e..b9729f3e93 100644 --- a/ly/grace-init.ly +++ b/ly/grace-init.ly @@ -1,4 +1,7 @@ -\version "2.12.0" +\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 = { @@ -9,19 +12,19 @@ stopGraceMusic = { 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 } diff --git a/ly/graphviz-init.ly b/ly/graphviz-init.ly index 12330a345f..2670858ffb 100644 --- a/ly/graphviz-init.ly +++ b/ly/graphviz-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" #(use-modules (scm graphviz)) diff --git a/ly/gregorian.ly b/ly/gregorian.ly index 496e0b6717..0b8e0680be 100644 --- a/ly/gregorian.ly +++ b/ly/gregorian.ly @@ -3,7 +3,7 @@ $Id$ %} -\version "2.12.0" +\version "2.14.0" % % Declare memorable shortcuts for special unicode characters @@ -138,6 +138,7 @@ finalis = { % Workaround: add padding. Correct fix would be spacing engine handle this. \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0) + \once \override BreathingSign #'extra-spacing-height = #'(-0.5 . 0.5) \breathe } @@ -149,8 +150,6 @@ accentus = #(make-articulation "accentus") ictus = #(make-articulation "ictus") semicirculus = #(make-articulation "semicirculus") circulus = #(make-articulation "circulus") -episemInitium = \startTextSpan -episemFinis = \stopTextSpan % % \augmentum increases the dot-count value of all note heads to which @@ -224,15 +223,11 @@ ligature = #(define-music-function \layout { indent = 0.0 - %%% TODO: should raggedright be the default? + %%% TODO: should ragged-right be the default? %ragged-right = ##t ragged-last = ##t - %%% FIXME: line-thickness should be set here to a slightly - %%% thicker value as the default; but we can not set it here, - %%% since neither \staff-space nor #staff-space is yet defined - %%% when lily comes across the following line. - %line-thickness = \staff-space / 7.0 + line-thickness = #(/ (ly:output-def-lookup $defaultpaper 'staff-space) 7.0) \context { \VaticanaStaff @@ -298,7 +293,7 @@ neumeDemoLayout = \layout { \override StaffSymbol #'transparent = ##t \remove "Time_signature_engraver" \remove "Bar_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f + \override VerticalAxisGroup #'staff-staff-spacing = #'() } \context { \Voice diff --git a/ly/guile-debugger.ly b/ly/guile-debugger.ly new file mode 100644 index 0000000000..9ed75311ed --- /dev/null +++ b/ly/guile-debugger.ly @@ -0,0 +1,55 @@ +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2009--2011 by Ian Hulin +%%%% +%%%% 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 . + + + +%% \include this file to enable the setting of breakpoints in guile. +%% Once loaded, this file will open a guile prompt. Type +%% (debug-help) +%% at the guile prompt to get a list of possible commands. +%% For more information, see the Contributor's Guide. + + +\version "2.14.0" + +% define lilypond-module as a variable in the guile-user module and set +% to the current Scheme module (which will be the lilypond top-level +% module) + +#(module-define! (resolve-module '(guile-user)) + 'lilypond-module + (current-module)) +% +% Ensure we have command-line recall available at the guile prompt +% +#(use-modules (ice-9 readline)) +#(activate-readline) +#(display "\n Guile debugger for Lilypond") +#(display "\n For help enter (debug-help)\n") +% +% Ensure debugger definitions are available in lilypond-module and guile-user +% +#(use-modules (scm guile-debugger)) +#(ly:module-copy (resolve-module '(guile-user)) + (resolve-module '(scm guile-debugger))) +#(top-repl) +% +% top-repl has re-set the module to guile-user, +% so we need to set it back to lilypond-module +% +#(ly:module-copy (current-module) (resolve-module '(lilypond-module))) +#(set-current-module lilypond-module) diff --git a/ly/init.ly b/ly/init.ly index d1923659f9..c27d8c8409 100644 --- a/ly/init.ly +++ b/ly/init.ly @@ -4,7 +4,7 @@ #(if (and #t (defined? 'set-debug-cell-accesses!)) (set-debug-cell-accesses! 5000)) -\version "2.12.0" +\version "2.14.0" \include "declarations-init.ly" @@ -12,13 +12,21 @@ #(ly:set-option 'old-relative #f) #(define toplevel-scores (list)) #(define toplevel-bookparts (list)) -#(define output-count 0) #(define $defaultheader #f) +#(define $current-book #f) +#(define $current-bookpart #f) #(define version-seen #f) -#(define expect-error #f) +#(define expect-error #f) #(define output-empty-score-list #f) #(define output-suffix #f) +#(define book-filename #f) +#(define book-output-suffix #f) #(use-modules (scm clip-region)) + +#(if (ly:get-option 'include-settings) + (ly:parser-include-string parser + (format "\\include \"~a\"" (ly:get-option 'include-settings)))) + \maininput %% there is a problem at the end of the input file @@ -54,8 +62,10 @@ (set! toplevel-scores (list)) (book-handler parser book))) ((or (pair? toplevel-scores) output-empty-score-list) - (book-handler parser (apply ly:make-book $defaultpaper - $defaultheader toplevel-scores))))) + (let ((book (apply ly:make-book $defaultpaper + $defaultheader toplevel-scores))) + (set! toplevel-scores (list)) + (book-handler parser book))))) #(if (eq? expect-error (ly:parser-has-error? parser)) (ly:parser-clear-error parser) diff --git a/ly/italiano.ly b/ly/italiano.ly index c22292b827..2040be404c 100644 --- a/ly/italiano.ly +++ b/ly/italiano.ly @@ -1,91 +1,23 @@ -%{ - Common italian names for notes. "b" means flat (bemolle), "d" means sharp (diesis) and "s" means semi- (semi-). - Adapted from dutch.ly. - - English: a b c d e f g - Italian: la si do re mi fa sol - - For french naming just change 'do' in 'ut'. -%} - -% contributed by Paolo Zuliani <> -% additions for semi-sharps and semi-flats by Eric Wurbel <> - -pitchnamesItaliano = #`( - (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (dobsb . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) - (dob . ,(ly:make-pitch -1 0 FLAT)) - (dosb . ,(ly:make-pitch -1 0 SEMI-FLAT)) - (do . ,(ly:make-pitch -1 0 NATURAL)) - (dosd . ,(ly:make-pitch -1 0 SEMI-SHARP)) - (dod . ,(ly:make-pitch -1 0 SHARP)) - (dodsd . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) - (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - - (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (rebsb . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) - (reb . ,(ly:make-pitch -1 1 FLAT)) - (resb . ,(ly:make-pitch -1 1 SEMI-FLAT)) - (re . ,(ly:make-pitch -1 1 NATURAL)) - (resd . ,(ly:make-pitch -1 1 SEMI-SHARP)) - (red . ,(ly:make-pitch -1 1 SHARP)) - (redsd . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) - (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - - (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (mibsb . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) - (mib . ,(ly:make-pitch -1 2 FLAT)) - (misb . ,(ly:make-pitch -1 2 SEMI-FLAT)) - (mi . ,(ly:make-pitch -1 2 NATURAL)) - (misd . ,(ly:make-pitch -1 2 SEMI-SHARP)) - (mid . ,(ly:make-pitch -1 2 SHARP)) - (midsd . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) - (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - - (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fabsb . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) - (fab . ,(ly:make-pitch -1 3 FLAT)) - (fasb . ,(ly:make-pitch -1 3 SEMI-FLAT)) - (fa . ,(ly:make-pitch -1 3 NATURAL)) - (fasd . ,(ly:make-pitch -1 3 SEMI-SHARP)) - (fad . ,(ly:make-pitch -1 3 SHARP)) - (fadsd . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) - (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - - (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (solbsb . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) - (solb . ,(ly:make-pitch -1 4 FLAT)) - (solsb . ,(ly:make-pitch -1 4 SEMI-FLAT)) - (sol . ,(ly:make-pitch -1 4 NATURAL)) - (solsd . ,(ly:make-pitch -1 4 SEMI-SHARP)) - (sold . ,(ly:make-pitch -1 4 SHARP)) - (soldsd . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) - (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - - (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (labsb . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) - (lab . ,(ly:make-pitch -1 5 FLAT)) - (lasb . ,(ly:make-pitch -1 5 SEMI-FLAT)) - (la . ,(ly:make-pitch -1 5 NATURAL)) - (lasd . ,(ly:make-pitch -1 5 SEMI-SHARP)) - (lad . ,(ly:make-pitch -1 5 SHARP)) - (ladsd . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) - (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - - (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (sibsb . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) - (sib . ,(ly:make-pitch -1 6 FLAT)) - (sisb . ,(ly:make-pitch -1 6 SEMI-FLAT)) - (si . ,(ly:make-pitch -1 6 NATURAL)) - (sisd . ,(ly:make-pitch -1 6 SEMI-SHARP)) - (sid . ,(ly:make-pitch -1 6 SHARP)) - (sidsd . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) - (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) - -) - -pitchnames = \pitchnamesItaliano - -\version "2.12.0" - -#(ly:parser-set-note-names parser pitchnames) +%%%% common Italian names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "italiano" diff --git a/ly/lilypond-book-preamble.ly b/ly/lilypond-book-preamble.ly index e6e72503eb..fe210ca89f 100644 --- a/ly/lilypond-book-preamble.ly +++ b/ly/lilypond-book-preamble.ly @@ -1,5 +1,5 @@ -\version "2.12.0" +\version "2.14.0" %% toplevel \book gets output per page, %% everything else gets output per system/title diff --git a/ly/makam.ly b/ly/makam.ly index c7f793d267..37b66298bd 100644 --- a/ly/makam.ly +++ b/ly/makam.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" %{ diff --git a/ly/markup-init.ly b/ly/markup-init.ly deleted file mode 100644 index 5749c7bb8f..0000000000 --- a/ly/markup-init.ly +++ /dev/null @@ -1,120 +0,0 @@ -%% -*- Mode: Scheme -*- - -\version "2.12.0" - -%%;; to be define later, in a closure -#(define-public toplevel-module-define-public! #f) -#(define-public toplevel-module-ref #f) -#(let ((toplevel-module (current-module))) - (set! toplevel-module-define-public! - (lambda (symbol value) - (module-define! toplevel-module symbol value) - (module-export! toplevel-module (list symbol)))) - (set! toplevel-module-ref - (lambda (symbol) - (module-ref toplevel-module symbol)))) - -#(defmacro-public define-public-toplevel - (first-arg . rest) - "Define a public variable or function in the toplevel module: - (define-public-toplevel variable-name value) -or: - (define-public-toplevel (function-name . args) - ..body..)" - (if (symbol? first-arg) - ;; (define-public-toplevel symbol value) - (let ((symbol first-arg) - (value (car rest))) - `(toplevel-module-define-public! ',symbol ,value)) - ;; (define-public-toplevel (function-name . args) . body) - (let ((function-name (car first-arg)) - (arg-list (cdr first-arg)) - (body rest)) - `(toplevel-module-define-public! - ',function-name - (let ((proc (lambda ,arg-list - ,@body))) - (set-procedure-property! proc - 'name - ',function-name) - proc))))) - -#(defmacro-public define-markup-command (command-and-args signature . body) - " -* Define a COMMAND-markup function after command-and-args and body, -register COMMAND-markup and its signature, - -* add COMMAND-markup to markup-function-list, - -* sets COMMAND-markup markup-signature and markup-keyword object properties, - -* define a make-COMMAND-markup function. - -Syntax: - (define-markup-command (COMMAND layout props arg1 arg2 ...) - (arg1-type? arg2-type? ...) - \"documentation string\" - ...command body...) -or: - (define-markup-command COMMAND (arg1-type? arg2-type? ...) function) -" - (let* ((command (if (pair? command-and-args) - (car command-and-args) - command-and-args)) - (command-name (string->symbol (format #f "~a-markup" command))) - (make-markup-name (string->symbol (format #f "make-~a-markup" command)))) - `(begin - ;; define the COMMAND-markup procedure in toplevel module - ,(if (pair? command-and-args) - ;; 1/ (define (COMMAND-markup layout props arg1 arg2 ...) - ;; ..command body)) - `(define-public-toplevel (,command-name ,@(cdr command-and-args)) - ,@body) - ;; 2/ (define (COMMAND-markup . args) (apply function args)) - (let ((args (gensym "args")) - (command (car body))) - `(define-public-toplevel (,command-name . ,args) - (apply ,command ,args)))) - (let ((command-proc (toplevel-module-ref ',command-name))) - ;; register its command signature - (set! (markup-command-signature command-proc) - (list ,@signature)) - ;; define the make-COMMAND-markup procedure in the toplevel module - (define-public-toplevel (,make-markup-name . args) - (make-markup command-proc - ,(symbol->string make-markup-name) - (list ,@signature) - args)))))) - -#(defmacro-public define-markup-list-command (command-and-args signature . body) - "Same as `define-markup-command', but defines a command that, when interpreted, -returns a list of stencils, instead of a single one." - (let* ((command (if (pair? command-and-args) - (car command-and-args) - command-and-args)) - (command-name (string->symbol (format #f "~a-markup-list" command))) - (make-markup-name (string->symbol (format #f "make-~a-markup-list" command)))) - `(begin - ;; define the COMMAND-markup-list procedure in toplevel module - ,(if (pair? command-and-args) - ;; 1/ (define (COMMAND-markup-list layout props arg1 arg2 ...) - ;; ..command body)) - `(define-public-toplevel (,command-name ,@(cdr command-and-args)) - ,@body) - ;; 2/ (define (COMMAND-markup-list . args) (apply function args)) - (let ((args (gensym "args")) - (command (car body))) - `(define-public-toplevel (,command-name . ,args) - (apply ,command ,args)))) - (let ((command-proc (toplevel-module-ref ',command-name))) - ;; register its command signature - (set! (markup-command-signature command-proc) - (list ,@signature)) - ;; it's a markup-list command: - (set-object-property! command-proc 'markup-list-command #t) - ;; define the make-COMMAND-markup-list procedure in the toplevel module - (define-public-toplevel (,make-markup-name . args) - (list (make-markup command-proc - ,(symbol->string make-markup-name) - (list ,@signature) - args))))))) diff --git a/ly/midi-init.ly b/ly/midi-init.ly index 3ba3651f06..0dcaa2ce38 100644 --- a/ly/midi-init.ly +++ b/ly/midi-init.ly @@ -1,4 +1,22 @@ -\version "2.12.0" +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 1996--2011 Han-Wen Nienhuys +%%%% Jan Nieuwenhuizen +%%%% +%%%% 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 . + +\version "2.14.0" \midi { \include "performer-init.ly" } diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index c8b0a84b18..a83b252428 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -1,20 +1,49 @@ -% -*-Scheme-*- - -\version "2.12.0" +%%%% -*- Mode: Scheme -*- + +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2003--2011 Han-Wen Nienhuys +%%%% Jan Nieuwenhuizen +%%%% +%%%% 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 . + +\version "2.14.0" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% this file is alphabetically sorted. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% need SRFI-1 filter +%% need SRFI-1 for filter; optargs for lambda* +#(use-modules (srfi srfi-1) + (ice-9 optargs)) -#(use-modules (srfi srfi-1)) +%% TODO: using define-music-function in a .scm causes crash. acciaccatura = #(def-grace-function startAcciaccaturaMusic stopAcciaccaturaMusic (_i "Create an acciaccatura from the following music expression")) +%% keep these two together +"instrument-definitions" = #'() +addInstrumentDefinition = +#(define-music-function + (parser location name lst) (string? list?) + (_i "Create instrument @var{name} with properties @var{list}.") + (set! instrument-definitions (acons name lst instrument-definitions)) + (make-music 'SequentialMusic 'void #t)) + addQuote = #(define-music-function (parser location name music) (string? ly:music?) (_i "Define @var{music} as a quotable music expression named @@ -22,169 +51,297 @@ addQuote = (add-quotable parser name music) (make-music 'SequentialMusic 'void #t)) -afterGraceFraction = -#(cons 6 8) - +%% keep these two together +afterGraceFraction = #(cons 6 8) afterGrace = -#(define-music-function - (parser location main grace) - (ly:music? ly:music?) - (_i "Create @var{grace} note(s) after a @var{main} music expression.") - (let* - ((main-length (ly:music-length main)) - (fraction (ly:parser-lookup parser 'afterGraceFraction))) - - (make-simultaneous-music - (list - main - (make-sequential-music - (list - - (make-music 'SkipMusic - 'duration (ly:make-duration - 0 0 - (* (ly:moment-main-numerator main-length) - (car fraction)) - (* (ly:moment-main-denominator main-length) - (cdr fraction)) )) - (make-music 'GraceMusic - 'element grace))))))) +#(define-music-function (parser location main grace) (ly:music? ly:music?) + (_i "Create @var{grace} note(s) after a @var{main} music expression.") + (let ((main-length (ly:music-length main)) + (fraction (ly:parser-lookup parser 'afterGraceFraction))) + (make-simultaneous-music + (list + main + (make-sequential-music + (list + + (make-music 'SkipMusic + 'duration (ly:make-duration + 0 0 + (* (ly:moment-main-numerator main-length) + (car fraction)) + (* (ly:moment-main-denominator main-length) + (cdr fraction)))) + (make-music 'GraceMusic + 'element grace))))))) + + +%% music identifiers not allowed at top-level, +%% so this is a music-function instead. +allowPageTurn = +#(define-music-function (location parser) () + (_i "Allow a page turn. May be used at toplevel (ie between scores or +markups), or inside a score.") + (make-music 'EventChord + 'page-marker #t + 'page-turn-permission 'allow + 'elements (list (make-music 'PageTurnEvent + 'break-permission 'allow)))) + +applyContext = +#(define-music-function (parser location proc) (procedure?) + (_i "Modify context properties with Scheme procedure @var{proc}.") + (make-music 'ApplyContext + 'procedure proc)) applyMusic = #(define-music-function (parser location func music) (procedure? ly:music?) (_i"Apply procedure @var{func} to @var{music}.") - (func music)) - + (func music)) applyOutput = #(define-music-function (parser location ctx proc) (symbol? procedure?) - (_i "Apply function @code{proc} to every layout object in context @code{ctx}") - (make-music 'ApplyOutputEvent - 'origin location - 'procedure proc - 'context-type ctx)) + (_i "Apply function @code{proc} to every layout object in context @code{ctx}") + (make-music 'ApplyOutputEvent + 'procedure proc + 'context-type ctx)) appoggiatura = #(def-grace-function startAppoggiaturaMusic stopAppoggiaturaMusic - (_i "Create an appoggiatura from @var{music}")) - + (_i "Create an appoggiatura from @var{music}")) % for regression testing purposes. assertBeamQuant = #(define-music-function (parser location l r) (pair? pair?) - (_i "Testing function: check whether the beam quants @var{l} and @var{r} are correct") - (make-grob-property-override 'Beam 'positions - (ly:make-simple-closure - (ly:make-simple-closure - (append - (list chain-grob-member-functions `(,cons 0 0)) - (check-quant-callbacks l r)))))) + (_i "Testing function: check whether the beam quants @var{l} and @var{r} are correct") + (make-grob-property-override 'Beam 'positions + (ly:make-simple-closure + (ly:make-simple-closure + (append + (list chain-grob-member-functions `(,cons 0 0)) + (check-quant-callbacks l r)))))) % for regression testing purposes. assertBeamSlope = #(define-music-function (parser location comp) (procedure?) - (_i "Testing function: check whether the slope of the beam is the same as @code{comp}") - (make-grob-property-override 'Beam 'positions - (ly:make-simple-closure - (ly:make-simple-closure - (append - (list chain-grob-member-functions `(,cons 0 0)) - (check-slope-callbacks comp)))))) - - + (_i "Testing function: check whether the slope of the beam is the same as @code{comp}") + (make-grob-property-override 'Beam 'positions + (ly:make-simple-closure + (ly:make-simple-closure + (append + (list chain-grob-member-functions `(,cons 0 0)) + (check-slope-callbacks comp)))))) autochange = #(define-music-function (parser location music) (ly:music?) - (_i "Make voices that switch between staves automatically") - (make-autochange-music parser music)) + (_i "Make voices that switch between staves automatically") + (make-autochange-music parser music)) -applyContext = -#(define-music-function (parser location proc) (procedure?) - (_i "Modify context properties with Scheme procedure @var{proc}.") - (make-music 'ApplyContext - 'origin location - 'procedure proc)) balloonGrobText = #(define-music-function (parser location grob-name offset text) - (symbol? number-pair? markup?) - (_i "Attach @var{text} to @var{grob-name} at offset @var{offset} -(use like @code{\\once})") - (make-music 'AnnotateOutputEvent - 'symbol grob-name - 'X-offset (car offset) - 'Y-offset (cdr offset) - 'text text)) + (symbol? number-pair? markup?) + (_i "Attach @var{text} to @var{grob-name} at offset @var{offset} + (use like @code{\\once})") + (make-music 'AnnotateOutputEvent + 'symbol grob-name + 'X-offset (car offset) + 'Y-offset (cdr offset) + 'text text)) balloonText = #(define-music-function (parser location offset text) (number-pair? markup?) - (_i "Attach @var{text} at @var{offset} (use like @code{\\tweak})") - (make-music 'AnnotateOutputEvent - 'X-offset (car offset) - 'Y-offset (cdr offset) - 'text text)) - + (_i "Attach @var{text} at @var{offset} (use like @code{\\tweak})") + (make-music 'AnnotateOutputEvent + 'X-offset (car offset) + 'Y-offset (cdr offset) + 'text text)) bar = #(define-music-function (parser location type) (string?) - (_i "Insert a bar line of type @var{type}") + (_i "Insert a bar line of type @var{type}") (context-spec-music (make-property-set 'whichBar type) 'Timing)) - barNumberCheck = #(define-music-function (parser location n) (integer?) - (_i "Print a warning if the current bar number is not @var{n}.") + (_i "Print a warning if the current bar number is not @var{n}.") (make-music 'ApplyContext - 'origin location 'procedure (lambda (c) - (let* - ((cbn (ly:context-property c 'currentBarNumber))) + (let ((cbn (ly:context-property c 'currentBarNumber))) (if (and (number? cbn) (not (= cbn n))) - (ly:input-message location "Barcheck failed got ~a expect ~a" + (ly:input-message location + "Barcheck failed got ~a expect ~a" cbn n)))))) - bendAfter = #(define-music-function (parser location delta) (real?) - (_i "Create a fall or doit of pitch interval @var{delta}.") - (make-music 'BendAfterEvent - 'delta-step delta)) + (_i "Create a fall or doit of pitch interval @var{delta}.") + (make-music 'BendAfterEvent + 'delta-step delta)) + +bookOutputName = +#(define-music-function (parser location newfilename) (string?) + (_i "Direct output for the current book block to @var{newfilename}.") + (set! book-filename newfilename) + (make-music 'SequentialMusic 'void #t)) + +bookOutputSuffix = +#(define-music-function (parser location newsuffix) (string?) + (_i "Set the output filename suffix for the current book block to +@var{newsuffix}.") + (set! book-output-suffix newsuffix) + (make-music 'SequentialMusic 'void #t)) -%% why a function? +%% \breathe is defined as a music function rather than an event identifier to +%% ensure it gets useful input location information: as an event identifier, +%% it would have to be wrapped in an EventChord to prevent it from being +%% treated as a post_event by the parser breathe = #(define-music-function (parser location) () - (_i "Insert a breath mark.") - (make-music 'EventChord - 'origin location - 'elements (list (make-music 'BreathingEvent)))) - + (_i "Insert a breath mark.") + (make-music 'BreathingEvent)) + +%% Make slide indication for chords +chordGlissando = +#(define-music-function (parser location mus1 mus2) (ly:music? ly:music?) + "Make a glissando between the notes of triads @code{mus1} and @code{mus2}." + + (define (add-glissando musChord) + (let ((els (ly:music-property musChord 'elements))) + (ly:music-set-property! musChord 'elements (append els (list (make-music 'GlissandoEvent)))) + musChord)) + + (define (get-notes musicChord) + (filter (lambda(x) (eq? (ly:music-property x 'name) 'NoteEvent)) + (ly:music-property musicChord 'elements))) + + (define (select-note musChord index) + (let* ((notes (get-notes musChord)) + (non-notes (filter (lambda (x) + (not (eq? (ly:music-property x 'name) + 'NoteEvent))) + (ly:music-property musChord 'elements))) + (selected-note (list-ref notes index)) + (new-els (cons selected-note non-notes)) + (new-mus (ly:music-deep-copy musChord))) + (ly:music-set-property! new-mus 'elements new-els) + new-mus)) + + (define (add-glissando-line mus1 mus2 index) + (context-spec-music + (context-spec-music + (make-sequential-music + (list + hideNotes + (make-grob-property-set 'StringNumber 'transparent #t) + (make-grob-property-set 'NoteColumn 'ignore-collision #t) + ;; obviously, this isn't equivalent to \once, + ;; so could be changed if required + (make-grob-property-set 'Glissando 'thickness 2) + (make-grob-property-set 'DynamicText 'transparent #t) + (make-grob-property-set 'DynamicLineSpanner 'transparent #t) + (make-grob-property-set 'DynamicTextSpanner 'transparent #t) + (make-grob-property-set 'TextScript 'stencil #f) + (add-glissando (select-note mus1 index)) + (select-note mus2 index))) + 'Bottom (symbol->string (gensym))) + 'Staff)) + + (let* ((notes1 (get-notes mus1)) + (notes2 (get-notes mus2)) + (note-count (min (length notes1) (length notes2)))) + + #{ + \once \override Glissando #'minimum-length = #4 + \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods + << + { + $(add-glissando mus1) + $mus2 + } + $(make-simultaneous-music + (map (lambda (x) + (add-glissando-line mus1 mus2 x)) + (iota note-count))) + >> + \revert NoteColumn #'ignore-collision + #})) clef = #(define-music-function (parser location type) (string?) - (_i "Set the current clef to @var{type}.") + (_i "Set the current clef to @var{type}.") (make-clef-set type)) +compoundMeter = +#(define-music-function (parser location args) (pair?) + (_i "Create compound time signatures. The argument is a Scheme list of +lists. Each list describes one fraction, with the last entry being the +denominator, while the first entries describe the summands in the +enumerator. If the time signature consists of just one fraction, +the list can be given directly, i.e. not as a list containing a single list. +For example, a time signature of (3+1)/8 + 2/4 would be created as +@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8 +as @code{\\compoundMeter #'((3 2 8))} or shorter +@code{\\compoundMeter #'(3 2 8)}.") + (let* ((mlen (calculate-compound-measure-length args)) + (beat (calculate-compound-base-beat args)) + (beatGrouping (calculate-compound-beat-grouping args)) + (timesig (cons (ly:moment-main-numerator mlen) + (ly:moment-main-denominator mlen)))) + #{ + \once \override Staff.TimeSignature #'stencil = #(lambda (grob) + (grob-interpret-markup grob (format-compound-time $args))) + \set Timing.timeSignatureFraction = $timesig + \set Timing.baseMoment = $beat + \set Timing.beatStructure = $beatGrouping + \set Timing.beamExceptions = #'() + \set Timing.measureLength = $mlen + #} )) + + +cueClef = +#(define-music-function (parser location type) (string?) + (_i "Set the current cue clef to @var{type}.") + (make-cue-clef-set type)) +cueClefUnset = +#(define-music-function (parser location) () + (_i "Unset the current cue clef.") + (make-cue-clef-unset)) + cueDuring = #(define-music-function - (parser location what dir main-music) (string? ly:dir? ly:music?) - (_i "Insert contents of quote @var{what} corresponding to @var{main-music}, + (parser location what dir main-music) (string? ly:dir? ly:music?) + (_i "Insert contents of quote @var{what} corresponding to @var{main-music}, +in a CueVoice oriented by @var{dir}.") + (make-music 'QuoteMusic + 'element main-music + 'quoted-context-type 'Voice + 'quoted-context-id "cue" + 'quoted-music-name what + 'quoted-voice-direction dir)) + +cueDuringWithClef = +#(define-music-function + (parser location what dir clef main-music) (string? ly:dir? string? ly:music?) + (_i "Insert contents of quote @var{what} corresponding to @var{main-music}, in a CueVoice oriented by @var{dir}.") - (make-music 'QuoteMusic - 'element main-music - 'quoted-context-type 'Voice - 'quoted-context-id "cue" - 'quoted-music-name what - 'quoted-voice-direction dir - 'origin location)) + (make-music 'QuoteMusic + 'element main-music + 'quoted-context-type 'Voice + 'quoted-context-id "cue" + 'quoted-music-name what + 'quoted-music-clef clef + 'quoted-voice-direction dir)) + + displayLilyMusic = #(define-music-function (parser location music) (ly:music?) - (_i "Display the LilyPond input representation of @var{music} + (_i "Display the LilyPond input representation of @var{music} to the console.") (newline) (display-lily-music music parser) @@ -192,44 +349,46 @@ to the console.") displayMusic = #(define-music-function (parser location music) (ly:music?) - (_i "Display the internal representation of @var{music} to the console.") + (_i "Display the internal representation of @var{music} to the console.") (newline) (display-scheme-music music) music) + endSpanners = #(define-music-function (parser location music) (ly:music?) - (_i "Terminate the next spanner prematurely after exactly one note without the need of a specific end spanner.") + (_i "Terminate the next spanner prematurely after exactly one note +without the need of a specific end spanner.") (if (eq? (ly:music-property music 'name) 'EventChord) - (let* - ((elts (ly:music-property music 'elements)) - (start-span-evs (filter (lambda (ev) - (and (music-has-type ev 'span-event) - (equal? (ly:music-property ev 'span-direction) - START))) - elts)) - (stop-span-evs - (map (lambda (m) - (let* ((c (music-clone m))) - (set! (ly:music-property c 'span-direction) STOP) - c)) - start-span-evs)) - (end-ev-chord (make-music 'EventChord - 'elements stop-span-evs)) - (total (make-music 'SequentialMusic - 'elements (list music - end-ev-chord)))) + (let* ((elts (ly:music-property music 'elements)) + (start-span-evs (filter (lambda (ev) + (and (music-has-type ev 'span-event) + (equal? (ly:music-property ev 'span-direction) + START))) + elts)) + (stop-span-evs + (map (lambda (m) + (let ((c (music-clone m))) + (set! (ly:music-property c 'span-direction) STOP) + c)) + start-span-evs)) + (end-ev-chord (make-music 'EventChord + 'elements stop-span-evs)) + (total (make-music 'SequentialMusic + 'elements (list music + end-ev-chord)))) total) (ly:input-message location (_ "argument endSpanners is not an EventChord: ~a" music)))) + + featherDurations= #(define-music-function (parser location factor argument) (ly:moment? ly:music?) - (_i "Adjust durations of music in @var{argument} by rational @var{factor}. ") - (let* - ((orig-duration (ly:music-length argument)) - (multiplier (ly:make-moment 1 1))) + (_i "Adjust durations of music in @var{argument} by rational @var{factor}.") + (let ((orig-duration (ly:music-length argument)) + (multiplier (ly:make-moment 1 1))) (music-map (lambda (mus) @@ -237,8 +396,7 @@ featherDurations= (< 0 (ly:moment-main-denominator (ly:music-length mus)))) (begin (ly:music-compress mus multiplier) - (set! multiplier (ly:moment-mul factor multiplier))) - ) + (set! multiplier (ly:moment-mul factor multiplier)))) mus) argument) @@ -248,33 +406,71 @@ featherDurations= argument)) +footnoteGrob = +#(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})") + (make-music 'FootnoteEvent + 'symbol grob-name + 'X-offset (car offset) + 'Y-offset (cdr offset) + 'text text + 'footnote-text 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})") + (make-music 'FootnoteEvent + 'X-offset (car offset) + 'Y-offset (cdr offset) + 'text text + 'footnote-text footnote)) + grace = #(def-grace-function startGraceMusic stopGraceMusic (_i "Insert @var{music} as grace notes.")) -"instrument-definitions" = #'() - -addInstrumentDefinition = -#(define-music-function - (parser location name lst) (string? list?) - (_i "Create instrument @var{name} with properties @var{list}.") - (set! instrument-definitions (acons name lst instrument-definitions)) - - (make-music 'SequentialMusic 'void #t)) - +harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?) + (let* ((fret (number->string fret)) + (pitch (fret->pitch fret))) + (make-sequential-music + (list + #{ + \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label $fret) + #} + (make-harmonic + (calc-harmonic-pitch pitch music)) + #{ + \revert TabNoteHead #'stencil + #})))) + +harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?) + (let ((pitch (ratio->pitch ratio)) + (fret (ratio->fret ratio))) + (make-sequential-music + (list + #{ + \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label $fret) + #} + (make-harmonic + (calc-harmonic-pitch pitch music)) + #{ + \revert TabNoteHead #'stencil + #})))) instrumentSwitch = #(define-music-function (parser location name) (string?) (_i "Switch instrument to @var{name}, which must be predefined with @code{\\addInstrumentDefinition}.") - (let* - ((handle (assoc name instrument-definitions)) - (instrument-def (if handle (cdr handle) '())) - ) + (let* ((handle (assoc name instrument-definitions)) + (instrument-def (if handle (cdr handle) '()))) (if (not handle) - (ly:input-message "No such instrument: ~a" name)) + (ly:input-message location "No such instrument: ~a" name)) (context-spec-music (make-music 'SimultaneousMusic 'elements @@ -286,79 +482,150 @@ instrumentSwitch = 'Staff))) -%% Parser used to read page-layout file, and then retreive score tweaks. -#(define page-layout-parser #f) - -includePageLayoutFile = -#(define-music-function (parser location) () - (_i "Include the file @var{-page-layout.ly}. Deprecated as -part of two-pass spacing.") - (if (not (ly:get-option 'dump-tweaks)) - (let ((tweak-filename (format #f "~a-page-layout.ly" - (ly:parser-output-name parser)))) - (if (access? tweak-filename R_OK) - (begin - (ly:message "Including tweak file ~a" tweak-filename) - (set! page-layout-parser (ly:parser-clone parser)) - (ly:parser-parse-string page-layout-parser - (format #f "\\include \"~a\"" - tweak-filename)))))) - (make-music 'SequentialMusic 'void #t)) keepWithTag = -#(define-music-function - (parser location tag music) (symbol? ly:music?) - (_i "Include only elements of @var{music} that are tagged with @var{tag}.") - (music-filter - (lambda (m) - (let* ((tags (ly:music-property m 'tags)) - (res (memq tag tags))) - (or - (eq? tags '()) - res))) - music)) - -removeWithTag = -#(define-music-function - (parser location tag music) (symbol? ly:music?) - (_i "Remove elements of @var{music} that are tagged with @var{tag}.") - (music-filter - (lambda (m) - (let* ((tags (ly:music-property m 'tags)) - (res (memq tag tags))) - (not res))) - music)) +#(define-music-function (parser location tag music) (symbol? ly:music?) + (_i "Include only elements of @var{music} that are tagged with @var{tag}.") + (music-filter + (lambda (m) + (let* ((tags (ly:music-property m 'tags)) + (res (memq tag tags))) + (or + (eq? tags '()) + res))) + music)) killCues = -#(define-music-function - (parser location music) - (ly:music?) +#(define-music-function (parser location music) (ly:music?) (_i "Remove cue notes from @var{music}.") (music-map (lambda (mus) - (if (string? (ly:music-property mus 'quoted-music-name)) + (if (and (string? (ly:music-property mus 'quoted-music-name)) + (string=? (ly:music-property mus 'quoted-context-id "") "cue")) (ly:music-property mus 'element) - mus)) music)) + mus)) + music)) + + label = #(define-music-function (parser location label) (symbol?) - (_i "Create @var{label} as a bookmarking label") + (_i "Create @var{label} as a bookmarking label.") (make-music 'EventChord 'page-marker #t 'page-label label 'elements (list (make-music 'LabelEvent 'page-label label)))) + +language = +#(define-music-function (parser location language) (string?) + (_i "Set note names for language @var{language}.") + (note-names-language parser language) + (make-music 'Music 'void #t)) + +languageSaveAndChange = +#(define-music-function (parser location language) (string?) + (_i "Store the previous pitchnames alist, and set a new one.") + (set! previous-pitchnames pitchnames) + (note-names-language parser language) + (make-music 'Music 'void #t)) + +languageRestore = +#(define-music-function (parser location) () + (_i "Restore a previously-saved pitchnames alist.") + (if previous-pitchnames + (begin + (set! pitchnames previous-pitchnames) + (ly:parser-set-note-names parser pitchnames)) + (ly:warning (_ "No other language was defined previously. Ignoring."))) + (make-music 'Music 'void #t)) + + makeClusters = +#(define-music-function (parser location arg) (ly:music?) + (_i "Display chords in @var{arg} as clusters.") + (music-map note-to-cluster arg)) + +modalInversion = +#(define-music-function (parser location around to scale music) + (ly:music? ly:music? ly:music? ly:music?) + (_i "Invert @var{music} about @var{around} using @var{scale} and +transpose from @var{around} to @var{to}.") + (let ((inverter (make-modal-inverter around to scale))) + (change-pitches music inverter) + music)) + +modalTranspose = +#(define-music-function (parser location from to scale music) + (ly:music? ly:music? ly:music? ly:music?) + (_i "Transpose @var{music} from pitch @var{from} to pitch @var{to} +using @var{scale}.") + (let ((transposer (make-modal-transposer from to scale))) + (change-pitches music transposer) + music)) + +inversion = #(define-music-function - (parser location arg) (ly:music?) - (_i "Display chords in @var{arg} as clusters") - (music-map note-to-cluster arg)) + (parser location around to music) (ly:music? ly:music? ly:music?) + (_i "Invert @var{music} about @var{around} and +transpose from @var{around} to @var{to}.") + (music-invert around to music)) musicMap = #(define-music-function (parser location proc mus) (procedure? ly:music?) - (music-map proc mus)) + (_i "Apply @var{proc} to @var{mus} and all of the music it contains.") + (music-map proc mus)) + +%% noPageBreak and noPageTurn are music functions (not music indentifiers), +%% because music identifiers are not allowed at top-level. +noPageBreak = +#(define-music-function (location parser) () + (_i "Forbid a page break. May be used at toplevel (i.e., between scores or +markups), or inside a score.") + (make-music 'EventChord + 'page-marker #t + 'page-break-permission 'forbid + 'elements (list (make-music 'PageBreakEvent + 'break-permission '())))) + +noPageTurn = +#(define-music-function (location parser) () + (_i "Forbid a page turn. May be used at toplevel (i.e., between scores or +markups), or inside a score.") + (make-music 'EventChord + 'page-marker #t + 'page-turn-permission 'forbid + 'elements (list (make-music 'PageTurnEvent + 'break-permission '())))) + + + +octaveCheck = +#(define-music-function (parser location pitch-note) (ly:music?) + (_i "Octave check.") + (make-music 'RelativeOctaveCheck + 'pitch (pitch-of-note pitch-note))) + +ottava = +#(define-music-function (parser location octave) (integer?) + (_i "Set the octavation.") + (make-music 'OttavaMusic + 'ottava-number octave)) + +overrideTimeSignatureSettings = +#(define-music-function + (parser location time-signature base-moment beat-structure beam-exceptions) + (pair? pair? cheap-list? cheap-list?) + + (_i "Override @code{timeSignatureSettings} +for time signatures of @var{time-signature} to have settings +of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.") + ;; TODO -- add warning if largest value of grouping is + ;; greater than time-signature. + (let ((setting (make-setting base-moment beat-structure beam-exceptions))) + (override-time-signature-setting time-signature setting))) overrideProperty = #(define-music-function (parser location name property value) @@ -366,12 +633,11 @@ overrideProperty = (_i "Set @var{property} to @var{value} in all grobs named @var{name}. The @var{name} argument is a string of the form @code{\"Context.GrobName\"} -or @code{\"GrobName\"}") +or @code{\"GrobName\"}.") - (let* - ((name-components (string-split name #\.)) - (context-name 'Bottom) - (grob-name #f)) + (let ((name-components (string-split name #\.)) + (context-name 'Bottom) + (grob-name #f)) (if (> 2 (length name-components)) (set! grob-name (string->symbol (car name-components))) @@ -380,7 +646,6 @@ or @code{\"GrobName\"}") (set! context-name (string->symbol (list-ref name-components 0))))) (make-music 'ApplyOutputEvent - 'origin location 'context-type context-name 'procedure (lambda (grob orig-context context) @@ -389,11 +654,13 @@ or @code{\"GrobName\"}") grob-name) (set! (ly:grob-property grob property) value)))))) -%% These are music functions (iso music indentifiers), because music identifiers -%% are not allowed at top-level. + + +%% pageBreak and pageTurn are music functions (iso music indentifiers), +%% because music identifiers are not allowed at top-level. pageBreak = #(define-music-function (location parser) () - (_i "Force a page break. May be used at toplevel (ie between scores or + (_i "Force a page break. May be used at toplevel (i.e., between scores or markups), or inside a score.") (make-music 'EventChord 'page-marker #t @@ -404,16 +671,6 @@ markups), or inside a score.") (make-music 'PageBreakEvent 'break-permission 'force)))) -noPageBreak = -#(define-music-function (location parser) () - (_i "Forbid a page break. May be used at toplevel (ie between scores or -markups), or inside a score.") - (make-music 'EventChord - 'page-marker #t - 'page-break-permission 'forbid - 'elements (list (make-music 'PageBreakEvent - 'break-permission '())))) - pageTurn = #(define-music-function (location parser) () (_i "Force a page turn between two scores or top-level markups.") @@ -429,88 +686,9 @@ pageTurn = (make-music 'PageTurnEvent 'break-permission 'force)))) -noPageTurn = -#(define-music-function (location parser) () - (_i "Forbid a page turn. May be used at toplevel (ie between scores or -markups), or inside a score.") - (make-music 'EventChord - 'page-marker #t - 'page-turn-permission 'forbid - 'elements (list (make-music 'PageTurnEvent - 'break-permission '())))) - -allowPageTurn = -#(define-music-function (location parser) () - (_i "Allow a page turn. May be used at toplevel (ie between scores or -markups), or inside a score.") - (make-music 'EventChord - 'page-marker #t - 'page-turn-permission 'allow - 'elements (list (make-music 'PageTurnEvent - 'break-permission 'allow)))) - -%% Todo: -%% doing -%% define-music-function in a .scm causes crash. - -octaveCheck = -#(define-music-function (parser location pitch-note) (ly:music?) - (_i "octave check") - - (make-music 'RelativeOctaveCheck - 'origin location - 'pitch (pitch-of-note pitch-note) - )) - -ottava = #(define-music-function (parser location octave) (number?) - (_i "set the octavation ") - (make-ottava-set octave)) - -partcombine = -#(define-music-function (parser location part1 part2) (ly:music? ly:music?) - (make-part-combine-music parser - (list part1 part2))) - - -pitchedTrill = -#(define-music-function - (parser location main-note secondary-note) - (ly:music? ly:music?) - (let* - ((get-notes (lambda (ev-chord) - (filter - (lambda (m) (eq? 'NoteEvent (ly:music-property m 'name))) - (ly:music-property ev-chord 'elements)))) - (sec-note-events (get-notes secondary-note)) - (trill-events (filter (lambda (m) (music-has-type m 'trill-span-event)) - (ly:music-property main-note 'elements)))) - - (if (pair? sec-note-events) - (begin - (let* - ((trill-pitch (ly:music-property (car sec-note-events) 'pitch)) - (forced (ly:music-property (car sec-note-events ) 'force-accidental))) - - (if (ly:pitch? trill-pitch) - (for-each (lambda (m) (ly:music-set-property! m 'pitch trill-pitch)) - trill-events) - (begin - (ly:warning (_ "Second argument of \\pitchedTrill should be single note: ")) - (display sec-note-events))) - - (if (eq? forced #t) - (for-each (lambda (m) (ly:music-set-property! m 'force-accidental forced)) - trill-events))))) - main-note)) - - - -%% for lambda* -#(use-modules (ice-9 optargs)) - parallelMusic = #(define-music-function (parser location voice-ids music) (list? ly:music?) - (_i "Define parallel music sequences, separated by '|' (bar check signs), + (_i "Define parallel music sequences, separated by '|' (bar check signs), and assign them to the identifiers provided in @var{voice-ids}. @var{voice-ids}: a list of music identifiers (symbols containing only letters) @@ -530,134 +708,226 @@ Example: C = { e e | f f | } @end verbatim ") - (let* ((voices (apply circular-list (make-list (length voice-ids) (list)))) - (current-voices voices) - (current-sequence (list))) - ;; - ;; utilities - (define (push-music m) - "Push the music expression into the current sequence" - (set! current-sequence (cons m current-sequence))) - (define (change-voice) - "Stores the previously built sequence into the current voice and + (let* ((voices (apply circular-list (make-list (length voice-ids) (list)))) + (current-voices voices) + (current-sequence (list))) + ;; + ;; utilities + (define (push-music m) + "Push the music expression into the current sequence" + (set! current-sequence (cons m current-sequence))) + (define (change-voice) + "Stores the previously built sequence into the current voice and change to the following voice." - (list-set! current-voices 0 (cons (make-music 'SequentialMusic - 'elements (reverse! current-sequence)) - (car current-voices))) - (set! current-sequence (list)) - (set! current-voices (cdr current-voices))) - (define (bar-check? m) - "Checks whether m is a bar check." - (eq? (ly:music-property m 'name) 'BarCheck)) - (define (music-origin music) - "Recursively search an origin location stored in music." - (cond ((null? music) #f) - ((not (null? (ly:music-property music 'origin))) - (ly:music-property music 'origin)) - (else (or (music-origin (ly:music-property music 'element)) - (let ((origins (remove not (map music-origin - (ly:music-property music 'elements))))) - (and (not (null? origins)) (car origins))))))) - ;; - ;; first, split the music and fill in voices - (map-in-order (lambda (m) - (push-music m) - (if (bar-check? m) (change-voice))) - (ly:music-property music 'elements)) - (if (not (null? current-sequence)) (change-voice)) - ;; un-circularize `voices' and reorder the voices - (set! voices (map-in-order (lambda (dummy seqs) - (reverse! seqs)) - voice-ids voices)) - ;; - ;; set origin location of each sequence in each voice - ;; for better type error tracking - (for-each (lambda (voice) - (for-each (lambda (seq) - (set! (ly:music-property seq 'origin) - (or (music-origin seq) location))) - voice)) - voices) - ;; - ;; check sequence length - (apply for-each (lambda* (#:rest seqs) - (let ((moment-reference (ly:music-length (car seqs)))) - (for-each (lambda (seq moment) - (if (not (equal? moment moment-reference)) - (ly:music-message seq - "Bars in parallel music don't have the same length"))) - seqs (map-in-order ly:music-length seqs)))) - voices) - ;; - ;; bind voice identifiers to the voices - (map (lambda (voice-id voice) - (ly:parser-define! parser voice-id - (make-music 'SequentialMusic - 'origin location - 'elements voice))) - voice-ids voices)) - ;; Return an empty sequence. this function is actually a "void" function. - (make-music 'SequentialMusic 'void #t)) - - + (list-set! current-voices 0 (cons (make-music 'SequentialMusic + 'elements (reverse! current-sequence)) + (car current-voices))) + (set! current-sequence (list)) + (set! current-voices (cdr current-voices))) + (define (bar-check? m) + "Checks whether m is a bar check." + (eq? (ly:music-property m 'name) 'BarCheck)) + (define (music-origin music) + "Recursively search an origin location stored in music." + (cond ((null? music) #f) + ((not (null? (ly:music-property music 'origin))) + (ly:music-property music 'origin)) + (else (or (music-origin (ly:music-property music 'element)) + (let ((origins (remove not (map music-origin + (ly:music-property music 'elements))))) + (and (not (null? origins)) (car origins))))))) + ;; + ;; first, split the music and fill in voices + (map-in-order (lambda (m) + (push-music m) + (if (bar-check? m) (change-voice))) + (ly:music-property music 'elements)) + (if (not (null? current-sequence)) (change-voice)) + ;; un-circularize `voices' and reorder the voices + (set! voices (map-in-order (lambda (dummy seqs) + (reverse! seqs)) + voice-ids voices)) + ;; + ;; set origin location of each sequence in each voice + ;; for better type error tracking + (for-each (lambda (voice) + (for-each (lambda (seq) + (set! (ly:music-property seq 'origin) + (or (music-origin seq) location))) + voice)) + voices) + ;; + ;; check sequence length + (apply for-each (lambda* (#:rest seqs) + (let ((moment-reference (ly:music-length (car seqs)))) + (for-each (lambda (seq moment) + (if (not (equal? moment moment-reference)) + (ly:music-message seq + "Bars in parallel music don't have the same length"))) + seqs (map-in-order ly:music-length seqs)))) + voices) + ;; + ;; bind voice identifiers to the voices + (map (lambda (voice-id voice) + (ly:parser-define! parser voice-id + (make-music 'SequentialMusic + 'origin location + 'elements voice))) + voice-ids voices)) + ;; Return an empty sequence. This function is actually a "void" function. + (make-music 'SequentialMusic 'void #t)) parenthesize = #(define-music-function (parser loc arg) (ly:music?) (_i "Tag @var{arg} to be parenthesized.") (if (memq 'event-chord (ly:music-property arg 'types)) - ; arg is an EventChord -> set the parenthesize property on all child notes and rests - (map - (lambda (ev) - (if (or (memq 'note-event (ly:music-property ev 'types)) - (memq 'rest-event (ly:music-property ev 'types))) - (set! (ly:music-property ev 'parenthesize) #t))) - (ly:music-property arg 'elements)) - ; No chord, simply set property for this expression: - (set! (ly:music-property arg 'parenthesize) #t)) + ;; arg is an EventChord -> set the parenthesize property + ;; on all child notes and rests + (map + (lambda (ev) + (if (or (memq 'note-event (ly:music-property ev 'types)) + (memq 'rest-event (ly:music-property ev 'types))) + (set! (ly:music-property ev 'parenthesize) #t))) + (ly:music-property arg 'elements)) + ;; No chord, simply set property for this expression: + (set! (ly:music-property arg 'parenthesize) #t)) arg) +partcombine = +#(define-music-function (parser location part1 part2) (ly:music? ly:music?) + (_i "Take the music in @var{part1} and @var{part2} and typeset so +that they share a staff.") + (make-part-combine-music parser + (list part1 part2))) + +partcombineForce = +#(define-music-function (location parser type once) (symbol-or-boolean? boolean?) + (_i "Override the part-combiner.") + (make-music 'EventChord + 'elements (list (make-music 'PartCombineForceEvent + 'forced-type type + 'once once)))) +partcombineApart = \partcombineForce #'apart ##f +partcombineApartOnce = \partcombineForce #'apart ##t +partcombineChords = \partcombineForce #'chords ##f +partcombineChordsOnce = \partcombineForce #'chords ##t +partcombineUnisono = \partcombineForce #'unisono ##f +partcombineUnisonoOnce = \partcombineForce #'unisono ##t +partcombineSoloI = \partcombineForce #'solo1 ##f +partcombineSoloIOnce = \partcombineForce #'solo1 ##t +partcombineSoloII = \partcombineForce #'solo2 ##f +partcombineSoloIIOnce = \partcombineForce #'solo2 ##t +partcombineAutomatic = \partcombineForce ##f ##f +partcombineAutomaticOnce = \partcombineForce ##f ##t + -quoteDuring = # -(define-music-function - (parser location what main-music) - (string? ly:music?) - (make-music 'QuoteMusic - 'element main-music - 'quoted-music-name what - 'origin location)) +pitchedTrill = +#(define-music-function + (parser location main-note secondary-note) + (ly:music? ly:music?) + (_i "Print a trill with @var{main-note} as the main note of the trill and +print @var{secondary-note} as a stemless note head in parentheses.") + (let* ((get-notes (lambda (ev-chord) + (filter + (lambda (m) (eq? 'NoteEvent (ly:music-property m 'name))) + (ly:music-property ev-chord 'elements)))) + (sec-note-events (get-notes secondary-note)) + (trill-events (filter (lambda (m) (music-has-type m 'trill-span-event)) + (ly:music-property main-note 'elements)))) + (if (pair? sec-note-events) + (begin + (let* ((trill-pitch (ly:music-property (car sec-note-events) 'pitch)) + (forced (ly:music-property (car sec-note-events) 'force-accidental))) + + (if (ly:pitch? trill-pitch) + (for-each (lambda (m) + (ly:music-set-property! m 'pitch trill-pitch)) trill-events) + (begin + (ly:warning (_ "Second argument of \\pitchedTrill should be single note: ")) + (display sec-note-events))) + + (if (eq? forced #t) + (for-each (lambda (m) + (ly:music-set-property! m 'force-accidental forced)) + trill-events))))) + main-note)) +quoteDuring = +#(define-music-function (parser location what main-music) (string? ly:music?) + (_i "Indicate a section of music to be quoted. @var{what} indicates the name +of the quoted voice, as specified in an @code{\\addQuote} command. +@var{main-music} is used to indicate the length of music to be quoted; +usually contains spacers or multi-measure rests.") + (make-music 'QuoteMusic + 'element main-music + 'quoted-music-name what)) -resetRelativeOctave = -#(define-music-function - (parser location reference-note) +removeWithTag = +#(define-music-function (parser location tag music) (symbol? ly:music?) + (_i "Remove elements of @var{music} that are tagged with @var{tag}.") + (music-filter + (lambda (m) + (let* ((tags (ly:music-property m 'tags)) + (res (memq tag tags))) + (not res))) + music)) + +resetRelativeOctave = +#(define-music-function (parser location reference-note) (ly:music?) + (_i "Set the octave inside a \\relative section.") + + (let* ((notes (ly:music-property reference-note 'elements)) + (pitch (ly:music-property (car notes) 'pitch))) + + (set! (ly:music-property reference-note 'elements) '()) + (set! (ly:music-property reference-note 'to-relative-callback) + (lambda (music last-pitch) + pitch)) + + reference-note)) + +retrograde = +#(define-music-function (parser location music) (ly:music?) - (_i "Set the octave inside a \\relative section.") + (_i "Return @var{music} in reverse order.") + (retrograde-music music)) - (let* - ((notes (ly:music-property reference-note 'elements)) - (pitch (ly:music-property (car notes) 'pitch))) +revertTimeSignatureSettings = +#(define-music-function + (parser location time-signature) + (pair?) - (set! (ly:music-property reference-note 'elements) '()) - (set! (ly:music-property reference-note - 'to-relative-callback) - (lambda (music last-pitch) - pitch)) + (_i "Revert @code{timeSignatureSettings} +for time signatures of @var{time-signature}.") + (revert-time-signature-setting time-signature)) + +rightHandFinger = +#(define-music-function (parser location finger) (number-or-string?) + (_i "Apply @var{finger} as a fingering indication.") + + (apply make-music + (append + (list + 'StrokeFingerEvent + 'origin location) + (if (string? finger) + (list 'text finger) + (list 'digit finger))))) - reference-note)) scaleDurations = -#(define-music-function (parser location fraction music) (number-pair? ly:music?) +#(define-music-function (parser location fraction music) + (number-pair? ly:music?) (_i "Multiply the duration of events in @var{music} by @var{fraction}.") (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction)))) - - shiftDurations = -#(define-music-function (parser location dur dots arg) (integer? integer? ly:music?) +#(define-music-function (parser location dur dots arg) + (integer? integer? ly:music?) (_i "Scale @var{arg} up by a factor of @var{2^dur*(2-(1/2)^dots)}.") (music-map @@ -669,41 +939,28 @@ spacingTweaks = (_i "Set the system stretch, by reading the 'system-stretch property of the `parameters' assoc list.") #{ - \overrideProperty #"Score.NonMusicalPaperColumn" - #'line-break-system-details - #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters))) - (cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters)))) + \overrideProperty #"Score.NonMusicalPaperColumn" + #'line-break-system-details + #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters))) + (cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters)))) #}) +styledNoteHeads = +#(define-music-function (parser location style heads music) + (symbol? list-or-symbol? ly:music?) + (_i "Set @var{heads} in @var{music} to @var{style}.") + (style-note-heads heads style music)) -rightHandFinger = -#(define-music-function (parser location finger) (number-or-string?) - (_i "Apply @var{finger} as a fingering indication.") - (apply make-music - (append - (list - 'StrokeFingerEvent - 'origin location) - (if (string? finger) - (list 'text finger) - (list 'digit finger))))) - -scoreTweak = -#(define-music-function (parser location name) (string?) - (_i "Include the score tweak, if exists.") - (if (and page-layout-parser (not (ly:get-option 'dump-tweaks))) - (let ((tweak-music (ly:parser-lookup page-layout-parser - (string->symbol name)))) - (if (ly:music? tweak-music) - tweak-music - (make-music 'SequentialMusic))) - (make-music 'SequentialMusic))) +tabChordRepetition = +#(define-music-function (parser location) () + (_i "Include the string information in a chord repetition.") + (ly:parser-set-repetition-function parser tab-repeat-chord) + (make-music 'SequentialMusic 'void #t)) tag = -#(define-music-function (parser location tag arg) - (symbol? ly:music?) +#(define-music-function (parser location tag arg) (symbol? ly:music?) (_i "Add @var{tag} to the @code{tags} property of @var{arg}.") @@ -713,29 +970,24 @@ tag = (ly:music-property arg 'tags))) arg) - - transposedCueDuring = #(define-music-function - (parser location what dir pitch-note main-music) - (string? ly:dir? ly:music? ly:music?) + (parser location what dir pitch-note main-music) + (string? ly:dir? ly:music? ly:music?) - (_i "Insert notes from the part @var{what} into a voice called @code{cue}, + (_i "Insert notes from the part @var{what} into a voice called @code{cue}, using the transposition defined by @var{pitch-note}. This happens -simultaneously with @var{main-music}, which is usually a rest. The +simultaneously with @var{main-music}, which is usually a rest. The argument @var{dir} determines whether the cue notes should be notated as a first or second voice.") - (make-music 'QuoteMusic - 'element main-music - 'quoted-context-type 'Voice - 'quoted-context-id "cue" - 'quoted-music-name what - 'quoted-voice-direction dir - 'quoted-transposition (pitch-of-note pitch-note) - 'origin location)) - - + (make-music 'QuoteMusic + 'element main-music + 'quoted-context-type 'Voice + 'quoted-context-id "cue" + 'quoted-music-name what + 'quoted-voice-direction dir + 'quoted-transposition (pitch-of-note pitch-note))) transposition = #(define-music-function (parser location pitch-note) (ly:music?) @@ -744,7 +996,7 @@ transposition = (context-spec-music (make-property-set 'instrumentTransposition (ly:pitch-negate (pitch-of-note pitch-note))) - 'Staff)) + 'Staff)) tweak = #(define-music-function (parser location sym val arg) @@ -765,12 +1017,16 @@ tweak = unfoldRepeats = #(define-music-function (parser location music) (ly:music?) - (unfold-repeats music)) + (_i "Force any @code{\\repeat volta}, @code{\\repeat tremolo} or +@code{\\repeat percent} commands in @var{music} to be interpreted +as @code{\\repeat unfold}.") + (unfold-repeats music)) withMusicProperty = -#(define-music-function (parser location sym val music) (symbol? scheme? ly:music?) +#(define-music-function (parser location sym val music) + (symbol? scheme? ly:music?) (_i "Set @var{sym} to @var{val} in @var{music}.") (set! (ly:music-property music sym) val) diff --git a/ly/nederlands.ly b/ly/nederlands.ly index 9a1eaab774..5cfe32f90a 100644 --- a/ly/nederlands.ly +++ b/ly/nederlands.ly @@ -1,88 +1,23 @@ -\version "2.12.0" -%{ - common dutch names for notes. es means flat, is means sharp - -notenames should only contain letters. No digits or punctuation. - -%} - -dutchPitchnames = #`( - (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - - (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT)) - (ces . ,(ly:make-pitch -1 0 FLAT)) - (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) - (c . ,(ly:make-pitch -1 0 NATURAL)) - (cis . ,(ly:make-pitch -1 0 SHARP)) - (cih . ,(ly:make-pitch -1 0 SEMI-SHARP)) - (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) - (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - - (deh . ,(ly:make-pitch -1 1 SEMI-FLAT)) - (des . ,(ly:make-pitch -1 1 FLAT)) - (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) - (d . ,(ly:make-pitch -1 1 NATURAL)) - (dis . ,(ly:make-pitch -1 1 SHARP)) - (dih . ,(ly:make-pitch -1 1 SEMI-SHARP)) - (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) - (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - - (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT)) - (ees . ,(ly:make-pitch -1 2 FLAT)) - (eeseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) - (es . ,(ly:make-pitch -1 2 FLAT)) - (e . ,(ly:make-pitch -1 2 NATURAL)) - (eis . ,(ly:make-pitch -1 2 SHARP)) - (eih . ,(ly:make-pitch -1 2 SEMI-SHARP)) - (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) - (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - - (feh . ,(ly:make-pitch -1 3 SEMI-FLAT)) - (fes . ,(ly:make-pitch -1 3 FLAT)) - (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) - (f . ,(ly:make-pitch -1 3 NATURAL)) - (fis . ,(ly:make-pitch -1 3 SHARP)) - (fih . ,(ly:make-pitch -1 3 SEMI-SHARP)) - (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) - (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - - (geh . ,(ly:make-pitch -1 4 SEMI-FLAT)) - (ges . ,(ly:make-pitch -1 4 FLAT)) - (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (gis . ,(ly:make-pitch -1 4 SHARP)) - (gih . ,(ly:make-pitch -1 4 SEMI-SHARP)) - (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) - (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - - (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT)) - (aes . ,(ly:make-pitch -1 5 FLAT)) - (aeseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) - (as . ,(ly:make-pitch -1 5 FLAT)) - (a . ,(ly:make-pitch -1 5 NATURAL)) - (ais . ,(ly:make-pitch -1 5 SHARP)) - (aih . ,(ly:make-pitch -1 5 SEMI-SHARP)) - (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) - (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (beses . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - - (beh . ,(ly:make-pitch -1 6 SEMI-FLAT)) - (bes . ,(ly:make-pitch -1 6 FLAT)) - (beseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) - (b . ,(ly:make-pitch -1 6 NATURAL)) - (bis . ,(ly:make-pitch -1 6 SHARP)) - (bih . ,(ly:make-pitch -1 6 SEMI-SHARP)) - (bisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) - (bisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) - ) - - -pitchnames = \dutchPitchnames -#(ly:parser-set-note-names parser pitchnames) +%%%% common Dutch names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 1996--2011 Han-Wen Nienhuys +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "nederlands" diff --git a/ly/norsk.ly b/ly/norsk.ly index 5b02889ab4..6ef11cfac8 100644 --- a/ly/norsk.ly +++ b/ly/norsk.ly @@ -1,110 +1,23 @@ - -% Idx norsk.ly,v 1.1 1998/03/25 11:38:28 arvidg Exp arvidg $ - -%{ - - Common norwegian names for notes, including versions without the - double s-es to save typing, as well as the traditional names with - them not to confuse musicians. "es" or "ess" means flat, "is" or - "iss" means sharp. - - Otherwise, the main difference from the dutch names is the that the - "b" is called "h" in norwegian, while the dutch "bes" is a norwegian - "b". - - Staying within the (proud?) naming convention for norwegian language - setup used in LaTeX, this file is called "norsk.ly" instead of - "norwegian.ly", even if all other languages' files use the english - name. - - This file is based on "dutch.ly". Basically, I copied "dutch.ly", - duplicated all lines containing at least one "is" or "es", changed - every other "is" into an "iss" and every other "es" into an "ess", - added "ass" et al, and made some b->h-related changes. There may be - bugs in here please tell me (or send patches) if you find any. - - Arvid Gr=F8tting <> - -%} - -pitchnamesNorsk = #`( - (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (ces . ,(ly:make-pitch -1 0 FLAT)) - (cess . ,(ly:make-pitch -1 0 FLAT)) - (c . ,(ly:make-pitch -1 0 NATURAL)) - (cis . ,(ly:make-pitch -1 0 SHARP)) - (ciss . ,(ly:make-pitch -1 0 SHARP)) - (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (des . ,(ly:make-pitch -1 1 FLAT)) - (dess . ,(ly:make-pitch -1 1 FLAT)) - (d . ,(ly:make-pitch -1 1 NATURAL)) - (dis . ,(ly:make-pitch -1 1 SHARP)) - (diss . ,(ly:make-pitch -1 1 SHARP)) - (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (eessess . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (ees . ,(ly:make-pitch -1 2 FLAT)) - (eess . ,(ly:make-pitch -1 2 FLAT)) - (es . ,(ly:make-pitch -1 2 FLAT)) - (ess . ,(ly:make-pitch -1 2 FLAT)) - (e . ,(ly:make-pitch -1 2 NATURAL)) - (eis . ,(ly:make-pitch -1 2 SHARP)) - (eiss . ,(ly:make-pitch -1 2 SHARP)) - (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fes . ,(ly:make-pitch -1 3 FLAT)) - (fess . ,(ly:make-pitch -1 3 FLAT)) - (f . ,(ly:make-pitch -1 3 NATURAL)) - (fis . ,(ly:make-pitch -1 3 SHARP)) - (fiss . ,(ly:make-pitch -1 3 SHARP)) - (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (ges . ,(ly:make-pitch -1 4 FLAT)) - (gess . ,(ly:make-pitch -1 4 FLAT)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (gis . ,(ly:make-pitch -1 4 SHARP)) - (giss . ,(ly:make-pitch -1 4 SHARP)) - (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (aessess . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (aes . ,(ly:make-pitch -1 5 FLAT)) - (aess . ,(ly:make-pitch -1 5 FLAT)) - (as . ,(ly:make-pitch -1 5 FLAT)) - (ass . ,(ly:make-pitch -1 5 FLAT)) - (a . ,(ly:make-pitch -1 5 NATURAL)) - (ais . ,(ly:make-pitch -1 5 SHARP)) - (aiss . ,(ly:make-pitch -1 5 SHARP)) - (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (bess . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (b . ,(ly:make-pitch -1 6 FLAT)) - (b . ,(ly:make-pitch -1 6 FLAT)) - (h . ,(ly:make-pitch -1 6 NATURAL)) - (his . ,(ly:make-pitch -1 6 SHARP)) - (hiss . ,(ly:make-pitch -1 6 SHARP)) - (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) - (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) - - -pitchnames =\pitchnamesNorsk - -\version "2.12.0" - -#(ly:parser-set-note-names parser pitchnames) +%%%% common Norwegian names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "norsk" diff --git a/ly/paper-defaults-init.ly b/ly/paper-defaults-init.ly index 9d2725ede0..145fe9a52e 100644 --- a/ly/paper-defaults-init.ly +++ b/ly/paper-defaults-init.ly @@ -1,127 +1,150 @@ -\version "2.12.0" -#(use-modules (scm layout-page-layout)) -\paper { +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2004--2011 Han-Wen Nienhuys +%%%% Jan Nieuwenhuizen +%%%% Neil Puttock +%%%% +%%%% 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 . + +\version "2.14.0" - %%% WARNING - %%% - %%% If you add any new dimensions, don't forget to update - %%% the dimension-variables variable. See paper.scm. - - unit = #(ly:unit) - mm = 1.0 - in = 25.4 - pt = #(/ in 72.27) - cm = #(* 10 mm) - - print-page-number = ##t - - %% - %% 20pt staff, 5 pt = 1.75 mm - %% - - output-scale = #1.7573 - - #(define-public book-title (marked-up-title 'bookTitleMarkup)) - #(define-public score-title (marked-up-title 'scoreTitleMarkup)) - #(define-public force-eps-font-include #f) - - %% - %% ugh. hard coded? - %% - - #(layout-set-absolute-staff-size (* 20.0 pt)) - - - #(define-public score-title-properties - '((is-title . #t) - (is-book-title . #f) - )) - #(define-public book-title-properties - '((is-title . #t) - (is-book-title . #t) - )) - - %% - %% this dimension includes the extent of the - %% staves themselves. - %% - between-system-space = #(* 20 mm) - - - %% - %% fixed space between systems. - %% - between-system-padding = #(* 4 mm) - - after-title-space = 5 \mm - before-title-space = 10 \mm - between-title-space = 2 \mm - - - %% - %% Small staves are aligned so they come out on the same place on - %% across different pages. - %% - page-top-space = #(* 12 mm) - - - ragged-bottom = ##f - - %% - %% looks best for shorter scores. - %% - ragged-last-bottom= ##t - - %% - %% settings for the page breaker - %% - blank-last-page-force = 0 - blank-after-score-page-force = 2 - blank-page-force = 5 - - %% - %% To limit space between systems on a page with a lot of space left - %% - page-limit-inter-system-space = ##f - page-limit-inter-system-space-factor = 1.4 - - #(define font-defaults - '((font-encoding . fetaMusic))) - - %% - %% the font encoding `latin1' is a dummy value for Pango fonts - %% - #(define text-font-defaults - `((font-encoding . latin1) - (baseline-skip . 3) - (word-space . 0.6))) - - #(define page-breaking ly:optimal-breaking) - #(define page-breaking-wrapper page-breaking-wrapper) - #(define page-post-process post-process-pages) - - #(define write-page-layout (ly:get-option 'dump-tweaks)) - #(define system-maximum-stretch-procedure - (lambda (line) - (if (stretchable-line? line) - (let ((height (line-height line))) - (/ (* height height) 80.0)) - 0.0))) - -% #(define page-music-height default-page-music-height ) -% #(define page-make-stencil default-page-make-stencil ) - - #(define make-header (marked-up-headfoot 'oddHeaderMarkup 'evenHeaderMarkup)) - #(define make-footer (marked-up-headfoot 'oddFooterMarkup 'evenFooterMarkup)) - #(set-paper-dimension-variables (current-module)) - - \include "titling-init.ly" - - top-margin = 5 \mm - bottom-margin = 6 \mm - head-separation = 4 \mm - foot-separation = 4 \mm - - first-page-number = #1 - print-first-page-number =##f - } +\paper { + #(set-paper-dimension-variables (current-module)) + + %%% WARNING + %%% + %%% If you add any new dimensions, don't forget to update + %%% the dimension-variables variable. See paper.scm. + + unit = #(ly:unit) + mm = 1.0 + in = 25.4 + pt = #(/ in 72.27) + cm = #(* 10 mm) + + % 20pt staff, 5 pt = 1.75 mm + output-scale = #1.7573 + + %% ugh. hard coded? + #(layout-set-absolute-staff-size (* 20.0 pt)) + + + %% Automatic scaling to paper size: + %% + %% Margins, indents, and offsets marked "scaled to paper size" + %% below apply to the default paper format given by + %% (ly:get-option 'paper-size) and are scaled accordingly for + %% other formats. + + + %% + %% Fixed vertical spacing + %% + top-margin-default = 5\mm % scaled to paper-size + bottom-margin-default = 6\mm % scaled to paper-size + ragged-bottom = ##f + ragged-last-bottom = ##t % best for shorter scores + + %% + %% Flexible vertical spacing + %% + %% Note: these are not scaled; they are in staff-spaces. + system-system-spacing = #'((basic-distance . 12) (minimum-distance . 8) (padding . 1) (stretchability . 60)) + score-system-spacing = #'((basic-distance . 14) (minimum-distance . 8) (padding . 1) (stretchability . 120)) + markup-system-spacing = #'((basic-distance . 5) (padding . 0.5) (stretchability . 30)) + score-markup-spacing = #'((basic-distance . 12) (padding . 0.5) (stretchability . 60)) + markup-markup-spacing = #'((basic-distance . 1) (padding . 0.5)) + top-system-spacing = #'((basic-distance . 1) (minimum-distance . 0) (padding . 1)) + top-markup-spacing = #'((basic-distance . 0) (minimum-distance . 0) (padding . 1)) + last-bottom-spacing = #'((basic-distance . 1) (minimum-distance . 0) (padding . 1) (stretchability . 30)) + + + %% + %% Widths and (horizontal) margins + %% + left-margin-default = 10\mm % scaled to paper-size + right-margin-default = 10\mm % scaled to paper-size + check-consistency = ##t + + + %% + %% Two-sided mode + %% + two-sided = ##f + inner-margin-default = 10\mm % scaled to paper-size + outer-margin-default = 20\mm % scaled to paper-size + binding-offset-default = 0\mm % scaled to paper-size + + + %% + %% Indents + %% + indent-default = 15\mm % scaled to paper-size + short-indent-default = 0\mm % scaled to paper-size + + + %% + %% Page breaking + %% + blank-after-score-page-force = 2 + blank-last-page-force = 0 + blank-page-force = 5 + page-breaking = #ly:optimal-breaking + + + %% + %% Footnotes + %% + footnote-separator-markup = \markup { \fill-line \override #`(span-factor . 1/2) { \draw-hline } } + footnote-padding = 0.5\mm + footnote-footer-padding = 0.5\mm + + %% + %% Page numbering + %% + first-page-number = #1 + print-first-page-number = ##f + print-page-number = ##t + + %% + %% Headers, footers, and titles + %% + #(define make-header (marked-up-headfoot 'oddHeaderMarkup 'evenHeaderMarkup)) + #(define make-footer (marked-up-headfoot 'oddFooterMarkup 'evenFooterMarkup)) + + #(define-public book-title (marked-up-title 'bookTitleMarkup)) + #(define-public score-title (marked-up-title 'scoreTitleMarkup)) + #(define-public score-title-properties + '((is-title . #t) + (is-book-title . #f))) + #(define-public book-title-properties + '((is-title . #t) + (is-book-title . #t))) + + \include "titling-init.ly" + + + %% + %% Fonts + %% + #(define font-defaults + '((font-family . feta) (font-encoding . fetaMusic))) + + % `latin1' is a dummy value for Pango fonts + #(define text-font-defaults + `((font-encoding . latin1) + (baseline-skip . 3) + (word-space . 0.6))) + +} diff --git a/ly/params-init.ly b/ly/params-init.ly deleted file mode 100644 index 2c0e87eae9..0000000000 --- a/ly/params-init.ly +++ /dev/null @@ -1,2 +0,0 @@ -\version "2.12.0" - diff --git a/ly/performer-init.ly b/ly/performer-init.ly index 3803396b20..e32f3ff143 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -1,41 +1,59 @@ -\version "2.12.0" +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 1996--2011 Han-Wen Nienhuys +%%%% Jan Nieuwenhuizen +%%%% +%%%% 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 . + +\version "2.14.0" %% -%% setup for Request->Element conversion. +%% setup for Request->Element conversion. %% \context { - \type "Performer_group" - \name Staff - \accepts Voice - \accepts CueVoice - \defaultchild Voice - - \consists "Staff_performer" - \consists "Key_performer" + \type "Performer_group" + \name Staff + \accepts Voice + \accepts CueVoice + \defaultchild Voice + + \consists "Staff_performer" + \consists "Key_performer" } \context { - \name Global - \accepts Score -\description "Hard coded entry point for LilyPond. Cannot be tuned." - } + \name Global + \accepts Score + \description "Hard coded entry point for LilyPond. Cannot be tuned." +} \context { - \Staff - \name DrumStaff - midiInstrument = #"drums" - \accepts DrumVoice - \defaultchild DrumVoice + \Staff + \name DrumStaff + midiInstrument = #"drums" + \accepts DrumVoice + \defaultchild DrumVoice } \context { - \type "Performer_group" - \name Voice - \consists "Dynamic_performer" - \consists "Tie_performer" - \consists "Piano_pedal_performer" - \consists "Note_performer" - \consists "Beam_performer" - \consists "Slur_performer" + \type "Performer_group" + \name Voice + \consists "Dynamic_performer" + \consists "Tie_performer" + \consists "Piano_pedal_performer" + \consists "Note_performer" + \consists "Beam_performer" + \consists "Slur_performer" } \context { @@ -51,150 +69,159 @@ } \context { - \Voice - \remove "Note_performer" - \consists "Drum_note_performer" - \name DrumVoice + \Voice + \remove "Note_performer" + \consists "Drum_note_performer" + \name DrumVoice } \context { - \type "Performer_group" - \name FiguredBass - \consists "Swallow_performer" + \type "Performer_group" + \name FiguredBass } \context { - \type "Performer_group" - \name GrandStaff - \accepts RhythmicStaff - \accepts Staff - \defaultchild Staff + \type "Performer_group" + \name FretBoards } \context { - \type "Performer_group" - \name "PianoStaff" - \accepts Staff - \accepts DrumStaff - \defaultchild Staff + \type "Performer_group" + \name GrandStaff + \accepts RhythmicStaff + \accepts Staff + \accepts Dynamics + \defaultchild Staff } \context { - \type "Performer_group" - \name "TabVoice" - \consists "Swallow_performer" + \type "Performer_group" + \name "PianoStaff" + \accepts Staff + \accepts DrumStaff + \defaultchild Staff } \context { - \type "Performer_group" - \name "Devnull" - \consists "Swallow_performer" + \Voice + \name TabVoice } + \context { - \type "Performer_group" - \name "TabStaff" - \accepts "TabVoice" - \defaultchild "TabVoice" + \type "Performer_group" + \name "Devnull" } \context { - \type "Performer_group" - \name "VaticanaStaff" - \alias "Staff" - \denies "Voice" - \accepts "VaticanaVoice" - \defaultchild "VaticanaVoice" + \Staff + \name TabStaff + midiInstrument = #"acoustic guitar (nylon)" + \alias Staff + \accepts TabVoice + \defaultchild TabVoice } \context { - \type "Score_performer" + \type "Performer_group" + \name "VaticanaStaff" + \alias "Staff" + \denies "Voice" + \accepts "VaticanaVoice" + \defaultchild "VaticanaVoice" +} + +\context { + \type "Score_performer" + + \name Score + + melismaBusyProperties = #default-melisma-properties + instrumentName = #"bright acoustic" + midiChannelMapping = #'staff + + %% quarter = 60 + tempoWholesPerMinute = #(ly:make-moment 15 1) - \name Score - - melismaBusyProperties = #default-melisma-properties - instrumentName = #"bright acoustic" + \accepts Staff + \accepts DrumStaff + \accepts GrandStaff + \accepts PianoStaff + \accepts TabStaff + \accepts StaffGroup + \accepts Devnull + \accepts ChoirStaff + \accepts RhythmicStaff + \accepts ChordNames + \accepts FiguredBass + \accepts FretBoards + \accepts Lyrics + \accepts VaticanaStaff - %% quarter = 60 - tempoWholesPerMinute = #(ly:make-moment 15 1) - - \accepts Staff - \accepts DrumStaff - \accepts GrandStaff - \accepts PianoStaff - \accepts TabStaff - \accepts Staff - \accepts StaffGroup - \accepts Devnull - \accepts ChoirStaff - \accepts RhythmicStaff - \accepts ChordNames - \accepts FiguredBass - \accepts Lyrics - \accepts VaticanaStaff + \consists "Time_signature_performer" + \consists "Control_track_performer" + \consists "Tempo_performer" + \consists "Timing_translator" - \consists "Time_signature_performer" - \consists "Control_track_performer" - \consists "Tempo_performer" - \consists "Timing_translator" - \consists "Swallow_performer" - - \defaultchild "Staff" - - dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume - instrumentEqualizer = #default-instrument-equalizer - drumPitchTable = #(alist->hash-table midiDrumPitches) - timing = ##t + \defaultchild "Staff" + + dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume + instrumentEqualizer = #default-instrument-equalizer + drumPitchTable = #(alist->hash-table midiDrumPitches) + timing = ##t } \context { - \type "Performer_group" - \consists "Staff_performer" % Performer_group ? - \consists "Lyric_performer" - \name Lyrics + \type "Performer_group" + \consists "Staff_performer" % Performer_group ? + \consists "Lyric_performer" + \name Lyrics } \context{ - \type "Performer_group" - \name ChoirStaff - \accepts Staff - \accepts DrumStaff - \defaultchild Staff - + \type "Performer_group" + \name ChoirStaff + \accepts Staff + \accepts DrumStaff + \defaultchild Staff } - - \context { - \type "Performer_group" - \consists "Staff_performer" - \accepts ChordNameVoice - \name ChordNames + \type "Performer_group" + \consists "Staff_performer" + \accepts ChordNameVoice + \name ChordNames } \context { - \type "Performer_group" - \consists "Note_performer" - \name ChordNameVoice + \type "Performer_group" + \consists "Note_performer" + \name ChordNameVoice } \context { - \type "Performer_group" - - \name StaffGroup - \accepts Staff - \accepts DrumStaff - \accepts TabStaff - \accepts RhythmicStaff - \accepts GrandStaff - \accepts PianoStaff - \accepts Lyrics - \accepts ChordNames - \accepts FiguredBass - - \defaultchild Staff + \type "Performer_group" + \name StaffGroup + \accepts Staff + \accepts DrumStaff + \accepts TabStaff + \accepts RhythmicStaff + \accepts GrandStaff + \accepts PianoStaff + \accepts Lyrics + \accepts ChordNames + \accepts FiguredBass + \accepts FretBoards + \defaultchild Staff } -\context { \Staff \name RhythmicStaff } - +\context { + \Staff + \name RhythmicStaff +} +\context { + \type "Performer_group" + \name Dynamics + \consists "Piano_pedal_performer" +} diff --git a/ly/portugues.ly b/ly/portugues.ly index 4810c85548..1c8de33e85 100644 --- a/ly/portugues.ly +++ b/ly/portugues.ly @@ -1,91 +1,23 @@ -%{ - - Common Portuguese names for notes. "b" means flat (bemol), "s" means - sharp (sustenido). Adapted from espanol.ly and italian.ly. - - English: a b c d e f g - Portuguese: la si do re mi fa sol - -%} - -% contributed by Pedro Kröger <> - - -pitchnamesPortuguese = #`( - (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (dobtqt . ,(ly:make-pitch -1 0 THREE-Q-FLAT)) - (dob . ,(ly:make-pitch -1 0 FLAT)) - (dobqt . ,(ly:make-pitch -1 0 SEMI-FLAT)) - (do . ,(ly:make-pitch -1 0 NATURAL)) - (dosqt . ,(ly:make-pitch -1 0 SEMI-SHARP)) - (dos . ,(ly:make-pitch -1 0 SHARP)) - (dostqt . ,(ly:make-pitch -1 0 THREE-Q-SHARP)) - (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - - (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (rebtqt . ,(ly:make-pitch -1 1 THREE-Q-FLAT)) - (reb . ,(ly:make-pitch -1 1 FLAT)) - (rebqt . ,(ly:make-pitch -1 1 SEMI-FLAT)) - (re . ,(ly:make-pitch -1 1 NATURAL)) - (resqt . ,(ly:make-pitch -1 1 SEMI-SHARP)) - (res . ,(ly:make-pitch -1 1 SHARP)) - (restqt . ,(ly:make-pitch -1 1 THREE-Q-SHARP)) - (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - - (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (mibtqt . ,(ly:make-pitch -1 2 THREE-Q-FLAT)) - (mib . ,(ly:make-pitch -1 2 FLAT)) - (mibqt . ,(ly:make-pitch -1 2 SEMI-FLAT)) - (mi . ,(ly:make-pitch -1 2 NATURAL)) - (misqt . ,(ly:make-pitch -1 2 SEMI-SHARP)) - (mis . ,(ly:make-pitch -1 2 SHARP)) - (mistqt . ,(ly:make-pitch -1 2 THREE-Q-SHARP)) - (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - - (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fabtqt . ,(ly:make-pitch -1 3 THREE-Q-FLAT)) - (fab . ,(ly:make-pitch -1 3 FLAT)) - (fabqt . ,(ly:make-pitch -1 3 SEMI-FLAT)) - (fa . ,(ly:make-pitch -1 3 NATURAL)) - (fasqt . ,(ly:make-pitch -1 3 SEMI-SHARP)) - (fas . ,(ly:make-pitch -1 3 SHARP)) - (fastqt . ,(ly:make-pitch -1 3 THREE-Q-SHARP)) - (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - - (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (solbtqt . ,(ly:make-pitch -1 4 THREE-Q-FLAT)) - (solb . ,(ly:make-pitch -1 4 FLAT)) - (solbqt . ,(ly:make-pitch -1 4 SEMI-FLAT)) - (sol . ,(ly:make-pitch -1 4 NATURAL)) - (solsqt . ,(ly:make-pitch -1 4 SEMI-SHARP)) - (sols . ,(ly:make-pitch -1 4 SHARP)) - (solstqt . ,(ly:make-pitch -1 4 THREE-Q-SHARP)) - (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - - (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (labtqt . ,(ly:make-pitch -1 5 THREE-Q-FLAT)) - (lab . ,(ly:make-pitch -1 5 FLAT)) - (labqt . ,(ly:make-pitch -1 5 SEMI-FLAT)) - (la . ,(ly:make-pitch -1 5 NATURAL)) - (lasqt . ,(ly:make-pitch -1 5 SEMI-SHARP)) - (las . ,(ly:make-pitch -1 5 SHARP)) - (lastqt . ,(ly:make-pitch -1 5 THREE-Q-SHARP)) - (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - - (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (sibtqt . ,(ly:make-pitch -1 6 THREE-Q-FLAT)) - (sib . ,(ly:make-pitch -1 6 FLAT)) - (sibqt . ,(ly:make-pitch -1 6 SEMI-FLAT)) - (si . ,(ly:make-pitch -1 6 NATURAL)) - (sisqt . ,(ly:make-pitch -1 6 SEMI-SHARP)) - (sis . ,(ly:make-pitch -1 6 SHARP)) - (sistqt . ,(ly:make-pitch -1 6 THREE-Q-SHARP)) - (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) - -) - -pitchnames = \pitchnamesPortuguese - -\version "2.12.0" - -#(ly:parser-set-note-names parser pitchnames) +%%%% common Portuguese names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "portugues" diff --git a/ly/predefined-fretboards-init.ly b/ly/predefined-fretboards-init.ly index d0f861a402..996470a161 100644 --- a/ly/predefined-fretboards-init.ly +++ b/ly/predefined-fretboards-init.ly @@ -1,10 +1,21 @@ -%%%% predefined-fretboard-init.ly +%%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% source file of the GNU LilyPond music typesetter +%%%% Copyright (C) 2008--2011 Carl D. Sorensen %%%% -%%%% (c) 2008--2009 Carl D. Sorensen +%%%% 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 . -\version "2.12.0" +\version "2.14.0" % chord-shape-table is a hash-table of chord shapes % in the form of diagram-descriptions that can be @@ -31,21 +42,38 @@ hash with the key @var{(cons key-symbol tuning)}.") #(define (chord-shape shape-code tuning) (get-chord-shape shape-code tuning chord-shape-table)) +% scheme function for copying/creating fretboard tables + +#(define (make-fretboard-table . rest) + "Create a new fretboard table. @code{rest} is an optional table name. +If present, the new fretboard table starts as a copy of the fretboard +table @code{rest}." + (if (null? rest) + (make-hash-table 101) + (let ((source-table (car rest))) + (hash-fold + (lambda (key value tab) + (hash-set! tab key value) + tab) + (make-hash-table 101) + source-table)))) + % music function for adding a predefined diagram to % fretboard-table storePredefinedDiagram = -#(define-music-function (parser location chord tuning diagram-definition) - (ly:music? pair? string-or-pair?) +#(define-music-function + (parser location fretboard-table chord tuning diagram-definition) + (hash-table? ly:music? pair? string-or-pair?) (_i "Add predefined fret diagram defined by @var{diagram-definition} for the chord pitches @var{chord} and the stringTuning @var{tuning}.") - (let* ((pitches (event-chord-pitches + (let* ((pitches (event-chord-pitches (car (extract-named-music chord 'EventChord)))) (hash-key (cons tuning pitches)) (verbose-definition (if (string? diagram-definition) (parse-terse-string diagram-definition) diagram-definition))) - (hash-set! fretboard-table - hash-key - verbose-definition)) - (make-music 'SequentialMusic 'void #t)) + (hash-set! fretboard-table + hash-key + verbose-definition) + (make-music 'SequentialMusic 'void #t))) diff --git a/ly/predefined-guitar-fretboards.ly b/ly/predefined-guitar-fretboards.ly index fdcc248d34..241b3cd56c 100644 --- a/ly/predefined-guitar-fretboards.ly +++ b/ly/predefined-guitar-fretboards.ly @@ -1,12 +1,28 @@ -%%%% predefined-guitar-fretboards.ly +%%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% source file of the GNU LilyPond music typesetter +%%%% Copyright (C) 2008--2011 Carl D. Sorensen %%%% -%%%% (c) 2008--2009 Carl D. Sorensen +%%%% 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 . + +% chord definitions require default pitchnames +\languageSaveAndChange #default-language + +\include "predefined-guitar-ninth-fretboards.ly" %%% Add basic chordshapes -\version "2.12.0" +\version "2.14.0" \addChordShape #'f #guitar-tuning #"1-1-(;3-3;3-4;2-2;1-1;1-1-);" \addChordShape #'f:m #guitar-tuning #"1-1-(;3-3;3-4;1-1;1-1;1-1-);" @@ -14,14 +30,15 @@ \addChordShape #'f:m7 #guitar-tuning #"1-1-(;3-3;1-1;1-1;1-1;1-1-);" \addChordShape #'bes #guitar-tuning #"x;1-1-(;3-2;3-3;3-4;1-1-);" \addChordShape #'bes:m #guitar-tuning #"x;1-1-(;3-3;3-4;2-2;1-1-);" +\addChordShape #'bes:dim #guitar-tuning #"x;1-1;2-2;3-4;2-3;x;" \addChordShape #'bes:m7 #guitar-tuning #"x;1-1-(;3-3;1-1;2-2;1-1-);" \addChordShape #'bes:7 #guitar-tuning #"x;1-1-(;3-2;1-1;3-3;1-1-);" \addChordShape #'bes:maj7 #guitar-tuning #"x;1-1;3-3;2-2;3-4;x;" -\addChordShape #'c:dim #guitar-tuning #"x;x;1-1;2-3;1-2;2-4;" +\addChordShape #'c:dim7 #guitar-tuning #"x;x;1-1;2-3;1-2;2-4;" \addChordShape #'c:aug #guitar-tuning #"x;x;2-2;1-1-(;1-1-);4-4;" \addChordShape #'cis #guitar-tuning #"x;x;3-3;1-1-(;2-2;1-1-);" -\addChordShape #'ees:dim #guitar-tuning #"x;x;1-1;2-3;1-2;2-4;" -\addChordShape #'a:dim #guitar-tuning #"x;x;1-1;2-3;1-2;2-4;" +\addChordShape #'d:dim #guitar-tuning #"x;x;3-3;1-1-(;3-4;1-1-);" +\addChordShape #'ees:dim7 #guitar-tuning #"x;x;1-1;2-3;1-2;2-4;" %%% Add predefined chords @@ -29,409 +46,461 @@ %%%% c chords % -\storePredefinedDiagram \chordmode {c} - #guitar-tuning - #"x;3-3;2-2;o;1-1;o;" -\storePredefinedDiagram \chordmode {c:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {c} + #guitar-tuning + #"x;3-3;2-2;o;1-1;o;" +\storePredefinedDiagram #default-fret-table \chordmode {c:m} + #guitar-tuning #(offset-fret 2 (chord-shape 'bes:m guitar-tuning)) -\storePredefinedDiagram \chordmode {c:aug} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {c:aug} + #guitar-tuning #(chord-shape 'c:aug guitar-tuning) -\storePredefinedDiagram \chordmode {c:dim} - #guitar-tuning - #(chord-shape 'c:dim guitar-tuning) -\storePredefinedDiagram \chordmode {c:7} - #guitar-tuning - #"o;3-3;2-2;3-4;1-1;o;" -\storePredefinedDiagram \chordmode {c:maj7} - #guitar-tuning - #"x;3-3;2-2;o;o;o;" -\storePredefinedDiagram \chordmode {c:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {c:dim} + #guitar-tuning + #(offset-fret 2 (chord-shape 'bes:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {c:dim7} + #guitar-tuning + #(chord-shape 'c:dim7 guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {c:7} + #guitar-tuning + #"o;3-3;2-2;3-4;1-1;o;" +\storePredefinedDiagram #default-fret-table \chordmode {c:maj7} + #guitar-tuning + #"x;3-3;2-2;o;o;o;" +\storePredefinedDiagram #default-fret-table \chordmode {c:m7} + #guitar-tuning #(offset-fret 2 (chord-shape 'bes:m7 guitar-tuning)) %%%% cis chords % -\storePredefinedDiagram \chordmode {cis} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {cis} + #guitar-tuning #(chord-shape 'cis guitar-tuning) -\storePredefinedDiagram \chordmode {cis:m} - #guitar-tuning - #"x;x;2-2;1-1;2-3;o;" -\storePredefinedDiagram \chordmode {cis:aug} - #guitar-tuning - #"x;4-4;3-3;2-1;2-2;x;" -\storePredefinedDiagram \chordmode {cis:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'c:dim guitar-tuning)) -\storePredefinedDiagram \chordmode {cis:7} - #guitar-tuning - #"x;x;3-2;4-3;2-1;4-4;" -\storePredefinedDiagram \chordmode {cis:maj7} - #guitar-tuning - #"x;4-4;3-3;1-1-(;1-1;1-1-);" -\storePredefinedDiagram \chordmode {cis:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {cis:m} + #guitar-tuning + #"x;x;2-2;1-1;2-3;o;" +\storePredefinedDiagram #default-fret-table \chordmode {cis:aug} + #guitar-tuning + #"x;4-4;3-3;2-1;2-2;x;" +\storePredefinedDiagram #default-fret-table \chordmode {cis:dim} + #guitar-tuning + #"x;x;2-3;o;2-4;o;" +\storePredefinedDiagram #default-fret-table \chordmode {cis:dim7} + #guitar-tuning + #(offset-fret 1 (chord-shape 'c:dim7 guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {cis:7} + #guitar-tuning + #"x;x;3-2;4-3;2-1;4-4;" +\storePredefinedDiagram #default-fret-table \chordmode {cis:maj7} + #guitar-tuning + #"x;4-4;3-3;1-1-(;1-1;1-1-);" +\storePredefinedDiagram #default-fret-table \chordmode {cis:m7} + #guitar-tuning #"x;4-4;2-2;1-1;o;o;" %%%% des chords % -\storePredefinedDiagram \chordmode {des} - #guitar-tuning - #"x;x;3-3;1-1-(;2-2;1-1-);" -\storePredefinedDiagram \chordmode {des:m} - #guitar-tuning - #"x;x;2-2;1-1;2-3;o;" -\storePredefinedDiagram \chordmode {des:aug} - #guitar-tuning - #"x;4-4;3-3;2-1;2-2;x;" -\storePredefinedDiagram \chordmode {des:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'c:dim guitar-tuning)) -\storePredefinedDiagram \chordmode {des:7} - #guitar-tuning - #"x;x;3-2;4-3;2-1;4-4;" -\storePredefinedDiagram \chordmode {des:maj7} - #guitar-tuning - #"x;4-4;3-3;1-1-(;1-1;1-1-);" -\storePredefinedDiagram \chordmode {des:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {des} + #guitar-tuning + #"x;x;3-3;1-1-(;2-2;1-1-);" +\storePredefinedDiagram #default-fret-table \chordmode {des:m} + #guitar-tuning + #"x;x;2-2;1-1;2-3;o;" +\storePredefinedDiagram #default-fret-table \chordmode {des:aug} + #guitar-tuning + #"x;4-4;3-3;2-1;2-2;x;" +\storePredefinedDiagram #default-fret-table \chordmode {des:dim} + #guitar-tuning + #"x;x;2-3;o;2-4;o;" +\storePredefinedDiagram #default-fret-table \chordmode {des:dim7} + #guitar-tuning + #(offset-fret 1 (chord-shape 'c:dim7 guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {des:7} + #guitar-tuning + #"x;x;3-2;4-3;2-1;4-4;" +\storePredefinedDiagram #default-fret-table \chordmode {des:maj7} + #guitar-tuning + #"x;4-4;3-3;1-1-(;1-1;1-1-);" +\storePredefinedDiagram #default-fret-table \chordmode {des:m7} + #guitar-tuning #"x;4-4;2-2;1-1;o;o;" %%%% d chords % -\storePredefinedDiagram \chordmode {d} - #guitar-tuning - #"x;x;o;2-1;3-3;2-2;" -\storePredefinedDiagram \chordmode {d:m} - #guitar-tuning - #"x;x;o;2-2;3-3;1-1;" -\storePredefinedDiagram \chordmode {d:aug} - #guitar-tuning - #"x;x;o;3-2;3-3;2-1;" -\storePredefinedDiagram \chordmode {d:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {d:7} - #guitar-tuning - #"x;x;o;2-2;1-1;2-3;" -\storePredefinedDiagram \chordmode {d:maj7} - #guitar-tuning - #"x;x;o;2-1;2-2;2-3;" -\storePredefinedDiagram \chordmode {d:m7} - #guitar-tuning - #"x;x;o;2-2;1-1-(;1-1-);" +\storePredefinedDiagram #default-fret-table \chordmode {d} + #guitar-tuning + #"x;x;o;2-1;3-3;2-2;" +\storePredefinedDiagram #default-fret-table \chordmode {d:m} + #guitar-tuning + #"x;x;o;2-2;3-3;1-1;" +\storePredefinedDiagram #default-fret-table \chordmode {d:aug} + #guitar-tuning + #"x;x;o;3-2;3-3;2-1;" +\storePredefinedDiagram #default-fret-table \chordmode {d:dim} + #guitar-tuning + #"x;x;o;1-1-(;3-3;1-1-);" +\storePredefinedDiagram #default-fret-table \chordmode {d:dim7} + #guitar-tuning + #"x;x;o;1-1;o;1-2;" +\storePredefinedDiagram #default-fret-table \chordmode {d:7} + #guitar-tuning + #"x;x;o;2-2;1-1;2-3;" +\storePredefinedDiagram #default-fret-table \chordmode {d:maj7} + #guitar-tuning + #"x;x;o;2-1;2-2;2-3;" +\storePredefinedDiagram #default-fret-table \chordmode {d:m7} + #guitar-tuning + #"x;x;o;2-2;1-1-(;1-1-);" %%%% dis chords % -\storePredefinedDiagram \chordmode {dis} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {dis} + #guitar-tuning #(offset-fret 2 (chord-shape 'cis guitar-tuning)) -\storePredefinedDiagram \chordmode {dis:m} - #guitar-tuning - #"x;x;4-3;3-2;4-4;1-1;" -\storePredefinedDiagram \chordmode {dis:aug} - #guitar-tuning - #"3-3;2-2;1-1;o;o;3-4" -\storePredefinedDiagram \chordmode {dis:dim} - #guitar-tuning - #(chord-shape 'ees:dim guitar-tuning) -\storePredefinedDiagram \chordmode {dis:7} - #guitar-tuning - #"x;x;1-1;3-3;2-2;3-4;" -\storePredefinedDiagram \chordmode {dis:maj7} - #guitar-tuning - #"x;x;1-1;3-2;3-3;3-4;" -\storePredefinedDiagram \chordmode {dis:m7} - #guitar-tuning - #"x;x;1-1;3-2;2-3;2-4;" +\storePredefinedDiagram #default-fret-table \chordmode {dis:m} + #guitar-tuning + #"x;x;4-3;3-2;4-4;1-1;" +\storePredefinedDiagram #default-fret-table \chordmode {dis:aug} + #guitar-tuning + #"3-3;2-2;1-1;o;o;3-4;" +\storePredefinedDiagram #default-fret-table \chordmode {dis:dim} + #guitar-tuning + #(offset-fret 1 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {dis:dim7} + #guitar-tuning + #(chord-shape 'ees:dim7 guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {dis:7} + #guitar-tuning + #"x;x;1-1;3-3;2-2;3-4;" +\storePredefinedDiagram #default-fret-table \chordmode {dis:maj7} + #guitar-tuning + #"x;x;1-1;3-2;3-3;3-4;" +\storePredefinedDiagram #default-fret-table \chordmode {dis:m7} + #guitar-tuning + #"x;x;1-1;3-2;2-3;2-4;" %%%% ees chords % -\storePredefinedDiagram \chordmode {ees} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ees} + #guitar-tuning #(offset-fret 2 (chord-shape 'cis guitar-tuning)) -\storePredefinedDiagram \chordmode {ees:m} - #guitar-tuning - #"x;x;4-3;3-2;4-4;1-1;" -\storePredefinedDiagram \chordmode {ees:aug} - #guitar-tuning - #"3-3;2-2;1-1;o;o;3-4" -\storePredefinedDiagram \chordmode {ees:dim} - #guitar-tuning - #(chord-shape 'ees:dim guitar-tuning) -\storePredefinedDiagram \chordmode {ees:7} - #guitar-tuning - #"x;x;1-1;3-3;2-2;3-4;" -\storePredefinedDiagram \chordmode {ees:maj7} - #guitar-tuning - #"x;x;1-1;3-2;3-3;3-4;" -\storePredefinedDiagram \chordmode {ees:m7} - #guitar-tuning - #"x;x;1-1;3-2;2-3;2-4;" +\storePredefinedDiagram #default-fret-table \chordmode {ees:m} + #guitar-tuning + #"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;" +\storePredefinedDiagram #default-fret-table \chordmode {ees:dim} + #guitar-tuning + #(offset-fret 1 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {ees:dim7} + #guitar-tuning + #(chord-shape 'ees:dim7 guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {ees:7} + #guitar-tuning + #"x;x;1-1;3-3;2-2;3-4;" +\storePredefinedDiagram #default-fret-table \chordmode {ees:maj7} + #guitar-tuning + #"x;x;1-1;3-2;3-3;3-4;" +\storePredefinedDiagram #default-fret-table \chordmode {ees:m7} + #guitar-tuning + #"x;x;1-1;3-2;2-3;2-4;" %%%% e chords % -\storePredefinedDiagram \chordmode {e} - #guitar-tuning - #"o;2-2;2-3;1-1;o;o;" -\storePredefinedDiagram \chordmode {e:m} - #guitar-tuning - #"o;2-2;2-3;o;o;o;" -\storePredefinedDiagram \chordmode {e:aug} - #guitar-tuning - #"o;3-3;2-2;1-1;x;x;" -\storePredefinedDiagram \chordmode {e:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'ees:dim guitar-tuning)) -\storePredefinedDiagram \chordmode {e:7} - #guitar-tuning - #"o;2-2;o;1-1;o;o;" -\storePredefinedDiagram \chordmode {e:maj7} - #guitar-tuning - #"o;2-3;1-1;1-2;o;x;" -\storePredefinedDiagram \chordmode {e:m7} - #guitar-tuning - #"o;2-2;o;o;o;o;" +\storePredefinedDiagram #default-fret-table \chordmode {e} + #guitar-tuning + #"o;2-2;2-3;1-1;o;o;" +\storePredefinedDiagram #default-fret-table \chordmode {e:m} + #guitar-tuning + #"o;2-2;2-3;o;o;o;" +\storePredefinedDiagram #default-fret-table \chordmode {e:aug} + #guitar-tuning + #"o;3-3;2-2;1-1;x;x;" +\storePredefinedDiagram #default-fret-table \chordmode {e:dim} + #guitar-tuning + #(offset-fret 2 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {e:dim7} + #guitar-tuning + #(offset-fret 1 (chord-shape 'ees:dim7 guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {e:7} + #guitar-tuning + #"o;2-2;o;1-1;o;o;" +\storePredefinedDiagram #default-fret-table \chordmode {e:maj7} + #guitar-tuning + #"o;2-3;1-1;1-2;o;x;" +\storePredefinedDiagram #default-fret-table \chordmode {e:m7} + #guitar-tuning + #"o;2-2;o;o;o;o;" %%%% f chords % -\storePredefinedDiagram \chordmode {f} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {f} + #guitar-tuning #(chord-shape 'f guitar-tuning) -\storePredefinedDiagram \chordmode {f:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {f:m} + #guitar-tuning #(chord-shape 'f:m guitar-tuning) -\storePredefinedDiagram \chordmode {f:aug} - #guitar-tuning - #"x;x;1-1;4-3;4-4;3-2;" -\storePredefinedDiagram \chordmode {f:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {f:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {f:aug} + #guitar-tuning + #"x;x;1-1;4-3;4-4;3-2;" +\storePredefinedDiagram #default-fret-table \chordmode {f:dim} + #guitar-tuning + #(offset-fret 3 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {f:dim7} + #guitar-tuning + #"x;x;o;1-1;o;1-2;" +\storePredefinedDiagram #default-fret-table \chordmode {f:7} + #guitar-tuning #(chord-shape 'f:7 guitar-tuning) -\storePredefinedDiagram \chordmode {f:maj7} - #guitar-tuning - #"x;3-3;3-4;2-2;1-1;" -\storePredefinedDiagram \chordmode {f:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {f:maj7} + #guitar-tuning + #"x;x;3-3;2-2;1-1;o;" +\storePredefinedDiagram #default-fret-table \chordmode {f:m7} + #guitar-tuning #(chord-shape 'f:m7 guitar-tuning) %%%% fis chords % -\storePredefinedDiagram \chordmode {fis} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {fis} + #guitar-tuning #(offset-fret 1 (chord-shape 'f guitar-tuning)) -\storePredefinedDiagram \chordmode {fis:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {fis:m} + #guitar-tuning #(offset-fret 1 (chord-shape 'f:m guitar-tuning)) -\storePredefinedDiagram \chordmode {fis:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {fis:dim} - #guitar-tuning - #"x;x;1-1;2-3;1-2;2-4;" -\storePredefinedDiagram \chordmode {fis:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {fis:aug} + #guitar-tuning + #"2-2;1-1;o;3-4-(;3-4-);2-3;" +\storePredefinedDiagram #default-fret-table \chordmode {fis:dim} + #guitar-tuning + #(offset-fret 4 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {fis:dim7} + #guitar-tuning + #(chord-shape 'ees:dim7 guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {fis:7} + #guitar-tuning #(offset-fret 1 (chord-shape 'f:7 guitar-tuning)) -\storePredefinedDiagram \chordmode {fis:maj7} - #guitar-tuning - #"x;x;4-4;3-3;2-2;1-1;" -\storePredefinedDiagram \chordmode {fis:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {fis:maj7} + #guitar-tuning + #"x;x;4-4;3-3;2-2;1-1;" +\storePredefinedDiagram #default-fret-table \chordmode {fis:m7} + #guitar-tuning #(offset-fret 1 (chord-shape 'f:m7 guitar-tuning)) %%%% ges chords % -\storePredefinedDiagram \chordmode {ges} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ges} + #guitar-tuning #(offset-fret 1 (chord-shape 'f guitar-tuning)) -\storePredefinedDiagram \chordmode {ges:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ges:m} + #guitar-tuning #(offset-fret 1 (chord-shape 'f:m guitar-tuning)) -\storePredefinedDiagram \chordmode {ges:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {ges:dim} - #guitar-tuning - #"x;x;1-1;2-3;1-2;2-4;" -\storePredefinedDiagram \chordmode {ges:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ges:aug} + #guitar-tuning + #"2-2;1-1;o;3-4-(;3-4-);2-3;" +\storePredefinedDiagram #default-fret-table \chordmode {ges:dim} + #guitar-tuning + #(offset-fret 4 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {ges:dim7} + #guitar-tuning + #(chord-shape 'ees:dim7 guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {ges:7} + #guitar-tuning #(offset-fret 1 (chord-shape 'f:7 guitar-tuning)) -\storePredefinedDiagram \chordmode {ges:maj7} - #guitar-tuning - #"x;x;4-4;3-3;2-2;1-1;" -\storePredefinedDiagram \chordmode {ges:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ges:maj7} + #guitar-tuning + #"x;x;4-4;3-3;2-2;1-1;" +\storePredefinedDiagram #default-fret-table \chordmode {ges:m7} + #guitar-tuning #(offset-fret 1 (chord-shape 'f:m7 guitar-tuning)) %%%% g chords % -\storePredefinedDiagram \chordmode {g} - #guitar-tuning - #"3-2;2-1;o;o;o;3-3;" -\storePredefinedDiagram \chordmode {g:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {g} + #guitar-tuning + #"3-2;2-1;o;o;o;3-3;" +\storePredefinedDiagram #default-fret-table \chordmode {g:m} + #guitar-tuning #(offset-fret 2 (chord-shape 'f:m guitar-tuning)) -\storePredefinedDiagram \chordmode {g:aug} - #guitar-tuning - #"x;x;5-1;8-3;8-4;7-2;" -\storePredefinedDiagram \chordmode {g:dim} - #guitar-tuning - #"x;x;5-2;6-4;5-3;3-1;" -\storePredefinedDiagram \chordmode {g:7} - #guitar-tuning - #"3-3;2-2;o;o;o;1-1;" -\storePredefinedDiagram \chordmode {g:maj7} - #guitar-tuning - #"x;x;5-4;4-3;3-2;2-1;" -\storePredefinedDiagram \chordmode {g:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {g:aug} + #guitar-tuning + #"x;x;5-1;8-3;8-4;7-2;" +\storePredefinedDiagram #default-fret-table \chordmode {g:dim} + #guitar-tuning + #(offset-fret 5 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {g:dim7} + #guitar-tuning + #(offset-fret 1 (chord-shape 'ees:dim7 guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {g:7} + #guitar-tuning + #"3-3;2-2;o;o;o;1-1;" +\storePredefinedDiagram #default-fret-table \chordmode {g:maj7} + #guitar-tuning + #"x;x;5-4;4-3;3-2;2-1;" +\storePredefinedDiagram #default-fret-table \chordmode {g:m7} + #guitar-tuning #(offset-fret 2 (chord-shape 'f:m7 guitar-tuning)) %%%% gis chords % -\storePredefinedDiagram \chordmode {gis} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {gis} + #guitar-tuning #(offset-fret 3 (chord-shape 'f guitar-tuning)) -\storePredefinedDiagram \chordmode {gis:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {gis:m} + #guitar-tuning #(offset-fret 3 (chord-shape 'f:m guitar-tuning)) -\storePredefinedDiagram \chordmode {gis:aug} - #guitar-tuning - #"o;3-4;2-3;1-1;1-2;o;" -\storePredefinedDiagram \chordmode {gis:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {gis:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {gis:aug} + #guitar-tuning + #"o;3-4;2-3;1-1;1-2;o;" +\storePredefinedDiagram #default-fret-table \chordmode {gis:dim} + #guitar-tuning + #(offset-fret 6 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {gis:dim7} + #guitar-tuning + #"x;x;o;1-1;o;1-2;" +\storePredefinedDiagram #default-fret-table \chordmode {gis:7} + #guitar-tuning #(offset-fret 3 (chord-shape 'f:7 guitar-tuning)) -\storePredefinedDiagram \chordmode {gis:maj7} - #guitar-tuning - #"x;x;1-1-(;1-1;1-1-);3-3;" -\storePredefinedDiagram \chordmode {gis:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {gis:maj7} + #guitar-tuning + #"x;x;1-1-(;1-1;1-1-);3-3;" +\storePredefinedDiagram #default-fret-table \chordmode {gis:m7} + #guitar-tuning #(offset-fret 3 (chord-shape 'f:m7 guitar-tuning)) %%%% aes chords % -\storePredefinedDiagram \chordmode {aes} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {aes} + #guitar-tuning #(offset-fret 3 (chord-shape 'f guitar-tuning)) -\storePredefinedDiagram \chordmode {aes:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {aes:m} + #guitar-tuning #(offset-fret 3 (chord-shape 'f:m guitar-tuning)) -\storePredefinedDiagram \chordmode {aes:aug} - #guitar-tuning - #"o;3-4;2-3;1-1;1-2;o;" -\storePredefinedDiagram \chordmode {aes:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {aes:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {aes:aug} + #guitar-tuning + #"o;3-4;2-3;1-1;1-2;o;" +\storePredefinedDiagram #default-fret-table \chordmode {aes:dim} + #guitar-tuning + #(offset-fret 6 (chord-shape 'd:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {aes:dim7} + #guitar-tuning + #"x;x;o;1-1;o;1-2;" +\storePredefinedDiagram #default-fret-table \chordmode {aes:7} + #guitar-tuning #(offset-fret 3 (chord-shape 'f:7 guitar-tuning)) -\storePredefinedDiagram \chordmode {aes:maj7} - #guitar-tuning - #"x;x;1-1-(;1-1;1-1-);3-3;" -\storePredefinedDiagram \chordmode {aes:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {aes:maj7} + #guitar-tuning + #"x;x;1-1-(;1-1;1-1-);3-3;" +\storePredefinedDiagram #default-fret-table \chordmode {aes:m7} + #guitar-tuning #(offset-fret 3 (chord-shape 'f:m7 guitar-tuning)) %%%% a chords % -\storePredefinedDiagram \chordmode {a} - #guitar-tuning - #"x;o;2-1;2-2;2-3;o;" -\storePredefinedDiagram \chordmode {a:m} - #guitar-tuning - #"x;o;2-2;2-3;1-1;o;" -\storePredefinedDiagram \chordmode {a:aug} - #guitar-tuning - #"x;o;3-4;2-2;2-3;1-1;" -\storePredefinedDiagram \chordmode {a:dim} - #guitar-tuning - #(chord-shape 'a:dim guitar-tuning) -\storePredefinedDiagram \chordmode {a:7} - #guitar-tuning - #"x;o;2-1;o;2-3;o;" -\storePredefinedDiagram \chordmode {a:maj7} - #guitar-tuning - #"x;o;2-2;1-1;2-3;o;" -\storePredefinedDiagram \chordmode {a:m7} - #guitar-tuning - #"x;o;2-2;o;1-1;o;" +\storePredefinedDiagram #default-fret-table \chordmode {a} + #guitar-tuning + #"x;o;2-1;2-2;2-3;o;" +\storePredefinedDiagram #default-fret-table \chordmode {a:m} + #guitar-tuning + #"x;o;2-2;2-3;1-1;o;" +\storePredefinedDiagram #default-fret-table \chordmode {a:aug} + #guitar-tuning + #"x;o;3-4;2-2;2-3;1-1;" +\storePredefinedDiagram #default-fret-table \chordmode {a:dim} + #guitar-tuning + #"x;o;1-1;2-2;1-3;x;" +\storePredefinedDiagram #default-fret-table \chordmode {a:dim7} + #guitar-tuning + #(chord-shape 'ees:dim7 guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {a:7} + #guitar-tuning + #"x;o;2-1;o;2-3;o;" +\storePredefinedDiagram #default-fret-table \chordmode {a:maj7} + #guitar-tuning + #"x;o;2-2;1-1;2-3;o;" +\storePredefinedDiagram #default-fret-table \chordmode {a:m7} + #guitar-tuning + #"x;o;2-2;o;1-1;o;" %%%% ais chords % -\storePredefinedDiagram \chordmode {ais} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ais} + #guitar-tuning #(chord-shape 'bes guitar-tuning) -\storePredefinedDiagram \chordmode {ais:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ais:m} + #guitar-tuning #(chord-shape 'bes:m guitar-tuning) -\storePredefinedDiagram \chordmode {ais:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {ais:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'a:dim guitar-tuning)) -\storePredefinedDiagram \chordmode {ais:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ais:aug} + #guitar-tuning + #"2-2;1-1;o;3-4-(;3-4-);2-3;" +\storePredefinedDiagram #default-fret-table \chordmode {ais:dim} + #guitar-tuning + #(chord-shape 'bes:dim guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {ais:dim7} + #guitar-tuning + #(offset-fret 1 (chord-shape 'ees:dim7 guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {ais:7} + #guitar-tuning #(chord-shape 'bes:7 guitar-tuning) -\storePredefinedDiagram \chordmode {ais:maj7} - #guitar-tuning - #"x;1-1;3-3;2-2;3-4;x;" -\storePredefinedDiagram \chordmode {ais:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {ais:maj7} + #guitar-tuning + #"x;1-1;3-3;2-2;3-4;x;" +\storePredefinedDiagram #default-fret-table \chordmode {ais:m7} + #guitar-tuning #(chord-shape 'bes:m7 guitar-tuning) %%%% bes chords % -\storePredefinedDiagram \chordmode {bes} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {bes} + #guitar-tuning #(chord-shape 'bes guitar-tuning) -\storePredefinedDiagram \chordmode {bes:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {bes:m} + #guitar-tuning #(chord-shape 'bes:m guitar-tuning) -\storePredefinedDiagram \chordmode {bes:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {bes:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'a:dim guitar-tuning)) -\storePredefinedDiagram \chordmode {bes:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {bes:aug} + #guitar-tuning + #"2-2;1-1;o;3-4-(;3-4-);2-3;" +\storePredefinedDiagram #default-fret-table \chordmode {bes:dim} + #guitar-tuning + #(chord-shape 'bes:dim guitar-tuning) +\storePredefinedDiagram #default-fret-table \chordmode {bes:dim7} + #guitar-tuning + #(offset-fret 1 (chord-shape 'ees:dim7 guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {bes:7} + #guitar-tuning #(chord-shape 'bes:7 guitar-tuning) -\storePredefinedDiagram \chordmode {bes:maj7} - #guitar-tuning - #"x;1-1;3-3;2-2;3-4;x;" -\storePredefinedDiagram \chordmode {bes:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {bes:maj7} + #guitar-tuning + #"x;1-1;3-3;2-2;3-4;x;" +\storePredefinedDiagram #default-fret-table \chordmode {bes:m7} + #guitar-tuning #(chord-shape 'bes:m7 guitar-tuning) %%%% b chords % -\storePredefinedDiagram \chordmode {b} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {b} + #guitar-tuning #(offset-fret 1 (chord-shape 'bes guitar-tuning)) -\storePredefinedDiagram \chordmode {b:m} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {b:m} + #guitar-tuning #(offset-fret 1 (chord-shape 'bes:m guitar-tuning)) -\storePredefinedDiagram \chordmode {b:aug} - #guitar-tuning - #"x;3-2;2-1;o;o;x;" -\storePredefinedDiagram \chordmode {b:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {b:7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {b:aug} + #guitar-tuning + #"x;3-2;2-1;o;o;x;" +\storePredefinedDiagram #default-fret-table \chordmode {b:dim} + #guitar-tuning + #(offset-fret 1 (chord-shape 'bes:dim guitar-tuning)) +\storePredefinedDiagram #default-fret-table \chordmode {b:dim7} + #guitar-tuning + #"x;x;o;1-1;o;1-2;" +\storePredefinedDiagram #default-fret-table \chordmode {b:7} + #guitar-tuning #(offset-fret 1 (chord-shape 'bes:7 guitar-tuning)) -\storePredefinedDiagram \chordmode {b:maj7} - #guitar-tuning - #"x;2-1;4-3;3-2;4-4;x;" -\storePredefinedDiagram \chordmode {b:m7} - #guitar-tuning +\storePredefinedDiagram #default-fret-table \chordmode {b:maj7} + #guitar-tuning + #"x;2-1;4-3;3-2;4-4;x;" +\storePredefinedDiagram #default-fret-table \chordmode {b:m7} + #guitar-tuning #(offset-fret 1 (chord-shape 'bes:m7 guitar-tuning)) +\languageRestore diff --git a/ly/predefined-guitar-ninth-fretboards.ly b/ly/predefined-guitar-ninth-fretboards.ly index 159ad04c8e..ee3653fc87 100644 --- a/ly/predefined-guitar-ninth-fretboards.ly +++ b/ly/predefined-guitar-ninth-fretboards.ly @@ -1,64 +1,75 @@ -\version "2.12.0" -% -% Add ninth chords to to predefined fret diagrams for standard guitar tunings -% -% This is part of the Lilypond distribution files -% -% Copyright 2008--2009 by Jonathan Kulp -% +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2008--2011 by Jonathan Kulp +%%%% +%%%% 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 . +\version "2.14.0" + +% Add ninth chords to predefined fret diagrams for standard guitar tunings \addChordShape #'c:9 #guitar-tuning #"x;3-2;2-1;3-3-(;3-3;3-3-);" \addChordShape #'f:9 #guitar-tuning #"1-1-(;3-3;1-1;2-2;1-1-);3-4;" -\storePredefinedDiagram \chordmode {c:9} +\storePredefinedDiagram #default-fret-table \chordmode {c:9} #guitar-tuning #(chord-shape 'c:9 guitar-tuning) -\storePredefinedDiagram \chordmode {cis:9} +\storePredefinedDiagram #default-fret-table \chordmode {cis:9} #guitar-tuning #(offset-fret 1 (chord-shape 'c:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {des:9} +\storePredefinedDiagram #default-fret-table \chordmode {des:9} #guitar-tuning #(offset-fret 1 (chord-shape 'c:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {d:9} +\storePredefinedDiagram #default-fret-table \chordmode {d:9} #guitar-tuning #(offset-fret 2 (chord-shape 'c:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {dis:9} +\storePredefinedDiagram #default-fret-table \chordmode {dis:9} #guitar-tuning #(offset-fret 3 (chord-shape 'c:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {ees:9} +\storePredefinedDiagram #default-fret-table \chordmode {ees:9} #guitar-tuning #(offset-fret 3 (chord-shape 'c:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {e:9} +\storePredefinedDiagram #default-fret-table \chordmode {e:9} #guitar-tuning #"o;2-2;o;1-1;o;2-3;" -\storePredefinedDiagram \chordmode {f:9} +\storePredefinedDiagram #default-fret-table \chordmode {f:9} #guitar-tuning #(chord-shape 'f:9 guitar-tuning) -\storePredefinedDiagram \chordmode {fis:9} +\storePredefinedDiagram #default-fret-table \chordmode {fis:9} #guitar-tuning #(offset-fret 1 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {ges:9} +\storePredefinedDiagram #default-fret-table \chordmode {ges:9} #guitar-tuning #(offset-fret 1 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {g:9} +\storePredefinedDiagram #default-fret-table \chordmode {g:9} #guitar-tuning #(offset-fret 2 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {gis:9} +\storePredefinedDiagram #default-fret-table \chordmode {gis:9} #guitar-tuning #(offset-fret 3 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {aes:9} +\storePredefinedDiagram #default-fret-table \chordmode {aes:9} #guitar-tuning #(offset-fret 3 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {a:9} +\storePredefinedDiagram #default-fret-table \chordmode {a:9} #guitar-tuning #(offset-fret 4 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {ais:9} +\storePredefinedDiagram #default-fret-table \chordmode {ais:9} #guitar-tuning #(offset-fret 5 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {bes:9} +\storePredefinedDiagram #default-fret-table \chordmode {bes:9} #guitar-tuning #(offset-fret 5 (chord-shape 'f:9 guitar-tuning)) -\storePredefinedDiagram \chordmode {b:9} +\storePredefinedDiagram #default-fret-table \chordmode {b:9} #guitar-tuning #(offset-fret -1 (chord-shape 'c:9 guitar-tuning)) diff --git a/ly/predefined-mandolin-fretboards.ly b/ly/predefined-mandolin-fretboards.ly new file mode 100644 index 0000000000..ac5ebb0d54 --- /dev/null +++ b/ly/predefined-mandolin-fretboards.ly @@ -0,0 +1,876 @@ +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2011 Marc Hohl +%%%% +%%%% 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 . + +\version "2.14.0" + +%%%% sources: +%%%% mandolincafe website (http://www.mandolincafe.com/), +%%%% sheetmusicdigital website (http://www.sheetmusicdigital.com/) + +% chord definitions require default pitchnames +\languageSaveAndChange #default-language + +%%% a chords + +\storePredefinedDiagram #default-fret-table \chordmode {a} + #mandolin-tuning + #"2-1-(;2-1-);4-3;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:m} + #mandolin-tuning + #"2-1-(;2-1-);3-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:7} + #mandolin-tuning + #"2-1-(;2-1-);4-3;3-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:m7} + #mandolin-tuning + #"2-1-(;2-1-);3-2-(;3-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {a:m7.5-} + #mandolin-tuning + #"2-2;1-1;3-3;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:dim7} + #mandolin-tuning + #"2-2;1-1;3-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:maj7} + #mandolin-tuning + #"2-1-(;2-1-);4-3-(;4-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {a:6} + #mandolin-tuning + #"2-1-(;2-1;4-3;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {a:sus2} + #mandolin-tuning + #"2-1-(;2-1;2-1-);o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:sus4} + #mandolin-tuning + #"2-1;o;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:aug} + #mandolin-tuning + #"2-2;3-3;4-4;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:9} + #mandolin-tuning + #"2-1;5-3;4-2;7-4;" + +%%% ais chords + +\storePredefinedDiagram #default-fret-table \chordmode {ais} + #mandolin-tuning + #"3-3;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:m} + #mandolin-tuning + #"3-1-(;3-1-);4-2;6-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:7} + #mandolin-tuning + #"3-1-(;3-1-);5-3;4-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:m7} + #mandolin-tuning + #"3-1-(;3-1-);4-2-(;4-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:m7.5-} + #mandolin-tuning + #"3-2;2-1;4-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:dim7} + #mandolin-tuning + #"3-2;2-1;4-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:maj7} + #mandolin-tuning + #"3-3;o;o;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:6} + #mandolin-tuning + #"o;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:sus2} + #mandolin-tuning + #"3-1-(;3-1;3-1-);6-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:sus4} + #mandolin-tuning + #"3-3;1-1-(;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:aug} + #mandolin-tuning + #"3-3;o;1-1;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:9} + #mandolin-tuning + #"3-1;o;3-2;4-3;" + +%%% bes chords + +\storePredefinedDiagram #default-fret-table \chordmode {bes} + #mandolin-tuning + #"3-3;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:m} + #mandolin-tuning + #"3-1-(;3-1-);4-2;6-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:7} + #mandolin-tuning + #"3-1-(;3-1-);5-3;4-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:m7} + #mandolin-tuning + #"3-1-(;3-1-);4-2-(;4-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:m7.5-} + #mandolin-tuning + #"3-2;2-1;4-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:dim7} + #mandolin-tuning + #"3-2;2-1;4-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:maj7} + #mandolin-tuning + #"3-3;o;o;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:6} + #mandolin-tuning + #"o;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:sus2} + #mandolin-tuning + #"3-1-(;3-1;3-1-);6-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:sus4} + #mandolin-tuning + #"3-3;1-1-(;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:aug} + #mandolin-tuning + #"3-3;o;1-1;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:9} + #mandolin-tuning + #"3-1;o;3-2;4-3;" + +%%% b chords + +\storePredefinedDiagram #default-fret-table \chordmode {b} + #mandolin-tuning + #"4-1-(;4-1-);6-3;7-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:m} + #mandolin-tuning + #"4-3;o;2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:7} + #mandolin-tuning + #"4-1-(;4-1-);6-3;5-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:m7} + #mandolin-tuning + #"4-3;o;o;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:m7.5-} + #mandolin-tuning + #"2-2;o;2-3;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:dim7} + #mandolin-tuning + #"1-1;o;2-3;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:maj7} + #mandolin-tuning + #"4-4;1-1-(;1-1-);2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:6} + #mandolin-tuning + #"1-1-(;1-1-);2-2-(;2-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:sus2} + #mandolin-tuning + #"4-1-(;4-1;4-1-);7-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:sus4} + #mandolin-tuning + #"4-3;2-1-(;2-1;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:aug} + #mandolin-tuning + #"4-4;1-1;2-2;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:9} + #mandolin-tuning + #"4-2;1-1;4-3;5-4;" + +%%% c chords + +\storePredefinedDiagram #default-fret-table \chordmode {c} + #mandolin-tuning + #"5-4;2-1;3-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:m} + #mandolin-tuning + #"5-1-(;5-1-);6-2;8-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:7} + #mandolin-tuning + #"5-4;2-2;1-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:m7} + #mandolin-tuning + #"5-1-(;5-1-);6-2-(;6-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {c:m7.5-} + #mandolin-tuning + #"3-3;1-1;3-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:dim7} + #mandolin-tuning + #"2-2;1-1;3-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:maj7} + #mandolin-tuning + #"5-4;2-1-(;2-1-);3-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:6} + #mandolin-tuning + #"2-1-(;2-1-);3-2-(;3-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {c:sus2} + #mandolin-tuning + #"5-3;o;3-1-(;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {c:sus4} + #mandolin-tuning + #"5-3;3-1-(;3-1;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {c:aug} + #mandolin-tuning + #"5-4;2-1;3-2;4-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:9} + #mandolin-tuning + #"5-1;o;7-3;6-2;" + +%%% cis chords + +\storePredefinedDiagram #default-fret-table \chordmode {cis} + #mandolin-tuning + #"6-4;3-2;4-3;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:m} + #mandolin-tuning + #"6-2;6-3;4-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:7} + #mandolin-tuning + #"6-4;3-2;2-1;4-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:m7} + #mandolin-tuning + #"6-1-(;6-1-);7-2-(;7-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:m7.5-} + #mandolin-tuning + #"4-3;2-1;4-4;3-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:dim7} + #mandolin-tuning + #"3-2;2-1;1-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:maj7} + #mandolin-tuning + #"6-4;3-1-(;3-1-);4-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:6} + #mandolin-tuning + #"3-1-(;3-1-);4-2-(;4-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:sus2} + #mandolin-tuning + #"1-1-(;1-1-);4-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:sus4} + #mandolin-tuning + #"6-3;4-1-(;4-1;4-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:aug} + #mandolin-tuning + #"6-4;3-1;o5-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:9} + #mandolin-tuning + #"6-2;3-1;6-3;7-4;" + +%%% des chords + +\storePredefinedDiagram #default-fret-table \chordmode {des} + #mandolin-tuning + #"6-4;3-2;4-3;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:m} + #mandolin-tuning + #"6-2;6-3;4-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:7} + #mandolin-tuning + #"6-4;3-2;2-1;4-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:m7} + #mandolin-tuning + #"6-1-(;6-1-);7-2-(;7-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {des:m7.5-} + #mandolin-tuning + #"4-3;2-1;4-4;3-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:dim7} + #mandolin-tuning + #"3-2;2-1;1-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:maj7} + #mandolin-tuning + #"6-4;3-1-(;3-1-);4-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:6} + #mandolin-tuning + #"3-1-(;3-1-);4-2-(;4-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {des:sus2} + #mandolin-tuning + #"1-1-(;1-1-);4-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:sus4} + #mandolin-tuning + #"6-3;4-1-(;4-1;4-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {des:aug} + #mandolin-tuning + #"6-4;3-1;o5-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:9} + #mandolin-tuning + #"6-2;3-1;6-3;7-4;" + +%%% d chords + +\storePredefinedDiagram #default-fret-table \chordmode {d} + #mandolin-tuning + #"2-1;o;o;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:m} + #mandolin-tuning + #"2-2;o;o;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:7} + #mandolin-tuning + #"2-1;o;3-3;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:m7} + #mandolin-tuning + #"2-2;o;3-3;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:m7.5-} + #mandolin-tuning + #"1-1;o;3-3;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:dim7} + #mandolin-tuning + #"1-1;o;2-3;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:maj7} + #mandolin-tuning + #"2-1;o;4-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:6} + #mandolin-tuning + #"2-1;o;2-2;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:sus2} + #mandolin-tuning + #"2-1;o;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:sus4} + #mandolin-tuning + #"2-1;o;o;3-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:aug} + #mandolin-tuning + #"3-3;o;1-1;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:9} + #mandolin-tuning + #"7-4;4-2;3-1;o;" + +%%%% dis chords + +\storePredefinedDiagram #default-fret-table \chordmode {dis} + #mandolin-tuning + #"3-3;1-1-(;1-1-);3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:m} + #mandolin-tuning + #"3-3;1-1-(;1-1-);2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:7} + #mandolin-tuning + #"3-2;1-1;4-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:m7} + #mandolin-tuning + #"3-3;1-1;4-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:m7.5-} + #mandolin-tuning + #"2-2;1-1;4-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:dim7} + #mandolin-tuning + #"2-2;1-1;3-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:maj7} + #mandolin-tuning + #"3-2;1-1;5-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:6} + #mandolin-tuning + #"3-2;1-1;3-3;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:sus2} + #mandolin-tuning + #"3-3;1-1-(;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:sus4} + #mandolin-tuning + #"3-3;1-1-(;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:aug} + #mandolin-tuning + #"o;1-1;2-2;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:9} + #mandolin-tuning + #"8-2;5-1;8-3;9-4;" + +%%%% ees chords + +\storePredefinedDiagram #default-fret-table \chordmode {ees} + #mandolin-tuning + #"3-3;1-1-(;1-1-);3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:m} + #mandolin-tuning + #"3-3;1-1-(;1-1-);2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:7} + #mandolin-tuning + #"3-2;1-1;4-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:m7} + #mandolin-tuning + #"3-3;1-1;4-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:m7.5-} + #mandolin-tuning + #"2-2;1-1;4-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:dim7} + #mandolin-tuning + #"2-2;1-1;3-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:maj7} + #mandolin-tuning + #"3-2;1-1;5-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:6} + #mandolin-tuning + #"3-2;1-1;3-3;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:sus2} + #mandolin-tuning + #"3-3;1-1-(;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:sus4} + #mandolin-tuning + #"3-3;1-1-(;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:aug} + #mandolin-tuning + #"o;1-1;2-2;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:9} + #mandolin-tuning + #"8-2;5-1;8-3;9-4;" + +%%%% e chords + +\storePredefinedDiagram #default-fret-table \chordmode {e} + #mandolin-tuning + #"1-1;2-2;2-3;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:m} + #mandolin-tuning + #"o;2-2;2-3;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:7} + #mandolin-tuning + #"1-1;o;2-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:m7} + #mandolin-tuning + #"o;o;2-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:m7.5-} + #mandolin-tuning + #"o;o;1-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:dim7} + #mandolin-tuning + #"3-2;2-1;4-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:maj7} + #mandolin-tuning + #"1-1-(;1-1-);2-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:6} + #mandolin-tuning + #"4-1;6-3;4-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:sus2} + #mandolin-tuning + #"4-3;2-1-(;2-1;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {e:sus4} + #mandolin-tuning + #"4-3;2-1;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:aug} + #mandolin-tuning + #"1-1;2-2;3-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:9} + #mandolin-tuning + #"9-2;6-1;9-3;10-4;" + +%%%% f chords + +\storePredefinedDiagram #default-fret-table \chordmode {f} + #mandolin-tuning + #"2-2;3-3;o;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:m} + #mandolin-tuning + #"1-1-(;3-3;3-4;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {f:7} + #mandolin-tuning + #"2-2;1-1-(;3-3;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {f:m7} + #mandolin-tuning + #"1-1-(;1-1;3-3;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {f:m7.5-} + #mandolin-tuning + #"1-1-(;1-1;2-2;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {f:dim7} + #mandolin-tuning + #"1-1;o;2-3;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:maj7} + #mandolin-tuning + #"2-2;2-3;3-4;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:6} + #mandolin-tuning + #"2-2;o;3-3;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:sus2} + #mandolin-tuning + #"o;3-3;3-4;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:sus4} + #mandolin-tuning + #"5-4;3-2;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {f:aug} + #mandolin-tuning + #"2-1;3-2;4-3;5-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:9} + #mandolin-tuning + #"10-2;7-1;10-3;11-4;" + +%%%% fis chords + +\storePredefinedDiagram #default-fret-table \chordmode {fis} + #mandolin-tuning + #"3-2;4-3;4-4;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:m} + #mandolin-tuning + #"2-1-(;4-3;4-4;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:7} + #mandolin-tuning + #"3-2;2-1-(;4-3;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:m7} + #mandolin-tuning + #"2-1-(;2-1;4-3;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:m7.5-} + #mandolin-tuning + #"2-1-(;2-1;3-2;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:dim7} + #mandolin-tuning + #"2-2;1-1;3-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:maj7} + #mandolin-tuning + #"3-2;3-3;4-4;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:6} + #mandolin-tuning + #"3-3;1-1;4-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:sus2} + #mandolin-tuning + #"6-3;4-1-(;4-1;4-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:sus4} + #mandolin-tuning + #"6-4;4-2;2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:aug} + #mandolin-tuning + #"3-1;4-2;5-3;6-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:9} + #mandolin-tuning + #"11-2;8-1;11-3;o;" + +%%%% ges chords + +\storePredefinedDiagram #default-fret-table \chordmode {ges} + #mandolin-tuning + #"3-2;4-3;4-4;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:m} + #mandolin-tuning + #"2-1-(;4-3;4-4;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:7} + #mandolin-tuning + #"3-2;2-1-(;4-3;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:m7} + #mandolin-tuning + #"2-1-(;2-1;4-3;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:m7.5-} + #mandolin-tuning + #"2-1-(;2-1;3-2;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:dim7} + #mandolin-tuning + #"2-2;1-1;3-4;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:maj7} + #mandolin-tuning + #"3-2;3-3;4-4;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:6} + #mandolin-tuning + #"3-3;1-1;4-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:sus2} + #mandolin-tuning + #"6-3;4-1-(;4-1;4-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:sus4} + #mandolin-tuning + #"6-4;4-2;2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:aug} + #mandolin-tuning + #"3-1;4-2;5-3;6-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:9} + #mandolin-tuning + #"11-2;8-1;11-3;o;" + +%%%% g chords + +\storePredefinedDiagram #default-fret-table \chordmode {g} + #mandolin-tuning + #"o;o;2-1;3-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:m} + #mandolin-tuning + #"o;o;1-1;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:7} + #mandolin-tuning + #"o;o;2-2;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:m7} + #mandolin-tuning + #"o;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {g:m7.5-} + #mandolin-tuning + #"3-1-(;3-1;4-2;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {g:dim7} + #mandolin-tuning + #"3-2;2-1;4-4;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:maj7} + #mandolin-tuning + #"o;o;2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {g:6} + #mandolin-tuning + #"o;o;2-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:sus2} + #mandolin-tuning + #"o;o;o;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:sus4} + #mandolin-tuning + #"o;o;3-1-(;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {g:aug} + #mandolin-tuning + #"o;1-1;2-2;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:9} + #mandolin-tuning + #"o;3-1;o;7-4;" + +%%%% gis chords + +\storePredefinedDiagram #default-fret-table \chordmode {gis} + #mandolin-tuning + #"1-1-(;1-1-);3-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:m} + #mandolin-tuning + #"1-1-(;1-1-);2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:7} + #mandolin-tuning + #"1-1-(;1-1-);3-3;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:m7} + #mandolin-tuning + #"1-1-(;1-1-);2-2-(;2-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:m7.5-} + #mandolin-tuning + #"1-1;o;2-2-(;2-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:dim7} + #mandolin-tuning + #"1-1;o;2-3;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:maj7} + #mandolin-tuning + #"1-1-(;1-1-);3-3-(;3-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:6} + #mandolin-tuning + #"1-1-(;1-1;3-3;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:sus2} + #mandolin-tuning + #"1-1-(;1-1;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:sus4} + #mandolin-tuning + #"1-1-(;1-1-);4-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:aug} + #mandolin-tuning + #"1-1;2-2;3-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:9} + #mandolin-tuning + #"1-1;4-3;3-2;6-4;" +%%%% aes chords + +\storePredefinedDiagram #default-fret-table \chordmode {aes} + #mandolin-tuning + #"1-1-(;1-1-);3-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:m} + #mandolin-tuning + #"1-1-(;1-1-);2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:7} + #mandolin-tuning + #"1-1-(;1-1-);3-3;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:m7} + #mandolin-tuning + #"1-1-(;1-1-);2-2-(;2-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:m7.5-} + #mandolin-tuning + #"1-1;o;2-2-(;2-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:dim7} + #mandolin-tuning + #"1-1;o;2-3;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:maj7} + #mandolin-tuning + #"1-1-(;1-1-);3-3-(;3-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:6} + #mandolin-tuning + #"1-1-(;1-1;3-3;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:sus2} + #mandolin-tuning + #"1-1-(;1-1;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:sus4} + #mandolin-tuning + #"1-1-(;1-1-);4-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:aug} + #mandolin-tuning + #"1-1;2-2;3-3;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:9} + #mandolin-tuning + #"1-1;4-3;3-2;6-4;" + +\languageRestore diff --git a/ly/predefined-ukulele-fretboards.ly b/ly/predefined-ukulele-fretboards.ly new file mode 100644 index 0000000000..b4c01c29e7 --- /dev/null +++ b/ly/predefined-ukulele-fretboards.ly @@ -0,0 +1,809 @@ +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2009--2011 Matt Corks +%%%% +%%%% 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 . + +\version "2.14.0" + +%%%% sources: +%%%% ukulele hall of fame museum website (http://www.ukulele.org/), +%%%% kiwi ukulele website (http://www.kiwiukulele.co.nz/) + +% chord definitions require default pitchnames +\languageSaveAndChange #default-language + +%%% a chords + +\storePredefinedDiagram #default-fret-table \chordmode {a} + #ukulele-tuning + #"2-2;1-1;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:m} + #ukulele-tuning + #"2-1;o;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:7} + #ukulele-tuning + #"o;1-1;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:m7} + #ukulele-tuning + #"o;o;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:dim} + #ukulele-tuning + #"2-1;3-3;2-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:maj7} + #ukulele-tuning + #"1-1;1-2;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:6} + #ukulele-tuning + #"2-1;4-3;2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:sus2} + #ukulele-tuning + #"2-2;4-3;5-4;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:sus4} + #ukulele-tuning + #"2-1;2-2;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:aug} + #ukulele-tuning + #"2-2;1-1-(;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {a:9} + #ukulele-tuning + #"o;1-1;o;2-2;" + +%%% ais chords + +\storePredefinedDiagram #default-fret-table \chordmode {ais} + #ukulele-tuning + #"3-3;2-2;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:m} + #ukulele-tuning + #"3-3;1-1-(;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:7} + #ukulele-tuning + #"1-1-(;2-2;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:m7} + #ukulele-tuning + #"1-1-(;1-1;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:dim} + #ukulele-tuning + #"o;1-1;o;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:maj7} + #ukulele-tuning + #"2-2-(;2-2-);1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:6} + #ukulele-tuning + #"o;2-2;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:sus2} + #ukulele-tuning + #"3-3;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:sus4} + #ukulele-tuning + #"3-3-(;3-3-);1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:aug} + #ukulele-tuning + #"3-2;1-1-(;1-1-);5-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ais:9} + #ukulele-tuning + #"1-1-(;2-2;1-1-);3-3;" + +%%% bes chords + +\storePredefinedDiagram #default-fret-table \chordmode {bes} + #ukulele-tuning + #"3-3;2-2;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:m} + #ukulele-tuning + #"3-3;1-1-(;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:7} + #ukulele-tuning + #"1-1-(;2-2;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:m7} + #ukulele-tuning + #"1-1-(;1-1;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:dim} + #ukulele-tuning + #"o;1-1;o;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:maj7} + #ukulele-tuning + #"2-2-(;2-2-);1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:6} + #ukulele-tuning + #"o;2-2;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:sus2} + #ukulele-tuning + #"3-3;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:sus4} + #ukulele-tuning + #"3-3-(;3-3-);1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:aug} + #ukulele-tuning + #"3-2;1-1-(;1-1-);5-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {bes:9} + #ukulele-tuning + #"1-1-(;2-2;1-1-);3-3;" + +%%% b chords + +\storePredefinedDiagram #default-fret-table \chordmode {b} + #ukulele-tuning + #"4-3;3-2;2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:m} + #ukulele-tuning + #"4-3;2-1-(;2-1;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:7} + #ukulele-tuning + #"2-1-(;3-2;2-1;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:m7} + #ukulele-tuning + #"2-1-(;2-1;2-1;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:dim} + #ukulele-tuning + #"1-1;2-3;1-2;2-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:maj7} + #ukulele-tuning + #"3-2-(;3-2-);2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:6} + #ukulele-tuning + #"1-1;3-4;2-2;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:sus2} + #ukulele-tuning + #"5-4;1-1;2-3;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:sus4} + #ukulele-tuning + #"4-2-(;4-2-);2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {b:aug} + #ukulele-tuning + #"o;3-2-(;3-2-);2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {b:9} + #ukulele-tuning + #"2-2-(;3-3;2-2-);4-4;" + +%%% c chords + +\storePredefinedDiagram #default-fret-table \chordmode {c} + #ukulele-tuning + #"o;o;o;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:m} + #ukulele-tuning + #"o;3-1;3-2;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:7} + #ukulele-tuning + #"o;o;o;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:m7} + #ukulele-tuning + #"3-1-(;3-1;3-1;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {c:dim} + #ukulele-tuning + #"2-1;3-3;2-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:maj7} + #ukulele-tuning + #"o;o;o;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:6} + #ukulele-tuning + #"o;o;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:sus2} + #ukulele-tuning + #"o;2-1;3-2-(;3-2-);" + +\storePredefinedDiagram #default-fret-table \chordmode {c:sus4} + #ukulele-tuning + #"o;o;1-1;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:aug} + #ukulele-tuning + #"1-1;o;o;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {c:9} + #ukulele-tuning + #"o;2-2;o;1-1;" + +%%% cis chords + +\storePredefinedDiagram #default-fret-table \chordmode {cis} + #ukulele-tuning + #"1-1-(;1-1;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:m} + #ukulele-tuning + #"1-1;4-2;4-3-(;4-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:7} + #ukulele-tuning + #"1-1-(;1-1;1-1-);2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:m7} + #ukulele-tuning + #"2-2-(;2-2-);1-1;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:dim} + #ukulele-tuning + #"o;1-1;o;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:maj7} + #ukulele-tuning + #"1-1-(;1-1;1-1-);3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:6} + #ukulele-tuning + #"1-1-(;1-1;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:sus2} + #ukulele-tuning + #"1-1;3-2;4-3-(;4-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:sus4} + #ukulele-tuning + #"1-1-(;1-1-);2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:aug} + #ukulele-tuning + #"2-2;1-1-(;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {cis:9} + #ukulele-tuning + #"1-1-(;3-3;1-1-);2-2;" + +%%% des chords + +\storePredefinedDiagram #default-fret-table \chordmode {des} + #ukulele-tuning + #"1-1-(;1-1;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:m} + #ukulele-tuning + #"1-1;4-2;4-3-(;4-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {des:7} + #ukulele-tuning + #"1-1-(;1-1;1-1-);2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:m7} + #ukulele-tuning + #"2-2-(;2-2-);1-1;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:dim} + #ukulele-tuning + #"o;1-1;o;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:maj7} + #ukulele-tuning + #"1-1-(;1-1;1-1-);3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:6} + #ukulele-tuning + #"1-1-(;1-1;1-1;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {des:sus2} + #ukulele-tuning + #"1-1;3-2;4-3-(;4-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {des:sus4} + #ukulele-tuning + #"1-1-(;1-1-);2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:aug} + #ukulele-tuning + #"2-2;1-1-(;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {des:9} + #ukulele-tuning + #"1-1-(;3-3;1-1-);2-2;" + +%%% d chords + +\storePredefinedDiagram #default-fret-table \chordmode {d} + #ukulele-tuning + #"2-1;2-2;2-3;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:m} + #ukulele-tuning + #"2-2-(;2-2-);1-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:7} + #ukulele-tuning + #"2-1-(;2-1;2-1-);3-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:m7} + #ukulele-tuning + #"2-2-(;2-2-);1-1;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:dim} + #ukulele-tuning + #"1-1;2-3;1-2;2-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:maj7} + #ukulele-tuning + #"2-1-(;2-1;2-1-);4-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:6} + #ukulele-tuning + #"2-1-(;2-1;2-1;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {d:sus2} + #ukulele-tuning + #"2-1;2-2;o;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:sus4} + #ukulele-tuning + #"o;2-1;3-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:aug} + #ukulele-tuning + #"3-2;2-1-(;2-1-);5-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {d:9} + #ukulele-tuning + #"2-1-(;4-3;2-1-);3-2;" + +%%%% dis chords + +\storePredefinedDiagram #default-fret-table \chordmode {dis} + #ukulele-tuning + #"o;3-2-(;3-2-);1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:m} + #ukulele-tuning + #"3-3-(;3-3-);2-2;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:7} + #ukulele-tuning + #"3-1-(;3-1;3-1-);4-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:m7} + #ukulele-tuning + #"3-2-(;3-2-);2-1;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:dim} + #ukulele-tuning + #"2-1;3-3;2-1;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:maj7} + #ukulele-tuning + #"3-1-(;3-2;3-1-);5-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:6} + #ukulele-tuning + #"3-1-(;3-1;3-1;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:sus2} + #ukulele-tuning + #"3-2-(;3-2-);1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:sus4} + #ukulele-tuning + #"1-2;3-3;4-4;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:aug} + #ukulele-tuning + #"o;3-2-(;3-2-);2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {dis:9} + #ukulele-tuning + #"o;1-1-(;1-1;1-1-);" + +%%%% ees chords + +\storePredefinedDiagram #default-fret-table \chordmode {ees} + #ukulele-tuning + #"o;3-2-(;3-2-);1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:m} + #ukulele-tuning + #"3-3-(;3-3-);2-2;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:7} + #ukulele-tuning + #"3-1-(;3-1;3-1-);4-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:m7} + #ukulele-tuning + #"3-2-(;3-2-);2-1;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:dim} + #ukulele-tuning + #"2-1;3-3;2-1;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:maj7} + #ukulele-tuning + #"3-1-(;3-2;3-1-);5-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:6} + #ukulele-tuning + #"3-1-(;3-1;3-1;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:sus2} + #ukulele-tuning + #"3-2-(;3-2-);1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:sus4} + #ukulele-tuning + #"1-2;3-3;4-4;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:aug} + #ukulele-tuning + #"o;3-2-(;3-2-);2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ees:9} + #ukulele-tuning + #"o;1-1-(;1-1;1-1-);" + +%%%% e chords + +\storePredefinedDiagram #default-fret-table \chordmode {e} + #ukulele-tuning + #"4-2;4-3;4-4;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:m} + #ukulele-tuning + #"4-3;4-3;3-2;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:7} + #ukulele-tuning + #"1-1;2-2;o;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:m7} + #ukulele-tuning + #"o;2-1;o;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:dim} + #ukulele-tuning + #"o;1-1;o;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:maj7} + #ukulele-tuning + #"1-1;3-3;o;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:6} + #ukulele-tuning + #"4-1-(;4-1;4-1;4-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {e:sus2} + #ukulele-tuning + #"4-3-(;4-3-);2-1-(;2-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {e:sus4} + #ukulele-tuning + #"2-2;4-4;o;2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:aug} + #ukulele-tuning + #"1-1;o;o;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {e:9} + #ukulele-tuning + #"1-1;2-2-(;2-2;2-2-);" + +%%%% f chords + +\storePredefinedDiagram #default-fret-table \chordmode {f} + #ukulele-tuning + #"2-2;o;1-1;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:m} + #ukulele-tuning + #"1-1;o;1-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:7} + #ukulele-tuning + #"2-2;3-3;1-1;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:m7} + #ukulele-tuning + #"1-1;3-3;1-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:dim} + #ukulele-tuning + #"1-1;2-3;1-2;2-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:maj7} + #ukulele-tuning + #"2-2;4-4;1-1;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:6} + #ukulele-tuning + #"2-2-(;2-2-);1-1;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:sus2} + #ukulele-tuning + #"o;o;1-1;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:sus4} + #ukulele-tuning + #"3-3;o;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {f:aug} + #ukulele-tuning + #"2-2;1-1-(;1-1-);4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {f:9} + #ukulele-tuning + #"2-1;3-2-(;3-2;3-2-);" + +%%%% fis chords + +\storePredefinedDiagram #default-fret-table \chordmode {fis} + #ukulele-tuning + #"3-3;1-1;2-2;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:m} + #ukulele-tuning + #"2-2;1-1;2-3;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:7} + #ukulele-tuning + #"3-3;4-4;2-2;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:m7} + #ukulele-tuning + #"2-1;4-3;2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:dim} + #ukulele-tuning + #"2-1;3-3;2-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:maj7} + #ukulele-tuning + #"3-2;5-4;2-1;4-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:6} + #ukulele-tuning + #"3-2-(;3-2-);2-1;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:sus2} + #ukulele-tuning + #"1-1-(;1-1-);2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:sus4} + #ukulele-tuning + #"4-4;1-1;2-2;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:aug} + #ukulele-tuning + #"3-2;2-1-(;2-1-);5-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {fis:9} + #ukulele-tuning + #"3-1;4-2-(;4-2;4-2-);" + +%%%% ges chords + +\storePredefinedDiagram #default-fret-table \chordmode {ges} + #ukulele-tuning + #"3-3;1-1;2-2;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:m} + #ukulele-tuning + #"2-2;1-1;2-3;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:7} + #ukulele-tuning + #"3-3;4-4;2-2;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:m7} + #ukulele-tuning + #"2-1;4-3;2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:dim} + #ukulele-tuning + #"2-1;3-3;2-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:maj7} + #ukulele-tuning + #"3-2;5-4;2-1;4-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:6} + #ukulele-tuning + #"3-2-(;3-2-);2-1;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:sus2} + #ukulele-tuning + #"1-1-(;1-1-);2-2;4-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:sus4} + #ukulele-tuning + #"4-4;1-1;2-2;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:aug} + #ukulele-tuning + #"3-2;2-1-(;2-1-);5-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {ges:9} + #ukulele-tuning + #"3-1;4-2-(;4-2;4-2-);" + +%%%% g chords + +\storePredefinedDiagram #default-fret-table \chordmode {g} + #ukulele-tuning + #"o;2-1;3-3;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:m} + #ukulele-tuning + #"o;2-2;3-3;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:7} + #ukulele-tuning + #"o;2-2;1-1;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:m7} + #ukulele-tuning + #"o;2-2;1-1-(;1-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {g:dim} + #ukulele-tuning + #"o;1-1;o;1-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:maj7} + #ukulele-tuning + #"o;2-1;2-2;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:6} + #ukulele-tuning + #"o;2-1;o;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:sus2} + #ukulele-tuning + #"o;2-1;3-2;o;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:sus4} + #ukulele-tuning + #"o;2-1;3-2;3-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:aug} + #ukulele-tuning + #"o;3-2-(;3-2-);2-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {g:9} + #ukulele-tuning + #"2-2;2-3;1-1;2-4;" + +%%%% gis chords + +\storePredefinedDiagram #default-fret-table \chordmode {gis} + #ukulele-tuning + #"5-3;3-1-(;4-2;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:m} + #ukulele-tuning + #"1-1;3-3;4-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:7} + #ukulele-tuning + #"1-1;3-3;2-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:m7} + #ukulele-tuning + #"1-1;3-4;2-2;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:dim} + #ukulele-tuning + #"1-1;2-3;1-2;2-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:maj7} + #ukulele-tuning + #"1-1;3-2;3-3-(;3-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:6} + #ukulele-tuning + #"1-1;3-3;1-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:sus2} + #ukulele-tuning + #"1-2;3-3;4-4;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:sus4} + #ukulele-tuning + #"1-1;2-3;4-3-(;4-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:aug} + #ukulele-tuning + #"1-1;o;o;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {gis:9} + #ukulele-tuning + #"1-1;o;2-3;1-2;" + +%%%% aes chords + +\storePredefinedDiagram #default-fret-table \chordmode {aes} + #ukulele-tuning + #"5-3;3-1-(;4-2;3-1-);" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:m} + #ukulele-tuning + #"1-1;3-3;4-4;2-2;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:7} + #ukulele-tuning + #"1-1;3-3;2-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:m7} + #ukulele-tuning + #"1-1;3-4;2-2;2-3;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:dim} + #ukulele-tuning + #"1-1;2-3;1-2;2-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:maj7} + #ukulele-tuning + #"1-1;3-2;3-3-(;3-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:6} + #ukulele-tuning + #"1-1;3-3;1-2;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:sus2} + #ukulele-tuning + #"1-2;3-3;4-4;1-1;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:sus4} + #ukulele-tuning + #"1-1;2-3;4-3-(;4-3-);" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:aug} + #ukulele-tuning + #"1-1;o;o;3-4;" + +\storePredefinedDiagram #default-fret-table \chordmode {aes:9} + #ukulele-tuning + #"1-1;o;2-3;1-2;" + +\languageRestore diff --git a/ly/property-init.ly b/ly/property-init.ly index 2d50a6c601..0175bb798f 100644 --- a/ly/property-init.ly +++ b/ly/property-init.ly @@ -1,191 +1,179 @@ % property-init.ly -\version "2.12.0" +\version "2.14.0" -stemUp = \override Stem #'direction = #UP -stemDown = \override Stem #'direction = #DOWN -stemNeutral = \revert Stem #'direction +%% for dashed slurs, phrasing slurs, and ties +#(define (make-simple-dash-definition dash-fraction dash-period) + (list (list 0 1 dash-fraction dash-period))) + +%% common definition for all note head styles reverting +%% (palm mute, harmonics, dead notes, ...) +defaultNoteHeads = +#(define-music-function (parser location) () + (_i "Revert to the default note head style.") + (revert-head-style '(NoteHead TabNoteHead))) + + + +%% arpeggios -slurUp = \override Slur #'direction = #UP -slurDown = \override Slur #'direction = #DOWN -slurNeutral = \revert Slur #'direction +% For drawing vertical chord brackets with \arpeggio +% This is a shorthand for the value of the print-function property +% of either Staff.Arpeggio or PianoStaff.Arpeggio, depending whether +% cross-staff brackets are desired. -slurDashed = { - \override Slur #'dash-period = #0.75 - \override Slur #'dash-fraction = #0.4 +arpeggio = #(make-music 'ArpeggioEvent) +arpeggioArrowUp = { + \revert Arpeggio #'stencil + \revert Arpeggio #'X-extent + \override Arpeggio #'arpeggio-direction = #UP +} +arpeggioArrowDown = { + \revert Arpeggio #'stencil + \revert Arpeggio #'X-extent + \override Arpeggio #'arpeggio-direction = #DOWN +} +arpeggioNormal = { + \revert Arpeggio #'stencil + \revert Arpeggio #'X-extent + \revert Arpeggio #'arpeggio-direction + \revert Arpeggio #'dash-definition } -slurDotted = { - \override Slur #'dash-period = #0.75 - \override Slur #'dash-fraction = #0.1 +arpeggioBracket = { + \revert Arpeggio #'X-extent + \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket +} +arpeggioParenthesis = { + \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur + \override Arpeggio #'X-extent = #ly:grob::stencil-width + \revert Arpeggio #'dash-definition } -slurSolid = { - \revert Slur #'dash-period - \revert Slur #'dash-fraction +arpeggioParenthesisDashed = { + \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur + \override Arpeggio #'X-extent = #ly:grob::stencil-width + \override Arpeggio #'dash-definition = #'((0 1 0.4 0.75)) } -phrasingSlurUp = \override PhrasingSlur #'direction = #UP -phrasingSlurDown = \override PhrasingSlur #'direction = #DOWN -phrasingSlurNeutral = \revert PhrasingSlur #'direction +%% auto beaming -phrasingSlurDashed = { - \override PhrasingSlur #'dash-period = #0.75 - \override PhrasingSlur #'dash-fraction = #0.4 -} -phrasingSlurDotted = { - \override PhrasingSlur #'dash-period = #0.75 - \override PhrasingSlur #'dash-fraction = #0.1 +autoBeamOn = \set autoBeaming = ##t +autoBeamOff = \set autoBeaming = ##f + + +%% balloon length + +balloonLengthOn = { + \override BalloonTextItem #'extra-spacing-width = #'(0 . 0) + \override BalloonTextItem #'extra-spacing-height = #'(-inf.0 . +inf.0) } -phrasingSlurSolid = { - \revert PhrasingSlur #'dash-period - \revert PhrasingSlur #'dash-fraction +balloonLengthOff = { + \override BalloonTextItem #'extra-spacing-width = #'(+inf.0 . -inf.0) + \override BalloonTextItem #'extra-spacing-height = #'(0 . 0) } -mergeDifferentlyDottedOn = { - \override Staff.NoteCollision #'merge-differently-dotted = ##t + +%% bass figures + +bassFigureExtendersOn = { + \set useBassFigureExtenders = ##t + \set Staff.useBassFigureExtenders = ##t } -mergeDifferentlyDottedOff = { - \revert Staff.NoteCollision #'merge-differently-dotted +bassFigureExtendersOff = { + \set useBassFigureExtenders = ##f + \set Staff.useBassFigureExtenders = ##f } +bassFigureStaffAlignmentDown = + \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN +bassFigureStaffAlignmentUp = + \override Staff.BassFigureAlignmentPositioning #'direction = #UP +bassFigureStaffAlignmentNeutral = + \revert Staff.BassFigureAlignmentPositioning #'direction -mergeDifferentlyHeadedOn = { - \override Staff.NoteCollision #'merge-differently-headed = ##t + +%% cadenzas + +cadenzaOn = { + \set Timing.timing = ##f + \set Timing.autoBeaming = ##f } -mergeDifferentlyHeadedOff = { - \revert Staff.NoteCollision #'merge-differently-headed + +cadenzaOff = { + \set Timing.timing = ##t + \set Timing.measurePosition = #ZERO-MOMENT + \set Timing.autoBeaming = ##t } -shiftOn = \override NoteColumn #'horizontal-shift = #1 -shiftOnn = \override NoteColumn #'horizontal-shift = #2 -shiftOnnn = \override NoteColumn #'horizontal-shift = #3 -shiftOff = \revert NoteColumn #'horizontal-shift -tieUp = \override Tie #'direction = #UP -tieDown = \override Tie #'direction = #DOWN -tieNeutral = \revert Tie #'direction +%% chord names -tieDashed = { - \override Tie #'dash-period = #0.75 - \override Tie #'dash-fraction = #0.4 +frenchChords = { + \set chordRootNamer = #(chord-name->italian-markup #t) + \set chordPrefixSpacer = #0.4 } -tieDotted = { - \override Tie #'dash-period = #0.75 - \override Tie #'dash-fraction = #0.1 +germanChords = { + \set chordRootNamer = #(chord-name->german-markup #t) + \set chordNoteNamer = #note-name->german-markup } -tieSolid = { - \revert Tie #'dash-period - \revert Tie #'dash-fraction +semiGermanChords = { + \set chordRootNamer = #(chord-name->german-markup #f) + \set chordNoteNamer = #note-name->german-markup } - -easyHeadsOn = { - \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil - \override NoteHead #'font-size = #-7 - \override NoteHead #'font-family = #'sans - \override NoteHead #'font-series = #'bold +italianChords = { + \set chordRootNamer = #(chord-name->italian-markup #f) + \set chordPrefixSpacer = #0.4 } - -easyHeadsOff = { - \revert NoteHead #'stencil - \revert NoteHead #'font-size - \revert NoteHead #'font-family - \revert NoteHead #'font-series +powerChords = { + \set chordNameExceptions = #powerChordExceptions } -aikenHeads = \set shapeNoteStyles = #'#(do re mi fa #f la ti) -sacredHarpHeads = \set shapeNoteStyles = #'#(fa #f la fa #f la mi) +%% compressFullBarRests + +compressFullBarRests = \set Score.skipBars = ##t +expandFullBarRests = \set Score.skipBars = ##f + + +%% dots + +dotsUp = \override Dots #'direction = #UP +dotsDown = \override Dots #'direction = #DOWN +dotsNeutral = \revert Dots #'direction + + +%% dynamics dynamicUp = { \override DynamicText #'direction = #UP \override DynamicLineSpanner #'direction = #UP } - dynamicDown = { \override DynamicText #'direction = #DOWN \override DynamicLineSpanner #'direction = #DOWN } - dynamicNeutral = { \revert DynamicText #'direction \revert DynamicLineSpanner #'direction } -dotsUp = \override Dots #'direction = #UP -dotsDown = \override Dots #'direction = #DOWN -dotsNeutral = \revert Dots #'direction - -tupletUp = \override TupletBracket #'direction = #UP -tupletDown = \override TupletBracket #'direction = #DOWN -tupletNeutral = \revert TupletBracket #'direction - -cadenzaOn = \set Timing.timing = ##f -cadenzaOff = { - \set Timing.timing = ##t - \set Timing.measurePosition = #ZERO-MOMENT -} - -% dynamic ly:dir? text script, articulation script ly:dir? -oneVoice = #(context-spec-music (make-voice-props-revert) 'Voice) -voiceOne = #(context-spec-music (make-voice-props-set 0) 'Voice) -voiceTwo = #(context-spec-music (make-voice-props-set 1) 'Voice) -voiceThree = #(context-spec-music (make-voice-props-set 2) 'Voice) -voiceFour = #(context-spec-music (make-voice-props-set 3) 'Voice) - -voiceOneStyle = { - \override NoteHead #'style = #'diamond - \override NoteHead #'color = #red - \override Stem #'color = #red - \override Beam #'color = #red -} -voiceTwoStyle = { - \override NoteHead #'style = #'triangle - \override NoteHead #'color = #blue - \override Stem #'color = #blue - \override Beam #'color = #blue -} -voiceThreeStyle = { - \override NoteHead #'style = #'xcircle - \override NoteHead #'color = #green - \override Stem #'color = #green - \override Beam #'color = #green -} -voiceFourStyle = { - \override NoteHead #'style = #'cross - \override NoteHead #'color = #magenta - \override Stem #'color = #magenta - \override Beam #'color = #magenta -} -voiceNeutralStyle = { - \revert NoteHead #'style - \revert NoteHead #'color - \revert Stem #'color - \revert Beam #'color -} - -teeny = { - \set fontSize = #-3 -} - -tiny = { - \set fontSize = #-2 -} +%% easy heads -small = { - \set fontSize = #-1 +easyHeadsOn = { + \override NoteHead #'stencil = #note-head::brew-ez-stencil + \override NoteHead #'font-size = #-8 + \override NoteHead #'font-family = #'sans + \override NoteHead #'font-series = #'bold } - -normalsize = { - \set fontSize = #0 +easyHeadsOff = { + \revert NoteHead #'stencil + \revert NoteHead #'font-size + \revert NoteHead #'font-family + \revert NoteHead #'font-series } -large = { - \set fontSize = #1 -} -huge = { - \set fontSize = #2 -} +%% endincipit %% End the incipit and print a ``normal line start''. endincipit = \context Staff { @@ -195,84 +183,49 @@ endincipit = \context Staff { \bar "" } -autoBeamOff = \set autoBeaming = ##f -autoBeamOn = \set autoBeaming = ##t -textLengthOn = { - \override TextScript #'extra-spacing-width = #'(0 . 0) - \override TextScript #'extra-spacing-height = #'(-inf.0 . +inf.0) -} +%% fermata markup -textLengthOff = { - \override TextScript #'extra-spacing-width = #'(+inf.0 . -inf.0) - \override TextScript #'extra-spacing-height = #'(0 . 0) -} +fermataMarkup = +#(make-music 'MultiMeasureTextEvent + 'tweaks (list + ;; Set the 'text based on the 'direction + (cons 'text (lambda (grob) + (if (eq? (ly:grob-property grob 'direction) DOWN) + (markup #:musicglyph "scripts.dfermata") + (markup #:musicglyph "scripts.ufermata")))) + (cons 'outside-staff-priority 40) + (cons 'outside-staff-padding 0))) -balloonLengthOn = { - \override BalloonTextItem #'extra-spacing-width = #'(0 . 0) - \override BalloonTextItem #'extra-spacing-height = #'(-inf.0 . +inf.0) -} - -balloonLengthOff = { - \override BalloonTextItem #'extra-spacing-width = #'(+inf.0 . -inf.0) - \override BalloonTextItem #'extra-spacing-height = #'(0 . 0) -} - - -showStaffSwitch = \set followVoice = ##t -hideStaffSwitch = \set followVoice = ##f +%% font sizes -expandFullBarRests = { - \set Score.skipBars = ##f -} - -compressFullBarRests = { - \set Score.skipBars = ##t -} +teeny = \set fontSize = #-3 +tiny = \set fontSize = #-2 +small = \set fontSize = #-1 +normalsize = \set fontSize = #0 +large = \set fontSize = #1 +huge = \set fontSize = #2 -numericTimeSignature = { - \override Staff.TimeSignature #'style = #'() -} -defaultTimeSignature = { - \revert Staff.TimeSignature #'style -} +%% glissando +glissando = #(make-music 'GlissandoEvent) -% For drawing vertical chord brackets with \arpeggio -% This is a shorthand for the value of the print-function property -% of either Staff.Arpeggio or PianoStaff.Arpeggio, depending whether -% cross-staff brackets are desired. -arpeggio = #(make-music 'ArpeggioEvent) +%% harmonics -arpeggioArrowUp = { - \revert Arpeggio #'stencil - \revert Arpeggio #'X-extent - \override Arpeggio #'arpeggio-direction = #UP -} -arpeggioArrowDown = { - \revert Arpeggio #'stencil - \revert Arpeggio #'X-extent - \override Arpeggio #'arpeggio-direction = #DOWN -} -arpeggioNormal = { - \revert Arpeggio #'stencil - \revert Arpeggio #'X-extent - \revert Arpeggio #'arpeggio-direction -} -arpeggioBracket = { - \revert Arpeggio #'X-extent - \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket -} -arpeggioParenthesis = { - \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur - \override Arpeggio #'X-extent = #ly:grob::stencil-width -} +harmonicsOn = +#(define-music-function (parser location) () + (_i "Set the default note head style to a diamond-shaped style.") + (override-head-style '(NoteHead TabNoteHead) 'harmonic)) +harmonicsOff = \defaultNoteHeads +harmonicNote = +#(define-music-function (parser location note) (ly:music?) + (_i "Print @var{note} with a diamond-shaped note head.") + (style-note-heads 'NoteHead 'harmonic note)) -glissando = #(make-music 'GlissandoEvent) -fermataMarkup = \markup { \musicglyph #"scripts.ufermata" } +%% hideNotes hideNotes = { % hide notes, accidentals, etc. @@ -283,8 +236,6 @@ hideNotes = { \override Beam #'transparent = ##t \override Accidental #'transparent = ##t } - - unHideNotes = { \revert Accidental #'transparent \revert Beam #'transparent @@ -294,77 +245,349 @@ unHideNotes = { \revert Dots #'transparent } -germanChords = { - \set chordRootNamer = #(chord-name->german-markup #t) - \set chordNoteNamer = #note-name->german-markup -} -semiGermanChords = { - \set chordRootNamer = #(chord-name->german-markup #f) - \set chordNoteNamer = #note-name->german-markup -} - -frenchChords = { - \set chordRootNamer = #(chord-name->italian-markup #t) - \set chordPrefixSpacer = #0.4 -} -italianChords = { - \set chordRootNamer = #(chord-name->italian-markup #f) - \set chordPrefixSpacer = #0.4 -} +%% improvisation improvisationOn = { \set squashedPosition = #0 \override NoteHead #'style = #'slash \override Accidental #'stencil = ##f + \override AccidentalCautionary #'stencil = ##f } - improvisationOff = { \unset squashedPosition \revert NoteHead #'style \revert Accidental #'stencil + \revert AccidentalCautionary #'stencil } -textSpannerUp = \override TextSpanner #'direction = #UP -textSpannerDown = \override TextSpanner #'direction = #DOWN -textSpannerNeutral = \revert TextSpanner #'direction +%% merging +mergeDifferentlyDottedOn = + \override Staff.NoteCollision #'merge-differently-dotted = ##t +mergeDifferentlyDottedOff = + \revert Staff.NoteCollision #'merge-differently-dotted +mergeDifferentlyHeadedOn = + \override Staff.NoteCollision #'merge-differently-headed = ##t +mergeDifferentlyHeadedOff = + \revert Staff.NoteCollision #'merge-differently-headed -bassFigureExtendersOn = { - \set useBassFigureExtenders = ##t - \set Staff.useBassFigureExtenders = ##t -} -bassFigureExtendersOff = { - \set useBassFigureExtenders = ##f - \set Staff.useBassFigureExtenders = ##f -} +%% numeric time signature -bassFigureStaffAlignmentDown = { - \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN -} +numericTimeSignature = \override Staff.TimeSignature #'style = #'numbered +defaultTimeSignature = \revert Staff.TimeSignature #'style -bassFigureStaffAlignmentUp = { - \override Staff.BassFigureAlignmentPositioning #'direction = #UP -} -bassFigureStaffAlignmentNeutral = { - \revert Staff.BassFigureAlignmentPositioning #'direction -} +%% palm mutes + +palmMuteOn = +#(define-music-function (parser location) () + (_i "Set the default note head style to a triangle-shaped style.") + (override-head-style 'NoteHead 'do)) +palmMuteOff = \defaultNoteHeads +palmMute = +#(define-music-function (parser location note) (ly:music?) + (_i "Print @var{note} with a triangle-shaped note head.") + (style-note-heads 'NoteHead 'do note)) + + +%% phrasing slurs + +% directions +phrasingSlurUp = \override PhrasingSlur #'direction = #UP +phrasingSlurDown = \override PhrasingSlur #'direction = #DOWN +phrasingSlurNeutral = \revert PhrasingSlur #'direction + +% dash-patterns (make-simple-dash-definition defined at top of file) +phrasingSlurDashPattern = +#(define-music-function (parser location dash-fraction dash-period) + (number? number?) + (_i "Set up a custom style of dash pattern for @var{dash-fraction} ratio of +line to space repeated at @var{dash-period} interval.") + #{ + \override PhrasingSlur #'dash-definition = + $(make-simple-dash-definition dash-fraction dash-period) + #}) +phrasingSlurDashed = + \override PhrasingSlur #'dash-definition = #'((0 1 0.4 0.75)) +phrasingSlurDotted = + \override PhrasingSlur #'dash-definition = #'((0 1 0.1 0.75)) +phrasingSlurHalfDashed = + \override PhrasingSlur #'dash-definition = #'((0 0.5 0.4 0.75) + (0.5 1 1 1)) +phrasingSlurHalfSolid = + \override PhrasingSlur #'dash-definition = #'((0 0.5 1 1) + (0.5 1 0.4 0.75)) +phrasingSlurSolid = + \revert PhrasingSlur #'dash-definition + + +%% point and click + +pointAndClickOn = +#(define-music-function (parser location) () + (_i "Enable generation of code in final-format (e.g. pdf) files to reference the +originating lilypond source statement; +this is helpful when developing a score but generates bigger final-format files.") + (ly:set-option 'point-and-click #t) + (make-music 'SequentialMusic 'void #t)) + +pointAndClickOff = +#(define-music-function (parser location) () + (_i "Suppress generating extra code in final-format (e.g. pdf) files to point +back to the lilypond source statement.") + (ly:set-option 'point-and-click #f) + (make-music 'SequentialMusic 'void #t)) + + +%% predefined fretboards + +predefinedFretboardsOff = + \set predefinedDiagramTable = ##f +predefinedFretboardsOn = + \set predefinedDiagramTable = #default-fret-table + + +%% shape note heads + +aikenHeads = \set shapeNoteStyles = #'#(do re miMirror fa sol la ti) +aikenHeadsMinor = \set shapeNoteStyles = #'#(la ti do re miMirror fa sol) +funkHeads = + \set shapeNoteStyles = #'#(doFunk reFunk miFunk faFunk solFunk laFunk tiFunk) +funkHeadsMinor = + \set shapeNoteStyles = #'#(laFunk tiFunk doFunk reFunk miFunk faFunk solFunk) +sacredHarpHeads = \set shapeNoteStyles = #'#(fa sol la fa sol la mi) +sacredHarpHeadsMinor = \set shapeNoteStyles = #'#(la mi fa sol la fa sol) +southernHarmonyHeads = + \set shapeNoteStyles = #'#(faThin sol laThin faThin sol laThin miThin) +southernHarmonyHeadsMinor = + \set shapeNoteStyles = #'#(laThin miThin faThin sol laThin faThin sol) +walkerHeads = + \set shapeNoteStyles = #'#(doWalker reWalker miWalker faWalker solFunk laWalker tiWalker) +walkerHeadsMinor = + \set shapeNoteStyles = #'#(laWalker tiWalker doWalker reWalker miWalker faWalker solFunk) + + +%% shifts + +shiftOn = \override NoteColumn #'horizontal-shift = #1 +shiftOnn = \override NoteColumn #'horizontal-shift = #2 +shiftOnnn = \override NoteColumn #'horizontal-shift = #3 +shiftOff = \revert NoteColumn #'horizontal-shift + + +%% slurs + +% directions +slurUp = \override Slur #'direction = #UP +slurDown = \override Slur #'direction = #DOWN +slurNeutral = \revert Slur #'direction + +% dash-patterns (make-simple-dash-definition defined at top of file) +slurDashPattern = +#(define-music-function (parser location dash-fraction dash-period) + (number? number?) + #{ + \override Slur #'dash-definition = + $(make-simple-dash-definition dash-fraction dash-period) + #}) +slurDashed = \override Slur #'dash-definition = #'((0 1 0.4 0.75)) +slurDotted = \override Slur #'dash-definition = #'((0 1 0.1 0.75)) +slurHalfDashed = \override Slur #'dash-definition = #'((0 0.5 0.4 0.75) + (0.5 1 1 1)) +slurHalfSolid = \override Slur #'dash-definition = #'((0 0.5 1 1) + (0.5 1 0.4 0.75)) +slurSolid = \revert Slur #'dash-definition + + +%% staff switches + +showStaffSwitch = \set followVoice = ##t +hideStaffSwitch = \set followVoice = ##f + + +%% stems -predefinedFretboardsOff = { - \set FretBoards.predefinedDiagramTable = ##f +stemUp = \override Stem #'direction = #UP +stemDown = \override Stem #'direction = #DOWN +stemNeutral = \revert Stem #'direction + + +%% tablature + +% switch to full notation +tabFullNotation = { + % time signature + \revert TabStaff.TimeSignature #'stencil + % stems (the half note gets a double stem) + \revert TabVoice.Stem #'length + \revert TabVoice.Stem #'no-stem-extend + \revert TabVoice.Stem #'flag-style + \revert TabVoice.Stem #'details + \revert TabVoice.Stem #'transparent + \override TabVoice.Stem #'stencil = #tabvoice::draw-double-stem-for-half-notes + \set autoBeaming = ##t + \revert NoteColumn #'ignore-collision + % beams, dots + \revert TabVoice.Beam #'stencil + \revert TabVoice.StemTremolo #'stencil + \revert TabVoice.Dots #'stencil + \revert TabVoice.Tie #'stencil + \revert TabVoice.Tie #'after-line-breaking + \revert TabVoice.RepeatTie #'stencil + \revert TabVoice.RepeatTie #'after-line-breaking + \revert TabVoice.LaissezVibrerTie #'stencil + \revert TabVoice.Slur #'stencil + \revert TabVoice.PhrasingSlur #'stencil + % tuplet stuff + \revert TabVoice.TupletBracket #'stencil + \revert TabVoice.TupletNumber #'stencil + % dynamic signs + \revert TabVoice.DynamicText #'transparent + \revert TabVoice.DynamicTextSpanner #'stencil + \revert TabVoice.DynamicTextSpanner #'stencil + \revert TabVoice.Hairpin #'transparent + % rests + \revert TabVoice.Rest #'stencil + \revert TabVoice.MultiMeasureRest #'stencil + \revert TabVoice.MultiMeasureRestNumber #'transparent + \revert TabVoice.MultiMeasureRestText #'transparent + % markups etc. + \revert TabVoice.Glissando #'stencil + \revert TabVoice.Script #'stencil + \revert TabVoice.TextScript #'stencil + \revert TabVoice.TextSpanner #'stencil + \revert TabStaff.Arpeggio #'stencil + \revert TabStaff.NoteColumn #'ignore-collision +} + +%tie/repeat tie behaviour +hideSplitTiedTabNotes = { + \override TabVoice.TabNoteHead #'(details tied-properties break-visibility) = #all-invisible + \override TabVoice.TabNoteHead #'(details tied-properties parenthesize) = ##f + \override TabVoice.TabNoteHead #'(details repeat-tied-properties note-head-visible) = ##f + \override TabVoice.TabNoteHead #'(details repeat-tied-properties parenthesize) = ##f +} + +showSplitTiedTabNotes = { + \override TabVoice.TabNoteHead #'(details tied-properties break-visibility) = #begin-of-line-visible + \override TabVoice.TabNoteHead #'(details tied-properties parenthesize) = ##t + \override TabVoice.TabNoteHead #'(details repeat-tied-properties note-head-visible) = ##t + \override TabVoice.TabNoteHead #'(details repeat-tied-properties parenthesize) = ##t +} + +%% text length + +textLengthOn = { + \override TextScript #'extra-spacing-width = #'(0 . 0) + \override TextScript #'extra-spacing-height = #'(-inf.0 . +inf.0) +} +textLengthOff = { + \override TextScript #'extra-spacing-width = #'(+inf.0 . -inf.0) + \override TextScript #'extra-spacing-height = #'(0 . 0) } -predefinedFretboardsOn = { - \set FretBoards.predefinedDiagramTable = #fretboard-table + +%% text spanners + +textSpannerUp = \override TextSpanner #'direction = #UP +textSpannerDown = \override TextSpanner #'direction = #DOWN +textSpannerNeutral = \revert TextSpanner #'direction + + +%% ties + +% directions +tieUp = \override Tie #'direction = #UP +tieDown = \override Tie #'direction = #DOWN +tieNeutral = \revert Tie #'direction + +% dash-patterns (make-simple-dash-definition defined at top of file) +tieDashPattern = +#(define-music-function (parser location dash-fraction dash-period) + (number? number?) + #{ + \override Tie #'dash-definition = + $(make-simple-dash-definition dash-fraction dash-period) + #}) +tieDashed = \override Tie #'dash-definition = #'((0 1 0.4 0.75)) +tieDotted = \override Tie #'dash-definition = #'((0 1 0.1 0.75)) +tieHalfDashed = \override Tie #'dash-definition = #'((0 0.5 0.4 0.75) + (0.5 1 1 1)) +tieHalfSolid = \override Tie #'dash-definition = #'((0 0.5 1 1) + (0.5 1 0.4 0.75)) +tieSolid = \revert Tie #'dash-definition + + +%% tuplets + +tupletUp = \override TupletBracket #'direction = #UP +tupletDown = \override TupletBracket #'direction = #DOWN +tupletNeutral = \revert TupletBracket #'direction + + +%% voice properties + +% dynamic ly:dir? text script, articulation script ly:dir? +voiceOne = #(context-spec-music (make-voice-props-set 0) 'Voice) +voiceTwo = #(context-spec-music (make-voice-props-set 1) 'Voice) +voiceThree = #(context-spec-music (make-voice-props-set 2) 'Voice) +voiceFour = #(context-spec-music (make-voice-props-set 3) 'Voice) +oneVoice = #(context-spec-music (make-voice-props-revert) 'Voice) + + +%% voice styles + +voiceOneStyle = { + \override NoteHead #'style = #'diamond + \override NoteHead #'color = #red + \override Stem #'color = #red + \override Beam #'color = #red +} +voiceTwoStyle = { + \override NoteHead #'style = #'triangle + \override NoteHead #'color = #blue + \override Stem #'color = #blue + \override Beam #'color = #blue } +voiceThreeStyle = { + \override NoteHead #'style = #'xcircle + \override NoteHead #'color = #green + \override Stem #'color = #green + \override Beam #'color = #green +} +voiceFourStyle = { + \override NoteHead #'style = #'cross + \override NoteHead #'color = #magenta + \override Stem #'color = #magenta + \override Beam #'color = #magenta +} +voiceNeutralStyle = { + \revert NoteHead #'style + \revert NoteHead #'color + \revert Stem #'color + \revert Beam #'color +} + + +%% x notes + +xNotesOn = +#(define-music-function (parser location) () + (_i "Set the default note head style to a cross-shaped style.") + (override-head-style '(TabNoteHead NoteHead) 'cross)) +xNotesOff = \defaultNoteHeads +xNote = +#(define-music-function (parser location note) (ly:music?) + (_i "Print @var{note} with a cross-shaped note head.") + (style-note-heads '(TabNoteHead NoteHead) 'cross note)) + -pointAndClickOff = #(define-music-function (parser location) () - (ly:set-option 'point-and-click #f) - (make-music 'SequentialMusic 'void #t)) +%% dead notes (these need to come after "x notes") -pointAndClickOn = #(define-music-function (parser location) () - (ly:set-option 'point-and-click #t) - (make-music 'SequentialMusic 'void #t)) +% Define aliases of cross-head notes for specific purposes +deadNotesOn = \xNotesOn +deadNotesOff = \xNotesOff +deadNote = #xNote diff --git a/ly/scale-definitions-init.ly b/ly/scale-definitions-init.ly index 4500920249..712be245bd 100644 --- a/ly/scale-definitions-init.ly +++ b/ly/scale-definitions-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" major = #`( diff --git a/ly/script-init.ly b/ly/script-init.ly index d1d28a54af..15a85d1584 100644 --- a/ly/script-init.ly +++ b/ly/script-init.ly @@ -1,55 +1,56 @@ -\version "2.12.0" +% script-init.ly +\version "2.14.0" % code char abbreviations -% -dashHat= "marcato" -dashPlus= "stopped" -dashDash= "tenuto" -dashBar= "staccatissimo" -dashLarger= "accent" -dashDot= "staccato" +dashHat = "marcato" +dashPlus = "stopped" +dashDash = "tenuto" +dashBar = "staccatissimo" +dashLarger = "accent" +dashDot = "staccato" dashUnderscore = "portato" harmonic = #(make-music 'HarmonicEvent) -thumb = #(make-articulation "thumb") accent = #(make-articulation "accent") +coda = #(make-articulation "coda") +downbow = #(make-articulation "downbow") +downmordent = #(make-articulation "downmordent") +downprall = #(make-articulation "downprall") espressivo = #(make-articulation "espressivo") -marcato = #(make-articulation "marcato") -staccatissimo = #(make-articulation "staccatissimo") -portato = #(make-articulation "portato") -signumcongruentiae = #(make-articulation "signumcongruentiae") fermata = #(make-articulation "fermata") -shortfermata = #(make-articulation "shortfermata") -longfermata = #(make-articulation "longfermata") -verylongfermata = #(make-articulation "verylongfermata") -stopped = #(make-articulation "stopped") -staccato = #(make-articulation "staccato") -tenuto = #(make-articulation "tenuto") -upbow = #(make-articulation "upbow") -downbow = #(make-articulation "downbow") +flageolet = #(make-articulation "flageolet") +halfopen = #(make-articulation "halfopen") lheel = #(make-articulation "lheel") -rheel = #(make-articulation "rheel") +lineprall = #(make-articulation "lineprall") +longfermata = #(make-articulation "longfermata") ltoe = #(make-articulation "ltoe") -rtoe = #(make-articulation "rtoe") -turn = #(make-articulation "turn") +marcato = #(make-articulation "marcato") +mordent = #(make-articulation "mordent") open = #(make-articulation "open") -flageolet = #(make-articulation "flageolet") -reverseturn = #(make-articulation "reverseturn") -trill = #(make-articulation "trill") +portato = #(make-articulation "portato") prall = #(make-articulation "prall") -mordent = #(make-articulation "mordent") -upmordent = #(make-articulation "upmordent") -downmordent = #(make-articulation "downmordent") -prallprall = #(make-articulation "prallprall") -prallup = #(make-articulation "prallup") pralldown = #(make-articulation "pralldown") -lineprall = #(make-articulation "lineprall") prallmordent = #(make-articulation "prallmordent") -upprall = #(make-articulation "upprall") -downprall = #(make-articulation "downprall") +prallprall = #(make-articulation "prallprall") +prallup = #(make-articulation "prallup") +reverseturn = #(make-articulation "reverseturn") +rheel = #(make-articulation "rheel") +rtoe = #(make-articulation "rtoe") segno = #(make-articulation "segno") -coda = #(make-articulation "coda") +shortfermata = #(make-articulation "shortfermata") +signumcongruentiae = #(make-articulation "signumcongruentiae") +snappizzicato = #(make-articulation "snappizzicato") +staccatissimo = #(make-articulation "staccatissimo") +staccato = #(make-articulation "staccato") +stopped = #(make-articulation "stopped") +tenuto = #(make-articulation "tenuto") +thumb = #(make-articulation "thumb") +trill = #(make-articulation "trill") +turn = #(make-articulation "turn") +upbow = #(make-articulation "upbow") +upmordent = #(make-articulation "upmordent") +upprall = #(make-articulation "upprall") varcoda = #(make-articulation "varcoda") - +verylongfermata = #(make-articulation "verylongfermata") diff --git a/ly/spanners-init.ly b/ly/spanners-init.ly index 7b26094e49..e8ff918b49 100644 --- a/ly/spanners-init.ly +++ b/ly/spanners-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" startGroup = #(make-span-event 'NoteGroupingEvent START) stopGroup = #(make-span-event 'NoteGroupingEvent STOP) @@ -18,56 +18,65 @@ startTrillSpan = #(make-span-event 'TrillSpanEvent START) stopTrillSpan = #(make-span-event 'TrillSpanEvent STOP) -% STOP: junkme! -cresc = { +episemInitium = #(make-span-event 'EpisemaEvent START) +episemFinis = #(make-span-event 'EpisemaEvent STOP) + + +cresc = #(make-music 'CrescendoEvent 'span-direction START 'span-type 'text 'span-text "cresc.") +endcresc = #(make-span-event 'CrescendoEvent STOP) +dim = #(make-music 'DecrescendoEvent 'span-direction START 'span-type 'text 'span-text "dim.") +enddim = #(make-span-event 'DecrescendoEvent STOP) +decresc = #(make-music 'DecrescendoEvent 'span-direction START 'span-type 'text 'span-text "decresc.") +enddecresc = #(make-span-event 'DecrescendoEvent STOP) + +% Deprecated functions: +% TODO: DEPRECATED_2_13_19 +deprecatedcresc = { #(ly:export (make-event-chord (list cr))) \once \set crescendoText = \markup { \italic "cresc." } \once \set crescendoSpanner = #'text } -dim = { +deprecateddim = { #(ly:export (make-event-chord (list decr))) \once \set decrescendoText = \markup { \italic "dim." } \once \set decrescendoSpanner = #'text } -enddim = { +deprecatedenddim = { #(ly:export (make-event-chord (list enddecr))) % \unset decrescendoText % \unset decrescendoSpanner } -endcresc = { +deprecatedendcresc = { #(ly:export (make-event-chord (list endcr))) % \unset crescendoText % \unset crescendoSpanner } + %%%%%%%%%%%%%%%% crescTextCresc = { \set crescendoText = \markup { \italic "cresc." } \set crescendoSpanner = #'text - \override DynamicTextSpanner #'style = #'dashed-line } dimTextDecresc = { \set decrescendoText = \markup { \italic "decresc." } \set decrescendoSpanner = #'text - \override DynamicTextSpanner #'style = #'dashed-line } dimTextDecr = { \set decrescendoText = \markup { \italic "decr." } \set decrescendoSpanner = #'text - \override DynamicTextSpanner #'style = #'dashed-line } dimTextDim = { \set decrescendoText = \markup { \italic "dim." } \set decrescendoSpanner = #'text - \override DynamicTextSpanner #'style = #'dashed-line } crescHairpin = { @@ -95,3 +104,5 @@ sostenutoOff = #(make-span-event 'SostenutoEvent STOP) %dim = \set crescendoText = "dim." newSpacingSection = #(make-event-chord (list (make-music 'SpacingSectionEvent))) + +breakDynamicSpan = #(make-music 'BreakDynamicSpanEvent) diff --git a/ly/string-tunings-init.ly b/ly/string-tunings-init.ly new file mode 100644 index 0000000000..0edc1cb424 --- /dev/null +++ b/ly/string-tunings-init.ly @@ -0,0 +1,135 @@ +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Carl D. Sorensen +%%%% +%%%% 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 . + +\version "2.14.0" + +%% A stringTuning is a list of pitches ordered by string number +%% from 1 to N. +%% Here we define a number of default string tunings. + +%% A scheme function for converting a chord to a string tuning +#(define (chord->tuning parser tuning-symbol chord) + (let* ((ev-chord (car (extract-named-music chord 'EventChord))) + (pitches (event-chord-pitches ev-chord))) + (ly:parser-define! parser tuning-symbol (reverse pitches)))) + +%% A music function for converting a chord to a string tuning. +%% The music argument for \makeStringTuning must be a chord in +%% absolute mode ordered from the highest string number to the +%% lowest string number + +makeStringTuning = +#(define-music-function (parser location tuning chord) + (symbol? ly:music?) + (_ "Convert @{chord} to a string tuning stored in @code{tuning}. +@{chord} must be in absolute pitches and should have the highest +string number (generally the lowest pitch) first. @code{tuning} +should be a string that will be converted to a symbol.") + (begin + (chord->tuning parser tuning chord) + (make-music 'SequentialMusic 'void #t))) + + +%% A music function for converting a chord to a string tuning +%% and setting the current context stringTunings property to +%% the newly-defined-string tuning. + +contextStringTuning = +#(define-music-function (parser location tuning chord) + (symbol? ly:music?) + (_ "Convert @{chord} to a string tuning stored in @code{tuning}, +and set @code{stringTunings} of the current context to the +newly-defined tuning. +@{chord} must be in absolute pitches and should have the highest +string number (generally the lowest pitch) first. @code{tuning} +should be a string that will be converted to a symbol.") + (begin + (chord->tuning parser tuning chord) + #{ + \set TabStaff.stringTunings = $(ly:parser-lookup parser tuning) + \set FretBoards.stringTunings = $(ly:parser-lookup parser tuning) + #})) + +%% A music function for converting an alist to string-tunings +makeDefaultStringTunings = +#(define-music-function (parser location default-tuning-alist) + (cheap-list?) + (_ "Define default string tunings for each element of +@code{default-tuning-alist}.") + (begin + (for-each (lambda (alist-entry) + (chord->tuning parser (car alist-entry) (cdr alist-entry))) + default-tuning-alist) + (make-music 'SequentialMusic 'void #t))) + +% tuning definitions require default pitchnames +\languageSaveAndChange #default-language + +%% Define alist of default string tunings +defaultStringTunings = +#`( + ;; guitar tunings + (guitar-tuning . ,#{#}) + (guitar-seven-string-tuning . ,#{#}) + (guitar-drop-d-tuning . ,#{#}) + (guitar-open-g-tuning . ,#{#}) + (guitar-open-d-tuning . ,#{#}) + (guitar-dadgad-tuning . ,#{#}) + (guitar-lute-tuning . ,#{#}) + (guitar-asus4-tuning . ,#{#}) + + ;; bass tunings + (bass-tuning . ,#{#}) + (bass-four-string-tuning . ,#{#}) + (bass-drop-d-tuning . ,#{#}) + (bass-five-string-tuning . ,#{#}) + (bass-six-string-tuning . ,#{#}) + + ;; mandolin tunings + (mandolin-tuning . ,#{#}) + + ;; tunings for 5-string banjo + (banjo-open-g-tuning . ,#{#}) + (banjo-c-tuning . ,#{#}) + (banjo-modal-tuning . ,#{#}) + (banjo-open-d-tuning . ,#{#}) + (banjo-open-dm-tuning . ,#{#}) + + ;; ukulele tunings + (ukulele-tuning . ,#{#}) + (ukulele-d-tuning . ,#{#}) + (tenor-ukulele-tuning . ,#{#}) + (baritone-ukulele-tuning . ,#{#}) + + ;; orchestral strings + (violin-tuning . ,#{#}) + (viola-tuning . ,#{#}) + (cello-tuning . ,#{#}) + (double-bass-tuning . ,#{#}) + ) + +%% convert 5-string banjo tuning to 4-string by removing the 5th string +#(define-public (four-string-banjo tuning) + (reverse (cdr (reverse tuning)))) + +%% make all of the default string tunings + +\makeDefaultStringTunings #defaultStringTunings + +% restore the language +\languageRestore + diff --git a/ly/suomi.ly b/ly/suomi.ly index 10e1cbf8cb..ca99791130 100644 --- a/ly/suomi.ly +++ b/ly/suomi.ly @@ -1,54 +1,23 @@ -% common finnish names for notes. "es" means flat, "is" means sharp -% -% by Heikki Junes <> -% based on svenska.ly by Mats Bengtsson. +%%%% common Finnish names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . -% 2001/08/28 Heikki Junes <> -% added bb and marked heses as `unusual' +%%%% Legacy file. (see scm/define-note-names.scm) -pitchnamesSuomi = #`( - (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (ces . ,(ly:make-pitch -1 0 FLAT)) - (c . ,(ly:make-pitch -1 0 NATURAL)) - (cis . ,(ly:make-pitch -1 0 SHARP)) - (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (des . ,(ly:make-pitch -1 1 FLAT)) - (d . ,(ly:make-pitch -1 1 NATURAL)) - (dis . ,(ly:make-pitch -1 1 SHARP)) - (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (es . ,(ly:make-pitch -1 2 FLAT)) - (e . ,(ly:make-pitch -1 2 NATURAL)) - (eis . ,(ly:make-pitch -1 2 SHARP)) - (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fes . ,(ly:make-pitch -1 3 FLAT)) - (f . ,(ly:make-pitch -1 3 NATURAL)) - (fis . ,(ly:make-pitch -1 3 SHARP)) - (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (ges . ,(ly:make-pitch -1 4 FLAT)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (gis . ,(ly:make-pitch -1 4 SHARP)) - (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) ;;non-standard name for asas - (as . ,(ly:make-pitch -1 5 FLAT)) - (a . ,(ly:make-pitch -1 5 NATURAL)) - (ais . ,(ly:make-pitch -1 5 SHARP)) - (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (bb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) ;; should be bes. Kept for downwards compatibility - (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) ;;non-standard name for bb - (b . ,(ly:make-pitch -1 6 FLAT)) - (h . ,(ly:make-pitch -1 6 NATURAL)) - (his . ,(ly:make-pitch -1 6 SHARP)) - (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) +\version "2.14.0" -pitchnames = \pitchnamesSuomi - -\version "2.12.0" - -#(ly:parser-set-note-names parser pitchnames) +\language "suomi" diff --git a/ly/svenska.ly b/ly/svenska.ly index 260638994f..587c9dc7d6 100644 --- a/ly/svenska.ly +++ b/ly/svenska.ly @@ -1,47 +1,23 @@ -% -% common Swedish names for notes. "ess" means flat, "iss" means sharp -% -% by Mats Bengtsson. +%%%% common Swedish names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . -pitchnamesSvenska = #`( - (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (cess . ,(ly:make-pitch -1 0 FLAT)) - (c . ,(ly:make-pitch -1 0 NATURAL)) - (ciss . ,(ly:make-pitch -1 0 SHARP)) - (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (dess . ,(ly:make-pitch -1 1 FLAT)) - (d . ,(ly:make-pitch -1 1 NATURAL)) - (diss . ,(ly:make-pitch -1 1 SHARP)) - (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (ess . ,(ly:make-pitch -1 2 FLAT)) - (e . ,(ly:make-pitch -1 2 NATURAL)) - (eiss . ,(ly:make-pitch -1 2 SHARP)) - (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fess . ,(ly:make-pitch -1 3 FLAT)) - (f . ,(ly:make-pitch -1 3 NATURAL)) - (fiss . ,(ly:make-pitch -1 3 SHARP)) - (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (gess . ,(ly:make-pitch -1 4 FLAT)) - (g . ,(ly:make-pitch -1 4 NATURAL)) - (giss . ,(ly:make-pitch -1 4 SHARP)) - (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (ass . ,(ly:make-pitch -1 5 FLAT)) - (a . ,(ly:make-pitch -1 5 NATURAL)) - (aiss . ,(ly:make-pitch -1 5 SHARP)) - (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - (hessess . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (b . ,(ly:make-pitch -1 6 FLAT)) - (h . ,(ly:make-pitch -1 6 NATURAL)) - (hiss . ,(ly:make-pitch -1 6 SHARP)) - (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) +%%%% Legacy file. (see scm/define-note-names.scm) -pitchnames = \pitchnamesSvenska -\version "2.12.0" +\version "2.14.0" -#(ly:parser-set-note-names parser pitchnames) +\language "svenska" diff --git a/ly/titling-init.ly b/ly/titling-init.ly index 60c07e6ef0..73fd17fe59 100644 --- a/ly/titling-init.ly +++ b/ly/titling-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" slashSeparator = \markup { \center-align @@ -10,12 +10,11 @@ slashSeparator = \markup { tagline = \markup { \with-url - %% todo: lilypond.org/music-engraving - #"http://lilypond.org/web/" + #"http://lilypond.org/" \line { %% 2014 = em dash. - + #(ly:export (format "Music engraving by LilyPond ~a~awww.lilypond.org" (lilypond-version) @@ -70,33 +69,36 @@ scoreTitleMarkup = \markup { \column { } %% Book first page and last page predicates -#(define (first-page layout props arg) - (define (ancestor layout) - "Return the topmost layout ancestor" - (let ((parent (ly:output-def-parent layout))) +#(define (book-first-page? layout props) + "Return #t iff the current page number, got from @code{props}, is the +book first one." + (define (ancestor layout) + "Return the topmost layout ancestor" + (let ((parent (ly:output-def-parent layout))) (if (not (ly:output-def? parent)) layout (ancestor parent)))) - (if (= (chain-assoc-get 'page:page-number props -1) - (ly:output-def-lookup (ancestor layout) 'first-page-number)) + (= (chain-assoc-get 'page:page-number props -1) + (ly:output-def-lookup (ancestor layout) 'first-page-number))) + +#(define (book-last-page? layout props) + "Return #t iff the current page number, got from @code{props}, is the +book last one." + (and (chain-assoc-get 'page:is-bookpart-last-page props #f) + (chain-assoc-get 'page:is-last-bookpart props #f))) + +#(define (first-page layout props arg) + (if (book-first-page? layout props) (interpret-markup layout props arg) empty-stencil)) #(define (last-page layout props arg) - (if (and (chain-assoc-get 'page:is-bookpart-last-page props #f) - (chain-assoc-get 'page:is-last-bookpart props #f)) + (if (book-last-page? layout props) (interpret-markup layout props arg) empty-stencil)) #(define (not-first-page layout props arg) - (define (ancestor layout) - "Return the topmost layout ancestor" - (let ((parent (ly:output-def-parent layout))) - (if (not (ly:output-def? parent)) - layout - (ancestor parent)))) - (if (not (= (chain-assoc-get 'page:page-number props -1) - (ly:output-def-lookup (ancestor layout) 'first-page-number))) + (if (not (book-first-page? layout props)) (interpret-markup layout props arg) empty-stencil)) @@ -114,7 +116,7 @@ scoreTitleMarkup = \markup { \column { %% unused #(define (not-single-page layout props arg) - (if (not (and (= (chain-assoc-get 'page:page-number props -1) + (if (not (and (= (chain-assoc-get 'page:page-number props -1) (ly:output-def-lookup layout 'first-page-number)) (chain-assoc-get 'page:last? props -1))) (interpret-markup layout props arg) @@ -126,8 +128,7 @@ scoreTitleMarkup = \markup { \column { empty-stencil)) #(define (print-page-number-check-first layout props arg) - (if (or (not (= (chain-assoc-get 'page:page-number props -1) - (ly:output-def-lookup layout 'first-page-number))) + (if (or (not (book-first-page? layout props)) (eq? (ly:output-def-lookup layout 'print-first-page-number) #t)) (create-page-number-stencil layout props arg) empty-stencil)) @@ -141,6 +142,8 @@ oddHeaderMarkup = \markup \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string } +%% evenHeaderMarkup would inherit the value of +%% oddHeaderMarkup if it were not defined here evenHeaderMarkup = \markup \fill-line { \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string @@ -161,3 +164,6 @@ oddFooterMarkup = \markup { } } +%% As long as evenFooterMarkup is unset, it inherits the value of +%% oddFooterMarkup, as if this were declared here: +% evenFooterMarkup = \oddFooterMarkup diff --git a/ly/toc-init.ly b/ly/toc-init.ly index dda4f31ab4..55b48b96c2 100644 --- a/ly/toc-init.ly +++ b/ly/toc-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.14.0" %% defined later, in a closure #(define-public (add-toc-item! markup-symbol text) @@ -31,6 +31,9 @@ } } +tocItemWithDotsMarkup = \markup \fill-with-pattern #1 #RIGHT . + \fromproperty #'toc:text \fromproperty #'toc:page + #(define-markup-list-command (table-of-contents layout props) () ( _i "Outputs the table of contents, using the paper variable @code{tocTitleMarkup} for its title, then the list of lines @@ -45,9 +48,10 @@ Usage: @code{\\markuplines \\table-of-contents}" ) (text (caddr toc-item))) (interpret-markup layout - (cons (list (cons 'toc:page - (markup #:page-ref label "XXX" "?")) - (cons 'toc:text text)) + (cons (list (cons 'toc:page + (markup #:with-link label #:page-ref label "XXX" "?")) + (cons 'toc:text (markup #:with-link label text)) + (cons 'toc:label label)) props) (ly:output-def-lookup layout toc-markup)))) (toc-items))))) diff --git a/ly/vlaams.ly b/ly/vlaams.ly index eb35589af4..92e0a0f843 100644 --- a/ly/vlaams.ly +++ b/ly/vlaams.ly @@ -1,62 +1,23 @@ -\version "2.12.0" %hier stond 2.1.36, mocht ik dat wel veranderen? - -%{ - - Common Flemish names for notes. "b" means flat (bemol), "k" means sharp (kruis). - Adapted from espanol.ly. - - English: a b c d e f g - Flemish: la si do re mi fa sol - -%} - -% contributed by Hendrik Maryns <> 06/06/2004 - - -pitchnamesVlaams = #`( - (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT)) - (dob . ,(ly:make-pitch -1 0 FLAT)) - (do . ,(ly:make-pitch -1 0 NATURAL)) - (dok . ,(ly:make-pitch -1 0 SHARP)) - (dokk . ,(ly:make-pitch -1 0 DOUBLE-SHARP)) - - (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT)) - (reb . ,(ly:make-pitch -1 1 FLAT)) - (re . ,(ly:make-pitch -1 1 NATURAL)) - (rek . ,(ly:make-pitch -1 1 SHARP)) - (rekk . ,(ly:make-pitch -1 1 DOUBLE-SHARP)) - - (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT)) - (mib . ,(ly:make-pitch -1 2 FLAT)) - (mi . ,(ly:make-pitch -1 2 NATURAL)) - (mik . ,(ly:make-pitch -1 2 SHARP)) - (mikk . ,(ly:make-pitch -1 2 DOUBLE-SHARP)) - - (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT)) - (fab . ,(ly:make-pitch -1 3 FLAT)) - (fa . ,(ly:make-pitch -1 3 NATURAL)) - (fak . ,(ly:make-pitch -1 3 SHARP)) - (fakk . ,(ly:make-pitch -1 3 DOUBLE-SHARP)) - - (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT)) - (solb . ,(ly:make-pitch -1 4 FLAT)) - (sol . ,(ly:make-pitch -1 4 NATURAL)) - (solk . ,(ly:make-pitch -1 4 SHARP)) - (solkk . ,(ly:make-pitch -1 4 DOUBLE-SHARP)) - - (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT)) - (lab . ,(ly:make-pitch -1 5 FLAT)) - (la . ,(ly:make-pitch -1 5 NATURAL)) - (lak . ,(ly:make-pitch -1 5 SHARP)) - (lakk . ,(ly:make-pitch -1 5 DOUBLE-SHARP)) - - (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) - (sib . ,(ly:make-pitch -1 6 FLAT)) - (si . ,(ly:make-pitch -1 6 NATURAL)) - (sik . ,(ly:make-pitch -1 6 SHARP)) - (sikk . ,(ly:make-pitch -1 6 DOUBLE-SHARP)) -) - -pitchnames = \pitchnamesVlaams - -#(ly:parser-set-note-names parser pitchnames) +%%%% common Flemish names for notes +%%%% This file is part of LilyPond, the GNU music typesetter. +%%%% +%%%% Copyright (C) 2010--2011 Valentin Villenave +%%%% +%%%% 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 . + +%%%% Legacy file. (see scm/define-note-names.scm) + +\version "2.14.0" + +\language "vlaams" diff --git a/make/abc-rules.make b/make/abc-rules.make new file mode 100644 index 0000000000..876d54e4b5 --- /dev/null +++ b/make/abc-rules.make @@ -0,0 +1,4 @@ +.SUFFIXES: .abc + +$(outdir)/%.ly: %.abc + $(PYTHON) $(ABC2LY) -o $@ $< diff --git a/make/abc-targets.make b/make/abc-targets.make new file mode 100644 index 0000000000..0f63330a21 --- /dev/null +++ b/make/abc-targets.make @@ -0,0 +1 @@ +default: diff --git a/make/abc-vars.make b/make/abc-vars.make new file mode 100644 index 0000000000..f8fda6c5b1 --- /dev/null +++ b/make/abc-vars.make @@ -0,0 +1,7 @@ +# rules for directories with ABC files. + +ABC_FILES = $(call src-wildcard,*.abc) +OUT_LY_FILES = $(sort ${ABC_FILES:%.abc=$(outdir)/%.ly}) +OUT_FILES = $(OUT_LY_FILES) + +EXTRA_DIST_FILES += $(ABC_FILES) diff --git a/make/doc-i18n-root-rules.make b/make/doc-i18n-root-rules.make index 1bb8bf6d7f..f510dedd7c 100644 --- a/make/doc-i18n-root-rules.make +++ b/make/doc-i18n-root-rules.make @@ -1 +1,57 @@ -# empty + +.SUFFIXES: .html .info .texi .texinfo + +$(outdir)/%.texi: $(src-dir)/%.texi + cp -p $< $@ + +$(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(TRANSLATION_LILY_IMAGES) + mkdir -p $(dir $@) + mkdir -p $(outdir)/$* + DEPTH=$(depth)/../ $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) --output=$(outdir)/$* $< + find $(outdir)/$* -name '*.html' | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/$(outdir) + +$(top-build-dir)/Documentation/$(outdir)/%-big-page.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(TRANSLATION_LILY_IMAGES) + DEPTH=$(depth) $(TEXI2HTML) -D bigpage $(TEXI2HTML_FLAGS) --output=$@ $< + +$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(outdir)/version.itexi $(outdir)/weblinks.itexi + DEPTH=$(depth) $(TEXI2HTML) $(TEXI2HTML_FLAGS) --output=$@ $< + +$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).pdf: $(outdir)/%.texi + cd $(outdir) && \ + texi2pdf $(TEXI2PDF_FLAGS) $(TEXINFO_PAPERSIZE_OPTION) $*.texi && \ + mkdir -p $(dir $@) && mv $*.pdf $@ + +$(outdir)/version.%: $(top-src-dir)/VERSION + $(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@ + +$(outdir)/weblinks.%: $(top-src-dir)/VERSION + $(PYTHON) $(top-src-dir)/scripts/build/create-weblinks-itexi.py > $@ + +$(outdir)/%.png: $(top-build-dir)/Documentation/$(outdir)/%.png + ln -f $< $@ + +$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map + $(buildscript-dir)/extract_texi_filenames -o $(XREF_MAPS_DIR) $(XREF_MAP_FLAGS) --master-map-file=$(XREF_MAPS_DIR)/$*.xref-map $< + +$(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) $(outdir)/pictures + +$(outdir)/pictures: + $(MAKE) -C $(top-build-dir)/Documentation/pictures WWW-1 + ln -sf $(top-build-dir)/Documentation/pictures/$(outdir) $@ + +$(TRANSLATION_LILY_IMAGES): $(MASTER_TEXI_FILES) + find $(outdir) \( -name 'lily-*.png' -o -name 'lily-*.ly' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/$(outdir) + find $(outdir) \( -name '*.??.idx' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/$(outdir) + touch $@ + +$(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi $(outdir)/weblinks.itexi + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $< + +$(outdir)/index.$(ISOLANG).html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT) +$(outdir)/index.$(ISOLANG).html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT) + +$(outdir)/index.$(ISOLANG).html: + DEPTH=$(depth) $(TEXI2HTML) $(TEXI2HTML_FLAGS) $(TEXI2HTML_SPLIT) --output=$(outdir)/ web.texi + find $(outdir)/ -name '*.html' | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/$(outdir) + +.SECONDARY: diff --git a/make/doc-i18n-root-targets.make b/make/doc-i18n-root-targets.make index 213e478fa8..e5ea060283 100644 --- a/make/doc-i18n-root-targets.make +++ b/make/doc-i18n-root-targets.make @@ -1,6 +1,18 @@ default: ifeq ($(out),www) -local-WWW-2: $(OUT_HTML_FILES) - $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/$(outdir) $(HTML_FILES) +ifneq ($(N0_PDF_FILES),) +local-WWW-1: $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES) +endif +ifeq ($(NO_PDF_FILES),) +local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) +endif + +local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET) +# FIXME: move the following line to a rule that generate the right file + (echo | grep -L 'UNTRANSLATED NODE: IGNORE ME' $(HTML_FILES)) | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/$(outdir) + +$(DOCUMENTATION_LOCALE_TARGET): + $(MAKE) -C $(depth)/Documentation/po out=www messages + touch $@ endif diff --git a/make/doc-i18n-root-vars.make b/make/doc-i18n-root-vars.make index fdf8664263..03bc122520 100644 --- a/make/doc-i18n-root-vars.make +++ b/make/doc-i18n-root-vars.make @@ -1,3 +1,72 @@ -HTML_PAGE_NAMES = index translations -HTML_FILES = $(HTML_PAGE_NAMES:%=%.html) -OUT_HTML_FILES = $(HTML_PAGE_NAMES:%=$(outdir)/%.html) +# ISOLANG must be defined + +LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py) + +CSS_SOURCE_FILES = $(shell ls $(top-src-dir)/Documentation/lilypond*.css) + +TELY_FILES := $(call src-wildcard,*.tely) +TEXI_FILES := $(call src-wildcard,*.texi) +MASTER_TEXI_FILES := $(TEXI_FILES) $(TELY_FILES:%.tely=$(outdir)/%.texi) + +TEXINFO_MANUALS =\ + $(TELY_FILES:%.tely=%)\ + $(TEXI_FILES:%.texi=%) + +TOPDIR_HTML_MANUALS = +SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\ + $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual))) +NOT_TOPDIR_HTML_MANUALS = $(foreach manual, $(SPLITTED_HTML_MANUALS),\ + $(if $(findstring $(manual), $(TOPDIR_HTML_MANUALS)),,$(manual))) + +OUT_HTML_FILES += $(UNSPLITTED_HTML_MANUALS:%=$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).html) \ + $(TOPDIR_HTML_MANUALS:%=$(outdir)/index.$(ISOLANG).html) +BIG_PAGE_HTML_FILES := $(SPLITTED_HTML_MANUALS:%=$(top-build-dir)/Documentation/$(outdir)/%-big-page.$(ISOLANG).html) +DEEP_HTML_FILES := $(NOT_TOPDIR_HTML_MANUALS:%=$(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html) +PDF_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).pdf) + +ITELY_FILES := $(call src-wildcard,*.itely) +ITEXI_FILES := $(call src-wildcard,*.itexi) + +DOCUMENTATION_INCLUDES = \ + -I $(top-src-dir)/Documentation/$(ISOLANG)/included \ + -I $(top-src-dir)/Documentation \ + -I $(top-build-dir)/Documentation/$(outdir) + +LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES) +MAKEINFO_FLAGS += --force --enable-encoding $(DOCUMENTATION_INCLUDES) +MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) + +# texi2html xref map files +# FIXME: duplicated in stepake/texinfo-vars.make make/doc-i18n-root-vars.make +XREF_MAPS_DIR=$(top-build-dir)/$(outdir)/xref-maps +XREF_MAPS_FILES=$(TEXINFO_MANUALS:%=$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map) +XREF_MAP_FLAGS += -I $(outdir) -I$(src-dir) + +WEB_MANUALS=web + +########### +ifneq ($(ISOLANG),) +TEXI2HTML_LANG = --lang=$(ISOLANG) +endif + +$(XREF_MAPS_DIR)/web.$(ISOLANG).xref-map:\ + XREF_MAP_FLAGS += --split=node + +TEXI2HTML_INIT = --init-file=$(top-src-dir)/Documentation/lilypond-texi2html.init + +TEXI2HTML_SPLIT = --prefix=index --split=section + +TEXI2HTML_INCLUDES += --I=. --I=$(src-dir) --I=$(outdir) $(DOCUMENTATION_INCLUDES) --I=$(XREF_MAPS_DIR) +TEXI2HTML_FLAGS += $(TEXI2HTML_INCLUDES) $(TEXI2HTML_LANG) $(TEXI2HTML_INIT) +TEXI2HTML = TOP_SRC_DIR=$(top-src-dir) PERL_UNICODE=SD $(TEXI2HTML_PROGRAM) +########### + +TEXI2PDF_FLAGS += --batch $(DOCUMENTATION_INCLUDES) +TEXI2PDF_FLAGS += -I $(LYS_OUTPUT_DIR) + +ifdef QUIET_BUILD +TEXI2PDF_FLAGS += -q +endif + +DOCUMENTATION_LOCALE_TARGET = $(outdir)/doc-po +TRANSLATION_LILY_IMAGES = $(outdir)/translation-lily-images diff --git a/make/doc-i18n-topdocs-rules.make b/make/doc-i18n-topdocs-rules.make deleted file mode 100644 index 874e7d5537..0000000000 --- a/make/doc-i18n-topdocs-rules.make +++ /dev/null @@ -1,14 +0,0 @@ -$(outdir)/%.html: $(outdir)/%.texi - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) $(TEXI2HTML_FLAGS) --output=$@ $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) - -$(outdir)/%.pdf: $(outdir)/%.texi - cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) $(TEXINFO_PAPERSIZE_OPTION) $(notdir $*).texi - -$(outdir)/version.%: $(top-src-dir)/VERSION - echo '@macro version'> $@ - echo $(TOPLEVEL_VERSION)>> $@ - echo '@end macro'>> $@ - -$(outdir)/%.txt: $(outdir)/%.texi - $(MAKEINFO) -I$(src-dir) -I$(outdir) -P $(outdir) --output=$@ --no-split --no-headers $< diff --git a/make/doc-i18n-topdocs-targets.make b/make/doc-i18n-topdocs-targets.make deleted file mode 100644 index d7e26a95ce..0000000000 --- a/make/doc-i18n-topdocs-targets.make +++ /dev/null @@ -1,9 +0,0 @@ -default: - -ifeq ($(out),www) -local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) - -local-WWW-2: $(HTML_FILES) - find $(outdir) -name '*.html' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/topdocs/$(outdir) NEWS.pdf - find $(outdir) \( -name 'lily-*.png' -o -name 'lily-*.ly' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/topdocs/$(outdir) -endif diff --git a/make/doc-i18n-topdocs-vars.make b/make/doc-i18n-topdocs-vars.make deleted file mode 100644 index 456f79d56a..0000000000 --- a/make/doc-i18n-topdocs-vars.make +++ /dev/null @@ -1,26 +0,0 @@ -OUTTXT_FILES= $(outdir)/NEWS.txt - -TELY_FILES := $(call src-wildcard,*.tely) -MASTER_TEXI_FILES := $(TELY_FILES:%.tely=$(outdir)/%.texi) -HTML_FILES := $(TELY_FILES:%.tely=$(outdir)/%.html) -PDF_FILES := $(TELY_FILES:%.tely=$(outdir)/%.pdf) - -DOCUMENTATION_INCLUDES = \ - -I $(top-src-dir)/Documentation/user \ - -I $(top-build-dir)/Documentation/user/$(outdir) - -LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES) -MAKEINFO_FLAGS += --force --enable-encoding $(DOCUMENTATION_INCLUDES) -MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) - -# texi2html flags -TEXI2HTML_INIT= --init-file=$(top-src-dir)/lilypond-texi2html.init -TEXI2HTML_LANG=--lang=$(ISOLANG) -TEXI2HTML_FLAGS += $(TEXI2HTML_LANG) $(DOCUMENTATION_INCLUDES) -TEXI2HTML = LANG= $(TEXI2HTML_PROGRAM) - -TEXI2PDF_FLAGS += --batch $(DOCUMENTATION_INCLUDES) - -ifdef QUIET_BUILD -TEXI2PDF_FLAGS += -q -endif diff --git a/make/doc-i18n-user-rules.make b/make/doc-i18n-user-rules.make deleted file mode 100644 index e02da6f516..0000000000 --- a/make/doc-i18n-user-rules.make +++ /dev/null @@ -1,39 +0,0 @@ -$(top-build-dir)/Documentation/user/$(outdir)/%/index.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(TRANSLATION_LILY_IMAGES) - mkdir -p $(dir $@) - mkdir -p $(outdir)/$* - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) $(TEXI2HTML_FLAGS) --output=$(outdir)/$* --prefix=index --split=section $(TEXI2HTML_INIT) $< - find $(outdir)/$* -name '*.html' | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | xargs $(buildscript-dir)/html-gettext $(ISOLANG) - find $(outdir)/$* -name '*.html' | xargs grep -L --label="" 'UNTRANSLATED NODE: IGNORE ME' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/user/$(outdir) - - -$(top-build-dir)/Documentation/user/$(outdir)/%-big-page.$(ISOLANG).html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map $(TRANSLATION_LILY_IMAGES) - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) -D bigpage $(TEXI2HTML_FLAGS) --output=$@ $(TEXI2HTML_INIT) $< - $(buildscript-dir)/html-gettext $(ISOLANG) $@ - - -$(outdir)/%.pdftexi: $(outdir)/%.texi - $(buildscript-dir)/texi-gettext $(ISOLANG) $< - -$(top-build-dir)/Documentation/user/$(outdir)/%.$(ISOLANG).pdf: $(outdir)/%.pdftexi - cd $(outdir) && \ - texi2pdf $(TEXI2PDF_FLAGS) $(TEXINFO_PAPERSIZE_OPTION) $*.pdftexi && \ - mkdir -p $(dir $@) && mv $*.pdf $@ - -$(outdir)/version.%: $(top-src-dir)/VERSION - echo '@macro version'> $@ - echo $(TOPLEVEL_VERSION)>> $@ - echo '@end macro'>> $@ - -$(outdir)/%.png: $(top-build-dir)/Documentation/user/$(outdir)/%.png - ln -f $< $@ - -$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map - $(buildscript-dir)/extract_texi_filenames -o $(XREF_MAPS_DIR) --master-map-file=$(XREF_MAPS_DIR)/$*.xref-map $< - -$(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) - -$(TRANSLATION_LILY_IMAGES): $(MASTER_TEXI_FILES) - find $(outdir) \( -name 'lily-*.png' -o -name 'lily-*.ly' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/user/$(outdir) - touch $@ - -.SECONDARY: diff --git a/make/doc-i18n-user-targets.make b/make/doc-i18n-user-targets.make deleted file mode 100644 index 85cc0b1927..0000000000 --- a/make/doc-i18n-user-targets.make +++ /dev/null @@ -1,16 +0,0 @@ -default: - -ifeq ($(out),www) -ifeq ($(ISOLANG),ja) -local-WWW-1: $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES) -endif -ifneq ($(ISOLANG),ja) -local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) -endif - -local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET) - -$(DOCUMENTATION_LOCALE_TARGET): - $(MAKE) -C $(depth)/Documentation/po out=www messages - touch $@ -endif diff --git a/make/doc-i18n-user-vars.make b/make/doc-i18n-user-vars.make deleted file mode 100644 index ff2e2afebe..0000000000 --- a/make/doc-i18n-user-vars.make +++ /dev/null @@ -1,46 +0,0 @@ -# ISOLANG must be defined - -LANGS = $(shell $(PYTHON) $(buildscript-dir)/langdefs.py) - -CSS_SOURCE_FILES = $(shell ls $(top-src-dir)/Documentation/lilypond*.css) -SOURCE_PNG_IMAGES = $(shell ls $(top-src-dir)/Documentation/user/*.png) -OUT_PNG_IMAGES = \ - $(SOURCE_PNG_IMAGES:$(top-src-dir)/Documentation/user/%.png=$(outdir)/%.png) \ - $(outdir)/context-example.png - -TELY_FILES := $(call src-wildcard,*.tely) -MASTER_TEXI_FILES := $(TELY_FILES:%.tely=$(outdir)/%.texi) -BIG_PAGE_HTML_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/user/$(outdir)/%-big-page.$(ISOLANG).html) -DEEP_HTML_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/user/$(outdir)/%/index.$(ISOLANG).html) -PDF_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/user/$(outdir)/%.$(ISOLANG).pdf) - -ITELY_FILES := $(call src-wildcard,*.itely) -ITEXI_FILES := $(call src-wildcard,*.itexi) - -DOCUMENTATION_INCLUDES = \ - -I $(top-src-dir)/Documentation/user \ - -I $(top-build-dir)/Documentation/user/$(outdir) - -LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES) -MAKEINFO_FLAGS += --force --enable-encoding $(DOCUMENTATION_INCLUDES) -MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) - -# texi2html xref map files -XREF_MAPS_DIR=$(top-build-dir)/out/xref-maps -XREF_MAPS_FILES=$(TELY_FILES:%.tely=$(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map) - -# texi2html flags -TEXI2HTML_INIT= --init-file=$(top-src-dir)/Documentation/lilypond-texi2html.init -TEXI2HTML_LANG=--lang=$(ISOLANG) -TEXI2HTML_FLAGS += $(TEXI2HTML_LANG) $(DOCUMENTATION_INCLUDES) \ - -I $(XREF_MAPS_DIR) -TEXI2HTML = PERL_UNICODE=SD LANG= $(TEXI2HTML_PROGRAM) - -TEXI2PDF_FLAGS += --batch $(DOCUMENTATION_INCLUDES) - -ifdef QUIET_BUILD -TEXI2PDF_FLAGS += -q -endif - -DOCUMENTATION_LOCALE_TARGET = $(outdir)/doc-po -TRANSLATION_LILY_IMAGES = $(outdir)/translation-lily-images diff --git a/make/generic-vars.make b/make/generic-vars.make index 44cb80ccaa..c5831d7ec5 100644 --- a/make/generic-vars.make +++ b/make/generic-vars.make @@ -33,7 +33,7 @@ EXTRA_DOC_FILES = \ Documentation/out/*.txt\ Documentation/tex/*.doc\ Documentation/tex/*.bib\ - Documentation/pictures/out/lelie_logo.gif\ + Documentation/logo/out/lelie_logo.gif\ input\ INSTALLED_EXTRA_DOC_FILES = $(addprefix $(prefix:/%=%)/doc/lilypond/, $(EXTRA_DOC_FILES)) diff --git a/make/lilypond-book-rules.make b/make/lilypond-book-rules.make new file mode 100644 index 0000000000..e5a03790b4 --- /dev/null +++ b/make/lilypond-book-rules.make @@ -0,0 +1,56 @@ +.SUFFIXES: .html .xml .lytex .tex .latex .lyxml .tely .texi .texinfo + +############## HTML ######################### + +$(outdir)/%.html: %.html + $(LILYPOND_BOOK_COMMAND) -o $(outdir) $< + +$(outdir)/%.html: %.htmly + $(LILYPOND_BOOK_COMMAND) -o $(outdir) $< + +$(outdir)/%.html: %.xml + $(LILYPOND_BOOK_COMMAND) -o $(outdir) $< + + +############## LaTeX ######################## + +$(outdir)/%.tex: %.lytex + $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $< + +$(outdir)/%.tex: %.tex + $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $< + +$(outdir)/%.tex: %.latex + $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $< + +# Add the tex => pdf rule only if we have dblatex +ifeq (,$(findstring pdflatex,$(MISSING_OPTIONAL))) +$(outdir)/%.pdf: $(outdir)/%.tex + cd $(outdir) && $(PDFLATEX) $(notdir $<) +endif + +############## Texinfo ###################### + +$(outdir)/%.texi: %.texi + $(LILYPOND_BOOK_COMMAND) -o $(outdir) $< + +$(outdir)/%.texi: %.itexi + $(LILYPOND_BOOK_COMMAND) -o $(outdir) $< + +$(outdir)/%.texi: %.texinfo + $(LILYPOND_BOOK_COMMAND) -o $(outdir) $< + +$(outdir)/%.texi: %.tely + $(LILYPOND_BOOK_COMMAND) -o $(outdir) $< + + +############## DocBook ###################### + +$(outdir)/%.xml: %.lyxml + $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $< + +# Add the xml => pdf rule only if we have dblatex +ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL))) +$(outdir)/%.pdf: $(outdir)/%.xml + cd $(outdir) && $(DBLATEX) $(notdir $<) +endif diff --git a/make/lilypond-book-targets.make b/make/lilypond-book-targets.make new file mode 100644 index 0000000000..0f63330a21 --- /dev/null +++ b/make/lilypond-book-targets.make @@ -0,0 +1 @@ +default: diff --git a/make/lilypond-book-vars.make b/make/lilypond-book-vars.make new file mode 100644 index 0000000000..3627b50054 --- /dev/null +++ b/make/lilypond-book-vars.make @@ -0,0 +1,62 @@ +# rules for directories with html files. + +LILYPOND_BOOK_COMMAND = LILYPOND_VERSION=$(TOPLEVEL_VERSION) \ + $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) \ + --process='$(LILYPOND_BOOK_PROCESS) \ + $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) \ + $(LILYPOND_BOOK_FLAGS) + +HTML_FILES = $(call src-wildcard,*.html) +HTMLY_FILES = $(call src-wildcard,*.htmly) +XML_FILES = $(call src-wildcard,*.xml) +LYTEX_FILES = $(call src-wildcard,*.lytex) +LATEX_FILES = $(call src-wildcard,*.latex) +TEX_FILES = $(call src-wildcard,*.tex) +TEXI_FILES = $(call src-wildcard,*.texi) +TEXINFO_FILES = $(call src-wildcard,*.texinfo) +TELY_FILES = $(call src-wildcard,*.tely) +DOCBOOK_FILES = $(call src-wildcard,*.lyxml) + +OUT_HTML_FILES = ${HTML_FILES:%.html=$(outdir)/%.html} +OUT_HTMLY_FILES = ${HTML_FILES:%.htmly=$(outdir)/%.html} +OUT_XML_FILES = ${XML_FILES:%.xml=$(outdir)/%.html} +# If we have pdflatex, create the pdf, otherwise only the .tex file! +ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL))) +OUT_LYTEX_FILES = ${LYTEX_FILES:%.lytex=$(outdir)/%.pdf} +OUT_LATEX_FILES = ${LATEX_FILES:%.latex=$(outdir)/%.pdf} +OUT_TEX_FILES = ${TEX_FILES:%.tex=$(outdir)/%.pdf} +else +OUT_LYTEX_FILES = ${LYTEX_FILES:%.lytex=$(outdir)/%.tex} +OUT_LATEX_FILES = ${LATEX_FILES:%.latex=$(outdir)/%.tex} +OUT_TEX_FILES = ${TEX_FILES:%.tex=$(outdir)/%.tex} +endif +OUT_TEXI_FILES = ${TEXI_FILES:%.texi=$(outdir)/%.html} +OUT_TEXINFO_FILES = ${TEXINFO_FILES:%.texinfo=$(outdir)/%.html} +OUT_TELY_FILES = ${TELY_FILES:%.tely=$(outdir)/%.html} +# If we have dblatex, create the pdf, otherwise only the .xml file! +ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL))) +OUT_DOCBOOK_FILES = ${DOCBOOK_FILES:%.lyxml=$(outdir)/%.pdf} +else +OUT_DOCBOOK_FILES = ${DOCBOOK_FILES:%.lyxml=$(outdir)/%.xml} +endif + +OUT_FILES = $(sort $(OUT_HTML_FILES) \ + $(OUT_HTMLY_FILES) \ + $(OUT_XML_FILES) \ + $(OUT_LYTEX_FILES) \ + $(OUT_LATEX_FILES) \ + $(OUT_TEX_FILES) \ + $(OUT_TEXI_FILES) \ + $(OUT_TEXINFO_FILES) \ + $(OUT_TELY_FILES) \ + $(OUT_DOCBOOK_FILES)) + +ALL_SOURCES +=\ + $(HTML_FILES)\ + $(HTMLY_FILES)\ + $(XML_FILES)\ + $(LYTEX_FILES)\ + $(LATEX_FILES)\ + $(TEX_FILES)\ + $(TEXINFO_FILES)\ + $(DOCBOOK_FILES) diff --git a/make/lilypond-vars.make b/make/lilypond-vars.make index ac5dae67ad..cf1bc11203 100644 --- a/make/lilypond-vars.make +++ b/make/lilypond-vars.make @@ -22,15 +22,18 @@ export PYTHONPATH:=$(top-build-dir)/python/$(outconfbase):$(PYTHONPATH) the-script-dir=$(wildcard $(script-dir)) ABC2LY = $(script-dir)/abc2ly.py +MIDI2LY = $(script-dir)/midi2ly.py MUSICXML2LY = $(script-dir)/musicxml2ly.py CONVERT_LY = $(script-dir)/convert-ly.py LILYPOND_BOOK = $(script-dir)/lilypond-book.py LILYPOND_BOOK_INCLUDES = -I $(src-dir)/ -I $(outdir) -I $(input-dir) \ - -I $(input-dir)/lsr/ -I $(input-dir)/regression/ -I $(input-dir)/manual/ \ - -I $(input-dir)/tutorial/ -I $(top-build-dir)/mf/$(outconfbase)/ \ - -I $(top-build-dir)/mf/out/ -I $(top-src-dir)/input/manual \ - -I $(top-src-dir)/Documentation + -I $(top-src-dir)/Documentation -I $(top-src-dir)/Documentation/snippets \ + -I $(input-dir)/regression/ -I $(top-src-dir)/Documentation/included/ \ + -I $(top-build-dir)/mf/$(outconfbase)/ \ + -I $(top-build-dir)/mf/out/ \ + -I $(top-src-dir)/Documentation/pictures \ + -I $(top-build-dir)/Documentation/pictures/$(outdir) ## override from cmd line to speed up. ANTI_ALIAS_FACTOR=2 diff --git a/make/ly-rules.make b/make/ly-rules.make index 52ee4b015e..0df0643ee3 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -2,7 +2,7 @@ # TODO: fix hardcoded out/ ? LYS_OUTPUT_OPTION= --lily-output-dir $(LYS_OUTPUT_DIR) -LYS_OUTPUT_DIR=$(top-build-dir)/out/lybook-db/ +LYS_OUTPUT_DIR=$(top-build-dir)/out/lybook-db LILYPOND_BOOK_FLAGS += $(LYS_OUTPUT_OPTION) $(outdir)/%.latex: %.doc $(INIT_LY_SOURCES) $(SCHEME_SOURCES) LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) $(LILYPOND_BOOK_FLAGS) $< @@ -15,7 +15,9 @@ $(i) $(i): endef -$(eval $(firstword $(MASTER_TEXI_FILES)): $(foreach i, $(wordlist 2, $(words $(MASTER_TEXI_FILES)), $(MASTER_TEXI_FILES)),$(CHAIN_RULE))) +$(eval $(firstword $(TEXI_FILES_FROM_TELY)):\ + $(foreach i, $(wordlist 2, $(words $(TEXI_FILES_FROM_TELY)),\ + $(TEXI_FILES_FROM_TELY)),$(CHAIN_RULE))) # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir. # it is not, for --srcdir builds @@ -33,14 +35,8 @@ $(outdir)/%.html.omf: %.tely $(outdir)/%.pdf.omf: %.tely $(call GENERATE_OMF,pdf) -$(outdir)/%.ps.gz.omf: %.tely - $(call GENERATE_OMF,ps.gz) - $(outdir)/%.html.omf: $(outdir)/%.texi $(call GENERATE_OMF,html) $(outdir)/%.pdf.omf: $(outdir)/%.texi $(call GENERATE_OMF,pdf) - -$(outdir)/%.ps.gz.omf: $(outdir)/%.texi - $(call GENERATE_OMF,ps.gz) diff --git a/make/ly-vars.make b/make/ly-vars.make index c3c8a24ba4..7d572adb75 100644 --- a/make/ly-vars.make +++ b/make/ly-vars.make @@ -1,8 +1,7 @@ # rules for directories with LilyPond files. TELY_FILES := $(call src-wildcard,*.tely) -MASTER_TEXI_FILES := $(sort $(TELY_FILES:%.tely=$(outdir)/%.texi))\ - $(OUT_MASTER_TEXI_FILES) +TEXI_FILES_FROM_TELY := $(TELY_FILES:%.tely=$(outdir)/%.texi) $(TEXI_FILES_FROM_TELY) OMF_FILES += $(foreach format, html pdf, $(foreach f, $(TELY_FILES), $(outdir)/$(f:.tely=.$(format)).omf)) diff --git a/make/lysdoc-rules.make b/make/lysdoc-rules.make index 6745887514..5c38f7d4ab 100644 --- a/make/lysdoc-rules.make +++ b/make/lysdoc-rules.make @@ -1,3 +1,2 @@ $(outdir)/collated-files.tely: $(COLLATED_FILES) - $(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" $^ - + $(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" --author="$(AUTHOR)" $^ diff --git a/make/lysdoc-targets.make b/make/lysdoc-targets.make index 7f58e9692f..e39fa1c58b 100644 --- a/make/lysdoc-targets.make +++ b/make/lysdoc-targets.make @@ -16,6 +16,6 @@ local-test: echo -e '\n\n\n' ; \ (cd $(top-src-dir) && git diff ) ; \ fi > $(outdir)/tree.gittxt - $(MAKE) LILYPOND_BOOK_LILYPOND_FLAGS="-dbackend=eps --formats=ps $(LILYPOND_JOBS) -dseparate-log-files -dinclude-eps-fonts -dgs-load-lily-fonts --header=texidoc -I $(top-src-dir)/input/manual -ddump-profile -dcheck-internal-types -ddump-signatures -danti-alias-factor=1" LILYPOND_BOOK_VERBOSE= $(outdir)/collated-files.html LYS_OUTPUT_DIR=$(top-build-dir)/out/lybook-testdb + $(MAKE) LILYPOND_BOOK_LILYPOND_FLAGS="-dbackend=eps --formats=ps $(LILYPOND_JOBS) -dseparate-log-files -dinclude-eps-fonts -dgs-load-lily-fonts --header=texidoc -I $(top-src-dir)/Documentation/included/ -ddump-profile -dcheck-internal-types -ddump-signatures -danti-alias-factor=1" LILYPOND_BOOK_VERBOSE= $(outdir)/collated-files.html LYS_OUTPUT_DIR=$(top-build-dir)/out/lybook-testdb rsync -L -a --exclude 'out-*' --exclude 'out' --exclude mf --exclude source --exclude mf $(top-build-dir)/out/share $(outdir) diff --git a/make/lysdoc-vars.make b/make/lysdoc-vars.make index a2874b271b..337460c3da 100644 --- a/make/lysdoc-vars.make +++ b/make/lysdoc-vars.make @@ -1,6 +1,11 @@ TITLE=LYs Doc +AUTHOR=Han-Wen Nienhuys and Jan Nieuwenhuizen ifeq ($(COLLATED_FILES),) COLLATED_FILES = $(sort $(TEXINFO_SOURCES) $(LY_FILES) $(OUT_LY_FILES) ) endif + +ifeq ($(out),test) +LILYPOND_BOOK_FLAGS += --use-source-file-names +endif diff --git a/make/midi-rules.make b/make/midi-rules.make new file mode 100644 index 0000000000..219eb262ce --- /dev/null +++ b/make/midi-rules.make @@ -0,0 +1,18 @@ +.SUFFIXES: .midi + +$(outdir)/%.ly: %.midi + $(PYTHON) $(MIDI2LY) -o $(outdir) $< + +$(outdir)/%.midi: %.ly $(LILYPOND_BINARY) + touch $(foreach f, $(HEADER_FIELDS), $(outdir)/$*.$f) + $(LILYPOND_BINARY) $(HEADER_FIELDS:%=-H %) -o $(outdir) $< + +$(outdir)/%-midi.ly: $(outdir)/%.midi $(MIDI2LY) + (echo '\header {'; for f in $(HEADER_FIELDS); do echo -n $$f'="'; cat $(outdir)/$*.$$f; echo '"'; done; echo '}') > $(outdir)/$*.header + $(PYTHON) $(MIDI2LY) $(shell cat $(outdir)/$*.options) --include-header=$(outdir)/$*.header -o $(outdir) $< + +$(outdir)/%.diff: %.ly $(outdir)/%-midi.ly + $(DIFF) -puN $(MIDI2LY_IGNORE_RES) $^ > $@ || cat $@ + +$(outdir)/midi.diff: $(OUT_DIFF_FILES) + cat $(OUT_DIFF_FILES) > $@ diff --git a/make/midi-targets.make b/make/midi-targets.make new file mode 100644 index 0000000000..e462465a9e --- /dev/null +++ b/make/midi-targets.make @@ -0,0 +1,7 @@ +default: + +##local-test: $(outdir)/midi.diff + +check: $(outdir)/midi.diff local-WWW-1 local-WWW-2 + +test: check diff --git a/make/midi-vars.make b/make/midi-vars.make new file mode 100644 index 0000000000..7b3a27613f --- /dev/null +++ b/make/midi-vars.make @@ -0,0 +1,10 @@ +MIDI_FILES = $(call src-wildcard,*.midi) +HEADER_FILES = $(call src-wildcard,*.header) +OUT_LY_FILES = $(sort ${MIDI_FILES:%.midi=$(outdir)/%.ly} ${LY_FILES:%.ly=$(outdir)/%-midi.ly} ) +OUT_FILES = $(OUT_LY_FILES) +HEADER_FIELDS = texidoc options +OUT_DIFF_FILES = ${LY_FILES:%.ly=$(outdir)/%.diff} +MIDI2LY_IGNORE_RES = -I 'Lily was here' -I '^\\version ' -I 'TEXT_EVENT.*GNU LilyPond' -I '^% included from' +DIFF = diff + +EXTRA_DIST_FILES += $(MIDI_FILES) $(HEADER_FILES) diff --git a/make/mutopia-targets.make b/make/mutopia-targets.make index f89fcc4060..4eeb80ed0c 100644 --- a/make/mutopia-targets.make +++ b/make/mutopia-targets.make @@ -4,7 +4,7 @@ .PRECIOUS: $(outdir)-letter/%.ps -all: $(OUT_FILES) +all: ifeq ($(out),www) local-WWW-1: $(ly_examples) $(pdf_examples) $(png_examples) diff --git a/make/mutopia-vars.make b/make/mutopia-vars.make index 3cd87a7d05..60add179f2 100644 --- a/make/mutopia-vars.make +++ b/make/mutopia-vars.make @@ -7,9 +7,6 @@ include $(make-dir)/lilypond-vars.make SCORE_LY_FILES = $(shell cd $(src-dir) && fgrep -l score *.ly) ILY_FILES = $(call src-wildcard,*.ily) -M4_FILES = $(call src-wildcard,*.m4) -LYM4_FILES = $(call src-wildcard,*.lym4) -EXTRA_DIST_FILES += $(M4_FILES) $(LYM4_FILES) ly_examples=$(addprefix $(outdir)/, $(addsuffix .ly, $(examples))) ly_examples+= $(ILY_FILES:%.ily=$(outdir)/%.ily) @@ -24,7 +21,4 @@ html_subdirs=$(addprefix --subdirs ,$(SUBDIRS)) name-stem= $(notdir $(basename $<)) -OUT_FILES = $(addprefix $(outdir)/,$(M4_FILES:%.m4=%)) \ - $(addprefix $(outdir)/,$(LYM4_FILES:%.lym4=%.ly)) - -score_ps = $(addprefix $(outdir)/, $(addsuffix .ps.gz, $($SCORE_LY_FILES))) +score_ps = $(addprefix $(outdir)/, $(addsuffix .ps.gz, $(SCORE_LY_FILES))) diff --git a/make/toplevel-version.make b/make/toplevel-version.make index 176ad185d1..e23347d3fd 100644 --- a/make/toplevel-version.make +++ b/make/toplevel-version.make @@ -11,3 +11,7 @@ TOPLEVEL_MINOR_VERSION=$(MINOR_VERSION) TOPLEVEL_PATCH_LEVEL=$(PATCH_LEVEL) # use to send patches, always empty for released version: TOPLEVEL_MY_PATCH_LEVEL=$(MY_PATCH_LEVEL) + +# TODO: used for the website; John says that he'll rewrite this +TOPLEVEL_VERSION_STABLE=$(VERSION_STABLE) +TOPLEVEL_VERSION_DEVEL=$(VERSION_DEVEL) diff --git a/make/website.make b/make/website.make new file mode 100644 index 0000000000..5c0528aec9 --- /dev/null +++ b/make/website.make @@ -0,0 +1,148 @@ +################################################################ +# website (without the rest of the docs) + +################################################################ +##### SECURITY -- check these values for lilypond.org ######### +################################################################ +ifeq ($(WEBSITE_ONLY_BUILD),1) + ### for lilypond.org + TOP_SRC_DIR=$(HOME)/lilypond/lilypond-git + TRUSTED_DIR=$(HOME)/lilypond/trusted-scripts + top-src-dir=$(TOP_SRC_DIR) + depth=. + trusted-dir=$(TRUSTED_DIR) + script-dir=$(trusted-dir) + texi2html-init-file=$(trusted-dir)/lilypond-texi2html.init + top-htaccess=$(trusted-dir)/lilypond.org.htaccess + dir-htaccess=$(trusted-dir)/website-dir.htaccess + TEXI2HTML_PROGRAM=$(HOME)/usr/bin/texi2html + EXAMPLES=$(HOME)/lilypond/media/ly-examples + PICTURES=$(HOME)/lilypond/media/pictures +else + ### for normal git + script-dir=$(top-src-dir)/scripts/build + texi2html-init-file=$(top-src-dir)/Documentation/lilypond-texi2html.init + top-htaccess=$(top-src-dir)/Documentation/web/server/lilypond.org.htaccess + dir-htaccess=$(top-src-dir)/Documentation/web/server/website-dir.htaccess + include $(config_make) + # I assume this is run from top-build-dir + EXAMPLES=Documentation/web/ly-examples/out-www + PICTURES=Documentation/pictures/out-www +endif + + +################################################################ +OUT=out-website + +### only update this when the language compiles correctly! +# LANGUAGES = (site, cs, de, es, fr, hu, it, ja, nl, zh) +#WEB_LANGS = de es fr hu it ja nl zh cs +WEB_LANGS = cs de es fr hu it ja nl zh + +TEXI2HTML=ONLY_WEB=1 TOP_SRC_DIR=$(top-src-dir) DEPTH=$(depth) PERL_UNICODE=SD $(TEXI2HTML_PROGRAM) + +EXTRACT_TEXI_FILENAMES=python $(script-dir)/extract_texi_filenames.py +CREATE_VERSION=python $(script-dir)/create-version-itexi.py +CREATE_WEBLINKS=python $(script-dir)/create-weblinks-itexi.py +MASS_LINK=python $(script-dir)/mass-link.py +WEB_POST=python $(script-dir)/website_post.py +WEB_BIBS=python $(script-dir)/bib2texi.py + +SERVER_FILES=$(top-src-dir)/Documentation/web/server + +# don't include web +MANUALS=$(wildcard $(top-src-dir)/Documentation/*.tely) +MANUALS+=$(top-src-dir)/Documentation/contributor.texi + +website-test: + echo $(TEXI2HTML) + +website-version: + mkdir -p $(OUT) + $(CREATE_VERSION) $(top-src-dir) > $(OUT)/version.itexi + $(CREATE_WEBLINKS) $(top-src-dir) > $(OUT)/weblinks.itexi + +website-xrefs: website-version + for l in '' $(WEB_LANGS); do \ + $(EXTRACT_TEXI_FILENAMES) \ + -I $(top-src-dir)/Documentation \ + -I $(top-src-dir)/Documentation/"$$l" \ + -I $(OUT) -o $(OUT) --split=node \ + --known-missing-files=$(top-src-dir)/scripts/build/website-known-missing-files.txt \ + $(top-src-dir)/Documentation/"$$l"/web.texi ;\ + for m in $(MANUALS); do \ + n=`echo "$$m" | sed 's/Documentation/Documentation\/'$$l'/'` ; \ + b=`basename "$$n" .texi`; \ + d=`basename "$$b" .tely`; \ + if [ -e "$$n" ] ; then \ + $(EXTRACT_TEXI_FILENAMES) \ + -I $(top-src-dir)/Documentation \ + -I $(top-src-dir)/Documentation/"$$l" \ + -I $(top-src-dir)/Documentation/"$$l"/"$$d" \ + --known-missing-files=$(top-src-dir)/scripts/build/website-known-missing-files.txt \ + -I $(OUT) -o $(OUT) "$$n" ; \ + fi ; \ + done; \ + done; + +website-bibs: website-version + BSTINPUTS=$(top-src-dir)/Documentation/web \ + $(WEB_BIBS) -s web \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(OUT)/others-did.itexi \ + $(top-src-dir)/Documentation/web/others-did.bib + BSTINPUTS=$(top-src-dir)/Documentation/web \ + $(WEB_BIBS) -s web \ + -s $(top-src-dir)/Documentation/lily-bib \ + -o $(OUT)/we-wrote.itexi \ + $(top-src-dir)/Documentation/web/we-wrote.bib + + +website-texinfo: website-version website-xrefs website-bibs + for l in '' $(WEB_LANGS); do \ + if test -n "$$l"; then \ + langopt=--lang="$$l"; \ + langsuf=.$$l; \ + fi; \ + $(TEXI2HTML) --prefix=index \ + --split=section \ + --I=$(top-src-dir)/Documentation/"$$l" \ + --I=$(top-src-dir)/Documentation \ + --I=$(OUT) \ + $$langopt \ + --init-file=$(texi2html-init-file) \ + -D web_version \ + --output=$(OUT)/"$$l" \ + $(top-src-dir)/Documentation/"$$l"/web.texi ; \ + ls $(OUT)/$$l/*.html | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | sed 's!$(OUT)/'$$l'/!!g' | xargs $(MASS_LINK) --prepend-suffix="$$langsuf" hard $(OUT)/$$l/ $(OUT)/website/ ; \ + done + + +website-css: + cp $(top-src-dir)/Documentation/css/*.css $(OUT)/website + +website-pictures: + mkdir -p $(OUT)/website/pictures + if [ -d $(PICTURES) ]; \ + then \ + cp $(PICTURES)/* $(OUT)/website/pictures ; \ + ln -sf website/pictures $(OUT)/pictures ;\ + fi + +website-examples: + mkdir -p $(OUT)/website/ly-examples + if [ -d $(EXAMPLES) ]; \ + then \ + cp $(EXAMPLES)/* $(OUT)/website/ly-examples ; \ + fi + +web-post: + $(WEB_POST) $(OUT)/website + +website: website-texinfo website-css website-pictures website-examples web-post + cp $(SERVER_FILES)/favicon.ico $(OUT)/website + cp $(SERVER_FILES)/robots.txt $(OUT)/website + cp $(top-htaccess) $(OUT)/.htaccess + cp $(dir-htaccess) $(OUT)/website/.htaccess + + diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 389f7b9baf..c47b2697d3 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -16,20 +16,22 @@ EXTRA_DIST_FILES += README mf2pt1.mp FETA_MF_FILES = $(call src-wildcard,feta[0-9]*.mf) \ $(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,parmesan[0-9]*.mf) STAFF_SIZES = 11 13 14 16 18 20 23 26 BRACES = a b c d e f g h i OTF_FILES = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.otf) \ - $(outdir)/aybabtu.otf + $(outdir)/emmentaler-brace.otf PE_SCRIPTS = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.pe) OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \ $(BRACES:%=$(outdir)/feta-braces-%.otf-table) FETA_FONTS = $(FETA_MF_FILES:.mf=) SVG_FILES = $(OTF_FILES:%.otf=%.svg) +WOFF_FILES = $(OTF_FILES:%.otf=%.woff) -FC_FIND = $(shell $(FCMATCH) --verbose 'Century Schoolbook L:style=$(1)' \ +FC_FIND = $(shell $(FCLIST) --verbose 'Century Schoolbook L:style=$(1)' \ | grep 'file:' \ | sed 's/.*"\([^"]*\)".*/\1/g') @@ -44,10 +46,10 @@ LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp) ENC_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.enc) TFM_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.tfm) -$(outdir)/aybabtu.otf-table: $(BRACES:%=$(outdir)/feta-braces-%.otf-table) +$(outdir)/emmentaler-brace.otf-table: $(BRACES:%=$(outdir)/feta-braces-%.otf-table) cat $^ > $@ -$(outdir)/aybabtu.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable) +$(outdir)/emmentaler-brace.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable) echo '(design_size . 20)' > $@ @@ -58,66 +60,79 @@ $(outdir)/aybabtu.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable) # 2. are not included with teTeX # -$(outdir)/emmentaler-%.otf \ -$(outdir)/emmentaler-%.svg: $(outdir)/emmentaler-%.pe \ +$(outdir)/emmentaler-%.otf\ + $(outdir)/emmentaler-%.svg\ + $(outdir)/emmentaler-%.woff: $(outdir)/emmentaler-%.pe \ $(outdir)/feta%.pfb \ + $(outdir)/feta-noteheads%.pfb \ $(outdir)/feta-alphabet%.pfb \ $(outdir)/parmesan%.pfb \ $(outdir)/feta%.otf-table \ $(outdir)/feta%.otf-gtable cd $(outdir) && $(FONTFORGE) -script $(notdir $(basename ,$@).pe) -$(outdir)/aybabtu.otf \ -$(outdir)/aybabtu.svg: $(outdir)/aybabtu.pe \ +$(outdir)/emmentaler-brace.otf\ + $(outdir)/emmentaler-brace.svg\ + $(outdir)/emmentaler-brace.woff: $(outdir)/emmentaler-brace.pe \ $(foreach s,$(BRACES),$(outdir)/feta-braces-$(s).pfb) \ - $(outdir)/aybabtu.otf-table $(outdir)/aybabtu.otf-gtable - cd $(outdir) && $(FONTFORGE) -script aybabtu.pe + $(outdir)/emmentaler-brace.otf-table $(outdir)/emmentaler-brace.otf-gtable + cd $(outdir) && $(FONTFORGE) -script emmentaler-brace.pe $(outdir)/%.pfb: $(outdir)/%.log $(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-alphabet,$<)) > $@ ## ugh -- we want this to prevent failing -j2 compiles. $(outdir)/feta26.otf-table: $(outdir)/feta26.lisp \ + $(outdir)/feta-noteheads26.lisp \ $(outdir)/parmesan26.lisp \ $(outdir)/feta-alphabet26.lisp $(outdir)/feta23.otf-table: $(outdir)/feta23.lisp \ + $(outdir)/feta-noteheads23.lisp \ $(outdir)/parmesan23.lisp \ $(outdir)/feta-alphabet23.lisp $(outdir)/feta20.otf-table: $(outdir)/feta20.lisp \ + $(outdir)/feta-noteheads20.lisp \ $(outdir)/parmesan20.lisp \ $(outdir)/feta-alphabet20.lisp $(outdir)/feta18.otf-table: $(outdir)/feta18.lisp \ + $(outdir)/feta-noteheads18.lisp \ $(outdir)/parmesan18.lisp \ $(outdir)/feta-alphabet18.lisp $(outdir)/feta16.otf-table: $(outdir)/feta16.lisp \ + $(outdir)/feta-noteheads16.lisp \ $(outdir)/parmesan16.lisp \ $(outdir)/feta-alphabet16.lisp $(outdir)/feta14.otf-table: $(outdir)/feta14.lisp \ + $(outdir)/feta-noteheads14.lisp \ $(outdir)/parmesan14.lisp \ $(outdir)/feta-alphabet14.lisp $(outdir)/feta13.otf-table: $(outdir)/feta13.lisp \ + $(outdir)/feta-noteheads13.lisp \ $(outdir)/parmesan13.lisp \ $(outdir)/feta-alphabet13.lisp $(outdir)/feta11.otf-table: $(outdir)/feta11.lisp \ + $(outdir)/feta-noteheads11.lisp \ $(outdir)/parmesan11.lisp \ $(outdir)/feta-alphabet11.lisp -$(outdir)/aybabtu.otf: $(outdir)/aybabtu.subfonts \ - $(outdir)/aybabtu.fontname \ - $(outdir)/aybabtu.otf-table \ - $(outdir)/aybabtu.otf-gtable \ - $(outdir)/aybabtu.pe +$(outdir)/emmentaler-brace.otf: $(outdir)/emmentaler-brace.subfonts \ + $(outdir)/emmentaler-brace.fontname \ + $(outdir)/emmentaler-brace.otf-table \ + $(outdir)/emmentaler-brace.otf-gtable \ + $(outdir)/emmentaler-brace.pe -$(outdir)/aybabtu.otf \ -$(outdir)/aybabtu.svg: $(BRACES:%=$(outdir)/feta-braces-%.pfb) +$(outdir)/emmentaler-brace.otf\ + $(outdir)/emmentaler-brace.svg\ + $(outdir)/emmentaler-brace.woff: $(BRACES:%=$(outdir)/feta-braces-%.pfb) -$(outdir)/aybabtu.fontname: - echo -n 'aybabtu' > $@ -$(outdir)/aybabtu.subfonts: +$(outdir)/emmentaler-brace.fontname: + echo -n 'emmentaler-brace' > $@ +$(outdir)/emmentaler-brace.subfonts: echo $(subst .mf,,$(call src-wildcard,feta-braces-[a-z].mf)) > $@ $(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts @@ -126,6 +141,9 @@ $(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts ALL_FONTS = $(FETA_FONTS) PFB_FILES = $(ALL_FONTS:%=$(outdir)/%.pfb) +.PRECIOUS: $(PFB_FILES) + + # Make tfm files first, log files last, # so that normally log files aren't made twice ALL_GEN_FILES = $(LOG_FILES) \ @@ -133,9 +151,9 @@ ALL_GEN_FILES = $(LOG_FILES) \ $(LISP_FILES) \ $(OTF_TABLES) \ $(NCSB_OTFS) \ - $(PFB_FILES) \ $(OTF_FILES) \ - $(SVG_FILES) + $(SVG_FILES) \ + $(WOFF_FILES) # PRE_INSTALL=$(MAKE) "$(ALL_GEN_FILES)" @@ -149,15 +167,12 @@ INSTALLATION_OUT_FILES1 = $(OTF_FILES) \ $(NCSB_OTFS) INSTALLATION_OUT_DIR2 = $(local_lilypond_datadir)/fonts/svg -INSTALLATION_OUT_FILES2 = $(SVG_FILES) - -INSTALLATION_OUT_DIR3 = $(local_lilypond_datadir)/fonts/type1 -INSTALLATION_OUT_FILES3 = $(PFB_FILES) +INSTALLATION_OUT_FILES2 = $(SVG_FILES) $(WOFF_FILES) export MFINPUTS := .:$(MFINPUTS) -default: $(ALL_GEN_FILES) \ +default: $(PFB_FILES) $(ALL_GEN_FILES) \ $(outdir)/emmentaler-20.otf \ tree-regen \ $(outdir)/fonts.conf diff --git a/mf/README b/mf/README index 9d52194bc8..adf0225145 100644 --- a/mf/README +++ b/mf/README @@ -103,7 +103,7 @@ Hints for stem attachment: abovementioned horizontal reflection taken into account), then the prefix `s' (for `symmetric') should be used. See the existing files for examples. The numbers in the glyph names refer to the duration of the - note; e.g., `s0cross' in feta-bolletjes.mf defines the notehead for a + note; e.g., `s0cross' in feta-noteheads.mf defines the notehead for a whole cross-shaped note (similarly, `s1cross' and `s2cross' are for half and quarter notes, respectively). diff --git a/mf/aybabtu.pe.in b/mf/aybabtu.pe.in deleted file mode 100644 index 0130cff223..0000000000 --- a/mf/aybabtu.pe.in +++ /dev/null @@ -1,84 +0,0 @@ -#!@FONTFORGE@ -# all your brace are belong to us - -Open("feta-braces-b.pfb"); -SelectAll(); -Scale(200, 0, 0); -Generate("feta-braces-b.scale.pfb"); - -Open("feta-braces-c.pfb"); -SelectAll(); -Scale(300, 0, 0); -Generate("feta-braces-c.scale.pfb"); - -Open("feta-braces-d.pfb"); -SelectAll(); -Scale(400, 0, 0); -Generate("feta-braces-d.scale.pfb"); - -Open("feta-braces-e.pfb"); -SelectAll(); -Scale(500, 0, 0); -Generate("feta-braces-e.scale.pfb"); - -Open("feta-braces-f.pfb"); -SelectAll(); -Scale(600, 0, 0); -Generate("feta-braces-f.scale.pfb"); - -Open("feta-braces-g.pfb"); -SelectAll(); -Scale(700, 0, 0); -Generate("feta-braces-g.scale.pfb"); - -Open("feta-braces-h.pfb"); -SelectAll(); -Scale(800, 0, 0); -Generate("feta-braces-h.scale.pfb"); - -Open("feta-braces-i.pfb"); -SelectAll(); -Scale(900, 0, 0); -Generate("feta-braces-i.scale.pfb"); - - -New() - -MergeFonts("feta-braces-a.pfb"); -MergeFonts("feta-braces-b.scale.pfb"); -MergeFonts("feta-braces-c.scale.pfb"); -MergeFonts("feta-braces-d.scale.pfb"); -MergeFonts("feta-braces-e.scale.pfb"); -MergeFonts("feta-braces-f.scale.pfb"); -MergeFonts("feta-braces-g.scale.pfb"); -MergeFonts("feta-braces-h.scale.pfb"); -MergeFonts("feta-braces-i.scale.pfb"); - -SetFontNames("Aybabtu-Regular", "Aybabtu", "Aybabtu Regular", "Regular", "GNU GPL", "@TOPLEVEL_VERSION@"); - -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 - . -*/ - SetUnicodeValue(i + 0xE000, 0); - ++i; -endloop - -LoadTableFromFile("LILF", "aybabtu.subfonts") -LoadTableFromFile("LILC", "aybabtu.otf-table") -LoadTableFromFile("LILY", "aybabtu.otf-gtable") - -Generate("aybabtu.otf"); -Generate("aybabtu.svg"); diff --git a/mf/bigcheese.pe.in b/mf/bigcheese.pe.in index 46b74f0abf..e1d1843ba4 100644 --- a/mf/bigcheese.pe.in +++ b/mf/bigcheese.pe.in @@ -10,6 +10,7 @@ New(); 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. diff --git a/mf/emmentaler-brace.pe.in b/mf/emmentaler-brace.pe.in new file mode 100644 index 0000000000..d5440be402 --- /dev/null +++ b/mf/emmentaler-brace.pe.in @@ -0,0 +1,85 @@ +#!@FONTFORGE@ +# all your brace are belong to us + +Open("feta-braces-b.pfb"); +SelectAll(); +Scale(200, 0, 0); +Generate("feta-braces-b.scale.pfb"); + +Open("feta-braces-c.pfb"); +SelectAll(); +Scale(300, 0, 0); +Generate("feta-braces-c.scale.pfb"); + +Open("feta-braces-d.pfb"); +SelectAll(); +Scale(400, 0, 0); +Generate("feta-braces-d.scale.pfb"); + +Open("feta-braces-e.pfb"); +SelectAll(); +Scale(500, 0, 0); +Generate("feta-braces-e.scale.pfb"); + +Open("feta-braces-f.pfb"); +SelectAll(); +Scale(600, 0, 0); +Generate("feta-braces-f.scale.pfb"); + +Open("feta-braces-g.pfb"); +SelectAll(); +Scale(700, 0, 0); +Generate("feta-braces-g.scale.pfb"); + +Open("feta-braces-h.pfb"); +SelectAll(); +Scale(800, 0, 0); +Generate("feta-braces-h.scale.pfb"); + +Open("feta-braces-i.pfb"); +SelectAll(); +Scale(900, 0, 0); +Generate("feta-braces-i.scale.pfb"); + + +New() + +MergeFonts("feta-braces-a.pfb"); +MergeFonts("feta-braces-b.scale.pfb"); +MergeFonts("feta-braces-c.scale.pfb"); +MergeFonts("feta-braces-d.scale.pfb"); +MergeFonts("feta-braces-e.scale.pfb"); +MergeFonts("feta-braces-f.scale.pfb"); +MergeFonts("feta-braces-g.scale.pfb"); +MergeFonts("feta-braces-h.scale.pfb"); +MergeFonts("feta-braces-i.scale.pfb"); + +SetFontNames("Emmentaler-Brace", "Emmentaler-Brace", "Emmentaler-Brace Regular", "Regular", "GNU GPL", "@TOPLEVEL_VERSION@"); + +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 + . +*/ + SetUnicodeValue(i + 0xE000, 0); + ++i; +endloop + +LoadTableFromFile("LILF", "emmentaler-brace.subfonts") +LoadTableFromFile("LILC", "emmentaler-brace.otf-table") +LoadTableFromFile("LILY", "emmentaler-brace.otf-gtable") + +Generate("emmentaler-brace.otf"); +Generate("emmentaler-brace.svg"); +Generate("emmentaler-brace.woff"); diff --git a/mf/feta-accidentals.mf b/mf/feta-accidentals.mf new file mode 100644 index 0000000000..feac34f9ed --- /dev/null +++ b/mf/feta-accidentals.mf @@ -0,0 +1,1321 @@ +% Feta (not the Font-En-Tja) music font -- Accidentals +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys +% +% +% 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 . + + +% +% also show in other configuration wrt staff lines. +% +def draw_shifted_too = +if test > 0: + fet_beginchar ("shifted too", ""); + set_char_box (0, 0, 0, 0); + currentpicture := remember_pic; + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; +enddef; + + +% +% Accidentals from various sources, notably +% +% Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural) +% F Hofmeister edition of Muellers `Etueden fuer Horn' (double sharp, flat) +% + + +% +% Naming for accidentals (including microtonal variants): +% +% SHARPBASE[.SLASHES.STEMS] +% FLATBASE[.MODIFIER] +% +% Examples: +% +% sharp.slashslash.stem +% mirroredflat.flat +% +% + + +fet_begingroup ("accidentals"); + +% +% Draw an arrow +% +% * `stemslant' gives the direction of the stem's left boundary +% (needed for brushed stems, equals "up" for straight stems) +% * `extend' is used to make the stem longer or shorter (if negative); +% different kinds of accidentals need different values here +% +def draw_arrow (expr attach, stemwidth, stemslant, extend, pointingdown) = +begingroup; + save htip; % tip height + save wwing; % wing `radius' + save angle_wing_bot, angle_wing_top, angle_tip; + save upshift; + clearxy; + + wwing := 0.26 stemwidth; + htip := staff_space * 0.85 + stafflinethickness - wwing; + + % `flip' is used to reflect the arrow vertically + % if arrow points downward + transform flip; + if pointingdown: + flip = identity reflectedabout (origin, right); + else: + flip = identity; + fi; + + z1 = attach shifted (-stemwidth / 2, 0); + upshift := max (0, wwing + 0.1 staff_space + extend); + z2 = z1 shifted (((unitvector stemslant) + scaled upshift) transformed flip); + + z7 = attach shifted ((stemwidth/2),0); + z6 = z7 shifted (((unitvector (-xpart stemslant, ypart stemslant)) + scaled upshift) transformed flip); + z2 - z3 = ( 0.38 staff_space, 0.05 htip) transformed flip; + z6 - z5 = (-0.38 staff_space, 0.05 htip) transformed flip; + + z4 = attach shifted ((-0.2 stemwidth, upshift + htip) + transformed flip); + z4'= attach shifted (( 0.2 stemwidth, upshift + htip) + transformed flip); + + % `angle_wing_bot' is the angle at which the arc + % from z2 to z3a enters z3a + % `angle_wing_top' is the angle at which the arc + % from z3b to z4 leaves z3b + % `angle_tip' is the angle at which the arc + % from z4 to z4' leaves z4 + angle_wing_bot = 30; + angle_wing_top = 55; + angle_tip = 68; + + z3a = z3 shifted ((((dir angle_wing_bot) rotated -90) + scaled wwing) transformed flip); + z3b = z3 shifted ((((dir angle_wing_top) rotated 90) + scaled wwing) transformed flip); + + z5a = z5 shifted ((((dir (180 - angle_wing_bot)) rotated 90) + scaled wwing) transformed flip); + z5b = z5 shifted ((((dir (180 - angle_wing_top)) rotated -90) + scaled wwing) transformed flip); + + % Draw the arrow + pickup pencircle scaled 1; + fill z1 + -- z2{stemslant transformed flip} + .. {(-dir angle_wing_bot) transformed flip}z3a + .. z3b{(dir angle_wing_top) transformed flip} + .. z4{(dir angle_tip) transformed flip} + .. z4'{(dir (-angle_tip)) transformed flip} + .. {(dir (-angle_wing_top)) transformed flip}z5b + .. z5a{(-dir (-angle_wing_bot)) transformed flip} + .. z6{((-stemslant) reflectedabout (origin, up)) transformed flip} + -- z7 + -- cycle; + + labels (range 0 thru 7, 4', 3a, 3b, 5a, 5b); +endgroup; +enddef; + +save remember_pic; +picture remember_pic; + +save sharp_beamheight; +sharp_beamheight# := 0.3 staff_space# + stafflinethickness#; + +% +% The beams of most sharps have horizontal endings (as if drawn with +% a square pen). [Wanske] does not mention this, so we'll just ignore +% this fact. +% + +def draw_meta_sharp (expr width, offset) = + save beamwidth, beamslope; + save ne, nw_dist; + pair ne, nw_dist; + + beamwidth := width; + + define_whole_vertical_blacker_pixels (sharp_beamheight); + + clearxy; + + beamslope = sharp_beamheight / beamwidth; + + pickup pencircle scaled 2 blot_diameter; + + rt x2 - lft x1 = beamwidth; + z2 = z1 + whatever * (beamwidth, sharp_beamheight); + .5 [z1, z3] = (.5 w, offset); + x3 = x2; + top y2 - bot y3 = sharp_beamheight; + x4 = x1; + top y1 - bot y4 = sharp_beamheight; + + ne = unitvector (z2 - z1); + nw_dist = (ne rotated 90) * blot_diameter; + + fill lft z1{up} + ... (z1 + nw_dist){ne} + -- (z2 + nw_dist){ne} + ... rt z2{down} + -- rt z3{down} + ... (z3 - nw_dist){-ne} + -- (z4 - nw_dist){-ne} + ... lft z4{up} + -- cycle; + + labels (1, 2, 3, 4); +enddef; + + +def draw_sharp(expr arrowup, arrowdown) = + save stem, stemx, stemwidth; + save outer_space, interbeam; + save stemlength, extendleft, extendright, height, depth; + + stemwidth# := stafflinethickness# + .05 staff_space#; + define_whole_blacker_pixels (stemwidth); + + interbeam := 1.05 staff_space_rounded; + + stemlength# := 1.5 staff_space#; + define_pixels (stemlength); + + height# = stemlength#; + depth# = stemlength#; + extendright# = 0; + extendleft# = 0; + if arrowup: + height# := height# + 1.2 staff_space#; + extendright# := extendright# + 1.5 stafflinethickness#; + fi; + if arrowdown: + depth# := depth# + 1.2 staff_space#; + extendleft# := extendleft# + 1.5 stafflinethickness#; + fi; + define_pixels (extendleft, extendright); + set_char_box (extendleft#, 1.1 staff_space#, depth#, height#); + + stem := 7 / 16 * w; + stemx := hround stem; + outer_space := hround ((w - stemx - stemwidth) / 2); + + w := 2 outer_space + stemx + stemwidth; + d := d - feta_space_shift; + + draw_meta_sharp (w, -.5 interbeam); + draw_meta_sharp (w, -.5 interbeam + vround interbeam); + + % expand the charbox so that it encloses the whole arrow; + % this must not happen earlier because some commands above + % still rely on the old width + w := w + extendright; + + pickup pencircle scaled stemwidth; + + lft x5 = lft x6 = outer_space; + lft x7 = lft x8 = outer_space + stemx; + bot y5 = -stemlength; + top y6 = vround (1.5 staff_space - stem * beamslope); + bot y7 = -top y6 + feta_space_shift; + top y8 = stemlength; + + labels (5, 6, 7, 8); + + draw_gridline (z5, z6, stemwidth); + draw_gridline (z7, z8, stemwidth); + + if arrowup: + draw_arrow (z8, stemwidth, up, + stafflinethickness / 2 + stemwidth / 2, false); + fi; + if arrowdown: + draw_arrow (z5, stemwidth, up, + stafflinethickness / 2 + stemwidth / 2, true); + fi; + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +enddef; + + +fet_beginchar ("Sharp", "sharp"); + draw_sharp (false, false); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Sharp (arrow up)", "sharp.arrowup"); + draw_sharp (true, false); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Sharp (arrow down)", "sharp.arrowdown"); + draw_sharp (false, true); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Sharp (arrows up and down)", "sharp.arrowboth"); + draw_sharp (true, true); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("1/2 Sharp", "sharp.slashslash.stem"); + save stem, stemwidth; + save outer_space, interbeam; + + stemwidth# := stafflinethickness# + .05 staff_space#; + define_whole_blacker_pixels (stemwidth); + + interbeam := 1.05 staff_space_rounded; + + set_char_box (0, 0.7 staff_space#, + 1.5 staff_space#, 1.5 staff_space#); + + stem := 7 / 16 * w; + outer_space := hround ((w - stemwidth) / 2); + + w := 2 outer_space + stemwidth; + d := d - feta_space_shift; + + draw_meta_sharp (w, -.5 interbeam); + draw_meta_sharp (w, -.5 interbeam + vround interbeam); + + pickup pencircle scaled stemwidth; + + lft x5 = lft x6 = outer_space; + top y6 = vround (1.5 staff_space - .5 stem); + bot y5 = -top y6 + feta_space_shift; + + labels (5, 6); + + draw_gridline (z5, z6, stemwidth); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Sharp (3 beams)", "sharp.slashslashslash.stemstem"); + save stem, stemx, stemwidth; + save outer_space, interbeam; + save sharp_beamheight; + + sharp_beamheight# := 0.22 staff_space# + stafflinethickness#; + + stemwidth# := stafflinethickness# + .05 staff_space#; + define_whole_blacker_pixels (stemwidth); + + interbeam := 1.2 staff_space_rounded; + + set_char_box (0, 1.1 staff_space#, + 1.5 staff_space#, 1.5 staff_space#); + + stem := 7 / 16 * w; + stemx := hround stem; + outer_space := hround ((w - stemx - stemwidth) / 2); + + w := 2 outer_space + stemx + stemwidth; + d := d - feta_space_shift; + + draw_meta_sharp (.88 w, -.5 interbeam); + draw_meta_sharp (.88 w, -.5 interbeam + vround interbeam); + sharp_beamheight# := 1/.88 sharp_beamheight#; + draw_meta_sharp (w, 0); + + pickup pencircle scaled stemwidth; + + lft x5 = lft x6 = outer_space; + lft x7 = lft x8 = outer_space + stemx; + bot y5 = -d; + top y6 = vround (1.5 staff_space - stem * beamslope); + bot y7 = -top y6 + feta_space_shift; + top y8 = h; + + labels (5, 6, 7, 8); + + draw_gridline (z5, z6, stemwidth); + draw_gridline (z7, z8, stemwidth); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("1/2 Sharp (3 beams)", "sharp.slashslashslash.stem"); + save stem, stemx, stemwidth; + save outer_space, interbeam; + save sharp_beamheight; + + sharp_beamheight# := 0.22 staff_space# + stafflinethickness#; + + stemwidth# := stafflinethickness# + .05 staff_space#; + define_whole_blacker_pixels (stemwidth); + + interbeam := 1.2 staff_space_rounded; + + set_char_box (0, 0.95 staff_space#, + 1.3 staff_space#, 1.3 staff_space#); + + stem := 7 / 16 * w; + outer_space := hround ((w - stemwidth) / 2); + + w := 2 outer_space + stemwidth; + d := d - feta_space_shift; + + draw_meta_sharp (.8 w, -.5 interbeam); + draw_meta_sharp (.8 w, -.5 interbeam + vround interbeam); + sharp_beamheight# := 1/.8 sharp_beamheight#; + draw_meta_sharp (w, 0); + + pickup pencircle scaled stemwidth; + + lft x5 = lft x6 = outer_space; + top y6 = vround (1.5 staff_space - .5 stem); + bot y5 = -top y6 + feta_space_shift; + labels (5, 6); + + draw_gridline (z5, z6, stemwidth); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("3/4 Sharp", "sharp.slashslash.stemstemstem"); + save stem, stemx, stemwidth; + save outer_space, interbeam; + + stemwidth# := stafflinethickness# + .05 staff_space#; + define_whole_blacker_pixels (stemwidth); + + interbeam := 1.05 staff_space_rounded; + + set_char_box (0, 1.6 staff_space#, + 1.5 staff_space#, 1.5 staff_space#); + + stem := 9 / 32 * w; + stemx := hround stem; + outer_space := hround ((w - 2 stemx - stemwidth) / 2); + + w := 2 outer_space + 2 stemx + stemwidth; + d := d - feta_space_shift; + + draw_meta_sharp (w, -.5 interbeam); + draw_meta_sharp (w, -.5 interbeam + vround interbeam); + + pickup pencircle scaled stemwidth; + + lft x5 = lft x6 = outer_space; + lft x7 = lft x8 = outer_space + stemx; + lft x9 = lft x10 = outer_space + 2 stemx; + bot y5 = -d; + top y6 = vround (1.5 staff_space - 2 stem * beamslope); + bot y9 = -top y6 + feta_space_shift; + top y10 = h; + y7 = .5 [y5, y9]; + y8 = .5 [y6, y10]; + + labels (5, 6, 7, 8, 9, 10); + + draw_gridline (z5, z6, stemwidth); + draw_gridline (z7, z8, stemwidth); + draw_gridline (z9, z10, stemwidth); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +% +% The stems of the natural are brushed (at least, in Barenreiter SCS) +% + +def draw_natural (expr arrowup, arrowdown) = + save stemwidth, top_stem_thick; + save ne, pat_top, pat_bottom; + save depth, height, extendleft, extendright, stemlength; + save brush_scale_up, brush_scale_down; + pair ne; + path pat_top, pat_bottom; + + top_stem_thick# = stafflinethickness# + .10 staff_space#; + stemwidth# = 0.09 staff_space# + .5 stafflinethickness#; + define_whole_blacker_pixels (top_stem_thick, stemwidth); + + stemlength# = 1.5 staff_space#; + define_pixels (stemlength); + + height# = stemlength#; + depth# = stemlength#; + extendleft# = 0; + extendright# = 0; + if arrowup: + extendleft# := 3 stafflinethickness#; + height# := height# + 1.2 staff_space#; + fi; + if arrowdown: + extendright# := 3.15 stafflinethickness#; + depth# := depth# + 1.2 staff_space#; + fi; + define_pixels (extendright); + + set_char_box (extendleft#, 2/3 staff_space#, depth#, height#); + + d := d - feta_space_shift; + + pickup pencircle scaled stemwidth; + + brush_scale_up := 1.0; + brush_scale_down := 1.0; + % to look nice, arrowed stems must be less brushed + if arrowup: + brush_scale_up := 0.85; + fi; + if arrowdown: + brush_scale_down := 0.85; + fi; + + penpos1 (top_stem_thick, 0); + penpos3 (top_stem_thick, 0); + penpos2 (stemwidth, 0); + penpos4 (stemwidth, 0); + % z1' and z3' are needed for the arrowed accidentals + penpos1' (top_stem_thick * brush_scale_up, 0); + penpos3' (top_stem_thick * brush_scale_down, 0); + + x2r = w; + x4l = 0; + x3 = x3' = x2; + x1 = x1' = x4; + + y1 = y1' = stemlength; + y3 = y3' = -stemlength; + top y2 = vround (staff_space - 3/2 stafflinethickness); + y4 = -y2 + feta_space_shift; + + pat_bottom := z4r{z4r - z1r} + .. bot z4 + .. z4l{z1l - z4l}; + fill simple_serif (z1'l, z1'r, -30) + -- pat_bottom + -- cycle; + + pat_top := z2r{z2r - z3r} + .. top z2 + .. z2l{z3l - z2l}; + fill simple_serif (z3'l, z3'r, 30) + -- pat_top + -- cycle; + + ne = (x2 - x4, stafflinethickness); + + z11' = z3l + whatever * (z2l - z3l); + y11' = vround (.5 (staff_space - stafflinethickness)); + z11 = z11' + whatever * ne; + x11 = x12; + z12 = directionpoint -ne of pat_top; + z13 = z12 + whatever * ne; + x13 = x1; + z14 = z11 + whatever * ne; + x14 = x1; + + z21' = z4r + whatever * (z1r - z4r); + y21' = -y11' + feta_space_shift; + z21 = z21' + whatever * ne; + x21 = x22; + z22 = directionpoint -ne of pat_bottom; + z23 = z22 + whatever * ne; + x23 = x3; + z24 = z21 + whatever * ne; + x24 = x3; + + fill z11 + -- z12 + -- z13 + -- z14 + -- cycle; + fill z21 + -- z22 + -- z23 + -- z24 + -- cycle; + + penlabels (1, 1', 2, 3, 3', 4); + labels (11, 11', 12, 13, 14, 21, 21', 22, 23, 24); + + if arrowup: + draw_arrow (z1, top_stem_thick * brush_scale_up, + z1'l - z4l, stafflinethickness / 2, false); + fi; + if arrowdown: + draw_arrow (z3, top_stem_thick * brush_scale_down, + z2r - z3'r, stafflinethickness / 2, true); + w := w + extendright; + fi; + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +enddef; + + +fet_beginchar ("Natural", "natural"); + draw_natural (false, false); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Natural (arrow up)", "natural.arrowup"); + draw_natural (true, false); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Natural (arrow down)", "natural.arrowdown"); + draw_natural (false, true); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Natural (arrows up and down)", "natural.arrowboth"); + draw_natural (true, true); +fet_endchar; + + +draw_shifted_too; + + +% +% Dedicated to my mom. (3/10/97) +% +% Mamma, ik hou van je; kom je alsjeblieft terug? +% -- HW +% +% +% TODO: remove crook_fatness +% TODO: document, simplify! +% + +def draw_meta_flat (expr xcenter, w, crook_fatness, arrowup, arrowdown) = + save crook_thinness; + save bottom_overshoot, bot_crook_dir; + save top_stem_thick, top_stem_thick_orig; + save bottom_stem_thick, hair, smaller_hole; + save top_crook_thinness; + save zwiep; + save center; + pair center, bot_crook_dir; + save clearing, clearing_orig; + + clearxy; + + % the stem shouldn't reach the top staff line. + %% TODO: should take from height. + % + % TODO: parameterize this + % + if w >= 0.75 staff_space: + smaller_hole = 0.35 stafflinethickness; + else: + smaller_hole = 0; + fi; + crook_thinness = .7 stafflinethickness + .06 staff_space; + top_crook_thinness = 1 stafflinethickness + .065 staff_space; + clearing = 1.7 stafflinethickness; + clearing_orig = clearing; + if arrowup: + clearing := 0.5 staff_space; + fi; + bottom_overshoot = stafflinethickness; + + bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#; + top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#; + top_stem_thick_orig# = top_stem_thick#; + if arrowup: + % to look nice, arrowed stems should be less brushed + top_stem_thick# := top_stem_thick# * 0.8; + fi; + define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick, + top_stem_thick_orig); + + if odd (top_stem_thick - bottom_stem_thick): + top_stem_thick := top_stem_thick - 1; + fi; + if odd (top_stem_thick_orig - bottom_stem_thick): + top_stem_thick_orig := top_stem_thick_orig - 1; + fi; + + center = (xcenter, 0); + + x1l = hround (xcenter - .5 top_stem_thick); + y1 = vround (2 staff_space - clearing); + x2l = hround (xcenter - .5 bottom_stem_thick); + y2 = -.5 staff_space - .5 stafflinethickness; + % z16 and the `*_orig' variables are needed for arrowed accidentals + % because their inner part should be unchanged from plain ones but + % the points z3l, z3r, and z10 depend on values that are different + % for arrowed accidentals + x16l = hround (xcenter -.5 top_stem_thick_orig); + y16 = vround (2 staff_space - clearing_orig); + + penpos1 (top_stem_thick, 0); + penpos16 (top_stem_thick_orig, 0); + penpos2 (bottom_stem_thick, 0); + + y3l = vfloor ((staff_space - stafflinethickness) / 2); + z3l = whatever [z2r, z1r]; + z3r = .3 [z2r, + (z16r shifted (0, clearing_orig - 1.7 stafflinethickness))] + + (smaller_hole, 0); + x3r := hceiling x3r; + + % we insert z3l to get better conversion with mf2pt1 + fill simple_serif (z1r, z1l, 30) + -- z2l + -- z2r + -- z3l + -- cycle; + + z10 = whatever [z2r, z16r] + (smaller_hole, 0); + y10 = -1/10 staff_space; + x10 := hceiling x10; + + x11 = xcenter + bottom_overshoot / 3; + y11 = -vround (.5 (staff_space + stafflinethickness) + + bottom_overshoot); + + x2a = 0.2[x2r, x7]; + y2a = 1.5[y2, y11]; + + penpos4 (whatever, 53); + + y4l - y4r = top_crook_thinness; + y5r = .15 staff_space; + x5l = hround (w + xcenter); + y4 = staff_space / 2; + x4r = .45 [x5r, x3r]; + y4l := vround y4l; + + penpos5 (crook_fatness, -175); + + bot_crook_dir = unitvector ((x5l, 0) - z11); + z8 = z11 + whatever * bot_crook_dir; + y8 = -staff_space / 2; + + z7 = z8 + + whatever * bot_crook_dir + + crook_thinness * (bot_crook_dir rotated 90); + x7 = .1 [x3r, x8]; + + unfill z3r{z3r - z10} + .. z4r{right} + .. z5r{down} + .. z7{-bot_crook_dir} + & z7 + .. z10{z3r - z10} + -- cycle; + + if arrowdown: + fill z2l{down} + .. z2a{up} + .. z8{bot_crook_dir} + .. z5l{up} + .. z4l{left} + .. z3l + -- cycle; + else: + fill z2l{down} + .. z11{right} + .. z8{bot_crook_dir} + .. z5l{up} + .. z4l{left} + .. z3l + -- cycle; + fi; + + if arrowup: + draw_arrow (z1, top_stem_thick, z1l - z2l, + 0.5 stafflinethickness, false); + fi; + if arrowdown: + draw_arrow ((0.5 [x2l, x2a], y2), x2a - x2l, up, + staff_space / 2, true); + fi; +enddef; + + +def draw_arrowed_meta_flat (expr xcenter, width, crook_fatness, + arrowup, arrowdown) = + save depth, height, extendleft; + + depth# = 0.6 staff_space#; + height# = 1.9 staff_space#; + extendleft# := 1.2 stafflinethickness#; + if arrowup: + extendleft# := 3.45 stafflinethickness#; + height# := height# + 0.8 staff_space#; + fi; + if arrowdown: + extendleft# := 3.45 stafflinethickness#; + depth# := depth# + 1.6 staff_space#; + fi; + + set_char_box (extendleft#, width, depth#, height#); + draw_meta_flat(xcenter, w, crook_fatness, arrowup, arrowdown); +enddef; + +% +% unfortunately, 600dpi is not enough to show the brush of the stem. +% + +fet_beginchar ("Flat", "flat"); + draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, + false, false); + penlabels (range 0 thru 11); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Flat (arrow up)", "flat.arrowup"); + draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, + true, false); + penlabels (range 0 thru 23); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Flat (arrow down)", "flat.arrowdown"); + draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, + false, true); + penlabels (range 0 thru 23); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Arrowed Flat (arrow up and down)", "flat.arrowboth"); + draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, + true, true); + penlabels (range 0 thru 23); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Flat (slashed)", "flat.slash"); + set_char_box (.4 staff_space#, .8 staff_space#, + 0.6 staff_space#, 1.9 staff_space#); + + draw_meta_flat (0, w, 0.31 staff_space, false, false); + + clearxy; + + save slope, slash_width; + slope = 0.5; + slash_width = w; + + z11 = (0, h / 2); + z12 = z11 - (slash_width, slash_width * slope) / 2; + z13 = z11 + (slash_width, slash_width * slope) / 2; + penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90); + penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90); + + z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12); + z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12); + + fill z13r + .. z15 + .. z13l + -- z12l + .. z14 + .. z12r + -- z13r + .. cycle; + + penlabels (12, 13); + labels (14, 15); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Flat (slashed twice)", "flat.slashslash"); + set_char_box (.4 staff_space#, .8 staff_space#, + 0.6 staff_space#, 1.9 staff_space#); + + draw_meta_flat (0, w, 0.31 staff_space, false, false); + + clearxy; + + save slope, slash_width; + slope = 0.5; + slash_width = w; + + z11 = (0, 5/12 h); + z12 = z11 - (slash_width, slash_width * slope) / 2; + z13 = z11 + (slash_width, slash_width * slope) / 2; + penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90); + penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90); + + z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12); + z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12); + + fill z13r + .. z15 + .. z13l + -- z12l + .. z14 + .. z12r + -- z13r + .. cycle; + + penlabels (12, 13); + labels (14, 15); + + z21 = (0, 2/3 h); + z22 = z21 - (slash_width, slash_width * slope) / 2; + z23 = z21 + (slash_width, slash_width * slope) / 2; + penpos22 (1.5 stafflinethickness, angle (z23 - z22) - 90); + penpos23 (1.5 stafflinethickness, angle (z23 - z22) - 90); + + z24 = z22 - .75 stafflinethickness * unitvector (z23 - z22); + z25 = z23 + .75 stafflinethickness * unitvector (z23 - z22); + + fill z23r + .. z25 + .. z23l + -- z22l + .. z24 + .. z22r + -- z23r + .. cycle; + + penlabels (22, 23); + labels (24, 25); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Flatflat (mirrored)", "mirroredflat.flat"); + set_char_box (0, 1.6 staff_space#, + 0.6 staff_space#, 1.9 staff_space#); + + % This is a modified version of `draw_meta_flat'. + + save crook_thinness, crook_fatness; + save bottom_overshoot, bot_crook_dir; + save top_stem_thick, bottom_stem_thick, hair, smaller_hole; + save top_crook_thinness; + save zwiep; + save center; + pair center, bot_crook_dir; + save clearing, wid; + save pat; + path pat; + + clearxy; + + wid = w / 2; + + % the stem shouldn't reach the top staff line. + %% TODO: should take from height. + % + % TODO: parameterize this + % + if wid >= 0.75 staff_space: + smaller_hole = 0.35 stafflinethickness; + else: + smaller_hole = 0; + fi; + clearing = 1.7 stafflinethickness; + crook_thinness = .7 stafflinethickness + .06 staff_space; + crook_fatness = 0.31 staff_space; + top_crook_thinness = 1 stafflinethickness + .065 staff_space; + bottom_overshoot = stafflinethickness; + + bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#; + top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#; + define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick); + + if odd (top_stem_thick - bottom_stem_thick): + top_stem_thick := top_stem_thick - 1; + fi; + + center = (0, 0); + + x1l = hround (-.5 top_stem_thick); + y1 = vround (2 staff_space - clearing); + x2l = hround (-.5 bottom_stem_thick); + y2 = -.5 staff_space - .5 stafflinethickness; + + penpos1 (top_stem_thick, 0); + penpos2 (bottom_stem_thick, 0); + + y3l = vfloor ((staff_space - stafflinethickness) / 2); + z3l = whatever [z2r, z1r]; + z3r = .3 [z2r, z1r] + (smaller_hole, 0); + x3r := hceiling x3r; + + z10 = whatever [z2r, z1r] + (smaller_hole, 0); + y10 = -1/10 staff_space; + x10 := hceiling x10; + + x11 = bottom_overshoot / 3; + y11 = -vround (.5 (staff_space + stafflinethickness) + + bottom_overshoot); + + penpos4 (whatever, 53); + + y4l - y4r = top_crook_thinness; + y5r = .15 staff_space; + x5l = hround (wid); + y4 = staff_space / 2; + x4r = .45 [x5r, x3r]; + y4l := vround y4l; + + penpos5 (crook_fatness, -175); + + bot_crook_dir = unitvector ((x5l, 0) - z11); + z8 = z11 + whatever * bot_crook_dir; + y8 = -staff_space / 2; + + z7 = z8 + + whatever * bot_crook_dir + + crook_thinness * (bot_crook_dir rotated 90); + x7 = .1 [x3r, x8]; + + pat := z3r{z3r - z10} + .. z4r{right} + .. z5r{down} + .. z7{-bot_crook_dir} + & z7 + .. z10{z3r - z10} + -- cycle; + unfill pat; + unfill pat xscaled -1; + + pat := z11{right} + .. z8{bot_crook_dir} + .. z5l{up} + .. z4l{left} + .. z3l; + fill pat + -- simple_serif (z1r, z1l, 30) + -- reverse pat xscaled -1 shifted (-feta_eps, 0) + -- cycle; + + currentpicture := currentpicture shifted (w/2, 0); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Semi flat", "mirroredflat"); + set_char_box (1.2 stafflinethickness#, .8 staff_space#, + 0.6 staff_space#, 1.9 staff_space#); + + draw_meta_flat (0, w, 0.31 staff_space, false, false); + currentpicture := currentpicture xscaled -1 shifted (w - b, 0); +fet_endchar; + + +fet_beginchar ("Semi flat", "mirroredflat.backslash"); + set_char_box (.4 staff_space#, .8 staff_space#, + 0.6 staff_space#, 1.9 staff_space#); + + draw_meta_flat (0, w, 0.31 staff_space, false, false); + + clearxy; + + save slope, slash_width; + slope = 0.5; + slash_width = w; + + z11 = (0, h / 2); + z12 = z11 - (slash_width, slash_width * slope) / 2; + z13 = z11 + (slash_width, slash_width * slope) / 2; + penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90); + penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90); + + z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12); + z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12); + + fill z13r + .. z15 + .. z13l + -- z12l + .. z14 + .. z12r + -- z13r + .. cycle; + + currentpicture := currentpicture xscaled -1 shifted (w - b, 0); + + labels (1, 2, 3); +fet_endchar; + + +fet_beginchar ("Double Flat", "flatflat"); + save left_wid, overlap, right_wid; + + left_wid = .7; + right_wid = .8; + overlap = .05; + + set_char_box (1.2 stafflinethickness#, + (left_wid + right_wid - overlap) * staff_space#, + .6 staff_space#, 1.9 staff_space#); + draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space, + false, false); + draw_meta_flat (hround ((left_wid - overlap) * staff_space), + right_wid * staff_space, 1/3 staff_space, + false, false); +fet_endchar; + + +fet_beginchar ("3/4 Flat", "flatflat.slash"); + save left_wid, overlap, right_wid; + + left_wid = .7; + right_wid = .8; + overlap = .05; + + set_char_box (1.2 stafflinethickness#, + (left_wid + right_wid - overlap) * staff_space#, + .6 staff_space#, 1.9 staff_space#); + draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space, + false, false); + draw_meta_flat (hround ((left_wid - overlap) * staff_space), + right_wid * staff_space, 1/3 staff_space, + false, false); + + %% maybe we should clip part of the stems? + %% or make the 1st flat smaller? + %% or reverse it? + pickup pencircle scaled 2 stafflinethickness; + + z12 = round (-.25 w - b, .55 staff_space) + feta_offset; + z13 = round (.75 w, 1.45 staff_space) + feta_offset; + penpos12 (2 stafflinethickness, angle (z13 - z12) - 90); + penpos13 (2 stafflinethickness, angle (z13 - z12) - 90); + + z14 = z12 - stafflinethickness * unitvector (z13 - z12); + z15 = z13 + stafflinethickness * unitvector (z13 - z12); + + fill z13r + .. z15 + .. z13l + -- z12l + .. z14 + .. z12r + -- z13r + .. cycle; + + penlabels (12, 13); + labels (14, 15); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Double Sharp", "doublesharp"); + save klaverblad, klaversteel; + save pat; + path pat; + + klaversteel = 1/15 staff_space; + klaverblad = .4 staff_space - .5 stafflinethickness; + + set_char_box (0, staff_space#, .5 staff_space#, .5 staff_space#); + + z1 = (klaversteel, 0); + z2 = (w / 2 - klaverblad / 10, h - klaverblad); + z3 = (w / 2, h); + z4 = z2 reflectedabout ((0, 0), (1, 1)); + z5 = z1 reflectedabout ((0, 0), (1, 1)); + + labels (1, 2, 3, 4, 5); + + pickup pencircle scaled blot_diameter; + + x2 := hfloor (rt x2) - blot_diameter / 2; + x3 := hfloor (rt x3) - blot_diameter / 2; + y3 := vfloor (top y3) - blot_diameter / 2; + y4 := vfloor (top y4) - blot_diameter / 2; + + pat = (rt z1){dir45} + .. {right}(bot z2) + .. rt z2 + -- rt z3{z3 - z2} + .. top z3{z4 - z3} + -- top z4{z4 - z3} + .. (lft z4){down} + .. {dir 225}(top z5); + pat := pat + -- reverse pat xscaled -1 shifted (-feta_eps, 0); + + % assure symmetry -- it's more important to center the glyph on the + % staff line than centering it between staff lines, so we use + % feta_shift, not feta_space_shift. + h := h + feta_shift; + + fill pat shifted (0, feta_shift) + -- reverse pat yscaled -1 shifted (0, -feta_eps) + -- cycle; + + % ugh + currentpicture := currentpicture shifted (hround (w / 2), 0); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +def draw_paren = + save leftindent; + + leftindent := .2 staff_space; + + set_char_box (0, .5 staff_space# + stafflinethickness#, + staff_space#, staff_space#); + + d := d - feta_shift; + + z1 = (leftindent, h); + z2 = (w - stafflinethickness, .5 (h - d)); + z3 = (leftindent, -d); + + penpos1 (stafflinethickness, 35); + penpos2 (.1 staff_space + stafflinethickness, 0); + penpos3 (stafflinethickness, -35); + + fill z2l{down} + .. simple_serif (z3l, z3r, 90) + .. z2r{up} + .. simple_serif (z1r, z1l, 90) + .. z2l{down} + -- cycle; +enddef; + + +fet_beginchar ("Right Parenthesis", "rightparen"); + draw_paren; + penlabels (1, 2, 3); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +draw_shifted_too; + + +fet_beginchar ("Left Parenthesis", "leftparen"); + draw_paren; + + currentpicture := currentpicture xscaled -1; + + set_char_box (charwd, charbp, chardp, charht); +fet_endchar; + +fet_endgroup ("accidentals"); diff --git a/mf/feta-accordion.mf b/mf/feta-accordion.mf index f105800087..97de6e494c 100644 --- a/mf/feta-accordion.mf +++ b/mf/feta-accordion.mf @@ -1,9 +1,20 @@ +% Feta (not the Font-En-Tja) music font -- draw accordion symbols +% This file is part of LilyPond, the GNU music typesetter. % -% feta-accordion.mf -- draw accordion symbols +% Copyright (C) 1998--2011 Han-Wen Nienhuys % -% source file of the GNU LilyPond music typesetter +% 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. % -% (c) 1998--2009 Han-Wen Nienhuys +% 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 . fet_begingroup ("accordion"); @@ -19,7 +30,7 @@ accreg_lh# := 1.0 staff_space#; define_pixels (accreg_dot_size, accreg_linethickness, accreg_lh); -fet_beginchar ("accDiscant", "accDiscant") +fet_beginchar ("accordion register discant", "discant") save r, pat, lh, lt; path pat; @@ -90,7 +101,7 @@ fet_beginchar ("accDiscant", "accDiscant") fet_endchar; -fet_beginchar ("accDot", "accDot") +fet_beginchar ("accordion register dot", "dot") set_char_box (accreg_dot_size# / 2, accreg_dot_size# / 2, accreg_dot_size# / 2, accreg_dot_size# / 2); @@ -103,7 +114,7 @@ fet_beginchar ("accDot", "accDot") fet_endchar; -fet_beginchar ("accFreebase", "accFreebase") +fet_beginchar ("accordion register freebass", "freebass") save r, lh, lt; r# = accreg_lh#; @@ -160,7 +171,7 @@ fet_beginchar ("accFreebase", "accFreebase") fet_endchar; -fet_beginchar ("accStdbase", "accStdbase") +fet_beginchar ("accordion register stdbass", "stdbass") save r, p, lh, lt; path pat; @@ -233,7 +244,7 @@ fet_beginchar ("accStdbase", "accStdbase") fet_endchar; -fet_beginchar ("accBayanbase", "accBayanbase") +fet_beginchar ("accordion register bayanbass", "bayanbass") save lh, lt; lh = vround accreg_lh; @@ -361,7 +372,7 @@ def def_some_vars = enddef; -fet_beginchar ("accOldEE", "accOldEE") +fet_beginchar ("accordion oldEE", "oldEE") save r, pp, ir, lh, lt, stroke_width; r# = staff_space#; @@ -442,4 +453,111 @@ fet_beginchar ("accOldEE", "accOldEE") fet_endchar; +fet_beginchar ("accordion push", "push"); + save width, height; + + height# := 2.0 staff_space# + 3.0 stafflinethickness#; + width# := 0.4 height#; + + define_pixels(height, width); + + save linewidth; + + linewidth# := stafflinethickness# + .05 staff_space#; + define_whole_blacker_pixels (linewidth); + + set_char_box (width#, 0, + 0, height#); + + pickup pencircle scaled linewidth; + + lft x1 = -width; + top y1 = height; + + rt x2 = 0; + y2 = 0.5 * (y1 + y3); + + x3 = x1; + bot y3 = 0; + + save nw_offset, ne_offset; + pair nw_offset, ne_offset; + save sw_offset, se_offset, line_radius; + pair sw_offset, se_offset; + + line_radius := linewidth / 2; + nw_offset := line_radius * unitvector (z1 - z2); + ne_offset := nw_offset rotated -90; + sw_offset := line_radius * unitvector (z3 - z2); + se_offset := sw_offset rotated 90; + + z4 = ((z1 - ne_offset) + -- (z2 - ne_offset)) + intersectionpoint + ((z2 - se_offset) + -- (z3 - se_offset)); + + fill z1 + ne_offset + -- z2 + ne_offset + .. rt z2 {down} + .. z2 + se_offset + -- z3 + se_offset + .. z3 + sw_offset {- se_offset} + .. z3 - se_offset + -- z4 + -- z1 - ne_offset + .. z1 + nw_offset {ne_offset} + .. cycle; +fet_endchar; + + +fet_beginchar ("accordion pull", "pull"); + save width, height; + + height# := 2.0 staff_space# + 3.0 stafflinethickness#; + width# := 0.4 height#; + + define_pixels(height, width); + + save linewidth; + + linewidth# := stafflinethickness# + .05 staff_space#; + define_whole_blacker_pixels (linewidth); + + set_char_box (width# - linewidth#, linewidth#, + 0, height#); + + pickup pencircle scaled linewidth; + + save penradius; + penradius := linewidth / 2; + + rt x1 = linewidth; + bot y1 = 0; + + x2 = x1; + top y2 = height; + + lft x3= -width + linewidth; + y3 = y2; + + x4 = x3; + y4 = y2 - linewidth; + + x5 = x1; + y5 = y4; + + fill z1 + penradius * right {up} + -- z2 + penradius * right {up} + .. z2 + penradius * up {left} + -- z3 + penradius * up {left} + .. z3 + penradius * left {down} + -- z4 + penradius * left {down} + .. z4 + penradius * down {right} + -- z5 + penradius * (down + left) + -- z1 + penradius * left {down} + .. z1 + penradius * down {right} + .. cycle; +fet_endchar; + fet_endgroup ("accordion"); diff --git a/mf/feta-alphabet.mf b/mf/feta-alphabet.mf index c3d1f09f97..5663a791b7 100644 --- a/mf/feta-alphabet.mf +++ b/mf/feta-alphabet.mf @@ -13,7 +13,7 @@ mode_setup; number_design_size := design_size / 2; dynamic_design_size := 14 design_size / 20; -input feta-nummer-code; -input feta-din-code; +input feta-numbers; +input feta-dynamics; -fet_endfont ("feta-nummer"); +fet_endfont ("feta-numbers"); diff --git a/mf/feta-arrow.mf b/mf/feta-arrow.mf deleted file mode 100644 index f0c39c783f..0000000000 --- a/mf/feta-arrow.mf +++ /dev/null @@ -1,169 +0,0 @@ -% -% feta-arrow.mf -- draw arrow heads -% -% source file of the GNU LilyPond music typesetter -% -% (c) 2005--2009 Han-Wen Nienhuys - -fet_begingroup ("arrowheads"); - -% -% To consider: we could put arrow heads at their real Unicode locations. -% - -% -% Set up paths for upper half of arrow head pointing right. -% CLOSE_PATH is for a closed arrow, OPEN_PATH is for the open arrow. -% OPEN_TENSION sets the tension for the part which forms the path in -% OPEN_PATH. -% - -def set_arrow_paths (expr width, height, open_tension, arrowlinethickness) = - save pat, finalpath; - save tip_angle_o, tip_angle_c, tip_dir_c, tip_dir_o; - save indent; - path pat, open_path, close_path; - pair tip_dir_o, tip_dir_c; - - pickup pencircle scaled arrowlinethickness; - - indent = linethickness / 2; - - lft x1 = -width; - x2 = 0; - top y1 = height; - y2 = 0; - - z4 = z3; - y5 = 0; - x5 = x4 + indent; - - pat := z1 - ..tension open_tension.. z2{right}; - penpos2 (arrowlinethickness, 90); - tip_dir_o := direction 0.0 of pat; - tip_angle_o := angle (tip_dir_o); - penpos1 (arrowlinethickness, 90 + tip_angle_o); - z3 = z1; - penpos3 (arrowlinethickness, tip_angle_o); - - open_path := z1r{tip_dir_o} - .. z2r{right} - .. z2l{left} - .. z1l{-tip_dir_o} - .. z3l - .. cycle; - - pat := z4 - .. z5{down}; - tip_dir_c := direction 0.0 of pat; - tip_angle_c := angle (tip_dir_c); - penpos4 (arrowlinethickness, 90+ tip_angle_c); - penpos5 (arrowlinethickness, 0); - z6 = z5; - penpos6 (arrowlinethickness, 90); - - close_path := z4l{tip_dir_c} - .. z5l{down} - .. z6l{right} - .. z2l{right} - .. z2r{left} - ..tension open_tension.. z1r{-tip_dir_o} - .. z3l - .. cycle; -enddef; - - -fet_beginchar ("open", "open.01"); - set_char_box (staff_space#, 1.6 linethickness# / 2, - 0.5 staff_space#, 0.5 staff_space#); - set_arrow_paths (staff_space, 0.5 staff_space, - 1.0, 1.6 linethickness); - fill open_path; - open_path := open_path yscaled -1; - fill open_path; - - penlabels (1, 2, 3); - penlabels (4, 5, 6); -fet_endchar; - - -fet_beginchar ("open", "open.0M1"); - set_char_box (1.6 linethickness# / 2, staff_space#, - 0.5 staff_space#, 0.5 staff_space#); - set_arrow_paths (staff_space, 0.5 staff_space, - 1.0, 1.6 linethickness); - fill open_path; - open_path := open_path yscaled -1; - fill open_path; - currentpicture := currentpicture xscaled -1; -fet_endchar; - - -fet_beginchar ("open", "open.11"); - set_char_box (.5 staff_space#, .5 staff_space#, - 1.0 staff_space#, 1.6 linethickness# / 2); - set_arrow_paths (staff_space, 0.5 staff_space, - 1.0, 1.6 linethickness); - fill open_path; - open_path := open_path yscaled -1; - fill open_path; - currentpicture := currentpicture rotated 90; -fet_endchar; - - -fet_beginchar ("open", "open.1M1"); - set_char_box (.5 staff_space#, .5 staff_space#, - 1.6 linethickness# / 2, 1.0 staff_space#); - set_arrow_paths (staff_space, 0.5 staff_space, - 1.0, 1.6 linethickness); - fill open_path; - open_path := open_path yscaled -1; - fill open_path; - currentpicture := currentpicture rotated 90; - currentpicture := currentpicture yscaled -1; -fet_endchar; - - -fet_beginchar ("close", "close.01"); - set_char_box (staff_space#, 0, 0.5 staff_space#, 0.5 staff_space#); - set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); - fill close_path; - close_path := close_path yscaled -1; - fill close_path; -fet_endchar; - - -fet_beginchar ("close", "close.0M1"); - set_char_box (0, staff_space#, 0.5 staff_space#, 0.5 staff_space#); - set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); - fill close_path; - close_path := close_path yscaled -1; - fill close_path; - currentpicture := currentpicture xscaled -1; -fet_endchar; - - -fet_beginchar ("close", "close.11"); - set_char_box (.5 staff_space#, .5 staff_space#, - 1.0 staff_space#, 0.0 staff_space#); - set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); - fill close_path; - close_path := close_path yscaled -1; - fill close_path; - currentpicture := currentpicture rotated 90; -fet_endchar; - - -fet_beginchar ("close", "close.1M1"); - set_char_box (.5 staff_space#, .5 staff_space#, - 0.0 staff_space#, 1.0 staff_space#); - set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); - fill close_path; - close_path := close_path yscaled -1; - fill close_path; - currentpicture := currentpicture rotated -90; -fet_endchar; - - -fet_endgroup ("arrowheads"); diff --git a/mf/feta-arrowheads.mf b/mf/feta-arrowheads.mf new file mode 100644 index 0000000000..45b364dc2a --- /dev/null +++ b/mf/feta-arrowheads.mf @@ -0,0 +1,180 @@ +% Feta (not the Font-En-Tja) music font -- draw arrow heads +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2005--2011 Han-Wen Nienhuys +% +% 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 . + +fet_begingroup ("arrowheads"); + +% +% To consider: we could put arrow heads at their real Unicode locations. +% + +% +% Set up paths for upper half of arrow head pointing right. +% CLOSE_PATH is for a closed arrow, OPEN_PATH is for the open arrow. +% OPEN_TENSION sets the tension for the part which forms the path in +% OPEN_PATH. +% + +def set_arrow_paths (expr width, height, open_tension, arrowlinethickness) = + save pat, finalpath; + save tip_angle_o, tip_angle_c, tip_dir_c, tip_dir_o; + save indent; + path pat, open_path, close_path; + pair tip_dir_o, tip_dir_c; + + pickup pencircle scaled arrowlinethickness; + + indent = linethickness / 2; + + lft x1 = -width; + x2 = 0; + top y1 = height; + y2 = 0; + + z4 = z3; + y5 = 0; + x5 = x4 + indent; + + pat := z1 + ..tension open_tension.. z2{right}; + penpos2 (arrowlinethickness, 90); + tip_dir_o := direction 0.0 of pat; + tip_angle_o := angle (tip_dir_o); + penpos1 (arrowlinethickness, 90 + tip_angle_o); + z3 = z1; + penpos3 (arrowlinethickness, tip_angle_o); + + open_path := z1r{tip_dir_o} + .. z2r{right} + .. z2l{left} + .. z1l{-tip_dir_o} + .. z3l + .. cycle; + + pat := z4 + .. z5{down}; + tip_dir_c := direction 0.0 of pat; + tip_angle_c := angle (tip_dir_c); + penpos4 (arrowlinethickness, 90+ tip_angle_c); + penpos5 (arrowlinethickness, 0); + z6 = z5; + penpos6 (arrowlinethickness, 90); + + close_path := z4l{tip_dir_c} + .. z5l{down} + .. z6l{right} + .. z2l{right} + .. z2r{left} + ..tension open_tension.. z1r{-tip_dir_o} + .. z3l + .. cycle; +enddef; + + +fet_beginchar ("open", "open.01"); + set_char_box (staff_space#, 1.6 linethickness# / 2, + 0.5 staff_space#, 0.5 staff_space#); + set_arrow_paths (staff_space, 0.5 staff_space, + 1.0, 1.6 linethickness); + fill open_path; + open_path := open_path yscaled -1; + fill open_path; + + penlabels (1, 2, 3); + penlabels (4, 5, 6); +fet_endchar; + + +fet_beginchar ("open", "open.0M1"); + set_char_box (1.6 linethickness# / 2, staff_space#, + 0.5 staff_space#, 0.5 staff_space#); + set_arrow_paths (staff_space, 0.5 staff_space, + 1.0, 1.6 linethickness); + fill open_path; + open_path := open_path yscaled -1; + fill open_path; + currentpicture := currentpicture xscaled -1; +fet_endchar; + + +fet_beginchar ("open", "open.11"); + set_char_box (.5 staff_space#, .5 staff_space#, + 1.0 staff_space#, 1.6 linethickness# / 2); + set_arrow_paths (staff_space, 0.5 staff_space, + 1.0, 1.6 linethickness); + fill open_path; + open_path := open_path yscaled -1; + fill open_path; + currentpicture := currentpicture rotated 90; +fet_endchar; + + +fet_beginchar ("open", "open.1M1"); + set_char_box (.5 staff_space#, .5 staff_space#, + 1.6 linethickness# / 2, 1.0 staff_space#); + set_arrow_paths (staff_space, 0.5 staff_space, + 1.0, 1.6 linethickness); + fill open_path; + open_path := open_path yscaled -1; + fill open_path; + currentpicture := currentpicture rotated 90; + currentpicture := currentpicture yscaled -1; +fet_endchar; + + +fet_beginchar ("close", "close.01"); + set_char_box (staff_space#, 0, 0.5 staff_space#, 0.5 staff_space#); + set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); + fill close_path; + close_path := close_path yscaled -1; + fill close_path; +fet_endchar; + + +fet_beginchar ("close", "close.0M1"); + set_char_box (0, staff_space#, 0.5 staff_space#, 0.5 staff_space#); + set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); + fill close_path; + close_path := close_path yscaled -1; + fill close_path; + currentpicture := currentpicture xscaled -1; +fet_endchar; + + +fet_beginchar ("close", "close.11"); + set_char_box (.5 staff_space#, .5 staff_space#, + 1.0 staff_space#, 0.0 staff_space#); + set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); + fill close_path; + close_path := close_path yscaled -1; + fill close_path; + currentpicture := currentpicture rotated 90; +fet_endchar; + + +fet_beginchar ("close", "close.1M1"); + set_char_box (.5 staff_space#, .5 staff_space#, + 0.0 staff_space#, 1.0 staff_space#); + set_arrow_paths (staff_space, 0.5 staff_space, 1.5, blot_diameter); + fill close_path; + close_path := close_path yscaled -1; + fill close_path; + currentpicture := currentpicture rotated -90; +fet_endchar; + + +fet_endgroup ("arrowheads"); diff --git a/mf/feta-autometric.mf b/mf/feta-autometric.mf index 24a0e1b9dd..d5cbb7f2d5 100644 --- a/mf/feta-autometric.mf +++ b/mf/feta-autometric.mf @@ -1,15 +1,25 @@ +% Feta (not the Font-En-Tja) music font -- administrative MF routines +% This file is part of LilyPond, the GNU music typesetter. % -% autometric.mf -- administrative MF routines -% -% source file of the Feta (not an acronym for Font-En-Tja) -% pretty-but-neat music font -% -% (c) 1997--2009 Han-Wen Nienhuys +% Copyright (C) 1997--2011 Han-Wen Nienhuys % Jan Nieuwenhuizen % % These macros help create ascii logging output % to automate generation of the lily tables. % The output should be parsed by the mf-to-table script. +% +% 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 . message "******************************************************"; @@ -186,7 +196,7 @@ enddef; % -% we leave the ctrl characters alone. +% we leave the ctrl characters alone % code := 32; diff --git a/mf/feta-banier.mf b/mf/feta-banier.mf deleted file mode 100644 index 46b3b0617b..0000000000 --- a/mf/feta-banier.mf +++ /dev/null @@ -1,550 +0,0 @@ -% -% feta-banier.mf -- draw flags -% -% source file of the GNU LilyPond music typesetter -% -% (c) 1997--2009 Han-Wen Nienhuys - -fet_begingroup ("flags"); - -save outer_path; -path outer_path; - -% -% Flags pointing down overlap with the notehead (in x-direction), so -% the down-flag can be bigger. -% - -upflag_width# = .65 black_notehead_width# + stemthickness# / 2; -downflag_width# = .833 black_notehead_width# + stemthickness# / 2; - -right_upflag_space# = .0 upflag_width#; -right_downflag_space# = .0 downflag_width#; - -% -% Flags pointing down cannot overlap with the notehead in y-direction, -% so they have less slant. -% -% Because of optical illusion, the utmost flag (bottom for -% down-pointing, top for up-pointing) should be smaller than the other -% flags. Adobe Sonata doesn't do this correctly. (Instead they have -% an extension flag, which looks less elegant.) -% - -save hip_thickness, foot_thickness; - -hip_thickness# = 1.0 linethickness# + 0.069 staff_space#; -foot_thickness# = 1.2055 linethickness# + 0.06 staff_space#; - -define_pixels (hip_thickness, foot_thickness); - -% -% Inspired by Adobe Sonata and [Wanske]. -% For example, see POSTSCRIPT Language -- program design, -% page 119, and [Wanske], p 41, 42. -% - -def draw_flag (expr center, flare, dims, hip_depth, foot_wid, - hip_thickness, foot_thickness, show_labels) = - save c; - - clearxy; - - c = 0.7; - - penpos1 (flare, 90); - penpos2 (whatever, 0); - - x2r - x2l = hround (hip_thickness); - - penpos3 (foot_thickness, -20.0); - - z1r = center; - z2r = center + (xpart (dims), -ypart (dims) * hip_depth); - z3r = center + (xpart (dims) * foot_wid, -ypart (dims)); - - x2r := hround x2r; - y2r := vround y2r; - - outer_path := z3r{curl c} - .. z2r{up} - .. {up}z1r; - - if show_labels = 1: - penlabels (1, 2, 3); - fi; - - fill z1l{curl 0} - ..tension 1.1.. z2l{down} - .. {curl c}simple_serif (z3l, z3r, 80) - & outer_path - & z1r - -- cycle; -enddef; - -% -% TODO: calculate intersectpoint (see TeX book, p. 137) -% TODO: calculate incision_depth -% - -def add_flag (expr yoff, flare, hip_wid_multiplier, hip_dep_multiplier, - intersectpoint, hip_thickness, foot_thickness) = -begingroup - save prev_center, prev_xextreme, prev_yextreme; - save rel_foot, ip, center, incision_depth; - save prev_hipwid, prev_footdep, prev_hipdep, wid, dep, hip_dep; - save hip_dep_ratio, foot_wid_ratio; - pair prev_center, center, foot, prev_xextreme, prev_yextreme; - pair ip, rel_foot; - - incision_depth = 1.013; - prev_center = point 2 of outer_path; - prev_xextreme = point 1 of outer_path; - prev_yextreme = point 0 of outer_path; - prev_hipwid = xpart (prev_xextreme - prev_center); - prev_footdep = -ypart (prev_yextreme - prev_center); - prev_hipdep = -ypart (prev_xextreme - prev_center); - ip = point intersectpoint of outer_path; - - wid = prev_hipwid * hip_wid_multiplier; - hip_dep = prev_hipdep * hip_dep_multiplier; - - center = prev_center + (0, yoff); - rel_foot = incision_depth [(wid, hip_dep), ip - center]; - dep = -ypart (rel_foot); - foot_wid_ratio = xpart (rel_foot) / wid; - hip_dep_ratio = hip_dep / dep; - - draw_flag (center, flare, (wid, dep), - hip_dep_ratio, foot_wid_ratio, - hip_thickness, foot_thickness, 0); -endgroup -enddef; - - -fet_beginchar ("8th Flag (up)", "u3"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - - flare = staff_space; - hip_depth_ratio = .72; - foot_width_ratio = .8; - hip_width# = upflag_width# - hip_thickness# / 2; - foot_depth# = 3 staff_space# - blot_diameter# / 2; - define_pixels (hip_width, foot_depth); - - set_char_box (0, - hip_width# + stemthickness# / 2 + right_upflag_space#, - foot_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0,0), flare, (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 1); - - draw_square_block ((-0.5 stemthickness_rounded, -staff_space_rounded), - (0, 0)); -fet_endchar; - - -fet_beginchar ("16th Flag (up)", "u4"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - total_depth# = 3.5 staff_space# - blot_diameter# / 2; - flag_count = 2; - flare = .85 staff_space; - flagspace# = .85 staff_space#; - hip_depth_ratio = .72; - hip_width# = upflag_width# - hip_thickness# / 2; - flagspace# + foot_depth# = total_depth#; - foot_width_ratio = .8; - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - set_char_box (0, - hip_width# + stemthickness# / 2 + right_upflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0, -flagspace), flare, (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 1); - - add_flag (flagspace, flare, .97, 1.00, 1.25, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -2 staff_space_rounded)); -fet_endchar; - - -fet_beginchar ("32nd Flag (up)", "u5"); - 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#; - flare = .85 staff_space; - flagspace# = .87 staff_space#; - hip_depth_ratio = .72; - hip_width# = upflag_width# - hip_thickness# / 2; - foot_width_ratio = .8; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - set_char_box (0, hip_width# + right_upflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0, -2 flagspace), flare, (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 1); - - add_flag (flagspace, flare, .97, 1.00, 1.25, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, .95, 1.05, 1.25, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -3 staff_space_rounded)); -fet_endchar; - - -fet_beginchar ("64th Flag (up)", "u6"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - flag_count = 4; - flare = .85 staff_space; - flagspace# = .9 staff_space#; - hip_depth_ratio = .72; - hip_width# = upflag_width# - hip_thickness# / 2; - total_depth# = 5.25 staff_space#; - foot_width_ratio = .8; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - set_char_box (0, hip_width# + right_upflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0, -(flag_count - 1) * flagspace), flare, - (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 1); - - add_flag (flagspace, flare, .97, 1.00, 1.3, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, 1.00, 1.00, 1.25, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, .95, 1.05, 1.25, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -4 staff_space_rounded)); -fet_endchar; - - -fet_beginchar ("128th Flag (up)", "u7"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - flag_count = 5; - flare = .85 staff_space; - flagspace# = .93 staff_space#; - hip_depth_ratio = .72; - hip_width# = upflag_width# - hip_thickness# / 2; - total_depth# = 6.25 staff_space#; - foot_width_ratio = .8; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - set_char_box (0, hip_width# + right_upflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0, -(flag_count - 1) * flagspace), flare, - (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 1); - - add_flag (flagspace, flare, .97, 1.00, 1.3, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, 1.00, 1.00, 1.25, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, 1.00, 1.00, 1.25, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, 0.95, 1.05, 1.25, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -5 staff_space_rounded)); -fet_endchar; - - -fet_beginchar ("8th (down)", "d3"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - flag_count = 1; - flare = staff_space; - flagspace# = .9 staff_space#; - hip_depth_ratio = .72; - hip_width# = downflag_width# - hip_thickness# / 2; - total_depth# = 2.85 staff_space#; - foot_width_ratio = .8; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - - define_pixels (hip_width, flagspace, foot_depth); - - set_char_box (0, hip_width# + right_downflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2) - - draw_flag ((0, -(flag_count - 1) * flagspace), flare, - (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 0); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -staff_space_rounded)); - - y_mirror_char; -fet_endchar; - - -%%%%%%%% -% -% Single Stroke for Short Appogiatura -% - -fet_beginchar ("grace dash (up)", "ugrace"); - save flare, hip_depth_ratio, hip_width, foot_depth; - - hip_depth_ratio = .72; - flare# = staff_space#; - hip_width# = upflag_width# - hip_thickness# / 2; - foot_depth# = 3 staff_space#; - - define_pixels (hip_width, foot_depth); - - set_char_box (hip_width# * hip_depth_ratio, - hip_width# + right_upflag_space#, - foot_depth# * hip_depth_ratio, -flare#) - - pickup pencircle scaled 1.5 stemthickness; - - z1 = (-b, -d); - z2 = (w, h); - - penpos1 (1.5 stemthickness, angle (z2 - z1) - 90); - penpos2 (1.5 stemthickness, angle (z2 - z1) - 90); - - fill z1l - -- z2l - .. top z2 - .. rt z2 - .. z2r - -- z1r - .. bot z1 - .. lft z1 - .. cycle; - - penlabels (1, 2); -fet_endchar; - - -fet_beginchar ("grace dash (down)", "dgrace"); - save flare, hip_depth_ratio, hip_width, foot_depth; - save total_depth; - - hip_depth_ratio = .72 ; - flare# = .99 staff_space#; - hip_width# = downflag_width# - hip_thickness# / 2; - total_depth# = 2.85 staff_space#; - foot_depth# = total_depth#; - foot_width_ratio = .8; - - define_pixels (hip_width, foot_depth); - - set_char_box (hip_width# * hip_depth_ratio, - hip_width# + right_downflag_space#, - foot_depth# * hip_depth_ratio, -flare#) - - pickup pencircle scaled 1.5 stemthickness; - - z1 = (-b, -d); - z2 = (w, h); - - penpos1 (1.5 stemthickness, angle (z2 - z1) - 90); - penpos2 (1.5 stemthickness, angle (z2 - z1) - 90); - - fill z1l - -- z2l - .. top z2 - .. rt z2 - .. z2r - -- z1r - .. bot z1 - .. lft z1 - .. cycle; - - y_mirror_char; -fet_endchar; - - -fet_beginchar ("16th (down)", "d4"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - flag_count = 2; - flare = .8 staff_space; - flagspace# = .9 staff_space#; - hip_depth_ratio = .85; - hip_width# = downflag_width# - hip_thickness# / 2; - total_depth# = 3.0 staff_space# - blot_diameter# / 2; - foot_width_ratio = .95; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - - set_char_box (0, hip_width# + right_downflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - draw_flag ((0, -(flag_count - 1) * flagspace), flare, - (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 0); - - add_flag (flagspace, flare, .95, 1.00, 1.25, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -2 staff_space_rounded)); - - y_mirror_char; -fet_endchar; - - -fet_beginchar ("32nd (down)", "d5"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - flag_count = 3; - flare = .84 staff_space; - flagspace# = .9 staff_space#; - hip_depth_ratio = .85; - hip_width# = downflag_width# - hip_thickness# / 2; - total_depth# = 3.85 staff_space#; - foot_width_ratio = .95; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - set_char_box (0, hip_width# + right_downflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0, -(flag_count - 1) * flagspace), flare, - (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 0); - - add_flag (flagspace, flare, .97, 1.00, 1.25, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, .95, 1.05, 1.25, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -3 staff_space_rounded)); - - y_mirror_char; -fet_endchar; - - -fet_beginchar ("64th (down)", "d6"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - flag_count = 4; - flare = .8 staff_space; - flagspace# = .9 staff_space#; - hip_depth_ratio = .85; - hip_width# = downflag_width# - hip_thickness# / 2; - total_depth# = 4.35 staff_space#; - foot_width_ratio = .98; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - set_char_box (0, hip_width# + right_downflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0, -(flag_count - 1) * flagspace), flare, - (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 0); - - add_flag (flagspace, flare, .97, 1.20, 1.175, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, .97, 1.10, 1.175, - hip_thickness, foot_thickness); - add_flag (.98 flagspace, flare, .91, 1.05, 1.2, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -4 staff_space_rounded)); - - y_mirror_char; -fet_endchar; - - -fet_beginchar ("128th (down)", "d7"); - save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio; - save flagspace, total_depth, flag_count; - - flag_count = 5; - flare = .8 staff_space; - flagspace# = .9 staff_space#; - hip_depth_ratio = .85; - hip_width# = downflag_width# - hip_thickness# / 2; - total_depth# = 5.25 staff_space#; - foot_width_ratio = .98; - - (flag_count - 1) * flagspace# + foot_depth# = total_depth#; - define_pixels (hip_width, foot_depth); - define_whole_vertical_pixels (flagspace); - - set_char_box (0, hip_width# + right_downflag_space#, - total_depth# + foot_thickness# / 2, stemthickness# / 2); - - draw_flag ((0, -(flag_count - 1) * flagspace), flare, - (hip_width, foot_depth), - hip_depth_ratio, foot_width_ratio, - hip_thickness, foot_thickness, 0); - - add_flag (flagspace, flare, .97, 1.20, 1.175, - hip_thickness, foot_thickness); - add_flag (flagspace, flare, .97, 1.10, 1.175, - hip_thickness, foot_thickness); - add_flag (.98 flagspace, flare, .91, 1.05, 1.2, - hip_thickness, foot_thickness); - add_flag (.98 flagspace, flare, .91, 1.05, 1.2, - hip_thickness, foot_thickness); - - draw_square_block ((-0.5 stemthickness_rounded, 0), - (0, -5 staff_space_rounded)); - - y_mirror_char; -fet_endchar; - -fet_endgroup ("flags"); diff --git a/mf/feta-beugel.mf b/mf/feta-beugel.mf deleted file mode 100644 index c61f756d38..0000000000 --- a/mf/feta-beugel.mf +++ /dev/null @@ -1,147 +0,0 @@ -% -% feta-beugel.mf -- Staff braces -% -% source file of the Feta (not an acronym for Font-En-Tja) -% pretty-but-neat music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% Jan Nieuwenhuizen - - -% We have to reduce the pixel-per-point value to -% support large brace glyphs in case we are using MetaPost -% (which by default sets `hppp' to 49.80244, regardless of -% the used `mag' value) - -if known miterlimit: - bpppix_ := 0.2; % ten times larger than original - - numeric mm, pt, dd, bp, cm, pc, cc, in; - - mm * bpppix_ = 2.83464; - pt * bpppix_ = 0.99626; - dd * bpppix_ = 1.06601; - bp * bpppix_ = 1; - cm * bpppix_ = 28.34645; - pc * bpppix_ = 11.95517; - cc * bpppix_ = 12.79213; - in * bpppix_ = 72; - - hppp := pt; - vppp := pt; -fi; - - -input feta-autometric; -input feta-macros; - -staffsize# := 20 pt#; %% arbitrary - -input feta-params; - -% -% We must let the design increase for each font to make sure that mftrace -% doesn't jack up the resolution too highly for the longer braces. -% - -fet_beginfont ("feta-braces-" & char (97 + font_count), - (font_count + 1) * 20, "fetaBraces"); - -mode_setup; - - -save code, braces_per_font; -code := 64; -braces_per_font := 64; - -def draw_brace (expr height_sharp, width_sharp, slt_sharp, brace_number) = - save pendir, height, width, thin, thick, slt, pat; - save penangle; - pair pendir; - path pat; - - height# := height_sharp; - width# := width_sharp; - slt# := slt_sharp; - - fet_beginchar ("brace number " & decimal (brace_number), - "brace" & decimal (brace_number)) - set_char_box (width#, 0, height# / 2, height# / 2); - - define_pixels (height, width, slt); - thin = 2 slt; - thick = .5 width; - - z2 = .5 [z1, z3]; - y3l = y1 + height / 2; - x3 = x1 + width; - y1 = 0; - x1 = -b; - y0 = y1; - x0 = x1 - 2/6 thin; - - pendir = unitvector (x3 - x1, y3l / 6 - y1); - penangle = angle pendir - 90; - penpos3 (thin, penangle); - penpos2 (thick, angle (z3 - z1) - 90); - penpos1 (2/3 thin, penangle); - - penlabels (1, 2, 3); - labels (0); - - pat := z2r - .. simple_serif (z3r, z3l, 90) - .. z2l - .. z1l{dir (angle (z1r - z1l) - 90)} - .. z0{down} - .. z1r{-dir (angle (z1l - z1r) + 90)} - .. cycle; - pat := subpath (0, 5) of pat - -- subpath (6, 7) of pat - .. cycle; - - fill pat; - fill pat yscaled -1; - fet_endchar; -enddef; - - -save stafflinethickness; -save increment; - -linethickness := 0.5 pt#; -increment := 0.5 pt#; -y := 10 pt#; - -for i := 0 step 1 until font_count: - save number; - - number := braces_per_font * i; - - for j := 0 step 1 until (braces_per_font - 1): - % message "l: "&decimal l; - % note: define_pixels (x) multiplies x by hppp, - % must never get bigger than infinity - y := y + increment; - if y > infinity / hppp: - message "Resolution and/or magnification is too high"; - message "HPPP: "& decimal hppp &" Y: " & decimal y; - errmessage "please report to "; - 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; - - increment := x / 10; - linethickness := min (0.5 pt#, y / 150); - if i = font_count: - draw_brace (y, x, linethickness, number); - fi; - - number := number + 1; - endfor; -endfor; - -fet_endfont ("feta-braces"); diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf deleted file mode 100644 index fcda600978..0000000000 --- a/mf/feta-bolletjes.mf +++ /dev/null @@ -1,1497 +0,0 @@ -% -*-Fundamental-*- -% feta-bolletjes.mf -- implement noteheads -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 1997--2009 Jan Nieuwenhuizen -% & Han-Wen Nienhuys -% & Juergen Reuter -% - -test_outlines := 0; - - -save remember_pic; -picture remember_pic; - - -% Most beautiful noteheads are pronounced, not circular, -% and not even symmetric. -% These examples are inspired by [Wanske]; see literature list. - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% NOTE HEAD VARIABLES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -save black_notehead_width, noteheight; -save half_notehead_width, whole_notehead_width, slash_thick; -save slash_slope, overdone_heads, 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; - path pat; - - pat := superellipse ((ellipticity, 0), (0, 1.0), - (-ellipticity, 0), (0, -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 height, scaling; - - height# = staff_space# + stafflinethickness# - clearance; - scaling# = height# / (2 ypart (top_point)); - define_pixels (scaling); - pat := pat scaled scaling shifted (w / 2, .5 (h - d)); - - if test_outlines = 1: - draw pat; - else: - unfill pat; - fi -endgroup; -enddef; - - -% -% dimensions aren't entirely right. -% -def draw_longa (expr up) = - save stemthick, fudge; - - stemthick# = 2 stafflinethickness#; - define_whole_blacker_pixels (stemthick); - - fudge = hround (blot_diameter / 2); - - draw_outside_ellipse (1.80, 0, 0.707, 0); - undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#); - - pickup pencircle scaled stemthick; - - if up: - bot y1 = -d; - top y2 = h; - rt x1 - fudge = 0; - x1 = x2; - - fudge + lft x3 = w; - x4 = x3; - top y4 = h + 3.0 staff_space; - y3 = y1; - else: - bot y1 = -d - 3.0 staff_space; - top y2 = h; - rt x1 - fudge = 0; - x1 = x2; - - fudge + lft x3 = w; - x4 = x3; - y4 = y2; - bot y3 = -d; - fi; - - draw_gridline (z1, z2, stemthick); - draw_gridline (z3, z4, stemthick); - - labels (1, 2, 3, 4); -enddef; - - -fet_beginchar ("Longa notehead", "uM2"); - draw_longa (true); - - draw_staff (-2, 2, 0); -fet_endchar; - -fet_beginchar ("Longa notehead", "dM2"); - draw_longa (false); - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Longa notehead", "uM2"); - draw_longa (true); - - draw_staff (-2, 2, 0.5); - fet_endchar; - - fet_beginchar ("Longa notehead", "dM2"); - draw_longa (false); - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -% -% dimensions aren't entirely right. -% -def draw_brevis = - save stemthick, fudge; - - stemthick# = 2 stafflinethickness#; - define_whole_blacker_pixels (stemthick); - - fudge = hround (blot_diameter / 2); - - draw_outside_ellipse (1.80, 0, 0.707, 0); - undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#); - - pickup pencircle scaled stemthick; - - bot y1 = -d; - top y2 = h; - rt x1 - fudge = 0; - x1 = x2; - - fudge + lft x3 = w; - x4 = x3; - y4 = y2; - y3 = y1; - - draw_gridline (z1, z2, stemthick); - draw_gridline (z3, z4, stemthick); -enddef; - - -fet_beginchar ("Brevis notehead", "sM1"); - draw_brevis; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Brevis notehead", "sM1"); - draw_brevis; - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("Whole notehead", "s0"); - draw_outside_ellipse (1.80 - puff_up_factor / 3.0, 0, 0.707, 0); - undraw_inside_ellipse (1.30, 125 - puff_up_factor * 10, - 0.68, 2 stafflinethickness#); - - whole_notehead_width# := charwd; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Whole notehead", "s0"); - draw_outside_ellipse (1.80 - puff_up_factor / 3.0, 0, - 0.707, 0); - undraw_inside_ellipse (1.30, 125 - puff_up_factor * 10, - 0.68, 2 stafflinethickness#); - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("Half notehead", "s1"); - draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, 0.66, 0.17); - undraw_inside_ellipse (3.25, 33, 0.81, 2.5 stafflinethickness#); - - half_notehead_width# := charwd; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Half notehead", "s1"); - draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, - 0.66, 0.17); - undraw_inside_ellipse (3.25, 33, 0.81, - 2.5 stafflinethickness#); - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("Quart 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_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Quart notehead", "s2"); - draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, - 0.707, 0); - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -fet_beginchar ("Whole diamondhead", "s0diamond"); - draw_outside_ellipse (1.80, 0, 0.495, 0); - undraw_inside_ellipse (1.30, 125, 0.6, - .4 staff_space# + stafflinethickness#); - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Whole diamondhead", "s0diamond"); - draw_outside_ellipse (1.80, 0, 0.495, 0); - undraw_inside_ellipse (1.30, 125, 0.6, - .4 staff_space# + stafflinethickness#); - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("Half diamondhead", "s1diamond"); - draw_outside_ellipse (1.50, 34, 0.49, 0.17); - undraw_inside_ellipse (3.5, 33, 0.80, - .3 staff_space# + 1.5 stafflinethickness#); - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Half diamondhead", "s1diamond"); - draw_outside_ellipse (1.50, 34, 0.49, 0.17); - undraw_inside_ellipse (3.5, 33, 0.80, - .3 staff_space# - + 1.5 stafflinethickness#); - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("Quart diamondhead", "s2diamond"); - draw_outside_ellipse (1.80, 35, 0.495, -0.25); - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Quart diamondhead", "s2diamond"); - draw_outside_ellipse (1.80, 35, 0.495, -0.25); - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -vardef penposx@# (expr d) = -begingroup; - save pat; - path pat; - - pat = top z@# - .. lft z@# - .. bot z@# - .. rt z@# - .. cycle; - z@#l = pat intersectionpoint (z@# -- infinity * dir (d + 180)); - z@#r = pat intersectionpoint (z@# -- infinity * dir (d)); -endgroup -enddef; - - -% -% UGH: xs not declared as argument. -% -def define_triangle_shape (expr stemdir) = - save triangle_a, triangle_b, triangle_c; - save triangle_out_a, triangle_out_b, triangle_out_c; - save triangle_in, triangle_out; - save width, depth, height; - save origin, left_up_dir; - save exact_left_point, exact_right_point, exact_down_point; - - path triangle_a, triangle_b, triangle_c; - path triangle_out_a, triangle_out_b, triangle_out_c; - path triangle_in, triangle_out; - pair origin, left_up_dir; - pair exact_down_point, exact_left_point, exact_right_point; - - save pen_thick; - pen_thick# = stafflinethickness# + .1 staff_space#; - define_pixels (llap); - define_blacker_pixels (pen_thick); - - left_up_dir = llap# * dir (90 + tilt); - - xpart (left_up_dir) * xs - (pen_thick# * xs) / 2 + xpart origin = 0; - ypart origin = 0; - - exact_left_point := origin + (left_up_dir xscaled xs); - exact_down_point := origin + (left_up_dir rotated 120 xscaled xs); - exact_right_point := origin + (left_up_dir rotated 240 xscaled xs); - - height# = ypart (exact_left_point + origin) + pen_thick# / 2; - depth# = -ypart (exact_down_point + origin) + pen_thick# / 2; - width# = xpart (exact_right_point - exact_left_point) - + pen_thick# * xs; - - set_char_box (0, width#, depth#, height#); - - % Formerly, the shape has simply been drawn with an elliptical pen - % (`scaled pen_thick xscaled xs'), but the envelope of such a curve - % is of 6th degree. For the sake of mf2pt1, we approximate it. - - pickup pencircle scaled pen_thick xscaled xs; - - z0 = (hround_pixels (xpart origin), 0); - - z1 = z1' = z0 + llap * dir (90 + tilt) xscaled xs; - z2 = z2' = z0 + llap * dir (90 + tilt + 120) xscaled xs; - z3 = z3' = z0 + llap * dir (90 + tilt + 240) xscaled xs; - - z12 = caveness [.5[z1, z2], z3]; - z23 = caveness [.5[z2, z3], z1]; - z31 = caveness [.5[z3, z1], z2]; - - triangle_a = z1 .. z12 .. z2; - triangle_b = z2 .. z23 .. z3; - triangle_c = z3 .. z31 .. z1; - - penposx1 (angle (direction 0 of triangle_a) - 90); - penposx2 (angle (direction 0 of triangle_b) - 90); - penposx3 (angle (direction 0 of triangle_c) - 90); - - penposx1' (angle (direction infinity of triangle_c) + 90); - penposx2' (angle (direction infinity of triangle_a) + 90); - penposx3' (angle (direction infinity of triangle_b) + 90); - - penposx12 (angle (z12 - z0)); - penposx23 (angle (z23 - z0)); - penposx31 (angle (z31 - z0)); - - z10 = (z0 -- z1) intersectionpoint (z1l .. z12l .. z2'r); - z20 = (z0 -- z2) intersectionpoint (z2l .. z23l .. z3'r); - z30 = (z0 -- z3) intersectionpoint (z3l .. z31l .. z1'r); - - triangle_in = z10 - .. z12l - .. z20 - & z20 - .. z23l - .. z30 - & z30 - .. z31l - .. z10 - & cycle; - - triangle_out_a = z1r .. z12r .. z2'l; - triangle_out_b = z2r .. z23r .. z3'l; - triangle_out_c = z3r .. z31r .. z1'l; - - triangle_out = top z1 - .. lft z1 - .. z1r{direction 0 of triangle_out_a} - & triangle_out_a - & {direction infinity of triangle_out_a}z2'l - .. lft z2 - .. bot z2 - .. z2r{direction 0 of triangle_out_b} - & triangle_out_b - & {direction infinity of triangle_out_b}z3'l - .. rt z3 - .. top z3 - .. z3r{direction 0 of triangle_out_c} - & triangle_out_c - & {direction infinity of triangle_out_c}z1'l - .. cycle; - - labels (0, 10, 20, 30); - penlabels (1, 1', 2, 2', 3, 3', 12, 23, 31); - - % attachment Y - if stemdir = 1: - charwy := ypart exact_right_point; - charwx := xpart exact_right_point + .5 pen_thick# * xs; - else: - charwy := -ypart exact_down_point; - charwx := width# - (xpart exact_down_point - .5 pen_thick# * xs); - fi -enddef; - - -def draw_whole_triangle_head = - save hei, xs; - save llap; - save tilt; - - tilt = 40; - llap# = 3/4 noteheight#; - - xs = 1.5; - caveness := 0.1; - define_triangle_shape (1); - fill triangle_out; - unfill triangle_in; -enddef; - - -fet_beginchar ("Whole trianglehead", "s0triangle"); - draw_whole_triangle_head; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Whole trianglehead", "s0triangle"); - draw_whole_triangle_head; - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -def draw_small_triangle_head (expr dir) = - save hei, xs; - save llap; - save tilt; - - tilt = 40; - llap# = 2/3 noteheight#; - xs = 1.2; - caveness := 0.1; - define_triangle_shape (dir); - - pickup feta_fillpen; - - filldraw triangle_out; - unfilldraw triangle_in; -enddef; - - -fet_beginchar ("Half trianglehead (downstem)", "d1triangle"); - draw_small_triangle_head (-1); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("Half trianglehead (upstem)", "u1triangle"); - draw_small_triangle_head (1); - - draw_staff (-2, 2, 0.5); -fet_endchar; - - -def draw_closed_triangle_head (expr dir) = - save hei, xs; - save llap; - save tilt; - - tilt = 40; - llap# = 2/3 noteheight#; - xs = 1.0; - caveness := 0.1; - define_triangle_shape (dir); - fill triangle_out; -enddef; - - -fet_beginchar ("Quart trianglehead (upstem)", "u2triangle"); - draw_closed_triangle_head (1); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("Quart trianglehead (downstem)", "d2triangle"); - draw_closed_triangle_head (-1); - - draw_staff (-2, 2, 0.5); -fet_endchar; - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Slash heads are for indicating improvisation. They are -% twice as high as normal heads. -% -def draw_slash (expr hwid_hash) = - save exact_height; - save ne, nw_dist; - pair ne, nw_dist; - exact_height = staff_space# + stafflinethickness# / 2; - - set_char_box (0, 2 exact_height / slash_slope + hwid_hash, - exact_height, exact_height); - - charwx := charwd; - charwy := charht; - - clearxy; - - d := d - feta_shift; - - pickup pencircle scaled blot_diameter; - - bot y1 = -d; - top y2 = h; - lft x1 = 0; - lft x2 = 2 h / slash_slope; - - rt x3 = w; - y3 = y2; - y4 = y1; - x3 - x2 = x4 - x1; - - ne = unitvector (z3 - z4); - nw_dist = (ne rotated 90) * 0.5 blot_diameter; - - fill bot z1{left} - .. (z1 + nw_dist){ne} - -- (z2 + nw_dist){ne} - .. top z2{right} - -- top z3{right} - .. (z3 - nw_dist){-ne} - -- (z4 - nw_dist){-ne} - .. bot z4{left} - -- cycle; - - if hwid_hash > 2 slash_thick#: - save th; - - th = slash_thick - blot_diameter; - y6 = y7; - y5 = y8; - y3 - y7 = th; - y5 - y1 = th; - z6 - z5 = whatever * ne; - z8 - z7 = whatever * ne; - - z5 = z1 + whatever * ne + th * (ne rotated -90); - z8 = z4 + whatever * ne + th * (ne rotated 90); - - unfill z5 - -- z6 - -- z7 - -- z8 - -- cycle; - fi - labels (range 1 thru 10); -enddef; - - -fet_beginchar ("Whole slashhead", "s0slash"); - draw_slash (4 slash_thick# + 0.5 staff_space#); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("Half slashhead", "s1slash"); - draw_slash (3.0 slash_thick# + 0.15 staff_space#); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("Quart slashhead", "s2slash"); - draw_slash (1.5 slash_thick#); - - draw_staff (-2, 2, 0); -fet_endchar; - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% `thick' is the distance between the NE/SW parallel lines in the cross -% (distance between centres of lines) in multiples of stafflinethickness -% -def draw_cross (expr thick) = - save ne, nw; - save ne_dist, nw_dist, rt_dist, up_dist; - save crz_in, crz_out; - save thickness; - pair ne, nw; - pair ne_dist, nw_dist, rt_dist, up_dist; - path crz_in, crz_out; - - pen_thick# := 1.2 stafflinethickness#; - thickness# := thick * stafflinethickness#; - define_pixels (thickness); - define_blacker_pixels (pen_thick); - - pickup pencircle scaled pen_thick; - - h := h - feta_shift; - - top y3 = h; - ne = unitvector ((1, (2 h - pen_thick) / (w - pen_thick))); - rt x4 = w / 2; - y5 = 0; - z4 - z5 = whatever * ne; - x6 = 0; - z6 - z3 = whatever * ne; - z3 - z4 = whatever * (ne yscaled -1); - - z4 - z3 = whatever * (ne) + (ne rotated -90) * thickness; - - - x1 = charwd / 2 - .5 pen_thick#; - z1 = whatever * ne - + thick / 2 * stafflinethickness# * (ne rotated -90); - - % labels (1, 2, 3, 4, 5, 6); - - nw = unitvector (z3 - z4); - - up_dist = up * 0.5 pen_thick / cosd (angle (ne)); - rt_dist = right * 0.5 pen_thick / sind (angle (ne)); - nw_dist = (ne rotated 90) * 0.5 pen_thick; - ne_dist = (nw rotated -90) * 0.5 pen_thick; - - x4' := x4; - x5' := x5; - y6' := y6; - - x4 := hround (x4' + .5 pen_thick) - .5 pen_thick; - x5 := hfloor (x5' + xpart rt_dist) - xpart rt_dist; - y6 := vfloor (y6' + ypart up_dist) - ypart up_dist; - - crz_out = (z6 + up_dist) - -- (z3 + nw_dist){ne} - .. (top z3) - .. (z3 + ne_dist){-nw} - -- (z4 + ne_dist){-nw} - .. (rt z4) - .. (z4 - nw_dist){-ne} - -- (z5 + rt_dist); - crz_out := crz_out shifted (0, feta_shift) - -- reverse crz_out yscaled -1 shifted (0, -feta_eps); - fill crz_out - -- reverse crz_out xscaled -1 shifted (-feta_eps, 0) - -- cycle; - - if (thick > 1): - x4 := hround (x4' - xpart rt_dist) + xpart rt_dist; - x5 := hceiling (x5' - .5 pen_thick) + .5 pen_thick; - y6 := vfloor (y6' - .5 pen_thick) + .5 pen_thick; - - crz_in = (bot z6){right} - .. (z6 - nw_dist){ne} - -- (z3 - up_dist) - -- (z4 - rt_dist) - -- (z5 + nw_dist){-ne} - .. {down}(lft z5); - crz_in := crz_in shifted (0, feta_shift) - -- reverse crz_in yscaled -1 shifted (0, -feta_eps); - unfill crz_in - -- reverse crz_in xscaled -1 shifted (-feta_eps, 0) - -- cycle; - fi - - % ugh - currentpicture := currentpicture shifted (hround (w / 2), 0); - - charwx := charwd; - charwy := y1 + feta_shift; - - z12 = (charwx * hppp, y1 * vppp); - - labels (12); -enddef; - - -fet_beginchar ("Whole Crossed notehead", "s0cross"); - save wid, hei; - - wid# := black_notehead_width# + 4 stafflinethickness#; - hei# := noteheight# + stafflinethickness#; - - set_char_box (0, wid#, hei# / 2, hei# / 2); - - draw_cross (3.75); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Whole Crossed notehead", "s0cross"); - save wid, hei; - - wid# := black_notehead_width# + 4 stafflinethickness#; - hei# := noteheight# + stafflinethickness#; - - set_char_box (0, wid#, hei# / 2, hei# / 2); - - currentpicture := remember_pic; - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("Half Crossed notehead", "s1cross"); - save wid, hei; - - wid# := black_notehead_width# + 2 stafflinethickness#; - hei# := noteheight# + stafflinethickness# / 2; - - set_char_box (0, wid#, hei# / 2, hei# / 2); - - draw_cross (3.0); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Half Crossed notehead", "s1cross"); - save wid, hei; - - wid# := black_notehead_width# + 2 stafflinethickness#; - hei# := noteheight# + stafflinethickness# / 2; - - set_char_box (0, wid#, hei# / 2, hei# / 2); - - currentpicture := remember_pic; - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("Crossed notehead", "s2cross"); - wid# := black_notehead_width#; - hei# := noteheight#; - set_char_box (0, wid#, hei# / 2, hei# / 2); - - draw_cross (1.0); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("Crossed notehead", "s2cross"); - wid# := black_notehead_width#; - hei# := noteheight#; - set_char_box (0, wid#, hei# / 2, hei# / 2); - - currentpicture := remember_pic; - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -fet_beginchar ("X-Circled notehead", "s2xcircle"); - save wid, hei; - save cthick, cxd, cyd, dy; - - wid# := black_notehead_width# * sqrt (sqrt2); - hei# := noteheight# * sqrt (sqrt2); - - set_char_box (0, wid#, hei# / 2, hei# / 2); - - d := d - feta_space_shift; - - cthick# := (1.2 + 1/4) * stafflinethickness#; - define_blacker_pixels (cthick); - - cxd := w - cthick; - cyd := h + d - cthick / 2; - - dy = .5 (h - d); - - pickup pencircle scaled cthick; - - fill fullcircle xscaled (cxd + cthick) - yscaled (cyd + cthick) - shifted (w / 2, dy); - unfill fullcircle xscaled (cxd - cthick) - yscaled (cyd - cthick) - shifted (w / 2, dy); - - xpos := .5 cxd / sqrt2; - ypos := .5 cyd / sqrt2; - - pickup penrazor scaled cthick rotated (angle (xpos, ypos) + 90); - draw (-xpos + w / 2, -ypos + dy) -- (xpos + w / 2, ypos + dy); - - pickup penrazor scaled cthick rotated (angle (xpos, -ypos) + 90); - draw (-xpos + w / 2, ypos + dy) -- (xpos + w / 2, -ypos + dy); - - charwx := charwd; - charwy := 0; - - z12 = (charwx * hppp, charwy * vppp); - labels (12); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -if test > 0: - fet_beginchar ("X-Circled notehead", "s2xcircle"); - save wid, hei; - save cthick, cxr, cyr; - - wid# := black_notehead_width# * sqrt (sqrt2); - hei# := noteheight# * sqrt (sqrt2); - - set_char_box (0, wid#, hei# / 2, hei# / 2); - - currentpicture := remember_pic; - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; - - -%%%%%%%% -% -% SOLFA SHAPED NOTES -% - -save solfa_pen_thick; -solfa_pen_thick# = 1.75 stafflinethickness#; -define_blacker_pixels (solfa_pen_thick); - - -save solfa_base_notewidth; -solfa_base_notewidth# := black_notehead_width#; - -solfa_whole_width := whole_notehead_width# / black_notehead_width#; -solfa_half_width := half_notehead_width# / black_notehead_width#; -solfa_quarter_width := 1.0; - -def draw_do_head (expr width_factor, dir) = - save p_in, p_out; - save left_dist, right_dist; - path p_in, p_out; - pair left_dist, right_dist; - - set_char_box (0, width_factor * solfa_base_notewidth#, - 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); - - pickup pencircle scaled solfa_pen_thick; - - bot y1 = -d; - y1 = y2; - lft x1 = 0; - rt x2 = w; - top y3 = h; - x3 =.5 [x1, x2]; - - left_dist = (unitvector (z3 - z1) rotated 90) * 0.5 solfa_pen_thick; - right_dist = (unitvector (z2 - z3) rotated 90) * 0.5 solfa_pen_thick; - - p_in := (((z1 - left_dist) -- (z3 - left_dist)) intersectionpoint - (top z1 -- top z2)) - -- ((top z1 -- top z2) intersectionpoint - ((z2 - right_dist) -- (z3 - right_dist))) - -- (((z2 - right_dist) -- (z3 - right_dist)) intersectionpoint - ((z1 - left_dist) -- (z3 - left_dist))) - -- cycle; - - p_out := bot z1 - -- bot z2{right} - .. rt z2{up} - .. (z2 + right_dist){z3 - z2} - -- (z3 + right_dist){z3 - z2} - .. top z3{left} - .. (z3 + left_dist){z1 - z3} - -- (z1 + left_dist){z1 - z3} - .. lft z1{down} - .. {right}cycle; - - - labels (1, 2, 3); - - charwx := charwd; - charwy := -chardp + 0.5 stafflinethickness#; - if dir = -1: - charwy := -charwy; - fi; -enddef; - - -fet_beginchar ("Whole dohead", "s0do"); - draw_do_head (solfa_whole_width, 1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Half dohead", "d1do"); - draw_do_head (solfa_half_width, -1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Half dohead", "u1do"); - draw_do_head (solfa_half_width, 1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Quart dohead", "d2do"); - draw_do_head (solfa_quarter_width, -1); - fill p_out; -fet_endchar; - - -fet_beginchar ("Quart dohead", "u2do"); - draw_do_head (solfa_quarter_width, 1); - fill p_out; -fet_endchar; - - -% -% re - flat top, curved bottom: -% (0,h/2) {dir -90} .. (w/2,-h/2) .. {dir 90} (w,h/2) -- cycle; -% (broader along the base and with more vertical sides for half and -% whole notes) -% stem attachment: h/2 -% - -def draw_re_head (expr width_factor, dir) = - save p_in, p_out; - path p_in, p_out; - - set_char_box (0, width_factor * solfa_base_notewidth#, - 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); - - pickup pencircle scaled solfa_pen_thick; - - save curve_start; - curve_start = 0.7; - lft x1 = 0; - y1 = y5; - x1 = x2; - y2 = curve_start [y3, y1]; - bot y3 = -d; - x3 = .5 [x2, x4]; - rt x4 = w; - y4 = y2; - top y5 = h; - x5 = x4; - - labels (range 1 thru 5); - - p_in := (z1 + 0.5 solfa_pen_thick * (1, -1)) - -- rt z2{down} - .. top z3 - .. lft z4{up} - -- (z5 + 0.5 solfa_pen_thick * (-1, -1)) - -- cycle; - - p_out := lft z1 - -- lft z2{down} - .. bot z3 - .. rt z4{up} - -- rt z5{up} - .. top z5{left} - -- top z1{left} - .. {down}cycle; - - charwx := charwd; - charwy := curve_start [-chardp, charht]; - - if dir = -1: - charwy := -charwy; - fi; -enddef; - - -fet_beginchar ("Whole rehead", "s0re"); - draw_re_head (solfa_whole_width, 1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Half up rehead", "u1re"); - draw_re_head (solfa_half_width, 1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Half down rehead", "d1re"); - draw_re_head (solfa_half_width, -1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Quart rehead", "u2re"); - draw_re_head (solfa_quarter_width, 1); - fill p_out; -fet_endchar; - - -fet_beginchar ("Quart rehead", "d2re"); - draw_re_head (solfa_quarter_width, -1); - fill p_out; -fet_endchar; - - -def draw_mi_head (expr width_factor) = - save path_out, path_in; - save ne_dist, se_dist, ne, se; - path path_out, path_in; - pair ne_dist, se_dist, ne, se; - - set_char_box (0, width_factor * solfa_base_notewidth#, - 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); - - pickup pencircle scaled solfa_pen_thick; - - lft x1 = 0; - y1 = 0; - bot y2 = -d; - x2 = .5 [x1, x3]; - rt x3 = w; - x4 = x2; - y3 = y1; - top y4 = h; - - z6 - z5 = whatever * (z2 - z1); - z8 - z7 = whatever * (z2 - z1); - z8 - z5 = whatever * (z4 - z1); - z6 - z7 = whatever * (z4 - z1); - - ne = unitvector (z4 - z1); - se = unitvector (z1 - z2); - - ne_dist = (ne rotated 90) * 0.5 solfa_pen_thick; - se_dist = (se rotated 90) * 0.5 solfa_pen_thick; - - z5 = whatever [z1, z4] - ne_dist; - z5 = whatever [z1, z2] - 1.5 se_dist; - - z5 - z1 = -(z7 - z3); - - labels (range 1 thru 8); - - path_in := z5 - -- z6 - -- z7 - -- z8 - -- cycle; - - path_out := lft z1 - .. (z1 + se_dist){-se} - -- (z2 + se_dist){-se} - .. bot z2 - .. (z2 - ne_dist){ne} - -- (z3 - ne_dist){ne} - .. rt z3 - .. (z3 - se_dist){se} - -- (z4 - se_dist){se} - .. top z4 - .. (z4 + ne_dist){-ne} - -- (z1 + ne_dist){-ne} - .. cycle; -enddef; - - -fet_beginchar ("Whole mihead", "s0mi"); - draw_mi_head (solfa_whole_width); - fill path_out; - unfill path_in; -fet_endchar; - - -fet_beginchar ("Half mihead", "s1mi"); - draw_mi_head (solfa_quarter_width); - fill path_out; - unfill path_in; -fet_endchar; - - -fet_beginchar ("Quart mihead", "s2mi"); - draw_mi_head (solfa_quarter_width); - fill path_out; -fet_endchar; - - -def draw_fa_head (expr width_factor) = - set_char_box (0, width_factor * solfa_base_notewidth#, - 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); - - save p_down_in, p_down_out, p_up_in, p_up_out, nw_dist, nw; - path p_down_in, p_down_out, p_up_in, p_up_out; - pair nw_dist, nw; - - pickup pencircle scaled solfa_pen_thick; - - lft x1 = 0; - top y1 = h; - - rt x2 = w; - y2 = y1; - bot y3 = -d; - x3 = x2; - - y4 = y3; - x4 = x1; - - labels (1, 2, 3, 4); - - nw = unitvector (z1 - z3); - nw_dist = (nw rotated 90) * 0.5 solfa_pen_thick; - - p_up_in := (((z1 - nw_dist) -- (z3 - nw_dist)) intersectionpoint - (bot z1 -- bot z2)) - -- (((z1 - nw_dist) -- (z3 - nw_dist)) intersectionpoint - (lft z3 -- lft z2)) - -- (z2 + 0.5 solfa_pen_thick * (-1, -1)) - -- cycle; - - p_up_out := lft z1{down} - .. (z1 + nw_dist){-nw} - -- (z3 + nw_dist){-nw} - .. bot z3{right} - .. rt z3{up} - -- rt z2{up} - .. top z2{left} - -- top z1{left} - .. {down}cycle; - - p_down_in := p_up_in rotated 180 shifted (w, 0); - p_down_out := p_up_out rotated 180 shifted (w, 0); - - charwy := 0.0; - charwx := charwd; -enddef; - - -fet_beginchar ("Whole fa up head", "u0fa"); - draw_fa_head (solfa_whole_width); - fill p_up_out; - unfill p_up_in; -fet_endchar; - - -fet_beginchar ("Whole fa down head", "d0fa"); - draw_fa_head (solfa_whole_width); - fill p_down_out; - unfill p_down_in; -fet_endchar; - - -fet_beginchar ("half fa up head", "u1fa"); - draw_fa_head (solfa_half_width); - fill p_up_out; - unfill p_up_in; -fet_endchar; - - -fet_beginchar ("Half fa down head", "d1fa"); - draw_fa_head (solfa_half_width); - fill p_down_out; - unfill p_down_in; -fet_endchar; - - -fet_beginchar ("Quarter fa up head", "u2fa"); - draw_fa_head (solfa_quarter_width); - fill p_up_out; -fet_endchar; - - -fet_beginchar ("Quarter fa down head", "d2fa"); - draw_fa_head (solfa_quarter_width); - fill p_down_out; -fet_endchar; - - -def draw_la_head (expr width_factor) = - set_char_box (0, width_factor * solfa_base_notewidth#, - 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); - save p_in, p_out; - path p_in, p_out; - - pickup pencircle scaled solfa_pen_thick; - - lft x1 = 0; - top y1 = h; - - rt x2 = w; - y2 = y1; - bot y3 = -d; - x3 = x2; - - y4 = y3; - x4 = x1; - - labels (range 1 thru 4); - - p_in := (z1 + 0.5 solfa_pen_thick * (1, -1)) - -- (z2 + 0.5 solfa_pen_thick * (-1, -1)) - -- (z3 + 0.5 solfa_pen_thick * (-1, 1)) - -- (z4 + 0.5 solfa_pen_thick * (1, 1)) - -- cycle; - - p_out := top z1 - -- top z2{right} - .. rt z2{down} - -- rt z3{down} - .. bot z3{left} - -- bot z4{left} - .. lft z4{up} - -- lft z1{up} - .. cycle; -enddef; - - -fet_beginchar ("Whole lahead", "s0la"); - draw_la_head (solfa_whole_width); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Half lahead", "s1la"); - draw_la_head (solfa_half_width); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Quart lahead", "s2la"); - draw_la_head (solfa_quarter_width); - fill p_out; -fet_endchar; - - -def draw_ti_head (expr width_factor, dir) = - set_char_box (0, width_factor * solfa_base_notewidth#, - 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); - save p_in, p_out, p_top; - save nw_dist, sw_dist, nw, sw; - path p_in, p_out, p_top; - pair nw_dist, sw_dist, nw, sw; - save cone_height; - cone_height = 0.64; - - pickup pencircle scaled solfa_pen_thick; - - x1 = .5 [x2, x4]; - bot y1 = -d; - lft x2 = 0; - y2 = cone_height [y1, y3]; - rt x4 = w; - y4 = y2; - x3 = x1; - top y3 = h; - - labels (range 1 thru 4); - - nw = unitvector (z2 - z1); - sw = unitvector (z1 - z4); - - nw_dist = (nw rotated 90) * 0.5 solfa_pen_thick; - sw_dist = (sw rotated 90) * 0.5 solfa_pen_thick; - - p_top := (z2 - sw_dist) - .. (top z3){right} - .. (z4 - nw_dist); - - p_in := (((z1 - nw_dist) -- (z2 - nw_dist)) intersectionpoint - ((z1 - sw_dist) -- (z4 - sw_dist))) - -- (((z1 - nw_dist) -- (z2 - nw_dist)) intersectionpoint - ((z2 + sw_dist) .. {right}(bot z3))) - .. bot z3 - .. (((bot z3){right} .. (z4 + nw_dist)) intersectionpoint - ((z1 - sw_dist) -- (z4 - sw_dist))) - -- cycle; - - p_out := bot z1 - .. (z1 + nw_dist) - -- (z2 + nw_dist) - .. lft z2 - .. (z2 - sw_dist){direction 0 of p_top} - & p_top - & {direction infinity of p_top}(z4 - nw_dist) - .. rt z4 - .. (z4 + sw_dist) - -- (z1 + sw_dist) - .. cycle; - - charwx := charwd; - charwy := cone_height [-chardp, charht]; - if dir = -1: - charwy := -charwy; - fi; -enddef; - - -fet_beginchar ("Whole up tihead", "s0ti"); - draw_ti_head (solfa_whole_width, 1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Half up tihead", "u1ti"); - draw_ti_head (solfa_half_width, 1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Half down tihead", "d1ti"); - draw_ti_head (solfa_half_width, -1); - fill p_out; - unfill p_in; -fet_endchar; - - -fet_beginchar ("Quart up tihead", "u2ti"); - draw_ti_head (solfa_quarter_width, 1); - fill p_out; -fet_endchar; - - -fet_beginchar ("Quart down tihead", "d2ti"); - draw_ti_head (solfa_quarter_width, -1); - fill p_out; -fet_endchar; - - -fet_endgroup ("noteheads"); - - -% -% we derive black_notehead_width# from the quarter head, -% so we have to define black_notehead_width (pixel qty) -% after the black_notehead_width# itself. -% -% Let's keep it outside the group as well. -% - -define_pixels (black_notehead_width); diff --git a/mf/feta-braces-a.mf b/mf/feta-braces-a.mf index 9d8a9d8365..56dd4bb0b0 100644 --- a/mf/feta-braces-a.mf +++ b/mf/feta-braces-a.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- 256 smallest braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-a.mf -- 256 smallest braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 0; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-b.mf b/mf/feta-braces-b.mf index e74606dcfb..e31200e731 100644 --- a/mf/feta-braces-b.mf +++ b/mf/feta-braces-b.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-b.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 1; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-c.mf b/mf/feta-braces-c.mf index 06a273ed67..f81ea74933 100644 --- a/mf/feta-braces-c.mf +++ b/mf/feta-braces-c.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-c.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 2; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-d.mf b/mf/feta-braces-d.mf index d926a595e6..5ed5f46179 100644 --- a/mf/feta-braces-d.mf +++ b/mf/feta-braces-d.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-d.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 3; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-e.mf b/mf/feta-braces-e.mf index ed89fc5a31..e6b6954d0b 100644 --- a/mf/feta-braces-e.mf +++ b/mf/feta-braces-e.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-e.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 4; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-f.mf b/mf/feta-braces-f.mf index 4a96744e3b..e93f41bf90 100644 --- a/mf/feta-braces-f.mf +++ b/mf/feta-braces-f.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-f.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 5; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-g.mf b/mf/feta-braces-g.mf index 3a12239cc0..d7c651b085 100644 --- a/mf/feta-braces-g.mf +++ b/mf/feta-braces-g.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-g.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 6; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-h.mf b/mf/feta-braces-h.mf index 9d4988e792..8dbb7b7a95 100644 --- a/mf/feta-braces-h.mf +++ b/mf/feta-braces-h.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-h.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 7; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces-i.mf b/mf/feta-braces-i.mf index 7089e60c2a..cb1e58b239 100644 --- a/mf/feta-braces-i.mf +++ b/mf/feta-braces-i.mf @@ -1,11 +1,22 @@ +% Feta (not the Font-En-Tja) music font -- next 256 braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% feta-braces-i.mf -- next 256 braces -% -% source file of the Feta (Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% +% 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 . font_count := 8; -input feta-beugel; +input feta-braces; end. diff --git a/mf/feta-braces.mf b/mf/feta-braces.mf new file mode 100644 index 0000000000..5fb5ff1c7d --- /dev/null +++ b/mf/feta-braces.mf @@ -0,0 +1,164 @@ +% Feta (not the Font-En-Tja) music font -- Staff braces +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys +% Jan Nieuwenhuizen +% +% 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 . + + +% We have to reduce the pixel-per-point value to +% support large brace glyphs in case we are using MetaPost +% (which by default sets `hppp' to 49.80244, regardless of +% the used `mag' value) + +if known miterlimit: + bpppix_ := 0.2; % ten times larger than original + + numeric mm, pt, dd, bp, cm, pc, cc, in; + + mm * bpppix_ = 2.83464; + pt * bpppix_ = 0.99626; + dd * bpppix_ = 1.06601; + bp * bpppix_ = 1; + cm * bpppix_ = 28.34645; + pc * bpppix_ = 11.95517; + cc * bpppix_ = 12.79213; + in * bpppix_ = 72; + + hppp := pt; + vppp := pt; +fi; + + +input feta-autometric; +input feta-macros; + +staffsize# := 20 pt#; %% arbitrary + +input feta-params; + +% +% We must let the design increase for each font to make sure that mftrace +% doesn't jack up the resolution too highly for the longer braces. +% + +fet_beginfont ("feta-braces-" & char (97 + font_count), + (font_count + 1) * 20, "fetaBraces"); + +mode_setup; + + +save code, braces_per_font; +code := 64; +braces_per_font := 64; + +def draw_brace (expr height_sharp, width_sharp, slt_sharp, brace_number) = + save pendir, height, width, thin, thick, slt, pat; + save penangle; + pair pendir; + path pat; + + height# := height_sharp; + width# := width_sharp; + slt# := slt_sharp; + + fet_beginchar ("brace number " & decimal (brace_number), + "brace" & decimal (brace_number)) + set_char_box (width#, 0, height# / 2, height# / 2); + + define_pixels (height, width, slt); + thin = 2 slt; + thick = .5 width; + + z2 = .5 [z1, z3]; + y3l = y1 + height / 2; + x3 = x1 + width; + y1 = 0; + x1 = -b; + y0 = y1; + x0 = x1 - 2/6 thin; + + pendir = unitvector (x3 - x1, y3l / 8 - y1); + penangle = angle pendir - 90; + penpos3 (thin, penangle); + penpos2 (thick, angle (z3 - z1) - 90); + penpos1 (-2 * (x0 - x1), penangle); + + penlabels (1, 2, 3); + labels (0); + + pat := z2r + .. simple_serif (z3r, z3l, 90) + .. z2l + .. z1l{dir (angle (z1r - z1l) - 90)} + .. z0{down} + .. z1r{-dir (angle (z1l - z1r) + 90)} + .. cycle; + pat := subpath (0, 5) of pat + -- subpath (6, 7) of pat + .. cycle; + + fill pat; + fill pat yscaled -1; + fet_endchar; +enddef; + + +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: + save number; + + number := braces_per_font * i; + + for j := 0 step 1 until (braces_per_font - 1): + % message "l: "&decimal l; + % note: define_pixels (x) multiplies x by hppp, + % must never get bigger than infinity + y := y + increment; + if y > infinity / hppp: + message "Resolution and/or magnification is too high"; + message "HPPP: "& decimal hppp &" Y: " & decimal y; + errmessage "please report to "; + fi; + + x := (y / last_brace_number) [min_width, max_width]; + + increment := x / 10; + linethickness := (y / last_brace_number) [min_thin, max_thin]; + if i = font_count: + draw_brace (y, x, linethickness, number); + fi; + + number := number + 1; + endfor; +endfor; + +fet_endfont ("feta-braces"); diff --git a/mf/feta-brackettips.mf b/mf/feta-brackettips.mf new file mode 100644 index 0000000000..39e4c2dbbc --- /dev/null +++ b/mf/feta-brackettips.mf @@ -0,0 +1,102 @@ +% Feta (not the Font-En-Tja) music font -- bracket tips -*-Fundamental-*- +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2005--2011 Han-Wen Nienhuys +% +% 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 . + +fet_begingroup ("brackettips"); + +def draw_bracket (expr thick_sharp, width_sharp, updown) = +begingroup; + save p, thin, thick, flattening, width, hair, flare; + path p; + pair tipdir; + + flattening = 0.72; + thick# = thick_sharp; + flare# = flattening * width#; + width# = width_sharp; + + define_pixels (thick, width, flare); + if updown = 1: + set_char_box (0, width#, + .5 thick#, flare#); + else: + set_char_box (0, width#, + flare#, .5 thick#); + fi; + + thin = 2 linethickness; + hair = 1.25 linethickness; + + pickup pencircle scaled thin; + y7 = y1; + x7 = x2; + z2 = z4r + (thin, 0); + + penpos3 (thin, 0); + penpos4 (thin, 90); + + z3 = z4; + + top y3 = 0.5 thick; + lft x3 = 0.0; + x1 = x3l; + y1 = -0.5 thick; + + z8 = .5 [z2, z7]; + top y5 = flare; + rt x5 = width; + + p := z8{right} + ..tension 1.2.. z5{curl 0}; + tipdir := direction 1 of p; + + penpos5 (hair, angle tipdir); + penpos6 (hair, 90 + angle tipdir); + + z5 = z6; + + pickup pencircle scaled 1; + + fill (z1 + -- z3l{up} + .. z4r{right} + -- z2{right} + .. z6r{tipdir} + .. z5r + .. z6l{-tipdir} + ..tension 1.1.. z7{left} + & z7 + -- z1 + & cycle) yscaled updown; + + if updown = 1: + penlabels (1, 2, 3, 4, 5, 6, 7, 8); + fi; +endgroup; +enddef; + + +fet_beginchar ("bracket tip up", "up"); + draw_bracket (0.45 staff_space#, 1.9 staff_space#, 1); +fet_endchar; + + +fet_beginchar ("bracket tip down", "down"); + draw_bracket (0.45 staff_space#, 1.9 staff_space#, -1); +fet_endchar; + +fet_endgroup ("brackettips"); diff --git a/mf/feta-clefs.mf b/mf/feta-clefs.mf new file mode 100644 index 0000000000..4522395cf6 --- /dev/null +++ b/mf/feta-clefs.mf @@ -0,0 +1,740 @@ +% Feta (not the Font-En-Tja) music font -- implement Clefs -*-Fundamental-*- +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys , +% Jan Nieuwenhuizen , +% Juergen Reuter +% +% 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 . + + +fet_begingroup ("clefs"); + +% +% [Wanske] says the bulbs should be positioned about 1/4 right of the +% `arrow'. +% +% TODO: The hair-curve at z6r looks a little awkward. +% + +def draw_c_clef (expr reduction) = + save hair, norm, reduced_ss, right_edge; + save xoff; + + reduced_ss# = staff_space# * reduction; + norm# := 2/3 reduced_ss#; + hair# := 0.06 reduced_ss# + 0.5 linethickness#; + right_edge# = 15/4 norm# + 2 hair#; + define_pixels (norm, reduced_ss, right_edge); + define_whole_vertical_blacker_pixels (hair); + + set_char_box (0, right_edge#, 2 reduced_ss#, 2 reduced_ss#); + + % make unreduced glyph fit exactly into five staff lines + if reduction = 1: + h := d := 2 staff_space_rounded; + fi; + + % assure that the gap between the left and right stem + % has the same number of pixels as the thickness of the right + % stem + draw_block ((0, -d + feta_shift), + (3/4 norm + 1/2 hair, h)); + draw_block ((3/4 norm + 1/2 hair + hround (3/2 hair), -d + feta_shift), + (3/4 norm + 1/2 hair + 2 hround (3/2 hair), h)); + + % assure symmetry + h := h - feta_shift; + + pickup feta_fillpen; + + xoff = 3/4 norm + 1/2 hair + 2 hround (3/2 hair); + z5l = (xoff - 3/4 hair, 0); + z5r = (x4, 0); + + penpos1 (hair - pen_top - pen_bot, -90); + top z1l = (xoff + norm + hair, h); + + penpos2 (hround (norm - 3/2 hair) - pen_lft - pen_rt, 180); + rt z2l = (w, h / 2); + + penpos3 (hair - pen_top - pen_bot, 90); + bot z3l = ((right_edge - xoff) / 2 + xoff, + vround (.5 norm - 1.5 hair)); + + penpos4 (hair - pen_lft - pen_rt, 0); + top z4 = (xoff + 1/2 norm + 1/2 hair, + vfloor (reduced_ss - linethickness - .2 hair)); + + bot z6 = (xoff + 3/4 norm, vround (.5 norm - .5 hair)); + + save t; + t = 0.833; + + save pat; + path pat; + + pat = z5l{curl 1} + .. z4l{up} + .. z4r{down} + .. z3r{right} + ..tension t.. z2r{up} + ..tension t.. flare_path (top z1l, 180, 90, + hair, hfloor (norm - 1/2 hair), -1) + ..tension t.. z2l{down} + .. z3l{left} + .. z6 + .. z5r{down}; + + filldraw pat shifted (0, feta_shift) + -- reverse pat yscaled -1 shifted (0, -feta_eps) + -- cycle; + + penlabels (1, 2, 3, 4, 5, 6); + + % ugh, should be bulb, not flare? + + draw_staff (-2, 2, 0); +enddef; + + +fet_beginchar ("C clef", "C"); + draw_c_clef (1.0); +fet_endchar; + + +fet_beginchar ("C clef", "C_change"); + draw_c_clef (.8); +fet_endchar; + + +% +% New bulb routine: +% +% Insert a brushed piece of the path, and draw the rest of the bulb +% separately. +% +% The bulb has circular form. Neat merging of the bulb and brushed path +% is done by playing with tension. +% + +def new_bulb (expr start_point, start_angle, + outer_tangent_point, + end_point, end_angle, + big_radius, bulb_radius, flare, + direction, turning_dir) = +begingroup; + save pat, before, after; + save center; + save u, v; + path pat, before, after; + pair center; + + clearxy; + + center = outer_tangent_point + + big_radius * dir (0); +% + (big_radius - bulb_radius) * dir (-turning_dir * 90) + + z1' = center + bulb_radius * dir (turning_dir * 180); + z2' = outer_tangent_point + flare * dir (0); + z3' = center + bulb_radius * dir (0); + z4' = center + bulb_radius * dir (turning_dir * 90); + z5' = center - 0.5 [big_radius, bulb_radius] * dir (turning_dir * 90); + + labels (1', 2', 3', 4', 5'); + + before := z3'{dir (turning_dir * 90)} + .. z4'{-dir (0)} + ..tension 1.1.. z1'{-dir (turning_dir* 90)}; + after := z2'{dir (turning_dir * 90)} + .. end_point{dir (end_angle)}; + (u, v) = before intersectiontimes after; + + pat := start_point{dir (start_angle)} + .. outer_tangent_point{dir (-turning_dir * 90)} + ..tension 1.02.. z5'{dir (0)} + .. subpath (0, u) of before + .. subpath (v, infinity) of after; + + if direction = 0: + pat := reverse pat; + fi + +pat +endgroup +enddef; + + +% +% There is some variation in the shape of bass clefs. +% +% * In some clefs the size of the swoosh tip almost reaches the +% bottom staff line; in some it crosses the 2nd line from the bottom +% with a small overshoot. +% +% The most popular design is where the X part of the tip is aligned +% with the left bulb boundary, and the Y part ends on the 2nd +% staffline exactly. This is what we do. +% +% * The diameter of the bulb is the width of the open space. +% +% * The vertical center of the bulb can be on or slightly above the +% staff line. +% +% * The vertical position of the dots can be symmetrical around the +% staffline, centered in the staff space. The Baerenreiter SCS has +% the bottom dot raised by approximately 0.1 staff space. +% +% * Uncarefully set music may have overshoots at the top. We have none. +% +% * It is not exactly clear where the vertical tangent at the right +% of the swoosh should be. +% + +def draw_bass_clef (expr exact_center, reduction) = + save reduced_ss, swoosh_width; + save right_thickness, right_offset, tip_protrude; + save dot_diam, bulb_y_offset, bulb_flare; + pair tip_protrude; + + reduced_ss# = staff_space# * reduction; + 2.2 dot_diam# = reduction * (staff_space# - stafflinethickness#); + right_thickness# = 0.37 staff_space# + 1.2 linethickness#; + swoosh_width# = 2.1 reduced_ss#; + define_pixels (swoosh_width); + define_whole_pixels (reduced_ss); + define_whole_blacker_pixels (dot_diam, right_thickness); + + right_offset = 0.05 staff_space; + bulb_y_offset := 0.075 staff_space; + bulb_flare := 2.5 linethickness; +% tip_protrude := (-linethickness, -.2 staff_space); + tip_protrude := (0, 0); + + set_char_box (-xpart exact_center, + xpart exact_center + swoosh_width# + 7/12 reduced_ss#, + -ypart exact_center + 2.5 reduced_ss#, + ypart exact_center + reduced_ss#); + + y1 = bulb_y_offset; + x1 = 0; + + x2 = .5 [x1, x3]; + x2l = x2r = x2; + + y2l := vround_pixels (reduced_ss# + 0.5 linethickness#); + y2l - y2r = linethickness; + + x3l - x1 = swoosh_width; + x3l - x3r = right_thickness; + + % optical correction: the top dot seems farther away if y3l = 0. + y3l = right_offset; + + z4 = -(0, 2.0 reduced_ss) + tip_protrude; + + penpos3 (whatever, 185); + penpos4 (linethickness, 135); + + fill new_bulb (z2l, 180, z1, z2r, 0, + 0.45 reduced_ss, 0.4 reduced_ss, + bulb_flare, 1, 1) + .. z3r{down} + .. {curl 0}simple_serif (z4r, z4l, 90){curl 0} + .. z3l{up} + ..tension 0.9.. cycle; + + pickup pencircle scaled dot_diam; + + lft x5 = hround (x3l + 1/3 reduced_ss - dot_diam / 2); + bot y5 = vfloor (.5 reduced_ss - dot_diam / 2); + z6 = z5 yscaled -1; + + % for symmetry + y5 := y5 + feta_shift; + + drawdot z5; + drawdot z6; + + penlabels (1, 2, 3, 4, 5, 6); + + draw_staff (-3, 1, 0); +enddef; + + +fet_beginchar ("F clef ", "F"); + draw_bass_clef ((0, 0), 1.0); +fet_endchar; + + +fet_beginchar ("F clef (reduced)", "F_change"); + draw_bass_clef ((0, 0), 0.8); +fet_endchar; + + + +% +% Inspired by Baerenreiter +% +% +% Beste lezers, kijk, +% +% Een bolletje hebben we bij toeval allemaal wel eens getekend, maar begint u +% toch eenvoudig. Eerst een eenvoudig kruis of herstellingsteken +% en via de dubbelslag naar een voorzichtig vlaggetje, en heb geduld! +% Ikzelf heb bijvoorbeeld over mijn eerste gave G-sleutel +% 35 kilobyte metafont, 12 patchlevels, 0 vriendinnen en 45 dagen gedaan +% +% -- vrij naar Van Kooten & De Bie +% + +def debugfill = fill enddef; + +def draw_gclef (expr reduction) = + save reduced_ss, downstroke_dir, downstroke_angle, center; + save breapth_factor, inner_thick_end, thinness, thickness, thinnib; + save start_angle, inner_start_angle; + save upward_swoosh_angle, bot_angle; + save pat; + save corr_angle, corr, left_, right_, up_, down_, bot_angle_; + path pat; + pair downstroke_dir, center; + transform corr; + pair left_, right_, up_, down_; + + reduced_ss# = staff_space# * reduction; + define_pixels (reduced_ss); + + thinness = 0.095 staff_space + 0.75 linethickness; + downstroke_dir = unitvector (14, -75); + downstroke_angle = angle downstroke_dir; + bot_angle = -180; % downstroke_angle - 87 + + upward_swoosh_angle = 132; + start_angle = -97; + + breapth_factor = 21/14; + inner_thick_end = 45; + inner_start_angle = downstroke_angle - 43; + thickness = .32 reduced_ss + 1.1 linethickness; + + thinnib = thinness; + + set_char_box (0, 1.71 * breapth_factor * reduced_ss#, + 2.6 * reduced_ss#, 5 * reduced_ss#); + + center := (breapth_factor * reduced_ss, 0); + + z1 = center + whatever * dir (inner_start_angle); + x1 = xpart center - .28 reduced_ss; + penpos1 (thinnib, inner_start_angle); + + x2r = xpart center; + y2r = vround_pixels (reduced_ss# + .5 stafflinethickness#); + penpos2 (thickness, 90); + + z3 = (z4 - center) rotated inner_thick_end + center; + penpos3 (thinnib, -90 + inner_thick_end); + + x4 = xpart center - .1 reduced_ss; + y4r = -y2r + feta_shift; + penpos4 (thinnib, -90); + + x5r = -breapth_factor * reduced_ss + xpart center; + y5r = .37 reduced_ss + ypart center; + penpos5 (thickness, upward_swoosh_angle); + + z6 = center + whatever * downstroke_dir; + y6 = ypart center + 2 reduced_ss; + % penpos6 is computed later + + z7l - z6 = whatever * (z5 - z6) ; + y7l = 3.5 reduced_ss; + penpos7 (thickness, upward_swoosh_angle); + + x9 = .7 [x10, x7r]; + top y9l = 5 reduced_ss; + penpos9 (1.45 thickness, -70); + + x11 - x13r = 1.5 reduced_ss + 0.5 thinnib; + y11 = ypart center - 47/28 reduced_ss; + y12 = ypart center - 71/28 reduced_ss; + y13 = .48 [y12, y4r]; + x12r = xpart (.45 [z13r, z11] + .75 reduced_ss * downstroke_dir); + +% z10 = center + whatever * dir (downstroke_angle - 1.5); + x10 = x6 - 2 thinnib; + y10 = ypart center + 3.5 reduced_ss; + y10l - y10r = 1.0 thickness; + z10r - z10l = .7 thinnib * dir (downstroke_angle + 90) + + whatever * downstroke_dir; + z10 = .5 [z10l, z10r]; + z11 = center + whatever * downstroke_dir + (-0.05 reduced_ss, 0); + + penpos11 (thinnib, start_angle + 90); + penpos12 (thinnib, bot_angle + 90); + penpos13 (thinnib + 0.14 staff_space, 180); + + % this auxiliary point ensures good contour overlapping + z8 = .5 [z9l, z9r] + .25 ((z9r - z9l) rotated -90); + + z20 = z9l - (0, .25 blot_diameter); + penpos20 (blot_diameter, 0); + + pat := z10{down} + .. z6 + ..tension 1.1.. z11{dir (start_angle)}; + + penpos6 (thinnib, angle (direction 1 of pat) + 90); + + % two auxiliary points to simulate `draw' with `penstroke' + z10' = point 0.3 of pat; + penpos10' (1.3 thinnib, angle (direction 0.3 of pat) + 50); + + z11' = point 1.5 of pat; + penpos11' (thinnib, angle (direction 1.5 of pat) + 90); + + z21l = z20l; + z21r = z9r; + + % after computing all points, we want to rotate the clef + % rotating the whole picture won't work due to the complexity + % of the path and metafont's memory limitations, so we transform + % each point and draw the clef thereafter + corr_angle := 1.5; + corr := identity rotatedabout (center, -corr_angle); + + bot_angle_ := bot_angle + corr_angle; + + left_ := left rotated corr_angle; + right_ := right rotated corr_angle; + up_ := up rotated corr_angle; + down_ := down rotated corr_angle; + + % transform points; we transform every point and save it + % to a shifted index range: z1 -> z101, z2 -> z102, etc. + for n := 1 upto 21: + forsuffixes e := l,,r: + z[n+100]e = z[n]e transformed corr; + endfor + endfor + + % transform helper points + for n := 10, 11: + forsuffixes e := l,,r: + z[n+100]'e = z[n]'e transformed corr; + endfor + endfor + + pat := z121l + .. z110l{down} + .. z110'l; + + fill z102l{right} + .. z103l + .. z104l{left_} + ..tension 1.07.. z105l{up_}% inside curve + .. z107l{up_} + ..tension 1.2.. z120r{curl 1} + .. {direction 0 of pat}z120l + -- z108 + -- z109r % {dir (downstroke_angle + 0)} + ..tension 0.8.. z107r{down_} + .. z105r{down_} + .. z104r{right_} + .. z103r + .. z102r{left_} + ..tension .95.. z101r + -- simple_serif (z101r, z101l, 80) + -- z101l + ..tension 0.85.. cycle; + + penstroke z121e + .. z110e{down_} + .. z110'e + .. z106e + .. z111'e + .. z111e{dir (-95 + corr_angle)} + .. z112e{dir (bot_angle_)}; + + fill new_bulb (z112r, bot_angle_, z113r, z112l, bot_angle_ + 180, + 0.45 reduced_ss, 0.38 reduced_ss, + thinnib + .05 staff_space, 1, -1) + -- cycle; + + penlabels (range 101 thru 121); + penlabels (110', 111'); + + draw_staff (-1, 3, 0); +enddef; + + +fet_beginchar ("G clef", "G"); + draw_gclef (1.0); +fet_endchar; + + +fet_beginchar ("G clef", "G_change"); + draw_gclef (0.8); +fet_endchar; + + +%%%% +% +% PERCUSSION +% + +% +% The percussion clef extent is not coincident with its bbox, since +% the percussion clef needs more space in front than a normal clef. +% + +def draw_percussion_clef (expr reduction) = + save reduced_ss, razt; + + reduced_ss# = staff_space# * reduction; + define_pixels (reduced_ss); + + set_char_box (-.67 reduced_ss#, 2.0 reduced_ss#, + reduced_ss#, reduced_ss#); + + razt := hround (0.45 reduced_ss); + + d := d - feta_shift; + + draw_block ((-b, -d), (-b + razt, h)); + draw_block ((w - razt, -d), (w, h)); + + draw_staff (-3, 1, 1); +enddef; + + +fet_beginchar ("percussion clef", "percussion"); + draw_percussion_clef (1.0); +fet_endchar; + + +fet_beginchar ("percussion clef (reduced)", "percussion_change"); + draw_percussion_clef (.8); +fet_endchar; + + +def draw_tab_T (expr pos, siz, slant) = +begingroup; + save vx, vy; + pair vx, vy; + + clearxy; + + vx = (xpart siz) * dir 0; + vy = (ypart siz) * dir 90; + + penpos1 (.75 penh, 100); + z1 = z2 + (1/6 * vx - .15 * vy); + penpos2 (hround (.9 penw), 0); + x2l = hround xpart (pos + .75 vy); + y2l = ypart (pos + .75 vy); + penpos3 (penh, -100); + z3l = pos + .4 vx + vy; + penpos4 (penh, -90); + z4 = -.1 vy + .5 [z3, z5]; + penpos5 (.8 penh, -30); + x5r = xpart (pos + siz); + y5l = ypart (pos + siz); + + penpos10 (penw, 170); + z10 = pos + .55 vx + .9 vy; + penpos11 (.75 [penh, penw], 170); + z11 = z10 - .5 vy + .025 vx; + penpos12 (penh, 100); + z12l = (xpart .5 [z13, z11], ypart (pos - .025 * siz)); + penpos13 (.75 penh, 60); + z13 = pos + .2 vx + .15 vy; + + % penlabels (range 1 thru 13); + + soft_penstroke (z1e + ..tension 1.1.. z2e + .. z3e{right} + ..tension 1.5.. z4e + ..z5e) + slanted slant shifted (slant * -ypart pos, 0); + + soft_end_penstroke (z10e + ..tension 1.5.. z11e + .. z12e + ..tension 1.1.. z13e{(z13r - z13l) rotated 90}) + slanted slant shifted (slant * -ypart pos, 0); +endgroup; +enddef; + + +def draw_tab_A (expr pos, siz, slant) = +begingroup; + save vx, vy, pat; + pair vx, vy; + path pat; + + clearxy; + + vx = (xpart siz) * dir 0; + vy = (ypart siz) * dir 90; + + penpos1 (.75 penh, -110); + z1r = pos + .07 vy; + penpos2 (penh, -75); + z2r = (.5 [x1, x3], ypart pos); + penpos3 (.25 [penh, penw], -30); + z3 = (.45 [x2, x4], .15 [y2, y4]); + penpos4 (1 [penh, penw], 0); + z4 = pos + .5 vx + .975 vy; + + penpos5 (1 [penh, penw], -180); + z5 = z4; + penpos6 (.2 [penh, penw], -150); + z6l = (.8 [x5l, x7l], .9 [y5l, y7l]); + penpos7 (penh,-90); + z7r = (.5 [x6, x8], ypart pos); + penpos8 (.75 penh, -70); + z8r = (xpart (pos + siz), y7r + .075 ypart (siz)); + + pat := z2 + .. z3 + .. z4; + + penpos10 (penh, angle (direction 1.2 of pat) - 180); + z10 = point 1.2 of pat; + penpos11 (.9 penh, -90); + z11 = .4 [z10, z6] - 0.05 vy; + penpos12 (.75 penh, -75); + z12 = .3 [z11, z6] + 0.02 vy; + + % penlabels (range 1 thru 12); + + soft_penstroke (z1e{(z1r - z1l) rotated 90} + .. z2e + .. z3e + .. z4e) + slanted slant shifted (slant * -ypart pos, 0); + + soft_end_penstroke (z5e + .. z6e + .. z7e + .. z8e{(z8r - z8l) rotated 90}) + slanted slant shifted (slant * -ypart pos, 0); + + soft_end_penstroke (z10e + .. z11e + .. z12e) + slanted slant shifted (slant * -ypart pos, 0); +endgroup; +enddef; + + +def draw_tab_B (expr pos, siz, slant) = +begingroup; + save vx, vy; + pair vx, vy; + + clearxy; + + vx = (xpart siz) * dir 0; + vy = (ypart siz) * dir 90; + + penpos1 (.75 penh, 100); + z1 = z2 + (.15 * vx - .1 * vy); + penpos2 (hround (.9 penw), 0); + x2l = hround xpart (pos + .75 vy); + y2l = ypart (pos + .75 vy); + penpos3 (penh, -100); + z3l = pos + .4 vx + 1.05 vy; + penpos4 (.8 [penh, penw], -180); + z4 = (xpart (pos + .75 siz), .5 [y3, y5]); + penpos5 (.8 penh, 90); + z5 = (.5 [x10, x4], ypart (pos + .55 siz)); + + penpos6 (.8 penh, 270); + z6 = z5; + penpos7 (penw, 180); + z7l = (xpart (pos + siz), .5 [y6, y8]); + penpos8 (.8 penh, 45); + z8 = .5 [z12l, z11l] + .15 vx - .05 vy; + + penpos10 (.75 [penh, penw], 170); + z10 = pos + .375 vx + vy; + penpos11 (.8 [penh, penw], 150); + z11 = z10 - .5 vy + .04 vx; + penpos12 (penh, 100); + z12l = (xpart .5 [z13, z11], ypart pos); + penpos13 (.75 penh, 60); + z13 = pos + .1 vx + .15 vy; + + % penlabels (range 1 thru 13); + + soft_penstroke (z1e + ..tension 1.1.. z2e + .. z3e + .. z4e + ..z5e {left}) + slanted slant shifted (slant * -ypart pos, 0); + + soft_end_penstroke (z6e{right} + .. z7e + .. z8e{(z8r - z8l) rotated 90}) + slanted slant shifted (slant * -ypart pos, 0); + + soft_end_penstroke (z10e + ..tension 1.5.. z11e + .. z12e + ..tension 1.1.. z13e{(z13r - z13l) rotated 90}) + slanted slant shifted (slant * -ypart pos, 0); +endgroup; +enddef; + + +def draw_tab_clef (expr reduction) = + save reduced_ss, letterheight, penw, penh; + + reduced_ss# = staff_space# * reduction; + letterheight# = 1.8 reduced_ss#; + define_pixels (reduced_ss, letterheight); + + set_char_box (-.2 reduced_ss#, 2.8 reduced_ss#, + 1.6 letterheight#, 1.6 letterheight#); + + penw = .45 reduced_ss; + penh = .2 reduced_ss; + + draw_tab_T ((-b + .15 reduced_ss, h - letterheight), + (2.1 reduced_ss, letterheight), 0.2); + draw_tab_A ((-b - .05 reduced_ss, -.5 letterheight +.15 reduced_ss), + (2.2 reduced_ss, letterheight), 0.4); + draw_tab_B ((-b + .025 reduced_ss, -d), + (2.1 reduced_ss, letterheight), 0.25); + + draw_staff (-3, 2, 0.5); +enddef; + + +fet_beginchar ("tab clef", "tab"); + draw_tab_clef (1.0); +fet_endchar; + + +fet_beginchar ("tab clef (reduced)", "tab_change"); + draw_tab_clef (.8); +fet_endchar; + +fet_endgroup ("clefs"); diff --git a/mf/feta-din-code.mf b/mf/feta-din-code.mf deleted file mode 100644 index 809227de45..0000000000 --- a/mf/feta-din-code.mf +++ /dev/null @@ -1,791 +0,0 @@ -% feta-din-code.mf -- implement dynamic signs -% -% part of LilyPond's pretty-but-neat music font -% -% source file of the Feta (not the Font-En-Tja) music font -% -% (c) 1997--2009 Jan Nieuwenhuizen - - -ex# := (dynamic_design_size / 2.4) * pt#; -descender# := 0.5 ex#; -ascender# := 0.72 ex#; -staffspace# := 1.75 / 2.0 * ex#; -horizontal_space# := .66 ex#; - -font_x_height ex#; -font_normal_space horizontal_space#; - -define_pixels (staffspace, linethickness, ex, descender, ascender); - - -% -% TODO: blot diameter should be fixed, not scalable. -% - -save serif_thick, med_thick, bottom_blot; - -serif_thick# = 1.1 linethickness#; -define_blacker_pixels (serif_thick); - -med_thick = round (1.5 linethickness); -bottom_blot = 1.3 serif_thick; - - -code := 32; - -fet_beginchar ("Space", "space"); - set_char_box (0, horizontal_space#, 0, ex#); -fet_endchar; - - -% -% Couldn't find many z examples. This one is losely inspired -% by a sfz from Mueller Etuden fuer Horn (Edition Hofmeister). -% - -code := 121; - -fet_beginchar ("dynamic z", "z"); - save thin_thick, top_narrow, over_shoot; - save bot_thick; - - set_char_box (0, .98 ex#, 0, 0.9 ex#); - - thin_thick = serif_thick; - top_narrow = thin_thick; - top_overshoot = .8 serif_thick; - top_thick = .3 h; - bot_thick = .2 ex; - bot_overshoot = serif_thick; - - x0 = top_narrow; - y0 = .9 [y1r, y1l]; - - penpos1 (top_thick, 80); - y1l = .72 h; - x1r = .34 ex; - - x2 = .66 ex; - y2 = y1r - top_overshoot; - - y3 = h - .7 thin_thick; - x3 = w - .6 top_narrow - .5 thin_thick; - y4 = .5 thin_thick; - x4 = .5 thin_thick; - - penpos3 (thin_thick, angle (z3 - z4) + 90); - penpos4 (thin_thick, angle (z3 - z4) + 90); - - penpos5 (bot_thick, 70); - x5l =.25 ex; - y5l = .4 bot_overshoot; - - penpos6 (3/2 bot_thick, 70); - y6l = -bot_overshoot; - x6 = w - 3 top_narrow; - - x7 = w; - y7 = .82 [y8r, y6r]; - - penpos8 (thin_thick, 20); - x8r = w - .35 top_narrow; - y8r = .45 h; - - penlabels (range 0 thru 8); - -% pickup pencircle scaled 1; - -% draw - fill z0{down} - .. z1l{dir (10)} - .. simple_serif (z3l, z3r, 90) - .. z2{left} - .. z1r{left} - ..tension 1.2.. cycle; - -% draw - fill z3l - -- z3r - -- z4r - -- z4l - -- cycle; - -% draw - fill simple_serif (z4r, z4l, 90) - .. z5l{right} - .. z6l{right} - .. z7{up} - .. simple_serif (z8r, z8l, 90) - .. z6r{left} - .. z5r{left} - .. cycle; -fet_endchar; - - -% forte f, grabbed from Ed Breitkopf Mozart horn concerto 3. -% -% NOTES: -% -% * the bulbs are open -% -% * blotting around the serif -% -% TODO: insert blots around the serif -% - -slant_angle = 20; -code := 101; - -fet_beginchar ("dynamic f", "f"); - save left_angle, right_angle; - save serif_length, serif_eccentricity; - save f_thick; - save bulb_thick, bulb_diam, fill_up; - save slant; - save p; - path p; - - set_char_box (0, 1.1 ex#, descender#, ex# + ascender#); - - bulb_diam = 7.5 / 40 ex; - bulb_thick = 8.5 / 40 ex; - fill_up = 1.5 serif_thick; - left_angle = slant_angle - 6; - right_angle = slant_angle - 3; - f_thick = 7/16 ex; - serif_length = 0.96 ex; - serif_eccentricity = 0.01 ex; - - % z1 is the `base point' - z1 = (0.2 ex, -serif_thick); - - penpos2 (f_thick, 0); - y2 = y1 + ex; - z2l = z1 + whatever * dir (90 - left_angle); - - penpos3 (med_thick, -90); - y3l = y1 + ex + ascender; - x3l = x1 + ex; - - penpos4 (bulb_thick, -20); - z3r = whatever [z4r, z4l]; - - x4l - x3l = 1/10 ex; - - penpos5 (bulb_thick, -45); - x5r = 0.1 [x4l, x4r]; - y5l = y4l - bulb_diam; - - z6 = z2r + whatever * dir (90 - right_angle); - y6 = y1 + 3/8 ex; - - penpos7 (med_thick, -90); - x7 = x1 - 1/4 ex; - y7r = y1 -descender; - - penpos8 (bulb_thick, 160); - x8l = x7l - 1/10 ex; - - z7l = whatever [z8r, z8l]; - - penpos9 (bulb_thick, 135); - x9r = 0.1 [x8l, x8r]; - y9l = y8l + bulb_diam; - - labels (1, 6, 9); - penlabels (2, 3, 4, 5, 7, 8, 9); - -% pickup pencircle scaled 1; - -% draw - fill z1 - -- z2l{z2l - z1} - ..tension 1.1.. z3l{right} - .. z4r{down} - .. z5r{left} - .. z5l{up} - ..tension 0.8.. z4l{up} - .. z3r{left} - ..tension 1.1.. z2r{z6 - z2r} - -- z6{z6 - z2r} - ..tension 1.25.. z7r{left} - .. z8r{up} - .. z9r{right} - .. z9l{down} - ..tension 0.8.. z8l{down} - .. z7l{right} - .. {z2l - z1}cycle; - - x13 - x14 = serif_length; - y13 = y14; - y14 = y2; - 0.5 [x13, x14] = x2 + serif_eccentricity; - - draw_rounded_block (z14 - (0, 0.7 serif_thick), - z13 + (0, 0.7 serif_thick), - 1.4 serif_thick); - - labels (13, 14); -fet_endchar; - - -% -% Notes: -% -% - The `s' is trapezoidal (i.e., narrower at the top). -% -% - The white space is differently shaped at the top (the bulb's inner -% curve is filled up). -% -% - Less heavy than the `f' and `p' signs. -% - -code := 114; - -fet_beginchar ("dynamic s", "s"); - save left_angle, right_angle; - save s_thick, s_thin; - save bulb_diam, bulb_len; - save over_shoot; - save base_point; - pair base_point; - - set_char_box (0, 17/24 ex#, 0, ex#); - - over_shoot = 0; % .2 serif_thick; - bulb_diam = 11/70 ex; - bulb_len = 1.0 bulb_diam; - left_angle = slant_angle - 2; - right_angle = slant_angle - 11; - s_thick = 16/70 ex; - s_thin = serif_thick; - - base_point = (0, 0); - - penpos1 (bulb_diam, -45); - z1 = 0.35 [z2l, z2r] + bulb_len * dir (45); - - penpos2 (bulb_diam, -25); - y2l = 0.845 [y7r, y3r]; - z2l = base_point + whatever * dir (90 - left_angle); - - penpos3 (s_thin, 100); - x3l = 1/2 w; - y3l = ypart base_point - over_shoot; - - penpos4 (s_thick, 25); - y4l = y1r; - z4r = base_point + (w, 0) + whatever * dir (90 - right_angle); - - penpos5 (s_thick, 40); - z5 = z3l + whatever * dir (90 - right_angle); - y5 = 0.48 [y7r, y3r]; - - penpos6 (s_thick, 25); - z6l = base_point + whatever * dir (90 - left_angle); - y6r = y9l; - - penpos7 (.9 s_thin, 110); - z7l = 0.45 [z6r, z8l] + whatever * dir (90 - left_angle); - y7r = h + over_shoot; - - penpos8 (.9 bulb_diam, -25); - z8 = .6 [z4l, z4r] + whatever * dir (90 - right_angle); - y8r = 0.23 [y7r, y3r]; - - penpos9 (.9 bulb_diam, -45); - z9 = .4 [z8r, z8l] + .9 bulb_len * dir (-135); - - penlabels (range 1 thru 9); - -% pickup pencircle scaled 1; - -% draw - fill z2l{down} - .. z3l{right} - .. z4r{up} - .. z5r - .. z6r{up} - .. z7l{right} - % .. z8l{down} - .. z9l{dir (-125)} - .. z9r{right} - .. z7r{left} - .. z6l{down} - .. z5l - .. z4l{down} - .. z3r{left} - .. z2r{up} - .. z1r{up} - .. z1l{left} - .. cycle; -fet_endchar; - - -% for `p' and `m' - -save slant; -slant := ypart (dir (slant_angle)); - - -% -% Piano `p', grabbed from Ed Breitkopf Mozart horn concerto 3. -% -% Notes: -% -% * There is no dishing in the serif (but we do it anyway). -% -% * The cheek is a little fatter than the stem. -% -% * The slant is extreme: 20 degrees. -% -% * The twiddle (what's-it-called) is a slightly darker than the serif. -% -% * The hole in the cheek has a straight right side. -% -% * Corners are filled up. -% - -code := 111; - -fet_beginchar ("dynamic p", "p") - % TODO: w really is 13/12 ex - % but should do kerning - - save twiddle_thick, stem_thick, cheek_thick, cheek_width; - save fill_up, straigh_len; - save serif, dishing_angle, p, tmp; - save cheek_medium, left_serif_protrude, right_serif_protrude; - save lower_overshoot; - save blot_t, corner_t; - path serif, p; - pair tmp, updir; - - set_char_box (0, 15/12 ex#, descender#, 1.0 ex#); - - twiddle_thick = med_thick; - cheek_medium = 1/6 ex; - - dishing_angle = 5; - fill_up = 1.5 serif_thick; - straigh_len = 0.5 ex; - lower_overshoot = .3 serif_thick; - - stem_thick = 2/6 ex; - cheek_thick = 13/32 ex; - cheek_width = 0.72 ex; - left_serif_protrude = 18/60 ex; - right_serif_protrude = 15/60 ex; - - currenttransform := currenttransform slanted slant; - - penpos1 (twiddle_thick, -slant - 5); - penpos2 (cheek_medium, 90 - slant); - penpos3 (cheek_medium, 90 - slant); - - x4r - x4l = cheek_thick; - - penpos4 (whatever, 0); - penpos5 (whatever, -38); - penpos6 (stem_thick, 0); - penpos17 (straigh_len, 90 - slant); - - whatever [z17l, z17r] = z4l; - y17 = 7/16 ex; - x6l = 0; - y6l = -descender + serif_thick / 2; - z1l = z6l - whatever * dir (110); - y1r = 0.5 ex; - y2r = ex; - z7 = whatever * up + z6l; - y7 = 43/60 ex; - z2l = whatever * up + 0.3 [z7, z1r]; - y8 = 0.9 [y7, y2l]; - z8 = 2/3 [z6l, z6r] + whatever * up; - y3r = ex; - z3l = 0.58 [(stem_thick, -descender), - (stem_thick + cheek_width - cheek_thick, -descender)] - + whatever * up; - y4r = .38 ex; - z4r = whatever * up + (stem_thick + cheek_width, -descender); - z5l = whatever * up + z3l; - y5r = -lower_overshoot; - y5l = y5r + cheek_medium * ypart dir (55); - z9 = z6r + whatever * up; - y9 = .2 [y5l, y5r]; - - p := z2r{right} - .. {dir (-60)}z8{dir 60} - .. z3r{right} - .. z4r{down} - ..tension 1.1.. z5r{left} - .. {curl 1}z9 - -- z6r - -- z6l - -- z7{up} - .. z2l{left} - ..tension 1.2.. simple_serif (z1r, z1l, -90) - .. cycle; - - blot_t := 0.13; - corner_t := xpart (p intersectiontimes z9); - -% pickup pencircle scaled 1; - -% draw - fill subpath (0, corner_t - 2 blot_t) of p - .. subpath (corner_t + blot_t, length p) of p - .. cycle; - - y12 = 0.5 ex; - z12 = z6r + whatever * up; - - unfill z17l - ..tension 1.5.. z17r - .. z3l{left} - ..tension 1.05.. z12{down} - ..tension 1.05.. z5l{right} - .. cycle; - - penlabels (1, 2, 3, 4, 5, 6, 17); - labels (7, 8, 9); - - pickup pencircle scaled serif_thick; - - lft x11 = -left_serif_protrude; - rt x10 = stem_thick + right_serif_protrude; - bot y10 = bot y11 = -descender; - - z15 = z6l + up * fill_up; - z16 = z6r + up * 1.2 fill_up; - - % Since pens are not affected by currenttransform we directly - % transform the necessary points, then simulating the pen with - % an outline while using the identity transformation. - - forsuffixes $ = 7, 10, 11, 15, 16: - tmp := z$ transformed currenttransform; - x$ := xpart tmp; - y$ := ypart tmp; - endfor; - - currenttransform := identity; - - updir = z7 - z15; - - serif := simple_serif (z10, z11, dishing_angle); - - penpos10 (serif_thick, -dishing_angle - 90); - penpos11 (serif_thick, dishing_angle - 90); - penpos13 (serif_thick, angle (direction 0.05 of serif) + 90); - penpos14 (serif_thick, angle (direction 0.85 of serif) + 90); - - z13 = point 0.05 of serif; - z14 = point 0.85 of serif; - - penlabels (10, 11, 13, 14); - labels (15, 16); - -% draw - fill z15{-updir} - .. z14l{direction 0.85 of serif} - .. z11l{-dir (dishing_angle)} - .. z11r{dir (dishing_angle)} - .. z14r{-direction 0.85 of serif} - .. z13r{-direction 0.05 of serif} - .. z10r{dir (-dishing_angle)} - .. z10l{-dir (-dishing_angle)} - .. z13l{direction 0.05 of serif} - .. z16{updir} - -- cycle; -fet_endchar; - - -% -% NOTES: -% -% * Right stem is fatter and more straight than the left two stems. -% -% * The twiddle at the left is similar to the `p' twiddle. -% -% * The bottoms of the stems are blotted. -% -% -% This is cut & paste programming. Somehow three `i' shapes in two -% characters (`p' and `m') -- doesn't seem worth the trouble of writing -% a macro. -% - -code := 108; - -fet_beginchar ("dynamic m", "m"); - save i_thick, i_angle, i_twiddle_thick; - save i_twiddle_start_angle, i_twiddle_start_y; - save i_twiddle_end_angle, i_left_space; - save idir, center, right_ending; - save overshoot; - save p; - pair center, idir, right_ending; - path p; - - set_char_box (0, 1.5 ex#, 0, 1.0 ex#); - - % should share code with p for twiddle. - - overshoot = .25 serif_thick; - i_thick := 21/80 ex; - i_twiddle_thick = 1.2 serif_thick; - i_twiddle_start_y = 8/16 ex; - i_twiddle_start_angle = 0; - i_twiddle_end_angle := 35; - - center = (0, 0); - - currenttransform := currenttransform slanted slant; - - i_angle := 0; - idir := dir (90 - i_angle); - i_left_space = 16/80 ex; - - penpos1 (i_twiddle_thick, -i_twiddle_start_angle); - y1 = i_twiddle_start_y; - z1r = center - (i_left_space, 0) + whatever * idir; - - y2l = ex + overshoot; - z2l = .08 [z3l, z3r] + whatever * idir; - z2r = 5/8 [z1r, z3l] + whatever * idir; - y2r = y5l + 1/9 ex; - z2 = 1/2 [z2l, z2r]; - - penpos3 (i_thick, 0); - y3 = 0.5 bottom_blot + ypart center; - z3l = center + whatever * idir; - - penpos4 (i_thick - bottom_blot, 0); - y4 = ypart center; - z4 - z3 = whatever * idir; - - penpos5 (i_thick, 0); - z5 = z4 + whatever * idir; - y5 = 55/80 ex; - - fill simple_serif (z1l, z1r, 90) - ..tension 1.2.. z2r{right} - .. z5l{z3 - z5} - -- z3l{z3 - z5} - .. z4l{right} - -- z4r{right} - .. z3r{z5 - z3} - -- z5r{z5 - z3} - ..tension 1.2.. z2l{left} - .. cycle; - - right_ending := z5r; - penlabels (1, 2, 3, 4, 5); - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - clearxy; - - i_angle := -3.2; - idir := dir (90 - i_angle); - i_left_space := 14/80 ex; - - penpos1 (serif_thick, -i_twiddle_start_angle); - z1r = right_ending; - - y2l = ex+ overshoot; - z2l = .08 [z3l, z3r] + whatever * idir; - z2r = 5/8 [z1r, z3l] + whatever * idir; - y2r = y5l + 1/9 ex; - z2 = 1/2 [z2l, z2r]; - - penpos3 (i_thick, 0); - y3 = 0.5 bottom_blot + ypart center; - z3l = z5l + whatever * idir; - - penpos4 (i_thick - bottom_blot, 0); - y4 = ypart center; - z4 - z3 = whatever * idir; - - penpos5 (i_thick, 0); - z5l = right_ending + (i_left_space, 0); - - fill simple_serif (z1l, z1r, 90) - ..tension 1.05.. z2r{right} - .. z5l{z3 - z5} - -- z3l - .. z4l{right} - -- z4r{right} - .. z3r{z5 - z3} - -- z5r{z5 - z3} - ..tension 1.2.. z2l{left} - .. cycle; - - right_ending := z5r; - penlabels (1, 2, 3, 4, 5); - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - clearxy; - - i_thick := 23/80 ex; - i_angle := -6; - idir := dir (90 - i_angle); - i_left_space := 14/80 ex; - - penpos1 (serif_thick, -i_twiddle_start_angle); - z1r = right_ending; - - y2l = ex + overshoot; - z2l = .08 [z3l, z3r] + whatever * idir; - z2r = 5/8 [z1r, z3l] + whatever * idir; - y2r = y5l + 1/9 ex; - z2 = 1/2 [z2l, z2r]; - - penpos3 (whatever, 20); - y3l = 1/8 ex + ypart center; - z3l = z7l + whatever * idir; - z3r = z7r + whatever * idir; - - penpos5 (whatever, 10); - z5l = right_ending + (i_left_space, 0); - z5r = z7r + whatever * idir; - - penpos6 (serif_thick, -i_twiddle_end_angle); - y6l = 23/80 ex + ypart center; - z6l = 1.6 [z3l, z3r] + whatever * idir; - - penpos7 (i_thick, 0); - y7 = 0; - z7l = z5l + whatever * idir; - - z8 = z7 - (0, overshoot); - - fill simple_serif (z1l, z1r, 90) - ..tension 1.05.. z2r{right} - .. z5l{z3 - z5} - -- z3l{z3 - z5} - .. z8{right} - .. simple_serif (z6r, z6l, 90) - ..tension 0.85.. z3r{z5 - z3} - -- z5r{z5 - z3} - ..tension 1.2.. z2l{left} - .. cycle; - - penlabels (range 1 thru 8); -fet_endchar; - - -code := 113; - -fet_beginchar ("dynamic r", "r"); - save base_point, stem_thick, bulb_diam; - save twiddle_thick, attach_len, overshoot, taille; - pair base_point; - - set_char_box (0, .75 ex#, 0, ex#); - - stem_thick =.26 ex; - bulb_diam = .30 ex; - twiddle_thick = 1.1 serif_thick; - overshoot = .5 serif_thick; - taille = -0.3 serif_thick; - attach_len + bulb_diam / 2 + stem_thick = w; - - - base_point = (0, 0); - - currenttransform := identity slanted ypart (dir (15)); - - penpos1 (stem_thick, 0); - x1l = 0; - y1l = .5 bottom_blot; - - penpos2 (stem_thick, 0); - x2l = x1l; - y2l - y1l = 36/47 ex; - - penpos3 (twiddle_thick, -20); - x3r = x2l - .2 ex; - y3 = .77 ex; - - x4l = -0.1 [x1l, x1r]; - y4l = ex + overshoot; - x4r = 0.62 [x3r, x2l]; - y4r = 0.5 [y4l, y2l]; - - penpos5 (whatever, -74); - y5l - y5r = bulb_diam; - y5l = ex + overshoot; - x5 = x2r + attach_len; - - penpos6 (bulb_diam, 0); - z6 = z5; - -% z7 = z6l + taille * dir (180); - z7 = z6 + .4 * bulb_diam * dir (-125); - - z8 = 9/10 [z1r, z2r]; - - x9 = 0.15 [x1r, x1l]; - y9 = y4l - .12 ex; - - penpos10 (stem_thick - bottom_blot, 0); - x10 = x1; - y10 = 0; - -% pickup pencircle scaled 1; - -% draw - fill z1r{down} - .. z10r{left} - -- z10l{left} - .. z1l{up} - -- z2l{up} - .. z4r{left} - ..tension 1.2.. {down}simple_serif (z3r, z3l,-90){up} - ..tension 0.95.. z4l - .. {curl 1}z9{curl 1} - .. z5l - .. z6r{dir (-80)} - .. z5r{left} - .. z7 - .. z6l - ..tension 1.2.. z8{down} - -- cycle; - - penlabels (range 1 thru 10); -fet_endchar; - - -%%% KERNING - -ligtable "m": - "p" kern 0.2 ex#, - "f" kern -0.1 ex#; - -ligtable "f": - "f" kern -0.13 ex#; - -ligtable "r": - "f" kern 0.1 ex#; - - -%% notes from old dyn code. - -% `f' obviously has a _lot_ bigger slant than `p' (see Wanske p.239). -% However; perhaps we need two f symbols: -% - a super-slanted one used in `f', `mf', `sfz', `sf' -% - a more normal-slanted in `ff', `fff', `fp', `fp' (see Wanske p.241) -% -% Looking at professionally typeset music reveals that typesetters -% are somewhat unsure about slanting in `mf', `fp', `sfz' -% -% `f' and `p' (in any combination) are a lot (factor two) fatter than -% `s', `m', and `z'. Sometimes the `m' and `z' are a bit fatter than -% `s'. -% -% Chester, Breitkopf suggest smaller sizes of these other glyphs, -% using the x-height as reference point. diff --git a/mf/feta-dots.mf b/mf/feta-dots.mf new file mode 100644 index 0000000000..232a693dcb --- /dev/null +++ b/mf/feta-dots.mf @@ -0,0 +1,37 @@ +% Feta (not the Font-En-Tja) music font -- a duration dot +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys +% +% 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 . + +fet_begingroup ("dots"); + +save dot_diam; + +2 dot_diam# = staff_space# - stafflinethickness#; +define_whole_blacker_pixels (dot_diam); + +fet_beginchar ("duration dot", "dot"); + pickup pencircle scaled dot_diam; + + lft x0 = 0; + top y0 = vround (.5 dot_diam); + + drawdot z0; + + set_char_box (0, dot_diam#, .5 dot_diam#, .5 dot_diam#); +fet_endchar; + +fet_endgroup ("dots"); diff --git a/mf/feta-dynamics.mf b/mf/feta-dynamics.mf new file mode 100644 index 0000000000..0f71eedcab --- /dev/null +++ b/mf/feta-dynamics.mf @@ -0,0 +1,801 @@ +% Feta (not the Font-En-Tja) music font -- dynamic signs +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Jan Nieuwenhuizen +% +% 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 . + + +ex# := (dynamic_design_size / 2.4) * pt#; +descender# := 0.5 ex#; +ascender# := 0.72 ex#; +staffspace# := 1.75 / 2.0 * ex#; +horizontal_space# := .66 ex#; + +font_x_height ex#; +font_normal_space horizontal_space#; + +define_pixels (staffspace, linethickness, ex, descender, ascender); + + +% +% TODO: blot diameter should be fixed, not scalable. +% + +save serif_thick, med_thick, bottom_blot; + +serif_thick# = 1.1 linethickness#; +define_blacker_pixels (serif_thick); + +med_thick = round (1.5 linethickness); +bottom_blot = 1.3 serif_thick; + + +code := 32; + +fet_beginchar ("Space", "space"); + set_char_box (0, horizontal_space#, 0, ex#); +fet_endchar; + + +% +% Couldn't find many z examples. This one is losely inspired +% by a sfz from Mueller Etuden fuer Horn (Edition Hofmeister). +% + +code := 121; + +fet_beginchar ("dynamic z", "z"); + save thin_thick, top_narrow, over_shoot; + save bot_thick; + + set_char_box (0, .98 ex#, 0, 0.9 ex#); + + thin_thick = serif_thick; + top_narrow = thin_thick; + top_overshoot = .8 serif_thick; + top_thick = .3 h; + bot_thick = .2 ex; + bot_overshoot = serif_thick; + + x0 = top_narrow; + y0 = .9 [y1r, y1l]; + + penpos1 (top_thick, 80); + y1l = .72 h; + x1r = .34 ex; + + x2 = .66 ex; + y2 = y1r - top_overshoot; + + y3 = h - .7 thin_thick; + x3 = w - .6 top_narrow - .5 thin_thick; + y4 = .5 thin_thick; + x4 = .5 thin_thick; + + penpos3 (thin_thick, angle (z3 - z4) + 90); + penpos4 (thin_thick, angle (z3 - z4) + 90); + + penpos5 (bot_thick, 70); + x5l =.25 ex; + y5l = .4 bot_overshoot; + + penpos6 (3/2 bot_thick, 70); + y6l = -bot_overshoot; + x6 = w - 3 top_narrow; + + x7 = w; + y7 = .82 [y8r, y6r]; + + penpos8 (thin_thick, 20); + x8r = w - .35 top_narrow; + y8r = .45 h; + + penlabels (range 0 thru 8); + +% pickup pencircle scaled 1; + +% draw + fill z0{down} + .. z1l{dir (10)} + .. simple_serif (z3l, z3r, 90) + .. z2{left} + .. z1r{left} + ..tension 1.2.. cycle; + +% draw + fill z3l + -- z3r + -- z4r + -- z4l + -- cycle; + +% draw + fill simple_serif (z4r, z4l, 90) + .. z5l{right} + .. z6l{right} + .. z7{up} + .. simple_serif (z8r, z8l, 90) + .. z6r{left} + .. z5r{left} + .. cycle; +fet_endchar; + + +% forte f, grabbed from Ed Breitkopf Mozart horn concerto 3. +% +% NOTES: +% +% * the bulbs are open +% +% * blotting around the serif +% +% TODO: insert blots around the serif +% + +slant_angle = 20; +code := 101; + +fet_beginchar ("dynamic f", "f"); + save left_angle, right_angle; + save serif_length, serif_eccentricity; + save f_thick; + save bulb_thick, bulb_diam, fill_up; + save slant; + save p; + path p; + + set_char_box (0, 1.1 ex#, descender#, ex# + ascender#); + + bulb_diam = 7.5 / 40 ex; + bulb_thick = 8.5 / 40 ex; + fill_up = 1.5 serif_thick; + left_angle = slant_angle - 6; + right_angle = slant_angle - 3; + f_thick = 7/16 ex; + serif_length = 0.96 ex; + serif_eccentricity = 0.01 ex; + + % z1 is the `base point' + z1 = (0.2 ex, -serif_thick); + + penpos2 (f_thick, 0); + y2 = y1 + ex; + z2l = z1 + whatever * dir (90 - left_angle); + + penpos3 (med_thick, -90); + y3l = y1 + ex + ascender; + x3l = x1 + ex; + + penpos4 (bulb_thick, -20); + z3r = whatever [z4r, z4l]; + + x4l - x3l = 1/10 ex; + + penpos5 (bulb_thick, -45); + x5r = 0.1 [x4l, x4r]; + y5l = y4l - bulb_diam; + + z6 = z2r + whatever * dir (90 - right_angle); + y6 = y1 + 3/8 ex; + + penpos7 (med_thick, -90); + x7 = x1 - 1/4 ex; + y7r = y1 -descender; + + penpos8 (bulb_thick, 160); + x8l = x7l - 1/10 ex; + + z7l = whatever [z8r, z8l]; + + penpos9 (bulb_thick, 135); + x9r = 0.1 [x8l, x8r]; + y9l = y8l + bulb_diam; + + labels (1, 6, 9); + penlabels (2, 3, 4, 5, 7, 8, 9); + +% pickup pencircle scaled 1; + +% draw + fill z1 + -- z2l{z2l - z1} + ..tension 1.1.. z3l{right} + .. z4r{down} + .. z5r{left} + .. z5l{up} + ..tension 0.8.. z4l{up} + .. z3r{left} + ..tension 1.1.. z2r{z6 - z2r} + -- z6{z6 - z2r} + ..tension 1.25.. z7r{left} + .. z8r{up} + .. z9r{right} + .. z9l{down} + ..tension 0.8.. z8l{down} + .. z7l{right} + .. {z2l - z1}cycle; + + x13 - x14 = serif_length; + y13 = y14; + y14 = y2; + 0.5 [x13, x14] = x2 + serif_eccentricity; + + draw_rounded_block (z14 - (0, 0.7 serif_thick), + z13 + (0, 0.7 serif_thick), + 1.4 serif_thick); + + labels (13, 14); +fet_endchar; + + +% +% Notes: +% +% - The `s' is trapezoidal (i.e., narrower at the top). +% +% - The white space is differently shaped at the top (the bulb's inner +% curve is filled up). +% +% - Less heavy than the `f' and `p' signs. +% + +code := 114; + +fet_beginchar ("dynamic s", "s"); + save left_angle, right_angle; + save s_thick, s_thin; + save bulb_diam, bulb_len; + save over_shoot; + save base_point; + pair base_point; + + set_char_box (0, 17/24 ex#, 0, ex#); + + over_shoot = 0; % .2 serif_thick; + bulb_diam = 11/70 ex; + bulb_len = 1.0 bulb_diam; + left_angle = slant_angle - 2; + right_angle = slant_angle - 11; + s_thick = 16/70 ex; + s_thin = serif_thick; + + base_point = (0, 0); + + penpos1 (bulb_diam, -45); + z1 = 0.35 [z2l, z2r] + bulb_len * dir (45); + + penpos2 (bulb_diam, -25); + y2l = 0.845 [y7r, y3r]; + z2l = base_point + whatever * dir (90 - left_angle); + + penpos3 (s_thin, 100); + x3l = 1/2 w; + y3l = ypart base_point - over_shoot; + + penpos4 (s_thick, 25); + y4l = y1r; + z4r = base_point + (w, 0) + whatever * dir (90 - right_angle); + + penpos5 (s_thick, 40); + z5 = z3l + whatever * dir (90 - right_angle); + y5 = 0.48 [y7r, y3r]; + + penpos6 (s_thick, 25); + z6l = base_point + whatever * dir (90 - left_angle); + y6r = y9l; + + penpos7 (.9 s_thin, 110); + z7l = 0.45 [z6r, z8l] + whatever * dir (90 - left_angle); + y7r = h + over_shoot; + + penpos8 (.9 bulb_diam, -25); + z8 = .6 [z4l, z4r] + whatever * dir (90 - right_angle); + y8r = 0.23 [y7r, y3r]; + + penpos9 (.9 bulb_diam, -45); + z9 = .4 [z8r, z8l] + .9 bulb_len * dir (-135); + + penlabels (range 1 thru 9); + +% pickup pencircle scaled 1; + +% draw + fill z2l{down} + .. z3l{right} + .. z4r{up} + .. z5r + .. z6r{up} + .. z7l{right} + % .. z8l{down} + .. z9l{dir (-125)} + .. z9r{right} + .. z7r{left} + .. z6l{down} + .. z5l + .. z4l{down} + .. z3r{left} + .. z2r{up} + .. z1r{up} + .. z1l{left} + .. cycle; +fet_endchar; + + +% for `p' and `m' + +save slant; +slant := ypart (dir (slant_angle)); + + +% +% Piano `p', grabbed from Ed Breitkopf Mozart horn concerto 3. +% +% Notes: +% +% * There is no dishing in the serif (but we do it anyway). +% +% * The cheek is a little fatter than the stem. +% +% * The slant is extreme: 20 degrees. +% +% * The twiddle (what's-it-called) is a slightly darker than the serif. +% +% * The hole in the cheek has a straight right side. +% +% * Corners are filled up. +% + +code := 111; + +fet_beginchar ("dynamic p", "p") + % TODO: w really is 13/12 ex + % but should do kerning + + save twiddle_thick, stem_thick, cheek_thick, cheek_width; + save fill_up, straigh_len; + save serif, dishing_angle, p, tmp; + save cheek_medium, left_serif_protrude, right_serif_protrude; + save lower_overshoot; + save blot_t, corner_t; + path serif, p; + pair tmp, updir; + + set_char_box (0, 15/12 ex#, descender#, 1.0 ex#); + + twiddle_thick = med_thick; + cheek_medium = 1/6 ex; + + dishing_angle = 5; + fill_up = 1.5 serif_thick; + straigh_len = 0.5 ex; + lower_overshoot = .3 serif_thick; + + stem_thick = 2/6 ex; + cheek_thick = 13/32 ex; + cheek_width = 0.72 ex; + left_serif_protrude = 18/60 ex; + right_serif_protrude = 15/60 ex; + + currenttransform := currenttransform slanted slant; + + penpos1 (twiddle_thick, -slant - 5); + penpos2 (cheek_medium, 90 - slant); + penpos3 (cheek_medium, 90 - slant); + + x4r - x4l = cheek_thick; + + penpos4 (whatever, 0); + penpos5 (whatever, -38); + penpos6 (stem_thick, 0); + penpos17 (straigh_len, 90 - slant); + + whatever [z17l, z17r] = z4l; + y17 = 7/16 ex; + x6l = 0; + y6l = -descender + serif_thick / 2; + z1l = z6l - whatever * dir (110); + y1r = 0.5 ex; + y2r = ex; + z7 = whatever * up + z6l; + y7 = 43/60 ex; + z2l = whatever * up + 0.3 [z7, z1r]; + y8 = 0.9 [y7, y2l]; + z8 = 2/3 [z6l, z6r] + whatever * up; + y3r = ex; + z3l = 0.58 [(stem_thick, -descender), + (stem_thick + cheek_width - cheek_thick, -descender)] + + whatever * up; + y4r = .38 ex; + z4r = whatever * up + (stem_thick + cheek_width, -descender); + z5l = whatever * up + z3l; + y5r = -lower_overshoot; + y5l = y5r + cheek_medium * ypart dir (55); + z9 = z6r + whatever * up; + y9 = .2 [y5l, y5r]; + + p := z2r{right} + .. {dir (-60)}z8{dir 60} + .. z3r{right} + .. z4r{down} + ..tension 1.1.. z5r{left} + .. {curl 1}z9 + -- z6r + -- z6l + -- z7{up} + .. z2l{left} + ..tension 1.2.. simple_serif (z1r, z1l, -90) + .. cycle; + + blot_t := 0.13; + corner_t := xpart (p intersectiontimes z9); + +% pickup pencircle scaled 1; + +% draw + fill subpath (0, corner_t - 2 blot_t) of p + .. subpath (corner_t + blot_t, length p) of p + .. cycle; + + y12 = 0.5 ex; + z12 = z6r + whatever * up; + + unfill z17l + ..tension 1.5.. z17r + .. z3l{left} + ..tension 1.05.. z12{down} + ..tension 1.05.. z5l{right} + .. cycle; + + penlabels (1, 2, 3, 4, 5, 6, 17); + labels (7, 8, 9); + + pickup pencircle scaled serif_thick; + + lft x11 = -left_serif_protrude; + rt x10 = stem_thick + right_serif_protrude; + bot y10 = bot y11 = -descender; + + z15 = z6l + up * fill_up; + z16 = z6r + up * 1.2 fill_up; + + % Since pens are not affected by currenttransform we directly + % transform the necessary points, then simulating the pen with + % an outline while using the identity transformation. + + forsuffixes $ = 7, 10, 11, 15, 16: + tmp := z$ transformed currenttransform; + x$ := xpart tmp; + y$ := ypart tmp; + endfor; + + currenttransform := identity; + + updir = z7 - z15; + + serif := simple_serif (z10, z11, dishing_angle); + + penpos10 (serif_thick, -dishing_angle - 90); + penpos11 (serif_thick, dishing_angle - 90); + penpos13 (serif_thick, angle (direction 0.05 of serif) + 90); + penpos14 (serif_thick, angle (direction 0.85 of serif) + 90); + + z13 = point 0.05 of serif; + z14 = point 0.85 of serif; + + penlabels (10, 11, 13, 14); + labels (15, 16); + +% draw + fill z15{-updir} + .. z14l{direction 0.85 of serif} + .. z11l{-dir (dishing_angle)} + .. z11r{dir (dishing_angle)} + .. z14r{-direction 0.85 of serif} + .. z13r{-direction 0.05 of serif} + .. z10r{dir (-dishing_angle)} + .. z10l{-dir (-dishing_angle)} + .. z13l{direction 0.05 of serif} + .. z16{updir} + -- cycle; +fet_endchar; + + +% +% NOTES: +% +% * Right stem is fatter and more straight than the left two stems. +% +% * The twiddle at the left is similar to the `p' twiddle. +% +% * The bottoms of the stems are blotted. +% +% +% This is cut & paste programming. Somehow three `i' shapes in two +% characters (`p' and `m') -- doesn't seem worth the trouble of writing +% a macro. +% + +code := 108; + +fet_beginchar ("dynamic m", "m"); + save i_thick, i_angle, i_twiddle_thick; + save i_twiddle_start_angle, i_twiddle_start_y; + save i_twiddle_end_angle, i_left_space; + save idir, center, right_ending; + save overshoot; + save p; + pair center, idir, right_ending; + path p; + + set_char_box (0, 1.5 ex#, 0, 1.0 ex#); + + % should share code with p for twiddle. + + overshoot = .25 serif_thick; + i_thick := 21/80 ex; + i_twiddle_thick = 1.2 serif_thick; + i_twiddle_start_y = 8/16 ex; + i_twiddle_start_angle = 0; + i_twiddle_end_angle := 35; + + center = (0, 0); + + currenttransform := currenttransform slanted slant; + + i_angle := 0; + idir := dir (90 - i_angle); + i_left_space = 16/80 ex; + + penpos1 (i_twiddle_thick, -i_twiddle_start_angle); + y1 = i_twiddle_start_y; + z1r = center - (i_left_space, 0) + whatever * idir; + + y2l = ex + overshoot; + z2l = .08 [z3l, z3r] + whatever * idir; + z2r = 5/8 [z1r, z3l] + whatever * idir; + y2r = y5l + 1/9 ex; + z2 = 1/2 [z2l, z2r]; + + penpos3 (i_thick, 0); + y3 = 0.5 bottom_blot + ypart center; + z3l = center + whatever * idir; + + penpos4 (i_thick - bottom_blot, 0); + y4 = ypart center; + z4 - z3 = whatever * idir; + + penpos5 (i_thick, 0); + z5 = z4 + whatever * idir; + y5 = 55/80 ex; + + fill simple_serif (z1l, z1r, 90) + ..tension 1.2.. z2r{right} + .. z5l{z3 - z5} + -- z3l{z3 - z5} + .. z4l{right} + -- z4r{right} + .. z3r{z5 - z3} + -- z5r{z5 - z3} + ..tension 1.2.. z2l{left} + .. cycle; + + right_ending := z5r; + penlabels (1, 2, 3, 4, 5); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + clearxy; + + i_angle := -3.2; + idir := dir (90 - i_angle); + i_left_space := 14/80 ex; + + penpos1 (serif_thick, -i_twiddle_start_angle); + z1r = right_ending; + + y2l = ex+ overshoot; + z2l = .08 [z3l, z3r] + whatever * idir; + z2r = 5/8 [z1r, z3l] + whatever * idir; + y2r = y5l + 1/9 ex; + z2 = 1/2 [z2l, z2r]; + + penpos3 (i_thick, 0); + y3 = 0.5 bottom_blot + ypart center; + z3l = z5l + whatever * idir; + + penpos4 (i_thick - bottom_blot, 0); + y4 = ypart center; + z4 - z3 = whatever * idir; + + penpos5 (i_thick, 0); + z5l = right_ending + (i_left_space, 0); + + fill simple_serif (z1l, z1r, 90) + ..tension 1.05.. z2r{right} + .. z5l{z3 - z5} + -- z3l + .. z4l{right} + -- z4r{right} + .. z3r{z5 - z3} + -- z5r{z5 - z3} + ..tension 1.2.. z2l{left} + .. cycle; + + right_ending := z5r; + penlabels (1, 2, 3, 4, 5); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + clearxy; + + i_thick := 23/80 ex; + i_angle := -6; + idir := dir (90 - i_angle); + i_left_space := 14/80 ex; + + penpos1 (serif_thick, -i_twiddle_start_angle); + z1r = right_ending; + + y2l = ex + overshoot; + z2l = .08 [z3l, z3r] + whatever * idir; + z2r = 5/8 [z1r, z3l] + whatever * idir; + y2r = y5l + 1/9 ex; + z2 = 1/2 [z2l, z2r]; + + penpos3 (whatever, 20); + y3l = 1/8 ex + ypart center; + z3l = z7l + whatever * idir; + z3r = z7r + whatever * idir; + + penpos5 (whatever, 10); + z5l = right_ending + (i_left_space, 0); + z5r = z7r + whatever * idir; + + penpos6 (serif_thick, -i_twiddle_end_angle); + y6l = 23/80 ex + ypart center; + z6l = 1.6 [z3l, z3r] + whatever * idir; + + penpos7 (i_thick, 0); + y7 = 0; + z7l = z5l + whatever * idir; + + z8 = z7 - (0, overshoot); + + fill simple_serif (z1l, z1r, 90) + ..tension 1.05.. z2r{right} + .. z5l{z3 - z5} + -- z3l{z3 - z5} + .. z8{right} + .. simple_serif (z6r, z6l, 90) + ..tension 0.85.. z3r{z5 - z3} + -- z5r{z5 - z3} + ..tension 1.2.. z2l{left} + .. cycle; + + penlabels (range 1 thru 8); +fet_endchar; + + +code := 113; + +fet_beginchar ("dynamic r", "r"); + save base_point, stem_thick, bulb_diam; + save twiddle_thick, attach_len, overshoot, taille; + pair base_point; + + set_char_box (0, .75 ex#, 0, ex#); + + stem_thick =.26 ex; + bulb_diam = .30 ex; + twiddle_thick = 1.1 serif_thick; + overshoot = .5 serif_thick; + taille = -0.3 serif_thick; + attach_len + bulb_diam / 2 + stem_thick = w; + + + base_point = (0, 0); + + currenttransform := identity slanted ypart (dir (15)); + + penpos1 (stem_thick, 0); + x1l = 0; + y1l = .5 bottom_blot; + + penpos2 (stem_thick, 0); + x2l = x1l; + y2l - y1l = 36/47 ex; + + penpos3 (twiddle_thick, -20); + x3r = x2l - .2 ex; + y3 = .77 ex; + + x4l = -0.1 [x1l, x1r]; + y4l = ex + overshoot; + x4r = 0.62 [x3r, x2l]; + y4r = 0.5 [y4l, y2l]; + + penpos5 (whatever, -74); + y5l - y5r = bulb_diam; + y5l = ex + overshoot; + x5 = x2r + attach_len; + + penpos6 (bulb_diam, 0); + z6 = z5; + +% z7 = z6l + taille * dir (180); + z7 = z6 + .4 * bulb_diam * dir (-125); + + z8 = 9/10 [z1r, z2r]; + + x9 = 0.15 [x1r, x1l]; + y9 = y4l - .12 ex; + + penpos10 (stem_thick - bottom_blot, 0); + x10 = x1; + y10 = 0; + +% pickup pencircle scaled 1; + +% draw + fill z1r{down} + .. z10r{left} + -- z10l{left} + .. z1l{up} + -- z2l{up} + .. z4r{left} + ..tension 1.2.. {down}simple_serif (z3r, z3l,-90){up} + ..tension 0.95.. z4l + .. {curl 1}z9{curl 1} + .. z5l + .. z6r{dir (-80)} + .. z5r{left} + .. z7 + .. z6l + ..tension 1.2.. z8{down} + -- cycle; + + penlabels (range 1 thru 10); +fet_endchar; + + +%%% KERNING + +ligtable "m": + "p" kern 0.2 ex#, + "f" kern -0.1 ex#; + +ligtable "f": + "f" kern -0.13 ex#; + +ligtable "r": + "f" kern 0.1 ex#; + + +%% notes from old dyn code. + +% `f' obviously has a _lot_ bigger slant than `p' (see Wanske p.239). +% However; perhaps we need two f symbols: +% - a super-slanted one used in `f', `mf', `sfz', `sf' +% - a more normal-slanted in `ff', `fff', `fp', `fp' (see Wanske p.241) +% +% Looking at professionally typeset music reveals that typesetters +% are somewhat unsure about slanting in `mf', `fp', `sfz' +% +% `f' and `p' (in any combination) are a lot (factor two) fatter than +% `s', `m', and `z'. Sometimes the `m' and `z' are a bit fatter than +% `s'. +% +% Chester, Breitkopf suggest smaller sizes of these other glyphs, +% using the x-height as reference point. diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf deleted file mode 100644 index de97f18677..0000000000 --- a/mf/feta-eindelijk.mf +++ /dev/null @@ -1,593 +0,0 @@ -% feta-eindelijk.mf -- implement rest symbols -*-Fundamental-*- -% -% part of LilyPond's pretty-but-neat music font -% -% source file of the Feta (not the Font-En-Tja) music font -% -% (c) 1997--2009 Jan Nieuwenhuizen - -fet_begingroup ("rests"); - -save block_rest_y, block_rest_x; -save breve_rest_y, breve_rest_x; - -breve_rest_y# = staff_space#; -breve_rest_x# = 3/5 staff_space#; -block_rest_y# = 5/8 staff_space#; -block_rest_x# = 3/2 staff_space#; - -define_whole_pixels (block_rest_y, block_rest_x); -define_whole_pixels (breve_rest_y, breve_rest_x); - - -def block_rest = - draw_block ((0, 0), (block_rest_x, block_rest_y)); -enddef; - - -fet_beginchar ("whole rest", "0"); - set_char_box (0, block_rest_x#, - block_rest_y#, 0); - - block_rest; - currentpicture := currentpicture - shifted (0, -block_rest_y + feta_space_shift); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("half rest", "1"); - set_char_box (0, block_rest_x#, 0, block_rest_y#); - - block_rest; - - draw_staff (-2, 2, 0); -fet_endchar; - - -% -% should use ledgerline thickness? -% -fet_beginchar ("whole rest (outside staff)", "0o"); - set_char_box (0, block_rest_x#, - block_rest_y#, ledgerlinethickness# / 2); - - block_rest; - currentpicture := currentpicture shifted (0, -block_rest_y); - - pickup pencircle scaled ledgerlinethickness; - - y5 = y6 = 0; - lft x5 = -b - block_rest_y; - rt x6 = w + block_rest_y; - draw_gridline (z5, z6, ledgerlinethickness_rounded); - - draw_staff (-2, 2, -3); -fet_endchar; - - -fet_beginchar ("half rest (outside staff)", "1o"); - set_char_box (0, block_rest_x#, - ledgerlinethickness# / 2, block_rest_y#); - - block_rest; - - pickup pencircle scaled ledgerlinethickness; - - y5 = y6 = 0; - lft x5 = -b - block_rest_y; - rt x6 = w + block_rest_y; - - draw_gridline (z5, z6, ledgerlinethickness_rounded); - - draw_staff (-2, 2, 3); -fet_endchar; - - -fet_beginchar ("maxima rest", "M3"); - set_char_box (0, 3 breve_rest_x#, breve_rest_y#, breve_rest_y#); - - draw_block ((0, -breve_rest_y + feta_shift), - (breve_rest_x, breve_rest_y)); - - addto currentpicture also currentpicture shifted (2 breve_rest_x, 0); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("longa rest", "M2"); - set_char_box (0, breve_rest_x#, breve_rest_y#, breve_rest_y#); - - draw_block ((0, -breve_rest_y + feta_shift), - (breve_rest_x, breve_rest_y)); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("breve rest", "M1"); - set_char_box (0, breve_rest_x#, 0, breve_rest_y#); - - draw_block ((0, 0), (breve_rest_x, breve_rest_y)); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("Quarter rest", "2"); - save alpha, yshift, height; - save xcenter; - - yshift# := -1.25 staff_space#; - height# := 2.8125 staff_space#; - define_pixels (yshift, height); - - alpha := -50; - thick := 1/4 staff_space; - rthin := 1.25 linethickness; - xcenter := -0.1 staff_space; - rthick := 2 thick + rthin; - - set_char_box (0, 0.95 staff_space#, -yshift#, yshift# + height#); - - save ne, nw, se, sw; - pair ne, nw, se, sw; - - se = dir alpha; - ne = dir (alpha + 90); - nw = dir (alpha + 180); - sw = dir (alpha + 270); - - penpos1 (rthin, alpha + 90); - penpos2 (5/4 rthick, alpha); - penpos4 (5/4 rthick, alpha); - penpos5 (rthin, alpha + 90); - penpos3 (3/4 rthick, alpha); -% penpos6 (5/8 rthick, alpha); - penpos6 (2/3 rthick, alpha); - penpos7 (1/2 rthin, alpha + 90); - - z10 = z2l + 1/2 rthin * sw; -% z11 = z4l + 1/2 rthin * sw; - z11 = z4l + 1/2 rthin * sw + 1/2 rthin * se; - z12 = z4r + 1/2 rthin * ne; -% z13 = z2r + 1/2 rthin * ne; - z13 = z2r + 1/2 rthin * ne + 1/2 rthin * nw; - - y1r = h; - x1l = xcenter + 1/3 staff_space; - z2r = z1 + staff_space * se; - z3 = 1/2 [z2, z4]; - x4 = xcenter + 3/8 staff_space; - y4 = 0; - y4l := vround y4l; - z5 = round (z4l + 1.3 staff_space * se) + feta_offset; - x6l = x4l; - y6l = vround y4r; - x6r := hround x6r + xpart feta_offset; - y6r := vround y6r + ypart feta_offset; - x7 = hround (xcenter + 2/5 staff_space) + xpart feta_offset; - y7 = -d; - - save before, after; - path before, after; - before = z11{se} - .. {se}z5l; - after = z5r{nw} - ..tension1.4.. z6l; - (u, v) = before intersectiontimes after; - - fill z1l{se} - .. {se}z10 - .. z3l - .. subpath (0, u) of before - .. subpath (v, infinity) of after - ..tension1.4.. {se}z7l - .. z7r{nw} - ..tension1.4.. z6r - ..tension1.4.. {se}z5l - .. z5r{nw} - .. {nw}z12 - .. z3r - .. z13{nw} - .. {nw}z1r - .. cycle; - - penlabels (1, 2, 3, 4, 5, 6, 7); - penlabels (10, 11, 12, 13); - - draw_staff (-2, 2, 0); -fet_endchar; - - -% -% Notes about 8th rest: -% -% * 8th rest should be no wider than the black note head -% -% * The inside corner of the horizontal portion is usually a little blotted. -% -% * The top of the crook chops off the vertical brush -% -% * The crook widens a little -% -% * The bottom of the brush is slightly flat, as it has to align with -% stafflines if it is inside the staff. -% -% * The top of the brush usually is a little lower than the top of bulb. -% -% * The bulb can vary. Sometimes it is open (like in the clefs). Sometimes -% it is closed, or even a flare. -% - -% from an email to Rune Zedeler: -% -% -% For example, the 8th rest was vaguely based on a book with trumpet -% studies by Duhem, and by Baerenreiters cello suites. I included my -% findings in a comment in the mf file. One of the things that I tried -% to do was make the rest a little lighter and narrower than the black -% note head. I think this looks better in polyphonic music, when the -% rest is below a head from a different voice. -% - -save bulb_diam, thin, thick; - -bulb_diam# := 0.64 staff_space#; -thin# := 1.4 linethickness# - 0.02 staff_space#; -thick# := 2.2 linethickness#; - -crook_thin := 0.5 linethickness + 0.08 staff_space; -lower_brush := 1.5 linethickness; - -define_pixels (bulb_diam); -define_whole_blacker_pixels (thin, thick); - - -% -% PAT is a compact way to pass the brush shape to the routine. -% - -def draw_rest_bulb (expr ycenter, ycut, pat, stretch, show_labels) = -begingroup; - save x, y, pt, res; - - z1l = point 0 of pat; - z2l = point 1 of pat; - z2r = point 3 of pat; - z1r = point 4 of pat; - z1 = 0.5 [z1l, z1r]; - z2 = 0.5 [z2l, z2r]; - y10 = ycenter; - z10 = whatever [z2, z1] + left * bulb_diam * stretch; - - % this enforces similar bulb shapes for lower resolutions - x10 := hround x10; - - z3 = z10 + bulb_diam / 2.15 * dir (-72); - y3 := hround y3; - z5 = z10 + up * bulb_diam / 2 + right * linethickness / 3; - y5 := hround y5; - - z7 = 0.5 [z4, z5] + crook_thin * (0.45, 0.4) / 1.3; - x8 = hround (x10 - 0.4 bulb_diam); - y8 = y10 + 0.25 linethickness; - - z6 = whatever [z1l, z2l]; - z6 = z3 + whatever * dir (12); - - z4 = z3 + whatever * (z6 - z3) - + 1.1 crook_thin * (unitvector (z6 - z3) rotated 90); - x4 = x10 + bulb_diam * .62; - y4 := vround y4; - - (pt, whatever) = pat intersectiontimes ((0, ycut) -- (w, ycut)); - - path res; - res = point pt of pat {-direction pt of pat} - ..tension 2.. z4{left} - ..tension 0.9.. z7 - .. z5{left} - .. z8 - .. z3{right} - .. {curl 0.2}z6; - - if show_labels = 1: - labels (3, 4, 5, 6, 7, 8, 10); - fi; - -res -endgroup; -enddef; - - -def draw_eighth_rest (expr show_labels) = - save ycenter; - save pat, bulb; - path pat, bulb; - - set_char_box (0, 1.0 staff_space#, - 1.0 staff_space# + 0.5 linethickness#, - 0.5 staff_space# + bulb_diam# / 2); - - penpos1 (thick, 0); - penpos2 (thin, 10); - - y1 = -staff_space_rounded; - y2 = h - vround lower_brush; - x2r = w; - z2 = z1 + whatever * dir (72); - z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); - y9 := vround y9; - - x1l := hround x1l; - x1r := hround x1r; - x1 := .5 [x1l, x1r]; - - if show_labels = 1: - penlabels (1, 2); - labels (9); - fi; - - pat = z1l - -- z2l - .. z9 - .. z2r - -- z1r - .. cycle; - bulb = draw_rest_bulb (0.5 staff_space, y2r, pat, 1.0, show_labels); - - fill simple_serif (z1l, z1r, 40) - -- z2r - .. z9 - .. bulb - -- z1l - .. cycle; - - draw_staff (-2, 2, 0); -enddef; - - -fet_beginchar ("Classical quarter rest", "2classical"); - draw_eighth_rest (0); - currentpicture := currentpicture xscaled -1 shifted (w, 0); -fet_endchar; - - -fet_beginchar ("8th rest", "3"); - draw_eighth_rest (1); -fet_endchar; - - -% -% TODO: the X dimensions of the rests are fucked up: -% they can collide with augmentation dots. -% - -fet_beginchar ("16th rest", "4"); - save ycenter; - save pat, bulb_a, bulb_b; - path pat, bulb_a, bulb_b; - - set_char_box (0, 1.2 staff_space#, - 2.0 staff_space# + 0.5 linethickness#, - 0.5 staff_space# + bulb_diam# / 2); - - penpos1 (thick, 0); - penpos2 (thin, 10); - - y1 = -2 staff_space_rounded; - y2 = h - vround lower_brush; - x2r = w; - z2 = z1 + whatever * dir (74); - z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); - y9 := vround y9; - - x1l := hround x1l; - x1r := hround x1r; - x1 := .5 [x1l, x1r]; - - pat = z1l - -- z2l - .. z9 - .. z2r - -- z1r - .. cycle; - bulb_a = draw_rest_bulb (.5 staff_space, - y2r, pat, 0.98, 1); - bulb_b = draw_rest_bulb (.5 staff_space - staff_space_rounded, - hround ((-0.5 + 0.2) * staff_space), - pat, 1.02, 1); - - fill simple_serif (z1l, z1r, 40) - -- z2r - .. z9 - .. bulb_a - -- bulb_b - -- z1l - .. cycle; - - penlabels (1, 2); - labels (9); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("32th rest", "5"); - save ycenter; - save pat, bulb_a, bulb_b, bulb_c; - path pat, bulb_a, bulb_b, bulb_c; - - set_char_box (0, 1.3 staff_space#, - 2.0 staff_space# + 0.5 linethickness#, - 1.5 staff_space# + bulb_diam# / 2); - - penpos1 (thick, 0); - penpos2 (thin, 10); - - y1 = -2 staff_space_rounded; - y2 = h - vround lower_brush; - x2r = w; - z2 = z1 + whatever * dir (76); - z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); - y9 := vround y9; - - x1l := hround x1l; - x1r := hround x1r; - x1 := .5 [x1l, x1r]; - - pat = z1l - -- z2l - .. z9 - .. z2r - -- z1r - .. cycle; - bulb_a = draw_rest_bulb (.5 staff_space + staff_space_rounded, - y2r, pat, 0.96, 1); - bulb_b = draw_rest_bulb (.5 staff_space, - hround ((0.5 + 0.2) * staff_space), - pat, 1.00, 1); - bulb_c = draw_rest_bulb (.5 staff_space - staff_space_rounded, - hround ((-0.5 + 0.21) * staff_space), - pat, 1.04, 1); - - fill simple_serif (z1l, z1r, 40) - -- z2r - .. z9 - .. bulb_a - -- bulb_b - -- bulb_c - -- z1l - .. cycle; - - penlabels (1, 2); - labels (9); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("64th rest", "6"); - save ycenter; - save pat, bulb_a, bulb_b, bulb_c, bulb_d; - path pat, bulb_a, bulb_b, bulb_c, bulb_d; - - set_char_box (0, 1.4 staff_space#, - 3.0 staff_space# + 0.5 linethickness#, - 1.5 staff_space# + bulb_diam# / 2); - - penpos1 (thick, 0); - penpos2 (thin, 10); - - y1 = -3 staff_space_rounded; - y2 = h - vround lower_brush; - x2r = w; - z2 = z1 + whatever * dir (78); - z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); - y9 := vround y9; - - x1l := hround x1l; - x1r := hround x1r; - x1 := .5 [x1l, x1r]; - - pat = z1l - -- z2l - .. z9 - .. z2r - -- z1r - .. cycle; - bulb_a = draw_rest_bulb (.5 staff_space + staff_space_rounded, - y2r, pat, 0.94, 1); - bulb_b = draw_rest_bulb (.5 staff_space, - hround ((0.5 + 0.20) * staff_space), - pat, 0.98, 1); - bulb_c = draw_rest_bulb (.5 staff_space - staff_space_rounded, - hround ((-0.5 + 0.21) * staff_space), - pat, 1.02, 1); - bulb_d = draw_rest_bulb (.5 staff_space - 2 staff_space_rounded, - hround ((-1.5 + 0.22) * staff_space), - pat, 1.06, 1); - - fill simple_serif (z1l, z1r, 40) - -- z2r - .. z9 - .. bulb_a - -- bulb_b - -- bulb_c - -- bulb_d - -- z1l - .. cycle; - - penlabels (1, 2); - labels (9); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("128th rest", "7"); - save ycenter; - save pat, bulb_a, bulb_b, bulb_c, bulb_d, bulb_e; - path pat, bulb_a, bulb_b, bulb_c, bulb_d, bulb_e; - - set_char_box (0, 1.5 staff_space#, - 3.0 staff_space# + 0.5 linethickness#, - 2.5 staff_space# + bulb_diam# / 2); - - penpos1 (thick, 0); - penpos2 (thin, 10); - - y1 = -3 staff_space_rounded; - y2 = h - vround lower_brush; - x2r = w; - z2 = z1 + whatever * dir (80); - z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1)- 10); - y9 := vround y9; - - x1l := hround x1l; - x1r := hround x1r; - x1 := .5 [x1l, x1r]; - - pat = z1l - -- z2l - .. z9 - .. z2r - -- z1r - .. cycle; - bulb_a = draw_rest_bulb (.5 staff_space + 2 staff_space_rounded, - y2r, pat, 0.92, 1); - bulb_b = draw_rest_bulb (.5 staff_space + staff_space_rounded, - hround ((1.5 + 0.20) * staff_space), - pat, 0.96, 1); - bulb_c = draw_rest_bulb (.5 staff_space, - hround ((0.5 + 0.21) * staff_space), - pat, 1.0, 1); - bulb_d = draw_rest_bulb (.5 staff_space - staff_space_rounded, - hround ((-0.5 + 0.22) * staff_space), - pat, 1.04, 1); - bulb_e = draw_rest_bulb (.5 staff_space - 2 staff_space_rounded, - hround ((-1.5 + 0.23) * staff_space), - pat, 1.08, 1); - - fill simple_serif (z1l, z1r, 40) - -- z2r - .. z9 - .. bulb_a - -- bulb_b - -- bulb_c - -- bulb_d - -- bulb_e - -- z1l - .. cycle; - - penlabels (1, 2); - labels (9); - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_endgroup ("rests"); diff --git a/mf/feta-flags.mf b/mf/feta-flags.mf new file mode 100644 index 0000000000..261c55b307 --- /dev/null +++ b/mf/feta-flags.mf @@ -0,0 +1,574 @@ +% Feta (not the Font-En-Tja) music font -- draw flags +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys +% +% 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 . + +fet_begingroup ("flags"); + +save outer_path; +path outer_path; + +% +% Flags pointing down overlap with the notehead (in x-direction), so +% the down-flag can be bigger. +% + +upflag_width# = .65 black_notehead_width# + stemthickness# / 2; +downflag_width# = .833 black_notehead_width# + stemthickness# / 2; + +right_upflag_space# = .0 upflag_width#; +right_downflag_space# = .0 downflag_width#; + +% +% Flags pointing down cannot overlap with the notehead in y-direction, +% so they have less slant. +% +% Because of optical illusion, the utmost flag (bottom for +% down-pointing, top for up-pointing) should be smaller than the other +% flags. Adobe Sonata doesn't do this correctly. (Instead they have +% an extension flag, which looks less elegant.) +% + +save hip_thickness, foot_thickness; + +hip_thickness# = 1.0 linethickness# + 0.069 staff_space#; +foot_thickness# = 1.2055 linethickness# + 0.06 staff_space#; + +define_pixels (hip_thickness, foot_thickness); + +% +% Inspired by Adobe Sonata and [Wanske]. +% For example, see POSTSCRIPT Language -- program design, +% page 119, and [Wanske], p 41, 42. +% + +def draw_flag (expr center, flare, dims, hip_depth, foot_wid, + hip_thickness, foot_thickness, show_labels) = + save c; + + clearxy; + + c = 0.7; + + penpos1 (flare, 90); + penpos2 (whatever, 0); + + x2r - x2l = hround (hip_thickness); + + penpos3 (foot_thickness, -20.0); + + z1r = center; + z2r = center + (xpart (dims), -ypart (dims) * hip_depth); + z3r = center + (xpart (dims) * foot_wid, -ypart (dims)); + + x2r := hround x2r; + y2r := vround y2r; + + outer_path := z3r{curl c} + .. z2r{up} + .. {up}z1r; + + if show_labels = 1: + penlabels (1, 2, 3); + fi; + + fill z1l{curl 0} + ..tension 1.1.. z2l{down} + .. {curl c}simple_serif (z3l, z3r, 80) + & outer_path + & z1r + -- cycle; +enddef; + +% +% TODO: calculate intersectpoint (see TeX book, p. 137) +% TODO: calculate incision_depth +% + +def add_flag (expr yoff, flare, hip_wid_multiplier, hip_dep_multiplier, + intersectpoint, hip_thickness, foot_thickness) = +begingroup + save prev_center, prev_xextreme, prev_yextreme; + save rel_foot, ip, center, incision_depth; + save prev_hipwid, prev_footdep, prev_hipdep, wid, dep, hip_dep; + save hip_dep_ratio, foot_wid_ratio; + pair prev_center, center, foot, prev_xextreme, prev_yextreme; + pair ip, rel_foot; + + incision_depth = 1.013; + prev_center = point 2 of outer_path; + prev_xextreme = point 1 of outer_path; + prev_yextreme = point 0 of outer_path; + prev_hipwid = xpart (prev_xextreme - prev_center); + prev_footdep = -ypart (prev_yextreme - prev_center); + prev_hipdep = -ypart (prev_xextreme - prev_center); + ip = point intersectpoint of outer_path; + + wid = prev_hipwid * hip_wid_multiplier; + hip_dep = prev_hipdep * hip_dep_multiplier; + + center = prev_center + (0, yoff); + rel_foot = incision_depth [(wid, hip_dep), ip - center]; + dep = -ypart (rel_foot); + foot_wid_ratio = xpart (rel_foot) / wid; + hip_dep_ratio = hip_dep / dep; + + draw_flag (center, flare, (wid, dep), + hip_dep_ratio, foot_wid_ratio, + hip_thickness, foot_thickness, 0); +endgroup +enddef; + + +fet_beginchar ("8th Flag (up)", "u3"); + 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; + flare = staff_space; + flagspace# = staff_space#; + hip_depth_ratio = .72; + hip_width# = upflag_width# - hip_thickness# / 2; + foot_width_ratio = .8; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + stemthickness# / 2 + right_upflag_space#, + foot_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 1); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); +fet_endchar; + + +fet_beginchar ("16th Flag (up)", "u4"); + 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; + flare = .85 staff_space; + flagspace# = .85 staff_space#; + hip_depth_ratio = .72; + hip_width# = upflag_width# - hip_thickness# / 2; + foot_width_ratio = .8; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + stemthickness# / 2 + right_upflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 1); + + add_flag (flagspace, flare, .97, 1.00, 1.25, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); +fet_endchar; + + +fet_beginchar ("32nd Flag (up)", "u5"); + 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; + flare = .85 staff_space; + flagspace# = .87 staff_space#; + hip_depth_ratio = .72; + hip_width# = upflag_width# - hip_thickness# / 2; + foot_width_ratio = .8; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_upflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 1); + + add_flag (flagspace, flare, .97, 1.00, 1.25, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, .95, 1.05, 1.25, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); +fet_endchar; + + +fet_beginchar ("64th Flag (up)", "u6"); + 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; + flare = .85 staff_space; + flagspace# = .9 staff_space#; + hip_depth_ratio = .72; + hip_width# = upflag_width# - hip_thickness# / 2; + foot_width_ratio = .8; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_upflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 1); + + add_flag (flagspace, flare, .97, 1.00, 1.3, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, 1.00, 1.00, 1.25, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, .95, 1.05, 1.25, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); +fet_endchar; + + +fet_beginchar ("128th Flag (up)", "u7"); + 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; + flare = .85 staff_space; + flagspace# = .93 staff_space#; + hip_depth_ratio = .72; + hip_width# = upflag_width# - hip_thickness# / 2; + foot_width_ratio = .8; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_upflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 1); + + add_flag (flagspace, flare, .97, 1.00, 1.3, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, 1.00, 1.00, 1.25, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, 1.00, 1.00, 1.25, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, 0.95, 1.05, 1.25, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); +fet_endchar; + + +fet_beginchar ("8th (down)", "d3"); + 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#; + flare = staff_space; + flagspace# = .9 staff_space#; + hip_depth_ratio = .74; + hip_width# = downflag_width# - hip_thickness# / 2; + foot_width_ratio = .85; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_downflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2) + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 0); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); + + y_mirror_char; +fet_endchar; + + +fet_beginchar ("16th (down)", "d4"); + 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; + flare = .82 staff_space; + flagspace# = .9 staff_space#; + hip_depth_ratio = .85; + hip_width# = downflag_width# - hip_thickness# / 2; + foot_width_ratio = .95; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_downflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 0); + + add_flag (flagspace, flare, .95, 1.00, 1.25, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); + + y_mirror_char; +fet_endchar; + + +fet_beginchar ("32nd (down)", "d5"); + 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; + flare = .82 staff_space; + flagspace# = .88 staff_space#; + hip_depth_ratio = .87; + hip_width# = downflag_width# - hip_thickness# / 2; + foot_width_ratio = .965; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_downflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 0); + + add_flag (flagspace, flare, .98, 1.00, 1.22, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, .95, 1.02, 1.22, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); + + y_mirror_char; +fet_endchar; + + +fet_beginchar ("64th (down)", "d6"); + 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; + flare = .8 staff_space; + flagspace# = .9 staff_space#; + hip_depth_ratio = .83; + hip_width# = downflag_width# - hip_thickness# / 2; + foot_width_ratio = .975; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_downflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 0); + + add_flag (flagspace, flare, .98, 1.10, 1.19, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, .98, 1.08, 1.19, + hip_thickness, foot_thickness); + add_flag (.98 flagspace, flare, .94, 1.04, 1.21, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); + + y_mirror_char; +fet_endchar; + + +fet_beginchar ("128th (down)", "d7"); + 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; + flare = .8 staff_space; + flagspace# = .92 staff_space#; + hip_depth_ratio = .85; + hip_width# = downflag_width# - hip_thickness# / 2; + foot_width_ratio = .98; + + (flag_count - 1) * flagspace# + foot_depth# = total_depth#; + + define_pixels (hip_width, foot_depth); + define_whole_vertical_pixels (flagspace); + + set_char_box (0, hip_width# + right_downflag_space#, + total_depth# + foot_thickness# / 2, stemthickness# / 2); + + draw_flag ((0, -(flag_count - 1) * flagspace), + flare, (hip_width, foot_depth), + hip_depth_ratio, foot_width_ratio, + hip_thickness, foot_thickness, 0); + + add_flag (flagspace, flare, .98, 1.10, 1.185, + hip_thickness, foot_thickness); + add_flag (flagspace, flare, .98, 1.08, 1.185, + hip_thickness, foot_thickness); + add_flag (.98 flagspace, flare, .97, 1.06, 1.2, + hip_thickness, foot_thickness); + add_flag (.98 flagspace, flare, .93, 1.04, 1.22, + hip_thickness, foot_thickness); + + draw_square_block ((-0.5 stemthickness_rounded, 0), + (0, (-flag_count * staff_space_rounded))); + + y_mirror_char; +fet_endchar; + + +%%%%%%%% +% +% Single Stroke for Short Appogiatura +% + +fet_beginchar ("grace dash (up)", "ugrace"); + save flare, hip_depth_ratio, hip_width, foot_depth; + + hip_depth_ratio = .72; + flare# = staff_space#; + hip_width# = upflag_width# - hip_thickness# / 2; + foot_depth# = 3 staff_space#; + + define_pixels (hip_width, foot_depth); + + set_char_box (hip_width# * hip_depth_ratio, + hip_width# + right_upflag_space#, + foot_depth# * hip_depth_ratio, -flare#) + + pickup pencircle scaled 1.5 stemthickness; + + z1 = (-b, -d); + z2 = (w, h); + + penpos1 (1.5 stemthickness, angle (z2 - z1) - 90); + penpos2 (1.5 stemthickness, angle (z2 - z1) - 90); + + fill z1l + -- z2l + .. top z2 + .. rt z2 + .. z2r + -- z1r + .. bot z1 + .. lft z1 + .. cycle; + + penlabels (1, 2); +fet_endchar; + + +fet_beginchar ("grace dash (down)", "dgrace"); + save flare, hip_depth_ratio, hip_width, foot_depth; + save total_depth; + + hip_depth_ratio = .72 ; + flare# = .99 staff_space#; + hip_width# = downflag_width# - hip_thickness# / 2; + total_depth# = 2.85 staff_space#; + foot_depth# = total_depth#; + foot_width_ratio = .8; + + define_pixels (hip_width, foot_depth); + + set_char_box (hip_width# * hip_depth_ratio, + hip_width# + right_downflag_space#, + foot_depth# * hip_depth_ratio, -flare#) + + pickup pencircle scaled 1.5 stemthickness; + + z1 = (-b, -d); + z2 = (w, h); + + penpos1 (1.5 stemthickness, angle (z2 - z1) - 90); + penpos2 (1.5 stemthickness, angle (z2 - z1) - 90); + + fill z1l + -- z2l + .. top z2 + .. rt z2 + .. z2r + -- z1r + .. bot z1 + .. lft z1 + .. cycle; + + y_mirror_char; +fet_endchar; + + +fet_endgroup ("flags"); diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf index f2c90cdf61..f78895d0f2 100644 --- a/mf/feta-generic.mf +++ b/mf/feta-generic.mf @@ -1,12 +1,21 @@ -% -% feta-generic.mf -- implement generic stuff: include lots of files, but don't -% set dims. +% 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. % -% source file of the Feta (defintively not an abbreviation for Font-En-Tja) -% music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% +% Copyright (C) 1997--2011 Han-Wen Nienhuys +% +% +% 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 . if test = -1: @@ -23,24 +32,22 @@ input feta-params; font_x_height staff_space#; -%% this is a fallback so we can run the font without including feta-bolletjes. +%% 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-eindelijk; - input feta-toevallig; - input feta-arrow; - input feta-puntje; - input feta-bolletjes; - input feta-schrift; - input feta-banier; - input feta-klef; - input feta-timesig; - input feta-pendaal; - input feta-haak; +if test = 0: + input feta-rests; + input feta-accidentals; + input feta-arrowheads; + input feta-dots; + input feta-scripts; + input feta-clefs; + input feta-timesignatures; + input feta-pedals; + input feta-brackettips; input feta-accordion; else: input feta-test-generic.mf; diff --git a/mf/feta-haak.mf b/mf/feta-haak.mf deleted file mode 100644 index ddc01c0847..0000000000 --- a/mf/feta-haak.mf +++ /dev/null @@ -1,92 +0,0 @@ -% feta-haak.mf -- implement bracket tips -*-Fundamental-*- -% -% part of LilyPond's pretty-but-neat music font -% -% source file of the Feta (not the Font-En-Tja) music font -% -% (c) 2005--2009 Han-Wen Nienhuys - -fet_begingroup ("brackettips"); - -def draw_bracket (expr thick_sharp, width_sharp, updown) = -begingroup; - save p, thin, thick, flattening, width, hair, flare; - path p; - pair tipdir; - - flattening = 0.72; - thick# = thick_sharp; - flare# = flattening * width#; - width# = width_sharp; - - define_pixels (thick, width, flare); - if updown = 1: - set_char_box (0, width#, - .5 thick#, flare#); - else: - set_char_box (0, width#, - flare#, .5 thick#); - fi; - - thin = 2 linethickness; - hair = 1.25 linethickness; - - pickup pencircle scaled thin; - y7 = y1; - x7 = x2; - z2 = z4r + (thin, 0); - - penpos3 (thin, 0); - penpos4 (thin, 90); - - z3 = z4; - - top y3 = 0.5 thick; - lft x3 = 0.0; - x1 = x3l; - y1 = -0.5 thick; - - z8 = .5 [z2, z7]; - top y5 = flare; - rt x5 = width; - - p := z8{right} - ..tension 1.2.. z5{curl 0}; - tipdir := direction 1 of p; - - penpos5 (hair, angle tipdir); - penpos6 (hair, 90 + angle tipdir); - - z5 = z6; - - pickup pencircle scaled 1; - - fill (z1 - -- z3l{up} - .. z4r{right} - -- z2{right} - .. z6r{tipdir} - .. z5r - .. z6l{-tipdir} - ..tension 1.1.. z7{left} - & z7 - -- z1 - & cycle) yscaled updown; - - if updown = 1: - penlabels (1, 2, 3, 4, 5, 6, 7, 8); - fi; -endgroup; -enddef; - - -fet_beginchar ("bracket tip up", "up"); - draw_bracket (0.45 staff_space#, 1.9 staff_space#, 1); -fet_endchar; - - -fet_beginchar ("bracket tip down", "down"); - draw_bracket (0.45 staff_space#, 1.9 staff_space#, -1); -fet_endchar; - -fet_endgroup ("brackettips"); diff --git a/mf/feta-klef.mf b/mf/feta-klef.mf deleted file mode 100644 index 15008d848e..0000000000 --- a/mf/feta-klef.mf +++ /dev/null @@ -1,698 +0,0 @@ -% feta-klef.mf -- implement Clefs -*-Fundamental-*- -% -% part of LilyPond's pretty-but-neat music font -% -% source file of the Feta (not the Font-En-Tja) music font -% -% (c) 1997--2009 Han-Wen Nienhuys , -% Jan Nieuwenhuizen , -% Juergen Reuter - - -fet_begingroup ("clefs"); - -% -% [Wanske] says the bulbs should be positioned about 1/4 right of the -% `arrow'. -% -% TODO: The hair-curve at z6r looks a little awkward. -% - -def draw_c_clef (expr reduction) = - save hair, norm, reduced_ss, right_edge; - save xoff; - - reduced_ss# = staff_space# * reduction; - norm# := 2/3 reduced_ss#; - hair# := 0.06 reduced_ss# + 0.5 linethickness#; - right_edge# = 15/4 norm# + 2 hair#; - define_pixels (norm, reduced_ss, right_edge); - define_whole_vertical_blacker_pixels (hair); - - set_char_box (0, right_edge#, 2 reduced_ss#, 2 reduced_ss#); - - % make unreduced glyph fit exactly into five staff lines - if reduction = 1: - h := d := 2 staff_space_rounded; - fi; - - % assure that the gap between the left and right stem - % has the same number of pixels as the thickness of the right - % stem - draw_block ((0, -d + feta_shift), - (3/4 norm + 1/2 hair, h)); - draw_block ((3/4 norm + 1/2 hair + hround (3/2 hair), -d + feta_shift), - (3/4 norm + 1/2 hair + 2 hround (3/2 hair), h)); - - % assure symmetry - h := h - feta_shift; - - pickup feta_fillpen; - - xoff = 3/4 norm + 1/2 hair + 2 hround (3/2 hair); - z5l = (xoff - 3/4 hair, 0); - z5r = (x4, 0); - - penpos1 (hair - pen_top - pen_bot, -90); - top z1l = (xoff + norm + hair, h); - - penpos2 (hround (norm - 3/2 hair) - pen_lft - pen_rt, 180); - rt z2l = (w, h / 2); - - penpos3 (hair - pen_top - pen_bot, 90); - bot z3l = ((right_edge - xoff) / 2 + xoff, - vround (.5 norm - 1.5 hair)); - - penpos4 (hair - pen_lft - pen_rt, 0); - top z4 = (xoff + 1/2 norm + 1/2 hair, - vfloor (reduced_ss - linethickness - .2 hair)); - - bot z6 = (xoff + 3/4 norm, vround (.5 norm - .5 hair)); - - save t; - t = 0.833; - - save pat; - path pat; - - pat = z5l{curl 1} - .. z4l{up} - .. z4r{down} - .. z3r{right} - ..tension t.. z2r{up} - ..tension t.. flare_path (top z1l, 180, 90, - hair, hfloor (norm - 1/2 hair), -1) - ..tension t.. z2l{down} - .. z3l{left} - .. z6 - .. z5r{down}; - - filldraw pat shifted (0, feta_shift) - -- reverse pat yscaled -1 shifted (0, -feta_eps) - -- cycle; - - penlabels (1, 2, 3, 4, 5, 6); - - % ugh, should be bulb, not flare? - - draw_staff (-2, 2, 0); -enddef; - - -fet_beginchar ("C clef", "C"); - draw_c_clef (1.0); -fet_endchar; - - -fet_beginchar ("C clef", "C_change"); - draw_c_clef (.8); -fet_endchar; - - -% -% New bulb routine: -% -% Insert a brushed piece of the path, and draw the rest of the bulb -% separately. -% -% The bulb has circular form. Neat merging of the bulb and brushed path -% is done by playing with tension. -% - -def new_bulb (expr start_point, start_angle, - outer_tangent_point, - end_point, end_angle, - big_radius, bulb_radius, flare, - direction, turning_dir) = -begingroup; - save pat, before, after; - save center; - save u, v; - path pat, before, after; - pair center; - - clearxy; - - center = outer_tangent_point - + big_radius * dir (0); -% + (big_radius - bulb_radius) * dir (-turning_dir * 90) - - z1' = center + bulb_radius * dir (turning_dir * 180); - z2' = outer_tangent_point + flare * dir (0); - z3' = center + bulb_radius * dir (0); - z4' = center + bulb_radius * dir (turning_dir * 90); - z5' = center - 0.5 [big_radius, bulb_radius] * dir (turning_dir * 90); - - labels (1', 2', 3', 4', 5'); - - before := z3'{dir (turning_dir * 90)} - .. z4'{-dir (0)} - ..tension 1.1.. z1'{-dir (turning_dir* 90)}; - after := z2'{dir (turning_dir * 90)} - .. end_point{dir (end_angle)}; - (u, v) = before intersectiontimes after; - - pat := start_point{dir (start_angle)} - .. outer_tangent_point{dir (-turning_dir * 90)} - ..tension 1.02.. z5'{dir (0)} - .. subpath (0, u) of before - .. subpath (v, infinity) of after; - - if direction = 0: - pat := reverse pat; - fi - -pat -endgroup -enddef; - - -% -% There is some variation in the shape of bass clefs. -% -% * In some clefs the size of the swoosh tip almost reaches the -% bottom staff line; in some it crosses the 2nd line from the bottom -% with a small overshoot. -% -% The most popular design is where the X part of the tip is aligned -% with the left bulb boundary, and the Y part ends on the 2nd -% staffline exactly. This is what we do. -% -% * The diameter of the bulb is the width of the open space. -% -% * The vertical center of the bulb can be on or slightly above the -% staff line. -% -% * The vertical position of the dots can be symmetrical around the -% staffline, centered in the staff space. The Baerenreiter SCS has -% the bottom dot raised by approximately 0.1 staff space. -% -% * Uncarefully set music may have overshoots at the top. We have none. -% -% * It is not exactly clear where the vertical tangent at the right -% of the swoosh should be. -% - -def draw_bass_clef (expr exact_center, reduction) = - save reduced_ss, swoosh_width; - save right_thickness, right_offset, tip_protrude; - save dot_diam, bulb_y_offset, bulb_flare; - pair tip_protrude; - - reduced_ss# = staff_space# * reduction; - 2.2 dot_diam# = reduction * (staff_space# - stafflinethickness#); - right_thickness# = 0.37 staff_space# + 1.2 linethickness#; - swoosh_width# = 2.1 reduced_ss#; - define_pixels (swoosh_width); - define_whole_pixels (reduced_ss); - define_whole_blacker_pixels (dot_diam, right_thickness); - - right_offset = 0.05 staff_space; - bulb_y_offset := 0.075 staff_space; - bulb_flare := 2.5 linethickness; -% tip_protrude := (-linethickness, -.2 staff_space); - tip_protrude := (0, 0); - - set_char_box (-xpart exact_center, - xpart exact_center + swoosh_width# + 7/12 reduced_ss#, - -ypart exact_center + 2.5 reduced_ss#, - ypart exact_center + reduced_ss#); - - y1 = bulb_y_offset; - x1 = 0; - - x2 = .5 [x1, x3]; - x2l = x2r = x2; - - y2l := vround_pixels (reduced_ss# + 0.5 linethickness#); - y2l - y2r = linethickness; - - x3l - x1 = swoosh_width; - x3l - x3r = right_thickness; - - % optical correction: the top dot seems farther away if y3l = 0. - y3l = right_offset; - - z4 = -(0, 2.0 reduced_ss) + tip_protrude; - - penpos3 (whatever, 185); - penpos4 (linethickness, 135); - - fill new_bulb (z2l, 180, z1, z2r, 0, - 0.45 reduced_ss, 0.4 reduced_ss, - bulb_flare, 1, 1) - .. z3r{down} - .. {curl 0}simple_serif (z4r, z4l, 90){curl 0} - .. z3l{up} - ..tension 0.9.. cycle; - - pickup pencircle scaled dot_diam; - - lft x5 = hround (x3l + 1/3 reduced_ss - dot_diam / 2); - bot y5 = vfloor (.5 reduced_ss - dot_diam / 2); - z6 = z5 yscaled -1; - - % for symmetry - y5 := y5 + feta_shift; - - drawdot z5; - drawdot z6; - - penlabels (1, 2, 3, 4, 5, 6); - - draw_staff (-3, 1, 0); -enddef; - - -fet_beginchar ("F clef ", "F"); - draw_bass_clef ((0, 0), 1.0); -fet_endchar; - - -fet_beginchar ("F clef (reduced)", "F_change"); - draw_bass_clef ((0, 0), 0.8); -fet_endchar; - - - -% -% Inspired by Baerenreiter -% -% -% Beste lezers, kijk, -% -% Een bolletje hebben we bij toeval allemaal wel eens getekend, maar begint u -% toch eenvoudig. Eerst een eenvoudig kruis of herstellingsteken -% en via de dubbelslag naar een voorzichtig vlaggetje, en heb geduld! -% Ikzelf heb bijvoorbeeld over mijn eerste gave G-sleutel -% 35 kilobyte metafont, 12 patchlevels, 0 vriendinnen en 45 dagen gedaan -% -% -- vrij naar Van Kooten & De Bie -% - -def debugfill = fill enddef; - -def draw_gclef (expr reduction) = - save reduced_ss, downstroke_dir, downstroke_angle, center; - save breapth_factor, inner_thick_end, thinness, thickness, thinnib; - save start_angle, inner_start_angle, thinness; - save upward_swoosh_angle, bot_angle; - save pat; - path pat; - pair downstroke_dir, center; - - reduced_ss# = staff_space# * reduction; - define_pixels (reduced_ss); - - thinness = 0.095 staff_space + 0.75 linethickness; - downstroke_dir = unitvector (14, -75); - downstroke_angle = angle downstroke_dir; - bot_angle = -180; % downstroke_angle - 87 - - upward_swoosh_angle = 132; - start_angle = -97; - - breapth_factor = 21/14; - inner_thick_end = 45; - inner_start_angle = downstroke_angle - 43; - thickness = .32 reduced_ss + 1.1 linethickness; - - thinnib = thinness; - - set_char_box (0, 1.71 * breapth_factor * reduced_ss#, - 2.6 * reduced_ss#, 5 * reduced_ss#); - - center := (breapth_factor * reduced_ss, 0); - - z1 = center + whatever * dir (inner_start_angle); - x1 = xpart center - .28 reduced_ss; - penpos1 (thinnib, inner_start_angle); - - x2r = xpart center; - y2r = vround_pixels (reduced_ss# + .5 stafflinethickness#); - penpos2 (thickness, 90); - - z3 = (z4 - center) rotated inner_thick_end + center; - penpos3 (thinnib, -90 + inner_thick_end); - - x4 = xpart center - .1 reduced_ss; - y4r = -y2r + feta_shift; - penpos4 (thinnib, -90); - - x5r = -breapth_factor * reduced_ss + xpart center; - y5r = .37 reduced_ss + ypart center; - penpos5 (thickness, upward_swoosh_angle); - - z6 = center + whatever * downstroke_dir; - y6 = ypart center + 2 reduced_ss; - % penpos6 is computed later - - z7l - z6 = whatever * (z5 - z6) ; - y7l = 3.5 reduced_ss; - penpos7 (thickness, upward_swoosh_angle); - - x9 = .7 [x10, x7r]; - top y9l = 5 reduced_ss; - penpos9 (1.45 thickness, -70); - - x11 - x13r = 1.5 reduced_ss + 0.5 thinnib; - y11 = ypart center - 47/28 reduced_ss; - y12 = ypart center - 71/28 reduced_ss; - y13 = .48 [y12, y4r]; - x12r = xpart (.45 [z13r, z11] + .75 reduced_ss * downstroke_dir); - -% z10 = center + whatever * dir (downstroke_angle - 1.5); - x10 = x6 - 2 thinnib; - y10 = ypart center + 3.5 reduced_ss; - y10l - y10r = 1.0 thickness; - z10r - z10l = .7 thinnib * dir (downstroke_angle + 90) - + whatever * downstroke_dir; - z10 = .5 [z10l, z10r]; - z11 = center + whatever * downstroke_dir + (-0.05 reduced_ss, 0); - - penpos11 (thinnib, start_angle + 90); - penpos12 (thinnib, bot_angle + 90); - penpos13 (thinnib + 0.14 staff_space, 180); - - % this auxiliary point ensures good contour overlapping - z8 = .5 [z9l, z9r] + .25 ((z9r - z9l) rotated -90); - - z20 = z9l - (0, .25 blot_diameter); - penpos20 (blot_diameter, 0); - - pat := z10{down} - .. z6 - ..tension 1.1.. z11{dir (start_angle)}; - - penpos6 (thinnib, angle (direction 1 of pat) + 90); - - % two auxiliary points to simulate `draw' with `penstroke' - z10' = point 0.3 of pat; - penpos10' (1.3 thinnib, angle (direction 0.3 of pat) + 50); - - z11' = point 1.5 of pat; - penpos11' (thinnib, angle (direction 1.5 of pat) + 90); - - z21l = z20l; - z21r = z9r; - - pat := z21l - .. z10l{down} - .. z10'l; - - fill z2l{right} - .. z3l - .. z4l{left} - ..tension 1.07.. z5l{up} % inside curve - .. z7l{up} - ..tension 1.2.. z20r{curl 1} - .. {direction 0 of pat}z20l - -- z8 - -- z9r % {dir (downstroke_angle + 0)} - ..tension 0.8.. z7r{down} - .. z5r{down} - .. z4r{right} - .. z3r - .. z2r{left} - ..tension .95.. z1r - -- simple_serif (z1r, z1l, 80) - -- z1l - ..tension 0.85.. cycle; - - penstroke z21e - .. z10e{down} - .. z10'e - .. z6e - .. z11'e - .. z11e{dir (-95)} - .. z12e{dir (bot_angle)}; - - fill new_bulb (z12r, bot_angle, z13r, z12l, bot_angle + 180, - 0.45 reduced_ss, 0.38 reduced_ss, - thinnib + .05 staff_space, 1, -1) - -- cycle; - - penlabels (range 1 thru 21); - penlabels (10', 11'); - - draw_staff (-1, 3, 0); -enddef; - - -fet_beginchar ("G clef", "G"); - draw_gclef (1.0); -fet_endchar; - - -fet_beginchar ("G clef", "G_change"); - draw_gclef (0.8); -fet_endchar; - - -%%%% -% -% PERCUSSION -% - -% -% The percussion clef extent is not coincident with its bbox, since -% the percussion clef needs more space in front than a normal clef. -% - -def draw_percussion_clef (expr reduction) = - save reduced_ss, razt; - - reduced_ss# = staff_space# * reduction; - define_pixels (reduced_ss); - - set_char_box (-.67 reduced_ss#, 2.0 reduced_ss#, - reduced_ss#, reduced_ss#); - - razt := hround (0.45 reduced_ss); - - d := d - feta_shift; - - draw_block ((-b, -d), (-b + razt, h)); - draw_block ((w - razt, -d), (w, h)); - - draw_staff (-3, 1, 1); -enddef; - - -fet_beginchar ("percussion clef", "percussion"); - draw_percussion_clef (1.0); -fet_endchar; - - -fet_beginchar ("percussion clef (reduced)", "percussion_change"); - draw_percussion_clef (.8); -fet_endchar; - - -def draw_tab_T (expr pos, siz, slant) = -begingroup; - save vx, vy; - pair vx, vy; - - clearxy; - - vx = (xpart siz) * dir 0; - vy = (ypart siz) * dir 90; - - penpos1 (.75 penh, 100); - z1 = z2 + (1/6 * vx - .15 * vy); - penpos2 (hround (.9 penw), 0); - x2l = hround xpart (pos + .75 vy); - y2l = ypart (pos + .75 vy); - penpos3 (penh, -100); - z3l = pos + .4 vx + vy; - penpos4 (penh, -90); - z4 = -.1 vy + .5 [z3, z5]; - penpos5 (.8 penh, -30); - x5r = xpart (pos + siz); - y5l = ypart (pos + siz); - - penpos10 (penw, 170); - z10 = pos + .55 vx + .9 vy; - penpos11 (.75 [penh, penw], 170); - z11 = z10 - .5 vy + .025 vx; - penpos12 (penh, 100); - z12l = (xpart .5 [z13, z11], ypart (pos - .025 * siz)); - penpos13 (.75 penh, 60); - z13 = pos + .2 vx + .15 vy; - - % penlabels (range 1 thru 13); - - soft_penstroke (z1e - ..tension 1.1.. z2e - .. z3e{right} - ..tension 1.5.. z4e - ..z5e) - slanted slant shifted (slant * -ypart pos, 0); - - soft_end_penstroke (z10e - ..tension 1.5.. z11e - .. z12e - ..tension 1.1.. z13e{(z13r - z13l) rotated 90}) - slanted slant shifted (slant * -ypart pos, 0); -endgroup; -enddef; - - -def draw_tab_A (expr pos, siz, slant) = -begingroup; - save vx, vy, pat; - pair vx, vy; - path pat; - - clearxy; - - vx = (xpart siz) * dir 0; - vy = (ypart siz) * dir 90; - - penpos1 (.75 penh, -110); - z1r = pos + .07 vy; - penpos2 (penh, -75); - z2r = (.5 [x1, x3], ypart pos); - penpos3 (.25 [penh, penw], -30); - z3 = (.45 [x2, x4], .15 [y2, y4]); - penpos4 (1 [penh, penw], 0); - z4 = pos + .5 vx + .975 vy; - - penpos5 (1 [penh, penw], -180); - z5 = z4; - penpos6 (.2 [penh, penw], -150); - z6l = (.8 [x5l, x7l], .9 [y5l, y7l]); - penpos7 (penh,-90); - z7r = (.5 [x6, x8], ypart pos); - penpos8 (.75 penh, -70); - z8r = (xpart (pos + siz), y7r + .075 ypart (siz)); - - pat := z2 - .. z3 - .. z4; - - penpos10 (penh, angle (direction 1.2 of pat) - 180); - z10 = point 1.2 of pat; - penpos11 (.9 penh, -90); - z11 = .4 [z10, z6] - 0.05 vy; - penpos12 (.75 penh, -75); - z12 = .3 [z11, z6] + 0.02 vy; - - % penlabels (range 1 thru 12); - - soft_penstroke (z1e{(z1r - z1l) rotated 90} - .. z2e - .. z3e - .. z4e) - slanted slant shifted (slant * -ypart pos, 0); - - soft_end_penstroke (z5e - .. z6e - .. z7e - .. z8e{(z8r - z8l) rotated 90}) - slanted slant shifted (slant * -ypart pos, 0); - - soft_end_penstroke (z10e - .. z11e - .. z12e) - slanted slant shifted (slant * -ypart pos, 0); -endgroup; -enddef; - - -def draw_tab_B (expr pos, siz, slant) = -begingroup; - save vx, vy; - pair vx, vy; - - clearxy; - - vx = (xpart siz) * dir 0; - vy = (ypart siz) * dir 90; - - penpos1 (.75 penh, 100); - z1 = z2 + (.15 * vx - .1 * vy); - penpos2 (hround (.9 penw), 0); - x2l = hround xpart (pos + .75 vy); - y2l = ypart (pos + .75 vy); - penpos3 (penh, -100); - z3l = pos + .4 vx + 1.05 vy; - penpos4 (.8 [penh, penw], -180); - z4 = (xpart (pos + .75 siz), .5 [y3, y5]); - penpos5 (.8 penh, 90); - z5 = (.5 [x10, x4], ypart (pos + .55 siz)); - - penpos6 (.8 penh, 270); - z6 = z5; - penpos7 (penw, 180); - z7l = (xpart (pos + siz), .5 [y6, y8]); - penpos8 (.8 penh, 45); - z8 = .5 [z12l, z11l] + .15 vx - .05 vy; - - penpos10 (.75 [penh, penw], 170); - z10 = pos + .375 vx + vy; - penpos11 (.8 [penh, penw], 150); - z11 = z10 - .5 vy + .04 vx; - penpos12 (penh, 100); - z12l = (xpart .5 [z13, z11], ypart pos); - penpos13 (.75 penh, 60); - z13 = pos + .1 vx + .15 vy; - - % penlabels (range 1 thru 13); - - soft_penstroke (z1e - ..tension 1.1.. z2e - .. z3e - .. z4e - ..z5e {left}) - slanted slant shifted (slant * -ypart pos, 0); - - soft_end_penstroke (z6e{right} - .. z7e - .. z8e{(z8r - z8l) rotated 90}) - slanted slant shifted (slant * -ypart pos, 0); - - soft_end_penstroke (z10e - ..tension 1.5.. z11e - .. z12e - ..tension 1.1.. z13e{(z13r - z13l) rotated 90}) - slanted slant shifted (slant * -ypart pos, 0); -endgroup; -enddef; - - -def draw_tab_clef (expr reduction) = - save reduced_ss, letterheight, penw, penh; - - reduced_ss# = staff_space# * reduction; - letterheight# = 1.8 reduced_ss#; - define_pixels (reduced_ss, letterheight); - - set_char_box (-.2 reduced_ss#, 2.8 reduced_ss#, - 1.6 letterheight#, 1.6 letterheight#); - - penw = .45 reduced_ss; - penh = .2 reduced_ss; - - draw_tab_T ((-b + .15 reduced_ss, h - letterheight), - (2.1 reduced_ss, letterheight), 0.2); - draw_tab_A ((-b - .05 reduced_ss, -.5 letterheight +.15 reduced_ss), - (2.2 reduced_ss, letterheight), 0.4); - draw_tab_B ((-b + .025 reduced_ss, -d), - (2.1 reduced_ss, letterheight), 0.25); - - draw_staff (-3, 2, 0.5); -enddef; - - -fet_beginchar ("tab clef", "tab"); - draw_tab_clef (1.0); -fet_endchar; - - -fet_beginchar ("tab clef (reduced)", "tab_change"); - draw_tab_clef (.8); -fet_endchar; - -fet_endgroup ("clefs"); diff --git a/mf/feta-macros.mf b/mf/feta-macros.mf index 19cc379a42..5bd97d36a0 100644 --- a/mf/feta-macros.mf +++ b/mf/feta-macros.mf @@ -1,9 +1,20 @@ +% Feta (not the Font-En-Tja) music font -- auxiliary macros for both feta and parmesan fonts +% This file is part of LilyPond, the GNU music typesetter. % -% feta-macros.mf -- auxiliary macros for both feta and parmesan fonts +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% source file of the GNU LilyPond music typesetter +% 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. % -% (c) 1997--2009 Han-Wen Nienhuys +% 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 . % diff --git a/mf/feta-noteheads-generic.mf b/mf/feta-noteheads-generic.mf new file mode 100644 index 0000000000..4a952ed407 --- /dev/null +++ b/mf/feta-noteheads-generic.mf @@ -0,0 +1,57 @@ +% 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 +% +% +% 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 . + + +if test = -1: + mode := smoke; +fi + +staffsize# := design_size * pt#; + +mode_setup; + +input feta-macros; + +input feta-params; + +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 + +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; diff --git a/mf/feta-noteheads-test-generic.mf b/mf/feta-noteheads-test-generic.mf new file mode 100644 index 0000000000..0e381bd4b5 --- /dev/null +++ b/mf/feta-noteheads-test-generic.mf @@ -0,0 +1,7 @@ +% +% test stuff. +% in a separate file to avoid tainting non-test font files for testing. +% + +input feta-noteheads; +%input feta-flags; diff --git a/mf/feta-noteheads.mf b/mf/feta-noteheads.mf new file mode 100644 index 0000000000..54a51f622a --- /dev/null +++ b/mf/feta-noteheads.mf @@ -0,0 +1,2940 @@ +% Feta (not the Font-En-Tja) music font -- implement noteheads +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Jan Nieuwenhuizen +% & Han-Wen Nienhuys +% & Juergen Reuter +% +% +% 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 . + +test_outlines := 0; + + +save remember_pic; +picture remember_pic; + + +% Most beautiful noteheads are pronounced, not circular, +% and not even symmetric. +% These examples are inspired by [Wanske]; see literature list. + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% NOTE HEAD VARIABLES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +save black_notehead_width, noteheight; +save half_notehead_width, whole_notehead_width, slash_thick; +save slash_slope, overdone_heads, 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; + path pat; + + pat := superellipse ((ellipticity, 0), (0, 1.0), + (-ellipticity, 0), (0, -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 height, scaling; + + height# = staff_space# + stafflinethickness# - clearance; + scaling# = height# / (2 ypart (top_point)); + define_pixels (scaling); + pat := pat scaled scaling shifted (w / 2, .5 (h - d)); + + if test_outlines = 1: + draw pat; + else: + unfill pat; + fi +endgroup; +enddef; + + +% +% dimensions aren't entirely right. +% +def draw_longa (expr up) = + save stemthick, fudge; + + stemthick# = 2 stafflinethickness#; + define_whole_blacker_pixels (stemthick); + + fudge = hround (blot_diameter / 2); + + draw_outside_ellipse (1.80, 0, 0.707, 0); + undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#); + + pickup pencircle scaled stemthick; + + if up: + bot y1 = -d; + top y2 = h; + rt x1 - fudge = 0; + x1 = x2; + + fudge + lft x3 = w; + x4 = x3; + top y4 = h + 3.0 staff_space; + y3 = y1; + else: + bot y1 = -d - 3.0 staff_space; + top y2 = h; + rt x1 - fudge = 0; + x1 = x2; + + fudge + lft x3 = w; + x4 = x3; + y4 = y2; + bot y3 = -d; + fi; + + draw_gridline (z1, z2, stemthick); + draw_gridline (z3, z4, stemthick); + + labels (1, 2, 3, 4); +enddef; + + +fet_beginchar ("Longa notehead", "uM2"); + draw_longa (true); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Longa notehead", "dM2"); + draw_longa (false); + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Longa notehead", "uM2"); + draw_longa (true); + + draw_staff (-2, 2, 0.5); + fet_endchar; + + + fet_beginchar ("Longa notehead", "dM2"); + draw_longa (false); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +% +% dimensions aren't entirely right. +% +def draw_brevis (expr linecount) = + save stemthick, fudge; + + stemthick# = 2 stafflinethickness#; + define_whole_blacker_pixels (stemthick); + + fudge = hround (blot_diameter / 2); + + draw_outside_ellipse (1.80, 0, 0.707, 0); + undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#); + + pickup pencircle scaled stemthick; + + bot y1 = -d; + top y2 = h; + rt x1 - fudge = 0; + x1 = x2; + + fudge + lft x3 = w; + x4 = x3; + y4 = y2; + y3 = y1; + + for i := 0 step 1 until linecount - 1: + draw_gridline (z1 - (1.5 * i * stemthick, 0), + z2 - (1.5 * i * stemthick, 0), stemthick); + draw_gridline (z3 + (1.5 * i * stemthick, 0), + z4 + (1.5 * i * stemthick, 0), stemthick); + endfor; +enddef; + + +fet_beginchar ("Brevis notehead", "sM1"); + draw_brevis (1); + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Brevis notehead", "sM1"); + draw_brevis(1); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("Double-lined brevis notehead", "sM1double"); + draw_brevis (2); + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Double-lined brevis notehead", "sM1double"); + draw_brevis (2); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("Whole notehead", "s0"); + draw_outside_ellipse (1.80 - puff_up_factor / 3.0, 0, 0.707, 0); + undraw_inside_ellipse (1.30, 125 - puff_up_factor * 10, + 0.68, 2 stafflinethickness#); + + whole_notehead_width# := charwd; + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Whole notehead", "s0"); + draw_outside_ellipse (1.80 - puff_up_factor / 3.0, 0, + 0.707, 0); + undraw_inside_ellipse (1.30, 125 - puff_up_factor * 10, + 0.68, 2 stafflinethickness#); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("Half notehead", "s1"); + draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, 0.66, 0.17); + undraw_inside_ellipse (3.25, 33, 0.81, 2.5 stafflinethickness#); + + half_notehead_width# := charwd; + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Half notehead", "s1"); + draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, + 0.66, 0.17); + undraw_inside_ellipse (3.25, 33, 0.81, + 2.5 stafflinethickness#); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +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_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Quarter notehead", "s2"); + draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, + 0.707, 0); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +fet_beginchar ("Whole diamondhead", "s0diamond"); + draw_outside_ellipse (1.80, 0, 0.495, 0); + undraw_inside_ellipse (1.30, 125, 0.6, + .4 staff_space# + stafflinethickness#); + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Whole diamondhead", "s0diamond"); + draw_outside_ellipse (1.80, 0, 0.495, 0); + undraw_inside_ellipse (1.30, 125, 0.6, + .4 staff_space# + stafflinethickness#); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("Half diamondhead", "s1diamond"); + draw_outside_ellipse (1.50, 34, 0.49, 0.17); + undraw_inside_ellipse (3.5, 33, 0.80, + .3 staff_space# + 1.5 stafflinethickness#); + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Half diamondhead", "s1diamond"); + draw_outside_ellipse (1.50, 34, 0.49, 0.17); + undraw_inside_ellipse (3.5, 33, 0.80, + .3 staff_space# + + 1.5 stafflinethickness#); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("Quarter diamondhead", "s2diamond"); + draw_outside_ellipse (1.80, 35, 0.495, -0.25); + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Quarter diamondhead", "s2diamond"); + draw_outside_ellipse (1.80, 35, 0.495, -0.25); + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +vardef penposx@# (expr d) = +begingroup; + save pat; + path pat; + + pat = top z@# + .. lft z@# + .. bot z@# + .. rt z@# + .. cycle; + z@#l = pat intersectionpoint (z@# -- infinity * dir (d + 180)); + z@#r = pat intersectionpoint (z@# -- infinity * dir (d)); +endgroup +enddef; + + +% +% UGH: xs not declared as argument. +% +def define_triangle_shape (expr stemdir) = + save triangle_a, triangle_b, triangle_c; + save triangle_out_a, triangle_out_b, triangle_out_c; + save triangle_in, triangle_out; + save width, depth, height; + save origin, left_up_dir; + save exact_left_point, exact_right_point, exact_down_point; + + path triangle_a, triangle_b, triangle_c; + path triangle_out_a, triangle_out_b, triangle_out_c; + path triangle_in, triangle_out; + pair origin, left_up_dir; + pair exact_down_point, exact_left_point, exact_right_point; + + save pen_thick; + pen_thick# = stafflinethickness# + .1 staff_space#; + define_pixels (llap); + define_blacker_pixels (pen_thick); + + left_up_dir = llap# * dir (90 + tilt); + + xpart (left_up_dir) * xs - (pen_thick# * xs) / 2 + xpart origin = 0; + ypart origin = 0; + + exact_left_point := origin + (left_up_dir xscaled xs); + exact_down_point := origin + (left_up_dir rotated 120 xscaled xs); + exact_right_point := origin + (left_up_dir rotated 240 xscaled xs); + + height# = ypart (exact_left_point + origin) + pen_thick# / 2; + depth# = -ypart (exact_down_point + origin) + pen_thick# / 2; + width# = xpart (exact_right_point - exact_left_point) + + pen_thick# * xs; + + set_char_box (0, width#, depth#, height#); + + % Formerly, the shape has simply been drawn with an elliptical pen + % (`scaled pen_thick xscaled xs'), but the envelope of such a curve + % is of 6th degree. For the sake of mf2pt1, we approximate it. + + pickup pencircle scaled pen_thick xscaled xs; + + z0 = (hround_pixels (xpart origin), 0); + + z1 = z1' = z0 + llap * dir (90 + tilt) xscaled xs; + z2 = z2' = z0 + llap * dir (90 + tilt + 120) xscaled xs; + z3 = z3' = z0 + llap * dir (90 + tilt + 240) xscaled xs; + + z12 = caveness [.5[z1, z2], z3]; + z23 = caveness [.5[z2, z3], z1]; + z31 = caveness [.5[z3, z1], z2]; + + triangle_a = z1 .. z12 .. z2; + triangle_b = z2 .. z23 .. z3; + triangle_c = z3 .. z31 .. z1; + + penposx1 (angle (direction 0 of triangle_a) - 90); + penposx2 (angle (direction 0 of triangle_b) - 90); + penposx3 (angle (direction 0 of triangle_c) - 90); + + penposx1' (angle (direction infinity of triangle_c) + 90); + penposx2' (angle (direction infinity of triangle_a) + 90); + penposx3' (angle (direction infinity of triangle_b) + 90); + + penposx12 (angle (z12 - z0)); + penposx23 (angle (z23 - z0)); + penposx31 (angle (z31 - z0)); + + z10 = (z0 -- z1) intersectionpoint (z1l .. z12l .. z2'r); + z20 = (z0 -- z2) intersectionpoint (z2l .. z23l .. z3'r); + z30 = (z0 -- z3) intersectionpoint (z3l .. z31l .. z1'r); + + triangle_in = z10 + .. z12l + .. z20 + & z20 + .. z23l + .. z30 + & z30 + .. z31l + .. z10 + & cycle; + + triangle_out_a = z1r .. z12r .. z2'l; + triangle_out_b = z2r .. z23r .. z3'l; + triangle_out_c = z3r .. z31r .. z1'l; + + triangle_out = top z1 + .. lft z1 + .. z1r{direction 0 of triangle_out_a} + & triangle_out_a + & {direction infinity of triangle_out_a}z2'l + .. lft z2 + .. bot z2 + .. z2r{direction 0 of triangle_out_b} + & triangle_out_b + & {direction infinity of triangle_out_b}z3'l + .. rt z3 + .. top z3 + .. z3r{direction 0 of triangle_out_c} + & triangle_out_c + & {direction infinity of triangle_out_c}z1'l + .. cycle; + + labels (0, 10, 20, 30); + penlabels (1, 1', 2, 2', 3, 3', 12, 23, 31); + + % attachment Y + if stemdir = 1: + charwy := ypart exact_right_point; + charwx := xpart exact_right_point + .5 pen_thick# * xs; + else: + charwy := -ypart exact_down_point; + charwx := width# - (xpart exact_down_point - .5 pen_thick# * xs); + fi +enddef; + + +def draw_whole_triangle_head = + save hei, xs; + save llap; + save tilt; + + tilt = 40; + llap# = 3/4 noteheight#; + + xs = 1.5; + caveness := 0.1; + define_triangle_shape (1); + fill triangle_out; + unfill triangle_in; +enddef; + + +fet_beginchar ("Whole trianglehead", "s0triangle"); + draw_whole_triangle_head; + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Whole trianglehead", "s0triangle"); + draw_whole_triangle_head; + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +def draw_small_triangle_head (expr dir) = + save hei, xs; + save llap; + save tilt; + + tilt = 40; + llap# = 2/3 noteheight#; + xs = 1.2; + caveness := 0.1; + define_triangle_shape (dir); + + pickup feta_fillpen; + + filldraw triangle_out; + unfilldraw triangle_in; +enddef; + + +fet_beginchar ("Half trianglehead (downstem)", "d1triangle"); + draw_small_triangle_head (-1); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Half trianglehead (upstem)", "u1triangle"); + draw_small_triangle_head (1); + + draw_staff (-2, 2, 0.5); +fet_endchar; + + +def draw_closed_triangle_head (expr dir) = + save hei, xs; + save llap; + save tilt; + + tilt = 40; + llap# = 2/3 noteheight#; + xs = 1.0; + caveness := 0.1; + define_triangle_shape (dir); + fill triangle_out; +enddef; + + +fet_beginchar ("Quarter trianglehead (upstem)", "u2triangle"); + draw_closed_triangle_head (1); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Quarter trianglehead (downstem)", "d2triangle"); + draw_closed_triangle_head (-1); + + draw_staff (-2, 2, 0.5); +fet_endchar; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Slash heads are for indicating improvisation. They are +% twice as high as normal heads. +% +def draw_slash (expr hwid_hash) = + save exact_height; + save ne, nw_dist; + pair ne, nw_dist; + exact_height = staff_space# + stafflinethickness# / 2; + + set_char_box (0, 2 exact_height / slash_slope + hwid_hash, + exact_height, exact_height); + + charwx := charwd; + charwy := charht; + + clearxy; + + d := d - feta_shift; + + pickup pencircle scaled blot_diameter; + + bot y1 = -d; + top y2 = h; + lft x1 = 0; + lft x2 = 2 h / slash_slope; + + rt x3 = w; + y3 = y2; + y4 = y1; + x3 - x2 = x4 - x1; + + ne = unitvector (z3 - z4); + nw_dist = (ne rotated 90) * 0.5 blot_diameter; + + fill bot z1{left} + .. (z1 + nw_dist){ne} + -- (z2 + nw_dist){ne} + .. top z2{right} + -- top z3{right} + .. (z3 - nw_dist){-ne} + -- (z4 - nw_dist){-ne} + .. bot z4{left} + -- cycle; + + if hwid_hash > 2 slash_thick#: + save th; + + th = slash_thick - blot_diameter; + y6 = y7; + y5 = y8; + y3 - y7 = th; + y5 - y1 = th; + z6 - z5 = whatever * ne; + z8 - z7 = whatever * ne; + + z5 = z1 + whatever * ne + th * (ne rotated -90); + z8 = z4 + whatever * ne + th * (ne rotated 90); + + unfill z5 + -- z6 + -- z7 + -- z8 + -- cycle; + fi + labels (range 1 thru 10); +enddef; + + +fet_beginchar ("Whole slashhead", "s0slash"); + draw_slash (4 slash_thick# + 0.5 staff_space#); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Half slashhead", "s1slash"); + draw_slash (3.0 slash_thick# + 0.15 staff_space#); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Quarter slashhead", "s2slash"); + draw_slash (1.5 slash_thick#); + + draw_staff (-2, 2, 0); +fet_endchar; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% `thick' is the distance between the NE/SW parallel lines in the cross +% (distance between centres of lines) in multiples of stafflinethickness +% +def draw_cross (expr thick) = + save ne, nw; + save ne_dist, nw_dist, rt_dist, up_dist; + save crz_in, crz_out; + save thickness; + pair ne, nw; + pair ne_dist, nw_dist, rt_dist, up_dist; + path crz_in, crz_out; + + pen_thick# := 1.2 stafflinethickness#; + thickness# := thick * stafflinethickness#; + define_pixels (thickness); + define_blacker_pixels (pen_thick); + + pickup pencircle scaled pen_thick; + + h := h - feta_shift; + + top y3 = h; + ne = unitvector ((1, (2 h - pen_thick) / (w - pen_thick))); + rt x4 = w / 2; + y5 = 0; + z4 - z5 = whatever * ne; + x6 = 0; + z6 - z3 = whatever * ne; + z3 - z4 = whatever * (ne yscaled -1); + + z4 - z3 = whatever * (ne) + (ne rotated -90) * thickness; + + + x1 = charwd / 2 - .5 pen_thick#; + z1 = whatever * ne + + thick / 2 * stafflinethickness# * (ne rotated -90); + + % labels (1, 2, 3, 4, 5, 6); + + nw = unitvector (z3 - z4); + + up_dist = up * 0.5 pen_thick / cosd (angle (ne)); + rt_dist = right * 0.5 pen_thick / sind (angle (ne)); + nw_dist = (ne rotated 90) * 0.5 pen_thick; + ne_dist = (nw rotated -90) * 0.5 pen_thick; + + x4' := x4; + x5' := x5; + y6' := y6; + + x4 := hround (x4' + .5 pen_thick) - .5 pen_thick; + x5 := hfloor (x5' + xpart rt_dist) - xpart rt_dist; + y6 := vfloor (y6' + ypart up_dist) - ypart up_dist; + + crz_out = (z6 + up_dist) + -- (z3 + nw_dist){ne} + .. (top z3) + .. (z3 + ne_dist){-nw} + -- (z4 + ne_dist){-nw} + .. (rt z4) + .. (z4 - nw_dist){-ne} + -- (z5 + rt_dist); + crz_out := crz_out shifted (0, feta_shift) + -- reverse crz_out yscaled -1 shifted (0, -feta_eps); + fill crz_out + -- reverse crz_out xscaled -1 shifted (-feta_eps, 0) + -- cycle; + + if (thick > 1): + x4 := hround (x4' - xpart rt_dist) + xpart rt_dist; + x5 := hceiling (x5' - .5 pen_thick) + .5 pen_thick; + y6 := vfloor (y6' - .5 pen_thick) + .5 pen_thick; + + crz_in = (bot z6){right} + .. (z6 - nw_dist){ne} + -- (z3 - up_dist) + -- (z4 - rt_dist) + -- (z5 + nw_dist){-ne} + .. {down}(lft z5); + crz_in := crz_in shifted (0, feta_shift) + -- reverse crz_in yscaled -1 shifted (0, -feta_eps); + unfill crz_in + -- reverse crz_in xscaled -1 shifted (-feta_eps, 0) + -- cycle; + fi + + % ugh + currentpicture := currentpicture shifted (hround (w / 2), 0); + + charwx := charwd; + charwy := y1 + feta_shift; + + z12 = (charwx * hppp, y1 * vppp); + + labels (12); +enddef; + + +fet_beginchar ("Whole Crossed notehead", "s0cross"); + save wid, hei; + + wid# := black_notehead_width# + 4 stafflinethickness#; + hei# := noteheight# + stafflinethickness#; + + set_char_box (0, wid#, hei# / 2, hei# / 2); + + draw_cross (3.75); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Whole Crossed notehead", "s0cross"); + save wid, hei; + + wid# := black_notehead_width# + 4 stafflinethickness#; + hei# := noteheight# + stafflinethickness#; + + set_char_box (0, wid#, hei# / 2, hei# / 2); + + currentpicture := remember_pic; + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("Half Crossed notehead", "s1cross"); + save wid, hei; + + wid# := black_notehead_width# + 2 stafflinethickness#; + hei# := noteheight# + stafflinethickness# / 2; + + set_char_box (0, wid#, hei# / 2, hei# / 2); + + draw_cross (3.0); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Half Crossed notehead", "s1cross"); + save wid, hei; + + wid# := black_notehead_width# + 2 stafflinethickness#; + hei# := noteheight# + stafflinethickness# / 2; + + set_char_box (0, wid#, hei# / 2, hei# / 2); + + currentpicture := remember_pic; + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("Crossed notehead", "s2cross"); + wid# := black_notehead_width#; + hei# := noteheight#; + set_char_box (0, wid#, hei# / 2, hei# / 2); + + draw_cross (1.0); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("Crossed notehead", "s2cross"); + wid# := black_notehead_width#; + hei# := noteheight#; + set_char_box (0, wid#, hei# / 2, hei# / 2); + + currentpicture := remember_pic; + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +fet_beginchar ("X-Circled notehead", "s2xcircle"); + save wid, hei; + save cthick, cxd, cyd, dy; + + wid# := black_notehead_width# * sqrt (sqrt2); + hei# := noteheight# * sqrt (sqrt2); + + set_char_box (0, wid#, hei# / 2, hei# / 2); + + d := d - feta_space_shift; + + cthick# := (1.2 + 1/4) * stafflinethickness#; + define_blacker_pixels (cthick); + + cxd := w - cthick; + cyd := h + d - cthick / 2; + + dy = .5 (h - d); + + pickup pencircle scaled cthick; + + fill fullcircle xscaled (cxd + cthick) + yscaled (cyd + cthick) + shifted (w / 2, dy); + unfill fullcircle xscaled (cxd - cthick) + yscaled (cyd - cthick) + shifted (w / 2, dy); + + xpos := .5 cxd / sqrt2; + ypos := .5 cyd / sqrt2; + + pickup penrazor scaled cthick rotated (angle (xpos, ypos) + 90); + draw (-xpos + w / 2, -ypos + dy) + -- (xpos + w / 2, ypos + dy); + + pickup penrazor scaled cthick rotated (angle (xpos, -ypos) + 90); + draw (-xpos + w / 2, ypos + dy) + -- (xpos + w / 2, -ypos + dy); + + charwx := charwd; + charwy := 0; + + z12 = (charwx * hppp, charwy * vppp); + labels (12); + + remember_pic := currentpicture; + + draw_staff (-2, 2, 0); +fet_endchar; + + +if test > 0: + fet_beginchar ("X-Circled notehead", "s2xcircle"); + save wid, hei; + save cthick, cxr, cyr; + + wid# := black_notehead_width# * sqrt (sqrt2); + hei# := noteheight# * sqrt (sqrt2); + + set_char_box (0, wid#, hei# / 2, hei# / 2); + + currentpicture := remember_pic; + + draw_staff (-2, 2, 0.5); + fet_endchar; +fi; + + +%%%%%%%% +% +% SOLFA SHAPED NOTES +% +% +% Note: For whole and half notes, the `fill' curve (p_out) is offset from +% the points that specify the outer geometry, because we need to add +% the rounding. In contrast, the inner curve is not offset, because +% there is no rounding. +% +% This means that to get a line of thick_factor * pen_thickness, +% we need to offset the inner curve by +% +% (thick_factor - 0.5) * pen_thickness +% +% or by +% +% (2 * thick_factor - 1) * half_pen_thickness +% +save solfa_pen_thick; +solfa_pen_thick# = 1.3 stafflinethickness#; +define_blacker_pixels (solfa_pen_thick); + +save solfa_pen_radius; +solfa_pen_radius = 0.5 solfa_pen_thick; + +save solfa_base_notewidth; +solfa_base_notewidth# := black_notehead_width#; + +solfa_whole_width := 1.0; +solfa_half_width := 1.0; +solfa_quarter_width := 1.0; + + +%%% Do head +% +% Triangle with base parallel to staff lines. +% + +def draw_do_head (expr width_factor, dir, thickness_factor) = + save p_in, p_out; + save left_dist, right_dist, bottom_dist; + path p_in, p_out; + pair left_dist, right_dist, bottom_dist; + + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + bottom_thick_factor := 2 * thickness_factor - 1; + % no different thickness for left side if we want uniform thickness + if thickness_factor = 1: + left_thick_factor := 1; + else: + left_thick_factor := 0.7 * bottom_thick_factor; + fi + + save pen_radius; + pen_radius := min (solfa_pen_radius, + (h + d) / (3 * (1 + bottom_thick_factor))); + + pickup pencircle scaled (2 * pen_radius); + + bot y1 = -d; + y1 = y2; + lft x1 = 0; + rt x2 = w; + top y3 = h; + x3 = .5 [x1, x2]; + + left_dist = (unitvector (z3 - z1) rotated 90) * pen_radius; + right_dist = (unitvector (z2 - z3) rotated 90) * pen_radius; + bottom_dist = (0,1) * pen_radius; + + save pa, pb, pc; + path pa, pb, pc; + save point_a, point_b, point_c; + pair point_a, point_b, point_c; + + pa := (z1 - left_thick_factor * left_dist) + -- (z3 - left_thick_factor * left_dist); + pb := (z1 + bottom_thick_factor * bottom_dist) + -- (z2 + bottom_thick_factor * bottom_dist); + pc := (z2 - right_dist) + -- (z3 - right_dist); + + point_a := pa intersectionpoint pb; + point_b := pb intersectionpoint pc; + point_c := pc intersectionpoint pa; + + p_in := point_a + -- point_b + -- point_c + -- cycle; + + p_out := bot z1 + -- bot z2{right} + .. rt z2{up} + .. (z2 + right_dist){z3 - z2} + -- (z3 + right_dist){z3 - z2} + .. top z3{left} + .. (z3 + left_dist){z1 - z3} + -- (z1 + left_dist){z1 - z3} + .. lft z1{down} + .. {right}cycle; + + labels (1, 2, 3); + + charwx := charwd; + charwy := -chardp + 0.5 stafflinethickness#; + if dir = -1: + charwy := -charwy; + fi; +enddef; + +save do_weight; +do_weight := 2; + + +fet_beginchar ("Whole dohead", "s0do"); + draw_do_head (solfa_whole_width, 1, do_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half dohead", "d1do"); + draw_do_head (solfa_half_width, -1, do_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half dohead", "u1do"); + draw_do_head (solfa_half_width, 1, do_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter dohead", "d2do"); + draw_do_head (solfa_quarter_width, -1, do_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Quarter dohead", "u2do"); + draw_do_head (solfa_quarter_width, 1, do_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Whole thin dohead", "s0doThin"); + draw_do_head (solfa_whole_width, 1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half thin dohead", "d1doThin"); + draw_do_head (solfa_half_width, -1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half thin dohead", "u1doThin"); + draw_do_head (solfa_half_width, 1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter thin dohead", "d2doThin"); + draw_do_head (solfa_quarter_width, -1, 1); + fill p_out; +fet_endchar; + + +fet_beginchar ("Quarter thin dohead", "u2doThin"); + draw_do_head (solfa_quarter_width, 1, 1); + fill p_out; +fet_endchar; + + +% +% re - flat top, curved bottom: +% +% (0,h/2) {dir -90} +% .. (w/2,-h/2) +% .. {dir 90} (w,h/2) +% -- cycle; +% +% (broader along the base and with more vertical sides for half and +% whole notes) +% +% Note: According to some shape-note singers, there should be no size +% differences for half and whole notes, contrary to the comment above. +% Consequently, we have made them all the same width. +% +% stem attachment: h/2 +% +def draw_re_head (expr width_factor, dir, thickness_factor) = + save p_in, p_out; + path p_in, p_out; + + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + save offset; + offset = (2 * thickness_factor - 1); + + save curve_start; + curve_start = 0.7; + + save pen_radius; + + pen_radius := min (solfa_pen_radius, + (h + d) * (1-curve_start) / (1+ offset)); + + pickup pencircle scaled (2 * pen_radius); + + lft x1 = 0; + top y1 = h; + x2 = x1; + y2 = curve_start [y3, y1]; + bot y3 = -d; + x3 = .5 [x2, x4]; + rt x4 = w; + y4 = y2; + y5 = y1; + x5 = x4; + + labels (range 1 thru 5); + + p_in := (z1 + pen_radius * (1, -1 * offset)) + -- rt z2{down} + .. ((top z3) + (0, offset * pen_radius)) + .. lft z4{up} + -- (z5 + pen_radius * (-1, -1 * offset)) + -- cycle; + + p_out := lft z1 + -- lft z2{down} + .. bot z3 + .. rt z4{up} + -- rt z5{up} + .. top z5{left} + -- top z1{left} + .. {down}cycle; + + charwx := charwd; + charwy := curve_start [-chardp, charht]; + + if dir = -1: + charwy := -charwy; + fi; +enddef; + + +save re_weight; +re_weight := 2; + +fet_beginchar ("Whole rehead", "s0re"); + draw_re_head (solfa_whole_width, 1, re_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half up rehead", "u1re"); + draw_re_head (solfa_half_width, 1, re_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half down rehead", "d1re"); + draw_re_head (solfa_half_width, -1, re_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter up rehead", "u2re"); + draw_re_head (solfa_quarter_width, 1, re_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Quarter down rehead", "d2re"); + draw_re_head (solfa_quarter_width, -1, re_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Whole thin rehead", "s0reThin"); + draw_re_head (solfa_whole_width, 1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half up thin rehead", "u1reThin"); + draw_re_head (solfa_half_width, 1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half down thin rehead", "d1reThin"); + draw_re_head (solfa_half_width, -1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter thin rehead", "u2reThin"); + draw_re_head (solfa_quarter_width, 1, 1); + fill p_out; +fet_endchar; + + +fet_beginchar ("Quarter thin rehead", "d2reThin"); + draw_re_head (solfa_quarter_width, -1, 1); + fill p_out; +fet_endchar; + + +%%%% mi head -- diamond shape +% +% two versions, depending on whether the `strong' lines are on the nw & se +% or the ne & sw +% +def draw_mi_head (expr width_factor, thickness_factor, mirror) = + save path_out, path_in; + save ne_dist, se_dist, ne, se; + save path_a, path_b, path_c, path_d; + path path_out, path_in; + pair ne_dist, se_dist, ne, se; + path path_a, path_b, path_c, path_d; + save inner_path; + path inner_path; + + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + save offset; + offset := 2 * thickness_factor - 1; + + save note_diagonal; + + note_diagonal := w / 2 ++ (h + d) / 2; + + save pen_radius; + + pen_radius := min (solfa_pen_radius, + .3 * note_diagonal / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + lft x1 = 0; + y1 = 0; + bot y2 = -d; + x2 = .5 [x1, x3]; + rt x3 = w; + x4 = x2; + y3 = y1; + top y4 = h; + + % inner sides are parallel to outer sides + z6 - z5 = whatever * (z2 - z1); + z8 - z7 = whatever * (z4 - z3); + z8 - z5 = whatever * (z4 - z1); + z7 - z6 = whatever * (z3 - z2); + + ne = unitvector (z4 - z1); + se = unitvector (z2 - z1); + + ne_dist = (ne rotated 90) * pen_radius; + se_dist = (se rotated 90) * pen_radius; + + path_a := (z1 + se_dist) + -- (z2 + se_dist); + path_b := (z2 + (ne_dist * offset)) + -- (z3 + (ne_dist * offset)); + path_c := (z3 - se_dist) + -- (z4 - se_dist); + path_d := (z4 - (ne_dist * offset)) + -- (z1 - (ne_dist * offset)); + + z5 = path_a intersectionpoint path_d; + z7 = path_b intersectionpoint path_c; + + labels (range 1 thru 8); + + inner_path := z5 + -- z6 + -- z7 + -- z8 + -- cycle; + + if mirror: + path_in := inner_path; + else: + path_in := inner_path reflectedabout (z2, z4); + fi + + path_out := lft z1 {down} + .. (z1 - se_dist){se} + -- (z2 - se_dist){se} + .. bot z2 {right} + .. (z2 - ne_dist){ne} + -- (z3 - ne_dist){ne} + .. rt z3 {up} + .. (z3 + se_dist){-se} + -- (z4 + se_dist){-se} + .. top z4 {left} + .. (z4 + ne_dist){-ne} + -- (z1 + ne_dist){-ne} + .. cycle; +enddef; + + +save mi_weight, mi_width; +mi_weight := 2; +mi_width := 1.2; + +fet_beginchar ("Whole mihead", "s0mi"); + draw_mi_head (mi_width * solfa_whole_width, mi_weight, false); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Half mihead", "s1mi"); + draw_mi_head (mi_width * solfa_quarter_width, mi_weight, false); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Quarter mihead", "s2mi"); + draw_mi_head (mi_width * solfa_quarter_width, mi_weight, false); + fill path_out; +fet_endchar; + + +fet_beginchar ("Whole mirror mihead", "s0miMirror"); + draw_mi_head (mi_width * solfa_whole_width, mi_weight, true); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Half mirror mihead", "s1miMirror"); + draw_mi_head (mi_width * solfa_quarter_width, mi_weight, true); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Quarter mirror mihead", "s2miMirror"); + draw_mi_head (mi_width * solfa_quarter_width, mi_weight, true); + fill path_out; +fet_endchar; + + +fet_beginchar ("Whole thin mihead", "s0miThin"); + draw_mi_head (mi_width * solfa_whole_width, 1, false); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Half thin mihead", "s1miThin"); + draw_mi_head (mi_width * solfa_quarter_width, 1, false); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Quarter thin mihead", "s2miThin"); + draw_mi_head (mi_width * solfa_quarter_width, 1, false); + fill path_out; +fet_endchar; + + +%%%% fa head +% +% Right triangle, hypotenuse from nw to se corner. Stem attaches on +% vertical side in direction of horizontal side. +% +def draw_fa_head (expr width_factor, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + save p_down_in, p_down_out, p_up_in, p_up_out, nw_dist, nw; + path p_down_in, p_down_out, p_up_in, p_up_out; + save path_a, path_b, path_c; + path path_a, path_b, path_c; + pair nw_dist, nw; + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .33 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + lft x1 = 0; + top y1 = h; + + rt x2 = w; + y2 = y1; + bot y3 = -d; + x3 = x2; + + y4 = y3; + x4 = x1; + + labels (1, 2, 3, 4); + + nw = unitvector (z1 - z3); + nw_dist = (nw rotated 90) * pen_radius; + + path_a := (z1 - (0,1) * offset * pen_radius) + -- (z2 - (0,1) * offset * pen_radius); + path_b := (z2 - (1,0) * pen_radius) + -- (z3 - (1,0) * pen_radius); + path_c := (z3 - nw_dist) + -- (z1 - nw_dist); + + p_up_in := (path_a intersectionpoint path_b) + -- (path_b intersectionpoint path_c) + -- (path_c intersectionpoint path_a) + -- cycle; + + p_up_out := lft z1{down} + .. (z1 + nw_dist){-nw} + -- (z3 + nw_dist){-nw} + .. bot z3{right} + .. rt z3{up} + -- rt z2{up} + .. top z2{left} + -- top z1{left} + .. cycle; + + p_down_in := p_up_in rotated 180 shifted (w, 0); + p_down_out := p_up_out rotated 180 shifted (w, 0); + + charwy := 0.0; + charwx := charwd; +enddef; + +save fa_weight; +fa_weight := 1.75; + +fet_beginchar ("Whole fa up head", "u0fa"); + draw_fa_head (solfa_whole_width, fa_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Whole fa down head", "d0fa"); + draw_fa_head (solfa_whole_width, fa_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("half fa up head", "u1fa"); + draw_fa_head (solfa_half_width, fa_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half fa down head", "d1fa"); + draw_fa_head (solfa_half_width, fa_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter fa up head", "u2fa"); + draw_fa_head (solfa_quarter_width, fa_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter fa down head", "d2fa"); + draw_fa_head (solfa_quarter_width, fa_weight); + fill p_down_out; +fet_endchar; + + +fet_beginchar ("Whole thin fa up head", "u0faThin"); + draw_fa_head (solfa_whole_width, 1); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Whole thin fa down head", "d0faThin"); + draw_fa_head (solfa_whole_width, 1); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("half thin fa up head", "u1faThin"); + draw_fa_head (solfa_half_width, 1); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half thin fa down head", "d1faThin"); + draw_fa_head (solfa_half_width, 1); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter thin fa up head", "u2faThin"); + draw_fa_head (solfa_quarter_width, 1); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter thin fa down head", "d2faThin"); + draw_fa_head (solfa_quarter_width, 1); + fill p_down_out; +fet_endchar; + + + +%%%% sol head +% +% Note: sol head is the same shape as a standard music head, and doesn't +% vary from style to style. However, width is constant with duration, +% so we can't just use the standard note font. +% +def draw_sol_head (expr filled) = + draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, 0.66, 0.17); + if not filled: + undraw_inside_ellipse (3.25, 33, 0.81, 2.5 stafflinethickness#); + fi + draw_staff (-2, 2, 0); +enddef; + +fet_beginchar ("Whole solhead", "s0sol"); + draw_sol_head ( false); +fet_endchar; + + +fet_beginchar ("Half solhead", "s1sol"); + draw_sol_head ( false); +fet_endchar; + + +fet_beginchar ("Quarter solhead", "s2sol"); + draw_sol_head ( true); +fet_endchar; + + +%%%% la head +% +% Rectangle head +% +def draw_la_head (expr width_factor, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + save p_in, p_out; + path p_in, p_out; + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .35 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + lft x1 = 0; + top y1 = h; + + rt x2 = w; + y2 = y1; + bot y3 = -d; + x3 = x2; + + y4 = y3; + x4 = x1; + + labels (range 1 thru 4); + + p_in := (z1 + pen_radius * (1, -offset)) + -- (z2 + pen_radius * (-1, -offset)) + -- (z3 + pen_radius * (-1, offset)) + -- (z4 + pen_radius * (1, offset)) + -- cycle; + + p_out := top z1 + -- top z2{right} + .. rt z2{down} + -- rt z3{down} + .. bot z3{left} + -- bot z4{left} + .. lft z4{up} + -- lft z1{up} + .. cycle; +enddef; + + +save la_weight; +la_weight := 2; + +fet_beginchar ("Whole lahead", "s0la"); + draw_la_head (solfa_whole_width, la_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half lahead", "s1la"); + draw_la_head (solfa_half_width, la_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter lahead", "s2la"); + draw_la_head (solfa_quarter_width, la_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Whole thin lahead", "s0laThin"); + draw_la_head (solfa_whole_width, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half thin lahead", "s1laThin"); + draw_la_head (solfa_half_width, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter lahead", "s2laThin"); + draw_la_head (solfa_quarter_width, 1); + fill p_out; +fet_endchar; + + +%%%% ti head +% +% `Snow-cone', V with rounded top. +% +def draw_ti_head (expr width_factor, dir, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + save p_in, p_out, p_top, p_top_in; + path p_in, p_out, p_top, p_top_in; + save cone_height; + cone_height = 0.64; + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .4 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + x1 = .5 [x2, x4]; + bot y1 = -d; + lft x2 = 0; + y2 = cone_height [y1, y3]; + rt x4 = w; + y4 = y2; + x3 = x1; + top y3 = h; + x5 = x1; + y5 = y1 + offset * pen_radius; + + labels (range 1 thru 4); + + save nw_dist, sw_dist, nw, sw; + pair nw_dist, sw_dist, nw, sw; + + nw = unitvector (z2 - z1); + sw = unitvector (z1 - z4); + + nw_dist = (nw rotated 90) * pen_radius; + sw_dist = (sw rotated 90) * pen_radius; + + p_top := (z2 + nw * pen_radius) + .. (top z3){right} + .. (z4 - sw * pen_radius); + + p_top_in := (z2 - nw * offset * pen_radius) + .. (z3 - (0,1) * pen_radius) {right} + .. (z4 + sw * offset * pen_radius); + + save path_a, path_b; + path path_a, path_b; + path_a := z2 + -- z5; + path_b := z5 + -- z4; + + z6 = path_a intersectionpoint p_top_in; + z7 = path_b intersectionpoint p_top_in; + + p_in := z5 + -- z6 + .. bot z3 + .. z7 + -- cycle; + + p_out := bot z1 + .. (z1 + nw_dist) + -- (z2 + nw_dist) + .. lft z2 + .. (z2 + nw * pen_radius){direction 0 of p_top} + & p_top + & {direction infinity of p_top}(z4 - sw * pen_radius) + .. rt z4 + .. (z4 + sw_dist) + -- (z1 + sw_dist) + .. cycle; + + charwx := charwd; + charwy := cone_height [-chardp, charht]; + if dir = -1: + charwy := -charwy; + fi; +enddef; + + +save ti_weight; +ti_weight := 2; + +fet_beginchar ("Whole up tihead", "s0ti"); + draw_ti_head (solfa_whole_width, 1, ti_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half up tihead", "u1ti"); + draw_ti_head (solfa_half_width, 1, ti_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half down tihead", "d1ti"); + draw_ti_head (solfa_half_width, -1, ti_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter up tihead", "u2ti"); + draw_ti_head (solfa_quarter_width, 1, ti_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Quarter down tihead", "d2ti"); + draw_ti_head (solfa_quarter_width, -1, ti_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Whole thin up tihead", "s0tiThin"); + draw_ti_head (solfa_whole_width, 1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half thin up tihead", "u1tiThin"); + draw_ti_head (solfa_half_width, 1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half thin down tihead", "d1tiThin"); + draw_ti_head (solfa_half_width, -1, 1); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter thin up tihead", "u2tiThin"); + draw_ti_head (solfa_quarter_width, 1, 1); + fill p_out; +fet_endchar; + + +fet_beginchar ("Quarter thin down tihead", "d2tiThin"); + draw_ti_head (solfa_quarter_width, -1, 1); + fill p_out; +fet_endchar; + + +%%%%%% Funk shape note heads +% +% Funk heads are narrower than Aiken and Sacred Harp, so we need a new +% width. +% +funk_notehead_width := 0.75; + + +%%%%%% Funk do head +% Parabolic on one side, vertical line on other +% Has up and down shapes for *all* notes +% +def draw_Funk_do_head (expr width_factor, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .3 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + rt x1 = w; + bot y1 = -d; + + lft x2 = 0; + y2 = 0.5 [y1, y3]; + + x3 = x1; + top y3 = h; + + x4 = x1 - pen_radius; + y4 = y1 + offset * pen_radius; + + y5 = y2; + x5 = x2 + pen_radius; + + x6 = x4; + y6 = y3 - offset * pen_radius; + + save p_up_in, p_up_out, p_down_in, p_down_out; + path p_up_in, p_up_out, p_down_in, p_down_out; + + p_down_in := z4{left} + ... z5{up} + ... z6{right} + -- cycle; + + p_down_out := bot z1{left} + .. lft z2{up} + .. top z3{right} + .. rt z3{down} + -- rt z1{down} + .. cycle; + + p_up_in := p_down_in rotated 180 shifted (w,0); + p_up_out := p_down_out rotated 180 shifted (w,0); + +enddef; + + +save funk_do_weight; +funk_do_weight := 1.7; + +fet_beginchar ("Whole up Funk dohead", "u0doFunk"); + draw_Funk_do_head (funk_notehead_width, funk_do_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Whole down Funk dohead", "d0doFunk"); + draw_Funk_do_head (funk_notehead_width, funk_do_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Half up Funk dohead", "u1doFunk"); + draw_Funk_do_head (funk_notehead_width, funk_do_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half down Funk dohead", "d1doFunk"); + draw_Funk_do_head (funk_notehead_width, funk_do_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter up Funk dohead", "u2doFunk"); + draw_Funk_do_head (funk_notehead_width, funk_do_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter down Funk dohead", "d2doFunk"); + draw_Funk_do_head (funk_notehead_width, funk_do_weight); + fill p_down_out; +fet_endchar; + + +%%%%%% Funk re head +% Arrowhead shape. +% Has up and down shapes for *all* notes +% +def draw_Funk_re_head (expr width_factor, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .3 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + save curve_in; + curve_in := 0.9; + + lft x1 = 0; + y1 := 0.5 [y2, y4]; + + rt x2 = w; + top y2 = h; + + x3 := curve_in [x1, x2]; + y3 := y1; + + x4 = x2; + bot y4 = -d; + + z6 = lft z3; + + save ne, se, ne_perp, se_perp; + pair ne, se, ne_perp, se_perp; + + ne := unitvector (z2 - z1); + se := unitvector (z4 - z1); + ne_perp := ne rotated 90; + se_perp := se rotated 90; + + save path_a, path_b, path_c, path_d; + path path_a, path_b, path_c, path_d; + save arrow_a_perp, arrow_b_perp; + pair arrow_a_perp, arrow_b_perp; + + + path_d := z2 .. z3{down} .. z4; + arrow_a_perp = unitvector (direction 0 of path_d rotated 90) + * pen_radius; + arrow_b_perp = unitvector (direction 2 of path_d rotated 90) + * pen_radius; + + path_b := (z1 + se_perp * pen_radius) + -- z4 + se_perp * offset * pen_radius; + path_a := (z1 - ne_perp * pen_radius) + -- z2 - ne_perp * offset * pen_radius; + path_c := z2 - arrow_a_perp + .. z6{down} + .. z4 - arrow_b_perp; + + z5 = path_a intersectionpoint path_b; + z7 = path_a intersectionpoint path_c; + z8 = path_b intersectionpoint path_c; + + save p_up_in, p_down_in, p_up_out, p_down_out; + path p_up_in, p_down_in, p_up_out, p_down_out; + + p_down_in := z5 + -- z7 + .. z6{down} + .. z8 + -- cycle; + + p_down_out := lft z1{up} + .. (z1 + ne_perp * pen_radius){ne} + -- (z2 + ne_perp * pen_radius){ne} + .. top z2 {right} + .. rt z2{down} + .. (z2 + arrow_a_perp) + .. rt z3{down} + .. (z4 + arrow_b_perp) + .. rt z4{down} + .. bot z4 {left} + .. z4 - se_perp * pen_radius + -- z1 - se_perp * pen_radius + .. cycle; + + p_up_in := p_down_in rotated 180 shifted (w, 0); + p_up_out := p_down_out rotated 180 shifted (w, 0); + +enddef; + + +save funk_re_weight; +funk_re_weight = 1.7; + +fet_beginchar ("Whole up Funk rehead", "u0reFunk"); + draw_Funk_re_head (funk_notehead_width, funk_re_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Whole down Funk rehead", "d0reFunk"); + draw_Funk_re_head (funk_notehead_width, funk_re_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Half up Funk rehead", "u1reFunk"); + draw_Funk_re_head (funk_notehead_width, funk_re_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half down Funk rehead", "d1reFunk"); + draw_Funk_re_head (funk_notehead_width, funk_re_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter up Funk rehead", "u2reFunk"); + draw_Funk_re_head (funk_notehead_width, funk_re_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter down Funk rehead", "d2reFunk"); + draw_Funk_re_head (funk_notehead_width, funk_re_weight); + fill p_down_out; +fet_endchar; + + +%%%%%% Funk mi head +% Diamond shape +% Has up and down shapes for all hollow notes +% +save funk_mi_width, funk_mi_weight; +funk_mi_width := 1.2; +funk_mi_weight := 1.9; + +fet_beginchar ("Whole up Funk mihead", "u0miFunk"); + draw_mi_head (funk_mi_width * funk_notehead_width, + funk_mi_weight, false); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Whole down Funk mihead", "d0miFunk"); + draw_mi_head (funk_mi_width * funk_notehead_width, + funk_mi_weight, true); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Half up Funk mihead", "u1miFunk"); + draw_mi_head (funk_mi_width * funk_notehead_width, + funk_mi_weight, false); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Half down Funk mihead", "d1miFunk"); + draw_mi_head (funk_mi_width * funk_notehead_width, + funk_mi_weight, true); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Quarter Funk mihead", "s2miFunk"); + draw_mi_head (funk_mi_width * funk_notehead_width, + funk_mi_weight, false); + fill path_out; +fet_endchar; + + +%%%%%% Funk fa +% Triangle shape +% Does it rotate for whole notes? +% Same as other shape note systems +% Need special notes because of special width +% +save funk_fa_weight; +funk_fa_weight := 1.9; + +fet_beginchar ("Whole up Funk fahead", "u0faFunk"); + draw_fa_head (funk_notehead_width, funk_fa_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Whole down Funk fahead", "d0faFunk"); + draw_fa_head (funk_notehead_width, funk_fa_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Half up Funk fahead", "u1faFunk"); + draw_fa_head (funk_notehead_width, funk_fa_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half down Funk fahead", "d1faFunk"); + draw_fa_head (funk_notehead_width, funk_fa_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter up Funk fahead", "u2faFunk"); + draw_fa_head (funk_notehead_width, funk_fa_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter down Funk fahead", "d2faFunk"); + draw_fa_head (funk_notehead_width, funk_fa_weight); + fill p_down_out; +fet_endchar; + + +%%%%%% Funk sol head is the same as the others +% Need special character because of skinnier head +% +def draw_Funk_sol_head (expr filled) = +begingroup + save noteheight; + noteheight# := solfa_noteheight#; + draw_outside_ellipse (1.2, 34, 0.71, 0.); + if not filled: + undraw_inside_ellipse (1.9, 33, 0.74, 5.5 stafflinethickness#); + fi + draw_staff (-2, 2, 0); +endgroup +enddef; + + +fet_beginchar ("Whole Funk solhead", "s0solFunk"); + draw_Funk_sol_head ( false); +fet_endchar; + + +fet_beginchar ("Half Funk solhead", "s1solFunk"); + draw_Funk_sol_head ( false); +fet_endchar; + + +fet_beginchar ("Quarter Funk solhead", "s2solFunk"); + draw_Funk_sol_head ( true); +fet_endchar; + + +%%%%%% Funk la head +% Rectangle head +% Same as for other shape notes +% Smaller width requires special characters +% +save funk_la_weight; +funk_la_weight := 1.9; + +fet_beginchar ("Whole Funk lahead", "s0laFunk"); + draw_la_head (funk_notehead_width, funk_notehead_width); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half Funk lahead", "s1laFunk"); + draw_la_head (funk_notehead_width, funk_notehead_width); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter Funk lahead", "s2laFunk"); + draw_la_head (funk_notehead_width, funk_notehead_width); + fill p_out; +fet_endchar; + + +%%%%%% Funk ti head +% `Sideways snow cone'. +% Rotates for all notes. +% +def draw_Funk_ti_head (expr width_factor, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + save cone_width; + cone_width = 0.8; + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .33 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + lft x1 = 0; + y1 = .5 [y2, y4]; + + x2 = cone_width [x1, x3]; + top y2 = h; + + rt x3 = w; + y3 = y1; + + x4 = x2; + bot y4 = -d; + + save nw_dist, sw_dist, ne, se; + pair nw_dist, sw_dist, ne, se; + + ne = unitvector (z2 - z1); + se = unitvector (z4 - z1); + + nw_dist = (ne rotated 90) * pen_radius ; + sw_dist = (se rotated -90) * pen_radius; + + save path_a, path_b; + path path_a, path_b; + path_a := z1 - nw_dist + -- z2 - offset * nw_dist; + path_b := z1 - sw_dist + -- z4 - offset * sw_dist; + + save path_right, path_right_in; + path path_right, path_right_in; + path_right := (z2 + ne * pen_radius) + .. (rt z3){down} + .. (z4 + se * pen_radius); + + path_right_in := (z2 - ne * pen_radius) + .. lft z3{down} + .. (z4 - se * pen_radius); + + z5 = path_a intersectionpoint path_b; + z6 = path_a intersectionpoint path_right_in; + z7 = path_b intersectionpoint path_right_in; + + save p_up_in, p_down_in, p_up_out, p_down_out; + path p_up_in, p_down_in, p_up_out, p_down_out; + + p_down_in := z5 + -- z6 + .. lft z3 + .. z7 + -- cycle; + + p_down_out := lft z1 + .. (z1 + nw_dist) + -- (z2 + nw_dist) + .. top z2 + .. (z2 + ne * pen_radius){direction 0 of path_right} + & path_right + & {direction infinity of path_right}(z4 + se * pen_radius) + .. bot z4 + .. (z4 + sw_dist) + -- (z1 + sw_dist) + .. cycle; + + p_up_in := p_down_in rotated 180 shifted (w, 0); + p_up_out := p_down_out rotated 180 shifted (w, 0); +enddef; + + +save funk_ti_weight; +funk_ti_weight := 1.6; + +fet_beginchar ("Whole up Funk tihead", "u0tiFunk"); + draw_Funk_ti_head (funk_notehead_width, funk_ti_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Whole down Funk tihead", "d0tiFunk"); + draw_Funk_ti_head (funk_notehead_width, funk_ti_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Half up Funk tihead", "u1tiFunk"); + draw_Funk_ti_head (funk_notehead_width, funk_ti_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half down Funk tihead", "d1tiFunk"); + draw_Funk_ti_head (funk_notehead_width, funk_ti_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter up Funk tihead", "u2tiFunk"); + draw_Funk_ti_head (funk_notehead_width, funk_ti_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter down Funk tihead", "d2tiFunk"); + draw_Funk_ti_head (funk_notehead_width, funk_ti_weight); + fill p_down_out; +fet_endchar; + + +%%%%%% Walker shape note heads +% +% Walker heads are narrow like Funk heads, so use funk_notehead_width. +% + +%%%%%% Walker do head +% +% Trapezoid, with largest side on stem side +% +def draw_Walker_do_head (expr width_factor, dir, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + pickup pencircle scaled solfa_pen_thick; + + save offset; + offset := 2 * thickness_factor - 1; + + % adjust width so stem can be centered + if .5w <> good.x .5w: change_width; fi + + save scaling; + + scaling# = charwd / w; + + save inset; + inset := 0.25; + + x1 = inset [x4, x3]; + top y1 = h; + + x2 = inset [x3, x4]; + y2 = y1; + + bot y3 = -d; + rt x3 = w; + + y4 = y3; + lft x4 = 0; + + labels (range 1 thru 4); + + save left_dir, left_perp, right_dir, right_perp; + pair left_dir, left_perp, right_dir, right_perp; + + left_dir = unitvector(z1 - z4); + left_perp = (left_dir rotated 90) * solfa_pen_radius; + right_dir = unitvector(z3 - z2); + right_perp = (right_dir rotated 90) * solfa_pen_radius; + + save path_a, path_b, path_c, path_d; + path path_a, path_b, path_c, path_d; + + path_a := (z4 - left_perp) + -- (z1 - left_perp); + path_b := (z1 - (0, offset*solfa_pen_radius)) + -- (z2 - (0, offset*solfa_pen_radius)); + path_c := (z2 - right_perp) + -- (z3 - right_perp); + path_d := (z3 + (0, offset*solfa_pen_radius)) + -- (z4 + (0, offset*solfa_pen_radius)); + + save p_in, p_out; + path p_in, p_out; + + p_in := (path_a intersectionpoint path_b) + -- (path_b intersectionpoint path_c) + -- (path_c intersectionpoint path_d) + -- (path_d intersectionpoint path_a) + -- cycle; + + p_out := top z1{right} + -- top z2{right} + .. z2 + right_perp {right_dir} + -- z3 + right_perp {right_dir} + .. bot z3{left} + -- bot z4{left} + .. z4 + left_perp {left_dir} + .. z1 + left_perp {left_dir} + .. cycle; + + charwx := scaling# * (w/2 + solfa_pen_radius); + charwy := scaling# * y2 ; + + if dir = 1: + p_in := p_in rotated 180 shifted (w,0); + p_out := p_out rotated 180 shifted (w,0); + fi; +enddef; + + +save walker_do_weight; +walker_do_weight := 1.5; + +fet_beginchar ("Whole Walker dohead", "s0doWalker"); + draw_Walker_do_head (funk_notehead_width, 0, walker_do_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half up Walker dohead", "u1doWalker"); + draw_Walker_do_head (funk_notehead_width, 1, walker_do_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half down Walker dohead", "d1doWalker"); + draw_Walker_do_head (funk_notehead_width, 0, walker_do_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter up Walker dohead", "u2doWalker"); + draw_Walker_do_head (funk_notehead_width, 1, walker_do_weight); + fill p_out; +fet_endchar; + + +fet_beginchar ("Quarter down Walker dohead", "d2doWalker"); + draw_Walker_do_head (funk_notehead_width, 0, walker_do_weight); + fill p_out; +fet_endchar; + + +%%%%%% Walker re head +% Parabolic on one side, shallow parabola on other +% Has up and down shapes for *all* notes +% +def draw_Walker_re_head (expr width_factor, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .3 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + save dish_factor; + dish_factor := 0.20; + + rt x1 = w; + bot y1 = -d; + + lft x2 = 0; + y2 = 0.5 [y1, y3]; + + top y3 = h; + x3 = x1; + + x4 = dish_factor [x1, x2]; + y4 = y2; + + x5 = x1; + y5 = y1 + offset * pen_radius; + + y6 = y2; + x6 = x2 + pen_radius; + + x7 = x3; + y7 = y3 - offset * pen_radius; + + y8 = y4; + x8 = x4 - pen_radius; + + save path_a, path_d; + path path_a, path_d; + + save p_a_start_dir, p_a_end_dir, p_a_start_perp, p_a_end_perp; + pair p_a_start_dir, p_a_end_dir, p_a_start_perp, p_a_end_perp; + + path_a := z3 .. z4{down} .. z1; + + p_a_start_dir := unitvector(direction 0 of path_a); + p_a_end_dir := unitvector(direction infinity of path_a); + p_a_start_perp := (p_a_start_dir rotated 90) * pen_radius; + p_a_end_perp := (p_a_end_dir rotated 90) * pen_radius; + + path_d := (z3 - p_a_start_perp){p_a_start_dir} + .. z4 {down} + ..(z1 - p_a_end_perp){p_a_end_dir}; + + save path_b, path_c; + path path_b, path_c; + + path_b := z5 {left} .. z6{up}; + path_c := z7 {left} .. z6{down}; + + z9 = path_d intersectionpoint path_b; + z10 = path_d intersectionpoint path_c; + + labels (range 1 thru 4); + + save p_up_in, p_up_out, p_down_in, p_down_out; + path p_up_in, p_up_out, p_down_in, p_down_out; + + p_down_in := z6{up} + ... {right} z10 {p_a_start_dir} + .. z8{down} + .. {p_a_end_dir} z9 {left} + ... cycle; + + p_down_out := lft z2{up} + .. top z3{right} + .. rt z3 + .. (z3 + p_a_start_perp){p_a_start_dir} + .. rt z4{down} + .. (z1 + p_a_end_perp) {p_a_end_dir} + .. rt z1 + .. bot z1 {left} + .. cycle; + + p_up_in := p_down_in rotated 180 shifted (w,0); + p_up_out := p_down_out rotated 180 shifted (w,0); +enddef; + + +save walker_re_weight; +walker_re_weight := 1.2; + +fet_beginchar ("Whole Walker rehead", "s0reWalker"); + draw_Walker_re_head (funk_notehead_width, walker_re_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Half up Walker rehead", "u1reWalker"); + draw_Walker_re_head (funk_notehead_width, walker_re_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half down Walker rehead", "d1reWalker"); + draw_Walker_re_head (funk_notehead_width, walker_re_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter up Walker rehead", "u2reWalker"); + draw_Walker_re_head (funk_notehead_width, walker_re_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter down Walker rehead", "d2reWalker"); + draw_Walker_re_head (funk_notehead_width, walker_re_weight); + fill p_down_out; +fet_endchar; + + +%%%%%% Walker mi head +% Diamond shape +% Symmetric for all hollow notes +% +save walker_mi_width, walker_mi_weight; +walker_mi_width := 1.2; +walker_mi_weight := 1.5; + +fet_beginchar ("Whole Walker mihead", "s0miWalker"); + draw_mi_head (walker_mi_width * funk_notehead_width, + walker_mi_weight, true); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Half Walker mihead", "s1miWalker"); + draw_mi_head (walker_mi_width * funk_notehead_width, + walker_mi_weight, true); + fill path_out; + unfill path_in; +fet_endchar; + + +fet_beginchar ("Quarter Walker mihead", "s2miWalker"); + draw_mi_head (walker_mi_width * funk_notehead_width, + walker_mi_weight, true); + fill path_out; +fet_endchar; + + +%%%%%% Walker fa +% Triangle shape +% Does not rotate for whole notes +% Whole rotation is different from Funk, so special notes + +%%%%%% Funk sol head is the same as the others +% Need special character because of skinnier head +% +save walker_fa_weight; +walker_fa_weight := 1.5; + +fet_beginchar ("Whole Walker fahead", "s0faWalker"); + draw_fa_head (funk_notehead_width, walker_fa_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Half up Walker fahead", "u1faWalker"); + draw_fa_head (funk_notehead_width, walker_fa_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half down Walker fahead", "d1faWalker"); + draw_fa_head (funk_notehead_width, walker_fa_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter up Walker fahead", "u2faWalker"); + draw_fa_head (funk_notehead_width, walker_fa_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter down Walker fahead", "d2faWalker"); + draw_fa_head (funk_notehead_width, walker_fa_weight); + fill p_down_out; +fet_endchar; + + +%%%%%% Walker sol +% Same as Funk, no special notes +% + +%%%%%% Walker la head +% Rectcangle head +% Lighter weight requires separate notes +% +save walker_la_weight; +walker_la_weight := 1.5; + +fet_beginchar ("Whole Walker lahead", "s0laWalker"); + draw_la_head (funk_notehead_width, walker_la_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Half Funk lahead", "s1laWalker"); + draw_la_head (funk_notehead_width, walker_la_weight); + fill p_out; + unfill p_in; +fet_endchar; + + +fet_beginchar ("Quarter Funk lahead", "s2laWalker"); + draw_la_head (funk_notehead_width, walker_la_weight); + fill p_out; +fet_endchar; + + +%%%%%% Walker ti head +% Triangular arrowhead +% Rotates for all but whole notes +% +def draw_Walker_ti_head (expr width_factor, thickness_factor) = + set_char_box (0, width_factor * solfa_base_notewidth#, + 0.5 solfa_noteheight#, 0.5 solfa_noteheight#); + + save offset; + offset := 2 * thickness_factor - 1; + + save pen_radius; + pen_radius := min (solfa_pen_radius, + .3 * (h + d) / (1 + offset)); + + pickup pencircle scaled (2 * pen_radius); + + lft x1 = 0; + y1 = .5 [y2, y3]; + + rt x2 = w; + top y2 = h; + + x3 = x2; + bot y3 = -d; + + + labels (range 1 thru 4); + + save nw_dist, sw_dist, ne, se; + pair nw_dist, sw_dist, ne, se; + + ne = unitvector (z2 - z1); + se = unitvector (z3 - z1); + + nw_dist = (ne rotated 90) * pen_radius ; + sw_dist = (se rotated -90) * pen_radius; + + + save path_a, path_b, path_c; + path path_a, path_b, path_c; + path_a := z2 - nw_dist * offset + -- z1 - nw_dist * offset; + path_b := z3 - sw_dist * offset + -- z1 - sw_dist * offset; + path_c := z2 + left * pen_radius + -- z3 + left * pen_radius; + + z4 = path_a intersectionpoint path_b; + z5 = path_a intersectionpoint path_c; + z6 = path_b intersectionpoint path_c; + + save p_up_in, p_down_in, p_up_out, p_down_out; + path p_up_in, p_down_in, p_up_out, p_down_out; + + p_down_in := z4 + -- z5 + -- z6 + -- cycle; + + p_down_out := lft z1{up} + .. (z1 + nw_dist){ne} + -- (z2 + nw_dist){ne} + .. top z2{right} + .. rt z2 {down} + -- rt z3 {down} + .. bot z3 {left} + .. (z3 + sw_dist){- se} + .. (z1 + sw_dist){- se} + .. cycle; + + p_up_in := p_down_in rotated 180 shifted (w, 0); + p_up_out := p_down_out rotated 180 shifted (w, 0); +enddef; + + +save walker_ti_weight; +walker_ti_weight := 1.4; + +fet_beginchar ("Whole Walker tihead", "s0tiWalker"); + draw_Walker_ti_head (funk_notehead_width, walker_ti_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Half up Walker tihead", "u1tiWalker"); + draw_Walker_ti_head (funk_notehead_width, walker_ti_weight); + fill p_up_out; + unfill p_up_in; +fet_endchar; + + +fet_beginchar ("Half down Walker tihead", "d1tiWalker"); + draw_Walker_ti_head (funk_notehead_width, walker_ti_weight); + fill p_down_out; + unfill p_down_in; +fet_endchar; + + +fet_beginchar ("Quarter up Walker tihead", "u2tiWalker"); + draw_Walker_ti_head (funk_notehead_width, walker_ti_weight); + fill p_up_out; +fet_endchar; + + +fet_beginchar ("Quarter down Walker tihead", "d2tiWalker"); + draw_Walker_ti_head (funk_notehead_width, walker_ti_weight); + fill p_down_out; +fet_endchar; + +fet_endgroup ("noteheads"); + + +% +% we derive black_notehead_width# from the quarter head, +% so we have to define black_notehead_width (pixel qty) +% after the black_notehead_width# itself. +% +% Let's keep it outside the group as well. +% + +define_pixels (black_notehead_width); diff --git a/mf/feta-noteheads11.mf b/mf/feta-noteheads11.mf new file mode 100644 index 0000000000..b02844a196 --- /dev/null +++ b/mf/feta-noteheads11.mf @@ -0,0 +1,13 @@ +% feta-noteheads11.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 11.22; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-noteheads13.mf b/mf/feta-noteheads13.mf new file mode 100644 index 0000000000..e010769f4b --- /dev/null +++ b/mf/feta-noteheads13.mf @@ -0,0 +1,13 @@ +% feta-noteheads13.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 12.60; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-noteheads14.mf b/mf/feta-noteheads14.mf new file mode 100644 index 0000000000..7d25cb2a60 --- /dev/null +++ b/mf/feta-noteheads14.mf @@ -0,0 +1,13 @@ +% feta-noteheads14.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 14.14; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-noteheads16.mf b/mf/feta-noteheads16.mf new file mode 100644 index 0000000000..755f9ffdd5 --- /dev/null +++ b/mf/feta-noteheads16.mf @@ -0,0 +1,13 @@ +% feta-noteheads16.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 15.87; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-noteheads18.mf b/mf/feta-noteheads18.mf new file mode 100644 index 0000000000..bdc6918bf3 --- /dev/null +++ b/mf/feta-noteheads18.mf @@ -0,0 +1,13 @@ +% feta-noteheads18.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 17.82; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-noteheads20.mf b/mf/feta-noteheads20.mf new file mode 100644 index 0000000000..072f99207c --- /dev/null +++ b/mf/feta-noteheads20.mf @@ -0,0 +1,13 @@ +% feta-noteheads20.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 20; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-noteheads23.mf b/mf/feta-noteheads23.mf new file mode 100644 index 0000000000..ab0154832e --- /dev/null +++ b/mf/feta-noteheads23.mf @@ -0,0 +1,13 @@ +% feta-noteheads23.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 22.45; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-noteheads26.mf b/mf/feta-noteheads26.mf new file mode 100644 index 0000000000..b25d21495c --- /dev/null +++ b/mf/feta-noteheads26.mf @@ -0,0 +1,13 @@ +% feta-noteheads26.mf +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; + +design_size := 25.20; +test := 0; + + +input feta-noteheads-generic; + +end. + diff --git a/mf/feta-numbers.mf b/mf/feta-numbers.mf new file mode 100644 index 0000000000..40bf0e598c --- /dev/null +++ b/mf/feta-numbers.mf @@ -0,0 +1,909 @@ +% Feta (not the Font-En-Tja) music font -- bold Orator numerals +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Jan Nieuwenhuizen +% +% 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 . + + +height# := number_design_size; +space# := number_design_size / 2; + +font_x_height height#; +font_normal_space space#; + + +% +% DOCME! +% +% ugh. b and h are reused. +% + +save b, h; +4 h + b = 1.15; +10 h + b = 1; +fatten := number_design_size * h + b; + +save b, h; +4 h + b = 1.05; +10 h + b = 1; +widen := number_design_size * h + b; + +tense = 0.85; +thick# := 7/30 height# * fatten; +thin# := thick# / 4 * fatten + max (.1 (height# / 10 - 1), 0); + +%% sqrt (.8 * blot_diameter# * thin#); +hair# := thin# * .8; + +flare# := 9/8 thick# + .75 (height# / 10 - 1); + +save b, h; +4h + b = 1/8; +10h + b = 1/6; +kuulleke# := thick# * number_design_size * h + b; +foot_top# := thick#; +foot_width# := 9/4 thick#; + + +% +% These numbers were taken from a part that the EJE violas played in +% 1997 -- Probably Mendelssohn's ouverture `Heimkehr aus der Fremde'. +% + + +% +% TODO all the invocation of flare_path are weird -- +% the horizontal tangents should be more at the center of the +% glyph. +% + +define_pixels (height, thick, thick, thin, hair, flare); +define_pixels (foot_top, foot_width); +define_pixels (kuulleke); + + +% +% Yet Another Bulb Routine with smooth inside curve. +% +% alpha = start direction. +% beta = which side to turn to +% flare = diameter of the bulb +% line = diameter of line attachment +% direction = is ink on left or right side (1 or -1) +% +% +% move_away_to = amount left (for 2) +% turn_to = amount down (for 2) +% + +def number_flare_path (expr pos, alpha, beta, line, flare, + move_away_to, turn_to, taille, taille_ratio, + direction) = +begingroup; + save res; + path res; + + clearxy; + +% z5 = z2 + 0.43 * flare * dir (alpha - 1.5 beta); + + z4 = (0.75 - taille) [z2r, z2l] + whatever * dir (alpha - beta); + z4 = (taille_ratio * taille) [z3l, z3r] + whatever * dir (alpha); + + z1r = pos; + z2r = z1r + move_away_to * dir (alpha) + + (line + turn_to) * dir (alpha + beta); + z3r = 0.5 [z2l, z2r] + 0.5 * flare * dir (alpha + beta); + + penpos1 (line, 180 + beta + alpha); + penpos2 (flare, alpha); + penpos3 (flare, alpha + beta); + + penlabels (1, 2, 3, 4, 5); + + res := z1r{dir (alpha)} + .. z2r{dir (180 + alpha - beta)} + .. z3r{dir (alpha + 180)} + .. z2l{dir (alpha - beta)} + +%%% Two versions of the curve: one with z4, the other with z5. +% .. z5{dir (alpha - beta / 2)} + + .. z4{dir (180 + alpha + beta)} + .. z1l{dir (alpha + 180)}; + +% pickup pencircle; +% draw res; + + if direction <> 1: + res := reverse res; + fi; + +res +endgroup +enddef; + + +def calc_kuulleke (expr w, alpha) = +begingroup; + save beta, gamma; + + beta = (alpha - 90) / 2; + gamma = (90 + alpha) / 2; + + penpos1 (w / cosd (alpha), alpha); + penpos2 (hair, 90 + beta); + penpos3 (hair, gamma - 90); + + z2 = z1l + (1/2 hair / tand ((alpha + 90) / 2)) * dir (beta); + z3 = z1r - (1/2 hair / tand ((90 - alpha) / 2)) * dir (gamma); + z4 = z1 + kuulleke * dir (alpha - 90); +endgroup; +enddef; + + +% should make generic macro? +% +def draw_foot (expr xpos) = +begingroup; + clearxy; + + penpos1 (thick, 0); + penpos2 (foot_width, 0); + penpos3 (hair, -90); + penpos4 (hair, 90); + + z1= (xpos, foot_top); + z2= (x1, 0); + z3r = z2r; + z4l = z2l; + z5 = (x1, kuulleke); + + penlabels (1, 2, 3, 4); + + fill z1 + .. {right}z1r{down} + .. {right}z3l + .. z3r{left} + .. z5 + .. {left}z4l + .. z4r{right} + .. {up}z1l{right} + .. z1 + .. cycle; +endgroup; +enddef; + + +def draw_six = + save outer_t, t; + save before, after, u, v; + path before, after; + + set_char_box (0, .68 height# * widen, 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + penpos2 (hair, 90); + z2 = (w / 2, h / 2 + thin - hair / 2); + + penpos3 (15/16 thick, 0); + x3r = w; + y3r = .5 [y4r, y2r]; + + penpos4 (hair, -90); + z4r = (x2, 0); + + penpos6 (hair, 90); + x6r = .56 w; + y6r = h; + + penpos7 (thick, 180); + x7r = 0; + y7r = .50 h; + + penpos10 (thick, 180); + z10r = (0, y3); + + penlabels (range 1 thru 10); + + outer_t = 0.88; + t := tense; + + before := z7{right} + .. z2r{right}; + after := z7r{up} + .. number_flare_path (z6r, 0, -90, hair, flare, + w - x6r - hair / 2, .16 h, + 0.05, 2.5, 1) + .. z7l{down}; + (u, v) = before intersectiontimes after; + +% draw + fill subpath (u, infinity) of before + ..tension outer_t.. z3r{down} + ..tension outer_t.. z4r{left} + .. subpath (0, v) of after + .. cycle; + + unfill z2l{right} + ..tension t.. z3l{down} + ..tension t.. z4l{left} + ..tension t.. z10l{up} + ..tension t.. cycle; +enddef; + + +save dot_diam; +dot_diam# = 7/8 flare#; +define_pixels (dot_diam); + + +code := 42; % , 43 + +fet_beginchar ("Plus", "plus"); + set_char_box (0, .5 height#, -0.25 height#, 0.75 height#); + + save hthick, vthick, size, outer_hsize, outer_vsize; + + hthick# = vthick# = 2 linethickness#; + size# = 1.1 staff_space#; + define_whole_blacker_pixels (vthick); + define_whole_vertical_blacker_pixels (hthick); + + outer_hsize = hround ((b + w - vthick) / 2); + outer_vsize = vround ((h + d - hthick) / 2); + + centerx := hround (w / 2); + centery := vround ((h - d) / 2); + + z1 = (centerx - hthick / 2, -d); + z2 = (centerx + hthick / 2, h); + + labels (1, 2); + + draw_rounded_block (z1, z2, hthick); + draw_rounded_block ((0, centery - vthick / 2), + (w, (centery + vthick / 2)), + vthick); +fet_endchar; + + +code := 43; % , = 44 + +fet_beginchar ("Numeral comma", "comma"); + save pat, pos; + path pat; + + set_char_box (0, dot_diam#, 3/2 dot_diam#, dot_diam#); + + pat := (dot_diam / 2, 0) + .. (dot_diam, dot_diam / 2) + .. (dot_diam / 2, dot_diam) + .. (0, dot_diam / 2) + .. cycle; + + pos = ypart (((w / 3, 0) -- (w / 3, dot_diam / 2)) + intersectiontimes pat); + z0 = point pos of pat; + + alpha = 65; + penpos1 (thin, alpha + 90); + + z1l = (w / 2, -1.5 h + hair); + z2 = (w, h / 2); + + pickup feta_fillpen; + + % include z0 to assist removal of overlaps + fill subpath (0,3) of pat + .. z0 + .. cycle; + filldraw z1l{dir (alpha)} + .. {up}z2 + -- z0{direction pos of pat} + ..tension 0.95.. {dir (180 + alpha)}z1r + .. cycle; + + labels (0, 2); + penlabels (1); +fet_endchar; + + +fet_beginchar ("Numeral dash", "hyphen"); + set_char_box (0, height# / 3, 0, height#); + + draw_rounded_block ((-b, h / 3 - thin / 2), + (w, h / 3 + thin / 2), thin); +fet_endchar; + + +fet_beginchar ("Numeral dot", "period"); + set_char_box (0, dot_diam#, 0, dot_diam#); + + pickup pencircle scaled dot_diam; + + drawdot (dot_diam / 2, dot_diam / 2); +fet_endchar; + + +% skip slash + +code := 47; % 0 = 48 + +fet_beginchar ("Numeral 0", "zero"); + set_char_box (0, 11/15 height# * widen, 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + penpos1 (thin, 90); + penpos2 (thick, 180); + penpos3 (thin,- 90); + penpos4 (thick, 0); + + z1r = (w / 2, h); + z2r = (0, h / 2); + z3r = (w / 2, 0); + z4r = (w, h / 2); + + fill z1r + .. z2r + .. z3r + .. z4r + .. cycle; + + save t; + t = 1 / tense; + + penlabels (1, 2, 3, 4); + + unfill z1l + ..tension t.. z2l + ..tension t.. z3l + ..tension t.. z4l + ..tension t.. cycle; +fet_endchar; + + +fet_beginchar ("Numeral 1", "one"); + save alpha, beta, gamma; + +% set_char_box (0, 19/30 height# * widen, 0, height#); + set_char_box (0, 1/2 foot_width# + 3/2 thick# + 1/2 hair#, + 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + alpha = 0; + calc_kuulleke (thick, alpha); + z1 = (3/2 thick, height); + + penpos5 (thick, 0); + z5 = (x1, foot_top); + + z6 = (0, h / 2); + beta = angle (z1l - z6); + + penpos7 (thin, beta - 90); + z7l = z6; + + penpos8 (thin / cosd (beta), -90); + z8l = z1l; + + penpos9 (thin, beta - 90); + z9r = z8r + (thin / cosd (beta)) * down; + + penlabels (range 1 thru 9); + + gamma = angle (length (z1r - z1), 2 kuulleke); + + fill z2r{dir (alpha - gamma)} + .. z4 + .. {dir (alpha + gamma)}z3l + .. z3r{down} + -- z5r + -- z5l + -- z2l{up} + .. cycle; + + fill z7l + -- z1l{dir (beta)} + .. {dir (alpha - gamma)}z2r + -- z9r{up} + .. {dir (180 + beta)}z9l + -- z7r{dir (180 + beta)} + .. {dir (beta)}cycle; + + draw_foot (x1); +fet_endchar; + + +fet_beginchar ("Numeral 2", "two"); + save tolerance; + save alpha, beta, gamma, theta; + save flare_start_distance; + save t, pat, bow; + path pat, bow; + + set_char_box (0, 22/30 height# * widen, 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + alpha = -45 * widen; + beta = 85; + gamma = beta - 10; + theta = 20 / widen; + + flare_start = 0.25; + + penpos1 (hair, 90 + beta); + z1 = (0, 0) + (1/2 sqrt (2) * hair) * dir (45); + + penpos3 (hair,90 + gamma); + z3 = (w, thick) + (1/2 sqrt (2) * hair) * dir (-135); + + penpos2 (thick, 90 + alpha - 15); + x2 - x1 = x3 - x2; + y2 = 10/16 thick / widen; + + tolerance := epsilon; + + % Find proper tension to exactly touch the x axis. + % Later on we directly use `bow'. + vardef f (expr t) = + bow := z3l{dir (180 + gamma)} + ..tension t.. {dir (180 + alpha -5)}z2l; + ypart (directionpoint left of bow) < 0 + enddef; + + % the return value of `solve' is stored in a dummy variable + t = solve f (0.8, 1.2); + + fill z1r{dir (beta)} + ..tension 0.9.. {dir (alpha + 10)}z2r + .. {dir (gamma)}z3r + .. bow + .. {dir (180 + beta)}z1l + .. cycle; + + penpos4 (thick, 0); + z4r = (w - thin / 2, .71 h); + + penpos5 (hair, 90); + y5r = h; + x5r = 9/20 w; + + penlabels (range 1 thru 6); + + t := tense; + + pat := z1l{dir (beta)} + ..tension t.. z4r{up} + .. number_flare_path (z5r, 180, 90, hair, 1.05 flare, + x5r - 1/2 hair, .21 h, 0.006, 0.4, 1) + .. z4l{down} + ..tension t.. {dir (180 + beta)}z1r + -- cycle; + +% pickup pencircle scaled 1; +% draw pat; + + fill pat; +fet_endchar; + + +%% +% TODO: should widen a bit. The right edge of the 3 bumps into next glyph in +% combinations +% +fet_beginchar ("Numeral 3", "three"); + set_char_box (0, 2/3 height# * widen, 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + penpos1 (hair, -90); + +% flare_start = 0.25; + + x1l = 36/80 w; + y1l = h; + +% z1l = (17/16 thick, h); + + penpos2 (7/8 thick, 180); + x2l = w - thick / 8; + y2l = 3/4 h + thick * 3/32; + + penpos3 (thin, 90); + z3 = (w / 2, h / 2 + 1/8 thick); + + penpos4 (thin, 90); + z4 = (5/8 thick + 1/2 thin, y3); + + penpos5 (thick, 0); + x5r = w; + y5r = 17/64 h + thick / 16; + + penpos6 (hair, -90); + x6r = 37/80 w; + y6r = 0; + + penpos7 (3/2 thin, 90); + x7 = .83 w; + y7 = y3; + + penlabels (range 1 thru 7); + + save alpha, t, outer_t; + alpha = 25; + t = tense; + outer_t := 0.93; + +% pickup pencircle scaled 1; +% draw + fill number_flare_path (z1l, 180, 90, hair, 7/8 flare, x1l - .5 hair, + .16 h, 0.06, 1.5, -1) + ..tension outer_t.. z2l{down} + ..tension outer_t.. z7r{dir (180 + alpha)} + .. z7l{dir (-alpha)} + ..tension outer_t.. z5r{down} + ..tension outer_t.. number_flare_path (z6r, 180, -90, hair, + flare, x6l, .18 h, 0.06, + 1.5, 1) + .. z5l{up} + ..tension t.. z3l{left} + .. z4l{left} + .. z4r{right} + .. z3r{right} + ..tension t.. z2r{up} + ..tension t.. cycle; +fet_endchar; + + +fet_beginchar ("Numeral 4", "four"); + save alpha, beta, gamma; + + set_char_box (0, 4/5 height# * widen, 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + alpha = 0; + calc_kuulleke (3/2 thick, alpha); + + z1r = (w - 3/4 thick, height); + z5 = (thin, 1/4 height + thin); + + beta = angle (z3r - z5); + + penpos6 (thin, -90); + z6l = z5; + + penpos7 (thin, -90); + y7 = y6; + x7 = w - 1/2 thin; + + penpos8 (thin, -alpha); + z8r = z5; + + penlabels (range 1 thru 8); + + gamma = angle (length (z1r - z1), 2 kuulleke); + + fill z2r{dir (alpha - gamma)} + .. z4 + .. {dir (alpha + gamma)}z3l + .. {dir (180 + beta)}z3r + -- z8r + -- z7l{right} + .. {left}z7r + -- z6r{left} + ..tension 0.8 and 2.. z8l{dir (beta)} + .. {up}z2l + .. cycle; + + clearxy; + + alpha := beta; + calc_kuulleke (thick, alpha); + + z1r = (w - 3/4 thick, height - (3/2 thin) / cosd (alpha)); + + penpos5 (thick, 0); + z5 = (x1, foot_top); + + gamma := angle (length (z1r - z1), 2 kuulleke); + + fill z2r{dir (alpha - gamma)} + .. z4 + .. {dir (alpha + gamma)}z3l + .. {down}z3r + -- z5r + -- z5l + -- z2l{up} + .. cycle; + + penlabels (1, 2, 3, 4, 5); + + draw_foot (x5); +fet_endchar; + + +fet_beginchar ("Numeral 5", "five"); + save alpha, beta, gamma, delta; + save inner_t, outer_t; + save pat; + path pat; + + set_char_box (0, 27/40 height# * widen, 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + alpha = 0; + calc_kuulleke (w - thin, alpha); + + z1 = (w / 2 + 1/8 thick, h); + + penpos5 (thin, 0); + z5l = (x1l, h - 15/16 thick); + + penpos6 (hair, 90 - 45); + z6 = z5r + 1/2 hair * dir (-45); + + penpos7 (thin, 0); + z7l = (x1l, h / 2 + thin - hair); + + penlabels (range 1 thru 7); + + gamma = angle (length (z1r - z1), 2 kuulleke); + + pat := z2r{dir (alpha - gamma)} + .. z4 + .. {dir (alpha + gamma)}z3l + .. z3r{dir (-135)} + .. {left}z6r + .. {down}z6l + -- z7r{down} + .. {up}z7l + -- z2l{up} + .. cycle; + + beta = 45; + delta = 180 + beta + 10; + z8r = (x7r, y7r - 1/16 thick + thin); + z8l = directionpoint dir (delta) of + subpath (6, 7) of pat; + + % include intersection point to improve overlap removal + fill subpath (0, 6) of pat + .. z8l + .. subpath (7, length (pat)) of pat + .. cycle; + + penpos9 (thin, 90); + y9 = 10/16 [y5, y7]; + x9 = .36 [x8r, x10r]; + + penpos10 (thick, 0); + x10r = w + hair / 2; + y10r = 1/2 [y9r, y11r]; + + penpos11 (hair, -90); + y11r = 0; + x11r = .7 [0, x10l]; + + penlabels (range 8 thru 12); + + inner_t = 1.0; + outer_t = .85; + + fill z8r {dir (beta)} + .. z9r{right} + ..tension outer_t.. z10r{down} + .. number_flare_path (z11r, 180, -90, hair, flare, x11l, + .18 h, 0.06, 1.5, 1) + .. z11l{right} + ..tension inner_t.. z10l{up} + ..tension inner_t.. z9l{left} + .. z8l{dir (delta)} + -- cycle; +fet_endchar; + + +fet_beginchar ("Numeral 6", "six"); + draw_six; +fet_endchar; + + +fet_beginchar ("Numeral 7", "seven"); + save tolerance; + save alpha, beta, gamma, delta; + save bow; + save x_overshoot; + + path bow; + + set_char_box (0, 11/15 height# * widen - thin#, 0, height#); + overshoot_x = .75 thin; + + message "w:" & decimal w; + message "h:" & decimal h; + + alpha = -180; + + penpos1 (3/2 thick, 180 + alpha); + penpos2 (hair, 180 + alpha - 45); + penpos3 (hair, 180 + alpha + 45); + + z2 = z1l + (1/4 sqrt (2) * hair) * dir (alpha - 135); + z3 = z1r + (1/4 sqrt (2) * hair) * dir (alpha - 45); + z4 = z1 + kuulleke * dir (alpha - 90); + + z1l = (thin, 0); + + beta = 55; + penpos5 (thin, 90 + beta); + z5 = (w, h) + (1/2 sqrt (2) * thin) * dir (-135) + (overshoot_x, 0); + + gamma = angle (length (z1r - z1), 2 kuulleke); + delta = 12; + + pickup pencircle; + + fill z3l{dir (alpha - gamma)} + .. z4 + .. {dir (alpha + gamma)}z2r + .. z2l{dir (beta + delta)} + .. {dir (beta)}z5r + .. z5l{dir (180 + beta)} + .. {dir (delta - 90)}z3r + .. cycle; + + penlabels (1, 2, 3, 4, 5); + + alpha := -45 * widen; + + penpos11 (1/2 thick, 90); + z11 = (3/2 thin, h - (thick + thin) / 2); + + penpos13 (thin, 90 + beta); + z13 = z5; + + penpos12 (thick, 90 + alpha); + x12 = 1/2 [x11, x13] - 1/4 thick; + y12 = h - 15/16 thick + thin * widen; + + penpos14 (thin, 0); + z14l = (0, h - thin / 2); + + penpos15 (thin, 0); + z15l = (0, h / 2 + thin / 2); + + penpos16 (9/8 thick, 90); + z16r = (thin, y11r + 2/16 thick); + + tolerance := epsilon; + + % Find proper tension to exactly touch the x axis. + % Later on we directly use `bow'. + vardef f (expr t) = + bow := z11r{dir (beta)} + ..tension t.. {dir (alpha)}z12r; + ypart (directionpoint right of bow) > h + enddef; + + % the return value of `solve' is stored in a dummy variable + t = solve f (0.8, 1.2); + + fill bow + .. {dir (beta)}z13r + -- z13l{dir (180 + beta)} + .. {dir (180 + alpha)}z12l + .. {dir (180 + beta)}z11l + .. {down}z16l + -- z15r{down} + .. {up}z15l + -- z14l{up} + .. {down}z14r + -- z16r{down} + ..tension 1.5.. {dir (beta)}cycle; + + penlabels (range 11 thru 16); +fet_endchar; + + +fet_beginchar ("Numeral 8", "eight"); + save alpha, beta; + + set_char_box (0, 11/15 height# * widen, 0, height#); + + message "w:" & decimal w; + message "h:" & decimal h; + + alpha = 60; + beta = alpha - 15; + + z1 = (w / 2, h / 2 + thick / 8); + + penpos2 (14/8 thin, 0); + z2 = (w / 3, h / 2 + thin); + + penpos3 (3/2 thin, 0); + z3l = (0, h / 4 + thin / 2); + + penpos4 (hair, 90); + z4l = (x1, 0); + + penpos5 (thick, 90 + 90 + alpha); + z5 = z1 + w / 4 * dir (alpha - 90); + + penpos6 (thick, 90 + 90 + alpha); + z6 = z1 + (w / 4 - thin / 2) * dir (90 + alpha); + + penpos7 (hair, 90); + z7r = (x1 + .02 w, h); + + penpos8 (3/2 thin, 0); + z8r = (w - thin / 2, 3/4 h + thin / 2); + + penpos9 (13/8 thin, 0); + z9 = (2/3 w, h / 2); + + penlabels (range 1 thru 9); + + save t; + t = tense; + + fill z2r{dir (180 + beta)} + .. z3r{down} + .. z4r{right} + .. z5r{dir (90 + alpha)} + -- z6r{dir (90 + alpha)} + ..tension t.. z7r{right} + .. z8r{down} + .. {dir (180 + beta)}z9r + -- z9l{dir (beta)} + .. z8l{up} + .. z7l{left} + .. {dir (alpha - 90)}z6l + -- z5l{dir (alpha - 90)} + ..tension t.. z4l{left} + .. z3l{up} + .. {dir (beta)}z2l + -- cycle; +fet_endchar; + + +fet_beginchar ("Numeral 9", "nine"); + draw_six; +% xy_mirror_char; + + currentpicture := currentpicture scaled -1; + currentpicture := currentpicture shifted (w, h); +fet_endchar; + + +ligtable "3": + "3" kern 0.1 space#, + "0" kern 0.1 space#; + +ligtable "2": + "7" kern 0.15 space#; diff --git a/mf/feta-nummer-code.mf b/mf/feta-nummer-code.mf deleted file mode 100644 index ab8fe9f011..0000000000 --- a/mf/feta-nummer-code.mf +++ /dev/null @@ -1,899 +0,0 @@ -% feta-nummer-code.mf -- implement bold Orator numerals -% -% part of LilyPond's pretty-but-neat music font -% -% source file of the Feta (not the Font-En-Tja) music font -% -% (c) 1997--2009 Jan Nieuwenhuizen - - -height# := number_design_size; -space# := number_design_size / 2; - -font_x_height height#; -font_normal_space space#; - - -% -% DOCME! -% -% ugh. b and h are reused. -% - -save b, h; -4 h + b = 1.15; -10 h + b = 1; -fatten := number_design_size * h + b; - -save b, h; -4 h + b = 1.05; -10 h + b = 1; -widen := number_design_size * h + b; - -tense = 0.85; -thick# := 7/30 height# * fatten; -thin# := thick# / 4 * fatten + max (.1 (height# / 10 - 1), 0); - -%% sqrt (.8 * blot_diameter# * thin#); -hair# := thin# * .8; - -flare# := 9/8 thick# + .75 (height# / 10 - 1); - -save b, h; -4h + b = 1/8; -10h + b = 1/6; -kuulleke# := thick# * number_design_size * h + b; -foot_top# := thick#; -foot_width# := 9/4 thick#; - - -% -% These numbers were taken from a part that that the EJE violas played -% 1997 -- Probably Mendelssohn's ouverture `Heimkehr aus der Fremde'. -% - - -% -% TODO all the invocation of flare_path are weird -- -% the horizontal tangents should be more at the center of the -% glyph. -% - -define_pixels (height, thick, thick, thin, hair, flare); -define_pixels (foot_top, foot_width); -define_pixels (kuulleke); - - -% -% Yet Another Bulb Routine with smooth inside curve. -% -% alpha = start direction. -% beta = which side to turn to -% flare = diameter of the bulb -% line = diameter of line attachment -% direction = is ink on left or right side (1 or -1) -% -% -% move_away_to = amount left (for 2) -% turn_to = amount down (for 2) -% - -def number_flare_path (expr pos, alpha, beta, line, flare, - move_away_to, turn_to, taille, taille_ratio, - direction) = -begingroup; - save res; - path res; - - clearxy; - -% z5 = z2 + 0.43 * flare * dir (alpha - 1.5 beta); - - z4 = (0.75 - taille) [z2r, z2l] + whatever * dir (alpha - beta); - z4 = (taille_ratio * taille) [z3l, z3r] + whatever * dir (alpha); - - z1r = pos; - z2r = z1r + move_away_to * dir (alpha) - + (line + turn_to) * dir (alpha + beta); - z3r = 0.5 [z2l, z2r] + 0.5 * flare * dir (alpha + beta); - - penpos1 (line, 180 + beta + alpha); - penpos2 (flare, alpha); - penpos3 (flare, alpha + beta); - - penlabels (1, 2, 3, 4, 5); - - res := z1r{dir (alpha)} - .. z2r{dir (180 + alpha - beta)} - .. z3r{dir (alpha + 180)} - .. z2l{dir (alpha - beta)} - -%%% Two versions of the curve: one with z4, the other with z5. -% .. z5{dir (alpha - beta / 2)} - - .. z4{dir (180 + alpha + beta)} - .. z1l{dir (alpha + 180)}; - -% pickup pencircle; -% draw res; - - if direction <> 1: - res := reverse res; - fi; - -res -endgroup -enddef; - - -def calc_kuulleke (expr w, alpha) = -begingroup; - save beta, gamma; - - beta = (alpha - 90) / 2; - gamma = (90 + alpha) / 2; - - penpos1 (w / cosd (alpha), alpha); - penpos2 (hair, 90 + beta); - penpos3 (hair, gamma - 90); - - z2 = z1l + (1/2 hair / tand ((alpha + 90) / 2)) * dir (beta); - z3 = z1r - (1/2 hair / tand ((90 - alpha) / 2)) * dir (gamma); - z4 = z1 + kuulleke * dir (alpha - 90); -endgroup; -enddef; - - -% should make generic macro? -% -def draw_foot (expr xpos) = -begingroup; - clearxy; - - penpos1 (thick, 0); - penpos2 (foot_width, 0); - penpos3 (hair, -90); - penpos4 (hair, 90); - - z1= (xpos, foot_top); - z2= (x1, 0); - z3r = z2r; - z4l = z2l; - z5 = (x1, kuulleke); - - penlabels (1, 2, 3, 4); - - fill z1 - .. {right}z1r{down} - .. {right}z3l - .. z3r{left} - .. z5 - .. {left}z4l - .. z4r{right} - .. {up}z1l{right} - .. z1 - .. cycle; -endgroup; -enddef; - - -def draw_six = - save outer_t, t; - save before, after, u, v; - path before, after; - - set_char_box (0, .68 height# * widen, 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - penpos2 (hair, 90); - z2 = (w / 2, h / 2 + thin - hair / 2); - - penpos3 (15/16 thick, 0); - x3r = w; - y3r = .5 [y4r, y2r]; - - penpos4 (hair, -90); - z4r = (x2, 0); - - penpos6 (hair, 90); - x6r = .56 w; - y6r = h; - - penpos7 (thick, 180); - x7r = 0; - y7r = .50 h; - - penpos10 (thick, 180); - z10r = (0, y3); - - penlabels (range 1 thru 10); - - outer_t = 0.88; - t := tense; - - before := z7{right} - .. z2r{right}; - after := z7r{up} - .. number_flare_path (z6r, 0, -90, hair, flare, - w - x6r - hair / 2, .16 h, - 0.05, 2.5, 1) - .. z7l{down}; - (u, v) = before intersectiontimes after; - -% draw - fill subpath (u, infinity) of before - ..tension outer_t.. z3r{down} - ..tension outer_t.. z4r{left} - .. subpath (0, v) of after - .. cycle; - - unfill z2l{right} - ..tension t.. z3l{down} - ..tension t.. z4l{left} - ..tension t.. z10l{up} - ..tension t.. cycle; -enddef; - - -save dot_diam; -dot_diam# = 7/8 flare#; -define_pixels (dot_diam); - - -code := 42; % , 43 - -fet_beginchar ("Plus", "plus"); - set_char_box (0, .5 height#, -0.25 height#, 0.75 height#); - - save hthick, vthick, size, outer_hsize, outer_vsize; - - hthick# = vthick# = 2 linethickness#; - size# = 1.1 staff_space#; - define_whole_blacker_pixels (vthick); - define_whole_vertical_blacker_pixels (hthick); - - outer_hsize = hround ((b + w - vthick) / 2); - outer_vsize = vround ((h + d - hthick) / 2); - - centerx := hround (w / 2); - centery := vround ((h - d) / 2); - - z1 = (centerx - hthick / 2, -d); - z2 = (centerx + hthick / 2, h); - - labels (1, 2); - - draw_rounded_block (z1, z2, hthick); - draw_rounded_block ((0, centery - vthick / 2), - (w, (centery + vthick / 2)), - vthick); -fet_endchar; - - -code := 43; % , = 44 - -fet_beginchar ("Numeral comma", "comma"); - save pat, pos; - path pat; - - set_char_box (0, dot_diam#, 3/2 dot_diam#, dot_diam#); - - pat := (dot_diam / 2, 0) - .. (dot_diam, dot_diam / 2) - .. (dot_diam / 2, dot_diam) - .. (0, dot_diam / 2) - .. cycle; - - pos = ypart (((w / 3, 0) -- (w / 3, dot_diam / 2)) - intersectiontimes pat); - z0 = point pos of pat; - - alpha = 65; - penpos1 (thin, alpha + 90); - - z1l = (w / 2, -1.5 h + hair); - z2 = (w, h / 2); - - pickup feta_fillpen; - - % include z0 to assist removal of overlaps - fill subpath (0,3) of pat - .. z0 - .. cycle; - filldraw z1l{dir (alpha)} - .. {up}z2 - -- z0{direction pos of pat} - ..tension 0.95.. {dir (180 + alpha)}z1r - .. cycle; - - labels (0, 2); - penlabels (1); -fet_endchar; - - -fet_beginchar ("Numeral dash", "hyphen"); - set_char_box (0, height# / 3, 0, height#); - - draw_rounded_block ((-b, h / 3 - thin / 2), - (w, h / 3 + thin / 2), thin); -fet_endchar; - - -fet_beginchar ("Numeral dot", "period"); - set_char_box (0, dot_diam#, 0, dot_diam#); - - pickup pencircle scaled dot_diam; - - drawdot (dot_diam / 2, dot_diam / 2); -fet_endchar; - - -% skip slash - -code := 47; % 0 = 48 - -fet_beginchar ("Numeral 0", "zero"); - set_char_box (0, 11/15 height# * widen, 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - penpos1 (thin, 90); - penpos2 (thick, 180); - penpos3 (thin,- 90); - penpos4 (thick, 0); - - z1r = (w / 2, h); - z2r = (0, h / 2); - z3r = (w / 2, 0); - z4r = (w, h / 2); - - fill z1r - .. z2r - .. z3r - .. z4r - .. cycle; - - save t; - t = 1 / tense; - - penlabels (1, 2, 3, 4); - - unfill z1l - ..tension t.. z2l - ..tension t.. z3l - ..tension t.. z4l - ..tension t.. cycle; -fet_endchar; - - -fet_beginchar ("Numeral 1", "one"); - save alpha, beta, gamma; - -% set_char_box (0, 19/30 height# * widen, 0, height#); - set_char_box (0, 1/2 foot_width# + 3/2 thick# + 1/2 hair#, - 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - alpha = 0; - calc_kuulleke (thick, alpha); - z1 = (3/2 thick, height); - - penpos5 (thick, 0); - z5 = (x1, foot_top); - - z6 = (0, h / 2); - beta = angle (z1l - z6); - - penpos7 (thin, beta - 90); - z7l = z6; - - penpos8 (thin / cosd (beta), -90); - z8l = z1l; - - penpos9 (thin, beta - 90); - z9r = z8r + (thin / cosd (beta)) * down; - - penlabels (range 1 thru 9); - - gamma = angle (length (z1r - z1), 2 kuulleke); - - fill z2r{dir (alpha - gamma)} - .. z4 - .. {dir (alpha + gamma)}z3l - .. z3r{down} - -- z5r - -- z5l - -- z2l{up} - .. cycle; - - fill z7l - -- z1l{dir (beta)} - .. {dir (alpha - gamma)}z2r - -- z9r{up} - .. {dir (180 + beta)}z9l - -- z7r{dir (180 + beta)} - .. {dir (beta)}cycle; - - draw_foot (x1); -fet_endchar; - - -fet_beginchar ("Numeral 2", "two"); - save tolerance; - save alpha, beta, gamma, theta; - save flare_start_distance; - save t, pat, bow; - path pat, bow; - - set_char_box (0, 22/30 height# * widen, 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - alpha = -45 * widen; - beta = 85; - gamma = beta - 10; - theta = 20 / widen; - - flare_start = 0.25; - - penpos1 (hair, 90 + beta); - z1 = (0, 0) + (1/2 sqrt (2) * hair) * dir (45); - - penpos3 (hair,90 + gamma); - z3 = (w, thick) + (1/2 sqrt (2) * hair) * dir (-135); - - penpos2 (thick, 90 + alpha - 15); - x2 - x1 = x3 - x2; - y2 = 10/16 thick / widen; - - tolerance := epsilon; - - % Find proper tension to exactly touch the x axis. - % Later on we directly use `bow'. - vardef f (expr t) = - bow := z3l{dir (180 + gamma)} - ..tension t.. {dir (180 + alpha -5)}z2l; - ypart (directionpoint left of bow) < 0 - enddef; - - % the return value of `solve' is stored in a dummy variable - t = solve f (0.8, 1.2); - - fill z1r{dir (beta)} - ..tension 0.9.. {dir (alpha + 10)}z2r - .. {dir (gamma)}z3r - .. bow - .. {dir (180 + beta)}z1l - .. cycle; - - penpos4 (thick, 0); - z4r = (w - thin / 2, .71 h); - - penpos5 (hair, 90); - y5r = h; - x5r = 9/20 w; - - penlabels (range 1 thru 6); - - t := tense; - - pat := z1l{dir (beta)} - ..tension t.. z4r{up} - .. number_flare_path (z5r, 180, 90, hair, 1.05 flare, - x5r - 1/2 hair, .21 h, 0.006, 0.4, 1) - .. z4l{down} - ..tension t.. {dir (180 + beta)}z1r - -- cycle; - -% pickup pencircle scaled 1; -% draw pat; - - fill pat; -fet_endchar; - - -%% -% TODO: should widen a bit. The right edge of the 3 bumps into next glyph in -% combinations -% -fet_beginchar ("Numeral 3", "three"); - set_char_box (0, 2/3 height# * widen, 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - penpos1 (hair, -90); - -% flare_start = 0.25; - - x1l = 36/80 w; - y1l = h; - -% z1l = (17/16 thick, h); - - penpos2 (7/8 thick, 180); - x2l = w - thick / 8; - y2l = 3/4 h + thick * 3/32; - - penpos3 (thin, 90); - z3 = (w / 2, h / 2 + 1/8 thick); - - penpos4 (thin, 90); - z4 = (5/8 thick + 1/2 thin, y3); - - penpos5 (thick, 0); - x5r = w; - y5r = 17/64 h + thick / 16; - - penpos6 (hair, -90); - x6r = 37/80 w; - y6r = 0; - - penpos7 (3/2 thin, 90); - x7 = .83 w; - y7 = y3; - - penlabels (range 1 thru 7); - - save alpha, t, outer_t; - alpha = 25; - t = tense; - outer_t := 0.93; - -% pickup pencircle scaled 1; -% draw - fill number_flare_path (z1l, 180, 90, hair, 7/8 flare, x1l - .5 hair, - .16 h, 0.06, 1.5, -1) - ..tension outer_t.. z2l{down} - ..tension outer_t.. z7r{dir (180 + alpha)} - .. z7l{dir (-alpha)} - ..tension outer_t.. z5r{down} - ..tension outer_t.. number_flare_path (z6r, 180, -90, hair, - flare, x6l, .18 h, 0.06, - 1.5, 1) - .. z5l{up} - ..tension t.. z3l{left} - .. z4l{left} - .. z4r{right} - .. z3r{right} - ..tension t.. z2r{up} - ..tension t.. cycle; -fet_endchar; - - -fet_beginchar ("Numeral 4", "four"); - save alpha, beta, gamma; - - set_char_box (0, 4/5 height# * widen, 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - alpha = 0; - calc_kuulleke (3/2 thick, alpha); - - z1r = (w - 3/4 thick, height); - z5 = (thin, 1/4 height + thin); - - beta = angle (z3r - z5); - - penpos6 (thin, -90); - z6l = z5; - - penpos7 (thin, -90); - y7 = y6; - x7 = w - 1/2 thin; - - penpos8 (thin, -alpha); - z8r = z5; - - penlabels (range 1 thru 8); - - gamma = angle (length (z1r - z1), 2 kuulleke); - - fill z2r{dir (alpha - gamma)} - .. z4 - .. {dir (alpha + gamma)}z3l - .. {dir (180 + beta)}z3r - -- z8r - -- z7l{right} - .. {left}z7r - -- z6r{left} - ..tension 0.8 and 2.. z8l{dir (beta)} - .. {up}z2l - .. cycle; - - clearxy; - - alpha := beta; - calc_kuulleke (thick, alpha); - - z1r = (w - 3/4 thick, height - (3/2 thin) / cosd (alpha)); - - penpos5 (thick, 0); - z5 = (x1, foot_top); - - gamma := angle (length (z1r - z1), 2 kuulleke); - - fill z2r{dir (alpha - gamma)} - .. z4 - .. {dir (alpha + gamma)}z3l - .. {down}z3r - -- z5r - -- z5l - -- z2l{up} - .. cycle; - - penlabels (1, 2, 3, 4, 5); - - draw_foot (x5); -fet_endchar; - - -fet_beginchar ("Numeral 5", "five"); - save alpha, beta, gamma, delta; - save inner_t, outer_t; - save pat; - path pat; - - set_char_box (0, 27/40 height# * widen, 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - alpha = 0; - calc_kuulleke (w - thin, alpha); - - z1 = (w / 2 + 1/8 thick, h); - - penpos5 (thin, 0); - z5l = (x1l, h - 15/16 thick); - - penpos6 (hair, 90 - 45); - z6 = z5r + 1/2 hair * dir (-45); - - penpos7 (thin, 0); - z7l = (x1l, h / 2 + thin - hair); - - penlabels (range 1 thru 7); - - gamma = angle (length (z1r - z1), 2 kuulleke); - - pat := z2r{dir (alpha - gamma)} - .. z4 - .. {dir (alpha + gamma)}z3l - .. z3r{dir (-135)} - .. {left}z6r - .. {down}z6l - -- z7r{down} - .. {up}z7l - -- z2l{up} - .. cycle; - - beta = 45; - delta = 180 + beta + 10; - z8r = (x7r, y7r - 1/16 thick + thin); - z8l = directionpoint dir (delta) of - subpath (6, 7) of pat; - - % include intersection point to improve overlap removal - fill subpath (0, 6) of pat - .. z8l - .. subpath (7, length (pat)) of pat - .. cycle; - - penpos9 (thin, 90); - y9 = 10/16 [y5, y7]; - x9 = .36 [x8r, x10r]; - - penpos10 (thick, 0); - x10r = w + hair / 2; - y10r = 1/2 [y9r, y11r]; - - penpos11 (hair, -90); - y11r = 0; - x11r = .7 [0, x10l]; - - penlabels (range 8 thru 12); - - inner_t = 1.0; - outer_t = .85; - - fill z8r {dir (beta)} - .. z9r{right} - ..tension outer_t.. z10r{down} - .. number_flare_path (z11r, 180, -90, hair, flare, x11l, - .18 h, 0.06, 1.5, 1) - .. z11l{right} - ..tension inner_t.. z10l{up} - ..tension inner_t.. z9l{left} - .. z8l{dir (delta)} - -- cycle; -fet_endchar; - - -fet_beginchar ("Numeral 6", "six"); - draw_six; -fet_endchar; - - -fet_beginchar ("Numeral 7", "seven"); - save tolerance; - save alpha, beta, gamma, delta; - save bow; - save x_overshoot; - - path bow; - - set_char_box (0, 11/15 height# * widen - thin#, 0, height#); - overshoot_x = .75 thin; - - message "w:" & decimal w; - message "h:" & decimal h; - - alpha = -180; - - penpos1 (3/2 thick, 180 + alpha); - penpos2 (hair, 180 + alpha - 45); - penpos3 (hair, 180 + alpha + 45); - - z2 = z1l + (1/4 sqrt (2) * hair) * dir (alpha - 135); - z3 = z1r + (1/4 sqrt (2) * hair) * dir (alpha - 45); - z4 = z1 + kuulleke * dir (alpha - 90); - - z1l = (thin, 0); - - beta = 55; - penpos5 (thin, 90 + beta); - z5 = (w, h) + (1/2 sqrt (2) * thin) * dir (-135) + (overshoot_x, 0); - - gamma = angle (length (z1r - z1), 2 kuulleke); - delta = 12; - - pickup pencircle; - - fill z3l{dir (alpha - gamma)} - .. z4 - .. {dir (alpha + gamma)}z2r - .. z2l{dir (beta + delta)} - .. {dir (beta)}z5r - .. z5l{dir (180 + beta)} - .. {dir (delta - 90)}z3r - .. cycle; - - penlabels (1, 2, 3, 4, 5); - - alpha := -45 * widen; - - penpos11 (1/2 thick, 90); - z11 = (3/2 thin, h - (thick + thin) / 2); - - penpos13 (thin, 90 + beta); - z13 = z5; - - penpos12 (thick, 90 + alpha); - x12 = 1/2 [x11, x13] - 1/4 thick; - y12 = h - 15/16 thick + thin * widen; - - penpos14 (thin, 0); - z14l = (0, h - thin / 2); - - penpos15 (thin, 0); - z15l = (0, h / 2 + thin / 2); - - penpos16 (9/8 thick, 90); - z16r = (thin, y11r + 2/16 thick); - - tolerance := epsilon; - - % Find proper tension to exactly touch the x axis. - % Later on we directly use `bow'. - vardef f (expr t) = - bow := z11r{dir (beta)} - ..tension t.. {dir (alpha)}z12r; - ypart (directionpoint right of bow) > h - enddef; - - % the return value of `solve' is stored in a dummy variable - t = solve f (0.8, 1.2); - - fill bow - .. {dir (beta)}z13r - -- z13l{dir (180 + beta)} - .. {dir (180 + alpha)}z12l - .. {dir (180 + beta)}z11l - .. {down}z16l - -- z15r{down} - .. {up}z15l - -- z14l{up} - .. {down}z14r - -- z16r{down} - ..tension 1.5.. {dir (beta)}cycle; - - penlabels (range 11 thru 16); -fet_endchar; - - -fet_beginchar ("Numeral 8", "eight"); - save alpha, beta; - - set_char_box (0, 11/15 height# * widen, 0, height#); - - message "w:" & decimal w; - message "h:" & decimal h; - - alpha = 60; - beta = alpha - 15; - - z1 = (w / 2, h / 2 + thick / 8); - - penpos2 (14/8 thin, 0); - z2 = (w / 3, h / 2 + thin); - - penpos3 (3/2 thin, 0); - z3l = (0, h / 4 + thin / 2); - - penpos4 (hair, 90); - z4l = (x1, 0); - - penpos5 (thick, 90 + 90 + alpha); - z5 = z1 + w / 4 * dir (alpha - 90); - - penpos6 (thick, 90 + 90 + alpha); - z6 = z1 + (w / 4 - thin / 2) * dir (90 + alpha); - - penpos7 (hair, 90); - z7r = (x1 + .02 w, h); - - penpos8 (3/2 thin, 0); - z8r = (w - thin / 2, 3/4 h + thin / 2); - - penpos9 (13/8 thin, 0); - z9 = (2/3 w, h / 2); - - penlabels (range 1 thru 9); - - save t; - t = tense; - - fill z2r{dir (180 + beta)} - .. z3r{down} - .. z4r{right} - .. z5r{dir (90 + alpha)} - -- z6r{dir (90 + alpha)} - ..tension t.. z7r{right} - .. z8r{down} - .. {dir (180 + beta)}z9r - -- z9l{dir (beta)} - .. z8l{up} - .. z7l{left} - .. {dir (alpha - 90)}z6l - -- z5l{dir (alpha - 90)} - ..tension t.. z4l{left} - .. z3l{up} - .. {dir (beta)}z2l - -- cycle; -fet_endchar; - - -fet_beginchar ("Numeral 9", "nine"); - draw_six; -% xy_mirror_char; - - currentpicture := currentpicture scaled -1; - currentpicture := currentpicture shifted (w, h); -fet_endchar; - - -ligtable "3": - "3" kern 0.1 space#, - "0" kern 0.1 space#; - -ligtable "2": - "7" kern 0.15 space#; diff --git a/mf/feta-params.mf b/mf/feta-params.mf index 96d9862897..4d0a5eb4b5 100644 --- a/mf/feta-params.mf +++ b/mf/feta-params.mf @@ -1,16 +1,27 @@ +% Feta (not the Font-En-Tja) music font -- global parameters for both feta and parmesan fonts +% This file is part of LilyPond, the GNU music typesetter. % -% feta-params.mf -- global parameters for both feta and parmesan fonts +% Copyright (C) 1997--2011 Han-Wen Nienhuys % -% source file of the GNU LilyPond music typesetter +% 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. % -% (c) 1997--2009 Han-Wen Nienhuys +% 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 . stafflines := 5; % -% The design size of a staff should really be the +% The design size of a staff should really be the % staff_space, but we use staffsize for historical reasons. -% +% staff_space# := staffsize# / (stafflines - 1); staff_space_rounded# := staff_space#; @@ -31,11 +42,11 @@ fixed_line_thickness + variable_line_factor * 5 pt# = 0.50 pt#; fixed_line_thickness + variable_line_factor * 4.125 pt# = 0.47 pt#; stafflinethickness# := fixed_line_thickness - + variable_line_factor * staff_space#; + + variable_line_factor * staff_space#; stafflinethickness_rounded# := stafflinethickness#; % -% The following tunes the general blackness of the glyphs. +% The following tunes the general blackness of the glyphs. % linethickness# := stafflinethickness#; %% 0.5 pt#; @@ -68,7 +79,7 @@ if ledgerlinethickness_rounded > 2 stafflinethickness_rounded: ledgerlinethickness_rounded := 2 stafflinethickness_rounded; fi; -% +% % Because of the engraving/stamping process, no traditional % characters have sharp edges and corners. % The following variable controls the amount of `roundness'. @@ -151,8 +162,8 @@ define_pixels (blot_diameter); % . Restore height and decrease `d' by 1. % % o The glyph is centered between two or four staff lines, and the origin is -% the middle of the whitespace. Assuming that the the whitespace consists -% of an odd number of pixels, we have this: +% the middle of the whitespace. Assuming that the whitespace consists of +% an odd number of pixels, we have this: % % ----------- % b diff --git a/mf/feta-pedals.mf b/mf/feta-pedals.mf new file mode 100644 index 0000000000..8a287f52f2 --- /dev/null +++ b/mf/feta-pedals.mf @@ -0,0 +1,357 @@ +% Feta (not the Font-En-Tja) music font -- piano pedal markings +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2000--2011 Jan Nieuwenhuizen +% +% Voor Cup +% +% 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 . + +% Kerning +% +% Pe = -0.034 pedalh == -0.07 staff-space +% ed = -0.27 pedalh == -0.53 staff-space + + +fet_begingroup ("pedal"); + +pedalpha = 40; +pedbeta = 25; + +penh# = 0.7 linethickness#; +penw# = 2 penh# + 0.14 staff_space#; +define_pixels (penh, penw); + +pedalh# = 2 staff_space#; +pedalbh# = 4/7 pedalh#; +define_pixels (pedalh, pedalbh); + + +fet_beginchar ("Pedal asterisk", "*"); + save bulb, p, radius, thin, inner_r; + path pat; + + set_char_box (0, 7/9 pedalh#, 0, 7/9 pedalh#); + + z0 = (1/2 w, h - 1/2 w); + + thin = 0.8 linethickness; + + bulb + 2 radius = w; + 0.9 thin + bulb = (radius * pi * 2) / 8; + + pickup pencircle scaled penh; + + penpos1 (bulb, 180); + penpos2 (bulb, 0); + penpos3 (thin, 0); + + z1 = z0 + (0, radius); + z2 = z1; + + inner_r = .45 radius; + + z4l = z0 + inner_r * dir (90 + 360/16); + z4r = z0 + inner_r * dir (90 - 360/16); + + z4 = .5 [z4l, z4r]; + z3 = .75 [z1, z4]; + + penlabels (0, 1, 2, 3, 4); + + pat := z3r{up} + .. z1l{up} + .. z2l{down} + .. z3l{down} + .. z4l{dir (180 + 360/16)}; + for i = 1 upto 7: + pat := pat + .. ((z3r{up} + .. z1l{up} + .. z2l{down} + .. z3l{down} + .. z4l{dir (180 + 360/16)}) + rotatedaround (z0, 360/8 i)); + endfor; + + pat := pat + .. cycle; + fill pat; + + pickup pencircle scaled (7/8 inner_r); + + undrawdot z0; +fet_endchar; + + +%% ugh. rounded corners! + +fet_beginchar ("Pedal dash", "M"); + save dash_thickness; + + dash_thickness# := penw#; + define_whole_vertical_blacker_pixels (dash_thickness); + + set_char_box (0, 3 penw#, 0, pedalbh#); + + penpos1 (dash_thickness, 60); + penpos2 (dash_thickness, 60); + + z1l = (0, vround (2/3 h - 1/2 penw)); + z2r = (w, vround (y1l + 1.2 penw)); + + penlabels (1, 2, 3); + + penstroke z1e{dir 40} + ..tension 1.2.. z2e{dir 40}; +fet_endchar; + + +fet_beginchar ("Pedal dot", "."); + set_char_box (0, penw#, 0, penw#); + + pickup pencircle scaled penw; + + drawdot (hround (1/2 penw), vround (1/2 penw)); +fet_endchar; + + +def draw_pedal_P (expr show_labels) = +begingroup; + clearxy; + + penpos1 (hround penh, 0); + penpos2 (penw, 55); + penpos3 (penw, pedalpha); + penpos4 (1.2 penh, -pedalpha); + penpos5 (penh, -pedalpha); + penpos6 (penh, 180 - pedalpha); + penpos7 (penh, 180 - pedalpha); + penpos8 (penh, 90); + penpos9 (4/3 penw, 50); + penpos10 (1.4 penw, 50); + penpos11 (penh, 90 + pedalpha); + + z1r = (hround 0.6 w, h); + x2l = hround (x1l - penw) + xpart feta_offset; + y2 = vround (0.7 h) + ypart feta_offset; + x3r = hround (x2l + 2 penw); + y3r = 0.4 h; + z4l = z5r + 1/4 (z3r - z5r); + x5 = 1/4 w; + y5r = 0; + z6 = z5; + z7l = z6r + 1/3 (z8r - z6r); + z8r = z5r + 3/5 (z3r - z5r); + x9l = x10l - penh; + y9l = 1/4 penh; + x10l = w - tand (90 - pedalpha) * y11l; + y10l = 1/4 penh; + x11l = w; + y11 = 1/5 h; + + % don't stick out at the top + z1' = round (0.9 [z2, z1]) + (xpart feta_offset, 0); + penpos1' (penh, 0); + + % shift start point of pen stroke to avoid overlapping contours + z8'l = z8l; + y8'r = y8r; + z8'r = z8l + whatever * (z3r - z8l); + + penpos12 (hround penh, 0); + penpos13 (penw, -90 - pedbeta); + penpos14 (vround penh, 90); + penpos15 (penw, -90 + pedbeta); + penpos16 (penh, 180 + pedbeta); + + z12r = (hround (5/9 x1 + 1/2 hround penh), y2); + z13l = (1/2 x12r, y15r); + z14r = z1r; + z15l = (1/2 [x16, w], y2l + 0.5 penw); + x16 = 1/4 [x1, w]; + y16r = y2r; + + % We now do a correction to `center' the stem horizontally. While + % this is not the most elegant solution, it is definitely the + % easiest... + + save horz_corr; + horz_corr = 1/5 [x12, x16] - x2l; + x2 := x2 + horz_corr; + x2l := x2l + horz_corr; + x2r := x2r + horz_corr; + + penstroke z1'e + ..tension 2.5.. z2e + ..tension 1.5.. z3e + ..tension 2.5.. {dir (225)}z4e; + + soft_end_penstroke z8'e{right} + ..tension 1.5.. z9e{dir (-pedalpha)} + .. z10e + ..tension 2.5.. z11e; + + fill z4r{dir (225)} + ..tension 1.5.. z5r{left} + .. z6r + ..tension 1.5.. z7r + ..tension 1.5.. z8r{right} + -- cycle; + + soft_penstroke z12e{down} + ..tension 1.1.. z13e{dir (180 - pedbeta)} + ..tension 1.1.. z14e{right} + ..tension 1.1.. z15e{dir (180 + pedbeta)} + ..tension 1.1.. z16e{dir (90 + pedbeta)}; + + if show_labels = 1: + penlabels (range 1 thru 16); + penlabels (1', 8'); + fi; +endgroup; +enddef; + + +def draw_pedal_d (expr show_labels) = +begingroup; + clearxy; + + penpos1 (vround penh, -10 - 90); + penpos2 (hround penw, 190); + penpos3 (vround (2 penh), 90); + penpos4 (hround (3/4 penw), 0); + penpos5 (penh, -70); + + x1r = 0; + y1l = h; + z2 = (w - 1/2 hround penw, 1/2 pedalbh + penh); + z4l = (hround (1/3 w), 1/2 pedalbh); + z5l = (2/3 w, pedalbh); + z3l = (hround x5l, 0); + + if show_labels = 1: + penlabels (1, 2, 3, 4, 5); + fi; + + soft_start_penstroke z1e{dir (-10)} + ..tension 1.1.. z2e{dir (-90 + 10)} + ..tension 1.1.. z3e{left} + ..tension 1.1.. z4e{up} + ..tension 1.1.. z5e{dir (-70 + 90)}; +endgroup; +enddef; + + +def draw_pedal_e (expr show_labels) = +begingroup; + clearxy; + + penpos1 (penh, pedalpha - 90); + penpos2 (penh, pedalpha - 90); + penpos3 (3/5 penw, pedalpha); + penpos4 (1.2 penh, 90 + pedalpha); + penpos5 (2/3 penw, 180); + penpos6 (penw, 180 + pedalpha); + penpos7 (2/3 penw, -90 - 20); + penpos8 (penh, pedalpha - 90); + + z1l = (0, 1/5 pedalh); + % this helps to make the path go through z2 at low resolutions + z2 = round (z1 + dir pedalpha * penw) + feta_offset; + z3 = (3/5 w, 8/9 h); + z4 = (2/9 w, y3); + x4r := hround x4r; + x5r = 0; + y5 = y2; + x6 = 3/8 w; + y6r = 1/2 penh; + z7l = (x6l + penh, y6l); + x8r = w; + y8 = 1/5 pedalh; + + soft_penstroke z1e + -- z2e{z2 - z1} + ..tension 1.1.. z3e + ..tension 1.05.. z4e + ..tension 1.1.. z5e + ..tension 1.5.. z6e{dir - pedalpha} + ..tension 1.1.. z7e + ..tension 2.5.. z8e; + + if show_labels = 1: + penlabels (range 1 thru 8); + fi; +endgroup; +enddef; + + +fet_beginchar ("Pedal P", "P"); + set_char_box (0, 5/6 pedalh#, 0, pedalh#); + + draw_pedal_P (1); +fet_endchar; + + +fet_beginchar ("Pedal d", "d"); + set_char_box (0, 2/3 pedalh#, 0, 7/8 pedalh#); + + draw_pedal_d (1); +fet_endchar; + + +fet_beginchar ("Pedal e", "e"); + set_char_box (0, 2/5 pedalh#, 0, pedalbh#); + + draw_pedal_e (1); +fet_endchar; + + +fet_beginchar ("Pedal Ped", "Ped"); + P_width# = 5/6 pedalh#; + e_width# = 2/5 pedalh#; + d_width# = 2/3 pedalh#; + define_pixels (P_width, e_width, d_width); + + e_height = pedalbh; + d_height = 7/8 pedalh; + + % Pe = -0.034 pedalh == -0.07 staff-space + % ed = -0.27 pedalh == -0.53 staff-space + Pe_kern# = -0.034 pedalh#; + ed_kern# = -0.27 pedalh#; + define_pixels (Pe_kern, ed_kern); + + w := hround d_width; + h := vround d_height; + draw_pedal_d (0); + currentpicture := currentpicture + shifted (hround (e_width + ed_kern), 0); + + w := hround e_width; + h := vround e_height; + draw_pedal_e (0); + currentpicture := currentpicture + shifted (hround (P_width + Pe_kern), 0); + + w := hround P_width; + h := vround pedalh; + draw_pedal_P (0); + + set_char_box (0, P_width# + Pe_kern# + e_width# + ed_kern# + d_width#, + 0, pedalh#); +fet_endchar; + + +fet_endgroup ("pedal"); diff --git a/mf/feta-pendaal.mf b/mf/feta-pendaal.mf deleted file mode 100644 index fded9ecb3e..0000000000 --- a/mf/feta-pendaal.mf +++ /dev/null @@ -1,348 +0,0 @@ -% -*- Fundamental -*- (emacs-20 mf mode mucks -% feta-pendaal.mf -- piano pedal markings -% -% part of LilyPond's pretty-but-neat music font -% -% source file of the Feta (not the Font-En-Tja) music font -% -% (c) 2000--2009 Jan Nieuwenhuizen -% -% Voor Cup - -% Kerning -% -% Pe = -0.034 pedalh == -0.07 staff-space -% ed = -0.27 pedalh == -0.53 staff-space - - -fet_begingroup ("pedal"); - -pedalpha = 40; -pedbeta = 25; - -penh# = 0.7 linethickness#; -penw# = 2 penh# + 0.14 staff_space#; -define_pixels (penh, penw); - -pedalh# = 2 staff_space#; -pedalbh# = 4/7 pedalh#; -define_pixels (pedalh, pedalbh); - - -fet_beginchar ("Pedal asterisk", "*"); - save bulb, p, radius, thin, inner_r; - path pat; - - set_char_box (0, 7/9 pedalh#, 0, pedalh#); - - z0 = (1/2 w, h - 1/2 w); - - thin = 0.8 linethickness; - - bulb + 2 radius = w; - 0.9 thin + bulb = (radius * pi * 2) / 8; - - pickup pencircle scaled penh; - - penpos1 (bulb, 180); - penpos2 (bulb, 0); - penpos3 (thin, 0); - - z1 = z0 + (0, radius); - z2 = z1; - - inner_r = .45 radius; - - z4l = z0 + inner_r * dir (90 + 360/16); - z4r = z0 + inner_r * dir (90 - 360/16); - - z4 = .5 [z4l, z4r]; - z3 = .75 [z1, z4]; - - penlabels (0, 1, 2, 3, 4); - - pat := z3r{up} - .. z1l{up} - .. z2l{down} - .. z3l{down} - .. z4l{dir (180 + 360/16)}; - for i = 1 upto 7: - pat := pat - .. ((z3r{up} - .. z1l{up} - .. z2l{down} - .. z3l{down} - .. z4l{dir (180 + 360/16)}) - rotatedaround (z0, 360/8 i)); - endfor; - - pat := pat - .. cycle; - fill pat; - - pickup pencircle scaled (7/8 inner_r); - - undrawdot z0; -fet_endchar; - - -%% ugh. rounded corners! - -fet_beginchar ("Pedal dash", "M"); - save dash_thickness; - - dash_thickness# := penw#; - define_whole_vertical_blacker_pixels (dash_thickness); - - set_char_box (0, 3 penw#, 0, pedalbh#); - - penpos1 (dash_thickness, 60); - penpos2 (dash_thickness, 60); - - z1l = (0, vround (2/3 h - 1/2 penw)); - z2r = (w, vround (y1l + 1.2 penw)); - - penlabels (1, 2, 3); - - penstroke z1e{dir 40} - ..tension 1.2.. z2e{dir 40}; -fet_endchar; - - -fet_beginchar ("Pedal dot", "."); - set_char_box (0, penw#, 0, penw#); - - pickup pencircle scaled penw; - - drawdot (hround (1/2 penw), vround (1/2 penw)); -fet_endchar; - - -def draw_pedal_P (expr show_labels) = -begingroup; - clearxy; - - penpos1 (hround penh, 0); - penpos2 (penw, 55); - penpos3 (penw, pedalpha); - penpos4 (1.2 penh, -pedalpha); - penpos5 (penh, -pedalpha); - penpos6 (penh, 180 - pedalpha); - penpos7 (penh, 180 - pedalpha); - penpos8 (penh, 90); - penpos9 (4/3 penw, 50); - penpos10 (1.4 penw, 50); - penpos11 (penh, 90 + pedalpha); - - z1r = (hround 0.6 w, h); - x2l = hround (x1l - penw) + xpart feta_offset; - y2 = vround (0.7 h) + ypart feta_offset; - x3r = hround (x2l + 2 penw); - y3r = 0.4 h; - z4l = z5r + 1/4 (z3r - z5r); - x5 = 1/4 w; - y5r = 0; - z6 = z5; - z7l = z6r + 1/3 (z8r - z6r); - z8r = z5r + 3/5 (z3r - z5r); - x9l = x10l - penh; - y9l = 1/4 penh; - x10l = w - tand (90 - pedalpha) * y11l; - y10l = 1/4 penh; - x11l = w; - y11 = 1/5 h; - - % don't stick out at the top - z1' = round (0.9 [z2, z1]) + (xpart feta_offset, 0); - penpos1' (penh, 0); - - % shift start point of pen stroke to avoid overlapping contours - z8'l = z8l; - y8'r = y8r; - z8'r = z8l + whatever * (z3r - z8l); - - penpos12 (hround penh, 0); - penpos13 (penw, -90 - pedbeta); - penpos14 (vround penh, 90); - penpos15 (penw, -90 + pedbeta); - penpos16 (penh, 180 + pedbeta); - - z12r = (hround (5/9 x1 + 1/2 hround penh), y2); - z13l = (1/2 x12r, y15r); - z14r = z1r; - z15l = (1/2 [x16, w], y2l + 0.5 penw); - x16 = 1/4 [x1, w]; - y16r = y2r; - - % We now do a correction to `center' the stem horizontally. While - % this is not the most elegant solution, it is definitely the - % easiest... - - save horz_corr; - horz_corr = 1/5 [x12, x16] - x2l; - x2 := x2 + horz_corr; - x2l := x2l + horz_corr; - x2r := x2r + horz_corr; - - penstroke z1'e - ..tension 2.5.. z2e - ..tension 1.5.. z3e - ..tension 2.5.. {dir (225)}z4e; - - soft_end_penstroke z8'e{right} - ..tension 1.5.. z9e{dir (-pedalpha)} - .. z10e - ..tension 2.5.. z11e; - - fill z4r{dir (225)} - ..tension 1.5.. z5r{left} - .. z6r - ..tension 1.5.. z7r - ..tension 1.5.. z8r{right} - -- cycle; - - soft_penstroke z12e{down} - ..tension 1.1.. z13e{dir (180 - pedbeta)} - ..tension 1.1.. z14e{right} - ..tension 1.1.. z15e{dir (180 + pedbeta)} - ..tension 1.1.. z16e{dir (90 + pedbeta)}; - - if show_labels = 1: - penlabels (range 1 thru 16); - penlabels (1', 8'); - fi; -endgroup; -enddef; - - -def draw_pedal_d (expr show_labels) = -begingroup; - clearxy; - - penpos1 (vround penh, -10 - 90); - penpos2 (hround penw, 190); - penpos3 (vround (2 penh), 90); - penpos4 (hround (3/4 penw), 0); - penpos5 (penh, -70); - - x1r = 0; - y1l = h; - z2 = (w - 1/2 hround penw, 1/2 pedalbh + penh); - z4l = (hround (1/3 w), 1/2 pedalbh); - z5l = (2/3 w, pedalbh); - z3l = (hround x5l, 0); - - if show_labels = 1: - penlabels (1, 2, 3, 4, 5); - fi; - - soft_start_penstroke z1e{dir (-10)} - ..tension 1.1.. z2e{dir (-90 + 10)} - ..tension 1.1.. z3e{left} - ..tension 1.1.. z4e{up} - ..tension 1.1.. z5e{dir (-70 + 90)}; -endgroup; -enddef; - - -def draw_pedal_e (expr show_labels) = -begingroup; - clearxy; - - penpos1 (penh, pedalpha - 90); - penpos2 (penh, pedalpha - 90); - penpos3 (3/5 penw, pedalpha); - penpos4 (1.2 penh, 90 + pedalpha); - penpos5 (2/3 penw, 180); - penpos6 (penw, 180 + pedalpha); - penpos7 (2/3 penw, -90 - 20); - penpos8 (penh, pedalpha - 90); - - z1l = (0, 1/5 pedalh); - % this helps to make the path go through z2 at low resolutions - z2 = round (z1 + dir pedalpha * penw) + feta_offset; - z3 = (3/5 w, 8/9 h); - z4 = (2/9 w, y3); - x4r := hround x4r; - x5r = 0; - y5 = y2; - x6 = 3/8 w; - y6r = 1/2 penh; - z7l = (x6l + penh, y6l); - x8r = w; - y8 = 1/5 pedalh; - - soft_penstroke z1e - -- z2e{z2 - z1} - ..tension 1.1.. z3e - ..tension 1.05.. z4e - ..tension 1.1.. z5e - ..tension 1.5.. z6e{dir - pedalpha} - ..tension 1.1.. z7e - ..tension 2.5.. z8e; - - if show_labels = 1: - penlabels (range 1 thru 8); - fi; -endgroup; -enddef; - - -fet_beginchar ("Pedal P", "P"); - set_char_box (0, 5/6 pedalh#, 0, pedalh#); - - draw_pedal_P (1); -fet_endchar; - - -fet_beginchar ("Pedal d", "d"); - set_char_box (0, 2/3 pedalh#, 0, 7/8 pedalh#); - - draw_pedal_d (1); -fet_endchar; - - -fet_beginchar ("Pedal e", "e"); - set_char_box (0, 2/5 pedalh#, 0, pedalbh#); - - draw_pedal_e (1); -fet_endchar; - - -fet_beginchar ("Pedal Ped", "Ped"); - P_width# = 5/6 pedalh#; - e_width# = 2/5 pedalh#; - d_width# = 2/3 pedalh#; - define_pixels (P_width, e_width, d_width); - - e_height = pedalbh; - d_height = 7/8 pedalh; - - % Pe = -0.034 pedalh == -0.07 staff-space - % ed = -0.27 pedalh == -0.53 staff-space - Pe_kern# = -0.034 pedalh#; - ed_kern# = -0.27 pedalh#; - define_pixels (Pe_kern, ed_kern); - - w := hround d_width; - h := vround d_height; - draw_pedal_d (0); - currentpicture := currentpicture - shifted (hround (e_width + ed_kern), 0); - - w := hround e_width; - h := vround e_height; - draw_pedal_e (0); - currentpicture := currentpicture - shifted (hround (P_width + Pe_kern), 0); - - w := hround P_width; - h := vround pedalh; - draw_pedal_P (0); - - set_char_box (0, P_width# + Pe_kern# + e_width# + ed_kern# + d_width#, - 0, pedalh#); -fet_endchar; - - -fet_endgroup ("pedal"); diff --git a/mf/feta-puntje.mf b/mf/feta-puntje.mf deleted file mode 100644 index a24e36938c..0000000000 --- a/mf/feta-puntje.mf +++ /dev/null @@ -1,26 +0,0 @@ -% -% feta-puntje.mf -- a duration dot -% -% source file of the GNU LilyPond music typesetter -% -% (c) 1997--2009 Han-Wen Nienhuys - -fet_begingroup ("dots"); - -save dot_diam; - -2 dot_diam# = staff_space# - stafflinethickness#; -define_whole_blacker_pixels (dot_diam); - -fet_beginchar ("duration dot", "dot"); - pickup pencircle scaled dot_diam; - - lft x0 = 0; - top y0 = vround (.5 dot_diam); - - drawdot z0; - - set_char_box (0, dot_diam#, .5 dot_diam#, .5 dot_diam#); -fet_endchar; - -fet_endgroup ("dots"); diff --git a/mf/feta-rests.mf b/mf/feta-rests.mf new file mode 100644 index 0000000000..4f27080179 --- /dev/null +++ b/mf/feta-rests.mf @@ -0,0 +1,603 @@ +% Feta (not the Font-En-Tja) music font -- rest symbols -*-Fundamental-*- +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Jan Nieuwenhuizen +% +% 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 . + +fet_begingroup ("rests"); + +save block_rest_y, block_rest_x; +save breve_rest_y, breve_rest_x; + +breve_rest_y# = staff_space#; +breve_rest_x# = 3/5 staff_space#; +block_rest_y# = 5/8 staff_space#; +block_rest_x# = 3/2 staff_space#; + +define_whole_pixels (block_rest_y, block_rest_x); +define_whole_pixels (breve_rest_y, breve_rest_x); + + +def block_rest = + draw_block ((0, 0), (block_rest_x, block_rest_y)); +enddef; + + +fet_beginchar ("whole rest", "0"); + set_char_box (0, block_rest_x#, + block_rest_y#, 0); + + block_rest; + currentpicture := currentpicture + shifted (0, -block_rest_y + feta_space_shift); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("half rest", "1"); + set_char_box (0, block_rest_x#, 0, block_rest_y#); + + block_rest; + + draw_staff (-2, 2, 0); +fet_endchar; + + +% +% should use ledgerline thickness? +% +fet_beginchar ("whole rest (outside staff)", "0o"); + set_char_box (0, block_rest_x#, + block_rest_y#, ledgerlinethickness# / 2); + + block_rest; + currentpicture := currentpicture shifted (0, -block_rest_y); + + pickup pencircle scaled ledgerlinethickness; + + y5 = y6 = 0; + lft x5 = -b - block_rest_y; + rt x6 = w + block_rest_y; + draw_gridline (z5, z6, ledgerlinethickness_rounded); + + draw_staff (-2, 2, -3); +fet_endchar; + + +fet_beginchar ("half rest (outside staff)", "1o"); + set_char_box (0, block_rest_x#, + ledgerlinethickness# / 2, block_rest_y#); + + block_rest; + + pickup pencircle scaled ledgerlinethickness; + + y5 = y6 = 0; + lft x5 = -b - block_rest_y; + rt x6 = w + block_rest_y; + + draw_gridline (z5, z6, ledgerlinethickness_rounded); + + draw_staff (-2, 2, 3); +fet_endchar; + + +fet_beginchar ("maxima rest", "M3"); + set_char_box (0, 3 breve_rest_x#, breve_rest_y#, breve_rest_y#); + + draw_block ((0, -breve_rest_y + feta_shift), + (breve_rest_x, breve_rest_y)); + + addto currentpicture also currentpicture shifted (2 breve_rest_x, 0); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("longa rest", "M2"); + set_char_box (0, breve_rest_x#, breve_rest_y#, breve_rest_y#); + + draw_block ((0, -breve_rest_y + feta_shift), + (breve_rest_x, breve_rest_y)); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("breve rest", "M1"); + set_char_box (0, breve_rest_x#, 0, breve_rest_y#); + + draw_block ((0, 0), (breve_rest_x, breve_rest_y)); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Quarter rest", "2"); + save alpha, yshift, height; + save xcenter; + + yshift# := -1.25 staff_space#; + height# := 2.8125 staff_space#; + define_pixels (yshift, height); + + alpha := -50; + thick := 1/4 staff_space; + rthin := 1.25 linethickness; + xcenter := -0.1 staff_space; + rthick := 2 thick + rthin; + + set_char_box (0, 0.95 staff_space#, -yshift#, yshift# + height#); + + save ne, nw, se, sw; + pair ne, nw, se, sw; + + se = dir alpha; + ne = dir (alpha + 90); + nw = dir (alpha + 180); + sw = dir (alpha + 270); + + penpos1 (rthin, alpha + 90); + penpos2 (5/4 rthick, alpha); + penpos4 (5/4 rthick, alpha); + penpos5 (rthin, alpha + 90); + penpos3 (3/4 rthick, alpha); +% penpos6 (5/8 rthick, alpha); + penpos6 (2/3 rthick, alpha); + penpos7 (1/2 rthin, alpha + 90); + + z10 = z2l + 1/2 rthin * sw; +% z11 = z4l + 1/2 rthin * sw; + z11 = z4l + 1/2 rthin * sw + 1/2 rthin * se; + z12 = z4r + 1/2 rthin * ne; +% z13 = z2r + 1/2 rthin * ne; + z13 = z2r + 1/2 rthin * ne + 1/2 rthin * nw; + + y1r = h; + x1l = xcenter + 1/3 staff_space; + z2r = z1 + staff_space * se; + z3 = 1/2 [z2, z4]; + x4 = xcenter + 3/8 staff_space; + y4 = 0; + y4l := vround y4l; + z5 = round (z4l + 1.3 staff_space * se) + feta_offset; + x6l = x4l; + y6l = vround y4r; + x6r := hround x6r + xpart feta_offset; + y6r := vround y6r + ypart feta_offset; + x7 = hround (xcenter + 2/5 staff_space) + xpart feta_offset; + y7 = -d; + + save before, after; + path before, after; + before = z11{se} + .. {se}z5l; + after = z5r{nw} + ..tension1.4.. z6l; + (u, v) = before intersectiontimes after; + + fill z1l{se} + .. {se}z10 + .. z3l + .. subpath (0, u) of before + .. subpath (v, infinity) of after + ..tension1.4.. {se}z7l + .. z7r{nw} + ..tension1.4.. z6r + ..tension1.4.. {se}z5l + .. z5r{nw} + .. {nw}z12 + .. z3r + .. z13{nw} + .. {nw}z1r + .. cycle; + + penlabels (1, 2, 3, 4, 5, 6, 7); + penlabels (10, 11, 12, 13); + + draw_staff (-2, 2, 0); +fet_endchar; + + +% +% Notes about 8th rest: +% +% * 8th rest should be no wider than the black note head +% +% * The inside corner of the horizontal portion is usually a little blotted. +% +% * The top of the crook chops off the vertical brush +% +% * The crook widens a little +% +% * The bottom of the brush is slightly flat, as it has to align with +% stafflines if it is inside the staff. +% +% * The top of the brush usually is a little lower than the top of bulb. +% +% * The bulb can vary. Sometimes it is open (like in the clefs). Sometimes +% it is closed, or even a flare. +% + +% from an email to Rune Zedeler: +% +% +% For example, the 8th rest was vaguely based on a book with trumpet +% studies by Duhem, and by Baerenreiters cello suites. I included my +% findings in a comment in the mf file. One of the things that I tried +% to do was make the rest a little lighter and narrower than the black +% note head. I think this looks better in polyphonic music, when the +% rest is below a head from a different voice. +% + +save bulb_diam, thin, thick; + +bulb_diam# := 0.64 staff_space#; +thin# := 1.4 linethickness# - 0.02 staff_space#; +thick# := 2.2 linethickness#; + +crook_thin := 0.5 linethickness + 0.08 staff_space; +lower_brush := 1.5 linethickness; + +define_pixels (bulb_diam); +define_whole_blacker_pixels (thin, thick); + + +% +% PAT is a compact way to pass the brush shape to the routine. +% + +def draw_rest_bulb (expr ycenter, ycut, pat, stretch, show_labels) = +begingroup; + save x, y, pt, res; + + z1l = point 0 of pat; + z2l = point 1 of pat; + z2r = point 3 of pat; + z1r = point 4 of pat; + z1 = 0.5 [z1l, z1r]; + z2 = 0.5 [z2l, z2r]; + y10 = ycenter; + z10 = whatever [z2, z1] + left * bulb_diam * stretch; + + % this enforces similar bulb shapes for lower resolutions + x10 := hround x10; + + z3 = z10 + bulb_diam / 2.15 * dir (-72); + y3 := hround y3; + z5 = z10 + up * bulb_diam / 2 + right * linethickness / 3; + y5 := hround y5; + + z7 = 0.5 [z4, z5] + crook_thin * (0.45, 0.4) / 1.3; + x8 = hround (x10 - 0.4 bulb_diam); + y8 = y10 + 0.25 linethickness; + + z6 = whatever [z1l, z2l]; + z6 = z3 + whatever * dir (12); + + z4 = z3 + whatever * (z6 - z3) + + 1.1 crook_thin * (unitvector (z6 - z3) rotated 90); + x4 = x10 + bulb_diam * .62; + y4 := vround y4; + + (pt, whatever) = pat intersectiontimes ((0, ycut) -- (w, ycut)); + + path res; + res = point pt of pat {-direction pt of pat} + ..tension 2.. z4{left} + ..tension 0.9.. z7 + .. z5{left} + .. z8 + .. z3{right} + .. {curl 0.2}z6; + + if show_labels = 1: + labels (3, 4, 5, 6, 7, 8, 10); + fi; + +res +endgroup; +enddef; + + +def draw_eighth_rest (expr show_labels) = + save ycenter; + save pat, bulb; + path pat, bulb; + + set_char_box (0, 1.0 staff_space#, + 1.0 staff_space# + 0.5 linethickness#, + 0.5 staff_space# + bulb_diam# / 2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -staff_space_rounded; + y2 = h - vround lower_brush; + x2r = w; + z2 = z1 + whatever * dir (72); + z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); + y9 := vround y9; + + x1l := hround x1l; + x1r := hround x1r; + x1 := .5 [x1l, x1r]; + + if show_labels = 1: + penlabels (1, 2); + labels (9); + fi; + + pat = z1l + -- z2l + .. z9 + .. z2r + -- z1r + .. cycle; + bulb = draw_rest_bulb (0.5 staff_space, y2r, pat, 1.0, show_labels); + + fill simple_serif (z1l, z1r, 40) + -- z2r + .. z9 + .. bulb + -- z1l + .. cycle; + + draw_staff (-2, 2, 0); +enddef; + + +fet_beginchar ("Classical quarter rest", "2classical"); + draw_eighth_rest (0); + currentpicture := currentpicture xscaled -1 shifted (w, 0); +fet_endchar; + + +fet_beginchar ("8th rest", "3"); + draw_eighth_rest (1); +fet_endchar; + + +% +% TODO: the X dimensions of the rests are fucked up: +% they can collide with augmentation dots. +% + +fet_beginchar ("16th rest", "4"); + save ycenter; + save pat, bulb_a, bulb_b; + path pat, bulb_a, bulb_b; + + set_char_box (0, 1.2 staff_space#, + 2.0 staff_space# + 0.5 linethickness#, + 0.5 staff_space# + bulb_diam# / 2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -2 staff_space_rounded; + y2 = h - vround lower_brush; + x2r = w; + z2 = z1 + whatever * dir (74); + z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); + y9 := vround y9; + + x1l := hround x1l; + x1r := hround x1r; + x1 := .5 [x1l, x1r]; + + pat = z1l + -- z2l + .. z9 + .. z2r + -- z1r + .. cycle; + bulb_a = draw_rest_bulb (.5 staff_space, + y2r, pat, 0.98, 1); + bulb_b = draw_rest_bulb (.5 staff_space - staff_space_rounded, + hround ((-0.5 + 0.2) * staff_space), + pat, 1.02, 1); + + fill simple_serif (z1l, z1r, 40) + -- z2r + .. z9 + .. bulb_a + -- bulb_b + -- z1l + .. cycle; + + penlabels (1, 2); + labels (9); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("32th rest", "5"); + save ycenter; + save pat, bulb_a, bulb_b, bulb_c; + path pat, bulb_a, bulb_b, bulb_c; + + set_char_box (0, 1.3 staff_space#, + 2.0 staff_space# + 0.5 linethickness#, + 1.5 staff_space# + bulb_diam# / 2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -2 staff_space_rounded; + y2 = h - vround lower_brush; + x2r = w; + z2 = z1 + whatever * dir (76); + z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); + y9 := vround y9; + + x1l := hround x1l; + x1r := hround x1r; + x1 := .5 [x1l, x1r]; + + pat = z1l + -- z2l + .. z9 + .. z2r + -- z1r + .. cycle; + bulb_a = draw_rest_bulb (.5 staff_space + staff_space_rounded, + y2r, pat, 0.96, 1); + bulb_b = draw_rest_bulb (.5 staff_space, + hround ((0.5 + 0.2) * staff_space), + pat, 1.00, 1); + bulb_c = draw_rest_bulb (.5 staff_space - staff_space_rounded, + hround ((-0.5 + 0.21) * staff_space), + pat, 1.04, 1); + + fill simple_serif (z1l, z1r, 40) + -- z2r + .. z9 + .. bulb_a + -- bulb_b + -- bulb_c + -- z1l + .. cycle; + + penlabels (1, 2); + labels (9); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("64th rest", "6"); + save ycenter; + save pat, bulb_a, bulb_b, bulb_c, bulb_d; + path pat, bulb_a, bulb_b, bulb_c, bulb_d; + + set_char_box (0, 1.4 staff_space#, + 3.0 staff_space# + 0.5 linethickness#, + 1.5 staff_space# + bulb_diam# / 2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -3 staff_space_rounded; + y2 = h - vround lower_brush; + x2r = w; + z2 = z1 + whatever * dir (78); + z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1) - 10); + y9 := vround y9; + + x1l := hround x1l; + x1r := hround x1r; + x1 := .5 [x1l, x1r]; + + pat = z1l + -- z2l + .. z9 + .. z2r + -- z1r + .. cycle; + bulb_a = draw_rest_bulb (.5 staff_space + staff_space_rounded, + y2r, pat, 0.94, 1); + bulb_b = draw_rest_bulb (.5 staff_space, + hround ((0.5 + 0.20) * staff_space), + pat, 0.98, 1); + bulb_c = draw_rest_bulb (.5 staff_space - staff_space_rounded, + hround ((-0.5 + 0.21) * staff_space), + pat, 1.02, 1); + bulb_d = draw_rest_bulb (.5 staff_space - 2 staff_space_rounded, + hround ((-1.5 + 0.22) * staff_space), + pat, 1.06, 1); + + fill simple_serif (z1l, z1r, 40) + -- z2r + .. z9 + .. bulb_a + -- bulb_b + -- bulb_c + -- bulb_d + -- z1l + .. cycle; + + penlabels (1, 2); + labels (9); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("128th rest", "7"); + save ycenter; + save pat, bulb_a, bulb_b, bulb_c, bulb_d, bulb_e; + path pat, bulb_a, bulb_b, bulb_c, bulb_d, bulb_e; + + set_char_box (0, 1.5 staff_space#, + 3.0 staff_space# + 0.5 linethickness#, + 2.5 staff_space# + bulb_diam# / 2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -3 staff_space_rounded; + y2 = h - vround lower_brush; + x2r = w; + z2 = z1 + whatever * dir (80); + z9 = z2 + 0.5 linethickness * dir (angle (z2 - z1)- 10); + y9 := vround y9; + + x1l := hround x1l; + x1r := hround x1r; + x1 := .5 [x1l, x1r]; + + pat = z1l + -- z2l + .. z9 + .. z2r + -- z1r + .. cycle; + bulb_a = draw_rest_bulb (.5 staff_space + 2 staff_space_rounded, + y2r, pat, 0.92, 1); + bulb_b = draw_rest_bulb (.5 staff_space + staff_space_rounded, + hround ((1.5 + 0.20) * staff_space), + pat, 0.96, 1); + bulb_c = draw_rest_bulb (.5 staff_space, + hround ((0.5 + 0.21) * staff_space), + pat, 1.0, 1); + bulb_d = draw_rest_bulb (.5 staff_space - staff_space_rounded, + hround ((-0.5 + 0.22) * staff_space), + pat, 1.04, 1); + bulb_e = draw_rest_bulb (.5 staff_space - 2 staff_space_rounded, + hround ((-1.5 + 0.23) * staff_space), + pat, 1.08, 1); + + fill simple_serif (z1l, z1r, 40) + -- z2r + .. z9 + .. bulb_a + -- bulb_b + -- bulb_c + -- bulb_d + -- bulb_e + -- z1l + .. cycle; + + penlabels (1, 2); + labels (9); + + draw_staff (-2, 2, 0); +fet_endchar; + + +fet_endgroup ("rests"); diff --git a/mf/feta-schrift.mf b/mf/feta-schrift.mf deleted file mode 100644 index 5bb7c1abdd..0000000000 --- a/mf/feta-schrift.mf +++ /dev/null @@ -1,1560 +0,0 @@ -% -*- Fundamental -*- (emacs-20 mf mode mucks -% feta-schrift.mf -- implement scripts -% -% source file of the Feta (defintively not an abbreviation for Font-En-Tja) -% music font -% -% (c) 1997--2009 Han-Wen Nienhuys -% Jan Nieuwenhuizen -% - - -fet_begingroup ("scripts"); - -def draw_fermata = - save alpha, radius, crook_thinness, crook_fatness, dot_size; - save pat; - path pat; - - % [Wanske] and some Baerenreiter editions - % suggest about 80 degrees instead of a half-circle - alpha := 10; - - radius# = 1.25 staff_space#; - crook_thinness# = 1.5 linethickness#; - crook_fatness# = 0.25 staff_space# + 1.5 linethickness#; - - radius# + crook_fatness# / 2 = h#; - radius# + crook_thinness# / 2 = w#; - - set_char_box (w#, w#, crook_thinness# / 2, h#); - - define_pixels (radius, crook_thinness, crook_fatness); - - dot_size# = 8/6 crook_fatness#; - define_whole_blacker_pixels (dot_size); - - penpos1 (crook_thinness, 0); - penpos2 (crook_fatness, -90); - z1 = (-radius, 0); - z2 = (0, radius); - - pat := z2l{left} - .. z1l{dir (-alpha - 90)} - .. {dir (90 - alpha)}z1r - .. {right}z2r; - pat := pat - -- reverse pat xscaled -1 shifted (-feta_eps, 0) - -- cycle; - fill pat; - - pickup pencircle scaled dot_size; - x4 = 0; - bot y4 = vround (-crook_thinness / 2); - drawdot z4; -enddef; - - -fet_beginchar ("fermata up", "ufermata"); - draw_fermata; - penlabels (1, 2, 4); -fet_endchar; - - -fet_beginchar ("fermata down", "dfermata"); - draw_fermata; - y_mirror_char; -fet_endchar; - - -def draw_short_fermata = - save fat_factor, thinness, dot_size; - save left_dist, right_dist, se, ne; - pair left_dist, right_dist, se, ne; - - set_char_box (staff_space#, staff_space#, 0, 2.2 staff_space#); - - dot_size# = 0.266 staff_space# + 2.666 linethickness#; - define_whole_blacker_pixels (dot_size); - - fat_factor = .11; - thinness = 1.5 linethickness; - - pickup pencircle scaled thinness; - - rt x2 = w; - lft x5 = -b; - bot y5 = 0; - top y3 = h; - y1 = y2 = y5; - - x3 = 0; - z1 - z4 = whatever * (charwd, -charht); - z4 = fat_factor [z3, z5]; - - ne = unitvector (z3 - z5); - se = unitvector (z2 - z3); - - left_dist = (ne rotated 90) * 0.5 thinness; - right_dist = (se rotated 90) * 0.5 thinness; - - fill bot z5{right} - .. (z5 - left_dist){ne} - -- (((z5 - left_dist) -- (z3 - left_dist)) intersectionpoint - ((z1 - right_dist) -- (z4 - right_dist))) - -- (z1 - right_dist){se} - .. bot z1{right} - -- bot z2{right} - .. (z2 + right_dist){-se} - -- (z3 + right_dist){-se} - .. top z3 - .. (z3 + left_dist){-ne} - -- (z5 + left_dist){-ne} - .. cycle; - - pickup pencircle scaled dot_size; - - x1 - 2 x6 = x2; - x6 := vround (x6); - bot y6 = -d; - - drawdot z6; -enddef; - -fet_beginchar ("short fermata up", "ushortfermata"); - draw_short_fermata; - labels (1, 2, 3, 4, 5, 6); -fet_endchar; - - -fet_beginchar ("short fermata down", "dshortfermata"); - draw_short_fermata; - xy_mirror_char; -fet_endchar; - - -def draw_long_fermata = - save stemthick, beamheight, dot_size, wd; - save pat; - path pat; - - wd# = 2.5 staff_space#; - stemthick = hround (1.5 linethickness); - beamheight = 0.3 staff_space + linethickness; - dot_size# = 0.266 staff_space# + 2.666 * linethickness#; - define_pixels (wd); - define_whole_blacker_pixels (dot_size); - - set_char_box (wd# / 2, wd# / 2, 0, 3/2 staff_space#); - - pickup pencircle scaled blot_diameter; - - top y1 = h; - lft x1 = -b; - - pat := top z1{left} - .. {down}lft z1; - - pickup pencircle scaled stemthick; - - x2 = -b + stemthick; - y2 = h - beamheight; - lft x3 = -b; - bot y3 = -d; - - pat := pat - -- lft z3 - .. bot z3 - .. rt z3 - -- z2; - pat := pat - -- reverse pat xscaled -1 shifted (-feta_eps, 0) - -- cycle; - - fill pat; - - pickup pencircle scaled dot_size; - - x4 = 0; - bot y4 = -d; - - drawdot z4; -enddef; - - -fet_beginchar ("long fermata up", "ulongfermata"); - draw_long_fermata; - labels (1, 2, 3, 4); -fet_endchar; - - -fet_beginchar ("long fermata down", "dlongfermata"); - draw_long_fermata; - y_mirror_char; -fet_endchar; - - -def draw_very_long_fermata = - save ibeamheight, obeamheight; - save ihwd, ohwd, iht, oht; % inner/outer half_width/height - save stemthick, dot_size; - save opat, ipat; - path opat, ipat; - - ihwd# = 1.0 staff_space#; - ohwd# = 1.5 staff_space#; - iht# = 0.9 staff_space#; - oht# = 1.6 staff_space#; - define_pixels (ihwd, ohwd, iht, oht) - - stemthick = hround (1.5 linethickness); - ibeamheight# = 0.3 staff_space#; - obeamheight# = 0.5 staff_space#; - define_pixels (ibeamheight, obeamheight); - - dot_size# = (iht# - ibeamheight#) * 8/10; - define_whole_blacker_pixels (dot_size); - - set_char_box (ohwd#, ohwd#, 0, oht#); - - pickup pencircle scaled blot_diameter; - - top y1 = oht; - lft x1 = -ohwd; - top y11 = iht; - lft x11 = -ihwd; - - opat := top z1{left} - .. {down}lft z1; - ipat := top z11{left} - .. {down}lft z11; - - pickup pencircle scaled stemthick; - - x2 = -ohwd + stemthick; - y2 = oht - obeamheight; - lft x3 = -ohwd; - bot y3 = 0; - x12 = -ihwd + stemthick; - y12 = iht - ibeamheight; - lft x13 = -ihwd; - bot y13 = 0; - - opat := opat - -- lft z3 - .. bot z3 - .. rt z3 - -- z2; - opat := opat - -- reverse opat xscaled -1 shifted (-feta_eps, 0) - -- cycle; - ipat := ipat - -- lft z13 - .. bot z13 - .. rt z13 - -- z12; - ipat := ipat - -- reverse ipat xscaled -1 shifted (-feta_eps, 0) - -- cycle; - - fill opat; - fill ipat; - - pickup pencircle scaled dot_size; - - x4 = 0; - bot y4 = -d; - - drawdot z4; -enddef; - - -fet_beginchar ("very long fermata up", "uverylongfermata"); - draw_very_long_fermata; - labels (1, 2, 3, 11, 12, 13, 4); -fet_endchar; - - -fet_beginchar ("very long fermata down", "dverylongfermata"); - draw_very_long_fermata; - y_mirror_char; -fet_endchar; - - -% -% Thumbs are used in cello music. -% TODO : thumbs should look like the finger-font and should be placed in -% the same way in the score. -% - -fet_beginchar ("Thumb", "thumb"); - save thin, height, width, thick, depth; - height# = 5/4 width#; - height# = staff_space#; - depth# = 1.6 (height# / 2); - - set_char_box (width# / 2, width# / 2, depth#, height# / 2); - - define_pixels (height, width); - - thin = .6 linethickness + 0.06 staff_space; - 2 thick + 0.5 (height - 2 thin) = width; - - penpos1 (thick, 0); - penpos2 (thin, 90); - penpos3 (thick, 180); - penpos4 (thin, 270); - z1r = (w, 0); - z2r = (0, h); - z3r = (-w, 0); - z4r = (0, -h); - - penlabels (1, 2, 3, 4); - - penstroke z1e{up} - .. z2e{left} - .. z3e{down} - .. z4e{right} - .. cycle; - - save brush_thick; - y5 = -d + brush_thick / 2; - brush_thick = 0.9 thick; - x5 = 0; - - labels (5); - - draw_brush (z4r, 1.4 thin, z5, brush_thick); -fet_endchar; - - -% -% `\accent' is TeX reserved. -% - -def draw_accent (expr bottom_left, top_right, thickness, diminish) = - save thinning_start; - thinning_start = 0.4; - pickup pencircle scaled thickness; - - lft x1 = xpart bottom_left; - top y1 = ypart top_right; - lft x6 = xpart bottom_left; - bot y6 = ypart bottom_left; - - rt z4 = (xpart top_right, (ypart top_right + ypart bottom_left) / 2); - x5 = x3 = thinning_start [xpart top_right, xpart bottom_left] - - linethickness + 0.1 staff_space; - z3 = whatever [z1, z4]; - z5 = whatever [z6, z4]; - - penpos1 (thickness, angle (z3 - z1) + 90); - penpos3 (thickness, angle (z3 - z1) + 90); - penpos4 (thickness, 90); - penpos5 (thickness, angle (z6 - z5) + 90); - penpos6 (thickness, angle (z6 - z5) + 90); - - x4 - x7 = diminish * thickness; - y7 = y4; - - fill z1l - -- z3l - -- z7 - -- z5l - -- z6l - .. lft z6{down} - .. bot z6 - .. z6r - -- z4l - ..tension 0.8.. rt z4 - ..tension 0.8.. z4r - -- z1r - .. top z1 - .. lft z1{down} - .. cycle; -enddef; - - -fet_beginchar ("> accent", "sforzato"); - set_char_box (.9 staff_space#, .9 staff_space#, - .5 staff_space#, .5 staff_space#); - - draw_accent ((-w, -d), (w, h), - 0.05 staff_space + linethickness, 0.7); - penlabels (1, 3, 4, 5, 6); - labels (7); -fet_endchar; - - -fet_beginchar ("espr", "espr"); - set_char_box (1.9 staff_space#, 1.9 staff_space#, - .5 staff_space#, .5 staff_space#); - - draw_accent ((w - 1.78 staff_space, -d), (w, h), - 0.05 staff_space + linethickness, 0.6); - addto currentpicture also currentpicture xscaled -1; -fet_endchar; - - -fet_beginchar ("staccato dot", "staccato"); - save radius; - radius# = 0.20 * staff_space#; - define_whole_pixels (radius); - - pickup pencircle scaled 2 radius; - drawdot (0, 0); - - set_char_box (radius#, radius#, radius#, radius#); -fet_endchar; - - -def draw_staccatissimo = - save radius, height; - height# = .8 staff_space#; - radius# = linethickness# + .1 staff_space#; - define_whole_blacker_pixels (radius); - define_pixels (height); - - draw_brush ((0, 0), linethickness, (0, height), 2 radius); - - set_char_box (radius#, radius#, - blot_diameter# / 2, height# + radius#); -enddef; - - -fet_beginchar ("staccatissimo/martellato up", "ustaccatissimo"); - draw_staccatissimo; -fet_endchar; - - -fet_beginchar ("staccatissimo/martellato down", "dstaccatissimo"); - draw_staccatissimo; - y_mirror_char; -fet_endchar; - - -fet_beginchar ("portato/single tenuto", "tenuto"); - save thick; - thick# = 1.6 linethickness#; - define_whole_blacker_pixels (thick); - - set_char_box (.6 staff_space#, .6 staff_space#, - thick# / 2, thick# / 2); - - draw_rounded_block ((-b, -thick / 2), (w, thick / 2), thick); -fet_endchar; - - -def draw_portato = - save thick, dot_size; - thick# = 1.4 linethickness#; - dot_size# = 2.4 linethickness# + 0.08 staff_space#; - define_whole_blacker_pixels (thick, dot_size); - - set_char_box (.6 staff_space#, .6 staff_space#, - thick# / 2, .5 staff_space# + .5 dot_size#); - - draw_rounded_block ((-b, -thick / 2), (w, thick / 2), thick); - - pickup pencircle scaled dot_size; - drawdot (0, h); -enddef; - - -fet_beginchar ("portato/tenuto with staccato", "uportato"); - draw_portato; -fet_endchar; - - -fet_beginchar ("portato/tenuto with staccato", "dportato"); - draw_portato; - y_mirror_char -fet_endchar; - - -def draw_marcato = - save fat_factor, thinness; - save left_dist, right_dist, ne, se; - pair left_dist, right_dist, ne, se; - - set_char_box (staff_space# / 2, staff_space# / 2, - 0, 1.1 staff_space#); - - fat_factor = .3; - thinness = linethickness; - - pickup pencircle scaled thinness; - - rt x2 = w; - lft x5 = -b; - bot y5 = 0; - top y3 = h; - y1 = y2 = y5; - - x3 =0; - z1 - z4 = whatever * (charwd, -charht); - z4 = fat_factor [z3, z5]; - - ne = unitvector (z3 - z5); - se = unitvector (z2 - z3); - - left_dist = (ne rotated 90) * 0.5 thinness; - right_dist = (se rotated 90) * 0.5 thinness; - - fill bot z5{right} - .. (z5 - left_dist){ne} - -- (((z5 - left_dist) -- (z3 - left_dist)) intersectionpoint - ((z1 - right_dist) -- (z4 - right_dist))) - -- (z1 - right_dist){se} - .. bot z1{right} - -- bot z2{right} - .. (z2 + right_dist){-se} - -- (z3 + right_dist){-se} - .. top z3 - .. (z3 + left_dist){-ne} - -- (z5 + left_dist){-ne} - .. cycle; -enddef; - - -fet_beginchar ("marcato up", "umarcato"); - draw_marcato; - labels (1, 2, 3, 4, 5); -fet_endchar; - - -% -% The down marcato char (not very much used). -% Contrary to what some MF/TeX `gurus' believe -% it is *point*-symmetric with the "up" version -% - -fet_beginchar ("marcato down", "dmarcato"); - draw_marcato; - xy_mirror_char; -fet_endchar; - - -% -% used in french horn music todo -% -% TODO: too light at 20pt -% - -fet_beginchar ("open (unstopped)", "open"); - save thin, height, width, thick; - - height# = 5/4 width#; - height# = staff_space#; - thin = .6 linethickness + 0.06 staff_space; - - set_char_box (width# / 2, width# / 2, height# / 2, height# / 2); - - define_pixels (width, height); - - 2 thick + 0.6 (height - 2 thin) = width; - - penpos1 (thick, 0); - penpos2 (thin, 90); - penpos3 (thick, 180); - penpos4 (thin, 270); - z1r = (w, 0); - z2r = (0, h); - z3r = (-w, 0); - z4r = (0, -h); - - penlabels (1, 2, 3, 4); - - penstroke z1e{up} - .. z2e{left} - .. z3e{down} - .. z4e{right} - .. cycle; -fet_endchar; - - -fet_beginchar ("plus (stopped)", "stopped"); - save hthick, vthick, size, outer_hsize, outer_vsize; - - hthick# = vthick# = 2 linethickness#; - size# = 1.1 staff_space#; - define_whole_blacker_pixels (vthick); - define_whole_vertical_blacker_pixels (hthick); - - set_char_box (size# / 2, size# / 2, size# / 2, size# / 2); - - outer_hsize = hround ((b + w - vthick) / 2); - outer_vsize = vround ((h + d - hthick) / 2); - w := b := (2 outer_hsize + vthick) / 2; - h := d := (2 outer_vsize + hthick) / 2; - - draw_rounded_block ((-b, -d + outer_vsize), - (w, -d + outer_vsize + hthick), hthick); - draw_rounded_block ((-b + outer_hsize, -d), - (-b + outer_hsize + vthick, h), vthick); -fet_endchar; - - -fet_beginchar ("Upbow", "upbow"); - save ht, wd, thick; - - thick = 1.4 linethickness; - wd# = 1.3 staff_space#; - ht# = 1.6 wd#; - - set_char_box (wd# / 2, wd# / 2, 0, ht#); - - draw_accent ((-h, -w), (0, w), thick, 0.9); - currentpicture := currentpicture rotated -90; -fet_endchar; - - -fet_beginchar ("Downbow", "downbow"); - save stemthick, beamheight, wd; - save pat; - path pat; - - wd# = 1.5 staff_space#; - define_pixels (wd); - - stemthick = hround (1.2 linethickness); - - set_char_box (wd# / 2, wd# / 2, 0, 4/3 staff_space#); - - beamheight = 4/10 h; - - pickup pencircle scaled blot_diameter; - - top y1 = h; - lft x1 = -b; - - pat := top z1{left} - .. {down}lft z1; - - pickup pencircle scaled stemthick; - - x2 = -b + stemthick; - y2 = h - beamheight; - lft x3 = -b; - bot y3 = -d; - - pat := pat - -- lft z3 - .. bot z3 - .. rt z3 - -- z2; - pat := pat - -- reverse pat xscaled -1 shifted (-feta_eps, 0) - -- cycle; - - fill pat; - - labels (1, 2, 3); -fet_endchar; - -% -% Inspired by a computer-set version of Auf dem Strom by Baerenreiter. -% - -def draw_turn = - save thin, thick, ball_diam, darkness; - save wd, ht, thick_nibangle, ball_nib_thick; - save turndir; - pair turndir; - - wd# = 35/16 staff_space#; - ht# = 18/17 staff_space#; - darkness = 0.3 linethickness + 0.09 staff_space; - - set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2); - - thick_nibangle = 60; - thick = 3 darkness; - thin = darkness; - ball_nib_thick = 2.7 darkness; - ball_diam = ball_nib_thick + (h - ball_nib_thick) / 10; - - x3l = w; - y3 = 0; - y4l = h; - x4 = x2; - x2l = w / 2; - y2l = -d; - z1 = (0,0); - - penpos1 (1.1 thick, thick_nibangle); - penpos2 (thick, thick_nibangle); - penpos3 (thin, 180); - penpos4 (ball_nib_thick, -90); - - path swoosh, ploop; - swoosh := z1l{curl 0} - .. z2l - .. z3l{up} - .. {left}z4l - -- z4r - .. z3r{down} - .. z2r{left}; - fill swoosh - .. swoosh scaled -1 shifted (-feta_eps, -feta_eps) - .. cycle; - - x5r = x4; - y5r = y4l - ball_diam / 2; - z6r = z5r; - - penpos5 (1.6 ball_diam / 2, 10); - penpos6 (ball_diam / 2, 150); - - ploop := z4l{left} - .. z5l - .. z6l - -- cycle; - fill ploop; - fill ploop scaled -1 shifted (-feta_eps, -feta_eps); -enddef; - - -fet_beginchar ("Reverse turn", "reverseturn"); - draw_turn; - currentpicture := currentpicture yscaled -1; -fet_endchar; - - -fet_beginchar ("Turn", "turn"); - draw_turn; - penlabels (1, 2, 3, 4, 5, 6, 7); -fet_endchar; - - -% -% Inspired by a (by now) PD edition of Durand & C'ie edition of -% Saint-Saens' Celloconcerto no. 1 -% -% FIXME take out hardcoded vars. -% FIXME the two loops on the `t' should be smoother (and the left one bigger). -% FIXME generic macros for serifs: top of the t and bottom of r -% - -fet_beginchar ("Trill (`tr')", "trill"); - save start_nib_angle, ascender_extra, ex, hair_thick, fatness; - save slant, t_fatness, r_fatness, kerning, t_overshoot; - save uitschieter, bulb_size, krul_ang; - save u, v; - - ascender_extra# = 1/2 ex#; - ascender# = ascender_extra# + ex#; - ex# = 1.4 staff_space#; - kerning# = 0.6 ex#; - start_nib_angle = 20; - bulb_size = 0.8; - define_pixels (ex, ascender_extra, ascender, kerning); - - t_overshoot = 0.03 ex; - fatness = 12/40 ex; - t_fatness = 0.78 fatness; - t_width = 1.9 t_fatness; - r_fatness = 0.78 fatness; - uitschieter = 0.48 ex; - hair_thick = linethickness; - r_flare = .5 hair_thick + 0.25 r_fatness; - r_width = 2 r_fatness + 0.25 kerning; - slant = .2; - - local_copy (transform)(currenttransform); - currenttransform := currenttransform slanted slant - shifted (-staff_space, 0); - - set_char_box (.85 staff_space#, .85 staff_space#, 0, ascender#); - - y1 = ascender; - - % try to position in such a way that the center is the visual - % center - - x1l = 0.2 staff_space; - x1r - x1l = t_fatness; - penpos1 (start_nib_wid, start_nib_angle); - - z2 = (x1, 7/18 ex); - penpos2 (start_nib_wid, start_nib_angle); - - z3l = (x2l + 0.5 t_width, - t_overshoot); - - z4l = (x2l + t_width, 0.23 ex); - penpos4 (whatever, 180); % 200 - x4l - x4r = hair_thick; - - x3r = 0.5 [x4r, x2r]; -% 1.7 [x3l, x3r] = x4r; - y3r - y3l = 0.6 t_fatness; - - save krul_p; - path krul_p; - - krul_ang = 32; - - pickup pencircle scaled hair_thick; - - z5 = (x2l + t_fatness / 2, 2/3 ex); - lft x6 = x2l - uitschieter; - y6 = y5; % - 1/20 ex; - z7 = z5 + whatever * dir krul_ang; - up_angle = krul_ang; % = angle (z7-z5) - x7 = 5/10 kerning + x5; - - krul_p := z4{up} - ..tension 0.98.. z5 - .. z6 - .. z5{z7 - z5} - -- z7; - - z4' = point 0.85 of krul_p; - penpos4' (hair_thick, angle (direction 0.85 of krul_p) + 90); - - % the body of the `t' and the bottom loop - fill z1r{dir (angle (z1l - z1r) + 30)} - .. z1l{-dir (angle (z1r - z1l) - 45)} - -- z2l{down} - ..tension (1 + .5 slant).. z3l{right} - .. z4l{up} - .. z4'l{direction 0.85 of krul_p} - -- z4'r{-direction 0.85 of krul_p} - .. z4r{down} - .. z3r{left} - ..tension (1.5 + .7 slant).. z2r{up} - -- cycle; - - z5' = point 1.1 of krul_p; - penpos5' (hair_thick, angle (direction 1.1 of krul_p) + 90); - z5'' = point 1.5 of krul_p; - penpos5'' (hair_thick, angle (direction 1.5 of krul_p) + 90); - z5''' = point 1.8 of krul_p; - penpos5''' (hair_thick, angle (direction 1.8 of krul_p) + 90); - z6 = point 2 of krul_p; - penpos6 (hair_thick, angle (direction 2 of krul_p) + 90); - z6' = point 2.3 of krul_p; - penpos6' (hair_thick, angle (direction 2.3 of krul_p) + 90); - z6'' = point 2.6 of krul_p; - penpos6'' (hair_thick, angle (direction 2.6 of krul_p) + 90); - z6''' = point 2.9 of krul_p; - penpos6''' (hair_thick, angle (direction 2.9 of krul_p) + 90); - penpos7 (hair_thick, up_angle + 90); - z7' = point 3.2 of krul_p; - penpos7' (hair_thick, angle (direction 3.2 of krul_p) + 90); - - % the left loop - penstroke z5'e{direction 1.1 of krul_p} - .. z5''e{direction 1.5 of krul_p} - .. z5'''e{direction 1.8 of krul_p} - .. z6e{direction 2 of krul_p} - .. z6'e{direction 2.3 of krul_p} - .. z6''e{direction 2.6 of krul_p} - .. {direction 2.9 of krul_p}z6'''e; - - y9 = 3/4 ex; - x9 = x1 + kerning; - penpos9 (r_fatness, 0); - - x10 = x9; - y10 = -0.3 linethickness; - penpos10 (r_fatness, 0); - - penpos11 (hair_thick, -4); - z11r = z9r; - - z13l = (x9l + r_width, y11 - linethickness); - penpos13 (r_flare, 180); - - z15 = z13r - (bulb_size * r_fatness, 0); - z14 = 0.5 [z13l, z15] - (0, bulb_size * r_fatness); - - save before, after; - path before, after; - before := z13l{up} - .. {down}z11l; - after := z9r{up} - .. z7r{z7' - z7} - -- z7'r; - (u, v) = before intersectiontimes after; - - save before_bulb, after_bulb; - path before_bulb, after_bulb; - before_bulb := z9r{up} - ..tension 0.94.. z13r{down}; - after_bulb := z13l{up} - ..tension 1.06.. z15{down}; - (u_bulb, v_bulb) = before_bulb intersectiontimes after_bulb; - - % the connection between `t' and `r', the body of the `r', - % and the bulb - fill z7'l - -- z7l{z7 - z7'} - .. z9l{down} - -- simple_serif (z10l, z10r, -30) - -- z9r{up} - .. subpath (0, u_bulb) of before_bulb - .. subpath (v_bulb, infinity) of after_bulb - .. z14 - .. z13l{up} - .. subpath (0, u) of before - .. subpath (v, infinity) of after - -- cycle; - - penlabels (range 1 thru 15); - penlabels (4', 5', 5'', 5''', 6', 6'', 6''', 7'); -fet_endchar; - - -def draw_heel = - save radius, thickness; - save pat; - path pat; - - radius# := .5 staff_space#; - - set_char_box (radius#, radius#, radius#, 2/3 staff_space#); - - thickness := hround (1.5 linethickness); - - pickup pencircle scaled thickness; - - rt x1 = b; - top y1 = h; - - x2 =x1; - y2 = 0; - - x3 = 0; - bot y3 = -d; - - pat := top z3{right} - .. lft z2{up} - -- lft z1 - .. top z1 - .. rt z1 - -- rt z2{down} - .. bot z3{left}; - pat := pat - -- reverse pat xscaled -1 shifted (-feta_eps, 0) - -- cycle; - fill pat; -enddef; - - -fet_beginchar ("left heel", "upedalheel"); - draw_heel; - labels (1, 2, 3); -fet_endchar; - - -fet_beginchar ("right heel", "dpedalheel"); - draw_heel; - y_mirror_char; -fet_endchar; - - -def draw_toe = - save ht, wd, thickness; - - thickness := 1.5 linethickness; - ht# := 1.5 staff_space#; - wd# := 1/3 ht#; - define_pixels (ht, wd); - - set_char_box (wd#, wd#, 0, ht#); - draw_accent ((-h, -w), (0, w), thickness, 0.9); - currentpicture := currentpicture rotated -90; -enddef; - - -fet_beginchar ("left toe", "upedaltoe"); - draw_toe; -fet_endchar; - - -fet_beginchar ("right toe", "dpedaltoe"); - draw_toe; - y_mirror_char; -fet_endchar; - - -fet_beginchar ("Flageolet", "flageolet"); - save height, width, thickness, superness; - - height# = 4/15 staffsize#; - width# = height#; - thickness# = blot_diameter#; - define_pixels (height, width); - define_whole_blacker_pixels (thickness); - - set_char_box (width# / 2, width# / 2, height# / 2, height# / 2); - - penpos1 (thickness, 90); - penpos2 (thickness, 180); - penpos3 (thickness, 270); - penpos4 (thickness, 0); - - x1 = 0; - y1r = h; - x4r = w; - x2r = -x4r; - y2 = 0; - y4 = y2; - x3 = x1; - y3r = -y1r; - - penlabels (1, 2, 3, 4); - - % mf doesn't handle pixel dropouts in outline objects, so we use - % `draw' if not called by mpost - if known miterlimit: - penstroke z1e - .. z2e - .. z3e - .. z4e - .. cycle; - else: - pickup pencircle scaled thickness; - draw z1 - .. z2 - .. z3 - .. z4 - .. cycle; - fi; -fet_endchar; - - -% -% TODO: ARGRGHGH code dup. -% - -fet_beginchar ("Segno", "segno"); - save thin, thick, ball_diam, darkness, pointheight; - save wd, ht, thick_nibangle, ball_nib_thick; - save turndir; - pair turndir; - - ht# = 3 staff_space#; - wd# = 2 staff_space#; - darkness = .08 staff_space + 0.4 linethickness; - - set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2); - - thick_nibangle = 30; - thick = 3 darkness; - thin = darkness; - ball_nib_thick = 2.7 darkness; - ball_diam = ball_nib_thick + (w - ball_nib_thick) / 10; - pointheight = 2 linethickness; - - y3l = h; - 2 x3 = x2 + x4; - x4 = 0; - y4 = y2; - y2l = .6 h; - x2l = -b; - z1 = (0, 0); - - penpos1 (thick, 2 thick_nibangle); - penpos2 (thick, thick_nibangle); - penpos3 (thin, -90); - penpos4 (ball_nib_thick, 180 - thick_nibangle); - - save swoosh, ploop; - path swoosh, ploop; - - swoosh := z1l{curl 0} - .. z2l - .. z3l{right} - .. {down}z4l - -- z4r - .. z3r{left} - .. z2r{down}; - fill swoosh - .. (swoosh scaled -1) - .. cycle; - - y5r = y4; - x5r = x4l - ball_diam / 2; - z6r = z5r; - - penpos5 (1.6 ball_diam / 2, 100); - penpos6 (ball_diam / 2, 240); - - ploop := z4l{down} - .. z5l - .. z6l - -- cycle; - fill ploop; - fill ploop scaled -1; - - penpos7 (2 thin, 0); - z7l = (-b, -d); - penpos8 (2 thin, 0); - z8r = (w, h); - - penstroke z7e - -- z8e; - - pickup pencircle scaled 2 thin; - drawdot (-x2r, pointheight); - drawdot (x2r, -pointheight); - - penlabels (range 1 thru 8); -fet_endchar; - - -fet_beginchar ("Coda", "coda"); - save stickout, thin, thick, codawidth, codaheight; - - stickout# = 0.35 staff_space#; - codawidth# = 2/3 staff_space#; - codaheight# = staff_space#; - define_pixels (codawidth, codaheight); - - set_char_box (codawidth# + stickout#, codawidth# + stickout#, - codaheight# + stickout#, codaheight# + stickout#); - - thin = 1.2 linethickness; - 0.1 (codaheight - 2 thin) = (codawidth - 2 thick); - - penpos1 (thick, 0); - penpos2 (thin, -90); - penpos3 (thick, -180); - penpos4 (thin, -270); - - x1l = -codawidth; - y2l = codaheight; - y1 = 0; - x2 = 0; - z3 = -z1; - z4 = -z2; - - penlabels (1, 2, 3, 4); - - fill z1l{up} - .. z2l{right} - .. z3l{down} - .. z4l{left} - .. cycle; - unfill z1r{up} - .. z2r{right} - .. z3r{down} - .. z4r{left} - .. cycle; - - draw_gridline ((0, -h), (0, h), thin); - draw_gridline ((-w, 0), (w, 0), thin); -fet_endchar; - - -fet_beginchar ("Varied Coda", "varcoda"); - save thin, thick, codawidth, codaheight; - thin# = 1.2 linethickness#; - thick# = 1.0 linethickness# + 0.25 staff_space#; - codawidth# = 2/3 staff_space#; - codaheight# = staff_space#; - define_pixels (thin, thick, codawidth, codaheight); - - set_char_box (codawidth# + thick#, codawidth# + thick#, - codaheight# + thick#, codaheight# + thick#); - - x1 = -codawidth + thick - .5 blot_diameter; - y1 = y2 - thin; - x2 = codawidth - thick + .5 blot_diameter; - y2 = codaheight; - draw_square_block (z1, z2); - - x3 = -codawidth; - y3 = -codaheight; - x4 = x3 + thick; - y4 = y2; - draw_block (z3, z4); - - labels (1, 2, 3, 4); - - addto currentpicture also currentpicture scaled -1; - - draw_gridline ((0, -h), (0, h), thin); - draw_gridline ((-w, 0), (w, 0), thin); -fet_endchar; - - -def draw_comma = - save alpha, thick, thin, ht; - - alpha := 35; - thin# = 1.2 linethickness#; - thick# = 3 linethickness#; - ht# = .6 staff_space#; - define_pixels (thin, thick, ht); - - set_char_box (0, .5 staff_space#, ht#, ht#); - - penpos1 (thick, alpha); - penpos2 (thick, alpha + 90); - penpos3 (thin, 180 - alpha); - penpos4 (thin, 90 - alpha); - - x3r = 0; - x1l = x3l; - y2r = -y4l = h; - z1 = z2; - z3 = z4; - - fill z1l{dir (alpha + 90)} - .. z2r{dir alpha} - .. z1r{dir (alpha - 90)} - .. z3l{dir (270 - alpha)} - .. z4l{dir (180 - alpha)} - .. z3r{dir (90-alpha)} - .. cycle; -enddef; - - -fet_beginchar ("Right Comma", "rcomma"); - draw_comma; - penlabels (1, 2, 3, 4); -fet_endchar; - - -fet_beginchar ("Left Comma", "lcomma"); - draw_comma; - xy_mirror_char; -fet_endchar; - - -def draw_varcomma = - save thick, thin, ht, wd, alpha; - - alpha := 35; - thin# = 1.2 linethickness#; - thick# = 3 linethickness#; - ht# = .6 staff_space#; - wd# = .25 staff_space#; - define_pixels (thin, thick, ht, alpha); - - set_char_box (wd#, wd#, ht#, ht#); - - z1 = (-b, -d); - z2 = (w, h); - - draw_brush (z1, thin, z2, thick); -enddef; - - -fet_beginchar ("Right Varied Comma", "rvarcomma"); - draw_varcomma; - labels (1, 2); -fet_endchar; - - -fet_beginchar ("Left Varied Comma", "lvarcomma"); - draw_varcomma; - xy_mirror_char; -fet_endchar; - - -thick# := 1/24 designsize; -define_blacker_pixels (thick); - -rthin := 0.075 * staff_space + 0.5 linethickness; -rthick := 2 thick + rthin; - - -def draw_arpeggio = - save alpha; - save ne, nw, se, sw; - save x, y; - pair ne, nw, se, sw; - - alpha := -40; - - nw = dir (alpha + 180); - ne = dir (alpha + 90); - se = dir alpha; - sw = dir (alpha - 90); - - penpos1 (rthin, alpha + 90); - penpos2 (5/4 rthick, alpha); - penpos3 (3/4 rthick, alpha); - penpos4 (5/4 rthick, alpha); - penpos5 (rthin, alpha + 90); - - z1 = (width / 2, height) - overshoot * se; - z2 = 2 [z4, (width / 2, height / 2)]; - z3 = 1/2 [z2, z4]; - x4 = 2/8 staff_space; - y4 = rthin; - - z5 = 2 [z1, (width / 2, height / 2)]; - z6 = z2l + 1/2 rthin * sw; - z7 = z4l + 1/2 rthin * sw + 1/2 rthin * se; - z8 = 2 [z6, (width / 2, height / 2)]; - z9 = 2 [z7, (width / 2, height / 2)]; - - fill z1l{se} - -- z6 - .. z3l - .. z7{se} - -- z5l - .. z5r{nw} - -- z8 - .. z3r - .. z9{nw} - -- z1r - .. cycle; -enddef; - - -fet_beginchar ("Arpeggio", "arpeggio"); - save height, overshoot, width; - 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); -fet_endchar; - - -% -% Extendable Trill symbol. -% Not yet used -% Rename me to Trill, rename Trill to Tr? -% - -fet_beginchar ("Trill_element", "trill_element"); - save height, overshoot; - height# = staff_space#; - width# = 0.8 height#; - overshoot# = 0.25 staff_space#; - define_pixels (height, overshoot, width); - - set_char_box (0, height#, 0, width#); - draw_arpeggio; - - currentpicture := currentpicture shifted -(width / 2, height / 2); - currentpicture := currentpicture rotated 90; - currentpicture := currentpicture shifted (height / 2, width / 2); -fet_endchar; - - -% -% Arpeggio arrow by Chris Jackson -% - -def draw_arpeggio_arrow = - save thinness, height, width, overshoot; - save nw, ne, se, sw; - save alpha; - save before_left, before_right, after_left, after_right; - save u_left, v_left, u_right, v_right; - pair nw, ne, se, sw; - path before_left, before_right, after_left, after_right; - - height# = staff_space#; - width# = 0.8 height#; - overshoot# = 0.25 staff_space#; - define_pixels (height, overshoot, width); - - set_char_box (0, width#, 0, height#); - - alpha := -40; - nw = dir (alpha + 180); - ne = dir (alpha + 90); - se = dir alpha; - sw = dir (alpha - 90); - - penpos1 (rthin, alpha + 90); - penpos2 (5/4 rthick, alpha); - penpos3 (5/4 rthick, 0); - - z1 = (width / 2, height) - overshoot * se; % numbering is consistent - % with the arpeggio symbol - z2 = 2 [z4, (width / 2, height / 2)]; - z3 = (0.5 width, 0.5 height); - z4 = (0.25 staff_space, rthin); - z6 = z2l + 1/2 rthin * sw; - z9 = (width / 2, height) + overshoot * se; - - pickup pencircle scaled vround (0.5 rthin); - - bot z10 = (0.5 w, 0); - lft z11 = (0.5 w - hround (0.8 w), 0.8 h); - rt z12 = (0.5 w + hround (0.8 w), 0.8 h); - - before_left := z1l - -- z6{z6 - z1l} - .. {down}z3l; - after_left := (z3 + (0, -0.25 rthin / cosd (angle (nw)))) - -- (z11 + 0.25 rthin * ne); - (u_left, v_left) = before_left intersectiontimes after_left; - - before_right := (z12 + 0.25 rthin * nw) - -- (z3 + (0, -0.25 rthin / cosd (angle (nw)))); - after_right := z3r{up} - .. z9{z1r - z9} - -- z1r; - (u_right, v_right) = before_right intersectiontimes after_right; - - fill subpath (0, u_left) of before_left - .. subpath (v_left, infinity) of after_left - .. top z11 - .. lft z11 - .. {dir -50}(z11 + 0.25 rthin * sw) - .. (z10 + 0.25 rthin * sw){dir -70} - .. bot z10 - .. {dir 70}(z10 + 0.25 rthin * se) - .. (z12 + 0.25 rthin * se){dir 50} - .. rt z12 - .. top z12 - .. subpath (0, u_right) of before_right - .. subpath (v_right, infinity) of after_right - .. cycle; - - % mf doesn't handle pixel dropouts in outline objects, so we use - % `draw' if not called by mpost - if not known miterlimit: - pickup pencircle scaled 0.7 rthin; - draw z1 - -- (z9 + 0.5 rthin * dir (alpha - 90)); - fi; -enddef; - - -fet_beginchar ("Arpeggio arrow down", "arpeggio.arrow.M1"); - draw_arpeggio_arrow; - penlabels (range 1 thru 12); -fet_endchar; - - -fet_beginchar ("Arpeggio arrow up", "arpeggio.arrow.1"); - draw_arpeggio_arrow; - currentpicture := currentpicture scaled -1 - shifted (w - feta_eps, h - feta_eps); -fet_endchar; - - -% Hmm -input feta-slag; - - -% -% Railroad tracks. We define two variants of these -- both as slightly -% tapered, comma-shaped curves and as two straight parallel slashes. -% - -fet_beginchar ("Curved caesura", "caesura.curved"); - save slant, space_between, clearance; - save alpha, pat; - save botthick, topthick; - save krom; - path pat; - - botthick = 1.5 linethickness; - topthick = 2.5 linethickness; - - pickup pencircle scaled botthick; - - slant = 3.5; - space_between# = 0.6 staff_space#; - clearance# = 0.2 staff_space#; - height# = 1.2 staff_space#; - - set_char_box (0, 2.0 staff_space#, - staff_space# - clearance#, height#); - define_pixels (clearance, height); - define_whole_pixels (space_between); - - bot y1 = -d; - top y2 = h; - - lft x1 = 0; - x2 = (y2 - y1) / slant; - - krom = 10; - - alpha = angle (z2 - z1); - penpos1 (botthick, alpha - krom); - penpos3 (botthick, alpha - krom + 90); - - penpos2 (topthick, alpha + krom); - penpos4 (topthick, alpha + krom + 90); - - z3 = z1; - z4 = z2; - - penlabels (1, 2, 3, 4); - - pat := z3r{(z1r - z1l)} - .. z4r{z2r-z2l} - .. z2r{z4l-z4r} - .. z4l{z2l-z2r} - .. z3l{z1l-z1r} - .. z1l{z3r-z3l} - .. cycle; - fill pat; - fill pat shifted (space_between, 0); -fet_endchar; - - -fet_beginchar ("Straight caesura", "caesura.straight"); - save slant, space_between, clearance; - save thick, ne, pat; - path pat; - pair ne; - - slant = 2.0; - thick = 2.88 linethickness; - - space_between# = 0.56 staff_space#; - clearance# = 0.2 staff_space#; - - set_char_box (0, 2.0 staff_space#, - staff_space# - clearance#, 1.2 staff_space#); - define_whole_pixels (space_between); - - x1 = 0; - x2 = x1 + thick; - y1 = y2 = -d; - - x3 = x4 + thick; - x4 = x1 + (h + d) / slant; - y3 = y4 = h; - - ne = unitvector (z4 - z1); - - z1a = z1 + blot_diameter * ne; - z1b = z1 + blot_diameter * right; - z2a = z2 + blot_diameter * ne; - z2b = z2 + blot_diameter * left; - - z3a = z3 - blot_diameter * ne; - z3b = z3 + blot_diameter * left; - z4a = z4 - blot_diameter * ne; - z4b = z4 + blot_diameter * right; - - pat = z1a{-ne} - .. {right}z1b - -- z2b{right} - .. {ne}z2a - -- z3a{ne} - .. {left}z3b - -- z4b{left} - .. {-ne}z4a - -- cycle; - - fill pat; - fill pat shifted (space_between, 0); - - labels(range 1 thru 4); - labels(1a, 1b, 2a, 2b, 3a, 3b, 4a, 4b); -fet_endchar; - -fet_endgroup ("scripts"); diff --git a/mf/feta-scripts.mf b/mf/feta-scripts.mf new file mode 100644 index 0000000000..b3843960c2 --- /dev/null +++ b/mf/feta-scripts.mf @@ -0,0 +1,1751 @@ +% Feta (not the Font-En-Tja) music font -- implement scripts +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2011 Han-Wen Nienhuys +% Jan Nieuwenhuizen +% +% +% 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 . + + +fet_begingroup ("scripts"); + +def draw_fermata = + save alpha, radius, crook_thinness, crook_fatness, dot_size; + save pat; + path pat; + + % [Wanske] and some Baerenreiter editions + % suggest about 80 degrees instead of a half-circle + alpha := 10; + + radius# = 1.25 staff_space#; + crook_thinness# = 1.5 linethickness#; + crook_fatness# = 0.25 staff_space# + 1.5 linethickness#; + + radius# + crook_fatness# / 2 = h#; + radius# + crook_thinness# / 2 = w#; + + set_char_box (w#, w#, crook_thinness# / 2, h#); + + define_pixels (radius, crook_thinness, crook_fatness); + + dot_size# = 8/6 crook_fatness#; + define_whole_blacker_pixels (dot_size); + + penpos1 (crook_thinness, 0); + penpos2 (crook_fatness, -90); + z1 = (-radius, 0); + z2 = (0, radius); + + pat := z2l{left} + .. z1l{dir (-alpha - 90)} + .. {dir (90 - alpha)}z1r + .. {right}z2r; + pat := pat + -- reverse pat xscaled -1 shifted (-feta_eps, 0) + -- cycle; + fill pat; + + pickup pencircle scaled dot_size; + x4 = 0; + bot y4 = vround (-crook_thinness / 2); + drawdot z4; +enddef; + + +fet_beginchar ("fermata up", "ufermata"); + draw_fermata; + penlabels (1, 2, 4); +fet_endchar; + + +fet_beginchar ("fermata down", "dfermata"); + draw_fermata; + y_mirror_char; +fet_endchar; + + +def draw_short_fermata = + save fat_factor, thinness, dot_size; + save left_dist, right_dist, se, ne; + pair left_dist, right_dist, se, ne; + + set_char_box (staff_space#, staff_space#, 0, 2.2 staff_space#); + + dot_size# = 0.266 staff_space# + 2.666 linethickness#; + define_whole_blacker_pixels (dot_size); + + fat_factor = .11; + thinness = 1.5 linethickness; + + pickup pencircle scaled thinness; + + rt x2 = w; + lft x5 = -b; + bot y5 = 0; + top y3 = h; + y1 = y2 = y5; + + x3 = 0; + z1 - z4 = whatever * (charwd, -charht); + z4 = fat_factor [z3, z5]; + + ne = unitvector (z3 - z5); + se = unitvector (z2 - z3); + + left_dist = (ne rotated 90) * 0.5 thinness; + right_dist = (se rotated 90) * 0.5 thinness; + + fill bot z5{right} + .. (z5 - left_dist){ne} + -- (((z5 - left_dist) -- (z3 - left_dist)) intersectionpoint + ((z1 - right_dist) -- (z4 - right_dist))) + -- (z1 - right_dist){se} + .. bot z1{right} + -- bot z2{right} + .. (z2 + right_dist){-se} + -- (z3 + right_dist){-se} + .. top z3 + .. (z3 + left_dist){-ne} + -- (z5 + left_dist){-ne} + .. cycle; + + pickup pencircle scaled dot_size; + + x1 - 2 x6 = x2; + x6 := vround (x6); + bot y6 = -d; + + drawdot z6; +enddef; + +fet_beginchar ("short fermata up", "ushortfermata"); + draw_short_fermata; + labels (1, 2, 3, 4, 5, 6); +fet_endchar; + + +fet_beginchar ("short fermata down", "dshortfermata"); + draw_short_fermata; + xy_mirror_char; +fet_endchar; + + +def draw_long_fermata = + save stemthick, beamheight, dot_size, wd; + save pat; + path pat; + + wd# = 2.5 staff_space#; + stemthick = hround (1.5 linethickness); + beamheight = 0.3 staff_space + linethickness; + dot_size# = 0.266 staff_space# + 2.666 * linethickness#; + define_pixels (wd); + define_whole_blacker_pixels (dot_size); + + set_char_box (wd# / 2, wd# / 2, 0, 3/2 staff_space#); + + pickup pencircle scaled blot_diameter; + + top y1 = h; + lft x1 = -b; + + pat := top z1{left} + .. {down}lft z1; + + pickup pencircle scaled stemthick; + + x2 = -b + stemthick; + y2 = h - beamheight; + lft x3 = -b; + bot y3 = -d; + + pat := pat + -- lft z3 + .. bot z3 + .. rt z3 + -- z2; + pat := pat + -- reverse pat xscaled -1 shifted (-feta_eps, 0) + -- cycle; + + fill pat; + + pickup pencircle scaled dot_size; + + x4 = 0; + bot y4 = -d; + + drawdot z4; +enddef; + + +fet_beginchar ("long fermata up", "ulongfermata"); + draw_long_fermata; + labels (1, 2, 3, 4); +fet_endchar; + + +fet_beginchar ("long fermata down", "dlongfermata"); + draw_long_fermata; + y_mirror_char; +fet_endchar; + + +def draw_very_long_fermata = + save ibeamheight, obeamheight; + save ihwd, ohwd, iht, oht; % inner/outer half_width/height + save stemthick, dot_size; + save opat, ipat; + path opat, ipat; + + ihwd# = 1.0 staff_space#; + ohwd# = 1.5 staff_space#; + iht# = 0.9 staff_space#; + oht# = 1.6 staff_space#; + define_pixels (ihwd, ohwd, iht, oht) + + stemthick = hround (1.5 linethickness); + ibeamheight# = 0.3 staff_space#; + obeamheight# = 0.5 staff_space#; + define_pixels (ibeamheight, obeamheight); + + dot_size# = (iht# - ibeamheight#) * 8/10; + define_whole_blacker_pixels (dot_size); + + set_char_box (ohwd#, ohwd#, 0, oht#); + + pickup pencircle scaled blot_diameter; + + top y1 = oht; + lft x1 = -ohwd; + top y11 = iht; + lft x11 = -ihwd; + + opat := top z1{left} + .. {down}lft z1; + ipat := top z11{left} + .. {down}lft z11; + + pickup pencircle scaled stemthick; + + x2 = -ohwd + stemthick; + y2 = oht - obeamheight; + lft x3 = -ohwd; + bot y3 = 0; + x12 = -ihwd + stemthick; + y12 = iht - ibeamheight; + lft x13 = -ihwd; + bot y13 = 0; + + opat := opat + -- lft z3 + .. bot z3 + .. rt z3 + -- z2; + opat := opat + -- reverse opat xscaled -1 shifted (-feta_eps, 0) + -- cycle; + ipat := ipat + -- lft z13 + .. bot z13 + .. rt z13 + -- z12; + ipat := ipat + -- reverse ipat xscaled -1 shifted (-feta_eps, 0) + -- cycle; + + fill opat; + fill ipat; + + pickup pencircle scaled dot_size; + + x4 = 0; + bot y4 = -d; + + drawdot z4; +enddef; + + +fet_beginchar ("very long fermata up", "uverylongfermata"); + draw_very_long_fermata; + labels (1, 2, 3, 11, 12, 13, 4); +fet_endchar; + + +fet_beginchar ("very long fermata down", "dverylongfermata"); + draw_very_long_fermata; + y_mirror_char; +fet_endchar; + + +% +% Thumbs are used in cello music. +% TODO : thumbs should look like the finger-font and should be placed in +% the same way in the score. +% + +fet_beginchar ("Thumb", "thumb"); + save thin, height, width, thick, depth; + height# = 5/4 width#; + height# = staff_space#; + depth# = 1.6 (height# / 2); + + set_char_box (width# / 2, width# / 2, depth#, height# / 2); + + define_pixels (height, width); + + thin = .6 linethickness + 0.06 staff_space; + 2 thick + 0.5 (height - 2 thin) = width; + + penpos1 (thick, 0); + penpos2 (thin, 90); + penpos3 (thick, 180); + penpos4 (thin, 270); + z1r = (w, 0); + z2r = (0, h); + z3r = (-w, 0); + z4r = (0, -h); + + penlabels (1, 2, 3, 4); + + penstroke z1e{up} + .. z2e{left} + .. z3e{down} + .. z4e{right} + .. cycle; + + save brush_thick; + y5 = -d + brush_thick / 2; + brush_thick = 0.9 thick; + x5 = 0; + + labels (5); + + draw_brush (z4r, 1.4 thin, z5, brush_thick); +fet_endchar; + + +% +% `\accent' is TeX reserved. +% + +def draw_accent (expr bottom_left, top_right, thickness, diminish) = + save thinning_start; + thinning_start = 0.4; + pickup pencircle scaled thickness; + + lft x1 = xpart bottom_left; + top y1 = ypart top_right; + lft x6 = xpart bottom_left; + bot y6 = ypart bottom_left; + + rt z4 = (xpart top_right, (ypart top_right + ypart bottom_left) / 2); + x5 = x3 = thinning_start [xpart top_right, xpart bottom_left] + - linethickness + 0.1 staff_space; + z3 = whatever [z1, z4]; + z5 = whatever [z6, z4]; + + penpos1 (thickness, angle (z3 - z1) + 90); + penpos3 (thickness, angle (z3 - z1) + 90); + penpos4 (thickness, 90); + penpos5 (thickness, angle (z6 - z5) + 90); + penpos6 (thickness, angle (z6 - z5) + 90); + + x4 - x7 = diminish * thickness; + y7 = y4; + + fill z1l + -- z3l + -- z7 + -- z5l + -- z6l + .. lft z6{down} + .. bot z6 + .. z6r + -- z4l + ..tension 0.8.. rt z4 + ..tension 0.8.. z4r + -- z1r + .. top z1 + .. lft z1{down} + .. cycle; +enddef; + + +fet_beginchar ("> accent", "sforzato"); + set_char_box (.9 staff_space#, .9 staff_space#, + .5 staff_space#, .5 staff_space#); + + draw_accent ((-w, -d), (w, h), + 0.05 staff_space + linethickness, 0.7); + penlabels (1, 3, 4, 5, 6); + labels (7); +fet_endchar; + + +fet_beginchar ("espr", "espr"); + set_char_box (1.9 staff_space#, 1.9 staff_space#, + .5 staff_space#, .5 staff_space#); + + draw_accent ((w - 1.78 staff_space, -d), (w, h), + 0.05 staff_space + linethickness, 0.6); + addto currentpicture also currentpicture xscaled -1; +fet_endchar; + + +fet_beginchar ("staccato dot", "staccato"); + save radius; + radius# = 0.20 * staff_space#; + define_whole_pixels (radius); + + pickup pencircle scaled 2 radius; + drawdot (0, 0); + + set_char_box (radius#, radius#, radius#, radius#); +fet_endchar; + + +def draw_staccatissimo = + save radius, height; + height# = .8 staff_space#; + radius# = linethickness# + .1 staff_space#; + define_whole_blacker_pixels (radius); + define_pixels (height); + + draw_brush ((0, 0), linethickness, (0, height), 2 radius); + + set_char_box (radius#, radius#, + blot_diameter# / 2, height# + radius#); +enddef; + + +fet_beginchar ("staccatissimo/martellato up", "ustaccatissimo"); + draw_staccatissimo; +fet_endchar; + + +fet_beginchar ("staccatissimo/martellato down", "dstaccatissimo"); + draw_staccatissimo; + y_mirror_char; +fet_endchar; + + +fet_beginchar ("portato/single tenuto", "tenuto"); + save thick; + thick# = 1.6 linethickness#; + define_whole_blacker_pixels (thick); + + set_char_box (.6 staff_space#, .6 staff_space#, + thick# / 2, thick# / 2); + + draw_rounded_block ((-b, -thick / 2), (w, thick / 2), thick); +fet_endchar; + + +def draw_portato = + save thick, dot_size; + thick# = 1.4 linethickness#; + dot_size# = 2.4 linethickness# + 0.08 staff_space#; + define_whole_blacker_pixels (thick, dot_size); + + set_char_box (.6 staff_space#, .6 staff_space#, + thick# / 2, .5 staff_space# + .5 dot_size#); + + draw_rounded_block ((-b, -thick / 2), (w, thick / 2), thick); + + pickup pencircle scaled dot_size; + drawdot (0, h); +enddef; + + +fet_beginchar ("portato/tenuto with staccato", "uportato"); + draw_portato; +fet_endchar; + + +fet_beginchar ("portato/tenuto with staccato", "dportato"); + draw_portato; + y_mirror_char +fet_endchar; + + +def draw_marcato = + save fat_factor, thinness; + save left_dist, right_dist, ne, se; + pair left_dist, right_dist, ne, se; + + set_char_box (staff_space# / 2, staff_space# / 2, + 0, 1.1 staff_space#); + + fat_factor = .3; + thinness = linethickness; + + pickup pencircle scaled thinness; + + rt x2 = w; + lft x5 = -b; + bot y5 = 0; + top y3 = h; + y1 = y2 = y5; + + x3 =0; + z1 - z4 = whatever * (charwd, -charht); + z4 = fat_factor [z3, z5]; + + ne = unitvector (z3 - z5); + se = unitvector (z2 - z3); + + left_dist = (ne rotated 90) * 0.5 thinness; + right_dist = (se rotated 90) * 0.5 thinness; + + fill bot z5{right} + .. (z5 - left_dist){ne} + -- (((z5 - left_dist) -- (z3 - left_dist)) intersectionpoint + ((z1 - right_dist) -- (z4 - right_dist))) + -- (z1 - right_dist){se} + .. bot z1{right} + -- bot z2{right} + .. (z2 + right_dist){-se} + -- (z3 + right_dist){-se} + .. top z3 + .. (z3 + left_dist){-ne} + -- (z5 + left_dist){-ne} + .. cycle; +enddef; + + +fet_beginchar ("marcato up", "umarcato"); + draw_marcato; + labels (1, 2, 3, 4, 5); +fet_endchar; + + +% +% The down marcato char (not very much used). +% Contrary to what some MF/TeX `gurus' believe +% it is *point*-symmetric with the "up" version +% + +fet_beginchar ("marcato down", "dmarcato"); + draw_marcato; + xy_mirror_char; +fet_endchar; + + +% +% used in french horn music todo +% +% TODO: too light at 20pt +% + +fet_beginchar ("open (unstopped)", "open"); + save thin, height, width, thick; + + height# = 5/4 width#; + height# = staff_space#; + thin = .6 linethickness + 0.06 staff_space; + + set_char_box (width# / 2, width# / 2, height# / 2, height# / 2); + + define_pixels (width, height); + + 2 thick + 0.6 (height - 2 thin) = width; + + penpos1 (thick, 0); + penpos2 (thin, 90); + penpos3 (thick, 180); + penpos4 (thin, 270); + z1r = (w, 0); + z2r = (0, h); + z3r = (-w, 0); + z4r = (0, -h); + + penlabels (1, 2, 3, 4); + + penstroke z1e{up} + .. z2e{left} + .. z3e{down} + .. z4e{right} + .. cycle; +fet_endchar; + + +fet_beginchar ("halfopen (unstopped)", "halfopen"); + save thin, height, width, thick, factor, slash; + + factor = 5/4; + height# = 5/4 width#; + height# = staff_space#; + thin = 0.6 linethickness + 0.06 staff_space; + slash# = 1.05 linethickness#; + + set_char_box (width# / 2, width# / 2, height# / 2, height# / 2); + + define_pixels (width, height, slash); + + 2 thick + 0.6 (height - 2 thin) = width; + + penpos1 (thick, 0); + penpos2 (thin, 90); + penpos3 (thick, 180); + penpos4 (thin, 270); + z1r = (w, 0); + z2r = (0, h); + z3r = (-w, 0); + z4r = (0, -h); + + penlabels (1, 2, 3, 4); + + penstroke z1e{up} + .. z2e{left} + .. z3e{down} + .. z4e{right} + .. cycle; + + draw_brush ((-w * factor, -h * factor), slash, + (w * factor, h * factor), slash); +fet_endchar; + + +fet_beginchar ("plus (stopped)", "stopped"); + save hthick, vthick, size, outer_hsize, outer_vsize; + + hthick# = vthick# = 2 linethickness#; + size# = 1.1 staff_space#; + define_whole_blacker_pixels (vthick); + define_whole_vertical_blacker_pixels (hthick); + + set_char_box (size# / 2, size# / 2, size# / 2, size# / 2); + + outer_hsize = hround ((b + w - vthick) / 2); + outer_vsize = vround ((h + d - hthick) / 2); + w := b := (2 outer_hsize + vthick) / 2; + h := d := (2 outer_vsize + hthick) / 2; + + draw_rounded_block ((-b, -d + outer_vsize), + (w, -d + outer_vsize + hthick), hthick); + draw_rounded_block ((-b + outer_hsize, -d), + (-b + outer_hsize + vthick, h), vthick); +fet_endchar; + + +fet_beginchar ("Upbow", "upbow"); + save ht, wd, thick; + + thick = 1.4 linethickness; + wd# = 1.3 staff_space#; + ht# = 1.6 wd#; + + set_char_box (wd# / 2, wd# / 2, 0, ht#); + + draw_accent ((-h, -w), (0, w), thick, 0.9); + currentpicture := currentpicture rotated -90; +fet_endchar; + + +fet_beginchar ("Downbow", "downbow"); + save stemthick, beamheight, wd; + save pat; + path pat; + + wd# = 1.5 staff_space#; + define_pixels (wd); + + stemthick = hround (1.2 linethickness); + + set_char_box (wd# / 2, wd# / 2, 0, 4/3 staff_space#); + + beamheight = 4/10 h; + + pickup pencircle scaled blot_diameter; + + top y1 = h; + lft x1 = -b; + + pat := top z1{left} + .. {down}lft z1; + + pickup pencircle scaled stemthick; + + x2 = -b + stemthick; + y2 = h - beamheight; + lft x3 = -b; + bot y3 = -d; + + pat := pat + -- lft z3 + .. bot z3 + .. rt z3 + -- z2; + pat := pat + -- reverse pat xscaled -1 shifted (-feta_eps, 0) + -- cycle; + + fill pat; + + labels (1, 2, 3); +fet_endchar; + +% +% Inspired by a computer-set version of Auf dem Strom by Baerenreiter. +% + +def draw_turn = + save thin, thick, ball_diam, darkness; + save wd, ht, thick_nibangle, ball_nib_thick; + save turndir; + pair turndir; + + wd# = 35/16 staff_space#; + ht# = 18/17 staff_space#; + darkness = 0.3 linethickness + 0.09 staff_space; + + set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2); + + thick_nibangle = 60; + thick = 3 darkness; + thin = darkness; + ball_nib_thick = 2.7 darkness; + ball_diam = ball_nib_thick + (h - ball_nib_thick) / 10; + + x3l = w; + y3 = 0; + y4l = h; + x4 = x2; + x2l = w / 2; + y2l = -d; + z1 = (0,0); + + penpos1 (1.1 thick, thick_nibangle); + penpos2 (thick, thick_nibangle); + penpos3 (thin, 180); + penpos4 (ball_nib_thick, -90); + + path swoosh, ploop; + swoosh := z1l{curl 0} + .. z2l + .. z3l{up} + .. {left}z4l + -- z4r + .. z3r{down} + .. z2r{left}; + fill swoosh + .. swoosh scaled -1 shifted (-feta_eps, -feta_eps) + .. cycle; + + x5r = x4; + y5r = y4l - ball_diam / 2; + z6r = z5r; + + penpos5 (1.6 ball_diam / 2, 10); + penpos6 (ball_diam / 2, 150); + + ploop := z4l{left} + .. z5l + .. z6l + -- cycle; + fill ploop; + fill ploop scaled -1 shifted (-feta_eps, -feta_eps); +enddef; + + +fet_beginchar ("Reverse turn", "reverseturn"); + draw_turn; + currentpicture := currentpicture yscaled -1; +fet_endchar; + + +fet_beginchar ("Turn", "turn"); + draw_turn; + penlabels (1, 2, 3, 4, 5, 6, 7); +fet_endchar; + + +% +% Inspired by a (by now) PD edition of Durand & C'ie edition of +% Saint-Saens' Celloconcerto no. 1 +% +% FIXME take out hardcoded vars. +% FIXME the two loops on the `t' should be smoother (and the left one bigger). +% FIXME generic macros for serifs: top of the t and bottom of r +% + +fet_beginchar ("Trill (`tr')", "trill"); + save start_nib_angle, ascender_extra, ex, hair_thick, fatness; + save slant, t_fatness, r_fatness, kerning, t_overshoot; + save uitschieter, bulb_size, krul_ang; + save u, v; + + ascender_extra# = 1/2 ex#; + ascender# = ascender_extra# + ex#; + ex# = 1.4 staff_space#; + kerning# = 0.6 ex#; + start_nib_angle = 20; + bulb_size = 0.8; + define_pixels (ex, ascender_extra, ascender, kerning); + + t_overshoot = 0.03 ex; + fatness = 12/40 ex; + t_fatness = 0.78 fatness; + t_width = 1.9 t_fatness; + r_fatness = 0.78 fatness; + uitschieter = 0.48 ex; + hair_thick = linethickness; + r_flare = .5 hair_thick + 0.25 r_fatness; + r_width = 2 r_fatness + 0.25 kerning; + slant = .2; + + local_copy (transform)(currenttransform); + currenttransform := currenttransform slanted slant + shifted (-staff_space, 0); + + set_char_box (.85 staff_space#, .85 staff_space#, 0, ascender#); + + y1 = ascender; + + % try to position in such a way that the center is the visual + % center + + x1l = 0.2 staff_space; + x1r - x1l = t_fatness; + penpos1 (start_nib_wid, start_nib_angle); + + z2 = (x1, 7/18 ex); + penpos2 (start_nib_wid, start_nib_angle); + + z3l = (x2l + 0.5 t_width, - t_overshoot); + + z4l = (x2l + t_width, 0.23 ex); + penpos4 (whatever, 180); % 200 + x4l - x4r = hair_thick; + + x3r = 0.5 [x4r, x2r]; +% 1.7 [x3l, x3r] = x4r; + y3r - y3l = 0.6 t_fatness; + + save krul_p; + path krul_p; + + krul_ang = 32; + + pickup pencircle scaled hair_thick; + + z5 = (x2l + t_fatness / 2, 2/3 ex); + lft x6 = x2l - uitschieter; + y6 = y5; % - 1/20 ex; + z7 = z5 + whatever * dir krul_ang; + up_angle = krul_ang; % = angle (z7-z5) + x7 = 5/10 kerning + x5; + + krul_p := z4{up} + ..tension 0.98.. z5 + .. z6 + .. z5{z7 - z5} + -- z7; + + z4' = point 0.85 of krul_p; + penpos4' (hair_thick, angle (direction 0.85 of krul_p) + 90); + + % the body of the `t' and the bottom loop + fill z1r{dir (angle (z1l - z1r) + 30)} + .. z1l{-dir (angle (z1r - z1l) - 45)} + -- z2l{down} + ..tension (1 + .5 slant).. z3l{right} + .. z4l{up} + .. z4'l{direction 0.85 of krul_p} + -- z4'r{-direction 0.85 of krul_p} + .. z4r{down} + .. z3r{left} + ..tension (1.5 + .7 slant).. z2r{up} + -- cycle; + + z5' = point 1.1 of krul_p; + penpos5' (hair_thick, angle (direction 1.1 of krul_p) + 90); + z5'' = point 1.5 of krul_p; + penpos5'' (hair_thick, angle (direction 1.5 of krul_p) + 90); + z5''' = point 1.8 of krul_p; + penpos5''' (hair_thick, angle (direction 1.8 of krul_p) + 90); + z6 = point 2 of krul_p; + penpos6 (hair_thick, angle (direction 2 of krul_p) + 90); + z6' = point 2.3 of krul_p; + penpos6' (hair_thick, angle (direction 2.3 of krul_p) + 90); + z6'' = point 2.6 of krul_p; + penpos6'' (hair_thick, angle (direction 2.6 of krul_p) + 90); + z6''' = point 2.9 of krul_p; + penpos6''' (hair_thick, angle (direction 2.9 of krul_p) + 90); + penpos7 (hair_thick, up_angle + 90); + z7' = point 3.2 of krul_p; + penpos7' (hair_thick, angle (direction 3.2 of krul_p) + 90); + + % the left loop + penstroke z5'e{direction 1.1 of krul_p} + .. z5''e{direction 1.5 of krul_p} + .. z5'''e{direction 1.8 of krul_p} + .. z6e{direction 2 of krul_p} + .. z6'e{direction 2.3 of krul_p} + .. z6''e{direction 2.6 of krul_p} + .. {direction 2.9 of krul_p}z6'''e; + + y9 = 3/4 ex; + x9 = x1 + kerning; + penpos9 (r_fatness, 0); + + x10 = x9; + y10 = -0.3 linethickness; + penpos10 (r_fatness, 0); + + penpos11 (hair_thick, -4); + z11r = z9r; + + z13l = (x9l + r_width, y11 - linethickness); + penpos13 (r_flare, 180); + + z15 = z13r - (bulb_size * r_fatness, 0); + z14 = 0.5 [z13l, z15] - (0, bulb_size * r_fatness); + + save before, after; + path before, after; + before := z13l{up} + .. {down}z11l; + after := z9r{up} + .. z7r{z7' - z7} + -- z7'r; + (u, v) = before intersectiontimes after; + + save before_bulb, after_bulb; + path before_bulb, after_bulb; + before_bulb := z9r{up} + ..tension 0.94.. z13r{down}; + after_bulb := z13l{up} + ..tension 1.06.. z15{down}; + (u_bulb, v_bulb) = before_bulb intersectiontimes after_bulb; + + % the connection between `t' and `r', the body of the `r', + % and the bulb + fill z7'l + -- z7l{z7 - z7'} + .. z9l{down} + -- simple_serif (z10l, z10r, -30) + -- z9r{up} + .. subpath (0, u_bulb) of before_bulb + .. subpath (v_bulb, infinity) of after_bulb + .. z14 + .. z13l{up} + .. subpath (0, u) of before + .. subpath (v, infinity) of after + -- cycle; + + penlabels (range 1 thru 15); + penlabels (4', 5', 5'', 5''', 6', 6'', 6''', 7'); +fet_endchar; + + +def draw_heel = + save radius, thickness; + save pat; + path pat; + + radius# := .5 staff_space#; + + set_char_box (radius#, radius#, radius#, 2/3 staff_space#); + + thickness := hround (1.5 linethickness); + + pickup pencircle scaled thickness; + + rt x1 = b; + top y1 = h; + + x2 =x1; + y2 = 0; + + x3 = 0; + bot y3 = -d; + + pat := top z3{right} + .. lft z2{up} + -- lft z1 + .. top z1 + .. rt z1 + -- rt z2{down} + .. bot z3{left}; + pat := pat + -- reverse pat xscaled -1 shifted (-feta_eps, 0) + -- cycle; + fill pat; +enddef; + + +fet_beginchar ("left heel", "upedalheel"); + draw_heel; + labels (1, 2, 3); +fet_endchar; + + +fet_beginchar ("right heel", "dpedalheel"); + draw_heel; + y_mirror_char; +fet_endchar; + + +def draw_toe = + save ht, wd, thickness; + + thickness := 1.5 linethickness; + ht# := 1.5 staff_space#; + wd# := 1/3 ht#; + define_pixels (ht, wd); + + set_char_box (wd#, wd#, 0, ht#); + draw_accent ((-h, -w), (0, w), thickness, 0.9); + currentpicture := currentpicture rotated -90; +enddef; + + +fet_beginchar ("left toe", "upedaltoe"); + draw_toe; +fet_endchar; + + +fet_beginchar ("right toe", "dpedaltoe"); + draw_toe; + y_mirror_char; +fet_endchar; + + +fet_beginchar ("Flageolet", "flageolet"); + save height, width, thickness, superness; + + height# = 4/15 staffsize#; + width# = height#; + thickness# = blot_diameter#; + define_pixels (height, width); + define_whole_blacker_pixels (thickness); + + set_char_box (width# / 2, width# / 2, height# / 2, height# / 2); + + penpos1 (thickness, 90); + penpos2 (thickness, 180); + penpos3 (thickness, 270); + penpos4 (thickness, 0); + + x1 = 0; + y1r = h; + x4r = w; + x2r = -x4r; + y2 = 0; + y4 = y2; + x3 = x1; + y3r = -y1r; + + penlabels (1, 2, 3, 4); + + % mf doesn't handle pixel dropouts in outline objects, so we use + % `draw' if not called by mpost + if known miterlimit: + penstroke z1e + .. z2e + .. z3e + .. z4e + .. cycle; + else: + pickup pencircle scaled thickness; + draw z1 + .. z2 + .. z3 + .. z4 + .. cycle; + fi; +fet_endchar; + + +% +% TODO: ARGRGHGH code dup. +% + +fet_beginchar ("Segno", "segno"); + save thin, thick, ball_diam, darkness, pointheight; + save wd, ht, thick_nibangle, ball_nib_thick; + save turndir; + pair turndir; + + ht# = 3 staff_space#; + wd# = 2 staff_space#; + darkness = .08 staff_space + 0.4 linethickness; + + set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2); + + thick_nibangle = 30; + thick = 3 darkness; + thin = darkness; + ball_nib_thick = 2.7 darkness; + ball_diam = ball_nib_thick + (w - ball_nib_thick) / 10; + pointheight = 2 linethickness; + + y3l = h; + 2 x3 = x2 + x4; + x4 = 0; + y4 = y2; + y2l = .6 h; + x2l = -b; + z1 = (0, 0); + + penpos1 (thick, 2 thick_nibangle); + penpos2 (thick, thick_nibangle); + penpos3 (thin, -90); + penpos4 (ball_nib_thick, 180 - thick_nibangle); + + save swoosh, ploop; + path swoosh, ploop; + + swoosh := z1l{curl 0} + .. z2l + .. z3l{right} + .. {down}z4l + -- z4r + .. z3r{left} + .. z2r{down}; + fill swoosh + .. (swoosh scaled -1) + .. cycle; + + y5r = y4; + x5r = x4l - ball_diam / 2; + z6r = z5r; + + penpos5 (1.6 ball_diam / 2, 100); + penpos6 (ball_diam / 2, 240); + + ploop := z4l{down} + .. z5l + .. z6l + -- cycle; + fill ploop; + fill ploop scaled -1; + + penpos7 (2 thin, 0); + z7l = (-b, -d); + penpos8 (2 thin, 0); + z8r = (w, h); + + penstroke z7e + -- z8e; + + pickup pencircle scaled 2 thin; + drawdot (-x2r, pointheight); + drawdot (x2r, -pointheight); + + penlabels (range 1 thru 8); +fet_endchar; + + +fet_beginchar ("Varied Segno", "varsegno"); + save ht, wd, loopdist, loopangle; + save thin, med, thick; + save bulbradius, center; + pair center; + + ht# = 8 staff_space#; + wd# = 2.5 staff_space#; + + set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2); + % set_char_box (0, 0, ht# / 2, ht# / 2); + + loopdist = 4/3 staff_space; + loopangle = 35; + + thick = 1/2 staff_space; + med = 1/4 staff_space; + thin = 1/10 staff_space; + + x1 = staff_space; + y1 = 13/4 staff_space; + penpos1 (med, 210); + + z2l = (0, 4 staff_space); + penpos2 (med, 270 - loopangle); + + x3 = -x1; + y3 = y1 + 1/4 staff_space; + penpos3 (med, 270 + loopangle); + + center = (0, 2 staff_space); + z4 = (3/4 staff_space, 2 staff_space) + rotatedabout (center, 180 - loopangle); + z5 = 2[z4, center]; + x9 = x4; + y9 = y4 - 2 loopdist; + x10 = x5; + y10 = y5 - 2 loopdist; + + penpos4 (thick, 90 - loopangle); + penpos5 (thick, 90 - loopangle); + penpos9 (thick, 90 - loopangle); + penpos10 (thick, 90 - loopangle); + + z6 = (4/3 staff_space, 4/3 staff_space) + rotatedabout (2/3 center, -loopangle); + x11 = x6; + y11 = y6 - 2 loopdist; + + penpos6 (thin, -loopangle); + penpos11 (thin, -loopangle); + + z7 = 1/3 center; + penpos7 (thick, 270 - loopangle); + + z8 = (4/3 staff_space, 0) rotated (180 - loopangle); + penpos8 (thin, -loopangle); + + z12 = -center; + penpos12 (thick, 270 - loopangle); + + z1' = 4/3[z1l, z1r]; + bulbradius = length (z1l - z1'); + pickup pencircle scaled 2 bulbradius; + + save se_dir, nw_dir; + pair se_dir, nw_dir; + se_dir := dir -loopangle; + nw_dir := dir (180 - loopangle); + + draw_bulb (-1, z1r, z1l, bulbradius, .8); + + penstroke z1e + .. z2e + .. z3e + ... {se_dir}z4e + -- z5e{se_dir} + ... z6e + ... z7e{nw_dir} + ... z8e + ... {se_dir}z9e + -- z10e{se_dir} + ... z11e + ... {nw_dir}z12e; + addto currentpicture also currentpicture scaled -1; + + penlabels (1, 1', 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + % draw_staff (-2, 2, 0); +fet_endchar; + + +fet_beginchar ("Coda", "coda"); + save stickout, thin, thick, codawidth, codaheight; + + stickout# = 0.35 staff_space#; + codawidth# = 2/3 staff_space#; + codaheight# = staff_space#; + define_pixels (codawidth, codaheight); + + set_char_box (codawidth# + stickout#, codawidth# + stickout#, + codaheight# + stickout#, codaheight# + stickout#); + + thin = 1.2 linethickness; + 0.1 (codaheight - 2 thin) = (codawidth - 2 thick); + + penpos1 (thick, 0); + penpos2 (thin, -90); + penpos3 (thick, -180); + penpos4 (thin, -270); + + x1l = -codawidth; + y2l = codaheight; + y1 = 0; + x2 = 0; + z3 = -z1; + z4 = -z2; + + penlabels (1, 2, 3, 4); + + fill z1l{up} + .. z2l{right} + .. z3l{down} + .. z4l{left} + .. cycle; + unfill z1r{up} + .. z2r{right} + .. z3r{down} + .. z4r{left} + .. cycle; + + draw_gridline ((0, -h), (0, h), thin); + draw_gridline ((-w, 0), (w, 0), thin); +fet_endchar; + + +fet_beginchar ("Varied Coda", "varcoda"); + save thin, thick, codawidth, codaheight; + thin# = 1.2 linethickness#; + thick# = 1.0 linethickness# + 0.25 staff_space#; + codawidth# = 2/3 staff_space#; + codaheight# = staff_space#; + define_pixels (thin, thick, codawidth, codaheight); + + set_char_box (codawidth# + thick#, codawidth# + thick#, + codaheight# + thick#, codaheight# + thick#); + + x1 = -codawidth + thick - .5 blot_diameter; + y1 = y2 - thin; + x2 = codawidth - thick + .5 blot_diameter; + y2 = codaheight; + draw_square_block (z1, z2); + + x3 = -codawidth; + y3 = -codaheight; + x4 = x3 + thick; + y4 = y2; + draw_block (z3, z4); + + labels (1, 2, 3, 4); + + addto currentpicture also currentpicture scaled -1; + + draw_gridline ((0, -h), (0, h), thin); + draw_gridline ((-w, 0), (w, 0), thin); +fet_endchar; + + +def draw_comma = + save alpha, thick, thin, ht; + + alpha := 35; + thin# = 1.2 linethickness#; + thick# = 3 linethickness#; + ht# = .6 staff_space#; + define_pixels (thin, thick, ht); + + set_char_box (0, .5 staff_space#, ht#, ht#); + + penpos1 (thick, alpha); + penpos2 (thick, alpha + 90); + penpos3 (thin, 180 - alpha); + penpos4 (thin, 90 - alpha); + + x3r = 0; + x1l = x3l; + y2r = -y4l = h; + z1 = z2; + z3 = z4; + + fill z1l{dir (alpha + 90)} + .. z2r{dir alpha} + .. z1r{dir (alpha - 90)} + .. z3l{dir (270 - alpha)} + .. z4l{dir (180 - alpha)} + .. z3r{dir (90-alpha)} + .. cycle; +enddef; + + +fet_beginchar ("Right Comma", "rcomma"); + draw_comma; + penlabels (1, 2, 3, 4); +fet_endchar; + + +fet_beginchar ("Left Comma", "lcomma"); + draw_comma; + xy_mirror_char; +fet_endchar; + + +def draw_varcomma = + save thick, thin, ht, wd, alpha; + + alpha := 35; + thin# = 1.2 linethickness#; + thick# = 3 linethickness#; + ht# = .6 staff_space#; + wd# = .25 staff_space#; + define_pixels (thin, thick, ht, alpha); + + set_char_box (wd#, wd#, ht#, ht#); + + z1 = (-b, -d); + z2 = (w, h); + + draw_brush (z1, thin, z2, thick); +enddef; + + +fet_beginchar ("Right Varied Comma", "rvarcomma"); + draw_varcomma; + labels (1, 2); +fet_endchar; + + +fet_beginchar ("Left Varied Comma", "lvarcomma"); + draw_varcomma; + xy_mirror_char; +fet_endchar; + + +thick# := 1/24 designsize; +define_blacker_pixels (thick); + +rthin := 0.075 * staff_space + 0.5 linethickness; +rthick := 2 thick + rthin; + + +def draw_arpeggio = + save alpha; + save ne, nw, se, sw; + save x, y; + pair ne, nw, se, sw; + + alpha := -40; + + nw = dir (alpha + 180); + ne = dir (alpha + 90); + se = dir alpha; + sw = dir (alpha - 90); + + penpos1 (rthin, alpha + 90); + penpos2 (5/4 rthick, alpha); + penpos3 (3/4 rthick, alpha); + penpos4 (5/4 rthick, alpha); + penpos5 (rthin, alpha + 90); + + z1 = (width / 2, height) - overshoot * se; + z2 = 2 [z4, (width / 2, height / 2)]; + z3 = 1/2 [z2, z4]; + x4 = 2/8 staff_space; + y4 = rthin; + + z5 = 2 [z1, (width / 2, height / 2)]; + z6 = z2l + 1/2 rthin * sw; + z7 = z4l + 1/2 rthin * sw + 1/2 rthin * se; + z8 = 2 [z6, (width / 2, height / 2)]; + z9 = 2 [z7, (width / 2, height / 2)]; + + fill z1l{se} + -- z6 + .. z3l + .. z7{se} + -- z5l + .. z5r{nw} + -- z8 + .. z3r + .. z9{nw} + -- z1r + .. cycle; +enddef; + + +fet_beginchar ("Arpeggio", "arpeggio"); + save height, overshoot, width; + 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); +fet_endchar; + + +% +% Extendable Trill symbol. +% Not yet used +% Rename me to Trill, rename Trill to Tr? +% + +fet_beginchar ("Trill_element", "trill_element"); + save height, overshoot; + height# = staff_space#; + width# = 0.8 height#; + overshoot# = 0.25 staff_space#; + define_pixels (height, overshoot, width); + + set_char_box (0, height#, 0, width#); + draw_arpeggio; + + currentpicture := currentpicture shifted -(width / 2, height / 2); + currentpicture := currentpicture rotated 90; + currentpicture := currentpicture shifted (height / 2, width / 2); +fet_endchar; + + +% +% Arpeggio arrow by Chris Jackson +% + +def draw_arpeggio_arrow = + save thinness, height, width, overshoot; + save nw, ne, se, sw; + save alpha; + save before_left, before_right, after_left, after_right; + save u_left, v_left, u_right, v_right; + pair nw, ne, se, sw; + path before_left, before_right, after_left, after_right; + + height# = staff_space#; + width# = 0.8 height#; + overshoot# = 0.25 staff_space#; + define_pixels (height, overshoot, width); + + set_char_box (0, width#, 0, height#); + + alpha := -40; + nw = dir (alpha + 180); + ne = dir (alpha + 90); + se = dir alpha; + sw = dir (alpha - 90); + + penpos1 (rthin, alpha + 90); + penpos2 (5/4 rthick, alpha); + penpos3 (5/4 rthick, 0); + + z1 = (width / 2, height) - overshoot * se; % numbering is consistent + % with the arpeggio symbol + z2 = 2 [z4, (width / 2, height / 2)]; + z3 = (0.5 width, 0.5 height); + z4 = (0.25 staff_space, rthin); + z6 = z2l + 1/2 rthin * sw; + z9 = (width / 2, height) + overshoot * se; + + pickup pencircle scaled vround (0.5 rthin); + + bot z10 = (0.5 w, 0); + lft z11 = (0.5 w - hround (0.8 w), 0.8 h); + rt z12 = (0.5 w + hround (0.8 w), 0.8 h); + + before_left := z1l + -- z6{z6 - z1l} + .. {down}z3l; + after_left := (z3 + (0, -0.25 rthin / cosd (angle (nw)))) + -- (z11 + 0.25 rthin * ne); + (u_left, v_left) = before_left intersectiontimes after_left; + + before_right := (z12 + 0.25 rthin * nw) + -- (z3 + (0, -0.25 rthin / cosd (angle (nw)))); + after_right := z3r{up} + .. z9{z1r - z9} + -- z1r; + (u_right, v_right) = before_right intersectiontimes after_right; + + fill subpath (0, u_left) of before_left + .. subpath (v_left, infinity) of after_left + .. top z11 + .. lft z11 + .. {dir -50}(z11 + 0.25 rthin * sw) + .. (z10 + 0.25 rthin * sw){dir -70} + .. bot z10 + .. {dir 70}(z10 + 0.25 rthin * se) + .. (z12 + 0.25 rthin * se){dir 50} + .. rt z12 + .. top z12 + .. subpath (0, u_right) of before_right + .. subpath (v_right, infinity) of after_right + .. cycle; + + % mf doesn't handle pixel dropouts in outline objects, so we use + % `draw' if not called by mpost + if not known miterlimit: + pickup pencircle scaled 0.7 rthin; + draw z1 + -- (z9 + 0.5 rthin * dir (alpha - 90)); + fi; +enddef; + + +fet_beginchar ("Arpeggio arrow down", "arpeggio.arrow.M1"); + draw_arpeggio_arrow; + penlabels (range 1 thru 12); +fet_endchar; + + +fet_beginchar ("Arpeggio arrow up", "arpeggio.arrow.1"); + draw_arpeggio_arrow; + currentpicture := currentpicture scaled -1 + shifted (w - feta_eps, h - feta_eps); +fet_endchar; + + +% Hmm +input feta-trills; + + +% +% Railroad tracks. We define two variants of these -- both as slightly +% tapered, comma-shaped curves and as two straight parallel slashes. +% + +fet_beginchar ("Curved caesura", "caesura.curved"); + save slant, space_between, clearance; + save alpha, pat; + save botthick, topthick; + save krom; + path pat; + + botthick = 1.5 linethickness; + topthick = 2.5 linethickness; + + pickup pencircle scaled botthick; + + slant = 3.5; + space_between# = 0.6 staff_space#; + clearance# = 0.2 staff_space#; + height# = 1.2 staff_space#; + + set_char_box (0, 2.0 staff_space#, + staff_space# - clearance#, height#); + define_pixels (clearance, height); + define_whole_pixels (space_between); + + bot y1 = -d; + top y2 = h; + + lft x1 = 0; + x2 = (y2 - y1) / slant; + + krom = 10; + + alpha = angle (z2 - z1); + penpos1 (botthick, alpha - krom); + penpos3 (botthick, alpha - krom + 90); + + penpos2 (topthick, alpha + krom); + penpos4 (topthick, alpha + krom + 90); + + z3 = z1; + z4 = z2; + + penlabels (1, 2, 3, 4); + + pat := z3r{(z1r - z1l)} + .. z4r{z2r-z2l} + .. z2r{z4l-z4r} + .. z4l{z2l-z2r} + .. z3l{z1l-z1r} + .. z1l{z3r-z3l} + .. cycle; + fill pat; + fill pat shifted (space_between, 0); +fet_endchar; + + +fet_beginchar ("Straight caesura", "caesura.straight"); + save slant, space_between, clearance; + save thick, ne, pat; + path pat; + pair ne; + + slant = 2.0; + thick = 2.88 linethickness; + + space_between# = 0.56 staff_space#; + clearance# = 0.2 staff_space#; + + set_char_box (0, 2.0 staff_space#, + staff_space# - clearance#, 1.2 staff_space#); + define_whole_pixels (space_between); + + x1 = 0; + x2 = x1 + thick; + y1 = y2 = -d; + + x3 = x4 + thick; + x4 = x1 + (h + d) / slant; + y3 = y4 = h; + + ne = unitvector (z4 - z1); + + z1a = z1 + blot_diameter * ne; + z1b = z1 + blot_diameter * right; + z2a = z2 + blot_diameter * ne; + z2b = z2 + blot_diameter * left; + + z3a = z3 - blot_diameter * ne; + z3b = z3 + blot_diameter * left; + z4a = z4 - blot_diameter * ne; + z4b = z4 + blot_diameter * right; + + pat = z1a{-ne} + .. {right}z1b + -- z2b{right} + .. {ne}z2a + -- z3a{ne} + .. {left}z3b + -- z4b{left} + .. {-ne}z4a + -- cycle; + + fill pat; + fill pat shifted (space_between, 0); + + labels(range 1 thru 4); + labels(1a, 1b, 2a, 2b, 3a, 3b, 4a, 4b); +fet_endchar; + + +fet_beginchar ("snap pizzicato (Bartok pizzicato)", "snappizzicato"); + save height, width, thickness, superness; + + height# = 4/15 staffsize#; + width# = height#; + thickness# = 1.3 linethickness#; + define_pixels (height, width); + define_whole_blacker_pixels (thickness); + + set_char_box (width# / 2, width# / 2, height# / 2, height# * 3 / 4); + + penpos1 (thickness, 90); + penpos2 (thickness, 180); + penpos3 (thickness, 270); + penpos4 (thickness, 0); + + x1 = 0; + y1r = height / 2; + x3 = x1; + y3r = -y1r; + x4r = width / 2; + y4 = 0; + x2r = -x4r; + y2 = y4; + + penlabels (1, 2, 3, 4); + + % mf doesn't handle pixel dropouts in outline objects, so we use + % `draw' if not called by mpost + if known miterlimit: + penstroke z1e + .. z2e + .. z3e + .. z4e + .. cycle; + else: + pickup pencircle scaled thickness; + draw z1 + .. z2 + .. z3 + .. z4 + .. cycle; + fi; + + z5 = (0, 0); + z6 = (x5, 1.5 y1r); + + draw_gridline (z5, z6, thickness); + + labels (5, 6); +fet_endchar; + +fet_endgroup ("scripts"); diff --git a/mf/feta-slag.mf b/mf/feta-slag.mf deleted file mode 100644 index 3b054103cd..0000000000 --- a/mf/feta-slag.mf +++ /dev/null @@ -1,315 +0,0 @@ -% -*- Fundamental -*- (emacs-20 mf mode sucks) -% feta-slag.mf -- implement trill symbols -% -% source file of the Feta (definitely not an abbreviation for Font-En-Tja) -% music font -% -% (c) 1998--2009 Jan Nieuwenhuizen -% - -% this file is included by feta-scripts.mf - -trill_thin# = 0.1 staff_space# + 0.6 stafflinethickness#; -trill_stemwidth# = trill_thin#; -define_pixels (trill_thin); -define_whole_blacker_pixels (trill_stemwidth); - -trill_thick = 1/2 staff_space; -trill_overlap = 1/6 staff_space; - -trill_width# = 5/6 staff_space#; -trill_height# = 1/2 staff_space#; -define_pixels (trill_height); -define_whole_pixels (trill_width); - -pair trill_ne; -trill_ne := unitvector ((2, 3)); - - -% -% The trill element sticks out on both the left and right side -% of the normal bbox, so you can glue them together easily. -% -% `ending' is either 0 for none, 1 for left, or 2 for right. -% - -def draw_trillelement (expr offset, ending) = - clearxy; - -begingroup; - save nw, pat, nw_dist, ne_dist; - pair nw, nw_dist, ne_dist; - path pat; - - pickup pencircle scaled trill_thin; - - x1 = -.5 trill_width; - y1 = 0; - z3 = whatever * trill_ne + z1; - top y3 = vround trill_height; - z2 = z3 - (trill_thick - trill_thin) * trill_ne; - - bot z3' = (top z3) scaled -1; - - nw = unitvector (z2 - z3'); - ne_dist = (nw rotated -90) * 0.5 trill_thin; - nw_dist = (trill_ne rotated 90) * 0.5 trill_thin; - - z5 = whatever * trill_ne + (z1 - nw_dist); - z5 = whatever * nw + (z3' - ne_dist); - - pat := z5 - -- (z1 - nw_dist){-trill_ne} - -- (z1 + nw_dist){trill_ne} - -- (z3 + nw_dist){trill_ne} - .. top z3{right} - .. (z3 + ne_dist){-nw}; - pat := pat - -- pat scaled -1 shifted (-feta_eps, -feta_eps) - -- cycle; - pat := pat shifted (offset, 0); - fill pat; - - z4 = z1 - trill_ne * trill_overlap; - x4 := hround (x4 + 0.5 trill_thin) - 0.5 trill_thin; - - pat := (z4 - nw_dist){-trill_ne} - .. bot z4{left} - .. lft z4{up} - .. (z4 + nw_dist){trill_ne} - -- (z1 + nw_dist){trill_ne} - -- (z1 - nw_dist){-trill_ne} - -- cycle; - - if ending = 1: - fill pat shifted (offset, 0); - elseif ending = 2: - pat := pat scaled -1 shifted (-feta_eps, -feta_eps); - fill pat shifted (offset, 0); - fi; -endgroup; -enddef; - - -fet_beginchar ("trilelement", "trilelement"); - set_char_box (.5 trill_width#, .5 trill_width#, - trill_height#, trill_height#); - - draw_trillelement (0, 0); - labels (1, 2, 3, 3', 4, 5, 5'); -fet_endchar; - - -fet_beginchar ("prall", "prall"); - set_char_box (trill_width#, trill_width#, - trill_height#, trill_height#); - - draw_trillelement (-hround (.5 trill_width), 1); - draw_trillelement (-hround (.5 trill_width) + trill_width, 2); -fet_endchar; - - -fet_beginchar ("mordent", "mordent"); - set_char_box (trill_width#, trill_width#, - 4/3 trill_height#, 4/3 trill_height#); - - draw_trillelement (-hround (.5 trill_width), 1); - draw_trillelement (-hround (.5 trill_width) + trill_width, 2); - - clearxy; - - pickup pencircle scaled trill_stemwidth; - - top y1 = h; - bot y2 = -d; - x1 = x2; - x2 = 0; - - draw_gridline (z2, z1, trill_stemwidth); - - labels (1, 2); -fet_endchar; - - -fet_beginchar ("prallprall", "prallprall"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - trill_height#, trill_height#); - - draw_trillelement (-trill_width, 1); - draw_trillelement (0, 0); - draw_trillelement (trill_width, 2); -fet_endchar; - - -fet_beginchar ("prallmordent", "prallmordent"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - 4/3 trill_height#, 4/3 trill_height#); - - draw_trillelement (-trill_width, 1); - draw_trillelement (0, 0); - draw_trillelement (trill_width, 2); - - clearxy; - - pickup pencircle scaled trill_stemwidth; - - top y1 = h; - bot y2 = -d; - x1 = x2 ; - x2 = good.x (.5 trill_width); - - draw_gridline (z2, z1, trill_stemwidth); - - labels (1, 2); -fet_endchar; - - -save remember_pic; -picture remember_pic; - - -fet_beginchar ("upprall", "upprall"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - trill_height#, trill_height#); - - draw_trillelement (-trill_width, 1); - draw_trillelement (0, 0); - draw_trillelement (trill_width, 2); - - z11 = z4 shifted (-trill_width, 0); - z12 = z11 + (0, -2 trill_height); - - penpos11 (trill_thin, angle (trill_ne) - 90); - penpos12 (trill_thin, angle (trill_ne yscaled -1) + 90); - penlabels (11, 12); - - pickup pencircle scaled trill_stemwidth; - - fill z11l{-trill_ne} - .. z12l{trill_ne yscaled -1} - .. bot z12 - .. rt z12 - .. z12r{-trill_ne yscaled -1} - .. z11r{trill_ne} - -- cycle; - - remember_pic := currentpicture; -fet_endchar; - - -fet_beginchar ("upmordent", "upmordent"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - 4/3 trill_height#, 4/3 trill_height#); - - currentpicture := remember_pic; - - clearxy; - - pickup pencircle scaled trill_stemwidth; - - top y1 = h; - bot y2 = -d; - x1 = x2; - x2 = good.x (.5 trill_width); - - draw_gridline (z2, z1, trill_stemwidth); - - labels (1, 2); -fet_endchar; - - -fet_beginchar ("pralldown", "pralldown"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - trill_height#, trill_height#); - - currentpicture := remember_pic xscaled -1; -fet_endchar; - - -fet_beginchar ("downprall", "downprall"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - trill_height#, trill_height#); - - draw_trillelement (-trill_width, 1); - draw_trillelement (0, 0); - draw_trillelement (trill_width, 2); - - z11 = z4 shifted (-trill_width, 0); - z12 = z11 + (0, 2 trill_height); - - penpos11 (trill_thin, angle (trill_ne xscaled -1) - 90); - penpos12 (trill_thin, angle (trill_ne) - 90); - penlabels (11, 12); - - pickup pencircle scaled trill_stemwidth; - - fill z11l{trill_ne xscaled -1} - .. z12l{trill_ne} - .. top z12 - .. rt z12 - .. z12r{-trill_ne} - .. z11r{-trill_ne xscaled -1} - -- cycle; - - remember_pic := currentpicture; -fet_endchar; - - -fet_beginchar ("downmordent", "downmordent"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - 4/3 trill_height#, 4/3 trill_height#); - - currentpicture := remember_pic; - - clearxy; - - pickup pencircle scaled trill_stemwidth; - - top y1 = h; - bot y2 = -d; - x1 = x2; - x2 = good.x (.5 trill_width); - - draw_gridline (z2, z1, trill_stemwidth); - - labels (1, 2); -fet_endchar; - - -fet_beginchar ("prallup", "prallup"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - trill_height#, trill_height#); - - currentpicture := remember_pic xscaled -1; -fet_endchar; - - -fet_beginchar ("lineprall", "lineprall"); - set_char_box (1.5 trill_width#, 1.5 trill_width#, - trill_height#, 4 trill_height#); - - draw_trillelement (-trill_width, 1); - - labels (1, 2, 3, 3', 4, 5, 5'); - - pickup pencircle scaled trill_stemwidth; - - penpos10 (trill_stemwidth, 0); - penpos11 (trill_stemwidth, 0); - - x10l = x4 - .5 trill_thin - trill_width; - y10 = y4; - z11 = z10 + (0, h); - - penlabels (10, 11); - - fill z11l - .. top z11 - .. z11r - -- z10r - -- z10l - -- cycle; - - draw_trillelement (0, 0); - draw_trillelement (trill_width, 2); -fet_endchar; diff --git a/mf/feta-test-generic.mf b/mf/feta-test-generic.mf index 1ade03f2c3..71f7ce842f 100644 --- a/mf/feta-test-generic.mf +++ b/mf/feta-test-generic.mf @@ -3,18 +3,14 @@ % in a separate file to avoid tainting non-test font files for testing. % -%input feta-eindelijk; -input feta-toevallig; -%input feta-puntje; -%input feta-bolletjes; -%input feta-arrow; -%input feta-schrift; -%input feta-schrift; -%input feta-banier; -% input feta-slag; -%input feta-klef; -%input feta-haak; -% input feta-haak; -%input feta-timesig; -%input feta-pendaal; +%input feta-rests; +input feta-accidentals; +%input feta-dots; +%input feta-arrowheads; +%input feta-scripts; +%input feta-trills; +%input feta-clefs; +%input feta-brackettips; +%input feta-timesignatures; +%input feta-pedals; %input feta-accordion; diff --git a/mf/feta-timesig.mf b/mf/feta-timesig.mf deleted file mode 100644 index ffaa1883f9..0000000000 --- a/mf/feta-timesig.mf +++ /dev/null @@ -1,108 +0,0 @@ -% -% feta-timesig.mf -- implement Time Signatures -% -% source file of the Feta (not an abbreviation of Font-En-Tja) music font -% -% (c) 1998--2009 Mats Bengtsson , -% Christian Mondrup - -fet_begingroup ("timesig"); - - -% -% Originally by Mats B. nuked by Han-Wen, inspired by -% Baerenreiter BA320 (Bach Cello Suites, Suite III). -% -% Notes: -% -% * The inside curve of the C is rather straight. -% * The outside curve of the C is rather round. -% * Right tips of the C point slightly outward. -% * Lower tip protrudes to the right very slightly. -% - -def draw_C = - save hair, bulb_rad, left_fatness; - save left_width, right_width; - save width, lower_offset; - - width# := 1.8 staff_space# - stafflinethickness#; - - left_width := 1.0 staff_space; - right_width := 0.8 staff_space; - - hair := stafflinethickness; - - bulb_rad := 0.40 staff_space - .6 stafflinethickness; - left_fatness := 0.55 * staff_space; - lower_offset := 0.3 stafflinethickness; - - set_char_box (0, width#, staff_space#, staff_space#); - - d := d - feta_shift; - - x1r = w; - x3r = 0; - y1r = .45 h; - y2r = h + vround (.5 stafflinethickness_rounded); - y4r = -d - vround (.5 stafflinethickness_rounded); - x2 = x4; - x2 = x3r + h; - y3r = .5 (h - d); - - x5r = x1r + lower_offset; - y5r = -0.37 h; - - penpos1 (hair, 10); - penpos2 (stafflinethickness_rounded, 90); - penpos3 (left_fatness, 180); - penpos4 (stafflinethickness_rounded, -90); - penpos5 (hair, -13); - - draw_bulb (-1, z1l, z1r, bulb_rad, .8); - - save s; - s := 0.735; - - fill z1l{dir (100)} - .. z2l{left} - ..tension 0.8.. z3l{down} - ..tension 0.8.. z4l{right} - .. simple_serif (z5l, z5r, -90) - .. z4r{left} - .. super_curvelet (z4r, z3r, s, -1) - .. z3r{up} - .. super_curvelet (z3r, z2r, s, 1) - .. z2r{right} - .. {dir (-80)}z1r - -- cycle; - - penlabels (1, 2, 3, 4, 5); - - draw_staff (-2, 2, 0); -enddef; - - -fet_beginchar ("4/4 meter", "C44"); - draw_C; -fet_endchar; - - -fet_beginchar ("2/2 meter", "C22"); - save eccentricity, top_stemlen, bottom_stemlen, thick, left_pos; - - draw_C; - - eccentricity = -1.75 stafflinethickness - 0.025 staff_space; - top_stemlen# = bottom_stemlen# = 1.4 staff_space#; - thick# = stafflinethickness# + 0.05 staff_space#; - define_whole_pixels (top_stemlen, bottom_stemlen); - define_whole_blacker_pixels (thick); - - bottom_stemlen := bottom_stemlen - feta_shift; - - draw_block ((x2 + eccentricity, -bottom_stemlen), - (x2 + eccentricity + thick, top_stemlen)); -fet_endchar; - -fet_endgroup ("timesig"); diff --git a/mf/feta-timesignatures.mf b/mf/feta-timesignatures.mf new file mode 100644 index 0000000000..c7207e2dec --- /dev/null +++ b/mf/feta-timesignatures.mf @@ -0,0 +1,119 @@ +% Feta (not the Font-En-Tja) music font -- implement Time Signatures +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1998--2011 Mats Bengtsson , +% Christian Mondrup +% +% 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 . + +fet_begingroup ("timesig"); + + +% +% Originally by Mats B. nuked by Han-Wen, inspired by +% Baerenreiter BA320 (Bach Cello Suites, Suite III). +% +% Notes: +% +% * The inside curve of the C is rather straight. +% * The outside curve of the C is rather round. +% * Right tips of the C point slightly outward. +% * Lower tip protrudes to the right very slightly. +% + +def draw_C = + save hair, bulb_rad, left_fatness; + save left_width, right_width; + save width, lower_offset; + + width# := 1.8 staff_space# - stafflinethickness#; + + left_width := 1.0 staff_space; + right_width := 0.8 staff_space; + + hair := stafflinethickness; + + bulb_rad := 0.40 staff_space - .6 stafflinethickness; + left_fatness := 0.55 * staff_space; + lower_offset := 0.3 stafflinethickness; + + set_char_box (0, width#, staff_space#, staff_space#); + + d := d - feta_shift; + + x1r = w; + x3r = 0; + y1r = .45 h; + y2r = h + vround (.5 stafflinethickness_rounded); + y4r = -d - vround (.5 stafflinethickness_rounded); + x2 = x4; + x2 = x3r + h; + y3r = .5 (h - d); + + x5r = x1r + lower_offset; + y5r = -0.37 h; + + penpos1 (hair, 10); + penpos2 (stafflinethickness_rounded, 90); + penpos3 (left_fatness, 180); + penpos4 (stafflinethickness_rounded, -90); + penpos5 (hair, -13); + + draw_bulb (-1, z1l, z1r, bulb_rad, .8); + + save s; + s := 0.735; + + fill z1l{dir (100)} + .. z2l{left} + ..tension 0.8.. z3l{down} + ..tension 0.8.. z4l{right} + .. simple_serif (z5l, z5r, -90) + .. z4r{left} + .. super_curvelet (z4r, z3r, s, -1) + .. z3r{up} + .. super_curvelet (z3r, z2r, s, 1) + .. z2r{right} + .. {dir (-80)}z1r + -- cycle; + + penlabels (1, 2, 3, 4, 5); + + draw_staff (-2, 2, 0); +enddef; + + +fet_beginchar ("4/4 meter", "C44"); + draw_C; +fet_endchar; + + +fet_beginchar ("2/2 meter", "C22"); + save eccentricity, top_stemlen, bottom_stemlen, thick, left_pos; + + draw_C; + + eccentricity = -1.75 stafflinethickness - 0.025 staff_space; + top_stemlen# = bottom_stemlen# = 1.4 staff_space#; + thick# = stafflinethickness# + 0.05 staff_space#; + define_whole_pixels (top_stemlen, bottom_stemlen); + define_whole_blacker_pixels (thick); + + bottom_stemlen := bottom_stemlen - feta_shift; + + draw_block ((x2 + eccentricity, -bottom_stemlen), + (x2 + eccentricity + thick, top_stemlen)); +fet_endchar; + +fet_endgroup ("timesig"); diff --git a/mf/feta-toevallig.mf b/mf/feta-toevallig.mf deleted file mode 100644 index 48061fcd05..0000000000 --- a/mf/feta-toevallig.mf +++ /dev/null @@ -1,1308 +0,0 @@ -% -% feta-toevallig.mf -- implement Accidentals -% -% (c) 1997--2009 Han-Wen Nienhuys -% - - -% -% also show in other configuration wrt staff lines. -% -def draw_shifted_too = -if test > 0: - fet_beginchar ("shifted too", ""); - set_char_box (0, 0, 0, 0); - currentpicture := remember_pic; - - draw_staff (-2, 2, 0.5); - fet_endchar; -fi; -enddef; - - -% -% Accidentals from various sources, notably -% -% Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural) -% F Hofmeister edition of Muellers `Etueden fuer Horn' (double sharp, flat) -% - - -% -% Naming for accidentals (including microtonal variants): -% -% SHARPBASE[.SLASHES.STEMS] -% FLATBASE[.MODIFIER] -% -% Examples: -% -% sharp.slashslash.stem -% mirroredflat.flat -% -% - - -fet_begingroup ("accidentals"); - -% -% Draw an arrow -% -% * `stemslant' gives the direction of the stem's left boundary -% (needed for brushed stems, equals "up" for straight stems) -% * `extend' is used to make the stem longer or shorter (if negative); -% different kinds of accidentals need different values here -% -def draw_arrow (expr attach, stemwidth, stemslant, extend, pointingdown) = -begingroup; - save htip; % tip height - save wwing; % wing `radius' - save angle_wing_bot, angle_wing_top, angle_tip; - save upshift; - clearxy; - - wwing := 0.26 stemwidth; - htip := staff_space * 0.85 + stafflinethickness - wwing; - - % `flip' is used to reflect the arrow vertically - % if arrow points downward - transform flip; - if pointingdown: - flip = identity reflectedabout (origin, right); - else: - flip = identity; - fi; - - z1 = attach shifted (-stemwidth / 2, 0); - upshift := max (0, wwing + 0.1 staff_space + extend); - z2 = z1 shifted (((unitvector stemslant) - scaled upshift) transformed flip); - - z7 = attach shifted ((stemwidth/2),0); - z6 = z7 shifted (((unitvector (-xpart stemslant, ypart stemslant)) - scaled upshift) transformed flip); - z2 - z3 = ( 0.38 staff_space, 0.05 htip) transformed flip; - z6 - z5 = (-0.38 staff_space, 0.05 htip) transformed flip; - - z4 = attach shifted ((-0.2 stemwidth, upshift + htip) - transformed flip); - z4'= attach shifted (( 0.2 stemwidth, upshift + htip) - transformed flip); - - % `angle_wing_bot' is the angle at which the arc - % from z2 to z3a enters z3a - % `angle_wing_top' is the angle at which the arc - % from z3b to z4 leaves z3b - % `angle_tip' is the angle at which the arc - % from z4 to z4' leaves z4 - angle_wing_bot = 30; - angle_wing_top = 55; - angle_tip = 68; - - z3a = z3 shifted ((((dir angle_wing_bot) rotated -90) - scaled wwing) transformed flip); - z3b = z3 shifted ((((dir angle_wing_top) rotated 90) - scaled wwing) transformed flip); - - z5a = z5 shifted ((((dir (180 - angle_wing_bot)) rotated 90) - scaled wwing) transformed flip); - z5b = z5 shifted ((((dir (180 - angle_wing_top)) rotated -90) - scaled wwing) transformed flip); - - % Draw the arrow - pickup pencircle scaled 1; - fill z1 - -- z2{stemslant transformed flip} - .. {(-dir angle_wing_bot) transformed flip}z3a - .. z3b{(dir angle_wing_top) transformed flip} - .. z4{(dir angle_tip) transformed flip} - .. z4'{(dir (-angle_tip)) transformed flip} - .. {(dir (-angle_wing_top)) transformed flip}z5b - .. z5a{(-dir (-angle_wing_bot)) transformed flip} - .. z6{((-stemslant) reflectedabout (origin, up)) transformed flip} - -- z7 - -- cycle; - - labels (range 0 thru 7, 4', 3a, 3b, 5a, 5b); -endgroup; -enddef; - -save remember_pic; -picture remember_pic; - -save sharp_beamheight; -sharp_beamheight# := 0.3 staff_space# + stafflinethickness#; - -% -% The beams of most sharps have horizontal endings (as if drawn with -% a square pen). [Wanske] does not mention this, so we'll just ignore -% this fact. -% - -def draw_meta_sharp (expr width, offset) = - save beamwidth, beamslope; - save ne, nw_dist; - pair ne, nw_dist; - - beamwidth := width; - - define_whole_vertical_blacker_pixels (sharp_beamheight); - - clearxy; - - beamslope = sharp_beamheight / beamwidth; - - pickup pencircle scaled 2 blot_diameter; - - rt x2 - lft x1 = beamwidth; - z2 = z1 + whatever * (beamwidth, sharp_beamheight); - .5 [z1, z3] = (.5 w, offset); - x3 = x2; - top y2 - bot y3 = sharp_beamheight; - x4 = x1; - top y1 - bot y4 = sharp_beamheight; - - ne = unitvector (z2 - z1); - nw_dist = (ne rotated 90) * blot_diameter; - - fill lft z1{up} - ... (z1 + nw_dist){ne} - -- (z2 + nw_dist){ne} - ... rt z2{down} - -- rt z3{down} - ... (z3 - nw_dist){-ne} - -- (z4 - nw_dist){-ne} - ... lft z4{up} - -- cycle; - - labels (1, 2, 3, 4); -enddef; - - -def draw_sharp(expr arrowup, arrowdown) = - save stem, stemx, stemwidth; - save outer_space, interbeam; - save stemlength, extendleft, extendright, height, depth; - - stemwidth# := stafflinethickness# + .05 staff_space#; - define_whole_blacker_pixels (stemwidth); - - interbeam := 1.05 staff_space_rounded; - - stemlength# := 1.5 staff_space#; - define_pixels (stemlength); - - height# = stemlength#; - depth# = stemlength#; - extendright# = 0; - extendleft# = 0; - if arrowup: - height# := height# + 1.2 staff_space#; - extendright# := extendright# + 1.5 stafflinethickness#; - fi; - if arrowdown: - depth# := depth# + 1.2 staff_space#; - extendleft# := extendleft# + 1.5 stafflinethickness#; - fi; - define_pixels (extendleft, extendright); - set_char_box (extendleft#, 1.1 staff_space#, depth#, height#); - - stem := 7 / 16 * w; - stemx := hround stem; - outer_space := hround ((w - stemx - stemwidth) / 2); - - w := 2 outer_space + stemx + stemwidth; - d := d - feta_space_shift; - - draw_meta_sharp (w, -.5 interbeam); - draw_meta_sharp (w, -.5 interbeam + vround interbeam); - - % expand the charbox so that it encloses the whole arrow; - % this must not happen earlier because some commands above - % still rely on the old width - w := w + extendright; - - pickup pencircle scaled stemwidth; - - lft x5 = lft x6 = outer_space; - lft x7 = lft x8 = outer_space + stemx; - bot y5 = -stemlength; - top y6 = vround (1.5 staff_space - stem * beamslope); - bot y7 = -top y6 + feta_space_shift; - top y8 = stemlength; - - labels (5, 6, 7, 8); - - draw_gridline (z5, z6, stemwidth); - draw_gridline (z7, z8, stemwidth); - - if arrowup: - draw_arrow (z8, stemwidth, up, - stafflinethickness / 2 + stemwidth / 2, false); - fi; - if arrowdown: - draw_arrow (z5, stemwidth, up, - stafflinethickness / 2 + stemwidth / 2, true); - fi; - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -enddef; - - -fet_beginchar ("Sharp", "sharp"); - draw_sharp (false, false); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Sharp (arrow up)", "sharp.arrowup"); - draw_sharp (true, false); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Sharp (arrow down)", "sharp.arrowdown"); - draw_sharp (false, true); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Sharp (arrows up and down)", "sharp.arrowboth"); - draw_sharp (true, true); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("1/2 Sharp", "sharp.slashslash.stem"); - save stem, stemwidth; - save outer_space, interbeam; - - stemwidth# := stafflinethickness# + .05 staff_space#; - define_whole_blacker_pixels (stemwidth); - - interbeam := 1.05 staff_space_rounded; - - set_char_box (0, 0.7 staff_space#, - 1.5 staff_space#, 1.5 staff_space#); - - stem := 7 / 16 * w; - outer_space := hround ((w - stemwidth) / 2); - - w := 2 outer_space + stemwidth; - d := d - feta_space_shift; - - draw_meta_sharp (w, -.5 interbeam); - draw_meta_sharp (w, -.5 interbeam + vround interbeam); - - pickup pencircle scaled stemwidth; - - lft x5 = lft x6 = outer_space; - top y6 = vround (1.5 staff_space - .5 stem); - bot y5 = -top y6 + feta_space_shift; - - labels (5, 6); - - draw_gridline (z5, z6, stemwidth); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Sharp (3 beams)", "sharp.slashslashslash.stemstem"); - save stem, stemx, stemwidth; - save outer_space, interbeam; - save sharp_beamheight; - - sharp_beamheight# := 0.22 staff_space# + stafflinethickness#; - - stemwidth# := stafflinethickness# + .05 staff_space#; - define_whole_blacker_pixels (stemwidth); - - interbeam := 1.2 staff_space_rounded; - - set_char_box (0, 1.1 staff_space#, - 1.5 staff_space#, 1.5 staff_space#); - - stem := 7 / 16 * w; - stemx := hround stem; - outer_space := hround ((w - stemx - stemwidth) / 2); - - w := 2 outer_space + stemx + stemwidth; - d := d - feta_space_shift; - - draw_meta_sharp (.88 w, -.5 interbeam); - draw_meta_sharp (.88 w, -.5 interbeam + vround interbeam); - sharp_beamheight# := 1/.88 sharp_beamheight#; - draw_meta_sharp (w, 0); - - pickup pencircle scaled stemwidth; - - lft x5 = lft x6 = outer_space; - lft x7 = lft x8 = outer_space + stemx; - bot y5 = -d; - top y6 = vround (1.5 staff_space - stem * beamslope); - bot y7 = -top y6 + feta_space_shift; - top y8 = h; - - labels (5, 6, 7, 8); - - draw_gridline (z5, z6, stemwidth); - draw_gridline (z7, z8, stemwidth); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("1/2 Sharp (3 beams)", "sharp.slashslashslash.stem"); - save stem, stemx, stemwidth; - save outer_space, interbeam; - save sharp_beamheight; - - sharp_beamheight# := 0.22 staff_space# + stafflinethickness#; - - stemwidth# := stafflinethickness# + .05 staff_space#; - define_whole_blacker_pixels (stemwidth); - - interbeam := 1.2 staff_space_rounded; - - set_char_box (0, 0.95 staff_space#, - 1.3 staff_space#, 1.3 staff_space#); - - stem := 7 / 16 * w; - outer_space := hround ((w - stemwidth) / 2); - - w := 2 outer_space + stemwidth; - d := d - feta_space_shift; - - draw_meta_sharp (.8 w, -.5 interbeam); - draw_meta_sharp (.8 w, -.5 interbeam + vround interbeam); - sharp_beamheight# := 1/.8 sharp_beamheight#; - draw_meta_sharp (w, 0); - - pickup pencircle scaled stemwidth; - - lft x5 = lft x6 = outer_space; - top y6 = vround (1.5 staff_space - .5 stem); - bot y5 = -top y6 + feta_space_shift; - labels (5, 6); - - draw_gridline (z5, z6, stemwidth); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("3/4 Sharp", "sharp.slashslash.stemstemstem"); - save stem, stemx, stemwidth; - save outer_space, interbeam; - - stemwidth# := stafflinethickness# + .05 staff_space#; - define_whole_blacker_pixels (stemwidth); - - interbeam := 1.05 staff_space_rounded; - - set_char_box (0, 1.6 staff_space#, - 1.5 staff_space#, 1.5 staff_space#); - - stem := 9 / 32 * w; - stemx := hround stem; - outer_space := hround ((w - 2 stemx - stemwidth) / 2); - - w := 2 outer_space + 2 stemx + stemwidth; - d := d - feta_space_shift; - - draw_meta_sharp (w, -.5 interbeam); - draw_meta_sharp (w, -.5 interbeam + vround interbeam); - - pickup pencircle scaled stemwidth; - - lft x5 = lft x6 = outer_space; - lft x7 = lft x8 = outer_space + stemx; - lft x9 = lft x10 = outer_space + 2 stemx; - bot y5 = -d; - top y6 = vround (1.5 staff_space - 2 stem * beamslope); - bot y9 = -top y6 + feta_space_shift; - top y10 = h; - y7 = .5 [y5, y9]; - y8 = .5 [y6, y10]; - - labels (5, 6, 7, 8, 9, 10); - - draw_gridline (z5, z6, stemwidth); - draw_gridline (z7, z8, stemwidth); - draw_gridline (z9, z10, stemwidth); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -% -% The stems of the natural are brushed (at least, in Barenreiter SCS) -% - -def draw_natural (expr arrowup, arrowdown) = - save stemwidth, top_stem_thick; - save ne, pat_top, pat_bottom; - save depth, height, extendleft, extendright, stemlength; - save brush_scale_up, brush_scale_down; - pair ne; - path pat_top, pat_bottom; - - top_stem_thick# = stafflinethickness# + .10 staff_space#; - stemwidth# = 0.09 staff_space# + .5 stafflinethickness#; - define_whole_blacker_pixels (top_stem_thick, stemwidth); - - stemlength# = 1.5 staff_space#; - define_pixels (stemlength); - - height# = stemlength#; - depth# = stemlength#; - extendleft# = 0; - extendright# = 0; - if arrowup: - extendleft# := 3 stafflinethickness#; - height# := height# + 1.2 staff_space#; - fi; - if arrowdown: - extendright# := 3.15 stafflinethickness#; - depth# := depth# + 1.2 staff_space#; - fi; - define_pixels (extendright); - - set_char_box (extendleft#, 2/3 staff_space#, depth#, height#); - - d := d - feta_space_shift; - - pickup pencircle scaled stemwidth; - - brush_scale_up := 1.0; - brush_scale_down := 1.0; - % to look nice, arrowed stems must be less brushed - if arrowup: - brush_scale_up := 0.85; - fi; - if arrowdown: - brush_scale_down := 0.85; - fi; - - penpos1 (top_stem_thick, 0); - penpos3 (top_stem_thick, 0); - penpos2 (stemwidth, 0); - penpos4 (stemwidth, 0); - % z1' and z3' are needed for the arrowed accidentals - penpos1' (top_stem_thick * brush_scale_up, 0); - penpos3' (top_stem_thick * brush_scale_down, 0); - - x2r = w; - x4l = 0; - x3 = x3' = x2; - x1 = x1' = x4; - - y1 = y1' = stemlength; - y3 = y3' = -stemlength; - top y2 = vround (staff_space - 3/2 stafflinethickness); - y4 = -y2 + feta_space_shift; - - pat_bottom := z4r{z4r - z1r} - .. bot z4 - .. z4l{z1l - z4l}; - fill simple_serif (z1'l, z1'r, -30) - -- pat_bottom - -- cycle; - - pat_top := z2r{z2r - z3r} - .. top z2 - .. z2l{z3l - z2l}; - fill simple_serif (z3'l, z3'r, 30) - -- pat_top - -- cycle; - - ne = (x2 - x4, stafflinethickness); - - z11' = z3l + whatever * (z2l - z3l); - y11' = vround (.5 (staff_space - stafflinethickness)); - z11 = z11' + whatever * ne; - x11 = x12; - z12 = directionpoint -ne of pat_top; - z13 = z12 + whatever * ne; - x13 = x1; - z14 = z11 + whatever * ne; - x14 = x1; - - z21' = z4r + whatever * (z1r - z4r); - y21' = -y11' + feta_space_shift; - z21 = z21' + whatever * ne; - x21 = x22; - z22 = directionpoint -ne of pat_bottom; - z23 = z22 + whatever * ne; - x23 = x3; - z24 = z21 + whatever * ne; - x24 = x3; - - fill z11 - -- z12 - -- z13 - -- z14 - -- cycle; - fill z21 - -- z22 - -- z23 - -- z24 - -- cycle; - - penlabels (1, 1', 2, 3, 3', 4); - labels (11, 11', 12, 13, 14, 21, 21', 22, 23, 24); - - if arrowup: - draw_arrow (z1, top_stem_thick * brush_scale_up, - z1'l - z4l, stafflinethickness / 2, false); - fi; - if arrowdown: - draw_arrow (z3, top_stem_thick * brush_scale_down, - z2r - z3'r, stafflinethickness / 2, true); - w := w + extendright; - fi; - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -enddef; - - -fet_beginchar ("Natural", "natural"); - draw_natural (false, false); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Natural (arrow up)", "natural.arrowup"); - draw_natural (true, false); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Natural (arrow down)", "natural.arrowdown"); - draw_natural (false, true); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Natural (arrows up and down)", "natural.arrowboth"); - draw_natural (true, true); -fet_endchar; - - -draw_shifted_too; - - -% -% Dedicated to my mom. (3/10/97) -% -% Mamma, ik hou van je; kom je alsjeblieft terug? -% -- HW -% -% -% TODO: remove crook_fatness -% TODO: document, simplify! -% - -def draw_meta_flat (expr xcenter, w, crook_fatness, arrowup, arrowdown) = - save crook_thinness; - save bottom_overshoot, bot_crook_dir; - save top_stem_thick, top_stem_thick_orig; - save bottom_stem_thick, hair, smaller_hole; - save top_crook_thinness; - save zwiep; - save center; - pair center, bot_crook_dir; - save clearing, clearing_orig; - - clearxy; - - % the stem shouldn't reach the top staff line. - %% TODO: should take from height. - % - % TODO: parameterize this - % - if w >= 0.75 staff_space: - smaller_hole = 0.35 stafflinethickness; - else: - smaller_hole = 0; - fi; - crook_thinness = .7 stafflinethickness + .06 staff_space; - top_crook_thinness = 1 stafflinethickness + .065 staff_space; - clearing = 1.7 stafflinethickness; - clearing_orig = clearing; - if arrowup: - clearing := 0.5 staff_space; - fi; - bottom_overshoot = stafflinethickness; - - bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#; - top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#; - top_stem_thick_orig# = top_stem_thick#; - if arrowup: - % to look nice, arrowed stems should be less brushed - top_stem_thick# := top_stem_thick# * 0.8; - fi; - define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick, - top_stem_thick_orig); - - if odd (top_stem_thick - bottom_stem_thick): - top_stem_thick := top_stem_thick - 1; - fi; - if odd (top_stem_thick_orig - bottom_stem_thick): - top_stem_thick_orig := top_stem_thick_orig - 1; - fi; - - center = (xcenter, 0); - - x1l = hround (xcenter - .5 top_stem_thick); - y1 = vround (2 staff_space - clearing); - x2l = hround (xcenter - .5 bottom_stem_thick); - y2 = -.5 staff_space - .5 stafflinethickness; - % z16 and the `*_orig' variables are needed for arrowed accidentals - % because their inner part should be unchanged from plain ones but - % the points z3l, z3r, and z10 depend on values that are different - % for arrowed accidentals - x16l = hround (xcenter -.5 top_stem_thick_orig); - y16 = vround (2 staff_space - clearing_orig); - - penpos1 (top_stem_thick, 0); - penpos16 (top_stem_thick_orig, 0); - penpos2 (bottom_stem_thick, 0); - - y3l = vfloor ((staff_space - stafflinethickness) / 2); - z3l = whatever [z2r, z1r]; - z3r = .3 [z2r, - (z16r shifted (0, clearing_orig - 1.7 stafflinethickness))] - + (smaller_hole, 0); - x3r := hceiling x3r; - - % we insert z3l to get better conversion with mf2pt1 - fill simple_serif (z1r, z1l, 30) - -- z2l - -- z2r - -- z3l - -- cycle; - - z10 = whatever [z2r, z16r] + (smaller_hole, 0); - y10 = -1/10 staff_space; - x10 := hceiling x10; - - x11 = xcenter + bottom_overshoot / 3; - y11 = -vround (.5 (staff_space + stafflinethickness) - + bottom_overshoot); - - x2a = 0.2[x2r, x7]; - y2a = 1.5[y2, y11]; - - penpos4 (whatever, 53); - - y4l - y4r = top_crook_thinness; - y5r = .15 staff_space; - x5l = hround (w + xcenter); - y4 = staff_space / 2; - x4r = .45 [x5r, x3r]; - y4l := vround y4l; - - penpos5 (crook_fatness, -175); - - bot_crook_dir = unitvector ((x5l, 0) - z11); - z8 = z11 + whatever * bot_crook_dir; - y8 = -staff_space / 2; - - z7 = z8 - + whatever * bot_crook_dir - + crook_thinness * (bot_crook_dir rotated 90); - x7 = .1 [x3r, x8]; - - unfill z3r{z3r - z10} - .. z4r{right} - .. z5r{down} - .. z7{-bot_crook_dir} - & z7 - .. z10{z3r - z10} - -- cycle; - - if arrowdown: - fill z2l{down} - .. z2a{up} - .. z8{bot_crook_dir} - .. z5l{up} - .. z4l{left} - .. z3l - -- cycle; - else: - fill z2l{down} - .. z11{right} - .. z8{bot_crook_dir} - .. z5l{up} - .. z4l{left} - .. z3l - -- cycle; - fi; - - if arrowup: - draw_arrow (z1, top_stem_thick, z1l - z2l, - 0.5 stafflinethickness, false); - fi; - if arrowdown: - draw_arrow ((0.5 [x2l, x2a], y2), x2a - x2l, up, - staff_space / 2, true); - fi; -enddef; - - -def draw_arrowed_meta_flat (expr xcenter, width, crook_fatness, - arrowup, arrowdown) = - save depth, height, extendleft; - - depth# = 0.6 staff_space#; - height# = 1.9 staff_space#; - extendleft# := 1.2 stafflinethickness#; - if arrowup: - extendleft# := 3.45 stafflinethickness#; - height# := height# + 0.8 staff_space#; - fi; - if arrowdown: - extendleft# := 3.45 stafflinethickness#; - depth# := depth# + 1.6 staff_space#; - fi; - - set_char_box (extendleft#, width, depth#, height#); - draw_meta_flat(xcenter, w, crook_fatness, arrowup, arrowdown); -enddef; - -% -% unfortunately, 600dpi is not enough to show the brush of the stem. -% - -fet_beginchar ("Flat", "flat"); - draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, - false, false); - penlabels (range 0 thru 11); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Flat (arrow up)", "flat.arrowup"); - draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, - true, false); - penlabels (range 0 thru 23); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Flat (arrow down)", "flat.arrowdown"); - draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, - false, true); - penlabels (range 0 thru 23); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Arrowed Flat (arrow up and down)", "flat.arrowboth"); - draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space, - true, true); - penlabels (range 0 thru 23); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Flat (slashed)", "flat.slash"); - set_char_box (.4 staff_space#, .8 staff_space#, - 0.6 staff_space#, 1.9 staff_space#); - - draw_meta_flat (0, w, 0.31 staff_space, false, false); - - clearxy; - - save slope, slash_width; - slope = 0.5; - slash_width = w; - - z11 = (0, h / 2); - z12 = z11 - (slash_width, slash_width * slope) / 2; - z13 = z11 + (slash_width, slash_width * slope) / 2; - penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90); - penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90); - - z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12); - z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12); - - fill z13r - .. z15 - .. z13l - -- z12l - .. z14 - .. z12r - -- z13r - .. cycle; - - penlabels (12, 13); - labels (14, 15); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("Flat (slashed twice)", "flat.slashslash"); - set_char_box (.4 staff_space#, .8 staff_space#, - 0.6 staff_space#, 1.9 staff_space#); - - draw_meta_flat (0, w, 0.31 staff_space, false, false); - - clearxy; - - save slope, slash_width; - slope = 0.5; - slash_width = w; - - z11 = (0, 5/12 h); - z12 = z11 - (slash_width, slash_width * slope) / 2; - z13 = z11 + (slash_width, slash_width * slope) / 2; - penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90); - penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90); - - z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12); - z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12); - - fill z13r - .. z15 - .. z13l - -- z12l - .. z14 - .. z12r - -- z13r - .. cycle; - - penlabels (12, 13); - labels (14, 15); - - z21 = (0, 2/3 h); - z22 = z21 - (slash_width, slash_width * slope) / 2; - z23 = z21 + (slash_width, slash_width * slope) / 2; - penpos22 (1.5 stafflinethickness, angle (z23 - z22) - 90); - penpos23 (1.5 stafflinethickness, angle (z23 - z22) - 90); - - z24 = z22 - .75 stafflinethickness * unitvector (z23 - z22); - z25 = z23 + .75 stafflinethickness * unitvector (z23 - z22); - - fill z23r - .. z25 - .. z23l - -- z22l - .. z24 - .. z22r - -- z23r - .. cycle; - - penlabels (22, 23); - labels (24, 25); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -fet_beginchar ("Flatflat (mirrored)", "mirroredflat.flat"); - set_char_box (0, 1.6 staff_space#, - 0.6 staff_space#, 1.9 staff_space#); - - % This is a modified version of `draw_meta_flat'. - - save crook_thinness, crook_fatness; - save bottom_overshoot, bot_crook_dir; - save top_stem_thick, bottom_stem_thick, hair, smaller_hole; - save top_crook_thinness; - save zwiep; - save center; - pair center, bot_crook_dir; - save clearing, wid; - save pat; - path pat; - - clearxy; - - wid = w / 2; - - % the stem shouldn't reach the top staff line. - %% TODO: should take from height. - % - % TODO: parameterize this - % - if wid >= 0.75 staff_space: - smaller_hole = 0.35 stafflinethickness; - else: - smaller_hole = 0; - fi; - clearing = 1.7 stafflinethickness; - crook_thinness = .7 stafflinethickness + .06 staff_space; - crook_fatness = 0.31 staff_space; - top_crook_thinness = 1 stafflinethickness + .065 staff_space; - bottom_overshoot = stafflinethickness; - - bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#; - top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#; - define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick); - - if odd (top_stem_thick - bottom_stem_thick): - top_stem_thick := top_stem_thick - 1; - fi; - - center = (0, 0); - - x1l = hround (-.5 top_stem_thick); - y1 = vround (2 staff_space - clearing); - x2l = hround (-.5 bottom_stem_thick); - y2 = -.5 staff_space - .5 stafflinethickness; - - penpos1 (top_stem_thick, 0); - penpos2 (bottom_stem_thick, 0); - - y3l = vfloor ((staff_space - stafflinethickness) / 2); - z3l = whatever [z2r, z1r]; - z3r = .3 [z2r, z1r] + (smaller_hole, 0); - x3r := hceiling x3r; - - z10 = whatever [z2r, z1r] + (smaller_hole, 0); - y10 = -1/10 staff_space; - x10 := hceiling x10; - - x11 = bottom_overshoot / 3; - y11 = -vround (.5 (staff_space + stafflinethickness) - + bottom_overshoot); - - penpos4 (whatever, 53); - - y4l - y4r = top_crook_thinness; - y5r = .15 staff_space; - x5l = hround (wid); - y4 = staff_space / 2; - x4r = .45 [x5r, x3r]; - y4l := vround y4l; - - penpos5 (crook_fatness, -175); - - bot_crook_dir = unitvector ((x5l, 0) - z11); - z8 = z11 + whatever * bot_crook_dir; - y8 = -staff_space / 2; - - z7 = z8 - + whatever * bot_crook_dir - + crook_thinness * (bot_crook_dir rotated 90); - x7 = .1 [x3r, x8]; - - pat := z3r{z3r - z10} - .. z4r{right} - .. z5r{down} - .. z7{-bot_crook_dir} - & z7 - .. z10{z3r - z10} - -- cycle; - unfill pat; - unfill pat xscaled -1; - - pat := z11{right} - .. z8{bot_crook_dir} - .. z5l{up} - .. z4l{left} - .. z3l; - fill pat - -- simple_serif (z1r, z1l, 30) - -- reverse pat xscaled -1 shifted (-feta_eps, 0) - -- cycle; - - currentpicture := currentpicture shifted (w/2, 0); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Semi flat", "mirroredflat"); - set_char_box (1.2 stafflinethickness#, .8 staff_space#, - 0.6 staff_space#, 1.9 staff_space#); - - draw_meta_flat (0, w, 0.31 staff_space, false, false); - currentpicture := currentpicture xscaled -1 shifted (w - b, 0); -fet_endchar; - - -fet_beginchar ("Semi flat", "mirroredflat.backslash"); - set_char_box (.4 staff_space#, .8 staff_space#, - 0.6 staff_space#, 1.9 staff_space#); - - draw_meta_flat (0, w, 0.31 staff_space, false, false); - - clearxy; - - save slope, slash_width; - slope = 0.5; - slash_width = w; - - z11 = (0, h / 2); - z12 = z11 - (slash_width, slash_width * slope) / 2; - z13 = z11 + (slash_width, slash_width * slope) / 2; - penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90); - penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90); - - z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12); - z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12); - - fill z13r - .. z15 - .. z13l - -- z12l - .. z14 - .. z12r - -- z13r - .. cycle; - - currentpicture := currentpicture xscaled -1 shifted (w - b, 0); - - labels (1, 2, 3); -fet_endchar; - - -fet_beginchar ("Double Flat", "flatflat"); - save left_wid, overlap, right_wid; - - left_wid = .7; - right_wid = .8; - overlap = .05; - - set_char_box (1.2 stafflinethickness#, - (left_wid + right_wid - overlap) * staff_space#, - .6 staff_space#, 1.9 staff_space#); - draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space, - false, false); - draw_meta_flat (hround ((left_wid - overlap) * staff_space), - right_wid * staff_space, 1/3 staff_space, - false, false); -fet_endchar; - - -fet_beginchar ("3/4 Flat", "flatflat.slash"); - save left_wid, overlap, right_wid; - - left_wid = .7; - right_wid = .8; - overlap = .05; - - set_char_box (1.2 stafflinethickness#, - (left_wid + right_wid - overlap) * staff_space#, - .6 staff_space#, 1.9 staff_space#); - draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space, - false, false); - draw_meta_flat (hround ((left_wid - overlap) * staff_space), - right_wid * staff_space, 1/3 staff_space, - false, false); - - %% maybe we should clip part of the stems? - %% or make the 1st flat smaller? - %% or reverse it? - pickup pencircle scaled 2 stafflinethickness; - - z12 = round (-.25 w - b, .55 staff_space) + feta_offset; - z13 = round (.75 w, 1.45 staff_space) + feta_offset; - penpos12 (2 stafflinethickness, angle (z13 - z12) - 90); - penpos13 (2 stafflinethickness, angle (z13 - z12) - 90); - - z14 = z12 - stafflinethickness * unitvector (z13 - z12); - z15 = z13 + stafflinethickness * unitvector (z13 - z12); - - fill z13r - .. z15 - .. z13l - -- z12l - .. z14 - .. z12r - -- z13r - .. cycle; - - penlabels (12, 13); - labels (14, 15); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Double Sharp", "doublesharp"); - save klaverblad, klaversteel; - save pat; - path pat; - - klaversteel = 1/15 staff_space; - klaverblad = .4 staff_space - .5 stafflinethickness; - - set_char_box (0, staff_space#, .5 staff_space#, .5 staff_space#); - - z1 = (klaversteel, 0); - z2 = (w / 2 - klaverblad / 10, h - klaverblad); - z3 = (w / 2, h); - z4 = z2 reflectedabout ((0, 0), (1, 1)); - z5 = z1 reflectedabout ((0, 0), (1, 1)); - - labels (1, 2, 3, 4, 5); - - pickup pencircle scaled blot_diameter; - - x2 := hfloor (rt x2) - blot_diameter / 2; - x3 := hfloor (rt x3) - blot_diameter / 2; - y3 := vfloor (top y3) - blot_diameter / 2; - y4 := vfloor (top y4) - blot_diameter / 2; - - pat = (rt z1){dir45} - .. {right}(bot z2) - .. rt z2 - -- rt z3{z3 - z2} - .. top z3{z4 - z3} - -- top z4{z4 - z3} - .. (lft z4){down} - .. {dir 225}(top z5); - pat := pat - -- reverse pat xscaled -1 shifted (-feta_eps, 0); - - % assure symmetry -- it's more important to center the glyph on the - % staff line than centering it between staff lines, so we use - % feta_shift, not feta_space_shift. - h := h + feta_shift; - - fill pat shifted (0, feta_shift) - -- reverse pat yscaled -1 shifted (0, -feta_eps) - -- cycle; - - % ugh - currentpicture := currentpicture shifted (hround (w / 2), 0); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -def draw_paren = - save leftindent; - - leftindent := .2 staff_space; - - set_char_box (0, .5 staff_space# + stafflinethickness#, - staff_space#, staff_space#); - - d := d - feta_shift; - - z1 = (leftindent, h); - z2 = (w - stafflinethickness, .5 (h - d)); - z3 = (leftindent, -d); - - penpos1 (stafflinethickness, 35); - penpos2 (.1 staff_space + stafflinethickness, 0); - penpos3 (stafflinethickness, -35); - - fill z2l{down} - .. simple_serif (z3l, z3r, 90) - .. z2r{up} - .. simple_serif (z1r, z1l, 90) - .. z2l{down} - -- cycle; -enddef; - - -fet_beginchar ("Right Parenthesis", "rightparen"); - draw_paren; - penlabels (1, 2, 3); - - remember_pic := currentpicture; - - draw_staff (-2, 2, 0); -fet_endchar; - - -draw_shifted_too; - - -fet_beginchar ("Left Parenthesis", "leftparen"); - draw_paren; - - currentpicture := currentpicture xscaled -1; - - set_char_box (charwd, charbp, chardp, charht); -fet_endchar; - -fet_endgroup ("accidentals"); diff --git a/mf/feta-trills.mf b/mf/feta-trills.mf new file mode 100644 index 0000000000..02d761ae2a --- /dev/null +++ b/mf/feta-trills.mf @@ -0,0 +1,325 @@ +% Feta (not the Font-En-Tja) music font -- implement trill symbols +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1998--2011 Jan Nieuwenhuizen +% +% +% 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 . + +% this file is included by feta-scripts.mf + +trill_thin# = 0.1 staff_space# + 0.6 stafflinethickness#; +trill_stemwidth# = trill_thin#; +define_pixels (trill_thin); +define_whole_blacker_pixels (trill_stemwidth); + +trill_thick = 1/2 staff_space; +trill_overlap = 1/6 staff_space; + +trill_width# = 5/6 staff_space#; +trill_height# = 1/2 staff_space#; +define_pixels (trill_height); +define_whole_pixels (trill_width); + +pair trill_ne; +trill_ne := unitvector ((2, 3)); + + +% +% The trill element sticks out on both the left and right side +% of the normal bbox, so you can glue them together easily. +% +% `ending' is either 0 for none, 1 for left, or 2 for right. +% + +def draw_trillelement (expr offset, ending) = + clearxy; + +begingroup; + save nw, pat, nw_dist, ne_dist; + pair nw, nw_dist, ne_dist; + path pat; + + pickup pencircle scaled trill_thin; + + x1 = -.5 trill_width; + y1 = 0; + z3 = whatever * trill_ne + z1; + top y3 = vround trill_height; + z2 = z3 - (trill_thick - trill_thin) * trill_ne; + + bot z3' = (top z3) scaled -1; + + nw = unitvector (z2 - z3'); + ne_dist = (nw rotated -90) * 0.5 trill_thin; + nw_dist = (trill_ne rotated 90) * 0.5 trill_thin; + + z5 = whatever * trill_ne + (z1 - nw_dist); + z5 = whatever * nw + (z3' - ne_dist); + + pat := z5 + -- (z1 - nw_dist){-trill_ne} + -- (z1 + nw_dist){trill_ne} + -- (z3 + nw_dist){trill_ne} + .. top z3{right} + .. (z3 + ne_dist){-nw}; + pat := pat + -- pat scaled -1 shifted (-feta_eps, -feta_eps) + -- cycle; + pat := pat shifted (offset, 0); + fill pat; + + z4 = z1 - trill_ne * trill_overlap; + x4 := hround (x4 + 0.5 trill_thin) - 0.5 trill_thin; + + pat := (z4 - nw_dist){-trill_ne} + .. bot z4{left} + .. lft z4{up} + .. (z4 + nw_dist){trill_ne} + -- (z1 + nw_dist){trill_ne} + -- (z1 - nw_dist){-trill_ne} + -- cycle; + + if ending = 1: + fill pat shifted (offset, 0); + elseif ending = 2: + pat := pat scaled -1 shifted (-feta_eps, -feta_eps); + fill pat shifted (offset, 0); + fi; +endgroup; +enddef; + + +fet_beginchar ("trilelement", "trilelement"); + set_char_box (.5 trill_width#, .5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (0, 0); + labels (1, 2, 3, 3', 4, 5, 5'); +fet_endchar; + + +fet_beginchar ("prall", "prall"); + set_char_box (trill_width#, trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-hround (.5 trill_width), 1); + draw_trillelement (-hround (.5 trill_width) + trill_width, 2); +fet_endchar; + + +fet_beginchar ("mordent", "mordent"); + set_char_box (trill_width#, trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + draw_trillelement (-hround (.5 trill_width), 1); + draw_trillelement (-hround (.5 trill_width) + trill_width, 2); + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2; + x2 = 0; + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); +fet_endchar; + + +fet_beginchar ("prallprall", "prallprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); +fet_endchar; + + +fet_beginchar ("prallmordent", "prallmordent"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2 ; + x2 = good.x (.5 trill_width); + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); +fet_endchar; + + +save remember_pic; +picture remember_pic; + + +fet_beginchar ("upprall", "upprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); + + z11 = z4 shifted (-trill_width, 0); + z12 = z11 + (0, -2 trill_height); + + penpos11 (trill_thin, angle (trill_ne) - 90); + penpos12 (trill_thin, angle (trill_ne yscaled -1) + 90); + penlabels (11, 12); + + pickup pencircle scaled trill_stemwidth; + + fill z11l{-trill_ne} + .. z12l{trill_ne yscaled -1} + .. bot z12 + .. rt z12 + .. z12r{-trill_ne yscaled -1} + .. z11r{trill_ne} + -- cycle; + + remember_pic := currentpicture; +fet_endchar; + + +fet_beginchar ("upmordent", "upmordent"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + currentpicture := remember_pic; + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2; + x2 = good.x (.5 trill_width); + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); +fet_endchar; + + +fet_beginchar ("pralldown", "pralldown"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + currentpicture := remember_pic xscaled -1; +fet_endchar; + + +fet_beginchar ("downprall", "downprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); + + z11 = z4 shifted (-trill_width, 0); + z12 = z11 + (0, 2 trill_height); + + penpos11 (trill_thin, angle (trill_ne xscaled -1) - 90); + penpos12 (trill_thin, angle (trill_ne) - 90); + penlabels (11, 12); + + pickup pencircle scaled trill_stemwidth; + + fill z11l{trill_ne xscaled -1} + .. z12l{trill_ne} + .. top z12 + .. rt z12 + .. z12r{-trill_ne} + .. z11r{-trill_ne xscaled -1} + -- cycle; + + remember_pic := currentpicture; +fet_endchar; + + +fet_beginchar ("downmordent", "downmordent"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + currentpicture := remember_pic; + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2; + x2 = good.x (.5 trill_width); + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); +fet_endchar; + + +fet_beginchar ("prallup", "prallup"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + currentpicture := remember_pic xscaled -1; +fet_endchar; + + +fet_beginchar ("lineprall", "lineprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, 4 trill_height#); + + draw_trillelement (-trill_width, 1); + + labels (1, 2, 3, 3', 4, 5, 5'); + + pickup pencircle scaled trill_stemwidth; + + penpos10 (trill_stemwidth, 0); + penpos11 (trill_stemwidth, 0); + + x10l = x4 - .5 trill_thin - trill_width; + y10 = y4; + z11 = z10 + (0, h); + + penlabels (10, 11); + + fill z11l + .. top z11 + .. z11r + -- z10r + -- z10l + -- cycle; + + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); +fet_endchar; diff --git a/mf/parmesan-accidentals.mf b/mf/parmesan-accidentals.mf index b5fe663061..4c8fae7574 100644 --- a/mf/parmesan-accidentals.mf +++ b/mf/parmesan-accidentals.mf @@ -1,10 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-accidentals.mf -- implement ancient accidentals -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2001--2009 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- ancient accidentals +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2001--2011 Juergen Reuter % +% +% 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 . fet_begingroup ("accidentals"); diff --git a/mf/parmesan-clefs.mf b/mf/parmesan-clefs.mf index afd5058e7d..2f605f736a 100644 --- a/mf/parmesan-clefs.mf +++ b/mf/parmesan-clefs.mf @@ -1,10 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-clefs.mf -- implement ancient clefs -% -% source file of LilyPond's pretty-but-neat music font +% Feta (not the Font-En-Tja) music font -- ancient clefs +% This file is part of LilyPond, the GNU music typesetter. % -% (c) 2001--2009 Juergen Reuter +% Copyright (C) 2001--2011 Juergen Reuter % +% +% 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 . fet_begingroup ("clefs"); diff --git a/mf/parmesan-custodes.mf b/mf/parmesan-custodes.mf index d1a2d6c758..97cf3c48ef 100644 --- a/mf/parmesan-custodes.mf +++ b/mf/parmesan-custodes.mf @@ -1,10 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-custodes.mf -- implement ancient custodes -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2000--2009 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- ancient custodes +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2000--2011 Juergen Reuter % +% +% 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 . save black_notehead_width; numeric black_notehead_width; @@ -383,11 +394,11 @@ def custos_mensural (expr verbose_name, internal_name, dalpha = direction * alpha; if staffline_adjustment = between_staff_lines: - stem_ht# = 1.00 staff_space#; + stem_ht# = 2.00 staff_space#; elseif staffline_adjustment = on_staff_line: - stem_ht# = 1.50 staff_space#; + stem_ht# = 2.50 staff_space#; else: % staffline_adjustment = anywhere - stem_ht# = 1.25 staff_space#; + stem_ht# = 2.25 staff_space#; fi; define_pixels (ht, wd, stem_ht); diff --git a/mf/parmesan-dots.mf b/mf/parmesan-dots.mf index 826dabe2c8..00280eaa2d 100644 --- a/mf/parmesan-dots.mf +++ b/mf/parmesan-dots.mf @@ -1,10 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-dots.mf -- dot vaticana -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2006--2009 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- dot vaticana +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2006--2011 Juergen Reuter % +% +% 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 . fet_begingroup ("dots"); diff --git a/mf/parmesan-flags.mf b/mf/parmesan-flags.mf index 32a55df0e2..d3d73dec51 100644 --- a/mf/parmesan-flags.mf +++ b/mf/parmesan-flags.mf @@ -1,10 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-flags.mf -- implement ancient flags -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2001--2009 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- ancient flags +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2001--2011 Juergen Reuter % +% +% 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 . fet_begingroup ("flags"); diff --git a/mf/parmesan-generic.mf b/mf/parmesan-generic.mf index 6ffb53aad5..aff67dbfd8 100644 --- a/mf/parmesan-generic.mf +++ b/mf/parmesan-generic.mf @@ -1,11 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-generic.mf -- implement generic stuff: include lots of files, -% but don't set dimensions. +% Feta (not the Font-En-Tja) music font -- generic stuff: include lots of files, +% This file is part of LilyPond, the GNU music typesetter. % -% source file of LilyPond's pretty-but-neat music font +% Copyright (C) 2002--2011 Juergen Reuter % -% (c) 2002--2009 Juergen Reuter % +% 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 . if test = -1: @@ -28,12 +38,12 @@ font_x_height staff_space#; fet_beginfont ("parmesan", design_size, "parmesanMusic"); if test = 0: input parmesan-rests; - input parmesan-heads; + input parmesan-noteheads; input parmesan-clefs; input parmesan-custodes input parmesan-accidentals; input parmesan-flags; - input parmesan-timesig; + input parmesan-timesignatures; input parmesan-scripts; input parmesan-dots; else: diff --git a/mf/parmesan-heads.mf b/mf/parmesan-heads.mf deleted file mode 100644 index b897554d88..0000000000 --- a/mf/parmesan-heads.mf +++ /dev/null @@ -1,1492 +0,0 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-heads.mf -- implement ancient note heads -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2001--2009 Juergen Reuter -% -% Neo-mensural heads originally by -% Christian Mondrup and Mats Bengtsson -% - -save black_notehead_width; -numeric black_notehead_width; - -fet_begingroup ("noteheads"); - -% -% character aligment: -% -% The head is assumed to be vertically centered around (0, 0). -% The left-most edge of the head should touch the vertical line -% that goes though the point (0, 0). -% -% set_char_box() conventions: -% -% * breapth: Ignored (as far as I know). Should be set to 0. -% -% * width: Should match the head's width. -% -% * depth: Should match the bottom edge of the head. Affects vertical -% collision handling. -% -% * height: Should match the top edge of the head. Affects vertical -% collision handling. -% -% TODO: should depth/height include appendages/stems? - -overdone_heads = 0; -noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#; -define_pixels (noteheight); - - -%%%%%%%% -% -% -% -% MENSURAL NOTATION -% -% -% - -def draw_neomensural_brevis (expr brevwid) = - save beamheight, head_width; - save holeheight, stem_width; - save serif_size, serif_protrude; - - head_width# = brevwid; - holeheight = 3 stafflinethickness; - stem_width = 1.4 stafflinethickness; - - define_pixels (head_width); - - set_char_box (0, head_width#, - noteheight# / 2, noteheight# / 2); - - 2 beamheight + holeheight = noteheight; - serif_size = (holeheight - stafflinethickness) / 2; - serif_protrude = 1.5 serif_size; - - z1l = (0, 0); - z2l = (0, -stafflinethickness / 2); - z3r = z2r + serif_size * (1, -1); - y4r = y3r; - x4r = head_width / 2; - z5l = z3l + (-serif_size, -serif_protrude); - - penpos1 (stem_width, 0); - penpos2 (stem_width, 0); - penpos3 (beamheight, 90); - penpos4 (beamheight, 90); - penpos5 (stem_width, 180); - - save pat_in, pat_out; - path pat_in, pat_out; - - pat_out := z4l - -- z3l{left} - .. z5l{down} - .. z5r{up} - -- z1l; - pat_out := pat_out - -- reverse pat_out yscaled -1; - pat_out := pat_out - -- reverse pat_out shifted (-x4r, 0) - xscaled -1 - shifted (x4l, 0) - -- cycle; - fill pat_out; - - pat_in := z4r - -- z3r{left} - .. z2r{up} - -- z1r; - pat_in := pat_in - -- reverse pat_in yscaled -1; - pat_in := pat_in - -- reverse pat_in shifted (-x4r, 0) - xscaled -1 - shifted (x4l, 0) - -- cycle; - unfill pat_in; - - penlabels (1, 2, 3, 4, 5); -enddef; - - -%%% This head does not seem to be used anywhere. Junk me? -- jr -def draw_neomensural_left_stemmed_head (expr wid) = - draw_neomensural_brevis (wid); - - x6 = x7 = stem_width / 2; - y6 = y5; - y7 = y5 - 2.25 staff_space; - - z17 = (x7, y7 - stem_width / 2); - - penpos6 (stem_width, 0); - penpos7 (stem_width, 0); - - fill z7l - -- z6l - -- z6r - -- z7r - .. z17 - .. cycle; - - penlabels (6, 7); - labels (17); -enddef; - - -%%% This head does not seem to be used anywhere. Junk me? -- jr -fet_beginchar ("Left stemmed notehead", "slneomensural"); - draw_neomensural_left_stemmed_head (2 staff_space#); -fet_endchar; - - -% -% Some sources (eg. Musix/OpusTeX) think that the appendage should be on -% the left, some say right. Right wins democratically. -% -def draw_neomensural_longa (expr wid) = - draw_neomensural_brevis (wid); - - save theta; - - x7r = head_width; - y7 = y5; - z6 - z7 = (stem_width / 2, -staff_space); - theta = angle (z6 - z7) + 90; - - penpos7 (stem_width, 0); - penpos6 (1.2 stem_width, theta); - - z7' = find_tangent (z6l, pat_out, - (x7l + 0.5 stem_width, y7l), - (x7l - 0.5 stem_width, y7l)); - - fill z7r - .. z6r{z6 - z7} - .. {z7 - z6}z6l - -- z7' - -- cycle; - - penlabels (6, 7); - labels (7'); -enddef; - - -% -% En wij presenteren U: de opvolgster van Emily -% -% (ze is wel breed) -% -fet_beginchar ("Neo-mensural maxima notehead", "sM3neomensural"); - draw_neomensural_longa (2.6 staff_space#); -fet_endchar; - - -fet_beginchar ("Neo-mensural longa notehead", "sM2neomensural"); - draw_neomensural_longa (2 staff_space#); -fet_endchar; - - -fet_beginchar ("Neo-mensural brevis notehead", "sM1neomensural"); - draw_neomensural_brevis (2 staff_space#); -fet_endchar; - - -def draw_neomensural_black_head (expr wid, height) = - save head_width; - save ne, nw, ne_dist, nw_dist; - pair ne, nw, ne_dist, nw_dist; - - head_width# = wid; - - set_char_box (0, head_width#, - height / 2, height / 2); - - charwx := head_width# / 2; - charwy := height / 2; - - y3 = y1 = 0; - x2 = x4 = (x1 + x3) / 2; - - pickup pencircle scaled blot_diameter; - - top y2 = h; - bot y4 = -d; - lft x1 = 0; - rt x3 = w; - - ne := unitvector (z2 - z1); - nw_dist := (ne rotated 90) * 0.5 blot_diameter; - nw := unitvector (z2 - z3); - ne_dist := (nw rotated -90) * 0.5 blot_diameter; - - fill lft z1{up} - .. (z1 + nw_dist){ne} - -- (z2 + nw_dist){ne} - .. top z2{right} - .. (z2 + ne_dist){-nw} - -- (z3 + ne_dist){-nw} - .. rt z3{down} - .. (z3 - nw_dist){-ne} - -- (z4 - nw_dist){-ne} - .. bot z4{left} - .. (z4 - ne_dist){nw} - -- (z1 - ne_dist){nw} - .. cycle; - - labels (1, 2, 3, 4); -enddef; - - -def draw_neomensural_open_head (expr wid, height)= - draw_neomensural_black_head (wid, height); - - save diamNW, diamSW; - - diamNW = length (z2 - z1) + blot_diameter; - diamSW = length (z4 - z1) + blot_diameter; - - save hole_widthNW, hole_widthSW; - - hole_widthNW = 0.34 diamNW ; - hole_widthSW + 2.6 linethickness = diamSW; - - (z7 + z5) / 2 = (w / 2, 0); - (z8 + z6) / 2 = (w / 2, 0); - z6 - z5 = hole_widthNW * unitvector (z2 - z1); - z7 - z6 = hole_widthSW * unitvector (z4 - z1); - - unfill z5 - -- z6 - -- z7 - -- z8 - -- cycle; - - labels (5, 6, 7, 8); -enddef; - - -% -% WL says the thin lines should be thinner. -% -fet_beginchar ("Harmonic notehead (Neo-mensural open)", "s0harmonic"); - draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#); - charwx := head_width#; - charwy := 0; -fet_endchar; - - -fet_beginchar ("Harmonic notehead (Neo-mensural black)", "s2harmonic"); - draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#); - charwx := head_width#; - charwy := 0; -fet_endchar; - - -fet_beginchar ("Neo-mensural semibrevis head", "s0neomensural"); - draw_neomensural_open_head (staff_space#, noteheight#); -fet_endchar; - - -fet_beginchar ("Neo-mensural minima head", "s1neomensural"); - draw_neomensural_open_head (staff_space#, noteheight#); -fet_endchar; - - -fet_beginchar ("Neo-mensural semiminima head", "s2neomensural"); - draw_neomensural_black_head (staff_space#, noteheight#); -fet_endchar; - - -def draw_mensural_brevis (expr wid) = - % TODO. For the moment, fall back to draw_neomensural_brevis. - draw_neomensural_brevis (wid); -enddef; - - -%%% This head does not seem to be used anywhere. Junk me? -- jr -def draw_mensural_left_stemmed_head (expr wid) = - draw_mensural_brevis (wid); - - x6 = x7 = stem_width / 2; - y6 = y5; - y7 = y5 - 2.25 staff_space; - - z17 = (x7, y7 - stem_width / 2); - - penpos6 (stem_width, 0); - penpos7 (stem_width, 0); - - fill z7l - -- z6l - -- z6r - -- z7r - .. z17 - .. cycle; - - penlabels (6, 7); - labels (17); -enddef; - - -def draw_mensural_longa (expr wid) = - draw_mensural_brevis (wid); - - x6 = x7 = head_width - stem_width / 2; - y6 = y5; - y7 = y5 - 2.25 staff_space; - - z17 = (x7, y7 - stem_width / 2); - - penpos6 (stem_width, 0); - penpos7 (stem_width, 0); - - fill z7l - -- z6l - -- z6r - -- z7r - .. z17 - .. cycle; - - penlabels (6, 7); - labels (17); -enddef; - - -%%% This head does not seem to be used anywhere. Junk me? -- jr -fet_beginchar ("Mensural left stemmed notehead", "slmensural"); - draw_mensural_left_stemmed_head (staff_space#); -fet_endchar; - - -fet_beginchar ("Mensural maxima notehead", "sM3mensural"); - draw_mensural_longa (2.0 staff_space#); -fet_endchar; - - -fet_beginchar ("Mensural longa notehead", "sM2mensural"); - draw_mensural_longa (staff_space#); -fet_endchar; - - -fet_beginchar ("Mensural brevis notehead", "sM1mensural"); - draw_mensural_brevis (staff_space#); -fet_endchar; - - -def draw_diamond_head (expr head_h, pen_w, pen_h, angle, open) = - save head_width, head_height; - save ellipse, ellipse_r; - path ellipse, ellipse_r, diamond_shape; - - head_height# = head_h; - head_width# / head_height# = tand (angle); - - set_char_box (0, head_width#, - head_height# / 2, head_height# / 2); - - charwx := head_width# / 2; - charwy := head_height# / 2 - linethickness#; - - define_pixels (head_width, head_height); - - ellipse := reverse fullcircle - xscaled (max (blot_diameter, pen_w * head_width)) - yscaled (max (blot_diameter, pen_h * head_width)) - rotated -angle; - - z1 = find_tangent_shift (((0, h) -- (0, -h)), ellipse, - (0, 0), (w / 2, 0)); - z2 = find_tangent_shift (((0, h) -- (w, h)), ellipse, - (w / 2, h), (w / 2, 0)); - z3 = find_tangent_shift (((w, h) -- (w, -h)), ellipse, - (w, 0), (w / 2, 0)); - z4 = find_tangent_shift (((0, -h) -- (w, -h)), ellipse, - (w / 2, -h), (w / 2, 0)); - - diamond_shape := get_subpath (ellipse, z1 - z4, z2 - z1, z1) - -- get_subpath (ellipse, z2 - z1, z3 - z2, z2) - -- get_subpath (ellipse, z3 - z2, z4 - z3, z3) - -- get_subpath (ellipse, z4 - z3, z1 - z4, z4) - -- cycle; - fill diamond_shape; - - if open: - save l; - path l[]; - - l12 := (directionpoint (z1 - z2) of ellipse) shifted z1 - -- (directionpoint (z1 - z2) of ellipse) shifted z2; - l23 := (directionpoint (z2 - z3) of ellipse) shifted z2 - -- (directionpoint (z2 - z3) of ellipse) shifted z3; - l34 := (directionpoint (z3 - z4) of ellipse) shifted z3 - -- (directionpoint (z3 - z4) of ellipse) shifted z4; - l41 := (directionpoint (z4 - z1) of ellipse) shifted z4 - -- (directionpoint (z4 - z1) of ellipse) shifted z1; - - unfill l12 intersectionpoint l23 - -- l23 intersectionpoint l34 - -- l34 intersectionpoint l41 - -- l41 intersectionpoint l12 - -- cycle; - fi; - - labels (1, 2, 3, 4); -enddef; - - -fet_beginchar ("Mensural semibrevis head", "s0mensural"); - draw_diamond_head (staff_space#, 0.15, 0.30, 30, true); -fet_endchar; - - -fet_beginchar ("Mensural minima head", "s1mensural"); - draw_diamond_head (staff_space#, 0.15, 0.30, 30, true); -fet_endchar; - - -fet_beginchar ("Mensural semiminima head", "s2mensural"); - draw_diamond_head (staff_space#, 0.15, 0.30, 30, false); -fet_endchar; - - -fet_beginchar ("Petrucci semibrevis head", "s0petrucci"); -% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true); - draw_neomensural_open_head (staff_space#, 1.8 staff_space#); -fet_endchar; - - -fet_beginchar ("Petrucci minima head", "s1petrucci"); -% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true); - draw_neomensural_open_head (staff_space#, 1.8 staff_space#); -fet_endchar; - - -fet_beginchar ("Petrucci semiminima head", "s2petrucci"); -% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, false); - draw_neomensural_black_head (staff_space#, 1.8 staff_space#); -fet_endchar; - - -%%%%%%%% -% -% -% -% EDITIO VATICANA (including solesmes extensions) -% -% -% - -def vat_punctum_char (expr verbose_name, internal_name, - linea, cavum, straight, auctum, - d_up, up_shift, down_shift, mag) = - fet_beginchar (verbose_name, "s" & internal_name); - save a_b, b_h, a_w; - - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; - - save a, beta, ht, wd; - - ht# = noteheight# * mag; - 2 beta = ht# * b_h; - a = beta * a_b; - wd# = 2 a / a_w; - black_notehead_width# := wd#; - - % direction - save d_, d_sign; - pair d_; - - if d_up: - d_ := up; - d_sign := 1; - else: - d_ := down; - d_sign := -1; - fi; - - % convexity and eccentricity - save u_convexity, u_eccentricity; - - if straight: - u_convexity# := -0.01 ht#; - u_eccentricity# := 0.0 ht#; % dummy - elseif auctum: - u_convexity# := -0.03 ht#; - u_eccentricity# := +0.25 ht#; - else: - u_convexity# := -0.05 ht#; - u_eccentricity# := 0.0 ht#; % dummy - fi; - - save convexity, eccentricity; - - convexity# := d_sign * u_convexity#; - eccentricity# := d_sign * u_eccentricity#; - - % y shift offset - save yoffs; - - if up_shift: - yoffs# := 0.08 ht#; - elseif down_shift: - yoffs# := -0.11 ht#; - else: - yoffs# := 0.00 ht#; - fi; - - define_pixels (convexity, eccentricity, yoffs, ht, wd); - - pickup pencircle scaled linethickness; - - save height, yoffs_bt, p, circle, circle_r; - path p, circle, circle_r; - - height# = 0.47 ht#; - yoffs_bt# = yoffs# - 0.5 height# - 0.25 convexity#; - - define_pixels (height, yoffs_bt); - - circle := fullcircle scaled linethickness; - - x1 = x6; - x2 = x5; - x3 = x4; - y1 + height = y6; - y2 + height = y5; - y3 + height = y4; - - save box_top, box_bt; - - if auctum: - z1 = (0.00 wd + linethickness / 2, yoffs_bt); - z2 = (0.21 wd, yoffs_bt + convexity); - z3 = (0.42 wd - linethickness/ 2, - yoffs_bt + eccentricity); - box_top# = height# + yoffs_bt# + - max (0, convexity#, eccentricity#); - box_bt# = yoffs_bt# + - min (0, convexity#, eccentricity#); - p = z1 - .. {right}z2 - .. {d_}z3 - -- z4{-d_} - .. z5{left} - .. z6 - -- cycle; - else: - z1 = (0.00 wd + linethickness / 2, yoffs_bt); - z2 = (0.21 wd, yoffs_bt + convexity); - z3 = (0.42 wd - linethickness / 2, yoffs_bt); - box_top# = height# + yoffs_bt# + max (0, convexity#); - box_bt# = yoffs_bt# + min (0, convexity#); - p = z1 - .. z2 - .. z3 - -- z4 - .. z5 - .. z6 - -- cycle; - fi; - - labels (1, 2, 3, 4, 5, 6); - - save dirs; - pair dirs[]; - - dirs12 := direction (0 + epsilon) of p; - dirs2 := direction 1 of p; - dirs32 := direction (2 - epsilon) of p; - dirs45 := direction (3 + epsilon) of p; - dirs5 := direction 4 of p; - dirs65 := direction (5 - epsilon) of p; - - fill get_subpath (circle, down, dirs12, z1) - .. (bot z2){dirs2} - .. get_subpath (circle, dirs32, up, z3) - -- get_subpath (circle, up, dirs45, z4) - .. (top z5){dirs5} - .. get_subpath (circle, dirs65, down, z6) - -- cycle; - - if cavum: - save pat, t; - path pat[]; - numeric t[]; - - pat123 := ((directionpoint -dirs12 of circle) - shifted z1){dirs12} - .. (top z2){dirs2} - .. {dirs32}((directionpoint -dirs32 of circle) - shifted z3); - pat34 := lft z3 - -- lft z4; - pat456 := ((directionpoint -dirs45 of circle) - shifted z4){dirs45} - .. (bot z5){dirs5} - .. {dirs65}((directionpoint -dirs65 of circle) - shifted z6); - pat61 := rt z6 - -- rt z1; - - t61 := ypart (pat61 intersectiontimes pat123); - t12 := xpart (pat123 intersectiontimes pat34); - t34 := ypart (pat34 intersectiontimes pat456); - t45 := xpart (pat456 intersectiontimes pat61); - - unfill subpath (t61, t12) of pat123 - -- subpath (t34, t45) of pat456 - -- cycle; - fi; - - set_char_box (0.00 wd#, 0.42 wd#, - max (0, -box_bt#) + linethickness# / 2, - max (0, box_top#) + linethickness# / 2); - - if linea: - save linea_width, linea_height; - - linea_width# = 0.6 linethickness#; - linea_height# = 0.7 ht#; - - define_pixels (linea_width, linea_height); - - pickup pencircle scaled 0.6 linethickness; - - draw_rounded_block ((-0.10 wd - linea_width / 2, - -linea_height / 2), - (-0.10 wd + linea_width / 2, - +linea_height / 2), - 0.6 linethickness); - draw_rounded_block ((+0.52 wd - linea_width / 2, - -linea_height / 2), - (+0.52 wd + linea_width / 2, - +linea_height / 2), - 0.6 linethickness); - - set_char_box (0, 0.62 wd# + linea_width#, - linea_height# / 2, - linea_height# / 2); - - currentpicture := currentpicture - shifted (0.10 wd + linea_width / 2, 0); - fi; - fet_endchar; -enddef; - - -def plica_char (expr verbose_name, internal_name, - d_up, mag) = - fet_beginchar (verbose_name, "s" & internal_name); - save a_b, b_h, a_w; - - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; - - save a, beta, ht, wd; - - ht# = noteheight# * mag; - 2 beta = ht# * b_h; - a = beta * a_b; - wd# = 2 a / a_w; - black_notehead_width# := wd#; - - % direction - save d_, d_sign; - pair d_; - - if d_up: - d_ := up; - d_sign := 1; - else: - d_ := down; - d_sign := -1; - fi; - - % convexity and eccentricity - save convexity, eccentricity; - - convexity# := d_sign * -0.10 ht#; - eccentricity# := d_sign * -0.12 ht#; - - % y shift offset - save yoffs; - - yoffs# := -0.11 ht#; - - define_pixels (convexity, eccentricity, yoffs, ht, wd); - - pickup pencircle scaled linethickness; - - save height, yoffs_bt, p, circle, circle_r; - path p, circle, circle_r; - - height# = 0.47 ht#; - yoffs_bt# = yoffs# - 0.5 height# - 0.25 convexity#; - - define_pixels (height, yoffs_bt); - - circle := fullcircle scaled linethickness; - - x1 = x6; - x2 = x5; - x3 = x4; - y1 + height = y6; - y2 + height = y5; - y3 + height = y4; - - save box_top, box_bt; - - z1 = (0.00 wd + linethickness / 2, yoffs_bt); - z2 = (0.21 wd, yoffs_bt + convexity); - z3 = (0.42 wd - linethickness/ 2, yoffs_bt + eccentricity); - box_top# = height# + yoffs_bt# + - max (0, convexity#, eccentricity#); - box_bt# = yoffs_bt# + - min (0, convexity#, eccentricity#); - p = z1 - .. z2{right} - .. z3 - -- z4 - .. z5{left} - .. z6 - -- cycle; - - labels (1, 2, 3, 4, 5, 6); - - save dirs; - pair dirs[]; - - dirs12 := direction (0 + epsilon) of p; - dirs2 := direction 1 of p; - dirs32 := direction (2 - epsilon) of p; - dirs45 := direction (3 + epsilon) of p; - dirs5 := direction 4 of p; - dirs65 := direction (5 - epsilon) of p; - - fill get_subpath (circle, down, dirs12, z1) - .. (bot z2){dirs2} - .. get_subpath (circle, dirs32, up, z3) - -- get_subpath (circle, up, dirs45, z4) - .. (top z5){dirs5} - .. get_subpath (circle, dirs65, down, z6) - -- cycle; - - pickup pencircle scaled 0.6 linethickness; - - save stem_bt; - - set_char_box (0.00 wd#, 0.42 wd#, - max (0, -box_bt#) + linethickness# / 2, - max (0, box_top#) + linethickness# / 2); - - fet_endchar; -enddef; - - -def epiphonus_char (expr verbose_name, internal_name, - left_stem, d_up, down_shift, mag) = - fet_beginchar (verbose_name, "s" & internal_name); - save a_b, b_h, a_w; - - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; - - save a, beta, ht, wd; - - ht# = noteheight# * mag; - 2 beta = ht# * b_h; - a = beta * a_b; - wd# = 2 a / a_w; - black_notehead_width# := wd#; - - % direction - save d_, d_sign; - pair d_; - - if d_up: - d_ := up; - d_sign := 1; - else: - d_ := down; - d_sign := -1; - fi; - - % convexity and eccentricity - save convexity; - - convexity# := d_sign * -0.05ht#; - - % y shift offset - save yoffs; - - if down_shift: - yoffs# := -0.11 ht#; - else: - yoffs# := 0.00 ht#; - fi; - - define_pixels (convexity, yoffs, ht, wd); - - pickup pencircle scaled linethickness; - - save height, yoffs_bt, p, circle, circle_r; - path p, circle, circle_r; - - height# = 0.47 ht#; - yoffs_bt# = yoffs# - 0.5 height# - 0.25 convexity#; - - define_pixels (height, yoffs_bt); - - circle := fullcircle scaled linethickness; - - x1 = x6; - x2 = x5; - x3 = x4; - y1 + height = y6; - y2 + height = y5; - y3 + height = y4; - - save box_top, box_bt; - - z1 = (0.00 wd + linethickness / 2, yoffs_bt - 2.5 convexity); - z2 = (0.06 wd, yoffs_bt + 1.4 convexity); - z3 = (0.42 wd - linethickness / 2, yoffs_bt - 1.0 convexity); - box_top# = height# + yoffs_bt# + - max (-1.0 convexity#, 1.4 convexity#, 0); - box_bt# = yoffs_bt# + - min (-1.0 convexity#, 1.4 convexity#, 0); - p = z1{-d_} - .. {curl 1}z2{right} - .. z3 - -- z4 - .. {left}z5{curl 1} - .. {d_}z6 - -- cycle; - - labels (1, 2, 3, 4, 5, 6); - - save dirs; - pair dirs[]; - - dirs12 := direction (0 + epsilon) of p; - dirs21 := direction (1 - epsilon) of p; - dirs23 := direction (1 + epsilon) of p; - dirs32 := direction (2 - epsilon) of p; - dirs45 := direction (3 + epsilon) of p; - dirs54 := direction (4 - epsilon) of p; - dirs56 := direction (4 + epsilon) of p; - dirs65 := direction (5 - epsilon) of p; - - fill get_subpath (circle, down, dirs12, z1) - .. get_subpath (circle, dirs21, dirs23, z2) - .. get_subpath (circle, dirs32, up, z3) - -- get_subpath (circle, up, dirs45, z4) - .. get_subpath (circle, dirs54, dirs56, z5) - .. get_subpath (circle, dirs65, down, z6) - -- cycle; - - save stem_bt; - - if left_stem: - pickup pencircle scaled 0.6 linethickness; - - lft x11 = x1 - linethickness / 2; - bot y11 = yoffs - 1.1 ht - linethickness / 2; - x12 = x11; - y12 = y1; - - draw_rounded_block (bot lft z11, top rt z12, - 0.6 linethickness); - stem_bt# = yoffs# - 1.1 ht#; - - labels (11, 12); - else: - stem_bt# = 0; - fi; - - set_char_box (0.00 wd#, 0.42 wd#, - max (0, -box_bt#, -stem_bt#) + linethickness# / 2, - max (0, box_top#) + linethickness# / 2); - fet_endchar; -enddef; - - -def inclinatum_char (expr verbose_name, internal_name, - small, stropha, auctum) = - fet_beginchar (verbose_name, "s" & internal_name); - save ht, alpha; - - alpha := 35; - - if small: - ht# = 0.50 noteheight#; - else: - ht# = 0.80 noteheight#; - fi; - - draw_diamond_head (ht#, 0, 0, alpha, false); - - save off_angle; - - off_angle := alpha + 15; - - save stropha_ellipse, auctum_hook, circle; - path stropha_ellipse, auctum_hook, circle; - - circle := reverse fullcircle scaled linethickness; - - stropha_ellipse := fullcircle xscaled 0.25 head_height - yscaled 0.55 head_height - rotated alpha; - - z11 = z12 - + linethickness / 2 * dir (180 - off_angle) - - directionpoint dir (90 - off_angle) - of stropha_ellipse; - z12 = directionpoint -dir (90 - off_angle) of diamond_shape + - linethickness / 2 * dir (180 - off_angle); - z13 = (0, -0.5 head_height + linethickness); - - auctum_hook := z12{-dir (90 - off_angle)} - .. {dir (90 + alpha)}z13; - - labels (12); - - if (stropha and not auctum): - clearit; - - save t_in, t_out; - - t_in := xpart ((stropha_ellipse shifted z11) - intersectiontimes - get_subpath (diamond_shape, - left, up, - (0, 0))); - t_out := xpart ((stropha_ellipse shifted z11) - intersectiontimes - get_subpath (diamond_shape, - up, right, - (0, 0))); - - % the addition or subtraction of `1' is necessary - % so that we get the right starting point - fill get_subpath_i (diamond_shape, - dir (angle (z2 - z1) - 1), - dir (angle (z1 - z4) + 1), - (0, 0)) - -- get_subpath (stropha_ellipse, - direction t_in of stropha_ellipse, - direction t_out of stropha_ellipse, - z11) - -- cycle; - - labels (11); - fi; - - if (auctum and not stropha): - clearit; - - fill get_subpath (diamond_shape, - left, - -dir (90 - off_angle), - (0, 0)) - .. get_subpath (circle, - dir (90 + alpha), - -dir (90 + alpha), - z13) - .. get_subpath (circle, - dir (90 - off_angle), - right, - z12) - -- cycle; - - labels (13); - fi; - - if (auctum and stropha): - clearit; - - save t; - - t := xpart ((stropha_ellipse shifted z11) - intersectiontimes - get_subpath (diamond_shape, up, right, - (0, 0))); - - % the addition or subtraction of `1' is necessary - % so that we get the right starting point - fill get_subpath_i (diamond_shape, - dir (angle (z2 - z1) - 1), - -dir (90 - off_angle), - (0, 0)) - .. get_subpath (circle, - dir (90 + alpha), - -dir (90 + alpha), - z13) - .. get_subpath (stropha_ellipse, - dir (90 - off_angle), - direction t of stropha_ellipse, - z11) - -- cycle; - - labels (11, 13); - fi; - fet_endchar; -enddef; - - -% punctum -vat_punctum_char ("Ed. Vat. punctum", "vaticana.punctum", - false, false, false, false, - false, false, false, 1.0); - - -% punctum cavum (for OpusTeX compatibility) -vat_punctum_char ("Ed. Vat. punctum cavum", "vaticana.punctum.cavum", - false, true, false, false, - false, false, false, 1.0); - - -% linea punctum (for OpusTeX compatibility) -vat_punctum_char ("Ed. Vat. linea punctum", "vaticana.linea.punctum", - true, false, false, false, - false, false, false, 1.0); - - -% linea punctum cavum (for OpusTeX compatibility) -vat_punctum_char ("Ed. Vat. linea punctum cavum", "vaticana.linea.punctum.cavum", - true, true, false, false, - false, false, false, 1.0); - - -% punctum inclinatum -inclinatum_char ("Ed. Vat. inclinatum", "vaticana.inclinatum", - false, false, false); - - -% pes lower punctum -vat_punctum_char ("Ed. Vat. pes lower punctum", "vaticana.lpes", - false, false, true, false, - true, false, false, 1.0); - - -% pes lower punctum -vat_punctum_char ("Ed. Vat. pes var lower punctum", "vaticana.vlpes", - false, false, true, false, - true, false, true, 1.0); - - -% pes upper punctum -vat_punctum_char ("Ed. Vat. pes upper punctum", "vaticana.upes", - false, false, true, false, - false, false, false, 1.0); - - -% pes upper punctum (shifted variation) -% -% This note head is used instead of the regular pes upper punctum to -% avoid collision with the lower punctum note of the pes when the upper -% punctum sits directly on top of the lower punctum. -% -vat_punctum_char ("Ed. Vat. var pes upper punctum", "vaticana.vupes", - false, false, true, false, - false, true, false, 1.0); - - -% small punctum as used in epiphonus -vat_punctum_char ("Ed. Vat. plica", "vaticana.plica", - false, false, false, false, - false, false, false, 0.6); - - -% small punctum as used in epiphonus -plica_char ("Ed. Vat. var plica", "vaticana.vplica", - false, 0.6); - - -% eccentric punctum as used in epiphonus -epiphonus_char ("Ed. Vat. epiphonus", "vaticana.epiphonus", - false, true, false, 1.0); - - -% eccentric punctum as used in epiphonus (shifted variation) -% -% This note head is used instead of the regular epiphonus punctum to -% avoid collision with the plica head when the plica sits directly on -% top of the lower head. -% -epiphonus_char ("Ed. Vat. var epiphonus", "vaticana.vepiphonus", - false, true, true, 1.0); - - -% small punctum as used in cephalicus -vat_punctum_char ("Ed. Vat. rev. plica", "vaticana.reverse.plica", - false, false, false, false, - true, false, false, 0.6); - - -% small punctum as used in cephalicus -plica_char ("Ed. Vat. rev. var plica", "vaticana.reverse.vplica", - true, 0.6); - - -% eccentric punctum as used in cephalicus; without left stem -epiphonus_char ("Ed. Vat. inner cephalicus", "vaticana.inner.cephalicus", - false, false, false, 1.0); - - -% eccentric punctum as used in cephalicus; with left stem -epiphonus_char ("Ed. Vat. cephalicus", "vaticana.cephalicus", - true, false, false, 1.0); - - -% quilisma -fet_beginchar ("Ed. Vat. quilisma", "svaticana.quilisma"); - save a_b, b_h, a_w; - - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; - - save a, beta, ht, wd; - - ht# = noteheight#; - 2 beta = ht# * b_h; - a = beta * a_b; - wd# = 2 a / a_w; - - set_char_box (0, 0.42 wd#, 0.28 ht#, 0.36 ht#); - - black_notehead_width# := wd#; - - define_pixels (ht, wd); - - save ellipse, T; - path ellipse; - transform T; - - T := identity xscaled linethickness - yscaled 0.44 ht; - pickup pencircle transformed T; - ellipse := reverse fullcircle transformed T; - - z1 = (rt 0.00 wd, top -0.28 ht); - z2 = (0.11 wd, -0.14 ht); - z3 = (0.12 wd, +0.03 ht); - z4 = (0.25 wd, -0.09 ht); - z5 = (0.25 wd, +0.08 ht); - z6 = (lft 0.42 wd, -0.04 ht); - z7 = (lft 0.40 wd, bot +0.36 ht); - - fill get_subpath (ellipse, z1 - z2, z2 - z1, z1) - -- get_subpath (ellipse, z2 - z1, z1 - z2, z2) - -- cycle; - fill get_subpath (ellipse, z3 - z4, z4 - z3, z3) - -- get_subpath (ellipse, z4 - z3, z3 - z4, z4) - -- cycle; - fill get_subpath (ellipse, z5 - z6, z6 - z5, z5) - -- point 0 of get_subpath (ellipse, z6 - z5, z5 - z6, z6) - -- get_subpath (ellipse, z7 - z6, z6 - z7, z7) - -- get_subpath (ellipse, z6 - z7, z5 - z6, z6) - -- cycle; - - labels (1, 2, 3, 4, 5, 6, 7); -fet_endchar; - - -% solesmes punctum inclinatum parvum -inclinatum_char ("Solesmes punctum inclinatum parvum", "solesmes.incl.parvum", - true, false, false); - - -% solesmes punctum auctum ascendens -vat_punctum_char ("Solesmes punctum auctum ascendens", "solesmes.auct.asc", - false, false, false, true, - true, false, false, 1.0); - - -% solesmes punctum auctum descendens -vat_punctum_char ("Solesmes punctum auctum descendens", "solesmes.auct.desc", - false, false, false, true, - false, false, false, 1.0); - - -% solesmes punctum inclinatum auctum -inclinatum_char ("Solesmes punctum incl. auctum", "solesmes.incl.auctum", - false, false, true); - - -% solesmes stropha -inclinatum_char ("Solesmes stropha", "solesmes.stropha", - false, true, false); - - -% solesmes stropha aucta -inclinatum_char ("Solesmes stropha aucta", "solesmes.stropha.aucta", - false, true, true); - - -% solesmes oriscus -fet_beginchar ("Solesmes oriscus", "ssolesmes.oriscus"); - save a_b, b_h, a_w; - - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; - - save a, beta, ht, wd; - - ht# = noteheight#; - 2 beta = ht# * b_h; - a = beta * a_b; - wd# = 2 a / a_w; - black_notehead_width# := wd#; - - save convexity; - - convexity# = +0.05 ht#; - - define_pixels (ht, wd, convexity); - - set_char_box (0.00 wd#, 0.50 wd#, - 0.25 ht# + convexity#, 0.25 ht# + convexity#); - - z1 = (0.00 wd + blot_diameter / 2, -convexity); - z2 = (1/6 wd, +convexity); - z3 = (2/6 wd, -convexity); - z4 = (0.50 wd - blot_diameter / 2, +convexity); - - - save height; - - height = 2 ypart (directionpoint right of (z1 - .. z2 - .. z3 - .. z4)); - - save ellipse, T; - path ellipse; - transform T; - - T := identity xscaled blot_diameter - yscaled (h + d - height); - pickup pencircle transformed T; - ellipse := fullcircle transformed T; - - % Adjust vertical coordinates to touch bounding box. - y1 := top -d; - y4 := bot h; - - save d_; - pair d_; - - d_ := direction 0 of (z1 - .. z2 - .. z3 - .. z4); - - fill get_subpath (ellipse, -d_, d_, z1) - .. bot z2 - .. bot z3 - .. get_subpath (ellipse, d_, -d_, z4) - .. top z3 - .. top z2 - .. cycle; - - labels (1, 2, 3, 4); -fet_endchar; - - -%%%%%%%% -% -% -% -% EDITIO MEDICAEA -% -% -% - -% inclinatum -fet_beginchar ("Ed. Med. inclinatum", "smedicaea.inclinatum"); - draw_diamond_head (1.2 staff_space#, 0, 0, 35, false); -fet_endchar; - - -def med_punctum_char (expr verbose_name, internal_name, - left_up_stem, left_down_stem) = - fet_beginchar (verbose_name, "s" & internal_name); - save a, ht, wd; - - ht# = 2 staff_space#; - wd# = ht#; - black_notehead_width# := wd#; - - define_pixels (ht, wd); - - save ellipse; - path ellipse; - - ellipse := fullcircle xscaled blot_diameter - yscaled 0.50 ht; - - z1 = (0.00 wd + blot_diameter / 2, 0); - z2 = (0.4 wd - blot_diameter / 2, 0); - - labels (1, 2); - - pickup pencircle scaled linethickness; - - if left_down_stem: - z4 = (0.00 wd + linethickness / 2, -1.25 ht); - - fill get_subpath (ellipse, left, down, z1) - -- top lft z4{down} - .. z4{right} - .. top rt z4{up} - -- (rt x4, -.5 ht / 2) - -- get_subpath (ellipse, right, left, z2) - -- cycle; - - labels (4); - - set_char_box (0.0, 0.4 wd#, 1.25 ht#, 0.25 ht#); - elseif left_up_stem: - z4 = (0.00 wd + linethickness / 2, +1.25 ht); - - fill get_subpath (ellipse, down, right, z1) - -- get_subpath (ellipse, right, left, z2) - -- (rt x4, .5 ht / 2) - -- bot rt z4{up} - .. z4{left} - .. bot lft z4{down} - -- cycle; - - labels (4); - - set_char_box (0.0, 0.4 wd#, 0.25 ht#, 1.25 ht#); - else: - fill get_subpath (ellipse, left, right, z1) - -- get_subpath (ellipse, right, left, z2) - -- cycle; - - set_char_box (0.0, 0.4 wd#, 0.25 ht#, 0.25 ht#); - fi; - - fet_endchar; -enddef; - - -% punctum -med_punctum_char ("Ed. Med. punctum", "medicaea.punctum", - false, false); - - -% left up-stemmed punctum -med_punctum_char ("Ed. Med. reverse virga", "medicaea.rvirga", - true, false); - - -% virga (i.e. left down-stemmed punctum) -med_punctum_char ("Ed. Med. virga", "medicaea.virga", - false, true); - - -%%%%%%%% -% -% -% -% HUFNAGEL -% -% -% - -def huf_punctum_char (expr verbose_name, internal_name, - down_stem) = - fet_beginchar (verbose_name, "s" & internal_name); - save alpha; - - alpha = 55; - - draw_diamond_head (staff_space#, 0, 0, alpha, false); - - if down_stem: - set_char_box (0, head_width#, - 1.5 staff_space#, head_height# / 2); - - save ellipse; - path ellipse; - - ellipse := reverse fullcircle xscaled blot_diameter - yscaled 0.7 staff_space - rotated -alpha; - - z11 = (head_width / 2, 0); - z12 = find_tangent_shift (((0, -d) -- (w, -d)), ellipse, - (w / 2, -d), (w / 2, 0)); - - fill get_subpath (ellipse, up, down, z11) - -- get_subpath (ellipse, down, up, z12) - -- cycle; - - labels (11, 12); - fi; - fet_endchar; -enddef; - - -% punctum -huf_punctum_char ("Hufnagel punctum", "hufnagel.punctum", false) - - -% virga -huf_punctum_char ("Hufnagel virga", "hufnagel.virga", true) - - -% pes lower punctum -fet_beginchar ("Hufnagel pes lower punctum", "shufnagel.lpes") - save width, height, alpha; - - width# = 2 * staff_space#; - height# = 0.7 * staff_space#; - alpha = 35; - - set_char_box (0, width#, height# / 2, height# / 2); - - define_pixels (width, height); - - save circle; - path circle; - - circle := reverse fullcircle scaled linethickness; - - pickup pencircle scaled linethickness; - - rt x3 = -lft x1 = width / 2; - y2 = y3 = height / 2; - y1 = y4 = -height / 2; - - tand (alpha) * (y2 - y1) = x2 - x1 = x3 - x4; - - fill get_subpath (circle, left, z2 - z1, z1) - -- get_subpath (circle, z2 - z1, right, z2) - -- get_subpath (circle, right, z4 - z3, z3) - -- get_subpath (circle, z4 - z3, left, z4) - -- cycle; - - currentpicture := currentpicture shifted (width/2, 0); - -% labels (1, 2, 3, 4); -fet_endchar; - - -fet_endgroup ("noteheads"); diff --git a/mf/parmesan-macros.mf b/mf/parmesan-macros.mf index 94d728a3e2..5db67674e9 100644 --- a/mf/parmesan-macros.mf +++ b/mf/parmesan-macros.mf @@ -1,10 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-macros.mf -- macros for parmesan font -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2001--2009 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- macros for parmesan font +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2001--2011 Juergen Reuter % +% +% 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 . % diff --git a/mf/parmesan-noteheads.mf b/mf/parmesan-noteheads.mf new file mode 100644 index 0000000000..682dc8bc3c --- /dev/null +++ b/mf/parmesan-noteheads.mf @@ -0,0 +1,1579 @@ +% Feta (not the Font-En-Tja) music font -- ancient note heads +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2001--2011 Juergen Reuter +% +% Neo-mensural heads originally by +% Christian Mondrup and Mats Bengtsson +% +% +% 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 . + +save black_notehead_width; +numeric black_notehead_width; + +fet_begingroup ("noteheads"); + +% +% character aligment: +% +% The head is assumed to be vertically centered around (0, 0). +% The left-most edge of the head should touch the vertical line +% that goes though the point (0, 0). +% +% set_char_box() conventions: +% +% * breapth: Ignored (as far as I know). Should be set to 0. +% +% * width: Should match the head's width. +% +% * depth: Should match the bottom edge of the head. Affects vertical +% collision handling. +% +% * height: Should match the top edge of the head. Affects vertical +% collision handling. +% +% TODO: should depth/height include appendages/stems? + +overdone_heads = 0; +noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#; +define_pixels (noteheight); + + +%%%%%%%% +% +% +% +% MENSURAL NOTATION +% +% +% + +def draw_neomensural_brevis (expr brevwid, open, full) = + save beamheight, head_width; + save holeheight, stem_width; + save serif_size, serif_protrude; + + head_width# = brevwid; + holeheight = 3 stafflinethickness; + stem_width = 1.4 stafflinethickness; + + define_pixels (head_width); + + set_char_box (0, head_width#, + noteheight# / 2, noteheight# / 2); + + 2 beamheight + holeheight = noteheight; + serif_size = (holeheight - stafflinethickness) / 2; + serif_protrude = 1.5 serif_size; + + z1l = (0, 0); + z2l = (0, -stafflinethickness / 2); + z3r = z2r + serif_size * (1, -1); + y4r = y3r; + x4r = head_width / 2; + z5l = z3l + (-serif_size, -serif_protrude); + + penpos1 (stem_width, 0); + penpos2 (stem_width, 0); + penpos3 (beamheight, 90); + penpos4 (beamheight, 90); + penpos5 (stem_width, 180); + + save pat_out; + path pat_out; + + pat_out := z4l + -- z3l{left} + .. z5l{down} + .. z5r{up} + -- z1l; + pat_out := pat_out + -- reverse pat_out yscaled -1; + pat_out := pat_out + -- reverse pat_out shifted (-x4r, 0) + xscaled -1 + shifted (x4l, 0) + -- cycle; + fill pat_out; + + if open: + save pat_in; + path pat_in; + + pat_in := z4r + -- z3r{left} + .. z2r{up} + -- z1r; + pat_in := pat_in + -- reverse pat_in yscaled -1; + if full: + pat_in := pat_in + -- reverse pat_in shifted (-x4r, 0) + xscaled -1 + shifted (x4l, 0); + fi; + pat_in := pat_in + -- cycle; + unfill pat_in; + fi; + + penlabels (1, 2, 3, 4, 5); +enddef; + + +%%% This head does not seem to be used anywhere. Junk me? -- jr +def draw_neomensural_left_stemmed_head (expr wid) = + draw_neomensural_brevis (wid, true, true); + + x6 = x7 = stem_width / 2; + y6 = y5; + y7 = y5 - 2.25 staff_space; + + z17 = (x7, y7 - stem_width / 2); + + penpos6 (stem_width, 0); + penpos7 (stem_width, 0); + + fill z7l + -- z6l + -- z6r + -- z7r + .. z17 + .. cycle; + + penlabels (6, 7); + labels (17); +enddef; + + +%%% This head does not seem to be used anywhere. Junk me? -- jr +fet_beginchar ("Left stemmed notehead", "slneomensural"); + draw_neomensural_left_stemmed_head (2 staff_space#); +fet_endchar; + + +% +% Some sources (eg. Musix/OpusTeX) think that the appendage should be on +% the left, some say right. Right wins democratically. +% +def draw_neomensural_longa (expr wid) = + draw_neomensural_brevis (wid, true, true); + + save theta; + + x7r = head_width; + y7 = y5; + z6 - z7 = (stem_width / 2, -staff_space); + theta = angle (z6 - z7) + 90; + + penpos7 (stem_width, 0); + penpos6 (1.2 stem_width, theta); + + z7' = find_tangent (z6l, pat_out, + (x7l + 0.5 stem_width, y7l), + (x7l - 0.5 stem_width, y7l)); + + fill z7r + .. z6r{z6 - z7} + .. {z7 - z6}z6l + -- z7' + -- cycle; + + penlabels (6, 7); + labels (7'); +enddef; + + +% +% En wij presenteren U: de opvolgster van Emily +% +% (ze is wel breed) +% +fet_beginchar ("Neo-mensural maxima notehead", "sM3neomensural"); + draw_neomensural_longa (2.6 staff_space#); +fet_endchar; + + +fet_beginchar ("Neo-mensural longa notehead", "sM2neomensural"); + draw_neomensural_longa (2 staff_space#); +fet_endchar; + + +fet_beginchar ("Neo-mensural brevis notehead", "sM1neomensural"); + draw_neomensural_brevis (2 staff_space#, true, true); +fet_endchar; + + +def draw_neomensural_black_head (expr wid, height) = + save head_width; + save ne, nw, ne_dist, nw_dist; + pair ne, nw, ne_dist, nw_dist; + + head_width# = wid; + + set_char_box (0, head_width#, + height / 2, height / 2); + + charwx := head_width# / 2; + charwy := height / 2; + + y3 = y1 = 0; + x2 = x4 = (x1 + x3) / 2; + + pickup pencircle scaled blot_diameter; + + top y2 = h; + bot y4 = -d; + lft x1 = 0; + rt x3 = w; + + ne := unitvector (z2 - z1); + nw_dist := (ne rotated 90) * 0.5 blot_diameter; + nw := unitvector (z2 - z3); + ne_dist := (nw rotated -90) * 0.5 blot_diameter; + + fill lft z1{up} + .. (z1 + nw_dist){ne} + -- (z2 + nw_dist){ne} + .. top z2{right} + .. (z2 + ne_dist){-nw} + -- (z3 + ne_dist){-nw} + .. rt z3{down} + .. (z3 - nw_dist){-ne} + -- (z4 - nw_dist){-ne} + .. bot z4{left} + .. (z4 - ne_dist){nw} + -- (z1 - ne_dist){nw} + .. cycle; + + labels (1, 2, 3, 4); +enddef; + + +def draw_neomensural_open_head (expr wid, height)= + draw_neomensural_black_head (wid, height); + + save diamNW, diamSW; + + diamNW = length (z2 - z1) + blot_diameter; + diamSW = length (z4 - z1) + blot_diameter; + + save hole_widthNW, hole_widthSW; + + hole_widthNW = 0.34 diamNW ; + hole_widthSW + 2.6 linethickness = diamSW; + + (z7 + z5) / 2 = (w / 2, 0); + (z8 + z6) / 2 = (w / 2, 0); + z6 - z5 = hole_widthNW * unitvector (z2 - z1); + z7 - z6 = hole_widthSW * unitvector (z4 - z1); + + unfill z5 + -- z6 + -- z7 + -- z8 + -- cycle; + + labels (5, 6, 7, 8); +enddef; + + +% +% WL says the thin lines should be thinner. +% +fet_beginchar ("Harmonic notehead (Neo-mensural open)", "s0harmonic"); + draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#); + charwx := head_width#; + charwy := 0; +fet_endchar; + + +fet_beginchar ("Harmonic notehead (Neo-mensural black)", "s2harmonic"); + draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#); + charwx := head_width#; + charwy := 0; +fet_endchar; + + +fet_beginchar ("Neo-mensural semibrevis head", "s0neomensural"); + draw_neomensural_open_head (staff_space#, noteheight#); +fet_endchar; + + +fet_beginchar ("Neo-mensural minima head", "s1neomensural"); + draw_neomensural_open_head (staff_space#, noteheight#); +fet_endchar; + + +fet_beginchar ("Neo-mensural semiminima head", "s2neomensural"); + draw_neomensural_black_head (staff_space#, noteheight#); +fet_endchar; + + +def draw_mensural_brevis (expr wid, open, full) = + % TODO. For the moment, fall back to draw_neomensural_brevis. + draw_neomensural_brevis (wid, open, full); +enddef; + + +%%% This head does not seem to be used anywhere. Junk me? -- jr +def draw_mensural_left_stemmed_head (expr wid, open, full) = + draw_mensural_brevis (wid, open, full); + + x6 = x7 = stem_width / 2; + y6 = y5; + y7 = y5 - 2.25 staff_space; + + z17 = (x7, y7 - stem_width / 2); + + penpos6 (stem_width, 0); + penpos7 (stem_width, 0); + + fill z7l + -- z6l + -- z6r + -- z7r + .. z17 + .. cycle; + + penlabels (6, 7); + labels (17); +enddef; + + +def draw_mensural_longa (expr wid, open, full) = + draw_mensural_brevis (wid, open, full); + + x6 = x7 = head_width - stem_width / 2; + y6 = y5; + y7 = y5 - 2.25 staff_space; + + z17 = (x7, y7 - stem_width / 2); + + penpos6 (stem_width, 0); + penpos7 (stem_width, 0); + + fill z7l + -- z6l + -- z6r + -- z7r + .. z17 + .. cycle; + + penlabels (6, 7); + labels (17); +enddef; + + +%%% This head does not seem to be used anywhere. Junk me? -- jr +fet_beginchar ("Mensural left stemmed notehead", "slmensural"); + draw_mensural_left_stemmed_head (staff_space#, true, true); +fet_endchar; + + +fet_beginchar ("Mensural maxima notehead", "sM3mensural"); + draw_mensural_longa (2.0 staff_space#, true, true); +fet_endchar; + + +fet_beginchar ("Mensural maxima notehead in ligaturae", "sM3ligmensural"); + draw_mensural_brevis (2.0 staff_space#, true, true); +fet_endchar; + + +fet_beginchar ("Mensural longa notehead", "sM2mensural"); + draw_mensural_longa (staff_space#, true, true); +fet_endchar; + + +fet_beginchar ("Mensural brevis notehead", "sM1mensural"); + draw_mensural_brevis (staff_space#, true, true); +fet_endchar; + + +fet_beginchar ("Black mensural maxima notehead", "sM3blackmensural"); + draw_mensural_longa (2.0 staff_space#, false, false); +fet_endchar; + + +fet_beginchar ("Black mensural maxima notehead in ligaturae", "sM3blackligmensural"); + draw_mensural_brevis (2.0 staff_space#, false, false); +fet_endchar; + + +fet_beginchar ("Black mensural longa notehead", "sM2blackmensural"); + draw_mensural_longa (staff_space#, false, false); +fet_endchar; + + +fet_beginchar ("Black mensural brevis notehead", "sM1blackmensural"); + draw_mensural_brevis (staff_space#, false, false); +fet_endchar; + + +fet_beginchar ("Semi-colored mensural maxima notehead", "sM3semimensural"); + draw_mensural_longa (2.0 staff_space#, true, false); +fet_endchar; + + +fet_beginchar ("Semi-colored mensural maxima notehead in ligaturae", "sM3semiligmensural"); + draw_mensural_brevis (2.0 staff_space#, true, false); +fet_endchar; + + +fet_beginchar ("Semi-colored mensural longa notehead", "sM2semimensural"); + draw_mensural_longa (staff_space#, true, false); +fet_endchar; + + +fet_beginchar ("Semi-colored mensural brevis notehead", "sM1semimensural"); + draw_mensural_brevis (staff_space#, true, false); +fet_endchar; + + +def draw_diamond_head (expr head_h, pen_w, pen_h, angle, open) = + save head_width, head_height; + save ellipse, ellipse_r; + path ellipse, ellipse_r, diamond_shape; + + head_height# = head_h; + head_width# / head_height# = tand (angle); + + set_char_box (0, head_width#, + head_height# / 2, head_height# / 2); + + charwx := head_width# / 2; + charwy := head_height# / 2 - linethickness#; + + define_pixels (head_width, head_height); + + ellipse := reverse fullcircle + xscaled (max (blot_diameter, pen_w * head_width)) + yscaled (max (blot_diameter, pen_h * head_width)) + rotated -angle; + + z1 = find_tangent_shift (((0, h) -- (0, -h)), ellipse, + (0, 0), (w / 2, 0)); + z2 = find_tangent_shift (((0, h) -- (w, h)), ellipse, + (w / 2, h), (w / 2, 0)); + z3 = find_tangent_shift (((w, h) -- (w, -h)), ellipse, + (w, 0), (w / 2, 0)); + z4 = find_tangent_shift (((0, -h) -- (w, -h)), ellipse, + (w / 2, -h), (w / 2, 0)); + + diamond_shape := get_subpath (ellipse, z1 - z4, z2 - z1, z1) + -- get_subpath (ellipse, z2 - z1, z3 - z2, z2) + -- get_subpath (ellipse, z3 - z2, z4 - z3, z3) + -- get_subpath (ellipse, z4 - z3, z1 - z4, z4) + -- cycle; + fill diamond_shape; + + if open: + save l; + path l[]; + + l12 := (directionpoint (z1 - z2) of ellipse) shifted z1 + -- (directionpoint (z1 - z2) of ellipse) shifted z2; + l23 := (directionpoint (z2 - z3) of ellipse) shifted z2 + -- (directionpoint (z2 - z3) of ellipse) shifted z3; + l34 := (directionpoint (z3 - z4) of ellipse) shifted z3 + -- (directionpoint (z3 - z4) of ellipse) shifted z4; + l41 := (directionpoint (z4 - z1) of ellipse) shifted z4 + -- (directionpoint (z4 - z1) of ellipse) shifted z1; + + unfill l12 intersectionpoint l23 + -- l23 intersectionpoint l34 + -- l34 intersectionpoint l41 + -- l41 intersectionpoint l12 + -- cycle; + fi; + + labels (1, 2, 3, 4); +enddef; + + +fet_beginchar ("Mensural semibrevis head", "s0mensural"); + draw_diamond_head (staff_space#, 0.15, 0.30, 30, true); +fet_endchar; + + +fet_beginchar ("Mensural minima head", "s1mensural"); + draw_diamond_head (staff_space#, 0.15, 0.30, 30, true); +fet_endchar; + + +fet_beginchar ("Mensural semiminima head", "s2mensural"); + draw_diamond_head (staff_space#, 0.15, 0.30, 30, false); +fet_endchar; + + +fet_beginchar ("Black mensural semibrevis head", "s0blackmensural"); + draw_diamond_head (staff_space#, 0.15, 0.30, 30, false); +fet_endchar; + + +fet_beginchar ("Petrucci semibrevis head", "s0petrucci"); +% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true); + draw_neomensural_open_head (staff_space#, 1.8 staff_space#); +fet_endchar; + + +fet_beginchar ("Petrucci minima head", "s1petrucci"); +% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true); + draw_neomensural_open_head (staff_space#, 1.8 staff_space#); +fet_endchar; + + +fet_beginchar ("Petrucci semiminima head", "s2petrucci"); +% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, false); + draw_neomensural_black_head (staff_space#, 1.8 staff_space#); +fet_endchar; + + +fet_beginchar ("Petrucci colored semibrevis head", "s0blackpetrucci"); +% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true); + draw_neomensural_black_head (staff_space#, 1.8 staff_space#); +fet_endchar; + + +fet_beginchar ("Petrucci colored minima head", "s1blackpetrucci"); +% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true); + draw_neomensural_black_head (staff_space#, 1.8 staff_space#); +fet_endchar; + + +fet_beginchar ("Petrucci colored semiminima head", "s2blackpetrucci"); +% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true); + draw_neomensural_black_head (staff_space#, 1.8 staff_space#); +fet_endchar; + + +%%%%%%%% +% +% +% +% EDITIO VATICANA (including solesmes extensions) +% +% +% + +def vat_punctum_char (expr verbose_name, internal_name, + linea, cavum, straight, auctum, + d_up, up_shift, down_shift, mag) = + fet_beginchar (verbose_name, "s" & internal_name); + save a_b, b_h, a_w; + + a_b := 1.54; % b_h * a_b / a_w = wd / ht + b_h := 0.85; + a_w := 1.09; + + save a, beta, ht, wd; + + ht# = noteheight# * mag; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; + black_notehead_width# := wd#; + + % direction + save d_, d_sign; + pair d_; + + if d_up: + d_ := up; + d_sign := 1; + else: + d_ := down; + d_sign := -1; + fi; + + % convexity and eccentricity + save u_convexity, u_eccentricity; + + if straight: + u_convexity# := -0.01 ht#; + u_eccentricity# := 0.0 ht#; % dummy + elseif auctum: + u_convexity# := -0.03 ht#; + u_eccentricity# := +0.25 ht#; + else: + u_convexity# := -0.05 ht#; + u_eccentricity# := 0.0 ht#; % dummy + fi; + + save convexity, eccentricity; + + convexity# := d_sign * u_convexity#; + eccentricity# := d_sign * u_eccentricity#; + + % y shift offset + save yoffs; + + if up_shift: + yoffs# := 0.08 ht#; + elseif down_shift: + yoffs# := -0.11 ht#; + else: + yoffs# := 0.00 ht#; + fi; + + define_pixels (convexity, eccentricity, yoffs, ht, wd); + + pickup pencircle scaled linethickness; + + save height, yoffs_bt, p, circle, circle_r; + path p, circle, circle_r; + + height# = 0.47 ht#; + yoffs_bt# = yoffs# - 0.5 height# - 0.25 convexity#; + + define_pixels (height, yoffs_bt); + + circle := fullcircle scaled linethickness; + + x1 = x6; + x2 = x5; + x3 = x4; + y1 + height = y6; + y2 + height = y5; + y3 + height = y4; + + save box_top, box_bt; + + if auctum: + z1 = (0.00 wd + linethickness / 2, yoffs_bt); + z2 = (0.21 wd, yoffs_bt + convexity); + z3 = (0.42 wd - linethickness/ 2, + yoffs_bt + eccentricity); + box_top# = height# + yoffs_bt# + + max (0, convexity#, eccentricity#); + box_bt# = yoffs_bt# + + min (0, convexity#, eccentricity#); + p = z1 + .. {right}z2 + .. {d_}z3 + -- z4{-d_} + .. z5{left} + .. z6 + -- cycle; + else: + z1 = (0.00 wd + linethickness / 2, yoffs_bt); + z2 = (0.21 wd, yoffs_bt + convexity); + z3 = (0.42 wd - linethickness / 2, yoffs_bt); + box_top# = height# + yoffs_bt# + max (0, convexity#); + box_bt# = yoffs_bt# + min (0, convexity#); + p = z1 + .. z2 + .. z3 + -- z4 + .. z5 + .. z6 + -- cycle; + fi; + + labels (1, 2, 3, 4, 5, 6); + + save dirs; + pair dirs[]; + + dirs12 := direction (0 + epsilon) of p; + dirs2 := direction 1 of p; + dirs32 := direction (2 - epsilon) of p; + dirs45 := direction (3 + epsilon) of p; + dirs5 := direction 4 of p; + dirs65 := direction (5 - epsilon) of p; + + fill get_subpath (circle, down, dirs12, z1) + .. (bot z2){dirs2} + .. get_subpath (circle, dirs32, up, z3) + -- get_subpath (circle, up, dirs45, z4) + .. (top z5){dirs5} + .. get_subpath (circle, dirs65, down, z6) + -- cycle; + + if cavum: + save pat, t; + path pat[]; + numeric t[]; + + pat123 := ((directionpoint -dirs12 of circle) + shifted z1){dirs12} + .. (top z2){dirs2} + .. {dirs32}((directionpoint -dirs32 of circle) + shifted z3); + pat34 := lft z3 + -- lft z4; + pat456 := ((directionpoint -dirs45 of circle) + shifted z4){dirs45} + .. (bot z5){dirs5} + .. {dirs65}((directionpoint -dirs65 of circle) + shifted z6); + pat61 := rt z6 + -- rt z1; + + t61 := ypart (pat61 intersectiontimes pat123); + t12 := xpart (pat123 intersectiontimes pat34); + t34 := ypart (pat34 intersectiontimes pat456); + t45 := xpart (pat456 intersectiontimes pat61); + + unfill subpath (t61, t12) of pat123 + -- subpath (t34, t45) of pat456 + -- cycle; + fi; + + set_char_box (0.00 wd#, 0.42 wd#, + max (0, -box_bt#) + linethickness# / 2, + max (0, box_top#) + linethickness# / 2); + + if linea: + save linea_width, linea_height; + + linea_width# = 0.6 linethickness#; + linea_height# = 0.7 ht#; + + define_pixels (linea_width, linea_height); + + pickup pencircle scaled 0.6 linethickness; + + draw_rounded_block ((-0.10 wd - linea_width / 2, + -linea_height / 2), + (-0.10 wd + linea_width / 2, + +linea_height / 2), + 0.6 linethickness); + draw_rounded_block ((+0.52 wd - linea_width / 2, + -linea_height / 2), + (+0.52 wd + linea_width / 2, + +linea_height / 2), + 0.6 linethickness); + + set_char_box (0, 0.62 wd# + linea_width#, + linea_height# / 2, + linea_height# / 2); + + currentpicture := currentpicture + shifted (0.10 wd + linea_width / 2, 0); + fi; + fet_endchar; +enddef; + + +def plica_char (expr verbose_name, internal_name, + d_up, mag) = + fet_beginchar (verbose_name, "s" & internal_name); + save a_b, b_h, a_w; + + a_b := 1.54; % b_h * a_b / a_w = wd / ht + b_h := 0.85; + a_w := 1.09; + + save a, beta, ht, wd; + + ht# = noteheight# * mag; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; + black_notehead_width# := wd#; + + % direction + save d_, d_sign; + pair d_; + + if d_up: + d_ := up; + d_sign := 1; + else: + d_ := down; + d_sign := -1; + fi; + + % convexity and eccentricity + save convexity, eccentricity; + + convexity# := d_sign * -0.10 ht#; + eccentricity# := d_sign * -0.12 ht#; + + % y shift offset + save yoffs; + + yoffs# := -0.11 ht#; + + define_pixels (convexity, eccentricity, yoffs, ht, wd); + + pickup pencircle scaled linethickness; + + save height, yoffs_bt, p, circle, circle_r; + path p, circle, circle_r; + + height# = 0.47 ht#; + yoffs_bt# = yoffs# - 0.5 height# - 0.25 convexity#; + + define_pixels (height, yoffs_bt); + + circle := fullcircle scaled linethickness; + + x1 = x6; + x2 = x5; + x3 = x4; + y1 + height = y6; + y2 + height = y5; + y3 + height = y4; + + save box_top, box_bt; + + z1 = (0.00 wd + linethickness / 2, yoffs_bt); + z2 = (0.21 wd, yoffs_bt + convexity); + z3 = (0.42 wd - linethickness/ 2, yoffs_bt + eccentricity); + box_top# = height# + yoffs_bt# + + max (0, convexity#, eccentricity#); + box_bt# = yoffs_bt# + + min (0, convexity#, eccentricity#); + p = z1 + .. z2{right} + .. z3 + -- z4 + .. z5{left} + .. z6 + -- cycle; + + labels (1, 2, 3, 4, 5, 6); + + save dirs; + pair dirs[]; + + dirs12 := direction (0 + epsilon) of p; + dirs2 := direction 1 of p; + dirs32 := direction (2 - epsilon) of p; + dirs45 := direction (3 + epsilon) of p; + dirs5 := direction 4 of p; + dirs65 := direction (5 - epsilon) of p; + + fill get_subpath (circle, down, dirs12, z1) + .. (bot z2){dirs2} + .. get_subpath (circle, dirs32, up, z3) + -- get_subpath (circle, up, dirs45, z4) + .. (top z5){dirs5} + .. get_subpath (circle, dirs65, down, z6) + -- cycle; + + pickup pencircle scaled 0.6 linethickness; + + save stem_bt; + + set_char_box (0.00 wd#, 0.42 wd#, + max (0, -box_bt#) + linethickness# / 2, + max (0, box_top#) + linethickness# / 2); + + fet_endchar; +enddef; + + +def epiphonus_char (expr verbose_name, internal_name, + left_stem, d_up, down_shift, mag) = + fet_beginchar (verbose_name, "s" & internal_name); + save a_b, b_h, a_w; + + a_b := 1.54; % b_h * a_b / a_w = wd / ht + b_h := 0.85; + a_w := 1.09; + + save a, beta, ht, wd; + + ht# = noteheight# * mag; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; + black_notehead_width# := wd#; + + % direction + save d_, d_sign; + pair d_; + + if d_up: + d_ := up; + d_sign := 1; + else: + d_ := down; + d_sign := -1; + fi; + + % convexity and eccentricity + save convexity; + + convexity# := d_sign * -0.05ht#; + + % y shift offset + save yoffs; + + if down_shift: + yoffs# := -0.11 ht#; + else: + yoffs# := 0.00 ht#; + fi; + + define_pixels (convexity, yoffs, ht, wd); + + pickup pencircle scaled linethickness; + + save height, yoffs_bt, p, circle, circle_r; + path p, circle, circle_r; + + height# = 0.47 ht#; + yoffs_bt# = yoffs# - 0.5 height# - 0.25 convexity#; + + define_pixels (height, yoffs_bt); + + circle := fullcircle scaled linethickness; + + x1 = x6; + x2 = x5; + x3 = x4; + y1 + height = y6; + y2 + height = y5; + y3 + height = y4; + + save box_top, box_bt; + + z1 = (0.00 wd + linethickness / 2, yoffs_bt - 2.5 convexity); + z2 = (0.06 wd, yoffs_bt + 1.4 convexity); + z3 = (0.42 wd - linethickness / 2, yoffs_bt - 1.0 convexity); + box_top# = height# + yoffs_bt# + + max (-1.0 convexity#, 1.4 convexity#, 0); + box_bt# = yoffs_bt# + + min (-1.0 convexity#, 1.4 convexity#, 0); + p = z1{-d_} + .. {curl 1}z2{right} + .. z3 + -- z4 + .. {left}z5{curl 1} + .. {d_}z6 + -- cycle; + + labels (1, 2, 3, 4, 5, 6); + + save dirs; + pair dirs[]; + + dirs12 := direction (0 + epsilon) of p; + dirs21 := direction (1 - epsilon) of p; + dirs23 := direction (1 + epsilon) of p; + dirs32 := direction (2 - epsilon) of p; + dirs45 := direction (3 + epsilon) of p; + dirs54 := direction (4 - epsilon) of p; + dirs56 := direction (4 + epsilon) of p; + dirs65 := direction (5 - epsilon) of p; + + fill get_subpath (circle, down, dirs12, z1) + .. get_subpath (circle, dirs21, dirs23, z2) + .. get_subpath (circle, dirs32, up, z3) + -- get_subpath (circle, up, dirs45, z4) + .. get_subpath (circle, dirs54, dirs56, z5) + .. get_subpath (circle, dirs65, down, z6) + -- cycle; + + save stem_bt; + + if left_stem: + pickup pencircle scaled 0.6 linethickness; + + lft x11 = x1 - linethickness / 2; + bot y11 = yoffs - 1.1 ht - linethickness / 2; + x12 = x11; + y12 = y1; + + draw_rounded_block (bot lft z11, top rt z12, + 0.6 linethickness); + stem_bt# = yoffs# - 1.1 ht#; + + labels (11, 12); + else: + stem_bt# = 0; + fi; + + set_char_box (0.00 wd#, 0.42 wd#, + max (0, -box_bt#, -stem_bt#) + linethickness# / 2, + max (0, box_top#) + linethickness# / 2); + fet_endchar; +enddef; + + +def inclinatum_char (expr verbose_name, internal_name, + small, stropha, auctum) = + fet_beginchar (verbose_name, "s" & internal_name); + save ht, alpha; + + alpha := 35; + + if small: + ht# = 0.50 noteheight#; + else: + ht# = 0.80 noteheight#; + fi; + + draw_diamond_head (ht#, 0, 0, alpha, false); + + save off_angle; + + off_angle := alpha + 15; + + save stropha_ellipse, auctum_hook, circle; + path stropha_ellipse, auctum_hook, circle; + + circle := reverse fullcircle scaled linethickness; + + stropha_ellipse := fullcircle xscaled 0.25 head_height + yscaled 0.55 head_height + rotated alpha; + + z11 = z12 + + linethickness / 2 * dir (180 - off_angle) + - directionpoint dir (90 - off_angle) + of stropha_ellipse; + z12 = directionpoint -dir (90 - off_angle) of diamond_shape + + linethickness / 2 * dir (180 - off_angle); + z13 = (0, -0.5 head_height + linethickness); + + auctum_hook := z12{-dir (90 - off_angle)} + .. {dir (90 + alpha)}z13; + + labels (12); + + if (stropha and not auctum): + clearit; + + save t_in, t_out; + + t_in := xpart ((stropha_ellipse shifted z11) + intersectiontimes + get_subpath (diamond_shape, + left, up, + (0, 0))); + t_out := xpart ((stropha_ellipse shifted z11) + intersectiontimes + get_subpath (diamond_shape, + up, right, + (0, 0))); + + % the addition or subtraction of `1' is necessary + % so that we get the right starting point + fill get_subpath_i (diamond_shape, + dir (angle (z2 - z1) - 1), + dir (angle (z1 - z4) + 1), + (0, 0)) + -- get_subpath (stropha_ellipse, + direction t_in of stropha_ellipse, + direction t_out of stropha_ellipse, + z11) + -- cycle; + + labels (11); + fi; + + if (auctum and not stropha): + clearit; + + fill get_subpath (diamond_shape, + left, + -dir (90 - off_angle), + (0, 0)) + .. get_subpath (circle, + dir (90 + alpha), + -dir (90 + alpha), + z13) + .. get_subpath (circle, + dir (90 - off_angle), + right, + z12) + -- cycle; + + labels (13); + fi; + + if (auctum and stropha): + clearit; + + save t; + + t := xpart ((stropha_ellipse shifted z11) + intersectiontimes + get_subpath (diamond_shape, up, right, + (0, 0))); + + % the addition or subtraction of `1' is necessary + % so that we get the right starting point + fill get_subpath_i (diamond_shape, + dir (angle (z2 - z1) - 1), + -dir (90 - off_angle), + (0, 0)) + .. get_subpath (circle, + dir (90 + alpha), + -dir (90 + alpha), + z13) + .. get_subpath (stropha_ellipse, + dir (90 - off_angle), + direction t of stropha_ellipse, + z11) + -- cycle; + + labels (11, 13); + fi; + fet_endchar; +enddef; + + +% punctum +vat_punctum_char ("Ed. Vat. punctum", "vaticana.punctum", + false, false, false, false, + false, false, false, 1.0); + + +% punctum cavum (for OpusTeX compatibility) +vat_punctum_char ("Ed. Vat. punctum cavum", "vaticana.punctum.cavum", + false, true, false, false, + false, false, false, 1.0); + + +% linea punctum (for OpusTeX compatibility) +vat_punctum_char ("Ed. Vat. linea punctum", "vaticana.linea.punctum", + true, false, false, false, + false, false, false, 1.0); + + +% linea punctum cavum (for OpusTeX compatibility) +vat_punctum_char ("Ed. Vat. linea punctum cavum", "vaticana.linea.punctum.cavum", + true, true, false, false, + false, false, false, 1.0); + + +% punctum inclinatum +inclinatum_char ("Ed. Vat. inclinatum", "vaticana.inclinatum", + false, false, false); + + +% pes lower punctum +vat_punctum_char ("Ed. Vat. pes lower punctum", "vaticana.lpes", + false, false, true, false, + true, false, false, 1.0); + + +% pes lower punctum +vat_punctum_char ("Ed. Vat. pes var lower punctum", "vaticana.vlpes", + false, false, true, false, + true, false, true, 1.0); + + +% pes upper punctum +vat_punctum_char ("Ed. Vat. pes upper punctum", "vaticana.upes", + false, false, true, false, + false, false, false, 1.0); + + +% pes upper punctum (shifted variation) +% +% This note head is used instead of the regular pes upper punctum to +% avoid collision with the lower punctum note of the pes when the upper +% punctum sits directly on top of the lower punctum. +% +vat_punctum_char ("Ed. Vat. var pes upper punctum", "vaticana.vupes", + false, false, true, false, + false, true, false, 1.0); + + +% small punctum as used in epiphonus +vat_punctum_char ("Ed. Vat. plica", "vaticana.plica", + false, false, false, false, + false, false, false, 0.6); + + +% small punctum as used in epiphonus +plica_char ("Ed. Vat. var plica", "vaticana.vplica", + false, 0.6); + + +% eccentric punctum as used in epiphonus +epiphonus_char ("Ed. Vat. epiphonus", "vaticana.epiphonus", + false, true, false, 1.0); + + +% eccentric punctum as used in epiphonus (shifted variation) +% +% This note head is used instead of the regular epiphonus punctum to +% avoid collision with the plica head when the plica sits directly on +% top of the lower head. +% +epiphonus_char ("Ed. Vat. var epiphonus", "vaticana.vepiphonus", + false, true, true, 1.0); + + +% small punctum as used in cephalicus +vat_punctum_char ("Ed. Vat. rev. plica", "vaticana.reverse.plica", + false, false, false, false, + true, false, false, 0.6); + + +% small punctum as used in cephalicus +plica_char ("Ed. Vat. rev. var plica", "vaticana.reverse.vplica", + true, 0.6); + + +% eccentric punctum as used in cephalicus; without left stem +epiphonus_char ("Ed. Vat. inner cephalicus", "vaticana.inner.cephalicus", + false, false, false, 1.0); + + +% eccentric punctum as used in cephalicus; with left stem +epiphonus_char ("Ed. Vat. cephalicus", "vaticana.cephalicus", + true, false, false, 1.0); + + +% quilisma +fet_beginchar ("Ed. Vat. quilisma", "svaticana.quilisma"); + save a_b, b_h, a_w; + + a_b := 1.54; % b_h * a_b / a_w = wd / ht + b_h := 0.85; + a_w := 1.09; + + save a, beta, ht, wd; + + ht# = noteheight#; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; + + set_char_box (0, 0.42 wd#, 0.28 ht#, 0.36 ht#); + + black_notehead_width# := wd#; + + define_pixels (ht, wd); + + save ellipse, T; + path ellipse; + transform T; + + T := identity xscaled linethickness + yscaled 0.44 ht; + pickup pencircle transformed T; + ellipse := reverse fullcircle transformed T; + + z1 = (rt 0.00 wd, top -0.28 ht); + z2 = (0.11 wd, -0.14 ht); + z3 = (0.12 wd, +0.03 ht); + z4 = (0.25 wd, -0.09 ht); + z5 = (0.25 wd, +0.08 ht); + z6 = (lft 0.42 wd, -0.04 ht); + z7 = (lft 0.40 wd, bot +0.36 ht); + + fill get_subpath (ellipse, z1 - z2, z2 - z1, z1) + -- get_subpath (ellipse, z2 - z1, z1 - z2, z2) + -- cycle; + fill get_subpath (ellipse, z3 - z4, z4 - z3, z3) + -- get_subpath (ellipse, z4 - z3, z3 - z4, z4) + -- cycle; + fill get_subpath (ellipse, z5 - z6, z6 - z5, z5) + -- point 0 of get_subpath (ellipse, z6 - z5, z5 - z6, z6) + -- get_subpath (ellipse, z7 - z6, z6 - z7, z7) + -- get_subpath (ellipse, z6 - z7, z5 - z6, z6) + -- cycle; + + labels (1, 2, 3, 4, 5, 6, 7); +fet_endchar; + + +% solesmes punctum inclinatum parvum +inclinatum_char ("Solesmes punctum inclinatum parvum", "solesmes.incl.parvum", + true, false, false); + + +% solesmes punctum auctum ascendens +vat_punctum_char ("Solesmes punctum auctum ascendens", "solesmes.auct.asc", + false, false, false, true, + true, false, false, 1.0); + + +% solesmes punctum auctum descendens +vat_punctum_char ("Solesmes punctum auctum descendens", "solesmes.auct.desc", + false, false, false, true, + false, false, false, 1.0); + + +% solesmes punctum inclinatum auctum +inclinatum_char ("Solesmes punctum incl. auctum", "solesmes.incl.auctum", + false, false, true); + + +% solesmes stropha +inclinatum_char ("Solesmes stropha", "solesmes.stropha", + false, true, false); + + +% solesmes stropha aucta +inclinatum_char ("Solesmes stropha aucta", "solesmes.stropha.aucta", + false, true, true); + + +% solesmes oriscus +fet_beginchar ("Solesmes oriscus", "ssolesmes.oriscus"); + save a_b, b_h, a_w; + + a_b := 1.54; % b_h * a_b / a_w = wd / ht + b_h := 0.85; + a_w := 1.09; + + save a, beta, ht, wd; + + ht# = noteheight#; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; + black_notehead_width# := wd#; + + save convexity; + + convexity# = +0.05 ht#; + + define_pixels (ht, wd, convexity); + + set_char_box (0.00 wd#, 0.50 wd#, + 0.25 ht# + convexity#, 0.25 ht# + convexity#); + + z1 = (0.00 wd + blot_diameter / 2, -convexity); + z2 = (1/6 wd, +convexity); + z3 = (2/6 wd, -convexity); + z4 = (0.50 wd - blot_diameter / 2, +convexity); + + + save height; + + height = 2 ypart (directionpoint right of (z1 + .. z2 + .. z3 + .. z4)); + + save ellipse, T; + path ellipse; + transform T; + + T := identity xscaled blot_diameter + yscaled (h + d - height); + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + % Adjust vertical coordinates to touch bounding box. + y1 := top -d; + y4 := bot h; + + save d_; + pair d_; + + d_ := direction 0 of (z1 + .. z2 + .. z3 + .. z4); + + fill get_subpath (ellipse, -d_, d_, z1) + .. bot z2 + .. bot z3 + .. get_subpath (ellipse, d_, -d_, z4) + .. top z3 + .. top z2 + .. cycle; + + labels (1, 2, 3, 4); +fet_endchar; + + +%%%%%%%% +% +% +% +% EDITIO MEDICAEA +% +% +% + +% inclinatum +fet_beginchar ("Ed. Med. inclinatum", "smedicaea.inclinatum"); + draw_diamond_head (1.2 staff_space#, 0, 0, 35, false); +fet_endchar; + + +def med_punctum_char (expr verbose_name, internal_name, + left_up_stem, left_down_stem) = + fet_beginchar (verbose_name, "s" & internal_name); + save a, ht, wd; + + ht# = 2 staff_space#; + wd# = ht#; + black_notehead_width# := wd#; + + define_pixels (ht, wd); + + save ellipse; + path ellipse; + + ellipse := fullcircle xscaled blot_diameter + yscaled 0.50 ht; + + z1 = (0.00 wd + blot_diameter / 2, 0); + z2 = (0.4 wd - blot_diameter / 2, 0); + + labels (1, 2); + + pickup pencircle scaled linethickness; + + if left_down_stem: + z4 = (0.00 wd + linethickness / 2, -1.25 ht); + + fill get_subpath (ellipse, left, down, z1) + -- top lft z4{down} + .. z4{right} + .. top rt z4{up} + -- (rt x4, -.5 ht / 2) + -- get_subpath (ellipse, right, left, z2) + -- cycle; + + labels (4); + + set_char_box (0.0, 0.4 wd#, 1.25 ht#, 0.25 ht#); + elseif left_up_stem: + z4 = (0.00 wd + linethickness / 2, +1.25 ht); + + fill get_subpath (ellipse, down, right, z1) + -- get_subpath (ellipse, right, left, z2) + -- (rt x4, .5 ht / 2) + -- bot rt z4{up} + .. z4{left} + .. bot lft z4{down} + -- cycle; + + labels (4); + + set_char_box (0.0, 0.4 wd#, 0.25 ht#, 1.25 ht#); + else: + fill get_subpath (ellipse, left, right, z1) + -- get_subpath (ellipse, right, left, z2) + -- cycle; + + set_char_box (0.0, 0.4 wd#, 0.25 ht#, 0.25 ht#); + fi; + + fet_endchar; +enddef; + + +% punctum +med_punctum_char ("Ed. Med. punctum", "medicaea.punctum", + false, false); + + +% left up-stemmed punctum +med_punctum_char ("Ed. Med. reverse virga", "medicaea.rvirga", + true, false); + + +% virga (i.e. left down-stemmed punctum) +med_punctum_char ("Ed. Med. virga", "medicaea.virga", + false, true); + + +%%%%%%%% +% +% +% +% HUFNAGEL +% +% +% + +def huf_punctum_char (expr verbose_name, internal_name, + down_stem) = + fet_beginchar (verbose_name, "s" & internal_name); + save alpha; + + alpha = 55; + + draw_diamond_head (staff_space#, 0, 0, alpha, false); + + if down_stem: + set_char_box (0, head_width#, + 1.5 staff_space#, head_height# / 2); + + save ellipse; + path ellipse; + + ellipse := reverse fullcircle xscaled blot_diameter + yscaled 0.7 staff_space + rotated -alpha; + + z11 = (head_width / 2, 0); + z12 = find_tangent_shift (((0, -d) -- (w, -d)), ellipse, + (w / 2, -d), (w / 2, 0)); + + fill get_subpath (ellipse, up, down, z11) + -- get_subpath (ellipse, down, up, z12) + -- cycle; + + labels (11, 12); + fi; + fet_endchar; +enddef; + + +% punctum +huf_punctum_char ("Hufnagel punctum", "hufnagel.punctum", false) + + +% virga +huf_punctum_char ("Hufnagel virga", "hufnagel.virga", true) + + +% pes lower punctum +fet_beginchar ("Hufnagel pes lower punctum", "shufnagel.lpes") + save width, height, alpha; + + width# = 2 * staff_space#; + height# = 0.7 * staff_space#; + alpha = 35; + + set_char_box (0, width#, height# / 2, height# / 2); + + define_pixels (width, height); + + save circle; + path circle; + + circle := reverse fullcircle scaled linethickness; + + pickup pencircle scaled linethickness; + + rt x3 = -lft x1 = width / 2; + y2 = y3 = height / 2; + y1 = y4 = -height / 2; + + tand (alpha) * (y2 - y1) = x2 - x1 = x3 - x4; + + fill get_subpath (circle, left, z2 - z1, z1) + -- get_subpath (circle, z2 - z1, right, z2) + -- get_subpath (circle, right, z4 - z3, z3) + -- get_subpath (circle, z4 - z3, left, z4) + -- cycle; + + currentpicture := currentpicture shifted (width/2, 0); + +% labels (1, 2, 3, 4); +fet_endchar; + + +fet_endgroup ("noteheads"); diff --git a/mf/parmesan-rests.mf b/mf/parmesan-rests.mf index 060307db71..e6684a4eec 100644 --- a/mf/parmesan-rests.mf +++ b/mf/parmesan-rests.mf @@ -1,13 +1,24 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-rests.mf -- implement ancient rests -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2001--2009 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- ancient rests +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2001--2011 Juergen Reuter % % Neo-mensural rests originally by % Christian Mondrup and Mats Bengtsson. % +% +% 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 . fet_begingroup ("rests") diff --git a/mf/parmesan-scripts.mf b/mf/parmesan-scripts.mf index 3a43a46aec..cbbb3b2300 100644 --- a/mf/parmesan-scripts.mf +++ b/mf/parmesan-scripts.mf @@ -1,10 +1,21 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-scripts.mf -- implement ancient script symbols -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2002--2009 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- ancient script symbols +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2002--2011 Juergen Reuter % +% +% 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 . fet_begingroup ("scripts"); diff --git a/mf/parmesan-timesig.mf b/mf/parmesan-timesig.mf deleted file mode 100644 index 8d0ab9d45c..0000000000 --- a/mf/parmesan-timesig.mf +++ /dev/null @@ -1,395 +0,0 @@ -% -%-Fundamental-%- -*-Metafont-*- -% parmesan-timesig.mf -- implement ancient time signatures -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 1998--2009 Mats Bengtsson , -% Christian Mondrup -% (c) 2002--2009 Juergen Reuter -% - -fet_begingroup ("timesig"); - - -path threequartercircle; - -threequartercircle := halfcircle & quartercircle rotated 180; - -save mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin; - -mensural_Cdiameter# := 3/2 staff_space#; -mensural_Cthickness# := 2 linethickness#; -mensural_Chairpin# := 0.5 linethickness#; - -define_pixels (mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin); - - -%%%%%%%% -% -% -% -% MENSURAL NOTATION -% -% -% - -def draw_nail (expr bottom_left, top_right) = - save round; - - round = floor min (blot_diameter, - xpart (top_right-bottom_left), - ypart (top_right-bottom_left)); - - pickup pencircle scaled round; - - z2 + (round / 2, round / 2) = top_right + - (mensural_Cthickness / 2, 0); - z4 - (round / 2,round / 2) = bottom_left; - y3 = y2; - y4 = y1; - x2 = x1 + mensural_Cthickness / 2; - x2 - x1 = x4 - x3; - x5 = x1; - x6 = x4; - y5 = y6 = y2 - 2 mensural_Cthickness; - - fill bot z1{right} - .. rt z1{up} - -- rt z5{up} - .. rt z2 - .. top z2{left} - -- top z3{left} - .. lft z3 - .. lft z6{down} - -- lft z4{down} - .. bot z4{right} - -- cycle; - -% labels (1, 2, 3, 4, 5, 6); -enddef; - - -def mensural_timesig (expr verbose_name, internal_name, - full_circle, reverse_circle, slashed, dotted) = - fet_beginchar (verbose_name, internal_name); - if slashed: - set_char_box ( - 0, - mensural_Cdiameter# + mensural_Cthickness#, - .75 (mensural_Cdiameter# + mensural_Cthickness#), - .75 (mensural_Cdiameter# + mensural_Cthickness#)); - - if (full_circle or dotted): - draw_nail ((-mensural_Cthickness / 2, -d), - (mensural_Cthickness / 2, h)); - elseif reverse_circle: - draw_nail ((0, -d), (mensural_Cthickness, h)); - else: - draw_nail ((-mensural_Cthickness, -d), (0, h)); - fi; - else: - set_char_box ( - 0, - mensural_Cdiameter# + mensural_Cthickness#, - .5 (mensural_Cdiameter# + mensural_Cthickness#), - .5 (mensural_Cdiameter# + mensural_Cthickness#)); - fi; - - save ellipse, pat; - path ellipse, pat; - - ellipse := fullcircle xscaled mensural_Cthickness - yscaled mensural_Chairpin; - - save rot; - - if reverse_circle: - rot := 225; - else: - rot := 45; - fi; - - if full_circle: - pat := fullcircle scaled mensural_Cdiameter; - - fill get_subpoint (ellipse, - direction 0 of pat, - point 0 of pat) - for i = 1 step 1 until length pat: - .. get_subpoint (ellipse, - direction i of pat, - point i of pat) - endfor - .. cycle; - unfill get_subpoint (ellipse, - -direction 0 of pat, - point 0 of pat) - for i = 1 step 1 until length pat: - .. get_subpoint (ellipse, - -direction i of pat, - point i of pat) - endfor - .. cycle; - else: - pat := threequartercircle rotated rot - scaled mensural_Cdiameter; - - fill get_subpath (ellipse, - -direction 0 of pat, - direction 0 of pat, - point 0 of pat) - for i = 1 step 1 until (length pat - 1): - .. get_subpoint (ellipse, - direction i of pat, - point i of pat) - endfor - .. get_subpath (ellipse, - direction infinity of pat, - -direction infinity of pat, - point infinity of pat) - for i = (length pat - 1) step -1 until 1: - .. get_subpoint (ellipse, - -direction i of pat, - point i of pat) - endfor - .. cycle; - fi; - - if dotted: - pickup pencircle scaled 4 linethickness; - drawdot (0, 0); - fi; - - currentpicture := currentpicture - shifted 0.5 (mensural_Cdiameter - + mensural_Cthickness, 0); - fet_endchar; -enddef; - - -%% tempus imperfectum cum prolatione imperfecta -mensural_timesig ("Mensural 4/4 meter", "mensural44", - false, false, false, false); - - -%% tempus imperfectum cum prolatione imperfecta proportio dupla -mensural_timesig ("Mensural 2/2 meter", "mensural22", - false, false, true, false); - - -%% tempus perfectum cum prolatione imperfecta -mensural_timesig ("Mensural 3/2 meter", "mensural32", - true, false, false, false); - - -%% tempus imperfectum cum prolatione perfecta -mensural_timesig ("Mensural 6/4 meter", "mensural64", - false, false, false, true); - - -%% tempus perfectum cum prolatione perfecta -mensural_timesig ("Mensural 9/4 meter", "mensural94", - true, false, false, true); - - -%% tempus perfectum cum prolatione imperfecta proportio dupla -mensural_timesig ("Mensural 3/4 meter", "mensural34", - true, false, true, false); - - -%% tempus imperfectum cum prolatione perfecta proportio dupla -mensural_timesig ("Mensural 6/8 meter", "mensural68", - false, false, true, true); - - -%% tempus perfectum cum prolatione perfecta proportio dupla -mensural_timesig ("Mensural 9/8 meter", "mensural98", - true, false, true, true); - - -%% tempus imperfectum cum prolatione imperfecta diminutio simplex -mensural_timesig ("Mensural 4/8 meter", "mensural48", - false, true, false, false); - - -%% tempus imperfectum cum prolatione perfecta diminutio simplex -mensural_timesig ("Mensural 6/8 meter", "mensural68alt", - false, true, false, true); - - -%% tempus imperfectum cum prolatione imperfecta diminutio duplex -mensural_timesig ("Mensural 2/4 meter", "mensural24", - false, true, true, false); - - -%%%%%%%% -% -% -% -% NEO-MENSURAL NOTATION -% -% -% - -save neomensural_Cdiameter, neomensural_Cthickness; - -neomensural_Cdiameter# := 3/2 staff_space#; -neomensural_Cthickness# := 2 linethickness#; - -define_pixels (neomensural_Cdiameter, neomensural_Cthickness); - - -def neomensural_timesig (expr verbose_name, internal_name, - full_circle, reverse_circle, slashed, dotted) = - fet_beginchar (verbose_name, internal_name); - set_char_box ( - 0, - neomensural_Cdiameter# + neomensural_Cthickness#, - .5 (neomensural_Cdiameter# + neomensural_Cthickness#), - .5 (neomensural_Cdiameter# + neomensural_Cthickness#)); - - if slashed: - pickup penrazor scaled neomensural_Cthickness; - - save t; - t := neomensural_Cthickness / 2; - - if (full_circle or dotted): - draw (0, -d + t) - -- (0, h - t); - elseif reverse_circle: - draw (t, -d + t) - -- (t, h - t); - else: - draw (-t, -d + t) - -- (-t, h - t); - fi; - fi; - - save ellipse, pat; - path ellipse, pat; - - ellipse := fullcircle scaled neomensural_Cthickness; - - save rot; - - if reverse_circle: - rot := 225; - else: - rot := 45; - fi; - - if full_circle: - pat := fullcircle scaled neomensural_Cdiameter; - - fill get_subpoint (ellipse, - direction 0 of pat, - point 0 of pat) - for i = 1 step 1 until length pat: - .. get_subpoint (ellipse, - direction i of pat, - point i of pat) - endfor - .. cycle; - unfill get_subpoint (ellipse, - -direction 0 of pat, - point 0 of pat) - for i = 1 step 1 until length pat: - .. get_subpoint (ellipse, - -direction i of pat, - point i of pat) - endfor - .. cycle; - else: - pat := threequartercircle rotated rot - scaled neomensural_Cdiameter; - - fill get_subpath (ellipse, - -direction 0 of pat, - direction 0 of pat, - point 0 of pat) - for i = 1 step 1 until (length pat - 1): - .. get_subpoint (ellipse, - direction i of pat, - point i of pat) - endfor - .. get_subpath (ellipse, - direction infinity of pat, - -direction infinity of pat, - point infinity of pat) - for i = (length pat - 1) step -1 until 1: - .. get_subpoint (ellipse, - -direction i of pat, - point i of pat) - endfor - .. cycle; - fi; - - if dotted: - pickup pencircle scaled 4 linethickness; - drawdot (0, 0); - fi; - - currentpicture := currentpicture - shifted 0.5 (neomensural_Cdiameter - + neomensural_Cthickness, 0); - fet_endchar; -enddef; - - -%% tempus imperfectum cum prolatione imperfecta -neomensural_timesig ("Mensural 4/4 meter", "neomensural44", - false, false, false, false); - - -%% tempus imperfectum cum prolatione imperfecta proportio dupla -neomensural_timesig ("Mensural 2/2 meter", "neomensural22", - false, false, true, false); - - -%% tempus perfectum cum prolatione imperfecta -neomensural_timesig ("Mensural 3/2 meter", "neomensural32", - true, false, false, false); - - -%% tempus imperfectum cum prolatione perfecta -neomensural_timesig ("Mensural 6/4 meter", "neomensural64", - false, false, false, true); - - -%% tempus perfectum cum prolatione perfecta -neomensural_timesig ("Mensural 9/4 meter", "neomensural94", - true, false, false, true); - - -%% tempus perfectum cum prolatione imperfecta proportio dupla -neomensural_timesig ("Mensural 3/4 meter", "neomensural34", - true, false, true, false); - - -%% tempus imperfectum cum prolatione perfecta proportio dupla -neomensural_timesig ("Mensural 6/8 meter", "neomensural68", - false, false, true, true); - - -%% tempus perfectum cum prolatione perfecta proportio dupla -neomensural_timesig ("Mensural 9/8 meter", "neomensural98", - true, false, true, true); - - -%% tempus imperfectum cum prolatione imperfecta diminutio simplex -neomensural_timesig ("Mensural 4/8 meter", "neomensural48", - false, true, false, false); - - -%% tempus imperfectum cum prolatione perfecta diminutio simplex -neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt", - false, true, false, true); - - -%% tempus imperfectum cum prolatione imperfecta diminutio duplex -neomensural_timesig ("Mensural 2/4 meter", "neomensural24", - false, true, true, false); - - -fet_endgroup ("timesig"); diff --git a/mf/parmesan-timesignatures.mf b/mf/parmesan-timesignatures.mf new file mode 100644 index 0000000000..4bca604c79 --- /dev/null +++ b/mf/parmesan-timesignatures.mf @@ -0,0 +1,406 @@ +% Feta (not the Font-En-Tja) music font -- ancient time signatures +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1998--2011 Mats Bengtsson , +% Christian Mondrup +% Copyright (C) 2002--2011 Juergen Reuter +% +% +% 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 . + +fet_begingroup ("timesig"); + + +path threequartercircle; + +threequartercircle := halfcircle & quartercircle rotated 180; + +save mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin; + +mensural_Cdiameter# := 3/2 staff_space#; +mensural_Cthickness# := 2 linethickness#; +mensural_Chairpin# := 0.5 linethickness#; + +define_pixels (mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin); + + +%%%%%%%% +% +% +% +% MENSURAL NOTATION +% +% +% + +def draw_nail (expr bottom_left, top_right) = + save round; + + round = floor min (blot_diameter, + xpart (top_right-bottom_left), + ypart (top_right-bottom_left)); + + pickup pencircle scaled round; + + z2 + (round / 2, round / 2) = top_right + + (mensural_Cthickness / 2, 0); + z4 - (round / 2,round / 2) = bottom_left; + y3 = y2; + y4 = y1; + x2 = x1 + mensural_Cthickness / 2; + x2 - x1 = x4 - x3; + x5 = x1; + x6 = x4; + y5 = y6 = y2 - 2 mensural_Cthickness; + + fill bot z1{right} + .. rt z1{up} + -- rt z5{up} + .. rt z2 + .. top z2{left} + -- top z3{left} + .. lft z3 + .. lft z6{down} + -- lft z4{down} + .. bot z4{right} + -- cycle; + +% labels (1, 2, 3, 4, 5, 6); +enddef; + + +def mensural_timesig (expr verbose_name, internal_name, + full_circle, reverse_circle, slashed, dotted) = + fet_beginchar (verbose_name, internal_name); + if slashed: + set_char_box ( + 0, + mensural_Cdiameter# + mensural_Cthickness#, + .75 (mensural_Cdiameter# + mensural_Cthickness#), + .75 (mensural_Cdiameter# + mensural_Cthickness#)); + + if (full_circle or dotted): + draw_nail ((-mensural_Cthickness / 2, -d), + (mensural_Cthickness / 2, h)); + elseif reverse_circle: + draw_nail ((0, -d), (mensural_Cthickness, h)); + else: + draw_nail ((-mensural_Cthickness, -d), (0, h)); + fi; + else: + set_char_box ( + 0, + mensural_Cdiameter# + mensural_Cthickness#, + .5 (mensural_Cdiameter# + mensural_Cthickness#), + .5 (mensural_Cdiameter# + mensural_Cthickness#)); + fi; + + save ellipse, pat; + path ellipse, pat; + + ellipse := fullcircle xscaled mensural_Cthickness + yscaled mensural_Chairpin; + + save rot; + + if reverse_circle: + rot := 225; + else: + rot := 45; + fi; + + if full_circle: + pat := fullcircle scaled mensural_Cdiameter; + + fill get_subpoint (ellipse, + direction 0 of pat, + point 0 of pat) + for i = 1 step 1 until length pat: + .. get_subpoint (ellipse, + direction i of pat, + point i of pat) + endfor + .. cycle; + unfill get_subpoint (ellipse, + -direction 0 of pat, + point 0 of pat) + for i = 1 step 1 until length pat: + .. get_subpoint (ellipse, + -direction i of pat, + point i of pat) + endfor + .. cycle; + else: + pat := threequartercircle rotated rot + scaled mensural_Cdiameter; + + fill get_subpath (ellipse, + -direction 0 of pat, + direction 0 of pat, + point 0 of pat) + for i = 1 step 1 until (length pat - 1): + .. get_subpoint (ellipse, + direction i of pat, + point i of pat) + endfor + .. get_subpath (ellipse, + direction infinity of pat, + -direction infinity of pat, + point infinity of pat) + for i = (length pat - 1) step -1 until 1: + .. get_subpoint (ellipse, + -direction i of pat, + point i of pat) + endfor + .. cycle; + fi; + + if dotted: + pickup pencircle scaled 4 linethickness; + drawdot (0, 0); + fi; + + currentpicture := currentpicture + shifted 0.5 (mensural_Cdiameter + + mensural_Cthickness, 0); + fet_endchar; +enddef; + + +%% tempus imperfectum cum prolatione imperfecta +mensural_timesig ("Mensural 4/4 meter", "mensural44", + false, false, false, false); + + +%% tempus imperfectum cum prolatione imperfecta proportio dupla +mensural_timesig ("Mensural 2/2 meter", "mensural22", + false, false, true, false); + + +%% tempus perfectum cum prolatione imperfecta +mensural_timesig ("Mensural 3/2 meter", "mensural32", + true, false, false, false); + + +%% tempus imperfectum cum prolatione perfecta +mensural_timesig ("Mensural 6/4 meter", "mensural64", + false, false, false, true); + + +%% tempus perfectum cum prolatione perfecta +mensural_timesig ("Mensural 9/4 meter", "mensural94", + true, false, false, true); + + +%% tempus perfectum cum prolatione imperfecta proportio dupla +mensural_timesig ("Mensural 3/4 meter", "mensural34", + true, false, true, false); + + +%% tempus imperfectum cum prolatione perfecta proportio dupla +mensural_timesig ("Mensural 6/8 meter", "mensural68", + false, false, true, true); + + +%% tempus perfectum cum prolatione perfecta proportio dupla +mensural_timesig ("Mensural 9/8 meter", "mensural98", + true, false, true, true); + + +%% tempus imperfectum cum prolatione imperfecta diminutio simplex +mensural_timesig ("Mensural 4/8 meter", "mensural48", + false, true, false, false); + + +%% tempus imperfectum cum prolatione perfecta diminutio simplex +mensural_timesig ("Mensural 6/8 meter", "mensural68alt", + false, true, false, true); + + +%% tempus imperfectum cum prolatione imperfecta diminutio duplex +mensural_timesig ("Mensural 2/4 meter", "mensural24", + false, true, true, false); + + +%%%%%%%% +% +% +% +% NEO-MENSURAL NOTATION +% +% +% + +save neomensural_Cdiameter, neomensural_Cthickness; + +neomensural_Cdiameter# := 3/2 staff_space#; +neomensural_Cthickness# := 2 linethickness#; + +define_pixels (neomensural_Cdiameter, neomensural_Cthickness); + + +def neomensural_timesig (expr verbose_name, internal_name, + full_circle, reverse_circle, slashed, dotted) = + fet_beginchar (verbose_name, internal_name); + set_char_box ( + 0, + neomensural_Cdiameter# + neomensural_Cthickness#, + .5 (neomensural_Cdiameter# + neomensural_Cthickness#), + .5 (neomensural_Cdiameter# + neomensural_Cthickness#)); + + if slashed: + pickup penrazor scaled neomensural_Cthickness; + + save t; + t := neomensural_Cthickness / 2; + + if (full_circle or dotted): + draw (0, -d + t) + -- (0, h - t); + elseif reverse_circle: + draw (t, -d + t) + -- (t, h - t); + else: + draw (-t, -d + t) + -- (-t, h - t); + fi; + fi; + + save ellipse, pat; + path ellipse, pat; + + ellipse := fullcircle scaled neomensural_Cthickness; + + save rot; + + if reverse_circle: + rot := 225; + else: + rot := 45; + fi; + + if full_circle: + pat := fullcircle scaled neomensural_Cdiameter; + + fill get_subpoint (ellipse, + direction 0 of pat, + point 0 of pat) + for i = 1 step 1 until length pat: + .. get_subpoint (ellipse, + direction i of pat, + point i of pat) + endfor + .. cycle; + unfill get_subpoint (ellipse, + -direction 0 of pat, + point 0 of pat) + for i = 1 step 1 until length pat: + .. get_subpoint (ellipse, + -direction i of pat, + point i of pat) + endfor + .. cycle; + else: + pat := threequartercircle rotated rot + scaled neomensural_Cdiameter; + + fill get_subpath (ellipse, + -direction 0 of pat, + direction 0 of pat, + point 0 of pat) + for i = 1 step 1 until (length pat - 1): + .. get_subpoint (ellipse, + direction i of pat, + point i of pat) + endfor + .. get_subpath (ellipse, + direction infinity of pat, + -direction infinity of pat, + point infinity of pat) + for i = (length pat - 1) step -1 until 1: + .. get_subpoint (ellipse, + -direction i of pat, + point i of pat) + endfor + .. cycle; + fi; + + if dotted: + pickup pencircle scaled 4 linethickness; + drawdot (0, 0); + fi; + + currentpicture := currentpicture + shifted 0.5 (neomensural_Cdiameter + + neomensural_Cthickness, 0); + fet_endchar; +enddef; + + +%% tempus imperfectum cum prolatione imperfecta +neomensural_timesig ("Mensural 4/4 meter", "neomensural44", + false, false, false, false); + + +%% tempus imperfectum cum prolatione imperfecta proportio dupla +neomensural_timesig ("Mensural 2/2 meter", "neomensural22", + false, false, true, false); + + +%% tempus perfectum cum prolatione imperfecta +neomensural_timesig ("Mensural 3/2 meter", "neomensural32", + true, false, false, false); + + +%% tempus imperfectum cum prolatione perfecta +neomensural_timesig ("Mensural 6/4 meter", "neomensural64", + false, false, false, true); + + +%% tempus perfectum cum prolatione perfecta +neomensural_timesig ("Mensural 9/4 meter", "neomensural94", + true, false, false, true); + + +%% tempus perfectum cum prolatione imperfecta proportio dupla +neomensural_timesig ("Mensural 3/4 meter", "neomensural34", + true, false, true, false); + + +%% tempus imperfectum cum prolatione perfecta proportio dupla +neomensural_timesig ("Mensural 6/8 meter", "neomensural68", + false, false, true, true); + + +%% tempus perfectum cum prolatione perfecta proportio dupla +neomensural_timesig ("Mensural 9/8 meter", "neomensural98", + true, false, true, true); + + +%% tempus imperfectum cum prolatione imperfecta diminutio simplex +neomensural_timesig ("Mensural 4/8 meter", "neomensural48", + false, true, false, false); + + +%% tempus imperfectum cum prolatione perfecta diminutio simplex +neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt", + false, true, false, true); + + +%% tempus imperfectum cum prolatione imperfecta diminutio duplex +neomensural_timesig ("Mensural 2/4 meter", "neomensural24", + false, true, true, false); + + +fet_endgroup ("timesig"); diff --git a/out/ChangeLog b/out/ChangeLog index 397b8f27d1..f62f9b1af9 100644 --- a/out/ChangeLog +++ b/out/ChangeLog @@ -1 +1 @@ -See http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=log;h=refs/tags/release/2.12.3-1 +See http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=log;h=refs/tags/release/2.14.2-1 diff --git a/out/RELEASE-COMMIT b/out/RELEASE-COMMIT index 3f4778ad7d..e7e02d7201 100644 --- a/out/RELEASE-COMMIT +++ b/out/RELEASE-COMMIT @@ -1,100 +1,28 @@ -commit 3785463ca131ac1ce05421db446a408edd38d2f6 -Author: John Mandereau -Date: Tue Jan 12 01:38:59 2010 +0100 +commit 516e1c3592bd7cb0c7c7fb19fe48ec4385835c77 +Author: Neil Puttock +Date: Sat Jul 23 20:44:45 2011 +0100 - Docs-ja: adds missing translation bits - - Copied ja.po and translation in lilypond-texi2html.init from current - master branch and *.html.in files from release/2.13.1-1. + Docs: Compile fix. -diff --git a/Documentation/ja/index.html.in b/Documentation/ja/index.html.in -index 9836f53..5ec032d 100644 ---- a/Documentation/ja/index.html.in -+++ b/Documentation/ja/index.html.in -@@ -1,6 +1,6 @@ - - -+
    (ここから始めてください)
    + + \IMAGE-FILE\ + +

    + (click to enlarge) +

    +

    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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/pdf/size11.pdf b/Documentation/pictures/pdf/size11.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f1146a97b6a9baf232a6f56bb8d2b563b73ce4bb GIT binary patch literal 10404 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 HH3j`2M4$Gx literal 0 HcmV?d00001 diff --git a/Documentation/pictures/pdf/size26.pdf b/Documentation/pictures/pdf/size26.pdf new file mode 100644 index 0000000000000000000000000000000000000000..861b4ca999719d4464371ff2859171c2fc13d34b GIT binary patch literal 10144 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

  • - -
  • Music Glossary --(in one big page ~ 500 kB, --in PDF) -- --
    (for non-English users)
  • -+href="user/music-glossary/index.html">音楽用語集 -+(大きな 1 ページ 形式 ~ 500 kB), -+PDF 形式) -+
    (非英語圏のユーザ向け) - - - -
      -
    • - News --
      (changes since the previous major release)
    • -+
      (前回のメジャー リリースからの変更点) - -
    • Examples --
      (see some examples)
    • -+
      (参照用の例) - -
    - -@@ -63,18 +63,19 @@ in PDF) - - - -@@ -82,14 +83,16 @@ href="user/lilypond-internals/index.html">Internals Reference -
      +@@ -1399,7 +1399,7 @@ bassoonNotes = \relative c { + } + \new StaffGroup << + \new Staff { +- \flute ++ \fluteNotes + } + \new Staff { + \removeWithTag #'part { \killCues { \bassoonNotes } } diff --git a/po/de.po b/po/de.po index efcc72da8e..626dc9963f 100644 --- a/po/de.po +++ b/po/de.po @@ -3,20 +3,75 @@ # This file is distributed under the same license as the lilypond package. # Erwin Dieterich , 1999 # Roland Stigge , 2003, 2004, 2005, 2006, 2007 -# Till Rettig , 2007, 2008 +# Till Paala , 2007, 2008, 2009, 2010, 2011. # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.12.0\n" +"Project-Id-Version: lilypond 2.13.53\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2008-12-20 11:58+0100\n" -"PO-Revision-Date: 2009-01-06 20:11+0200\n" -"Last-Translator: Till Rettig \n" +"POT-Creation-Date: 2011-03-02 10:34+0100\n" +"PO-Revision-Date: 2011-03-03 22:19+0200\n" +"Last-Translator: Till Paala \n" "Language-Team: German \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: fontextract.py:25 +#, python-format +msgid "Scanning %s" +msgstr "Warnung: %s" + +#: fontextract.py:70 +#, python-format +msgid "Extracted %s" +msgstr "%s ausgepackt" + +#: fontextract.py:85 +#, python-format +msgid "Writing fonts to %s" +msgstr "Schreiben der Schriftarten nach %s" + +#: book_snippets.py:519 +#, python-format +msgid "deprecated ly-option used: %s=%s" +msgstr "veraltete ly-option verwendet: %s=%s" + +#: book_snippets.py:521 +#, python-format +msgid "compatibility mode translation: %s=%s" +msgstr "Übersetzung im Kompatibilitätsmodus: %s=%s" + +#: book_snippets.py:524 +#, python-format +msgid "deprecated ly-option used: %s" +msgstr "veraltete ly-option verwendet: %s" + +#: book_snippets.py:526 +#, python-format +msgid "compatibility mode translation: %s" +msgstr "Übersetzung im Kompatibilitätsmodus: %s" + +#: book_snippets.py:544 +#, python-format +msgid "ignoring unknown ly option: %s" +msgstr "unbekannte Option ignoriert: %s" + +#: book_snippets.py:736 +#, python-format +msgid "Opening filter `%s'\n" +msgstr "Filter »%s« wird geöffnet\n" + +#: book_snippets.py:756 +#, python-format +msgid "`%s' failed (%d)" +msgstr "»%s« gescheitert (%d)" + +#: book_snippets.py:757 +msgid "The error log is as follows:" +msgstr "Das Fehlerprotokoll lautet wie folgt:" + #: convertrules.py:12 #, python-format msgid "Not smart enough to convert %s" @@ -31,8 +86,8 @@ msgstr "Für Details Benutzerhandbuch lesen und manuell aktualisieren." msgid "%s has been replaced by %s" msgstr "%s wurde durch %s ersetzt" -#: convertrules.py:24 musicexp.py:16 convert-ly.py:50 lilypond-book.py:94 -#: warn.cc:48 input.cc:90 +#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66 +#: input.cc:109 #, c-format, python-format msgid "warning: %s" msgstr "Warnung: %s" @@ -50,8 +105,8 @@ msgstr "veraltet %s" msgid "deprecated \\textstyle, new \\key syntax" msgstr "verworfener \\textstyle, neue \\key Syntax" -#: convertrules.py:86 convertrules.py:1906 convertrules.py:2085 -#: convertrules.py:2237 convertrules.py:2567 +#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084 +#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862 msgid "bump version for release" msgstr "aktuelle Version ausgeben" @@ -68,7 +123,7 @@ msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" msgstr "\\repeat NUM Alternative Noten -> \\repeat FOLDSTR Alternative Noten" #: convertrules.py:216 convertrules.py:699 convertrules.py:1383 -#: convertrules.py:2379 +#: convertrules.py:2378 #, python-format msgid "deprecate %s" msgstr "lehne %s ab" @@ -121,8 +176,8 @@ msgstr "%s Eigenschaftsbezeichnungen" msgid "automaticMelismata turned on by default" msgstr "automaticMelismata ist standardmäßig aktiviert" -#: convertrules.py:963 convertrules.py:1682 convertrules.py:1943 -#: convertrules.py:2190 +#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942 +#: convertrules.py:2189 #, python-format msgid "remove %s" msgstr "»%s« wird gelöscht" @@ -257,7 +312,7 @@ msgstr "benutze %s" msgid "More Scheme function renaming" msgstr "benenne weitere Scheme-Funktionen um" -#: convertrules.py:1925 +#: convertrules.py:1924 msgid "" "Page layout has been changed, using paper size and margins.\n" "textheight is no longer used.\n" @@ -265,7 +320,7 @@ msgstr "" "Das Seitenlayout hat sich geändert, benutzen Sie paper size (Papiergröße) und margins (Ränder).\n" "textheight wird nicht mehr benutzt.\n" -#: convertrules.py:2011 +#: convertrules.py:2010 msgid "" "\\foo -> \\foomode (for chords, notes, etc.)\n" "fold \\new FooContext \\foomode into \\foo." @@ -273,7 +328,7 @@ msgstr "" "\\foo -> \\foomode (für Akkorde, Noten usw.)\n" "Komprimiere \\new FooContext \\foomode nach \\foo." -#: convertrules.py:2049 +#: convertrules.py:2048 msgid "" "staff size should be changed at top-level\n" "with\n" @@ -287,85 +342,85 @@ msgstr "" " #(set-global-staff-size )\n" "\n" -#: convertrules.py:2069 +#: convertrules.py:2068 msgid "regularize other identifiers" msgstr "normiere andere Bezeichner" -#: convertrules.py:2137 +#: convertrules.py:2136 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" msgstr "\\encoding: Konvertiere latin1 zu utf8. Entferne ly:point-and-click" -#: convertrules.py:2150 +#: convertrules.py:2149 msgid "LilyPond source must be UTF-8" msgstr "LilyPond-Quelle muss UTF-8 sein" -#: convertrules.py:2153 +#: convertrules.py:2152 msgid "Try the texstrings backend" msgstr "Das texstrings-Backend probieren" -#: convertrules.py:2156 +#: convertrules.py:2155 #, python-format msgid "Do something like: %s" msgstr "Folgendes versuchen: %s" -#: convertrules.py:2159 +#: convertrules.py:2158 msgid "Or save as UTF-8 in your editor" msgstr "Oder als UTF-8 im Editor sichern" -#: convertrules.py:2213 +#: convertrules.py:2212 msgid "warn about auto beam settings" msgstr "Warnung zu den Einstellungen der automatischen Balken" -#: convertrules.py:2218 +#: convertrules.py:2217 msgid "auto beam settings" msgstr "Einstellungen der automatischen Balken" -#: convertrules.py:2220 +#: convertrules.py:2219 msgid "" "\n" "Auto beam settings must now specify each interesting moment in a measure\n" -"explicitely; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" +"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" msgstr "" "\n" "Einstellungen der automatischen Balken müssen jetzt für jede Position\n" "im Takt, die in Frage kommt, explizit gesetzt werden; 1/4 wird nicht mehr\n" "multipliziert, um auch die Positionen von 1/2 und 3/4 zu definieren.\n" -#: convertrules.py:2334 +#: convertrules.py:2333 msgid "verticalAlignmentChildCallback has been deprecated" msgstr "verticalAlignmentChildCallback ist veraltet" -#: convertrules.py:2338 +#: convertrules.py:2337 msgid "Remove callbacks property, deprecate XY-extent-callback." msgstr "Entferne callbacks-Eigenschaft, verwerfe XY-extent-callback." -#: convertrules.py:2359 +#: convertrules.py:2358 msgid "Use grob closures iso. XY-offset-callbacks." msgstr "Benutze grob-Schluss anstelle von XY-offset-callback." -#: convertrules.py:2421 +#: convertrules.py:2420 msgid "foobar -> foo-bar for \\paper, \\layout" msgstr "foobar -> foo-bar für \\paper, \\layout" -#: convertrules.py:2531 +#: convertrules.py:2530 msgid "deprecate \\tempo in \\midi" msgstr "verwerfe \\tempo in \\midi" -#: convertrules.py:2578 +#: convertrules.py:2583 msgid "deprecate cautionary-style. Use AccidentalCautionary properties" msgstr "" "verwerfe cautionary-style für warndende Versetzungszeichen.\n" "Benutze AccidentalCautionary-Eigenschaften" -#: convertrules.py:2591 +#: convertrules.py:2596 msgid "Rename accidental glyphs, use glyph-name-alist." msgstr "Umbenennen der Versetzungszeichen-Glyphen, benutze glyph-name-alist." -#: convertrules.py:2646 +#: convertrules.py:2651 msgid "edge-text settings for TextSpanner." msgstr "edge-text (Randtext)-Einstellungen für TextSpanner." -#: convertrules.py:2647 +#: convertrules.py:2652 #, python-format msgid "" "Use\n" @@ -376,23 +431,35 @@ msgstr "" "\n" "%s" +#: convertrules.py:2685 +msgid "Use the `alignment-offsets' sub-property of\n" +msgstr "Die Untereigenschaft `alignment-offsets' von\n" + #: convertrules.py:2686 +msgid "NonMusicalPaperColumn #'line-break-system-details\n" +msgstr "NonMusicalPaperColumn #'line-break-system-details benutzen,\n" + +#: convertrules.py:2687 +msgid "to set fixed distances between staves.\n" +msgstr "um feste Abstände zwischen Systemen zu setzen.\n" + +#: convertrules.py:2699 msgid "Use #'style not #'dash-fraction to select solid/dashed lines." msgstr "Benutze #'style anstelle von #'dash-fraction, um durchgehende/gestrichelte Linien zu benutzen." -#: convertrules.py:2692 +#: convertrules.py:2705 msgid "all settings related to dashed lines.\n" msgstr "alle Einstellungen zu gestrichelten Linien.\n" -#: convertrules.py:2693 +#: convertrules.py:2706 msgid "Use \\override ... #'style = #'line for solid lines and\n" msgstr "Benutze \\override ... #'style = #'line für durchgehende Linien und\n" -#: convertrules.py:2694 +#: convertrules.py:2707 msgid "\t\\override ... #'style = #'dashed-line for dashed lines." msgstr "\t\\override ... #'style #'dashed-line für gestrichelte Linien." -#: convertrules.py:2730 +#: convertrules.py:2743 msgid "" "metronomeMarkFormatter uses text markup as second argument,\n" "fret diagram properties moved to fret-diagram-details." @@ -400,11 +467,11 @@ msgstr "" "metronomeMarkFormatter benutzt Textbeschriftung as zweites Argument,\n" "Bund-Diagramm-Eigenschaften sind nach fret-diagram-details verschoben." -#: convertrules.py:2735 +#: convertrules.py:2748 msgid "metronomeMarkFormatter got an additional text argument.\n" msgstr "metronomeMarkFormatter hat ein zusätzliches Textargument bekommen.\n" -#: convertrules.py:2736 +#: convertrules.py:2749 #, python-format msgid "" "The function assigned to Score.metronomeMarkFunction now uses the signature\n" @@ -413,1255 +480,1688 @@ msgstr "" "Die Funktion, die Score.metronomeMarkFunction zugeschrieben ist, benutzt jetzt\n" "die Signatur %s" -#: convertrules.py:2799 +#: convertrules.py:2812 msgid "\\put-adjacent argument order.\n" msgstr "\\put-adjacent Argumentreihenfolge.\n" -#: convertrules.py:2800 +#: convertrules.py:2813 msgid "Axis and direction now come before markups:\n" msgstr "Achse und Richtung jetzt vor die Beschriftung setzen:\n" -#: convertrules.py:2801 +#: convertrules.py:2814 msgid "\\put-adjacent axis dir markup markup." msgstr "\\put-adjacent Achse Richtung Beschriftung Beschriftung." -#: convertrules.py:2832 +#: convertrules.py:2845 msgid "re-definition of InnerStaffGroup.\n" msgstr "Neudefinition von InnerStaffGroup.\n" -#: convertrules.py:2838 +#: convertrules.py:2851 msgid "re-definition of InnerChoirStaff.\n" msgstr "Neudefinition von InnerChoirStaff.\n" -#: convertrules.py:2851 +#: convertrules.py:2861 +msgid "Syntax changes for \\addChordShape and \\chord-shape" +msgstr "Syntax-Änderungen für \\addChordShape und \\chord-shape" + +#: convertrules.py:2866 msgid "stringTuning must be added to addChordShape call.\n" msgstr "stringTuning·muss zu einem·addChordShape -Aufruf hinzugefügt werden.\n" -#: convertrules.py:2857 +#: convertrules.py:2872 msgid "stringTuning must be added to chord-shape call.\n" msgstr "stringTuning muss zu dem·chord-shape -Aufruf hinzugefügt werden.\n" -#: fontextract.py:25 -#, python-format -msgid "Scanning %s" -msgstr "Warnung: %s" +#: convertrules.py:2879 +msgid "Remove oldaddlyrics" +msgstr "oldaddlyrics entfernen" -#: fontextract.py:70 -#, python-format -msgid "Extracted %s" -msgstr "%s ausgepackt" +#: convertrules.py:2883 +msgid "" +"oldaddlyrics is no longer supported. \n" +" Use addlyrics or lyrsicsto instead.\n" +msgstr "" +"oldaddlyrics wird nicht mehr unterstützt.\n" +" Benutzen Sie anstatt dessen addlyrics oder lyricsto.\n" -#: fontextract.py:85 +#: convertrules.py:2889 +msgid "" +"keySignature property not reversed any more\n" +"MIDI 47: orchestral strings -> orchestral harp" +msgstr "" +"keySignature-Eigenschaft ist nicht mehr umgedreht\n" +"MIDI 47: Orchester-Streicher -> Orchester-Harfe" + +#: convertrules.py:2894 +msgid "The alist for Staff.keySignature is no longer in reversed order.\n" +msgstr "Die Aliste für Staff.keySignature ist nicht mehr in umgekehrter Reihenfolge.\n" + +#: convertrules.py:2900 +msgid "" +"\\bar \".\" now produces a thick barline\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Dash parameters for slurs and ties are now in dash-definition" +msgstr "" +"\\bar \".\" erstellt jetzt einen dicken Taktstrich\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Strichelunsparameter für Binde- und Legatobögen sind jetzt in dash-definition" + +#: convertrules.py:2906 +msgid "\\bar \".\" now produces a thick barline.\n" +msgstr "\\bar \".\" erstellt jetzt einen dicken Taktstrich.\n" + +#: convertrules.py:2912 +msgid "Dash parameters for slurs and ties are now in 'dash-details.\n" +msgstr "Strichelunsparameter für Binde- und Legatobögen sind jetzt in 'dash-details.\n" + +#: convertrules.py:2917 +msgid "" +"Autobeaming rules have changed. override-auto-beam-setting and\n" +"revert-auto-beam-setting have been eliminated.\n" +"\\overrideBeamSettings has been added.\n" +"beatGrouping has been eliminated.\n" +"Different settings for vertical layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explicit dynamics context definition from `Piano centered dynamics'\n" +"template replaced by new `Dynamics' context." +msgstr "" +"Die automatischen Bebalkungsregeln haben sich geändert. override-auto-beam-setting und\n" +"revert-auto-beam-setting wurden entfernt.\n" +"\\overrideBeamSetting wurde hinzugefügt.\n" +"beatGrouping wurde entfernt.\n" +"Unterschiedliche Einstellungen für das vertikale Layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-dhead::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explizite Definition des Dynamikzeichenkontexts aus der `Piano centered dynamics'\n" +"Vorlage ersetzt durch neuen `Dynamics'-Kontext." + +#: convertrules.py:2931 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now overriden with \\overrideBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" Automatische Bebalkungseinstellungen werden jetzt mit \\overrideBeamSettings verändert.\n" + +#: convertrules.py:2936 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now reverted with \\revertBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" Automatische Bebalkungseinstellungen werden jetzt mit \\revertBeamSettings rückgängig gemacht.\n" + +#: convertrules.py:2941 +msgid "" +"beatGrouping. \n" +" beatGrouping with a specified context must now be accomplished with\n" +" \\overrideBeamSettings.\n" +msgstr "" +"beatGrouping.\n" +" beatGrouping mit einem angegebenen Kontext muss jetzt mit\n" +" \\overrideBeamSettings vorgenommen werden.\n" + +#: convertrules.py:2947 +msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n" +msgstr "alignment-offsets wurde in alignment-distances geändert: Man muss jetzt die Abstände zwischen Systemen angeben und nicht die Verschiebung der Systeme.\n" + +#: convertrules.py:2958 +msgid "" +"Remove obsolete engravers/translators: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"New vertical spacing variables." +msgstr "" +"Entferne obsolete Engraver/Translatoren: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer und String_number_engraver.\n" +"Neue vertikale Abstandsvariablen." + +#: convertrules.py:2989 +msgid "minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n" +msgstr "minimum-Y-extent; vertikale Positionierung hängt nicht mehr von Y-extent einer VerticalAxisGroup ab.\n" + +#: convertrules.py:2995 +msgid "Unify fetaNumber and fetaDynamic encodings" +msgstr "Kodierungen für fetaNumber und fetaDynamic vereinheitlichen" + +#: convertrules.py:3000 +msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" +msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" + +#: convertrules.py:3011 +msgid "\\cresc etc. are now postfix operators" +msgstr "\\cresc usw. werden jetzt der Note nachgestellt" + +#: convertrules.py:3017 +msgid "" +"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" +msgstr "" +"Entferne beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings und \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" + +#: convertrules.py:3035 +msgid "\\overrideBeamSettings. Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n" +msgstr "\\overrideBeamSettings. Benutze \\set beamExceptions oder \\overrideTimeSignatureSettings.\n" + +#: convertrules.py:3039 +msgid "\\revertBeamSettings. Use \\set beamExceptions or \\revertTimeSignatureSettings.\n" +msgstr "\\revertBeamSettings. Benutze \\set beamExceptions oder \\revertTimeSignatureSettings.\n" + +#: convertrules.py:3043 +msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n" +msgstr "beamSettings. Benutze baseMoment, beatStructure und beamExceptions.\n" + +#: convertrules.py:3047 +msgid "beatLength. Use baseMoment and beatStructure.\n" +msgstr "beatLength. Benutze baseMoment und beatStructure.\n" + +#: convertrules.py:3051 +msgid "setbeatGrouping. Use baseMoment and beatStructure.\n" +msgstr "setbeatGrouping. Benutze baseMoment und beatStructure.\n" + +#: convertrules.py:3056 +msgid "" +"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n" +"Deprecate negative dash-period for hidden lines: use #'style = #'none instead." +msgstr "" +"Holzbläser-Diagramme: Größe (size), Dicke (thickness) und graphic aus Argumentenliste nach Eigenschaften verschoben.\n" +"Negatives dash-period für versteckte Linien ist veraltet: #'style = #'none anstellt dessen benutzen." + +#: convertrules.py:3061 +msgid "woodwind-diagrams. Move size, thickness, and graphic to properties. Argument should be just the key list.\n" +msgstr "woodwind-diagrams. size, thickness und graphic in Eigenschaften verschoben. Argument darf nur die Liste der Schlüssel sein.\n" + +#: convertrules.py:3069 +msgid "" +"Rename vertical spacing variables.\n" +"Add fretboard-table argument to savePredefinedFretboard." +msgstr "" +"Vertikale Abstandsvariablen umbenennen.\n" +"fretboard-table-Argument hinzufügen, um PredefinedFretboard zu speichern." + +#: convertrules.py:3087 +msgid "Rename vertical spacing grob properties." +msgstr "Vertikale Abstands-Grob-Eigenschaften umbenennen." + +#: convertrules.py:3103 +msgid "Remove \\paper variables head-separation and foot-separation." +msgstr "\\paper-Variablen head-separation und foot-separation entfernen." + +#: convertrules.py:3108 +msgid "Adjust settings for top-system-spacing instead.\n" +msgstr "Anstelle dessen Einstellungen für top-system-spacing anpassen.\n" + +#: convertrules.py:3113 +msgid "Adjust settings for last-bottom-spacing instead.\n" +msgstr "Anstelle dessen Einstellungen für last-bottom-spacing anpassen.\n" + +#: convertrules.py:3119 +msgid "" +"Rename space to basic-distance in various spacing alists.\n" +"Remove HarmonicParenthesesItem grob." +msgstr "" +"Umbennen von Abstand in basic-distance in verschiedenen Positionierungs-Alisten.\n" +"Entfernen des HarmonicParenthesesItem-Grobs." + +#: convertrules.py:3127 +msgid "HarmonicParenthesesItem has been eliminated.\n" +msgstr "HarmonicParenthesesItem wurde entfernt.\n" + +#: convertrules.py:3128 +msgid "Harmonic parentheses are part of the TabNoteHead grob.\n" +msgstr "Harmonische Klammern sind Teil des TabNoteHead-Grobs.\n" + +#: convertrules.py:3133 +msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n" +msgstr "Entferne Kontext von overrideTimeSignatureSettings und revertTimeSignatureSettings.\n" + +#: convertrules.py:3140 +msgid "" +"Change stringTunings from a list of semitones to a list of pitches.\n" +"Change tenor and baritone ukulele names in string tunings.\n" +"Generate messages for manual conversion of vertical spacing if required." +msgstr "" +"Ändere stringTunings von einer Liste mit Halbtönen in eine Tonhöhenliste.\n" +"Ändere Tenor- und Bariton-Ukulele-Bezeichnungen in Saitenstimmungen.\n" +"Erstelle Nachrichten für manuelle Konversion von vertikalem Platz, wenn nötig." + +#: convertrules.py:3180 +msgid "Vertical spacing changes might affect user-defined contexts. " +msgstr "Vertikale Positionierungsänderungen können sich auf von Benutzern definierte Kontexte auswirken. " + +#: convertrules.py:3185 +msgid "Replace bar-size with bar-extent." +msgstr "Ersetze bar-size durch bar-extent." + +#: convertrules.py:3197 +msgid "Woodwind diagrams: Changes to the clarinet diagram." +msgstr "Holsbläserdiagramme: Änderungen im Klarinetten-Diagramm." + +#: convertrules.py:3201 +msgid "woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of instrument.\n" +msgstr "woodwind-diagrams. Klarinetten-Fingersatz verändert um Anatomie des Instruments wiederzugeben.\n" + +#: book_base.py:24 #, python-format -msgid "Writing fonts to %s" -msgstr "Schreiben der Schriftarten nach %s" +msgid "file not found: %s" +msgstr "Datei `%s' nicht gefunden" + +#: book_base.py:161 +msgid "Output function not implemented" +msgstr "Ausgabefunktion nicht implementiert" + +#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115 +#: input.cc:123 +#, c-format, python-format +msgid "error: %s" +msgstr "Fehler: %s" -#: lilylib.py:91 lilylib.py:142 +#: lilylib.py:124 lilylib.py:175 #, python-format msgid "Invoking `%s'" msgstr "`%s' wird aufgerufen" -#: lilylib.py:93 lilylib.py:144 +#: lilylib.py:126 lilylib.py:177 #, python-format msgid "Running %s..." msgstr "%s wird ausgeführt..." -#: lilylib.py:209 +#: lilylib.py:253 #, python-format msgid "Usage: %s" msgstr "Aufruf: %s" -#: musicexp.py:215 musicexp.py:220 +#: musicexp.py:216 musicexp.py:221 msgid "Language does not support microtones contained in the piece" msgstr "Die Sprache unterstützt nicht die Mikrotöne in diesem Stück" -#: musicexp.py:482 +#: musicexp.py:483 msgid "Tuplet brackets of curved shape are not correctly implemented" msgstr "N-tolen-Klammern mit gekrümmten Klammern sind nicht richtig implementiert" -#. TODO: Implement this using actual_type and normal_type! -#: musicexp.py:511 -msgid "Tuplet brackets displaying both note durations are not implemented, using default" -msgstr "N-tolen-Klammern, die beide Notendauern darstellen, sind nicht implementiert, benutze Standard" - -#: musicexp.py:656 +#: musicexp.py:669 #, python-format msgid "unable to set the music %(music)s for the repeat %(repeat)s" msgstr "kann die Noten %(music)s für die Wiederholung %(repeat)s nicht setzen" -#: musicexp.py:665 +#: musicexp.py:678 msgid "encountered repeat without body" msgstr "Wiederholung ohne Body angetroffen" #. no self.elements! -#: musicexp.py:835 +#: musicexp.py:848 #, python-format msgid "Grace note with no following music: %s" msgstr "Verzierungsnoten ohne folgende Noten: %s" -#: musicexp.py:997 +#: musicexp.py:1010 #, python-format msgid "Invalid octave shift size found: %s. Using no shift." msgstr "Ungültige Oktavenversetzungsgröße gefunden: %s. Versetzung wird nicht angewendet." -#: musicexp.py:1455 +#: musicexp.py:1468 #, python-format msgid "Unable to convert alteration %s to a lilypond expression" msgstr "Kann Alteration %s nicht in einen LilyPond-Ausdruck umwandeln" -#: musicxml.py:13 convert-ly.py:53 lilypond-book.py:97 warn.cc:54 input.cc:96 -#: input.cc:104 -#, c-format, python-format -msgid "error: %s" -msgstr "Fehler: %s" - #. TODO: Handle pieces without a time signature! -#: musicxml.py:357 +#: musicxml.py:358 msgid "Senza-misura time signatures are not yet supported!" msgstr "Senza-misura-Taktarten sind noch nicht unterstützt!" -#: musicxml.py:375 +#: musicxml.py:376 msgid "Unable to interpret time signature! Falling back to 4/4." msgstr "Unfähig, die Taktart zu interpretieren! Benutze 4/4-Takt." -#: musicxml.py:431 +#: musicxml.py:432 #, python-format msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!" msgstr "Tonartalterationsoktave für eine nicht existente Alteration Nr. %s angegeben, mögliche Nummern: %s!" -#: musicxml.py:519 +#: musicxml.py:520 #, python-format msgid "Unable to find instrument for ID=%s\n" msgstr "Kann kein Instrument für ID=%s finden\n" -#: abc2ly.py:1341 convert-ly.py:74 lilypond-book.py:121 midi2ly.py:845 -#, python-format -msgid "%s [OPTION]... FILE" -msgstr "%s [OPTIONEN]... DATEI" +#: book_latex.py:156 +msgid "cannot find \\begin{document} in LaTeX document" +msgstr "\\begin{document} im LaTeX-Dokument kann nicht gefunden werden" -#: abc2ly.py:1342 +#: musicxml2ly.py:223 #, python-format -msgid "" -"abc2ly converts ABC music files (see\n" -"%s) to LilyPond input.\n" -msgstr "" -"abc2ly wandelt ABC-Musikdateien in LilyPond-Eingabe um\n" -"(siehe auch %s).\n" - -#: abc2ly.py:1350 convert-ly.py:81 etf2ly.py:1190 lilypond-book.py:207 -#: midi2ly.py:881 musicxml2ly.py:2590 main.cc:156 -msgid "show version number and exit" -msgstr "Versionsnummer ausgeben und beenden" +msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" +msgstr "Die Datei wurde von %s erstellt und enthält falsche Balkeninformation. Alle Balkeninformation in der MusicXML-Datei wird ignoriert" -#: abc2ly.py:1354 convert-ly.py:85 etf2ly.py:1186 lilypond-book.py:138 -#: midi2ly.py:860 musicxml2ly.py:2572 main.cc:145 -msgid "show this help and exit" -msgstr "diese Hilfe anzeigen und beenden" +#: musicxml2ly.py:239 musicxml2ly.py:241 +#, python-format +msgid "Unprocessed PartGroupInfo %s encountered" +msgstr "Unverarbeitetes PartGroupInfo %s angetroffen" -#: abc2ly.py:1356 etf2ly.py:1191 midi2ly.py:864 -msgid "write output to FILE" -msgstr "Ausgabe in DATEI schreiben" +#: musicxml2ly.py:494 +#, python-format +msgid "Encountered note at %s without type and duration (=%s)" +msgstr "Note bei %s ohne Art und Dauer angetroffen (=%s)" -#: abc2ly.py:1358 -msgid "be strict about success" -msgstr "bzgl. Erfolg streng sein" +#: musicxml2ly.py:514 +#, python-format +msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" +msgstr "Rationale Dauer mit Nenner %s angetroffen, kann nicht in lilypond-Dauer umgewandelt werden" -#: abc2ly.py:1360 -msgid "preserve ABC's notion of beams" -msgstr "ABCs Prinzip der Balken beibehalten" +#: musicxml2ly.py:761 +msgid "Unable to extract key signature!" +msgstr "Kann die Tonart nicht extrahieren!" -#. Translators, please translate this string as -#. "Report bugs in English via %s", -#. or if there is a LilyPond users list or forum in your language -#. "Report bugs in English via %s or in YOUR_LANG via URI" -#: abc2ly.py:1363 convert-ly.py:123 etf2ly.py:1200 lilypond-book.py:214 -#: midi2ly.py:894 musicxml2ly.py:2646 main.cc:265 -#, c-format, python-format -msgid "Report bugs via %s" -msgstr "Melden Sie Fehler an %s" +#: musicxml2ly.py:788 +#, python-format +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" +msgstr "unbekannter Modus %s, 'major' (Dur) oder 'minor' (Moll) oder eine Kirchentonart wird erwartet" -#: convert-ly.py:33 -msgid "" -"Update LilyPond input to newer version. By default, update from the\n" -"version taken from the \\version command, to the current LilyPond version." -msgstr "" -"LilyPond-Eingabe auf neuere Version bringen. Standardmäßig wird von der\n" -"Version vom Kommando \\version zur aktuellen LilyPond-Version gegangen." +#: musicxml2ly.py:926 +#, python-format +msgid "Encountered unprocessed marker %s\n" +msgstr "Unverarbeiteter Marker %s angetroffen\n" -#: convert-ly.py:35 lilypond-book.py:71 -msgid "Examples:" -msgstr "Beispiele:" +#: musicxml2ly.py:1020 +#, python-format +msgid "unknown span event %s" +msgstr "Unbekannte Spannerklasse »%s«" -#: convert-ly.py:69 etf2ly.py:1173 lilypond-book.py:117 midi2ly.py:76 -msgid "Distributed under terms of the GNU General Public License." -msgstr "Vertrieben unter den Bedingungen der GNU General Public License." +#: musicxml2ly.py:1030 +#, python-format +msgid "unknown span type %s for %s" +msgstr "Unbekannter Spannertyp %s für %s" -#: convert-ly.py:70 etf2ly.py:1174 lilypond-book.py:118 midi2ly.py:77 -msgid "It comes with NO WARRANTY." -msgstr "Es wird OHNE GARANTIE ausgeliefert." +#: musicxml2ly.py:1450 +msgid "Unknown metronome mark, ignoring" +msgstr "Unbekanntes Metronom-Zeichen, wird ignoriert" -#: convert-ly.py:89 convert-ly.py:116 -msgid "VERSION" -msgstr "VERSION" +#. TODO: Implement the other (more complex) way for tempo marks! +#: musicxml2ly.py:1455 +msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." +msgstr "Metronommakern mit komplexen Beziehungen ( in MusicXML) sind noch nicht implementiert." -#: convert-ly.py:91 -msgid "start from VERSION [default: \\version found in file]" -msgstr "bei VERSION anfangen [Standard: \\version in Datei gefunden]" +#: musicxml2ly.py:1657 +#, python-format +msgid "Unable to convert chord type %s to lilypond." +msgstr "Kann Akkordtyp %s nicht nach lilypond umwandeln" -#: convert-ly.py:94 -msgid "edit in place" -msgstr "vor Ort ändern" +#: musicxml2ly.py:1806 +#, python-format +msgid "drum %s type unknown, please add to instrument_drumtype_dict" +msgstr "Schlagzeug %s Typ unbekannt, bitte zum instrument_drumtype_dict hinzufügen" -#: convert-ly.py:98 -msgid "do not add \\version command if missing" -msgstr "keinen \\version-Befehl hinzufügen, falls es fehlt" +#: musicxml2ly.py:1810 +msgid "cannot find suitable event" +msgstr "passendes Ereignis kann nicht gefunden werden" -#: convert-ly.py:104 +#: musicxml2ly.py:1958 #, python-format -msgid "force updating \\version number to %s" -msgstr "erzwinge Aktualisierung von \\version nach %s" +msgid "Negative skip %s (from position %s to %s)" +msgstr "Negativer Sprung (skip) %s (von Position %s bis %s)" -#: convert-ly.py:110 +#: musicxml2ly.py:2099 #, python-format -msgid "show rules [default: -f 0, -t %s]" -msgstr "Regeln anzeigen [Standard: -f 0, -t %s]" +msgid "Negative skip found: from %s to %s, difference is %s" +msgstr "Negativer Sprung (skip) gefunden: von %s bis %s, Differenz ist %s" -#: convert-ly.py:115 +#: musicxml2ly.py:2180 #, python-format -msgid "convert to VERSION [default: %s]" -msgstr "zu VERSION konvertieren [Standard: %s]" - -#: convert-ly.py:163 -msgid "Applying conversion: " -msgstr "Anwenden der Umwandlung: " +msgid "unexpected %s; expected %s or %s or %s" +msgstr "unerwartetes %s; %s oder %s oder %s erwartet" -#: convert-ly.py:176 -msgid "Error while converting" -msgstr "Fehler beim Umwandeln" +#: musicxml2ly.py:2286 +msgid "Encountered closing slur, but no slur is open" +msgstr "Auf schließenden Legatobogen gestoßen, aber es wurde kein Bogen begonnen" -#: convert-ly.py:178 -msgid "Stopping at last successful rule" -msgstr "Abbruch bei letzter erfolgreicher Regel" +#: musicxml2ly.py:2289 +msgid "Cannot have two simultaneous (closing) slurs" +msgstr "Zwei gleichzeitige (schließende) Legatobögen sind nicht möglich" -#: convert-ly.py:199 -#, python-format -msgid "Processing `%s'... " -msgstr "»%s« wird verarbeitet..." +#: musicxml2ly.py:2298 +msgid "Cannot have a slur inside another slur" +msgstr "Ein Legatobogen innerhalb eines anderen Legatobogens ist nicht möglich" -#: convert-ly.py:289 relocate.cc:362 source-file.cc:59 -#, c-format, python-format -msgid "cannot open file: `%s'" -msgstr "Datei kann nicht geöffnet werden: »%s«" +#: musicxml2ly.py:2301 +msgid "Cannot have two simultaneous slurs" +msgstr "Zwei gleichzeitige Legatobögen sind nicht möglich" -#: convert-ly.py:296 +#: musicxml2ly.py:2435 #, python-format -msgid "cannot determine version for `%s'. Skipping" -msgstr "Version für »%s« kann nicht erkannt werden. Wird übersprungen" - -#: etf2ly.py:1179 -#, python-format -msgid "%s [OPTION]... ETF-FILE" -msgstr "%s [OPTIONEN]... ETF-DATEI" - -#: etf2ly.py:1180 -msgid "" -"Enigma Transport Format is a format used by Coda Music Technology's\n" -"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" -msgstr "" -"Enigma Transport-Format ist ein von Coda Music Technology's Finale\n" -"verwendetes Format. etf2ly wandelt eine Teilmenge von ETF in\n" -"eine von Lilypond verwendbare Datei um.\n" - -#: etf2ly.py:1192 midi2ly.py:865 musicxml2ly.py:2638 main.cc:149 main.cc:154 -msgid "FILE" -msgstr "DATEI" - -#: etf2ly.py:1194 lilypond-book.py:210 midi2ly.py:882 main.cc:158 -msgid "show warranty and copyright" -msgstr "Informationen zu Gewährleistung und Copyright anzeigen" - -#: lilypond-book.py:69 -msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." -msgstr "LilyPond-Schnipsel in Mischdatei (HTML, LaTeX, texinfo oder DocBook) verarbeiten" - -#: lilypond-book.py:76 -msgid "BOOK" -msgstr "BUCH" - -#: lilypond-book.py:84 -#, python-format -msgid "Exiting (%d)..." -msgstr "Beenden (%d)..." - -#: lilypond-book.py:115 -#, python-format -msgid "Copyright (c) %s by" -msgstr "Copyright (c) %s bei" - -#: lilypond-book.py:125 -msgid "FILTER" -msgstr "FILTER" - -#: lilypond-book.py:128 -msgid "pipe snippets through FILTER [default: `convert-ly -n -']" -msgstr "Auszüge durch FILTER [Standard: »convert-ly -n -«] leiten (Pipe)" - -#: lilypond-book.py:132 -msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" -msgstr "Ausgabeformat FORMAT (texi [Vorgabe], texi-html, latex, html, docbook) verwenden" - -#: lilypond-book.py:133 -msgid "FORMAT" -msgstr "FORMAT" - -#: lilypond-book.py:140 -msgid "add DIR to include path" -msgstr "VERZ zum Einfügepfad hinzufügen" - -#: lilypond-book.py:141 lilypond-book.py:148 lilypond-book.py:166 -#: lilypond-book.py:172 lilypond-book.py:178 lilypond-book.py:184 main.cc:148 -msgid "DIR" -msgstr "VERZ" - -#: lilypond-book.py:146 -msgid "format Texinfo output so that Info will look for images of music in DIR" -msgstr "Formatiere Texinfo-Ausgabe so, dass Info nach Bildern und Noten im VERZ suchen kann" - -#: lilypond-book.py:153 -msgid "run executable PROG instead of latex" -msgstr "benutze ausführbare Datei PROG anstelle von latex" - -#: lilypond-book.py:154 -msgid "PROG" -msgstr "PROG" - -#: lilypond-book.py:159 -msgid "PAD" -msgstr "FÜLLUNG" - -#: lilypond-book.py:161 -msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" -msgstr "verschiebe linken Rand der Noten um an den Noten auszurichten, obwohl Taktnummer ungerade ist (in mm)" - -#: lilypond-book.py:165 -msgid "write output to DIR" -msgstr "Ausgabe in DATEI schreiben" +msgid "cannot simultaneously have more than one mode: %s" +msgstr "Kann nicht gleichzeitig mehr als einen Modus haben: %s" -#: lilypond-book.py:171 -msgid "do not fail if no lilypond output is found" -msgstr "nicht abbrechen wenn keine lilypond-Ausgabe gefunden wird" +#: musicxml2ly.py:2543 +msgid "Converting to LilyPond expressions..." +msgstr "In LilyPond-Ausdrücke umwandeln..." -#: lilypond-book.py:177 -msgid "do not fail if no PNG images are found for EPS files" -msgstr "nicht abbrechen wenn, keine PNG-Bilder für EPS-Dateien gefunden werden" +#: musicxml2ly.py:2554 +msgid "musicxml2ly [OPTION]... FILE.xml" +msgstr "musicxml2ly [Optionen]... DATEI.xml" -#: lilypond-book.py:183 -msgid "write lily-XXX files to DIR, link into --output dir" -msgstr "schreibe lily-XXX-Dateien nach VERZ, verlinke nach --output dir" +#: musicxml2ly.py:2556 +msgid "" +"Convert MusicXML from FILE.xml to LilyPond input.\n" +"If the given filename is -, musicxml2ly reads from the command line.\n" +msgstr "" +"Wandle MusicXML-Datei von DAT.xml nach LilyPond-Eingabe um.\n" +"Wenn der angegebene Dateiname - ist, list musicxml2ly von der Kommandozeile.\n" -#: lilypond-book.py:188 -msgid "COMMAND" -msgstr "BEFEHL" +#: musicxml2ly.py:2562 midi2ly.py:987 abc2ly.py:1386 lilypond-book.py:140 +#: convert-ly.py:98 etf2ly.py:1202 main.cc:157 +msgid "show this help and exit" +msgstr "diese Hilfe anzeigen und beenden" -#: lilypond-book.py:189 -msgid "process ly_files using COMMAND FILE..." -msgstr "ly_files mit BEFEHL DATEI... verarbeiten" +#: musicxml2ly.py:2566 +msgid "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" +msgstr "" +"Copyright (c) 2005--2011\n" +"····Han-Wen·Nienhuys·,\n" +"····Jan·Nieuwenhuizen··and\n" +"····Reinhold·Kainhofer·\n" -#: lilypond-book.py:196 -msgid "create PDF files for use with PDFTeX" -msgstr "PDF-Dateien für Verwendung mit PDFTeX erzeugen" +#: musicxml2ly.py:2580 midi2ly.py:1015 abc2ly.py:1382 lilypond-book.py:212 +#: convert-ly.py:94 etf2ly.py:1206 main.cc:168 +msgid "show version number and exit" +msgstr "Versionsnummer ausgeben und beenden" -#: lilypond-book.py:199 midi2ly.py:875 musicxml2ly.py:2595 main.cc:157 +#: musicxml2ly.py:2585 midi2ly.py:1009 lilypond-book.py:204 main.cc:169 msgid "be verbose" msgstr "wortreich sein" -#: lilypond-book.py:871 -#, python-format -msgid "file not found: %s" -msgstr "Datei `%s' nicht gefunden" +#: musicxml2ly.py:2591 +msgid "use lxml.etree; uses less memory and cpu time" +msgstr "lxml.etree verwenden; benötigt weniger Speicher und Prozessorzeit" -#: lilypond-book.py:1142 -#, python-format -msgid "deprecated ly-option used: %s=%s" -msgstr "veraltete ly-option verwendet: %s=%s" +#: musicxml2ly.py:2597 +msgid "input file is a zip-compressed MusicXML file" +msgstr "Eingabedatei ist eine zip-komprimierte MusicXML-Datei" -#: lilypond-book.py:1144 -#, python-format -msgid "compatibility mode translation: %s=%s" -msgstr "Übersetzung im Kompatibilitätsmodus: %s=%s" +#: musicxml2ly.py:2603 +msgid "convert pitches in relative mode (default)" +msgstr "Tonhöhen im relativen Modus konvertieren (Standard)" -#: lilypond-book.py:1147 -#, python-format -msgid "deprecated ly-option used: %s" -msgstr "veraltete ly-option verwendet: %s" +#: musicxml2ly.py:2608 +msgid "convert pitches in absolute mode" +msgstr "Tonhöhen im absoluten Modus konvertieren" -#: lilypond-book.py:1149 -#, python-format -msgid "compatibility mode translation: %s" -msgstr "Übersetzung im Kompatibilitätsmodus: %s" +#: musicxml2ly.py:2611 +msgid "LANG" +msgstr "SPRA" -#: lilypond-book.py:1167 -#, python-format -msgid "ignoring unknown ly option: %s" -msgstr "unbekannte Option ignoriert: %s" +#: musicxml2ly.py:2613 +msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German" +msgstr "benutzte SPRA für Notenbezeichnugen, z. B. 'deutsch' für deutsche Notenbezeichnungen" -#: lilypond-book.py:1604 -#, python-format -msgid "Opening filter `%s'" -msgstr "Filter »%s« wird geöffnet" +#: musicxml2ly.py:2619 +msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +msgstr "Richtungen (^, _ oder -) for Artikulationen, Dynamik usw. nicht konvertieren" -#: lilypond-book.py:1621 -#, python-format -msgid "`%s' failed (%d)" -msgstr "»%s« gescheitert (%d)" +#: musicxml2ly.py:2625 +msgid "do not convert exact vertical positions of rests" +msgstr "zusätzliche vertikale Positionen von Pausen nicht konvertieren" -#: lilypond-book.py:1622 -msgid "The error log is as follows:" -msgstr "Das Fehlerprotokoll lautet wie folgt:" +#: musicxml2ly.py:2631 +msgid "do not convert the exact page layout and breaks" +msgstr "nicht das exakte Seitenlayout und Umbrüche konvertieren" -#: lilypond-book.py:1684 -msgid "cannot find \\begin{document} in LaTeX document" -msgstr "\\begin{document} im LaTeX-Dokument kann nicht gefunden werden" +#: musicxml2ly.py:2637 +msgid "do not convert beaming information, use lilypond's automatic beaming instead" +msgstr "Balkeninformation nicht konvertieren, benutze die automatischen Balken von lilypond statt dessen" -#: lilypond-book.py:1784 -msgid "Writing snippets..." -msgstr "Auszüge werden geschrieben..." +#: musicxml2ly.py:2640 midi2ly.py:992 midi2ly.py:997 etf2ly.py:1208 +#: main.cc:161 main.cc:166 +msgid "FILE" +msgstr "DATEI" -#: lilypond-book.py:1790 -msgid "Processing..." -msgstr "Verarbeiten..." +#: musicxml2ly.py:2645 +msgid "set output filename to FILE, stdout if -" +msgstr "Ausgabedateiname auf DATEI setzen, stout if -" -#: lilypond-book.py:1796 -msgid "All snippets are up to date..." -msgstr "Alle Auszüge sind auf dem neuesten Stand..." +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: musicxml2ly.py:2648 midi2ly.py:1028 abc2ly.py:1395 lilypond-book.py:234 +#: convert-ly.py:144 etf2ly.py:1216 main.cc:281 +#, c-format, python-format +msgid "Report bugs via %s" +msgstr "Melden Sie Fehler an %s" -#: lilypond-book.py:1830 +#: musicxml2ly.py:2728 #, python-format -msgid "cannot determine format for: %s" -msgstr "Format für %s kann nicht ermittelt werden" +msgid "unknown part in part-list: %s" +msgstr "unbekannte Stimme in part-list (Stimmen-Liste): %s" -#: lilypond-book.py:1841 -#, python-format -msgid "%s is up to date." -msgstr "%s ist aktuell." +#: musicxml2ly.py:2790 +msgid "Input is compressed, extracting raw MusicXML data from stdin" +msgstr "Eingabedatei %s ist komprimiert, entpacke die MusicXML-Daten von stdin" -#: lilypond-book.py:1855 +#: musicxml2ly.py:2793 #, python-format -msgid "Writing `%s'..." -msgstr "»%s« wird geschrieben..." +msgid "Input file %s is compressed, extracting raw MusicXML data" +msgstr "Eingabedatei %s ist komprimiert, entpacke die MusicXML-Daten" -#: lilypond-book.py:1913 -msgid "Output would overwrite input file; use --output." -msgstr "Ausgabe würde Eingabedatei überschreiben; verwenden Sie --output." +#: musicxml2ly.py:2823 +msgid "Reading MusicXML from Standard input ..." +msgstr "MusicXML von standard input lesen..." -#: lilypond-book.py:1917 +#: musicxml2ly.py:2825 #, python-format -msgid "Reading %s..." -msgstr "%s lesen..." - -#: lilypond-book.py:1937 -msgid "Dissecting..." -msgstr "Zerlegen..." +msgid "Reading MusicXML from %s ..." +msgstr "MusicXML aus %s lesen..." -#: lilypond-book.py:1953 +#: musicxml2ly.py:2858 #, python-format -msgid "Compiling %s..." -msgstr "%s kompilieren..." +msgid "Output to `%s'" +msgstr "Ausgabe nach »%s«" -#: lilypond-book.py:1962 +#: musicxml2ly.py:2925 #, python-format -msgid "Processing include: %s" -msgstr "Einfügung wird verarbeitet: %s" +msgid "Unable to find input file %s" +msgstr "Eingabedatei kann nicht gefunden werden %s" -#: lilypond-book.py:1974 +#: midi2ly.py:90 lilypond-book.py:116 convert-ly.py:81 etf2ly.py:1189 #, python-format -msgid "Removing `%s'" -msgstr "»%s« wird gelöscht" +msgid "Copyright (c) %s by" +msgstr "Copyright (c) %s bei" + +#: midi2ly.py:92 lilypond-book.py:118 convert-ly.py:83 etf2ly.py:1191 +msgid "Distributed under terms of the GNU General Public License." +msgstr "Vertrieben unter den Bedingungen der GNU General Public License." + +#: midi2ly.py:93 lilypond-book.py:119 convert-ly.py:84 etf2ly.py:1192 +msgid "It comes with NO WARRANTY." +msgstr "Es wird OHNE GARANTIE ausgeliefert." -#: midi2ly.py:84 lily-library.scm:634 lily-library.scm:643 +#: midi2ly.py:99 msgid "warning: " msgstr "Warnung: " -#: midi2ly.py:87 midi2ly.py:907 +#: midi2ly.py:102 midi2ly.py:1041 msgid "error: " msgstr "Fehler: " -#: midi2ly.py:88 +#: midi2ly.py:103 msgid "Exiting... " msgstr "Beenden... " -#: midi2ly.py:833 +#: midi2ly.py:960 #, python-format msgid "%s output to `%s'..." msgstr "%s nach »%s« ausgeben..." -#: midi2ly.py:846 +#: midi2ly.py:972 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87 +#, python-format +msgid "%s [OPTION]... FILE" +msgstr "%s [OPTIONEN]... DATEI" + +#: midi2ly.py:973 #, python-format msgid "Convert %s to LilyPond input.\n" msgstr "%s in LilyPond-Quelltext umwandeln.\n" -#: midi2ly.py:851 +#: midi2ly.py:978 msgid "print absolute pitches" msgstr "Absolute Tonhöhen ausgeben" -#: midi2ly.py:853 midi2ly.py:868 +#: midi2ly.py:980 midi2ly.py:1002 msgid "DUR" msgstr "DAUER" -#: midi2ly.py:854 +#: midi2ly.py:981 msgid "quantise note durations on DUR" msgstr "Notenlängen auf DAUER quantisieren" -#: midi2ly.py:857 +#: midi2ly.py:984 msgid "print explicit durations" msgstr "Explizite Notenlängen ausgeben" -#: midi2ly.py:861 +#: midi2ly.py:989 +msgid "prepend FILE to output" +msgstr "DATEI an die Ausgabe anfügen" + +#: midi2ly.py:993 msgid "set key: ALT=+sharps|-flats; MINOR=1" msgstr "Tonart setzen: VORZ=+Kreuze|-B's; MOLL=1" -#: midi2ly.py:862 +#: midi2ly.py:994 msgid "ALT[:MINOR]" msgstr "VORZ[:MOLL]" -#: midi2ly.py:867 +#: midi2ly.py:996 abc2ly.py:1388 etf2ly.py:1207 +msgid "write output to FILE" +msgstr "Ausgabe in DATEI schreiben" + +#: midi2ly.py:999 +msgid "preview of first 4 bars" +msgstr "Vorschau der ersten 4 Takte" + +#: midi2ly.py:1001 msgid "quantise note starts on DUR" msgstr "Notenanfänge auf DAUER quantisieren" -#: midi2ly.py:870 +#: midi2ly.py:1004 msgid "DUR*NUM/DEN" msgstr "DAUER*ZÄHLER/NENNER" # tuplet = Wertaufteilung nach: Peter Giger: Die Kunst des Rhythmus, Seite 25 -#: midi2ly.py:873 +#: midi2ly.py:1007 msgid "allow tuplet durations DUR*NUM/DEN" msgstr "Wertaufteilungsdauern DAUER*ZÄHLER/NENNER erlauben" -#: midi2ly.py:885 +#: midi2ly.py:1016 lilypond-book.py:215 convert-ly.py:139 etf2ly.py:1210 +#: main.cc:170 +msgid "show warranty and copyright" +msgstr "Informationen zu Gewährleistung und Copyright anzeigen" + +#: midi2ly.py:1019 msgid "treat every text as a lyric" msgstr "Jeden Text als Liedtext behandeln" -#: midi2ly.py:888 +#: midi2ly.py:1022 msgid "Examples" msgstr "Beispiele" -#: midi2ly.py:908 +#: midi2ly.py:1042 msgid "no files specified on command line." msgstr "Keine Dateien auf der Kommandozeile angegeben." -#: musicxml2ly.py:343 -msgid "Encountered file created by Dolet 3.4 for Sibelius, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" -msgstr "Die Datei wurde von Dolet 3.4 für SIbelius erstellt und enthält falsche Balkeninformation. Alle Balkeninformation in der MusicXML-Datei wird ignoriert" - -#: musicxml2ly.py:346 -msgid "Encountered file created by Noteworthy Composer's nwc2xml, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" -msgstr "Die Datei wurde von Noteworthy·Composer's·nwc2xml erstellt und enthält falsche Balkeninformation. Alle Balkeninformation in der MusicXML-Datei wird ignoriert" - -#: musicxml2ly.py:362 musicxml2ly.py:364 +#: abc2ly.py:1374 #, python-format -msgid "Unprocessed PartGroupInfo %s encountered" -msgstr "Unverarbeitetes PartGroupInfo %s angetroffen" +msgid "" +"abc2ly converts ABC music files (see\n" +"%s) to LilyPond input.\n" +msgstr "" +"abc2ly wandelt ABC-Musikdateien in LilyPond-Eingabe um\n" +"(siehe auch %s).\n" -#: musicxml2ly.py:594 -#, python-format -msgid "Encountered note at %s without type and duration (=%s)" -msgstr "Note bei %s ohne Art und Dauer angetroffen (=%s)" +#: abc2ly.py:1390 +msgid "be strict about success" +msgstr "bzgl. Erfolg streng sein" -#: musicxml2ly.py:613 -#, python-format -msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" -msgstr "Rationale Dauer mit Nenner %s angetroffen, kann nicht in lilypond-Dauer umgewandelt werden" +#: abc2ly.py:1392 +msgid "preserve ABC's notion of beams" +msgstr "ABCs Prinzip der Balken beibehalten" -#: musicxml2ly.py:868 -msgid "Unable to extract key signature!" -msgstr "Kann die Tonart nicht extrahieren!" +#: lilypond-book.py:80 +msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." +msgstr "LilyPond-Schnipsel in Mischdatei (HTML, LaTeX, texinfo oder DocBook) verarbeiten" -#: musicxml2ly.py:895 -#, python-format -msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" -msgstr "unbekannter Modus %s, 'major' (Dur) oder 'minor' (Moll) oder eine Kirchentonart wird erwartet" +#: lilypond-book.py:82 convert-ly.py:46 +msgid "Examples:" +msgstr "Beispiele:" -#: musicxml2ly.py:968 -#, python-format -msgid "Encountered unprocessed marker %s\n" -msgstr "Unverarbeiteter Marker %s angetroffen\n" +#: lilypond-book.py:87 +msgid "BOOK" +msgstr "BUCH" -#: musicxml2ly.py:1062 +#: lilypond-book.py:95 #, python-format -msgid "unknown span event %s" -msgstr "Unbekannte Spannerklasse »%s«" +msgid "Exiting (%d)..." +msgstr "Beenden (%d)..." -#: musicxml2ly.py:1072 -#, python-format -msgid "unknown span type %s for %s" -msgstr "Unbekannter Spannertyp %s für %s" +#: lilypond-book.py:127 +msgid "FILTER" +msgstr "FILTER" -#: musicxml2ly.py:1498 -msgid "Unknown metronome mark, ignoring" -msgstr "Unbekanntes Metronom-Zeichen, wird ignoriert" +#: lilypond-book.py:130 +msgid "pipe snippets through FILTER [default: `convert-ly -n -']" +msgstr "Auszüge durch FILTER [Standard: »convert-ly -n -«] leiten (Pipe)" -#. TODO: Implement the other (more complex) way for tempo marks! -#: musicxml2ly.py:1503 -msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." -msgstr "Metronommakern mit komplexen Beziehungen ( in MusicXML) sind noch nicht implementiert." +#: lilypond-book.py:134 +msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" +msgstr "Ausgabeformat FORMAT (texi [Vorgabe], texi-html, latex, html, docbook) verwenden" -#: musicxml2ly.py:1703 -#, python-format -msgid "Unable to convert chord type %s to lilypond." -msgstr "Kann Akkordtyp %s nicht nach lilypond umwandeln" +#: lilypond-book.py:135 +msgid "FORMAT" +msgstr "FORMAT" -#: musicxml2ly.py:1849 -#, python-format -msgid "drum %s type unknown, please add to instrument_drumtype_dict" -msgstr "Schlagzeug %s Typ unbekannt, bitte zum instrument_drumtype_dict hinzufügen" +#: lilypond-book.py:142 +msgid "add DIR to include path" +msgstr "VERZ zum Einfügepfad hinzufügen" -#: musicxml2ly.py:1853 -msgid "cannot find suitable event" -msgstr "passendes Ereignis kann nicht gefunden werden" +#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163 +#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160 +msgid "DIR" +msgstr "VERZ" -#: musicxml2ly.py:1994 -#, python-format -msgid "Negative skip %s (from position %s to %s)" -msgstr "Negativer Sprung (skip) %s (von Position %s bis %s)" +#: lilypond-book.py:148 +msgid "format Texinfo output so that Info will look for images of music in DIR" +msgstr "Formatiere Texinfo-Ausgabe so, dass Info nach Bildern und Noten im VERZ suchen kann" -#: musicxml2ly.py:2134 -#, python-format -msgid "Negative skip found: from %s to %s, difference is %s" -msgstr "Negativer Sprung (skip) gefunden: von %s bis %s, Differenz ist %s" +#: lilypond-book.py:155 +msgid "PAD" +msgstr "FÜLLUNG" -#: musicxml2ly.py:2205 -#, python-format -msgid "unexpected %s; expected %s or %s or %s" -msgstr "unerwartetes %s; %s oder %s oder %s erwartet" +#: lilypond-book.py:157 +msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" +msgstr "verschiebe linken Rand der Noten um an den Noten auszurichten, obwohl Taktnummer ungerade ist (in mm)" -#: musicxml2ly.py:2311 -msgid "Encountered closing slur, but no slur is open" -msgstr "Auf schließenden Legatobogen gestoßen, aber es wurde kein Bogen begonnen" +#: lilypond-book.py:162 +msgid "write lily-XXX files to DIR, link into --output dir" +msgstr "schreibe lily-XXX-Dateien nach VERZ, verlinke nach --output dir" -#: musicxml2ly.py:2314 -msgid "Cannot have two simultaneous (closing) slurs" -msgstr "Zwei gleichzeitige (schließende) Legatobögen sind nicht möglich" +#: lilypond-book.py:167 +msgid "Load the additional python PACKAGE (containing e.g. a custom output format)" +msgstr "Zusätzliches python PACKAGE laden (enthält z. B. ein angepasstes Ausgabeformat)" -#: musicxml2ly.py:2324 -msgid "Cannot have a slur inside another slur" -msgstr "Ein Legatobogen innerhalb eines anderen Legatobogens ist nicht möglich" +#: lilypond-book.py:168 +msgid "PACKAGE" +msgstr "PACKAGE" -#: musicxml2ly.py:2327 -msgid "Cannot have two simultaneous slurs" -msgstr "Zwei gleichzeitige Legatobögen sind nicht möglich" +#: lilypond-book.py:172 +msgid "write output to DIR" +msgstr "Ausgabe in DATEI schreiben" -#: musicxml2ly.py:2455 -#, python-format -msgid "cannot simultaneously have more than one mode: %s" -msgstr "Kann nicht gleichzeitig mehr als einen Modus haben: %s" +#: lilypond-book.py:177 +msgid "COMMAND" +msgstr "BEFEHL" -#: musicxml2ly.py:2553 -msgid "Converting to LilyPond expressions..." -msgstr "In LilyPond-Ausdrücke umwandeln..." +#: lilypond-book.py:178 +msgid "process ly_files using COMMAND FILE..." +msgstr "ly_files mit BEFEHL DATEI... verarbeiten" -#: musicxml2ly.py:2564 -msgid "musicxml2ly [OPTION]... FILE.xml" -msgstr "musicxml2ly [Optionen]... DATEI.xml" +#: lilypond-book.py:182 +msgid "Compile snippets in safe mode" +msgstr "Schnipsel im sicheren Modus kompilieren" -#: musicxml2ly.py:2566 +#: lilypond-book.py:188 +msgid "do not fail if no lilypond output is found" +msgstr "nicht abbrechen wenn keine lilypond-Ausgabe gefunden wird" + +#: lilypond-book.py:194 +msgid "do not fail if no PNG images are found for EPS files" +msgstr "nicht abbrechen wenn, keine PNG-Bilder für EPS-Dateien gefunden werden" + +#: lilypond-book.py:200 +msgid "write snippet output files with the same base name as their source file" +msgstr "schreibe Schnipsel-Ausgabedatei mit der gleichen Basis-Bezeichnung wie die Quelldatei" + +#: lilypond-book.py:220 msgid "" -"Convert MusicXML from FILE.xml to LilyPond input.\n" -"If the given filename is -, musicxml2ly reads from the command line.\n" +"run executable PROG instead of latex, or in\n" +"case --pdf option is set instead of pdflatex" msgstr "" -"Wandle MusicXML-Datei von DAT.xml nach LilyPond-Eingabe um.\n" -"Wenn der angegebene Dateiname - ist, list musicxml2ly von der Kommandozeile.\n" +"Führe die Datei PROG anstelle von latex aus, oder\n" +"im Falle dass die Option --pdf gesetzt ist, anstelle von pdflatex" + +#: lilypond-book.py:222 +msgid "PROG" +msgstr "PROG" + +#: lilypond-book.py:228 +msgid "create PDF files for use with PDFTeX" +msgstr "PDF-Dateien für Verwendung mit PDFTeX erzeugen" + +#: lilypond-book.py:419 +msgid "Writing snippets..." +msgstr "Auszüge werden geschrieben..." + +#: lilypond-book.py:425 +msgid "Processing..." +msgstr "Verarbeiten..." + +#: lilypond-book.py:431 +msgid "All snippets are up to date..." +msgstr "Alle Auszüge sind auf dem neuesten Stand..." + +#: lilypond-book.py:452 +#, python-format +msgid "cannot determine format for: %s" +msgstr "Format für %s kann nicht ermittelt werden" + +#: lilypond-book.py:461 +#, python-format +msgid "%s is up to date." +msgstr "%s ist aktuell." + +#: lilypond-book.py:475 +#, python-format +msgid "Writing `%s'..." +msgstr "»%s« wird geschrieben..." + +#: lilypond-book.py:537 +msgid "Output would overwrite input file; use --output." +msgstr "Ausgabe würde Eingabedatei überschreiben; verwenden Sie --output." + +#: lilypond-book.py:541 +#, python-format +msgid "Reading %s..." +msgstr "%s lesen..." + +#: lilypond-book.py:549 +msgid "Dissecting..." +msgstr "Zerlegen..." + +#: lilypond-book.py:561 +#, python-format +msgid "Compiling %s..." +msgstr "%s kompilieren..." + +#: lilypond-book.py:570 +#, python-format +msgid "Processing include: %s" +msgstr "Einfügung wird verarbeitet: %s" -#: musicxml2ly.py:2576 +#: lilypond-book.py:582 +#, python-format +msgid "Removing `%s'" +msgstr "»%s« wird gelöscht" + +#: convert-ly.py:44 msgid "" -"Copyright (c) 2005--2008 by\n" -" Han-Wen Nienhuys ,\n" -" Jan Nieuwenhuizen and\n" -" Reinhold Kainhofer \n" +"Update LilyPond input to newer version. By default, update from the\n" +"version taken from the \\version command, to the current LilyPond version." msgstr "" -"Copyright (c) 2005--2008\n" -"····Han-Wen·Nienhuys·,\n" -"····Jan·Nieuwenhuizen··and\n" -"····Reinhold·Kainhofer·\n" +"LilyPond-Eingabe auf neuere Version bringen. Standardmäßig wird von der\n" +"Version vom Kommando \\version zur aktuellen LilyPond-Version gegangen." -#: musicxml2ly.py:2601 -msgid "use lxml.etree; uses less memory and cpu time" -msgstr "lxml.etree verwenden; benötigt weniger Speicher und Prozessorzeit" +#: convert-ly.py:102 convert-ly.py:135 +msgid "VERSION" +msgstr "VERSION" -#: musicxml2ly.py:2607 -msgid "input file is a zip-compressed MusicXML file" -msgstr "Eingabedatei ist eine zip-komprimierte MusicXML-Datei" +#: convert-ly.py:104 +msgid "start from VERSION [default: \\version found in file]" +msgstr "bei VERSION anfangen [Standard: \\version in Datei gefunden]" -#: musicxml2ly.py:2613 -msgid "convert pitches in relative mode (default)" -msgstr "Tonhöhen im relativen Modus konvertieren (Standard)" +#: convert-ly.py:107 +msgid "edit in place" +msgstr "vor Ort ändern" -#: musicxml2ly.py:2618 -msgid "convert pitches in absolute mode" -msgstr "Tonhöhen im absoluten Modus konvertieren" +#: convert-ly.py:111 +msgid "do not add \\version command if missing" +msgstr "keinen \\version-Befehl hinzufügen, falls es fehlt" -#: musicxml2ly.py:2621 -msgid "LANG" -msgstr "SPRA" +#: convert-ly.py:117 +#, python-format +msgid "force updating \\version number to %s" +msgstr "erzwinge Aktualisierung von \\version nach %s" -#: musicxml2ly.py:2623 -msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly" -msgstr "benutze eine andere Sprach-Datei 'SPRA.ly' und entsprechende Notenbezeichnungen, etwa 'deutsch' für deutsch.ly" +#: convert-ly.py:123 +msgid "only update \\version number if file is modified" +msgstr "Aktualisierung von \\version nur, wenn die Datei verändert wurde" -#: musicxml2ly.py:2629 -msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." -msgstr "Richtungen (^, _ oder -) for Artikulationen, Dynamik usw. nicht konvertieren" +#: convert-ly.py:129 +#, python-format +msgid "show rules [default: -f 0, -t %s]" +msgstr "Regeln anzeigen [Standard: -f 0, -t %s]" -#: musicxml2ly.py:2635 -msgid "do not convert beaming information, use lilypond's automatic beaming instead" -msgstr "Balkeninformation nicht konvertieren, benutze die automatischen Balken von lilypond statt dessen" +#: convert-ly.py:134 +#, python-format +msgid "convert to VERSION [default: %s]" +msgstr "zu VERSION konvertieren [Standard: %s]" -#: musicxml2ly.py:2643 -msgid "set output filename to FILE, stdout if -" -msgstr "Ausgabedateiname auf DATEI setzen, stout if -" +#: convert-ly.py:184 +msgid "Applying conversion: " +msgstr "Anwenden der Umwandlung: " -#: musicxml2ly.py:2726 -#, python-format -msgid "unknown part in part-list: %s" -msgstr "unbekannte Stimme in part-list (Stimmen-Liste): %s" +#: convert-ly.py:197 +msgid "Error while converting" +msgstr "Fehler beim Umwandeln" -#: musicxml2ly.py:2788 -msgid "Input is compressed, extracting raw MusicXML data from stdin" -msgstr "Eingabedatei %s ist komprimiert, entpacke die MusicXML-Daten von stdin" +#: convert-ly.py:199 +msgid "Stopping at last successful rule" +msgstr "Abbruch bei letzter erfolgreicher Regel" -#: musicxml2ly.py:2791 +#: convert-ly.py:224 #, python-format -msgid "Input file %s is compressed, extracting raw MusicXML data" -msgstr "Eingabedatei %s ist komprimiert, entpacke die MusicXML-Daten" +msgid "Processing `%s'... " +msgstr "»%s« wird verarbeitet..." -#: musicxml2ly.py:2821 -msgid "Reading MusicXML from Standard input ..." -msgstr "MusicXML von standard input lesen..." +#: convert-ly.py:332 +#, python-format +msgid "%s: Unable to open file" +msgstr "%s: Konnte Datei nicht öffnen" -#: musicxml2ly.py:2823 +#: convert-ly.py:339 #, python-format -msgid "Reading MusicXML from %s ..." -msgstr "MusicXML aus %s lesen..." +msgid "%s: Unable to determine version. Skipping" +msgstr "Version für »%s« kann nicht erkannt werden. Wird übersprungen" -#: musicxml2ly.py:2856 +#: convert-ly.py:344 #, python-format -msgid "Output to `%s'" -msgstr "Ausgabe nach »%s«" +msgid "" +"%s: Invalid version string `%s' \n" +"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'" +msgstr "" +"%s: Ungültige Versionsangabe `%s' \n" +"Gültige Versionsangaben bestehen aus drei Zahlen, durch Punkte getrennt; etwa `2.8.12'" -#: musicxml2ly.py:2922 +#: etf2ly.py:1195 #, python-format -msgid "Unable to find input file %s" -msgstr "Eingabedatei kann nicht gefunden werden %s" +msgid "%s [OPTION]... ETF-FILE" +msgstr "%s [OPTIONEN]... ETF-DATEI" + +#: etf2ly.py:1196 +msgid "" +"Enigma Transport Format is a format used by Coda Music Technology's\n" +"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" +msgstr "" +"Enigma Transport-Format ist ein von Coda Music Technology's Finale\n" +"verwendetes Format. etf2ly wandelt eine Teilmenge von ETF in\n" +"eine von Lilypond verwendbare Datei um.\n" + +#: website_post.py:123 +msgid "English" +msgstr "Englisch" + +#: website_post.py:126 +msgid "Other languages" +msgstr "Andere Sprachen" -#: getopt-long.cc:140 +#: warn.cc:59 +#, c-format +msgid "success: %s" +msgstr "Erfolg: %s" + +#: warn.cc:86 grob.cc:617 input.cc:97 +#, c-format +msgid "programming error: %s" +msgstr "Programmierfehler: %s" + +#: warn.cc:87 input.cc:98 +msgid "continuing, cross fingers" +msgstr "Fortsetzung, die Daumen drücken" + +#: getopt-long.cc:153 #, c-format msgid "option `%s' requires an argument" msgstr "Option »%s« benötigt ein Argument" -#: getopt-long.cc:144 +#: getopt-long.cc:157 #, c-format msgid "option `%s' does not allow an argument" msgstr "Option »%s« erlaubt kein Argument" -#: getopt-long.cc:148 +#: getopt-long.cc:161 #, c-format msgid "unrecognized option: `%s'" msgstr "unerkannte Option: »%s«" -#: getopt-long.cc:154 +#: getopt-long.cc:167 #, c-format msgid "invalid argument `%s' to option `%s'" msgstr "ungültiges Argument »%s« für Option »%s«" -#: warn.cc:68 grob.cc:566 input.cc:82 -#, c-format -msgid "programming error: %s" -msgstr "Programmierfehler: %s" +#: grob.cc:286 +msgid "Infinity or NaN encountered" +msgstr "Unendlichkeit oder NaN angetroffen" -#: warn.cc:69 input.cc:83 -msgid "continuing, cross fingers" -msgstr "Fortsetzung, die Daumen drücken" +#: vaticana-ligature.cc:95 +msgid "flexa-height undefined; assuming 0" +msgstr "flexa-Höhe nicht definiert: 0 angenommen" -#: accidental-engraver.cc:298 -#, c-format -msgid "accidental typesetting list must begin with context-name: %s" -msgstr "Versetzungszeichensatzliste muss mit Kontextnamen beginnen: %s" +#: vaticana-ligature.cc:100 +msgid "ascending vaticana style flexa" +msgstr "aufsteigender Vaticana-Stil flexa" -#: accidental-engraver.cc:328 -#, c-format -msgid "procedure or context-name expected for accidental rule, found %s" -msgstr "Prozedur oder Kontextname für Versetzungszeichenregel erwartet, %s gefunden" +#: vaticana-ligature.cc:188 +msgid "Vaticana_ligature: zero join (delta_pitch == 0)" +msgstr "Vaticana_ligature: nichts zusammengefügt (delta_pitch == 0)" -#: accidental.cc:187 -#, c-format -msgid "Could not find glyph-name for alteration %s" -msgstr "Glyph-Name für Versetzungszeichen %s konnte nicht gefunden werden" +#: parse-scm.cc:101 +msgid "GUILE signaled an error for the expression beginning here" +msgstr "GUILE signalisierte einen Fehler für den hier beginnenden Ausdruck" -#: accidental.cc:202 -msgid "natural alteration glyph not found" -msgstr "Auflösungszeichen konnte nicht gefunden werden" +#: rest-collision-engraver.cc:70 +msgid "rhythmic head is not part of a rhythmic column" +msgstr "der rhythmische Kopf gehört nicht zu einer rhythmischen Kolumne" + +#. if we get to here, just put everything on one line +#: constrained-breaking.cc:189 constrained-breaking.cc:207 +msgid "cannot find line breaking that satisfies constraints" +msgstr "es kann kein Zeilenumbruch gefunden werden, der die Bedingungen erfüllen" + +#: horizontal-bracket-engraver.cc:78 +msgid "do not have that many brackets" +msgstr "so viele Klammern gibt es nicht" -#: align-interface.cc:305 -msgid "tried to get a translation for something that is no child of mine" -msgstr "Versuch, eine Übersetzung für etwas zu finden, das nicht mein Kind ist" +#: horizontal-bracket-engraver.cc:87 +msgid "conflicting note group events" +msgstr "in Konflikt stehende Notengruppenereignisse" -#: all-font-metrics.cc:143 +#: hyphen-engraver.cc:104 +msgid "removing unterminated hyphen" +msgstr "unbegrenzter Bindestrich wird entfernt" + +#: hyphen-engraver.cc:118 +msgid "unterminated hyphen; removing" +msgstr "unbegrenzter Bindestrich; entfernt" + +#: pango-font.cc:187 open-type-font.cc:319 #, c-format -msgid "cannot find font: `%s'" -msgstr "Schriftart kann nicht gefunden werden: »%s«" +msgid "FT_Get_Glyph_Name () error: %s" +msgstr "FT_Get_Glyph_Name() Fehler: %s" -#: apply-context-iterator.cc:31 -msgid "\\applycontext argument is not a procedure" -msgstr "Argument für \\applycontext ist keine Prozedur" +#: pango-font.cc:204 +#, c-format +msgid "" +"Glyph has no name, but font supports glyph naming.\n" +"Skipping glyph U+%0X, file %s" +msgstr "" +"Glyph hat keinen Namen, aber Zeichensatz unterstützt Glyphnamen.\n" +"Glyph U+%0X wird übersprungen, Datei %s" -#: auto-change-iterator.cc:63 change-iterator.cc:61 +#: pango-font.cc:241 #, c-format -msgid "cannot change, already in translator: %s" -msgstr "kann nicht geändert werden, bereits im Übersetzer: %s" +msgid "no PostScript font name for font `%s'" +msgstr "Kein PostScript-Schriftartname für Schriftart: »%s«" -#: axis-group-engraver.cc:78 -msgid "Axis_group_engraver: vertical group already has a parent" -msgstr "Axis_group_engraver: vertikale Gruppe hat bereits einen Vater" +#: pango-font.cc:290 +msgid "FreeType face has no PostScript font name" +msgstr "FreeType-Schriftart hat keinen PostScript-Schriftartnamen" -#: axis-group-engraver.cc:79 -msgid "are there two Axis_group_engravers?" -msgstr "gibt es zwei Axis_group_engravers?" +#: midi-item.cc:92 +#, c-format +msgid "no such MIDI instrument: `%s'" +msgstr "kein MIDI-Instrument: `%s'" -#: axis-group-engraver.cc:80 -msgid "removing this vertical group" -msgstr "Entfernen dieser vertikalen Gruppe" +#: note-heads-engraver.cc:76 +msgid "NoteEvent without pitch" +msgstr "NoteEvent ohne Tonhöhe" -#: axis-group-interface.cc:532 -msgid "an outside-staff object should have a direction, defaulting to up" -msgstr "Ein Objekt außerhalb der Notenzeile sollte eine Richtung haben, Vorgabe ist »nach oben«" +#: rest.cc:159 +#, c-format +msgid "rest `%s' not found" +msgstr "Pause »%s« nicht gefunden" -#: bar-check-iterator.cc:73 +#: spaceable-grob.cc:94 #, c-format -msgid "barcheck failed at: %s" -msgstr "Taktüberprüfung gescheitert bei: %s" +msgid "No spring between column %d and next one" +msgstr "Kein (dynamischer) Abstand zwischen Spalte %d und Nachfolger" -#: beam-engraver.cc:126 +#: beam-engraver.cc:147 msgid "already have a beam" msgstr "Balken bereits vorhanden" -#: beam-engraver.cc:202 +#: beam-engraver.cc:230 msgid "unterminated beam" msgstr "unbegrenzter Balken" -#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138 +#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150 msgid "stem must have Rhythmic structure" msgstr "Notenhals muss rhythmische Struktur aufweisen" -#: beam-engraver.cc:252 +#: beam-engraver.cc:274 msgid "stem does not fit in beam" msgstr "Notenhals passt nicht in Balken" -#: beam-engraver.cc:253 +#: beam-engraver.cc:275 msgid "beam was started here" msgstr "Balken wurde hier begonnen" -#: beam-quanting.cc:307 -msgid "no feasible beam position" -msgstr "Keine praktikable Balkenposition" +#: music-iterator.cc:182 +msgid "Sending non-event to context" +msgstr "Nicht-Ereignis wird an Kontext gesendet" -#: beam.cc:160 -msgid "removing beam with no stems" -msgstr "Balken ohne Notenhälse wird entfernt" +#: context.cc:149 +#, c-format +msgid "cannot find or create new `%s'" +msgstr "ein neues »%s« kann weder gefunden noch erzeugt werden" -#: beam.cc:1078 -msgid "no viable initial configuration found: may not find good beam slope" -msgstr "Keine funktionsfähige Anfangskonfiguration gefunden: Es kann evtl. keine optimale Balkenneigung gefunden werden" +#: context.cc:207 +#, c-format +msgid "cannot find or create `%s' called `%s'" +msgstr "»%s« (»%s« genannt) kann weder gefunden noch erzeugt werden" -#: break-alignment-interface.cc:195 +#: context.cc:269 #, c-format -msgid "No spacing entry from %s to `%s'" -msgstr "Kein Abstandeintrag von %s nach »%s«" +msgid "Invalid CreateContext event: Cannot create %s context" +msgstr "Ungültiges CreateContext-Ereignis: Kontext %s kann nicht erzeugt werden" -#: change-iterator.cc:23 +#: context.cc:400 #, c-format -msgid "cannot change `%s' to `%s'" -msgstr "»%s« kann nicht in »%s« geändert werden" +msgid "cannot find or create: `%s'" +msgstr "»%s« kann weder gefunden noch erzeugt werden" -#. FIXME: constant error message. -#: change-iterator.cc:82 -msgid "cannot find context to switch to" -msgstr "es kann kein Kontext zum Umschalten gefunden werden" +#: dispatcher.cc:82 +msgid "Event class should be a symbol" +msgstr "Ereignisklasse sollte ein Symbol sein" -#. We could change the current translator's id, but that would make -#. errors hard to catch. -#. -#. last->translator_id_string () = get_change -#. ()->change_to_id_string (); -#: change-iterator.cc:91 +#: dispatcher.cc:89 #, c-format -msgid "not changing to same context type: %s" -msgstr "kein Umschalten zum gleichen Kontexttypen: %s" +msgid "Unknown event class %s" +msgstr "Unbekannte Ereignisklasse »%s«" + +#: paper-column-engraver.cc:245 +msgid "forced break was overridden by some other event, should you be using bar checks?" +msgstr "erzwungener Umbruch war durch anderes Ereignis aufgehoben, sollten Taktüberprüfungen vorgenommen werden?" + +#: tie-engraver.cc:116 +msgid "unterminated tie" +msgstr "unbegrenzter Bindebogen" + +#: tie-engraver.cc:312 +msgid "lonely tie" +msgstr "einsamer Bindebogen" + +#: dynamic-engraver.cc:197 +msgid "cannot find start of (de)crescendo" +msgstr "Anfang des (De-) Crescendos kann nicht gefunden werden" + +#: dynamic-engraver.cc:206 +msgid "already have a decrescendo" +msgstr "Decrescendo bereits vorhanden" + +#: dynamic-engraver.cc:208 +msgid "already have a crescendo" +msgstr "Crescendo bereits vorhanden" + +#: dynamic-engraver.cc:211 +msgid "cresc starts here" +msgstr "Crescendo beginnt hier" + +#: dynamic-engraver.cc:339 +msgid "unterminated (de)crescendo" +msgstr "unbegrenztes (De-) Crescendo" + +#: paper-score.cc:122 minimal-page-breaking.cc:40 +msgid "Calculating line breaks..." +msgstr "Zeilenumbrüche werden berechnet..." + +#: paper-score.cc:135 +#, c-format +msgid "Element count %d (spanners %d) " +msgstr "Elementanzahl: %d (Klammern: %d)" + +#: paper-score.cc:139 +msgid "Preprocessing graphical objects..." +msgstr "Vorverarbeitung der grafischen Elemente..." + +#: paper-score.cc:163 optimal-page-breaking.cc:208 +#: page-turn-page-breaking.cc:248 +msgid "Drawing systems..." +msgstr "Systeme erstellen..." + +#: mensural-ligature-engraver.cc:96 +msgid "ligature with less than 2 heads -> skipping" +msgstr "Ligatur mit weniger als 2 Notenköpfen -> überspringen" + +#: mensural-ligature-engraver.cc:123 +msgid "cannot determine pitch of ligature primitive -> skipping" +msgstr "Tonhöhe des Ligaturelements kann nicht ermittelt werden -> überspringen" + +#: mensural-ligature-engraver.cc:137 +msgid "single note ligature - skipping" +msgstr "Ligatur mit einer einzelnen Note -> überspringen" + +#: mensural-ligature-engraver.cc:148 +msgid "prime interval within ligature -> skipping" +msgstr "Prime in der Ligatur -> überspringen" + +#: mensural-ligature-engraver.cc:159 +msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" +msgstr "Mensuralligatur: Dauer weder Mx, L, B noch S -> überspringen" + +#: mensural-ligature-engraver.cc:202 +msgid "semibrevis must be followed by another one -> skipping" +msgstr "Semibrevis muss von einem weiteren gefolgt werden -> überspringen" + +#: mensural-ligature-engraver.cc:212 +msgid "" +"semibreves can only appear at the beginning of a ligature,\n" +"and there may be only zero or two of them" +msgstr "" +"Semibrevis kann nur am Anfang einer Ligatur auftreten,\n" +"und es können nur null oder zwei davon auftreten" + +#: mensural-ligature-engraver.cc:232 +msgid "" +"invalid ligatura ending:\n" +"when the last note is a descending brevis,\n" +"the penultimate note must be another one,\n" +"or the ligatura must be LB or SSB" +msgstr "" +"ungültiges Ende der Ligatur:\n" +"Wenn die letzte Note eine absteigende Brevis ist,\n" +"muss die vorletzte Note eine weitere sein,\n" +"oder die Ligatur muss LB oder SSB sein" + +#: mensural-ligature-engraver.cc:386 +msgid "unexpected case fall-through" +msgstr "unerwarteter case-Ausgang" + +#: piano-pedal-engraver.cc:298 +#, c-format +msgid "expect 3 strings for piano pedals, found: %ld" +msgstr "3 Textketten für Piano-Pedal erwartet, %ld gefunden" + +#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324 +#: piano-pedal-performer.cc:104 +#, c-format +msgid "cannot find start of piano pedal: `%s'" +msgstr "es kann kein Anfang für Piano-Pedal gefunden werden: »%s«" + +#: piano-pedal-engraver.cc:359 +#, c-format +msgid "cannot find start of piano pedal bracket: `%s'" +msgstr "es kann kein Anfang für Piano-Pedal-Klammer gefunden werden: »%s«" + +#: input.cc:131 source-file.cc:179 source-file.cc:194 +msgid "position unknown" +msgstr "Position unbekannt" + +#: paper-outputter-scheme.cc:41 +#, c-format +msgid "Layout output to `%s'..." +msgstr "Layout nach »%s« ausgeben..." + +#: general-scheme.cc:306 +msgid "infinity or NaN encountered while converting Real number" +msgstr "Unendlichkeit oder NaN bei Umwandlung einer Realen Zahl gefunden" + +#: general-scheme.cc:307 +msgid "setting to zero" +msgstr "auf Null gesetzt" + +#: general-scheme.cc:543 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Unendlich oder NaN in Ausgabe gefunden. Wird durch 0.0 ersetzt" + +#: music.cc:151 +#, c-format +msgid "octave check failed; expected \"%s\", found: \"%s\"" +msgstr "Oktavenüberprüfung gescheitert; »%s« erwartet, »%s« gefunden" + +#: music.cc:219 +msgid "(normalized pitch)" +msgstr "(normalisierte Tonhöhe)" + +#: music.cc:223 +#, c-format +msgid "Transposing %s by %s makes alteration larger than double" +msgstr "Transponieren von %s um %s erzeugt mehr als ein Doppel-Vorzeichen" + +#: translator-ctors.cc:65 +#, c-format +msgid "unknown translator: `%s'" +msgstr "unbekannter Übersetzer: »%s«" + +#: partial-iterator.cc:45 +msgid "trying to use \\partial after the start of a piece" +msgstr "versuche, \\partial nach dem Beginn eines Stückes einzusetzen" + +#: new-fingering-engraver.cc:106 +msgid "cannot add text scripts to individual note heads" +msgstr "es kann kein Text zu einzelnen Notenköpfen hinzugefügt werden" + +#: new-fingering-engraver.cc:250 +msgid "no placement found for fingerings" +msgstr "Keine Platzierung für Fingersatz gefunden" + +#: new-fingering-engraver.cc:251 +msgid "placing below" +msgstr "Platzierung darunter" + +#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72 +msgid "cannot find start of ligature" +msgstr "Anfang der Ligatur kann nicht gefunden werden" + +#: ligature-engraver.cc:109 +msgid "no right bound" +msgstr "keine rechte Begrenzung" + +#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85 +msgid "already have a ligature" +msgstr "habe bereits eine Ligatur" -#. FIXME: uncomprehensable message -#: change-iterator.cc:95 -msgid "none of these in my family" -msgstr "keiner davon befindet sich in meiner Familie" +#: ligature-engraver.cc:140 +msgid "no left bound" +msgstr "keine linke Begrenzung" -#: chord-tremolo-engraver.cc:88 -msgid "No tremolo to end" -msgstr "Kein Tremolo zu beenden" +#: ligature-engraver.cc:185 +msgid "unterminated ligature" +msgstr "unbegrenzte Ligatur" -#: chord-tremolo-engraver.cc:110 -msgid "unterminated chord tremolo" -msgstr "unbegrenztes Akkord-Tremolo" +#: ligature-engraver.cc:214 +msgid "ignoring rest: ligature may not contain rest" +msgstr "Pause wird ignoriert: Ligatur darf keine Pause enthalten" -#: chord-tremolo-iterator.cc:35 -#, c-format -msgid "expect 2 elements for chord tremolo, found %d" -msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden" +#: ligature-engraver.cc:215 +msgid "ligature was started here" +msgstr "Ligatur wurde hier begonnen" -#: clef.cc:54 +#: auto-change-iterator.cc:74 change-iterator.cc:72 #, c-format -msgid "clef `%s' not found" -msgstr "Schlüssel »%s« nicht gefunden" +msgid "cannot change, already in translator: %s" +msgstr "kann nicht geändert werden, bereits im Übersetzer: %s" -#: cluster.cc:110 +#: accidental-engraver.cc:180 #, c-format -msgid "unknown cluster style `%s'" -msgstr "unbekannter Clusterstil: »%s«" +msgid "accidental typesetting list must begin with context-name: %s" +msgstr "Versetzungszeichensatzliste muss mit Kontextnamen beginnen: %s" -#: cluster.cc:147 -msgid "junking empty cluster" -msgstr "Leeres Cluster wird verworfen" +#: accidental-engraver.cc:210 +#, c-format +msgid "procedure or context-name expected for accidental rule, found %s" +msgstr "Prozedur oder Kontextname für Versetzungszeichenregel erwartet, %s gefunden" -#: coherent-ligature-engraver.cc:100 +#: ttf.cc:481 ttf.cc:530 #, c-format -msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" -msgstr "Coherent_ligature_engraver: setze »spacing-increment=0.01«: ptr=%ul" +msgid "font index %d too large for font `%s', using index 0" +msgstr "Font-Intex %d zu groß für Font »%s«, benutze Index 0" -#. if we get to here, just put everything on one line -#: constrained-breaking.cc:176 constrained-breaking.cc:193 -msgid "cannot find line breaking that satisfies constraints" -msgstr "es kann kein Zeilenumbruch gefunden werden, der die Bedingungen erfüllen" +#: ttf.cc:513 ttf.cc:565 +msgid "font index must be non-negative, using index 0" +msgstr "font-index muss nicht-negativ sein, benutze Index 0" -#: context-def.cc:130 +#: break-alignment-interface.cc:206 #, c-format -msgid "program has no such type: `%s'" -msgstr "Das Programm hat keinen solchen Typen: »%s«" +msgid "No spacing entry from %s to `%s'" +msgstr "Kein Abstandeintrag von %s nach »%s«" -#: context-property.cc:32 -msgid "need symbol arguments for \\override and \\revert" -msgstr "Symbol-Argumente für \\override und \\revert benötigt" +#: minimal-page-breaking.cc:44 +msgid "Calculating page breaks..." +msgstr "Zeilenumbrüche werden berechnet..." -#: context.cc:139 +#: vaticana-ligature-engraver.cc:400 #, c-format -msgid "cannot find or create new `%s'" -msgstr "ein neues »%s« kann weder gefunden noch erzeugt werden" +msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style" +msgstr "Präfix(e) »%s« dieses Kopfes gemäß den Einschränkungen des ausgewählten Ligaturstils ignoriert" -#: context.cc:197 +#: vaticana-ligature-engraver.cc:736 #, c-format -msgid "cannot find or create `%s' called `%s'" -msgstr "»%s« (»%s« genannt) kann weder gefunden noch erzeugt werden" +msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" +msgstr "Vaticana_ligature_engraver: setzen »spacing-increment = %f«: ptr=%ul" -#: context.cc:259 +#: paper-book.cc:214 #, c-format -msgid "Invalid CreateContext event: Cannot create %s context" -msgstr "Ungültiges CreateContext-Ereignis: Kontext %s kann nicht erzeugt werden" +msgid "program option -dprint-pages not supported by backend `%s'" +msgstr "Programmoption -dprint-pages nicht von Backend »%s« unterstützt" -#: context.cc:390 +#: paper-book.cc:233 #, c-format -msgid "cannot find or create: `%s'" -msgstr "»%s« kann weder gefunden noch erzeugt werden" +msgid "program option -dpreview not supported by backend `%s'" +msgstr "Programmoption -dpreview nicht von »%s« unterstützt" -#: custos.cc:77 -#, c-format -msgid "custos `%s' not found" -msgstr "Custos »%s« nicht gefunden" +#: output-def.cc:235 +msgid "margins do not fit with line-width, setting default values" +msgstr "Ränder passen nicht zur Zeilenbreite, setze Standardwerte" -#: dispatcher.cc:71 -msgid "Event class should be a symbol" -msgstr "Ereignisklasse sollte ein Symbol sein" +#: output-def.cc:242 +msgid "systems run off the page due to improper paper settings, setting default values" +msgstr "Systeme befinden sich außerhalb der Seite wegen falschen paper-Einstellungen, setze Standardwerte ein" -#: dispatcher.cc:78 +#: score-engraver.cc:78 #, c-format -msgid "Unknown event class %s" -msgstr "Unbekannte Ereignisklasse »%s«" +msgid "cannot find `%s'" +msgstr "»%s« kann nicht gefunden werden" + +#: score-engraver.cc:80 +msgid "Music font has not been installed properly." +msgstr "Musik-Schriftart wurde nicht ordnungsgemäß installiert." -#: dots.cc:37 +#: score-engraver.cc:82 #, c-format -msgid "dot `%s' not found" -msgstr "Punkt »%s« nicht gefunden" +msgid "Search path `%s'" +msgstr "Suchpfad »%s«" -#: dynamic-engraver.cc:186 -msgid "cannot find start of (de)crescendo" -msgstr "Anfang des (De-) Crescendos kann nicht gefunden werden" +#: score-engraver.cc:84 +msgid "Aborting" +msgstr "Abbruch" -#: dynamic-engraver.cc:195 -msgid "already have a decrescendo" -msgstr "Decrescendo bereits vorhanden" +#: note-collision.cc:497 +msgid "ignoring too many clashing note columns" +msgstr "zu viele kollidierende Notenspalten werden ignoriert" -#: dynamic-engraver.cc:197 -msgid "already have a crescendo" -msgstr "Crescendo bereits vorhanden" +#. fixme: be more verbose. +#: volta-engraver.cc:111 +msgid "cannot end volta spanner" +msgstr "Volta-Klammer kann nicht beendet werden" -#: dynamic-engraver.cc:200 -msgid "cresc starts here" -msgstr "Crescendo beginnt hier" +#: volta-engraver.cc:121 +msgid "already have a volta spanner, ending that one prematurely" +msgstr "Wiederholungsklammer bereits vorhanden, wird vorzeitig beendet" -#: dynamic-engraver.cc:328 -msgid "unterminated (de)crescendo" -msgstr "unbegrenztes (De-) Crescendo" +#: volta-engraver.cc:125 +msgid "also already have an ended spanner" +msgstr "endende Textklammer auch bereits vorhanden" -#: extender-engraver.cc:142 extender-engraver.cc:151 -msgid "unterminated extender" -msgstr "unbegrenzter Textunterstrich" +#: volta-engraver.cc:126 +msgid "giving up" +msgstr "aufgeben" -#: font-config-scheme.cc:140 font-config.cc:57 -#, c-format -msgid "failed adding font directory: %s" -msgstr "Schriftartverzeichnis konnte nicht hinzugefügt werden: %s" +#: page-layout-problem.cc:322 +msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed" +msgstr "Noten passen nicht auf die Seite: ragged-spacing wurde verlangt, aber die Seite wurde komprimiert" -#: font-config-scheme.cc:142 font-config.cc:59 +#: page-layout-problem.cc:325 #, c-format -msgid "adding font directory: %s" -msgstr "Schriftartverzeichnis wird hinzugefügt: %s" +msgid "cannot fit music on page: overflow is %f" +msgstr "Noten passen nicht auf die Seite: Überhang ist %f" -#: font-config-scheme.cc:156 -#, c-format -msgid "failed adding font file: %s" -msgstr "Schriftartdatei konnte nicht hinzugefügt werden: %s" +#: page-layout-problem.cc:327 +msgid "compressing music to fit" +msgstr "Noten werden komprimiert um zu passen" -#: font-config-scheme.cc:158 -#, c-format -msgid "adding font file: %s" -msgstr "Schriftartdatei wird hinzugefügt: %s" +#: page-layout-problem.cc:765 +msgid "staff-affinities should only decrease" +msgstr "staff-affinities sollten nur abnehmen" -#: font-config.cc:28 -msgid "Initializing FontConfig..." -msgstr "FontConfig wird initialisiert..." +#: apply-context-iterator.cc:42 +msgid "\\applycontext argument is not a procedure" +msgstr "Argument für \\applycontext ist keine Prozedur" + +#. FIXME: constant error message. +#: mark-engraver.cc:157 +msgid "rehearsalMark must have integer value" +msgstr "rehearsalMark muss Ganzzahlwert haben" + +#: mark-engraver.cc:163 +msgid "mark label must be a markup object" +msgstr "Marke muss ein Textbeschriftungsobjekt sein" -#: font-config.cc:44 +#: new-dynamic-engraver.cc:142 #, c-format -msgid "Rebuilding FontConfig cache %s, this may take a while..." -msgstr "FontConfig-Cache %s wird erneuert. Dies kann eine Weile dauern..." +msgid "" +"unknown crescendo style: %s\n" +"defaulting to hairpin." +msgstr "" +"unbekannter crescendo-Stil: %s\n" +"wird als spitze Klammer gesetzt." -#: font-config.cc:63 -msgid "Building font database." -msgstr "Schriftartendatenbank aufbauen..." +#: new-dynamic-engraver.cc:200 +#, c-format +msgid "unterminated %s" +msgstr "unbegrenzt: »%s«" -#: general-scheme.cc:202 -msgid "infinity or NaN encountered while converting Real number" -msgstr "Unendlichkeit oder NaN bei Umwandlung einer Realen Zahl gefunden" +#: stem-engraver.cc:103 +msgid "tremolo duration is too long" +msgstr "Tremolodauer ist zu lang" -#: general-scheme.cc:203 -msgid "setting to zero" -msgstr "auf Null gesetzt" +#. FIXME: +#: stem-engraver.cc:140 +#, c-format +msgid "adding note head to incompatible stem (type = %d)" +msgstr "Notenkopf wird zu inkompatiblem Hals (Typ = %d) hinzugefügt" -#: general-scheme.cc:422 output-ps.scm:63 -msgid "Found infinity or nan in output. Substituting 0.0" -msgstr "Unendlich oder NaN in Ausgabe gefunden. Wird durch 0.0 ersetzt" +#: stem-engraver.cc:142 +msgid "maybe input should specify polyphonic voices" +msgstr "vielleicht sollte die Eingabe mehrere Stimmen erstellen" -#: glissando-engraver.cc:94 -msgid "unterminated glissando" -msgstr "unbegrenztes Glissando." +#: lily-lexer.cc:264 +msgid "include files are not allowed in safe mode" +msgstr "eingefügte Dateien sind im abgesicherten Modus nicht erlaubt" -#: global-context-scheme.cc:85 global-context-scheme.cc:103 -msgid "no music found in score" -msgstr "keine Musik in der Partitur gefunden" +#: lily-lexer.cc:291 +#, c-format +msgid "identifier name is a keyword: `%s'" +msgstr "Bezeichnername ist ein Schlüsselwort: »%s«" -#: global-context-scheme.cc:93 -msgid "Interpreting music... " -msgstr "Interpretation der Musik..." +#: lily-lexer.cc:312 +#, c-format +msgid "error at EOF: %s" +msgstr "Fehler am Dateiende (EOF): %s" -#: global-context-scheme.cc:116 +#: lyric-combine-music-iterator.cc:337 #, c-format -msgid "elapsed time: %.2f seconds" -msgstr "verstrichene Zeit: %.2f Sekunden" +msgid "cannot find Voice `%s'" +msgstr "Stimme kann nicht gefunden werden: »%s«" -#: gregorian-ligature-engraver.cc:59 +#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109 #, c-format -msgid "\\%s ignored" -msgstr "\\%s ignoriert" +msgid "cannot find file: `%s'" +msgstr "Datei »%s« kann nicht gefunden werden" -#: gregorian-ligature-engraver.cc:64 +#: includable-lexer.cc:73 lily-parser-scheme.cc:100 #, c-format -msgid "implied \\%s added" -msgstr "implizites \\%s hinzugefügt" +msgid "(search path: `%s')" +msgstr "(Suchpfad: »%s«)" -#. ligature may not start with 2nd head of pes or flexa -#: gregorian-ligature-engraver.cc:213 -msgid "cannot apply `\\~' on first head of ligature" -msgstr "»\\~« kann nicht auf erste Note der Ligatur angewendet werden" +#: note-column.cc:135 +msgid "cannot have note heads and rests together on a stem" +msgstr "Notenköpfe und Pausen können nicht zusammen an einem Hals auftreten" -#. (pitch == prev_pitch) -#: gregorian-ligature-engraver.cc:225 -msgid "cannot apply `\\~' on heads with identical pitch" -msgstr "»\\~« kann nicht auf Noten mit gleicher Tonhöhe angewendet werden" +#: beam.cc:180 +msgid "removing beam with no stems" +msgstr "Balken ohne Notenhälse wird entfernt" -#: grob-interface.cc:57 -#, c-format -msgid "Unknown interface `%s'" -msgstr "Unbekannte Schnittstelle »%s«" +#. We are completely screwed. +#: beam.cc:1274 +msgid "no viable initial configuration found: may not find good beam slope" +msgstr "Keine funktionsfähige Anfangskonfiguration gefunden: Es kann evtl. keine optimale Balkenneigung gefunden werden" -#: grob-interface.cc:68 +#: slur-engraver.cc:93 #, c-format -msgid "Grob `%s' has no interface for property `%s'" -msgstr "Grob »%s« hat keine Schnittstelle für Eigenschaft »%s«" +msgid "direction of %s invalid: %d" +msgstr "Richtung von %s ungültig: %d" -#: grob-property.cc:34 -#, c-format -msgid "%d: %s" -msgstr "%d: %s" +#: slur-engraver.cc:162 +msgid "unterminated slur" +msgstr "unbegrenzter Legatobogen" -#: grob-property.cc:173 +#: slur-engraver.cc:174 +msgid "cannot end slur" +msgstr "Legatobogen kann nicht beendet werden" + +#: font-config.cc:40 +msgid "Initializing FontConfig..." +msgstr "FontConfig wird initialisiert..." + +#: font-config.cc:55 font-config-scheme.cc:152 #, c-format -msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" -msgstr "Zyklische Abhängigkeit: Laufende Verarbeitung für #'%s (%s) gefunden" +msgid "failed adding font directory: %s" +msgstr "Schriftartverzeichnis konnte nicht hinzugefügt werden: %s" -#: grob.cc:251 -msgid "Infinity or NaN encountered" -msgstr "Unendlichkeit oder NaN angetroffen" +#: font-config.cc:57 font-config-scheme.cc:154 +#, c-format +msgid "adding font directory: %s" +msgstr "Schriftartverzeichnis wird hinzugefügt: %s" -#: hairpin.cc:186 -msgid "decrescendo too small" -msgstr "Decrescendo zu kurz" +#: font-config.cc:61 +msgid "Building font database..." +msgstr "Schriftartendatenbank erstellen..." -#: horizontal-bracket-engraver.cc:68 -msgid "do not have that many brackets" -msgstr "so viele Klammern gibt es nicht" +#. find out the ideal number of pages +#: optimal-page-breaking.cc:62 +msgid "Finding the ideal number of pages..." +msgstr "Ideale Seitenanzahl wird gefunden..." -#: horizontal-bracket-engraver.cc:77 -msgid "conflicting note group events" -msgstr "in Konflikt stehende Notengruppenereignisse" +#: optimal-page-breaking.cc:85 +msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page" +msgstr "konnte nicht systems-per-page und page-count gleichzeitig anwenden, ignoriere systems-per-page" -#: hyphen-engraver.cc:93 -msgid "removing unterminated hyphen" -msgstr "unbegrenzter Bindestrich wird entfernt" +#: optimal-page-breaking.cc:105 +msgid "Fitting music on 1 page..." +msgstr "Musik wird auf eine Seite angepasst..." -#: hyphen-engraver.cc:107 -msgid "unterminated hyphen; removing" -msgstr "unbegrenzter Bindestrich; entfernt" +#: optimal-page-breaking.cc:107 +#, c-format +msgid "Fitting music on %d pages..." +msgstr "Musik wird auf %d Seiten angepasst..." -#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:110 +#: optimal-page-breaking.cc:109 #, c-format -msgid "cannot find file: `%s'" -msgstr "Datei »%s« kann nicht gefunden werden" +msgid "Fitting music on %d or %d pages..." +msgstr "Musik wird auf %d oder %d Seiten angepasst..." -#: includable-lexer.cc:55 lily-parser-scheme.cc:101 +#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173 #, c-format -msgid "(search path: `%s')" -msgstr "(Suchpfad: »%s«)" +msgid "trying %d systems" +msgstr "versuche %d Systeme" -#: input.cc:112 source-file.cc:173 source-file.cc:188 -msgid "position unknown" -msgstr "Position unbekannt" +#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201 +#, c-format +msgid "best score for this sys-count: %f" +msgstr "bester Score für dieses sys-count: %f" -#: key-signature-interface.cc:74 +#: accidental.cc:200 #, c-format -msgid "No glyph found for alteration: %s" -msgstr "Kein Glyph für Vorzeichen gefunden: %s" +msgid "Could not find glyph-name for alteration %s" +msgstr "Glyph-Name für Versetzungszeichen %s konnte nicht gefunden werden" -#: key-signature-interface.cc:84 -msgid "alteration not found" -msgstr "Alterierung nicht gefunden" +#: accidental.cc:215 +msgid "natural alteration glyph not found" +msgstr "Auflösungszeichen konnte nicht gefunden werden" -#: ligature-bracket-engraver.cc:62 ligature-engraver.cc:93 -msgid "cannot find start of ligature" -msgstr "Anfang der Ligatur kann nicht gefunden werden" +#: system.cc:197 +#, c-format +msgid "Element count %d" +msgstr "Elementanzahl %d." -#: ligature-bracket-engraver.cc:75 ligature-engraver.cc:120 -msgid "already have a ligature" -msgstr "habe bereits eine Ligatur" +#: system.cc:303 +#, c-format +msgid "Grob count %d" +msgstr "Anzahl der grafischen Objekte (grob): %d" -#: ligature-engraver.cc:98 -msgid "no right bound" -msgstr "keine rechte Begrenzung" +#: slur.cc:362 +#, c-format +msgid "Ignoring grob for slur: %s. avoid-slur not set?" +msgstr "Grob für Legatobogen wird ignoriert: %s. avoid-slur nicht gesetzt?" -#: ligature-engraver.cc:129 -msgid "no left bound" -msgstr "keine linke Begrenzung" +#: font-config-scheme.cc:168 +#, c-format +msgid "failed adding font file: %s" +msgstr "Schriftartdatei konnte nicht hinzugefügt werden: %s" -#: ligature-engraver.cc:173 -msgid "unterminated ligature" -msgstr "unbegrenzte Ligatur" +#: font-config-scheme.cc:170 +#, c-format +msgid "adding font file: %s" +msgstr "Schriftartdatei wird hinzugefügt: %s" -#: ligature-engraver.cc:202 -msgid "ignoring rest: ligature may not contain rest" -msgstr "Pause wird ignoriert: Ligatur darf keine Pause enthalten" +#: hairpin.cc:186 +msgid "decrescendo too small" +msgstr "Decrescendo zu kurz" -#: ligature-engraver.cc:203 -msgid "ligature was started here" -msgstr "Ligatur wurde hier begonnen" +#: extender-engraver.cc:170 extender-engraver.cc:179 +msgid "unterminated extender" +msgstr "unbegrenzter Textunterstrich" -#: lily-guile.cc:78 +#: lily-guile.cc:89 #, c-format msgid "(load path: `%s')" msgstr "(Lade-Pfad: `%s')" -#: lily-guile.cc:428 +#: lily-guile.cc:437 #, c-format msgid "cannot find property type-check for `%s' (%s)." msgstr "Eigenschafts-Typprüfung für »%s« (%s) kann nicht gefunden werden." -#: lily-guile.cc:431 +#: lily-guile.cc:440 msgid "perhaps a typing error?" msgstr "vielleicht ein Tippfehler?" -#: lily-guile.cc:438 +#: lily-guile.cc:447 msgid "doing assignment anyway" msgstr "Zuweisung wird trotzdem durchgeführt" -#: lily-guile.cc:450 +#: lily-guile.cc:459 #, c-format msgid "type check for `%s' failed; value `%s' must be of type `%s'" msgstr "Typprüfung für »%s« gescheitert; Wert »%s« muss vom Typ »%s« sein" -#: lily-lexer.cc:252 -msgid "include files are not allowed in safe mode" -msgstr "eingefügte Dateien sind im abgesicherten Modus nicht erlaubt" - -#: lily-lexer.cc:271 -#, c-format -msgid "identifier name is a keyword: `%s'" -msgstr "Bezeichnername ist ein Schlüsselwort: »%s«" - -#: lily-lexer.cc:286 -#, c-format -msgid "error at EOF: %s" -msgstr "Fehler am Dateiende (EOF): %s" - -#: lily-parser-scheme.cc:30 -#, c-format -msgid "deprecated function called: %s" -msgstr "veraltete Funktion aufgerufen: %s" - -#: lily-parser-scheme.cc:83 -#, c-format -msgid "Changing working directory to: `%s'" -msgstr "Aktuelles Verzeichnis wird zu »%s« geändert" - -#: lily-parser-scheme.cc:100 -#, c-format -msgid "cannot find init file: `%s'" -msgstr "Init-Datei kann nicht gefunden werden: »%s«" - -#: lily-parser-scheme.cc:119 -#, c-format -msgid "Processing `%s'" -msgstr "»%s« wird verarbeitet" - -#: lily-parser.cc:95 -msgid "Parsing..." -msgstr "Analysieren..." - -#: lily-parser.cc:123 -msgid "braces do not match" -msgstr "Klammern passen nicht zueinander" - -#: lyric-combine-music-iterator.cc:329 -#, c-format -msgid "cannot find Voice `%s'" -msgstr "Stimme kann nicht gefunden werden: »%s«" - -#: lyric-engraver.cc:162 -msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." -msgstr "Textsilbe hat keine Note. \\lyricsto oder associatedVoice verwenden." - -#: main.cc:97 +#: main.cc:109 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -1674,7 +2174,7 @@ msgstr "" "Bedingungen weitergeben. Rufen Sie »%s --warranty« für weitere\n" "Informationen auf.\n" -#: main.cc:103 +#: main.cc:115 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License version 2\n" @@ -1705,11 +2205,11 @@ msgstr "" "Sie bitte an die Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" "Boston, MA 02111-1307, USA.\n" -#: main.cc:134 +#: main.cc:146 msgid "SYM[=VAL]" msgstr "SYM[=WERT]" -#: main.cc:135 +#: main.cc:147 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." @@ -1717,59 +2217,59 @@ msgstr "" "Scheme-Option SYM auf WERT setzen (Vorgabe: #t).\n" "-dhelp für Hilfe verwenden." -#: main.cc:138 +#: main.cc:150 msgid "EXPR" msgstr "AUSD" -#: main.cc:138 +#: main.cc:150 msgid "evaluate scheme code" msgstr "Scheme-Code auswerten" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:141 +#: main.cc:153 msgid "FORMATs" msgstr "FORMATe" -#: main.cc:141 +#: main.cc:153 msgid "dump FORMAT,... Also as separate options:" msgstr "dump FORMAT,... Auch als separate Optionen:" -#: main.cc:142 +#: main.cc:154 msgid "generate PDF (default)" msgstr "PDF erzeugen (Standard)" -#: main.cc:143 +#: main.cc:155 msgid "generate PNG" msgstr "PNG erzeugen" -#: main.cc:144 +#: main.cc:156 msgid "generate PostScript" msgstr "PostScript erzeugen" -#: main.cc:146 +#: main.cc:158 msgid "FIELD" msgstr "FELD" -#: main.cc:146 +#: main.cc:158 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" msgstr "Header-Feld FELD in Datei BASISNAME.FELD schreiben" -#: main.cc:148 +#: main.cc:160 msgid "add DIR to search path" msgstr "VERZ zum Suchpfad hinzufügen" -#: main.cc:149 +#: main.cc:161 msgid "use FILE as init file" msgstr "DATEI als Anfangsdatei verwenden" -#: main.cc:151 +#: main.cc:163 msgid "USER, GROUP, JAIL, DIR" msgstr "BENUTZER,GRUPPE,KERKER,VERZ" -#: main.cc:151 +#: main.cc:163 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" @@ -1777,15 +2277,16 @@ msgstr "" "chroot in KERKER, wird BENUTZER:GRUPPE\n" "und cd in VERZ" -#: main.cc:154 +#: main.cc:166 msgid "write output to FILE (suffix will be added)" msgstr "Ausgabe in DATEI schreiben (Endung wird hinzugefügt)" -#: main.cc:155 +#: main.cc:167 msgid "relocate using directory of lilypond program" msgstr "wiederfinden mit Hilfe des Lilypond-Programmverzeichnisses" -#: main.cc:221 +#. Do not update the copyright years here, run `make grand-replace' +#: main.cc:238 #, c-format msgid "" "Copyright (c) %s by\n" @@ -1795,460 +2296,238 @@ msgstr "" "%s und anderen." #. No version number or newline here. It confuses help2man. -#: main.cc:249 +#: main.cc:265 #, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Aufruf: %s [OPTION]... DATEI..." -#: main.cc:251 -#, c-format +#: main.cc:267 msgid "Typeset music and/or produce MIDI from FILE." msgstr "Musiksatz und/oder MIDI aus DATEI erzeugen." -#: main.cc:253 -#, c-format +#: main.cc:269 msgid "LilyPond produces beautiful music notation." msgstr "LilyPond erzeugt ansprechenden Notensatz." -#: main.cc:255 +#: main.cc:271 #, c-format msgid "For more information, see %s" msgstr "Für weitere Informationen siehe %s" -#: main.cc:257 -#, c-format +#: main.cc:273 msgid "Options:" msgstr "Optionen:" -#: main.cc:311 +#: main.cc:327 #, c-format msgid "expected %d arguments with jail, found: %u" msgstr "%d Argumente mit Kerker erwartet, %u gefunden" -#: main.cc:325 +#: main.cc:341 #, c-format msgid "no such user: %s" msgstr "kein solcher Benutzer: %s" -#: main.cc:327 +#: main.cc:343 #, c-format msgid "cannot get user id from user name: %s: %s" msgstr "Benutzer-ID von Benutzername kann nicht gefunden werden: %s: %s" -#: main.cc:342 +#: main.cc:358 #, c-format msgid "no such group: %s" msgstr "keine solche Gruppe: %s" -#: main.cc:344 +#: main.cc:360 #, c-format msgid "cannot get group id from group name: %s: %s" msgstr "Gruppen-ID kann nicht von Gruppenname ermittelt werden: %s: %s" -#: main.cc:352 +#: main.cc:368 #, c-format msgid "cannot chroot to: %s: %s" msgstr "kein chroot möglich nach: %s: %s" -#: main.cc:359 +#: main.cc:375 #, c-format msgid "cannot change group id to: %d: %s" -msgstr "Gruppen-ID kann nicht geändert werden in: %d: %s" - -#: main.cc:365 -#, c-format -msgid "cannot change user id to: %d: %s" -msgstr "Benutzer-ID kann nicht geändert werden in: %d: %s" - -#: main.cc:371 -#, c-format -msgid "cannot change working directory to: %s: %s" -msgstr "aktuelles Verzeichnis kann nicht geändert werden in: %s: %s" - -#: main.cc:611 -#, c-format -msgid "exception caught: %s" -msgstr "Ausnahme gefangen: %s" - -#. FIXME: constant error message. -#: mark-engraver.cc:129 -msgid "rehearsalMark must have integer value" -msgstr "rehearsalMark muss Ganzzahlwert haben" - -#: mark-engraver.cc:135 -msgid "mark label must be a markup object" -msgstr "Marke muss ein Textbeschriftungsobjekt sein" - -#: mensural-ligature-engraver.cc:85 -msgid "ligature with less than 2 heads -> skipping" -msgstr "Ligatur mit weniger als 2 Notenköpfen -> überspringen" - -#: mensural-ligature-engraver.cc:112 -msgid "cannot determine pitch of ligature primitive -> skipping" -msgstr "Tonhöhe des Ligaturelements kann nicht ermittelt werden -> überspringen" - -#: mensural-ligature-engraver.cc:126 -msgid "single note ligature - skipping" -msgstr "Ligatur mit einer einzelnen Note -> überspringen" - -#: mensural-ligature-engraver.cc:138 -msgid "prime interval within ligature -> skipping" -msgstr "Prime in der Ligatur -> überspringen" - -#: mensural-ligature-engraver.cc:150 -msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" -msgstr "Mensuralligatur: Dauer weder Mx, L, B noch S -> überspringen" - -#: mensural-ligature-engraver.cc:198 -msgid "semibrevis must be followed by another one -> skipping" -msgstr "Semibrevis muss von einem weiteren gefolgt werden -> überspringen" - -#: mensural-ligature-engraver.cc:209 -msgid "" -"semibreves can only appear at the beginning of a ligature,\n" -"and there may be only zero or two of them" -msgstr "" -"Semibrevis kann nur am Anfang einer Ligatur auftreten,\n" -"und es können nur null oder zwei davon auftreten" - -#: mensural-ligature-engraver.cc:236 -msgid "" -"invalid ligatura ending:\n" -"when the last note is a descending brevis,\n" -"the penultimate note must be another one,\n" -"or the ligatura must be LB or SSB" -msgstr "" -"ungültiges Ende der Ligatur:\n" -"Wenn die letzte Note eine absteigende Brevis ist,\n" -"muss die vorletzte Note eine weitere sein,\n" -"oder die Ligatur muss LB oder SSB sein" - -#: mensural-ligature-engraver.cc:356 -msgid "unexpected case fall-through" -msgstr "unerwarteter case-Ausgang" - -#: mensural-ligature.cc:141 -msgid "Mensural_ligature: unexpected case fall-through" -msgstr "Mensural_ligature: unerwarteter case-Ausgang" - -#: mensural-ligature.cc:192 -msgid "Mensural_ligature: (join_right == 0)" -msgstr "Mensural_ligature: (join_right == 0)" - -#: midi-item.cc:81 -#, c-format -msgid "no such MIDI instrument: `%s'" -msgstr "kein MIDI-Instrument: `%s'" - -#: midi-stream.cc:28 -#, c-format -msgid "cannot open for write: %s: %s" -msgstr "Es kann nicht zum Schreiben geöffnet werden: %s: %s" - -#: midi-stream.cc:44 -#, c-format -msgid "cannot write to file: `%s'" -msgstr "Es kann nicht in Datei geschrieben werden: »%s«" - -#: minimal-page-breaking.cc:38 paper-score.cc:105 -msgid "Calculating line breaks..." -msgstr "Zeilenumbrüche werden berechnet..." - -#: minimal-page-breaking.cc:42 layout-page-layout.scm:463 -msgid "Calculating page breaks..." -msgstr "Zeilenumbrüche werden berechnet..." - -#: music-iterator.cc:171 -msgid "Sending non-event to context" -msgstr "Nicht-Ereignis wird an Kontext gesendet" - -#: music.cc:140 -#, c-format -msgid "octave check failed; expected \"%s\", found: \"%s\"" -msgstr "Oktavenüberprüfung gescheitert; »%s« erwartet, »%s« gefunden" - -#: music.cc:203 -#, c-format -msgid "transposition by %s makes alteration larger than double" -msgstr "Transponieren um %s erzeugt Vorzeichen größer als ein doppeltes" - -#: new-dynamic-engraver.cc:129 -#, c-format -msgid "" -"unknown crescendo style: %s\n" -"defaulting to hairpin." -msgstr "" -"unbekannter crescendo-Stil: %s\n" -"wird als spitze Klammer gesetzt." - -#: new-fingering-engraver.cc:96 -msgid "cannot add text scripts to individual note heads" -msgstr "es kann kein Text zu einzelnen Notenköpfen hinzugefügt werden" - -#: new-fingering-engraver.cc:239 -msgid "no placement found for fingerings" -msgstr "Keine Platzierung für Fingersatz gefunden" - -#: new-fingering-engraver.cc:240 -msgid "placing below" -msgstr "Platzierung darunter" - -#: note-collision.cc:484 -msgid "ignoring too many clashing note columns" -msgstr "zu viele kollidierende Notenspalten werden ignoriert" - -#: note-column.cc:124 -msgid "cannot have note heads and rests together on a stem" -msgstr "Notenköpfe und Pausen können nicht zusammen an einem Hals auftreten" - -#: note-head.cc:63 -#, c-format -msgid "none of note heads `%s' or `%s' found" -msgstr "Keinen der Notenköpfe »%s« und »%s« gefunden" - -#: note-heads-engraver.cc:64 -msgid "NoteEvent without pitch" -msgstr "NoteEvent ohne Tonhöhe" - -#: open-type-font.cc:33 -#, c-format -msgid "cannot allocate %lu bytes" -msgstr "es können keine %lu Bytes angefordert werden" - -#: open-type-font.cc:37 -#, c-format -msgid "cannot load font table: %s" -msgstr "Schriftarttabelle kann nicht geladen werden: %s" - -#: open-type-font.cc:42 -#, c-format -msgid "Free type error: %s" -msgstr "Freetype-Fehler: %s" - -#: open-type-font.cc:100 -#, c-format -msgid "unsupported font format: %s" -msgstr "nicht unterstütztes Schriftartformat: %s" - -#: open-type-font.cc:102 -#, c-format -msgid "error reading font file %s: %s" -msgstr "Fehler beim Lesen der Schriftartdatei: %s: %s" - -#: open-type-font.cc:177 -#, c-format -msgid "FT_Get_Glyph_Name () Freetype error: %s" -msgstr "FT_Get_Glyph_Name() Freetype-Fehler: %s" - -#: open-type-font.cc:302 pango-font.cc:167 -#, c-format -msgid "FT_Get_Glyph_Name () error: %s" -msgstr "FT_Get_Glyph_Name() Fehler: %s" - -#. find out the ideal number of pages -#: optimal-page-breaking.cc:56 -msgid "Finding the ideal number of pages..." -msgstr "Ideale Seitenanzahl wird gefunden..." - -#: optimal-page-breaking.cc:78 -msgid "Fitting music on 1 page..." -msgstr "Musik wird auf eine Seite angepasst..." - -#: optimal-page-breaking.cc:80 -#, c-format -msgid "Fitting music on %d pages..." -msgstr "Musik wird auf %d Seiten angepasst..." - -#: optimal-page-breaking.cc:82 -#, c-format -msgid "Fitting music on %d or %d pages..." -msgstr "Musik wird auf %d oder %d Seiten angepasst..." - -#: optimal-page-breaking.cc:159 page-turn-page-breaking.cc:226 -#: paper-score.cc:146 -msgid "Drawing systems..." -msgstr "Systeme erstellen..." - -#: page-turn-page-breaking.cc:146 -#, c-format -msgid "page-turn-page-breaking: breaking from %d to %d" -msgstr "Seitenwechsel-Seitenumbruch: Umbruch von %d zu %d" - -#: page-turn-page-breaking.cc:195 -msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." -msgstr "Erster Seitenwechsel kann nicht auf einzelne Seite gelegt werden. In Betracht zu ziehen wäre das Setzen von first-page-number auf gerade Zahl." - -#: page-turn-page-breaking.cc:208 -#, c-format -msgid "Calculating page and line breaks (%d possible page breaks)..." -msgstr "Seiten- und Zeilenumbrüche werden berechnet (%d mögliche Seitenumbrüche)..." - -#: page-turn-page-breaking.cc:275 -#, c-format -msgid "break starting at page %d" -msgstr "Umbruch beginnt auf Seite %d" - -#: page-turn-page-breaking.cc:276 -#, c-format -msgid "\tdemerits: %f" -msgstr "Optimale Bewertung: %f" - -#: page-turn-page-breaking.cc:277 -#, c-format -msgid "\tsystem count: %d" -msgstr "\tSystemanzahl: %d" +msgstr "Gruppen-ID kann nicht geändert werden in: %d: %s" -#: page-turn-page-breaking.cc:278 +#: main.cc:381 #, c-format -msgid "\tpage count: %d" -msgstr "\tSeitenanzahl: %d" +msgid "cannot change user id to: %d: %s" +msgstr "Benutzer-ID kann nicht geändert werden in: %d: %s" -#: page-turn-page-breaking.cc:279 +#: main.cc:387 #, c-format -msgid "\tprevious break: %d" -msgstr "\tvorheriger Umbruch: %d" +msgid "cannot change working directory to: %s: %s" +msgstr "aktuelles Verzeichnis kann nicht geändert werden in: %s: %s" -#: pango-font.cc:184 +#: main.cc:628 #, c-format -msgid "" -"Glyph has no name, but font supports glyph naming.\n" -"Skipping glyph U+%0X, file %s" -msgstr "" -"Glyph hat keinen Namen, aber Zeichensatz unterstützt Glyphnamen.\n" -"Glyph U+%0X wird übersprungen, Datei %s" +msgid "exception caught: %s" +msgstr "Ausnahme gefangen: %s" -#: pango-font.cc:229 +#: key-signature-interface.cc:78 #, c-format -msgid "no PostScript font name for font `%s'" -msgstr "Kein PostScript-Schriftartname für Schriftart: »%s«" - -#: pango-font.cc:277 -msgid "FreeType face has no PostScript font name" -msgstr "FreeType-Schriftart hat keinen PostScript-Schriftartnamen" +msgid "No glyph found for alteration: %s" +msgstr "Kein Glyph für Vorzeichen gefunden: %s" -#: paper-column-engraver.cc:221 -msgid "forced break was overridden by some other event, should you be using bar checks?" -msgstr "erzwungener Umbruch war durch anderes Ereignis aufgehoben, sollten Taktüberprüfungen vorgenommen werden?" +#: key-signature-interface.cc:88 +msgid "alteration not found" +msgstr "Alterierung nicht gefunden" -#: paper-outputter-scheme.cc:30 +#: dots.cc:48 #, c-format -msgid "Layout output to `%s'..." -msgstr "Layout nach »%s« ausgeben..." +msgid "dot `%s' not found" +msgstr "Punkt »%s« nicht gefunden" -#: paper-score.cc:118 +#: translator.cc:359 #, c-format -msgid "Element count %d (spanners %d) " -msgstr "Elementanzahl: %d (Klammern: %d)" +msgid "Two simultaneous %s events, junking this one" +msgstr "Zwei gleichzeitige %s-Ereignisse, dieses wird verworfen" -#: paper-score.cc:122 -msgid "Preprocessing graphical objects..." -msgstr "Vorverarbeitung der grafischen Elemente..." +#: translator.cc:360 +#, c-format +msgid "Previous %s event here" +msgstr "Vorheriges %s-Ereignis hier" -#: parse-scm.cc:93 -msgid "GUILE signaled an error for the expression beginning here" -msgstr "GUILE signalisierte einen Fehler für den hier beginnenden Ausdruck" +#: glissando-engraver.cc:105 +msgid "unterminated glissando" +msgstr "unbegrenztes Glissando." -#: percent-repeat-engraver.cc:202 -msgid "unterminated percent repeat" -msgstr "unbegrenzte Prozentwiederholung" +#: text-spanner-engraver.cc:73 +msgid "cannot find start of text spanner" +msgstr "Anfang der Textklammer kann nicht gefunden werden" -#: performance.cc:43 -msgid "Track..." -msgstr "Spur..." +#: text-spanner-engraver.cc:86 +msgid "already have a text spanner" +msgstr "Textklammer bereits vorhanden" -#: performance.cc:72 -msgid "MIDI channel wrapped around" -msgstr "MIDI-Kanal zurückgesprungen" +#: text-spanner-engraver.cc:132 +msgid "unterminated text spanner" +msgstr "unbegrenzte Textklammer" -#: performance.cc:73 -msgid "remapping modulo 16" -msgstr "modulo 16 neu zuordnen" +#: clef.cc:65 +#, c-format +msgid "clef `%s' not found" +msgstr "Schlüssel »%s« nicht gefunden" -#: performance.cc:100 +#. +#. Todo: should make typecheck? +#. +#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. +#. +#: time-signature-engraver.cc:75 #, c-format -msgid "MIDI output to `%s'..." -msgstr "MIDI-Ausgabe nach »%s«..." +msgid "strange time signature found: %d/%d" +msgstr "seltsame Taktart gefunden: %d/%d" -#: phrasing-slur-engraver.cc:146 -msgid "unterminated phrasing slur" -msgstr "nicht beendeter Phrasierungsbogen" +#: lily-parser-scheme.cc:82 +#, c-format +msgid "Changing working directory to: `%s'" +msgstr "Aktuelles Verzeichnis wird zu »%s« geändert" -#: piano-pedal-engraver.cc:287 +#: lily-parser-scheme.cc:99 #, c-format -msgid "expect 3 strings for piano pedals, found: %ld" -msgstr "3 Textketten für Piano-Pedal erwartet, %ld gefunden" +msgid "cannot find init file: `%s'" +msgstr "Init-Datei kann nicht gefunden werden: »%s«" -#: piano-pedal-engraver.cc:302 piano-pedal-engraver.cc:313 -#: piano-pedal-performer.cc:93 +#: lily-parser-scheme.cc:118 #, c-format -msgid "cannot find start of piano pedal: `%s'" -msgstr "es kann kein Anfang für Piano-Pedal gefunden werden: »%s«" +msgid "Processing `%s'" +msgstr "»%s« wird verarbeitet" -#: piano-pedal-engraver.cc:348 +#: lily-parser-scheme.cc:204 +msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead." +msgstr "ly:parser-parse-string ist nur mit einem neuen Parser gültig. Anstelle dessen ly:parser-include-string benutzen." + +#: custos.cc:88 #, c-format -msgid "cannot find start of piano pedal bracket: `%s'" -msgstr "es kann kein Anfang für Piano-Pedal-Klammer gefunden werden: »%s«" +msgid "custos `%s' not found" +msgstr "Custos »%s« nicht gefunden" -#: program-option-scheme.cc:215 +#: program-option-scheme.cc:237 #, c-format msgid "no such internal option: %s" msgstr "keine solche interne Option: %s" -#: property-iterator.cc:74 +#: rest-collision.cc:146 +msgid "cannot resolve rest collision: rest direction not set" +msgstr "Zusammenstoß von Pausen kann nicht aufgelöst werden: Richtung von Pausen nicht gesetzt" + +#: rest-collision.cc:160 rest-collision.cc:205 +msgid "too many colliding rests" +msgstr "zu viele kollidierende Pausen" + +#: episema-engraver.cc:75 +msgid "already have an episema" +msgstr "Episema bereits vorhanden" + +#: episema-engraver.cc:88 +msgid "cannot find start of episema" +msgstr "Anfang des Episema kann nicht gefunden werden" + +#: episema-engraver.cc:137 +msgid "unterminated episema" +msgstr "unbegrenztes Episema" + +#: grob-property.cc:34 #, c-format -msgid "not a grob name, `%s'" -msgstr "Kein Name für grafische Objekte (grob): »%s«" +msgid "%d: %s" +msgstr "%d: %s" -#: relative-octave-check.cc:38 -msgid "Failed octave check, got: " -msgstr "Oktavprüfung gescheitert, Rückgabe: " +#: grob-property.cc:173 +#, c-format +msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" +msgstr "Zyklische Abhängigkeit: Laufende Verarbeitung für #'%s (%s) gefunden" -#: relocate.cc:44 +#: relocate.cc:54 #, c-format msgid "Setting %s to %s" msgstr "%s wird auf %s gesetzt" -#: relocate.cc:64 +#: relocate.cc:74 #, c-format msgid "no such file: %s for %s" msgstr "keine solche Datei: %s für %s" -#: relocate.cc:74 relocate.cc:92 +#: relocate.cc:84 relocate.cc:102 #, c-format msgid "no such directory: %s for %s" msgstr "kein solches Verzeichnis: %s für %s" -#: relocate.cc:84 +#: relocate.cc:94 #, c-format msgid "%s=%s (prepend)\n" msgstr "%s=%s (voranstellen)\n" -#: relocate.cc:114 +#: relocate.cc:124 #, c-format msgid "not relocating, no %s/ or current/ found under %s" msgstr "keine Verlagerung, kein %s/ oder current/ unter %s gefunden" -#: relocate.cc:125 +#: relocate.cc:135 #, c-format msgid "Relocation: compile datadir=%s, new datadir=%s" msgstr "Verlagerung: Kompilier-Datenverzeichnis=%s, neues Datenverzeichnis=%s" -#: relocate.cc:138 +#: relocate.cc:148 #, c-format msgid "Relocation: framework_prefix=%s" msgstr "Verlagerung: framework_prefix=%s" -#: relocate.cc:179 +#: relocate.cc:189 #, c-format msgid "Relocation: is absolute: argv0=%s" msgstr "Verlagerung: ist absolut: argv0=%s" -#: relocate.cc:186 +#: relocate.cc:196 #, c-format msgid "Relocation: from cwd: argv0=%s" msgstr "Verlagerung: von cwd: argv0=%s" -#: relocate.cc:195 +#: relocate.cc:213 #, c-format msgid "" "Relocation: from PATH=%s\n" @@ -2257,510 +2536,837 @@ msgstr "" "Verlagerung: von PATH=%s\n" "argv0=%s" -#: relocate.cc:229 +#: relocate.cc:240 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" msgstr "LILYPONDPREFIX is veraltet, stattdessen LILYPOND_DATADIR verwenden" -#: relocate.cc:356 +#: relocate.cc:367 #, c-format msgid "Relocation file: %s" msgstr "Verlagerungsdatei: %s" -#: relocate.cc:392 +#: relocate.cc:373 source-file.cc:65 +#, c-format +msgid "cannot open file: `%s'" +msgstr "Datei kann nicht geöffnet werden: »%s«" + +#: relocate.cc:403 #, c-format msgid "Unknown relocation command %s" msgstr "Unbekannter Verlagerungsbefehl %s" -#: rest-collision.cc:145 -msgid "cannot resolve rest collision: rest direction not set" -msgstr "Zusammenstoß von Pausen kann nicht aufgelöst werden: Richtung von Pausen nicht gesetzt" +#: translator-group.cc:188 +#, c-format +msgid "cannot find: `%s'" +msgstr "»%s« kann nicht gefunden werden" -#: rest-collision.cc:159 rest-collision.cc:204 -msgid "too many colliding rests" -msgstr "zu viele kollidierende Pausen" +#: phrasing-slur-engraver.cc:157 +msgid "unterminated phrasing slur" +msgstr "nicht beendeter Phrasierungsbogen" + +#: lyric-engraver.cc:176 +msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." +msgstr "Textsilbe hat keine Note. \\lyricsto oder associatedVoice verwenden." + +#: page-breaking.cc:248 +msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set" +msgstr "ignoriere min-systems-per-page und max-systems-per-page weil systems-per-page definiert wurde" + +#: page-breaking.cc:253 +msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values" +msgstr "min-systems-per-page ist größer als max-systems-per-page, beide Werte werden ignoriert" + +#: performance.cc:54 +msgid "Track..." +msgstr "Spur..." + +#: performance.cc:83 +msgid "MIDI channel wrapped around" +msgstr "MIDI-Kanal zurückgesprungen" + +#: performance.cc:84 +msgid "remapping modulo 16" +msgstr "modulo 16 neu zuordnen" -#: rest.cc:148 +#: performance.cc:111 #, c-format -msgid "rest `%s' not found" -msgstr "Pause »%s« nicht gefunden" +msgid "MIDI output to `%s'..." +msgstr "MIDI-Ausgabe nach »%s«..." -#: score-engraver.cc:67 +#: tuplet-engraver.cc:107 +msgid "No tuplet to end" +msgstr "Keine rhythmische Gruppe zu beenden" + +#: gregorian-ligature-engraver.cc:70 #, c-format -msgid "cannot find `%s'" -msgstr "»%s« kann nicht gefunden werden" +msgid "\\%s ignored" +msgstr "\\%s ignoriert" -#: score-engraver.cc:69 -msgid "Music font has not been installed properly." -msgstr "Musik-Schriftart wurde nicht ordnungsgemäß installiert." +#: gregorian-ligature-engraver.cc:75 +#, c-format +msgid "implied \\%s added" +msgstr "implizites \\%s hinzugefügt" + +#. ligature may not start with 2nd head of pes or flexa +#: gregorian-ligature-engraver.cc:224 +msgid "cannot apply `\\~' on first head of ligature" +msgstr "»\\~« kann nicht auf erste Note der Ligatur angewendet werden" + +#. (pitch == prev_pitch) +#: gregorian-ligature-engraver.cc:236 +msgid "cannot apply `\\~' on heads with identical pitch" +msgstr "»\\~« kann nicht auf Noten mit gleicher Tonhöhe angewendet werden" -#: score-engraver.cc:71 +#: chord-tremolo-engraver.cc:88 +msgid "No tremolo to end" +msgstr "Kein Tremolo zu beenden" + +#: chord-tremolo-engraver.cc:109 +msgid "unterminated chord tremolo" +msgstr "unbegrenztes Akkord-Tremolo" + +#: axis-group-engraver.cc:94 +msgid "Axis_group_engraver: vertical group already has a parent" +msgstr "Axis_group_engraver: vertikale Gruppe hat bereits einen Vater" + +#: axis-group-engraver.cc:95 +msgid "are there two Axis_group_engravers?" +msgstr "gibt es zwei Axis_group_engravers?" + +#: axis-group-engraver.cc:96 +msgid "removing this vertical group" +msgstr "Entfernen dieser vertikalen Gruppe" + +#: cluster.cc:120 #, c-format -msgid "Search path `%s'" -msgstr "Suchpfad »%s«" +msgid "unknown cluster style `%s'" +msgstr "unbekannter Clusterstil: »%s«" -#: score-engraver.cc:73 -msgid "Aborting" -msgstr "Abbruch" +#: cluster.cc:157 +msgid "junking empty cluster" +msgstr "Leeres Cluster wird verworfen" -#: score.cc:167 -msgid "already have music in score" -msgstr "es sind bereits Noten in der Partitur" +#: context-property.cc:42 +msgid "need symbol arguments for \\override and \\revert" +msgstr "Symbol-Argumente für \\override und \\revert benötigt" -#: score.cc:168 -msgid "this is the previous music" -msgstr "Dies sind die vorhergehenden Noten" +#: source-file.cc:85 +#, c-format +msgid "expected to read %d characters, got %d" +msgstr "%d Zeichen erwartet, %d erhalten" -#: score.cc:173 -msgid "errors found, ignoring music expression" -msgstr "Fehler gefunden, musikalischer Ausdruck wird ignoriert" +#: axis-group-interface.cc:631 +msgid "an outside-staff object should have a direction, defaulting to up" +msgstr "Ein Objekt außerhalb der Notenzeile sollte eine Richtung haben, Vorgabe ist »nach oben«" + +#: coherent-ligature-engraver.cc:111 +#, c-format +msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" +msgstr "Coherent_ligature_engraver: setze »spacing-increment=0.01«: ptr=%ul" + +#: percent-repeat-engraver.cc:148 +msgid "unterminated percent repeat" +msgstr "unbegrenzte Prozentwiederholung" + +#: note-head.cc:76 +#, c-format +msgid "none of note heads `%s' or `%s' found" +msgstr "Keinen der Notenköpfe »%s« und »%s« gefunden" + +#: relative-octave-check.cc:49 +msgid "Failed octave check, got: " +msgstr "Oktavprüfung gescheitert, Rückgabe: " #. FIXME: -#: script-engraver.cc:102 -msgid "do not know how to interpret articulation: " -msgstr "Interpretation für Artikulation unbekannt: " +#: script-engraver.cc:113 +msgid "do not know how to interpret articulation:" +msgstr "Interpretation für Artikulation unbekannt:" -#: script-engraver.cc:103 -msgid "scheme encoding: " -msgstr "Scheme-Kodierung: " +#: script-engraver.cc:114 +msgid " scheme encoding: " +msgstr " Scheme-Kodierung: " -#: slur-engraver.cc:82 +#: all-font-metrics.cc:156 #, c-format -msgid "direction of %s invalid: %d" -msgstr "Richtung von %s ungültig: %d" +msgid "cannot find font: `%s'" +msgstr "Schriftart kann nicht gefunden werden: »%s«" -#: slur-engraver.cc:151 -msgid "unterminated slur" -msgstr "unbegrenzter Legatobogen" +#: property-iterator.cc:85 +#, c-format +msgid "not a grob name, `%s'" +msgstr "Kein Name für grafische Objekte (grob): »%s«" -#: slur-engraver.cc:163 -msgid "cannot end slur" -msgstr "Legatobogen kann nicht beendet werden" +#: bar-check-iterator.cc:84 +#, c-format +msgid "barcheck failed at: %s" +msgstr "Taktüberprüfung gescheitert bei: %s" + +#: stem.cc:116 +msgid "weird stem size, check for narrow beams" +msgstr "Eigenartige Notenhalslänge; auf enge Balken überprüfen" -#: slur.cc:359 +#: stem.cc:657 #, c-format -msgid "Ignoring grob for slur: %s. avoid-slur not set?" -msgstr "Grob für Legatobogen wird ignoriert: %s. avoid-slur nicht gesetzt?" +msgid "flag `%s' not found" +msgstr "Fähnchen »%s« nicht gefunden" -#: source-file.cc:79 +#: stem.cc:673 #, c-format -msgid "expected to read %d characters, got %d" -msgstr "%d Zeichen erwartet, %d erhalten" +msgid "flag stroke `%s' not found" +msgstr "Fähnchenstrich »%s« nicht gefunden" + +#: global-context-scheme.cc:96 global-context-scheme.cc:114 +msgid "no music found in score" +msgstr "keine Musik in der Partitur gefunden" + +#: global-context-scheme.cc:104 +msgid "Interpreting music... " +msgstr "Interpretation der Musik..." + +#: global-context-scheme.cc:127 +#, c-format +msgid "elapsed time: %.2f seconds" +msgstr "verstrichene Zeit: %.2f Sekunden" + +#: translator-group-ctors.cc:40 +#, c-format +msgid "fatal error. Couldn't find type: %s" +msgstr "schwerwiegender Fehler. Typ konnte nicht gefunden werden: %s" + +#: mensural-ligature.cc:171 +msgid "Mensural_ligature: unexpected case fall-through" +msgstr "Mensural_ligature: unerwarteter case-Ausgang" + +#: mensural-ligature.cc:233 +msgid "Mensural_ligature: (join_right == 0)" +msgstr "Mensural_ligature: (join_right == 0)" -#: spaceable-grob.cc:83 +#: page-turn-page-breaking.cc:168 #, c-format -msgid "No spring between column %d and next one" -msgstr "Kein (dynamischer) Abstand zwischen Spalte %d und Nachfolger" - -#: staff-symbol-engraver.cc:62 -msgid "staff-span event has no direction" -msgstr "Systemabstandsereignis hat keine Richtung" +msgid "page-turn-page-breaking: breaking from %d to %d" +msgstr "Seitenwechsel-Seitenumbruch: Umbruch von %d zu %d" -#: stem-engraver.cc:92 -msgid "tremolo duration is too long" -msgstr "Tremolodauer ist zu lang" +#: page-turn-page-breaking.cc:217 +msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." +msgstr "Erster Seitenwechsel kann nicht auf einzelne Seite gelegt werden. In Betracht zu ziehen wäre das Setzen von first-page-number auf gerade Zahl." -#. FIXME: -#: stem-engraver.cc:129 +#: page-turn-page-breaking.cc:230 #, c-format -msgid "adding note head to incompatible stem (type = %d)" -msgstr "Notenkopf wird zu inkompatiblem Hals (Typ = %d) hinzugefügt" - -#: stem-engraver.cc:131 -msgid "maybe input should specify polyphonic voices" -msgstr "vielleicht sollte die Eingabe mehrere Stimmen erstellen" +msgid "Calculating page and line breaks (%d possible page breaks)..." +msgstr "Seiten- und Zeilenumbrüche werden berechnet (%d mögliche Seitenumbrüche)..." -#: stem.cc:105 -msgid "weird stem size, check for narrow beams" -msgstr "Eigenartige Notenhalslänge; auf enge Balken überprüfen" +#: page-turn-page-breaking.cc:300 +#, c-format +msgid "break starting at page %d" +msgstr "Umbruch beginnt auf Seite %d" -#: stem.cc:623 +#: page-turn-page-breaking.cc:301 #, c-format -msgid "flag `%s' not found" -msgstr "Fähnchen »%s« nicht gefunden" +msgid "\tdemerits: %f" +msgstr "Optimale Bewertung: %f" -#: stem.cc:639 +#: page-turn-page-breaking.cc:302 #, c-format -msgid "flag stroke `%s' not found" -msgstr "Fähnchenstrich »%s« nicht gefunden" +msgid "\tsystem count: %d" +msgstr "\tSystemanzahl: %d" -#: system.cc:178 +#: page-turn-page-breaking.cc:303 #, c-format -msgid "Element count %d." -msgstr "Elementanzahl: %d." +msgid "\tpage count: %d" +msgstr "\tSeitenanzahl: %d" -#: system.cc:270 +#: page-turn-page-breaking.cc:304 #, c-format -msgid "Grob count %d" -msgstr "Anzahl der grafischen Objekte (grob): %d" +msgid "\tprevious break: %d" +msgstr "\tvorheriger Umbruch: %d" -#: text-spanner-engraver.cc:62 -msgid "cannot find start of text spanner" -msgstr "Anfang der Textklammer kann nicht gefunden werden" +#: lily-parser.cc:106 +msgid "Parsing..." +msgstr "Analysieren..." -#: text-spanner-engraver.cc:75 -msgid "already have a text spanner" -msgstr "Textklammer bereits vorhanden" +#: lily-parser.cc:134 +msgid "braces do not match" +msgstr "Klammern passen nicht zueinander" -#: text-spanner-engraver.cc:121 -msgid "unterminated text spanner" -msgstr "unbegrenzte Textklammer" +#: score.cc:178 +msgid "already have music in score" +msgstr "es sind bereits Noten in der Partitur" -#: tie-engraver.cc:262 -msgid "lonely tie" -msgstr "einsamer Bindebogen" +#: score.cc:179 +msgid "this is the previous music" +msgstr "Dies sind die vorhergehenden Noten" +#: score.cc:184 +msgid "errors found, ignoring music expression" +msgstr "Fehler gefunden, musikalischer Ausdruck wird ignoriert" + +#: change-iterator.cc:34 +#, c-format +msgid "cannot change `%s' to `%s'" +msgstr "»%s« kann nicht in »%s« geändert werden" + +#. FIXME: constant error message. +#: change-iterator.cc:93 +msgid "cannot find context to switch to" +msgstr "es kann kein Kontext zum Umschalten gefunden werden" + +#. We could change the current translator's id, but that would make +#. errors hard to catch. #. -#. Todo: should make typecheck? -#. -#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. -#. -#: time-signature-engraver.cc:64 +#. last->translator_id_string () = get_change +#. ()->change_to_id_string (); +#: change-iterator.cc:102 #, c-format -msgid "strange time signature found: %d/%d" -msgstr "seltsame Taktart gefunden: %d/%d" +msgid "not changing to same context type: %s" +msgstr "kein Umschalten zum gleichen Kontexttypen: %s" + +#. FIXME: uncomprehensable message +#: change-iterator.cc:106 +msgid "none of these in my family" +msgstr "keiner davon befindet sich in meiner Familie" #. If there is no such symbol, we default to the numbered style. #. (Here really with a warning!) -#: time-signature.cc:83 +#: time-signature.cc:94 #, c-format msgid "time signature symbol `%s' not found; reverting to numbered style" msgstr "Taktart-Symbol »%s« nicht gefunden; wird in nummerierten Stil umgewandelt" -#: translator-ctors.cc:53 +#: grob-interface.cc:68 #, c-format -msgid "unknown translator: `%s'" -msgstr "unbekannter Übersetzer: »%s«" +msgid "Unknown interface `%s'" +msgstr "Unbekannte Schnittstelle »%s«" -#: translator-group-ctors.cc:29 +#: grob-interface.cc:79 #, c-format -msgid "fatal error. Couldn't find type: %s" -msgstr "schwerwiegender Fehler. Typ konnte nicht gefunden werden: %s" +msgid "Grob `%s' has no interface for property `%s'" +msgstr "Grob »%s« hat keine Schnittstelle für Eigenschaft »%s«" -#: translator-group.cc:146 +#: open-type-font.cc:44 #, c-format -msgid "cannot find: `%s'" -msgstr "»%s« kann nicht gefunden werden" +msgid "cannot allocate %lu bytes" +msgstr "es können keine %lu Bytes angefordert werden" -#: translator.cc:347 +#: open-type-font.cc:48 #, c-format -msgid "Two simultaneous %s events, junking this one" -msgstr "Zwei gleichzeitige %s-Ereignisse, dieses wird verworfen" +msgid "cannot load font table: %s" +msgstr "Schriftarttabelle kann nicht geladen werden: %s" -#: translator.cc:348 +#: open-type-font.cc:53 #, c-format -msgid "Previous %s event here" -msgstr "Vorheriges %s-Ereignis hier" - -#: trill-spanner-engraver.cc:85 -msgid "cannot find start of trill spanner" -msgstr "Anfang der Trillerklammer kann nicht gefunden werden" - -#: trill-spanner-engraver.cc:98 -msgid "already have a trill spanner" -msgstr "Trillerklammer bereits aktiv" +msgid "FreeType error: %s" +msgstr "FreeType-Fehler: %s" -#: tuplet-engraver.cc:96 -msgid "No tuplet to end" -msgstr "Keine rhythmische Gruppe zu beenden" - -#: vaticana-ligature-engraver.cc:389 +#: open-type-font.cc:111 #, c-format -msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style" -msgstr "Vorzeichen (es) »%s« dieses Kopfes gemäß den Einschränkungen des ausgewählten Ligaturstils ignoriert" +msgid "unsupported font format: %s" +msgstr "nicht unterstütztes Schriftartformat: %s" -#: vaticana-ligature-engraver.cc:718 +#: open-type-font.cc:113 #, c-format -msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" -msgstr "Vaticana_ligature_engraver: setzen »spacing-increment = %f«: ptr=%ul" - -#: vaticana-ligature.cc:84 -msgid "flexa-height undefined; assuming 0" -msgstr "flexa-Höhe nicht definiert: 0 angenommen" - -#: vaticana-ligature.cc:89 -msgid "ascending vaticana style flexa" -msgstr "aufsteigender Vaticana-Stil flexa" - -#: vaticana-ligature.cc:177 -msgid "Vaticana_ligature: zero join (delta_pitch == 0)" -msgstr "Vaticana_ligature: nichts zusammengefügt (delta_pitch == 0)" - -#. fixme: be more verbose. -#: volta-engraver.cc:100 -msgid "cannot end volta spanner" -msgstr "Volta-Klammer kann nicht beendet werden" +msgid "error reading font file %s: %s" +msgstr "Fehler beim Lesen der Schriftartdatei: %s: %s" -#: volta-engraver.cc:110 -msgid "already have a volta spanner, ending that one prematurely" -msgstr "Wiederholungsklammer bereits vorhanden, wird vorzeitig beendet" +#: open-type-font.cc:188 +#, c-format +msgid "FT_Get_Glyph_Name () Freetype error: %s" +msgstr "FT_Get_Glyph_Name() Freetype-Fehler: %s" -#: volta-engraver.cc:114 -msgid "also already have an ended spanner" -msgstr "endende Textklammer auch bereits vorhanden" +#: midi-stream.cc:39 +#, c-format +msgid "cannot open for write: %s: %s" +msgstr "Es kann nicht zum Schreiben geöffnet werden: %s: %s" -#: volta-engraver.cc:115 -msgid "giving up" -msgstr "aufgeben" +#: midi-stream.cc:55 +#, c-format +msgid "cannot write to file: `%s'" +msgstr "Es kann nicht in Datei geschrieben werden: »%s«" -#: parser.yy:804 +#: parser.yy:820 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "\\paper kann nicht in \\source verwendet werden; stattdessen \\layout verwenden" -#: parser.yy:828 +#: parser.yy:844 msgid "need \\paper for paper block" msgstr "Für Papier-Block wird \\paper benötigt" -#: parser.yy:1299 +#: parser.yy:1363 +msgid "only \\consists takes non-string argument." +msgstr "nur \\consists versteht ein Nicht-Zeichenketten-Argument" + +#: parser.yy:1376 msgid "Grob name should be alphanumeric" msgstr "Grob-Name sollte alphanumerisch sein" -#: parser.yy:1597 +#: parser.yy:1685 msgid "second argument must be pitch list" msgstr "zweites Argument muss eine Tonhöhenliste sein" -#: parser.yy:1624 parser.yy:1629 parser.yy:2101 +#: parser.yy:1716 parser.yy:1721 parser.yy:2194 msgid "have to be in Lyric mode for lyrics" msgstr "muss in Liedtextmodus sein um Liedtext setzen zu können" -#: parser.yy:1726 +#: parser.yy:1818 msgid "expecting string as script definition" msgstr "Zeichenkette als Skriptdefinition erwartet" -#: parser.yy:1881 parser.yy:1931 +#: parser.yy:1973 parser.yy:2024 #, c-format msgid "not a duration: %d" msgstr "keine gültige Dauer: %d" -#: parser.yy:2055 +#: parser.yy:2148 msgid "have to be in Note mode for notes" msgstr "Muss im Notenmodus sein für Noten" -#: parser.yy:2116 +#: parser.yy:2209 msgid "have to be in Chord mode for chords" msgstr "Muss im Akkordmodus sein für Akkorde" -#: lexer.ll:179 +#: lexer.ll:190 msgid "stray UTF-8 BOM encountered" msgstr "verirrtes UTF-8 BOM gefunden" -#: lexer.ll:183 +#: lexer.ll:194 msgid "Skipping UTF-8 BOM" msgstr "UTF-8 BOM wird übersprungen" -#: lexer.ll:238 +#: lexer.ll:249 #, c-format msgid "Renaming input to: `%s'" msgstr "Eingabe in »%s« umbenannt" -#: lexer.ll:255 +#: lexer.ll:266 msgid "quoted string expected after \\version" msgstr "zitierte Zeichenkette hinter \\version erwartet" -#: lexer.ll:259 -msgid "quoted string expected after \\sourcefilename" -msgstr "zitierte Zeichenkette hinter \\sourcefilename erwartet" +#: lexer.ll:270 +msgid "quoted string expected after \\sourcefilename" +msgstr "zitierte Zeichenkette hinter \\sourcefilename erwartet" + +#: lexer.ll:274 +msgid "integer expected after \\sourcefileline" +msgstr "Ganzzahl hinter \\sourcefilename erwartet" + +#: lexer.ll:287 +msgid "EOF found inside a comment" +msgstr "EOF innerhalb eines Kommentares gefunden" + +#: lexer.ll:302 +msgid "\\maininput not allowed outside init files" +msgstr "\\maininput ist außerhalb von Init-Dateien nicht erlaubt" + +#: lexer.ll:326 +#, c-format +msgid "wrong or undefined identifier: `%s'" +msgstr "falscher oder ungültiger Bezeichner: »%s«" + +#. backup rule +#: lexer.ll:335 +msgid "end quote missing" +msgstr "schließendes Anführungszeichen fehlt" + +#: lexer.ll:485 +msgid "Brace found at end of lyric. Did you forget a space?" +msgstr "Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?" + +#: lexer.ll:595 +msgid "Brace found at end of markup. Did you forget a space?" +msgstr "Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?" + +#: lexer.ll:699 +#, c-format +msgid "invalid character: `%c'" +msgstr "Ungültiges Zeichen: »%c«" + +#: lexer.ll:814 lexer.ll:815 +#, c-format +msgid "unknown escaped string: `\\%s'" +msgstr "Ungültige Fluchtsequenz: »\\%s«" + +#: lexer.ll:924 lexer.ll:925 +#, c-format +msgid "file too old: %s (oldest supported: %s)" +msgstr "Datei zu alt: %s (älteste unterstützte: %s)" + +#: lexer.ll:925 lexer.ll:926 +msgid "consider updating the input with the convert-ly script" +msgstr "Erwägen Sie die Aktualisierung der Eingabe mit dem Skript convert-ly" + +#: lexer.ll:931 lexer.ll:932 +#, c-format +msgid "program too old: %s (file requires: %s)" +msgstr "Programm zu alt: %s (Datei erfordert: %s)" + +#: documentation-lib.scm:59 +#, scheme-format +msgid "Processing ~S..." +msgstr "~S wird verarbeitet..." + +#: documentation-lib.scm:176 +#, scheme-format +msgid "Writing ~S..." +msgstr "~S wird geschrieben..." + +#: documentation-lib.scm:198 +#, scheme-format +msgid "cannot find description for property ~S (~S)" +msgstr "Beschreibung für Eigenschaft ~S (~S) kann nicht gefunden werden" + +#: parser-clef.scm:141 parser-clef.scm:181 +#, scheme-format +msgid "unknown clef type `~a'" +msgstr "unbekannter Notenschlüsseltyp »~a«" + +#: parser-clef.scm:142 parser-clef.scm:182 +#, scheme-format +msgid "supported clefs: ~a" +msgstr "unterstützte Notenschlüssel: ~a" + +#: document-backend.scm:132 +#, scheme-format +msgid "pair expected in doc ~s" +msgstr "Paar erwartet in doc ~s" + +#: document-backend.scm:189 +#, scheme-format +msgid "cannot find interface for property: ~S" +msgstr "Schnittstelle für Eigenschaft ~S kann nicht gefunden werden" + +#: document-backend.scm:199 +#, scheme-format +msgid "unknown Grob interface: ~S" +msgstr "Unbekannte Grob-Schnittstelle: ~S" + +#: framework-eps.scm:108 +#, scheme-format +msgid "Writing ~a..." +msgstr "~a wird geschrieben..." + +#: define-music-properties.scm:21 define-grob-properties.scm:21 +#: define-context-properties.scm:31 +#, scheme-format +msgid "symbol ~S redefined" +msgstr "Symbol ~S redefiniert" + +#: paper.scm:115 +msgid "set-global-staff-size: not in toplevel scope" +msgstr "set-global-staff-size: Nicht auf höchster Ebene im Gültigkeitsbereich" + +#: paper.scm:296 +#, scheme-format +msgid "This is not a \\layout {} object, ~S" +msgstr "Dies ist kein \\layout {} Objekt, ~S" + +#: paper.scm:308 +#, scheme-format +msgid "Unknown paper size: ~a" +msgstr "Unbekannte Papiergröße: ~a" + +#. TODO: should raise (generic) exception with throw, and catch +#. that in parse-scm.cc +#: paper.scm:323 +msgid "Must use #(set-paper-size .. ) within \\paper { ... }" +msgstr "#(set-paper-size ..) muss innerhalb von \\paper { ... } verwendet werden" + +#: lily.scm:225 +msgid "Using (ice-9 curried-definitions) module\n" +msgstr "Benutze Modul (ice-9 curried-definitions)\n" + +#: lily.scm:230 +msgid "Guile 1.8\n" +msgstr "Guile 1.8\n" + +#: lily.scm:290 +#, scheme-format +msgid "cannot find: ~A" +msgstr "~A kann nicht gefunden werden" + +#: lily.scm:350 +#, scheme-format +msgid "wrong type for argument ~a. Expecting ~a, found ~s" +msgstr "falscher Typ für Argument ~a; ~a erwartet, ~s gefunden" + +#: lily.scm:716 +msgid "Compilation successfully completed" +msgstr "Kompilation erfolgreich beendet" + +#: lily.scm:717 +msgid "Compilation completed with warnings or errors" +msgstr "Kompilation mit Warnungen bzw. Fehlermeldungen beendet" + +#: lily.scm:779 +#, scheme-format +msgid "job ~a terminated with signal: ~a" +msgstr "Auftrag ~a mit Signal ~a beendet" + +#: lily.scm:782 +#, scheme-format +msgid "" +"logfile ~a (exit ~a):\n" +"~a" +msgstr "" +"Logdatei ~a (Ende ~a):\n" +"~a" + +#: lily.scm:804 lily.scm:882 +#, scheme-format +msgid "failed files: ~S" +msgstr "gescheiterte Dateien: ~S" -#: lexer.ll:263 -msgid "integer expected after \\sourcefileline" -msgstr "Ganzzahl hinter \\sourcefilename erwartet" +#: lily.scm:873 +#, scheme-format +msgid "Redirecting output to ~a..." +msgstr "Ausgabeumleitung nach ~a..." -#: lexer.ll:276 -msgid "EOF found inside a comment" -msgstr "EOF innerhalb eines Kommentares gefunden" +#: lily.scm:892 +#, scheme-format +msgid "Invoking `~a'...\n" +msgstr "»~a« wird aufgerufen...\n" -#: lexer.ll:291 -msgid "\\maininput not allowed outside init files" -msgstr "\\maininput ist außerhalb von Init-Dateien nicht erlaubt" +#: graphviz.scm:64 +#, scheme-format +msgid "Writing graph `~a'..." +msgstr "Graph »~a« wird geschrieben..." -#: lexer.ll:315 -#, c-format -msgid "wrong or undefined identifier: `%s'" -msgstr "falscher oder ungültiger Bezeichner: »%s«" +#: framework-svg.scm:84 +#, scheme-format +msgid "Updating font into: ~a" +msgstr "Schriftart wird nach ~a aktualisiert" -#. backup rule -#: lexer.ll:324 -msgid "end quote missing" -msgstr "schließendes Anführungszeichen fehlt" +#: layout-beam.scm:40 +#, scheme-format +msgid "Error in beam quanting. Expected (~S,~S) found ~S." +msgstr "Fehler bei Balkenzuschnitt. (~S,~S) erwartet, ~S gefunden." -#: lexer.ll:469 -msgid "Brace found at end of lyric. Did you forget a space?" -msgstr "Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?" +#: layout-beam.scm:54 +#, scheme-format +msgid "Error in beam quanting. Expected ~S 0, found ~S." +msgstr "Fehler bei Balkenzuschnitt. ~S 0 erwartet, ~S gefunden." -#: lexer.ll:584 -msgid "Brace found at end of markup. Did you forget a space?" -msgstr "Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?" +#: modal-transforms.scm:38 +msgid "'from' pitch not in scale; ignoring" +msgstr "ursprüngliche Tonhöhe, von der ausgegangen wird, nicht in Skala, wird ignoriert" -#: lexer.ll:688 -#, c-format -msgid "invalid character: `%c'" -msgstr "Ungültiges Zeichen: »%c«" +#: modal-transforms.scm:42 modal-transforms.scm:75 +msgid "'to' pitch not in scale; ignoring" +msgstr "Tonhöhe, zu der man geht, nicht in Skala, wird ignoriert" -#: lexer.ll:803 -#, c-format -msgid "unknown escaped string: `\\%s'" -msgstr "Ungültige Fluchtsequenz: »\\%s«" +#: modal-transforms.scm:46 +msgid "pitch to be transposed not in scale; ignoring" +msgstr "zu transponierende Tonhöhe nicht in Skala, wird ignoriert" -#: lexer.ll:910 -#, c-format -msgid "file too old: %s (oldest supported: %s)" -msgstr "Datei zu alt: %s (älteste unterstützte: %s)" +#: modal-transforms.scm:71 +msgid "'around' pitch not in scale; ignoring" +msgstr "Tonhöhe \"in der Nähe\" nicht in Skala, wird ignoriert" -#: lexer.ll:911 -msgid "consider updating the input with the convert-ly script" -msgstr "Erwägen Sie die Aktualisierung der Eingabe mit dem Skript convert-ly" +#: modal-transforms.scm:79 +msgid "pitch to be inverted not in scale; ignoring" +msgstr "Tonhöhe, die umgekehrt wird, nicht in Skala, wird ignoriert" -#: lexer.ll:917 -#, c-format -msgid "program too old: %s (file requires: %s)" -msgstr "Programm zu alt: %s (Datei erfordert: %s)" +#: modal-transforms.scm:95 +msgid "negative replication count; ignoring" +msgstr "negativer Replikationszähler, wird ignoriert" -#: backend-library.scm:19 lily.scm:761 ps-to-png.scm:58 +#: backend-library.scm:29 ps-to-png.scm:68 #, scheme-format msgid "Invoking `~a'..." msgstr "»~s« wird aufgerufen..." -#: backend-library.scm:28 +#: backend-library.scm:34 #, scheme-format msgid "`~a' failed (~a)" msgstr "»~a« gescheitert (~a)" -#: backend-library.scm:116 +#: backend-library.scm:94 #, scheme-format msgid "Converting to `~a'..." msgstr "Konvertierung nach »~a«..." #. Do not try to guess the name of the png file, #. GS produces PNG files like BASE-page%d.png. -#: backend-library.scm:128 +#: backend-library.scm:104 #, scheme-format msgid "Converting to ~a..." msgstr "Konvertierung nach ~a..." -#: backend-library.scm:166 +#: backend-library.scm:142 #, scheme-format msgid "Writing header field `~a' to `~a'..." msgstr "Kopfzeile »~a« wird nach »~a« geschrieben" -#: define-context-properties.scm:20 define-grob-properties.scm:10 -#: define-music-properties.scm:10 +#: backend-library.scm:192 #, scheme-format -msgid "symbol ~S redefined" -msgstr "Symbol ~S redefiniert" +msgid "missing stencil expression `~S'" +msgstr "fehlender Stencil-Ausdruck »~S«" -#: define-event-classes.scm:119 +#: to-xml.scm:191 #, scheme-format -msgid "event class ~A seems to be unused" -msgstr "Ereignisklasse ~A scheint ungenutzt zu sein" +msgid "assertion failed: ~S" +msgstr "Behauptung gescheitert: ~S" -#. should be programming-error -#: define-event-classes.scm:125 +#: chord-entry.scm:49 #, scheme-format -msgid "translator listens to nonexisting event class ~A" -msgstr "Übersetzer hört auf fehlende Ereignisklasse ~A" +msgid "Spurious garbage following chord: ~A" +msgstr "Anscheinend sinnloser Text nach Akkord: ~A" -#: define-markup-commands.scm:569 -msgid "no systems found in \\score markup, does it have a \\layout block?" -msgstr "keine Systeme in \\score-Markup gefunden, hat es einen \\layout-Block?" +#: lily-library.scm:758 +msgid "" +"Find the index between @var{start} and @var{end} (an integer)\n" +"which produces the closest match to @var{target-val} if\n" +"applied to function @var{getter}." +msgstr "" +"Finde den Index zwischen @var{start} und @var{end} (eine ganze Zahl),\n" +"die den nächstmöglichen Treffer für @var{target-val} findet,\n" +"wenn auf die Funktion @var{getter} angewandt." -#: define-markup-commands.scm:2387 +#: lily-library.scm:832 #, scheme-format -msgid "Cannot find glyph ~a" -msgstr "Kann kein Zeichen ~a finden" +msgid "unknown unit: ~S" +msgstr "unbekannte Einheit: ~S" -#: define-markup-commands.scm:2696 +#: lily-library.scm:858 lily-library.scm:867 +msgid "warning:" +msgstr "Warnung:" + +#: lily-library.scm:860 #, scheme-format -msgid "not a valid duration string: ~a" -msgstr "keine gültige Dauer: ~a" +msgid "no \\version statement found, please add~afor future compatibility" +msgstr "keine \\version-Anweisung gefunden, ~a für zukünftige Kompatibilität hinzufügen" + +#: lily-library.scm:868 +msgid "old relative compatibility not used" +msgstr "alte relative Kompatibilität nicht verwendet" + +#: output-ps.scm:48 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Unendlich oder nan in Ausgabe gefunden. Wird durch 0.0 ersetzt" + +#: output-ps.scm:289 output-svg.scm:550 +#, scheme-format +msgid "unknown line-cap-style: ~S" +msgstr "unbekannter line-cap-style: ~S" + +#: output-ps.scm:294 output-svg.scm:556 +#, scheme-format +msgid "unknown line-join-style: ~S" +msgstr "unbekannter line-join-style: ~S" + +#: output-svg.scm:47 +#, scheme-format +msgid "undefined: ~S" +msgstr "nicht definiert: ~S" + +#: output-svg.scm:151 +#, scheme-format +msgid "cannot decypher Pango description: ~a" +msgstr "Pango-Beschreibung kann nicht entschlüsselt werden: ~a" + +#: output-svg.scm:231 +msgid "Glyph must have a unicode value" +msgstr "Das Zeichen muss einen Unicode-Wert haben" + +#: output-svg.scm:283 output-svg.scm:293 +#, scheme-format +msgid "cannot find SVG font ~S" +msgstr "SVG-Schriftart ~S kann nicht gefunden werden" -#: define-music-types.scm:670 +#: flag-styles.scm:148 +#, scheme-format +msgid "flag stroke `~a' or `~a' not found" +msgstr "Fähnchenstrich »~a«·or·»~a« nicht gefunden" + +#: define-note-names.scm:962 +msgid "Select note names language." +msgstr "Wählen Sie die Sprache der Notenbezeichnungen." + +#: define-note-names.scm:969 +#, scheme-format +msgid "Using `~a' note names..." +msgstr "Benutze Notenbezeichnung »~a«..." + +#: define-note-names.scm:972 +#, scheme-format +msgid "Could not find language `~a'. Ignoring." +msgstr "Konnte Sprache »~a« nicht finden. Wird ignoriert." + +#: define-music-types.scm:740 #, scheme-format msgid "symbol expected: ~S" msgstr "Symbol erwartet: ~S" -#: define-music-types.scm:673 +#: define-music-types.scm:743 #, scheme-format msgid "cannot find music object: ~S" msgstr "Musikobjekt kann nicht gefunden werden: ~S" -#: define-music-types.scm:692 +#: define-music-types.scm:762 #, scheme-format msgid "unknown repeat type `~S'" msgstr "unbekannter Wiederholungstyp »~S«" -#: define-music-types.scm:693 +#: define-music-types.scm:763 msgid "See define-music-types.scm for supported repeats" msgstr "Siehe define-music-types.scm für unterstützte Wiederholungen" -#: document-backend.scm:99 -#, scheme-format -msgid "pair expected in doc ~s" -msgstr "Paar erwartet in doc ~s" - -#: document-backend.scm:154 -#, scheme-format -msgid "cannot find interface for property: ~S" -msgstr "Schnittstelle für Eigenschaft ~S kann nicht gefunden werden" - -#: document-backend.scm:164 +#: translation-functions.scm:341 #, scheme-format -msgid "unknown Grob interface: ~S" -msgstr "Unbekannte Grob-Schnittstelle: ~S" +msgid "Negative fret for pitch ~a on string ~a" +msgstr "Negativer Bund für Tonhöhe ~a auf Saite ~a" -#: documentation-lib.scm:49 +#: translation-functions.scm:385 #, scheme-format -msgid "Processing ~S..." -msgstr "~S wird verarbeitet..." +msgid "No open string for pitch ~a" +msgstr "Keine leere Saite für Tonhöhe ~a" -#: documentation-lib.scm:165 +#: translation-functions.scm:400 #, scheme-format -msgid "Writing ~S..." -msgstr "~S wird geschrieben..." +msgid "Requested string for pitch requires negative fret: string ~a pitch ~a" +msgstr "Geforderte Saite für Tonhöhe erfordert negativen Bund: Saite ~a Tonhöhe ~a" -#: documentation-lib.scm:187 -#, scheme-format -msgid "cannot find description for property ~S (~S)" -msgstr "Beschreibung für Eigenschaft ~S (~S) kann nicht gefunden werden" +#: translation-functions.scm:401 +msgid "Ignoring string request." +msgstr "Saiten-Anforderung wird ignoriert." -#: flag-styles.scm:145 +#: translation-functions.scm:414 #, scheme-format -msgid "flag stroke `~a' or `~a' not found" -msgstr "Fähnchenstrich »~a«·or·»~a« nicht gefunden" +msgid "No string for pitch ~a (given frets ~a)" +msgstr "Keine Saite für Tonhöhe ~a (Bund ~a angegeben)" -#: framework-eps.scm:90 +#: translation-functions.scm:515 #, scheme-format -msgid "Writing ~a..." -msgstr "~a wird geschrieben..." +msgid "" +"No label for fret ~a (on string ~a);\n" +"only ~a fret labels provided" +msgstr "" +"Keine Beschriftung für Bund ~a (auf Saite ~a);\n" +"nur ~a Bundbeschriftung zur Verfügung" -#: framework-ps.scm:277 +#: framework-ps.scm:250 #, scheme-format msgid "cannot embed ~S=~S" msgstr "~S=~S kann nicht eingebettet werden" -#: framework-ps.scm:330 +#: framework-ps.scm:293 #, scheme-format msgid "cannot extract file matching ~a from ~a" msgstr "Eine zu ~a passende Datei kann nicht aus ~a gewonnen werden" -#: framework-ps.scm:347 +#: framework-ps.scm:311 #, scheme-format msgid "do not know how to embed ~S=~S" msgstr "Unbekannte Einbettung ~S=~S" -#: framework-ps.scm:378 +#: framework-ps.scm:336 #, scheme-format msgid "do not know how to embed font ~s ~s ~s" msgstr "Unbekannte Schriftsatzeinbettung ~s ~s ~s" -#: framework-ps.scm:748 -#, scheme-format -msgid "cannot convert to ~S" -msgstr " kann nicht in ~S konvertiert werden" - -#: framework-ps.scm:771 +#: framework-ps.scm:669 msgid "" "\n" -"The PostScript backend does not support the system-by-system \n" -"output. For that, use the EPS backend instead,\n" +"The PostScript backend does not support the\n" +"system-by-system output. For that, use the EPS backend instead,\n" "\n" " lilypond -dbackend=eps FILE\n" "\n" @@ -2772,7 +3378,7 @@ msgid "" " %% ****************************************************************\n" msgstr "" "\n" -"Das PostScript-Backend unterstützt keine System-weise Ausgabe. Dafür sollte\n" +"Das PostScript-Backend unterstützt keine System-weise Ausgabe. Dafür sollte\n" "das EPS-Backend verwendet werden,\n" "\n" " lilypond -dbackend=eps \n" @@ -2784,187 +3390,178 @@ msgstr "" " %% ****************************************************************\n" "\n" "entfernt werden\n" -"\n" -#: graphviz.scm:53 -#, scheme-format -msgid "Writing graph `~a'..." -msgstr "Graph ~a wird geschrieben..." +#: music-functions.scm:268 +msgid "More alternatives than repeats. Junking excess alternatives" +msgstr "mehr Alternativen als Wiederholungen. Überschüssige Alternativen werden verworfen" -#: layout-beam.scm:29 +#: music-functions.scm:297 #, scheme-format -msgid "Error in beam quanting. Expected (~S,~S) found ~S." -msgstr "Fehler bei Balkenzuschnitt. (~S,~S) erwartet, ~S gefunden." +msgid "invalid tremolo repeat count: ~a" +msgstr "ungültige Tremolo-Wiederholung: ~a" -#: layout-beam.scm:43 +#: music-functions.scm:618 #, scheme-format -msgid "Error in beam quanting. Expected ~S 0, found ~S." -msgstr "Fehler bei Balkenzuschnitt. ~S 0 erwartet, ~S gefunden." - -#: layout-page-layout.scm:126 -msgid "Can't fit systems on page -- ignoring between-system-padding" -msgstr "Systeme passen nicht auf Seite -- Zwischen-System-Abstand wird ignoriert" +msgid "music expected: ~S" +msgstr "Musik erwartet: ~S" -#: lily-library.scm:602 +#. FIXME: uncomprehensable message +#: music-functions.scm:662 #, scheme-format -msgid "unknown unit: ~S" -msgstr "unbekannte Einheit: ~S" +msgid "Bar check failed. Expect to be at ~a, instead at ~a" +msgstr "Taktüberprüfung gescheitert. bei ~a erwartet, stattdessen bei ~a" -#: lily-library.scm:636 +#: music-functions.scm:846 #, scheme-format -msgid "no \\version statement found, please add~afor future compatibility" -msgstr "keine \\version-Anweisung gefunden, ~a für zukünftige Kompatibilität hinzufügen" +msgid "cannot find quoted music: `~S'" +msgstr "zitierte Musik »~S« kann nicht gefunden werden" -#: lily-library.scm:644 -msgid "old relative compatibility not used" -msgstr "alte relative Kompatibilität nicht verwendet" +#: music-functions.scm:982 +msgid "Add @var{octave-shift} to the octave of @var{pitch}." +msgstr "Füge @var{octave-shift} zur Oktave von @var{pitch} hinzu." -#: lily.scm:179 +#: music-functions.scm:1037 #, scheme-format -msgid "cannot find: ~A" -msgstr "~A kann nicht gefunden werden" +msgid "Unknown octaveness type: ~S " +msgstr "Unbekannter Oktaven-Typ: »~S«" -#: lily.scm:228 -#, scheme-format -msgid "wrong type for argument ~a. Expecting ~a, found ~s" -msgstr "falscher Typ für Argument ~a; ~a erwartet, ~s gefunden" +#: music-functions.scm:1038 +msgid "Defaulting to 'any-octave." +msgstr "Setze Standard 'any-octave" -#: lily.scm:625 +#: music-functions.scm:1378 #, scheme-format -msgid "job ~a terminated with signal: ~a" -msgstr "Auftrag ~a mit Signal ~a beendet" +msgid "unknown accidental style: ~S" +msgstr "unbekannter Versetzungszeichenstil: ~S" -#: lily.scm:628 -#, scheme-format -msgid "" -"logfile ~a (exit ~a):\n" -"~a" -msgstr "" -"Logdatei ~a (Ende ~a):\n" -"~a" +#: define-event-classes.scm:79 +msgid "All classes must be the last in their matrilineal line." +msgstr "Alle Klassen müssen die letzten in ihrer matrilinearen Linie sein" -#: lily.scm:653 lily.scm:751 -#, scheme-format -msgid "failed files: ~S" -msgstr "gescheiterte Dateien: ~S" +#: define-event-classes.scm:83 +msgid "All classes must have a well-defined pedigree in the existing class hierarchy." +msgstr "Alle Klassen müssen gut-definierte Abstammungen in der existierenden Klassenhierarchie haben." -#: lily.scm:741 +#: define-event-classes.scm:149 #, scheme-format -msgid "Redirecting output to ~a..." -msgstr "Ausgabeumleitung nach ~a..." - -#: ly-syntax-constructors.scm:40 -msgid "Music head function must return Music object" -msgstr "Musikkopf-Funktion muss Musikobjekt zurückliefern." +msgid "event class ~A seems to be unused" +msgstr "Ereignisklasse ~A scheint ungenutzt zu sein" -#: ly-syntax-constructors.scm:154 +#. should be programming-error +#: define-event-classes.scm:155 #, scheme-format -msgid "Invalid property operation ~a" -msgstr "Ungültige Eigenschaftsoperation ~a" +msgid "translator listens to nonexisting event class ~A" +msgstr "Übersetzer hört auf fehlende Ereignisklasse ~A" -#: markup.scm:204 +#: markup.scm:223 #, scheme-format msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" msgstr "Falsche Anzahl an Argumenten: ~A erwartet, ~A gefunden: ~S" -#: markup.scm:210 +#: markup.scm:229 #, scheme-format msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." msgstr "Ungültiges Argument an Position ~A. ~A erwartet, ~S gefunden." -#: markup.scm:274 +#: markup.scm:292 #, scheme-format msgid "Not a markup command: ~A" msgstr "Kein Textbeschriftungsbefehl: ~A" -#: music-functions.scm:228 -msgid "More alternatives than repeats. Junking excess alternatives" -msgstr "mehr Alternativen als Wiederholungen. Überschüssige Alternativen werden verworfen" - -#: music-functions.scm:240 +#: ps-to-png.scm:74 #, scheme-format -msgid "invalid tremolo repeat count: ~a" -msgstr "ungültige Tremolo-Wiederholung: ~a" +msgid "~a exited with status: ~S" +msgstr "~a mit Rückgabewert ~S beendet" -#: music-functions.scm:248 -#, scheme-format -msgid "expecting 2 elements for chord tremolo, found ~a" -msgstr "2 Elemente für Akkord-Tremolo erwartet, ~a gefunden" +#: define-markup-commands.scm:803 +msgid "no systems found in \\score markup, does it have a \\layout block?" +msgstr "keine Systeme in \\score-Markup gefunden, hat es einen \\layout-Block?" -#: music-functions.scm:575 +#: define-markup-commands.scm:2404 #, scheme-format -msgid "music expected: ~S" -msgstr "Musik erwartet: ~S" +msgid "Cannot find glyph ~a" +msgstr "Kann kein Zeichen ~a finden" -#. FIXME: uncomprehensable message -#: music-functions.scm:625 +#: define-markup-commands.scm:2830 #, scheme-format -msgid "Bar check failed. Expect to be at ~a, instead at ~a" -msgstr "Taktüberprüfung gescheitert. bei ~a erwartet, stattdessen bei ~a" +msgid "no brace found for point size ~S " +msgstr "Keine Klammer in Größe ~S pt gefunden" -#: music-functions.scm:793 +#: define-markup-commands.scm:2831 #, scheme-format -msgid "cannot find quoted music: `~S'" -msgstr "zitierte Musik »~S« kann nicht gefunden werden" +msgid "defaulting to ~S pt" +msgstr "Setze Standard ~S pt" -#: music-functions.scm:1198 +#: define-markup-commands.scm:2984 #, scheme-format -msgid "unknown accidental style: ~S" -msgstr "unbekannter Versetzungszeichenstil: ~S" +msgid "not a valid duration string: ~a" +msgstr "keine gültige Dauer: ~a" -#: output-ps.scm:294 -msgid "utf-8-string encountered in PS backend" -msgstr "UTF-8-Zeichenkette in PostScript-Backend gefunden" +#: ly-syntax-constructors.scm:51 +msgid "Music head function must return Music object" +msgstr "Musikkopf-Funktion muss Musikobjekt zurückliefern." -#: output-svg.scm:45 +#: ly-syntax-constructors.scm:177 #, scheme-format -msgid "undefined: ~S" -msgstr "nicht definiert: ~S" +msgid "Invalid property operation ~a" +msgstr "Ungültige Eigenschaftsoperation ~a" -#: output-svg.scm:135 -#, scheme-format -msgid "cannot decypher Pango description: ~a" -msgstr "Pango-Beschreibung kann nicht entschlüsselt werden: ~a" +#~ msgid "vertical spacing has been changed; minimum-Y-extent is obsolete.\n" +#~ msgstr "vertikale Abstände wurden geändert; minimum-Y-extent ist obsolet.\n" -#: paper.scm:104 -msgid "set-global-staff-size: not in toplevel scope" -msgstr "set-global-staff-size: Nicht auf höchster Ebene im Gültigkeitsbereich" +#~ msgid "no feasible beam position" +#~ msgstr "Keine praktikable Balkenposition" -#: paper.scm:244 -#, scheme-format -msgid "This is not a \\layout {} object, ~S" -msgstr "Dies ist kein \\layout {} Objekt, ~S" +#~ msgid "Invalid index for character" +#~ msgstr "Ungültiger Index für Zeichen" -#: paper.scm:256 -#, scheme-format -msgid "Unknown paper size: ~a" -msgstr "Unbekannte Papiergröße: ~a" +#~ msgid "Tuplet brackets displaying both note durations are not implemented, using default" +#~ msgstr "N-tolen-Klammern, die beide Notendauern darstellen, sind nicht implementiert, benutze Standard" -#. TODO: should raise (generic) exception with throw, and catch -#. that in parse-scm.cc -#: paper.scm:271 -msgid "Must use #(set-paper-size .. ) within \\paper { ... }" -msgstr "#(set-paper-size ..) muss innerhalb von \\paper { ... } verwendet werden" +#~ msgid "run executable PROG instead of latex" +#~ msgstr "benutze ausführbare Datei PROG anstelle von latex" -#: parser-clef.scm:129 -#, scheme-format -msgid "unknown clef type `~a'" -msgstr "unbekannter Notenschlüsseltyp »~a«" +#~ msgid "Encountered file created by Noteworthy Composer's nwc2xml, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" +#~ msgstr "Die Datei wurde von Noteworthy·Composer's·nwc2xml erstellt und enthält falsche Balkeninformation. Alle Balkeninformation in der MusicXML-Datei wird ignoriert" -#: parser-clef.scm:130 -#, scheme-format -msgid "supported clefs: ~a" -msgstr "unterstützte Notenschlüssel: ~a" +#~ msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly" +#~ msgstr "benutze eine andere Sprach-Datei 'SPRA.ly' und entsprechende Notenbezeichnungen, etwa 'deutsch' für deutsch.ly" -#: ps-to-png.scm:64 -#, scheme-format -msgid "~a exited with status: ~S" -msgstr "~a mit Rückgabewert ~S beendet" +#~ msgid "tried to get a translation for something that is no child of mine" +#~ msgstr "Versuch, eine Übersetzung für etwas zu finden, das nicht mein Kind ist" -#: to-xml.scm:180 -#, scheme-format -msgid "assertion failed: ~S" -msgstr "Behauptung gescheitert: ~S" +#~ msgid "expect 2 elements for chord tremolo, found %d" +#~ msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden" + +#~ msgid "program has no such type: `%s'" +#~ msgstr "Das Programm hat keinen solchen Typen: »%s«" + +#~ msgid "Rebuilding FontConfig cache %s, this may take a while..." +#~ msgstr "FontConfig-Cache %s wird erneuert. Dies kann eine Weile dauern..." + +#~ msgid "deprecated function called: %s" +#~ msgstr "veraltete Funktion aufgerufen: %s" + +#~ msgid "staff-span event has no direction" +#~ msgstr "Systemabstandsereignis hat keine Richtung" + +#~ msgid "cannot find start of trill spanner" +#~ msgstr "Anfang der Trillerklammer kann nicht gefunden werden" + +#~ msgid "already have a trill spanner" +#~ msgstr "Trillerklammer bereits aktiv" + +#~ msgid "cannot convert to ~S" +#~ msgstr " kann nicht in ~S konvertiert werden" + +#~ msgid "Can't fit systems on page -- ignoring between-system-padding" +#~ msgstr "Systeme passen nicht auf Seite -- Zwischen-System-Abstand wird ignoriert" + +#~ msgid "expecting 2 elements for chord tremolo, found ~a" +#~ msgstr "2 Elemente für Akkord-Tremolo erwartet, ~a gefunden" + +#~ msgid "utf-8-string encountered in PS backend" +#~ msgstr "UTF-8-Zeichenkette in PostScript-Backend gefunden" #~ msgid "requested time signature, but time sig is unknown" #~ msgstr "Taktangabe angefragt, aber Taktart ist unbekannt" @@ -3344,9 +3941,6 @@ msgstr "Behauptung gescheitert: ~S" #~ "Schema-Option setzen, für Hilfe\n" #~ " -e '(ly:option-usage)'" -#~ msgid "run in safe mode" -#~ msgstr "im sicheren Modus laufen lassen" - #~ msgid "can't handle a percent repeat of length: %s" #~ msgstr "Prozentwiederholung der Länge %s kann nicht behandelt werden" @@ -3467,9 +4061,6 @@ msgstr "Behauptung gescheitert: ~S" #~ msgid "use LaTeX for formatting" #~ msgstr "LaTeX für Formatierung verwenden" -#~ msgid "print even more output" -#~ msgstr "noch mehr Ausgabe erzeugen" - #~ msgid "find pfa fonts used in FILE" #~ msgstr "PFA-Schriftarten, welche in DATEI verwendet werden, finden" @@ -3735,9 +4326,6 @@ msgstr "Behauptung gescheitert: ~S" #~ msgid "#" #~ msgstr "#" -#~ msgid "\\apply takes function argument" -#~ msgstr "\\apply benötigt Funktionsargument" - #~ msgid " 1998--2003" #~ msgstr "1998--2003" diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000000..62b018a995 --- /dev/null +++ b/po/el.po @@ -0,0 +1,3413 @@ +# Greek translation for lilypond. +# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the lilypond package. +# Michael Kotsarinis , 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: lilypond-2.13.48\n" +"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" +"POT-Creation-Date: 2010-12-06 22:30+0100\n" +"PO-Revision-Date: 2011-02-14 09:29+0200\n" +"Last-Translator: Michael Kotsarinis \n" +"Language-Team: Greek \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Virtaal 0.6.1\n" +"X-Poedit-Language: Greek\n" +"X-Poedit-Country: GREECE\n" + +#: book_base.py:24 +#, python-format +msgid "file not found: %s" +msgstr "δεν βρέθηκε το αρχείο: %s" + +#: book_base.py:161 +msgid "Output function not implemented" +msgstr "Δεν έχει υλοποιηθεί η λειτουργία εξόδου" + +#: book_latex.py:156 +msgid "cannot find \\begin{document} in LaTeX document" +msgstr "αδυναμία εύρεσης \\begin{document} σε έγγραφο LaTeX" + +#: book_snippets.py:517 +#, python-format +msgid "deprecated ly-option used: %s=%s" +msgstr "χρησιμοποιήθηκε παρωχημένη ly-option: %s=%s" + +#: book_snippets.py:519 +#, python-format +msgid "compatibility mode translation: %s=%s" +msgstr "μετάφραση σε κατάσταση συμβατότητας: %s=%s" + +#: book_snippets.py:522 +#, python-format +msgid "deprecated ly-option used: %s" +msgstr "χρησιμοποιήθηκε παρωχημένη ly-option: %s" + +#: book_snippets.py:524 +#, python-format +msgid "compatibility mode translation: %s" +msgstr "μετάφραση σε κατάσταση συμβατότητας: %s" + +#: book_snippets.py:542 +#, python-format +msgid "ignoring unknown ly option: %s" +msgstr "αγνόηση άγνωστης επιλογής ly: %s" + +#: book_snippets.py:728 +#, python-format +msgid "Opening filter `%s'\n" +msgstr "Άνοιγμα φίλτρου `%s'\n" + +#: book_snippets.py:748 +#, python-format +msgid "`%s' failed (%d)" +msgstr "`%s' απέτυχε (%d)" + +#: book_snippets.py:749 +msgid "The error log is as follows:" +msgstr "Η καταγραφή σφάλματος έχει ως ακολούθως:" + +#: convertrules.py:12 +#, python-format +msgid "Not smart enough to convert %s" +msgstr "Όχι αρκετά έξυπνο για μετατροπή %s" + +#: convertrules.py:13 +msgid "Please refer to the manual for details, and update manually." +msgstr "Παρακαλώ, δείτε το εγχειρίδιο για λεπτομέρειες και ενημερώστε χειροκίνητα." + +#: convertrules.py:14 +#, python-format +msgid "%s has been replaced by %s" +msgstr "%s αντικαταστάθηκε από %s" + +#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66 +#: input.cc:109 +#, c-format, python-format +msgid "warning: %s" +msgstr "προειδοποίηση: %s" + +#: convertrules.py:49 convertrules.py:99 +msgid "\\header { key = concat + with + operator }" +msgstr "\\header { key = concat + with + operator }" + +#: convertrules.py:58 +#, python-format +msgid "deprecated %s" +msgstr "παρωχημένο %s" + +#: convertrules.py:70 +msgid "deprecated \\textstyle, new \\key syntax" +msgstr "παρωχημένο \\textstyle, νέο \\key syntax" + +#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084 +#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862 +msgid "bump version for release" +msgstr "επόμενος αριθμός έκδοσης για κυκλοφορία" + +#: convertrules.py:103 +msgid "new \\header format" +msgstr "νέα μορφή \\header" + +#: convertrules.py:132 +msgid "\\translator syntax" +msgstr "συντακτικό \\translator" + +#: convertrules.py:184 +msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" +msgstr "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" + +#: convertrules.py:216 convertrules.py:699 convertrules.py:1383 +#: convertrules.py:2378 +#, python-format +msgid "deprecate %s" +msgstr "%s να γίνει παρωχημένο" + +#: convertrules.py:290 +#, python-format +msgid "deprecate %s " +msgstr "%s να γίνει παρωχημένο" + +#: convertrules.py:319 +msgid "new \\notenames format" +msgstr "νέο μορφή \\notenames" + +#: convertrules.py:337 +msgid "new tremolo format" +msgstr "νέα μορφή τρέμολο" + +#: convertrules.py:342 +msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver" +msgstr "Staff_margin_engraver παρωχημένος, χρησιμοποιήστε το Instrument_name_engraver" + +#: convertrules.py:395 +msgid "change property definiton case (eg. onevoice -> oneVoice)" +msgstr "αλλαγή σε κεφαλαίο του ορισμού ιδιότητας (πχ onevoice -> oneVoice)" + +#: convertrules.py:457 +msgid "new \\textscript markup text" +msgstr "νέο κείμενο επισήμανσης \\textscript" + +#: convertrules.py:530 +#, python-format +msgid "identifier names: %s" +msgstr "ονόματα ταυτοποιητή: %s" + +#: convertrules.py:569 +msgid "point-and-click argument changed to procedure." +msgstr "το όρισμα κατάδειξη και κλικ άλλαξε σε διαδικασία." + +#: convertrules.py:611 +msgid "semicolons removed" +msgstr "αφαιρέθηκαν τα ερωτηματικά (;)" + +#. 40 ? +#: convertrules.py:654 +#, python-format +msgid "%s property names" +msgstr "ονόματα ιδιότητας %s" + +#: convertrules.py:724 +msgid "automaticMelismata turned on by default" +msgstr "automaticMelismata ενεργοποιημένο ως προεπιλογή" + +#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942 +#: convertrules.py:2189 +#, python-format +msgid "remove %s" +msgstr "αφαίρεση %s" + +#: convertrules.py:1001 convertrules.py:1005 +msgid "cluster syntax" +msgstr "συντακτικό συστοιχίας" + +#: convertrules.py:1014 +msgid "new Pedal style syntax" +msgstr "νέο συντακτικό για στυλ Πεντάλ" + +#: convertrules.py:1273 +msgid "" +"New relative mode,\n" +"Postfix articulations, new text markup syntax, new chord syntax." +msgstr "" +"Νέα σχετική κατάσταση,\n" +"αρθρώσεις Postfix, νέο συντακτικό για επισήμανση κειμένου, νέο συντακτικό συγχορδίας." + +#: convertrules.py:1286 +msgid "Remove - before articulation" +msgstr "Αφαίρεση - πριν την άρθρωση" + +#: convertrules.py:1324 +#, python-format +msgid "%s misspelling" +msgstr "%s λάθος γραφής" + +#: convertrules.py:1346 +msgid "Swap < > and << >>" +msgstr "Αντικατάσταση < > και << >>" + +#: convertrules.py:1349 +msgid "attempting automatic \\figures conversion. Check results!" +msgstr "προσπάθεια αυτόματης μετατροπής \\figures. Ελέγξτε το αποτέλεσμα!" + +#: convertrules.py:1400 +msgid "Use Scheme code to construct arbitrary note events." +msgstr "Χρησιμοποιήστε τον κώδικα Σχήματος για να δομήσετε αυθαίρετα γεγονότα με νότες." + +#: convertrules.py:1407 +msgid "" +"use symbolic constants for alterations,\n" +"remove \\outputproperty, move ly:verbose into ly:get-option" +msgstr "" +"χρησιμοποιήστε συμβολικές σταθερές για παραλλαγές,\n" +"αφαιρέστε το \\outputproperty, μετακινήστε το ly:verbose στο ly:get-option" + +#: convertrules.py:1432 +#, python-format +msgid "" +"\\outputproperty found,\n" +"Please hand-edit, using\n" +"\n" +" \\applyoutput #(outputproperty-compatibility %s '%s )\n" +"\n" +"as a substitution text." +msgstr "" +"βρέθηκε \\outputproperty,\n" +"Παρακαλώ διορθώστε με το χέρι, με χρήση\n" +"\n" +" \\applyoutput #(outputproperty-compatibility %s '%s )\n" +"\n" +"ως κειμένου υποκατάστασης." + +#: convertrules.py:1446 +msgid "" +"The alteration field of Scheme pitches was multiplied by 2\n" +"to support quarter tone accidentals. You must update the following constructs manually:\n" +"\n" +"* calls of ly:make-pitch and ly:pitch-alteration\n" +"* keySignature settings made with \\property\n" +msgstr "" +"Το πεδίο αλλοίωσης των οξυτήτων Scheme πολλαπλασιάστηκε επί 2\n" +"για να υποστηρίξει αλλοιώσεις τετάρτων του τόνου. Πρέπει να ενημερώσετε τις ακόλουθες δομές με το χέρι:\n" +"\n" +"* κλήσεις των ly:make-pitch και ly:pitch-alteration\n" +"* ρυθμίσεις keySignature που έγιναν με \\property\n" + +#: convertrules.py:1493 +msgid "removal of automaticMelismata; use melismaBusyProperties instead." +msgstr "αφαίρεση του automaticMelismata, χρησιμοποιήστε το melismaBusyProperties στη θέση του." + +#: convertrules.py:1600 +msgid "\\partcombine syntax change to \\newpartcombine" +msgstr "το συντακτικό \\partcombine αλλάζει σε \\newpartcombine" + +#: convertrules.py:1628 +msgid "" +"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n" +"Harmonic notes. Thread context removed. Lyrics context removed." +msgstr "" +"Αλλαγές σημειογραφίας τυμπάνου, Αφαίρεση \\chordmodifiers, \\notenames.\n" +"Αρμονικές νότες. Αφαιρέθηκε το περιεχόμενο νήματος. Αφαιρέθηκε το περιεχόμενο στίχων." + +#: convertrules.py:1632 +msgid "Drums found. Enclose drum notes in \\drummode" +msgstr "Βρέθηκαν τύμπανα. Περικλείστε τις νότες των τυμπάνων σε \\drummode" + +#: convertrules.py:1643 convertrules.py:1650 convertrules.py:1661 +#, python-format +msgid "" +"\n" +"%s found. Check file manually!\n" +msgstr "" +"\n" +" βρέθηκε %s. Ελέγξτε το αρχείο με το χέρι!\n" + +#: convertrules.py:1643 +msgid "Drum notation" +msgstr "Σημειογραφία τυμπάνου" + +#: convertrules.py:1702 +msgid "new syntax for property settings:" +msgstr "νέο συντακτικό για ρυθμίσεις ιδιοτήτων:" + +#: convertrules.py:1728 +msgid "Property setting syntax in \\translator{ }" +msgstr "Ιδιότητα που ορίζει το συντακτικό στο \\translator{ }" + +#: convertrules.py:1767 +msgid "Scheme grob function renaming" +msgstr "Μετονομασία λειτουργίας grob του Scheme" + +#: convertrules.py:1780 +#, python-format +msgid "use %s" +msgstr "χρησιμοποιήστε %s" + +#: convertrules.py:1797 +msgid "More Scheme function renaming" +msgstr "Περισσότερες μετονομασίες των λειτουργιών του Scheme" + +#: convertrules.py:1924 +msgid "" +"Page layout has been changed, using paper size and margins.\n" +"textheight is no longer used.\n" +msgstr "" +"Η διάταξη σελίδας άλλαξε, χρήση μεγέθους χαρτιού και περιθωρίων.\n" +"Το textheight δεν χρησιμοποιείται πλέον.\n" + +#: convertrules.py:2010 +msgid "" +"\\foo -> \\foomode (for chords, notes, etc.)\n" +"fold \\new FooContext \\foomode into \\foo." +msgstr "" +"\\foo -> \\foomode (για συγχορδίες, νότες κλπ.)\n" +"αναδίπλωση \\new FooContext \\foomode σε \\foo." + +#: convertrules.py:2048 +msgid "" +"staff size should be changed at top-level\n" +"with\n" +"\n" +" #(set-global-staff-size )\n" +"\n" +msgstr "" +"το μέγεθος του πενταγράμμου θα πρέπει να αλλαχθεί στο κορυφαίο επίπεδο\n" +"με\n" +"\n" +" #(set-global-staff-size )\n" +"\n" + +#: convertrules.py:2068 +msgid "regularize other identifiers" +msgstr "κανονικοποίηση άλλων ταυτοποιητών" + +#: convertrules.py:2136 +msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" +msgstr "\\encoding: έξυπνη επανακωδικοποίηση latin1..utf-8. Αφαίρεση ly:point-and-click" + +#: convertrules.py:2149 +msgid "LilyPond source must be UTF-8" +msgstr "Το πηγαίο του Lilypond πρέπει να είναι σε UTF-8" + +#: convertrules.py:2152 +msgid "Try the texstrings backend" +msgstr "Χρησιμοποιήστε το backend texstrings" + +#: convertrules.py:2155 +#, python-format +msgid "Do something like: %s" +msgstr "Κάντε κάτι όπως: %s" + +#: convertrules.py:2158 +msgid "Or save as UTF-8 in your editor" +msgstr "Ή αποθηκεύστε ως UTF-8 στον επεξεργαστή σας" + +#: convertrules.py:2212 +msgid "warn about auto beam settings" +msgstr "προειδοποίηση για ρυθμίσεις αυτόματης γραμμής ογδόου και μικρότερων αξιών" + +#: convertrules.py:2217 +msgid "auto beam settings" +msgstr "ρυθμίσεις αυτόματης γραμμής ογδόου" + +#: convertrules.py:2219 +msgid "" +"\n" +"Auto beam settings must now specify each interesting moment in a measure\n" +"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" +msgstr "" +"\n" +"Οι ρυθμίσεις για αυτόματη γραμμή ογδόου (και μικρότερων) πρέπει τώρα να καθορίζουν κάθε ενδιαφέρουσα στιγμή σε ένα μέτρο\n" +"επακριβώς. Tο 1/4 δεν πολλαπλασιάζεται πλέον για να καλύψει τις στιγμές 1/2 (στιγμή διαρκείας) και 3/4 (διπλή στιγμή διαρκείας) επίσης.\n" + +#: convertrules.py:2333 +msgid "verticalAlignmentChildCallback has been deprecated" +msgstr "το verticalAlignmentChildCallback είναι πλέον παρωχημένο" + +#: convertrules.py:2337 +msgid "Remove callbacks property, deprecate XY-extent-callback." +msgstr "Αφαίρεση της ιδιότητας callback, το XY-extent-callback είναι παρωχημένο." + +#: convertrules.py:2358 +msgid "Use grob closures iso. XY-offset-callbacks." +msgstr "Χρησιμοποιήστε grob closures iso. XY-offset-callbacks." + +#: convertrules.py:2420 +msgid "foobar -> foo-bar for \\paper, \\layout" +msgstr "foobar -> foo-bar για \\paper, \\layout" + +#: convertrules.py:2530 +msgid "deprecate \\tempo in \\midi" +msgstr "παρωχημένο \\tempo σε \\midi" + +#: convertrules.py:2583 +msgid "deprecate cautionary-style. Use AccidentalCautionary properties" +msgstr "παρωχημένο cautionary-style. Χρησιμοποιήστε ιδιότητες AccidentalCautionary" + +#: convertrules.py:2596 +msgid "Rename accidental glyphs, use glyph-name-alist." +msgstr "Μετονομασία των συμβόλων για αλλοιώσεις, χρησιμοποιήστε το glyph-name-alist." + +#: convertrules.py:2651 +msgid "edge-text settings for TextSpanner." +msgstr "ρυθμίσεις edge-text για TextSpanner." + +#: convertrules.py:2652 +#, python-format +msgid "" +"Use\n" +"\n" +"%s" +msgstr "" +"Χρησιμοποιήστε\n" +"\n" +"%s" + +#: convertrules.py:2685 +msgid "Use the `alignment-offsets' sub-property of\n" +msgstr "Χρησιμοποιήστε την υπο-ιδιότητα `alignment-offsets' του\n" + +#: convertrules.py:2686 +msgid "NonMusicalPaperColumn #'line-break-system-details\n" +msgstr "NonMusicalPaperColumn #'line-break-system-details\n" + +#: convertrules.py:2687 +msgid "to set fixed distances between staves.\n" +msgstr "για να ορίσετε σταθερές αποστάσεις μεταξύ των πενταγράμμων.\n" + +#: convertrules.py:2699 +msgid "Use #'style not #'dash-fraction to select solid/dashed lines." +msgstr "Χρησιμοποιήστε το #'style όχι το #'dash-fraction για να επιλέξετε συνεχείς ή διακεκομμένες γραμμές." + +#: convertrules.py:2705 +msgid "all settings related to dashed lines.\n" +msgstr "όλες οι ρυθμίσεις που σχετίζονται με διακεκομμένες γραμμές.\n" + +#: convertrules.py:2706 +msgid "Use \\override ... #'style = #'line for solid lines and\n" +msgstr "Χρησιμοποιήστε το \\override ... #'style = #'line για συνεχείς γραμμές και\n" + +#: convertrules.py:2707 +msgid "\t\\override ... #'style = #'dashed-line for dashed lines." +msgstr "\t\\override ... #'style = #'dashed-line για διακεκομμένες γραμμές." + +#: convertrules.py:2743 +msgid "" +"metronomeMarkFormatter uses text markup as second argument,\n" +"fret diagram properties moved to fret-diagram-details." +msgstr "" +"το metronomeMarkFormatter χρησιμοποιεί επισήμανση κειμένου ως δεύτερο όρισμα,\n" +"οι ιδιότητες της ταμπλατούρας μετακινήθηκαν στο fret-diagram-details." + +#: convertrules.py:2748 +msgid "metronomeMarkFormatter got an additional text argument.\n" +msgstr "Το metronomeMarkFormatter έλαβε ένα επιπλέον όρισμα κειμένου.\n" + +#: convertrules.py:2749 +#, python-format +msgid "" +"The function assigned to Score.metronomeMarkFunction now uses the signature\n" +"%s" +msgstr "" +"Η λειτουργία που ανατέθηκε στο Score.metronomeMarkFunction τώρα χρησιμοποιεί την υπογραφή\n" +"%s" + +#: convertrules.py:2812 +msgid "\\put-adjacent argument order.\n" +msgstr "σειρά ορισμάτων \\put-adjacent.\n" + +#: convertrules.py:2813 +msgid "Axis and direction now come before markups:\n" +msgstr "Ο άξονας και η κατεύθυνση τώρα μπαίνουν πριν τις επισημάνσεις:\n" + +#: convertrules.py:2814 +msgid "\\put-adjacent axis dir markup markup." +msgstr "\\put-adjacent axis dir markup markup." + +#: convertrules.py:2845 +msgid "re-definition of InnerStaffGroup.\n" +msgstr "επανακαθορισμός του InnerStaffGroup.\n" + +#: convertrules.py:2851 +msgid "re-definition of InnerChoirStaff.\n" +msgstr "επανακαθορισμός του InnerChoirStaff.\n" + +#: convertrules.py:2861 +msgid "Syntax changes for \\addChordShape and \\chord-shape" +msgstr "Αλλαγές σύνταξης για τα \\addChordShape και \\chord-shape" + +#: convertrules.py:2866 +msgid "stringTuning must be added to addChordShape call.\n" +msgstr "Πρέπει να προστίθεται το stringTuning στην κλήση addChordShape.\n" + +#: convertrules.py:2872 +msgid "stringTuning must be added to chord-shape call.\n" +msgstr "Πρέπει να προστίθεται το stringTuning στην κλήση chord-shape.\n" + +#: convertrules.py:2879 +msgid "Remove oldaddlyrics" +msgstr "Αφαίρεση oldaddlyrics" + +#: convertrules.py:2883 +msgid "" +"oldaddlyrics is no longer supported. \n" +" Use addlyrics or lyrsicsto instead.\n" +msgstr "" +"Το oldaddlyrics δεν υποστηρίζεται πλέον. \n" +" Χρησιμοποιήστε το addlyrics ή το lyrsicsto στη θέση του. \n" + +#: convertrules.py:2889 +msgid "" +"keySignature property not reversed any more\n" +"MIDI 47: orchestral strings -> orchestral harp" +msgstr "" +"Η ιδιότητα keySignature δεν αντιστρέφεται πλέον\n" +"MIDI 47: έγχορδα ορχήστρας -> άρπα ορχήστρας" + +#: convertrules.py:2894 +msgid "The alist for Staff.keySignature is no longer in reversed order.\n" +msgstr "Η alist για το Staff.keySignature δεν είναι πλέον σε αντεστραμμένη σειρά.\n" + +#: convertrules.py:2900 +msgid "" +"\\bar \".\" now produces a thick barline\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Dash parameters for slurs and ties are now in dash-definition" +msgstr "" +"Το \\bar \".\" τώρα παράγει χοντρή γραμμή μέτρου\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Οι παράμετροι παύλας για ενωτικά και δεσμούς βρίσκονται τώρα στο dash-definition" + +#: convertrules.py:2906 +msgid "\\bar \".\" now produces a thick barline.\n" +msgstr "Το \\bar \".\" τώρα παράγει χοντρή γραμμή μέτρου.\n" + +#: convertrules.py:2912 +msgid "Dash parameters for slurs and ties are now in 'dash-details.\n" +msgstr "Οι παράμετροι παύλας για ενωτικά και δεσμούς βρίσκονται τώρα στο 'dash-details.\n" + +#: convertrules.py:2917 +msgid "" +"Autobeaming rules have changed. override-auto-beam-setting and\n" +"revert-auto-beam-setting have been eliminated.\n" +"\\overrideBeamSettings has been added.\n" +"beatGrouping has been eliminated.\n" +"Different settings for vertical layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explicit dynamics context definition from `Piano centered dynamics'\n" +"template replaced by new `Dynamics' context." +msgstr "" +"Οι κανόνες για αυτόματες οριζόντιες γραμμές έχουν αλλάξει. Τα override-auto-beam-setting και\n" +"revert-auto-beam-setting έχουν εξαλειφθεί.\n" +"Προστέθηκε το \\overrideBeamSettings.\n" +"Το beatGrouping έχει εξαλειφθεί.\n" +"Διαφορετικές ρυθμίσεις για την κάθετη διάταξη.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Ο αυστηρός ορισμός δυναμικού περιεχομένου από το πρότυπο\n" +"`Piano centered dynamics' αντικαταστάθηκε από νέο περιεχόμενο `Dynamics'." + +#: convertrules.py:2931 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now overriden with \\overrideBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" Οι ρυθμίσεις για αυτόματες οριζόντιες γραμμές τώρα παρακάμπτονται με το \\overrideBeamSettings.\n" + +#: convertrules.py:2936 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now reverted with \\revertBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" Οι ρυθμίσεις για αυτόματες οριζόντιες γραμμές τώρα επανέρχονται με το \\revertBeamSettings.\n" + +#: convertrules.py:2941 +msgid "" +"beatGrouping. \n" +" beatGrouping with a specified context must now be accomplished with\n" +" \\overrideBeamSettings.\n" +msgstr "" +"beatGrouping. \n" +" beatGrouping με καθορισμένο περιεχόμενο πρέπει τώρα να επιτευχθεί με το\n" +" \\overrideBeamSettings.\n" + +#: convertrules.py:2947 +msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n" +msgstr "Το alignment-offsets έχει αλλάξει σε alignment-distances: πρέπει τώρα να καθορίζετε τις αποστάσεις μεταξύ των πενταγράμμων αντί για τη μετατόπισή τους.\n" + +#: convertrules.py:2958 +msgid "" +"Remove obsolete engravers/translators: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"New vertical spacing variables." +msgstr "" +"Αφαίρεση παρωχημένων χαρακτών/μεταφραστών: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer και String_number_engraver.\n" +"Νέες μεταβλητές κάθετης απόστασης." + +#: convertrules.py:2982 +msgid "vertical spacing has been changed; minimum-Y-extent is obsolete.\n" +msgstr "η κάθετη απόσταση έχει αλλάξει. Το minimum-Y-extent είναι παρωχημένο.\n" + +#: convertrules.py:2988 +msgid "Unify fetaNumber and fetaDynamic encodings" +msgstr "Ενοποίηση των κωδικοποιήσεων fetaNumber και fetaDynamic" + +#: convertrules.py:2993 +msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" +msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" + +#: convertrules.py:3004 +msgid "\\cresc etc. are now postfix operators" +msgstr "Το \\cresc κλπ είναι τώρα τελεστές εκ των υστέρων" + +#: convertrules.py:3010 +msgid "" +"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" +msgstr "" +"Εξάλειψη των beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings και \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" + +#: convertrules.py:3028 +msgid "\\overrideBeamSettings. Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n" +msgstr "\\overrideBeamSettings. Χρησιμοποιήστε το \\set beamExceptions ή το \\overrideTimeSignatureSettings.\n" + +#: convertrules.py:3032 +msgid "\\revertBeamSettings. Use \\set beamExceptions or \\revertTimeSignatureSettings.\n" +msgstr "\\revertBeamSettings. Χρησιμοποιήστε το \\set beamExceptions ή το \\revertTimeSignatureSettings.\n" + +#: convertrules.py:3036 +msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n" +msgstr "beamSettings. Χρησιμοποιήστε τα baseMoment, beatStructure και beamExceptions.\n" + +#: convertrules.py:3040 +msgid "beatLength. Use baseMoment and beatStructure.\n" +msgstr "beatLength. Χρησιμοποιήστε τα baseMoment και beatStructure.\n" + +#: convertrules.py:3044 +msgid "setbeatGrouping. Use baseMoment and beatStructure.\n" +msgstr "setbeatGrouping. Χρησιμοποιήστε τα baseMoment και beatStructure.\n" + +#: convertrules.py:3049 +msgid "" +"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n" +"Deprecate negative dash-period for hidden lines: use #'style = #'none instead." +msgstr "" +"Διαγράμματα ξύλινων πνευστών: Μετακίνηση μεγέθους, πάχους και γραφικών από τη λίστα ορισμάτων στις ιδιότητες.\n" +"Το negative dash-period είναι παρωχημένο για κρυφές γραμμές: χρησιμοποιήστε το #'style = #'none στη θέση του." + +#: convertrules.py:3054 +msgid "woodwind-diagrams. Move size, thickness, and graphic to properties. Argument should be just the key list.\n" +msgstr "" +"woodwind-diagrams. Μετακίνηση μεγέθους, πάχους και γραφικών στις ιδιότητες.\n" +"Το όρισμα θα πρέπει να είναι απλώς η λίστα κλειδιών.\n" + +#: convertrules.py:3062 +msgid "" +"Rename vertical spacing variables.\n" +"Add fretboard-table argument to savePredefinedFretboard." +msgstr "" +"Μετονομασία των μεταβλητών κάθετης διάταξης.\n" +"Προσθήκη ορίσματος fretboard-table στο savePredefinedFretboard." + +#: convertrules.py:3080 +msgid "Rename vertical spacing grob properties." +msgstr "Μετονομασία ιδιοτήτων κάθετης διάταξης του grob." + +#: convertrules.py:3096 +msgid "Remove \\paper variables head-separation and foot-separation." +msgstr "Αφαίρεση των μεταβλητών head-separation και foot-separation του \\paper." + +#: convertrules.py:3101 +msgid "Adjust settings for top-system-spacing instead.\n" +msgstr "Προσαρμογή ρυθμίσεων για top-system-spacing στη θέση του.\n" + +#: convertrules.py:3106 +msgid "Adjust settings for last-bottom-spacing instead.\n" +msgstr "Προσαρμογή ρυθμίσεων για last-bottom-spacing στη θέση του.\n" + +#: fontextract.py:25 +#, python-format +msgid "Scanning %s" +msgstr "Σάρωση του %s" + +#: fontextract.py:70 +#, python-format +msgid "Extracted %s" +msgstr "Εξάχθηκε το %s" + +#: fontextract.py:85 +#, python-format +msgid "Writing fonts to %s" +msgstr "Εγγραφή γραμματοσειρών σε %s" + +#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115 +#: input.cc:123 +#, c-format, python-format +msgid "error: %s" +msgstr "σφάλμα: %s" + +#: lilylib.py:124 lilylib.py:175 +#, python-format +msgid "Invoking `%s'" +msgstr "Κλήση `%s'" + +#: lilylib.py:126 lilylib.py:177 +#, python-format +msgid "Running %s..." +msgstr "Εκτέλεση %s…" + +#: lilylib.py:253 +#, python-format +msgid "Usage: %s" +msgstr "Χρήση: %s" + +#: musicexp.py:216 musicexp.py:221 +msgid "Language does not support microtones contained in the piece" +msgstr "Η γλώσσα δεν υποστηρίζει τους μικροτόνους που περιέχονται στο κομμάτι" + +#: musicexp.py:483 +msgid "Tuplet brackets of curved shape are not correctly implemented" +msgstr "Οι καμπύλες γραμμές για τρίηχα, πεντάηχα κλπ δεν είναι σωστά υλοποιημένες." + +#: musicexp.py:669 +#, python-format +msgid "unable to set the music %(music)s for the repeat %(repeat)s" +msgstr "αδυναμία ορισμού της μουσικής %(music)s για την επανάληψη %(repeat)s" + +#: musicexp.py:678 +msgid "encountered repeat without body" +msgstr "βρέθηκε επανάληψη χωρίς σώμα" + +#. no self.elements! +#: musicexp.py:848 +#, python-format +msgid "Grace note with no following music: %s" +msgstr "Νότα στολίδι (πχ αποτζιατούρα) χωρίς ακόλουθη μουσική: %s" + +#: musicexp.py:1010 +#, python-format +msgid "Invalid octave shift size found: %s. Using no shift." +msgstr "Βρέθηκε μη έγκυρη μετατόπιση μεγέθους οκτάβας: %s. Χρήση χωρίς μετατόπιση." + +#: musicexp.py:1468 +#, python-format +msgid "Unable to convert alteration %s to a lilypond expression" +msgstr "Αδυναμία μετατροπής αλλοίωσης %s σε έκφραση του lilypond" + +#. TODO: Handle pieces without a time signature! +#: musicxml.py:358 +msgid "Senza-misura time signatures are not yet supported!" +msgstr "Δεν υποστηρίζονται ακόμη ελεύθερα μέτρα (senza-misura)!" + +#: musicxml.py:376 +msgid "Unable to interpret time signature! Falling back to 4/4." +msgstr "Αδυναμία ερμηνείας μέτρου! Επιστροφή σε 4/4." + +#: musicxml.py:432 +#, python-format +msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!" +msgstr "Δόθηκε οκτάβα αλλοίωσης κλειδιού για μια μη υπάρχουσα αλλοίωση αρ. %s, διαθέσιμοι αριθμοί: %s!" + +#: musicxml.py:520 +#, python-format +msgid "Unable to find instrument for ID=%s\n" +msgstr "Αδυναμία εύρεσης οργάνου για ID=%s\n" + +#: abc2ly.py:1373 convert-ly.py:87 lilypond-book.py:122 midi2ly.py:860 +#, python-format +msgid "%s [OPTION]... FILE" +msgstr "%s [OPTION]... FILE" + +#: abc2ly.py:1374 +#, python-format +msgid "" +"abc2ly converts ABC music files (see\n" +"%s) to LilyPond input.\n" +msgstr "" +"Το abc2ly μετατρέπει μουσικά αρχεία ABC (δες\n" +"%s) σε είσοδο του LilyPond.\n" + +#: abc2ly.py:1382 convert-ly.py:94 etf2ly.py:1206 lilypond-book.py:212 +#: midi2ly.py:896 musicxml2ly.py:2683 main.cc:168 +msgid "show version number and exit" +msgstr "εμφάνιση αριθμού έκδοσης και έξοδος" + +#: abc2ly.py:1386 convert-ly.py:98 etf2ly.py:1202 lilypond-book.py:140 +#: midi2ly.py:875 musicxml2ly.py:2665 main.cc:157 +msgid "show this help and exit" +msgstr "εμφάνιση αυτής της βοήθειας και έξοδος" + +#: abc2ly.py:1388 etf2ly.py:1207 midi2ly.py:879 +msgid "write output to FILE" +msgstr "εγγραφή αποτελέσματος σε FILE" + +#: abc2ly.py:1390 +msgid "be strict about success" +msgstr "αυστηρότητα για επιτυχία" + +#: abc2ly.py:1392 +msgid "preserve ABC's notion of beams" +msgstr "διατήρηση του τρόπου τρίηχων κλπ του ABC" + +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: abc2ly.py:1395 convert-ly.py:144 etf2ly.py:1216 lilypond-book.py:234 +#: midi2ly.py:909 musicxml2ly.py:2751 main.cc:281 +#, c-format, python-format +msgid "Report bugs via %s" +msgstr "Αναφορά σφαλμάτων (στα Αγγλικά) μέσω %s" + +#: convert-ly.py:44 +msgid "" +"Update LilyPond input to newer version. By default, update from the\n" +"version taken from the \\version command, to the current LilyPond version." +msgstr "" +"Ενημέρωση της εισαγωγής στο LilyPond σε νεότερη έκδοση. Ως προεπιλογή, ενημέρωση από την\n" +"έκδοση που προκύπτει από την εντολή \\version, στην τρέχουσα έκδοση του LilyPond." + +#: convert-ly.py:46 lilypond-book.py:82 +msgid "Examples:" +msgstr "Παραδείγματα:" + +#: convert-ly.py:81 etf2ly.py:1189 lilypond-book.py:116 midi2ly.py:90 +#, python-format +msgid "Copyright (c) %s by" +msgstr "Copyright (c) %s από" + +#: convert-ly.py:83 etf2ly.py:1191 lilypond-book.py:118 midi2ly.py:92 +msgid "Distributed under terms of the GNU General Public License." +msgstr "Διανέμεται υπό τους όρους της GNU Γενικής Δημόσιας Άδειας." + +#: convert-ly.py:84 etf2ly.py:1192 lilypond-book.py:119 midi2ly.py:93 +msgid "It comes with NO WARRANTY." +msgstr "Παρέχεται χωρίς ΚΑΜΜΙΑ ΕΓΓΥΗΣΗ." + +#: convert-ly.py:102 convert-ly.py:135 +msgid "VERSION" +msgstr "VERSION" + +#: convert-ly.py:104 +msgid "start from VERSION [default: \\version found in file]" +msgstr "έναρξη από VERSION [προεπιλογή: \\version του αρχείου]" + +#: convert-ly.py:107 +msgid "edit in place" +msgstr "επιτόπου επεξεργασία" + +#: convert-ly.py:111 +msgid "do not add \\version command if missing" +msgstr "μην προσθέσετε την εντολή \\version αν λείπει" + +#: convert-ly.py:117 +#, python-format +msgid "force updating \\version number to %s" +msgstr "επιβολή ενημέρωσης του αριθμού \\version σε %s" + +#: convert-ly.py:123 +msgid "only update \\version number if file is modified" +msgstr "ενημέρωση του αριθμού έκδοσης \\version μόνο αν το αρχείο τροποποιηθεί" + +#: convert-ly.py:129 +#, python-format +msgid "show rules [default: -f 0, -t %s]" +msgstr "εμφάνιση κανόνων [προεπιλογή: -f 0, -t %s]" + +#: convert-ly.py:134 +#, python-format +msgid "convert to VERSION [default: %s]" +msgstr "μετατροπή σε VERSION [προεπιλογή: %s]" + +#: convert-ly.py:139 etf2ly.py:1210 lilypond-book.py:215 midi2ly.py:897 +#: main.cc:170 +msgid "show warranty and copyright" +msgstr "εμφάνιση εγγύησης και πνευματικών δικαιωμάτων" + +#: convert-ly.py:184 +msgid "Applying conversion: " +msgstr "Εφαρμογή μετατροπής:" + +#: convert-ly.py:197 +msgid "Error while converting" +msgstr "Σφάλμα κατά τη μετατροπή" + +#: convert-ly.py:199 +msgid "Stopping at last successful rule" +msgstr "Τερματισμός στον τελευταίο επιτυχή κανόνα" + +#: convert-ly.py:224 +#, python-format +msgid "Processing `%s'... " +msgstr "Επεξεργασία `%s'…" + +#: convert-ly.py:332 +#, python-format +msgid "%s: Unable to open file" +msgstr "%s: Αδυναμία ανοίγματος αρχείου" + +#: convert-ly.py:339 +#, python-format +msgid "%s: Unable to determine version. Skipping" +msgstr "%s: Αδυναμία προσδιορισμού έκδοσης. Παράβλεψη" + +#: convert-ly.py:344 +#, python-format +msgid "" +"%s: Invalid version string `%s' \n" +"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'" +msgstr "" +"%s: Μη έγκυρη ακολουθία έκδοσης `%s' \n" +"Οι έγκυρες ακολουθίες έκδοσης αποτελούνται από τρεις αριθμούς, διαχωρισμένους με τελείες, π.χ. `2.8.12'" + +#: etf2ly.py:1195 +#, python-format +msgid "%s [OPTION]... ETF-FILE" +msgstr "%s [OPTION]... ETF-FILE" + +#: etf2ly.py:1196 +msgid "" +"Enigma Transport Format is a format used by Coda Music Technology's\n" +"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" +msgstr "" +"Η Enigma Transport Format είναι μια μορφή που χρησιμοποιείται από το πρόγραμμα\n" +"Finale της Coda Music Technology. Το etf2ly μετατρέπει ένα υποσύνολο του ETF σε έτοιμο αρχείο LilyPond.\n" + +#: etf2ly.py:1208 midi2ly.py:880 musicxml2ly.py:2743 main.cc:161 main.cc:166 +msgid "FILE" +msgstr "FILE" + +#: lilypond-book.py:80 +msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." +msgstr "Επεξεργασία κομματιών κώδικα του LilyPond σε υβριδικό έγγραφο HTML, LaTeX, texinfo ή DocBook." + +#: lilypond-book.py:87 +msgid "BOOK" +msgstr "BOOK" + +#: lilypond-book.py:95 +#, python-format +msgid "Exiting (%d)..." +msgstr "Έξοδος (%d)…" + +#: lilypond-book.py:127 +msgid "FILTER" +msgstr "FILTER" + +#: lilypond-book.py:130 +msgid "pipe snippets through FILTER [default: `convert-ly -n -']" +msgstr "διοχέτευση κομματιών κώδικα μέσω του FILTER [προεπιλογή: `convert-ly -n -']" + +#: lilypond-book.py:134 +msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" +msgstr "χρήση μορφής εξόδου FORMAT (texi [προεπιλογή], texi-html, latex, html, docbook)" + +#: lilypond-book.py:135 +msgid "FORMAT" +msgstr "FORMAT" + +#: lilypond-book.py:142 +msgid "add DIR to include path" +msgstr "προσθέστε DIR για να συμπεριλάβετε διαδρομή" + +#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163 +#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160 +msgid "DIR" +msgstr "DIR" + +#: lilypond-book.py:148 +msgid "format Texinfo output so that Info will look for images of music in DIR" +msgstr "μορφοποίηση εξόδου Texinfo έτσι ώστε το Info θα κοιτάξει για εικόνες της μουσικής στο DIR" + +#: lilypond-book.py:155 +msgid "PAD" +msgstr "PAD" + +#: lilypond-book.py:157 +msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" +msgstr "γέμισμα της αριστερής πλευράς της μουσικής για ευθυγράμμιση παρά τους άνισους αριθμούς μέτρων (σε mm)" + +#: lilypond-book.py:162 +msgid "write lily-XXX files to DIR, link into --output dir" +msgstr "εγγραφή αρχείων lily-XXX στο DIR, σύνδεση στον --output κατάλογο" + +#: lilypond-book.py:167 +msgid "Load the additional python PACKAGE (containing e.g. a custom output format)" +msgstr "Φόρτωση του πρόσθετου πακέτου python PACKAGE (που περιέχει, π.χ. μια προσαρμοσμένη μοερφή εξόδου)" + +#: lilypond-book.py:168 +msgid "PACKAGE" +msgstr "PACKAGE" + +#: lilypond-book.py:172 +msgid "write output to DIR" +msgstr "εγγραφή εξόδου σε DIR" + +#: lilypond-book.py:177 +msgid "COMMAND" +msgstr "COMMAND" + +#: lilypond-book.py:178 +msgid "process ly_files using COMMAND FILE..." +msgstr "επεξεργασία των ly_files με χρήση COMMAND FILE..." + +#: lilypond-book.py:182 +msgid "Compile snippets in safe mode" +msgstr "Μεταγλώττιση των κομματιών κώδικα σε ασφαλή κατάσταση" + +#: lilypond-book.py:188 +msgid "do not fail if no lilypond output is found" +msgstr "να μην αποτύχει αν δεν βρεθεί έξοδος του lilypond" + +#: lilypond-book.py:194 +msgid "do not fail if no PNG images are found for EPS files" +msgstr "να μην αποτύχει αν δεν βρεθούν εικόνες PNG για τα αρχεία EPS" + +#: lilypond-book.py:200 +msgid "write snippet output files with the same base name as their source file" +msgstr "εγγραφή των αρχείων εξόδου αποσπασμάτων κώδικα με το ίδιο βασικό όνομα με το αρχείο προέλευσής τους" + +#: lilypond-book.py:204 midi2ly.py:890 musicxml2ly.py:2688 main.cc:169 +msgid "be verbose" +msgstr "αναλυτικά" + +#: lilypond-book.py:220 +msgid "" +"run executable PROG instead of latex, or in\n" +"case --pdf option is set instead of pdflatex" +msgstr "" +"να εκτελεστεί το εκτελέσιμο PROG αντί για latex ή στην\n" +"περίπτωση που έχει δοθεί η επιλογή --pdf αντί για pdflatex" + +#: lilypond-book.py:222 +msgid "PROG" +msgstr "PROG" + +#: lilypond-book.py:228 +msgid "create PDF files for use with PDFTeX" +msgstr "δημιουργία αρχείων PDF για χρήση με το PDFTeX" + +#: lilypond-book.py:419 +msgid "Writing snippets..." +msgstr "Εγγραφή κομματιών κώδικα…" + +#: lilypond-book.py:425 +msgid "Processing..." +msgstr "Επεξεργασία…" + +#: lilypond-book.py:431 +msgid "All snippets are up to date..." +msgstr "Όλα τα κομμάτια είναι ενήμερα…" + +#: lilypond-book.py:452 +#, python-format +msgid "cannot determine format for: %s" +msgstr "αδυναμία προσδιορισμού μορφής για: %s" + +#: lilypond-book.py:461 +#, python-format +msgid "%s is up to date." +msgstr "%s είναι ενήμερο." + +#: lilypond-book.py:475 +#, python-format +msgid "Writing `%s'..." +msgstr "Εγγραφή `%s'…" + +#: lilypond-book.py:537 +msgid "Output would overwrite input file; use --output." +msgstr "Η έξοδος θα διέγραφε το αρχείο εισόδου, χρησιμοποιήστε --output." + +#: lilypond-book.py:541 +#, python-format +msgid "Reading %s..." +msgstr "Ανάγνωση %s..." + +#: lilypond-book.py:549 +msgid "Dissecting..." +msgstr "Ανάλυση…" + +#: lilypond-book.py:561 +#, python-format +msgid "Compiling %s..." +msgstr "Μεταγλώττιση %s…" + +#: lilypond-book.py:570 +#, python-format +msgid "Processing include: %s" +msgstr "Η επεξεργασία περιλαμβάνει: %s" + +#: lilypond-book.py:582 +#, python-format +msgid "Removing `%s'" +msgstr "Αφαίρεση `%s'" + +#: midi2ly.py:99 +msgid "warning: " +msgstr "προειδοποίηση:" + +#: midi2ly.py:102 midi2ly.py:922 +msgid "error: " +msgstr "σφάλμα:" + +#: midi2ly.py:103 +msgid "Exiting... " +msgstr "Έξοδος…" + +#: midi2ly.py:848 +#, python-format +msgid "%s output to `%s'..." +msgstr "%s έξοδος σε `%s'…" + +#: midi2ly.py:861 +#, python-format +msgid "Convert %s to LilyPond input.\n" +msgstr "Μετατροπή %s σε είσοδο του LilyPond.\n" + +#: midi2ly.py:866 +msgid "print absolute pitches" +msgstr "εμφάνιση απόλυτων τονικών υψών" + +#: midi2ly.py:868 midi2ly.py:883 +msgid "DUR" +msgstr "DUR" + +#: midi2ly.py:869 +msgid "quantise note durations on DUR" +msgstr "ποσοτικοποίηση των διαρκειών των νοτών στο DUR" + +#: midi2ly.py:872 +msgid "print explicit durations" +msgstr "εμφάνιση ακριβών διαρκειών" + +#: midi2ly.py:876 +msgid "set key: ALT=+sharps|-flats; MINOR=1" +msgstr "ορισμός κλειδιού: ALT=+διέσεις|-υφέσεις; MINOR=1" + +#: midi2ly.py:877 +msgid "ALT[:MINOR]" +msgstr "ALT[:MINOR]" + +#: midi2ly.py:882 +msgid "quantise note starts on DUR" +msgstr "ποσοτικοποίηση των ενάρξεων των νοτών στο DUR" + +#: midi2ly.py:885 +msgid "DUR*NUM/DEN" +msgstr "DUR*NUM/DEN" + +#: midi2ly.py:888 +msgid "allow tuplet durations DUR*NUM/DEN" +msgstr "να επιτρέπονται διάρκειες τρίηχων κλπ DUR*NUM/DEN" + +#: midi2ly.py:900 +msgid "treat every text as a lyric" +msgstr "κάθε κείμενο να αντιμετωπίζεται ως στίχοι" + +#: midi2ly.py:903 +msgid "Examples" +msgstr "Παραδείγματα" + +#: midi2ly.py:923 +msgid "no files specified on command line." +msgstr "δεν ορίσθηκαν αρχεία στη γραμμή εντολών." + +#: musicxml2ly.py:324 +#, python-format +msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" +msgstr "Βρέθηκε αρχείο που δημιουργήθηκε από %s, που περιέχει λάθος πληροφορίες για τις οριζόντιες γραμμές. Όλες οι πληροφορίες για αυτές στο αρχείο MusicXML θα αγνοηθούν " + +#: musicxml2ly.py:340 musicxml2ly.py:342 +#, python-format +msgid "Unprocessed PartGroupInfo %s encountered" +msgstr "Προέκυψε ανεπεξέργαστο PartGroupInfo %s" + +#: musicxml2ly.py:595 +#, python-format +msgid "Encountered note at %s without type and duration (=%s)" +msgstr "Βρέθηκε νότα στο %s χωρίς τύπο και διάρκεια (=%s)" + +#: musicxml2ly.py:615 +#, python-format +msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" +msgstr "Προέκυψε κλασματική διάρκεια με παρονομαστή %s, αδύνατη η μετατροπή σε διάρκεια του lilypond" + +#: musicxml2ly.py:864 +msgid "Unable to extract key signature!" +msgstr "Μη αναμενόμενη υπογραφή κλειδιού!" + +#: musicxml2ly.py:891 +#, python-format +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" +msgstr "άγνωστος τρόπος %s, αναμένεται 'μείζονα' ή 'ελάσσονα' ή κάποιος εκκλησιαστικός τρόπος!" + +#: musicxml2ly.py:1029 +#, python-format +msgid "Encountered unprocessed marker %s\n" +msgstr "Προέκυψε ανεπεξέργαστος δείκτης %s\n" + +#: musicxml2ly.py:1123 +#, python-format +msgid "unknown span event %s" +msgstr "γεγονός άγνωστης έκτασης %s" + +#: musicxml2ly.py:1133 +#, python-format +msgid "unknown span type %s for %s" +msgstr "άγνωστος τύπος έκτασης %s για %s" + +#: musicxml2ly.py:1553 +msgid "Unknown metronome mark, ignoring" +msgstr "Άγνωστο σημάδι μετρονόμου, αγνόηση" + +#. TODO: Implement the other (more complex) way for tempo marks! +#: musicxml2ly.py:1558 +msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." +msgstr "Σημεία μετρονόμου με πολύπλοκες σχέσεις ( σε MusicXML) δεν έχουν υλοποιηθεί ακόμη." + +#: musicxml2ly.py:1760 +#, python-format +msgid "Unable to convert chord type %s to lilypond." +msgstr "Αδυναμία μετατροπής τύπου συγχορδίας %s σε lilypond." + +#: musicxml2ly.py:1909 +#, python-format +msgid "drum %s type unknown, please add to instrument_drumtype_dict" +msgstr "άγνωστος τύπος τυμπάνου %s, παρακαλώ προσθέστε στο instrument_drumtype_dict" + +#: musicxml2ly.py:1913 +msgid "cannot find suitable event" +msgstr "αδυναμία εύρεσης κατάλληλου γεγονότος" + +#: musicxml2ly.py:2061 +#, python-format +msgid "Negative skip %s (from position %s to %s)" +msgstr "Αρνητική παράβλεψη %s (από τη θέση %s στην %s)" + +#: musicxml2ly.py:2202 +#, python-format +msgid "Negative skip found: from %s to %s, difference is %s" +msgstr "Βρέθηκε αρνητική παράβλεψη: από %s έως %s, η διαφορά είναι %s" + +#: musicxml2ly.py:2283 +#, python-format +msgid "unexpected %s; expected %s or %s or %s" +msgstr "μη αναμενόμενo %s. Αναμενόταν %s ή %s ή %s" + +#: musicxml2ly.py:2389 +msgid "Encountered closing slur, but no slur is open" +msgstr "Βρέθηκε κλείσιμο σύνδεσης προσωδίας αλλά δεν υπάρχει άνοιγμα" + +#: musicxml2ly.py:2392 +msgid "Cannot have two simultaneous (closing) slurs" +msgstr "Δεν μπορεί να υπάρχουν δύο τατυτόχρονες (που να κλείνουν) συνδέσεις προσωδιών" + +#: musicxml2ly.py:2401 +msgid "Cannot have a slur inside another slur" +msgstr "Δεν μπορεί να υπάρχει σύνδεση προσωδίας μέσα σε άλλη σύνδεση" + +#: musicxml2ly.py:2404 +msgid "Cannot have two simultaneous slurs" +msgstr "Δεν μπορεί να υπάρχουν δύο ταυτόχρονες συνδέσεις προσωδίας" + +#: musicxml2ly.py:2538 +#, python-format +msgid "cannot simultaneously have more than one mode: %s" +msgstr "δεν μπορεί να υπάρχουν πάνω από ένας τρόποι ταυτόχρονα: %s" + +#: musicxml2ly.py:2646 +msgid "Converting to LilyPond expressions..." +msgstr "Μετατροπή σε εκφράσεις του LilyPond…" + +#: musicxml2ly.py:2657 +msgid "musicxml2ly [OPTION]... FILE.xml" +msgstr "musicxml2ly [OPTION]... FILE.xml" + +#: musicxml2ly.py:2659 +msgid "" +"Convert MusicXML from FILE.xml to LilyPond input.\n" +"If the given filename is -, musicxml2ly reads from the command line.\n" +msgstr "" +"Μετατροπή MusicXML από FILE.xml σε είσοδο του LilyPond.\n" +"Αν το δοθέν όνομα αρχείου είναι -, το musicxml2ly διαβάζει από τη γραμμή εντολών.\n" + +#: musicxml2ly.py:2669 +msgid "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" +msgstr "" +"Copyright (c) 2005--2011 από\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen και\n" +" Reinhold Kainhofer \n" + +#: musicxml2ly.py:2694 +msgid "use lxml.etree; uses less memory and cpu time" +msgstr "χρησιμοποιήστε το lxml.etree. Χρησιμοποιεί λιγότερη μνήμη και χρόνο επεξεργαστή" + +#: musicxml2ly.py:2700 +msgid "input file is a zip-compressed MusicXML file" +msgstr "το αρχείο εισαγωγής είναι ένα συμπιεσμένο με zip αρχείο MusicXML" + +#: musicxml2ly.py:2706 +msgid "convert pitches in relative mode (default)" +msgstr "μετατροπή τονικών υψών σε σχετικό τρόπο (προεπιλογή)" + +#: musicxml2ly.py:2711 +msgid "convert pitches in absolute mode" +msgstr "μετατροπή τονικών υψών σε απόλυτο τρόπο" + +#: musicxml2ly.py:2714 +msgid "LANG" +msgstr "LANG" + +#: musicxml2ly.py:2716 +msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German" +msgstr "χρήση του LANG για τα ονόματα των νοτών, π.χ. 'deutsch' για ονόματα στα Γερμανικά" + +#: musicxml2ly.py:2722 +msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +msgstr "να μη μετατρέπονται οι οδηγίες (^, _ ή -) για άρθρωση, δυναμική κλπ." + +#: musicxml2ly.py:2728 +msgid "do not convert exact vertical positions of rests" +msgstr "να μη γίνει μετατροπή των απόλυτων κάθετων θέσεων των παύσεων" + +#: musicxml2ly.py:2734 +msgid "do not convert the exact page layout and breaks" +msgstr "να μη γίνει μετατροπή της ακριβούς διάταξης σελίδας και αλλαγών γραμμής" + +#: musicxml2ly.py:2740 +msgid "do not convert beaming information, use lilypond's automatic beaming instead" +msgstr "να μη μετατραπούν οι πληροφορίες για οριζόντιες γραμμές, χρήση της αυτόματης διαδικασίας του lilypond" + +#: musicxml2ly.py:2748 +msgid "set output filename to FILE, stdout if -" +msgstr "ορισμός αρχείου εξόδου σε FILE, stdout if -" + +#: musicxml2ly.py:2831 +#, python-format +msgid "unknown part in part-list: %s" +msgstr "άγνωστο μέρος στην part-list: %s" + +#: musicxml2ly.py:2893 +msgid "Input is compressed, extracting raw MusicXML data from stdin" +msgstr "Το αρχείο εισαγωγής είναι συμπιεσμένο, εξαγωγή ακατέργαστων δεδομένων MusicXML από το stdin" + +#: musicxml2ly.py:2896 +#, python-format +msgid "Input file %s is compressed, extracting raw MusicXML data" +msgstr "Το αρχείο εισαγωγής %s είναι συμπιεσμένο, εξαγωγή ακατέργαστων δεδομένων MusicXML" + +#: musicxml2ly.py:2926 +msgid "Reading MusicXML from Standard input ..." +msgstr "Ανάγνωση MusicXML από την Προκαθορισμένη είσοδο …" + +#: musicxml2ly.py:2928 +#, python-format +msgid "Reading MusicXML from %s ..." +msgstr "Ανάγνωση MusicXML από %s …" + +#: musicxml2ly.py:2961 +#, python-format +msgid "Output to `%s'" +msgstr "Έξοδος σε `%s'" + +#: musicxml2ly.py:3028 +#, python-format +msgid "Unable to find input file %s" +msgstr "Αδυναμία εύρεσης αρχείου εισόδου %s" + +#: website_post.py:115 +msgid "English" +msgstr "Αγγλικά" + +#: website_post.py:118 +msgid "Other languages" +msgstr "Άλλες γλώσσες" + +#: getopt-long.cc:153 +#, c-format +msgid "option `%s' requires an argument" +msgstr "η επιλογή `%s' απαιτεί ένα όρισμα" + +#: getopt-long.cc:157 +#, c-format +msgid "option `%s' does not allow an argument" +msgstr "η επιλογή `%s' δεν επιτρέπει όρισμα" + +#: getopt-long.cc:161 +#, c-format +msgid "unrecognized option: `%s'" +msgstr "μη αναγνωρίσιμη επιλογή: `%s'" + +#: getopt-long.cc:167 +#, c-format +msgid "invalid argument `%s' to option `%s'" +msgstr "μη έγκυρο όρισμα `%s' στην επιλογή `%s'" + +#: warn.cc:59 +#, c-format +msgid "success: %s" +msgstr "επιτυχία: %s" + +#: warn.cc:86 grob.cc:617 input.cc:97 +#, c-format +msgid "programming error: %s" +msgstr "σφάλμα προγράμματος: %s" + +#: warn.cc:87 input.cc:98 +msgid "continuing, cross fingers" +msgstr "συνέχεια, σταυρώστε τα δάχτυλά σας" + +#: accidental-engraver.cc:180 +#, c-format +msgid "accidental typesetting list must begin with context-name: %s" +msgstr "η λίστα καθορισμού τύπου των σημείων αλλοιώσεως πρέπει να ξεκινά με context-name: %s" + +#: accidental-engraver.cc:210 +#, c-format +msgid "procedure or context-name expected for accidental rule, found %s" +msgstr "αναμενόταν διαδικασία ή context-name για τον κανόνα σημείου αλλοιώσεως, βρέθηκε %s" + +#: accidental.cc:200 +#, c-format +msgid "Could not find glyph-name for alteration %s" +msgstr "Αδυναμία εύρεσης ονόματος συμβόλου για αλλοίωση %s" + +#: accidental.cc:215 +msgid "natural alteration glyph not found" +msgstr "δεν βρέθηκε σύμβολο φυσικής αλλοίωσης" + +#: all-font-metrics.cc:156 +#, c-format +msgid "cannot find font: `%s'" +msgstr "αδυναμία εύρεσης γραμματοσειράς: `%s'" + +#: apply-context-iterator.cc:42 +msgid "\\applycontext argument is not a procedure" +msgstr "το όρισμα \\applycontext δεν είναι διεργασία" + +#: auto-change-iterator.cc:74 change-iterator.cc:72 +#, c-format +msgid "cannot change, already in translator: %s" +msgstr "αδυναμία αλλαγής, ήδη στο μεταφραστή: %s" + +#: axis-group-engraver.cc:94 +msgid "Axis_group_engraver: vertical group already has a parent" +msgstr "Axis_group_engraver: η κάθετη ομάδα έχει ήδη γονικό" + +#: axis-group-engraver.cc:95 +msgid "are there two Axis_group_engravers?" +msgstr "υπάρχουν δύο Axis_group_engravers;" + +#: axis-group-engraver.cc:96 +msgid "removing this vertical group" +msgstr "αφαίρεση αυτής της κάθετης ομάδας" + +#: axis-group-interface.cc:611 +msgid "an outside-staff object should have a direction, defaulting to up" +msgstr "ένα εκτός πενταγράμμου αντικείμενο θα πρέπει να έχει μια κατεύθυνση, προεπιλογή επάνω" + +#: bar-check-iterator.cc:84 +#, c-format +msgid "barcheck failed at: %s" +msgstr "έλεγχος διαστολών απέτυχε σε: %s" + +#: beam-engraver.cc:147 +msgid "already have a beam" +msgstr "ήδη έχει οριζόντια γραμμή" + +#: beam-engraver.cc:230 +msgid "unterminated beam" +msgstr "μη τερματισμένη γραμμή" + +#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150 +msgid "stem must have Rhythmic structure" +msgstr "το στέλεχος πρέπει να έχει δομή Rhythmic" + +#: beam-engraver.cc:274 +msgid "stem does not fit in beam" +msgstr "το στέλεχος δεν χωράει στην οριζόντια γραμμή" + +#: beam-engraver.cc:275 +msgid "beam was started here" +msgstr "η οριζόντια γραμμή ξεκίνησε εδώ" + +#: beam-quanting.cc:314 +msgid "no feasible beam position" +msgstr "ανέφικτη θέση οριζόντιας γραμμής" + +#: beam.cc:171 +msgid "removing beam with no stems" +msgstr "αφαίρεση οριζόντιας γραμμής χωρίς στελέχη" + +#: beam.cc:1116 +msgid "no viable initial configuration found: may not find good beam slope" +msgstr "βρέθηκε ανέφικτη αρχική διαμόρφωση: μπορεί να μη βρεθεί καλή κλίση για την οριζόντια γραμμή" + +#: break-alignment-interface.cc:206 +#, c-format +msgid "No spacing entry from %s to `%s'" +msgstr "Δεν υπάρχει καταχώρηση απόστασης από %s σε `%s'" + +#: change-iterator.cc:34 +#, c-format +msgid "cannot change `%s' to `%s'" +msgstr "αδυναμία αλλαγής `%s' σε `%s'" + +#. FIXME: constant error message. +#: change-iterator.cc:93 +msgid "cannot find context to switch to" +msgstr "αδυναμία εύρεσης περιεχομένου για εναλλαγή" + +#. We could change the current translator's id, but that would make +#. errors hard to catch. +#. +#. last->translator_id_string () = get_change +#. ()->change_to_id_string (); +#: change-iterator.cc:102 +#, c-format +msgid "not changing to same context type: %s" +msgstr "δεν αλλάζει στον ίδιο τύπο περιεχομένου: %s" + +#. FIXME: uncomprehensable message +#: change-iterator.cc:106 +msgid "none of these in my family" +msgstr "κανένα από αυτά στην οικογένειά μου" + +#: chord-tremolo-engraver.cc:88 +msgid "No tremolo to end" +msgstr "Δεν υπάρχει τρέμολο για να τερματιστεί" + +#: chord-tremolo-engraver.cc:109 +msgid "unterminated chord tremolo" +msgstr "μη τερματισμένο τρέμολο συγχορδίας" + +#: clef.cc:65 +#, c-format +msgid "clef `%s' not found" +msgstr "το κλειδί `%s' δεν βρέθηκε" + +#: cluster.cc:120 +#, c-format +msgid "unknown cluster style `%s'" +msgstr "άγνωστο στυλ συγχορδίας `%s'" + +#: cluster.cc:157 +msgid "junking empty cluster" +msgstr "απόρριψη άδειας συγχορδίας" + +#: coherent-ligature-engraver.cc:111 +#, c-format +msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" +msgstr "Coherent_ligature_engraver: καθορισμός `spacing-increment=0.01': ptr=%ul" + +#. if we get to here, just put everything on one line +#: constrained-breaking.cc:189 constrained-breaking.cc:207 +msgid "cannot find line breaking that satisfies constraints" +msgstr "αδυναμία εύρεσης αλλαγής γραμμής που να ικανοποιεί τους περιορισμούς" + +#: context-property.cc:42 +msgid "need symbol arguments for \\override and \\revert" +msgstr "χρειάζονται ορίσματα συμβόλων για \\override και \\revert" + +#: context.cc:149 +#, c-format +msgid "cannot find or create new `%s'" +msgstr "αδυναμία εύρεσης ή δημιουργίας νέου `%s'" + +#: context.cc:207 +#, c-format +msgid "cannot find or create `%s' called `%s'" +msgstr "αδυναμία εύρεσης ή δημιουργίας `%s' με όνομα `%s'" + +#: context.cc:269 +#, c-format +msgid "Invalid CreateContext event: Cannot create %s context" +msgstr "Άκυρο γεγονός CreateContext: Αδυναμία δημιουργίας περιεχομένου %s" + +#: context.cc:400 +#, c-format +msgid "cannot find or create: `%s'" +msgstr "αδυναμία εύρεσης ή δημιουργίας `%s'" + +#: custos.cc:88 +#, c-format +msgid "custos `%s' not found" +msgstr "δεν βρέθηκε το custos `%s'" + +#: dispatcher.cc:82 +msgid "Event class should be a symbol" +msgstr "Η κλάση του γεγονότος θα έπρεπε να είναι σύμβολο" + +#: dispatcher.cc:89 +#, c-format +msgid "Unknown event class %s" +msgstr "Άγνωστη κλάση γεγονότος %s" + +#: dots.cc:48 +#, c-format +msgid "dot `%s' not found" +msgstr "τελεία `%s' δεν βρέθηκε" + +#: dynamic-engraver.cc:197 +msgid "cannot find start of (de)crescendo" +msgstr "αδυναμία εύρεσης αρχής του (ντε)κρεσέντο" + +#: dynamic-engraver.cc:206 +msgid "already have a decrescendo" +msgstr "υπάρχει ήδη ντεκρεσέντο" + +#: dynamic-engraver.cc:208 +msgid "already have a crescendo" +msgstr "υπάρχει ήδη κρεσέντο" + +#: dynamic-engraver.cc:211 +msgid "cresc starts here" +msgstr "το κρεσέντο αρχίζει εδώ" + +#: dynamic-engraver.cc:339 +msgid "unterminated (de)crescendo" +msgstr "μη τερματισμένο (ντε)κρεσέντο" + +#: episema-engraver.cc:75 +msgid "already have an episema" +msgstr "ήδη έχει επίσημα" + +#: episema-engraver.cc:88 +msgid "cannot find start of episema" +msgstr "αδυναμία εύρεσης αρχής επισήματος" + +#: episema-engraver.cc:137 +msgid "unterminated episema" +msgstr "μη τερματισμένη επίσημα" + +#: extender-engraver.cc:170 extender-engraver.cc:179 +msgid "unterminated extender" +msgstr "μη τερματισμένη επέκταση" + +#: font-config-scheme.cc:152 font-config.cc:55 +#, c-format +msgid "failed adding font directory: %s" +msgstr "αποτυχία προσθήκης καταλόγου γραμματοσειράς: %s" + +#: font-config-scheme.cc:154 font-config.cc:57 +#, c-format +msgid "adding font directory: %s" +msgstr "προσθήκη καταλόγου γραμματοσειράς: %s" + +#: font-config-scheme.cc:168 +#, c-format +msgid "failed adding font file: %s" +msgstr "αποτυχία προσθήκης αρχείου γραμματοσειράς: %s" + +#: font-config-scheme.cc:170 +#, c-format +msgid "adding font file: %s" +msgstr "προσθήκη αρχείου γραμματοσειράς: %s" + +#: font-config.cc:40 +msgid "Initializing FontConfig..." +msgstr "Αρχικοποίηση FontConfig…" + +#: font-config.cc:61 +msgid "Building font database..." +msgstr "Κατασκευή βάσης δεδομένων γραμματοσειρών…" + +#: general-scheme.cc:305 +msgid "infinity or NaN encountered while converting Real number" +msgstr "βρέθηκε άπειρο ή αοριστία κατά τη μετατροπή πραγματικού αριθμού" + +#: general-scheme.cc:306 +msgid "setting to zero" +msgstr "ορισμός σε μηδέν" + +#: general-scheme.cc:542 output-ps.scm:48 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Βρέθηκε άπειρο ή αοριστία στο αποτέλεσμα. Αντικατάσταση από 0.0" + +#: glissando-engraver.cc:105 +msgid "unterminated glissando" +msgstr "μη τερματισμένο γκλισάντο" + +#: global-context-scheme.cc:96 global-context-scheme.cc:114 +msgid "no music found in score" +msgstr "δεν βρέθηκε μουσική στην παρτιτούρα" + +#: global-context-scheme.cc:104 +msgid "Interpreting music... " +msgstr "Ερμηνεία μουσικής…" + +#: global-context-scheme.cc:127 +#, c-format +msgid "elapsed time: %.2f seconds" +msgstr "χρόνος που πέρασε: %.2f δευτερόλεπτα" + +#: gregorian-ligature-engraver.cc:70 +#, c-format +msgid "\\%s ignored" +msgstr "\\%s αγνοήθηκε" + +#: gregorian-ligature-engraver.cc:75 +#, c-format +msgid "implied \\%s added" +msgstr "υπονοούμενο \\%s προστέθηκε" + +#. ligature may not start with 2nd head of pes or flexa +#: gregorian-ligature-engraver.cc:224 +msgid "cannot apply `\\~' on first head of ligature" +msgstr "αδυναμία εφαρμογής `\\~' στην πρώτη κεφαλή της λιγκατούρας" + +#. (pitch == prev_pitch) +#: gregorian-ligature-engraver.cc:236 +msgid "cannot apply `\\~' on heads with identical pitch" +msgstr "αδυναμία εφαρμογής `\\~' σε κεφαλές με ταυτόσημο τονικό ύψος" + +#: grob-interface.cc:68 +#, c-format +msgid "Unknown interface `%s'" +msgstr "Άγνωστη διεπαφή `%s'" + +#: grob-interface.cc:79 +#, c-format +msgid "Grob `%s' has no interface for property `%s'" +msgstr "Το Grob `%s' δεν έχει διεπαφή για την ιδιότητα `%s'" + +#: grob-property.cc:34 +#, c-format +msgid "%d: %s" +msgstr "%d: %s" + +#: grob-property.cc:173 +#, c-format +msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" +msgstr "κυκλική εξάρτηση: υπολογισμός σε εξέλιξη βρέθηκε για #'%s (%s)" + +#: grob.cc:286 +msgid "Infinity or NaN encountered" +msgstr "Βρέθηκε άπειρο ή αοριστία" + +#: hairpin.cc:186 +msgid "decrescendo too small" +msgstr "πολύ μικρό ντεκρεσέντο" + +#: horizontal-bracket-engraver.cc:78 +msgid "do not have that many brackets" +msgstr "μην βάζετε τόσες πολλές αγκύλες" + +#: horizontal-bracket-engraver.cc:87 +msgid "conflicting note group events" +msgstr "συγκρουόμενα γεγονότα ομάδων νοτών" + +#: hyphen-engraver.cc:104 +msgid "removing unterminated hyphen" +msgstr "αφαίρεση μη τερματισμένης ένωσης" + +#: hyphen-engraver.cc:118 +msgid "unterminated hyphen; removing" +msgstr "μη τερματισμένη ένωση, αφαίρεση" + +#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109 +#, c-format +msgid "cannot find file: `%s'" +msgstr "αδυναμία εύρεσης αρχείου: `%s'" + +#: includable-lexer.cc:73 lily-parser-scheme.cc:100 +#, c-format +msgid "(search path: `%s')" +msgstr "(διαδρομή αναζήτησης: `%s')" + +#: input.cc:131 source-file.cc:179 source-file.cc:194 +msgid "position unknown" +msgstr "άγνωστη θέση" + +#: key-signature-interface.cc:78 +#, c-format +msgid "No glyph found for alteration: %s" +msgstr "Δεν βρέθηκε σύμβολο για την αλλοίωση: %s" + +#: key-signature-interface.cc:88 +msgid "alteration not found" +msgstr "δεν βρέθηκε αλλοίωση" + +#: ligature-bracket-engraver.cc:73 ligature-engraver.cc:104 +msgid "cannot find start of ligature" +msgstr "αδυναμία εύρεσης αρχής λιγκατούρας" + +#: ligature-bracket-engraver.cc:86 ligature-engraver.cc:131 +msgid "already have a ligature" +msgstr "υπάρχει ήδη λιγκατούρα" + +#: ligature-engraver.cc:109 +msgid "no right bound" +msgstr "δεν υπάρχει δεξί όριο" + +#: ligature-engraver.cc:140 +msgid "no left bound" +msgstr "δεν υπάρχει αριστερό όριο" + +#: ligature-engraver.cc:185 +msgid "unterminated ligature" +msgstr "μη τερματισμένη λιγκατούρα" + +#: ligature-engraver.cc:214 +msgid "ignoring rest: ligature may not contain rest" +msgstr "αγνόηση παύσης: η λιγκατούρα δεν μπορεί να περιέχει παύση" + +#: ligature-engraver.cc:215 +msgid "ligature was started here" +msgstr "η λιγκατούρα ξεκίνησε εδώ" + +#: lily-guile.cc:89 +#, c-format +msgid "(load path: `%s')" +msgstr "(διαδρομή φόρτωσης: `%s')" + +#: lily-guile.cc:439 +#, c-format +msgid "cannot find property type-check for `%s' (%s)." +msgstr "αδυναμία εύρεσης τύπου ιδιότητας - έλεγχος για `%s' (%s)." + +#: lily-guile.cc:442 +msgid "perhaps a typing error?" +msgstr "ίσως τυπογραφικό σφάλμα;" + +#: lily-guile.cc:449 +msgid "doing assignment anyway" +msgstr "εκτέλεση εργασίας έτσι κι αλλιώς" + +#: lily-guile.cc:461 +#, c-format +msgid "type check for `%s' failed; value `%s' must be of type `%s'" +msgstr "έλεγχος τύπου για `%s' απέτυχε. Η τιμή `%s' πρέπει να είναι τύπου `%s' " + +#: lily-lexer.cc:264 +msgid "include files are not allowed in safe mode" +msgstr "δεν επιτρέπεται να συμπεριλαμβάνονται αρχεία σε κατάσταση ασφαλούς λειτουργίας" + +#: lily-lexer.cc:291 +#, c-format +msgid "identifier name is a keyword: `%s'" +msgstr "το όνομα ταυτοποιητή είναι μια λέξη κλειδί: `%s'" + +#: lily-lexer.cc:312 +#, c-format +msgid "error at EOF: %s" +msgstr "σφάλμα στο EOF: %s" + +#: lily-parser-scheme.cc:82 +#, c-format +msgid "Changing working directory to: `%s'" +msgstr "Αλλαγή καταλόγου εργασίας σε: `%s'" + +#: lily-parser-scheme.cc:99 +#, c-format +msgid "cannot find init file: `%s'" +msgstr "αδυναμία εύρεσης αρχείου init: `%s'" + +#: lily-parser-scheme.cc:118 +#, c-format +msgid "Processing `%s'" +msgstr "Επεξεργασία `%s'" + +#: lily-parser-scheme.cc:204 +msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead." +msgstr "το ly:parser-parse-string είναι έγκυρο μόνο με νέο αναλυτή. Χρησιμοποιήστε το ly:parser-include-string στη θέση του." + +#: lily-parser.cc:106 +msgid "Parsing..." +msgstr "Ανάλυση…" + +#: lily-parser.cc:134 +msgid "braces do not match" +msgstr "οι αγκύλες δεν ταιριάζουν" + +#: lyric-combine-music-iterator.cc:337 +#, c-format +msgid "cannot find Voice `%s'" +msgstr "αδυναμία εύρεσης Φωνής `%s'" + +#: lyric-engraver.cc:175 +msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." +msgstr "Η συλλαβή στίχου δεν έχει νότα. Χρησιμοποιήστε το \\lyricsto ή το associatedVoice." + +#: main.cc:109 +#, c-format +msgid "" +"This program is free software. It is covered by the GNU General Public\n" +"License and you are welcome to change it and/or distribute copies of it\n" +"under certain conditions. Invoke as `%s --warranty' for more\n" +"information.\n" +msgstr "" +"Αυτό το πρόγραμμα είναι ελεύθερο λογισμικό. Καλύπτεται από την GNU General Public\n" +"License και είστε ευπρόσδεκτος να το αλλάξετε και/ή να διανείμετε αντίγραφά του\n" +"υπό ορισμένες προϋποθέσεις. Καλέστε ως `%s --warranty' για\n" +" περισσότερες πληροφορίες.\n" + +#: main.cc:115 +msgid "" +" This program is free software; you can redistribute it and/or\n" +"modify it under the terms of the GNU General Public License version 2\n" +"as published by the Free Software Foundation.\n" +"\n" +" This program is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" +"General Public License for more details.\n" +"\n" +" You should have received a copy of the\n" +"GNU General Public License along with this program; if not, write to\n" +"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" +"Boston, MA 02111-1307, USA.\n" +msgstr "" +" Αυτό το πρόγραμμα είναι ελεύθερο λογισμικό. Μπορείτε να το αναδιανείμετε και/ή\n" +"να το τροποποιήσετε υπό τους όρους της GNU General Public License έκδοση 2\n" +"όπως δημοσιεύεται από το Free Software Foundation.\n" +"\n" +" Αυτό το πρόγραμμα διανέμεται με την ελπίδα ότι θα είναι χρήσιμο,\n" +"αλλά ΧΩΡΙΣ ΚΑΜΜΙΑ ΕΓΓΥΗΣΗ, χωρίς ούτε καν υπονοούμενη εγγύηση\n" +"ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ή ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΣΥΓΚΕΚΡΙΜΕΝΟ ΣΚΟΠΟ. Δείτε την GNU\n" +"General Public License for more details.\n" +"\n" +" Θα πρέπει να έχετε λάβει ένα αντίγραφο της\n" +"GNU General Public License μαζί με αυτό το πρόγραμμα. Αν όχι γράψτε στο Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" +"Boston, MA 02111-1307, USA.\n" + +#: main.cc:146 +msgid "SYM[=VAL]" +msgstr "SYM[=VAL]" + +#: main.cc:147 +msgid "" +"set Scheme option SYM to VAL (default: #t).\n" +"Use -dhelp for help." +msgstr "" +"ορισμός της επιλογής Σχήματος SYM σε VAL (default: #t).\n" +"Χρησιμοποιήστε το -dhelp για βοήθεια." + +#: main.cc:150 +msgid "EXPR" +msgstr "EXPR" + +#: main.cc:150 +msgid "evaluate scheme code" +msgstr "αξιολόγηση κώδικα σχήματος" + +#. Bug in option parser: --output =foe is taken as an abbreviation +#. for --output-format. +#: main.cc:153 +msgid "FORMATs" +msgstr "FORMATs" + +#: main.cc:153 +msgid "dump FORMAT,... Also as separate options:" +msgstr "απόρριψη FORMAT,... Επίσης ως ξεχωριστές επιλογές:" + +#: main.cc:154 +msgid "generate PDF (default)" +msgstr "δημιουργία PDF (προεπιλογή)" + +#: main.cc:155 +msgid "generate PNG" +msgstr "δημιουργία PNG" + +#: main.cc:156 +msgid "generate PostScript" +msgstr "δημιουργία PostScript" + +#: main.cc:158 +msgid "FIELD" +msgstr "FIELD" + +#: main.cc:158 +msgid "" +"dump header field FIELD to file\n" +"named BASENAME.FIELD" +msgstr "" +"απόθεση του πεδίου κεφαλίδας FIELD στο αρχείο\n" +"με όνομα BASENAME.FIELD" + +#: main.cc:160 +msgid "add DIR to search path" +msgstr "προσθήκη DIR στη διαδρομή αναζήτησης" + +#: main.cc:161 +msgid "use FILE as init file" +msgstr "χρήση FILE ως αρχείου αρχικοποίησης" + +#: main.cc:163 +msgid "USER, GROUP, JAIL, DIR" +msgstr "USER, GROUP, JAIL, DIR" + +#: main.cc:163 +msgid "" +"chroot to JAIL, become USER:GROUP\n" +"and cd into DIR" +msgstr "" +"chroot σε JAIL, γίνετε USER:GROUP\n" +"και cd στο DIR" + +#: main.cc:166 +msgid "write output to FILE (suffix will be added)" +msgstr "εγγραφή εξόδου στο FILE (η επέκταση θα προστεθεί)" + +#: main.cc:167 +msgid "relocate using directory of lilypond program" +msgstr "επανατοποθέτηση με χρήση του καταλόγου του προγράμματος lilypond" + +#. Do not update the copyright years here, run `make grand-replace' +#: main.cc:238 +#, c-format +msgid "" +"Copyright (c) %s by\n" +"%s and others." +msgstr "" +"Copyright (c) %s από\n" +"%s και άλλους." + +#. No version number or newline here. It confuses help2man. +#: main.cc:265 +#, c-format +msgid "Usage: %s [OPTION]... FILE..." +msgstr "Χρήση: %s [OPTION]... FILE..." + +#: main.cc:267 +msgid "Typeset music and/or produce MIDI from FILE." +msgstr "Στοιχειοθέτηση μουσικής και/ή παραγωγή MIDI από FILE." + +#: main.cc:269 +msgid "LilyPond produces beautiful music notation." +msgstr "Το LilyPond παράγει όμορφη μουσική σημειογραφία." + +#: main.cc:271 +#, c-format +msgid "For more information, see %s" +msgstr "Για περισσότερες πληροφορίες, δείτε %s" + +#: main.cc:273 +msgid "Options:" +msgstr "Επιλογές:" + +#: main.cc:327 +#, c-format +msgid "expected %d arguments with jail, found: %u" +msgstr "αναμένονταν %d ορίσματα με το jail, βρέθηκαν: %u" + +#: main.cc:341 +#, c-format +msgid "no such user: %s" +msgstr "δεν υπάρχει τέτοιος χρήστης: %s" + +#: main.cc:343 +#, c-format +msgid "cannot get user id from user name: %s: %s" +msgstr "αδυναμία λήψης id χρήστη από το όνομα χρήστη: %s: %s" + +#: main.cc:358 +#, c-format +msgid "no such group: %s" +msgstr "δεν υπάρχει τέτοια ομάδα: %s" + +#: main.cc:360 +#, c-format +msgid "cannot get group id from group name: %s: %s" +msgstr "αδυναμία λήψης id ομάδας από το όνομα ομάδας: %s: %s" + +#: main.cc:368 +#, c-format +msgid "cannot chroot to: %s: %s" +msgstr "αδυναμία chroot σε: %s: %s" + +#: main.cc:375 +#, c-format +msgid "cannot change group id to: %d: %s" +msgstr "αδυναμία αλλαγής id ομάδας σε: %d: %s" + +#: main.cc:381 +#, c-format +msgid "cannot change user id to: %d: %s" +msgstr "αδυναμία αλλαγής id χρήστη σε: %d: %s" + +#: main.cc:387 +#, c-format +msgid "cannot change working directory to: %s: %s" +msgstr "αδυναμία αλλαγής καταλόγου εργασίας σε: %s: %s" + +#: main.cc:628 +#, c-format +msgid "exception caught: %s" +msgstr "βρέθηκε εξαίρεση: %s" + +#. FIXME: constant error message. +#: mark-engraver.cc:157 +msgid "rehearsalMark must have integer value" +msgstr "το rehearsalMark πρέπει να έχει ακέραια τιμή" + +#: mark-engraver.cc:163 +msgid "mark label must be a markup object" +msgstr "η ετικέτα σήμανσης πρέπει να είναι αντικείμενο επισήμανσης" + +#: mensural-ligature-engraver.cc:96 +msgid "ligature with less than 2 heads -> skipping" +msgstr "λιγκατούρα με λιγότερες από 2 κεφαλές -> παράβλεψη" + +#: mensural-ligature-engraver.cc:123 +msgid "cannot determine pitch of ligature primitive -> skipping" +msgstr "αδυναμία καθορισμού νότας έναρξης λιγκατούρας -> παράβλεψη" + +#: mensural-ligature-engraver.cc:137 +msgid "single note ligature - skipping" +msgstr "λιγκατούρα μονής νότας -> παράβλεψη" + +#: mensural-ligature-engraver.cc:149 +msgid "prime interval within ligature -> skipping" +msgstr "περιττό διάστημα εντός λιγκατούρας -> παράβλεψη" + +#: mensural-ligature-engraver.cc:161 +msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" +msgstr "μετρική λιγκατούρα: διάρκεια καμία από Mx, L, B, S -> παράβλεψη" + +#: mensural-ligature-engraver.cc:209 +msgid "semibrevis must be followed by another one -> skipping" +msgstr "το ολόκληρο (semibrevis - μετρικής σημειογραφίας) πρέπει να ακολουθείται από άλλο ένα -> παράβλεψη" + +#: mensural-ligature-engraver.cc:220 +msgid "" +"semibreves can only appear at the beginning of a ligature,\n" +"and there may be only zero or two of them" +msgstr "" +"τα ολόκληρα (semibreves - μετρικής σημειογραφίας) εμφανίζονται στην αρχή μιας λιγκατούρας,\n" +"και μπορεί να υπάρχει μόνο κανένα ή δύο από αυτά" + +#: mensural-ligature-engraver.cc:247 +msgid "" +"invalid ligatura ending:\n" +"when the last note is a descending brevis,\n" +"the penultimate note must be another one,\n" +"or the ligatura must be LB or SSB" +msgstr "" +"μη έγκυρος τερματισμός λιγκατούρας:\n" +"όταν η τελευταία νότα είναι ένα χαμηλότερο brevis (διπλό ολόκληρο μετρικής σημειογραφίας),\n" +"η προτελευταία νότα πρέπει να είναι άλλο ένα,\n" +"ή η λιγκατούρα πρέπει να είναι LB ή SSB" + +#: mensural-ligature-engraver.cc:367 +msgid "unexpected case fall-through" +msgstr "μη αναμενόμενη περίπτωση κατάρρευσης" + +#: mensural-ligature.cc:152 +msgid "Mensural_ligature: unexpected case fall-through" +msgstr "Mensural_ligature: μη αναμενόμενη περίπτωση" + +#: mensural-ligature.cc:203 +msgid "Mensural_ligature: (join_right == 0)" +msgstr "Mensural_ligature: (join_right == 0)" + +#: midi-item.cc:92 +#, c-format +msgid "no such MIDI instrument: `%s'" +msgstr "δεν υπάρχει τέτοιο όργανο MIDI: `%s'" + +#: midi-stream.cc:39 +#, c-format +msgid "cannot open for write: %s: %s" +msgstr "αδυναμία ανοίγματος για εγγραφή: %s: %s" + +#: midi-stream.cc:55 +#, c-format +msgid "cannot write to file: `%s'" +msgstr "αδυναμία εγγραφής σε αρχείο: `%s'" + +#: minimal-page-breaking.cc:40 paper-score.cc:122 +msgid "Calculating line breaks..." +msgstr "Υπολογισμός αλλαγών γραμμής…" + +#: minimal-page-breaking.cc:44 +msgid "Calculating page breaks..." +msgstr "Υπολογισμός αλλαγών σελίδας…" + +#: music-iterator.cc:182 +msgid "Sending non-event to context" +msgstr "Αποστολή μη-γεγονότος στο περιεχόμενο" + +#: music.cc:151 +#, c-format +msgid "octave check failed; expected \"%s\", found: \"%s\"" +msgstr "έλεγχος οκτάβας απέτυχε, αναμενόταν «%s», βρέθηκε: «%s»" + +#: music.cc:219 +msgid "(normalized pitch)" +msgstr "(κανονικοποιημένο τονικό ύψος)" + +#: music.cc:223 +#, c-format +msgid "Transposing %s by %s makes alteration larger than double" +msgstr "Μετάθεση του %s κατά %s κάνει την αλλοίωση μεγαλύτερη από διπλή" + +#: new-dynamic-engraver.cc:142 +#, c-format +msgid "" +"unknown crescendo style: %s\n" +"defaulting to hairpin." +msgstr "" +"άγνωστο στυλ κρεσέντο: %s\n" +"χρήση προεπιλεγμένης φουρκέτας." + +#: new-dynamic-engraver.cc:200 +#, c-format +msgid "unterminated %s" +msgstr "μη τερματισμένο/η %s" + +#: new-fingering-engraver.cc:106 +msgid "cannot add text scripts to individual note heads" +msgstr "αδυναμία προσθήκης κειμένων σε μεμονωμένες κεφαλές νοτών" + +#: new-fingering-engraver.cc:250 +msgid "no placement found for fingerings" +msgstr "δεν βρέθηκε τοποθέτηση για δακτυλισμούς" + +#: new-fingering-engraver.cc:251 +msgid "placing below" +msgstr "τοποθέτηση κάτω" + +#: note-collision.cc:497 +msgid "ignoring too many clashing note columns" +msgstr "αγνόηση υπερβολικά πολλών συγκρουόμενων στηλών με νότες" + +#: note-column.cc:135 +msgid "cannot have note heads and rests together on a stem" +msgstr "δεν γίνεται να υπάρχουν κεφαλές νοτών και παύσεων μαζί σε ένα στέλεχος" + +#: note-head.cc:76 +#, c-format +msgid "none of note heads `%s' or `%s' found" +msgstr "δεν βρέθηκε καμμία από τις κεφαλές νοτών `%s' ή `%s'" + +#: note-heads-engraver.cc:76 +msgid "NoteEvent without pitch" +msgstr "NoteEvent χωρίς τονικό ύψος" + +#: open-type-font.cc:44 +#, c-format +msgid "cannot allocate %lu bytes" +msgstr "αδυναμία εκχώρησης %lu bytes" + +#: open-type-font.cc:48 +#, c-format +msgid "cannot load font table: %s" +msgstr "αδυναμία φόρτωσης πίνακα γραμματοσειρών: %s" + +#: open-type-font.cc:53 +#, c-format +msgid "Free type error: %s" +msgstr "Σφάλμα ελεύθερης πληκτρολόγησης: %s" + +#: open-type-font.cc:111 +#, c-format +msgid "unsupported font format: %s" +msgstr "μη υποστηριζόμενη μορφή γραμματοσειράς: %s" + +#: open-type-font.cc:113 +#, c-format +msgid "error reading font file %s: %s" +msgstr "σφάλμα ανάγνωσης αρχείου γραμματοσειράς %s: %s" + +#: open-type-font.cc:188 +#, c-format +msgid "FT_Get_Glyph_Name () Freetype error: %s" +msgstr "FT_Get_Glyph_Name () Σφάλμα Freetype: %s" + +#: open-type-font.cc:250 +msgid "Invalid index for character" +msgstr "Μη έγκυρος δείκτης για χαρακτήρας" + +#: open-type-font.cc:319 pango-font.cc:187 +#, c-format +msgid "FT_Get_Glyph_Name () error: %s" +msgstr "FT_Get_Glyph_Name () σφάλμα: %s" + +#. find out the ideal number of pages +#: optimal-page-breaking.cc:60 +msgid "Finding the ideal number of pages..." +msgstr "Εύρεση του ιδανικού αριθμού σελίδων…" + +#: optimal-page-breaking.cc:87 +msgid "Fitting music on 1 page..." +msgstr "Ταίριασμα μουσικής σε 1 σελίδα…" + +#: optimal-page-breaking.cc:89 +#, c-format +msgid "Fitting music on %d pages..." +msgstr "Ταίριασμα μουσικής σε %d σελίδες…" + +#: optimal-page-breaking.cc:91 +#, c-format +msgid "Fitting music on %d or %d pages..." +msgstr "Ταίριασμα μουσικής σε %d ή %d σελίδες…" + +#: optimal-page-breaking.cc:101 optimal-page-breaking.cc:155 +#, c-format +msgid "trying %d systems" +msgstr "δοκιμή %d συστημάτων" + +#: optimal-page-breaking.cc:120 optimal-page-breaking.cc:183 +#, c-format +msgid "best score for this sys-count: %f" +msgstr "καλύτερη παρτιτούρα για αυτό το sys-count: %f" + +#: optimal-page-breaking.cc:190 page-turn-page-breaking.cc:248 +#: paper-score.cc:163 +msgid "Drawing systems..." +msgstr "Σχεδιασμός συστημάτων…" + +#: output-def.cc:235 +msgid "margins do not fit with line-width, setting default values" +msgstr "τα περιθώρια δεν ταιριάζουν με το line-width, χρήση των προεπιλεγμένων τιμών" + +#: output-def.cc:242 +msgid "systems run off the page due to improper paper settings, setting default values" +msgstr "τα συστήματα βγαίνουν εκτός σελίδας λόγω ακατάλληλων ρυθμίσεων χαρτιού, χρήση των προεπιλεγμένων τιμών" + +#: page-breaking.cc:194 +msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set" +msgstr "αγνοούνται τα min-systems-per-page και max-systems-per-page επειδή έχει ορισθεί το systems-per-page" + +#: page-breaking.cc:199 +msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values" +msgstr "το min-systems-per-page είναι μεγαλύτερο από το max-systems-per-page, θα αγνοηθούν και οι δύο τιμές" + +#: page-layout-problem.cc:315 +#, c-format +msgid "couldn't fit music on page: overflow is %f" +msgstr "αδυναμία να χωρέσει η μουσική στη σελίδα: το επιπλέον είναι %f" + +#: page-layout-problem.cc:317 +msgid "compressing music to fit" +msgstr "συμπίεση της μουσικής για να χωρέσει" + +#: page-layout-problem.cc:733 +msgid "staff-affinities should only decrease" +msgstr "το staff-affinities θα πρέπει μόνο να μειώνεται" + +#: page-turn-page-breaking.cc:168 +#, c-format +msgid "page-turn-page-breaking: breaking from %d to %d" +msgstr "page-turn-page-breaking: αλλαγή από %d σε %d" + +#: page-turn-page-breaking.cc:217 +msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." +msgstr "αδυναμία να χωρέσει η πρώτη αλλαγή σελίδας σε μία σελίδα. Σκεφθείτε να ορίσετε το first-page-number σε ζυγό αριθμό." + +#: page-turn-page-breaking.cc:230 +#, c-format +msgid "Calculating page and line breaks (%d possible page breaks)..." +msgstr "Υπολογισμός αλλαγών σελίδας και γραμμής (%d δυνατές αλλαγές σελίδας)…" + +#: page-turn-page-breaking.cc:297 +#, c-format +msgid "break starting at page %d" +msgstr "αλλαγή που αρχίζει στη σελίδα %d" + +#: page-turn-page-breaking.cc:298 +#, c-format +msgid "\tdemerits: %f" +msgstr "\tdemerits: %f" + +#: page-turn-page-breaking.cc:299 +#, c-format +msgid "\tsystem count: %d" +msgstr "\tsystem καταμέτρηση: %d" + +#: page-turn-page-breaking.cc:300 +#, c-format +msgid "\tpage count: %d" +msgstr "\tpage καταμέτρηση: %d" + +#: page-turn-page-breaking.cc:301 +#, c-format +msgid "\tprevious break: %d" +msgstr "\tprevious αλλαγή: %d" + +#: pango-font.cc:204 +#, c-format +msgid "" +"Glyph has no name, but font supports glyph naming.\n" +"Skipping glyph U+%0X, file %s" +msgstr "" +"Το σύμβολο δεν έχει όνομα αλλά η γραμματοσειρά υποστηρίζει ονόματα συμβόλων.\n" +"Παράβλεψη συμβόλου U+%0X, αρχείο %s" + +#: pango-font.cc:241 +#, c-format +msgid "no PostScript font name for font `%s'" +msgstr "δεν υπάρχει PostScript όνομα γραμματοσειράς για τη γραμματοσειρά `%s'" + +#: pango-font.cc:290 +msgid "FreeType face has no PostScript font name" +msgstr "Το FreeType face δεν έχει όνομα γραμματοσειράς PostScript" + +#: paper-book.cc:214 +#, c-format +msgid "program option -dprint-pages not supported by backend `%s'" +msgstr "η επιλογή προγράμματος -dprint-pages δεν υποστηρίζεται από το σύστημα υποστήριξης `%s'" + +#: paper-book.cc:233 +#, c-format +msgid "program option -dpreview not supported by backend `%s'" +msgstr "η επιλογή προγράμματος -dpreview δεν υποστηρίζεται από το σύστημα υποστήριξης `%s'" + +#: paper-column-engraver.cc:233 +msgid "forced break was overridden by some other event, should you be using bar checks?" +msgstr "η εξαναγκασμένη αλλαγή παρακάμφθηκε από κάποιο άλλο γεγονός, μήπως θα έπρεπε να χρησιμοποιείτε ελέγχους μέτρων;" + +#: paper-outputter-scheme.cc:41 +#, c-format +msgid "Layout output to `%s'..." +msgstr "Εξαγωγή διάταξης σε `%s'…" + +#: paper-score.cc:135 +#, c-format +msgid "Element count %d (spanners %d) " +msgstr "Καταμέτρηση στοιχείων %d (αλλαγές ρυθμικής αγωγής %d) " + +#: paper-score.cc:139 +msgid "Preprocessing graphical objects..." +msgstr "Προεπεξεργασία γραφικών αντικειμένων…" + +#: parse-scm.cc:101 +msgid "GUILE signaled an error for the expression beginning here" +msgstr "Το GUILE επεσήμανε ένα λάθος για την έκφραση που αρχίζει εδώ" + +#: partial-iterator.cc:45 +msgid "trying to use \\partial after the start of a piece" +msgstr "προσπάθεια χρήσης του \\partial μετά την αρχή ενός κομματιού" + +#: percent-repeat-engraver.cc:213 +msgid "unterminated percent repeat" +msgstr "μη τερματισμένη ποσοστιαία επανάληψη" + +#: performance.cc:54 +msgid "Track..." +msgstr "Κομμάτι…" + +#: performance.cc:83 +msgid "MIDI channel wrapped around" +msgstr "Κανάλι MIDI περιτυλιγμένο" + +#: performance.cc:84 +msgid "remapping modulo 16" +msgstr "αναχαρτογράφηση modulo 16" + +#: performance.cc:111 +#, c-format +msgid "MIDI output to `%s'..." +msgstr "Έξοδος MIDI σε `%s'…" + +#: phrasing-slur-engraver.cc:157 +msgid "unterminated phrasing slur" +msgstr "μη τερματισμένο λεγκάτο φράσης" + +#: piano-pedal-engraver.cc:298 +#, c-format +msgid "expect 3 strings for piano pedals, found: %ld" +msgstr "αναμένονται 3 χορδές για πεντάλ πιάνου, βρέθηκαν: %ld" + +#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324 +#: piano-pedal-performer.cc:104 +#, c-format +msgid "cannot find start of piano pedal: `%s'" +msgstr "αδυναμία εύρεσης αρχής πεντάλ πιάνου: `%s'" + +#: piano-pedal-engraver.cc:359 +#, c-format +msgid "cannot find start of piano pedal bracket: `%s'" +msgstr "αδυναμία εύρεσης αγκύλης για αρχή πεντάλ πιάνου: `%s'" + +#: program-option-scheme.cc:237 +#, c-format +msgid "no such internal option: %s" +msgstr "δεν υπάρχει τέτοια εσωτερική επιλογή: %s" + +#: property-iterator.cc:85 +#, c-format +msgid "not a grob name, `%s'" +msgstr "δεν είναι όνομα grob, `%s'" + +#: relative-octave-check.cc:49 +msgid "Failed octave check, got: " +msgstr "Αποτυχία ελέγχου οκτάβας, προέκυψε:" + +#: relocate.cc:54 +#, c-format +msgid "Setting %s to %s" +msgstr "Ορισμός %s σε %s" + +#: relocate.cc:74 +#, c-format +msgid "no such file: %s for %s" +msgstr "δεν υπάρχει τέτοιο αρχείο: %s για %s" + +#: relocate.cc:84 relocate.cc:102 +#, c-format +msgid "no such directory: %s for %s" +msgstr "δεν υπάρχει τέτοιος κατάλογος: %s για %s" + +#: relocate.cc:94 +#, c-format +msgid "%s=%s (prepend)\n" +msgstr "%s=%s (προηγείται)\n" + +#: relocate.cc:124 +#, c-format +msgid "not relocating, no %s/ or current/ found under %s" +msgstr "μη επανατοποθέτηση, δεν βρέθηκε %s/ ή current/ κάτω από το %s" + +#: relocate.cc:135 +#, c-format +msgid "Relocation: compile datadir=%s, new datadir=%s" +msgstr "Επανατοποθέτηση: compile datadir=%s, νέο datadir=%s" + +#: relocate.cc:148 +#, c-format +msgid "Relocation: framework_prefix=%s" +msgstr "Επανατοποθέτηση: framework_prefix=%s" + +#: relocate.cc:189 +#, c-format +msgid "Relocation: is absolute: argv0=%s" +msgstr "Επανατοποθέτηση: είναι απόλυτο: argv0=%s" + +#: relocate.cc:196 +#, c-format +msgid "Relocation: from cwd: argv0=%s" +msgstr "Επανατοποθέτηση: από cwd: argv0=%s" + +#: relocate.cc:205 +#, c-format +msgid "" +"Relocation: from PATH=%s\n" +"argv0=%s" +msgstr "" +"Επανατοποθέτηση: από PATH=%s\n" +"argv0=%s" + +#: relocate.cc:239 +msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" +msgstr "Το LILYPONDPREFIX είναι παρωχημένο, χρησιμοποιήστε το LILYPOND_DATADIR" + +#: relocate.cc:366 +#, c-format +msgid "Relocation file: %s" +msgstr "Αρχείο επανατοποθέτησης: %s" + +#: relocate.cc:372 source-file.cc:65 +#, c-format +msgid "cannot open file: `%s'" +msgstr "αδυναμία ανοίγματος αρχείου: `%s'" + +#: relocate.cc:402 +#, c-format +msgid "Unknown relocation command %s" +msgstr "Άγνωστη εντολή επανατοποθέτησης %s" + +#: rest-collision-engraver.cc:70 +msgid "rhythmic head is not part of a rhythmic column" +msgstr "η κεφαλή του ρυθμού δεν είναι μέρος ρυθμικής στήλης" + +#: rest-collision.cc:146 +msgid "cannot resolve rest collision: rest direction not set" +msgstr "αδυναμία επίλυσης σύγκρουσης παύσεων: δεν ορίσθηκε η διεύθυνση των παύσεων" + +#: rest-collision.cc:160 rest-collision.cc:205 +msgid "too many colliding rests" +msgstr "πάρα πολλές συγκρουόμενες παύσεις" + +#: rest.cc:159 +#, c-format +msgid "rest `%s' not found" +msgstr "η παύση `%s' δεν βρέθηκε" + +#: score-engraver.cc:78 +#, c-format +msgid "cannot find `%s'" +msgstr "αδυναμία εύρεσης `%s'" + +#: score-engraver.cc:80 +msgid "Music font has not been installed properly." +msgstr "Η γραμματοσειρά μουσικής δεν έχει εγκατασταθεί σωστά." + +#: score-engraver.cc:82 +#, c-format +msgid "Search path `%s'" +msgstr "Αναζήτηση διαδρομής `%s'" + +#: score-engraver.cc:84 +msgid "Aborting" +msgstr "Ακύρωση" + +#: score.cc:178 +msgid "already have music in score" +msgstr "υπάρχει ήδη μουσική στην παρτιτούρα" + +#: score.cc:179 +msgid "this is the previous music" +msgstr "αυτή είναι η προηγούμενη μουσική" + +#: score.cc:184 +msgid "errors found, ignoring music expression" +msgstr "βρέθηκαν σφάλματα, θα αγνοηθεί η μουσική έκφραση" + +#. FIXME: +#: script-engraver.cc:113 +msgid "do not know how to interpret articulation:" +msgstr "δεν γνωρίζω πως να ερμηνεύσω την άρθρωση:" + +#: script-engraver.cc:114 +msgid " scheme encoding: " +msgstr "κωδικοποίηση σχήματος:" + +#: slur-engraver.cc:93 +#, c-format +msgid "direction of %s invalid: %d" +msgstr "μη έγκυρη διεύθυνση του %s: %d" + +#: slur-engraver.cc:162 +msgid "unterminated slur" +msgstr "μη τερματισμένο λεγκάτο" + +#: slur-engraver.cc:174 +msgid "cannot end slur" +msgstr "αδυναμία τελειώματος λεγκάτο" + +#: slur.cc:369 +#, c-format +msgid "Ignoring grob for slur: %s. avoid-slur not set?" +msgstr "Αγνόηση του grob για το λεγκάτο: %s. το avoid-slur δεν ορίσθηκε;" + +#: source-file.cc:85 +#, c-format +msgid "expected to read %d characters, got %d" +msgstr "αναμένονταν ανάγνωση %d χαρακτήρων, λήφθηκαν %d" + +#: spaceable-grob.cc:94 +#, c-format +msgid "No spring between column %d and next one" +msgstr "Δεν υπάρχει μετάβαση μεταξύ της στήλης %d και της επόμενης" + +#: stem-engraver.cc:103 +msgid "tremolo duration is too long" +msgstr "η διάρκεια του τρέμολο είναι πολύ μεγάλη" + +#. FIXME: +#: stem-engraver.cc:140 +#, c-format +msgid "adding note head to incompatible stem (type = %d)" +msgstr "προσθήκη κεφαλής νότας σε μη συμβατό στέλεχος (τύπος=%d)" + +#: stem-engraver.cc:142 +msgid "maybe input should specify polyphonic voices" +msgstr "ίσως η εισαγωγή θα έπρεπε να ορίζει πολυφωνικές φωνές" + +#: stem.cc:116 +msgid "weird stem size, check for narrow beams" +msgstr "περίεργο μέγεθος στελέχους, έλεγχος για στενές γραμμές" + +#: stem.cc:642 +#, c-format +msgid "flag `%s' not found" +msgstr "η σημαία `%s' δεν βρέθηκε" + +#: stem.cc:658 +#, c-format +msgid "flag stroke `%s' not found" +msgstr "η σημαία του χτύπου `%s' δεν βρέθηκε" + +#: system.cc:197 +#, c-format +msgid "Element count %d" +msgstr "Καταμέτρηση στοιχείων %d" + +#: system.cc:289 +#, c-format +msgid "Grob count %d" +msgstr "Καταμέτρηση grob %d" + +#: text-spanner-engraver.cc:73 +msgid "cannot find start of text spanner" +msgstr "αδυναμία εύρεσης αρχής ενδεικτικού διάρκειας" + +#: text-spanner-engraver.cc:86 +msgid "already have a text spanner" +msgstr "υπάρχει ήδη ενδεικτικό διάρκειας κειμένου" + +#: text-spanner-engraver.cc:132 +msgid "unterminated text spanner" +msgstr "μη τερματισμένο ενδεικτικό διάρκειας κειμένου" + +#: tie-engraver.cc:116 +msgid "unterminated tie" +msgstr "μη τερματισμένη σύνδεση" + +#: tie-engraver.cc:312 +msgid "lonely tie" +msgstr "μοναχική σύνδεση διαρκείας" + +#. +#. Todo: should make typecheck? +#. +#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. +#. +#: time-signature-engraver.cc:75 +#, c-format +msgid "strange time signature found: %d/%d" +msgstr "βρέθηκε περίεργο μέτρο: %d/%d" + +#. If there is no such symbol, we default to the numbered style. +#. (Here really with a warning!) +#: time-signature.cc:94 +#, c-format +msgid "time signature symbol `%s' not found; reverting to numbered style" +msgstr "το σύμβολο `%s' για το ρυθμό δεν βρέθηκε, αλλαγή σε αριθμημένο στυλ" + +#: translator-ctors.cc:65 +#, c-format +msgid "unknown translator: `%s'" +msgstr "άγνωστος μεταφραστής: `%s'" + +#: translator-group-ctors.cc:40 +#, c-format +msgid "fatal error. Couldn't find type: %s" +msgstr "κρίσιμο σφάλμα. Αδυναμία εύρεσης τύπου: %s" + +#: translator-group.cc:188 +#, c-format +msgid "cannot find: `%s'" +msgstr "αδυναμία εύρεσης: `%s'" + +#: translator.cc:359 +#, c-format +msgid "Two simultaneous %s events, junking this one" +msgstr "Δύο ταυτόχρονα γεγονότα %s, απόρριψη αυτού εδώ" + +#: translator.cc:360 +#, c-format +msgid "Previous %s event here" +msgstr "Προηγούμενο γεγονός %s εδώ" + +#: ttf.cc:481 ttf.cc:530 +#, c-format +msgid "font index %d too large for font `%s', using index 0" +msgstr "ο δείκτης γραμματοσειράς %d είναι πολύ μεγάλος για τη γραμματοσειρά `%s', γίνεται χρήση του δείκτη 0" + +#: ttf.cc:513 ttf.cc:565 +msgid "font index must be non-negative, using index 0" +msgstr "ο δείκτης γραμματοσειράς πρέπει να είναι μη-αρνητικός, γίνεται χρήστη του δείκτη 0" + +#: tuplet-engraver.cc:107 +msgid "No tuplet to end" +msgstr "Δεν υπάρχει τρίηχο κλπ για τερματισμό" + +#: vaticana-ligature-engraver.cc:400 +#, c-format +msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style" +msgstr "αγνοήθηκε το πρόσημο/α `%s' αυτής της κεφαλής σύμφωνα με περιορισμούς του επιλεγμένου στυλ λιγκατούρας" + +#: vaticana-ligature-engraver.cc:736 +#, c-format +msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" +msgstr "Vaticana_ligature_engraver: ορισμός `spacing-increment = %f': ptr =%ul" + +#: vaticana-ligature.cc:95 +msgid "flexa-height undefined; assuming 0" +msgstr "flexa-height μη καθορισμένο, υποθέτουμε 0" + +#: vaticana-ligature.cc:100 +msgid "ascending vaticana style flexa" +msgstr "ανοδική flexa σε στυλ vaticana" + +#: vaticana-ligature.cc:188 +msgid "Vaticana_ligature: zero join (delta_pitch == 0)" +msgstr "Vaticana_ligature: μηδενική ένωση (delta_pitch == 0)" + +#. fixme: be more verbose. +#: volta-engraver.cc:111 +msgid "cannot end volta spanner" +msgstr "αδυναμία τερματισμού ενδεικτικού φοράς" + +#: volta-engraver.cc:121 +msgid "already have a volta spanner, ending that one prematurely" +msgstr "υπάρχει ήδη ενδεικτικό φοράς, πρόωρος τερματισμός αυτού" + +#: volta-engraver.cc:125 +msgid "also already have an ended spanner" +msgstr "επίσης υπάρχει ήδη ένα τερματισμένο ενδεικτικό διάρκειας" + +#: volta-engraver.cc:126 +msgid "giving up" +msgstr "παραίτηση" + +#: parser.yy:816 +msgid "\\paper cannot be used in \\score, use \\layout instead" +msgstr "το \\paper δεν μπορεί να χρησιμοποιηθεί στο \\score, χρήση του \\layout αντ' αυτού" + +#: parser.yy:840 +msgid "need \\paper for paper block" +msgstr "χρειάζεται το \\paper για μπλοκ χαρτιού" + +#: parser.yy:1365 +msgid "only \\consists takes non-string argument." +msgstr "μόνο το \\consists δέχεται όρισμα που δεν είναι ακολουθία." + +#: parser.yy:1378 +msgid "Grob name should be alphanumeric" +msgstr "Το όνομα του Grob πρέπει να είναι αλφαριθμητικό" + +#: parser.yy:1687 +msgid "second argument must be pitch list" +msgstr "το δεύτερο όρισμα πρέπει να είναι λίστα τονικών υψών" + +#: parser.yy:1714 parser.yy:1719 parser.yy:2192 +msgid "have to be in Lyric mode for lyrics" +msgstr "πρέπει να είναι σε κατάσταση Στίχων για στίχους" + +#: parser.yy:1816 +msgid "expecting string as script definition" +msgstr "αναμένεται αλφαριθμητικό ως ορισμός script" + +#: parser.yy:1971 parser.yy:2022 +#, c-format +msgid "not a duration: %d" +msgstr "δεν είναι διάρκεια: %d" + +#: parser.yy:2146 +msgid "have to be in Note mode for notes" +msgstr "πρέπει να είναι σε κατάσταση Νοτών για νότες" + +#: parser.yy:2207 +msgid "have to be in Chord mode for chords" +msgstr "πρέπει να είναι σε κατάσταση Συγχορδίας για συγχορδίες" + +#: lexer.ll:190 +msgid "stray UTF-8 BOM encountered" +msgstr "βρέθηκε άσχετο UTF-8 BOM" + +#: lexer.ll:194 +msgid "Skipping UTF-8 BOM" +msgstr "Παράβλεψη του UTF-8 BOM" + +#: lexer.ll:249 +#, c-format +msgid "Renaming input to: `%s'" +msgstr "Μετονομασία εισαγωγής σε: `%s'" + +#: lexer.ll:266 +msgid "quoted string expected after \\version" +msgstr "αναμένεται αλφαριθμητικό σε εισαγωγικά μετά το \\version" + +#: lexer.ll:270 +msgid "quoted string expected after \\sourcefilename" +msgstr "αλφαριθμητικό σε εισαγωγικά αναμενόταν μετά το \\sourcefilename" + +#: lexer.ll:274 +msgid "integer expected after \\sourcefileline" +msgstr "αναμενόταν ακέραιος μετά το \\sourcefileline" + +#: lexer.ll:287 +msgid "EOF found inside a comment" +msgstr "βρέθηκε EOF μέσα σε σχόλιο" + +#: lexer.ll:302 +msgid "\\maininput not allowed outside init files" +msgstr "το \\maininput δεν επιτρέπεται έξω από αρχεία αρχικοποίησης" + +#: lexer.ll:326 +#, c-format +msgid "wrong or undefined identifier: `%s'" +msgstr "εσφαλμένος ή μη καθορισμένος ταυτοποιητής: `%s'" + +#. backup rule +#: lexer.ll:335 +msgid "end quote missing" +msgstr "λείπει το εισαγωγικό κλεισίματος" + +#: lexer.ll:485 +msgid "Brace found at end of lyric. Did you forget a space?" +msgstr "Βρέθηκε αγκύλη στο τέλος του στίχου. Ξεχάσατε ένα κενό διάστημα;" + +#: lexer.ll:595 +msgid "Brace found at end of markup. Did you forget a space?" +msgstr "Βρέθηκε αγκύλη στο τέλος της επισήμανσης. Ξεχάσατε ένα κενό διάστημα;" + +#: lexer.ll:699 +#, c-format +msgid "invalid character: `%c'" +msgstr "μη έγκυρος χαρακτήρας: `%c'" + +#: lexer.ll:814 lexer.ll:815 +#, c-format +msgid "unknown escaped string: `\\%s'" +msgstr "άγνωστο αλφαριθμητικό με χαρακτήρες διαφυγής: `\\%s'" + +#: lexer.ll:924 lexer.ll:925 +#, c-format +msgid "file too old: %s (oldest supported: %s)" +msgstr "πολύ παλιό αρχείο: %s (το παλιότερο υποστηριζόμενο είναι: %s)" + +#: lexer.ll:925 lexer.ll:926 +msgid "consider updating the input with the convert-ly script" +msgstr "σκεφτείτε να ενημερώσετε την εισαγωγή με το script convert-ly" + +#: lexer.ll:931 lexer.ll:932 +#, c-format +msgid "program too old: %s (file requires: %s)" +msgstr "το πρόγραμμα είναι πολύ παλιό: %s (το αρχείο απαιτεί: %s)" + +#: backend-library.scm:35 ps-to-png.scm:66 +#, scheme-format +msgid "Invoking `~a'..." +msgstr "Κλήση `~a'…" + +#: backend-library.scm:45 +#, scheme-format +msgid "`~a' failed (~a)" +msgstr "`~a' απέτυχε (~a)" + +#: backend-library.scm:130 +#, scheme-format +msgid "Converting to `~a'..." +msgstr "Μετατροπή σε `~a'…" + +#. Do not try to guess the name of the png file, +#. GS produces PNG files like BASE-page%d.png. +#: backend-library.scm:140 +#, scheme-format +msgid "Converting to ~a..." +msgstr "Μετατροπή σε ~a…" + +#: backend-library.scm:178 +#, scheme-format +msgid "Writing header field `~a' to `~a'..." +msgstr "Εγγραφή του πεδίου κεφαλίδας `~a' σε `~a'…" + +#: backend-library.scm:228 +#, scheme-format +msgid "missing stencil expression `~S'" +msgstr "λείπει η έκφραση stencil `~S'" + +#: chord-entry.scm:50 +#, scheme-format +msgid "Spurious garbage following chord: ~A" +msgstr "Άχρηστα σκουπίδια ακολουθούν τη συγχορδία: ~A" + +#: define-context-properties.scm:31 define-grob-properties.scm:21 +#: define-music-properties.scm:21 +#, scheme-format +msgid "symbol ~S redefined" +msgstr "το σύμβολο ~S επανακαθορίσθηκε" + +#: define-event-classes.scm:78 +msgid "All classes must be the last in their matrilineal line." +msgstr "Όλες οι κλάσεις πρέπει να είναι οι τελευταίες στη μητρική τους γραμμή." + +#: define-event-classes.scm:82 +msgid "All classes must have a well-defined pedigree in the existing class hierarchy." +msgstr "Όλες οι κλάσεις πρέπει να έχουν καλά καθορισμένη γενεαλογία στην υπάρχουσα ιεραρχία κλάσεων." + +#: define-event-classes.scm:148 +#, scheme-format +msgid "event class ~A seems to be unused" +msgstr "η κλάση γεγονότων ~A φαίνεται να μη χρησιμοποιείται" + +#. should be programming-error +#: define-event-classes.scm:154 +#, scheme-format +msgid "translator listens to nonexisting event class ~A" +msgstr "ο μεταφραστής ακούει στη μη υπάρχουσα κλάση γεγονότων ~A" + +#: define-markup-commands.scm:803 +msgid "no systems found in \\score markup, does it have a \\layout block?" +msgstr "δεν βρέθηκαν πεντάγραμμα στην επισήμανση \\score, έχει μπλοκ \\layout;" + +#: define-markup-commands.scm:2571 +#, scheme-format +msgid "Cannot find glyph ~a" +msgstr "Αδυναμία εύρεσης συμβόλου ~a" + +#: define-markup-commands.scm:2831 +#, scheme-format +msgid "no brace found for point size ~S " +msgstr "δεν βρέθηκε αγκύλη για μέγεθος σημείου ~S" + +#: define-markup-commands.scm:2832 +#, scheme-format +msgid "defaulting to ~S pt" +msgstr "εφαρμογή προεπιλογής σε ~S pt" + +#: define-markup-commands.scm:2985 +#, scheme-format +msgid "not a valid duration string: ~a" +msgstr "μη έγκυρο αλφαριθμητικό διάρκειας: ~a" + +#: define-music-types.scm:725 +#, scheme-format +msgid "symbol expected: ~S" +msgstr "αναμενόταν σύμβολο: ~S" + +#: define-music-types.scm:728 +#, scheme-format +msgid "cannot find music object: ~S" +msgstr "αδυναμία εύρεσης μουσικού αντικειμένου: ~S" + +#: define-music-types.scm:747 +#, scheme-format +msgid "unknown repeat type `~S'" +msgstr "άγνωστος τύπος επανάληψης `~S'" + +#: define-music-types.scm:748 +msgid "See define-music-types.scm for supported repeats" +msgstr "Βλέπε define-music-types.scm για υποστηριζόμενες επαναλήψεις" + +#: document-backend.scm:132 +#, scheme-format +msgid "pair expected in doc ~s" +msgstr "αναμενόταν ζευγάρι στο έγγραφο ~s" + +#: document-backend.scm:189 +#, scheme-format +msgid "cannot find interface for property: ~S" +msgstr "αδυναμία εύρεσης διεπαφής για την ιδιότητα: ~S" + +#: document-backend.scm:199 +#, scheme-format +msgid "unknown Grob interface: ~S" +msgstr "άγνωστη διεπαφή Grob: ~S" + +#: documentation-lib.scm:59 +#, scheme-format +msgid "Processing ~S..." +msgstr "Επεξεργασία ~S…" + +#: documentation-lib.scm:176 +#, scheme-format +msgid "Writing ~S..." +msgstr "Εγγραφή ~S…" + +#: documentation-lib.scm:198 +#, scheme-format +msgid "cannot find description for property ~S (~S)" +msgstr "αδυναμία εύρεσης περιγραφής για την ιδιότητα ~S (~S)" + +#: flag-styles.scm:142 +#, scheme-format +msgid "flag stroke `~a' or `~a' not found" +msgstr "η σημαία χτύπου `~a' ή `~a' δεν βρέθηκε" + +#: framework-eps.scm:108 +#, scheme-format +msgid "Writing ~a..." +msgstr "Εγγραφή ~a…" + +#: framework-ps.scm:250 +#, scheme-format +msgid "cannot embed ~S=~S" +msgstr "αδυναμία ενσωμάτωσης ~S=~S" + +#: framework-ps.scm:291 +#, scheme-format +msgid "cannot extract file matching ~a from ~a" +msgstr "αδυναμία εξαγωγής αρχείου που να ταιριάζει ~a από ~a" + +#: framework-ps.scm:309 +#, scheme-format +msgid "do not know how to embed ~S=~S" +msgstr "δεν γνωρίζω πως να ενσωματώσω ~S=~S" + +#: framework-ps.scm:334 +#, scheme-format +msgid "do not know how to embed font ~s ~s ~s" +msgstr "δεν γνωρίζω πως να ενσωματώσω τη γραμματοσειρά ~s ~s ~s" + +#: framework-ps.scm:639 +msgid "" +"\n" +"The PostScript backend does not support the\n" +"system-by-system output. For that, use the EPS backend instead,\n" +"\n" +" lilypond -dbackend=eps FILE\n" +"\n" +"If have cut & pasted a lilypond fragment from a webpage, be sure\n" +"to only remove anything before\n" +"\n" +" %% ****************************************************************\n" +" %% Start cut-&-pastable-section\n" +" %% ****************************************************************\n" +msgstr "" +"\n" +"Το PostScript backend δεν υποστηρίζει κατά σύστημα\n" +"έξοδο. Για αυτό, χρησιμοποιήστε το EPS backend,\n" +"\n" +" lilypond -dbackend=eps FILE\n" +"\n" +"Αν έχετε αποκόψει και επικολλήσει ένα τμήμα lilypond από μια ιστοσελίδα, βεβαιωθείτε\n" +"ότι αφαιρέσατε μόνο οτιδήποτε πριν\n" +"\n" +" %% ****************************************************************\n" +" %% Start cut-&-pastable-section\n" +" %% ****************************************************************\n" + +#: framework-svg.scm:84 +#, scheme-format +msgid "Updating font into: ~a" +msgstr "Ενημέρωση γραμματοσειράς σε: ~a" + +#: graphviz.scm:64 +#, scheme-format +msgid "Writing graph `~a'..." +msgstr "Εγγραφή διαγράμματος `~a'…" + +#: layout-beam.scm:38 +#, scheme-format +msgid "Error in beam quanting. Expected (~S,~S) found ~S." +msgstr "Σφάλμα στην ποσοτικοποίηση στελεχών. Αναμένονταν (~S,~S) βρέθηκαν ~S." + +#: layout-beam.scm:52 +#, scheme-format +msgid "Error in beam quanting. Expected ~S 0, found ~S." +msgstr "Σφάλμα στην ποσοτικοποίηση στελεχών. Αναμένονταν ~S 0, βρέθηκαν ~S." + +#: lily-library.scm:747 +msgid "" +"Find the index between @var{start} and @var{end} (an integer)\n" +"which will produce the closest match to @var{target-val} when\n" +"applied to function @var{getter}." +msgstr "" +"Εύρεση του δείκτη μεταξύ @var{start} και @var{end} (ακέραιος)\n" +"που θα παράγει το εγγύτερο αποτέλεσμα στο @var{target-val} όταν\n" +"εφαρμοσθεί στη συνάρτηση @var{getter}." + +#: lily-library.scm:821 +#, scheme-format +msgid "unknown unit: ~S" +msgstr "άγνωστη μονάδα: ~S" + +#: lily-library.scm:847 lily-library.scm:856 +msgid "warning:" +msgstr "προειδοποίηση:" + +#: lily-library.scm:849 +#, scheme-format +msgid "no \\version statement found, please add~afor future compatibility" +msgstr "δεν βρέθηκε δήλωση \\version, παρακαλώ προσθέστε ~a για μελλοντική συμβατότητα" + +#: lily-library.scm:857 +msgid "old relative compatibility not used" +msgstr "παλιά σχετική συμβατότητα δεν χρησιμοποιήθηκε" + +#: lily.scm:282 +#, scheme-format +msgid "cannot find: ~A" +msgstr "αδυναμία εύρεσης: ~A" + +#: lily.scm:342 +#, scheme-format +msgid "wrong type for argument ~a. Expecting ~a, found ~s" +msgstr "εσφαλμένος τύπος για το όρισμα ~a. Αναμενόταν ~a, βρέθηκε ~s" + +#: lily.scm:704 +msgid "Compilation successfully completed" +msgstr "Η μεταγλώττιση ολοκληρώθηκε επιτυχώς" + +#: lily.scm:705 +msgid "Compilation completed with warnings or errors" +msgstr "Μεταγλώττιση ολοκληρώθηκε με προειδοποιήσεις ή σφάλματα" + +#: lily.scm:767 +#, scheme-format +msgid "job ~a terminated with signal: ~a" +msgstr "η εργασία ~a τερματίστηκε με σήμα: ~a" + +#: lily.scm:770 +#, scheme-format +msgid "" +"logfile ~a (exit ~a):\n" +"~a" +msgstr "" +"logfile ~a (έξοδος ~a):\n" +"~a" + +#: lily.scm:792 lily.scm:870 +#, scheme-format +msgid "failed files: ~S" +msgstr "αρχεία που απέτυχαν: ~S" + +#: lily.scm:861 +#, scheme-format +msgid "Redirecting output to ~a..." +msgstr "Επανακατεύθυνση εξόδου σε ~a…" + +#: lily.scm:880 +#, scheme-format +msgid "Invoking `~a'...\n" +msgstr "Κλήση `~a'…\n" + +#: ly-syntax-constructors.scm:51 +msgid "Music head function must return Music object" +msgstr "Η λειτουργία Music head πρέπει να επιστρέφει Music object" + +#: ly-syntax-constructors.scm:176 +#, scheme-format +msgid "Invalid property operation ~a" +msgstr "Μη έγκυρη ενέργεια ιδιότητας ~a" + +#: markup.scm:223 +#, scheme-format +msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" +msgstr "Λάθος αριθμός ορισμάτων. Αναμενόταν: ~A, βρέθηκαν ~A: ~S" + +#: markup.scm:229 +#, scheme-format +msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." +msgstr "Μη έγκυρο όρισμα στη θέση ~A. Αναμενόταν: ~A, βρέθηκε: ~S" + +#: markup.scm:292 +#, scheme-format +msgid "Not a markup command: ~A" +msgstr "Δεν είναι εντολή επισήμανσης: ~A" + +#: music-functions.scm:265 +msgid "More alternatives than repeats. Junking excess alternatives" +msgstr "Περισσότερες εναλλαγές από επαναλήψεις. Απόρριψη επιπλέον εναλλαγών" + +#: music-functions.scm:294 +#, scheme-format +msgid "invalid tremolo repeat count: ~a" +msgstr "μη έγκυρη καταμέτρηση επαναλήψεων τρέμολο: ~a" + +#: music-functions.scm:601 +#, scheme-format +msgid "music expected: ~S" +msgstr "αναμενόταν μουσική: ~S" + +#. FIXME: uncomprehensable message +#: music-functions.scm:649 +#, scheme-format +msgid "Bar check failed. Expect to be at ~a, instead at ~a" +msgstr "Αποτυχία ελέγχου μέτρων. Αναμενόταν να είναι σε ~a, αντίθετα ήταν σε ~a" + +#: music-functions.scm:828 +#, scheme-format +msgid "cannot find quoted music: `~S'" +msgstr "αδυναμία εύρεσης παρατιθέμενης μουσικής: `~S'" + +#: music-functions.scm:964 +msgid "Add @var{octave-shift} to the octave of @var{pitch}." +msgstr "Προσθήκη του @var{octave-shift} στην οκτάβα του @var{pitch}." + +#: music-functions.scm:1019 +#, scheme-format +msgid "Unknown octaveness type: ~S " +msgstr "Άγνωστος τύπος οκτάβας: ~S" + +#: music-functions.scm:1020 +msgid "Defaulting to 'any-octave." +msgstr "Εφαρμογή προεπιλογής 'any-octave." + +#: music-functions.scm:1355 +#, scheme-format +msgid "unknown accidental style: ~S" +msgstr "άγνωστο στυλ σημείου αλλοίωσης: ~S" + +#: output-ps.scm:289 output-svg.scm:550 +#, scheme-format +msgid "unknown line-cap-style: ~S" +msgstr "άγνωστο στυλ line-cap-style: ~S" + +#: output-ps.scm:294 output-svg.scm:556 +#, scheme-format +msgid "unknown line-join-style: ~S" +msgstr "άγνωστο στυλ line-join-style: ~S" + +#: output-svg.scm:47 +#, scheme-format +msgid "undefined: ~S" +msgstr "μη καθορισμένο: ~S" + +#: output-svg.scm:151 +#, scheme-format +msgid "cannot decypher Pango description: ~a" +msgstr "αδυναμία αποκρυπτογράφησης περιγραφής Pango: ~a" + +#: output-svg.scm:231 +msgid "Glyph must have a unicode value" +msgstr "Το σύμβολο πρέπει να έχει μια τιμή unicode" + +#: output-svg.scm:283 output-svg.scm:293 +#, scheme-format +msgid "cannot find SVG font ~S" +msgstr "αδυναμία εύρεσης γραμματοσειράς SVG ~S" + +#: paper.scm:115 +msgid "set-global-staff-size: not in toplevel scope" +msgstr "set-global-staff-size: όχι στο εύρος του κορυφαίου επιπέδου" + +#: paper.scm:296 +#, scheme-format +msgid "This is not a \\layout {} object, ~S" +msgstr "Αυτό δεν είναι αντικείμενο \\layout {}, ~S" + +#: paper.scm:308 +#, scheme-format +msgid "Unknown paper size: ~a" +msgstr "Άγνωστο μέγεθος χαρτιού: ~a" + +#. TODO: should raise (generic) exception with throw, and catch +#. that in parse-scm.cc +#: paper.scm:323 +msgid "Must use #(set-paper-size .. ) within \\paper { ... }" +msgstr "Πρέπει να χρησιμοποιηθεί το #(set-paper-size .. ) εντός του \\paper { ... }" + +#: parser-clef.scm:140 +#, scheme-format +msgid "unknown clef type `~a'" +msgstr "άγνωστος τύπος κλειδιού `~a'" + +#: parser-clef.scm:141 +#, scheme-format +msgid "supported clefs: ~a" +msgstr "υποστηριζόμενα κλειδιά: ~a" + +#: ps-to-png.scm:72 +#, scheme-format +msgid "~a exited with status: ~S" +msgstr "~a τερμάτισε με κατάσταση: ~S" + +#: to-xml.scm:191 +#, scheme-format +msgid "assertion failed: ~S" +msgstr "αποτυχία ισχυρισμού: ~S" + +#~ msgid "Tuplet brackets displaying both note durations are not implemented, using default" +#~ msgstr "Γραμμές των τρίηχων κλπ που εμφανίζουν και τις διάρκεια των νοτών δεν είναι υλοποιημένες, χρήση προεπιλεγών" + +#~ msgid "run executable PROG instead of latex" +#~ msgstr "εκτέλεση εκτελέσιμου PROG αντί για το latex" + +#~ msgid "Encountered file created by Noteworthy Composer's nwc2xml, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" +#~ msgstr "Βρέθηκε αρχείο που δημιουργήθηκε από το nwc2xml του Noteworthy Composer, που περιέχει λάθος πληροφορίες για τις οριζόντιες γραμμές. Όλες οι πληροφορίες για αυτές θα αγνοηθούν στο αρχείο MusicXML" + +#~ msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly" +#~ msgstr "χρήση αρχείου 'LANG.ly' για διαφορετική γλώσσα και αντίστοιχα ονόματα τονικών υψών, π.χ. 'deutsch' για deutsch.ly" + +#~ msgid "tried to get a translation for something that is no child of mine" +#~ msgstr "προσπάθεια λήψης μετάφρασης για κάτι που δεν είναι θυγατρικό μου" + +#~ msgid "expect 2 elements for chord tremolo, found %d" +#~ msgstr "αναμένονται 2 στοιχεία για τρέμολο συγχορδίας, βρέθηκε %d" + +#~ msgid "program has no such type: `%s'" +#~ msgstr "το πρόγραμμα δεν έχει τέτοιο τύπο: `%s'" + +#~ msgid "Rebuilding FontConfig cache %s, this may take a while..." +#~ msgstr "Επανακατασκευή της προσωρινής μνήμης FontConfig %s, αυτό μπορεί να διαρκέσει αρκετά…" + +#~ msgid "deprecated function called: %s" +#~ msgstr "κλήση παρωχημένης συνάρτησης: %s" + +#~ msgid "staff-span event has no direction" +#~ msgstr "το γεγονός staff-span δεν έχει διεύθυνση" + +#~ msgid "cannot find start of trill spanner" +#~ msgstr "αδυναμία εύρεσης έναρξης ενωτικού τρίλλιας" + +#~ msgid "already have a trill spanner" +#~ msgstr "ήδη υπάρχει ενδεικτικό διάρκειας τρίλλιας" + +#~ msgid "cannot convert to ~S" +#~ msgstr "αδυναμία μετατροπής σε ~S" + +#~ msgid "Can't fit systems on page -- ignoring between-system-padding" +#~ msgstr "Αδυναμία ταιριάσματος πενταγράμμων στη σελίδα -- θα αγνοηθεί το between-system-padding" + +#~ msgid "expecting 2 elements for chord tremolo, found ~a" +#~ msgstr "αναμένονταν 2 στοιχεία για τρέμολο συγχορδίας, βρέθηκαν ~a" + +#~ msgid "utf-8-string encountered in PS backend" +#~ msgstr "βρέθηκε utf-8-string στο PS backend" diff --git a/po/es.po b/po/es.po index e93b1ddf46..032d2732db 100644 --- a/po/es.po +++ b/po/es.po @@ -1,27 +1,82 @@ -# translation of lilypond-2.12.0.po to Español +# translation of lilypond-2.13.53.po to Español # Spanish translation of GNU Lilypond - http://lilypond.org -# Copyright (C) 2002, 2007, 2008 Free Software Foundation, Inc. +# Copyright (C) 2002, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # # This file is distributed under the same license as the lilypond package. # # Quique , 2002, 2004. # Daniel Tonda , 2006. -# Francisco Vila , 2007, 2008. +# Francisco Vila , 2007, 2008, 2009, 2010, 2011. # This file is distributed under the same license as the lilypond package. msgid "" msgstr "" -"Project-Id-Version: lilypond-2.12.0\n" +"Project-Id-Version: lilypond-2.13.53\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2008-12-20 11:58+0100\n" -"PO-Revision-Date: 2008-12-30 01:36+0100\n" +"POT-Creation-Date: 2011-03-02 10:34+0100\n" +"PO-Revision-Date: 2011-03-03 15:03+0100\n" "Last-Translator: Francisco Vila \n" "Language-Team: Spanish \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: fontextract.py:25 +#, python-format +msgid "Scanning %s" +msgstr "Explorando %s" + +#: fontextract.py:70 +#, python-format +msgid "Extracted %s" +msgstr "Se ha extraído %s" + +#: fontextract.py:85 +#, python-format +msgid "Writing fonts to %s" +msgstr "Escribiendo las tipografías en %s" + +#: book_snippets.py:519 +#, python-format +msgid "deprecated ly-option used: %s=%s" +msgstr "se ha usado una ly-option obsoleta: %s=%s" + +#: book_snippets.py:521 +#, python-format +msgid "compatibility mode translation: %s=%s" +msgstr "traducción en modo de compatibilidad: %s=%s" + +#: book_snippets.py:524 +#, python-format +msgid "deprecated ly-option used: %s" +msgstr "se usó una ly-option obsoleta: %s" + +#: book_snippets.py:526 +#, python-format +msgid "compatibility mode translation: %s" +msgstr "traducción en modo compatible: %s" + +#: book_snippets.py:544 +#, python-format +msgid "ignoring unknown ly option: %s" +msgstr "opción ly desconocida e ignorada: %s" + +#: book_snippets.py:736 +#, python-format +msgid "Opening filter `%s'\n" +msgstr "Abriendo el filtro «%s»\n" + +#: book_snippets.py:756 +#, python-format +msgid "`%s' failed (%d)" +msgstr "«%s» ha fallado (%d)" + +#: book_snippets.py:757 +msgid "The error log is as follows:" +msgstr "El registro de errores es como sigue:" + #: convertrules.py:12 #, python-format msgid "Not smart enough to convert %s" @@ -36,8 +91,8 @@ msgstr "Consulte el manual para ver los detalles, y efectúe una actualización msgid "%s has been replaced by %s" msgstr "%s se ha sustituido por %s" -#: convertrules.py:24 musicexp.py:16 convert-ly.py:50 lilypond-book.py:94 -#: warn.cc:48 input.cc:90 +#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66 +#: input.cc:109 #, c-format, python-format msgid "warning: %s" msgstr "advertencia: %s" @@ -55,8 +110,8 @@ msgstr "%s en desuso" msgid "deprecated \\textstyle, new \\key syntax" msgstr "\\textstyle en desuso, sintaxis nueva para \\key" -#: convertrules.py:86 convertrules.py:1906 convertrules.py:2085 -#: convertrules.py:2237 convertrules.py:2567 +#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084 +#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862 msgid "bump version for release" msgstr "actualizar la versión para el lanzamiento" @@ -73,7 +128,7 @@ msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" msgstr "\\repeat NÚMERO Alternativa de Música -> \\repeat FOLDSTR Alternativa de Música" #: convertrules.py:216 convertrules.py:699 convertrules.py:1383 -#: convertrules.py:2379 +#: convertrules.py:2378 #, python-format msgid "deprecate %s" msgstr "%s en desuso" @@ -81,7 +136,7 @@ msgstr "%s en desuso" #: convertrules.py:290 #, python-format msgid "deprecate %s " -msgstr "%s en desuso" +msgstr "%s en desuso " #: convertrules.py:319 msgid "new \\notenames format" @@ -126,15 +181,15 @@ msgstr "nombres de propiedad %s" msgid "automaticMelismata turned on by default" msgstr "automaticMelismata activado por omisión" -#: convertrules.py:963 convertrules.py:1682 convertrules.py:1943 -#: convertrules.py:2190 +#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942 +#: convertrules.py:2189 #, python-format msgid "remove %s" msgstr "suprimir %s" #: convertrules.py:1001 convertrules.py:1005 msgid "cluster syntax" -msgstr "sintaxis de los racimos (cluster)" +msgstr "sintaxis de los racimos (clusters)" #: convertrules.py:1014 msgid "new Pedal style syntax" @@ -262,7 +317,7 @@ msgstr "utilice %s" msgid "More Scheme function renaming" msgstr "Más renombrado de funciones de Scheme" -#: convertrules.py:1925 +#: convertrules.py:1924 msgid "" "Page layout has been changed, using paper size and margins.\n" "textheight is no longer used.\n" @@ -270,7 +325,7 @@ msgstr "" "La disposición de la página se ha cambiado, utilizando tamaño de página y márgenes.\n" "textheight ya no se utiliza.\n" -#: convertrules.py:2011 +#: convertrules.py:2010 msgid "" "\\foo -> \\foomode (for chords, notes, etc.)\n" "fold \\new FooContext \\foomode into \\foo." @@ -278,7 +333,7 @@ msgstr "" "\\loquesea -> \\loqueseamode (para acordes, notas, etc.)\n" "plegar \\new LoqueseaContext \\loqueseamode en \\loquesea." -#: convertrules.py:2049 +#: convertrules.py:2048 msgid "" "staff size should be changed at top-level\n" "with\n" @@ -292,82 +347,83 @@ msgstr "" " #(set-global-staff-size )\n" "\n" -#: convertrules.py:2069 +#: convertrules.py:2068 msgid "regularize other identifiers" msgstr "regularizar otros identificadores" -#: convertrules.py:2137 +#: convertrules.py:2136 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" msgstr "\\encoding: recodificación inteligente de latin1 a utf-8. Eliminación de ly:point-and-click" -#: convertrules.py:2150 +#: convertrules.py:2149 msgid "LilyPond source must be UTF-8" msgstr "El código de entrada de LilyPond debe ser UTF-8" -#: convertrules.py:2153 +#: convertrules.py:2152 msgid "Try the texstrings backend" msgstr "Pruebe con el 'backend' texstrings" -#: convertrules.py:2156 +#: convertrules.py:2155 #, python-format msgid "Do something like: %s" msgstr "Haga algo parecido a %s" -#: convertrules.py:2159 +#: convertrules.py:2158 msgid "Or save as UTF-8 in your editor" msgstr "O guarde como UTF-8 en su editor" -#: convertrules.py:2213 +#: convertrules.py:2212 msgid "warn about auto beam settings" msgstr "advertir acerca de los ajustes de barrado automático" -#: convertrules.py:2218 +#: convertrules.py:2217 msgid "auto beam settings" msgstr "ajustes de barrado automático" -#: convertrules.py:2220 +#: convertrules.py:2219 msgid "" "\n" "Auto beam settings must now specify each interesting moment in a measure\n" -"explicitely; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" +"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" msgstr "" "\n" -"Los ajustes de barrado automático ahora deben especificar cada uno de los mementos interesantes de un compás\n" -"explícitamente; 1/4 ya no se multiplica para que cubra también los momentos 1/2 y 3/4.\n" +"Los ajustes de barrado automático ahora deben especificar cada uno de los \n" +"momentos interesantes de un compás explícitamente; 1/4 ya no se multiplica \n" +"para que cubra también los momentos 1/2 y 3/4.\n" -#: convertrules.py:2334 +#: convertrules.py:2333 msgid "verticalAlignmentChildCallback has been deprecated" msgstr "verticalAlignmentChildCallback ha caído en desuso" -#: convertrules.py:2338 +#: convertrules.py:2337 msgid "Remove callbacks property, deprecate XY-extent-callback." msgstr "Eliminar la propiedad de «callbacks», despreciar XY-extent-callback." -#: convertrules.py:2359 +#: convertrules.py:2358 msgid "Use grob closures iso. XY-offset-callbacks." -msgstr "Utilizar las cerraduras de grob iso. XY-offset-callbacks." +msgstr "Utilizar cerraduras de grob en lugar de XY-offset-callbacks." -#: convertrules.py:2421 +#: convertrules.py:2420 msgid "foobar -> foo-bar for \\paper, \\layout" msgstr "fulanomengano -> fulano-mengano para \\paper, \\layout" -#: convertrules.py:2531 +#: convertrules.py:2530 msgid "deprecate \\tempo in \\midi" msgstr "despreciar \\tempo dentro de \\midi" -#: convertrules.py:2578 +#: convertrules.py:2583 msgid "deprecate cautionary-style. Use AccidentalCautionary properties" msgstr "despreciar cautionary-style. Utilizar las propiedades AccidentalCautionary" -#: convertrules.py:2591 +#: convertrules.py:2596 msgid "Rename accidental glyphs, use glyph-name-alist." msgstr "Renombrar los glifos de las alteraciones accidentales, usar glyph-name-alist." -#: convertrules.py:2646 +#: convertrules.py:2651 msgid "edge-text settings for TextSpanner." msgstr "ajustes de edge-text para TextSpanner." -#: convertrules.py:2647 +#: convertrules.py:2652 #, python-format msgid "" "Use\n" @@ -378,23 +434,35 @@ msgstr "" "\n" "%s" +#: convertrules.py:2685 +msgid "Use the `alignment-offsets' sub-property of\n" +msgstr "Utilice la sub-propiedad «alignment-offsets» de\n" + #: convertrules.py:2686 +msgid "NonMusicalPaperColumn #'line-break-system-details\n" +msgstr "NonMusicalPaperColumn #'line-break-system-details\n" + +#: convertrules.py:2687 +msgid "to set fixed distances between staves.\n" +msgstr "para establecer distancias fijas entre pautas.\n" + +#: convertrules.py:2699 msgid "Use #'style not #'dash-fraction to select solid/dashed lines." msgstr "Usar #'style en lugar de #'dash-fraction para elegir entre líneas continuas e intermitentes." -#: convertrules.py:2692 +#: convertrules.py:2705 msgid "all settings related to dashed lines.\n" msgstr "todos los ajustes relacionados con líneas intermitentes.\n" -#: convertrules.py:2693 +#: convertrules.py:2706 msgid "Use \\override ... #'style = #'line for solid lines and\n" msgstr "Usar \\override ... #'style = #'line para las líneas continuas y\n" -#: convertrules.py:2694 +#: convertrules.py:2707 msgid "\t\\override ... #'style = #'dashed-line for dashed lines." msgstr "\t\\override ... #'style = #'dashed-line para líneas intermintentes." -#: convertrules.py:2730 +#: convertrules.py:2743 msgid "" "metronomeMarkFormatter uses text markup as second argument,\n" "fret diagram properties moved to fret-diagram-details." @@ -402,11 +470,11 @@ msgstr "" "metronomeMarkFormatter utiliza marcas de texto como segundo argumento,\n" "propiedades de diagramas de trastes trasladadas a fret-diagram-details." -#: convertrules.py:2735 +#: convertrules.py:2748 msgid "metronomeMarkFormatter got an additional text argument.\n" msgstr "metronomeMarkFormatter ha tomado un argumento adicional de texto.\n" -#: convertrules.py:2736 +#: convertrules.py:2749 #, python-format msgid "" "The function assigned to Score.metronomeMarkFunction now uses the signature\n" @@ -415,1256 +483,1702 @@ msgstr "" "La función asignada a Score.metronomeMarkFunction usa ahora la indicación\n" "%s" -#: convertrules.py:2799 +#: convertrules.py:2812 msgid "\\put-adjacent argument order.\n" msgstr "orden de argumentos de \\put-adjacent.\n" -#: convertrules.py:2800 +#: convertrules.py:2813 msgid "Axis and direction now come before markups:\n" msgstr "El eje y la dirección ahora van antes de los marcados:\n" -#: convertrules.py:2801 +#: convertrules.py:2814 msgid "\\put-adjacent axis dir markup markup." msgstr "\\put-adjacent eje dirección marcado marcado." -#: convertrules.py:2832 +#: convertrules.py:2845 msgid "re-definition of InnerStaffGroup.\n" msgstr "redefinición de InnerStaffGroup.\n" -#: convertrules.py:2838 +#: convertrules.py:2851 msgid "re-definition of InnerChoirStaff.\n" msgstr "redefinición de InnerChoirStaff.\n" -#: convertrules.py:2851 +#: convertrules.py:2861 +msgid "Syntax changes for \\addChordShape and \\chord-shape" +msgstr "Cambios sintácticos para \\addChordShape y \\chord-shape" + +#: convertrules.py:2866 msgid "stringTuning must be added to addChordShape call.\n" msgstr "stringTuning se debe añadir a la llamada a addChordShape.\n" -#: convertrules.py:2857 +#: convertrules.py:2872 msgid "stringTuning must be added to chord-shape call.\n" msgstr "stringTuning se debe añadir a la llamada a chord-shape.\n" -#: fontextract.py:25 -#, python-format -msgid "Scanning %s" -msgstr "Explorando %s" +#: convertrules.py:2879 +msgid "Remove oldaddlyrics" +msgstr "Eliminar oldaddlyrics" -#: fontextract.py:70 -#, python-format -msgid "Extracted %s" -msgstr "Se ha extraído %s" +#: convertrules.py:2883 +msgid "" +"oldaddlyrics is no longer supported. \n" +" Use addlyrics or lyrsicsto instead.\n" +msgstr "" +"oldaddlyrics ya no está contemplado. \n" +" Utilice en su lugar addlyrics o lyrsicsto.\n" -#: fontextract.py:85 +#: convertrules.py:2889 +msgid "" +"keySignature property not reversed any more\n" +"MIDI 47: orchestral strings -> orchestral harp" +msgstr "" +"la propiedad keySignature ya no se revierte\n" +"MIDI 47: orchestral strings -> orchestral harp" + +#: convertrules.py:2894 +msgid "The alist for Staff.keySignature is no longer in reversed order.\n" +msgstr "La lista-A de Staff.keySignature ya no está en orden inverso.\n" + +#: convertrules.py:2900 +msgid "" +"\\bar \".\" now produces a thick barline\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Dash parameters for slurs and ties are now in dash-definition" +msgstr "" +"\\bar \".\" ahora produce una línea divisoria gruesa\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Los parámetros de discontinuidad para las ligaduras\n" +"de expresión y de unión ahora están en dash-definition" + +#: convertrules.py:2906 +msgid "\\bar \".\" now produces a thick barline.\n" +msgstr "\\bar \".\" ahora produce una línea divisoria gruesa.\n" + +#: convertrules.py:2912 +msgid "Dash parameters for slurs and ties are now in 'dash-details.\n" +msgstr "" +"Los parámetros de discontinuidad para las ligaduras\n" +"de expresión y de unión ahora están en 'dash-details.\n" + +#: convertrules.py:2917 +msgid "" +"Autobeaming rules have changed. override-auto-beam-setting and\n" +"revert-auto-beam-setting have been eliminated.\n" +"\\overrideBeamSettings has been added.\n" +"beatGrouping has been eliminated.\n" +"Different settings for vertical layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explicit dynamics context definition from `Piano centered dynamics'\n" +"template replaced by new `Dynamics' context." +msgstr "" +"Las reglas de autobarrado han cambiado.. Ahora se han\n" +"eliminado override-auto-beam-setting y revert-auto-beam-setting.\n" +"Se ha añadido \\overrideBeamSettings.\n" +"Se ha eliminado beatGrouping.\n" +"Distintos ajustes para la disposición vertical.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Se ha sustituido la definición explícita del contexto de dinámica\n" +"`Piano centered dynamics'\n" +"por el nuevo contexto `Dynamics'." + +#: convertrules.py:2931 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now overriden with \\overrideBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" Los ajustes de barrado automático se sobreescriben ahora con \\overrideBeamSettings.\n" + +#: convertrules.py:2936 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now reverted with \\revertBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" Los ajustes de barrado automático se revierten ahora con \\revertBeamSettings.\n" + +#: convertrules.py:2941 +msgid "" +"beatGrouping. \n" +" beatGrouping with a specified context must now be accomplished with\n" +" \\overrideBeamSettings.\n" +msgstr "" +"beatGrouping. \n" +" beatGrouping con un contexto especificado se hace ahora con\n" +" \\overrideBeamSettings.\n" + +#: convertrules.py:2947 +msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n" +msgstr "" +"alignment-offsets ha cambiado a alignment-distances:\n" +" ahora se deben especificar las distancias entre pautas\n" +" en lugar del desplazamiento de cada pauta.\n" + +#: convertrules.py:2958 +msgid "" +"Remove obsolete engravers/translators: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"New vertical spacing variables." +msgstr "" +"ELiminar grabadores o traductores obsoletos: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"Nuevas variables de espaciado vertical." + +#: convertrules.py:2989 +msgid "minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n" +msgstr "minimum-Y-extent; el espaciado vertical ya no depende de la dimensión Y-extent de un VerticalAxisGroup.\n" + +#: convertrules.py:2995 +msgid "Unify fetaNumber and fetaDynamic encodings" +msgstr "Unificar las codificaciones fetaNumber y fetaDynamic" + +#: convertrules.py:3000 +msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" +msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" + +#: convertrules.py:3011 +msgid "\\cresc etc. are now postfix operators" +msgstr "\\cresc etc. ahora son operadores posfijos" + +#: convertrules.py:3017 +msgid "" +"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" +msgstr "" +"Eliminar beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings y \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" + +#: convertrules.py:3035 +msgid "\\overrideBeamSettings. Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n" +msgstr "\\overrideBeamSettings. Use \\set beamExceptions o \\overrideTimeSignatureSettings.\n" + +#: convertrules.py:3039 +msgid "\\revertBeamSettings. Use \\set beamExceptions or \\revertTimeSignatureSettings.\n" +msgstr "\\revertBeamSettings. Use \\set beamExceptions o \\revertTimeSignatureSettings.\n" + +#: convertrules.py:3043 +msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n" +msgstr "beamSettings. Use baseMoment, beatStructure y beamExceptions.\n" + +#: convertrules.py:3047 +msgid "beatLength. Use baseMoment and beatStructure.\n" +msgstr "beatLength. Use baseMoment y beatStructure.\n" + +#: convertrules.py:3051 +msgid "setbeatGrouping. Use baseMoment and beatStructure.\n" +msgstr "setbeatGrouping. Use baseMoment y beatStructure.\n" + +#: convertrules.py:3056 +msgid "" +"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n" +"Deprecate negative dash-period for hidden lines: use #'style = #'none instead." +msgstr "" +"Diagramas de digitación para instrumentos de viento:\n" +"Mover el tamaño, grosor y forma gráfica de la lista de argumentos a propiedades.\n" +"Se desprecia el período de discontinuidad negativo para líneas ocultas: use #'style = #'none en su lugar." + +#: convertrules.py:3061 +msgid "woodwind-diagrams. Move size, thickness, and graphic to properties. Argument should be just the key list.\n" +msgstr "" +"woodwind-diagrams. Mover el tamaño, grosor y forma gráfica de la lista de argumentos a propiedades.\n" +" El único argumento debe ser la lista de claves.\n" + +#: convertrules.py:3069 +msgid "" +"Rename vertical spacing variables.\n" +"Add fretboard-table argument to savePredefinedFretboard." +msgstr "" +"Renombrado de las variables de espaciado vertical.\n" +"Añadir argumento de tabla de diagramas de posiciones a savePredefinedFretboard." + +#: convertrules.py:3087 +msgid "Rename vertical spacing grob properties." +msgstr "Renombrado de las propiedades de grob del espaciado vertical." + +#: convertrules.py:3103 +msgid "Remove \\paper variables head-separation and foot-separation." +msgstr "Eliminación de las variables de \\paper head-separation y foot-separation." + +#: convertrules.py:3108 +msgid "Adjust settings for top-system-spacing instead.\n" +msgstr "Ajuste los valores para top-system-spacing en su lugar.\n" + +#: convertrules.py:3113 +msgid "Adjust settings for last-bottom-spacing instead.\n" +msgstr "Ajuste los valores para last-bottom-spacing en su lugar.\n" + +#: convertrules.py:3119 +msgid "" +"Rename space to basic-distance in various spacing alists.\n" +"Remove HarmonicParenthesesItem grob." +msgstr "" +"Renombrar space a basic-distance en varias listas-A de espaciado.\n" +"Eliminar el grob HarmonicParenthesesItem." + +#: convertrules.py:3127 +msgid "HarmonicParenthesesItem has been eliminated.\n" +msgstr "HarmonicParenthesesItem se ha eliminado.\n" + +#: convertrules.py:3128 +msgid "Harmonic parentheses are part of the TabNoteHead grob.\n" +msgstr "Los paréntesis en los armónicos forman parte del grob TabNoteHead.\n" + +#: convertrules.py:3133 +msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n" +msgstr "Eliminar el contexto de overrideTimeSignatureSettings y revertTimeSignatureSettings.\n" + +#: convertrules.py:3140 +msgid "" +"Change stringTunings from a list of semitones to a list of pitches.\n" +"Change tenor and baritone ukulele names in string tunings.\n" +"Generate messages for manual conversion of vertical spacing if required." +msgstr "" +"Cambiar stringTunings de una lista de semitonos a una lista de notas.\n" +"Cambiar los nombres tenor y baritone en las afinaciones de cuerdas del ukelele.\n" +"Generar mensajes para la conversión manual del espaciado vertical si es necesario." + +#: convertrules.py:3180 +msgid "Vertical spacing changes might affect user-defined contexts. " +msgstr "Los cambios en el espaciado vertical pueden afectar a los contextos definidos por el usuario." + +#: convertrules.py:3185 +msgid "Replace bar-size with bar-extent." +msgstr "Sustituir bar-size con bar-extent." + +#: convertrules.py:3197 +msgid "Woodwind diagrams: Changes to the clarinet diagram." +msgstr "Diagramas de viento madera: cambios en el diagrama de clarinete." + +#: convertrules.py:3201 +msgid "woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of instrument.\n" +msgstr "Diagramas de viento madera: se cambia la digitación del clarinete para que refleje la anatomía real del instrumento.\n" + +#: book_base.py:24 #, python-format -msgid "Writing fonts to %s" -msgstr "Escribiendo las tipografías en %s" +msgid "file not found: %s" +msgstr "archivo no encontrado: %s" + +#: book_base.py:161 +msgid "Output function not implemented" +msgstr "Función de salida sin implementar" + +#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115 +#: input.cc:123 +#, c-format, python-format +msgid "error: %s" +msgstr "error: %s" -#: lilylib.py:91 lilylib.py:142 +#: lilylib.py:124 lilylib.py:175 #, python-format msgid "Invoking `%s'" msgstr "Invocando «%s»" -#: lilylib.py:93 lilylib.py:144 +#: lilylib.py:126 lilylib.py:177 #, python-format msgid "Running %s..." msgstr "Ejecutando %s..." -#: lilylib.py:209 +#: lilylib.py:253 #, python-format msgid "Usage: %s" msgstr "uso: %s" -#: musicexp.py:215 musicexp.py:220 +#: musicexp.py:216 musicexp.py:221 msgid "Language does not support microtones contained in the piece" msgstr "El lenguaje no contempla los microtonos de la pieza" -#: musicexp.py:482 +#: musicexp.py:483 msgid "Tuplet brackets of curved shape are not correctly implemented" msgstr "Los corchetes curvos de grupo especial no están implementados correctamente" -#. TODO: Implement this using actual_type and normal_type! -#: musicexp.py:511 -msgid "Tuplet brackets displaying both note durations are not implemented, using default" -msgstr "Los corchetes de grupo especial que muestran las dos duraciones de nota no están implementados, se usa el predeterminado" - -#: musicexp.py:656 +#: musicexp.py:669 #, python-format msgid "unable to set the music %(music)s for the repeat %(repeat)s" msgstr "no se ha podido establecer el fragmento de música %(music)s para la repetición %(repeat)s" -#: musicexp.py:665 +#: musicexp.py:678 msgid "encountered repeat without body" msgstr "se ha encontrado una repetición sin cuerpo" #. no self.elements! -#: musicexp.py:835 +#: musicexp.py:848 #, python-format msgid "Grace note with no following music: %s" msgstr "Nota de adorno sin música que le siga: %s" -#: musicexp.py:997 +#: musicexp.py:1010 #, python-format msgid "Invalid octave shift size found: %s. Using no shift." msgstr "Se ha encontrado un tamaño de desplazamiento de octava no válido: %s. No se usará ningún desplazamiento." -#: musicexp.py:1455 +#: musicexp.py:1468 #, python-format msgid "Unable to convert alteration %s to a lilypond expression" msgstr "No se pudo convertir la alteración %s a una expresión de lilypond" -#: musicxml.py:13 convert-ly.py:53 lilypond-book.py:97 warn.cc:54 input.cc:96 -#: input.cc:104 -#, c-format, python-format -msgid "error: %s" -msgstr "error: %s" - #. TODO: Handle pieces without a time signature! -#: musicxml.py:357 +#: musicxml.py:358 msgid "Senza-misura time signatures are not yet supported!" msgstr "¡Los compases senza-misura no están contemplados aún!" -#: musicxml.py:375 +#: musicxml.py:376 msgid "Unable to interpret time signature! Falling back to 4/4." msgstr "¡Ha sido imposible interpretar la indicación de compás! Se va a usar 4/4 como opción de retroceso." -#: musicxml.py:431 +#: musicxml.py:432 #, python-format msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!" msgstr "¡Se ha proporcionado una octava de alteración de tonalidad para un número de alteraciones inexistente %s, números disponibles: %s!" -#: musicxml.py:519 +#: musicxml.py:520 #, python-format msgid "Unable to find instrument for ID=%s\n" msgstr "No se ha podido encontrar el instrumento con el ID=%s\n" -#: abc2ly.py:1341 convert-ly.py:74 lilypond-book.py:121 midi2ly.py:845 -#, python-format -msgid "%s [OPTION]... FILE" -msgstr "%s [OPCIÓN]... ARCHIVO" +#: book_latex.py:156 +msgid "cannot find \\begin{document} in LaTeX document" +msgstr "no se encuentra \\begin{document} en el documento de LaTeX" -#: abc2ly.py:1342 +#: musicxml2ly.py:223 #, python-format -msgid "" -"abc2ly converts ABC music files (see\n" -"%s) to LilyPond input.\n" -msgstr "" -"abc2ly convierte archivos de música de ABC\n" -"(véase %s) en código de entrada de LilyPond.\n" - -#: abc2ly.py:1350 convert-ly.py:81 etf2ly.py:1190 lilypond-book.py:207 -#: midi2ly.py:881 musicxml2ly.py:2590 main.cc:156 -msgid "show version number and exit" -msgstr "mostrar el número de versión y salir" +msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" +msgstr "Se encontró un archivo creado por %s, que contiene información de barrado errónea. Toda la información de barrado del archivo MusicXML se ignorará" -#: abc2ly.py:1354 convert-ly.py:85 etf2ly.py:1186 lilypond-book.py:138 -#: midi2ly.py:860 musicxml2ly.py:2572 main.cc:145 -msgid "show this help and exit" -msgstr "mostrar esta ayuda y salir" +#: musicxml2ly.py:239 musicxml2ly.py:241 +#, python-format +msgid "Unprocessed PartGroupInfo %s encountered" +msgstr "Se ha encontrado el PartGroupInfo sin procesar %s" -#: abc2ly.py:1356 etf2ly.py:1191 midi2ly.py:864 -msgid "write output to FILE" -msgstr "escribir la salida en el ARCHIVO" +#: musicxml2ly.py:494 +#, python-format +msgid "Encountered note at %s without type and duration (=%s)" +msgstr "Se ha encontrado una nota en %s sin typo y duración (=%s)" -#: abc2ly.py:1358 -msgid "be strict about success" -msgstr "ser estricto respecto al éxito" +#: musicxml2ly.py:514 +#, python-format +msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" +msgstr "Se ha encontrado una duración racional con denominador %s, no se puede convertir a duracion de lilypond" -#: abc2ly.py:1360 -msgid "preserve ABC's notion of beams" -msgstr "preservar la noción de las barras de ABC" +#: musicxml2ly.py:761 +msgid "Unable to extract key signature!" +msgstr "¡No se ha podido extraer la armadura de la tonalidad!" -#. Translators, please translate this string as -#. "Report bugs in English via %s", -#. or if there is a LilyPond users list or forum in your language -#. "Report bugs in English via %s or in YOUR_LANG via URI" -#: abc2ly.py:1363 convert-ly.py:123 etf2ly.py:1200 lilypond-book.py:214 -#: midi2ly.py:894 musicxml2ly.py:2646 main.cc:265 -#, c-format, python-format -msgid "Report bugs via %s" -msgstr "Informe de los fallos a %s" +#: musicxml2ly.py:788 +#, python-format +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" +msgstr "¡Modo %s desconocido, se esperaba «major», «minor» o un modo eclesiástico!" -#: convert-ly.py:33 -msgid "" -"Update LilyPond input to newer version. By default, update from the\n" -"version taken from the \\version command, to the current LilyPond version." -msgstr "" -"Actualizar el código de entrada de LilyPond a una versión más reciente.\n" -"De manera predeterminada, actualizarlo desde la versión sacada de\n" -"la instrucción \\version, a la versión actual de LilyPond." +#: musicxml2ly.py:926 +#, python-format +msgid "Encountered unprocessed marker %s\n" +msgstr "Se ha encontrado el marcador sin procesar %s\n" -#: convert-ly.py:35 lilypond-book.py:71 -msgid "Examples:" -msgstr "Ejemplos:" +#: musicxml2ly.py:1020 +#, python-format +msgid "unknown span event %s" +msgstr "evento de extensión %s desconocido" -#: convert-ly.py:69 etf2ly.py:1173 lilypond-book.py:117 midi2ly.py:76 -msgid "Distributed under terms of the GNU General Public License." -msgstr "Distribuido bajo los términos de la Licencia Pública General de GNU." +#: musicxml2ly.py:1030 +#, python-format +msgid "unknown span type %s for %s" +msgstr "tipo de extensión %s deconocido para %s" -#: convert-ly.py:70 etf2ly.py:1174 lilypond-book.py:118 midi2ly.py:77 -msgid "It comes with NO WARRANTY." -msgstr "Se distribuye SIN NINGUNA GARANTÍA." +#: musicxml2ly.py:1450 +msgid "Unknown metronome mark, ignoring" +msgstr "Marca de metrónomo desconocida, se ignora" -#: convert-ly.py:89 convert-ly.py:116 -msgid "VERSION" -msgstr "VERSIÓN" +#. TODO: Implement the other (more complex) way for tempo marks! +#: musicxml2ly.py:1455 +msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." +msgstr "Las marcas metronómicas con relaciones complejas ( en MusicXML) no se encuentran implementadas aún." -#: convert-ly.py:91 -msgid "start from VERSION [default: \\version found in file]" -msgstr "comenzar a partir de VERSIÓN [predeterminado: \\version del archivo]" +#: musicxml2ly.py:1657 +#, python-format +msgid "Unable to convert chord type %s to lilypond." +msgstr "No se pudo convertir el acorde de tipo %s a lilypond." -#: convert-ly.py:94 -msgid "edit in place" -msgstr "editar in situ" +#: musicxml2ly.py:1806 +#, python-format +msgid "drum %s type unknown, please add to instrument_drumtype_dict" +msgstr "tipo de percusión %s desconocido, añádalo al diccionario instrument_drumtype_dict" -#: convert-ly.py:98 -msgid "do not add \\version command if missing" -msgstr "no añadir la instrucción \\version si no está presente" +#: musicxml2ly.py:1810 +msgid "cannot find suitable event" +msgstr "no se encuentra un evento adecuado" -#: convert-ly.py:104 +#: musicxml2ly.py:1958 #, python-format -msgid "force updating \\version number to %s" -msgstr "forzar la actualización del número de \\version a %s" +msgid "Negative skip %s (from position %s to %s)" +msgstr "Desplazamiento negativo %s (desde la posición %s hasta la %s)" -#: convert-ly.py:110 +#: musicxml2ly.py:2099 #, python-format -msgid "show rules [default: -f 0, -t %s]" -msgstr "mostrar las reglas [predeterminado: -f 0, -t %s]" +msgid "Negative skip found: from %s to %s, difference is %s" +msgstr "Se ha encontrado un desplazamiento negativo: desde %s hasta %s, la diferencia es %s" -#: convert-ly.py:115 +#: musicxml2ly.py:2180 #, python-format -msgid "convert to VERSION [default: %s]" -msgstr "convertir a VERSIÓN [predeterminado: %s]" +msgid "unexpected %s; expected %s or %s or %s" +msgstr "%s inesperado; se esperaba %s o %s o %s" -#: convert-ly.py:163 -msgid "Applying conversion: " -msgstr "Aplicando la conversión: " +#: musicxml2ly.py:2286 +msgid "Encountered closing slur, but no slur is open" +msgstr "Se ha encontrado el cierre de una ligadura de expresión, pero no hay ninguna abierta" -#: convert-ly.py:176 -msgid "Error while converting" -msgstr "Error al convertir" +#: musicxml2ly.py:2289 +msgid "Cannot have two simultaneous (closing) slurs" +msgstr "No puede haber dos ligaduras de expresión (cerrándose) simultáneas" -#: convert-ly.py:178 -msgid "Stopping at last successful rule" -msgstr "Detención en la última regla satisfactoria" +#: musicxml2ly.py:2298 +msgid "Cannot have a slur inside another slur" +msgstr "No puede haber una ligadura de expresión dentro de otra" -#: convert-ly.py:199 -#, python-format -msgid "Processing `%s'... " -msgstr "Procesando «%s»... " +#: musicxml2ly.py:2301 +msgid "Cannot have two simultaneous slurs" +msgstr "No puede haber dos ligaduras de expresión simultáneas" -#: convert-ly.py:289 relocate.cc:362 source-file.cc:59 -#, c-format, python-format -msgid "cannot open file: `%s'" -msgstr "no se puede abrir el archivo: «%s»" - -#: convert-ly.py:296 +#: musicxml2ly.py:2435 #, python-format -msgid "cannot determine version for `%s'. Skipping" -msgstr "no se puede determinar la versión de «%s»; se salta" +msgid "cannot simultaneously have more than one mode: %s" +msgstr "no puede haber más de un modo al mismo tiempo: %s" -#: etf2ly.py:1179 -#, python-format -msgid "%s [OPTION]... ETF-FILE" -msgstr "%s [OPCIÓN]... ARCHIVO_ETF" +#: musicxml2ly.py:2543 +msgid "Converting to LilyPond expressions..." +msgstr "Conversión a expresiones de LilyPond..." + +#: musicxml2ly.py:2554 +msgid "musicxml2ly [OPTION]... FILE.xml" +msgstr "musicxml2ly [OPCIÓN]... ARCHIVO.xml" -#: etf2ly.py:1180 +#: musicxml2ly.py:2556 msgid "" -"Enigma Transport Format is a format used by Coda Music Technology's\n" -"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" +"Convert MusicXML from FILE.xml to LilyPond input.\n" +"If the given filename is -, musicxml2ly reads from the command line.\n" msgstr "" -"El formato transportable de Enigma (ETF) es un formato utilizado por el producto\n" -"Finale de Coda Music Technology. etf2ly convierte un subconjunto de ETF a un\n" -"archivo de LilyPond listo para usar.\n" - -#: etf2ly.py:1192 midi2ly.py:865 musicxml2ly.py:2638 main.cc:149 main.cc:154 -msgid "FILE" -msgstr "ARCHIVO" - -#: etf2ly.py:1194 lilypond-book.py:210 midi2ly.py:882 main.cc:158 -msgid "show warranty and copyright" -msgstr "mostrar los avisos de garantía y de copyright" - -#: lilypond-book.py:69 -msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." -msgstr "Procesar los fragmentos de LylyPond en un documento de HTML híbrido, LaTeX, texinfo o DocBook." - -#: lilypond-book.py:76 -msgid "BOOK" -msgstr "LIBRO" - -#: lilypond-book.py:84 -#, python-format -msgid "Exiting (%d)..." -msgstr "Saliendo (%d)..." - -#: lilypond-book.py:115 -#, python-format -msgid "Copyright (c) %s by" -msgstr "Copyright (c) %s por" - -#: lilypond-book.py:125 -msgid "FILTER" -msgstr "FILTRO" - -#: lilypond-book.py:128 -msgid "pipe snippets through FILTER [default: `convert-ly -n -']" -msgstr "redirigir fragmentos a través de FILTRO [predeterminado: `convert-ly -n -']" - -#: lilypond-book.py:132 -msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" -msgstr "usar el formato de salida FORMATO (texi [predeterminado], texi-html, latex, html, docbook)" - -#: lilypond-book.py:133 -msgid "FORMAT" -msgstr "FORMATO" - -#: lilypond-book.py:140 -msgid "add DIR to include path" -msgstr "añadir DIRECTORIO a la ruta de inclusión" - -#: lilypond-book.py:141 lilypond-book.py:148 lilypond-book.py:166 -#: lilypond-book.py:172 lilypond-book.py:178 lilypond-book.py:184 main.cc:148 -msgid "DIR" -msgstr "DIRECTORIO" - -#: lilypond-book.py:146 -msgid "format Texinfo output so that Info will look for images of music in DIR" -msgstr "formatear la salida de Texinfo de manera que Info busque las imágenes de música en DIRECTORIO" - -#: lilypond-book.py:153 -msgid "run executable PROG instead of latex" -msgstr "ejecutar el programa PROGRAMA en lugar de latex" - -#: lilypond-book.py:154 -msgid "PROG" -msgstr "PROGRAMA" - -#: lilypond-book.py:159 -msgid "PAD" -msgstr "RELLENAR" - -#: lilypond-book.py:161 -msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" -msgstr "rellenar el lado izquierdo de la música para alinear la música aunque haya un número desigual de compases (en mm)" - -#: lilypond-book.py:165 -msgid "write output to DIR" -msgstr "escribir la salida en el DIRECTORIO" - -#: lilypond-book.py:171 -msgid "do not fail if no lilypond output is found" -msgstr "no fracasar si no se encuentra ninguna salida de lilypond" - -#: lilypond-book.py:177 -msgid "do not fail if no PNG images are found for EPS files" -msgstr "no fracasar si no se encuentra ninguna imagen PNG para los archivos EPS" - -#: lilypond-book.py:183 -msgid "write lily-XXX files to DIR, link into --output dir" -msgstr "escribir archivos lily-XXX en DIR, enlazar al directorio de --output" +"Convertir MusicXML desde ARCHIVO.xml a entrada de LilyPond.\n" +"SI el nombre de archivo aportado es -, musicxml2ly lee de la línea de órdenes.\n" -#: lilypond-book.py:188 -msgid "COMMAND" -msgstr "INSTRUCCIÓN" +#: musicxml2ly.py:2562 midi2ly.py:987 abc2ly.py:1386 lilypond-book.py:140 +#: convert-ly.py:98 etf2ly.py:1202 main.cc:157 +msgid "show this help and exit" +msgstr "mostrar esta ayuda y salir" -#: lilypond-book.py:189 -msgid "process ly_files using COMMAND FILE..." -msgstr "procesar ly_files utilizando INSTRUCCIÓN ARCHIVO..." +#: musicxml2ly.py:2566 +msgid "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" +msgstr "" +"Copyright (c) 2005--2011 por\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen y\n" +" Reinhold Kainhofer \n" -#: lilypond-book.py:196 -msgid "create PDF files for use with PDFTeX" -msgstr "crear archivos PDF para su utilización con PDFTeX" +#: musicxml2ly.py:2580 midi2ly.py:1015 abc2ly.py:1382 lilypond-book.py:212 +#: convert-ly.py:94 etf2ly.py:1206 main.cc:168 +msgid "show version number and exit" +msgstr "mostrar el número de versión y salir" -#: lilypond-book.py:199 midi2ly.py:875 musicxml2ly.py:2595 main.cc:157 +#: musicxml2ly.py:2585 midi2ly.py:1009 lilypond-book.py:204 main.cc:169 msgid "be verbose" msgstr "ser prolijo" -#: lilypond-book.py:871 -#, python-format -msgid "file not found: %s" -msgstr "archivo no encontrado: %s" +#: musicxml2ly.py:2591 +msgid "use lxml.etree; uses less memory and cpu time" +msgstr "usar lxml.etree; utiliza menos memoria y tiempo de procesador" -#: lilypond-book.py:1142 -#, python-format -msgid "deprecated ly-option used: %s=%s" -msgstr "se ha usado una ly-option obsoleta: %s=%s" +#: musicxml2ly.py:2597 +msgid "input file is a zip-compressed MusicXML file" +msgstr "el archivo de entrada es un archivo MusicXML comprimido en zip" -#: lilypond-book.py:1144 -#, python-format -msgid "compatibility mode translation: %s=%s" -msgstr "traducción en modo de compatibilidad: %s=%s" +#: musicxml2ly.py:2603 +msgid "convert pitches in relative mode (default)" +msgstr "convertir las notas al modo relativo (por omisión)" -#: lilypond-book.py:1147 -#, python-format -msgid "deprecated ly-option used: %s" -msgstr "se usó una ly-option obsoleta: %s" +#: musicxml2ly.py:2608 +msgid "convert pitches in absolute mode" +msgstr "convertir las notas al modo absoluto" -#: lilypond-book.py:1149 -#, python-format -msgid "compatibility mode translation: %s" -msgstr "traducción en modo compatible: %s" +#: musicxml2ly.py:2611 +msgid "LANG" +msgstr "IDIOMA" -#: lilypond-book.py:1167 -#, python-format -msgid "ignoring unknown ly option: %s" -msgstr "opción ly desconocida e ignorada: %s" +#: musicxml2ly.py:2613 +msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German" +msgstr "usar IDIOMA para los nombres de las notas, p.ej. 'espanol' para los nombres de las notas en español" -#: lilypond-book.py:1604 -#, python-format -msgid "Opening filter `%s'" -msgstr "Filtro de apertura «%s»" +#: musicxml2ly.py:2619 +msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +msgstr "no convertir las direcciones (^, _ o -) para las articulaciones, expresiones de dinámica, etc." -#: lilypond-book.py:1621 -#, python-format -msgid "`%s' failed (%d)" -msgstr "«%s» ha fallado (%d)" +#: musicxml2ly.py:2625 +msgid "do not convert exact vertical positions of rests" +msgstr "no convertir las posiciones verticales exactas de los silencios" -#: lilypond-book.py:1622 -msgid "The error log is as follows:" -msgstr "El registro de errores es como sigue:" +#: musicxml2ly.py:2631 +msgid "do not convert the exact page layout and breaks" +msgstr "no convertir la disposición y saltos de página exactos" -#: lilypond-book.py:1684 -msgid "cannot find \\begin{document} in LaTeX document" -msgstr "no se encuentra \\begin{document} en el documento de LaTeX" +#: musicxml2ly.py:2637 +msgid "do not convert beaming information, use lilypond's automatic beaming instead" +msgstr "no convertir la información de barrado, en vez de ello utilizar el barrado automático de lilypond" -#: lilypond-book.py:1784 -msgid "Writing snippets..." -msgstr "Escribiendo fragmentos..." +#: musicxml2ly.py:2640 midi2ly.py:992 midi2ly.py:997 etf2ly.py:1208 +#: main.cc:161 main.cc:166 +msgid "FILE" +msgstr "ARCHIVO" -#: lilypond-book.py:1790 -msgid "Processing..." -msgstr "Procesando..." +#: musicxml2ly.py:2645 +msgid "set output filename to FILE, stdout if -" +msgstr "establecer el nombre del archivo de salida a ARCHIVO, y a la salida estándar si es -" -#: lilypond-book.py:1796 -msgid "All snippets are up to date..." -msgstr "Todos los fragmentos están actualizados..." +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: musicxml2ly.py:2648 midi2ly.py:1028 abc2ly.py:1395 lilypond-book.py:234 +#: convert-ly.py:144 etf2ly.py:1216 main.cc:281 +#, c-format, python-format +msgid "Report bugs via %s" +msgstr "" +"Informe de los fallos en español a http://lists.gnu.org/mailman/listinfo/lilypond-es\n" +"o en inglés a %s" -#: lilypond-book.py:1830 +#: musicxml2ly.py:2728 #, python-format -msgid "cannot determine format for: %s" -msgstr "no se puede determinar el formato de: %s" +msgid "unknown part in part-list: %s" +msgstr "parte desconocida en la lista part-list: %s" -#: lilypond-book.py:1841 -#, python-format -msgid "%s is up to date." -msgstr "%s está actualizado." +#: musicxml2ly.py:2790 +msgid "Input is compressed, extracting raw MusicXML data from stdin" +msgstr "El archivo de entrada está comprimido, extrayendo los datos de MusicXML en bruto a partir de la entrada estándar" -#: lilypond-book.py:1855 +#: musicxml2ly.py:2793 #, python-format -msgid "Writing `%s'..." -msgstr "Escribiendo «%s»..." +msgid "Input file %s is compressed, extracting raw MusicXML data" +msgstr "El archivo de entrada %s está comprimido, extrayendo los datos de MusicXML en bruto" -#: lilypond-book.py:1913 -msgid "Output would overwrite input file; use --output." -msgstr "La salida sobreescribiría el archivo de entrada; utilice --output." +#: musicxml2ly.py:2823 +msgid "Reading MusicXML from Standard input ..." +msgstr "Leyendo MusicXML desde la entrada estándar..." -#: lilypond-book.py:1917 +#: musicxml2ly.py:2825 #, python-format -msgid "Reading %s..." -msgstr "Leyendo %s..." - -#: lilypond-book.py:1937 -msgid "Dissecting..." -msgstr "Diseccionando..." +msgid "Reading MusicXML from %s ..." +msgstr "Leyendo MusicXML desde %s ..." -#: lilypond-book.py:1953 +#: musicxml2ly.py:2858 #, python-format -msgid "Compiling %s..." -msgstr "Compilando %s..." +msgid "Output to `%s'" +msgstr "La salida se dirige hacia `%s'" -#: lilypond-book.py:1962 +#: musicxml2ly.py:2925 #, python-format -msgid "Processing include: %s" -msgstr "Procesando el archivo de inclusión: %s" +msgid "Unable to find input file %s" +msgstr "No se encuentra el archivo de entrada %s" -#: lilypond-book.py:1974 +#: midi2ly.py:90 lilypond-book.py:116 convert-ly.py:81 etf2ly.py:1189 #, python-format -msgid "Removing `%s'" -msgstr "Suprimiendo «%s»" +msgid "Copyright (c) %s by" +msgstr "Copyright (c) %s por" + +#: midi2ly.py:92 lilypond-book.py:118 convert-ly.py:83 etf2ly.py:1191 +msgid "Distributed under terms of the GNU General Public License." +msgstr "Distribuido bajo los términos de la Licencia Pública General de GNU." -#: midi2ly.py:84 lily-library.scm:634 lily-library.scm:643 +#: midi2ly.py:93 lilypond-book.py:119 convert-ly.py:84 etf2ly.py:1192 +msgid "It comes with NO WARRANTY." +msgstr "Se distribuye SIN NINGUNA GARANTÍA." + +#: midi2ly.py:99 msgid "warning: " msgstr "advertencia: " -#: midi2ly.py:87 midi2ly.py:907 +#: midi2ly.py:102 midi2ly.py:1041 msgid "error: " msgstr "error: " -#: midi2ly.py:88 +#: midi2ly.py:103 msgid "Exiting... " msgstr "Saliendo... " -#: midi2ly.py:833 +#: midi2ly.py:960 #, python-format msgid "%s output to `%s'..." msgstr "salida de %s hacia «%s»..." -#: midi2ly.py:846 +#: midi2ly.py:972 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87 +#, python-format +msgid "%s [OPTION]... FILE" +msgstr "%s [OPCIÓN]... ARCHIVO" + +#: midi2ly.py:973 #, python-format msgid "Convert %s to LilyPond input.\n" msgstr "Convertir %s a entrada de LilyPond.\n" -#: midi2ly.py:851 +#: midi2ly.py:978 msgid "print absolute pitches" msgstr "mostrar las alturas absolutas" -#: midi2ly.py:853 midi2ly.py:868 +#: midi2ly.py:980 midi2ly.py:1002 msgid "DUR" msgstr "DURACIÓN" -#: midi2ly.py:854 +#: midi2ly.py:981 msgid "quantise note durations on DUR" msgstr "cuantizar las duraciones de las notas sobre DURACIÓN" -#: midi2ly.py:857 +#: midi2ly.py:984 msgid "print explicit durations" msgstr "mostrar las duraciones explícitas" -#: midi2ly.py:861 +#: midi2ly.py:989 +msgid "prepend FILE to output" +msgstr "anteponer AARCHIVO a la salida" + +#: midi2ly.py:993 msgid "set key: ALT=+sharps|-flats; MINOR=1" msgstr "establecer la tonalidad: ALT=+sostenidos|-bemoles; MENOR=1" -#: midi2ly.py:862 +#: midi2ly.py:994 msgid "ALT[:MINOR]" msgstr "ALT[:MENOR]" -#: midi2ly.py:867 +#: midi2ly.py:996 abc2ly.py:1388 etf2ly.py:1207 +msgid "write output to FILE" +msgstr "escribir la salida en el ARCHIVO" + +#: midi2ly.py:999 +msgid "preview of first 4 bars" +msgstr "vista previa de los cuatro primeros compases" + +#: midi2ly.py:1001 msgid "quantise note starts on DUR" -msgstr "cuantizar los comienzos de las notras sobre DUR" +msgstr "cuantizar los comienzos de las notras sobre DURACIÓN" -#: midi2ly.py:870 +#: midi2ly.py:1004 msgid "DUR*NUM/DEN" msgstr "DURACIÓN*NUMERADOR/DENOMINADOR" -#: midi2ly.py:873 +#: midi2ly.py:1007 msgid "allow tuplet durations DUR*NUM/DEN" msgstr "permitir duraciones de grupos irregulares DURACIÓN*NUMERADOR/DENOMINADOR" -#: midi2ly.py:885 +#: midi2ly.py:1016 lilypond-book.py:215 convert-ly.py:139 etf2ly.py:1210 +#: main.cc:170 +msgid "show warranty and copyright" +msgstr "mostrar los avisos de garantía y de copyright" + +#: midi2ly.py:1019 msgid "treat every text as a lyric" msgstr "tratar todos los textos como letra" -#: midi2ly.py:888 +#: midi2ly.py:1022 msgid "Examples" msgstr "Ejemplos" -#: midi2ly.py:908 +#: midi2ly.py:1042 msgid "no files specified on command line." msgstr "no se ha especificado ningún archivo en la línea de órdenes." -#: musicxml2ly.py:343 -msgid "Encountered file created by Dolet 3.4 for Sibelius, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" -msgstr "Se encontró un archivo creado mediante Dolet 3.4 para Sibelius que contiene información de barrados errónea. Toda la información de barrado en el archivo MusicXML se ignorará" +#: abc2ly.py:1374 +#, python-format +msgid "" +"abc2ly converts ABC music files (see\n" +"%s) to LilyPond input.\n" +msgstr "" +"abc2ly convierte archivos de música de ABC\n" +"(véase %s) en código de entrada de LilyPond.\n" -#: musicxml2ly.py:346 -msgid "Encountered file created by Noteworthy Composer's nwc2xml, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" -msgstr "Se encontró un archivo creado mediante Noteworthy Composer's nwc2xml que contiene información de barrados errónea. Toda la información de barrado en el archivo MusicXML se ignorará" +#: abc2ly.py:1390 +msgid "be strict about success" +msgstr "ser estricto respecto al éxito" -#: musicxml2ly.py:362 musicxml2ly.py:364 -#, python-format -msgid "Unprocessed PartGroupInfo %s encountered" -msgstr "Se ha encontrado el PartGroupInfo sin procesar %s" +#: abc2ly.py:1392 +msgid "preserve ABC's notion of beams" +msgstr "preservar la noción de las barras de ABC" -#: musicxml2ly.py:594 -#, python-format -msgid "Encountered note at %s without type and duration (=%s)" -msgstr "Se ha encontrado una nota en %s sin typo y duración (=%s)" +#: lilypond-book.py:80 +msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." +msgstr "Procesar los fragmentos de LylyPond en un documento de HTML híbrido, LaTeX, texinfo o DocBook." -#: musicxml2ly.py:613 -#, python-format -msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" -msgstr "Se ha encontrado una duración racional con denominador %s, no se puede convertir a duracion de lilypond" +#: lilypond-book.py:82 convert-ly.py:46 +msgid "Examples:" +msgstr "Ejemplos:" -#: musicxml2ly.py:868 -msgid "Unable to extract key signature!" -msgstr "¡No se ha podido extraer la armadura de la tonalidad!" +#: lilypond-book.py:87 +msgid "BOOK" +msgstr "LIBRO" -#: musicxml2ly.py:895 +#: lilypond-book.py:95 #, python-format -msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" -msgstr "¡Modo %s desconocido, se esperaba «major», «minor» o un modo eclesiástico!" +msgid "Exiting (%d)..." +msgstr "Saliendo (%d)..." -#: musicxml2ly.py:968 -#, python-format -msgid "Encountered unprocessed marker %s\n" -msgstr "Se ha encontrado el marcador sin procesar %s\n" +#: lilypond-book.py:127 +msgid "FILTER" +msgstr "FILTRO" -#: musicxml2ly.py:1062 -#, python-format -msgid "unknown span event %s" -msgstr "evento de extensión %s desconocido" +#: lilypond-book.py:130 +msgid "pipe snippets through FILTER [default: `convert-ly -n -']" +msgstr "redirigir fragmentos a través de FILTRO [predeterminado: `convert-ly -n -']" -#: musicxml2ly.py:1072 -#, python-format -msgid "unknown span type %s for %s" -msgstr "tipo de extensión %s deconocido para %s" +#: lilypond-book.py:134 +msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" +msgstr "usar el formato de salida FORMATO (texi [predeterminado], texi-html, latex, html, docbook)" -#: musicxml2ly.py:1498 -msgid "Unknown metronome mark, ignoring" -msgstr "Marca de metrónomo desconocida, se ignora" +#: lilypond-book.py:135 +msgid "FORMAT" +msgstr "FORMATO" -#. TODO: Implement the other (more complex) way for tempo marks! -#: musicxml2ly.py:1503 -msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." -msgstr "Las marcas metronómicas con relaciones complejas ( en MusicXML) no se encuentran implementadas aún." +#: lilypond-book.py:142 +msgid "add DIR to include path" +msgstr "añadir DIRECTORIO a la ruta de inclusión" -#: musicxml2ly.py:1703 -#, python-format -msgid "Unable to convert chord type %s to lilypond." -msgstr "No se pudo convertir el acorde de tipo %s a lilypond." +#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163 +#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160 +msgid "DIR" +msgstr "DIRECTORIO" -#: musicxml2ly.py:1849 -#, python-format -msgid "drum %s type unknown, please add to instrument_drumtype_dict" -msgstr "tipo de percusión %s desconocido, añádalo al diccionario instrument_drumtype_dict" +#: lilypond-book.py:148 +msgid "format Texinfo output so that Info will look for images of music in DIR" +msgstr "formatear la salida de Texinfo de manera que Info busque las imágenes de música en DIRECTORIO" -#: musicxml2ly.py:1853 -msgid "cannot find suitable event" -msgstr "no se encuentra un evento adecuado" +#: lilypond-book.py:155 +msgid "PAD" +msgstr "RELLENAR" -#: musicxml2ly.py:1994 -#, python-format -msgid "Negative skip %s (from position %s to %s)" -msgstr "Desplazamiento negativo %s (desde la posición %s hasta la %s)" +#: lilypond-book.py:157 +msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" +msgstr "rellenar el lado izquierdo de la música para alinear la música aunque haya un número desigual de compases (en mm)" -#: musicxml2ly.py:2134 -#, python-format -msgid "Negative skip found: from %s to %s, difference is %s" -msgstr "Se ha encontrado un desplazamiento negativo: desde %s hasta %s, la diferencia es %s" +#: lilypond-book.py:162 +msgid "write lily-XXX files to DIR, link into --output dir" +msgstr "escribir archivos lily-XXX en DIR, enlazar al directorio de --output" -#: musicxml2ly.py:2205 -#, python-format -msgid "unexpected %s; expected %s or %s or %s" -msgstr "%s inesperado; se esperaba %s o %s o %s" +#: lilypond-book.py:167 +msgid "Load the additional python PACKAGE (containing e.g. a custom output format)" +msgstr "Cargar el PAQUETE adicional de python (que contiene p.ej. un formato de salida personalizado)" -#: musicxml2ly.py:2311 -msgid "Encountered closing slur, but no slur is open" -msgstr "Se ha encontrado el cierre de una ligadura de expresión, pero no hay ninguna abierta" +#: lilypond-book.py:168 +msgid "PACKAGE" +msgstr "PAQUETE" -#: musicxml2ly.py:2314 -msgid "Cannot have two simultaneous (closing) slurs" -msgstr "No puede haber dos ligaduras de expresión (cerrándose) simultáneas" +#: lilypond-book.py:172 +msgid "write output to DIR" +msgstr "escribir la salida en el DIRECTORIO" -#: musicxml2ly.py:2324 -msgid "Cannot have a slur inside another slur" -msgstr "No puede haber una ligadura de expresión dentro de otra" +#: lilypond-book.py:177 +msgid "COMMAND" +msgstr "INSTRUCCIÓN" -#: musicxml2ly.py:2327 -msgid "Cannot have two simultaneous slurs" -msgstr "No puede haber dos ligaduras de expresión simultáneas" +#: lilypond-book.py:178 +msgid "process ly_files using COMMAND FILE..." +msgstr "procesar ly_files utilizando INSTRUCCIÓN ARCHIVO..." -#: musicxml2ly.py:2455 -#, python-format -msgid "cannot simultaneously have more than one mode: %s" -msgstr "no puede haber más de un modo al mismo tiempo: %s" +#: lilypond-book.py:182 +msgid "Compile snippets in safe mode" +msgstr "Compilar los fragmentos de código en modo seguro" -#: musicxml2ly.py:2553 -msgid "Converting to LilyPond expressions..." -msgstr "Conversión a expresiones de LilyPond..." +#: lilypond-book.py:188 +msgid "do not fail if no lilypond output is found" +msgstr "no fracasar si no se encuentra ninguna salida de lilypond" -#: musicxml2ly.py:2564 -msgid "musicxml2ly [OPTION]... FILE.xml" -msgstr "musicxml2ly [OPCIÓN]... ARCHIVO.xml" +#: lilypond-book.py:194 +msgid "do not fail if no PNG images are found for EPS files" +msgstr "no fracasar si no se encuentra ninguna imagen PNG para los archivos EPS" -#: musicxml2ly.py:2566 +#: lilypond-book.py:200 +msgid "write snippet output files with the same base name as their source file" +msgstr "escribir los archivos de salida de los fragmentos de código con el mismo nombra de base que su archivo fuente" + +#: lilypond-book.py:220 msgid "" -"Convert MusicXML from FILE.xml to LilyPond input.\n" -"If the given filename is -, musicxml2ly reads from the command line.\n" +"run executable PROG instead of latex, or in\n" +"case --pdf option is set instead of pdflatex" msgstr "" -"Convertir MusicXML desde ARCHIVO.xml a entrada de LilyPond.\n" -"SI el nombre de archivo aportado es -, musicxml2ly lee de la línea de órdenes.\n" +"ejecutar PROG en lugar de latex, o en caso de que\n" +"esté seleccionada la opción --pdf, en lugar de pdflatex" + +#: lilypond-book.py:222 +msgid "PROG" +msgstr "PROGRAMA" + +#: lilypond-book.py:228 +msgid "create PDF files for use with PDFTeX" +msgstr "crear archivos PDF para su utilización con PDFTeX" + +#: lilypond-book.py:419 +msgid "Writing snippets..." +msgstr "Escribiendo fragmentos..." + +#: lilypond-book.py:425 +msgid "Processing..." +msgstr "Procesando..." + +#: lilypond-book.py:431 +msgid "All snippets are up to date..." +msgstr "Todos los fragmentos están actualizados..." + +#: lilypond-book.py:452 +#, python-format +msgid "cannot determine format for: %s" +msgstr "no se puede determinar el formato de: %s" + +#: lilypond-book.py:461 +#, python-format +msgid "%s is up to date." +msgstr "%s está actualizado." + +#: lilypond-book.py:475 +#, python-format +msgid "Writing `%s'..." +msgstr "Escribiendo «%s»..." + +#: lilypond-book.py:537 +msgid "Output would overwrite input file; use --output." +msgstr "La salida sobreescribiría el archivo de entrada; utilice --output." + +#: lilypond-book.py:541 +#, python-format +msgid "Reading %s..." +msgstr "Leyendo %s..." + +#: lilypond-book.py:549 +msgid "Dissecting..." +msgstr "Diseccionando..." + +#: lilypond-book.py:561 +#, python-format +msgid "Compiling %s..." +msgstr "Compilando %s..." + +#: lilypond-book.py:570 +#, python-format +msgid "Processing include: %s" +msgstr "Procesando el archivo de inclusión: %s" -#: musicxml2ly.py:2576 +#: lilypond-book.py:582 +#, python-format +msgid "Removing `%s'" +msgstr "Suprimiendo «%s»" + +#: convert-ly.py:44 msgid "" -"Copyright (c) 2005--2009 by\n" -" Han-Wen Nienhuys ,\n" -" Jan Nieuwenhuizen and\n" -" Reinhold Kainhofer \n" +"Update LilyPond input to newer version. By default, update from the\n" +"version taken from the \\version command, to the current LilyPond version." msgstr "" -"Copyright (c) 2005--2009 por\n" -" Han-Wen Nienhuys ,\n" -" Jan Nieuwenhuizen y\n" -" Reinhold Kainhofer \n" +"Actualizar el código de entrada de LilyPond a una versión más reciente.\n" +"De manera predeterminada, actualizarlo desde la versión sacada de\n" +"la instrucción \\version, a la versión actual de LilyPond." -#: musicxml2ly.py:2601 -msgid "use lxml.etree; uses less memory and cpu time" -msgstr "usar lxml.etree; utiliza menos memoria y tiempo de procesador" +#: convert-ly.py:102 convert-ly.py:135 +msgid "VERSION" +msgstr "VERSIÓN" -#: musicxml2ly.py:2607 -msgid "input file is a zip-compressed MusicXML file" -msgstr "el archivo de entrada es un archivo MusicXML comprimido en zip" +#: convert-ly.py:104 +msgid "start from VERSION [default: \\version found in file]" +msgstr "comenzar a partir de VERSIÓN [predeterminado: \\version del archivo]" -#: musicxml2ly.py:2613 -msgid "convert pitches in relative mode (default)" -msgstr "convertir las notas al modo relativo (por omisión)" +#: convert-ly.py:107 +msgid "edit in place" +msgstr "editar in situ" -#: musicxml2ly.py:2618 -msgid "convert pitches in absolute mode" -msgstr "convertir las notas al modo absoluto" +#: convert-ly.py:111 +msgid "do not add \\version command if missing" +msgstr "no añadir la instrucción \\version si no está presente" -#: musicxml2ly.py:2621 -msgid "LANG" -msgstr "IDIOMA" +#: convert-ly.py:117 +#, python-format +msgid "force updating \\version number to %s" +msgstr "forzar la actualización del número de \\version a %s" -#: musicxml2ly.py:2623 -msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly" -msgstr "usar un archivo de idioma distinto 'IDIOMA.ly' y los nombres de nota correspondientes, p.ej. 'deutsch' (alemán) para deutsch.ly" +#: convert-ly.py:123 +msgid "only update \\version number if file is modified" +msgstr "actualizar solo el número de \\version si el archivo ha sido modificado" -#: musicxml2ly.py:2629 -msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." -msgstr "no convertir las direcciones (^, _ o -) para las articulaciones, expresiones de dinámica, etc." +#: convert-ly.py:129 +#, python-format +msgid "show rules [default: -f 0, -t %s]" +msgstr "mostrar las reglas [predeterminado: -f 0, -t %s]" -#: musicxml2ly.py:2635 -msgid "do not convert beaming information, use lilypond's automatic beaming instead" -msgstr "no convertir la información de barrado, en vez de ello utilizar el barrado automático de lilypond" +#: convert-ly.py:134 +#, python-format +msgid "convert to VERSION [default: %s]" +msgstr "convertir a VERSIÓN [predeterminado: %s]" -#: musicxml2ly.py:2643 -msgid "set output filename to FILE, stdout if -" -msgstr "establecer el nombre del archivo de salida a ARCHIVO, y a la salida estándar si es -" +#: convert-ly.py:184 +msgid "Applying conversion: " +msgstr "Aplicando la conversión: " -#: musicxml2ly.py:2726 -#, python-format -msgid "unknown part in part-list: %s" -msgstr "parte desconocida en la lista part-list: %s" +#: convert-ly.py:197 +msgid "Error while converting" +msgstr "Error al convertir" -#: musicxml2ly.py:2788 -msgid "Input is compressed, extracting raw MusicXML data from stdin" -msgstr "El archivo de entrada está comprimido, extrayendo los datos de MusicXML en bruto a partir de la entrada estándar" +#: convert-ly.py:199 +msgid "Stopping at last successful rule" +msgstr "Detención en la última regla satisfactoria" -#: musicxml2ly.py:2791 +#: convert-ly.py:224 #, python-format -msgid "Input file %s is compressed, extracting raw MusicXML data" -msgstr "El archivo de entrada %s está comprimido, extrayendo los datos de MusicXML en bruto" +msgid "Processing `%s'... " +msgstr "Procesando «%s»... " -#: musicxml2ly.py:2821 -msgid "Reading MusicXML from Standard input ..." -msgstr "Leyendo MusicXML desde la entrada estándar..." +#: convert-ly.py:332 +#, python-format +msgid "%s: Unable to open file" +msgstr "%s: No se pudo abrir el archivo" -#: musicxml2ly.py:2823 +#: convert-ly.py:339 #, python-format -msgid "Reading MusicXML from %s ..." -msgstr "Leyendo MusicXML desde %s ..." +msgid "%s: Unable to determine version. Skipping" +msgstr "%s: no se puede determinar la versión. Se salta" -#: musicxml2ly.py:2856 +#: convert-ly.py:344 #, python-format -msgid "Output to `%s'" -msgstr "La salida se dirige hacia `%s'" +msgid "" +"%s: Invalid version string `%s' \n" +"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'" +msgstr "" +"%s: Cadena de versión no válida `%s' \n" +"Las cadenas de versión válidas se componen de tres números separados por puntos, p.ej. `2.8.12'" -#: musicxml2ly.py:2922 +#: etf2ly.py:1195 #, python-format -msgid "Unable to find input file %s" -msgstr "No se encuentra el archivo de entrada %s" +msgid "%s [OPTION]... ETF-FILE" +msgstr "%s [OPCIÓN]... ARCHIVO_ETF" -#: getopt-long.cc:140 +#: etf2ly.py:1196 +msgid "" +"Enigma Transport Format is a format used by Coda Music Technology's\n" +"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" +msgstr "" +"El formato transportable de Enigma (ETF) es un formato utilizado por el producto\n" +"Finale de Coda Music Technology. etf2ly convierte un subconjunto de ETF a un\n" +"archivo de LilyPond listo para usar.\n" + +#: website_post.py:123 +msgid "English" +msgstr "Inglés" + +#: website_post.py:126 +msgid "Other languages" +msgstr "Otros idiomas" + +#: warn.cc:59 +#, c-format +msgid "success: %s" +msgstr "finalizado correctamente: %s" + +#: warn.cc:86 grob.cc:617 input.cc:97 +#, c-format +msgid "programming error: %s" +msgstr "error de programación: %s" + +#: warn.cc:87 input.cc:98 +msgid "continuing, cross fingers" +msgstr "continuamos; cruce los dedos" + +#: getopt-long.cc:153 #, c-format msgid "option `%s' requires an argument" msgstr "la opción «%s» requiere un argumento" -#: getopt-long.cc:144 +#: getopt-long.cc:157 #, c-format msgid "option `%s' does not allow an argument" msgstr "la opción «%s» no permite argumentos" -#: getopt-long.cc:148 +#: getopt-long.cc:161 #, c-format msgid "unrecognized option: `%s'" msgstr "opción no reconocida: «%s»" -#: getopt-long.cc:154 +#: getopt-long.cc:167 #, c-format msgid "invalid argument `%s' to option `%s'" msgstr "argumento no válido «%s» para la opción «%s»" -#: warn.cc:68 grob.cc:566 input.cc:82 -#, c-format -msgid "programming error: %s" -msgstr "error de programación: %s" +#: grob.cc:286 +msgid "Infinity or NaN encountered" +msgstr "se ha encontrado Infinito o NaN" -#: warn.cc:69 input.cc:83 -msgid "continuing, cross fingers" -msgstr "continuamos; cruce los dedos" +#: vaticana-ligature.cc:95 +msgid "flexa-height undefined; assuming 0" +msgstr "la altura flexa-height no está definida; se supone que es 0" -#: accidental-engraver.cc:298 -#, c-format -msgid "accidental typesetting list must begin with context-name: %s" -msgstr "la lista de tippografiado de alteraciones accidentales debe comenzar con context-name: %s" +#: vaticana-ligature.cc:100 +msgid "ascending vaticana style flexa" +msgstr "flexa ascendente de estilo vaticana" -#: accidental-engraver.cc:328 -#, c-format -msgid "procedure or context-name expected for accidental rule, found %s" -msgstr "se esperaba un procedimiento o un nombre de contexto para la regla de alteración accidental, se ha encontrado %s" +#: vaticana-ligature.cc:188 +msgid "Vaticana_ligature: zero join (delta_pitch == 0)" +msgstr "Vaticana_ligature: unión nula (delta_pitch == 0)" -#: accidental.cc:187 -#, c-format -msgid "Could not find glyph-name for alteration %s" -msgstr "No se ha encontrado el nombre de glifo para la alteración %s" +#: parse-scm.cc:101 +msgid "GUILE signaled an error for the expression beginning here" +msgstr "GUILE ha señalado un error para la expresión que comienza aquí" -#: accidental.cc:202 -msgid "natural alteration glyph not found" -msgstr "no se encuentra el glifo del símbolo de becuadro" +#: rest-collision-engraver.cc:70 +msgid "rhythmic head is not part of a rhythmic column" +msgstr "la cabeza rítmica no es parte de una columna rítmica" + +#. if we get to here, just put everything on one line +#: constrained-breaking.cc:189 constrained-breaking.cc:207 +msgid "cannot find line breaking that satisfies constraints" +msgstr "no se ecnuentra un salto de línea que cumpla las restricciones" -#: align-interface.cc:305 -msgid "tried to get a translation for something that is no child of mine" -msgstr "se ha intentado obtener una traducción de algo que no es hijo mío" +#: horizontal-bracket-engraver.cc:78 +msgid "do not have that many brackets" +msgstr "no tiene tantos corchetes" + +#: horizontal-bracket-engraver.cc:87 +msgid "conflicting note group events" +msgstr "eventos de grupo de notas en conflicto" + +#: hyphen-engraver.cc:104 +msgid "removing unterminated hyphen" +msgstr "se suprime el guión separador sin terminación" -#: all-font-metrics.cc:143 +#: hyphen-engraver.cc:118 +msgid "unterminated hyphen; removing" +msgstr "guión separador sin terminar; se suprime" + +#: pango-font.cc:187 open-type-font.cc:319 #, c-format -msgid "cannot find font: `%s'" -msgstr "no se encuentra la tipografía «%s»" +msgid "FT_Get_Glyph_Name () error: %s" +msgstr "error en FT_Get_Glyph_Name (): %s" -#: apply-context-iterator.cc:31 -msgid "\\applycontext argument is not a procedure" -msgstr "el argumento de \\applycontext no es un procedimiento" +#: pango-font.cc:204 +#, c-format +msgid "" +"Glyph has no name, but font supports glyph naming.\n" +"Skipping glyph U+%0X, file %s" +msgstr "" +"El glifo no tiene nombre, pero la tipografía soporta nombres de glifo.\n" +"Se salta el glifo U+%0X, archivo %s" -#: auto-change-iterator.cc:63 change-iterator.cc:61 +#: pango-font.cc:241 #, c-format -msgid "cannot change, already in translator: %s" -msgstr "no se puede cambiar, ya está dentro del traductor: %s" +msgid "no PostScript font name for font `%s'" +msgstr "no hay un nombre de tipografía PostScript para «%s»" -#: axis-group-engraver.cc:78 -msgid "Axis_group_engraver: vertical group already has a parent" -msgstr "Axis_group_engraver: el grupo vertical ya tiene un ancestro" +#: pango-font.cc:290 +msgid "FreeType face has no PostScript font name" +msgstr "El tipo FreeType no tiene un nombre de tipografía PostScript" -#: axis-group-engraver.cc:79 -msgid "are there two Axis_group_engravers?" -msgstr "¿hay dos Axis_group_engravers?" +#: midi-item.cc:92 +#, c-format +msgid "no such MIDI instrument: `%s'" +msgstr "no existe este instrumento MIDI: «%s»" -#: axis-group-engraver.cc:80 -msgid "removing this vertical group" -msgstr "se suprime este grupo vertical" +#: note-heads-engraver.cc:76 +msgid "NoteEvent without pitch" +msgstr "NoteEvent sin altura" -#: axis-group-interface.cc:532 -msgid "an outside-staff object should have a direction, defaulting to up" -msgstr "un objeto externo a la pauta debe tener una dirección, por omisión se establece hacia arriba" +#: rest.cc:159 +#, c-format +msgid "rest `%s' not found" +msgstr "no se ha encontrado el silencio «%s»" -#: bar-check-iterator.cc:73 +#: spaceable-grob.cc:94 #, c-format -msgid "barcheck failed at: %s" -msgstr "la comprobación de compás ha fallado en: %s" +msgid "No spring between column %d and next one" +msgstr "No hay separación entre la columna %d y la siguiente" -#: beam-engraver.cc:126 +#: beam-engraver.cc:147 msgid "already have a beam" msgstr "ya tiene una barra" -#: beam-engraver.cc:202 +#: beam-engraver.cc:230 msgid "unterminated beam" msgstr "barra sin terminar" -#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138 +#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150 msgid "stem must have Rhythmic structure" msgstr "la plica debe tener estructura rítmica" -#: beam-engraver.cc:252 +#: beam-engraver.cc:274 msgid "stem does not fit in beam" msgstr "la plica no cabe dentro de la barra" -#: beam-engraver.cc:253 +#: beam-engraver.cc:275 msgid "beam was started here" msgstr "la barra comenzó aquí" -#: beam-quanting.cc:307 -msgid "no feasible beam position" -msgstr "no hay ninguna posición viable para la barra" +#: music-iterator.cc:182 +msgid "Sending non-event to context" +msgstr "Enviando elemento que no es un evento a un contexto" -#: beam.cc:160 -msgid "removing beam with no stems" -msgstr "se suprime la barra sin plicas" +#: context.cc:149 +#, c-format +msgid "cannot find or create new `%s'" +msgstr "no se encuentra o no se puede crear un «%s» nuevo" -#: beam.cc:1078 -msgid "no viable initial configuration found: may not find good beam slope" -msgstr "no se ha encontrado ninguna configuración inicial viable; puede que no se encuentre una buena inclinación de las barras" +#: context.cc:207 +#, c-format +msgid "cannot find or create `%s' called `%s'" +msgstr "no se encuentra o no se puede crear «%s» llamado «%s»" -#: break-alignment-interface.cc:195 +#: context.cc:269 #, c-format -msgid "No spacing entry from %s to `%s'" -msgstr "no hay un elemento de espaciado desde %s hasta «%s»" +msgid "Invalid CreateContext event: Cannot create %s context" +msgstr "evento CreateContext inválido: No se puede crear el contexto %s" -#: change-iterator.cc:23 +#: context.cc:400 #, c-format -msgid "cannot change `%s' to `%s'" -msgstr "no se puede cambiar de «%s» a «%s»" +msgid "cannot find or create: `%s'" +msgstr "no se encuentra o no se puede crear «%s»" -#. FIXME: constant error message. -#: change-iterator.cc:82 -msgid "cannot find context to switch to" -msgstr "no se encuentra el contexto al que cambiar" +#: dispatcher.cc:82 +msgid "Event class should be a symbol" +msgstr "La clase del evento debe ser un símbolo" -#. We could change the current translator's id, but that would make -#. errors hard to catch. -#. -#. last->translator_id_string () = get_change -#. ()->change_to_id_string (); -#: change-iterator.cc:91 +#: dispatcher.cc:89 #, c-format -msgid "not changing to same context type: %s" -msgstr "no se cambia al mismo tipo de contexto: %s" +msgid "Unknown event class %s" +msgstr "Clase de evento %s desconocida" -#. FIXME: uncomprehensable message -#: change-iterator.cc:95 -msgid "none of these in my family" -msgstr "ninguno de éstos en mi familia" +#: paper-column-engraver.cc:245 +msgid "forced break was overridden by some other event, should you be using bar checks?" +msgstr "el salto forzado ha sido sobreestablecido por algún otro evento, ¿quizá deba usar comprobaciones de compás?" + +#: tie-engraver.cc:116 +msgid "unterminated tie" +msgstr "ligadura de unión sin terminar" + +#: tie-engraver.cc:312 +msgid "lonely tie" +msgstr "ligadura de unión solitaria" + +#: dynamic-engraver.cc:197 +msgid "cannot find start of (de)crescendo" +msgstr "no se encuentra el comienzo del (de)crescendo" + +#: dynamic-engraver.cc:206 +msgid "already have a decrescendo" +msgstr "ya tiene un decrescendo" + +#: dynamic-engraver.cc:208 +msgid "already have a crescendo" +msgstr "ya tiene un crescendo" + +#: dynamic-engraver.cc:211 +msgid "cresc starts here" +msgstr "el cresc comenzó aquí" + +#: dynamic-engraver.cc:339 +msgid "unterminated (de)crescendo" +msgstr "(de)crescendo sin terminar" + +#: paper-score.cc:122 minimal-page-breaking.cc:40 +msgid "Calculating line breaks..." +msgstr "Calculando los saltos de línea..." + +#: paper-score.cc:135 +#, c-format +msgid "Element count %d (spanners %d) " +msgstr "Cantidad de elementos: %d (trazadores: %d)" + +#: paper-score.cc:139 +msgid "Preprocessing graphical objects..." +msgstr "Preprocesando los objetos gráficos..." + +#: paper-score.cc:163 optimal-page-breaking.cc:208 +#: page-turn-page-breaking.cc:248 +msgid "Drawing systems..." +msgstr "Dibujando los sistemas..." + +#: mensural-ligature-engraver.cc:96 +msgid "ligature with less than 2 heads -> skipping" +msgstr "ligadura con menos de dos cabezas; se salta" + +#: mensural-ligature-engraver.cc:123 +msgid "cannot determine pitch of ligature primitive -> skipping" +msgstr "no se puede determinar la altura de la primitiva de ligadura; se salta" + +#: mensural-ligature-engraver.cc:137 +msgid "single note ligature - skipping" +msgstr "ligadura de una nota; se salta" + +#: mensural-ligature-engraver.cc:148 +msgid "prime interval within ligature -> skipping" +msgstr "intervalo primo dentro de una ligadura; se salta" + +#: mensural-ligature-engraver.cc:159 +msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" +msgstr "ligadura mensural: la duración no es Mx, L, B ni S; se salta" + +#: mensural-ligature-engraver.cc:202 +msgid "semibrevis must be followed by another one -> skipping" +msgstr "la semibreve debe ir seguida por otra -> se salta" + +#: mensural-ligature-engraver.cc:212 +msgid "" +"semibreves can only appear at the beginning of a ligature,\n" +"and there may be only zero or two of them" +msgstr "" +"las semibreves sólo pueden aparecer al principio de una ligadura,\n" +"y sólo puede haber dos o ninguna" + +#: mensural-ligature-engraver.cc:232 +msgid "" +"invalid ligatura ending:\n" +"when the last note is a descending brevis,\n" +"the penultimate note must be another one,\n" +"or the ligatura must be LB or SSB" +msgstr "" +"finalización inválida de la ligadura:\n" +"cuando la última nota es una breve descendente,\n" +"la penúltima nota debe ser otra breve,\n" +"o la ligadura debe ser LB o SSB" + +#: mensural-ligature-engraver.cc:386 +msgid "unexpected case fall-through" +msgstr "opción de caso por defecto inesperada" + +#: piano-pedal-engraver.cc:298 +#, c-format +msgid "expect 3 strings for piano pedals, found: %ld" +msgstr "se eseperaban 3 cadenas para los pedales de piano, se han encontrado: %ld" + +#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324 +#: piano-pedal-performer.cc:104 +#, c-format +msgid "cannot find start of piano pedal: `%s'" +msgstr "no se encuentra el comienzo del pedal de piano «%s»" + +#: piano-pedal-engraver.cc:359 +#, c-format +msgid "cannot find start of piano pedal bracket: `%s'" +msgstr "no se encuentra el comienzo del corchete de pedal de piano «%s»" + +#: input.cc:131 source-file.cc:179 source-file.cc:194 +msgid "position unknown" +msgstr "posición desconocida" + +#: paper-outputter-scheme.cc:41 +#, c-format +msgid "Layout output to `%s'..." +msgstr "Salida de la página hacia «%s»..." + +#: general-scheme.cc:306 +msgid "infinity or NaN encountered while converting Real number" +msgstr "se ha encontrado infinito o NaN durante la conversión de un número Real" + +#: general-scheme.cc:307 +msgid "setting to zero" +msgstr "estableciendo al valor cero" + +#: general-scheme.cc:543 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Se ha encontrado Infinito o NaN en la salida. Se sustituye por 0.0" + +#: music.cc:151 +#, c-format +msgid "octave check failed; expected \"%s\", found: \"%s\"" +msgstr "fallo en la comprobación de octava; se esperaba \"%s\", se ha encontrado: \"%s\"" + +#: music.cc:219 +msgid "(normalized pitch)" +msgstr "(altura normalizada)" + +#: music.cc:223 +#, c-format +msgid "Transposing %s by %s makes alteration larger than double" +msgstr "La transposición de %s en %s produce una alteración más que doble" + +#: translator-ctors.cc:65 +#, c-format +msgid "unknown translator: `%s'" +msgstr "traductor desconocido: «%s»" + +#: partial-iterator.cc:45 +msgid "trying to use \\partial after the start of a piece" +msgstr "intento de utilizar \\partial después del inicio de la pieza" + +#: new-fingering-engraver.cc:106 +msgid "cannot add text scripts to individual note heads" +msgstr "no se pueden añadir guiones de texto a cabezas de nota individuales" + +#: new-fingering-engraver.cc:250 +msgid "no placement found for fingerings" +msgstr "no se ha encontrado ninguna ubicación válida para las digitaciones" + +#: new-fingering-engraver.cc:251 +msgid "placing below" +msgstr "se coloca debajo" + +#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72 +msgid "cannot find start of ligature" +msgstr "no se encuentra el comienzo de la ligadura" + +#: ligature-engraver.cc:109 +msgid "no right bound" +msgstr "no hay límite derecho" + +#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85 +msgid "already have a ligature" +msgstr "ya tiene una ligadura" + +#: ligature-engraver.cc:140 +msgid "no left bound" +msgstr "no hay límite izquierdo" + +# ligature...? +#: ligature-engraver.cc:185 +msgid "unterminated ligature" +msgstr "ligadura sin terminar" -#: chord-tremolo-engraver.cc:88 -msgid "No tremolo to end" -msgstr "No hay ningún tremolo hasta el final" +#: ligature-engraver.cc:214 +msgid "ignoring rest: ligature may not contain rest" +msgstr "se ignora el silencio: la ligadura no puede contener silencios" -#: chord-tremolo-engraver.cc:110 -msgid "unterminated chord tremolo" -msgstr "trémolo de acorde sin terminar" +#: ligature-engraver.cc:215 +msgid "ligature was started here" +msgstr "la ligadura comenzó aquí" -#: chord-tremolo-iterator.cc:35 +#: auto-change-iterator.cc:74 change-iterator.cc:72 #, c-format -msgid "expect 2 elements for chord tremolo, found %d" -msgstr "se esperaban 2 elementos para el tremolo de acorde, se han encontrado %d" +msgid "cannot change, already in translator: %s" +msgstr "no se puede cambiar, ya está dentro del traductor: %s" -#: clef.cc:54 +#: accidental-engraver.cc:180 #, c-format -msgid "clef `%s' not found" -msgstr "no se ha encontrado la clave «%s»" +msgid "accidental typesetting list must begin with context-name: %s" +msgstr "la lista de tippografiado de alteraciones accidentales debe comenzar con context-name: %s" -#: cluster.cc:110 +#: accidental-engraver.cc:210 #, c-format -msgid "unknown cluster style `%s'" -msgstr "estilo de cluster (racimo) «%s» desconocido" - -#: cluster.cc:147 -msgid "junking empty cluster" -msgstr "se recorta el racimo (cluster) vacío" +msgid "procedure or context-name expected for accidental rule, found %s" +msgstr "se esperaba un procedimiento o un nombre de contexto para la regla de alteración accidental, se ha encontrado %s" -#: coherent-ligature-engraver.cc:100 +#: ttf.cc:481 ttf.cc:530 #, c-format -msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" -msgstr "Coherent_ligature_engraver: se establece `spacing-increment=0.01': ptr=%ul" +msgid "font index %d too large for font `%s', using index 0" +msgstr "índice de fuente tipográfica %d demasiado grande para la tipografía `%s', se usa el índice 0" -#. if we get to here, just put everything on one line -#: constrained-breaking.cc:176 constrained-breaking.cc:193 -msgid "cannot find line breaking that satisfies constraints" -msgstr "no se ecnuentra un salto de línea que cumpla las restricciones" +#: ttf.cc:513 ttf.cc:565 +msgid "font index must be non-negative, using index 0" +msgstr "el índice de la fuente tipográfica debe ser no negativo, se usa el índice 0" -#: context-def.cc:130 +#: break-alignment-interface.cc:206 #, c-format -msgid "program has no such type: `%s'" -msgstr "el programa no tiene este tipo: «%s»" +msgid "No spacing entry from %s to `%s'" +msgstr "no hay un elemento de espaciado desde %s hasta «%s»" -#: context-property.cc:32 -msgid "need symbol arguments for \\override and \\revert" -msgstr "se necesitan argumentos de símbolo para \\override y \\revert" +#: minimal-page-breaking.cc:44 +msgid "Calculating page breaks..." +msgstr "Calculando saltos de página..." -#: context.cc:139 +#: vaticana-ligature-engraver.cc:400 #, c-format -msgid "cannot find or create new `%s'" -msgstr "no se encuentra o no se puede crear un «%s» nuevo" +msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style" +msgstr "prefijo(s) `%s' de esta cabeza ignorado(s) de acuerdo a las restricciones del estilo de ligadura seleccionado" -#: context.cc:197 +#: vaticana-ligature-engraver.cc:736 #, c-format -msgid "cannot find or create `%s' called `%s'" -msgstr "no se encuentra o no se puede crear «%s» llamado «%s»" +msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" +msgstr "Vaticana_ligature_engraver: se establece `spacing-increment = %f': ptr =%ul" -#: context.cc:259 +#: paper-book.cc:214 #, c-format -msgid "Invalid CreateContext event: Cannot create %s context" -msgstr "evento CreateContext inválido: No se puede crear el contexto %s" +msgid "program option -dprint-pages not supported by backend `%s'" +msgstr "la opción de programa -dprint-pages no está contemplada por el backend `%s'" -#: context.cc:390 +#: paper-book.cc:233 #, c-format -msgid "cannot find or create: `%s'" -msgstr "no se encuentra o no se puede crear «%s»" +msgid "program option -dpreview not supported by backend `%s'" +msgstr "la opción de programa -dpreview no está contemplada por el backend `%s'" -#: custos.cc:77 -#, c-format -msgid "custos `%s' not found" -msgstr "no se encuentran los custos «%s»" +#: output-def.cc:235 +msgid "margins do not fit with line-width, setting default values" +msgstr "los márgenes no caben en este ancho de línea, fijando valores predeterminados" -#: dispatcher.cc:71 -msgid "Event class should be a symbol" -msgstr "La clase del evento debe ser un símbolo" +#: output-def.cc:242 +msgid "systems run off the page due to improper paper settings, setting default values" +msgstr "los sistemas se salen de la página a causa de unos ajustes del papel inadecuados, fijando valores predeterminados" -#: dispatcher.cc:78 +#: score-engraver.cc:78 #, c-format -msgid "Unknown event class %s" -msgstr "Clase de evento %s desconocida" +msgid "cannot find `%s'" +msgstr "No se encuentra «%s»" + +#: score-engraver.cc:80 +msgid "Music font has not been installed properly." +msgstr "La tipografía de música no se ha instalado correctamente." -#: dots.cc:37 +#: score-engraver.cc:82 #, c-format -msgid "dot `%s' not found" -msgstr "no se encuentra el puntillo «%s»" +msgid "Search path `%s'" +msgstr "Ruta de búsqueda «%s»" -#: dynamic-engraver.cc:186 -msgid "cannot find start of (de)crescendo" -msgstr "no se encuentra el comienzo del (de)crescendo" +#: score-engraver.cc:84 +msgid "Aborting" +msgstr "Se detiene la ejecución" -#: dynamic-engraver.cc:195 -msgid "already have a decrescendo" -msgstr "ya tiene un decrescendo" +#: note-collision.cc:497 +msgid "ignoring too many clashing note columns" +msgstr "demasiadas columnas de notas que chocan entre sí; se ignoran" -#: dynamic-engraver.cc:197 -msgid "already have a crescendo" -msgstr "ya tiene un crescendo" +#. fixme: be more verbose. +#: volta-engraver.cc:111 +msgid "cannot end volta spanner" +msgstr "no se puede terminar el trazador de volta" -#: dynamic-engraver.cc:200 -msgid "cresc starts here" -msgstr "el cresc comenzó aquí" +#: volta-engraver.cc:121 +msgid "already have a volta spanner, ending that one prematurely" +msgstr "ya hay un trazador de volta, se acaba éste de forma prematura" -#: dynamic-engraver.cc:328 -msgid "unterminated (de)crescendo" -msgstr "(de)crescendo sin terminar" +# also...? +#: volta-engraver.cc:125 +msgid "also already have an ended spanner" +msgstr "ya hay un trazador finalizado" -#: extender-engraver.cc:142 extender-engraver.cc:151 -msgid "unterminated extender" -msgstr "prolongación sin terminar" +#: volta-engraver.cc:126 +msgid "giving up" +msgstr "abandonando" -#: font-config-scheme.cc:140 font-config.cc:57 -#, c-format -msgid "failed adding font directory: %s" -msgstr "fallo al añadir la carpeta de tipografías: %s" +#: page-layout-problem.cc:322 +msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed" +msgstr "la música no cabe en la página: se ha solicitado la no justificación del espaciado, pero la página ha resultado comprimida" -#: font-config-scheme.cc:142 font-config.cc:59 +#: page-layout-problem.cc:325 #, c-format -msgid "adding font directory: %s" -msgstr "añadiendo carpeta de tipografías: %s" +msgid "cannot fit music on page: overflow is %f" +msgstr "la música no cabe en la página: el exceso es %f" -#: font-config-scheme.cc:156 -#, c-format -msgid "failed adding font file: %s" -msgstr "fallo al añadir el archivo de fuente tipográfica: %s" +#: page-layout-problem.cc:327 +msgid "compressing music to fit" +msgstr "comprimiendo la música para que quepa" -#: font-config-scheme.cc:158 -#, c-format -msgid "adding font file: %s" -msgstr "añadiendo archivo de fuente tipográfica: %s" +#: page-layout-problem.cc:765 +msgid "staff-affinities should only decrease" +msgstr "staff-affinities solo debe disminuir" -#: font-config.cc:28 -msgid "Initializing FontConfig..." -msgstr "Inicializando FontConfig..." +#: apply-context-iterator.cc:42 +msgid "\\applycontext argument is not a procedure" +msgstr "el argumento de \\applycontext no es un procedimiento" + +#. FIXME: constant error message. +#: mark-engraver.cc:157 +msgid "rehearsalMark must have integer value" +msgstr "rehearsalMark debe tener un valor entero" + +#: mark-engraver.cc:163 +msgid "mark label must be a markup object" +msgstr "la etiqueta de marcado debe ser un objeto de marcado" -#: font-config.cc:44 +#: new-dynamic-engraver.cc:142 #, c-format -msgid "Rebuilding FontConfig cache %s, this may take a while..." -msgstr "Reconstruyendo la caché de FontConfig %s, puede tardar un rato..." +msgid "" +"unknown crescendo style: %s\n" +"defaulting to hairpin." +msgstr "" +"estilo de crescendo desconocido: %s\n" +"se toma regulador como predeterminado." -#: font-config.cc:63 -msgid "Building font database." -msgstr "Construyendo la base de datos de fuentes tipográficas." +#: new-dynamic-engraver.cc:200 +#, c-format +msgid "unterminated %s" +msgstr "%s sin terminar" -#: general-scheme.cc:202 -msgid "infinity or NaN encountered while converting Real number" -msgstr "se ha encontrado infinito o NaN durante la conversión de un número Real" +#: stem-engraver.cc:103 +msgid "tremolo duration is too long" +msgstr "la duración del trémolo es demasiado larga" -#: general-scheme.cc:203 -msgid "setting to zero" -msgstr "estableciendo al valor cero" +#. FIXME: +#: stem-engraver.cc:140 +#, c-format +msgid "adding note head to incompatible stem (type = %d)" +msgstr "añadiendo cabeza de nota a una plica incompatible (tipo = %d)" -#: general-scheme.cc:422 output-ps.scm:63 -msgid "Found infinity or nan in output. Substituting 0.0" -msgstr "Se ha encontrado Infinito o NaN en la salida. Se sustituye por 0.0" +#: stem-engraver.cc:142 +msgid "maybe input should specify polyphonic voices" +msgstr "quizá la entrada debiera especificar voces polifónicas" -#: glissando-engraver.cc:94 -msgid "unterminated glissando" -msgstr "glissando sin terminar" +#: lily-lexer.cc:264 +msgid "include files are not allowed in safe mode" +msgstr "no se permiten los archivos de inclusión en el modo seguro" -#: global-context-scheme.cc:85 global-context-scheme.cc:103 -msgid "no music found in score" -msgstr "no se ha encontrado música en la partitura" +#: lily-lexer.cc:291 +#, c-format +msgid "identifier name is a keyword: `%s'" +msgstr "el nombre del identificativo es una palabra clave: «%s»" -#: global-context-scheme.cc:93 -msgid "Interpreting music... " -msgstr "Interpretando la música... " +#: lily-lexer.cc:312 +#, c-format +msgid "error at EOF: %s" +msgstr "error al final del archivo (EOF): %s" -#: global-context-scheme.cc:116 +#: lyric-combine-music-iterator.cc:337 #, c-format -msgid "elapsed time: %.2f seconds" -msgstr "tiempo transcurrido: %.2f segundos" +msgid "cannot find Voice `%s'" +msgstr "no se encuentra la Voz «%s»" -#: gregorian-ligature-engraver.cc:59 +#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109 #, c-format -msgid "\\%s ignored" -msgstr "\\%s ignorado(s)" +msgid "cannot find file: `%s'" +msgstr "no se encuentra el archivo: «%s»" -#: gregorian-ligature-engraver.cc:64 +#: includable-lexer.cc:73 lily-parser-scheme.cc:100 #, c-format -msgid "implied \\%s added" -msgstr "se ha añadido el \\%s implícito" +msgid "(search path: `%s')" +msgstr "(ruta de búsqueda: «%s»)" -#. ligature may not start with 2nd head of pes or flexa -#: gregorian-ligature-engraver.cc:213 -msgid "cannot apply `\\~' on first head of ligature" -msgstr "no se puede aplicar `\\~' sobre la primera cabeza de una ligadura" +#: note-column.cc:135 +msgid "cannot have note heads and rests together on a stem" +msgstr "no se pueden tener cabezas de nota y silencios en la misma plica" -#. (pitch == prev_pitch) -#: gregorian-ligature-engraver.cc:225 -msgid "cannot apply `\\~' on heads with identical pitch" -msgstr "no se puede aplicar `\\~' sobre cabezas de idéntica altura" +#: beam.cc:180 +msgid "removing beam with no stems" +msgstr "se suprime la barra sin plicas" -#: grob-interface.cc:57 -#, c-format -msgid "Unknown interface `%s'" -msgstr "interfaz desconocido «%s»" +#. We are completely screwed. +#: beam.cc:1274 +msgid "no viable initial configuration found: may not find good beam slope" +msgstr "no se ha encontrado ninguna configuración inicial viable; puede que no se encuentre una buena inclinación de las barras" -#: grob-interface.cc:68 +#: slur-engraver.cc:93 #, c-format -msgid "Grob `%s' has no interface for property `%s'" -msgstr "El grob «%s» no tiene interfaz para la propiedad «%s»" +msgid "direction of %s invalid: %d" +msgstr "dirección inválida de %s: %d" -#: grob-property.cc:34 -#, c-format -msgid "%d: %s" -msgstr "%d: %s" +#: slur-engraver.cc:162 +msgid "unterminated slur" +msgstr "ligadura de expresión sin terminar" -#: grob-property.cc:173 +#: slur-engraver.cc:174 +msgid "cannot end slur" +msgstr "no se puede terminar la ligadura de expresión" + +#: font-config.cc:40 +msgid "Initializing FontConfig..." +msgstr "Inicializando FontConfig..." + +#: font-config.cc:55 font-config-scheme.cc:152 #, c-format -msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" -msgstr "dependencia cíclica: se ha encontrado calculation-in-progress para #'%s (%s)" +msgid "failed adding font directory: %s" +msgstr "fallo al añadir la carpeta de tipografías: %s" -#: grob.cc:251 -msgid "Infinity or NaN encountered" -msgstr "se ha encontrado Infinito o NaN" +#: font-config.cc:57 font-config-scheme.cc:154 +#, c-format +msgid "adding font directory: %s" +msgstr "añadiendo carpeta de tipografías: %s" -#: hairpin.cc:186 -msgid "decrescendo too small" -msgstr "decrescendo demasiado pequeño" +#: font-config.cc:61 +msgid "Building font database..." +msgstr "Construyendo la base de datos de fuentes tipográficas..." -#: horizontal-bracket-engraver.cc:68 -msgid "do not have that many brackets" -msgstr "no tiene tantos corchetes" +#. find out the ideal number of pages +#: optimal-page-breaking.cc:62 +msgid "Finding the ideal number of pages..." +msgstr "Buscando el número de páginas ideal..." -#: horizontal-bracket-engraver.cc:77 -msgid "conflicting note group events" -msgstr "eventos de grupo de notas en conflicto" +#: optimal-page-breaking.cc:85 +msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page" +msgstr "no se pueden satisfacer systems-per-page y page-count al mismo tiempo, se ignora systems-per-page" -#: hyphen-engraver.cc:93 -msgid "removing unterminated hyphen" -msgstr "se suprime el guión separador sin terminación" +#: optimal-page-breaking.cc:105 +msgid "Fitting music on 1 page..." +msgstr "Disponiendo la música en una página..." -#: hyphen-engraver.cc:107 -msgid "unterminated hyphen; removing" -msgstr "guión separador sin terminar; se suprime" +#: optimal-page-breaking.cc:107 +#, c-format +msgid "Fitting music on %d pages..." +msgstr "Disponiendo la música en %d páginas..." -#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:110 +#: optimal-page-breaking.cc:109 #, c-format -msgid "cannot find file: `%s'" -msgstr "no se encuentra el archivo: «%s»" +msgid "Fitting music on %d or %d pages..." +msgstr "Disponiendo la música en %d o %d páginas..." -#: includable-lexer.cc:55 lily-parser-scheme.cc:101 +#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173 #, c-format -msgid "(search path: `%s')" -msgstr "(ruta de búsqueda: «%s»)" +msgid "trying %d systems" +msgstr "probando %d sistemas" -#: input.cc:112 source-file.cc:173 source-file.cc:188 -msgid "position unknown" -msgstr "posición desconocida" +#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201 +#, c-format +msgid "best score for this sys-count: %f" +msgstr "mejor puntuación para este número de sistemas: %f" -#: key-signature-interface.cc:74 +#: accidental.cc:200 #, c-format -msgid "No glyph found for alteration: %s" -msgstr "No se ha encontrado ningún glifo para la alteración: %s" +msgid "Could not find glyph-name for alteration %s" +msgstr "No se ha encontrado el nombre de glifo para la alteración %s" -#: key-signature-interface.cc:84 -msgid "alteration not found" -msgstr "no se encuentra la alteración" +#: accidental.cc:215 +msgid "natural alteration glyph not found" +msgstr "no se encuentra el glifo del símbolo de becuadro" -#: ligature-bracket-engraver.cc:62 ligature-engraver.cc:93 -msgid "cannot find start of ligature" -msgstr "no se encuentra el comienzo de la ligadura" +#: system.cc:197 +#, c-format +msgid "Element count %d" +msgstr "Número total de elementos %d" -#: ligature-bracket-engraver.cc:75 ligature-engraver.cc:120 -msgid "already have a ligature" -msgstr "ya tiene una ligadura" +#: system.cc:303 +#, c-format +msgid "Grob count %d" +msgstr "Número de objetos gráficos: %d" -#: ligature-engraver.cc:98 -msgid "no right bound" -msgstr "no hay límite derecho" +#: slur.cc:362 +#, c-format +msgid "Ignoring grob for slur: %s. avoid-slur not set?" +msgstr "Se ignora el objeto gráfico para la ligadura: %s. ¿No está establecido avoid-slur?" -#: ligature-engraver.cc:129 -msgid "no left bound" -msgstr "no hay límite izquierdo" +#: font-config-scheme.cc:168 +#, c-format +msgid "failed adding font file: %s" +msgstr "fallo al añadir el archivo de fuente tipográfica: %s" -# ligature...? -#: ligature-engraver.cc:173 -msgid "unterminated ligature" -msgstr "ligadura sin terminar" +#: font-config-scheme.cc:170 +#, c-format +msgid "adding font file: %s" +msgstr "añadiendo archivo de fuente tipográfica: %s" -#: ligature-engraver.cc:202 -msgid "ignoring rest: ligature may not contain rest" -msgstr "se ignora el silencio: la ligadura no puede contener silencios" +#: hairpin.cc:186 +msgid "decrescendo too small" +msgstr "decrescendo demasiado pequeño" -#: ligature-engraver.cc:203 -msgid "ligature was started here" -msgstr "la ligadura comenzó aquí" +#: extender-engraver.cc:170 extender-engraver.cc:179 +msgid "unterminated extender" +msgstr "prolongación sin terminar" -#: lily-guile.cc:78 +#: lily-guile.cc:89 #, c-format msgid "(load path: `%s')" msgstr "(ruta de carga: «%s»)" -#: lily-guile.cc:428 +#: lily-guile.cc:437 #, c-format msgid "cannot find property type-check for `%s' (%s)." msgstr "no se encuentra la comprobación de tipo de propiedad para «%s» (%s)." -#: lily-guile.cc:431 +#: lily-guile.cc:440 msgid "perhaps a typing error?" msgstr "¿quizá es un error de tecleo?" -#: lily-guile.cc:438 +#: lily-guile.cc:447 msgid "doing assignment anyway" msgstr "se hace la asignación de todas formas" -#: lily-guile.cc:450 +#: lily-guile.cc:459 #, c-format msgid "type check for `%s' failed; value `%s' must be of type `%s'" msgstr "ha fallado la comprobación de tipo para «%s»; el valor «%s» debe ser del tipo «%s»" -#: lily-lexer.cc:252 -msgid "include files are not allowed in safe mode" -msgstr "no se permiten los archivos de inclusión en el modo seguro" - -#: lily-lexer.cc:271 -#, c-format -msgid "identifier name is a keyword: `%s'" -msgstr "el nombre del identificativo es una palabra clave: «%s»" - -#: lily-lexer.cc:286 -#, c-format -msgid "error at EOF: %s" -msgstr "error al final del archivo (EOF): %s" - -#: lily-parser-scheme.cc:30 -#, c-format -msgid "deprecated function called: %s" -msgstr "llamada a una función obsoleta: %s" - -#: lily-parser-scheme.cc:83 -#, c-format -msgid "Changing working directory to: `%s'" -msgstr "Se cambia el directorio de trabajo a: «%s»" - -#: lily-parser-scheme.cc:100 -#, c-format -msgid "cannot find init file: `%s'" -msgstr "no se encuentra el archivo de inicio: «%s»" - -#: lily-parser-scheme.cc:119 -#, c-format -msgid "Processing `%s'" -msgstr "Procesando «%s»" - -#: lily-parser.cc:95 -msgid "Parsing..." -msgstr "Analizando..." - -#: lily-parser.cc:123 -msgid "braces do not match" -msgstr "las llaves no concuerdan" - -#: lyric-combine-music-iterator.cc:329 -#, c-format -msgid "cannot find Voice `%s'" -msgstr "no se encuentra la Voz «%s»" - -#: lyric-engraver.cc:162 -msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." -msgstr "La sílaba de la letra no tiene nota. Utilice \\lyricsto o associatedVoice." - -#: main.cc:97 +#: main.cc:109 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -1677,7 +2191,7 @@ msgstr "" "él bajo ciertas condiciones. Invóquelo como `%s --warranty' para obtener\n" "más información.\n" -#: main.cc:103 +#: main.cc:115 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License version 2\n" @@ -1719,11 +2233,11 @@ msgstr "" "59 Temple Place - Suite 330,\n" "Boston, MA 02111-1307, USA.\n" -#: main.cc:134 +#: main.cc:146 msgid "SYM[=VAL]" msgstr "SÍMBOLO[=VALOR]" -#: main.cc:135 +#: main.cc:147 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." @@ -1731,41 +2245,41 @@ msgstr "" "establecer la opción de Scheme SÍMBOLO a VALOR (por omisión: #t).\n" "Use -dhelp para obtener ayuda." -#: main.cc:138 +#: main.cc:150 msgid "EXPR" msgstr "EXPRESIÓN" -#: main.cc:138 +#: main.cc:150 msgid "evaluate scheme code" msgstr "evaluar código de Scheme" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:141 +#: main.cc:153 msgid "FORMATs" msgstr "FORMATOs" -#: main.cc:141 +#: main.cc:153 msgid "dump FORMAT,... Also as separate options:" msgstr "volcar FORMATO,... También como opciones separadas:" -#: main.cc:142 +#: main.cc:154 msgid "generate PDF (default)" msgstr "generar un PDF (predeterminado)" -#: main.cc:143 +#: main.cc:155 msgid "generate PNG" msgstr "generar un PNG" -#: main.cc:144 +#: main.cc:156 msgid "generate PostScript" msgstr "generar un PostScript" -#: main.cc:146 +#: main.cc:158 msgid "FIELD" msgstr "CAMPO" -#: main.cc:146 +#: main.cc:158 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" @@ -1773,19 +2287,19 @@ msgstr "" "volcar el campo de cabecera CAMPO a un archivo\n" "llamado NOMBRE_BASE.CAMPO" -#: main.cc:148 +#: main.cc:160 msgid "add DIR to search path" msgstr "añadir DIRECTORIO a la ruta de búsqueda" -#: main.cc:149 +#: main.cc:161 msgid "use FILE as init file" msgstr "usar ARCHIVO como archivo de inicialización" -#: main.cc:151 +#: main.cc:163 msgid "USER, GROUP, JAIL, DIR" msgstr "USUARIO, GRUPO, JAULA, DIRECTORIO" -#: main.cc:151 +#: main.cc:163 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" @@ -1793,15 +2307,16 @@ msgstr "" "chroot a JAULA, convertirse en USUARIO:GRUPO\n" "y cd al DIRECTORIO" -#: main.cc:154 +#: main.cc:166 msgid "write output to FILE (suffix will be added)" msgstr "escribir la salida en el ARCHIVO (se añadirá el sufijo)" -#: main.cc:155 +#: main.cc:167 msgid "relocate using directory of lilypond program" msgstr "relocalizar utilizando el directorio del programa lilypond" -#: main.cc:221 +#. Do not update the copyright years here, run `make grand-replace' +#: main.cc:238 #, c-format msgid "" "Copyright (c) %s by\n" @@ -1811,460 +2326,238 @@ msgstr "" "%s y otros." #. No version number or newline here. It confuses help2man. -#: main.cc:249 +#: main.cc:265 #, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Uso: %s [OPCIÓN]... ARCHIVO..." -#: main.cc:251 -#, c-format +#: main.cc:267 msgid "Typeset music and/or produce MIDI from FILE." msgstr "Componer tipográficamente la música y/o producir MIDI a partir de ARCHIVO." -#: main.cc:253 -#, c-format +#: main.cc:269 msgid "LilyPond produces beautiful music notation." msgstr "LilyPond produce una notación musical bella y hermosa." -#: main.cc:255 +#: main.cc:271 #, c-format msgid "For more information, see %s" msgstr "Para ver más información, consulte %s" -#: main.cc:257 -#, c-format +#: main.cc:273 msgid "Options:" msgstr "Opciones:" -#: main.cc:311 +#: main.cc:327 #, c-format msgid "expected %d arguments with jail, found: %u" msgstr "se esperaban %d argumentos con la jaula, se han encontrado: %u" -#: main.cc:325 +#: main.cc:341 #, c-format msgid "no such user: %s" msgstr "no existe el usuario %s" -#: main.cc:327 +#: main.cc:343 #, c-format msgid "cannot get user id from user name: %s: %s" msgstr "no se puede obtener el identificador de usuario a partir del nombre: %s: %s" -#: main.cc:342 +#: main.cc:358 #, c-format msgid "no such group: %s" msgstr "no existe este grupo: %s" -#: main.cc:344 +#: main.cc:360 #, c-format msgid "cannot get group id from group name: %s: %s" msgstr "no se puede obtener el id de grupo a partir del nombre: %s: %s" -#: main.cc:352 +#: main.cc:368 #, c-format msgid "cannot chroot to: %s: %s" -msgstr "no se puede hacer chroot a: %s: %s" - -#: main.cc:359 -#, c-format -msgid "cannot change group id to: %d: %s" -msgstr "no se puede cambiar el grupo del usuario a %d: %s" - -#: main.cc:365 -#, c-format -msgid "cannot change user id to: %d: %s" -msgstr "no se puede cambiar el identificador de usuario a %d: %s" - -#: main.cc:371 -#, c-format -msgid "cannot change working directory to: %s: %s" -msgstr "no se puede cambiar el directorio de trabajo a: %s: %s" - -#: main.cc:611 -#, c-format -msgid "exception caught: %s" -msgstr "se ha capturado una excepción: %s" - -#. FIXME: constant error message. -#: mark-engraver.cc:129 -msgid "rehearsalMark must have integer value" -msgstr "rehearsalMark debe tener un valor entero" - -#: mark-engraver.cc:135 -msgid "mark label must be a markup object" -msgstr "la etiqueta de marcado debe ser un objeto de marcado" - -#: mensural-ligature-engraver.cc:85 -msgid "ligature with less than 2 heads -> skipping" -msgstr "ligadura con menos de dos cabezas; se salta" - -#: mensural-ligature-engraver.cc:112 -msgid "cannot determine pitch of ligature primitive -> skipping" -msgstr "no se puede determinar la altura de la primitiva de ligadura; se salta" - -#: mensural-ligature-engraver.cc:126 -msgid "single note ligature - skipping" -msgstr "ligadura de una nota; se salta" - -#: mensural-ligature-engraver.cc:138 -msgid "prime interval within ligature -> skipping" -msgstr "intervalo primo dentro de una ligadura; se salta" - -#: mensural-ligature-engraver.cc:150 -msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" -msgstr "ligadura mensural: la duración no es Mx, L, B ni S; se salta" - -#: mensural-ligature-engraver.cc:198 -msgid "semibrevis must be followed by another one -> skipping" -msgstr "la semibreve debe ir seguida por otra -> se salta" - -#: mensural-ligature-engraver.cc:209 -msgid "" -"semibreves can only appear at the beginning of a ligature,\n" -"and there may be only zero or two of them" -msgstr "" -"las semibreves sólo pueden aparecer al principio de una ligadura,\n" -"y sólo puede haber dos o ninguna" - -#: mensural-ligature-engraver.cc:236 -msgid "" -"invalid ligatura ending:\n" -"when the last note is a descending brevis,\n" -"the penultimate note must be another one,\n" -"or the ligatura must be LB or SSB" -msgstr "" -"finalización inválida de la ligadura:\n" -"cuando la última nota es una breve descendente,\n" -"la penúltima nota debe ser otra breve,\n" -"o la ligadura debe ser LB o SSB" - -#: mensural-ligature-engraver.cc:356 -msgid "unexpected case fall-through" -msgstr "opción de caso por defecto inesperada" - -#: mensural-ligature.cc:141 -msgid "Mensural_ligature: unexpected case fall-through" -msgstr "Mensural_ligature (ligadura mensural): caso por defecto inesperado" - -#: mensural-ligature.cc:192 -msgid "Mensural_ligature: (join_right == 0)" -msgstr "Mensural_ligature (ligadura mensural): (join_right == 0)" - -#: midi-item.cc:81 -#, c-format -msgid "no such MIDI instrument: `%s'" -msgstr "no existe este instrumento MIDI: «%s»" - -#: midi-stream.cc:28 -#, c-format -msgid "cannot open for write: %s: %s" -msgstr "no se puede abrir el archivo en modo de escritura: %s: %s" - -#: midi-stream.cc:44 -#, c-format -msgid "cannot write to file: `%s'" -msgstr "no se puede escribir el archivo: «%s»" - -#: minimal-page-breaking.cc:38 paper-score.cc:105 -msgid "Calculating line breaks..." -msgstr "Calculando los saltos de línea..." - -#: minimal-page-breaking.cc:42 layout-page-layout.scm:463 -msgid "Calculating page breaks..." -msgstr "Calculando saltos de página..." - -#: music-iterator.cc:171 -msgid "Sending non-event to context" -msgstr "Enviando elemento que no es un evento a un contexto" - -#: music.cc:140 -#, c-format -msgid "octave check failed; expected \"%s\", found: \"%s\"" -msgstr "fallo en la comprobación de octava; se esperaba \"%s\", se ha encontrado: \"%s\"" - -#: music.cc:203 -#, c-format -msgid "transposition by %s makes alteration larger than double" -msgstr "la transposición de %s transforma la alteración en más que doble" - -#: new-dynamic-engraver.cc:129 -#, c-format -msgid "" -"unknown crescendo style: %s\n" -"defaulting to hairpin." -msgstr "" -"estilo de crescendo desconocido: %s\n" -"se toma regulador como predeterminado." - -#: new-fingering-engraver.cc:96 -msgid "cannot add text scripts to individual note heads" -msgstr "no se pueden añadir guiones de texto a cabezas de nota individuales" - -#: new-fingering-engraver.cc:239 -msgid "no placement found for fingerings" -msgstr "no se ha encontrado ninguna ubicación válida para las digitaciones" - -#: new-fingering-engraver.cc:240 -msgid "placing below" -msgstr "se coloca debajo" - -#: note-collision.cc:484 -msgid "ignoring too many clashing note columns" -msgstr "demasiadas columnas de notas que chocan entre sí; se ignoran" - -#: note-column.cc:124 -msgid "cannot have note heads and rests together on a stem" -msgstr "no se pueden tener cabezas de nota y silencios en la misma plica" - -#: note-head.cc:63 -#, c-format -msgid "none of note heads `%s' or `%s' found" -msgstr "no se encuentran las cabezas de nota «%s» ni «%s»" - -#: note-heads-engraver.cc:64 -msgid "NoteEvent without pitch" -msgstr "NoteEvent sin altura" - -#: open-type-font.cc:33 -#, c-format -msgid "cannot allocate %lu bytes" -msgstr "no se peuden reservar %lu bytes" - -#: open-type-font.cc:37 -#, c-format -msgid "cannot load font table: %s" -msgstr "no se puede cargar la tabla de tipografías: %s" - -#: open-type-font.cc:42 -#, c-format -msgid "Free type error: %s" -msgstr "error de FreeType: %s" - -#: open-type-font.cc:100 -#, c-format -msgid "unsupported font format: %s" -msgstr "formato de tipografía %s no soportado" - -#: open-type-font.cc:102 -#, c-format -msgid "error reading font file %s: %s" -msgstr "error al leer la tipografía %s: %s" - -#: open-type-font.cc:177 -#, c-format -msgid "FT_Get_Glyph_Name () Freetype error: %s" -msgstr "error de Freetype en FT_Get_Glyph_Name (): %s" - -#: open-type-font.cc:302 pango-font.cc:167 -#, c-format -msgid "FT_Get_Glyph_Name () error: %s" -msgstr "error en FT_Get_Glyph_Name (): %s" - -#. find out the ideal number of pages -#: optimal-page-breaking.cc:56 -msgid "Finding the ideal number of pages..." -msgstr "Buscando el número de páginas ideal..." - -#: optimal-page-breaking.cc:78 -msgid "Fitting music on 1 page..." -msgstr "Disponiendo la música en una página..." - -#: optimal-page-breaking.cc:80 -#, c-format -msgid "Fitting music on %d pages..." -msgstr "Disponiendo la música en %d páginas..." - -#: optimal-page-breaking.cc:82 -#, c-format -msgid "Fitting music on %d or %d pages..." -msgstr "Disponiendo la música en %d o %d páginas..." - -#: optimal-page-breaking.cc:159 page-turn-page-breaking.cc:226 -#: paper-score.cc:146 -msgid "Drawing systems..." -msgstr "Dibujando los sistemas..." - -#: page-turn-page-breaking.cc:146 -#, c-format -msgid "page-turn-page-breaking: breaking from %d to %d" -msgstr "page-turn-page-breaking: saltando desde %d hasta %d" - -#: page-turn-page-breaking.cc:195 -msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." -msgstr "no se puede ajustar la primera vuelta de página en una página única. Considere la posibilidad de establecer first-page-number a un número par." - -#: page-turn-page-breaking.cc:208 -#, c-format -msgid "Calculating page and line breaks (%d possible page breaks)..." -msgstr "Calculando los saltos de página y de línea (%d saltos de página posibles)..." - -#: page-turn-page-breaking.cc:275 -#, c-format -msgid "break starting at page %d" -msgstr "el salto comienza en la página %d" - -#: page-turn-page-breaking.cc:276 -#, c-format -msgid "\tdemerits: %f" -msgstr "\tpuntuación: %f" - -#: page-turn-page-breaking.cc:277 -#, c-format -msgid "\tsystem count: %d" -msgstr "número total de \tsistemas: %d" +msgstr "no se puede hacer chroot a: %s: %s" -#: page-turn-page-breaking.cc:278 +#: main.cc:375 #, c-format -msgid "\tpage count: %d" -msgstr "número total de \tpáginas: %d" +msgid "cannot change group id to: %d: %s" +msgstr "no se puede cambiar el grupo del usuario a %d: %s" -#: page-turn-page-breaking.cc:279 +#: main.cc:381 #, c-format -msgid "\tprevious break: %d" -msgstr "\tsalto anterior: %d" +msgid "cannot change user id to: %d: %s" +msgstr "no se puede cambiar el identificador de usuario a %d: %s" -#: pango-font.cc:184 +#: main.cc:387 #, c-format -msgid "" -"Glyph has no name, but font supports glyph naming.\n" -"Skipping glyph U+%0X, file %s" -msgstr "" -"El glifo no tiene nombre, pero la tipografía soporta nombres de glifo.\n" -"Se salta el glifo U+%0X, archivo %s" +msgid "cannot change working directory to: %s: %s" +msgstr "no se puede cambiar el directorio de trabajo a: %s: %s" -#: pango-font.cc:229 +#: main.cc:628 #, c-format -msgid "no PostScript font name for font `%s'" -msgstr "no hay un nombre de tipografía PostScript para «%s»" +msgid "exception caught: %s" +msgstr "se ha capturado una excepción: %s" -#: pango-font.cc:277 -msgid "FreeType face has no PostScript font name" -msgstr "El tipo FreeType no tiene un nombre de tipografía PostScript" +#: key-signature-interface.cc:78 +#, c-format +msgid "No glyph found for alteration: %s" +msgstr "No se ha encontrado ningún glifo para la alteración: %s" -#: paper-column-engraver.cc:221 -msgid "forced break was overridden by some other event, should you be using bar checks?" -msgstr "el salto forzado ha sido sobreestablecido por algún otro evento, ¿quizá deba usar comprobaciones de compás?" +#: key-signature-interface.cc:88 +msgid "alteration not found" +msgstr "no se encuentra la alteración" -#: paper-outputter-scheme.cc:30 +#: dots.cc:48 #, c-format -msgid "Layout output to `%s'..." -msgstr "Salida de la página hacia «%s»..." +msgid "dot `%s' not found" +msgstr "no se encuentra el puntillo «%s»" -#: paper-score.cc:118 +#: translator.cc:359 #, c-format -msgid "Element count %d (spanners %d) " -msgstr "Cantidad de elementos: %d (trazadores: %d)" +msgid "Two simultaneous %s events, junking this one" +msgstr "Dos eventos %s simultáneos, se recorta éste" -#: paper-score.cc:122 -msgid "Preprocessing graphical objects..." -msgstr "Preprocesando los objetos gráficos..." +#: translator.cc:360 +#, c-format +msgid "Previous %s event here" +msgstr "El evento %s previo está aquí" -#: parse-scm.cc:93 -msgid "GUILE signaled an error for the expression beginning here" -msgstr "GUILE ha señalado un error para la expresión que comienza aquí" +#: glissando-engraver.cc:105 +msgid "unterminated glissando" +msgstr "glissando sin terminar" -#: percent-repeat-engraver.cc:202 -msgid "unterminated percent repeat" -msgstr "repetición de porcentaje sin terminar" +#: text-spanner-engraver.cc:73 +msgid "cannot find start of text spanner" +msgstr "no se encuentra el principio del trazador de texto" -#: performance.cc:43 -msgid "Track..." -msgstr "Pista..." +#: text-spanner-engraver.cc:86 +msgid "already have a text spanner" +msgstr "ya hay un trazador de texto" -#: performance.cc:72 -msgid "MIDI channel wrapped around" -msgstr "ha dado la vuelta el número de canal MIDI" +#: text-spanner-engraver.cc:132 +msgid "unterminated text spanner" +msgstr "trazador de texto sin terminar" -#: performance.cc:73 -msgid "remapping modulo 16" -msgstr "se reasigna módulo 16" +#: clef.cc:65 +#, c-format +msgid "clef `%s' not found" +msgstr "no se ha encontrado la clave «%s»" -#: performance.cc:100 +#. +#. Todo: should make typecheck? +#. +#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. +#. +#: time-signature-engraver.cc:75 #, c-format -msgid "MIDI output to `%s'..." -msgstr "Salida MIDI hacia «%s»..." +msgid "strange time signature found: %d/%d" +msgstr "se ha encontrado una indicación extraña de compás: %d/%d" -#: phrasing-slur-engraver.cc:146 -msgid "unterminated phrasing slur" -msgstr "ligadura de fraseo sin terminar" +#: lily-parser-scheme.cc:82 +#, c-format +msgid "Changing working directory to: `%s'" +msgstr "Se cambia el directorio de trabajo a: «%s»" -#: piano-pedal-engraver.cc:287 +#: lily-parser-scheme.cc:99 #, c-format -msgid "expect 3 strings for piano pedals, found: %ld" -msgstr "se eseperaban 3 cadenas para los pedales de piano, se han encontrado: %ld" +msgid "cannot find init file: `%s'" +msgstr "no se encuentra el archivo de inicio: «%s»" -#: piano-pedal-engraver.cc:302 piano-pedal-engraver.cc:313 -#: piano-pedal-performer.cc:93 +#: lily-parser-scheme.cc:118 #, c-format -msgid "cannot find start of piano pedal: `%s'" -msgstr "no se encuentra el comienzo del pedal de piano «%s»" +msgid "Processing `%s'" +msgstr "Procesando «%s»" -#: piano-pedal-engraver.cc:348 +#: lily-parser-scheme.cc:204 +msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead." +msgstr "ly:parser-parse-string sólo es válido con un analizador nuevo. Use en su lugar ly:parser-include-string." + +#: custos.cc:88 #, c-format -msgid "cannot find start of piano pedal bracket: `%s'" -msgstr "no se encuentra el comienzo del corchete de pedal de piano «%s»" +msgid "custos `%s' not found" +msgstr "no se encuentran los custos «%s»" -#: program-option-scheme.cc:215 +#: program-option-scheme.cc:237 #, c-format msgid "no such internal option: %s" msgstr "no existe la opción interna %s" -#: property-iterator.cc:74 +#: rest-collision.cc:146 +msgid "cannot resolve rest collision: rest direction not set" +msgstr "no se puede resolver la colisión de los silencios: la dirección de los silencios no se ha establecido" + +#: rest-collision.cc:160 rest-collision.cc:205 +msgid "too many colliding rests" +msgstr "demasiados silencios en colisión" + +#: episema-engraver.cc:75 +msgid "already have an episema" +msgstr "ya tiene un episema" + +#: episema-engraver.cc:88 +msgid "cannot find start of episema" +msgstr "no se encuentra el comienzo del episema" + +#: episema-engraver.cc:137 +msgid "unterminated episema" +msgstr "episema sin terminar" + +#: grob-property.cc:34 #, c-format -msgid "not a grob name, `%s'" -msgstr "no es un nombre de objeto gráfico: «%s»" +msgid "%d: %s" +msgstr "%d: %s" -#: relative-octave-check.cc:38 -msgid "Failed octave check, got: " -msgstr "La comprobación de octaba ha fallado, se ha obtenido: " +#: grob-property.cc:173 +#, c-format +msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" +msgstr "dependencia cíclica: se ha encontrado calculation-in-progress para #'%s (%s)" -#: relocate.cc:44 +#: relocate.cc:54 #, c-format msgid "Setting %s to %s" msgstr "Se establece %s a %s" -#: relocate.cc:64 +#: relocate.cc:74 #, c-format msgid "no such file: %s for %s" msgstr "no existe el archivo: %s para %s" -#: relocate.cc:74 relocate.cc:92 +#: relocate.cc:84 relocate.cc:102 #, c-format msgid "no such directory: %s for %s" msgstr "no existe este directorio: %s para %s" -#: relocate.cc:84 +#: relocate.cc:94 #, c-format msgid "%s=%s (prepend)\n" msgstr "%s=%s (prefijar)\n" -#: relocate.cc:114 +#: relocate.cc:124 #, c-format msgid "not relocating, no %s/ or current/ found under %s" msgstr "no se relocaliza, no se ha encontrado %s/ ni current/ bajo %s" -#: relocate.cc:125 +#: relocate.cc:135 #, c-format msgid "Relocation: compile datadir=%s, new datadir=%s" msgstr "Relocalización: en la compilación datadir=%s, el nuevo datadir=%s" -#: relocate.cc:138 +#: relocate.cc:148 #, c-format msgid "Relocation: framework_prefix=%s" msgstr "Relocalización: framework_prefix=%s" -#: relocate.cc:179 +#: relocate.cc:189 #, c-format msgid "Relocation: is absolute: argv0=%s" msgstr "Relocalización: es absoluto: argv0=%s" -#: relocate.cc:186 +#: relocate.cc:196 #, c-format msgid "Relocation: from cwd: argv0=%s" msgstr "Relocalización: desde cwd: argv0=%s" -#: relocate.cc:195 +#: relocate.cc:213 #, c-format msgid "" "Relocation: from PATH=%s\n" @@ -2273,512 +2566,838 @@ msgstr "" "Relocalización: desde PATH=%s\n" "argv0=%s" -#: relocate.cc:229 +#: relocate.cc:240 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" msgstr "LILYPONDPREFIX está obsoleto, utilice LILYPOND_DATADIR" -#: relocate.cc:356 +#: relocate.cc:367 #, c-format msgid "Relocation file: %s" msgstr "Archivo de relocalización: %s" -#: relocate.cc:392 +#: relocate.cc:373 source-file.cc:65 +#, c-format +msgid "cannot open file: `%s'" +msgstr "no se puede abrir el archivo: «%s»" + +#: relocate.cc:403 #, c-format msgid "Unknown relocation command %s" msgstr "instrucción de relocalización %s desconocida" -#: rest-collision.cc:145 -msgid "cannot resolve rest collision: rest direction not set" -msgstr "no se puede resolver la colisión de los silencios: la dirección de los silencios no se ha establecido" +#: translator-group.cc:188 +#, c-format +msgid "cannot find: `%s'" +msgstr "no se encuentra «%s»" -#: rest-collision.cc:159 rest-collision.cc:204 -msgid "too many colliding rests" -msgstr "demasiados silencios en colisión" +#: phrasing-slur-engraver.cc:157 +msgid "unterminated phrasing slur" +msgstr "ligadura de fraseo sin terminar" + +#: lyric-engraver.cc:176 +msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." +msgstr "La sílaba de la letra no tiene nota. Utilice \\lyricsto o associatedVoice." + +#: page-breaking.cc:248 +msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set" +msgstr "se ignoran min-systems-per-page y max-systems-per-page debido a que se fijó systems-per-page" -#: rest.cc:148 +#: page-breaking.cc:253 +msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values" +msgstr "min-systems-per-page es mayor que max-systems-per-page, se ignoran los dos valores" + +#: performance.cc:54 +msgid "Track..." +msgstr "Pista..." + +#: performance.cc:83 +msgid "MIDI channel wrapped around" +msgstr "ha dado la vuelta el número de canal MIDI" + +#: performance.cc:84 +msgid "remapping modulo 16" +msgstr "se reasigna módulo 16" + +#: performance.cc:111 #, c-format -msgid "rest `%s' not found" -msgstr "no se ha encontrado el silencio «%s»" +msgid "MIDI output to `%s'..." +msgstr "Salida MIDI hacia «%s»..." + +#: tuplet-engraver.cc:107 +msgid "No tuplet to end" +msgstr "no hay ningún grupo especial que terminar" -#: score-engraver.cc:67 +#: gregorian-ligature-engraver.cc:70 #, c-format -msgid "cannot find `%s'" -msgstr "No se encuentra «%s»" +msgid "\\%s ignored" +msgstr "\\%s ignorado(s)" -#: score-engraver.cc:69 -msgid "Music font has not been installed properly." -msgstr "La tipografía de música no se ha instalado correctamente." +#: gregorian-ligature-engraver.cc:75 +#, c-format +msgid "implied \\%s added" +msgstr "se ha añadido el \\%s implícito" + +#. ligature may not start with 2nd head of pes or flexa +#: gregorian-ligature-engraver.cc:224 +msgid "cannot apply `\\~' on first head of ligature" +msgstr "no se puede aplicar `\\~' sobre la primera cabeza de una ligadura" + +#. (pitch == prev_pitch) +#: gregorian-ligature-engraver.cc:236 +msgid "cannot apply `\\~' on heads with identical pitch" +msgstr "no se puede aplicar `\\~' sobre cabezas de idéntica altura" + +#: chord-tremolo-engraver.cc:88 +msgid "No tremolo to end" +msgstr "No hay ningún tremolo hasta el final" + +#: chord-tremolo-engraver.cc:109 +msgid "unterminated chord tremolo" +msgstr "trémolo de acorde sin terminar" + +#: axis-group-engraver.cc:94 +msgid "Axis_group_engraver: vertical group already has a parent" +msgstr "Axis_group_engraver: el grupo vertical ya tiene un ancestro" + +#: axis-group-engraver.cc:95 +msgid "are there two Axis_group_engravers?" +msgstr "¿hay dos Axis_group_engravers?" + +#: axis-group-engraver.cc:96 +msgid "removing this vertical group" +msgstr "se suprime este grupo vertical" -#: score-engraver.cc:71 +#: cluster.cc:120 #, c-format -msgid "Search path `%s'" -msgstr "Ruta de búsqueda «%s»" +msgid "unknown cluster style `%s'" +msgstr "estilo de cluster (racimo) «%s» desconocido" -#: score-engraver.cc:73 -msgid "Aborting" -msgstr "Se detiene la ejecución" +#: cluster.cc:157 +msgid "junking empty cluster" +msgstr "se recorta el racimo (cluster) vacío" -#: score.cc:167 -msgid "already have music in score" -msgstr "ya tiene música en la partitura" +#: context-property.cc:42 +msgid "need symbol arguments for \\override and \\revert" +msgstr "se necesitan argumentos de símbolo para \\override y \\revert" -#: score.cc:168 -msgid "this is the previous music" -msgstr "esta es la música precedente" +#: source-file.cc:85 +#, c-format +msgid "expected to read %d characters, got %d" +msgstr "se esperaba leer %d caracteres, se han obtenido %d" -#: score.cc:173 -msgid "errors found, ignoring music expression" -msgstr "se han encontrado errores, se ignora la expresión musical" +#: axis-group-interface.cc:631 +msgid "an outside-staff object should have a direction, defaulting to up" +msgstr "un objeto externo a la pauta debe tener una dirección, por omisión se establece hacia arriba" + +#: coherent-ligature-engraver.cc:111 +#, c-format +msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" +msgstr "Coherent_ligature_engraver: se establece `spacing-increment=0.01': ptr=%ul" + +#: percent-repeat-engraver.cc:148 +msgid "unterminated percent repeat" +msgstr "repetición de porcentaje sin terminar" + +#: note-head.cc:76 +#, c-format +msgid "none of note heads `%s' or `%s' found" +msgstr "no se encuentran las cabezas de nota «%s» ni «%s»" + +#: relative-octave-check.cc:49 +msgid "Failed octave check, got: " +msgstr "La comprobación de octaba ha fallado, se ha obtenido: " #. FIXME: -#: script-engraver.cc:102 -msgid "do not know how to interpret articulation: " -msgstr "no sabemos cómo interpretar la articulación: " +#: script-engraver.cc:113 +msgid "do not know how to interpret articulation:" +msgstr "no sabemos cómo interpretar la articulación:" -#: script-engraver.cc:103 -msgid "scheme encoding: " -msgstr "codificación de Scheme: " +#: script-engraver.cc:114 +msgid " scheme encoding: " +msgstr " codificación de Scheme: " -#: slur-engraver.cc:82 +#: all-font-metrics.cc:156 #, c-format -msgid "direction of %s invalid: %d" -msgstr "dirección inválida de %s: %d" +msgid "cannot find font: `%s'" +msgstr "no se encuentra la tipografía «%s»" -#: slur-engraver.cc:151 -msgid "unterminated slur" -msgstr "ligadura de expresión sin terminar" +#: property-iterator.cc:85 +#, c-format +msgid "not a grob name, `%s'" +msgstr "no es un nombre de objeto gráfico: «%s»" -#: slur-engraver.cc:163 -msgid "cannot end slur" -msgstr "no se puede terminar la ligadura de expresión" +#: bar-check-iterator.cc:84 +#, c-format +msgid "barcheck failed at: %s" +msgstr "la comprobación de compás ha fallado en: %s" + +#: stem.cc:116 +msgid "weird stem size, check for narrow beams" +msgstr "tamaño de plica extraño, compruebe que no haya barras estrechas" -#: slur.cc:359 +#: stem.cc:657 #, c-format -msgid "Ignoring grob for slur: %s. avoid-slur not set?" -msgstr "Se ignora el objeto gráfico para la ligadura: %s. ¿No está establecido avoid-slur?" +msgid "flag `%s' not found" +msgstr "no se encuentra el indicador «%s»" -#: source-file.cc:79 +#: stem.cc:673 #, c-format -msgid "expected to read %d characters, got %d" -msgstr "se esperaba leer %d caracteres, se han obtenido %d" +msgid "flag stroke `%s' not found" +msgstr "no se encuentra la forma del glifo del corchete «%s»" + +#: global-context-scheme.cc:96 global-context-scheme.cc:114 +msgid "no music found in score" +msgstr "no se ha encontrado música en la partitura" -#: spaceable-grob.cc:83 +#: global-context-scheme.cc:104 +msgid "Interpreting music... " +msgstr "Interpretando la música... " + +#: global-context-scheme.cc:127 #, c-format -msgid "No spring between column %d and next one" -msgstr "No hay separación entre la columna %d y la siguiente" +msgid "elapsed time: %.2f seconds" +msgstr "tiempo transcurrido: %.2f segundos" + +#: translator-group-ctors.cc:40 +#, c-format +msgid "fatal error. Couldn't find type: %s" +msgstr "error fatal. No se ha encontrado el tipo: %s" + +#: mensural-ligature.cc:171 +msgid "Mensural_ligature: unexpected case fall-through" +msgstr "Mensural_ligature (ligadura mensural): caso por defecto inesperado" + +#: mensural-ligature.cc:233 +msgid "Mensural_ligature: (join_right == 0)" +msgstr "Mensural_ligature (ligadura mensural): (join_right == 0)" -#: staff-symbol-engraver.cc:62 -msgid "staff-span event has no direction" -msgstr "el evento staff-span no tiene dirección" +#: page-turn-page-breaking.cc:168 +#, c-format +msgid "page-turn-page-breaking: breaking from %d to %d" +msgstr "page-turn-page-breaking: saltando desde %d hasta %d" -#: stem-engraver.cc:92 -msgid "tremolo duration is too long" -msgstr "la duración del trémolo es demasiado larga" +#: page-turn-page-breaking.cc:217 +msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." +msgstr "no se puede ajustar la primera vuelta de página en una página única. Considere la posibilidad de establecer first-page-number a un número par." -#. FIXME: -#: stem-engraver.cc:129 +#: page-turn-page-breaking.cc:230 #, c-format -msgid "adding note head to incompatible stem (type = %d)" -msgstr "añadiendo cabeza de nota a una plica incompatible (tipo = %d)" - -#: stem-engraver.cc:131 -msgid "maybe input should specify polyphonic voices" -msgstr "quizá la entrada debiera especificar voces polifónicas" +msgid "Calculating page and line breaks (%d possible page breaks)..." +msgstr "Calculando los saltos de página y de línea (%d saltos de página posibles)..." -#: stem.cc:105 -msgid "weird stem size, check for narrow beams" -msgstr "tamaño de plica extraño, compruebe que no haya barras estrechas" +#: page-turn-page-breaking.cc:300 +#, c-format +msgid "break starting at page %d" +msgstr "el salto comienza en la página %d" -#: stem.cc:623 +#: page-turn-page-breaking.cc:301 #, c-format -msgid "flag `%s' not found" -msgstr "no se encuentra el indicador «%s»" +msgid "\tdemerits: %f" +msgstr "\tpuntuación: %f" -#: stem.cc:639 +#: page-turn-page-breaking.cc:302 #, c-format -msgid "flag stroke `%s' not found" -msgstr "no se encuentra el impacto «%s» de indicador" +msgid "\tsystem count: %d" +msgstr "número total de \tsistemas: %d" -#: system.cc:178 +#: page-turn-page-breaking.cc:303 #, c-format -msgid "Element count %d." -msgstr "Número total de elementos %d." +msgid "\tpage count: %d" +msgstr "número total de \tpáginas: %d" -#: system.cc:270 +#: page-turn-page-breaking.cc:304 #, c-format -msgid "Grob count %d" -msgstr "Número de objetos gráficos: %d" +msgid "\tprevious break: %d" +msgstr "\tsalto anterior: %d" -#: text-spanner-engraver.cc:62 -msgid "cannot find start of text spanner" -msgstr "no se encuentra el principio del trazador de texto" +#: lily-parser.cc:106 +msgid "Parsing..." +msgstr "Analizando..." -#: text-spanner-engraver.cc:75 -msgid "already have a text spanner" -msgstr "ya hay un trazador de texto" +#: lily-parser.cc:134 +msgid "braces do not match" +msgstr "las llaves no concuerdan" -#: text-spanner-engraver.cc:121 -msgid "unterminated text spanner" -msgstr "trazador de texto sin terminar" +#: score.cc:178 +msgid "already have music in score" +msgstr "ya tiene música en la partitura" -#: tie-engraver.cc:262 -msgid "lonely tie" -msgstr "ligadura de unión solitaria" +#: score.cc:179 +msgid "this is the previous music" +msgstr "esta es la música precedente" +#: score.cc:184 +msgid "errors found, ignoring music expression" +msgstr "se han encontrado errores, se ignora la expresión musical" + +#: change-iterator.cc:34 +#, c-format +msgid "cannot change `%s' to `%s'" +msgstr "no se puede cambiar de «%s» a «%s»" + +#. FIXME: constant error message. +#: change-iterator.cc:93 +msgid "cannot find context to switch to" +msgstr "no se encuentra el contexto al que cambiar" + +#. We could change the current translator's id, but that would make +#. errors hard to catch. #. -#. Todo: should make typecheck? -#. -#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. -#. -#: time-signature-engraver.cc:64 +#. last->translator_id_string () = get_change +#. ()->change_to_id_string (); +#: change-iterator.cc:102 #, c-format -msgid "strange time signature found: %d/%d" -msgstr "se ha encontrado una indicación extraña de compás: %d/%d" +msgid "not changing to same context type: %s" +msgstr "no se cambia al mismo tipo de contexto: %s" + +#. FIXME: uncomprehensable message +#: change-iterator.cc:106 +msgid "none of these in my family" +msgstr "no hay ninguno de estos en mi familia" #. If there is no such symbol, we default to the numbered style. #. (Here really with a warning!) -#: time-signature.cc:83 +#: time-signature.cc:94 #, c-format msgid "time signature symbol `%s' not found; reverting to numbered style" msgstr "no se encuentra el símbolo de compás «%s»; se vuelve al estilo numerado" -#: translator-ctors.cc:53 +#: grob-interface.cc:68 #, c-format -msgid "unknown translator: `%s'" -msgstr "traductor desconocido: «%s»" +msgid "Unknown interface `%s'" +msgstr "interfaz desconocido «%s»" -#: translator-group-ctors.cc:29 +#: grob-interface.cc:79 #, c-format -msgid "fatal error. Couldn't find type: %s" -msgstr "error fatal. No se ha encontrado el tipo: %s" +msgid "Grob `%s' has no interface for property `%s'" +msgstr "El grob «%s» no tiene interfaz para la propiedad «%s»" -#: translator-group.cc:146 +#: open-type-font.cc:44 #, c-format -msgid "cannot find: `%s'" -msgstr "no se encuentra «%s»" +msgid "cannot allocate %lu bytes" +msgstr "no se peuden reservar %lu bytes" -#: translator.cc:347 +#: open-type-font.cc:48 #, c-format -msgid "Two simultaneous %s events, junking this one" -msgstr "Dos eventos %s simultáneos, se recorta éste" +msgid "cannot load font table: %s" +msgstr "no se puede cargar la tabla de tipografías: %s" -#: translator.cc:348 +#: open-type-font.cc:53 #, c-format -msgid "Previous %s event here" -msgstr "El evento %s previo está aquí" - -#: trill-spanner-engraver.cc:85 -msgid "cannot find start of trill spanner" -msgstr "no se encuentra el principio del trazador de trino" - -#: trill-spanner-engraver.cc:98 -msgid "already have a trill spanner" -msgstr "ya tiene un trazador de trino" - -#: tuplet-engraver.cc:96 -msgid "No tuplet to end" -msgstr "no hay ningún grupo especial que terminar" +msgid "FreeType error: %s" +msgstr "error de FreeType: %s" -#: vaticana-ligature-engraver.cc:389 +#: open-type-font.cc:111 #, c-format -msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style" -msgstr "prefijo(s) «%s» de esta cabeza ignorado(s) de acuerdo con las restricciones del estilo de ligadura seleccionado" +msgid "unsupported font format: %s" +msgstr "formato de tipografía %s no soportado" -#: vaticana-ligature-engraver.cc:718 +#: open-type-font.cc:113 #, c-format -msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" -msgstr "Vaticana_ligature_engraver: se establece `spacing-increment = %f': ptr =%ul" - -#: vaticana-ligature.cc:84 -msgid "flexa-height undefined; assuming 0" -msgstr "la altura flexa-height no está definida; se supone que es 0" - -#: vaticana-ligature.cc:89 -msgid "ascending vaticana style flexa" -msgstr "flexa ascendente de estilo vaticana" - -#: vaticana-ligature.cc:177 -msgid "Vaticana_ligature: zero join (delta_pitch == 0)" -msgstr "Vaticana_ligature: unión nula (delta_pitch == 0)" - -#. fixme: be more verbose. -#: volta-engraver.cc:100 -msgid "cannot end volta spanner" -msgstr "no se puede terminar el trazador de volta" +msgid "error reading font file %s: %s" +msgstr "error al leer la tipografía %s: %s" -#: volta-engraver.cc:110 -msgid "already have a volta spanner, ending that one prematurely" -msgstr "ya hay un trazador de volta, se acaba éste de forma prematura" +#: open-type-font.cc:188 +#, c-format +msgid "FT_Get_Glyph_Name () Freetype error: %s" +msgstr "error de Freetype en FT_Get_Glyph_Name (): %s" -# also...? -#: volta-engraver.cc:114 -msgid "also already have an ended spanner" -msgstr "ya hay un trazador finalizado" +#: midi-stream.cc:39 +#, c-format +msgid "cannot open for write: %s: %s" +msgstr "no se puede abrir el archivo en modo de escritura: %s: %s" -#: volta-engraver.cc:115 -msgid "giving up" -msgstr "abandonando" +#: midi-stream.cc:55 +#, c-format +msgid "cannot write to file: `%s'" +msgstr "no se puede escribir el archivo: «%s»" -#: parser.yy:804 +#: parser.yy:820 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "no se puede usar \\paper dentro de \\score, utilice \\layout en su lugar" -#: parser.yy:828 +#: parser.yy:844 msgid "need \\paper for paper block" msgstr "es necesario \\paper para el bloque 'paper'" -#: parser.yy:1299 +#: parser.yy:1363 +msgid "only \\consists takes non-string argument." +msgstr "solo \\consists admite un argumento no de cadena." + +#: parser.yy:1376 msgid "Grob name should be alphanumeric" msgstr "El nombre del objeto gráfico ha de ser alfanumérico" -#: parser.yy:1597 +#: parser.yy:1685 msgid "second argument must be pitch list" msgstr "el segundo argumento debe ser una lista de notas" -#: parser.yy:1624 parser.yy:1629 parser.yy:2101 +#: parser.yy:1716 parser.yy:1721 parser.yy:2194 msgid "have to be in Lyric mode for lyrics" msgstr "para la letra se debe estar en el modo Lyric" -#: parser.yy:1726 +#: parser.yy:1818 msgid "expecting string as script definition" msgstr "se espera una cadena como definición del guión" -#: parser.yy:1881 parser.yy:1931 +#: parser.yy:1973 parser.yy:2024 #, c-format msgid "not a duration: %d" msgstr "no es una duración: %d" -#: parser.yy:2055 +#: parser.yy:2148 msgid "have to be in Note mode for notes" msgstr "para las notas se debe estar en el modo Note" -#: parser.yy:2116 +#: parser.yy:2209 msgid "have to be in Chord mode for chords" msgstr "para los acordes se debe estar en el modo Chord" # stray? -#: lexer.ll:179 +#: lexer.ll:190 msgid "stray UTF-8 BOM encountered" msgstr "se ha encontrado una marca BOM de UTF-8 extraña" -#: lexer.ll:183 +#: lexer.ll:194 msgid "Skipping UTF-8 BOM" msgstr "Se salta el BOM de UTF-8" -#: lexer.ll:238 +#: lexer.ll:249 #, c-format msgid "Renaming input to: `%s'" msgstr "Renombrando la entrada a: «%s»" -#: lexer.ll:255 -msgid "quoted string expected after \\version" -msgstr "se esperaba una cadena entre comillas después de \\version" +#: lexer.ll:266 +msgid "quoted string expected after \\version" +msgstr "se esperaba una cadena entre comillas después de \\version" + +#: lexer.ll:270 +msgid "quoted string expected after \\sourcefilename" +msgstr "se esperaba una cadena entre comillas después de \\sourcefilename" + +#: lexer.ll:274 +msgid "integer expected after \\sourcefileline" +msgstr "se esperaba un entero después de \\sourcefileline" + +#: lexer.ll:287 +msgid "EOF found inside a comment" +msgstr "se ha encontrado EOF (fin de archivo) dentro de un comentario" + +#: lexer.ll:302 +msgid "\\maininput not allowed outside init files" +msgstr "no se permite \\maininput fuera de los archivos de inicio" + +#: lexer.ll:326 +#, c-format +msgid "wrong or undefined identifier: `%s'" +msgstr "identificativo equivocado o no definido: «%s»" + +#. backup rule +#: lexer.ll:335 +msgid "end quote missing" +msgstr "faltan las comillas de cierre" + +#: lexer.ll:485 +msgid "Brace found at end of lyric. Did you forget a space?" +msgstr "Se ha encontrado una llave al final de la letra. ¿Olvidó un espacio?" + +#: lexer.ll:595 +msgid "Brace found at end of markup. Did you forget a space?" +msgstr "Se ha encontrado una llave al final del marcado, ¿Olvidó un espacio?" + +#: lexer.ll:699 +#, c-format +msgid "invalid character: `%c'" +msgstr "carácter no válido: «%c»" + +#: lexer.ll:814 lexer.ll:815 +#, c-format +msgid "unknown escaped string: `\\%s'" +msgstr "cadena de escape desconocida: `\\%s'" + +#: lexer.ll:924 lexer.ll:925 +#, c-format +msgid "file too old: %s (oldest supported: %s)" +msgstr "archivo demasiado antiguo: %s (el más antiguo que se puede tratar es: %s)" + +#: lexer.ll:925 lexer.ll:926 +msgid "consider updating the input with the convert-ly script" +msgstr "considere la actualización de la entrada mediante el guión (script) convert-ly" + +#: lexer.ll:931 lexer.ll:932 +#, c-format +msgid "program too old: %s (file requires: %s)" +msgstr "el programa es demasiado antiguo: %s (el archivo necesita: %s)" + +#: documentation-lib.scm:59 +#, scheme-format +msgid "Processing ~S..." +msgstr "Procesando ~S..." + +#: documentation-lib.scm:176 +#, scheme-format +msgid "Writing ~S..." +msgstr "Escribiendo ~S..." + +#: documentation-lib.scm:198 +#, scheme-format +msgid "cannot find description for property ~S (~S)" +msgstr "no se encuentra la descripción de la propiedad ~S (~S)" + +#: parser-clef.scm:141 parser-clef.scm:181 +#, scheme-format +msgid "unknown clef type `~a'" +msgstr "tipo de clave desconocido: «~a» " + +#: parser-clef.scm:142 parser-clef.scm:182 +#, scheme-format +msgid "supported clefs: ~a" +msgstr "claves soportadas: ~a" + +#: document-backend.scm:132 +#, scheme-format +msgid "pair expected in doc ~s" +msgstr "se esperaba una pareja en el documento ~s" + +#: document-backend.scm:189 +#, scheme-format +msgid "cannot find interface for property: ~S" +msgstr "no se encuentra un interface para la propiedad ~S" + +#: document-backend.scm:199 +#, scheme-format +msgid "unknown Grob interface: ~S" +msgstr "interfaz de Objeto gráfico desconocido: ~S" + +#: framework-eps.scm:108 +#, scheme-format +msgid "Writing ~a..." +msgstr "Escribiendo «~a»..." + +#: define-music-properties.scm:21 define-grob-properties.scm:21 +#: define-context-properties.scm:31 +#, scheme-format +msgid "symbol ~S redefined" +msgstr "redefinido el símbolo ~S" + +#: paper.scm:115 +msgid "set-global-staff-size: not in toplevel scope" +msgstr "set-global-staff-size: no está en el ámbito de nivel más alto" + +#: paper.scm:296 +#, scheme-format +msgid "This is not a \\layout {} object, ~S" +msgstr "Esto no es un objeto de \\layout {} , ~S" + +#: paper.scm:308 +#, scheme-format +msgid "Unknown paper size: ~a" +msgstr "Tamaño de papel desconocido: ~a" + +#. TODO: should raise (generic) exception with throw, and catch +#. that in parse-scm.cc +#: paper.scm:323 +msgid "Must use #(set-paper-size .. ) within \\paper { ... }" +msgstr "Debe usar #(set-paper-size .. ) dentro de \\paper { ... }" + +#: lily.scm:225 +msgid "Using (ice-9 curried-definitions) module\n" +msgstr "Utilizando el módulo (ice-9 curried-definitions)\n" + +#: lily.scm:230 +msgid "Guile 1.8\n" +msgstr "Guile 1.8\n" + +#: lily.scm:290 +#, scheme-format +msgid "cannot find: ~A" +msgstr "no se encuentra: ~A" + +#: lily.scm:350 +#, scheme-format +msgid "wrong type for argument ~a. Expecting ~a, found ~s" +msgstr "tipo equivocado para el argumento ~a. Se esperaba ~a, se encontró ~s" + +#: lily.scm:716 +msgid "Compilation successfully completed" +msgstr "Compiación completada satisfactoriamente" + +#: lily.scm:717 +msgid "Compilation completed with warnings or errors" +msgstr "Compilación completada con advertencias o errores" + +#: lily.scm:779 +#, scheme-format +msgid "job ~a terminated with signal: ~a" +msgstr "la tarea ~a ha terminado con la señal: ~a" + +#: lily.scm:782 +#, scheme-format +msgid "" +"logfile ~a (exit ~a):\n" +"~a" +msgstr "" +"archivo de registro ~a (salida ~a):\n" +"~a" -#: lexer.ll:259 -msgid "quoted string expected after \\sourcefilename" -msgstr "se esperaba una cadena entre comillas después de \\sourcefilename" +#: lily.scm:804 lily.scm:882 +#, scheme-format +msgid "failed files: ~S" +msgstr "archivos que han fallado: ~S" -#: lexer.ll:263 -msgid "integer expected after \\sourcefileline" -msgstr "se esperaba un entero después de \\sourcefileline" +#: lily.scm:873 +#, scheme-format +msgid "Redirecting output to ~a..." +msgstr "Redirigiendo la salida hacia ~a..." -#: lexer.ll:276 -msgid "EOF found inside a comment" -msgstr "se ha encontrado EOF (fin de archivo) dentro de un comentario" +#: lily.scm:892 +#, scheme-format +msgid "Invoking `~a'...\n" +msgstr "Invocando «~a»...\n" -#: lexer.ll:291 -msgid "\\maininput not allowed outside init files" -msgstr "no se permite \\maininput fuera de los archivos de inicio" +#: graphviz.scm:64 +#, scheme-format +msgid "Writing graph `~a'..." +msgstr "Escribiendo el gráfico «~a»..." -#: lexer.ll:315 -#, c-format -msgid "wrong or undefined identifier: `%s'" -msgstr "identificativo equivocado o no definido: «%s»" +#: framework-svg.scm:84 +#, scheme-format +msgid "Updating font into: ~a" +msgstr "Actualizando la fuente tipográfica en: ~a" -#. backup rule -#: lexer.ll:324 -msgid "end quote missing" -msgstr "faltan las comillas de cierre" +#: layout-beam.scm:40 +#, scheme-format +msgid "Error in beam quanting. Expected (~S,~S) found ~S." +msgstr "Error en la cuantización de la barra. Se esperaba (~S,~S), se ha encontrado ~S." -#: lexer.ll:469 -msgid "Brace found at end of lyric. Did you forget a space?" -msgstr "Se ha encontrado una llave al final de la letra. ¿Olvidó un espacio?" +#: layout-beam.scm:54 +#, scheme-format +msgid "Error in beam quanting. Expected ~S 0, found ~S." +msgstr "Error en la cuantización de la barra. Se esperaba ~S 0, se ha encontrado ~S." -#: lexer.ll:584 -msgid "Brace found at end of markup. Did you forget a space?" -msgstr "Se ha encontrado una llave al final del marcado, ¿Olvidó un espacio?" +#: modal-transforms.scm:38 +msgid "'from' pitch not in scale; ignoring" +msgstr "la nota 'origen' no está en la escala; se ignora" -#: lexer.ll:688 -#, c-format -msgid "invalid character: `%c'" -msgstr "carácter no válido: «%c»" +#: modal-transforms.scm:42 modal-transforms.scm:75 +msgid "'to' pitch not in scale; ignoring" +msgstr "la nota 'destino' no está en la escala; se ignora" -#: lexer.ll:803 -#, c-format -msgid "unknown escaped string: `\\%s'" -msgstr "cadena de escape desconocida: `\\%s'" +#: modal-transforms.scm:46 +msgid "pitch to be transposed not in scale; ignoring" +msgstr "la nota a transportar no está en la escala; se ignora" -#: lexer.ll:910 -#, c-format -msgid "file too old: %s (oldest supported: %s)" -msgstr "archivo demasiado antiguo: %s (el más antiguo que se puede tratar es: %s)" +#: modal-transforms.scm:71 +msgid "'around' pitch not in scale; ignoring" +msgstr "la nota pivote no está en la escala; se ignora" -#: lexer.ll:911 -msgid "consider updating the input with the convert-ly script" -msgstr "considere la actualización de la entrada mediante el guión (script) convert-ly" +#: modal-transforms.scm:79 +msgid "pitch to be inverted not in scale; ignoring" +msgstr "la nota a invertir no está en la escala; se ignora" -#: lexer.ll:917 -#, c-format -msgid "program too old: %s (file requires: %s)" -msgstr "el programa es demasiado antiguo: %s (el archivo necesita: %s)" +#: modal-transforms.scm:95 +msgid "negative replication count; ignoring" +msgstr "número de replicaciones negativo; se ignora" -#: backend-library.scm:19 lily.scm:761 ps-to-png.scm:58 +#: backend-library.scm:29 ps-to-png.scm:68 #, scheme-format msgid "Invoking `~a'..." msgstr "Invocando «~a»..." -#: backend-library.scm:28 +#: backend-library.scm:34 #, scheme-format msgid "`~a' failed (~a)" msgstr "«~a» ha fallado (~a)" -#: backend-library.scm:116 +#: backend-library.scm:94 #, scheme-format msgid "Converting to `~a'..." msgstr "Convirtiendo en «~a»..." #. Do not try to guess the name of the png file, #. GS produces PNG files like BASE-page%d.png. -#: backend-library.scm:128 +#: backend-library.scm:104 #, scheme-format msgid "Converting to ~a..." msgstr "Convirtiendo en ~a..." -#: backend-library.scm:166 +#: backend-library.scm:142 #, scheme-format msgid "Writing header field `~a' to `~a'..." msgstr "Escribiendo el campo de encabezamiento «~a» en «~a»..." -#: define-context-properties.scm:20 define-grob-properties.scm:10 -#: define-music-properties.scm:10 +#: backend-library.scm:192 #, scheme-format -msgid "symbol ~S redefined" -msgstr "redefinido el símbolo ~S" +msgid "missing stencil expression `~S'" +msgstr "falta la expresión del sello `~S'" -#: define-event-classes.scm:119 +#: to-xml.scm:191 #, scheme-format -msgid "event class ~A seems to be unused" -msgstr "parece que la clase de evento ~A está sin usar" +msgid "assertion failed: ~S" +msgstr "el aserto no se cumple: ~S" -#. should be programming-error -#: define-event-classes.scm:125 +#: chord-entry.scm:49 #, scheme-format -msgid "translator listens to nonexisting event class ~A" -msgstr "el traductor está escuchando a una clase de evento ~A que no existe" +msgid "Spurious garbage following chord: ~A" +msgstr "Basurilla espúrea después del acorde: ~A" -#: define-markup-commands.scm:569 -msgid "no systems found in \\score markup, does it have a \\layout block?" -msgstr "no se ha encontrado ningún sistema en el marcado \\score, ¿tiene un bloque \\layout?" +#: lily-library.scm:758 +msgid "" +"Find the index between @var{start} and @var{end} (an integer)\n" +"which produces the closest match to @var{target-val} if\n" +"applied to function @var{getter}." +msgstr "" +"Encontrar el índice entre @var{start} y @var{end} (entero)\n" +"que produce la correspondencia más cercana a @var{target-val} cuando\n" +"se aplica a la función @var{getter}." -#: define-markup-commands.scm:2387 +#: lily-library.scm:832 #, scheme-format -msgid "Cannot find glyph ~a" -msgstr "No se encuentra el glifo ~a" +msgid "unknown unit: ~S" +msgstr "unidad desconocida: ~S " -#: define-markup-commands.scm:2696 +#: lily-library.scm:858 lily-library.scm:867 +msgid "warning:" +msgstr "advertencia:" + +#: lily-library.scm:860 #, scheme-format -msgid "not a valid duration string: ~a" -msgstr "no es una cadena válida de duración: ~a" +msgid "no \\version statement found, please add~afor future compatibility" +msgstr "no se ha encontrado ninguna instrucción \\version, escriba~apara disponer de compatibilidad en el futuro" + +#: lily-library.scm:868 +msgid "old relative compatibility not used" +msgstr "no se ha usado la compatibilidad con el modo relativo antiguo" + +#: output-ps.scm:48 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Se ha encontrado Infinito o NaN en la salida. Se sustituye por 0.0" + +#: output-ps.scm:289 output-svg.scm:550 +#, scheme-format +msgid "unknown line-cap-style: ~S" +msgstr "estilo de extremo de línea line-cap-style desconocido: ~S" + +#: output-ps.scm:294 output-svg.scm:556 +#, scheme-format +msgid "unknown line-join-style: ~S" +msgstr "estilo de unión de líneas line-join-style desconocido: ~S" + +#: output-svg.scm:47 +#, scheme-format +msgid "undefined: ~S" +msgstr "no definido: ~S" + +#: output-svg.scm:151 +#, scheme-format +msgid "cannot decypher Pango description: ~a" +msgstr "no se puede descifrar la descripción de Pango: ~a" + +#: output-svg.scm:231 +msgid "Glyph must have a unicode value" +msgstr "El glifo debe tener un valor de Unicode" + +#: output-svg.scm:283 output-svg.scm:293 +#, scheme-format +msgid "cannot find SVG font ~S" +msgstr "no se encuentra la fuente tipográfica de SVG ~S" + +#: flag-styles.scm:148 +#, scheme-format +msgid "flag stroke `~a' or `~a' not found" +msgstr "no se encuentra el impacto `~a' o `~a' de indicador" + +#: define-note-names.scm:962 +msgid "Select note names language." +msgstr "Seleccione el idioma para los nombres de las notas." + +#: define-note-names.scm:969 +#, scheme-format +msgid "Using `~a' note names..." +msgstr "Usando los nombres de notas de `~a' ..." -#: define-music-types.scm:670 +#: define-note-names.scm:972 +#, scheme-format +msgid "Could not find language `~a'. Ignoring." +msgstr "No se encuentra el idioma `~a'. Se ignora." + +#: define-music-types.scm:740 #, scheme-format msgid "symbol expected: ~S" msgstr "se esperaba un símbolo: ~S" -#: define-music-types.scm:673 +#: define-music-types.scm:743 #, scheme-format msgid "cannot find music object: ~S" msgstr "no se encuentra el objeto musical ~S" -#: define-music-types.scm:692 +#: define-music-types.scm:762 #, scheme-format msgid "unknown repeat type `~S'" msgstr "tipo de repetición «~S» desconocido" -#: define-music-types.scm:693 +#: define-music-types.scm:763 msgid "See define-music-types.scm for supported repeats" msgstr "Consulte el archivo define-music-types.scm para ver los tipos de repetición soportados" -#: document-backend.scm:99 -#, scheme-format -msgid "pair expected in doc ~s" -msgstr "se esperaba una pareja en el documento ~s" - -#: document-backend.scm:154 -#, scheme-format -msgid "cannot find interface for property: ~S" -msgstr "no se encuentra un interface para la propiedad ~S" - -#: document-backend.scm:164 +#: translation-functions.scm:341 #, scheme-format -msgid "unknown Grob interface: ~S" -msgstr "interfaz de Objeto gráfico desconocido: ~S" +msgid "Negative fret for pitch ~a on string ~a" +msgstr "Traste negativo para la nota ~a de la cuerda ~a" -#: documentation-lib.scm:49 +#: translation-functions.scm:385 #, scheme-format -msgid "Processing ~S..." -msgstr "Procesando ~S..." +msgid "No open string for pitch ~a" +msgstr "No hay cuerda al aire para la nota ~a" -#: documentation-lib.scm:165 +#: translation-functions.scm:400 #, scheme-format -msgid "Writing ~S..." -msgstr "Escribiendo ~S..." +msgid "Requested string for pitch requires negative fret: string ~a pitch ~a" +msgstr "La cuerda solicitada para la nota requiere un traste negativo: cuerda ~a nota ~a" -#: documentation-lib.scm:187 -#, scheme-format -msgid "cannot find description for property ~S (~S)" -msgstr "no se encuentra la descripción de la propiedad ~S (~S)" +#: translation-functions.scm:401 +msgid "Ignoring string request." +msgstr "Se ignora la solicitud de cuerda." -#: flag-styles.scm:145 +#: translation-functions.scm:414 #, scheme-format -msgid "flag stroke `~a' or `~a' not found" -msgstr "no se encuentra el impacto `~a' o `~a' de indicador" +msgid "No string for pitch ~a (given frets ~a)" +msgstr "No hay ninguna cuerda para la nota ~a (dados los trastes ~a)" -#: framework-eps.scm:90 +#: translation-functions.scm:515 #, scheme-format -msgid "Writing ~a..." -msgstr "Escribiendo «~a»..." +msgid "" +"No label for fret ~a (on string ~a);\n" +"only ~a fret labels provided" +msgstr "" +"No hay ninguna etiqueta para el traste ~a (sobre la cuerda ~a);\n" +"sólo se proporcionan etiquetas para los trastes ~a" -#: framework-ps.scm:277 +#: framework-ps.scm:250 #, scheme-format msgid "cannot embed ~S=~S" msgstr "no se puede empotrar ~S=~S" -#: framework-ps.scm:330 +#: framework-ps.scm:293 #, scheme-format msgid "cannot extract file matching ~a from ~a" msgstr "no se puede extraer la coincidencia de archivos ~a a partir de ~a" -#: framework-ps.scm:347 +#: framework-ps.scm:311 #, scheme-format msgid "do not know how to embed ~S=~S" msgstr "no sabemos cómo empotrar ~S=~S" -#: framework-ps.scm:378 +#: framework-ps.scm:336 #, scheme-format msgid "do not know how to embed font ~s ~s ~s" msgstr "no sabemos cómo empotrar la tipografía ~s ~s ~s" -#: framework-ps.scm:748 -#, scheme-format -msgid "cannot convert to ~S" -msgstr "no se puede convertir a ~S" - -#: framework-ps.scm:771 +#: framework-ps.scm:669 msgid "" "\n" -"The PostScript backend does not support the system-by-system \n" -"output. For that, use the EPS backend instead,\n" +"The PostScript backend does not support the\n" +"system-by-system output. For that, use the EPS backend instead,\n" "\n" " lilypond -dbackend=eps FILE\n" "\n" @@ -2790,7 +3409,7 @@ msgid "" " %% ****************************************************************\n" msgstr "" "\n" -"El 'backend' de PostScript no contempla la salida de sistemas individuales.\n" +"El 'backend' PostScript no contempla la salida de sistemas individuales.\n" "Para ello, use en su lugar el 'backend' EPS,\n" "\n" " lilypond -dbackend=eps ARCHIVO\n" @@ -2802,182 +3421,117 @@ msgstr "" " %% Start cut-&-pastable-section\n" " %% ****************************************************************\n" -#: graphviz.scm:53 -#, scheme-format -msgid "Writing graph `~a'..." -msgstr "Escribiendo el gráfico «~a»..." +#: music-functions.scm:268 +msgid "More alternatives than repeats. Junking excess alternatives" +msgstr "Hay más alternativas que repeticiones. Se recortan las alternativas excedentes" -#: layout-beam.scm:29 +#: music-functions.scm:297 #, scheme-format -msgid "Error in beam quanting. Expected (~S,~S) found ~S." -msgstr "Error en la cuantización de la barra. Se esperaba (~S,~S), se ha encontrado ~S." +msgid "invalid tremolo repeat count: ~a" +msgstr "número de repeticiones no válido para el trémolo: ~a" -#: layout-beam.scm:43 +#: music-functions.scm:618 #, scheme-format -msgid "Error in beam quanting. Expected ~S 0, found ~S." -msgstr "Error en la cuantización de la barra. Se esperaba ~S 0, se ha encontrado ~S." - -#: layout-page-layout.scm:126 -msgid "Can't fit systems on page -- ignoring between-system-padding" -msgstr "No se pueden dar cabida a todos los sistemas en la página; se ignora between-system-padding" +msgid "music expected: ~S" +msgstr "se esperaba algo de música: ~S" -#: lily-library.scm:602 +#. FIXME: uncomprehensable message +#: music-functions.scm:662 #, scheme-format -msgid "unknown unit: ~S" -msgstr "unidad desconocida: ~S " +msgid "Bar check failed. Expect to be at ~a, instead at ~a" +msgstr "Ha fallado la comprobación de compás. Se esperaba que estuviera en ~a, en lugar de en ~a" -#: lily-library.scm:636 +#: music-functions.scm:846 #, scheme-format -msgid "no \\version statement found, please add~afor future compatibility" -msgstr "no se ha encontrado ninguna instrucción \\version, escriba~apara disponer de compatibilidad en el futuro" +msgid "cannot find quoted music: `~S'" +msgstr "no se encuentra la música citada: «~S»" -#: lily-library.scm:644 -msgid "old relative compatibility not used" -msgstr "no se ha usado la compatibilidad con el modo relativo antiguo" +#: music-functions.scm:982 +msgid "Add @var{octave-shift} to the octave of @var{pitch}." +msgstr "Añadir @var{octave-shift} a la octava de @var{pitch}." -#: lily.scm:179 +#: music-functions.scm:1037 #, scheme-format -msgid "cannot find: ~A" -msgstr "no se encuentra: ~A" +msgid "Unknown octaveness type: ~S " +msgstr "Tipo de octavación desconocido: ~S " -#: lily.scm:228 -#, scheme-format -msgid "wrong type for argument ~a. Expecting ~a, found ~s" -msgstr "tipo equivocado para el argumento ~a. Se esperaba ~a, se encontró ~s" +#: music-functions.scm:1038 +msgid "Defaulting to 'any-octave." +msgstr "Fijando al valor predeterminado 'any-octave." -#: lily.scm:625 +#: music-functions.scm:1378 #, scheme-format -msgid "job ~a terminated with signal: ~a" -msgstr "la tarea ~a ha terminado con la señal: ~a" +msgid "unknown accidental style: ~S" +msgstr "estilo de alteración ~S desconocido" -#: lily.scm:628 -#, scheme-format -msgid "" -"logfile ~a (exit ~a):\n" -"~a" -msgstr "" -"archivo de registro ~a (salida ~a):\n" -"~a" +#: define-event-classes.scm:79 +msgid "All classes must be the last in their matrilineal line." +msgstr "Todas las clases deben ir al final de su línea de descendencia." -#: lily.scm:653 lily.scm:751 -#, scheme-format -msgid "failed files: ~S" -msgstr "archivos que han fallado: ~S" +#: define-event-classes.scm:83 +msgid "All classes must have a well-defined pedigree in the existing class hierarchy." +msgstr "Todas las clases deben tener un pedigree bien definido en la jerarquía de clases existente." -#: lily.scm:741 +#: define-event-classes.scm:149 #, scheme-format -msgid "Redirecting output to ~a..." -msgstr "Redirigiendo la salida hacia ~a..." - -#: ly-syntax-constructors.scm:40 -msgid "Music head function must return Music object" -msgstr "La función principal de música debe devolver un objeto musical" +msgid "event class ~A seems to be unused" +msgstr "parece que la clase de evento ~A está sin usar" -#: ly-syntax-constructors.scm:154 +#. should be programming-error +#: define-event-classes.scm:155 #, scheme-format -msgid "Invalid property operation ~a" -msgstr "Operación de propiedad ~a inválida" +msgid "translator listens to nonexisting event class ~A" +msgstr "el traductor está escuchando a una clase de evento ~A que no existe" -#: markup.scm:204 +#: markup.scm:223 #, scheme-format msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" msgstr "Número de agumentos equivocado. Se esperaban: ~A, se han encontrado ~A: ~S" -#: markup.scm:210 +#: markup.scm:229 #, scheme-format msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." msgstr "Argumento inválido en la posición ~A. Se esperaba: ~A, se ha encontrado: ~S." -#: markup.scm:274 +#: markup.scm:292 #, scheme-format msgid "Not a markup command: ~A" msgstr "No es una instrucción de marcado: ~A" -#: music-functions.scm:228 -msgid "More alternatives than repeats. Junking excess alternatives" -msgstr "Hay más alternativas que repeticiones. Se recortan las alternativas excedentes" - -#: music-functions.scm:240 -#, scheme-format -msgid "invalid tremolo repeat count: ~a" -msgstr "número de repeticiones no válido para el trémolo: ~a" - -#: music-functions.scm:248 -#, scheme-format -msgid "expecting 2 elements for chord tremolo, found ~a" -msgstr "se esperaban 2 elementos para el tremolo de acorde, se han encontrado ~a" - -#: music-functions.scm:575 -#, scheme-format -msgid "music expected: ~S" -msgstr "se esperaba algo de música: ~S" - -#. FIXME: uncomprehensable message -#: music-functions.scm:625 -#, scheme-format -msgid "Bar check failed. Expect to be at ~a, instead at ~a" -msgstr "Ha fallado la comprobación de compás. Se esperaba que estuviera en ~a, en lugar de en ~a" - -#: music-functions.scm:793 -#, scheme-format -msgid "cannot find quoted music: `~S'" -msgstr "no se encuentra la música citada: «~S»" - -#: music-functions.scm:1198 -#, scheme-format -msgid "unknown accidental style: ~S" -msgstr "estilo de alteración ~S desconocido" - -#: output-ps.scm:294 -msgid "utf-8-string encountered in PS backend" -msgstr "se ha encontrado una cadena UTF-8 en el 'backend' de PostScript" - -#: output-svg.scm:45 -#, scheme-format -msgid "undefined: ~S" -msgstr "no definido: ~S" - -#: output-svg.scm:135 +#: ps-to-png.scm:74 #, scheme-format -msgid "cannot decypher Pango description: ~a" -msgstr "no se puede descifrar la descripción de Pango: ~a" +msgid "~a exited with status: ~S" +msgstr "~a salió con el estado: ~S" -#: paper.scm:104 -msgid "set-global-staff-size: not in toplevel scope" -msgstr "set-global-staff-size: no está en el ámbito de nivel más alto" +#: define-markup-commands.scm:803 +msgid "no systems found in \\score markup, does it have a \\layout block?" +msgstr "no se ha encontrado ningún sistema en el marcado \\score, ¿tiene un bloque \\layout?" -#: paper.scm:244 +#: define-markup-commands.scm:2404 #, scheme-format -msgid "This is not a \\layout {} object, ~S" -msgstr "Esto no es un objeto de \\layout {} , ~S" +msgid "Cannot find glyph ~a" +msgstr "No se encuentra el glifo ~a" -#: paper.scm:256 +#: define-markup-commands.scm:2830 #, scheme-format -msgid "Unknown paper size: ~a" -msgstr "Tamaño de papel desconocido: ~a" - -#. TODO: should raise (generic) exception with throw, and catch -#. that in parse-scm.cc -#: paper.scm:271 -msgid "Must use #(set-paper-size .. ) within \\paper { ... }" -msgstr "Debe usar #(set-paper-size .. ) dentro de \\paper { ... }" +msgid "no brace found for point size ~S " +msgstr "no se ha encontrado ninguna llave para el tamaño en puntos ~S " -#: parser-clef.scm:129 +#: define-markup-commands.scm:2831 #, scheme-format -msgid "unknown clef type `~a'" -msgstr "tipo de clave desconocido: «~a» " +msgid "defaulting to ~S pt" +msgstr "fijando al valor predeterminado ~S pt" -#: parser-clef.scm:130 +#: define-markup-commands.scm:2984 #, scheme-format -msgid "supported clefs: ~a" -msgstr "claves soportadas: ~a" +msgid "not a valid duration string: ~a" +msgstr "no es una cadena válida de duración: ~a" -#: ps-to-png.scm:64 -#, scheme-format -msgid "~a exited with status: ~S" -msgstr "~a salió con el estado: ~S" +#: ly-syntax-constructors.scm:51 +msgid "Music head function must return Music object" +msgstr "La función principal de música debe devolver un objeto musical" -#: to-xml.scm:180 +#: ly-syntax-constructors.scm:177 #, scheme-format -msgid "assertion failed: ~S" -msgstr "el aserto no se cumple: ~S" +msgid "Invalid property operation ~a" +msgstr "Operación de propiedad ~a inválida" diff --git a/po/fr.po b/po/fr.po index c642c85aef..d46f1a4313 100644 --- a/po/fr.po +++ b/po/fr.po @@ -3,21 +3,76 @@ # French translation of GNU/lilypond - http//lilypond.org # Copyright © 2004 Free Software Foundation, Inc. # Michel Robitaille , 1996-2007. -# Jean-Charles Malahieude , 2008 +# Jean-Charles Malahieude , 2007-2011 # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.12.0\n" +"Project-Id-Version: lilypond 2.13.53\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2008-12-20 11:58+0100\n" -"PO-Revision-Date: 2008-12-31 13:53+0100\n" +"POT-Creation-Date: 2011-03-02 10:34+0100\n" +"PO-Revision-Date: 2011-04-06 19:38+0200\n" "Last-Translator: Jean-Charles Malahieude \n" "Language-Team: French \n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#: fontextract.py:25 +#, python-format +msgid "Scanning %s" +msgstr "Scannage de %s" + +#: fontextract.py:70 +#, python-format +msgid "Extracted %s" +msgstr "Extraction de %s" + +#: fontextract.py:85 +#, python-format +msgid "Writing fonts to %s" +msgstr "Écriture des fontes vers %s" + +#: book_snippets.py:519 +#, python-format +msgid "deprecated ly-option used: %s=%s" +msgstr "option ly-option obsolète : %s=%s" + +#: book_snippets.py:521 +#, python-format +msgid "compatibility mode translation: %s=%s" +msgstr "bascule en mode de compatibilité : %s=%s" + +#: book_snippets.py:524 +#, python-format +msgid "deprecated ly-option used: %s" +msgstr "option ly-option obsolète : %s" + +#: book_snippets.py:526 +#, python-format +msgid "compatibility mode translation: %s" +msgstr "bascule en mode de compatibilité : %s" + +#: book_snippets.py:544 +#, python-format +msgid "ignoring unknown ly option: %s" +msgstr "option ly inconnue et ignorée : %s" + +#: book_snippets.py:736 +#, python-format +msgid "Opening filter `%s'\n" +msgstr "Ouverture du filtre « %s »\n" + +#: book_snippets.py:756 +#, python-format +msgid "`%s' failed (%d)" +msgstr "« %s » a échoué (%d)" + +#: book_snippets.py:757 +msgid "The error log is as follows:" +msgstr "Voici le journal d'erreurs :" + #: convertrules.py:12 #, python-format msgid "Not smart enough to convert %s" @@ -34,8 +89,8 @@ msgstr "" msgid "%s has been replaced by %s" msgstr "%s a été remplacé par %s" -#: convertrules.py:24 musicexp.py:16 convert-ly.py:50 lilypond-book.py:94 -#: warn.cc:48 input.cc:90 +#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66 +#: input.cc:109 #, c-format, python-format msgid "warning: %s" msgstr "Avertissement : %s" @@ -47,14 +102,14 @@ msgstr "\\header { clé = concat + avec + opérateur }" #: convertrules.py:58 #, python-format msgid "deprecated %s" -msgstr "%s obsolète" +msgstr "%s est obsolète" #: convertrules.py:70 msgid "deprecated \\textstyle, new \\key syntax" msgstr "\\textstyle est obsolète ; utiliser désormais la syntaxe \\key" -#: convertrules.py:86 convertrules.py:1906 convertrules.py:2085 -#: convertrules.py:2237 convertrules.py:2567 +#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084 +#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862 msgid "bump version for release" msgstr "sauter de version pour mise à jour" @@ -71,7 +126,7 @@ msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" msgstr "\\repeat NUM Musique Alternative -> \\repeat FOLDSTR Musique Alternative" #: convertrules.py:216 convertrules.py:699 convertrules.py:1383 -#: convertrules.py:2379 +#: convertrules.py:2378 #, python-format msgid "deprecate %s" msgstr "%s obsolète" @@ -104,7 +159,7 @@ msgstr "nouvelle étiquette de texte \\textscript" #: convertrules.py:530 #, python-format msgid "identifier names: %s" -msgstr "Noms des identificateurs : %s" +msgstr "Nom des identificateurs : %s" #: convertrules.py:569 msgid "point-and-click argument changed to procedure." @@ -118,14 +173,14 @@ msgstr "Suppression des points-virgules" #: convertrules.py:654 #, python-format msgid "%s property names" -msgstr "Nom des propriétés %s" +msgstr "%s noms de propriété" #: convertrules.py:724 msgid "automaticMelismata turned on by default" msgstr "automaticMelismata est activé par défaut." -#: convertrules.py:963 convertrules.py:1682 convertrules.py:1943 -#: convertrules.py:2190 +#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942 +#: convertrules.py:2189 #, python-format msgid "remove %s" msgstr "Retrait de %s" @@ -136,16 +191,15 @@ msgstr "Syntaxe de cluster" #: convertrules.py:1014 msgid "new Pedal style syntax" -msgstr "nouvelle syntaxe du style de Pedal" +msgstr "Nouvelle syntaxe du style de Pedal" #: convertrules.py:1273 msgid "" "New relative mode,\n" "Postfix articulations, new text markup syntax, new chord syntax." msgstr "" -"Nouveau mode relatif,\n" -"articulations Postfix, nouvelle syntaxe des étiquettes de texte,\n" -"nouvelle syntaxe d'accord" +"Nouveau mode relatif, articulations Postfix,\n" +"nouvelle syntaxe des étiquettes de texte, nouvelle syntaxe d'accord." #: convertrules.py:1286 msgid "Remove - before articulation" @@ -163,20 +217,20 @@ msgstr "Interchanger < > et << >>" #: convertrules.py:1349 msgid "attempting automatic \\figures conversion. Check results!" msgstr "" -"tentative de convertir automatiquement les \\figures. \n" +"tentative de convesion automatique des \\figures. \n" "Résultats à vérifier !" #: convertrules.py:1400 msgid "Use Scheme code to construct arbitrary note events." -msgstr "Utiliser du code Scheme pour construire des événements note arbitraires." +msgstr "Utilisation de code Scheme pour construire des événements note arbitraires." #: convertrules.py:1407 msgid "" "use symbolic constants for alterations,\n" "remove \\outputproperty, move ly:verbose into ly:get-option" msgstr "" -"utiliser des constantes symboliques pour les altérations,\n" -"supprimer \\outputproperty, déplacer ly:verbose à l'intérieur de ly:get-option" +"Utilisation de constantes symboliques pour les altérations,\n" +"suppression de \\outputproperty, ly:verbose devient ly:get-option" #: convertrules.py:1432 #, python-format @@ -188,10 +242,10 @@ msgid "" "\n" "as a substitution text." msgstr "" -"Un \\outputproperty a été localisé.\n" -"Éditer manuellement, en utilisant\n" +"Un \\outputproperty a été détecté ;\n" +"éditer manuellement, en utilisant\n" "\n" -" \\applyoutput #(outputproperty-compatibility %s '%s )\n" +" \\applyoutput #(outputproperty-compatibility %s '%s )\n" "\n" "comme texte de substitution." @@ -204,7 +258,7 @@ msgid "" "* keySignature settings made with \\property\n" msgstr "" "Pour pouvoir tenir compte des quarts de ton en codage Scheme, \n" -"le nombre d'arguments d'une altération a été doublé. \n" +"le nombre d'arguments d'une altération a été doublé.\n" "Les constructions suivantes doivent être adaptées manuellement :\n" "\n" "* appels à ly:make-pitch et ly:pitch-alteration\n" @@ -212,7 +266,7 @@ msgstr "" #: convertrules.py:1493 msgid "removal of automaticMelismata; use melismaBusyProperties instead." -msgstr "suppression de automaticMelismata au profit de melismaBusyProperties" +msgstr "Suppression de automaticMelismata au profit de melismaBusyProperties." #: convertrules.py:1600 msgid "\\partcombine syntax change to \\newpartcombine" @@ -223,8 +277,8 @@ msgid "" "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n" "Harmonic notes. Thread context removed. Lyrics context removed." msgstr "" -"Changements de notation pour percussions. \\chordmodifiers \\notenames supprimés.\n" -"Notes harmoniques. Contextes Thread et Lyrics supprimés." +"Changements de notation pour percussions. Suppression de \\chordmodifiers\n" +"et \\notenames. Notes harmoniques. Contextes Thread et Lyrics supprimés." #: convertrules.py:1632 msgid "Drums found. Enclose drum notes in \\drummode" @@ -258,29 +312,29 @@ msgstr "Renommage de fonction grob Scheme" #: convertrules.py:1780 #, python-format msgid "use %s" -msgstr "Utilisation : %s" +msgstr "Utilisation de %s" #: convertrules.py:1797 msgid "More Scheme function renaming" msgstr "Renommage d'autres fonctions Scheme" -#: convertrules.py:1925 +#: convertrules.py:1924 msgid "" "Page layout has been changed, using paper size and margins.\n" "textheight is no longer used.\n" msgstr "" -"La mise en page a été modifiée, utilisant le taille du papier et les marges.\n" +"La mise en page a été modifiée, utilisant la taille du papier et les marges.\n" "« textheight » n'est plus utilisé.\n" -#: convertrules.py:2011 +#: convertrules.py:2010 msgid "" "\\foo -> \\foomode (for chords, notes, etc.)\n" "fold \\new FooContext \\foomode into \\foo." msgstr "" -"\\foo -> \\foomode (pour accords, notes, etc.)\n" -"incorporer « \\new FooContext \\foomode » dans \\foo." +"\\toto -> \\totomode (pour accords, notes, etc.)\n" +"transforme « \\new TotoContext \\totomode » en \\toto." -#: convertrules.py:2049 +#: convertrules.py:2048 msgid "" "staff size should be changed at top-level\n" "with\n" @@ -294,123 +348,133 @@ msgstr "" " #(set-global-staff-size )\n" "\n" -#: convertrules.py:2069 +#: convertrules.py:2068 msgid "regularize other identifiers" -msgstr "normaliser les autres identificateurs" +msgstr "Normalisation d'autres identifiants" -#: convertrules.py:2137 +#: convertrules.py:2136 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" -msgstr "\\encoding : smart recode latin1..utf-8. Supprimer ly:point-and-click" +msgstr "\\encoding : recodage latin1..utf-8. Suppression de ly:point-and-click" -#: convertrules.py:2150 +#: convertrules.py:2149 msgid "LilyPond source must be UTF-8" msgstr "Le fichier source LilyPond doit être codé en UTF-8." -#: convertrules.py:2153 +#: convertrules.py:2152 msgid "Try the texstrings backend" msgstr "Essayer le moteur texstrings (texstrings backend)." -#: convertrules.py:2156 +#: convertrules.py:2155 #, python-format msgid "Do something like: %s" msgstr "Faites quelque chose comme : %s" -#: convertrules.py:2159 +#: convertrules.py:2158 msgid "Or save as UTF-8 in your editor" -msgstr "Ou sauvegarder en format UTF-8 à l'aide de votre éditeur" +msgstr "ou sauvegardez en format UTF-8 à l'aide de votre éditeur" -#: convertrules.py:2213 +#: convertrules.py:2212 msgid "warn about auto beam settings" -msgstr "attention aux réglages des ligatures automatiques" +msgstr "Avertissement au sujet des ligatures automatiques" -#: convertrules.py:2218 +#: convertrules.py:2217 msgid "auto beam settings" -msgstr "réglages des ligatures automatiques" +msgstr "réglage des ligatures automatiques" -#: convertrules.py:2220 +#: convertrules.py:2219 msgid "" "\n" "Auto beam settings must now specify each interesting moment in a measure\n" -"explicitely; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" +"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" msgstr "" "\n" -"Le réglage des ligatures automatiques doit explicitement spécifier chaque moment\n" -"de la mesure. 1/4 ne prend désormais plus en charge 1/2 et 3/4.\n" +"Le réglage des ligatures automatiques doit explicitement spécifier chaque\n" +"moment de la mesure. 1/4 ne prend désormais plus en charge 1/2 et 3/4.\n" -#: convertrules.py:2334 +#: convertrules.py:2333 msgid "verticalAlignmentChildCallback has been deprecated" msgstr "verticalAlignmentChildCallback est désuet" -#: convertrules.py:2338 +#: convertrules.py:2337 msgid "Remove callbacks property, deprecate XY-extent-callback." -msgstr "Supprimer les propriétés de rappel, les XY-extent-callback sont obsolètes." +msgstr "Suppression des propriétés de rappel, les XY-extent-callback sont obsolètes." -#: convertrules.py:2359 +#: convertrules.py:2358 msgid "Use grob closures iso. XY-offset-callbacks." -msgstr "Utiliser la clôture des grobs comme avec XY-offset-callbacks." +msgstr "Utilisation des clôtures de grob comme avec XY-offset-callbacks." -#: convertrules.py:2421 +#: convertrules.py:2420 msgid "foobar -> foo-bar for \\paper, \\layout" -msgstr "foobar -> foo-bar pour \\paper, \\layout" +msgstr "taratata -> tara-tata pour \\paper et \\layout" -#: convertrules.py:2531 +#: convertrules.py:2530 msgid "deprecate \\tempo in \\midi" msgstr "\\tempo au sein d'une section \\midi est obsolète" -#: convertrules.py:2578 +#: convertrules.py:2583 msgid "deprecate cautionary-style. Use AccidentalCautionary properties" -msgstr "cautionary-style est obsolète. Utiliser les propriétés AccidentalCautionary." +msgstr "cautionary-style est désuet. Utilisation des propriétés AccidentalCautionary." -#: convertrules.py:2591 +#: convertrules.py:2596 msgid "Rename accidental glyphs, use glyph-name-alist." -msgstr "Pour renommer les glyphes des altérations, utiliser glyph-name-alist." +msgstr "Renommage des glyphes d'altération, utilisation de glyph-name-alist." -#: convertrules.py:2646 +#: convertrules.py:2651 msgid "edge-text settings for TextSpanner." msgstr "réglages des limites de texte pour TextSpanner." -#: convertrules.py:2647 +#: convertrules.py:2652 #, python-format msgid "" "Use\n" "\n" "%s" msgstr "" -"Utilisation : \n" +"Utiliser dorénavant \n" "\n" "%s" +#: convertrules.py:2685 +msgid "Use the `alignment-offsets' sub-property of\n" +msgstr "Utiliser la sous-propriété `alignment-offsets' de\n" + #: convertrules.py:2686 +msgid "NonMusicalPaperColumn #'line-break-system-details\n" +msgstr "NonMusicalPaperColumn #'line-break-system-details\n" + +#: convertrules.py:2687 +msgid "to set fixed distances between staves.\n" +msgstr "pour définir un espacement fixe des systèmes.\n" + +#: convertrules.py:2699 msgid "Use #'style not #'dash-fraction to select solid/dashed lines." -msgstr "" -"Utiliser #'style et non #'dash-fraction pour obtenir des lignes continues\n" -"ou pointillées." +msgstr "Pour des lignes continues ou pointillées, utilisez #'style, pas #'dash-fraction." -#: convertrules.py:2692 +#: convertrules.py:2705 msgid "all settings related to dashed lines.\n" msgstr "tous les réglages concernant les lignes pointillées.\n" -#: convertrules.py:2693 +#: convertrules.py:2706 msgid "Use \\override ... #'style = #'line for solid lines and\n" msgstr "Utiliser \\override ... #'style = #'line pour des lignes pleines, et\n" -#: convertrules.py:2694 +#: convertrules.py:2707 msgid "\t\\override ... #'style = #'dashed-line for dashed lines." msgstr "\t\\override ... #'style = #'dashed-line pour des lignes pointillées." -#: convertrules.py:2730 +#: convertrules.py:2743 msgid "" "metronomeMarkFormatter uses text markup as second argument,\n" "fret diagram properties moved to fret-diagram-details." msgstr "" -"le deuxième argument de metronomeMarkFormatter doit être une étiquette textuelle,\n" +"metronomeMarkFormatter prend une étiquette en deuxième argument,\n" "les propriétés de tablature sont désormais dans fret-diagram-details." -#: convertrules.py:2735 +#: convertrules.py:2748 msgid "metronomeMarkFormatter got an additional text argument.\n" msgstr "metronomeMarkFormatter prend un argument textuel suplémentaire.\n" -#: convertrules.py:2736 +#: convertrules.py:2749 #, python-format msgid "" "The function assigned to Score.metronomeMarkFunction now uses the signature\n" @@ -419,1299 +483,1778 @@ msgstr "" "La fonction assignée à Score.metronomeMarkFunction utilise la signature\n" "%s" -#: convertrules.py:2799 +#: convertrules.py:2812 msgid "\\put-adjacent argument order.\n" msgstr "ordre de l'argument \\put-adjacent\n" -#: convertrules.py:2800 +#: convertrules.py:2813 msgid "Axis and direction now come before markups:\n" msgstr "Axe et direction doivent précéder les étiquettes :\n" -#: convertrules.py:2801 +#: convertrules.py:2814 msgid "\\put-adjacent axis dir markup markup." msgstr "\\put-adjacent axe direction étiquette étiquette." -#: convertrules.py:2832 +#: convertrules.py:2845 msgid "re-definition of InnerStaffGroup.\n" -msgstr "redéfinition de InnerStaffGroup.\n" +msgstr "Redéfinition de InnerStaffGroup.\n" -#: convertrules.py:2838 +#: convertrules.py:2851 msgid "re-definition of InnerChoirStaff.\n" -msgstr "redéfinition de InnerChoirStaff.\n" +msgstr "Redéfinition de InnerChoirStaff.\n" -#: convertrules.py:2851 +#: convertrules.py:2861 +msgid "Syntax changes for \\addChordShape and \\chord-shape" +msgstr "Changement de syntaxe pour \\addChordShape et \\chord-shape" + +#: convertrules.py:2866 msgid "stringTuning must be added to addChordShape call.\n" -msgstr "stringTuning est requis lors de l'appel à addChordShape. \n" +msgstr "stringTuning est requis lors de l'appel à addChordShape.\n" -#: convertrules.py:2857 +#: convertrules.py:2872 msgid "stringTuning must be added to chord-shape call.\n" msgstr "stringTuning est requis lors de l'appel à chord-shape.\n" -#: fontextract.py:25 -#, python-format -msgid "Scanning %s" -msgstr "Scannage de %s" +#: convertrules.py:2879 +msgid "Remove oldaddlyrics" +msgstr "Suppression de oldaddlyrics" -#: fontextract.py:70 -#, python-format -msgid "Extracted %s" -msgstr "Extraction de %s" +#: convertrules.py:2883 +msgid "" +"oldaddlyrics is no longer supported. \n" +" Use addlyrics or lyrsicsto instead.\n" +msgstr "" +"oldaddlyrics n'est désormais plus pris en charge.\n" +" Utilisez maintenant addlyrics ou lyricsto.\n" -#: fontextract.py:85 +#: convertrules.py:2889 +msgid "" +"keySignature property not reversed any more\n" +"MIDI 47: orchestral strings -> orchestral harp" +msgstr "" +"Le propriété keySignature n'est plus inversée\n" +"MIDI 47 : orchestral strings -> orchestral harp" + +#: convertrules.py:2894 +msgid "The alist for Staff.keySignature is no longer in reversed order.\n" +msgstr "La liste associative pour Staff.keySignature n'est plus en ordre inverse.\n" + +#: convertrules.py:2900 +msgid "" +"\\bar \".\" now produces a thick barline\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Dash parameters for slurs and ties are now in dash-definition" +msgstr "" +"\\bar \".\" produit désormais une barre épaisse.\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Les paramètres du pointillé des liaisons sont gérés par dash-definition." + +#: convertrules.py:2906 +msgid "\\bar \".\" now produces a thick barline.\n" +msgstr "\\bar \".\" produit désormais une barre épaisse.\n" + +#: convertrules.py:2912 +msgid "Dash parameters for slurs and ties are now in 'dash-details.\n" +msgstr "Les paramètres du pointillé des liaisons sont gérés par `dash-details.\n" + +#: convertrules.py:2917 +msgid "" +"Autobeaming rules have changed. override-auto-beam-setting and\n" +"revert-auto-beam-setting have been eliminated.\n" +"\\overrideBeamSettings has been added.\n" +"beatGrouping has been eliminated.\n" +"Different settings for vertical layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explicit dynamics context definition from `Piano centered dynamics'\n" +"template replaced by new `Dynamics' context." +msgstr "" +"Les règles de ligature automatique ont été revues.\n" +"override-auto-beam-setting et revert-auto-beam-setting ont disparu,\n" +"remplacés par \\overrideBeamSettings.\n" +"beatGrouping a disparu.\n" +"Modification des réglages de mise en forme verticale :\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"La définition du contexte de nuances explicites du canevas\n" +"« Piano et nuances entre les portées » est remplacée par le nouveau\n" +"contexte `Dynamics'." + +#: convertrules.py:2931 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now overriden with \\overrideBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" L'introduction d'une dérogation aux ligatures automatiques se fait\n" +"désormais avec \\overrideBeamSettings.\n" + +#: convertrules.py:2936 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now reverted with \\revertBeamSettings.\n" +msgstr "" +"override-auto-beam-setting.\n" +" La suppression d'une dérogation aux ligatures automatiques se fait\n" +" désormais avec \\revertBeamSettings.\n" + +#: convertrules.py:2941 +msgid "" +"beatGrouping. \n" +" beatGrouping with a specified context must now be accomplished with\n" +" \\overrideBeamSettings.\n" +msgstr "" +"beatGrouping.\n" +" beatGrouping dans un contexte spécifique s'accomplit désormais avec\n" +" \\overrideBeamSettings.\n" + +#: convertrules.py:2947 +msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n" +msgstr "" +"alignment-offsets est devenu alignment-distances : il faut désormais\n" +"spécifier la distance entre les portées au lieu de leur offset.\n" + +#: convertrules.py:2958 +msgid "" +"Remove obsolete engravers/translators: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"New vertical spacing variables." +msgstr "" +"Suppression des graveurs/traducteurs obsolètes Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer et String_number_engraver.\n" +"Apparition de nouvelles variables pour l'espacement vertical." + +#: convertrules.py:2989 +msgid "minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n" +msgstr "minimum-Y-extent : l'espacement vertical ne dépend plus du Y-extent d'un VerticalAxisGroup.\n" + +#: convertrules.py:2995 +msgid "Unify fetaNumber and fetaDynamic encodings" +msgstr "Uniformisation des encodages de fetaNumber et fetaDynamic." + +#: convertrules.py:3000 +msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" +msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" + +#: convertrules.py:3011 +msgid "\\cresc etc. are now postfix operators" +msgstr "\\cresc etc. sont désormais des opérateurs postfix" + +#: convertrules.py:3017 +msgid "" +"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" +msgstr "" +"Élimination de beamSettings, beatLength, \\setBeatGrouping, \n" +"\\overrideBeamSettings et \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" + +#: convertrules.py:3035 +msgid "\\overrideBeamSettings. Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n" +msgstr "" +"\\overrideBeamSettings.\n" +"Utiliser \\set beamExceptions ou \\overrideTimeSignatureSettings.\n" + +#: convertrules.py:3039 +msgid "\\revertBeamSettings. Use \\set beamExceptions or \\revertTimeSignatureSettings.\n" +msgstr "" +"\\revertBeamSettings.\n" +"Utiliser \\set beamExceptions ou \\revertTimeSignatureSettings.\n" + +#: convertrules.py:3043 +msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n" +msgstr "" +"beamSettings.\n" +"Utiliser baseMoment, beatStructure et beamExceptions.\n" + +#: convertrules.py:3047 +msgid "beatLength. Use baseMoment and beatStructure.\n" +msgstr "" +"beatLength.\n" +"Utiliser baseMoment et beatStructure.\n" + +#: convertrules.py:3051 +msgid "setbeatGrouping. Use baseMoment and beatStructure.\n" +msgstr "" +"setbeatGrouping.\n" +"Utiliser baseMoment et beatStructure.\n" + +#: convertrules.py:3056 +msgid "" +"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n" +"Deprecate negative dash-period for hidden lines: use #'style = #'none instead." +msgstr "" +"Diagrammes pour vents : taille, épaisseur et graphique deviennent des \n" +"propriétés.\n" +"Dépréciation des longueurs de tiret négatives pour des lignes masquées ;\n" +"utiliser désormais #'style = #'none" + +#: convertrules.py:3061 +msgid "woodwind-diagrams. Move size, thickness, and graphic to properties. Argument should be just the key list.\n" +msgstr "" +"Diagrammes pour vents (woodwind-diagrams). Taille, épaisseur et graphique\n" +"sont des propriétés. L'argument devrait ne contenir que la liste des clés.\n" + +#: convertrules.py:3069 +msgid "" +"Rename vertical spacing variables.\n" +"Add fretboard-table argument to savePredefinedFretboard." +msgstr "" +"Renommage des variables d'espacement vertical.\n" +"Ajout de l'argument fretboard-table à savePredefinedFretboard." + +#: convertrules.py:3087 +msgid "Rename vertical spacing grob properties." +msgstr "Renommage des propriétés d'objet en matière d'espacement vertical." + +#: convertrules.py:3103 +msgid "Remove \\paper variables head-separation and foot-separation." +msgstr "Suppression des variables de \\paper head-separation et foot-separation." + +#: convertrules.py:3108 +msgid "Adjust settings for top-system-spacing instead.\n" +msgstr "Ajustez plutôt le réglage de top-system-spacing.\n" + +#: convertrules.py:3113 +msgid "Adjust settings for last-bottom-spacing instead.\n" +msgstr "Ajustez plutôt le réglage de last-bottom-spacing.\n" + +#: convertrules.py:3119 +msgid "" +"Rename space to basic-distance in various spacing alists.\n" +"Remove HarmonicParenthesesItem grob." +msgstr "" +"space est renommé basic-distance dans diverses variables liées à l'espacement.\n" +"Suppression du grob HarmonicParenthesesItem." + +#: convertrules.py:3127 +msgid "HarmonicParenthesesItem has been eliminated.\n" +msgstr "Élimination de HarmonicParenthesesItem.\n" + +#: convertrules.py:3128 +msgid "Harmonic parentheses are part of the TabNoteHead grob.\n" +msgstr "Les parenthèses harmoniques sont attachées au grob TabNoteHead.\n" + +#: convertrules.py:3133 +msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n" +msgstr "Suppression du contexte dans overrideTimeSignatureSettings et revertTimeSignatureSettings.\n" + +#: convertrules.py:3140 +msgid "" +"Change stringTunings from a list of semitones to a list of pitches.\n" +"Change tenor and baritone ukulele names in string tunings.\n" +"Generate messages for manual conversion of vertical spacing if required." +msgstr "" +"stringTunings : d'une liste de demi-tons, devient une liste de hauteurs.\n" +"Les noms de ukulele tenor et baryton sont modifiés en accordage personnalisé.\n" +"Génération d'un message au besoin pour les conversions liées à l'espacement vertical." + +#: convertrules.py:3180 +msgid "Vertical spacing changes might affect user-defined contexts. " +msgstr "" +"Les modifications apportées à l'espacement vertical peuvent mettre en\n" +"péril les contextes personnalisés." + +#: convertrules.py:3185 +msgid "Replace bar-size with bar-extent." +msgstr "bar-size devient bar-extent." + +#: convertrules.py:3197 +msgid "Woodwind diagrams: Changes to the clarinet diagram." +msgstr "Diagrammes pour vents : modifications touchant la clarinette." + +#: convertrules.py:3201 +msgid "woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of instrument.\n" +msgstr "Diagrammes pour vents : doigtés plus adaptés à la clarinette actuelle.\n" + +#: book_base.py:24 #, python-format -msgid "Writing fonts to %s" -msgstr "Écriture des fontes vers %s" +msgid "file not found: %s" +msgstr "fichier non trouvé : %s" -#: lilylib.py:91 lilylib.py:142 +#: book_base.py:161 +msgid "Output function not implemented" +msgstr "Fonction de production non implémentée." + +#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115 +#: input.cc:123 +#, c-format, python-format +msgid "error: %s" +msgstr "Erreur : %s" + +#: lilylib.py:124 lilylib.py:175 #, python-format msgid "Invoking `%s'" msgstr "Appel de « %s »" -#: lilylib.py:93 lilylib.py:144 +#: lilylib.py:126 lilylib.py:177 #, python-format msgid "Running %s..." msgstr "Exécution de %s..." -#: lilylib.py:209 +#: lilylib.py:253 #, python-format msgid "Usage: %s" msgstr "Utilisation : %s" -#: musicexp.py:215 musicexp.py:220 +#: musicexp.py:216 musicexp.py:221 msgid "Language does not support microtones contained in the piece" msgstr "Le langage ne prend pas en charge les microintervalles de ce morceau" -#: musicexp.py:482 +#: musicexp.py:483 msgid "Tuplet brackets of curved shape are not correctly implemented" msgstr "La courbure des crochets de nolet n'est pas implémentée de manière optimale" -#. TODO: Implement this using actual_type and normal_type! -#: musicexp.py:511 -msgid "Tuplet brackets displaying both note durations are not implemented, using default" -msgstr "Les crochets de nolet indiquant le deux valeurs rythmiques ne sont pas implémentés ; utilisation du style par défaut" - -#: musicexp.py:656 +#: musicexp.py:669 #, python-format msgid "unable to set the music %(music)s for the repeat %(repeat)s" msgstr "impossible d'affecter le fragment %(music)s à la répétition %(repeat)s" -#: musicexp.py:665 +#: musicexp.py:678 msgid "encountered repeat without body" -msgstr "réprise vide détectée" +msgstr "reprise vide détectée" #. no self.elements! -#: musicexp.py:835 +#: musicexp.py:848 #, python-format msgid "Grace note with no following music: %s" -msgstr "Apoggiature non suivie de musique :%s" +msgstr "Apoggiature non suivie de musique : %s" -#: musicexp.py:997 +#: musicexp.py:1010 #, python-format msgid "Invalid octave shift size found: %s. Using no shift." msgstr "Décalage d'octave invalide : %s. Décalage non appliqué." -#: musicexp.py:1455 +#: musicexp.py:1468 #, python-format msgid "Unable to convert alteration %s to a lilypond expression" msgstr "Impossible de convertir l'altération %s en expression LilyPond" -#: musicxml.py:13 convert-ly.py:53 lilypond-book.py:97 warn.cc:54 input.cc:96 -#: input.cc:104 -#, c-format, python-format -msgid "error: %s" -msgstr "Erreur : %s" - #. TODO: Handle pieces without a time signature! -#: musicxml.py:357 +#: musicxml.py:358 msgid "Senza-misura time signatures are not yet supported!" msgstr "Les métriques « senza-misura » ne sont pas prises en charge." -#: musicxml.py:375 +#: musicxml.py:376 msgid "Unable to interpret time signature! Falling back to 4/4." msgstr "Métrique non interprétable ; retour au 4/4." -#: musicxml.py:431 +#: musicxml.py:432 #, python-format msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!" msgstr "" "Octave d'altération indiquée pour une altération numéro %s inexistante ;\n" "index d'altération disponibles : 1 à %s" -#: musicxml.py:519 +#: musicxml.py:520 #, python-format msgid "Unable to find instrument for ID=%s\n" -msgstr "Aucun instrument ne correspond à l'ID=%s\n" +msgstr "Aucun instrument ne correspond à l'ID %s\n" -#: abc2ly.py:1341 convert-ly.py:74 lilypond-book.py:121 midi2ly.py:845 -#, python-format -msgid "%s [OPTION]... FILE" -msgstr "%s [OPTIONS]... FICHIER" +#: book_latex.py:156 +msgid "cannot find \\begin{document} in LaTeX document" +msgstr "Impossible de trouver \\begin{document} dans le document LaTeX." -#: abc2ly.py:1342 +#: musicxml2ly.py:223 #, python-format -msgid "" -"abc2ly converts ABC music files (see\n" -"%s) to LilyPond input.\n" +msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" msgstr "" -"abc2ly convertit les fichiers musicaux ABC (voir\n" -"%s) au format LilyPond.\n" +"Détection d'un fichier créé par %s et contenant des informations de ligature\n" +"erronées. Toutes les informations de ligature du fichier MusicXML seront\n" +"ignorées." -#: abc2ly.py:1350 convert-ly.py:81 etf2ly.py:1190 lilypond-book.py:207 -#: midi2ly.py:881 musicxml2ly.py:2590 main.cc:156 -msgid "show version number and exit" -msgstr "afficher le numéro de version et quitter" - -#: abc2ly.py:1354 convert-ly.py:85 etf2ly.py:1186 lilypond-book.py:138 -#: midi2ly.py:860 musicxml2ly.py:2572 main.cc:145 -msgid "show this help and exit" -msgstr "visualiser cette aide et quitter" +#: musicxml2ly.py:239 musicxml2ly.py:241 +#, python-format +msgid "Unprocessed PartGroupInfo %s encountered" +msgstr "PartGroupInfo %s détecté, mais non traité" -#: abc2ly.py:1356 etf2ly.py:1191 midi2ly.py:864 -msgid "write output to FILE" -msgstr "produire la sortie dans le FICHIER" +#: musicxml2ly.py:494 +#, python-format +msgid "Encountered note at %s without type and duration (=%s)" +msgstr "Une note se trouve en %s, sans type ni durée (=%s)" -#: abc2ly.py:1358 -msgid "be strict about success" -msgstr "être strict sur la réussite" +#: musicxml2ly.py:514 +#, python-format +msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" +msgstr "" +"Durée rationnelle au dénominateur de %s détectée ;\n" +"impossible de traduire en durée LilyPond" -#: abc2ly.py:1360 -msgid "preserve ABC's notion of beams" -msgstr "préserver la notion de lien de croches propre à ABC" +#: musicxml2ly.py:761 +msgid "Unable to extract key signature!" +msgstr "Impossible de déterminer l'armure." -#. Translators, please translate this string as -#. "Report bugs in English via %s", -#. or if there is a LilyPond users list or forum in your language -#. "Report bugs in English via %s or in YOUR_LANG via URI" -#: abc2ly.py:1363 convert-ly.py:123 etf2ly.py:1200 lilypond-book.py:214 -#: midi2ly.py:894 musicxml2ly.py:2646 main.cc:265 -#, c-format, python-format -msgid "Report bugs via %s" +#: musicxml2ly.py:788 +#, python-format +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" msgstr "" -"Signaler toute anomalie à \n" -"%s" +"%s : mode inconnu.\n" +"Devrait être « majeur », « mineur » ou « mode d'église »" -#: convert-ly.py:33 -msgid "" -"Update LilyPond input to newer version. By default, update from the\n" -"version taken from the \\version command, to the current LilyPond version." -msgstr "" -"Mettre à jour le fichier source vers une version plus récente. \n" -"Par défaut, de la version indiquée par la commande \\version \n" -"vers la version courante de LilyPond." +#: musicxml2ly.py:926 +#, python-format +msgid "Encountered unprocessed marker %s\n" +msgstr "Détection d'un marqueur non traité : %s\n" -#: convert-ly.py:35 lilypond-book.py:71 -msgid "Examples:" -msgstr "Exemples :" +#: musicxml2ly.py:1020 +#, python-format +msgid "unknown span event %s" +msgstr "Événement de prolongation inconnu : « %s »" -#: convert-ly.py:69 etf2ly.py:1173 lilypond-book.py:117 midi2ly.py:76 -msgid "Distributed under terms of the GNU General Public License." -msgstr "Distribué selon les termes de la GNU General Public License." +#: musicxml2ly.py:1030 +#, python-format +msgid "unknown span type %s for %s" +msgstr "%s n'est pas un type de prolongateur reconnu pour %s" -#: convert-ly.py:70 etf2ly.py:1174 lilypond-book.py:118 midi2ly.py:77 -msgid "It comes with NO WARRANTY." -msgstr "Le logiciel est distribué SANS GARANTIE." +#: musicxml2ly.py:1450 +msgid "Unknown metronome mark, ignoring" +msgstr "Indication métronomique inconnue et ignorée." -#: convert-ly.py:89 convert-ly.py:116 -msgid "VERSION" -msgstr "VERSION" +#. TODO: Implement the other (more complex) way for tempo marks! +#: musicxml2ly.py:1455 +msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." +msgstr "" +"Les indications métronomiques aux relations complexes ( pour \n" +"MusicXML) n'ont pas encore été implémentées." -#: convert-ly.py:91 -msgid "start from VERSION [default: \\version found in file]" -msgstr "partir de la VERSION [par défaut : \\version trouvée dans le fichier]" +#: musicxml2ly.py:1657 +#, python-format +msgid "Unable to convert chord type %s to lilypond." +msgstr "Impossible de convertir le type d'accord %s au format LilyPond" -#: convert-ly.py:94 -msgid "edit in place" -msgstr "éditer le fichier d'origine" +#: musicxml2ly.py:1806 +#, python-format +msgid "drum %s type unknown, please add to instrument_drumtype_dict" +msgstr "" +"%s n'est pas un type de percussion connu. \n" +"L'ajouter à instrument_drumtype_dict" -#: convert-ly.py:98 -msgid "do not add \\version command if missing" -msgstr "ne pas ajouter la commande \\version si elle est absente" +#: musicxml2ly.py:1810 +msgid "cannot find suitable event" +msgstr "Aucun événement correspondant" -#: convert-ly.py:104 +#: musicxml2ly.py:1958 #, python-format -msgid "force updating \\version number to %s" -msgstr "forcer la mise à jour de \\version à %s" +msgid "Negative skip %s (from position %s to %s)" +msgstr "Retour en arrière de %s (partant de %s et jusqu'à %s)" -#: convert-ly.py:110 +#: musicxml2ly.py:2099 #, python-format -msgid "show rules [default: -f 0, -t %s]" -msgstr "afficher les règles [par défaut : -f 0, -t %s]" +msgid "Negative skip found: from %s to %s, difference is %s" +msgstr "Retour en arrière, de %s à %s ; différence = %s" -#: convert-ly.py:115 +#: musicxml2ly.py:2180 #, python-format -msgid "convert to VERSION [default: %s]" -msgstr "convertir jusqu'à la VERSION [par défaut : %s]" - -#: convert-ly.py:163 -msgid "Applying conversion: " -msgstr "Conversion en cours : " +msgid "unexpected %s; expected %s or %s or %s" +msgstr "%s détecté, au lieu de %s, %s ou %s" -#: convert-ly.py:176 -msgid "Error while converting" -msgstr "Erreur lors de la conversion" +#: musicxml2ly.py:2286 +msgid "Encountered closing slur, but no slur is open" +msgstr "Terminaison d'une liaison qui n'a pas été débutée" -#: convert-ly.py:178 -msgid "Stopping at last successful rule" -msgstr "Arrêt à la dernière règle appliquée avec succès" +#: musicxml2ly.py:2289 +msgid "Cannot have two simultaneous (closing) slurs" +msgstr "deux liaisons ne peuvent se terminer simultanément" -#: convert-ly.py:199 -#, python-format -msgid "Processing `%s'... " -msgstr "Traitement de « %s »..." +#: musicxml2ly.py:2298 +msgid "Cannot have a slur inside another slur" +msgstr "des liaisons ne peuvent s'imbriquer" -#: convert-ly.py:289 relocate.cc:362 source-file.cc:59 -#, c-format, python-format -msgid "cannot open file: `%s'" -msgstr "Impossible d'ouvrir le fichier : « %s »" +#: musicxml2ly.py:2301 +msgid "Cannot have two simultaneous slurs" +msgstr "deux liaisons ne peuvent intervenir simultanément" -#: convert-ly.py:296 +#: musicxml2ly.py:2435 #, python-format -msgid "cannot determine version for `%s'. Skipping" -msgstr "impossible de déterminer la version de « %s ». Au suivant !" +msgid "cannot simultaneously have more than one mode: %s" +msgstr "SVP, un seul mode à la fois : %s" -#: etf2ly.py:1179 -#, python-format -msgid "%s [OPTION]... ETF-FILE" -msgstr "%s [OPTIONS]... FICHIER-ETF" +#: musicxml2ly.py:2543 +msgid "Converting to LilyPond expressions..." +msgstr "Conversion en expressions LilyPond..." + +#: musicxml2ly.py:2554 +msgid "musicxml2ly [OPTION]... FILE.xml" +msgstr "musicxml2ly [options]... FICHIER.xml" -#: etf2ly.py:1180 +#: musicxml2ly.py:2556 msgid "" -"Enigma Transport Format is a format used by Coda Music Technology's\n" -"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" +"Convert MusicXML from FILE.xml to LilyPond input.\n" +"If the given filename is -, musicxml2ly reads from the command line.\n" msgstr "" -"Enigma Transport Format est utilisé par Finale, de Coda Music Technology.\n" -"etf2ly convertit partiellement un fichier ETF en un fichier LilyPond \n" -"exploitable.\n" +"Convertit FICHIER.xml (MusicXML) au format LilyPond.\n" +"Si le nom du fichier est « - », musicxml2ly lira la ligne de commande.\n" + +#: musicxml2ly.py:2562 midi2ly.py:987 abc2ly.py:1386 lilypond-book.py:140 +#: convert-ly.py:98 etf2ly.py:1202 main.cc:157 +msgid "show this help and exit" +msgstr "visualiser cette aide et quitter" + +#: musicxml2ly.py:2566 +msgid "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" +msgstr "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" + +#: musicxml2ly.py:2580 midi2ly.py:1015 abc2ly.py:1382 lilypond-book.py:212 +#: convert-ly.py:94 etf2ly.py:1206 main.cc:168 +msgid "show version number and exit" +msgstr "afficher le numéro de version et quitter" + +#: musicxml2ly.py:2585 midi2ly.py:1009 lilypond-book.py:204 main.cc:169 +msgid "be verbose" +msgstr "Passe en mode verbeux" + +#: musicxml2ly.py:2591 +msgid "use lxml.etree; uses less memory and cpu time" +msgstr "" +"utilise lxml.etree pour consommer moins de mémoire\n" +"et de temps processeur." + +#: musicxml2ly.py:2597 +msgid "input file is a zip-compressed MusicXML file" +msgstr "le fichier d'entrée est un fichier MusicXML compressé" + +#: musicxml2ly.py:2603 +msgid "convert pitches in relative mode (default)" +msgstr "convertit les hauteurs en mode relatif (par défaut)" + +#: musicxml2ly.py:2608 +msgid "convert pitches in absolute mode" +msgstr "convertit les hauteurs en mode absolu" + +#: musicxml2ly.py:2611 +msgid "LANG" +msgstr "LANG" + +#: musicxml2ly.py:2613 +msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German" +msgstr "utilise une autre définition linguistique (LANG), p.ex. deutsch l'allemand" + +#: musicxml2ly.py:2619 +msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +msgstr "" +"ne convertit pas les emplacements (^, _ ou -) des articulations, \n" +"nuances, etc." + +#: musicxml2ly.py:2625 +msgid "do not convert exact vertical positions of rests" +msgstr "ne convertit pas le positionnement absolu des silences" + +#: musicxml2ly.py:2631 +msgid "do not convert the exact page layout and breaks" +msgstr "ne convertit pas les sauts et la mise en page" -#: etf2ly.py:1192 midi2ly.py:865 musicxml2ly.py:2638 main.cc:149 main.cc:154 +#: musicxml2ly.py:2637 +msgid "do not convert beaming information, use lilypond's automatic beaming instead" +msgstr "" +"ne convertit pas les informations de ligature ; \n" +"laisse LilyPond gérer les ligatures automatiques" + +#: musicxml2ly.py:2640 midi2ly.py:992 midi2ly.py:997 etf2ly.py:1208 +#: main.cc:161 main.cc:166 msgid "FILE" msgstr "FICHIER" -#: etf2ly.py:1194 lilypond-book.py:210 midi2ly.py:882 main.cc:158 +#: musicxml2ly.py:2645 +msgid "set output filename to FILE, stdout if -" +msgstr "produit la sortie dans FICHIER (stdout si -)" + +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: musicxml2ly.py:2648 midi2ly.py:1028 abc2ly.py:1395 lilypond-book.py:234 +#: convert-ly.py:144 etf2ly.py:1216 main.cc:281 +#, c-format, python-format +msgid "Report bugs via %s" +msgstr "" +"Signalez tout bogue, en français à\n" +" http://lilypond-french-users.1298960.n2.nabble.com/\n" +"ou en anglais à\n" +"%s" + +#: musicxml2ly.py:2728 +#, python-format +msgid "unknown part in part-list: %s" +msgstr "la partie %s n'est pas mentionnée dans part-list" + +#: musicxml2ly.py:2790 +msgid "Input is compressed, extracting raw MusicXML data from stdin" +msgstr "" +"Le fichier d'entrée est compressé.\n" +"Extraction des données MusicXML brutes à partir de stdin" + +#: musicxml2ly.py:2793 +#, python-format +msgid "Input file %s is compressed, extracting raw MusicXML data" +msgstr "" +"Le fichier d'entrée (%s) est compressé.\n" +"Extraction des données MusicXML brutes" + +#: musicxml2ly.py:2823 +msgid "Reading MusicXML from Standard input ..." +msgstr "Lecture du fichier MusicXML à partir de l'entrée standard..." + +#: musicxml2ly.py:2825 +#, python-format +msgid "Reading MusicXML from %s ..." +msgstr "Lecture du fichier MusicXML %s..." + +#: musicxml2ly.py:2858 +#, python-format +msgid "Output to `%s'" +msgstr "Fichier de sortie : « %s »" + +#: musicxml2ly.py:2925 +#, python-format +msgid "Unable to find input file %s" +msgstr "Impossible de trouver le fichier d'entrée : « %s »" + +#: midi2ly.py:90 lilypond-book.py:116 convert-ly.py:81 etf2ly.py:1189 +#, python-format +msgid "Copyright (c) %s by" +msgstr "Copyright (c) %s détenu par" + +#: midi2ly.py:92 lilypond-book.py:118 convert-ly.py:83 etf2ly.py:1191 +msgid "Distributed under terms of the GNU General Public License." +msgstr "Distribué selon les termes de la GNU General Public License." + +#: midi2ly.py:93 lilypond-book.py:119 convert-ly.py:84 etf2ly.py:1192 +msgid "It comes with NO WARRANTY." +msgstr "Le logiciel est distribué SANS GARANTIE." + +#: midi2ly.py:99 +msgid "warning: " +msgstr "Avertissement : " + +#: midi2ly.py:102 midi2ly.py:1041 +msgid "error: " +msgstr "Erreur : " + +#: midi2ly.py:103 +msgid "Exiting... " +msgstr "Fin d'exécution... " + +#: midi2ly.py:960 +#, python-format +msgid "%s output to `%s'..." +msgstr "%s reproduit dans « %s »..." + +#: midi2ly.py:972 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87 +#, python-format +msgid "%s [OPTION]... FILE" +msgstr "%s [OPTIONS]... FICHIER" + +#: midi2ly.py:973 +#, python-format +msgid "Convert %s to LilyPond input.\n" +msgstr "Convertir %s au format source LilyPond.\n" + +#: midi2ly.py:978 +msgid "print absolute pitches" +msgstr "Afficher des hauteurs absolues" + +#: midi2ly.py:980 midi2ly.py:1002 +msgid "DUR" +msgstr "DUR" + +#: midi2ly.py:981 +msgid "quantise note durations on DUR" +msgstr "Quantifier les durées de note d'après DUR" + +#: midi2ly.py:984 +msgid "print explicit durations" +msgstr "Écrit des durées explicites" + +#: midi2ly.py:989 +msgid "prepend FILE to output" +msgstr "ajout de FICHIER à la sortie" + +#: midi2ly.py:993 +msgid "set key: ALT=+sharps|-flats; MINOR=1" +msgstr "Définit l'armure : ALT=+dièse|-bémol; MINEUR=1" + +#: midi2ly.py:994 +msgid "ALT[:MINOR]" +msgstr "ALT[:MINEUR]" + +#: midi2ly.py:996 abc2ly.py:1388 etf2ly.py:1207 +msgid "write output to FILE" +msgstr "produire la sortie dans le FICHIER" + +#: midi2ly.py:999 +msgid "preview of first 4 bars" +msgstr "prévisualisation des quatre premières mesures" + +#: midi2ly.py:1001 +msgid "quantise note starts on DUR" +msgstr "Quantifie les débuts de note sur DUR" + +#: midi2ly.py:1004 +msgid "DUR*NUM/DEN" +msgstr "DUR*NUM/DEN" + +#: midi2ly.py:1007 +msgid "allow tuplet durations DUR*NUM/DEN" +msgstr "Permet des n-olets de durée DUR*NUM/DEN" + +#: midi2ly.py:1016 lilypond-book.py:215 convert-ly.py:139 etf2ly.py:1210 +#: main.cc:170 msgid "show warranty and copyright" msgstr "afficher les notices de garantie et du droit d'auteur" -#: lilypond-book.py:69 +#: midi2ly.py:1019 +msgid "treat every text as a lyric" +msgstr "Traite tout texte comme étant des paroles" + +#: midi2ly.py:1022 +msgid "Examples" +msgstr "Exemples" + +#: midi2ly.py:1042 +msgid "no files specified on command line." +msgstr "aucun fichier spéficié sur la ligne de commande." + +#: abc2ly.py:1374 +#, python-format +msgid "" +"abc2ly converts ABC music files (see\n" +"%s) to LilyPond input.\n" +msgstr "" +"abc2ly convertit les fichiers musicaux ABC (voir\n" +"%s) au format LilyPond.\n" + +#: abc2ly.py:1390 +msgid "be strict about success" +msgstr "être strict sur la réussite" + +#: abc2ly.py:1392 +msgid "preserve ABC's notion of beams" +msgstr "préserver la notion de ligature propre à ABC" + +#: lilypond-book.py:80 msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." msgstr "" -"Traiter les extraits LilyPond dans un document HTML hybride, LaTeX, \n" +"Traite les extraits LilyPond dans un document HTML hybride, LaTeX,\n" "texinfo ou Docbook." -#: lilypond-book.py:76 +#: lilypond-book.py:82 convert-ly.py:46 +msgid "Examples:" +msgstr "Exemples :" + +#: lilypond-book.py:87 msgid "BOOK" msgstr "LIVRE" -#: lilypond-book.py:84 +#: lilypond-book.py:95 #, python-format msgid "Exiting (%d)..." msgstr "Fin d'exécution (%d)..." -#: lilypond-book.py:115 -#, python-format -msgid "Copyright (c) %s by" -msgstr "Copyright (c) %s détenu par" - -#: lilypond-book.py:125 +#: lilypond-book.py:127 msgid "FILTER" msgstr "FILTRE" -#: lilypond-book.py:128 +#: lilypond-book.py:130 msgid "pipe snippets through FILTER [default: `convert-ly -n -']" -msgstr "passer les extraits à travers le FILTRE [par défaut : `convert-ly -n -']" +msgstr "Passe les extraits à travers le FILTRE [par défaut : `convert-ly -n -']" -#: lilypond-book.py:132 +#: lilypond-book.py:134 msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" msgstr "" -"utiliser le format de sortie FORMAT (texi (par défaut), texi-html, latex, \n" -"html, docbook)" +"Utilise le format de sortie FORMAT (texi par défaut, texi-html, latex,\n" +"html ou docbook)" -#: lilypond-book.py:133 +#: lilypond-book.py:135 msgid "FORMAT" msgstr "FORMAT" -#: lilypond-book.py:140 +#: lilypond-book.py:142 msgid "add DIR to include path" -msgstr "ajouter le RÉPERTOIRE au chemin de recherche des inclusions" +msgstr "Ajoute le RÉP au chemin de recherche des inclusions" -#: lilypond-book.py:141 lilypond-book.py:148 lilypond-book.py:166 -#: lilypond-book.py:172 lilypond-book.py:178 lilypond-book.py:184 main.cc:148 +#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163 +#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160 msgid "DIR" msgstr "RÉP" -#: lilypond-book.py:146 +#: lilypond-book.py:148 msgid "format Texinfo output so that Info will look for images of music in DIR" -msgstr "formater la sortie Texinfo pour qu'Info cherche les images dans RÉP" - -#: lilypond-book.py:153 -msgid "run executable PROG instead of latex" -msgstr "lancer l'exécutable PROG plutôt que latex" - -#: lilypond-book.py:154 -msgid "PROG" -msgstr "PROG" +msgstr "Formate la sortie Texinfo pour qu'Info cherche les images dans RÉP" -#: lilypond-book.py:159 +#: lilypond-book.py:155 msgid "PAD" msgstr "PAD" -#: lilypond-book.py:161 +#: lilypond-book.py:157 msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" msgstr "" -"Tasser la musique par la gauche pour la répartir en dépit du nombre irrégulier \n" +"Tasse la musique par la gauche pour la répartir en dépit du nombre irrégulier\n" "de mesures (en mm)" -#: lilypond-book.py:165 -msgid "write output to DIR" -msgstr "produire la sortie dans le RÉPERTOIRE" +#: lilypond-book.py:162 +msgid "write lily-XXX files to DIR, link into --output dir" +msgstr "" +"Écrit les fichiers lily-XXX dans RÉP et crée un lien vers le répertoire\n" +"spécifié par --output" -#: lilypond-book.py:171 -msgid "do not fail if no lilypond output is found" -msgstr "poursuivre même s'il n'y a pas de sortie lilypond" +#: lilypond-book.py:167 +msgid "Load the additional python PACKAGE (containing e.g. a custom output format)" +msgstr "" +"Charge le PAQUETAGE python supplémentaire (contenant p.ex. un format\n" +"de sortie particulier)" -#: lilypond-book.py:177 -msgid "do not fail if no PNG images are found for EPS files" -msgstr "poursuivre même s'il n'y a pas d'image PNG pour les fichiers EPS" +#: lilypond-book.py:168 +msgid "PACKAGE" +msgstr "PAQUETAGE" -#: lilypond-book.py:183 -msgid "write lily-XXX files to DIR, link into --output dir" -msgstr "écrire les fichiers lily-XXX dans RÉP, et lier à --output rép" +#: lilypond-book.py:172 +msgid "write output to DIR" +msgstr "Produit la sortie dans RÉP" -#: lilypond-book.py:188 +#: lilypond-book.py:177 msgid "COMMAND" msgstr "COMMANDE" -#: lilypond-book.py:189 +#: lilypond-book.py:178 msgid "process ly_files using COMMAND FILE..." -msgstr "Traîter ly_files en utilisant COMMANDE FICHIER..." - -#: lilypond-book.py:196 -msgid "create PDF files for use with PDFTeX" -msgstr "Créer des fichiers PDF pour utilisation par PDFTeX" - -#: lilypond-book.py:199 midi2ly.py:875 musicxml2ly.py:2595 main.cc:157 -msgid "be verbose" -msgstr "Passer en mode verbeux" - -#: lilypond-book.py:871 -#, python-format -msgid "file not found: %s" -msgstr "fichier non trouvé : %s" - -#: lilypond-book.py:1142 -#, python-format -msgid "deprecated ly-option used: %s=%s" -msgstr "option ly-option obsolète : %s=%s" - -#: lilypond-book.py:1144 -#, python-format -msgid "compatibility mode translation: %s=%s" -msgstr "bascule en mode de compatibilité : %s=%s" +msgstr "Traîte ly_files en utilisant COMMANDE FICHIER..." -#: lilypond-book.py:1147 -#, python-format -msgid "deprecated ly-option used: %s" -msgstr "option ly-option obsolète : %s" +#: lilypond-book.py:182 +msgid "Compile snippets in safe mode" +msgstr "Compile des extraits en mode protégé" -#: lilypond-book.py:1149 -#, python-format -msgid "compatibility mode translation: %s" -msgstr "bascule en mode de compatibilité : %s" +#: lilypond-book.py:188 +msgid "do not fail if no lilypond output is found" +msgstr "Désactive la mise en échec en l’absence de sortie de lilypond" -#: lilypond-book.py:1167 -#, python-format -msgid "ignoring unknown ly option: %s" -msgstr "option ly inconnue et ignorée : %s" +#: lilypond-book.py:194 +msgid "do not fail if no PNG images are found for EPS files" +msgstr "" +"Désactive la mise en échec en l’absence d’images PNG correspondant aux\n" +"fichiers EPS" -#: lilypond-book.py:1604 -#, python-format -msgid "Opening filter `%s'" -msgstr "Ouverture du filtre « %s »" +#: lilypond-book.py:200 +msgid "write snippet output files with the same base name as their source file" +msgstr "" +"Affecte au résultat des extraits la même racine\n" +"que celle des fichiers source" -#: lilypond-book.py:1621 -#, python-format -msgid "`%s' failed (%d)" -msgstr "« %s » a échoué (%d)" +#: lilypond-book.py:220 +msgid "" +"run executable PROG instead of latex, or in\n" +"case --pdf option is set instead of pdflatex" +msgstr "" +"Utilise l’exécutable PROG en lieu et place de latex,\n" +"ou lorsque l'option --pdf remplace pdflatex" -#: lilypond-book.py:1622 -msgid "The error log is as follows:" -msgstr "Voici le journal d'erreurs :" +#: lilypond-book.py:222 +msgid "PROG" +msgstr "PROG" -#: lilypond-book.py:1684 -msgid "cannot find \\begin{document} in LaTeX document" -msgstr "Impossible de trouver \\begin{document} dans le document LaTeX." +#: lilypond-book.py:228 +msgid "create PDF files for use with PDFTeX" +msgstr "Crée des fichiers PDF pour utilisation par PDFTeX" -#: lilypond-book.py:1784 +#: lilypond-book.py:419 msgid "Writing snippets..." msgstr "Écriture des extraits..." -#: lilypond-book.py:1790 +#: lilypond-book.py:425 msgid "Processing..." msgstr "Traitement..." -#: lilypond-book.py:1796 +#: lilypond-book.py:431 msgid "All snippets are up to date..." msgstr "Tous les extraits sont à jour..." -#: lilypond-book.py:1830 +#: lilypond-book.py:452 #, python-format msgid "cannot determine format for: %s" msgstr "format indéterminé pour %s" -#: lilypond-book.py:1841 +#: lilypond-book.py:461 #, python-format msgid "%s is up to date." msgstr "%s est à jour." -#: lilypond-book.py:1855 +#: lilypond-book.py:475 #, python-format msgid "Writing `%s'..." msgstr "Écriture de « %s »..." -#: lilypond-book.py:1913 +#: lilypond-book.py:537 msgid "Output would overwrite input file; use --output." msgstr "La sortie va écraser le fichier d'entrée ; utiliser --output" -#: lilypond-book.py:1917 +#: lilypond-book.py:541 #, python-format msgid "Reading %s..." msgstr "Lecture en cours de %s..." -#: lilypond-book.py:1937 +#: lilypond-book.py:549 msgid "Dissecting..." msgstr "Dissection en cours..." -#: lilypond-book.py:1953 +#: lilypond-book.py:561 #, python-format msgid "Compiling %s..." msgstr "Compilation de %s..." -#: lilypond-book.py:1962 +#: lilypond-book.py:570 #, python-format msgid "Processing include: %s" msgstr "Traitement d'inclusion : %s" -#: lilypond-book.py:1974 +#: lilypond-book.py:582 #, python-format msgid "Removing `%s'" msgstr "Suppression de « %s »" -#: midi2ly.py:84 lily-library.scm:634 lily-library.scm:643 -msgid "warning: " -msgstr "Avertissement : " - -#: midi2ly.py:87 midi2ly.py:907 -msgid "error: " -msgstr "Erreur : " - -#: midi2ly.py:88 -msgid "Exiting... " -msgstr "Fin d'exécution... " - -#: midi2ly.py:833 -#, python-format -msgid "%s output to `%s'..." -msgstr "%s reproduit dans « %s »..." - -#: midi2ly.py:846 -#, python-format -msgid "Convert %s to LilyPond input.\n" -msgstr "Convertir %s au format source LilyPond.\n" - -#: midi2ly.py:851 -msgid "print absolute pitches" -msgstr "afficher des tons absolus" - -#: midi2ly.py:853 midi2ly.py:868 -msgid "DUR" -msgstr "DUR" - -#: midi2ly.py:854 -msgid "quantise note durations on DUR" -msgstr "quantifier les durées de note d'après DUR" - -#: midi2ly.py:857 -msgid "print explicit durations" -msgstr "écrire des durées explicites" - -#: midi2ly.py:861 -msgid "set key: ALT=+sharps|-flats; MINOR=1" -msgstr "définir l'armure : ALT=+dièse|-bémol; MINEUR=1" - -#: midi2ly.py:862 -msgid "ALT[:MINOR]" -msgstr "ALT[:MINEUR]" - -#: midi2ly.py:867 -msgid "quantise note starts on DUR" -msgstr "quantifier les débuts de note sur DUR" - -#: midi2ly.py:870 -msgid "DUR*NUM/DEN" -msgstr "DUR*NUM/DEN" +#: convert-ly.py:44 +msgid "" +"Update LilyPond input to newer version. By default, update from the\n" +"version taken from the \\version command, to the current LilyPond version." +msgstr "" +"Mettre à jour le fichier source vers une version plus récente.\n" +"Par défaut, de la version indiquée par la commande \\version \n" +"vers la version courante de LilyPond." -#: midi2ly.py:873 -msgid "allow tuplet durations DUR*NUM/DEN" -msgstr "permettre des n-olets de durée DUR*NUM/DEN" +#: convert-ly.py:102 convert-ly.py:135 +msgid "VERSION" +msgstr "VERSION" -#: midi2ly.py:885 -msgid "treat every text as a lyric" -msgstr "traiter chaque texte comme des paroles" +#: convert-ly.py:104 +msgid "start from VERSION [default: \\version found in file]" +msgstr "partir de la VERSION [par défaut : \\version trouvée dans le fichier]" -#: midi2ly.py:888 -msgid "Examples" -msgstr "Exemples" +#: convert-ly.py:107 +msgid "edit in place" +msgstr "éditer le fichier d'origine" -#: midi2ly.py:908 -msgid "no files specified on command line." -msgstr "aucun fichier spéficié sur la ligne de commande." +#: convert-ly.py:111 +msgid "do not add \\version command if missing" +msgstr "ne pas ajouter la commande \\version si elle est absente" -#: musicxml2ly.py:343 -msgid "Encountered file created by Dolet 3.4 for Sibelius, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" -msgstr "" -"Détection d'un fichier créé par Dolet 3.4 pour Sibelius et contenant des \n" -"informations de lien erronées. Toutes les informations de ligature du fichier \n" -"MusicXML seront ignorées" +#: convert-ly.py:117 +#, python-format +msgid "force updating \\version number to %s" +msgstr "forcer la mise à jour de \\version à %s" -#: musicxml2ly.py:346 -msgid "Encountered file created by Noteworthy Composer's nwc2xml, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" -msgstr "" -"Détection d'un fichier créé par Noteworthy Composer's nwc2xml et contenant des \n" -"informations de lien erronées. Toutes les informations de ligature du fichier \n" -"MusicXML seront ignorées" +#: convert-ly.py:123 +msgid "only update \\version number if file is modified" +msgstr "ne changer le numéro de \\version que si le fichier est modifié" -#: musicxml2ly.py:362 musicxml2ly.py:364 +#: convert-ly.py:129 #, python-format -msgid "Unprocessed PartGroupInfo %s encountered" -msgstr "PartGroupInfo %s détecté, mais non traité" +msgid "show rules [default: -f 0, -t %s]" +msgstr "afficher les règles [par défaut : -f 0, -t %s]" -#: musicxml2ly.py:594 +#: convert-ly.py:134 #, python-format -msgid "Encountered note at %s without type and duration (=%s)" -msgstr "Une note se trouve en %s, sans type ni durée (=%s)" +msgid "convert to VERSION [default: %s]" +msgstr "convertir jusqu'à la VERSION [par défaut : %s]" -#: musicxml2ly.py:613 -#, python-format -msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" -msgstr "" -"Durée rationnelle au dénominateur de %s détectée ; \n" -"impossible de traduire en durée LilyPond" +#: convert-ly.py:184 +msgid "Applying conversion: " +msgstr "Conversion en cours : " -#: musicxml2ly.py:868 -msgid "Unable to extract key signature!" -msgstr "Impossible de trouver l'armure." +#: convert-ly.py:197 +msgid "Error while converting" +msgstr "Erreur lors de la conversion" -#: musicxml2ly.py:895 -#, python-format -msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" -msgstr "%s : mode inconnu. Devrait être « majeur », « mineur » ou « mode d'église »" +#: convert-ly.py:199 +msgid "Stopping at last successful rule" +msgstr "Arrêt à la dernière règle appliquée avec succès" -#: musicxml2ly.py:968 +#: convert-ly.py:224 #, python-format -msgid "Encountered unprocessed marker %s\n" -msgstr "Détection d'un marqueur non traité : %s\n" +msgid "Processing `%s'... " +msgstr "Traitement de « %s »..." -#: musicxml2ly.py:1062 +#: convert-ly.py:332 #, python-format -msgid "unknown span event %s" -msgstr "Événement de prolongation inconnu : « %s »" +msgid "%s: Unable to open file" +msgstr "impossible d'ouvrir le fichier « %s »" -#: musicxml2ly.py:1072 +#: convert-ly.py:339 #, python-format -msgid "unknown span type %s for %s" -msgstr "%s n'est pas un type de prolongateur reconnu pour %s" - -#: musicxml2ly.py:1498 -msgid "Unknown metronome mark, ignoring" -msgstr "Indication métronomique inconnue et ignorée." +msgid "%s: Unable to determine version. Skipping" +msgstr "impossible de déterminer la version de « %s ». Au suivant !" -#. TODO: Implement the other (more complex) way for tempo marks! -#: musicxml2ly.py:1503 -msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." +#: convert-ly.py:344 +#, python-format +msgid "" +"%s: Invalid version string `%s' \n" +"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'" msgstr "" -"Les indications métronomiques aux relations complexes ( pour \n" -"MusicXML) n'ont pas encore été implémentées." +"%s porte un numéro de version invalide : %s \n" +"Un numéro de version valide est formé de trois nombres séparés par un point,\n" +"comme par exemple « 2.8.12 »" -#: musicxml2ly.py:1703 +#: etf2ly.py:1195 #, python-format -msgid "Unable to convert chord type %s to lilypond." -msgstr "Impossible de convertir le type d'accord %s au format LilyPond" +msgid "%s [OPTION]... ETF-FILE" +msgstr "%s [OPTIONS]... FICHIER-ETF" -#: musicxml2ly.py:1849 -#, python-format -msgid "drum %s type unknown, please add to instrument_drumtype_dict" +#: etf2ly.py:1196 +msgid "" +"Enigma Transport Format is a format used by Coda Music Technology's\n" +"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" msgstr "" -"%s n'est pas un type de percussion connu. \n" -"L'ajouter à instrument_drumtype_dict" +"Enigma Transport Format est utilisé par Finale, de Coda Music Technology.\n" +"etf2ly convertit partiellement un fichier ETF en un fichier LilyPond\n" +"exploitable.\n" -#: musicxml2ly.py:1853 -msgid "cannot find suitable event" -msgstr "Aucun événement correspondant" +#: website_post.py:123 +msgid "English" +msgstr "Anglais" -#: musicxml2ly.py:1994 -#, python-format -msgid "Negative skip %s (from position %s to %s)" -msgstr "Retour en arrière de %s (partant de %s et jusqu'à %s)" +#: website_post.py:126 +msgid "Other languages" +msgstr "Autres langues" -#: musicxml2ly.py:2134 -#, python-format -msgid "Negative skip found: from %s to %s, difference is %s" -msgstr "Retour en arrière, de %s à %s ; différence = %s" +#: warn.cc:59 +#, c-format +msgid "success: %s" +msgstr "Résultat : %s" -#: musicxml2ly.py:2205 -#, python-format -msgid "unexpected %s; expected %s or %s or %s" -msgstr "%s détecté, au lieu de %s, %s ou %s" +#: warn.cc:86 grob.cc:617 input.cc:97 +#, c-format +msgid "programming error: %s" +msgstr "erreur de programmation : %s" -#: musicxml2ly.py:2311 -msgid "Encountered closing slur, but no slur is open" -msgstr "Terminaison d'une liaison qui n'a pas été débutée" +#: warn.cc:87 input.cc:98 +msgid "continuing, cross fingers" +msgstr "poursuite ; croisons les doigts." -#: musicxml2ly.py:2314 -msgid "Cannot have two simultaneous (closing) slurs" -msgstr "deux liaisons ne peuvent se terminer simultanément" +#: getopt-long.cc:153 +#, c-format +msgid "option `%s' requires an argument" +msgstr "L'option « %s » requiert un argument" -#: musicxml2ly.py:2324 -msgid "Cannot have a slur inside another slur" -msgstr "des liaisons ne peuvent s'imbriquer" +#: getopt-long.cc:157 +#, c-format +msgid "option `%s' does not allow an argument" +msgstr "L'option « %s » s'emploie sans argument" -#: musicxml2ly.py:2327 -msgid "Cannot have two simultaneous slurs" -msgstr "deux liaisons ne peuvent intervenir simultanément" +#: getopt-long.cc:161 +#, c-format +msgid "unrecognized option: `%s'" +msgstr "option non reconnue : « %s »" -#: musicxml2ly.py:2455 -#, python-format -msgid "cannot simultaneously have more than one mode: %s" -msgstr "SVP, un seul mode à la fois : %s" +#: getopt-long.cc:167 +#, c-format +msgid "invalid argument `%s' to option `%s'" +msgstr "argument « %s » invalide pour l'option « %s »" -#: musicxml2ly.py:2553 -msgid "Converting to LilyPond expressions..." -msgstr "Conversion en expressions LilyPond..." +#: grob.cc:286 +msgid "Infinity or NaN encountered" +msgstr "infini ou valeur non numérique rencontré lors de la conversion d'un nombre réel" -#: musicxml2ly.py:2564 -msgid "musicxml2ly [OPTION]... FILE.xml" -msgstr "musicxml2ly [options]... FICHIER.xml" +#: vaticana-ligature.cc:95 +msgid "flexa-height undefined; assuming 0" +msgstr "Vaticana_ligature : décalage en X indéfini ; ramené à 0" -#: musicxml2ly.py:2566 -msgid "" -"Convert MusicXML from FILE.xml to LilyPond input.\n" -"If the given filename is -, musicxml2ly reads from the command line.\n" -msgstr "" -"Convertit FICHIER.xml (MusicXML) au format LilyPnd.\n" -"Si le nom du fichier est « - », musicxml2ly lira la ligne de commande.\n" +#: vaticana-ligature.cc:100 +msgid "ascending vaticana style flexa" +msgstr "flexe de style vaticana ascendant" -#: musicxml2ly.py:2576 -msgid "" -"Copyright (c) 2005--2009 by\n" -" Han-Wen Nienhuys ,\n" -" Jan Nieuwenhuizen and\n" -" Reinhold Kainhofer \n" -msgstr "" -"Copyright (c) 2005--2009 by\n" -" Han-Wen Nienhuys ,\n" -" Jan Nieuwenhuizen and\n" -" Reinhold Kainhofer \n" +#: vaticana-ligature.cc:188 +msgid "Vaticana_ligature: zero join (delta_pitch == 0)" +msgstr "Vaticana_ligature: aucun joint (delta_pitch == 0)" -#: musicxml2ly.py:2601 -msgid "use lxml.etree; uses less memory and cpu time" -msgstr "" -"Utiliser lxml.etree pour consommer moins de mémoire \n" -"et de temps processeur." +#: parse-scm.cc:101 +msgid "GUILE signaled an error for the expression beginning here" +msgstr "GUILE a signalé une erreur pour l'expression débutant ici" -#: musicxml2ly.py:2607 -msgid "input file is a zip-compressed MusicXML file" -msgstr "le fichier d'entrée est un fichier MusicXML compressé" +#: rest-collision-engraver.cc:70 +msgid "rhythmic head is not part of a rhythmic column" +msgstr "tête rythmique non rattachée à un empilement rythmique" -#: musicxml2ly.py:2613 -msgid "convert pitches in relative mode (default)" -msgstr "convertir les hauteurs en mode relatif (par défaut)" +#. if we get to here, just put everything on one line +#: constrained-breaking.cc:189 constrained-breaking.cc:207 +msgid "cannot find line breaking that satisfies constraints" +msgstr "impossible de trouver un saut de ligne qui satisfasse aux contraintes" -#: musicxml2ly.py:2618 -msgid "convert pitches in absolute mode" -msgstr "convertir les hauteurs en mode absolu" +#: horizontal-bracket-engraver.cc:78 +msgid "do not have that many brackets" +msgstr "n'a pas autant de crochets" -#: musicxml2ly.py:2621 -msgid "LANG" -msgstr "LANG" +#: horizontal-bracket-engraver.cc:87 +msgid "conflicting note group events" +msgstr "événements de groupe de notes conflictuels" -#: musicxml2ly.py:2623 -msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly" -msgstr "" -"utiliser un autre fichier linguistique « lang.ly » et ses noms de notes, \n" -"comme « deutsch » pour deutsch.ly" +#: hyphen-engraver.cc:104 +msgid "removing unterminated hyphen" +msgstr "retrait du trait d'union sans suite" -#: musicxml2ly.py:2629 -msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." -msgstr "" -"ne pas convertir les emplacements (^, _ ou -) des articulations, \n" -"nuances, etc." +#: hyphen-engraver.cc:118 +msgid "unterminated hyphen; removing" +msgstr "trait d'union sans suite ; escamoté" -#: musicxml2ly.py:2635 -msgid "do not convert beaming information, use lilypond's automatic beaming instead" +#: pango-font.cc:187 open-type-font.cc:319 +#, c-format +msgid "FT_Get_Glyph_Name () error: %s" +msgstr "Erreur FT_Get_Glyph_Name () : %s" + +#: pango-font.cc:204 +#, c-format +msgid "" +"Glyph has no name, but font supports glyph naming.\n" +"Skipping glyph U+%0X, file %s" msgstr "" -"ne pas convertir les informations de ligature ; \n" -"laisser LilyPond gérer les ligatures automatiques" +"Le glyphe n'a pas de nom alors que la fonte prend en charge leur nommage.\n" +"Glyphe U+%0X ignoré dans le fichier %s" -#: musicxml2ly.py:2643 -msgid "set output filename to FILE, stdout if -" -msgstr "produire la sortie dans FICHIER (stdout si -)" +#: pango-font.cc:241 +#, c-format +msgid "no PostScript font name for font `%s'" +msgstr "« %s » n'est pas un fichier de fonte PostScript" -#: musicxml2ly.py:2726 -#, python-format -msgid "unknown part in part-list: %s" -msgstr "la partie %s n'est pas mentionnée dans part-list" +#: pango-font.cc:290 +msgid "FreeType face has no PostScript font name" +msgstr "Caractère FreeType sans nom de police PostScript" -#: musicxml2ly.py:2788 -msgid "Input is compressed, extracting raw MusicXML data from stdin" -msgstr "Le fichier d'entrée est compressé. Extraction des données MusicXML brutes" +#: midi-item.cc:92 +#, c-format +msgid "no such MIDI instrument: `%s'" +msgstr "instrument MIDI non répertorié : « %s »" -#: musicxml2ly.py:2791 -#, python-format -msgid "Input file %s is compressed, extracting raw MusicXML data" -msgstr "" -"Le fichier d'entrée (%s) est compressé. \n" -"Extraction des données MusicXML brutes" +#: note-heads-engraver.cc:76 +msgid "NoteEvent without pitch" +msgstr "NoteEvent sans hauteur" -#: musicxml2ly.py:2821 -msgid "Reading MusicXML from Standard input ..." -msgstr "Lecture du fichier MusicXML à partir de l'entrée standard..." +#: rest.cc:159 +#, c-format +msgid "rest `%s' not found" +msgstr "silence « %s » inconnu" -#: musicxml2ly.py:2823 -#, python-format -msgid "Reading MusicXML from %s ..." -msgstr "Lecture du fichier MusicXML %s..." +#: spaceable-grob.cc:94 +#, c-format +msgid "No spring between column %d and next one" +msgstr "Pas de tension entre la colonne %d et la suivante" -#: musicxml2ly.py:2856 -#, python-format -msgid "Output to `%s'" -msgstr "Fichier de sortie : « %s »" +#: beam-engraver.cc:147 +msgid "already have a beam" +msgstr "ligature déjà présente" -#: musicxml2ly.py:2922 -#, python-format -msgid "Unable to find input file %s" -msgstr "impossible de trouver le fichier d'entrée : « %s »" +#: beam-engraver.cc:230 +msgid "unterminated beam" +msgstr "ligature non terminée" -#: getopt-long.cc:140 -#, c-format -msgid "option `%s' requires an argument" -msgstr "L'option « %s » requiert un argument" +#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150 +msgid "stem must have Rhythmic structure" +msgstr "la hampe doit avoir une structure Rythmic" + +#: beam-engraver.cc:274 +msgid "stem does not fit in beam" +msgstr "la hampe ne s'insère pas dans la ligature" + +#: beam-engraver.cc:275 +msgid "beam was started here" +msgstr "la ligature a débuté ici" -#: getopt-long.cc:144 +#: music-iterator.cc:182 +msgid "Sending non-event to context" +msgstr "Envoi d'un non-événement au contexte" + +#: context.cc:149 #, c-format -msgid "option `%s' does not allow an argument" -msgstr "L'option « %s » s'emploie sans argument" +msgid "cannot find or create new `%s'" +msgstr "impossible de trouver ou créer un nouveau « %s »" -#: getopt-long.cc:148 +#: context.cc:207 #, c-format -msgid "unrecognized option: `%s'" -msgstr "option non reconnue : « %s »" +msgid "cannot find or create `%s' called `%s'" +msgstr "impossible de trouver ou créer « %s » appelé « %s »" -#: getopt-long.cc:154 +#: context.cc:269 #, c-format -msgid "invalid argument `%s' to option `%s'" -msgstr "argument « %s » invalide pour l'option « %s »" +msgid "Invalid CreateContext event: Cannot create %s context" +msgstr "Événement CreateContext invalide : impossible de créer le contexte %s" -#: warn.cc:68 grob.cc:566 input.cc:82 +#: context.cc:400 #, c-format -msgid "programming error: %s" -msgstr "erreur de programmation : %s" +msgid "cannot find or create: `%s'" +msgstr "impossible de trouver ou créer « %s »" -#: warn.cc:69 input.cc:83 -msgid "continuing, cross fingers" -msgstr "poursuite ; croisons les doigts." +#: dispatcher.cc:82 +msgid "Event class should be a symbol" +msgstr "La classe Event devrait être un symbole" -#: accidental-engraver.cc:298 +#: dispatcher.cc:89 #, c-format -msgid "accidental typesetting list must begin with context-name: %s" -msgstr "" -"La saisie d'une liste d'altérations accidentelles doit débuter \n" -"par un nom de contexte : %s" +msgid "Unknown event class %s" +msgstr "Classe d'événement inconnue : « %s »" -#: accidental-engraver.cc:328 -#, c-format -msgid "procedure or context-name expected for accidental rule, found %s" +#: paper-column-engraver.cc:245 +msgid "forced break was overridden by some other event, should you be using bar checks?" msgstr "" -"procédure ou nom de contexte requis pour la règle d'altération accidentelle,\n" -"%s trouvé" +"Un saut explicite a été outrepassé par un autre événement.\n" +"Positionnez quelques contrôles de mesure (bar check) pour vérifier." -#: accidental.cc:187 -#, c-format -msgid "Could not find glyph-name for alteration %s" -msgstr "Aucun nom de glyphe ne correspond à l'altération %s" +#: tie-engraver.cc:116 +msgid "unterminated tie" +msgstr "liaison de prolongation non terminée" -#: accidental.cc:202 -msgid "natural alteration glyph not found" -msgstr "pas de glyphe correspondant au bécarre" +#: tie-engraver.cc:312 +msgid "lonely tie" +msgstr "liaison de prolongation orpheline" -#: align-interface.cc:305 -msgid "tried to get a translation for something that is no child of mine" -msgstr "tentative de déplacement d'un élément sans relation directe" +#: dynamic-engraver.cc:197 +msgid "cannot find start of (de)crescendo" +msgstr "impossible de repérer le début du (de)crescendo" -#: all-font-metrics.cc:143 -#, c-format -msgid "cannot find font: `%s'" -msgstr "fonte « %s » introuvable" +#: dynamic-engraver.cc:206 +msgid "already have a decrescendo" +msgstr "decrescendo déjà présent" -#: apply-context-iterator.cc:31 -msgid "\\applycontext argument is not a procedure" -msgstr "l'argument \\applycontext n'est pas une procédure" +#: dynamic-engraver.cc:208 +msgid "already have a crescendo" +msgstr "crescendo déjà présent" -#: auto-change-iterator.cc:63 change-iterator.cc:61 +#: dynamic-engraver.cc:211 +msgid "cresc starts here" +msgstr "le crescendo débute ici" + +#: dynamic-engraver.cc:339 +msgid "unterminated (de)crescendo" +msgstr "(de)crescendo non terminé" + +#: paper-score.cc:122 minimal-page-breaking.cc:40 +msgid "Calculating line breaks..." +msgstr "Calcul des sauts de ligne..." + +#: paper-score.cc:135 #, c-format -msgid "cannot change, already in translator: %s" -msgstr "modification impossible, c'est déjà dans le traducteur : %s" +msgid "Element count %d (spanners %d) " +msgstr "%d éléments dénombrés (%d extensions)" -#: axis-group-engraver.cc:78 -msgid "Axis_group_engraver: vertical group already has a parent" -msgstr "Axis_group_engraver : le groupe vertical a déjà un parent" +#: paper-score.cc:139 +msgid "Preprocessing graphical objects..." +msgstr "Pré-traitement des éléments graphiques..." -#: axis-group-engraver.cc:79 -msgid "are there two Axis_group_engravers?" -msgstr "Axis_group_engraver redondant" +#: paper-score.cc:163 optimal-page-breaking.cc:208 +#: page-turn-page-breaking.cc:248 +msgid "Drawing systems..." +msgstr "Dessin des systèmes..." -#: axis-group-engraver.cc:80 -msgid "removing this vertical group" -msgstr "retrait de ce groupe vertical" +#: mensural-ligature-engraver.cc:96 +msgid "ligature with less than 2 heads -> skipping" +msgstr "ligature avec moins de 2 têtes -> escamotage" -#: axis-group-interface.cc:532 -msgid "an outside-staff object should have a direction, defaulting to up" +#: mensural-ligature-engraver.cc:123 +msgid "cannot determine pitch of ligature primitive -> skipping" +msgstr "impossible de déterminer la hauteur de la primitive de ligature -> escamotage" + +#: mensural-ligature-engraver.cc:137 +msgid "single note ligature - skipping" +msgstr "ligature sur note unique -> escamotage" + +#: mensural-ligature-engraver.cc:148 +msgid "prime interval within ligature -> skipping" +msgstr "intervale de prime dans la ligature -> escamotage" + +#: mensural-ligature-engraver.cc:159 +msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" +msgstr "ligature mensurale : aucune durée parmi Mx, L, B, S -> escamotage" + +#: mensural-ligature-engraver.cc:202 +msgid "semibrevis must be followed by another one -> skipping" +msgstr "une ronde doit être suivie d'une autre -> escamotage" + +#: mensural-ligature-engraver.cc:212 +msgid "" +"semibreves can only appear at the beginning of a ligature,\n" +"and there may be only zero or two of them" msgstr "" -"un objet externe à la portée devrait avoir un positionnement.\n" -"Placé par défaut au dessus." +"les rondes ne peuvent apparaître qu'en début de ligature,\n" +"et il ne peut y en avoir que zéro ou deux" -#: bar-check-iterator.cc:73 +#: mensural-ligature-engraver.cc:232 +msgid "" +"invalid ligatura ending:\n" +"when the last note is a descending brevis,\n" +"the penultimate note must be another one,\n" +"or the ligatura must be LB or SSB" +msgstr "" +"terminaison de ligature invalide :\n" +"lorsque la dernière note est une brève descendante,\n" +"l'avant dernière note doit en être une autre,\n" +"sinon la ligature doit être LB ou SSB" + +#: mensural-ligature-engraver.cc:386 +msgid "unexpected case fall-through" +msgstr "cas inattendu et non interprétable" + +#: piano-pedal-engraver.cc:298 #, c-format -msgid "barcheck failed at: %s" -msgstr "échec du contrôle de mesure (barcheck) à : %s" +msgid "expect 3 strings for piano pedals, found: %ld" +msgstr "Les pédales de piano nécessitent 3 cordes. Il y en a %ld" -#: beam-engraver.cc:126 -msgid "already have a beam" -msgstr "lien déjà présent" +#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324 +#: piano-pedal-performer.cc:104 +#, c-format +msgid "cannot find start of piano pedal: `%s'" +msgstr "début de la pédale de piano indéterminé : « %s »" -#: beam-engraver.cc:202 -msgid "unterminated beam" -msgstr "lien non terminé" +#: piano-pedal-engraver.cc:359 +#, c-format +msgid "cannot find start of piano pedal bracket: `%s'" +msgstr "début du crochet de la pédale de piano indéterminé : « %s »" -#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138 -msgid "stem must have Rhythmic structure" -msgstr "la hampe doit avoir une structure Rythmic" +#: input.cc:131 source-file.cc:179 source-file.cc:194 +msgid "position unknown" +msgstr "position inconnue" -#: beam-engraver.cc:252 -msgid "stem does not fit in beam" -msgstr "la hampe ne s'insère pas dans le lien" +#: paper-outputter-scheme.cc:41 +#, c-format +msgid "Layout output to `%s'..." +msgstr "Sortie mise en page vers « %s »..." -#: beam-engraver.cc:253 -msgid "beam was started here" -msgstr "le lien a débuté ici" +#: general-scheme.cc:306 +msgid "infinity or NaN encountered while converting Real number" +msgstr "Infini ou valeur non numérique rencontré lors de la conversion d'un nombre réel" -#: beam-quanting.cc:307 -msgid "no feasible beam position" -msgstr "nulle part où positionner le lien" +#: general-scheme.cc:307 +msgid "setting to zero" +msgstr "initialisation à zéro" -#: beam.cc:160 -msgid "removing beam with no stems" -msgstr "suppression du lien ayant moins de deux hampes" +#: general-scheme.cc:543 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "" +"La sortie contient l'infini ou une valeur non numérique.\n" +"Substitution par 0.0" -#: beam.cc:1078 -msgid "no viable initial configuration found: may not find good beam slope" +#: music.cc:151 +#, c-format +msgid "octave check failed; expected \"%s\", found: \"%s\"" msgstr "" -"pas de configuration initiale viable repérée : \n" -"la pente du lien pourrait être inesthétique." +"Échec de vérification d'octave.\n" +"Aurait dû être \"%s\", \"%s\" obtenu" + +#: music.cc:219 +msgid "(normalized pitch)" +msgstr "(hauteur normalisée)" -#: break-alignment-interface.cc:195 +#: music.cc:223 #, c-format -msgid "No spacing entry from %s to `%s'" -msgstr "Pas d'espacement entre %s et « %s »" +msgid "Transposing %s by %s makes alteration larger than double" +msgstr "La transposition de %s à %s crée des altérations supérieures aux doubles" -#: change-iterator.cc:23 +#: translator-ctors.cc:65 #, c-format -msgid "cannot change `%s' to `%s'" -msgstr "impossible de changer « %s » en « %s »" +msgid "unknown translator: `%s'" +msgstr "translateur inconnu : « %s »" -#. FIXME: constant error message. -#: change-iterator.cc:82 -msgid "cannot find context to switch to" -msgstr "impossible de repérer le contexte vers lequel commuter" +#: partial-iterator.cc:45 +msgid "trying to use \\partial after the start of a piece" +msgstr "\\partial ne devrait intervenir qu'en début de morceau" -#. We could change the current translator's id, but that would make -#. errors hard to catch. -#. -#. last->translator_id_string () = get_change -#. ()->change_to_id_string (); -#: change-iterator.cc:91 -#, c-format -msgid "not changing to same context type: %s" -msgstr "pas de changement vers le même type de contexte : %s" +#: new-fingering-engraver.cc:106 +msgid "cannot add text scripts to individual note heads" +msgstr "impossible d'ajouter du texte à des têtes de notes individuelles" + +#: new-fingering-engraver.cc:250 +msgid "no placement found for fingerings" +msgstr "nulle part où positionner des doigtés" + +#: new-fingering-engraver.cc:251 +msgid "placing below" +msgstr "on les place en dessous" + +#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72 +msgid "cannot find start of ligature" +msgstr "impossible de trouver le début d'une ligature" -#. FIXME: uncomprehensable message -#: change-iterator.cc:95 -msgid "none of these in my family" -msgstr "aucun de ceux-ci dans ma famille" +#: ligature-engraver.cc:109 +msgid "no right bound" +msgstr "pas de borne à droite" -#: chord-tremolo-engraver.cc:88 -msgid "No tremolo to end" -msgstr "Il n'y a aucun trémolo à terminer" +#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85 +msgid "already have a ligature" +msgstr "a déjà une ligature" -#: chord-tremolo-engraver.cc:110 -msgid "unterminated chord tremolo" -msgstr "accord en tremolo non terminé" +#: ligature-engraver.cc:140 +msgid "no left bound" +msgstr "pas de borne à gauche" -#: chord-tremolo-iterator.cc:35 -#, c-format -msgid "expect 2 elements for chord tremolo, found %d" -msgstr "un accord de tremolo requiert 2 éléments, %d trouvé(s)" +#: ligature-engraver.cc:185 +msgid "unterminated ligature" +msgstr "ligature non terminée" + +#: ligature-engraver.cc:214 +msgid "ignoring rest: ligature may not contain rest" +msgstr "le silence est ignoré : une ligature ne peut contenir de silence" -#: clef.cc:54 +#: ligature-engraver.cc:215 +msgid "ligature was started here" +msgstr "la ligature a débuté ici" + +#: auto-change-iterator.cc:74 change-iterator.cc:72 #, c-format -msgid "clef `%s' not found" -msgstr "clé `%s' introuvable" +msgid "cannot change, already in translator: %s" +msgstr "modification impossible, c'est déjà dans le translateur : %s" -#: cluster.cc:110 +#: accidental-engraver.cc:180 #, c-format -msgid "unknown cluster style `%s'" -msgstr "style de cluster inconnu : « %s »" +msgid "accidental typesetting list must begin with context-name: %s" +msgstr "" +"La saisie d'une liste d'altérations accidentelles doit débuter \n" +"par un nom de contexte : %s" -#: cluster.cc:147 -msgid "junking empty cluster" -msgstr "mise au rebut d'un cluster vide" +#: accidental-engraver.cc:210 +#, c-format +msgid "procedure or context-name expected for accidental rule, found %s" +msgstr "" +"procédure ou nom de contexte requis pour la règle d'altération accidentelle,\n" +"%s trouvé" -#: coherent-ligature-engraver.cc:100 +#: ttf.cc:481 ttf.cc:530 #, c-format -msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" -msgstr "Coherent_ligature_engraver : initialise `spacing-increment=0.01': ptr=%ul" +msgid "font index %d too large for font `%s', using index 0" +msgstr "" +"index %d trop grand pour la fonte « %s » ;\n" +"réindexé sur 0" -#. if we get to here, just put everything on one line -#: constrained-breaking.cc:176 constrained-breaking.cc:193 -msgid "cannot find line breaking that satisfies constraints" -msgstr "impossible de trouver un saut de ligne qui satisfasse aux contraintes" +#: ttf.cc:513 ttf.cc:565 +msgid "font index must be non-negative, using index 0" +msgstr "l'index de fonte ne peut être négatif ; réindexé sur 0" -#: context-def.cc:130 +#: break-alignment-interface.cc:206 #, c-format -msgid "program has no such type: `%s'" -msgstr "Le programme n'a pas de tel type : « %s »" +msgid "No spacing entry from %s to `%s'" +msgstr "Pas d'espacement entre %s et « %s »" -#: context-property.cc:32 -msgid "need symbol arguments for \\override and \\revert" -msgstr "nécessite des arguments symboliques pour \\override et \\revert" +#: minimal-page-breaking.cc:44 +msgid "Calculating page breaks..." +msgstr "Calcul des sauts de page..." -#: context.cc:139 +#: vaticana-ligature-engraver.cc:400 #, c-format -msgid "cannot find or create new `%s'" -msgstr "impossible de trouver ou créer un nouveau « %s »" +msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style" +msgstr "" +"préfixe(s) « %s » ignoré(s) pour la tête de note, \n" +"selon les restrictions du style de ligature sélectionné" -#: context.cc:197 +#: vaticana-ligature-engraver.cc:736 #, c-format -msgid "cannot find or create `%s' called `%s'" -msgstr "impossible de trouver ou créer « %s » appelé « %s »" +msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" +msgstr "Vaticana_ligature_engraver : fixé `spacing-increment = %f': ptr=%ul" -#: context.cc:259 +#: paper-book.cc:214 #, c-format -msgid "Invalid CreateContext event: Cannot create %s context" -msgstr "Événement CreateContext invalide : impossible de créer le contexte %s" +msgid "program option -dprint-pages not supported by backend `%s'" +msgstr "l'option -dprint-pages n'est pas opérationnelle avec le moteur %s" -#: context.cc:390 +#: paper-book.cc:233 #, c-format -msgid "cannot find or create: `%s'" -msgstr "impossible de trouver ou créer « %s »" +msgid "program option -dpreview not supported by backend `%s'" +msgstr "l'option -dpreview n'est pas opérationnelle avec le moteur %s" -#: custos.cc:77 -#, c-format -msgid "custos `%s' not found" -msgstr "custode « %s » introuvable" +#: output-def.cc:235 +msgid "margins do not fit with line-width, setting default values" +msgstr "" +"les marges ne sont pas en cohérence avec la longueur de ligne ;\n" +"retour aux valeurs par défaut" -#: dispatcher.cc:71 -msgid "Event class should be a symbol" -msgstr "La classe Event devrait être un symbole" +#: output-def.cc:242 +msgid "systems run off the page due to improper paper settings, setting default values" +msgstr "" +"les systèmes débordent de la page en raison de réglages de papier erronés ;\n" +"retour aux valeurs par défaut" -#: dispatcher.cc:78 +#: score-engraver.cc:78 #, c-format -msgid "Unknown event class %s" -msgstr "Classe d'événement inconnue : « %s »" +msgid "cannot find `%s'" +msgstr "impossible de trouver « %s »" + +#: score-engraver.cc:80 +msgid "Music font has not been installed properly." +msgstr "Les fontes musicales n'ont pas été installées correctement." -#: dots.cc:37 +#: score-engraver.cc:82 #, c-format -msgid "dot `%s' not found" -msgstr "point « %s » introuvable" +msgid "Search path `%s'" +msgstr "Chemin de recherche : « %s »" -#: dynamic-engraver.cc:186 -msgid "cannot find start of (de)crescendo" -msgstr "impossible de repérer le début du (de)crescendo" +#: score-engraver.cc:84 +msgid "Aborting" +msgstr "Abandon" -#: dynamic-engraver.cc:195 -msgid "already have a decrescendo" -msgstr "decrescendo déjà présent" +#: note-collision.cc:497 +msgid "ignoring too many clashing note columns" +msgstr "trop d'empilements de notes se chevauchent. On fera au mieux." -#: dynamic-engraver.cc:197 -msgid "already have a crescendo" -msgstr "crescendo déjà présent" +#. fixme: be more verbose. +#: volta-engraver.cc:111 +msgid "cannot end volta spanner" +msgstr "extension de reprise sans terminaison" -#: dynamic-engraver.cc:200 -msgid "cresc starts here" -msgstr "le crescendo débute ici" +#: volta-engraver.cc:121 +msgid "already have a volta spanner, ending that one prematurely" +msgstr "extension de reprise déjà présente, fin prématurée de celle-ci" -#: dynamic-engraver.cc:328 -msgid "unterminated (de)crescendo" -msgstr "(de)crescendo non terminé" +#: volta-engraver.cc:125 +msgid "also already have an ended spanner" +msgstr "a déjà une extension terminée" -#: extender-engraver.cc:142 extender-engraver.cc:151 -msgid "unterminated extender" -msgstr "prolongation non terminée" +#: volta-engraver.cc:126 +msgid "giving up" +msgstr "abandon" -#: font-config-scheme.cc:140 font-config.cc:57 -#, c-format -msgid "failed adding font directory: %s" -msgstr "échec lors de l'ajout d'un répertoire de fontes : « %s »" +#: page-layout-problem.cc:322 +msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed" +msgstr "" +"impossible de faire tenir la musique sur la page :\n" +" justification demandée, mais page déjà compressée" -#: font-config-scheme.cc:142 font-config.cc:59 +#: page-layout-problem.cc:325 #, c-format -msgid "adding font directory: %s" -msgstr "ajout d'un répertoire de fontes : « %s »" +msgid "cannot fit music on page: overflow is %f" +msgstr "impossible de faire tenir la musique sur la page. Débordement de %f" -#: font-config-scheme.cc:156 -#, c-format -msgid "failed adding font file: %s" -msgstr "échec lors de l'ajout d'un fichier de fontes : « %s »" +#: page-layout-problem.cc:327 +msgid "compressing music to fit" +msgstr "compression de la musique pour que cela tienne" -#: font-config-scheme.cc:158 -#, c-format -msgid "adding font file: %s" -msgstr "ajout d'un fichier de fontes : « %s »" +#: page-layout-problem.cc:765 +msgid "staff-affinities should only decrease" +msgstr "staff-affinities devraient aller en ordre décroissant" -#: font-config.cc:28 -msgid "Initializing FontConfig..." -msgstr "Initialisation de FontConfig..." +#: apply-context-iterator.cc:42 +msgid "\\applycontext argument is not a procedure" +msgstr "l'argument \\applycontext n'est pas une procédure" + +#. FIXME: constant error message. +#: mark-engraver.cc:157 +msgid "rehearsalMark must have integer value" +msgstr "rehearsalMark doit être un entier" + +#: mark-engraver.cc:163 +msgid "mark label must be a markup object" +msgstr "les étiquettes de marque doivent être des objets de type \"markup\"" -#: font-config.cc:44 +#: new-dynamic-engraver.cc:142 #, c-format -msgid "Rebuilding FontConfig cache %s, this may take a while..." -msgstr "Reconstitution du cache FontConfig %s. Patientez..." +msgid "" +"unknown crescendo style: %s\n" +"defaulting to hairpin." +msgstr "" +"style de crescendo inconnu : %s\n" +"retour à la valeur par défaut (soufflet)." -#: font-config.cc:63 -msgid "Building font database." -msgstr "Construction de la base de donnée des fontes." +#: new-dynamic-engraver.cc:200 +#, c-format +msgid "unterminated %s" +msgstr "%s non terminé(e)" -#: general-scheme.cc:202 -msgid "infinity or NaN encountered while converting Real number" -msgstr "Infini ou valeur non numérique rencontré lors de la conversion d'un nombre réel" +#: stem-engraver.cc:103 +msgid "tremolo duration is too long" +msgstr "durée du tremolo trop longue" -#: general-scheme.cc:203 -msgid "setting to zero" -msgstr "initialisation à zéro" +#. FIXME: +#: stem-engraver.cc:140 +#, c-format +msgid "adding note head to incompatible stem (type = %d)" +msgstr "Ajout d'une tête de note à une hampe incompatible (type = %d)" -#: general-scheme.cc:422 output-ps.scm:63 -msgid "Found infinity or nan in output. Substituting 0.0" -msgstr "" -"La sortie contient l'infini ou une valeur non numérique. \n" -"Substitution par 0.0" +#: stem-engraver.cc:142 +msgid "maybe input should specify polyphonic voices" +msgstr "la source devrait spécifier des voix polyphoniques" -#: glissando-engraver.cc:94 -msgid "unterminated glissando" -msgstr "glissando non terminé" +#: lily-lexer.cc:264 +msgid "include files are not allowed in safe mode" +msgstr "l'inclusion de fichiers n'est pas permise en mode sans échec" -#: global-context-scheme.cc:85 global-context-scheme.cc:103 -msgid "no music found in score" -msgstr "Il n'y a pas de musique dans cette partition" +#: lily-lexer.cc:291 +#, c-format +msgid "identifier name is a keyword: `%s'" +msgstr "Le nom de l'identificateur est un mot clé : « %s »" -#: global-context-scheme.cc:93 -msgid "Interpreting music... " -msgstr "Interprétation en cours de la musique..." +#: lily-lexer.cc:312 +#, c-format +msgid "error at EOF: %s" +msgstr "erreur à la fin du fichier (EOF) : %s" -#: global-context-scheme.cc:116 +#: lyric-combine-music-iterator.cc:337 #, c-format -msgid "elapsed time: %.2f seconds" -msgstr "temps écoulé : %.2f secondes" +msgid "cannot find Voice `%s'" +msgstr "impossible de repérer la voix (Voice) « %s »" -#: gregorian-ligature-engraver.cc:59 +#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109 #, c-format -msgid "\\%s ignored" -msgstr "\\%s ignoré(e)" +msgid "cannot find file: `%s'" +msgstr "fichier non trouvé : « %s »" -#: gregorian-ligature-engraver.cc:64 +#: includable-lexer.cc:73 lily-parser-scheme.cc:100 #, c-format -msgid "implied \\%s added" -msgstr "\\%s implicite ajouté(e)" +msgid "(search path: `%s')" +msgstr "(chemin de recherche : « %s »)" -#. ligature may not start with 2nd head of pes or flexa -#: gregorian-ligature-engraver.cc:213 -msgid "cannot apply `\\~' on first head of ligature" -msgstr "Impossible d'appliquer « \\~ » à la première tête de ligature" +#: note-column.cc:135 +msgid "cannot have note heads and rests together on a stem" +msgstr "impossible de superposer une note et un silence sur une même hampe" -#. (pitch == prev_pitch) -#: gregorian-ligature-engraver.cc:225 -msgid "cannot apply `\\~' on heads with identical pitch" -msgstr "Impossible d'appliquer « \\~ » à des têtes ayant la même hauteur" +#: beam.cc:180 +msgid "removing beam with no stems" +msgstr "suppression d'une ligature ayant moins de deux hampes" -#: grob-interface.cc:57 -#, c-format -msgid "Unknown interface `%s'" -msgstr "Interface inconnue « %s »" +#. We are completely screwed. +#: beam.cc:1274 +msgid "no viable initial configuration found: may not find good beam slope" +msgstr "" +"pas de configuration initiale viable repérée : \n" +"la pente de la ligature pourrait être inesthétique." -#: grob-interface.cc:68 +#: slur-engraver.cc:93 #, c-format -msgid "Grob `%s' has no interface for property `%s'" -msgstr "L'objet graphique (Grob) « %s » n'a pas d'interface pour la propriété « %s »" +msgid "direction of %s invalid: %d" +msgstr "l'orientation de %s n'est pas valide : %d" -#: grob-property.cc:34 -#, c-format -msgid "%d: %s" -msgstr "%d : %s" +#: slur-engraver.cc:162 +msgid "unterminated slur" +msgstr "liaison non terminée" -#: grob-property.cc:173 +#: slur-engraver.cc:174 +msgid "cannot end slur" +msgstr "impossible de terminer la liaison" + +#: font-config.cc:40 +msgid "Initializing FontConfig..." +msgstr "Initialisation de FontConfig..." + +#: font-config.cc:55 font-config-scheme.cc:152 #, c-format -msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" -msgstr "dépendance circulaire : calculation-in-progress rencontrée pour #'%s (%s)" +msgid "failed adding font directory: %s" +msgstr "échec lors de l'ajout d'un répertoire de fontes : « %s »" -#: grob.cc:251 -msgid "Infinity or NaN encountered" -msgstr "infini ou valeur non numérique rencontré lors de la conversion d'un nombre réel" +#: font-config.cc:57 font-config-scheme.cc:154 +#, c-format +msgid "adding font directory: %s" +msgstr "ajout d'un répertoire de fontes : « %s »" -#: hairpin.cc:186 -msgid "decrescendo too small" -msgstr "decrescendo trop petit" +#: font-config.cc:61 +msgid "Building font database..." +msgstr "Construction de la base de donnée des fontes..." -#: horizontal-bracket-engraver.cc:68 -msgid "do not have that many brackets" -msgstr "n'a pas autant de crochets" +#. find out the ideal number of pages +#: optimal-page-breaking.cc:62 +msgid "Finding the ideal number of pages..." +msgstr "Détermination du nombre optimal de pages..." -#: horizontal-bracket-engraver.cc:77 -msgid "conflicting note group events" -msgstr "événements de groupe de notes conflictuels" +#: optimal-page-breaking.cc:85 +msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page" +msgstr "incompatilité entre systems-per-page et page-count ; systems-per-page ignoré" -#: hyphen-engraver.cc:93 -msgid "removing unterminated hyphen" -msgstr "retrait du trait d'union sans suite" +#: optimal-page-breaking.cc:105 +msgid "Fitting music on 1 page..." +msgstr "Répartition de la musique sur une page..." -#: hyphen-engraver.cc:107 -msgid "unterminated hyphen; removing" -msgstr "trait d'union sans suite ; escamoté" +#: optimal-page-breaking.cc:107 +#, c-format +msgid "Fitting music on %d pages..." +msgstr "Répartition de la musique sur %d pages..." -#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:110 +#: optimal-page-breaking.cc:109 #, c-format -msgid "cannot find file: `%s'" -msgstr "fichier non trouvé : « %s »" +msgid "Fitting music on %d or %d pages..." +msgstr "Répartition de la musique sur %d à %d pages..." -#: includable-lexer.cc:55 lily-parser-scheme.cc:101 +#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173 #, c-format -msgid "(search path: `%s')" -msgstr "(chemin de recherche : « %s »)" +msgid "trying %d systems" +msgstr "tentative pour %d systèmes" -#: input.cc:112 source-file.cc:173 source-file.cc:188 -msgid "position unknown" -msgstr "position inconnue" +#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201 +#, c-format +msgid "best score for this sys-count: %f" +msgstr "meilleur résultat pour cette configuration « sys-count » : %f" -#: key-signature-interface.cc:74 +#: accidental.cc:200 #, c-format -msgid "No glyph found for alteration: %s" -msgstr "Pas de glyphe pour l'altération : %s" +msgid "Could not find glyph-name for alteration %s" +msgstr "Aucun nom de glyphe ne correspond à l'altération %s" -#: key-signature-interface.cc:84 -msgid "alteration not found" -msgstr "altération non trouvée" +#: accidental.cc:215 +msgid "natural alteration glyph not found" +msgstr "pas de glyphe correspondant au bécarre" -#: ligature-bracket-engraver.cc:62 ligature-engraver.cc:93 -msgid "cannot find start of ligature" -msgstr "impossible de trouver le début d'une ligature" +#: system.cc:197 +#, c-format +msgid "Element count %d" +msgstr "%d éléments dénombrés." -#: ligature-bracket-engraver.cc:75 ligature-engraver.cc:120 -msgid "already have a ligature" -msgstr "a déjà une ligature" +#: system.cc:303 +#, c-format +msgid "Grob count %d" +msgstr "%d objet graphiques (grob) dénombrés" -#: ligature-engraver.cc:98 -msgid "no right bound" -msgstr "pas de borne à droite" +#: slur.cc:362 +#, c-format +msgid "Ignoring grob for slur: %s. avoid-slur not set?" +msgstr "" +"objet graphique (grob) non concerné par la liaison : %s.\n" +"avoid-slur non définie ?" -#: ligature-engraver.cc:129 -msgid "no left bound" -msgstr "pas de borne à gauche" +#: font-config-scheme.cc:168 +#, c-format +msgid "failed adding font file: %s" +msgstr "échec lors de l'ajout d'un fichier de fontes : « %s »" -#: ligature-engraver.cc:173 -msgid "unterminated ligature" -msgstr "ligature non terminée" +#: font-config-scheme.cc:170 +#, c-format +msgid "adding font file: %s" +msgstr "ajout d'un fichier de fontes : « %s »" -#: ligature-engraver.cc:202 -msgid "ignoring rest: ligature may not contain rest" -msgstr "le silence est ignoré : une ligature ne peut contenir de silence" +#: hairpin.cc:186 +msgid "decrescendo too small" +msgstr "decrescendo trop petit" -#: ligature-engraver.cc:203 -msgid "ligature was started here" -msgstr "la ligature a débuté ici" +#: extender-engraver.cc:170 extender-engraver.cc:179 +msgid "unterminated extender" +msgstr "prolongation ou extenseur non terminé" -#: lily-guile.cc:78 +#: lily-guile.cc:89 #, c-format msgid "(load path: `%s')" msgstr "(chemin de chargement : « %s »)" -#: lily-guile.cc:428 +#: lily-guile.cc:437 #, c-format msgid "cannot find property type-check for `%s' (%s)." msgstr "vérification du type de propriété pour « %s » (%s) non trouvée" -#: lily-guile.cc:431 +#: lily-guile.cc:440 msgid "perhaps a typing error?" msgstr "Probable faute de frappe" -#: lily-guile.cc:438 +#: lily-guile.cc:447 msgid "doing assignment anyway" msgstr "affectation faite malgré tout" -#: lily-guile.cc:450 +#: lily-guile.cc:459 #, c-format msgid "type check for `%s' failed; value `%s' must be of type `%s'" msgstr "" "la vérification du type de « %s » a échoué ; \n" " la valeur « %s » doit être du type « %s »" -#: lily-lexer.cc:252 -msgid "include files are not allowed in safe mode" -msgstr "l'inclusion de fichiers n'est pas permise en mode sans échec" - -#: lily-lexer.cc:271 -#, c-format -msgid "identifier name is a keyword: `%s'" -msgstr "Le nom de l'identificateur est un mot clé : « %s »" - -#: lily-lexer.cc:286 -#, c-format -msgid "error at EOF: %s" -msgstr "erreur à la fin du fichier (EOF) : %s" - -#: lily-parser-scheme.cc:30 -#, c-format -msgid "deprecated function called: %s" -msgstr "appel à une fonction obsolète : %s" - -#: lily-parser-scheme.cc:83 -#, c-format -msgid "Changing working directory to: `%s'" -msgstr "Modification du répertoire de travail pour : « %s »" - -#: lily-parser-scheme.cc:100 -#, c-format -msgid "cannot find init file: `%s'" -msgstr "impossible de trouver le fichier d'initialisation : « %s »" - -#: lily-parser-scheme.cc:119 -#, c-format -msgid "Processing `%s'" -msgstr "Traitement de « %s »" - -#: lily-parser.cc:95 -msgid "Parsing..." -msgstr "Analyse..." - -#: lily-parser.cc:123 -msgid "braces do not match" -msgstr "accolades non pairées" - -#: lyric-combine-music-iterator.cc:329 -#, c-format -msgid "cannot find Voice `%s'" -msgstr "impossible de repérer la voix (Voice) « %s »" - -#: lyric-engraver.cc:162 -msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." -msgstr "Syllabe sans note de rattachement. Utiliser \\lyricsto ou associatedVoice." - -#: main.cc:97 +#: main.cc:109 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -1724,7 +2267,7 @@ msgstr "" "sous certaines conditions.\n" "Invoquez « %s --warranty » pour plus d'informations.\n" -#: main.cc:103 +#: main.cc:115 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License version 2\n" @@ -1754,11 +2297,11 @@ msgstr "" " écrire à la Free Software Foundation, Inc., 59 Temple Place - Suite 330, \n" "Boston, MA 02111-1307, USA.\n" -#: main.cc:134 +#: main.cc:146 msgid "SYM[=VAL]" msgstr "SYM[=VAL]" -#: main.cc:135 +#: main.cc:147 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." @@ -1767,65 +2310,65 @@ msgstr "" "à l'option Scheme SYM.\n" "Utiliser -dhelp pour avoir de l'aide." -#: main.cc:138 +#: main.cc:150 msgid "EXPR" msgstr "EXPR" -#: main.cc:138 +#: main.cc:150 msgid "evaluate scheme code" msgstr "évaluation du code Scheme" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:141 +#: main.cc:153 msgid "FORMATs" msgstr "FORMATs" -#: main.cc:141 +#: main.cc:153 msgid "dump FORMAT,... Also as separate options:" msgstr "" "produire FORMAT,...\n" "Aussi comme options séparées :" -#: main.cc:142 +#: main.cc:154 msgid "generate PDF (default)" msgstr "générer le PDF (par défaut)" -#: main.cc:143 +#: main.cc:155 msgid "generate PNG" msgstr "générer le PNG" -#: main.cc:144 +#: main.cc:156 msgid "generate PostScript" msgstr "générer le PostScript" -#: main.cc:146 +#: main.cc:158 msgid "FIELD" msgstr "CHAMP" -#: main.cc:146 +#: main.cc:158 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" msgstr "" -"écrire le champ d'en-tête CHAMP dans le\n" +"écrire le champ d'entête CHAMP dans le\n" "fichier nommé BASENAME.CHAMP" -#: main.cc:148 +#: main.cc:160 msgid "add DIR to search path" msgstr "ajouter RÉPERTOIRE au chemin de recherche" -#: main.cc:149 +#: main.cc:161 msgid "use FILE as init file" msgstr "" "utiliser FICHIER comme\n" "fichier d'initialisation" -#: main.cc:151 +#: main.cc:163 msgid "USER, GROUP, JAIL, DIR" msgstr "USER,GROUP,CAGE,RÉP" -#: main.cc:151 +#: main.cc:163 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" @@ -1833,19 +2376,20 @@ msgstr "" "chroot dans CAGE, devenir UTILISATEUR:GROUPE\n" "et cd dans RÉPERTOIRE" -#: main.cc:154 +#: main.cc:166 msgid "write output to FILE (suffix will be added)" msgstr "" "produire la sortie dans FICHIER \n" "(adjonction automatique du suffixe)" -#: main.cc:155 +#: main.cc:167 msgid "relocate using directory of lilypond program" msgstr "" "redétermine le chemin d'exécution\n" "des composants de LilyPond" -#: main.cc:221 +#. Do not update the copyright years here, run `make grand-replace' +#: main.cc:238 #, c-format msgid "" "Copyright (c) %s by\n" @@ -1855,468 +2399,244 @@ msgstr "" "%s et autres." #. No version number or newline here. It confuses help2man. -#: main.cc:249 +#: main.cc:265 #, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Utilisation : %s [OPTIONS]... FICHIER..." -#: main.cc:251 -#, c-format +#: main.cc:267 msgid "Typeset music and/or produce MIDI from FILE." msgstr "Composer la musique ou jouer en format MIDI à partir du FICHIER" -#: main.cc:253 -#, c-format +#: main.cc:269 msgid "LilyPond produces beautiful music notation." msgstr "LilyPond produit une jolie notation musicale" -#: main.cc:255 +#: main.cc:271 #, c-format msgid "For more information, see %s" msgstr "Pour plus d'informations, voir %s" -#: main.cc:257 -#, c-format +#: main.cc:273 msgid "Options:" msgstr "Options :" -#: main.cc:311 +#: main.cc:327 #, c-format msgid "expected %d arguments with jail, found: %u" msgstr "une cage requiert %d arguments, il y en a %u" -#: main.cc:325 +#: main.cc:341 #, c-format msgid "no such user: %s" msgstr "utilisateur inconnu : « %s »" -#: main.cc:327 +#: main.cc:343 #, c-format msgid "cannot get user id from user name: %s: %s" msgstr "" "impossible de repérer l'identifiant utilisateur à partir du nom d'utilisateur :\n" "%s : %s" -#: main.cc:342 +#: main.cc:358 #, c-format msgid "no such group: %s" msgstr "groupe inconnu : %s" -#: main.cc:344 +#: main.cc:360 #, c-format msgid "cannot get group id from group name: %s: %s" -msgstr "" -"impossible de repérer l'identifiant groupe à partir du nom de groupe :\n" -"%s : %s " - -#: main.cc:352 -#, c-format -msgid "cannot chroot to: %s: %s" -msgstr "impossible de chrooter vers : %s : %s" - -#: main.cc:359 -#, c-format -msgid "cannot change group id to: %d: %s" -msgstr "impossible de changer l'identifiant de groupe en : %d : %s" - -#: main.cc:365 -#, c-format -msgid "cannot change user id to: %d: %s" -msgstr "impossible de changer l'identifiant utilisateur en : %d : %s" - -#: main.cc:371 -#, c-format -msgid "cannot change working directory to: %s: %s" -msgstr "impossible de changer le répertoire de travail en : %s : %s" - -#: main.cc:611 -#, c-format -msgid "exception caught: %s" -msgstr "exception capturée : %s" - -#. FIXME: constant error message. -#: mark-engraver.cc:129 -msgid "rehearsalMark must have integer value" -msgstr "rehearsalMark doit être un entier" - -#: mark-engraver.cc:135 -msgid "mark label must be a markup object" -msgstr "les étiquettes de marque doivent être des objets de type \"markup\"" - -#: mensural-ligature-engraver.cc:85 -msgid "ligature with less than 2 heads -> skipping" -msgstr "ligature avec moins de 2 tête -> escamotage" - -#: mensural-ligature-engraver.cc:112 -msgid "cannot determine pitch of ligature primitive -> skipping" -msgstr "impossible de déterminer la hauteur de la primitive de ligature -> escamotage" - -#: mensural-ligature-engraver.cc:126 -msgid "single note ligature - skipping" -msgstr "ligature sur note unique -> escamotage" - -#: mensural-ligature-engraver.cc:138 -msgid "prime interval within ligature -> skipping" -msgstr "intervale de prime dans la ligature -> escamotage" - -#: mensural-ligature-engraver.cc:150 -msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" -msgstr "ligature mensurale : aucune durée parmi Mx, L, B, S -> escamotage" - -#: mensural-ligature-engraver.cc:198 -msgid "semibrevis must be followed by another one -> skipping" -msgstr "une ronde doit être suivie d'une autre -> escamotage" - -#: mensural-ligature-engraver.cc:209 -msgid "" -"semibreves can only appear at the beginning of a ligature,\n" -"and there may be only zero or two of them" -msgstr "" -"les rondes ne peuvent apparaître qu'en début de ligature,\n" -"et il ne peut y en avoir que zéro ou deux" - -#: mensural-ligature-engraver.cc:236 -msgid "" -"invalid ligatura ending:\n" -"when the last note is a descending brevis,\n" -"the penultimate note must be another one,\n" -"or the ligatura must be LB or SSB" -msgstr "" -"terminaison de ligature invalide :\n" -"lorsque la dernière note est une brève descendante,\n" -"l'avant dernière note doit en être une autre,\n" -"sinon la ligature doit être LB ou SSB" - -#: mensural-ligature-engraver.cc:356 -msgid "unexpected case fall-through" -msgstr "cas inattendu et non interprétable" - -#: mensural-ligature.cc:141 -msgid "Mensural_ligature: unexpected case fall-through" -msgstr "Mensural_ligature: cas inattendu et non interprétable" - -#: mensural-ligature.cc:192 -msgid "Mensural_ligature: (join_right == 0)" -msgstr "Mensural_ligature: (joint_right == 0)" - -#: midi-item.cc:81 -#, c-format -msgid "no such MIDI instrument: `%s'" -msgstr "instrument MIDI non répertorié : « %s »" - -#: midi-stream.cc:28 -#, c-format -msgid "cannot open for write: %s: %s" -msgstr "impossible d'ouvrir le fichier en écriture : %s : %s" - -#: midi-stream.cc:44 -#, c-format -msgid "cannot write to file: `%s'" -msgstr "impossible d'écrire dans le fichier : « %s »" - -#: minimal-page-breaking.cc:38 paper-score.cc:105 -msgid "Calculating line breaks..." -msgstr "Calcul des sauts de ligne..." - -#: minimal-page-breaking.cc:42 layout-page-layout.scm:463 -msgid "Calculating page breaks..." -msgstr "Calcul des sauts de page..." - -#: music-iterator.cc:171 -msgid "Sending non-event to context" -msgstr "Envoi d'un non-événement au contexte" - -#: music.cc:140 -#, c-format -msgid "octave check failed; expected \"%s\", found: \"%s\"" -msgstr "Échec de vérification d'octave. Aurait dû être \"%s\", \"%s\" obtenu" - -#: music.cc:203 -#, c-format -msgid "transposition by %s makes alteration larger than double" -msgstr "La transposition de %s crée des altérations supérieures aux doubles" - -#: new-dynamic-engraver.cc:129 -#, c-format -msgid "" -"unknown crescendo style: %s\n" -"defaulting to hairpin." -msgstr "" -"style de crescendo inconnu : %s\n" -"retour à la valeur par défaut (soufflet)." - -#: new-fingering-engraver.cc:96 -msgid "cannot add text scripts to individual note heads" -msgstr "impossible d'ajouter du texte à des têtes de notes individuelles" - -#: new-fingering-engraver.cc:239 -msgid "no placement found for fingerings" -msgstr "nulle part où positionner des doigtés" - -#: new-fingering-engraver.cc:240 -msgid "placing below" -msgstr "on les place en dessous" - -#: note-collision.cc:484 -msgid "ignoring too many clashing note columns" -msgstr "trop d'empilements de notes se chevauchent. On fera au mieux." - -#: note-column.cc:124 -msgid "cannot have note heads and rests together on a stem" -msgstr "impossible de superposer une note et un silence sur une même hampe" - -#: note-head.cc:63 -#, c-format -msgid "none of note heads `%s' or `%s' found" -msgstr "tête de note « %s » ou « %s » non trouvé(e)" - -#: note-heads-engraver.cc:64 -msgid "NoteEvent without pitch" -msgstr "NoteEvent sans hauteur" - -#: open-type-font.cc:33 -#, c-format -msgid "cannot allocate %lu bytes" -msgstr "impossible d'allouer %lu octets" - -#: open-type-font.cc:37 -#, c-format -msgid "cannot load font table: %s" -msgstr "impossible de charger la table des fontes : %s" - -#: open-type-font.cc:42 -#, c-format -msgid "Free type error: %s" -msgstr "Erreur Free type : %s" - -#: open-type-font.cc:100 -#, c-format -msgid "unsupported font format: %s" -msgstr "format de police non supporté : %s" - -#: open-type-font.cc:102 -#, c-format -msgid "error reading font file %s: %s" -msgstr "erreur de lecture du fichier de fontes %s : %s" - -#: open-type-font.cc:177 -#, c-format -msgid "FT_Get_Glyph_Name () Freetype error: %s" -msgstr "erreur Freetype FT_Get_Glyph_Name () : %s" - -#: open-type-font.cc:302 pango-font.cc:167 -#, c-format -msgid "FT_Get_Glyph_Name () error: %s" -msgstr "FT_Get_Glyph_Name () erreur : %s" - -#. find out the ideal number of pages -#: optimal-page-breaking.cc:56 -msgid "Finding the ideal number of pages..." -msgstr "Détermination du nombre optimal de pages..." - -#: optimal-page-breaking.cc:78 -msgid "Fitting music on 1 page..." -msgstr "Répartition de la musique sur une page..." - -#: optimal-page-breaking.cc:80 -#, c-format -msgid "Fitting music on %d pages..." -msgstr "Répartition de la musique sur %d pages..." - -#: optimal-page-breaking.cc:82 -#, c-format -msgid "Fitting music on %d or %d pages..." -msgstr "Répartition de la musique sur %d ou %d pages..." - -#: optimal-page-breaking.cc:159 page-turn-page-breaking.cc:226 -#: paper-score.cc:146 -msgid "Drawing systems..." -msgstr "Dessin des systèmes..." - -#: page-turn-page-breaking.cc:146 -#, c-format -msgid "page-turn-page-breaking: breaking from %d to %d" -msgstr "Saut de page et tourne (page-turn-page-breaking) : coupure de %d à %d" - -#: page-turn-page-breaking.cc:195 -msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." -msgstr "" -"impossible de cadrer la première tourne de page sur une seule page. \n" -"Envisagez de définir un numéro pair pour first-page-number." - -#: page-turn-page-breaking.cc:208 -#, c-format -msgid "Calculating page and line breaks (%d possible page breaks)..." -msgstr "Calcul des sauts de page et de ligne (%d sauts de pages possibles)..." - -#: page-turn-page-breaking.cc:275 -#, c-format -msgid "break starting at page %d" -msgstr "saut intervenant à la page %d" +msgstr "" +"impossible de repérer l'identifiant groupe à partir du nom de groupe :\n" +"%s : %s " -#: page-turn-page-breaking.cc:276 +#: main.cc:368 #, c-format -msgid "\tdemerits: %f" -msgstr " démérites : %f" +msgid "cannot chroot to: %s: %s" +msgstr "impossible de chrooter vers : %s : %s" -#: page-turn-page-breaking.cc:277 +#: main.cc:375 #, c-format -msgid "\tsystem count: %d" -msgstr " nombre de systèmes : %d" +msgid "cannot change group id to: %d: %s" +msgstr "impossible de changer l'identifiant de groupe en %d : %s" -#: page-turn-page-breaking.cc:278 +#: main.cc:381 #, c-format -msgid "\tpage count: %d" -msgstr " nombre de pages : %d" +msgid "cannot change user id to: %d: %s" +msgstr "impossible de changer l'identifiant utilisateur en %d : %s" -#: page-turn-page-breaking.cc:279 +#: main.cc:387 #, c-format -msgid "\tprevious break: %d" -msgstr " coupure précédente : %d" +msgid "cannot change working directory to: %s: %s" +msgstr "impossible de changer le répertoire de travail en %s : %s" -#: pango-font.cc:184 +#: main.cc:628 #, c-format -msgid "" -"Glyph has no name, but font supports glyph naming.\n" -"Skipping glyph U+%0X, file %s" -msgstr "" -"Le glyphe n'a pas de nom, mais la fonte prend en charge le nommage de glyphes.\n" -"Glyphe U+%0X ignoré dans le fichier %s" +msgid "exception caught: %s" +msgstr "exception capturée : %s" -#: pango-font.cc:229 +#: key-signature-interface.cc:78 #, c-format -msgid "no PostScript font name for font `%s'" -msgstr "« %s » n'est pas un fichier PostScript" - -#: pango-font.cc:277 -msgid "FreeType face has no PostScript font name" -msgstr "Caractère FreeType sans nom de police PostScript" +msgid "No glyph found for alteration: %s" +msgstr "Pas de glyphe pour l'altération « %s »" -#: paper-column-engraver.cc:221 -msgid "forced break was overridden by some other event, should you be using bar checks?" -msgstr "" -"Une coupure explicite a été outrepassée par un autre événement. \n" -"Positionnez quelques contrôles de mesure (bar check) pour vérifier." +#: key-signature-interface.cc:88 +msgid "alteration not found" +msgstr "altération non trouvée" -#: paper-outputter-scheme.cc:30 +#: dots.cc:48 #, c-format -msgid "Layout output to `%s'..." -msgstr "Sortie mise en page vers « %s »..." +msgid "dot `%s' not found" +msgstr "point « %s » introuvable" -#: paper-score.cc:118 +#: translator.cc:359 #, c-format -msgid "Element count %d (spanners %d) " -msgstr "%d éléments dénombrés (%d extensions)" +msgid "Two simultaneous %s events, junking this one" +msgstr "Deux événements %s simultanés, rejet de celui-ci" -#: paper-score.cc:122 -msgid "Preprocessing graphical objects..." -msgstr "Pré-traitement des éléments graphiques..." +#: translator.cc:360 +#, c-format +msgid "Previous %s event here" +msgstr "Événement %s précédent ici" -#: parse-scm.cc:93 -msgid "GUILE signaled an error for the expression beginning here" -msgstr "GUILE a signalé une erreur pour l'expression débutant ici" +#: glissando-engraver.cc:105 +msgid "unterminated glissando" +msgstr "glissando non terminé" -#: percent-repeat-engraver.cc:202 -msgid "unterminated percent repeat" -msgstr "répétition en pourcent non terminée" +#: text-spanner-engraver.cc:73 +msgid "cannot find start of text spanner" +msgstr "impossible de repérer le point de départ de l'extension de texte" -#: performance.cc:43 -msgid "Track..." -msgstr "Piste..." +#: text-spanner-engraver.cc:86 +msgid "already have a text spanner" +msgstr "a déjà une extension de texte" -#: performance.cc:72 -msgid "MIDI channel wrapped around" -msgstr "Bouclage du canal MIDI" +#: text-spanner-engraver.cc:132 +msgid "unterminated text spanner" +msgstr "extension de texte non terminée" -#: performance.cc:73 -msgid "remapping modulo 16" -msgstr "réaffectation modulo 16" +#: clef.cc:65 +#, c-format +msgid "clef `%s' not found" +msgstr "clé `%s' introuvable" -#: performance.cc:100 +#. +#. Todo: should make typecheck? +#. +#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. +#. +#: time-signature-engraver.cc:75 #, c-format -msgid "MIDI output to `%s'..." -msgstr "Sortie MIDI vers « %s »..." +msgid "strange time signature found: %d/%d" +msgstr "Chiffrage de mesure inhabituel : %d/%d" -#: phrasing-slur-engraver.cc:146 -msgid "unterminated phrasing slur" -msgstr "liaison de phrasé non terminée" +#: lily-parser-scheme.cc:82 +#, c-format +msgid "Changing working directory to: `%s'" +msgstr "Modification du répertoire de travail pour « %s »" -#: piano-pedal-engraver.cc:287 +#: lily-parser-scheme.cc:99 #, c-format -msgid "expect 3 strings for piano pedals, found: %ld" -msgstr "Les pédales de piano nécessitent 3 cordes. Il y en a %ld" +msgid "cannot find init file: `%s'" +msgstr "impossible de trouver le fichier d'initialisation « %s »" -#: piano-pedal-engraver.cc:302 piano-pedal-engraver.cc:313 -#: piano-pedal-performer.cc:93 +#: lily-parser-scheme.cc:118 #, c-format -msgid "cannot find start of piano pedal: `%s'" -msgstr "début de la pédale de piano indéterminé : « %s »" +msgid "Processing `%s'" +msgstr "Traitement de « %s »" + +#: lily-parser-scheme.cc:204 +msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead." +msgstr "" +"ly:parser-parse-string ne peut foncionner qu'avec un nouvel analyseur.\n" +"Utilisez plutôt ly:parser-include-string" -#: piano-pedal-engraver.cc:348 +#: custos.cc:88 #, c-format -msgid "cannot find start of piano pedal bracket: `%s'" -msgstr "début du crochet de la pédale de piano indéterminé : « %s »" +msgid "custos `%s' not found" +msgstr "custode « %s » introuvable" -#: program-option-scheme.cc:215 +#: program-option-scheme.cc:237 #, c-format msgid "no such internal option: %s" msgstr "option interne inconnue : %s" -#: property-iterator.cc:74 +#: rest-collision.cc:146 +msgid "cannot resolve rest collision: rest direction not set" +msgstr "collision de silences insoluble : positionnement du silence indéterminée" + +#: rest-collision.cc:160 rest-collision.cc:205 +msgid "too many colliding rests" +msgstr "trop de silences se chevauchent" + +#: episema-engraver.cc:75 +msgid "already have an episema" +msgstr "épisème déjà présent" + +#: episema-engraver.cc:88 +msgid "cannot find start of episema" +msgstr "impossible de trouver le début de l'épisème" + +#: episema-engraver.cc:137 +msgid "unterminated episema" +msgstr "épisème non terminé" + +#: grob-property.cc:34 #, c-format -msgid "not a grob name, `%s'" -msgstr " « %s » n'est pas un nom d'objet graphique (grob)" +msgid "%d: %s" +msgstr "%d : %s" -#: relative-octave-check.cc:38 -msgid "Failed octave check, got: " -msgstr "échec de la vérification d'octave, a obtenu : " +#: grob-property.cc:173 +#, c-format +msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" +msgstr "dépendance circulaire : calculation-in-progress rencontrée pour #'%s (%s)" -#: relocate.cc:44 +#: relocate.cc:54 #, c-format msgid "Setting %s to %s" msgstr "%s fixé à %s" -#: relocate.cc:64 +#: relocate.cc:74 #, c-format msgid "no such file: %s for %s" msgstr "fichier inexistant : %s pour %s" -#: relocate.cc:74 relocate.cc:92 +#: relocate.cc:84 relocate.cc:102 #, c-format msgid "no such directory: %s for %s" msgstr "répertoire inexistant : %s pour %s" -#: relocate.cc:84 +#: relocate.cc:94 #, c-format msgid "%s=%s (prepend)\n" -msgstr "%s=%s (préfixage)\n" +msgstr "%s=%s (ajout)\n" -#: relocate.cc:114 +#: relocate.cc:124 #, c-format msgid "not relocating, no %s/ or current/ found under %s" msgstr "relocalisation non effectuée, ni %s/ ni courrant/ n'existent sous %s" -#: relocate.cc:125 +#: relocate.cc:135 #, c-format msgid "Relocation: compile datadir=%s, new datadir=%s" msgstr "Relocalisation : datadir de compilation=%s, nouveau datadir=%s" -#: relocate.cc:138 +#: relocate.cc:148 #, c-format msgid "Relocation: framework_prefix=%s" msgstr "Relocalisation : framework_prefix=%s" -#: relocate.cc:179 +#: relocate.cc:189 #, c-format msgid "Relocation: is absolute: argv0=%s" -msgstr "Relocalisation : est absolue : argv0=%s" +msgstr "Relocalisation : argv0=%s est absolu" -#: relocate.cc:186 +#: relocate.cc:196 #, c-format msgid "Relocation: from cwd: argv0=%s" -msgstr "Relocalisation : à partir du répertoire courant : argv0=%s" +msgstr "Relocalisation : argv0=%s à partir du répertoire courant" -#: relocate.cc:195 +#: relocate.cc:213 #, c-format msgid "" "Relocation: from PATH=%s\n" @@ -2325,516 +2645,853 @@ msgstr "" "Relocalisation : à partir de PATH=%s\n" "argv0=%s" -#: relocate.cc:229 +#: relocate.cc:240 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" msgstr "LILYPONDPREFIX est obsolète, utiliser LILYPOND_DATADIR" -#: relocate.cc:356 +#: relocate.cc:367 #, c-format msgid "Relocation file: %s" msgstr "Fichier de relocalisation : %s" -#: relocate.cc:392 +#: relocate.cc:373 source-file.cc:65 +#, c-format +msgid "cannot open file: `%s'" +msgstr "Impossible d'ouvrir le fichier « %s »" + +#: relocate.cc:403 #, c-format msgid "Unknown relocation command %s" msgstr "Commande de relocalisation inconnue : %s" -#: rest-collision.cc:145 -msgid "cannot resolve rest collision: rest direction not set" -msgstr "collision de silences insoluble : direction du silence non fixée" +#: translator-group.cc:188 +#, c-format +msgid "cannot find: `%s'" +msgstr " « %s » inconnu(e)" -#: rest-collision.cc:159 rest-collision.cc:204 -msgid "too many colliding rests" -msgstr "trop de silences se chevauchent" +#: phrasing-slur-engraver.cc:157 +msgid "unterminated phrasing slur" +msgstr "liaison de phrasé non terminée" + +#: lyric-engraver.cc:176 +msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." +msgstr "Syllabe sans note de rattachement. Utiliser \\lyricsto ou associatedVoice." + +#: page-breaking.cc:248 +msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set" +msgstr "" +"systems-per-page non défini :\n" +" min-systems-per-page et max-systems-per-page ignorés" -#: rest.cc:148 +#: page-breaking.cc:253 +msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values" +msgstr "" +"min-systems-per-page supérieur à max-systems-per-page :\n" +" tous deux seront ignorés" + +#: performance.cc:54 +msgid "Track..." +msgstr "Piste..." + +#: performance.cc:83 +msgid "MIDI channel wrapped around" +msgstr "Bouclage du canal MIDI" + +#: performance.cc:84 +msgid "remapping modulo 16" +msgstr "réaffectation modulo 16" + +#: performance.cc:111 #, c-format -msgid "rest `%s' not found" -msgstr "silence « %s » inconnu" +msgid "MIDI output to `%s'..." +msgstr "Sortie MIDI vers « %s »..." + +#: tuplet-engraver.cc:107 +msgid "No tuplet to end" +msgstr "Aucun n-olet à terminer" -#: score-engraver.cc:67 +#: gregorian-ligature-engraver.cc:70 #, c-format -msgid "cannot find `%s'" -msgstr "impossible de trouver « %s »" +msgid "\\%s ignored" +msgstr "\\%s ignoré(e)" -#: score-engraver.cc:69 -msgid "Music font has not been installed properly." -msgstr "Les fontes Musicales n'ont pas été installées correctement." +#: gregorian-ligature-engraver.cc:75 +#, c-format +msgid "implied \\%s added" +msgstr "\\%s implicite ajouté(e)" + +#. ligature may not start with 2nd head of pes or flexa +#: gregorian-ligature-engraver.cc:224 +msgid "cannot apply `\\~' on first head of ligature" +msgstr "Impossible d'appliquer « \\~ » à la première tête de ligature" + +#. (pitch == prev_pitch) +#: gregorian-ligature-engraver.cc:236 +msgid "cannot apply `\\~' on heads with identical pitch" +msgstr "Impossible d'appliquer « \\~ » à des têtes ayant la même hauteur" + +#: chord-tremolo-engraver.cc:88 +msgid "No tremolo to end" +msgstr "Il n'y a aucun trémolo à terminer" + +#: chord-tremolo-engraver.cc:109 +msgid "unterminated chord tremolo" +msgstr "accord en tremolo non terminé" + +#: axis-group-engraver.cc:94 +msgid "Axis_group_engraver: vertical group already has a parent" +msgstr "Axis_group_engraver : le groupe vertical a déjà un parent" + +#: axis-group-engraver.cc:95 +msgid "are there two Axis_group_engravers?" +msgstr "Axis_group_engraver redondant" + +#: axis-group-engraver.cc:96 +msgid "removing this vertical group" +msgstr "retrait de ce groupe vertical" -#: score-engraver.cc:71 +#: cluster.cc:120 #, c-format -msgid "Search path `%s'" -msgstr "Chemin de recherche : « %s »" +msgid "unknown cluster style `%s'" +msgstr "style de cluster inconnu : « %s »" -#: score-engraver.cc:73 -msgid "Aborting" -msgstr "Abandon" +#: cluster.cc:157 +msgid "junking empty cluster" +msgstr "mise au rebut d'un cluster vide" -#: score.cc:167 -msgid "already have music in score" -msgstr "il y a déjà de la musique dans la partition" +#: context-property.cc:42 +msgid "need symbol arguments for \\override and \\revert" +msgstr "\\override et \\revert requièrent des arguments symboliques" -#: score.cc:168 -msgid "this is the previous music" -msgstr "voici la musique précédente" +#: source-file.cc:85 +#, c-format +msgid "expected to read %d characters, got %d" +msgstr "au lieu de %d caractères à lire, il y en a %d" -#: score.cc:173 -msgid "errors found, ignoring music expression" -msgstr "suite à des erreurs répétées, l'expression musicale sera ignorée" +#: axis-group-interface.cc:631 +msgid "an outside-staff object should have a direction, defaulting to up" +msgstr "" +"un objet externe à la portée devrait avoir un positionnement.\n" +"Placé par défaut au-dessus." + +#: coherent-ligature-engraver.cc:111 +#, c-format +msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" +msgstr "Coherent_ligature_engraver : initialise `spacing-increment=0.01': ptr=%ul" + +#: percent-repeat-engraver.cc:148 +msgid "unterminated percent repeat" +msgstr "répétition en pourcent non terminée" + +#: note-head.cc:76 +#, c-format +msgid "none of note heads `%s' or `%s' found" +msgstr "tête de note « %s » ou « %s » non trouvée" + +#: relative-octave-check.cc:49 +msgid "Failed octave check, got: " +msgstr "échec de la vérification d'octave, a obtenu : " #. FIXME: -#: script-engraver.cc:102 -msgid "do not know how to interpret articulation: " -msgstr "ne sait comment interpréter l'articulation : " +#: script-engraver.cc:113 +msgid "do not know how to interpret articulation:" +msgstr "ne sait comment interpréter l'articulation" -#: script-engraver.cc:103 -msgid "scheme encoding: " +#: script-engraver.cc:114 +msgid " scheme encoding: " msgstr "encodage Scheme : " -#: slur-engraver.cc:82 +#: all-font-metrics.cc:156 #, c-format -msgid "direction of %s invalid: %d" -msgstr "la direction de %s n'est pas valide : %d" +msgid "cannot find font: `%s'" +msgstr "fonte « %s » introuvable" -#: slur-engraver.cc:151 -msgid "unterminated slur" -msgstr "liaison non terminée" +#: property-iterator.cc:85 +#, c-format +msgid "not a grob name, `%s'" +msgstr " « %s » n'est pas un nom d'objet graphique (grob)" -#: slur-engraver.cc:163 -msgid "cannot end slur" -msgstr "impossible de terminer la liaison" +#: bar-check-iterator.cc:84 +#, c-format +msgid "barcheck failed at: %s" +msgstr "échec du contrôle de mesure (barcheck) à : %s" + +#: stem.cc:116 +msgid "weird stem size, check for narrow beams" +msgstr "taille de hampe bizarre ; vérifier la présence de liens étroits" -#: slur.cc:359 +#: stem.cc:657 #, c-format -msgid "Ignoring grob for slur: %s. avoid-slur not set?" -msgstr "" -"objet graphique (grob) non concerné par la liaison : %s.\n" -"avoid-slur non définie ?" +msgid "flag `%s' not found" +msgstr "crochet inconnu : « %s »" -#: source-file.cc:79 +#: stem.cc:673 #, c-format -msgid "expected to read %d characters, got %d" -msgstr "au lieu de %d caractères à lire, il y en a %d" +msgid "flag stroke `%s' not found" +msgstr "type de crochet inconnu : « %s »" + +#: global-context-scheme.cc:96 global-context-scheme.cc:114 +msgid "no music found in score" +msgstr "Il n'y a pas de musique dans cette partition" + +#: global-context-scheme.cc:104 +msgid "Interpreting music... " +msgstr "Interprétation en cours de la musique..." -#: spaceable-grob.cc:83 +#: global-context-scheme.cc:127 #, c-format -msgid "No spring between column %d and next one" -msgstr "Pas de tension entre la colonne %d et la suivante" +msgid "elapsed time: %.2f seconds" +msgstr "temps écoulé : %.2f secondes" + +#: translator-group-ctors.cc:40 +#, c-format +msgid "fatal error. Couldn't find type: %s" +msgstr "Erreur fatale. Type inconnu : %s" + +#: mensural-ligature.cc:171 +msgid "Mensural_ligature: unexpected case fall-through" +msgstr "Mensural_ligature : cas inattendu et non interprétable" + +#: mensural-ligature.cc:233 +msgid "Mensural_ligature: (join_right == 0)" +msgstr "Mensural_ligature : (joint_right == 0)" -#: staff-symbol-engraver.cc:62 -msgid "staff-span event has no direction" -msgstr "L'événement staff-span n'a pas de direction" +#: page-turn-page-breaking.cc:168 +#, c-format +msgid "page-turn-page-breaking: breaking from %d to %d" +msgstr "" +"Saut de page et tourne (page-turn-page-breaking) :\n" +"coupure entre %d et %d" -#: stem-engraver.cc:92 -msgid "tremolo duration is too long" -msgstr "durée du tremolo trop longue" +#: page-turn-page-breaking.cc:217 +msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." +msgstr "" +"Impossible de cadrer sur une seule page ce qui précède la première tourne.\n" +"Envisagez de définir un numéro pair pour first-page-number." -#. FIXME: -#: stem-engraver.cc:129 +#: page-turn-page-breaking.cc:230 #, c-format -msgid "adding note head to incompatible stem (type = %d)" -msgstr "Ajout d'une tête de note à une hampe incompatible (type = %d)" - -#: stem-engraver.cc:131 -msgid "maybe input should specify polyphonic voices" -msgstr "la source devrait spécifier des voix polyphoniques" +msgid "Calculating page and line breaks (%d possible page breaks)..." +msgstr "Calcul des sauts de page et de ligne (%d sauts de pages possibles)..." -#: stem.cc:105 -msgid "weird stem size, check for narrow beams" -msgstr "taille de hampe bizarre ; vérifier la présence de liens étroits" +#: page-turn-page-breaking.cc:300 +#, c-format +msgid "break starting at page %d" +msgstr "saut intervenant à la page %d" -#: stem.cc:623 +#: page-turn-page-breaking.cc:301 #, c-format -msgid "flag `%s' not found" -msgstr "crochet inconnu : « %s »" +msgid "\tdemerits: %f" +msgstr " démérites : %f" -#: stem.cc:639 +#: page-turn-page-breaking.cc:302 #, c-format -msgid "flag stroke `%s' not found" -msgstr "type de crochet inconnu : « %s »" +msgid "\tsystem count: %d" +msgstr " nombre de systèmes : %d" -#: system.cc:178 +#: page-turn-page-breaking.cc:303 #, c-format -msgid "Element count %d." -msgstr "%d éléments dénombrés." +msgid "\tpage count: %d" +msgstr " nombre de pages : %d" -#: system.cc:270 +#: page-turn-page-breaking.cc:304 #, c-format -msgid "Grob count %d" -msgstr "%d objet graphiques (grob) dénombrés" +msgid "\tprevious break: %d" +msgstr " coupure précédente : %d" -#: text-spanner-engraver.cc:62 -msgid "cannot find start of text spanner" -msgstr "impossible de repérer le point de départ de l'extension de texte" +#: lily-parser.cc:106 +msgid "Parsing..." +msgstr "Analyse..." -#: text-spanner-engraver.cc:75 -msgid "already have a text spanner" -msgstr "a déjà une extension de texte" +#: lily-parser.cc:134 +msgid "braces do not match" +msgstr "accolades non pairées" -#: text-spanner-engraver.cc:121 -msgid "unterminated text spanner" -msgstr "extension de texte non terminée" +#: score.cc:178 +msgid "already have music in score" +msgstr "il y a déjà de la musique dans la partition" -#: tie-engraver.cc:262 -msgid "lonely tie" -msgstr "liaison de prolongation orpheline" +#: score.cc:179 +msgid "this is the previous music" +msgstr "voici la musique précédente" +#: score.cc:184 +msgid "errors found, ignoring music expression" +msgstr "suite à des erreurs répétées, l'expression musicale sera ignorée" + +#: change-iterator.cc:34 +#, c-format +msgid "cannot change `%s' to `%s'" +msgstr "impossible de changer « %s » en « %s »" + +#. FIXME: constant error message. +#: change-iterator.cc:93 +msgid "cannot find context to switch to" +msgstr "impossible de repérer le contexte vers lequel commuter" + +#. We could change the current translator's id, but that would make +#. errors hard to catch. #. -#. Todo: should make typecheck? -#. -#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. -#. -#: time-signature-engraver.cc:64 +#. last->translator_id_string () = get_change +#. ()->change_to_id_string (); +#: change-iterator.cc:102 #, c-format -msgid "strange time signature found: %d/%d" -msgstr "Chiffrage de mesure inhabituel : %d/%d" +msgid "not changing to same context type: %s" +msgstr "pas de changement vers le même type de contexte : %s" + +#. FIXME: uncomprehensable message +#: change-iterator.cc:106 +msgid "none of these in my family" +msgstr "aucun de ceux-ci dans ma famille" #. If there is no such symbol, we default to the numbered style. #. (Here really with a warning!) -#: time-signature.cc:83 +#: time-signature.cc:94 #, c-format msgid "time signature symbol `%s' not found; reverting to numbered style" -msgstr "symbole de chiffrage de mesure « %s » inconnu ; retour à un style numérique" +msgstr "" +"symbole de chiffrage de mesure « %s » inconnu ;\n" +"retour à un style numérique" -#: translator-ctors.cc:53 +#: grob-interface.cc:68 #, c-format -msgid "unknown translator: `%s'" -msgstr "translateur inconnu : « %s »" +msgid "Unknown interface `%s'" +msgstr "Interface inconnue : « %s »" -#: translator-group-ctors.cc:29 +#: grob-interface.cc:79 #, c-format -msgid "fatal error. Couldn't find type: %s" -msgstr "Erreur fatale. Type inconnu : %s" +msgid "Grob `%s' has no interface for property `%s'" +msgstr "L'objet graphique (Grob) « %s » n'a pas d'interface pour la propriété « %s »" -#: translator-group.cc:146 +#: open-type-font.cc:44 #, c-format -msgid "cannot find: `%s'" -msgstr " « %s » inconnu(e)" +msgid "cannot allocate %lu bytes" +msgstr "impossible d'allouer %lu octets" -#: translator.cc:347 +#: open-type-font.cc:48 #, c-format -msgid "Two simultaneous %s events, junking this one" -msgstr "Deux événements %s simultanés, rejet de celui-ci" +msgid "cannot load font table: %s" +msgstr "impossible de charger la table des fontes : %s" -#: translator.cc:348 +#: open-type-font.cc:53 #, c-format -msgid "Previous %s event here" -msgstr "Événement %s précédent ici" - -#: trill-spanner-engraver.cc:85 -msgid "cannot find start of trill spanner" -msgstr "impossible de repérer le point de départ de l'extension de trille" - -#: trill-spanner-engraver.cc:98 -msgid "already have a trill spanner" -msgstr "a déjà une extension de trille" +msgid "FreeType error: %s" +msgstr "Erreur FreeType : %s" -#: tuplet-engraver.cc:96 -msgid "No tuplet to end" -msgstr "Aucun n-olet à terminer" - -#: vaticana-ligature-engraver.cc:389 +#: open-type-font.cc:111 #, c-format -msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style" -msgstr "" -"préfixe(s) « %s » ignoré(s) pour la tête de note, \n" -"selon les restrictions du style de ligature sélectionné" +msgid "unsupported font format: %s" +msgstr "format de police non supporté : %s" -#: vaticana-ligature-engraver.cc:718 +#: open-type-font.cc:113 #, c-format -msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" -msgstr "Vaticana_ligature_engraver : fixé `spacing-increment = %f': ptr=%ul" - -#: vaticana-ligature.cc:84 -msgid "flexa-height undefined; assuming 0" -msgstr "Vaticana_ligature : décalage en X indéfini ; ramené à 0" - -#: vaticana-ligature.cc:89 -msgid "ascending vaticana style flexa" -msgstr "flexe de style vaticana ascendant" - -#: vaticana-ligature.cc:177 -msgid "Vaticana_ligature: zero join (delta_pitch == 0)" -msgstr "Vaticana_ligature: aucun joint (delta_pitch == 0)" - -#. fixme: be more verbose. -#: volta-engraver.cc:100 -msgid "cannot end volta spanner" -msgstr "extension de reprise sans terminaison" +msgid "error reading font file %s: %s" +msgstr "erreur de lecture du fichier de fontes %s : %s" -#: volta-engraver.cc:110 -msgid "already have a volta spanner, ending that one prematurely" -msgstr "extension de reprise déjà présente, fin prématurée de celle-ci" +#: open-type-font.cc:188 +#, c-format +msgid "FT_Get_Glyph_Name () Freetype error: %s" +msgstr "erreur Freetype FT_Get_Glyph_Name () : %s" -#: volta-engraver.cc:114 -msgid "also already have an ended spanner" -msgstr "a déjà une extension terminée" +#: midi-stream.cc:39 +#, c-format +msgid "cannot open for write: %s: %s" +msgstr "impossible d'ouvrir le fichier en écriture : %s : %s" -#: volta-engraver.cc:115 -msgid "giving up" -msgstr "abandon" +#: midi-stream.cc:55 +#, c-format +msgid "cannot write to file: `%s'" +msgstr "impossible d'écrire dans le fichier « %s »" -#: parser.yy:804 +#: parser.yy:820 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "dans la section \\score, utiliser \\layout au lieu de \\paper" -#: parser.yy:828 +#: parser.yy:844 msgid "need \\paper for paper block" msgstr "\\paper est nécessaire pour définir les paramètres de la page" -#: parser.yy:1299 +#: parser.yy:1363 +msgid "only \\consists takes non-string argument." +msgstr "seul \\consists peut prendre un argument autre qu'une chaîne" + +#: parser.yy:1376 msgid "Grob name should be alphanumeric" msgstr "Un nom de Grob devrait être alphanumérique" -#: parser.yy:1597 +#: parser.yy:1685 msgid "second argument must be pitch list" msgstr "le second argument doit être une liste de hauteurs" -#: parser.yy:1624 parser.yy:1629 parser.yy:2101 +#: parser.yy:1716 parser.yy:1721 parser.yy:2194 msgid "have to be in Lyric mode for lyrics" msgstr "doit être en mode Lyric pour des paroles" -#: parser.yy:1726 +#: parser.yy:1818 msgid "expecting string as script definition" msgstr "chaîne requise pour définir un script" -#: parser.yy:1881 parser.yy:1931 +#: parser.yy:1973 parser.yy:2024 #, c-format msgid "not a duration: %d" msgstr "%d n'est pas une durée" -#: parser.yy:2055 +#: parser.yy:2148 msgid "have to be in Note mode for notes" msgstr "doit être en mode Note pour des notes" -#: parser.yy:2116 +#: parser.yy:2209 msgid "have to be in Chord mode for chords" msgstr "doit être en mode Chord pour des accords" -#: lexer.ll:179 +#: lexer.ll:190 msgid "stray UTF-8 BOM encountered" msgstr "parasitage par UTF-8 BOM" -#: lexer.ll:183 +#: lexer.ll:194 msgid "Skipping UTF-8 BOM" msgstr "Escamotage d'UTF-8 BOM" -#: lexer.ll:238 +#: lexer.ll:249 #, c-format msgid "Renaming input to: `%s'" msgstr "L'entrée a été renommée en « %s »" -#: lexer.ll:255 +#: lexer.ll:266 msgid "quoted string expected after \\version" msgstr "\\version doit être suivi d'une chaîne entre guillemets" -#: lexer.ll:259 -msgid "quoted string expected after \\sourcefilename" -msgstr "\\sourcefilename doit être suivi d'une chaîne entre guillemets" +#: lexer.ll:270 +msgid "quoted string expected after \\sourcefilename" +msgstr "\\sourcefilename doit être suivi d'une chaîne entre guillemets" + +#: lexer.ll:274 +msgid "integer expected after \\sourcefileline" +msgstr "\\sourcefilename doit être suivi d'un nombre entier" + +#: lexer.ll:287 +msgid "EOF found inside a comment" +msgstr "Fin de fichier (EOF) à l'intérieur du commentaire" + +#: lexer.ll:302 +msgid "\\maininput not allowed outside init files" +msgstr "\\maininput n'est pas permis en dehors des fichiers d'initialisation" + +#: lexer.ll:326 +#, c-format +msgid "wrong or undefined identifier: `%s'" +msgstr "identificateur erroné ou non défini : « %s »" + +#. backup rule +#: lexer.ll:335 +msgid "end quote missing" +msgstr "absence de guillemet fermant" + +#: lexer.ll:485 +msgid "Brace found at end of lyric. Did you forget a space?" +msgstr "Accolade repérée à la fin d'une parole. Manquerait-il une espace ?" + +#: lexer.ll:595 +msgid "Brace found at end of markup. Did you forget a space?" +msgstr "Accolade repérée à la fin d'un \"markup\". Manquerait-il une espace ?" + +#: lexer.ll:699 +#, c-format +msgid "invalid character: `%c'" +msgstr "caractère invalide : « %c »" + +#: lexer.ll:814 lexer.ll:815 +#, c-format +msgid "unknown escaped string: `\\%s'" +msgstr "chaîne d'échappement inconnue : « \\%s »" + +#: lexer.ll:924 lexer.ll:925 +#, c-format +msgid "file too old: %s (oldest supported: %s)" +msgstr "" +"%s est plus qu'obsolète ;\n" +"le plus ancien pouvant être supporté est %s" + +#: lexer.ll:925 lexer.ll:926 +msgid "consider updating the input with the convert-ly script" +msgstr "Envisagez la mise à jour de la source à l'aide du script convert-ly" + +#: lexer.ll:931 lexer.ll:932 +#, c-format +msgid "program too old: %s (file requires: %s)" +msgstr "Programme plus qu'obsolète : %s (le fichier requiert %s)" + +#: documentation-lib.scm:59 +#, scheme-format +msgid "Processing ~S..." +msgstr "Traitement de ~S..." + +#: documentation-lib.scm:176 +#, scheme-format +msgid "Writing ~S..." +msgstr "Écriture de ~S..." + +#: documentation-lib.scm:198 +#, scheme-format +msgid "cannot find description for property ~S (~S)" +msgstr "impossible de trouver une description de la propriété ~S (~S)" + +#: parser-clef.scm:141 parser-clef.scm:181 +#, scheme-format +msgid "unknown clef type `~a'" +msgstr "type de clef inconnu : « ~a »" + +#: parser-clef.scm:142 parser-clef.scm:182 +#, scheme-format +msgid "supported clefs: ~a" +msgstr "clefs reconnues : ~a" + +#: document-backend.scm:132 +#, scheme-format +msgid "pair expected in doc ~s" +msgstr "le document ~s devrait contenir une paire" + +#: document-backend.scm:189 +#, scheme-format +msgid "cannot find interface for property: ~S" +msgstr "impossible de trouver l'interface pour la propriété ~S" + +#: document-backend.scm:199 +#, scheme-format +msgid "unknown Grob interface: ~S" +msgstr "interface d'objet graphique (Grob) inconnue : ~S" + +#: framework-eps.scm:108 +#, scheme-format +msgid "Writing ~a..." +msgstr "Écriture de ~a..." + +#: define-music-properties.scm:21 define-grob-properties.scm:21 +#: define-context-properties.scm:31 +#, scheme-format +msgid "symbol ~S redefined" +msgstr "symbole « ~S » redéfini" + +#: paper.scm:115 +msgid "set-global-staff-size: not in toplevel scope" +msgstr "set-global-staff-size n'est pas à un niveau de portée globale" + +#: paper.scm:296 +#, scheme-format +msgid "This is not a \\layout {} object, ~S" +msgstr "~S n'est pas un objet de \\layout {}" + +#: paper.scm:308 +#, scheme-format +msgid "Unknown paper size: ~a" +msgstr "Format de papier inconnu : ~a" + +#. TODO: should raise (generic) exception with throw, and catch +#. that in parse-scm.cc +#: paper.scm:323 +msgid "Must use #(set-paper-size .. ) within \\paper { ... }" +msgstr "#(set-paper-size ..) doit être dans la section \\paper { ... }" + +#: lily.scm:225 +msgid "Using (ice-9 curried-definitions) module\n" +msgstr "Utilisation du module (ice-9 curried-definitions)\n" + +#: lily.scm:230 +msgid "Guile 1.8\n" +msgstr "Guile 1.8\n" + +#: lily.scm:290 +#, scheme-format +msgid "cannot find: ~A" +msgstr "impossible de trouver ~A" + +#: lily.scm:350 +#, scheme-format +msgid "wrong type for argument ~a. Expecting ~a, found ~s" +msgstr "type d'argument erroné pour ~a. Attendait ~a, ~s trouvé" + +#: lily.scm:716 +msgid "Compilation successfully completed" +msgstr "Compilation menée à son terme, avec succès." + +#: lily.scm:717 +msgid "Compilation completed with warnings or errors" +msgstr "Compilation menée à son terme, avec des avertissements ou erreurs." + +#: lily.scm:779 +#, scheme-format +msgid "job ~a terminated with signal: ~a" +msgstr "le travail ~a s'est terminé avec le signal ~a" + +#: lily.scm:782 +#, scheme-format +msgid "" +"logfile ~a (exit ~a):\n" +"~a" +msgstr "" +"fichier journal ~a (sortie ~a) :\n" +"~a" + +#: lily.scm:804 lily.scm:882 +#, scheme-format +msgid "failed files: ~S" +msgstr "erreur sur les fichiers ~S" -#: lexer.ll:263 -msgid "integer expected after \\sourcefileline" -msgstr "\\sourcefilename doit être suivi d'un nombre entier" +#: lily.scm:873 +#, scheme-format +msgid "Redirecting output to ~a..." +msgstr "Redirection de la sortie vers ~a..." -#: lexer.ll:276 -msgid "EOF found inside a comment" -msgstr "Fin de fichier (EOF) à l'intérieur du commentaire" +#: lily.scm:892 +#, scheme-format +msgid "Invoking `~a'...\n" +msgstr "Appel de « ~a »...\n" -#: lexer.ll:291 -msgid "\\maininput not allowed outside init files" -msgstr "\\maininput n'est pas permis en dehors des fichiers d'initialisation" +#: graphviz.scm:64 +#, scheme-format +msgid "Writing graph `~a'..." +msgstr "Écriture du graphique « ~a »..." -#: lexer.ll:315 -#, c-format -msgid "wrong or undefined identifier: `%s'" -msgstr "identificateur erroné ou non défini : « %s »" +#: framework-svg.scm:84 +#, scheme-format +msgid "Updating font into: ~a" +msgstr "Actualisation de la fonte dans ~a" -#. backup rule -#: lexer.ll:324 -msgid "end quote missing" -msgstr "absence de guillemet fermant" +#: layout-beam.scm:40 +#, scheme-format +msgid "Error in beam quanting. Expected (~S,~S) found ~S." +msgstr "Erreur de définition de ligature : attendait (~S,~S), ~S trouvé." -#: lexer.ll:469 -msgid "Brace found at end of lyric. Did you forget a space?" -msgstr "Accolade repérée à la fin d'une parole. Manquerait-il un espace ?" +#: layout-beam.scm:54 +#, scheme-format +msgid "Error in beam quanting. Expected ~S 0, found ~S." +msgstr "Erreur de définition de ligature : attendait ~S 0, repéré ~S." -#: lexer.ll:584 -msgid "Brace found at end of markup. Did you forget a space?" -msgstr "Accolade repérée à la fin d'un \"markup\". Manquerait-il un espace ?" +#: modal-transforms.scm:38 +msgid "'from' pitch not in scale; ignoring" +msgstr "hauteur de départ (from) absente de la gamme ; rien à transposer" -#: lexer.ll:688 -#, c-format -msgid "invalid character: `%c'" -msgstr "caractère invalide : « %c »" +#: modal-transforms.scm:42 modal-transforms.scm:75 +msgid "'to' pitch not in scale; ignoring" +msgstr "hauteur d'arrivée (to) absente de la gamme ; rien à transposer" -#: lexer.ll:803 -#, c-format -msgid "unknown escaped string: `\\%s'" -msgstr "chaîne d'échappement inconnue : « \\%s »" +#: modal-transforms.scm:46 +msgid "pitch to be transposed not in scale; ignoring" +msgstr "hauteur à laquelle transposer absente de la gamme ; ignorée" -#: lexer.ll:910 -#, c-format -msgid "file too old: %s (oldest supported: %s)" -msgstr "" -"%s est plus qu'obsolète ; \n" -"le plus ancien pouvant être supporté est : %s" +#: modal-transforms.scm:71 +msgid "'around' pitch not in scale; ignoring" +msgstr "hauteur pivot (around) absente de la gamme : rien à transposer" -#: lexer.ll:911 -msgid "consider updating the input with the convert-ly script" -msgstr "Envisagez la mise à jour de la source à l'aide du script convert-ly" +#: modal-transforms.scm:79 +msgid "pitch to be inverted not in scale; ignoring" +msgstr "hauteur d'inversion absente de la gamme : ignorée" -#: lexer.ll:917 -#, c-format -msgid "program too old: %s (file requires: %s)" -msgstr "Programme plus qu'obsolète : %s (le fichier requiert %s)" +#: modal-transforms.scm:95 +msgid "negative replication count; ignoring" +msgstr "compteur de réplication négatif : rien à transposer" -#: backend-library.scm:19 lily.scm:761 ps-to-png.scm:58 +#: backend-library.scm:29 ps-to-png.scm:68 #, scheme-format msgid "Invoking `~a'..." msgstr "Appel de « ~a »..." -#: backend-library.scm:28 +#: backend-library.scm:34 #, scheme-format msgid "`~a' failed (~a)" msgstr "échec de « ~a » (~a)" -#: backend-library.scm:116 +#: backend-library.scm:94 #, scheme-format msgid "Converting to `~a'..." msgstr "Conversion à « ~a »..." #. Do not try to guess the name of the png file, #. GS produces PNG files like BASE-page%d.png. -#: backend-library.scm:128 +#: backend-library.scm:104 #, scheme-format msgid "Converting to ~a..." msgstr "Conversion à ~a..." -#: backend-library.scm:166 +#: backend-library.scm:142 #, scheme-format msgid "Writing header field `~a' to `~a'..." -msgstr "écriture du champ d'en-tête « ~a » dans « ~a »..." +msgstr "écriture du champ d'entête « ~a » dans « ~a »..." -#: define-context-properties.scm:20 define-grob-properties.scm:10 -#: define-music-properties.scm:10 +#: backend-library.scm:192 #, scheme-format -msgid "symbol ~S redefined" -msgstr "symbole ~S redéfini" +msgid "missing stencil expression `~S'" +msgstr "absence d'expression stencil « ~S »" -#: define-event-classes.scm:119 +#: to-xml.scm:191 #, scheme-format -msgid "event class ~A seems to be unused" -msgstr "la classe d'événement ~A semble être inutilisée" +msgid "assertion failed: ~S" +msgstr "erreur d'assertion : ~S" -#. should be programming-error -#: define-event-classes.scm:125 +#: chord-entry.scm:49 #, scheme-format -msgid "translator listens to nonexisting event class ~A" -msgstr "le traducteur écoute la classe d'événements ~A inexistante" +msgid "Spurious garbage following chord: ~A" +msgstr "Information incompréhensible à la suite de l'accord « ~A »" -#: define-markup-commands.scm:569 -msgid "no systems found in \\score markup, does it have a \\layout block?" -msgstr "pas de système trouvé dans le bloc \\score, contient-il un bloc \\layout ?" +#: lily-library.scm:758 +msgid "" +"Find the index between @var{start} and @var{end} (an integer)\n" +"which produces the closest match to @var{target-val} if\n" +"applied to function @var{getter}." +msgstr "" +"Recherche un index compris entre @var{début} et @var{fin}\n" +"(nombre entier) qui soit le plus proche de @var{valeur-cible}\n" +"lorsqu'appliqué à la fonction @var{appelant}." -#: define-markup-commands.scm:2387 +#: lily-library.scm:832 #, scheme-format -msgid "Cannot find glyph ~a" -msgstr "impossible de trouver le glyphe ~a" +msgid "unknown unit: ~S" +msgstr "unité inconnue : ~S" + +#: lily-library.scm:858 lily-library.scm:867 +msgid "warning:" +msgstr "Avertissement :" -#: define-markup-commands.scm:2696 +#: lily-library.scm:860 #, scheme-format -msgid "not a valid duration string: ~a" -msgstr "chaîne de durée invalide : ~a" +msgid "no \\version statement found, please add~afor future compatibility" +msgstr "" +"déclaration de \\version absente ;\n" +"ajoutez ~a pour une compatibilité future" + +#: lily-library.scm:868 +msgid "old relative compatibility not used" +msgstr "compatibilité avec l'ancien mode relatif non utilisée" + +#: output-ps.scm:48 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Détection d'une valeur infini ou non numérique. Substitution par 0.0" + +#: output-ps.scm:289 output-svg.scm:550 +#, scheme-format +msgid "unknown line-cap-style: ~S" +msgstr "line-cap-style inconnu : ~S" + +#: output-ps.scm:294 output-svg.scm:556 +#, scheme-format +msgid "unknown line-join-style: ~S" +msgstr "line-join-style inconnu : ~S" + +#: output-svg.scm:47 +#, scheme-format +msgid "undefined: ~S" +msgstr "~S indéfini(e)" + +#: output-svg.scm:151 +#, scheme-format +msgid "cannot decypher Pango description: ~a" +msgstr "la description de Pango ne peut être déchiffrée : ~a" + +#: output-svg.scm:231 +msgid "Glyph must have a unicode value" +msgstr "Un glyphe doit avoir une valeur unicode" + +#: output-svg.scm:283 output-svg.scm:293 +#, scheme-format +msgid "cannot find SVG font ~S" +msgstr "fonte SVG ~S introuvable" + +#: flag-styles.scm:148 +#, scheme-format +msgid "flag stroke `~a' or `~a' not found" +msgstr "type de crochet inconnu : « ~a » ou « ~a »" + +#: define-note-names.scm:962 +msgid "Select note names language." +msgstr "Sélection de la langue des noms de note." -#: define-music-types.scm:670 +#: define-note-names.scm:969 +#, scheme-format +msgid "Using `~a' note names..." +msgstr "Utilisation de `~a' pour le nom des notes..." + +#: define-note-names.scm:972 +#, scheme-format +msgid "Could not find language `~a'. Ignoring." +msgstr "`~a' n'est pas une langue reconnue pour les noms de note. Abandon." + +#: define-music-types.scm:740 #, scheme-format msgid "symbol expected: ~S" msgstr "symbole requis : ~S" -#: define-music-types.scm:673 +#: define-music-types.scm:743 #, scheme-format msgid "cannot find music object: ~S" msgstr "impossible de trouver l'objet de type musique : ~S" -#: define-music-types.scm:692 +#: define-music-types.scm:762 #, scheme-format msgid "unknown repeat type `~S'" msgstr "type de répétition inconnu : « ~S »" -#: define-music-types.scm:693 +#: define-music-types.scm:763 msgid "See define-music-types.scm for supported repeats" msgstr "Consulter define-music-types.scm pour connaître les répétitions prises en charge" -#: document-backend.scm:99 -#, scheme-format -msgid "pair expected in doc ~s" -msgstr "le document ~s devrait contenir une paire" - -#: document-backend.scm:154 +#: translation-functions.scm:341 #, scheme-format -msgid "cannot find interface for property: ~S" -msgstr "impossible de trouver l'interface pour la propriété ~S" - -#: document-backend.scm:164 -#, scheme-format -msgid "unknown Grob interface: ~S" -msgstr "interface d'objet graphique (Grob) inconnue : ~S" +msgid "Negative fret for pitch ~a on string ~a" +msgstr "La hauteur ~a sur la corde ~a donne un fret négatif" -#: documentation-lib.scm:49 +#: translation-functions.scm:385 #, scheme-format -msgid "Processing ~S..." -msgstr "Traitement de ~S..." +msgid "No open string for pitch ~a" +msgstr "Pas de corde à vide pour la hauteur ~a" -#: documentation-lib.scm:165 +#: translation-functions.scm:400 #, scheme-format -msgid "Writing ~S..." -msgstr "Écriture de ~S..." +msgid "Requested string for pitch requires negative fret: string ~a pitch ~a" +msgstr "Hauteur et corde requises demandent un fret négatif : corde ~a hauteur ~a" -#: documentation-lib.scm:187 -#, scheme-format -msgid "cannot find description for property ~S (~S)" -msgstr "impossible de trouver une description de la propriété ~S (~S)" +#: translation-functions.scm:401 +msgid "Ignoring string request." +msgstr "Cette corde sera ignorée" -#: flag-styles.scm:145 +#: translation-functions.scm:414 #, scheme-format -msgid "flag stroke `~a' or `~a' not found" -msgstr "type de crochet inconnu : « ~a » ou « ~a »" +msgid "No string for pitch ~a (given frets ~a)" +msgstr "Aucune corde ne contient la hauteur ~a avec un fret ~a" -#: framework-eps.scm:90 +#: translation-functions.scm:515 #, scheme-format -msgid "Writing ~a..." -msgstr "Écriture de ~a..." +msgid "" +"No label for fret ~a (on string ~a);\n" +"only ~a fret labels provided" +msgstr "" +"Pas d'étiquette correspondant au fret ~a (corde de ~a) ;\n" +"les seules disponibles sont : ~a" -#: framework-ps.scm:277 +#: framework-ps.scm:250 #, scheme-format msgid "cannot embed ~S=~S" msgstr "intégration impossible : ~S=~S" -#: framework-ps.scm:330 +#: framework-ps.scm:293 #, scheme-format msgid "cannot extract file matching ~a from ~a" msgstr "impossible d'extraire le fichier ~a à partir de ~a" -#: framework-ps.scm:347 +#: framework-ps.scm:311 #, scheme-format msgid "do not know how to embed ~S=~S" msgstr "imposible de réaliser l'intégration ~S=~S" -#: framework-ps.scm:378 +#: framework-ps.scm:336 #, scheme-format msgid "do not know how to embed font ~s ~s ~s" msgstr "impossible d'intégrer les fontes ~s ~s ~s" -#: framework-ps.scm:748 -#, scheme-format -msgid "cannot convert to ~S" -msgstr "impossible de convertir en ~S" - -#: framework-ps.scm:771 +#: framework-ps.scm:669 msgid "" "\n" -"The PostScript backend does not support the system-by-system \n" -"output. For that, use the EPS backend instead,\n" +"The PostScript backend does not support the\n" +"system-by-system output. For that, use the EPS backend instead,\n" "\n" " lilypond -dbackend=eps FILE\n" "\n" @@ -2851,226 +3508,130 @@ msgstr "" "\n" " lilypond -dbackend=eps FICHIER\n" "\n" -"Si vous avez copié et collé un fragment lilypond à partir d'un page internet,\n" +"Si vous avez copié et collé un fragment lilypond à partir d'une page internet,\n" "assurez-vous d'avoir bien supprimé tout ce qui précède\n" "\n" " %% ****************************************************************\n" " %% Start cut-&-pastable-section\n" " %% ****************************************************************\n" -"\n" - -#: graphviz.scm:53 -#, scheme-format -msgid "Writing graph `~a'..." -msgstr "Écriture du graphique « ~a »..." - -#: layout-beam.scm:29 -#, scheme-format -msgid "Error in beam quanting. Expected (~S,~S) found ~S." -msgstr "Erreur de définition du lien : attendait (~S,~S), ~S trouvé." - -#: layout-beam.scm:43 -#, scheme-format -msgid "Error in beam quanting. Expected ~S 0, found ~S." -msgstr "Erreur de définition du lien : attendait ~S 0, repéré ~S." - -#: layout-page-layout.scm:126 -msgid "Can't fit systems on page -- ignoring between-system-padding" -msgstr "Les système ne tiennent pas sur la page ; between-system-padding ignoré" - -#: lily-library.scm:602 -#, scheme-format -msgid "unknown unit: ~S" -msgstr "unité inconnue : ~S" - -#: lily-library.scm:636 -#, scheme-format -msgid "no \\version statement found, please add~afor future compatibility" -msgstr "" -"déclaration de \\version absente ;\n" -"ajoutez ~a pour une compatibilité future" - -#: lily-library.scm:644 -msgid "old relative compatibility not used" -msgstr "compatibilité avec l'ancien mode relatif non utilisée" - -#: lily.scm:179 -#, scheme-format -msgid "cannot find: ~A" -msgstr "impossible de trouver ~A" - -#: lily.scm:228 -#, scheme-format -msgid "wrong type for argument ~a. Expecting ~a, found ~s" -msgstr "type d'argument erroné pour ~a. Attendait ~a, ~s trouvé" - -#: lily.scm:625 -#, scheme-format -msgid "job ~a terminated with signal: ~a" -msgstr "le travail ~a s'est terminé avec le signal ~a" - -#: lily.scm:628 -#, scheme-format -msgid "" -"logfile ~a (exit ~a):\n" -"~a" -msgstr "" -"fichier journal ~a (sortie ~a) :\n" -"~a" - -#: lily.scm:653 lily.scm:751 -#, scheme-format -msgid "failed files: ~S" -msgstr "erreur sur les fichiers : ~S" - -#: lily.scm:741 -#, scheme-format -msgid "Redirecting output to ~a..." -msgstr "Redirection de la sortie vers ~a..." - -#: ly-syntax-constructors.scm:40 -msgid "Music head function must return Music object" -msgstr "Une fonction musicale primitive devrait renvoyer un objet Music" - -#: ly-syntax-constructors.scm:154 -#, scheme-format -msgid "Invalid property operation ~a" -msgstr "Opération de propriété invalide : ~a" - -#: markup.scm:204 -#, scheme-format -msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" -msgstr "Nombre d'arguments erroné. Requis : ~A, présent(s) ~A : ~S" - -#: markup.scm:210 -#, scheme-format -msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." -msgstr "Argument invalide à la position ~A. ~A attendu, ~S trouvé." -#: markup.scm:274 -#, scheme-format -msgid "Not a markup command: ~A" -msgstr "~A n'est pas une commande de type « markup»" - -#: music-functions.scm:228 +#: music-functions.scm:268 msgid "More alternatives than repeats. Junking excess alternatives" msgstr "" "Plus d'alternatives que de répétitions.\n" " Escamotage des alternatives surnuméraires." -#: music-functions.scm:240 +#: music-functions.scm:297 #, scheme-format msgid "invalid tremolo repeat count: ~a" msgstr "nombre de répétition en trémolo invalide : ~a" -#: music-functions.scm:248 -#, scheme-format -msgid "expecting 2 elements for chord tremolo, found ~a" -msgstr "2 éléments sont requis pour l'accord de trémolo, ~a trouvé(s)" - -#: music-functions.scm:575 +#: music-functions.scm:618 #, scheme-format msgid "music expected: ~S" msgstr "~S requiert de la musique" #. FIXME: uncomprehensable message -#: music-functions.scm:625 +#: music-functions.scm:662 #, scheme-format msgid "Bar check failed. Expect to be at ~a, instead at ~a" msgstr "" "Échec du contrôle de barre de mesure. \n" "Aurait dû se trouver à ~a au lieu de ~a" -#: music-functions.scm:793 +#: music-functions.scm:846 #, scheme-format msgid "cannot find quoted music: `~S'" msgstr "impossible de trouver la citation de musique « ~S »" -#: music-functions.scm:1198 +#: music-functions.scm:982 +msgid "Add @var{octave-shift} to the octave of @var{pitch}." +msgstr "Ajoute @var{octave-shift} à l'octave de @var{hauteur}." + +#: music-functions.scm:1037 #, scheme-format -msgid "unknown accidental style: ~S" -msgstr "style d'altération inconnu : ~S" +msgid "Unknown octaveness type: ~S " +msgstr "Octave inconnue : « ~S »" -#: output-ps.scm:294 -msgid "utf-8-string encountered in PS backend" -msgstr "le support PS a rencontré une chaîne utf8" +#: music-functions.scm:1038 +msgid "Defaulting to 'any-octave." +msgstr "Application de la valeur par défaut 'any-octave." -#: output-svg.scm:45 +#: music-functions.scm:1378 #, scheme-format -msgid "undefined: ~S" -msgstr "~S indéfini(e)" +msgid "unknown accidental style: ~S" +msgstr "style d'altération inconnu : ~S" -#: output-svg.scm:135 -#, scheme-format -msgid "cannot decypher Pango description: ~a" -msgstr "la description de Pango ne peut être déchiffrée : ~a" +#: define-event-classes.scm:79 +msgid "All classes must be the last in their matrilineal line." +msgstr "Toute classe doit être la dernière de sa lignée." -#: paper.scm:104 -msgid "set-global-staff-size: not in toplevel scope" -msgstr "set-global-staff-size n'est pas à un niveau de portée globale" +#: define-event-classes.scm:83 +msgid "All classes must have a well-defined pedigree in the existing class hierarchy." +msgstr "" +"Chaque classe requiert que son pédigrée soit correctement défini\n" +"dans la hiérarchie de la classe existante." -#: paper.scm:244 +#: define-event-classes.scm:149 #, scheme-format -msgid "This is not a \\layout {} object, ~S" -msgstr "~S n'est pas un objet de \\layout {}" +msgid "event class ~A seems to be unused" +msgstr "la classe d'événement ~A semble être inutilisée" -#: paper.scm:256 +#. should be programming-error +#: define-event-classes.scm:155 #, scheme-format -msgid "Unknown paper size: ~a" -msgstr "Taille de papier inconnue : ~a" +msgid "translator listens to nonexisting event class ~A" +msgstr "le traducteur écoute la classe d'événements ~A inexistante" -#. TODO: should raise (generic) exception with throw, and catch -#. that in parse-scm.cc -#: paper.scm:271 -msgid "Must use #(set-paper-size .. ) within \\paper { ... }" -msgstr "#(set-paper-size ..) doit être dans la section \\paper { ... }" +#: markup.scm:223 +#, scheme-format +msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" +msgstr "Nombre d'arguments erroné. Requis : ~A, présent(s) ~A : ~S" -#: parser-clef.scm:129 +#: markup.scm:229 #, scheme-format -msgid "unknown clef type `~a'" -msgstr "type de clef inconnu : « ~a »" +msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." +msgstr "Argument invalide à la position ~A. ~A attendu, ~S trouvé." -#: parser-clef.scm:130 +#: markup.scm:292 #, scheme-format -msgid "supported clefs: ~a" -msgstr "clefs reconnues : ~a" +msgid "Not a markup command: ~A" +msgstr "~A n'est pas une commande de type « markup»" -#: ps-to-png.scm:64 +#: ps-to-png.scm:74 #, scheme-format msgid "~a exited with status: ~S" msgstr "~a s'est terminé avec le statut ~S" -#: to-xml.scm:180 -#, scheme-format -msgid "assertion failed: ~S" -msgstr "erreur d'assertion : ~S" - -#~ msgid "requested time signature, but time sig is unknown" -#~ msgstr "Une métrique est obligatoire, mais la définition trouvée est inconnue" - -#~ msgid "Report bugs via" -#~ msgstr "Rapporter toute anomalie à" - -#~ msgid "Negative skip %s" -#~ msgstr "Retour en arrière de %s" - -#~ msgid "ignoring unknown accidental rule: %s" -#~ msgstr "altération accidentelle inconnue, donc ignorée : %s" +#: define-markup-commands.scm:803 +msgid "no systems found in \\score markup, does it have a \\layout block?" +msgstr "pas de système trouvé dans le bloc \\score, contient-il un bloc \\layout ?" -#~ msgid "generate DVI (tex backend only)" -#~ msgstr "générer le DVI (uniquement pour tex)" +#: define-markup-commands.scm:2404 +#, scheme-format +msgid "Cannot find glyph ~a" +msgstr "impossible de trouver le glyphe ~a" -#~ msgid "generate TeX (tex backend only)" -#~ msgstr "générer le TeX (uniquement pour tex)" +#: define-markup-commands.scm:2830 +#, scheme-format +msgid "no brace found for point size ~S " +msgstr "il n'y a pas d'accolade qui fasse ~S points" -#~ msgid "Computing page breaks..." -#~ msgstr "Calcul des sauts de page..." +#: define-markup-commands.scm:2831 +#, scheme-format +msgid "defaulting to ~S pt" +msgstr "application de la taille par défaut (~S pt)" -#~ msgid "cannot generate ~S using the postscript back-end" -#~ msgstr "impossible de générer ~S à l'aide du support postscript" +#: define-markup-commands.scm:2984 +#, scheme-format +msgid "not a valid duration string: ~a" +msgstr "chaîne de durée invalide : ~a" -#~ msgid "TeX file name must not contain whitespace: `~a'" -#~ msgstr "un nom de fichier TeX ne peut contenir d'espace : « ~a »" +#: ly-syntax-constructors.scm:51 +msgid "Music head function must return Music object" +msgstr "Une fonction musicale primitive devrait renvoyer un objet Music" -#~ msgid "cannot find ~a in ~a" -#~ msgstr "impossible de trouver ~a dans ~a" +#: ly-syntax-constructors.scm:177 +#, scheme-format +msgid "Invalid property operation ~a" +msgstr "Opération de propriété invalide : ~a" diff --git a/po/it.po b/po/it.po index a607a7b279..fa48354dca 100644 --- a/po/it.po +++ b/po/it.po @@ -1,166 +1,234 @@ # GNU LilyPond's Italian language file. +# This file is distributed under the same license as the lilypond package. # Copyright (C) 1998 Free Software Foundation, Inc. # # Tineke de Munnik , 1998. # Maurizio Umberto Puxeddu , 1999 +# Federico Bruni , 2010-2011, 2011. +# msgid "" msgstr "" -"Project-Id-Version: lilypond 1.6.0\n" +"Project-Id-Version: lilypond 2.13.53\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2008-02-14 15:55+0100\n" -"PO-Revision-Date: 1998-05-30 00:17:12+0200\n" -"Last-Translator: Maurizio Umberto Puxeddu \n" +"POT-Creation-Date: 2011-03-02 10:34+0100\n" +"PO-Revision-Date: 2011-04-05 00:25+0200\n" +"Last-Translator: Federico Bruni \n" "Language-Team: Italian \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: fontextract.py:25 +#, python-format +msgid "Scanning %s" +msgstr "Esame di %s" + +#: fontextract.py:70 +#, python-format +msgid "Extracted %s" +msgstr "Estratto %s" + +#: fontextract.py:85 +#, python-format +msgid "Writing fonts to %s" +msgstr "Scrittura dei tipi di carattere su %s" + +#: book_snippets.py:519 +#, python-format +msgid "deprecated ly-option used: %s=%s" +msgstr "opzione ly-option deprecata: %s=%s" + +#: book_snippets.py:521 +#, python-format +msgid "compatibility mode translation: %s=%s" +msgstr "traduzione in modalità compatibile: %s=%s" + +#: book_snippets.py:524 +#, python-format +msgid "deprecated ly-option used: %s" +msgstr "opzione ly-option deprecata: %s" + +#: book_snippets.py:526 +#, python-format +msgid "compatibility mode translation: %s" +msgstr "traduzione in modalità compatibile: %s" + +#: book_snippets.py:544 +#, python-format +msgid "ignoring unknown ly option: %s" +msgstr "l'opzione ly sconosciuta viene ignorata: %s" + +#: book_snippets.py:736 +#, python-format +msgid "Opening filter `%s'\n" +msgstr "Apertura del filtro «%s»\n" + +#: book_snippets.py:756 +#, python-format +msgid "`%s' failed (%d)" +msgstr "«%s» fallito (%d)" + +#: book_snippets.py:757 +msgid "The error log is as follows:" +msgstr "Il registro dell'errore è il seguente:" + #: convertrules.py:12 #, python-format msgid "Not smart enough to convert %s" -msgstr "" +msgstr "Non abbastanza intelligente per convertire %s" #: convertrules.py:13 msgid "Please refer to the manual for details, and update manually." -msgstr "" +msgstr "Si consulti il manuale per i dettagli e si aggiorni manualmente." #: convertrules.py:14 #, python-format msgid "%s has been replaced by %s" -msgstr "" +msgstr "%s è stato sostituito da %s" -#: convertrules.py:24 musicexp.py:16 convert-ly.py:47 lilypond-book.py:82 -#: warn.cc:48 input.cc:90 -#, fuzzy, c-format, python-format +#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66 +#: input.cc:109 +#, c-format, python-format msgid "warning: %s" -msgstr "attenzione: " +msgstr "attenzione: %s" -#: convertrules.py:33 convertrules.py:103 +#: convertrules.py:49 convertrules.py:99 msgid "\\header { key = concat + with + operator }" -msgstr "" +msgstr "\\header { chiave = concat + con + operatore }" -#: convertrules.py:48 -#, fuzzy, python-format +#: convertrules.py:58 +#, python-format msgid "deprecated %s" -msgstr "approssimato: %s:" +msgstr "%s è deprecato" -#: convertrules.py:61 +#: convertrules.py:70 msgid "deprecated \\textstyle, new \\key syntax" -msgstr "" +msgstr "\\textstyle deprecato, nuova sintassi per \\key" -#: convertrules.py:80 convertrules.py:2124 convertrules.py:2337 -#: convertrules.py:2512 convertrules.py:2889 +#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084 +#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862 msgid "bump version for release" -msgstr "" +msgstr "aumentare il numero di versione per il rilascio" -#: convertrules.py:99 +#: convertrules.py:103 msgid "new \\header format" -msgstr "" +msgstr "nuovo formato di \\header" -#: convertrules.py:133 +#: convertrules.py:132 msgid "\\translator syntax" -msgstr "" +msgstr "sintassi di \\translator" -#: convertrules.py:211 +#: convertrules.py:184 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" -msgstr "" +msgstr "\\repeat NUMERO Alternativa Musicale -> \\repeat FOLDSTR Alternativa Musicale" -#: convertrules.py:254 convertrules.py:828 convertrules.py:1584 -#: convertrules.py:2685 +#: convertrules.py:216 convertrules.py:699 convertrules.py:1383 +#: convertrules.py:2378 #, python-format msgid "deprecate %s" -msgstr "" +msgstr "%s è deprecato" -#: convertrules.py:361 +#: convertrules.py:290 #, python-format msgid "deprecate %s " -msgstr "" +msgstr "%s è deprecato " -#: convertrules.py:384 +#: convertrules.py:319 msgid "new \\notenames format" -msgstr "" +msgstr "nuovo formato di \\notenames" -#: convertrules.py:404 +#: convertrules.py:337 msgid "new tremolo format" -msgstr "" +msgstr "nuovo formato di tremolo" -#: convertrules.py:417 +#: convertrules.py:342 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver" -msgstr "" +msgstr "Staff_margin_engraver è deprecato, usare Instrument_name_engraver" -#: convertrules.py:536 +#: convertrules.py:395 msgid "change property definiton case (eg. onevoice -> oneVoice)" -msgstr "" +msgstr "cambiare le maiuscole della definizione di proprietà (es: onevoice -> oneVoice)" -#: convertrules.py:544 +#: convertrules.py:457 msgid "new \\textscript markup text" -msgstr "" +msgstr "nuovo testo di marcatura \\textscript" -#: convertrules.py:638 -#, fuzzy, python-format +#: convertrules.py:530 +#, python-format msgid "identifier names: %s" -msgstr "Il nome dell'identificatore è una parola chiave (`%s')" +msgstr "nomi dell'identificatore: %s" -#: convertrules.py:679 +#: convertrules.py:569 msgid "point-and-click argument changed to procedure." -msgstr "" +msgstr "l'argomento point-and-click è stato cambiato in procedura." -#: convertrules.py:739 +#: convertrules.py:611 msgid "semicolons removed" -msgstr "" +msgstr "punti e virgola eliminati" #. 40 ? -#: convertrules.py:795 +#: convertrules.py:654 #, python-format msgid "%s property names" -msgstr "" +msgstr "nomi della proprietà %s" -#: convertrules.py:865 +#: convertrules.py:724 msgid "automaticMelismata turned on by default" -msgstr "" +msgstr "automaticMelismata attivato per impostazione predefinita" -#: convertrules.py:1131 convertrules.py:1893 convertrules.py:2166 -#: convertrules.py:2472 -#, fuzzy, python-format +#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942 +#: convertrules.py:2189 +#, python-format msgid "remove %s" -msgstr "Genero le voci..." +msgstr "elimina %s" -#: convertrules.py:1164 convertrules.py:1173 +#: convertrules.py:1001 convertrules.py:1005 msgid "cluster syntax" -msgstr "" +msgstr "sintassi dei cluster" -#: convertrules.py:1182 +#: convertrules.py:1014 msgid "new Pedal style syntax" -msgstr "" +msgstr "nuova sintassi di stile del Pedale" -#: convertrules.py:1451 +#: convertrules.py:1273 msgid "" "New relative mode,\n" "Postfix articulations, new text markup syntax, new chord syntax." msgstr "" +"Nuovo modo relativo.\n" +"Articolazioni suffisse, nuova sintassi di marcatura del testo, nuova sintassi degli accordi." -#: convertrules.py:1475 +#: convertrules.py:1286 msgid "Remove - before articulation" -msgstr "" +msgstr "Elimina - prima dell'articolazione" -#: convertrules.py:1515 +#: convertrules.py:1324 #, python-format msgid "%s misspelling" -msgstr "" - -#: convertrules.py:1521 -msgid "attempting automatic \\figures conversion. Check results!" -msgstr "" +msgstr "errore di digitazione in %s" -#: convertrules.py:1550 +#: convertrules.py:1346 msgid "Swap < > and << >>" -msgstr "" +msgstr "Scambia < > e << >>" + +#: convertrules.py:1349 +msgid "attempting automatic \\figures conversion. Check results!" +msgstr "tentativo di conversione automatica di \\figures. Controllare i risultati!" -#: convertrules.py:1576 +#: convertrules.py:1400 msgid "Use Scheme code to construct arbitrary note events." +msgstr "Usa il codice di Scheme per costruire eventi arbitrari della nota." + +#: convertrules.py:1407 +msgid "" +"use symbolic constants for alterations,\n" +"remove \\outputproperty, move ly:verbose into ly:get-option" msgstr "" +"usa costanti simboliche per le alterazioni,\n" +"togli \\outproperty, sostituisci ly:verbose con ly:get-option" -#: convertrules.py:1609 +#: convertrules.py:1432 #, python-format msgid "" "\\outputproperty found,\n" @@ -170,8 +238,14 @@ msgid "" "\n" "as a substitution text." msgstr "" +"Trovato \\outputproperty,\n" +"Modificalo manualmente con\n" +"\n" +" \\applyoutput #(outputproperty-compatibility %s '%s )\n" +"\n" +"come testo sostitutivo." -#: convertrules.py:1623 +#: convertrules.py:1446 msgid "" "The alteration field of Scheme pitches was multiplied by 2\n" "to support quarter tone accidentals. You must update the following constructs manually:\n" @@ -179,76 +253,83 @@ msgid "" "* calls of ly:make-pitch and ly:pitch-alteration\n" "* keySignature settings made with \\property\n" msgstr "" +"Il campo di alterazione delle altezze di Scheme è stato moltiplicato per 2\n" +"per supportare le alterazioni di un quarto di tono. È necessario aggiornare manualmente i seguenti costrutti:\n" +"\n" +"* chiamate a ly:make-pitch e ly:pitch-alteration\n" +"* impostazioni di keySignature fatte con \\property\n" -#: convertrules.py:1633 -msgid "" -"use symbolic constants for alterations,\n" -"remove \\outputproperty, move ly:verbose into ly:get-option" -msgstr "" - -#: convertrules.py:1692 +#: convertrules.py:1493 msgid "removal of automaticMelismata; use melismaBusyProperties instead." -msgstr "" +msgstr "eliminazione di automaticMelismata; al suo posto usare melismaBusyProperties." -#: convertrules.py:1807 +#: convertrules.py:1600 msgid "\\partcombine syntax change to \\newpartcombine" +msgstr "cambio nella sintassi da \\partcombine a \\newpartcombine" + +#: convertrules.py:1628 +msgid "" +"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n" +"Harmonic notes. Thread context removed. Lyrics context removed." msgstr "" +"Cambiamenti della notazione per percussioni, eliminati \\chordmodifiers e \\notenames.\n" +"Note armoniche. Eliminati i contesti Thread e Lyrics." -#: convertrules.py:1824 +#: convertrules.py:1632 msgid "Drums found. Enclose drum notes in \\drummode" -msgstr "" +msgstr "Trovate percussioni. Inserisci le note delle percussioni in \\drummode" -#: convertrules.py:1835 convertrules.py:1842 convertrules.py:1853 +#: convertrules.py:1643 convertrules.py:1650 convertrules.py:1661 #, python-format msgid "" "\n" "%s found. Check file manually!\n" msgstr "" +"\n" +"Si è trovato %s. Controlla il file manualmente!\n" -#: convertrules.py:1835 +#: convertrules.py:1643 msgid "Drum notation" -msgstr "" +msgstr "Notazione delle percussioni" -#: convertrules.py:1863 -msgid "" -"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n" -"Harmonic notes. Thread context removed. Lyrics context removed." -msgstr "" - -#: convertrules.py:1924 +#: convertrules.py:1702 msgid "new syntax for property settings:" -msgstr "" +msgstr "nuova sintassi per le impostazioni delle proprietà:" -#: convertrules.py:1957 +#: convertrules.py:1728 msgid "Property setting syntax in \\translator{ }" -msgstr "" +msgstr "Sintassi per impostare una proprietà in \\translator{ }" -#: convertrules.py:1978 -#, fuzzy, python-format -msgid "use %s" -msgstr "attenzione: " - -#: convertrules.py:1995 +#: convertrules.py:1767 msgid "Scheme grob function renaming" -msgstr "" +msgstr "Rinominare la funzione di grob di Scheme" -#: convertrules.py:2008 +#: convertrules.py:1780 +#, python-format +msgid "use %s" +msgstr "usa %s" + +#: convertrules.py:1797 msgid "More Scheme function renaming" -msgstr "" +msgstr "Rinominare altre funzioni di Scheme" -#: convertrules.py:2140 +#: convertrules.py:1924 msgid "" "Page layout has been changed, using paper size and margins.\n" "textheight is no longer used.\n" msgstr "" +"La formattazione di pagina è stata modificata, usando la dimensione del foglio e i margini.\n" +"textheight non è più usato.\n" -#: convertrules.py:2259 +#: convertrules.py:2010 msgid "" "\\foo -> \\foomode (for chords, notes, etc.)\n" "fold \\new FooContext \\foomode into \\foo." msgstr "" +"\\foo -> \\foomode (per accordi, note, etc.)\n" +"inserire \\new FooContext \\foomode in \\foo." -#: convertrules.py:2285 +#: convertrules.py:2048 msgid "" "staff size should be changed at top-level\n" "with\n" @@ -256,1231 +337,1829 @@ msgid "" " #(set-global-staff-size )\n" "\n" msgstr "" +"la dimensione del rigo deve essere cambiata al livello superiore\n" +"con\n" +"\n" +" #(set-global-staff-size )\n" +"\n" -#: convertrules.py:2320 +#: convertrules.py:2068 msgid "regularize other identifiers" -msgstr "" +msgstr "normalizza altri identificatori" -#: convertrules.py:2411 +#: convertrules.py:2136 +msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" +msgstr "\\encoding: ricodifica intelligente da latin1 a utf-8. Eliminazione di ly:point-and-click" + +#: convertrules.py:2149 msgid "LilyPond source must be UTF-8" -msgstr "" +msgstr "Il sorgente di LilyPond deve avere la codifica UTF-8" -#: convertrules.py:2414 +#: convertrules.py:2152 msgid "Try the texstrings backend" -msgstr "" +msgstr "Prova il backend textstrings" -#: convertrules.py:2417 +#: convertrules.py:2155 #, python-format msgid "Do something like: %s" -msgstr "" +msgstr "Fai qualcosa come: %s" -#: convertrules.py:2420 +#: convertrules.py:2158 msgid "Or save as UTF-8 in your editor" -msgstr "" +msgstr "O salva in formato UTF-8 nel tuo editor" -#: convertrules.py:2452 -msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" -msgstr "" +#: convertrules.py:2212 +msgid "warn about auto beam settings" +msgstr "attenzione alle impostazioni delle travature automatiche" -#: convertrules.py:2485 +#: convertrules.py:2217 msgid "auto beam settings" -msgstr "" +msgstr "impostazioni delle travature automatiche" -#: convertrules.py:2487 +#: convertrules.py:2219 msgid "" "\n" "Auto beam settings must now specify each interesting moment in a measure\n" -"explicitely; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" -msgstr "" - -#: convertrules.py:2498 -msgid "warn about auto beam settings" +"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" msgstr "" +"\n" +"Le impostazioni di travatura automatica ora devono specificare esplicitamente ogni momento\n" +"interessante in una misura; 1/4 non viene più moltiplicato per coprire anche i momenti 1/2 e 3/4.\n" -#: convertrules.py:2624 +#: convertrules.py:2333 msgid "verticalAlignmentChildCallback has been deprecated" -msgstr "" +msgstr "verticalAlignmentChildCallback è deprecato" -#: convertrules.py:2652 +#: convertrules.py:2337 msgid "Remove callbacks property, deprecate XY-extent-callback." -msgstr "" +msgstr "Togli la proprietà di callback, XY-extent-callback è deprecato." -#: convertrules.py:2663 +#: convertrules.py:2358 msgid "Use grob closures iso. XY-offset-callbacks." -msgstr "" +msgstr "Usa le chiusure del grob al posto di XY-offset-callbacks." -#: convertrules.py:2770 +#: convertrules.py:2420 msgid "foobar -> foo-bar for \\paper, \\layout" -msgstr "" +msgstr "foobar -> foo-bar per \\paper, \\layout" -#: convertrules.py:2877 +#: convertrules.py:2530 msgid "deprecate \\tempo in \\midi" -msgstr "" +msgstr "\\tempo in un blocco \\midi è deprecato" -#: convertrules.py:2912 +#: convertrules.py:2583 msgid "deprecate cautionary-style. Use AccidentalCautionary properties" -msgstr "" +msgstr "cautionary-style è deprecato. Usa le proprietà di AccidentalCautionary" -#: convertrules.py:2941 +#: convertrules.py:2596 msgid "Rename accidental glyphs, use glyph-name-alist." -msgstr "" +msgstr "Rinomina i glifi delle alterazioni, usa glyph-name-alist." -#: convertrules.py:2973 +#: convertrules.py:2651 msgid "edge-text settings for TextSpanner." -msgstr "" +msgstr "Impostazioni di edge-text per TextSpanner." -#: convertrules.py:2974 -#, fuzzy, python-format +#: convertrules.py:2652 +#, python-format msgid "" "Use\n" "\n" "%s" -msgstr "attenzione: " +msgstr "" +"Usa\n" +"\n" +"%s" + +#: convertrules.py:2685 +msgid "Use the `alignment-offsets' sub-property of\n" +msgstr "Usa «alignment-offsets», sottoproprietà di\n" + +#: convertrules.py:2686 +msgid "NonMusicalPaperColumn #'line-break-system-details\n" +msgstr "NonMusicalPaperColumn #'line-break-system-details\n" -#: convertrules.py:3020 +#: convertrules.py:2687 +msgid "to set fixed distances between staves.\n" +msgstr "per impostare distanze fisse tra i righi.\n" + +#: convertrules.py:2699 +msgid "Use #'style not #'dash-fraction to select solid/dashed lines." +msgstr "Usa #'style e non #'dash-fraction per ottenere linee continue o tratteggiate." + +#: convertrules.py:2705 msgid "all settings related to dashed lines.\n" -msgstr "" +msgstr "tutte le impostazioni relative alle linee tratteggiate.\n" -#: convertrules.py:3021 +#: convertrules.py:2706 msgid "Use \\override ... #'style = #'line for solid lines and\n" -msgstr "" +msgstr "Usa \\override ... #'style = #'line per le linee continue e\n" -#: convertrules.py:3022 +#: convertrules.py:2707 msgid "\t\\override ... #'style = #'dashed-line for dashed lines." -msgstr "" +msgstr "\t\\override ... #'style = #'dashed-line per le linee tratteggiate." -#: convertrules.py:3027 -msgid "Use #'style not #'dash-fraction to select solid/dashed lines." +#: convertrules.py:2743 +msgid "" +"metronomeMarkFormatter uses text markup as second argument,\n" +"fret diagram properties moved to fret-diagram-details." msgstr "" +"il secondo argomento di metronomeMarkFormatter deve essere una marcatura di testo,\n" +"le proprietà del diagramma dei tasti si trovano ora in fret-diagram-details." -#: fontextract.py:26 -#, fuzzy, python-format -msgid "Scanning %s" -msgstr "attenzione: " +#: convertrules.py:2748 +msgid "metronomeMarkFormatter got an additional text argument.\n" +msgstr "metronomeMarkFormatter prende un argomento testuale supplementare.\n" -#: fontextract.py:71 +#: convertrules.py:2749 #, python-format -msgid "Extracted %s" +msgid "" +"The function assigned to Score.metronomeMarkFunction now uses the signature\n" +"%s" msgstr "" +"La funzione assegnata a Score.metronomeMarkFunction ora usa l'indicazione\n" +"%s" -#: fontextract.py:86 -#, fuzzy, python-format -msgid "Writing fonts to %s" -msgstr "non trovo e non posso creare `%s'" +#: convertrules.py:2812 +msgid "\\put-adjacent argument order.\n" +msgstr "ordine degli argomenti di \\put-adjacent.\n" -#: lilylib.py:102 lilylib.py:153 -#, python-format -msgid "Invoking `%s'" -msgstr "" +#: convertrules.py:2813 +msgid "Axis and direction now come before markups:\n" +msgstr "Asse e direzione ora devono precedere i marcatori:\n" -#: lilylib.py:104 lilylib.py:155 -#, fuzzy, python-format -msgid "Running %s..." -msgstr "Genero le voci..." +#: convertrules.py:2814 +msgid "\\put-adjacent axis dir markup markup." +msgstr "\\put-adjacent asse direzione marcatore marcatore." -#: lilylib.py:220 -#, fuzzy, python-format -msgid "Usage: %s" -msgstr "attenzione: " +#: convertrules.py:2845 +msgid "re-definition of InnerStaffGroup.\n" +msgstr "ridefinizione di InnerStaffGroup.\n" -#: musicexp.py:577 -#, python-format -msgid "unable to set the music %(music)s for the repeat %(repeat)s" -msgstr "" +#: convertrules.py:2851 +msgid "re-definition of InnerChoirStaff.\n" +msgstr "ridefinizione di InnerChoirStaff.\n" -#: musicexp.py:586 -msgid "encountered repeat without body" -msgstr "" +#: convertrules.py:2861 +msgid "Syntax changes for \\addChordShape and \\chord-shape" +msgstr "Cambiamenti di sintassi per \\addChordShape e \\chord-shape" -#: musicxml.py:13 convert-ly.py:50 lilypond-book.py:85 warn.cc:54 input.cc:96 -#: input.cc:104 -#, fuzzy, c-format, python-format -msgid "error: %s" -msgstr "errore: " +#: convertrules.py:2866 +msgid "stringTuning must be added to addChordShape call.\n" +msgstr "stringTuning deve essere aggiunto alla chiamata addChordShape.\n" -#: musicxml.py:272 -msgid "requested time signature, but time sig is unknown" -msgstr "" +#: convertrules.py:2872 +msgid "stringTuning must be added to chord-shape call.\n" +msgstr "stringTuning deve essere aggiunto alla chiamata chord-shape.\n" -#: musicxml.py:338 -#, python-format -msgid "Encountered note at %s with %s duration (no element):" -msgstr "" +#: convertrules.py:2879 +msgid "Remove oldaddlyrics" +msgstr "Elimina oldaddlyrics" -#: musicxml.py:372 -#, python-format -msgid "Unable to find find instrument for ID=%s\n" +#: convertrules.py:2883 +msgid "" +"oldaddlyrics is no longer supported. \n" +" Use addlyrics or lyrsicsto instead.\n" msgstr "" +"oldaddlyrics non è più supportato.\n" +" Usa addlyrics o lyrsicsto al suo posto.\n" -#: abc2ly.py:1342 convert-ly.py:71 lilypond-book.py:109 midi2ly.py:849 -#, fuzzy, python-format -msgid "%s [OPTION]... FILE" -msgstr "Uso: %s [OPZIONE]... [FILE]" - -#: abc2ly.py:1343 -#, python-format +#: convertrules.py:2889 msgid "" -"abc2ly converts ABC music files (see\n" -"%s) to LilyPond input." +"keySignature property not reversed any more\n" +"MIDI 47: orchestral strings -> orchestral harp" msgstr "" +"la proprietà keySignature property non è più invertita\n" +"MIDI 47: archi orchestrali -> arpa orchestrale" -#: abc2ly.py:1350 convert-ly.py:78 etf2ly.py:1190 lilypond-book.py:175 -#: midi2ly.py:885 musicxml2ly.py:1824 main.cc:161 -msgid "show version number and exit" -msgstr "" +#: convertrules.py:2894 +msgid "The alist for Staff.keySignature is no longer in reversed order.\n" +msgstr "L'alist (association list) di Staff.keySignature non è più in ordine invertito.\n" -#: abc2ly.py:1354 convert-ly.py:82 etf2ly.py:1186 lilypond-book.py:125 -#: midi2ly.py:864 musicxml2ly.py:1808 main.cc:150 -msgid "show this help and exit" +#: convertrules.py:2900 +msgid "" +"\\bar \".\" now produces a thick barline\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Dash parameters for slurs and ties are now in dash-definition" msgstr "" +"\\bar \".\" ora crea una stanghetta spessa\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in dash-definition" -#: abc2ly.py:1356 etf2ly.py:1191 midi2ly.py:868 -msgid "write output to FILE" -msgstr "" +#: convertrules.py:2906 +msgid "\\bar \".\" now produces a thick barline.\n" +msgstr "\\bar \".\" ora crea una stanghetta spessa.\n" -#: abc2ly.py:1358 -msgid "be strict about succes" -msgstr "" +#: convertrules.py:2912 +msgid "Dash parameters for slurs and ties are now in 'dash-details.\n" +msgstr "I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in 'dash-details.\n" -#: abc2ly.py:1360 -msgid "preserve ABC's notion of beams" +#: convertrules.py:2917 +msgid "" +"Autobeaming rules have changed. override-auto-beam-setting and\n" +"revert-auto-beam-setting have been eliminated.\n" +"\\overrideBeamSettings has been added.\n" +"beatGrouping has been eliminated.\n" +"Different settings for vertical layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explicit dynamics context definition from `Piano centered dynamics'\n" +"template replaced by new `Dynamics' context." +msgstr "" +"Le regole per la disposizione automatica delle travature sono cambiate. override-auto-beam-setting e\n" +"revert-auto-beam-setting sono stati eliminati.\n" +"\\overrideBeamSettings è stato aggiunto.\n" +"beatGrouping è stato eliminato.\n" +"Impostazioni diverse per la formattazione verticale.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"La definizione esplicita del contesto della dinamica presa dal modello «Piano centered dynamics»\n" +"è stata sostituita dal nuovo contesto «Dynamics»." + +#: convertrules.py:2931 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now overriden with \\overrideBeamSettings.\n" msgstr "" +"override-auto-beam-setting.\n" +" Le impostazioni della disposizione automatica delle travature vengono ora sovrascritte con \\overrideBeamSettings.\n" -#: abc2ly.py:1361 convert-ly.py:111 etf2ly.py:1198 lilypond-book.py:180 -#: midi2ly.py:897 musicxml2ly.py:1872 -msgid "Bugs" +#: convertrules.py:2936 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now reverted with \\revertBeamSettings.\n" msgstr "" +"override-auto-beam-setting.\n" +" Le impostazioni della disposizione automatica delle travature vengono ora ripristinate con \\revertBeamSettings.\n" -#: abc2ly.py:1362 convert-ly.py:112 etf2ly.py:1199 lilypond-book.py:181 -#: midi2ly.py:898 musicxml2ly.py:1873 -msgid "Report bugs via" +#: convertrules.py:2941 +msgid "" +"beatGrouping. \n" +" beatGrouping with a specified context must now be accomplished with\n" +" \\overrideBeamSettings.\n" msgstr "" +"beatGrouping. \n" +" beatGrouping in un contesto specifico ora deve essere ottenuto con\n" +" \\overrideBeamSettings.\n" + +#: convertrules.py:2947 +msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n" +msgstr "alignment-offsets è diventato alignment-distances: ora occorre specificare le distanze tra i righi invece dello slittamento (offset) dei righi.\n" -#: convert-ly.py:32 +#: convertrules.py:2958 msgid "" -"Update LilyPond input to newer version. By default, update from the\n" -"version taken from the \\version command, to the current LilyPond version." +"Remove obsolete engravers/translators: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"New vertical spacing variables." msgstr "" +"Elimina gli incisori/traduttori obsoleti: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer e String_number_engraver.\n" +"Nuove variabili per la spaziatura verticale." -#: convert-ly.py:34 lilypond-book.py:59 -msgid "Examples:" -msgstr "" +#: convertrules.py:2989 +msgid "minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n" +msgstr "minimum-Y-extent; la spaziatura verticale non dipende più dall'Y-extent di un VerticalAxisGroup.\n" -#: convert-ly.py:66 etf2ly.py:1174 lilypond-book.py:105 midi2ly.py:79 -msgid "Distributed under terms of the GNU General Public License." -msgstr "" +#: convertrules.py:2995 +msgid "Unify fetaNumber and fetaDynamic encodings" +msgstr "Unifica le codifiche di fetaNumber e fetaDynamic" -#: convert-ly.py:67 etf2ly.py:1175 lilypond-book.py:106 midi2ly.py:80 -msgid "It comes with NO WARRANTY." -msgstr "" +#: convertrules.py:3000 +msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" +msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" -#: convert-ly.py:86 convert-ly.py:106 -msgid "VERSION" -msgstr "" +#: convertrules.py:3011 +msgid "\\cresc etc. are now postfix operators" +msgstr "\\cresc etc. sono ora operatori suffissi" -#: convert-ly.py:88 -msgid "start from VERSION [default: \\version found in file]" +#: convertrules.py:3017 +msgid "" +"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" msgstr "" +"Elimina beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings e \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" -#: convert-ly.py:91 -msgid "edit in place" -msgstr "" +#: convertrules.py:3035 +msgid "\\overrideBeamSettings. Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n" +msgstr "\\overrideBeamSettings. Usa \\set beamExceptions o \\overrideTimeSignatureSettings.\n" -#: convert-ly.py:94 -msgid "do not add \\version command if missing" -msgstr "" +#: convertrules.py:3039 +msgid "\\revertBeamSettings. Use \\set beamExceptions or \\revertTimeSignatureSettings.\n" +msgstr "\\revertBeamSettings. Usa \\set beamExceptions o \\revertTimeSignatureSettings.\n" -#: convert-ly.py:100 -msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]" -msgstr "" +#: convertrules.py:3043 +msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n" +msgstr "beamSettings. Usa baseMoment, beatStructure, e beamExceptions.\n" -#: convert-ly.py:105 -msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]" -msgstr "" +#: convertrules.py:3047 +msgid "beatLength. Use baseMoment and beatStructure.\n" +msgstr "beatLength. Usa baseMoment e beatStructure.\n" -#: convert-ly.py:153 -msgid "Applying conversion: " -msgstr "" +#: convertrules.py:3051 +msgid "setbeatGrouping. Use baseMoment and beatStructure.\n" +msgstr "setbeatGrouping. Usa baseMoment e beatStructure.\n" -#: convert-ly.py:166 -msgid "Error while converting" +#: convertrules.py:3056 +msgid "" +"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n" +"Deprecate negative dash-period for hidden lines: use #'style = #'none instead." msgstr "" +"Diagrammi dei legni: Spostare dimensione, spessore e grafico da lista di argomenti a proprietà.\n" +"L'uso di dash-period con valori negativi per creare linee nascoste è deprecato: al suo posto usare #'style = #'none." -#: convert-ly.py:168 -msgid "Stopping at last succesful rule" +#: convertrules.py:3061 +msgid "woodwind-diagrams. Move size, thickness, and graphic to properties. Argument should be just the key list.\n" +msgstr "Diagrammi dei legni: Sposta dimensione, spessore e grafico in proprietà. L'unico argomento deve essere la lista di chiavi.\n" + +#: convertrules.py:3069 +msgid "" +"Rename vertical spacing variables.\n" +"Add fretboard-table argument to savePredefinedFretboard." msgstr "" +"Rinomina le variabili della spaziatura verticale.\n" +"Aggiungi l'argomento fretboard-table a savePredefinedFretboard." -#: convert-ly.py:190 -#, fuzzy, python-format -msgid "Processing `%s'... " -msgstr "Elaboro..." +#: convertrules.py:3087 +msgid "Rename vertical spacing grob properties." +msgstr "Rinomina le proprietà di spaziatura verticale dei grob." -#: convert-ly.py:277 relocate.cc:362 source-file.cc:54 -#, c-format, python-format -msgid "cannot open file: `%s'" -msgstr "non posso aprire il file: `%s'" +#: convertrules.py:3103 +msgid "Remove \\paper variables head-separation and foot-separation." +msgstr "Elimina le variabili di \\paper head-separation e foot-separation." -#: convert-ly.py:284 -#, fuzzy, python-format -msgid "cannot determine version for `%s'. Skipping" -msgstr "non trovo il file: `%s'" +#: convertrules.py:3108 +msgid "Adjust settings for top-system-spacing instead.\n" +msgstr "Regola invece le impostazioni di top-system-spacing.\n" -#: etf2ly.py:1180 -#, fuzzy, python-format -msgid "%s [OPTION]... ETF-FILE" -msgstr "Uso: %s [OPZIONE]... [FILE]" +#: convertrules.py:3113 +msgid "Adjust settings for last-bottom-spacing instead.\n" +msgstr "Regola invece le impostazioni di last-bottom-spacing.\n" -#: etf2ly.py:1181 +#: convertrules.py:3119 msgid "" -"Enigma Transport Format is a format used by Coda Music Technology's\n" -"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file." +"Rename space to basic-distance in various spacing alists.\n" +"Remove HarmonicParenthesesItem grob." msgstr "" +"Rinomina la spaziatura in basic-distance in diverse variabili di spaziatura.\n" +"Eliminazione del grob HarmonicParenthesesItem." -#: etf2ly.py:1192 midi2ly.py:869 musicxml2ly.py:1866 main.cc:154 main.cc:159 -msgid "FILE" -msgstr "" +#: convertrules.py:3127 +msgid "HarmonicParenthesesItem has been eliminated.\n" +msgstr "HarmonicParenthesesItem è stato eliminato.\n" -#: etf2ly.py:1194 lilypond-book.py:178 midi2ly.py:886 main.cc:163 -#, fuzzy -msgid "show warranty and copyright" -msgstr " -w, --warranty mostra la garanzia e il copyright\n" +#: convertrules.py:3128 +msgid "Harmonic parentheses are part of the TabNoteHead grob.\n" +msgstr "Le parentesi degli armonici fanno parte del grob TabNoteHead.\n" -#: lilypond-book.py:57 -msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." -msgstr "" +#: convertrules.py:3133 +msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n" +msgstr "Rimuove il contesto da overrideTimeSignatureSettings e revertTimeSignatureSettings.\n" -#: lilypond-book.py:64 -msgid "BOOK" +#: convertrules.py:3140 +msgid "" +"Change stringTunings from a list of semitones to a list of pitches.\n" +"Change tenor and baritone ukulele names in string tunings.\n" +"Generate messages for manual conversion of vertical spacing if required." msgstr "" +"stringTunings: lista di semitoni trasformata in lista di altezze.\n" +"Sostituzione dei nomi dell'ukulele tenore e baritono con accordature.\n" +"Generazione dei messaggi per la conversione manuale della spaziatura verticale se richiesto." -#: lilypond-book.py:72 -#, fuzzy, python-format -msgid "Exiting (%d)..." -msgstr "Genero le voci..." +#: convertrules.py:3180 +msgid "Vertical spacing changes might affect user-defined contexts. " +msgstr "Le modifiche della spaziatura verticale possono influire sui contesti definiti dall'utente. " -#: lilypond-book.py:103 -#, python-format -msgid "Copyright (c) %s by" -msgstr "Copyright (c) %s di" +#: convertrules.py:3185 +msgid "Replace bar-size with bar-extent." +msgstr "Sostituzione di bar-size con bar-extent." -#: lilypond-book.py:113 -msgid "FILTER" -msgstr "" +#: convertrules.py:3197 +msgid "Woodwind diagrams: Changes to the clarinet diagram." +msgstr "Diagrammi dei legni: Modifiche al diagramma del clarinetto." -#: lilypond-book.py:116 -msgid "pipe snippets through FILTER [convert-ly -n -]" -msgstr "" +#: convertrules.py:3201 +msgid "woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of instrument.\n" +msgstr "woodwind-diagrams. La diteggiatura del clarinetto è stata modificata per riflettere l'effettiva anatomia dello strumento.\n" -#: lilypond-book.py:120 -msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" -msgstr "" +#: book_base.py:24 +#, python-format +msgid "file not found: %s" +msgstr "file non trovato: %s" -#: lilypond-book.py:127 -#, fuzzy -msgid "add DIR to include path" -msgstr " -I, --include=DIR aggiunge DIR ai path di ricerca\n" +#: book_base.py:161 +msgid "Output function not implemented" +msgstr "Funzione di output non implementata" -#: lilypond-book.py:128 lilypond-book.py:135 lilypond-book.py:147 main.cc:153 -msgid "DIR" -msgstr "" +#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115 +#: input.cc:123 +#, c-format, python-format +msgid "error: %s" +msgstr "errore: %s" -#: lilypond-book.py:133 -msgid "format Texinfo output so that Info will look for images of music in DIR" -msgstr "" +#: lilylib.py:124 lilylib.py:175 +#, python-format +msgid "Invoking `%s'" +msgstr "Invocazione di «%s»" -#: lilypond-book.py:140 -msgid "PAD" -msgstr "" +#: lilylib.py:126 lilylib.py:177 +#, python-format +msgid "Running %s..." +msgstr "Esecuzione di %s..." -#: lilypond-book.py:142 -msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" -msgstr "" +#: lilylib.py:253 +#, python-format +msgid "Usage: %s" +msgstr "Uso: %s" -#: lilypond-book.py:146 -msgid "write output to DIR" -msgstr "" +#: musicexp.py:216 musicexp.py:221 +msgid "Language does not support microtones contained in the piece" +msgstr "La lingua non supporta i microtoni presenti nel brano" -#: lilypond-book.py:151 -msgid "COMMAND" -msgstr "" +#: musicexp.py:483 +msgid "Tuplet brackets of curved shape are not correctly implemented" +msgstr "Le parentesi di forma curva per i gruppi irregolari non sono implementate correttamente" -#: lilypond-book.py:152 -msgid "process ly_files using COMMAND FILE..." -msgstr "" +#: musicexp.py:669 +#, python-format +msgid "unable to set the music %(music)s for the repeat %(repeat)s" +msgstr "non è stato possibile impostare la musica %(music)s per la ripetizione %(repeat)s" -#: lilypond-book.py:159 -msgid "create PDF files for use with PDFTeX" -msgstr "" +#: musicexp.py:678 +msgid "encountered repeat without body" +msgstr "si è incontrata una ripetizione senza corpo" -#: lilypond-book.py:163 -msgid "" -"extract all PostScript fonts into INPUT.psfonts for LaTeX\n" -"must use this with dvips -h INPUT.psfonts" -msgstr "" +#. no self.elements! +#: musicexp.py:848 +#, python-format +msgid "Grace note with no following music: %s" +msgstr "Nota di abbellimento non seguita da musica: %s" -#: lilypond-book.py:167 midi2ly.py:879 musicxml2ly.py:1829 main.cc:162 -msgid "be verbose" -msgstr "" +#: musicexp.py:1010 +#, python-format +msgid "Invalid octave shift size found: %s. Using no shift." +msgstr "Trovata una dimensione di spostamento dell'ottava non valida: %s. Non si userà alcun spostamento." -#: lilypond-book.py:788 +#: musicexp.py:1468 #, python-format -msgid "file not found: %s" -msgstr "" +msgid "Unable to convert alteration %s to a lilypond expression" +msgstr "Non si può convertire l'alterazione %s in un'espressione lilypond" + +#. TODO: Handle pieces without a time signature! +#: musicxml.py:358 +msgid "Senza-misura time signatures are not yet supported!" +msgstr "I segni di tempo senza-misura non sono ancora supportati!" -#: lilypond-book.py:1022 +#: musicxml.py:376 +msgid "Unable to interpret time signature! Falling back to 4/4." +msgstr "Non è stato possibile interpretare l'indicazione di tempo! Verrà usato il 4/4." + +#: musicxml.py:432 #, python-format -msgid "deprecated ly-option used: %s=%s" -msgstr "" +msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!" +msgstr "Si è inserita un'ottava di alterazione di tonalità per un numero di alterazioni inesistente %s, numeri disponibili: %s!" -#: lilypond-book.py:1025 +#: musicxml.py:520 #, python-format -msgid "compatibility mode translation: %s=%s" -msgstr "" +msgid "Unable to find instrument for ID=%s\n" +msgstr "Impossibile trovare lo strumento con ID=%s\n" + +#: book_latex.py:156 +msgid "cannot find \\begin{document} in LaTeX document" +msgstr "impossibile trovare \\begin{document} nel documento LaTeX" -#: lilypond-book.py:1029 +#: musicxml2ly.py:223 #, python-format -msgid "deprecated ly-option used: %s" -msgstr "" +msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" +msgstr "Si è trovato un file creato da %s che contiene informazioni sbagliate sulla disposizione delle travature. Tutte le informazioni sulle travature presenti nel file MusicXML verranno ignorate" -#: lilypond-book.py:1032 +#: musicxml2ly.py:239 musicxml2ly.py:241 #, python-format -msgid "compatibility mode translation: %s" -msgstr "" +msgid "Unprocessed PartGroupInfo %s encountered" +msgstr "PartGroupInfo %s rilevato ma non elaborato" -#: lilypond-book.py:1051 +#: musicxml2ly.py:494 #, python-format -msgid "ignoring unknown ly option: %s" -msgstr "" +msgid "Encountered note at %s without type and duration (=%s)" +msgstr "Trovata una nota in %s senza tipo e durata (=%s)" + +#: musicxml2ly.py:514 +#, python-format +msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" +msgstr "Trovata una durata razionale con denominatore %s, impossibile convertire in una durata di lilypond" -#: lilypond-book.py:1422 -#, fuzzy, python-format -msgid "Opening filter `%s'" -msgstr "Genero le voci..." +#: musicxml2ly.py:761 +msgid "Unable to extract key signature!" +msgstr "Impossibile estrarre l'armatura di chiave!" -#: lilypond-book.py:1439 +#: musicxml2ly.py:788 #, python-format -msgid "`%s' failed (%d)" -msgstr "" +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" +msgstr "modo %s sconosciuto, è richiesto \"major\" o \"minor\" o un modo ecclesiastico!" -#: lilypond-book.py:1440 -msgid "The error log is as follows:" -msgstr "" +#: musicxml2ly.py:926 +#, python-format +msgid "Encountered unprocessed marker %s\n" +msgstr "Trovato un marcatore non elaborato %s\n" -#: lilypond-book.py:1512 -msgid "cannot find \\begin{document} in LaTeX document" -msgstr "" +#: musicxml2ly.py:1020 +#, python-format +msgid "unknown span event %s" +msgstr "evento di estensione %s sconosciuto" -#: lilypond-book.py:1623 -#, fuzzy -msgid "Writing snippets..." -msgstr "Genero le voci..." +#: musicxml2ly.py:1030 +#, python-format +msgid "unknown span type %s for %s" +msgstr "tipo di estensione %s sconosciuto per %s" -#: lilypond-book.py:1628 -#, fuzzy -msgid "Processing..." -msgstr "Elaboro..." +#: musicxml2ly.py:1450 +msgid "Unknown metronome mark, ignoring" +msgstr "Indicazione metronomica sconosciuta, si ignora" -#: lilypond-book.py:1632 -msgid "All snippets are up to date..." -msgstr "" +#. TODO: Implement the other (more complex) way for tempo marks! +#: musicxml2ly.py:1455 +msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." +msgstr "Indicazioni metronomiche con relazioni complesse ( in MusicXML) non sono ancora implementate." -#: lilypond-book.py:1642 -#, fuzzy, python-format -msgid "cannot determine format for: %s" -msgstr "non trovo il file: `%s'" +#: musicxml2ly.py:1657 +#, python-format +msgid "Unable to convert chord type %s to lilypond." +msgstr "Impossibile convertire l'accordo di tipo %s in un'espressione di lilypond." -#: lilypond-book.py:1653 +#: musicxml2ly.py:1806 #, python-format -msgid "%s is up to date." -msgstr "" +msgid "drum %s type unknown, please add to instrument_drumtype_dict" +msgstr "tipo di percussione %s sconosciuto, si prega di aggiungerlo a instrument_drumtype_dict" -#: lilypond-book.py:1659 -#, fuzzy, python-format -msgid "Writing `%s'..." -msgstr "Genero le voci..." +#: musicxml2ly.py:1810 +msgid "cannot find suitable event" +msgstr "impossibile trovare un evento adatto" -#: lilypond-book.py:1714 -msgid "Output would overwrite input file; use --output." -msgstr "" +#: musicxml2ly.py:1958 +#, python-format +msgid "Negative skip %s (from position %s to %s)" +msgstr "Salto negativo %s (dalla posizione %s a %s)" -#: lilypond-book.py:1718 -#, fuzzy, python-format -msgid "Reading %s..." -msgstr "Genero le voci..." +#: musicxml2ly.py:2099 +#, python-format +msgid "Negative skip found: from %s to %s, difference is %s" +msgstr "Trovato un salto negativo: da %s a %s, la differenza è %s" -#: lilypond-book.py:1737 -#, fuzzy -msgid "Dissecting..." -msgstr "Genero le voci..." +#: musicxml2ly.py:2180 +#, python-format +msgid "unexpected %s; expected %s or %s or %s" +msgstr "%s inaspettato; previsto %s o %s o %s" -#: lilypond-book.py:1753 -#, fuzzy, python-format -msgid "Compiling %s..." -msgstr "Genero le voci..." +#: musicxml2ly.py:2286 +msgid "Encountered closing slur, but no slur is open" +msgstr "Trovata la chiusura di una legatura di portamento, ma non ne è stata aperta alcuna" -#: lilypond-book.py:1762 -#, fuzzy, python-format -msgid "Processing include: %s" -msgstr "Elaboro..." +#: musicxml2ly.py:2289 +msgid "Cannot have two simultaneous (closing) slurs" +msgstr "Due legature di portamento non possono chiudersi simultaneamente" -#: lilypond-book.py:1776 -#, fuzzy, python-format -msgid "Removing `%s'" -msgstr "Genero le voci..." +#: musicxml2ly.py:2298 +msgid "Cannot have a slur inside another slur" +msgstr "Due legature di portamento non possono sovrapporsi" -#: lilypond-book.py:1809 -msgid "option --psfonts not used" -msgstr "" +#: musicxml2ly.py:2301 +msgid "Cannot have two simultaneous slurs" +msgstr "Due legature di portamento non possono intervenire simultaneamente" -#: lilypond-book.py:1810 -msgid "processing with dvips will have no fonts" -msgstr "" +#: musicxml2ly.py:2435 +#, python-format +msgid "cannot simultaneously have more than one mode: %s" +msgstr "non si può avere simultaneamente più di un modo: %s" + +#: musicxml2ly.py:2543 +msgid "Converting to LilyPond expressions..." +msgstr "Conversione nelle espressioni di LilyPond..." + +#: musicxml2ly.py:2554 +msgid "musicxml2ly [OPTION]... FILE.xml" +msgstr "musicxml2ly [OPZIONE]... FILE.xml" -#: lilypond-book.py:1813 -msgid "DVIPS usage:" +#: musicxml2ly.py:2556 +msgid "" +"Convert MusicXML from FILE.xml to LilyPond input.\n" +"If the given filename is -, musicxml2ly reads from the command line.\n" msgstr "" +"Converte FILE.xml (MusicXML) in input di LilyPond.\n" +"Se il nome del file è -, musicxml2ly legge dalla riga di comando.\n" + +#: musicxml2ly.py:2562 midi2ly.py:987 abc2ly.py:1386 lilypond-book.py:140 +#: convert-ly.py:98 etf2ly.py:1202 main.cc:157 +msgid "show this help and exit" +msgstr "mostra questo messaggio di aiuto ed esce" + +#: musicxml2ly.py:2566 +msgid "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" +msgstr "" +"Copyright (c) 2005--2011 di\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen e\n" +" Reinhold Kainhofer \n" + +#: musicxml2ly.py:2580 midi2ly.py:1015 abc2ly.py:1382 lilypond-book.py:212 +#: convert-ly.py:94 etf2ly.py:1206 main.cc:168 +msgid "show version number and exit" +msgstr "mostra il numero di versione ed esce" + +#: musicxml2ly.py:2585 midi2ly.py:1009 lilypond-book.py:204 main.cc:169 +msgid "be verbose" +msgstr "passa in modalità prolissa" + +#: musicxml2ly.py:2591 +msgid "use lxml.etree; uses less memory and cpu time" +msgstr "usa lxml.etree per limitare il consumo di memoria e i tempi del processore" + +#: musicxml2ly.py:2597 +msgid "input file is a zip-compressed MusicXML file" +msgstr "il file di input è un file MusicXML compresso in ZIP" + +#: musicxml2ly.py:2603 +msgid "convert pitches in relative mode (default)" +msgstr "converte le altezze in modo relativo (predefinito)" + +#: musicxml2ly.py:2608 +msgid "convert pitches in absolute mode" +msgstr "converte le altezze in modo assoluto" + +#: musicxml2ly.py:2611 +msgid "LANG" +msgstr "LINGUA" + +#: musicxml2ly.py:2613 +msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German" +msgstr "usa LINGUA per i nomi delle altezze, ad esempio 'deutsch' per i nomi delle note in tedesco" + +#: musicxml2ly.py:2619 +msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +msgstr "non converte le direzioni (^, _ o -) per articolazioni, dinamiche, etc." + +#: musicxml2ly.py:2625 +msgid "do not convert exact vertical positions of rests" +msgstr "non converte le esatte posizioni verticali delle pause" + +#: musicxml2ly.py:2631 +msgid "do not convert the exact page layout and breaks" +msgstr "non converte l'esatta formattazione di pagina e gli a capo" + +#: musicxml2ly.py:2637 +msgid "do not convert beaming information, use lilypond's automatic beaming instead" +msgstr "non converte le informazioni relative alle travature, usare invece la disposizione automatica delle travature di lilypond" + +#: musicxml2ly.py:2640 midi2ly.py:992 midi2ly.py:997 etf2ly.py:1208 +#: main.cc:161 main.cc:166 +msgid "FILE" +msgstr "FILE" + +#: musicxml2ly.py:2645 +msgid "set output filename to FILE, stdout if -" +msgstr "imposta il nome del file di output su FILE (stdout se -)" + +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: musicxml2ly.py:2648 midi2ly.py:1028 abc2ly.py:1395 lilypond-book.py:234 +#: convert-ly.py:144 etf2ly.py:1216 main.cc:281 +#, c-format, python-format +msgid "Report bugs via %s" +msgstr "Segnalare i bug in inglese attraverso %s" + +#: musicxml2ly.py:2728 +#, python-format +msgid "unknown part in part-list: %s" +msgstr "parte sconosciuta in part-list: %s" + +#: musicxml2ly.py:2790 +msgid "Input is compressed, extracting raw MusicXML data from stdin" +msgstr "L'input è compresso. Estrazione dei dati MusicXML da stdin" + +#: musicxml2ly.py:2793 +#, python-format +msgid "Input file %s is compressed, extracting raw MusicXML data" +msgstr "Il file di input %s è compresso. Estrazione dei dati MusicXML" + +#: musicxml2ly.py:2823 +msgid "Reading MusicXML from Standard input ..." +msgstr "Lettura di MusicXML da Standard input ..." + +#: musicxml2ly.py:2825 +#, python-format +msgid "Reading MusicXML from %s ..." +msgstr "Lettura di MusicXML da %s ..." + +#: musicxml2ly.py:2858 +#, python-format +msgid "Output to `%s'" +msgstr "Output inviato a «%s»" + +#: musicxml2ly.py:2925 +#, python-format +msgid "Unable to find input file %s" +msgstr "Impossibile trovare il file di input %s" + +#: midi2ly.py:90 lilypond-book.py:116 convert-ly.py:81 etf2ly.py:1189 +#, python-format +msgid "Copyright (c) %s by" +msgstr "Copyright (c) %s di" + +#: midi2ly.py:92 lilypond-book.py:118 convert-ly.py:83 etf2ly.py:1191 +msgid "Distributed under terms of the GNU General Public License." +msgstr "Distribuito secondo i termini della GNU General Public License." -#: lilypond-book.py:1869 -#, fuzzy, python-format -msgid "Writing fonts to %s..." -msgstr "non trovo e non posso creare `%s'" +#: midi2ly.py:93 lilypond-book.py:119 convert-ly.py:84 etf2ly.py:1192 +msgid "It comes with NO WARRANTY." +msgstr "È distribuito con NESSUNA GARANZIA." -#: midi2ly.py:87 lily-library.scm:615 lily-library.scm:624 +#: midi2ly.py:99 msgid "warning: " msgstr "attenzione: " -#: midi2ly.py:90 midi2ly.py:911 +#: midi2ly.py:102 midi2ly.py:1041 msgid "error: " msgstr "errore: " -#: midi2ly.py:91 -#, fuzzy +#: midi2ly.py:103 msgid "Exiting... " -msgstr "Genero le voci..." +msgstr "Uscita... " -#: midi2ly.py:837 -#, fuzzy, python-format +#: midi2ly.py:960 +#, python-format msgid "%s output to `%s'..." -msgstr "L'output MIDI è inviato a %s..." +msgstr "%s output inviato a «%s»..." -#: midi2ly.py:850 musicxml2ly.py:1803 +#: midi2ly.py:972 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87 #, python-format -msgid "Convert %s to LilyPond input." -msgstr "" +msgid "%s [OPTION]... FILE" +msgstr "%s [OPZIONE]... FILE" + +#: midi2ly.py:973 +#, python-format +msgid "Convert %s to LilyPond input.\n" +msgstr "Converte %s in input LilyPond.\n" -#: midi2ly.py:855 +#: midi2ly.py:978 msgid "print absolute pitches" -msgstr "" +msgstr "stampa altezze assolute" -#: midi2ly.py:857 midi2ly.py:872 +#: midi2ly.py:980 midi2ly.py:1002 msgid "DUR" -msgstr "" +msgstr "DURATA" -#: midi2ly.py:858 +#: midi2ly.py:981 msgid "quantise note durations on DUR" -msgstr "" +msgstr "quantificare la durata delle note in DURATA" -#: midi2ly.py:861 +#: midi2ly.py:984 msgid "print explicit durations" -msgstr "" +msgstr "stampa durate esplicite" -#: midi2ly.py:865 -#, fuzzy +#: midi2ly.py:989 +msgid "prepend FILE to output" +msgstr "antepone FILE all'output" + +#: midi2ly.py:993 msgid "set key: ALT=+sharps|-flats; MINOR=1" -msgstr " -k, --key=ACC[:MINOR] imposta l'armatura: ACC +diesis/-bemolli; :1 minore\n" +msgstr "imposta la tonalità: ALTERAZIONE=+diesis|-bemolle; MINORE=1" -#: midi2ly.py:866 +#: midi2ly.py:994 msgid "ALT[:MINOR]" -msgstr "" +msgstr "ALTERAZIONE[:MINORE]" + +#: midi2ly.py:996 abc2ly.py:1388 etf2ly.py:1207 +msgid "write output to FILE" +msgstr "scrive l'output in FILE" + +#: midi2ly.py:999 +msgid "preview of first 4 bars" +msgstr "anteprima delle prime 4 battute" -#: midi2ly.py:871 +#: midi2ly.py:1001 msgid "quantise note starts on DUR" -msgstr "" +msgstr "quantifica l'inizio di una nota in DURATA" -#: midi2ly.py:874 +#: midi2ly.py:1004 msgid "DUR*NUM/DEN" -msgstr "" +msgstr "DURATA*NUMERATORE/DENOMINATORE" -#: midi2ly.py:877 +#: midi2ly.py:1007 msgid "allow tuplet durations DUR*NUM/DEN" -msgstr "" +msgstr "consente le durate DURATA*NUMERATORE/DENOMINATORE nei gruppi irregolari" + +#: midi2ly.py:1016 lilypond-book.py:215 convert-ly.py:139 etf2ly.py:1210 +#: main.cc:170 +msgid "show warranty and copyright" +msgstr "mostra la garanzia e il copyright" -#: midi2ly.py:889 +#: midi2ly.py:1019 msgid "treat every text as a lyric" -msgstr "" +msgstr "tratta ogni testo come il testo di una canzone" -#: midi2ly.py:892 +#: midi2ly.py:1022 msgid "Examples" -msgstr "" +msgstr "Esempi" -#: midi2ly.py:912 +#: midi2ly.py:1042 msgid "no files specified on command line." -msgstr "" +msgstr "nessun file specificato nella riga di comando." -#: musicxml2ly.py:193 musicxml2ly.py:195 +#: abc2ly.py:1374 #, python-format -msgid "Unprocessed PartGroupInfo %s encountered" +msgid "" +"abc2ly converts ABC music files (see\n" +"%s) to LilyPond input.\n" msgstr "" +"abc2ly converte file musicali ABC (si veda\n" +"%s) in input LilyPond.\n" -#: musicxml2ly.py:426 -#, python-format -msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" -msgstr "" +#: abc2ly.py:1390 +msgid "be strict about success" +msgstr "è severo rispetto all'esito" -#: musicxml2ly.py:609 -#, python-format -msgid "unknown mode %s, expecting 'major' or 'minor'" -msgstr "" +#: abc2ly.py:1392 +msgid "preserve ABC's notion of beams" +msgstr "preserva la nozione di travatura di ABC" -#: musicxml2ly.py:647 -#, python-format -msgid "Encountered unprocessed marker %s\n" -msgstr "" +#: lilypond-book.py:80 +msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." +msgstr "Elaborare i frammenti di codice LilyPond in un documento HTML ibrido, LaTeX, texinfo o DocBook." -#: musicxml2ly.py:741 -#, fuzzy, python-format -msgid "unknown span event %s" -msgstr "tipo di chiave sconosciuto" +#: lilypond-book.py:82 convert-ly.py:46 +msgid "Examples:" +msgstr "Esempi:" -#: musicxml2ly.py:751 -#, fuzzy, python-format -msgid "unknown span type %s for %s" -msgstr "traduttore sconosciuto `%s'" +#: lilypond-book.py:87 +msgid "BOOK" +msgstr "LIBRO" -#: musicxml2ly.py:1259 +#: lilypond-book.py:95 #, python-format -msgid "drum %s type unknown, please add to instrument_drumtype_dict" -msgstr "" +msgid "Exiting (%d)..." +msgstr "Uscita (%d)..." -#: musicxml2ly.py:1263 -#, fuzzy -msgid "cannot find suitable event" -msgstr "non trovo il file: `%s'" +#: lilypond-book.py:127 +msgid "FILTER" +msgstr "FILTRO" -#: musicxml2ly.py:1346 -#, python-format -msgid "Negative skip %s" -msgstr "" +#: lilypond-book.py:130 +msgid "pipe snippets through FILTER [default: `convert-ly -n -']" +msgstr "redirige i frammenti di codice attraverso FILTRO [predefinito: `convert-ly -n -']" -#: musicxml2ly.py:1480 -#, python-format -msgid "Negative skip found: from %s to %s, difference is %s" -msgstr "" +#: lilypond-book.py:134 +msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" +msgstr "usa il formato di output FORMATO (texi [predefinito], texi-html, latex, html, docbook)" -#: musicxml2ly.py:1505 -#, fuzzy, python-format -msgid "unexpected %s; expected %s or %s or %s" -msgstr "Errore non fatale: " +#: lilypond-book.py:135 +msgid "FORMAT" +msgstr "FORMATO" -#: musicxml2ly.py:1583 -msgid "cannot have two simultaneous slurs" -msgstr "" +#: lilypond-book.py:142 +msgid "add DIR to include path" +msgstr "aggiunge DIR al percorso di inclusione" -#: musicxml2ly.py:1711 -#, python-format -msgid "cannot simultaneously have more than one mode: %s" -msgstr "" +#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163 +#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160 +msgid "DIR" +msgstr "DIR" -#: musicxml2ly.py:1791 -#, fuzzy -msgid "Converting to LilyPond expressions..." -msgstr "Genero le voci..." +#: lilypond-book.py:148 +msgid "format Texinfo output so that Info will look for images of music in DIR" +msgstr "formatta l'output di Texinfo in modo che Info cerchi le immagini in DIR" -#: musicxml2ly.py:1802 -msgid "musicxml2ly [options] FILE.xml" -msgstr "" +#: lilypond-book.py:155 +msgid "PAD" +msgstr "PAD" -#: musicxml2ly.py:1812 -#, python-format -msgid "" -"This program is free software. It is covered by the GNU General Public\n" -"License and you are welcome to change it and/or distribute copies of it\n" -"under certain conditions. Invoke as `%s --warranty' for more\n" -"information." -msgstr "" +#: lilypond-book.py:157 +msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" +msgstr "aumenta il lato sinistro della musica (in mm) per allinearla nonostante il numero irregolare di battute" -#: musicxml2ly.py:1835 -msgid "use lxml.etree; uses less memory and cpu time" +#: lilypond-book.py:162 +msgid "write lily-XXX files to DIR, link into --output dir" msgstr "" +"scrive i file lily-XXX in DIR e crea un collegamento verso\n" +"la directory specificata con --output" -#: musicxml2ly.py:1841 -msgid "input file is a zip-compressed MusicXML file" -msgstr "" +#: lilypond-book.py:167 +msgid "Load the additional python PACKAGE (containing e.g. a custom output format)" +msgstr "Carica il PACCHETTO python supplementare (contenente ad esempio un formato di output personalizzato)" -#: musicxml2ly.py:1847 -msgid "convert pitches in relative mode (default)" -msgstr "" +#: lilypond-book.py:168 +msgid "PACKAGE" +msgstr "PACCHETTO" -#: musicxml2ly.py:1852 -msgid "convert pitches in absolute mode" -msgstr "" +#: lilypond-book.py:172 +msgid "write output to DIR" +msgstr "scrive l'output in DIR" -#: musicxml2ly.py:1855 -msgid "LANG" -msgstr "" +#: lilypond-book.py:177 +msgid "COMMAND" +msgstr "COMANDO" -#: musicxml2ly.py:1857 -msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly" -msgstr "" +#: lilypond-book.py:178 +msgid "process ly_files using COMMAND FILE..." +msgstr "elabora ly_files con COMANDO FILE..." -#: musicxml2ly.py:1863 -msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." -msgstr "" +#: lilypond-book.py:182 +msgid "Compile snippets in safe mode" +msgstr "Compila i frammenti di codice in modalità sicura" -#: musicxml2ly.py:1871 -msgid "set output filename to FILE" -msgstr "" +#: lilypond-book.py:188 +msgid "do not fail if no lilypond output is found" +msgstr "non si interrompe se non si trova alcun output di lilypond" -#: musicxml2ly.py:1929 -#, fuzzy, python-format -msgid "unknown part in part-list: %s" -msgstr "traduttore sconosciuto `%s'" +#: lilypond-book.py:194 +msgid "do not fail if no PNG images are found for EPS files" +msgstr "non si interrompe se non si trovano immagini PNG per i file EPS" -#: musicxml2ly.py:1985 -#, python-format -msgid "Input file %s is compressed, extracting raw MusicXML data" +#: lilypond-book.py:200 +msgid "write snippet output files with the same base name as their source file" +msgstr "scrive i file di output dei frammenti di codice con lo stesso nome di base dei file sorgenti" + +#: lilypond-book.py:220 +msgid "" +"run executable PROG instead of latex, or in\n" +"case --pdf option is set instead of pdflatex" msgstr "" +"eseguire il PROGRAMMA eseguibile invece di latex, o nel caso in\n" +"cui viene impostata l'opzione --pdf invece di usare pdflatex" -#: musicxml2ly.py:2011 -#, fuzzy, python-format -msgid "Reading MusicXML from %s ..." -msgstr "Genero le voci..." +#: lilypond-book.py:222 +msgid "PROG" +msgstr "PROGRAMMA" -#: musicxml2ly.py:2039 musicxml2ly.py:2053 -#, fuzzy, python-format -msgid "Output to `%s'" -msgstr "L'output MIDI è inviato a %s..." +#: lilypond-book.py:228 +msgid "create PDF files for use with PDFTeX" +msgstr "creare file PDF per l'utilizzo con PDFTeX" -#: musicxml2ly.py:2096 -#, fuzzy, python-format -msgid "Unable to find input file %s" -msgstr "non trovo il file: `%s'" +#: lilypond-book.py:419 +msgid "Writing snippets..." +msgstr "Scrittura dei frammenti di codice..." -#: getopt-long.cc:140 -#, c-format -msgid "option `%s' requires an argument" -msgstr "l'opzione `%s' richiede un argomento" +#: lilypond-book.py:425 +msgid "Processing..." +msgstr "In elaborazione..." -#: getopt-long.cc:144 -#, fuzzy, c-format -msgid "option `%s' does not allow an argument" -msgstr "opzione `%s' non accetta argomenti" +#: lilypond-book.py:431 +msgid "All snippets are up to date..." +msgstr "Tutti i frammenti di codice sono aggiornati..." -#: getopt-long.cc:148 -#, c-format -msgid "unrecognized option: `%s'" -msgstr "opzione non riconosciuta: `%s'" +#: lilypond-book.py:452 +#, python-format +msgid "cannot determine format for: %s" +msgstr "impossibile determinare il formato per: %s" -#: getopt-long.cc:154 -#, c-format -msgid "invalid argument `%s' to option `%s'" -msgstr "argomento `%s' non valido per l'opzione `%s'" +#: lilypond-book.py:461 +#, python-format +msgid "%s is up to date." +msgstr "%s è aggiornato." -#: warn.cc:68 grob.cc:566 input.cc:82 -#, c-format -msgid "programming error: %s" -msgstr "" +#: lilypond-book.py:475 +#, python-format +msgid "Writing `%s'..." +msgstr "Scrittura di «%s»..." -#: warn.cc:69 input.cc:83 -msgid "continuing, cross fingers" -msgstr "" +#: lilypond-book.py:537 +msgid "Output would overwrite input file; use --output." +msgstr "L'output sovrascriverebbe il file di input; usare --output." -#: accidental-engraver.cc:250 -#, c-format -msgid "accidental typesetting list must begin with context-name: %s" -msgstr "" +#: lilypond-book.py:541 +#, python-format +msgid "Reading %s..." +msgstr "Lettura di %s..." -#: accidental-engraver.cc:277 -#, fuzzy, c-format -msgid "ignoring unknown accidental rule: %s" -msgstr "stringa di escape sconosciuta: `\\%s'" +#: lilypond-book.py:549 +msgid "Dissecting..." +msgstr "Dissezione di..." -#: accidental-engraver.cc:293 -#, c-format -msgid "pair or context-name expected for accidental rule, found %s" -msgstr "" +#: lilypond-book.py:561 +#, python-format +msgid "Compiling %s..." +msgstr "Compilazione di %s" -#: accidental.cc:187 -#, c-format -msgid "Could not find glyph-name for alteration %s" -msgstr "" +#: lilypond-book.py:570 +#, python-format +msgid "Processing include: %s" +msgstr "Elaborazione di include: %s" -#: accidental.cc:202 -msgid "natural alteration glyph not found" -msgstr "" +#: lilypond-book.py:582 +#, python-format +msgid "Removing `%s'" +msgstr "Eliminazione di «%s»" -#: align-interface.cc:325 -msgid "tried to get a translation for something that is no child of mine" +#: convert-ly.py:44 +msgid "" +"Update LilyPond input to newer version. By default, update from the\n" +"version taken from the \\version command, to the current LilyPond version." msgstr "" +"Aggiorna l'input LilyPond a una nuova versione. Per impostazione predefinita aggiorna dalla\n" +"versione presa dal comando \\version alla versione attuale di LilyPond." -#: all-font-metrics.cc:143 -#, fuzzy, c-format -msgid "cannot find font: `%s'" -msgstr "non trovo il file: `%s'" +#: convert-ly.py:102 convert-ly.py:135 +msgid "VERSION" +msgstr "VERSIONE" -#: apply-context-iterator.cc:31 -msgid "\\applycontext argument is not a procedure" -msgstr "" +#: convert-ly.py:104 +msgid "start from VERSION [default: \\version found in file]" +msgstr "parte dalla VERSIONE [predefinito: \\version del file]" -#: auto-change-iterator.cc:63 change-iterator.cc:61 -#, fuzzy, c-format -msgid "cannot change, already in translator: %s" -msgstr "non posso cambiare `%s' in `%s'" +#: convert-ly.py:107 +msgid "edit in place" +msgstr "modifica il file di input" -#: axis-group-engraver.cc:78 -msgid "Axis_group_engraver: vertical group already has a parent" -msgstr "" +#: convert-ly.py:111 +msgid "do not add \\version command if missing" +msgstr "non aggiunge il comando \\version se non è presente" -#: axis-group-engraver.cc:79 -msgid "are there two Axis_group_engravers?" -msgstr "" +#: convert-ly.py:117 +#, python-format +msgid "force updating \\version number to %s" +msgstr "forza l'aggiornamento del numero di \\version a %s" -#: axis-group-engraver.cc:80 -msgid "removing this vertical group" -msgstr "" +#: convert-ly.py:123 +msgid "only update \\version number if file is modified" +msgstr "aggiorna il numero di \\version solo se il file è modificato" -#: axis-group-interface.cc:524 -msgid "an outside-staff object should have a direction, defaulting to up" -msgstr "" +#: convert-ly.py:129 +#, python-format +msgid "show rules [default: -f 0, -t %s]" +msgstr "mostra le regole [predefinito: -f 0, -t %s]" -#: bar-check-iterator.cc:73 -#, fuzzy, c-format -msgid "barcheck failed at: %s" -msgstr "controllo del battute fallito: %s" +#: convert-ly.py:134 +#, python-format +msgid "convert to VERSION [default: %s]" +msgstr "converte a VERSIONE [predefinito: %s]" -#: beam-engraver.cc:126 -msgid "already have a beam" -msgstr "" +#: convert-ly.py:184 +msgid "Applying conversion: " +msgstr "Conversione in corso: " -#: beam-engraver.cc:202 -#, fuzzy -msgid "unterminated beam" -msgstr "beam non terminato" +#: convert-ly.py:197 +msgid "Error while converting" +msgstr "Errore durante la conversione" -#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138 -#, fuzzy -msgid "stem must have Rhythmic structure" -msgstr "I gambi devono avere una struttura ritmica." +#: convert-ly.py:199 +msgid "Stopping at last successful rule" +msgstr "Fermarsi all'ultima regola riuscita" -#: beam-engraver.cc:252 -#, fuzzy -msgid "stem does not fit in beam" -msgstr "il gambo non rientra nel beam" +#: convert-ly.py:224 +#, python-format +msgid "Processing `%s'... " +msgstr "Elaborazione di «%s»... " -#: beam-engraver.cc:253 -msgid "beam was started here" -msgstr "" +#: convert-ly.py:332 +#, python-format +msgid "%s: Unable to open file" +msgstr "%s: Impossibile aprire il file" -#: beam-quanting.cc:307 -msgid "no feasible beam position" +#: convert-ly.py:339 +#, python-format +msgid "%s: Unable to determine version. Skipping" +msgstr "%s: Impossibile determinare la versione. Tralasciato" + +#: convert-ly.py:344 +#, python-format +msgid "" +"%s: Invalid version string `%s' \n" +"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'" msgstr "" +"%s: Stringa di versione non valida `%s' \n" +"Le stringhe di versione valide sono composte da tre numeri separati da punti, ad esempio «2.8.12»" -#: beam.cc:160 -#, fuzzy -msgid "removing beam with no stems" -msgstr "beam con meno di due gambi" +#: etf2ly.py:1195 +#, python-format +msgid "%s [OPTION]... ETF-FILE" +msgstr "%s [OPZIONE]... FILE-ETF" -#: beam.cc:1069 -msgid "no viable initial configuration found: may not find good beam slope" +#: etf2ly.py:1196 +msgid "" +"Enigma Transport Format is a format used by Coda Music Technology's\n" +"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n" msgstr "" +"Enigma Transport Format è un formato usato dal prodotto Finale di Coda Music Technology.\n" +"etf2ly converte un sottoinsieme di ETF in un file LilyPond pronto da usare.\n" -#: break-alignment-interface.cc:195 -#, fuzzy, c-format -msgid "No spacing entry from %s to `%s'" -msgstr "traduttore sconosciuto `%s'" +#: website_post.py:123 +msgid "English" +msgstr "Inglese" -#: change-iterator.cc:23 -#, fuzzy, c-format -msgid "cannot change `%s' to `%s'" -msgstr "non posso cambiare `%s' in `%s'" +#: website_post.py:126 +msgid "Other languages" +msgstr "Altre lingue" -#. FIXME: constant error message. -#: change-iterator.cc:82 -#, fuzzy -msgid "cannot find context to switch to" -msgstr "Non trovo il contesto dello Score" +#: warn.cc:59 +#, c-format +msgid "success: %s" +msgstr "riuscito: %s" -#. We could change the current translator's id, but that would make -#. errors hard to catch. -#. -#. last->translator_id_string () = get_change -#. ()->change_to_id_string (); -#: change-iterator.cc:91 -#, fuzzy, c-format -msgid "not changing to same context type: %s" -msgstr "% strumento:" +#: warn.cc:86 grob.cc:617 input.cc:97 +#, c-format +msgid "programming error: %s" +msgstr "errore di programmazione: %s" -#. FIXME: uncomprehensable message -#: change-iterator.cc:95 -msgid "none of these in my family" -msgstr "" +#: warn.cc:87 input.cc:98 +msgid "continuing, cross fingers" +msgstr "continua, incrociare le dita" -#: chord-tremolo-engraver.cc:88 -msgid "No tremolo to end" -msgstr "" +#: getopt-long.cc:153 +#, c-format +msgid "option `%s' requires an argument" +msgstr "l'opzione «%s» richiede un argomento" -#: chord-tremolo-engraver.cc:110 -#, fuzzy -msgid "unterminated chord tremolo" -msgstr "beam non terminato" +#: getopt-long.cc:157 +#, c-format +msgid "option `%s' does not allow an argument" +msgstr "l'opzione «%s» non accetta argomenti" -#: chord-tremolo-iterator.cc:35 +#: getopt-long.cc:161 #, c-format -msgid "expect 2 elements for chord tremolo, found %d" -msgstr "" +msgid "unrecognized option: `%s'" +msgstr "opzione non riconosciuta: «%s»" -#: clef.cc:54 +#: getopt-long.cc:167 #, c-format -msgid "clef `%s' not found" -msgstr "" +msgid "invalid argument `%s' to option `%s'" +msgstr "argomento «%s» non valido per l'opzione «%s»" -#: cluster.cc:110 -#, fuzzy, c-format -msgid "unknown cluster style `%s'" -msgstr "tipo di chiave sconosciuto" +#: grob.cc:286 +msgid "Infinity or NaN encountered" +msgstr "incontrato infinito o un valore non numerico" -#: cluster.cc:147 -msgid "junking empty cluster" -msgstr "" +#: vaticana-ligature.cc:95 +msgid "flexa-height undefined; assuming 0" +msgstr "flexa-height non definito; si assume 0" -#: coherent-ligature-engraver.cc:100 -#, c-format -msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" -msgstr "" +#: vaticana-ligature.cc:100 +msgid "ascending vaticana style flexa" +msgstr "flexa ascendente in stile vaticana" + +#: vaticana-ligature.cc:188 +msgid "Vaticana_ligature: zero join (delta_pitch == 0)" +msgstr "Vaticana_ligature: unione nulla (delta_pitch == 0)" + +#: parse-scm.cc:101 +msgid "GUILE signaled an error for the expression beginning here" +msgstr "GUILE ha segnalato un errore per l'espressione che inizia qui" + +#: rest-collision-engraver.cc:70 +msgid "rhythmic head is not part of a rhythmic column" +msgstr "la testa ritmica non fa parte di una colonna ritmica" #. if we get to here, just put everything on one line -#: constrained-breaking.cc:167 constrained-breaking.cc:184 -#, fuzzy +#: constrained-breaking.cc:189 constrained-breaking.cc:207 msgid "cannot find line breaking that satisfies constraints" -msgstr "la soluzione non soddisfa i vincoli" +msgstr "impossibile trovare interruzioni di linea che soddisfino i vincoli" + +#: horizontal-bracket-engraver.cc:78 +msgid "do not have that many brackets" +msgstr "non ci sono così tante parentesi" + +#: horizontal-bracket-engraver.cc:87 +msgid "conflicting note group events" +msgstr "eventi di gruppi di note in conflitto" + +#: hyphen-engraver.cc:104 +msgid "removing unterminated hyphen" +msgstr "eliminazione di un trattino non terminato" -#: context-def.cc:130 +#: hyphen-engraver.cc:118 +msgid "unterminated hyphen; removing" +msgstr "trattino non terminato; eliminazione" + +#: pango-font.cc:187 open-type-font.cc:319 #, c-format -msgid "program has no such type: `%s'" -msgstr "" +msgid "FT_Get_Glyph_Name () error: %s" +msgstr "errore in FT_Get_Glyph_Name (): %s" -#: context-property.cc:30 -msgid "need symbol arguments for \\override and \\revert" +#: pango-font.cc:204 +#, c-format +msgid "" +"Glyph has no name, but font supports glyph naming.\n" +"Skipping glyph U+%0X, file %s" msgstr "" +"Il glifo non ha un nome, ma il tipo di carattere permette di dare un nome al glifo.\n" +"Si salta il glifo U+%0X, file %s" + +#: pango-font.cc:241 +#, c-format +msgid "no PostScript font name for font `%s'" +msgstr "nessun nome di tipo di carattere PostScript per «%s»" + +#: pango-font.cc:290 +msgid "FreeType face has no PostScript font name" +msgstr "Il tipo FreeType non ha un nome per il tipo di carattere PostScript" + +#: midi-item.cc:92 +#, c-format +msgid "no such MIDI instrument: `%s'" +msgstr "non esiste questo strumento MIDI: «%s»" + +#: note-heads-engraver.cc:76 +msgid "NoteEvent without pitch" +msgstr "NoteEvent senza altezza" + +#: rest.cc:159 +#, c-format +msgid "rest `%s' not found" +msgstr "pausa «%s» non trovata" + +#: spaceable-grob.cc:94 +#, c-format +msgid "No spring between column %d and next one" +msgstr "Nessuna separazione tra la colonna %d e la successiva" + +#: beam-engraver.cc:147 +msgid "already have a beam" +msgstr "travatura già presente" + +#: beam-engraver.cc:230 +msgid "unterminated beam" +msgstr "travatura non terminata" + +#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150 +msgid "stem must have Rhythmic structure" +msgstr "il gambo deve avere una struttura ritmica" + +#: beam-engraver.cc:274 +msgid "stem does not fit in beam" +msgstr "il gambo non rientra nella travatura" + +#: beam-engraver.cc:275 +msgid "beam was started here" +msgstr "la travatura è iniziata qui" + +#: music-iterator.cc:182 +msgid "Sending non-event to context" +msgstr "Invio di un non-evento al contesto" -#: context.cc:144 -#, fuzzy, c-format +#: context.cc:149 +#, c-format msgid "cannot find or create new `%s'" -msgstr "non trovo e non posso creare `%s'" +msgstr "impossibile trovare o creare un nuovo «%s»" -#: context.cc:206 -#, fuzzy, c-format +#: context.cc:207 +#, c-format msgid "cannot find or create `%s' called `%s'" -msgstr "non trovo e non posso creare '%s' chiamato '%s'" +msgstr "impossibile trovare o creare «%s» chiamato «%s»" -#: context.cc:268 +#: context.cc:269 #, c-format msgid "Invalid CreateContext event: Cannot create %s context" -msgstr "" +msgstr "Evento CreateContext non valido: impossibile creare il contesto %s" -#: context.cc:380 -#, fuzzy, c-format -msgid "cannot find or create: `%s'" -msgstr "non trovo e non posso creare `%s'" - -#: custos.cc:77 +#: context.cc:400 #, c-format -msgid "custos `%s' not found" -msgstr "" +msgid "cannot find or create: `%s'" +msgstr "impossibile trovare o creare: «%s»" -#: dispatcher.cc:71 +#: dispatcher.cc:82 msgid "Event class should be a symbol" -msgstr "" +msgstr "La classe evento dovrebbe essere un simbolo" -#: dispatcher.cc:78 -#, fuzzy, c-format +#: dispatcher.cc:89 +#, c-format msgid "Unknown event class %s" -msgstr "tipo di chiave sconosciuto" +msgstr "Classe di evento %s sconosciuta" -#: dots.cc:37 -#, c-format -msgid "dot `%s' not found" -msgstr "" +#: paper-column-engraver.cc:245 +msgid "forced break was overridden by some other event, should you be using bar checks?" +msgstr "l'interruzione forzata è stata sovrascritta da qualche altro evento, considerare l'uso dei controlli di battuta" -#: dynamic-engraver.cc:192 -#, fuzzy +#: tie-engraver.cc:116 +msgid "unterminated tie" +msgstr "legatura di valore non terminata" + +#: tie-engraver.cc:312 +msgid "lonely tie" +msgstr "legatura di valore solitaria" + +#: dynamic-engraver.cc:197 msgid "cannot find start of (de)crescendo" -msgstr "non trovo un (de)crescendo fino alla fine" +msgstr "impossibile trovare l'inizio del (de)crescendo" -#: dynamic-engraver.cc:201 -#, fuzzy +#: dynamic-engraver.cc:206 msgid "already have a decrescendo" -msgstr "crescendo non terminato" +msgstr "decrescendo già presente" -#: dynamic-engraver.cc:203 -#, fuzzy +#: dynamic-engraver.cc:208 msgid "already have a crescendo" -msgstr "crescendo non terminato" +msgstr "crescendo già presente" -#: dynamic-engraver.cc:206 -#, fuzzy +#: dynamic-engraver.cc:211 msgid "cresc starts here" -msgstr "un cambio di tempo non è ammesso in questo punto" +msgstr "cresc inizia qui" -#: dynamic-engraver.cc:335 -#, fuzzy +#: dynamic-engraver.cc:339 msgid "unterminated (de)crescendo" -msgstr "crescendo non terminato" - -#: extender-engraver.cc:142 extender-engraver.cc:151 -msgid "unterminated extender" -msgstr "extender non terminato" +msgstr "(de)crescendo non terminato" -#: font-config.cc:28 -msgid "Initializing FontConfig..." -msgstr "" +#: paper-score.cc:122 minimal-page-breaking.cc:40 +msgid "Calculating line breaks..." +msgstr "Calcolo delle interruzioni di linea..." -#: font-config.cc:44 +#: paper-score.cc:135 #, c-format -msgid "Rebuilding FontConfig cache %s, this may take a while..." -msgstr "" - -#: font-config.cc:57 -#, fuzzy, c-format -msgid "failed adding font directory: %s" -msgstr "non trovo e non posso creare `%s'" - -#: font-config.cc:59 -#, fuzzy, c-format -msgid "adding font directory: %s" -msgstr "non trovo e non posso creare `%s'" +msgid "Element count %d (spanners %d) " +msgstr "Conto degli elementi %d (spanner %d)." -#: general-scheme.cc:201 -msgid "infinity or NaN encountered while converting Real number" -msgstr "" +#: paper-score.cc:139 +msgid "Preprocessing graphical objects..." +msgstr "Pre-elaborazione degli oggetti grafici..." -#: general-scheme.cc:202 -msgid "setting to zero" -msgstr "" +#: paper-score.cc:163 optimal-page-breaking.cc:208 +#: page-turn-page-breaking.cc:248 +msgid "Drawing systems..." +msgstr "Disegno dei sistemi..." -#: general-scheme.cc:421 output-ps.scm:61 -msgid "Found infinity or nan in output. Substituting 0.0" -msgstr "" +#: mensural-ligature-engraver.cc:96 +msgid "ligature with less than 2 heads -> skipping" +msgstr "legatura con meno di due teste -> si ignora" -#: glissando-engraver.cc:94 -#, fuzzy -msgid "unterminated glissando" -msgstr "slur non terminato" +#: mensural-ligature-engraver.cc:123 +msgid "cannot determine pitch of ligature primitive -> skipping" +msgstr "impossibile determinare l'altezza della legatura primitiva -> si ignora" -#: global-context-scheme.cc:85 global-context-scheme.cc:103 -#, fuzzy -msgid "no music found in score" -msgstr "ho bisogno di musica nello spartito" +#: mensural-ligature-engraver.cc:137 +msgid "single note ligature - skipping" +msgstr "legatura di una nota singola - si ignora" -#: global-context-scheme.cc:93 -#, fuzzy -msgid "Interpreting music... " -msgstr "Interpretazione della musica..." +#: mensural-ligature-engraver.cc:148 +msgid "prime interval within ligature -> skipping" +msgstr "primo intervallo all'interno della legatura -> si ignora" -#: global-context-scheme.cc:116 -#, fuzzy, c-format -msgid "elapsed time: %.2f seconds" -msgstr "durata: %.2f secondi" +#: mensural-ligature-engraver.cc:159 +msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" +msgstr "legatura mensurale: nessuna durata per Mx, L, B. S -> si ignora" -#: gregorian-ligature-engraver.cc:59 -#, c-format -msgid "\\%s ignored" -msgstr "" +#: mensural-ligature-engraver.cc:202 +msgid "semibrevis must be followed by another one -> skipping" +msgstr "una semibreve deve essere seguita da un'altra semibreve -> si ignora" -#: gregorian-ligature-engraver.cc:64 -#, c-format -msgid "implied \\%s added" +#: mensural-ligature-engraver.cc:212 +msgid "" +"semibreves can only appear at the beginning of a ligature,\n" +"and there may be only zero or two of them" msgstr "" +"le semibrevi possono comparire solo all'inizio di una legatura,\n" +"e ce ne possono essere due o nessuna" -#. ligature may not start with 2nd head of pes or flexa -#: gregorian-ligature-engraver.cc:212 -#, fuzzy -msgid "cannot apply `\\~' on first head of ligature" -msgstr "non trovo le estremità di %s" - -#. (pitch == prev_pitch) -#: gregorian-ligature-engraver.cc:224 -msgid "cannot apply `\\~' on heads with identical pitch" +#: mensural-ligature-engraver.cc:232 +msgid "" +"invalid ligatura ending:\n" +"when the last note is a descending brevis,\n" +"the penultimate note must be another one,\n" +"or the ligatura must be LB or SSB" msgstr "" +"fine della legatura non valido:\n" +"se l'ultima nota è una breve discendente,\n" +"lo deve essere anche la penultima nota,\n" +"oppure la legatura deve essere LB o SSB" -#: grob-interface.cc:57 -#, fuzzy, c-format -msgid "Unknown interface `%s'" -msgstr "tipo di chiave sconosciuto" +#: mensural-ligature-engraver.cc:386 +msgid "unexpected case fall-through" +msgstr "caso inatteso e non interpretabile" -#: grob-interface.cc:68 +#: piano-pedal-engraver.cc:298 #, c-format -msgid "Grob `%s' has no interface for property `%s'" -msgstr "" +msgid "expect 3 strings for piano pedals, found: %ld" +msgstr "previste tre corde per i pedali del pianoforte, trovate: %ld" -#: grob-property.cc:34 +#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324 +#: piano-pedal-performer.cc:104 #, c-format -msgid "%d: %s" -msgstr "" +msgid "cannot find start of piano pedal: `%s'" +msgstr "impossibile trovare l'inizio del pedale del pianoforte: «%s»" -#: grob-property.cc:173 +#: piano-pedal-engraver.cc:359 #, c-format -msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" -msgstr "" +msgid "cannot find start of piano pedal bracket: `%s'" +msgstr "impossibile trovare la parentesi di apertura del pedale del pianoforte: «%s»" -#: grob.cc:251 -msgid "Infinity or NaN encountered" -msgstr "" - -#: hairpin.cc:187 -msgid "decrescendo too small" -msgstr "" +#: input.cc:131 source-file.cc:179 source-file.cc:194 +msgid "position unknown" +msgstr "posizione sconosciuta" -#: horizontal-bracket-engraver.cc:59 -msgid "do not have that many brackets" -msgstr "" +#: paper-outputter-scheme.cc:41 +#, c-format +msgid "Layout output to `%s'..." +msgstr "Output della formattazione inviato a «%s»..." -#: horizontal-bracket-engraver.cc:68 -#, fuzzy -msgid "conflicting note group events" -msgstr "richieste di timing in conflitto" +#: general-scheme.cc:306 +msgid "infinity or NaN encountered while converting Real number" +msgstr "si è incontrato infinito o un valore non numerico durante la conversione di un numero reale" -#: hyphen-engraver.cc:93 -#, fuzzy -msgid "removing unterminated hyphen" -msgstr "beam non terminato" +#: general-scheme.cc:307 +msgid "setting to zero" +msgstr "impostato a zero" -#: hyphen-engraver.cc:107 -#, fuzzy -msgid "unterminated hyphen; removing" -msgstr "beam non terminato" +#: general-scheme.cc:543 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Trovato infinito o un valore non numerico nell'output. Sostituito con 0.0" -#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:117 +#: music.cc:151 #, c-format -msgid "cannot find file: `%s'" -msgstr "non trovo il file: `%s'" +msgid "octave check failed; expected \"%s\", found: \"%s\"" +msgstr "controllo dell'ottava fallito: previsto \"%s\", trovato: \"%s\"" -#: includable-lexer.cc:55 lily-parser-scheme.cc:108 -#, fuzzy, c-format -msgid "(search path: `%s')" -msgstr "(Il path di caricamento è `%s'" +#: music.cc:219 +msgid "(normalized pitch)" +msgstr "(altezza normalizzata)" -#: input.cc:112 source-file.cc:168 source-file.cc:183 -msgid "position unknown" -msgstr "posizione sconosciuta" +#: music.cc:223 +#, c-format +msgid "Transposing %s by %s makes alteration larger than double" +msgstr "La trasposizione di %s da %s ingrandisce le alterazioni più del doppio" -#: key-signature-interface.cc:74 +#: translator-ctors.cc:65 #, c-format -msgid "No glyph found for alteration: %s" -msgstr "" +msgid "unknown translator: `%s'" +msgstr "traduttore sconosciuto: «%s»" -#: key-signature-interface.cc:84 -msgid "alteration not found" -msgstr "" +#: partial-iterator.cc:45 +msgid "trying to use \\partial after the start of a piece" +msgstr "tentativo di usare \\partial all'inizio di un brano" -#: ligature-bracket-engraver.cc:62 ligature-engraver.cc:93 -#, fuzzy -msgid "cannot find start of ligature" -msgstr "non trovo le estremità di %s" +#: new-fingering-engraver.cc:106 +msgid "cannot add text scripts to individual note heads" +msgstr "impossibile aggiungere delle scritte testuali alle teste delle note individuali" -#: ligature-bracket-engraver.cc:75 ligature-engraver.cc:120 -#, fuzzy -msgid "already have a ligature" -msgstr "crescendo non terminato" +#: new-fingering-engraver.cc:250 +msgid "no placement found for fingerings" +msgstr "nessuna posizione trovata per le diteggiature" + +#: new-fingering-engraver.cc:251 +msgid "placing below" +msgstr "si colloca in basso" + +#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72 +msgid "cannot find start of ligature" +msgstr "impossibile trovare l'inizio della legatura" -#: ligature-engraver.cc:98 +#: ligature-engraver.cc:109 msgid "no right bound" -msgstr "" +msgstr "manca il limite destro" + +#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85 +msgid "already have a ligature" +msgstr "legatura già presente" -#: ligature-engraver.cc:129 +#: ligature-engraver.cc:140 msgid "no left bound" -msgstr "" +msgstr "manca il limite sinistro" -#: ligature-engraver.cc:173 -#, fuzzy +#: ligature-engraver.cc:185 msgid "unterminated ligature" -msgstr "slur non terminato" +msgstr "legatura non terminata" -#: ligature-engraver.cc:202 +#: ligature-engraver.cc:214 msgid "ignoring rest: ligature may not contain rest" -msgstr "" +msgstr "pausa ignorata: la legatura non può contenere una pausa" -#: ligature-engraver.cc:203 -#, fuzzy +#: ligature-engraver.cc:215 msgid "ligature was started here" -msgstr "un cambio di tempo non è ammesso in questo punto" +msgstr "la legatura è iniziata qui" -#: lily-guile.cc:78 -#, fuzzy, c-format -msgid "(load path: `%s')" -msgstr "(Il path di caricamento è `%s'" +#: auto-change-iterator.cc:74 change-iterator.cc:72 +#, c-format +msgid "cannot change, already in translator: %s" +msgstr "impossibile cambiare, già nel traduttore: %s" -#: lily-guile.cc:438 +#: accidental-engraver.cc:180 #, c-format -msgid "cannot find property type-check for `%s' (%s)." -msgstr "" +msgid "accidental typesetting list must begin with context-name: %s" +msgstr "la lista tipografica delle alterazioni deve iniziare con context-name: %s" -#: lily-guile.cc:441 -msgid "perhaps a typing error?" -msgstr "" +#: accidental-engraver.cc:210 +#, c-format +msgid "procedure or context-name expected for accidental rule, found %s" +msgstr "si aspettava una procedura o un nome di contesto per la regola di alterazione accidentale, si è trovato %s" -#: lily-guile.cc:448 -msgid "doing assignment anyway" -msgstr "" +#: ttf.cc:481 ttf.cc:530 +#, c-format +msgid "font index %d too large for font `%s', using index 0" +msgstr "l'indice del tipo di carattere %d è troppo grande per il tipo di carattere «%s», si usa l'indice 0" -#: lily-guile.cc:460 +#: ttf.cc:513 ttf.cc:565 +msgid "font index must be non-negative, using index 0" +msgstr "l'indice del tipo di carattere deve essere non negativo, si usa l'indice 0" + +#: break-alignment-interface.cc:206 #, c-format -msgid "type check for `%s' failed; value `%s' must be of type `%s'" +msgid "No spacing entry from %s to `%s'" +msgstr "Nessuno spazio da %s a «%s»" + +#: minimal-page-breaking.cc:44 +msgid "Calculating page breaks..." +msgstr "Calcolo delle interruzioni di pagina..." + +#: vaticana-ligature-engraver.cc:400 +#, c-format +msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style" +msgstr "prefisso/i «%s» di questa testa ignorato/i in base alle restrizioni dello stile di legatura scelto" + +#: vaticana-ligature-engraver.cc:736 +#, c-format +msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" +msgstr "Vaticana_ligature_engraver: si imposta `spacing-increment = %f': ptr =%ul" + +#: paper-book.cc:214 +#, c-format +msgid "program option -dprint-pages not supported by backend `%s'" +msgstr "l'opzione -dprint-pages del programma non è supportata dal backend «%s»" + +#: paper-book.cc:233 +#, c-format +msgid "program option -dpreview not supported by backend `%s'" +msgstr "l'opzione -dpreview del programma non è supportata dal backend «%s»" + +#: output-def.cc:235 +msgid "margins do not fit with line-width, setting default values" +msgstr "i margini non corrispondono con la larghezza del rigo, si impostano i valori predefiniti" + +#: output-def.cc:242 +msgid "systems run off the page due to improper paper settings, setting default values" +msgstr "i sistemi escono fuori dalla pagina a causa di errate impostazioni del foglio, si impostano i valori predefiniti" + +#: score-engraver.cc:78 +#, c-format +msgid "cannot find `%s'" +msgstr "impossibile trovare «%s»" + +#: score-engraver.cc:80 +msgid "Music font has not been installed properly." +msgstr "Il tipo di carattere musicale non è stato installato correttamente." + +#: score-engraver.cc:82 +#, c-format +msgid "Search path `%s'" +msgstr "Percorso di ricerca «%s»" + +#: score-engraver.cc:84 +msgid "Aborting" +msgstr "Si sospende l'esecuzione" + +#: note-collision.cc:497 +msgid "ignoring too many clashing note columns" +msgstr "troppe collisioni tra colonne di note, ignorate" + +#. fixme: be more verbose. +#: volta-engraver.cc:111 +msgid "cannot end volta spanner" +msgstr "impossibile terminare lo spanner della volta" + +#: volta-engraver.cc:121 +msgid "already have a volta spanner, ending that one prematurely" +msgstr "spanner della volta già presente, si termina quello prematuramente" + +#: volta-engraver.cc:125 +msgid "also already have an ended spanner" +msgstr "è già presente uno spanner terminato" + +#: volta-engraver.cc:126 +msgid "giving up" +msgstr "rinuncia" + +#: page-layout-problem.cc:322 +msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed" +msgstr "impossibile far entrare la musica nella pagina: richiesta la spaziatura ridotta, ma la pagina è già stata compressa" + +#: page-layout-problem.cc:325 +#, c-format +msgid "cannot fit music on page: overflow is %f" +msgstr "impossibile far entrare la musica nella pagina: l'eccesso è %f" + +#: page-layout-problem.cc:327 +msgid "compressing music to fit" +msgstr "si comprime la musica per farla entrare" + +#: page-layout-problem.cc:765 +msgid "staff-affinities should only decrease" +msgstr "staff-affinities deve solo diminuire" + +#: apply-context-iterator.cc:42 +msgid "\\applycontext argument is not a procedure" +msgstr "l'argomento di \\applycontext non è una procedura" + +#. FIXME: constant error message. +#: mark-engraver.cc:157 +msgid "rehearsalMark must have integer value" +msgstr "rehearsalMark deve avere un valore intero" + +#: mark-engraver.cc:163 +msgid "mark label must be a markup object" +msgstr "l'etichetta del segno deve essere un oggetto di markup" + +#: new-dynamic-engraver.cc:142 +#, c-format +msgid "" +"unknown crescendo style: %s\n" +"defaulting to hairpin." msgstr "" +"stile di crescendo sconosciuto: %s\n" +"si usa la forcella predefinita." -#: lily-lexer.cc:251 +#: new-dynamic-engraver.cc:200 +#, c-format +msgid "unterminated %s" +msgstr "%s non terminato" + +#: stem-engraver.cc:103 +msgid "tremolo duration is too long" +msgstr "la durata del tremolo è troppo lunga" + +#. FIXME: +#: stem-engraver.cc:140 +#, c-format +msgid "adding note head to incompatible stem (type = %d)" +msgstr "si aggiunge la testa della nota a un gambo incompatibile (tipo = %d)" + +#: stem-engraver.cc:142 +msgid "maybe input should specify polyphonic voices" +msgstr "forse l'input dovrebbe specificare le voci polifoniche" + +#: lily-lexer.cc:264 msgid "include files are not allowed in safe mode" -msgstr "" +msgstr "l'inclusione di file non è permessa in modalità sicura" -#: lily-lexer.cc:270 -#, fuzzy, c-format +#: lily-lexer.cc:291 +#, c-format msgid "identifier name is a keyword: `%s'" -msgstr "Il nome dell'identificatore è una parola chiave (`%s')" +msgstr "Il nome dell'identificatore è una parola chiave: «%s»" -#: lily-lexer.cc:285 +#: lily-lexer.cc:312 #, c-format msgid "error at EOF: %s" -msgstr "errore alla fine del file: %s" +msgstr "errore alla fine del file (EOF): %s" -#: lily-parser-scheme.cc:30 -#, fuzzy, c-format -msgid "deprecated function called: %s" -msgstr "non riesco a trovare il carattere `%s'" +#: lyric-combine-music-iterator.cc:337 +#, c-format +msgid "cannot find Voice `%s'" +msgstr "impossibile trovare la voce (Voice) «%s»" -#: lily-parser-scheme.cc:89 -#, fuzzy, c-format -msgid "Changing working directory to: `%s'" -msgstr "non trovo e non posso creare `%s'" +#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109 +#, c-format +msgid "cannot find file: `%s'" +msgstr "impossibile trovare il file: «%s»" -#: lily-parser-scheme.cc:107 -#, fuzzy, c-format -msgid "cannot find init file: `%s'" -msgstr "non trovo il file: `%s'" +#: includable-lexer.cc:73 lily-parser-scheme.cc:100 +#, c-format +msgid "(search path: `%s')" +msgstr "(percorso di ricerca: «%s»)" -#: lily-parser-scheme.cc:126 -#, fuzzy, c-format -msgid "Processing `%s'" -msgstr "Elaboro..." +#: note-column.cc:135 +msgid "cannot have note heads and rests together on a stem" +msgstr "impossibile avere teste e pause insieme su un gambo" -#: lily-parser.cc:99 -msgid "Parsing..." -msgstr "Analisi..." +#: beam.cc:180 +msgid "removing beam with no stems" +msgstr "rimozione delle travature senza gambi" -#: lily-parser.cc:127 -#, fuzzy -msgid "braces do not match" -msgstr "le bretelle no si accoppiano" +#. We are completely screwed. +#: beam.cc:1274 +msgid "no viable initial configuration found: may not find good beam slope" +msgstr "nessuna configurazione iniziale fattibile trovata: si potrebbe non trovare una buona inclinazione delle travature" -#: lyric-combine-music-iterator.cc:327 -#, fuzzy, c-format -msgid "cannot find Voice `%s'" -msgstr "Non trovo il file `%s'" +#: slur-engraver.cc:93 +#, c-format +msgid "direction of %s invalid: %d" +msgstr "direzione di %s non valida: %d" -#: lyric-engraver.cc:158 -msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." -msgstr "" +#: slur-engraver.cc:162 +msgid "unterminated slur" +msgstr "legatura di portamento non terminata" + +#: slur-engraver.cc:174 +msgid "cannot end slur" +msgstr "impossibile terminare la legatura di portamento" + +#: font-config.cc:40 +msgid "Initializing FontConfig..." +msgstr "Inizializzazione di FontConfig..." + +#: font-config.cc:55 font-config-scheme.cc:152 +#, c-format +msgid "failed adding font directory: %s" +msgstr "errore nell'aggiungere la directory dei tipi di carattere: %s" + +#: font-config.cc:57 font-config-scheme.cc:154 +#, c-format +msgid "adding font directory: %s" +msgstr "aggiungere la directory dei tipi di carattere: %s" + +#: font-config.cc:61 +msgid "Building font database..." +msgstr "Creazione del database dei tipi di carattere..." + +#. find out the ideal number of pages +#: optimal-page-breaking.cc:62 +msgid "Finding the ideal number of pages..." +msgstr "Determinazione del numero ottimale di pagine..." + +#: optimal-page-breaking.cc:85 +msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page" +msgstr "impossibile soddisfare contemporaneamente systems-per-page e page-count, si ignora systems-per-page" + +#: optimal-page-breaking.cc:105 +msgid "Fitting music on 1 page..." +msgstr "Compressione della musica in una pagina..." + +#: optimal-page-breaking.cc:107 +#, c-format +msgid "Fitting music on %d pages..." +msgstr "Compressione della musica in %d pagine..." + +#: optimal-page-breaking.cc:109 +#, c-format +msgid "Fitting music on %d or %d pages..." +msgstr "Compressione della musica in %d o %d pagine..." + +#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173 +#, c-format +msgid "trying %d systems" +msgstr "tentando %d sistemi" + +#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201 +#, c-format +msgid "best score for this sys-count: %f" +msgstr "miglior punteggio per questo numero di sistemi: %f" + +#: accidental.cc:200 +#, c-format +msgid "Could not find glyph-name for alteration %s" +msgstr "Non si è trovato il nome del glifo per l'alterazione %s" + +#: accidental.cc:215 +msgid "natural alteration glyph not found" +msgstr "alterazione naturale del glifo non trovata" + +#: system.cc:197 +#, c-format +msgid "Element count %d" +msgstr "Numero degli elementi %d" + +#: system.cc:303 +#, c-format +msgid "Grob count %d" +msgstr "Numero degli oggetti grafici %d" + +#: slur.cc:362 +#, c-format +msgid "Ignoring grob for slur: %s. avoid-slur not set?" +msgstr "Si ignora il grob per la legatura di portamento: %s. Non si è impostato avoid-slur?" + +#: font-config-scheme.cc:168 +#, c-format +msgid "failed adding font file: %s" +msgstr "errore nell'aggiungere il file dei tipi di carattere: %s" + +#: font-config-scheme.cc:170 +#, c-format +msgid "adding font file: %s" +msgstr "aggiungere il file dei tipi di carattere: %s" + +#: hairpin.cc:186 +msgid "decrescendo too small" +msgstr "decrescendo troppo piccolo" -#: main.cc:100 +#: extender-engraver.cc:170 extender-engraver.cc:179 +msgid "unterminated extender" +msgstr "estensore non terminato" + +#: lily-guile.cc:89 +#, c-format +msgid "(load path: `%s')" +msgstr "(percorso di caricamento: «%s»)" + +#: lily-guile.cc:437 +#, c-format +msgid "cannot find property type-check for `%s' (%s)." +msgstr "impossibile trovare la proprietà type-check per «%s» (%s)." + +#: lily-guile.cc:440 +msgid "perhaps a typing error?" +msgstr "forse un errore di digitazione?" + +#: lily-guile.cc:447 +msgid "doing assignment anyway" +msgstr "compito comunque in corso" + +#: lily-guile.cc:459 +#, c-format +msgid "type check for `%s' failed; value `%s' must be of type `%s'" +msgstr "controllo del tipo per «%s» fallito; il valore «%s» deve essere del tipo «%s»" + +#: main.cc:109 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -1488,9 +2167,11 @@ msgid "" "under certain conditions. Invoke as `%s --warranty' for more\n" "information.\n" msgstr "" +"Questo programma è software libero. È coperto dalla GNU General Public\n" +"License che permette di modificarlo o distribuirne copie rispettando certe\n" +"condizioni. Per maggiori informazioni, invocare «%s --warranty».\n" -#: main.cc:106 -#, fuzzy +#: main.cc:115 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License version 2\n" @@ -1506,1085 +2187,1184 @@ msgid "" "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" "Boston, MA 02111-1307, USA.\n" msgstr "" -" Questo programma è free software; puoi ridistribuirlo e/o\n" +" Questo programma è software libero; puoi ridistribuirlo e/o\n" "modificarlo sotto le condizioni della GNU General Public License, versione 2,\n" "come pubblicata dalla Free Software Foundation.\n" +"\n" " Questo programma è distribuito nella speranza che possa essere utile,\n" "ma SENZA ALCUNA GARANZIA; è privo anche di garanzia implicita di\n" -"COMMERCIABILITA' o della POSSIBILITA' D'USO A SCOPI PARTICOLARI. Si veda la GNU\n" +"COMMERCIABILITÀ o della POSSIBILITÀ D'USO A SCOPI PARTICOLARI. Si veda la GNU\n" "General Public License per ulteriori dettagli.\n" "\n" " Con questo programma dovresti aver ricevuto una copia della\n" -"GNU General Public License (ci riferiamo al file COPYING); se ciò non èavvenuto, scrivi a: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02136\n" -"USA.\n" +"GNU General Public License; se ciò non è avvenuto, scrivi a\n" +"Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" +"Boston, MA 02111-1307, USA.\n" -#: main.cc:137 +#: main.cc:146 msgid "SYM[=VAL]" -msgstr "" +msgstr "SIMBOLO[=VALORE]" -#: main.cc:138 +#: main.cc:147 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." msgstr "" +"imposta l'opzione di Scheme SIMBOLO a VALORE (predefinito: #t).\n" +"Usare -dhelp per ottenere aiuto." -#: main.cc:141 +#: main.cc:150 msgid "EXPR" -msgstr "" +msgstr "ESPRESSIONE" -#: main.cc:141 +#: main.cc:150 msgid "evaluate scheme code" -msgstr "" +msgstr "valuta il codice scheme" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:144 +#: main.cc:153 msgid "FORMATs" -msgstr "" +msgstr "FORMATO" -#: main.cc:144 +#: main.cc:153 msgid "dump FORMAT,... Also as separate options:" -msgstr "" - -#: main.cc:145 -#, fuzzy -msgid "generate DVI (tex backend only)" -msgstr "vincoli degenerati" +msgstr "scarica FORMATO,... Anche come opzioni separate:" -#: main.cc:146 -#, fuzzy +#: main.cc:154 msgid "generate PDF (default)" -msgstr "vincoli degenerati" +msgstr "genera PDF (predefinito)" -#: main.cc:147 -#, fuzzy +#: main.cc:155 msgid "generate PNG" -msgstr "vincoli degenerati" +msgstr "genera PNG" -#: main.cc:148 -#, fuzzy +#: main.cc:156 msgid "generate PostScript" -msgstr "vincoli degenerati" +msgstr "genera PostScript" -#: main.cc:149 -msgid "generate TeX (tex backend only)" -msgstr "" - -#: main.cc:151 +#: main.cc:158 msgid "FIELD" -msgstr "" +msgstr "CAMPO" -#: main.cc:151 +#: main.cc:158 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" msgstr "" +"scrive il campo di intestazione CAMPO sul\n" +"file chiamato BASENAME.CAMPO" -#: main.cc:153 -#, fuzzy +#: main.cc:160 msgid "add DIR to search path" -msgstr " -I, --include=DIR aggiunge DIR ai path di ricerca\n" +msgstr "aggiunge DIRECTORY ai percorsi di ricerca" -#: main.cc:154 -#, fuzzy +#: main.cc:161 msgid "use FILE as init file" -msgstr " -i, --init=NOMEFILE usa NOMEFILE come file iniziale\n" +msgstr "usa FILE come file di inizializzazione" -#: main.cc:156 +#: main.cc:163 msgid "USER, GROUP, JAIL, DIR" -msgstr "" +msgstr "UTENTE, GRUPPO, GABBIA, DIRECTORY" -#: main.cc:156 +#: main.cc:163 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" msgstr "" +"chroot a GABBIA, diventa UTENTE:GRUPPO\n" +"ed entra in DIRECTORY" -#: main.cc:159 +#: main.cc:166 msgid "write output to FILE (suffix will be added)" -msgstr "" +msgstr "scrive l'output su FILE (verrà aggiunto un suffisso)" -#: main.cc:160 +#: main.cc:167 msgid "relocate using directory of lilypond program" -msgstr "" +msgstr "trasferisce alla directory del programma lilypond" -#: main.cc:203 -#, fuzzy, c-format +#. Do not update the copyright years here, run `make grand-replace' +#: main.cc:238 +#, c-format msgid "" "Copyright (c) %s by\n" "%s and others." -msgstr "Copyright (c) %s di" +msgstr "" +"Copyright (c) %s di\n" +"%s e altri." #. No version number or newline here. It confuses help2man. -#: main.cc:230 -#, fuzzy, c-format +#: main.cc:265 +#, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Uso: %s [OPZIONE]... [FILE]..." -#: main.cc:232 -#, fuzzy, c-format +#: main.cc:267 msgid "Typeset music and/or produce MIDI from FILE." -msgstr "Stampa partitura oppure suona una song MIDI da FILE o ." +msgstr "Stampa partitura oppure crea MIDI da FILE." -#: main.cc:234 -#, c-format +#: main.cc:269 msgid "LilyPond produces beautiful music notation." -msgstr "" +msgstr "LilyPond produce bella notazione musicale." -#: main.cc:236 +#: main.cc:271 #, c-format msgid "For more information, see %s" -msgstr "" +msgstr "Per maggiori informazioni si veda %s" -#: main.cc:238 -#, c-format +#: main.cc:273 msgid "Options:" -msgstr "Opzioni: " +msgstr "Opzioni:" -#: main.cc:242 +#: main.cc:327 #, c-format -msgid "Report bugs via %s" -msgstr "" +msgid "expected %d arguments with jail, found: %u" +msgstr "previsti gli argomenti %d per la gabbia, trovati: %u" -#: main.cc:288 +#: main.cc:341 #, c-format -msgid "expected %d arguments with jail, found: %u" -msgstr "" - -#: main.cc:302 -#, fuzzy, c-format msgid "no such user: %s" -msgstr "% strumento:" +msgstr "non esiste questo utente: %s" -#: main.cc:304 +#: main.cc:343 #, c-format msgid "cannot get user id from user name: %s: %s" -msgstr "" +msgstr "impossibile acquisire l'id dell'utente dal nome utente: %s: %s" -#: main.cc:319 -#, fuzzy, c-format +#: main.cc:358 +#, c-format msgid "no such group: %s" -msgstr "% strumento:" +msgstr "non esiste questo gruppo: %s" -#: main.cc:321 -#, fuzzy, c-format +#: main.cc:360 +#, c-format msgid "cannot get group id from group name: %s: %s" -msgstr "non posso cambiare `%s' in `%s'" +msgstr "impossibile acquisire l'id del gruppo dal nome del gruppo: %s:%s" -#: main.cc:329 -#, fuzzy, c-format +#: main.cc:368 +#, c-format msgid "cannot chroot to: %s: %s" -msgstr "non trovo e non posso creare `%s'" +msgstr "non si può fare il chroot a: %s: %s" -#: main.cc:336 -#, fuzzy, c-format +#: main.cc:375 +#, c-format msgid "cannot change group id to: %d: %s" -msgstr "non posso cambiare `%s' in `%s'" +msgstr "non si può cambiare l'id del gruppo in: %d: %s" -#: main.cc:342 -#, fuzzy, c-format +#: main.cc:381 +#, c-format msgid "cannot change user id to: %d: %s" -msgstr "non posso cambiare `%s' in `%s'" +msgstr "non si può cambiare l'id dell'utente in: %d: %s" -#: main.cc:348 -#, fuzzy, c-format +#: main.cc:387 +#, c-format msgid "cannot change working directory to: %s: %s" -msgstr "non trovo e non posso creare `%s'" +msgstr "non si può passare alla directory di lavoro: %s: %s" -#: main.cc:594 +#: main.cc:628 #, c-format msgid "exception caught: %s" -msgstr "" - -#. FIXME: constant error message. -#: mark-engraver.cc:129 -msgid "rehearsalMark must have integer value" -msgstr "" - -#: mark-engraver.cc:135 -msgid "mark label must be a markup object" -msgstr "" - -#: mensural-ligature-engraver.cc:85 -msgid "ligature with less than 2 heads -> skipping" -msgstr "" - -#: mensural-ligature-engraver.cc:112 -msgid "cannot determine pitch of ligature primitive -> skipping" -msgstr "" - -#: mensural-ligature-engraver.cc:126 -msgid "single note ligature - skipping" -msgstr "" - -#: mensural-ligature-engraver.cc:138 -msgid "prime interval within ligature -> skipping" -msgstr "" - -#: mensural-ligature-engraver.cc:150 -msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" -msgstr "" +msgstr "ricevuta un'eccezione: %s" -#: mensural-ligature-engraver.cc:198 -msgid "semibrevis must be followed by another one -> skipping" -msgstr "" - -#: mensural-ligature-engraver.cc:209 -msgid "" -"semibreves can only appear at the beginning of a ligature,\n" -"and there may be only zero or two of them" -msgstr "" - -#: mensural-ligature-engraver.cc:236 -msgid "" -"invalid ligatura ending:\n" -"when the last note is a descending brevis,\n" -"the penultimate note must be another one,\n" -"or the ligatura must be LB or SSB" -msgstr "" +#: key-signature-interface.cc:78 +#, c-format +msgid "No glyph found for alteration: %s" +msgstr "Nessun glifo trovato per l'alterazione: %s" -#: mensural-ligature-engraver.cc:356 -msgid "unexpected case fall-through" -msgstr "" +#: key-signature-interface.cc:88 +msgid "alteration not found" +msgstr "alterazione non trovata" -#: mensural-ligature.cc:141 -msgid "Mensural_ligature: unexpected case fall-through" -msgstr "" +#: dots.cc:48 +#, c-format +msgid "dot `%s' not found" +msgstr "punto «%s» non trovato" -#: mensural-ligature.cc:192 -msgid "Mensural_ligature: (join_right == 0)" -msgstr "" +#: translator.cc:359 +#, c-format +msgid "Two simultaneous %s events, junking this one" +msgstr "Due eventi %s simultanei, si butta via questo" -#: midi-item.cc:81 -#, fuzzy, c-format -msgid "no such MIDI instrument: `%s'" -msgstr "% strumento:" +#: translator.cc:360 +#, c-format +msgid "Previous %s event here" +msgstr "L'evento %s precedente sta qui" -#: midi-stream.cc:28 -#, fuzzy, c-format -msgid "cannot open for write: %s: %s" -msgstr "non posso aprire il file: `%s'" +#: glissando-engraver.cc:105 +msgid "unterminated glissando" +msgstr "glissando non terminato" -#: midi-stream.cc:44 -#, fuzzy, c-format -msgid "cannot write to file: `%s'" -msgstr "non posso aprire il file: `%s'" +#: text-spanner-engraver.cc:73 +msgid "cannot find start of text spanner" +msgstr "impossibile trovare l'inizio di uno spanner testuale" -#: minimal-page-breaking.cc:42 -#, fuzzy -msgid "Computing page breaks..." -msgstr "Calcolo delle posizioni della colonne..." +#: text-spanner-engraver.cc:86 +msgid "already have a text spanner" +msgstr "spanner testuale già presente" -#: music-iterator.cc:171 -msgid "Sending non-event to context" -msgstr "" +#: text-spanner-engraver.cc:132 +msgid "unterminated text spanner" +msgstr "spanner testuale non terminato" -#: music.cc:140 +#: clef.cc:65 #, c-format -msgid "octave check failed; expected \"%s\", found: \"%s\"" -msgstr "" - -#: music.cc:203 -#, fuzzy, c-format -msgid "transposition by %s makes alteration larger than double" -msgstr "la trasposizine di %s rende le alterazioni più che doppie" +msgid "clef `%s' not found" +msgstr "chiave «%s» non trovata" -#: new-fingering-engraver.cc:96 -msgid "cannot add text scripts to individual note heads" -msgstr "" +#. +#. Todo: should make typecheck? +#. +#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. +#. +#: time-signature-engraver.cc:75 +#, c-format +msgid "strange time signature found: %d/%d" +msgstr "si è incontrato uno strano segno di tempo: %d/%d" -#: new-fingering-engraver.cc:239 -msgid "no placement found for fingerings" -msgstr "" +#: lily-parser-scheme.cc:82 +#, c-format +msgid "Changing working directory to: `%s'" +msgstr "Si cambia la directory di lavoro a: «%s»" -#: new-fingering-engraver.cc:240 -msgid "placing below" -msgstr "" +#: lily-parser-scheme.cc:99 +#, c-format +msgid "cannot find init file: `%s'" +msgstr "impossibile trovare il file di init: «%s»" -#: note-collision.cc:463 -#, fuzzy -msgid "ignoring too many clashing note columns" -msgstr "Troppe collisioni tra colonne di note. Le ignoro." +#: lily-parser-scheme.cc:118 +#, c-format +msgid "Processing `%s'" +msgstr "Elaborazione di «%s»" -#: note-column.cc:124 -msgid "cannot have note heads and rests together on a stem" -msgstr "" +#: lily-parser-scheme.cc:204 +msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead." +msgstr "ly:parser-parse-string è valido solo con un nuovo parser. Usare ly:parser-include-string al suo posto." -#: note-head.cc:63 +#: custos.cc:88 #, c-format -msgid "none of note heads `%s' or `%s' found" -msgstr "" +msgid "custos `%s' not found" +msgstr "custos «%s» non trovato" -#: note-heads-engraver.cc:64 -msgid "NoteEvent without pitch" -msgstr "" +#: program-option-scheme.cc:237 +#, c-format +msgid "no such internal option: %s" +msgstr "opzione interna sconosciuta: %s" -#: open-type-font.cc:33 -#, fuzzy, c-format -msgid "cannot allocate %lu bytes" -msgstr "non posso maneggiare %s" +#: rest-collision.cc:146 +msgid "cannot resolve rest collision: rest direction not set" +msgstr "impossibile risolvere la collisione di pause: direzione delle pause non impostata" -#: open-type-font.cc:37 -#, fuzzy, c-format -msgid "cannot load font table: %s" -msgstr "non trovo il file: `%s'" +#: rest-collision.cc:160 rest-collision.cc:205 +msgid "too many colliding rests" +msgstr "troppe collisioni tra pause" -#: open-type-font.cc:42 -#, fuzzy, c-format -msgid "Free type error: %s" -msgstr "errore: " +#: episema-engraver.cc:75 +msgid "already have an episema" +msgstr "episema già presente" -#: open-type-font.cc:100 -#, c-format -msgid "unsupported font format: %s" -msgstr "" +#: episema-engraver.cc:88 +msgid "cannot find start of episema" +msgstr "impossibile trovare l'inizio dell'episema" -#: open-type-font.cc:102 -#, fuzzy, c-format -msgid "error reading font file %s: %s" -msgstr "non trovo e non posso creare `%s'" +#: episema-engraver.cc:137 +msgid "unterminated episema" +msgstr "episema non terminato" -#: open-type-font.cc:177 +#: grob-property.cc:34 #, c-format -msgid "FT_Get_Glyph_Name () Freetype error: %s" -msgstr "" +msgid "%d: %s" +msgstr "%d: %s" -#: open-type-font.cc:302 pango-font.cc:167 +#: grob-property.cc:173 #, c-format -msgid "FT_Get_Glyph_Name () error: %s" -msgstr "" - -#. find out the ideal number of pages -#: optimal-page-breaking.cc:56 -msgid "Finding the ideal number of pages..." -msgstr "" - -#: optimal-page-breaking.cc:71 -msgid "Fitting music on 1 page..." -msgstr "" - -#: optimal-page-breaking.cc:73 -#, fuzzy, c-format -msgid "Fitting music on %d pages..." -msgstr "non trovo e non posso creare `%s'" +msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" +msgstr "dipendenza ciclica: calculation-in-progress incontrato per #'%s (%s)" -#: optimal-page-breaking.cc:75 +#: relocate.cc:54 #, c-format -msgid "Fitting music on %d or %d pages..." -msgstr "" - -#: optimal-page-breaking.cc:152 page-turn-page-breaking.cc:226 -#: paper-score.cc:146 -#, fuzzy -msgid "Drawing systems..." -msgstr "Genero le voci..." +msgid "Setting %s to %s" +msgstr "Si imposta %s su %s" -#: page-turn-page-breaking.cc:146 +#: relocate.cc:74 #, c-format -msgid "page-turn-page-breaking: breaking from %d to %d" -msgstr "" +msgid "no such file: %s for %s" +msgstr "file inesistente: %s per %s" -#: page-turn-page-breaking.cc:195 -msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." -msgstr "" +#: relocate.cc:84 relocate.cc:102 +#, c-format +msgid "no such directory: %s for %s" +msgstr "directory inesistente: %s per %s" -#: page-turn-page-breaking.cc:208 +#: relocate.cc:94 #, c-format -msgid "Calculating page and line breaks (%d possible page breaks)..." -msgstr "" +msgid "%s=%s (prepend)\n" +msgstr "%s=%s (prefisso)\n" -#: page-turn-page-breaking.cc:275 +#: relocate.cc:124 #, c-format -msgid "break starting at page %d" -msgstr "" +msgid "not relocating, no %s/ or current/ found under %s" +msgstr "non si riloca, non si è incontrato %s/ o current/ in %s" -#: page-turn-page-breaking.cc:276 +#: relocate.cc:135 #, c-format -msgid "\tdemerits: %f" -msgstr "" +msgid "Relocation: compile datadir=%s, new datadir=%s" +msgstr "Rilocazione: compilare datadir=%s, nuova datadir=%s" -#: page-turn-page-breaking.cc:277 +#: relocate.cc:148 #, c-format -msgid "\tsystem count: %d" -msgstr "" +msgid "Relocation: framework_prefix=%s" +msgstr "Rilocazione: framework_prefix=%s" -#: page-turn-page-breaking.cc:278 +#: relocate.cc:189 #, c-format -msgid "\tpage count: %d" -msgstr "" +msgid "Relocation: is absolute: argv0=%s" +msgstr "Rilocazione: è assoluta: argv0=%s" -#: page-turn-page-breaking.cc:279 +#: relocate.cc:196 #, c-format -msgid "\tprevious break: %d" -msgstr "" +msgid "Relocation: from cwd: argv0=%s" +msgstr "Rilocazione: da cwd: argv0=%s" -#: pango-font.cc:184 +#: relocate.cc:213 #, c-format msgid "" -"Glyph has no name, but font supports glyph naming.\n" -"Skipping glyph U+%0X, file %s" +"Relocation: from PATH=%s\n" +"argv0=%s" msgstr "" +"Rilocazione: da PATH=%s\n" +"argv0=%s" -#: pango-font.cc:229 -#, fuzzy, c-format -msgid "no PostScript font name for font `%s'" -msgstr "non posso aprire il file: `%s'" - -#: pango-font.cc:277 -msgid "FreeType face has no PostScript font name" -msgstr "" +#: relocate.cc:240 +msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" +msgstr "LILYPONDPREFIX è obsoleto, usare LILYPOND_DATADIR" -#: paper-column-engraver.cc:221 -msgid "forced break was overridden by some other event, should you be using bar checks?" -msgstr "" +#: relocate.cc:367 +#, c-format +msgid "Relocation file: %s" +msgstr "File di rilocazione: %s" -#: paper-outputter-scheme.cc:30 -#, fuzzy, c-format -msgid "Layout output to `%s'..." -msgstr "L'output MIDI è inviato a %s..." +#: relocate.cc:373 source-file.cc:65 +#, c-format +msgid "cannot open file: `%s'" +msgstr "impossibile aprire il file: «%s»" -#: paper-score.cc:105 -#, fuzzy -msgid "Calculating line breaks..." -msgstr "Calcolo delle posizioni della colonne..." +#: relocate.cc:403 +#, c-format +msgid "Unknown relocation command %s" +msgstr "Comando di rilocazione sconosciuto %s" -#: paper-score.cc:118 +#: translator-group.cc:188 #, c-format -msgid "Element count %d (spanners %d) " -msgstr "" +msgid "cannot find: `%s'" +msgstr "impossibile trovare: «%s»" -#: paper-score.cc:122 -#, fuzzy -msgid "Preprocessing graphical objects..." -msgstr "Pre-elaborazione..." +#: phrasing-slur-engraver.cc:157 +msgid "unterminated phrasing slur" +msgstr "legatura di frase non terminata" -#: parse-scm.cc:87 -msgid "GUILE signaled an error for the expression beginning here" -msgstr "" +#: lyric-engraver.cc:176 +msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." +msgstr "Le sillabe del testo non hanno note. Usare \\lyricsto o associatedVoice." -#: percent-repeat-engraver.cc:200 -#, fuzzy -msgid "unterminated percent repeat" -msgstr "beam non terminato" +#: page-breaking.cc:248 +msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set" +msgstr "si ignorano min-systems-per-page e max-systems-per-page perché è stato impostato systems-per-page" -#: performance.cc:43 -#, fuzzy +#: page-breaking.cc:253 +msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values" +msgstr "min-systems-per-page è maggiore di max-systems-per-page, si ignorano entrambi i valori" + +#: performance.cc:54 msgid "Track..." -msgstr "traccia " +msgstr "Traccia..." -#: performance.cc:72 +#: performance.cc:83 msgid "MIDI channel wrapped around" -msgstr "" +msgstr "Numerazione canale MIDI ricominciata" -#: performance.cc:73 +#: performance.cc:84 msgid "remapping modulo 16" -msgstr "" +msgstr "riassegnata con modulo 16" -#: performance.cc:101 +#: performance.cc:111 #, c-format msgid "MIDI output to `%s'..." -msgstr "L'output MIDI è inviato a %s..." +msgstr "L'output MIDI è inviato a «%s»..." -#: phrasing-slur-engraver.cc:139 -#, fuzzy -msgid "unterminated phrasing slur" -msgstr "slur non terminato" +#: tuplet-engraver.cc:107 +msgid "No tuplet to end" +msgstr "Nessun gruppo irregolare da terminare" -#: piano-pedal-engraver.cc:286 +#: gregorian-ligature-engraver.cc:70 #, c-format -msgid "expect 3 strings for piano pedals, found: %ld" -msgstr "" +msgid "\\%s ignored" +msgstr "\\%s ignorato" -#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312 -#: piano-pedal-performer.cc:93 -#, fuzzy, c-format -msgid "cannot find start of piano pedal: `%s'" -msgstr "non risco a trovare una ruling note a %s" +#: gregorian-ligature-engraver.cc:75 +#, c-format +msgid "implied \\%s added" +msgstr "aggiunto il \\%s implicato" -#: piano-pedal-engraver.cc:347 -#, fuzzy, c-format -msgid "cannot find start of piano pedal bracket: `%s'" -msgstr "non risco a trovare una ruling note a %s" +#. ligature may not start with 2nd head of pes or flexa +#: gregorian-ligature-engraver.cc:224 +msgid "cannot apply `\\~' on first head of ligature" +msgstr "impossibile applicare «\\~» sulla prima testa della legatura" -#: program-option-scheme.cc:215 -#, fuzzy, c-format -msgid "no such internal option: %s" -msgstr "% strumento:" +#. (pitch == prev_pitch) +#: gregorian-ligature-engraver.cc:236 +msgid "cannot apply `\\~' on heads with identical pitch" +msgstr "impossibile applicare «\\~» su teste di identica altezza" -#: property-iterator.cc:74 -#, c-format -msgid "not a grob name, `%s'" -msgstr "" +#: chord-tremolo-engraver.cc:88 +msgid "No tremolo to end" +msgstr "Nessun tremolo alla fine" -#: relative-octave-check.cc:38 -msgid "Failed octave check, got: " -msgstr "" +#: chord-tremolo-engraver.cc:109 +msgid "unterminated chord tremolo" +msgstr "tremolo dell'accordo non terminato" -#: relocate.cc:44 -#, fuzzy, c-format -msgid "Setting %s to %s" -msgstr "non trovo e non posso creare `%s'" +#: axis-group-engraver.cc:94 +msgid "Axis_group_engraver: vertical group already has a parent" +msgstr "Axis_group_engraver: il gruppo verticale ha già un genitore" -#: relocate.cc:64 -#, fuzzy, c-format -msgid "no such file: %s for %s" -msgstr "% strumento:" +#: axis-group-engraver.cc:95 +msgid "are there two Axis_group_engravers?" +msgstr "ci sono due Axis_group_engravers?" -#: relocate.cc:74 relocate.cc:92 -#, fuzzy, c-format -msgid "no such directory: %s for %s" -msgstr "% strumento:" +#: axis-group-engraver.cc:96 +msgid "removing this vertical group" +msgstr "eliminazione di questo gruppo verticale" -#: relocate.cc:84 +#: cluster.cc:120 #, c-format -msgid "%s=%s (prepend)\n" -msgstr "" +msgid "unknown cluster style `%s'" +msgstr "stile cluster sconosciuto «%s»" -#: relocate.cc:114 -#, c-format -msgid "not relocating, no %s/ or current/ found under %s" -msgstr "" +#: cluster.cc:157 +msgid "junking empty cluster" +msgstr "eliminazione di cluster vuoti" -#: relocate.cc:125 -#, c-format -msgid "Relocation: compile datadir=%s, new datadir=%s" -msgstr "" +#: context-property.cc:42 +msgid "need symbol arguments for \\override and \\revert" +msgstr "sono necessari argomenti simbolici per \\override e \\revert" -#: relocate.cc:138 +#: source-file.cc:85 #, c-format -msgid "Relocation: framework_prefix=%s" -msgstr "" +msgid "expected to read %d characters, got %d" +msgstr "si prevedeva di leggere %d caratteri, se ne sono ottenuti %d" -#: relocate.cc:179 -#, c-format -msgid "Relocation: is absolute: argv0=%s" -msgstr "" +#: axis-group-interface.cc:631 +msgid "an outside-staff object should have a direction, defaulting to up" +msgstr "un oggetto esterno al rigo dovrebbe avere una direzione, si imposta in su come da impostazione predefinita" -#: relocate.cc:186 +#: coherent-ligature-engraver.cc:111 #, c-format -msgid "Relocation: from cwd: argv0=%s" -msgstr "" +msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" +msgstr "Coherent_ligature_engraver: impostare `spacing-increment=0.01': ptr=%ul" + +#: percent-repeat-engraver.cc:148 +msgid "unterminated percent repeat" +msgstr "ripetizione percentuale non terminata" -#: relocate.cc:195 +#: note-head.cc:76 #, c-format -msgid "" -"Relocation: from PATH=%s\n" -"argv0=%s" -msgstr "" +msgid "none of note heads `%s' or `%s' found" +msgstr "non si è trovata alcuna delle teste delle note «%s» o «%s»" -#: relocate.cc:229 -msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" -msgstr "" +#: relative-octave-check.cc:49 +msgid "Failed octave check, got: " +msgstr "Il controllo dell'ottava è fallito, si è ottenuto:" -#: relocate.cc:356 -#, fuzzy, c-format -msgid "Relocation file: %s" -msgstr "non posso aprire il file: `%s'" +#. FIXME: +#: script-engraver.cc:113 +msgid "do not know how to interpret articulation:" +msgstr "non so come interpretare l'articolazione:" -#: relocate.cc:392 +#: script-engraver.cc:114 +msgid " scheme encoding: " +msgstr " codifica di Scheme: " + +#: all-font-metrics.cc:156 #, c-format -msgid "Unknown relocation command %s" -msgstr "" +msgid "cannot find font: `%s'" +msgstr "impossibile trovare il tipo di carattere: «%s»" -#: rest-collision.cc:145 -msgid "cannot resolve rest collision: rest direction not set" -msgstr "" +#: property-iterator.cc:85 +#, c-format +msgid "not a grob name, `%s'" +msgstr "non è il nome di un grob, «%s»" -#: rest-collision.cc:159 rest-collision.cc:204 -#, fuzzy -msgid "too many colliding rests" -msgstr "Troppi crescendi" +#: bar-check-iterator.cc:84 +#, c-format +msgid "barcheck failed at: %s" +msgstr "controllo di battuta fallito a: %s" -#: rest.cc:132 +#: stem.cc:116 +msgid "weird stem size, check for narrow beams" +msgstr "strana dimensione del gambo, controllare di non avere travature strette" + +#: stem.cc:657 #, c-format -msgid "rest `%s' not found" -msgstr "" +msgid "flag `%s' not found" +msgstr "non si trova la coda uncinata «%s»" -#: score-engraver.cc:67 -#, fuzzy, c-format -msgid "cannot find `%s'" -msgstr "non trovo `%s'" +#: stem.cc:673 +#, c-format +msgid "flag stroke `%s' not found" +msgstr "non si trova il tratto «%s» della coda uncinata" -#: score-engraver.cc:69 -msgid "Music font has not been installed properly." -msgstr "" +#: global-context-scheme.cc:96 global-context-scheme.cc:114 +msgid "no music found in score" +msgstr "nessuna musica trovata nello spartito" -#: score-engraver.cc:71 -#, fuzzy, c-format -msgid "Search path `%s'" -msgstr "(Il path di caricamento è `%s'" +#: global-context-scheme.cc:104 +msgid "Interpreting music... " +msgstr "Interpretazione della musica..." -#: score-engraver.cc:73 -msgid "Aborting" -msgstr "" +#: global-context-scheme.cc:127 +#, c-format +msgid "elapsed time: %.2f seconds" +msgstr "tempo trascorso: %.2f secondi" -#: score.cc:167 -#, fuzzy -msgid "already have music in score" -msgstr "ho bisogno di musica nello spartito" +#: translator-group-ctors.cc:40 +#, c-format +msgid "fatal error. Couldn't find type: %s" +msgstr "errore fatale. Impossibile trovare il tipo: %s" -#: score.cc:168 -msgid "this is the previous music" -msgstr "" +#: mensural-ligature.cc:171 +msgid "Mensural_ligature: unexpected case fall-through" +msgstr "Mensural_ligature: caso inatteso e non interpretabile" -#: score.cc:173 -#, fuzzy -msgid "errors found, ignoring music expression" -msgstr "ho trovato un errore, /*non sto elaborando lo spartito*/" +#: mensural-ligature.cc:233 +msgid "Mensural_ligature: (join_right == 0)" +msgstr "Mensural_ligature: (join_right == 0)" -#. FIXME: -#: script-engraver.cc:102 -msgid "do not know how to interpret articulation: " -msgstr "" +#: page-turn-page-breaking.cc:168 +#, c-format +msgid "page-turn-page-breaking: breaking from %d to %d" +msgstr "page-turn-page-breaking: interruzione da %d a %d" -#: script-engraver.cc:103 -#, fuzzy -msgid "scheme encoding: " -msgstr "Opzioni: " +#: page-turn-page-breaking.cc:217 +msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." +msgstr "impossibile far entrare il primo cambio di pagina in una pagina singola. Si consideri la possibilità di impostare first-page-number su un numero pari." -#: slur-engraver.cc:82 +#: page-turn-page-breaking.cc:230 #, c-format -msgid "direction of %s invalid: %d" -msgstr "" +msgid "Calculating page and line breaks (%d possible page breaks)..." +msgstr "Calcolo delle interruzioni di pagina e di linea (%d possibili interruzioni di pagina)..." -#: slur-engraver.cc:151 -msgid "unterminated slur" -msgstr "slur non terminato" +#: page-turn-page-breaking.cc:300 +#, c-format +msgid "break starting at page %d" +msgstr "l'interruzione comincia alla pagina %d" -#: slur-engraver.cc:163 -#, fuzzy -msgid "cannot end slur" -msgstr "non posso maneggiare %s" +#: page-turn-page-breaking.cc:301 +#, c-format +msgid "\tdemerits: %f" +msgstr "\tdemeriti: %f" -#: slur.cc:353 +#: page-turn-page-breaking.cc:302 #, c-format -msgid "Ignoring grob for slur: %s. avoid-slur not set?" -msgstr "" +msgid "\tsystem count: %d" +msgstr "\tnumero dei sistemi: %d" -#: source-file.cc:74 +#: page-turn-page-breaking.cc:303 #, c-format -msgid "expected to read %d characters, got %d" -msgstr "" +msgid "\tpage count: %d" +msgstr "\tnumero delle pagine: %d" -#: spaceable-grob.cc:83 +#: page-turn-page-breaking.cc:304 #, c-format -msgid "No spring between column %d and next one" -msgstr "" +msgid "\tprevious break: %d" +msgstr "\tinterruzione precedente: %d" -#: staff-symbol-engraver.cc:62 -msgid "staff-span event has no direction" -msgstr "" +#: lily-parser.cc:106 +msgid "Parsing..." +msgstr "Analisi..." -#: stem-engraver.cc:92 -msgid "tremolo duration is too long" -msgstr "" +#: lily-parser.cc:134 +msgid "braces do not match" +msgstr "le graffe non corrispondono" -#. FIXME: -#: stem-engraver.cc:129 +#: score.cc:178 +msgid "already have music in score" +msgstr "musica già presente nello spartito" + +#: score.cc:179 +msgid "this is the previous music" +msgstr "questa è la musica precedente" + +#: score.cc:184 +msgid "errors found, ignoring music expression" +msgstr "trovati degli errori, si ignora l'espressione musicale" + +#: change-iterator.cc:34 #, c-format -msgid "adding note head to incompatible stem (type = %d)" -msgstr "" +msgid "cannot change `%s' to `%s'" +msgstr "impossibile cambiare «%s» in «%s»" -#: stem-engraver.cc:131 -msgid "maybe input should specify polyphonic voices" -msgstr "" +#. FIXME: constant error message. +#: change-iterator.cc:93 +msgid "cannot find context to switch to" +msgstr "impossibile trovare il contesto su cui spostarsi" -#: stem.cc:105 -#, fuzzy -msgid "weird stem size, check for narrow beams" -msgstr "dimensione del gambo poco ortodossa; check for narrow beams" +#. We could change the current translator's id, but that would make +#. errors hard to catch. +#. +#. last->translator_id_string () = get_change +#. ()->change_to_id_string (); +#: change-iterator.cc:102 +#, c-format +msgid "not changing to same context type: %s" +msgstr "non passare allo stesso tipo di contesto: %s" -#: stem.cc:627 +#. FIXME: uncomprehensable message +#: change-iterator.cc:106 +msgid "none of these in my family" +msgstr "nessuno di questi nella mia famiglia" + +#. If there is no such symbol, we default to the numbered style. +#. (Here really with a warning!) +#: time-signature.cc:94 #, c-format -msgid "flag `%s' not found" -msgstr "" +msgid "time signature symbol `%s' not found; reverting to numbered style" +msgstr "non si è trovato il simbolo di tempo «%s»: si ritorna allo stile numerato" -#: stem.cc:638 +#: grob-interface.cc:68 #, c-format -msgid "flag stroke `%s' not found" -msgstr "" +msgid "Unknown interface `%s'" +msgstr "Interfaccia «%s» sconosciuta" -#: system.cc:179 +#: grob-interface.cc:79 #, c-format -msgid "Element count %d." -msgstr "" +msgid "Grob `%s' has no interface for property `%s'" +msgstr "Il grob «%s» non ha un'interfaccia per la proprietà «%s»" -#: system.cc:271 +#: open-type-font.cc:44 #, c-format -msgid "Grob count %d" -msgstr "" +msgid "cannot allocate %lu bytes" +msgstr "impossibile allocare %lu byte" -#: text-spanner-engraver.cc:60 -#, fuzzy -msgid "cannot find start of text spanner" -msgstr "non trovo le estremità di %s" +#: open-type-font.cc:48 +#, c-format +msgid "cannot load font table: %s" +msgstr "impossibile caricare la tabella dei tipi di carattere: %s" -#: text-spanner-engraver.cc:72 -#, fuzzy -msgid "already have a text spanner" -msgstr "crescendo non terminato" +#: open-type-font.cc:53 +#, c-format +msgid "FreeType error: %s" +msgstr "Errore FreeType: %s" -#: text-spanner-engraver.cc:118 -#, fuzzy -msgid "unterminated text spanner" -msgstr "extender non terminato" +#: open-type-font.cc:111 +#, c-format +msgid "unsupported font format: %s" +msgstr "formato di tipo di carattere non supportato: %s" -#: tie-engraver.cc:262 -msgid "lonely tie" -msgstr "" +#: open-type-font.cc:113 +#, c-format +msgid "error reading font file %s: %s" +msgstr "errore nella lettura del file del tipo di carattere %s: %s" -#. -#. Todo: should make typecheck? -#. -#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. -#. -#: time-signature-engraver.cc:64 +#: open-type-font.cc:188 #, c-format -msgid "strange time signature found: %d/%d" -msgstr "" +msgid "FT_Get_Glyph_Name () Freetype error: %s" +msgstr "errore di Freetype in FT_Get_Glyph_Name (): %s" -#. If there is no such symbol, we default to the numbered style. -#. (Here really with a warning!) -#: time-signature.cc:83 +#: midi-stream.cc:39 #, c-format -msgid "time signature symbol `%s' not found; reverting to numbered style" -msgstr "" +msgid "cannot open for write: %s: %s" +msgstr "impossibile aprire il file con permesso di scrittura: %s: %s" -#: translator-ctors.cc:53 -#, fuzzy, c-format -msgid "unknown translator: `%s'" -msgstr "traduttore sconosciuto `%s'" +#: midi-stream.cc:55 +#, c-format +msgid "cannot write to file: `%s'" +msgstr "impossibile scrivere su file: «%s»" + +#: parser.yy:820 +msgid "\\paper cannot be used in \\score, use \\layout instead" +msgstr "non si può usare \\paper dentro \\score, usare \\layout al suo posto" + +#: parser.yy:844 +msgid "need \\paper for paper block" +msgstr "è necessario \\paper per il blocco \"paper\"" -#: translator-group-ctors.cc:29 +#: parser.yy:1363 +msgid "only \\consists takes non-string argument." +msgstr "solo \\consists prende un argomento diverso da una stringa" + +#: parser.yy:1376 +msgid "Grob name should be alphanumeric" +msgstr "Il nome del grob deve essere alfanumerico" + +#: parser.yy:1685 +msgid "second argument must be pitch list" +msgstr "il secondo argomento deve essere una lista di altezze" + +#: parser.yy:1716 parser.yy:1721 parser.yy:2194 +msgid "have to be in Lyric mode for lyrics" +msgstr "bisogna essere in modo \"Lyric\" per i testi" + +#: parser.yy:1818 +msgid "expecting string as script definition" +msgstr "ci si aspetta una stringa come definizione dello script" + +#: parser.yy:1973 parser.yy:2024 #, c-format -msgid "fatal error. Couldn't find type: %s" -msgstr "" +msgid "not a duration: %d" +msgstr "non è una durata: %d" -#: translator-group.cc:146 -#, fuzzy, c-format -msgid "cannot find: `%s'" -msgstr "non trovo `%s'" +#: parser.yy:2148 +msgid "have to be in Note mode for notes" +msgstr "bisogna essere in modo \"Note\" per le note" + +#: parser.yy:2209 +msgid "have to be in Chord mode for chords" +msgstr "bisogna essere in modo \"Chord\" per gli accordi" -#: translator.cc:347 +#: lexer.ll:190 +msgid "stray UTF-8 BOM encountered" +msgstr "si è incontrato un segno BOM UTF-8 isolato" + +#: lexer.ll:194 +msgid "Skipping UTF-8 BOM" +msgstr "Si ignora il BOM UTF-8" + +#: lexer.ll:249 #, c-format -msgid "Two simultaneous %s events, junking this one" -msgstr "" +msgid "Renaming input to: `%s'" +msgstr "Si rinomina l'input in: «%s»" + +#: lexer.ll:266 +msgid "quoted string expected after \\version" +msgstr "\\version deve essere seguito da una stringa compresa tra virgolette" + +#: lexer.ll:270 +msgid "quoted string expected after \\sourcefilename" +msgstr "\\sourcefilename deve essere seguito da una stringa compresa tra virgolette" + +#: lexer.ll:274 +msgid "integer expected after \\sourcefileline" +msgstr "\\sourcefileline deve essere seguito da un intero" + +#: lexer.ll:287 +msgid "EOF found inside a comment" +msgstr "fine del file (EOF) trovata in un commento" + +#: lexer.ll:302 +msgid "\\maininput not allowed outside init files" +msgstr "\\maininput non permesso fuori dai file di inizializzazione" -#: translator.cc:348 +#: lexer.ll:326 #, c-format -msgid "Previous %s event here" -msgstr "" +msgid "wrong or undefined identifier: `%s'" +msgstr "indentificatore errato o non definito: «%s»" -#: trill-spanner-engraver.cc:84 -#, fuzzy -msgid "cannot find start of trill spanner" -msgstr "non trovo le estremità di %s" +#. backup rule +#: lexer.ll:335 +msgid "end quote missing" +msgstr "mancano le virgolette di chiusura" -#: trill-spanner-engraver.cc:96 -#, fuzzy -msgid "already have a trill spanner" -msgstr "crescendo non terminato" +#: lexer.ll:485 +msgid "Brace found at end of lyric. Did you forget a space?" +msgstr "Trovata una parentesi alla fine del testo. È stato dimenticato uno spazio?" -#: tuplet-engraver.cc:96 -msgid "No tuplet to end" -msgstr "" +#: lexer.ll:595 +msgid "Brace found at end of markup. Did you forget a space?" +msgstr "Trovata una parentesi alla fine della marcatura. È stato dimenticato uno spazio?" -#: vaticana-ligature-engraver.cc:389 +#: lexer.ll:699 #, c-format -msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style" -msgstr "" +msgid "invalid character: `%c'" +msgstr "carattere non valido: «%c»" -#: vaticana-ligature-engraver.cc:718 +#: lexer.ll:814 lexer.ll:815 #, c-format -msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" -msgstr "" +msgid "unknown escaped string: `\\%s'" +msgstr "stringa di escape sconosciuta: «\\%s»" -#: vaticana-ligature.cc:84 -msgid "flexa-height undefined; assuming 0" -msgstr "" +#: lexer.ll:924 lexer.ll:925 +#, c-format +msgid "file too old: %s (oldest supported: %s)" +msgstr "file troppo vecchio: %s (il più vecchio che si può gestire è: %s)" -#: vaticana-ligature.cc:89 -msgid "ascending vaticana style flexa" -msgstr "" +#: lexer.ll:925 lexer.ll:926 +msgid "consider updating the input with the convert-ly script" +msgstr "si consideri di aggiornare l'input con lo script convert-ly" -#: vaticana-ligature.cc:177 -msgid "Vaticana_ligature: zero join (delta_pitch == 0)" -msgstr "" +#: lexer.ll:931 lexer.ll:932 +#, c-format +msgid "program too old: %s (file requires: %s)" +msgstr "programma troppo vecchio: %s (il file richiede: %s)" -#. fixme: be more verbose. -#: volta-engraver.cc:100 -#, fuzzy -msgid "cannot end volta spanner" -msgstr "non trovo le estremità di %s" +#: documentation-lib.scm:59 +#, scheme-format +msgid "Processing ~S..." +msgstr "Elaborazione di ~S..." -#: volta-engraver.cc:110 -msgid "already have a volta spanner, ending that one prematurely" -msgstr "" +#: documentation-lib.scm:176 +#, scheme-format +msgid "Writing ~S..." +msgstr "Scrittura di ~S..." -#: volta-engraver.cc:114 -#, fuzzy -msgid "also already have an ended spanner" -msgstr "crescendo non terminato" +#: documentation-lib.scm:198 +#, scheme-format +msgid "cannot find description for property ~S (~S)" +msgstr "impossibile trovare la descrizione per la proprietà ~S (~S)" -#: volta-engraver.cc:115 -msgid "giving up" -msgstr "" +#: parser-clef.scm:141 parser-clef.scm:181 +#, scheme-format +msgid "unknown clef type `~a'" +msgstr "tipo di chiave sconosciuto «~a»" -#: parser.yy:728 -msgid "\\paper cannot be used in \\score, use \\layout instead" -msgstr "" +#: parser-clef.scm:142 parser-clef.scm:182 +#, scheme-format +msgid "supported clefs: ~a" +msgstr "chiavi supportate: ~a" -#: parser.yy:752 -msgid "need \\paper for paper block" -msgstr "" +#: document-backend.scm:132 +#, scheme-format +msgid "pair expected in doc ~s" +msgstr "si aspettava una coppia nel documento ~s" -#: parser.yy:1211 -msgid "Grob name should be alphanumeric" -msgstr "" +#: document-backend.scm:189 +#, scheme-format +msgid "cannot find interface for property: ~S" +msgstr "impossibile trovare un'interfaccia per le proprietà: ~S" -#: parser.yy:1509 -msgid "second argument must be pitch list" -msgstr "" +#: document-backend.scm:199 +#, scheme-format +msgid "unknown Grob interface: ~S" +msgstr "interfaccia del Grob sconosciuta: ~S" -#: parser.yy:1536 parser.yy:1541 parser.yy:2006 -#, fuzzy -msgid "have to be in Lyric mode for lyrics" -msgstr "bisogna essere in Lyric mode per i testi" +#: framework-eps.scm:108 +#, scheme-format +msgid "Writing ~a..." +msgstr "Scrittura di ~a..." -#: parser.yy:1638 -msgid "expecting string as script definition" -msgstr "" +#: define-music-properties.scm:21 define-grob-properties.scm:21 +#: define-context-properties.scm:31 +#, scheme-format +msgid "symbol ~S redefined" +msgstr "simbolo ~S ridefinito" -#: parser.yy:1793 parser.yy:1843 -#, c-format -msgid "not a duration: %d" -msgstr "non è una durata: %d" +#: paper.scm:115 +msgid "set-global-staff-size: not in toplevel scope" +msgstr "set-global-staff-size: non è nell'ambito di livello più alto" + +#: paper.scm:296 +#, scheme-format +msgid "This is not a \\layout {} object, ~S" +msgstr "Questo non è un oggetto \\layout {}, ~S" + +#: paper.scm:308 +#, scheme-format +msgid "Unknown paper size: ~a" +msgstr "Dimensione del foglio sconosciuta: ~a" + +#. TODO: should raise (generic) exception with throw, and catch +#. that in parse-scm.cc +#: paper.scm:323 +msgid "Must use #(set-paper-size .. ) within \\paper { ... }" +msgstr "Si deve usare #(set-paper-size .. ) all'interno di \\paper { ... }" -#: parser.yy:1960 -#, fuzzy -msgid "have to be in Note mode for notes" -msgstr "bisogna essere in Note mode per le note" +#: lily.scm:225 +msgid "Using (ice-9 curried-definitions) module\n" +msgstr "Utilizzazione del modulo (ice-9 curried-definitions)\n" -#: parser.yy:2021 -#, fuzzy -msgid "have to be in Chord mode for chords" -msgstr "bisogna essere in Chord mode per gli accordi" +#: lily.scm:230 +msgid "Guile 1.8\n" +msgstr "Guile 1.8\n" -#: lexer.ll:179 -msgid "stray UTF-8 BOM encountered" -msgstr "" +#: lily.scm:290 +#, scheme-format +msgid "cannot find: ~A" +msgstr "impossibile trovare ~A" -#: lexer.ll:183 -msgid "Skipping UTF-8 BOM" -msgstr "" +#: lily.scm:350 +#, scheme-format +msgid "wrong type for argument ~a. Expecting ~a, found ~s" +msgstr "tipo di argomento errato per ~a. Previsto ~a, trovato ~s" -#: lexer.ll:238 -#, fuzzy, c-format -msgid "Renaming input to: `%s'" -msgstr "Genero le voci..." +#: lily.scm:716 +msgid "Compilation successfully completed" +msgstr "Compilazione completata con successo" -#: lexer.ll:255 -msgid "quoted string expected after \\version" -msgstr "" +#: lily.scm:717 +msgid "Compilation completed with warnings or errors" +msgstr "Compilazione completata con avvertimenti o errori" -#: lexer.ll:259 -msgid "quoted string expected after \\sourcefilename" -msgstr "" +#: lily.scm:779 +#, scheme-format +msgid "job ~a terminated with signal: ~a" +msgstr "il lavoro ~a è terminato col segnale ~a" -#: lexer.ll:263 -msgid "integer expected after \\sourcefileline" +#: lily.scm:782 +#, scheme-format +msgid "" +"logfile ~a (exit ~a):\n" +"~a" msgstr "" +"file di registro ~a (uscita ~a):\n" +"~a" -#: lexer.ll:276 -msgid "EOF found inside a comment" -msgstr "ho trovato un EOF in un commento" +#: lily.scm:804 lily.scm:882 +#, scheme-format +msgid "failed files: ~S" +msgstr "errore nei file: ~S" -#: lexer.ll:291 -msgid "\\maininput not allowed outside init files" -msgstr "" +#: lily.scm:873 +#, scheme-format +msgid "Redirecting output to ~a..." +msgstr "Redirezione dell'output verso ~a..." -#: lexer.ll:315 -#, fuzzy, c-format -msgid "wrong or undefined identifier: `%s'" -msgstr "indentificatore non definito: `%s'" +#: lily.scm:892 +#, scheme-format +msgid "Invoking `~a'...\n" +msgstr "Chiamata di «~a»...\n" -#. backup rule -#: lexer.ll:324 -msgid "end quote missing" -msgstr "" +#: graphviz.scm:64 +#, scheme-format +msgid "Writing graph `~a'..." +msgstr "Scrittura del grafico «~a»..." -#: lexer.ll:469 -msgid "Brace found at end of lyric. Did you forget a space?" -msgstr "" +#: framework-svg.scm:84 +#, scheme-format +msgid "Updating font into: ~a" +msgstr "Aggiornamento dei tipi di carattere in: ~a" -#: lexer.ll:582 -msgid "Brace found at end of markup. Did you forget a space?" -msgstr "" +#: layout-beam.scm:40 +#, scheme-format +msgid "Error in beam quanting. Expected (~S,~S) found ~S." +msgstr "Errore nella definizione delle travature. Previste (~S,~S), trovate ~S." -#: lexer.ll:686 -#, fuzzy, c-format -msgid "invalid character: `%c'" -msgstr "carattere illegale: `%c'" +#: layout-beam.scm:54 +#, scheme-format +msgid "Error in beam quanting. Expected ~S 0, found ~S." +msgstr "Errore nella definizione delle travature. Previste ~S 0, trovate ~S." -#: lexer.ll:801 lexer.ll:802 -#, c-format -msgid "unknown escaped string: `\\%s'" -msgstr "stringa di escape sconosciuta: `\\%s'" +#: modal-transforms.scm:38 +msgid "'from' pitch not in scale; ignoring" +msgstr "altezza di partenza (from) non presente nella scala; si ignora" -#: lexer.ll:907 lexer.ll:908 -#, c-format -msgid "file too old: %s (oldest supported: %s)" -msgstr "" +#: modal-transforms.scm:42 modal-transforms.scm:75 +msgid "'to' pitch not in scale; ignoring" +msgstr "altezza di arrivo (to) non presente nella scala; si ignora" -#: lexer.ll:908 lexer.ll:909 -msgid "consider updating the input with the convert-ly script" -msgstr "" +#: modal-transforms.scm:46 +msgid "pitch to be transposed not in scale; ignoring" +msgstr "altezza da trasporre non presente nella scala; si ignora" -#: lexer.ll:914 lexer.ll:915 -#, c-format -msgid "program too old: %s (file requires: %s)" -msgstr "" +#: modal-transforms.scm:71 +msgid "'around' pitch not in scale; ignoring" +msgstr "altezza \"around\" non presente nella scala; si ignora" + +#: modal-transforms.scm:79 +msgid "pitch to be inverted not in scale; ignoring" +msgstr "altezza da invertire non presente nella scala; si ignora" -#: backend-library.scm:19 lily.scm:767 ps-to-png.scm:58 -#, fuzzy, scheme-format +#: modal-transforms.scm:95 +msgid "negative replication count; ignoring" +msgstr "conto di riproduzione negativo; si ignora" + +#: backend-library.scm:29 ps-to-png.scm:68 +#, scheme-format msgid "Invoking `~a'..." -msgstr "Genero le voci..." +msgstr "Invocazione di «~a»..." -#: backend-library.scm:28 +#: backend-library.scm:34 #, scheme-format msgid "`~a' failed (~a)" -msgstr "" +msgstr "«~a» fallito (~a)" -#: backend-library.scm:117 framework-tex.scm:344 framework-tex.scm:369 -#, fuzzy, scheme-format +#: backend-library.scm:94 +#, scheme-format msgid "Converting to `~a'..." -msgstr "Genero le voci..." +msgstr "Conversione a «~a»..." -#: backend-library.scm:130 -#, fuzzy, scheme-format +#. Do not try to guess the name of the png file, +#. GS produces PNG files like BASE-page%d.png. +#: backend-library.scm:104 +#, scheme-format msgid "Converting to ~a..." -msgstr "Genero le voci..." +msgstr "Conversione a ~a..." -#: backend-library.scm:168 -#, fuzzy, scheme-format +#: backend-library.scm:142 +#, scheme-format msgid "Writing header field `~a' to `~a'..." -msgstr "scrivo il file delle dipendenze: `%s'..." +msgstr "Scrittura del campo di intestazione «~a» in «~a»..." -#: define-context-properties.scm:20 define-grob-properties.scm:10 -#: define-music-properties.scm:10 +#: backend-library.scm:192 #, scheme-format -msgid "symbol ~S redefined" -msgstr "" +msgid "missing stencil expression `~S'" +msgstr "manca l'espressione di stencil «~S»" -#: define-event-classes.scm:119 +#: to-xml.scm:191 #, scheme-format -msgid "event class ~A seems to be unused" -msgstr "" +msgid "assertion failed: ~S" +msgstr "errore di asserzione: ~S" -#. should be programming-error -#: define-event-classes.scm:125 +#: chord-entry.scm:49 #, scheme-format -msgid "translator listens to nonexisting event class ~A" -msgstr "" +msgid "Spurious garbage following chord: ~A" +msgstr "Informazione incomprensibile dopo l'accordo: ~A" -#: define-markup-commands.scm:296 -msgid "no systems found in \\score markup, does it have a \\layout block?" +#: lily-library.scm:758 +msgid "" +"Find the index between @var{start} and @var{end} (an integer)\n" +"which produces the closest match to @var{target-val} if\n" +"applied to function @var{getter}." msgstr "" +"Cerca l'indice compreso tra @var{start} e @var{end} (un intero)\n" +"che produca l'abbinamento più vicino al @var{target-val} quando\n" +"applicato alla funzione @var{getter}." -#: define-markup-commands.scm:1310 -#, fuzzy, scheme-format -msgid "not a valid duration string: ~a" -msgstr "non è una durata: %d" +#: lily-library.scm:832 +#, scheme-format +msgid "unknown unit: ~S" +msgstr "unità sconosciuta: ~S" + +#: lily-library.scm:858 lily-library.scm:867 +msgid "warning:" +msgstr "attenzione:" + +#: lily-library.scm:860 +#, scheme-format +msgid "no \\version statement found, please add~afor future compatibility" +msgstr "dichiarazione di \\version assente; si aggiunga ~a per compatibilità futura" + +#: lily-library.scm:868 +msgid "old relative compatibility not used" +msgstr "compatibilità col vecchio modo relativo non utilizzata" + +#: output-ps.scm:48 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Trovato infinito o un valore non numerico nell'output. Sostituito con 0.0" + +#: output-ps.scm:289 output-svg.scm:550 +#, scheme-format +msgid "unknown line-cap-style: ~S" +msgstr "line-cap-style sconosciuto: ~S" + +#: output-ps.scm:294 output-svg.scm:556 +#, scheme-format +msgid "unknown line-join-style: ~S" +msgstr "line-join-style sconosciuto: ~S" + +#: output-svg.scm:47 +#, scheme-format +msgid "undefined: ~S" +msgstr "~S indefinito" + +#: output-svg.scm:151 +#, scheme-format +msgid "cannot decypher Pango description: ~a" +msgstr "impossibile decifrare la descrizione di Pango: ~a" + +#: output-svg.scm:231 +msgid "Glyph must have a unicode value" +msgstr "Un glifo deve avere un valore unicode" + +#: output-svg.scm:283 output-svg.scm:293 +#, scheme-format +msgid "cannot find SVG font ~S" +msgstr "impossibile trovare il tipo di carattere SVG ~S" + +#: flag-styles.scm:148 +#, scheme-format +msgid "flag stroke `~a' or `~a' not found" +msgstr "tipo di coda uncinata sconosciuto: «~a» o «~a»" + +#: define-note-names.scm:962 +msgid "Select note names language." +msgstr "Selezione della lingua dei nomi delle note." + +#: define-note-names.scm:969 +#, scheme-format +msgid "Using `~a' note names..." +msgstr "Utilizzo di \"~a\" per i nomi delle note..." + +#: define-note-names.scm:972 +#, scheme-format +msgid "Could not find language `~a'. Ignoring." +msgstr "Impossibile trovare il linguaggio \"~a\". Si ignora." -#: define-music-types.scm:670 -#, fuzzy, scheme-format +#: define-music-types.scm:740 +#, scheme-format msgid "symbol expected: ~S" -msgstr "aspettavo %s" +msgstr "simbolo atteso: ~S" -#: define-music-types.scm:673 -#, fuzzy, scheme-format +#: define-music-types.scm:743 +#, scheme-format msgid "cannot find music object: ~S" -msgstr "non trovo `%s'" +msgstr "impossibile trovare l'oggetto musicale: ~S" -#: define-music-types.scm:692 -#, fuzzy, scheme-format +#: define-music-types.scm:762 +#, scheme-format msgid "unknown repeat type `~S'" -msgstr "tipo di chiave sconosciuto" +msgstr "tipo di ripetizione sconosciuto «~S»" -#: define-music-types.scm:693 -msgid "See music-types.scm for supported repeats" -msgstr "" +#: define-music-types.scm:763 +msgid "See define-music-types.scm for supported repeats" +msgstr "Si veda define-music-types.scm per le ripetizioni supportate" -#: document-backend.scm:91 +#: translation-functions.scm:341 #, scheme-format -msgid "pair expected in doc ~s" -msgstr "" - -#: document-backend.scm:135 -#, fuzzy, scheme-format -msgid "cannot find interface for property: ~S" -msgstr "non riesco a trovare il carattere `%s'" +msgid "Negative fret for pitch ~a on string ~a" +msgstr "Tasto negativo per l'altezza ~a sulla corda ~a" -#: document-backend.scm:145 -#, fuzzy, scheme-format -msgid "unknown Grob interface: ~S" -msgstr "tipo di chiave sconosciuto" +#: translation-functions.scm:385 +#, scheme-format +msgid "No open string for pitch ~a" +msgstr "Nessuna corda a vuoto per l'altezza ~a" -#: documentation-lib.scm:45 -#, fuzzy, scheme-format -msgid "Processing ~S..." -msgstr "Elaboro..." +#: translation-functions.scm:400 +#, scheme-format +msgid "Requested string for pitch requires negative fret: string ~a pitch ~a" +msgstr "La corda richiesta per questa altezza necessita un tasto negativo: corda ~a altezza ~a" -#: documentation-lib.scm:154 -#, fuzzy, scheme-format -msgid "Writing ~S..." -msgstr "Genero le voci..." +#: translation-functions.scm:401 +msgid "Ignoring string request." +msgstr "Ignorata la richiesta di questa corda." -#: documentation-lib.scm:176 -#, fuzzy, scheme-format -msgid "cannot find description for property ~S (~S)" -msgstr "non riesco a trovare il carattere `%s'" +#: translation-functions.scm:414 +#, scheme-format +msgid "No string for pitch ~a (given frets ~a)" +msgstr "Nessuna corda per l'altezza ~a (se i tasti sono ~a)" -#: framework-eps.scm:90 -#, fuzzy, scheme-format -msgid "Writing ~a..." -msgstr "Genero le voci..." +#: translation-functions.scm:515 +#, scheme-format +msgid "" +"No label for fret ~a (on string ~a);\n" +"only ~a fret labels provided" +msgstr "" +"Nessuna etichetta per il tasto ~a (sulla corda ~a);\n" +"disponibili solo le etichette del tasto ~a" -#: framework-ps.scm:282 +#: framework-ps.scm:250 #, scheme-format msgid "cannot embed ~S=~S" -msgstr "" +msgstr "impossibile inserire ~S=~S" -#: framework-ps.scm:335 +#: framework-ps.scm:293 #, scheme-format msgid "cannot extract file matching ~a from ~a" -msgstr "" +msgstr "impossibile estrarre il file corrispondente a ~a a partire da ~a" -#: framework-ps.scm:352 +#: framework-ps.scm:311 #, scheme-format msgid "do not know how to embed ~S=~S" -msgstr "" +msgstr "impossibile realizzare l'integrazione ~S=~S" -#: framework-ps.scm:383 +#: framework-ps.scm:336 #, scheme-format msgid "do not know how to embed font ~s ~s ~s" -msgstr "" - -#: framework-ps.scm:750 -#, scheme-format -msgid "cannot convert to ~S" -msgstr "" - -#: framework-ps.scm:769 framework-ps.scm:772 -#, scheme-format -msgid "cannot generate ~S using the postscript back-end" -msgstr "" +msgstr "non so come inserire il tipo di carattere ~s ~s ~s" -#: framework-ps.scm:779 +#: framework-ps.scm:669 msgid "" "\n" -"The PostScript backend does not support the system-by-system \n" -"output. For that, use the EPS backend instead,\n" +"The PostScript backend does not support the\n" +"system-by-system output. For that, use the EPS backend instead,\n" "\n" " lilypond -dbackend=eps FILE\n" "\n" @@ -2595,200 +3375,163 @@ msgid "" " %% Start cut-&-pastable-section\n" " %% ****************************************************************\n" msgstr "" +"\n" +"Il backend PostScript non supporta l'output\n" +"di sistemi individuali. Si usi il backend EPS al suo posto.\n" +"\n" +" lilypond -dbackend=eps FILE\n" +"\n" +"Se avete tagliato e incollato un frammento di codice lilypond da una pagina web,\n" +"assicuratevi di togliere soltanto ciò che precede\n" +"\n" +" %% ****************************************************************\n" +" %% Start cut-&-pastable-section\n" +" %% ****************************************************************\n" -#: framework-tex.scm:361 -#, scheme-format -msgid "TeX file name must not contain whitespace: `~a'" -msgstr "" - -#: graphviz.scm:53 -#, fuzzy, scheme-format -msgid "Writing graph `~a'..." -msgstr "Genero le voci..." +#: music-functions.scm:268 +msgid "More alternatives than repeats. Junking excess alternatives" +msgstr "Più alternative che ripetizioni. Vengono tralasciate le alternative in eccesso" -#: layout-beam.scm:29 +#: music-functions.scm:297 #, scheme-format -msgid "Error in beam quanting. Expected (~S,~S) found ~S." -msgstr "" +msgid "invalid tremolo repeat count: ~a" +msgstr "numero di ripetizioni di tremolo non valido: ~a" -#: layout-beam.scm:46 +#: music-functions.scm:618 #, scheme-format -msgid "Error in beam quanting. Expected ~S 0, found ~S." -msgstr "" - -#: layout-page-layout.scm:124 -msgid "Can't fit systems on page -- ignoring between-system-padding" -msgstr "" - -#: layout-page-layout.scm:458 -#, fuzzy -msgid "Calculating page breaks..." -msgstr "Calcolo delle posizioni della colonne..." - -#: lily-library.scm:583 -#, fuzzy, scheme-format -msgid "unknown unit: ~S" -msgstr "traduttore sconosciuto `%s'" +msgid "music expected: ~S" +msgstr "musica attesa: ~S" -#: lily-library.scm:617 +#. FIXME: uncomprehensable message +#: music-functions.scm:662 #, scheme-format -msgid "no \\version statement found, please add~afor future compatibility" -msgstr "" +msgid "Bar check failed. Expect to be at ~a, instead at ~a" +msgstr "Controllo di battuta fallito. Avrebbe dovuto trovarsi a ~a invece che a ~a" -#: lily-library.scm:625 -msgid "old relative compatibility not used" -msgstr "" +#: music-functions.scm:846 +#, scheme-format +msgid "cannot find quoted music: `~S'" +msgstr "impossibile trovare la musica citata: «~S»" -#: lily.scm:177 -#, fuzzy, scheme-format -msgid "cannot find: ~A" -msgstr "non trovo" +#: music-functions.scm:982 +msgid "Add @var{octave-shift} to the octave of @var{pitch}." +msgstr "Aggiungere @var{octave-shift} all'ottava di @var{altezza}." -#: lily.scm:242 +#: music-functions.scm:1037 #, scheme-format -msgid "wrong type for argument ~a. Expecting ~a, found ~s" -msgstr "" +msgid "Unknown octaveness type: ~S " +msgstr "Tipo di ottava sconosciuto: ~S " -#: lily.scm:634 -#, scheme-format -msgid "job ~a terminated with signal: ~a" -msgstr "" +#: music-functions.scm:1038 +msgid "Defaulting to 'any-octave." +msgstr "Applicazione del valore predefinito 'any-octave." -#: lily.scm:637 +#: music-functions.scm:1378 #, scheme-format -msgid "" -"logfile ~a (exit ~a):\n" -"~a" -msgstr "" +msgid "unknown accidental style: ~S" +msgstr "stile di alterazione sconosciuto: ~S" -#: lily.scm:664 lily.scm:757 -#, scheme-format -msgid "failed files: ~S" -msgstr "" +#: define-event-classes.scm:79 +msgid "All classes must be the last in their matrilineal line." +msgstr "Tutte le classi devono essere le ultime della propria linea di discendenza." -#: lily.scm:747 -#, fuzzy, scheme-format -msgid "Redirecting output to ~a..." -msgstr "L'output stampato è inviato a %s..." +#: define-event-classes.scm:83 +msgid "All classes must have a well-defined pedigree in the existing class hierarchy." +msgstr "Tutte le classi devono avere un'ascendenza ben definita nella gerarchia di classe esistente." -#: ly-syntax-constructors.scm:40 -msgid "Music head function must return Music object" -msgstr "" +#: define-event-classes.scm:149 +#, scheme-format +msgid "event class ~A seems to be unused" +msgstr "la classe di evento ~A sembra essere non utilizzata" -#: ly-syntax-constructors.scm:139 +#. should be programming-error +#: define-event-classes.scm:155 #, scheme-format -msgid "Invalid property operation ~a" -msgstr "" +msgid "translator listens to nonexisting event class ~A" +msgstr "il traduttore è in ascolto della classe di evento ~A inesistente" -#: markup.scm:124 +#: markup.scm:223 #, scheme-format msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" -msgstr "" +msgstr "Numero errato di argomenti. Attesi: ~A, trovati ~A: ~S" -#: markup.scm:130 +#: markup.scm:229 #, scheme-format msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." -msgstr "" +msgstr "Argomento non valido in posizione ~A. Atteso ~A, trovato ~S." -#: music-functions.scm:228 -msgid "More alternatives than repeats. Junking excess alternatives" -msgstr "" - -#: music-functions.scm:240 +#: markup.scm:292 #, scheme-format -msgid "invalid tremolo repeat count: ~a" -msgstr "" +msgid "Not a markup command: ~A" +msgstr "Non è un comando di tipo \"markup\": ~A" -#: music-functions.scm:248 +#: ps-to-png.scm:74 #, scheme-format -msgid "expecting 2 elements for chord tremolo, found ~a" -msgstr "" +msgid "~a exited with status: ~S" +msgstr "~a è terminato con stato ~S" -#: music-functions.scm:564 -#, fuzzy, scheme-format -msgid "music expected: ~S" -msgstr "aspettavo %s" +#: define-markup-commands.scm:803 +msgid "no systems found in \\score markup, does it have a \\layout block?" +msgstr "non si è trovato alcun sistema nella marcatura \\score, contiene un blocco \\layout?" -#. FIXME: uncomprehensable message -#: music-functions.scm:614 +#: define-markup-commands.scm:2404 #, scheme-format -msgid "Bar check failed. Expect to be at ~a, instead at ~a" -msgstr "" +msgid "Cannot find glyph ~a" +msgstr "Impossibile trovare il glifo ~a" -#: music-functions.scm:764 -#, fuzzy, scheme-format -msgid "cannot find quoted music: `~S'" -msgstr "non trovo il file: `%s'" - -#: music-functions.scm:961 -#, fuzzy, scheme-format -msgid "unknown accidental style: ~S" -msgstr "stringa di escape sconosciuta: `\\%s'" - -#: output-ps.scm:276 -msgid "utf-8-string encountered in PS backend" -msgstr "" - -#: output-svg.scm:45 +#: define-markup-commands.scm:2830 #, scheme-format -msgid "undefined: ~S" -msgstr "" +msgid "no brace found for point size ~S " +msgstr "non c'è una graffa che abbia una dimensione di ~S punti" -#: output-svg.scm:135 +#: define-markup-commands.scm:2831 #, scheme-format -msgid "cannot decypher Pango description: ~a" -msgstr "" +msgid "defaulting to ~S pt" +msgstr "si applica la dimensione predefinita ~S pt" -#: output-tex.scm:96 -#, fuzzy, scheme-format -msgid "cannot find ~a in ~a" -msgstr "non trovo le estremità di %s" +#: define-markup-commands.scm:2984 +#, scheme-format +msgid "not a valid duration string: ~a" +msgstr "non è una durata valida per la stringa: ~a" -#: paper.scm:85 -#, fuzzy -msgid "set-global-staff-size: not in toplevel scope" -msgstr "non c'è un traduttore di livello massimo" +#: ly-syntax-constructors.scm:51 +msgid "Music head function must return Music object" +msgstr "Una funzione musicale principale deve restituire un Oggetto musicale" -#: paper.scm:133 +#: ly-syntax-constructors.scm:177 #, scheme-format -msgid "This is not a \\layout {} object, ~S" -msgstr "" - -#: paper.scm:145 -#, fuzzy, scheme-format -msgid "Unknown papersize: ~a" -msgstr "variabile paper sconosciuta: `%s'" +msgid "Invalid property operation ~a" +msgstr "Operazione di proprietà non valida: ~a" -#. TODO: should raise (generic) exception with throw, and catch -#. that in parse-scm.cc -#: paper.scm:160 -msgid "Must use #(set-paper-size .. ) within \\paper { ... }" -msgstr "" +#~ msgid "vertical spacing has been changed; minimum-Y-extent is obsolete.\n" +#~ msgstr "la spaziatura verticale è cambiata; minimum-Y-extent è obsoleto.\n" -#: parser-clef.scm:129 -#, fuzzy, scheme-format -msgid "unknown clef type `~a'" -msgstr "tipo di chiave sconosciuto" +#~ msgid "no feasible beam position" +#~ msgstr "nessuna posizione fattibile per la travatura" -#: parser-clef.scm:130 -#, scheme-format -msgid "supported clefs: ~a" -msgstr "" +#~ msgid "Invalid index for character" +#~ msgstr "Indice non valido per il carattere" -#: ps-to-png.scm:64 -#, scheme-format -msgid "~a exited with status: ~S" -msgstr "" +#, fuzzy +#~ msgid "deprecated function called: %s" +#~ msgstr "non riesco a trovare il carattere `%s'" -#: to-xml.scm:180 -#, scheme-format -msgid "assertion failed: ~S" -msgstr "" +#, fuzzy +#~ msgid "generate DVI (tex backend only)" +#~ msgstr "vincoli degenerati" #, fuzzy #~ msgid "do not generate printed output" #~ msgstr "vincoli degenerati" +#, fuzzy +#~ msgid "cannot find start of trill spanner" +#~ msgstr "non trovo le estremità di %s" + +#, fuzzy +#~ msgid "already have a trill spanner" +#~ msgstr "crescendo non terminato" + #~ msgid "silly pitch" #~ msgstr "indicazione altezza priva di senso" @@ -3109,10 +3852,6 @@ msgstr "" #~ msgid "unbound spanner `%s'" #~ msgstr "Spanner non legato `%s'" -#, fuzzy -#~ msgid "cannot find start of slur" -#~ msgstr "non trovo le estremità di %s" - #, fuzzy #~ msgid "Error syncing file (disk full?)" #~ msgstr "errore nel sincronizzare il file (disco pieno?)" @@ -3208,10 +3947,6 @@ msgstr "" #~ msgid "do not output tuplets, double dots or rests, smallest is 32" #~ msgstr " -n, --no-silly assume che non ci siano gruppetti o doppi punti, la figura più piccola è 32\n" -#, fuzzy -#~ msgid "set FILE as default output" -#~ msgstr " -o, --output=FILE set FILE come output di default\n" - #, fuzzy #~ msgid "set smallest duration" #~ msgstr "indicazione durata priva di senso" @@ -3419,9 +4154,6 @@ msgstr "" #~ msgid "cannot abbreviate tuplet" #~ msgstr "non posso abbreviare" -#~ msgid "Invalid midi format" -#~ msgstr "Formato midi non valido" - #~ msgid "Parsing...\n" #~ msgstr "Interpreto...\n" diff --git a/po/lilypond.pot b/po/lilypond.pot index 3ab8e15a72..0ff656e5b5 100644 --- a/po/lilypond.pot +++ b/po/lilypond.pot @@ -1,19 +1,74 @@ # Translation of LilyPond. -# Copyright (C) 2008--2009 Han-Wen Nienhuys, Jan Nieuwenhuizen -# This file is distributed under the same license as lilypond package. +# Copyright (C) 1998--2011 Han-Wen Nienhuys, Jan Nieuwenhuizen +# This file is distributed under the same license as the lilypond package. # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.12.0\n" +"Project-Id-Version: lilypond 2.13.53\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2008-12-20 11:58+0100\n" +"POT-Creation-Date: 2011-03-02 10:34+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: fontextract.py:25 +#, python-format +msgid "Scanning %s" +msgstr "" + +#: fontextract.py:70 +#, python-format +msgid "Extracted %s" +msgstr "" + +#: fontextract.py:85 +#, python-format +msgid "Writing fonts to %s" +msgstr "" + +#: book_snippets.py:519 +#, python-format +msgid "deprecated ly-option used: %s=%s" +msgstr "" + +#: book_snippets.py:521 +#, python-format +msgid "compatibility mode translation: %s=%s" +msgstr "" + +#: book_snippets.py:524 +#, python-format +msgid "deprecated ly-option used: %s" +msgstr "" + +#: book_snippets.py:526 +#, python-format +msgid "compatibility mode translation: %s" +msgstr "" + +#: book_snippets.py:544 +#, python-format +msgid "ignoring unknown ly option: %s" +msgstr "" + +#: book_snippets.py:736 +#, python-format +msgid "Opening filter `%s'\n" +msgstr "" + +#: book_snippets.py:756 +#, python-format +msgid "`%s' failed (%d)" +msgstr "" + +#: book_snippets.py:757 +msgid "The error log is as follows:" +msgstr "" + #: convertrules.py:12 #, python-format msgid "Not smart enough to convert %s" @@ -28,8 +83,8 @@ msgstr "" msgid "%s has been replaced by %s" msgstr "" -#: convertrules.py:24 musicexp.py:16 convert-ly.py:50 lilypond-book.py:94 -#: warn.cc:48 input.cc:90 +#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66 +#: input.cc:109 #, c-format, python-format msgid "warning: %s" msgstr "" @@ -47,8 +102,8 @@ msgstr "" msgid "deprecated \\textstyle, new \\key syntax" msgstr "" -#: convertrules.py:86 convertrules.py:1906 convertrules.py:2085 -#: convertrules.py:2237 convertrules.py:2567 +#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084 +#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862 msgid "bump version for release" msgstr "" @@ -65,7 +120,7 @@ msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" msgstr "" #: convertrules.py:216 convertrules.py:699 convertrules.py:1383 -#: convertrules.py:2379 +#: convertrules.py:2378 #, python-format msgid "deprecate %s" msgstr "" @@ -118,8 +173,8 @@ msgstr "" msgid "automaticMelismata turned on by default" msgstr "" -#: convertrules.py:963 convertrules.py:1682 convertrules.py:1943 -#: convertrules.py:2190 +#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942 +#: convertrules.py:2189 #, python-format msgid "remove %s" msgstr "" @@ -237,19 +292,19 @@ msgstr "" msgid "More Scheme function renaming" msgstr "" -#: convertrules.py:1925 +#: convertrules.py:1924 msgid "" "Page layout has been changed, using paper size and margins.\n" "textheight is no longer used.\n" msgstr "" -#: convertrules.py:2011 +#: convertrules.py:2010 msgid "" "\\foo -> \\foomode (for chords, notes, etc.)\n" "fold \\new FooContext \\foomode into \\foo." msgstr "" -#: convertrules.py:2049 +#: convertrules.py:2048 msgid "" "staff size should be changed at top-level\n" "with\n" @@ -258,79 +313,79 @@ msgid "" "\n" msgstr "" -#: convertrules.py:2069 +#: convertrules.py:2068 msgid "regularize other identifiers" msgstr "" -#: convertrules.py:2137 +#: convertrules.py:2136 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" msgstr "" -#: convertrules.py:2150 +#: convertrules.py:2149 msgid "LilyPond source must be UTF-8" msgstr "" -#: convertrules.py:2153 +#: convertrules.py:2152 msgid "Try the texstrings backend" msgstr "" -#: convertrules.py:2156 +#: convertrules.py:2155 #, python-format msgid "Do something like: %s" msgstr "" -#: convertrules.py:2159 +#: convertrules.py:2158 msgid "Or save as UTF-8 in your editor" msgstr "" -#: convertrules.py:2213 +#: convertrules.py:2212 msgid "warn about auto beam settings" msgstr "" -#: convertrules.py:2218 +#: convertrules.py:2217 msgid "auto beam settings" msgstr "" -#: convertrules.py:2220 +#: convertrules.py:2219 msgid "" "\n" "Auto beam settings must now specify each interesting moment in a measure\n" -"explicitely; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" +"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" msgstr "" -#: convertrules.py:2334 +#: convertrules.py:2333 msgid "verticalAlignmentChildCallback has been deprecated" msgstr "" -#: convertrules.py:2338 +#: convertrules.py:2337 msgid "Remove callbacks property, deprecate XY-extent-callback." msgstr "" -#: convertrules.py:2359 +#: convertrules.py:2358 msgid "Use grob closures iso. XY-offset-callbacks." msgstr "" -#: convertrules.py:2421 +#: convertrules.py:2420 msgid "foobar -> foo-bar for \\paper, \\layout" msgstr "" -#: convertrules.py:2531 +#: convertrules.py:2530 msgid "deprecate \\tempo in \\midi" msgstr "" -#: convertrules.py:2578 +#: convertrules.py:2583 msgid "deprecate cautionary-style. Use AccidentalCautionary properties" msgstr "" -#: convertrules.py:2591 +#: convertrules.py:2596 msgid "Rename accidental glyphs, use glyph-name-alist." msgstr "" -#: convertrules.py:2646 +#: convertrules.py:2651 msgid "edge-text settings for TextSpanner." msgstr "" -#: convertrules.py:2647 +#: convertrules.py:2652 #, python-format msgid "" "Use\n" @@ -338,2548 +393,3011 @@ msgid "" "%s" msgstr "" +#: convertrules.py:2685 +msgid "Use the `alignment-offsets' sub-property of\n" +msgstr "" + #: convertrules.py:2686 +msgid "NonMusicalPaperColumn #'line-break-system-details\n" +msgstr "" + +#: convertrules.py:2687 +msgid "to set fixed distances between staves.\n" +msgstr "" + +#: convertrules.py:2699 msgid "Use #'style not #'dash-fraction to select solid/dashed lines." msgstr "" -#: convertrules.py:2692 +#: convertrules.py:2705 msgid "all settings related to dashed lines.\n" msgstr "" -#: convertrules.py:2693 +#: convertrules.py:2706 msgid "Use \\override ... #'style = #'line for solid lines and\n" msgstr "" -#: convertrules.py:2694 +#: convertrules.py:2707 msgid "\t\\override ... #'style = #'dashed-line for dashed lines." msgstr "" -#: convertrules.py:2730 +#: convertrules.py:2743 msgid "" "metronomeMarkFormatter uses text markup as second argument,\n" "fret diagram properties moved to fret-diagram-details." msgstr "" -#: convertrules.py:2735 +#: convertrules.py:2748 msgid "metronomeMarkFormatter got an additional text argument.\n" msgstr "" -#: convertrules.py:2736 +#: convertrules.py:2749 #, python-format msgid "" "The function assigned to Score.metronomeMarkFunction now uses the signature\n" "%s" msgstr "" -#: convertrules.py:2799 +#: convertrules.py:2812 msgid "\\put-adjacent argument order.\n" msgstr "" -#: convertrules.py:2800 +#: convertrules.py:2813 msgid "Axis and direction now come before markups:\n" msgstr "" -#: convertrules.py:2801 +#: convertrules.py:2814 msgid "\\put-adjacent axis dir markup markup." msgstr "" -#: convertrules.py:2832 +#: convertrules.py:2845 msgid "re-definition of InnerStaffGroup.\n" msgstr "" -#: convertrules.py:2838 +#: convertrules.py:2851 msgid "re-definition of InnerChoirStaff.\n" msgstr "" -#: convertrules.py:2851 -msgid "stringTuning must be added to addChordShape call.\n" +#: convertrules.py:2861 +msgid "Syntax changes for \\addChordShape and \\chord-shape" msgstr "" -#: convertrules.py:2857 -msgid "stringTuning must be added to chord-shape call.\n" +#: convertrules.py:2866 +msgid "stringTuning must be added to addChordShape call.\n" msgstr "" -#: fontextract.py:25 -#, python-format -msgid "Scanning %s" +#: convertrules.py:2872 +msgid "stringTuning must be added to chord-shape call.\n" msgstr "" -#: fontextract.py:70 -#, python-format -msgid "Extracted %s" +#: convertrules.py:2879 +msgid "Remove oldaddlyrics" msgstr "" -#: fontextract.py:85 -#, python-format -msgid "Writing fonts to %s" +#: convertrules.py:2883 +msgid "" +"oldaddlyrics is no longer supported. \n" +" Use addlyrics or lyrsicsto instead.\n" msgstr "" -#: lilylib.py:91 lilylib.py:142 -#, python-format -msgid "Invoking `%s'" +#: convertrules.py:2889 +msgid "" +"keySignature property not reversed any more\n" +"MIDI 47: orchestral strings -> orchestral harp" msgstr "" -#: lilylib.py:93 lilylib.py:144 -#, python-format -msgid "Running %s..." +#: convertrules.py:2894 +msgid "The alist for Staff.keySignature is no longer in reversed order.\n" msgstr "" -#: lilylib.py:209 -#, python-format -msgid "Usage: %s" +#: convertrules.py:2900 +msgid "" +"\\bar \".\" now produces a thick barline\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Dash parameters for slurs and ties are now in dash-definition" msgstr "" -#: musicexp.py:215 musicexp.py:220 -msgid "Language does not support microtones contained in the piece" +#: convertrules.py:2906 +msgid "\\bar \".\" now produces a thick barline.\n" msgstr "" -#: musicexp.py:482 -msgid "Tuplet brackets of curved shape are not correctly implemented" +#: convertrules.py:2912 +msgid "Dash parameters for slurs and ties are now in 'dash-details.\n" msgstr "" -#. TODO: Implement this using actual_type and normal_type! -#: musicexp.py:511 +#: convertrules.py:2917 +msgid "" +"Autobeaming rules have changed. override-auto-beam-setting and\n" +"revert-auto-beam-setting have been eliminated.\n" +"\\overrideBeamSettings has been added.\n" +"beatGrouping has been eliminated.\n" +"Different settings for vertical layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explicit dynamics context definition from `Piano centered dynamics'\n" +"template replaced by new `Dynamics' context." +msgstr "" + +#: convertrules.py:2931 msgid "" -"Tuplet brackets displaying both note durations are not implemented, using " -"default" +"override-auto-beam-setting.\n" +" Autobeam settings are now overriden with \\overrideBeamSettings.\n" msgstr "" -#: musicexp.py:656 -#, python-format -msgid "unable to set the music %(music)s for the repeat %(repeat)s" +#: convertrules.py:2936 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now reverted with \\revertBeamSettings.\n" msgstr "" -#: musicexp.py:665 -msgid "encountered repeat without body" +#: convertrules.py:2941 +msgid "" +"beatGrouping. \n" +" beatGrouping with a specified context must now be accomplished with\n" +" \\overrideBeamSettings.\n" msgstr "" -#. no self.elements! -#: musicexp.py:835 -#, python-format -msgid "Grace note with no following music: %s" +#: convertrules.py:2947 +msgid "" +"alignment-offsets has been changed to alignment-distances: you must now " +"specify the distances between staves rather than the offset of staves.\n" msgstr "" -#: musicexp.py:997 -#, python-format -msgid "Invalid octave shift size found: %s. Using no shift." +#: convertrules.py:2958 +msgid "" +"Remove obsolete engravers/translators: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"New vertical spacing variables." msgstr "" -#: musicexp.py:1455 -#, python-format -msgid "Unable to convert alteration %s to a lilypond expression" +#: convertrules.py:2989 +msgid "" +"minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a " +"VerticalAxisGroup.\n" msgstr "" -#: musicxml.py:13 convert-ly.py:53 lilypond-book.py:97 warn.cc:54 input.cc:96 -#: input.cc:104 -#, c-format, python-format -msgid "error: %s" +#: convertrules.py:2995 +msgid "Unify fetaNumber and fetaDynamic encodings" msgstr "" -#. TODO: Handle pieces without a time signature! -#: musicxml.py:357 -msgid "Senza-misura time signatures are not yet supported!" +#: convertrules.py:3000 +msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" msgstr "" -#: musicxml.py:375 -msgid "Unable to interpret time signature! Falling back to 4/4." +#: convertrules.py:3011 +msgid "\\cresc etc. are now postfix operators" msgstr "" -#: musicxml.py:431 -#, python-format +#: convertrules.py:3017 msgid "" -"Key alteration octave given for a non-existing alteration nr. %s, available " -"numbers: %s!" -msgstr "" - -#: musicxml.py:519 -#, python-format -msgid "Unable to find instrument for ID=%s\n" -msgstr "" - -#: abc2ly.py:1341 convert-ly.py:74 lilypond-book.py:121 midi2ly.py:845 -#, python-format -msgid "%s [OPTION]... FILE" +"Eliminate beamSettings, beatLength, \\setBeatGrouping, " +"\\overrideBeamSettings and \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" msgstr "" -#: abc2ly.py:1342 -#, python-format +#: convertrules.py:3035 msgid "" -"abc2ly converts ABC music files (see\n" -"%s) to LilyPond input.\n" +"\\overrideBeamSettings. Use \\set beamExceptions or " +"\\overrideTimeSignatureSettings.\n" msgstr "" -#: abc2ly.py:1350 convert-ly.py:81 etf2ly.py:1190 lilypond-book.py:207 -#: midi2ly.py:881 musicxml2ly.py:2590 main.cc:156 -msgid "show version number and exit" +#: convertrules.py:3039 +msgid "" +"\\revertBeamSettings. Use \\set beamExceptions or " +"\\revertTimeSignatureSettings.\n" msgstr "" -#: abc2ly.py:1354 convert-ly.py:85 etf2ly.py:1186 lilypond-book.py:138 -#: midi2ly.py:860 musicxml2ly.py:2572 main.cc:145 -msgid "show this help and exit" +#: convertrules.py:3043 +msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n" msgstr "" -#: abc2ly.py:1356 etf2ly.py:1191 midi2ly.py:864 -msgid "write output to FILE" +#: convertrules.py:3047 +msgid "beatLength. Use baseMoment and beatStructure.\n" msgstr "" -#: abc2ly.py:1358 -msgid "be strict about success" +#: convertrules.py:3051 +msgid "setbeatGrouping. Use baseMoment and beatStructure.\n" msgstr "" -#: abc2ly.py:1360 -msgid "preserve ABC's notion of beams" +#: convertrules.py:3056 +msgid "" +"Woodwind diagrams: Move size, thickness, and graphic from argument list to " +"properties.\n" +"Deprecate negative dash-period for hidden lines: use #'style = #'none " +"instead." msgstr "" -#. Translators, please translate this string as -#. "Report bugs in English via %s", -#. or if there is a LilyPond users list or forum in your language -#. "Report bugs in English via %s or in YOUR_LANG via URI" -#: abc2ly.py:1363 convert-ly.py:123 etf2ly.py:1200 lilypond-book.py:214 -#: midi2ly.py:894 musicxml2ly.py:2646 main.cc:265 -#, c-format, python-format -msgid "Report bugs via %s" +#: convertrules.py:3061 +msgid "" +"woodwind-diagrams. Move size, thickness, and graphic to properties. " +"Argument should be just the key list.\n" msgstr "" -#: convert-ly.py:33 +#: convertrules.py:3069 msgid "" -"Update LilyPond input to newer version. By default, update from the\n" -"version taken from the \\version command, to the current LilyPond version." +"Rename vertical spacing variables.\n" +"Add fretboard-table argument to savePredefinedFretboard." msgstr "" -#: convert-ly.py:35 lilypond-book.py:71 -msgid "Examples:" +#: convertrules.py:3087 +msgid "Rename vertical spacing grob properties." msgstr "" -#: convert-ly.py:69 etf2ly.py:1173 lilypond-book.py:117 midi2ly.py:76 -msgid "Distributed under terms of the GNU General Public License." +#: convertrules.py:3103 +msgid "Remove \\paper variables head-separation and foot-separation." msgstr "" -#: convert-ly.py:70 etf2ly.py:1174 lilypond-book.py:118 midi2ly.py:77 -msgid "It comes with NO WARRANTY." +#: convertrules.py:3108 +msgid "Adjust settings for top-system-spacing instead.\n" msgstr "" -#: convert-ly.py:89 convert-ly.py:116 -msgid "VERSION" +#: convertrules.py:3113 +msgid "Adjust settings for last-bottom-spacing instead.\n" msgstr "" -#: convert-ly.py:91 -msgid "start from VERSION [default: \\version found in file]" +#: convertrules.py:3119 +msgid "" +"Rename space to basic-distance in various spacing alists.\n" +"Remove HarmonicParenthesesItem grob." msgstr "" -#: convert-ly.py:94 -msgid "edit in place" +#: convertrules.py:3127 +msgid "HarmonicParenthesesItem has been eliminated.\n" msgstr "" -#: convert-ly.py:98 -msgid "do not add \\version command if missing" +#: convertrules.py:3128 +msgid "Harmonic parentheses are part of the TabNoteHead grob.\n" msgstr "" -#: convert-ly.py:104 -#, python-format -msgid "force updating \\version number to %s" +#: convertrules.py:3133 +msgid "" +"Remove context from overrideTimeSignatureSettings and " +"revertTimeSignatureSettings.\n" msgstr "" -#: convert-ly.py:110 -#, python-format -msgid "show rules [default: -f 0, -t %s]" +#: convertrules.py:3140 +msgid "" +"Change stringTunings from a list of semitones to a list of pitches.\n" +"Change tenor and baritone ukulele names in string tunings.\n" +"Generate messages for manual conversion of vertical spacing if required." msgstr "" -#: convert-ly.py:115 -#, python-format -msgid "convert to VERSION [default: %s]" +#: convertrules.py:3180 +msgid "Vertical spacing changes might affect user-defined contexts. " msgstr "" -#: convert-ly.py:163 -msgid "Applying conversion: " +#: convertrules.py:3185 +msgid "Replace bar-size with bar-extent." msgstr "" -#: convert-ly.py:176 -msgid "Error while converting" +#: convertrules.py:3197 +msgid "Woodwind diagrams: Changes to the clarinet diagram." msgstr "" -#: convert-ly.py:178 -msgid "Stopping at last successful rule" +#: convertrules.py:3201 +msgid "" +"woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of " +"instrument.\n" msgstr "" -#: convert-ly.py:199 +#: book_base.py:24 #, python-format -msgid "Processing `%s'... " +msgid "file not found: %s" msgstr "" -#: convert-ly.py:289 relocate.cc:362 source-file.cc:59 +#: book_base.py:161 +msgid "Output function not implemented" +msgstr "" + +#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115 +#: input.cc:123 #, c-format, python-format -msgid "cannot open file: `%s'" +msgid "error: %s" msgstr "" -#: convert-ly.py:296 +#: lilylib.py:124 lilylib.py:175 #, python-format -msgid "cannot determine version for `%s'. Skipping" +msgid "Invoking `%s'" msgstr "" -#: etf2ly.py:1179 +#: lilylib.py:126 lilylib.py:177 #, python-format -msgid "%s [OPTION]... ETF-FILE" +msgid "Running %s..." msgstr "" -#: etf2ly.py:1180 -msgid "" -"Enigma Transport Format is a format used by Coda Music Technology's\n" -"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond " -"file.\n" +#: lilylib.py:253 +#, python-format +msgid "Usage: %s" msgstr "" -#: etf2ly.py:1192 midi2ly.py:865 musicxml2ly.py:2638 main.cc:149 main.cc:154 -msgid "FILE" +#: musicexp.py:216 musicexp.py:221 +msgid "Language does not support microtones contained in the piece" msgstr "" -#: etf2ly.py:1194 lilypond-book.py:210 midi2ly.py:882 main.cc:158 -msgid "show warranty and copyright" +#: musicexp.py:483 +msgid "Tuplet brackets of curved shape are not correctly implemented" msgstr "" -#: lilypond-book.py:69 -msgid "" -"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." +#: musicexp.py:669 +#, python-format +msgid "unable to set the music %(music)s for the repeat %(repeat)s" msgstr "" -#: lilypond-book.py:76 -msgid "BOOK" +#: musicexp.py:678 +msgid "encountered repeat without body" msgstr "" -#: lilypond-book.py:84 +#. no self.elements! +#: musicexp.py:848 #, python-format -msgid "Exiting (%d)..." +msgid "Grace note with no following music: %s" msgstr "" -#: lilypond-book.py:115 +#: musicexp.py:1010 #, python-format -msgid "Copyright (c) %s by" -msgstr "" - -#: lilypond-book.py:125 -msgid "FILTER" +msgid "Invalid octave shift size found: %s. Using no shift." msgstr "" -#: lilypond-book.py:128 -msgid "pipe snippets through FILTER [default: `convert-ly -n -']" +#: musicexp.py:1468 +#, python-format +msgid "Unable to convert alteration %s to a lilypond expression" msgstr "" -#: lilypond-book.py:132 -msgid "" -"use output format FORMAT (texi [default], texi-html, latex, html, docbook)" +#. TODO: Handle pieces without a time signature! +#: musicxml.py:358 +msgid "Senza-misura time signatures are not yet supported!" msgstr "" -#: lilypond-book.py:133 -msgid "FORMAT" +#: musicxml.py:376 +msgid "Unable to interpret time signature! Falling back to 4/4." msgstr "" -#: lilypond-book.py:140 -msgid "add DIR to include path" +#: musicxml.py:432 +#, python-format +msgid "" +"Key alteration octave given for a non-existing alteration nr. %s, available " +"numbers: %s!" msgstr "" -#: lilypond-book.py:141 lilypond-book.py:148 lilypond-book.py:166 -#: lilypond-book.py:172 lilypond-book.py:178 lilypond-book.py:184 main.cc:148 -msgid "DIR" +#: musicxml.py:520 +#, python-format +msgid "Unable to find instrument for ID=%s\n" msgstr "" -#: lilypond-book.py:146 -msgid "format Texinfo output so that Info will look for images of music in DIR" +#: book_latex.py:156 +msgid "cannot find \\begin{document} in LaTeX document" msgstr "" -#: lilypond-book.py:153 -msgid "run executable PROG instead of latex" +#: musicxml2ly.py:223 +#, python-format +msgid "" +"Encountered file created by %s, containing wrong beaming information. All " +"beaming information in the MusicXML file will be ignored" msgstr "" -#: lilypond-book.py:154 -msgid "PROG" +#: musicxml2ly.py:239 musicxml2ly.py:241 +#, python-format +msgid "Unprocessed PartGroupInfo %s encountered" msgstr "" -#: lilypond-book.py:159 -msgid "PAD" +#: musicxml2ly.py:494 +#, python-format +msgid "Encountered note at %s without type and duration (=%s)" msgstr "" -#: lilypond-book.py:161 +#: musicxml2ly.py:514 +#, python-format msgid "" -"pad left side of music to align music inspite of uneven bar numbers (in mm)" +"Encountered rational duration with denominator %s, unable to convert to " +"lilypond duration" msgstr "" -#: lilypond-book.py:165 -msgid "write output to DIR" +#: musicxml2ly.py:761 +msgid "Unable to extract key signature!" msgstr "" -#: lilypond-book.py:171 -msgid "do not fail if no lilypond output is found" +#: musicxml2ly.py:788 +#, python-format +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" msgstr "" -#: lilypond-book.py:177 -msgid "do not fail if no PNG images are found for EPS files" +#: musicxml2ly.py:926 +#, python-format +msgid "Encountered unprocessed marker %s\n" msgstr "" -#: lilypond-book.py:183 -msgid "write lily-XXX files to DIR, link into --output dir" +#: musicxml2ly.py:1020 +#, python-format +msgid "unknown span event %s" msgstr "" -#: lilypond-book.py:188 -msgid "COMMAND" +#: musicxml2ly.py:1030 +#, python-format +msgid "unknown span type %s for %s" msgstr "" -#: lilypond-book.py:189 -msgid "process ly_files using COMMAND FILE..." +#: musicxml2ly.py:1450 +msgid "Unknown metronome mark, ignoring" msgstr "" -#: lilypond-book.py:196 -msgid "create PDF files for use with PDFTeX" +#. TODO: Implement the other (more complex) way for tempo marks! +#: musicxml2ly.py:1455 +msgid "" +"Metronome marks with complex relations ( in MusicXML) are " +"not yet implemented." msgstr "" -#: lilypond-book.py:199 midi2ly.py:875 musicxml2ly.py:2595 main.cc:157 -msgid "be verbose" +#: musicxml2ly.py:1657 +#, python-format +msgid "Unable to convert chord type %s to lilypond." msgstr "" -#: lilypond-book.py:871 +#: musicxml2ly.py:1806 #, python-format -msgid "file not found: %s" +msgid "drum %s type unknown, please add to instrument_drumtype_dict" msgstr "" -#: lilypond-book.py:1142 -#, python-format -msgid "deprecated ly-option used: %s=%s" +#: musicxml2ly.py:1810 +msgid "cannot find suitable event" msgstr "" -#: lilypond-book.py:1144 +#: musicxml2ly.py:1958 #, python-format -msgid "compatibility mode translation: %s=%s" +msgid "Negative skip %s (from position %s to %s)" msgstr "" -#: lilypond-book.py:1147 +#: musicxml2ly.py:2099 #, python-format -msgid "deprecated ly-option used: %s" +msgid "Negative skip found: from %s to %s, difference is %s" msgstr "" -#: lilypond-book.py:1149 +#: musicxml2ly.py:2180 #, python-format -msgid "compatibility mode translation: %s" +msgid "unexpected %s; expected %s or %s or %s" msgstr "" -#: lilypond-book.py:1167 -#, python-format -msgid "ignoring unknown ly option: %s" +#: musicxml2ly.py:2286 +msgid "Encountered closing slur, but no slur is open" msgstr "" -#: lilypond-book.py:1604 -#, python-format -msgid "Opening filter `%s'" +#: musicxml2ly.py:2289 +msgid "Cannot have two simultaneous (closing) slurs" msgstr "" -#: lilypond-book.py:1621 +#: musicxml2ly.py:2298 +msgid "Cannot have a slur inside another slur" +msgstr "" + +#: musicxml2ly.py:2301 +msgid "Cannot have two simultaneous slurs" +msgstr "" + +#: musicxml2ly.py:2435 #, python-format -msgid "`%s' failed (%d)" +msgid "cannot simultaneously have more than one mode: %s" msgstr "" -#: lilypond-book.py:1622 -msgid "The error log is as follows:" +#: musicxml2ly.py:2543 +msgid "Converting to LilyPond expressions..." msgstr "" -#: lilypond-book.py:1684 -msgid "cannot find \\begin{document} in LaTeX document" +#: musicxml2ly.py:2554 +msgid "musicxml2ly [OPTION]... FILE.xml" msgstr "" -#: lilypond-book.py:1784 -msgid "Writing snippets..." +#: musicxml2ly.py:2556 +msgid "" +"Convert MusicXML from FILE.xml to LilyPond input.\n" +"If the given filename is -, musicxml2ly reads from the command line.\n" msgstr "" -#: lilypond-book.py:1790 -msgid "Processing..." +#: musicxml2ly.py:2562 midi2ly.py:987 abc2ly.py:1386 lilypond-book.py:140 +#: convert-ly.py:98 etf2ly.py:1202 main.cc:157 +msgid "show this help and exit" msgstr "" -#: lilypond-book.py:1796 -msgid "All snippets are up to date..." +#: musicxml2ly.py:2566 +msgid "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" msgstr "" -#: lilypond-book.py:1830 -#, python-format -msgid "cannot determine format for: %s" +#: musicxml2ly.py:2580 midi2ly.py:1015 abc2ly.py:1382 lilypond-book.py:212 +#: convert-ly.py:94 etf2ly.py:1206 main.cc:168 +msgid "show version number and exit" msgstr "" -#: lilypond-book.py:1841 -#, python-format -msgid "%s is up to date." +#: musicxml2ly.py:2585 midi2ly.py:1009 lilypond-book.py:204 main.cc:169 +msgid "be verbose" +msgstr "" + +#: musicxml2ly.py:2591 +msgid "use lxml.etree; uses less memory and cpu time" +msgstr "" + +#: musicxml2ly.py:2597 +msgid "input file is a zip-compressed MusicXML file" +msgstr "" + +#: musicxml2ly.py:2603 +msgid "convert pitches in relative mode (default)" +msgstr "" + +#: musicxml2ly.py:2608 +msgid "convert pitches in absolute mode" +msgstr "" + +#: musicxml2ly.py:2611 +msgid "LANG" +msgstr "" + +#: musicxml2ly.py:2613 +msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German" +msgstr "" + +#: musicxml2ly.py:2619 +msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +msgstr "" + +#: musicxml2ly.py:2625 +msgid "do not convert exact vertical positions of rests" +msgstr "" + +#: musicxml2ly.py:2631 +msgid "do not convert the exact page layout and breaks" +msgstr "" + +#: musicxml2ly.py:2637 +msgid "" +"do not convert beaming information, use lilypond's automatic beaming instead" +msgstr "" + +#: musicxml2ly.py:2640 midi2ly.py:992 midi2ly.py:997 etf2ly.py:1208 +#: main.cc:161 main.cc:166 +msgid "FILE" +msgstr "" + +#: musicxml2ly.py:2645 +msgid "set output filename to FILE, stdout if -" +msgstr "" + +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: musicxml2ly.py:2648 midi2ly.py:1028 abc2ly.py:1395 lilypond-book.py:234 +#: convert-ly.py:144 etf2ly.py:1216 main.cc:281 +#, c-format, python-format +msgid "Report bugs via %s" msgstr "" -#: lilypond-book.py:1855 +#: musicxml2ly.py:2728 #, python-format -msgid "Writing `%s'..." +msgid "unknown part in part-list: %s" msgstr "" -#: lilypond-book.py:1913 -msgid "Output would overwrite input file; use --output." +#: musicxml2ly.py:2790 +msgid "Input is compressed, extracting raw MusicXML data from stdin" msgstr "" -#: lilypond-book.py:1917 +#: musicxml2ly.py:2793 #, python-format -msgid "Reading %s..." +msgid "Input file %s is compressed, extracting raw MusicXML data" msgstr "" -#: lilypond-book.py:1937 -msgid "Dissecting..." +#: musicxml2ly.py:2823 +msgid "Reading MusicXML from Standard input ..." msgstr "" -#: lilypond-book.py:1953 +#: musicxml2ly.py:2825 #, python-format -msgid "Compiling %s..." +msgid "Reading MusicXML from %s ..." msgstr "" -#: lilypond-book.py:1962 +#: musicxml2ly.py:2858 #, python-format -msgid "Processing include: %s" +msgid "Output to `%s'" msgstr "" -#: lilypond-book.py:1974 +#: musicxml2ly.py:2925 #, python-format -msgid "Removing `%s'" +msgid "Unable to find input file %s" +msgstr "" + +#: midi2ly.py:90 lilypond-book.py:116 convert-ly.py:81 etf2ly.py:1189 +#, python-format +msgid "Copyright (c) %s by" +msgstr "" + +#: midi2ly.py:92 lilypond-book.py:118 convert-ly.py:83 etf2ly.py:1191 +msgid "Distributed under terms of the GNU General Public License." +msgstr "" + +#: midi2ly.py:93 lilypond-book.py:119 convert-ly.py:84 etf2ly.py:1192 +msgid "It comes with NO WARRANTY." msgstr "" -#: midi2ly.py:84 lily-library.scm:634 lily-library.scm:643 +#: midi2ly.py:99 msgid "warning: " msgstr "" -#: midi2ly.py:87 midi2ly.py:907 +#: midi2ly.py:102 midi2ly.py:1041 msgid "error: " msgstr "" -#: midi2ly.py:88 +#: midi2ly.py:103 msgid "Exiting... " msgstr "" -#: midi2ly.py:833 +#: midi2ly.py:960 #, python-format msgid "%s output to `%s'..." msgstr "" -#: midi2ly.py:846 +#: midi2ly.py:972 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87 +#, python-format +msgid "%s [OPTION]... FILE" +msgstr "" + +#: midi2ly.py:973 #, python-format msgid "Convert %s to LilyPond input.\n" msgstr "" -#: midi2ly.py:851 +#: midi2ly.py:978 msgid "print absolute pitches" msgstr "" -#: midi2ly.py:853 midi2ly.py:868 +#: midi2ly.py:980 midi2ly.py:1002 msgid "DUR" msgstr "" -#: midi2ly.py:854 +#: midi2ly.py:981 msgid "quantise note durations on DUR" msgstr "" -#: midi2ly.py:857 +#: midi2ly.py:984 msgid "print explicit durations" msgstr "" -#: midi2ly.py:861 +#: midi2ly.py:989 +msgid "prepend FILE to output" +msgstr "" + +#: midi2ly.py:993 msgid "set key: ALT=+sharps|-flats; MINOR=1" msgstr "" -#: midi2ly.py:862 +#: midi2ly.py:994 msgid "ALT[:MINOR]" msgstr "" -#: midi2ly.py:867 +#: midi2ly.py:996 abc2ly.py:1388 etf2ly.py:1207 +msgid "write output to FILE" +msgstr "" + +#: midi2ly.py:999 +msgid "preview of first 4 bars" +msgstr "" + +#: midi2ly.py:1001 msgid "quantise note starts on DUR" msgstr "" -#: midi2ly.py:870 +#: midi2ly.py:1004 msgid "DUR*NUM/DEN" msgstr "" -#: midi2ly.py:873 +#: midi2ly.py:1007 msgid "allow tuplet durations DUR*NUM/DEN" msgstr "" -#: midi2ly.py:885 +#: midi2ly.py:1016 lilypond-book.py:215 convert-ly.py:139 etf2ly.py:1210 +#: main.cc:170 +msgid "show warranty and copyright" +msgstr "" + +#: midi2ly.py:1019 msgid "treat every text as a lyric" msgstr "" -#: midi2ly.py:888 +#: midi2ly.py:1022 msgid "Examples" msgstr "" -#: midi2ly.py:908 +#: midi2ly.py:1042 msgid "no files specified on command line." msgstr "" -#: musicxml2ly.py:343 -msgid "" -"Encountered file created by Dolet 3.4 for Sibelius, containing wrong beaming " -"information. All beaming information in the MusicXML file will be ignored" -msgstr "" - -#: musicxml2ly.py:346 +#: abc2ly.py:1374 +#, python-format msgid "" -"Encountered file created by Noteworthy Composer's nwc2xml, containing wrong " -"beaming information. All beaming information in the MusicXML file will be " -"ignored" +"abc2ly converts ABC music files (see\n" +"%s) to LilyPond input.\n" msgstr "" -#: musicxml2ly.py:362 musicxml2ly.py:364 -#, python-format -msgid "Unprocessed PartGroupInfo %s encountered" +#: abc2ly.py:1390 +msgid "be strict about success" msgstr "" -#: musicxml2ly.py:594 -#, python-format -msgid "Encountered note at %s without type and duration (=%s)" +#: abc2ly.py:1392 +msgid "preserve ABC's notion of beams" msgstr "" -#: musicxml2ly.py:613 -#, python-format +#: lilypond-book.py:80 msgid "" -"Encountered rational duration with denominator %s, unable to convert to " -"lilypond duration" -msgstr "" - -#: musicxml2ly.py:868 -msgid "Unable to extract key signature!" +"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." msgstr "" -#: musicxml2ly.py:895 -#, python-format -msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" +#: lilypond-book.py:82 convert-ly.py:46 +msgid "Examples:" msgstr "" -#: musicxml2ly.py:968 -#, python-format -msgid "Encountered unprocessed marker %s\n" +#: lilypond-book.py:87 +msgid "BOOK" msgstr "" -#: musicxml2ly.py:1062 +#: lilypond-book.py:95 #, python-format -msgid "unknown span event %s" +msgid "Exiting (%d)..." msgstr "" -#: musicxml2ly.py:1072 -#, python-format -msgid "unknown span type %s for %s" +#: lilypond-book.py:127 +msgid "FILTER" msgstr "" -#: musicxml2ly.py:1498 -msgid "Unknown metronome mark, ignoring" +#: lilypond-book.py:130 +msgid "pipe snippets through FILTER [default: `convert-ly -n -']" msgstr "" -#. TODO: Implement the other (more complex) way for tempo marks! -#: musicxml2ly.py:1503 +#: lilypond-book.py:134 msgid "" -"Metronome marks with complex relations ( in MusicXML) are " -"not yet implemented." +"use output format FORMAT (texi [default], texi-html, latex, html, docbook)" msgstr "" -#: musicxml2ly.py:1703 -#, python-format -msgid "Unable to convert chord type %s to lilypond." +#: lilypond-book.py:135 +msgid "FORMAT" msgstr "" -#: musicxml2ly.py:1849 -#, python-format -msgid "drum %s type unknown, please add to instrument_drumtype_dict" +#: lilypond-book.py:142 +msgid "add DIR to include path" msgstr "" -#: musicxml2ly.py:1853 -msgid "cannot find suitable event" +#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163 +#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160 +msgid "DIR" msgstr "" -#: musicxml2ly.py:1994 -#, python-format -msgid "Negative skip %s (from position %s to %s)" +#: lilypond-book.py:148 +msgid "format Texinfo output so that Info will look for images of music in DIR" msgstr "" -#: musicxml2ly.py:2134 -#, python-format -msgid "Negative skip found: from %s to %s, difference is %s" +#: lilypond-book.py:155 +msgid "PAD" msgstr "" -#: musicxml2ly.py:2205 -#, python-format -msgid "unexpected %s; expected %s or %s or %s" +#: lilypond-book.py:157 +msgid "" +"pad left side of music to align music inspite of uneven bar numbers (in mm)" msgstr "" -#: musicxml2ly.py:2311 -msgid "Encountered closing slur, but no slur is open" +#: lilypond-book.py:162 +msgid "write lily-XXX files to DIR, link into --output dir" msgstr "" -#: musicxml2ly.py:2314 -msgid "Cannot have two simultaneous (closing) slurs" +#: lilypond-book.py:167 +msgid "" +"Load the additional python PACKAGE (containing e.g. a custom output format)" msgstr "" -#: musicxml2ly.py:2324 -msgid "Cannot have a slur inside another slur" +#: lilypond-book.py:168 +msgid "PACKAGE" msgstr "" -#: musicxml2ly.py:2327 -msgid "Cannot have two simultaneous slurs" +#: lilypond-book.py:172 +msgid "write output to DIR" msgstr "" -#: musicxml2ly.py:2455 -#, python-format -msgid "cannot simultaneously have more than one mode: %s" +#: lilypond-book.py:177 +msgid "COMMAND" msgstr "" -#: musicxml2ly.py:2553 -msgid "Converting to LilyPond expressions..." +#: lilypond-book.py:178 +msgid "process ly_files using COMMAND FILE..." msgstr "" -#: musicxml2ly.py:2564 -msgid "musicxml2ly [OPTION]... FILE.xml" +#: lilypond-book.py:182 +msgid "Compile snippets in safe mode" msgstr "" -#: musicxml2ly.py:2566 -msgid "" -"Convert MusicXML from FILE.xml to LilyPond input.\n" -"If the given filename is -, musicxml2ly reads from the command line.\n" +#: lilypond-book.py:188 +msgid "do not fail if no lilypond output is found" msgstr "" -#: musicxml2ly.py:2576 -msgid "" -"Copyright (c) 2005--2009 by\n" -" Han-Wen Nienhuys ,\n" -" Jan Nieuwenhuizen and\n" -" Reinhold Kainhofer \n" +#: lilypond-book.py:194 +msgid "do not fail if no PNG images are found for EPS files" msgstr "" -#: musicxml2ly.py:2601 -msgid "use lxml.etree; uses less memory and cpu time" +#: lilypond-book.py:200 +msgid "write snippet output files with the same base name as their source file" msgstr "" -#: musicxml2ly.py:2607 -msgid "input file is a zip-compressed MusicXML file" +#: lilypond-book.py:220 +msgid "" +"run executable PROG instead of latex, or in\n" +"case --pdf option is set instead of pdflatex" msgstr "" -#: musicxml2ly.py:2613 -msgid "convert pitches in relative mode (default)" +#: lilypond-book.py:222 +msgid "PROG" msgstr "" -#: musicxml2ly.py:2618 -msgid "convert pitches in absolute mode" +#: lilypond-book.py:228 +msgid "create PDF files for use with PDFTeX" msgstr "" -#: musicxml2ly.py:2621 -msgid "LANG" +#: lilypond-book.py:419 +msgid "Writing snippets..." msgstr "" -#: musicxml2ly.py:2623 -msgid "" -"use a different language file 'LANG.ly' and corresponding pitch names, e.g. " -"'deutsch' for deutsch.ly" +#: lilypond-book.py:425 +msgid "Processing..." msgstr "" -#: musicxml2ly.py:2629 -msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +#: lilypond-book.py:431 +msgid "All snippets are up to date..." msgstr "" -#: musicxml2ly.py:2635 -msgid "" -"do not convert beaming information, use lilypond's automatic beaming instead" +#: lilypond-book.py:452 +#, python-format +msgid "cannot determine format for: %s" msgstr "" -#: musicxml2ly.py:2643 -msgid "set output filename to FILE, stdout if -" +#: lilypond-book.py:461 +#, python-format +msgid "%s is up to date." msgstr "" -#: musicxml2ly.py:2726 +#: lilypond-book.py:475 #, python-format -msgid "unknown part in part-list: %s" +msgid "Writing `%s'..." msgstr "" -#: musicxml2ly.py:2788 -msgid "Input is compressed, extracting raw MusicXML data from stdin" +#: lilypond-book.py:537 +msgid "Output would overwrite input file; use --output." msgstr "" -#: musicxml2ly.py:2791 +#: lilypond-book.py:541 #, python-format -msgid "Input file %s is compressed, extracting raw MusicXML data" +msgid "Reading %s..." msgstr "" -#: musicxml2ly.py:2821 -msgid "Reading MusicXML from Standard input ..." +#: lilypond-book.py:549 +msgid "Dissecting..." msgstr "" -#: musicxml2ly.py:2823 +#: lilypond-book.py:561 #, python-format -msgid "Reading MusicXML from %s ..." +msgid "Compiling %s..." msgstr "" -#: musicxml2ly.py:2856 +#: lilypond-book.py:570 #, python-format -msgid "Output to `%s'" +msgid "Processing include: %s" msgstr "" -#: musicxml2ly.py:2922 +#: lilypond-book.py:582 #, python-format -msgid "Unable to find input file %s" +msgid "Removing `%s'" msgstr "" -#: getopt-long.cc:140 -#, c-format -msgid "option `%s' requires an argument" +#: convert-ly.py:44 +msgid "" +"Update LilyPond input to newer version. By default, update from the\n" +"version taken from the \\version command, to the current LilyPond version." msgstr "" -#: getopt-long.cc:144 -#, c-format -msgid "option `%s' does not allow an argument" +#: convert-ly.py:102 convert-ly.py:135 +msgid "VERSION" msgstr "" -#: getopt-long.cc:148 -#, c-format -msgid "unrecognized option: `%s'" +#: convert-ly.py:104 +msgid "start from VERSION [default: \\version found in file]" msgstr "" -#: getopt-long.cc:154 -#, c-format -msgid "invalid argument `%s' to option `%s'" +#: convert-ly.py:107 +msgid "edit in place" msgstr "" -#: warn.cc:68 grob.cc:566 input.cc:82 -#, c-format -msgid "programming error: %s" +#: convert-ly.py:111 +msgid "do not add \\version command if missing" msgstr "" -#: warn.cc:69 input.cc:83 -msgid "continuing, cross fingers" +#: convert-ly.py:117 +#, python-format +msgid "force updating \\version number to %s" msgstr "" -#: accidental-engraver.cc:298 -#, c-format -msgid "accidental typesetting list must begin with context-name: %s" +#: convert-ly.py:123 +msgid "only update \\version number if file is modified" msgstr "" -#: accidental-engraver.cc:328 -#, c-format -msgid "procedure or context-name expected for accidental rule, found %s" +#: convert-ly.py:129 +#, python-format +msgid "show rules [default: -f 0, -t %s]" msgstr "" -#: accidental.cc:187 -#, c-format -msgid "Could not find glyph-name for alteration %s" +#: convert-ly.py:134 +#, python-format +msgid "convert to VERSION [default: %s]" msgstr "" -#: accidental.cc:202 -msgid "natural alteration glyph not found" +#: convert-ly.py:184 +msgid "Applying conversion: " msgstr "" -#: align-interface.cc:305 -msgid "tried to get a translation for something that is no child of mine" +#: convert-ly.py:197 +msgid "Error while converting" msgstr "" -#: all-font-metrics.cc:143 -#, c-format -msgid "cannot find font: `%s'" +#: convert-ly.py:199 +msgid "Stopping at last successful rule" msgstr "" -#: apply-context-iterator.cc:31 -msgid "\\applycontext argument is not a procedure" +#: convert-ly.py:224 +#, python-format +msgid "Processing `%s'... " msgstr "" -#: auto-change-iterator.cc:63 change-iterator.cc:61 -#, c-format -msgid "cannot change, already in translator: %s" +#: convert-ly.py:332 +#, python-format +msgid "%s: Unable to open file" msgstr "" -#: axis-group-engraver.cc:78 -msgid "Axis_group_engraver: vertical group already has a parent" +#: convert-ly.py:339 +#, python-format +msgid "%s: Unable to determine version. Skipping" msgstr "" -#: axis-group-engraver.cc:79 -msgid "are there two Axis_group_engravers?" +#: convert-ly.py:344 +#, python-format +msgid "" +"%s: Invalid version string `%s' \n" +"Valid version strings consist of three numbers, separated by dots, e.g. " +"`2.8.12'" msgstr "" -#: axis-group-engraver.cc:80 -msgid "removing this vertical group" +#: etf2ly.py:1195 +#, python-format +msgid "%s [OPTION]... ETF-FILE" msgstr "" -#: axis-group-interface.cc:532 -msgid "an outside-staff object should have a direction, defaulting to up" +#: etf2ly.py:1196 +msgid "" +"Enigma Transport Format is a format used by Coda Music Technology's\n" +"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond " +"file.\n" +msgstr "" + +#: website_post.py:123 +msgid "English" +msgstr "" + +#: website_post.py:126 +msgid "Other languages" msgstr "" -#: bar-check-iterator.cc:73 +#: warn.cc:59 #, c-format -msgid "barcheck failed at: %s" +msgid "success: %s" msgstr "" -#: beam-engraver.cc:126 -msgid "already have a beam" +#: warn.cc:86 grob.cc:617 input.cc:97 +#, c-format +msgid "programming error: %s" msgstr "" -#: beam-engraver.cc:202 -msgid "unterminated beam" +#: warn.cc:87 input.cc:98 +msgid "continuing, cross fingers" msgstr "" -#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138 -msgid "stem must have Rhythmic structure" +#: getopt-long.cc:153 +#, c-format +msgid "option `%s' requires an argument" msgstr "" -#: beam-engraver.cc:252 -msgid "stem does not fit in beam" +#: getopt-long.cc:157 +#, c-format +msgid "option `%s' does not allow an argument" msgstr "" -#: beam-engraver.cc:253 -msgid "beam was started here" +#: getopt-long.cc:161 +#, c-format +msgid "unrecognized option: `%s'" msgstr "" -#: beam-quanting.cc:307 -msgid "no feasible beam position" +#: getopt-long.cc:167 +#, c-format +msgid "invalid argument `%s' to option `%s'" msgstr "" -#: beam.cc:160 -msgid "removing beam with no stems" +#: grob.cc:286 +msgid "Infinity or NaN encountered" msgstr "" -#: beam.cc:1078 -msgid "no viable initial configuration found: may not find good beam slope" +#: vaticana-ligature.cc:95 +msgid "flexa-height undefined; assuming 0" msgstr "" -#: break-alignment-interface.cc:195 -#, c-format -msgid "No spacing entry from %s to `%s'" +#: vaticana-ligature.cc:100 +msgid "ascending vaticana style flexa" msgstr "" -#: change-iterator.cc:23 -#, c-format -msgid "cannot change `%s' to `%s'" +#: vaticana-ligature.cc:188 +msgid "Vaticana_ligature: zero join (delta_pitch == 0)" msgstr "" -#. FIXME: constant error message. -#: change-iterator.cc:82 -msgid "cannot find context to switch to" +#: parse-scm.cc:101 +msgid "GUILE signaled an error for the expression beginning here" msgstr "" -#. We could change the current translator's id, but that would make -#. errors hard to catch. -#. -#. last->translator_id_string () = get_change -#. ()->change_to_id_string (); -#: change-iterator.cc:91 -#, c-format -msgid "not changing to same context type: %s" +#: rest-collision-engraver.cc:70 +msgid "rhythmic head is not part of a rhythmic column" msgstr "" -#. FIXME: uncomprehensable message -#: change-iterator.cc:95 -msgid "none of these in my family" +#. if we get to here, just put everything on one line +#: constrained-breaking.cc:189 constrained-breaking.cc:207 +msgid "cannot find line breaking that satisfies constraints" msgstr "" -#: chord-tremolo-engraver.cc:88 -msgid "No tremolo to end" +#: horizontal-bracket-engraver.cc:78 +msgid "do not have that many brackets" msgstr "" -#: chord-tremolo-engraver.cc:110 -msgid "unterminated chord tremolo" +#: horizontal-bracket-engraver.cc:87 +msgid "conflicting note group events" +msgstr "" + +#: hyphen-engraver.cc:104 +msgid "removing unterminated hyphen" +msgstr "" + +#: hyphen-engraver.cc:118 +msgid "unterminated hyphen; removing" msgstr "" -#: chord-tremolo-iterator.cc:35 +#: pango-font.cc:187 open-type-font.cc:319 #, c-format -msgid "expect 2 elements for chord tremolo, found %d" +msgid "FT_Get_Glyph_Name () error: %s" msgstr "" -#: clef.cc:54 +#: pango-font.cc:204 #, c-format -msgid "clef `%s' not found" +msgid "" +"Glyph has no name, but font supports glyph naming.\n" +"Skipping glyph U+%0X, file %s" msgstr "" -#: cluster.cc:110 +#: pango-font.cc:241 #, c-format -msgid "unknown cluster style `%s'" +msgid "no PostScript font name for font `%s'" msgstr "" -#: cluster.cc:147 -msgid "junking empty cluster" +#: pango-font.cc:290 +msgid "FreeType face has no PostScript font name" msgstr "" -#: coherent-ligature-engraver.cc:100 +#: midi-item.cc:92 #, c-format -msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" +msgid "no such MIDI instrument: `%s'" msgstr "" -#. if we get to here, just put everything on one line -#: constrained-breaking.cc:176 constrained-breaking.cc:193 -msgid "cannot find line breaking that satisfies constraints" +#: note-heads-engraver.cc:76 +msgid "NoteEvent without pitch" msgstr "" -#: context-def.cc:130 +#: rest.cc:159 #, c-format -msgid "program has no such type: `%s'" +msgid "rest `%s' not found" msgstr "" -#: context-property.cc:32 -msgid "need symbol arguments for \\override and \\revert" +#: spaceable-grob.cc:94 +#, c-format +msgid "No spring between column %d and next one" +msgstr "" + +#: beam-engraver.cc:147 +msgid "already have a beam" +msgstr "" + +#: beam-engraver.cc:230 +msgid "unterminated beam" +msgstr "" + +#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150 +msgid "stem must have Rhythmic structure" +msgstr "" + +#: beam-engraver.cc:274 +msgid "stem does not fit in beam" +msgstr "" + +#: beam-engraver.cc:275 +msgid "beam was started here" +msgstr "" + +#: music-iterator.cc:182 +msgid "Sending non-event to context" msgstr "" -#: context.cc:139 +#: context.cc:149 #, c-format msgid "cannot find or create new `%s'" msgstr "" -#: context.cc:197 +#: context.cc:207 #, c-format msgid "cannot find or create `%s' called `%s'" msgstr "" -#: context.cc:259 +#: context.cc:269 #, c-format msgid "Invalid CreateContext event: Cannot create %s context" msgstr "" -#: context.cc:390 +#: context.cc:400 #, c-format msgid "cannot find or create: `%s'" msgstr "" -#: custos.cc:77 -#, c-format -msgid "custos `%s' not found" -msgstr "" - -#: dispatcher.cc:71 +#: dispatcher.cc:82 msgid "Event class should be a symbol" msgstr "" -#: dispatcher.cc:78 +#: dispatcher.cc:89 #, c-format msgid "Unknown event class %s" msgstr "" -#: dots.cc:37 -#, c-format -msgid "dot `%s' not found" +#: paper-column-engraver.cc:245 +msgid "" +"forced break was overridden by some other event, should you be using bar " +"checks?" msgstr "" -#: dynamic-engraver.cc:186 -msgid "cannot find start of (de)crescendo" +#: tie-engraver.cc:116 +msgid "unterminated tie" msgstr "" -#: dynamic-engraver.cc:195 -msgid "already have a decrescendo" +#: tie-engraver.cc:312 +msgid "lonely tie" msgstr "" #: dynamic-engraver.cc:197 -msgid "already have a crescendo" -msgstr "" - -#: dynamic-engraver.cc:200 -msgid "cresc starts here" +msgid "cannot find start of (de)crescendo" msgstr "" -#: dynamic-engraver.cc:328 -msgid "unterminated (de)crescendo" +#: dynamic-engraver.cc:206 +msgid "already have a decrescendo" msgstr "" -#: extender-engraver.cc:142 extender-engraver.cc:151 -msgid "unterminated extender" +#: dynamic-engraver.cc:208 +msgid "already have a crescendo" msgstr "" -#: font-config-scheme.cc:140 font-config.cc:57 -#, c-format -msgid "failed adding font directory: %s" +#: dynamic-engraver.cc:211 +msgid "cresc starts here" msgstr "" -#: font-config-scheme.cc:142 font-config.cc:59 -#, c-format -msgid "adding font directory: %s" +#: dynamic-engraver.cc:339 +msgid "unterminated (de)crescendo" msgstr "" -#: font-config-scheme.cc:156 -#, c-format -msgid "failed adding font file: %s" +#: paper-score.cc:122 minimal-page-breaking.cc:40 +msgid "Calculating line breaks..." msgstr "" -#: font-config-scheme.cc:158 +#: paper-score.cc:135 #, c-format -msgid "adding font file: %s" +msgid "Element count %d (spanners %d) " msgstr "" -#: font-config.cc:28 -msgid "Initializing FontConfig..." +#: paper-score.cc:139 +msgid "Preprocessing graphical objects..." msgstr "" -#: font-config.cc:44 -#, c-format -msgid "Rebuilding FontConfig cache %s, this may take a while..." +#: paper-score.cc:163 optimal-page-breaking.cc:208 +#: page-turn-page-breaking.cc:248 +msgid "Drawing systems..." msgstr "" -#: font-config.cc:63 -msgid "Building font database." +#: mensural-ligature-engraver.cc:96 +msgid "ligature with less than 2 heads -> skipping" msgstr "" -#: general-scheme.cc:202 -msgid "infinity or NaN encountered while converting Real number" +#: mensural-ligature-engraver.cc:123 +msgid "cannot determine pitch of ligature primitive -> skipping" msgstr "" -#: general-scheme.cc:203 -msgid "setting to zero" +#: mensural-ligature-engraver.cc:137 +msgid "single note ligature - skipping" msgstr "" -#: general-scheme.cc:422 output-ps.scm:63 -msgid "Found infinity or nan in output. Substituting 0.0" +#: mensural-ligature-engraver.cc:148 +msgid "prime interval within ligature -> skipping" msgstr "" -#: glissando-engraver.cc:94 -msgid "unterminated glissando" +#: mensural-ligature-engraver.cc:159 +msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" msgstr "" -#: global-context-scheme.cc:85 global-context-scheme.cc:103 -msgid "no music found in score" +#: mensural-ligature-engraver.cc:202 +msgid "semibrevis must be followed by another one -> skipping" msgstr "" -#: global-context-scheme.cc:93 -msgid "Interpreting music... " +#: mensural-ligature-engraver.cc:212 +msgid "" +"semibreves can only appear at the beginning of a ligature,\n" +"and there may be only zero or two of them" msgstr "" -#: global-context-scheme.cc:116 -#, c-format -msgid "elapsed time: %.2f seconds" +#: mensural-ligature-engraver.cc:232 +msgid "" +"invalid ligatura ending:\n" +"when the last note is a descending brevis,\n" +"the penultimate note must be another one,\n" +"or the ligatura must be LB or SSB" msgstr "" -#: gregorian-ligature-engraver.cc:59 -#, c-format -msgid "\\%s ignored" +#: mensural-ligature-engraver.cc:386 +msgid "unexpected case fall-through" msgstr "" -#: gregorian-ligature-engraver.cc:64 +#: piano-pedal-engraver.cc:298 #, c-format -msgid "implied \\%s added" -msgstr "" - -#. ligature may not start with 2nd head of pes or flexa -#: gregorian-ligature-engraver.cc:213 -msgid "cannot apply `\\~' on first head of ligature" -msgstr "" - -#. (pitch == prev_pitch) -#: gregorian-ligature-engraver.cc:225 -msgid "cannot apply `\\~' on heads with identical pitch" +msgid "expect 3 strings for piano pedals, found: %ld" msgstr "" -#: grob-interface.cc:57 +#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324 +#: piano-pedal-performer.cc:104 #, c-format -msgid "Unknown interface `%s'" +msgid "cannot find start of piano pedal: `%s'" msgstr "" -#: grob-interface.cc:68 +#: piano-pedal-engraver.cc:359 #, c-format -msgid "Grob `%s' has no interface for property `%s'" +msgid "cannot find start of piano pedal bracket: `%s'" msgstr "" -#: grob-property.cc:34 -#, c-format -msgid "%d: %s" +#: input.cc:131 source-file.cc:179 source-file.cc:194 +msgid "position unknown" msgstr "" -#: grob-property.cc:173 +#: paper-outputter-scheme.cc:41 #, c-format -msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" +msgid "Layout output to `%s'..." msgstr "" -#: grob.cc:251 -msgid "Infinity or NaN encountered" +#: general-scheme.cc:306 +msgid "infinity or NaN encountered while converting Real number" msgstr "" -#: hairpin.cc:186 -msgid "decrescendo too small" +#: general-scheme.cc:307 +msgid "setting to zero" msgstr "" -#: horizontal-bracket-engraver.cc:68 -msgid "do not have that many brackets" +#: general-scheme.cc:543 +msgid "Found infinity or nan in output. Substituting 0.0" msgstr "" -#: horizontal-bracket-engraver.cc:77 -msgid "conflicting note group events" +#: music.cc:151 +#, c-format +msgid "octave check failed; expected \"%s\", found: \"%s\"" msgstr "" -#: hyphen-engraver.cc:93 -msgid "removing unterminated hyphen" +#: music.cc:219 +msgid "(normalized pitch)" msgstr "" -#: hyphen-engraver.cc:107 -msgid "unterminated hyphen; removing" +#: music.cc:223 +#, c-format +msgid "Transposing %s by %s makes alteration larger than double" msgstr "" -#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:110 +#: translator-ctors.cc:65 #, c-format -msgid "cannot find file: `%s'" +msgid "unknown translator: `%s'" msgstr "" -#: includable-lexer.cc:55 lily-parser-scheme.cc:101 -#, c-format -msgid "(search path: `%s')" +#: partial-iterator.cc:45 +msgid "trying to use \\partial after the start of a piece" msgstr "" -#: input.cc:112 source-file.cc:173 source-file.cc:188 -msgid "position unknown" +#: new-fingering-engraver.cc:106 +msgid "cannot add text scripts to individual note heads" msgstr "" -#: key-signature-interface.cc:74 -#, c-format -msgid "No glyph found for alteration: %s" +#: new-fingering-engraver.cc:250 +msgid "no placement found for fingerings" msgstr "" -#: key-signature-interface.cc:84 -msgid "alteration not found" +#: new-fingering-engraver.cc:251 +msgid "placing below" msgstr "" -#: ligature-bracket-engraver.cc:62 ligature-engraver.cc:93 +#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72 msgid "cannot find start of ligature" msgstr "" -#: ligature-bracket-engraver.cc:75 ligature-engraver.cc:120 -msgid "already have a ligature" +#: ligature-engraver.cc:109 +msgid "no right bound" msgstr "" -#: ligature-engraver.cc:98 -msgid "no right bound" +#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85 +msgid "already have a ligature" msgstr "" -#: ligature-engraver.cc:129 +#: ligature-engraver.cc:140 msgid "no left bound" msgstr "" -#: ligature-engraver.cc:173 +#: ligature-engraver.cc:185 msgid "unterminated ligature" msgstr "" -#: ligature-engraver.cc:202 +#: ligature-engraver.cc:214 msgid "ignoring rest: ligature may not contain rest" msgstr "" -#: ligature-engraver.cc:203 +#: ligature-engraver.cc:215 msgid "ligature was started here" msgstr "" -#: lily-guile.cc:78 +#: auto-change-iterator.cc:74 change-iterator.cc:72 #, c-format -msgid "(load path: `%s')" +msgid "cannot change, already in translator: %s" msgstr "" -#: lily-guile.cc:428 +#: accidental-engraver.cc:180 #, c-format -msgid "cannot find property type-check for `%s' (%s)." -msgstr "" - -#: lily-guile.cc:431 -msgid "perhaps a typing error?" +msgid "accidental typesetting list must begin with context-name: %s" msgstr "" -#: lily-guile.cc:438 -msgid "doing assignment anyway" +#: accidental-engraver.cc:210 +#, c-format +msgid "procedure or context-name expected for accidental rule, found %s" msgstr "" -#: lily-guile.cc:450 +#: ttf.cc:481 ttf.cc:530 #, c-format -msgid "type check for `%s' failed; value `%s' must be of type `%s'" +msgid "font index %d too large for font `%s', using index 0" msgstr "" -#: lily-lexer.cc:252 -msgid "include files are not allowed in safe mode" +#: ttf.cc:513 ttf.cc:565 +msgid "font index must be non-negative, using index 0" msgstr "" -#: lily-lexer.cc:271 +#: break-alignment-interface.cc:206 #, c-format -msgid "identifier name is a keyword: `%s'" +msgid "No spacing entry from %s to `%s'" msgstr "" -#: lily-lexer.cc:286 -#, c-format -msgid "error at EOF: %s" +#: minimal-page-breaking.cc:44 +msgid "Calculating page breaks..." msgstr "" -#: lily-parser-scheme.cc:30 +#: vaticana-ligature-engraver.cc:400 #, c-format -msgid "deprecated function called: %s" +msgid "" +"ignored prefix(es) `%s' of this head according to restrictions of the " +"selected ligature style" msgstr "" -#: lily-parser-scheme.cc:83 +#: vaticana-ligature-engraver.cc:736 #, c-format -msgid "Changing working directory to: `%s'" +msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" msgstr "" -#: lily-parser-scheme.cc:100 +#: paper-book.cc:214 #, c-format -msgid "cannot find init file: `%s'" +msgid "program option -dprint-pages not supported by backend `%s'" msgstr "" -#: lily-parser-scheme.cc:119 +#: paper-book.cc:233 #, c-format -msgid "Processing `%s'" +msgid "program option -dpreview not supported by backend `%s'" msgstr "" -#: lily-parser.cc:95 -msgid "Parsing..." +#: output-def.cc:235 +msgid "margins do not fit with line-width, setting default values" msgstr "" -#: lily-parser.cc:123 -msgid "braces do not match" +#: output-def.cc:242 +msgid "" +"systems run off the page due to improper paper settings, setting default " +"values" msgstr "" -#: lyric-combine-music-iterator.cc:329 +#: score-engraver.cc:78 #, c-format -msgid "cannot find Voice `%s'" +msgid "cannot find `%s'" msgstr "" -#: lyric-engraver.cc:162 -msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." +#: score-engraver.cc:80 +msgid "Music font has not been installed properly." msgstr "" -#: main.cc:97 +#: score-engraver.cc:82 #, c-format -msgid "" -"This program is free software. It is covered by the GNU General Public\n" -"License and you are welcome to change it and/or distribute copies of it\n" -"under certain conditions. Invoke as `%s --warranty' for more\n" -"information.\n" +msgid "Search path `%s'" msgstr "" -#: main.cc:103 -msgid "" -" This program is free software; you can redistribute it and/or\n" -"modify it under the terms of the GNU General Public License version 2\n" -"as published by the Free Software Foundation.\n" -"\n" -" This program is distributed in the hope that it will be useful,\n" -"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" -"General Public License for more details.\n" -"\n" -" You should have received a copy of the\n" -"GNU General Public License along with this program; if not, write to\n" -"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" -"Boston, MA 02111-1307, USA.\n" +#: score-engraver.cc:84 +msgid "Aborting" msgstr "" -#: main.cc:134 -msgid "SYM[=VAL]" +#: note-collision.cc:497 +msgid "ignoring too many clashing note columns" msgstr "" -#: main.cc:135 -msgid "" -"set Scheme option SYM to VAL (default: #t).\n" -"Use -dhelp for help." +#. fixme: be more verbose. +#: volta-engraver.cc:111 +msgid "cannot end volta spanner" msgstr "" -#: main.cc:138 -msgid "EXPR" +#: volta-engraver.cc:121 +msgid "already have a volta spanner, ending that one prematurely" msgstr "" -#: main.cc:138 -msgid "evaluate scheme code" +#: volta-engraver.cc:125 +msgid "also already have an ended spanner" msgstr "" -#. Bug in option parser: --output =foe is taken as an abbreviation -#. for --output-format. -#: main.cc:141 -msgid "FORMATs" +#: volta-engraver.cc:126 +msgid "giving up" msgstr "" -#: main.cc:141 -msgid "dump FORMAT,... Also as separate options:" +#: page-layout-problem.cc:322 +msgid "" +"cannot fit music on page: ragged-spacing was requested, but page was " +"compressed" msgstr "" -#: main.cc:142 -msgid "generate PDF (default)" +#: page-layout-problem.cc:325 +#, c-format +msgid "cannot fit music on page: overflow is %f" msgstr "" -#: main.cc:143 -msgid "generate PNG" +#: page-layout-problem.cc:327 +msgid "compressing music to fit" msgstr "" -#: main.cc:144 -msgid "generate PostScript" +#: page-layout-problem.cc:765 +msgid "staff-affinities should only decrease" msgstr "" -#: main.cc:146 -msgid "FIELD" +#: apply-context-iterator.cc:42 +msgid "\\applycontext argument is not a procedure" msgstr "" -#: main.cc:146 -msgid "" -"dump header field FIELD to file\n" -"named BASENAME.FIELD" +#. FIXME: constant error message. +#: mark-engraver.cc:157 +msgid "rehearsalMark must have integer value" msgstr "" -#: main.cc:148 -msgid "add DIR to search path" +#: mark-engraver.cc:163 +msgid "mark label must be a markup object" msgstr "" -#: main.cc:149 -msgid "use FILE as init file" +#: new-dynamic-engraver.cc:142 +#, c-format +msgid "" +"unknown crescendo style: %s\n" +"defaulting to hairpin." msgstr "" -#: main.cc:151 -msgid "USER, GROUP, JAIL, DIR" +#: new-dynamic-engraver.cc:200 +#, c-format +msgid "unterminated %s" msgstr "" -#: main.cc:151 -msgid "" -"chroot to JAIL, become USER:GROUP\n" -"and cd into DIR" +#: stem-engraver.cc:103 +msgid "tremolo duration is too long" msgstr "" -#: main.cc:154 -msgid "write output to FILE (suffix will be added)" +#. FIXME: +#: stem-engraver.cc:140 +#, c-format +msgid "adding note head to incompatible stem (type = %d)" msgstr "" -#: main.cc:155 -msgid "relocate using directory of lilypond program" +#: stem-engraver.cc:142 +msgid "maybe input should specify polyphonic voices" +msgstr "" + +#: lily-lexer.cc:264 +msgid "include files are not allowed in safe mode" msgstr "" -#: main.cc:221 +#: lily-lexer.cc:291 #, c-format -msgid "" -"Copyright (c) %s by\n" -"%s and others." +msgid "identifier name is a keyword: `%s'" msgstr "" -#. No version number or newline here. It confuses help2man. -#: main.cc:249 +#: lily-lexer.cc:312 #, c-format -msgid "Usage: %s [OPTION]... FILE..." +msgid "error at EOF: %s" msgstr "" -#: main.cc:251 +#: lyric-combine-music-iterator.cc:337 #, c-format -msgid "Typeset music and/or produce MIDI from FILE." +msgid "cannot find Voice `%s'" msgstr "" -#: main.cc:253 +#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109 #, c-format -msgid "LilyPond produces beautiful music notation." +msgid "cannot find file: `%s'" msgstr "" -#: main.cc:255 +#: includable-lexer.cc:73 lily-parser-scheme.cc:100 #, c-format -msgid "For more information, see %s" +msgid "(search path: `%s')" +msgstr "" + +#: note-column.cc:135 +msgid "cannot have note heads and rests together on a stem" msgstr "" -#: main.cc:257 +#: beam.cc:180 +msgid "removing beam with no stems" +msgstr "" + +#. We are completely screwed. +#: beam.cc:1274 +msgid "no viable initial configuration found: may not find good beam slope" +msgstr "" + +#: slur-engraver.cc:93 #, c-format -msgid "Options:" +msgid "direction of %s invalid: %d" msgstr "" -#: main.cc:311 +#: slur-engraver.cc:162 +msgid "unterminated slur" +msgstr "" + +#: slur-engraver.cc:174 +msgid "cannot end slur" +msgstr "" + +#: font-config.cc:40 +msgid "Initializing FontConfig..." +msgstr "" + +#: font-config.cc:55 font-config-scheme.cc:152 #, c-format -msgid "expected %d arguments with jail, found: %u" +msgid "failed adding font directory: %s" msgstr "" -#: main.cc:325 +#: font-config.cc:57 font-config-scheme.cc:154 #, c-format -msgid "no such user: %s" +msgid "adding font directory: %s" msgstr "" -#: main.cc:327 +#: font-config.cc:61 +msgid "Building font database..." +msgstr "" + +#. find out the ideal number of pages +#: optimal-page-breaking.cc:62 +msgid "Finding the ideal number of pages..." +msgstr "" + +#: optimal-page-breaking.cc:85 +msgid "" +"could not satisfy systems-per-page and page-count at the same time, ignoring " +"systems-per-page" +msgstr "" + +#: optimal-page-breaking.cc:105 +msgid "Fitting music on 1 page..." +msgstr "" + +#: optimal-page-breaking.cc:107 #, c-format -msgid "cannot get user id from user name: %s: %s" +msgid "Fitting music on %d pages..." msgstr "" -#: main.cc:342 +#: optimal-page-breaking.cc:109 #, c-format -msgid "no such group: %s" +msgid "Fitting music on %d or %d pages..." msgstr "" -#: main.cc:344 +#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173 #, c-format -msgid "cannot get group id from group name: %s: %s" +msgid "trying %d systems" msgstr "" -#: main.cc:352 +#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201 #, c-format -msgid "cannot chroot to: %s: %s" +msgid "best score for this sys-count: %f" msgstr "" -#: main.cc:359 +#: accidental.cc:200 #, c-format -msgid "cannot change group id to: %d: %s" +msgid "Could not find glyph-name for alteration %s" msgstr "" -#: main.cc:365 +#: accidental.cc:215 +msgid "natural alteration glyph not found" +msgstr "" + +#: system.cc:197 #, c-format -msgid "cannot change user id to: %d: %s" +msgid "Element count %d" msgstr "" -#: main.cc:371 +#: system.cc:303 #, c-format -msgid "cannot change working directory to: %s: %s" +msgid "Grob count %d" msgstr "" -#: main.cc:611 +#: slur.cc:362 #, c-format -msgid "exception caught: %s" +msgid "Ignoring grob for slur: %s. avoid-slur not set?" msgstr "" -#. FIXME: constant error message. -#: mark-engraver.cc:129 -msgid "rehearsalMark must have integer value" +#: font-config-scheme.cc:168 +#, c-format +msgid "failed adding font file: %s" msgstr "" -#: mark-engraver.cc:135 -msgid "mark label must be a markup object" +#: font-config-scheme.cc:170 +#, c-format +msgid "adding font file: %s" msgstr "" -#: mensural-ligature-engraver.cc:85 -msgid "ligature with less than 2 heads -> skipping" +#: hairpin.cc:186 +msgid "decrescendo too small" msgstr "" -#: mensural-ligature-engraver.cc:112 -msgid "cannot determine pitch of ligature primitive -> skipping" +#: extender-engraver.cc:170 extender-engraver.cc:179 +msgid "unterminated extender" msgstr "" -#: mensural-ligature-engraver.cc:126 -msgid "single note ligature - skipping" +#: lily-guile.cc:89 +#, c-format +msgid "(load path: `%s')" msgstr "" -#: mensural-ligature-engraver.cc:138 -msgid "prime interval within ligature -> skipping" +#: lily-guile.cc:437 +#, c-format +msgid "cannot find property type-check for `%s' (%s)." msgstr "" -#: mensural-ligature-engraver.cc:150 -msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" +#: lily-guile.cc:440 +msgid "perhaps a typing error?" msgstr "" -#: mensural-ligature-engraver.cc:198 -msgid "semibrevis must be followed by another one -> skipping" +#: lily-guile.cc:447 +msgid "doing assignment anyway" msgstr "" -#: mensural-ligature-engraver.cc:209 -msgid "" -"semibreves can only appear at the beginning of a ligature,\n" -"and there may be only zero or two of them" +#: lily-guile.cc:459 +#, c-format +msgid "type check for `%s' failed; value `%s' must be of type `%s'" msgstr "" -#: mensural-ligature-engraver.cc:236 +#: main.cc:109 +#, c-format msgid "" -"invalid ligatura ending:\n" -"when the last note is a descending brevis,\n" -"the penultimate note must be another one,\n" -"or the ligatura must be LB or SSB" +"This program is free software. It is covered by the GNU General Public\n" +"License and you are welcome to change it and/or distribute copies of it\n" +"under certain conditions. Invoke as `%s --warranty' for more\n" +"information.\n" msgstr "" -#: mensural-ligature-engraver.cc:356 -msgid "unexpected case fall-through" +#: main.cc:115 +msgid "" +" This program is free software; you can redistribute it and/or\n" +"modify it under the terms of the GNU General Public License version 2\n" +"as published by the Free Software Foundation.\n" +"\n" +" This program is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" +"General Public License for more details.\n" +"\n" +" You should have received a copy of the\n" +"GNU General Public License along with this program; if not, write to\n" +"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" +"Boston, MA 02111-1307, USA.\n" msgstr "" -#: mensural-ligature.cc:141 -msgid "Mensural_ligature: unexpected case fall-through" +#: main.cc:146 +msgid "SYM[=VAL]" msgstr "" -#: mensural-ligature.cc:192 -msgid "Mensural_ligature: (join_right == 0)" +#: main.cc:147 +msgid "" +"set Scheme option SYM to VAL (default: #t).\n" +"Use -dhelp for help." msgstr "" -#: midi-item.cc:81 -#, c-format -msgid "no such MIDI instrument: `%s'" +#: main.cc:150 +msgid "EXPR" msgstr "" -#: midi-stream.cc:28 -#, c-format -msgid "cannot open for write: %s: %s" +#: main.cc:150 +msgid "evaluate scheme code" msgstr "" -#: midi-stream.cc:44 -#, c-format -msgid "cannot write to file: `%s'" +#. Bug in option parser: --output =foe is taken as an abbreviation +#. for --output-format. +#: main.cc:153 +msgid "FORMATs" msgstr "" -#: minimal-page-breaking.cc:38 paper-score.cc:105 -msgid "Calculating line breaks..." +#: main.cc:153 +msgid "dump FORMAT,... Also as separate options:" msgstr "" -#: minimal-page-breaking.cc:42 layout-page-layout.scm:463 -msgid "Calculating page breaks..." +#: main.cc:154 +msgid "generate PDF (default)" msgstr "" -#: music-iterator.cc:171 -msgid "Sending non-event to context" +#: main.cc:155 +msgid "generate PNG" msgstr "" -#: music.cc:140 -#, c-format -msgid "octave check failed; expected \"%s\", found: \"%s\"" +#: main.cc:156 +msgid "generate PostScript" msgstr "" -#: music.cc:203 -#, c-format -msgid "transposition by %s makes alteration larger than double" +#: main.cc:158 +msgid "FIELD" msgstr "" -#: new-dynamic-engraver.cc:129 -#, c-format +#: main.cc:158 msgid "" -"unknown crescendo style: %s\n" -"defaulting to hairpin." -msgstr "" - -#: new-fingering-engraver.cc:96 -msgid "cannot add text scripts to individual note heads" +"dump header field FIELD to file\n" +"named BASENAME.FIELD" msgstr "" -#: new-fingering-engraver.cc:239 -msgid "no placement found for fingerings" +#: main.cc:160 +msgid "add DIR to search path" msgstr "" -#: new-fingering-engraver.cc:240 -msgid "placing below" +#: main.cc:161 +msgid "use FILE as init file" msgstr "" -#: note-collision.cc:484 -msgid "ignoring too many clashing note columns" +#: main.cc:163 +msgid "USER, GROUP, JAIL, DIR" msgstr "" -#: note-column.cc:124 -msgid "cannot have note heads and rests together on a stem" +#: main.cc:163 +msgid "" +"chroot to JAIL, become USER:GROUP\n" +"and cd into DIR" msgstr "" -#: note-head.cc:63 -#, c-format -msgid "none of note heads `%s' or `%s' found" +#: main.cc:166 +msgid "write output to FILE (suffix will be added)" msgstr "" -#: note-heads-engraver.cc:64 -msgid "NoteEvent without pitch" +#: main.cc:167 +msgid "relocate using directory of lilypond program" msgstr "" -#: open-type-font.cc:33 +#. Do not update the copyright years here, run `make grand-replace' +#: main.cc:238 #, c-format -msgid "cannot allocate %lu bytes" +msgid "" +"Copyright (c) %s by\n" +"%s and others." msgstr "" -#: open-type-font.cc:37 +#. No version number or newline here. It confuses help2man. +#: main.cc:265 #, c-format -msgid "cannot load font table: %s" +msgid "Usage: %s [OPTION]... FILE..." msgstr "" -#: open-type-font.cc:42 -#, c-format -msgid "Free type error: %s" +#: main.cc:267 +msgid "Typeset music and/or produce MIDI from FILE." msgstr "" -#: open-type-font.cc:100 -#, c-format -msgid "unsupported font format: %s" +#: main.cc:269 +msgid "LilyPond produces beautiful music notation." msgstr "" -#: open-type-font.cc:102 +#: main.cc:271 #, c-format -msgid "error reading font file %s: %s" +msgid "For more information, see %s" msgstr "" -#: open-type-font.cc:177 -#, c-format -msgid "FT_Get_Glyph_Name () Freetype error: %s" +#: main.cc:273 +msgid "Options:" msgstr "" -#: open-type-font.cc:302 pango-font.cc:167 +#: main.cc:327 #, c-format -msgid "FT_Get_Glyph_Name () error: %s" -msgstr "" - -#. find out the ideal number of pages -#: optimal-page-breaking.cc:56 -msgid "Finding the ideal number of pages..." +msgid "expected %d arguments with jail, found: %u" msgstr "" -#: optimal-page-breaking.cc:78 -msgid "Fitting music on 1 page..." +#: main.cc:341 +#, c-format +msgid "no such user: %s" msgstr "" -#: optimal-page-breaking.cc:80 +#: main.cc:343 #, c-format -msgid "Fitting music on %d pages..." +msgid "cannot get user id from user name: %s: %s" msgstr "" -#: optimal-page-breaking.cc:82 +#: main.cc:358 #, c-format -msgid "Fitting music on %d or %d pages..." +msgid "no such group: %s" msgstr "" -#: optimal-page-breaking.cc:159 page-turn-page-breaking.cc:226 -#: paper-score.cc:146 -msgid "Drawing systems..." +#: main.cc:360 +#, c-format +msgid "cannot get group id from group name: %s: %s" msgstr "" -#: page-turn-page-breaking.cc:146 +#: main.cc:368 #, c-format -msgid "page-turn-page-breaking: breaking from %d to %d" +msgid "cannot chroot to: %s: %s" msgstr "" -#: page-turn-page-breaking.cc:195 -msgid "" -"cannot fit the first page turn onto a single page. Consider setting first-" -"page-number to an even number." +#: main.cc:375 +#, c-format +msgid "cannot change group id to: %d: %s" msgstr "" -#: page-turn-page-breaking.cc:208 +#: main.cc:381 #, c-format -msgid "Calculating page and line breaks (%d possible page breaks)..." +msgid "cannot change user id to: %d: %s" msgstr "" -#: page-turn-page-breaking.cc:275 +#: main.cc:387 #, c-format -msgid "break starting at page %d" +msgid "cannot change working directory to: %s: %s" msgstr "" -#: page-turn-page-breaking.cc:276 +#: main.cc:628 #, c-format -msgid "\tdemerits: %f" +msgid "exception caught: %s" msgstr "" -#: page-turn-page-breaking.cc:277 +#: key-signature-interface.cc:78 #, c-format -msgid "\tsystem count: %d" +msgid "No glyph found for alteration: %s" msgstr "" -#: page-turn-page-breaking.cc:278 -#, c-format -msgid "\tpage count: %d" +#: key-signature-interface.cc:88 +msgid "alteration not found" msgstr "" -#: page-turn-page-breaking.cc:279 +#: dots.cc:48 #, c-format -msgid "\tprevious break: %d" +msgid "dot `%s' not found" msgstr "" -#: pango-font.cc:184 +#: translator.cc:359 #, c-format -msgid "" -"Glyph has no name, but font supports glyph naming.\n" -"Skipping glyph U+%0X, file %s" +msgid "Two simultaneous %s events, junking this one" msgstr "" -#: pango-font.cc:229 +#: translator.cc:360 #, c-format -msgid "no PostScript font name for font `%s'" +msgid "Previous %s event here" msgstr "" -#: pango-font.cc:277 -msgid "FreeType face has no PostScript font name" +#: glissando-engraver.cc:105 +msgid "unterminated glissando" msgstr "" -#: paper-column-engraver.cc:221 -msgid "" -"forced break was overridden by some other event, should you be using bar " -"checks?" +#: text-spanner-engraver.cc:73 +msgid "cannot find start of text spanner" msgstr "" -#: paper-outputter-scheme.cc:30 -#, c-format -msgid "Layout output to `%s'..." +#: text-spanner-engraver.cc:86 +msgid "already have a text spanner" +msgstr "" + +#: text-spanner-engraver.cc:132 +msgid "unterminated text spanner" msgstr "" -#: paper-score.cc:118 +#: clef.cc:65 #, c-format -msgid "Element count %d (spanners %d) " +msgid "clef `%s' not found" msgstr "" -#: paper-score.cc:122 -msgid "Preprocessing graphical objects..." +#. +#. Todo: should make typecheck? +#. +#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. +#. +#: time-signature-engraver.cc:75 +#, c-format +msgid "strange time signature found: %d/%d" msgstr "" -#: parse-scm.cc:93 -msgid "GUILE signaled an error for the expression beginning here" +#: lily-parser-scheme.cc:82 +#, c-format +msgid "Changing working directory to: `%s'" msgstr "" -#: percent-repeat-engraver.cc:202 -msgid "unterminated percent repeat" +#: lily-parser-scheme.cc:99 +#, c-format +msgid "cannot find init file: `%s'" msgstr "" -#: performance.cc:43 -msgid "Track..." +#: lily-parser-scheme.cc:118 +#, c-format +msgid "Processing `%s'" msgstr "" -#: performance.cc:72 -msgid "MIDI channel wrapped around" +#: lily-parser-scheme.cc:204 +msgid "" +"ly:parser-parse-string is only valid with a new parser. Use ly:parser-" +"include-string instead." msgstr "" -#: performance.cc:73 -msgid "remapping modulo 16" +#: custos.cc:88 +#, c-format +msgid "custos `%s' not found" msgstr "" -#: performance.cc:100 +#: program-option-scheme.cc:237 #, c-format -msgid "MIDI output to `%s'..." +msgid "no such internal option: %s" msgstr "" -#: phrasing-slur-engraver.cc:146 -msgid "unterminated phrasing slur" +#: rest-collision.cc:146 +msgid "cannot resolve rest collision: rest direction not set" msgstr "" -#: piano-pedal-engraver.cc:287 -#, c-format -msgid "expect 3 strings for piano pedals, found: %ld" +#: rest-collision.cc:160 rest-collision.cc:205 +msgid "too many colliding rests" msgstr "" -#: piano-pedal-engraver.cc:302 piano-pedal-engraver.cc:313 -#: piano-pedal-performer.cc:93 -#, c-format -msgid "cannot find start of piano pedal: `%s'" +#: episema-engraver.cc:75 +msgid "already have an episema" msgstr "" -#: piano-pedal-engraver.cc:348 -#, c-format -msgid "cannot find start of piano pedal bracket: `%s'" +#: episema-engraver.cc:88 +msgid "cannot find start of episema" msgstr "" -#: program-option-scheme.cc:215 -#, c-format -msgid "no such internal option: %s" +#: episema-engraver.cc:137 +msgid "unterminated episema" msgstr "" -#: property-iterator.cc:74 +#: grob-property.cc:34 #, c-format -msgid "not a grob name, `%s'" +msgid "%d: %s" msgstr "" -#: relative-octave-check.cc:38 -msgid "Failed octave check, got: " +#: grob-property.cc:173 +#, c-format +msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" msgstr "" -#: relocate.cc:44 +#: relocate.cc:54 #, c-format msgid "Setting %s to %s" msgstr "" -#: relocate.cc:64 +#: relocate.cc:74 #, c-format msgid "no such file: %s for %s" msgstr "" -#: relocate.cc:74 relocate.cc:92 +#: relocate.cc:84 relocate.cc:102 #, c-format msgid "no such directory: %s for %s" msgstr "" -#: relocate.cc:84 +#: relocate.cc:94 #, c-format msgid "%s=%s (prepend)\n" msgstr "" -#: relocate.cc:114 +#: relocate.cc:124 #, c-format msgid "not relocating, no %s/ or current/ found under %s" msgstr "" -#: relocate.cc:125 +#: relocate.cc:135 #, c-format msgid "Relocation: compile datadir=%s, new datadir=%s" msgstr "" -#: relocate.cc:138 +#: relocate.cc:148 #, c-format msgid "Relocation: framework_prefix=%s" msgstr "" -#: relocate.cc:179 +#: relocate.cc:189 #, c-format msgid "Relocation: is absolute: argv0=%s" msgstr "" -#: relocate.cc:186 +#: relocate.cc:196 #, c-format msgid "Relocation: from cwd: argv0=%s" msgstr "" -#: relocate.cc:195 +#: relocate.cc:213 #, c-format msgid "" "Relocation: from PATH=%s\n" "argv0=%s" msgstr "" -#: relocate.cc:229 +#: relocate.cc:240 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" msgstr "" -#: relocate.cc:356 +#: relocate.cc:367 #, c-format msgid "Relocation file: %s" msgstr "" -#: relocate.cc:392 +#: relocate.cc:373 source-file.cc:65 +#, c-format +msgid "cannot open file: `%s'" +msgstr "" + +#: relocate.cc:403 #, c-format msgid "Unknown relocation command %s" msgstr "" -#: rest-collision.cc:145 -msgid "cannot resolve rest collision: rest direction not set" +#: translator-group.cc:188 +#, c-format +msgid "cannot find: `%s'" msgstr "" -#: rest-collision.cc:159 rest-collision.cc:204 -msgid "too many colliding rests" +#: phrasing-slur-engraver.cc:157 +msgid "unterminated phrasing slur" msgstr "" -#: rest.cc:148 -#, c-format -msgid "rest `%s' not found" +#: lyric-engraver.cc:176 +msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." msgstr "" -#: score-engraver.cc:67 -#, c-format -msgid "cannot find `%s'" +#: page-breaking.cc:248 +msgid "" +"ignoring min-systems-per-page and max-systems-per-page because systems-per-" +"page was set" msgstr "" -#: score-engraver.cc:69 -msgid "Music font has not been installed properly." +#: page-breaking.cc:253 +msgid "" +"min-systems-per-page is larger than max-systems-per-page, ignoring both " +"values" +msgstr "" + +#: performance.cc:54 +msgid "Track..." msgstr "" -#: score-engraver.cc:71 +#: performance.cc:83 +msgid "MIDI channel wrapped around" +msgstr "" + +#: performance.cc:84 +msgid "remapping modulo 16" +msgstr "" + +#: performance.cc:111 #, c-format -msgid "Search path `%s'" +msgid "MIDI output to `%s'..." msgstr "" -#: score-engraver.cc:73 -msgid "Aborting" +#: tuplet-engraver.cc:107 +msgid "No tuplet to end" msgstr "" -#: score.cc:167 -msgid "already have music in score" +#: gregorian-ligature-engraver.cc:70 +#, c-format +msgid "\\%s ignored" msgstr "" -#: score.cc:168 -msgid "this is the previous music" +#: gregorian-ligature-engraver.cc:75 +#, c-format +msgid "implied \\%s added" msgstr "" -#: score.cc:173 -msgid "errors found, ignoring music expression" +#. ligature may not start with 2nd head of pes or flexa +#: gregorian-ligature-engraver.cc:224 +msgid "cannot apply `\\~' on first head of ligature" msgstr "" -#. FIXME: -#: script-engraver.cc:102 -msgid "do not know how to interpret articulation: " +#. (pitch == prev_pitch) +#: gregorian-ligature-engraver.cc:236 +msgid "cannot apply `\\~' on heads with identical pitch" msgstr "" -#: script-engraver.cc:103 -msgid "scheme encoding: " +#: chord-tremolo-engraver.cc:88 +msgid "No tremolo to end" msgstr "" -#: slur-engraver.cc:82 -#, c-format -msgid "direction of %s invalid: %d" +#: chord-tremolo-engraver.cc:109 +msgid "unterminated chord tremolo" msgstr "" -#: slur-engraver.cc:151 -msgid "unterminated slur" +#: axis-group-engraver.cc:94 +msgid "Axis_group_engraver: vertical group already has a parent" msgstr "" -#: slur-engraver.cc:163 -msgid "cannot end slur" +#: axis-group-engraver.cc:95 +msgid "are there two Axis_group_engravers?" +msgstr "" + +#: axis-group-engraver.cc:96 +msgid "removing this vertical group" msgstr "" -#: slur.cc:359 +#: cluster.cc:120 #, c-format -msgid "Ignoring grob for slur: %s. avoid-slur not set?" +msgid "unknown cluster style `%s'" +msgstr "" + +#: cluster.cc:157 +msgid "junking empty cluster" +msgstr "" + +#: context-property.cc:42 +msgid "need symbol arguments for \\override and \\revert" msgstr "" -#: source-file.cc:79 +#: source-file.cc:85 #, c-format msgid "expected to read %d characters, got %d" msgstr "" -#: spaceable-grob.cc:83 +#: axis-group-interface.cc:631 +msgid "an outside-staff object should have a direction, defaulting to up" +msgstr "" + +#: coherent-ligature-engraver.cc:111 #, c-format -msgid "No spring between column %d and next one" +msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" +msgstr "" + +#: percent-repeat-engraver.cc:148 +msgid "unterminated percent repeat" msgstr "" -#: staff-symbol-engraver.cc:62 -msgid "staff-span event has no direction" +#: note-head.cc:76 +#, c-format +msgid "none of note heads `%s' or `%s' found" msgstr "" -#: stem-engraver.cc:92 -msgid "tremolo duration is too long" +#: relative-octave-check.cc:49 +msgid "Failed octave check, got: " msgstr "" #. FIXME: -#: stem-engraver.cc:129 +#: script-engraver.cc:113 +msgid "do not know how to interpret articulation:" +msgstr "" + +#: script-engraver.cc:114 +msgid " scheme encoding: " +msgstr "" + +#: all-font-metrics.cc:156 #, c-format -msgid "adding note head to incompatible stem (type = %d)" +msgid "cannot find font: `%s'" msgstr "" -#: stem-engraver.cc:131 -msgid "maybe input should specify polyphonic voices" +#: property-iterator.cc:85 +#, c-format +msgid "not a grob name, `%s'" +msgstr "" + +#: bar-check-iterator.cc:84 +#, c-format +msgid "barcheck failed at: %s" msgstr "" -#: stem.cc:105 +#: stem.cc:116 msgid "weird stem size, check for narrow beams" msgstr "" -#: stem.cc:623 +#: stem.cc:657 #, c-format msgid "flag `%s' not found" msgstr "" -#: stem.cc:639 +#: stem.cc:673 #, c-format msgid "flag stroke `%s' not found" msgstr "" -#: system.cc:178 +#: global-context-scheme.cc:96 global-context-scheme.cc:114 +msgid "no music found in score" +msgstr "" + +#: global-context-scheme.cc:104 +msgid "Interpreting music... " +msgstr "" + +#: global-context-scheme.cc:127 #, c-format -msgid "Element count %d." +msgid "elapsed time: %.2f seconds" msgstr "" -#: system.cc:270 +#: translator-group-ctors.cc:40 #, c-format -msgid "Grob count %d" +msgid "fatal error. Couldn't find type: %s" msgstr "" -#: text-spanner-engraver.cc:62 -msgid "cannot find start of text spanner" +#: mensural-ligature.cc:171 +msgid "Mensural_ligature: unexpected case fall-through" msgstr "" -#: text-spanner-engraver.cc:75 -msgid "already have a text spanner" +#: mensural-ligature.cc:233 +msgid "Mensural_ligature: (join_right == 0)" msgstr "" -#: text-spanner-engraver.cc:121 -msgid "unterminated text spanner" +#: page-turn-page-breaking.cc:168 +#, c-format +msgid "page-turn-page-breaking: breaking from %d to %d" msgstr "" -#: tie-engraver.cc:262 -msgid "lonely tie" +#: page-turn-page-breaking.cc:217 +msgid "" +"cannot fit the first page turn onto a single page. Consider setting first-" +"page-number to an even number." msgstr "" -#. -#. Todo: should make typecheck? -#. -#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. -#. -#: time-signature-engraver.cc:64 +#: page-turn-page-breaking.cc:230 #, c-format -msgid "strange time signature found: %d/%d" +msgid "Calculating page and line breaks (%d possible page breaks)..." msgstr "" -#. If there is no such symbol, we default to the numbered style. -#. (Here really with a warning!) -#: time-signature.cc:83 +#: page-turn-page-breaking.cc:300 #, c-format -msgid "time signature symbol `%s' not found; reverting to numbered style" +msgid "break starting at page %d" msgstr "" -#: translator-ctors.cc:53 +#: page-turn-page-breaking.cc:301 #, c-format -msgid "unknown translator: `%s'" +msgid "\tdemerits: %f" msgstr "" -#: translator-group-ctors.cc:29 +#: page-turn-page-breaking.cc:302 #, c-format -msgid "fatal error. Couldn't find type: %s" +msgid "\tsystem count: %d" msgstr "" -#: translator-group.cc:146 +#: page-turn-page-breaking.cc:303 #, c-format -msgid "cannot find: `%s'" +msgid "\tpage count: %d" msgstr "" -#: translator.cc:347 +#: page-turn-page-breaking.cc:304 #, c-format -msgid "Two simultaneous %s events, junking this one" +msgid "\tprevious break: %d" +msgstr "" + +#: lily-parser.cc:106 +msgid "Parsing..." +msgstr "" + +#: lily-parser.cc:134 +msgid "braces do not match" msgstr "" -#: translator.cc:348 +#: score.cc:178 +msgid "already have music in score" +msgstr "" + +#: score.cc:179 +msgid "this is the previous music" +msgstr "" + +#: score.cc:184 +msgid "errors found, ignoring music expression" +msgstr "" + +#: change-iterator.cc:34 #, c-format -msgid "Previous %s event here" +msgid "cannot change `%s' to `%s'" +msgstr "" + +#. FIXME: constant error message. +#: change-iterator.cc:93 +msgid "cannot find context to switch to" +msgstr "" + +#. We could change the current translator's id, but that would make +#. errors hard to catch. +#. +#. last->translator_id_string () = get_change +#. ()->change_to_id_string (); +#: change-iterator.cc:102 +#, c-format +msgid "not changing to same context type: %s" msgstr "" -#: trill-spanner-engraver.cc:85 -msgid "cannot find start of trill spanner" +#. FIXME: uncomprehensable message +#: change-iterator.cc:106 +msgid "none of these in my family" msgstr "" -#: trill-spanner-engraver.cc:98 -msgid "already have a trill spanner" +#. If there is no such symbol, we default to the numbered style. +#. (Here really with a warning!) +#: time-signature.cc:94 +#, c-format +msgid "time signature symbol `%s' not found; reverting to numbered style" msgstr "" -#: tuplet-engraver.cc:96 -msgid "No tuplet to end" +#: grob-interface.cc:68 +#, c-format +msgid "Unknown interface `%s'" msgstr "" -#: vaticana-ligature-engraver.cc:389 +#: grob-interface.cc:79 #, c-format -msgid "" -"ignored prefix (es) `%s' of this head according to restrictions of the " -"selected ligature style" +msgid "Grob `%s' has no interface for property `%s'" msgstr "" -#: vaticana-ligature-engraver.cc:718 +#: open-type-font.cc:44 #, c-format -msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" +msgid "cannot allocate %lu bytes" msgstr "" -#: vaticana-ligature.cc:84 -msgid "flexa-height undefined; assuming 0" +#: open-type-font.cc:48 +#, c-format +msgid "cannot load font table: %s" msgstr "" -#: vaticana-ligature.cc:89 -msgid "ascending vaticana style flexa" +#: open-type-font.cc:53 +#, c-format +msgid "FreeType error: %s" msgstr "" -#: vaticana-ligature.cc:177 -msgid "Vaticana_ligature: zero join (delta_pitch == 0)" +#: open-type-font.cc:111 +#, c-format +msgid "unsupported font format: %s" msgstr "" -#. fixme: be more verbose. -#: volta-engraver.cc:100 -msgid "cannot end volta spanner" +#: open-type-font.cc:113 +#, c-format +msgid "error reading font file %s: %s" msgstr "" -#: volta-engraver.cc:110 -msgid "already have a volta spanner, ending that one prematurely" +#: open-type-font.cc:188 +#, c-format +msgid "FT_Get_Glyph_Name () Freetype error: %s" msgstr "" -#: volta-engraver.cc:114 -msgid "also already have an ended spanner" +#: midi-stream.cc:39 +#, c-format +msgid "cannot open for write: %s: %s" msgstr "" -#: volta-engraver.cc:115 -msgid "giving up" +#: midi-stream.cc:55 +#, c-format +msgid "cannot write to file: `%s'" msgstr "" -#: parser.yy:804 +#: parser.yy:820 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "" -#: parser.yy:828 +#: parser.yy:844 msgid "need \\paper for paper block" msgstr "" -#: parser.yy:1299 +#: parser.yy:1363 +msgid "only \\consists takes non-string argument." +msgstr "" + +#: parser.yy:1376 msgid "Grob name should be alphanumeric" msgstr "" -#: parser.yy:1597 +#: parser.yy:1685 msgid "second argument must be pitch list" msgstr "" -#: parser.yy:1624 parser.yy:1629 parser.yy:2101 +#: parser.yy:1716 parser.yy:1721 parser.yy:2194 msgid "have to be in Lyric mode for lyrics" msgstr "" -#: parser.yy:1726 +#: parser.yy:1818 msgid "expecting string as script definition" msgstr "" -#: parser.yy:1881 parser.yy:1931 +#: parser.yy:1973 parser.yy:2024 #, c-format msgid "not a duration: %d" msgstr "" -#: parser.yy:2055 +#: parser.yy:2148 msgid "have to be in Note mode for notes" msgstr "" -#: parser.yy:2116 +#: parser.yy:2209 msgid "have to be in Chord mode for chords" msgstr "" -#: lexer.ll:179 +#: lexer.ll:190 msgid "stray UTF-8 BOM encountered" msgstr "" -#: lexer.ll:183 +#: lexer.ll:194 msgid "Skipping UTF-8 BOM" msgstr "" -#: lexer.ll:238 +#: lexer.ll:249 #, c-format msgid "Renaming input to: `%s'" msgstr "" -#: lexer.ll:255 +#: lexer.ll:266 msgid "quoted string expected after \\version" msgstr "" -#: lexer.ll:259 +#: lexer.ll:270 msgid "quoted string expected after \\sourcefilename" msgstr "" -#: lexer.ll:263 +#: lexer.ll:274 msgid "integer expected after \\sourcefileline" msgstr "" -#: lexer.ll:276 +#: lexer.ll:287 msgid "EOF found inside a comment" msgstr "" -#: lexer.ll:291 +#: lexer.ll:302 msgid "\\maininput not allowed outside init files" msgstr "" -#: lexer.ll:315 +#: lexer.ll:326 #, c-format msgid "wrong or undefined identifier: `%s'" msgstr "" #. backup rule -#: lexer.ll:324 +#: lexer.ll:335 msgid "end quote missing" msgstr "" -#: lexer.ll:469 +#: lexer.ll:485 msgid "Brace found at end of lyric. Did you forget a space?" msgstr "" -#: lexer.ll:584 +#: lexer.ll:595 msgid "Brace found at end of markup. Did you forget a space?" msgstr "" -#: lexer.ll:688 +#: lexer.ll:699 #, c-format msgid "invalid character: `%c'" msgstr "" -#: lexer.ll:803 +#: lexer.ll:814 lexer.ll:815 #, c-format msgid "unknown escaped string: `\\%s'" msgstr "" -#: lexer.ll:910 +#: lexer.ll:924 lexer.ll:925 #, c-format msgid "file too old: %s (oldest supported: %s)" msgstr "" -#: lexer.ll:911 +#: lexer.ll:925 lexer.ll:926 msgid "consider updating the input with the convert-ly script" msgstr "" -#: lexer.ll:917 +#: lexer.ll:931 lexer.ll:932 #, c-format msgid "program too old: %s (file requires: %s)" msgstr "" -#: backend-library.scm:19 lily.scm:761 ps-to-png.scm:58 +#: documentation-lib.scm:59 #, scheme-format -msgid "Invoking `~a'..." +msgid "Processing ~S..." msgstr "" -#: backend-library.scm:28 +#: documentation-lib.scm:176 #, scheme-format -msgid "`~a' failed (~a)" +msgid "Writing ~S..." msgstr "" -#: backend-library.scm:116 +#: documentation-lib.scm:198 #, scheme-format -msgid "Converting to `~a'..." +msgid "cannot find description for property ~S (~S)" msgstr "" -#. Do not try to guess the name of the png file, -#. GS produces PNG files like BASE-page%d.png. -#: backend-library.scm:128 +#: parser-clef.scm:141 parser-clef.scm:181 #, scheme-format -msgid "Converting to ~a..." +msgid "unknown clef type `~a'" msgstr "" -#: backend-library.scm:166 +#: parser-clef.scm:142 parser-clef.scm:182 #, scheme-format -msgid "Writing header field `~a' to `~a'..." +msgid "supported clefs: ~a" msgstr "" -#: define-context-properties.scm:20 define-grob-properties.scm:10 -#: define-music-properties.scm:10 +#: document-backend.scm:132 #, scheme-format -msgid "symbol ~S redefined" +msgid "pair expected in doc ~s" msgstr "" -#: define-event-classes.scm:119 +#: document-backend.scm:189 #, scheme-format -msgid "event class ~A seems to be unused" +msgid "cannot find interface for property: ~S" msgstr "" -#. should be programming-error -#: define-event-classes.scm:125 +#: document-backend.scm:199 #, scheme-format -msgid "translator listens to nonexisting event class ~A" +msgid "unknown Grob interface: ~S" msgstr "" -#: define-markup-commands.scm:569 -msgid "no systems found in \\score markup, does it have a \\layout block?" +#: framework-eps.scm:108 +#, scheme-format +msgid "Writing ~a..." msgstr "" -#: define-markup-commands.scm:2387 +#: define-music-properties.scm:21 define-grob-properties.scm:21 +#: define-context-properties.scm:31 #, scheme-format -msgid "Cannot find glyph ~a" +msgid "symbol ~S redefined" +msgstr "" + +#: paper.scm:115 +msgid "set-global-staff-size: not in toplevel scope" msgstr "" -#: define-markup-commands.scm:2696 +#: paper.scm:296 #, scheme-format -msgid "not a valid duration string: ~a" +msgid "This is not a \\layout {} object, ~S" msgstr "" -#: define-music-types.scm:670 +#: paper.scm:308 #, scheme-format -msgid "symbol expected: ~S" +msgid "Unknown paper size: ~a" +msgstr "" + +#. TODO: should raise (generic) exception with throw, and catch +#. that in parse-scm.cc +#: paper.scm:323 +msgid "Must use #(set-paper-size .. ) within \\paper { ... }" +msgstr "" + +#: lily.scm:225 +msgid "Using (ice-9 curried-definitions) module\n" msgstr "" -#: define-music-types.scm:673 +#: lily.scm:230 +msgid "Guile 1.8\n" +msgstr "" + +#: lily.scm:290 #, scheme-format -msgid "cannot find music object: ~S" +msgid "cannot find: ~A" msgstr "" -#: define-music-types.scm:692 +#: lily.scm:350 #, scheme-format -msgid "unknown repeat type `~S'" +msgid "wrong type for argument ~a. Expecting ~a, found ~s" msgstr "" -#: define-music-types.scm:693 -msgid "See define-music-types.scm for supported repeats" +#: lily.scm:716 +msgid "Compilation successfully completed" +msgstr "" + +#: lily.scm:717 +msgid "Compilation completed with warnings or errors" msgstr "" -#: document-backend.scm:99 +#: lily.scm:779 #, scheme-format -msgid "pair expected in doc ~s" +msgid "job ~a terminated with signal: ~a" msgstr "" -#: document-backend.scm:154 +#: lily.scm:782 #, scheme-format -msgid "cannot find interface for property: ~S" +msgid "" +"logfile ~a (exit ~a):\n" +"~a" msgstr "" -#: document-backend.scm:164 +#: lily.scm:804 lily.scm:882 #, scheme-format -msgid "unknown Grob interface: ~S" +msgid "failed files: ~S" msgstr "" -#: documentation-lib.scm:49 +#: lily.scm:873 #, scheme-format -msgid "Processing ~S..." +msgid "Redirecting output to ~a..." msgstr "" -#: documentation-lib.scm:165 +#: lily.scm:892 #, scheme-format -msgid "Writing ~S..." +msgid "Invoking `~a'...\n" msgstr "" -#: documentation-lib.scm:187 +#: graphviz.scm:64 #, scheme-format -msgid "cannot find description for property ~S (~S)" +msgid "Writing graph `~a'..." msgstr "" -#: flag-styles.scm:145 +#: framework-svg.scm:84 #, scheme-format -msgid "flag stroke `~a' or `~a' not found" +msgid "Updating font into: ~a" msgstr "" -#: framework-eps.scm:90 +#: layout-beam.scm:40 #, scheme-format -msgid "Writing ~a..." +msgid "Error in beam quanting. Expected (~S,~S) found ~S." msgstr "" -#: framework-ps.scm:277 +#: layout-beam.scm:54 #, scheme-format -msgid "cannot embed ~S=~S" +msgid "Error in beam quanting. Expected ~S 0, found ~S." +msgstr "" + +#: modal-transforms.scm:38 +msgid "'from' pitch not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:42 modal-transforms.scm:75 +msgid "'to' pitch not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:46 +msgid "pitch to be transposed not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:71 +msgid "'around' pitch not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:79 +msgid "pitch to be inverted not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:95 +msgid "negative replication count; ignoring" msgstr "" -#: framework-ps.scm:330 +#: backend-library.scm:29 ps-to-png.scm:68 #, scheme-format -msgid "cannot extract file matching ~a from ~a" +msgid "Invoking `~a'..." msgstr "" -#: framework-ps.scm:347 +#: backend-library.scm:34 #, scheme-format -msgid "do not know how to embed ~S=~S" +msgid "`~a' failed (~a)" msgstr "" -#: framework-ps.scm:378 +#: backend-library.scm:94 #, scheme-format -msgid "do not know how to embed font ~s ~s ~s" +msgid "Converting to `~a'..." msgstr "" -#: framework-ps.scm:748 +#. Do not try to guess the name of the png file, +#. GS produces PNG files like BASE-page%d.png. +#: backend-library.scm:104 #, scheme-format -msgid "cannot convert to ~S" +msgid "Converting to ~a..." msgstr "" -#: framework-ps.scm:771 -msgid "" -"\n" -"The PostScript backend does not support the system-by-system \n" -"output. For that, use the EPS backend instead,\n" -"\n" -" lilypond -dbackend=eps FILE\n" -"\n" -"If have cut & pasted a lilypond fragment from a webpage, be sure\n" -"to only remove anything before\n" -"\n" -" %% ****************************************************************\n" -" %% Start cut-&-pastable-section\n" -" %% ****************************************************************\n" +#: backend-library.scm:142 +#, scheme-format +msgid "Writing header field `~a' to `~a'..." msgstr "" -#: graphviz.scm:53 +#: backend-library.scm:192 #, scheme-format -msgid "Writing graph `~a'..." +msgid "missing stencil expression `~S'" msgstr "" -#: layout-beam.scm:29 +#: to-xml.scm:191 #, scheme-format -msgid "Error in beam quanting. Expected (~S,~S) found ~S." +msgid "assertion failed: ~S" msgstr "" -#: layout-beam.scm:43 +#: chord-entry.scm:49 #, scheme-format -msgid "Error in beam quanting. Expected ~S 0, found ~S." +msgid "Spurious garbage following chord: ~A" msgstr "" -#: layout-page-layout.scm:126 -msgid "Can't fit systems on page -- ignoring between-system-padding" +#: lily-library.scm:758 +msgid "" +"Find the index between @var{start} and @var{end} (an integer)\n" +"which produces the closest match to @var{target-val} if\n" +"applied to function @var{getter}." msgstr "" -#: lily-library.scm:602 +#: lily-library.scm:832 #, scheme-format msgid "unknown unit: ~S" msgstr "" -#: lily-library.scm:636 +#: lily-library.scm:858 lily-library.scm:867 +msgid "warning:" +msgstr "" + +#: lily-library.scm:860 #, scheme-format msgid "no \\version statement found, please add~afor future compatibility" msgstr "" -#: lily-library.scm:644 +#: lily-library.scm:868 msgid "old relative compatibility not used" msgstr "" -#: lily.scm:179 +#: output-ps.scm:48 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "" + +#: output-ps.scm:289 output-svg.scm:550 #, scheme-format -msgid "cannot find: ~A" +msgid "unknown line-cap-style: ~S" msgstr "" -#: lily.scm:228 +#: output-ps.scm:294 output-svg.scm:556 #, scheme-format -msgid "wrong type for argument ~a. Expecting ~a, found ~s" +msgid "unknown line-join-style: ~S" msgstr "" -#: lily.scm:625 +#: output-svg.scm:47 #, scheme-format -msgid "job ~a terminated with signal: ~a" +msgid "undefined: ~S" msgstr "" -#: lily.scm:628 +#: output-svg.scm:151 #, scheme-format -msgid "" -"logfile ~a (exit ~a):\n" -"~a" +msgid "cannot decypher Pango description: ~a" +msgstr "" + +#: output-svg.scm:231 +msgid "Glyph must have a unicode value" msgstr "" -#: lily.scm:653 lily.scm:751 +#: output-svg.scm:283 output-svg.scm:293 #, scheme-format -msgid "failed files: ~S" +msgid "cannot find SVG font ~S" msgstr "" -#: lily.scm:741 +#: flag-styles.scm:148 #, scheme-format -msgid "Redirecting output to ~a..." +msgid "flag stroke `~a' or `~a' not found" msgstr "" -#: ly-syntax-constructors.scm:40 -msgid "Music head function must return Music object" +#: define-note-names.scm:962 +msgid "Select note names language." msgstr "" -#: ly-syntax-constructors.scm:154 +#: define-note-names.scm:969 #, scheme-format -msgid "Invalid property operation ~a" +msgid "Using `~a' note names..." msgstr "" -#: markup.scm:204 +#: define-note-names.scm:972 #, scheme-format -msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" +msgid "Could not find language `~a'. Ignoring." msgstr "" -#: markup.scm:210 +#: define-music-types.scm:740 #, scheme-format -msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." +msgid "symbol expected: ~S" msgstr "" -#: markup.scm:274 +#: define-music-types.scm:743 #, scheme-format -msgid "Not a markup command: ~A" +msgid "cannot find music object: ~S" msgstr "" -#: music-functions.scm:228 -msgid "More alternatives than repeats. Junking excess alternatives" +#: define-music-types.scm:762 +#, scheme-format +msgid "unknown repeat type `~S'" +msgstr "" + +#: define-music-types.scm:763 +msgid "See define-music-types.scm for supported repeats" msgstr "" -#: music-functions.scm:240 +#: translation-functions.scm:341 #, scheme-format -msgid "invalid tremolo repeat count: ~a" +msgid "Negative fret for pitch ~a on string ~a" +msgstr "" + +#: translation-functions.scm:385 +#, scheme-format +msgid "No open string for pitch ~a" +msgstr "" + +#: translation-functions.scm:400 +#, scheme-format +msgid "Requested string for pitch requires negative fret: string ~a pitch ~a" +msgstr "" + +#: translation-functions.scm:401 +msgid "Ignoring string request." +msgstr "" + +#: translation-functions.scm:414 +#, scheme-format +msgid "No string for pitch ~a (given frets ~a)" +msgstr "" + +#: translation-functions.scm:515 +#, scheme-format +msgid "" +"No label for fret ~a (on string ~a);\n" +"only ~a fret labels provided" +msgstr "" + +#: framework-ps.scm:250 +#, scheme-format +msgid "cannot embed ~S=~S" +msgstr "" + +#: framework-ps.scm:293 +#, scheme-format +msgid "cannot extract file matching ~a from ~a" +msgstr "" + +#: framework-ps.scm:311 +#, scheme-format +msgid "do not know how to embed ~S=~S" msgstr "" -#: music-functions.scm:248 +#: framework-ps.scm:336 #, scheme-format -msgid "expecting 2 elements for chord tremolo, found ~a" +msgid "do not know how to embed font ~s ~s ~s" +msgstr "" + +#: framework-ps.scm:669 +msgid "" +"\n" +"The PostScript backend does not support the\n" +"system-by-system output. For that, use the EPS backend instead,\n" +"\n" +" lilypond -dbackend=eps FILE\n" +"\n" +"If have cut & pasted a lilypond fragment from a webpage, be sure\n" +"to only remove anything before\n" +"\n" +" %% ****************************************************************\n" +" %% Start cut-&-pastable-section\n" +" %% ****************************************************************\n" +msgstr "" + +#: music-functions.scm:268 +msgid "More alternatives than repeats. Junking excess alternatives" +msgstr "" + +#: music-functions.scm:297 +#, scheme-format +msgid "invalid tremolo repeat count: ~a" msgstr "" -#: music-functions.scm:575 +#: music-functions.scm:618 #, scheme-format msgid "music expected: ~S" msgstr "" #. FIXME: uncomprehensable message -#: music-functions.scm:625 +#: music-functions.scm:662 #, scheme-format msgid "Bar check failed. Expect to be at ~a, instead at ~a" msgstr "" -#: music-functions.scm:793 +#: music-functions.scm:846 #, scheme-format msgid "cannot find quoted music: `~S'" msgstr "" -#: music-functions.scm:1198 +#: music-functions.scm:982 +msgid "Add @var{octave-shift} to the octave of @var{pitch}." +msgstr "" + +#: music-functions.scm:1037 +#, scheme-format +msgid "Unknown octaveness type: ~S " +msgstr "" + +#: music-functions.scm:1038 +msgid "Defaulting to 'any-octave." +msgstr "" + +#: music-functions.scm:1378 #, scheme-format msgid "unknown accidental style: ~S" msgstr "" -#: output-ps.scm:294 -msgid "utf-8-string encountered in PS backend" +#: define-event-classes.scm:79 +msgid "All classes must be the last in their matrilineal line." msgstr "" -#: output-svg.scm:45 +#: define-event-classes.scm:83 +msgid "" +"All classes must have a well-defined pedigree in the existing class " +"hierarchy." +msgstr "" + +#: define-event-classes.scm:149 #, scheme-format -msgid "undefined: ~S" +msgid "event class ~A seems to be unused" msgstr "" -#: output-svg.scm:135 +#. should be programming-error +#: define-event-classes.scm:155 #, scheme-format -msgid "cannot decypher Pango description: ~a" +msgid "translator listens to nonexisting event class ~A" msgstr "" -#: paper.scm:104 -msgid "set-global-staff-size: not in toplevel scope" +#: markup.scm:223 +#, scheme-format +msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" msgstr "" -#: paper.scm:244 +#: markup.scm:229 #, scheme-format -msgid "This is not a \\layout {} object, ~S" +msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." msgstr "" -#: paper.scm:256 +#: markup.scm:292 #, scheme-format -msgid "Unknown paper size: ~a" +msgid "Not a markup command: ~A" msgstr "" -#. TODO: should raise (generic) exception with throw, and catch -#. that in parse-scm.cc -#: paper.scm:271 -msgid "Must use #(set-paper-size .. ) within \\paper { ... }" +#: ps-to-png.scm:74 +#, scheme-format +msgid "~a exited with status: ~S" msgstr "" -#: parser-clef.scm:129 +#: define-markup-commands.scm:803 +msgid "no systems found in \\score markup, does it have a \\layout block?" +msgstr "" + +#: define-markup-commands.scm:2404 #, scheme-format -msgid "unknown clef type `~a'" +msgid "Cannot find glyph ~a" msgstr "" -#: parser-clef.scm:130 +#: define-markup-commands.scm:2830 #, scheme-format -msgid "supported clefs: ~a" +msgid "no brace found for point size ~S " msgstr "" -#: ps-to-png.scm:64 +#: define-markup-commands.scm:2831 #, scheme-format -msgid "~a exited with status: ~S" +msgid "defaulting to ~S pt" msgstr "" -#: to-xml.scm:180 +#: define-markup-commands.scm:2984 #, scheme-format -msgid "assertion failed: ~S" +msgid "not a valid duration string: ~a" +msgstr "" + +#: ly-syntax-constructors.scm:51 +msgid "Music head function must return Music object" +msgstr "" + +#: ly-syntax-constructors.scm:177 +#, scheme-format +msgid "Invalid property operation ~a" msgstr "" diff --git a/po/nl.po b/po/nl.po index 8edc74bc82..b8edb8af4f 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,5 +1,6 @@ # nl.po -- GNU LilyPond's dutch language file -# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Jan Nieuwenhuizen , Han-Wen Nienhuys . +# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Jan Nieuwenhuizen , Han-Wen Nienhuys . +# This file is distributed under the same license as the lilypond package. # Jan Nieuwenhuizen , 1998. # Han-Wen Nienhuys , 1998. # @@ -9,20 +10,74 @@ # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.11.22\n" -"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2007-04-28 12:03+0200\n" -"PO-Revision-Date: 2007-05-29 15:01+0200\n" +"Project-Id-Version: lilypond 2.13.10\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-01 14:40+0100\n" +"PO-Revision-Date: 2011-03-01 22:52+0100\n" "Last-Translator: Jan Nieuwenhuizen \n" "Language-Team: Dutch \n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Date: 2001-05-09 23:29+0200\n" "From: \n" -"Xgettext-Options: --c++ --default-domain=lilypond --join --output-dir=../po --add-comments --keyword=_\n" +"Xgettext-Options: --c++ --default-domain=lilypond --join --output-dir=../po " +"--add-comments --keyword=_\n" "Files: bow.cc int.cc\n" +#: book_base.py:24 +#, python-format +msgid "file not found: %s" +msgstr "bestand niet gevonden: %s" + +#: book_base.py:161 +msgid "Output function not implemented" +msgstr "" + +#: book_latex.py:156 +msgid "cannot find \\begin{document} in LaTeX document" +msgstr "kan \\begin{document} niet vinden in LaTeX dokument" + +#: book_snippets.py:519 +#, python-format +msgid "deprecated ly-option used: %s=%s" +msgstr "verouderde ly-optie gebruikt: %s=%s" + +#: book_snippets.py:521 +#, python-format +msgid "compatibility mode translation: %s=%s" +msgstr "compatibiliteitsmodus vertaling: %s=%s" + +#: book_snippets.py:524 +#, python-format +msgid "deprecated ly-option used: %s" +msgstr "verouderde ly-optie gebruikt: %s" + +#: book_snippets.py:526 +#, python-format +msgid "compatibility mode translation: %s" +msgstr "compatibiliteitsmodus vertaling: %s" + +#: book_snippets.py:544 +#, python-format +msgid "ignoring unknown ly option: %s" +msgstr "negeren van onbekende ly optie: %s" + +#: book_snippets.py:736 +#, python-format +msgid "Opening filter `%s'\n" +msgstr "Open filter `%s'\n" + +#: book_snippets.py:756 +#, python-format +msgid "`%s' failed (%d)" +msgstr "`%s' gefaald (%d)" + +#: book_snippets.py:757 +msgid "The error log is as follows:" +msgstr "De foutlog is als volgt:" + #: convertrules.py:12 #, python-format msgid "Not smart enough to convert %s" @@ -30,621 +85,1473 @@ msgstr "Niet slim genoeg om %s te converteren" #: convertrules.py:13 msgid "Please refer to the manual for details, and update manually." -msgstr "Zie de handleiding voor de details, en actualiseer handmatic." +msgstr "Zie de handleiding voor de details, en actualiseer handmatig." #: convertrules.py:14 #, python-format msgid "%s has been replaced by %s" msgstr "%s is vervangen door %s" -#: convertrules.py:2408 +#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66 +#: input.cc:109 +#, c-format, python-format +msgid "warning: %s" +msgstr "waarschuwing: %s" + +#: convertrules.py:49 convertrules.py:99 +msgid "\\header { key = concat + with + operator }" +msgstr "" + +#: convertrules.py:58 +#, python-format +msgid "deprecated %s" +msgstr "verouderd %s" + +#: convertrules.py:70 +msgid "deprecated \\textstyle, new \\key syntax" +msgstr "" + +#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084 +#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862 +msgid "bump version for release" +msgstr "" + +#: convertrules.py:103 +msgid "new \\header format" +msgstr "" + +#: convertrules.py:132 +msgid "\\translator syntax" +msgstr "" + +#: convertrules.py:184 +msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative" +msgstr "" + +#: convertrules.py:216 convertrules.py:699 convertrules.py:1383 +#: convertrules.py:2378 +#, python-format +msgid "deprecate %s" +msgstr "" + +#: convertrules.py:290 +#, python-format +msgid "deprecate %s " +msgstr "" + +#: convertrules.py:319 +msgid "new \\notenames format" +msgstr "" + +#: convertrules.py:337 +msgid "new tremolo format" +msgstr "" + +#: convertrules.py:342 +msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver" +msgstr "" + +#: convertrules.py:395 +msgid "change property definiton case (eg. onevoice -> oneVoice)" +msgstr "" + +#: convertrules.py:457 +msgid "new \\textscript markup text" +msgstr "" + +#: convertrules.py:530 +#, python-format +msgid "identifier names: %s" +msgstr "identifier namen: `%s'" + +#: convertrules.py:569 +msgid "point-and-click argument changed to procedure." +msgstr "" + +#: convertrules.py:611 +msgid "semicolons removed" +msgstr "" + +#. 40 ? +#: convertrules.py:654 +#, python-format +msgid "%s property names" +msgstr "" + +#: convertrules.py:724 +msgid "automaticMelismata turned on by default" +msgstr "" + +#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942 +#: convertrules.py:2189 +#, python-format +msgid "remove %s" +msgstr "verwijder %s" + +#: convertrules.py:1001 convertrules.py:1005 +msgid "cluster syntax" +msgstr "" + +#: convertrules.py:1014 +msgid "new Pedal style syntax" +msgstr "" + +#: convertrules.py:1273 +msgid "" +"New relative mode,\n" +"Postfix articulations, new text markup syntax, new chord syntax." +msgstr "" + +#: convertrules.py:1286 +msgid "Remove - before articulation" +msgstr "" + +#: convertrules.py:1324 +#, python-format +msgid "%s misspelling" +msgstr "" + +#: convertrules.py:1346 +msgid "Swap < > and << >>" +msgstr "" + +#: convertrules.py:1349 +msgid "attempting automatic \\figures conversion. Check results!" +msgstr "" + +#: convertrules.py:1400 +msgid "Use Scheme code to construct arbitrary note events." +msgstr "" + +#: convertrules.py:1407 +msgid "" +"use symbolic constants for alterations,\n" +"remove \\outputproperty, move ly:verbose into ly:get-option" +msgstr "" + +#: convertrules.py:1432 +#, python-format +msgid "" +"\\outputproperty found,\n" +"Please hand-edit, using\n" +"\n" +" \\applyoutput #(outputproperty-compatibility %s '%s )\n" +"\n" +"as a substitution text." +msgstr "" + +#: convertrules.py:1446 +msgid "" +"The alteration field of Scheme pitches was multiplied by 2\n" +"to support quarter tone accidentals. You must update the following " +"constructs manually:\n" +"\n" +"* calls of ly:make-pitch and ly:pitch-alteration\n" +"* keySignature settings made with \\property\n" +msgstr "" + +#: convertrules.py:1493 +msgid "removal of automaticMelismata; use melismaBusyProperties instead." +msgstr "" + +#: convertrules.py:1600 +msgid "\\partcombine syntax change to \\newpartcombine" +msgstr "" + +#: convertrules.py:1628 +msgid "" +"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n" +"Harmonic notes. Thread context removed. Lyrics context removed." +msgstr "" + +#: convertrules.py:1632 +msgid "Drums found. Enclose drum notes in \\drummode" +msgstr "" + +#: convertrules.py:1643 convertrules.py:1650 convertrules.py:1661 +#, python-format +msgid "" +"\n" +"%s found. Check file manually!\n" +msgstr "" + +#: convertrules.py:1643 +msgid "Drum notation" +msgstr "" + +#: convertrules.py:1702 +msgid "new syntax for property settings:" +msgstr "" + +#: convertrules.py:1728 +msgid "Property setting syntax in \\translator{ }" +msgstr "" + +#: convertrules.py:1767 +msgid "Scheme grob function renaming" +msgstr "" + +#: convertrules.py:1780 +#, python-format +msgid "use %s" +msgstr "gebruik %s" + +#: convertrules.py:1797 +msgid "More Scheme function renaming" +msgstr "" + +#: convertrules.py:1924 +msgid "" +"Page layout has been changed, using paper size and margins.\n" +"textheight is no longer used.\n" +msgstr "" + +#: convertrules.py:2010 +msgid "" +"\\foo -> \\foomode (for chords, notes, etc.)\n" +"fold \\new FooContext \\foomode into \\foo." +msgstr "" + +#: convertrules.py:2048 +msgid "" +"staff size should be changed at top-level\n" +"with\n" +"\n" +" #(set-global-staff-size )\n" +"\n" +msgstr "" + +#: convertrules.py:2068 +msgid "regularize other identifiers" +msgstr "" + +#: convertrules.py:2136 +msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click" +msgstr "" + +#: convertrules.py:2149 msgid "LilyPond source must be UTF-8" msgstr "LilyPond bron moet UTF-8 zijn" -#: convertrules.py:2411 +#: convertrules.py:2152 msgid "Try the texstrings backend" msgstr "Probeer het textstring backend" -#: convertrules.py:2414 +#: convertrules.py:2155 #, python-format msgid "Do something like: %s" msgstr "Doe iets als: %s" -#: convertrules.py:2417 +#: convertrules.py:2158 msgid "Or save as UTF-8 in your editor" msgstr "Of bewaar als UTF-8 in je editor" -#: fontextract.py:26 +#: convertrules.py:2212 +msgid "warn about auto beam settings" +msgstr "" + +#: convertrules.py:2217 +msgid "auto beam settings" +msgstr "" + +#: convertrules.py:2219 +msgid "" +"\n" +"Auto beam settings must now specify each interesting moment in a measure\n" +"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n" +msgstr "" + +#: convertrules.py:2333 +msgid "verticalAlignmentChildCallback has been deprecated" +msgstr "" + +#: convertrules.py:2337 +msgid "Remove callbacks property, deprecate XY-extent-callback." +msgstr "" + +#: convertrules.py:2358 +msgid "Use grob closures iso. XY-offset-callbacks." +msgstr "" + +#: convertrules.py:2420 +msgid "foobar -> foo-bar for \\paper, \\layout" +msgstr "" + +#: convertrules.py:2530 +msgid "deprecate \\tempo in \\midi" +msgstr "" + +#: convertrules.py:2583 +msgid "deprecate cautionary-style. Use AccidentalCautionary properties" +msgstr "" + +#: convertrules.py:2596 +msgid "Rename accidental glyphs, use glyph-name-alist." +msgstr "" + +#: convertrules.py:2651 +msgid "edge-text settings for TextSpanner." +msgstr "" + +#: convertrules.py:2652 +#, python-format +msgid "" +"Use\n" +"\n" +"%s" +msgstr "" +"Gebruik:\n" +"\n" +"%s" + +#: convertrules.py:2685 +msgid "Use the `alignment-offsets' sub-property of\n" +msgstr "" + +#: convertrules.py:2686 +msgid "NonMusicalPaperColumn #'line-break-system-details\n" +msgstr "" + +#: convertrules.py:2687 +msgid "to set fixed distances between staves.\n" +msgstr "" + +#: convertrules.py:2699 +msgid "Use #'style not #'dash-fraction to select solid/dashed lines." +msgstr "" + +#: convertrules.py:2705 +msgid "all settings related to dashed lines.\n" +msgstr "" + +#: convertrules.py:2706 +msgid "Use \\override ... #'style = #'line for solid lines and\n" +msgstr "" + +#: convertrules.py:2707 +msgid "\t\\override ... #'style = #'dashed-line for dashed lines." +msgstr "" + +#: convertrules.py:2743 +msgid "" +"metronomeMarkFormatter uses text markup as second argument,\n" +"fret diagram properties moved to fret-diagram-details." +msgstr "" + +#: convertrules.py:2748 +msgid "metronomeMarkFormatter got an additional text argument.\n" +msgstr "" + +#: convertrules.py:2749 +#, python-format +msgid "" +"The function assigned to Score.metronomeMarkFunction now uses the signature\n" +"%s" +msgstr "" + +#: convertrules.py:2812 +msgid "\\put-adjacent argument order.\n" +msgstr "" + +#: convertrules.py:2813 +msgid "Axis and direction now come before markups:\n" +msgstr "" + +#: convertrules.py:2814 +msgid "\\put-adjacent axis dir markup markup." +msgstr "" + +#: convertrules.py:2845 +msgid "re-definition of InnerStaffGroup.\n" +msgstr "" + +#: convertrules.py:2851 +msgid "re-definition of InnerChoirStaff.\n" +msgstr "" + +#: convertrules.py:2861 +msgid "Syntax changes for \\addChordShape and \\chord-shape" +msgstr "" + +#: convertrules.py:2866 +msgid "stringTuning must be added to addChordShape call.\n" +msgstr "" + +#: convertrules.py:2872 +msgid "stringTuning must be added to chord-shape call.\n" +msgstr "" + +#: convertrules.py:2879 +msgid "Remove oldaddlyrics" +msgstr "" + +#: convertrules.py:2883 +msgid "" +"oldaddlyrics is no longer supported. \n" +" Use addlyrics or lyrsicsto instead.\n" +msgstr "" + +#: convertrules.py:2889 +msgid "" +"keySignature property not reversed any more\n" +"MIDI 47: orchestral strings -> orchestral harp" +msgstr "" + +#: convertrules.py:2894 +msgid "The alist for Staff.keySignature is no longer in reversed order.\n" +msgstr "" + +#: convertrules.py:2900 +msgid "" +"\\bar \".\" now produces a thick barline\n" +"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n" +"Dash parameters for slurs and ties are now in dash-definition" +msgstr "" + +#: convertrules.py:2906 +msgid "\\bar \".\" now produces a thick barline.\n" +msgstr "" + +#: convertrules.py:2912 +msgid "Dash parameters for slurs and ties are now in 'dash-details.\n" +msgstr "" + +#: convertrules.py:2917 +msgid "" +"Autobeaming rules have changed. override-auto-beam-setting and\n" +"revert-auto-beam-setting have been eliminated.\n" +"\\overrideBeamSettings has been added.\n" +"beatGrouping has been eliminated.\n" +"Different settings for vertical layout.\n" +"ly:system-start-text::print -> system-start-text::print\n" +"Beam #'thickness -> Beam #'beam-thickness\n" +"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n" +"ly:ambitus::print -> ambitus::print\n" +"Explicit dynamics context definition from `Piano centered dynamics'\n" +"template replaced by new `Dynamics' context." +msgstr "" + +#: convertrules.py:2931 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now overriden with \\overrideBeamSettings.\n" +msgstr "" + +#: convertrules.py:2936 +msgid "" +"override-auto-beam-setting.\n" +" Autobeam settings are now reverted with \\revertBeamSettings.\n" +msgstr "" + +#: convertrules.py:2941 +msgid "" +"beatGrouping. \n" +" beatGrouping with a specified context must now be accomplished with\n" +" \\overrideBeamSettings.\n" +msgstr "" + +#: convertrules.py:2947 +msgid "" +"alignment-offsets has been changed to alignment-distances: you must now " +"specify the distances between staves rather than the offset of staves.\n" +msgstr "" + +#: convertrules.py:2958 +msgid "" +"Remove obsolete engravers/translators: Note_swallow_translator,\n" +"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n" +"Swallow_performer and String_number_engraver.\n" +"New vertical spacing variables." +msgstr "" + +#: convertrules.py:2989 +msgid "" +"minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a " +"VerticalAxisGroup.\n" +msgstr "" + +#: convertrules.py:2995 +msgid "Unify fetaNumber and fetaDynamic encodings" +msgstr "" + +#: convertrules.py:3000 +msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves" +msgstr "" + +#: convertrules.py:3011 +msgid "\\cresc etc. are now postfix operators" +msgstr "" + +#: convertrules.py:3017 +msgid "" +"Eliminate beamSettings, beatLength, \\setBeatGrouping, " +"\\overrideBeamSettings and \\revertBeamSettings.\n" +"\"accordion.accEtcbase\" -> \"accordion.etcbass\"" +msgstr "" + +#: convertrules.py:3035 +msgid "" +"\\overrideBeamSettings. Use \\set beamExceptions or " +"\\overrideTimeSignatureSettings.\n" +msgstr "" + +#: convertrules.py:3039 +msgid "" +"\\revertBeamSettings. Use \\set beamExceptions or " +"\\revertTimeSignatureSettings.\n" +msgstr "" + +#: convertrules.py:3043 +msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n" +msgstr "" + +#: convertrules.py:3047 +msgid "beatLength. Use baseMoment and beatStructure.\n" +msgstr "" + +#: convertrules.py:3051 +msgid "setbeatGrouping. Use baseMoment and beatStructure.\n" +msgstr "" + +#: convertrules.py:3056 +msgid "" +"Woodwind diagrams: Move size, thickness, and graphic from argument list to " +"properties.\n" +"Deprecate negative dash-period for hidden lines: use #'style = #'none " +"instead." +msgstr "" + +#: convertrules.py:3061 +msgid "" +"woodwind-diagrams. Move size, thickness, and graphic to properties. " +"Argument should be just the key list.\n" +msgstr "" + +#: convertrules.py:3069 +msgid "" +"Rename vertical spacing variables.\n" +"Add fretboard-table argument to savePredefinedFretboard." +msgstr "" + +#: convertrules.py:3087 +msgid "Rename vertical spacing grob properties." +msgstr "" + +#: convertrules.py:3103 +msgid "Remove \\paper variables head-separation and foot-separation." +msgstr "" + +#: convertrules.py:3108 +msgid "Adjust settings for top-system-spacing instead.\n" +msgstr "" + +#: convertrules.py:3113 +msgid "Adjust settings for last-bottom-spacing instead.\n" +msgstr "" + +#: convertrules.py:3119 +msgid "" +"Rename space to basic-distance in various spacing alists.\n" +"Remove HarmonicParenthesesItem grob." +msgstr "" + +#: convertrules.py:3127 +msgid "HarmonicParenthesesItem has been eliminated.\n" +msgstr "" + +#: convertrules.py:3128 +msgid "Harmonic parentheses are part of the TabNoteHead grob.\n" +msgstr "" + +#: convertrules.py:3133 +msgid "" +"Remove context from overrideTimeSignatureSettings and " +"revertTimeSignatureSettings.\n" +msgstr "" + +#: convertrules.py:3140 +msgid "" +"Change stringTunings from a list of semitones to a list of pitches.\n" +"Change tenor and baritone ukulele names in string tunings.\n" +"Generate messages for manual conversion of vertical spacing if required." +msgstr "" + +#: convertrules.py:3180 +msgid "Vertical spacing changes might affect user-defined contexts. " +msgstr "" + +#: convertrules.py:3185 +msgid "Replace bar-size with bar-extent." +msgstr "" + +#: convertrules.py:3197 +msgid "Woodwind diagrams: Changes to the clarinet diagram." +msgstr "" + +#: convertrules.py:3201 +msgid "" +"woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of " +"instrument.\n" +msgstr "" + +#: fontextract.py:25 #, python-format msgid "Scanning %s" msgstr "Scannen %s" -#: fontextract.py:71 +#: fontextract.py:70 #, python-format msgid "Extracted %s" msgstr "Geëxtraheerd %s" -#: fontextract.py:86 +#: fontextract.py:85 #, python-format msgid "Writing fonts to %s" msgstr "Schrijven van fonts naar %s" -#: lilylib.py:85 lilylib.py:136 +#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115 +#: input.cc:123 +#, c-format, python-format +msgid "error: %s" +msgstr "fout: %s" + +#: lilylib.py:124 lilylib.py:175 #, python-format msgid "Invoking `%s'" -msgstr "Inroepen van `%s'" +msgstr "Aanroepen van `%s'" -#: lilylib.py:87 lilylib.py:138 +#: lilylib.py:126 lilylib.py:177 #, python-format msgid "Running %s..." msgstr "Draaien van %s..." -#: lilylib.py:203 +#: lilylib.py:253 #, python-format msgid "Usage: %s" msgstr "Gebruik: %s" -#: abc2ly.py:1342 convert-ly.py:71 lilypond-book.py:110 midi2ly.py:858 +#: musicexp.py:216 musicexp.py:221 +msgid "Language does not support microtones contained in the piece" +msgstr "" + +#: musicexp.py:483 +msgid "Tuplet brackets of curved shape are not correctly implemented" +msgstr "" + +#: musicexp.py:669 +#, python-format +msgid "unable to set the music %(music)s for the repeat %(repeat)s" +msgstr "" + +#: musicexp.py:678 +msgid "encountered repeat without body" +msgstr "" + +#. no self.elements! +#: musicexp.py:848 +#, python-format +msgid "Grace note with no following music: %s" +msgstr "" + +#: musicexp.py:1010 +#, python-format +msgid "Invalid octave shift size found: %s. Using no shift." +msgstr "" + +#: musicexp.py:1468 +#, python-format +msgid "Unable to convert alteration %s to a lilypond expression" +msgstr "" + +#. TODO: Handle pieces without a time signature! +#: musicxml.py:358 +msgid "Senza-misura time signatures are not yet supported!" +msgstr "" + +#: musicxml.py:376 +msgid "Unable to interpret time signature! Falling back to 4/4." +msgstr "" + +#: musicxml.py:432 +#, python-format +msgid "" +"Key alteration octave given for a non-existing alteration nr. %s, available " +"numbers: %s!" +msgstr "" + +#: musicxml.py:520 +#, python-format +msgid "Unable to find instrument for ID=%s\n" +msgstr "" + +#: abc2ly.py:1373 convert-ly.py:87 lilypond-book.py:122 midi2ly.py:969 #, python-format msgid "%s [OPTION]... FILE" msgstr "%s [OPTIE]... BESTAND" -#: abc2ly.py:1344 +#: abc2ly.py:1374 #, python-format msgid "" "abc2ly converts ABC music files (see\n" -"%s) to LilyPond input." +"%s) to LilyPond input.\n" msgstr "" "abc2ly converteert ABC muziekbestanden (zie\n" -"%s) naar LilyPond invoer." +"%s) naar LilyPond invoer.\n" -#: abc2ly.py:1348 etf2ly.py:1184 midi2ly.py:874 +#: abc2ly.py:1382 convert-ly.py:94 etf2ly.py:1206 lilypond-book.py:212 +#: midi2ly.py:1011 musicxml2ly.py:2580 main.cc:168 +msgid "show version number and exit" +msgstr "toon versienummer en sluit af" + +#: abc2ly.py:1386 convert-ly.py:98 etf2ly.py:1202 lilypond-book.py:140 +#: midi2ly.py:984 musicxml2ly.py:2562 main.cc:157 +msgid "show this help and exit" +msgstr "toon deze hulp en sluit af" + +#: abc2ly.py:1388 etf2ly.py:1207 midi2ly.py:992 msgid "write output to FILE" msgstr "schrijf uitvoer naar BESTAND" -#: abc2ly.py:1350 -msgid "be strict about succes" -msgstr "wees strict over succes" +#: abc2ly.py:1390 +msgid "be strict about success" +msgstr "wees strikt over succes" -#: abc2ly.py:1352 +#: abc2ly.py:1392 msgid "preserve ABC's notion of beams" msgstr "behoud ABC's notie van waardestrepen" -#: abc2ly.py:1354 convert-ly.py:103 etf2ly.py:1192 lilypond-book.py:161 -#: midi2ly.py:900 musicxml2ly.py:506 -msgid "Report bugs via" +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: abc2ly.py:1395 convert-ly.py:144 etf2ly.py:1216 lilypond-book.py:234 +#: midi2ly.py:1024 musicxml2ly.py:2648 main.cc:281 +#, c-format, python-format +msgid "Report bugs via %s" msgstr "" -"Meld fouten in het programma via %;\n" -"meld onjuistheden in de vertaling aan of ." +"Meld fouten in het programma aan %s;\n" +"meld onjuistheden in de vertaling aan of ." -#: convert-ly.py:32 +#: convert-ly.py:44 msgid "" "Update LilyPond input to newer version. By default, update from the\n" "version taken from the \\version command, to the current LilyPond version." msgstr "" "Actualiseer LilyPond invoer naar nieuwere versie. Standaard, actualiseer\n" -"vanaf versie uit de \\versie uitdrukking, naar de huidige LilyPond versie." +"vanaf versie uit het \\version commando, naar de huidige LilyPond versie." -#: convert-ly.py:34 lilypond-book.py:59 +#: convert-ly.py:46 lilypond-book.py:82 msgid "Examples:" msgstr "Voorbeelden:" -#: convert-ly.py:47 lilypond-book.py:83 warn.cc:48 input.cc:90 -#, c-format, python-format -msgid "warning: %s" -msgstr "waarschuwing: %s" - -#: convert-ly.py:50 lilypond-book.py:86 warn.cc:54 input.cc:96 input.cc:104 -#, c-format, python-format -msgid "error: %s" -msgstr "fout: %s" +#: convert-ly.py:81 etf2ly.py:1189 lilypond-book.py:116 midi2ly.py:90 +#, python-format +msgid "Copyright (c) %s by" +msgstr "Copyright (c) %s" -#: convert-ly.py:66 etf2ly.py:1174 lilypond-book.py:106 midi2ly.py:87 +#: convert-ly.py:83 etf2ly.py:1191 lilypond-book.py:118 midi2ly.py:92 msgid "Distributed under terms of the GNU General Public License." msgstr "Verspreid onder de voorwaarden van de GNU General Public License." -#: convert-ly.py:67 etf2ly.py:1175 lilypond-book.py:107 midi2ly.py:88 +#: convert-ly.py:84 etf2ly.py:1192 lilypond-book.py:119 midi2ly.py:93 msgid "It comes with NO WARRANTY." msgstr "Er is GEEN GARANTIE." -#: convert-ly.py:77 convert-ly.py:97 +#: convert-ly.py:102 convert-ly.py:135 msgid "VERSION" msgstr "VERSIE" -#: convert-ly.py:79 +#: convert-ly.py:104 msgid "start from VERSION [default: \\version found in file]" msgstr "begin bij VERSIE [standaard: \\version gevonden in bestand]" -#: convert-ly.py:82 +#: convert-ly.py:107 msgid "edit in place" msgstr "bewerk bestand ter plekke" -#: convert-ly.py:85 +#: convert-ly.py:111 msgid "do not add \\version command if missing" msgstr "voeg geen \\version commando toe als het niet aanwezig is" -#: convert-ly.py:91 -msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]" -msgstr "toon regels [standaard: --from=0, --to=@TOPLEVEL_VERSION@]" +#: convert-ly.py:117 +#, python-format +msgid "force updating \\version number to %s" +msgstr "" + +#: convert-ly.py:123 +msgid "only update \\version number if file is modified" +msgstr "" + +#: convert-ly.py:129 +#, python-format +msgid "show rules [default: -f 0, -t %s]" +msgstr "toon regels [standaard: - 0, -t %s]" + +#: convert-ly.py:134 +#, python-format +msgid "convert to VERSION [default: %s]" +msgstr "converteer naar VERSIE [standaard: %s]" -#: convert-ly.py:96 -msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]" -msgstr "converteer naar VERSIE [standaard: @TOPLEVEL_VERSION@]" +#: convert-ly.py:139 etf2ly.py:1210 lilypond-book.py:215 midi2ly.py:1012 +#: main.cc:170 +msgid "show warranty and copyright" +msgstr "toon garantie en auteursrechten" -#: convert-ly.py:144 +#: convert-ly.py:184 msgid "Applying conversion: " msgstr "toepassen van conversie: " -#: convert-ly.py:157 +#: convert-ly.py:197 msgid "Error while converting" msgstr "%s: fout tijdens converteren" -#: convert-ly.py:159 -msgid "Stopping at last succesful rule" +#: convert-ly.py:199 +msgid "Stopping at last successful rule" msgstr "Stop na de laatste succesvolle regel" -#: convert-ly.py:181 +#: convert-ly.py:224 #, python-format msgid "Processing `%s'... " msgstr "Verwerken van `%s'..." -#: convert-ly.py:268 relocate.cc:363 source-file.cc:54 -#, c-format, python-format -msgid "cannot open file: `%s'" -msgstr "kan bestand niet openen: `%s'" +#: convert-ly.py:332 +#, python-format +msgid "%s: Unable to open file" +msgstr "%s: Kan bestand niet openen" + +#: convert-ly.py:339 +#, python-format +msgid "%s: Unable to determine version. Skipping" +msgstr "%s: Kan versie niet bepalen voor. Overslaan" -#: convert-ly.py:275 +#: convert-ly.py:344 #, python-format -msgid "cannot determine version for `%s'. Skipping" -msgstr "kan versie niet bepalen voor `%s'. Overslaan" +msgid "" +"%s: Invalid version string `%s' \n" +"Valid version strings consist of three numbers, separated by dots, e.g. " +"`2.8.12'" +msgstr "" -#: etf2ly.py:1180 +#: etf2ly.py:1195 #, python-format msgid "%s [OPTION]... ETF-FILE" msgstr "%s [OPTIE]... ETF-BESTAND" -#: etf2ly.py:1182 +#: etf2ly.py:1196 msgid "" "Enigma Transport Format is a format used by Coda Music Technology's\n" -"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file." +"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond " +"file.\n" msgstr "" "Enigma Transport Format is een format dat wordt gebruikt door Coda\n" -"Music Technology's Finale produkt. Dit programma converteert een\n" -"subset van ETF naar een gebruiksklaar lilypondbestand." +"Music Technology's Finale product. Dit programma converteert een\n" +"subset van ETF naar een gebruiksklaar LilyPond-bestand.\n" -#: etf2ly.py:1185 midi2ly.py:875 musicxml2ly.py:499 main.cc:154 main.cc:159 +#: etf2ly.py:1208 midi2ly.py:988 midi2ly.py:993 musicxml2ly.py:2640 +#: main.cc:161 main.cc:166 msgid "FILE" msgstr "BESTAND" -#: etf2ly.py:1187 lilypond-book.py:158 midi2ly.py:888 main.cc:163 -msgid "show warranty and copyright" -msgstr "toon garantie en auteursrechten" - -#: lilypond-book.py:57 -msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." -msgstr "Verwerk LilyPond snippers in hybride HTML, LaTeX, texinfo of DocBook dokument." +#: lilypond-book.py:80 +msgid "" +"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." +msgstr "" +"Verwerk LilyPond snippers in hybride HTML, LaTeX, texinfo of DocBook " +"document." -#: lilypond-book.py:64 +#: lilypond-book.py:87 msgid "BOOK" msgstr "BOEK" -#: lilypond-book.py:72 +#: lilypond-book.py:95 #, python-format msgid "Exiting (%d)..." msgstr "Afsluiten (%d)..." -#: lilypond-book.py:104 -#, python-format -msgid "Copyright (c) %s by" -msgstr "Copyright (c) %s" - -#: lilypond-book.py:114 +#: lilypond-book.py:127 msgid "FILTER" msgstr "FILTER" -#: lilypond-book.py:117 -msgid "pipe snippets through FILTER [convert-ly -n -]" -msgstr "pijp snippers door FILTER [convert-ly -n -]" +#: lilypond-book.py:130 +msgid "pipe snippets through FILTER [default: `convert-ly -n -']" +msgstr "pijp snippers door FILTER [default: `convert-ly -n -']" + +#: lilypond-book.py:134 +msgid "" +"use output format FORMAT (texi [default], texi-html, latex, html, docbook)" +msgstr "" +"gebruik uitvoerformat FORMAT (texi [standaard], texi-html, latex, html, " +"docbook)" -#: lilypond-book.py:120 -msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" -msgstr "gebruik uitvoerformat FORMAT (texi [standaard], texi-html, latex, html, docbook)" +#: lilypond-book.py:135 +msgid "FORMAT" +msgstr "FORMAAT" -#: lilypond-book.py:123 +#: lilypond-book.py:142 msgid "add DIR to include path" msgstr "voeg MAP toe aan zoekpad" -#: lilypond-book.py:124 lilypond-book.py:136 main.cc:153 +#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163 +#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160 msgid "DIR" msgstr "MAP" -#: lilypond-book.py:129 +#: lilypond-book.py:148 +msgid "format Texinfo output so that Info will look for images of music in DIR" +msgstr "" + +#: lilypond-book.py:155 msgid "PAD" msgstr "VUL" -#: lilypond-book.py:135 +#: lilypond-book.py:157 +msgid "" +"pad left side of music to align music inspite of uneven bar numbers (in mm)" +msgstr "" + +#: lilypond-book.py:162 +msgid "write lily-XXX files to DIR, link into --output dir" +msgstr "" + +#: lilypond-book.py:167 +msgid "" +"Load the additional python PACKAGE (containing e.g. a custom output format)" +msgstr "" + +#: lilypond-book.py:168 +msgid "PACKAGE" +msgstr "" + +#: lilypond-book.py:172 msgid "write output to DIR" msgstr "schrijf uitvoer naar MAP" -#: lilypond-book.py:140 +#: lilypond-book.py:177 msgid "COMMAND" msgstr "OPDRACHT" -#: lilypond-book.py:141 +#: lilypond-book.py:178 msgid "process ly_files using COMMAND FILE..." msgstr "verwerk ly_bestanden met OPDRACHT BESTAND..." -#: lilypond-book.py:147 -msgid "Create PDF files for use with PDFTeX" -msgstr "Maak PDF bestanden voor gebruik met PDFTeX" +#: lilypond-book.py:182 +msgid "Compile snippets in safe mode" +msgstr "Samenstellen van snippers in veilige modus" -#: lilypond-book.py:150 -msgid "" -"extract all PostScript fonts into INPUT.psfonts for LaTeX\n" -"must use this with dvips -h INPUT.psfonts" +#: lilypond-book.py:188 +msgid "do not fail if no lilypond output is found" msgstr "" -"extraheer alle PostScript fonts naar BESTAND voor LaTeX\n" -"dit dient gebruikt te worden met dvips -h BESTAND" - -#: lilypond-book.py:153 midi2ly.py:885 musicxml2ly.py:490 main.cc:162 -msgid "be verbose" -msgstr "wees breedsprakig" -#: lilypond-book.py:768 -#, python-format -msgid "file not found: %s" -msgstr "bestand niet gevonden: %s" - -#: lilypond-book.py:999 -#, python-format -msgid "deprecated ly-option used: %s=%s" -msgstr "verouderde ly-optie gebruikt: %s=%s" - -#: lilypond-book.py:1002 -#, python-format -msgid "compatibility mode translation: %s=%s" -msgstr "compatibiliteitsmodus vertaling: %s=%s" - -#: lilypond-book.py:1006 -#, python-format -msgid "deprecated ly-option used: %s" -msgstr "verouderde ly-optie gebruikt: %s" - -#: lilypond-book.py:1009 -#, python-format -msgid "compatibility mode translation: %s" -msgstr "compatibiliteitsmodus vertaling: %s" +#: lilypond-book.py:194 +msgid "do not fail if no PNG images are found for EPS files" +msgstr "" -#: lilypond-book.py:1028 -#, python-format -msgid "ignoring unknown ly option: %s" -msgstr "negeren van onbekende ly optie: %s" +#: lilypond-book.py:200 +msgid "write snippet output files with the same base name as their source file" +msgstr "" -#: lilypond-book.py:1382 -#, python-format -msgid "Opening filter `%s'" -msgstr "Open filter `%s'" +#: lilypond-book.py:204 midi2ly.py:1005 musicxml2ly.py:2585 main.cc:169 +msgid "be verbose" +msgstr "wees breedsprakig" -#: lilypond-book.py:1399 -#, python-format -msgid "`%s' failed (%d)" -msgstr "`%s' gefaald (%d)" +#: lilypond-book.py:220 +msgid "" +"run executable PROG instead of latex, or in\n" +"case --pdf option is set instead of pdflatex" +msgstr "" -#: lilypond-book.py:1400 -msgid "The error log is as follows:" -msgstr "De foutlog is als volgend:" +#: lilypond-book.py:222 +msgid "PROG" +msgstr "" -#: lilypond-book.py:1472 -msgid "cannot find \\begin{document} in LaTeX document" -msgstr "kan \\begin{document} niet vinden in LaTeX dokument" +#: lilypond-book.py:228 +msgid "create PDF files for use with PDFTeX" +msgstr "maak PDF-bestanden voor gebruik met PDFTeX" -#: lilypond-book.py:1583 +#: lilypond-book.py:419 msgid "Writing snippets..." msgstr "Schrijven van snippers..." -#: lilypond-book.py:1588 +#: lilypond-book.py:425 msgid "Processing..." msgstr "Verwerken..." -#: lilypond-book.py:1592 +#: lilypond-book.py:431 msgid "All snippets are up to date..." msgstr "Alle snippers zijn actueel..." -#: lilypond-book.py:1602 +#: lilypond-book.py:452 #, python-format msgid "cannot determine format for: %s" msgstr "kan formaat niet bepalen voor: %s" -#: lilypond-book.py:1613 +#: lilypond-book.py:461 #, python-format msgid "%s is up to date." msgstr "%s is actueel." -#: lilypond-book.py:1619 +#: lilypond-book.py:475 #, python-format msgid "Writing `%s'..." msgstr "Schrijven van `%s'..." -#: lilypond-book.py:1674 +#: lilypond-book.py:537 msgid "Output would overwrite input file; use --output." msgstr "Uitvoer zou invoerbestand overschrijven; gebruik --output." -#: lilypond-book.py:1678 +#: lilypond-book.py:541 #, python-format msgid "Reading %s..." msgstr "Lezen %s..." -#: lilypond-book.py:1697 +#: lilypond-book.py:549 msgid "Dissecting..." msgstr "Ontleden..." -#: lilypond-book.py:1713 +#: lilypond-book.py:561 #, python-format msgid "Compiling %s..." msgstr "Samenstellen %s..." -#: lilypond-book.py:1722 +#: lilypond-book.py:570 #, python-format msgid "Processing include: %s" msgstr "Verwerken van invoegsel: %s" -#: lilypond-book.py:1736 +#: lilypond-book.py:582 #, python-format msgid "Removing `%s'" msgstr "Verwijderen van `%s'" -#: lilypond-book.py:1769 -msgid "option --psfonts not used" -msgstr "optie --psfonts niet gebruikt" - -#: lilypond-book.py:1770 -msgid "processing with dvips will have no fonts" -msgstr "verwerking met dvips zal geen fonts hebben" - -#: lilypond-book.py:1773 -msgid "DVIPS usage:" -msgstr "DVIPS gebruik:" - -#: lilypond-book.py:1829 -#, python-format -msgid "Writing fonts to %s..." -msgstr "Schrijven van fonts naar %s" - -#: midi2ly.py:95 lily-library.scm:577 lily-library.scm:586 +#: midi2ly.py:99 msgid "warning: " msgstr "waarschuwing: " -#: midi2ly.py:98 midi2ly.py:913 +#: midi2ly.py:102 midi2ly.py:1037 msgid "error: " msgstr "fout: " -#: midi2ly.py:99 -msgid "Exiting ... " -msgstr "Beëidigen ..." +#: midi2ly.py:103 +msgid "Exiting... " +msgstr "Beëindigen..." -#: midi2ly.py:846 +#: midi2ly.py:957 #, python-format msgid "%s output to `%s'..." msgstr "%s uitvoer naar `%s'..." -#: midi2ly.py:860 musicxml2ly.py:486 +#: midi2ly.py:970 #, python-format -msgid "Convert %s to LilyPond input." -msgstr "Converteer %s naar LilyPond invoer." +msgid "Convert %s to LilyPond input.\n" +msgstr "Converteer %s naar LilyPond-invoer.\n" -#: midi2ly.py:864 +#: midi2ly.py:975 msgid "print absolute pitches" msgstr "schrijf absolute toonhoogten" -#: midi2ly.py:866 midi2ly.py:878 +#: midi2ly.py:977 midi2ly.py:998 msgid "DUR" msgstr "DUUR" -#: midi2ly.py:867 +#: midi2ly.py:978 msgid "quantise note durations on DUR" msgstr "kwantiseer nootlengtes op DUUR" -#: midi2ly.py:870 +#: midi2ly.py:981 msgid "print explicit durations" msgstr "schrijf expliciete nootlengtes" -#: midi2ly.py:871 +#: midi2ly.py:986 +msgid "prepend FILE to output" +msgstr "plak BESTAND aan begin van uitvoer" + +#: midi2ly.py:989 msgid "set key: ALT=+sharps|-flats; MINOR=1" msgstr "zet toonsoort: VER=+kruizen|-mollen; MINEUR=1" -#: midi2ly.py:872 +#: midi2ly.py:990 msgid "ALT[:MINOR]" msgstr "VER[:MINEUR]" -#: midi2ly.py:877 +#: midi2ly.py:995 +msgid "preview of first 4 bars" +msgstr "" + +#: midi2ly.py:997 msgid "quantise note starts on DUR" msgstr "kwantiseer begin van noten op DUUR" -#: midi2ly.py:880 +#: midi2ly.py:1000 msgid "DUR*NUM/DEN" msgstr "DUUR*NOEM/TEL" -#: midi2ly.py:883 +#: midi2ly.py:1003 msgid "allow tuplet durations DUR*NUM/DEN" msgstr "sta tuplet lengtes DUUR*NOEM/TEL toe" -#: midi2ly.py:891 +#: midi2ly.py:1015 msgid "treat every text as a lyric" -msgstr "behandel elke tekst als liedtekts" +msgstr "behandel elke tekst als liedtekst" -#: midi2ly.py:894 +#: midi2ly.py:1018 msgid "Examples" msgstr "Voorbeelden" -#: midi2ly.py:914 +#: midi2ly.py:1038 msgid "no files specified on command line." msgstr "geen bestanden gespecificeerd op de commandoregel." -#: musicxml2ly.py:474 -msgid "musicxml2ly FILE.xml" -msgstr "musicxml2ly BESTAND.xml" +#: musicxml2ly.py:223 +#, python-format +msgid "" +"Encountered file created by %s, containing wrong beaming information. All " +"beaming information in the MusicXML file will be ignored" +msgstr "" + +#: musicxml2ly.py:239 musicxml2ly.py:241 +#, python-format +msgid "Unprocessed PartGroupInfo %s encountered" +msgstr "" + +#: musicxml2ly.py:494 +#, python-format +msgid "Encountered note at %s without type and duration (=%s)" +msgstr "" -#: musicxml2ly.py:477 +#: musicxml2ly.py:514 #, python-format msgid "" -"This program is free software. It is covered by the GNU General Public\n" -"License and you are welcome to change it and/or distribute copies of it\n" -"under certain conditions. Invoke as `%s --warranty' for more\n" -"information." +"Encountered rational duration with denominator %s, unable to convert to " +"lilypond duration" +msgstr "" + +#: musicxml2ly.py:761 +msgid "Unable to extract key signature!" +msgstr "" + +#: musicxml2ly.py:788 +#, python-format +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" +msgstr "" + +#: musicxml2ly.py:926 +#, python-format +msgid "Encountered unprocessed marker %s\n" +msgstr "" + +#: musicxml2ly.py:1020 +#, python-format +msgid "unknown span event %s" +msgstr "onbekende span gebeurtenis %s" + +#: musicxml2ly.py:1030 +#, python-format +msgid "unknown span type %s for %s" +msgstr "onbekend span-type %s voor %s" + +#: musicxml2ly.py:1450 +msgid "Unknown metronome mark, ignoring" +msgstr "" + +#. TODO: Implement the other (more complex) way for tempo marks! +#: musicxml2ly.py:1455 +msgid "" +"Metronome marks with complex relations ( in MusicXML) are " +"not yet implemented." +msgstr "" + +#: musicxml2ly.py:1657 +#, python-format +msgid "Unable to convert chord type %s to lilypond." +msgstr "" + +#: musicxml2ly.py:1806 +#, python-format +msgid "drum %s type unknown, please add to instrument_drumtype_dict" +msgstr "" + +#: musicxml2ly.py:1810 +msgid "cannot find suitable event" +msgstr "kan geen passende gebeurtenis vinden" + +#: musicxml2ly.py:1958 +#, python-format +msgid "Negative skip %s (from position %s to %s)" +msgstr "" + +#: musicxml2ly.py:2099 +#, python-format +msgid "Negative skip found: from %s to %s, difference is %s" +msgstr "" + +#: musicxml2ly.py:2180 +#, python-format +msgid "unexpected %s; expected %s or %s or %s" +msgstr "" + +#: musicxml2ly.py:2286 +msgid "Encountered closing slur, but no slur is open" +msgstr "" + +#: musicxml2ly.py:2289 +msgid "Cannot have two simultaneous (closing) slurs" +msgstr "" + +#: musicxml2ly.py:2298 +msgid "Cannot have a slur inside another slur" +msgstr "" + +#: musicxml2ly.py:2301 +msgid "Cannot have two simultaneous slurs" +msgstr "" + +#: musicxml2ly.py:2435 +#, python-format +msgid "cannot simultaneously have more than one mode: %s" +msgstr "" + +#: musicxml2ly.py:2543 +msgid "Converting to LilyPond expressions..." +msgstr "Converteren naar LilyPond-expressies..." + +#: musicxml2ly.py:2554 +msgid "musicxml2ly [OPTION]... FILE.xml" +msgstr "musicxml2ly [OPTIE]... BESTAND.xml" + +#: musicxml2ly.py:2556 +msgid "" +"Convert MusicXML from FILE.xml to LilyPond input.\n" +"If the given filename is -, musicxml2ly reads from the command line.\n" +msgstr "" + +#: musicxml2ly.py:2566 +msgid "" +"Copyright (c) 2005--2011 by\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" +msgstr "" + +#: musicxml2ly.py:2591 +msgid "use lxml.etree; uses less memory and cpu time" +msgstr "gebruik lxml.etree; gebruikt minder geheugen en processortijd" + +#: musicxml2ly.py:2597 +msgid "input file is a zip-compressed MusicXML file" +msgstr "" + +#: musicxml2ly.py:2603 +msgid "convert pitches in relative mode (default)" +msgstr "" + +#: musicxml2ly.py:2608 +msgid "convert pitches in absolute mode" +msgstr "" + +#: musicxml2ly.py:2611 +msgid "LANG" +msgstr "" + +#: musicxml2ly.py:2613 +msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German" +msgstr "" + +#: musicxml2ly.py:2619 +msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." +msgstr "" + +#: musicxml2ly.py:2625 +msgid "do not convert exact vertical positions of rests" +msgstr "" + +#: musicxml2ly.py:2631 +msgid "do not convert the exact page layout and breaks" +msgstr "" + +#: musicxml2ly.py:2637 +msgid "" +"do not convert beaming information, use lilypond's automatic beaming instead" +msgstr "" + +#: musicxml2ly.py:2645 +msgid "set output filename to FILE, stdout if -" +msgstr "zet uitvoerbestandnaam op BESTAND, stdout indien -" + +#: musicxml2ly.py:2728 +#, python-format +msgid "unknown part in part-list: %s" +msgstr "onbekend deel in deel-lijst: %s" + +#: musicxml2ly.py:2790 +msgid "Input is compressed, extracting raw MusicXML data from stdin" +msgstr "" + +#: musicxml2ly.py:2793 +#, python-format +msgid "Input file %s is compressed, extracting raw MusicXML data" +msgstr "" + +#: musicxml2ly.py:2823 +msgid "Reading MusicXML from Standard input ..." msgstr "" -"Dit is vrije programmatuur. Het valt onder de GNU Algemene Openbare\n" -"Licentie (General Public Licence), en u wordt uitgenodigd het te\n" -"veranderen en/of te verspreiden onder bepaalde voorwaarden. Roep aan\n" -"als `%s --warranty' voor meer informatie." -#: musicxml2ly.py:496 -msgid "Use lxml.etree; uses less memory and cpu time." -msgstr "Gebruik lxml.etree; gebruikt minder geheugen en processortijd." +#: musicxml2ly.py:2825 +#, python-format +msgid "Reading MusicXML from %s ..." +msgstr "MusicXML lezen van %s ..." + +#: musicxml2ly.py:2858 +#, python-format +msgid "Output to `%s'" +msgstr "Uitvoer naar `%s'" + +#: musicxml2ly.py:2925 +#, python-format +msgid "Unable to find input file %s" +msgstr "Kan invoer-bestand niet vinden %s" + +#: website_post.py:123 +msgid "English" +msgstr "Engels" -#: musicxml2ly.py:504 -msgid "set output filename to FILE" -msgstr "zet uitvoerbestandnaam op BESTAND" +#: website_post.py:126 +msgid "Other languages" +msgstr "Andere talen" -#: getopt-long.cc:140 +#: getopt-long.cc:153 #, c-format msgid "option `%s' requires an argument" msgstr "optie `%s' vereist een argument" -#: getopt-long.cc:144 +#: getopt-long.cc:157 #, c-format msgid "option `%s' does not allow an argument" msgstr "optie `%s' staat geen argument toe" -#: getopt-long.cc:148 +#: getopt-long.cc:161 #, c-format msgid "unrecognized option: `%s'" msgstr "onbekende optie: `%s'" -#: getopt-long.cc:154 +#: getopt-long.cc:167 #, c-format msgid "invalid argument `%s' to option `%s'" msgstr "onjuist argument: `%s' voor optie `%s'" -#: warn.cc:68 grob.cc:557 input.cc:82 +#: warn.cc:59 +#, c-format +msgid "success: %s" +msgstr "succes: %s" + +#: warn.cc:86 grob.cc:617 input.cc:97 #, c-format msgid "programming error: %s" msgstr "programmeerfout: %s" -#: warn.cc:69 input.cc:83 +#: warn.cc:87 input.cc:98 msgid "continuing, cross fingers" msgstr "ga verder; duim maar" -#: accidental-engraver.cc:247 +#: accidental-engraver.cc:180 #, c-format msgid "accidental typesetting list must begin with context-name: %s" msgstr "voorteken zetlijst moet beginnen met context-naam: %s" -#: accidental-engraver.cc:274 +#: accidental-engraver.cc:210 #, c-format -msgid "ignoring unknown accidental rule: %s" -msgstr "negeren van onbekende voorteken regel: %s" +msgid "procedure or context-name expected for accidental rule, found %s" +msgstr "procedure of context-naam verwacht voor voorteken regel, gevonden: %s" -#: accidental-engraver.cc:290 -#, c-format -msgid "pair or context-name expected for accidental rule, found %s" -msgstr "paar of context-naam verwacht voor toevallig teken regel, gevonden: %s" - -#: accidental.cc:160 +#: accidental.cc:200 #, c-format msgid "Could not find glyph-name for alteration %s" msgstr "Kan vorm naam niet vinden voor verandering %s" -#: accidental.cc:175 +#: accidental.cc:215 msgid "natural alteration glyph not found" -msgstr "herstelteken vorm niet gevonden" +msgstr "herstellingsteken vorm niet gevonden" -#: align-interface.cc:322 -msgid "tried to get a translation for something that is no child of mine" -msgstr "probeerde een verplaatsing te verkrijgen voor iets wat geen kind van mij is" - -#: all-font-metrics.cc:143 +#: all-font-metrics.cc:156 #, c-format msgid "cannot find font: `%s'" msgstr "kan font niet vinden: `%s'" -#: apply-context-iterator.cc:31 +#: apply-context-iterator.cc:42 msgid "\\applycontext argument is not a procedure" msgstr "\\applycontext argument is geen procedure" -#: auto-change-iterator.cc:63 change-iterator.cc:61 +#: auto-change-iterator.cc:74 change-iterator.cc:72 #, c-format msgid "cannot change, already in translator: %s" msgstr "kan niet wisselen, al in vertaler: %s" -#: axis-group-engraver.cc:78 +#: axis-group-engraver.cc:94 msgid "Axis_group_engraver: vertical group already has a parent" msgstr "Axis_group_engraver: verticale groep heeft al een ouder" -#: axis-group-engraver.cc:79 +#: axis-group-engraver.cc:95 msgid "are there two Axis_group_engravers?" msgstr "zijn er twee Axis_group_engravers?" -#: axis-group-engraver.cc:80 +#: axis-group-engraver.cc:96 msgid "removing this vertical group" msgstr "verwijder deze verticale groep" -#: axis-group-interface.cc:109 -msgid "tried to calculate pure-height at a non-breakpoint" -msgstr "probeerde pure-hoogte te berekenen op een niet-breekpunt" - -#: axis-group-interface.cc:449 +#: axis-group-interface.cc:631 msgid "an outside-staff object should have a direction, defaulting to up" -msgstr "een buiten-notenbalk object moet een richting hebben, gebruik standaardwaarde omhoog" +msgstr "" +"een buiten-notenbalk object moet een richting hebben, gebruik " +"standaardwaarde omhoog" -#: bar-check-iterator.cc:73 +#: bar-check-iterator.cc:84 #, c-format msgid "barcheck failed at: %s" msgstr "maatstreep controle gefaald op: %s" -#: beam-engraver.cc:126 +#: beam-engraver.cc:147 msgid "already have a beam" msgstr "heb al een waardestreep" -#: beam-engraver.cc:202 +#: beam-engraver.cc:230 msgid "unterminated beam" msgstr "onbeëindigde waardestreep" -#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138 +#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150 msgid "stem must have Rhythmic structure" msgstr "stok moet Ritmische structuur hebben" -#: beam-engraver.cc:252 +#: beam-engraver.cc:274 msgid "stem does not fit in beam" msgstr "stok past niet in waardestreep" -#: beam-engraver.cc:253 +#: beam-engraver.cc:275 msgid "beam was started here" msgstr "waardestreep werd hier gestart" -#: beam-quanting.cc:314 -msgid "no feasible beam position" -msgstr "geen werkbare waardestreeppositie gevonden" - -#: beam.cc:160 +#: beam.cc:180 msgid "removing beam with no stems" msgstr "verwijderen van waardestreep zonder stokken" -#: beam.cc:1035 +#. We are completely screwed. +#: beam.cc:1274 msgid "no viable initial configuration found: may not find good beam slope" -msgstr "geen werkbare initiële configuratie gevonden: kan wellicht geen goede waardestreephelling kunnen vinden" +msgstr "" +"geen werkbare initiële configuratie gevonden: kan wellicht geen goede " +"waardestreephelling vinden" -#: break-alignment-interface.cc:195 +#: break-alignment-interface.cc:206 #, c-format msgid "No spacing entry from %s to `%s'" msgstr "Geen spatiëringswaarde van %s naar`%s'" -#: change-iterator.cc:23 +#: change-iterator.cc:34 #, c-format msgid "cannot change `%s' to `%s'" msgstr "kan `%s' niet in `%s' veranderen" #. FIXME: constant error message. -#: change-iterator.cc:82 +#: change-iterator.cc:93 msgid "cannot find context to switch to" msgstr "kan `%s' niet wisselen in `%s'" @@ -653,13 +1560,13 @@ msgstr "kan `%s' niet wisselen in `%s'" #. #. last->translator_id_string () = get_change #. ()->change_to_id_string (); -#: change-iterator.cc:91 +#: change-iterator.cc:102 #, c-format msgid "not changing to same context type: %s" msgstr "niet wisselen naar zelfde type context: %s" #. FIXME: uncomprehensable message -#: change-iterator.cc:95 +#: change-iterator.cc:106 msgid "none of these in my family" msgstr "geen van deze in mijn gezin" @@ -667,185 +1574,196 @@ msgstr "geen van deze in mijn gezin" msgid "No tremolo to end" msgstr "Geen tremolo om te beëindigen" -#: chord-tremolo-engraver.cc:110 +#: chord-tremolo-engraver.cc:109 msgid "unterminated chord tremolo" msgstr "onbeëindigd akkoordtremolo" -#: chord-tremolo-iterator.cc:35 -#, c-format -msgid "expect 2 elements for chord tremolo, found %d" -msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden" - -#: clef.cc:54 +#: clef.cc:65 #, c-format msgid "clef `%s' not found" msgstr "sleutel `%s' niet gevonden" -#: cluster.cc:110 +#: cluster.cc:120 #, c-format msgid "unknown cluster style `%s'" -msgstr "onbekende klusterstijl `%s'" +msgstr "onbekende clusterstijl `%s'" -#: cluster.cc:135 +#: cluster.cc:157 msgid "junking empty cluster" msgstr "verschroot lege cluster" -#: coherent-ligature-engraver.cc:100 +#: coherent-ligature-engraver.cc:111 #, c-format msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul" msgstr "Coherent_ligature_engraver: zet `spacing-increment=0.01': ptr=%ul" #. if we get to here, just put everything on one line -#: constrained-breaking.cc:167 constrained-breaking.cc:184 +#: constrained-breaking.cc:189 constrained-breaking.cc:207 msgid "cannot find line breaking that satisfies constraints" msgstr "kan geen regelbreuk vinden die aan voorwaarden voldoet" -#: context-def.cc:130 -#, c-format -msgid "program has no such type: `%s'" -msgstr "programma heeft geen dergelijk type: `%s'" - -#: context-property.cc:30 +#: context-property.cc:42 msgid "need symbol arguments for \\override and \\revert" msgstr "heb symbool-argumenten nodig voor \\override en \\revert" -#: context.cc:144 +#: context.cc:149 #, c-format msgid "cannot find or create new `%s'" msgstr "kan niet vinden of nieuw maken `%s'" -#: context.cc:206 +#: context.cc:207 #, c-format msgid "cannot find or create `%s' called `%s'" msgstr "kan niet vinden of maken `%s' genaamd `%s'" -#: context.cc:268 +#: context.cc:269 #, c-format msgid "Invalid CreateContext event: Cannot create %s context" msgstr "Ongeldig CreateContext gebeurtenis: Kan %s context niet maken" -#: context.cc:380 +#: context.cc:400 #, c-format msgid "cannot find or create: `%s'" msgstr "kan niet vinden of scheppen: `%s'" -#: custos.cc:77 +#: custos.cc:88 #, c-format msgid "custos `%s' not found" msgstr "custode `%s' niet gevonden" -#: dispatcher.cc:71 +#: dispatcher.cc:82 msgid "Event class should be a symbol" -msgstr "Gebeurtenis klasse zou hoort een symbool te zijn" +msgstr "Gebeurtenis klasse hoort een symbool te zijn" -#: dispatcher.cc:78 +#: dispatcher.cc:89 #, c-format msgid "Unknown event class %s" msgstr "Onbekende gebeurtenis klasse `%s'" -#: dots.cc:37 +#: dots.cc:48 #, c-format msgid "dot `%s' not found" msgstr "punt `%s' niet gevonden" -#: dynamic-engraver.cc:184 +#: dynamic-engraver.cc:197 msgid "cannot find start of (de)crescendo" msgstr "kan start van (de)crescendo niet vinden" -#: dynamic-engraver.cc:193 +#: dynamic-engraver.cc:206 msgid "already have a decrescendo" msgstr "heb al een decrescendo" -#: dynamic-engraver.cc:195 +#: dynamic-engraver.cc:208 msgid "already have a crescendo" msgstr "heb al een crescendo" -#: dynamic-engraver.cc:198 +#: dynamic-engraver.cc:211 msgid "cresc starts here" msgstr "cresc is hier gestart" -#: dynamic-engraver.cc:327 +#: dynamic-engraver.cc:339 msgid "unterminated (de)crescendo" msgstr "onbeëindigd (de)crescendo" -#: extender-engraver.cc:142 extender-engraver.cc:151 +#: episema-engraver.cc:75 +msgid "already have an episema" +msgstr "heb al een episema" + +#: episema-engraver.cc:88 +msgid "cannot find start of episema" +msgstr "kan begin van episema niet vinden" + +#: episema-engraver.cc:137 +msgid "unterminated episema" +msgstr "onbeëindigde episema" + +#: extender-engraver.cc:170 extender-engraver.cc:179 msgid "unterminated extender" msgstr "onbeëindigde extender" -#: font-config.cc:28 -msgid "Initializing FontConfig..." -msgstr "Initialiseren van FontConfig..." +#: font-config-scheme.cc:152 font-config.cc:55 +#, c-format +msgid "failed adding font directory: %s" +msgstr "toevoegen van font map-gefaald: %s" -#: font-config.cc:44 +#: font-config-scheme.cc:154 font-config.cc:57 #, c-format -msgid "Rebuilding FontConfig cache %s, this may take a while..." -msgstr "Herbouwen van FontConfig cache %s, dit kan wel even duren..." +msgid "adding font directory: %s" +msgstr "toevoegen van font-map: %s" -#: font-config.cc:55 +#: font-config-scheme.cc:168 #, c-format -msgid "failed adding font directory: %s" -msgstr "toevoegen van font map gefaald: %s" +msgid "failed adding font file: %s" +msgstr "toevoegen van font-bestand gefaald: %s" -#: font-config.cc:57 +#: font-config-scheme.cc:170 #, c-format -msgid "adding font directory: %s" -msgstr "toevoegen van font map: %s" +msgid "adding font file: %s" +msgstr "toevoegen van font-bestand: %s" + +#: font-config.cc:40 +msgid "Initializing FontConfig..." +msgstr "Initialiseren van FontConfig..." -#: general-scheme.cc:198 +#: font-config.cc:61 +msgid "Building font database..." +msgstr "Bouwen van font-database..." + +#: general-scheme.cc:306 msgid "infinity or NaN encountered while converting Real number" msgstr "oneindig of NaN tegengekomen tijdens converteren van Reëel getal" -#: general-scheme.cc:199 +#: general-scheme.cc:307 msgid "setting to zero" msgstr "zet op nul" -#: general-scheme.cc:417 output-ps.scm:61 +#: general-scheme.cc:543 msgid "Found infinity or nan in output. Substituting 0.0" msgstr "Oneindig of nan gevonden in uitvoer. Vervangen door 0.0" -#: glissando-engraver.cc:94 +#: glissando-engraver.cc:105 msgid "unterminated glissando" -msgstr "onbeëindigde glissando" +msgstr "onbeëindigd glissando" -#: global-context-scheme.cc:87 global-context-scheme.cc:105 +#: global-context-scheme.cc:96 global-context-scheme.cc:114 msgid "no music found in score" msgstr "geen muziek gevonden in score" -#: global-context-scheme.cc:95 +#: global-context-scheme.cc:104 msgid "Interpreting music... " msgstr "Vertolken van muziek..." -#: global-context-scheme.cc:118 +#: global-context-scheme.cc:127 #, c-format msgid "elapsed time: %.2f seconds" msgstr "duur: %.2f seconden" -#: gregorian-ligature-engraver.cc:59 +#: gregorian-ligature-engraver.cc:70 #, c-format msgid "\\%s ignored" msgstr "\\%s genegeerd" -#: gregorian-ligature-engraver.cc:64 +#: gregorian-ligature-engraver.cc:75 #, c-format msgid "implied \\%s added" -msgstr "impliciede \\%s toegevoeg" +msgstr "impliciete \\%s toegevoegd" #. ligature may not start with 2nd head of pes or flexa -#: gregorian-ligature-engraver.cc:212 +#: gregorian-ligature-engraver.cc:224 msgid "cannot apply `\\~' on first head of ligature" msgstr "Kan `\\~' niet op eerste noot van ligatuur toepassen" #. (pitch == prev_pitch) -#: gregorian-ligature-engraver.cc:224 +#: gregorian-ligature-engraver.cc:236 msgid "cannot apply `\\~' on heads with identical pitch" msgstr "kan `\\~' niet toepassen op noten met identieke toonhoogte" -#: grob-interface.cc:57 +#: grob-interface.cc:68 #, c-format msgid "Unknown interface `%s'" msgstr "onbekende interface `%s'" -#: grob-interface.cc:68 +#: grob-interface.cc:79 #, c-format msgid "Grob `%s' has no interface for property `%s'" msgstr "Grob `%s' heeft geen interface voor eigenschap `%s'" @@ -855,165 +1773,166 @@ msgstr "Grob `%s' heeft geen interface voor eigenschap `%s'" msgid "%d: %s" msgstr "%d: %s" -#: grob-property.cc:174 +#: grob-property.cc:173 #, c-format msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)" -msgstr "circulaire afhankelijkheid: calculation-in-progress tegengekomen voor #'%s (%s)" +msgstr "" +"circulaire afhankelijkheid: calculation-in-progress tegengekomen voor #'%s " +"(%s)" -#: grob.cc:251 +#: grob.cc:286 msgid "Infinity or NaN encountered" msgstr "Oneindig of NaN tegengekomen" -#: hairpin.cc:187 +#: hairpin.cc:186 msgid "decrescendo too small" msgstr "decrescendo te klein" -#: hairpin.cc:188 -msgid "crescendo too small" -msgstr "crescendo te klein" - -#: horizontal-bracket-engraver.cc:59 +#: horizontal-bracket-engraver.cc:78 msgid "do not have that many brackets" msgstr "zoveel haken heb ik niet" -#: horizontal-bracket-engraver.cc:68 +#: horizontal-bracket-engraver.cc:87 msgid "conflicting note group events" msgstr "Tegenstrijdige nootgroeperingsgebeurtenissen" -#: hyphen-engraver.cc:93 +#: hyphen-engraver.cc:104 msgid "removing unterminated hyphen" msgstr "verwijderen van onafgesloten streepje" -#: hyphen-engraver.cc:107 +#: hyphen-engraver.cc:118 msgid "unterminated hyphen; removing" msgstr "verwijderen van onafgesloten streepje" -#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:117 +#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109 #, c-format msgid "cannot find file: `%s'" msgstr "kan bestand niet vinden: `%s'" -#: includable-lexer.cc:55 lily-parser-scheme.cc:108 +#: includable-lexer.cc:73 lily-parser-scheme.cc:100 #, c-format msgid "(search path: `%s')" msgstr "(zoekpad: `%s')" -#: input.cc:112 source-file.cc:168 source-file.cc:183 +#: input.cc:131 source-file.cc:179 source-file.cc:194 msgid "position unknown" msgstr "positie onbekend" -#: key-signature-interface.cc:71 +#: key-signature-interface.cc:78 #, c-format msgid "No glyph found for alteration: %s" msgstr "Geen vorm gevonden voor verandering: %s" -#: key-signature-interface.cc:81 +#: key-signature-interface.cc:88 msgid "alteration not found" msgstr "verandering niet gevonden" -#: ligature-engraver.cc:93 +#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104 msgid "cannot find start of ligature" msgstr "kan begin van ligatuur niet vinden" -#: ligature-engraver.cc:98 -msgid "no right bound" -msgstr "geen rechterkant" - -#: ligature-engraver.cc:120 +#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131 msgid "already have a ligature" msgstr "heb al een ligatuur" -#: ligature-engraver.cc:129 +#: ligature-engraver.cc:109 +msgid "no right bound" +msgstr "geen rechterkant" + +#: ligature-engraver.cc:140 msgid "no left bound" msgstr "geen linkerkant" -#: ligature-engraver.cc:173 +#: ligature-engraver.cc:185 msgid "unterminated ligature" msgstr "onbeëindigde ligatuur" -#: ligature-engraver.cc:202 +#: ligature-engraver.cc:214 msgid "ignoring rest: ligature may not contain rest" msgstr "negeer rust: ligatuur mag geen rust bevatten" -#: ligature-engraver.cc:203 +#: ligature-engraver.cc:215 msgid "ligature was started here" msgstr "ligatuur werd hier gestart" -#: lily-guile.cc:78 +#: lily-guile.cc:89 #, c-format msgid "(load path: `%s')" msgstr "(zoekpad: `%s')" -#: lily-guile.cc:438 +#: lily-guile.cc:437 #, c-format msgid "cannot find property type-check for `%s' (%s)." msgstr "kan geen type-controle vinden voor property `%s' (%s)" -#: lily-guile.cc:441 +#: lily-guile.cc:440 msgid "perhaps a typing error?" msgstr "misschien een typefout?" -#: lily-guile.cc:448 +#: lily-guile.cc:447 msgid "doing assignment anyway" msgstr "voer toewijzing toch door" -#: lily-guile.cc:460 +#: lily-guile.cc:459 #, c-format msgid "type check for `%s' failed; value `%s' must be of type `%s'" -msgstr "type contole gefaald voor `%s'; waarde `%s' moet type hebben: `%s'" +msgstr "type controle gefaald voor `%s'; waarde `%s' moet type hebben: `%s'" -#: lily-lexer.cc:250 +#: lily-lexer.cc:264 msgid "include files are not allowed in safe mode" msgstr "invoegbestanden zijn niet toegestaan in veilige modus" -#: lily-lexer.cc:269 +#: lily-lexer.cc:291 #, c-format msgid "identifier name is a keyword: `%s'" msgstr "identifier naam is een sleutelwoord: `%s'" -#: lily-lexer.cc:284 +#: lily-lexer.cc:312 #, c-format msgid "error at EOF: %s" msgstr "fout bij EOF: %s" -#: lily-parser-scheme.cc:30 -#, c-format -msgid "deprecated function called: %s" -msgstr "verouderde functie aangeroepen: %s" - -#: lily-parser-scheme.cc:89 +#: lily-parser-scheme.cc:82 #, c-format msgid "Changing working directory to: `%s'" msgstr "Veranderen van werkmap naar: `%s'" -#: lily-parser-scheme.cc:107 +#: lily-parser-scheme.cc:99 #, c-format msgid "cannot find init file: `%s'" msgstr "kan init bestand niet vinden: `%s'" -#: lily-parser-scheme.cc:126 +#: lily-parser-scheme.cc:118 #, c-format msgid "Processing `%s'" msgstr "Verwerken van `%s'" -#: lily-parser.cc:99 +#: lily-parser-scheme.cc:204 +msgid "" +"ly:parser-parse-string is only valid with a new parser. Use ly:parser-" +"include-string instead." +msgstr "" + +#: lily-parser.cc:106 msgid "Parsing..." msgstr "Ontleden..." -#: lily-parser.cc:127 +#: lily-parser.cc:134 msgid "braces do not match" msgstr "haakjes paren niet" -#: lyric-combine-music-iterator.cc:327 +#: lyric-combine-music-iterator.cc:337 #, c-format msgid "cannot find Voice `%s'" msgstr "kan Voice niet vinden: `%s'" -#: lyric-engraver.cc:158 +#: lyric-engraver.cc:176 msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." -msgstr "Liedtekst lettergreep heeft geen noot. Gebruik \\lyricsto of associatedVoice." +msgstr "" +"Liedtekst lettergreep heeft geen noot. Gebruik \\lyricsto of " +"associatedVoice." -#: main.cc:100 +#: main.cc:109 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -1026,7 +1945,7 @@ msgstr "" "veranderen en/of te verspreiden onder bepaalde voorwaarden. Roep aan\n" "als `%s --warranty' voor meer informatie.\n" -#: main.cc:106 +#: main.cc:115 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License version 2\n" @@ -1057,11 +1976,11 @@ msgstr "" "zoniet, schrijf dan naar de Free Software Foundation, Inc.,\n" "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n" -#: main.cc:137 +#: main.cc:146 msgid "SYM[=VAL]" msgstr "SYM[=WAARDE]" -#: main.cc:138 +#: main.cc:147 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." @@ -1069,53 +1988,41 @@ msgstr "" "zet Scheme optie SYM to WAARDE (standaard: #t)\n" "Gebruik -dhelp voor hulp." -#: main.cc:141 +#: main.cc:150 msgid "EXPR" msgstr "EXPR" -#: main.cc:141 +#: main.cc:150 msgid "evaluate scheme code" msgstr "evalueer scheme code" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:144 +#: main.cc:153 msgid "FORMATs" msgstr "FORMAATen" -#: main.cc:144 +#: main.cc:153 msgid "dump FORMAT,... Also as separate options:" msgstr "dump FORMAAT,... Ook als separate opties:" -#: main.cc:145 -msgid "generate DVI (tex backend only)" -msgstr "genereer DVI (alleen tex backend)" - -#: main.cc:146 +#: main.cc:154 msgid "generate PDF (default)" msgstr "genereer PDF (standaard)" -#: main.cc:147 +#: main.cc:155 msgid "generate PNG" msgstr "genereer PNG" -#: main.cc:148 +#: main.cc:156 msgid "generate PostScript" msgstr "genereer PostScipt" -#: main.cc:149 -msgid "generate TeX (tex backend only)" -msgstr "genereer TeX (alleen tex backend)" - -#: main.cc:150 -msgid "show this help and exit" -msgstr "toon deze hulp en sluit af" - -#: main.cc:151 +#: main.cc:158 msgid "FIELD" msgstr "VELD" -#: main.cc:151 +#: main.cc:158 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" @@ -1123,19 +2030,19 @@ msgstr "" "schrijf kopveld VELD naar bestand\n" "genaamd BASISNAAM.VELD" -#: main.cc:153 +#: main.cc:160 msgid "add DIR to search path" msgstr "voeg DIR toe aan zoekpad" -#: main.cc:154 +#: main.cc:161 msgid "use FILE as init file" msgstr "gebruik BESTAND als initialisatiebestand" -#: main.cc:156 +#: main.cc:163 msgid "USER, GROUP, JAIL, DIR" msgstr "GEBR, GROEP, GEVANG, DIR" -#: main.cc:156 +#: main.cc:163 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" @@ -1143,23 +2050,16 @@ msgstr "" "chroot naar GEVANG, word GEBR:GROEP\n" "en cd naar MAP" -#: main.cc:159 +#: main.cc:166 msgid "write output to FILE (suffix will be added)" -msgstr "" -"schrijf uitvoer naar BESTAND\n" -"(extensie wordt toegevoegd)" +msgstr "schrijf uitvoer naar BESTAND (extensie wordt toegevoegd)" -#: main.cc:160 +#: main.cc:167 msgid "relocate using directory of lilypond program" -msgstr "" -"verhuis aan de hand van de map van het\n" -"lilypond programma" - -#: main.cc:161 -msgid "show version number and exit" -msgstr "toon versienummer en sluit af" +msgstr "verhuis aan de hand van de map van het lilypond programma" -#: main.cc:203 +#. Do not update the copyright years here, run `make grand-replace' +#: main.cc:238 #, c-format msgid "" "Copyright (c) %s by\n" @@ -1169,122 +2069,112 @@ msgstr "" "%s en anderen." #. No version number or newline here. It confuses help2man. -#: main.cc:230 +#: main.cc:265 #, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Gebruik: %s [OPTIE]... BESTAND..." -#: main.cc:232 -#, c-format +#: main.cc:267 msgid "Typeset music and/or produce MIDI from FILE." msgstr "Zet muziek en of produceer MIDI van BESTAND." -#: main.cc:234 -#, c-format +#: main.cc:269 msgid "LilyPond produces beautiful music notation." msgstr "LilyPond produceert prachtige muzieknotatie." -#: main.cc:236 +#: main.cc:271 #, c-format msgid "For more information, see %s" msgstr "Voor meer informatie, zie %s" -#: main.cc:238 -#, c-format +#: main.cc:273 msgid "Options:" msgstr "Opties:" -#: main.cc:242 -#, c-format -msgid "Report bugs via %s" -msgstr "" -"Meld fouten in het programma aan %s;\n" -"meld onjuistheden in de vertaling aan of ." - -#: main.cc:288 +#: main.cc:327 #, c-format msgid "expected %d arguments with jail, found: %u" msgstr "verwachtte %d argumenten voor gevang, gevonden: %u" -#: main.cc:302 +#: main.cc:341 #, c-format msgid "no such user: %s" msgstr "onbekende gebruiker: %s" -#: main.cc:304 +#: main.cc:343 #, c-format msgid "cannot get user id from user name: %s: %s" msgstr "kan gebruikers id niet krijgen van gebruikersnaam: %s: %s" -#: main.cc:319 +#: main.cc:358 #, c-format msgid "no such group: %s" msgstr "onbekende groep: %s" -#: main.cc:321 +#: main.cc:360 #, c-format msgid "cannot get group id from group name: %s: %s" msgstr "kan groep id niet krijgen van groepnaam: %s: %s" -#: main.cc:329 +#: main.cc:368 #, c-format msgid "cannot chroot to: %s: %s" msgstr "kan niet chrooten naar: %s: %s" -#: main.cc:336 +#: main.cc:375 #, c-format msgid "cannot change group id to: %d: %s" msgstr "kan groep id niet veranderen in: %d: %s" -#: main.cc:342 +#: main.cc:381 #, c-format msgid "cannot change user id to: %d: %s" -msgstr "kan kan gebruiker id niet veranderen in: %d: %s" +msgstr "kan gebruiker id niet veranderen in: %d: %s" -#: main.cc:348 +#: main.cc:387 #, c-format msgid "cannot change working directory to: %s: %s" msgstr "kan werkmap niet veranderen in: %s: %s" -#: main.cc:594 +#: main.cc:628 #, c-format msgid "exception caught: %s" msgstr "exceptie gevangen: %s" #. FIXME: constant error message. -#: mark-engraver.cc:154 +#: mark-engraver.cc:157 msgid "rehearsalMark must have integer value" msgstr "rehearsalMark moet een natuurlijk getal zijn" -#: mark-engraver.cc:160 +#: mark-engraver.cc:163 msgid "mark label must be a markup object" msgstr "mark etiket moet een markup zijn" -#: mensural-ligature-engraver.cc:85 +#: mensural-ligature-engraver.cc:96 msgid "ligature with less than 2 heads -> skipping" msgstr "ligatuur met minder dan 2 bolletjes -> overslaan" -#: mensural-ligature-engraver.cc:112 +#: mensural-ligature-engraver.cc:123 msgid "cannot determine pitch of ligature primitive -> skipping" msgstr "kan toonhoogte van primitieve ligatuur niet bepalen -> overslaan" -#: mensural-ligature-engraver.cc:126 +#: mensural-ligature-engraver.cc:137 msgid "single note ligature - skipping" msgstr "enkelnootse ligatuur - overslaan" -#: mensural-ligature-engraver.cc:138 +#: mensural-ligature-engraver.cc:148 msgid "prime interval within ligature -> skipping" msgstr "prieminterval binnen ligatuur -> overslaan" -#: mensural-ligature-engraver.cc:150 +#: mensural-ligature-engraver.cc:159 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping" -msgstr "mensural ligature: lengte geen van Mx, L, S -> overslaan" +msgstr "mensurale ligatuur: lengte geen van Mx, L, S -> overslaan" -#: mensural-ligature-engraver.cc:198 +#: mensural-ligature-engraver.cc:202 msgid "semibrevis must be followed by another one -> skipping" msgstr "semibrevis moet worden gevolgd door een andere -> overslaan" -#: mensural-ligature-engraver.cc:209 +#: mensural-ligature-engraver.cc:212 msgid "" "semibreves can only appear at the beginning of a ligature,\n" "and there may be only zero or two of them" @@ -1292,7 +2182,7 @@ msgstr "" "semibrevi kunnen alleen aan het begin van een ligatuur voorkomen,\n" "en het mogen er uitsluitend een of twee zijn" -#: mensural-ligature-engraver.cc:236 +#: mensural-ligature-engraver.cc:232 msgid "" "invalid ligatura ending:\n" "when the last note is a descending brevis,\n" @@ -1301,160 +2191,272 @@ msgid "" msgstr "" "ongeldig ligatuur einde:\n" "als de laatste noot een dalende brevis is,\n" -"moet de penultimate note een andere zijn,\n" +"moet de voorlaatste noot een andere zijn,\n" "of de ligatuur moet LB of SSB zijn" -#: mensural-ligature-engraver.cc:356 +#: mensural-ligature-engraver.cc:386 msgid "unexpected case fall-through" msgstr "onverwachte zaakdoorval" -#: mensural-ligature.cc:141 +#: mensural-ligature.cc:171 msgid "Mensural_ligature: unexpected case fall-through" msgstr "Mensural_ligature: onverwachte zaakdoorval" -#: mensural-ligature.cc:192 +#: mensural-ligature.cc:233 msgid "Mensural_ligature: (join_right == 0)" msgstr "Mensural_ligature: (join_right) == 0)" -#: midi-item.cc:81 +#: midi-item.cc:92 #, c-format msgid "no such MIDI instrument: `%s'" msgstr "onbekend MIDI instrument: `%s'" -#: midi-stream.cc:28 +#: midi-stream.cc:39 #, c-format msgid "cannot open for write: %s: %s" msgstr "kan bestand niet openen om te schrijven: %s: %s" -#: midi-stream.cc:44 +#: midi-stream.cc:55 #, c-format msgid "cannot write to file: `%s'" -msgstr "kon niet naar bestand schrijven: `%s'" +msgstr "kan niet naar bestand schrijven: `%s'" + +#: minimal-page-breaking.cc:40 paper-score.cc:122 +msgid "Calculating line breaks..." +msgstr "Berekenen van regelafbreuken..." + +#: minimal-page-breaking.cc:44 +msgid "Calculating page breaks..." +msgstr "Berekenen van pagina-afbreuken..." -#: music-iterator.cc:171 +#: music-iterator.cc:182 msgid "Sending non-event to context" msgstr "Zenden van niet-gebeurtenis naar context" -#: music.cc:140 +#: music.cc:151 #, c-format msgid "octave check failed; expected \"%s\", found: \"%s\"" -msgstr "oktaafcontrole gefaald; verwachtte \"%s\", vond: \"%s\"" +msgstr "octaafcontrole gefaald; verwachtte \"%s\", vond: \"%s\"" + +#: music.cc:219 +msgid "(normalized pitch)" +msgstr "" + +#: music.cc:223 +#, c-format +msgid "Transposing %s by %s makes alteration larger than double" +msgstr "Transponeren van %s met %s maakt voorteken groter dan dubbel" + +#: new-dynamic-engraver.cc:142 +#, c-format +msgid "" +"unknown crescendo style: %s\n" +"defaulting to hairpin." +msgstr "" +"onbekende crescendo stijl: %s\n" +"standaard haarspeld wordt gebruikt" -#: music.cc:203 +#: new-dynamic-engraver.cc:200 #, c-format -msgid "transposition by %s makes alteration larger than double" -msgstr "transponering met %s maakt voorteken groter dan dubbel" +msgid "unterminated %s" +msgstr "onbeëindigd %s" -#: new-fingering-engraver.cc:96 +#: new-fingering-engraver.cc:106 msgid "cannot add text scripts to individual note heads" -msgstr "can tektscripts niet toevoegen aan individuele notenbolletjes" +msgstr "kan tekstscripts niet toevoegen aan individuele notenbolletjes" -#: new-fingering-engraver.cc:239 +#: new-fingering-engraver.cc:250 msgid "no placement found for fingerings" -msgstr "geen plaatsing gevonden voor vingers" +msgstr "geen plaatsing gevonden voor vingerzetting" -#: new-fingering-engraver.cc:240 +#: new-fingering-engraver.cc:251 msgid "placing below" msgstr "plaats onder" -#: note-collision.cc:464 +#: note-collision.cc:497 msgid "ignoring too many clashing note columns" msgstr "negeren van te veel botsende nootkolommen." -#: note-column.cc:124 +#: note-column.cc:135 msgid "cannot have note heads and rests together on a stem" msgstr "kan notenbolletjes en rusten niet samen op een stok zetten" -#: note-head.cc:63 +#: note-head.cc:76 #, c-format msgid "none of note heads `%s' or `%s' found" msgstr "geen van notenbolletjes `%s' of `%s' gevonden" -#: note-heads-engraver.cc:64 +#: note-heads-engraver.cc:76 msgid "NoteEvent without pitch" msgstr "NootGebeurtenis zonder toonhoogte" -#: open-type-font.cc:33 +#: open-type-font.cc:44 #, c-format msgid "cannot allocate %lu bytes" -msgstr "kan geen %lu bytes alloceren" +msgstr "kan geen %lu bytes toewijzen" -#: open-type-font.cc:37 +#: open-type-font.cc:48 #, c-format msgid "cannot load font table: %s" msgstr "kan fonttabel niet laden: %s" -#: open-type-font.cc:42 +#: open-type-font.cc:53 #, c-format -msgid "Free type error: %s" +msgid "FreeType error: %s" msgstr "FreeType fout: %s" -#: open-type-font.cc:100 +#: open-type-font.cc:111 #, c-format msgid "unsupported font format: %s" msgstr "niet-ondersteund font formaat: %s" -#: open-type-font.cc:102 +#: open-type-font.cc:113 #, c-format msgid "error reading font file %s: %s" msgstr "fout bij lezen van font bestand %s: %s" -#: open-type-font.cc:177 +#: open-type-font.cc:188 #, c-format msgid "FT_Get_Glyph_Name () Freetype error: %s" msgstr "FT_Get_Glyph_Name () Freetype fout: %s" -#: open-type-font.cc:302 pango-font.cc:167 +#: open-type-font.cc:250 +msgid "Invalid index for character" +msgstr "Ongeldige index voor teken" + +#: open-type-font.cc:319 pango-font.cc:187 #, c-format msgid "FT_Get_Glyph_Name () error: %s" msgstr "FT_Get_Glyph_Name () fout: %s" -#: page-turn-page-breaking.cc:146 +#. find out the ideal number of pages +#: optimal-page-breaking.cc:62 +msgid "Finding the ideal number of pages..." +msgstr "Zoeken naar het ideale aantal pagina's..." + +#: optimal-page-breaking.cc:85 +msgid "" +"could not satisfy systems-per-page and page-count at the same time, ignoring " +"systems-per-page" +msgstr "" + +#: optimal-page-breaking.cc:105 +msgid "Fitting music on 1 page..." +msgstr "Muziek passend maken op 1 pagina..." + +#: optimal-page-breaking.cc:107 +#, c-format +msgid "Fitting music on %d pages..." +msgstr "Muziek passend maken op %d pagina's..." + +#: optimal-page-breaking.cc:109 +#, c-format +msgid "Fitting music on %d or %d pages..." +msgstr "Muziek passend maken op %d of %d pagina's..." + +#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173 +#, c-format +msgid "trying %d systems" +msgstr "proberen van %d systemen" + +#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201 +#, c-format +msgid "best score for this sys-count: %f" +msgstr "" + +#: optimal-page-breaking.cc:208 page-turn-page-breaking.cc:248 +#: paper-score.cc:163 +msgid "Drawing systems..." +msgstr "Tekenen van systemen..." + +#: output-def.cc:235 +msgid "margins do not fit with line-width, setting default values" +msgstr "" +"kantlijnen passen niet met regellengte, standaardwaarden worden ingesteld" + +#: output-def.cc:242 +msgid "" +"systems run off the page due to improper paper settings, setting default " +"values" +msgstr "" + +#: page-breaking.cc:248 +msgid "" +"ignoring min-systems-per-page and max-systems-per-page because systems-per-" +"page was set" +msgstr "" + +#: page-breaking.cc:253 +msgid "" +"min-systems-per-page is larger than max-systems-per-page, ignoring both " +"values" +msgstr "" + +#: page-layout-problem.cc:322 +msgid "" +"couldn't fit music on page: ragged-spacing was requested, but page was " +"compressed" +msgstr "" +"kan muziek niet op pagina passen: ragged-spatiëring was gevraagd,\n" +"maar pagina was gecomprimeerd" + +#: page-layout-problem.cc:325 +#, c-format +msgid "couldn't fit music on page: overflow is %f" +msgstr "kan muziek niet passend maken op 1 pagina: overflow is %f" + +#: page-layout-problem.cc:327 +msgid "compressing music to fit" +msgstr "" + +#: page-layout-problem.cc:765 +msgid "staff-affinities should only decrease" +msgstr "" + +#: page-turn-page-breaking.cc:168 #, c-format msgid "page-turn-page-breaking: breaking from %d to %d" msgstr "page-turn-page-breaking: afbreken van %d naar %d" -#: page-turn-page-breaking.cc:195 -msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." +#: page-turn-page-breaking.cc:217 +msgid "" +"cannot fit the first page turn onto a single page. Consider setting first-" +"page-number to an even number." msgstr "" "kan de eerste paginaomslag niet op eerste pagina gepast krijgen. Overweeg\n" "first-page-number op een even getal te zetten." -#: page-turn-page-breaking.cc:208 +#: page-turn-page-breaking.cc:230 #, c-format msgid "Calculating page and line breaks (%d possible page breaks)..." msgstr "Berekenen van pagina en regelbreuken (%d mogelijke pagina breuken)..." -#: page-turn-page-breaking.cc:226 paper-score.cc:146 -msgid "Drawing systems..." -msgstr "Tekenen van systemen..." - -#: page-turn-page-breaking.cc:275 +#: page-turn-page-breaking.cc:300 #, c-format msgid "break starting at page %d" msgstr "breuk gestart op pagina %d" -#: page-turn-page-breaking.cc:276 +#: page-turn-page-breaking.cc:301 #, c-format msgid "\tdemerits: %f" msgstr "\tstrafpunten: %f" -#: page-turn-page-breaking.cc:277 +#: page-turn-page-breaking.cc:302 #, c-format msgid "\tsystem count: %d" msgstr "\taantal systemen: %d" -#: page-turn-page-breaking.cc:278 +#: page-turn-page-breaking.cc:303 #, c-format msgid "\tpage count: %d" msgstr "\taantal bladzijden: %d" -#: page-turn-page-breaking.cc:279 +#: page-turn-page-breaking.cc:304 #, c-format msgid "\tprevious break: %d" msgstr "\tvorige breuk: %d" -#: pango-font.cc:184 +#: pango-font.cc:204 #, c-format msgid "" "Glyph has no name, but font supports glyph naming.\n" @@ -1463,144 +2465,156 @@ msgstr "" "Vorm heeft geen naam, terwijl het font vormnamen ondersteunt<\n" "Overslaan van vorm U+%0X, bestand %s" -#: pango-font.cc:229 +#: pango-font.cc:241 #, c-format msgid "no PostScript font name for font `%s'" msgstr "geen PostScript fontnaam voor font: `%s'" -#: pango-font.cc:277 +#: pango-font.cc:290 msgid "FreeType face has no PostScript font name" msgstr "FreeType gezicht heeft geen PostScript fontnaam" -#: paper-column-engraver.cc:199 -msgid "forced break was overridden by some other event, should you be using bar checks?" +#: paper-book.cc:214 +#, c-format +msgid "program option -dprint-pages not supported by backend `%s'" +msgstr "" + +#: paper-book.cc:233 +#, c-format +msgid "program option -dpreview not supported by backend `%s'" +msgstr "" + +#: paper-column-engraver.cc:245 +msgid "" +"forced break was overridden by some other event, should you be using bar " +"checks?" msgstr "" -"geforceerde breuk werd opgeheft door andere gebeurtenis, zou je maatcontrole\n" -"moeten gebruiken?" +"geforceerde breuk werd opgeheven door andere gebeurtenis, misschien moet je " +"maatcontrole gebruiken?" -#: paper-outputter-scheme.cc:30 +#: paper-outputter-scheme.cc:41 #, c-format msgid "Layout output to `%s'..." msgstr "Opmaakuitvoer naar `%s'..." -#: paper-score.cc:105 -msgid "Calculating line breaks..." -msgstr "Berekenen van regelafbreuken..." - -#: paper-score.cc:118 +#: paper-score.cc:135 #, c-format msgid "Element count %d (spanners %d) " msgstr "Aantal elementen %d (spanners %d)" -#: paper-score.cc:122 +#: paper-score.cc:139 msgid "Preprocessing graphical objects..." msgstr "Voorbewerken van grafische objecten..." -#: parse-scm.cc:87 +#: parse-scm.cc:101 msgid "GUILE signaled an error for the expression beginning here" msgstr "GUILE signaleerde een fout voor de expressie beginnend alhier" -#: percent-repeat-engraver.cc:200 +#: partial-iterator.cc:45 +msgid "trying to use \\partial after the start of a piece" +msgstr "" + +#: percent-repeat-engraver.cc:148 msgid "unterminated percent repeat" msgstr "onbeëindigde procentherhaling" -#: performance.cc:43 +#: performance.cc:54 msgid "Track..." msgstr "Spoor... " -#: performance.cc:72 +#: performance.cc:83 msgid "MIDI channel wrapped around" msgstr "MIDI kanaal is klokje rond" -#: performance.cc:73 +#: performance.cc:84 msgid "remapping modulo 16" msgstr "herafbeelden modulo 16" -#: performance.cc:101 +#: performance.cc:111 #, c-format msgid "MIDI output to `%s'..." msgstr "MIDI uitvoer naar %s..." -#: phrasing-slur-engraver.cc:131 +#: phrasing-slur-engraver.cc:157 msgid "unterminated phrasing slur" msgstr "onbeëindigde fraseringsboog" -#: piano-pedal-engraver.cc:286 +#: piano-pedal-engraver.cc:298 #, c-format msgid "expect 3 strings for piano pedals, found: %ld" msgstr "verwacht 3 teksten voor pianopedalen, gevonden: %ld" -#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312 -#: piano-pedal-performer.cc:93 +#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324 +#: piano-pedal-performer.cc:104 #, c-format msgid "cannot find start of piano pedal: `%s'" msgstr "kan start van piano pedaal niet vinden: `%s'" -#: piano-pedal-engraver.cc:347 +#: piano-pedal-engraver.cc:359 #, c-format msgid "cannot find start of piano pedal bracket: `%s'" msgstr "kan start van piano pedaal haak niet vinden: `%s'" -#: program-option-scheme.cc:207 +#: program-option-scheme.cc:237 #, c-format msgid "no such internal option: %s" msgstr "onbekende interne optie: %s" -#: property-iterator.cc:74 +#: property-iterator.cc:85 #, c-format msgid "not a grob name, `%s'" msgstr "geen grobnaam, `%s'" -#: relative-octave-check.cc:38 +#: relative-octave-check.cc:49 msgid "Failed octave check, got: " -msgstr "Oktaafcontorle gefaald, heb:" +msgstr "Octaafcontrole gefaald, heb:" -#: relocate.cc:44 +#: relocate.cc:54 #, c-format msgid "Setting %s to %s" msgstr "Zetten van %s op %s" -#: relocate.cc:64 +#: relocate.cc:74 #, c-format msgid "no such file: %s for %s" msgstr "onbekend bestand: %s voor %s" -#: relocate.cc:74 relocate.cc:92 +#: relocate.cc:84 relocate.cc:102 #, c-format msgid "no such directory: %s for %s" msgstr "onbekende map: %s voor %s" -#: relocate.cc:84 +#: relocate.cc:94 #, c-format msgid "%s=%s (prepend)\n" msgstr "%s=%s (voorvoegen)\n" -#: relocate.cc:114 +#: relocate.cc:124 #, c-format msgid "not relocating, no %s/ or current/ found under %s" msgstr "niet verhuizen, geen %s/ of current/ gevonden onder %s" -#: relocate.cc:125 +#: relocate.cc:135 #, c-format msgid "Relocation: compile datadir=%s, new datadir=%s" msgstr "Verhuizing: samenstel datamap=%s, nieuwe datamap=%s" -#: relocate.cc:138 +#: relocate.cc:148 #, c-format msgid "Relocation: framework_prefix=%s" msgstr "Verhuizing: draadwerk_voorvoegel=%s" -#: relocate.cc:179 +#: relocate.cc:189 #, c-format msgid "Relocation: is absolute: argv0=%s" msgstr "Verhuizing: is absoluut: argv0=%s" -#: relocate.cc:186 +#: relocate.cc:196 #, c-format msgid "Relocation: from cwd: argv0=%s" msgstr "Verhuizing: van cwd: argv0=%s" -#: relocate.cc:195 +#: relocate.cc:213 #, c-format msgid "" "Relocation: from PATH=%s\n" @@ -1609,155 +2623,164 @@ msgstr "" "Verhuizing: van PATH=%s\n" "argv0=%s" -#: relocate.cc:229 +#: relocate.cc:240 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" msgstr "LILYPONDPREFIX is verouderd, gebruik LILYPOND_DATADIR" -#: relocate.cc:357 +#: relocate.cc:367 #, c-format msgid "Relocation file: %s" msgstr "Verhuisbestand: %s" -#: relocate.cc:393 +#: relocate.cc:373 source-file.cc:65 +#, c-format +msgid "cannot open file: `%s'" +msgstr "kan bestand niet openen: `%s'" + +#: relocate.cc:403 #, c-format msgid "Unknown relocation command %s" msgstr "Onbekend verhuizingscommando %s" -#: rest-collision.cc:145 +#: rest-collision-engraver.cc:70 +msgid "rhythmic head is not part of a rhythmic column" +msgstr "" + +#: rest-collision.cc:146 msgid "cannot resolve rest collision: rest direction not set" -msgstr "kan rust bosting niet oplossen: richting van de rust is niet gezet" +msgstr "kan rust botsing niet oplossen: richting van de rust is niet gezet" -#: rest-collision.cc:159 rest-collision.cc:204 +#: rest-collision.cc:160 rest-collision.cc:205 msgid "too many colliding rests" msgstr "te veel botsende rusten" -#: rest.cc:132 +#: rest.cc:159 #, c-format msgid "rest `%s' not found" msgstr "rust `%s' niet gevonden" -#: score-engraver.cc:67 +#: score-engraver.cc:78 #, c-format msgid "cannot find `%s'" msgstr "kan niet vinden `%s'" -#: score-engraver.cc:69 +#: score-engraver.cc:80 msgid "Music font has not been installed properly." -msgstr "Muziekfont is niet correect geïnstalleerd." +msgstr "Muziekfont is niet correct geïnstalleerd." -#: score-engraver.cc:71 +#: score-engraver.cc:82 #, c-format msgid "Search path `%s'" msgstr "Zoekpad: `%s'" -#: score-engraver.cc:73 +#: score-engraver.cc:84 msgid "Aborting" msgstr "Afbreken" -#: score.cc:167 +#: score.cc:178 msgid "already have music in score" -msgstr "heb al muziek nodig in score" +msgstr "heb al muziek in score" -#: score.cc:168 +#: score.cc:179 msgid "this is the previous music" msgstr "dit is de vorige muziek" -#: score.cc:173 +#: score.cc:184 msgid "errors found, ignoring music expression" msgstr "fouten gevonden, negeer muziekexpressie" #. FIXME: -#: script-engraver.cc:102 -msgid "do not know how to interpret articulation: " +#: script-engraver.cc:113 +msgid "do not know how to interpret articulation:" msgstr "weet niet hoe articulatie te vertolken: " -#: script-engraver.cc:103 -msgid "scheme encoding: " +#: script-engraver.cc:114 +msgid " scheme encoding: " msgstr "scheme codering: " -#: slur-engraver.cc:82 +#: slur-engraver.cc:93 #, c-format msgid "direction of %s invalid: %d" msgstr "richting van %s ongeldig: %d" -#: slur-engraver.cc:151 +#: slur-engraver.cc:162 msgid "unterminated slur" msgstr "onbeëindigde bindingsboog" -#: slur-engraver.cc:163 +#: slur-engraver.cc:174 msgid "cannot end slur" msgstr "kan legatoboog niet beëindigen" -#: slur.cc:355 +#: slur.cc:362 #, c-format msgid "Ignoring grob for slur: %s. avoid-slur not set?" msgstr "Negeren van grob voor boogje: %s. avoid-slur niet gezet?" -#: source-file.cc:74 +#: source-file.cc:85 #, c-format msgid "expected to read %d characters, got %d" msgstr "verwacht %d karakters te lezen, kreeg %d" -#: spaceable-grob.cc:117 +#: spaceable-grob.cc:94 #, c-format msgid "No spring between column %d and next one" msgstr "Geen veer tussen kolom %d en de volgende" -#: staff-symbol-engraver.cc:62 -msgid "staff-span event has no direction" -msgstr "notenbalk-span gebeurtenis heeft geen richting" - -#: stem-engraver.cc:92 +#: stem-engraver.cc:103 msgid "tremolo duration is too long" msgstr "tremololengte is te lang" #. FIXME: -#: stem-engraver.cc:129 +#: stem-engraver.cc:140 #, c-format msgid "adding note head to incompatible stem (type = %d)" msgstr "voeg nootbolletje toe aan onverenigbare stok (type = %d)" -#: stem-engraver.cc:131 +#: stem-engraver.cc:142 msgid "maybe input should specify polyphonic voices" msgstr "misschien moet invoer polyfonische stemmen specificeren" -#: stem.cc:105 +#: stem.cc:116 msgid "weird stem size, check for narrow beams" msgstr "vreemde stoklengte; controleer op krappe waardestrepen" -#: stem.cc:618 +#: stem.cc:657 #, c-format msgid "flag `%s' not found" msgstr "vlag `%s' niet gevonden" -#: stem.cc:629 +#: stem.cc:673 #, c-format msgid "flag stroke `%s' not found" msgstr "vlag streep `%s' niet gevonden" -#: system.cc:180 +#: system.cc:197 #, c-format -msgid "Element count %d." -msgstr "Aantal elementen: %d." +msgid "Element count %d" +msgstr "Aantal elementen %d" -#: system.cc:266 +#: system.cc:303 #, c-format msgid "Grob count %d" msgstr "Aantal grobs %d" -#: text-spanner-engraver.cc:60 +#: text-spanner-engraver.cc:73 msgid "cannot find start of text spanner" msgstr "kan start van tekst spanner niet vinden" -#: text-spanner-engraver.cc:72 +#: text-spanner-engraver.cc:86 msgid "already have a text spanner" msgstr "heb al een tekst spanner" -#: text-spanner-engraver.cc:118 +#: text-spanner-engraver.cc:132 msgid "unterminated text spanner" msgstr "onbeëindigde tekst spanner" -#: tie-engraver.cc:267 +#: tie-engraver.cc:116 +msgid "unterminated tie" +msgstr "onbeëindigde overbinding" + +#: tie-engraver.cc:312 msgid "lonely tie" msgstr "eenzame overbinding" @@ -1766,352 +2789,406 @@ msgstr "eenzame overbinding" #. #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi. #. -#: time-signature-engraver.cc:64 +#: time-signature-engraver.cc:75 #, c-format msgid "strange time signature found: %d/%d" msgstr "vreemde maatsoort gevonden: %d/%d" #. If there is no such symbol, we default to the numbered style. #. (Here really with a warning!) -#: time-signature.cc:83 +#: time-signature.cc:94 #, c-format msgid "time signature symbol `%s' not found; reverting to numbered style" msgstr "maatsoortsymbool `%s' niet gevonden; val terug op numerieke stijl" -#: translator-ctors.cc:52 +#: translator-ctors.cc:65 #, c-format msgid "unknown translator: `%s'" msgstr "onbekende translator: `%s'" -#: translator-group-ctors.cc:29 +#: translator-group-ctors.cc:40 #, c-format msgid "fatal error. Couldn't find type: %s" msgstr "fatale fout. Kan type niet vinden: %s" -#: translator-group.cc:146 +#: translator-group.cc:188 #, c-format msgid "cannot find: `%s'" msgstr "kan niet vinden: `%s'" -#: translator.cc:346 +#: translator.cc:359 #, c-format msgid "Two simultaneous %s events, junking this one" msgstr "Twee gelijktijdige %s gebeurtenissen, verschroot deze" -#: translator.cc:347 +#: translator.cc:360 #, c-format msgid "Previous %s event here" -msgstr "Vorige %s gebeurtinis hier" +msgstr "Vorige %s gebeurtenis hier" -#: trill-spanner-engraver.cc:67 -msgid "cannot find start of trill spanner" -msgstr "kan start van triller spanner niet vinden" +#: ttf.cc:481 ttf.cc:530 +#, c-format +msgid "font index %d too large for font `%s', using index 0" +msgstr "" -#: trill-spanner-engraver.cc:79 -msgid "already have a trill spanner" -msgstr "heb al een tekst spanner" +#: ttf.cc:513 ttf.cc:565 +msgid "font index must be non-negative, using index 0" +msgstr "" -#: tuplet-engraver.cc:96 +#: tuplet-engraver.cc:107 msgid "No tuplet to end" msgstr "Geen tuplet om te beëindigen" -#: vaticana-ligature-engraver.cc:388 +#: vaticana-ligature-engraver.cc:400 #, c-format -msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style" +msgid "" +"ignored prefix(es) `%s' of this head according to restrictions of the " +"selected ligature style" msgstr "" -"negeren van voorvoegsel (es) `%s' van dit bolletje volgens restricties van de\n" +"negeren van voorvoegsel(s) `%s' van dit bolletje volgens restricties van de\n" "geselecteerde ligatuurstijl" -#: vaticana-ligature-engraver.cc:714 +#: vaticana-ligature-engraver.cc:736 #, c-format msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul" -msgstr "Vaticana_ligature_engraver: instelling `spacing-increment = %f': ptr=%ul" +msgstr "" +"Vaticana_ligature_engraver: instelling `spacing-increment = %f': ptr=%ul" -#: vaticana-ligature.cc:84 +#: vaticana-ligature.cc:95 msgid "flexa-height undefined; assuming 0" msgstr "flexa-hoogte ongedefiniëerd; uitgaan van 0" -#: vaticana-ligature.cc:89 +#: vaticana-ligature.cc:100 msgid "ascending vaticana style flexa" msgstr "stijgende vaticana stijl flexa" -#: vaticana-ligature.cc:177 +#: vaticana-ligature.cc:188 msgid "Vaticana_ligature: zero join (delta_pitch == 0)" msgstr "Vaticana_ligature: nulsamenvoeging (delta_pitch == 0)" #. fixme: be more verbose. -#: volta-engraver.cc:143 +#: volta-engraver.cc:111 msgid "cannot end volta spanner" msgstr "kan volta spanner niet beëindigen" -#: volta-engraver.cc:153 +#: volta-engraver.cc:121 msgid "already have a volta spanner, ending that one prematurely" msgstr "heb al een volta spanner, beëindig die voortijdig" -#: volta-engraver.cc:157 +#: volta-engraver.cc:125 msgid "also already have an ended spanner" -msgstr "heb ook al een beëidingde spanner" +msgstr "heb ook al een beëindigde spanner" -#: volta-engraver.cc:158 +#: volta-engraver.cc:126 msgid "giving up" msgstr "geef op" -#: parser.yy:704 +#: parser.yy:820 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "\\paper kan niet worden gebruikt in \\score, gebruik \\layout" -#: parser.yy:728 +#: parser.yy:844 msgid "need \\paper for paper block" msgstr "heb \\paper nodig voor paper blok" -#: parser.yy:1187 +#: parser.yy:1363 +msgid "only \\consists takes non-string argument." +msgstr "alleen \\consists neem een niet-string functieargument." + +#: parser.yy:1376 msgid "Grob name should be alphanumeric" msgstr "Grob naam zou alfanumeriek moeten zijn" -#: parser.yy:1485 +#: parser.yy:1685 msgid "second argument must be pitch list" msgstr "tweede argument moet een toonhoogtelijst zijn" -#: parser.yy:1512 parser.yy:1517 parser.yy:1982 +#: parser.yy:1716 parser.yy:1721 parser.yy:2194 msgid "have to be in Lyric mode for lyrics" msgstr "moet in Lyric modus zijn voor liedteksten" -#: parser.yy:1614 +#: parser.yy:1818 msgid "expecting string as script definition" msgstr "verwacht string voor script definitie" -#: parser.yy:1769 parser.yy:1819 +#: parser.yy:1973 parser.yy:2024 #, c-format msgid "not a duration: %d" msgstr "geen duur: %d" -#: parser.yy:1936 +#: parser.yy:2148 msgid "have to be in Note mode for notes" msgstr "moet in Note modus zijn voor noten" -#: parser.yy:1997 +#: parser.yy:2209 msgid "have to be in Chord mode for chords" -msgstr "moet in Chord modus zijn voor accoorden" +msgstr "moet in Chord modus zijn voor akkoorden" -#: lexer.ll:176 +#: lexer.ll:190 msgid "stray UTF-8 BOM encountered" msgstr "losse UTF-8 BOM tegengekomen" -#: lexer.ll:180 +#: lexer.ll:194 msgid "Skipping UTF-8 BOM" msgstr "Overslaan van UTF-8 BOM" -#: lexer.ll:235 +#: lexer.ll:249 #, c-format msgid "Renaming input to: `%s'" msgstr "Hernoem invoer naar: `%s'" -#: lexer.ll:252 +#: lexer.ll:266 msgid "quoted string expected after \\version" msgstr "tekst tussen aanhalingstekens verwacht na \\version" -#: lexer.ll:256 +#: lexer.ll:270 msgid "quoted string expected after \\sourcefilename" msgstr "tekst tussen aanhalingstekens verwacht na \\sourcefilename" -#: lexer.ll:260 +#: lexer.ll:274 msgid "integer expected after \\sourcefileline" msgstr "geheel getal verwacht na \\sourcefileline" -#: lexer.ll:273 +#: lexer.ll:287 msgid "EOF found inside a comment" -msgstr "EOF gevonden in een kommentaar" +msgstr "EOF gevonden in een commentaar" -#: lexer.ll:288 +#: lexer.ll:302 msgid "\\maininput not allowed outside init files" msgstr "\\maininput niet toegestaan buiten init bestanden" -#: lexer.ll:312 +#: lexer.ll:326 #, c-format msgid "wrong or undefined identifier: `%s'" msgstr "verkeerde of ongedefiniëerde identifier: `%s'" #. backup rule -#: lexer.ll:321 +#: lexer.ll:335 msgid "end quote missing" -msgstr "aanhalingstekens sluite mist" +msgstr "aanhalingstekens sluiten ontbreekt" -#: lexer.ll:466 +#: lexer.ll:485 msgid "Brace found at end of lyric. Did you forget a space?" -msgstr "Accolade gevonden aan het eind van liedtektst. Een spatie vergeten?" +msgstr "Accolade gevonden aan het eind van liedtekst. Een spatie vergeten?" -#: lexer.ll:559 +#: lexer.ll:595 msgid "Brace found at end of markup. Did you forget a space?" msgstr "Accolade gevonden aan het eind van een opmaak. Een spatie vergeten?" -#: lexer.ll:663 +#: lexer.ll:699 #, c-format msgid "invalid character: `%c'" msgstr "ongeldig teken: `%c'" -#: lexer.ll:778 +#: lexer.ll:814 lexer.ll:815 #, c-format msgid "unknown escaped string: `\\%s'" msgstr "onbekende ontsnapte string: `\\%s'" -#: lexer.ll:884 +#: lexer.ll:924 lexer.ll:925 #, c-format msgid "file too old: %s (oldest supported: %s)" msgstr "bestand te oud: %s (oudste ondersteund: %s)" -#: lexer.ll:885 +#: lexer.ll:925 lexer.ll:926 msgid "consider updating the input with the convert-ly script" msgstr "overweeg het actualiseren van de invoer met het convert-ly script" -#: lexer.ll:891 +#: lexer.ll:931 lexer.ll:932 #, c-format msgid "program too old: %s (file requires: %s)" msgstr "programma te oud: %s (bestand vereist: %s)" -#: backend-library.scm:19 lily.scm:752 ps-to-png.scm:58 +#: backend-library.scm:29 ps-to-png.scm:68 #, scheme-format msgid "Invoking `~a'..." msgstr "Inroepen van `~a'..." -#: backend-library.scm:28 +#: backend-library.scm:34 #, scheme-format msgid "`~a' failed (~a)" msgstr "`~a' gefaald (~a)" # lisp-format -#: backend-library.scm:115 framework-tex.scm:343 framework-tex.scm:368 +#: backend-library.scm:94 #, scheme-format msgid "Converting to `~a'..." msgstr "Converteren naar `~a'..." # lisp-format -#: backend-library.scm:128 +#. Do not try to guess the name of the png file, +#. GS produces PNG files like BASE-page%d.png. +#: backend-library.scm:104 #, scheme-format msgid "Converting to ~a..." msgstr "Converteren naar ~a..." -#: backend-library.scm:166 +#: backend-library.scm:142 #, scheme-format msgid "Writing header field `~a' to `~a'..." msgstr "Schrijven van header veld `~a' naar `~a'..." -#: define-context-properties.scm:20 define-grob-properties.scm:10 -#: define-music-properties.scm:10 +#: backend-library.scm:192 +#, scheme-format +msgid "missing stencil expression `~S'" +msgstr "" + +#: chord-entry.scm:49 +#, scheme-format +msgid "Spurious garbage following chord: ~A" +msgstr "" + +#: define-context-properties.scm:31 define-grob-properties.scm:21 +#: define-music-properties.scm:21 #, scheme-format msgid "symbol ~S redefined" msgstr "symbool ~S hergedefiniëerd" -#: define-event-classes.scm:119 +#: define-event-classes.scm:79 +msgid "All classes must be the last in their matrilineal line." +msgstr "" + +#: define-event-classes.scm:83 +msgid "" +"All classes must have a well-defined pedigree in the existing class " +"hierarchy." +msgstr "" + +#: define-event-classes.scm:149 #, scheme-format msgid "event class ~A seems to be unused" msgstr "gebeurtenisklasse ~A schijnt ongebruikt te zijn" #. should be programming-error -#: define-event-classes.scm:125 +#: define-event-classes.scm:155 #, scheme-format msgid "translator listens to nonexisting event class ~A" msgstr "vertaler luistert naar nietbestaande gebeurtenisklasse ~A" -#: define-markup-commands.scm:273 +#: define-markup-commands.scm:803 msgid "no systems found in \\score markup, does it have a \\layout block?" msgstr "geen systemen gevonden in \\score markup, heeft het een \\layout blok?" -#: define-markup-commands.scm:1315 +#: define-markup-commands.scm:2404 +#, scheme-format +msgid "Cannot find glyph ~a" +msgstr "Kan glyph ~a niet vinden" + +#: define-markup-commands.scm:2830 +#, scheme-format +msgid "no brace found for point size ~S " +msgstr "geen accolade gevonden voor puntgrootte ~S" + +#: define-markup-commands.scm:2831 +#, scheme-format +msgid "defaulting to ~S pt" +msgstr "" + +#: define-markup-commands.scm:2984 #, scheme-format msgid "not a valid duration string: ~a" msgstr "geen geldige duurtekst: ~a" -#: define-music-types.scm:743 +#: define-music-types.scm:740 #, scheme-format msgid "symbol expected: ~S" msgstr "symbool verwacht: ~S" -#: define-music-types.scm:746 +#: define-music-types.scm:743 #, scheme-format msgid "cannot find music object: ~S" msgstr "kan muziekobject niet vinden: ~S" -#: define-music-types.scm:766 +#: define-music-types.scm:762 #, scheme-format msgid "unknown repeat type `~S'" msgstr "onbekend herhaaltype `~S'" -#: define-music-types.scm:767 -msgid "See music-types.scm for supported repeats" -msgstr "Zie music-types.scm voor ondersteunde herhalingen" +#: define-music-types.scm:763 +msgid "See define-music-types.scm for supported repeats" +msgstr "Zie define-music-types.scm voor ondersteunde herhalingen" + +#: define-note-names.scm:962 +msgid "Select note names language." +msgstr "" + +#: define-note-names.scm:969 +#, scheme-format +msgid "Using `~a' note names..." +msgstr "" + +#: define-note-names.scm:972 +#, scheme-format +msgid "Could not find language `~a'. Ignoring." +msgstr "" -#: document-backend.scm:91 +#: document-backend.scm:132 #, scheme-format msgid "pair expected in doc ~s" msgstr "paar verwacht in doc ~s" -#: document-backend.scm:135 +#: document-backend.scm:189 #, scheme-format msgid "cannot find interface for property: ~S" msgstr "kan grob bediening voor eigenschap niet vinden: ~S" -#: document-backend.scm:145 +#: document-backend.scm:199 #, scheme-format msgid "unknown Grob interface: ~S" msgstr "onbekende Grob bediening: ~S" -#: documentation-lib.scm:45 +#: documentation-lib.scm:59 #, scheme-format msgid "Processing ~S..." msgstr "Verwerken van ~S..." -#: documentation-lib.scm:150 +#: documentation-lib.scm:176 #, scheme-format msgid "Writing ~S..." msgstr "Schrijven van ~S..." -#: documentation-lib.scm:172 +#: documentation-lib.scm:198 #, scheme-format msgid "cannot find description for property ~S (~S)" msgstr "kan beschrijving voor eigenschap niet vinden ~S (~S)" -#: framework-eps.scm:89 +#: flag-styles.scm:148 +#, scheme-format +msgid "flag stroke `~a' or `~a' not found" +msgstr "vlag streep `~a' of `~a' niet gevonden" + +#: framework-eps.scm:108 #, scheme-format msgid "Writing ~a..." msgstr "Schrijven van ~a..." -#: framework-ps.scm:281 +#: framework-ps.scm:250 #, scheme-format msgid "cannot embed ~S=~S" msgstr "kan niet inbedden ~S=~S" -#: framework-ps.scm:334 +#: framework-ps.scm:293 #, scheme-format msgid "cannot extract file matching ~a from ~a" msgstr "kan bestand dat past op ~a niet uit ~a extraheren" -#: framework-ps.scm:351 +#: framework-ps.scm:311 #, scheme-format msgid "do not know how to embed ~S=~S" msgstr "weet niet hoe ~S=~S in te bedden" -#: framework-ps.scm:382 +#: framework-ps.scm:336 #, scheme-format msgid "do not know how to embed font ~s ~s ~s" msgstr "weet niet hoe font in te bedden: ~s ~s ~s" -#: framework-ps.scm:731 -#, scheme-format -msgid "cannot convert to ~S" -msgstr "kan niet converteren naar ~S" - -#: framework-ps.scm:750 framework-ps.scm:753 -#, scheme-format -msgid "cannot generate ~S using the postscript back-end" -msgstr "kan ~S niet genereren, gebruikmakend van de postscript achterkant" - -#: framework-ps.scm:760 +#: framework-ps.scm:669 msgid "" "\n" -"The PostScript backend does not support the system-by-system \n" -"output. For that, use the EPS backend instead,\n" +"The PostScript backend does not support the\n" +"system-by-system output. For that, use the EPS backend instead,\n" "\n" -" lilypond -b eps \n" +" lilypond -dbackend=eps FILE\n" "\n" "If have cut & pasted a lilypond fragment from a webpage, be sure\n" "to only remove anything before\n" @@ -2119,16 +3196,15 @@ msgid "" " %% ****************************************************************\n" " %% Start cut-&-pastable-section\n" " %% ****************************************************************\n" -"\n" msgstr "" "\n" "Het PostScript backend ondersteund geen system-by-system uitvoer.\n" "Gebruik daarvoor het EPS backend\n" "\n" -" lilypond -b eps BESTAND\n" +" lilypond -dbackend=eps BESTAND\n" "\n" -"Als LilyPond fragment van een webpagina is gecopiëerd, weet zeker\n" -"dat alleen alles voorafgaand aan\n" +"Als LilyPond fragment van een webpagina is gekopiëerd, ga na dat\n" +"alleen alles voorafgaand aan\n" "\n" " %% ****************************************************************\n" " %% Start cut-&-pastable-section\n" @@ -2136,64 +3212,85 @@ msgstr "" "\n" "is verwijderd\n" -#: framework-tex.scm:360 +#: framework-svg.scm:84 #, scheme-format -msgid "TeX file name must not contain whitespace: `~a'" -msgstr "TeX bestandsnaam mag geen spaties bevatten: `~a'" +msgid "Updating font into: ~a" +msgstr "actualiseren van font naar: ~a" -#: graphviz.scm:53 +#: graphviz.scm:64 #, scheme-format msgid "Writing graph `~a'..." msgstr "Schrijven van graph `~a'..." -#: layout-beam.scm:29 +#: layout-beam.scm:40 #, scheme-format msgid "Error in beam quanting. Expected (~S,~S) found ~S." msgstr "Fout in waardestreep kwantisering. Verwacht (~S,~S) gevonden ~S." -#: layout-beam.scm:46 +#: layout-beam.scm:54 #, scheme-format msgid "Error in beam quanting. Expected ~S 0, found ~S." msgstr "Fout in waardestreep kwantisering. Verwacht ~S 0, gevonden ~S." -#: layout-page-layout.scm:115 -msgid "Can't fit systems on page -- ignoring between-system-padding" -msgstr "Kan systemen niet op pagina gepast krijgen -- negeren van between-system-padding" - -#: layout-page-layout.scm:449 -msgid "Calculating page breaks..." -msgstr "Berekenen van pagina-afbreuken..." +#: lily-library.scm:758 +msgid "" +"Find the index between @var{start} and @var{end} (an integer)\n" +"which produces the closest match to @var{target-val} if\n" +"applied to function @var{getter}." +msgstr "" -#: lily-library.scm:545 +#: lily-library.scm:832 #, scheme-format msgid "unknown unit: ~S" msgstr "onbekende eenheid: ~S" -#: lily-library.scm:579 +#: lily-library.scm:858 lily-library.scm:867 +msgid "warning:" +msgstr "waarschuwing: " + +#: lily-library.scm:860 #, scheme-format msgid "no \\version statement found, please add~afor future compatibility" -msgstr "geen \\version uitdrukking gevonden, voeg~atoe voor toekomstige compatibiliteit" +msgstr "" +"geen \\version uitdrukking gevonden, voeg~atoe voor toekomstige " +"compatibiliteit" -#: lily-library.scm:587 +#: lily-library.scm:868 msgid "old relative compatibility not used" msgstr "oude relative compatibiliteit niet gebruikt" -#: lily.scm:173 +#: lily.scm:225 +msgid "Using (ice-9 curried-definitions) module\n" +msgstr "" + +#: lily.scm:230 +msgid "Guile 1.8\n" +msgstr "" + +#: lily.scm:290 #, scheme-format msgid "cannot find: ~A" msgstr "kan niet vinden: ~A" -#: lily.scm:238 +#: lily.scm:350 #, scheme-format msgid "wrong type for argument ~a. Expecting ~a, found ~s" -msgstr "verkeert type voor argument ~a. Verwacht ~a, gevonden ~s" +msgstr "verkeerd type voor argument ~a. Verwacht ~a, gevonden ~s" + +#: lily.scm:716 +msgid "Compilation successfully completed" +msgstr "Samenstellen met succes voltooid" + +#: lily.scm:717 +msgid "Compilation completed with warnings or errors" +msgstr "" -#: lily.scm:619 +#: lily.scm:779 #, scheme-format msgid "job ~a terminated with signal: ~a" msgstr "taak ~a beëindigd met met signaal: ~a" -#: lily.scm:622 +#: lily.scm:782 #, scheme-format msgid "" "logfile ~a (exit ~a):\n" @@ -2202,125 +3299,325 @@ msgstr "" "logfile ~a (exit ~a):\n" "~a" -#: lily.scm:649 lily.scm:742 +#: lily.scm:804 lily.scm:882 #, scheme-format msgid "failed files: ~S" msgstr "gefaalde bestanden: ~S" # lisp-format -#: lily.scm:732 +#: lily.scm:873 #, scheme-format msgid "Redirecting output to ~a..." msgstr "Omleiden van uitvoer naar ~a..." -#: ly-syntax-constructors.scm:40 +#: lily.scm:892 +#, scheme-format +msgid "Invoking `~a'...\n" +msgstr "Inroepen van `~a'...\n" + +#: ly-syntax-constructors.scm:51 msgid "Music head function must return Music object" msgstr "Muziek hoofd functie moet Muziek object teruggeven" -#: ly-syntax-constructors.scm:139 +#: ly-syntax-constructors.scm:177 #, scheme-format msgid "Invalid property operation ~a" msgstr "Ongeldige eigenschap operatie ~a" -#: markup.scm:94 +#: markup.scm:223 #, scheme-format msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" msgstr "verkeerd aantal argumenten. Verwacht: ~A, gevonden ~A: ~S" -#: markup.scm:100 +#: markup.scm:229 #, scheme-format msgid "Invalid argument in position ~A. Expect: ~A, found: ~S." -msgstr "Ongeldig argument in positie ~A. Verwach: ~A, gevonden: ~S." +msgstr "Ongeldig argument in positie ~A. Verwacht: ~A, gevonden: ~S." + +#: markup.scm:292 +#, scheme-format +msgid "Not a markup command: ~A" +msgstr "" + +#: modal-transforms.scm:38 +msgid "'from' pitch not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:42 modal-transforms.scm:75 +msgid "'to' pitch not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:46 +msgid "pitch to be transposed not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:71 +msgid "'around' pitch not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:79 +msgid "pitch to be inverted not in scale; ignoring" +msgstr "" + +#: modal-transforms.scm:95 +msgid "negative replication count; ignoring" +msgstr "" -#: music-functions.scm:228 +#: music-functions.scm:268 msgid "More alternatives than repeats. Junking excess alternatives" -msgstr "Meer alternatieven dan herhalingen. Verschroten van overtollige alternatieven" +msgstr "" +"Meer alternatieven dan herhalingen. Verschroten van overtollige " +"alternatieven" -#: music-functions.scm:250 +#: music-functions.scm:297 #, scheme-format -msgid "expecting 2 elements for chord tremolo, found ~a" -msgstr "verwacht 2 elementen voor akkoordtremolo, ~a gevonden" +msgid "invalid tremolo repeat count: ~a" +msgstr "ongeldige tremolo herhaal teller: ~a" -#: music-functions.scm:573 +#: music-functions.scm:618 #, scheme-format msgid "music expected: ~S" msgstr "muziek verwacht: ~S" #. FIXME: uncomprehensable message -#: music-functions.scm:623 +#: music-functions.scm:662 #, scheme-format msgid "Bar check failed. Expect to be at ~a, instead at ~a" msgstr "Maat controle gefaald. Verwacht bij ~a te zijn, maar ben bij ~a" -#: music-functions.scm:773 +#: music-functions.scm:846 #, scheme-format msgid "cannot find quoted music: `~S'" msgstr "kan aangehaalde muziek niet vinden: `~S'" -#: music-functions.scm:970 +#: music-functions.scm:982 +msgid "Add @var{octave-shift} to the octave of @var{pitch}." +msgstr "" + +#: music-functions.scm:1037 +#, scheme-format +msgid "Unknown octaveness type: ~S " +msgstr "Onbekend octaviëertype: ~S" + +#: music-functions.scm:1038 +msgid "Defaulting to 'any-octave." +msgstr "" + +#: music-functions.scm:1378 #, scheme-format msgid "unknown accidental style: ~S" msgstr "onbekende toevallig teken stijl: ~S" -#: output-ps.scm:276 -msgid "utf-8-string encountered in PS backend" -msgstr "utf-8-string tegengekomen in in PS achtereinde" +#: output-ps.scm:48 +msgid "Found infinity or nan in output. Substituting 0.0" +msgstr "Oneindig of nan gevonden in uitvoer. Vervangen door 0.0" + +#: output-ps.scm:289 output-svg.scm:550 +#, scheme-format +msgid "unknown line-cap-style: ~S" +msgstr "onbekende line-cap-stijl: ~S" + +#: output-ps.scm:294 output-svg.scm:556 +#, scheme-format +msgid "unknown line-join-style: ~S" +msgstr "onbekende line-join-stijl: ~S" -#: output-svg.scm:42 +#: output-svg.scm:47 #, scheme-format msgid "undefined: ~S" msgstr "ongedefiniëerd: ~S" -#: output-svg.scm:132 +#: output-svg.scm:151 #, scheme-format msgid "cannot decypher Pango description: ~a" msgstr "kan Pango fontbeschrijving niet ontcijferen: ~a" -#: output-tex.scm:97 +#: output-svg.scm:231 +msgid "Glyph must have a unicode value" +msgstr "" + +#: output-svg.scm:283 output-svg.scm:293 #, scheme-format -msgid "cannot find ~a in ~a" -msgstr "kan ~a niet vinden in ~a" +msgid "cannot find SVG font ~S" +msgstr "kan SVG-font niet vinden: ~S" -#: paper.scm:84 +#: paper.scm:115 msgid "set-global-staff-size: not in toplevel scope" msgstr "set-global-staff-size: niet op topniveau" -#: paper.scm:132 +#: paper.scm:296 #, scheme-format msgid "This is not a \\layout {} object, ~S" msgstr "Dit is geen \\layout {} object, ~S" -#: paper.scm:144 +#: paper.scm:308 #, scheme-format -msgid "Unknown papersize: ~a" +msgid "Unknown paper size: ~a" msgstr "Onbekende papiergrootte: ~a" #. TODO: should raise (generic) exception with throw, and catch #. that in parse-scm.cc -#: paper.scm:159 +#: paper.scm:323 msgid "Must use #(set-paper-size .. ) within \\paper { ... }" msgstr "Moet #(set-paper-size .. ) gebruiken in \\paper { ... }" -#: parser-clef.scm:127 +#: parser-clef.scm:141 parser-clef.scm:181 #, scheme-format msgid "unknown clef type `~a'" msgstr "onbekend sleuteltype `~a'" -#: parser-clef.scm:128 +#: parser-clef.scm:142 parser-clef.scm:182 #, scheme-format msgid "supported clefs: ~a" msgstr "ondersteunde sleutels: ~a" -#: ps-to-png.scm:64 +#: ps-to-png.scm:74 #, scheme-format msgid "~a exited with status: ~S" msgstr "~a sloot af met status: ~S" -#: to-xml.scm:180 +#: to-xml.scm:191 #, scheme-format msgid "assertion failed: ~S" msgstr "assertie gefaald: ~S" +#: translation-functions.scm:341 +#, scheme-format +msgid "Negative fret for pitch ~a on string ~a" +msgstr "" + +#: translation-functions.scm:385 +#, scheme-format +msgid "No open string for pitch ~a" +msgstr "" + +#: translation-functions.scm:400 +#, scheme-format +msgid "Requested string for pitch requires negative fret: string ~a pitch ~a" +msgstr "" + +#: translation-functions.scm:401 +msgid "Ignoring string request." +msgstr "" + +#: translation-functions.scm:414 +#, scheme-format +msgid "No string for pitch ~a (given frets ~a)" +msgstr "" + +#: translation-functions.scm:515 +#, scheme-format +msgid "" +"No label for fret ~a (on string ~a);\n" +"only ~a fret labels provided" +msgstr "" + +#~ msgid "no feasible beam position" +#~ msgstr "geen werkbare waardestreeppositie gevonden" + +#~ msgid "expect 2 elements for chord tremolo, found %d" +#~ msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden" + +#~ msgid "program has no such type: `%s'" +#~ msgstr "programma heeft geen dergelijk type: `%s'" + +#~ msgid "Rebuilding FontConfig cache %s, this may take a while..." +#~ msgstr "Herbouwen van FontConfig cache %s, dit kan wel even duren..." + +#~ msgid "[%d: %d pages]" +#~ msgstr "[%d: %d pagina's]" + +#~ msgid "[%d: %d or %d pages]" +#~ msgstr "[%d: %d of %d pagina's]" + +#~ msgid "Solving %d page-breaking chunks..." +#~ msgstr "Berekenen van %d pagina-afbreek brokken..." + +#~ msgid "staff-span event has no direction" +#~ msgstr "notenbalk-span gebeurtenis heeft geen richting" + +#~ msgid "cannot convert to ~S" +#~ msgstr "kan niet converteren naar ~S" + +#~ msgid "expecting 2 elements for chord tremolo, found ~a" +#~ msgstr "verwacht 2 elementen voor akkoordtremolo, ~a gevonden" + +#~ msgid "Report bugs via" +#~ msgstr "" +#~ "Meld fouten in het programma via %;\n" +#~ "meld onjuistheden in de vertaling aan of ." + +#~ msgid "" +#~ "extract all PostScript fonts into INPUT.psfonts for LaTeX\n" +#~ "must use this with dvips -h INPUT.psfonts" +#~ msgstr "" +#~ "extraheer alle PostScript fonts naar BESTAND voor LaTeX\n" +#~ "dit dient gebruikt te worden met dvips -h BESTAND" + +#~ msgid "option --psfonts not used" +#~ msgstr "optie --psfonts niet gebruikt" + +#~ msgid "processing with dvips will have no fonts" +#~ msgstr "verwerking met dvips zal geen fonts hebben" + +#~ msgid "DVIPS usage:" +#~ msgstr "DVIPS gebruik:" + +#~ msgid "" +#~ "This program is free software. It is covered by the GNU General Public\n" +#~ "License and you are welcome to change it and/or distribute copies of it\n" +#~ "under certain conditions. Invoke as `%s --warranty' for more\n" +#~ "information." +#~ msgstr "" +#~ "Dit is vrije programmatuur. Het valt onder de GNU Algemene Openbare\n" +#~ "Licentie (General Public Licence), en u wordt uitgenodigd het te\n" +#~ "veranderen en/of te verspreiden onder bepaalde voorwaarden. Roep aan\n" +#~ "als `%s --warranty' voor meer informatie." + +#~ msgid "ignoring unknown accidental rule: %s" +#~ msgstr "negeren van onbekende voorteken regel: %s" + +#~ msgid "tried to get a translation for something that is no child of mine" +#~ msgstr "" +#~ "probeerde een verplaatsing te verkrijgen voor iets wat geen kind van mij " +#~ "is" + +#~ msgid "tried to calculate pure-height at a non-breakpoint" +#~ msgstr "probeerde pure-hoogte te berekenen op een niet-breekpunt" + +#~ msgid "crescendo too small" +#~ msgstr "crescendo te klein" + +#~ msgid "deprecated function called: %s" +#~ msgstr "verouderde functie aangeroepen: %s" + +#~ msgid "generate DVI (tex backend only)" +#~ msgstr "genereer DVI (alleen tex backend)" + +#~ msgid "generate TeX (tex backend only)" +#~ msgstr "genereer TeX (alleen tex backend)" + +#~ msgid "cannot find start of trill spanner" +#~ msgstr "kan start van triller spanner niet vinden" + +#~ msgid "already have a trill spanner" +#~ msgstr "heb al een tekst spanner" + +#~ msgid "cannot generate ~S using the postscript back-end" +#~ msgstr "kan ~S niet genereren, gebruikmakend van de postscript achterkant" + +#~ msgid "TeX file name must not contain whitespace: `~a'" +#~ msgstr "TeX bestandsnaam mag geen spaties bevatten: `~a'" + +#~ msgid "Can't fit systems on page -- ignoring between-system-padding" +#~ msgstr "" +#~ "Kan systemen niet op pagina gepast krijgen -- negeren van between-system-" +#~ "padding" + +#~ msgid "utf-8-string encountered in PS backend" +#~ msgstr "utf-8-string tegengekomen in in PS backend" + #~ msgid "lilylib module" #~ msgstr "lilylib module" @@ -2347,14 +3644,16 @@ msgstr "assertie gefaald: ~S" #~ "Example usage:\n" #~ "\n" #~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n" -#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n" +#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" " +#~ "BOOK\n" #~ " lilypond-book --process='lilypond-bin -I include' BOOK\n" #~ "\n" #~ msgstr "" #~ "Verwerk LilyPond snippers in hybride HTML, LaTeX of texinfo dokument.\n" #~ "Gebruiksvoorbeeld:\n" #~ " lilypond-book --filter=\\\"tr '[a-z]' '[A-Z]'\\\" BOEK\\n\"\n" -#~ " lilypond-book --filter=\\\"convert-ly --no-version --from=2.0.0 -\\\" BOEK\\n\n" +#~ " lilypond-book --filter=\\\"convert-ly --no-version --from=2.0.0 -\\\" " +#~ "BOEK\\n\n" #~ " lilypond-book --process='lilypond-bin -I invoeging' BOEK\\n\"\n" #~ msgid "EXT" @@ -2372,9 +3671,6 @@ msgstr "assertie gefaald: ~S" #~ msgid "write Makefile dependencies for every input file" #~ msgstr "schrijf Makefile afhankelijkheden voor elk invoerbestand" -#~ msgid "print even more output" -#~ msgstr "toon nog meer uitvoer" - #~ msgid "find pfa fonts used in FILE" #~ msgstr "zoek pfa fonts gebruikt in BESTAND" @@ -2464,13 +3760,18 @@ msgstr "assertie gefaald: ~S" #~ msgstr "geen bestanden gespecificeerd op de commandoregel" #~ msgid "Running LilyPond failed. Rerun with --verbose for a trace." -#~ msgstr "Draaien van LilyPond gefaald. Draai opnieuw met --verbose voor een foutpad." +#~ msgstr "" +#~ "Draaien van LilyPond gefaald. Draai opnieuw met --verbose voor een " +#~ "foutpad." #~ msgid "Failed to make PS file. Rerun with --verbose for a trace." -#~ msgstr "Gefaald in het maken van een PS bestand. Draai opnieuw met --verbose voor een foutpad." +#~ msgstr "" +#~ "Gefaald in het maken van een PS bestand. Draai opnieuw met --verbose " +#~ "voor een foutpad." #~ msgid "Running LaTeX failed. Rerun with --verbose for a trace." -#~ msgstr "Draaien van LaTeX gefaald. Draai opnieuw met --verbose voor een foutpad." +#~ msgstr "" +#~ "Draaien van LaTeX gefaald. Draai opnieuw met --verbose voor een foutpad." #~ msgid "%s output to ..." #~ msgstr "%s uitvoer naar ..." @@ -2521,13 +3822,16 @@ msgstr "assertie gefaald: ~S" #~ msgstr "komt niet overeen: `%s'" #~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files." -#~ msgstr "Herbouw alle .afm bestanden en verwijder alle .pk en .tfm bestanden." +#~ msgstr "" +#~ "Herbouw alle .afm bestanden en verwijder alle .pk en .tfm bestanden." #~ msgid "Rerun with -V to show font paths." #~ msgstr "Draai opnieuw met -V voor het tonen van fontpaden." #~ msgid "A script for removing font-files is delivered with the source-code:" -#~ msgstr "Een script ter verwijdering van fontbestanden is meegeleverd bij de bron-code:" +#~ msgstr "" +#~ "Een script ter verwijdering van fontbestanden is meegeleverd bij de bron-" +#~ "code:" #~ msgid "Loading default font" #~ msgstr "Laad verstek font" @@ -2577,11 +3881,16 @@ msgstr "assertie gefaald: ~S" #~ msgid "kpathsea can not find TFM file: `%s'" #~ msgstr "kpathsea kan TFM bestand niet vinden: `%s'" -#~ msgid "round filled box horizontal extent smaller than blot; decreasing blot" -#~ msgstr "rond gevulde doos horizontale afmetingen kleiner dan blot; verkleinen van blot" +#~ msgid "" +#~ "round filled box horizontal extent smaller than blot; decreasing blot" +#~ msgstr "" +#~ "rond gevulde doos horizontale afmetingen kleiner dan blot; verkleinen van " +#~ "blot" #~ msgid "round filled box vertical extent smaller than blot; decreasing blot" -#~ msgstr "rond gevulde doos vertikale afmetingen kleiner dan blot; verkleinen van blot" +#~ msgstr "" +#~ "rond gevulde doos vertikale afmetingen kleiner dan blot; verkleinen van " +#~ "blot" #~ msgid "set options, use -e '(ly-option-usage)' for help" #~ msgstr "zet opties, gebruik -e '(ly-option-usage)' voor hulp" @@ -2595,9 +3904,6 @@ msgstr "assertie gefaald: ~S" #~ msgid "prepend DIR to dependencies" #~ msgstr "voeg DIR voor aan afhankelijkheden" -#~ msgid "run in safe mode" -#~ msgstr "draai in veilige modus" - #~ msgid "This option is for developers only." #~ msgstr "Deze optie is uitsluitend bestemd voor ontwikkelaars." @@ -2646,11 +3952,17 @@ msgstr "assertie gefaald: ~S" #~ msgid " Evalute the Scheme EXPR before parsing any .ly files." #~ msgstr " Evalueer de Scheme EXPR alvorens enig .ly bestand te ontleden." -#~ msgid " Multiple -e options may be given, they will be evaluated sequentially." -#~ msgstr " Verscheidene -e opties mogen worden gegeven, deze zullen sequentieel worden geëvalueerd." +#~ msgid "" +#~ " Multiple -e options may be given, they will be evaluated sequentially." +#~ msgstr "" +#~ " Verscheidene -e opties mogen worden gegeven, deze zullen sequentieel " +#~ "worden geëvalueerd." -#~ msgid " The function ly-set-option allows for access to some internal variables." -#~ msgstr " De functie ly-set-option verschaft toegang tot bepaalde interne variabelen." +#~ msgid "" +#~ " The function ly-set-option allows for access to some internal variables." +#~ msgstr "" +#~ " De functie ly-set-option verschaft toegang tot bepaalde interne " +#~ "variabelen." #~ msgid "Usage: lilypond-bin -e \"(ly-set-option SYMBOL VAL)\"" #~ msgstr "Gebruik: lilypond-bin -e \"(ly-set-option SYMBOOL WAARDE)\"" @@ -2685,8 +3997,10 @@ msgstr "assertie gefaald: ~S" #~ msgid "TFM header of `%s' has only %u word (s)" #~ msgstr "TFM kop van `%s' heeft slechts %u woord(en)" -#~ msgid "%s: TFM file has %u parameters, which is more than the %u I can handle" -#~ msgstr "%s: TFM bestand heeft %u parameters, wat meer is dan de %u die ik aan kan" +#~ msgid "" +#~ "%s: TFM file has %u parameters, which is more than the %u I can handle" +#~ msgstr "" +#~ "%s: TFM bestand heeft %u parameters, wat meer is dan de %u die ik aan kan" #~ msgid "no one to print a tuplet start bracket" #~ msgstr "niemand om een x-ool start haak af te drukken" @@ -2703,9 +4017,6 @@ msgstr "assertie gefaald: ~S" #~ msgid "Identifier should have alphabetic characters only" #~ msgstr "Identifier mag uitsluitend alfabetische tekens hebben" -#~ msgid "\\apply takes function argument" -#~ msgstr "\\apply neemt een functieargument" - #~ msgid "Can't find music" #~ msgstr "Kan geen muziek vinden" @@ -2724,14 +4035,16 @@ msgstr "assertie gefaald: ~S" #~ msgid "Incorrect lilypond version: %s (%s, %s)" #~ msgstr "Verkeerde lilypond versie: %s (%s, %s)" -#~ msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." -#~ msgstr "Deze pagina is voor %(package_name)s-%(package_version)s (%(branch_str)s)." - -#~ msgid "Report errors to %(mail_address)s." -#~ msgstr "Meld fouten naar %(mail_address)s." +#~ msgid "" +#~ "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)." +#~ msgstr "" +#~ "Deze pagina is voor %(package_name)s-%(package_version)s (%(branch_str)s)." -#~ msgid "Other languages: %s." -#~ msgstr "Andere talen: %s." +#~ msgid "" +#~ "Report errors to %(mail_address)s." +#~ msgstr "" +#~ "Meld fouten naar %(mail_address)s." #~ msgid "About automatic language selection." #~ msgstr "Gebruik van automatische taalkeuze.\n" @@ -2742,9 +4055,6 @@ msgstr "assertie gefaald: ~S" #~ msgid "development-branch" #~ msgstr "ontwikkel tak" -#~ msgid "English" -#~ msgstr "Engels" - #~ msgid "French" #~ msgstr "Frans" @@ -2754,15 +4064,6 @@ msgstr "assertie gefaald: ~S" #~ msgid "German" #~ msgstr "Duits" -#~ msgid "Finding the ideal number of pages..." -#~ msgstr "Zoeken naar het ideale aantal pagina's..." - -#~ msgid "Fitting music on 1 page..." -#~ msgstr "Muziek passend maken op 1 pagina..." - -#~ msgid "Fitting music on %d or %d pages..." -#~ msgstr "Muziek passend maken op %d of %d pagina's..." - #~ msgid "" #~ "vertical alignment called before line-breaking.\n" #~ "Only do cross-staff spanners with PianoStaff." diff --git a/po/uk.po b/po/uk.po index 4640fa8528..54d4f36354 100644 --- a/po/uk.po +++ b/po/uk.po @@ -1,6 +1,6 @@ # Ukrainian translations for lilypond package # Переклад українською для пакету lilypond. -# Copyright (C) 2007--2009 THE PACKAGE'S COPYRIGHT HOLDER +# Copyright (C) 2007--2011 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Youri Bulka , 2007. # diff --git a/po/vi.po b/po/vi.po index aa97f34456..891411f865 100644 --- a/po/vi.po +++ b/po/vi.po @@ -1,21 +1,21 @@ # Vietnamese translation for Lilypond. -# Copyright © 2008 Free Software Foundation, Inc. +# Copyright © 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the lilypond package. -# Clytie Siddall , 2007-2008. +# Clytie Siddall , 2007-2009. # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.11.57\n" +"Project-Id-Version: lilypond 2.12.0\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2008-08-23 18:49+0200\n" -"PO-Revision-Date: 2008-09-08 18:16+0930\n" +"POT-Creation-Date: 2008-12-20 11:58+0100\n" +"PO-Revision-Date: 2009-01-27 00:20+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: LocFactoryEditor 1.7b3\n" +"X-Generator: LocFactoryEditor 1.8\n" #: convertrules.py:12 #, python-format @@ -31,7 +31,7 @@ msgstr "Xem sổ tay để tìm chi tiết, và tự cập nhật." msgid "%s has been replaced by %s" msgstr "%s đã bị thay thế bằng %s" -#: convertrules.py:24 musicexp.py:16 convert-ly.py:48 lilypond-book.py:82 +#: convertrules.py:24 musicexp.py:16 convert-ly.py:50 lilypond-book.py:94 #: warn.cc:48 input.cc:90 #, c-format, python-format msgid "warning: %s" @@ -427,6 +427,22 @@ msgstr "Trục và hướng lúc bây giờ nằm trước mã định dạng:\n msgid "\\put-adjacent axis dir markup markup." msgstr "mã định dạng thư mục trục \\put-adjacent." +#: convertrules.py:2832 +msgid "re-definition of InnerStaffGroup.\n" +msgstr "định nghĩa lại InnerStaffGroup.\n" + +#: convertrules.py:2838 +msgid "re-definition of InnerChoirStaff.\n" +msgstr "định nghĩa lại InnerChoirStaff.\n" + +#: convertrules.py:2851 +msgid "stringTuning must be added to addChordShape call.\n" +msgstr "Phải thêm stringTuning vào cuộc gọi addChordShape.\n" + +#: convertrules.py:2857 +msgid "stringTuning must be added to chord-shape call.\n" +msgstr "Phải thêm stringTuning vào cuộc gọi hình hợp âm.\n" + #: fontextract.py:25 #, python-format msgid "Scanning %s" @@ -442,56 +458,90 @@ msgstr "Đã giải nén %s" msgid "Writing fonts to %s" msgstr "Đang ghi các phông vào %s" -#: lilylib.py:101 lilylib.py:152 +#: lilylib.py:91 lilylib.py:142 #, python-format msgid "Invoking `%s'" msgstr "Đang gọi « %s »" -#: lilylib.py:103 lilylib.py:154 +#: lilylib.py:93 lilylib.py:144 #, python-format msgid "Running %s..." msgstr "Đang chạy %s..." -#: lilylib.py:219 +#: lilylib.py:209 #, python-format msgid "Usage: %s" msgstr "Cách sử dụng: %s" -#: musicexp.py:585 +#: musicexp.py:215 musicexp.py:220 +msgid "Language does not support microtones contained in the piece" +msgstr "Ngôn ngữ không hỗ trợ âm vi nằm trong bản nhạc" + +#: musicexp.py:482 +msgid "Tuplet brackets of curved shape are not correctly implemented" +msgstr "Dấu ngoặc liên tư có hình cong chưa được thực hiện đúng" + +#. TODO: Implement this using actual_type and normal_type! +#: musicexp.py:511 +msgid "Tuplet brackets displaying both note durations are not implemented, using default" +msgstr "Dấu ngoặc liên tư hiển thị cả hai trường độ nốt nhạc chưa được thực hiện nên dùng giá trị mặc định " + +#: musicexp.py:656 #, python-format msgid "unable to set the music %(music)s for the repeat %(repeat)s" msgstr "không thể đặt âm nhạc %(music)s cho lần lặp lại %(repeat)s" -#: musicexp.py:594 +#: musicexp.py:665 msgid "encountered repeat without body" msgstr "gặp lần lặp lại không có thân" -#: musicxml.py:13 convert-ly.py:51 lilypond-book.py:85 warn.cc:54 input.cc:96 +#. no self.elements! +#: musicexp.py:835 +#, python-format +msgid "Grace note with no following music: %s" +msgstr "Âm hiệu hoa mỹ không có nhạc theo sau : %s" + +#: musicexp.py:997 +#, python-format +msgid "Invalid octave shift size found: %s. Using no shift." +msgstr "Tìm thấy kích cỡ dịch quãng tám không hợp lệ: %s. Vì thế không dịch." + +#: musicexp.py:1455 +#, python-format +msgid "Unable to convert alteration %s to a lilypond expression" +msgstr "Không thể chuyển đổi sự sửa đổi %s sang một biểu thức lilypond" + +#: musicxml.py:13 convert-ly.py:53 lilypond-book.py:97 warn.cc:54 input.cc:96 #: input.cc:104 #, c-format, python-format msgid "error: %s" msgstr "lỗi: %s" -#: musicxml.py:298 -msgid "requested time signature, but time sig is unknown" -msgstr "đã yêu cầu ký hiệu nhịp điệu, nhưng không rõ loại nhịp" +#. TODO: Handle pieces without a time signature! +#: musicxml.py:357 +msgid "Senza-misura time signatures are not yet supported!" +msgstr "Chưa hỗ trợ ký hiệu nhịp điệu kiểu senza-misura." + +#: musicxml.py:375 +msgid "Unable to interpret time signature! Falling back to 4/4." +msgstr "Không thể giải thích ký hiệu nhịp điệu nên trả lại 4/4." -#: musicxml.py:354 +#: musicxml.py:431 #, python-format -msgid "Encountered note at %s with %s duration (no element):" -msgstr "Gặp nốt ở %s với thời lượng %s (không có phần tử ):" +msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!" +msgstr "Quãng tám sửa đổi khoá được nhập cho một số sửa đổi mà không tồn tại %s, những số sẵn có : %s" -#: musicxml.py:388 +#: musicxml.py:519 #, python-format msgid "Unable to find instrument for ID=%s\n" msgstr "Không tìm thấy nhạc khí cho ID=%s\n" -#: abc2ly.py:1342 convert-ly.py:72 lilypond-book.py:109 midi2ly.py:846 +#: abc2ly.py:1341 convert-ly.py:74 lilypond-book.py:121 midi2ly.py:845 #, python-format msgid "%s [OPTION]... FILE" msgstr "%s [TÙY_CHỌN]... TẬP_TIN" -#: abc2ly.py:1343 +#: abc2ly.py:1342 #, python-format msgid "" "abc2ly converts ABC music files (see\n" @@ -500,105 +550,110 @@ msgstr "" "abc2ly chuyển đổi tập tin âm nhạc kiểu ABC\n" "(xem %s) sang dữ liệu nhập vào LilyPond.\n" -#: abc2ly.py:1351 convert-ly.py:79 etf2ly.py:1190 lilypond-book.py:195 -#: midi2ly.py:882 musicxml2ly.py:2185 main.cc:161 +#: abc2ly.py:1350 convert-ly.py:81 etf2ly.py:1190 lilypond-book.py:207 +#: midi2ly.py:881 musicxml2ly.py:2590 main.cc:156 msgid "show version number and exit" msgstr "hiển thị số phiên bản rồi thoát" -#: abc2ly.py:1355 convert-ly.py:83 etf2ly.py:1186 lilypond-book.py:126 -#: midi2ly.py:861 musicxml2ly.py:2167 main.cc:150 +#: abc2ly.py:1354 convert-ly.py:85 etf2ly.py:1186 lilypond-book.py:138 +#: midi2ly.py:860 musicxml2ly.py:2572 main.cc:145 msgid "show this help and exit" msgstr "hiển thị trợ giúp này rồi thoát" -#: abc2ly.py:1357 etf2ly.py:1191 midi2ly.py:865 +#: abc2ly.py:1356 etf2ly.py:1191 midi2ly.py:864 msgid "write output to FILE" msgstr "xuất ra TẬP_TIN" -#: abc2ly.py:1359 +#: abc2ly.py:1358 msgid "be strict about success" msgstr "chặt chẽ về thành công" -#: abc2ly.py:1361 +#: abc2ly.py:1360 msgid "preserve ABC's notion of beams" msgstr "bảo tồn ý kiến ABC về tia" -#: abc2ly.py:1363 convert-ly.py:120 etf2ly.py:1199 lilypond-book.py:202 -#: midi2ly.py:894 musicxml2ly.py:2240 -msgid "Report bugs via" -msgstr "Thông báo lỗi thông qua" +#. Translators, please translate this string as +#. "Report bugs in English via %s", +#. or if there is a LilyPond users list or forum in your language +#. "Report bugs in English via %s or in YOUR_LANG via URI" +#: abc2ly.py:1363 convert-ly.py:123 etf2ly.py:1200 lilypond-book.py:214 +#: midi2ly.py:894 musicxml2ly.py:2646 main.cc:265 +#, c-format, python-format +msgid "Report bugs via %s" +msgstr "Hãy thông báo lỗi cho %s" -#: convert-ly.py:31 +#: convert-ly.py:33 msgid "" "Update LilyPond input to newer version. By default, update from the\n" "version taken from the \\version command, to the current LilyPond version." msgstr "Cập nhật kết nhập Lilypond lên phiên bản mới hơn. Mặc định là cập nhật từ phiên bản đưa ra bằng lệnh « \\version », lên phiên bản Lilypond hiện thời." -#: convert-ly.py:33 lilypond-book.py:59 +#: convert-ly.py:35 lilypond-book.py:71 msgid "Examples:" msgstr "Thí dụ :" -#: convert-ly.py:67 etf2ly.py:1173 lilypond-book.py:105 midi2ly.py:77 +#: convert-ly.py:69 etf2ly.py:1173 lilypond-book.py:117 midi2ly.py:76 msgid "Distributed under terms of the GNU General Public License." msgstr "Được phát hành với điều kiện của Giấy phép Công cộng GNU (GPL)" -#: convert-ly.py:68 etf2ly.py:1174 lilypond-book.py:106 midi2ly.py:78 +#: convert-ly.py:70 etf2ly.py:1174 lilypond-book.py:118 midi2ly.py:77 msgid "It comes with NO WARRANTY." msgstr "Nó KHÔNG BẢO HÀNH GÌ CẢ." -#: convert-ly.py:87 convert-ly.py:114 +#: convert-ly.py:89 convert-ly.py:116 msgid "VERSION" msgstr "PHIÊN BẢN" -#: convert-ly.py:89 +#: convert-ly.py:91 msgid "start from VERSION [default: \\version found in file]" msgstr "bắt đầu từ PHIÊN BẢN [mặc định: \\version được tìm trong tập tin]" -#: convert-ly.py:92 +#: convert-ly.py:94 msgid "edit in place" msgstr "sửa tại chỗ" -#: convert-ly.py:96 +#: convert-ly.py:98 msgid "do not add \\version command if missing" msgstr "không thêm lệnh \\version nếu còn thiếu" -#: convert-ly.py:102 +#: convert-ly.py:104 #, python-format msgid "force updating \\version number to %s" msgstr "ép buộc cập nhật số thứ tự \\version (phiên bản) lên %s" -#: convert-ly.py:108 +#: convert-ly.py:110 #, python-format msgid "show rules [default: -f 0, -t %s]" msgstr "hiện các quy tắc [mặc định: -f 0, -t %s]" -#: convert-ly.py:113 +#: convert-ly.py:115 #, python-format msgid "convert to VERSION [default: %s]" msgstr "chuyển đổi sang PHIÊN_BẢN [mặc định: %s]" -#: convert-ly.py:160 +#: convert-ly.py:163 msgid "Applying conversion: " msgstr "Đang áp dụng sự chuyển đổi: " -#: convert-ly.py:173 +#: convert-ly.py:176 msgid "Error while converting" msgstr "Gặp lỗi trong khi chuyển đổi" -#: convert-ly.py:175 -msgid "Stopping at last succesful rule" +#: convert-ly.py:178 +msgid "Stopping at last successful rule" msgstr "Đang dừng ở quy tắc thành công cuối cùng" -#: convert-ly.py:196 +#: convert-ly.py:199 #, python-format msgid "Processing `%s'... " msgstr "Đang xử lý « %s »... " -#: convert-ly.py:286 relocate.cc:362 source-file.cc:59 +#: convert-ly.py:289 relocate.cc:362 source-file.cc:59 #, c-format, python-format msgid "cannot open file: `%s'" msgstr "không thể mở tập tin « %s »" -#: convert-ly.py:293 +#: convert-ly.py:296 #, python-format msgid "cannot determine version for `%s'. Skipping" msgstr "không thể quyết định phiên bản cho « %s » nên bỏ qua" @@ -618,275 +673,275 @@ msgstr "" "etf2ly chuyển đổi một tập hợp con của ETF\n" "sang một tập tin Lilypond sẵn sàng dùng.\n" -#: etf2ly.py:1192 midi2ly.py:866 musicxml2ly.py:2233 main.cc:154 main.cc:159 +#: etf2ly.py:1192 midi2ly.py:865 musicxml2ly.py:2638 main.cc:149 main.cc:154 msgid "FILE" msgstr "TẬP TIN" -#: etf2ly.py:1194 lilypond-book.py:198 midi2ly.py:883 main.cc:163 +#: etf2ly.py:1194 lilypond-book.py:210 midi2ly.py:882 main.cc:158 msgid "show warranty and copyright" msgstr "hiện bảo hành và tác quyền" -#: lilypond-book.py:57 +#: lilypond-book.py:69 msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document." msgstr "Xử lý các đoạn LilyPond theo tài liệu HTML, LaTeX, texinfo hay DocBook pha giống." -#: lilypond-book.py:64 +#: lilypond-book.py:76 msgid "BOOK" msgstr "SỔ" -#: lilypond-book.py:72 +#: lilypond-book.py:84 #, python-format msgid "Exiting (%d)..." msgstr "Đang thoát (%d)..." -#: lilypond-book.py:103 +#: lilypond-book.py:115 #, python-format msgid "Copyright (c) %s by" msgstr "Tác quyền © năm %s của" -#: lilypond-book.py:113 +#: lilypond-book.py:125 msgid "FILTER" msgstr "LỌC" -#: lilypond-book.py:116 +#: lilypond-book.py:128 msgid "pipe snippets through FILTER [default: `convert-ly -n -']" msgstr "gửi các đoạn qua ống dẫn và bộ LỌC [mặc định: « convert-ly -n - »]" -#: lilypond-book.py:120 +#: lilypond-book.py:132 msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)" msgstr "dùng định dạng xuất ĐỊNH DẠNG (texi [mặc định], texi-html, latex, html, docbook)" -#: lilypond-book.py:121 +#: lilypond-book.py:133 msgid "FORMAT" msgstr "ĐỊNH_DẠNG" -#: lilypond-book.py:128 +#: lilypond-book.py:140 msgid "add DIR to include path" msgstr "thêm THƯ_MỤC vào đường dẫn bao gồm" -#: lilypond-book.py:129 lilypond-book.py:136 lilypond-book.py:154 -#: lilypond-book.py:160 lilypond-book.py:166 lilypond-book.py:172 main.cc:153 +#: lilypond-book.py:141 lilypond-book.py:148 lilypond-book.py:166 +#: lilypond-book.py:172 lilypond-book.py:178 lilypond-book.py:184 main.cc:148 msgid "DIR" msgstr "THƯ_MỤC" -#: lilypond-book.py:134 +#: lilypond-book.py:146 msgid "format Texinfo output so that Info will look for images of music in DIR" msgstr "định dạng kết xuất Texinfo để mà Info sẽ tìm ảnh nhạc trong THƯ_MỤC" -#: lilypond-book.py:141 +#: lilypond-book.py:153 msgid "run executable PROG instead of latex" msgstr "chạy PROG (chương trình) có thể thực thi, thay cho latex" -#: lilypond-book.py:142 +#: lilypond-book.py:154 msgid "PROG" msgstr "PROG" -#: lilypond-book.py:147 +#: lilypond-book.py:159 msgid "PAD" msgstr "ĐỆM" -#: lilypond-book.py:149 +#: lilypond-book.py:161 msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" msgstr "đệm bên trái của bản nhạc để sắp hàng nhạc, bất chấp các số thứ tự gạch nhịp (theo mili-mét)" -#: lilypond-book.py:153 +#: lilypond-book.py:165 msgid "write output to DIR" msgstr "xuất ra THƯ_MỤC" -#: lilypond-book.py:159 +#: lilypond-book.py:171 msgid "do not fail if no lilypond output is found" msgstr "không tìm thấy kết xuất lilypond thì vẫn thành công" -#: lilypond-book.py:165 +#: lilypond-book.py:177 msgid "do not fail if no PNG images are found for EPS files" msgstr "không tìm thấy ảnh PNG cho tập tin EPS thì vẫn thành công" -#: lilypond-book.py:171 +#: lilypond-book.py:183 msgid "write lily-XXX files to DIR, link into --output dir" msgstr "ghi các tập tin lily-XXX vào TMỤC, liên kết vào thư mục --output (xuất)" -#: lilypond-book.py:176 +#: lilypond-book.py:188 msgid "COMMAND" msgstr "LỆNH" -#: lilypond-book.py:177 +#: lilypond-book.py:189 msgid "process ly_files using COMMAND FILE..." msgstr "xử lý các tập tin ly_file dùng LỆNH TẬP TIN..." -#: lilypond-book.py:184 +#: lilypond-book.py:196 msgid "create PDF files for use with PDFTeX" msgstr "tạo tập tin PDF để sử dụng với PDFTeX" -#: lilypond-book.py:187 midi2ly.py:876 musicxml2ly.py:2190 main.cc:162 +#: lilypond-book.py:199 midi2ly.py:875 musicxml2ly.py:2595 main.cc:157 msgid "be verbose" msgstr "xuất chi tiết" -#: lilypond-book.py:825 +#: lilypond-book.py:871 #, python-format msgid "file not found: %s" msgstr "không tìm thấy tập tin: %s" -#: lilypond-book.py:1087 +#: lilypond-book.py:1142 #, python-format msgid "deprecated ly-option used: %s=%s" msgstr "dùng tùy chọn ly-option bị phản đối: %s=%s" -#: lilypond-book.py:1089 +#: lilypond-book.py:1144 #, python-format msgid "compatibility mode translation: %s=%s" msgstr "dịch chế độ khả năng tương thích: %s=%s" -#: lilypond-book.py:1092 +#: lilypond-book.py:1147 #, python-format msgid "deprecated ly-option used: %s" msgstr "dùng tùy chọn ly-option bị phản đối: %s" -#: lilypond-book.py:1094 +#: lilypond-book.py:1149 #, python-format msgid "compatibility mode translation: %s" msgstr "dịch chế độ khả năng tương thích: %s" -#: lilypond-book.py:1112 +#: lilypond-book.py:1167 #, python-format msgid "ignoring unknown ly option: %s" msgstr "đang bỏ qua tùy chọn ly lạ: %s" -#: lilypond-book.py:1538 +#: lilypond-book.py:1604 #, python-format msgid "Opening filter `%s'" msgstr "Đang mở bộ lọc « %s »" -#: lilypond-book.py:1555 +#: lilypond-book.py:1621 #, python-format msgid "`%s' failed (%d)" msgstr "« %s » bị lỗi (%d)" -#: lilypond-book.py:1556 +#: lilypond-book.py:1622 msgid "The error log is as follows:" msgstr "Bản ghi lỗi bên dưới:" -#: lilypond-book.py:1618 +#: lilypond-book.py:1684 msgid "cannot find \\begin{document} in LaTeX document" msgstr "không tìm thấy tài liệu bắt đầu « \\begin{document} » trong tài liệu LaTeX" -#: lilypond-book.py:1718 +#: lilypond-book.py:1784 msgid "Writing snippets..." msgstr "Đang ghi các đoạn..." -#: lilypond-book.py:1724 +#: lilypond-book.py:1790 msgid "Processing..." msgstr "Đang xử lý..." -#: lilypond-book.py:1730 +#: lilypond-book.py:1796 msgid "All snippets are up to date..." msgstr "Mọi đoạn là hiện thời..." -#: lilypond-book.py:1764 +#: lilypond-book.py:1830 #, python-format msgid "cannot determine format for: %s" msgstr "không thể xác định định dạng cho : %s" -#: lilypond-book.py:1775 +#: lilypond-book.py:1841 #, python-format msgid "%s is up to date." msgstr "%s là hiện thời." -#: lilypond-book.py:1789 +#: lilypond-book.py:1855 #, python-format msgid "Writing `%s'..." msgstr "Đang ghi « %s »..." -#: lilypond-book.py:1847 +#: lilypond-book.py:1913 msgid "Output would overwrite input file; use --output." msgstr "Kết xuất sẽ ghi đè lên tập tin nhập vào : dùng tùy chọn « --output »." -#: lilypond-book.py:1851 +#: lilypond-book.py:1917 #, python-format msgid "Reading %s..." msgstr "Đang đọc %s..." -#: lilypond-book.py:1870 +#: lilypond-book.py:1937 msgid "Dissecting..." msgstr "Đang phân chia..." -#: lilypond-book.py:1886 +#: lilypond-book.py:1953 #, python-format msgid "Compiling %s..." msgstr "Đang biên dịch %s..." -#: lilypond-book.py:1895 +#: lilypond-book.py:1962 #, python-format msgid "Processing include: %s" msgstr "Đang xử lý đồ bao gồm: %s" -#: lilypond-book.py:1907 +#: lilypond-book.py:1974 #, python-format msgid "Removing `%s'" msgstr "Đang gỡ bỏ « %s »" -#: midi2ly.py:85 lily-library.scm:620 lily-library.scm:629 +#: midi2ly.py:84 lily-library.scm:634 lily-library.scm:643 msgid "warning: " msgstr "cảnh báo : " -#: midi2ly.py:88 midi2ly.py:907 +#: midi2ly.py:87 midi2ly.py:907 msgid "error: " msgstr "lỗi: " -#: midi2ly.py:89 +#: midi2ly.py:88 msgid "Exiting... " msgstr "Đang thoát... " -#: midi2ly.py:834 +#: midi2ly.py:833 #, python-format msgid "%s output to `%s'..." msgstr "kết xuất %s vào « %s »..." -#: midi2ly.py:847 +#: midi2ly.py:846 #, python-format msgid "Convert %s to LilyPond input.\n" msgstr "Chuyển đổi %s sang dữ liệu nhập vào Lilypond.\n" -#: midi2ly.py:852 +#: midi2ly.py:851 msgid "print absolute pitches" msgstr "in ra độ cao thấp tuyệt đối" -#: midi2ly.py:854 midi2ly.py:869 +#: midi2ly.py:853 midi2ly.py:868 msgid "DUR" msgstr "THỜI_LƯỢNG" -#: midi2ly.py:855 +#: midi2ly.py:854 msgid "quantise note durations on DUR" msgstr "lượng tử hoá các thời gian nốt trong THỜI_LƯỢNG" -#: midi2ly.py:858 +#: midi2ly.py:857 msgid "print explicit durations" msgstr "in ra các thời lượng dứt khoát" -#: midi2ly.py:862 +#: midi2ly.py:861 msgid "set key: ALT=+sharps|-flats; MINOR=1" msgstr "đặt khoá: ALT=+thăng|-giáng; THỨ=1" -#: midi2ly.py:863 +#: midi2ly.py:862 msgid "ALT[:MINOR]" msgstr "ALT[:THỨ]" -#: midi2ly.py:868 +#: midi2ly.py:867 msgid "quantise note starts on DUR" msgstr "lượng tử hoá sự bắt đầu nốt trong THỜI_LƯỢNG" -#: midi2ly.py:871 +#: midi2ly.py:870 msgid "DUR*NUM/DEN" msgstr "THỜI_LƯỢNG*SỐ/MẬT_ĐỘ" -#: midi2ly.py:874 +#: midi2ly.py:873 msgid "allow tuplet durations DUR*NUM/DEN" msgstr "cho phép thời gian nhiều nốt THỜI_LƯỢNG*SỐ/MẬT_ĐỘ" -#: midi2ly.py:886 +#: midi2ly.py:885 msgid "treat every text as a lyric" msgstr "xử lý mọi văn bản là lời nhạc" -#: midi2ly.py:889 +#: midi2ly.py:888 msgid "Examples" msgstr "Ví dụ" @@ -894,96 +949,121 @@ msgstr "Ví dụ" msgid "no files specified on command line." msgstr "chưa xác định tập tin trên dòng lệnh." -#: musicxml2ly.py:213 +#: musicxml2ly.py:343 msgid "Encountered file created by Dolet 3.4 for Sibelius, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" msgstr "Gặp tập tin tạo bởi Dolet 3.4 cho Sibelius, mà chứa thông tin sai về gửi chùm: tất cả các thông tin về gửi chùm trong tập tin MusicXML đều bị bở qua." -#: musicxml2ly.py:229 musicxml2ly.py:231 +#: musicxml2ly.py:346 +msgid "Encountered file created by Noteworthy Composer's nwc2xml, containing wrong beaming information. All beaming information in the MusicXML file will be ignored" +msgstr "Gặp tập tin tạo bởi nwc2xml của Noteworthy Composer, mà chứa thông tin sai về gửi chùm: tất cả các thông tin về gửi chùm trong tập tin MusicXML đều bị bở qua." + +#: musicxml2ly.py:362 musicxml2ly.py:364 #, python-format msgid "Unprocessed PartGroupInfo %s encountered" msgstr "Gặp PartGroupInfo %s chưa được xử lý" -#: musicxml2ly.py:471 +#: musicxml2ly.py:594 +#, python-format +msgid "Encountered note at %s without type and duration (=%s)" +msgstr "Gặp nốt ở %s mà không có kiểu và trường độ (=%s)" + +#: musicxml2ly.py:613 #, python-format msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration" msgstr "Gặp thời lượng hợp lý hữu tỷ với mẫu số %s, không thể chuyển đổi sang thời lượng kiểu Lilypond" -#: musicxml2ly.py:654 +#: musicxml2ly.py:868 +msgid "Unable to extract key signature!" +msgstr "Không thể giải phóng dấu hóa đầu dòng." + +#: musicxml2ly.py:895 #, python-format -msgid "unknown mode %s, expecting 'major' or 'minor'" -msgstr "không rõ chế độ %s, đợi « trưởng » hoặc « thứ »" +msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!" +msgstr "không rõ chế độ %s, mong đợi « trưởng » hoặc « thứ » hoặc một chế độ nhà thờ." -#: musicxml2ly.py:692 +#: musicxml2ly.py:968 #, python-format msgid "Encountered unprocessed marker %s\n" msgstr "Gặp dấu vết chưa được xử lý %s\n" -#: musicxml2ly.py:786 +#: musicxml2ly.py:1062 #, python-format msgid "unknown span event %s" msgstr "không rõ dữ kiện nhịp cầu %s" -#: musicxml2ly.py:796 +#: musicxml2ly.py:1072 #, python-format msgid "unknown span type %s for %s" msgstr "không rõ kiểu nhịp cầu %s cho %s" -#: musicxml2ly.py:1222 +#: musicxml2ly.py:1498 msgid "Unknown metronome mark, ignoring" msgstr "Không rõ dấu máy đánh nhịp nên bỏ qua" #. TODO: Implement the other (more complex) way for tempo marks! -#: musicxml2ly.py:1227 +#: musicxml2ly.py:1503 msgid "Metronome marks with complex relations ( in MusicXML) are not yet implemented." msgstr "Chưa thực hiện dấu máy đánh nhịp có quan hệ phức tạp ( in MusicXML)." -#: musicxml2ly.py:1383 +#: musicxml2ly.py:1703 #, python-format msgid "Unable to convert chord type %s to lilypond." msgstr "Không thể chuyển đổi kiểu hợp âm %s sang lilypond." -#: musicxml2ly.py:1529 +#: musicxml2ly.py:1849 #, python-format msgid "drum %s type unknown, please add to instrument_drumtype_dict" msgstr "không rõ kiểu cái trống %s, hãy thêm vào instrument_drumtype_dict" -#: musicxml2ly.py:1533 +#: musicxml2ly.py:1853 msgid "cannot find suitable event" msgstr "không tìm thấy dữ kiện thích hợp" -#: musicxml2ly.py:1623 +#: musicxml2ly.py:1994 #, python-format -msgid "Negative skip %s" -msgstr "Nhảy âm %s" +msgid "Negative skip %s (from position %s to %s)" +msgstr "Gặp nơi nhảy âm %s (từ vị trí %s đến %s)" -#: musicxml2ly.py:1775 +#: musicxml2ly.py:2134 #, python-format msgid "Negative skip found: from %s to %s, difference is %s" msgstr "Gặp nơi nhảy âm: từ %s đến %s, hiệu là %s" -#: musicxml2ly.py:1802 +#: musicxml2ly.py:2205 #, python-format msgid "unexpected %s; expected %s or %s or %s" msgstr "gặp %s bất thường; đợi %s hoặc %s hoặc %s" -#: musicxml2ly.py:1912 -msgid "cannot have two simultaneous slurs" +#: musicxml2ly.py:2311 +msgid "Encountered closing slur, but no slur is open" +msgstr "Gặp dấu luyến âm đóng, mà không có dấu luyến âm còn mở" + +#: musicxml2ly.py:2314 +msgid "Cannot have two simultaneous (closing) slurs" +msgstr "không thể có hai dấu luyến âm đồng thời (đóng)" + +#: musicxml2ly.py:2324 +msgid "Cannot have a slur inside another slur" +msgstr "không thể có một dấu luyến âm bên trong dấu luyến âm khác" + +#: musicxml2ly.py:2327 +msgid "Cannot have two simultaneous slurs" msgstr "không thể có hai dấu luyến âm đồng thời" -#: musicxml2ly.py:2050 +#: musicxml2ly.py:2455 #, python-format msgid "cannot simultaneously have more than one mode: %s" msgstr "không thể có nhiều chế độ đồng thời: %s" -#: musicxml2ly.py:2148 +#: musicxml2ly.py:2553 msgid "Converting to LilyPond expressions..." msgstr "Đang chuyển đổi sang biểu thức Lilypond..." -#: musicxml2ly.py:2159 +#: musicxml2ly.py:2564 msgid "musicxml2ly [OPTION]... FILE.xml" msgstr "musicxml2ly [TÙY_CHỌN]... TẬP_TIN.xml" -#: musicxml2ly.py:2161 +#: musicxml2ly.py:2566 msgid "" "Convert MusicXML from FILE.xml to LilyPond input.\n" "If the given filename is -, musicxml2ly reads from the command line.\n" @@ -991,9 +1071,9 @@ msgstr "" "Chuyển đổi MusicXML từ TẬP_TIN.xml sang dữ liệu nhập vào LilyPond.\n" "Nếu tập tin đưa ra là « - » thì musicxml2ly đọc từ dòng lệnh.\n" -#: musicxml2ly.py:2171 +#: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2009 by\n" +"Copyright (c) 2005--2011 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" @@ -1003,71 +1083,71 @@ msgstr "" " Jan Nieuwenhuizen \n" " Reinhold Kainhofer \n" -#: musicxml2ly.py:2196 +#: musicxml2ly.py:2601 msgid "use lxml.etree; uses less memory and cpu time" msgstr "dùng « lxml.etree »; nó chiếm ít bộ nhớ và thời gian CPU hơn" -#: musicxml2ly.py:2202 +#: musicxml2ly.py:2607 msgid "input file is a zip-compressed MusicXML file" msgstr "tập tin nhập vào là một tập tin MusicXML đã nén ZIP" -#: musicxml2ly.py:2208 +#: musicxml2ly.py:2613 msgid "convert pitches in relative mode (default)" msgstr "chuyển đổi các độ cao giọng ở chế độ tương đối (mặc định)" -#: musicxml2ly.py:2213 +#: musicxml2ly.py:2618 msgid "convert pitches in absolute mode" msgstr "chuyển đổi các độ cao giọng ở chế độ tuyệt đối" -#: musicxml2ly.py:2216 +#: musicxml2ly.py:2621 msgid "LANG" msgstr "VIỆT" -#: musicxml2ly.py:2218 +#: musicxml2ly.py:2623 msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly" msgstr "dùng một tập tin ngôn ngữ khác « VIỆT/ly » và các tên độ cao giọng tương ứng, v.d. « việt » ngụ ý tiếng Việt cho « việt.ly »." -#: musicxml2ly.py:2224 +#: musicxml2ly.py:2629 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc." msgstr "đừng chuyển đổi ký hiệu hướng dẫn (dấu mũ, dấu gạch dưới hoặc dấu gạch nối) cho các cách phát âm và biến cường." -#: musicxml2ly.py:2230 +#: musicxml2ly.py:2635 msgid "do not convert beaming information, use lilypond's automatic beaming instead" msgstr "không chuyển đổi thông tin về gửi chùm: dùng chức năng tự động gửi chùm để thay thế" -#: musicxml2ly.py:2238 +#: musicxml2ly.py:2643 msgid "set output filename to FILE, stdout if -" msgstr "đặt tên tập tin kết xuất thành TẬP_TIN, nếu « - » thì đầu ra tiêu chuẩn" -#: musicxml2ly.py:2320 +#: musicxml2ly.py:2726 #, python-format msgid "unknown part in part-list: %s" msgstr "không rõ phần trong part-list: %s" -#: musicxml2ly.py:2382 +#: musicxml2ly.py:2788 msgid "Input is compressed, extracting raw MusicXML data from stdin" msgstr "Nhập liệu được nén nên giải nén dữ liệu MusicXML thô từ đầu vào tiêu chuẩn" -#: musicxml2ly.py:2385 +#: musicxml2ly.py:2791 #, python-format msgid "Input file %s is compressed, extracting raw MusicXML data" msgstr "Tập tin nhập liệu %s đã được nén nên giải nén dữ liệu MusicXML thô" -#: musicxml2ly.py:2415 +#: musicxml2ly.py:2821 msgid "Reading MusicXML from Standard input ..." msgstr "Đang đọc MusicXML từ đầu vào tiêu chuẩn ..." -#: musicxml2ly.py:2417 +#: musicxml2ly.py:2823 #, python-format msgid "Reading MusicXML from %s ..." msgstr "Đang đọc MusicXML từ %s..." -#: musicxml2ly.py:2450 +#: musicxml2ly.py:2856 #, python-format msgid "Output to `%s'" msgstr "Xuất vào « %s »" -#: musicxml2ly.py:2512 +#: musicxml2ly.py:2922 #, python-format msgid "Unable to find input file %s" msgstr "Không tìm thấy tập tin nhập vào %s" @@ -1101,20 +1181,15 @@ msgstr "lỗi lập trình: %s" msgid "continuing, cross fingers" msgstr "đang tiếp tục, hy vọng" -#: accidental-engraver.cc:249 +#: accidental-engraver.cc:298 #, c-format msgid "accidental typesetting list must begin with context-name: %s" msgstr "danh sách sắp chữ dấu thăng giáng bất thường phải bắt đầu với tên ngữ cảnh: %s" -#: accidental-engraver.cc:276 +#: accidental-engraver.cc:328 #, c-format -msgid "ignoring unknown accidental rule: %s" -msgstr "đang bỏ qua quy tắc dấu thăng giáng bất thường lạ: %s" - -#: accidental-engraver.cc:292 -#, c-format -msgid "pair or context-name expected for accidental rule, found %s" -msgstr "mong đợi tên cặp hay ngữ cảnh cho quy tắc dấu thăng giáng bất thường, còn tìm %s" +msgid "procedure or context-name expected for accidental rule, found %s" +msgstr "mong đợi thủ tục hoặc tên ngữ cảnh cho quy tắc dấu thăng, còn tìm %s" #: accidental.cc:187 #, c-format @@ -1335,6 +1410,26 @@ msgstr "sự mạnh/nhẹ dần chưa chấm dứt" msgid "unterminated extender" msgstr "bộ kéo dài chưa chấm dứt" +#: font-config-scheme.cc:140 font-config.cc:57 +#, c-format +msgid "failed adding font directory: %s" +msgstr "lỗi thêm thư mục phông: %s" + +#: font-config-scheme.cc:142 font-config.cc:59 +#, c-format +msgid "adding font directory: %s" +msgstr "đang thêm thư mục phông: %s" + +#: font-config-scheme.cc:156 +#, c-format +msgid "failed adding font file: %s" +msgstr "lỗi thêm tập tin phông chữ : %s" + +#: font-config-scheme.cc:158 +#, c-format +msgid "adding font file: %s" +msgstr "đang thêm thư mục phông chữ : %s" + #: font-config.cc:28 msgid "Initializing FontConfig..." msgstr "Đang sở khởi phần mềm cấu hình phông FontConfig..." @@ -1344,15 +1439,9 @@ msgstr "Đang sở khởi phần mềm cấu hình phông FontConfig..." msgid "Rebuilding FontConfig cache %s, this may take a while..." msgstr "Đang xây dựng lại bộ nhớ tạm FontConfig %s. Có thể hơi lâu..." -#: font-config.cc:57 -#, c-format -msgid "failed adding font directory: %s" -msgstr "lỗi thêm thư mục phông: %s" - -#: font-config.cc:59 -#, c-format -msgid "adding font directory: %s" -msgstr "đang thêm thư mục phông: %s" +#: font-config.cc:63 +msgid "Building font database." +msgstr "Đang xây dựng cơ sở dữ liệu phông chữ." #: general-scheme.cc:202 msgid "infinity or NaN encountered while converting Real number" @@ -1362,7 +1451,7 @@ msgstr "gặp vô cực hay NaN (không phải con số) khi chuyển đổi s msgid "setting to zero" msgstr "đang đặt thành số không" -#: general-scheme.cc:422 output-ps.scm:62 +#: general-scheme.cc:422 output-ps.scm:63 msgid "Found infinity or nan in output. Substituting 0.0" msgstr "gặp vô cực hay NaN (không phải con số) trong kết xuất nên thay thế bằng 0.0" @@ -1522,16 +1611,16 @@ msgstr "vẫn đang làm việc gán" msgid "type check for `%s' failed; value `%s' must be of type `%s'" msgstr "lỗi kiểm tra kiểu « %s »; giá trị « %s » phải có kiểu « %s »" -#: lily-lexer.cc:251 +#: lily-lexer.cc:252 msgid "include files are not allowed in safe mode" msgstr "không cho phép tập tin bao gồm (include) trong chế độ an toàn" -#: lily-lexer.cc:270 +#: lily-lexer.cc:271 #, c-format msgid "identifier name is a keyword: `%s'" msgstr "tên bộ nhận diện là từ khoá: « %s »" -#: lily-lexer.cc:285 +#: lily-lexer.cc:286 #, c-format msgid "error at EOF: %s" msgstr "gặp lỗi ở EOF (kết thúc tập tin): %s" @@ -1556,11 +1645,11 @@ msgstr "không tìm thấy tập tin sở khởi: « %s »" msgid "Processing `%s'" msgstr "Đang xử lý « %s »" -#: lily-parser.cc:99 +#: lily-parser.cc:95 msgid "Parsing..." msgstr "Đang phân tách..." -#: lily-parser.cc:127 +#: lily-parser.cc:123 msgid "braces do not match" msgstr "hai dấu ngoặc móc không khớp" @@ -1573,7 +1662,7 @@ msgstr "không tìm thấy giọng nói « %s »" msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice." msgstr "Âm tiết lời nhạc không có nốt. Hãy dùng « \\lyricsto » hay « associatedVoice »." -#: main.cc:100 +#: main.cc:97 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -1585,7 +1674,7 @@ msgstr "" "\n" "Hãy gọi lệnh « %s --warranty » để xem thêm thông tin.\n" -#: main.cc:106 +#: main.cc:103 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License version 2\n" @@ -1610,11 +1699,11 @@ msgstr "" "51 Franklin Street, Fifth Floor,\n" "Boston, MA 02110-1301, USA (Mỹ).\n" -#: main.cc:137 +#: main.cc:134 msgid "SYM[=VAL]" msgstr "SYM[=GIÁ_TRỊ]" -#: main.cc:138 +#: main.cc:135 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." @@ -1622,49 +1711,41 @@ msgstr "" "đặt tùy chọn Scheme SYM thành GIÁ_TRỊ (mặc định: #t).\n" "Dùng « -dhelp » để xem trợ giúp." -#: main.cc:141 +#: main.cc:138 msgid "EXPR" msgstr "BTHỨC" -#: main.cc:141 +#: main.cc:138 msgid "evaluate scheme code" msgstr "ước lượng mã scheme" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:144 +#: main.cc:141 msgid "FORMATs" msgstr "ĐỊNH_DẠNG" -#: main.cc:144 +#: main.cc:141 msgid "dump FORMAT,... Also as separate options:" msgstr "đổ ĐỊNH_DẠNG,... Cũng làm với các tùy chọn riêng:" -#: main.cc:145 -msgid "generate DVI (tex backend only)" -msgstr "tạo ra DVI (chỉ hậu phương tex)" - -#: main.cc:146 +#: main.cc:142 msgid "generate PDF (default)" msgstr "tạo ra PDF (mặc định)" -#: main.cc:147 +#: main.cc:143 msgid "generate PNG" msgstr "tạo ra PNG" -#: main.cc:148 +#: main.cc:144 msgid "generate PostScript" msgstr "tạo ra PostScript" -#: main.cc:149 -msgid "generate TeX (tex backend only)" -msgstr "tạo ra TeX (chỉ hậu phương tex)" - -#: main.cc:151 +#: main.cc:146 msgid "FIELD" msgstr "TRƯỜNG" -#: main.cc:151 +#: main.cc:146 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" @@ -1672,19 +1753,19 @@ msgstr "" "đổ trường phần đầu TRƯỜNG\n" "vào tập tin tên BASENAME.FIELD" -#: main.cc:153 +#: main.cc:148 msgid "add DIR to search path" msgstr "Thêm THƯ MỤC vào đường dẫn tìm kiếm" -#: main.cc:154 +#: main.cc:149 msgid "use FILE as init file" msgstr "dùng TẬP TIN là tập tin sở khởi" -#: main.cc:156 +#: main.cc:151 msgid "USER, GROUP, JAIL, DIR" msgstr "NGƯỜI DÙNG, NHÓM, JAIL, THƯ MỤC" -#: main.cc:156 +#: main.cc:151 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" @@ -1692,15 +1773,15 @@ msgstr "" "chroot vào JAIL, trở thành NGƯỜI DÙNG:NHÓM\n" "và cd vào THƯ MỤC" -#: main.cc:159 +#: main.cc:154 msgid "write output to FILE (suffix will be added)" msgstr "xuất ra TẬP TIN (hậu tố cũng được thêm)" -#: main.cc:160 +#: main.cc:155 msgid "relocate using directory of lilypond program" msgstr "định vị lại dùng thư mục của chương trình lilypond" -#: main.cc:226 +#: main.cc:221 #, c-format msgid "" "Copyright (c) %s by\n" @@ -1710,82 +1791,77 @@ msgstr "" "của %s và người khác." #. No version number or newline here. It confuses help2man. -#: main.cc:254 +#: main.cc:249 #, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Cách sử dụng: %s [TÙY_CHỌN]... TẬP_TIN..." -#: main.cc:256 +#: main.cc:251 #, c-format msgid "Typeset music and/or produce MIDI from FILE." msgstr "Sắp chữ âm nhạc và/hay tạo MIDI từ TẬP TIN" -#: main.cc:258 +#: main.cc:253 #, c-format msgid "LilyPond produces beautiful music notation." msgstr "Lilypong tạo kiểu ghi âm nhạc rất đẹp." -#: main.cc:260 +#: main.cc:255 #, c-format msgid "For more information, see %s" msgstr "Để tìm thấy thông tin thêm xem %s" -#: main.cc:262 +#: main.cc:257 #, c-format msgid "Options:" msgstr "Tùy chọn:" -#: main.cc:266 -#, c-format -msgid "Report bugs via %s" -msgstr "Hãy thông báo lỗi cho %s" - -#: main.cc:312 +#: main.cc:311 #, c-format msgid "expected %d arguments with jail, found: %u" msgstr "mong đợi %d đối số với jail, còn tìm: %u" -#: main.cc:326 +#: main.cc:325 #, c-format msgid "no such user: %s" msgstr "không có người dùng như vậy: %s" -#: main.cc:328 +#: main.cc:327 #, c-format msgid "cannot get user id from user name: %s: %s" msgstr "không thể lấy ID người dùng từ tên người dùng: %s: %s" -#: main.cc:343 +#: main.cc:342 #, c-format msgid "no such group: %s" msgstr "không có nhóm như vậy: %s" -#: main.cc:345 +#: main.cc:344 #, c-format msgid "cannot get group id from group name: %s: %s" msgstr "không thể lấy ID nhóm từ tên nhóm: %s: %s" -#: main.cc:353 +#: main.cc:352 #, c-format msgid "cannot chroot to: %s: %s" msgstr "không thể chroot vào : %s: %s" -#: main.cc:360 +#: main.cc:359 #, c-format msgid "cannot change group id to: %d: %s" msgstr "không thể thay đổi ID nhóm thành: %d: %s" -#: main.cc:366 +#: main.cc:365 #, c-format msgid "cannot change user id to: %d: %s" msgstr "không thể thay đổi ID người dùng thành: %d: %s" -#: main.cc:372 +#: main.cc:371 #, c-format msgid "cannot change working directory to: %s: %s" msgstr "không thể thay đổi thư mục hoạt động thành: %s: %s" -#: main.cc:619 +#: main.cc:611 #, c-format msgid "exception caught: %s" msgstr "bắt ngoài lệ: %s" @@ -1870,8 +1946,12 @@ msgstr "không thể mở đề ghi: %s: %s" msgid "cannot write to file: `%s'" msgstr "không thể ghi vào tập tin: « %s »" -#: minimal-page-breaking.cc:42 -msgid "Computing page breaks..." +#: minimal-page-breaking.cc:38 paper-score.cc:105 +msgid "Calculating line breaks..." +msgstr "Đang tính các chỗ ngắt dòng..." + +#: minimal-page-breaking.cc:42 layout-page-layout.scm:463 +msgid "Calculating page breaks..." msgstr "Đang tính các chỗ ngắt trang..." #: music-iterator.cc:171 @@ -1888,7 +1968,7 @@ msgstr "lỗi kiểm tra quãng tám: mong đợi « %s » còn tìm: « %s »" msgid "transposition by %s makes alteration larger than double" msgstr "dịch giọng theo %s làm sự sửa đổi lớn hơn đôi" -#: new-dynamic-engraver.cc:128 +#: new-dynamic-engraver.cc:129 #, c-format msgid "" "unknown crescendo style: %s\n" @@ -1966,21 +2046,21 @@ msgstr "Lỗi FT_Get_Glyph_Name (): %s" msgid "Finding the ideal number of pages..." msgstr "Đang tìm tổng số trang thích hợp..." -#: optimal-page-breaking.cc:76 +#: optimal-page-breaking.cc:78 msgid "Fitting music on 1 page..." msgstr "Đang vừa âm nhạc khít 1 trang..." -#: optimal-page-breaking.cc:78 +#: optimal-page-breaking.cc:80 #, c-format msgid "Fitting music on %d pages..." msgstr "Đang vừa âm nhạc khít %d trang..." -#: optimal-page-breaking.cc:80 +#: optimal-page-breaking.cc:82 #, c-format msgid "Fitting music on %d or %d pages..." msgstr "Đang vừa âm nhạc khít %d hoặc %d trang..." -#: optimal-page-breaking.cc:157 page-turn-page-breaking.cc:226 +#: optimal-page-breaking.cc:159 page-turn-page-breaking.cc:226 #: paper-score.cc:146 msgid "Drawing systems..." msgstr "Hệ thống vẽ..." @@ -2051,10 +2131,6 @@ msgstr "chỗ ngắt bị buộc đã bị ghi đè bởi dữ kiện khác, b msgid "Layout output to `%s'..." msgstr "Xuất bố trí ra « %s »..." -#: paper-score.cc:105 -msgid "Calculating line breaks..." -msgstr "Đang tính các chỗ ngắt dòng..." - #: paper-score.cc:118 #, c-format msgid "Element count %d (spanners %d) " @@ -2068,7 +2144,7 @@ msgstr "Đang tiền xử lý các đối tượng đồ họa..." msgid "GUILE signaled an error for the expression beginning here" msgstr "GUILE đã thông báo lỗi cho biểu thức bắt đầu ở đây" -#: percent-repeat-engraver.cc:200 +#: percent-repeat-engraver.cc:202 msgid "unterminated percent repeat" msgstr "sự lặp lại dấu phần trăm chưa chấm dứt" @@ -2084,12 +2160,12 @@ msgstr "Kênh MIDI đã cuộn vòng" msgid "remapping modulo 16" msgstr "đang ánh xạ lại mô-đun 16" -#: performance.cc:101 +#: performance.cc:100 #, c-format msgid "MIDI output to `%s'..." msgstr "xuất MIDI ra « %s »..." -#: phrasing-slur-engraver.cc:139 +#: phrasing-slur-engraver.cc:146 msgid "unterminated phrasing slur" msgstr "dấu luyến âm phân nhịp chưa chấm dứt" @@ -2256,7 +2332,7 @@ msgstr "dấu luyến âm chưa chấm dứt" msgid "cannot end slur" msgstr "không thể kết thúc dấu luyến âm" -#: slur.cc:357 +#: slur.cc:359 #, c-format msgid "Ignoring grob for slur: %s. avoid-slur not set?" msgstr "Đang bỏ qua grob cho dấu luyến âm: %s. Chưa đặt « avoid-slur » ?" @@ -2293,12 +2369,12 @@ msgstr "có lẽ kết nhập vào nên xác định các giọng nói đối â msgid "weird stem size, check for narrow beams" msgstr "kích cỡ cọng lạ, hãy kiểm tra có tia hẹp không" -#: stem.cc:627 +#: stem.cc:623 #, c-format msgid "flag `%s' not found" msgstr "không tìm thấy cờ « %s »" -#: stem.cc:638 +#: stem.cc:639 #, c-format msgid "flag stroke `%s' not found" msgstr "không tìm thấy nét cờ « %s »" @@ -2422,40 +2498,40 @@ msgstr "cũng đã có thanh ngang đã kết thúc" msgid "giving up" msgstr "đang chịu thua" -#: parser.yy:729 +#: parser.yy:804 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "« \\paper » không thể được dùng trong « \\score », hãy dùng « \\layout » thay vào đó" -#: parser.yy:753 +#: parser.yy:828 msgid "need \\paper for paper block" msgstr "cần thiết « \\paper » cho khối giấy" -#: parser.yy:1224 +#: parser.yy:1299 msgid "Grob name should be alphanumeric" msgstr "Tên grob nên có dạng chữ số" -#: parser.yy:1522 +#: parser.yy:1597 msgid "second argument must be pitch list" msgstr "đối số thứ hai phải là danh sách các độ cao thấp" -#: parser.yy:1549 parser.yy:1554 parser.yy:2026 +#: parser.yy:1624 parser.yy:1629 parser.yy:2101 msgid "have to be in Lyric mode for lyrics" msgstr "ghi lời nhạc thì phải trong chế độ Lời nhạc" -#: parser.yy:1651 +#: parser.yy:1726 msgid "expecting string as script definition" msgstr "mong đợi chuỗi xác định văn lệnh" -#: parser.yy:1806 parser.yy:1856 +#: parser.yy:1881 parser.yy:1931 #, c-format msgid "not a duration: %d" msgstr "không phải thời gian: %d" -#: parser.yy:1980 +#: parser.yy:2055 msgid "have to be in Note mode for notes" msgstr "ghi nốt thì phải trong chế độ Nốt" -#: parser.yy:2041 +#: parser.yy:2116 msgid "have to be in Chord mode for chords" msgstr "ghi hợp âm thì phải trong chế độ Hợp âm" @@ -2515,26 +2591,26 @@ msgstr "Gặp dấu ngoặc móc ở kết thúc mã định dạng. Bạn đã msgid "invalid character: `%c'" msgstr "ký tự không hợp lệ: « %c »" -#: lexer.ll:803 lexer.ll:804 +#: lexer.ll:803 #, c-format msgid "unknown escaped string: `\\%s'" msgstr "chuỗi đã thoát lạ: « \\%s »" -#: lexer.ll:910 lexer.ll:911 +#: lexer.ll:910 #, c-format msgid "file too old: %s (oldest supported: %s)" msgstr "tập tin quá cũ : %s (cũ nhất được hỗ trợ : %s)" -#: lexer.ll:911 lexer.ll:912 +#: lexer.ll:911 msgid "consider updating the input with the convert-ly script" msgstr "đề nghị bạn cập nhật kết nhập bằng văn lệnh « convert-ly »" -#: lexer.ll:917 lexer.ll:918 +#: lexer.ll:917 #, c-format msgid "program too old: %s (file requires: %s)" msgstr "chương trình quá cũ : %s (tập tin cần thiết: %s)" -#: backend-library.scm:19 lily.scm:777 ps-to-png.scm:58 +#: backend-library.scm:19 lily.scm:761 ps-to-png.scm:58 #, scheme-format msgid "Invoking `~a'..." msgstr "đang gọi « ~a »..." @@ -2544,7 +2620,7 @@ msgstr "đang gọi « ~a »..." msgid "`~a' failed (~a)" msgstr "lỗi « ~a » (~a)" -#: backend-library.scm:116 framework-tex.scm:344 framework-tex.scm:369 +#: backend-library.scm:116 #, scheme-format msgid "Converting to `~a'..." msgstr "Đang chuyển đổi sang « ~a »" @@ -2578,16 +2654,16 @@ msgstr "hạng dữ kiện ~A có vẻ là không dùng" msgid "translator listens to nonexisting event class ~A" msgstr "bộ dịch lắng nghe hạng dữ kiện không tồn tại ~A" -#: define-markup-commands.scm:599 +#: define-markup-commands.scm:569 msgid "no systems found in \\score markup, does it have a \\layout block?" msgstr "không tìm thấy hệ thống trong mã định dạng « \\score », nó có khối « \\layout » không?" -#: define-markup-commands.scm:2428 +#: define-markup-commands.scm:2387 #, scheme-format msgid "Cannot find glyph ~a" msgstr "không tìm thấy hình tượng ~a" -#: define-markup-commands.scm:2737 +#: define-markup-commands.scm:2696 #, scheme-format msgid "not a valid duration string: ~a" msgstr "không phải chuỗi thời gian hợp lệ: ~a" @@ -2608,8 +2684,8 @@ msgid "unknown repeat type `~S'" msgstr "kiểu lặp lại lạ: ~S" #: define-music-types.scm:693 -msgid "See music-types.scm for supported repeats" -msgstr "Xem « music-types.scm » để tìm các kiểu lặp lại được hỗ trợ" +msgid "See define-music-types.scm for supported repeats" +msgstr "Xem « define-music-types.scm » để tìm các kiểu lặp lại được hỗ trợ" #: document-backend.scm:99 #, scheme-format @@ -2626,57 +2702,57 @@ msgstr "không tìm thấy giao diện cho thuộc tính: ~S" msgid "unknown Grob interface: ~S" msgstr "giao diện Grob lạ: ~S" -#: documentation-lib.scm:48 +#: documentation-lib.scm:49 #, scheme-format msgid "Processing ~S..." msgstr "Đang xử lý ~S..." -#: documentation-lib.scm:164 +#: documentation-lib.scm:165 #, scheme-format msgid "Writing ~S..." msgstr "Đang ghi ~S..." -#: documentation-lib.scm:186 +#: documentation-lib.scm:187 #, scheme-format msgid "cannot find description for property ~S (~S)" msgstr "không tìm thấy mô tả cho thuộc tính ~S (~S)" +#: flag-styles.scm:145 +#, scheme-format +msgid "flag stroke `~a' or `~a' not found" +msgstr "không tìm thấy nét cờ « ~a » hoặc « ~a »" + #: framework-eps.scm:90 #, scheme-format msgid "Writing ~a..." msgstr "Đang ghi ~a..." -#: framework-ps.scm:282 +#: framework-ps.scm:277 #, scheme-format msgid "cannot embed ~S=~S" msgstr "không thể nhúng ~S=~S" -#: framework-ps.scm:335 +#: framework-ps.scm:330 #, scheme-format msgid "cannot extract file matching ~a from ~a" msgstr "không thể giải nén tập tin khớp với ~a từ ~a" -#: framework-ps.scm:352 +#: framework-ps.scm:347 #, scheme-format msgid "do not know how to embed ~S=~S" msgstr "không biết cách nhúng ~S=~S" -#: framework-ps.scm:383 +#: framework-ps.scm:378 #, scheme-format msgid "do not know how to embed font ~s ~s ~s" msgstr "không biết cách nhúng phông ~s ~s ~s" -#: framework-ps.scm:753 +#: framework-ps.scm:748 #, scheme-format msgid "cannot convert to ~S" msgstr "không thể chuyển đổi sang ~S" -#: framework-ps.scm:772 framework-ps.scm:775 -#, scheme-format -msgid "cannot generate ~S using the postscript back-end" -msgstr "không thể tạo ra ~S bằng hậu phương postscript" - -#: framework-ps.scm:782 +#: framework-ps.scm:771 msgid "" "\n" "The PostScript backend does not support the system-by-system \n" @@ -2703,11 +2779,6 @@ msgstr "" " %% Start cut-&-pastable-section\n" " %% ****************************************************************\n" -#: framework-tex.scm:361 -#, scheme-format -msgid "TeX file name must not contain whitespace: `~a'" -msgstr "Tên tập tin TeX không thể chứa khoảng trắng: « ~a »" - #: graphviz.scm:53 #, scheme-format msgid "Writing graph `~a'..." @@ -2723,44 +2794,40 @@ msgstr "Lỗi trong khi lượng tử hoá tia. Mong đợi (~S,~S), còn tìm ~ msgid "Error in beam quanting. Expected ~S 0, found ~S." msgstr "Lỗi trong khi lượng tử hoá tia. Mong đợi ~S 0, còn tìm ~S" -#: layout-page-layout.scm:124 +#: layout-page-layout.scm:126 msgid "Can't fit systems on page -- ignoring between-system-padding" msgstr "Không thể vừa các hệ thống trong tập tin nên bỏ qua vùng đệm giữa các hệ thống" -#: layout-page-layout.scm:458 -msgid "Calculating page breaks..." -msgstr "Đang tính các chỗ ngắt trang..." - -#: lily-library.scm:588 +#: lily-library.scm:602 #, scheme-format msgid "unknown unit: ~S" msgstr "đơn vị lạ: ~S" -#: lily-library.scm:622 +#: lily-library.scm:636 #, scheme-format msgid "no \\version statement found, please add~afor future compatibility" msgstr "không tìm thấy câu lệnh « \\version », hãy thêm ~a để tương thích sau" -#: lily-library.scm:630 +#: lily-library.scm:644 msgid "old relative compatibility not used" msgstr "không dùng khả năng tương thích tương đối cũ" -#: lily.scm:178 +#: lily.scm:179 #, scheme-format msgid "cannot find: ~A" msgstr "không tìm thấy: ~A" -#: lily.scm:243 +#: lily.scm:228 #, scheme-format msgid "wrong type for argument ~a. Expecting ~a, found ~s" msgstr "sai kiểu cho đối số ~a. Mong đợi ~a, còn tìm ~s" -#: lily.scm:641 +#: lily.scm:625 #, scheme-format msgid "job ~a terminated with signal: ~a" msgstr "công việc ~a đã kết thúc với tín hiệu : ~a" -#: lily.scm:644 +#: lily.scm:628 #, scheme-format msgid "" "logfile ~a (exit ~a):\n" @@ -2769,12 +2836,12 @@ msgstr "" "tập tin ghi lưu ~a (thoát ~a):\n" "~a" -#: lily.scm:669 lily.scm:767 +#: lily.scm:653 lily.scm:751 #, scheme-format msgid "failed files: ~S" msgstr "tập tin đã thất bại: ~S" -#: lily.scm:757 +#: lily.scm:741 #, scheme-format msgid "Redirecting output to ~a..." msgstr "Đang chuyển hướng kết xuất tới ~a ..." @@ -2783,7 +2850,7 @@ msgstr "Đang chuyển hướng kết xuất tới ~a ..." msgid "Music head function must return Music object" msgstr "Hàm đầu âm nhạc phải trả lại đối tượng Âm nhạc" -#: ly-syntax-constructors.scm:150 +#: ly-syntax-constructors.scm:154 #, scheme-format msgid "Invalid property operation ~a" msgstr "Thao tác thuộc tính không hợp lệ: ~a" @@ -2833,12 +2900,12 @@ msgstr "Lỗi kiểm tra gạch nhịp. Mong đợi ở ~a, còn ở ~a" msgid "cannot find quoted music: `~S'" msgstr "không tìm thấy âm nhạc đã trích dẫn: « ~S »" -#: music-functions.scm:990 +#: music-functions.scm:1198 #, scheme-format msgid "unknown accidental style: ~S" msgstr "kiểu dáng dấu thăng giáng bất thường lạ: ~S" -#: output-ps.scm:285 +#: output-ps.scm:294 msgid "utf-8-string encountered in PS backend" msgstr "gặp chuỗi UTF-8 trong hậu phương PS" @@ -2852,28 +2919,23 @@ msgstr "chưa xác định: ~S" msgid "cannot decypher Pango description: ~a" msgstr "Không thể giải thích mô tả Pango: ~a" -#: output-tex.scm:96 -#, scheme-format -msgid "cannot find ~a in ~a" -msgstr "không tìm thấy ~a trong ~a" - -#: paper.scm:86 +#: paper.scm:104 msgid "set-global-staff-size: not in toplevel scope" msgstr "set-global-staff-size: không phải trong phạm vị cấp đầu" -#: paper.scm:226 +#: paper.scm:244 #, scheme-format msgid "This is not a \\layout {} object, ~S" msgstr "Đây không phải đối tượng « \\layout {} », ~S" -#: paper.scm:238 +#: paper.scm:256 #, scheme-format -msgid "Unknown papersize: ~a" -msgstr "Kích cỡ giấy lạ: ~a" +msgid "Unknown paper size: ~a" +msgstr "Không rõ kích cỡ giấy: ~a" #. TODO: should raise (generic) exception with throw, and catch #. that in parse-scm.cc -#: paper.scm:253 +#: paper.scm:271 msgid "Must use #(set-paper-size .. ) within \\paper { ... }" msgstr "Phải dùng #(set-paper-size .. ) bên trong \\paper { ... }" diff --git a/ps/GNUmakefile b/ps/GNUmakefile index d05179fd4e..4bdc92c75e 100644 --- a/ps/GNUmakefile +++ b/ps/GNUmakefile @@ -5,16 +5,7 @@ PS_FILES = $(call src-wildcard,*.ps) STEPMAKE_TEMPLATES=install EXTRA_DIST_FILES = $(PS_FILES) -INSTALLATION_DIR=$(local_lilypond_datadir)/ps/ +INSTALLATION_DIR=$(local_lilypond_datadir)/ps INSTALLATION_FILES=$(PS_FILES) -# teTeX-3.0 compatibility. -local-install: - -$(INSTALL) -d $(DESTDIR)$(local_lilypond_datadir)/dvips - (cd $(DESTDIR)$(local_lilypond_datadir)/dvips && ln -sf ../ps .) - -local-uninstall: - -rm -f $(DESTDIR)$(local_lilypond_datadir)/dvips/ps - -rmdir $(DESTDIR)$(local_lilypond_datadir)/dvips - include $(depth)/make/stepmake.make diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index 9f28bf95f1..09ac055f46 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -35,7 +35,25 @@ } bind def -% from adobe tech note 5002. +% llx lly urx ury page +/mark_page_link +{ + /page exch def + /ury exch def + /urx exch def + /lly exch def + /llx exch def + [ + /Rect [ llx lly urx ury ] + /Border [ 0 0 0 ] + /Page page + /Subtype /Link + /ANN + pdfmark +} +bind def + +% from adobe tech note 5002. /BeginEPSF { %def /b4_Inc_state save def % Save state for cleanup /dict_count countdictstack def % Count objects on dict stack @@ -57,7 +75,7 @@ bind def count op_count sub {pop} repeat % Clean up stacks countdictstack dict_count sub {end} repeat b4_Inc_state restore -} bind def +} bind def /stroke_and_fill { gsave @@ -103,7 +121,7 @@ bind def def rmoveto % x(0) y(0) { polygon_x polygon_y vector_add lineto } repeat % n times - closepath + closepath { %fill? stroke_and_fill }{ @@ -124,12 +142,16 @@ bind def } bind def % this is for drawing slurs and barre-indicators. -/draw_bezier_sandwich % thickness controls +/draw_bezier_sandwich % x5 y5 x6 y6 x7 y7 + % x4 y4 + % x1 y1 x2 y2 x3 y3 + % x0 y0 + % linewidth draw_bezier_sandwich { gsave currentpoint translate - % round ending and round beginning - 1 setlinejoin 1 setlinecap + % round ending and round beginning + 1 setlinejoin 1 setlinecap setlinewidth moveto curveto @@ -155,7 +177,7 @@ bind def 3 2 roll % f? x0 y0 r dup 0 rmoveto 0 360 arc closepath - { stroke_and_fill } + { stroke_and_fill } { stroke } ifelse } bind def @@ -188,6 +210,46 @@ bind def ifelse } bind def +/draw_partial_ellipse % filled connect x-radius y-radius startangle endangle thickness draw_partial_ellipse +% Note that filled is not boolean to permit for different graylevels (ie for trill keys) +{ + gsave + currentpoint translate + /thickness exch def + /endangle exch def + /startangle exch def + /y_radius exch def + /x_radius exch def + /endrad x_radius y_radius mul + x_radius x_radius mul + endangle cos endangle cos mul mul + y_radius y_radius mul + endangle sin endangle sin mul mul add sqrt div def + /endangle endangle sin endrad mul y_radius div + endangle cos endrad mul x_radius div atan def + /startrad x_radius y_radius mul + x_radius x_radius mul + startangle cos startangle cos mul mul + y_radius y_radius mul + startangle sin startangle sin mul mul add sqrt div def + /startangle startangle sin startrad mul y_radius div + startangle cos startrad mul x_radius div atan def + /connect exch def + /filled exch def + /savematrix matrix currentmatrix def + thickness setlinewidth + x_radius y_radius scale + startangle cos startangle sin moveto + 0 0 1 startangle + startangle endangle eq { endangle 360 add } { endangle } ifelse + arc + connect { + startangle cos startangle sin moveto endangle cos endangle sin lineto } + if + savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse + grestore +} bind def + /draw_line % dx dy x1 y1 thickness draw_line { setlinewidth % dx dy x1 y1 diff --git a/python/auxiliar/buildlib.py b/python/auxiliar/buildlib.py index cd99586ff8..a2a553aa04 100644 --- a/python/auxiliar/buildlib.py +++ b/python/auxiliar/buildlib.py @@ -19,23 +19,62 @@ def read_pipe (command): error = code + ' ' + error return (output, error) +### Renamed files map to ensure continuity of file history +## Map of new_name: old_name +renames_map = { + 'usage.tely': 'user/lilypond-program.tely', + 'notation.tely': 'user/lilypond.tely', + 'learning.tely': 'user/lilypond-learning.tely', + 'changes.tely': 'topdocs/NEWS.tely', +} + +# FIXME: Hardcoded file names!? +manuals_subdirectories_re = \ + re.compile ('(usage|automated-engraving|changes|essay|extending|web|learning|notation)/') + +def add_old_name (file_path): + for new_path in renames_map: + if file_path.endswith (new_path): + old_file_path = file_path.replace (new_path, + renames_map[new_path]) + break + else: + if file_path.endswith ('macros.itexi'): + old_file_path = file_path.replace ('macros.itexi', + 'user/macros.itexi') + elif file_path.endswith ('.itely'): + old_file_path = manuals_subdirectories_re.sub ('user/', + file_path) + elif 'snippets/' in file_path: + old_file_path = file_path.replace ('snippets/', + '../input/lsr/') + else: + return file_path + return file_path + ' ' + old_file_path + revision_re = re.compile ('GIT [Cc]ommittish:\s+([a-f0-9]+)') -vc_diff_cmd = 'git diff %(color_flag)s %(revision)s HEAD -- %(original)s | cat' +vc_diff_cmd = 'git diff -M %(color_flag)s %(revision)s \ +%(upper_revision)s -- %(original_with_old_name)s | cat' +no_committish_fatal_error = """error: %s: no 'GIT committish: ' found. +Please check the whole file against the original in English, then +fill in HEAD committish in the header. +""" -def check_translated_doc (original, translated_file, translated_contents, color=False): +def check_translated_doc (original, translated_file, translated_contents, + color=False, upper_revision='HEAD'): m = revision_re.search (translated_contents) if not m: - sys.stderr.write ('error: ' + translated_file + \ - ": no 'GIT committish: ' found.\nPlease check " + \ - 'the whole file against the original in English, then ' + \ - 'fill in HEAD committish in the header.\n') + sys.stderr.write (no_committish_fatal_error % translated_file) sys.exit (1) revision = m.group (1) + if revision == '0': + return '', 0 if color: - color_flag = '--color' + color_flag = '--color --color-words' else: color_flag = '--no-color' + original_with_old_name = add_old_name (original) c = vc_diff_cmd % vars () if verbose: sys.stderr.write ('running: ' + c) diff --git a/python/auxiliar/manuals_definitions.py b/python/auxiliar/manuals_definitions.py index e8e6d50cd9..e61c75b66f 100644 --- a/python/auxiliar/manuals_definitions.py +++ b/python/auxiliar/manuals_definitions.py @@ -3,9 +3,14 @@ # This module is imported by check_texi_refs.py references_dict = { - 'lilypond': 'ruser', - 'lilypond-learning': 'rlearning', - 'lilypond-program': 'rprogram', - 'lilypond-snippets': 'rlsr', + 'changes': 'rchanges', + 'contributor': 'rcontrib', + 'essay': 'ressay', + 'extending': 'rextend', + 'learning': 'rlearning', 'music-glossary': 'rglos', - 'lilypond-internals': 'rinternals' } + 'notation': 'ruser', + 'snippets': 'rlsr', + 'usage': 'rprogram', + 'internals': 'rinternals', + } diff --git a/python/auxiliar/postprocess_html.py b/python/auxiliar/postprocess_html.py index 15fcbbec10..568ff17e75 100644 --- a/python/auxiliar/postprocess_html.py +++ b/python/auxiliar/postprocess_html.py @@ -13,17 +13,21 @@ import langdefs # This is to try to make the docball not too big with almost duplicate files # see process_links() -non_copied_pages = ['Documentation/user/out-www/lilypond-big-page', - 'Documentation/user/out-www/lilypond-internals-big-page', - 'Documentation/user/out-www/lilypond-learning-big-page', - 'Documentation/user/out-www/lilypond-program-big-page', - 'Documentation/user/out-www/music-glossary-big-page', +non_copied_pages = ['Documentation/out-www/notation-big-page', + 'Documentation/out-www/internals-big-page', + 'Documentation/out-www/learning-big-page', + 'Documentation/out-www/usage-big-page', + 'Documentation/out-www/music-glossary-big-page', + 'Documentation/out-www/contributor', + 'Documentation/out-www/changes-big-page', + 'Documentation/out-www/essay-big-page', + 'Documentation/out-www/extending-big-page', + 'Documentation/out-www/snippets', 'out-www/examples', 'Documentation/topdocs', 'Documentation/bibliography', 'Documentation/out-www/THANKS', 'Documentation/out-www/DEDICATION', - 'Documentation/out-www/devel', 'input/'] def _doc (s): @@ -42,13 +46,19 @@ footer = '''

    F}GE+|*oGWjL!yCB((Z^D7R|2q7k*D#Ef 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

    ny}Scv@Ut&UXl?$n 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⩔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 z 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 m%S*0hmkMTJi z4o?Ty_NK1xW3i56vV|+2bJXpMZq7K&!N68tna8X<@PP zdeU;uAb$}oNyf+e)X!}4WUF_1zym+$-A!3orMT}Hf)B6x%@RdfCC~?*~$L1wWxCe=+aU|&PTgp$BqS<@ z86$i)c|WZde$MenB5tH^r~PWP2w`>b;N%07u^Uz8k|khUNZW({wU*a9eZ~NjXVwhHO(e*u0TYWP8Ho*`J>5Fi&67sL{M=g?Sh5rB)<4WK#_~Va-5u%7Vk-w0fo%ZyhE&7{+pautm4^8Ol zb{b}lMo2z<(znuG~$jV$`;~Nvwk^CHO zaLOhl2cOfr{p}awKK} z@<<089-I6r_X{ZQ$r^$3JD;6fxh=6i5y!9VN;3W$M{;s=oPkU&+;40qaivROZ_o9s zh+%)?1za3s8Lp8c$N=s)9wR}yki}{>GViwA?^9`Jhzq&aTy9Q(y&R1h3ZO4M*D|UT zD?R`jING@-j#$g72W`QsMqx7RTz8ql13hZj8juD>$p>?uoq4L=T?kYVy0gagSg=5K z*f7Z+wGyykV^;BOX$xeT%e1NpU(4e8@l4vY05Dfa@_<3lQ%t*QQp0?D(*FR8)q@|8 zd}#-*U1VmBNy4`{Cu2m7bgp*E=7n(*$aN47oa}fzd+L)zt{t0f9+VSqsL{m`RVVqp z{u!u)v%q&UHnXVXZ0Ai9OKM# zJv{1rEi$GYDk#pybDDG!WWfROf1b4L5-hQYQ?aVNdhi&A+o-CQNL0HMlj>=Bri?tL zk04+Zy;kL?bdS3Hgzvz>!TA3GrBZm~S!0mz)v``F_tQog+A$_M8x6<8vt6U_WJuXV z0guhds-?`hF$qc32;X{U&d@YnNvq1ZPOG6whbu3%LNCH zPp1C>rB>12E9nSRp@##2eCexzzlWA1w32>Oez>HdMuyld>;cAh^QNr(vo4^2mwoe} zKE9nP_0cn7PT*kw0HrB&8l$u-*bFhAx%krZ5+TjO1S4&qPI#rHo=IoQ{#PC>uo?JQ ztiIl3gnJFz=^oj)WnfNnK+m6^Yx9ch{{X@y_nPY|zYlj5*v^LyUgP$Y?T+H>*=Tz@ z*;+U5%9E%ZeA2x`bv&2163=kuotIWmQ&ZW!pFRAdC>JbG83XsPZ+(`1iuT8}eW4rN zs>5zb$t6yHP7Qrs><`(0XZtZ^RTVXb7;X6<`)3vG3l7JUI01;Jl1_3t>;C{1ZpR_F zL|g}KV;RTS&*N0Oy?bU&0EpNE!##2F%@Q8!SQb)n+Ykvm@9+A}2mPdMSpn0MILHU~ z_|}{fLvwCs)D*gcK~uJA8%V;;qjEK1ZT)}SQx}W1Y?u) z9<}-P+P4$kTuUtNso9AqYCx$K*gjQo@+JsuQ&#u)DGSCVJMmn-p?HWw%0l~va`uhs z2Qsn9$4Zu#XI*kJ*ivMW=cc*zB8*d34d zuiMrz_enEp3#V;6{{YKdeVO*v+xFT|c;|jHzw}p;Tm8A+_fa&FGdOIq)(8IpAzwm$ zg#Dx2dsEpZJF+B0j20w(d?LNS_=SlZZGwOR$li-PT1{cz1;m9;_&*M`wz*rgg}-<= zK8K%=l?uknNCqA9$92>OS3e!P(;`UP1V)f*gHd#MRShE~+g&iTQ{eQ3R#C=<&Lg4xEL`gJtK@HuH50HLtIm~Z;ht!figGG&>D z$2jTJe^1tyvWL05jAsZ_8y+%!^{`<&z#2-r;DN_qUw;(HeNYex1P!;(*A$ffr2@Jt z1FebMaf4kQ;Fc9uJGsdKd%nIkgY8AsmXiJ|+_J2A;OtMCCp6`+Xbb2RO28HwQcpX7 zfl6IXC6t>6Ah`zznq#xfmk@W1bZiw(4$0&y6@J4gQ#c~sll!t5o5!z*)vfzy6!*AYV` z%EMxf(4GA`uD3<+`@L#308aVG_T1Iwf=F)KX4Q<~X+P$y@iR^e83KX1E$i>9!xXCR zsen7+eHskusuSPJ0xN7t$<93uW?R}zF_ebXnba~s$EP)IPmL-tcpY+l>G+kHq^bc$ zOy_JKo_|@PU-rYZvOu06v6r*DtA(I=IR zS|$S=WF3h2Rn=IlX&@>tck=S}>q54*4|l8iSc8-A@~ZZiWhw0_ZsL#vm?RFPC)eH5 zulQm3xn(RsCkLTFuh!HQhEsF-u#4xoC(oL4)sa(Nv0;fMWaCiS3K6}YDc`zPSc@O# z6xfm|VKV@A5_!p>s00aH0dN7|9ewplrL~L+Bml1}!#;d%S>34=62kJL>_&e-9%tjy zzFhm@UupJUC`JHh3ykFFlV2S$%bNE$-RIaS{h;mGuP5%M3IL=PqRrBZDSK8gDXZCd6pJc`6kYPsS zPCe>>dig82yJGXTdqPW_i3=7v0OR{sZuLH68LuzIM_!RP@I$Q>zySf6X4=YZi`3ok5YZLhgTmt@x@%2)9|a6TV7~J0ISn*7aopWZ`)#c0PZn zm1+n65LlB)B;;qNDFnEUZw7*JcE~yZ03(Wjw3PyhRxr<`=_K{|n#-0JWLcPK8nQrr zx%bf0;j8KiFPgSMVY&l~%xOR(XHUmRxy4Dd1U_f=wU_4Je) zvIa@m51$piZD$NoE8&I?G6~zuJMYiyQmP;f8cd)A4Wt4-0RFVM`&2E%#K{?N_}15g8lodinEB-&#&>@Uj#hN2N1q0=2e;auklEe~$Ff zDH4Swf=^DSmy+%_;@57g8%G`j;f1+xymxl3Td$+=4dSdd$4Lg>Kduw*YaU z)Ecb7ggWKHBThAR>%W~A5v7+&3+c{jm)4Q!ScU=I790F1uOvDYInt+X&s=X=%!!j3 ze-3am3C{V*p{zwFMu=sI$zpasU1(9;-P{>oLP8)p&OLfkU7s|mc{oJF7TL88z!k69 zf#g?tiQSJ}6Q8d-X6G4V$g(NIf>;6Z-iK*)WQ@lwo0G8g9=__CICWs8}Ggc zx`_(PvW%R@Mlh%P)Jqk^PN5L2YI5EnbLq`i?7WvBh7tg$p&a9&A+wJ^KDCt$GTh43Z5(HSFmuP2^`m!V2B9N4CMCxN zj-I%vwU*vXp{xNMW5RNJ(Jxv%P)(r+J|l+Do;uQ9quQ)u0Ued{4ix_YQ%AY&Jzb9> zn<&TzNIClQq#ou7qf~}K&n`m%InNbA*~WPovjoUEOauDor5M<}a-q4GD!9Xuf;_l9 zeCu@@+q&-}a6*h1Do;vU+HUe$Llu5-HG2Ad=rLejW&A56a6Go4cARlfBzoq+PzgBP z5$F%CGOZZ77{-QNPXkVH6M0r7U~f> zjDe^eZg@LVjoRyOAUNTUSpxy2&$ zFLK@K58^v#9DjY!%7gf{?^-oN+6G4WBhx3{L5)ef?u^<&I1Rba>rLERO$>%jLO@4} zum;1(XY2M}-s#o<015(-!*3T%eSGK_5Kpa26$%b9w*LUG)pVXN;V~ibDazpQ{VJdB z8+J(y=vWU30FjFI_u6&DvwJbxe}RtQlIVXRdUhg3v=URx5QHx zmyumrG_kugj(l6-`~7KV?N_zDOd%{b$?LzB7I`I{NhEU=Z3LFnoR2EZkGE_@<|HL# zVY}q*wPW`C+TGbp43CgOQh%jFH~3?2Uf zN{W^soPmmp>XA~bkbNu6KFpxCx$T5*(!)a$8bQxF^siz4u6CV--H2@CAfkAXjP)E> zqYo#buXFv^`$R$8bK6UDQ8r{inag|Y?0(Gc*Rrw=ais#LF|2R#6`gtQ^{AArk)H7v z0BR>Zj&bgyk7zAq3vsU=gCjm;KMFO^w7r=eVWV&cp{Wk7^S2~#M7Q>_}W&#~6)IL9FAa{64js{{U#6kYdqn zz%m>uI<^PiyVEdxMcJLHb{X#kQ=PIEj{D&8k193)0Bu8K0{$lDS~WUOR~(JMOxKOv z{h{`Cs1TW1)uL?G>RH+rP5n5}J;u7-;~L ze};{zJD;}x!igWdxM>p^Z{e`t;*=X7x1PY3HATC0Ae^a<&isG#y48p6yV>YcDIVpp zd_d@ZkN!$p`|aP^;?hi#cY#4|C0~DE$w=7!y!$_S6l*2hA^!k`qnvtvO1-~Rxu z)$jiC9hSEeG*CRTf*L$KCv*R7NACx6@J9CCmfDE%V&Dv){oQAO>%+Fo zchXpsmc~2v82k)X9@ogz5pc<@VE+KSKmIO~o9&z0*&SE$ZW905u-3a^LO0+F=1w>@l{ir~d$Jthv6|y{VDRg7KBhFMaRR?j8>s#yX*R&y2f3zg$ zC&IfQl~j9k?IK8IUeuLKYvF+f-o@H zRO|4eLG9nPvCPgpLQf7h(x2M3?S9pLu!h~O)3s&Ofs7=7^wJ%t_KEFP#o3x()0C1i z`BUA|Ya;8~uG_hVVv_Pgs>JX)`Br;&h4GXYnTh8cR)Ti-YAjL4_bs6gK*0Xglzpds zlSt7_$R$1?F~0TE_J!+eW|)#a1q5DPmsZw62b#2UPUV@Hu+C4dN;Kt5mLO*Wgi=tM zCw%c-M4)MAI0A{^NFghrus*-71~W1f&>lu=F(aKh-=%WK>n4!7An&~syp*SQHvsWe zmN}eiVaH08S%i9WK+ZtgyHn^YSH+%l#a8JhLOb6rs8~3zRmlKyXz@WIR>0WpM1sod zM$(bw9k~=)dmj2W8so-ywmNFXy;&JvdZTK_lQ6FDrx@BeWz*J4Tx8hSTWZu>HY{JM9jDNk4 z-~Rv|DE|Oue%D6ITeH9?^8WxDJEZ&PjdLG63K zpZ0o^8z1kY{{XJFt$xA%w4UvwTQ%Hde;Pmf>qp80N9<+v%Q5cYW^`^IL37MU~T95&3ajtm5-q!ysPZb*%^JX_JTgn zj(@|U-QPfMKMacc53zpkeU}?E-QS7S-~-&1-{B=cclUVgJ4>MEL5E$FL+$7P0L>{V z{_gg&v~3mGAh=)mXT|fAr510y=Vie*8bI%o3Y8#g_xHZ~y{Fy3vSpM>KWJfF#8bI% zmV4TIFT3}%Zv&)w);MCX$NuuD-*%41LXOufpg#Tv+<)(Bi_g1XVZ1u+WLS$FD*(-( zTp4M|zU}_cM+!+W@sYkmf!F^4qSANYcfP}xRdEnpAN%_O{{YoD%|*}MVOvHW?H1sUtnRq~0PCKjyoL|3A7&+Fl3vb535I{-IphBTs#6!A zckg54nJx!sMj~90z3iDi0RI4ao#?;%nD#?J1GA$nPV8Pz4u9|a>A1ed{h7RFlkhRh zkg3XQVV_^mKtE%i%*P}VU3N?;Sb`io9Iuz>$NE;Cm)TFUu#pX?WJHl?QBxyr@z!aE z`!no_Qc(S!7ji%Z2XBY-dD8ZuW}eR7qcy*0#0nfZ4Bjs>`M+vb=j@-^Kv!2}Mw3Q1 zD(=`_zwhIk2V#Ad`#P5d!`YE!Y+Jlxx%a=X>0U=auzjA4k{fl5Y5cm0EIMziYAhdS z9?gjV01_?ZFBmU?ublq?=J!^F9>VrktV0T{M}3&*KK)x!o7jHOxw>SQD8x#E0Nmt{ z{jbuI?GLk##D>X2_H=nhApZanxB0a>*}lzoWxVQcZBe0J!sUhl_cd(ab~k4T!n9F- z9z^i24j0sK>0UV>u)U8QuR5+!Ws2!M5B;iE>)4xXfREXw89~@-$L`*>p=H=99oOOK zL{vBobDVrLTMO*}0DguUAsRxExNY0@;L_>r;)%P5MT#_1e>QXQ2m95Zvh7$ja43#o zF%Mj0-f>HIH)6wfTHuhb3D&!js1uQ#`c|N}vbWOB4v2>fl5y|!^rFdQZ*?3-*o-kc zMtL6-&MOnOdk#B^Sh|f|t^x4x$2=pREnorAI-YXHc=+*}&h3uOSC!r80yFs& zPIHf3{3yMh*)Yo(aDn{^zz64AHhq_EZEz5cKm&vs;~Q_9z0YUcE)mFWWMgx;mUr}_ zTy|=#a!j$8W*n2w-1F=D*Ui6tKFMYFO>SjTp7lsM>({M(fESFNjeUXlLG2iA{gr<5 z0>UXyS5`7T_4Jk8C$^%BSYXi+@h6KpJv@z8C6FiJrd%?e3JY?6hBv2etqaE;sE55| z03w#g0rk(jCJwGu%d?kgqxA~-bn6Y6p^ zCfLIBj(4W)Ay`}R^Nk3{^J>+vi3WZ=CsNuQ|UL;7H{y zN@oOvj1B#0m)5X6$#jk+RwH~B!0Xq`(v$57G_sumgohh8Gy3{ap3}UNM7J2h-v?zs z6Gf87OKY%~14wo7jOqmX@9Fx|bM|u=mgVLV#N!GTK_lUsddISv?F{ldv_k1T0d z@}%0Q$z4o`4W69fe~L&$Yy!jH2bqolBaC{J0T4< z585}h9j6?zJ>zMUI{YcVfA&RqQxe3nIVYO(f3pjByY}0%pjkwE?i0jDalL+xdoyJ5 zSVKBtbPoy0IO*r#cJEhI>KZw8dn;N5CIGORg6t=%XKmS z9-Wl=o_wl*2LuuS011c;JVb7N`<|m-lOR5I5x(@K5zTYnG|{L+d?z{j=|Z}-xDdXX%4Fc4NALBT zQq(%Mz3K@E$eTLL#lt!P4!F@n)oM3yYc`gJ6A7agclHDk%Bbr|NCk?)(Y#uh+m{(GSNIxz$ z9-fA)aIqB(z&1Z9JbKV$XA>N03nHJ3dHbn#YtO_8g|KDE`@;DBI(z8xTPn}2V9AVg zxb^tM_GQ5}hY(6T$cT)eMU-@QMIchNaI+q*A0(2$bbGJd7GI z@l1?0;WjI<+;tV3+U*P4ObQ0nns5%ykL|sDvG=>T5qlik9EA+IToKob__dgsOA)v= z_V3*TwC$z#J{3g)!<}b5k?{BLUq-FWH&G;u4zwA<=WOH7jcMA86_<)W?pE1VPNC18 zCf%hyySq67*ACesvJbnSXp7owEN;-uP?M`X_4W5xOWG4aa4w3uAC*8PjPL%mt9IL@ z@wt2^b{icae`HHFSH zJib4rHF@nHXIsFwi*VA+cPvnhdg7uhy8?l+-`dMaqm)f3lTpg4$N*zLUhZjr%=V5c)yl{tWsHK$HaP3fpH7~2SA8sDZ-aqhf zAG-^_V{!ig$Wk4l_lNdw%e1Dn7YxH1TMGCC%l+MWceEdQD+_tT*xR(Kq!lHY4^518 zg`eII+qN!ZZqS9`DoJJzSPy`VQ2np_TkK2EXKohO;OlV8JTLRzeNBAJbmB{glU}mK zl5vXjFS5UHFa3_~c;$tepw*I~fsb72CcWqE_ue+f-J9{2%(4PVkg+&E;T>*vf7{oy zm$O9o7cbwaIth*TIP^jK*OU*pFJ&z35?Fgd#L_NE?xZ-!y+2y<%fGx2VBB3w&v7Fr zJVQ&3Tk*1OOF{PU?9A6s0?5%vob0Yf+vD0nvnRBf<(bt0)2OSR#^3zzkiGkS>=jm$DO*#W@{iNrp6bi(U%X#r z$7s>R3rQ*8R#$eV6SuJ(!7eshsWz;N)X`R^6nERLO4$$T(%sE03?0F?DQiqA|+kA>}buOB93w z0q*gEws`X9hW2ntbdMsL8C0I5AFW5>B9s-t35eAAFdV~td{tsnq>0IElI6G+L% z4#%ORbkGwwCTfEhgbW~2~CLCtdvj8LJ7rc~gm-;PaO#)X3sk~s9LOmm$L zhdzJ3S}@9kE8;xw#R%NmNk4F085evJS@+9ojVyDhj1X8I_xJ-}4gK~fMeSx zEZD|K_wS1Npkp7GJM)@_1h$pr)Es%#rZoUYb5M3CBBG|aj8s=wREmn~>gww1>XD2b zjGE*CungKpcR1p?uo!@HIvR@V>guo{DHzE-A1bs{NfFF$R=Ce8m%TDJzdEZvUr^Zl z>g{neV^oCVn2)tDql84445|*SZOsPi?&9UkO(9};qIQ31URcg1wVk7J)Bt~a*tGV~ z+6!wpw@c^JrR|4iqbyygAq+A36K|TDA8382dtZAQNjp|dA1LGh z0H(6v+b?L?f_qLvLC886`&Nag+BdZ}qxgNG!1?G;`fG2q{@FdNgn>Qd$N=&|{{YBV zwWr(PwD8_6q!vKgE2%fz{{RJBwf^2ae(};sQK4YjBU-k8X-q-)f%c2T9IzP>E-+GMsJC`?~c10JJ@+KWuiz$7tL!X(oL{oPR(m4DXuv zui1~=NbC<~;OwjQW88R9gSMY=O7iPpyp5-F@l9yRa7wX|pU_8J{>%Nn_D#jrwYxcu zry*a$+io`emE~vcx7j%FLmSrD#tcu$KlnWAmmh6D%3n(=J;BtYZw#0i{{Y$apmtZ= zA7M)IF#O z}iFNH12<;$4m)Md|gnDh~RI}}l z%#uk2vzat-3a}(}9~7B+WOI* zr#RKV$A2MFY1$K7$WQ0V8)q2XtvxhxNfOGF4N~N`7mRv-p5a*+Hz<4)5Z&HGFh4!2 zu=b~A-VnEUyMtLbH?~kiDqMk=85^AXabFev=V!K; z+x9ku=n;)W2cM04_t_{KZ)mJjPDg%#jQWcGG4?tjI|9?YjA{y?@3_xg*O^+|#t|cz zPOUg>lYl;SX`05=s&{&|V@M?INyRm5cN<6DhXH}x%j?pM9I@zV(oDMl0Nv|UMp+$o zCoO_=>9#zo_mc?9M!D}C=~0umdeDk@z%=&ZG3MF9KI63+QR8DGw|EHP?L&KlT%sXY zVc|LQKPvCRp~2lpI3$ywK5EYktYJ}sa5m|m)_}`%I_NTpLhrYWG;4U-d$2z$sKEzg znyuZCo>s2~*k--%g^G749XeF5PPr|yzqOy?3GmzQHQTo=5 zcPQ*f9$ur)sPV^g%a+-9BhIBQ^q~wv$irtmW8YN#G)RR?sQ_*VBz*RzE-hdRG(&<$ zM~?&#odrm>((_1Fn}ECSebnW((2alX1c3Y;b5}Q!YcS&gY^NuBQ}Io09Eln6oE6CD z%=&p%9i8JwxIi3_4~us9@3j&&5k3q7B|nsg&PS1}%oZaf1PJZEte@+*`qf}qW<&U= z2X6|Tj1M{m^lxo$(nd^?=fb79-vh6&T3fR(qP()7Nf5}bjAtW{I_Q?|SI04Iwl@F_ z9kZO#Zl;>q3<Gju`GV(f-)bE1G!ed;L?t!^9Q*dH>HFCv*Ra$H$G_w6r@JyM zuFw%AfHI=)Gr%7lnwg+WTZL}$I2C&^W8c1(5Y66*4OX0FM>%BD(X*7tP_ya%$ zfxi4vXS}qzk4&-<4&$BiOUG{fwnR7q`N|Af-smJ+T+Kbck-av-$!>bT}Qw*5Kh_6Y)^Es zA~Z4`im$?-j&wcVsPmDHLAg8a?ySDpw|jt)I2uXt62osHO(MJzsnW9JV}tthMxHhx zv6mmrqfXfQ(y`w6>-bsDnMor)S*r_Mf*V5ya5mf=kDe+gzr0I)I8foh*n>o!oJHOi zDAIv~aBwJ4w3fg68O~{YR5EJ}%FC-5)3$fVS~8SHXtgSq#~bbbmBmt2bkJQFU>j}xxuq==@Yk&% zUjyZWjAJl#{QdsPwQSa+g*ii+Sb!s$i4cN@hKz^+Yn)gH+G;u_hEU8`u)D;#U@ zKeTo2A7p;m`wO)TEHku42xVO^bLshO+rG?p+#R%$$R-Zh#t6orUF&*Tj97I!C_<1< zI{H&E-#pVOhyqoxKpbzLwB^+A6!E4Nry~T8aZHO@uAoG?Am9_R&$w)UwyfAupuEzA zA``$n`5v@clMalGr#U-*y=i8-ZtOy&GcSl^8~J;wyFk{`_lij*hsV4e{Al;Rx29x{ z3v%R~G1ZKF#W^Aym;{B!ohKt3AC74oz*gl|FtIS)>dEoeHmPZKhlsl3JFg_IXH+up>87D~to%7PP?3zsgOn-^xK)UX~6not| zK?m3L_*QcE`lZZ~l?F9!AZL%#u>G#~qTjM@UiN0tqs6BOKe3{FFWSr6ma*Q%8$_cZ zw_jeKRlf;I#yK&K!8ixhVy1H(ibz5gS37^N)@TOmF>f4c7%u0+GEc`J3Uv(ejcnRM z%8~^Fca+S9WI57#^ZC=zkkljXjDT2HkkK`c>50YY+j=xLj4Qs)4Wop5*c-i>Q)(8}db6cLVh^Xp7L zfOO=8jgIuVnbJa<3BWix#S65%rU^I-+73ql0OqmQaV)raMhWnY=Nx@}YfkFiRlChm93A~>$?~uw!0g_8^gQj-t!poI?}4sI8P0awZ;fcg<)a0Z zgXOhZi(_Cj`&Ctrmeq}3RSg(m6}HE%0Ho2J=O7Wk(W@2??8&>R!5+T)58;AlOfhgv zU>t4prxlT-$rvA$fKjl3ssomN$HGa11hFX(JjK<*rhGY5o_@BfOA}0pOJJW&=k=naq)HHw4t$T-TAvHauSv>m0m$6cvVy`! zH~>);000!d-O9nF9BN~L3B`17&h4P&fxp&jjTV%2Ck9V1Iy6h&jI$3B^2J(bRZN^5 z@H5RWnqE<(48t3b>q}3En0I+zgcJIH^l@myKlg{G2T!f&U;YXFMMA-kAoKe9RW5a; zO8)?mKE!J0*FWh|0|f*z50Kc~gXhl`=pVNjE~o9wYiT6V18v6sd><EdRO0k{4C09wnP zW)QZe)t1H!0iW03UN!Ap?GI+VI)MD(wt4lh&u_d$uP?W^5|guWUb3#PuCA`GuB#%m zuvHl~>|e4Uv&+A0J4B2HNbpW@fB7L_as7~c6JywYpADR77DX8^z(4aE_LMg142cSk zNb@xO)}lz1>hS_wKD|2ose6YpLEWYpXvTAojZKV7v-r^JAQj2a>qfh}?m!t`{x#N@ zee|*>p@rijm{(Guk&ivNs|N(>#Z{xqfDQ$v-+<@G~J@52TaO>^;=Ni-f!qxLqe>qzY{i=^XFR z_o74spj?APaLyI=4I_Pr>CF{)0kg5P?)vnskN*a47nN=tR$Tm%?Wr_VncJd#Bs;lC)`f3McMNc-D$jy4PH)Ayk0c#bij zPhP!!X_GmOj|*V*Ki-wOxmR*d7t3tp)~hFSVjvO&Avrw{uJsloC{#NzI*t!O54+)1 z?GTbmk}Q}Y?WM9$>$s+4)f8B1GWaAB`+50QReR)jC3a#wkH5;7xEfJeT=<4bXt4${De)20k4*1XSqRFz5Xv%re5z$Rh&C~uzc%APU#%W1m@S}J zI4`FJYN1>9ygm1Kf%%60NdC0t!^ZNfDabtMr}d&mBn=dZr*V^m=za7EBSA3%^S~RN zlkujZwIGnq;W*nK`m~E7V2TJ_?sNNZMO4uij&t&>1@M4&7~+D^lEjqQfLkqD43j$4t>GvM#I)WKyx|7dkv30g?NB zIHo3@B4rPep1mjq&wZUo86zG-m_;9(ah>tyR|A?9vMej8?~~{0REAcV>H{h~sKNIj zj<_DR3o4lkZMUeaFvk69Rh6TXLo?xW0OKB1!UP~X6NAR*^r6h%;3x^k!13qJUM)D% zHyqT<7?DDfKnHABB9$6-XB=%-BPV_;3k4ZF44$;K_YK|{f@jF)tgK2S0h6R|Ti5(l zcZ%Viw2(O&sf~gk4v+^p&(G`9hGqOlQ~+0e1)FCI1#S|5PfsE zS~Z}Xx+V7V#wd)y5UdVP_{}eP!WBXok*k0zk@kvyB*F+~&O>LVTK41=D5Q``-^lt? z7RbWcQO;Nnn`W+xR#U+Qe7><=FNhJ&4J~shg^mfpIV0gp>xxOkfOE(pj{Rt}+cB6+ zf)srJ0D9xANh>JEcpW`CquE>sQW>)6Gz;1FuXm_|t%IJl3DOmZ0gj`92a);JZ7p#) zWp%;m2l=gXbms>?d+}MfcPk{Pae=nP{{W$&rTlAh31j(p@g98sbPLj0{{RkLXFKN@ zG`+pEuo5(x(s7PIOw+R}T)yq0_ylfoy=8XoqS?YESu>NcBh!v)H0@&@y2rb1x#wys zc8Bo;0s`-mpG;Afb1ozxWO6g_%{s>2te0G15WN`hkB%!gV;jKA2a7uja@q`A#u$u} z0}b}{@~VvscjH_z7(0sSW@Z~G0eB$&bF~q!b(IG?cn3SLmlV`8tFVPm$MiosU$i5Q zV=hQJ+;snP zJ`tbS_pEN(w1(!{;gL##xFnsAmp>XEkO3lwHTCZmP;`(sCqLKA_NYe!5V~=;+mY#= z09!$%zUtAW@!^IJ8zYbJ?yY%MrL@-PPOKBYbNwl4+2MHPcMa5lcQ_qs8Qt!05yB94 zZUM$<*H;EMK#iOX?TTm!?yZ+6Q!4MPexCZJy~@V=n*bk<8(0!h+KF6lciZG@!rC@P!w?4e&Nunelc7xxT|r-$JPql) zX*1@pI`Jfs#Ndn(fC<5*pG=UdmGQ5ax}hYV7>kT) z;Nal?^?5B?;vVucpzausnfTDsIJGovb0FAfgVUdlD{v!*aOwsFVD5MMnr`uuc@jk@ zeaQ{i(uEZ10bt}2*M2;+zoiFMEK4B#!v_Q9&(}0aBngk&xRve-q1^GY=Arwj9Cwj=k)B7+xLoFR(tINzk@{2fDz2Ug z1Dx_V98zQ`x>Dc;X28pDR+(giZy063&g5tJr6)b&GlW(LI!QfzsD1Ehj+Yr-MOa{wf=8d%tqSZz8iRv|9=m-CymI3~O@=rJC)|HZ4aLY4 z0)Q|(a(4Bq7Jm~0%)I;K&SkP)GbjY7NNM5~*>iM^3-3 zE#J!F%Wf9oSUKZ!=4#^V z*uIq`NhfXS7m40xJ9JEB5=qWa??4gPA@&u!n8WdNOq( zhSIwXV;w(wqfZ$xIR{e@J~Qh@OTz1f0s0>n27Yxvh!V!V>f;-ck%B5^MV2s_(i>%5 z`?ltW_H(3t+-!TXu-k!?>+4sug+!s}ZxGliCqKWHH#Bj&mLQfq4tS)dylAHG7!EM2 zpISUuz`H3J^6_Sw5+sUHwi|*tIi&#Aa#L8+sxj0azuL29w7IstY0^>MFv$T&%C+re z6F>nu)JQ+psxK|s9x_G-LBZyw6I%ZO3R8j5d(W*0@IArrBX%Sl;AhX@^_p!NWr#31 z9{&K|p-ETLPQi)dy58zJa5n_iyQorOAOt&g$={`23b%`?8`mxlcIVEdogjH}%`YsP zfrNkwI0IKf`%$7+Ks7MfZ?z3>1IqEP_!|*awzv{2BL*xoJ@}v?duhAZe2EAjmw(=c zdiujL*pY+2KD>4n!c0noOfzI*=T%AzRbX@gy5S%E5Z>EsUdRCcvMAz)OJM;ITi zFDGg4BW4Y_&%Zov@TcaMD}+7Mp_gcQ$sKm!C3x4WOL(czpJ1Idt!xZBhH zYGu2&cr|Ls1Z}>@Gz%#snrDy_L~1ncf)DkecBQ;iN{j(nP6<1of9*no2vTH}NE=Dc z`SRnMYIsEO7D)h&MpO};4~=Da%^l(H!C<{u;PKb%&Y4-_Yq0WaBXCB4sQTKkf8EV2 zOc_F^Po^mH#*)PS-bgrZa0fyU=~l3`F$r0lQxzj54l;dx^vtmagS-R+2P3ZARDLc1 ziy_mU`8;B+G}f}AEc-9!=WLC=^sM%&IBBAjQlS7T2ODG7rS-;!MI*aWjQtu#XP3Wy zN~K#EBeCeAua|Z!|<4J8N3!RCt zT79@f-g^<+hdws9Y>fGihd8g!TeS;uApZcoMJ{SoYG9+SXm&4U-1etv#c2YDXJEX6 z`;lK={fm8+TJ{~RclSuLOh`L|J{vg|^i8#xipdfq-RT?c*XOkwB@wc-u_{0W1A(jc z-nFfzWgXe&mjIL39VuI4aU9KWu>r71d;|6Mitzsc zv`)lM-R#?o8-!O^Tw^BVqN{)uUx9Za<0VV z@~Gec0DD8V`@hR*NW7VHt&hk!_(?{8yWp6KV!2%dfuo=PxmN6-yQ5uQwl333x&BeW z{{ZTht`3!L0i|oV2T; z@HCu%_DcER?LV+#_H)`<`#L5r7p^hS#Qyc-b;mnYS5qCGYbEXMREj^DhJWz+`XD*piX%1+npL$;@!tZuj%$K>Dt0IpZk zpI|>`OYCQ4hP#lPnOrsk9zG6suW9y)Q2qxaOKu6l_!=Y5&WfQ;IWIqns}4Zefsb}7hBujrfbN8E<;R_9+uIRld+Bi4BLjcy z>s{GVl%4zWog0j9M#NJQ&Sccl@Bm?x>0S@^n+yI0`?n`j5J@AFIOnG3zc{_O);*`Z z&*l;~es%AEx!iIYJ3-4}YG3PLU3PbQ6i;y>ECzbxKN{MynrF8{$b5Yc;15c2RUxp) zQ#KTD`&VA6(9DgmPyAc~^QEAeNF!pZxX3wfojw$K+IQ}rDFJqDumj~+x0vXZ$N_M6 zImRmT&kXt(46HGLPI^(@gqBOE%Nrf|-m`lygLi6D|CiWtKzs&(={y4AZn-KVu(ED=|H`5wJ?-n4s!{5VN5 zgUQa@k1sv{09sx`q8TGa#^0E9#wy*A9#~G5+d57UJN}i=YcRZclm**47&tih)h*+= z@1>BUj;n?k9=z6!7T<_29DsG_RyqBCvqxKJ1(91&BOCQOIqOMY+lW!amGJno4h}r| zth@1ba*f?FDXC6yybNQ@6qvM-TS&7e00T}RBacdFv!Rq(#<41>8?x&jEa%tjYVwO| z8Vg)Bek=ow{Qm&0c z`*3+5>sm5fD+ESSsPB+>+tQP~?i>V-iEN!t|ea$f>4IJqqZa`K5Z=anOIV0}0O#VHvaq>G*nl)bY z_<@M$1D?DJ=DxRgi%SsL!5`AHJ8>}>%t47GJMwrN=QRD5;#=9Qilx-9{w_D5T-?U) zC0K|fa6@D3n!UGeDP^}0b{+apI8)mh(hTOjBa53)3 zpRc~FCApaqnZesDlarnL=j$}8L-=vvWz_f^QK7k+14tOj8lOQ<_EpSxYb3RohWT$0VHtv_WVcQ0^Us3U>z^Zx)!=~)@hmddvH z2Ylyq&0aSP6Y3jj1mU(HSo5Gn@+o~JYTWWUpsnZPWtJDztgGk8nV~%642_)!APnPd z`qH-#9K~?JmD}I%-kq_9T1N^{6;7Lxo=-J&-!PI!a!CYW@3&e){xTy-^yeJ5uRo9Z z-m@+yk_C9cW=TdE6R`UJ_48NXA~YV&S?C@f_c+y@Y<+9w5r&iFUuyl+<8D8-HQ6aRy(C;7CvKo0MDvFxfck&+k`CIKf?V4Mwc`Q3TFbt(jXZjScN8MdZ zc9KgwlI63-C~>51y+Fx06=>9#0CQhq{nvejTTf=-?MYB~_XIFG>Hh$m8Ly_}f?F74 zLkhAHok52G01VNsT34Ddqn0O$BgTcwl5@`#2pq5gpz$HV4e|K%PTF4g5b0ru z>(eJ5{{XLrDcX_=P?ZIAll;SmQJ?W`$ zB8K2@74ePtr6ay%m_;1Q`tWrs`}$&=J)@wOd@xa!>Ce%o9_ULt7G*luP#^HsCNf!D zy~HctwtwOSB=jemJ-2BKyFEd0uDE2+2jA9!vB)7Raoqq8-|Jm4g zF2*_UR%qKOFxpQaGryH+!`eBCf+C>+kOOA`e$=<(=UXsIZ4w_75;0eswG3u1cQdX!jONJgIdf zoTe8zCpqiS*7eexdqgU+>zEUQ4h06zQe}6zk(l|B&%}Hwn6ChvzE;UrKJoRMW()P1 zm^8%*>y7rQo3!8`!|&L*CnE>z>(Z0$F4BSLL#P!VV_*l@?Lr;DYaDJ%jkjC_$I5`7 z&_OxSvbLeI03YpK*Kj6dNpun7)Il{%{@9K}B8iR^5>7Vs+v}Q}9@dngYnekK+rxu_ z>59>~xrC9W{7x_%u1zg1+;KXSHY3|7N!uS^U1smL0z;)F0GtAFe7EWK^Qtdt1-K** z@URGSdS^Jt$E8r-$8U6vHNn-K$Eh=s&OIvDow}CSQ%fW3jGT^kIQLWU+LpIS7`ZNY zC=`;v5zp7HN_NaJ+p|w5af6P&e=1Vf+FN&-!hiu`xfstp{OO*{y|<9fZ7li8BzO)E z+xb+U((KO8k(a&-Pf&+`xZ8To?N4cJq64~+V3VCWIP~MrylP)-P|T*#ZZZKG*zSC* zhqXrPIODs?Y;ExO4|Qlq?QNokDoE0}&Km@Lsv`E|v)WI>nL{%-h+&2^*NWM1YV0Dl zC2lkb@)yE+AmgQDKefG?J2O4QmT&>eu+{5BKG0i87Dz4*Vn3Hb4Q#6pUWcc6%3523TRdSbJCTiVML2*Zx=8OTy{bMB?Dy|nE0jT64Z z^N_96e=4LuX!fgZBxc~Gk+2#J?1^HM8;Nx=8=N-S$CB?} z6@B)(?D*|NZkHsyIT}L0r~TTSKefKVxrN?4=G2*7805nL0Lfk2pKN`HWn`jjrUVYE z`(ytAW9u}7eY*AygmOu7a&>{2{{V*}$j00y6SKbXe$7vFFc+_kWRj1!Onv^`-}x&pKfE`y7LykeG4DKP6&(NhA{+__6;0 zvA6l5TK(cZo?C#EPRJKH!oU9jYou-d@V$dA>n5gFAC<8t{{ZrB(xbG#@*Rr}z_wQ| zHt}h3pLg)+J)!r6_IVYWJyJ=){Nw)skgpT%U%ZX1F}zkb%t$+U&-ISIdF^-G*KBsb zXI*w`TNthG6svy`PTT(g^e}7E^2)La9P-DCTDCos?d!j1yJ8N}v|=76&NkoX4SUu< zyw7dDvczrJ5TIkcP4IvESGuO#?-$w-peEIT2Vf;#`TqdubX)%byw7UMXv(%M(vgK@ zGWdQS-C?)h7up#k(cQ2;4|tw`{Vt=lzVLmyJ*;s49fl5b-mmNYI?U|Pw?5moawkTa z3uhYCV1MMT89wkmwv$NkTe6231H4_nanU8~gyQW;rB{vsJFHsTt1IAmkB@l6>k2BYrEgO<4;r;GAc1M4DYdVaXh6 z#}pj-Q$3k?HI3|dFu7Mo$RfP9?8Dlt zi-3_>4e|c~&7=OUPp8>OwLs=u1qz4%0G~#G`8xC8XuX^Eh970(?E6m3S)qUcWc);H zgYG80Qped3ZF^4IYjIZEiBZ z?Dfcf8Smo%0IrXH_5tmsu~4??v9{wYblhK>(3)?d( zjcsCe1o*q?hyMU4TOF16aqauqQKY#@T;o#dLxJz_DY^db{jwrry`ZeCkbj21KlhcM z{{VNc+*BGb6^Q_C8f<^}mEr#YXn$p$wd{Sj;_gVA1Iu_9Z*X&7yzcS~1Gie$_DirY zJ)-S+yE@2bNe`yqGAr8+_6zMBMvHFCDRG>Vi@%ogRjoenUeP>&ODcr~2R;u8{{Y@^ zUPPaEi@EICqwRGrjf4LHXB>a;X^Str9nmWl$80WnBkOY2j0_i60T(|I4WZdMdlI)ROj2gX`2XZ_f_ zE+#~|xLHR9$}rEsOH51mU+h?Kgof+DP6T2$Ir87Vr@Kq;)!1?@V9bid42><}$NvCT z;BHL|c9sLY@JvaKK3C$d)^ zz;4e(P;d`c$3OLl+V^VvIVjZ@pC-QG6u9DH_`w~yH8vG+<5J1P|m zfWy6$fBEY7A7fs`LW_>WK$y<+OaA~_>E~3k`y=)_rIzXr%8f`M58_F`&FW|SE%s)7 zC;KKK5O{xx{u7^$+Wn(-gEU$bv#?R}8Gn%>zV znj|gW0_~lN;J(~*UlUB--0q-Yh9bPD?3c0O?cZ%|tS8-F@^jY%K4QM$><_c9%!{*9 z0|aE~1P>Pf0P|OrTl*R8^|UD$;ZR61f#co0`KF)Q9?hI+T_l{I7;*1v1m41SeZz?4 zhBg7SxH%qw&6?GR*?z~ffJ3B6>Z3|-F^^pDNZtD}X(TbKTPYdA-+y;G>sGt=OS0M9 z{?0W9!9%MIa60PZx4S#p9?qMxL?49GW7!z7^5gSXMeniD#VAXt(N3!Ptd7d$m(i_En4k!EX>NjE(oseNVcUkFc!Si-Mv;rzd=l51#wbWcG38 zBqD{}5HruFb3yG6;>K7Yfk$|DkZ1D`j}$XKE~clWi~zu||e0 zX<$!;k0a_5si-^#Y zIP*EFJ(mENyw%--zLCBM&w3TdW!X40#~4J_m%(AT&WtQ9rg0&D@eq2CKtF1M3|6RS z@J`&Sp9muxb@HSZ(IZiPoGTy5H^;}W^worx%AhxfNgI3&f_JS6RsgLbl&fbvXRqnS z0%>7ea+1lYvY+AkpHo6ud+Rz4w1Woq?4;=&Yb@BvpuMvx-tMz<$yb9r%GH!1b@R3gbqfNl6rI* zr2A6Kyg=&uh`|7K$H#xtoVF3q5tc?Vk>Jic`@gklOAIXW9bg6E-$qHb9ZxZD2Y@n56!52dHGPREJQIXv^tp=B!^xC>yj~hJ*Mh7y!YQv5!w(sf)WS z)H2S`szRWg5u9*OmtHAYWRY#!MwI03r0{+lRP85^x@|F) zXE|aCJp5|Con&qmlfNXe%Vl;TAAik(N9e~fN+K&tNfsqRwl6lI3?)vMBekrbQ zqGdzfsNPLPc)dN`QZmEdIl_q7BVoUY9nU{mrmXCunD=r@2v8UdZTr=GQ36L8g!hTQ z1~GwI=HV=2a=~KO2B|+b2bL*|gJ*dX&WNluXC#mZzds7CwaHkE6W;0@e=aFK^v3)e|n?b+ro$yJYIT^bM^fz4*8M~XoIoS4dBQigX2-Z%na7gYfWo) z*=-f%LPe2TGy+C)JjG}GGi`0z-Io_;+eRU`M8rNaz&J~q&Ob`WzJ_@SNZ(Dm6XE>XK3wL$d;8dSRQI07&nm`a zXk`xIwnhiX*1j;BMtK6Vf)j5l`wQ-WY(Mltt|N>B(;f95oh#_ecfAbD8=vBVgw6o? z=j$|U2@a-jQ$+Ztj+9qR={p5SUf_jVv2 zX(-c8(Vp6K8UR;TjgO}^DeWbeKg2wmrvoD+8y>vkk7p*e&B4Q>g*)dUd#j_830xT4 zyAR+8eaFX&W3;0!Z-$pcM!Ci}#(CJ%_IGHJvc;S;V0pDsR9uooVEDq|wP{DFz$1b| z2CoZbYW?X>)3uikB$E<{0kCnX`H`AZU&BU?Jkt*U03H#8;UlhdLbQJJMS1Q@Y1k=T zhU=PjR>E0~Mq!lxeJzkN@AJh&TmBrhR-;&D!ai|~^RcAtu6sddXx%&4845{V_v6TC z6@JjUzrr+=EKH*v-p7H))P?71rL2)H#9@l=${RfIovAo`aEr3HN(@-tLHOg3eP?@5 z?R|xuUDR`!u(%Dm{*~%~XnxnbAG5nh@RwIExKarU#~9pjwd=ob{@<+HBOhkQ@<3ILGT=Q)LV`^Q@vU>{R%5ow3(7tJ(Kr z?m4B5h=VZN7ScoKrS^p$v+Vy9JX2!U;I|@l-w3va-b>X;kHb1OgAo z^`mXw{{RRW&~nOrv-(g)!%F0&VO=)T$96ppCu=*yI}Xsfz?u9iS2~FIakXj6P~5H$ zhytJ=GmIL#oS))0Tx>@eqZrhc$QWKIcNXa}8jzd=q~werfu*6H+1e8-=~8@TalYMX zz1(Faj7mvkhUcH1QUzszs(9p3KpEKnwRj@NC17KA16PYX{3|!Mkiw%g1$||d;PvNf z`Rnf@fBeSnPX7RS)p~Di_pwqGOLK7pHcEGaG4aw#uX0#@ z=a$+9i1tgjRzHaU0P=O@U5)pK>}$IVyZf6%4a8fbnHh=CCn7v_uNUoKy)E>zO9XZ@ zcSP*MU=RNQVyvsLyq*65;Tkw>OXrYg1JC~eq1JHw!S>4)c`b`$8V7izAN_B7GkxRx zUjUmT#BG5v1OEWA?Lm+472A?p-HBmn<}3Ub5-B9){{ZwqUbL-`+y4NxZP~YW*Cewt z9_-}?54cBO2Oru;wb9(maTjYkv!DKVAFuu2TF~t8wcl**Wk)@yBdQ)WN5A})yC>Vv zwQmbTvb1`?m>AC9?(T(S_T}wmthsxpxQid|@f!ZRD*n=axBExhHp%!kHbjyM43D2( z(`xaHkF@V>CQu~pnHYI@QSJW#EhBmD=d{--Qcly5sXL7bGx}1qds*9(K(HJ4?)fXF zdHGeN_QSW~xBN0+xQKANSNl*C+FsgJ@ZUJYWSlSduI&$KyJNH!Qs(vCFB=WMLV!D7 z`#{CZs{!OUsJQK}(73f0(%dtkIT-_=l_c`B^UiZs48Y_P4NrLc__?CNcXMt*jzYah z6%BQ8Sd%F^se zYAdR9Oh+af?B|2R ze-N8|YxKj|=rwj#v|x!QbPc~kH}nU3^Foq{@gr)}oVGaQ8)kwgn$9CF$u1b>&jb%} z_nlNXBu}ta!;BR(p1W3457T zWbuPc#c>M)$lxg4jCJO&GbDk*@D4p{bZHTZO#b+-H7+s&jjz0QBn>LNX=OT5XE{7n&O1VuQ>x_Rlx)IqZrD< zBrArpS;NUrNqT~anR#~IjSqPn`et>Mv~Tlr$EU0q#WU0q#WT~bC365V2F zB3U#HY;m3FY%s(cpA#;53M#eLETv8jMRiJ$2*}9tt~}Q%D!`6L;<&b3Q*V=#Oy9Mm z7{3UGaTpS0la}+|m8k0OyLPNhFiKb2~OQ9O9*9br=jq zF$ZYgLWLupm0OSi-ikY8v=ub1%YaT#6z668Rok7M`t7fsPILKG{^GSSKGHp{x_C^z zsN_PpKqEnqlF}DG+51I120f!7!O!Ji?M&Nyd+jB=tdVwutEk3wC;c^{7uu(`5ysJ{ zX*z}&J_z&w0K;0{jrP&)O^RY$mznX6UIqUE z{p34JD|LkSRt|h@E(ZSq4(_x4qWgQl?OQg6D<*5-7rk z8xy%X&tF=0=vzd_=5RIe0na{kyfcQIKtilQA+=|2oYSabS1cV%mK%Ef=zxbJMUarE zBo4nqhprQFlQ9LcfODJ=hxVs4h0b*xXUeiJuVgnuG(I2Z9$hn$%`}f^0ZmQ(M#qbN z=#6w#fU0C?ZwT@fW!D;$EP=Z0F^Z(t@lSx`QW3BR0DA0bQQCeT!HKY&f&k!r^F+3h z+F2FyHW(khTTt(Gl>t;^B#K%~Jy&|&a)a{Y_U4H!ahb&I!aW1unvUY#!#IpEJ8B2| zX1U{ag$xXQ@^~K%(<)unSR4+%wNVr&#ejXsnyG&;pjC0W|tS20F^hymX`b)dwr6tYVs zddS-a@z;)a+aD^fyP5mPnRIxzAc99ub5?5(_R={doUsk%jEajGBPk=y*ljv?9FL#6 zui4g8Ld`9lVl3omR;&~6C(^Vo9J+{SLL2}?1Dqc{zBH}$ABc=;kV)h`vGJ_vtViNd z22e)WB>w<@e9R=RSMUn(8G9 zZezrlDo%QN?OJPbX=N6aJZ?t*?9yND2fJyaMZ-nZHV-^gN|H6KI@lu&jC0Kb_1C%) zhSt(>&5`dlOF7C&4DxEo0aqt%(I$TV%dFZI9}d|BQ2X12%dEwYoU;%zX-muImc^3j zD$S1x2RnM>YAoug;kg|6w`eaTHl1BX2EzDB>D_W3}A>#uKGx}3di?J-LDwjlDs01A6&wS7)v9l1! z!X=H%<+mq3Lz;wGf`;$IjP7y9$O&V!2<*>OdJh`mi#_ged+IJAl;Z{7WC^_G1 z*13(&q>fC+e<X;&~ zUx#g6bfey1M7GYTy4^X$W6P zG^N$IcXBQl8lNDM)`%=5l&tK_DkgO{ans-Rno{Bhmf$&UT22b;&Ochr_P4X;xV32D zAytr)b!UE^Yv2#JPhq=Husy82xReHlX&J+6U9;2k8ugn->&X3U%Kpr|2IsZ?r?QF^ z)tLc1fq)MDkzapy6`I@jWuh(+#uRDKI2?0cANJGRP*{66a3!|W8^p>^vT|$StM(6j zGpN94Bz)*2bBg*W?rrSkvioM8u=rHB9vtKId$av3?N;rX=AZC-il`(p+Z*|OY1ow9 zM8!1&k^wvI>%Y3Jot*ywhG(~%Tj%!onnD36yDK6q1yVIu?TH-*_cACj4?yFIjm_rKe&+1jIll( zG4koZzP&H^fV!UFwYw(d&E4DnBg6pCN9ug*+up!l*>;~|S~aK<#!v-q@(ww#A#|3+ zvaEok9~K7u{LL?Vhwz2F#Z?Ez>OCv1Eu@rph~q-8K|kwH#Mnm6n}xstbJH}ukgVqUao*eW)tzIi(HL;mwAa9lD2Oj#%xU>lY zbz#1LpZxlMwV`04phBSP0}43DukBhkvG-8we+y$zL+8^qNiI=T_lG2m0>7c=rDkT4 zLY-iOau2`ClC=pf<0jb|7#TUo$BNX6CS_$UgPqQQwNgU1zn)FoVYVn2msZPe-Sqfn z8ny?@ym>vKf;nYEK|*#8V!FF0fGJjl%OH^@Oj%p@hlDe0|Gm?0vleHr^O$!WQ1G)Vw{pwtJqI0cA=yEF2$)$!^kUEym zDVWJ*1oCU7EC4FHkCt&kd7MZiShZwt;@ngckfD{^2N?r7=~WIS0%QjyXP+USGw!Im z)ifHTa2a>_P+b@@?~Ofn->nkrPWdB53flT-Z+$5pw|g@I$r~M9W8<}YzwNrtIqhxk zFrngn7T?T{hnj!vn%+n|Ekv^5EUehuV0~-Yv0OT^jR@mEn;55nR6q$S>7D9Ek{3IZ z<^Af%CD%AAcgGbWfnABldBraFLCHG6$__>lgk%^~oSpN%bUJ|{ zhhI9a!@M!+_8ackRak#81daOidiuZE?_v8Z z+1NB#K%hu)*e53)KQXT{wzHPeyXf$$yYrl%oj+>HB&Fm4zHm;hskW4fLM{eZ{VMK1 zg@d-ktw4wrQU)+Ms!I|`4|;>tbD!3byMVEOx`%3vVpA(I@nm^ZA@%^{IqAhoIzc@9kN2Tm z4L}t;srB^rs8mBJ@dKxye%~rSkTQ2C-$QaW1ArT!QYuRvE|3oX>RNF#&PG5%u^(SQ zg;E=0#51n^1uPBs|DQbe7Y;E*xLL;BQ59GPZz4oJZ1^WKZ$UlSZ0 zZ`1uMBav8YPN%NbNhQ{q1D-SI^Q4|>p52#n+vIXRdiv2UB_%fcgP)01%t9S3I70#$nHJ#86CsviM)6oU$@sZXfB;(ST36l zj)xz$Fs9YZGL<`Y^{o3NP4zZ~-HH z6OYn{)2qhZD`bE(vGuI(@9~OZ!Y&vchd-~njof5l9C%0|d%ga2cD3%}*Q_?f7$4@B zp58}6BECxRzst|cyT%{^iOBWq@cP=S*I82<$G9VMe^1tzxmlPiha_#C`h4k&R!NS9 zAze=AjGDO*8OP=f2lH}1y(*WXgnEDhPXnR(QoW-SNfPKGvIYp|yf52#HvN%wq?{~d z5>DKDSLY|%B&$EQxAL!9o3E`i_FHDxp4eE#yqQ<`uhHLQA$07Ub`7MgdO;pvI`WG* z?<5l!3d%8(bMyV_+xXF>j&#OyGn3{$_16rd+Y6im0n2sy)@9ARm<*~jgX#5(T`c8} zNafN2bB5z1k6+riA=1CXW0J};LmiLLaYm6*7^)E4XKu8Rj#tuj@Yu&wzrMENRuKYN zvtx2=qSk=xWg|R|tCvV(;q#HcYOQgmOdU8l>qISt%I~&(seaKcuxbYfAal1hSkSe$ z0bGN>r|UzE%i%{XLEk6zr(iiiJiT*Nn1v;aDwW9_^Foe7+eS+q?0C-9Xw{bkUP&3o zY93{XBAk-LWA3c?zL081eeyTk9MC7YNahi-)C!(k^u=k}#*xR~>J5>xuKxgiI6B4v z+n=s;Qt~`37Xa$(kMmcOKKT`}Go8VuF0GjdcNxNwj&YAORa>i)OnP*X2Lm|x(~uWL zEi3BIOGC2j0bll;DWSwUhi9XpacD>c-H98p8G0J z#EzbVneKsK8P%VCS{2Z`PCPtfu0SIOxC{&mi82>%XcF5AavvM{5A#!{B3u?5ahAvR z_f?^pWG8-}dr@(=-1N;T^R}i?0n&NT`J%-pxAAEQJ8#VtoMR+VT=#m|u{k*dVMCQe zE6=DQ#twF%{v;3-9FjQc>xyT)Sz{o!LC40rNCuw>+;NZTy)2FRVYvL~Bs~c@VDmjJbzv2GQzhHs2!W21AHEv z`qHauBn_@WF~}g`d-P zY0GoHTfT!Vq>Oq{B(+ZP$h)rC9(nlDQsA~@WFyFf%~frf5uGD^MorJRv27Y&WZqI%II?Br`!5Vn?4g*G z3$W%*Ao0^9HMbmy%D==p>9=1$T3Y_uTLVE-Ng2=iq;2g(k*JRe#_W0X=gy099;pKr zB!isiK6Iq2uu6`Y)95++&#gRyCYc$SLEvv70g`%;$DZ=m3e`E|_{l@eocPb3bW z>ZRqhs-UY9hhW6|=gy`HLc`4U{c6`20hO4OxXHo)08W+5D@$(Zz>&5I{XJ`~q$&(J1(;x**BC%{l*kM1 z!P`GNmuO;?#V7|@!(-jI#*=190Zc=rI2oM8U|YF8&wWkaO(&c~qM zy6Q;fbzr~-!1rxexsEiCy;mTpAmb;~n zMthyfz}WSsuC!?#)_&Ynr*dO1d?7(QownmNDefei4-q+0 zf-pGvdj9kaE5KmT#P7$zRQ9kjDm+phD0wH(r#^L9?$xdV+^a4d%v8)+zj&Ys)b4d` zL8UKcMTo|#tWGiyodIqq5#SAo9|1-#S~V!3mDr7e=9rE`%4ER+j4%!F+nNZ}BrJEs zU>xH$cFTq=RQ~|N50{-P?Htm9q$xx^bfsp6l0fX|EuFnQ`J>sfS#<>1aZP9k#<~=80~}pE2Xy0zj*;umdVGLyqc;^ zvX1F6k|@B=!1;VX#YFK-BI}w=usbPSXV*Vl(&=?6mNASroHtwn&+AS+Q7xmCU`ubt zeK2V#0Q^C62~aRkpVog$CD-v36q8C87+e##&uR*e_xMi0X~|MCo_bWzb0gfWYQ(4q zuLg^45=8^Fg;|LQ1n>Kr9QKmUGAe&C$vMZBHhVTzwlSoeoHjAOe7T`qvq2KR`qw>2 zp8L?h8g3%iGP+poMsxLwVryh*(ZR?gBxCgEn01aT22%JayWmn&%X0*AXkp`DF|exK zFXGu8=`wk3zv?`x_;1lrBc_%EVVwT}O3t~=lF2p(j1!EH@9Rukm?n&Z+DRH%oy9Pg zf+hu95vc3e^`c!xDVbdtPy=uq8&#v0HbC;ePnRb@4XBehc@ASE#4t9j>E2l6R&*Tl zF~^|IMa|@vW4gvzkIa1smozIQ__3~SoklV~bF(B?(}fwpn$ zwP!ud%NhodXif9l29UY4k)55`=}tZ01Lad=aSgmKs&cE3KAk^W zT3f}Q`@1K?FgMr(T5;w+&5Qt}Y&H+S%lcCGGXmYyE|MEO?~gijykEl0APTMI8$24q zmik%YR?^!xFb)9Ph|;>n8ud8z&iJBR+lz&f%9Gue!qjbMTLO_1oZg=Yf5?U zCA=6xr${3#F}LfQM(Xg}UM0Mk1QHG#^xBAfPB<|M*NFk%mA1ev(wP)H1I~W9rlK~e zva`4Za58s4I(F9FNoU@+JYzWr{QN3lnn;zR8z0KVU~f*^+&iR&*dCeN%gU_{+A9Ge zVUfYy;8H1W8RV8Z0FPF~9X__K`J;JexLC@CCnrh&05zv>aRRNsh%n!OE%CXlNabS@ z%=u#bs3X&Ds={be0k-mNK_mcA#)koR&XvzWlg8Y0y#oGOEu~ad4glZ~I&HsN6d|s2 zJN{+|3!IVl&&Iu3_knkh*lyF69446Aah#GcYxB1M0RI5OF{@C|{b#Lv)3WUC;I~Ld2KnIePR95y zU3BRu7`$x6K^nL6gX$Ql$|UBBUV$lf5?(l^Z+?%}&} zs0{$^gXh7hhE%o-5Mopv@$2uQ++1Q-jxmtj?mWHuq@^;)G9v!~E;;k~pVpeWa`A^L znGQ3*8_;i4yE>gik^sRznXD6SaV7gm0nl~>Q0M1bos4C+bEs#a*n ztFYTvI*(nbU?ezIR7VSz8NvSm6xF~{IcA<3PE7IRK0anRNogj zJP6XQNSBN>NY~Iv3DVu&Fm%HZ3W`HY2$Is>-O?yS=TI^z5<@e@0N-bR@4MEs)^q=y zxwX!{XP>+G{zRS)jwM`HoJFKm2rjkofDegcPa13s6y(o>4V5BIDr!7FF| z&Tc7nC0oQ1o2}nOUalQW6j{nQZW(KTs%5c6Kqu(A<7impkGLKWM7;oZMNMQ`quENi zPs%H?joE(UZE}k13a09`+%_(zJb0 z*`My)p{l5EsL!$+j}>-gW6TkwmbB^1B-U=VrFW4}J)$d^YkLls{dnLXf09eEhz(&+ zAC}q#rf2bRzv}5Qu*lF6hex`8(^}{-eB;2m&HU&hoD;Y?2&DVtT~zSHr(orFDdYW% zXn_)*b4i#BH6aMetN2uMwNp-}tsIZE%v`Tp^e8^ zX%b1e>Vq^7kr=Z!dku!_4Tb~kU&!|5$()|n1ZB|veBUa^@|_X2dx?FQ%SSp~8iw6V zj;p(!7_V(g_vMlTD;4pIj9ATST3WJPgj^@$etwyn-CQ+6>{a|{$x*exsj2k6$^8+Q z$LMyH$imCHl?fNL!1x@&?%YEvt2yd3=(ux?xmGxA^M$u?X%L&V2gJ;3%_Old3nq`C zksJff89lUk#(d9M4% zd8%eMWocZc=;*c;U}Q!zuOM(%^L++RYTM&+gv(qYytxKniBST_CfTZ>m2Y+JS53`s znsC8#QLXf3#n!OoIky@UazCRR=&CmX-Nw!jma_`57k;E_C}!F9zbcVibK$*I`(*)c zSSNm5kmR@R{N$_(o;0RU)${r}d=$X*L>{;YuHVdzllPi6G-;$KUn~ltNf4X)J)2ZY zJEmaxEb`^Lfc2zc?nC54ox$*mclS0&)-tLj?f3VWc7??D7i92)MAtxwCq}M9k2Z*< zZBNu|r7PY#7{~&}jC9?GOW<BEP$x-?q$wT*DL+$*wKBGE zzz#L+RUvqpCd@fV zzgr+Rj{KZ-4~WP4(zp-Rm-)IoSW9!AdgGJ)I(f+zg8HRvq5ixcVPnh|4xV?j@>3ohM>)o8*Sp7(DEIIKSos|t)5RGT5F+<+hp<}4zJXe*lajiF3vA& z-=kuFnZ-2csozHFqj#D>sz^$Bb1vKTZx5*>?-04u<+8`s$W7Zeq}pnpdO&v~R`~K3>rtA46!{RS@7hfoykJTj3E;mOdx-n+Mk{CygODVm8>6 zS(zA~({*BW+RZrN{J)&-93n8BPLf>a_`VcyOVV(n5pJgxMN6YYIP)Ba-LRD09O%yA zr>WSrO=Y}(cjF3MLaQEqtj%|El7Ux9i>*7~hCbD##$p;J%}aF!=p5QZ9AAs@d`T_cID}$FwI*yd$=|2_@F}&*E}V;t>Tm+*|hzjPYQnQLZGDyzaIe z4C-D^>c=-Ex@q$sL$yjG;2`NQBlh2Ndf4tJ;n!skvS6IXP#;>CQ&GvA)T=H>4jLim zR#f*xa=^q()ni9Hy|9>>&BW1GT_3#vEr$U)Dq&U=jPTfv`S=)9Lz8{@#Z zJQdAl$pwdLm})i-!%U8qDB2&7tAnnylTRxeSH--Qm@fPIM~9wcts{wXEI zO*;$SWyIWGw`{p7ZoA7U{~zGUpAGc~t`ZQSN2Xs1`B&zE4nyX;2sWRJ2mA*>2H2v` z);@lqdjUfqTHnbwD>h>~IR61g1+m825;0$(Ylm*&9-y;!{9};e@pmfFCMwDTTUEGWFZ!?kr#9!LL25a3eyDU;!+Lqo6Jr=7jB98%U;^ zq+myvOu-asyokH>vTkAIVf**QIYU>130Mg&4dP*g8KdH}(f;9)o|~kxR!atREn{Y{ z$C)6QJugKko&x552r~K)usr6)_X*1NQ~YC`0tRXvB;Sq>K;;qbXAH1J$;G#AJ@BXX zpT87_|0Y@M~#D%T+C^Vq9pn zkUUn6cK95Mn1NZXvOotRadw}D4m_Q|)d%0YDx><_zIWa$S_zHg3YS7!1=p-r0@qKg zMB!Ajyi`_^23=@-xQ|Mg*H_{_I%Bi}DyS`@+fi7ZYMwvTHt0V_5?xMBnRgD*FJ8p1}^^|_VnE?P~Lhpd#mjVGSaQAGnYK4 zkIYzRnnm^g*bmE;puv8dyl?QWt=nuL2Q0~5%)q}@s)qb|*_yVl^|ou@rv!YbH?c+u zwaJ$dbvXf3vJ3t)cp@!9Kl7~xTrv>&DtdRPB(UD4h@+P+;uH_{eFSb<)AWpLh$~<& z&`Q>Ti=)exD9g?SI`b#ZiM; z-besha2b75y~BH{kp}4l=FJim-znRTDI2B>(`)86jARd|@kvbn1nI>`F`nveEDa#& z;;$u$2uQvHZzp4~-7v+kqv^Hb z)YNWiK`lrk#w$Azb11*fIw55bJFW}NMJ<8ox9#5bdQEm6m zr)CPY6PdD@T9%At7>Wn!@9Ux=u~H9wNBs~`X@3ntwf+6|cJ})VxwFxT{{Z)M->kdq zTT}N#%w#0sBTWARxTGuQA~s~cgFfl(u@G};LN2w7{N^cz0HM*7-yq%fEuMk)nI=0|r{c(0uG7~ZNQv?{?u)k3UpDyv13UzF zVZ1x`CGgv>F^-jKy(_dg**;brYySakWfxYPdA-M2EOM_Kp$Lqxn-Nv~s%pzJr3mh< zp3cgq3C00##B=o_E==d-d+-t!o8&@bK~(5^^6?)yA9>0ad#&_WJ z8+kRCvLZEU?~(c+VA_46M)o-G3%S60I_)Tp8!#NFy^51>K7xT&dCfU>DE02X*I| z(YVSHM7N@Z>LHtKgQ=xSjk%C3v+oa^z4`MD^~GJV)WooYhrh0H>jpCCT921xo(!Gg z&3N8w(^+AEv_??kN4A+D`&E~)o{2}4Hu>IvfPDRBX1o01_2I@>RSg_ZH6{UrTX;Q} zrJj9*G8v{{MbmBdZ4oJZkjLzIW)UCI^w^)+T8y}bZ~rj&&t&7^L)XikhACYW)(0{~eOxA+9n^NAw{J4bLSVyV#|18(Xe7iih)H_F{phfsU zLzqbi+eKyg<=Svf1@KR$*3JNu2Znhc-7QFEn%2#-u2D$Lm z2ct|^1G8||c0N7<@O;UXg%r4DV&;x3yEvIm%K8z!4;#8lc3k9FzB;1Z@jFJ1{)|gTKf}w zsCu=rmo8M4&ezv@l9WFU_#Sf302le2Pk!xl5D!fFO)Q3HmP zb!8pZ{cOWNBPo4$VVeZ0@51PHaL@OIWm!r}gE6p8qRsKdoizQT>y-e&-QTpfBPGgD zL~cYg;KbXNg`w4@+!qtpL}F;Ng2R2I&bD?|1VtuaGKKve`0YB%LU4-wGesdb@FekY z5fa=t7I(NpI!noE(~#?>@*hCz=E(t{xRAwUIN3&)%zG6Da*WHxJr~Pk3c}$G;y0~l;`KmG4{o=r|{5d1& zjrxK&?y$Gy)${wMeUT3e#w*UCP^?2WY}U6^AOcw=}|g7<#NMz#d- zF>s~Bfw9$qBw6O2k4YRKKbs8gLep*@9(axFAw+o<{xc!n4Z(AuM_8nkW9T{%*LtSVr0SojmJSd z4Z59ssPq*6D#*zy`YcAcEyC|jOLl6`Vmd%Y$ql~s$ccB#SW4cOX3^FDDatDx<6TiZ zxccJ<*QX zBI0b7yvn3nD;V%P&0ER{VU81fhRqfU5nxM-cPss-v`+tl!xThjaW-9ksG6pV&HKB| zX}}6_xq@ut{IRf2ty%RSK*00U$n&*~A^A5RL*eH`KWU4CVjOv1KG8|+=`(nrW@)}j z<7u&v=Y(A*o!pm0u_=^1Y*DDFK8ovia`9awXp@cISg+9#esyP|r|L$H7?=wg0 zU+=)`k1TOy+dsO3r1QpQ@61Bj5`=+{X==;*414x-Y5h4^K2)2%KK*}n+f@5=vQIS6 zxZ%T8_=A=f=;&+x)PbYfs`k(JuwmpywOM@JQM1Ojz*qKfZ`AQI|3F$lrHYP~LBbj4mwRVyWdVPUUSL;A zc3KKIM_Mwp3!BigLU|Jeb7TAOjN>AT0&Tickq0~|%4YesWtsRB$PEWAnjr39+=q7K8CZBYcX*ImXGren$$T<*tH{Xn@jsfqoqc^n^TK zZuB#~lH_ry)o{cIUW*pE_ zeRmNhH-=Q~Y|q@lQYFm(aU>K8S*pbewe{o1eWxUq)$aF zBSz>eg7Ca%R%~WMtzm=!o)#A21x`q{J#e8rpPg>}%#&xwvOI&@+$}j)H(SeLT>H@vsjbD)}$rdCp~97Bg?Q zJ~_2xI)4CPT==sj&Y;sF;)r<)cCC28_I=P=w476urW}Eo-R|YqR?f`P&q07;{uV#M z5YH7N!4A=qZ@3JmcpB(D4xh)nE;K`Za%ECsrGXysQ*j~Dta7*x5MF@XI;OYGr#r<$rWLUB`I?c7WuI(pvD%`uJh;<@iv zLu_2zJWM0wZ*%uY=Wl0R5~lirtfaSlbyE5dscw$1eO~kB2_kdDE)=@IS)33oDDA$d zrG3%_GLnV$HGgZa^L)QFS9zk<#!S+VNfzJQH}WDu;>|^^ZO|e70eK>Ufw4O6=NkhZ zpX8#jtGx+EF-crjbNlph%QSkuVaa!be$1#rX zkR(}*JWuECnPEnK9rTlTCqry%jNqN#==p{-hZ--OY73l5)Jn(&9T?{KOCiJ9GuHNP z@zrjvXw4*`EZp8_dcpz`v=8nVKaN~`9I@GS$23o@10NPxO=Y5+e!6HKrAZ||_5~bY z5kjjOR;;S@Q#F6CJyZ6YaQ&!K|IF{pS(Ukh&vtehZ&R?Cj$GY>)0^lLaiK4qbOFq~ z(12=-)Tbp+^NJNPQWb*Lm+T+;i-Q}ztGvZo&M=A`*DgaLWZQgO;`n|g$-j#0f|+;f zUBjp;o?cqmm|A%Gd(N9lOes1IAbV#8lSqkW zG9>%Mq!=&O;Wacut5*z&qjyHUn`Zb-YLP3ZVUNc`sHnioSxcXgSUD13j)tzg@JxUV^a-wNeXuQCGUb)H`q_Aa{)vb;|e zY$H2QQGHt+SV^)0x~^HJ8y^+kUrOmj4p1r%W|aqPX=CQuay0rKDr4m#8<-_i#1+mz zz~hD2sl_vAwHDDI7|=8J@QKJWxZUno4&>rh=r=gHm46QP9cIGM<}zrbkP*;EFfg4`KhNAOS)*;cCc?G+r8M8=A}0wl$RX9t(Qm&7LcFM#mX7)JPHa? z(6ManyBWX!o1H-2`hg*({=U2}(tnaSO_A1sIJfcYVsFdH&}1b>RQM=pRE8_$JqE7n z0i2DYEzlYZB@(hQ<5tOGwh{3AlhjcLl#5H_N8>y_6O@x_*8E(WhMQsDom`w+FqitJ zHEpjaVXBoonW1CAI{JC!ujV9t!&HUwy~v)t>8_8c$z63%*2INl`RO5?ojBS|KjKv3 zQ(x=yuB7wfYwo}MDOxxCMy>?Oicr$-bC-ZcM-Ksxa03H_BT3qdI(lORsLd|oZo$~t*f9P> zl8Sa;nSsA2zksUdq5?|{=@pfz6v5N}^nj{`#H7Wsyu-F@jCM6#2Oeg?arSKyb4p_JKWOTU01GQB!b4mxNM0g1QX;(IbpaMIXsz=wa)^t13{TsEg2B4;=`q6 zA7JB~-gS1Tb5iQ-Lf$9ayjcQOa`I%%Z11@9teElfrX`uJTP;!w9kzXX{m7|}h7n#F zZ&HDTlS1?(hdTJAZyUA{1&NvoUy3=|*gR4PuZDN|Yr3+vurTwS^QT|L^HhS8 z;~mc{Mh;`t-Xt_r=nV9N%7^0Q%(3ERq%h?C!o;SbKkDtK-ibmKF)x} z#YGOmgif}QUrF{BuV;Q!s!Y5soiD)H-8`2Vd*L@~Q#&PPh(v;IX_(^T5+ zI4zI+K*cAQS*qVTGq#1zk=DUmwKg*0AqrLQjw)|hdb-1R|LT(PER!>oU;_$oWtV_@A*2JBvKIRGD^d5KeZFb`f*eZ zus2tUfwz~p2k<~SX;(rS7Iy+Y`S+_d?VSh5@|e_e8w{k3Zp3`~D%Xpb6}rhm;R4J6GRy40&*Z}9 zmH_%COMTL{^xhvI1fD5qsCn9X0-{14PUJO=Nws(0Hm*O(9y>G^0Dal?nGX+ldpL_? zq;Qk>xxK@{!ZLG2--O6>Peu3nBOkdSKi0-a_ta?Y)}lE$_T=M&GtU?svgwo#I3%V; z3xRQtgixY-jIZ;O!d7 zbf&h@b93?iuF-==;Pno*u%B?bRu)o(TN%^B~XC&7E#Pb@_Y3~aJi-I z_Bfso+`EiTW6};`*O)OUdSn7TW7kpG8@k$4a19V@{oxX=Fo46r94t4N9ouPc80SWx~H_6 z`JjLZDM%^ZRdEb8%L~86fziic*cIX-ziGpIiZ{(APNo?e6X}2S0u20X{G(z8d-_DB zwTnt19FpM)20e0s ztFa^=V({8uJ5bb<<@>P<$=pJP1|`o{n)`>jBQCgKbvRzMdl!r*79;A&gb^@_7=QvWw>hX z77;J{KBtZ*-7|?k-0!{*(@*W8Ub99=>aQB{n*mmx5Z5{ov&*mR$39ldM?p;(SP+@( z7})tmgZ8Vahw=KZ$D!U-ZO7iUgr#lHAlito`{{q~tGxw&c8Rpxx~#G}-K zD}ck^xqa|7O8U(|{#4rjhl*eHo^eNPSM>Lc76Jk4Wkz38 zw@e>__dlL|NxYVru3t8r?vFF)84eK&jUF9su}?GIe&g^|3*IK3i1kP8Y*&(yRHWc_ z@!edb>oQx=2dXHR&@6edcbIxC&vI}7 zwG$HOr8#JX8<+6wz=LMr9cpjIx`E)x+G&D#%y2lCcbz0|>zAL^PgFt6_qHQv72Qe& zwlCIs5O&e{@rf(~N3;>@$Ryzk&%^0p4QuY)5k7u&}1%m%(*gn$FPI zSNa%f;pM&=uZYqkT7EBEdmt}G7Mst)F6Z4;SbXa-l9WlaQt}{>VYwC!Mq)R16Sc9n z>ta|CKYnQHb4Ulxm5kk($H{i{R3ck`nQdy^#h@6a5D|fQ|qj2N0TSIwcWe_73~)9*ekaf2~`fC~^4i<48 z5wVBLe}KMAlb>vnTnM7vI(0nT16fh8Gsotyh#(6nLxg{gByr&EC#rGJLGX>c;@S>D zQL@mB01LOlEib$~ZW+&&PR{hb*l;)yvB!lRXw@z4iQWpCC-eX%%_=!R{9fOosyFZ(3U5rkuj|N{a@4a4Q zZf>`XMLJ%+A7B)s#AovkJ$mP88c2eieI!URlKK~i}Nh(hx;+V2;y zmsgA%`Hl*jUM%rWHbv2P(qh7i%W~5Kkm4wCzgNwe-*;7iezID$Mwp9|OOob(G?vZ` z75b0f?TVwmQi6Vwt&3V;L`?wC;v`jdCUx9`6gLpl3^S80l=nDNSx7_{=KOxe@>>|n z^p1-4a}QTrgAf3QbvsYzf3h2XXIS0qo`kUDiSy}|$1~+%Ug~B^R0`GFK^EE8u>%^g zar8CH)KpgVB&LiM{T;*r7~%GPC1Z7m6KpDp0T|ri<4X0va7wbC(2KXq&Xo-RbhL~y z9TYRWwdL*)sal!9o5q4fI(!_T4;&H)V&BhnrbeQ;7l&2@37k7m(+_;2!h2=7Ivh{%Gui4r z?~|9f=hwf5<6<@EcZ?X;om0d>DJ47>G_93HGzs%gRowLS*S7`uM%C}Gij~O)altT^ zzlDdC_IxoRjB?i8TpaY^J}%IJ!}}6o=IEDln|HzeE^A}d&Qm-T6-gx*3HN8{U$C@? zlJzR*8yl`I(L?+!i-bO>zG5^8&DDr$%iAE+4CZ;tdQ!#;{0L7^JR=7|&Q0ZM8iwlj z(~`Q$xpBSrYqBG#sgfoh_%`ck!0QLY%)C#LFe*D(gz9xY8wzr?*WPV*q(s#ZN~VJ> zS}mfek1y7Y+f#clxL-?olSb+p&ulp}+goNFUB(zDGLF(4nbTaI71S)Z^B(QQEPO;* z{|?RTm8@3sJ{U+GlpK`A#QNJ>wG#LD{sW_V4SwyVf>_7fM)cs=_S=f6lKG%97HCq( z-r?oZ@ZD)@U|6r`JV zLe+FQL8W4K79T!<-7vV0*idjt+T>zl@x~R-1y2_&U20G#DO9G%ao~j;d~!-c$d3gI z0LCZEVuBJxpY$^UQS zg+;kVfImK|spIB1 z!5vdmc)(_)-JQ=l$8%j>Zj|4RNpOx2y+@K1ZWC~N|Jltt+o_hnZEDQcD#T*r-~eCD z)l#(w?GWSXVIbKecH00y`P2ni={LLL`r6kwIAQHyB6BgyRc42Wq<8))fR2?bp#Pz! zav4>G38B>OWi@*ZR4Ptl;O?@Rir6VT@O<(mr?}*B#Q>BGNFHSb=el-?J3^90V z%ib^2Xu%T)v3=$f4oz}je@yY)dvs68*v+%Ykgw|VaM`?u&`@_4z%aL55L7r_tt zk`(cvkO#0{=FDgzf@Ukt=WdokfW{IvI`*9L9d@_m_&-UG$$AR)9SJrLwyUBVpMP`W zJmV90cRN)}H3wvWSS}tyir<_Lht-Bez=YmurUftRB>odS3On)+J(+l1Scv{gHQ#=s zG3JHO#k#lyjBv{8ZZ%x+CJey92113#Q!4(E?lSBhJ|AiUlh*8p`in3Rm83*X#YhYy zuiD+um<5AwEORXqi-yTDJ7?#7}!z(w)4)zA0dQh8l8+`(c9cX zkBel_-j?=@sj_T`i?bElUN$y%ulHpu!p~{LE{Y9TjM@>`#l*u{3Wfop{DHTV z1)SG>y!oXkjfSQ!wKSRGZ?umq)v((D0=O5R6mjJrr<|clQV{_1k_~WlFfUWVN)m>x zTvb~u9u0tO0P>?Z(_`aHcJO{gOC>Q4GD@!3t28?aXe4o%67t~oVp~aSw44Jc*Hii4 z_k*5}b0KWCl>aY}PpQ18v)ngk=B3JYnq3_7q9%N1lH0;{8mIR-0EPg(h@O9MN60yC zQy}S4vhC&e9j+<3XW#}7pNqncMomtu&VP|2E~PJJh@+eP6cBC}svGNNs_&1BIUxIg z-l=1=5|iRzonPk=`_k~YKC2<=dLrZ2UQxGWGKfzP#C{CkDJoT)HG5}%dk-;#b$(rc zQcla@V1Ie5d-P+3AW5P6KLEuIxYt13|F4Z-Ds-{gF^~s(P|0hY~pR0tAbJPo1 zL%C1}OnzCTvm`0aoz@ z;f)%l(;U-@af{33Lob`ZzmRn}<&+sTQhBO`HQRoDp{Yuo7RQT@?(<7*KD@e{3wjS^ z7aG%H3NBoO)iPnKC!YQKe+J7zSE}>WpIM$LYzI`iE^~gBz^pG9%dqS?QK@t$@j;pi z9OQIgMrQ!<4UyZ$m<4j=>8hC+zKM;q=fxfRUtnmHZwC(YWUU}UU+gQ2{v__usJGp~ zdy*6nAbxvUXbz&B)czn41e)1;_*G2kEd@TO+Q{%q6T{x88KY+)gOs_w`e2ul(kUr{ zXC!vJ6teuhi5;6{43umpTGQ+pyWL=$MwY?&6K}aPih-%$lFPkjoHnk8G#gRA+@tra zi_P)R=pF}Tvm%SP97|&5iMp)fN4e+Ev!AyG-489CoLAt8=m}HgGLhb#pI5!eQ78RU z!8ic)H1gw)Ej8E0mfV`&TdJz|{bm27t*F1eY=P4SvMLy)L|$o3rr2P5U|_Ngvi; z(yjWideAXAEqQmSyL#%P^c#bbmKYdg?gcSS5{~faKI^;pa%nO%d9OP98UQ!9X;rG01W;B6^Bd-2_z%lmGTKn_k#fm31{NI0o!8ZHf6J7y~ z{jEHL1Zv8@L@08m)beSOiKN{zVCb~^CAe8{GKJB&RPQw{~nEQ^lNX%K>#-(F;_Ado+cLLdo;oZ1 zwrJw3;lMS)5aDC`{o;(WYlx|Y{^r~AgUhM4M10499)ZP0?EW9c%n;W1fN` zEmc%mwKXHa8qE(QIxo=V?&eW zW|oSx+s<|Oh_bPT84m+hxnOlRwH0R%=j9|GUE?$SCOl4``B0<91kxk!+%$DOHgE(X zE`{d2YPYy7lWg;wu1wQHA(gi&#bD_#rk2Ga!Aq~{D(F45WP1+6UhOgFW%&*x@azj} zbj|xsg2}4w#8#eNjYu+7{nBZ}2Qk-$AAtF@&R!Czlw3-z{|6{PG#FH;U}LF(VO={< zM>L<-#r;|PR~=PiLl$_;QA^#b-$f*lazNi+aXT~S#u}qkEn!h9d45sTXe&CE5^kG! zMUfIX&2TqA1Luf{dD15RMsRN#_v_KE!(h8d!=trX$#4*Ks?-ppzx14Fv?HG~Wfu>d zqypUEe>ZQLEz_iW<3E{(_gPm|-ScXEYea%*g5GahwBV+ssV_|&>$^1JH&Z>0%uH(5 zKyH~a*tedz9a9a#NBYFU0gPe*0bj}7Ob9eNsC@FPp}9*@5U-X%5FF!CKk~vo%(R#m z@aY-m#f(3s3eMrQb9Zv$?wkwn6;wy%wFv$*)Mqc=L+{Qw9epgO__fJSADtH$>Ua3I zwb+VQhf_Dr#2LI5OIX@z#EI_7b0%IDkYSV$~-*7i=z)eNIyuIaJh22bC zKIcHH?w9>-36I^Q{Rt<-NGYzazGCkS`h`oJIM#SWa;`E-U`1LJ{>#KS_=j7{G^d*%W z;hi00kaeE zu%5A_@)h?2SF{&CY^FNtG)C@#>RNTRydh8~cBO3=_!gJcdpIow^Krji@JPt%Mf#-x zFm@N)E9mS_lZQ_Og6{boPX9;_qpRi(o*QD>-jgg|<94;=gQf_qUp!pAQ;?}zSC7|` zhpk>zt4(n7=QNdIbsj#ZHy)h{;{}Z3VrrUr1sBR*|Sq1X6vQ624i@VTECGcFXRh+Tm1s^3qz?X(O5{}UdQ}9YSZv;MC-tNzf zaF+i94y)r03kjc=Axlk))U#W=8QWQyl`vVB?UrfKDl2MWT1(r^>d&MZaiue{)SWZz z`;sJkjH!?YhA;8iTQFH}^V4dBog+~*Ni+<=l)f=i8Kb!0SNx?7SMa1JGdf49#D?Ma z8G5z`>8bh3fdLC4xqb;3`DR}Gg~`0ay_)gj$%C>h!cK2XC5_Qj+rD_8LLXuYwlc6Lr3cGG-X;xxRy`*5zkwqj<9s~;*E33Es4Xo8)ifwhhhXfC+r~g zd3+WI=oCY`N-n%7wpKqysVlNpO zV2hH{Tb^&R{QlBDm7Ub!R8@PkjjyE%q2te!GSc{`bF+C5snh(`p3cDU3v3hFHDh%| zs~Jz&P0Vly2^~R|?Y_#*QRjG?bdR*o+j5(8N5Na*MmxV7FY3k74S`!|@wHgoT6P2j zDda6WX{((zZjusLNHF)#r{h)^h_shROVGt>@hGmHd6u6%({Qsq_vwATCe!fD#4kTK zQfBl6$(j5c&tjv)=tk_V>E{c^?^PW2s}whR1>k!|NBK+Hg-#ji4YrLK2InxfH?6=g znp~Twpp&FlnTi=DFk7DTz#yRD3k;^J{MuNg^``%$Sem0;a@*VP>! zKjc@beR@UFz~*LH{~sWc;Tl*{=s@b%O1=qMgD}$P(c)}-xvrw$@>DDCv%iuN$%Xot z)@IKszOskLgrhEs0<&B1K_o+1`Gqq!y@upbD~kAIATPJ9yo#3#3CM2nZy2Y~W-%@w z*BP-hv(-ThwV7f?N>$vRc26>fayZrQ`eT>9I7OU!!THe5E>PWb;ZOpQ*Hb+P(r7JC z3QE$iXxz_BUXtNaY6??%=F#b~i{YgGR!MI4{GQyUsPP4QlAp&ziD7VfZXOUYu570i zb8P%Ed$Cc?xGrf7NJe*#-%&9ZuVv1d#i?sNg+JBKz9_XpR;xPZI?KKhoL-)(l^sFy zm@iF=#n5a6)N9d|PrLAVt!?wpt{z(v;~oes!-q%hzE~+)+$8gzJE*;H0YqW%PkE}qM2%Tb=X#tF$hSY(osxbh6j0{zwGX|c zLmNx*%w&C$^z)2~GJ&`>f?nu{s^| zPw?*Dh{x7LT_B^z$2^lqo~<-6v4apwC(-M)oxPDS;+Z1cy% z1su`ez}00SToQrEtYYEaiGD;!`Pt-%~4HPwY4gm0KGMB$&v_4sG(ZL*)G+9j;-;V^V;fgiK1cp#{Kcss5kR(fib z2K&~7SFaz^xwW?(NkrZAwf!@TZQw1Il?)vM;76wDrw;r(_7k08r zx74G`*irEIJhgjsOfPW5`p#YUq#dny7W>Xujh>7Ud1vI&B%N6KjaTb$kpTlD!M<6K z3mE)If=-K6YA!xUv?qpRVWNTp>eQuX63z0vqpX{{6+@Y}=PM}_y97L5?THn*GtDa4 zcrFEkV#*2HwQpox4pHq$R!7^wpC$eVd(-DeL9P)cXjT7&zgN8im@$9nIEF0uVwAVU zsOfQEoR?)GiPosJkoBba@PTiTp9a=mVc`>7L~VF6iscU?Z&26mmoE3VqmXUwJJ*%I z1(}j|1)4595yX4UBY%QgEnBI7*R_u!o}g5wvv z>J;4DM=E0FPDrcStbvO(!6ZCXsYA{_JZNG+*MMhTm}^OagOPKY(vq#t+Fz2MuzGz1 zc5K@26}(vmp+o=>^#0#PuI*%Z({vaRZnQB7$+5qOsY)hwBKrZ`w+Xy~7c4M@=S?*c zsB+=!=HyvXXovpQFC19#@Qf6Ay9mY~w^wT1F) zvXGeEA3hv3g}q*j*p?ZW8lziA&;LBq_Tp=rxUo%?T*KU9)%(Yhz`0C&4-5wAC1g>3 zEsSq1OPq*Mq4EOiuKVErmbp29>x*OCSw3zHX75(HD_x}gdtp)yb0ob* z5c>i{?vq!^%=ZD}{f--*xH`i`yToqVca`5DjVEqS%tI{}9~QPolEJtCHsVprNZyTV zFZQ;P?s4q=bD22E+27V~{Ue?=b&&27e!Rc>ECNGZY}31Dws~9cC9m|bH(9V{HT=t*li}>A854<6*Rw^Ol|is zhCCoCr;jJrd^tiy@5W#oa|Qna=>O>S2Och@6!srhJi}jyVD1s!4l7pLN(wnv{rP|t zb-woK$X_hgXdvCS6U0QUsyV-i{I>=D&dHhnz5x>VI<6_}POK^ImW zdzi}SY8J8D&F;FZ(jzap{rG=KI_t0~zPF7pB_UEux2&R+G%QQ!64KpD$I{)Ql)w@K ziohz;-QCDivMb$PU%I5jcYfD9e-3+b?aZ7xd!FaqpZf-Se;0E&_cP9L9`KQ?K5Vu@ zVirWoT>zfexU}4#jNPD?^PXtdsTu@A_v%9JIu6?t;M8k88`OMn)DJS&>*^LdEjtE$ zPw^U0EE~5|ks50TN|(MD0c)Vqo{E`aiZKvr`srw(z~Sxw=Ep8iq9H?v@#6jr;11`S z28Z9iVHm10E=gTOHH!d{R;!LSfINL^lK8D($|SqRqyF!N6UtM8nPu9uk-ps zVgJY>uaRO-iE+zUENh?ifmifz!OE@3g*kXs#Fka}IQ=MZ!Fyis5sD{)mJi{<1|RlA7$Mc_=S%khFq6tUYQLr2lSjw+iv|e4o<~=E)uQ`uJCTyxN)qAoIwvCf-QRS ztnUhS7_!c;+e2#Q5Hse3Uu7{aEnln?ltO&&CZ}?`W{u5Oo%=m{`_?1@^qWso_m1h; zoXPjrdg&WTymN?6Q(<}e!OP^^))yZlQ=`FFg~r?%%L{FSB|$B&FSfKEyun*xP?F{L z2b%FBKjqWY?SMT}n;(IZuce24+|>QgC+}a+wh|FA8phj5Z)B~nBgbl?>ga{YFVa(m zv?1!jPay9ctLJEbsdzIKu`{~oIQ@vl#t_hOzy{f$9oa1OSuw?j{lbdeHfp@joc2{* zhmn^440$(k_BOQk0Ipi+LCvzQPB70@kX~OMGLhr3q4`7V$PTB_!dr;h7K;xCrZcqD z!bph`>kH@7l0~HK0*+Ldbd3ErACoxxzpq0Zu2JGUwCy>K>HnFouyGt^ArV`-CUf&j z&wH%&wPn}!2?s968?zBFN~1OCAh>UsD;!jFhDP~#SqRo&D6d$0zsxYlC=A?1 zn*-_xot>1>ZdKQqhzBdyg)@}rIJ!;hz^P_YBDEtz_!vVt*3q=n9)v%~+vc0%NYnei zee+U{EN7zCXHIWSGd`!yKj>|6^lV>G9%9{}?2))tg@3^Z{vKn&NNw1)#ack%p7z>A zdySd7fH()QE`0pYXdruCS!|NY{HxD=eSa3!9e7&q9BFO%0XvG0%b>2;7^c!5|XJbD5R~F11&)9NH%W8oiD=xPqe>m zPo=dIjO&e*sxXQ(tSV;{^3%hibe*S%23hE%Mpt^i!7wtf>&-2pG-! zz|mM8xG`c>NX7l-BY);;XCjr;9%YvafMJUc^JA_jdZ4f87_G9Q`J?_Qv|eELq7m-l zBG0&1)QzoXxg94|m+)*%qPti5S~Dj^&(HY<8LjTB1-=KVgs-53vyGcJZM+BUC!4zG z9$LcbO+B|=_2<2eHvZS>6=w-lsSWKNKjoL7RLjomA-oQ&Run2@zL{HQv7ksqh&v{q zGf<$0z$^PK;Yw0ZIMtM6fLQvS*9Pw((A<0@`q-<6cR+uqLEw*7X2^9OS*16PH?&9s z|JO7DI6H-(Sfv?A&qgB8^A7-XUjF%-%Wn+U;ho5xsaV{_LTK3!Aj&NdLBhAD8Y6yq3jCIeC*?6j2yABVK*f!e*qWwO!@9#pJA!sCy+}%# zHnKW|2OsLoR&y2vlu+wWRLzX!!Z}~v$sNl`_+O5_0jFO+rw!8LAp0rWKfG+rY5%)> zDwtz-?4xHQ5PG0J)6X!s;X(TitC9A~ZtN40Nq;i)Hp`Bs|1);gYP!C~VsQ33sW0Wu za$_siC&1t6D35s9<(lU598(_RdlAz&pIj5wEp+&%iqwTmA}96O*N(sh(#vp%op}?{ ze?VH@DlJFZKByf)FoV$8tQ6i)T&U9qEAlAziO`&*IkjCD;(QOEdoBrYvs`J6ZbeeN zmMIIui(q-g0n8swZ>4S36iE#6pzHXUxUWz+<=|J102*wW$+R7%%&jHANZHyfh+rvWb#1s1St$9NEii-s-R{(4v1FtFX^Axsh$LG;_P}M{CaKJ_1B(S- z-31*D6n;>i)ZXw7*}}&?Un{vJ&l{r8F%nU>7Am?{zixS7DwQY!geOV!6;Y9d{@4|(^t=}F-W z(6>u3Vb1YPUumw#4K7(8b#wht=4eYcS}f;RqFd^t=TD9hvcfOeMy5fW_!pH@`Kd>v z%oyO?S>7dmL|oyFa_c=3OLaG@FTTGcpc71}?NivC`BV!|i=il4c}0(N8 zDghj%>Wb_jA)Dt4i=8O0Z71|rj{>@55LV_Uz6Uf+yuOJZ1=praX9nhBApLviI~Fee zY$o!hV6+ip10{eofAo6BW#-qOFgX~WwX%XdQ!h&RZaDE@nuj+ZWFg>&?oSlw7wh;| z8^W>J>=U%(cuEodi+W3|c<*fqk$gJX@RxxHmVVRi3W-S7nA-M+}%Ujedp{l&B)+}MhjQzb*V#mlj&eBhbJx$n8_{5EX-1TtOS_2bC1&DncU(Y>JbENwRzrdtiI%%#0szv?nT*h;wOzq#;h#lgsojGDele7 z(DU=tJ<}J!K1D3K;V2B)HeHr#XJO4gqFVEPB!Wwf9NF$Jr?2;|)lZaJ%nlomAi$Vz z52dDf@xJH!sDUO?|GBL^z?v!jQRIx+4gYONbNS;Je&G}fs~qay@qj%&)ij04Z)4iX zs4iHiPu#Uw>viW-Z=^&xNgkN%=s|Ah^lxZm|RL_m;tkr$k=K2(47P z{bB!um-e_D@x;ei_fE1WpN&dX?|4a;zU&ws_ZS1&wjKv5zPQ9^m>o6LaV)M@^VF9e z4A8><>O!meOP~yE4MqB=Kqx=%rz$z=tFgzD?s6?(jpX(J11B-BJ@Es1L2q}HxqAmG z$|UBQNc{>E`CsRZ)utX>Qj5vioFsG_n^`MyT34>#{aSYpjl=7=&;M*YMl-`gpAyP< z_V;_80dq99a^9;!2&x~GS!f;WLJkFT(W*7SM<$U%^|NZ^8(%D}zK3(=bSl;c%3kZ# zQ^MapkZ<>0Bi_c$2aG1oVPf>YGQ46>P3&acfm94#WVjLVQT${$gxsvfx?88Hr1@nVcbQx{q%WdR<9-@X6$GxWl9secB_OIX}nUVT}+hZM}w|_2v zr|0x7%QKU{BB=D@xEqqB{3}#;akfEQ z_n+xe3gKz~LD^SJ++({-enxF>g7NO6qXrLmrn z(-kdj@X{{3rm=%lmiRK~_E@||(JMJlVi&403s(`%5H@%VazP(yTc1`&UhC-Jh5oJ7 zIhNjZ(XuqT=;fN_Yg3(Ylf`V@bHMDx+BTt(r2G`XePRU=0qcwAtaA_Z3ZUeT-|o-- zZuYi=qb7Hx;1A1iIFAc=pyXnnjVQ%ef}IVkN?o)2`aorgh2OQG!#{^peP-MKDYWM@ zec*&1Z%g0W(mrAZ?@N8p^Keu25uyYr7~q(gws8$5K=b!>Ds`X=oiuC$A-PFWhtrSa zL%9Pv%ztOzkY&{RN>_=22Hzb^8ReDlOA#^A6igDsTS9viebM(0pOfVGD0?%oe7gGC z2ejY3Y;CY>CcS$r`WWRAv=`X?nu23U06`iZxqUl!WINTwI@C~BAjS~5Q<`DZz<7P~ zig^U>!@g+5D;hC-2#v5l5-8L^$Pw5yZWt6SIsF#=>K2cLKBPV)05`zsJyF>_$(g8x zr0LWLPm{C^(!2_hg{^c4%h;LEFZ}NM`{FZ&8eNTguGar(sU4Ehd412gUjh*<&n^y;tNTCu>ykQyd zpXpTlqcL{LlSM3)9SV{-Hwtu=-c@KKPw$dgIbr4z-jTMjFSl*{qV^FRn_(l%HN2}* zHh6ck;Fj}%K9b~vK3lW|Ct$CUPVFhlu z+hhL&s0y8RbrS$M&Z`)Qozj6?E^U`oNLv{q;rOcdWlZi1H$ywfhHVtzRDSlXo>2{T z_@)khNfdE-O%wfb&~7JD8~|DE?q)p!q&X*A+J*S;$(vf*oMD)r)^*c7oTh=Iii#b5 zZ|nDEyb3aG&cs2EoJF}*yuSU`=&YMRS18UZ^|u}=1Z>HsKnB~0ujz!>|ER3uGs=xn zJ8JCdd6E&&YHGsUxZBGa^mLPL#N_j77o`(=O*)x%m$!kg)u!#=-sU|C7dpXLmq#Wn&UrW zyhNSQre-ma5IroYJ*O+M4(T&Or*YS7;(qn;#kB%W^ilK^#43+bgPvwGyobpRIzKVO;pGd_7*4oV@C!EXJ$V}o;*m$QK;KDmt$_m>V zcQ=R_TOt(dV@gK}6lHe^@{C%(A6>@f{_|2}$_cQYW1oF{SvStT`QgV_gHDp}D@*r@ zCKTt!8+(bQ1DC$!l&u9;eCDHP55J~xr&3VvVIj}+x%0g5nju9_M!GJ|SJNSM1{3lD zZu|h3sOtX{Rfnn&p|opEC#y*t+P2DMN;xQs$M$$D_mcF(E|XuM%!zO>sg`sMof`+J<793PUFhdu&+Xny9OF3|QR&vLQfD#*cp*W*6R95n~896wH@*B+G zO5+4&=`ATHv*||k`n^?Apm1&R^Md}bDLc% zcrB>7Us(mN5=VZNQ=97-7C=C-TMLF1P`MG-HOK z+`5;s#^Q?IhVkJ@L^jdm= zT+7kkc+K#WaK(?en?6=6_(aXi+cH(n^$uV|MX5D#YU+8Wrw&;@5G2XHto~F{*R@E9 zLK$1BVG$1-w&C}e(+@Ti_hrpSlUYIld7j6^oxXLT(vb#_TMt#Q`&Dw`b9E$S8Sx#C z_$nCTl(|WFoSq5=^gD^KhnqSHDcZpJT>K)-j(WE?R*8I`iJRY4AuhgMGdjT|^}qA_ z`1j@9)E!_kIp&8-E6K;_C79Vc7o%)(BE_r*fob%Yh68hqjXn3wE-k>sJn`;Mvm!y$ z(>tL1nF7Z)UDUx1bg4?9a0EZUhl9APlV8KW5a(4acXz=NoBf&yIRi0XHx!8gB5Q}6 zmn@%sG#m}59l&2S5q6gf%um!U-m8+5jrE+}N$Lxiluk}PD>b=vbDX~RteULa)61MZ ze5r2)BTxo`NdAH7N-S`{9gku6YncMcM1~ArB^MErRY@?dMzhN+mtgyG6RxR`Y+_sE z3G(aAV+jQD~f>t76qBQetf<}RY1DL1HG~LTZf0r){*2DVga!rBllA)&c z<#v(>v_g!!?IOu{f`1^WcZmsMj)ZmcPfLM;{tkqVt6=5}XT>Hl*&Ip5Tt6skjQ0h~ za2FkFER%A6m|OoUu#F+B;x_P1o)P(~$s-TdW$6gH^j`b=ns=z}BSI!js+?XB>xL?`><*D+j{C$zjn(^Pm;~Bfa`W!}ur%Y4A!z zk_Tx^W@BxmkDXk)CeG9Bi~ejXdx}>K|KT`)oZOtwR2*Yzww%LZ6a~AEW7gGR7>-xg z=qtdrTD#iUU4}hcm1=K#Jo8T@g(^kNfCAf#2Iwdc_eQEJq1&o^wp67cwcJxYYj$mi z=~CL|@l}K7TBFafR;jPxgR>u|Uw*{zG#zeE@T%Vg^JRGn^4SRty-1PC3(rCTTKXYN zY)35JjU;K&{*DBpOk8)?nS>f&w8Y>1`UR@%IMLzi<8*ZIIP+W`Wrg)y`|pu!%oZFg zDJ`OD0}`@1$fe|TG$fzzxq~Jl{i!GFAIM}<9UuZs!TlBvVLV8bLDYcU8v6*=vi z@Meyza&<8(Z>$-Vb#zuTWAW_^8yJDbhI{CKRPMR7r;C$zNd!f(waVbkaE?0o-k+jkPXj+kckBZ0h*v}7xxGF&Yca7 zR2on&-XyJ{m+e;Eo8#4QUW0Fl3WLSqW${O{wplQ)6K0| zi6B6eRth?32i6g?`NoK7`^>NSerLjv@qTdzNqEYecxPHwXzN|z(Dd)^skX;E-w+Jq zwQ(@|IthmVco?C&8+fa#)QLDLzYvfmnY{2kRR z%C^2~E^#38PDZG##{ew#!Rq@uW^dKv<$d}6$AzVf{fzdcAqqvV0XN>zi@ZwMt@1_S z{QXCWYHKiu2)Yg$L^Jiau+}W!Q_#Jikejt9zTzLKJb3t0>q64P_Wnx(&#YBS=$fRP z&rY|{mIXY+Vjp31c=(PENHM>vQeUdS9zRfWHuouX9`+S4Gs;TN(!7)cSZ{Or`nPOI=+ zgDi8k^gs1o&WW8yl}3SP7e8n2Bi*QWwHXuLgshQ%I^#m>zi&_`NvZ!3`sYocHI8fMrEDd_KP#jnFt6 z@$+@SxRgJ4(oG^hU$6s=IB*hOyShNF_KG3AhhgM8#B& zT2fD!$D&0E#rRTTgX2h^Z~DRK=Pjl&YTrPx4LjE}WraCD)nEp>UoEiNLUGyH&&m5Zy)yLI-cwto272tua56GB9H0F$D{vEVz z(PSopNl0jazHmJlpHmH)N;G=G&kCRJ61)DdvMyxg)(^0-U2JrSg1@D)+G%7UI?q_f zZ#aa9U^Y$IS@z4Ya6$fC9gkB@_=fEQ>R>l0C8168-@x{)*$?-pb3G2+ze41}sDDLU*KTz#S*XX8+IVfVu44=Lmwom(!(^eA-YbBXq{LuGenmoVWa=dmH#r)D+YlI>76>qU_uBQo~4d)-zxOS$g zs$_n!my!GcS6rrn-WG{4_b~oPAHIcuq@SpeEP#TH=;M8M{tctIKEHR|2M-dtr_JO< zMKh?EQ0AfC$A=K%Sx08mluD_pScMSL5pH+CPadEd&JLpQC)y$q}-&X z*A7Y{3bxuC%1;L?D0bn$>yU8N%kU66AJHR@zk;*ibU`O0-+j}fLC;Ss6r~T_g>pm< z|B`m^7tPPAX$Vj6ClZUR-yx_Lt5E;0s6PAfmt4H`C6P7Nj3rM0pPyynFNXbe=qY+{ zZ}iMr#`2PzA14v8Bd4W^-gS|D-wpv}c|zFWVVvur@cskXV#|wPRx0r+hEKEZ-?vd8 zq&#c7@LzUESg<`P=**}Na<}p<>iTu#p+ejJ%gcvMqe6~;8F&57Gm4<>M+CotKvQ{BWf&Sf6tZUy14ySjr6ezM20MWqYj(#7L3Ksx|3c50=h|6ktG~Wk)eyn% zRFv$3vK@B}&TxIOYtoiFvL?EC1KE?$rf9gam;qsPZ`Yp9QBBu7j(1i@iXzE_erThj>m0*z1SBV0lt&4UuRQ0Ic)Y?iz9(f z0G~5OwB$=vzUvl#mR^=4p67^M3+j9IT3Vt=%4VT{&tDpV=1~WVF{U;;x}N+yzbElY z!fbb1zf^z1xcjy3DNsUwNbWz^LB*UAMbAoc{vbGnvQ|;bVke!SJa0yMD0LqZ|Ih%r zW}V4+oX(|@c0-BX&z1@n{*z6K7@9w8XCe^Cb?<<%uV;<^l#P*L;oHHS|Ii4imMcO~ zEjn7YC(P;=12G6i%!EN>;?qfxm-6>Es&4w0|g=2|K$EE zAF8;28ULIi3+uS-cJ{>~x$+p{AbW@;^p748E?ZjU91x%%ZP(1Zvw{cdM|O%&F*l3} zG9q3t8vbzc!PXrX|u0c^Uz8uxsJm9=6|61`uh7ti6@-bf9q3`~kUg zkDtzz?u^cKW+nk?2DNzK^x0o%%4B>+-MvOna9*WVYWQNdz^rxIdWvRvHT)qG*61YKk94L<+#AX#^5JC*Lb86jF?TcXnDrzV=k zoLAWAKP|>LCs;1NdHC!Tq}Uy1*0?;L5165^zwYJfAFJs1>=4dpb2;62kqzH|o1C}1 zuvO+6ANI&GIr%$Cx{LNSmvpIEu#|=l!Ok#gO08+Y=H{8B07DRcJ8YwC?mBVR_RA+p zyiY=qIU~}@hM(E!4HAp~Oiq@~r1Trwh(E^&+3U#55MsXe3k4DDfs>x6D4BZd#(wBZ zXnjisU9a4S)VpVC zud3DV!9SB=-OS&PPRbVH z3ue$`PZ9mj!|TJ&kg9{bdrU~un|)mor+#ao#w7Xj<97w9-D%@RE`NbK>Dws6V%hf} zaMoB{JP}JDHf^!;SnTKm)?yi(5Mm5F?4l^2AA?e!EDCrv{OX=@N2p)YrYV3h(73N7 zd*siHSkpr{5>B1kwMn{8|0EbYgD!zQ$8QTyR8YIpP+6mOUz8+YLdUaS-!D(Hu8)#U zzt?^cw?an!1GT?-nG99@O_H33%h+^YGJ9DN96LtxNJ9ge#-tjS@ErsaCrMNNl*}L< zMv}iChgW#t%rL|k8Gl}QuwwWb4;-IU5Y83X`0CM7)xtylBFc7ZpY#*H=l#XckmoEa zQMiep>a`dI#FCRs&z=;GP^7Vhr*;-NF`fFI{phk_>j(5qE_uU!4)sy#p z(M4~?;QYuFBe;<}1FDz}Hs|rVx1V~YsBWUJY<9z(AfKqc&Lus#aUJ*{h^;!{{#&^Ua>D z?~**L0QXG7_?y=5D11wGz|`jb%;g_y65%t^b)leWg!86>V0Pcu_tD(}v#!&;se^4e zIBgyHoiF{#RdNhvu-w4~W{IDQ35#`V(HOQ0(Y^DylD<6tEUWF4iZ4%yy&X`?-$Iwd zEDhe`rV~SG|DFo=<(DXyD8C4>K6My|{iHS~+M#8C5&KX_GL}@aD-Fkmr%)jrQuNDm?GHu`RRG96=Vj$?YxzxD* z;KS?pCH(VqHu~-ihb^y^)V!|7Ikq%ai5cwhI!9iCxn@C@jK|C7ogB4-H7Yu-1Y#uL z?{=!et}b-a9>PTG?sBh&x(#RsaG!3Ulq|>!k46v<;sm$2W;c~;V8;+w&>XCq%RJO0 z#V`4L*c$1ASgd*3E0M-V<+g_(QYHJZ!?#^SCi=efzWv}Ky~31p^RD2%dLI0kgfIDg zL}hS|vkWAbdJ~f70I#73Z)Bq@&vY9VqFyG-b}wv0Fw@iBB!3!Sd%T=1l=@OUe_0em zQ(*9T75%fFmwlY`HLaxohO2&KnoVp{iqDFWT`Uzel2+~LABcJn(~;Gj8o`F;CiN{7 z)Ao*TQ<|N2eh4w^3m0TbTS&wj*znGGwKSq>d~&wDt*-!j&G92OxX)Z~>ZxjS2NuQ{ zJ3e0Um8ZYS`|I!RfOWEg-dBUjrDi3w4@z%28ktZTTzfcO#NUcL7mRq`K8%Wayy zz4kzZD=RGvG(Ov9J`cGnr&45A^3nB~Vq;oQl^rb$uQ=k+-c$9*WGa_|L9}?_U6Ct8 zEv}uk413XhXzSvR_2rzSNpL%{P9N3sc@+5G0e&4#*S;)#YoTtZB6*1O^bKXN;Dy=nq%!>P_THa%@oZ%n} z3kp012H_UUWDR^G_o{oxu_yelukac`B!2Uu<^LIQdE-j=X`ERHz(?@rO&q3p6;lYW z?KTw&;0N+xj_oX_S5Hl74v=b*<^owKogI;`fv-l%&Cu>^v=56;GA@s?Ur5tDt#&;a z0b4bzww*?^)1n~f1zZPVuQ_)#kzedALqhW(IZWCqMahz**M|VHb5vux$fEiqQ3?C0 zxJIfit?Oy-#!igrcR>Rkvqy@*-|2nXrBlAXd-bVcH5VLZW{AqgzbyC55ulN0A$H~j z{GXqey$jbFWJjob%BCBU+2h!XE*9~3$w%n3!*5(0#YaD+)b@!fhqdzJ?4c8l-n<;d z!am9#6fz&z@pS>A>3fkmq4}(o-)7Zn$SZNQXmAW@7^Xg146u{O$Zm?zMQ00t5d2}d z;*LJ3*S7x|M{)xDUqx?WVxX~*=bt?Jwdwo}b*CRB@|<>)sEY)0iWy3`Rd!A8twyOb znpk1(UtKm*-H&}3wDg6rRZj0HFBlc23nz!+#RTl?%& zv$ZC7d86+`41a!)f{t<|N8>(0?CkYnn{<296XI}Gf+j{d>NDG{uiON)8r`G0R z8&Amyz#gIbRD_nWUIdk|d4Q%x-Fos+%SQ-6TK?TpU3$yXM2@A2lK=k@Hk1Z=LE&2w2u}fr0YPCos^OFp3RJiH7$4N$TFXDCg2&lTdDwjC zV+nyiI`pq;C&T>D^0=UiP6g@w2dhvD_iW(0m_L%fIyns>k@(wU232&M)P(ap9#%2n^koG^E zwjIrASO>DtZYRLGCt(nF?$pB<34y|f)5j-*^27-Zl6KPpj+{R1pcRy0Bw7PAR+HCh zUqNg%p5hDL%4}*;UNciOEU_9E4{93W8UYJezHEoE;RJVDsK}!Kf!fmFB>|Rr>i8JS zP2tNYxEy0I!+&M*O@H|Y_Ko|(g3mAay(9AaVP0%kv+JI1|L$u#mypbWQHBWF?&9OV#1J*Tlhij?#GVSfsW^4IX!^s_&D#!t@#J#c;=su| zX@k!+s|dZF<$jo72~}#28OkG%zfzyMJTpKxa_8406w6Z?Wtd4n+AaDlkeOi9vnVyw zUIELLlfheSLgI>kddAug4Ro950rde}P5Za%gu?e@xM*<`WJKoQBZvDHOKcf}_YxZb z9a27B8Qgg5+J0cdULUSfiY>(})nbrWu^sp|)9&uKhdnfFLa!QiH_d~js^l(C9BxS& zu48S9SzUKi2-dj>y_j~eo2l;hM6QPMdfrpCt=Duc1irL6dYmN3B*y^9+_s$Z{Ju5Y zHwlXsFVoh?YkSh+`48kdRR_M9uaRP8_lB_g_Hw$P82=1(edkFlvBS~&Z%&UkdOW7&D=7_1L*cV~BaXrHI(=gL5z3IGy0^F?QfbT~d_A)fdyX zj8jg<=aN-||5tP-7M+Ziyt{IGetQ6|=KjOnha|ZkTgMrud;6Mn z&eax{G+^_7q=9!KbhD!6R((I`zkYC@rI$XG^gi=<#zAz=PePi{SqvctfF82jpyAeH z-@O82Yn2X70}!D-?SCMr_B8uJset)LI+LK#eY(6*IAfalDHqx>cf-$w`HnIR3BPcF zQhvS+k(26(D?>W#Ls;`!O}+G&w?0E8XKuM<_s5?`F+>9@^prM{`O3y`2G!}D+D36J zR&1Av9p(q6+XqZzIRM=wSYfiQbm3ZWx1Ts2bwkCv2ARjXp}R!ByKiXIPv)Mn1zTQK zBT@`fjPF~GOwh%PHtO440N1(ay-8)^CpnT)n}=u>8zo6CZv5ZL6<-V2ar*1Pfv*z{ z_@9^`cycWo8>h&+emyz0ka~Et=g3_+e>YS^{jsg(b4RFb^2J-7v{}l6y*=N zNEJ^}7S3;OWYjDGz0dx$#Au+YI&F5p^2XSTMUjmL^6m_vjns_pJKsKYtm!d~rw{^8 zOzp{ZEUvmtM648RR^&(JhTfUMFP4|6#)KxF=xZB<{JwZ?`|Y6u4G#JWvTf}R4B3O$(R;2MoKB%W;9AV8#tR}zbz`sA2MBW{ilP*zRzXW%|I1J7JCeJAs za~am`q$o$?os%eaYxXAi;vdLos++Cea;TM@W&VF-A2D*VIuFLC4F3oE)%jN^8*wo^ zN0u!30})L#1boqyPxH(!if2yMmI5F3D;D&MNnIjC)%)?sS`A|RXlA5=~aJC5%w znXUOji>o+HF977nuadSCFm4+}dvrB;$i2M&2Le)v%O4g3J$O)oN>jg0dge0T9Ukr| z-r66Wf7G&;Y<}H&_c_DX9#sUMc+pDL5T{g{K)lVdK zO-I}@<1?JzH@ty(@h~ZWfob^llGW?>)U9(4xVr_5ozFSGHQ><9>LBjwN^TA2`H}%l z$wMHA+I1`=V~%7xZMeRdV*a>ut{5MFk;nO*>$m(j#^{T@gvGtVqJe()v6u{MaVKbC zkq+&~_!^YKQ;QC>#ASVE3|dxtj0b)L8Tj$QR!13^A$mHH`|0q{m~_(ms=UvEC4T&l zdv@KCY`Wx_BEA;*261GNGG4FtT#;Qy>g3I3zBc_myb};JlG^%w92LW2A;}93;PBC~ zS1Ns_2mwA&LNeUxZTC2-@PYOIzc;g&S{(%%*U^`SWr0LD$K=EzJRPj}d-@vh0^zz_ z%LSogp_4kyvzM+k-FLj*>sPV=KzepdfsAugr%7;B-a>){aDtP$w!L(DMOJhfNGwV{ zP#jko6CsK~=p0{_9NFOV8St$! zHj5=mIyTTlsrENl%5ors^Pg|*)caJv1LLess@;Ch2j5;jVX-^AbKT;|INiL<=U@nj zvTEVrP97j?8sFX0UgTI-a32%m*u?`wx6xR5`JMTMT0dVHKi?VxAb|8IqZha5IGc3% z9nP>c*MamJrHsSv12Blw0eToj3-C0V7OlQcmjU@Lny}+=y8n?qnn<6Ag)~0mm5r5b z!hfK7d+JVK$%Q&%DY85g0(n3mzgG_=U$k7*|KetCBBFk`Vg`f?9Z*UhO4JOU2@Ms+ zgA_jlZ$!uEBdhyGp2Fj|0n~l}K5X}}_48d#PLtfgL?j@&AKG3vT-jQZGdha5 z!tsdk5V+_%&r931>Vi8&wuCqFcNBao3%Pi^NW!VFED!2)~2#suyGJKhR{UQq9BR{U;h?HIIR2 zIOHAjp;e>%GWg>C8gD|rEsshuh5ONw6W~G^U5h4uPZ__G@~at#Df{qzEx7*DZ$G9o zZXQ-4=PX%Lp!E?+*B<;qTPHi?GU&p_ z)oaA%9T^3wAjI?yK2SrO3>inoA1hWog{<6asz*=KG^52VfJc<${1y0M#_vj}ZL_ zTAJ#&y8jp`1g<1()X9syM&hq8=`VD?%lWN@1D$8bM;Cp9-YK7Ct1Dki?U(_r0qgr{ z+tbI7U;VaTv6&D3wpAW{VKDP!%Ai&W-Z%mLeSN86<>F}#cbUR3AK0wvYBsQ}&rCzi zk_@*bR7l~_31o|@rv3vBYH@d9T3@f|w#R~l4zl81|2uaIt>x*>^k)qOgZ-ZEx=5Yf zaYXL-*Bs=TXubbPlSS5#xcdh(DlraD_hIb&eQ`GPov@=_q2Wpb^6tWQhFp5k$ufIe zr@R{RNx!_X>e#qzyERrfD?*^^l$?23t#sH|noe%8K_ZZ8PJp<;tT?H<*^?=$wB$)i28 z=T2Hlxz4|v-$LG{srvm%yX)n?)o479TC< zOfHqG!t{I+qjkx9%#;B?%i12sVH=8epLLsiK9Zl9J_ucBmJ+k7vxG6tiy6POtRKfAjf@{jJco^iaTd^0U>`%n>pTKuo2XqZ^Z6XSqmo5wal? z@0hbqeT=z!0zDVA{1i95*8@}@xILqjqXWxqTF%eUOO|JQ-PxYwv0GguhBK*cd;(>S zUwrC8B;_#lgc>pCrvTW{U zkqAFH2(dIv}e$MZcPOH2XEI zU-90-$TmzqX+AfCWM3427(cVjvnwSsY%_M)x*|uye(@)l@EOPVp_YR+$cWw>WTYI1-}eq6EH%Shtlg4#|ZzFm3?EZ^1sX! z>dVD*VB&jOFz*>}mFPIa$))9)r8t{pD*120YL}DQvlM}Z;wzOh?T_5PSv^9MsM97%h_+6g= znD_a#WTxjLhaD0h z;}Izimm-Z{WEoJWA5jpKcWk&$Gu*$=YK$#Q>gRNsC(qjYp(0p{o!}xfOreO!k@VHI zuPv|4aqe>fgPZ4w{etl&USb~%m%IUK+}8{nbK6_d7UDC#YY!NAlfxUTj%`JuC>xm$ z-;(tZefV03Zsr179veQn#uq`vCGWdv1{O|E#I-8n@)}RMKE6j2?8IsB8XhEmGYD=W zNgHiy`ONv6cu}CSQ;K69+W*B`Oo>SGR`c-jLhmbt9lK|8>fX+A+2iw$xJS>y-jd8{ z2rxHO{+tyl<&HESz=4>O`C$J3C|g{J$9*rf)8QG%ko-0zaLo(ka{>fkF}9SjaEU^z z_fGFidpah|<8v@e3Qt4NggJuUf<{6D0%73j`T`|LZ<5pevN!A_rcT7E?BiIWMnAe^ zZXcSsCiEtTag0U=}TSThoo+|?XYp^MEcRZbxm?1ZK|m z?2>E-v=R=#WN3+3vf|wY9?}N1jlel`((^7YA$FeI^1`(3%8?&f99_3iq#elz1lAOF zRjP{zt5V;bJ)6Im=Pnocd*kEgxbHNkX=CaS>3sL^@l_aOSnm8r_@^H&5JIcJGd(`) z)DZi!!9QT_HC~Dr<$)zx$21bLQ(^nj8p|k_rD%S+vjv%m()HFi&Gr`+mC(qh*l}lj zk}m#Wxm#Nq4759@A)e_Kd>=D z^>q?QsX%BY3LkQH|2|TDCWmM9Z)8d@Eq;)P<8;Ea(>x~@;{NYY<~NlRr9T^l9baa? zB_O-Hrq2-;`T_TKC=fDWjXB=;-7^XW;bH+%|&{Tx$lT6jD(C z>*sD(Es9pgVLL6Rpta~ZKCW@>I2_(H^!0kCEgEgOo+u1}NbC%*;nmBT<}R3Nw_QEM zP+p!#5}uiV>Y`o+Lbbz2B8vd0o8KMjGJH<&i8`O4HCigFW79$@9@uIQ2Dg)84@?Iy zr)oi^FNXwI*4K@7e9B|V`{!UduaC1*k)}j{;$RCbHAo^w*)%8u@$6Sk$s?XZm4q2O z#kH-aRV5F~nfP?@zNF~)7wzZhSgOq*+Dk9S2ylLErN?m&Rt65ffpNGINC%7W!3+gp zseC6#>Co)^{%2l(<;nVT(Ypd!qiH|CkOf$ig|xq>KU^K^CdaCG@dp8ecQ=JgdOo1@+ouN90-qrUy4?a9FG129T&34k9B2{s<<$XwItM}q|MXL-x{Rc z3SGn=P`|^cYD8nLILO@=mw&=ENIALCko#!`)uB9r>f{kneK_UICWH);h>SAdKU-ji zGtK3eNI3|U#Iy4CHQuFF+FV>8@XMcAJoWnJ{0r42A(~h^i*yYcHx~bp?siam#v*l} z*Z`M2m1ql3cT#lE?u`5C3=}@U|2w%~hia8=7#%!@`RXhI)rV6-;Nv6afQ;kvgIL~u zdWwV&t?9J>%jEr?0&9DwSI5|i#|^zeb$YD>)V_X)1A1aww_`J?!UbTR)LO84+vfvo zNl;5*<)8=i_7~oEs{DyQda}R%yLOT9_;2s|Ir;d-va2NKB0n#qw3v!|O!`P#kdZ9FjvGS?3rO$8Y z7<$yl9MXAAl!LxCz3`!bPq%(TLV%Kw1eVV;HzTel!9Op&`|3O~zQq>yd^%v_^E^@ozs%^Zx=Cw%Xx^xPm{*{fXu!!#zQtq3&t`2Le z13lO%X#!e6Y!Wb)>hoJsIAxa?J2DCv*uqEtEr4=1aE<;d7QnTgzye+?`}XqrhNo?r zK4Z7rTKF!_^!j=q7u)~76&TVMPf-*=yy1|W>lklL`D23lx@N=jYG7wehGUc68&&}w_{?sYBlFv&Nt39YxCQx2Ezdue0$|ojsMOwbw zD5Ayi<+*d#K`EB!=Jt7?!h{3d;p$tAo?#Xqe(GlZlkG&qr7c)hG+d_Py&v17Z`ugL zulNXOVc6fZT)rk)*uaD$FO7@%J>>SZ@l+eTZWETM?DtcC3U0rkX$S zJ|sLd%o54L!P@E1mNy`Y765_q6@_QE!|;#P@)v4<%JCm$ae9UyG9>!n7x}a!IiaR1 zH(4aW)AQ7b(8oJ^-y=GkuC{S^whc2YPAayA#7AI3laFo$+sMmmsZgm!O?0)$shs-e zvA~7|Tr056Mb}RKqwTu=!)G+6-(nCS93=RK*&WNcy+cKNnaSq(se6Pkb-11Ik_|QD zWU@_9&dQF{7sm&hJ}UPz{}wwKQBGmQ_h$%RTOmMI2m=-esj{B?zOzKSe&Wn8h%_U@{(s`JrR^DXHO!XUKp7ZtbsnGVT0NWEa9Vb1Fl6%$&xm)=onZbrvImR~IVYdEM%UUoFjtV0U+g8}~#&)G{X0ZG~*2OLvKvV&|U-z;$ zrl3(Ak;2ysR2+iCuReTJk2#t!maB*najdq?Pfau%i3AXWk(q;xKa7kYI+sYJTtJw} z0rKCQALfB|+0$L3AH@Fv45)QoI3Q&`GfbGU0!Jn$7&<+` z?anIG+D#b;#Bc#EtEXPSSfk0=wz1hX(WuqSF(+~5&1NrW7%fBX8WKu?bB?&?iE0GW z=mfIFa2c8QMt{2aljWzuK}pW3^GISkPs7W-Y+a`cV5432!a~$WEM)GCFy4 zN0i30Np4v|QbB$ObI0vXK^2NgswNT>xon?` z07`eW;%V*N-Q68h=L1hqEscD`_tSXoeVK;VGk|9YMovHjf8M@11-sn!CceP?psTO5 zv4Iw%Ctw@?5P3ee^yF6&#UzSt!%GMYsb6#CejH=tSM2MDnT(Fz+~o9NPaJLO)}JuT z5~RpOW5b+)a(OjLCD2Kg1_s#A9zur|fM}+>Wdc39IS2Kt!78PmltJI8UNR^*X)3E; z5+RAdHu|)lIv?pkx4Dkq?+|j?%k?DVp`*g#CukjT?BK6lkFVU*)=6;$j~H;;xQkEa z`1PvUcC^!9G&1RqIQrxq;2xN!Zfv8tUi7H(06{Ex>UkA}Z0(@AXBsdupycz7fETzCJkT7r#eQ8rN-D!^P z^sze;?9;Fpvb~?RvF?@h z#=4Giu-Nsjp4{wy(7b=e_HF4#T!z8}q;ZYSAFyq1mMDO?I`gEtV0!sy&b514#PBr# z0EGpB(z$*|>5gkRvaTA<(PFf~eaxErgT@cq1`FvACPK5uWvS4p{O>IH83wNu{LF3DJNv(z^1> z;_4%96uJOwPk8J%QPg=8oxSu`x{1+{!WT~Zb>{}4#H{T#sKkss zBsNCUtkv=|i3cM=z)} zX@RV_C#dFzCD7&x?E=293oMz{@ElcTOACn}-Qo?T7L7*2`syE-s_OoPRMp*Q5UTlE410FK$*$+sFd1#DVYVE8uB@h9P;O*HrC}YARbG z;MW6+;m*|+D5cmc?n%I_NR1qY7-5%VRRFQunzV|lKv&hbmMWFPuH{b)gYT{=LTfx{ z6-w$O7|cK{cwzaQJkaV#2Yi28;!bzx7^tr4U0gY<6P3rUL8z{&QNK0EC60OI)K!#c z0CG+-T*Cx|$gUcgU~UHW8{-wn7~-O=hYSrv0yiU_#YIjHa`RDLQoEirTyf=!u>(N! zJJl+BR{}*vPpwNS8=btXxmK?AIqJnVskV)?c8KGHyr%x zBx#I@rZ9o_CpkY{Rlg1#4)yim`?2z?TtbsYppZO{c%`J8PR_KCQ18=%-muf zP%5y<@dHFuPVuB0vGu8R)N`NSgL5N;qB#U)4CH`w{i^o(XqECwBPV{f*AdL*cT@LX zeh_m~`eTE}NeVg6GgAYXj1n>BzILU%PH7^GF*b)M86!JV@XOi^0Pi*A?Alak;YR!% zUyCv`>XDZi!QXIm&!tROq9i(oqR*UkKdpG@YkMWxy|Hm9do)yB43;Fe-um!<-TNi> zXS8Gx_J?Q2V^BcDFvvdV8~*@$5c?PQV#?AnZD$e<^qjfD$Nn?=(lY&z`yY4}FDwM2MyG%Hfbp8k$M_y&G8M^zo_T*?}g5hROT30Ho zpPaOxYyI9mq=f{Q;5f$1;2)`yj}P6a+SzQHW2PnqVKW)XKE3T>-F<=kX>9H!vKR*o z{AjoT0PB@!`vvyM##L;=m4BDLi;Q{qn5V}u7P{@dF?fp8h+2fYytdO`j7lomp`)I zwG72&v?zc2Vjt^Cw`AO`tdcI4UYQ3!ty(U`?Fn{@4O{;J#J}FE-HX}_KXKgn@tkU3 z?^KtvuVPj$4m9)PAKsRDB|u9q0Na}9fz?A1vFk#vuBoo_+O9&Q42@o6imEYENa`_F zuBjsfezhO~K_?YjlB5igv8bsyIx#YIWRb~&i7t2Qx>7$EL*Rj#hC zsWmbvQUbQDjGefu*HLZcSl=$1)Q!e*O?EV*KGK3hGo{7`YxI-sXSF6@V*55$R*zH& zagcY#dj`p+?Ib0nIFlI#LE5=3WVM*Sgk@YES?7N&)}%_TbUE?!t2`fdQ7rHnODUX_ zusdLJ=kKUc@i~%5R9poryo0_!dX<)aawLzPLsV_hWNk;Y%rO*{e{Ppu~f+n89%5z;>?)Hn3nmxA3VX)ZN)gn(ljj@TS; z$n~bKVUk5fSjsYtgPiI8MJaiAbR8kUA;DJ!53f4VvW7Tf0y0>ElfPPrmofw>HFCT0 z^}QA4RgeY*6Tz;LiYZ~ncgg8ij~W338K`YtTn;zIS4>)jnHzN#Q>JqyES?qh#Q~OB zbmBaz7(4If?=)GoM4kMEqKuar&U~u&(k09yPzVHVzWA%TDh83BlqqJ7)4?!Z$E_+J z31tkjuCjMr^X7kgcHc;hkr-a5eEaA!NfhKO0jYdI6P%7dz4e%us@H~8eS?jaNXI|s zv~BI8jaW*?MpJ@F#V2`X1PhVbXOTlpzgh=B~ z9C*!-P z5@~g8U;rw6J?BWkkm@9HfG~c)dbHO}AuS*Qa&xdbA6fqNgs!is{75-BqyF4zr^>&-+l!1BnWIU@jqcJlobdJ;J5nR(5=l%rUVwCJ;sm&#C5@ zHYwf-OPyn`;~wqkm&&aMA9V+cLJPIF0EI3aY#p(RdLq*w8tF`IGggu|5d=}j!L!Hf zOWGmtTu8%GZdjkMeG*%=!(mHl$=l286p6XGn6#0mB2~d8gH1c?K=ZGKP?EXDMZL@k zY(ytgMnKMeD)HSU@U)Ofbb>%Q;MNjV>hPTN)QnbuLh&mZPBDYFDJMu{c-3Pa>1+&>wm)htvy7+^jfi3rpV7@oZ2<(dWjMp%{8_>yYe z{{V_HiJCNyH}R$k$NKL@iIy9EY(_x^yg&{1sFG(ow6IkNuU!0gqQX=}9mrA%CvEGJ zW+aA86*x5#NMS)FgHs&soMNUH?-VfHHu&dFODG-_zNX(F>s$jU4o+8w9R*hDR9m|- z(~-_j)tlMY(c4`a1`bIej=p9~7$vYu{3v$m6GB@@B$9L1 zl>9TKPb(coUm#~6)|j#_G(GIFpMFQtq4tC&5TpsDzw>Ix@3jKwOj--5az>Wl1e#G5 zd-U#bcHC$C()WfT8?C~I0Z1!?Grf9a?Fa0a+3##GP0h?oB?t3m@&M_8;=FE8yZ->O zsLqVb-YRS{FaH2+^sfl*@34Nw5laQ5lQ46>8^iwq*D+qH`$YRKm)St~63iaoNy7yL z2Oe6@dbo@n8ay|0#UeayrI)RJN%vLu`g`fqu&-ujbvmOs`Hh$LCce9~WL*q2yMe}Y ztKC{LLnQMvl?51#;ef{8`g&W7OK%K-1|WDrIpd05CTo`ON*t-eki&0<8hc#8WiP5t zInM<8ZSbV+Y^1qKGTqT2_GW#1Q8JcAVoMTN)7PI`q)}b>f;MpAoN6Ep zk0HG_mfhh2j<5##7|-iV%WH767gah3n`3SLd8M5aLjCI!$87USq*B|n7+e5IB&i2# z)3hq+W0^#+AnUg0=vF=NWJK=almZ9kCw{r$`>V$LOWAvC!q&5eF@i^sJ9;)~{g><) zWZBCMk;H%v$2*<6>aRVu?E8B=T@giw3)Q#s;=D)OpJhMvgRpKbE@cB+u-s<{;KIHh z`$zi_?T*gv7n8EkT}6|yD!BQ+Ytb+Bp~inQpV-lR3)#NV?HkyjhAl;# z19AQ9^egNe*wySmVY@yF0q=AJAo3@F_^WU29#ymKnPh@6LPl7e;|G2L&3<_OqWeR2 z+TPS&%{!JI;|0z<&!u>S-cOu&hZKI#?K`_^#L>vwl;j<@ueZMFKHPSnZgw<~UN3mo zxdy>?Ns@Sy(y4{g>GD+^n7$qt6`UHSsUEzi$1vFKSA*PRO~_%AOCZSBhGFw0l=?dEcA2 zY_5_poPXr6HTyC9b?tTb#s%#;T1#n8mf1%>{V;d{1XHf@m{zEjRvfob_?%1GGF{E$B2G-W%Y2=Xeow&gLc&%$$G-V`V zw!`}IMhcEYjq-QjrVUJRqG{8SfsRdF05}+~VU;6#Ru~y4@f-uck^Skth6a7vr5;Hl zn=HYyGmLJ1)p*Q}{8c1_{JU{QSv)$M03HoX^z#5-X&ihncLb4EBV~?-i zsWguiA=hvZQ?@A3Ie7Jr^TzcPrnwO03?9E;l@d2{GEP7Qo&JqpDFlinQ{m&^LY7C? zqfWr@gGEqINj&UuYQW?l=x9of`N8qTq#mc&ZOtk6R<`}4?DDulul?JTzZ-g2m!*rr0aE0Gaqs8WiE1PfAZf-6Y&81* zwV=uh5WZfttZ2)#9|m%{I5d9@Yo|^($T^}QBbF^yk=+S8GN5jM#dLGWAt6o(^Q`XC zmQ@B=&cg>Jj8PzYt}T=!k*H+0IQlfFYqxV4h2$*T?~HGg@UM*i`tvl<+bR*IUw>Np zm)Yop_Px5X##my%On$~f#q4Ki{{Y0WE)N*myy`pEos|NBgka~9`ufuW7(tN3JdbxA z=8!O$-!d*+ZaDo7PjM?vsZJ2@#{lUvQ*Mu^x0k&F-Cf!bEX z@aG#7yA!Y=d}!8E1cW9rwm>B8apm%+Rlqv5;0$%&9||zT6Smm~sF;&lo>buA^Go)T zkrgzt$>(jo^;UvT@opV~I|2^auF*S7rA}8TR!I8ZosD#$QgsTq6bsTjlj6rtYN(E^ zgcZ^T-nqxE6-tIAU>xtioe)(f1(a#z5w&!R3gqvnjp~l4R)r^VoDM z`c!v$n_i=_rXO) z2rL03(;wEN7?VP?70#S({TcfM#les$#sMC?pY^NDGZnyMMh@ez#2ta=8F+=S&GmP)d`YG1q!h<-#~+kc@Q3=gy_r6lahthCUEF z;~qw-bn!(7q0n?EJaBMpC9WdFGT^xzc(cYiLvq>J9L$4{fKA+Bh4I?{UH7di?PFWrZX5>$FN>10g1}{?1UpwRRvbPkN`z zt$u?03@#cNM!xUDGmKZU6-vde^4J@;bLZ(096u1ZGqTuYTFT{ z@B7qv!+vdv>%CQqhUX;kI)9o;A}@E}%tiw0{N86h4QT8^u0euMc{Dj?P)vNW90R>x zJ&^wv<31*4-y#@C zwYQHzag`sG16lXC33aq2jOTIFIQdjt+c3COCY>Vy=N&f3=~_};TiduoNGEJ#>(-8r z9d$0^fa@8MN~{BejF$A`gAK%!$s&GGFhS;}QL@b<5DzC-*!j~@NEqqs=xHm7r%6m@ z{x}#PU)GV5#N0pPS@K5s$H&jhGz3gYiUyFU1RlF`DDuzU=xI1TF}e6qp;mYBjOU`C zpYK|>r9%<8V0XdD{VJ2;2_;Y*;CQk6)gx%tsV4$Nd$ zB**1~&fygz?v{I$}=gT}rP|I{x(3hB%c} zFgmfg#S2Wg0O`OAG~+z}zoh}Jm%I)cp8)tm^!d`aQ2`)u2RM-S=XXj3}H}`cp8OYv#q2L-2yi0&~djl zuMU{)cdFTRhi84um2_9SAw;*R3n~MM+qr5`dfx@;sI6HYf=Wp{Hr?RKJ{W$JC1yZ>qM}D zTINJ~SIl(SaZSsj78uwQkU{t7YN2#sLnr`^K$F42{`3>$jYdNgwlj=omzDz>Dv+u_ z@n=6fGdhw26Xf-05Hxb=Z$}H*YG> z7LE@9@_xDb*Gi8XlG(zI&OJDxCE<9)E)Ls}q-SCB#Q;2t%3|G!$Rz%swG!RLvf}1J zry~FZ$HI!XkwZ8L#1HtgcQ_p?J4Q7l{osFi$2)a2ssx3LnODMc7X%FLy;<%il(VYj z1Hi_4{V2*_ND@K5o_8G8XJnmQQ1UyTI{yG_14AA>P2(GHpFe-7s|6swl|l~3ef~Sr zqD308gHhPv43mvpRcUcqFl0&`5@=7rt zz$9*PdY_Nh4Mp6|1D6C4^o&Nw{n4w6{vJUOeHD@P-kBvCfnN~RUl^|`A zl6dLzuVq{Ij8@WjQpw8d13O@Bar)Fn+9u_lmM{i(@nawzxu$L|2nz`W7E_XX?L&$* zh1_HnZ%iNao+-4sjK;tn)C>XCbfo3i6z$x$&N}}9E=M$+vPl!i6CfdhJ2+enV{h-$ zp6upSR##F18)S|%wRADUU0O0cB$9EDmh?&8MVkc32P8IlKNCwW#5Xz=Dv6L`PJX|w z8}O4bR(YEnYzH2^{bH`2>`WqvWr@irZN4VD?bp{75wBiEU9|pO z^S?XOO(0oJYDT3~f=*9Q?@Pjy$nk1(g~=Hl{TgoK10e@iHyI+iEy8lcPb@Lb5T=A8 zGlF;o((>KIYO0c89B?UtA`lLF8O1Jv1;Th#76&`-D)(+fC|Q3 zQDByC&*YJ`O|i`QQOGUh8f8{f4wc*7cJfd0|8D?ooGhLu?EN|8`5{HJn#jH z_HJ-?{pl6#`BDUJ0Z3p$$m_SA4(bxnqp{VbY(9^=sbzF+ZV5*&Glv@t=jT?r?IkwO zt%VY2Q3rpne5roTxfbw82qA;6%jKRq_tCpPalz@Z6Gsxbbg7)59BFy-2T%3XOqy_c8qAIMO7HphnKMG&{po;$hieho7owL8M z=~{Mur*3TB^QQ_(2Rr=z)N4M_w|LaakP|X*oc{nyk=nMGAd~>G{my7p_MCnCD?X+k zK;sqHJ-rr^sHY=2-m`mKv{L3IiZh2K5`4$k`cS(*>_kj*j-Ktl6nU=gV;`S$l1MGR zX3g3b(L@>-B(n`If=+henzWs}{3U7M#+>?jXKYlp^cOvwB$}64*^Wu~{A=bvIRrAJKET=wOe zw8}|`&NHO{09vfR(nA~}OvDybupIuBk7M@rtha2E%vb_hGN*6QR;Ayx*3k_dD@U^o zPJ((VvC%IwXHlc)X=)P3MzTS34#DRs#XvyEe z!2ba7{cl5GZhIOzSfk+Nk~F#N>MJ+4{@8mF5Zd>|oZ|pF9Aj?=Ds6tyyCH%wn1yU) zVZh`601v*G?LW1i!tCKY8IF}X9tZybq~g3P{{ZdFv40j!QWa1Auir&0KihXp6f8_Nwo9$2A z*JBGA76;S|^M~^FO7Xidw~GsR%Vmr1-<$scwbI?Q_mW3Z3~@OM-|?M?{_obbZGQ1q z&2JBV6Bc2Q%zyh`GjaCy+2UDy{{Z-WB$ns@0C!j`_l2^1qa3Krfb4Y;G4AgD-zqoz|3q8fCRe^)` z{vbd8F0mr}cfHokVr@sRvHt+t>E6!!ce}R*%uK|Re>ndD?R3cd!Q8_!o;VwRn#cbD zYo^oh897iph7Fy(V{U)?9cA{H+wW*J?8OT1s+JQ6E} z@{SyeJa@MPMkGECDZlpLXrW=>wpd{C{i%rkpzSW;#Ny`++vMD43P91rb79kbfIN#C}|oxinQcE4!I&8}8pM;m`? zQftfUB_*UJk&cu|ue(6R7rZ!8fHt9v+t~?IBV*xKjjpvUfr!B#Rc8ELlBq0wM?8wV z{y4{^6Qp~oWn0q3f_`GTMcD@#$oExodI)2Z2TY19$8$gB2XW>o7d@YHpP6&i0%Q|m;2W* zvE8!pJiWlu4iAlg>ZN7&XS9P1!SBN<{f#*XvAwf6{u~D!esuo;s)sMJ{j#?m!ME{o zjcd>TYVr?de$BgT_IV=i!jT@Y%%}eVlB6&FgYB5@gLfG^iepmw{{Z5oQ`tV&R}mO8 zSpNXVzx7iV-o|#+(X%8O0Po^o`l^ZSk8G^V6G6!XI+t(Owk^KT`+eHzPDPx|Xywm!+bXS<3^SOz6gwx#&)UWEtP-?XJw1-R5s`DEMv zdT;*#QXbQomD&QJiUJf7x_|b{av!_DZ3tQ3WzRvSfBR)*&-NkP(A=~~a2tQi{{Y)7Vn47R)9|}a zFvnq`fBR()U$8#djT%*vP9Fzlm< zbNoE-ljSWu-*=wO{76|RUH1O~cHHOES`2@83k8xzX&3VyJ{IHu0DDhK_hz(?HJPQ1 zqYQun+y4Nr`>58xcK*tq)zdNRCkjri{6C9|pZ-@K%1shT6e5g10~~pu_q1s~?){0S z%taVr0Jwd>`sHXr_kZ?%6h$;K>@qw}zrXmKP$B!hb_3p?>NV1>lal`c)>_nu?)B{K z6Xd{**~<*b06tmoJ@i=q@4nBkYDYMQ4hC_l@H+nh^WR$XG4?gs5!;JbwT$Y~&G*^ov;C!RBaYb?ag(I8Z`U82 z6`yPNVPOTc!nTMqMov%aHU6HouWEgnb|i?ptRu>SpBrb({y#b$r`h$5hibE|2xHTb z0c?NqSCCu#B?&6c0)!xCK|6EnMqg&24Wz&{uKxg=82xBcdm&)cccKJsUz?B*ujZut zXV@Dzvey;5XOeP!$^QV074y&Do7q@Oq}3KlSF7o9tiN zyQl<-X&${GFN#lh{C}lrc2C&PV?)`&e+r5V42EVTA5R^54`F))*;b0Z-KuHM8073T zu>94y-G$jk{{ZliTdI`=gOlPP6SZ1?$hL;(wrL4W4wN?_zCZog845l=>Q!u}g5k<)QH+(&cE`S)vFzg6cG637GmQSU&G%%* zDyl|1wm2+#^Yx)Mk+;#VRdIo+WAx^eZs1;c;{$y2x##q)NM(tGAVnINe-{TleCq}6 z+B?wkMsQmM^Ne(@2?4ygM2!H_a!z*5HEn99;4aFz03LTg8olL^wU`iBNnN=ZJv!8{ zWBw(KlWiLesQNTN_H=N_WQ5~SCpka9Dd{ck<+DiKjOTJPappOqTK0T#pde{tH#t6> z4EhSsm)ZCp{yCMkcX``>ImhOy?KP2@K^KJ;d`CIYr!_Vfw({WV00XCe@_jd}TiYx* zZl@SL6P@|zdUAVcnZm}n4l$hd_hAuZJOJ-uEu-tgO{yS3& zBbyDjT{+HvhSfTasvKdM*c_j>E%{V(1IJ!!=VNT-&W^y z&+SEcEs&Xr&IWLEvB>qHTq1}AMYoJHjQ;>!`qLK@${{X+RF1xNC@yZT*@4lkAn7BF z{{U)oID51t5OTO}w<8|oc5%89pXxr1H7vc_?lOF+ABc_6G^$i^PW<^*B#ZEX$!eemB$UoNdez{TJHQS! zu-vXmqL7gmI}CzJ&OfbZ%tNfKj9FcHCm7$<)jK-+7$aB$62R#@<9zY;|B#!FqrvpgI z7$gz;Qd28J(W_yiblr*LZMymSP3h!5 zis5jLss8}s)5Qq~dg!weuR4Ip-21;uJ=LstVT*sgMc+9Y^6N`m*|b*0Bq5X#0XtxD zI?>t~Vzd)RL3qj5e7aR_?jxE^yanQ6`Mb;?b~&e^w2k6!@eWk@K|Bvn)|2fUMT*?2 zFNX(GXJPBjR?_v1Kt!Nnx54CQo4R2nBS;#~MnT4Q^~aSXWG-cyrjA0fjDfx}>CHNq zCIohHWRnCa#xv>VSUsuub&ZYG21YNrEJl&%vEI7XVTRs&yy_p6gPpvOG~_cQKt{bi z;VpnV5$b&LQDb2fGhEDas4_ZZe}BJvJe}0qkjOT2K*z7XtsJdx-RU~w)#s0nX@r6v z(vjx}1Rs75J@t*+wioRqiz#(U8Odyba6L2inu~7IGQ`Pp!6%H3QJ*2?M&Df4kiUfH zRE1H(lq-@+6ev>SdmixbG0Dc<4m~~;D4zP>*G@=gVw$$;)AymYQ_4H`iy#jdi*Med z;`Uz6nA=#PVIl%|#+|)?dL(y}DlNpNP8WQUxyKmvqseo1+%uSf9WdiK=i$bpU&}>-tb*u*+)6#F9X*Gpd7}ZMV9u+BP=v**wB!VmBbE$Imt5J-gZOcV{C? z#3@Gc6R`bj^V{t#z@F9imAVZ*-NOKP^RHt4(wxKXbj({w(7iot?JmrgIipn9lwfg{ zBVqCDTV0cRVl_hL^{T1-c_y5EaItK;z4kSrc1bAd*)&EZqqA9=`9LY{d&0^tRwGdVPE-)-Z-iQfDC; z=_C4`>pWduMcU4hN8QF#2>O)g;mD_=?Kz6~2-%S^8L&L6kpBP@XvFFR=WitJ{l&5O;c22At#^?mkpWe}En!bCo5x{b_p#o#klL3=To#Z(eDcoSXT(5a zH^-e?NFH3~Rt0d|^~X`YQLb%ej4yg3ZN~+V>9%Vk{%Iw+gSt|}T%j7V{ws3A+ADZ8 zvy+pO4#XdUqf0U+v1sCw`liOE;Eq4F2LAYqX^L7IbZi4KT%V0(_A*-E zB#rn}8Gk1y7|ucS=Cl^t2aNW3@G%)JxzECtx3ahFsT{=NKxGa{Kh*8bKQxO9!ohaP zBY(_(x29R`&WDupd_0e?E2p|x*J=itQV}bj=?_XX> z_wAo51^0O&4-gtyj4|H;4u47m{{R`pCge)b!)ek_zx1zB{o`yUUtzmk!MjIlOEAFO zuU}gH@$E7{68P|tX*S6vk5g5tz{fk)u)Wr;ek|ioI(g=)Q&CcJosMc)mN_-d*%;td z1Gvuh6@6sBujc7j5`a8OlhEgi6B5mnRxZbFM+c>INbI3mvKL`cSd*OerY*0oZSW$L zs01B=BdJ0C!I(-XWy2 zR*D9OVB=WU4x!io0GZdE_J7;wVZ1n+^SsnYgvS072E?5k){6bP`!tAEyFre%$UWSd zKk`G(1U}5c&>Scy~&zA@B!7n55lyr`)MatB!y;B zsq5>SW()54DhJo6B%N4M>5e+pJ43Xst!^T>FRUgu8Sv+UR(UNLnHhp1*sfUSqy3{4 zPL9X|Hs6@m{vI>2PYo1rQd0ZW&Aa~dPGTt8o3zY zZ9%xX65*w661fEK2OHtr#x}>%_5iZxiL(tq!I#Towna?y3&tt3S6{S@Az_5mT;xB<+f-L z#yijV;lVqdKb!TfuF$uMB3rhQmeGyJAP#+L8SYH+FLr_u{{YNeIP~~ZHg@i}QFr$O zNl|o(G!gn&l6G)O?LyozJN4m)Kh0mXB978DFewF_PMqw1CyGG4CSd9rqi#ldIQP@# zE}aaH!ZoRed&JGy19FUZDeu+sxxhXe6VWqB$kpye-pg9$OsNUUX?e7?d+zXRDzRV>*V4R!-haau zWC{S&fa7{peh9?61~xQL9!)`}4N+c$N7LpfX^n z9_;U$YDf{`SqcZ!`CC>xbBz6FmALH)L?vWG%rZn_h(9s!rF%JKzL9_c43MWFk&lfY z?s&s~7{`(ajq}gIe@e}|j6#tlG53k6>E9V2I{C}*w`R@QHaB=N=1dTAxyL;ESI5z= zr}H)T7u`d&+RNDZV_34{Mgzr;PrAOIw|Fk#h1tVRFg`87L)WOMr|jurfUGiar&hn; zVs@cgthR_dtjw%1`|0%?9%|je-@c2zW(RFra8JjYn`>LvxkVX`06rmtG1EKK2@>00 zND0>~fQrXEpV#%JXI1YNCtx)(9R6QkccMRKfCl07=m7Vf{c2*cnmto5@j&F~7{|Qt zLV|NVuNA@x6gJ~lG>)8nIHhi^%1x~#J=Q^QhsU4sOk5eXg#6ZU7y*}Ni*H(W*InEIXUzC>0Y(= zm+e2YJ3c8t`{CgPli+QL{{Y#qMtgJjg6&~5TXssg1~N74UA=J8`B$ZTZ`#hGp5wKG zTt%`RYt%kowW%GvQlqN{kP;XS@N>B5deXIxUNF(j0SE@lK?iSNtkg5z+QtwjzvV-> zPfDxX%>}u__v<0UMo3Y=T+&ys4|KNBkc*t?10)`BNvzpBM&+)aSWw3dFO52Z-;D2C zv39+^oG`@P=*V6E8~t-uxwEvplksa2T|-xR7@VJWXm<~3YZ}JWAuqN{o&G-hQagX+ z>qFlu1Nd1W4C8#}w8Scb&wG-JGB9@DscaqbJcO#ka;=@dS*qOKML6%HP_pi=;>hyi ziEk~!5R4S47-9ba5a4^g)U=b!45|`RvFZoA3(uL&8fCb749zf#E!={DI@;K(_o7)DPPWsho=59Q z_m^{9B(_LpU{!Pn1Kx7gv3c5%Th9wTf0hvMzg@h(z18!F-w(7Ui`ct?1DO(5RX!|W z6O*y^{+00yNOX~n&sq(2by#>vBy`PIq~kndqPn_^2EP)gQG@QNl@vG#bpkoXRZf$* z%}S#Ys11i&~oYcGygDf`lp=miDwQ~%buopGY6pQ(n z^{GfCb;_oGG-$g%<=Y+JJ|p|p;_Sa;XI$#{A!6S}M zBNt^{yR1nLxmmCVpfUQ^w7$Z7K$ar(+J6hF)}QrKPwc;Itf;SQRIteLulJ)LV?Cf) zwVM;9jOV;gK6J-r`w8t0`k%wu7Qq8L)B3e)+WnLJVJ*jZ{?GN#eHQ-!^VT)u)f0mw7gQ!W+HLG z?;=0^oiiWU7q!wmAc0J{Cr-He^3QopTK(L8yO!B!YgJV;X#W6t5&r=3m8S>YtJ*j7G?jG1)NJIe$U5-qD{j<`vt^VyE(>=h7>f$(~8#5I{*T_k| zY`5KF^{ouicFM3_-~P@92ToKrSimW z^WMqb1FZXun^HF)cP`V7ZX9-kksE1I+>a6e0Nz#yXnlkGNn#~t(;}+vx&lv^`^wt( zKkoP2{h`@$UC%sr&o;{zm2;0gi7VKC!Tr_m;q6#&ue(M$V1`9vf-p4<`S-Q;M`l`E z_8(=z1)>5Kbg|Aj_vgyIkFxH?-LH9!5J)@bjVLlg*dPKjr^=Ey324O$V(YnFbU&qM zJ>X8$jb?D~AuWQSU=6wAw%X=6^kr~Z1F;mLl~VPjH%sFf2oUqeGe(J4>JzR#C6wgq z)B)qq(xTqpIPK)N(q23qoZ~0UoQ^B4+(5N~;A-x}ntD5Dzsd#fBYpxBNNHadI3W8S^vo@!PxzKsoNZ#byU;u+sB6>A)S(fY;;IVcM1|p zw{(r}4heNILQ+DyyQKw2cQYCUfdL}zfbaA9J%4fzgK<7PH}`eD<2AgfL{`bp0k=3d zx*_fJU|(`!S=bSC3HmWDRCk7zK*hrJ9d8tUk+sy2Fv(1Xu}crjK0B-2VB&9x|ANx2 z(x+(ge9P2A7Dj5KBN=F&weWe2gd576T^>u@(n~fFdgszr_M^2dWfdd)YqiosEPJlXxqre+GW0}?5yHqD^n&! zTVmEDr@oEiquJ+Yetf%{!8UyKL;)qI+~6P&+Ws|W_C+;r;up>S+>5M_^kF|g$#Gg- z(0ic`Onnuf3pj(-$y0LvNMon8qv8f;ggj6mPs%PXO2MdYUup`&bWEP?Na7M_@}>^r z#$vM9+fk!3f&{SmANJcu*E!$F%vD@loJeC2h(~UKU=FHnMvwWe7caF9iL$21#+Q}F zqFV1iH!cAfjjeRrcB+(Fc-0ExxjqMULBG#XUCk418OrsfIVxUxulD~|spr{o7j%=w z%}-Ess!e?i@QOMxys@y?Z%x-(d+SVJlnpz9-&LwNcEyLUk1-6{R!~sCuPyCsxt)Wf z{A~N~J(E6Nl6+(668o->dS(6Any)QJ`mel3e6ru)m3nh7B%@78)GAejQ&aS_^Sf3$ z`@8E}yc2lGWiatsaBRd7ePiF^ ze`UG}E~mjlsGRUPu7)hT2zOQomAlK1Yw#aF-h}3fkDt8i2&tO|e{jva{}Zp&@>k%* zNUHe8KKJ!RtxKgnEzb6j7ae1U>xDPLT`((T)2y1POdsZy%>8Ub9#G_X0yZ5eJF-p; z>--6A@jnyP?Ll{=jj)bLxRbISEvGs=9uA!RlVX4+A zI~43vG?xed7??YTetG@lLN_e(^jnDyZ0|qNK~>EnaGZW?bd|`g(#-$GOn;vh{U7MN z^jx^QZvX=Dz;tTLT)a>F4`e63pjkAy0;D8w>fv*GcD}LoA+46r)>kt&@06Rx#CGi} zl~AvmTwi+ELsSJyJGK6mA3lzU)TzsP2MIMKrF<#`4)eyEkhtp@d>tQ_Plh8yXrR5L zqTv_Hb^6n|8#YY9;h1K%`f*Rc;e^=nyZC25#+vvO?#T(q(MaBf3y1 zyLOSsIT1r+o6|7}Hu$6p9uU1K>1elXk5vfI@@{?DJqHT8OVrM{_>gn~Kn$FI=79d~EK*6jM{%9AS6OAIu!X;TJ~bVFT)70_=wK@v6C=)&3SbIj8KnjKaKa+$HbJhg5>JUs_QoC2M*e$TxPtMxp&SwTm3(0Gnga8g8Cy z#;PVP_OpCB0B$^WdP;SNC5@XwUPj`Tl6^5~d@Y6*oy7O?HbX@GP7mFZ%UnN^AKp)8 z9%f9RR>^0ejEG3<1BXe$dw$79?m+Ak?B~^{=puTOszn!9v`33TDv*QU(`-KkM7{*z zy-MW6Wv-+guS1sl(@bUdA_FOOM*lV)do)HqiC)_~sD4dwl4gL#M`NYT-k_?Djj1C^ zBzUOzoa9Y(_LkeEU-3x%>6630$s#ef%Yx_pKi8-6N`J~pn|B`-y=MI-FH!`0wDffe zoeyBnl|6`ajmM2{tVVg2W82>?-Z-|nx zGZ}Nd_6>Ao?0~gI!m@^jD4dQ(iH)Z$C`#yU0qgzU1^rcp+6&&#U*ZE>FzMi$jtP@C zN~aou5ISgIX%iu&X5j3+?2IB?bd5A(u|2UVq927peN}E%%?P8n9)u&Ej8)0RB(~$} zQ}(>hDixD{0*+nT(SzDN;WO$$Qw#5pxH! z0d`-NiNs?;CrJv9drhZ?w}n;;ISTZ1Rh44;v&&2gj?Tj`6*ky062x=vu8Pq5|A;19 z0`}bLlvOQ#H+L=ALmD2skk=MaE&G+XwHdZED}K0Y;0akVijIo498t!2A3D zI1swj0bX5BX*}c6@Ea1N9hqF)W2Zcs>i2a`k@Sc>nPc<%d=-miv^Oyg;t9Uk)>iIc zp9G4YeEvxNQR+z5X=b;=xcHur5dmiMt`$K)&)s?DCL#C-{d$LdY-+Jbt?O$-&^Mvi zZaHtBB=Y|m%Dvk2-Dhc6{D|@_@~V8{?R*UBVDFRL%>HLRbxh%4sSS%0vWDK^EMN=;vB`co}N&f@u2 zLT2hsl`kQP-Ccu-I=R{J zyDak=Xk4>j(tb%um1m}tXoc-Vq@=~6Vn;)y!{X}~3?onr-tHzECXwL}F4V)L{8GW~ z1wSD{UKGjBoSq$jrFs`(>{$3k?gISBMy(I2cGh3VoFGI+f90m8*3Dn9nh#$~U0QLV z-iKsn!g1Vg%NV|0hb=#3C=E6z^AgF8JXV`KT0GxP|V#|7S3~=@{lWhRk!~tw9SIj=u*GmP4@zEP-dOp?y*%E&U24AvZK~K)LU% zS>83C%N4C0^v#7kg{->V4+j`Wx_p9G4ANGyl1P*GWx8H3=Op=g`O)k2 zr(5ywVE$YBeYTGH`5&mEds5<6qpRgvdSus~}@YBz@v88yLOx8(89e zeI2#ZJ<;6m8Bf6(3wa^6=J6(^%a_bIukQ8Y2Z?rbR??QL1L%*>_m?MHRzaTlD`1i6 zH!0aa>;ao^V{Ai6b){UZ*wnrH!|_Uc4gHk&f*m=(1 zuzzgDV8->@M()Bd-Fk_bEuO;m@JDC!Fcf?x%=$Xar(_VvXIp>d0N`+)na`q@3sA?l zpTN4>uR$ksiy6r_oz?^zl9DI6sjARa5LpEm0GfoZt3;}AGXMoGK$(?G!y!Y%4P|4bk?Pd?9X5+H-$7DFv7;u z2livKp18B9RxmuC(pTKwWB;w@+Wb?HrHj-R7D2K>$L# z2krnwjpT%yi%tALjD6?ur=O4pM_eDR%OO#TUS`E6`f^Ms6VJ3M;xEgF7&u*NBywom z8H<(5K2+*v)whH!_}cejcq(t*EkN`kWbXbJZ+}Y_f>o&EWuff_D`L)`y#$_534x|i z*wHk_9t<<*Xs(0M2nX6l`jEf2+5uhJ3?j;#sxb<3!PdfD9=yhSEYcXmi3u1(8+TbEBxhS&&UFh);E>H&h zWE^1z(_U~yK6hB&HUYWvpRE>GqwDJPm$MIo4}g9eV`i>I`74RDwyS)zqMX%%aq5&g zw_}5dpbmEibv_zKBjkYr)aac}?-Bpto5V@&WRuWNJuAKETHj&TVG4SkarHRkTUp1l zNyGAWeGK9O1p85|*Y#thzAiQZ|I5_iU};le|1YuY;`msGL}yv=MXic2H!P&Bb#_!w19dfL;Aa(@@tv>O!+DS;^X&= zk>j$wbk9UYDZ#`XqSA~qHI7EM5(ArgaMC^dJl>{xBfb*l>WY7!MGQw*incC?VtpIw zNo(WQiw0$zrHf88IJla1fiT!^X^y(AVGMUWju_L$MS-$z==OuF=-qRWJFt=cMZiMw<9OwiMn0aQjI@D+h3q)og&~cL;r2;@l~dqobl1sBQ6_p(RUc%{(>I|= z=4eZ_6$47dkl1P0_KW^%NqC3M3(g!Ux64hA0QJahA%qslxH-uGx>0fVD2ilz`Nb3M&hTV4$i*&!tFT{#i1=8DXquq zMcSBYlQ@uo;NQOrbmMjYDyvWra-XO9r5MM2IGnIw2M@+@YZ}6`tv9C@xrRa-(^MsB z-*Rpy?s^P{`iE3a@^&?Jf0GL(MSKJ@~rsFmEF-Vfr_uZG?JKW_Z|+Vr{_q|C%zybTW;GS-VmNFke@JX4)oVe_m(=l8AXY$ zwC4}e#qzX|*)zeumi;Mk_x^KO;;lD<3 zN@ofOU6P_A>gdDDYdStaX%gKK3-Ayx2=uG#8IuoP;9Sl(fsvQ)a>!E6E~(3b>-Fu0 z@&E*gZF}MsvHb{Ukr0f4Ye$t0nFwSN$baXVW-tXr0P4^VEu=I*YD!y zOjXU>$9DO&BaqQFEP=x|oMt#4p(QGc*eHohlg2CrtL@Pf+#hz>1XHfTQnKOTW7Q4h zx@0AX%UN-(=oF%5-Z%58`uaB+rRV>wq|Y zSQf*w{!4d5drrCA`^qf95)0wfCElMBPFd9%q0kV1^4ufmkJRg$rZJNPTgkgH3m=`+ zT(KrH6S}0_&_)%-dqZ4?uLr=oQ_Ab@&xX~tqlICbe($|2u|plne|Fkc>d9(z2ZyE< zsse8=O6jgH4ozp92&~xoR40i9aF)*AnAZ6$;ad}kjIhmLX!a8O)iNb_1w4dOz_vcg zmut%{#P{@EmYkgF^A&NnWTCWNf)RC`u( zVk@n{JJy$ug|P6Ue6*UX$WYwdg`#AG#PCw_7QiiZRygQAfk(!h!{(`VqMPNOpNgo0 z5nh~8io6rdBQdp3MtZawcg{qP@X8L4V1zt2kFfht&lM36zuL%8vUzq#pN)w?q$VEv zu{70TT6aBrE2d0_O_y`u^|}{j*s!?+w`Uon!qFoNPAZuf(!w(WatLQ|Fw-b=o#!hpPM$E5l2z`?=u$#$tf#6GZV;9U#YObnoA63oAW zRlHZ#iEllU3hgQOrhd7yB5NAS-_wy*32-&#lYu#O?T6)|`#}6BHW&0%$8mTG!QcgR z%^fIZF4V!3I_fsVGNOfuKPv{qtN}G7Hp~`SHSH84FMHDBb#+$3Y)@by+Iw(6e`x1E zjtkT=SZKxb)A!bT7m=*#_KRc`wJg-XkD1bfo4(theJh@32Wct6P)UFLn{Vw#klS-F zW!NqBs+xPI|9L<-w&+yH(y-`cWNun73pJhFkxknp;XR(igG^>VWW z;6Dkj`IhutBL__sYLg!!tb)-TK)w465(wECFz1eX{4 z>3pMuQE#4W-VIssI%`r>Li=ykhDUJRHk~ezXrp4kew^Opp_qMXh zf3ZkpW{lo-h#FHmm>8@vK{f&{ku|`af}2$eAjk>FVqW6)Vv1co{7&~om^G#TfkrH$ zpE)g}GzDf-nN9`I^OfjE1SR+g44^S$H?vA?n%AQ9>AsVK!xc^MWnrwCYP~O{rmp`^ zyh9*#zjb5Tr1Xt2f{oARkE*7)`1(LO^}4DV0u>`45ng{wXhy-EuwtN(9gc{AES^V> zW&+AJaFetMC|F%n@XmM(3{Y>FKD;RW9@y<2F{?W9oaQ zX@d$rJ3gZKOqC_y5&U)7Kwmje@=9Xy8zKJ(cifs!-#Xq64J;U$;^_%sxLF*Ufe{TH zk5-bcLh-9yYw<>0^HE)V%-k~3tU0YmxEt}1a&k_7@r;wtRp&Qfx(|l`vUBEpj{1;b zuapRvE7?r0%M|;}`n61ciBw%pY&LDI>^^d*$o=~FCj~#~$A~E` zdQ1Ps_w1dDYtjj(Z#ojz!Dp@ApH_ZXLht3m+wV8K$ei1FE??cNP;ZV2XCkFK)3C7h zEWP@zU30hu{{yK>h)bCNGm31d0Ud!EG0tl>(YDu9%Q^8O?CO!bIv~f;JT&ET?k0Lr zcDiB!&pHLR>-Mnzp>;z(Y(Rb=`var=7BK8p&zY6qz|vIn{kPm}@W7q_+mv32&!MI| zJ*%huJYfc!1wL0p|AEwtgDlR-DF$v-mHmd<;4q(Et(#9hpG8iS>S65MrI@=6EQ}k^ zn;9}~b&IN8|LPjTjlosReCU%-gL=OxAe%f&qmZ75&- z8Ps2o5StC^8%jt2&}ZyqKz&wKHWDWAj{vS3e#&`g#DP5Cei}9l3$Z|UuBv7h-RE0q zQ_)i8RSpCK+5Wc$a(;YDN)j`vHp&PPZ;ftb+|0T-e=wMXlaliuYJj!7h4c(hgUJvV z^YIu)p-0|hy3xf${q^0uO0n6A%D<%#l(5jbkngZY9^_t*MXJnUiEHR$SCJJgJ)sQ* zq7)B9ExbRmUbUBp`!2ho0eiI)*Xvb_CZ&dSc%wb=a^WRLhmD!ZEve%`e}l&?Wkx74 zg(q?Q!7Kj*Jp=X!3o?$OGin6d-%9@EbaMOx$nAifu!!T9UAxN&V*F*^gBB{bDk&v)+%3AZ>A)CzDLuE~eS2ILcxy>3b_fYW(nNybJ zsGg4S+YOuj9Fl*c=l*lM@zmnP=wkCas@*p=;qj~PN$Bje@0!avQk>}qtryREz$78_ zKOP}3EeBFg%cO2i?E@Q?+xKJp)3WHQ16=Pm4Oz6Tk(T0hdG z%jbz!Zl?DEQ6%kG4>9R9^&vo>e*fNYS*onvK#Tgo=kXE?s72j7#|@DIl1_oXGFE6i zhnd1y@z{H3fTQ*%hz|Mj28zR0^$GY&#_ihcgkUPV1rl(q^{>pp!tQYzNqNTOkuv3< zccoVyIvMi4jkd65_diep+k>t$TJ$>n;Bj0)?EHUiVio1Ut1(r}T9EZzcXN673uD)A z$bDbf>Q+3!>JD2l3CX*bI}z^1YSY`k>XNW^diDVsUh@X!x9Y&g zgp5=H8xucjrdl+FIkMWC9|WHYmp*tq=haU+7J8H*nIhoyVOKK-D7RH55HlvDbR%P(}h7Pp;Rhoumpk=-5nqPqb15J_7JwE8WH4;0} zGU+ctT=+%++Luz^ieHo4%a2Gx#juNEKvt{9eMEE>3B+xzaUi83GK~whp@@*e=*tY> z<*4%4|ABHpOCuiggB{|mq0&N|kAdSq&>YuUY@FAI{ni(y4?X|_t}=I>+|O>A_@N1q zyE@ZXrs{hfB-E}t8D`0QJ^_g_HuJC*89&Fj+_ny~g~fEwq|iz}u|uc{CszCspDcE|d~#wRo&lfS(?$;~SVl4;xY3r+pBl03I8A6e_5WNI`kL_4*47;nH0%G;)I$0zi;5+ zlBw(NPf*T4^78)&B6pFwNeu`^pfRACVOTK1$r8Gt=Gn9`+ZR)-qdHIp0`eT-Z#Jsh zbdsLvU2CEqo=L8V1ur=7NSo zuWjr4f|f#kGohw|?g~7em1P5_cFF(?2ehzFvb_E>B@RKmbk9xKWdZuRwTDkRRGT}f z4w4{tY$BD18nQP-HnFZKZ$)!!Zi-L+xF&D(e#6qFQ3>r}0N_S(2EI7;*S@1OO&m<` zx5W@rkFPd9g)B?OJFiwk7DtNlc#2v8g349dJ+U3#%G0hNhoUs|8%M!GGAjbczqU>J zkMM?i0%?QjR*0&CK4S4ATWhPiABV4l$-?W|_0O$6!*07A%cLSvLDM!QHELM)`fF!* zWesRy$K}PNc-Iov$-ShdjS%+N45_xxR*gvcs?rPKV!H1*#yi;3(Hf~hJr}>EBXM@D z^dIO$zw04KysCS!sasC0v>uNYuBFN!xjl5(TYd9M1+wU9)5A%;P3hoEK-wf*<((xP z{rp3D#X4^zrxAr#kl<3xZwGK^b?S3^Yl!`B7RzR1TFW_}9?78? zVk_^iTj(|t?<7C-Gs46zCe$wJM}2~k?P=r@j+KmgQ|)7d3b*a$lV9#zjL5LC)EAp8 zXwBaavqA*B5b~a$n~I6$G6+-j^!-_~%GBn+1Ts{7+tjB+sNU` zhmH2WC|pIVOXs}ZohwVmemnuza-sXPTtV&^e3p`bfm-Yg!R`5{^6q@0T@FiT*_c$i z_oJ^F84}(K6Nb;xc%{G?eb)iX6N$-+@(^S8me=HCbIxmfl>nbj=51A+Jf6-6_T=Sq z0&Chhz~q|VvsC;})rK@~`71SY4s#PWZ;~JL-2F(>2q7vo?mN3yZY_}5?+%iBb$VzrtgPbJ!i2<>hw zFiXwU+p&BGCz05*AN!?N+{osr5{4lz7)!$jy`ONUu^y3^d+Di?Uu18Sw$D$FP3uEo z552oAIE<8Uw|F~+b>LPj&JiQHy=J-R*7eRoeLyi_UUbOx-cj8leq1bsi~R+6i&sxi z@vAUrFH#l@a~y4qp+)EEyda!_$0^50 zRmLEV3#Vptt35Pd@3T3!C919O;!wFYQq+VKLr>#Y zZF4EFb~dx2~Q4%or zCXVFQ16L2=!i{+L=BQ5$FtfjQOjI0FGa~Y3w0PzzLA^#Yt`I58_Tkr54rbFSb2C9b z@eV@QRdZ#tR#>FOr2BI01&xY00v$*zN!r{#_T)Q3{Ec-N&TI1S@13sh{a8?V?HlF8 zAbI=}{#(+BHOk3Q)+lEWh(KD~2xJ$F{$ShqLSRjW(N~yC8a#I;L#wGy^tc5{c#gwl z{WmwS>y<4za-EMz6$>EJPfaflXs=R_D-2-caSsFsl*I@|ZZGn8c=IG{%1n?s8)O_U zQX0DE`yDO`d$}+ONvoPmIaNz2RM88lz_KIYi$%zR-?o~jN0Vy6C!Ejqp7&0FZ+B|* zv=Gxfg*AqH+rAFp9yI3Ab&a(p+ ze4*k29*Hu2+#?^%Nt_?a9g(}|j-Lc5PRIF^LuD+U%|xvCLw=}H55>8ef=MB;4ysL> zH_79)ukPVdH&fV;n8#rDl#YkVZqMmBNaON;U89U#sQO6rlm$&LR&Rnz~0@Vp3| z8X~&S!ezR!2bsItP5f3BT}}{Uhl5UEl;Ts162F=r9m11p$dErLAXOE~^x<+N%TV;Y z{VUxDE?ZAkrkx+=^BJ zkSL=PfofnMP*32WgNENJowJK=Wg zHG(@xjJU_9A_h492N=;v4?SG7xfnO)Pyb+f-@#>Zhca%5^2+yAd6~ayz=@3Joi^@U z%OwW?p391<=89C2IM-_vz`b}OnA^;euEf$#hd$~h$rxeVlr_mi%SQAP^yb7Hv+0?U ziLyyKxw7(O6bsjH*;7RC32f98(>56{Gah&8oY)#BHG{Axx4u` ztfQro6^OFM;W0VB2;+?`@{OuI>J1oW)QE4*H#9X(dlgvKn<(<3?rKQLh}n$QB<#^) z^Xp$}`(uhxZthh^OmKfnQVv3FDsS?KNDQkI=9_Ri84HtlDL3!eXoBU1CjF#Cfhh9q z%`_K6=1ZCwLa--Y;@w}cc(l9;PB6XAX;?M(5r}7}?F9|#1#C+W4Cwel#N=@6RnL8OEzZo#5sgp;YUs6l-^+Xj)Oe$qI7bI4fw+sLP*41 z4RL;@lE>|sKKIsFutCq%KdYv}D!Xyv&aUMT*{)uB@yritcIln=r|Y;Q2MOZ;La+2& zOynor2X*-;)i#C3}pJr!mK=_D1qf&m&Z%L&SduKi88WI zU|T-6nAq+6BRVP37JjfWxBj;V6%?S$tyAxA0xmhoZO)hUeCf~di3SsLfODX>zLF#{ zFe?)P!@fW!IOQy>%agw#91$CN@VLsNFy3#2rJm8mQBR5>0wysrijF|_=GIIE=6tG#C8Tpd*acy-!XI^Rz6;; zF?90Bf2Fqxv#36boc{UmstmFnPJcjmp`0)?ZidXZ+&X*otI1-gks-zh9c7bfs-zvP zE5r!3PLq*aP51ZAO8j2#<6_P~~ZmH!9T85@)k6r1SaD9jq-37b7 z4zh%z+OcHg2J$8~x9*QzI+{G6?JKjfz_EzK7TMpgj<)8-`QpYV!BP(Mj%AFrqKCkMvU?PYFE5{OYoU4nXniEwx z9lf_AJ%-Zed(a|=lu4ZdG_#U7n1P(eQP4G9cMQgFHJgVTzFvMQ4e^cU-2@2q>*)4O;eb20>G29)33>UwN0)yiD|04x6wq zwfSVyS2lj1&`G49JWamz2j9ZYSY<{DT54W>Jq%SgTV%XjmJT7-E4J|xwV;q=F`#!J97O! z_&7S#hEUK&+5d8iVlbx(!J6j7vkfAMNUHxgVQxoD_!HJ6R~hyAwaQ(~YeS5h@tddE z-3(J)K~sth=FhRQz^!1%dL|$Wrcvr*Pp6amp`RZIvK4P(?)_bRcC-aWfl@r6Nbb< z&VT6uyeQPk=N6FM^nUrf?^Lu2I63Cp6~C-QoDX1nc&t_91Bb5Pbjik*wJ<4P9Bt>O zu9Q_)!Ae~vE2FZLH6J(?YjBx%>2=~CHsr|bdV4GTSJP)i^ndk9A2FRs&wNZbDeaT~ zdTG9RjdF=+xcu@RB=Y`&BkrO7Izd3_I%-$!9@t5|bpjBh=npQ~2{UXiPpska`{rU| z`?$Cd2+y38FVvX)WwZP)qJ6;pAIoj3813MqZ@)J>`sav53)sDPhD6wNgSH zFLlZ%bK_rf)_vijAkYV0nc`;RkU`91`s_<)jdh|CYtl(j%cGUy@qV{#AAR)C%z`JH z6IPy{LEAke9Nm5Bp9%!9*`G6((Q=jgD;KBtmEI3~C|YICn$`OIp()^2u=wL)TY{jM zafnl5i=ZL;@ITPg0KHhGTY~^n>@^mOn)eeP&Sv3kV%|yR%ITjGo-G6VFv9zuKl;t- zt3!=9zSWXsR+MYQ3g}y|>~{}&*PEy*2XmhKlTcLJ?DO`-J@nh(&%>brGAUjX!?$7u(lhkIx& z6_w`fC%;w9QGxthYLh;Whe#to(s2!ChYfaxOrTDVdXH}ZJjJAu@}oI6S0g;;>5Yv} zlH?nH`9YJGuGEA<6Z21%-EAPfIdvreQY3=5bYQCybqHkEc+t5x(7?e7v7!*;0?r zGW6^qIPR4J`IhYEc)UzP7el`?QmITfmbR#|8hjQgXBDx#Up|JNoR$`$u1Jo3AWWE= zjV(hx6Y8YzX@U6S9T+I68*(U7qX$+ z(Qlto3RqU#?l3%!KcKC^h3yU&FESi>J|Qfn`*lHB6SDzn%f!-j$TQ7r2io;)(6*mM zQVD$JCz$#a+4&*-b~)l)V*1suD6+O;KXGfOloWJ;uF0~XuRG%>gQs88xZ?Y6(7#2l zOK21{i}gf?U9N5}l+#$VY|}Wr>5n$U!b}4e$fWmW|J3;Shhq_(XkZEzQ!qA&hESVc;Rn>c?YS1iY;oL3u${KGVPGDFZe z_Tq>?*=ywQe)r&zz3#pD?r$kAGe9hFH3ZB1);oWo%R+Vp3ru?HEvalp59Wkk+&pJq z<h4)84&p)=y|uW#lx%0EFIuT;;&mvQn0 zdx|+Io7|qqU)ExXCj>4PbzgO5Za#clFG`Xa!9T`o#bTI}?lkBp=WV~_vfs9_f0*3L z4Eci31=6T41{Sc#7q$63Gq14nVrK*uS8044Wn_-E`hC-DpgxlCUL7D*!FhhE#LWY0 z7%{5nU{=hSy@2;pDZI>{4Y#|HT`kOimxb%T@q5~tG9)0q5pnDd-3E!Zj6EfyQP8}J zo8*c1+-u+885qNpd|DlwI?iF6$Ry@ee+*F6q|}fT<@nzlmV&(gY!|?}wXpMCKnS1W zVcTY`I~=8F12h-U$=iX_l;@;nia~B zTTlJZGnbQ5hPg!kLW1oRzRs256Gqm)@>@2#mZZPniO`y2n@ z>*THp)KJ}e`U(lBp^;*~fpYSYt9V*1cOweyBryWU?Z=TDGWWx7;?Zr26#4Nd4FS4u z6B~57cA>fvzoL@$NE;D{Yl;@Et#Naj>%Mp*pC|n-!0j!NsN!Sg3Z|mXIFFpjb(q_p)mj|qAF&oYg#DY!+w3jf#+ly*Ut2hFkGD#81o10lUX~OT$@^!~h1slHK zz9l_0lp~~Vp#MNzN4;e@d}H)cl629ikQY%2fwYSf=Elp%S$k#fTB@`AE0goh8}>6P0RLih}^wT|H$ ztLT3FX;{kZygJpe_$}$MjcPB8Dk4;@VrXp*Y+PdnITfaw6x*msyPjz%eA9;c2F|}E zu_PptTrfmEW{2Ksc zm}BZH(`DAdd?h1f=*AuO;Oy5Z6>**XDC}%L^{R{zJ%0=gL9IZHcE?QiT97v)ZF~k$ zOr;ne2Sb|V)vt}>aR}`GKf+QS^r~a2#cQ>CaPSAR&=t>rGW6YhAS2h~__DvKY?sL$ zxNaie@rOhPec-MvnfIU6y-7L;f-SW&D7Oy1z4aWrk*9lk_S6EfpwdL8E8R1@8tBA3(WI1S5M z`zfI-t+%711!FgsC=N>fjf>lgd<|PhFND{|LiOXZSv*#e`8sE%<*qtP@;WUNXyMDV zs~Y=M8;vOWLv*S%D>=y`ZPgs~`g9jn)v~{UQtb1yKeN#Y17epJP2H&O;V){6)_cXh&VbnJk^GsvC{RFyf|MkSBE#=*7A6-V=dr+Foc~A zDVOeCJK;Nv&az9)eku`xMEqsVfY(ut&YgFIboVg!rG?Z&vi<`(7;;ZBDa6ZK?%jn6 zKMi_r)=(+R-I030SWU!eKcG3`_K6-=KAF=ULZOT{}KgP)#1>g>=5 zd(1}pCyJ{$KZ}(h!z2j{tJ33fQNRPYnsJvhY=3|!N%znyJR#Z9cqxl7Dq$ZUrnQ>f zlWcNm-AwwFrEZ|DKXf@?4fSiT9%#4){_WsCUR5qH#(kj<5Vm&b3qVL7Yc&KZDfO?Y zY?~gf9Wa_+XjHYFZ;ck6lk=xuTt zu}(Q@0)7YEgXhlE40g4>=Ps5Nl?|l7Iv9m1CYbB+$#$f`qFU2@Zx;0ZOLfP8n1V)e zr%XdHJN-CQik=geJ-WC*r%*#1W1H_w6}!t~mR76mP#|O4d|aY-4yP!C)X4A^)=8pp zR1d-=gUfw>WbLSsOMgV@65%b|F9ps#Z`oP5=mvRYLr)8p);omiNxbTrV;M&7)%%$# z5kkpcSzSL%FnEd+RxU2Tn;4tm!G?RYBSS7{`4Vjyet1`yE3>q|jG*rKO5ng(Ge6X) z(G7d{7P&t6%b1)~{Cmi^=;J80wW_2^$Xqm#GaYe@@vY!K@v6gSv67|1(O-Tz`VSPv z*ZW4jxNk)AYCk#oAH@>E>@nh3%v#`k5_S4jD*{hGb<0!!W3yGV;U!SvA<1ohf=Z5} zRKc6!2IXY}468NFL#=XRY*_R=K3wS#v0@47jUa=}5&)?Nl{0~|4QJ0K{Ul&9O{zKq zOQ74on|D@nDt^|Z^J2~4mN6=!%%ao-8%IU1)cjDfq~*ispbJ>|_ENZQlMXgr%5AMC z`||)H*iF1dDdJLFt(f(*1@yPPP3fFJt_3IeDUV~^iNtb*kCoav>C*0?zy-Gxi|v8k z=4a)+xgffaH|3=1|g!WfSuFCE_*we_*}8#gdWmprL8138-Rm^*n=pgf-t7$33m zh4M?A%%A{ydoPd}!afpcCB?PbggNdVY=m$rbnp$)H>eb6xcWe|UHG$}+xA0B^xGe~ zUUDURA8c{FSkme*n!fp!HD z=!=x-IgDbILbj4xw6IQ^K`Ta0f?PXqHB_{TkChr5BkA-Y@uJHz0W?T$4k{(`_ib{-8vJar;$#s>h==oM~Z4-M>@T#vdf7F*`?_l z>MpwekVPt_MAv>`3j?Nu0Q|q^X)vA=Qw)`Yf>*dUDKp`1CoQci&&zT=RZ?kLzA4 zcTPHtj5=179yd|{R2|-XzjpF#u{;Qs`ZaMlFNTbAyZP#F(ZDuHnBuki*LMKA#wIUb zD2SBSfcROu!jH7xAxU(F>qAzH-kC(vAA*KlzuSNMlIG*SJ_AJ~ALuzXCz4n0XltDx z@_dyhvW7eysW1@AepmMkQAj`;o-k!D-6~8f!m>wT{|7?r?an=XMB_WJbWJSTu|FGZ zrm>yW((udM=>*oUr)X63{pYkae;0f0G!3s~78|pN^^lyi*^QMUf4qf`v%}8RBtZW5 zDa}2BppNt1USN20)H0IuSox-}$2Nf#bx%GDP$B+cL;wbdEPdO&^^O)~(?p{$%#8$# z>qa3vz%R4H;$gL`uvzWgJz*wX_o)Sm%)@)9^Aa@q^~XpGpivW1w8@C}t{z%0ZK>$G zG)pt*-j%vkxCtE1Lv^e!Cw;kAXT|o~R1Ul29PGJPZ>eH&07_C+aegh9UJHH9fd|nF zN-8>vLJ^zQPt+wcT5Wm}UP&h1gT9jM`Kybco*Z*;@hw}2g@h)eF$l~umwl(znaGNq zuyu2B7&-qo`49foFu}{2s-4X1bgs-$ZT%*T@NvWe4t-;YU(P%yZ``YSbl1Y>iMlsT zvMpZbYgBzz?!u4L=RE20!_!E@hXwydquux~*25Qbo5niJLvedX6nxrVQLy0O$(@UR zndIH?dzjqxT2CmyVmtgKmNGhiOm&1p&nU!r4kMMNX)60&>c+~!U`))x`YFU0u~7=6 zC;W6ac6F}F&LcaKuSMUt|5ll7slxX&rs*dIdawD{(sBxH@JrL?2`$>p(Or|oZw?ze zMNRioVCV8&6i1^b+O|wN=ki^4t)IXxP~Nl1Wk8all}S((zr0O-a3Rop)97d~?(PSg0qKMjcLbX2>t_~tzS(=Kb1-45I9#Kc0UN>fjcA#SL;T0_QI%!IwGuZ7CS>sq+ibOfx@$NTZ+zg>9Rd7|xdeKHOOx4`xIR+d64oWIx4nFpG0x^c9pNkB!@2n0NW* zJ9o*>anC-W|Cj3sYG}cIx1W`iQ#jyKwz4Vl;AJ#>4TM$V7U*1*_p;qiCzPhFkZ;`^ z1XI6(t{!jm57W5dKSlIqevJX<)DkocJ-9IU0xQ~;k39*gY8U_QX9e!8-(%Aeq9RL{ ziI~|bvBt-V&VDNA2;+3LM6i1xi@sH-_lHqnPBU>05WPENB|3MI8C{*+9Rrp104dJiwO;8w0Z#`2`B3jaiy2ss z>M$|4?@8Oh@*;->5_FNAfsOt(qaCuL8wLREH^BXBmopf_MolaK02X=LuWLAz5Eo8^ zgS`|hS@fNO<8i+fz190$h7JRh#`wlO@l$Pb zrq{t9;OBGB^g#j^J}%PWuLUCno>(Ml4(5kCwlWQvJ3m$ zKW;lUtz;_w`r{b$uhCA+nmKzRX1GAiK+AfO{&=rc{p34YBl|z?D{=&Qh=m~e?ah25 z8yNtCXsn<84-#{&SQCi|0~H?4T)wh?5E=fn=I zXZ5L?Mo2OUkNzBV-}UKSy`buukp`gHJL5kJa20s;vx0CKUwf^y^g?YSOYe*fw*W$obWUmSoiJkQk5# z)IRZT&Y++vK7D-gnj{xa`!Znl@d~`Nn9e}S#{}c((pM>QbE0$`=_5!Zb%!EM=a04L>))Iysn;E4qW_C#0)dsfbj1Ql}uLa|zD2@PfaruGY`_r$9t@Fl4<2-rNcBQS*u7S?` z=N~F5kstw`w5tP^Al1_6y-iv)jN@`R^Qzxl!!$^*fXZ?SJbCr3sXH|W94fPejPbut zyHw9-Xzsn>)IiA_?a!|C)xT$1G-R|oi@r0H&OP+NjwqedJY)`xcJu2*jz*22yj>$B za&mvi`L7-JpV@B5?Wz0QyHL#BldC&=1Gg20+Mi^e&0Vfq(Fw@g#4-N>Jr2X{zuA7z zy;IX$@g4$<;9&m%b6LHjt#xwiEQF`!0AT0jezvUF_FBqqMmtqpoz8Qe{Y_`w zdnIbJ>ij%xdTsvz-F;@Y`vbAzvy`0)og)LTalc*bemSF+yU+k|IL>oYFBevp7-A0D z!LF9wC5f2eoN>^4S6RZatEqnQ5C{~)A}Wxe0D5^j|{EiJ$1PZtf zpLI-(H%xQ4Jnch@*$|f*4o^A%05x`+G{UoF)k-D|se(@V^QlG+`9TM*6ob(3UGA>f zdT&)^Sq2yrzn&@?10CBv2=uN*2uV}VLTbf9Ip03|suJX%ZE`&R5)+dJz3ft-1de@gMsXCaOI zV)L{i1G||+VPlbyQJ2m~A+51j+PM4t>n)IPp74-*Btp;YnC!eumiT>juYx}MKuhgyw7<=ygT8k8*P;6z!d}Oye=x7oKd@Vv zKlBT-wElAfk&<`Y{VUrL$}|U&O0eXU@Ay%}2{fL)21qmlmj#%{`a1qlbM^gd4XKd| zu+^5_`h4k=2<}QLBb-o7OWuZU_UBhSZP(JK<$OK{36eZbL|4`@0q~KzBYL!8N9E$) zgL=V8)H0`$n!HG+CDF0lJLjbkDwGOH#yV2cK=G+$IXNesY<@JvWQ`%n$<754xX$}h z!s0O4RXWb(0h2*!WNAom31hbT+poHqi2xg)4*BsP?^5B_vKXG6?fcN9mEE++HwUIY zcA|p75CH?BC+q7KOI*9LJmlwoDAJLqa>HZ6-m5Ewgy8N*2fmhxpGKx()PbDhjI*#s zEIAwcA0t9Hn&cry02s!hoYikp#i4cDPeaq|&Z}vt!5M$dI_GcS6v1)^5NctJ@9w1p z4J%0Rg>Hel$Ir}DHjJeSRU-tA%^h(jAA#kZ{{UQ9Aj3A=K^;v|);%N!&Ux`t9imIc zp&TLAzMnrzt+@*T)WwK6#s~MKc!~ZN$~WADpRemr_lU8VW&jRz(vhB6WgsyM>&efb z`uS4VE@O#^UTujyCp=@`N#C3KAB=VP22G?yiq1tS>70o;9Jkx3O)U=}&Z>C&FH zcEe8WNh5Fp;*A!kkHEwgI~?a7F-uQBgex47bGgVnRXh0BGWtL#Y-`_tJkruk>SQA) zY#sjq%^Jcckpr_L;NTp6Vt})d&SU;k#~S+a{c5(7nQj?|0)IFI8PCR?ff%`cSpNWr zJPLLJBP)$T{v7RA8SfMUx{ndhKdlVIA&|Bo9d{Wc=S$5Fqor}j1m~ykNZg|+)O4Kj zzDVEC$k?SJ)}ju>^V|HxIzIu<9}NG+xt(p z7QWbaj9Jc^+xPd=e`8vYw_Tb>!@ghMzeTKNcI>rOTxn1}J@w^2%{mx%Y@B$u+@JKV z#$d_}WD(AKR4DK^=O==3wP(C+E*@pVt^phDY3oT$fr~IZ=NoJ&z^OYCy-ij^G88r& zrt~(rK>gqI5s)jRn8@HMUtTglS|Xe|8=h+04auR*>Zn0D^TFPewm_=5BP`h?9Y;!a z0l>!`*C8i4Q-kJe&44m?-!fAZM&y8Z_1}81I!c6GjPaT(@4ih^Nep^?1+sCm9#sz^R($b|uy>%F_*4@4 z7$es-Xyy_wrTo6`lsk#aCPu`b4>U_;WQz=PPW5*g2P>Z{!-hqMe)DD-Ad=X}>swKT zk`yC4NCa<0$Qxt|?2kGSMmS){pN&jt%2WXEf@5 zQSPbDQFRi0INxm4tAcUv-_EQC20B*}OI;(4<0m-48KJ=xrE=}QcL3DOJV~iC3Cta}-hAHbCHReEu{W0)sl#Db6xF(+w_`A%-{3JpTY%6!N5q zV{8D&0P5Qx3KjnVXU6b&a4<2pf4u_176`DdoO6?%t4axjuBPyhQ%3|I2sAlW%Krce zu5;8@ef_-Bm5``VyBv^CJ^A-i-JNA5tKO9Z2Vv$uewCvgq9{6-^9+A(rm?Rq+8K+* zF!3B|<9+>oD?-@*3e!oGF2Ejtu4%hRMnFj!AOLe!Q{29nbB=m%^@;`BD^K32#~XuJ zjIGQeMpwm?gTc*OIT|EYJCHZQ8`U0TD|kjo$;SiFee0TeJEjUU**G5zde&l3Bt@|2 z1a-$JLF|Xa0%NK z%Gv-itZD=jJwCr$E4+)P9e~c*J7?=}od!!>u$f#H#`*N1v=JG1V5q>19yva=#I|aX zg$%rE$Q)8F_;Advk^mVE)}4icfHZ&mUM_dznspshI{s^@TJ}oD6)a~_}&yqP} zl(-?IlFKLC0V3M3y-214y{loCeRO4$dY;kmQV=vN4Lf zU1mijk}=0zpRdx1ccxMu2?d4<9X@o7wt+(o5;bqW zMKjrovB2@jMs(~m#y!X1S?waN(=k#At!N8y(NdXTA1|F#OOSjzN2wh?HF@B{AH>ev>kFgXlYspRkLNm;bk_XAr1xZlY7)1vEE(-KMa-#=fyM9roZImWLe z{c}_d@)Ft3t`6Q`wM>x~Qu^@611I1-_oQy;SYauZEXNEK@8_S~P?AZei%Yrg$FD*a;&nfOt;?;Pv&S=954u%yt+)EBmc_M_yn~U)x~U{ngpGuN;dA~zysGi94;GeX#zy;}qeX`1IVEF{ z;_cVyRJ839>WxdCL}267f3Hd%(+T60gi!hFa(DgfI@UYMBr(Vio<@D#^I9>PB7_+; zqfbnIdRIF}bCJmh12`N|ySO7P>;hz9f)3~F_pT5@BRK_fGC=1(?dWl37!r2I;A0|} zmMuWYa1Zac-Drt3X+?9MqbDTpK6MjF&KY$9j!!~9KU-CGz+NYigq{}amh7!)ORkRo^k*@XX9SVy^=vWg&gW-0Gtm$ zFNv%6Y#Kpg!~XXDK7U@c_OvJfBm_Qx=7Di6vbu;E1i>tG&2U)qTa`n}IQ8@QR~rOp zC5Xmy0nUGV1=)_&6;qPS&U3zetD_Pde({dvWKcu8UPi3mEa^DleR@;!1ZeSqz+@Ae zAkbn*BT&wFZ0=}nat*@7qbPHd4Kf%NCyzd~3x$>ZG427VFolGvKlr>OIHj$j?q|lm zA$-opjF*h^F$2J-VUQ}<7ZOH+)B*@685#NUS827wk%c~oIQ6SUo)Qk@&pg!J5flvI z;HV^T{poRdz1Wj-Kp7PfvMibe4k;@XDb_0C+(Uwqf4#e;|rLOg~ zg+hV`H2AsC(V;{5i2J<&l>EGpl?M7rRz{78Md^dbU+YS}oYUI`4$8_w-~C27tZ!?J zuVFHR%*YE4n{QtTeXM(Z?F;)udlE5;7?e?jI3FtX{lxck$XZt{#P7vbl0ZQxJJ$Xe-`XC@?L~XLA>m>)_o>gpjUn3p!Fxcr^2%)jqa2UoCNcj2nuI>h z{iC?k-P#T^e~6#;P}}U|+9b(qFcg3EME?M)mzV7S0JrdkZASZlyifY7E&YM*=6MTR zt`$lD0D7PGRnM><(f%1E{2o-C58}uF099%BPuXX*ouN2^EtEcxcacBquP*HGyWh0; zQ7B;=@3_>5{{Y5Q_J4P7-^&MZ;{ksDNjghnEq-WMn3HD5I^lPY;bie4acW@Mu+ar3=-;*<01CWl7DD-)I1wV}JhHwQ8r`%dSz@ zwV~NxU|osaFlbeVe>Pkb{{Yu0ci&)Lj~&b*B8-+@L~3q7_nYsU(d=Ka4#tp|mfc2i zjo<$OwpP5~W1Wv@3&xh{`gi4rUstQydjr`PcY5Rc)6>;oDiquk%nlXY9MNCK1UEoNnY1 zolXEe{{Y8X@Ai9b_+tg_nzF7tuMx&NaNoUY_6M*wQE89x$)`CZQRDvrHEc=jXJiF2 z$zY=+b}roewNaq<8?z*g2;+?SwBsazefp~7*t<)41R^Efg8`C%cBg;z8pah3+$oTr zK|6c=T|cEB%h_94;UGkTfI4?M$?N&Hpxbs8gMSWKRItb(k}>-GsFwc9+FR;$MDy!` zzrXaTx%O_t7}7wCuq@jUFg`RJe!{YzImNIaz+7DB|zs2sXWb7L&N0ugqaKmsx+kE+&4ZpK7HP?MKD$&0HoceS% zr5CbYmUW8#Y7&hgdi<;O8`+y#C+w7*f&sxEzpZ&hcB8zH7$cG! zIX-l4a3^~VV{W0FuU<`FHHyyJWG#>h$>VP-rQU>r=h9zL$OMoLWgE%T0ihRB7;}(4 z`Km|R(9FH$m~z8q&l`KiCh;d{z8P}Qi~xMTH2g3Yh9?n~2)=!B@1{)a1f;O;!vF^P z{i?E#_DGs11RsV5eSOt_jm2u1LMz~qlEez>g`jw|ajhbkL5+=@mU5;q#S zv_8^dG>L{d4ddI?`qq`Tv`P|q$j2wteEmK&;Ky@=f~9xg)6%JG^2;GIDbT0F#NeKv z(9o{?iGspBA$<)}@-|y#5o0JZowpx4p3k}v+m?`W0a1~;`o(EuS_ei8k(}c+z0zw{ zIm>aJZ|~-_J6E%_1aJAfv4Tq<6;rd?HB^m9g@!i$`S@0?y`)JBs)Yv}9OHcLR98qr z@0e&k26}(376*wn6#RtvaB?`SxGu^gb=wDV$gY0*7r+CydgCN~>1&AEYDgbb})7PoZD{~yFBD7gMc^?uInh;IJ?i5rGTIbDd_tpL?3 z$&BH$H{g8t{{SMKxF}J(Fh3DP9 z7Um+ZvM6mC1&BYdG{0y?EXTY|t7Awx;BV_fSW(InfHE8ttDo0?e`;}+gD{O$^v-do znwgQ94NODhEJ530zgiW-_lma>FfENee!VF1=^iNw3T*NFoSBPUieI`yxC?NLu_MxgTIzeIk-yCO(^nzVC`4GLp^HuN>^*zH-M5g5n> zZgq9v)`4we(N4-jk;y+tZK-fyp~yf!2p>XpzV~U@=ez4&(Kvnk7hpJ|-9$ zVt481QEZx{)c9fv8T8M;71z#-7NMlKE0IHoyq?r+aHAU>=8U%Jm^(4go-@5ryrFx{ z5D;XpM)fOe6p|Urg3NQi^*6T*X%dh!Gsbtv#)Q{B@;;c3v>6#;gXKg4-%P;?kPKrZ zZ`PFWrnn@@gi)~sk3T%r&X$jq4To*c=Wj1cEwphEVa}2U!>5%fQs&%9R!u~30}KzN zMYpwVej;+GCoZ`3_t69r3UYC&lf zNEo2c2~r~-P7Vx&ld#pINXC?N7k-+sQorDyhcb$1HSYco7- zOKHIv<7rzq{1ndE;O8vK04G}8KsUn(@%MVSOPrg^V~?2#~g72 zr}G^^W78BV7HKXDBao_cG@gAA#8ukVhCSH;^dph_`>GaMR#lE*5kStYj1%zVtu(AP zWMfI|=4o`jjjx{A9mlO7yg1I1dCn*djMJ8h#!BOy?Y8{Y2gkTn~1HVZ7jz+M%X8l&)206#?ciR%mx^eGoSDEif((EmRQy$EVw$cjP2-Z$eJ1Z z;gPWbk^Sh>H}MgW=5i zI2%@C#d8(dnTD>aqX3`R%C%#W9x);C^dmeUDw3*Bz#Mw{(EHe7B}o8mbJHjGsE9dY z>H$;0@~adjwYv^{vGC@Ff2crFR5xAD20nYzFx%Z*Tz(@$w0Hv=fZN}i(2_(0_+WR9 zfzYFIwa}?W zY>aL+`E$~T*mnZ%X-+WUYoYBWh0Vx?zFC!0fB7iZ+%2@Mw0j0BzpeY&Uf0I zkO;~S=;~(1#D)FoS*_Vbgrg%cI(%8`cE)^#L~um5tiw?#cN^z_Ox9iWbFPsX(z(eX zjm~}be$HtnmO(oJxCEYd`T5p?w1!~vLQyfm>U{Y=pQU8oUf*3Z+e(KBbEp;lt5384 z02LSU8dB(|C(@gmD`qC)$YMqT+#U1lNV*5OiYTU1;xZcm@AEs;mh&Vw>uoBQlrA@a z&9L&Np|XtJyy&`HB#fR0JhSR3v5Qu>Ff@!wZx4iwQWD12auCQgCivBX`|(d%Ulk%B z$jy?Vj&VzNmDG?*_aQX_g}`ieI634&E`G9>3bM`$0*% zF9rl8VNhf9dFMH%m66p&z%jCH2{{{n)Q#QDl36^ll4A!;j8}wxrb`XavzH*m@)m`F zW@0zNug+g+V($A=c*jW?W8+@j`>RB=`%fxht2(Nw9e1z0{g<(Iv;d4R^W=bY)N`8K zmeq7CtLbFm=buh`(lC~qS2ofD>N)=ahxM&1N0+=uaHNI7T#R{9-eYkrh!ho%W!!Ff z&+khf@!La4GEUoqe}5xU95Tf*&<+O7b@C6Grlv$#3_?Qkw!KkJS5&LtCI;HDK?5Frf2|(b*;&Mm zfzvqH8i>_YyoPn_l2`Tgu2{oHTT&B&h8u0>Yb&)ZFe92~466CkcKvftJ+O~Vw&O|1 z<@EFBqULzyx78fsWFvnG=N`Lsqg&dPM3Ov**pl6UU8qYc{%PR|bFmTvdJdF$ZKKJN z7&12dgO6Uc3#D6v1_4ONh~#bQOhibwQ40mrjYAnY_|q5}%Hvn>OFXRd2$4>cwyi*p zC_jmUJCupknOnl7o^jLV`%$l>o$X9;Fa+_i-_x3{lY$l!<5CUO4t;Y?$tocMj^}~r zNcM;E(co1e;~~p!r>`5*wkoke%CNDKe>aO}9%73m(Oco7aFbvS7|wG{Lenu0a&x&O zr#n-Tl151fJB(B^;rqn}n2d9_DwhH#j6A@AHtYQO_@DiTg|Haq$6noIB(F3$&d z+{D<&h&FaUyHhW0(4=BK0HkaVNZvM}d7AAMq~7TN z{VTXTRJmqg%y%^mrA`fT0Clb$`B!z?h{7;bDb=26Y%s)BjCC7S9%?J9%t-@oDgu%- zQC(7_ECz8_CtCn|3<{|PY-@lgitG?G=Ufz!Na~+esqtWbMAD8)CUHjfI9o? zLutnO^A!$q`n>9Ok_LGlYT{MUP_9Aini0=Uf#R&6m=bU}&2V=dF{4LyAkL>JZMN%F zd7b$rc~tlFcYC?gcEF&9JqfF{vNkn49C`Gs$t1;8NXGn>1Cn+pjexJcy^vEiqTI%H7ULUd$o~MXdGsbIU{l_J>Nj3-`te1Y>M3LX z83^%mJcmKjmb(z%K-y)@gaS|wel=L(7ERtUi{9Fp%l-aHkzk^sT37$c8D}e(|JSvS5xrKKjs-dnSadAK|Aw z^Xu}f%Op>29BRdIgyR{`J!{O-?&p!IQM`XX0x5|<23y#rd zRkxUE^U|On*1Fc>{?0QGXcd}M;a&y@!mAQRBWReHVh*8_Fn%Y}ixtwre8}mb0kmPa zUYq;PSl-*6v#@kZSH2vC(h>1XT77RQ;0ZhdTq{%8tqC61WZTi*jqKsL(NOdz3 zpy!@C1Lc|zXUwoGG_h$_1w#e{r`OjbWwKV(WD2eMn=Sq6PSL%#QqrsGWmArF{B=Be zR!e(b1(XIp^SWdCbK+6y$HK6Eqx)L+YqI+qf5u;s*&vXTczrfn`McX+ycDopO9x}Z z*d&FMU*-dYhE2WI>R)KS)P1JynFCLF;BT;0<9t+9l4!8Z$rO=}9AMCEtEjPC%_#vBIpc9&SL~nJ_p}|q+HqP# zYo%o6%cc~0{$XDF_7m>SD>QO;wd`|5*g67Zub7g(Kn4IDbv)M7S`_{?ilpNJ=NRPYo%&T7L4ED?6(EK0GqqjW z8d*j)EMNlLc)ck7n=FRp1c1Jrvv|P9e!ohd)r5D-Byftvw%&g|u}sHolSlb`#na$A zh%21#ck56mYgg{k197W-Zhij%ThU4^jigD8u{g$Y#@V98RuZsAqgsG5tDl8gfD-qo zSBPUE@%qxm4dOIYsFo(%9B=OjJx9v1Q?qBW?G~C0%^5f=ohLq7&1&{>)`DjMv`exR z`F=fm)y3>nw23m|0T=}19}!H;b8Q8%m7ftD9a$vjr>z1z$Wq;(yb8I`sL$_6p3_;~ zj7zMs#+>o)t4xp<4>}2D)I1xEe0uw;w~?TnBEyG}hEEt5dSBAe=_M{-+UzE04|b zqRn)%%iR85i3krqxvbgbNiJ2E&-g4e-gld$4fyNspkB!okat4tAXAM+PW?JlU76Z8 zCPVmBszppVIp2PAcBKA57XF(rlLEQs@L;h{O`%@G90b+rsWR5-ZP^oO6{M%EuzRyKx z8IiYEyA$Xr;KEeT2Yik+6du0(#TGNaB;^ut*ERX;x#)!t}^S4 z=B%BK1aqAd;hA_K=N|mk;WpNnz22abNCE;uBi&W)3kSNBFj1B<)iK5yZ0tY-M4BPkDilE@`OjZ0@bq$^~Y~Q>dJD^Q&9-OmM}ZwzcX2BR-t% zQE_MA!T#vL!1Zl=b?aSi5wf>!_3$%{WA&t%{vz$-iAxq@0sOwco~ET+{h4?Jc#*T= z8)@~UCD-Ea2xFooIY!2DwGk~KncSuVkIeWy?Y0S}uA}bmlS-KJl1pxSQ!*v1=q^>| z)1FQZ0i%e!tf)Z;E#lnz^IZZWkdiSZgQd<#KN>Z)tOeW>sLV>>5^_27@~c`ST1>`7 z(+sC8hT#0_{p>}{!-J$_o}bgLFMVqFQ8Y2i5#Kl(bH~P(w6?vHHMM5KpwjYm+l{m5 zS{BGIJIL-qbsGb(AF-&qOJ#~wwg5``$jRT&uH069Z5XhUTWJS>4~5Z=*&Q>Sb)|bA z`cK3JX$S#H$@9+jw;B9gOW(nQrwTQ5>&;T;)JH68BmM|HYUJ;?G_Cye#DFV;r*;63 zm&%zCH0VDMFc6WJAZJm}8=U-WC$u|CRKEWJW~eI!N5&36 zYj)jDoRG7T-$*o=$4`&SlhC3sM$0;CWsfJsMsvZ~(V|DPfh4!jb*Q$IbFt&C9w(am2-V{Yk*KzE3I3IT z#x1lF2@t6~sbP`1-!zYCj`7h;E*OKSR|7u!HS7{xc3a!T0uXRmAI-PF*YvF6WppQw zIiC_Lg$xvUfE;Z^dpTBZSuEgqS71k$`K#V`dQWB@m%Nb%K;V<*&(_t8+0b9fad!;T zYF&yTz{YX5c=*<-yD>rptPgjwMNl;XMzWnJf5kx&&Vsoor;y2`MQ;|9H2(m?W$|ew zkiMH79%`_5#BrYzl`XO+F{{_pK2+Qc_YdFC2|=AW3=Vv^28`E2I8?+t+_szzzk05l zlOwop?Mi|Z$m8Etfvplpjay5p$jKyc)Or5^ioCtun>4`y4np&aM7Wko8r_PJ+O-j| zu2;L!-@7PO!2n?Ijw#iY5#AzeTxTHT2dxSFOG8cHD1}f04suAWzSQjp7H>a%G~;4G zI0vsa^B3CR+r__N-u?=}8_B^a>N0_R`9ck3`xp0`?E6Ux?K>BZbl{zOv+|Cg?a#d@ zWiMzXy`OJ2!xq8AmB9F=d%x^c+bd6PI~?|`PG3>eE_0AaO~9{dsFF1u)L@PF2lIUD zAbAXA-Jn7nVW=E@sFBEIV#5M4k)JxG?t?^o9Y>!pS|pN31Pv>;6bzG5X>kqI3q8Dn z<88sg8LP;}BQ1@`0QI2R2%@!(V_~F|jq|xVt3en^WFTWxWar!{lPf$-s@hnMjyR<| zCMjS^W0Q?!k3H$P0rI){S2#W1oEA9faaq##f?KHs7XY5P!Sbim5=0r3NqxxA^`-6? zxrdi2=hS2C){yOQZ+j-v zC5GZ%GJ~j%EOIf3O!1Ll?FwjXHygM1yu<2jQ! z!Z6eb^0X!R?cmee-e{c0{Pq;njSk)d{G zCkC%%in6&SM896$Ob?HTp(G+D^$jYa#GD-L2{V7;mwM)Ay<}tw3ryEs! zI(crc8rJAwu0}DCcJ!z29gw2Hhfq5VjD3H49-(n6v}hE#{vghJdLM;N#1GuMqfn`@Fe?#V{j`R+Y>)`$CLUe*xDEHFRuHZhuR*I3mgU>HW#E->(tG=qV*e8KXp%Z|jb zn(a-!zLi0ea!&qRxA>>5yEC%b6`E14M(C<`KR;T%&$B}0#P-l4px|dC*OSNjq0Q{a zVoN(E-J&$W4ImSf@@me$_FuDXmPfd@iS14YUc7K~SzV|0ckJE$o3CfuMr3oO$uN3aFc| z{Cq`4l(9~ZusCCbkhvcn=_{+NY2AQv8=(V9$=Ch5ip7!7;u;+7mLYMzI_G_>$h#=Q zEQCyeoMk{iw)8tY#(B~e9ujtKw?1^yl12;(I}GF>&~H>xaVLWSKzMB6gP))J(^l4T zTd#P>2Rr)tS6p1e5u8bt3$YpfO;*m~$zNi*!O32k&myY0 zNpP$NtnJQCR(RE%F~M*!PnYZKNJVbRcK2Y02ua`EeQGVGdzqLLq^{#9iYy}PIa)_R z$;ei;d$5`QNP}j89Y3x^QEP?pQCGY*Nwh@ zRMO=TYB@XRhdkjCSwVc9ayF&rfo`ORW3W(sJw7-zc&+q>Tx>9YIjhMqP%(ppf(2U- z-sij;dM+x&?}53hBDj#VzQ^*9DwaURGYsPd4y0zRQECoZ~%l*Yu-) z95mhZa%s{r#z()JU}^|52Gpg>C}nAtxzaLrKdniQNP}g2z}}o^nu~oqD3iNf?wtO# zNarZJN;Y~7kCiLhnxjEE2MTh-R^VfbNpxP$B(`F^V5Y9VT-KC&;j<|CD!_mPV2_O@ zYOu!I$QkG}>&G<2Q%12FGDBw!HGHWnZp^uR-^4pHh@D)FpIql^)_0EGNQf?5p(iu} za?28~jkBEU&%@{YR6>j^DMv0^Gu*P*!J2DT!!eM3-9PTszXp$%r z$U=fa7(QP*I91)!7Gz+vEK_OYrbA!k0SM2v^flQBr zHX!@F=$8$u5+gY;#`V~aG)WnB@Cnc9`qeI=GNP0$K;IsIxiy%864BfO9eCe3&!DCu zPU#j?DwI=@IM2V%i8RJ_MYlQ|UK@;$oifGa0YTJTIOr>_F}kY~5aZD8@~*mM04#?A z&(DhRU$!pHZqoKv`Wtk^yhT^V&d1jk`HAg^W?gnyv=?@FY8FW3A+SN;K9!J0Mtaw< ze#2($n}2H}o3*6Sk>Ql-W52?_x$U2|4`llbu#o;Y$Fcm95Jousr|UKHx7#<`Ro}H& zlEn)VYRqxQ{{ZrXUaco5H2(l&c3szL-$!k3nxt|786VWw+JAOmvtjJzpufJ2P1K+f z;@wA<&0j^>DROo4r^B{LJ9VvSlt!glH7-E}wtsJhFq1$IiNVW)`h+ET!9hJ`uKd^TkMC;fDoT zm2;<$-`1J6W|0;~9nd@O+n#97=^~J%vnT`raZ}!sM!fTY2=Up2% zpi>>$A6;ltT$t_=Ok270=V~j#8;!=`YDv%zaR^nPf5pfC1aDN@!fHiLB-{ zTru}mC%cab@qr>18Qb#jO~*WLNK$e<#Z0NF9BzEN9rIBVm1EQ$_vWPQSIAvKxyIQ2 zY9$O;DZWUqR2qMX6z`rrD$a=DY8l7Eg*C)W7Oi;6z}|;#7-weFfDQ)a@69o+GnHPP z=7V&p6ip~mtJi<7C=nyI(l{AHHz16Ax$>r-FAf(O#@#VNlHOkQNFO-#HRg+mjV_*r~b=s`Dg5iiK&ZHdlt{LmKQ@udi zbNbbag4rW+!3Lp$87s{WCoKVY10yG6&M1*MkpqB0Jq=4DzBK@G=UmH`Dh>uQ?x9=6 zVl9)Lnk$pA0OX#PB!SHdPM{L@nZ)B@#|JsVJC?WPm^Qe%~p8Wxhi%eKbwwyXqM3xi%T5f?YET~aia^i z+ftLRw(iSm(lfR;quU)&spD*8HFp3Z!1XkRlwHh?Bj9B5nsow*zlH!CfIO)i=9$&e zm%=lSKU(-R@2ei4YORWsh73-A74x;Xg7P;10K6;oWA63?dkNU(PLd!`T>6UlG!YOK zKk&gEXI4+nn_v|(4%roT{J1`KCmi5so#|mD-TCl^UG_b9=BDyUmLjaf#kVv#)?V); zEO0OZ^z}5T<+!jC~p_V;MNx&X>2C6dD&Ne1LLjVt0;UA8hP%j0z3k zXgn?ek66gg^uk=nI9}}Kx&HveM|RRMcF$A5rP?rOS60+VlYf7WG)jOs!0F{x(gSPf zHDw_1dG(-77fTh%ZH_bgb3>9Ac!rq@{{Y4E_t4hfRhI){r%rQ$o~PeTG+JU<^OAON zTCKTBGZ11#WDYU?Xwt;4xZ~n#lF1ZH-7(1{VV&x_L`WaIT(>ye2j5nJtcXi_@M^I} z6oeiubL2l?eH4^w0R$XuPJc=r%<7s{9oXX?O#(SeKKz{TjsE~jE6yZ%BvkZNi+c{PptvX{&pcRtUpMIP31KT@uB#k}|m8 ziq5~ck}?Xh4~}uM{cEjacYw5{Yv>CDo<6sxlM21YkgPmgpG~MHDOz%LojYXbJAw7{ zsF4(@m6$0^j1n{DSC0}y{5Cpq`G#;mwN~C17UUD}$^QU9ThiAvfE438PWU`xi3Goh zvnu4PYR{j~eW=QTt#mS$P&OxT>qC#cfq-I4u>85e{r>=372FNpl|>{!<~hecl|{8{ zWd~lIw;0>^_fxTk7-NFW*d!7C{;^P#x?Z%!fK50nt2xKkDAL_Lq=?rAK-}%0KD4uT zl;nttXl&zFq4KN3+N4s zowJ?3x>t;LtYv#XWh^x5>E(+2^ZR*%I6lyOM4`xOHB~;sWr;q}dog7m7MVvLwfaTb z7V$~hC_vMZjjKbkpzalcRnX_0ia0i9dqSRGU_A~wRXxq1q;I@fRHugf_hLU07$1^oyY*U!_JwA9ZYot@asea zZi1_f=TI0NZ%~Vs!CkZdm3kSN1qU0GfHErC)HdR|M@*fL`KukVfts42jAWBg(W?=t zWDiqI-Nk^K7=gc1f2|7KO%z0stQd`f8;UuXP8?&Va7HO+xM}6U04kq4V%?1HTBx@p-a7gMi%~@4ZKv97~GAqmzNzXp&=A5W4qrx`#d+VgQK!;Gk#`&eKSUF~3 z3b`Deht|~U%8c4Zb64W48AdG2=Ynd?a58EGsW=9tpAcU$nt-4T4Tq&oLogc?jMo=Y zv0y$mz^UACwE!Y8d_^s4_e;oTT=+jO=k=xT^`*k-A#woekAFU$eJG6pNZI*g$Q?Yl%~}-ivH>8jKp#izYG&FK8x~i< z^T!lR=^8ZxHUW;`n;50ylpAucGT+P_ewEWm&WcV{VD3+t_s|+?65&{J!5QoGtr>zc zscrV;RfO?6lr6pwoo34JlVmosPI7-w*ix5Q^2S4Xo&^;G&W_RmdW@d9*i$xA_ij)P zF{tQCBXdN&5|nKY2s@pqHtyhsIV69@&rJPuMH0yDQvr9!Jv~0UR7Q##Jh;>{JSRI+ z7vgxQ9m9;1jO-5IA6m(}xp8zMf6u`u2Y$Zl*0+_wT>k*UjB)*H&nYdEM~iKn_5G`W zTZjxuqfj^idi{R%t(uqwk-5}(Cpa`qnNlcA0D$Lx_Qw13RI-){)B>rJHaW@8X`rgi zy0#nOD{O=9=ts(zdWcCp!biz-F&K zsaAZx2s!81j%qDHjNyWe9=sj+9(8N1E*TJH0mkPvr{be|9S$`EzWntyYp93{$UH*? z?|?^4(5*wWDR#&ljfdCz(dV*#8i4@so&NxR_oSDDxshc7iRU>dBd#d(NQNRDa&wIRdDLCpTcjw_pB@Ot<3BnSlgRe}0LMZ$ z%7WPko%TMWhi!1CHPL_+oE=`A(^8O8l|jH6Q>$}TaTUZQ1@VmJYCqnTx{3R)>MSW! zxhLb-$c{2G{|(_2z|p6na>P1TiNZ zW7F1@wYHWCa-?B~_#^t$VoBoY2w~H2em`26^vb$I47X2?{duItk%m%Kf>&d{YVt34 zAZXW1^PK1Rqa=$Xt4ozFjE&F2oRv@jLTWm)2BGEC%9fHt44UKvPIHZ2GsiX3+{JZn z+E?5>g(>)T1ZrTXIR`(dG_0_OZ4AI?Bj51&{`C&}0Mc@w&7bL?g;F-GE6P~Fd_HD=>ty0MMF#WUI07U@2dDwflpzVFyk%}_UbCIvc0~!+iYMS2Ir>!lD_5EoI{yWMli(i^R1nZ{6X} z=f(BC9@gu={J6-#e|{=uI`oDZ0l6*jsYs*Ki1#b8+@IXl?h33Y8IG|j+l_DK1{PI6)P_@i$8cCd$!8spawKo_p0NGq*Hrf8a-m?2n z%kdCNr~~0S2Xndi*QR}~`xxwxXz$+USd|HFIV{_sgOA$0QNHe7k|vTMsCAu=SPXyf zXutffy^U`1wj*<|fM5RrwpW(>JN7f|(iviVbRH50S@!<`p0vl z2mb&)H`yO$-Hl-mpTa3Z+0I*kTx&a4h40z-X52CEZIw$7tWMa^{8b0+)3Tb-B+w&i zCm)-qmx`H-?8~v^utXNgl{ws=I%Mmsk7D~G-2}$iA<-qsjstFs z7L7#s_VXJxb-%D(i`n-fBezFZCj^G$-K)<&TvJ`C>}O{QqR|2=CpgL9)AM`j%f7<0 zgR{||9WJ=iGJm1kn6d2mV;W*aU{@dyE_~|G*qw`ep)MiR&U${er~b`}a$=1@Vb2`<&S`6|#*Rs0B}R875e3LY&#zjUyEZ00{76E$86f0refg)YZCWTFNEu>u zfyOBETwB8s?+U9f#0|H_W=uuQW#TyF2UP~v-TTh+V5~p@DCy5QJO2QG)!}Yh5>_=; zz|*UeK6MtdK&nYnpfJWW(43#zn7k{dK*}&iLC$mVtgBTEavexMEk}H3_1c|BQ#J}= zF^0+N55Lx#Ugt;fmo1(782Qv(SS0#Phe-ni(;i#Z(clo3Lz1Hhl|EF1!8wq-#&kK~ zaC5##S|9r?PQqd}4D1OYZSkRqkVeUYtmF)woS%&~V019Z-3|^8Gy45zi*+hZZ7e`w zkJsH<)`RfusDX^}Y;{navLumshg0eEs$SU$&>Vuz z&OrTlrS4jGw=qHqV4Dy}sq0Dht(1vv0|Gpp;C%NyR9e_HA?As+vk{OpoF2UT(sIi@ zY+*SecNxbxesMCvyppg!u1{(uCX{lRK&@dQ`1N;8@rXWbsbSMO4J9^Ub!0B_TosR*1 za6JuD*4d>}G zBn}7zBV(Fg=HLF-tj<6i?sgmR*ECqu`IbST0C#NUd;KU^(ZcKAkTV|xd=08Q8RT11 zuHd#y1>1@!y;eF4W7j#a6!!kj0gn4;K2#{I zd)vb-&-wVrBN+0dT(r?#qd~H8K;KWFJ$S7y^fE4vSY(mTbsP8E=her`EEf2A{J z3#OvvfOrA6=cihyY2I5!3n3w&9ub54)1zfR%B!Vsy1jBXjH7aa6t?Pt@HE8`cYz@ zNwsKA1x5~c-iss16DXjbpq?u61_}YIRU`x{AY}8Oj%j<)L5^i_4tE^nR%S)5^2Qc5JcNYRNH@n<}6el+O= z@cID+fsBE*WKPV{_hTaj2!=ZDl z8v~s_`f0ZS90GR&suND&5#r}<>z+M8HwRbIu0DADtCf1AP2VXIvoe+AUzI zZCUlsaousatb!fwlHZmjLSTXuesy_ zx%kn46kt}4M%_loA6|4+p4#RFkgz$%F_FDYniW^O04JfwnpWxMvbF_W^S%JhA#ZOh zmYcmS8)51J_tmHGlt%C<-*&;q-c;hG(zdArmSN!qy)#T0e-w&I0YTsoT8PUmt=?xw zqA|7y$E_75%dR9C>L}m>ebvmNl&cJbRX@UyY@BQbc9WfYw(_CdiB;UY0*7@tr2A$V z?=0oERt2R}r+zc>pmq;quV!{^Hc`pqMHp?#+vD|`aNElxvpWz-06!b&ruA@$icG8m zoDsjTkoVQ?;Xx9Z$i|;s8Wq@*H7ytoq~wi2e)VOaOerLc6C(w(4KWL>svR369$VK; zP@zUYoDo#+R9hI;akm7}VTh_MlPC|XBOmKk1qIPybFA;b*OfNxhzqg6J7%Qsu{)8* zaY0x|d#$6%AC&4p-iaJ57;PgOtC<^ct$=yX{{YsM?F*4@q7Zn$jPIUn z7y&ebNf~x*5F21Tzh5eNv~VnIu_u-cKm(sYtWnY!CwO-QTT$~ZQ`t{9P z<(*nS>;l=qQov@6S6YC|aj`i+r9h2yj)ROGVt^#>?o4JxAO zwD3ydkTKuNqQ>N1L{>a#L$Ut=9McUPjih&lWL{1={b;WWNgkFu!Q_+us3{V~Au6oO zgLA7q4mqo|`L_}(>f91D#Y~qmC=A;Iai1#aX75LK}Gs`JfQtZ1Z=K+m5Q%czG*0VAOY85JuYJUG~XQ}yt!LRCPO z!!~*fnFzti=U@rumi$mMcT9I7T+$ z9kBc(=^=&1GHOhjvK7Fz0foW54N6 zLmNjTNXH5WPWk%aRqg_q(8d8!+cr+w_~w_9P1|ada+{6ukUljQ3k$nRBzl>5*qr0% zkFT7VV4C5sBmohQMr0)F`TqclVWrast7Y#A2Ylmk&p%vJGL~15QeeL2cF(*V`cWr& z09XcBQ5o=oocwcH_a(zC2J5F$8+);u9Lgktb>#s%MprtI^xllt{{V(u#~{?CZbp6m zccrgqlT=fwS8t&WgA3TtHhoPBV@9=i|?x0PvHM zjsF0>1}BakPc9c34mEM*`_aU)x`S+W9zj1W?^7I1?X7@P*w3%`s+$tm21zE?2>iG| zK5CZ`8B`#PC0kOG+2hkR2U#T~$r215&O!dZw8RtJM&URh{e64sxMz-Bh{+^!4@w2Z zkE=>YmOE!vUI+jor6HvGe_A^o^pDI&)Dv&uDy$SS%Wco=Rk(^JgG(bgQLxl^{b*J) zYm2-uggCr>acEb&`@vB~1tcn!7CVC8={&ctD0dTT7(ld|`9enAfC?Ow&m;w%xbmz*V7$z>= z^n+HeNAnMG{{UKI1n$_W+@1*9r$!j41Oj-^HAl9Io;f5;$h)b}=unR$Pr9YxOzVB|jmbSX^RBprN(LCKbTkQci3kh>f#NDp9_-MhiYt;zO1M+y z&VDp#B!!Dxs+Q4#omtM_bhOdjcZy?>L{Ra8;_2u0@2ZR0BT#Nmyq&S({k`Ic+AMD2 zRB}}b)EhY?%ZjU{^T4ZbAd4Du!*fsEOEs^KN!8UxSQP@Q*J9!?;rPKlHuL_Xtc=jR z%b;k+4j5qd&puU$?M&8lT9WaC#V`nBGq;s~b^X5fEVh2%U&65WN@OfNTC<(=&3dv} zT^x*YwQ{Q}k`6ZFxnEBDck`%`goG7LH&dQXS_ou$0x0ox6QhYi{=NYIqbX6<6V?LBR>gwv1ATT6kc~=95 z$l9b80|j&InuAeYR>;weZfXh6^(xp_82rMkT~nR0UDKN7#zuA>YmPN+cJr$O0sjDq zc~wF5u3ybwN$hQe{j2RQrKO0(tsn&Cd`{;T`Y-l*745IH)_tAPA_1FF{{D65{gVW+ z!l9TQISMcicK6qIU72f}hqzo7BrcuC{^LwEhTVh-Hnx!EMltWs^)o?qWL26#xd%=L zXjc}oO+0B3F2o%}RsrdrYdUn6*7!gRKA#tL#-r~(>eYj_EtUnD-@72=NzTTl8cA6m zBcREa-+Tkp<5m&oMz(fVBzSSRA0O*hlFkOUDzX4q#n1Vq}j)e-@=v46K+S zA24_Qs;O}-Y92O8FvGmb#y0i(+O#L`OC++gfP+xZetgjG8X1{e@d^TNMm;GQ?rkmZ z1d^O6TxuZk(`sN|+1y&l_Jl}Lbd2PF^_v^bE$}3MU`vp9&f8+Av;?xck}$e(sjHuj zb(`GUqi9p9+Y$Jeew}`{tvh*UNElr{W+zgp17Xu0J!xy(=UkN_G4SzCERnsuOneWF z=RA3uQv3DT*hrz_8B`mb^gH{jqqw|A@8pSOV5M~y zRREqgq1)V%D+f%KZB8?vTv6{kV%pl&%OV)$bDnZVCYNmkcamIprcg8jxW?bDY{fik z1Mboj9ZAJ# zS)rEYr3^5{<6*G=)Xl><4Fk9!uH-M*y0R_PT+eS9SqNMZHqYxy-r7NFnWRiH7=IDK z&UWYP73z<-iS4aE&wFUH;5-a9;PQHJy?%UL11-}8IT^_5Urzne4YXa2eQzn(E6K3j z72AF};=a4~Z?sYyNTPBUAfs~G$*(51xVO7v(Xf|DIbaCW{powY&$d9a7Vw7rr#yW9 z{{Sk>J-KXVXd;VHL8oT)^Zt|+neHx?d)*3|V8^do2Woc2aaji!U^HYO%gH`f>u+hk z)ognzNhQ3P9`ANKNYZn^@|^UqP<^3&;yW+!azohTyqaYn_JOEqBd!@Yub#c7`$P7N zwwSHO^O(sePL&_1QC=-^cP!3WyA19|c{Nyvdx(eTCm_(=6=J8R)dy-Nyz;)YPXebqa1;@Upay}gbLbK(eNR>&TrTKA8z{{Um2&-M_v5!=N5%I}wKu_M*%*wA)o zX7*+nTP#qrjmA!`{Z4CA$k?-Yws&0$vf%a4T5`hC?xi`}4CVLE`|ambJU8$U!}fV5 z-SVS4di39ZKdnz@TT5#(d&{uS20z{7-@)dzB#tYhvq`#Vo$x^P%|+F{w5lS~Kx4P& z;VHlxg^s~Hmt0QB7AI4`%sk&M&r8F0sNt{sC)B7jjf}J)SN1v z@=nyH)axwC4ZA2Zc#Ct5`K9KOZKoOtlTpsSdwi=(+rM~#DWeO{tmM}i-rg6MHSrOa zT<0d1f-Aeyjd>S#gZXs>pFRyf=^Dj?fb`pH%UcZwONk&Wft?z&o%cNXQ5l@51UT6FA>?{eHKt zIpRlztH-infvEogdR{nzjxlcgpvv{frssOj{3YCXJ>y(|6b;ybahfgV;4uQw>2(`; zh7Zf*K(#=1Ppb^rJ9PBtifqDx+AzJ`_yMrza(eT%8?#j*m7oKbEDp23sUOmZa?Ijb z6A`OyPIIr1m)D(T+TEq4@2FIVV3FW3vIaghQl} zlZP$I_h!28@3?=${vm%5=vj8gar#nEVS5%`bV{ziBY-sLp1aj7Y`+a5lJ-%d@)slX zZ{!VYSt`D%BYdelo%~yR(beLR4c8;qsL^*?o(RE^`u_lWT3K$EKwcoq0K$d)NZh}JnHe8R1rtGD>Sc$xk4WBjGd?}*pV`I<*o$8E=Rh%#8 z8}G=W{ubH7h=2w!$&C1aS~!h#g&+_rG7?P+H_|b`zLRyiL}yk>WL)G7E(bU@0(6lO zG-R9%0Q`B6-kpL~mOV?hHpi7ju92wL>ywVS&f=B0#F`j@vSY!6u>EKWVi@OEm2wV9 z&-JFucMg#=0$Ai=ew8&RqynpqS!uoiKgZZVJ0^rbBA zVriKmivdp|`Tc$L!phOc3=By>m>+(_B+=}z3^5o{3%agxtCL;+)`gQ7ERhx6fduXk zr}?D&O5k>Zf5FXw23YxR&i?>gP^_-4yCT!NR1>2%qQfJ^2L5NK?@N9?`(b|$Y=8vq zAaQ}emfn=-XZC&Vtih#IoNlCps1J_ROWx*t9Mr29v+?d&a4PF;G)Pfn+rHLP(n#_>Bc zI`fhq1*I8n9^IMgsts$Gfcx=)1D0iGzX$44B*Y=lW9j zABd5}4TzNOGi| zIqQyn)oaF^x-9LZINuo<^5@Q$x1K>Lgh`ZT9o`onUmCU^JN1%#q203hkSG{F{{ZPk zWU`7`WJT8_4Nh`)&mC%(mg_W)BU)n^!e%37(_@;jtq15Uwk{l?;F}^dO=~a73n&L@D z`iF~bW3SPm+aPHeGip#kRV09aTDX70!`*-vynJqRro3~vZX~t=o+c_-mu+Kwc@6Pi zjr+#^rVhpSUQ26BzV7Mrih(oJ)MCCFzPpz0<>!!+?s8A92fS^!5Os_LDkk~l~74${BYKc|k5RgX0azHyDO0&Jq!y z!U2FW&h%D|7+{R`s!5n(Iu|$_D5}M68b^&7$<6~D3MdCT^{O(kn2@_4=FcArl?+jc ze7_mT8_=3fPSG=I0G<5y;-)y-H+DtJo;Uvg02;DL7y{uzz}y|`pw3vXkR#+dZ03eq z8FG_23`q;WN;l$d#J$Otb@@`=q1~;!NTidn)vWEmzP)AksqL?2`#ITHH}^B?cvO+$ zY@bbrE8^d@{{XiR*X{1mPxezitZ}i)C0kd`1$xW1eWdMP)V*uFyQv+|91MJgAvMFv zi8T`;-Mwi2o!ZydGpvx@va)9!ZS$`%_BZW6x4oUXX|3*CF5!;L(E6#buD-=S-K;&T z?rpCmG2N=*L~_~n$UrOKc9)`iV=5f80CDS@Wu%fxSRlk}hkf|l=4#rdi#h>ib@1=G zC*M&7vNf|?%A`qx!0HDdDz$^bAqo^1{$rfvRXax5yAq5dbK%I}&(^!L)WlH?s&Wra z_B?*{+pLKzm`f5y$ z)4twr?k;7p?AY2k(<4??@9|CR(_OFa$Fx1G6UTFZBP$Zv!u9tG!F#)wIqzT3Ij8$C zw>w6`i$!?xoO8{2r?9_keYe=1rY5_ZONfBRp9m-8q}SCyWglvmp4Qp7aUqUGQJBd) zdgQ3Dcy=UW>JJ2kotax0$4!p@rkW;54|4*4+F7tcY?3}X`BRYFp^Lng0AQp8oz&76 zR>C}!Pj2z5Txl9`cRS}4r1udmwz%8{AONJ2SZ`hn+P>J@`z0gX-p)d~z+LiEyEru|-!jYWkZ?BarEOV-a5`p3;;ApzqDC1@U+kyece_guMLRI`Rk?@McAZJw? z+Ay)?KD}G#&WH|NfZTE^X#npDNj3~MF8R;Tjp*^P$W_AtHz4uwp-#d!)>N`B)|Z3 z<^F50RS`pJAPz|K{?(Fil-!t1rO^&bu1CLqYgX0mFsO~jC7LNEBx&$~IOl!0q$9GqOZ8-w7}#W- zZh7_dtx(deKlYHJo5O+BjyR)Ewrs3Pj@E-9xCF{D}N4P3mlLJays?mu2>nEiLs|<6=8I};(`WF!+vU) zz2;I#{6quc2YmVe0E&xwrIJlgI)qb=IO~dH2a(v8#(;bzb^1A}RT35~ax;;Gj8dr0 zZE|5PsT*|z`FX_qHaBoa8!8Ti**mlo>GG?TE#4*5P*(Un4wSZV_#4|Oj& zoX6e?0*$b$Hx$8?Duo_5Ju{5e@-lvAptudDyCjbY$USpQ{umj1%>`WN#1Fsw(A{QI zq+`R4B$48#M|d*DcgIuBP?0B$Fxct$8liVUrId!$bJzO%Q7y>@n1%{ZQ=C;~y@eFM zyx?)gRWAh4sf=PmGo+p?K6`@{;n_SRd}n-~zLdf`%K}_Vr^TEN$6xLR3hQ0NcQDE~ z{J``%_A>9TKhV>6h^Em<8lEluvFYVVhc^s~ z5!?)6dK_|htvF>6TdFY*z<)0kn%K&%9$Qgw5j+v;R_zO zZAb=G?Zr$8s+y1z*(CV0j=p%M-Iin#7x5|29PhUW;Y_S?nS-;dFc>{I9~!y0Mk>XQ z0nfgLHM_{g=!B!>XVx;+x+MGm-z9cg1I3#m}R+GLh zft461YM0cIZtifJC6v|b{m{+n$4Q#7qu>MTLj~hyNX}5 zqmp}8F3ZLM+Z=7yzDWDR{fyl9=V~`=c2WazAURL?@z;07eC6#2*~hea%_!&W9&$w=^cUn*boT2$5)Z_wo%R+O~w~niR=Fi~u+J zpIR-Pkt7NpJuIUHXCi@nb_KYK-406;&sr_0x!s+C2bCaTZ||o{E|ItjKU(F2F{^LQ z&gYt}$sq(M_v`ENsfnK|CIMTZt1t}25_UZeQsD_@C5D{gv*k%l?{9L9&6LhCJ~UXT zj%o0Tmd58lI$BlD;EOAObAhqOKE71STa5sh44~&abLW~?^5*K+Qpk?#bAgaHrMo&Q zOr}y9S0&CLKh$UZR-b1|S|n1+cHkeCHdRaG-;w83irErZmj_dvpAj_^B&>V1*$CYH z=xmd;LqW?UU}TNglUASsB%gWMCc+d92u{mP?ryX!MjiLC@FgigHQAsDeOCJ8lO-{b-D^ z09i&49Gqw8LXO>ImMKXkv(G=VtquPG#X^-~;W-|aR+SP!jMy!}s|+`YV2?jKQs&}F zZgk@@u;U;c)l%$B3aoF2Jd!@WD3L<3va=Ds*!A=M{&a08IzN>9ny^5rg&c4*P#83& z4mPQMTPlsZ{{UK?hQS+;O5i{`26i5G z4#qSr$3E&_NTzKpl7KlN4D($Goe5o9vfSg1z4UBMM&}2n)e4g7V$I?`IL7ov1ypJ| zBg<;wsJUzb)YVML0XaJy9jJhVTyu@8FiFWgbQLu<6&UKBZKQexDkV> z9LbTSXP>R;YAzpa;YT~<=R8#w%}v+hm9pTBf=x7Jjzwt6-xwpxfv!u7a+){X9mmeG zVeev18VCqTCnJ6Nr=o%GBn+;j&#(2ZHH;|1Ks1f9$I7j(K>!?s*P6Qwk?*L$18-Uc zv7)mUkOKJk?Nkx6uq!8r7%DpX{Bukqogfwj`P4oGu1MVDb5dVU*gR5qw;G_3A=oM2 zz6JZ~%OUo<*FTV#0x|ypdu)7Y(XyO*k)7*`45=rBQu$$pYm2h*M)m=`U4Ckc+1)eoJf|Jg3^XpR_f!hpQRy_XzY*1~W5#2N8j-%7} zJJWAGXmH1WbuV#q0+7v}Tak(?NLoEfgMp8AbWnjIeMcu589sUQ_f@53SXtPDJo8K1 z&NHZihTlAzt2qUZaC426)uxHgmeZ(@t+%SjZs@EA>U@TCMR_EKMGQ7!jFJG&Q1``_ zUAZ8Fc-+uKIYuM}()?s_f4wnpI>?{~@ncWMt29dFK1M+5NZZWRX&@NG4D*w{54(-k zU%c@Ech8rtD$+WzEJ0DW+2i-AYq0KQRv}0mdHs4*k+iaf!vYWH-ygZ=gWC>7Awz}N z#x^37?Bd}&wqvJJ9PdnBO(nX9Bf{H)57$aY?r}Utw$vDSbJCcy?o@zt$loVn>N8sj zBt|_yoDsjRBP3YXo$f#ZfCJahKU+~Ol&sQ7@~aF6^7(I%Dz|9CsvMys7&!+R{b&}0 zxm0GCJMoS_yr}y;EZUh);GE+hudO9-GC?2?GQ=GHXP~QGO%={Um(-)7;C%l8dW}*= z5R{NeT#fVnX)kE+!GJ=nbrFIOzaQS0?Avu)RVYE<0FANw^ID3bH12~|Go7>g*N^*G zI2Ljyj0_T6HTm85fDw`c?i*>=TorQ!tq zztX(66*?IXG7pDtdin2KP!e!kV~xgWfd2p!0Bw&y=~f^Sj+C^vXjr-u7@Y1&{=T$G zODhy%fzalzp|VLmcFkD%)GCGIyGYfZwN?x_Oyv2WS|vfKQ<1Pd*A@Vr`DUoZNT6dN zp1V}SihzNRcg0^D=AaTu6*(BsBhrHIBzA>PeM=%u=rBfOd)J306yMbKh}=|qeZXzxjrqwdMXtFg&PCUonD101vHa@eJZOOl5oJ5 z9$%+CRQDMKGv_?{&}FqEHUY`oZNJT1v-G4PaslV(Op+86L7G+WiQfm;2CZ!vKyZ0J zd{IvINdOo-k8q*DIA(0`*QFk~?Y%=NZOGhIG-}+8{AxSDBa9sJQ5s0EyJ{6OGNRRQ;TFhExIF+o2~PTTy~=6D^UyizD~-p(GM2$V-uo z{eIL-XL$x1L({DqG%FDr_uOuJeCsyh%C@H1k~4#Y^}QHh4N>AfTy9%^{r>8ki)Fl& z$r}aZIrH~WQ&p@*Upsnj%^ud}aATRq0Nc;>qg%xhVJbd$sJMZyKc52}k3XFWlekuW zM7KelXWVFZu2xekgMu-$9CY=o83V{<0F#}UIQRbi(^AD1%vsoPoSgpvddBS{;ese2 zFXlPqeCpP>$r>z@=NJld#8WX}nFACDbK&34m`0Kabxa8-CjfEjL$q|B>^Wiic+Xwv z_ecoQ7zZQ+lm2Qj!EnD-{C&cqE@bmE-2tN9{D7hyZdn!ToE>BzR&8CY{gy?tJKS+*{nT1$9mMB=4G0fQo%_ zvaTBkC#SCdbXX*gNmspXwRAOGxYk7?GNd*>8+w}0(9nR}bO2{>-mf8GORF$#v$q=x zyn&{4{v&vCwmJ0Xocug0Km#lQEJ5a=!y!VX<2&ge>q2>qQFwq-4#8XXs9EB<84+q= zbo2G;O~Yu?#!j7q^B+d6*2tuV16NJ?A3uE~-#iRr00YPwImf#+K<=p{B2Z zSy9U8P#OC9(k(j3F7PJS*k3AU7Dd}I!_d3JXt3h+ocr68(XOj)DzBejy5}USl8CA z3kf4&Rku5Tb3(Vjk|G4ENFxJ$XX|?D(&kx2s7ix_k_9sw<|bJebt8lE^P{4?U~#03 z412%DU9HTD6HsA{fDb>d4%9(z?vj8QjE+yk_My%Su?x9uka~S_Rg+U&>eO8I+tYmS zONB`WLXgL%b5xdDBgt0IjkntZoUphPqbvB1KmcwBIH1V{HuHFLyn%+_8&X$CP$`ly zIXoTx^b0F;S5B<4&ivydg>w|D<~3unILG?X?WI`CxH)gif2ZqD#Uf0Fagw>{JwHk$ z4w53qR|CwRojTHzKn2G8sXKK$e0?hMDlC{&jQlY`y#hc1+Z^xH)~0Cj8OGaZOC9$W zRnsgCg~)z$#RNm510eyi@cy;zRxGzjs-)z2fjj!~SCy28R|i)4B;)opvqtX1c>vHe z*Kzv!e|jR^10qEvCSHq|9$fQ6yNty$>`)RwQu+S1U{O*jWRoLSINSTyyio^D-&|yH zGw<`DNps#I7UM`=vUbm)rxgnoW>C6#$4cp21Zg>3;DJH70!C1q9x@2?_tDV!!V(VO zLWU%0fi4$F=ngT(b4Q@+Rt4K;C$IFS{{RTmcbFjwKK}sgSAq$m&Pj51Cq7>KnPe8w zHyLfPPhWiq64E0po%T671O0LJwOk;!lUuPNfyo|pW^E~gr0Gz7eP|+Cq#C0N$5z}7 zZ^!LTB!S0=Ir8gDU0yx3q-YEdFavS#szTE|-Ro`M56T;-Pp?|6$aNHbfg~vn{g3ZN zb%k|}87BZ0IP=>S2(HWo#p|#=55GUwnv~3o9_5EDLXF0F_u{JEqi9$R>5ct*H2LaW0~KBZ1IeEm27 z07|?LOnR7Qz~6nm{{XFWNacuN7k!7F6acG}?=%bKFCJ9m2Xp07XBTuzXMH19*vIQe zkOfnbkUY&G%DFP3aEVic5=g0_;aG*WHZJm$9aP&jBV2AzU91 z7~jsc>}`dt0a%=Z4suR^U$0s?nF|RC!kxX|`daeYZzqmb845Sw{L<&Xg63GGO!!wG zAUx<%EHa>WgeDrGvdFxbw=Z}Ib|Quf+*3YlW#-L(lWU|3oh##`4T zJMUJ374<^FfyQ!MJ5<0WwbU2})_g0FKUyp|Vo8ie2q5#FsM28+$bXb(kxPR(bptHK z;A-Gi4y$vdj11~K?fp$s)Pt$NGO;HCx7hXlesuI!(X66I9xMaN*!<~+14*GWn3Mh` z1bjVcDRbWz0SLjy%n$lfU8QQJZQ(9ke3R+(tr!&|!l4-;5IW~~YPLHPL^ zX|e_Y&V0>O#GQ8@rmj>Sh}+hbOBmMZ$Onf`04F%37>3x`XMN2pIMop<`alB&f2|7Q zVQ~pTFN`iR#`T-nt#K6dNh@UoWq2EZue!Iy#zh4%%G(eP7Yh=S2HE32W|X;s(3#MJ z`(sh}A3sXVJ@QCq$N+FM2=~!ec9E7dfzbG|(u}Zw5V!!b*yQ95@#pJAj@>)<)CLJ7 zA4m76QC0;RCvm~zs|)@hK2?ybV0gLpqD31<2-lEXBWzR^P#8$r7|Gm@Xg1MD8juTW zVUluusjL7;_o_;QSjvI{=y}BgIHR*b#0NcCZT)MmCvBP&wlYrJF67{G$@kPl9A-CSr2haY0gnFfof&1&s=9h^2Ke&pQqGSXh6f!*TS~g&TYpkb zA=*9DTt^g)aEf-pIom#dlmRG&cY$>zm>C0%P;TQ{jB{sFgPqUy&(;kyYi|=>G=Q&n zr<@(}@%qJe<+Sb$O5uY8fq}=)t!nLRu_TysMou?5>+{;17dH1ORbMNdZIDf86gHA% zDPnRmHa`63jd6Dvm1JekMgY#k=+{`?6Lm366g*(&o423w3PA*M!RbbfgaHml!Jby}?iDojYq0$aApmaO)Qo>kSk%pkdAd)xzX!d2E-F2>=Tn=z5_Yd4e z&NH7sTy0r0$YqXHorj3*NBHZtY1`XIAVH0Q80M<5Gs=tx`?Gv+EhI1w{U!;D>GDl?s&5gh-xZL~?r|(<0X*8g;AY^$F zk}JC~woSb4sz5g1f$3DZu_nJ8INu*WDxyORtD`Ox!hc@0W}e}cxZPWI1b`3g zOSfxWLi#6%Cy|F;_WeK2LG7z~oTx@e;9 zz8_mvZcMY=J0=ukd>^CIso6_6;n^?&2O#7SbMdF*43M)T6Q~>zas6m;DFtU>#HQE{ zoQ}K`=~eAn;E)9<8An}M^5U~%wUTJqDvsh6Jpx!3?P{A+k^PtZO^_ ziz|e)xmILh=hn3h=39~7k%ixpxW^}YVp!VZ-SvK6TI!hc4_@-LnJGOQ4Y25Uo$8sjtib9dsJXb|3BC9wG#A6+Qe^F4k8<*Fq zSPTqfed>=qND8*)a6uc6+BEpI)G?RRo;U}84LKVR=(o0mYv+NG52CC}?$p`Uka z*d_K;vdT+<(5_U2zTfL!@m&QK_a#8w`qaza#cjUG2bVRPl1C|C=;2j~CppL?r|DXK z*0QDWap{hpd8nKX8UyJEZO_(edv;cs;EW86GNc@_XI;v|z-niRTKW4};vN2MmQ3u%J{BLig|{`5PW%ZJLw zPdUiPA78y%!bzSn4byNi21fKow;%};OfUo}BO~=S2-9~V9$^?9@M`miFbLL7ur(0B z=Z)*4ya5D7w8%PjJK}{SPLqI7f!oF6<8PU&MujfYT;em(Wd8tKYU)Yiggj0G-(~~g zJhM{`4sngDZ!N{i3hWeg&inl7 zqzBAmhue3QK$mx)tsVrqW2ovQ8|S7!y%I}_9s9VK zd>o97kMlr|7F9j!2>JpT<7yOa42lk|2Ll7I*QGQHBt<1~>bM|ppRMSj944sbNcx`+ za4M0!i*%_dE?8hTagT;+nWR`@E=I$k_tjO{5=i7{0QIYE>z#o=8cJnRHn`Y#j4_O3 z{c0NWXbPl}p}_4(>4GLj2-B!6g;TTp^i@UvImOkYb zR6BufI3b8)Kks6@@Q^l;(GnMovBt)VbR(+m`A*)IK=$(&h#ZmmfXMx70tAS6I&x0h zzBLm^F+t+hq~x3dnu|HniHNw@&Ofyl>UFlaX=K3z)C~OUiW1@>K9Q2U4E3b@`Jj?U zX2K6MpNH*B*v!&P-3(>MMh-yfif%niJDuK7eh0pVd2=MlKurh+;E;ONqMS)-h>leC z&ImndMi!Rc3O*%L0VH$AM>T7!!m=2kY{;G*XP!41HQkuPuVvc+)h> zb&wr&=RUmA3?dfRhbMF8$G_j!q~1qwZnBIP)rSMF{81q)NS+1I8zshblR%bp48*dQ z2ROn106w0yD?Zb(CPXoA^vkgtS=N&V@O22B_$ngy?sz>tM z`uWnyaSGdLXDcQ$xyjY%`eK*t+3rsBxG{i2vBnqQiq_R|%90}zy1HP3Y5Qq}>SL2< z8(^Ml^2B9Qhadn)ug^7{Ekj(N0d0<>o;UK&f7Xj}H+Z8;X-wnuZ}sV2EyOOeYX&qJ zTpp*+vPkZ4L!%an*PLSnj(q4h(@AFtn6Y4_o`B=ZnTxeyy0sBTx+HD#$3B@fwY}t) z@R;NVBBYjMzrKk5w*;k;q*5ChI6M#A>(Y~+@;sbK5kMM-4<28rtiSe@Pk$T4T~L4s z$tPo4lXjF7LaYm5k~5RH(V;cuOwV#(3aS?;J8jSDSskz2R_N%Ef@9T^#GD_Ynk;>- z+3^u1)9DOwMi}F4)1UfP*qV*JXHyb4@pbFQ^d8psh+CNZf~s?XSC5ety{EN_`1rN4 zk$~}#G~*cQit=CmCb2fet=h7Yp6sFD&wN*}J-zKXX6(zR04@;gADd2i{j2lC+X55p^{-<6*SkvA!`pH$)UeJRrbec_V;J3XyNuC2+kO3=CrK4W;dPE z-c4JBxIQnPc{+CFP8U-W%Z~vBm@q4(oCr=#yg2TSX5xX7!l zjBu`+PhSw)rOFZ&&h4t?ZJkU?zlG0yzedx;`*;?ovf1Sg*kYS2cu>*MET)K4|goPpg<bn* zvytaT)0fqqh{ih7uW~JC?#dF4xH;p2S7-0lo-7pr$GpV{wZ81W(ORm0 z7I^M5JVXUteB|D+ruzW)sRnlJkN!@J57?)* z_c_I)s{||uc^S?J{ynQNw7$wcv9YpiyN=C0%zv4?*#7{dRvqWD-M42Fy!N_K@A=UF z#+6@Z`$JG7922^YOa1Dx_8(}^AytPA0Vl*dd}tk^*%#JgHku6~#>Y@O{c4eReawgg z#j8=R02T+bg9U}Jd$cR12rz% zj&KGAM)<`=7T`t%W;fJI<+jETl@A9QsG@34;4kxP-`!Lj)OD_|t47*ReKAnH?lLRC znz--3&Y)D0gHcn{is8*m0szfcrz1`@@1Ao~2InUg6%}odI~s)`FeGOkD#YY&c;6N0 zA7O@L_KDfi+n*ab1CK9S{Sx+O?ki5tg5GR2jsRxpr=RU!M+k;MjU%&`##jOe$9hk- zJ5t}W6z3l{p)9 z8xDHVp`BKE;gVc<1{)unZT|pTz0H^+8Essn(zV>#TOohT?>&>}XdRPmf1Nv<&nXYp~c(Z1gr zrNyB9NOLfgI3Q#4<2&a#tqT-Zg};ZUJnTu>51mEHP^FSBC`Jza{=W~6QqIa5URCb! zhk^+s$okS`_vqubhMH?|I#Q-pI~;zW3L3<$#@^TmSq7p3+ska9t?07cMPrqT)+q{)1~Zf8 z`_+<0mI$Vm#B4$2WF5Jn-rYlL@yBW6EPO;BNbA48h%Z<0al1qUu+lgD+;KvCTX{c< z!Bv}JLFvD*#-czFysajsjQ9pWH}d5k zuo5{3s2IlmX&bBAUO=(9Sima8t}uFj_4D7}+q9O?*m>cMw1#N{Fb7~d?tRtp{P@&# z`Pb3^0CUNKd-$d!KxJhosXpra65am*2_Cdv49Uwbz*NnB3c|8R<~bEcrrhu8O~KpH zExN~c_>I@afzQZR2W}+_wTnql%o|Yi{G%1>yN=SkxCg$On4daVS=F3$s-HhP;5H_r zx}=go&mAf%#Yj-cVBAy;bvUjY*J(M$U1Day8_6GhZ+laJ95!%-jk%Dr;16+N zYuufS_g?LHo-Y3YwBg3bc)9Z*?sG#kd=11<2`MZvB&C zV;eDGt_jj`PgA!)S*0gl(YU?LY|%lsTW$8QB(Uu0^hol$hmkqc)6Ryn#ceK`ShH}>D`i zK>QO)BV0$~EIcj_IqEY_+r=?}q=!&kX(JqYY--)z#pui(p94mnq*icC)$mict97Z|WWt0%-U`Hq4nyipZmS4jb zRy?bKK>5%m?MsO6#h2j9k_Zy(7#>@EXqPZcEDGAN#dMGeIUbwTTR?3Icb6#qoyWtP zYSE0rnVjS{%eciY6jv6L&nA^+bDZQ14^PsEYuZsrjTDcl=W&l+_oK;kZ7MVt@_!pi zE0TOZyY#Hz;f6&QB1Vk(m?i+}j8snz(VWi~7y;o^jIT~}zgjfRww8-KP8HEWI2j6a z{=X_Ef=7SZ&pa)zO~51&ay~Q(q%llV_5mvd{JMZGw%uvV2a7}@EzE34)#LoWp1e`+ zrMGwPB$N_*Za-07ZdAnG%&4)&;l`d1Jk^mBSbOOhmmD0OvFHs{Tf%NLG;C`_Gf6-tyzdp_C64jsx?|F>723xKc-|i9WZ>r~kLyO3=HKwq&1$V2 zk`h;Qk~-6H2xFEh8Zfd<21#t-^a6!_q{^=u7zAXT?0os8ZX&q4xM=?X6a*{zR1eHE z$UKZ63#w2TZRVY&- zv$@;*R%c+`x{J+HnaZ}HqiqZGr;_C_tUnPL9utlK0F-(9&=N~{?g5Tsx#BDllh=B2 zpE->gUL#J9d`?1EXjGuKHIeVGf7(qbG zv}bY;P3ld@d{#7VARR8GlaufF(l^T=;sIH4i~yrKJNf34jtNqBUi^~4ojd|h$IBGo z;b#`2Kzv0Gw(`L8&(LRvGR}{H@2m4?gXc{>uv8I< znS+wY5Bl>~w2(&%TBJirA&JP_e}AvmXr?P`!l$pJs8;jA z17b%NCvrg>5mn9x%nmjpxr!7e#ud5LXdi})9oFD#1P`NDxre=7ImpN*K;-=C3x3a; zE``Lchv9HGUoEreO-Ry7saW`O0UlfWc~>j}$OVJo01hy7zpYwJOJg1;Ky<0`5=KW} zwGdd_q(x&wp@um>-lh@+h9?W8{!#`vu8!QT+emUr1B1mB!q0;vX9p{{AKs>YI!}1I zhhAxTk{Azi$N)QxwFYTo7a+6fZZXc;_s}Mow2NzQ%I5(~Y%}T4l?4^-9!aH)nAdJb z$L4FoJ-GI!(mutwzP)bX!W&AJCm?!(U!MN}Ykt#Qdq?d()x)_ktb|53*k{};!iwo5 zCZHb)6?j8x1P@yKo9=)v?tO>1ifObUE!~|XkJ7%Hvh4MaGziDSHgmpl>6&C0{6{$o zJWc&7PL!QkfKD;)6@K^kBUS!MA9sFE|0)OuHneW!NB9humY-4-blp<>z2asIXW<@Uw)gMaO3Y)ZP> zZ4rvbyLt1#uUu*I44sLuc>Rn0klTAt*^Am8qdKf|Zi%J1^T=Ud$GQ8oSx)NquiV3= zoNjV{GFPZR*8ax3W7z0qzY?Xzs*&PQ7f3$#CcR8ml;DmjzRT?!zRsLnTF7HyatO!u zue84E{@>kuUD<=PZ!ZYAvo(-*q*&dpCy-;cjv$ zQp(V;di!I{=RYs6odPBj-U4OMgknIr{{UJo$ELJcdGQCTYzpbFAVw@9 zXA9IeDxIU+7RlMtNC4KTbuLcZSLff}kL?!o+7E0d>`Pfn+FJM+0x<3J&+A@@e6cLY zeAk-&j{6+G*?Uf%pCrB1U}|Heork!J`WpN0^Vo3P6BJwwht}Kr;K^S;{jK{2dF*Fs zsFj1;$Z(7?vGV-H*MZj0vfaIX*j=d=<(%dxje!RM=jIK5fqj7eqW=Kt7qYfauF_l; z#Qy-x;vf4Ue7x)1_V|a$*1hf^tad zK)i-Kmr0{;>DM?o+~%v_{uMtDG&v2NKCXTpD(!I>e-v!1t?{1`Di1qR;Qmm0Ge>I!WS1d9F-^Jeq*g zy*AKuUt0Z}`)d!iU7Z(c**|-zc!uK#8}bLyuRMa{IV4ra7%(Ht_pOLdtuL=pIOFT} zs@yz4gw_?0`+Ksw9R-xLJ~HU~Dl~m`V_Las@iK%8mUhB63v6F3tSk8u9Mau}H7^C0OTj zagU$EwXHI%y`@ng>y(`(;~_v{{V+<=B*4MzNsO@0gUR- ze_E)wT~a6`OP+%m^!+N4TC%83B(CS4zd9Y$#|B-{EQ&!MEsp;G0FKm=YqN5*yul%S z0;NI0r*$kVC=&OMRN&(n9(7wZEf9TrT}FB1e}5Dy?zDEaD(5OxE^)~_9x0VudxB#z zmK>{UIQ{;yK+@#NaLzzMry0%$eDn2+ym0;|9`TsAFbE)#v94=|hF6QZB148ztWaW^ zyFp$F=TJuA1kdZ|%~HnA9YZP00(AJg`E&J}wZhE>oX7xOS=0f^#(c^3sj|BM9CqRY z6_+H2#{U37R|#b^ehHAach(pWLDr@?t`b0zMm1v$HGbREc1t9SCwq*u95C|Z`&2EU zQ>~W(XRkiI(Zp~_t_B!mN#|--YkOp1W561x&V$!7|bZudX#K*d~Z>qeG+-sOJghXo6Sn_dpzSGeNkx*AYZIU4{o7`BrpSa=eWLNHs(` z#xu9;^Q{XxQ|Kvl4}KejCJ0dc3dW7${q8bPHDB0-f&%H)jW zjBk&9QvTiABoPcK{KGV@y}a>6*8%l07))UApISY{YHft-0AM^@Z{?a)gKZ{tc-Vo- zI3HWqg}5st?n4}ar1@{>?ygCo?+!w#Q%K$*Z>x0iUXc>QUY zJ@REAPWv2WeSdlshT|R`$lm~gwHahO03hneQa(Q_kun~;=NKH-43T3)5Tx!i=RrwD ztY$eS48ZTUK0mE+yIYW*!N&WOu+NoN<=P@7okj-ww&xWOa~s56Bi%+x&M0E=&m?L+8t zAH8H<-^hYN60@k=IT-2t(%qRA#MiyQ*)T(oh{VE_c zZ{FaX^dGGkt|}e0A#7(ARFE;o2*}9w6*1|-C_x$NR;Xiuam@&Kg}h1#INxkhiNMVa zF)ffmQ`hL#_9K7ZpdbfokT6aLGg1Kr@3mHE5yZ|$a4Vu<=&rfJ6(lRB_$q%|7>!a@ z(l8Es=B)k^jAV2f#aOlo2W;0J^SK_hB$14~ohPBi6fh?l8K~AZVy{(o47i{(GQV~F ztTrU^RAiBE5uD{la!&mH9+YULR!n6<9Ql6r2_%fnG!cyMaf;|+2oAQ?OKQzoqb|zC z?d6<`A=qGT&{ESr-~vY@<^F2WF<%QXX4+qfi52d7&9~ppz@J z0;4}(v^%-XB^gO=hS~bwx*y`YTr!l#*eABpde?i z1rFml%Wk;i%;K>7Ugt_Os00z8Pd(Rc$D$DI9l1e-# zWy$!8{WbeLNTTd(F$MxGLu{O#tIFVg4dOwqxXGq_$8bX6=R&fDYPQD(Cq@H2pM zgSLI$XwuvW$XsNeJ!-LujJnKtQ|HLz)~h~y!WBjc(~@{J%t#dgzz36x?BrnVe5$fD zD}bX`c^Rq$Ayf^J2;Aqd&Walc8<2Q4Q!nv^dJYfsbf}faLJaC|Ju2F?sMHQmm2r`D zF$av&(S|?7BW673juw_e?FA=;en6>1_9jT8U1Lg ziwhTK@Ze+X<5%xhfnfUz8wO=<@I61jN?TKn2owUOl219L?;@60R*eQTkIW8#TGY35 z8h34yM)@b}6<@^$)|=!Vx@}c!ERa)g+Af(l$c^f6p~#fpv)-U}qj8 zcJk{)0@y~#08L;JOCN{0?NzjM9L6~EKsY3viX5qNb14m^D(-WS?kcfb%DNd20M9?C zC$ILVqj=?v2|x-kMt8>5ncDX26L*LMbjEYH?Lq9(JB%Fcypzs7X{n=hok(v1Af5Ny z&#h>)Kw}KdNX9e1K>q+-Qs!X{z7^Ht$GaVW#ZAS=vcac^TG1InBTJh`H zBe}apkFFcw;g2N>8J=9=!*yC<7P`TBllgFJ*fRVFf&u(hNj8xZEUpfwx zgN=?Vakeu^-FM}*#LT3Ph(E72dng@OREz^>1P}G6E2^!G9P!qJ1gOVCY%+GEDuJ8| z8pKh{A-inGB9@L zqS^%PfQfQ8Frz}4)AFujSHwhigv4tS%8|OUy=&5GrRc8Z8!5GFqKczDr zqQ=CdU=j{I>w+T&67Q#Mlg(L@J%B)RF~67AXg5T`7MRHzvw@%5t&Jro`+{dVEgQjg8gJH+or)f_DT{*C`zA z802hnJh%7PPi(Jfibmw;Ae?pMdKy~1Aco#C&Nle-Rs2L^T^Tw?K*qoioidJsBO;Yu zJZrsj~iC%Si3D#~(6Vt=g)#zQP1 zI2Z#fl0fE|Gf5i|S7FZe3avazI01lnsIKd$sH z(24t&M3Hg^ayS0JwRq>@t^}pSf;ZFv9A=*~GZ7IkNIop^ebq4A2=!ow&Nk<+{cD!z z5*V8cgOUm0)#Cx1#7B*=JX`!mX_&}_l{mw2!0((=*Y2^B3X}f;4w46%=9Cgf`CJh% z8-07~V|-4h83!1~+j(>APDgUNXpVK{5DDu|%q05xH`J{i0SY5 zQnQZb86A1Z2Ui<;=CcAxpW-f*-xw$R(aD#&$}a~bjm26gaN&#U2b0eK06JlA97nrq zI}BrC`qzFSG$k^+{E6a}GiH4YjN_5P{{S0SjB6T#2n3Olk+&43)zZKTUk*3{s?gj^ zG$FMx8|egtwNf)0$g(t}AmKS5){K`3SOTMQjgH*?e5qDuj#Gn$E%`|wx6YWmPVxb> zYUft3cSzYTkE(B4TnR2k{EDLc-*mkk)X3+rB2E#b@ z`uJ9)9h^V&({EZ`V+{Y1%&wb9{y$aUq zNKms70X`m^{eJx^tp;Qyc#Z(h4#I*Im1xdLJ2xKx0EHc-Y>1TZI)?XsW|w~UcEe;K z8Ob~kbt`vhUB;yVj)A!SYAzmoXaWLsk;cRW)8$H~{*ns}2Itq`Oj+N?7zqH_j=cSU zYCN}{oX-;+?ebZSBM4KAwDh?^7k&WeS@q1mm4MRc?F{ zi4Wz*+5Xwuka={rh9$LRgXK(ExV3Fv*Qq(k;*E6TND@*u0|bHwKfNkYNgx1)EIjr< z9MFg<&QuP1XPUjq&a4b%9Fl!^q-KBz)Z6q2KMsbk3bFvv?uV#9=9*=~AyS%%>DSVO za~Lt|)(=h&bL+hX$Uy@OsO0m{>sHTtNnos@uuf`B%<+h_PDlJ)@$2sWXW9l-F=`uhgI3wUbbU}!Uk}%lV1A*^9Khm3G%?_Y>9S$jcn7{24 zu)sM3Yz~~&&_#NSKHeS1Hy`GbmI%|}Wvdtp} zk&2E;{`cfXYI*flabh}uV8w*GEv zuW&-Ffex1Q+LgYIS<>SmmHeRaPfotPRV^BSTP7fyb3yiy6(!vX;C zjrsH9ii$KYf-nX_=7)1|kY_t?2l`bZm`@LZPC>!mr$aL@gc27ZleGa6h10v1Yy+g^ zY(BqgAhKBG@6?T1;Q3~Z;fkCt8#u|}RTkM*{{S|k+vE~4>&;#$BDP&h2m^D1ar&CH zinGRaIKvJ`^oq=>AhvxvvQ9?aQDk2OJ^^+khCKZC>s1jmvTc*NC-w89MrPIBD}c%d zbB)eEzEovC03>2gaqstvf?<_1K_DD;6;!%FG^%)4Y>z)G4b8}o?h?UpPM^)jX-mMy z>%EQggzisHndhZm_3iDhQ$_=}=Op=h(d^Y;W_ek4V*{q%oBez$t@wd_V#Z)~AQO#_ zesp+ZEMyIyo1gWp-)L=@5vlyFFiCDP>7QCBWyjYDd077jM}(+_YK0VY=?86NuSZWUlM1C7St z8cN~k?=;MCj6fJT`sqbmDA2TwHEP@_$j4tgv{1NGQ&0tqV>!;={{Tw7aI|bye<|N$ zMH~%=qk?*QP))~l!Z+tQ)t{Hfg>=EZN&yEMIUHx-`c;xNMhwbKgziuGs0gE7f+2%&B%&a;{zp}16P_p^y5*+Fh+JY7X^_r zzJoPVM9QdSQ6@n+%@_g~83L5MmPkTsP|2$etCA{WHq53Nf}D-U^>jvqQ3?-mMjAJ`k+D8`{{T(s#6xi(M_NuxQ5%g8 zBi4B!^PTxVw01^EMT~%b=cmS(yoTx6I9!5pxdQ_}`d~vBfuz7?UAH@90g|mZ!$c;X+5sk%J-ym%|G{Q?AY(V z&?1&q&*9X%@7BLSdm2Xk4Y6qkR0CdDXWA+uRBSYxo_XGtnst`xrz1!SozLn1mCbi3 z;Ob`BXUo=u6FGNK6oZlm**?7csFQYtk%fYP;f@AyPac(D#@m_1iZ=iZW2eTcKXoMW z$rpfz=gfTR`zxv1?4+sSW8oRbG4=XYrl0XQX$k>=d`HthVx5&{v+^rJ-#ai*MYjBaXD5Rx;4 zoa19wV2Uuu0PHeqByf=GUHT3F9cmF3lnDZtJD+`42n=}vwj}M2C^y!zuI-35W$!gkza^{u|lY0@<_VU(!GmIv#tJp_V9)r@&>nzJZjgF}cIqQT1nzTGOR zIFTPvDgfmCf3*tP)^IKr0b$_`4%nuZwRGo<8m!8UrA`idW`K<)v?p4&mB|@BGsjvx zNDN@8$vgu?fXEN=22OBJN0(jbvWF{#I6h*tO}w#7Apo6wC(f5MOLFfZ145DlpLI)LEv3su;IYx2&zDTsOLYz8 zazdjdjFwi$)Wiv2-iabHmch@; zmmh}TE_G?r2rbj&U1t$NBC%3~uaWus)Z1IKO{;A>b{=QvOlc$qV0XyD=ifr^WGV&# zP}#>jRNo?%#{MJk{<~MJ{@Lw&&tm&gb%l|w$OEo7^{>r-*+w0sEMSa>HTJ*VErkBW z*qvX*13?;nPd=6O?`3IdJW4|hZg$Sqh4!6&HIK3#qb;j=*4@~3!2pncbRV*Ni918s z%NwhQXL(^pW1MbBrFnQ!z$b2UNvg~M8i>w1aZ5*e2-6a%I=BV5_~yF$=*4Kvkr$D6 z!8{**X4*(43dIT>4T0R#_NgYexRf{K#ug5SjCDKE9=V~@u<{}E|1J^nERN2Ps z5btxWZO=cg8yQ{lGCoxRWMGfiG#9szz1A1TbGTwEE)2heA$O6nzHmAB)TB}eE*v3l zL0sqcsJe(t5kgBb<8%G%thGlMcPP+vw&Qvzb#O`mz#Z^+t0IjcmBmP4PCD~aMrblA zX#staeK|BzbNPSJ(3>q5Nyh&GI;3&wg_9vmlY(lJBSNn+oM!}(++wq4GEIKWuD#h@ zfCn3S(QaZXlt#p!6ThFAGzl#(13OH>-zDQy1$C^+~~rJfiFD}`b>IXL-y>MW&W6FVy^t7PSd z3C%Q;tfL!Xk3MSgDh2)-%AZ`+O)POJGB{99Dgu_$>n7ai&ZQk>EV$#H=rh>CDrm+B zy#D}t=8kA>);KW7JD*RDEol|R6Uixyyp~k%8sSHkz{9xamWZEmAX~8uZ{Cllo^B3v2}9QpaI{GJm}um%6qy zFg@m+A20JlhTVkc*3s{UarS#?StJ zC=kw=jR(^6vt=1-Q+Lc0~(TWat?mCq}dIX z&?=?FXCRyqekazLOW4yBA@0{1)12q)`%`ew4`?pR3Xd{>r@FY>#Lf&%0Ycfp$z3%g-HO0xHa9kc#^u}GfIo*xuQHR-`1{{VWr zSW9sPedd7a`5&FU_B03YV{s+I{{S3hY6G49Hm0qn5?iFCspvO8xj#BIX)^)~5uLhj zI(4E8Y&c@aSjJQxv(v2(D5Nv1$)(T(p?`k0*L|IA9=^wemw z!gRJ6?soo^NfBB$jIiT+!0ktt*-<477i_lN1I{bLKGA;Ay93!cqZc=!WNrs`#N&Pr z4SIXGzVO|Iku*YfV9axcVe$Nx;}7?Wu!YBP3vGY~d_NN%A=_VhiSFT8*3GgPADu`4 z0E@35{{ZER?NKN2?al&_4z>RP?RA+S+y4M=8-{0BDoMb~Z}0F^9jo_(?Mb7Bt)XOe z7(OLG{DoxSeY|^E%AyH`Y6lu4Kdy>ZzTG{pkhzlJ>TaPU+x|)eeYJa5z$v=fPDk+L z+x|*P{@4AmX&H_AAoT9z{{W_?zSe!Gk~E2Kw6Ng!Y0v&zi9Xi7t!*hK>oX2cg#Q4h zo{R09+IT=wKA<={WB&l6l)L*}_MT^H1=&_(#)LTk0G5^Q-?V>f?<~!&)!{M7xX45q z9|f-l0LWRHvf263Y;LBpxm$~O(&~0Ky=m>wv{u7Rcgz%UG^zc?doS$Q?c22b8fA;M zHC!eL)(WQI1h1n$&%V|>7uq+8E!eb;u|iup_^8c$i?h`wwosswMv@rk9D4D+YFb&u z(y9}OQ{vBG*Yx+(cQ0WSD{Cdd(VT6Q;y&+>>p__o+Uh9M;c&=7$icxIb)ZRSbt5o_ zK;Ux0dgseKd;MwaC@-U$GcKkeU>uAOJb-Ih=X?r+ps5~pML>samCnOFeP*DbX4!T- zhRs%X(4a6F>4S>xjBHi3f;aO7()TmQkoPcyAvhQZbLU7yZF$}ofN2>3gM+_4PeV_w zfo3vJ`j~a#5$?_?lRI1Zp^0=B0RI49wb4x_#EqjU0U#ewbu!9z4bGkV;)Y^IM+|i< z>__R0&<|(8(W>e30m&re^{aRzapG1RG3kys{VM(PK9UAVU@@BQCgL!`v;cPNngq7} z)bAoMDlkR{DrU3qNSk2beo#96>4?~-m0`K*pOsA02-q$%Uu7I*)trE*SimRFm$;C@ z7Bk@ooZtbyMZ0&AGl7zL0P$68PW~S4+bXAFo;~DMqlEV+7}y{HE|NNX^IaTfIGQpr zzm$^4=gFk|Qex3M>n$8)0(i;m#RC1UEiGc11|8Q{klP))^sOs7v277uI$Itc_Rp!J zwCO7}D}r?AA-VL;1)*D5mkL`P?|?tODECQoBBG{9!B*FfIr!63Ko}}Ki>s5!+uxd* z;2{K1HWxe*kUlw}O9MiIfKuCFYU7VuUi3Oe3W-WN^WQlAs@>X8AMvBis!0o+d#Ovi zD6S<~Cy{%$Zb2ge`R_#k0MYna6(YbGByLYlxjyP%>)FM50b!NK4hb82Z&7jV$QJv* zd;$Ewl&Hr0=7D9|@k5wYf}8F8bvbclY1wi{c*)P7tx^j(Z3wh`c8H)EI{6r;tUC|!QOgRVm}K4jo6D^Q{fx7^vv@xM zsid9De#144{=`^XOA%XjZAbE*uz&M=sfYFtvSpLJHVBR7tncQ3HDLCqu-%O;h3;)4 zkSp!GU>xJ4dH(cEAG6-aFqMO|;#SAz$v8PD{w?S|t@cycU7-s}G!gfw1<#B6JpvE1 z-)17TTY2n~On5-cjYOUC;;dh4e#AYJ?R#|tvdj`Lbe{f0&;H$I+Wmoh8E$_KHKw^` zP!+q`Hu*o+C>^W!ZT3~|o4a4bJAP7LM%z7qiH@SYaDCbP8d(e?Vcr4{4}uT>092)} zKI_n=eh$%I?7lU3CvTj!nc6>gDH|(o+A)S)Vf&&+djA0PO3at;?65}G=J_U_wpS66 zr1@jK-n?o4?!MJ5?5L>3oxDgtc`I7i?!oOOj~d)ekx1ikLYx8D{pAYx?%CS*io$F7 z!Qc}gC#U}aH2BwqcF)+~wY{HsV;!E-#;y5-pwImDmDkx++OJ3=du!^sXDbksk+6#F~cLe;Ln z5Bw#-Cs60-Nd5|Ca*n-x=wjMj;H^|b`N6=?twX~ixl%Xjy+(oo1$XnVC_p*b^d5Ck zGIpymZ6QeFtHIu+WP`rKpbVZUg~B*!hB4XVJJ&syN*DPDx;t6f&W(VXv^ zir}WCo-x3#BLEWsFhS40)}Z2|ryFLhif~BiGHckscfSwXEsTTt6^Qv)-@eXvg}m!* zj~{l+r($qU2gql(b{ord3j_7$eLLf%Es#43`YjwZfNDaz;Yx zAL(6k&Hm4p|!5?hcPZ6xPne!A1j>8WCO3d}M&-26II3T@#` zG>Wo;xB7i_rA6Yoaxozbl_79gkBwO!9_|;2_?Qw#NIyLNVuRY9sT(U>EM!HT8Fg{+ z=7u|7@)*-Z9rSDf52y?utW>*Q%<;Rf8=XTKrYG#lCba}N@j)aIf6ggLtfjVH5=sd> z@5%RXPpK#s(T=xV70+I@joU*C9`QrWtVrp%k*vFk<-47`;oYGFNDK}$`_tCwwusV6 zoG9NXgXK>>~aP@RPUsoeuX)5&_fH)94#}T&*#(o*IM0LwXk5=Z1}KGhO?x* zFv}_YNARCG80W2MLVp(+!vX?fkEfS3tC_^O3M15VtEeA_$6?K9v`+V_a@Q#npz9ub z(}ohHTwO}UA=x{z(j{J7~! zi?*Azj7u>^LJpII;Xbt4{0+?g&AjSl0O}f87U$(k+zx!6zeCSlRc@^`L{79E>LY#n3}<@zv+tD!)V{)*)pWp@19OeNIn8`l>f?7jjDzQ1 z_4}yy)vbqUUq^j$-J=x76qDD;SJ9r;eWrUg?84i%&F1(4avy(^n)P>Wed2pDdq(9g zHC&@9&`w4@H%j&Aw102?t9xwL_Li>;f5qM_Z^nNmde7P)ZGE8akg?t0F-74*D96YO zz-go|8JLsmXhf2CuElXR%5ZazD~ZWH0j?Xi4Rc^I0OWKv6*a_@jP&A(1-#Q05vFo* zH|t(w?C06Pw7s=^6}_KlG=;!p{6rWYd$6y3`!n}ywZt;^uV^l*5Pt|p+0RjtC!KpM z*}t&gWBVS(Ctl4~oMe`1q}&Yj)@#_Eli6LJVE~rO1UBjd23+rtEZ39SELTVt82pQ1 z@F*RtJ^XXW3^)*j;X4p_r|tBHRub!dKg8Ia4|n#ZE(}pj1P`xsuv~4=p4F{kbu@^v zMg(A}D6Dl7F}eQ$6{`$z|4j5r9=( zowJ`>xVR9(AK~Qh7DKx5arOID$s|@WOL=c>PO=N(`i`6N#b$+y`Zjb?4#bcfJLiw- zL^k)Zs>;N$QGf<8zpnoCPs4m!6za<74P z*PVqOMVrJ@M%HnIu~X^Rg&IcI#w3)WX);01bf5ID@9$P@M!n{ohHXFv_xaP7@{$L6 zFw|cPNaT4@$9MvVWakGXnhoT#C<(fzJWfayrILZ6t)eTtc#9v~G{Bk3CO{CO{QQ>N ze{~J+Cl?{q{{RV(!H33=JOWrxfD+5%JcGX!q;ox~?yes$7ho}*dGkj@B#^L#lZPa> z2K{mSQkQbvSj1Tltd9}fW+%v>+NO9KOGKSxc5Lc6Y;D0D(ECCKjpH!eWj5PhJ~_|6 zfom0%cM;DbwpfK2cJO|1<|n@Af0 z$2qE8GXk^zUhf^P&|t3 zX>H_q>>57pR2?9bxz2G+-rPqVidn+Orwx#OI{DDA64qFOm=|Hr{=UMF`8jqn7>6b)?|wh7~NB9xU=P%`qChO)HRFR^SuB6)kZdk%<*a9Y+;- zNjYf-7<0bZpbNtxWk?IKI{?FcA37>2c)@iDPx79arQIzek6R-uje`<@YHB?z0PfDj zcz4ceIbmrF_hpkOBo^E2nj{Yr0~B#KS0Ie%ZoPdd@Q_d{oB^@H;MG=GV~|8n565~S zkY@zdWgs|wIC z?(N>-!l0yRxoz+p&~>Eab(6h|ylF;prx?J-InTbYX${TOO(om+F)_lf$8HA|(#S2z zSqjRiFdG_tK40rxfmU^z77Dr4V>#=b@_O$=e$q%Tkz^Xxr03y`Q!O>L_e|FKS6r(c z^Yc8=t-CJs0a^4FISXadLKG=+TCsLpDb85>9#bFD(=v= zhW-YRAReq&;aOk$J>0Xp$RrKW0to*AnvGmFv~Ir-C~*nYqjDG> zzt)f0^DL{Wo5aAJ=iOFTj#)%{h#Za1NgX$)vV4g3G!rsS2xy!zBOrmA4yEsP3_o}= zs5Ue3p~$m$DHV~(U(7-O05ovLQDBpw=4{|pz061lcFJ*p5DayqqAz!VLk@m5Qmi4s z87uilaY2kErAoxgzzu3!kMCBJCXL!|_eufzFnROO_^2-3%IJ_ryOP9bZ?D>m6!1=( zRrTax>_uC;(t#slss~a}Uw^)XZz9S`UlT`-#~gd=RT=HvgS+majkl#myw5pO;m~uo zG@l_%TU*B+!x+~|3IX3a@-))tCpqV8kT&0Q)`u+13Kx}tQP6HhX0^n(XS_(Vs&)Y9 zZN0tH&Nc*580Ec#Af<7D5V@e{#ImX^c9~vrTs4Osg)Yl4G;8kw%Q^lU7oxXH9 z`(z%iZv+Y>eZ5W_||7{LvL+l(oZ%9ojZbZes%G0-h=H5804GT z+alfLY|>}@kLzDO`!m=brR@i63kw7?OD7{E`jJlkq5BEiKF7+7cFMudHpa*1Ys2Wa z+3$ur>}&6@x%?B!_I+X@{Dcw)0NgjNeIBgxEShq-7~2^q`d3>c#&YDG_&_^+XvQ>V z)J9Lfq2pK5SY?L?af-I3I|4kpp)72&2|qDAHuWZDbaN9c74@W}l4&RISe0hZPdg7f zeF|f{LNcSL0*1uGgaTZRz$XVD`l87sgbV~Z->E!2{`UCEx?QO(f(LvY~xo97F_!vH1e_H#MWsXZx3{x(N5Gwe8FxtFB z+y4M&t$RSp*IvOT+{m%9 z(}Gz62M5gW>s@o%?k&Q`!@W2JlduDv??vp%Wr{xO*H}@OU_kvT-7(0>#d1_-L7_tw zW={sKC{Dnhy>ptGr3X|@z~mkL{OUgwZEG4v#3p|z=RaPxOF3@kx|B#U5{-u0%^q3A zdrO7M$2~mixl@Rcf~1~&xWyyeE8W7K;^kChP;6)6pM50OvPl9;nh^;;5^_NI=7K|8 zOQn-SH;Z=Mit!(Auh!SHF0SD51XeAUIUPM~^Ml(S(0k8odq(y{hI@x#2;(NP9o3nb zuRgWxue+CO+*tji*vAU^CSZ;|EA%U~?h@y-jl7W(a0tOCZz}nB@1tiE_GP8aI8u`D z$;RIL`7MbgmfzO7PLq*eO#RL~Lh1=`Ryf*N%P1-c8Ti-Py@2vc#!`iJkISnh3i2y! zjRZp@W$~PK$NJHxk`Kut0G;uiVudxzE|fx{4%)Mfe|l0z(;J45Q~qq013tX%N!)jF z%@fU~9TzMK&Y#wz&$Ryl6WS~w9rA?6y?6u90*~4-mx*OvqaTn@3uM;=DvJ&3RoS8IK^3C81o!gxxVhdXtH}d?G3MIG%V2E$g#-U#@Rf9 zr2duqAME?2mN884mB1=@-{o32SC;n85|fu~05ibzsP7@TaI7~92z=w$iY#)*SfDzB zkImFn%BvvCscejD2c=Yrk~rf~GEV3BtH`2gbfG86f<<&P)Efi;rwtrrH>4(zpH1EM}{!|;D z_)Q+7ix&fKyaQBQKoPelOq{Xfk1Wwt7@3B>#_gU6`TMKKyIT4dxmdBRhTj`g5D;wK z!pBfMXMAVh@1j{rJUY;wPBEyqH|zZ=^pZ)K1p+d_YJB7zdQ$zP8y1vCNoK*$Jh;a6 zDDDI(qDZxWDFLu~=RZ1jDIsPp1~IrJI624G=C0{Hd-s8kH%tx3TC5`8KuB<)9E_8d z^u;YK5XX4aF$ZiDlZ5zYiQmN(LC|U}PLfV4$=U{d7~p15Gpj$%?mrrG;zA?9Ay|!v zt!Gai#ALJ+F?QQQPj-6o{pgTfcUJ7q!@et!2-wxFZae2PNXw;sUmQ~w(=5^Ma88#3PKa{o>p2@%hvh8Cx!2|H{U`$TENm5nG7N*Of;x@rk#>Sy-v^r@a6DXNt_5saNgKvHyaM^b zph*lXa<4DuCn2>FpI&K*q?Hpg9`hMqf{)&*gI+eqG3!Y|Y=pZ;brG>R&+dKHRcM6T zTL)Od#(Gyx7M=Fx?VM4=1l2Och4J~)Y#dBK5i84kQAPy z<4wHi>S2WDMHwrPhg!t$Z(^VEDK43TIRt~B*0y2qE^WKVPvZ@N)wk(a?`DQF&k!eV zgA9rt-Q2B&wM>wFWRbAPtts73tAtF%TUSgUJn!$PZKhku$`V0LXXsH{7VK?3(eG?73%;0*r&T44b|bq$o~C(GwTUj@m~ zhYiDL-~DT@*5&*l0)*}dKfMgWZ*ds!LoANEMqKUs(IQc0Xd^Ng)3WXHt9J$tT@WAxPsr=olx$ zXc7JM_l@sEdEU6FB$MZX%V=kgOE!bAoyG z`o$91lOR>VU^pOtyVAX-_-JmH;_JW^Y9#V0%UP{1BaTpaWysXT^ZV4e?_Vf0gPr-J zyfR}5*c|Rp@AIgJHi>Z98~9I`rq$Q6fQ>q#XHk$fV}IJSp}m&lFwWr^@vtCMMso|I zla$rD8y`|=?{OK8n8>5vNWsl?S1`!^(w%tZ=Q#S!F#E3EX&5cdyzerhIT*m&ixu9Y zd&rDqIL@GHkjh3u%?;T?jI!W1{+(;Eq^l|CYKL`Gw#>wZ-#gTRv3S_zvusbVO0W^W zK*1akD#1oU9$%#|aOfl%D~xhFb@@?;~!t8LXAXD&*ELT9X95T5AlIAW8Izh_fcJfvB4U;4D(RPOoOidM^7PLsg?p* z9Pz$BeA0pflbIx&V~vkbk)lg;ZWwpD4WC+p98%Ah(n7ABXB^d`weF;244Ol3!ym6S zNzhEDCM}J!N7tn-Z)jtY^e_Rj{&}N*3OzVcq~|=G4>~wh_~WMAS30RoW0UTy&~7IY zFdmtxisfYlsN1IEg72&KUT`RaFIsK27ID~0j3}kF7)HB`!NICSz)hrG+ zJNZ{3AYsn_rmg8*G18y`&IsQ;)Zlck^sXG#9VZ#v2hO=!TmlY7PB*H^7;d1|B`u_= zJYbT2^qj`76#~+GcJ8W1M8(|yvf}$8?Za6IN!>m+4aNTImzd0vbsz$ z>F11OR4aj)$r&D08;vmrP)Rr^1&<$Jye%^ z#aMZfj!({yYZif$518E1LxRP6ijnZ4_ey5(FmsPOhnWB*5OM2OS53s@S5~2qJZ7mrqYgu0e&mX5sgmP|}WR0>sLV)u*4qWdZSBzw1(Egs4!KBs{AqsN9 zsr@#qK`?S7-SF5ulY7LSzj(Vz|~!6&9DPF2BW&U4E0MP%HvWy>EDwxDy*yk?aPadSFL-{Ttv=AUazj{~%z_fs&sg>)d`9y3B|VwzDCHl2of+v_yM*p4vS zI#QY22Q;+s=n!BP?SB#74lJ4Eys&bd*G_ zS3WIUo_zY#k;fIl4y0rBAFUc7k&VbKJiXi2aoX_7BL>FffAdZW;8fPFfq}5{rEg`C zu*zEnc>cW7O*;1lHGp)Tk2$2)Ihy=P8)2jpH|bguz-7Q!3RHCdo6ux}X3(xPgUCC7 ziq7q;Cs>|B7!M$G=j&gdzj=tGU$lF+L5)}^-}5!&e`GN{p51nGs2T6q_pj6MW+PGA z7Tw-sBq`_8w@f|-B&(<+BahcKay5-(8R?OlvJ5C2)g+oV2Pcp1T^y?Gu^G+{Lo2aU zjt=|dHCv5g0gRFH6<8K#VI!R&bn_K+H#kys`-Kp(R4hhtGmf+<=Xn^Yix}&wj0V{} z($4ZZXu|RU{M`L-Mn?*CFw$}GHGLqRSQ+!KJ1M}bhhIJp^>M!R3&xNj2)PH7o+{DC zBaKl(!1d$xqT_tmZ|6f$%;b`EjsP`R3ma=J7dr|d*zdVDQ*j88MqCCxE3&G@DFKfA zo@h!6Oj+CAfz#J|9HQa2h=LD`2Y=p)BrdTWGLwvcP(Q6vEuGZrax=ll`TE|86{5t< z$Z%MaPg*!%I#rCF_B#B(tri)XagQ#v7>nsDK~cuU99K&lDgGXCa!%lkQL-dJ%5j6|`c!IQ+XL}F>bvSI zk;voweBR5f@i_gie#N&s9~O@P~LP*EQ~Yn z6bT@bVshnn+;V+7`>2+RBJeX3K{(%^TBYd%RhM6da0mzd)#G?%aib)v^f>r>(C=X` z>ne@MIX~uz(?$Xi`;MH@(ngKhax>#ah(#A%uvz^B|^P$_{esqvvFHm>) z(~`)hGRuN9j%ukYu`$Wv+ZfGV;f#XV-0#g}Ty}ht+_Q;>p1C}ao@r0^e1C{gG6?Dk z=R0++NG)DHPqPl6x1YX)cRY~Ir)|dLo|GsjwjgRKTYiL-<(jg{lDkS5Bprr%{e49Z zjD&*OP{(8C=qZzRb8g8RW<(@&fq_EpKKfM-iiBhWb$op5tkb!SNY961xaOXY>02sP zxly?XeER;BD|_fxQxaeU)aP%l=+LZef<$d2k&Tbn6s6|1nm1M`zyqFJ<4UobNtafV z7!VIb#S$P^P4T}YR^xrT(^8?4cO_T>rH=dH;*)JrzI6g~xz0X3`WmuB8#phkJY+FA zKRzgusu`74mq#N$e^{uM3&sICCxUhu912orC{L(_urlxLqt7F{qsGecxH8 zd(@G%=~8jG*TSP|EHiRfudE9-?*t#i5D5m9q=THyqe z5ShzzG05Z2vcX*bNkhA2BJzFVRM}Aj-#Gv@k*{&+!n9V4UE3=k=uS zt{5RgSn>$fjC%gm1a&B7Vnz<(hT@>z-nGE0pd_x?bluRIA@t=*rCqG~2mY(WIWri_jaWaN$Z@;Rm2{Z-`B_{!=4@AdPk zissy=rXyG!4!iDXw`s25R#*Tw%YU7^(tX(O%QoZ^xd(iD{Hh~mc)PMmU_b{aj1ON= z*0k0&OEpk*F0_a<*fHavPcl@HyQr5 z%NsxvEE2i%AK&~{=b07SIe2ZCCbQzS5q5xJMl|OQ*KbpiL+wlHEUpklz{bmhPfhpd zdSkPrYq?FsK2xs1Z}2(ur|uS4R}e4^#0-I)dYbFVO9VQ=akA`xdMJ?VL@Um~@wn!b za#ys8Er84Uam_c~BLL)p`O2S#O~4{Bh&Cq}&!4Vo2_c<-D*!bPM&o~f)@jRgAdKn< zA+Q0dxP_ldBmxF9HlWEYD<^d+%N_ z;4*`!aBj0$uWYz${058j5| zq=>>j8KI6B)SExL+tvt`1vJ^>l@_fhR;5{6<& zkY6e$g3KAVAn~4*8}xG*@WY%O?0NasY-dvK22Y1NcIYU#QN~8LOq}iS=~Eb3BG$tm zew0&&!5jHfx2|GR+OeIzXt2u@C^5dr1pKI~>coX$Nb)rdz&1|9jryAJ455^eKsX>! zWQau>2nYmV;PF|rTig(j8-G3ycgO2bTE#H&G=Yx@8^(zr#_T)&O;%>w&tSh6}X7TbGHXQ zX*+-5!d6Do%djB%XKVvq7idV+mC=PKNc29m)$Bd)hSi2cob<&4-X@oF?4)c62ch@V zPK?orgKdlx^lBCaM>yD#j1qXE#T?;~gW%LoKdoBg9YKlT&u{ZrLLj#BAIc3aa!uTN zA|w{ZcLY!p28_mrU1VS%E&B69?dVxnCAY!`ZgaWg&*NHb%9hB5fI2|HHCtARnd1a! z`ub6c8cGgMag&_VwE5M%6A$0_4THrebO}KZb&;*4&_2>I&ya;ewAQR#>XJuI3nQNi=W|{+3^Q8Zv&2Vq2pA+}4ZO{H0w;T^ zhE(GljrjM_QrVIhRO)s)#yrh<_q5_M5mqC0z$#BT^fme0_Ujxg_KDj)Ga)1TQ-5}8 z=Ck`jhDB29$U(sXkBxoh*><-Vw$U_Wy8(P#gN~!9^RFqh>}?0U?|+G-2Lo^3mF;AL z%G^ud0@*sc@1HE!i+e}yUAJaK-j)auXF2QgHR|ry`+n@+&$x1otl*U(=M9hjiuLET zUwJuhWr)KW#;lX8e=qnbJ)8HBmM3oV1|f(C3^VWimFAwyeY*C4Xik>Jw7x;k2|SrZ*-7;tzqM=jWbZPCoAYC*8TeB&1%W|Q z6H&oEC@X#5PO+lkWP(ZgRL<=4n9-PN{M&8EzLSL>+&hN~na&TV$KP5umjY$j`?;&L zu~JhW^TjC|38WIpdD~)qsi_-6;E=>`zS*kDcM_@)e=*?nqCTboq1zev*EwQ`EAY(% zYlM#6%B&7}$>-u|OL_rEafM<302LotxLrDQ?|@Ic{LwJ0;%-Ja`u9}p62^PBA1dS; zm&OQT&iMVRtRlIHsqrp)A1Z{lf;?d{jxxm87!-y8u*f4hr69VPU49(IP7XB^KDtwK ztdbxo`bIZgZhbS-t9LU+5z&o!&JG1FX(h$e=1eN7+XNiZUN=c~BjP+{jC04W8rWhY z2N@)9%@>oA(x_uu2yC2s5-4U&O{M%nvIgB~kwzknuRuwwuq148Q5uyea6$CzP~hwr zrZ@v?;<}C)WMi#xK#DQGk+x}DqbmeQ1550Dy?tqWbddwJYp641jEc48h>^R@gTFMk9)k>a71n=`cwKmPBaxw<4SFfS{>CLmvbq3+4Kv@7I;3-MN z$i3-ZINSdK4R{CIygL1h?IfJ2%q%j#??YdjUAYO5wP*1Hb(5cseR=mchT?B!;c&wX zGie9QJJ;3r7cjvYiOE(3lh-xi-)jll*Rk974UA*{+6v1cBMQ4@kbl4JUSaHSWe&yc z3u_h55dbGW0Kn^7vb#qcNUN(jJk@QkJJ#PEbfcA0bIBAZ5X#0T13ZvLR9eCit^g+K1e%h#}&}pBC(k_IMgzK&MB6P8BdJ{cK%~mjws??hB5D< zH1Wvq8ODVm5_;ydVMdV|M)5}EleXh;U8wrRQ3xa5{{WXGVlkelkMCVAf@<%JYLRh} zMl<@=t|3=bDubBD6zb3QrX^QpQgq~Qck9Jjpi;oL#STMc@#|A;=orR}jAtV}QA6xW z8b_Hm4!|a8Avq-He!Jp^ zy`qv%BZ)OB{&2${{{VF!GzLShwKt#F%BXHgl*B>Tzyq(XUI?8=2?2T!qgUD>P6%G6 zsyn-w)sFe1EHhLG3QI(!>P5ZWRZeF!Jr%2ErLfRF2_5afX5%bT3H3u zz1MV9=>)NCd^V;qAkvX3CxSE6<53=E{v7e?z~fgr_4?+jVRUZpJ(F&^+idghqNrR5 z)v&`Jv~2C4op2!WTv!8x)~XOL>z`f8pc6cBkrEch%czbh;TI){IVU{Q{i$%UTQJl$ zxWbOLYZ&y|tZdr0+>NtE!8?t?^`v`TUV^gPIKuKU5AQ^`j_r{h-%IbPU>xo5`t+l` zjfDtxHgI)}R{;uzR0k_Bcs0M(^+Rq-5VlazO-yOiTAoQ|V3u+iR48Yt9PB%*v|7fH?qd@XyvL zmiA3;Y9m9bfyh2pYbI5hgpZkDa6110VMMw>T?*$Qme~DzR$LRqe=?(-&l|U%+wqO7 zVGJX3?cap)+7s*qW?J7%ciWMYhSu^VlV*P70r*xSdaP-Q11@uX+` z)}$bq)UW{KrB%Z#k{e;Z2haLfVP6i>oUaF0`KX#zj0JK*ZV#0LBX1*XG6y*4ak2Q& zXT7(93@ibU7yuG6<}*vcwlY6^b%g_T%bWqz=+xcWIKEeoPXwAk{{Xq`r7#nz=JC(yv~cp|(P?Q6Fa*`H>vJ4SZPMu!792W^L1{OJ2l_P?}!qxP2O z{&|ZRbG87$=r|SOrJc`}Jt#AbG#wxh3_*ZgwHOz8yYkMc zH9cxT$R|7VP)R2=)%E?w;zYBMRwdAwP&OXwRak?yb~ep%2LSohSDAg0_O-`mdvV!w zBb_F7RvT^(-9>(o`yqPgvZ8q$WUfXRI(^mTR!tjSv#txUz+vWoxTV3SD@U~_}F8QgUqlFR z;sL+9n_^MRG?-90ZVg&y#7D*uoq^|it*MZq?+!>f&M}(1s+{WTFn7fOXtx7V!smZ2 zUlUNx-#8jHstoJZ(~6g9Z4}KTg-_;VlenU*B=LuhvZsT+SSbf%nxufUg#*K!lb*E_ zL^THrc;7qiR)hcnQL!GIQ9c~dB?2U3tW+Jd$p(UqvdRQ94LAg@4%?o;Tvb*HS|YPx zVYWK4kB3^cNPFT#i~ux@bjQEerA6#+0mO(~oB@IJqg)8U4I^WHkCCeYSqkI=M#O&f z8N&%tnFC{DbBz2ck^`>eoE#cf>f&JGB7`$@yAOBQ#*DIT5<#KJ;GE>uCy*V`63M@n zF1HM)x+MNz6N8cu!}?NFL2)e3>mt6QFbDv#11H`7DYSy(e8(zijP*D_3MRC+8XiHX zrh58w&ooRbM9&*=>zN@-M+#>{h!XBZx}Tbq{d*9yQBkU{2`ivCbE&4tT_ zRL%}Ox!$zDhbBA4<8hNfX%<-ALI}{?kaituDb>oOPNHN-$Q)xn+Q&SE$hwLg2g&%3X$$KKB$!4f2&^y$IQ?i-!zX7&mbh0|Ax0M%-=20AaXqc- z$*wT$!)!JQ^yj5B6blL_Bq+dxp!1KN7Wv<}Mz@PrSTkUZ1M#Hdl1VPtQN~7J{^&as z`%|~F7ez5_NeoCFfk0?uyp54lM@$pf)`M$gA$dYd8PRmGD~$f8rdxjMBvy+DfD3KU zzujGN*)U2@6GJ#V0!b&YT51b>F3h$>AP2`eIVaE3vhE@hU3aiWl_O9Zv4ig>q8kYA zL14vB`BRg(&X&KpwX&W#)?GSZ$H~n<4cNNX1WBl8ImX%k+*KpBj&)?3Lmq?TIL-%5 z@9v;n+uGSe@qqu1da3hd1AJ$yGjPM?;(f0RwZ|G z2&lX4%Uhdn@@Pzo$0VyCE;*=^usbSSX44SCTrY^^b>}sd-pbg+C{}f4$RuFwbH_W? z;P!sVG>p+BZbJ-_fyQ~HQ?dIVH|`7pd(GPfl1HxnXnnElZ?m#9Tt{lLofsOKj{P^! z)@T-<#P(FyY_|5Q%O*oEPab*ISa&~U{>a`EZhJphbPfW$jYr_Zl)3vG_D{4d0!i5& z+)IxSe*1hweQ#Jt?(ghGXT57Tm65VnzmRR^`Tnz7as7k)7u-I3HJQSbr|}P;c6I)> z<2U~Rcb{ag8J0U)AbjM5ERFvF$=8ivecbyVVaH)#`5l0JGjRoB^#4Pr>Ut^X$Xg zs2?Bf_c-74r~Oov{=s`k1G$&8*-DI@x_{M6ud%(mEz(-0lQgU{6f)-@I$H19Zr8Su zM=h~dEr1IzKRQO^vo2tfl1T7Zk&(3w_I=2YUX8uu`_%=!y22H~&ji#@8Ci$~H>ja_ zj`cX!_)&@^Ftm-`ftDu%q2gqHE^y1XG37(jatIY^6f0mHikL!b1-Ap5_Q&17vEQ}6 z(rlL86fxz<=OgFqUw(EEV@DJwW{4RG3ak#<#@%VFuEr6pGfL-BJ`hef2jB6hpe8L6 ziFRD-UoS7;nyX5Z!!ebWjAtXJ0sjC>&$6^@;h~&^leirD3}%TGsMo#BGGyDZ(m^BA zwJqHqMz#pbq+lHJ(>sxlX^0?-KvqCnG*h_94WErD78DXQ1B53+hTML&T~5&~jCV!= z9PwIK(8RR9?TM;Qd~ zt8DSprDa~;&3g+?YQhyh7GeQ8$E|R=nXJi`Lrn$)V`A7ITz{ohzjxvZxjrICL5z&_ z_tu5KY1u0acw;h2oDuM-oEc*|)OqtvNRY{*As`Yczy(Ro4rh&I2H<6~RxnQg03lG)JSZl)%%=ba zzz649_qWqrtE&=KbAY(#J8$)xM#kDG?Znc^481eQKK}seTQ@VZA|YVt;|jpzPfhCZ z*%)t?*+Z#N+Vg?8Oi*XHfuxZ&5h89f+x4NtY^F09GBn_vWx1g;yirJ?Xe@J%apXDp zQoWkZdmBj!7(!Dy&UEdLX`=E^AX}_zQMn#lj+MTQf9Xew<@~g{#98zN0 zR4a1C?~nL*r)+L*<&eP>=#}@$B=3#?0Ig+9Z+CG#>lp6UKa`Mm_21o9xRzedU*pS- zh5;D;eiifI-vuwPJ%g0TA`4_7>A=o&xz9E5+iY>=OjzFCSjpa7N@HR%oC8+Azq-49 zb4*;H(w7Gcd|dRXz|anNs?~_bI_98^99L(0it3T>qf7*BnPDIx5(eK25YSxz04ntB zir|dL3Nu<=mDpXS+AgbYZdkFv!5`keyX70q2c)uV*i_5n8Ir9k}loa8Ca!DI{vkw5_@B%qkmJ4m21BM$~ak319e-m_s_hq#%p zrdbzXgs9`;pFv&z(UZdpN!~8CP`Ch%`TeQb?cOAoOKA$LZb{tq^E}hNn$xTdvmgpO z>c|}Duez1(1v;X4luTQFmmZ#e`mkw|BN$)-T|sk_Jh!0Fbs`~EjkT}}PIeT1^ zrgqZ*0K{FgGqo*obn{9QHOBaHka#s`6VD1wX)2TlP>&hO&zYrUN$!|S-gg>CkfpV1 zKK#^81yeo^Po*X+%tQ^;ew zX@r0#mC`in_wT<-9nxD|%2U5WTW!-CO)+U=mP9HN%tpsJ-yZtTmBjbpq-`AWgMp|T zD@aVSL2`Sh#_^WaNdEwfovN38nHfMCiW0xhcpn2ofnL%E5nLpZay&a~z~7o$%KqLI z)hhRs>meT`X9xS!{gH4kOz_;pzPzkqxCb2my!ln8(;EcaoG3L*TPwKbSsGwVpA+B> zJo?teun9-!+;zoQ@Q{*AlE(u(pW2A9K^~kgG@OjFrS2z&bKEdHpAO`2@S#I%9MWLB z0}&wOuQX`w$RVSgHk=MW&02X3Hht@jT1P5$?dM1fq+7(Cx*qvA9T)ZAY8~u${h^W= zyXS2=7~|HMv$T>39w`;tFm-Az)61WIDwdWFehR|Lj}t$5dG#6k%^cga8Qn>B!2sj{ z2l`T-(1^v}u9!(-jPZ`S&U({vNG|P}pe(VX5uS2A^h+4xy@4chz7Ph-d=0lW3xHlu z~+FM1cD9DlVsOKloCWAG&xw&9&d+bU0KMI0R~!D9O@%ZJqh34 zPTJctq8XSofHSw(rE{-!BQi0`+>T8cjNzOOxChRq*;NisoDOltVfKaHvrC92%gRc= zat_1S`c{>?+Q(>)pyNP&i6qjueX7u*!U2FeJm-oP#K*L4T0}t{k*-P;l72g5nx&Mn z+%MqgnS+JgWb8-AuQkLmmRJ|O2sRqAxccImhDW-$F41hGPMvtqrB+yFki^nBjdbZF zZ=Q4Rp~c#k(BDVd>*Cb8)tn6GtJ=2r3?gXf!X%oTVYglX07{r8Tj<^rRLHpeqZ#$4 zEyQkuG{BNGq>g?kedry%+0$QHOBdpn7F8u*MsRv zKwU@UN7BeUxD+b!tD3o$Rh2WTkHW4uL7a`Z-j{b53}PM-Ms*%?4PGmFqtwd2Cj7(` zy-^nBiz~5Ss@NWWhPp>+ro@?KVaOaBEP7=NCZ7*0w-hPfH&%%6zZ$T92jffHwCM{w zO{oUKKpRnEkle7=x&n-<>ds9bChri2Lc3u2vs8Grw|NN3{G?`~`^e(VY86yuub;-N zZ6nMWOhS$^k-x+mn||UTB35Ib2K-Sw%~KdkalXyP7BE!+Cnu?>BsM@`F|}1;jX(e# zbIGD~^QcDDH^5=Y&lJ7GyeC|77cH^FV0@`Q(VF3ufS{=vMfK~GQEzY+e+)GN`Dg35?F-|fHCv#)bqQ zbD!3a-U7ij25@{pZC)q#g>7;E%$|Kk*<(G};1kcDIj_xcZTla#FMYJWlI|vJiEdvb zE6%KRIOe{j`vdzgo7q2Rf7?B&82nAlVbE=n>9ZWytA6*8%AbO4cqL|G;u~WF&c1R3 zCw;b}TE@>ZDycbOEA%_=m)YmB{?EHTXF5`4E=lz{=zS~S@fgYt2LSKRYFs(SmIEG? zJu;{9KRbWJ#dHrNJ8F!D2MTgOYLf(JPVfRBJCMhJtkC=NB*SbnLZ35SJFfA^c5vIV z)t&sPo!Szz9I*gnp{$Zd2uYDRUs!AV(KE~fx(^RJ$M_Z@{j{{XNTvD!zeqg_h59S-Mm zJ!{~_SkVGXbjV!zyob7hA`RJ_egMULWA4}4S2y0>S<3{1Kf}LxSb>5EPknv=0NGO9 zJ-7uwibezK#s{F9~p#SO*=$0y-iYZ6TYmWxxd z@!;th2ahf)@%D?wl$HVl9VF`+&(J^0*l5N)&h;kbPFZdgDO?Ss4 zRb{qC3PgaNK$)_iTKt;Xk&o zvo6u>KWXpfv$c6_nnLL&pfCyJ1&Oa(!PvKwIYAlK(~s|8Kz-J}%mzP=IIosI`F*zp_K;aaFf3)<0pu&?Ps&g4SB)NCn+=71 zZTB_ydU!hrleLdNd_fST+GMNeRfHnu^UPoyay23Ozl6V7sKi;43 z^kydkzyRbNW6HVBFd`typ$?S#8`GO$vt2*}36%VS<8 z*cUdd?FsCNZit!FSwWoX<2C139|&QAXTtyPvz^|Aqs zraXxF(B+X~1g1$<2b^v1s@q(x<+GV0!e>wB&VE!Yx#YA(jRtT!jNn(#e|tXGyo1;q z!X!V%@Gv+Wo@?MKa%E=cerf`-U0K?^qwLeRt~(dnJ6p&l(8(ak$4W&_FVq}?2EFN`t8a$^8ugNHTl!+JYCmsUZ%rL>@Yp` znOZ*1-94Xd+T6z4S~(Sg_Zs~!`!Tyct?Zv>-p6yK%?dc%rFmR(ho8HaOtD}GgoA^> zAn{w)ump$$3l$@ybotXUqJ|7M$4cVrlB$ur@kA`6lU2=bEk0;#FA3B7!{E zpR7{QTu&S(IoOF9;|F{bpD%SVx&e9QI!-qSeTPa%wWN(d?Fv{Z7&*w=vrlCwXd%0` zAP+)tet#N2W!f}ytZgU&Oyg0G~g0X>QQC z5TYR}&(~~c9Q&y^ktDY<%HCS~yp*BD?{mD$E7|8S|vBJBT9?cfg~6 zARj&RnxMBg4HHCk#-wV)WS?Em++weDZxpCAHkLgXCnMjQ>pO7T;VuxJjz;IMD!0~; z2qqbVkIJB~bH5ZA?x)hRDiTyVDd*K(^0IgI=iz7&~Qlg@-#`3E0i7}SFSqzt2|f; z9#G827bM`F&VRKMISg?B011gvvaUG#&(}z|xQbLNHR}vPcG``q2;vON-@{{*pH6BA zaWO3tY6<}7pHGmhLh&MysuNG;!N|wfYU1d~%&3?;b~?DE&8x?FrKLV5@oYEG?OLj! z5CGV5lbVI_oM3K!*shl&8e1FrXEdaivD`>RfNLC_o&Nw@DnhY>2>uv211DkgskVg> zYg3ZMocaE=Ns*m2f<|^Ec~G3PjUW@h0OLFQ(B>*-$r)DZoE+^zx{Zr3bi-13j@pOs zR<)GPaU?R3#|L}?kMT@8h0=7go-ht-RziFVg}^#NClo7nce!aDa5w`ygHw7RTtEU; zw)^fsy&XHU#goM2oF00AN?m3{aU^Oo%1!||&tLCdZw?z;0zARrAFUSUqgcyM`T#pI z=~?$F7@8^cGcIxtcK-l8R-96)QL741Owy9vy3FkC3^+Kz6ftvVmg=V`Py~X;jTGV( z&vrDh%J}oObXR8PVH98m!OjkGPjWY?P{TPn-)*>|&Z{hJt_WW|^`TnAuofVKyS8f5 zFuH(?c|geLAJUXjdlBxDGm)vJ$lUpJSGt}-18hT&GCI{#2;R&Y)z4G8-)!-kEwM4i zni+I|Hr!KD;P|)CL!OnB?MG!r+I^cPq_OH(Js7F|_oDVUX2WS=ZyaHe#+rOYow1KP z(blL5XU=%_^r1s5NX39`5x1pXveE@7V0idacdt5K4KfiP0})*%yfY1I+0rl$PTPC@ zt2ziZ-nN-p{Z7ZG^n1H!X?ulSYT)N?zvS0J6F^=&kIbv#Z1eiooNS%WrDDjdzd1EF z<>j}@Y!=T-y6R(wQU*EmHCJBk2~*-E53JRH4h#3EI*8l@vHfT=OC%F2IRP`MoOI*P znTlxKXFX0bD)Kl9s2-b8L$fwx83)&`6;71gj!t*jP^WcA9ZPNSp-()B>ZUx#+cD2y z=|x*;W6XdytP{B=t*0f5GT{DUjsF0DeM(1|L~XVPGekk8W6GjKq`2Dqp- zM|IRx0L_f!IHjhwj#93Ghug0M=S$m3bl0LiYoT^vF;`2bwO2DKB)&P#7CH3Wcg1&Z zn*)!5qNT~vsgnz*AchlA$o%i0WJR(H^?~gjNr*{?x_@%<) zJqKk`lZ>D1LT>WX6mT_U_<=it?F3Q@LKtd%6VBs`F(6{PxbZ_?^s@&T0PICrMxo1r;yY(GR+c6NWDo() zcEw#6NWcewT+}itaQN{7jL_zgq0t;#vNCbde_B{u;z2Bj4t4~8FY8UaVmz+o>^H?( zGOL#(JxyDYgH;QqKvDo6l}O`QOEF=Czq*R7tTLn#<_%Ux&@~)mY6N#7ID&a+xM=jlcn-l1>=7@wnsVUs-d|plbEmgYO)5v z!2^1et0Nf4QHq_YZqMGXg#;0~C-$l;%id%$#sR?@$Lm&|WMDKA%?=PEbA`ZT=S<{p zzZ3|a*qu1j&Q9m+n&(!?DnTR+=Yv;`ob2n4aA|(ga|l;K;wNqEtm4wdjll!2*Oe=A z1k>Jl8xg4^+`Qn`!+-N#k!M$-VfftPkzc4H1<};JQ9BnfVZZRUTF@sY>;qU>#Z6v#s2_^%Z;&) zyziPTX(g1lG2%EiEOe&dn>%&uRe_njOo4OPJk{o4v6d%c>x!f@0-0^Iy)QiQs4=fr z>UlpJHUWeTje2(9KPpDfDOTmyR>>n_pYvJ;Nrb82ZH{Ur1!BU1xAOfOtP(L&t{4;M zL90(X#Gs5EoDJ%2*fJIeZavl0>Kg&b^QGcxo<>&2jEwMo2NZUTN@-TXBp##{BKZGhJ%om4gNF*Gt_5Je~O&I5jL4S5R$3P5=ggEz|)i@Q_Kt033SnMpf^M znG_rYxaevniI)nwI?m(E^`SHhAt5yD&PG4hs06xH7E&?BagMzW8W)yHUMYq!2MzRU z(?Z0YupsTe-1MtMFbm?&}186x&Gyf`sE69ftVlpDHrW{o*Ocu9@TX;;VFqXxF{lPUjEE^E=S) zu97qz!ChGVyX0-<@S;N-yiJ0-*+%$3wNY&(TW69?_neX`n|OhQcbk&C5J(<%$GLP? z9PP_>rF&}V+vyR20UU$J!_JqE^r8u|t(YhSJ64j;9IgU@$-a7Zs+VL^k+v8xKKc>6 zmMH?szO#aIF-=09<|UC%t?)C)>sM=7T!PD-dYTl`M+9IEurQ=-L88f_p~*Q?I3|G) z@L<=1yBv={-m7rAwq{d+I0rn|CEL8fM#D?)Fiztc^{cIhh76LDN%?y7S1l<~8FS(2 z06y-tx8bJmb*Lpt{!^XnMJ=TaGo-OR4?jMA^v7qy7GUk2wg*=`^UY{6i1KhY9OAQm zptg=)&OPDq>BlDnAo|zmH{PqW{{RE+{LUD<$TALp&3K>KqqqK^c4<|~6Dc+NXY75% zlGwtELDHi>eKxNpJ>fsfJkOOupAJ=&j1Emnd@w+u?~RR7ZIEYB1a#;7)S`DyjYq_J zCy&;wL+|3o4s(IUa3xfL2_vOTNgAPijXq+!G8hI2b5*$DE;6sN+*P6qh%~O)=~o+! z)YK3UHPtl$W6rv|p_>E@jGCssBN!y(ru8_~+pyejDzU36VduX;UR5Nkumy(QGre0{ zjkA;GSvN7WUWu46!8jiueQKg8CQm*6)nd6h&eb4dyKMgTH5!IU&f=p5yLji-p0KntoMwj`vDK>pgM*HhU2d*fwBY3I zcH7pbHhdDJ1L1-1HDX-@GaX%Y@&2_ET_T_?Ir45Rpphp!)NjZ4q8Rl?Q*2UABHPMY z0Xbu&V}bMHiyi78Og?czpW!B zt>8vi!y)wt2i=-2v1nVx)B&Abbl#rtOQ{-k5#~YL&XtW=vv`q!8{lUizqK9&3c@p% z#|D(TxDf|khwY5}=}*KXA#(`~I%@O!6*l)0V3jOl-x=xst5O+~c=Esljes;&kR~-S z3PwQ1az_yw)G#f!?0>x{+7QXCIuHooK3=<@DpKC|WVmQq&Yvwi=C6AL%WT?65;j26 zchAnfQ`w*TQ)%t<$8x2t*^ZXdxf$cuy}xS|G1?NtB&Z}7^sMH(LfJwC9yiViHFTRp z2^<5RyhqlwUhO5f++#j}3eCDwU-K5{1a0r5+soY`PzM+w9z8z1=o5YxOPrS~P7c}I z&!1Xi3#EcpT|v~06T$uJZyUc=0Z7}=JoWu4b&1j;hZzTajP3KO@#j;WLw*m#>*4D} zX@G=?&q1VW+voMtuV)I(rJora0!~lw?xlN1Sz(tL&%k`eO}y}+0^sAWNh38&*~>5y zIYlR9jmMu~eIDK({t%4CijB$m`upe-#}rpS5H=@qnqurC#;!SGf(IY#S>|;FgbSRE zc(J_(`uXB!3US83<39eio%qX(hXN(lo|S8>Jpq}R>SZHribEicw*Y&Hy14hW&a0cUj>dP(5sL4h-^!18@y8k5Fyw9PwPsvJt};Ua4mbKVS@Ye5Dy#67(}>u8!b2S%S<@_Kcrd(zh0HDN<>js|FQA!PimzT?dM_oXLhi3rYu2;66<$Imot zTj>N1sN|{KzDaPs$z!a;%JVU4`0s~+?tG>!Ry(lqWry$a@L(S<^C*~vXU*`QoH z%<6<`1Yn(bBlY*uQqe>%Nyt&K2Z8U;l~NAQj#hS=PJD|TjQnY+tzw0=E0sn&E>FMD z-$o4EnAamX$o=`MPFbScIbn=*R<{y&V=OWT+ftWO!EqZRxD1*4+JLfLn93kKFD1Qc zi)knC6c9?|8jBCsjdgOcqQvaI>kWZ5pFPCv1dP}i#+;4(>AO4Sxsj9=(uW7GMnAqP zW{M3)XMDDN{{Tulqi8@i00wc^q(Cu)zItTPE#e87SRCgdXB!>-{q$HJS1RlSYQ{br zRi%+3EZmdOb*PDy=TISm-#by8gUw|;a<%apU0$zp_>R;!n@euM2H8p5*B?TGb_jJS&AVfaeSeyyov6yj zKI;vf44NumD?mVC&yoly_1mR04xs{R8QadLF(-()^2Yd}$*WNr7~325%_*VL2t*85 z!~p7f{{H|*i4?QkTHvmiUU)xT@j_&{g(Gm}oaBLxy!z3uJ5n^zs8q4!o|IcjyZoUo zmFLCCrUS5)A^f=9=B#t#)6crQ83ZuTrASbt3IO;}QY4EqHo$qFDqKS{lKd|RJWwsv zw9-h#kU<#VjlWuA2-QonwsjoUZf+yD+~krD26-S-aLTeH5=&qV4^Fu``pqnhrd7)# zsKXqLk>$b8)uSYK>lk$d9DZZPQsNlnw`NwrJZxx&?G_zjOB`{WRU?rmF6|*I20#ZK zd~2<4l*sXf#tz&4dQcy$=k@#1p_~v}M^)R5 z{9PTI_;jD)Z0g*b!KC+I0x7IQ@UM{XJ#XxBkrNeZLTpJ z9lGFcR5t9H(SpYS@5k#*#urJz#tF#HQsMis3C0QB&{E)c;X&|YocdRHW?P2^*8uLP zexCYbHD&zF4t+6K+d1n=ela9qqbheKXM75z*m%?`=0bAY@wcrt09_$}DN(r370V7K zX#)bp0l3Zu4qQg2Nr}Mc9C1Rp{xlu%ZGa2_&-ePpClt;eXu&zg4oCwz^{PYO!s=9j zqkMJ7+wN%~ri%6;q4(*9PWS)bctW%Mc zD6B9u#YDIRTW|r*SxU0yM_lc;_1e{Qtl-k(Xyywtf>ii&PC5D&*#7{vkh~r8ez~JZ z3~{k2xYRe^g?Ar$8)zUuQ@%&am$Z)x={|Np@g4nfovD~nKL}9>U@|%CC~str%i<&} z1Ig*`HCe=oCK-bcP-FD0`xzZ?pH=|U06K;N&VRLOM`(r2jKjNS04OK-%{DZQfzzb~ zDm1<5BN)##R*f4vhJ5#+Lm3hhrx+L+JW~h=UlGZw$m9 z$vb-2=KlcOe6maSgW9Er;&vI&t$A17P%OV_P}{it(UD)Eos6MuR1`WCW9LpuE2X@u z8M0L9#^0`M)c*i!{@Pl5G1*cZ$qQs)00=qqBntTd0PTnEQuDWN&9$REP$<$yLC^fP z>cH1mQW6=Mw@NDZMf(s0M3Mghcz=3c;@0Ba9`SUQIXj9SmE_jai4c%;k-d9M?8EI_ zv^xsvV!4r?6R{WrZ~UjqzP$S!`%CQ4X|3Z(rDGzHtPZWup8!|7EpB`{gk&;|Z~gto zuHkP0G61rvZ zVpX?7dU{ikh6n?B?~|G!Ayj8?d7#GWH2Tqo6ny^x#RhM~-4~A=q0V>3GZe_oV+X{$ z5KUNih(sU+)fgC=mmasL1nR@H={J{T}R%-N!D9}vOTdbu()zdU@KD8Ozvt^Nt z<=@1LcLxV-{HV_D6Dd+Ou^VyE(W3q!Yh@VJ5Byl#jT5YisZM?zRc1o*G6Hw6S$(>L zC$Rma1R$0$5WDfWP57_PF5T}Jv?Nl0nB@Fx>|eQnnZ1kC8PdX58S~$7+Po0l z==P4%Kpl?fHPS*!1sDQO`N{sZVc={43C8C<($e1nCw7aH2n6RK6IF`OQn}8|+irLL zXo|uqmfW0xqZ|JJ0HqbQ5%$r$}AlHHYa;M@65ahxBou3;{kMkuHV+j4x(ICH1McOI3?tY=XkhNS}l z100Y!^QES^G29dge<@?XmMEzvxCEHUBcbMp5q(TlXE+(p1J;?q&T+j7^u!A)_>TC` zG%GijMMs%J>KR-d(_0*h9A_o5`9VAR)Su!4F@fh+W(o;C25J?-K*wy3wJxET2D2lH zt><+z5*T1@f%+PHH`W4b8oACqy)#m}QG)Kd;FFxu8I%l@fsOOhl)aZBR1h0GV|vP( zReda7U&XQo-`&kUA85r3rL&Ake9aaK;=4y=B%EMmk&)A_WcG~gLOxD)07iEQJP+^Z zMD}(L;^I)LjbkKr`0vGP&JiSxcSZN)9FbKT<%LF-I5@yS$yrbXD6?CzH~y_yb8i@x2Bs zagtgc4_&Gu?;~jxon?-p)9a-bjJ@Uo0deKm=RxipzSi%k z{{Sh*{*`G4q$|GTrB)n;(##o$J8@RY401N~hH(7y)|o#z9_ z!+%;Z3Urg=AY(OM8XccI9nU}BrV{LcxW}OtSppzwoq)!7@~DzPw(TZM?Y0Lsn-%i~ zjnNMpbmz~~osQ_ra;t^TGDzl!Bi%7E#)R@UhWT}&#}jD{F*=Up8R^oPhFBB_0D$@A zo^hJV?U^ALaYQ2oJLKe?=WV}Ac0>@eG^0>&%(>hQZToXgMq9la6T;YSm~rQf(WQ-8 zXB&aHttN{UP`fJlj^t`5jQQuzydo4F*#c*S|2T)_ae74BNd_V2)*-y0{ zgW6`@tjmn}Trv#j(^0P+Z?o@dQOkY>i32Cbn`8d~YKDD-_J&X5ehh-ojB8%M8r_fV zf7=E~t>ZI;|&V8bYNX=x*s4`BaKm3(=w`o}1 zc74NJ+%A>}akVL3QhC~-HLc3vyiH*GO@_>&U(;VV)8U{N2_2|YsLmV^GwQ3ykVU&l{#|U zFR$xM-o^Y#rYx$Za>0g954ic7UON<(Ws_J{QL|*7z2N4Tfo^QBBa%3A8~#$wk^9z- z-PD$;2vmI`^*Pn^ts8lxynqsnbGco3`sSKtT^bJuVa+LV9D+XVF(uE0bsKx>DCT?=(ez|EM0#lorX6bU)F^+ z^LPEkU~A}dFlxlCQR)`7`Npfbykv72$mGoR5XQL>Qbr(b!2bwrEi{Sic14$Q2>pO zdHGfB<+>@V<~(hlgCDJ3?k(F+TTtiFdel5gBIYhg#&US9yXYra${5&x-UJcy`sS_K z_X?{20Em<(_{j3dLDMyR((%NvZ7MMhtA3pM(l#-z<=VZ|mpymb0q&=}N(n^Ksz!U2 zLNyKt_okK=NSZj40OKv4jalrXe-LbK=6Unxxvk@oBvB~VKbRBY*mTdOCb6tt*b*7e zy^b-DhrXXynW1J2slmuxMLMcqN8PsyrN6Z>A&L|d+M0dj=a-1NM?YGP>-zTx95sN&Rgkj8WQ3- z@&^F)%@m5H}zvkZ?^Zn>ExNkCEfl?^_cE7S8cUtmw!9?!<62@1a{p zB(+H-fWs+Vl`X45^3N0rZC>$0$a|0m2a8c79*6byq?Qo`ozn&iS4jAuKU~&NXj+?F zj`lS&G2d1&GoCrE>tXnmifBM~E8-;Me~ljE=~N(7jErX($I+_IZypSc>KLv;BVp-E zn?oZ$pbF|6J_^!d`()2-}MN;0D$obT|a*h0u)){BreWM^v2 z?HdbXjWw|Gm+R2yCpjaUS|qpb1c?v~t%hw!8-bEDR=l)WRU~1iC)^Bfe2+A&_VG#@ zMudgNkea#m=CAlzdxa^0N zXP&gx-(+@lkTQM@L{N;jtmz#({3{|(#jv^W78v5rftl+51ak=emt0J2MfT zzI4U!usxF{tXFN^sA8m@2V#Hrx2%5B`#S79n7hWdiIPErN|DpwS$Cgie$KtO;g;Pe zhGij_bt~!lv(mg>{>FWmwYz4H(N#3+AeSf08P!Q%eS&*4+AbVg_bDD5XMY#``&KRg z0NwN1#kqnF56?Ol;P$kvmKWh`|D z4%r|1>o2$d>`++;RKH&riBEQT&;I~Sr0ss}&`)-_?MT9rf&4cA0Ist8TkhF$Z1|71 zB9sRqu?{imyV30a>wT*;E3a!tB0K*8xZwGJysvb9ko}f+Z?W<$mc?G<8d_|&{{R9` zE8QKG<``5p;tU)p(Y9)PMnsn4G)YXm;hP0O>yNKG(3Z_s(O57Ah8qW9I@WlxaG~KE zVF$+{IKa;PXEj;uOi&w(IJJ|uRO23en$7I)&74jomQg!&Rq*4`?_NTXh+r+94U?Rl z`#e z(!5SXE*Z{$rxmi_g6|S|QA~%#%2@e(>zW{!M(;>a=Oh!K*EL(-(UuUU8GDnENXB`q zS<7SrY>=aD3VikWnw%L9*h^rmd5?(Nwn5Dh_djk^B;TIerr3QHou%^QKI4tC&By`8X@e)e-XOz$2y zJoC+Jn-+Luja&F=NGFoVlh=~5zq_ItxN7DNP-lef^U`w4r{%1(5QqjjQooxDhl zj!9)uz~?)kjWKQ7A>#lO7yxSoXKpEgXJVyf?+YA&HqyRcxaO|%Lj}iv&#APM6cdkM z>s~c?d2?~v@TIeONCBH~ap!vSH4XSfBRI@`ah^I2>m#&#Qc2^K_c&Et77dY)(vyzu zZsGhScWN6+E&}jJ6vd^WLIZA!2EG3PZ=D`a<}g$^I@d9PPWb0@RI_W1_2t#DG5K-D zJl)}mq+BS{7@Umrk3X!{rn-h$hJP}ESH-wK{{XHjWY={jt`&bUCvbgtqu5%k7cQ2{ z#W8|&k1A)hZ!KVtOMxVePBG{8`&K>VFL^R6Ayi;+GlDnw(=glG*}@`gk*`+D6r5vx zW~a0vwOGuHsyzq7+KK6(KYeG-cY6xF?KgOs01yD!`HHRo0BFZ`*@7vq2jY3ojz>7h z(XXAp@Dq1F!S>t^Soecgqvj7Ey?jqDJI2Qus0vEz18S{xNI0nr;U^<%fUHJ9$Q2dU z)zxC8E^AM)y92d5YH<~Xvr5F{W&`&%?LTI|!aI85;eOI9Y_I&JD<9FT+&^dk0Czsc zj_l8Oc9OGrk}?=*1I+8+diNKz{>*kSV!|vU?DTkJ$qlOoN3Q33+IKS~3u|swwi?6m zzU=j{CAG0eNSMf5yW0SfqxGTog{N@A;Cy$AaC!6dJJY?N6fI-j-b$+9mpJ`4+soxn zrJb5-j@7hCH_6Kb=gFb=j7stM+O=bn8)J%Bv>xJEa}4UGaBvrzFJ{Rz+LW0!;Nv+S z{-4&NdqGU;46ohBFxoSd^A&5CMli@2D<2X60KJ{6Eub^X^T(3W{!O?!+;c-I+Ba`- zP0#R`tWmQ!5>01$gG>t5LOu21=DhIlV3$&q8gGsA9ZMi;l zNujycs*xh6^8f)S)1TUqo-3<#I~f8tc5Zz!nzLO_CRYXZ3~7&JT9HN`D8#WJFuz8k z>eZzwDjhO;k+Aq?myRCLi37=`>EsL#>qNDZ71p-w5zA%szE7rU9@@TeRcyv3EC-$s z?Z@<`md~^;bllxOPz-6#d94VhSAc|vK)~eZA6`_|t>kwI7hrHQdSbGBM(uwb!XFbU z!>D7|uez^k?G>ylV0cQpu^0!}dT+FD-pMlFtXAO0tThvyjOS{0+Ro}I8O-W7^gNx%J!-Oct=*ht zPli#9Hb&l_w7T}ln(bWkHw3aBZcL2<> zt{V<_^zszEx0CjPQi@}ZNY44k_oCWH_UAzK906KTHeBN;<3dKbw~AYfw*=#51B$9O;O@VMBG>uf zW4#hsWtuDr$A_pK`Sq#`i)aRjvLtb^-`pv+nl>dhg5c>m+j^8p!68mgH}Mm-MB^$5 zU>I&QSl6et7WOQ%ynpbJ0VLL6wRYE5-H&;3XKdFuKqP??g6Dn4PT9b#+Fv`$Vq11& z-HgfJY!6k(r8ybzp^dHyIy2%U08>^hrs?2)CN@Gq&!;q<-KD&;cQJyj1`L6T!6(Z; z>V7L&;J4E;I-?oMCvVq}?^j}wK(7;M&<05aD=p-fatLJ1%f_YH@A2tPUCu30N{vO^Z1noxx(k_IiW^r_22Y7-qIk$4kfaQp zo+`1Yc)4kWh;x7!85AH|d9=n^V~F7IvrvVz%tUj945vBgZ0+&DrlEykU*Vx7jq+&c zk1B-)M~SjY@~-KD(`p>Dn8P*;05$_})~oo4+jJ$H2Lm{+c1epu>Tui;c@-+5SHQzz zu{;b>W7VK*Ah%K~Y66Wo-v`XsZd)MiHpiWF0!9x$epSE?INXElOAK3}CCV?#4R5-vn=iR<&R`#&N0|6LPPFp+Y*Pkjn$Ak-mFoJ0S{oBRn1HqCn)(W0$;?stkZUN666z7!|<) z@0`|T!h2i2OBj&8!vqh1UrLKm?JS>+M$??AEu0GRe`$T1?8UzPTvoBOy0JMM<2lbh zblXJ|_H=O=yU7)BfHneWsTtnBNc-U!jigX8%!@8m@wZ>rzE~tjvY!^<(X5(S?&4$^ zenxuN=?C4;>hf>1F2@&vP>XfIAZ?Djd^%UTpom7Ja@ZRj^ZM1whZtj>_QAzT1mGMI z*CU#tjAWK1?Tpbgz{o&lC6g%<8XKs0?j#Z9u%D*ZIS2Jx$e!uGJ}G@K78wzTY0UcE3w$JYX1N-lG!bk86@i_PTvgEU7BRIFBGH%ZV2P1e@eNySTELTCDerA zoM2Y8S1?>gPT(oY$;Ao-2v(I;3>*WiBOgCn%D9T-v;@%0m9~)MI~`u52hzM)_H>YT z!o-C&YS@#w$F6J65o8_HA_FTgjk(+BM6~S@B+@}5X_ZffLCGSVk})Atcn2g3psN-m%_#!tSzjTN7JbdIW6sn!^so68&4 zwbX7(wi`-}vCc7%kJi*HTeo>gbpdpOIHy-j5W}2#)ns=ef-Vj=&MJ^YUlNjf2 zef421Ybz;yu^Gp@g*@@i2@uRRd$-T@-h^#sX#W6+<5Y*mfsgA}l?A1!?!y*b@8?F2 zc6gdXg=ssBNhY~j7_m4i4*`19OKxO~M9rvR1;)dVN|7m5ScVz#)Z&#zjwz%p;hm0I z0pln2{{R$QRg_4~Q!9)vQOgJl@_T+r(vY_vY z0InCq;yd~6o@$ZZfX*K(G6H!4Q+t_7Dpg8=+1UMWS!OHio2evcR|;~Z4LXOH!yMJ4 zv?eCFxs)gf7eE|y>qNIglB!zCf_zLdpN8g%G!eTgWGt<*UI09vyi*div9v-Z#6;oA z#t7f*;ZlZg#sq~Acc&!l82MGMnc7y3V$L?yNaT+%t}CXuUgfo+P#E9_=X};x+>@o~ zXxxI4k*7TE@2cJ<+gh}U$__Xq8y=kc(ALUkw0zCo9XeUDlDX@#_g0r?vqxneyU(ja zg)(Cq^{p6$a=@o%QaVuWqK!1ZqkvAForM&?c!#@f$4<0^$M}|YM%aF4=R57!>w03{ z-V8w_2W%X4KffQ^mb!^2x(&l=Q2CbcC43=ntQ>#Z^(L{lQBUrsr!6#P@& z%W|zFC^}dGHXeNOk1Eg;&-h@*HE7yBCA9%d{t+X8#50#rI9&6ddHpESSpFa@7Q(Iv z2XXVD-de{Rv4%{z2T0=>KKhQxx^|GqASz=#ZN~hZ){3GRV~5BX)2li6Z?#(8VbVM$ zdSg*PIt=hy!rGiMEPOsQfwvscujXqzXLVxk;{bv(C>{G@S8Z;`VV<243--Ts8nFD>*w&R zk03B9NH10HS`*H8re$OZ8IA`-nyfp5S#*r;lg$F=SfH2;0C0CFVN^(AE+vVEocfR7 z-A<8{og-E;>F%ntICTLD40kyjQ5!hgsO553W^D1A42aR%If+;~-x{~)&a$j$VRX{6 zYkk0M@wYyddzB>-$rx72{CM0`wkUnWZi}Q6iYy zvJGSrv8A49TEwwN2PKZ8MP^Gpa>k-mX58TFBduy%T(RhDl@{?2W#orA{}aq>_ah@dLmIf1k>MbSGCx)%9!0 zBd?!YVkE2*<5be)IV-M<4@(LlGEtI3_}O1K0c03Hd=IbGhHGQbroW z5s=3l9t}>EL9%WJ!>vLB%v_Fm2c;~EqVh&h5hn$8V;faw5x@DFnnVe+vo46O9fo9s;Le`j+=Zc$2<=% zXeCrgd(RPXU(+0Pt2AoKg)5&kzxAra7J^aRIXND`S*h;W&5^R>9Gaw|SgdN~X*u)H z)(uiJJGN}DR34oEzUm-e`Y;)MI~?Y$NY+=p=r-%?Q4STb70DUjJpQy?1a2|b zmYQZ5LI`~LaCS9l-QGnShIH??Xw4$Vpt}GwjOS{$a-fa#P!UzyL7hiqy+*jukWM){ z{pz|waO!dh+tR6XY$iF#8~J;^Xr%~`MshKZE3_S2wS2`Ax`!i_DoFuJ!K)BS1Y==b zha~5r#Z~o^0`0!}s|@gW+PRc6>0y!OQUC)3fwguwuAs=pwJ17Saf9zQNaibzcsclW z=9p3l7&+_BTBDQAbxl>UMxFQChapp)fMwe!YJ_0K5(dZRL@t5WJws98XL`0qagmzl zAOcTLYpbfR!&i5x1|w?iDo%1v51(4SbwJNkP**LIYEHv6Gcsds>HzN@T?xYN$^EEz zH;D|%5d^bhi{Y6=EBJ7FR|u4FG4APC&@cx0_tjZYWzI&}CnmeRLl}@8sTs{#4p$?J znt~2N>C{v@D`Qny05P?3BzddR|1A$%EriZUN0OJIM)~aPd z{m~;=l|rtkW0FSLHE82lnTqGebGhsBu8^SxxyKkZHJ?&|r&ANR9)9|}K(4+smc}z( z8iz!+`0qUiwUsWS#b6pwv)&tOkC;;!I*m1W%O=WN%K+hj&{ z?T^>ih(KYC@Om1o%Feh})9XquOvOVBcK}5gY zT#qfW@2{Lam}sNzYj>1n2?0Mk{W1F_?FeM{N3w)NI<3$UM@(0;XOJpnbRR01q!JKy z0qL41p_9~#0d?;X1^{QJ78Wd-1Rj~Io%W$jV-c`m0OFU1*tYTLYq2 zU__cv11B}v5)5&UncASRjgG*8H^JVji79PN;DUI^`J%Z*7;FVTbP1)71}qaK`twWN z-D`wlJbBz6gXc^nLQ8n{45;58f2~?cB6ks;*d7n}s-R$mDI}>F$=mm#K{I|S)>#Jl z)1T?R6aca@X2|mmkLyJeBM@~BByGJdG^q?NBB^&fV~qU$^-snyRxhLuF_DVB&c5W8 z!klW{b3w2zCJ=zm4%9m@xQT)g}3(e zvx|(YOab!dzf8S}kbkq_b<%-=#z&{VyrM}JM&}vZ*1JeC?l667RWY6NeEQU|Z5ti^ z)oz&|wRc*A19|)n1+CDMa5L+^G18xdTme?vGHsN0;Lot!_Ut(O;7lYW5bU>)~vDV zB!kT)E#JR))ydCIzgl}nSzBthHpNXvQRL7GBVp<)QOjWIARkdeaVtzV@Z+DON3N-^ zs3!v?fI8;59E^?)O+|LXxMKqwk4lEg8&xpcj#z=8byt zs~MBL1wr4RS}b5VVq0Q(2m4i81S1D=>*dBPmL-T}?g7|u%}e)=JUAH}d5T%B*<)hl zzh5Ey{KWI8Rz6FPxgqG9Y_kc*vaWr9o(rPB;=ll6zo#t z_^!YLyQt|$LmrJlj1iogUg2Zz+Z=)iI3D^O07N&8f==f-&+G20w32taR1uH+z;xU7 z^s3(5ja}gxBb;Y{)|8hGY~c|B3&wxX)+ko7&pcQ-<8Tl4rY$04Hkjln%6waYo$33i z29dsZ$OP@S{&Wc3NPsJxk6(9Mmb=uftiPb|EBUVTv ztoHWLa%R?`jB&+F%C5vH1whz&CGyqQwe`=fQRUrck+vgzq(Cy@v(^d|g zbGAOXqcm!YWRg`}Z@BC4sz&HxIzb?BklFpHABAtkHgn_nV?P>tD<0{>>c*3>&m-qm zyObR<5xSfoUrH0RI17w#o}hdwlx_4F)SP3d(B%B;8rEG#Nbr3&-|H1Z(#LhE5R0A0 zdE?fvFcT8z#4>%~y-~cm&O57~O z=)gHYM-^>Tqezl2M%(ShD(NTj3l0Wm~Mqea5*{n zP-cs~h{8b)$QdW$>;0*VWD!8D*l~l5j!rUY7bjGzk%dE?9<_G145816w*(*aNzWP? zSSl&cKyi+qbvFIwupwD=k>}6rLTMP>DcFU^4u5*n)dWXbL4tFP5s-dATTq?*?4VqD zuuh}>=yODE$TAW~OdOw%^*!VtnL)_MCxP?z{cEI=V+vOo;2hN@xjo)UKsj$J7OwvQ zORIu1FhR%lrjA-LSR7|=2TG#CstbY%#z-E1yXK+;F=t%1hV}KXjxbn>Uj*!T=dYa# zS44eEz_J{S9kD`{+HADW7oY_0IP#!~=8r9}I5{}@}-v!%FaV;I2l9CWLq;?bYQq#T@WRatw-EC(d#eC{Yhb1bZ+ZZo<1`pq}IP7(0yg9-cy!l@!WLmdR{#ejRJAt&~jcz+mmqUA=v1 zzk(4cm5u@aP;1#w0f>n;;J2Uh`RDYc;aQg9r7T?l$ZYM;zOH48c0jWL74lB`KdmyC znzcu6H8VGd0~j8Z+{n_Z_&^yPo}PTvs*Qc*ilB3vDoU~;DnJ|VXfWM(j>rK8cRO=c znmK1vft>Na!{I@-f5Qexa&UO$A3vc-dzjy0s5YGQg1)pkZzb+sNR8n4;-qrWz*i%S70Glaue`^`^*HBO`IW zRn+Mk4;?(}$~xeWeF8O@O8SPyvJOEQ_f%Y7M-*Yf40DYj?rIhkn0MihPUCWM`qaZ{ ziwdb2VYxXw{ZR1*nbLi)0g!2GnU0U0F|GT2d<*5gsH_jYYGQl74i>wgh@{j2<(ZE<%oQJ@h4+ z8JGi{8mw7W46$UMNX0~xvPi1K85ubvYKw`Ew2n6M6O-kNPE9FzvNL742RI+UG}^kx z-QgsHIL&p`BI?;j3gv=b&^^3NmO$Doen{%nzoa|#r{9ZpS1#>91@ z%$kb^ActH5*Xx=}KFozq=s-T0(tIZ>QvZYZfMJDm&g$nxv; z(v-8imAgh|D0{vX8)et$1BbGTIAB{ zoSpMg3ipVm)Sr3Uip!PJgN$Q2^re>BV{Spn#>1!1qSgYZ@{x|GgZlYX2@;@UyqX#$ zz3?u;C>Yb{{*)W*V|fy;d^)$m+xMf}Kw%gSmB!1CC~-u_b1aL~029<2rRC$>F=o-c*h135aOif_iV9f2pkd*lv|_7~qU!BL^QEwTihZB!uV(e?Q)}qjv-h z?fky)pOst^$>CgJ-~f4|uAsOh81kr)zS>A0ds6aUGE5PdJNb{VIzzM`>+w3^X2BZ; zz$1EYT(U-F;DEnd)LY}eSc0xpWCw8nz103V}=9XU0xJ8k}VVgL>@kWVzqOuKwPFE$mCkqD zB9>btEUT*;6}BU6=RX>r)StQ08Y3Jr83!LaZpLBUsL5{WcR9yT^`_(@vIgfHZhxf? z(OD4W@^g*2`PJ^CSzpNu5<#p*a`>Z;o?Djy5pN%ukPfBazeVG{guN5g8Z&V2VYqOWdSt zbgCW6Iuf;GaDLCHTF`?s=UCdqW^40Pu^eSf87dt-jK zP)O5AMh`<@1byJWxu3T^s<^g_bKJuCQH%|}E7R8#wZ!cto3S}H?r*!NV)kEZJEhtQ zB`ttA|WNM&UM2=tT_0q236d?83WY8mqNWtGz zXJgLU^)zTnDTY2F&T6uuF#tDjKchmyMj(s{HXDrnaY**U7@{AC02c6*o}A*VW^P?0 zmNHa1&PfFG{i{X?aU&KRdTRIx$@qO#DGW} z^q|>?X!S_?nxa)ETkABU0TDcx!uN0FLd`&@CWM#u93<|-pZk&dzpkayo|I8*=KSX{}>YJG+8QXQ3Wd^`(z!Na}mgqa6BrZSbqj z8JV1xDkM?{4+k52s=byp@;@=^**$(;Y4~A^1=ASDdS{dIuDMe2vgBhM=7ZVMcMu2* z0{fGX)|gdb!0Ow|tj7T3o|LP?{{V=i1P<$X@bN%Zdx4SF9ji*VOS$7*`^V28RmICh1-U#E=BV&`2Jp8L#3$E}oxd3VD z)6ajdXtKX|GDsL`#t6qBTTmK#V|gcX3aB_4^{(uz)wziGhZ1!eJXPdiWXx_d#~U1R z=RlMgZV{Uw6Tigfm|q-U{laff(-lvy)4fFs4qOMg7}zk6I!-G$57Sjk0l_ z>$}-RWEjCr3X6A})hyzPpl&PHPkyD8Fh_31;hx{gE%tHcKWwR}6uz%Bsl zPx+yT@tSjj4^6N9k+wQVIL z3Z8y+8SY|NF}#Yn8@HG1S@%*~o2_y_bop(Ow_N>VqRnl{XH+<2xg?x>>B*x>XU>%l ziJmtA_|=#&^%xr3yJB zn|JAh=|+~-rF4-TAkOLre_Cj$#&#|!gMppRbq^vkN&aT!pGvsja0X34U=9v5RslB>sGl;m2ybI^Pr&5v94XxIQmpKN zgu&~$t_t`eoH0Fdjl8P2QivgGik8MU6urFfGY=38j9?7!^RBtO7L6PVz3a9IIP%G> zI({JNe2w#*dVA_clw-Tb2A$5_(L1Qs%Q49EB=baMM_dt*cs^A{h$ucRi~)n`R>n5~ zlb(j8rgA|bp1jv<3mGnPr;>3?Lvi0kB-u$E6UUuJlS~&xs!W9Bu|F-kZA4=%NCQd^ zt+f%2>LYn1h0-t-uE6IwsJ4bkRJO5>fN}fPn%%qQZu7za01i3Z&WWWW3{`Lm$v$3n zFaf6_wF9_4DpEvnN-$s!HmV7ANEJp#;QCeBmNm;94>MAyR(A*8Q-PfIsQjK8bh<*c`qg; ze=r4D>^Tef^)Vy(uc4uuOf`!TLQ>I0Out2>sc4R#ddL<_)sGwu+jnF zJNnW$zQ);G-ml_ek48KpeExN<2V&U5JA_m$;GAv`K3S~}(d?Ta!iWMOX(KtoKc`CZ z2ljnsX&71tBP)%z>5gdKt=X2aSP~H_E zf9(tHQcKAtx9p`cBaAa_bMspDCDp{YGMQy!%z2?#S65e5jE%)bdo%9u*`ogd+o*L% zsH){X{8!z6&h}EnYM+R<1;$kF2H4-NX+hY9?y)VhGUG~*A`X8_+OX`hu?WJb)36J- z^{p#QYk1@g@{L*4c_jY3Q?Nr6oPa`~Gm7hkfwGt_BDaLEmzOk`;>yTKDq9<4r%mfZ z+IX(x2{LJr05>_$%9uxi7(^2pKe3?R*d@+bzFRq7a6ejD{{RJE8>U?-q^KKb(ywC- zGh3@HpdJ?or>~tk9=9rc&{;NZvCqb@42>yfz&cI<;}uD+gj#T)o6OM?M3pc|0FFGo z!K(fp9O__odFS6y@OM2*^KQyTK{+|4ZWiWpBMv}rc*!3+Dt2-R&>Ura#%R)r5yX-a z-eZxU?^Kxgk*enkF@v4YALhE@UFSd?sZo$|pRe;nyuC=}RVp1%1Rk{!8SWT6N&FpN zUPpR!y@;;N52XexbrKdY!6Yd;$FDRi*1Wf2EKah=ozQ>}&W9zLlna#InSUTB`_p!9 z5e@Z=-$dV+MX2$$*pwq4lv5gO>^{U4ah?jXw05{L2O60!Ebd$NyrClRM7*)pk z_|ROkyCR%w83#NXTk*`dg5FImr*4=z>+YzNN8vm42RY=PN%+wa$`ez>tO&>pfsQw# z#~R~Qss>5Y0pM3$yfRxkev~VFr~;F#N{$De8fgiPvBIX7TED{Yb;7kk}zfm z#Cn|j>9A z;hl7or2haWbM^ix%P@GuD8z&i6!HyGqL;cL5vclodeC9LChzdlM~%NQJRdLfM4l4t zuMsFv<8hqtR*ESRf8K6RNyi_pQfO^}V1M4pCW`*k_hlL zk`D(WhaKz=P8jTPHapN>?lfkWQKwGC^#X+%b`s4DLRqun-x~~i(P4Szle@TsOD~CX zLC4C1ZQJpcJe3t?Heb1ReW2+~o@u zz&v!%HKl(YlE(;^LAz>Er1*%e+tR5vwNoNz3KzZ?aC4~0^di^{-btP+VQ?w94mWP=){M+Zwox9g}cJ`4- z%Yrbu;C%gSM%v-xMN5eh3iwqqxg)Q;ifS(E9HGzgGIkvA{%I*DjvItoR}S3@=NRC6 z(7zQ6T!&^*z+`IvZ-+{V?;bYp)-uXY6UB`Ee@am;XJ?vMkh9D~MhFK-Pd`dGWy2#Q zemt0aqCq;q7|)RU_}3&aEx?%uh}pbDVov*Yr_Hot;be)sx6Y??lbj6jYPTX8E*P0| z0_i$|=cxTE)5gOQ+_H$IIM{j6KiSI2O}-i+Lkt`f>CG16Zt)omB_#t>=La2jl0hifu9lSy#gyP&|cInHulIe2_pn!%QSA&w7t8Y6y8JNb5TDBc05+CrQRIQhb5Hs&rwJ17Fa@%iV$)SUoYudb`i-e z#o>sdB!QEhZ=6=ChVf-)c(rF>Mv=c-m~HPMQ6o$arNPMD&~Br+g})R2`#;Vw2g;XQ zgDmUc#>xX{NNi+zA1Zp*EKal9e+^qZ7RV=WUwtWh!sY(}4y)r3-F*1v|dl-yhe zcLP~{X9FIeTvhCDExSTTyo+=rZ29#Y(Qa>HEFuL9!gmKa=bU?~9?-mr<0>3DZ6y$G zn#Q<=ZslniO5=vl9enw(MSbe+B(?Sfv>cxaE2nY6ZS%c+Movy@$s?k&slaY_s`SrF zit4ZKOAq^AWWA6eW(r*ffAd$kyBqAsv3npX?E6H46b;6C9`jor zr`c~c;s#Jc5Hh2t+3Qxc>}!jggP)yh!)n$k9C9NaWSv>y{OIP!=H~Sc zvxSdN-~q=@wOA}BhUj*PyjGL)=+lC6x1Cw;FU{PHaomK!00K$h*KV}Lch|bR=K?s@ zKpY(7>-McXTiC8xu$dI&f&9nc=}O+*%QR%dtdeRPf!~h1?NJ;BW66^&plKs+yZh>s zTFG&B6TsyFIXmofM%3-ka~iWVM)Ioc0LHDqN~ES?A&V+N8k=v+_3og-ccL*IKm^Vk zC*}=ASF&0O5g5#%l1ShRMhlx;f#1t=vCI6+q>#Q`c~+ZW+u2DF*QulcXBhhEC^t8A zME?Nxd3-K1$$^qjuS)A#5p*7j=NMvbKaHi*>G|&MoGt7n}`vja?BLF z4anounnm7Ad#pom-)uiA3y)Est^R6Cx0mJFK~Od;t2^gDew7`TZW9*wcxJ&|^+x{PhXfCc$ zTPulWQ;@jEel&|(cJ<7#D=vs*bAU9Q4D~st*Rro|iJA-s*tX%de9dY0YQr>4p#sXg zInH#RK>e$kCb+pU&M=yKb@keZe{8}cvBBQR%r$9j6&cv>eFnm^64vQ1lIDATK|hoc zzw1v}#dh;+Mi2w}vxYoYoW*2|y6===Wt*HII$f+*@v|!yKz0NWPwVSMn$pq;{1Jf4 zF`e^_WBL!3A=(xyjSbsICSmzVIMLS}@4Z7^Dc5s6nAAI=w;g(XesraU#ACD!Ce+9z z-DC_0AFoQ^GK*+6mJGSmq#g}c3&y#MJE*pV2G$AcD$drE+LtZ>*^6#B=}KA5BZd2n z_YtrKv5J4F~YObTUA zG3T~xW3c6cJIR^MY^P2RPTbY|FSji_V($9h*$TC;F)88s{i&|Ya`P}k8a(btr?1AX z+Jr<@LYbNN9xtrznzRy05-c}U1vtka*wyB=ZuCzJg(|qx7oT?fRib4Oyq67tr+o3o zem-hIc(Duzc}VYvmybqY#*t84h$=HIkI?sj3I?s%cJ$r+Af>agGv&U3H(8fx>kphYeK znH_YItKaA4=SHx@#Tq)ST8JcLcJ%)MO42P1I+G*JjFXzmYgpv%71VTqFr&}N^Tji5 zXKxXCZOC_Ga5wjLGP%0CBV*KlqPi8h zwu8D=GLgX~3{w#h(SoP0`Tc4Db|jJ)2gB~Gg&8Du=7kJP5AfrSf|HVUX1aTL<=K!o zy!z0fwuG0&f=?FUbTw$^vI{MYE?O}z4 zk*U@fNji-i1QC|p`Bfew%Y~7U?YRA_kxQk!xef@}Ionasl`+M24VPXCI@ITmF;)l! zdSk+QZN&&iWLEDHm9j#T+>CSnE49M|DoDUF;OCksWpUteea5Uft{DRy)e0OPB&pB7 zxmQ7V+?K|DcCIO?h8u619pp_S@}wx$q^@#)be*eTej`X+LcFfWpIT-X4J)*RNgIGq zPwT}OD#R3gsmk>^KS0p}fOEc2ttf(2xSLhdu_MB|H(%D8h%iB@<&QON{4P6CE0kSciderTlb*hOGn@C_!9Mq6Y3>;&cq~w$+ zt)+pi^{LoMg7zG)d}GC(uxs?U>@GNuvE7?IjHWXJY4td-XG7vr+On;a_3)wqMXg#tGtxjj2Nba7Jos4;UvI+Nl`MdDGBm=TxgPNG* z2w09=pM6gJ`f*g2c;i+s-cX@^jMiRtd67UM+-f4@)CJ?g1Ur67@(~s>*H*i9#MzXUE<5wL$ z)u(K-ET@DAc2l_@8ZE-KvHt)HO(&toLG-A%w=uvGUkIvpLSoF@uwY$Fci>HV< z#;o+`9QCNSfTVIHk*HN~3G?4-Wgv+(;vzA=$6$VS-Tk>Nn#M=w8RCI+E65C1>y3t3 z@C7e6n=>86x+QUiAOHyZ+O!~MbS}e4JAs~+6F?tz!1E+z?ZsTG>&ZSQ7y~pZ&vK1* zBM=jCzojn?ayf9ZI*kAWy>E70g&~Qz z%dXq=^@_Bn^5zGWXbKJhC!o(h{i@xc9Pb`Zlpt&d4r%C`Q5vg8O9DYT995>2M#>02 zBY=7e8cFzNNarQbMgyK|(#DT6v23se0aI%NL#V2N$CK36u&&y$bt&UCx=kUG-c`h4 z<$WoMbE5(>;Nv(n7@~M&$Z??YpLGi1e-$dMZc5o0OL3(ty0~U(@{E3dYa;~myMnBRA~b^$u()(Ea+(nWbqIQ&1CkCz_~9P z>H$wQvdr-XETrcphOA(DR+%e3iIF7XLvhCW6thWlZ4fgJ-+o39$k&f{FSTubb3LoX zV-ZYZO-=c@-*4+)QDtmo(&tKo+P38Wv>V{l!7p;)Dd2OA_0PVPvX!E=Yh7e#gV%43 zYg)+#rK#6Cu>g3n%`*kUNPvu->^#oYO0mk3!npz7Rgp)~c3j#vtKi3tf3|bRJY*QE~%hs-utU!$6G3I~0 z0`5@+MHTe1#+>}T>xH|?7y?CB-##4Y^{Y!BnIb}=&N^A`-@mgpzUM9Aj@aq>jj!i9jEQ=yZ18dc=1Ptx|wJ?og47k8Jz~KC- z(pe;hosK~ujqz8pQX-$qTjc_zHh&7$r2^)_gMns)pR$OEam4NW?$2{#!BP6WS94KB1KAwh>meUix#uZt% z)J}HK_5QVcD^-_N@(@Nbq;cy|i)ygdl50OT}E6%lADuttnxW zSXH55S8=HMeCT%3+rXjaU2bv!&c}a$ofYn0bOD>Y8NnmoKh0hNBfd}^frFErpPe2k zwX(Tl3XR7@>roWbcerKSa7j2HDziD51&y^4u{>u#U#&5q7_>HV=y6nAcw>yH7+f6W z=bm|?SeGclp2@9r!;RnTCC~<~N zoN_$HQPF3NqYur#I*uw)1ah(HdC8(m`V?$QCtxT*NwDtuIVZ}B6;zfd=R>{T0-$8J z!muE|{{Xcus|Hd@P(kGS*2R=00V1}N!*S2`r!Wr(^`ZA=WiF=~>F4^=@y{yUFqxDg zI8l+D{R(ao;OX$`PCBGklAu|VCTsE>6HW^1m|j<^T@?6@H1Sj!LmHD z{b-^vBxmy&sCCrZO89Es;wy;D4McHPpxi>TX(u~%28ilPX#@;aE#zkyY-DqfclXT> z=u9x`*Z}SaS~N|RU0WP^=k=?C2*^1VQrT>A{%e?IV{&uQ)TqLMGx0g9IcV8JjDmOK ztRzNI!GQ$gtOz_B<3iBDK87HkzuKx)hKy_9IXv(B(Z+Byx$9Ms1A=jnUX-+Uu5}5e z)~7fa!TI&0#}rOcZc|)l$?RaD(@<(!8>(1;)IhR zajCPDh4nO4OgUl({CU>~K_-E_d-IC9AZ}?Ho<*3DbDo(#zPo>lV%|vEa6d8UCv!%w zK6TjKnyT&&Pdx2b6-jmD!PnBN&!Iuj!1bxOc4az-2tIUL6QL(1^r-2cwQPhNWRHGm zX%v0qlOE>>G*wj@)BDubb}RsHITaH|vPM<7s)&_SNGG0#h^?tIzYNrX0Kl%zao-}L zi3(0LR;Z|MH{ycd!j)Js!)$VW+*G`77`$(}=k)cfqvQe0b@|jQxz&Xv4mjWSu2S+K zC3~~#a!1On7kr+2*D_^+9FD$~5hzmFa>G7+Rh*79gYT-~XbduT+k8@X(P+448bX%y z;Qb0cz>!;6V}rIcj8unk{v`P18nUyJRG|Yn$vrB{08BFeU8*IORSr%vI+_c*;YeU` zFna$0TJg_kPyYaZ?--r6=>U&P@>O!AqXMFiq!k2U`>0dvVWK$zZ13lai*=bW9rYfg z12ikRq|~l4r4N@)zs*}%7TdN-JLLZLpK}@Svy-^SIl$-W)3%5-=saZg=gOLua~T6U z#swjFAb8e2@;S-#6_I)#I3&}-=Y5C2dia~~nc6a*)wHu{C^J=N{|3`o8_oUfm$@}^{Ug>a+Yy(t~Uw=SR%6Rz3Mtufpx zk-lI@~S}c&c{n&IX!>PGA-}{B! z@f-TpppGyIBQ3t8o-@64&kmN1sttgNUYaz+N z-<_z-H*&>f7>xSo-MwB3)nwGpLY={4cNq8AUEJt=#^}Yi8}Cb6MAs5`tn54|Aa$lA zjUtTeI5_;ejyb3e5`xRSX}|)5EW|N#{vK53g996jh|0E3bAo!)m+)rIikuv5f7jzn z!n1@0Nf=z?R{Qlk(@@$2rNd)SO~5~`3NvWFCaZE& z#gK5r1nS4vHJ*&{%3mi)JMG3r6H=RkNh1dU6V%fwA!s|fFj$-npM4V9V~pWc4|QHZ zb}JcWED6E&sS!H9pyvmi3L>hh3#Z&`gD05V)`6&Zg^&U^0|ayBN_Vo!d;;oZBanV3 zk@lJr-HkBOj|Rh6r@!>C%`dzRZ6DeN`C)?66V7YJeTgo<(pePz%QEBVU#MSaaTDy_ zle6;@l5@!;-(FnG7%Mo_q?5VL9WdS?aw^{Xf^fij&?gfRRTu-v_44aRhgWvG$Sv0u zVYNUQ$OPw|_oxa~l0H?$c!3z_dXs<-b6v3jRJ4%^j<$0StL9Or6)z_DD6 zj+HC{8}U%XP$~`$4rfSEWNpw@i{UkAVm2gIv5+^a6k)zeKP+=ZEH?G3h7540J!_eW zV4!C;YJkA8UZSTvk)D-Q3>f6?R;XO(2N|gqH5ClOdGgH#q!NWx-#eU97ZFASHhpTq z>IW4?)aN>ZQN{=Pq6(Uf*BS(pAbjn%`2_FHL~e;Dl-xH;I{BRE*15UqnxunS*yG6h z(J@QRWYjQ(sUDje=+&caY8c}HW3Rrt={wj6KsBE;#a0NmKk(C5t+F##QXJ)5VdX%%RE126La{!4{OASQlrsRz z+YydOm+4E!Q}L|9LXA6bu=1@w>16RR-``Zcgfs_A<*|X{J!wUOgM@Z&KjP{0rVI+O zvVo)5J$`gp-ZL0d>T$O&Er7at z7DQ4&C#WMn`e8wRnX*Sr{{Wq+Z5nr&AD2iQ9ffp)GzBnDt%qNgAR}hFbUD%n;EsH; zP1{>4vuqBX@$2rcTXI?0F$J@Y{{YQaHI5lD2-Ua*QDs=786TUj4o}1U)nYLi&RGsm z>E>#e5~OUnaHotOpWd%$6lmf$EI;pOA7AF2c=EwH#&#z;->p_C zWF&?IW5675N=kwax32CVcVuJW>igs3613ZH-WrLIb|jUyqCi^50s_tGph zN=t!`ptgPeez&aITNfG2X(y@TiXsc*3;pE|rGNf2oUaqFLjFLM`o#iJ~^*qrlB zTe(Qe7ToRb&&HKz1h7y@2N^r(kJp;L#C__9QVGBW9uMnPhTbNOIgwO@oE&GRT1XXw zv*%-jzT0)ED3HXx$QsW+E^+QPX?$o7>@m>!QW9*-r<1YY)}gXtGoCz71SL{HqPJTxJC|RJ{QjQG&_jT?egzeBnA z`co1qmJ=Y1=+7Dd05q-26W|M{8)Te{S}2f2BPC7-!#V!6%xsFK7f2*?#y?tRCRo?H zECC~uc|N<+g(r{+^#H((5!Y%0Ts&7eVpohdKU&a9QyDIUBY$6q*Ay%1EtMBg=OB?t z#>!+xkCiwlr84&^oE0m8ch#E8xr$bP{v{;mAm{tjma+hYyj>x>9)0x}3mNgkaJW1k zef!WfEB-{l9Fi!BIPbJb0T|~$I*oSs5i;d<>Ek?_QXnG(Tjx%AwG4at%83M)rkSms0P7agpWk-{D?<)5#5>W@Q0(V0Zm9S+RDRj&=))0pA(h^`+hA zx{NA}5^_K|9Q?e8#+~fwmKPHNmjIKFhv!>zyGE;}cW$}!sz$$wZESG5cHHmkJt%i_ z$*e#yr)}^t<>yRA6C&iDAMsK zLm(Mg^&O5fHzKVpa(5@gmm_oZeieIdLf8pBCm6x$TqIogagbc8JCjtzvB(q^(oawF zY9$iPpvU3IQggTZQwyx9+-Do-&ZbQOg3JK`<0g^0oeX6`&NkTN^8y#06tg^DslZf)zT*!ZuiE=B7KeSQ@DF?V97<=Qw|)B?kRX;F70#!9FS#yK3)SAszx zK-p&5y$4UPN^;UkwIou;26NOAilLf#?j%_AB8&nF+vY`>4=K;D#2i%q~&1 zA=?LTI#rpBaXgYPNXZ(1)`Itkx=kZaKqGOJ`qgaV%&gK9S;njqd?(>oQyS|iFv0Ng%3o$7dr=bQyP+{SU`|w@F0@3Er$+AbMzAs)A71KWT_)X@L6pqry%wGq&T_o04OX;V!OnbFiRTN={-4hEPd4$fnhfk2c2@7{t2Cz$=aTAFWdC zkr5z(2*ys`DLX4QF{_eD8;t(|uezN=tV#gb70ihlX$U)v9B)9j3vc1nG?qWp9ciQE zP(ut6%|s>4UNUuXXm2hNg5WZOG4yBvPH!|k*j5AHM_Of6655qc*gO99aOz21@r>uz zps-aNA9Yq48Kq@mwgDcVht`S?Xe%K}N94`V%7=Y;i)4W-p^g*x2MzTt1*f z0Hd6WlIRFhz#QVJKi?1^rbwlwH=m5~97XV^i1f_{hX{7(X_OC z>@YsLr7otO1W1lmRGjCWd7Ph0ce9meg=Nwh=YKArUkZI8jTZ`_1I=FxwlSP-?x;D{ z=|fqIPGJCQ9Pd{}3d9dGbDys|9mLBU2$+!4Y^ObHQYfO!fw?%zJ!qOwL%w(SRDh#w zRMjQbwi_GqiinX`B|=8Rx+!%QQ_7qZ=U2|(rfF3&##>thzEA0!3*G92Q;1 z57(V1{3CMFzN8tzBd&jHaeJsD)J_y_o%&aIi87w;iNP5Inu$>)jDiMOU=l0QpJ;z% z9h2MrxI0Q{6`x+?QQUv#73ZGD`wiKBiDw)zK#>U4eo{_h6w_mkAm$a5$UEI)ucfj0w3ieHmL|aH=AybfY zc;b!OZ0rd`oh_u~?~K-wP+5Zmu=U=o2qyu7An#V#9DHh$5gcqm17deHtSlk$Jf0@w z9+YTVZWB66;N#s^x zRFSl)U;*_f0+S4m(aEQUIrOTSMqB^@{KLh~M`oglbqs;9-1YhU>qr0w1w*hvI^^R5 zy9YZRs&T$@YOcx&E;Fx|KTvoO;!&2*@I#F^qxfT+9`98h~}6Wx)r| zk`Wyk!i=sr>OLIwqpFb}kfRDVI5_Lm-&M9V7Ygr`8THS^Q%7NwRR9MpNZ)Gd3k+%F zsiDoQM}QK`>*>uWEVGo*R3j6C>9@bmsXVt30A=3;ZU#1?rO=9g@?tXkA5ruv()a;j zT?arrZaUTOuOYRFJcN>X1Cw0+^pLB>6-!{9xuOEO4A?9N_^6$G#RFrL!K*TA)42>c z2b@*3owz&sR0xnstOKhU&TFJ34h~7iMmF`OKMvAv>5WGuA3WA4wl=G2?EULU2Y99u z4*X|5KDn>U{{U~)FSQq_n<$yE0rjt;{^Zx{pNxf6lN;*Jb{QYyzRFmQ*Jq)Ll>qRz z5A~xh!^Tl$87c`3I3sPoys3`Nl_Z6VZUbV7@R>>0cGsRdQ4kbUoSGDc1bys>b#HbJ z7&?^<4nuM4RY0xd2RSuj<8U`4psGj?OO1{;IpV62Mv@YMh9kstxA?BOE~rXp19O3s z`_ebJlS6F9$5J!4Zog+u)4y zJw9}`%*fF9Y%-&hjAz!Bw?eWk)}#~s`0~f8u1MyzNo6Fv7Sy9Wdh_n4#nF<)G^0bf z2L$`J=C5qUq(b{Mc#CJ<{i{Vla<84oI6GB>s+`v!68KI5>p@m54zi#w#Qh&5Ny_NA zS=34qjDwByjC1dzERU#nYIoy(wjT`hMF7YF3Olkl$>ZVhsJD&8tix6?2IuEfawTmt zM<7z8d;!1t;;#(xTqYHPByIuTmKV_%?&Jr;+waW+cXMzii0Q!}EdKzn%9vy~C0v{- z<3FJ0l}mewClgz)wbTIv0OLFCYgNORQW-`EBxL-kAUnu%Kv(ta<;^d52$Yl&7I1J5 zzCifZOk_-rf|^czO`H#(r|D0g?ffjj?VJNcje^R{tBv;0>z}RZOXz#cm1uwt-9i0- zLreE@Hnp22qt1N4e|1(p1rS4oEuRV8_1}7KCh#&DKZsL4A9g-9kn-KfA(5L}6V7ps z_|A9QwYxe%sOR#r0|1=-MOkgy^50v`3o*zT;MHMB8)crasW9LRcCi#FcfSLonOVHatnG5s8Jbz4g7p7?hg2>+Xh_Z9Fd%Sf6Yv= zmdu*6z#I%w0|fA~18nnFVUdC|4RHrK&eb^I(twTpQdRYXzz2_g6_+dy`*|9W7k)5K zd8){+azlHCayAzYf#p)$F<>%6(3PCFl7&DSEvs+u=SI{Hz>UUg5H47brzWL|RU`sW zzO&Ne?WQikEMVgY1k-0FfOZ?4;~rfqg(L4UND4-r4}a-ZjbVt$%N|-jy#{)EQ6g0l zD=}lXbDVB})`K0&aYTY-g%KB7* zaNRRW_Kd0gBw`Mx^WalzPL<9w2ID^4<&Pkk+dlkNie@bY^u}pPuM*x*!|7=l4f1N(o=b!(3P46&6TWKEnBaHD!MsH3 z&ir-aj*J;K0vp{_5vh!Kz92X8Rbnj9$A8D7OC5Ca34%whRz?Lm>5(=E-&uT1VR-)u(@Nvl-RwNONS!7oO zow>trx9wV1m$6A~MBv631Aeqt?&N;y0*#3o8B%C=sL{y5F!{;no+|dLd&!njx}BRi z+ouMqR@zxLq49*$NZO&Ug}t&eF0I0mo;Tl`Vrfw$GAo7KlUX-OEzD^l7=84TM*fC} z6`O)5f8si(d?OnH@T=-UY{ifxYS`zI=|-EiAhwADC`NY+gI=clX!g3p+1oq5(2(RX zAgIpgALhOg`$6{Ww7sS68Kij~BV(sVM*#b)!imYrsIIQAuCA`GuXKIW3%9qKt@Aue-gSFMn*)NtF?tV~xL0op}wlyiSXuG|7N>J7Wa-{bGo0=91?*Dy4CsUp{F& z#8D|K!O*GkF2sJd)^Ld>R7UZ*&%1wpSS{Uz(knN4>M#yJT3Xk%L$jkgsmnz zlyqJ2e!pt1%&QbABn5GU&U5Kb6$B1`bU6y4C7D+v!$D0`%B(r)e+b`hZq>!9#pC-+eD7Vi!*d=bmQeko<`IRU(A^!t|)O|4ROLF zI`oWqw(_R?rIQUH4dgtiyLxR@xI*!e0VmMaEx^!Ju97(#v-QP9j97@G8)J}osX-VW z^K8Iio+=H*A=eUvt6(|JME30}l-H$Be9!fvm}El8W(uv09Y5x}OK5HxyTxEZ8k;0% zZ$tIHHls)gqhK&SC^Hbi=s9pkKs_pxTL~sdBaPcWbZ3zwMsj!?jBXLcbS z44V8)jkcHZwQRV$;cTq;tm(tk>fZHFJx|2!n?j>mDKp>2Q4n{fm(Qa;a zNgE}?z`JA-okJt9BZ{Q)iL_lm@f8Lad}L=hr{lOwhyuE3$jHv&hou#xbPL_FYz@Ze zJbb#)rXpD*B47$w0#uH%5<+8_7InO<6VzibSyTy~e z)Of}*{pzz^PL6Qk43U5V$@2RBX*TT?p6o*mBr_e`S5elRds$|jTrJj-j52|oADu^L z%Fii5aoz zm@V!*Rn$7*{`6>V*$$>)SPi`? zSz)_KH>lTbo#vjUU209V2~P`O)RHhC+_)Ndr8c z{dumqw-S!*DO3l47BlXwJDYKBaAFexvbOo>pN(o*z_za|__XpDsPY`qXS|3egNFj(m;d2v{Bulc9SP#jXQePVC^w2 z&V&nsxC2n;oOys;JE?QRf%2&C#Lx{VY#$Gw$27dqJTIy?(-9abPI7(u`pr*gei>3m zicLi~UPKirEJj2tq-;UnmeR%5gpuq3)&?*>wxM52iy4egg-VjGr>-kH*=3d; z68NGm$ZS*SAz5@Xg^UfbeSGS!R7lXS4y+sjxCXl7*IFe-G^j4LC#L!4_eZ-Rb(p6P#wQFBY*E%-JpVJ5h4!??}N{u zT4uu1AqKZ)K^Hq6y!z8OSGMp%W-F>V)E!M!7?WtI#XwDdnm(O1;aY3{)TtHAP0BQ)8Knj55kaP;xc&8TFx6;M7X2`<>=ufQz>cZhI<%-xI@$r@ir_bG0?7Jx~ zBrwY&ontIc;14WjwGsv!NCU5!+J+HsH5k|ouY+zXvfEoLqsm#`KPUw3eSUO|OLHaZ zn&L3gs4SyynDeXljf__lCE-$4d`vZY`>JM#@eKM9ENXlsKAY{gS`1y9WtT%8L;1Zw zU(&Ro#g>@lRanWulVAbPapzUKwQL;#IzQ$Z8+>Xkt&Whvbl~J~@%YqUM|9xFBZi5N z`crfI*CnC{jTsq-c0f9g0nT&H4&vy#ye0-^Rq-~UH_b(&GaXvd3C@(jBoCh^jd1R5 z3dJxp$B!1DE%E!(@!Ods6WkHF++zgu@d`Q^cj`%nu zow@0nR@U9^Zp>ZTRb!tMYA2JLYU&9L%;5>&#p$1o2;BY|JMRo_lB66F^|uxCzuzfl zUtu0n*;yq}ql|CwuZT}L0;0OQrlnU=#&_vPiq3a+UhL(L2d#OBvwvoO)b`}jeiyS` z#_gw8r2eg5?)yCZw#yCr-S+g!aR6TwND7dBNP73jvtMQY&GucVa=o7tkhlSkPoE_D zSCrd(KWLrWL1C2et2(e>PBU7zc2UJRwe09!HGjMe`nUBao$Uqh<1oh?Gik=K*j$b{ zt9D(eNQ77dOl-{A^`<4ciaTshz!TtL7=xVkrS9!vF!z?oz-^FZ-#+})5XCfI-0{!c z#>z% zz(y_8Q5iZm+pj0PU0EkyzaZjVIj!yfOC(1K(+A`eK0Gq>;3&Imo|4c7V=GC+Oy)p8-ed9r6$u{ zPRL6YatR=wJ#j~lX{>CTNs~_6oR(i1FpY^l#JQPb2GHDEb*W4ZhWoouPAScw#EDhB-cD`~GxQ z?ICq3ZsC-~GNV>6cN44gTTYmB%2~&}SznxpLe-Qo|TT&8EqH(`9p#+H?qq2ZO z&J*2BSXzt2Ey|XKS@%P~9=ZC>8tO=GA^anQD3dt~af7{=VurX76(G7ZWNB z7XV{FIyKutGMKyM0yY7Zp0%422c9TD5*4G)K}}ro&!tjSwU%J23ionhf$PcJ`&I6R zq994Ia&|hl2j{&^9h(nytu4l&NOGVZ_w+nfZ>$88lM5g@&ZD>k=gw-7+&!F;+esMi zWNjHBWYH!cg&Hj9Uh7G6j51ht8KHN!%cUS)GPc;xMmlrvs`oN>ToYWwX_;muGNTMP zJM;0Td%N|98Le_or3?Wa9&^8~Xj#d0CS|xl5fgXYpPdzNBWaZYY%=FpN(#wz{h(Q8 zPr`wXI!1GjbDyl$t|Duxls0>Tf;Z&((IkU98KeuKU>*nWLwkg`%iIPCKP#5beQ{E5 ze-NwOE<+6Dj-HjDbJ@=<>m<>4q!E%^W9T=fyK2fgtqTxP#@-avem!`lJ1Jtd4Jx9_ zl3+TohZ#Suc^QTQ36-M^ns!1sA3D$cDqbYr+X$Ub6LLrI=hCZb*_TiZ$lBc(D}#)m zp4CHZCB%hZf8%o5>NxZCHK_%JX%c|Jh&jpLsU5p5!O-fM@gBL~eX~WL64G~xAWZ;* zK-hdJt1k!`O8LRY*s3#3t`Sr&uDRl=o0W$wG-+N(pG~^eptzDm8B7pHq7G=J=?F@$ zra0Yz$^NxdGQ>c2!!hZ{zJn#=MJUc&ylexUV0)_5%PO~b3LRL_BL;P6oi9YT5?mWD||f^+hcksxU5C=TO?Za-j(Wbvm#O3LCiDu*3~V z!0z3`GQ2Rr9KtrRZ!AS#W3pDpjhQGjl(|aM{|2E6h=vA(4ZP`qx>RUeyevOB^2-5A108C$C!OIOH64G>y%V;wCa2 zfJQ$t-lE7`D>8mb*TTS_zJJ!526V>^y-$@(v&eub)2L)M5hq{F%OPZp z4iAgUsJhS{cF2IQus*rW&o3(gQXz1lbI#bfl+Wm;0*1x zH*eZ;D|bf)F^7EY5Bc7*ds5+TtmV5|yhTc`l22Zh@OR$s@Ll_1ZbAI95s!~G=&rQi zWvTp9I0X2Hz}M-o*oS7b{g?Jb&nI^i+Q+2{JDd;Jy@zca={h32GAfP9z$bo{pyUCk zPy~*ql#VIkkg}n5BaK+=@AuK+5{#0#8O}D(x~~~>Np;5iakXBdbmPOo+PTm+&76Dd zlmW0mGn$Eu1n>|Wrh3&PSv!&r7DLw=-_EIT2wazKO_Ij|kBu-l86y=0DQy1$FsLPg z{H#a9l)kp_14_k)o;v>3F>3lwfiq-Z6&vwV$Gw#qhftH zC(EsTh4z{Dr`rD2-Y^n0P?PyaH|gX$SBCa?WpUUt@bH75kLDxn{wUfxsJWg2uhs*qx8r{hir}&1$1S z!>WvQtox5>Y_G2ct*pJ=irwe2liJ^9Ec;5( zgjtuyH1D@N;CWZG?0*a+QzNJanzI$hh~pzX((&D+T{XVMfsjLI zG{Tb0o&g+ns=KBLVl%AQC~EBQQNoP({{|gquLV|cGv^ZbQ@N6t(3FK5+y82+ZFDA zvcIt&)9vuLy``qs-){>HmmYgI)%CyG$FV(^?6+nuy|e};00WlKyyrFSNF#*8u2TRg z(xl^mooV)b^Ch~=bbtk1N9hg_|s56pS0M#(Cqk-jo=bDSNh%mi@Z zRIvj91J9)jOPvd>sR4GuOfvc?@S0JQW`R{LqR-jRPGAyXsV48w2Vn4 zX9J}Ld)Zi{FhRPH4<1}mgMfC$6vie@JBLEJ+hgm!4XmPMD*KFJZhyTmGB9OESO z?yk49%7=Ey&PF0$NHcPgY#y00Q3kguHt;YECHCe=3fpdmC z<53^ARK)U*3J#m+`q5pa3<{>8N9F`=RC}WmFMAmbMsO+&%RFSqzB%8atIEz186zZ< z@~fldfOhbMRyitgaDCiVs|Fb!c&f;O$S0xAB{b1RIte4y;_#4hgU9zZ$Y(RMYsx9W zKS%2n*qAJOrXoG@x!SCfM&K1-b5wUzIEaI|%?{zFhBjpyxA_Vp7CXA+{%q>~D(V0@ zBoYAYLApBENa{BA{cA4THbij0D|J72F&WSDuqS+GnwPze zNr`d~Ab+nkmF=Xr5hSs$oMe&4{{T7)NLnLqS$1N$Cx4!5v9rf~3o#KX*N?A-IRc|^ zpplJ07UN^J4)K_k?j%%9?gkqa7g^9KE?AN^0&})~{z9~4wQlPqj_~C9{{UJ%5a@_2 zwxiVWO;Ii&Nkk;z%(0}mP<_#%M_fx(wLi06JNk!Xe`EZ}XDO%$*kk&Y@P zWj+mHG2?nwHAQmyRyy&yINu!8eivQ00Ms}RFdK2f@~V{pc)U(Mahl`{&aCIxZfdc^ z-L^xP9AMSMrmZ1{ah__xZ=Cz;NCa=4x8}Qi`d3ioG6%o}sp>Je_pFZEwTd~#+jTr= z>*&*V_rY!A1xu5Gk-_z*P0T7l)w^W*(Z=I7Sr9+GRI2G1QhhT*wP$T=>-k$_=SA?6 zc*y3U?)z>A#;sJAR7lG+Y&jyVhg4yJ545z2CU<7Hm)iTD~jY}J$I@sdO+0KBd--+{a04JDz1E4@}XPbMKromiwuwm8&&0q zPWcXSJi1Y0h$4;2AaY6i>p=k~CoD(|cHfX{O|t6@m_i32Rpgl>V2*bqKKit0B#a+E zb5*z!7@I*EYP|jX5WLd=ZV04axoJu7D-oTDb*x+>HHmR_VQV1~F6&v4F1I;;-?jY~yN#8bDm+{xz*w6j#rMy4A+})l^~FbUXE~l|x3$ z<}piNJ1w@Dk6aUv(yax!T`ulPQ=V`sh8mX~R|A#U@v*KyoBeB!PX`qmbuJ%&QMG5@ z!ts`P-w1to9X#t7uyGvMGX(-eCdBVvNTA4b$j*4jogX6{;)3LUBpiHXZ6Qga@ySlC=M6_wGhG%Kw=JaQLAy{C3xL> z(wC4(7&#i>_H1#5($FV9;qmES)wP34=TeIjWNzMVQxCIBzfQ zLf0>Uvo>&WGCcghtsF+>FkI^M2aWyoM@0yA9e~`EL9&OtB=fl&Qv<{Spvf~Raui^2 zb5;yV#xir9gZ^srE~v`ngN|r6>)k`8q{!9%Xp9t$uQ?rYL>S;>Z_<`|gl^2rNdEvd z5q%7y#x#{U@l`F=XN;?r9(gB!KD2hWDHrhM(!gU^*IJ})By#s;g(oMc>rpdGmuk*P zP53nSl_~)n4u-QkNC@=F7$BqXlbrSIQqyWyb;jW5e2#z8j<+B{G_U1er;Vt#)2xbj z!3S~WT`NY(s2(@T8KB&dxnUt0+w*UqiLCTzGiub|6VJ!XdU@pMR|u-rjiSlQ`3zhp)%uN17dBMo1e5$m%Mvz~W8v0Xu<%jBt6X z$paR^*eD=mb@yh3&G%gO8ETF?P!|1(4ulCwyn)@vB?NJEU|z6M#tDY9wY+ zmB2ggicaC~3$8E%oDIgu>lJHlVnU>YzU%a9gtb;i)&ScX^Tkr$69vzWfdi=n`_^x0 z_p2-Scm%N0ah|@EYvj0^&j|0R<4_$o_xtL5GW?Pvl~r_)7pWNf_)}K^7|X}L4!~69 z3`}&Y5C>iTD7N}s^aaq4N9ltmJ%f_C$u18)=S8c9A!^!@86+6&e&N{Ds~ zw;T2TwfVvKmW`wPMY}Eh*kC@s72saV%F*`4w2C(p58l5{{>NmR^Vv%WafR-eIRO6v zFX>*uJB>NP;LtnfNf~em+m1o{#WJTV2qM~gmHNi(S6jy_)ctVj5Tn{Qm~E3RP^s9cZ*23R|#1~Jg&f^+Bl z3N5pN2+8%|YM%7A*v9@})`s%CHWfkB$jvbrIzc%GtPX2{1B&Cp#SPKB#eGK#H>r#A z`t_@Wnt%pL>sF|)s!E;Uz+yb>qKP8`RBSk_INLjIK^GAM%ba7N6mUj1uIp1mc~xc6 zk*mu!PW6&vB_J>sN~i?v2p{YF)7I=Iiw@ee(2+s8x{Anv>xDgYxvPeb=>x{c0OxMBG>=>9EZ85L zK2%8UkzZCpAYzzM2OL#hxd4th>p)w$k+CBHbBvBE(oGbA#veK79#s*fY^-#Xo=$o7 zqQssP$OPvZp7Qu`w>$A6!?m|; z5rTU4tf`*h-GIz=KFj?mq9zV7aHFByZz^N($jyfY5tEPazt(AEX%teZ(AXnyBSseZ zQ7BP>a02;L7PAK@G2o6##^ah=>Snldi2ICyIQaALr0wj9oz_rw9swug$)lKMjk2x) z1Z|!%@!K^$>`Nl+ZM{z9jn36~m`Ve3eEN@(s=cJK$c}TQoaY(-w5|Mo;TXmjV}|QO zyM>l4fwG+GJDxrMl&nZ~hj+ln`8YJpu&9*^IrBz@rE>P}H0AtVV>r8hSFCc&ejNmSFkD*Pqgt4Zl zd}Cpg&i;P-YAG#J+a;S`bAZGj^Ti1ZTtc19*;3qjQwt=KK*@zw=X1Zq{Lo>XBap-u zJ7?eV^sbI{S!7pV5E$E6OXU2Dl};kU2LqYwxCb#=hl}bYs4&o;{=T30Q;!ulep23 znZ^g#oeoKuIgAa@Oz+l$Vn>0nLq6Hxa5{fVEw_Cgsb?T*8b_AjLW3TeB?X*gKa_gn zn`qdB9tcf2$mgCp+Nz8ra;)76&z9fft2^tImkglpc0RQi3;;3)8cE6W1pI3X?&!xR zH0_*&)QZ~d%b2IKWX=w9p}9Hu(65OJjXFu+BdEvM&X%>32(q$`+l;n%@}j-GAw;hr zQMZR53X8bmGxv(&{D?g5LUA#XbubHzsmT8R>UKDmXqAetRB7WM)|ZwT;djnQu1>V(!gxl(_QAlw`uEbYM(Bn; zm}4U&Iog=FjR}yk&QAFl)wi8R!lLBmRBw^1j%zaM*_ByNck-gzTcJ}X!1c~R`pq4C zsg!qt0sdbz@v2X|2~LtaleT?%_tlJ1n3b?V2OFMutefbOWx^KQ%Wik`sqFiw!GsOL z$r-H{Q7x$%@d3Y4`__G|5Sf^qhh70YAJ&;RqF4bKQn|q=fnLk)3`DM^Y{M&&$wAFwo(24JUl(uh;Ed#3ZV^bq2uS8&Q>1Z=?#QwRtpvTOPX#tdFI? zhP?h}$lDcV5(y4YpnpoGYH{daUwkUGOovK4TQ&x{4h^-zuw|^PhDtB{NQvNBK){zok7G1p#at z?KwtO@Z``{mflGoSpW@36OIQ5{EWM(= z^AWhs5eZ-zj2@#rS39bMpDg04k^-9F3Mhc&?Oc4SgD!+*9QDOaNu&&%nu#Ti7sTLa ziWD+xb|4-wGI{5%R(p1tm5UT0{Kvr5Bn&_jvakbhDrPj&x^tT54UkmqIR=3wCW3w?;|lP$`6EaN%Z&qVy)SwOTJD^Zb7GIz*6LmDh@^~ zC=mApQiY9}j&`HN3q-;+{Gox^<33s6-%Zb_1H53Mf(SKEwj|;E2XgJJl{{RLCcSGwDS@z0guY7{|VcI-QSB z4tfeA02jg!xSjt1T98Qq;~sQ3fIFR7An%VVAlnL~Ve3?uHaRi2mfPJ@HUXPCJvqe= z>0PwxBpm0Z5ps!uH4(AJ3E_6QG6%pQ4|ltLsKYA|4Za2{8bwk8+@6^kt2V%~;~B*Y z8IpEztDOfM`O!%lfX?HlYH4`xk?vj)a93^o=#qyJl9<*9&ZaFPLIJ?@;;wwNP!#Gp z+#UsUGOi08Z%a;ENrE8T8=U_DPlXv%QZIN(VZS(`PSBUq+nnHnI(>fiF-E$T!yFN~ z$^B`7FaYwZODaY(=NaSHp^0TL8Oi>&(Uuuj#@u7dtaPhu&*s49mX3W_VH*PjImo6M z1`I(59S5C62N4YKx&7*8)Y%J;GClRmHVSzjbyjjR0|IlL4fd{xF&SkT*pE6P0G#z6 zwV!t9@^_kY*d~W9uZ-h5gn2kToxN(-mg;U8tGtNG} zXwh7WyeY9Fjz~ZOKI-gmRE=~y3>*`XPwiLXx#y(@a}I4P@K6I7blDiny8v~rM`JL%|C!J;Pi!dba0VfAOzLl&HgQ=T8r3zTf%v&s> zc*cD9p@>P41$=7pFwVo_O(N$9Q6mGdHD*vqCp&u7JZRvC2Y*~r@Wb7*Z-AtZeDmu} zkOoe`lg&~_V7?K826wK)s4c5tIupe!dm{o$YRe6ek@Wf3TgM~XiHw9f8|3+Y8iuuz z_hZmw$ZzkU$zt-%RohAo5~@x;{L{+uLRJBlIP%BW2BvJQYXdr0jN+k8auUos^{U+{ zIXK%J?~Um@`$09hi)7n#owz==;eTqqh8}h_^>+@6FPQ<+IUfiD2 z>LQGecF6wqi7I9A4S8SLZ?m_3x9yFEoDr4=RW0t#evbW~Sv`kmExh9aR19a#Q~uLA zg4$b@Zwilx7~kh#oZoK!q&rjF{?VIWRb(o^1L{@jgK2*h^kj%#RheC z%Lxf5W%Qw2KYX3iw#%~>8xOBaA@7pwV#Xt}+hOs|Fy192eZ^kwTxmJ0j!(pM6V6B8O99cFrklo1gnTORzza z&ow=jeI4u?(SgCnMNId$_SZ4n$V$Aq(mBp4p`7oJc&Qt0n&ZaY)iihtjfoqY7j(%J zgu!CC1k&A@mm&s^XCxfyJxA+I$#k%zcY_5-Q_WqjBksGzV8cBqOK`-aWmy>DmFd1I zD~{5$GQ2>8BB}EkG@tuVy|fHfnUG+yAQEVn@>;yWO_RwDxW-Sv)`*uSF4-phrFJ9b zjgP6J-C0XCVnoRR61d!hx6jU=v3Z>%f=3{M;vi#+e6U5p{#SGgd~`ka_YxR11X?CL?{pIT_gb)+5|c*_Uq| zi>fF5q#SSOzILsS%DEFmq>-p_GrlR8iAmMCK48=&vB+H&fh(~U0#MrH$TBY22L^#8 z!YLBpP#U++INptN6Y%UQ2cOq^G(b$j%A6*{>ogA1jT#Ye z;Q`yPN-2be0WeOkalojV%pb*Vkl+OdnJ2u9RA;8t2xnmGuES0|zpWIoay(&IoO#fq zjx}vL1Ot!=J8o%}IT^)rk&ZBYsBaN1tw>Tg+)$9p#GlH?`9|aStoy4;A)Td&lus=A z{Cz&LMT!XCLo=$9qfQAR4B%~DZ!Ru7qNgO_z|2%SfC1gIK0n@=bzNE0;>Og4%gPyw zp(KO0K`cE!UtCayz({-jE*L3N4%~cdl3mV_>5eiOgMri!J?K{Yk#)`w0KWJf^~di` zM-*2CI_d!lz|SM!wFXjdZWSN_2+FtCXwiu+qsypl>_&S0Priu?EQ(PwTmhH;#Wx!F zXFy;8>58LU_k~&8R@?N*_)_s$6_v{|{MilZ<;^K|+VR`n!`a%EZY~e-*Bw5yTAj-c zEvV#qZMW@2W$zRfY;Fw>?njLP5tdSPoO6o43k>Hc)33U%8v?oV=9j-LQwk1p03or0 zevKO0JGekR<8nWjJD@I2}vl_k!Tk~#Ag zbByALuPvkuXM;rPw>4E#fafifRY?IMbP#fKJgU*>a>qF}YEu2AQmm&TcfjVBhU!+3 zCKO};PTu-5BLWE{VT@v~#|lkw zIrsIhZ0R^SIM~o35f$#nTS&n<-noK?)G%?zSnozv0F%&xwkTo<)!EfZW;^(eN+3a@ z2;)3ehVD*x8xd5}TMRrWSBPh=R#u$25P(#2cBJm1lI4^tVo1-3oOr$4`qMUn;DZyL zz{?(;Dody0Rv-fh8S~)L#EGb`M%5$&F|izCs~lw`(Xq%mJbslWyjnm6^%>j>s-~7= z4&>*0?43weau4Pp@m-}NCC*7>=bDKf5Uh>YZfJ1HJF#yIu1>>lv|)!BeUDL^4a`x^ zYEvL6>Nnb}-$4vWp!i4gXFPL5y1R}P)q>@)6owmZ=bAG7lf7;mNYzQvEx+NRv81w#yh=f!fw3$seV=Z>3Dbfuy2sc_qRDE_s} z0?QPPTxoDXJm6-RfIrg8l-pa~HHn2J0J2B%t zSEf$lqPn`ey1Kf$y1ljcU!F)ky)76g_(wRezkQT>Ucv%)GIiL0uH%nN@)#ym)S<#) z9l*%QuDy|xAo|GGNL};lI`B;>V};>%5)KH!IR3v|)%zkD65XRR4aq1#J|^j&e|qq~*!yeje##QXCDuS8M?ybJd)Ys=?`Hc# zDG0qC>ktUTb?L=>2e7@Zx0RCJW7b@1EDi=fv0g*p+{q_;mdCnbhb4jA-Ar5QSc?_` zTNnqWC>>4990%KC4;xcfZi^#DzN6w9Iohu+tWq#=FmZ#<LdVq)JH12VNO9A2OQ9E7#L-W zGlwgksuYqmOBUd5S&RY3hPW9bG3JN!c#U^j1i}Nd-Fs>SwS0oDoF!kaBl$sOUa3}NqPw!1MXyj@Df#<*LT*6EZ7~7CXKJDw8IMitv zQh3Qc&|z8O@Re2slabfcb4Erk2`Ekq#O~P{=T%@t;}wK6)3wN27b1oYH(#~kj9#Z4tXAU9cV2q z#Ycl9d^aBtPxD1YXdv+Ec}_|5Q;hlfP%Y!VZqo0VmWXmV!THk`msb+pI=TR(W!{P| z{{W0)?$74akU<0Mdg*Shi!?6&hKb$A@u`epXCR7S@yu?P1-5p{@eoIbjsOy~C>p<; zJq1MUtsa8oEz|4WOSFC2?)$_jbAIQRZVS zq6q;^<*~3Lj!`4YQTeH76QVFG%+5(&EsY-i>R`5gJ>!$86NTt~{{X!)FMKqWVU4v6 zZ$$%>o@yA8uu^DcSjni2bobDrN!8d9{5B_Xwm0|G2*g4A)2K5R0B1S()ghXBPMrZ% z@43zgT8rzawJU_iqq+3?*IK~RF_vV;MhHK*HF+{F!ICl~VWb@O_*G1>PjF%gPj|k2 zskKc}g?+&saap$((*mD_DUC#h#~!()@9plU3M3e1DhU|R=xFfTNh|;?pp_sn7~}lb zgf``2?#_~@k^OT_K872dfO;Q=QHrV3plmvxItm5F)ON^JE|xqgB9?jL0KCbe&cisy zM;~5vR%MM|b#*GkU`O+Fzs!8AHt^j|504CTN#GDGqLMi549gKDk{^B#?Nt|1eiRF3 zGBPm88TaSbniBq25tNj+Fjx=`RzV}E?r{5TzP}oqRC#h=2S&taaC+5dh8g72`C}gB z7W(N}GvCe5M+Ho?dICmHwA=ZCzDNI(x$NysCP?g2SWDw3mEaIw~@^PYbYTd@!@ya zk@McI4fVXSpB_^<1a0v8@~Ymzmr#EJ{{ScE8O}X9uI$M4LKi^N0nvlN{{UKEb9BX$ zM0bcusxSZqk0JWhNq;_ugeHwDFaaKQqhmVB5@ozhqhrk$MOG&u6ORg?N|g(wt_UZQ zoP4N4R+llnEP#?Tnx(C;;pb)#l_Rcmll$>eaTLc=N5MHG-|O=<#AwS3p==Na^+lfC z%3^7irA^4qb=^ zah=JlGF#c8mF7fz<0B({akU`#7Z(i8acolrjFuc@IrOfzjxOovS4hb^HXGy5_ogiG zr&f;L5I2Y}c-s{Gml37A{vmQQMl}qv$^O(BrJ8lq85sl}C3qY4`BS1zE2>2!%#%|a zWETiVt};gcw7tYC;Ok&q?}a$y(=}M8f)c1TmpLlAC(q$T4GqL$G_VIN&(> z0Avi~JCE^QGRCmHY`_vXAmjSd@+p;7SttEU=A>6#~JT$x^EWzpS`Fk6o*H17zF zmD~V1-{VW!vdS1M62Sg!vJwXS418#C zUAoM{zd6V}ZG+Fd_5CS}HAW2m@Y38aInO?{^h*|v2y!{+G&w@TJQxagIVbltwDy1! zL~iWgn|^jaW|e-cx|g-*idg{GV_iV|zc;$QvFu0LceA~iL#Jk^ zdWT5w9Jb#R^@{edW%d+SaSq}r!s*K34o@GstveHW3GS|KK?lOQ3N!NG%8%L$BHtup zBZl!GOaqRz)s34M6KlXAWM`U*uHdylg13!~@`I%LiWg?YW|g6kg?M}eZbAhMD{CyaViaob-?VwPDKy$3kJ^77)jEasY2Nf4vwEOUSb zF)hfml273hh`1^bpIV;n+HrFVj~LSVKa}~?h6a+{r0s#uIR3N?Ud>phk;`XS%lD(g ztaZj+Sc8JN;BSG=OvT}lG;xQ{HE)f+KKdVU#^L1%`{RfI063~i+3?IGaD_~4N`l9I z{q@(8w{Y4)@7!Z&z$e|B%r;Y)6J&9KdGg=q@2w~;j1jT$ zgT9ha1Ls1L=yyuGmNj#vvmPmX*j(dxnVw(nGvDkbnw*8jT z%92emk(BsG4hQSM_@*TML3bV5aCR7Bw~^+6%JVyG3fl~jz+-Ly0Bq4wGoQTr#d;j*<@u9;nlBxm2} zMZ30|W^o${6Ow~tk}>(dAFTtiRz-5Lt0s0V?W;KQtwPbnBxPWHM(9s7XB$_SkWIDBO@MEIQu;JtnxS+*Z?{GX!mhW;xvX$05(|TJaJQcB3pKnP|l!m z38kzq%#q98;nFjWUcOXIDb{$q%Xid6;z5pnb$iJQ4)p5olREHs{VOtimhW?Jbc5z| zs9<88c)(cKyaWy0w)sEWuW=MN7Udu)u6mAu`;BK@-NV`OEvzZ87*aF7eDh7c)ONPf zO$z>fm}exCKfO}wRCH^%Mn;T}%yK?mK3!^i6SWU$#zQ8hVsxIE9MF4CZ^AoA9I75- zHVch`-mPxmhlwO{fKCprvVGb2{{WhPP|0net_v;>PSlD@Y$AWjoDzUH=HoOwQU27+ z235()@c#gs(1y-9L$jP@?sLzrA#)5DE~^~b-$I_Br^cxEVkyc_>gcB+jk)yAR`Nk^ zni^%)tAqe=osKJ4v)svL6te|Wrvwp7$d;1aNXF?3u5!31N#OP7hAsO(I}&4*2?+em z#Gl@lFf2i5Pvgm*KrY+ko&FWGZW>(|Cn191r=3z;xb-@$%CZ6hUcS8Sd8Q(A`d9#0 zagjrmmz_{HlBYP&KU>tXiq%!m1mkX>;;3&`g7->aeg~Ca@ez~<)<)-M#y?%@a?U0Q zK~li@o2NY}*DWL#I+20UyRcpdod(ym48bH~sE#n8^);I%!^_%%3LbC>Ja5HqM43S7 znlhk)>q(cmPskLg$t#Xe&Y1ixGXp9y3`xn&P0iooLp0+`0g&E*4r{C~e-;GGB86d| z?@r^_G{B4pExzOaBS5&fC5*`B8)5MI)@`-BccxfwHIh!WBjKKDxPXfcj;h$pjDMd> zat2bkRt=Gmam`vlp-5wd6TYQRYGD-~d)}ff9m%(kb zfm|Ob9D+S4Vpi{rY@Dt@$lrRFod9fODagp$s)P8UOM}a8=R{oy7=m`(9(D=W5`e#P2vHV2TyQUG&O4SWrgCY@acjI*bkXsi?`+az;9N z)lQ}*Z~)IAv{Dpve&ce+RuhpB5`6h4dFL zz1d*EZn)|FYEj-LGBgGQ)~G<#**cE??f9u{Z^T^^?COB7pj)W^yw;KhR?3nv2mqh2 zDx~OHa}mSiQk?BXjIcl)9a#CAf!>)z5TOR%wLRf8cVP(_-Lf{WjTH+JNXgVeHEnC3 zPde{hXQ-*p_{h(d4b>PlTCh&%HDuHYQbEAm0~ITsAd!Py#0+HPCvRE><;)N$d1X}? z$j@5zAKpLh2eG}A?CCC|W|HznVGvg%2i!(0;NNQfsK54t@=J@k8JV1%lSy_2HdFST zD}6AE4EWfC{Wq_ze$9J#?EA4hBHBAs6DS{;mdIo88LxJGKkW}>-XbNCSskOmVt79x zUSrr2MIvTLRms%aw*tHy?StD@_E)nnCQG2mv7NlJy?kBl{{Y%AY)S24y!=eMX1Fb+ z5w><6I#=J`!d%aJ*cO*lxGvGFV~lP7mE;b+i$I{h}~rQUE)8(Pn<`BFegm9u*yZC^q70A|mNj78{`8 zS35}&z`;^>zylR)UiG8Q&W=y~BLbC0iEd<-$yGz7EtA4f-#xRs_KUMsrgJ>;h1PM?Jn>%Zxv-k%-KBUIG-cDM@JG(RJ^SHyY!F=7 z&l+fC@DEXse;Kcw`4mtUNCPDKSJ(dla_?v)m$5H9Blw@geL(*J!Vmcs_3vi1kJ+fr z8ypO2>fH6_m_)UX00=?%zS~4)VGKAYk9`sZ2um!Q#y110^X9JsfY}*J(DJq5?B*jD2~0>tV9!3~UB)bB;wSEUlJvAYARY zh~$2>%BWHYP&ynBm0aZTaZx6%Cq^}6Y}E>~jYO6sfHtLs#E0(}L~1u3N!!-EL)u&0 zTNs}9^58}?P6#|#&7XL0wrhUQ?C-$)KY6ZM%PRr6Ty@-gtK|;V?f%p4Da@BMw1t?q z^zUQYc86`GJ)7C~?V3tKFW){fhPvVaF4- zqCC;#^AdF*i8!x5yMo)YYy=RhM;4ro`j3y+E7#qz_P^}cW_GEvd(kAZ$)%$i=ZYk*eFi~d#lW1kuTr@lO0Y?T_6y~>l*-19-C0&S<*bahb_1oc>e$u zFs-4PQ>%C2<$Xl4tMdaftUzMK@s`S<*)&lw9KK0ht-k3ZU|_9-N> z%t_R|jGSZLnxeyT4DMo0TH84%3ZQMqXcr}?lSv?)F>&04SEQ*H?!}Aa~_u_#hkjH$8*d*kgy8Rjj z@kkjvjoF+R#~^=dVPdy%tRupv`P5Dg4j$2qyCs1**>HH@jQpr66U&#=lsqq{*#5N4 zZ)%{sI^rkOoacJ2{Ht<^kgs`@f(GB))`10yibajzx=d$Idi(ykt0!l&vnw!^oRuSN zd3B~1X0}22r^=itVt3m#%z`;^M~tD)&BYT?)uWO(K9y975F8FpcR8fwu`P76u68*Z zj&Vhv%gquwH9{n9w#lli zr17kfy0FhQhipSL+c6_hT=m9(TDN7+vqZ6<4|jovZO=U`M*}4J)G$ZNwhyLiJTd89 z;2nho=2u{(X$&%a{OFJkF)Fqgj!59p?qikTD~x9VV0`M(M3E+ul0oM@oKTIbckMc% z&OGyWAG2l#i5gM4w6oD@2l&Sz8XG8I%D6>5;)Zt zEsi(eYLE)Zd_d&!RV&|bzCH9F{{XwY5wl)G)Kd}q_&L}v&_b_CG|{_5(h zFboGd+JShFGMZGZsd&#gTaQHd6L0Ph=S-kEkNxhw`x*IE^} zw3YkKgLr{B&#&~OJE9O-fX@|Ho-rz*VUl`P^eJ3(osKFHwm@a+&z(f^cd9okM;reD zYK%zFrPLH7dbfC?!U3@v1RAoE6l)_j0IN9zm8eC*Y#-*U7Em%+0nTfS1Cx z(}JY&nuUpmd}ppbDwi=z@qm&LbH3G=+E83eYHfSnEKdIJhdKH+Hl3L=L{Vf>>Oni_ zn$oim99ka-Km#L#L`jj{#-yVDVftfwc_8z3#9;Y9@2VP{tYc7CUYLIK^MmrlWlETuvwxL}Ybr zZV&bM(PIsOSoGiDSD-u^!O38E!OtJ9NQr@8;u1Rg?NZA7DxJB>Kcz^C1cpp_yz^Ed zk&OInkPr@h>M%y*bMLNJa?Po5ql2Dmz~`Z^u3?dis{k-b108CHPV6qG8aUNNR#q8P zkZQ96Q^KW)BVcjXtOABO9Gso%ay;mA7GPBePEY#K?UmKYbvl5-AoKdw<{I0(#zqEw zu|!l=O#o~M27@I1+<<>BaB?c_Ng(geITZ;q=SDEYrQuS1P~PaI04W8rj&~lvy%rhEX#;&-K^sxdNh)@(ZIthm zj>lNmWV&q|mjE}#%_HqBD%c8!LW z+kNR|m7OynIphp&@ZPvv!`?A(2x4)A*WE>q+BG?oI8F~4qeXEOV?zec`+u6Yg05s3 zCAq-hP_9@INg#N0$)H`nl0nYr7^$|5kR-<*eA5!Rjdc;XT1NfE(J6_>a&tqr@18a9 z0XWA007j1%5gD9rSB-@ua0!`YX2JPm$WyUtbw$8UI2(`a^~DYDq8A^B-yS4<~$YU!4B{d9L+-(eD+(z&m@Z!v4=J zp8ML17!^qkD&%}?^%LysAz|$0v^rH*IG5pGOKzRxiS_Niz-)bJ?0~RroR3Lw47t4{4Pp_|yT&O(fobyvvlNwGz$E8*VC2&Fa(JDG(yRCI~ zaR7`S4@#zhA69YDRF)v%1IV+3(l0CPZ=;3UC7Brx;qnmXW&;}o}O&)mn( zGtS*A)GaVE`HV8xC&Bdv64pkpM}x6O8HYB#B_sHkEwzg?&; z4oEoMU}roIwP>R5*BL(wvagR&Bc1-fHD+MEo_4B&rbYzr0Ncuy?Nw=3IF)r}vVAeu zthT-7xL5GDcj|Wd(IbOGoH5RGoS&T>XRT9N$pmp+uc(qYTnqtFWKsd&oN=0monzVg z>p_}Skf_zC%yV68V}*A)$;NZ7Uk!ZWdR{ zWmp|MkFQU^o%Z}JdawKuu~i7JLZ9L1X8Y)!Nv!t?^R23vF(%n z2hN7^$*gLTR4LWsHDv6v03Iu^r9jwhg4j|sjV zFhLtrX?W5@f-vJ_lgRoN&@(h8rN`wZNj^fEC0G~EFhB#0`>8o^4xnOFqFZ6}NV-e23}XY=r_PL%g)Jdn$?AFA z{8f$7HwCpOk~4}<=?smz#`~OdebmHyp@cEgK^p>i-}}{NzJBeJQ?}a?#VjOD7eWd1 z@)`H~3Judp$|N}eo+(r;;D(Ur`E!hC9{O3Yj8d#eBn;qc`E6R!_Jl2N25@}N^&R+~ z5XN#;VU9*etwZE1$L2RVoTZjQayV6>K->)3kL*(Ne6uV1u$+JOJI_# zCOomdXRWwtpG#}gzT0h&FMnFKyfQ${(Wx47j2vuf#BTKi%E~nEalU;%yr?%?5zvJr zPI&tFeCc^z-sNW2F^nAYD3Zjfa;|q$PRDQD(;>fyvkVXp{$Bb@Uhu}*QW<@5pI&Hz z1o4&t4+!IaJ$>{zB`UIx@$rqach3j*rWN2gWG|_9BRlQ!s`s(0zwrl)AZN>c>Lrmi zqpOgh;Pl_99|{cdX75;L2OAvceAT2xNZ90HlYyxJ08c7XIa!M&rwCh}TYYU-iVZFp zZIO^&(tV%IT<;elKo{(XM2S$(5m zd%($)gPu6so@q#=mcmv5k%N*m(?905V!RBW#mPA7`ev1y5g}|GjfnK;Zhh6(=0-vt z3W2udV;>JnD?TIC2A_DYNi|zGbe3R9>y7j0RIuVk3obl3!X9|Z5bl{9+ zZ;HLQc$W^TvcH6TvC@&cxG~%i#3OIP-=EU7RJ@j=NO7#GT=9**jeAMrMsU+Ed|6Oi zueyxNtc6bF-$8p|LWIBr85FRxNayc_XPz^S{&eYZW7ih=;10C12a`#YRx`g&zgtvI zCB%V@AgIRKs@tSC`dR+~-T{Kev#YLs^m4J3)fbB!lbwzSG-cKz1n$`1ZOtrFXF$O; zx!r-^8~f_fNL^$S9gyIY{wnr!iDLwu9so2)UkmGPvE{&}jLK1ps+L26xTZrkka5qY z3hB&YNI$MK_5COzgP7h-9G)|u^`b|1k2}N)fgdDqMwyhO1GvYfD-6=hJ0V{P9X9z@ z+BOPYWR}Ky`cb4=9T_qJBLMZRyPw1fNDZ`L;FH#krdd`w{Mef-yQrnA`k{n|Efo2(jR2PIU3-O$jcJxJF9!J#p`q8~dfx3u*&8a2RdJ*UGe3IVO=V4@`l!{{X!) z5iv8U!yQLRJ0ExLM&08M2K<0caxzMxh#>hIUG5m(cPKE5H{g7!uoMsTR1yb9G31d| zg5e|>;fBOf8Gs;a!SeH=u2FKtFH^VqrCLeF;B+7(ChMntx^qN`T(qcMjUaE1r`{>0 z(#y_5nvt^|j{db$$~7_R&sySjs|;=Ls)YU!Qb0M#`PWEMm5{LT?t0ZDLlln6;G-On zPhX)$kwykN2RjOg<;sm*kd;;S#I7!VBKZN!PB=s z{{XDeuAq_6c(^1Dz#{{1eI+qzAp%p$0B^?oR-|@H$VqU)h7R0&j%lc&NWlPZ+mcS? z)Ud-T$AkNEw-ML0)Pk3|9jK%98vn@<6NCuII1U zx~5VcqgdQ!c3sb%7S$d<3xXAR--@?<#!wdw4sZdh85JaA%0W2b{HS*@t0Fu$vEQ?v&h|RhZsdR) zq09cp>+UuQMa$}UZwkA`&Y5-zQVoi{`?z*83+N}KPvcBw(g$uv}U++ zNp~%pUO3AI0B@T1*VtdM*L|(+U7g&P>}{iACVcviwfYO}j45r|sSY%%$BYs|9(`-d zVE~BaBaxhs+?rDHVw&nUFR(aalh^jG0?Qm=4g%~m&MA9a!7wG4NK$fhw%uy82`9N% zjO7#&wHDgdBPE;yi}cx``0is{#L@{ZMyG4Q8Xt`GJ`wh zZT0?t;)X5r*mLMsmk(gWeVnEN0K#hsd8&Tpf6eLJVVVsiNk?C1owQ)JL zV1<`#WF7wiT4Sz*m#va2t4*+bEX1K&k$OP0ZZLH@KBNgNj>;OArI zQ=&5wf!9i$40)e{^rX8sDC}o=npFU{%0Ex*S`$Q$=_y5LPs&dst0lrl6H(lr57*Xc z(mKYvnBY`JBFMUw>`v8Uz#L>|tFJ6ak;lHQ1_s+uCxQu)$=@S#81YdZyk_6K$%~BYI2ocvct6^Y8B82(bH~=z zTZv_k_(-j$FgMkWg*7al>{+$k>fG(NKh~AHuz8~e{8_=kILDs(rA@jJ|w6kbaF1@Y5vS@YG#+Cw_eQqs1I^LS9ELARLW~ z(5(cq%9ipvm`eCT6?<4wBr)qNxjf@lF>njIuqAXKBgbB}Nfb0qr?2lpjy$@v5K5@h z0ORZWRY-2~On_A2smSZ`qeHTVj~K>V9)9y(G;Jm^;ThjN)uV+_l$Va{|fYQ>z#|ZT^0`W8Rsgyb&`tomm+_I@z<2R3ORj+ij^mHz-O(*^7%p}o){ zyQ7^$1AWfay}*)WAHyugcEKF<{*@8D(1~c0OWsq zizQp>+&UF2k&NN8o_mNt`ioxSXU_wcC+<^iX`e+kv)k&5Net)Ogq z#%X(nlT$Ea-hks3R4%B(N8C1{#^dKxDwMbHLtu^eCx5SXUeYqU*fS9PWSzfSI0PPf zu4N3kBQ-VDh3{xV8c7gxCIj;0dcBiLJ+x0Um0)wR^7m6piWdPu9-CC)IM*{VAL zKwy089#Eiwd_#N+prlus)(_YPB;G4UeR9hJQz?l0nl;v@}YKRh>FGCj#Lj`%BJspoj@m)rK6JFHaLKMb$0M#rrp__etN#FK?_x)nUU=IZ{Qds`Sf<6gyel4{ z5B~rb)fXxek#z(vbo?sKXnVrS$`?)oh5GcVTVR^C0zt-3Xp$_FLg?zPsAFxb7qxEh zEfm|J)~qlHKMZrVe8cyw_TJ;Ndp=Ijj(j!H(o|sS1K0Ggi*B8zmE5*+a%e;m%|&%} zN{};=&01ig@Vr$ktEzu$_V?XkV{dP;;FI0$k9~df?8GMC*&`Xo3FkNm<4)a+pA1PV z#)k~q0FQSxcp?N9X9oa-zQoZkn4|?uD>exu7|kagyA@E*zyKM6JAU++w>_~BW%g6w zNtHy5>&Ey1d;KfnU$$?xoBsf4F66bec_D>d=L|ewAS={T-dX=jhKJ3`@_XvUP!{68xDC$O&8YcTB0Rj?UP9$(st+HwUk$7sGF zNhF+rJ;!PV#Hf-igubldz;1ZQy0oDXNK|7W@N>_n*OeYg(ld!1FFPM9=)0wm=_6AU z{%TQ!y5daZVgTl>&5VsX7|8YXp%f0GZZW?Lo&Nwzl`zTSQV(`;Juy~$h+~mscLAGq ztDPqe$mcnsyTs|N9e^#J#}(GWijqkx*&}`^q=A5X@srI&iW_{8M!5aC6O3qt&Y|vGn4pEWOeKk%nC0kicT7CRs71 z2_yn{;-(msO3x;a{{Wr316O$!WFubV1g>}#CXwMsmO+-)g&F+RD@&+Q9a9!|IUwh1 zJafTvhOH8n=0VWc*4Jm_g|fr{t>26pq$S~Dm(&q_(HU@jT(!%<># zK=b0d8@2p%z(77lcpmyWo;gb-WImtGLGSKd77*b-l>FQ4xnc{dC=PBgqj*1x}8)K&oJ;8-M=@M+}27# za~Eon32yF8WCO_a&U}t*Yw);}SZx{P4yKM{OzI$Haz#R!S+~OBxbqcDsahD=#+sWO z4Tg82SlpR|lL?L0h#XrTyPXVm)t0BWS{ z-QJYW#|HChLN6SA=^0z8w#?vNg9V*PU=@#glA~>$NWdmi4~%W47mib=O3>% zX-ltzAcKHF8}FKxhA0N5+XEb($Cos{<+)}OxMHVrs>j2(H4!r{!iY%j&UPFhnWrIX zSx0)B4^it<6E0lmK2^&sOmwV@Prj=>amj+|sDpt^6jpIAol6!-0Pl}K(!08jc^XG6 z+_K{Y^(KXOZSB;DP@@|Y#y)fj+S(g%kCL)*19C~o+OzJYwMje2V-lvsl6+q(t;5au zQ!FePIXXh}M^ZEIrmSR0U_@zqw`R!Pl1A9c>BVc?v`z%c;W@(|bGM~+{A(mSlw{-_ z0i6E;ZnPVVD|dkCi5bAyXP-^YCh*Rqh%_R42)o(pTezeXA>hy6ZiqnH~P&zV;jV-j(kkofa&}CQCck|$_8Y{*xP=! zFi6sB421|d8Ns25lfEo8wyn0V?&7xzjhh?>{MZ%JM1tlyno_+Lck8*R5^Df_1!8BpZNyKA9ZXL1ygA)5v^00g=zg;fiiDs>U=MDD(X) zfH2aswz6_EHvK+Sn!yyZ$Rr@BdW)i*GlrAzj=|Z-drrhZat+~k9Rjz~h zKw*FhB8PV!+c+^2R~~qyTf)&qo#U%AE(z07-m8M~I=;sQdUO3LTYHpN?_`{W4177@ z`k#$73%sI5Kf+)-4gUbG74WJ;V^QPZS>jP@<~cC(NOn~?tICRIT|mc>K-a#0MvV~& z2tks7ZV%?oO~_|o6nVmG1DqP0b&~^9f-}%p2;x~;P7c{4)ct<7SB=^Nk*{`FbvelT z+JkPbX>Z;;c$nbilauqN%f~4&Hq1syKVFo)g>7SV6M}hc?}5Mf{V98ioq-bXos$?C zIL&pu3j?|DLY5ke?~TX$Qk|`NEu4)cQL_wjk&M^N-+Zply6sP9ZF@#I!uJxM@MLux z4r}9ExSd~HCNOuV`x~(@`(ov7>}{TD8*rIh?CXf#4KAiEI)o9Gt>WV_SP)Wy6c717O7Y@V+&vtT7GoGXLqt9yZ za#}YVuAlrQe0@zPBleR@mT<6*x62$IU#(snLo#WZ$(|Pc;A}kh&%Tc(tZ>^&BnriV zIXTWi%`azc_ZCIjMwk9pAFs<5qY4kg2vwA}4#$6?Sq9EiG}F8HZN_>IeR-%`RB4iN zH+WR-gY}vqw3hPi6t-et&UnEbde)CnlB=;Gd1jcglf8pTUhYBp!5n_H!=s5E+D%GE6?ot0T>_Y(Vk2yVPBmvW(=6Ic zz;eVK1M60|n8?nK0Ax5j^YEnmL$%?vkjFAGBN*SGtcnBn#B)Q4n+^F{alU;kHe2Iv z>|0i{dCwT>_2pWT&3P|&9uc7D3Ne=W=WVI1OB7kcmM0j`Pw`ilNh3I&)llGS$3B#a zvRNfq<<@nQ!1Nn!){hmG$ldOs(hY{8(zwlY1Y~|31})|=2hN7gG@YQPD5!RY)Q>_H6v&xN$W^UV(|B~M0GpoRy;d=>d$IrjS%Wp zBQ2|c7tW|HopAHSvXFKI0|0$ytb)cXj|^nH9G1zz&&HdU;usYSjifok`t4Hd9OxS- zZNbhyG#G5kYG;tUw%e18d18fgb#rfoSPbsXfu!S4>qj@%$U@C3M)?4SJ$$NTFx(`f zB1*CG5Z!;LN>#fq63yMCMjeEW;_K_b_^aHiTEnI_Y_SI_amU7k9lhnkGfyFn8-*%1 z1m>NMB#zZnKzC8$#@PL69iQLC@^|BBI=r-cQ;1N5rA|M3&%Lz-I8lL-r?2w<^+?1r z+6YD3v0<3D#sJ&<)@8M&?6Qk+#iEUYCnB_x-5%jF1I68H2gQJYTD0;QE#aOqr9%NG zKqUE!42;)v#ETQUJ{YiIFh76RijiH5hs@$w&*e;hUHIRoD(`HU7M;|ZQOVYT?m_bA zt8;643Zb=NQAdakn?Cw1%QUu{q?7{3PMmYSNwA5cT@H1Du?HU>YlW<907-R7Kb)4% z4_>q@xZ^1wga=M`CmvgTD=z-RLgsKC*E{HJ1@$8}(V&M!h{}98Vbeboy-@b0?d7<( zx3pzm7@QxEK6FHmYj#w@l}`CnjBQr1zLi=-_<*~Ey5yfa*^%t-;tcE^RO~^<{{RlO zJH+h~2^Ovulz4n2dRw{e7?EZK30HR~4X=;fy zXIuA#X#O4nRs>X$rcVm7)ydBlS5U`Jbha|5IsGUw%{*v{EDpzlz>Uw&n;~IPVk+Pfae`? z(w&Xnfz*Ty^PFu&T;+*5-;XMuxTq_Dbet2uYqXpX7l;mg>JTtr8v=azp^0@Yjop4z zjfgp`p^%OAgXM~xkXIvqxHT-gwmBFe>}qPIR6epmJXMGqwRPgDaIDtyDjYFV2fnLp z-@;JK-M%nYj^c<}LYBzDsw|9Lu8pyfbFr#-a+dMQl?NcG$MvehZa)~s{82LaPmvTW ztN!Y766ts3sOJ>S5=kP0(3H=a6%yRX9LWheXWyO&ol7#T;dO3Cai6cDN{fU^BoSqt zxX33z0rl34ER$nYU~0e^U~mlv?e3)-BGOb3;&jKlvDIa=m8Mr`WdJ_;A0lf5wL5a( zv8`wA8<{jH1cUzo2m}2q)?UzkxqA^EtF+yqjdD=z3m@r@mGL*)XS84XOYLp%X|Lpw z&V!DfE5)exawJo$x|4&N`#FC+oi4>_Q)fvUb^=4w=KILvaY6*Kny_R z#gVbw9$)6aJbu7+VI}RaU(2wI(29FuX6Tp-e%@2Iis4^QzmsG)VTL! zO?uDmN9{|ry|n%uq2r9UvYNA>dBtXZllCnAvF*2I*~J?%lHqa(mUpkyPi4C?t@}3G zIN4P+0i=0x=UzZ9;#kpC45sP<>(;Ynw?p2u_+%uN2d>_fuV&l0fV0W33{E|E-T^L0F}c*Tu8lY&9cVXJLs6bG-S49iGwHo&i0|aK za#W~RARq%I`|7aYOB@fO)rxM&JdXVN^sA#ue{7LXA1#*TXKztXC6N39OM#?}9nNv} zlSp1$#9ToX!ytfhow>~yv?7iU&fJxdXC9}T_-pU0b0hZkjjU=!NQ}(dxjCQ3}gA~e0oA>U7n9WnhWtf2-~86u!F5F8yq>^e~@vNT|6c2SYk;*!6yOPnH% zb;kH4aZ4mOo#}`MNZE0{X~Pe97#S?wl1_4J@&HB&03SLO2|kmqO(Pglfw!$0$yFo| zT3+7iS~n~Th{jm4&fax}+nuB$k)>@$5snVtwemOKv+W>F0ql;>x@g?xSPr0i*UA@D zO>rwcj?I(Q=7wAH;dnLX-og8Ob?nT_vB0keaz>TOKKvT`L+sb@1=+L4me;QK?88F` zInMrqy`3d3h&eoFd zNg1V*Ld;J5n)~PO%W&6z$aY*eF-f#u2WHN9JuBXds~)9H1q08TvLK8!g}3v@Kdo3| zOzG8(`TEex!vi=Yc@Cq4xuSrj0ww@E)gy%?W{~ZUxja=$CDR8jm0auz6u5hdFZ-s0 zFe><4Z$0Sp$#A@mPQ-9JRje9DgtU#TCm_*UOiB|3=R6K7qC_XV3I9NNBi-a`W4F0W zoI4URzWn@Xu&HwCfq*w3N8eYD+{Y%Vx6Z@*RWE0f-Vk7iNMVkL1Akh|ct~M1QIh^) zw)3mm++HLzOCc|-fsZPNu#DU57Yf1OIVA4hROe+z_M}BWfMn?mVhWe6aN4a`o{*VJ$^P|nR5n&j41t_v z)skqRZD%}gd7?6Jm0}JscP54-?;_J8fK;3lzs9PG+{$#mp`?~lch8uh-rod0&{hmU z$;jJ^W;PEQS30&EfmbocS5Ngcjr2l6-Nr!x9kaO23TKkoMv9E8Im>m7^O$#oW8&(SA8OACjw23wV74kdglyv+o>`Z`nnbJ5Ptuq3tU2Uv3oDy20Ws&63 zBxAd77?H8^^{#iqfP^C!^4N^xhcwaT7~BTIB#*C3Rtw3daSwXEL2PF{Q!OM5CQJ8! z$}_<@=qoKb+)h}U4=1%7& zfB=9Ft=Q+E-n4rp$=#7Gg}3nKvT25v4)7~WhR>ZJP$wA~s<0{x1J@_kr5jQP0Pnsl znZl3`cQ~akXPP^eR9!><9kNHxhzxBDGp?MIk;w<)QD{JNiZC&s?^KdNx4qcpE>2E9 zR8UphE0K;eKD}zuD90t6JFpn5f~y`K*Bobx939kP#|q(7oOJY{muI?Yf^0RPZq3>b3u|#PQBhA2gC;b5BaI_F~SWw!x7i(`&5Jx zxppkX;BIylVgbSOrDT-JI7I$jz+sLU3vsa&Zk*ngd=Z%S`<#{GBcrAwj|_M=>9Au56Z(E^`UAp zOn{csMhF8t`Tn%0Y1}I^jr0s}oNxUqNRi`IJ^)w{bDa7LJQpF+a4^K5%z6E2(MqQY zseLiVHrlVDb(YdS^?Xze>N(@31*MULh?6924%nq`ZQ4SUN4e31iWQ`d9E8rrakdGq zK+A#w&N&qz>KPmwk}@!8P(rZ+0Vk~%p+Ltu&h!~zcT5)4bFs$b^`f94VVfqb4o3ug z=yFJk`g7twnH6EEgPpvHtms)`X^f6RT<%BpqFJ-?3z3D~k4j=t?Fa=+w~*?7 zG!>)HM=!pO|UK82a?9vtwbo@}P)}k|eKW|0_(%8+q}BYL5Pw97FKpDge`bjbNs6$hSclwonbO?7e4LyGE# zP{X19s)sSFHVFf8I@Ohxz$1U@T+gKBji_Q^Tq@y@P!CG8;ZVrSzCGr;0ty3=NzdIzO_|CK|UkU3L$NX2XR=pR`(Yfcmn_l z+dSvvS{2mAwZYHAtxMcZp}Zt)Ks0@b%GF_ZZJ9_uy=wmI zs*(m@k+&5J8N5t!ccqo^QGKm_el^CIJXlfVQ}T2b9< zJ{AXVo>V)XVChZ4;Eya+SzKz9yC4h%&Oso9zrLrnWACin zyLENivIf(%C^=~HVD>u>$QBz?BnU}TX{GlKz~~ODElve#QQzj)9LUCP~ZFfK^Bex4XORbo9_~`(vdsQC|6zf!5_arSf;Mg zLbh8^gl;(%NKqAzsarWX!Kz<8Y>H8}GM(_*+J|c@w0<0}0XfYww}EsiA&KgLb4HC4 zKp##48*f#6Sc_p-I2-uCO0;l*=OZH+-=zZP1@8k$;|jcF{{VU-IG0L=ECzCQezjYh zZx4hMwm7AK2oZHA7GFyDmw_NcVYBqq%o<+XsA( zpRFN%IG+)0Gm(+b!jrL7x0R-mz+M0&o%h>6wQAd#*$D(O&ch$(jo-V3AgY1~Cx3n^ zpAlfnaHM9D?E++6BM{lxgRnJNqLMiCfJr&VbNiZN#A;U!$Rjv3N#I69k&)zSQyP_J zDqXR#&fZzBg$ZXGfCGZPK-Xe1%pa; zh5!TM&qJDFSZUnn1A69V10?#_C>h8*9qNf7X&ryz#`)OP6Ch)Ok)E_G%XOLtRs%Tm z=Dtq*&Hasbk8bvu?LN-74JL5g@6V~MKd`T{3*OA_$h%9mEx-|wz%c9cudq8F-BR2{ zcmp1NJ@oKtA&pQbz;npk=+Wb1$_or1Dz$Y|IW-cbVTU8rr4qWjsOrRw91gW$G4ZLT zuWnY@4PVSK53jm}m)e;?3PI`*JX46;lpKP6Dr>q`BT}V-IV9D=Jn$--wMl?BUcR+s z;$I2ptyWak#(a(sN`O14KrP26mA6Kcr}XW zVMYn^q9EJ+S8{h7at&Ij?yIvf6>6I5>VsS>y4P18HleA+q!W{XD&v+PLQgF~^Yb}2lAb??M&s8Me(<|#2LXN?eCn?1s=*&tfA3>| zoe6vJP8;}n-GTb~Q^<)NIC5C>cihlq{u>!%3f_J|3aqze;G%4Cxj#JlP>Oe;2i3vf zKjw#Xra18)bCJ`XhA2?WF@Eu!X;L@FG0it{Rg@UUSnhY@kMBz(GTjzn5dSHDKp@dHd9ivmjEZIraI{pNtV9VCF(Gk z{^!cM%t*P99E|kFjwDJxwnKwq42V2eB|IBez8EFC}B-umr)o#rj@u!B)0%CBW!sMsztC! z7hVTZgU`mYuWVtEp~8@H*RE=o%McB%iDl`loNZfOjAD^W6e>XHKi-&FWAE_91p@~^ zSfj-9MBoO<#&8BX>9s_%m6Se!Kp4+Yl_ha6cX9@=4hLQ-*wIuONyt3(C+q8_F6=)R zLxK^A2W`zX;R0qbHDLbxQhlkqEMahQjgKd<)@XLNtN3PjY>ac0x9e0S1>K1|oE?wL z&br>}Rd2&HM3jJ=M!Y;>SYAKA+ZvS)l|BC~fjj!i!^gh{a0~ zr(?ZoK#3$?GD!oKJo!>L2m;*G!zxl@y<_00}R1ae@E zF2G=NYK?TNxS z((Aw{8TnVY;=YPUIvXkuI-hkl1gkW9*Er8w1&XcuQwUqa{ zE6|>Pzr8gaf@uj>AyjXYdeldK0mx?n1A)#@!fzk!*0>9>+I4y&p+J|yVMo0rbrvuJ|YYPQe zo%aLJZ%UC0h}qC71mxuB{b-p-Qy^~-Q=DTTw-v;)O{-Au@CUkxx*U0*GtEmnpc;-d z!KCDezLlofFP^Sxv_*+92m*&9i6lo%0MHo2@N#d&%L@qIg-x(WKpj|A%^Phju`cVo# zgNDi9+-fB6bYKuzkCj;?P!8G2$@QgxmO06J0goU7zTaQcuPU=b%?l9NAQS#-k;2Vx zi#v>s*p0WU#o6f-mx$?OjFL&uzOQnH5S36)K_m=s=kKAxar|Hks0aS`{{SzpDGt%U zX>Sr3jt3cDatN%?Xjbw_JJ^`(*?He1-&$VETgrPmn(|kXiR#1vDU)xbl1>h+gUHXn zp0%TH`qKabfDYUWy6JWE!QZV|>^2nzRPI1Iu54*OR4Ic6W?Ya*ohfAP6wHi6=R9pp z8*n#9Ds!KGOyzsj1+%AphHA2D66t2Za52a^-ljAOasq$>8OBa&h5?j=!K$QXd2IP( zB9@N+A#iQqQn)x7>qlsbAgRF4PpwQU>bPw`0g4UMJn(omE=Qi@dWDJE!DEnlKVJ$o zXsB2cPXzBp$U6f|w6Yl(M!PP={Qm&06iB?CxaVrUFL?)eg_MkewtVV{@!NnTY!k80 zemm1CfW#?WWRfb(GNgIXglw!dzn0kjs^JfLsE~HrrJD*)3CBUrMzqzSk&-w)Y668M zwlUATphUgkkPXFKNzO?p%B%(kC|4}%gs9kZb5x3DBq?n~H+>O%v8f;pkw_o_6ik}-^*-}n6~hG4OVQ{negedF1NR6h|0+YzClC4MCkoPx1qT#EeuMnETBD^~DqcjCp$0N((MG z)6@>NK^O=T1{CvFWdm|DK=9_5ONNZOxdj0}5uDYnr%BlNL=R58QJO%hsDsV`^Qt|} zVlv?5dUd7jE*kT^c2c2Os#Uu^W>CUaIR|XxgYm1&Xs*h^zbVMiN}=!GLaN>#2?P4( zj);+v#OiO#4>+kRp&aM)Z=B|lkzLShbBvs>dXfGqrj=vy6~^26v*lOTjue7P&f8S! zQ<6FiWb~m+Yz$aKgUH+K=+d_^$V#IFggqS^(!N{v)9u3YTlb5zWOP%(*#7`Z^#1^C zcAskdL45PeERwsPrnbGA`!n`~w&OEHYT7p38nzjLWc#hU2_7>3m_yGBYpOz0-nz+f;+Y$TjkAYM1yFOo+2*-sig?&=7dRyGnh3N%h-X&EkU7RSrY;Pf*$N3HV;m|d<6~C0wQX~p=nilfexDk2$P{3lu)se0fjlk<4z1AD)Qsbj2J{)ka$rgM zbDn)YDOtNVIRZE&xNPdl{{1PHS@9yYoqRMqsAO@RuC7K&9e1cnML+;*AQ8FTjjNziq=Sr(aqCsS zm1B#OoE&5O()PCu*2)xQk?-1=jB1!1pFEMzx{RPM6JkL9DkTNcqrn**(BQ}6*#d?s z&~@uxJMGjK&DpX|B+8gwfv?Q}0Ja$-m)p+NmKDOZ?fcib{^l2P9^1LIELHS}&UW(h zuem!tT-z^3>Ap*K#U5CMHm{*|XQ=5_?7MV@8bG8oW3Fgw!KP*?G!9O92Y=p}Sk>af zup}-92O^;&5yPN4QPr6G>?)QsrOG>|S0wCC{`zDn0D;$&Syq;h1r~?)2Ep?4^rdGiSccBE8xgkI{pn%+IDm}m(#KKc`R($q{Cohk{k3yhu(MfzVvVis~Ts{jVvjgD!>yMYq@cV>C1sis-fpDrgU9%$U81u?DUSuY z@nV;~zC}hwMp4N*=tudbyF9G1Cw}?P0Lachz0~BU7LDWY$^QU^F4*Fiw2$!<=@GLc z921;lZ}j=royEG%r%>SZ^38G~fB+vWxOw*()JNIBwzc9Og#Aq3}-Itn94-AO4R z=Kz0CeKV(1h9e^!9+e3g(iMR^b{q3iG||97k+2Q`u4$rF*Q@|{$)%S60Bq^h2IP){ zr}6QIU~{M(E_|x7-ZarN{#i*QPf=F2wTHel7Ds$|vHrB_9Xbl`PH|maan~Oj1o0Pe zPDmcVBSi!$(}RFHs!0Mnt8T2k5OG8*4l~k+EOD?M?>X4i8)WZRL6BFC_@W{OC9pDi z+NGE-JxvLM&Y8g(9db6VwvH79qOL*r;)qHx0FZTXGtEgM7d-%~mS&H@2BIz(5&@!6?ij3WM%Wq7Xi{EA0+qvOV^q2m&Zad&6z`qB zT-7ZtR76pq#H?|H#Wc7iMmJDAN7j|?YuB)eUN}3%;NXFc>eg3(inlIs2p%908-J}9 z43xp(9jHE1Y%SgWg6}fM7uz zbfw@I48)u)WwKYVJMZL>6uVyl32~(X-GS*y_OXqPnaY>CiYP zz0dbilrOhVnl%w0IN)dfEAH;ey3ubJcr~1OS$#TUwM4e%nn@!p_!?9;`|(aQLm~!v z$`VM%tmBQ3>+~smrF8(TY)CjKI|1wRsz(jT#AC&rHVNInwy#J1?){){%=RhmVt38P z!x@N1!F3>Y2_d4Jh$)UkVO*~U2-W_1ToUHGrk zFJj(%-p{sMX))m{%uYbS@~XZ(7}%I?ZZUe90&T^S`)OjAg&68-6tCp!LFR~KQ~9!fH7vYtcKv8-&Vcurz!}w=6xRh? zx{nO)oF19S_^ygJA~Q1)CP~0N{{W6EX1dVDJGNoKBO9Dhp!`YHj`0` z5uc$--iU3(Nh0A}d>`96uNnUU(%#1Z0BfGiwYpJs2CnaNN3Q;utxF%rPFhK2V3{RL zY%%ckt;;ojDy_)*;)vlfrcL_qO5RA! z7DzFvcT;-y=I*B|D)T=GEgp`&HlN$cy*^d$cPX+{Ar-+%xh3}n$@62TdJhtxx45_VOo zxVQX7pr#c@b$XwLTH zkUCKA=6N80!^f?cpK+zEEF?wmrgHLi+jIKXf=c?oh`0>cUr&DZ3a*kf1F>wLIHNI8 zrO4oBfvqNGk!}>m4sfTRdCe0-vj$BiPUn2*%BkKVxbCGOlleC16)!qOT}rSBGEOon zI~nDYdG!oNxY+NL$3G9&v{!Wm;Pu+Lu-^m{4*Sw*%N)`u4S+F#e!hiXSz}gPb0Jw6 zY6P0J#H;~94$biR(CsY548>d)W1OG$u7qAC!mBz-5YBKgX|M*ZSn*?e1hGLPn43BB z1dZzn??fcp-61H%sn5@UP|4IP|3MFHDx@l$6NdKg;s2v+Y|{heNR%f13xzPsV%9JWb&z zIVbd?-ntXqvuM}+*v(dW#L^Drf`n+0gVUv0S)h#-29kpVJLak_Lpv;yogn2{Ha|?& zro33DSjrtF<5#U(Q9Cj^PLap_-VEnI8m+;SRZiw*4tE0^5DxTczy~^%`-c<@sT9nJ z_|eqojQQ215jYCZusdVVKi-EmyglMMBm^U1PJhycdvh`%F~^lB7|uD^=B)%%F$O}0 zBe?5>oP24M8z3r$6%PD$`O?tDjO&= z??yRh1sf>iIR}p_R`8p34sjvhJu-dOU&Ku?P^cA(?~(P2tdYD^_tBLyF(*jtnhHZZ zoo@*eG0L3j19Q`-_^P#oo3g0`l*i`Pq#9?l5^Gg;xor`RlPCPqgF+qWwm~6mYi}w% zY$u2u5D4?f?MTUQ+|R2~Wdsw0kA^e#ntjV@C09|#a&hvjBL`5!AbQm#ky*qzBrx2L zgVw6i!w_76zAO)Us@+06likEM7Rlcq8mDJFM;MAl3ykHnwsXL#y1EczIFu3&H$PtL zmzFlu-lvN{EPZsNv5bHTUALuQ_>%)7=}>h28YF2XrcU{lknDgAd}{hkDg;rMUm$q- znxvCEF~kf)=Y76)Le~XE&fU=e0Eg4vU3c9`iz1%!hA;u-QdbW$s!1AYkZq*nBlY#J zwz{#A(h1lJuuBr(Sfji$yM~5XcJ7+}@Ac62PfslHN)QhtqRq<#DxHug2rvCs56p@BjQa0e@ zYRkV8+DZU*BRmdR=Q!N@R)lfOJD17uf#WnpSyY#}0h>_LMh0lnyg-(1DszL=2dC*k zlH)>_j4&MFk)NNwpn{5*B%-Q0W1e_9rN!uyL2(cw88L?62g_f-pg-$NiCiN#pAr%a6R{nB6seS7vVesY_)8wR^v~94@LOpD9IlPQ^FLeB zZ{u@n@xvgEnMlYR`gN@S%d~js(L21700QYn7U~fca-(1kM6Pq`%>r)4StQloCwYt8hEN}rJE;j>iwHHztNR-F| z0gX81(2%^-EWO(l#zED#^uK7wc+)JF@~SW+NI%Rze_5-^J<1~%jL4@PV{z2cAi9QW zC4xBEG7ONwZ~FSw!q&HC`<#YeNEFH|EMPZ?gVSxQ_#E(j=~cAE?ITQBGi0td{p+u! zduWWX$E}YeG-Z(YNX2&}BnnmwnXWDZ7=&my#&UB_G_jIn&Uz3k$`?rkY~)f>4&}nU z4H#^@Mo2gr6>+e}bL&vR6O3m(?@M-!j~p0`5KjbDTE{DQpNLH?TV~IuK77>{Ah!e} z?7dG;IO$E|BxACMJJ8xF=3>NykT^IyRLKNV!QINE4UCUk;$AFkC}RKt=b9V}u#(Pn z>f=*qtyIl&rO7}Sd@(zEb*iQOY!y;vX2{eryr5rJv57+t^s3`-w1TbN2TirOARITi z^!hZ+_Nq~yNAAcN9zdVol6#1j4G9iin3K0W?NQlQ(n&c+h{piKl3zLW^sen0M`!km zcXv#Pe>84M1o~5iziHZPguH8mk*lwjRtJ?7C`T`Wr*XKd!6Z&)h|1DWDcN(=&-bSh zGaA7e1StW}!`IN%E?s5ta@QiBFlwomt`UVtA(^mAr;Fszj07 zD#aMWfJZqw=g-v9gCpf~8ywVW3cCg)%RE$Mf?G>({{VYzRUo>C;DZAP-wluDqD>me zm^}18RnV@8)eMEm>Q41!04^68^UpO_W!IxSo=2FW$|Q{wxEWE5jP6IgnzVDP$)G9D zGItw$=%+Y188j&*m1NQ(Vwn8kjlLBJR4_9D7=TUy=B$N;8Nm&V;EJ1YL@SU~<8XRa zpFP_I=NnSCQcoNKZ&`c6fvcf3!6_mEt0B0-#%kIIojc>y=7nz=h%g`%oQ!p#UrQ`t zGLQyzk)EfDI!Z(xq{l!pJ-Hp!6(n_ z_ogB*pq5~E$T+L1$jwq^J28AH=N)Q8kj!5SgMv+55JqTmGCoXf8AjM04O>1x$-f!e ztfVl=Ij$rRf0af9VEn370i1Q-t0O2}KL@9s26*N02nwzU$v#v&duNXJM=#)EoC10G zQ-A;f63X9(I(*5QEXOZ(E zc5bAa2?e$b#a9Fz5%8;+nT}9o9qEfs(Ymx6V3p(FJ`;-f@7+JzKHIzdL5|jYxn{MI zNq+F^3xToTzUb`hP;Fz84wVB@a5e|$?%uRwyp7>ftg*=+f0#BuJcE6A=Cp)0;f z_tM?7Go`GBG?fd#ug5!A$6tKEYb8~;?5k^sjh(Y14=z8TuSk8CeVpHWX?n8>mN=F{ z-ZLpXb+4kA?(OWVTg0+zR>o9#`jkW8X!hY zW2auV^yg<>K_#x3h*2299#v@NGF*bKsS4}|okh$GG6iv=#^XuH?b54p0!0sXZZx^$ zCnw}4bFA;UPwPp0zRuW*TGx2*DWN=Sdj*N-d&vDY@N7e|jpV z+rf*Mk0*etdB?t)jY^;n*~ZkH_EZfgcnJwNnOwuxG z47&{Z?kna$Y5RWnx4TwO(7lzOS3ON-7A=#C_BYti+5O+PJ-ZAR5cX9D3ClIE9uij^Rn)ddlq^Sw9gQNpYxcsAn0b;+81_v%X1Q03#m%0DUsC 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�rdLe_AMIai|@+ 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

    W}2%-9qGP`QfUzaTc<0`$dkasVeP#6BT8g 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%0DcFzHmPN~x zc;lXY(<=EKq3Q8lF zf?vG!ejD<&nz*gk4H~08M}mG$e0F|9yYZUWJ?~LNO0VY7xE8@)!AtNCFp6CO@E`9# zfL0b?ToHM>J>gf(+WWf*25|tl6;_phzGz{R7#727YFu~AhN0*2sG{sj(L zg9O6azWcAtg;~=7xF-Jrnxoi5Ndl&%MBy(;+T49KWgtDlvGfn6i3wy34cJv)YEG@h zb^_WNit^=QKOSWy4@=a|E*@P66uqFg{+t1aCbWUCr21<)wJOM67D+G9N;(H5!A*3e z+-8fn1tVHowf^;kat~TBN{m(y-Ip*QmKfzmAN8)sbLq_E+xnotySuh0M!v?R7)Xrb zeDQ}>i5fymmvr?mer=51^}17w4_FwiIogVKr!i9 zwWD#^>M-19D?i_I{^OeUnGKsT!7Vg_Sy3mlh?fj}h(5o=E5*~VZqE~E{{BEy?~%5R z{Ukt<^m#lfaCZ7mLI!4?wpj6ya&GyHU(NI9ugusd2kIa*i4x9@mY>W%0S&w~RE&$M zG+AZ(s5mzpo-{p8S%1jn)sVijlF)K>QX_Wpt6rEn-=o?$s@dWwS(AgQ-3@whQle7se}^X)T?qsnJ~O~+=|xZBTw$xDMnQyxta>@_U9N0!R&}^<6?fT4 zjh}-Pko6*H83HM0pWR@ZzT;NE8&qa{)Wz{BlFDj5uX^HMqWlKPVo?5y^+yvuTV8;k zc~p2{ud>jy0=@-yEDYrR_r(W6nF|o4cY?u$1i)p7m{`Cl!YA90fdc{#CkwhihM6X| zAXmS>ZnWBpJFC_P+EM-kSQ;~1!jrr7y3Xe-MB64MXwdLISbqBBeji>`^^5YFn@|+_%X^E z<*d_NUKa7`*Y94WT?C61ka;ldDh;wae;Voi-8|D#H}y^0ncd;PDt_r8l`S3wegF0e zn)3Tx3o+Z#9372I_Qw79X#0@Q+!uy$ncK1v;-0G4`)V-Jofw^I_d+h8sQ>hCT#0Cg zHGkZtai&NDnc})6naat16HejH6pACJa1cZ(JO9Pi##3@3!*NdczXNhftgnigmi~M5 z(x1L&&Uy<@?BhOqzo*X*mb-7QfVF1&ntFY=n}U2{fRYO}M1uLeXfy#r2xAMWtK7M1 zoN;614!eE8RW1bVZ7y1{xaR;tiD5reP?kfuoU}8TsZh0Kc$ifargv~I zrouV7ey{k=T_5CFVD0T+K~^zh!10TvB-h=E_iqGPHEb#^As7DDzl&3mW0n}RyU9-m+$m~10v%1SsjQ=|kwX{bzAc`_LdEmY=2 zaPmAt-u0rK5#aV~`l3dGlYDkzAK$@_bTKae-O5Azq_NluEkpZS@wQ>QK^%vPOy)Y_@n0{;>^`c*G zMQ#3&;S+NEGUFXpLy-}NBJdC=)ZMhh^w6(JCIml9OPN(+RQYx#{6*K!^8zJV z&61B1_;QD>J=dv(KHPgQnF`Uo&)sVU>9OQoaK9a+%07;Fa+SUBRhWSUg8fJpOb_}B zD~yXWogz?z?%TCDKQjXKY=yM(p0h~{2Rsa7M;Wx7ougf)hYqdu zU7Pv_sccJnlmRmXg|wi(@p*_CtOrWjwYHm?Y~9{_dUA4JBzCBuehf#)sPIy&LA*6~ za82}Z{VI66_+1N_06j{0Jy9aoX@FX1=2BTuJ>5Af-S;4Uh60Y(j^LL{(}#9Jw(<96D=H-^Y}$UbkyWFVBCLCQYHMLIHff`x&>&64JOu(UNvkk+ z=4YEx2z{gWqGd&F)Y_ovboQI4nU4!C^;M==NBD@ATG#feAFP;z$+6nDb?CXxYCTF_ z)Uf>63@_alNSdL5m`d;;xHr=H@K_u6RP*Onnc9Hq|BR}j!Yqw!V`SGcSuvOlrA8Og z_E|5N=bz;^;LgNg8^8cJPhXQd2DbyYLCsg&p}qOahnHdY);@PoKoi0WEduABdURUu z(-BksXE&Pi7BRx2a*B@C5zwkyakM(^ z{udk^x8WVb{e)H_+4ydYva^}Nn`oeUjPaxlI07Ujz!*Z%0LnUwYk#x&_^-J7=*W}8+i|T zxCC;?I9gdUffzVoB;d1O3)t=6B`rzbbh2Fk03|H%*;JTmp7-PSllRD^Aps*LCUgA4&N<+JhRS_9=3M3?`TP1c5*tlY&lm_?aUfkvNUs{d8nVgAq!--RJKeO|E1B){cV z{!UNWg0H(zOkrNBw#nPbZwCzAYVS;+wMEn}h>=Rzu}_;P<{K0ElRZD&b)x%x*XSO^ z^NS_;;=1{H9J|FM$sCle6$5hbYBP(fz2yr|O(t+G;A%kC^6l-QG4c?MVYg4v)p=$A zJg*8u1<9fO9K+Er^~K+sO)-gAokeJs!kZ`f?B) z&d!R8+o^i&4QDdRG9oRX?IY^!vPAl#c68Bpn2~;oJ8tx&7MU?7R$BtD#Xm^ZbpH@jS7a`Pm#A0513J+Ohfa$TzwP!Y(c_+!ras-lv!*Q5V=GvC^iG!^- z9}Zdn0a!R<$G=uZdybu~AJ>2Sy?Z>$xkAGf2jS53HAUQ_9Gl5?T zG0D0r5*XlaY~nQ#BgfsW9sZ+_!VT)?J6ni^i9rboF$(d;7ea2;qcvk*tRBuo*i1uf zg)5FNGqDZ~&7Zy+6m4y&liV0#>#QQhBtg3V)8$#EOQMEm5v?9cZpWBR#8DM4nz1ZO zz~bVTV#ha$>e>~Ps!L+t7UtX$91xz1(L0)?**5d2{ij{PY6x%SoC2WGn77Hpv6TgwbAUtbm0csT zoh{y+4Kll4UL(#KE7c+3df|G}*;wxZU%EsfEPm`jP|Pt=UK;=7et!MB>qR`=cK}+F zLqPUS>Kp3`3yT#$wcTWx2D#U&z!Sey$r(rJm`vL^$wAmg$Z&Lj^qfPuG>Oz>f$*7L z2Cxkd3Y~!)Rs2DwCI=5Ntj&n6A{Q(1gj#u4hskh_)RsPFSIjVF^qTr~ zKB)kf-RMNcnVU|5UI#FU(;J!#yD0oDI_0Kk^z2p^j;Sr?sBDx8D)peAYe9CWEz~)h;r;y3Ki!}6ev%NvlNN}`Lr_-#<&b z@~$SLF0ehIa6~4VOp;DMt9?{<6$JJatB%~KlxK4QzLB%({iuUI@$nthD!7&0zeCGF z#ThdFuw2R6Tnt&3{|lR_`b*p^kg~+m43HG2hxTp>9xzoGEAf{IW>cId;Zj>`OkLQi zzu>?T8y_sd5;0VE5(w9Z$ZZ1$S1RwxvZvN#Js!Gxz-6`{&#GdnxYN2?_D`N!6zk+M z(xC>#m(r_XnpFDR?4Jre+g%PezVO{^=g$B2e_N2=yrUQeUl z;q>q%WKT(dqobiuyy z2p)XmZ^pG^ia>2qa5D?s14_)QtQW2`3Ne${ad8AG`fjPHdk#=io7n8aeFyhUQ&yQ# zxN6DXg_r&o{2GI*D8=b=l(zr)z0SXzGDhw4=ap8fCuFdz2xaQ(N#6{786MY^rA zLV;OXqq1^k1jHYQgiVBbn$^nJ3P2A`ME|H8F#HX{{*+pYNJ89N=%H;%H!9-|N9=!r zA_{uf*J{xLOXZW~{-$%X+*kbS*l#eBQTE4opvf{k)?kC$=cdgJXk+9=kzW$r4cbIh z+%?L_K2^cL!d$!noDL+;zqDC%!*~7h9QOg%+i$_OSMp8HPG#SKMAAqyC!k=hSpC$6wc9-QO@y!i9>Q zZsrZ&3OnE`*Hwkw0s75gktuOM!QS&ux)n1(6gM3o31a-N7|fNRi?yofFmofMnt~vU zgzPm5m0|D$g@YK%^_fr%G zcWLI`Q*P5B45O=<`-a#75AziyCTo%>g_$$qwz5enZ7UP${LJ;!wA{dTL+^-i%0=3! zoQ`Sj1i4wpTzU+^9;7U3((Vft)2DJ}00i{ldVBymp@z8@yXRh3oZT#lFU(GAsMpcDsPZTC=?A9mm^Uh|ua3Hj867FVs_9u{H6)+vArmRM zr>n}I%lh$)w%bmT2Ct0iY8{WfxKvkB=X=^#8eSLle8NIPWjT%Lh-?ADZSOn=e0`}3 ze;_9*{V_!d{ps1eq2syHF>vI<8EOTcEmhTP}zw`foStXzI$ z%5^OZfRUe_RRI%XW(IBRMzL8L2;i7xZn~JP5gH}kv$E4ml)o4GrExcwjCzFx+e9>4 zHkKO34+YzJXY+R`2$?Cg&Yi<%<8E+FYIk78v?T7x;0~Rx(JI%PFsHNqY?bR%rsy>0 zKD+Omu~xubXXKB-6ket}(`(0~cAzFqnqm76JV|F-nDI>nAyI=3tNN;?4Bm1n?XQsL zYQ!MfR>k$YBj2Tm2&kQu1|vkNroYKRG+=m4 zX6#v3G7ZsN4WB+I28r?V9wgRCv`42i(15Ar21LLA?_?k&Ti2~`oY(ka%m}t^`Cj<; ziDHEfi@V%r35;py8s{+K!{+=;m70s0wkV>=rISxd%I6=TXO1c< zOdfi*Sgrw9HhmMn0^l?=V+W97Ag9uFK1w3;6`PfbIIXHGwk@i7`oZVRLTEW?!tUW= zqoBzMQ)pNKE3J%jG4{hrH&|+C(Ij=aEfIpb4Q&k9%FsMUgim70D&4t zMzqS1GQ*A(Fb6cy0g{|LpL*wd%YwQkw~9b7@lUE+_CZM{~|iVFnu|G<1=u z?wx=+Ki$LHLxpRGxQl7;{XRM@(3BYDrNe2;fuRSc*39%MW?+>V)hjnZIhyWv*Tj+k zHCJa>#x^1YFY6zNaS!JV_Ae4~klj?!*D)w{Vb;|uiCOds-8C|*#-4yv0#AzAAJY(n z#=cja)e4YRNX00_h1>{GljQd4pg}{^&B|lg^;0&Hf)=G<15&ICch+=k>5TtO`7Tib z8%qiW8e@rpyx4og!cjP`zv|X#$rL@k?-ej1m{b{4i{c!s%kuh!|Ea;vM92QJpHW7 zQb!=k=wRZjp1fRnk3k46K2e>)eEO)EC1;H4{K8bjMU9UVkGYZDz_#<@ssQWa(iv_$ z>^FSW$I>(PR>GLIFCNE}bY&=jKmWCWQ6X%-zq(F)PI1@La0~;3O<>DrSYy%p3nG6^{~Jl^^KSM49oJI?^TWSzNyGMGD46s-2fAMKMG4f3h_!8TI2cT}21_79LL z2c4{)6d9?h8#ZkH{J%mSe&?avYtVyc9Tgl$pz+b@BRMI}Y9#mDG1r58IZeoup32Xp zBw$*r7CFAj@Qx_H&u;-Y!`LA&K%R=vd*ldVo5*QVR;JK6*7>6O^F3LqrWP+JI}FZM znQ_uoOjZn#9|d#C%MC#mIHze;I4ihck3$Vg3}VfZT(Zjd8&xN*wa^QPvda%1`)fZl zO|;fPXr3-ll_*uD_1U%zcE5sM^V+Q+Z4qZA2RMtMWDM7@_pT<*5W`JDBa9fsR_WW4 z8U=1Rs1P_R`gMCdv$MId?94WJ0W9|Uzc4hlY zRAC$I$iygm1?DgQ=ylspk-7C#NVwC`>!>Il!s%2aMD`h)E#8A$2mYQpatB6)gBAP@ zJGqrq{;0!BH3tX(SHrO3T{2g~1Ojc@yMjZ5Vq zN6cX#()w@z^e0CPhG+%w<%_n$krT9deZqyJ(^<**i!T-|0NkPc)pfdMR`IQB!h8J( zwayc)_yz_|u#{qzkv4NjTGY={(Tw{C&kIq2y!%adn!J%RiZl1{Y81rk6X7x&o3X%k z`-|%BjW9y(CAeqsTMqXQ`yuRBf$_-YH&_*4`FAr9^ozFg7NDe>8M=e7 z#T|Jg@ZZMbfI|-8KUq`+6Y3IV!b8d-Ia2BMb<;r8ytc+&Dy4AQ@yAWtuQfm&xA)&}!Z z;C6ZT7JDde&yQO7VtAnEnp~s~Yia0#CZ#L2GL3wawP}Ykyc~rbtOcb%xf`)g+GERv zN)UBi*9E=9sdy~P*rew#Y{+~t0!cLkR1e$WWUTHfZG)eewU>x=y-kGEl#t0leI=Lh zF%w|w-sHRe?uqE94vuzLUV6T#fKs-Yfa*f2-~c;b9NI??jlin6bjjiXvAI8O zH(;EY#P`gOESab4wCd%Y12#+y9Z;Ej0XREhSZFSUHO&f^Z#b z{QU>(|jo%O}x^xKKp_jAAEAuZx}*h26K=3 z2k4$2h;Rpt5=a|*qau#*TWiC+Dhu(fb>$*veeH7Jd3~z}vv~b+ z>b&qXoeR5KLC+8`v${32Oe>#C>OTMzg!{$g^mk(APu*k&LWiZVG$2^b6QFsb}vezB19QYPeB`*9B}SyG5TnE@~# z_spMmN5e*ohjCEn^jg_DS|h|dkx;8bb#`@H`GR-Avv{>W0XDv+C4yh9O*YpmQ#xIL z83H}-taC(p$BgTBr$4tWdUh`c^%*BFOaSTgS-vH&9PtN6;hRm@l{9*)qS^*2qh5d? zT2fiali!{!6`Hs7Y6LuyTlNt&9;{S7u2p+so2dN2HEXU~&66DqI8}F+-ZwC*&6HN8yO7rU^}2v4h!mVdI%zCq$()Pmq04KGXTNLrRN#yMrwl< z6S~_A>t%tsZtg4?=il35PUAemoI(l<+}uqjiOye~G!Yn1zpJwvfoKmK!}0X@J(#{}3;kFvR64sPQOp zdcIh0DtakA(*BPSZJKaI>fzNd>@l6`-^t`^<(JKrE0)b2#Txybiaxq*>xqJ|biA~F zq616Z1p=F&J?%;Jk^I=Vp);SjAHDe)%#iokufJOHgL>%075k7z4D=O8#3^XoOzM~q z6xB`ytaV_Dd>F#@v#fXIZM|r#T$FH3t@;S4X`%nMA`E)?qMP-P!7BxmeadT%vs!1+ zh=>!+wPvNaJZMua!6O>9-5kAfvd9BtENAwk6s{IT=UXM=6KQa zlXPwVf=%uVs=ZacYORs+AL+JrrdD)o#ptiDcW3N5lhI55&MT@q)oMZt^@&YgU*R2E z#8UNR`j7ham2rOcZ=duf%Wxk}rak|BS!!-iSM+!^YVhMoUg9tTBsKO$mZ<;4_@qcg z`O|*^5^4@Ozx;7uh3FafWPSV&R@Oj`z5J(xeI(%gq!!QL74-^Yco`#kvKH;O9OLVO zopbrj2wdJ9AA9BL#lf565jgg1Tx+7q&wOY)Vj-;k(r87T%={ab{Lna;@)`Q*5b!nP zW2a{r`x21sPF5U`V)Gr9StWCFKk!mPb0AKSDnn*mtK*ds8USApN9d&uE0P7)0-If- zA@P|uQTOs&W9b#Sn;>o>?=CB1X&kd8R?2%9k4G8VX*GKlNiUq4 z_cCT)MSw5q{_JLqU~O?iRvrOh0f9Y|db<&2iM58ZLYO0t31eJL7h?7d%gbZEyBJ9+ z98O#e_B3h77sWOR*~#`m@>|2;yG3_Vym=3HH1MHzx_@BMndih_e!m=Z$aRw;fsUl? zZM}mPycMH}H=eG|i8h5l9S#uDe_NX^ji<$23WS;v&OfNvvCB%3Ex01`d1TT#YnQx z5IAm~mZB>%h+H%Wwc_+LLHBz$HSTMSBON8>3u(edCi8-1ox*28C4N3|bzuH=J0W(dKQKKx1P*EBUu zNTgZ#yrHAdtPqK!x<1Ofx*7${OV3jV${UBP>}*{Nn*J|k9$$8nT0f}xGF~M1l7^3v z+D=^my*+~8U`uwOkKK8g;Be%JlX9{H?wlbe7ou^MT#W?#8pG$45l>f>^xx~xHXP+M zM^kH}el6SPeAIds^|Q!6S+f1XTJhs?7I$uzsMXDiFxGEOqMtI3fXh^+4-6-x=l0}% zN&-a`Y<^#N?YV4eyVD*s>j8P`ZoeEqul~=OKi(2z|0>g8b-{be_OaxC+S;!5gXpJO z%o3mXrr0*gW=({a#QD>3gcUEOUY3@6H8K?gB9NvwT?8V%y*&7jCGk;-w?9w2KQe?c z&%E_+>s^Sr3Z4v*{m%s$kjFxy?js*?dZ@gTK4v7%0D@F#%6CR7=BkP)x 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

    2s%#?~-lr`02f!9mUZzXO6FSc21l+d)I|CN2X{y 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 literal 0 HcmV?d00001 diff --git a/Documentation/pictures/Learning_Macos_Save_file_with_name.png b/Documentation/pictures/Learning_Macos_Save_file_with_name.png new file mode 100644 index 0000000000000000000000000000000000000000..7a11e856f8a26c07de58663669d7b710dadb58e7 GIT binary patch literal 26407 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

    + + \IMAGE-FILE\ + +

    + (Klik om te vergroten) +

    +
    ") + "
    \n") -(define (round-filled-box breapth width depth height blot-diameter) - (entity 'rect "" - ;; The stroke will stick out. To use stroke, - ;; the stroke-width must be subtracted from all other dimensions. - ;;'(stroke-linejoin . "round") - ;;'(stroke-linecap . "round") - ;;`(stroke-width . ,blot) - ;;'(stroke . "red") - ;;'(fill . "orange") - - `(x . ,(- breapth)) - `(y . ,(- height)) - `(width . ,(+ breapth width)) - `(height . ,(+ depth height)) - `(ry . ,(/ blot-diameter 2)) - )) +(define (resetscale) + "
    \n") -(define (circle radius thick is-filled) +(define (round-filled-box breapth width depth height blot-diameter) (entity - 'circle "" - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - `(fill . ,(if is-filled "currentColor" "none")) - `(stroke . "currentColor") - `(stroke-width . ,thick) - `(r . ,radius))) + 'rect "" + ;; The stroke will stick out. To use stroke, + ;; the stroke-width must be subtracted from all other dimensions. + ;;'(stroke-linejoin . "round") + ;;'(stroke-linecap . "round") + ;;`(stroke-width . ,blot) + ;;'(stroke . "red") + ;;'(fill . "orange") + + `(x . ,(- breapth)) + `(y . ,(- height)) + `(width . ,(+ breapth width)) + `(height . ,(+ depth height)) + `(ry . ,(/ blot-diameter 2)) + '(fill . "currentColor"))) -(define (ellipse x-radius y-radius thick is-filled) - (entity - 'ellipse "" - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - `(fill . ,(if is-filled "currentColor" "none")) - `(stroke . "currentColor") - `(stroke-width . ,thick) - `(rx . ,x-radius) - `(ry . ,y-radius))) +(define (setcolor r g b) + (format "\n" + (* 100 r) (* 100 g) (* 100 b))) -(define (oval x-radius y-radius thick is-filled) - (let ((x-max x-radius) - (x-min (- x-radius)) - (y-max y-radius) - (y-min (- y-radius))) - (entity - 'path "" - '(stroke-linejoin . "round") - '(stroke-linecap . "round") - `(fill . ,(if is-filled "currentColor" "none")) - `(stroke . "currentColor") - `(stroke-width . ,thick) - `(d . ,(ly:format "M~4f,~4f C~4f,~4f ~4f,~4f ~4f,~4f S~4f,~4f ~4f,~4f" - x-max 0 - x-max y-max - x-min y-max - x-min 0 - x-max y-min - x-max 0))))) +;; rotate around given point +(define (setrotation ang x y) + (ly:format "\n" + (- ang) x (- y))) + +(define (setscale x y) + (ly:format "\n" + x y)) (define (text font string) (dispatch `(fontify ,font ,(entity 'tspan (string->entities string))))) -(define (utf-8-string pango-font-description string) - (dispatch `(fontify ,pango-font-description ,(entity 'tspan string)))) - - - -(define (setcolor r g b) - (format "" - (* 100 r) (* 100 g) (* 100 b) - )) +(define (url-link url x y) + (string-append + (eo 'a `(xlink:href . ,url)) + (eoc 'rect + `(x . ,(car x)) + `(y . ,(car y)) + `(width . ,(- (cdr x) (car x))) + `(height . ,(- (cdr y) (car y))) + '(fill . "none") + '(stroke . "none") + '(stroke-width . "0.0")) + (ec 'a))) -(define (resetcolor) - "") +(define (utf-8-string pango-font-description string) + (let ((escaped-string (string-regexp-substitute + "<" "<" + (string-regexp-substitute "&" "&" string)))) + (dispatch `(fontify ,pango-font-description + ,(entity 'tspan escaped-string))))) diff --git a/scm/page.scm b/scm/page.scm index a486219801..f65c9559d3 100644 --- a/scm/page.scm +++ b/scm/page.scm @@ -1,10 +1,19 @@ -;; -;; page.scm -- implement Page stuff. -;; -;; source file of the GNU LilyPond music typesetter -;; -;; (c) 2006 Han-Wen Nienhuys -;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2006--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . (define-module (scm page) @@ -14,8 +23,7 @@ page-prev page-printable-height layout->page-init - page-lines - page-force + page-force page-penalty page-configuration page-lines @@ -23,7 +31,7 @@ page-system-numbers page-stencil page-free-height - page? + page? )) (use-modules (lily) @@ -46,9 +54,9 @@ (page-set-property! p 'head-stencil (page-header p)) (page-set-property! p 'foot-stencil (page-footer p)) - + p)) - + (define page-property ly:prob-property) (define page-set-property! ly:prob-set-property!) (define (page-property? page sym) @@ -56,7 +64,7 @@ (define (page? x) (ly:prob-type? x 'page)) -;; define accessors. +;; define accessors. (for-each (lambda (j) (module-define! @@ -64,7 +72,7 @@ (string->symbol (format "page-~a" j)) (lambda (pg) (page-property pg j)))) - + '(page-number prev lines force penalty lines)) (define (page-system-numbers page) @@ -81,10 +89,31 @@ (if (not (number? (ly:prob-property sys 'Y-offset))) (ly:prob-set-property! sys 'Y-offset off)))) - + (zip (page-property page 'lines) (page-property page 'configuration)))) +(define (annotate-top-space first-system layout header-stencil stencil) + (let* ((top-margin (ly:output-def-lookup layout 'top-margin)) + (sym (if (paper-system-title? first-system) + 'top-markup-spacing + 'top-system-spacing)) + (spacing-spec (ly:output-def-lookup layout sym)) + (X-offset (ly:prob-property first-system 'X-offset 5)) + (header-extent (ly:stencil-extent header-stencil Y))) + + (set! stencil + (ly:stencil-add stencil + (ly:stencil-translate-axis + (annotate-spacing-spec layout + spacing-spec + (- top-margin) + (car header-extent) + #:base-color red) + X-offset X))) + stencil)) + + (define (annotate-page layout stencil) (let ((top-margin (ly:output-def-lookup layout 'top-margin)) (paper-height (ly:output-def-lookup layout 'paper-height)) @@ -94,19 +123,19 @@ (ly:stencil-add stencil (ly:stencil-translate-axis y 6 X)))))) (add-stencil - (ly:stencil-translate-axis + (ly:stencil-translate-axis (annotate-y-interval layout "paper-height" (cons (- paper-height) 0) #t) 1 X)) (add-stencil - (ly:stencil-translate-axis + (ly:stencil-translate-axis (annotate-y-interval layout "top-margin" (cons (- top-margin) 0) #t) 2 X)) (add-stencil - (ly:stencil-translate-axis + (ly:stencil-translate-axis (annotate-y-interval layout "bottom-margin" (cons (- paper-height) (- bottom-margin paper-height)) #t) @@ -133,81 +162,24 @@ arrow)) - - - -(define (page-headfoot layout scopes number sym separation-symbol dir - is-last-bookpart is-bookpart-last-page) - - "Create a stencil including separating space." - - (let* ((header-proc (ly:output-def-lookup layout sym)) - (sep (ly:output-def-lookup layout separation-symbol)) - (stencil (ly:make-stencil "" '(0 . 0) '(0 . 0))) - (head-stencil - (if (procedure? header-proc) - (header-proc layout scopes number is-last-bookpart is-bookpart-last-page) - #f))) - - (if (and (number? sep) - (ly:stencil? head-stencil) - (not (ly:stencil-empty? head-stencil))) - - (begin - (set! head-stencil - (ly:stencil-combine-at-edge - stencil Y dir head-stencil - sep)) - - - ;; add arrow markers - (if (or (annotate? layout) - (ly:output-def-lookup layout 'annotate-headers #f)) - (set! head-stencil - (ly:stencil-add - (ly:stencil-translate-axis - (annotate-y-interval layout - (symbol->string separation-symbol) - (cons (min 0 (* dir sep)) - (max 0 (* dir sep))) - #t) - (/ (ly:output-def-lookup layout 'line-width) 2) - X) - (if (= dir UP) - (ly:stencil-translate-axis - (annotate-y-interval layout - "page-top-space" - (cons - (- (min 0 (* dir sep)) - (ly:output-def-lookup layout 'page-top-space)) - (min 0 (* dir sep))) - #t) - (+ 7 (interval-center (ly:stencil-extent head-stencil X))) X) - empty-stencil - ) - head-stencil - )) - ))) - - head-stencil)) (define (page-header-or-footer page dir) - (let* + (let* ((paper-book (page-property page 'paper-book)) (layout (ly:paper-book-paper paper-book)) (scopes (ly:paper-book-scopes paper-book)) (number (page-page-number page)) (is-last-bookpart (page-property page 'is-last-bookpart)) - (is-bookpart-last-page (page-property page 'is-bookpart-last-page))) - - (page-headfoot layout scopes number - (if (= dir UP) - 'make-header - 'make-footer) - (if (= dir UP) - 'head-separation - 'foot-separation) - dir is-last-bookpart is-bookpart-last-page))) + (is-bookpart-last-page (page-property page 'is-bookpart-last-page)) + (sym (if (= dir UP) + 'make-header + 'make-footer)) + (header-proc (ly:output-def-lookup layout sym))) + + (if (procedure? header-proc) + (header-proc layout scopes number is-last-bookpart is-bookpart-last-page) + #f))) + (define (page-header page) (page-header-or-footer page UP)) @@ -220,26 +192,24 @@ (let* ((paper-height (ly:output-def-lookup layout 'paper-height)) (paper-width (ly:output-def-lookup layout 'paper-width)) - (lmargin (ly:output-def-lookup layout 'left-margin #f)) - (left-margin (if lmargin - lmargin - (/ (- paper-width - (ly:output-def-lookup layout 'line-width)) 2))) + (left-margin (ly:output-def-lookup layout 'left-margin)) + (right-margin (ly:output-def-lookup layout 'right-margin)) (bottom-edge (- paper-height (ly:output-def-lookup layout 'bottom-margin)) ) (top-margin (ly:output-def-lookup layout 'top-margin)) ) - + `((paper-height . ,paper-height) (paper-width . ,paper-width) (left-margin . ,left-margin) + (right-margin . ,right-margin) (top-margin . ,top-margin) (bottom-edge . ,bottom-edge) ))) (define (make-page-stencil page) "Construct a stencil representing the page from PAGE." - + (page-translate-systems page) (let* @@ -251,7 +221,7 @@ (number (page-page-number page)) ;; TODO: naming paper-height/paper-width not analogous to TeX. - + (system-xoffset (ly:output-def-lookup layout 'horizontal-shift 0.0)) (system-separator-markup (ly:output-def-lookup layout 'system-separator-markup)) (system-separator-stencil (if (markup? system-separator-markup) @@ -259,10 +229,6 @@ (layout-extract-page-properties layout) system-separator-markup) #f)) - - (head-height (if (ly:stencil? (prop 'head-stencil)) - (interval-length (ly:stencil-extent (prop 'head-stencil) Y)) - 0.0)) (page-stencil (ly:make-stencil '())) @@ -274,13 +240,13 @@ (ly:stencil-translate stencil (cons (+ system-xoffset x) - (- 0 head-height y (prop 'top-margin))) - + (- 0 y (prop 'top-margin))) + ))))) (add-system (lambda (system) (let* ((stencil (paper-system-stencil system)) - (y (ly:prob-property system 'Y-offset)) + (y (ly:prob-property system 'Y-offset 0)) (is-title (paper-system-title? system))) (add-to-page stencil @@ -304,25 +270,27 @@ ) (if (and - (or (annotate? layout) - (ly:output-def-lookup layout 'annotate-systems #f)) + (ly:stencil? head) + (not (ly:stencil-empty? head))) + (begin + ;; Ensure that the top of the header just touches the top margin. + (set! head (ly:stencil-translate-axis head + (- 0 (cdr (ly:stencil-extent head Y)) (prop 'top-margin)) Y)) + (set! page-stencil (ly:stencil-add page-stencil head)))) + + (if (and + (annotate? layout) (pair? lines)) (begin + (set! page-stencil (annotate-top-space (car lines) layout head page-stencil)) + (for-each (lambda (sys next-sys) (paper-system-annotate sys next-sys layout)) lines (append (cdr lines) (list #f))) (paper-system-annotate-last (car (last-pair lines)) layout))) - (if (and - (ly:stencil? head) - (not (ly:stencil-empty? head))) - - (set! page-stencil (ly:stencil-add page-stencil - (ly:stencil-translate-axis head - (- 0 head-height (prop 'top-margin)) Y)))) - (map add-system lines) @@ -340,7 +308,7 @@ (set! page-stencil (ly:stencil-add page-stencil (annotate-space-left page)))) - + (if (and (ly:stencil? foot) (not (ly:stencil-empty? foot))) (set! page-stencil @@ -352,24 +320,29 @@ (+ (- (prop 'bottom-edge)) (- (car (ly:stencil-extent foot Y))))))))) - (set! page-stencil - (ly:stencil-translate page-stencil (cons (prop 'left-margin) 0))) + (if (ly:output-def-lookup layout 'two-sided #f) + (set! page-stencil + (ly:stencil-translate page-stencil + (cons (prop (if (even? number) + 'left-margin + 'right-margin)) + 0))) + (set! page-stencil + (ly:stencil-translate page-stencil (cons (prop 'left-margin) 0)))) ;; annotation. - (if (or (annotate? layout) - (ly:output-def-lookup layout 'annotate-page #f)) + (if (annotate? layout) (set! page-stencil (annotate-page layout page-stencil))) - page-stencil)) - + (define-public (page-stencil page) (if (not (ly:stencil? (page-property page 'stencil))) ;; todo: make tweakable. ;; via property + callbacks. - + (page-set-property! page 'stencil (make-page-stencil page))) (page-property page 'stencil)) @@ -379,9 +352,9 @@ ((paper-book (page-property page 'paper-book)) (layout (ly:paper-book-paper paper-book)) (h (- (ly:output-def-lookup layout 'paper-height) - (ly:output-def-lookup layout 'top-margin) - (ly:output-def-lookup layout 'bottom-margin))) - + (ly:output-def-lookup layout 'top-margin) + (ly:output-def-lookup layout 'bottom-margin))) + (head (page-property page 'head-stencil)) (foot (page-property page 'foot-stencil)) (available @@ -391,13 +364,13 @@ (if (ly:stencil? foot) (interval-length (ly:stencil-extent foot Y)) 0)))) - + ;; (display (list "\n available" available head foot)) available)) (define (page-printable-height page) (if (not (number? (page-property page 'printable-height))) (page-set-property! page 'printable-height (calc-printable-height page))) - + (page-property page 'printable-height)) diff --git a/scm/paper-system.scm b/scm/paper-system.scm index 6a391a3a0f..9e9f9ab7d4 100644 --- a/scm/paper-system.scm +++ b/scm/paper-system.scm @@ -1,10 +1,19 @@ -;; -;; paper-system.scm -- implement paper-system objects. -;; -;; source file of the GNU LilyPond music typesetter -;; -;; (c) 2006 Han-Wen Nienhuys -;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2006--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . (define-module (scm paper-system)) @@ -56,63 +65,11 @@ (set! (ly:prob-property system 'stencil) stencil) )) - + +; TODO: annotate the spacing for every spaceable staff within the system. (define-public (paper-system-annotate system next-system layout) "Add arrows and texts to indicate which lengths are set." (let* ((annotations (list)) - (annotate-extent-and-space - (lambda (extent-accessor next-space - extent-name next-space-name after-space-name) - (let* ((extent-annotations (list)) - (this-extent (extent-accessor system)) - (next-extent (and next-system (extent-accessor next-system))) - (push-annotation (lambda (stil) - (set! extent-annotations - (cons stil extent-annotations)))) - (color (if (paper-system-title? system) darkblue blue)) - (space-color (if (paper-system-title? system) darkred red))) - (if (and (number-pair? this-extent) - (not (= (interval-start this-extent) - (interval-end this-extent)))) - (push-annotation (annotate-y-interval - layout extent-name this-extent #f - #:color color))) - (if next-system - (push-annotation (annotate-y-interval - layout next-space-name - (interval-translate (cons (- next-space) 0) - (if (number-pair? this-extent) - (interval-start this-extent) - 0)) - #t - #:color color))) - (if (and next-system - (number-pair? this-extent) - (number-pair? next-extent)) - (let ((space-after - (- (+ (ly:prob-property next-system 'Y-offset) - (interval-start this-extent)) - (ly:prob-property system 'Y-offset) - (interval-end next-extent) - next-space))) - (if (> space-after 0.01) - (push-annotation (annotate-y-interval - layout - after-space-name - (interval-translate - (cons (- space-after) 0) - (- (interval-start this-extent) - next-space)) - #t - #:color space-color))))) - (if (not (null? extent-annotations)) - (set! annotations - (stack-stencils X RIGHT 0.5 - (list annotations - (ly:make-stencil '() (cons 0 1) (cons 0 0)) - (apply ly:stencil-add - extent-annotations)))))))) - (grob (ly:prob-property system 'system-grob)) (estimate-extent (if (ly:grob? grob) (annotate-y-interval layout @@ -120,30 +77,23 @@ (ly:grob-property grob 'pure-Y-extent) #f) #f))) - (let ((next-space (ly:prob-property - system 'next-space - (cond ((and next-system - (paper-system-title? system) - (paper-system-title? next-system)) - (ly:output-def-lookup layout 'between-title-space)) - ((paper-system-title? system) - (ly:output-def-lookup layout 'after-title-space)) - ((and next-system - (paper-system-title? next-system)) - (ly:output-def-lookup layout 'before-title-space)) - (else - (ly:output-def-lookup layout 'between-system-space))))) - (next-padding (ly:prob-property - system 'next-padding - (ly:output-def-lookup layout 'between-system-padding)))) - (annotate-extent-and-space (lambda (sys) - (paper-system-extent sys Y)) - next-padding - "Y-extent" "next-padding" "space after next-padding") - (annotate-extent-and-space paper-system-staff-extents - (+ next-space next-padding) - "staff-refpoint-extent" "next-space+padding" - "space after next-space+padding")) + (let* ((spacing-spec (cond ((and next-system + (paper-system-title? system) + (paper-system-title? next-system)) + (ly:output-def-lookup layout 'markup-markup-spacing)) + ((paper-system-title? system) + (ly:output-def-lookup layout 'markup-system-spacing)) + ((and next-system + (paper-system-title? next-system)) + (ly:output-def-lookup layout 'score-markup-spacing)) + ((not next-system) + (ly:output-def-lookup layout 'last-bottom-spacing)) + (else + (ly:output-def-lookup layout 'system-system-spacing)))) + (last-staff-Y (car (paper-system-staff-extents system)))) + + (set! annotations + (annotate-spacing-spec layout spacing-spec last-staff-Y (car (paper-system-extent system Y))))) (if estimate-extent (set! annotations (stack-stencils X RIGHT 0.5 diff --git a/scm/paper.scm b/scm/paper.scm index d3e299ddd8..3208f4b82a 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -1,34 +1,45 @@ -;;;; paper.scm -- manipulate the paper and layout block. +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . (define-public (set-paper-dimension-variables mod) (module-define! mod 'dimension-variables - '(after-title-space - before-title-space - between-system-padding - between-system-space - between-title-space - blot-diameter + '(blot-diameter bottom-margin cm - foot-separation - head-separation + footnote-footer-padding + footnote-padding horizontal-shift in indent + inner-margin + inner-margin-default-scaled ledger-line-thickness left-margin + left-margin-default-scaled line-thickness line-width mm - page-top-space + outer-margin + outer-margin-default-scaled paper-height paper-width pt right-margin + right-margin-default-scaled short-indent staff-height staff-space @@ -39,15 +50,15 @@ ;; !! synchronize with feta-params.mf (let* - ((x1 (* 4.125 pt)) - (x0 (* 5 pt)) - (f1 (* 0.47 pt)) - (f0 (* 0.50 pt))) + ((x1 (* 4.125 pt)) + (x0 (* 5 pt)) + (f1 (* 0.47 pt)) + (f0 (* 0.50 pt))) (/ (+ (* f1 (- staff-space x0)) - (* f0 (- x1 staff-space))) + (* f0 (- x1 staff-space))) (- x1 x0)))) (define-public (layout-set-absolute-staff-size-in-module module staff-height) @@ -58,8 +69,10 @@ (setm! (lambda (sym val) (module-define! module sym val)))) - (setm! 'text-font-size (* 12 factor)) - + ;; Synchronized with the `text-font-size' + ;; binding in add-pango-fonts (see font.scm). + (setm! 'text-font-size (* 11 factor)) + (setm! 'output-scale ss) (setm! 'fonts (make-century-schoolbook-tree factor)) (setm! 'staff-height staff-height) @@ -67,21 +80,21 @@ (setm! 'line-thickness (calc-line-thickness ss pt)) - ;; sync with feta + ;; sync with feta (setm! 'ledger-line-thickness (+ (* 0.5 pt) (/ ss 10))) - ;; sync with feta + ;; sync with feta (setm! 'blot-diameter (* 0.4 pt)) )) (define-public (layout-set-absolute-staff-size sz) - "Function to be called inside a \\layout{} block to set the staff -size. SZ is in points" + "Set the absolute staff size inside of a @code{\\layout@{@}} block. +@var{sz} is in points." (layout-set-absolute-staff-size-in-module (current-module) sz)) (define-public (layout-set-staff-size sz) - "Function to be called inside a \\layout{} block to set the staff -size. SZ is in points" + "Set the staff size inside of a @code{\\layout@{@}} block. +@var{sz} is in points." (layout-set-absolute-staff-size (* (eval 'pt (current-module)) sz))) @@ -93,13 +106,13 @@ size. SZ is in points" (in-layout? (or (module-defined? current-mod 'is-paper) (module-defined? current-mod 'is-layout))) - ; maybe not necessary. - ; but let's be paranoid. Maybe someone still refers to the - ; old one. + ;; maybe not necessary. + ;; but let's be paranoid. Maybe someone still refers to the + ;; old one. (new-paper (ly:output-def-clone pap)) - + (new-scope (ly:output-def-scope new-paper))) - + (if in-layout? (ly:warning (_ "set-global-staff-size: not in toplevel scope"))) @@ -211,46 +224,90 @@ size. SZ is in points" ("pa10" . (cons (* 26 mm) (* 35 mm))) ;; F4 used in southeast Asia and Australia ("f4" . (cons (* 210 mm) (* 330 mm))) - )) + ;; Used for very small @lilypond examples in the Documentation + ;; based on a8 size but landscape not portrait + ("a8landscape" . (cons (* 74 mm) (* 52 mm))) + )) ;; todo: take dimension arguments. (define (set-paper-dimensions m w h) "M is a module (i.e. layout->scope_ )" - (let* ((mm (eval 'mm m))) + (let* + ;; page layout - what to do with (printer specific!) margin settings? + ((paper-default (eval-carefully + (assoc-get + (ly:get-option 'paper-size) + paper-alist + #f + #t) + m + (cons w h))) + ;; Horizontal margins, marked with 'preserve, are stored + ;; in renamed variables because they must not be overwritten. + ;; Output_def::normalize () needs to know + ;; whether the user set the value or not. + (scaleable-values `((("left-margin" . ,w) . preserve) + (("right-margin" . ,w) . preserve) + (("inner-margin" . ,w) . preserve) + (("outer-margin" . ,w) . preserve) + (("binding-offset" . ,w) . '()) + (("top-margin" . ,h) . '()) + (("bottom-margin" . ,h) . '()) + (("indent" . ,w) . '()) + (("short-indent" . ,w) . '()))) + (scaled-values + (map + (lambda (entry) + (let ((entry-symbol + (string->symbol + (string-append (caar entry) "-default"))) + (orientation (cdar entry))) + (if paper-default + (cons (if (eq? (cdr entry) 'preserve) + (string-append (caar entry) "-default-scaled") + (caar entry)) + (round (* orientation + (/ (eval-carefully entry-symbol m 0) + (if (= orientation w) + (car paper-default) + (cdr paper-default)))))) + entry))) + scaleable-values))) + (module-define! m 'paper-width w) (module-define! m 'paper-height h) - (module-define! m 'line-width (- w - (ly:modules-lookup (list m) 'left-margin (* 10 mm)) - (ly:modules-lookup (list m) 'right-margin (* 10 mm)))) - - (module-define! m 'indent (/ w 14)) - (module-define! m 'short-indent 0) + ;; Sometimes, lilypond-book doesn't estimate a correct line-width. + ;; Therefore, we need to unset line-width. + (module-remove! m 'line-width) - ;; page layout - what to do with (printer specific!) margin settings? - - )) + (for-each + (lambda (value) + (let ((value-symbol (string->symbol (car value))) + (number (cdr value))) + (module-define! m value-symbol number))) + scaled-values))) (define (internal-set-paper-size module name landscape?) (define (swap x) (cons (cdr x) (car x))) - - (let* ((entry (assoc name paper-alist)) + + (let* ((entry (assoc-get name paper-alist)) (is-paper? (module-defined? module 'is-paper)) (mm (eval 'mm module))) - + (cond ((not is-paper?) (ly:warning (_ "This is not a \\layout {} object, ~S") module)) - ((pair? entry) + (entry - (set! entry (eval (cdr entry) module)) + (set! entry (eval entry module)) (if landscape? (set! entry (swap entry))) (set-paper-dimensions module (car entry) (cdr entry)) (module-define! module 'papersizename name) - (module-define! module 'landscape + (module-define! module 'landscape (if landscape? #t #f))) (else (ly:warning (_ "Unknown paper size: ~a") name))))) @@ -270,11 +327,12 @@ size. SZ is in points" ;;; that in parse-scm.cc (ly:warning (_ "Must use #(set-paper-size .. ) within \\paper { ... }")))) -(define-public (scale-layout pap scale) - (let* ((new-pap (ly:output-def-clone pap)) - (dim-vars (ly:output-def-lookup pap 'dimension-variables)) - (old-scope (ly:output-def-scope pap)) - (scope (ly:output-def-scope new-pap))) +(define-public (scale-layout paper scale) + "Return a clone of the paper, scaled by the given scale factor." + (let* ((new-paper (ly:output-def-clone paper)) + (dim-vars (ly:output-def-lookup paper 'dimension-variables)) + (old-scope (ly:output-def-scope paper)) + (scope (ly:output-def-scope new-paper))) (for-each (lambda (v) @@ -282,13 +340,10 @@ size. SZ is in points" (val (if (variable? var) (variable-ref var) #f))) (if (number? val) - (module-define! scope v - (/ val scale)) - - ;; spurious warnings, eg. for paper-width, paper-height. - ;; (ly:warning (_ "not a number, ~S = ~S " v val)) + (module-define! scope v (/ val scale)) + ;; Cannot warn for non-numbers, eg. for paper-width, paper-height. ))) - dim-vars) - - new-pap)) + ;; Mark the clone. + (ly:output-def-set-variable! new-paper 'cloned #t) + new-paper)) diff --git a/scm/parser-clef.scm b/scm/parser-clef.scm index b3de9fc405..a731e7459e 100644 --- a/scm/parser-clef.scm +++ b/scm/parser-clef.scm @@ -1,8 +1,19 @@ -;;;; clef.scm -- Clef settings +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys ;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; 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 . ;; (name . (glyph clef-position octavation)) @@ -63,6 +74,7 @@ ("petrucci-c5" . ("clefs.petrucci.c5" 4 0)) ("petrucci-f3" . ("clefs.petrucci.f" 0 0)) ("petrucci-f4" . ("clefs.petrucci.f" 2 0)) + ("petrucci-f5" . ("clefs.petrucci.f" 4 0)) ("petrucci-f" . ("clefs.petrucci.f" 2 0)) ("petrucci-g" . ("clefs.petrucci.g" -2 0)))) @@ -94,7 +106,7 @@ ("clefs.petrucci.g" . -4))) (define-public (make-clef-set clef-name) - "Generate the clef setting commands for a clef with name CLEF-NAME." + "Generate the clef setting commands for a clef with name @var{clef-name}." (define (make-prop-set props) (let ((m (make-music 'PropertySet))) (map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props) @@ -102,22 +114,22 @@ (let ((e '()) (c0 0) (oct 0) - (match (string-match "^(.*)([_^])([0-9]+)$" clef-name))) + (match (string-match "^(.*)([_^])([1-9][0-9]*)$" clef-name))) (if match (begin (set! clef-name (match:substring match 1)) (set! oct (* (if (equal? (match:substring match 2) "^") -1 1) (- (string->number (match:substring match 3)) 1))))) - (set! e (assoc clef-name supported-clefs)) - (if (pair? e) + (set! e (assoc-get clef-name supported-clefs)) + (if e (let* ((musics (map make-prop-set - `(((symbol . clefGlyph) (value . ,(cadr e))) + `(((symbol . clefGlyph) (value . ,(car e))) ((symbol . middleCClefPosition) (value . ,(+ oct - (caddr e) - (cdr (assoc (cadr e) c0-pitch-alist))))) - ((symbol . clefPosition) (value . ,(caddr e))) + (cadr e) + (assoc-get (car e) c0-pitch-alist)))) + ((symbol . clefPosition) (value . ,(cadr e))) ((symbol . clefOctavation) (value . ,(- oct)))))) (recalc-mid-C (make-music 'ApplyContext)) (seq (make-music 'SequentialMusic @@ -132,3 +144,71 @@ (sort (map car supported-clefs) stringnumber (match:substring match 3)) 1))))) + (set! e (assoc-get clef-name supported-clefs)) + (if e + (let* ((musics (map make-prop-set + `(((symbol . cueClefGlyph) (value . ,(car e))) + ((symbol . middleCCuePosition) + (value . ,(+ oct + (cadr e) + (assoc-get (car e) c0-pitch-alist)))) + ((symbol . cueClefPosition) (value . ,(cadr e))) + ((symbol . cueClefOctavation) (value . ,(- oct)))))) + (recalc-mid-C (make-music 'ApplyContext)) + (seq (make-music 'SequentialMusic + 'elements (append musics (list recalc-mid-C)))) + (csp (make-music 'ContextSpeccedMusic))) + (set! (ly:music-property recalc-mid-C 'procedure) ly:set-middle-C!) + (context-spec-music seq 'Staff)) + (begin + (ly:warning (_ "unknown clef type `~a'") clef-name) + (ly:warning (_ "supported clefs: ~a") + (string-join + (sort (map car supported-clefs) string +;;;; Copyright (C) 2004--2011 Nicolas Sceaux ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define gen-lily-sym ;; Generate a lilyvartmpXX symbol, that may be (hopefully) unique. @@ -18,7 +29,7 @@ (string->list (number->string var-idx))))))))) (define-public (parse-string-result str parser) - "Parse `str', which is supposed to contain a music expression." + "Parse @var{str}, which is supposed to contain a music expression." (ly:parser-parse-string parser @@ -26,10 +37,10 @@ (ly:parser-lookup parser 'parseStringResult)) (define-public (read-lily-expression chr port) - "Read a #{ lily music expression #} from port and return -the scheme music expression. The $ character may be used to introduce -scheme forms, typically symbols. $$ may be used to simply write a `$' -character." + "Read a lilypond music expression enclosed within @code{#@}} and @code{#@}} +from @var{port} and return the corresponding Scheme music expression. +The @samp{$} character may be used to introduce Scheme forms, typically +symbols. @code{$$} may be used to simply write a @samp{$} character itself." (let ((bindings '())) (define (create-binding! val) diff --git a/scm/part-combiner.scm b/scm/part-combiner.scm index 81beaf6ae7..0e72ebe2a0 100644 --- a/scm/part-combiner.scm +++ b/scm/part-combiner.scm @@ -1,8 +1,19 @@ -;;;; part-combiner.scm -- Part combining, staff changes. +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . ;; todo: figure out how to make module, ;; without breaking nested ly scopes @@ -19,7 +30,7 @@ ;; of (SYMBOL . RESULT-INDEX), which indicates where ;; said spanner was started. (spanner-state #:init-value '() #:accessor span-state)) - + (define-method (write (x ) file) (display (when x) file) (display " evs = " file) @@ -43,13 +54,16 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-class () + ;; The automatically determined split configuration (configuration #:init-value '() #:accessor configuration) + ;; Allow overriding split configuration, takes precedence over configuration + (forced-configuration #:init-value #f #:accessor forced-configuration) (when-moment #:accessor when #:init-keyword #:when) ;; voice-states are states starting with the Split-state or later ;; (is #:init-keyword #:voice-states #:accessor voice-states) (synced #:init-keyword #:synced #:init-value #f #:getter synced?)) - + (define-method (write (x ) f) (display (when x) f) @@ -82,7 +96,7 @@ "Merge lists VS1 and VS2, containing Voice-state objects into vector of Split-state objects, crosslinking the Split-state vector and Voice-state objects -" +" (define (helper ss-idx ss-list idx1 idx2) (let* ((state1 (if (< idx1 (vector-length vs1)) (vector-ref vs1 idx1) #f)) (state2 (if (< idx2 (vector-length vs2)) (vector-ref vs2 idx2) #f)) @@ -114,13 +128,13 @@ Voice-state objects (define (helper index active) "Analyse EVS at INDEX, given state ACTIVE." - + (define (analyse-tie-start active ev) (if (equal? (ly:event-property ev 'class) 'tie-event) (acons 'tie (split-index (vector-ref voice-state-vec index)) active) active)) - + (define (analyse-tie-end active ev) (if (equal? (ly:event-property ev 'class) 'note-event) (assoc-remove! active 'tie) @@ -132,12 +146,12 @@ Voice-state objects (equal? STOP (ly:event-property ev 'span-direction)))) (assoc-remove! (assoc-remove! active 'cresc) 'decr) active)) - + (define (active i b) b) (set! (configuration (vector-ref result i)) x))) - + (define (put x) ;; (display (list "putting " x "\n")) (set! (configuration (vector-ref result result-idx)) x)) - + (define (current-voice-state now-state voice-num) (define vs ((if (= 1 voice-num) car cdr) (voice-states now-state))) (if (or (not vs) (equal? (when now-state) (when vs))) vs (previous-voice-state vs))) - + (define (try-solo type start-idx current-idx) - "Find a maximum stretch that can be marked as solo. Only set + "Find a maximum stretch that can be marked as solo. Only set the mark when there are no spanners active. return next idx to analyse. @@ -414,7 +487,7 @@ the mark when there are no spanners active. ;; ;; This includes rests. This isn't a problem: long rests ;; will be shared with the silent voice, and be marked - ;; as unisilence. Therefore, long rests won't + ;; as unisilence. Therefore, long rests won't ;; accidentally be part of a solo. ;; (put-range type start-idx current-idx) @@ -423,9 +496,9 @@ the mark when there are no spanners active. (try-solo type start-idx (1+ current-idx))))) ;; try-solo start-idx)) - + (define (analyse-moment result-idx) - "Analyse 'apart starting at RESULT-IDX. Return next index. " + "Analyse 'apart starting at RESULT-IDX. Return next index." (let* ((now-state (vector-ref result result-idx)) (vs1 (current-voice-state now-state 1)) (vs2 (current-voice-state now-state 2)) @@ -449,11 +522,11 @@ the mark when there are no spanners active. (equal? (when vs2) (when now-state)) (null? (previous-span-state vs2))) (try-solo 'solo2 result-idx result-idx)) - + (else (1+ result-idx))) ;; analyse-moment (1+ result-idx)))) - + (if (< result-idx (vector-length result)) (if (equal? (configuration (vector-ref result result-idx)) 'apart) (analyse-solo12 (analyse-moment result-idx)) @@ -469,14 +542,25 @@ the mark when there are no spanners active. (display "***\n") (display result) (display "***\n"))) + + ;; Extract all forced combine strategies, i.e. events inserted by + ;; \partcombine(Apart|Automatic|SoloI|SoloII|Chords)[Once] + ;; They will in the end override the automaically determined ones. + ;; Initial state for both voices is no override + (analyse-forced-combine 0 #f) + ;; Now go through all time steps in a loop and find a combination strategy + ;; based only on the events of that one moment (i.e. neglecting longer + ;; periods of solo/apart, etc.) (analyse-time-step 0) ;; (display result) + ;; Check for unisono or unisilence moments (analyse-a2 0) ;;(display result) (analyse-solo12 0) ;; (display result) (set! result (map - (lambda (x) (cons (when x) (configuration x))) + ;; forced-configuration overrides, if it is set + (lambda (x) (cons (when x) (or (forced-configuration x) (configuration x)))) (vector->list result))) (if #f ;; pc-debug (display result)) diff --git a/scm/predefined-fretboards.scm b/scm/predefined-fretboards.scm index 6db63bd90a..ff0200729d 100644 --- a/scm/predefined-fretboards.scm +++ b/scm/predefined-fretboards.scm @@ -1,18 +1,29 @@ -;;;; predefined-fretboards.scm +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPOnd music typesetter +;;;; Copyright (C) 2008--2011 Carl D. Sorensen ;;;; -;;;; (c) 2008--2009 Carl D. Sorensen +;;;; 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 . (define-public (parse-terse-string terse-definition) -"Parse a fret-diagram-terse definition string @code{terse-definition} and -return a marking list, which can be used with a fretboard grob." + "Parse a @code{fret-diagram-terse} definition string @var{terse-definition} +and return a marking list, which can be used with a fretboard grob." (cdr (fret-parse-terse-definition-string (list '()) terse-definition))) (define-public (get-chord-shape shape-code tuning base-chord-shapes) -"Return the chord shape associated with @code{shape-code} and -@code{tuning} in the hash-table @code{base-chord-shapes}." + "Return the chord shape associated with @var{shape-code} and +@var{tuning} in the hash-table @var{base-chord-shapes}." (let ((hash-handle (hash-get-handle base-chord-shapes (cons shape-code tuning)))) (if hash-handle @@ -20,8 +31,9 @@ return a marking list, which can be used with a fretboard grob." '()))) (define-public (offset-fret fret-offset diagram-definition) -"Add @code{fret-offset} to each fret indication in @code{diagram-definition} -and return the resulting verbose fret-diagram-definition." + "Add @var{fret-offset} to each fret indication in +@var{diagram-definition} and return the resulting verbose +@code{fret-diagram-definition}." (let ((verbose-definition (if (string? diagram-definition) (parse-terse-string diagram-definition) diff --git a/scm/ps-to-png.scm b/scm/ps-to-png.scm index cb20163c01..17f822247b 100644 --- a/scm/ps-to-png.scm +++ b/scm/ps-to-png.scm @@ -1,8 +1,19 @@ -;;;; ps-to-png.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2005--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2005--2011 Jan Nieuwenhuizen +;;;; +;;;; 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 . (define-module (scm ps-to-png)) @@ -16,10 +27,9 @@ (lily) ) -;; gettext wrapper for guile < 1.7.2 -(if (defined? 'gettext) - (define-public _ gettext) - (define-public (_ x) x)) +;; FIXME: use backend-library for duplicates and stubs; lilypond-ps2png.scm is no more + +(define-public _ gettext) (define PLATFORM (string->symbol @@ -116,11 +126,11 @@ (output-file (if multi-page? pngn png1)) (gs-variable-options - (if multi-page? - (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f" - page-width page-height) - "-dEPSCrop")) - (cmd (format #f "~a\ + (if (string-suffix-ci? ".eps" ps-name) + "-dEPSCrop" + (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f" + page-width page-height))) + (cmd (ly:format "~a\ ~a\ ~a\ -dGraphicsAlphaBits=4\ @@ -128,7 +138,7 @@ -dNOPAUSE\ -sDEVICE=~a\ -sOutputFile=~S\ - -r~S\ + -r~a\ ~S\ -c quit" (search-gs) diff --git a/scm/safe-lily.scm b/scm/safe-lily.scm index a4625c1e92..60ac97920b 100644 --- a/scm/safe-lily.scm +++ b/scm/safe-lily.scm @@ -1,8 +1,19 @@ -;;;; safe-lily.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2004--2011 Han-Wen Nienhuys ;;;; -;;;; (c) 2004--2009 Han-Wen Nienhuys +;;;; 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 . (map (lambda (sym) @@ -43,7 +54,6 @@ ly:format-output ly:get-all-function-documentation ly:get-all-translators - ly:get-glyph ly:get-option ly:grob-alist-chain ly:grob-default-font @@ -128,7 +138,6 @@ ly:stencil-translate ly:stencil-translate-axis ly:stencil? - ly:text-dimension ly:translator-description ly:translator-name ly:translator? @@ -144,7 +153,6 @@ ;;$defaultlayout ly:accidental-interface::print - ly:ambitus::print ly:arpeggio::print ly:arpeggio::brew-chord-bracket ly:bar-line::print @@ -170,7 +178,6 @@ ly:multi-measure-rest::print ly:multi-measure-rest::set-spacing-rods ly:note-head::print -;; ly:note-head::brew-ez-stencil ly:ottava-bracket::print ly:paper-column::print ly:percent-repeat-item-interface::beat-slash diff --git a/scm/script.scm b/scm/script.scm index 2a7bbd9755..417df4cbee 100644 --- a/scm/script.scm +++ b/scm/script.scm @@ -1,261 +1,360 @@ -;;;; script.scm -- Script definitions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . (define-public default-script-alist - '(("thumb" . - ((script-stencil . (feta . ("thumb" . "thumb"))) - (avoid-slur . inside) - (padding . 0.20) - (direction . 1))) - ("accent" . - ((avoid-slur . around) - (padding . 0.20) - (quantize-position . #t) - (script-stencil . (feta . ("sforzato" . "sforzato"))) - (side-relative-direction . -1))) - ("espressivo" . - ((avoid-slur . around) - (padding . 0.20) - (quantize-position . #t) - (script-stencil . (feta . ("espr" . "espr"))) - (side-relative-direction . -1))) - ("marcato" . - ((script-stencil . (feta . ("dmarcato" . "umarcato"))) - (padding . 0.20) - (avoid-slur . inside) - ; (staff-padding . ()) - (quantize-position . #t) - (side-relative-direction . -1))) - ("staccatissimo" . - ((avoid-slur . inside) - (script-stencil . (feta . ("dstaccatissimo" . "ustaccatissimo"))) - (padding . 0.20) - (side-relative-direction . -1))) - - ("portato" . - ((script-stencil . (feta . ("uportato" . "dportato"))) - (avoid-slur . around) - (slur-padding . 0.3) - (padding . 0.45) - (side-relative-direction . -1))) + `( + ("accent" + . ( + (avoid-slur . around) + (padding . 0.20) + (script-stencil . (feta . ("sforzato" . "sforzato"))) + (side-relative-direction . ,DOWN))) + ("accentus" + . ( + (script-stencil . (feta . ("uaccentus" . "uaccentus"))) + (side-relative-direction . ,DOWN) + (avoid-slur . ignore) + (padding . 0.20) + (quantize-position . #t) + (script-priority . -100) + (direction . ,UP))) + + + ("circulus" + . ( + (script-stencil . (feta . ("circulus" . "circulus"))) + (side-relative-direction . ,DOWN) + (avoid-slur . ignore) + (padding . 0.20) + (quantize-position . #t) + (script-priority . -100) + (direction . ,UP))) + ("coda" + . ( + (script-stencil . (feta . ("coda" . "coda"))) + (padding . 0.20) + (avoid-slur . outside) + (direction . ,UP))) + ("comma" + . ( + (script-stencil . (feta . ("lcomma" . "rcomma"))) + (quantize-position . #t) + (padding . 0.20) + (avoid-slur . ignore) + (direction . ,UP))) + + + ("downbow" + . ( + (script-stencil . (feta . ("downbow" . "downbow"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP) + (script-priority . 150))) + ("downmordent" + . ( + (script-stencil . (feta . ("downmordent" . "downmordent"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("downprall" + . ( + (script-stencil . (feta . ("downprall" . "downprall"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + + + ("espressivo" + . ( + (avoid-slur . around) + (padding . 0.20) + (script-stencil . (feta . ("espr" . "espr"))) + (side-relative-direction . ,DOWN))) + + + ("fermata" + . ( + (script-stencil . (feta . ("dfermata" . "ufermata"))) + (padding . 0.20) + (avoid-slur . around) + (script-priority . 4000) + (direction . ,UP))) + ("flageolet" + . ( + (script-stencil . (feta . ("flageolet" . "flageolet"))) + (padding . 0.20) + (avoid-slur . around) ;guessing? + (direction . ,UP))) + + + ("halfopen" + . ( + (avoid-slur . outside) + (padding . 0.20) + (script-stencil . (feta . ("halfopen" . "halfopen"))) + (direction . ,UP))) + + + ("ictus" + . ( + (script-stencil . (feta . ("ictus" . "ictus"))) + (side-relative-direction . ,DOWN) + (quantize-position . #t) + (avoid-slur . ignore) + (padding . 0.20) + (script-priority . -100) + (direction . ,DOWN))) + + + ("lheel" + . ( + (script-stencil . (feta . ("upedalheel" . "upedalheel"))) + (padding . 0.20) + (avoid-slur . around) ;guessing? + (direction . ,DOWN))) + ("lineprall" + . ( + (script-stencil . (feta . ("lineprall" . "lineprall"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("longfermata" + . ( + (script-stencil . (feta . ("dlongfermata" . "ulongfermata"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("ltoe" + . ( + (script-stencil . (feta . ("upedaltoe" . "upedaltoe"))) + (padding . 0.20) + (avoid-slur . around) ;guessing? + (direction . ,DOWN))) + + + ("marcato" + . ( + (script-stencil . (feta . ("dmarcato" . "umarcato"))) + (padding . 0.20) + (avoid-slur . inside) + ;;(staff-padding . ()) + (quantize-position . #t) + (side-relative-direction . ,DOWN))) + ("mordent" + . ( + (script-stencil . (feta . ("mordent" . "mordent"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + + + ("open" + . ( + (avoid-slur . outside) + (padding . 0.20) + (script-stencil . (feta . ("open" . "open"))) + (direction . ,UP))) + + + ("portato" + . ( + (script-stencil . (feta . ("uportato" . "dportato"))) + (avoid-slur . around) + (slur-padding . 0.3) + (padding . 0.45) + (side-relative-direction . ,DOWN))) + ("prall" + . ( + (script-stencil . (feta . ("prall" . "prall"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("pralldown" + . ( + (script-stencil . (feta . ("pralldown" . "pralldown"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("prallmordent" + . ( + (script-stencil . (feta . ("prallmordent" . "prallmordent"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("prallprall" + . ( + (script-stencil . (feta . ("prallprall" . "prallprall"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("prallup" + . ( + (script-stencil . (feta . ("prallup" . "prallup"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + + + ("reverseturn" + . ( + (script-stencil . (feta . ("reverseturn" . "reverseturn"))) + (padding . 0.20) + (avoid-slur . inside) + (direction . ,UP))) + ("rheel" + . ( + (script-stencil . (feta . ("dpedalheel" . "dpedalheel"))) + (padding . 0.20) + (avoid-slur . around) ;guessing? + (direction . ,UP))) + ("rtoe" + . ( + (script-stencil . (feta . ("dpedaltoe" . "dpedaltoe"))) + (padding . 0.20) + (avoid-slur . around) ;guessing? + (direction . ,UP))) + + + ("segno" + . ( + (script-stencil . (feta . ("segno" . "segno"))) + (padding . 0.20) + (avoid-slur . outside) + (direction . ,UP))) + ("semicirculus" + . ( + (script-stencil . (feta . ("dsemicirculus" . "dsemicirculus"))) + (side-relative-direction . ,DOWN) + (quantize-position . #t) + (avoid-slur . ignore) + (padding . 0.20) + (script-priority . -100) + (direction . ,UP))) + ("shortfermata" + . ( + (script-stencil . (feta . ("dshortfermata" . "ushortfermata"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("signumcongruentiae" + . ( + (script-stencil . (feta . ("dsignumcongruentiae" . "usignumcongruentiae"))) + (padding . 0.20) + (avoid-slur . outside) + (direction . ,UP))) + ("snappizzicato" + . ( + (script-stencil . (feta . ("snappizzicato" . "snappizzicato"))) + (padding . 0.20) + (avoid-slur . outside) + (direction . ,UP))) + ("staccatissimo" + . ( + (avoid-slur . inside) + (quantize-position . #t) + (script-stencil . (feta . ("dstaccatissimo" . "ustaccatissimo"))) + (padding . 0.20) + (side-relative-direction . ,DOWN))) + ("staccato" + . ( + (script-stencil . (feta . ("staccato" . "staccato"))) + (side-relative-direction . ,DOWN) + (quantize-position . #t) + (avoid-slur . inside) + (toward-stem-shift . 0.5) + (padding . 0.20) + (script-priority . -100))) + ("stopped" + . ( + (script-stencil . (feta . ("stopped" . "stopped"))) + (avoid-slur . inside) + (padding . 0.20) + (direction . ,UP))) + + + ("tenuto" + . ( + (script-stencil . (feta . ("tenuto" . "tenuto"))) + (quantize-position . #t) + (avoid-slur . inside) + (padding . 0.20) + (side-relative-direction . ,DOWN))) + ("thumb" + . ( + (script-stencil . (feta . ("thumb" . "thumb"))) + (avoid-slur . around) + (padding . 0.50) + (direction . ,UP) + (slur-padding . 0.2) + (staff-padding . 0.5))) + ("trill" + . ( + (script-stencil . (feta . ("trill" . "trill"))) + (direction . ,UP) + (padding . 0.20) + (avoid-slur . outside) + (script-priority . 2000))) + ("turn" + . ( + (script-stencil . (feta . ("turn" . "turn"))) + (avoid-slur . inside) + (padding . 0.20) + (direction . ,UP))) + + + ("upbow" + . ( + (script-stencil . (feta . ("upbow" . "upbow"))) + (avoid-slur . around) + (padding . 0.20) + (direction . ,UP) + (script-priority . 150))) + ("upmordent" + . ( + (script-stencil . (feta . ("upmordent" . "upmordent"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + ("upprall" + . ( + (script-stencil . (feta . ("upprall" . "upprall"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) - ("accentus" . - ((script-stencil . (feta . ("uaccentus" . "uaccentus"))) - (side-relative-direction . -1) - (avoid-slur . #f) - (padding . 0.20) - (quantize-position . #t) - (script-priority . -100) - (direction . 1))) - ("ictus" . - ((script-stencil . (feta . ("ictus" . "ictus"))) - (side-relative-direction . -1) - (quantize-position . #t) - (avoid-slur . #f) - (padding . 0.20) - (script-priority . -100) - (direction . -1))) - ("semicirculus" . - ((script-stencil . (feta . ("dsemicirculus" . "dsemicirculus"))) - (side-relative-direction . -1) - (quantize-position . #t) - (avoid-slur . #f) - (padding . 0.20) - (script-priority . -100) - (direction . 1))) - ("circulus" . - ((script-stencil . (feta . ("circulus" . "circulus"))) - (side-relative-direction . -1) - (avoid-slur . #f) - (padding . 0.20) - (quantize-position . #t) - (script-priority . -100) - (direction . 1))) - ("signumcongruentiae" . - ((script-stencil . (feta . ("dsignumcongruentiae" . "usignumcongruentiae"))) - (padding . 0.20) - (avoid-slur . outside) - (direction . 1))) - ("fermata" . - ((script-stencil . (feta . ("dfermata" . "ufermata"))) - (padding . 0.20) - (avoid-slur . around) - (script-priority . 4000) - (direction . 1))) - ("shortfermata" . - ((script-stencil . (feta . ("dshortfermata" . "ushortfermata"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("longfermata" . - ((script-stencil . (feta . ("dlongfermata" . "ulongfermata"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("verylongfermata" . - ((script-stencil . (feta . ("dverylongfermata" . "uverylongfermata"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("stopped" . - ((script-stencil . (feta . ("stopped" . "stopped"))) - (avoid-slur . inside) - (padding . 0.20) - (direction . 1))) - ("staccato" . - ((script-stencil . (feta . ("staccato" . "staccato"))) - (side-relative-direction . -1) - (quantize-position . #t) - (avoid-slur . inside) - (toward-stem-shift . 0.5) - (padding . 0.20) - (script-priority . -100))) - ("tenuto" . - ((script-stencil . (feta . ("tenuto" . "tenuto"))) - (quantize-position . #t) - (avoid-slur . inside) - (padding . 0.20) - (side-relative-direction . -1))) - ("comma" . - ((script-stencil . (feta . ("lcomma" . "rcomma"))) - (quantize-position . #t) - (padding . 0.20) - (avoid-slur . #f) - (direction . 1))) - ("varcomma" . - ((script-stencil . (feta . ("lvarcomma" . "rvarcomma"))) - (quantize-position . #t) - (padding . 0.20) - (avoid-slur . #f) - (direction . 1))) - ("upbow" . - ((script-stencil . (feta . ("upbow" . "upbow"))) - (avoid-slur . around) - (padding . 0.20) - (direction . 1))) - ("downbow" . - ((script-stencil . (feta . ("downbow" . "downbow"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("lheel" . - ((script-stencil . (feta . ("upedalheel" . "upedalheel"))) - (padding . 0.20) - (avoid-slur . around) ;guessing? - (direction . -1)) - ) - ("rheel" . - ((script-stencil . (feta . ("dpedalheel" . "dpedalheel"))) - (padding . 0.20) - (avoid-slur . around) ;guessing? - (direction . 1))) - ("ltoe" . - ((script-stencil . (feta . ("upedaltoe" . "upedaltoe"))) - (padding . 0.20) - (avoid-slur . around) ;guessing? - (direction . -1))) - ("rtoe" . - ((script-stencil . (feta . ("dpedaltoe" . "dpedaltoe"))) - (padding . 0.20) - (avoid-slur . around) ;guessing? - (direction . 1))) - ("turn" . - ((script-stencil . (feta . ("turn" . "turn"))) - (avoid-slur . inside) - (padding . 0.20) - (direction . 1))) - ("open" . - ((avoid-slur . outside) - (padding . 0.20) - (script-stencil . (feta . ("open" . "open"))) - (direction . 1))) - ("flageolet" . - ((script-stencil . (feta . ("flageolet" . "flageolet"))) - (padding . 0.20) - (avoid-slur . around) ;guessing? - (direction . 1))) - ("reverseturn" . - ((script-stencil . (feta . ("reverseturn" . "reverseturn"))) - (padding . 0.20) - (avoid-slur . inside) - (direction . 1))) - ("trill" . - ((script-stencil . (feta . ("trill" . "trill"))) - (direction . 1) - (padding . 0.20) - (avoid-slur . outside) - (script-priority . 2000))) - ("prall" . - ((script-stencil . (feta . ("prall" . "prall"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("mordent" . - ((script-stencil . (feta . ("mordent" . "mordent"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("prallprall" . - ((script-stencil . (feta . ("prallprall" . "prallprall"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("prallmordent" . - ((script-stencil . (feta . ("prallmordent" . "prallmordent"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("upprall" . - ((script-stencil . (feta . ("upprall" . "upprall"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("downprall" . - ((script-stencil . (feta . ("downprall" . "downprall"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("upmordent" . - ((script-stencil . (feta . ("upmordent" . "upmordent"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("downmordent" . - ((script-stencil . (feta . ("downmordent" . "downmordent"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("lineprall" . - ((script-stencil . (feta . ("lineprall" . "lineprall"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("pralldown" . - ((script-stencil . (feta . ("pralldown" . "pralldown"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("prallup" . - ((script-stencil . (feta . ("prallup" . "prallup"))) - (padding . 0.20) - (avoid-slur . around) - (direction . 1))) - ("segno" . - ((script-stencil . (feta . ("segno" . "segno"))) - (padding . 0.20) - (avoid-slur . outside) - (direction . 1))) - ("coda" . - ((script-stencil . (feta . ("coda" . "coda"))) - (padding . 0.20) - (avoid-slur . outside) - (direction . 1))) - ("varcoda" . - ((script-stencil . (feta . ("varcoda" . "varcoda"))) - (padding . 0.20) - (avoid-slur . outside) - (direction . 1))))) + ("varcoda" + . ( + (script-stencil . (feta . ("varcoda" . "varcoda"))) + (padding . 0.20) + (avoid-slur . outside) + (direction . ,UP))) + ("varcomma" + . ( + (script-stencil . (feta . ("lvarcomma" . "rvarcomma"))) + (quantize-position . #t) + (padding . 0.20) + (avoid-slur . ignore) + (direction . ,UP))) + ("verylongfermata" + . ( + (script-stencil . (feta . ("dverylongfermata" . "uverylongfermata"))) + (padding . 0.20) + (avoid-slur . around) + (direction . ,UP))) + )) diff --git a/scm/song-util.scm b/scm/song-util.scm index 2453a14ed3..9a65d44c8e 100644 --- a/scm/song-util.scm +++ b/scm/song-util.scm @@ -1,24 +1,22 @@ -;;; festival.scm --- Festival singing mode output - -;; Copyright (C) 2006, 2007 Brailcom, o.p.s. - -;; Author: Milan Zamazal - -;; COPYRIGHT NOTICE - -;; 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 2 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, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +;;;; song-util.scm --- Festival singing mode output +;;;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2006, 2007 Brailcom, o.p.s. +;;;; Author: Milan Zamazal +;;;; +;;;; 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 . (define-module (scm song-util)) @@ -131,33 +129,35 @@ (define-public (music-property-value? music property value) - "Return true iff MUSIC's PROPERTY is equal to VALUE." + "Return @code{#t} iff @var{music}'s @var{property} is equal to +@var{value}." (equal? (ly:music-property music property) value)) (define-public (music-name? music name) - "Return true iff MUSIC's name is NAME." + "Return @code{#t} iff @var{music}'s name is @var{name}." (if (list? name) (member (ly:music-property music 'name) name) (music-property-value? music 'name name))) (define-public (music-property? music property) - "Return true iff MUSIC is a property setter and sets or unsets PROPERTY." + "Return @code{#t} iff @var{music} is a property setter and sets +or unsets @var{property}." (and (music-name? music '(PropertySet PropertyUnset)) (music-property-value? music 'symbol property))) (define-public (music-has-property? music property) - "Return true iff MUSIC contains PROPERTY." + "Return @code{#t} iff @var{music} contains @var{property}." (not (eq? (ly:music-property music property) '()))) (define-public (property-value music) - "Return value of a property setter MUSIC. -If it unsets the property, return #f." + "Return value of a property setter @var{music}. +If it unsets the property, return @code{#f}." (if (music-name? music 'PropertyUnset) #f (ly:music-property music 'value))) (define-public (music-elements music) - "Return list of all MUSIC's top-level children." + "Return list of all @var{music}'s top-level children." (let ((elt (ly:music-property music 'element)) (elts (ly:music-property music 'elements))) (if (not (null? elt)) @@ -165,7 +165,7 @@ If it unsets the property, return #f." elts))) (define-public (find-child music predicate) - "Find the first node in MUSIC that satisfies PREDICATE." + "Find the first node in @var{music} that satisfies @var{predicate}." (define (find-child queue) (if (null? queue) #f @@ -176,13 +176,13 @@ If it unsets the property, return #f." (find-child (list music))) (define-public (find-child-named music name) - "Return the first child in MUSIC that is named NAME." + "Return the first child in @var{music} that is named @var{name}." (find-child music (lambda (elt) (music-name? elt name)))) (define-public (process-music music function) - "Process all nodes of MUSIC (including MUSIC) in the DFS order. -Apply FUNCTION on each of the nodes. -If FUNCTION applied on a node returns true, don't process the node's subtree." + "Process all nodes of @var{music} (including @var{music}) in the DFS order. +Apply @var{function} on each of the nodes. If @var{function} applied on a +node returns @code{#t}, don't process the node's subtree." (define (process-music queue) (if (not (null? queue)) (let* ((elt (car queue)) diff --git a/scm/song.scm b/scm/song.scm index 8edacdf13c..9dbca9fd62 100644 --- a/scm/song.scm +++ b/scm/song.scm @@ -1,24 +1,22 @@ -;;; festival.scm --- Festival singing mode output - -;; Copyright (C) 2006, 2007 Brailcom, o.p.s. - -;; Author: Milan Zamazal - -;; COPYRIGHT NOTICE - -;; 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 2 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, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +;;;; song.scm --- Festival singing mode output +;;;; +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2006, 2007 Brailcom, o.p.s. +;;;; Author: Milan Zamazal +;;;; +;;;; 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 . (define-module (scm song)) @@ -87,7 +85,7 @@ ((note? object) (let ((pitch (ly:pitch-semitones (note-pitch object)))) (format #f "~a~a~a~a" - (cdr (assoc (modulo pitch 12) pp-pitch-names)) + (assoc-get (modulo pitch 12) pp-pitch-names) (let ((octave (+ (inexact->exact (floor (/ pitch 12))) 1))) (cond ((= octave 0) @@ -143,29 +141,28 @@ (exact->inexact (* (expt 2 (- log)) (+ 1 (/ dots 2)) (/ (car factor) (cdr factor)))))) (define (tempo->beats music) - (let* ((tempo-spec (or (find-child-named music 'MetronomeChangeEvent) - (find-child-named music 'SequentialMusic))) + (let* ((tempo-spec (find-child-named music 'SequentialMusic)) (tempo (cond - ((not tempo-spec) - #f) - ((music-name? tempo-spec 'MetronomeChangeEvent) - (* (ly:music-property tempo-spec 'metronome-count) - (duration->number (ly:music-property tempo-spec 'tempo-unit)))) - ((music-name? tempo-spec 'SequentialMusic) - (* (property-value - (find-child tempo-spec (lambda (elt) (music-property? elt 'tempoUnitCount)))) - (duration->number - (property-value - (find-child tempo-spec (lambda (elt) (music-property? elt 'tempoUnitDuration))))))) - (else - (format #t "Programming error (tempo->beats): ~a~%" tempo-spec))))) + (tempo-spec + (let ((tempo-event (find-child-named tempo-spec + 'TempoChangeEvent))) + (and tempo-event + (let ((count (ly:music-property tempo-event + 'metronome-count))) + (* (if (pair? count) + (round (/ (+ (car count) (cdr count)) 2)) + count) + (duration->number + (ly:music-property tempo-event 'tempo-unit))))))) + (else + (format #t "Programming error (tempo->beats): ~a~%" + tempo-spec))))) (debug-enable 'backtrace) - (if (and tempo (music-name? tempo-spec 'SequentialMusic)) - (set! *default-tempo* (property-value - (find-child tempo-spec (lambda (elt) (music-property? elt 'tempoWholesPerMinute)))))) - (if tempo - (round (* tempo (expt 2 (+ 2 *base-octave-shift*)))) - #f))) + (and tempo + (set! *default-tempo* (property-value + (find-child tempo-spec (lambda (elt) + (music-property? elt 'tempoWholesPerMinute))))) + (round (* tempo (expt 2 (+ 2 *base-octave-shift*))))))) (defstruct music-context music @@ -277,7 +274,7 @@ joined ; to the next note origin ) - + (defstruct rest duration origin @@ -424,7 +421,7 @@ count ; number of repetitions ) -(defstruct verse ; +(defstruct verse ; text ; separate text element (syllable or word) notelist/rests ; list of note lists (slurs) and rests (unfinished #f) ; whether to be merged with the following verse @@ -643,7 +640,7 @@ (warning (safe-car (if (null? note-list) consumed note-list)) "Unfinished slur: ~a ~a" context consumed)) (values (reverse consumed) note-list)))) - + (define (consume-skip-notes skip note-list context) ;; Returns either note list (skip word defined) or rest instance (no skip word) + new note-list. (assert (skip? skip)) @@ -773,7 +770,7 @@ (insert-lyrics! (get-lyrics (music-context-music music-context) context) score-list context) (debug "Final score list" score-list))) - music-context-list) + music-context-list) (extract-verses score-list))) @@ -786,7 +783,7 @@ (let* ((semitones (ly:pitch-semitones pitch)) (octave (inexact->exact (floor (/ semitones 12)))) (tone (modulo semitones 12))) - (format #f "~a~a" (cadr (assoc tone festival-note-mapping)) + (format #f "~a~a" (car (assoc-get tone festival-note-mapping)) (+ octave *base-octave* *base-octave-shift*)))) (define (write-header port tempo) diff --git a/scm/standalone.scm b/scm/standalone.scm index e761781641..5ecfe7200a 100644 --- a/scm/standalone.scm +++ b/scm/standalone.scm @@ -1,9 +1,20 @@ -;;;; standalone.scm -- implement Scheme stuff for use without LilyPond +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . (use-modules (ice-9 rdelim)) diff --git a/scm/stencil.scm b/scm/stencil.scm index 105f6f5893..64f48cc89d 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -1,11 +1,23 @@ -;;;; stencil.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2003--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2003--2011 Han-Wen Nienhuys +;;;; +;;;; 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 . (define-public (stack-stencils axis dir padding stils) - "Stack stencils STILS in direction AXIS, DIR, using PADDING." + "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using +@var{padding}." (cond ((null? stils) empty-stencil) ((null? (cdr stils)) (car stils)) @@ -14,7 +26,8 @@ padding)))) (define-public (stack-stencils-padding-list axis dir padding stils) - "Stack stencils STILS in direction AXIS, DIR, using a list of PADDING." + "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using +a list of @var{padding}." (cond ((null? stils) empty-stencil) ((null? (cdr stils)) (car stils)) @@ -25,17 +38,17 @@ (car padding))))) (define-public (centered-stencil stencil) - "Center stencil @var{stencil} in both the X and Y directions" + "Center stencil @var{stencil} in both the X and Y directions." (ly:stencil-aligned-to (ly:stencil-aligned-to stencil X CENTER) Y CENTER)) (define-public (stack-lines dir padding baseline stils) - "Stack vertically with a baseline-skip." + "Stack vertically with a baseline skip." (define result empty-stencil) (define last-y #f) (do ((last-stencil #f (car p)) (p stils (cdr p))) - + ((null? p)) (if (number? last-y) @@ -45,9 +58,9 @@ (* (- dir) (interval-bound (ly:stencil-extent (car p) Y) (- dir)))) baseline)) (y (+ last-y (* dir dy)))) - - - + + + (set! result (ly:stencil-add result (ly:stencil-translate-axis (car p) y Y))) (set! last-y y))) @@ -56,27 +69,105 @@ (set! result (car p))))) result) - -(define-public (bracketify-stencil stil axis thick protusion padding) - "Add brackets around STIL, producing a new stencil." + +(define-public (bracketify-stencil stil axis thick protrusion padding) + "Add brackets around @var{stil}, producing a new stencil." (let* ((ext (ly:stencil-extent stil axis)) - (lb (ly:bracket axis ext thick (- protusion))) - (rb (ly:bracket axis ext thick protusion))) + (lb (ly:bracket axis ext thick protrusion)) + (rb (ly:bracket axis ext thick (- protrusion)))) (set! stil - (ly:stencil-combine-at-edge stil (other-axis axis) 1 lb padding)) + (ly:stencil-combine-at-edge stil (other-axis axis) 1 rb padding)) (set! stil - (ly:stencil-combine-at-edge stil (other-axis axis) -1 rb padding)) + (ly:stencil-combine-at-edge lb (other-axis axis) 1 stil padding)) stil)) +(define (make-parenthesis-stencil + y-extent half-thickness width angularity) + "Create a parenthesis stencil. +@var{y-extent} is the Y extent of the markup inside the parenthesis. +@var{half-thickness} is the half thickness of the parenthesis. +@var{width} is the width of a parenthesis. +The higher the value of number @var{angularity}, +the more angular the shape of the parenthesis." + (let* ((line-width 0.1) + ;; Horizontal position of baseline that end points run through. + (base-x + (if (< width 0) + (- width) + 0)) + ;; X value farthest from baseline on outside of curve + (outer-x (+ base-x width)) + ;; X extent of bezier sandwich centerline curves + (x-extent (ordered-cons base-x outer-x)) + (bottom-y (interval-start y-extent)) + (top-y (interval-end y-extent)) + + (lower-end-point (cons base-x bottom-y)) + (upper-end-point (cons base-x top-y)) + + (outer-control-x (+ base-x (* 4/3 width))) + (inner-control-x (+ outer-control-x + (if (< width 0) + half-thickness + (- half-thickness)))) + + ;; Vertical distance between a control point + ;; and the end point it connects to. + (offset-index (- (* 0.6 angularity) 0.8)) + (lower-control-y (interval-index y-extent offset-index)) + (upper-control-y (interval-index y-extent (- offset-index))) + + (lower-outer-control-point + (cons outer-control-x lower-control-y)) + (upper-outer-control-point + (cons outer-control-x upper-control-y)) + (upper-inner-control-point + (cons inner-control-x upper-control-y)) + (lower-inner-control-point + (cons inner-control-x lower-control-y))) + + (ly:make-stencil + (list 'bezier-sandwich + `(quote ,(list + ;; Step 4: curve through inner control points + ;; to lower end point. + upper-inner-control-point + lower-inner-control-point + lower-end-point + ;; Step 3: move to upper end point. + upper-end-point + ;; Step 2: curve through outer control points + ;; to upper end point. + lower-outer-control-point + upper-outer-control-point + upper-end-point + ;; Step 1: move to lower end point. + lower-end-point)) + line-width) + (interval-widen x-extent (/ line-width 2)) + (interval-widen y-extent (/ line-width 2))))) + +(define-public (parenthesize-stencil + stencil half-thickness width angularity padding) + "Add parentheses around @var{stencil}, returning a new stencil." + (let* ((y-extent (ly:stencil-extent stencil Y)) + (lp (make-parenthesis-stencil + y-extent half-thickness (- width) angularity)) + (rp (make-parenthesis-stencil + y-extent half-thickness width angularity))) + (set! stencil (ly:stencil-combine-at-edge lp X RIGHT stencil padding)) + (set! stencil (ly:stencil-combine-at-edge stencil X RIGHT rp padding)) + stencil)) + (define-public (make-line-stencil width startx starty endx endy) - "Make a line stencil of given linewidth and set its extents accordingly" + "Make a line stencil of given linewidth and set its extents accordingly." (let ((xext (cons (min startx endx) (max startx endx))) (yext (cons (min starty endy) (max starty endy)))) (ly:make-stencil (list 'draw-line width startx starty endx endy) - ; Since the line has rounded edges, we have to / can safely add half the + ; Since the line has rounded edges, we have to / can safely add half the ; width to all coordinates! (interval-widen xext (/ width 2)) (interval-widen yext (/ width 2))))) @@ -84,51 +175,259 @@ (define-public (make-filled-box-stencil xext yext) "Make a filled box." - + (ly:make-stencil (list 'round-filled-box (- (car xext)) (cdr xext) (- (car yext)) (cdr yext) 0.0) xext yext)) (define-public (make-circle-stencil radius thickness fill) - "Make a circle of radius @var{radius} and thickness @var{thickness}" + "Make a circle of radius @var{radius} and thickness @var{thickness}." (let* ((out-radius (+ radius (/ thickness 2.0)))) - + (ly:make-stencil - (list 'circle radius thickness fill) + (list 'circle radius thickness fill) (cons (- out-radius) out-radius) (cons (- out-radius) out-radius)))) (define-public (make-oval-stencil x-radius y-radius thickness fill) - "Make an oval from two Bezier curves, of x radius @var{x-radius}, - y radius @code{y-radius}, - and thickness @var{thickness} with fill defined by @code{fill}." + "Make an oval from two Bezier curves, of x@tie{}radius @var{x-radius}, +y@tie{}radius @code{y-radius}, and thickness @var{thickness} with fill +defined by @code{fill}." (let* - ((x-out-radius (+ x-radius (/ thickness 2.0))) + ((x-out-radius (+ x-radius (/ thickness 2.0))) (y-out-radius (+ y-radius (/ thickness 2.0))) ) - + (ly:make-stencil - (list 'oval x-radius y-radius thickness fill) + (list 'oval x-radius y-radius thickness fill) (cons (- x-out-radius) x-out-radius) (cons (- y-out-radius) y-out-radius)))) +(define-public + (make-partial-ellipse-stencil + x-radius y-radius start-angle end-angle thick connect fill) + + (define (make-radius-list x-radius y-radius) + (apply append + (map (lambda (adder) + (map (lambda (quadrant) + (cons (+ adder (car quadrant)) + (cdr quadrant))) + `((0.0 . (,x-radius . 0.0)) + (,PI-OVER-TWO . (0.0 . ,y-radius)) + (,PI . (,(- x-radius) . 0.0)) + (,THREE-PI-OVER-TWO . (0.0 . ,(- y-radius)))))) + `(0.0 ,TWO-PI)))) + + (define + (insert-in-ordered-list ordering-function value inlist cutl? cutr?) + (define + (helper ordering-function value left-list right-list cutl? cutr?) + (if (null? right-list) + (append + (if cutl? '() left-list) + (list value) + (if cutr? '() right-list)) + (if (ordering-function value (car right-list)) + (append + (if cutl? '() left-list) + (list value) + (if cutr? '() right-list)) + (helper + ordering-function + value + (append left-list (list (car right-list))) + (cdr right-list) + cutl? + cutr?)))) + (helper ordering-function value '() inlist cutl? cutr?)) + + (define (ordering-function-1 a b) (car< a b)) + + (define (ordering-function-2 a b) (car<= a b)) + + (define (min-max-crawler min-max side l) + (reduce min-max + (if (eq? min-max min) 100000 -100000) + (map (lambda (x) (side x)) l))) + + (let* + ((x-out-radius (+ x-radius (/ thick 2.0))) + (y-out-radius (+ y-radius (/ thick 2.0))) + (new-end-angle (angle-0-2pi (degrees->radians end-angle))) + (end-radius (ellipse-radius x-out-radius y-out-radius new-end-angle)) + (new-start-angle (angle-0-2pi (degrees->radians start-angle))) + (start-radius (ellipse-radius x-out-radius y-out-radius new-start-angle)) + (radius-list (make-radius-list x-out-radius y-out-radius)) + (rectangular-end-radius (polar->rectangular end-radius end-angle)) + (rectangular-start-radius (polar->rectangular start-radius start-angle)) + (new-end-angle + (if (<= new-end-angle new-start-angle) + (+ TWO-PI new-end-angle) + new-end-angle)) + (possible-extrema + (insert-in-ordered-list + ordering-function-2 + (cons new-end-angle rectangular-end-radius) + (insert-in-ordered-list + ordering-function-1 + (cons new-start-angle rectangular-start-radius) + radius-list + #t + #f) + #f + #t))) + (ly:make-stencil + (list + 'partial-ellipse + x-radius + y-radius + start-angle + end-angle + thick + connect + fill) + (cons (min-max-crawler min cadr possible-extrema) + (min-max-crawler max cadr possible-extrema)) + (cons (min-max-crawler min cddr possible-extrema) + (min-max-crawler max cddr possible-extrema))))) + +(define (path-min-max origin pointlist) + + (define (line-part-min-max x1 x2) + (list (min x1 x2) (max x1 x2))) + + (define (bezier-part-min-max x1 x2 x3 x4) + ((lambda (x) (list (reduce min 10000 x) (reduce max -10000 x))) + (map + (lambda (x) + (+ (* x1 (expt (- 1 x) 3)) + (+ (* 3 (* x2 (* (expt (- 1 x) 2) x))) + (+ (* 3 (* x3 (* (- 1 x) (expt x 2)))) + (* x4 (expt x 3)))))) + (if (< (+ (expt x2 2) (+ (expt x3 2) (* x1 x4))) + (+ (* x1 x3) (+ (* x2 x4) (* x2 x3)))) + (list 0.0 1.0) + (filter + (lambda (x) (and (>= x 0) (<= x 1))) + (append + (list 0.0 1.0) + (map (lambda (op) + (if (not (eqv? 0.0 + (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))) + ;; Zeros of the bezier curve + (/ (+ (- x1 (* 2 x2)) + (op x3 + (sqrt (- (+ (expt x2 2) + (+ (expt x3 2) (* x1 x4))) + (+ (* x1 x3) + (+ (* x2 x4) (* x2 x3))))))) + (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2)))) + ;; Apply L'hopital's rule to get the zeros if 0/0 + (* (op 0 1) + (/ (/ (- x4 x3) 2) + (sqrt (- (+ (* x2 x2) + (+ (* x3 x3) (* x1 x4))) + (+ (* x1 x3) + (+ (* x2 x4) (* x2 x3))))))))) + (list + -)))))))) + + (define (bezier-min-max x1 y1 x2 y2 x3 y3 x4 y4) + (map (lambda (x) + (apply bezier-part-min-max x)) + `((,x1 ,x2 ,x3 ,x4) (,y1 ,y2 ,y3 ,y4)))) + + (define (line-min-max x1 y1 x2 y2) + (map (lambda (x) + (apply line-part-min-max x)) + `((,x1 ,x2) (,y1 ,y2)))) + + ((lambda (x) + (list + (reduce min +inf.0 (map caar x)) + (reduce max -inf.0 (map cadar x)) + (reduce min +inf.0 (map caadr x)) + (reduce max -inf.0 (map cadadr x)))) + (map (lambda (x) + (if (eq? (length x) 8) + (apply bezier-min-max x) + (apply line-min-max x))) + (map (lambda (x y) + (append (list (cadr (reverse x)) (car (reverse x))) y)) + (append (list origin) + (reverse (cdr (reverse pointlist)))) pointlist)))) + +(define-public (make-connected-path-stencil pointlist thickness + x-scale y-scale connect fill) + "Make a connected path described by the list @var{pointlist}, with +thickness @var{thickness}, and scaled by @var{x-scale} in the X direction +and @var{y-scale} in the Y direction. @var{connect} and @var{fill} are +boolean arguments that specify if the path should be connected or filled, +respectively." + + ;; paths using this routine are designed to begin at point '(0 . 0) + (let* ((origin (list 0 0)) + (boundlist (path-min-max origin pointlist)) + ;; modify pointlist to scale the coordinates + (path (map (lambda (x) + (apply + (if (eq? 6 (length x)) + (lambda (x1 x2 x3 x4 x5 x6) + (list 'curveto + (* x1 x-scale) + (* x2 y-scale) + (* x3 x-scale) + (* x4 y-scale) + (* x5 x-scale) + (* x6 y-scale))) + (lambda (x1 x2) + (list 'lineto + (* x1 x-scale) + (* x2 y-scale)))) + x)) + pointlist)) + ;; a path must begin with a `moveto' + (prepend-origin (apply list (cons 'moveto origin) path)) + ;; if this path is connected, add closepath to the end + (final-path (if connect + (append prepend-origin (list 'closepath)) + prepend-origin)) + (command-list (fold-right append '() final-path))) + + (ly:make-stencil + `(path ,thickness + `(,@',command-list) + 'round + 'round + ,(if fill #t #f)) + (coord-translate + ((if (< x-scale 0) reverse-interval identity) + (cons (* x-scale (list-ref boundlist 0)) + (* x-scale (list-ref boundlist 1)))) + `(,(/ thickness -2) . ,(/ thickness 2))) + (coord-translate + ((if (< y-scale 0) reverse-interval identity) + (cons (* y-scale (list-ref boundlist 2)) + (* y-scale (list-ref boundlist 3)))) + `(,(/ thickness -2) . ,(/ thickness 2)))))) + (define-public (make-ellipse-stencil x-radius y-radius thickness fill) - "Make an ellipse of x radius @var{x-radius}, y radius @code{y-radius}, - and thickness @var{thickness} with fill defined by @code{fill}." + "Make an ellipse of x@tie{}radius @var{x-radius}, y@tie{}radius +@code{y-radius}, and thickness @var{thickness} with fill defined by +@code{fill}." (let* - ((x-out-radius (+ x-radius (/ thickness 2.0))) + ((x-out-radius (+ x-radius (/ thickness 2.0))) (y-out-radius (+ y-radius (/ thickness 2.0))) ) - + (ly:make-stencil - (list 'ellipse x-radius y-radius thickness fill) + (list 'ellipse x-radius y-radius thickness fill) (cons (- x-out-radius) x-out-radius) (cons (- y-out-radius) y-out-radius)))) (define-public (box-grob-stencil grob) "Make a box of exactly the extents of the grob. The box precisely -encloses the contents. -" +encloses the contents." (let* ((xext (ly:grob-extent grob grob 0)) (yext (ly:grob-extent grob grob 1)) (thick 0.01)) @@ -139,9 +438,9 @@ encloses the contents. (make-filled-box-stencil (cons (cdr xext) (+ (cdr xext) thick)) yext) (make-filled-box-stencil (cons (- (car xext) thick) (car xext)) yext)))) -;; TODO merge this and prev function. +;; TODO merge this and prev function. (define-public (box-stencil stencil thickness padding) - "Add a box around STENCIL, producing a new stencil." + "Add a box around @var{stencil}, producing a new stencil." (let* ((x-ext (interval-widen (ly:stencil-extent stencil 0) padding)) (y-ext (interval-widen (ly:stencil-extent stencil 1) padding)) (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) @@ -149,16 +448,16 @@ encloses the contents. (interval-widen x-ext thickness) (cons 0 thickness)))) (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) (set! stencil (ly:stencil-combine-at-edge stencil X -1 y-rule padding)) - (set! stencil (ly:stencil-combine-at-edge stencil Y 1 x-rule 0.0)) + (set! stencil (ly:stencil-combine-at-edge stencil Y 1 x-rule 0.0)) (set! stencil (ly:stencil-combine-at-edge stencil Y -1 x-rule 0.0)) stencil)) (define-public (circle-stencil stencil thickness padding) - "Add a circle around STENCIL, producing a new stencil." + "Add a circle around @var{stencil}, producing a new stencil." (let* ((x-ext (ly:stencil-extent stencil X)) (y-ext (ly:stencil-extent stencil Y)) (diameter (max (interval-length x-ext) - (interval-length y-ext))) + (interval-length y-ext))) (radius (+ (/ diameter 2) padding thickness)) (circle (make-circle-stencil radius thickness #f))) @@ -170,8 +469,8 @@ encloses the contents. (interval-center y-ext)))))) (define-public (oval-stencil stencil thickness x-padding y-padding) - "Add an oval around @code{stencil}, padded by the padding pair, - producing a new stencil." + "Add an oval around @code{stencil}, padded by the padding pair, +producing a new stencil." (let* ((x-ext (ly:stencil-extent stencil X)) (y-ext (ly:stencil-extent stencil Y)) (x-length (+ (interval-length x-ext) x-padding thickness)) @@ -188,8 +487,8 @@ encloses the contents. (interval-center y-ext)))))) (define-public (ellipse-stencil stencil thickness x-padding y-padding) - "Add an ellipse around STENCIL, padded by the padding pair, - producing a new stencil." + "Add an ellipse around @var{stencil}, padded by the padding pair, +producing a new stencil." (let* ((x-ext (ly:stencil-extent stencil X)) (y-ext (ly:stencil-extent stencil Y)) (x-length (+ (interval-length x-ext) x-padding thickness)) @@ -210,7 +509,7 @@ encloses the contents. (interval-center y-ext)))))) (define-public (rounded-box-stencil stencil thickness padding blot) - "Add a rounded box around STENCIL, producing a new stencil." + "Add a rounded box around @var{stencil}, producing a new stencil." (let* ((xext (interval-widen (ly:stencil-extent stencil 0) padding)) (yext (interval-widen (ly:stencil-extent stencil 1) padding)) @@ -218,74 +517,65 @@ encloses the contents. (ideal-blot (min blot (/ min-ext 2))) (ideal-thickness (min thickness (/ min-ext 2))) (outer (ly:round-filled-box - (interval-widen xext ideal-thickness) - (interval-widen yext ideal-thickness) + (interval-widen xext ideal-thickness) + (interval-widen yext ideal-thickness) ideal-blot)) - (inner (ly:make-stencil (list 'color (x11-color 'white) - (ly:stencil-expr (ly:round-filled-box + (inner (ly:make-stencil (list 'color (x11-color 'white) + (ly:stencil-expr (ly:round-filled-box xext yext (- ideal-blot ideal-thickness))))))) (set! stencil (ly:stencil-add outer inner)) stencil)) - -(define-public (fontify-text font-metric text) - "Set TEXT with font FONT-METRIC, returning a stencil." - (let* ((b (ly:text-dimension font-metric text))) - (ly:make-stencil - `(text ,font-metric ,text) (car b) (cdr b)))) - -(define-public (fontify-text-white scale font-metric text) - "Set TEXT with scale factor SCALE" - (let* ((b (ly:text-dimension font-metric text)) - ;;urg -- workaround for using ps font - (c `(white-text ,(* 2 scale) ,text))) - ;;urg -- extent is not from ps font, but we hope it's close - (ly:make-stencil c (car b) (cdr b)))) - (define-public (stencil-with-color stencil color) (ly:make-stencil (list 'color color (ly:stencil-expr stencil)) (ly:stencil-extent stencil X) (ly:stencil-extent stencil Y))) - + (define-public (stencil-whiteout stencil) (let* ((x-ext (ly:stencil-extent stencil X)) (y-ext (ly:stencil-extent stencil Y)) ) - + (ly:stencil-add (stencil-with-color (ly:round-filled-box x-ext y-ext 0.0) white) stencil) )) -(define-public (dimension-arrows destination) - "Draw twosided arrow from here to @var{destination}" - +(define-public (arrow-stencil-maker start? end?) + "Return a function drawing a line from current point to @code{destination}, +with optional arrows of @code{max-size} on start and end controlled by +@var{start?} and @var{end?}." + (lambda (destination max-size) (let* ((e_x 1+0i) (e_y 0+1i) + (distance (sqrt (+ (* (car destination) (car destination)) + (* (cdr destination) (cdr destination))))) + (size (min max-size (/ distance 3))) (rotate (lambda (z ang) (* (make-polar 1 ang) z))) (complex-to-offset (lambda (z) (list (real-part z) (imag-part z)))) - + (z-dest (+ (* e_x (car destination)) (* e_y (cdr destination)))) (e_z (/ z-dest (magnitude z-dest))) - (triangle-points '(-1+0.25i - 0 - -1-0.25i)) + (triangle-points (list + (* size -1+0.25i) + 0 + (* size -1-0.25i))) (p1s (map (lambda (z) (+ z-dest (rotate z (angle z-dest)))) triangle-points)) (p2s (map (lambda (z) (rotate z (angle (- z-dest)))) triangle-points)) - (null (cons 0 0)) - (arrow-1 + (null (cons 0 0)) + (arrow-1 (ly:make-stencil `(polygon (quote ,(concatenate (map complex-to-offset p1s))) 0.0 @@ -295,11 +585,11 @@ encloses the contents. `(polygon (quote ,(concatenate (map complex-to-offset p2s))) 0.0 #t) null null ) ) - (thickness 0.1) - (shorten-line 0.5) + (thickness (min (/ distance 12) 0.1)) + (shorten-line (min (/ distance 3) 0.5)) (start (complex-to-offset (/ (* e_z shorten-line) 2))) (end (complex-to-offset (- z-dest (/ (* e_z shorten-line) 2)))) - + (line (ly:make-stencil `(draw-line ,thickness ,(car start) ,(cadr start) @@ -309,17 +599,22 @@ encloses the contents. (min 0 (cdr destination))) (cons (max 0 (car destination)) (max 0 (cdr destination))))) - - (result (ly:stencil-add arrow-2 arrow-1 line))) + (result + (ly:stencil-add + (if start? arrow-2 empty-stencil) + (if end? arrow-1 empty-stencil) + line))) + + result))) - result)) +(define-public dimension-arrows (arrow-stencil-maker #t #t)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ANNOTATIONS ;; ;; annotations are arrows indicating the numerical value of -;; spacing variables +;; spacing variables ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define*-public (annotate-y-interval layout name extent is-length @@ -331,7 +626,7 @@ encloses the contents. (define (center-stencil-on-extent stil) (ly:stencil-translate (ly:stencil-aligned-to stil Y CENTER) (cons 0 (interval-center extent)))) - ;; do something sensible for 0,0 intervals. + ;; do something sensible for 0,0 intervals. (set! extent (interval-widen extent 0.001)) (if (not (interval-sane? extent)) (set! annotation (interpret-markup @@ -351,8 +646,8 @@ encloses the contents. (else (ly:format "(~$,~$)" (car extent) (cdr extent))))))) - (arrows (ly:stencil-translate-axis - (dimension-arrows (cons 0 (interval-length extent))) + (arrows (ly:stencil-translate-axis + (dimension-arrows (cons 0 (interval-length extent)) 1.0) (interval-start extent) Y))) (set! annotation (center-stencil-on-extent text-stencil)) @@ -369,6 +664,38 @@ encloses the contents. annotation)) +(define*-public (annotate-spacing-spec layout spacing-spec start-Y-offset prev-system-end + #:key (base-color blue)) + (let* ((get-spacing-var (lambda (sym) (assoc-get sym spacing-spec 0.0))) + (space (get-spacing-var 'space)) + (padding (get-spacing-var 'padding)) + (min-dist (get-spacing-var 'minimum-distance)) + (contrast-color (append (cdr base-color) (list (car base-color))))) + (stack-stencils X RIGHT 0.0 + (list + (annotate-y-interval layout + "space" + (cons (- start-Y-offset space) start-Y-offset) + #t + #:color (map (lambda (x) (* x 0.25)) base-color)) + (annotate-y-interval layout + "min-dist" + (cons (- start-Y-offset min-dist) start-Y-offset) + #t + #:color (map (lambda (x) (* x 0.5)) base-color)) + (ly:stencil-add + (annotate-y-interval layout + "bottom-of-extent" + (cons prev-system-end start-Y-offset) + #t + #:color base-color) + (annotate-y-interval layout + "padding" + (cons (- prev-system-end padding) prev-system-end) + #t + #:color contrast-color)))))) + + (define-public (eps-file->stencil axis size file-name) (let* ((contents (ly:gulp-file file-name)) @@ -382,13 +709,16 @@ encloses the contents. 0)) (scaled-bbox (map (lambda (x) (* factor x)) bbox)) + ; We need to shift the whole eps to (0,0), otherwise it will appear + ; displaced in lilypond (displacement will depend on the scaling!) + (translate-string (ly:format "~a ~a translate" (- (list-ref bbox 0)) (- (list-ref bbox 1)))) (clip-rect-string (ly:format "~a ~a ~a ~a rectclip" - (list-ref bbox 0) - (list-ref bbox 1) + (list-ref bbox 0) + (list-ref bbox 1) (- (list-ref bbox 2) (list-ref bbox 0)) (- (list-ref bbox 3) (list-ref bbox 1))))) - + (if bbox (ly:make-stencil @@ -401,9 +731,10 @@ gsave currentpoint translate BeginEPSF ~a dup scale -~a +~a +~a %%BeginDocument: ~a -" factor clip-rect-string +" factor translate-string clip-rect-string file-name ) @@ -412,10 +743,11 @@ BeginEPSF EndEPSF grestore ")) - - (cons (list-ref scaled-bbox 0) (list-ref scaled-bbox 2)) - (cons (list-ref scaled-bbox 1) (list-ref scaled-bbox 3))) - + ; Stencil starts at (0,0), since we have shifted the eps, and its + ; size is exactly the size of the scaled bounding box + (cons 0 (- (list-ref scaled-bbox 2) (list-ref scaled-bbox 0))) + (cons 0 (- (list-ref scaled-bbox 3) (list-ref scaled-bbox 1)))) + (ly:make-stencil "" '(0 . 0) '(0 . 0))) )) @@ -427,7 +759,7 @@ grestore (begin (let* ((outname (simple-format #f "~a-~a.signature" basename count)) ) - + (ly:message "Writing ~a" outname) (write-system-signature outname (car paper-systems)) (write-system-signatures basename (cdr paper-systems) (1+ count)))))) @@ -439,7 +771,7 @@ grestore (define system-grob (paper-system-system-grob paper-system)) - + (define output (open-output-file filename)) ;; todo: optionally use a command line flag? Or just junk this? @@ -464,7 +796,7 @@ grestore (cons (fold-false-pairs first) rest) rest)) expr)) - + (define (raw-string expr) "escape quotes and slashes for python consumption" (regexp-substitute/global #f "[@\n]" (simple-format #f "~a" expr) 'pre " " 'post)) @@ -472,7 +804,7 @@ grestore (define (raw-pair expr) (simple-format #f "~a ~a" (car expr) (cdr expr))) - + (define (found-grob expr) (let* ((grob (car expr)) @@ -518,7 +850,7 @@ grestore (for-each (lambda (e) (interpret e)) (cdr expr))) (else (collect (fold-false-pairs (strip-floats expr)))) - + ))) (interpret expr)) @@ -533,4 +865,4 @@ grestore ;; should be superfluous, but leaking "too many open files"? (close-port output)) - + diff --git a/scm/tablature.scm b/scm/tablature.scm new file mode 100644 index 0000000000..c26af257c8 --- /dev/null +++ b/scm/tablature.scm @@ -0,0 +1,377 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2009--2011 Marc Hohl +;;;; +;;;; 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 . + + +;; for more control over glyph-name calculations, +;; we use a custom callback for tab note heads +;; which will ignore 'style = 'do +(define-public (tab-note-head::calc-glyph-name grob) + (let ((style (ly:grob-property grob 'style))) + + (case style + ((cross) "2cross")))) + +;; ensure we only call note head callback when +;; 'style = 'cross +(define-public (tab-note-head::whiteout-if-style-set grob) + (let ((style (ly:grob-property grob 'style))) + + (if (and (symbol? style) + (eq? style 'cross)) + (stencil-whiteout (ly:note-head::print grob)) + (tab-note-head::print grob)))) + +;; definitions for the "moderntab" clef: +;; the "moderntab" clef will be added to the list of known clefs, +;; so it can be used as any other clef: \clef "moderntab" +(add-new-clef "moderntab" "markup.moderntab" 0 0 0) + +;; define sans serif-style tab-Clefs as a markup: +(define-markup-command (customTabClef + layout props num-strings staff-space) + (integer? number?) + #:category music + "Draw a tab clef sans-serif style." + (define (square x) (* x x)) + (let* ((scale-factor (/ staff-space 1.5)) + (font-size (- (* num-strings 1.5 scale-factor) 7)) + (base-skip (* (square (+ (* num-strings 0.195) 0.4)) scale-factor))) + + (interpret-markup layout props + (markup #:vcenter #:bold + #:override (cons 'font-family 'sans) + #:fontsize font-size + #:override (cons 'baseline-skip base-skip) + #:left-align #:center-column ("T" "A" "B"))))) + +;; this function decides which clef to take +(define-public (clef::print-modern-tab-if-set grob) + (let ((glyph (ly:grob-property grob 'glyph))) + + ;; which clef is wanted? + (if (string=? glyph "markup.moderntab") + ;; if it is "moderntab", we'll draw it + (let* ((staff-symbol (ly:grob-object grob 'staff-symbol)) + (line-count (if (ly:grob? staff-symbol) + (ly:grob-property staff-symbol 'line-count) + 0)) + (staff-space (ly:staff-symbol-staff-space grob))) + + (grob-interpret-markup grob (make-customTabClef-markup line-count + staff-space))) + ;; otherwise, we simply use the default printing routine + (ly:clef::print grob)))) + +;; if stems are drawn, it is nice to have a double stem for +;; (dotted) half notes to distinguish them from quarter notes: +(define-public (tabvoice::draw-double-stem-for-half-notes grob) + (let ((stem (ly:stem::print grob))) + + ;; is the note a (dotted) half note? + (if (= 1 (ly:grob-property grob 'duration-log)) + ;; yes -> draw double stem + (ly:stencil-combine-at-edge stem X RIGHT stem 0.5) + ;; no -> draw simple stem + stem))) + +;; as default, the glissando line between fret numbers goes +;; upwards, here we have a function to correct this behavior: +(define-public (glissando::calc-tab-extra-dy grob) + (let* ((original (ly:grob-original grob)) + (left-bound (ly:spanner-bound original LEFT)) + (right-bound (ly:spanner-bound original RIGHT)) + (left-pitch (ly:event-property (event-cause left-bound) 'pitch)) + (right-pitch (ly:event-property (event-cause right-bound) 'pitch))) + + (if (< (ly:pitch-semitones right-pitch) (ly:pitch-semitones left-pitch)) + -0.75 + 0.75))) + +;; the handler for ties in tablature; according to TabNoteHead #'details, +;; the 'tied to' note is handled differently after a line break +(define-public (tie::handle-tab-note-head grob) + (let* ((original (ly:grob-original grob)) + (tied-tab-note-head (ly:spanner-bound grob RIGHT)) + (spanner-start (ly:grob-property tied-tab-note-head 'span-start #f)) + (siblings (if (ly:grob? original) + (ly:spanner-broken-into original) '()))) + + (if spanner-start + ;; tab note head is right bound of a tie and left of spanner, + ;; -> parenthesize it at all events + (begin + (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t) + (ly:grob-set-property! tied-tab-note-head 'stencil tab-note-head::print)) + ;; otherwise, check whether tie is split: + (if (and (>= (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + ;; tie is split -> get TabNoteHead #'details + (let* ((details (ly:grob-property tied-tab-note-head 'details)) + (tied-properties (assoc-get 'tied-properties details '())) + (tab-note-head-parenthesized (assoc-get 'parenthesize tied-properties #t)) + ;; we need the begin-of-line entry in the 'break-visibility vector + (tab-note-head-visible + (vector-ref (assoc-get 'break-visibility + tied-properties #(#f #f #t)) 2))) + + (if tab-note-head-visible + ;; tab note head is visible + (if tab-note-head-parenthesized + (begin + (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t) + (ly:grob-set-property! tied-tab-note-head 'stencil tab-note-head::print))) + ;; tab note head is invisible + (ly:grob-set-property! tied-tab-note-head 'transparent #t))) + + ;; tie is not split + (ly:grob-set-property! tied-tab-note-head 'transparent #t))))) + + + +;; repeat ties occur within alternatives in a repeat construct; +;; TabNoteHead #'details handles the appearance in this case +(define-public (repeat-tie::handle-tab-note-head grob) + (let* ((tied-tab-note-head (ly:grob-object grob 'note-head)) + (spanner-start (ly:grob-property tied-tab-note-head 'span-start #f))) + (if spanner-start + ;; tab note head is between a tie and a slur/glissando + ;; -> parenthesize it at all events + (begin + (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t) + (ly:grob-set-property! tied-tab-note-head 'stencil tab-note-head::print)) + ;; otherwise check 'details + (let* ((details (ly:grob-property tied-tab-note-head 'details)) + (repeat-tied-properties (assoc-get 'repeat-tied-properties details '())) + (tab-note-head-visible (assoc-get 'note-head-visible repeat-tied-properties #t)) + (tab-note-head-parenthesized (assoc-get 'parenthesize repeat-tied-properties #t))) + + (if tab-note-head-visible + ;; tab note head is visible + (if tab-note-head-parenthesized + (begin + (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t) + (ly:grob-set-property! tied-tab-note-head 'stencil tab-note-head::print))) + ;; tab note head is invisible + (ly:grob-set-property! tied-tab-note-head 'transparent #t)))))) + +;; the slurs should not be too far apart from the corresponding fret number, so +;; we move the slur towards the TabNoteHeads; moreover, if the left fret number is +;; the right-bound of a tie, we'll set it in parentheses: +(define-public (slur::draw-tab-slur grob) + ;; TODO: use a less "brute-force" method to decrease + ;; the distance between the slur ends and the fret numbers + (let* ((original (ly:grob-original grob)) + (left-bound (ly:spanner-bound original LEFT)) + (left-tab-note-head (ly:grob-property left-bound 'cause)) + (staff-space (ly:staff-symbol-staff-space grob)) + (control-points (ly:grob-property grob 'control-points)) + (new-control-points (map + (lambda (p) + (cons (car p) + (- (cdr p) + (* staff-space + (ly:grob-property grob 'direction) + 0.35)))) + control-points))) + + (ly:grob-set-property! grob 'control-points new-control-points) + (ly:slur::print grob))) + +;; The glissando routine works similarly to the slur routine; if the +;; fret number is "tied to", it should become parenthesized. +(define-public (glissando::draw-tab-glissando grob) + (let* ((original (ly:grob-original grob)) + (left-tab-note-head (ly:spanner-bound original LEFT)) + (cautionary (ly:grob-property left-tab-note-head 'display-cautionary #f))) + + (and cautionary + ;; increase left padding to avoid collision between + ;; closing parenthesis and glissando line + (ly:grob-set-nested-property! grob '(bound-details left padding) 0.5)) + (ly:line-spanner::print grob))) + +;; for \tabFullNotation, the stem tremolo beams are too big in comparison to +;; normal staves; this wrapper function scales accordingly: +(define-public (stem-tremolo::calc-tab-width grob) + (let ((width (ly:stem-tremolo::calc-width grob)) + (staff-space (ly:staff-symbol-staff-space grob))) + (/ width staff-space))) + + +;; a callback for custom fret labels +(define-public ((tab-note-head::print-custom-fret-label fret) grob) + (ly:grob-set-property! grob 'text fret) + (tab-note-head::print grob)) + +(define-public (tab-note-head::print grob) + (define (is-harmonic? grob) + (let ((arts (ly:event-property (event-cause grob) 'articulations))) + (or (pair? (filter (lambda (a) + (ly:in-event-class? a 'harmonic-event)) + arts)) + (eq? (ly:grob-property grob 'style) 'harmonic)))) + + (let* ((cautionary (ly:grob-property grob 'display-cautionary #f)) + (details (ly:grob-property grob 'details '())) + (harmonic-props (assoc-get 'harmonic-properties details '())) + (harmonic-angularity (assoc-get 'angularity harmonic-props 2)) + (harmonic-half-thick (assoc-get 'half-thickness harmonic-props 0.075)) + (harmonic-padding (assoc-get 'padding harmonic-props 0)) + (harmonic-proc (assoc-get 'procedure harmonic-props parenthesize-stencil)) + (harmonic-width (assoc-get 'width harmonic-props 0.25)) + (cautionary-props (assoc-get 'cautionary-properties details '())) + (cautionary-angularity (assoc-get 'angularity cautionary-props 2)) + (cautionary-half-thick (assoc-get 'half-thickness cautionary-props 0.075)) + (cautionary-padding (assoc-get 'padding cautionary-props 0)) + (cautionary-proc (assoc-get 'procedure cautionary-props parenthesize-stencil)) + (cautionary-width (assoc-get 'width cautionary-props 0.25)) + (output-grob (ly:text-interface::print grob)) + (ref-grob (grob-interpret-markup grob "8")) + (offset-factor (assoc-get 'head-offset details 3/5)) + (column-offset (* offset-factor + (interval-length + (ly:stencil-extent + (grob-interpret-markup grob "8") + X))))) + + (if (is-harmonic? grob) + (set! output-grob (harmonic-proc output-grob + harmonic-half-thick + harmonic-width + harmonic-angularity + harmonic-padding))) + (if cautionary + (set! output-grob (cautionary-proc output-grob + cautionary-half-thick + cautionary-width + cautionary-angularity + cautionary-padding))) + (ly:stencil-translate-axis (centered-stencil output-grob) + column-offset + X))) + +;; Harmonic definitions + +(define node-positions + ;; for the node on m/n-th of the string length, we get the corresponding + ;; (exact) fret position by calculating p=(-12/log 2)*log(1-(m/n)); + ;; since guitarists normally use the forth fret and not the 3.8th, here + ;; are rounded values, ordered by + ;; 1/2 + ;; 1/3 2/3 + ;; 1/4 2/4 3/4 etc. + ;; The value for 2/4 is irrelevant in practical, bacause the string sounds + ;; only one octave higher, not two, but since scheme normalizes the fractions + ;; anyway, these values are simply placeholders for easier indexing. + ;; According to the arithmetic sum, the position of m/n is at 1/2*(n-2)(n-1)+(m-1) + ;; if we start counting from zero + (vector 12 + 7 19 + 5 12 24 + 4 9 16 28 + 3 7 12 19 31 + 2.7 5.8 9.7 14.7 21.7 33.7 + 2.3 5 8 12 17 24 36 + 2 4.4 7 10 14 19 26 38 )) + +(define partial-pitch + (vector '(0 0 0) + '(1 0 0) + '(1 4 0) + '(2 0 0) + '(2 2 0) + '(2 4 0) + '(2 6 -1/2) + '(3 0 0) + '(3 1 0))) + +(define fret-partials + '(("0" . 0) + ("12" . 1) + ("7" . 2) + ("19" . 2) + ("5" . 3) + ("24" . 3) + ("4" . 4) + ("9" . 4) + ("16" . 4) + ("3" . 5) + ("2.7" . 6) + ("2.3" . 7) + ("2" . 8))) + +(define-public (ratio->fret ratio) + "Calculate a fret number given @var{ratio} for the harmonic." + (let* ((nom (numerator ratio)) + (den (denominator ratio)) + (index (+ (* (- den 2) + (- den 1) + 1/2) + nom -1))) + (number->string (vector-ref node-positions index)))) + +(define-public (ratio->pitch ratio) + "Calculate a pitch given @var{ratio} for the harmonic." + (let* ((partial (1- (denominator ratio))) + (pitch (vector-ref partial-pitch partial))) + + (ly:make-pitch (first pitch) + (second pitch) + (third pitch)))) + +(define-public (fret->pitch fret) + "Calculate a pitch given @var{fret} for the harmonic." + (let* ((partial (assoc-get fret fret-partials 0)) + (pitch (vector-ref partial-pitch partial))) + + (ly:make-pitch (first pitch) + (second pitch) + (third pitch)))) + +(define-public (calc-harmonic-pitch pitch music) + "Calculate the harmonic pitches in @var{music} given +@var{pitch} as the non-harmonic pitch." + (let ((es (ly:music-property music 'elements)) + (e (ly:music-property music 'element)) + (p (ly:music-property music 'pitch))) + (cond + ((pair? es) + (ly:music-set-property! music 'elements + (map (lambda (x) (calc-harmonic-pitch pitch x)) es))) + ((ly:music? e) + (ly:music-set-property! music 'element (calc-harmonic-pitch pitch e))) + ((ly:pitch? p) + (begin + (set! p (ly:pitch-transpose p pitch)) + (ly:music-set-property! music 'pitch p)))) + music)) + +(define-public (make-harmonic mus) + "Convert music variable @var{mus} to harmonics." + (let ((elts (ly:music-property mus 'elements)) + (elt (ly:music-property mus 'element))) + (cond + ((pair? elts) + (map make-harmonic elts)) + ((ly:music? elt) + (make-harmonic elt)) + ((music-is-of-type? mus 'note-event) + (set! (ly:music-property mus 'articulations) + (append + (ly:music-property mus 'articulations) + (list (make-music 'HarmonicEvent)))))) + mus)) diff --git a/scm/time-signature-settings.scm b/scm/time-signature-settings.scm new file mode 100644 index 0000000000..59adb1cdde --- /dev/null +++ b/scm/time-signature-settings.scm @@ -0,0 +1,391 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2009--2011 Carl Sorensen +;;;; +;;;; 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 . + +;;; specify time signature default settings + +;;; format: +;;; +;;; alist of +;;; (time-signature . default-properties) entries. +;;; +;;; where default-properties is an alist containing information about the +;;; time signature. Each default-properties set can contain the +;;; following entries: +;;; +;;; (baseMoment . (numerator . denominator)) +;;; (beatStructure . structure-list) +;;; (beamExceptions . (alist of beam exceptions that don't follow beats)) +;;; +;;; The alist of beam exceptions has the following entries: +;;; +;;; (end . grouping-rules) +;;; (subdivide . grouping-rules) (not yet implemented, reserved for future use) +;;; +;;; grouping-rules is an alist containing (beam-type . grouping-list) entries +;;; +;;; beam-type is (numerator . denominator) +;;; grouping-list is a list that specifies the +;;; number of stems of the given duration that are grouped in a beamed unit. +;;; For an exception, the duration used is beam-type. For measureBeats, +;;; the duration used is baseMoment. +;;; +;;; If an exception is specified for a given beam-type, it will apply to all +;;; beams of shorter durations that don't have an individual exception, so +;;; ((1 . 8) . (3 3 2)) +;;; will cause all primary beams to be broken at 3/8, 6/8, and 8/8. +;;; +;;; ((1. 32) . (16 8 4 4)) +;;; will cause all 1/32, 1/64, and 1/128 beams to be broken at 1/2, 3/4, +;;; 7/8, and 8/8. +;;; +;;; If no values are given for baseMoment and measureBeats, default values +;;; will be assigned: +;;; baseMoment gets the value (ly:make-moment 1 time-signature-denominator) +;;; beatStructure gets a list of (3 3 3 ...), where the number of entries is the +;;; number of beats, each containing 3 base-moments, if the time +;;; signature numerator is greater than 3 and divisible by 3, and +;;; a list of (1 1 1 ...), where the number of entries is the +;;; number of base moments in a measure otherwise. +;;; +;;; NOTE: numerator is kept in beam-type because of +;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8) +;;; for eighth-note triplets. + +(define-public default-time-signature-settings + '( + ;; in 2/2 time: + ;; use defaults, but end beams with 32nd notes each 1 4 beat + ((2 . 2) . + ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8)))))))) + + ;; in 2/4, 2/8 and 2/16 time: + ;; use defaults, so no entries are necessary + + ;; in 3 2 time: + ;; use defaults, but end beams with 32nd notes and higher each 1 4 beat + + ((3 . 2) . + ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8)))))))) + + ;; in 3 4 time: + ;; use defaults, but combine all beats into a unit if possible + ;; + ;; set all beams to end on beats, but 1 8 to beam entire measure + ;; in order to avoid beaming every beam type for the entire measure, we set + ;; triplets back to every beat. + ((3 . 4) . + ((beamExceptions . ((end . (((1 . 8) . (6)) ;1/8 note whole measure + ((1 . 12) . (3 3 3)))))))) ;Anything shorter by beat + + ;; in 3 8 time: + ;; beam entire measure together + ((3 . 8) . ((beamExceptions . ((end . (((1 . 8) . (3)))))))) + + ;; in 3 16 time: + ;; use defaults -- no entries necessary + + ;; in 4 2 time: + ;; use defaults, but end beams with 16th notes or finer each 1 4 beat + ((4 . 2) . + ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4 4 4)))))))) + + ;; in 4 4 (common) time: + ;; use defaults, but combine beats 1,2 and 3,4 if only 8th notes + ;; NOTE: Any changes here need to be duplicated in + ;; ly/engraver-init.ly where the default time signature is set + ;; are set + ((4 . 4) . + ((beamExceptions . ((end . (((1 . 8) . (4 4)) ; 1/8 notes half measure + ((1 . 12) . (3 3 3 3)))))))) ;Anything shorter by beat + + ;; in 4/8 time: + ;; combine beats 1 and 2, so beam in 2 + ((4 . 8) . ((beatStructure . (2 2)))) + + ;; in 4/16 time: + ;; use defaults, so no entries necessary + + ;; in 6 4 time: + ;; use defaults, but end beams with 32nd or finer each 1/4 beat + ((6 . 4) . + ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4)))))))) + + ;; in 6 8 time: + ;; use defaults, so no entries necessary + + ;; in 6 16 time: + ;; use defaults, so no entries necessary + + ;; in 9 4 time: + ;; use defaults, but end beams with 32nd or finer each 1 4 beat + ((9 . 4) . + ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8)))))))) + + ;; in 9 8 time + ;; use defaults, so no entries necessary + + ;; in 9 16 time + ;; use defaults, so no entries necessary + + ;; in 12 4 time: + ;; use defaults, but end beams with 32nd or finer notes each 1 4 beat + ((12 . 4) . + ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8 8 8 8 8)))))))) + + ;; in 12 8 time: + ;; use defaults, so no entries necessary + + ;; in 12 16 time: + ;; use defaults, so no entries necessary + + ;; in 5 8 time: + ;; default: group (3 2) + ((5 . 8) . + ((beatStructure . (3 2)))) + + ;; in 8 8 time: + ;; default: group (3 3 2) + ((8 . 8) . + ((beatStructure . (3 3 2)))) + + )) ; end of alist definition + +;;; +;;; Accessor and constructor functions +;;; + +(define (get-setting my-symbol time-signature time-signature-settings) + "Get setting @code{my-symbol} for @code{time-signature} from +@code{time-signature-settings}." + (let ((my-time-signature-settings + (assoc-get time-signature time-signature-settings '()))) + (assoc-get my-symbol my-time-signature-settings '()))) + +(define-public (make-setting base-fraction + beat-structure + beam-exceptions) + (list + (cons 'baseMoment base-fraction) + (cons 'beatStructure beat-structure) + (cons 'beamExceptions beam-exceptions))) + +(define-public (base-fraction time-signature time-signature-settings) + "Get @code{baseMoment} fraction value for @var{time-signature} from +@var{time-signature-settings}." + (let ((return-value (get-setting 'baseMoment + time-signature + time-signature-settings))) + (if (null? return-value) + (cons 1 (cdr time-signature)) + return-value))) + +(define-public (beat-structure base-fraction time-signature time-signature-settings) + "Get @code{beatStructure} value in @var{base-fraction} units +for @var{time-signature} from @var{time-signature-settings}." + (define (fraction-divide numerator denominator) + (/ (* (car numerator) (cdr denominator)) + (* (cdr numerator) (car denominator)))) + + (let ((return-value (get-setting 'beatStructure + time-signature + time-signature-settings))) + (if (null? return-value) + ;; calculate default beatStructure + (let* ((numerator (car time-signature)) + (group-size (if (and (> numerator 3) + (zero? (remainder numerator 3))) + 3 + 1)) + (beat-length (cons (* group-size (car base-fraction)) + (cdr base-fraction))) + (beat-count (fraction-divide time-signature beat-length))) + (if (integer? beat-count) + (make-list beat-count group-size) + '())) + ;; use value obtained from time-signature-settings + return-value))) + +(define-public (beam-exceptions time-signature time-signature-settings) + "Get @code{beamExceptions} value for @var{time-signature} from +@var{time-signature-settings}." + (get-setting 'beamExceptions time-signature time-signature-settings)) + + +;;; Functions for overriding time-signature settings +;;; + +(define (override-property-setting context property setting value) + "Like the C++ code that executes \\override, but without type +checking." + (begin + (revert-property-setting context property setting) + (ly:context-set-property! + context + property + (cons (cons setting value) (ly:context-property context property))))) + +(define (revert-property-setting context property setting) + "Like the C++ code that executes \revert, but without type +checking." + + (define (entry-count alist entry-key) + "Count the number of entries in alist with a key of +ENTRY-KEY." + (cond + ((null? alist) 0) + ((equal? (caar alist) entry-key) + (+ 1 (entry-count (cdr alist) entry-key))) + (else (entry-count (cdr alist) entry-key)))) + + (define (revert-member alist entry-key) + "Return ALIST, with the first entry having a key of +ENTRY-KEY removed. ALIST is not modified, instead +a fresh copy of the list-head is made." + (cond + ((null? alist) '()) + ((equal? (caar alist) entry-key) (cdr alist)) + (else (cons (car alist) + (revert-member (cdr alist) entry-key))))) + + ;; body of revert-property-setting + (let ((current-value (ly:context-property context property))) + (if (> (entry-count current-value setting) 1) + (ly:context-set-property! + context + property + (revert-member current-value setting))))) + +(define-public (override-time-signature-setting time-signature setting) + "Override the time signature settings for the context in +@var{time-signature}, with the new setting alist @var{setting}." + (context-spec-music + (make-apply-context + (lambda (c) (override-property-setting + c + 'timeSignatureSettings + time-signature + setting))) + 'Timing)) + +(define-public (revert-time-signature-setting time-signature) + (context-spec-music + (make-apply-context + (lambda (c) + (revert-property-setting + c + 'timeSignatureSettings + time-signature))) + 'Timing)) + + + + +;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +;;; Formatting of complex/compound time signatures + +(define (insert-markups l m) + (let ((ll (reverse l))) + (let join-markups ((markups (list (car ll))) + (remaining (cdr ll))) + (if (pair? remaining) + (join-markups (cons (car remaining) (cons m markups)) (cdr remaining)) + markups)))) + +;;; Use a centered-column inside a left-column, because the centered column +;;; moves its reference point to the center, which the left-column undoes. +(define (format-time-fraction time-sig-fraction) + (let* ((revargs (reverse (map number->string time-sig-fraction))) + (den (car revargs)) + (nums (reverse (cdr revargs)))) + (make-override-markup '(baseline-skip . 0) + (make-number-markup + (make-left-column-markup (list + (make-center-column-markup (list + (make-line-markup (insert-markups nums "+")) + den)))))))) + +(define (format-complex-compound-time time-sig) + (make-override-markup '(baseline-skip . 0) + (make-number-markup + (make-line-markup + (insert-markups (map format-time-fraction time-sig) + (make-vcenter-markup "+")))))) + +(define-public (format-compound-time time-sig) + (cond + ((not (pair? time-sig)) (null-markup)) + ((pair? (car time-sig)) (format-complex-compound-time time-sig)) + (else (format-time-fraction time-sig)))) + + +;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +;;; Measure length calculation of (possibly complex) compound time signatures + +(define (calculate-time-fraction time-sig-fraction) + (let* ((revargs (reverse time-sig-fraction)) + (den (car revargs)) + (num (apply + (cdr revargs)))) + (ly:make-moment num den))) + +(define (calculate-complex-compound-time time-sig) + (let add-moment ((moment ZERO-MOMENT) + (remaining (map calculate-time-fraction time-sig))) + (if (pair? remaining) + (add-moment (ly:moment-add moment (car remaining)) (cdr remaining)) + moment))) + +(define-public (calculate-compound-measure-length time-sig) + (cond + ((not (pair? time-sig)) (ly:make-moment 4 4)) + ((pair? (car time-sig)) (calculate-complex-compound-time time-sig)) + (else (calculate-time-fraction time-sig)))) + + +;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +;;; Base beat length: Use the smallest denominator from all fraction + +(define (calculate-compound-base-beat-full time-sig) + (apply max (map last time-sig))) + +(define-public (calculate-compound-base-beat time-sig) + (ly:make-moment 1 + (cond + ((not (pair? time-sig)) 4) + ((pair? (car time-sig)) (calculate-compound-base-beat-full time-sig)) + (else (calculate-compound-base-beat-full (list time-sig)))))) + + +;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +;;; Beat Grouping + +(define (normalize-fraction frac beat) + (let* ((thisbeat (car (reverse frac))) + (factor (/ beat thisbeat))) + (map (lambda (f) (* factor f)) frac))) + +(define (beat-grouping-internal time-sig) + ;; Normalize to given beat, extract the beats and join them to one list + (let* ((beat (calculate-compound-base-beat-full time-sig)) + (normalized (map (lambda (f) (normalize-fraction f beat)) time-sig)) + (beats (map (lambda (f) (reverse (cdr (reverse f)))) normalized))) + (apply append beats))) + +(define-public (calculate-compound-beat-grouping time-sig) + (cond + ((not (pair? time-sig)) '(2 . 2)) + ((pair? (car time-sig)) (beat-grouping-internal time-sig)) + (else (beat-grouping-internal (list time-sig))))) diff --git a/scm/titling.scm b/scm/titling.scm index 66f45fc8a5..d0dde63bdf 100644 --- a/scm/titling.scm +++ b/scm/titling.scm @@ -1,9 +1,20 @@ -;;;; titling.scm -- titling functions +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2004--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 2004--2011 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys +;;;; +;;;; 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 . (define-public (layout-extract-page-properties layout) (list (append `((line-width . ,(ly:paper-get-number @@ -14,11 +25,11 @@ (define-public ((marked-up-headfoot what-odd what-even) layout scopes page-number is-last-bookpart is-bookpart-last-page) - - "Read variables WHAT-ODD, WHAT-EVEN from LAYOUT, and interpret them -as markup. The PROPS argument will include variables set in SCOPES and -page:is-bookpart-last-page, page:is-last-bookpart, page:page-number-string -and page:page-number" + "Read variables @var{what-odd}, @var{what-even} from @var{layout}, +and interpret them as markup. The @var{props} argument will include +variables set in @var{scopes} and @code{page:is-bookpart-last-page}, +@code{page:is-last-bookpart}, @code{page:page-number-string}, and +@code{page:page-number}." (define (get sym) (ly:output-def-lookup layout sym)) @@ -62,10 +73,9 @@ and page:page-number" (get what-odd)))) (define-public ((marked-up-title what) layout scopes) - "Read variables WHAT from SCOPES, and interpret it as markup. The -PROPS argument will include variables set in SCOPES (prefixed with -`header:' -" + "Read variables @var{what} from @var{scopes}, and interpret it as markup. +The @var{props} argument will include variables set in @var{scopes} (prefixed +with `header:'." (define (get sym) (let ((x (ly:modules-lookup scopes sym))) diff --git a/scm/to-xml.scm b/scm/to-xml.scm index 7e2ba0caab..f1d2e76d2e 100644 --- a/scm/to-xml.scm +++ b/scm/to-xml.scm @@ -1,9 +1,20 @@ -;;;; to-xml.scm -- dump parse tree as xml +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2003--2009 Han-Wen Nienhuys +;;;; Copyright (C) 2003--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . (define-module (scm to-xml)) @@ -220,7 +231,7 @@ is then separated. (string-append "string name) ">")) (define-public (music-to-xml music port) - "Dump XML-ish stuff to PORT." + "Dump XML-ish stuff to @var{port}." ;; dtd contains # -- This confuses tex during make doc. ;; @@ -231,7 +242,7 @@ is then separated. (display (close-tag 'music) port)) (define-public (music-to-musicxml music port) - "Dump MusicXML-ish stuff to PORT." + "Dump MusicXML-ish stuff to @var{port}." ;; dtd contains # -- This confuses tex during make doc. ;; diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index eefa9c0806..94862688fd 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -1,43 +1,76 @@ -;;;; translation-functions.scm -- +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 1998--2009 Han-Wen Nienhuys +;;;; (c) 1998--2011 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; 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 . + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; metronome marks -(define-public (format-metronome-markup text dur count context) - (let* ((hide-note (eq? #t (ly:context-property context 'tempoHideNote)))) + +(define-public (format-metronome-markup event context) + (let ((hide-note (ly:context-property context 'tempoHideNote #f)) + (text (ly:event-property event 'text)) + (dur (ly:event-property event 'tempo-unit)) + (count (ly:event-property event 'metronome-count))) + (metronome-markup text dur count hide-note))) (define-public (metronome-markup text dur count hide-note) (let* ((note-mark (if (and (not hide-note) (ly:duration? dur)) - (make-smaller-markup - (make-note-by-number-markup (ly:duration-log dur) - (ly:duration-dot-count dur) - 1)) - #f)) - (note-markup (if (and (not hide-note) (number? count) (> count 0) ) - (make-concat-markup (list - (make-general-align-markup Y DOWN note-mark) - (make-simple-markup " ") - (make-simple-markup "=") - (make-simple-markup " ") - (make-simple-markup (number->string count)))) - #f)) + (make-smaller-markup + (make-note-by-number-markup (ly:duration-log dur) + (ly:duration-dot-count dur) + 1)) + #f)) + (count-markup (cond ((number? count) + (if (> count 0) + (make-simple-markup (number->string count)) + #f)) + ((pair? count) + (make-concat-markup + (list + (make-simple-markup (number->string (car count))) + (make-simple-markup " ") + (make-simple-markup "–") + (make-simple-markup " ") + (make-simple-markup (number->string (cdr count)))))) + (else #f))) + (note-markup (if (and (not hide-note) count-markup) + (make-concat-markup + (list + (make-general-align-markup Y DOWN note-mark) + (make-simple-markup " ") + (make-simple-markup "=") + (make-simple-markup " ") + count-markup)) + #f)) (text-markup (if (not (null? text)) - (make-bold-markup text) - #f))) + (make-bold-markup text) + #f))) (if text-markup - (if (and note-markup (not hide-note)) - (make-line-markup (list text-markup - (make-concat-markup (list (make-simple-markup "(") - note-markup - (make-simple-markup ")"))))) - (make-line-markup (list text-markup))) - (if note-markup - (make-line-markup (list note-markup)) - (make-null-markup))))) + (if (and note-markup (not hide-note)) + (make-line-markup (list text-markup + (make-concat-markup + (list (make-simple-markup "(") + note-markup + (make-simple-markup ")"))))) + (make-line-markup (list text-markup))) + (if note-markup + (make-line-markup (list note-markup)) + (make-null-markup))))) (define-public (format-mark-alphabet mark context) (make-bold-markup (make-markalphabet-markup (1- mark)))) @@ -55,7 +88,8 @@ (make-bold-markup (number->string mark))) (define-public (format-mark-barnumbers mark context) - (make-bold-markup (number->string (ly:context-property context 'currentBarNumber)))) + (make-bold-markup (number->string (ly:context-property context + 'currentBarNumber)))) (define-public (format-mark-box-letters mark context) (make-bold-markup (make-box-markup (make-markletter-markup (1- mark))))) @@ -71,37 +105,39 @@ (define-public (format-mark-box-barnumbers mark context) (make-bold-markup (make-box-markup - (number->string (ly:context-property context 'currentBarNumber))))) + (number->string (ly:context-property context + 'currentBarNumber))))) (define-public (format-mark-circle-barnumbers mark context) (make-bold-markup (make-circle-markup - (number->string (ly:context-property context 'currentBarNumber))))) + (number->string (ly:context-property context + 'currentBarNumber))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Bass figures. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (format-bass-figure figure event context) (let* ((fig (ly:event-property event 'figure)) (fig-markup (if (number? figure) - ;; this is not very elegant, but center-aligning all digits - ;; is problematic with other markups, and shows problems - ;; in the (lack of) overshoot of feta alphabet glyphs. - + ;; this is not very elegant, but center-aligning + ;; all digits is problematic with other markups, + ;; and shows problems in the (lack of) overshoot + ;; of feta-alphabet glyphs. ((if (<= 10 figure) - (lambda (y) (make-translate-scaled-markup (cons -0.7 0) y)) + (lambda (y) (make-translate-scaled-markup + (cons -0.7 0) y)) identity) (cond - ((eq? #t (ly:event-property event 'diminished)) - (markup #:slashed-digit figure)) - ((eq? #t (ly:event-property event 'augmented-slash)) - (markup #:backslashed-digit figure)) - (else (markup #:number (number->string figure 10))))) - #f - )) + ((eq? #t (ly:event-property event 'diminished)) + (markup #:slashed-digit figure)) + ((eq? #t (ly:event-property event 'augmented-slash)) + (markup #:backslashed-digit figure)) + (else (markup #:number (number->string figure 10))))) + #f)) + (alt (ly:event-property event 'alteration)) (alt-markup (if (number? alt) @@ -110,15 +146,14 @@ (if (not (= alt DOUBLE-SHARP)) -2 2) (alteration->text-accidental-markup alt)) - #f)) + (plus-markup (if (eq? #t (ly:event-property event 'augmented)) (markup #:number "+") #f)) (alt-dir (ly:context-property context 'figuredBassAlterationDirection)) - (plus-dir (ly:context-property context 'figuredBassPlusDirection)) - ) + (plus-dir (ly:context-property context 'figuredBassPlusDirection))) (if (and (not fig-markup) alt-markup) (begin @@ -128,7 +163,7 @@ ;; hmm, how to get figures centered between note, and ;; lone accidentals too? - + ;; (if (markup? fig-markup) ;; (set! ;; fig-markup (markup #:translate (cons 1.0 0) @@ -141,10 +176,8 @@ alt-dir LEFT) fig-markup - #:pad-x 0.2 alt-markup - ))) + #:pad-x 0.2 alt-markup))) - (if plus-markup (set! fig-markup (if fig-markup @@ -155,217 +188,437 @@ fig-markup #:pad-x 0.2 plus-markup) plus-markup))) - + (if (markup? fig-markup) (markup #:fontsize -2 fig-markup) - empty-markup) + empty-markup))) - )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; fret diagrams -(define-public (determine-frets context grob notes string-numbers) - - (define (ensure-number a b) - (if (number? a) - a - b)) - - (define (string-frets->dot-placement string-frets string-count) - (let* - ((desc (list->vector - (map (lambda (x) (list 'mute (1+ x))) - (iota string-count))))) - - (for-each (lambda (sf) - (let* - ((string (car sf)) - (fret (cadr sf)) - (finger (caddr sf))) - - (vector-set! - desc (1- string) - (if (= 0 fret) - (list 'open string) - (if finger - (list 'place-fret string fret finger) - (list 'place-fret string fret)) - )) - )) - string-frets) - (vector->list desc))) - - (define (get-predefined-fretboard predefined-fret-table tuning pitches) -; (_i "Search through @var{predefined-fret-table} looking for a predefined -;fretboard with a key of @var{(tuning . pitches)}. The search will check -;both up and down an octave in order to accomodate transposition of the -;chords.") - (define (get-fretboard key) - (let ((hash-handle - (hash-get-handle predefined-fret-table key))) - (if hash-handle - (cdr hash-handle) ; return table entry - '()))) - - (let ((test-fretboard (get-fretboard (cons tuning pitches)))) - (if (not (null? test-fretboard)) - test-fretboard - (let ((test-fretboard - (get-fretboard - (cons tuning (map (lambda (x) (shift-octave x 1)) pitches))))) - (if (not (null? test-fretboard)) - test-fretboard - (get-fretboard - (cons tuning (map (lambda (x) (shift-octave x -1)) pitches)))))))) - -;; body. - (let* - ((tunings (ly:context-property context 'stringTunings)) - (my-string-count (length tunings)) - (details (ly:grob-property grob 'fret-diagram-details)) - (predefined-frets - (ly:context-property context 'predefinedDiagramTable)) - (minimum-fret (ensure-number - (ly:context-property context 'minimumFret) 0)) - (max-stretch (ensure-number - (ly:context-property context 'maximumFretStretch) 4)) - (string-frets (determine-frets-mf notes string-numbers - minimum-fret max-stretch - tunings)) - (pitches (map (lambda (x) (ly:event-property x 'pitch)) notes))) +(define (create-fretboard context grob placement-list) + "Convert @var{placement-list} into a fretboard @var{grob}." - (set! (ly:grob-property grob 'fret-diagram-details) + (let* ((tunings (ly:context-property context 'stringTunings)) + (my-string-count (length tunings)) + (details (ly:grob-property grob 'fret-diagram-details))) - (if (null? details) - (acons 'string-count (length tunings) '()) - (acons 'string-count (length tunings) details))) - (set! (ly:grob-property grob 'dot-placement-list) - (if predefined-frets - (let ((predefined-fretboard - (get-predefined-fretboard - predefined-frets - tunings - pitches))) - (if (null? predefined-fretboard) - (string-frets->dot-placement - string-frets my-string-count) ;no predefined diagram - predefined-fretboard)) ;found default diagram - (string-frets->dot-placement string-frets my-string-count))))) - -(define-public (determine-frets-mf notes string-numbers - minimum-fret max-stretch - tunings) - - (define (calc-fret pitch string tuning) - (- (ly:pitch-semitones pitch) (list-ref tuning (1- string)))) - - (define (note-pitch a) - (ly:event-property a 'pitch)) - - (define (note-pitch>? a b) - (ly:pitchplacement-list string-frets string-count) + "Convert @var{string-frets} to @code{fret-diagram-verbose} +dot placement entries." + (let* ((placements (list->vector + (map (lambda (x) (list 'mute x)) + (iota string-count 1))))) + + (for-each (lambda (sf) + (let* ((string (car sf)) + (fret (cadr sf)) + (finger (caddr sf))) + (vector-set! + placements + (1- string) + (if (= 0 fret) + (list 'open string) + (if finger + (list 'place-fret string fret finger) + (list 'place-fret string fret)))))) + string-frets) + (vector->list placements))) + + (define (placement-list->string-frets placement-list) + "Convert @var{placement-list} to string-fret list." + (map (lambda (x) (if (eq? (car x) 'place-fret) + (cdr x) + (list (cadr x) 0))) + (filter (lambda (l) (or (eq? (car l) 'place-fret) + (eq? (car l) 'open))) + placement-list))) + + (define (entry-count art-list) + "Count the number of entries in a list of articulations." + (length (filter (lambda (x) (not (null? x))) + art-list))) + + (define (determine-frets-and-strings + notes + defined-strings + defined-fingers + minimum-fret + maximum-stretch + tuning) + "Determine the frets and strings used to play the notes in +@var{notes}, given @var{defined-strings} and @var{defined-fingers} +along with @var{minimum-fret}, @var{maximum-stretch}, and +@var{tuning}. Returns a list of @code{(string fret finger) lists." + + (define specified-frets '()) + (define free-strings (iota (length tuning) 1)) + + (define (calc-fret pitch string tuning) + "Calculate the fret to play @var{pitch} on @var{string} with +@var{tuning}." + (- (ly:pitch-semitones pitch) (ly:pitch-semitones (list-ref tuning (1- string))))) + + (define (note-pitch note) + "Get the pitch (in semitones) from @var{note}." + (ly:event-property note 'pitch)) + + (define (note-finger ev) + "Get the fingering from @var{ev}. Return @var{#f} +if no fingering is present." + (let* ((articulations (ly:event-property ev 'articulations)) + (finger-found #f)) + (map (lambda (art) + (let* ((num (ly:event-property art 'digit))) + + (if (and (eq? 'fingering-event (ly:event-property art 'class)) + (number? num) + (> num 0)) (set! finger-found num)))) - articulations) - - finger-found)) - - (define (note-string ev) - (let* ((articulations (ly:event-property ev 'articulations)) - (string-found #f)) - - (map (lambda (art) - (let* - ((num (ly:event-property art 'string-number))) - - (if (number? num) - (set! string-found num)))) - articulations) - - string-found)) - - (define (del-string string) - (if (number? string) - (set! free-strings - (delete string free-strings)))) - (define specified-frets '()) - (define free-strings '()) - - (define (close-enough fret) - (reduce - (lambda (x y) - (and x y)) - #t - (map (lambda (specced-fret) - (> max-stretch (abs (- fret specced-fret)))) - specified-frets) - )) - - (define (string-qualifies string pitch) - (let* - ((fret (calc-fret pitch string tunings))) - - (and (>= fret minimum-fret) - (close-enough fret)) - - )) - - (define string-fret-fingering-tuples '()) - (define (set-fret note string) - (set! string-fret-fingering-tuples - (cons (list string - (calc-fret (ly:event-property note 'pitch) - string tunings) - (note-finger note)) - string-fret-fingering-tuples)) - (del-string string)) - - - ;;; body. - (set! specified-frets - (filter identity (map - (lambda (note) - (if (note-string note) - (calc-fret (note-pitch note) - (note-string note) tunings) - #f)) - notes))) - - - (set! free-strings (map 1+ (iota (length tunings)))) - - (for-each (lambda (note) - (del-string (note-string note))) - notes) - - - (for-each - (lambda (note) - (if (note-string note) - (set-fret note (note-string note)) - (let* - ((fit-string (find (lambda (string) - (string-qualifies string (note-pitch note))) - free-strings))) - (if fit-string - (set-fret note fit-string) - (ly:warning "No string for pitch ~a (given frets ~a)" - (note-pitch note) - specified-frets)) - - ))) - (sort notes note-pitch>?)) - - string-fret-fingering-tuples) + articulations) + finger-found)) + + (define (string-number event) + "Get the string-number from @var{event}. Return @var{#f} +if no string-number is present." + (let ((num (ly:event-property event 'string-number))) + (if (number? num) + num + #f))) + + (define (delete-free-string string) + (if (number? string) + (set! free-strings + (delete string free-strings)))) + + (define (close-enough fret) + "Decide if @var{fret} is acceptable, given the already used frets." + (if (null? specified-frets) + #t + (reduce + (lambda (x y) + (and x y)) + #t + (map (lambda (specced-fret) + (or (eq? 0 specced-fret) + (>= maximum-stretch (abs (- fret specced-fret))))) + specified-frets)))) + + (define (string-qualifies string pitch) + "Can @var{pitch} be played on @var{string}, given already placed +notes?" + (let* ((fret (calc-fret pitch string tuning))) + (and (>= fret minimum-fret) + (close-enough fret)))) + + (define (open-string string pitch) + "Is @var{pitch} and open-string note on @var{string}, given +the current tuning?" + (let* ((fret (calc-fret pitch string tuning))) + (eq? fret 0))) + + (define (set-fret! pitch-entry string finger) + (let ((this-fret (calc-fret (car pitch-entry) + string + tuning))) + (if (< this-fret 0) + (ly:warning (_ "Negative fret for pitch ~a on string ~a") + (car pitch-entry) string)) + (delete-free-string string) + (set! specified-frets (cons this-fret specified-frets)) + (list-set! string-fret-fingers + (cdr pitch-entry) + (list string this-fret finger)))) + + (define (kill-note! string-fret-fingers note-index) + (list-set! string-fret-fingers note-index (list #f #t))) + + (define string-fret-fingers + (map (lambda (string finger) + (if (null? finger) + (list string #f) + (list string #f finger))) + defined-strings defined-fingers)) + + ;;; body of determine-frets-and-strings + (let* ((pitch-alist (apply (lambda (mylist) + (let ((index -1)) + (map (lambda (note) + (begin + (set! index (1+ index)) + (cons (note-pitch note) + index))) + mylist))) + notes '())) + (pitches (map note-pitch notes))) + + ;; handle notes with strings assigned and fingering of 0 + (for-each + (lambda (pitch-entry string-fret-finger) + (let* ((string (list-ref string-fret-finger 0)) + (finger (if (eq? (length string-fret-finger) 3) + (list-ref string-fret-finger 2) + '())) + (pitch (car pitch-entry)) + (digit (if (null? finger) + #f + finger))) + (if (or (not (null? string)) + (eq? digit 0)) + (if (eq? digit 0) + ;; here we handle fingers of 0 -- open strings + (let ((fit-string + (find (lambda (string) + (open-string string pitch)) + free-strings))) + (if fit-string + (set-fret! pitch-entry fit-string #f) + (ly:warning (_ "No open string for pitch ~a") + pitch))) + ;; here we handle assigned strings + (let ((this-fret + (calc-fret pitch string tuning)) + (handle-negative + (ly:context-property context + 'handleNegativeFrets + 'recalculate))) + (cond ((or (>= this-fret 0) + (eq? handle-negative 'include)) + (set-fret! pitch-entry string finger)) + ((eq? handle-negative 'recalculate) + (begin + (ly:warning + (_ "Requested string for pitch requires negative fret: string ~a pitch ~a") + string + pitch) + (ly:warning (_ "Ignoring string request and recalculating.")) + (list-set! string-fret-fingers + (cdr pitch-entry) + (if (null? finger) + (list '() #f) + (list '() #f finger))))) + ((eq? handle-negative 'ignore) + (begin + (ly:warning + (_ "Requested string for pitch requires negative fret: string ~a pitch ~a") + string + pitch) + (ly:warning (_ "Ignoring note in tablature.")) + (kill-note! string-fret-fingers + (cdr pitch-entry)))))))))) + pitch-alist string-fret-fingers) + ;; handle notes without strings assigned -- sorted by pitch, so + ;; we need to use the alist to have the note number available + (for-each + (lambda (pitch-entry) + (let* ((string-fret-finger (list-ref string-fret-fingers + (cdr pitch-entry))) + (string (list-ref string-fret-finger 0)) + (finger (if (eq? (length string-fret-finger) 3) + (list-ref string-fret-finger 2) + '())) + (pitch (car pitch-entry)) + (fit-string + (find (lambda (string) + (string-qualifies string pitch)) + free-strings))) + (if (not (list-ref string-fret-finger 1)) + (if fit-string + (set-fret! pitch-entry fit-string finger) + (begin + (ly:warning (_ "No string for pitch ~a (given frets ~a)") + pitch + specified-frets) + (kill-note! string-fret-fingers + (cdr pitch-entry))))))) + (sort pitch-alist (lambda (pitch-entry-a pitch-entry-b) + (ly:pitchplacement-list + (filter (lambda (entry) + (car entry)) + string-frets) + string-count)))) + (if (null? grob) + (placement-list->string-frets predefined-fretboard) + (create-fretboard context grob predefined-fretboard))))) + + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tablature + +;; The TabNoteHead tablatureFormat callbacks. + +;; Calculate the fret from pitch and string number as letter +;; The fret letter is taken from 'fretLabels if present +(define-public (fret-letter-tablature-format + context string-number fret-number) + (let ((labels (ly:context-property context 'fretLabels))) + (make-vcenter-markup + (cond + ((= 0 (length labels)) + (string (integer->char (+ fret-number (char->integer #\a))))) + ((and (<= 0 fret-number) (< fret-number (length labels))) + (list-ref labels fret-number)) + (else + (ly:warning (_ "No label for fret ~a (on string ~a); +only ~a fret labels provided") + fret-number string-number (length labels)) + "."))))) + +;; Display the fret number as a number +(define-public (fret-number-tablature-format + context string-number fret-number) + (make-vcenter-markup + (format "~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 +;; are referred to relative to the other frets: +;; the "first fret" on the fifth string is really the sixth fret +;; on the banjo neck. +;; We solve this by defining a new fret-number-tablature function: +(define-public (fret-number-tablature-format-banjo + context string-number fret-number) + (make-vcenter-markup + (number->string (cond + ((and (> fret-number 0) (= string-number 5)) + (+ fret-number 5)) + (else fret-number))))) + +;; Tab note head staff position functions +;; +;; Define where in the staff to display a given string. Some forms of +;; tablature put the tab note heads in the spaces, rather than on the +;; lines + +(define-public (tablature-position-on-lines context string-number) + (let* ((string-tunings (ly:context-property context 'stringTunings)) + (string-count (length string-tunings)) + (string-one-topmost (ly:context-property context 'stringOneTopmost)) + (staff-line (- (* 2 string-number) string-count 1))) + (if string-one-topmost + (- staff-line) + staff-line))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; bar numbers + +(define-public ((every-nth-bar-number-visible n) barnum) + (= 0 (modulo barnum n))) + +(define-public ((modulo-bar-number-visible n m) barnum) + (and (> barnum 1) (= m (modulo barnum n)))) + +(define-public ((set-bar-number-visibility n) tr) + (let ((bn (ly:context-property tr 'currentBarNumber))) + (ly:context-set-property! tr 'barNumberVisibility + (modulo-bar-number-visible n (modulo bn n))))) + +(define-public (first-bar-number-invisible barnum) (> barnum 1)) + +(define-public (all-bar-numbers-visible barnum) #t) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; percent repeat counters + +(define-public ((every-nth-repeat-count-visible n) count context) + (= 0 (modulo count n))) + +(define-public (all-repeat-counts-visible count context) #t) diff --git a/scm/x11-color.scm b/scm/x11-color.scm index dee58506be..0bc764ab68 100644 --- a/scm/x11-color.scm +++ b/scm/x11-color.scm @@ -1,10 +1,19 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; x11-color.scm -- allows access to x11 color codes +;;;; Copyright (C) 2005--2011 Bernard Hurley ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2005--2009 Bernard Hurley +;;;; 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 . (define x11-color-list '((snow 1 0.98039215686274506 0.98039215686274506) diff --git a/scripts/abc2ly.py b/scripts/abc2ly.py index 9107b8b866..8adc6e4ac5 100644 --- a/scripts/abc2ly.py +++ b/scripts/abc2ly.py @@ -1,11 +1,28 @@ #!@TARGET_PYTHON@ # -*- coding: utf-8 -*- + # once upon a rainy monday afternoon. + +# This file is part of LilyPond, the GNU music typesetter. +# +# 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 . + # # ... # # (not finished.) -# ABC standard v1.6: http://www.walshaw.plus.com/abc/ +# ABC standard v1.6: http://abcnotation.com/ # # Enhancements (Roy R. Rankin) # @@ -62,12 +79,12 @@ # * lilylib # * GNU style messages: warning:FILE:LINE: # * l10n -# +# # Convert to new chord styles. # # UNDEF -> None # - + import __main__ import getopt @@ -87,7 +104,7 @@ global _;_=ly._ version = '@TOPLEVEL_VERSION@' if version == '@' + 'TOPLEVEL_VERSION' + '@': - version = '(unknown version)' # uGUHGUHGHGUGH + version = '(unknown version)' # uGUHGUHGHGUGH UNDEF = 255 state = UNDEF @@ -121,34 +138,47 @@ def error (msg): def alphabet (i): return chr (i + ord('A')) - + def check_clef(s): + # the number gives the base_octave + clefs = [("treble", "treble", 0), + ("treble1", "french", 0), + ("bass3", "varbaritone", 0), + ("bass", "bass", 0), + ("alto4", "tenor", 0), + ("alto2", "mezzosoprano", 0), + ("alto1", "soprano", 0), + ("alto", "alto", 0), + ("perc", "percussion", 0)] + modifier = [("-8va", "_8", -1), + ("-8", "_8", -1), + ("\+8", "^8", +1), + ("8", "_8", -1)] + if not s: return '' - if re.match('-8va', s) or re.match('treble8', s): - # treble8 is used by abctab2ps; -8va is used by barfly, - # and by my patch to abc2ps. If there's ever a standard - # about this we'll support that. - s = s[4:] - state.base_octave = -1 - voices_append("\\clef \"G_8\"\n") - elif re.match('^treble', s): - s = s[6:] - if re.match ('^-8', s): - s = s[2:] - state.base_octave = -2 - voices_append("\\clef \"G_8\"\n") - else: - state.base_octave = 0 - voices_append("\\clef treble\n") - elif re.match('^alto', s): - s = s[4:] - state.base_octave = -1 - voices_append ("\\clef alto\n" ) - elif re.match('^bass',s ): - s = s[4:] - state.base_octave = -2 - voices_append ("\\clef bass\n" ) + clef = None; + octave = 0; + for c in clefs: + m = re.match('^'+c[0], s) + if m: + (clef, octave) = (c[1], c[2]) + s = s[m.end():] + break; + if not clef: + return s + + mod = ""; + for md in modifier: + m = re.match('^'+md[0], s) + if m: + mod = md[1]; + octave += md[2]; + s = s[m.end():] + break; + + state.base_octave = octave + voices_append ("\\clef \""+clef+mod+"\"\n") return s def select_voice (name, rol): @@ -174,7 +204,7 @@ def select_voice (name, rol): value = re.sub ('\\\\','\\\\\\\\', value) ## < 2.2 voices_append ("\\set Staff.instrument = %s\n" % value ) - + __main__.part_names = 1 elif keyword == "sname" or keyword == "snm": voices_append ("\\set Staff.instr = %s\n" % value ) @@ -186,7 +216,7 @@ def dump_header (outf,hdr): ks = hdr.keys () ks.sort () for k in ks: - hdr[k] = re.sub('"', '\\"', hdr[k]) + hdr[k] = re.sub('"', '\\"', hdr[k]) outf.write ('\t%s = "%s"\n'% (k,hdr[k])) outf.write ('}') @@ -242,19 +272,17 @@ def dump_voices (outf): outf.write ("\n}") def try_parse_q(a): - global midi_specs - #assume that Q takes the form "Q:1/4=120" + #assume that Q takes the form "Q:'opt. description' 1/4=120" #There are other possibilities, but they are deprecated - if a.count ('/') == 1: - array = a.split('/') - numerator=array[0] - if int(numerator) != 1: - sys.stderr.write("abc2ly: Warning, unable to translate a Q specification with a numerator of %s: %s\n" % (numerator, a)) - array2 = array[1].split ('=') - denominator=array2[0] - perminute=array2[1] - duration = str (int (denominator) / int (numerator)) - midi_specs = ' '.join(["\n\t\t\\context {\n\t\t \\Score tempoWholesPerMinute = #(ly:make-moment ", perminute, " ", duration, ")\n\t\t }\n"]) + r = re.compile ('^(.*) *([0-9]+) */ *([0-9]+) *=* *([0-9]+)\s*') + m = r.match (a) + if m: + descr = m.group(1) # possibly empty + numerator = int(m.group (2)) + denominator = int(m.group (3)) + tempo = m.group (4) + dur = duration_to_lilypond_duration ((numerator,denominator), 1, 0) + voices_append ("\\tempo " + descr + " " + dur + "=" + tempo + "\n") else: sys.stderr.write("abc2ly: Warning, unable to parse Q specification: %s\n" % a) @@ -274,7 +302,7 @@ def dump_score (outf): m = k if k == 'default' and len (voice_idx_dict) > 1: break - outf.write ("\n\t\\context Staff=\"%s\"\n\t{\n" %k ) + outf.write ("\n\t\\context Staff=\"%s\"\n\t{\n" %k ) if k != 'default': outf.write ("\t \\voicedefault\n") outf.write ("\t \\voice%s " % m) @@ -332,17 +360,17 @@ def gulp_file(f): # pitch manipulation. Tuples are (name, alteration). # 0 is (central) C. Alteration -1 is a flat, Alteration +1 is a sharp -# pitch in semitones. +# pitch in semitones. def semitone_pitch (tup): p =0 t = tup[0] p = p + 12 * (t / 7) t = t % 7 - + if t > 2: p = p- 1 - + p = p + t* 2 + tup[1] return p @@ -351,7 +379,7 @@ def fifth_above_pitch (tup): difference = 7 - (semitone_pitch ((n,a)) - semitone_pitch (tup)) a = a + difference - + return (n,a) def sharp_keys (): @@ -385,23 +413,23 @@ def quart_above_pitch (tup): difference = 5 - (semitone_pitch ((n,a)) - semitone_pitch (tup)) a = a + difference - + return (n,a) key_lookup = { # abc to lilypond key mode names 'm' : 'minor', 'min' : 'minor', 'maj' : 'major', - 'major' : 'major', + 'major' : 'major', 'phr' : 'phrygian', 'ion' : 'ionian', 'loc' : 'locrian', 'aeo' : 'aeolian', 'mix' : 'mixolydian', - 'mixolydian' : 'mixolydian', + 'mixolydian' : 'mixolydian', 'lyd' : 'lydian', 'dor' : 'dorian', - 'dorian' : 'dorian' + 'dorian' : 'dorian' } def lily_key (k): @@ -448,28 +476,28 @@ key_shift = { # semitone shifts for key mode names 'min' : 3, 'minor' : 3, 'maj' : 0, - 'major' : 0, + 'major' : 0, 'phr' : -4, 'phrygian' : -4, 'ion' : 0, 'ionian' : 0, 'loc' : 1, - 'locrian' : 1, + 'locrian' : 1, 'aeo' : 3, 'aeolian' : 3, 'mix' : 5, - 'mixolydian' : 5, + 'mixolydian' : 5, 'lyd' : -5, - 'lydian' : -5, + 'lydian' : -5, 'dor' : -2, - 'dorian' : -2 + 'dorian' : -2 } def compute_key (k): k = k.lower () intkey = (ord (k[0]) - ord('a') + 5) % 7 intkeyacc =0 k = k[1:] - + if k and k[0] == 'b': intkeyacc = -1 k = k[1:] @@ -480,7 +508,7 @@ def compute_key (k): if k and key_shift.has_key(k): (intkey, intkeyacc) = shift_key(intkey, intkeyacc, key_shift[k]) keytup = (intkey, intkeyacc) - + sharp_key_seq = sharp_keys () flat_key_seq = flat_keys () @@ -498,7 +526,7 @@ def compute_key (k): else: error ("Huh?") raise Exception ("Huh") - + key_table = [0] * 7 for a in accseq: key_table[a] = key_table[a] + accsign @@ -523,7 +551,7 @@ def try_parse_tuplet_begin (str, state): prev_tuplet_state = state.parsing_tuplet state.parsing_tuplet = int (dig[0]) if prev_tuplet_state: - voices_append ("}") + voices_append ("}") voices_append ("\\times %s {" % tup_lookup[dig]) return str @@ -532,7 +560,7 @@ def try_parse_group_end (str, state): str = str[1:] close_beam_state(state) return str - + def header_append (key, a): s = '' if header.has_key (key): @@ -583,7 +611,7 @@ def repeat_prepend(): if not using_old: repeat_state[current_voice_idx] = 't' - + def lyrics_append(a): a = re.sub ('#', '\\#', a) # latex does not like naked #'s a = re.sub ('"', '\\"', a) # latex does not like naked "'s @@ -610,7 +638,7 @@ def fix_lyric(str): def slyrics_append(a): a = re.sub ( '_', ' _ ', a) # _ to ' _ ' - a = re.sub ( '([^-])-([^-])', '\\1- \\2', a) # split words with "-" unless was originally "--" + a = re.sub ( '([^-])-([^-])', '\\1- \\2', a) # split words with "-" unless was originally "--" a = re.sub ( '\\\\- ', '-', a) # unless \- a = re.sub ( '~', '_', a) # ~ to space('_') a = re.sub ( '\*', '_ ', a) # * to to space @@ -667,16 +695,19 @@ def try_parse_header_line (ln, state): if g == 'K': # KEY a = check_clef(a) if a: - m = re.match ('^([^ \t]*) *(.*)$', a) # seperate clef info + m = re.match ('^([^ \t]*) *([^ ]*)( *)(.*)$', a) # seperate clef info if m: # there may or may not be a space # between the key letter and the mode - if key_lookup.has_key(m.group(2)[0:3]): - key_info = m.group(1) + m.group(2)[0:3] - clef_info = m.group(2)[4:] + # convert the mode to lower-case before comparing + mode = m.group(2)[0:3].lower(); + if key_lookup.has_key(mode): + # use the full mode, not only the first three letters + key_info = m.group(1) + m.group(2).lower() + clef_info = a[m.start(4):] else: key_info = m.group(1) - clef_info = m.group(2) + clef_info = a[m.start(2):] __main__.global_key = compute_key (key_info) k = lily_key (key_info) if k: @@ -709,7 +740,7 @@ def try_parse_header_line (ln, state): header ['subtitle'] = a if g == 'L': # Default note length set_default_length (ln) - if g == 'V': # Voice + if g == 'V': # Voice voice = re.sub (' .*$', '', a) rest = re.sub ('^[^ \t]* *', '', a) if state.next_bar: @@ -738,7 +769,7 @@ def pitch_to_lilypond_name (name, acc, bar_acc, key): s = 'es' elif acc == 1: s = 'is' - + if name > 4: name = name -7 return(chr (name + ord('c')) + s) @@ -797,7 +828,7 @@ class Parser_state: -# return (str, num,den,dots) +# return (str, num,den,dots) def parse_duration (str, parser_state): num = 0 den = parser_state.next_den @@ -818,7 +849,7 @@ def parse_duration (str, parser_state): den = den * d den = den * default_len - + current_dots = parser_state.next_dots parser_state.next_dots = 0 if re.match ('[ \t]*[<>]', str): @@ -828,7 +859,7 @@ def parse_duration (str, parser_state): str = str [1:] current_dots = current_dots + 1 parser_state.next_den = parser_state.next_den * 2 - + while str[0] == '<': str = str [1:] den = den * 2 @@ -844,7 +875,7 @@ def parse_duration (str, parser_state): num = num / multiplier den = den / f current_dots = current_dots + d - + return (str, num,den,current_dots) @@ -887,7 +918,7 @@ artic_tbl = { 'O' : '^\\coda', 'v' : '^\\downbow' } - + def try_parse_articulation (str, state): while str and artic_tbl.has_key(str[:1]): state.next_articulation = state.next_articulation + artic_tbl[str[:1]] @@ -896,8 +927,8 @@ def try_parse_articulation (str, state): str = str[1:] - - + + # s7m2 input doesnt care about spaces if re.match('[ \t]*\(', str): str = str.lstrip () @@ -909,7 +940,7 @@ def try_parse_articulation (str, state): str = str[1:] return str - + # # remember accidental for rest of bar # @@ -937,7 +968,7 @@ def close_beam_state(state): state.parsing_beam = 0 voices_append_back( ']' ) - + # WAT IS ABC EEN ONTZETTENDE PROGRAMMEERPOEP ! def try_parse_note (str, parser_state): mud = '' @@ -971,7 +1002,7 @@ def try_parse_note (str, parser_state): else: return str # failed; not a note! - + __main__.lyric_idx = -1 if parser_state.next_bar: @@ -989,13 +1020,13 @@ def try_parse_note (str, parser_state): if re.match('[ \t]*\)', str): str = str.lstrip () - + slur_end =0 while str[:1] ==')': slur_end = slur_end + 1 str = str[1:] - + bar_acc = get_bar_acc(notename, octave, parser_state) pit = pitch_to_lilypond_name(notename, acc, bar_acc, global_key[notename]) oct = octave_to_lilypond_quotes (octave) @@ -1006,7 +1037,7 @@ def try_parse_note (str, parser_state): voices_append ("%s%s%s%s" % (pit, oct, mod, duration_to_lilypond_duration ((num,den), default_len, current_dots))) - + set_bar_acc(notename, octave, acc, parser_state) if parser_state.next_articulation: articulation = articulation + parser_state.next_articulation @@ -1014,22 +1045,23 @@ def try_parse_note (str, parser_state): voices_append (articulation) - if parser_state.parsing_tuplet: - parser_state.parsing_tuplet = parser_state.parsing_tuplet - 1 - if not parser_state.parsing_tuplet: - voices_append ("}") if slur_begin: voices_append ('-(' * slur_begin ) if slur_end: voices_append ('-)' *slur_end ) + if parser_state.parsing_tuplet: + parser_state.parsing_tuplet = parser_state.parsing_tuplet - 1 + if not parser_state.parsing_tuplet: + voices_append ("}") + if global_options.beams and \ str[0] in '^=_ABCDEFGabcdefg' and \ not parser_state.parsing_beam and \ not parser_state.parsing_tuplet: parser_state.parsing_beam = 1 voices_append_back( '[' ) - + return str def junk_space (str,state): @@ -1052,7 +1084,7 @@ def try_parse_guitar_chord (str, state): while str and str[0] != '"': gc = gc + str[0] str = str[1:] - + if str: str = str[1:] gc = re.sub('#', '\\#', gc) # escape '#'s @@ -1063,7 +1095,7 @@ def try_parse_guitar_chord (str, state): def try_parse_escape (str): if not str or str [0] != '\\': return str - + str = str[1:] if str[:1] =='K': key_table = compute_key () @@ -1160,12 +1192,12 @@ def try_parse_bar (str,state): str = str[1:] clear_bar_acc(state) close_beam_state(state) - + if bs <> None or state.next_bar != '': if state.parsing_tuplet: state.parsing_tuplet =0 voices_append ('} ') - + if bs <> None: clear_bar_acc(state) close_beam_state(state) @@ -1221,7 +1253,7 @@ def try_parse_chord_delims (str, state): end = end + 1 str = str[1:] - + voices_append ("\\spanrequest \\stop \"slur\"" * end) voices_append (ch) return str @@ -1256,7 +1288,7 @@ def try_parse_comment (str): #Since ABC is frequently used for music in styles that do not use this #convention, such as most music written before 1700, or ethnic music in #non-western scales, it is necessary to be able to tell a translator that -#the barlines should not affect its interpretation of the pitch. +#the barlines should not affect its interpretation of the pitch. if 'nobarlines' in str: nobarlines = 1 elif str[0:3] == '%LY': @@ -1267,8 +1299,8 @@ def try_parse_comment (str): p = str.find ('slyrics') if (p > -1): slyrics_append(str[p+8:]) - -#write other kinds of appending if we ever need them. + +#write other kinds of appending if we ever need them. return str lineno = 0 @@ -1284,7 +1316,7 @@ def parse_file (fn): sys.stderr.write ("Line ... ") sys.stderr.flush () __main__.state = state_list[current_voice_idx] - + for ln in ls: lineno = lineno + 1 @@ -1299,7 +1331,7 @@ def parse_file (fn): ln = m.group (1) orig_ln = ln - + ln = try_parse_header_line (ln, state) # Try nibbling characters off until the line doesn't change. @@ -1323,7 +1355,7 @@ def parse_file (fn): error ("%s: %d: Huh? Don't understand\n" % (fn, lineno)) left = orig_ln[0:-len (ln)] sys.stderr.write (left + '\n') - sys.stderr.write (' ' * len (left) + ln + '\n') + sys.stderr.write (' ' * len (left) + ln + '\n') def identify(): @@ -1341,7 +1373,7 @@ def get_option_parser (): p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'abc2ly', description=_ ('''abc2ly converts ABC music files (see %s) to LilyPond input. -''') % 'http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt', +''') % 'http://abcnotation.com/abc2mtex/abc.txt', add_help_option=False) p.version = "abc2ly (LilyPond) @TOPLEVEL_VERSION@" @@ -1357,7 +1389,7 @@ def get_option_parser (): action='store') p.add_option ('-s', '--strict', help=_ ("be strict about success"), action='store_true') - p.add_option ('-b', '--beams', help=_ ("preserve ABC's notion of beams")) + p.add_option ('-b', '--beams', help=_ ("preserve ABC's notion of beams"), action="store_true") p.add_option_group ('', description=( _ ('Report bugs via %s') @@ -1396,4 +1428,3 @@ for f in files: dump_score (outf) dump_lyrics (outf) sys.stderr.write ('\n') - diff --git a/scripts/auxiliar/GNUmakefile b/scripts/auxiliar/GNUmakefile index a80126d541..d70ff71da4 100644 --- a/scripts/auxiliar/GNUmakefile +++ b/scripts/auxiliar/GNUmakefile @@ -2,6 +2,8 @@ depth=../.. EXTRA_DIST_FILES = $(call src-wildcard,*.sh) $(call src-wildcard,*.py) EXTRA_DIST_FILES += pfx2ttf.fontforge +EXTRA_DIST_FILES += lily-git.tcl +EXTRA_DIST_FILES += ref_check.tely include $(depth)/make/stepmake.make diff --git a/scripts/auxiliar/build-coverage.sh b/scripts/auxiliar/build-coverage.sh index f61ff649dc..d774bee3fd 100755 --- a/scripts/auxiliar/build-coverage.sh +++ b/scripts/auxiliar/build-coverage.sh @@ -18,7 +18,7 @@ else find -name '*.gcda' -exec rm '{}' ';' fi -mkdir -p scripts/out-cov/ +mkdir -p scripts/out-cov touch scripts/out-cov/midi2ly scripts/out-cov/midi2ly.1 make conf=cov -j2 && \ make conf=cov test-clean OUT_TEST=testcov LILYPOND_JOBS= && \ @@ -42,11 +42,11 @@ mv $depth/input/regression/out-testcov/*.scm.cov . ln $depth/ly/*.ly . ln $depth/lily/out-cov/*[ch] . mkdir include -ln $depth/lily/include/* include/ -ln $depth/flower/include/* include/ +ln $depth/lily/include/* include +ln $depth/flower/include/* include for a in *[cl] *.yy do - gcov -o $depth/lily/out-cov/ -p $a > $a.gcov-summary + gcov -o $depth/lily/out-cov -p $a > $a.gcov-summary done $depth/scripts/auxiliar/coverage.py --uncovered *.cc > uncovered.txt diff --git a/scripts/auxiliar/build-profile.sh b/scripts/auxiliar/build-profile.sh index 072cf64520..da110c7916 100755 --- a/scripts/auxiliar/build-profile.sh +++ b/scripts/auxiliar/build-profile.sh @@ -31,11 +31,11 @@ cd $resultdir cat > long-score.ly << EOF \version "2.10.0" -foo = \new Staff \new Voice \repeat unfold 50 \relative { c4 d8[ d16( e]~ e16[ e e) f] g8 } -\score { - \new ChoirStaff << - \foo \foo \foo \foo - \foo \foo \foo \foo +foo = \new Staff \new Voice \repeat unfold 50 \relative c' { c4 d8[ d16( e]~ e16[ e e) f] g8 } +\score { + \new ChoirStaff << + \foo \foo \foo \foo + \foo \foo \foo \foo >> \midi {} @@ -62,7 +62,7 @@ for a in *.profile; do cat $a done -echo 'running gprof' +echo 'running gprof' gprof $exe > profile exit 0 @@ -75,7 +75,7 @@ for a in seq 1 3; do -I $depth/input/mutopia/W.A.Mozart/ \ $f - echo 'running gprof' + echo 'running gprof' if test -f gmon.sum ; then gprof -s $exe gmon.out gmon.sum else diff --git a/scripts/auxiliar/cg-section.sh b/scripts/auxiliar/cg-section.sh new file mode 100755 index 0000000000..272260c3c9 --- /dev/null +++ b/scripts/auxiliar/cg-section.sh @@ -0,0 +1,73 @@ +#!/bin/sh + +# Build html versions of sections of lilypond Contributors' Guide +# +# Usage: cg-section.sh SECTION +# +# where SECTION is the section to be built. +# +# For example, CG 4 would be built by +# cg-section.sh doc-work +# +# At the end of the run, the user is prompted whether or not to remove files +# +# Before first use, the following must be done: +# * Set FROMDIR, DOCDIR, TODIR, LILYPONDBOOK, and TEXI2HTML for your system +# * Create $DOCDIR +# * Copy version.itexi from somewhere in your Documentation tree +# (probably Documentation/out) to $DOCDIR +# +# Known limitations: +# +# * Doesn't use website css files +# * Bitmap images aren't loaded properly +# + +# +# Customize the file here +# +FROMDIR="$HOME/lilypond" +DOCDIR="$HOME/lilypond/tempdocs" +TODIR="$DOCDIR/contributor" +TEXI2HTML="texi2html" +REFCHECK="$FROMDIR/scripts/auxiliar/ref_check.py" + +NAME=$1 + +if test ! -d $TODIR; then + mkdir $TODIR +fi +if test ! -d $TODIR/out; then + mkdir $TODIR/out +fi + +cp $FROMDIR/Documentation/common-macros.itexi $TODIR/common-macros.itexi +cp $FROMDIR/Documentation/macros.itexi $DOCDIR/macros.itexi +cp $DOCDIR/version.itexi $TODIR/version.itexi + +if test -e $TODIR/$NAME.html; then + rm $TODIR/$NAME.html +fi + +if test -e $TODIR/out/$NAME.texi; then + rm $TODIR/out/$NAME.texi +fi + +echo Running RefCheck +python $REFCHECK + +cd $DOCDIR +echo Running texi2html +cat $DOCDIR/macros.itexi $FROMDIR/Documentation/contributor/$NAME.itexi > $TODIR/$NAME.texi +$TEXI2HTML \ + --no-validate \ + --output=$TODIR/out/$NAME.html \ + --I=$FROMDIR/Documentation \ + --I=$TODIR/out \ + $TODIR/$NAME.texi + +read -p "delete files? (y/n): " +if [ "$REPLY" = "y" ]; then + echo "deleting files" + rm -rf $TODIR +fi diff --git a/scripts/auxiliar/check_texi_refs.py b/scripts/auxiliar/check_texi_refs.py index dff7e334f1..45f1e16993 100755 --- a/scripts/auxiliar/check_texi_refs.py +++ b/scripts/auxiliar/check_texi_refs.py @@ -56,9 +56,10 @@ opt_parser.add_option ('-p', '--check-punctuation', opt_parser.add_option ("-I", '--include', help="add DIR to include path", metavar="DIR", action='append', dest='include_path', - default=[os.path.abspath (os.getcwd ())]) + default=[]) (options, files) = opt_parser.parse_args () +options.include_path.append (os.path.abspath (os.getcwd ())) class InteractionError (Exception): pass @@ -144,7 +145,7 @@ else: ref_re = re.compile \ - ('@(ref|ruser|rlearning|rprogram|rglos)(?:\\{(?P[^,\\\\\\}]+?)|\ + ('@((?:ressay|rgloss|rinternals|rlearning|rslr|rprogram|ruser|ref)|named)(?:\\{(?P[^,\\\\\\}]+?)|\ named\\{(?P[^,\\\\]+?),(?P[^,\\\\\\}]+?))\\}(?P.)', re.DOTALL) node_include_re = re.compile (r'(?m)^@(node|include)\s+(.+?)$') diff --git a/scripts/auxiliar/check_translation.py b/scripts/auxiliar/check_translation.py index ef2decd0d7..861e5eb95d 100755 --- a/scripts/auxiliar/check_translation.py +++ b/scripts/auxiliar/check_translation.py @@ -1,5 +1,20 @@ #!/usr/bin/env python +# This file is part of LilyPond, the GNU music typesetter. +# +# 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 . + import __main__ import optparse import os @@ -19,14 +34,8 @@ def dir_lang (file, lang, lang_dir_index): path_components[lang_dir_index] = lang return os.path.join (*path_components) -vc_last_revision = 'git log --pretty=format:%%H %(file_name)s | head -1' -vc_last_texidoc_revision = 'git log -Stexidoc%(preferred_language)s --pretty=format:%%H %(file_name)s | head -1' - -s = 'Translation of GIT [Cc]ommittish' -texidoc_chunk_re = re.compile (r'^((?:%+\s*' + s + \ - r'.+)?\s*(?:texidoc|doctitle)([a-zA-Z]{2,4})\s+=(?:.|\n)*?)(?=%+\s*' + \ - s + r'|\s*(?:texidoc|doctitle)(?:[a-zA-Z]{2,4})\s+=|$(?!.|\n))', re.M) - +# ugh, this is complicated; where has the good old 'git rev-parse' gone? +vc_revision_parse = 'git log -1 --pretty=format:%%H %s' def do_file (file_name, lang_codes): if verbose: @@ -42,46 +51,28 @@ def do_file (file_name, lang_codes): else: check_lang = lang if check_lang == C: - if not os.path.splitext (file_name)[1] == '.texidoc': - raise Exception ('cannot determine language for ' + file_name) - translated_contents = open (file_name).read () - if 'ISOLANG' in os.environ: - preferred_language = os.environ['ISOLANG'] - else: - raise Exception ('cannot determine language for ' + file_name) - for m in texidoc_chunk_re.finditer (translated_contents): - if m.group (2) == preferred_language: - full_translated_contents = translated_contents - translated_contents = m.group (1) - translated_contents_start = m.start () - translated_contents_end = m.end () - break - else: - return - original = file_name.replace ('texidocs' + os.path.sep, 'lsr' + os.path.sep, 1) - original = original.replace ('.texidoc', '.ly', 1) - - # URG dirty .texidoc files manipulation in a dirty way - if touch_committishes and buildlib.check_translated_doc (original, - file_name, - translated_contents, - color=use_colors and not update_mode)[1]: - (estimated_revision, error) = buildlib.read_pipe (vc_last_texidoc_revision % vars ()) - if error: - sys.stderr.write ('warning: %s: %s' % (file_name, error)) - estimated_revision = estimated_revision.strip () - translated_contents = re.sub (r'(?m)^%+\s*Translation of GIT committish:.*\n', '', translated_contents) - f = open (file_name, 'w') - f.write (full_translated_contents[:translated_contents_start]) - f.write ('%% Translation of GIT committish: ' + estimated_revision + '\n') - f.write (translated_contents) - f.write (full_translated_contents[translated_contents_end:]) - return - + raise Exception ('cannot determine language for ' + file_name) else: - original = dir_lang (file_name, '', lang_dir_index) + if os.path.splitext (file_name)[1] == '.texidoc': + original = file_name.replace (os.path.join (check_lang, 'texidocs'), 'snippets', 1) + original = original.replace ('.texidoc', '.ly', 1) + else: + original = dir_lang (file_name, '', lang_dir_index) translated_contents = open (file_name).read () + ## experimental feature + if not touch_committishes in (current_revision, 'HEAD'): + (changes_in_original, error) = \ + buildlib.check_translated_doc (original, + file_name, + translated_contents, + upper_revision=touch_committishes) + if not error and not changes_in_original in ('', '\n'): + translated_contents = \ + buildlib.revision_re.sub ('GIT committish: ' + current_revision, + translated_contents, 1) + f = open (file_name, 'w').write (translated_contents) + return (diff_string, error) \ = buildlib.check_translated_doc (original, file_name, @@ -107,20 +98,21 @@ def do_file (file_name, lang_codes): def usage (): sys.stdout.write (r''' Usage: -check-translation [--language=LANG] [--verbose] [--update] FILE... - -This script is licensed under the GNU GPL. +check-translation [--language=LANG] [--verbose] [--update] [-t COMMIT] FILE... ''') def do_options (): global lang, verbose, update_mode, touch_committishes, use_colors - p = optparse.OptionParser (usage="check-translation [--language=LANG] [--verbose] FILE...", - description="This script is licensed under the GNU GPL.") + p = optparse.OptionParser (usage=\ +"check-translation [--language=LANG] [--verbose] [--update] [-t COMMIT] FILE...", + description="") p.add_option ("--language", action='store', default=C, - dest="language") + dest="language", + metavar='LL', + help="assume document language ISO 639 code LL by default") p.add_option ("--no-color", action='store_false', default=True, @@ -132,10 +124,12 @@ def do_options (): dest="verbose", help="print details, including executed shell commands") p.add_option ('-t', - action='store_true', - default=False, + action='store', + default='HEAD', dest="touch_committishes", - help=optparse.SUPPRESS_HELP) + metavar='COMMIT', + help='[EXPERIMENTAL] update committishes of all files that were up to \ +date at commit COMMIT') p.add_option ('-u', "--update", action='store_true', default=False, @@ -152,15 +146,20 @@ def do_options (): return files def main (): - global update_mode, text_editor + global update_mode, text_editor, touch_committishes, current_revision files = do_options () if 'EDITOR' in os.environ: text_editor = os.environ['EDITOR'] else: update_mode = False - buildlib.verbose = verbose + (parsed_revision, error) = buildlib.read_pipe (vc_revision_parse % touch_committishes) + if error: + sys.stderr.write ('warning: %s' % error) + else: + touch_committishes = parsed_revision.strip () + current_revision = buildlib.read_pipe (vc_revision_parse % 'HEAD')[0] for i in files: do_file (i, langdefs.LANGDICT.keys ()) diff --git a/scripts/auxiliar/doc-section.sh b/scripts/auxiliar/doc-section.sh new file mode 100755 index 0000000000..58a272e58f --- /dev/null +++ b/scripts/auxiliar/doc-section.sh @@ -0,0 +1,97 @@ +#!/bin/sh + +# Build html versions of sections of lilypond documentation +# +# Usage: doc-section.sh MANUAL SECTION +# +# where MANUAL is the manual and SECTION is the section to be built. +# +# For example, NR 1.2 would be built by +# doc-section.sh notation rhythms +# +# and LM 1 would be built by +# doc-section.sh learning tutorial +# +# At the end of the run, the user is prompted whether or not to remove files +# +# Before first use, the following must be done: +# * Set FROMDIR, DOCDIR, TODIR, LILYPONDBOOK, and TEXI2HTML for your system +# * Create $DOCDIR +# * Copy version.itexi from somewhere in your Documentation tree +# (probably Documentation/out) to $DOCDIR +# +# Known limitations: +# +# * Doesn't use website css files +# * Bitmap images aren't loaded properly +# * Won't build Contributors' Guide; see scripts/auxiliar/cg-section.sh +# + +# +# Customize the file here +# +FROMDIR="$HOME/lilypond-git" +DOCDIR="$HOME/lilypond-git/tempdocs" +LILYPONDBOOK="lilypond-book" +TEXI2HTML="texi2html" +REFCHECK="$FROMDIR/scripts/auxiliar/ref_check.py" + +DIRECTORY=$1 +NAME=$2 +TODIR=$DOCDIR/$NAME + +if test ! -d $TODIR; then + mkdir $TODIR +fi +if test ! -d $TODIR/out; then + mkdir $TODIR/out +fi + +cp $FROMDIR/Documentation/common-macros.itexi $TODIR/common-macros.itexi +cp $FROMDIR/Documentation/macros.itexi $DOCDIR/macros.itexi +cp $DOCDIR/version.itexi $TODIR/version.itexi + +if test -e $TODIR/$NAME.html; then + rm $TODIR/$NAME.html +fi + +if test -e $TODIR/out/$NAME.texi; then + rm $TODIR/out/$NAME.texi +fi + +echo "Running lilypond-book" +$LILYPONDBOOK \ + -f texi-html \ + -I $FROMDIR/Documentation/snippets \ + -I $FROMDIR/Documentation/snippets/new \ + -I $FROMDIR/input/manual \ + -I $FROMDIR/Documentation \ + -I $FROMDIR/Documentation/included \ + -I $FROMDIR/Documentation/pictures \ + -o $TODIR/out \ + $FROMDIR/Documentation/$DIRECTORY/$NAME.itely +BOOKRC=$? +if [ $BOOKRC != 0 ]; then + echo "Lilypond-book returned code $BOOKRC" + exit $BOOKRC +fi + +echo Running RefCheck +python $REFCHECK + +cd $DOCDIR +if test -f $TODIR/out/$NAME.texi; then + echo Running texi2html + cat $DOCDIR/macros.itexi $TODIR/out/$NAME.texi > $TODIR/$NAME.texi + $TEXI2HTML \ + --no-validate \ + --output=$TODIR/out/$NAME.html \ + --I=$TODIR/out \ + $TODIR/$NAME.texi +fi + +read -p "delete files? (y/n): " +if [ "$REPLY" = "y" ]; then + echo "deleting files" + rm -rf $TODIR +fi diff --git a/scripts/auxiliar/fixcc.py b/scripts/auxiliar/fixcc.py index 34e9a89e55..845e97672f 100755 --- a/scripts/auxiliar/fixcc.py +++ b/scripts/auxiliar/fixcc.py @@ -2,6 +2,21 @@ # fixcc -- nitpick lily's c++ code +# This file is part of LilyPond, the GNU music typesetter. +# +# 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 . + # TODO # * maintainable rules: regexp's using whitespace (?x) and match names # ) @@ -31,9 +46,9 @@ indent_p = 0 rules = { GLOBAL_CXX: [ - # delete gratuitous block - ('''\n( |\t)\s*{\n\s*(.*?)(?![{}]|\b(do|for|else|if|switch|while)\b);\n\s*}''', - '\n\\2;'), + # 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;'), ], CXX: [ @@ -41,9 +56,9 @@ rules = { ('([^\( \]])[ \t]*\(', '\\1 ('), # space after comma ("\([^'],\)[ \t]*", '\1 '), - # delete gratuitous block - ('''\n( |\t)\s*{\n\s*(.*?)(?![{}]|\b(do|for|else|if|switch|while)\b);\n\s*}''', - '\n\\2;'), + # 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 '), # delete inline double spaces @@ -76,17 +91,17 @@ rules = { # space around +/-; exponent ('([\w\)\]])(\+|-)([_A-Za-z\(])', '\\1 \\2 \\3'), ('([_\dA-Za-df-z\)\]])(\+|-)([\w\(])', '\\1 \\2 \\3'), - # trailing operator - (' (::|&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|>|\+|-|=|/|:|&XXX|\||\*XXX)[ \t]*\n([ \t]*)', '\n\\2\\1 '), + # 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|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+|[,])[ \*&],*)+)>) *(\*|&) *', '\\1 \\5'), + ('(( *((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'), + ('(return|=|&&|\|\|) (\*|&|-|!) ([\w\(])', '\\1 \\2\\3'), # space after `operator' ('(\Woperator) *([^\w\s])', '\\1 \\2'), # dangling brace close @@ -100,10 +115,10 @@ rules = { ('\n[ \t]*\)', ')'), # dangling comma ('\n[ \t]*,', ','), - # dangling semicolon - ('\n[ \t]*;', ';'), - # brace open - ('(\w)[ \t]*([^\s]*){([ \t]*\n)', '\\1\\2\n{\n'), + # 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 @@ -128,7 +143,7 @@ rules = { ('(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|template|typedef|\w+::\w+|[A-Z]\w*)[ \t]*<[ \t]*(( *(bool|char|const|int|unsigned|void|size_t|class[ \t]+\w*|[A-Z]\w*)( *[\*&]?,|[\*&])*)+)[ \t]?(| [\*&])[ \t]*>', '\\1<\\2\\6>'), + ('(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;'), @@ -435,7 +450,6 @@ Typical use with LilyPond: fixcc $(find flower kpath-guile lily -name '*cc' -o -name '*hh' | grep -v /out) -This script is licensed under the GNU GPL ''') def do_options (): @@ -532,7 +546,7 @@ typedef struct _t_ligature typedef std::map < AFM_Ligature const *, int > Bar; /** - (c) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys */ /* || diff --git a/scripts/auxiliar/lily-git.tcl b/scripts/auxiliar/lily-git.tcl new file mode 100755 index 0000000000..6f16791313 --- /dev/null +++ b/scripts/auxiliar/lily-git.tcl @@ -0,0 +1,440 @@ +#!/usr/bin/wish + +# GUI interface for common LilyPond git repository commands +# Copyright 2009--2011 by Johannes Schindelin and Carl Sorensen +# + +set version 0.64 + +# set to 1 to set up for translation, to 0 for other +set translator 0 + +# location of lilypond git +set lily_dir $env(HOME)/lilypond-git + +if {$translator == 1} { + set windowTitle \ + "LilyPond Translator's Git Interface version $version" + set updateButtonText "1. Update translation" + set initializeButtonText "1. Get translation" + set originHead "lilypond/translation" + set rebase 0 +} else { + set windowTitle \ + "LilyPond Contributor's Git Interface version $version" + set updateButtonText "1. Update source" + set initializeButtonText "1. Get source" + set originHead "master" + set rebase 1 +} +package require Tk + +## Submits the user data collected using the git config command + +proc submituserdata {} { + exec git config --global user.name "$::username" + exec git config --global user.email "$::useremail" + destroy .b + return 0 +} + +## Request name and email from user + +proc requestuserdata {} { + toplevel .b + grab .b + wm geometry .b -300-300 + wm title .b "Contributor details" + grid [frame .b.c ] -column 0 -row 0 -sticky nwes + grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1 + + grid [entry .b.c.username -width 20 -textvariable username] -column 2 -row 2 -sticky we + grid [entry .b.c.useremail -width 20 -textvariable useremail] -column 2 -row 3 -sticky we + grid [button .b.c.submituserdata -text "Submit" -command submituserdata] -column 2 -row 4 + + grid [label .b.c.explbl -text "Please enter your name and email for future commits:"] -column 1 -row 1 -columnspan 3 -sticky we + grid [label .b.c.nmlbl -text "Name:"] -column 1 -row 2 -sticky w + grid [label .b.c.emlbl -text "Email:"] -column 1 -row 3 -sticky w + + foreach w [winfo children .b.c] {grid configure $w -padx 5 -pady 5} + focus .b.c.username + bind .b {submituserdata} +} + +## Checks the user's global .gitconfig for name and email and executes requestuserdata if either is not found + +if {![file exists "$env(HOME)/.gitconfig"]} { + set fileholder [open "$env(HOME)/.gitconfig" a+] +} else { + set fileholder [open "$env(HOME)/.gitconfig" r] +} + +set usercheck [split [read $fileholder] "\n"] +close $fileholder +if {![regexp "name" $usercheck] || ![regexp "email" $usercheck]} then { + requestuserdata + tkwait window .b +} + +## Entry limit routine from jeff at hobbs org, downloaded from +## http://www.purl.org/net/hobbs/tcl/tclet/entrylimit.html + +## For those who aren't using Tk4 with these, make a bell noop: +if [string match {} [info commands bell]] { proc bell args {} } + +proc forceLen {len name el op} { + global $name ${name}_len + if [string comp $el {}] { + set old ${name}_len\($el) + set name $name\($el) + } else { + set old ${name}_len + } + if {[string length [set $name]] > $len} { + set $name [set $old] + bell; + return + } + set $old [set $name] +} + +## Here is a wish example to use the routines. Remember that with +## write traces, a valid value must be set for each variable both +## before AND after the trace is established. + +## The order must be: +## 1) variable init +## 1) textvariable specification +## 3) set trace +## 4) variable reinit + +set commit_header {} +trace variable commit_header w {forceLen 50} +set commit_header {} + + +## End of entry limit code + + +# Helper functions + +if {[file exists $lily_dir]} { + cd $lily_dir +} + +set abort_dir "./aborted_edits" + +proc write_to_output {s} { + .output.text insert insert $s + .output.text see end +} + +proc write_file_to_output {f} { + if {[eof $f]} { + global git_command + fconfigure $f -blocking true + if {[catch {close $f} err]} { + tk_messageBox -type ok -message \ + "Command returned an error: $err\n\nCheck output text for details" + } + unset git_command + } else { + write_to_output [read $f 24] + } +} + +proc git {args} { + global lily_dir git_command + set git_command [linsert $args 0 "|git" "--git-dir=$lily_dir/.git"] + set git_command "$git_command 2>@1" + .output.text insert end "$git_command\n" + set git [open $git_command r] + fconfigure $git -blocking false + fileevent $git readable [list write_file_to_output $git] + vwait git_command +} + +proc config {args} { + global lily_dir + set p [open [linsert $args 0 "|git" --git-dir=$lily_dir/.git config] r] + set result [regsub "\n\$" [read $p] ""] + if {[catch {close $p} err]} { + tk_messageBox -type ok -message "config failed: $err" + } + return $result +} + +proc config_quiet {args} { + global lily_dir + set p [open [linsert $args 0 "|git" --git-dir=$lily_dir/.git config] r] + set result [regsub "\n\$" [read $p] ""] + if {[catch {close $p} err]} { + set result "" + } + return $result +} + +proc update_lilypond_rebase {} { + update_lilypond 1 +} + +proc commit {} { + global commit_message + global commit_canceled + set commit_canceled 0 + get_commit_message + tkwait visibility .commitMessage + tkwait window .commitMessage + if {$commit_canceled != 1} { + if {$commit_message == ""} { + tk_messageBox -message "You must enter a commit message!" \ + -type ok -icon error + } else { + git commit -a -m $commit_message + git rebase --whitespace=fix HEAD^ + set commit_message "" + } + } +} + +proc commit_amend {} { + git commit -a --amend -C HEAD + git rebase --whitespace=fix HEAD^ +} + +proc update_lilypond_norebase {} { + update_lilypond 0 +} + +proc update_lilypond_with_rebase {} { + global rebase + update_lilypond $rebase +} + +proc update_lilypond {rebase} { + global lily_dir + global originHead + global translator + . config -cursor watch + if {![file exists $lily_dir]} { + write_to_output "Cloning LilyPond (this can take some time) ...\n" + file mkdir $lily_dir + cd $lily_dir + git init + git config core.bare false + git remote add -t $originHead \ + origin git://git.sv.gnu.org/lilypond.git + git fetch + git reset --hard origin/$originHead + git config branch.$originHead.remote origin + git config branch.$originHead.merge refs/heads/$originHead + .buttons.commitFrame.commit configure -state normal + .buttons.commitFrame.amend configure -state normal + .buttons.update configure -text buttonUpdateText + .buttons.patch configure -state normal + .buttons.panic configure -state normal + toggle_rebase + } else { + write_to_output "Updating LilyPond...\n" + git fetch origin + if {$rebase} { + git rebase origin/$originHead + } else { + git merge origin/$originHead + } + } + write_to_output "Done.\n" + . config -cursor "" +} + +proc patch_from_origin {} { + global rebase + make_patch_from_origin $rebase + if {![llength [glob -nocomplain 0*.patch]]} { + tk_messageBox -type ok -message \ + "No patches created; did you make a local commit?" + } +} + +proc make_patch_from_origin {rebase} { + global lily_dir + global originHead + . config -cursor watch + update_lilypond $rebase + write_to_output "Creating patch...\n" + git format-patch origin/$originHead + write_to_output "Done.\n" + . config -cursor "" +} + +proc abort_changes {} { + global abort_dir + global originHead + set answer [tk_messageBox -type okcancel \ + -message "This will copy all changed files to $abort_dir and reset the repository." \ + -default cancel] + switch -- $answer { + ok { + write_to_output "abort_dir: $abort_dir \n" + if {![file exists $abort_dir]} { + set return_code [exec mkdir $abort_dir] + } + set return_code [catch {exec git diff origin/$originHead} gitdiff] + set return_code [regexp {diff --git a/(\S*)} $gitdiff match modified_file] + while {$return_code != 0} { + write_to_output "Copying $modified_file to $abort_dir.\n" + set return_code [catch {exec cp $modified_file $abort_dir} result] + set return_code [regsub {diff --git a/(\S*)} $gitdiff "" gitdiff] + set return_code [regexp {diff --git a/(\S*)} $gitdiff match modified_file] + } + set return_code [git reset --hard origin/$originHead] + write_to_output "Repository reset. \n" + } + } +} + +proc toggle_rebase {} { + global rebase + global lily_dir + global originHead + global updateButtonText + global initializeButtonText + if {[file exists $lily_dir]} { + config --bool branch.$originHead.rebase $rebase + .buttons.update configure -text $updateButtonText + } else { + .buttons.update configure -text $initializeButtonText + } +} + +proc clear_rebase {} { + global rebase + set rebase 0 + toggle_rebase +} + +proc set_rebase {} { + global rebase + set rebase 1 + toggle_rebase +} + +proc commitMessageOK {} { + global commit_message + global commit_header + set commit_body [.commitMessage.bottomFrame.commit_body get 1.0 end] + set commit_message "$commit_header\n\n$commit_body" + destroy .commitMessage +} + +proc commitMessageCancel {} { + global commit_message + global commit_canceled + set commit_message "" + set commit_canceled 1 + destroy .commitMessage +} + + +# Commit message input window +proc get_commit_message {} { + global commit_header + set commit_header "" + toplevel .commitMessage + frame .commitMessage.topFrame + label .commitMessage.topFrame.label \ + -text "Enter commit message header:\n(50 chars max = width of box)" + entry .commitMessage.topFrame.commit_header \ + -width 50 -relief solid -border 2 -textvariable commit_header + pack .commitMessage.topFrame.label -side left + pack .commitMessage.topFrame.commit_header -side left + + frame .commitMessage.bottomFrame + text .commitMessage.bottomFrame.commit_body \ + -width 75 -height 10 -relief solid -border 2 -wrap none + + frame .commitMessage.bottomFrame.leftFrame + label .commitMessage.bottomFrame.leftFrame.label \ + -text "Enter commit message body:\n(No limit -- Full description)" + button .commitMessage.bottomFrame.leftFrame.ok \ + -text OK -default active -command commitMessageOK + button .commitMessage.bottomFrame.leftFrame.cancel -text Cancel -default active \ + -command commitMessageCancel + wm withdraw .commitMessage + wm title .commitMessage "Git Commit Message" + + pack .commitMessage.bottomFrame.leftFrame.label + pack .commitMessage.bottomFrame.leftFrame.ok + pack .commitMessage.bottomFrame.leftFrame.cancel + + pack .commitMessage.bottomFrame.leftFrame -side left + pack .commitMessage.bottomFrame.commit_body -side left + + pack .commitMessage.topFrame + pack .commitMessage.bottomFrame + + wm transient .commitMessage . + wm deiconify .commitMessage +} + + +# GUI + +wm title . $windowTitle + +# Buttons + +panedwindow .buttons + +frame .buttons.commitFrame +button .buttons.commitFrame.commit -text "2a. New local commit" -command commit +button .buttons.commitFrame.amend -text "2b. Amend previous commit" -command commit_amend +pack .buttons.commitFrame.commit -fill x +pack .buttons.commitFrame.amend -fill x + +button .buttons.update -text $updateButtonText \ + -command update_lilypond_with_rebase +button .buttons.patch -text "3. Make patch set" \ + -command patch_from_origin +toggle_rebase +button .buttons.panic -text "Abort changes -- Reset to origin" \ + -command abort_changes -fg Blue -bg Red +label .buttons.spacer -text " " +if {![file exists $lily_dir]} { + .buttons.update configure \ + -text $initializeButtonText + .buttons.commitFrame.commit configure -state disabled + .buttons.commitFrame.amend configure -state disabled + .buttons.patch configure -state disabled + .buttons.panic configure -state disabled +} + +# Operating buttons + +pack .buttons.update -side left +pack .buttons.commitFrame -side left +pack .buttons.patch -side left +pack .buttons.spacer -side left +pack .buttons.panic -side right + + +# Output text box + +panedwindow .output +label .output.label -text "Command output:" +text .output.text -width 80 -height 15 \ + -xscrollcommand [list .output.horizontal set] \ + -yscrollcommand [list .output.vertical set] \ + -relief solid -border 2 +scrollbar .output.horizontal -orient h -command [list .output.text xview] +scrollbar .output.vertical -orient v -command [list .output.text yview] +pack .output.label -side left +pack .output.horizontal -side bottom -fill x +pack .output.vertical -side right -fill y +pack .output.text -expand true -anchor nw -fill both + +pack .buttons +pack .output + +#grid .buttons -row 2 -column 1 +#grid .output -row 3 -column 1 -sticky "w" diff --git a/scripts/auxiliar/makelsr.py b/scripts/auxiliar/makelsr.py index cb0619f6de..adf8681638 100755 --- a/scripts/auxiliar/makelsr.py +++ b/scripts/auxiliar/makelsr.py @@ -5,22 +5,37 @@ import os import glob import re -USAGE = ''' Usage: makelsr.py LSR_SNIPPETS_DIR -This script must be run from top of the source tree; -it updates snippets input/lsr with snippets in input/new or LSR_SNIPPETS_DIR. -''' +sys.path.append ('python') +import langdefs -LY_HEADER_LSR = '''%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it -%% This file is in the public domain. -''' +DEST = os.path.join ('Documentation', 'snippets') +NEW_LYS = os.path.join ('Documentation', 'snippets', 'new') +TEXIDOCS = [os.path.join ('Documentation', language_code, 'texidocs') + for language_code in langdefs.LANGDICT] -LY_HEADER_NEW = '''%% Do not edit this file; it is auto-generated from input/new +USAGE = ''' Usage: makelsr.py [LSR_SNIPPETS_DIR] +This script must be run from top of the source tree; +it updates snippets %(DEST)s with snippets +from %(NEW_LYS)s or LSR_SNIPPETS_DIR. +If a snippet is present in both directories, the one +from %(NEW_LYS)s is preferred. +''' % vars () + +LY_HEADER_LSR = '''%% 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. ''' -DEST = os.path.join ('input', 'lsr') -NEW_LYS = os.path.join ('input', 'new') -TEXIDOCS = os.path.join ('input', 'texidocs') +LY_HEADER_NEW = '''%% DO NOT EDIT this file manually; it is automatically +%% generated from %s +%% Make any changes in Documentation/snippets/new/ +%% and then run scripts/auxiliar/makelsr.py +%% +%% This file is in the public domain. +''' % NEW_LYS TAGS = [] # NR 1 @@ -38,16 +53,27 @@ TAGS.extend (['contexts-and-engravers', 'tweaks-and-overrides', 'paper-and-layout', 'breaks', 'spacing', 'midi', 'titles', 'template']) def exit_with_usage (n=0): - sys.stderr.write (USAGE) - sys.exit (n) - -try: - in_dir = sys.argv[1] -except: - exit_with_usage (2) - -if not (os.path.isdir (DEST) and os.path.isdir (NEW_LYS)): - exit_with_usage (3) + sys.stderr.write (USAGE) + sys.exit (n) + +if len (sys.argv) >= 2: + in_dir = sys.argv[1] + if len (sys.argv) >= 3: + exit_with_usage (2) + if not (os.path.isdir (DEST) and os.path.isdir (NEW_LYS)): + exit_with_usage (3) +else: + in_dir = '' + +# which convert-ly to use +if os.path.isfile("out/bin/convert-ly"): + conv_path='out/bin/' +elif os.path.isfile("build/out/bin/convert-ly"): + conv_path='build/out/bin/' +else: + conv_path='' +convert_ly=conv_path+'convert-ly' +print 'using '+convert_ly unsafe = [] unconverted = [] @@ -56,121 +82,218 @@ notags_files = [] # mark the section that will be printed verbatim by lilypond-book end_header_re = re.compile ('(\\header {.+?doctitle = ".+?})\n', re.M | re.S) +doctitle_re = re.compile (r'(doctitle[a-zA-Z_]{0,6}\s*=\s*")((?:\\"|[^"\n])*)"') +texinfo_q_re = re.compile (r'@q{(.*?)}') +texinfo_qq_re = re.compile (r'@qq{(.*?)}') +def doctitle_sub (title_match): + # Comma forbidden in Texinfo node name + title = title_match.group (2).replace (',', '') + title = texinfo_q_re.sub (r"`\1'", title) + title = texinfo_qq_re.sub (r'\"\1\"', title) + return title_match.group (1) + title + '"' + def mark_verbatim_section (ly_code): - return end_header_re.sub ('\\1 % begin verbatim\n\n', ly_code, 1) + return end_header_re.sub ('\\1 % begin verbatim\n\n', ly_code, 1) # '% LSR' comments are to be stripped lsr_comment_re = re.compile (r'\s*%+\s*LSR.*') - begin_header_re = re.compile (r'\\header\s*{', re.M) +ly_new_version_re = re.compile (r'\\version\s*"(.+?)"') +strip_white_spaces_re = re.compile (r'[ \t]+(?=\n)') # add tags to ly files from LSR def add_tags (ly_code, tags): - return begin_header_re.sub ('\\g<0>\n lsrtags = "' + tags + '"\n', ly_code, 1) + return begin_header_re.sub ('\\g<0>\n lsrtags = "' + tags + '"\n', + ly_code, 1) + +# for snippets from input/new, add message for earliest working version +def add_version (ly_code): + return '''%% Note: this file works from version ''' + \ + ly_new_version_re.search (ly_code).group (1) + '\n' + +s = 'Translation of GIT [Cc]ommittish' +texidoc_chunk_re = re.compile (r'^(?:%+\s*' + s + \ + r'.+)?\s*(?:texidoc|doctitle)([a-zA-Z]{2,4})\s+=(?:.|\n)*?(?=%+\s*' + \ + s + r'|\n\} % begin verbatim|\n (?:doctitle|texidoc|lsrtags) |$(?!.|\n))', re.M) + +def update_translated_texidoc (m, snippet_path, visited_languages): + base = os.path.splitext (os.path.basename (snippet_path))[0] + language_code = m.group (1) + visited_languages.append (language_code) + texidoc_path = os.path.join ('Documentation', language_code, + 'texidocs', base + '.texidoc') + if os.path.isfile (texidoc_path): + return open (texidoc_path).read () + else: + return m.group (0) + +def escape_backslashes_in_header(snippet): + # ASSUME: the \header exists. + header_char_number_start = snippet.find('\header {') + header_char_number_end = snippet.find('} % begin verbatim') + + header = snippet[header_char_number_start:header_char_number_end] + # two levels of escaping happening here -- 4\ means 1\ + # and the 10\ means two \ backslashes (that's 8\ ), and + # 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:]) + return escaped_snippet def copy_ly (srcdir, name, tags): - global unsafe - global unconverted - dest = os.path.join (DEST, name) - tags = ', '.join (tags) - s = open (os.path.join (srcdir, name)).read () - - texidoc_translations_path = os.path.join (TEXIDOCS, - os.path.splitext (name)[0] + '.texidoc') - if os.path.exists (texidoc_translations_path): - texidoc_translations = open (texidoc_translations_path).read () - # Since we want to insert the translations verbatim using a - # regexp, \\ is understood as ONE escaped backslash. So we have - # to escape those backslashes once more... - texidoc_translations = texidoc_translations.replace ('\\', '\\\\') - s = begin_header_re.sub ('\\g<0>\n' + texidoc_translations, s, 1) - - if in_dir in srcdir: - s = LY_HEADER_LSR + add_tags (s, tags) - else: - s = LY_HEADER_NEW + s - - s = mark_verbatim_section (s) - s = lsr_comment_re.sub ('', s) - open (dest, 'w').write (s) - - e = os.system ("convert-ly -e '%s'" % dest) - if e: - unconverted.append (dest) - if os.path.exists (dest + '~'): - os.remove (dest + '~') - # -V seems to make unsafe snippets fail nicer/sooner - e = os.system ("lilypond -V -dno-print-pages -dsafe -o /tmp/lsrtest '%s'" % dest) - if e: - unsafe.append (dest) + global unsafe + global unconverted + dest = os.path.join (DEST, name) + tags = ', '.join (tags) + s = open (os.path.join (srcdir, name)).read () + + for path in TEXIDOCS: + texidoc_translation_path = \ + os.path.join (path, os.path.splitext (name)[0] + '.texidoc') + if os.path.exists (texidoc_translation_path): + texidoc_translation = open (texidoc_translation_path).read () + # Since we want to insert the translations verbatim using a + # regexp, \\ is understood as ONE escaped backslash. So we have + # to escape those backslashes once more... + texidoc_translation = texidoc_translation.replace ('\\', '\\\\') + s = begin_header_re.sub ('\\g<0>\n' + texidoc_translation, s, 1) + + s = doctitle_re.sub (doctitle_sub, s) + if in_dir and in_dir in srcdir: + s = LY_HEADER_LSR + add_tags (s, tags) + else: + s = LY_HEADER_NEW + add_version (s) + s + + s = mark_verbatim_section (s) + s = lsr_comment_re.sub ('', s) + s = strip_white_spaces_re.sub ('', s) + s = escape_backslashes_in_header (s) + open (dest, 'w').write (s) + + e = os.system (convert_ly+(" -d -e '%s'" % dest)) + if e: + unconverted.append (dest) + if os.path.exists (dest + '~'): + os.remove (dest + '~') + # no need to check snippets from input/new + if in_dir and in_dir in srcdir: + # -V seems to make unsafe snippets fail nicer/sooner + e = os.system ("lilypond -V -dno-print-pages -dsafe -o /tmp/lsrtest '%s'" % dest) + if e: + unsafe.append (dest) def read_source_with_dirs (src): - s = {} - l = {} - for tag in TAGS: - srcdir = os.path.join (src, tag) - l[tag] = set (map (os.path.basename, glob.glob (os.path.join (srcdir, '*.ly')))) - for f in l[tag]: - if f in s: - s[f][1].append (tag) - else: - s[f] = (srcdir, [tag]) - return s, l + s = {} + l = {} + for tag in TAGS: + srcdir = os.path.join (src, tag) + l[tag] = set (map (os.path.basename, + glob.glob (os.path.join (srcdir, '*.ly')))) + for f in l[tag]: + if f in s: + s[f][1].append (tag) + else: + s[f] = (srcdir, [tag]) + return s, l tags_re = re.compile ('lsrtags\\s*=\\s*"(.+?)"') def read_source (src): - s = {} - l = dict ([(tag, set()) for tag in TAGS]) - for f in glob.glob (os.path.join (src, '*.ly')): - basename = os.path.basename (f) - m = tags_re.search (open (f, 'r').read ()) - if m: - file_tags = [tag.strip() for tag in m.group (1). split(',')] - s[basename] = (src, file_tags) - [l[tag].add (basename) for tag in file_tags if tag in TAGS] - else: - notags_files.append (f) - return s, l - - -def dump_file_list (file, list): - f = open (file, 'w') - f.write ('\n'.join (list) + '\n') - -## clean out existing lys and generated files -map (os.remove, glob.glob (os.path.join (DEST, '*.ly')) + - glob.glob (os.path.join (DEST, '*.snippet-list'))) - -# read LSR source where tags are defined by subdirs -snippets, tag_lists = read_source_with_dirs (in_dir) -# read input/new where tags are directly -s, l = read_source (NEW_LYS) -snippets.update (s) -for t in TAGS: - tag_lists[t].update (l[t]) + s = {} + l = dict ([(tag, set()) for tag in TAGS]) + for f in glob.glob (os.path.join (src, '*.ly')): + basename = os.path.basename (f) + m = tags_re.search (open (f, 'r').read ()) + if m: + file_tags = [tag.strip() for tag in m.group (1). split(',')] + s[basename] = (src, file_tags) + [l[tag].add (basename) for tag in file_tags if tag in TAGS] + else: + notags_files.append (f) + return s, l + + +def dump_file_list (file, file_list, update=False): + if update: + old_list = set (open (file, 'r').read ().splitlines ()) + old_list.update (file_list) + new_list = list (old_list) + else: + new_list = file_list + f = open (file, 'w') + f.write ('\n'.join (sorted (new_list)) + '\n') + +def update_ly_in_place (snippet_path): + visited_languages = [] + contents = open (snippet_path).read () + contents = texidoc_chunk_re.sub \ + (lambda m: update_translated_texidoc (m, + snippet_path, + visited_languages), + contents) + need_line_break_workaround = False + for language_code in langdefs.LANGDICT: + if not language_code in visited_languages: + base = os.path.splitext (os.path.basename (snippet_path))[0] + texidoc_path = os.path.join ('Documentation', language_code, + 'texidocs', base + '.texidoc') + if os.path.isfile (texidoc_path): + texidoc_translation = open (texidoc_path).read () + texidoc_translation = texidoc_translation.replace ('\\', '\\\\') + contents = begin_header_re.sub ('\\g<0>\n' + texidoc_translation, contents, 1) + else: + need_line_break_workaround = True + contents = doctitle_re.sub (doctitle_sub, contents) + contents = escape_backslashes_in_header (contents) + + # workaround for a bug in the regex's that I'm not smart + # enough to figure out. -gp + if need_line_break_workaround: + first_translated = contents.find('%% Translation of') + keep = contents[:first_translated+5] + contents = keep + contents[first_translated+5:].replace('%% Translation of', '\n%% Translation of') + + open (snippet_path, 'w').write (contents) + +if in_dir: + ## clean out existing lys and generated files + map (os.remove, glob.glob (os.path.join (DEST, '*.ly')) + + glob.glob (os.path.join (DEST, '*.snippet-list'))) + + # read LSR source where tags are defined by subdirs + snippets, tag_lists = read_source_with_dirs (in_dir) + + # read input/new where tags are directly defined + s, l = read_source (NEW_LYS) + snippets.update (s) + for t in TAGS: + tag_lists[t].update (l[t]) +else: + snippets, tag_lists = read_source (NEW_LYS) + ## update texidocs of snippets that don't come from NEW_LYS + for snippet_path in glob.glob (os.path.join (DEST, '*.ly')): + if not os.path.basename (snippet_path) in snippets: + update_ly_in_place (snippet_path) for (name, (srcdir, tags)) in snippets.items (): - copy_ly (srcdir, name, tags) - + copy_ly (srcdir, name, tags) for (tag, file_set) in tag_lists.items (): - dump_file_list (os.path.join (DEST, tag + '.snippet-list'), sorted(file_set)) - + dump_file_list (os.path.join (DEST, tag + '.snippet-list'), + file_set, update=not(in_dir)) if unconverted: - sys.stderr.write ('These files could not be converted successfully by convert-ly:\n') - sys.stderr.write ('\n'.join (unconverted) + '\n\n') - + sys.stderr.write ('These files could not be converted successfully by convert-ly:\n') + sys.stderr.write ('\n'.join (unconverted) + '\n\n') if notags_files: - sys.stderr.write ('No tags could be found in these files:\n') - sys.stderr.write ('\n'.join (notags_files) + '\n\n') - -dump_file_list ('lsr-unsafe.txt', unsafe) -sys.stderr.write (''' + sys.stderr.write ('No tags could be found in these files:\n') + sys.stderr.write ('\n'.join (notags_files) + '\n\n') +if unsafe: + dump_file_list ('lsr-unsafe.txt', unsafe) + sys.stderr.write (''' Unsafe files printed in lsr-unsafe.txt: CHECK MANUALLY! - git add input/lsr/*.ly - xargs git-diff HEAD < lsr-unsafe.txt - -''') + git add %s/*.ly + xargs git diff HEAD < lsr-unsafe.txt +''' % DEST) diff --git a/scripts/auxiliar/node-menuify.py b/scripts/auxiliar/node-menuify.py new file mode 100755 index 0000000000..2c10834539 --- /dev/null +++ b/scripts/auxiliar/node-menuify.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +import sys + +try: + infile = sys.argv[1] + lines = open(infile).readlines() +except: + print "ERROR: need a filename" + sys.exit(1) + +nodes = [] + +# Generate TOC +for i in range(len(lines)): + line = lines[i] + if line.startswith('@node '): + node_name = line[6:].rstrip() + # ASSUME: the last line of the file is not @node + section_line = lines[i+1] + if (section_line.startswith('@chapter ') or + section_line.startswith('@unnumbered ') or + section_line.startswith('@appendix ')): + section_type = 1 + elif (section_line.startswith('@section ') or + section_line.startswith('@unnumberedsec ') or + section_line.startswith('@appendixsec ')): + section_type = 2 + elif (section_line.startswith('@subsection ') or + section_line.startswith('@unnumberedsubsec ') or + section_line.startswith('@appendixsubsec ')): + section_type = 3 + elif (section_line.startswith('@subsubsection ') or + section_line.startswith('@unnumberedsubsubsec ') or + section_line.startswith('@appendixsubsubsec ')): + section_type = 4 + else: + print "ERROR: unknown sectioning command" + print section_line + sys.exit(1) + nodes.append( (section_type, node_name) ) + +# sanity check for debugging +#for node in nodes: +# print ' '*2*node[0] + node[1] + +def getMenuFor(node_name): + i = 0 + while nodes[i][1] != node_name: + i += 1 + startIndex = i + 1 + findType = nodes[i][0] + 1 + menu = [] + for i in range(startIndex, len(nodes)): + currentSectionType = nodes[i][0] + currentNodeName = nodes[i][1] + if currentSectionType < findType: + break + elif currentSectionType == findType: + menu.append(currentNodeName) + else: + pass + return menu + +# rewrite file with new menus from TOC +outfile = open(infile, 'w') + +lastNode = '' +line_index = 0 +while line_index < len(lines): + line = lines[ line_index ] + if line.startswith('@node'): + lastNode = line[6:].rstrip() + if line.startswith('@menu'): + outfile.write('@menu\n') + # skip over existing menu + # ASSUME: every @menu has a proper @end menu + while not lines[line_index].startswith('@end menu'): + line_index += 1 + + # write new menu entries + menu = getMenuFor(lastNode) + for item in menu: + node_formatted = '* ' + item + '::\n' + outfile.write( node_formatted ) + + line = lines[line_index] + line_index += 1 + # write normal line. Removes tabs and spaces; leaves EOL + outfile.write(line.rstrip('\t ')) +outfile.close() + diff --git a/scripts/auxiliar/ref_check.py b/scripts/auxiliar/ref_check.py new file mode 100755 index 0000000000..ec6f6b622f --- /dev/null +++ b/scripts/auxiliar/ref_check.py @@ -0,0 +1,188 @@ + +""" +*** RefCheck + +Flow + Read files + On @defManual manual refManual eg @defManual LM rlearning + Associate manual name 'manual' with reference @'refManual'{ ... } + Add 'refManual' to list of keywords + On @setManual manual set current manual name to 'manual' + On @include open and process new file + On @node add node to Nodes list with current manual name and current file name + On @ref add contents to References list with refManual, current manual name and current file name + On one of refManual keywords add contents to References list with ditto + Match refs and nodes + Process References list: + Check reference is contained in Nodes list with refManual in Nodes = refManual in References + Print results + +Known issues + Node names containing commas are only checked up to the comma + Spurious warnings "Xref should be internal" for files in /included + +""" + + +################################################## +class CrossRefs: + """ Holds References and Nodes """ + def __init__(self): + self.Manuals = {} + self.Nodes = {} + self.nodeNames = {} # used to check for duplicates only + self.Refs = [] + self.nodeCount = 0 + + def addManual(self, manualName, refManual): + self.Manuals[refManual] = manualName + + def getRefManuals(self): + return self.Manuals.keys() + + def getManualName(self, refManual): + return self.Manuals[refManual] + + def addNode(self, nodeName, manualName, fileName): + global returnCode +# print "Node: ", nodeName, " in ", manualName, " found in ", fileName + if manualName+"/"+nodeName in self.Nodes.keys(): + print "Error: Duplicate nodename ",nodeName, " in ", fileName, " and ", self.Nodes[manualName+"/"+nodeName][1] + returnCode=1 + self.Nodes[manualName + "/" + nodeName] = [manualName, fileName] + self.nodeNames[nodeName] = fileName + + def addRef(self, toManualName, toHeading, inFileName): +# if inFileName == "notation/vocal.itely": +# print "Ref to ", toManualName, "/",toHeading, " found in ", inFileName + self.Refs.append([toManualName + "/" + toHeading, inFileName]) + + def check(self): + noErrors = True + for [refHeading, refFileName] in self.Refs: + try: + targetFileName = self.Nodes[refHeading] +# if refFileName == "notation/vocal.itely": +# print "ref to: ", refHeading, " in ", refFileName, " found in ", targetFileName + except KeyError: + noErrors = False + print "ref to: ", refHeading, " in ", refFileName, " not found" + if noErrors: + print " All references satisfied" + else: + returnCode=1 + +################################################## +class File: + """ Process an included file """ + + # Class variables + CurrentManualName = "" + DefaultPath = "" + Excludes = [] + Paths = {} + + # Methods + def __init__(self, fileName): + self.fileName = fileName + try: + self.fullFileName = File.Paths[fileName] + fileName + except KeyError: + self.fullFileName = File.DefaultPath + fileName + + def read(self, crossRefs): + """ Process File """ + + skip = False + try: + myfile = open(self.fullFileName, 'r') + except IOError: + print "File ", self.fullFileName, " referenced in ", File.CurrentManualName, " but not found" + return + remainderLine = "" + lineNo = 0 + for line in myfile: + lineNo += 1 + words = line.split() + if len(words) > 0: + if words[0] == "@ignore" or words[0] == "@macro": + skip = True + if skip and len(words) > 1: + if words[0] == "@end" and (words[1].find("ignore") >= 0 or words[1].find("macro") >= 0): + skip = False + + if not skip and words[0] != "@c": + if words[0].find("@defManual") >= 0: + # Manual definition found - extract manual name and refManual string + manualName = words[1] + refManual = words[2] + crossRefs.addManual(manualName, refManual) +# print manualName, refManual + + elif words[0].find("@defaultPath") >=0: + File.DefaultPath = words[1] + + elif words[0].find("@path") >=0: + File.Paths[words[1]] = words[2] + + elif words[0].find("@setManual") >= 0: + File.CurrentManualName = words[1] +# print " Checking ", File.CurrentManualName + + elif words[0].find("@exclude") >=0: + File.Excludes.append(words[1]) + + elif words[0].find("@include") >= 0: + if words[1] not in File.Excludes: + currentFileName = words[1] +# print " File: ", currentFileName + currentFile = File(currentFileName) + currentFile.read(crossRefs) + + elif words[0] == "@node": + nodeName = line[6:-1] + crossRefs.addNode(nodeName, File.CurrentManualName, self.fileName) + + # Find references + + twoLines = remainderLine + ' ' + line.strip() + manualRefStrings = crossRefs.getRefManuals() + refFound = False + for manualRefString in manualRefStrings: + toManualName = crossRefs.getManualName(manualRefString) + actualToManualName = toManualName + if toManualName == "this": + toManualName = File.CurrentManualName + refString = "@" + manualRefString + "{" + refStart = twoLines.find(refString) + if refStart >= 0: + refFound = True + if actualToManualName == File.CurrentManualName: + print "Warning: should xref be internal around line ", lineNo, " in ", self.fileName, "?" + twoLines = twoLines[refStart:] + refNodeStart = twoLines.find("{") + 1 + # TODO Need to check here for nested {} + refNodeEnd = twoLines.find("}") + refNodeEndComma = twoLines.find(",") + if refNodeEndComma > 0: + refNodeEnd = min(refNodeEnd, refNodeEndComma) + if refNodeEnd >= 0: + crossRefs.addRef(toManualName, twoLines[refNodeStart:refNodeEnd], self.fileName) + remainderLine=twoLines[refNodeEnd+1:] + if refFound: + refFound = False + break + if not refFound: + remainderLine = "" + + myfile.close() + return + +topFile = File("scripts/auxiliar/ref_check.tely") # TODO get from input params +print "RefCheck ver 0.1" +returnCode=0 +crossRefs = CrossRefs() +topFile.read(crossRefs) +crossRefs.check() +if returnCode > 0: + print "Errors found: status code: ",returnCode \ No newline at end of file diff --git a/scripts/auxiliar/ref_check.tely b/scripts/auxiliar/ref_check.tely new file mode 100644 index 0000000000..5d795eedfb --- /dev/null +++ b/scripts/auxiliar/ref_check.tely @@ -0,0 +1,70 @@ + +Manual names and reference keywords: +(refs to IR not checked) +@defManual this ref +@defManual CH rchanges +@defManual EL rextend +@defManual WE rgeneral +@defManual ES ressay +@defManual LM rlearning +@defManual MG rgloss +@defManual NR ruser +@defManual AU rprogram +@defManual CG rcontrib + +Files to be excluded (not available in git): +@exclude colorado.itexi +@exclude computer-notation.itexi +@exclude context-properties.tely +@exclude engravingbib.itexi +@exclude identifiers.tely +@exclude layout-properties.tely +@exclude markup-commands.tely +@exclude markup-list-commands.tely +@exclude others-did.itexi +@exclude scheme-functions.tely +@exclude type-predicates.tely +@exclude version.itexi +@exclude weblinks.itexi +@exclude we-wrote.itexi + + +@defaultPath Documentation/ + +Learning Manual +@setManual LM +@include learning.tely + +Music Glossary +@setManual MG +@include music-glossary.tely + +Notation Reference +@setManual NR +@include notation.tely +Dummy nodes to satisfy refs to text markup +@node Font +@node Align +@node Graphic +@node Instrument Specific Markup +@node Music + +Application Usage +@setManual AU +@include usage.tely + +Contributors Guide +@setManual CG +@include contributor.texi + +Extending Lilypond +@setManual EL +@include extending.tely + +Essay +@setManual ES +@include essay.tely + +General (web) +@setManual WE +@include web.texi diff --git a/scripts/auxiliar/split-texidocs.py b/scripts/auxiliar/split-texidocs.py new file mode 100644 index 0000000000..161448087b --- /dev/null +++ b/scripts/auxiliar/split-texidocs.py @@ -0,0 +1,20 @@ +import os +import sys +import re +import glob + +source_files = glob.glob (os.path.join ('input', 'texidocs', '*.texidoc')) +dest_path = os.path.join ('Documentation', '%s', 'texidocs', '%s') + +s = 'Translation of GIT [Cc]ommittish' +texidoc_chunk_re = re.compile (r'^(?:%+\s*' + s + \ + r'.+)?\s*(?:texidoc|doctitle)([a-zA-Z]{2,4})\s+=(?:.|\n)*?(?=%+\s*' + \ + s + r'|$(?!.|\n))', re.M) + +for file_name in source_files: + base_name = os.path.basename (file_name) + contents = open (file_name).read () + for match in texidoc_chunk_re.finditer (contents): + language_code = match.group (1) + print language_code + open (dest_path % (language_code, base_name), 'w').write (match.group (0)) diff --git a/scripts/auxiliar/strip-whitespace.py b/scripts/auxiliar/strip-whitespace.py new file mode 100755 index 0000000000..10da1162c5 --- /dev/null +++ b/scripts/auxiliar/strip-whitespace.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +import sys + +for fname in sys.argv[1:]: + fd = open(fname,mode='U') # open in universal newline mode + lines = [] + for line in fd.readlines(): + lines.append( line.rstrip() ) + fd.close() + + fd = open(fname,mode='w') + fd.seek(0) + for line in lines: + fd.write(line+'\n') + fd.close() + diff --git a/scripts/auxiliar/tely-gettext.py b/scripts/auxiliar/tely-gettext.py index 97ed5dcd88..3adc4cb6d3 100755 --- a/scripts/auxiliar/tely-gettext.py +++ b/scripts/auxiliar/tely-gettext.py @@ -22,8 +22,9 @@ _doc = langdefs.translation[lang] include_re = re.compile (r'@include (.*?)$', re.M) whitespaces = re.compile (r'\s+') -ref_re = re.compile (r'(?ms)@(ruser|rprogram|ref|rlearning)\{(.*?)\}') +ref_re = re.compile (r'(?ms)@((?:ressay|rgloss|rinternals|rlearning|rslr|rprogram|ruser|ref)|named)\{(.*?)\}') node_section_re = re.compile (r'@node (.*?)\n@((?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading) (.*?)\n') +section_only_re = re.compile (r'@((?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading) (.*?)\n') menu_entry_re = re.compile (r'\* (.*?)::') untranslated_node_re = re.compile (r'(@node\s+.*\n@.*\n.*)(\s+@untranslated(.|\n)+?)(?=@node|@subheading|@menu|$)') @@ -37,16 +38,21 @@ def node_gettext (m): m.group (2) + ' ' + _doc (m.group (3)) + \ '\n@translationof ' + m.group (1) + '\n' +def section_gettext (m): + return '@' + m.group (1) + ' ' + _doc (m.group (2)) + '\n' + def menu_entry_gettext (m): return '* ' + _doc (m.group (1)) + '::' -def process_file (filename): +def process_file (filename, master_file_dir='.', included=False): print "Processing %s" % filename f = open (filename, 'r') page = f.read () f.close() - page = node_section_re.sub (node_gettext, page) page = ref_re.sub (ref_gettext, page) + if not '\\n@translationof' in page: + page = node_section_re.sub (node_gettext, page) + page = section_only_re.sub (section_gettext, page) page = menu_entry_re.sub (menu_entry_gettext, page) page = page.replace ("""@c -- SKELETON FILE -- """, '') @@ -57,10 +63,16 @@ def process_file (filename): f.write (page) f.close () dir = os.path.dirname (filename) + if not included: + master_file_dir = dir for file in includes: p = os.path.join (dir, file) if os.path.exists (p): - process_file (p) + process_file (p, master_file_dir, included=True) + else: + p = os.path.join (master_file_dir, file) + if os.path.exists (p): + process_file (p, master_file_dir, included=True) for filename in files: process_file (filename) diff --git a/scripts/auxiliar/texi-langutils.py b/scripts/auxiliar/texi-langutils.py index 4558fbfeef..1fdaad7dcf 100755 --- a/scripts/auxiliar/texi-langutils.py +++ b/scripts/auxiliar/texi-langutils.py @@ -19,20 +19,21 @@ def read_pipe (command): return output -optlist, texi_files = getopt.getopt(sys.argv[1:],'no:d:b:i:l:',['skeleton', 'gettext']) +optlist, texi_files = getopt.getopt(sys.argv[1:],'no:d:b:i:l:',['skeleton', 'gettext', 'head-only']) process_includes = not ('-n', '') in optlist # -n don't process @include's in texinfo files make_gettext = ('--gettext', '') in optlist # --gettext generate a node list from a Texinfo source make_skeleton = ('--skeleton', '') in optlist # --skeleton extract the node tree from a Texinfo source +head_only = ('--head-only', '') in optlist # --head-only only write first node in included Texinfo skeletons -output_file = 'doc.pot' +output_name = 'doc.pot' # @untranslated should be defined as a macro in Texinfo source node_blurb = '''@untranslated ''' doclang = '' head_committish = read_pipe ('git rev-parse HEAD') -intro_blurb = '''@c -*- coding: utf-8; mode: texinfo%(doclang)s -*- +intro_blurb = '''\\input texinfo @c -*- coding: utf-8; mode: texinfo%(doclang)s -*- @c This file is part of %(topfile)s @ignore Translation of GIT committish: %(head_committish)s @@ -47,8 +48,10 @@ end_blurb = """ for x in optlist: if x[0] == '-o': # -o NAME set PO output file name to NAME - output_file = x[1] + output_name = x[1] elif x[0] == '-d': # -d DIR set working directory to DIR + print 'FIXME: this is evil. use cd DIR && texi-langutils ...' + # even better, add a sane -o option os.chdir (x[1]) elif x[0] == '-b': # -b BLURB set blurb written at each node to BLURB node_blurb = x[1] @@ -65,7 +68,8 @@ ly_string_re = re.compile (r'^([a-zA-Z]+)[\t ]*=|%+[\t ]*(.*)$|\\(?:new|context) lsr_verbatim_ly_re = re.compile (r'% begin verbatim$') texinfo_verbatim_ly_re = re.compile (r'^@lilypond\[.*?verbatim') -def process_texi (texifilename, i_blurb, n_blurb, write_skeleton, topfile, output_file=None, scan_ly=False): +def process_texi (texifilename, i_blurb, n_blurb, write_skeleton, topfile, + output_file=None, scan_ly=False, inclusion_level=0): try: f = open (texifilename, 'r') texifile = f.read () @@ -108,7 +112,7 @@ def process_texi (texifilename, i_blurb, n_blurb, write_skeleton, topfile, outpu subst.update (locals ()) g.write (i_blurb % subst) tutu = texinfo_with_menus_re.findall (texifile) - node_trigger = False + node_just_defined = '' for item in tutu: if item[0] == '*': g.write ('* ' + item[1] + '::\n') @@ -118,11 +122,19 @@ def process_texi (texifilename, i_blurb, n_blurb, write_skeleton, topfile, outpu g.write ('@menu\n') elif item[2] == 'end menu': g.write ('@end menu\n\n') + elif item[2] == 'documentlanguage': + g.write ('@documentlanguage ' + doclang + '\n') else: - g.write ('@' + item[2] + ' ' + item[3] + '\n') - if node_trigger: + space = ' ' + if item[3].startswith ('{') or not item[3].strip (): + space = '' + g.write ('@' + item[2] + space + item[3] + '\n') + if node_just_defined: + g.write ('@translationof ' + node_just_defined + '\n') g.write (n_blurb) - node_trigger = False + node_just_defined = '' + if head_only and inclusion_level == 1: + break elif item[2] == 'include': includes.append (item[3]) else: @@ -130,11 +142,12 @@ def process_texi (texifilename, i_blurb, n_blurb, write_skeleton, topfile, outpu output_file.write ('# @' + item[2] + ' in ' + \ printedfilename + '\n_(r"' + item[3].strip () + '")\n') if item[2] == 'node': - node_trigger = True - g.write (end_blurb) + node_just_defined = item[3].strip () + if not head_only: + g.write (end_blurb) g.close () - elif output_file: + elif output_file and scan_ly: toto = texinfo_re.findall (texifile) for item in toto: if item[0] == 'include': @@ -142,12 +155,13 @@ def process_texi (texifilename, i_blurb, n_blurb, write_skeleton, topfile, outpu elif item[2] == 'rglos': output_file.write ('# @rglos in ' + printedfilename + '\n_(r"' + item[3] + '")\n') else: - output_file.write ('# @' + item[0] + ' in ' + printedfilename + '\n_(r"' + item[1].strip () + '")\n') + output_file.write ('# @' + item[0] + ' in ' + printedfilename + '\n_(r"' + item[1].strip ().replace ('\\', r'\\') + '")\n') - if process_includes: + if process_includes and (not head_only or inclusion_level < 1): dir = os.path.dirname (texifilename) for item in includes: - process_texi (os.path.join (dir, item.strip ()), i_blurb, n_blurb, write_skeleton, topfile, output_file, scan_ly) + process_texi (os.path.join (dir, item.strip ()), i_blurb, n_blurb, + write_skeleton, topfile, output_file, scan_ly, inclusion_level + 1) except IOError, (errno, strerror): sys.stderr.write ("I/O error(%s): %s: %s\n" % (errno, texifilename, strerror)) @@ -162,14 +176,24 @@ if make_gettext: node_list.write ('# -*- coding: utf-8 -*-\n') for texi_file in texi_files: # Urgly: scan ly comments and variable names only in English doco - is_english_doc = 'Documentation/user' in texi_file + is_english_doc = ( + True + and not 'Documentation/de/' in texi_file + and not 'Documentation/es/' in texi_file + and not 'Documentation/fr/' in texi_file + and not 'Documentation/ja/' in texi_file + and not 'Documentation/hu/' in texi_file + and not 'Documentation/it/' in texi_file + and not 'Documentation/nl/' in texi_file + and not 'Documentation/po/' in texi_file + ) process_texi (texi_file, intro_blurb, node_blurb, make_skeleton, os.path.basename (texi_file), node_list, scan_ly=is_english_doc) for word in ('Up:', 'Next:', 'Previous:', 'Appendix ', 'Footnotes', 'Table of Contents'): node_list.write ('_(r"' + word + '")\n') node_list.close () - os.system ('xgettext -c -L Python --no-location -o ' + output_file + ' ' + node_list_filename) + os.system ('xgettext --keyword=_doc -c -L Python --no-location -o ' + output_name + ' ' + node_list_filename) else: for texi_file in texi_files: process_texi (texi_file, intro_blurb, node_blurb, make_skeleton, diff --git a/scripts/auxiliar/translations-status.py b/scripts/auxiliar/translations-status.py index 591e385507..221746360b 100755 --- a/scripts/auxiliar/translations-status.py +++ b/scripts/auxiliar/translations-status.py @@ -1,23 +1,36 @@ #!/usr/bin/env python -""" -USAGE: translations-status.py BUILDSCRIPT-DIR LOCALEDIR - - This script must be run from Documentation/ - - Reads template files translations.template.html.in -and for each LANG in LANGUAGES LANG/translations.template.html.in - Writes translations.html.in and for each LANG in LANGUAGES -translations.LANG.html.in - Writes out/translations-status.txt - Updates word counts in TRANSLATION -""" +''' +USAGE: cd Documentation && translations-status.py + + Write: + translations.itexi + /translations.itexi + out/translations-status.txt + + Update word counts in: + contributor/doc-translation-list.itexi + +TODO: + * using markup = TexiMarkup (), html tables (columns) + are evenly spaced and bit too wide. This can + be fixed by using + @multitable @columnfractions 0 0 0 0 0 0 0 0, + but with that, PDF and info output get borked. + * in info and PDF, columns have too little separation + * using markup = HTMLMarkup (), we get nice + + popups -- do we want that with texi output? -- how? + or possibly links to the git archive? + +''' import sys import re import string +import operator import os - +# import langdefs import buildlib @@ -44,20 +57,20 @@ comments_re = re.compile (r'^@ignore\n(.|\n)*?\n@end ignore$|@c .*?$', re.M) space_re = re.compile (r'\s+', re.M) lilypond_re = re.compile (r'@lilypond({.*?}|(.|\n)*?\n@end lilypond$)', re.M) node_re = re.compile ('^@node .*?$', re.M) -title_re = re.compile ('^@(top|chapter|(?:sub){0,2}section|' + \ -'(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?) (.*?)$', re.M) +title_re = re.compile ('^@(settitle|chapter|top|(?:sub){0,2}section|' + '(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?) (.*?)$', re.M) include_re = re.compile ('^@include (.*?)$', re.M) -translators_re = re.compile (r'^@c\s+Translators\s*:\s*(.*?)$', re.M | re.I) -checkers_re = re.compile (r'^@c\s+Translation\s*checkers\s*:\s*(.*?)$', - re.M | re.I) -status_re = re.compile (r'^@c\s+Translation\s*status\s*:\s*(.*?)$', re.M | re.I) +# allow multiple lines +translators_re = re.compile (r'^@c[ ]+[Tt]ranslators?[ ]*:[ ]*(.*?)$', re.M) +checkers_re = re.compile (r'^@c[ ]+[Tt]ranslation[ ]*[Cc]heckers?[ ]*:[ ]*(.*?)$', re.M) +status_re = re.compile (r'^@c[ ]+[Tt]ranslation[ ]*[Ss]tatus[ ]*:[ ]*(.*?)$', re.M) post_gdp_re = re.compile ('post.GDP', re.I) untranslated_node_str = '@untranslated' skeleton_str = '-- SKELETON FILE --' section_titles_string = _doc ('Section titles') -last_updated_string = _doc ('

    Last updated %s

    \n') +last_updated_string = _doc ('Last updated %s') detailed_status_heads = [_doc ('Translators'), _doc ('Translation checkers'), _doc ('Translated'), _doc ('Up to date'), _doc ('Other info')] @@ -88,7 +101,8 @@ texi_level = { 'chapter': ('n', 1), 'section': ('n', 2), 'subsection': ('n', 3), - 'appendix': ('l', 1) + 'appendix': ('l', 1), + 'appendixsec': ('l', 2), } appendix_number_trans = string.maketrans ('@ABCDEFGHIJKLMNOPQRSTUVWXY', @@ -176,65 +190,196 @@ def tely_word_count (tely_doc): nodes = node_re.split (tely_doc) return [len (space_re.split (n)) for n in nodes] +class HTMLMarkup (object): + texi_header = '''@c -*- coding: utf-8; mode: texinfo; -*- +@c This file was generated by translation-status.py -- DO NOT EDIT! +@ignore + Translation of GIT committish: 0 +@end ignore + +''' + texi_footer = ''' +''' + def texi (self, string): + return (self.texi_header + + ''' +@ifnothtml +Translation status currently only available in HTML. +@end ifnothtml +''' + + string + + self.texi_footer) + def entity (self, name, string='', attributes=[]): + attr_list = ''.join ([' %s="%s"' % x for x in attributes]) + return '<%(name)s%(attr_list)s>%(string)s' % locals () + def paragraph (self, string=''): + return self.entity ('p', string) + def table (self, string): + return self.entity ('table', string, [('align', 'center'), ('border', '2')]) + def row (self, string, attributes=[]): + return self.entity ('tr', string, attributes) + headrow = row + def headcell (self, string, attributes=[]): + return self.entity ('th', string, attributes) + def cell (self, string='', attributes=[]): + return self.entity ('td', string, attributes) + def newline (self, attributes=[]): + return self.entity ('br', '', attributes)[:-5] + def span (self, string, attributes=[]): + return self.entity ('span', string, attributes) + def small (self, string, attributes=[]): + return self.entity ('small', string, attributes) + def emph (self, string, attributes=[]): + return self.entity ('em', string, attributes) + +class TexiMarkup (HTMLMarkup): + def texi (self, string): + return (self.texi_header + + self.html (''' + +''') + + self.columnfraction_disaster (self.itemtab_disaster (string)) + + self.texi_footer) + def itemtab_disaster (self, string): + return string.replace ('''item \n@tab ''', '''item +''') + def columnfraction_disaster (self, string): + if False: + # nice trick for html-only + return string.replace ('@multitable', '@multitable @columnfractions 0 0 0 0 0 0 0 0 0 0') + tables = re.findall ('(?s)(@multitable)(.*?)(@item)', string) + for t in tables: + columns = len (re.findall ('(?s)(\n@tab)', t[1])) + 1 + columnfractions = '@columnfractions ' + (' ' + str (1.0/columns)) * columns + string = string.replace ('@multitable\n', + '@multitable %(columnfractions)s\n' % locals (), 1) + return string + def entity (self, name, string='', attributes=[]): + return ''' +@%(name)s +%(string)s +@end %(name)s''' % locals () + def paragraph (self, string=''): + return ''' +%(string)s''' % locals () + def table (self, string): + # Ugh, makeinfo is fine without @columnfractions + # but texi2html 1.82 barfs: `empty multicolumn' + return (self.entity ('multitable', string)) + def headrow (self, string, attributes=[]): + return ''' +@headitem ''' + string + def row (self, string, attributes=[]): + return ''' +@item ''' + string + def cell (self, string='', attributes=[]): + return ''' +@tab ''' + string + headcell = cell + def newline (self): + return ''' +@* +''' + def html (self, string): + return self.entity ('ifhtml', self.entity ('html', string)) + def nothtml (self, string): + return self.entity ('ifnothtml', string) + def span (self, string, attributes=[]): + return (self.html (HTMLMarkup ().span (string, attributes)) + + self.nothtml (string)) + def small (self, string, attributes=[]): + return (self.html (HTMLMarkup ().small (string, attributes)) + + self.nothtml (string)) + def command (self, name, string): + return '@%(name)s{%(string)s}' % locals () + def emph (self, string, attributes=[]): + return self.command ('emph', string) class TelyDocument (object): def __init__ (self, filename): self.filename = filename - self.contents = open (filename).read () - + self.contents = 'GIT committish: 0' + if os.path.exists (filename): + self.contents = open (filename).read () ## record title and sectionning level of first Texinfo section + self.sectioning = 'unnumbered' + self.title = 'Untitled' m = title_re.search (self.contents) if m: + self.sectioning = m.group (1) self.title = m.group (2) - self.level = texi_level [m.group (1)] - else: - self.title = 'Untitled' - self.level = ('u', 1) + if not hasattr (self, 'language'): + self.language = '' m = language_re.search (self.contents) if m: self.language = m.group (1) - included_files = [os.path.join (os.path.dirname (filename), t) + dir = os.path.dirname (filename).split ('/')[0] + if len (dir) == 2: + dir += '/' + else: + dir = '' + included_files = [dir + t for t in include_re.findall (self.contents)] self.included_files = [p for p in included_files if os.path.exists (p)] + def get_level (self): + return texi_level [self.sectioning] + def print_title (self, section_number): + if not hasattr (self, 'level'): + self.level = self.get_level () return section_number.increase (self.level) + self.title class TranslatedTelyDocument (TelyDocument): def __init__ (self, filename, masterdocument, parent_translation=None): TelyDocument.__init__ (self, filename) - self.masterdocument = masterdocument - if not hasattr (self, 'language') \ - and hasattr (parent_translation, 'language'): - self.language = parent_translation.language - if hasattr (self, 'language'): + if not hasattr (self, 'language'): + self.language = '' + if not self.language and parent_translation: + self.language = parent_translation.__dict__.get ('language', '') + if self.language == 'en': + print filename + ': language en specified: set @documentlanguage', self.filename[:2] + self.language = '' + if not self.language and filename[2] == '/': + print filename + ': no language specified: add @documentlanguage', self.filename[:2] + self.language = filename[:2] + if self.language: self.translation = translation[self.language] else: self.translation = lambda x: x self.title = self.translation (self.title) ## record authoring information - m = translators_re.search (self.contents) + self.translators = [''] + if parent_translation: + self.translators = parent_translation.__dict__.get ('translators', ['']) + m = translators_re.findall (self.contents) if m: - self.translators = [n.strip () for n in m.group (1).split (',')] - else: - try: - self.translators = parent_translation.translators - except: - error ('%s: no translator name found, \nplease \ -specify at least one in the master file as a line containing\n\ -@c Translators: FirstName1 LastName1, FirstName2 LastName2' % self.filename) - m = checkers_re.search (self.contents) + self.translators = [n.strip () for n in + reduce (operator.add, [n.split (',') for n in m])] + if self.language != self.filename[:2]: + print 'Barf:', self.filename + barf + if (not isinstance (self, UntranslatedTelyDocument) + and (not self.translators or not self.translators[0]) + and not 'macros.itexi' in self.filename): + error (self.filename + ''': error: no translator name found + please specify one ore more lines in the master file + @c Translator: FirstName LastName[, FirstName LastName]..''') + self.checkers = [] + m = checkers_re.findall (self.contents) if m: - self.checkers = [n.strip () for n in m.group (1).split (',')] - elif isinstance (parent_translation, TranslatedTelyDocument): + self.checkers = [n.strip () for n in + reduce (operator.add, [n.split (',') for n in m])] + if not self.checkers and isinstance (parent_translation, TranslatedTelyDocument): self.checkers = parent_translation.checkers - else: - self.checkers = [] ## check whether translation is pre- or post-GDP m = status_re.search (self.contents) @@ -285,6 +430,9 @@ setting to %d %%" % (self.filename, self.uptodate_percentage, alternative)) setting to %d %%" % (self.filename, self.uptodate_percentage, alternative)) self.uptodate_percentage = alternative + def get_level (self): + return texi_level ['top'] + def completeness (self, formats=['long'], translated=False): if translated: translation = self.translation @@ -332,80 +480,98 @@ setting to %d %%" % (self.filename, self.uptodate_percentage, alternative)) else: return self.translation (format_table['pre-GDP']) - def short_html_status (self): - s = ' ' + def short_texi_status (self, markup): + s = '' if self.partially_translated: - s += '
    \n '.join (self.translators) + '
    \n' + s += markup.newline ().join (self.translators + ['']) if self.checkers: - s += ' ' + \ - '
    \n '.join (self.checkers) + '

    \n' - + s += markup.newline ().join ([markup.small (x) for x in self.checkers + ['']]) c = self.completeness (['color', 'long']) - s += ' \ -%(long)s
    \n' % c - + s += markup.span ('%(long)s' % c, [('style', 'background-color: #%(color)s' % c)]) + s += markup.newline () if self.partially_translated: u = self.uptodateness (['vague', 'color']) - s += ' \ -%(vague)s
    \n' % u - - s += ' \n' - return s + s += markup.span ('%(vague)s' % u, [('style', 'background-color: #%(color)s' % u)]) + return markup.cell (s, [('title', filename)]) def text_status (self): s = self.completeness ('abbr')['abbr'] + ' ' - if self.partially_translated: s += self.uptodateness ('abbr')['abbr'] + ' ' return s - def html_status (self, numbering=SectionNumber ()): - if self.title == 'Untitled': - return '' - - if self.level[1] == 0: # if self is a master document - s = ''' - - ''' % self.print_title (numbering) - s += ''.join ([' \n' % self.translation (h) - for h in detailed_status_heads]) - s += ' \n' - s += ' \n \n' \ - % (self.translation (section_titles_string), - sum (self.masterdocument.word_count)) - - else: - s = ' \n \n' \ - % (self.print_title (numbering), - sum (self.masterdocument.word_count)) - + def texi_status (self, markup, numbering=SectionNumber ()): + return (markup.table ( + markup.headrow ( + (markup.headcell (self.print_title (numbering)) + + ''.join ([markup.headcell (self.translation (h)) + for h in detailed_status_heads])), + [('align', 'center')]) + + markup.row ( + (markup.cell ((self.translation (section_titles_string) + + markup.newline () + + '%d' % sum (self.masterdocument.word_count)), + [('title',filename)]) + + self.texi_body (markup, numbering)), + [('align','left')]) + + self.texi_translations (markup, numbering)) + ) + markup.paragraph () + + def texi_body (self, markup, numbering): + return (self.texi_translators (markup) + + self.texi_completeness (markup) + + self.texi_uptodateness (markup) + + self.texi_gdp (markup)) + + def texi_translators (self, markup): if self.partially_translated: - s += ' \n' - s += ' \n' - else: - s += ' \n' * 2 + return (markup.cell (markup.newline ().join (self.translators)) + + markup.cell (markup.newline ().join (self.checkers))) + return markup.cell () + markup.cell () + def texi_completeness (self, markup): c = self.completeness (['color', 'short'], translated=True) - s += ' \n' % {'color': c['color'], - 'short': c['short']} + return markup.cell (markup.span (c['short'], + [('style', 'background-color: #' + c['color'])])) + def texi_uptodateness (self, markup): if self.partially_translated: u = self.uptodateness (['short', 'color'], translated=True) - s += ' \n' % {'color': u['color'], - 'short': u['short']} - else: - s += ' \n' - - s += ' \n \n' - s += ''.join ([i.translations[self.language].html_status (numbering) - for i in self.masterdocument.includes - if self.language in i.translations]) + return markup.cell (markup.span (u['short'], + [('style', 'background-color: #' + u['color'])])) + return markup.cell () + + def texi_gdp (self, markup): + return markup.cell (self.gdp_status ()) + + def texi_translations (self, markup, numbering): + return ''.join ([i.translations[self.language].texi_status (markup, numbering) + for i in self.masterdocument.includes + if self.language in i.translations]) + +class IncludedTranslatedTelyDocument (TranslatedTelyDocument): + get_level = TelyDocument.get_level + def texi_status (self, markup, numbering=SectionNumber ()): + if self.title != 'Untitled': + return (markup.row ( + (markup.cell (( + self.print_title (numbering) + + markup.newline () + + '%d' % sum (self.masterdocument.word_count)), + [('title',filename)]) + + self.texi_body (markup, numbering)), + [('align','left')]) + + self.texi_translations (markup, numbering)) + return '' + +class UntranslatedTelyDocument (TranslatedTelyDocument): + def __init__ (self, filename, masterdocument, parent_translation=None): + if filename[2] == '/': + self.language = filename[:2] + TranslatedTelyDocument.__init__ (self, filename, masterdocument, parent_translation) - if self.level[1] == 0: # if self is a master document - s += '
    %s%s
    %s
    (%d)
    %s
    (%d)
    ' + '
    \n '.join (self.translators) + '
    ' + '
    \n '.join (self.checkers) + '
    \ -%(short)s\ -%(short)s' + self.gdp_status () + '
    \n

    \n' - return s +class IncludedUntranslatedTelyDocument (UntranslatedTelyDocument, IncludedTranslatedTelyDocument): + get_level = TelyDocument.get_level class MasterTelyDocument (TelyDocument): def __init__ (self, @@ -415,19 +581,26 @@ class MasterTelyDocument (TelyDocument): TelyDocument.__init__ (self, filename) self.size = len (self.contents) self.word_count = tely_word_count (self.contents) - translations = dict ([(lang, os.path.join (lang, filename)) - for lang in langdefs.LANGDICT]) - self.translations = \ - dict ([(lang, - TranslatedTelyDocument (translations[lang], - self, parent_translations.get (lang))) - for lang in langdefs.LANGDICT - if os.path.exists (translations[lang])]) - if self.translations: - self.includes = [MasterTelyDocument (f, self.translations) - for f in self.included_files] - else: - self.includes = [] + self.translations = {} + self.includes = [] + if not self.language or self.language == 'en': + languages = [x for x in parent_translations.keys () if x != 'en'] + self.translations = dict ([x for x in + [(lang, self.translated_factory (os.path.join (lang, self.filename), + parent_translations.get (lang))) + for lang in languages] + if x[1]]) + if self.translations: + self.includes = [IncludedMasterTelyDocument (f, self.translations) + for f in self.included_files] + + def get_level (self): + return texi_level ['top'] + + def translated_factory (self, filename, parent): + if os.path.exists (filename): + return TranslatedTelyDocument (filename, self, parent) + return None def update_word_counts (self, s): s = update_word_count (s, self.filename, sum (self.word_count)) @@ -435,57 +608,73 @@ class MasterTelyDocument (TelyDocument): s = i.update_word_counts (s) return s - def html_status (self, numbering=SectionNumber ()): - if self.title == 'Untitled' or not self.translations: - return '' - if self.level[1] == 0: # if self is a master document - s = ''' - - ''' % self.print_title (numbering) - s += ''.join ([' \n' % l for l in self.translations]) - s += ' \n' - s += ' \n \n' \ - % sum (self.word_count) - - else: # if self is an included file - s = ' \n \n' \ - % (self.print_title (numbering), sum (self.word_count)) - - s += ''.join ([t.short_html_status () - for t in self.translations.values ()]) - s += ' \n' - s += ''.join ([i.html_status (numbering) for i in self.includes]) - - if self.level[1] == 0: # if self is a master document - s += '
    %s%s
    Section titles
    (%d)
    %s
    (%d)
    \n

    \n' + def texi_status (self, markup, numbering=SectionNumber ()): + return markup.table ( + (markup.headrow ( + (markup.headcell (self.print_title (numbering)) + + ''.join ([markup.headcell (l) for l in sorted (self.translations.keys ())])), + [('align','center')]) + + markup.row ( + (markup.cell (('Section titles' + + markup.newline () + + '(%d)' % sum (self.word_count)), + [('title',filename)]) + + self.texi_body (markup, numbering)), + [('align','left')]) + + self.texi_includes (markup, numbering) + )) + markup.paragraph () + + def texi_includes (self, markup, numbering): + return ''.join ([i.texi_status (markup, numbering) for i in self.includes]) + + def texi_body (self, markup, numbering): + return ''.join ([self.translations[k].short_texi_status (markup) + for k in sorted (self.translations.keys ())]) + + def text_status (self, markup, numbering=SectionNumber (), colspec=[48,12]): + s = (self.print_title (numbering) + ' ').ljust (colspec[0]) + s += ''.join (['%s'.ljust (colspec[1]) % l + for l in sorted (self.translations.keys ())]) + s += '\n' + s += ('Section titles (%d)' % \ + sum (self.word_count)).ljust (colspec[0]) + s += self.text_body (markup, numbering, colspec) + s += '\n' return s - def text_status (self, numbering=SectionNumber (), colspec=[48,12]): - if self.title == 'Untitled' or not self.translations: - return '' - - s = '' - if self.level[1] == 0: # if self is a master document - s += (self.print_title (numbering) + ' ').ljust (colspec[0]) - s += ''.join (['%s'.ljust (colspec[1]) % l - for l in self.translations]) - s += '\n' - s += ('Section titles (%d)' % \ - sum (self.word_count)).ljust (colspec[0]) - - else: - s = '%s (%d) ' \ - % (self.print_title (numbering), sum (self.word_count)) - s = s.ljust (colspec[0]) - - s += ''.join ([t.text_status ().ljust(colspec[1]) - for t in self.translations.values ()]) - s += '\n\n' - s += ''.join ([i.text_status (numbering) for i in self.includes]) - - if self.level[1] == 0: - s += '\n' - return s + def text_body (self, markup, numbering, colspec): + return (''.join ([self.translations[k].text_status ().ljust(colspec[1]) + for k in sorted (self.translations.keys ())]) + + '\n\n' + + ''.join ([i.text_status (markup, numbering) for i in self.includes])) + +class IncludedMasterTelyDocument (MasterTelyDocument): + get_level = TelyDocument.get_level + + def translated_factory (self, filename, parent): + if os.path.exists (filename): + return IncludedTranslatedTelyDocument (filename, self, parent) + return IncludedUntranslatedTelyDocument (filename, self, parent) + + def texi_status (self, markup, numbering=SectionNumber ()): + if self.title != 'Untitled': + return (markup.row ( + (markup.cell ((self.print_title (numbering) + + markup.newline () + + '(%d)' % sum (self.word_count)), + [('title',filename)]) + + self.texi_body (markup, numbering)), + [('align','left')]) + + self.texi_includes (markup, numbering)) + return '' + + def text_status (self, markup, numbering=SectionNumber (), colspec=[48,12]): + if self.title != 'Untitled': + return (self.print_title (numbering) + + '(%d)' % sum (self.word_count) + + self.text_body (markup, numbering, colspec) + ).ljust (colspec[0]) + return '' update_category_word_counts_re = re.compile (r'(?ms)^-(\d+)-(.*?\n)\d+ *total') @@ -493,61 +682,54 @@ update_category_word_counts_re = re.compile (r'(?ms)^-(\d+)-(.*?\n)\d+ *total') counts_re = re.compile (r'(?m)^(\d+) ') def update_category_word_counts_sub (m): - return '-' + m.group (1) + '-' + m.group (2) + \ - str (sum ([int (c) - for c in counts_re.findall (m.group (2))])).ljust (6) + \ - 'total' + return ('-' + m.group (1) + '-' + m.group (2) + + str (sum ([int (c) + for c in counts_re.findall (m.group (2))])).ljust (6) + + 'total') +# urg +# main () starts here-abouts progress ("Reading documents...") -tely_files = \ - buildlib.read_pipe ("find -maxdepth 2 -name '*.tely'")[0].splitlines () -tely_files.sort () +master_files = \ + buildlib.read_pipe ("git ls-files | grep -E '[^/]*/?[^/]*[.](tely|texi)$'")[0].splitlines () +master_files.sort () master_docs = [MasterTelyDocument (os.path.normpath (filename)) - for filename in tely_files] + for filename in master_files] master_docs = [doc for doc in master_docs if doc.translations] -main_status_page = open ('translations.template.html.in').read () - enabled_languages = [l for l in langdefs.LANGDICT if langdefs.LANGDICT[l].enabled and l != 'en'] -lang_status_pages = \ - dict ([(l, open (os.path.join (l, 'translations.template.html.in')). read ()) - for l in enabled_languages]) progress ("Generating status pages...") date_time = buildlib.read_pipe ('LANG= date -u')[0] -main_status_html = last_updated_string % date_time -main_status_html += '\n'.join ([doc.html_status () for doc in master_docs]) - -html_re = re.compile ('', re.I) -end_body_re = re.compile ('', re.I) - -html_header = ''' -''' - -main_status_page = html_re.sub (html_header, main_status_page) +# TEXI output sort of works +# TODO: table border, td-titles :-) +# markup = HTMLMarkup () +#sys.stderr.write ('''translations-status.py:713: warning: using markup = HTMLMarkup (): HTML only\n''') +markup = TexiMarkup () +sys.stderr.write ('''translations-status.py:717: warning: using markup = TexiMarkup (): ugly HTML + output, questionable PDF and info output. + Consider using HTML-only markup = HTMLMarkup ()\n''') -main_status_page = end_body_re.sub (main_status_html + '\n', - main_status_page) +main_status_body = markup.paragraph (markup.emph (last_updated_string % date_time)) +main_status_body += '\n'.join ([doc.texi_status (markup) for doc in master_docs]) +main_status_page = markup.texi (main_status_body) -open ('translations.html.in', 'w').write (main_status_page) +open ('translations.itexi', 'w').write (main_status_page) for l in enabled_languages: date_time = buildlib.read_pipe ('LANG=%s date -u' % l)[0] - lang_status_pages[l] = translation[l] (last_updated_string) % date_time + lang_status_pages[l] - lang_status_page = html_re.sub (html_header, lang_status_pages[l]) - html_status = '\n'.join ([doc.translations[l].html_status () + updated = markup.paragraph (markup.emph (translation[l] (last_updated_string) % date_time)) + texi_status = '\n'.join ([doc.translations[l].texi_status (markup) for doc in master_docs if l in doc.translations]) - lang_status_page = end_body_re.sub (html_status + '\n', - lang_status_page) - open (os.path.join (l, 'translations.html.in'), 'w').write (lang_status_page) + lang_status_page = markup.texi (updated + texi_status) + open (os.path.join (l, 'translations.itexi'), 'w').write (lang_status_page) main_status_txt = '''Documentation translations status Generated %s @@ -556,13 +738,13 @@ FT = fully translated ''' % date_time -main_status_txt += '\n'.join ([doc.text_status () for doc in master_docs]) +main_status_txt += '\n'.join ([doc.text_status (markup) for doc in master_docs]) status_txt_file = 'out/translations-status.txt' progress ("Writing %s..." % status_txt_file) open (status_txt_file, 'w').write (main_status_txt) -translation_instructions_file = 'devel/doc-translation-list.itexi' +translation_instructions_file = 'contributor/doc-translation-list.itexi' progress ("Updating %s..." % translation_instructions_file) translation_instructions = open (translation_instructions_file).read () diff --git a/scripts/auxiliar/update-patch-version.sh b/scripts/auxiliar/update-patch-version.sh new file mode 100755 index 0000000000..22286274db --- /dev/null +++ b/scripts/auxiliar/update-patch-version.sh @@ -0,0 +1,24 @@ +#! /bin/bash +# +# Update the version number in lilypond snippets without running convert-ly +# on the snippets +# Note: this does not change anything but the version number, and it will only +# change the specified version number +# +# This is useful when a patch containing a number of snippets (due to a change +# in syntax) has not completed review before a new development release +# is made. +# +# Usage: update-patch-version old-version new-version + +if [ $# -ne 2 ] # need exactly 2 arguments +then + echo "Usage: update-patch-version old-version new-version" + exit 1 +fi + +echo "Warning -- if this script is run after a branch is rebased," +echo " unintended changes will occur. It would be best to revert" +echo " the rebase commit before running." + +git grep --name-only $1 | xargs sed -i -e s/$1/$2/g diff --git a/scripts/auxiliar/update-with-convert-ly.sh b/scripts/auxiliar/update-with-convert-ly.sh new file mode 100755 index 0000000000..9bb48614d7 --- /dev/null +++ b/scripts/auxiliar/update-with-convert-ly.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +### are we in the top source dir? +if [ ! -e scripts/convert-ly.py ]; then + echo "Must run from top source directory" + exit 1 +fi + +### get the directories +TOP_SRC_DIR=`pwd` +if [ -z $BUILD_DIR ]; then + BUILD_DIR=. +fi + +### make sure convert-ly is up-to-date +touch python/convertrules.py +touch scripts/convert-ly.py +cd $BUILD_DIR +make +cd $TOP_SRC_DIR + +### update manuals +find Documentation/ -path 'Documentation/snippets' -prune -o \ + -name '*.itely' | xargs $BUILD_DIR/out/bin/convert-ly -e -d + +### update .ly files +# don't look in . otherwise it'll find stuff in build/ ! +find Documentation/ input/ ly/ \ + -name '*.ly' | xargs $BUILD_DIR/out/bin/convert-ly -e -d diff --git a/scripts/auxiliar/yyout2grammar.py b/scripts/auxiliar/yyout2grammar.py deleted file mode 100755 index 25b6f25a06..0000000000 --- a/scripts/auxiliar/yyout2grammar.py +++ /dev/null @@ -1,104 +0,0 @@ -#! /usr/bin/env python - -# Convert from bison output file parser.output to -# Grammar and index. -# Drops all of the state information. -# Converts \\ to \ -# Eliminates the @ variables created when {} is placed in the middle of a rule## all of the c-code stuff -# -# -# Copyright 2005 by Carl D. Sorensen -# - -# to create input file, run -# bison -v parser.yy -# this will create a file parser.output -# then run -# yyout2grammar.py parser.output your_output_file -# - -import sys -import re - -atre = re.compile('(@\d+):') - -write_me = True - -if len(sys.argv)!=3: - print "Usage: yyout2grammar.py parser_output_file grammar_file." -else: - in_name = sys.argv[1] - out_name = sys.argv[2] - - print "input file name",in_name - print "output file name",out_name - in_file = open(in_name,'r') - out_file= open(out_name, 'w') - - at_items=[] - inline = in_file.readline() - while inline != '' and not(inline.startswith("Grammar")): - inline = in_file.readline() - if inline != '': - out_file.write(inline) - inline = in_file.readline() - while inline != '' and not(inline.startswith("Terminals")): - i = inline.find("$accept:") - if i>-1: - write_me = False - inline = in_file.readline() - atfound = re.findall(atre,inline) - if len(atfound) > 0: - at_items.extend(atfound) - print at_items - write_me = False - inline=in_file.readline() - else: - for at_item in at_items: - i=inline.find(at_item) - if i >= 0: - inline=inline[:i] + inline[i+len(at_item):] - i=inline.find('"\\\\') - while i > -1 : - inline = inline[:i+1]+inline[i+2:] - i = inline.find('"\\\\') - if write_me: - out_file.write(inline) - inline = in_file.readline() - write_me = True - index_items = [] - # Write the Terminals header line and the following blank line - out_file.write(inline) - inline = in_file.readline() - out_file.write(inline) - inline = in_file.readline() - while inline != '' and not(inline.startswith("Nonterminals")): - i=inline.find('"\\\\') - while i > -1 : - inline = inline[:i+1]+inline[i+2:] - i = inline.find('"\\\\') - index_items.append(inline) - inline = in_file.readline() - index_items.sort(lambda x,y:cmp(x.lower(),y.lower())) - for index_item in index_items: - out_file.write(index_item) - out_file.write('\n') - # Write the Nonterminals header and the blank line - out_file.write(inline) - inline = in_file.readline() - out_file.write(inline) - index_items = [] - index_item=in_file.readline() - inline=in_file.readline() - while inline != '' and not(inline.startswith("state")): - while inline.startswith(" "): - index_item = index_item + inline - inline = in_file.readline() - if not(index_item.startswith("@")) and \ - not(index_item.startswith("$accept")): - index_items.append(index_item) - index_item = inline - inline=in_file.readline() - index_items.sort(lambda x,y:cmp(x.lower(),y.lower())) - for index_item in index_items: - out_file.write(index_item) diff --git a/scripts/build/GNUmakefile b/scripts/build/GNUmakefile index 5a62a47a98..9f6e8f0c52 100644 --- a/scripts/build/GNUmakefile +++ b/scripts/build/GNUmakefile @@ -2,6 +2,8 @@ depth = ../.. STEPMAKE_TEMPLATES=script install po +EXTRA_DIST_FILES = website-known-missing-files.txt + include $(depth)/make/stepmake.make # Should we install these? This should be handled by sysadmin or @@ -10,5 +12,7 @@ include $(depth)/make/stepmake.make #INSTALLATION_OUT_DIR1=$(local_lilypond_datadir)/scripts #INSTALLATION_OUT_FILES1=$(outdir)/lilypond-login $(outdir)/lilypond-profile +EXTRA_DIST_FILES = website-known-missing-files.txt + all: $(INSTALLATION_FILES) diff --git a/scripts/build/bib2html.py b/scripts/build/bib2html.py deleted file mode 100644 index c16f21cce2..0000000000 --- a/scripts/build/bib2html.py +++ /dev/null @@ -1,76 +0,0 @@ -#!@PYTHON@ -import os -import sys -import getopt -import tempfile - -# usage: -def usage (): - print 'usage: %s [-s style] [-o ] BIBFILES...' - -(options, files) = getopt.getopt (sys.argv[1:], 's:o:', []) - -output = 'bib.html' -style = 'long' - -for (o,a) in options: - if o == '-h' or o == '--help': - usage () - sys.exit (0) - elif o == '-s' or o == '--style': - style = a - elif o == '-o' or o == '--output': - output = a - else: - raise Exception ('unknown option: %s' % o) - - -if style not in ['alpha','index','long','longp','long-pario','short','short-pario','split']: - sys.stderr.write ("Unknown style \`%s'\n" % style) - -tempfile = tempfile.mktemp ('bib2html') - -if not files: - usage () - sys.exit (2) - - -def strip_extension (f, ext): - (p, e) = os.path.splitext (f) - if e == ext: - e = '' - return p + e - -nf = [] -for f in files: - nf.append (strip_extension (f, '.bib')) - -files = ','.join (nf) - -open (tempfile + '.aux', 'w').write (r''' -\relax -\citation{*} -\bibstyle{html-%(style)s} -\bibdata{%(files)s}''' % vars ()) - -cmd = "bibtex %s" % tempfile - -sys.stdout.write ("Invoking `%s'\n" % cmd) -stat = os.system (cmd) -if stat <> 0: - sys.exit(1) - - -#TODO: do tex -> html on output - -bbl = open (tempfile + '.bbl').read () - -open (output, 'w').write (bbl) - - -def cleanup (tempfile): - for a in ['aux','bbl', 'blg']: - os.unlink (tempfile + '.' + a) - -cleanup (tempfile) - diff --git a/scripts/build/bib2texi.py b/scripts/build/bib2texi.py new file mode 100644 index 0000000000..dd896fa8b0 --- /dev/null +++ b/scripts/build/bib2texi.py @@ -0,0 +1,81 @@ +#!@PYTHON@ +import os +import sys +import getopt +import tempfile + +# usage: +def usage (): + print 'usage: %s [-s style] [-o ] BIBFILES...' + +(options, files) = getopt.getopt (sys.argv[1:], 's:o:', []) + +output = 'bib.itexi' +style = 'long' + +for (o,a) in options: + if o == '-h' or o == '--help': + usage () + sys.exit (0) + elif o == '-s' or o == '--style': + style = a + elif o == '-o' or o == '--output': + output = a + else: + raise Exception ('unknown option: %s' % o) + +if not files: + usage () + sys.exit (2) + + +def strip_extension (f, ext): + (p, e) = os.path.splitext (f) + if e == ext: + e = '' + return p + e + +nf = [] +for f in files: + nf.append (strip_extension (f, '.bib')) + +files = ','.join (nf) + +tmpfile = tempfile.mkstemp ('bib2texi')[1] + +#This writes a .aux file to the temporary directory. +#The .aux file contains the commands for bibtex +#PEH changed the bibstyle to allow a single template file in the parent directory +#The template filename is texi-*.bst, where * defaults to 'long' but can be a parameter +open (tmpfile + '.aux', 'w').write (r''' +\relax +\citation{*} +\bibstyle{%(style)s} +\bibdata{%(files)s}''' % vars ()) + +tmpdir = tempfile.gettempdir () + +#The command line to invoke bibtex +cmd = "TEXMFOUTPUT=%s bibtex %s" % (tmpdir, tmpfile) + +sys.stdout.write ("Invoking `%s'\n" % cmd) +#And invoke it +stat = os.system (cmd) +if stat <> 0: + sys.exit(1) + +#TODO: do tex -> itexi on output +# Following 2 lines copy tmpfile.bbl to the desired output file +bbl = open (tmpfile + '.bbl').read () + +open (output, 'w').write (bbl) + +def cleanup (tmpfile): + for a in ['aux','bbl', 'blg']: + os.unlink (tmpfile + '.' + a) + + +cleanup (tmpfile) +#Following line added by PEH - script was leaving a dangling temporary file with no extension +os.unlink (tmpfile) + diff --git a/scripts/build/create-version-itexi.py b/scripts/build/create-version-itexi.py new file mode 100644 index 0000000000..e40ff6e79b --- /dev/null +++ b/scripts/build/create-version-itexi.py @@ -0,0 +1,74 @@ +#!@PYTHON@ +# create-version-itexi.py + +""" when being called on lilypond.org, pass it the location of the +top source dir on the command-line. """ + +import sys +import os +import glob + + + +# FIXME: if the depth depends on the type of build, figure it +# out automatically. +### just like depth in our GNUmakefiles +# these links are relative from /~graham/web/ +depth = "../../" +# these links are relative from the v2.13 docs +#depth = "../../../../" + + + +VERSION_STABLE = "" +VERSION_DEVEL = "" + +try: + topDir = sys.argv[1] +except: + myDir = os.path.dirname(sys.argv[0]) + # use two abspaths to work around some windows python bug + topDir = os.path.join(os.path.abspath(myDir)+os.sep+'..'+os.sep+'..'+os.sep) + topDir = os.path.abspath( topDir ) + + +# TODO: this might be useful for other scripts; can we make it available? +manuals = map(lambda x: os.path.splitext(x)[0], + map(os.path.basename, + glob.glob(os.path.join(topDir,'Documentation', '*.te??')))) +#manuals = map(lambda x: 'glossary' if x=='music-glossary' else x, manuals) +manuals.append('internals') + + +version_file_path = os.path.join(topDir, "VERSION") + +version_contents = open(version_file_path).readlines() +major = 0 +minor = 0 +patch = 0 +for line in version_contents: + if (line.startswith('MAJOR_VERSION')): + major = line[14:-1] + if (line.startswith('MINOR_VERSION')): + minor = line[14:-1] + if (line.startswith('PATCH_LEVEL')): + patch = line[12:-1] + if (line.startswith('VERSION_STABLE')): + VERSION_STABLE = line[15:-1] + if (line.startswith('VERSION_DEVEL')): + VERSION_DEVEL = line[14:-1] + +VERSION = str(major)+'.'+str(minor)+'.'+str(patch) + +def make_macro(name, string): + print "@macro", name + print string + print "@end macro" + print "" + +print "@c ************************ Version numbers ************" +make_macro("version", VERSION) +make_macro("versionStable", VERSION_STABLE) +make_macro("versionDevel", VERSION_DEVEL) + + diff --git a/scripts/build/create-weblinks-itexi.py b/scripts/build/create-weblinks-itexi.py new file mode 100644 index 0000000000..c48b0085b0 --- /dev/null +++ b/scripts/build/create-weblinks-itexi.py @@ -0,0 +1,511 @@ +#!@PYTHON@ +# -*- coding: utf-8 -*- +# create-version-itexi.py + +""" when being called on lilypond.org, pass it the location of the +top source dir on the command-line. """ + +import sys +import os +import glob + +# these links are relative from /website/ on lilypond.org +depth = "../" + +### translation data -- shouldn't be here; see issue +### http://code.google.com/p/lilypond/issues/detail?id=1050 + +#langs = ['', 'cs', 'de', 'es', 'fr', 'hu', 'it', 'ja', 'nl', 'zh'] +langs = ['', 'cs', 'de', 'es', 'fr', 'hu', 'it', 'ja', 'nl', 'zh'] + +# Get/update node translations +''' +for i in cs de es fr hu it ja nl zh; do + echo "'"$i"': {" + (echo '--' ; grep -nH -B1 translationof Documentation/$i/web/* ) \ + | pytt '^--\n.*@(?:unnum|sub)[^ ]* (.*)\n.*@translationof (.*)\n' "'\2': '\1',\n" \ + | grep -E 'Source|Learning|Glossary|Essay|Notation|Usage|Snippets|Web|Changes|Extending|Internals|Contributor' + echo "}," +done +''' + +translations = { + 'de': { + 'Source': 'Quellen', + 'Learning': 'Einführung', + 'Music glossary': 'Glossar', + 'Essay': 'Aufsatz', + 'Notation': 'Notation', + 'Usage': 'Benutzung', + 'Snippets': 'Schnipsel', + 'Web': 'Web', + 'Changes': 'Änderungen', + + 'Extending': 'Erweitern', + 'Internals': 'Interna', + 'Contributor': 'Beitragen', + + ' (split HTML)': ' (geteiltes HTML)', + ' (big HTML)': ' (großes HTML)', + + 'Regression tests for ': 'Regressionstests für ', + 'PDF of regtests for ': 'PDF der Regressionstests für ', + 'MusicXML Regression tests for ': 'MusicXML Regressionstests für ', + 'PDF of MusicXML regtests for ': 'PDF der MusicXML Regressionstests für ', + + 'Doc tarball for ': 'Dokumentation tar-gepackt für ', + ' (did not exist in 2.12)': ' (nicht existent in 2.12)', + }, + 'es': { + 'Source': 'Código fuente', + + 'Learning': 'Aprendizaje', + 'Music glossary': 'Glosario', + 'Essay': 'Ensayo', + 'Notation': 'Notación', + 'Usage': 'Utilización', + 'Snippets': 'Fragmentos', + 'Web': 'Web', + 'Changes': 'Cambios', + 'Extending': 'Extensión', + 'Internals': 'Funcionamiento interno', + 'Contributor': 'Guía del colaborador', + +# keep the spaces! + ' (split HTML)': ' (HTML seccionado)', + ' (big HTML)': ' (HTML monolítico)', + + 'Regression tests for ': 'Pruebas de regresión para ', + 'PDF of regtests for ': 'Pruebas en PDF para ', + 'MusicXML Regression tests for ': 'Pruebas de regresión de MusicXML para ', + 'PDF of MusicXML regtests for ': 'Pruebas de MusicXML en PDF para ', + + 'Doc tarball for ': 'Tarball de la documentación para ', + ' (did not exist in 2.12)': ' (no existía en la versión 2.12)', + }, + 'fr': { + 'Source': 'Sources', + + 'Learning': 'Initiation', + 'Music glossary': 'Glossaire', + 'Essay': 'Essai', + 'Notation': 'Notation', + 'Usage': 'Utilisation', + 'Snippets': 'Morceaux choisis', + 'Web': 'Web', + 'Changes': 'Nouveautés', + 'Extending': 'Extension', + 'Internals': 'Propriétés internes', + 'Contributor': 'Guide du contributeur', + +# keep the spaces! + ' (split HTML)': ' (HTML multipages)', + ' (big HTML)': ' (HTML en page unique)', + + 'Regression tests for ': 'Tests de régression pour ', + 'PDF of regtests for ': 'PDF des tests de régression pour ', + 'MusicXML Regression tests for ': 'Tests de régression de MusicXML pour ', + 'PDF of MusicXML regtests for ': 'PDF des tests de régression de MusicXML pour ', + + 'Doc tarball for ': 'Archive de la documentation pour ', + ' (did not exist in 2.12)': ' (non disponible pour la version 2.12)', + }, + 'hu': { + 'Source': 'Forrás', + 'Learning': 'Tankönyv', + 'Music glossary': 'Fogalomtár', + 'Essay': 'Esszé', + 'Notation': 'Kottaírás', + 'Usage': 'Használat', + 'Snippets': 'Kódrészletek', + 'Web': 'Web', + 'Changes': 'Változások', + 'Extending': 'Bővítés', + 'Internals': 'Belső működés', + 'Contributor': 'Közreműködés', + + ' (split HTML)': ' (HTML oldalak)', + ' (big HTML)': ' (egy nagy HTML oldal)', + + 'Regression tests for ': 'Regressziós tesztek - verzió: ', + 'PDF of regtests for ': 'PDF formátumban - verzió: ', + 'MusicXML Regression tests for ': 'MusicXML regressziós tesztek - verzió: ', + 'PDF of MusicXML regtests for ': 'PDF formátumban - verzió: ', + + 'Doc tarball for ': 'Tömörített csomag - verzió: ', + ' (did not exist in 2.12)': ' (nem létezett a 2.12-es verzióban)', + }, + 'ja': { + 'Source': 'ソース', + 'Learning': '学習', + 'Music glossary': '用語集', + 'Essay': 'エッセー', + 'Notation': '記譜法', + 'Usage': '使用方法', + 'Snippets': 'コード断片集', + 'Web': 'Web', + 'Changes': '変更点', + + #TODO + 'Extending': '拡張', + 'Internals': '内部リファレンス', + 'Contributor': '貢献者向けガイド', + +# keep the spaces! + ' (split HTML)': ' (ページ毎に分割された HTML)', + ' (big HTML)': ' (1 つの大きな HTML)', + + 'Regression tests for ': '回帰テスト バージョン ', + 'PDF of regtests for ': '回帰テスト (PDF 版) バージョン ', + 'MusicXML Regression tests for ': 'MusicXML 回帰テスト バージョン ', + 'PDF of MusicXML regtests for ': 'MusicXML 回帰テスト (PDF 版) バージョン ', + + 'Doc tarball for ': 'ドキュメント アーカイブ バージョン ', + ' (did not exist in 2.12)': ' (バージョン 2.12 には存在しません)', + + }, + 'nl': { + 'Source': 'Broncode', + + 'Learning': 'Beginnen', + 'Music glossary': 'Terminologie', + 'Essay': 'Essay', + 'Notation': 'Notatie', + 'Usage': 'Gebruik', + 'Snippets': 'Snippers', + 'Web': 'Web', + 'Changes': 'Veranderingen', + 'Extending': 'Uitbreidingen', + 'Internals': 'Internals', + 'Contributor': 'Contributor', + +# keep the spaces! + ' (split HTML)': ' (opgesplitste HTML)', + ' (big HTML)': ' (grote pagina HTML)', + + 'Regression tests for ': 'Regressietesten voor ', + 'PDF of regtests for ': 'PDF van regressietesten voor ', + 'MusicXML Regression tests for ': 'MusicXML regressietesten voor ', + 'PDF of MusicXML regtests for ': 'MusicXML regressietesten voor ', + + 'Doc tarball for ': 'Tarball met documentation voor ', + ' (did not exist in 2.12)': ' (bestond nog niet in 2.12)', + }, + 'zh': { + 'Source': '源码', + 'Learning': '学习', + 'Music glossary': '音乐术语表', + 'Essay': '文章', + 'Notation': '五线谱', + 'Usage': '使用', + 'Snippets': '片断', + 'Web': 'Web', + 'Changes': '变化', + + 'Extending': '扩展', + 'Internals': '内部', + 'Contributor': '贡献者', + +# keep the spaces! + ' (split HTML)': ' (分开的HTML', + ' (big HTML)': ' (大的HTML)', + + 'Regression tests for ': '回归测试', + 'PDF of regtests for ': '回归的PDF', + 'MusicXML Regression tests for ': 'MusicXML回归测试', + 'PDF of MusicXML regtests for ': 'MusicXML的PDF回归', + + 'Doc tarball for ': '为文档压缩包', + ' (did not exist in 2.12)': ' (在2.12中不存在)', + }, + } + + + + +### actual program + + +VERSION_STABLE = "" +VERSION_DEVEL = "" + +try: + topDir = sys.argv[1] +except: + myDir = os.path.dirname(sys.argv[0]) + # use two abspaths to work around some windows python bug + topDir = os.path.join(os.path.abspath(myDir)+os.sep+'..'+os.sep+'..'+os.sep) + topDir = os.path.abspath( topDir ) + + +# TODO: this might be useful for other scripts; can we make it available? +manuals = map(lambda x: os.path.splitext(x)[0], + map(os.path.basename, + glob.glob(os.path.join(topDir,'Documentation', '*.te??')))) +#manuals = map(lambda x: 'glossary' if x=='music-glossary' else x, manuals) +manuals.append('internals') + + +version_file_path = os.path.join(topDir, "VERSION") + +version_contents = open(version_file_path).readlines() +major = 0 +minor = 0 +patch = 0 +for line in version_contents: + if (line.startswith('MAJOR_VERSION')): + major = line[14:-1] + if (line.startswith('MINOR_VERSION')): + minor = line[14:-1] + if (line.startswith('PATCH_LEVEL')): + patch = line[12:-1] + if (line.startswith('VERSION_STABLE')): + VERSION_STABLE = line[15:-1] + if (line.startswith('VERSION_DEVEL')): + VERSION_DEVEL = line[14:-1] + +VERSION = str(major)+'.'+str(minor)+'.'+str(patch) + +def _ (string, lang): + return translations.get (lang.split ('_')[0], {}).get (string, string) + +getTrans = _ +# let's not barf, but print a warning when something's missing +def getTrans(text, lang): + trans = _ (text, lang) + if not trans: + trans = text + sys.stderr.write ('create-weblinks-itexi: warning: [%(lang)s]: translation missing for: %(text)s\n' % locals ()) + return trans + +def macroLang(name, lang): + if (lang != ''): + return name + '-' + lang + return name + +def make_macro(name, string): + print "@macro", name + print string + print "@end macro" + print "" + +def make_download(name, osA, osB, version, revision, text): + string = "@uref{http://download.linuxaudio.org/lilypond/binaries/" + string += osA + "lilypond-" + string += version + "-" + revision + string += "." + osB + ",\n" + string += text + string += ": LilyPond " + string += version + "-" + revision + string += "}" + make_macro(name, string) + +def make_download_source(name, vstring, version, lang): + string = "@uref{http://download.linuxaudio.org/lilypond/sources/" + string += vstring + "/" + string += "lilypond-" + version + ".tar.gz" + string += ", " + string += getTrans("Source", lang) + string += ": lilypond-" + version + ".tar.gz" + string += "}" + make_macro(macroLang(name,lang), string) + +def make_all_downloads(macroName, version): + make_download("download"+macroName+"LinuxNormal", "linux-x86/", + "linux-x86.sh", version, "1", "Linux x86") + make_download("download"+macroName+"LinuxBig", "linux-64/", + "linux-64.sh", version, "1", "Linux 64") + make_download("download"+macroName+"LinuxPPC", "linux-ppc/", + "linux-ppc.sh", version, "1", "Linux PPC") + + make_download("download"+macroName+"FreeBSDNormal", "freebsd-x86/", + "freebsd-x86.sh", version, "1", "FreeBSD i386") + make_download("download"+macroName+"FreeBSDBig", "freebsd-64/", + "freebsd-64.sh", version, "1", "FreeBSD amd64") + + make_download("download"+macroName+"DarwinNormal", "darwin-x86/", + "darwin-x86.tar.bz2", version, "1", "MacOS X x86") + make_download("download"+macroName+"DarwinPPC", "darwin-ppc/", + "darwin-ppc.tar.bz2", version, "1", "MacOS X PPC") + + make_download("download"+macroName+"Windows", "mingw/", + "mingw.exe", version, "1", "Windows") + +def make_ver_link(macroname, url, linktext): + string = "@uref{" + string += url + string += "," + string += linktext + string += "}" + make_macro(macroname, string) + +# TODO: this kind of thing should really be in a central place for +# lilypond python build scripts +def translateNameToUrl(manual, version): + ver_split = version.split('.') + ver_minor = ver_split[0] + '.' + ver_split[1] + url = depth + "doc/v" + ver_minor + "/Documentation/" + + if (ver_minor == '2.12'): + if (manual=='learning'): + return url+'user/lilypond-learning' + elif (manual=='internals'): + return url+'user/lilypond-internals' + elif (manual=='notation'): + return url+'user/lilypond' + elif (manual=='usage'): + return url+'user/lilypond-program' + elif (manual=='snippets'): + return url+'../input/lsr/lilypond-snippets' + elif (manual=='changes'): + return url+'topdocs/NEWS.html' + elif (manual=='music-glossary'): + return url+'user/music-glossary' + elif (manual=='essay'): + return url+'user/lilypond-learning/Background.html' + elif (manual=='extending'): + return url+'user/lilypond/Interfaces-for-programmers.html' + else: + return '' + else: + return url+manual + +def addLang(url, lang): + if lang: + base, ext = os.path.splitext(url) + return base + '.' + lang + ext + else: + return url + +def make_manual_links(name, version, lang): + """Here is where all the macros manualStableLearningSplit, + manualStableLearningBig, manualStableLearningSplitNoName, etc. are + created on the fly. Hopefully this documentation string will help + others a bit while grepping for those. + """ + for m in manuals: + manual = m + # TODO: this is a stupid way of doing it + if (m=='music-glossary'): + mshort = 'Glossary' + else: + mshort = m.capitalize() + if (manual=='music-glossary'): + manual = 'Music glossary' + url = translateNameToUrl(m, version) + + if (url == ''): + # can't have a comma here due to texinfo + make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang), + "http://lilypond.org", + mshort+getTrans(" (did not exist in 2.12)",lang)) + make_ver_link(macroLang("manual"+name+mshort+'Split',lang), + "http://lilypond.org", + mshort+getTrans(" (did not exist in 2.12)",lang)) + make_ver_link(macroLang("manual"+name+mshort+'Big',lang), + "http://lilypond.org", + mshort+getTrans(" (did not exist in 2.12)",lang)) + make_ver_link(macroLang("manual"+name+mshort+'SplitNoName',lang), + "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 + # until 2.14 is out. -gp + if (url.endswith('.html')): + make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang), + addLang(url, lang), + getTrans(manual.capitalize(),lang) + '.pdf') + make_ver_link(macroLang("manual"+name+mshort+'Split',lang), + addLang(url, lang), + getTrans(manual.capitalize(),lang) + + getTrans(' (split HTML)',lang)) + make_ver_link(macroLang("manual"+name+mshort+'Big',lang), + addLang(url, lang), + getTrans(manual.capitalize(),lang) + + getTrans(' (big HTML)',lang)) + newurl = url + else: + make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang), + # TODO: this is an even stupider way of doing it + addLang(url+'.pdf', lang), + getTrans(manual.capitalize(),lang) + '.pdf') + make_ver_link(macroLang("manual"+name+mshort+'Split',lang), + addLang(url + '/index.html', lang), + getTrans(manual.capitalize(),lang) + + getTrans(' (split HTML)',lang)) + make_ver_link(macroLang("manual"+name+mshort+'Big',lang), + addLang(url + '-big-page.html', lang), + getTrans(manual.capitalize(),lang) + + getTrans(' (big HTML)',lang)) + newurl = url + '/index.html' + make_ver_link(macroLang("manual"+name+mshort+'SplitNoName',lang), + addLang(newurl, lang), + getTrans(manual.capitalize(),lang)) + +def make_regtest_links(name, version, lang): + ver_split = version.split('.') + ver_minor = ver_split[0] + '.' + ver_split[1] + url = depth + "doc/v" + ver_minor + "/input/regression/" + + make_ver_link(macroLang("regtest"+name, lang), + url+"collated-files.html", + getTrans("Regression tests for ", lang)+version) + make_ver_link(macroLang("regtest"+name+"Pdf", lang), + url+"collated-files.pdf", + getTrans("PDF of regtests for ", lang)+version) + make_ver_link(macroLang("regtest"+name+"Xml", lang), + url+"musicxml/collated-files.html", + getTrans("MusicXML Regression tests for ", lang)+version) + make_ver_link(macroLang("regtest"+name+"Abc", lang), + url+"abc2ly/collated-files.html", + getTrans("abc2ly Regression tests for ", lang)+version) + make_ver_link(macroLang("regtest"+name+"LilypondBook", lang), + url+"lilypond-book/collated-files.html", + getTrans("lilypond-book Regression tests for ", lang)+version) + make_ver_link(macroLang("regtest"+name+"XmlPdf", lang), + url+"musicxml/collated-files.pdf", + getTrans("PDF of MusicXML regtests for ", lang)+version) + make_ver_link(macroLang("regtest"+name+"AbcPdf", lang), + url+"abc2ly/collated-files.pdf", + getTrans("PDF of abc2ly regtests for ", lang)+version) + make_ver_link(macroLang("regtest"+name+"LilypondBookPdf", lang), + url+"lilypond-book/collated-files.pdf", + getTrans("PDF of lilypond-book regtests for ", lang)+version) + +def make_doctarball_links(name, version, lang): + url = depth + "download/binaries/documentation/lilypond-" + # ugly FIXME, but proper build number support isn't Critical. + url += version + "-1" + url += ".documentation.tar.bz2" + make_ver_link(macroLang("doctarball"+name, lang), + url, getTrans("Doc tarball for ", lang)+version) + +print "@c ************************ Download binaries ************" +make_all_downloads("Stable", VERSION_STABLE) +make_all_downloads("Devel", VERSION_DEVEL) + +print "@c ************************ Download source ************" +# FIXME: icky hard-coding! -gp +for lang in langs: + print "@c *********", lang, "***" + make_download_source("downloadStableSource","v2.14",VERSION_STABLE,lang) + make_download_source("downloadDevelSource","v2.15",VERSION_DEVEL,lang) + +print "@c ************************ Manual links ************" +for lang in langs: + print "@c *********", lang, "***" + make_manual_links("Stable", VERSION_STABLE,lang) + make_manual_links("Devel", VERSION_DEVEL,lang) + + make_doctarball_links("Stable", VERSION_STABLE,lang) + make_doctarball_links("Devel", VERSION_DEVEL,lang) + +print "@c ************************ Regtest links ************" +for lang in langs: + print "@c *********", lang, "***" + make_regtest_links("Stable", VERSION_STABLE,lang) + make_regtest_links("Devel", VERSION_DEVEL,lang) + + diff --git a/scripts/build/extract_texi_filenames.py b/scripts/build/extract_texi_filenames.py index bf0c6da5ed..fcb464d53d 100644 --- a/scripts/build/extract_texi_filenames.py +++ b/scripts/build/extract_texi_filenames.py @@ -18,9 +18,17 @@ # NODE\tFILENAME\tANCHOR # LANG is the document language in case it's not 'en' # Note: The filename does not have any extension appended! -# This file can then be used by our texi2html init script to determine +# This file should then be used by our texi2html init script to determine # the correct file name and anchor for external refs +# For translated documentation: cross-references to nodes that exist +# only in documentation in English are allowed, that's why the already +# generated map file of docs in English is loaded with +# --master-map-file option, then the node names that are defined in +# the map for the manual in English but not in the translated manual +# are added to the map for the translated manual. + + import sys import re import os @@ -29,7 +37,8 @@ import getopt options_list, files = getopt.getopt (sys.argv[1:],'o:s:hI:m:', ['output=', 'split=', 'help', 'include=', - 'master-map-file=']) + 'master-map-file=', + 'known-missing-files=']) help_text = r"""Usage: %(program_name)s [OPTIONS]... TEXIFILE... Extract files names for texinfo (sub)sections from the texinfo files. @@ -41,6 +50,8 @@ Options: -o, --output=DIRECTORY write .xref-map files to DIRECTORY -s, --split=MODE split manual according to MODE. Possible values are section and custom (default) + --known-missing-files a filename which has a list of files known + to be missing for this make """ def help (text): @@ -49,8 +60,10 @@ def help (text): outdir = '.' split = "custom" -include_path = [] +include_path = ['.',] master_map_file = '' +known_missing_files = [] +known_missing_files_file = '' initial_map = {} for opt in options_list: o = opt[0] @@ -60,6 +73,8 @@ for opt in options_list: if o == '-I' or o == '--include': if os.path.isdir (a): include_path.append (a) + else: + print 'NOT A DIR from: ', os.getcwd (), a elif o == '-o' or o == '--output': outdir = a elif o == '-s' or o == '--split': @@ -67,16 +82,25 @@ for opt in options_list: elif o == '-m' or o == '--master-map-file': if os.path.isfile (a): master_map_file = a + elif o == '--known-missing-files': + if os.path.isfile (a): + known_missing_files_file = a + else: + print 'Missing files list file not found: ', a else: raise Exception ('unknown option: ' + o) +if known_missing_files_file: + missing_files = open (known_missing_files_file, 'r') + known_missing_files = missing_files.read().splitlines() + missing_files.close() if not os.path.isdir (outdir): if os.path.exists (outdir): os.unlink (outdir) os.makedirs (outdir) -include_re = re.compile (r'@include ((?!../lily-).*?\.i?texi)$', re.M) +include_re = re.compile (r'@include ((?!../lily-).*?\.i?te(xi|ly))$', re.M) whitespaces = re.compile (r'\s+') section_translation_re = re.compile ('^@(node|(?:unnumbered|appendix)\ (?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|\ @@ -85,15 +109,19 @@ section_translation_re = re.compile ('^@(node|(?:unnumbered|appendix)\ external_node_re = re.compile (r'\s+@c\s+external.*') def expand_includes (m, filename): - filepath = os.path.join (os.path.dirname (filename), m.group(1)) + include_name = m.group (1) + filepath = os.path.join (os.path.dirname (filename), include_name) if os.path.exists (filepath): return extract_sections (filepath)[1] else: for directory in include_path: - filepath = os.path.join (directory, m.group(1)) + filepath = os.path.join (directory, include_name) if os.path.exists (filepath): return extract_sections (filepath)[1] - print "Unable to locate include file " + filepath + if not (include_name in known_missing_files): + # Not found + print 'No such file: ' + include_name + print 'Search path: ' + ':'.join (include_path) return '' lang_re = re.compile (r'^@documentlanguage (.+)', re.M) @@ -150,9 +178,10 @@ def texinfo_file_name(title): result = 't_g' + result return result -texinfo_re = re.compile (r'@.*{(.*)}') +texinfo_re = re.compile (r'@.*?{(.*?)}') def remove_texinfo (title): - return texinfo_re.sub (r'\1', title) + title = title.replace ('--', '-') + return texinfo_re.sub (r'\1', title).strip () def create_texinfo_anchor (title): return texinfo_file_name (remove_texinfo (title)) @@ -181,6 +210,7 @@ def process_sections (filename, lang_suffix, page): sections = section_translation_re.findall (page) basename = os.path.splitext (os.path.basename (filename))[0] p = os.path.join (outdir, basename) + lang_suffix + '.xref-map' + print 'writing:', p f = open (p, 'w') this_title = '' @@ -201,7 +231,6 @@ def process_sections (filename, lang_suffix, page): if this_title in initial_map: del initial_map[this_title] elif sec[0] == "translationof": - print sec (original_node, external_node) = external_node_re.subn ('', sec[1]) original_node = remove_texinfo (original_node) # The following binds the translator to use the @@ -223,7 +252,7 @@ def process_sections (filename, lang_suffix, page): # treat this case here, too: If we already had a section # and encounter another one before the next @node, we # write out the old one and start with the new values - if had_section and this_title: + if had_section and split != 'node' and this_title: f.write (this_title + "\t" + this_filename + "\t" + this_anchor + "\n") this_title = remove_texinfo (sec[1]) this_anchor = create_texinfo_anchor (sec[1]) diff --git a/scripts/build/gen-emmentaler-scripts.py b/scripts/build/gen-emmentaler-scripts.py index 3da8840869..46fb8163dd 100644 --- a/scripts/build/gen-emmentaler-scripts.py +++ b/scripts/build/gen-emmentaler-scripts.py @@ -1,7 +1,7 @@ #!@PYTHON@ import sys import getopt -import re +import re import os (options, files) = \ @@ -22,7 +22,7 @@ for opt in options: # Ugh for design_size in [11,13,14,16,18,20,23,26]: - name = 'Emmentaler' + name = 'Emmentaler' filename = name.lower () script = '''#!@FONTFORGE@ @@ -38,9 +38,10 @@ notice += "this font, and embed this font or unaltered portions of this "; notice += "font into the document, this font does not by itself cause the "; notice += "resulting document to be covered by the GNU General Public License.";; -SetFontNames("%(name)s-%(design_size)d", "%(name)s", "%(name)s %(design_size)d", "%(design_size)d", notice, "@TOPLEVEL_VERSION@"); +SetFontNames("%(name)s-%(design_size)d", "%(name)s-%(design_size)d", "%(name)s-%(design_size)d", "", notice, "@TOPLEVEL_VERSION@"); MergeFonts("feta%(design_size)d.pfb"); +MergeFonts("feta-noteheads%(design_size)d.pfb"); MergeFonts("parmesan%(design_size)d.pfb"); # load nummer/din after setting PUA. @@ -74,6 +75,7 @@ LoadTableFromFile("LILY", "feta%(design_size)d.otf-gtable"); Generate("%(filename)s-%(design_size)d.otf"); Generate("%(filename)s-%(design_size)d.svg"); +Generate("%(filename)s-%(design_size)d.woff"); ''' % vars() basename = '%s-%d' % (filename, design_size) @@ -87,9 +89,9 @@ Generate("%(filename)s-%(design_size)d.svg"); ns = [] for s in subfonts: ns.append ('%s' % (s % vars())) - + subfonts_str = ' '.join (ns) - + open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str) path = os.path.join (outdir, '%s-%d.dep' % (filename, design_size)) diff --git a/scripts/build/grand-replace.py b/scripts/build/grand-replace.py index dc0697d475..aa48a53ef3 100644 --- a/scripts/build/grand-replace.py +++ b/scripts/build/grand-replace.py @@ -1,22 +1,21 @@ #! @PYTHON@ -''' - Copyright (c) 2009--210 Jan Nieuwenhuizen - - 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 2, 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -''' +# This file is part of LilyPond, the GNU music typesetter. +# +# Copyright (C) 2009--2011 Jan Nieuwenhuizen +# +# 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 . import datetime import os @@ -46,7 +45,8 @@ copied_files = [ 'txi-de.tex', 'txi-en.tex', 'txi-fr.tex', - 'txi-sf.tex', + 'txi-es.tex', + 'txi-it.tex', ] def main (): @@ -58,7 +58,7 @@ def main (): last_year = year - 1 last_year_1d = last_year % 10 for f in files: - pytt.pytt ('(Copyright|\(c\)|\(C\)|@copyright\{\})\s*%(last_year)s([^-]|$)' % locals (), + pytt.pytt ('(Copyright|\(c\)|\(C\)|@copyright\{\})\s*%(last_year)s(?=[^-]|$)' % locals (), r'\1 %(last_year)s--%(year)s' % locals (), f) pytt.pytt ('(Copyright|\(c\)|\(C\)|@copyright\{\})\s*([^-]*)--(20[0-9][0-%(last_year_1d)s])' % locals (), diff --git a/scripts/build/html-gettext.py b/scripts/build/html-gettext.py deleted file mode 100644 index ccfe6937c0..0000000000 --- a/scripts/build/html-gettext.py +++ /dev/null @@ -1,126 +0,0 @@ -#!@PYTHON@ -# html-gettext.py - -# USAGE: html-gettext.py [-o OUTDIR] LANG FILES -# -# -o OUTDIR specifies that output files should be written in OUTDIR -# rather than be overwritten -# - -import sys -import re -import os -import getopt - -import langdefs - -optlist, args = getopt.getopt(sys.argv[1:],'o:') -lang = args[0] -files = args [1:] - -outdir = '.' -for x in optlist: - if x[0] == '-o': - outdir = x[1] - -double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep -my_gettext = langdefs.translation[lang] - -html_codes = ((' -- ', ' – '), - (' --- ', ' — '), - ("'", '’')) -texi_html_conversion = { - 'command': { - 'html2texi': - (re.compile (r'(?:|)(.*?)(?:|)'), - r'@command{\1}'), - 'texi2html': - (re.compile (r'@command{(.*?)}'), - r'\1'), - }, - 'code': { - 'html2texi': - (re.compile (r'(.*?)'), - r'@code{\1}'), - 'texi2html': - (re.compile (r'@code{(.*?)}'), - r'\1'), - }, - } - -whitespaces = re.compile (r'\s+') - - -def _ (s): - if not s: - return '' - str = whitespaces.sub (' ', s) - for c in html_codes: - str = str.replace (c[1], c[0]) - for command in texi_html_conversion: - d = texi_html_conversion[command] - str = d['html2texi'][0].sub (d['html2texi'][1], str) - str = my_gettext (str) - str = d['texi2html'][0].sub (d['texi2html'][1], str) - for c in html_codes: - str = str.replace (c[0], c[1]) - return str - -link_re = re.compile (r'') - -def link_gettext (m): - return '' - -makeinfo_title_re = re.compile (r'([^<]*?) - ([^<]*?)') - -def makeinfo_title_gettext (m): - return '' + _ (m.group (1)) + ' - ' + m.group (2) + '' - -texi2html_title_re = re.compile (r'(.+): ([A-Z\d.]+ |)(.+?)') - -def texi2html_title_gettext (m): - return '' + _ (m.group (1)) + double_punct_char_separator + ': ' \ - + m.group (2) + _ (m.group (3)) + '' - -a_href_re = re.compile ('(?s)[^>]*?href="[\\w.#-_]+"[^>]*?>)(?P)?\ -(?PAppendix )?(?P[A-Z0-9.]+ | (?:<){1,2} | [^>:]+?: | |)\ -(?P(?:|||[^>])+?)(?P(?(code)|))\ -(?P (?:>){1,2} | |):?') - -def a_href_gettext (m): - s = '' - if m.group(0)[-1] == ':': - s = double_punct_char_separator + ':' - t = '' - if m.group ('appendix'): - t = _ (m.group ('appendix')) - return '' + s - -h_re = re.compile (r'\s*(Appendix |)([A-Z\d.]+ |)(.+?)\s*') - -def h_gettext (m): - if m.group (3): - s = _ (m.group (3)) - else: - s= '' - return '' + s +\ - m.group (4) + _ (m.group (5)) + '' - -for filename in files: - f = open (filename, 'r') - page = f.read () - f.close () - page = link_re.sub (link_gettext, page) - page = makeinfo_title_re.sub (makeinfo_title_gettext, page) - page = texi2html_title_re.sub (texi2html_title_gettext, page) - page = a_href_re.sub (a_href_gettext, page) - page = h_re.sub (h_gettext, page) - for w in ('Next:', 'Previous:', 'Up:'): - page = page.replace (w, _ (w)) - page = langdefs.LANGDICT[lang].html_filter (page) - f = open (os.path.join (outdir, filename), 'w') - f.write (page) - f.close () diff --git a/scripts/build/html-to-texi.py b/scripts/build/html-to-texi.py new file mode 100644 index 0000000000..a7005ec150 --- /dev/null +++ b/scripts/build/html-to-texi.py @@ -0,0 +1,94 @@ +#! @PYTHON@ + +import re +import sys + +header = ''' +''' + +print header + +body = sys.stdin.read () +body = re.sub ('(?ms)', '', body) +body = re.sub ('(?ms)\n*\s*', r'@ignore\n\1\n@end ignore', body) +body = re.sub ('(?ms)(.*?)', r'@ref{\1,\2}', body) + +body = re.sub ('(?ms) *', r'@node \1 ', body) +body = re.sub ('(?ms)

    (.*?)

    ', r'@chapheading \1', body) +body = re.sub ('(?ms)

    (.*?)

    ', r'@unnumberedsec \1', body) +#body = re.sub ('(?ms) *', '', body) +#body = re.sub ('(?ms)

    (.*?)

    ', r'@node \1\n@unnumberedsec \1', body) + +body = re.sub ('(?ms)]*src="*([^">]*)(.png|.jpeg)"*.*?>', r'@image{\1,,,\2}', body) +body = re.sub ('\n*
    \s*\n*', r'@*\n', body) +body = re.sub ('\n*]*>\s*\n*', r'@*\n', body) +body = re.sub ('(?ms)(.*?)', r'@emph{\1}', body) +body = re.sub ('(?ms)
    (.*?)
    ', r'@quote{\1}', body) +body = re.sub ('(?ms)(.*?)', r'@code{\1}', body) +body = re.sub ('(?ms)
  • (.*?)(
  • )', r'@item\n\1\n', body) +body = re.sub ('(?ms)
  • (.*?)(
  • )', r'@item\n\1\n\2', body) +body = re.sub ('(?ms)
  • (.*?)(
  • )', r'@item\n\1\n\2', body) +body = re.sub ('(?ms)
  • (.*?)(
  • )', r'@item\n\1\n\2', body) +body = re.sub ('(?ms)
  • (.*?)(
  • )', r'@item\n\1\n\2', body) +body = re.sub ('(?ms)
  • (.*?)(
  • )', r'@item\n\1\n\2', body) +body = re.sub ('(?ms)
  • (.*?)()', r'@item\n\1\n\2', body) +body = re.sub ('(?ms)
      ', r'@itemize', body) +body = re.sub ('(?ms)
    ', r'@end itemize', body) + +# added for the bib => bib2html => html2texinfo chain. -gp +body = re.sub ('(?ms)', r'', body) +body = re.sub ('(?ms)(.*?)()', r'', body) +body = re.sub ('(?ms)', r'', body) +body = re.sub ('(?ms)', r'', body) +body = re.sub ('(?ms)', r'', body) + +body = re.sub ('(?ms)
    ', r'@table @emph', body) +body = re.sub ('(?ms)
    ', r'@end table', body) + +body = re.sub ('(?ms)
    (.*?)(
    )', r'@item \1', body) +body = re.sub ('(?ms)', r'', body) +body = re.sub ('(?ms):', r'', body) +body = re.sub ('(?ms)
    (.*?)(
    )', r'\1', body) + +body = re.sub ('(?ms)(.*?)()', r'@strong{\1}', body) +body = re.sub ('(?ms)(.*?)()', r'@emph{\1}', body) + +body = re.sub ('(?ms) ', r'@tie{}', body) + +body = re.sub ('(?ms)\cite{(.*?)}', r'[\1]', body) +body = re.sub ('(?ms)\cite{(.*?)}', r'[\1]', body) + +# dangerous rule, but with the spaces should be ok +body = re.sub ('(?ms) {(.*?)} ', r' @q{\1} ', body) + +# end stuff added for the bib => bib2html => html2texinfo chain -gp +# the other lines in the file can _probably_ be trimmed. + + +body = re.sub ('(?ms)
      ', r'@enumerate POSITIVE-INTEGER', body) +body = re.sub ('(?ms)', r'@enumerate \1', body) +body = re.sub ('(?ms)
    ', r'@end enumerate', body) + +body = re.sub ('“(.*?)”', r'@qq{\1}', body) +body = re.sub ('ä', '@"a', body) +body = re.sub ('(?ms)\s*

    \s*', '\n\n', body) +body = re.sub ('\n*\s*

    \s*\n*', '\n\n', body) +body = re.sub ('(?ms)', '', body) +body = re.sub ('(?ms)(.*?)', r'@code{\1}', body) +body = re.sub ('(?ms)(.*?)', r'@emph{\1}', body) +body = re.sub ('(?ms)(.*?)', r'@strong{\1}', body) +body = re.sub ('(?ms)
    (.*?)
    ', r'@verbatim\n\1\n@end verbatim', body) +body = re.sub ('(?ms)
    (.*?)
    ', r'@verbatim\n\1\n@end verbatim', body) + +body = re.sub ('(?ms)', r'@table asis', body) +body = re.sub ('(?ms)
    ]*>', r'@table asis', body) +body = re.sub ('(?ms)
    ', r'@end table', body) +body = re.sub ('(?ms)(.*?)', r'@item\n\1\n', body) +body = re.sub ('(?ms)(.*?)', r'@item\n\1\n', body) +body = re.sub ('(?ms)]*>(.*?)', r'@tab\n\1\n', body) + +#body = re.sub ('(?ms)\s*

    \s*((?:.|\n)*)\n\n', '@divClass{float-\\1}\n\\2\n@divEnd', body) +body = re.sub ('(?ms)\s*

    \s*', '\n\n@divClass{float-\\1}\n@divEnd\n', body) + +print body + diff --git a/scripts/build/lilypond-words.py b/scripts/build/lilypond-words.py index e9851f6231..4768c5dfea 100644 --- a/scripts/build/lilypond-words.py +++ b/scripts/build/lilypond-words.py @@ -21,8 +21,13 @@ keywords += ['include', 'maininput', 'version'] s = open ('lily/lily-lexer.cc', 'r').read () keywords += [w for w in re.findall (r"\s*{\"(.+)\",\s*.*},\s*\n", s)] -s = open ('scm/markup.scm', 'r').read () -keywords += [w for w in re.findall (r"(?m)^\s*\(cons\s*([a-z-]+)-markup", s)] +# markup commands +for name in ['ly/toc-init.ly', + 'scm/define-markup-commands.scm', + 'scm/fret-diagrams.scm', + 'scm/harp-pedals.scm']: + s = open (name, 'r').read () + keywords += [w for w in re.findall (r"\(define-markup[a-z-]+\s+\(([a-zA-Z-]+)", s)] # identifiers and keywords for name in ['ly/chord-modifiers-init.ly', @@ -36,26 +41,14 @@ for name in ['ly/chord-modifiers-init.ly', 'ly/scale-definitions-init.ly', 'ly/script-init.ly', 'ly/spanners-init.ly', - 'ly/declarations-init.ly', - 'ly/params-init.ly']: + 'ly/toc-init.ly', + 'ly/declarations-init.ly']: s = open (name, 'r').read () keywords += [w for w in re.findall (r"(?m)^\s*\"?([a-zA-Z]+)\"?\s*=", s)] # note names -for name in ['ly/catalan.ly', - 'ly/deutsch.ly', - 'ly/drumpitch-init.ly', - 'ly/english.ly', - 'ly/espanol.ly', - 'ly/italiano.ly', - 'ly/nederlands.ly', - 'ly/norsk.ly', - 'ly/portugues.ly', - 'ly/suomi.ly', - 'ly/svenska.ly', - 'ly/vlaams.ly']: - s = open (name, 'r').read () - note_names += [n for n in re.findall (r"(?m)^\s*\(([a-z]+)[^l]+ly:make-pitch", s)] +s = open ('scm/define-note-names.scm', 'r').read () +note_names += [n for n in re.findall (r"(?m)^\s*\(([a-z]+)\s+\.\s+,\(ly:make-pitch", s)] # reserved words for name in ['ly/engraver-init.ly', @@ -126,9 +119,9 @@ if out_el: '//markup - { _ } -', '//notes - { _ } -', '//relative - % { _ } -', - '//score - { //n /? //simultaneous { //n _ //n } /! //n //paper { } //n /? //midi { } //n /! } //n -', + '//score - { //n /? //simultaneous { //n _ //n } /! //n //layout { } //n /? //midi { } //n /! } //n -', '//simultaneous - { _ } -', - '//sustainDown - _ //sustainUp -', + '//sustainOn - _ //sustainOff -', '//times - % { _ } -', '//transpose - % { _ } -', ''] @@ -146,4 +139,4 @@ if out_vim: f.write ('syn match lilyNote \"\\<\\(\\(\\(') f.write (''.join ([w + '\\|' for w in note_names])) - f.write ('a\\)\\([,\']\\)\\{,4}\\([?!]\\)\\?\\)\\|s\\|r\\)\\(\\(128\\|64\\|32\\|16\\|8\\|4\\|2\\|1\\|\\\\breve\\|\\\\longa\\|\\\\maxima\\)[.]\\{,8}\\)\\?\\(\\A\\|\\n\\)\"me=e-1\n') + f.write ('a\\)\\([,\']\\)\\{,4}\\([?!]\\)\\?\\)\\|s\\|r\\|R\\|q\\)\\(\\(128\\|64\\|32\\|16\\|8\\|4\\|2\\|1\\|\\\\breve\\|\\\\longa\\|\\\\maxima\\)[.]\\{,8}\\)\\?\\(\\A\\|\\n\\)\"me=e-1\n') diff --git a/scripts/build/lys-to-tely.py b/scripts/build/lys-to-tely.py index c9d698f92c..c4e387547b 100644 --- a/scripts/build/lys-to-tely.py +++ b/scripts/build/lys-to-tely.py @@ -27,6 +27,7 @@ Options: options -o, --output=NAME write tely doc to NAME -t, --title=TITLE set tely doc title TITLE + -a, --author=AUTHOR set tely author AUTHOR --template=TEMPLATE use TEMPLATE as Texinfo template file, instead of standard template; TEMPLATE should contain a command '%(include_snippets)s' to tell where to insert LY-FILEs. When this @@ -38,10 +39,11 @@ def help (text): sys.exit (0) (options, files) = getopt.getopt (sys.argv[1:], 'f:hn:t:', - ['fragment-options=', 'help', 'name=', 'title=', 'template=']) + ['fragment-options=', 'help', 'name=', 'title=', 'author=', 'template=']) name = "ly-doc" title = "Ly Doc" +author = "Han-Wen Nienhuys and Jan Nieuwenhuizen" template = '''\input texinfo @setfilename %%(name)s.info @settitle %%(title)s @@ -55,7 +57,7 @@ template = '''\input texinfo @c fool ls-latex @ignore -@author Han-Wen Nienhuys and Jan Nieuwenhuizen +@author %%(author)s @title %%(title)s @end ignore @@ -71,14 +73,16 @@ for opt in options: o = opt[0] a = opt[1] if o == '-h' or o == '--help': - # We can't use vars () inside a function, as that only contains all - # local variables and none of the global variables! Thus we have to + # We can't use vars () inside a function, as that only contains all + # local variables and none of the global variables! Thus we have to # generate the help text here and pass it to the function... help (help_text % vars ()) elif o == '-n' or o == '--name': name = a elif o == '-t' or o == '--title': title = a + elif o == '-a' or o == '--author': + author = a elif o == '-f' or o == '--fragment-options': fragment_options = a elif o == '--template': @@ -87,11 +91,26 @@ for opt in options: raise Exception ('unknown option: ' + o) texi_file_re = re.compile ('.*\.i?te(ly|xi)$') +html_file_re = re.compile ('.*\.i?htm(l)?$') +xml_file_re = re.compile ('.*\.i?xml$') +tex_file_re = re.compile ('.*\.i?(la)?tex$') +pdf_file_re = re.compile ('.*\.i?pdf$') def name2line (n): if texi_file_re.match (n): # We have a texi include file, simply include it: s = r"@include %s" % os.path.basename (n) + elif (html_file_re.match (n) or pdf_file_re.match (n) or + xml_file_re.match (n) or tex_file_re.match (n)): + s = r""" +@ifhtml +@html +%s +
    +@end html +@end ifhtml +""" % (os.path.basename (n), os.path.basename (n)) + return s else: # Assume it's a lilypond file -> create image etc. s = r""" @@ -107,7 +126,7 @@ def name2line (n): if files: dir = os.path.dirname (name) or "." -# don't strip .tely extension, input/lsr uses .itely +# don't strip .tely extension, Documentation/snippets uses .itely name = os.path.basename (name) template = template % vars () diff --git a/scripts/build/mf-to-table.py b/scripts/build/mf-to-table.py index 2fe43d2c77..3f7b3cbb2f 100644 --- a/scripts/build/mf-to-table.py +++ b/scripts/build/mf-to-table.py @@ -1,10 +1,23 @@ #!@PYTHON@ -# mf-to-table.py -- convert spacing info in MF logs . +# mf-to-table.py -- convert spacing info in MF logs . + +# This file is part of LilyPond, the GNU music typesetter. +# +# Copyright (C) 1997--2011 Han-Wen Nienhuys +# +# 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. # -# source file of the GNU LilyPond music typesetter +# 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. # -# (c) 1997--2009 Han-Wen Nienhuys +# You should have received a copy of the GNU General Public License +# along with LilyPond. If not, see . import os import sys @@ -42,7 +55,7 @@ font_family = 'feta' def parse_logfile (fn): autolines, deps = read_log_file (fn) charmetrics = [] - + global_info = { 'filename' : os.path.splitext (os.path.basename (fn))[0] } @@ -99,7 +112,7 @@ def parse_logfile (fn): elif tags[0] == 'parameter': global_info[tags[1]] = tags[2]; - + return (global_info, charmetrics, deps) @@ -137,7 +150,7 @@ def global_lisp_table (global_info): keys = ['staffsize', 'stafflinethickness', 'staff_space', 'linethickness', 'black_notehead_width', 'ledgerlinethickness', - 'design_size', + 'design_size', 'blot_diameter' ] for k in keys: @@ -146,7 +159,7 @@ def global_lisp_table (global_info): return str - + def ps_encoding (name, global_info, charmetrics): encs = ['.notdef'] * 256 for m in charmetrics: @@ -207,9 +220,9 @@ for opt in options: depfile_nm = a elif o == '--outdir' or o == '-o': outdir_prefix = a - elif o == '--lisp': + elif o == '--lisp': char_lisp_nm = a - elif o == '--global-lisp': + elif o == '--global-lisp': global_lisp_nm = a elif o == '--enc': enc_nm = a @@ -229,6 +242,8 @@ for filenm in files: enc_name = 'FetaEncoding' if re.search ('parmesan', filenm): enc_name = 'ParmesanEncoding' + elif re.search ('feta-noteheads', filenm): + enc_name = 'FetaNoteheadsEncoding' elif re.search ('feta-brace', filenm): enc_name = 'FetaBraceEncoding' elif re.search ('feta-alphabet', filenm): diff --git a/scripts/build/output-distance.py b/scripts/build/output-distance.py index 2b49689cdf..c08ea147b8 100644 --- a/scripts/build/output-distance.py +++ b/scripts/build/output-distance.py @@ -27,7 +27,7 @@ class TempDirectory: self.dir = tempfile.mkdtemp () print 'dir is', self.dir def __del__ (self): - print 'rm -rf %s' % self.dir + print 'rm -rf %s' % self.dir os.system ('rm -rf %s' % self.dir) def __call__ (self): return self.dir @@ -51,7 +51,7 @@ def system (c): return def shorten_string (s): - threshold = 15 + threshold = 15 if len (s) > 2*threshold: s = s[:threshold] + '..' + s[-threshold:] return s @@ -61,14 +61,14 @@ def max_distance (x1, x2): for (p,q) in zip (x1, x2): dist = max (abs (p-q), dist) - + return dist def compare_png_images (old, new, dest_dir): def png_dims (f): m = re.search ('([0-9]+) x ([0-9]+)', read_pipe ('file %s' % f)) - + return tuple (map (int, m.groups ())) dest = os.path.join (dest_dir, new.replace ('.png', '.compare.jpeg')) @@ -79,7 +79,7 @@ def compare_png_images (old, new, dest_dir): ## hmmm. what to do? system ('touch %(dest)s' % locals ()) return - + dims = (min (dims1[0], dims2[0]), min (dims1[1], dims2[1])) @@ -87,7 +87,7 @@ def compare_png_images (old, new, dest_dir): system ('convert -depth 8 -crop %dx%d+0+0 %s %s/crop1.png' % (dims + (old, dir))) system ('convert -depth 8 -crop %dx%d+0+0 %s %s/crop2.png' % (dims + (new, dir))) - system ('compare -depth 8 %(dir)s/crop1.png %(dir)s/crop2.png %(dir)s/diff.png' % locals ()) + system ('compare -depth 8 -dissimilarity-threshold 1 %(dir)s/crop1.png %(dir)s/crop2.png %(dir)s/diff.png' % locals ()) system ("convert -depth 8 %(dir)s/diff.png -blur 0x3 -negate -channel alpha,blue -type TrueColorMatte -fx 'intensity' %(dir)s/matte.png" % locals ()) @@ -104,8 +104,8 @@ def interval_is_empty (i): return i[0] > i[1] def interval_length (i): - return max (i[1]-i[0], 0) - + return max (i[1]-i[0], 0) + def interval_union (i1, i2): return (min (i1[0], i2[0]), max (i1[1], i2[1])) @@ -121,7 +121,7 @@ def bbox_is_empty (b): def bbox_union (b1, b2): return (interval_union (b1[X_AXIS], b2[X_AXIS]), interval_union (b1[Y_AXIS], b2[Y_AXIS])) - + def bbox_intersection (b1, b2): return (interval_intersect (b1[X_AXIS], b2[X_AXIS]), interval_intersect (b1[Y_AXIS], b2[Y_AXIS])) @@ -132,7 +132,7 @@ def bbox_area (b): def bbox_diameter (b): return max (interval_length (b[X_AXIS]), interval_length (b[Y_AXIS])) - + def difference_area (a, b): return bbox_area (a) - bbox_area (bbox_intersection (a,b)) @@ -141,7 +141,7 @@ class GrobSignature: def __init__ (self, exp_list): (self.name, self.origin, bbox_x, bbox_y, self.output_expression) = tuple (exp_list) - + self.bbox = (bbox_x, bbox_y) self.centroid = (bbox_x[0] + bbox_x[1], bbox_y[0] + bbox_y[1]) @@ -151,13 +151,13 @@ class GrobSignature: self.bbox[0][1], self.bbox[1][0], self.bbox[1][1]) - + def axis_centroid (self, axis): - return apply (sum, self.bbox[axis]) / 2 - + return apply (sum, self.bbox[axis]) / 2 + def centroid_distance (self, other, scale): - return max_distance (self.centroid, other.centroid) / scale - + return max_distance (self.centroid, other.centroid) / scale + def bbox_distance (self, other): divisor = bbox_area (self.bbox) + bbox_area (other.bbox) @@ -166,7 +166,7 @@ class GrobSignature: difference_area (other.bbox, self.bbox)) / divisor else: return 0.0 - + def expression_distance (self, other): if self.output_expression == other.output_expression: return 0 @@ -218,7 +218,7 @@ class SystemLink: def __init__ (self, system1, system2): self.system1 = system1 self.system2 = system2 - + self.link_list_dict = {} self.back_link_dict = {} @@ -235,15 +235,15 @@ class SystemLink: self._geometric_distance = None self._expression_change_count = None self._orphan_count = None - + for g in system1.grobs (): ## skip empty bboxes. if bbox_is_empty (g.bbox): continue - + closest = system2.closest (g.name, g.centroid) - + self.link_list_dict.setdefault (closest, []) self.link_list_dict[closest].append (g) self.back_link_dict[g] = closest @@ -260,17 +260,17 @@ class SystemLink: total += d self._geometric_distance = total - + def calc_orphan_count (self): count = 0 for (g1, g2) in self.back_link_dict.items (): if g2 == None: self.orphans.append ((g1, None)) - + count += 1 self._orphan_count = count - + def calc_output_exp_distance (self): d = 0 for (g1,g2) in self.back_link_dict.items (): @@ -281,12 +281,12 @@ class SystemLink: def output_expression_details_string (self): return ', '.join ([g1.name for g1 in self.expression_changed]) - + def geo_details_string (self): results = [(d, g1,g2) for ((g1, g2), d) in self.geo_distances.items()] results.sort () results.reverse () - + return ', '.join (['%s: %f' % (g1.name, d) for (d, g1, g2) in results]) def orphan_details_string (self): @@ -296,29 +296,29 @@ class SystemLink: if self._geometric_distance == None: self.calc_geometric_distance () return self._geometric_distance - + def orphan_count (self): if self._orphan_count == None: self.calc_orphan_count () - + return self._orphan_count - + def output_expression_change_count (self): if self._expression_change_count == None: self.calc_output_exp_distance () return self._expression_change_count - + def distance (self): return (self.output_expression_change_count (), self.orphan_count (), self.geometric_distance ()) - + def read_signature_file (name): print 'reading', name - + entries = open (name).read ().split ('\n') def string_to_tup (s): - return tuple (map (float, s.split (' '))) + return tuple (map (float, s.split (' '))) def string_to_entry (s): fields = s.split('@') @@ -326,7 +326,7 @@ def read_signature_file (name): fields[3] = string_to_tup (fields[3]) return tuple (fields) - + entries = [string_to_entry (e) for e in entries if e and not e.startswith ('#')] @@ -344,13 +344,13 @@ class FileLink: def __init__ (self, f1, f2): self._distance = None self.file_names = (f1, f2) - + def text_record_string (self): return '%-30f %-20s\n' % (self.distance (), self.name () + os.path.splitext (self.file_names[1])[1] ) - + def calc_distance (self): return 0.0 @@ -359,23 +359,23 @@ class FileLink: self._distance = self.calc_distance () return self._distance - + def source_file (self): for ext in ('.ly', '.ly.txt'): base = os.path.splitext (self.file_names[1])[0] f = base + ext if os.path.exists (f): return f - + return '' - + def name (self): base = os.path.basename (self.file_names[1]) base = os.path.splitext (base)[0] base = hash_to_original_name.get (base, base) base = os.path.splitext (base)[0] return base - + def extension (self): return os.path.splitext (self.file_names[1])[1] @@ -388,13 +388,13 @@ class FileLink: def get_cell (self, oldnew): return '' - + def get_file (self, oldnew): return self.file_names[oldnew] - + def html_record_string (self, dest_dir): dist = self.distance() - + details = self.get_distance_details () if details: details_base = os.path.splitext (self.file_names[1])[0] @@ -410,7 +410,7 @@ class FileLink: name = self.name () + self.extension () file1 = self.get_file (0) file2 = self.get_file (1) - + return ''' %(dist)f @@ -426,7 +426,7 @@ class FileCompareLink (FileLink): FileLink.__init__ (self, f1, f2) self.contents = (self.get_content (self.file_names[0]), self.get_content (self.file_names[1])) - + def calc_distance (self): ## todo: could use import MIDI to pinpoint @@ -436,7 +436,7 @@ class FileCompareLink (FileLink): return 0.0 else: return 100.0; - + def get_content (self, f): print 'reading', f s = open (f).read () @@ -450,10 +450,10 @@ class GitFileCompareLink (FileCompareLink): # truncate long lines str = '\n'.join ([l[:80] for l in str.split ('\n')]) - + str = '

    %s
    ' % str return str - + def calc_distance (self): if self.contents[0] == self.contents[1]: d = 0.0 @@ -462,7 +462,7 @@ class GitFileCompareLink (FileCompareLink): return d - + class TextFileCompareLink (FileCompareLink): def calc_distance (self): import difflib @@ -471,12 +471,12 @@ class TextFileCompareLink (FileCompareLink): fromfiledate = self.file_names[0], tofiledate = self.file_names[1] ) - + self.diff_lines = [l for l in diff] self.diff_lines = self.diff_lines[2:] - + return math.sqrt (float (len ([l for l in self.diff_lines if l[0] in '-+']))) - + def get_cell (self, oldnew): str = '' if oldnew == 1: @@ -489,12 +489,12 @@ class LogFileCompareLink (TextFileCompareLink): c = TextFileCompareLink.get_content (self, f) c = re.sub ("\nProcessing `[^\n]+'\n", '', c) return c - + class ProfileFileLink (FileCompareLink): def __init__ (self, f1, f2): FileCompareLink.__init__ (self, f1, f2) self.results = [{}, {}] - + def get_cell (self, oldnew): str = '' for k in ('time', 'cells'): @@ -505,7 +505,7 @@ class ProfileFileLink (FileCompareLink): self.get_ratio (k)) return '
    %s
    ' % str - + def get_ratio (self, key): (v1,v2) = (self.results[0].get (key, -1), self.results[1].get (key, -1)) @@ -514,12 +514,12 @@ class ProfileFileLink (FileCompareLink): return 0.0 return (v1 - v2) / float (v1+v2) - + def calc_distance (self): for oldnew in (0,1): def note_info (m): self.results[oldnew][m.group(1)] = float (m.group (2)) - + re.sub ('([a-z]+): ([-0-9.]+)\n', note_info, self.contents[oldnew]) @@ -528,7 +528,7 @@ class ProfileFileLink (FileCompareLink): 'time': 0.1, 'cells': 5.0, } - + for k in ('time', 'cells'): real_val = math.tan (self.get_ratio (k) * 0.5 * math.pi) dist += math.exp (math.fabs (real_val) * factor[k]) - 1 @@ -536,11 +536,11 @@ class ProfileFileLink (FileCompareLink): dist = min (dist, 100) return dist - + class MidiFileLink (TextFileCompareLink): def get_content (self, oldnew): import midi - + data = FileCompareLink.get_content (self, oldnew) midi = midi.parse (data) tracks = midi[1] @@ -555,10 +555,10 @@ class MidiFileLink (TextFileCompareLink): ev_str = repr (e) if re.search ('LilyPond [0-9.]+', ev_str): continue - + str += ' ev %s\n' % `e` return str - + class SignatureFileLink (FileLink): @@ -576,16 +576,16 @@ class SignatureFileLink (FileLink): for l in self.system_links.values (): d = max (d, l.geometric_distance ()) orphan_distance += l.orphan_count () - + return d + orphan_distance def add_file_compare (self, f1, f2): - system_index = [] + system_index = [] def note_system_index (m): system_index.append (int (m.group (1))) return '' - + base1 = re.sub ("-([0-9]+).signature", note_system_index, f1) base2 = re.sub ("-([0-9]+).signature", note_system_index, f2) @@ -599,7 +599,7 @@ class SignatureFileLink (FileLink): self.add_system_link (link, system_index[0]) - + def create_images (self, dest_dir): files_created = [[], []] @@ -611,9 +611,9 @@ class SignatureFileLink (FileLink): outfile = (dest_dir + '/' + f).replace ('.eps', '.png') data_option = '' if options.local_data_dir: - data_option = ('-slilypond-datadir=%s/../share/lilypond/current ' + data_option = ('-slilypond-datadir=%s/share/lilypond/current ' % os.path.dirname(infile)) - + mkdir (os.path.split (outfile)[0]) cmd = ('gs -sDEVICE=png16m -dGraphicsAlphaBits=4 -dTextAlphaBits=4 ' ' %(data_option)s ' @@ -625,7 +625,7 @@ class SignatureFileLink (FileLink): system (cmd) return files_created - + def link_files_for_html (self, dest_dir): FileLink.link_files_for_html (self, dest_dir) to_compare = [[], []] @@ -635,8 +635,8 @@ class SignatureFileLink (FileLink): to_compare = self.create_images (dest_dir) else: exts += ['.png', '-page*png'] - - for ext in exts: + + for ext in exts: for oldnew in (0,1): for f in glob.glob (self.base_names[oldnew] + ext): dst = dest_dir + '/' + f @@ -644,8 +644,8 @@ class SignatureFileLink (FileLink): if f.endswith ('.png'): to_compare[oldnew].append (f) - - if options.compare_images: + + if options.compare_images: for (old, new) in zip (to_compare[0], to_compare[1]): compare_png_images (old, new, dest_dir) @@ -656,7 +656,7 @@ class SignatureFileLink (FileLink): name = 'source' else: name = '%s' % name - + return ''' @@ -670,7 +670,7 @@ class SignatureFileLink (FileLink): imgs_str = '\n'.join ([''' -
    ''' % (img, img) +
    ''' % (img, img) for img in imgs]) @@ -691,10 +691,10 @@ class SignatureFileLink (FileLink): - str = cell (os.path.splitext (self.file_names[oldnew])[0], self.name ()) + str = cell (os.path.splitext (self.file_names[oldnew])[0], self.name ()) if options.compare_images and oldnew == 1: str = str.replace ('.png', '.compare.jpeg') - + return str @@ -707,7 +707,7 @@ class SignatureFileLink (FileLink): e = '%d' % c for d in link.distance (): e += '%f' % d - + e = '%s' % e html += e @@ -718,10 +718,10 @@ class SignatureFileLink (FileLink): link.geo_details_string ()): e += "%s" % s - + e = '%s' % e html += e - + original = self.name () html = ''' @@ -754,7 +754,7 @@ import re def compare_signature_files (f1, f2): s1 = read_signature_file (f1) s2 = read_signature_file (f2) - + return SystemLink (s1, s2).distance () def paired_files (dir1, dir2, pattern): @@ -770,7 +770,7 @@ def paired_files (dir1, dir2, pattern): found = [os.path.split (f)[1] for f in glob.glob (d + '/' + pattern)] found = dict ((f, 1) for f in found) files.append (found) - + pairs = [] missing = [] for f in files[0]: @@ -781,7 +781,7 @@ def paired_files (dir1, dir2, pattern): missing.append (f) return (pairs, files[1].keys (), missing) - + class ComparisonData: def __init__ (self): self.result_dict = {} @@ -793,7 +793,7 @@ class ComparisonData: ## ugh: drop the .ly.txt for (key, val) in self.file_links.items (): - + def note_original (match, ln=val): key = ln.name () hash_to_original_name[key] = match.group (1) @@ -805,10 +805,10 @@ class ComparisonData: note_original, open (sf).read ()) else: print 'no source for', val - + def compare_trees (self, dir1, dir2): self.compare_directories (dir1, dir2) - + (root, dirs, files) = os.walk (dir1).next () for d in dirs: d1 = os.path.join (dir1, d) @@ -816,10 +816,10 @@ class ComparisonData: if os.path.islink (d1) or os.path.islink (d2): continue - + if os.path.isdir (d2): self.compare_trees (d1, d2) - + def compare_directories (self, dir1, dir2): for ext in ['signature', 'midi', @@ -828,14 +828,14 @@ class ComparisonData: 'gittxt']: (paired, m1, m2) = paired_files (dir1, dir2, '*.' + ext) - self.missing += [(dir1, m) for m in m1] - self.added += [(dir2, m) for m in m2] + self.missing += [(dir1, m) for m in m1] + self.added += [(dir2, m) for m in m2] for p in paired: if (options.max_count and len (self.file_links) > options.max_count): continue - + f2 = dir2 + '/' + p f1 = dir1 + '/' + p self.compare_files (f1, f2) @@ -849,9 +849,9 @@ class ComparisonData: '.midi': MidiFileLink, '.log' : LogFileCompareLink, '.profile': ProfileFileLink, - '.gittxt': GitFileCompareLink, + '.gittxt': GitFileCompareLink, } - + if klasses.has_key (ext): self.compare_general_files (klasses[ext], f1, f2) @@ -860,11 +860,11 @@ class ComparisonData: file_link = klass (f1, f2) self.file_links[name] = file_link - + def compare_signature_files (self, f1, f2): name = os.path.split (f1)[1] name = re.sub ('-[0-9]+.signature', '', name) - + file_link = None try: file_link = self.file_links[name] @@ -882,9 +882,9 @@ class ComparisonData: str = '\n'.join ([os.path.splitext (link.file_names[1])[0] for link in changed]) fn = dest_dir + '/changed.txt' - + open_write_file (fn).write (str) - + def thresholded_results (self, threshold): ## todo: support more scores. results = [(link.distance(), link) @@ -897,7 +897,7 @@ class ComparisonData: changed = [r for (d,r) in results if d > threshold] return (changed, below, unchanged) - + def write_text_result_page (self, filename, threshold): out = None if filename == '': @@ -908,17 +908,17 @@ class ComparisonData: (changed, below, unchanged) = self.thresholded_results (threshold) - + for link in changed: out.write (link.text_record_string ()) out.write ('\n\n') out.write ('%d below threshold\n' % len (below)) out.write ('%d unchanged\n' % len (unchanged)) - + def create_text_result_page (self, dir1, dir2, dest_dir, threshold): self.write_text_result_page (dest_dir + '/index.txt', threshold) - + def create_html_result_page (self, dir1, dir2, dest_dir, threshold): dir1 = dir1.replace ('//', '/') dir2 = dir2.replace ('//', '/') @@ -950,7 +950,7 @@ class ComparisonData: if below_count: html += ('

    %d below threshold

    ' % below_count) - + html += ('

    %d unchanged

    ' % len (unchanged)) dest_file = dest_dir + '/index.html' @@ -959,17 +959,17 @@ class ComparisonData: for link in changed: link.link_files_for_html (dest_dir) - + def print_results (self, threshold): self.write_text_result_page ('', threshold) -def compare_trees (dir1, dir2, dest_dir, threshold): +def compare_tree_pairs (tree_pairs, dest_dir, threshold): data = ComparisonData () - data.compare_trees (dir1, dir2) + for dir1, dir2 in tree_pairs: + data.compare_trees (dir1, dir2) data.read_sources () - data.print_results (threshold) if os.path.isdir (dest_dir): @@ -978,7 +978,7 @@ def compare_trees (dir1, dir2, dest_dir, threshold): data.write_changed (dest_dir, threshold) data.create_html_result_page (dir1, dir2, dest_dir, threshold) data.create_text_result_page (dir1, dir2, dest_dir, threshold) - + ################################################################ # TESTING @@ -995,7 +995,7 @@ def link_file (x, y): except OSError, z: print 'OSError', x, y, z raise OSError - + def open_write_file (x): d = os.path.split (x)[0] mkdir (d) @@ -1003,7 +1003,7 @@ def open_write_file (x): def system (x): - + print 'invoking', x stat = os.system (x) assert stat == 0 @@ -1012,9 +1012,9 @@ def system (x): def test_paired_files (): print paired_files (os.environ["HOME"] + "/src/lilypond/scripts/", os.environ["HOME"] + "/src/lilypond-stable/scripts/build/", '*.py') - - -def test_compare_trees (): + + +def test_compare_tree_pairs (): system ('rm -rf dir1 dir2') system ('mkdir dir1 dir2') system ('cp 20{-*.signature,.ly,.png,.eps,.log,.profile} dir1') @@ -1033,7 +1033,7 @@ def test_compare_trees (): system ('cp 20multipage* dir2') system ('cp 19multipage-1.signature dir2/20multipage-1.signature') - + system ('mkdir -p dir1/subdir/ dir2/subdir/') system ('cp 19.sub{-*.signature,.ly,.png,.eps,.log,.profile} dir1/subdir/') system ('cp 19.sub{-*.signature,.ly,.png,.eps,.log,.profile} dir2/subdir/') @@ -1059,7 +1059,7 @@ def test_compare_trees (): system ('cp 19multipage.log dir1/log-differ.log') system ('cp 19multipage.log dir2/log-differ.log && echo different >> dir2/log-differ.log && echo different >> dir2/log-differ.log') - compare_trees ('dir1', 'dir2', 'compare-dir1dir2', options.threshold) + compare_tree_pairs (['dir1', 'dir2'], 'compare-dir1dir2', options.threshold) def test_basic_compare (): @@ -1072,7 +1072,7 @@ def test_basic_compare (): #(ly:set-option (quote no-point-and-click)) \sourcefilename "my-source.ly" - + %(papermod)s \header { tagline = ##f } \score { @@ -1109,16 +1109,16 @@ def test_basic_compare (): for d in dicts: open (d['name'] + '.ly','w').write (ly_template % d) - + names = [d['name'] for d in dicts] system ('lilypond -ddump-profile -dseparate-log-files -ddump-signatures --png -dbackend=eps ' + ' '.join (names)) - + multipage_str = r''' #(set-default-paper-size "a6") \score { - \relative {c1 \pageBreak c1 } + \relative c' { c1 \pageBreak c1 } \layout {} \midi {} } @@ -1127,9 +1127,9 @@ def test_basic_compare (): open ('20multipage.ly', 'w').write (multipage_str.replace ('c1', 'd1')) open ('19multipage.ly', 'w').write ('#(set-global-staff-size 19.5)\n' + multipage_str) system ('lilypond -dseparate-log-files -ddump-signatures --png 19multipage 20multipage ') - + test_compare_signatures (names) - + def test_compare_signatures (names, timing=False): import time @@ -1179,30 +1179,30 @@ def run_tests (): if do_clean: system ('rm -rf ' + dir) system ('mkdir ' + dir) - + os.chdir (dir) if do_clean: test_basic_compare () - - test_compare_trees () - + + test_compare_tree_pairs () + ################################################################ # def main (): p = optparse.OptionParser ("output-distance - compare LilyPond formatting runs") - p.usage = 'output-distance.py [options] tree1 tree2' - + p.usage = 'output-distance.py [options] tree1 tree2 [tree3 tree4]...' + p.add_option ('', '--test-self', dest="run_test", action="store_true", help='run test method') - + p.add_option ('--max-count', dest="max_count", metavar="COUNT", type="int", - default=0, + default=0, action="store", help='only analyze COUNT signature pairs') @@ -1246,17 +1246,17 @@ def main (): run_tests () sys.exit (0) - if len (args) != 2: - p.print_usage() + if len (args) % 2: + p.print_usage () sys.exit (2) - name = options.output_dir - if not name: - name = args[0].replace ('/', '') - name = os.path.join (args[1], 'compare-' + shorten_string (name)) - - compare_trees (args[0], args[1], name, options.threshold) + out = options.output_dir + if not out: + out = args[0].replace ('/', '') + out = os.path.join (args[1], 'compare-' + shorten_string (out)) + + compare_tree_pairs (zip (args[0::2], args[1::2]), out, options.threshold) if __name__ == '__main__': - main() + main () diff --git a/scripts/build/pytt.py b/scripts/build/pytt.py index 8aee66b6c3..a6e3693b53 100755 --- a/scripts/build/pytt.py +++ b/scripts/build/pytt.py @@ -1,13 +1,12 @@ #! /usr/bin/python ''' - Copyright (c) 2008--2009 - Jan Nieuwenhuizen + Copyright (C) 2008--2011 Jan Nieuwenhuizen - 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 2, or (at your option) - any later version. + 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 @@ -15,8 +14,7 @@ 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program. If not, see . ''' import os diff --git a/scripts/build/texi-gettext.py b/scripts/build/texi-gettext.py deleted file mode 100644 index 7ce17cb49a..0000000000 --- a/scripts/build/texi-gettext.py +++ /dev/null @@ -1,77 +0,0 @@ -#!@PYTHON@ -# -*- coding: utf-8 -*- -# texi-gettext.py - -# USAGE: texi-gettext.py [-o OUTDIR] LANG FILES -# -# -o OUTDIR specifies that output files should rather be written in OUTDIR -# - -print "texi-gettext.py" - -import sys -import re -import os -import getopt - -import langdefs - -optlist, args = getopt.getopt (sys.argv[1:],'o:') -lang = args[0] -files = args[1:] - -outdir = '.' -for x in optlist: - if x[0] == '-o': - outdir = x[1] - -double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep -_doc = langdefs.translation[lang] - -include_re = re.compile (r'@include ((?!../lily-).*?)\.texi$', re.M) -whitespaces = re.compile (r'\s+') -ref_re = re.compile (r'(?ms)@(rglos|ruser|rprogram|ref|rlearning)(\{)(.*?)(\})') -node_section_re = re.compile (r'@(node|(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading)( )(.*?)(\n)') -menu_entry_re = re.compile (r'\* (.*?)::') - -def title_gettext (m): - if m.group (2) == '{': - r = whitespaces.sub (' ', m.group (3)) - else: - r = m.group (3) - return '@' + m.group (1) + m.group (2) + _doc (r) + m.group (4) - -def menu_entry_gettext (m): - return '* ' + _doc (m.group (1)) + '::' - -def include_replace (m, filename): - if os.path.exists (os.path.join (os.path.dirname (filename), m.group(1)) + '.texi'): - return '@include ' + m.group(1) + '.pdftexi' - return m.group(0) - -def process_file (filename): - print "Processing %s" % filename - f = open (filename, 'r') - page = f.read () - f.close() - page = node_section_re.sub (title_gettext, page) - page = ref_re.sub (title_gettext, page) - page = menu_entry_re.sub (menu_entry_gettext, page) - page = page.replace ("""-- SKELETON FILE -- -When you actually translate this file, please remove these lines as -well as all `UNTRANSLATED NODE: IGNORE ME' lines.""", '') - page = page.replace ('UNTRANSLATED NODE: IGNORE ME', _doc ("This section has not been translated yet; please refer to the manual in English.")) - includes = include_re.findall (page) - page = include_re.sub (lambda m: include_replace (m, filename), page) - p = os.path.join (outdir, filename) [:-4] + 'pdftexi' - f = open (p, 'w') - f.write (page) - f.close () - dir = os.path.dirname (filename) - for file in includes: - p = os.path.join (dir, file) + '.texi' - if os.path.exists (p): - process_file (p) - -for filename in files: - process_file (filename) diff --git a/scripts/build/website-known-missing-files.txt b/scripts/build/website-known-missing-files.txt new file mode 100644 index 0000000000..4f4cd85bb0 --- /dev/null +++ b/scripts/build/website-known-missing-files.txt @@ -0,0 +1,39 @@ +ancient-notation.itely +chords.itely +colorado.itexi +computer-notation.itexi +context-properties.tely +contexts-and-engravers.itely +editorial-annotations.itely +engravingbib.itexi +expressive-marks.itely +fretted-strings.itely +identifiers.tely +keyboards.itely +layout-properties.tely +learning/scheme-tutorial.itely +learning/working.itely +markup-commands.tely +markup-list-commands.tely +midi.itely +notation/programming-interface.itely +others-did.itexi +paper-and-layout.itely +percussion.itely +pitches.itely +repeats.itely +rhythms.itely +scheme-functions.tely +simultaneous-notes.itely +spacing.itely +staff-notation.itely +template.itely +text.itely +titles.itely +tweaks-and-overrides.itely +type-predicates.tely +unfretted-strings.itely +vocal-music.itely +we-wrote.itexi +winds.itely +world-music.itely diff --git a/scripts/build/website_post.py b/scripts/build/website_post.py new file mode 100644 index 0000000000..551da4657e --- /dev/null +++ b/scripts/build/website_post.py @@ -0,0 +1,215 @@ +#!@PYTHON@ +#-*- coding: utf-8 -*- + +##### This is web_post.py. This script deals with translations +##### in the "make website" target. + +import sys +import os +import glob +import re + +###### Translation data, move out, see create-weblinks-itexi.py +translations = { + 'cs': { + 'English': 'Česky', + 'Other languages': 'Jiné jazyky', + }, + 'de': { + 'English': 'Deutsch', + 'Other languages': 'Andere Sprachen', + }, + 'es': { + 'English': 'Español', + 'Other languages': 'Otros idiomas', + }, + 'fr': { + 'English': 'Français', + 'Other languages': 'Autres langues', + }, + 'hu': { + 'English': 'Magyar', + 'Other languages': 'Más nyelvek', + }, + 'it': { + 'English': 'Italiano', + 'Other languages': 'Altre lingue', + }, + 'ja': { + 'English': '日本語', + 'Other languages': '他の言語', + }, + 'nl': { + 'English': 'Nederlands', + 'Other languages': 'Andere talen', + }, + 'zh': { + 'English': '中文', + 'Other languages': '其它语言', + }, + } + +# needs at least: make -C po or make- C Documentation/po +HAVE_GETTEXT = False + +#### this breaks on lilypond.org +# Keep some freakin' gettext compatibility +#if HAVE_GETTEXT: +# import lilylib as ly; +# global _;_=ly._ +#else: # poor mans translation +# def _ (string, lang=os.environ['LANG']): +# return translations.get (lang.split ('_')[0], {}).get (string, string) + +#### this works on lilypond.org +def _ (string, lang): + return translations.get (lang.split ('_')[0], {}).get (string, string) + + +exclude_manuals = [ + '/music-glossary', + '/snippets', + '/internals', + '/contributor' +] + +###### Actual program + +dir = sys.argv[1] + +os.chdir(dir) +html_files = glob.glob( '*.html' ) + + +### messy way to get all languages +langs_set = set() +for file in html_files: + file_split = file.split('.') + if (len(file_split) == 2): + # it's English + lang = '' + elif (len(file_split) == 3): + # it's a translation + lang = file_split[1] + # make sure it's a translated language + if lang != "en": + langs_set.add(lang) +langs = list(langs_set) +langs.sort() + + +### helper functions +def addLangExt(filename, lang, ext): + text = filename + exclude = 0 + for dir in exclude_manuals: + if (text.find(dir) >= 0): + exclude = 1 + if (not (exclude or (lang==""))): + text += "." + lang + text += "." + ext + return text + +def makeFooter (filename, currentLang): + # TODO: add link to automatic language selection? + # still need to include this page in the new webpages somewhere + footer = '''

    +%(other)s: %(lst)s. +

    +''' + def link (lang): + str = '''%(language_name)s''' + file_name = addLangExt (filename, lang, 'html') + language_name = _ ('English', lang) + return str % locals () + lst = ', '.join ([link (lang) for lang in langs if lang != currentLang]) + other = _ ('Other languages', currentLang) + return footer % locals () + +def getLocalHref(line): + match = re.search(r'href=[\'"]?([^\'" >]+)', line) + if match: + url = match.group(0)[6:] + if (url[0:7] == "http://"): + url = '' + # strip any '#' + omit = url.find('#') + if (omit >= 0): + url = url[0:omit] + else: + url = '' + return url + + + + +### main loop +for file in html_files: + ### we want to strip the .html and get the lang + file_split = file.split('.') + file_base = os.path.basename( file_split[0] ) + if (len(file_split) == 2): + # it's English + lang = '' + # possibly necessary for automatic language selection + file_symlink = file.replace(".html", ".en.html") + if (not (os.path.exists(file_symlink))): + os.symlink (file, file_symlink) + elif (len(file_split) == 3): + # it's a translation + lang = file_split[1] + if (lang == "en"): + # it's a symlink + continue + else: + # it's a mess + print "is a mess" + continue + + ### we need to replace parts of the file + lines = open(file).readlines() + os.remove(file) + outfile = open(file, 'w') + + lang_footer = makeFooter (file_base, lang) + + ### alter file + for line in lines: + ### alter links as appropriate + link = getLocalHref(line) + if (link != ""): + # questionable + if (not link.startswith("../doc/")): + if (link.endswith(".html")): + langlink = addLangExt(link[:-5], lang, "html") + line = line.replace(link, langlink) + if (link.endswith(".pdf")): + langlink = addLangExt(link[:-4], lang, "pdf") + line = line.replace(link, langlink) + ### add google tracker header + if (line.find("") >= 0): + outfile.write(""" + + +"""); + #### add google tracker goals + if (line.find("href=\"http://download.linuxaudio.org") >= 0): + # TODO: more ugly hardcoding to make releases hard. :( + if (line.find('2.12') >= 0): + line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.12\');\" href=') + elif (line.find('2.13') >= 0): + line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.13\');\" href=') + ### add language selection footer + if (line.find("
    ") >= 0): + outfile.write("
    \n") + outfile.write( lang_footer ) + if (line.find("= 0): + outfile.write("
    \n") + outfile.write(line) + outfile.close() + diff --git a/scripts/build/www_post.py b/scripts/build/www_post.py index c568734c1b..17af63109e 100644 --- a/scripts/build/www_post.py +++ b/scripts/build/www_post.py @@ -25,24 +25,12 @@ target_pattern = os.path.join (outdir, '%s-root') # from HTML manuals/snippets page static_files = { os.path.join (outdir, 'index.html'): - ''' + ''' Redirecting to the documentation index...\n''', os.path.join (outdir, 'VERSION'): package_version + '\n', - os.path.join ('input', 'lsr', outdir, 'index.html'): - ''' -Redirecting to the documentation index...\n''' } -for l in langdefs.LANGUAGES: - static_files[os.path.join ( - 'Documentation', - 'user', - outdir, - l.file_name ('index', '.html'))] = \ - '\nRedirecting to the documentation index...\n' - for f, contents in static_files.items (): open (f, 'w').write (contents) @@ -51,9 +39,9 @@ dirs, symlinks, files = mirrortree.walk_tree ( tree_roots = doc_dirs, process_dirs = outdir, exclude_dirs = '(^|/)((' + \ - r'po|out|out-test|out-cov|.*?[.]t2d|\w*?-root)|^Documentation/(' + \ + r'po|xref-maps|out|out-test|out-cov|.*?[.]t2d|\w*?-root)|^Documentation/(' + \ '|'.join ([l.code for l in langdefs.LANGUAGES]) + '))(/|$)', - find_files = r'.*?\.(?:midi|html|pdf|png|txt|i?ly|signature|css|zip)$|VERSION', + find_files = r'.*?\.(?:midi|html|pdf|png|jpe?g|txt|i?ly|signature|css|zip|js|..\.idx|php)$|VERSION', exclude_files = r'lily-[0-9a-f]+.*\.(pdf|txt)') # actual mirrorring stuff @@ -61,7 +49,8 @@ html_files = [] hardlinked_files = [] for f in files: if f.endswith ('.html'): - html_files.append (f) + if not 'UNTRANSLATED NODE: IGNORE ME' in open (f).read (): + html_files.append (f) else: hardlinked_files.append (f) dirs = [re.sub ('/' + outdir, '', d) for d in dirs] @@ -85,9 +74,6 @@ for t in targets: if not os.path.exists (dest): os.symlink (p, dest) - ## ad-hoc renaming to make xrefs between PDFs work - os.rename (os.path.join (out_root, 'input/lsr/lilypond-snippets.pdf'), - os.path.join (out_root, 'Documentation/user/lilypond-snippets.pdf')) # need this for content negotiation with documentation index if 'online' in targets: diff --git a/scripts/build/yyout2grammar.py b/scripts/build/yyout2grammar.py new file mode 100755 index 0000000000..d46f648cd5 --- /dev/null +++ b/scripts/build/yyout2grammar.py @@ -0,0 +1,162 @@ +#!@PYTHON@ +# +# yyout2grammar.py + +# This file is part of LilyPond, the GNU music typesetter. +# +# Copyright (C) 2005 by Carl D. Sorensen +# +# 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 . + + +# Convert from bison output file parser.output to +# Grammar and index. +# Drops all of the state information. +# Converts \\ to \ +# Eliminates the @ variables created when {} is placed +# in the middle of a rule +# Eliminates all of the c-code stuff +# Wraps lines that are longer than 78 characters for improved +# formatting +# +# to create input file, run +# bison -v parser.yy +# this will create a file parser.output +# then run +# yyout2grammar.py parser.output your_output_file +# + +import sys +import re + +atre = re.compile('(@\d+):') + +intro_re = re.compile (r'(.*[:|])\s') +keyword_re = re.compile (r'(\S+)\s') + +# strip extra backslashes that are inserted by the python +# string handling routines +def strip_backslash(input_string): + i=input_string.find(r'"\\') + while i > -1 : + input_string = input_string[:i+1]+input_string[i+2:] + i = input_string.find(r'"\\') + return input_string + +# write an output line, adjusting to make sure that max_line_length +# is not exceeded +def write_line (output_line, output_file): + max_line_length = 78 + indent_value = 3 + if len(output_line) > max_line_length: + intro = intro_re.match(output_line) + if intro: + output_file.write(intro.group(1)+" ") + indent_column = len(intro.group(1)) + output_line = output_line[indent_column:] + keyword = keyword_re.search(output_line) + while keyword: + output_file.write(strip_backslash(keyword.group(1))+" \n") + output_line = output_line[keyword.end(1):] + keyword = keyword_re.search(output_line) + if keyword: + output_file.write("".rjust(indent_column + indent_value)) + else: + output_file.write(strip_backslash(output_line)) + return + +write_me = True + +if len(sys.argv)!=3: + print "Usage: yyout2grammar.py parser_output_file grammar_file." +else: + in_name = sys.argv[1] + out_name = sys.argv[2] + + print "input file name",in_name + print "output file name",out_name + in_file = open(in_name,'r') + out_file= open(out_name, 'w') + + at_items=[] + inline = in_file.readline() + + ## skip header material from file + while inline != '' and not(inline.startswith("Grammar")): + inline = in_file.readline() + + ## process the Grammar lines + if inline != '': + write_line(inline, out_file) + inline = in_file.readline() + while inline != '' and not(inline.startswith("Terminals")): + i = inline.find("$accept:") + if i>-1: + write_me = False + inline = in_file.readline() + atfound = re.findall(atre,inline) + if len(atfound) > 0: + at_items.extend(atfound) + # print at_items + write_me = False + inline=in_file.readline() + else: + for at_item in at_items: + i=inline.find(at_item) + ## remove @ item + if i >= 0: + inline=inline[:i] + inline[i+len(at_item):] + + if write_me: + write_line(inline, out_file) + inline = in_file.readline() + write_me = True + index_items = [] + + # Write the Terminals header line and the following blank line + write_line(inline, out_file) + inline = in_file.readline() + write_line(inline, out_file) + inline = in_file.readline() + while inline != '' and not(inline.startswith("Nonterminals")): + i=inline.find('"\\\\') + while i > -1 : + inline = inline[:i+1]+inline[i+2:] + i = inline.find('"\\\\') + index_items.append(inline) + inline = in_file.readline() + index_items.sort(lambda x,y:cmp(x.lower(),y.lower())) + for index_item in index_items: + write_line (index_item, out_file) + write_line ('\n', out_file) + + # Write the Nonterminals header and the blank line + write_line(inline, out_file) + inline = in_file.readline() + write_line(inline, out_file) + index_items = [] + index_item=in_file.readline() + inline=in_file.readline() + while inline != '' and not(inline.startswith("state")): + while inline.startswith(" "): + index_item = index_item + inline + inline = in_file.readline() + if not(index_item.startswith("@")) and \ + not(index_item.startswith("$accept")): + index_items.append(index_item) + index_item = inline + inline=in_file.readline() + index_items.sort(lambda x,y:cmp(x.lower(),y.lower())) + for index_item in index_items: + write_line (index_item, out_file) diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index cffd859ff7..c0c7ee3e35 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -1,14 +1,25 @@ #!@TARGET_PYTHON@ -# + # convert-ly.py -- Update old LilyPond input files (fix name?) +# converting rules are found in python/convertrules.py + +# This file is part of LilyPond, the GNU music typesetter. # -# source file of the GNU LilyPond music typesetter -# -# (c) 1998--2009 Han-Wen Nienhuys +# Copyright (C) 1998--2011 Han-Wen Nienhuys # Jan Nieuwenhuizen # -# converting rules are found in python/convertrules.py +# 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 . import os import sys @@ -67,7 +78,7 @@ def warranty (): %s %s -''' % ( _ ('Copyright (c) %s by') % '2001--2009', +''' % ( _ ('Copyright (c) %s by') % '2001--2011', ' '.join (authors), _ ('Distributed under terms of the GNU General Public License.'), _ ('It comes with NO WARRANTY.'))) @@ -107,6 +118,12 @@ def get_option_parser (): action='store_true', dest='force_current_version', default=False) + + p.add_option ('-d', '--diff-version-update', + help=_ ("only update \\version number if file is modified"), + action='store_true', + dest='diff_version_update', + default=False) p.add_option ("-s", '--show-rules', help=_ ("show rules [default: -f 0, -t %s]") % program_version, @@ -160,7 +177,7 @@ def show_rules (file, from_version, to_version): def do_conversion (str, from_version, to_version): """Apply conversions from FROM_VERSION to TO_VERSION. Return -tuple (LAST,STR), with the last succesful conversion and the resulting +tuple (LAST,STR), with the last successful conversion and the resulting string.""" conv_list = get_conversions (from_version, to_version) @@ -193,12 +210,16 @@ def guess_lilypond_version (input): else: return '' -class FatalConversionError: +class FatalConversionError (Exception): pass -class UnknownVersion: +class UnknownVersion (Exception): pass +class InvalidVersion (Exception): + def __init__ (self, version): + self.version = version + def do_one_file (infile_name): ly.stderr_write (_ ("Processing `%s\'... ") % infile_name) sys.stderr.write ('\n') @@ -225,6 +246,9 @@ def do_one_file (infile_name): else: to_version = latest_version () + if len (from_version) != 3: + raise InvalidVersion (".".join ([str(n) for n in from_version])) + (last, result) = do_conversion (input, from_version, to_version) @@ -232,6 +256,18 @@ def do_one_file (infile_name): if global_options.force_current_version and last == to_version: last = str_to_tuple (program_version) + if global_options.diff_version_update: + if result == input: + # check the y in x.y.z (minor version number) + previous_stable = (last[0], 2*(last[1]/2), 0) + if ((last[0:2] != from_version[0:2]) and + (previous_stable > from_version)): + # previous stable version + last = previous_stable + else: + # make no (actual) change to the version number + last = from_version + newversion = r'\version "%s"' % tup_to_str (last) if lilypond_version_re.search (result): result = re.sub (lilypond_version_re_str, @@ -293,14 +329,21 @@ def main (): if f == '-': f = '' elif not os.path.isfile (f): - error (_ ("cannot open file: `%s'") % f) + error (_ ("%s: Unable to open file") % f) if len (files) == 1: sys.exit (1) continue try: do_one_file (f) except UnknownVersion: - error (_ ("cannot determine version for `%s'. Skipping") % f) + error (_ ("%s: Unable to determine version. Skipping") % f) + except InvalidVersion: + # Compat code for 2.x and 3.0 syntax ("except .. as v" doesn't + # work in python 2.4!): + t, v, b = sys.exc_info () + error (_ ("%s: Invalid version string `%s' \n" + "Valid version strings consist of three numbers, " + "separated by dots, e.g. `2.8.12'") % (f, v.version) ) sys.stderr.write ('\n') diff --git a/scripts/etf2ly.py b/scripts/etf2ly.py index 54daa94dec..009b49ae95 100644 --- a/scripts/etf2ly.py +++ b/scripts/etf2ly.py @@ -1,5 +1,20 @@ #!@TARGET_PYTHON@ +# This file is part of LilyPond, the GNU music typesetter. +# +# 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 . + # info mostly taken from looking at files. See also # http://lilypond.org/wiki/?EnigmaTransportFormat @@ -1171,7 +1186,7 @@ def warranty (): %s %s -''' % ( _ ('Copyright (c) %s by') % '2001--2009', +''' % ( _ ('Copyright (c) %s by') % '2001--2011', '\n '.join (authors), _ ('Distributed under terms of the GNU General Public License.'), _ ('It comes with NO WARRANTY.'))) diff --git a/scripts/lilymidi.py b/scripts/lilymidi.py index b8481b3457..73809a4d4d 100644 --- a/scripts/lilymidi.py +++ b/scripts/lilymidi.py @@ -1,25 +1,23 @@ #!@TARGET_PYTHON@ -# Copyright (c) 2006--2009 Brailcom, o.p.s. +# Copyright (C) 2006--2011 Brailcom, o.p.s. # # Author: Milan Zamazal # -# COPYRIGHT NOTICE +# This file is part of LilyPond, the GNU music typesetter. # -# This program is free software; you can redistribute it and/or modify +# 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 2 of the License, or +# 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. +# 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 this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - +# along with LilyPond. If not, see . import optparse import os diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index e1d1824d75..9617f3666d 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -1,4 +1,20 @@ #!@TARGET_PYTHON@ +# -*- coding: utf-8 -*- + +# This file is part of LilyPond, the GNU music typesetter. +# +# 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 . ''' Example usage: @@ -14,8 +30,6 @@ classic lilypond-book: TODO: - * this script is too complex. Modularize. - * ly-options: intertext? * --line-width? * eps in latex / eps by lilypond -b ps? @@ -28,12 +42,18 @@ TODO: ''' + +# TODO: Better solve the global_options copying to the snippets... + import glob import os import re import stat import sys import tempfile +import imp +from optparse import OptionGroup + """ @relocate-preamble@ @@ -44,22 +64,14 @@ import fontextract import langdefs global _;_=ly._ -ly.require_python_version () +import book_base as BookBase +import book_snippets as BookSnippet +import book_html +import book_docbook +import book_texinfo +import book_latex -# Lilylib globals. -program_version = '@TOPLEVEL_VERSION@' -program_name = os.path.basename (sys.argv[0]) - -# Check if program_version contains @ characters. This will be the case if -# the .py file is called directly while building the lilypond documentation. -# If so, try to check for the env var LILYPOND_VERSION, which is set by our -# makefiles and use its value. -at_re = re.compile (r'@') -if at_re.match (program_version): - if os.environ.has_key('LILYPOND_VERSION'): - program_version = os.environ['LILYPOND_VERSION'] - else: - program_version = "unknown" +ly.require_python_version () original_dir = os.getcwd () backend = 'ps' @@ -85,22 +97,12 @@ def exit (i): sys.exit (i) def identify (): - ly.encoded_write (sys.stdout, '%s (GNU LilyPond) %s\n' % (program_name, program_version)) + ly.encoded_write (sys.stdout, '%s (GNU LilyPond) %s\n' % (ly.program_name, ly.program_version)) progress = ly.progress +warning = ly.warning +error = ly.error -def warning (s): - ly.stderr_write (program_name + ": " + _ ("warning: %s") % s + '\n') - -def error (s): - ly.stderr_write (program_name + ": " + _ ("error: %s") % s + '\n') - -def ps_page_count (ps_name): - header = file (ps_name).read (1024) - m = re.search ('\n%%Pages: ([0-9]+)', header) - if m: - return int (m.group (1)) - return 0 def warranty (): identify () @@ -111,7 +113,7 @@ def warranty (): %s %s -''' % ( _ ('Copyright (c) %s by') % '2001--2009', +''' % ( _ ('Copyright (c) %s by') % '2001--2011', '\n '.join (authors), _ ("Distributed under terms of the GNU General Public License."), _ ("It comes with NO WARRANTY."))) @@ -119,6 +121,7 @@ def warranty (): def get_option_parser (): p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'lilypond-book', description=help_summary, + conflict_handler="resolve", add_help_option=False) p.add_option ('-F', '--filter', metavar=_ ("FILTER"), @@ -148,12 +151,6 @@ def get_option_parser (): action='store', dest='info_images_dir', default='') - p.add_option ('--latex-program', - help=_ ("run executable PROG instead of latex"), - metavar=_ ("PROG"), - action='store', dest='latex_program', - default='latex') - p.add_option ('--left-padding', metavar=_ ("PAD"), dest="padding_mm", @@ -161,11 +158,32 @@ def get_option_parser (): type="float", default=3.0) + p.add_option ('--lily-output-dir', + help=_ ("write lily-XXX files to DIR, link into --output dir"), + metavar=_ ("DIR"), + action='store', dest='lily_output_dir', + default=None) + + p.add_option ('--load-custom-package', help=_ ("Load the additional python PACKAGE (containing e.g. a custom output format)"), + metavar=_ ("PACKAGE"), + action='append', dest='custom_packages', + default=[]) + p.add_option ("-o", '--output', help=_ ("write output to DIR"), metavar=_ ("DIR"), action='store', dest='output_dir', default='') + p.add_option ('-P', '--process', metavar=_ ("COMMAND"), + help = _ ("process ly_files using COMMAND FILE..."), + action='store', + dest='process_cmd', default='') + + p.add_option ('-s', '--safe', help=_ ("Compile snippets in safe mode"), + action="store_true", + default=False, + dest="safe_mode") + p.add_option ('--skip-lily-check', help=_ ("do not fail if no lilypond output is found"), metavar=_ ("DIR"), @@ -178,21 +196,9 @@ def get_option_parser (): action='store_true', dest='skip_png_check', default=False) - p.add_option ('--lily-output-dir', - help=_ ("write lily-XXX files to DIR, link into --output dir"), - metavar=_ ("DIR"), - action='store', dest='lily_output_dir', - default=None) - - p.add_option ('-P', '--process', metavar=_ ("COMMAND"), - help = _ ("process ly_files using COMMAND FILE..."), - action='store', - dest='process_cmd', default='') - - p.add_option ('--pdf', - action="store_true", - dest="create_pdf", - help=_ ("create PDF files for use with PDFTeX"), + p.add_option ('--use-source-file-names', + help=_ ("write snippet output files with the same base name as their source file"), + action='store_true', dest='use_source_file_names', default=False) p.add_option ('-V', '--verbose', help=_ ("be verbose"), @@ -208,11 +214,31 @@ def get_option_parser (): p.add_option ('-w', '--warranty', help=_ ("show warranty and copyright"), action='store_true') + + group = OptionGroup (p, "Options only for the latex and texinfo backends") + group.add_option ('--latex-program', + help=_ ("run executable PROG instead of latex, or in\n\ +case --pdf option is set instead of pdflatex"), + metavar=_ ("PROG"), + action='store', dest='latex_program', + default='latex') + group.add_option ('--pdf', + action="store_true", + dest="create_pdf", + help=_ ("create PDF files for use with PDFTeX"), + default=False) + p.add_option_group (group) + p.add_option_group ('', description=( _ ("Report bugs via %s") % ' http://post.gmane.org/post.php' '?group=gmane.comp.gnu.lilypond.bugs') + '\n') + + + for formatter in BookBase.all_formats: + formatter.add_options (p) + return p lilypond_binary = os.path.join ('@bindir@', 'lilypond') @@ -230,1327 +256,7 @@ if '@bindir@' == ('@' + 'bindir@') or not os.path.exists (lilypond_binary): global_options = None -default_ly_options = { 'alt': "[image of music]" } - -document_language = '' - -# -# Is this pythonic? Personally, I find this rather #define-nesque. --hwn -# -ADDVERSION = 'addversion' -AFTER = 'after' -BEFORE = 'before' -DOCBOOK = 'docbook' -EXAMPLEINDENT = 'exampleindent' -FILTER = 'filter' -FRAGMENT = 'fragment' -HTML = 'html' -INDENT = 'indent' -LANG = 'lang' -LATEX = 'latex' -LAYOUT = 'layout' -LINE_WIDTH = 'line-width' -LILYQUOTE = 'lilyquote' -NOFRAGMENT = 'nofragment' -NOGETTEXT = 'nogettext' -NOINDENT = 'noindent' -NOQUOTE = 'noquote' -NORAGGED_RIGHT = 'noragged-right' -NOTES = 'body' -NOTIME = 'notime' -OUTPUT = 'output' -OUTPUTIMAGE = 'outputimage' -PAPER = 'paper' -PREAMBLE = 'preamble' -PRINTFILENAME = 'printfilename' -QUOTE = 'quote' -RAGGED_RIGHT = 'ragged-right' -RELATIVE = 'relative' -STAFFSIZE = 'staffsize' -DOCTITLE = 'doctitle' -TEXIDOC = 'texidoc' -TEXINFO = 'texinfo' -VERBATIM = 'verbatim' -VERSION = 'lilypondversion' -FONTLOAD = 'fontload' -FILENAME = 'filename' -ALT = 'alt' - - -# NOTIME has no opposite so it isn't part of this dictionary. -# NOQUOTE is used internally only. -no_options = { - NOFRAGMENT: FRAGMENT, - NOINDENT: INDENT, -} - - -# Recognize special sequences in the input. -# -# (?Pregex) -- Assign result of REGEX to NAME. -# *? -- Match non-greedily. -# (?!...) -- Match if `...' doesn't match next (without consuming -# the string). -# -# (?m) -- Multiline regex: Make ^ and $ match at each line. -# (?s) -- Make the dot match all characters including newline. -# (?x) -- Ignore whitespace in patterns. -no_match = 'a\ba' -snippet_res = { - ## - DOCBOOK: { - 'include': - no_match, - - 'lilypond': - r'''(?smx) - (?P - <(?P(inline)?)mediaobject>\s* - \s* - .*?)")?> - (?P.*?) - \s* - \s* - )''', - - 'lilypond_block': - r'''(?smx) - (?P - <(?P(inline)?)mediaobject>\s* - \s* - .*?)")?> - (?P.*?) - \s* - \s* - )''', - - 'lilypond_file': - r'''(?smx) - (?P - <(?P(inline)?)mediaobject>\s* - \s* - |>\s*)\s* - \s* - )''', - - 'multiline_comment': - r'''(?smx) - (?P - \s*(?!@c\s+) - (?P) - \s)''', - - 'singleline_comment': - no_match, - - 'verb': - no_match, - - 'verbatim': - no_match, - - 'lilypondversion': - no_match, - }, - ## - HTML: { - 'include': - no_match, - - 'lilypond': - r'''(?mx) - (?P - .*?)\s*:)?\s* - (?P.*?) - />)''', - - 'lilypond_block': - r'''(?msx) - (?P - .*?)\s* - > - (?P.*?) - )''', - - 'lilypond_file': - r'''(?mx) - (?P - .*?)\s* - > - \s*(?P.*?)\s* - )''', - - 'multiline_comment': - r'''(?smx) - (?P - \s*(?!@c\s+) - (?P) - \s)''', - - 'singleline_comment': - no_match, - - 'verb': - r'''(?x) - (?P - (?P
    .*?
    ))''', - - 'verbatim': - r'''(?x) - (?s) - (?P - (?P
    \s.*?
    \s))''', - - 'lilypondversion': - r'''(?mx) - (?P - )''', - }, - - ## - LATEX: { - 'include': - r'''(?smx) - ^[^%\n]*? - (?P - \\input\s*{ - (?P\S+?) - })''', - - 'lilypond': - r'''(?smx) - ^[^%\n]*? - (?P - \\lilypond\s*( - \[ - \s*(?P.*?)\s* - \])?\s*{ - (?P.*?) - })''', - - 'lilypond_block': - r'''(?smx) - ^[^%\n]*? - (?P - \\begin\s*( - \[ - \s*(?P.*?)\s* - \])?\s*{lilypond} - (?P.*?) - ^[^%\n]*? - \\end\s*{lilypond})''', - - 'lilypond_file': - r'''(?smx) - ^[^%\n]*? - (?P - \\lilypondfile\s*( - \[ - \s*(?P.*?)\s* - \])?\s*\{ - (?P\S+?) - })''', - - 'multiline_comment': - no_match, - - 'singleline_comment': - r'''(?mx) - ^.*? - (?P - (?P - %.*$\n+))''', - - 'verb': - r'''(?mx) - ^[^%\n]*? - (?P - (?P - \\verb(?P.) - .*? - (?P=del)))''', - - 'verbatim': - r'''(?msx) - ^[^%\n]*? - (?P - (?P - \\begin\s*{verbatim} - .*? - \\end\s*{verbatim}))''', - - 'lilypondversion': - r'''(?smx) - (?P - \\lilypondversion)[^a-zA-Z]''', - - }, - - ## - TEXINFO: { - 'include': - r'''(?mx) - ^(?P - @include\s+ - (?P\S+))''', - - 'lilypond': - r'''(?smx) - ^[^\n]*?(?!@c\s+)[^\n]*? - (?P - @lilypond\s*( - \[ - \s*(?P.*?)\s* - \])?\s*{ - (?P.*?) - })''', - - 'lilypond_block': - r'''(?msx) - ^(?P - @lilypond\s*( - \[ - \s*(?P.*?)\s* - \])?\s+? - ^(?P.*?) - ^@end\s+lilypond)\s''', - - 'lilypond_file': - r'''(?mx) - ^(?P - @lilypondfile\s*( - \[ - \s*(?P.*?)\s* - \])?\s*{ - (?P\S+) - })''', - - 'multiline_comment': - r'''(?smx) - ^(?P - (?P - @ignore\s - .*? - @end\s+ignore))\s''', - - 'singleline_comment': - r'''(?mx) - ^.* - (?P - (?P - @c([ \t][^\n]*|)\n))''', - - # Don't do this: It interferes with @code{@{}. - # 'verb': r'''(?P@code{.*?})''', - - 'verbatim': - r'''(?sx) - (?P - (?P - @example - \s.*? - @end\s+example\s))''', - - 'lilypondversion': - r'''(?mx) - [^@](?P - @lilypondversion)[^a-zA-Z]''', - - }, -} - - -format_res = { - DOCBOOK: { - 'intertext': r',?\s*intertext=\".*?\"', - 'option_sep': '\s*', - }, - HTML: { - 'intertext': r',?\s*intertext=\".*?\"', - 'option_sep': '\s*', - }, - - LATEX: { - 'intertext': r',?\s*intertext=\".*?\"', - 'option_sep': '\s*,\s*', - }, - - TEXINFO: { - 'intertext': r',?\s*intertext=\".*?\"', - 'option_sep': '\s*,\s*', - }, -} - - -# Options without a pattern in ly_options. -simple_options = [ - EXAMPLEINDENT, - FRAGMENT, - NOFRAGMENT, - NOGETTEXT, - NOINDENT, - PRINTFILENAME, - DOCTITLE, - TEXIDOC, - LANG, - VERBATIM, - FONTLOAD, - FILENAME, - ALT, - ADDVERSION -] - -ly_options = { - ## - NOTES: { - RELATIVE: r'''\relative c%(relative_quotes)s''', - }, - - ## - PAPER: { - INDENT: r'''indent = %(indent)s''', - - LINE_WIDTH: r'''line-width = %(line-width)s''', - - QUOTE: r'''line-width = %(line-width)s - 2.0 * %(exampleindent)s''', - - LILYQUOTE: r'''line-width = %(line-width)s - 2.0 * %(exampleindent)s''', - - RAGGED_RIGHT: r'''ragged-right = ##t''', - - NORAGGED_RIGHT: r'''ragged-right = ##f''', - }, - - ## - LAYOUT: { - NOTIME: r''' - \context { - \Score - timing = ##f - } - \context { - \Staff - \remove "Time_signature_engraver" - }''', - }, - - ## - PREAMBLE: { - STAFFSIZE: r'''#(set-global-staff-size %(staffsize)s)''', - }, -} - -output = { - ## - DOCBOOK: { - FILTER: r''' - - -%(code)s - - -''', - - OUTPUT: r''' - - - - -''', - - VERBATIM: r''' -%(verb)s''', - - VERSION: program_version, - - PRINTFILENAME: r''' - - - - %(filename)s - - - -''' - }, - ## - HTML: { - FILTER: r''' -%(code)s - -''', - - AFTER: r''' - -

    ''', - - BEFORE: r'''

    - ''', - - OUTPUT: r''' - %(alt)s''', - - PRINTFILENAME: '

    %(filename)s

    ', - - QUOTE: r'''
    -%(str)s -
    -''', - - VERBATIM: r'''
    -%(verb)s
    ''', - - VERSION: program_version, - }, - - ## - LATEX: { - OUTPUT: r'''{%% -\parindent 0pt -\ifx\preLilyPondExample \undefined -\else - \expandafter\preLilyPondExample -\fi -\def\lilypondbook{}%% -\input %(base)s-systems.tex -\ifx\postLilyPondExample \undefined -\else - \expandafter\postLilyPondExample -\fi -}''', - - PRINTFILENAME: '''\\texttt{%(filename)s} -''', - - QUOTE: r'''\begin{quotation} -%(str)s -\end{quotation}''', - - VERBATIM: r'''\noindent -\begin{verbatim}%(verb)s\end{verbatim} -''', - - VERSION: program_version, - - FILTER: r'''\begin{lilypond}[%(options)s] -%(code)s -\end{lilypond}''', - }, - - ## - TEXINFO: { - FILTER: r'''@lilypond[%(options)s] -%(code)s -@lilypond''', - - OUTPUT: r''' -@iftex -@include %(base)s-systems.texi -@end iftex -''', - - OUTPUTIMAGE: r'''@noindent -@ifinfo -@image{%(info_image_path)s,,,%(alt)s,%(ext)s} -@end ifinfo -@html -

    - - %(alt)s - -

    -@end html -''', - - PRINTFILENAME: ''' -@html - -@end html -@file{%(filename)s} -@html - -@end html - ''', - - QUOTE: r'''@quotation -%(str)s@end quotation -''', - - NOQUOTE: r'''@format -%(str)s@end format -''', - - VERBATIM: r'''@exampleindent 0 -%(version)s@verbatim -%(verb)s@end verbatim -''', - - VERSION: program_version, - - ADDVERSION: r'''@example -\version @w{"@version{}"} -@end example -''' - }, -} - -# -# Maintain line numbers. -# - -## TODO -if 0: - for f in [HTML, LATEX]: - for s in (QUOTE, VERBATIM): - output[f][s] = output[f][s].replace("\n"," ") - - -PREAMBLE_LY = '''%%%% Generated by %(program_name)s -%%%% Options: [%(option_string)s] -\\include "lilypond-book-preamble.ly" - - -%% **************************************************************** -%% Start cut-&-pastable-section -%% **************************************************************** - -%(preamble_string)s - -\paper { - #(define dump-extents #t) - %(font_dump_setting)s - %(paper_string)s - force-assignment = #"" - line-width = #(- line-width (* mm %(padding_mm)f)) -} - -\layout { - %(layout_string)s -} -''' - -FRAGMENT_LY = r''' -%(notes_string)s -{ - - -%% **************************************************************** -%% ly snippet contents follows: -%% **************************************************************** -%(code)s - - -%% **************************************************************** -%% end ly snippet -%% **************************************************************** -} -''' - -FULL_LY = ''' - - -%% **************************************************************** -%% ly snippet: -%% **************************************************************** -%(code)s - - -%% **************************************************************** -%% end ly snippet -%% **************************************************************** -''' - -texinfo_line_widths = { - '@afourpaper': '160\\mm', - '@afourwide': '6.5\\in', - '@afourlatex': '150\\mm', - '@smallbook': '5\\in', - '@letterpaper': '6\\in', -} - -def classic_lilypond_book_compatibility (key, value): - if key == 'singleline' and value == None: - return (RAGGED_RIGHT, None) - - m = re.search ('relative\s*([-0-9])', key) - if m: - return ('relative', m.group (1)) - - m = re.match ('([0-9]+)pt', key) - if m: - return ('staffsize', m.group (1)) - - if key == 'indent' or key == 'line-width': - m = re.match ('([-.0-9]+)(cm|in|mm|pt|staffspace)', value) - if m: - f = float (m.group (1)) - return (key, '%f\\%s' % (f, m.group (2))) - - return (None, None) - -def find_file (name, raise_error=True): - for i in global_options.include_path: - full = os.path.join (i, name) - if os.path.exists (full): - return full - - if raise_error: - error (_ ("file not found: %s") % name + '\n') - exit (1) - return '' - -def verbatim_html (s): - return re.sub ('>', '>', - re.sub ('<', '<', - re.sub ('&', '&', s))) - -ly_var_def_re = re.compile (r'^([a-zA-Z]+)[\t ]*=', re.M) -ly_comment_re = re.compile (r'(%+[\t ]*)(.*)$', re.M) -ly_context_id_re = re.compile ('\\\\(?:new|context)\\s+(?:[a-zA-Z]*?(?:Staff\ -(?:Group)?|Voice|FiguredBass|FretBoards|Names|Devnull))\\s+=\\s+"?([a-zA-Z]+)"?\\s+') -def ly_comment_gettext (t, m): - return m.group (1) + t (m.group (2)) - -def verb_ly_gettext (s): - if not document_language: - return s - try: - t = langdefs.translation[document_language] - except: - return s - - s = ly_comment_re.sub (lambda m: ly_comment_gettext (t, m), s) - - for v in ly_var_def_re.findall (s): - s = re.sub (r"(?m)(^|[' \\#])%s([^a-zA-Z])" % v, - "\\1" + t (v) + "\\2", - s) - for id in ly_context_id_re.findall (s): - s = re.sub (r'(\s+|")%s(\s+|")' % id, - "\\1" + t (id) + "\\2", - s) - return s - -texinfo_lang_re = re.compile ('(?m)^@documentlanguage (.*?)( |$)') -def set_default_options (source, default_ly_options, format): - global document_language - if LINE_WIDTH not in default_ly_options: - if format == LATEX: - textwidth = get_latex_textwidth (source) - default_ly_options[LINE_WIDTH] = '%.0f\\pt' % textwidth - elif format == TEXINFO: - m = texinfo_lang_re.search (source) - if m and not m.group (1).startswith ('en'): - document_language = m.group (1) - else: - document_language = '' - for regex in texinfo_line_widths: - # FIXME: @layout is usually not in - # chunk #0: - # - # \input texinfo @c -*-texinfo-*- - # - # Bluntly search first K items of - # source. - # s = chunks[0].replacement_text () - if re.search (regex, source[:1024]): - default_ly_options[LINE_WIDTH] = texinfo_line_widths[regex] - break - -class Chunk: - def replacement_text (self): - return '' - - def filter_text (self): - return self.replacement_text () - - def is_plain (self): - return False - -class Substring (Chunk): - """A string that does not require extra memory.""" - def __init__ (self, source, start, end, line_number): - self.source = source - self.start = start - self.end = end - self.line_number = line_number - self.override_text = None - - def is_plain (self): - return True - - def replacement_text (self): - if self.override_text: - return self.override_text - else: - return self.source[self.start:self.end] - -class Snippet (Chunk): - def __init__ (self, type, match, format, line_number): - self.type = type - self.match = match - self.checksum = 0 - self.option_dict = {} - self.format = format - self.line_number = line_number - - def replacement_text (self): - return self.match.group ('match') - - def substring (self, s): - return self.match.group (s) - - def __repr__ (self): - return `self.__class__` + ' type = ' + self.type - -class IncludeSnippet (Snippet): - def processed_filename (self): - f = self.substring ('filename') - return os.path.splitext (f)[0] + format2ext[self.format] - - def replacement_text (self): - s = self.match.group ('match') - f = self.substring ('filename') - - return re.sub (f, self.processed_filename (), s) - -class LilypondSnippet (Snippet): - def __init__ (self, type, match, format, line_number): - Snippet.__init__ (self, type, match, format, line_number) - os = match.group ('options') - self.do_options (os, self.type) - - def verb_ly (self): - if NOGETTEXT in self.option_dict: - return self.substring ('code') - else: - return verb_ly_gettext (self.substring ('code')) - - def ly (self): - contents = self.substring ('code') - return ('\\sourcefileline %d\n%s' - % (self.line_number - 1, contents)) - - def full_ly (self): - s = self.ly () - if s: - return self.compose_ly (s) - return '' - - def split_options (self, option_string): - if option_string: - if self.format == HTML: - options = re.findall('[\w\.-:]+(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|\S+))?', - option_string) - options = [re.sub('^([^=]+=\s*)(?P["\'])(.*)(?P=q)', '\g<1>\g<3>', opt) - for opt in options] - return options - else: - return re.split (format_res[self.format]['option_sep'], - option_string) - return [] - - def do_options (self, option_string, type): - self.option_dict = {} - - options = self.split_options (option_string) - - for option in options: - if '=' in option: - (key, value) = re.split ('\s*=\s*', option) - self.option_dict[key] = value - else: - if option in no_options: - if no_options[option] in self.option_dict: - del self.option_dict[no_options[option]] - else: - self.option_dict[option] = None - - has_line_width = self.option_dict.has_key (LINE_WIDTH) - no_line_width_value = 0 - - # If LINE_WIDTH is used without parameter, set it to default. - if has_line_width and self.option_dict[LINE_WIDTH] == None: - no_line_width_value = 1 - del self.option_dict[LINE_WIDTH] - - for k in default_ly_options: - if k not in self.option_dict: - self.option_dict[k] = default_ly_options[k] - - # RELATIVE does not work without FRAGMENT; - # make RELATIVE imply FRAGMENT - has_relative = self.option_dict.has_key (RELATIVE) - if has_relative and not self.option_dict.has_key (FRAGMENT): - self.option_dict[FRAGMENT] = None - - if not has_line_width: - if type == 'lilypond' or FRAGMENT in self.option_dict: - self.option_dict[RAGGED_RIGHT] = None - - if type == 'lilypond': - if LINE_WIDTH in self.option_dict: - del self.option_dict[LINE_WIDTH] - else: - if RAGGED_RIGHT in self.option_dict: - if LINE_WIDTH in self.option_dict: - del self.option_dict[LINE_WIDTH] - - if QUOTE in self.option_dict or type == 'lilypond': - if LINE_WIDTH in self.option_dict: - del self.option_dict[LINE_WIDTH] - - if not INDENT in self.option_dict: - self.option_dict[INDENT] = '0\\mm' - - # The QUOTE pattern from ly_options only emits the `line-width' - # keyword. - if has_line_width and QUOTE in self.option_dict: - if no_line_width_value: - del self.option_dict[LINE_WIDTH] - else: - del self.option_dict[QUOTE] - - def compose_ly (self, code): - if FRAGMENT in self.option_dict: - body = FRAGMENT_LY - else: - body = FULL_LY - - # Defaults. - relative = 1 - override = {} - # The original concept of the `exampleindent' option is broken. - # It is not possible to get a sane value for @exampleindent at all - # without processing the document itself. Saying - # - # @exampleindent 0 - # @example - # ... - # @end example - # @exampleindent 5 - # - # causes ugly results with the DVI backend of texinfo since the - # default value for @exampleindent isn't 5em but 0.4in (or a smaller - # value). Executing the above code changes the environment - # indentation to an unknown value because we don't know the amount - # of 1em in advance since it is font-dependent. Modifying - # @exampleindent in the middle of a document is simply not - # supported within texinfo. - # - # As a consequence, the only function of @exampleindent is now to - # specify the amount of indentation for the `quote' option. - # - # To set @exampleindent locally to zero, we use the @format - # environment for non-quoted snippets. - override[EXAMPLEINDENT] = r'0.4\in' - override[LINE_WIDTH] = texinfo_line_widths['@smallbook'] - override.update (default_ly_options) - - option_list = [] - for (key, value) in self.option_dict.items (): - if value == None: - option_list.append (key) - else: - option_list.append (key + '=' + value) - option_string = ','.join (option_list) - - compose_dict = {} - compose_types = [NOTES, PREAMBLE, LAYOUT, PAPER] - for a in compose_types: - compose_dict[a] = [] - - for (key, value) in self.option_dict.items (): - (c_key, c_value) = classic_lilypond_book_compatibility (key, value) - if c_key: - if c_value: - warning ( - _ ("deprecated ly-option used: %s=%s") % (key, value)) - warning ( - _ ("compatibility mode translation: %s=%s") % (c_key, c_value)) - else: - warning ( - _ ("deprecated ly-option used: %s") % key) - warning ( - _ ("compatibility mode translation: %s") % c_key) - - (key, value) = (c_key, c_value) - - if value: - override[key] = value - else: - if not override.has_key (key): - override[key] = None - - found = 0 - for type in compose_types: - if ly_options[type].has_key (key): - compose_dict[type].append (ly_options[type][key]) - found = 1 - break - - if not found and key not in simple_options: - warning (_ ("ignoring unknown ly option: %s") % key) - - # URGS - if RELATIVE in override and override[RELATIVE]: - relative = int (override[RELATIVE]) - - relative_quotes = '' - - # 1 = central C - if relative < 0: - relative_quotes += ',' * (- relative) - elif relative > 0: - relative_quotes += "'" * relative - - paper_string = '\n '.join (compose_dict[PAPER]) % override - layout_string = '\n '.join (compose_dict[LAYOUT]) % override - notes_string = '\n '.join (compose_dict[NOTES]) % vars () - preamble_string = '\n '.join (compose_dict[PREAMBLE]) % override - padding_mm = global_options.padding_mm - font_dump_setting = '' - if FONTLOAD in self.option_dict: - font_dump_setting = '#(define-public force-eps-font-include #t)\n' - - d = globals().copy() - d.update (locals()) - return (PREAMBLE_LY + body) % d - - def get_checksum (self): - if not self.checksum: - # Work-around for md5 module deprecation warning in python 2.5+: - try: - from hashlib import md5 - except ImportError: - from md5 import md5 - - hash = md5 (self.relevant_contents (self.full_ly ())) - - ## let's not create too long names. - self.checksum = hash.hexdigest ()[:10] - - return self.checksum - - def basename (self): - cs = self.get_checksum () - name = '%s/lily-%s' % (cs[:2], cs[2:10]) - return name - - def write_ly (self): - base = self.basename () - path = os.path.join (global_options.lily_output_dir, base) - directory = os.path.split(path)[0] - if not os.path.isdir (directory): - os.makedirs (directory) - out = file (path + '.ly', 'w') - out.write (self.full_ly ()) - file (path + '.txt', 'w').write ('image of music') - - def relevant_contents (self, ly): - return re.sub (r'\\(version|sourcefileline|sourcefilename)[^\n]*\n|' + - NOGETTEXT + '[,\]]', '', ly) - - def link_all_output_files (self, output_dir, output_dir_files, destination): - existing, missing = self.all_output_files (output_dir, output_dir_files) - if missing: - print '\nMissing', missing - raise CompileError(self.basename()) - for name in existing: - try: - os.unlink (os.path.join (destination, name)) - except OSError: - pass - - src = os.path.join (output_dir, name) - dst = os.path.join (destination, name) - dst_path = os.path.split(dst)[0] - if not os.path.isdir (dst_path): - os.makedirs (dst_path) - os.link (src, dst) - - - def all_output_files (self, output_dir, output_dir_files): - """Return all files generated in lily_output_dir, a set. - - output_dir_files is the list of files in the output directory. - """ - result = set () - missing = set () - base = self.basename() - full = os.path.join (output_dir, base) - def consider_file (name): - if name in output_dir_files: - result.add (name) - - def require_file (name): - if name in output_dir_files: - result.add (name) - else: - missing.add (name) - - # UGH - junk global_options - skip_lily = global_options.skip_lilypond_run - for required in [base + '.ly', - base + '.txt']: - require_file (required) - if not skip_lily: - require_file (base + '-systems.count') - - if 'ddump-profile' in global_options.process_cmd: - require_file (base + '.profile') - if 'dseparate-log-file' in global_options.process_cmd: - require_file (base + '.log') - - map (consider_file, [base + '.tex', - base + '.eps', - base + '.texidoc', - base + '.doctitle', - base + '-systems.texi', - base + '-systems.tex', - base + '-systems.pdftexi']) - if document_language: - map (consider_file, - [base + '.texidoc' + document_language, - base + '.doctitle' + document_language]) - - # UGH - junk global_options - if (base + '.eps' in result and self.format in (HTML, TEXINFO) - and not global_options.skip_png_check): - page_count = ps_page_count (full + '.eps') - if page_count <= 1: - require_file (base + '.png') - else: - for page in range (1, page_count + 1): - require_file (base + '-page%d.png' % page) - - system_count = 0 - if not skip_lily and not missing: - system_count = int(file (full + '-systems.count').read()) - - for number in range(1, system_count + 1): - systemfile = '%s-%d' % (base, number) - require_file (systemfile + '.eps') - consider_file (systemfile + '.pdf') - - # We can't require signatures, since books and toplevel - # markups do not output a signature. - if 'ddump-signature' in global_options.process_cmd: - consider_file (systemfile + '.signature') - - - return (result, missing) - - def is_outdated (self, output_dir, current_files): - found, missing = self.all_output_files (output_dir, current_files) - return missing - - def filter_text (self): - """Run snippet bodies through a command (say: convert-ly). - - This functionality is rarely used, and this code must have bitrot. - """ - code = self.substring ('code') - s = filter_pipe (code, global_options.filter_cmd) - d = { - 'code': s, - 'options': self.match.group ('options') - } - # TODO - return output[self.format][FILTER] % d - - def replacement_text (self): - func = LilypondSnippet.__dict__['output_' + self.format] - return func (self) - - def get_images (self): - base = self.basename () - - single = '%(base)s.png' % vars () - multiple = '%(base)s-page1.png' % vars () - images = (single,) - if (os.path.exists (multiple) - and (not os.path.exists (single) - or (os.stat (multiple)[stat.ST_MTIME] - > os.stat (single)[stat.ST_MTIME]))): - count = ps_page_count ('%(base)s.eps' % vars ()) - images = ['%s-page%d.png' % (base, page) for page in range (1, count+1)] - images = tuple (images) - - return images - - def output_docbook (self): - str = '' - base = self.basename () - for image in self.get_images (): - (base, ext) = os.path.splitext (image) - str += output[DOCBOOK][OUTPUT] % vars () - str += self.output_print_filename (DOCBOOK) - if (self.substring('inline') == 'inline'): - str = '' + str + '' - else: - str = '' + str + '' - if VERBATIM in self.option_dict: - verb = verbatim_html (self.verb_ly ()) - str = output[DOCBOOK][VERBATIM] % vars () + str - return str - - def output_html (self): - str = '' - base = self.basename () - if self.format == HTML: - str += self.output_print_filename (HTML) - if VERBATIM in self.option_dict: - verb = verbatim_html (self.verb_ly ()) - str += output[HTML][VERBATIM] % vars () - if QUOTE in self.option_dict: - str = output[HTML][QUOTE] % vars () - - str += output[HTML][BEFORE] % vars () - for image in self.get_images (): - (base, ext) = os.path.splitext (image) - alt = self.option_dict[ALT] - str += output[HTML][OUTPUT] % vars () - str += output[HTML][AFTER] % vars () - return str - - def output_info (self): - str = '' - for image in self.get_images (): - (base, ext) = os.path.splitext (image) - - # URG, makeinfo implicitly prepends dot to extension. - # Specifying no extension is most robust. - ext = '' - alt = self.option_dict[ALT] - info_image_path = os.path.join (global_options.info_images_dir, base) - str += output[TEXINFO][OUTPUTIMAGE] % vars () - - base = self.basename () - str += output[self.format][OUTPUT] % vars () - return str - - def output_latex (self): - str = '' - base = self.basename () - if self.format == LATEX: - str += self.output_print_filename (LATEX) - if VERBATIM in self.option_dict: - verb = self.verb_ly () - str += (output[LATEX][VERBATIM] % vars ()) - - str += (output[LATEX][OUTPUT] % vars ()) - - ## todo: maintain breaks - if 0: - breaks = self.ly ().count ("\n") - str += "".ljust (breaks, "\n").replace ("\n","%\n") - - if QUOTE in self.option_dict: - str = output[LATEX][QUOTE] % vars () - return str - - def output_print_filename (self, format): - str = '' - if PRINTFILENAME in self.option_dict: - base = self.basename () - filename = os.path.basename (self.substring ('filename')) - str = output[format][PRINTFILENAME] % vars () - - return str - - def output_texinfo (self): - str = self.output_print_filename (TEXINFO) - base = self.basename () - if DOCTITLE in self.option_dict: - doctitle = base + '.doctitle' - translated_doctitle = doctitle + document_language - if os.path.exists (translated_doctitle): - str += '@lydoctitle %s\n\n' % open (translated_doctitle).read () - elif os.path.exists (doctitle): - str += '@lydoctitle %s\n\n' % open (doctitle).read () - if TEXIDOC in self.option_dict: - texidoc = base + '.texidoc' - translated_texidoc = texidoc + document_language - if os.path.exists (translated_texidoc): - str += '@include %(translated_texidoc)s\n\n' % vars () - elif os.path.exists (texidoc): - str += '@include %(texidoc)s\n\n' % vars () - - substr = '' - if VERBATIM in self.option_dict: - version = '' - if ADDVERSION in self.option_dict: - version = output[TEXINFO][ADDVERSION] - verb = self.verb_ly () - substr = output[TEXINFO][VERBATIM] % vars () - substr += self.output_info () - if LILYQUOTE in self.option_dict: - substr = output[TEXINFO][QUOTE] % {'str':substr} - str += substr - -# str += ('@ifinfo\n' + self.output_info () + '\n@end ifinfo\n') -# str += ('@tex\n' + self.output_latex () + '\n@end tex\n') -# str += ('@html\n' + self.output_html () + '\n@end html\n') - - if QUOTE in self.option_dict: - str = output[TEXINFO][QUOTE] % vars () - - # need par after image - str += '\n' - - return str - -re_begin_verbatim = re.compile (r'\s+%.*?begin verbatim.*\n*', re.M) -re_end_verbatim = re.compile (r'\s+%.*?end verbatim.*$', re.M) - -class LilypondFileSnippet (LilypondSnippet): - def __init__ (self, type, match, format, line_number): - LilypondSnippet.__init__ (self, type, match, format, line_number) - self.contents = file (find_file (self.substring ('filename'))).read () - - def verb_ly (self): - s = self.contents - s = re_begin_verbatim.split (s)[-1] - s = re_end_verbatim.split (s)[0] - return verb_ly_gettext (s) - - def ly (self): - name = self.substring ('filename') - return ('\\sourcefilename \"%s\"\n\\sourcefileline 0\n%s' - % (name, self.contents)) - - -class LilyPondVersionString (Snippet): - """A string that does not require extra memory.""" - def __init__ (self, type, match, format, line_number): - Snippet.__init__ (self, type, match, format, line_number) - - def replacement_text (self): - return output[self.format][self.type] - - -snippet_type_to_class = { - 'lilypond_file': LilypondFileSnippet, - 'lilypond_block': LilypondSnippet, - 'lilypond': LilypondSnippet, - 'include': IncludeSnippet, - 'lilypondversion': LilyPondVersionString, -} def find_linestarts (s): nls = [0] @@ -1568,10 +274,11 @@ def find_linestarts (s): nls.append (len (s)) return nls -def find_toplevel_snippets (input_string, format, types): +def find_toplevel_snippets (input_string, formatter): res = {} + types = formatter.supported_snippet_types () for t in types: - res[t] = re.compile (snippet_res[format][t]) + res[t] = re.compile (formatter.snippet_regexp (t)) snippets = [] index = 0 @@ -1585,7 +292,6 @@ def find_toplevel_snippets (input_string, format, types): # where we search. # Since every part of the string is traversed at most once for # every type of snippet, this is linear. - while 1: first = None endex = 1 << 30 @@ -1597,9 +303,7 @@ def find_toplevel_snippets (input_string, format, types): if not m: continue - klass = Snippet - if type in snippet_type_to_class: - klass = snippet_type_to_class[type] + klass = global_options.formatter.snippet_class (type) start = index + m.start ('match') line_number = line_start_idx @@ -1607,7 +311,7 @@ def find_toplevel_snippets (input_string, format, types): line_number += 1 line_number += 1 - snip = klass (type, m, format, line_number) + snip = klass (type, m, formatter, line_number, global_options) found[type] = (start, snip) @@ -1629,52 +333,20 @@ def find_toplevel_snippets (input_string, format, types): endex = found[first][0] if not first: - snippets.append (Substring (input_string, index, len (input_string), line_start_idx)) + snippets.append (BookSnippet.Substring (input_string, index, len (input_string), line_start_idx)) break while (start > line_starts[line_start_idx+1]): line_start_idx += 1 (start, snip) = found[first] - snippets.append (Substring (input_string, index, start, line_start_idx + 1)) + snippets.append (BookSnippet.Substring (input_string, index, start, line_start_idx + 1)) snippets.append (snip) found[first] = None index = start + len (snip.match.group ('match')) return snippets -def filter_pipe (input, cmd): - """Pass input through cmd, and return the result.""" - - if global_options.verbose: - progress (_ ("Opening filter `%s'") % cmd) - - (stdin, stdout, stderr) = os.popen3 (cmd) - stdin.write (input) - status = stdin.close () - - if not status: - status = 0 - output = stdout.read () - status = stdout.close () - error = stderr.read () - - if not status: - status = 0 - signal = 0x0f & status - if status or (not output and error): - exit_status = status >> 8 - error (_ ("`%s' failed (%d)") % (cmd, exit_status)) - error (_ ("The error log is as follows:")) - ly.stderr_write (error) - ly.stderr_write (stderr.read ()) - exit (status) - - if global_options.verbose: - progress ('\n') - - return output - def system_in_directory (cmd, directory): """Execute a command in a different directory. @@ -1689,20 +361,17 @@ def system_in_directory (cmd, directory): def process_snippets (cmd, snippets, - format, lily_output_dir): + formatter, lily_output_dir): """Run cmd on all of the .ly files from snippets.""" if not snippets: return - if format in (HTML, TEXINFO) and '--formats' not in cmd: - cmd += ' --formats=png ' - elif format in (DOCBOOK) and '--formats' not in cmd: - cmd += ' --formats=png,pdf ' + cmd = formatter.adjust_snippet_command (cmd) checksum = snippet_list_checksum (snippets) contents = '\n'.join (['snippet-map-%d.ly' % checksum] - + [snip.basename() + '.ly' for snip in snippets]) + + list (set ([snip.basename() + '.ly' for snip in snippets]))) name = os.path.join (lily_output_dir, 'snippet-names-%d.ly' % checksum) file (name, 'wb').write (contents) @@ -1711,86 +380,6 @@ def process_snippets (cmd, snippets, lily_output_dir) -### -# Retrieve dimensions from LaTeX -LATEX_INSPECTION_DOCUMENT = r''' -\nonstopmode -%(preamble)s -\begin{document} -\typeout{textwidth=\the\textwidth} -\typeout{columnsep=\the\columnsep} -\makeatletter\if@twocolumn\typeout{columns=2}\fi\makeatother -\end{document} -''' - -# Do we need anything else besides `textwidth'? -def get_latex_textwidth (source): - m = re.search (r'''(?P\\begin\s*{document})''', source) - if m == None: - warning (_ ("cannot find \\begin{document} in LaTeX document")) - - ## what's a sensible default? - return 550.0 - - preamble = source[:m.start (0)] - latex_document = LATEX_INSPECTION_DOCUMENT % vars () - - (handle, tmpfile) = tempfile.mkstemp('.tex') - logfile = os.path.splitext (tmpfile)[0] + '.log' - logfile = os.path.split (logfile)[1] - - tmp_handle = os.fdopen (handle,'w') - tmp_handle.write (latex_document) - tmp_handle.close () - - ly.system ('%s %s' % (global_options.latex_program, tmpfile), - be_verbose=global_options.verbose) - parameter_string = file (logfile).read() - - os.unlink (tmpfile) - os.unlink (logfile) - - columns = 0 - m = re.search ('columns=([0-9.]*)', parameter_string) - if m: - columns = int (m.group (1)) - - columnsep = 0 - m = re.search ('columnsep=([0-9.]*)pt', parameter_string) - if m: - columnsep = float (m.group (1)) - - textwidth = 0 - m = re.search ('textwidth=([0-9.]*)pt', parameter_string) - if m: - textwidth = float (m.group (1)) - if columns: - textwidth = (textwidth - columnsep) / columns - - return textwidth - -def modify_preamble (chunk): - str = chunk.replacement_text () - if (re.search (r"\\begin *{document}", str) - and not re.search ("{graphic[sx]", str)): - str = re.sub (r"\\begin{document}", - r"\\usepackage{graphics}" + '\n' - + r"\\begin{document}", - str) - chunk.override_text = str - - -format2ext = { - HTML: '.html', - # TEXINFO: '.texinfo', - TEXINFO: '.texi', - LATEX: '.tex', - DOCBOOK: '.xml' -} - -class CompileError(Exception): - pass - def snippet_list_checksum (snippets): return hash (' '.join([l.basename() for l in snippets])) @@ -1821,7 +410,7 @@ def split_output_files(directory): return set (files) def do_process_cmd (chunks, input_name, options): - snippets = [c for c in chunks if isinstance (c, LilypondSnippet)] + snippets = [c for c in chunks if isinstance (c, BookSnippet.LilypondSnippet)] output_files = split_output_files (options.lily_output_dir) outdated = [c for c in snippets if c.is_outdated (options.lily_output_dir, output_files)] @@ -1836,7 +425,7 @@ def do_process_cmd (chunks, input_name, options): progress (_ ("Processing...")) progress ('\n') process_snippets (options.process_cmd, outdated, - options.format, options.lily_output_dir) + options.formatter, options.lily_output_dir) else: progress (_ ("All snippets are up to date...")) @@ -1853,30 +442,15 @@ def do_process_cmd (chunks, input_name, options): ### # Format guessing data -ext2format = { - '.html': HTML, - '.itely': TEXINFO, - '.latex': LATEX, - '.lytex': LATEX, - '.tely': TEXINFO, - '.tex': LATEX, - '.texi': TEXINFO, - '.texinfo': TEXINFO, - '.xml': HTML, - '.lyxml': DOCBOOK -} def guess_format (input_filename): format = None e = os.path.splitext (input_filename)[1] - if e in ext2format: - # FIXME - format = ext2format[e] - else: - error (_ ("cannot determine format for: %s" - % input_filename)) - exit (1) - return format + for formatter in BookBase.all_formats: + if formatter.can_handle_extension (e): + return formatter + error (_ ("cannot determine format for: %s" % input_filename)) + exit (1) def write_if_updated (file_name, lines): try: @@ -1918,16 +492,20 @@ def samefile (f1, f2): def do_file (input_filename, included=False): # Ugh. + input_absname = input_filename if not input_filename or input_filename == '-': in_handle = sys.stdin input_fullname = '' else: if os.path.exists (input_filename): input_fullname = input_filename - elif global_options.format == LATEX and ly.search_exe_path ('kpsewhich'): - input_fullname = os.popen ('kpsewhich ' + input_filename).read()[:-1] else: - input_fullname = find_file (input_filename) + input_fullname = global_options.formatter.input_fullname (input_filename) + # Normalize path to absolute path, since we will change cwd to the output dir! + # Otherwise, "lilypond-book -o out test.tex" will complain that it is + # overwriting the input file (which it is actually not), since the + # input filename is relative to the CWD... + input_absname = os.path.abspath (input_fullname) note_input_file (input_fullname) in_handle = file (input_fullname) @@ -1951,10 +529,10 @@ def do_file (input_filename, included=False): os.chdir (global_options.output_dir) output_filename = os.path.join(global_options.output_dir, - input_base + format2ext[global_options.format]) + input_base + global_options.formatter.default_extension) if (os.path.exists (input_filename) and os.path.exists (output_filename) - and samefile (output_filename, input_fullname)): + and samefile (output_filename, input_absname)): error ( _ ("Output would overwrite input file; use --output.")) exit (2) @@ -1964,31 +542,15 @@ def do_file (input_filename, included=False): source = in_handle.read () progress ('\n') - set_default_options (source, default_ly_options, global_options.format) - - - # FIXME: Containing blocks must be first, see - # find_toplevel_snippets. - snippet_types = ( - 'multiline_comment', - 'verbatim', - 'lilypond_block', - # 'verb', - 'singleline_comment', - 'lilypond_file', - 'include', - 'lilypond', - 'lilypondversion', - ) + if not included: + global_options.formatter.init_default_snippet_options (source) + + progress (_ ("Dissecting...")) - chunks = find_toplevel_snippets (source, global_options.format, snippet_types) - - if global_options.format == LATEX: - for c in chunks: - if (c.is_plain () and - re.search (r"\\begin *{document}", c.replacement_text())): - modify_preamble (c) - break + chunks = find_toplevel_snippets (source, global_options.formatter) + + # Let the formatter modify the chunks before further processing + chunks = global_options.formatter.process_chunks (chunks) progress ('\n') if global_options.filter_cmd: @@ -2010,27 +572,35 @@ def do_file (input_filename, included=False): return do_file (name, included=True) include_chunks = map (process_include, - filter (lambda x: isinstance (x, IncludeSnippet), + filter (lambda x: isinstance (x, BookSnippet.IncludeSnippet), chunks)) return chunks + reduce (lambda x, y: x + y, include_chunks, []) - except CompileError: + except BookSnippet.CompileError: os.chdir (original_dir) progress (_ ("Removing `%s'") % output_filename) progress ('\n') - raise CompileError + raise BookSnippet.CompileError def do_options (): global global_options opt_parser = get_option_parser() (global_options, args) = opt_parser.parse_args () - if global_options.format in ('texi-html', 'texi'): - global_options.format = TEXINFO + + global_options.information = {'program_version': ly.program_version, 'program_name': ly.program_name } global_options.include_path = map (os.path.abspath, global_options.include_path) + # Load the python packages (containing e.g. custom formatter classes) + # passed on the command line + nr = 0 + for i in global_options.custom_packages: + nr += 1 + print imp.load_source ("book_custom_package%s" % nr, i) + + if global_options.warranty: warranty () exit (0) @@ -2047,12 +617,18 @@ def main (): basename = os.path.splitext (files[0])[0] basename = os.path.split (basename)[1] - if not global_options.format: - global_options.format = guess_format (files[0]) + if global_options.format: + # Retrieve the formatter for the given format + for formatter in BookBase.all_formats: + if formatter.can_handle_format (global_options.format): + global_options.formatter = formatter + else: + global_options.formatter = guess_format (files[0]) + global_options.format = global_options.formatter.format - formats = 'ps' - if global_options.format in (TEXINFO, HTML, DOCBOOK): - formats += ',png' + # make the global options available to the formatters: + global_options.formatter.global_options = global_options + formats = global_options.formatter.image_formats if global_options.process_cmd == '': global_options.process_cmd = (lilypond_binary @@ -2067,11 +643,7 @@ def main (): global_options.process_cmd += ' '.join ([' -I %s' % ly.mkarg (p) for p in includes]) - if global_options.format in (TEXINFO, LATEX): - ## prevent PDF from being switched on by default. - global_options.process_cmd += ' --formats=eps ' - if global_options.create_pdf: - global_options.process_cmd += "--pdf -dinclude-eps-fonts -dgs-load-fonts " + global_options.formatter.process_options (global_options) if global_options.verbose: global_options.process_cmd += " --verbose " @@ -2092,7 +664,7 @@ def main (): identify () try: chunks = do_file (files[0]) - except CompileError: + except BookSnippet.CompileError: exit (1) inputs = note_input_file ('') diff --git a/scripts/lilypond-invoke-editor.scm b/scripts/lilypond-invoke-editor.scm index 2f4f3e84e5..230b1761d4 100644 --- a/scripts/lilypond-invoke-editor.scm +++ b/scripts/lilypond-invoke-editor.scm @@ -1,10 +1,23 @@ #!@GUILE@ -s !# ;;;; lilypond-invoke-editor.scm -- Invoke an editor in file:line:column mode + +;;;; Copyright (C) 2005--2011 Jan Nieuwenhuizen + +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; 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. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; 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. ;;;; -;;;; (c) 2005--2009 Jan Nieuwenhuizen +;;;; You should have received a copy of the GNU General Public License +;;;; along with LilyPond. If not, see . ;; gui debug helper ;; (define (exit x) (system "sleep 10")) @@ -34,12 +47,7 @@ (format #f "~a/share/lilypond/~a" prefix TOPLEVEL-VERSION)))) - - -;; gettext wrapper for guile < 1.7.2 -(if (defined? 'gettext) - (define-public _ gettext) - (define-public (_ x) x)) +(define-public _ gettext) (define (show-version port) (format port "~a (GNU LilyPond) ~a\n" PROGRAM-NAME TOPLEVEL-VERSION)) diff --git a/scripts/lilysong.py b/scripts/lilysong.py index f02aca7903..7735d558b7 100644 --- a/scripts/lilysong.py +++ b/scripts/lilysong.py @@ -1,24 +1,23 @@ #!@TARGET_PYTHON@ -# Copyright (c) 2006--2009 Brailcom, o.p.s. +# Copyright (c) 2006--2011 Brailcom, o.p.s. # # Author: Milan Zamazal # -# COPYRIGHT NOTICE +# This file is part of LilyPond, the GNU music typesetter. # -# This program is free software; you can redistribute it and/or modify +# 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 2 of the License, or +# 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. +# 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 this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +# along with LilyPond. If not, see . import codecs diff --git a/scripts/midi2ly.py b/scripts/midi2ly.py index c57c788d51..1923d3b880 100644 --- a/scripts/midi2ly.py +++ b/scripts/midi2ly.py @@ -1,24 +1,28 @@ #!@TARGET_PYTHON@ # # midi2ly.py -- LilyPond midi import script -# -# source file of the GNU LilyPond music typesetter + +# This file is part of LilyPond, the GNU music typesetter. +# +# Copyright (C) 1998--2011 Han-Wen Nienhuys +# Jan Nieuwenhuizen +# +# 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. # -# (c) 1998--2009 Han-Wen Nienhuys -# Jan Nieuwenhuizen +# 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 . ''' TODO: - * test on weird and unquantised midi input (lily-devel) - * update doc and manpage - - * simply insert clef changes whenever too many ledger lines - [to avoid tex capacity exceeded] - * do not ever quant skips - * better lyrics handling - * [see if it is feasible to] move ly-classes to library for use in - other converters, while leaving midi specific stuff here ''' import os @@ -43,13 +47,13 @@ global_options = None clocks_per_1 = 1536 clocks_per_4 = 0 -time = 0 +time = None reference_note = 0 start_quant_clocks = 0 duration_quant_clocks = 0 allowed_tuplet_clocks = [] - +bar_max = 0 ################################################################ @@ -74,7 +78,7 @@ def warranty (): %s %s -''' % ( _ ('Copyright (c) %s by') % '2001--2009', +''' % ( _ ('Copyright (c) %s by') % '1998--2011', '\n '.join (authors), _ ('Distributed under terms of the GNU General Public License.'), _ ('It comes with NO WARRANTY.'))) @@ -84,11 +88,15 @@ def progress (s): def warning (s): progress (_ ("warning: ") + s) - + def error (s): progress (_ ("error: ") + s) raise Exception (_ ("Exiting... ")) +def debug (s): + if global_options.debug: + progress ("debug: " + s) + def system (cmd, ignore_error = 0): return ly.system (cmd, ignore_error=ignore_error) @@ -103,10 +111,8 @@ class Duration: allowed_durs = (1, 2, 4, 8, 16, 32, 64, 128) def __init__ (self, clocks): self.clocks = clocks - if clocks <= 0: - self.clocks = duration_quant_clocks (self.dur, self.num, self.den) = self.dur_num_den (clocks) - + def dur_num_den (self, clocks): for i in range (len (allowed_tuplet_clocks)): if clocks == allowed_tuplet_clocks[i]: @@ -130,7 +136,7 @@ class Duration: s = '%d*%d' % (self.dur, self.num) else: s = '%d*%d/%d' % (self.dur, self.num, self.den) - + global reference_note reference_note.duration = self @@ -164,7 +170,11 @@ class Note: n = self.names[(self.pitch) % 12] a = self.alterations[(self.pitch) % 12] - if a and global_options.key.flats: + key = global_options.key + if not key: + key = Key (0, 0, 0) + + if a and key.flats: a = - self.alterations[(self.pitch) % 12] n = (n - a) % 7 @@ -196,7 +206,6 @@ class Note: o = self.pitch / 12 - 4 - key = global_options.key if key.minor: # as -> gis if (key.sharps == 0 and key.flats == 0 @@ -233,12 +242,12 @@ class Note: n = 6; a = 1; o = o - 1 return (o, n, a) - + def __repr__ (self): s = chr ((self.notename + 2) % 7 + ord ('a')) - return 'Note(%s %s)' % (s, self.duration.dump()) + return 'Note(%s %s)' % (s, self.duration.dump ()) - def dump (self, dump_dur = 1): + def dump (self, dump_dur=True): global reference_note s = chr ((self.notename + 2) % 7 + ord ('a')) s = s + self.alteration_names[self.alteration + 2] @@ -247,25 +256,25 @@ class Note: else: delta = self.pitch - reference_note.pitch commas = sign (delta) * (abs (delta) / 12) - if ((sign (delta) \ - * (self.notename - reference_note.notename) + 7) \ - % 7 >= 4) \ - or ((self.notename == reference_note.notename) \ - and (abs (delta) > 4) and (abs (delta) < 12)): + if (((sign (delta) + * (self.notename - reference_note.notename) + 7) + % 7 >= 4) + or ((self.notename == reference_note.notename) + and (abs (delta) > 4) and (abs (delta) < 12))): commas = commas + sign (delta) - + if commas > 0: s = s + "'" * commas elif commas < 0: s = s + "," * -commas - ## FIXME: compile fix --jcn - if dump_dur and (global_options.explicit_durations \ - or self.duration.compare (reference_note.duration)): + if ((dump_dur + and self.duration.compare (reference_note.duration)) + or global_options.explicit_durations): s = s + self.duration.dump () reference_note = self - + # TODO: move space return s + ' ' @@ -281,7 +290,7 @@ class Time: def __repr__ (self): return 'Time(%d/%d)' % (self.num, self.den) - + def dump (self): global time time = self @@ -294,12 +303,12 @@ class Tempo: def __repr__ (self): return 'Tempo(%d)' % self.bpm () - + def bpm (self): return 4 * 60 / self.seconds_per_1 - + def dump (self): - return '\n ' + '\\tempo 4 = %d ' % (self.bpm()) + '\n ' + return '\n ' + '\\tempo 4 = %d ' % (self.bpm ()) + '\n ' class Clef: clefs = ('"bass_8"', 'bass', 'violin', '"violin^8"') @@ -308,7 +317,7 @@ class Clef: def __repr__ (self): return 'Clef(%s)' % self.clefs[self.type] - + def dump (self): return '\n \\clef %s\n ' % self.clefs[self.type] @@ -333,7 +342,7 @@ class Key: k = (ord ('cfbeadg'[self.flats % 7]) - ord ('a') - 2 -2 * self.minor + 7) % 7 else: k = (ord ('cgdaebf'[self.sharps % 7]) - ord ('a') - 2 -2 * self.minor + 7) % 7 - + if not self.minor: name = chr ((k + 2) % 7 + ord ('a')) else: @@ -373,7 +382,7 @@ class Text: 'LYRIC', 'MARKER', 'CUE_POINT',) - + def __init__ (self, type, text): self.clocks = 0 self.type = type @@ -381,48 +390,180 @@ class Text: def dump (self): # urg, we should be sure that we're in a lyrics staff + s = '' if self.type == midi.LYRIC: s = '"%s"' % self.text d = Duration (self.clocks) - if global_options.explicit_durations \ - or d.compare (reference_note.duration): + if (global_options.explicit_durations + or d.compare (reference_note.duration)): s = s + Duration (self.clocks).dump () s = s + ' ' - else: + elif (self.text.strip () + and self.type == midi.SEQUENCE_TRACK_NAME + and not self.text == 'control track' + and not self.track.lyrics_p_): + text = self.text.replace ('(MIDI)', '').strip () + if text: + s = '\n \\set Staff.instrumentName = "%(text)s"\n ' % locals () + elif self.text.strip (): s = '\n % [' + self.text_types[self.type] + '] ' + self.text + '\n ' return s def __repr__ (self): return 'Text(%d=%s)' % (self.type, self.text) +def get_voice (channel, music): + debug ('channel: ' + str (channel) + '\n') + return unthread_notes (music) + +class Channel: + def __init__ (self, number): + self.number = number + self.events = [] + self.music = None + def add (self, event): + self.events.append (event) + def get_voice (self): + if not self.music: + self.music = self.parse () + return get_voice (self.number, self.music) + def parse (self): + pitches = {} + notes = [] + music = [] + last_lyric = 0 + last_time = 0 + for e in self.events: + t = e[0] + + if start_quant_clocks: + t = quantise_clocks (t, start_quant_clocks) + + if (e[1][0] == midi.NOTE_OFF + or (e[1][0] == midi.NOTE_ON and e[1][2] == 0)): + debug ('%d: NOTE OFF: %s' % (t, e[1][1])) + if not e[1][2]: + debug (' ...treated as OFF') + end_note (pitches, notes, t, e[1][1]) + + elif e[1][0] == midi.NOTE_ON: + if not pitches.has_key (e[1][1]): + debug ('%d: NOTE ON: %s' % (t, e[1][1])) + pitches[e[1][1]] = (t, e[1][2]) + else: + debug ('...ignored') + + # all include ALL_NOTES_OFF + elif (e[1][0] >= midi.ALL_SOUND_OFF + and e[1][0] <= midi.POLY_MODE_ON): + for i in pitches: + end_note (pitches, notes, t, i) + elif e[1][0] == midi.META_EVENT: + if e[1][1] == midi.END_OF_TRACK: + for i in pitches: + end_note (pitches, notes, t, i) + break + + elif e[1][1] == midi.SET_TEMPO: + (u0, u1, u2) = map (ord, e[1][2]) + us_per_4 = u2 + 256 * (u1 + 256 * u0) + seconds_per_1 = us_per_4 * 4 / 1e6 + music.append ((t, Tempo (seconds_per_1))) + elif e[1][1] == midi.TIME_SIGNATURE: + (num, dur, clocks4, count32) = map (ord, e[1][2]) + den = 2 ** dur + music.append ((t, Time (num, den))) + elif e[1][1] == midi.KEY_SIGNATURE: + (alterations, minor) = map (ord, e[1][2]) + sharps = 0 + flats = 0 + if alterations < 127: + sharps = alterations + else: + flats = 256 - alterations + + k = Key (sharps, flats, minor) + if not t and global_options.key: + # At t == 0, a set --key overrides us + k = global_options.key + music.append ((t, k)) + + # ugh, must set key while parsing + # because Note init uses key + # Better do Note.calc () at dump time? + global_options.key = k + + elif (e[1][1] == midi.LYRIC + or (global_options.text_lyrics + and e[1][1] == midi.TEXT_EVENT)): + self.lyrics_p_ = True + if last_lyric: + last_lyric.clocks = t - last_time + music.append ((last_time, last_lyric)) + last_time = t + last_lyric = Text (midi.LYRIC, e[1][2]) + + elif (e[1][1] >= midi.SEQUENCE_NUMBER + and e[1][1] <= midi.CUE_POINT): + text = Text (e[1][1], e[1][2]) + text.track = self + music.append ((t, text)) + if (text.type == midi.SEQUENCE_TRACK_NAME): + self.name = text.text + else: + if global_options.verbose: + sys.stderr.write ("SKIP: %s\n" % `e`) + else: + if global_options.verbose: + sys.stderr.write ("SKIP: %s\n" % `e`) -def split_track (track): - chs = {} - for i in range(16): - chs[i] = [] - - for e in track: + if last_lyric: + # last_lyric.clocks = t - last_time + # hmm + last_lyric.clocks = clocks_per_4 + music.append ((last_time, last_lyric)) + last_lyric = 0 + + i = 0 + while len (notes): + if i < len (music) and notes[0][0] >= music[i][0]: + i = i + 1 + else: + music.insert (i, notes[0]) + del notes[0] + return music + +class Track (Channel): + def __init__ (self): + Channel.__init__ (self, None) + self.name = None + self.channels = {} + self.lyrics_p_ = False + def _add (self, event): + self.events.append (event) + def add (self, event, channel=None): + if channel == None: + self._add (event) + else: + self.channels[channel] = self.channels.get (channel, Channel (channel)) + self.channels[channel].add (event) + def get_voices (self): + return ([self.get_voice ()] + + [self.channels[k].get_voice () + for k in sorted (self.channels.keys ())]) + +def create_track (events): + track = Track () + for e in events: data = list (e[1]) if data[0] > 0x7f and data[0] < 0xf0: - c = data[0] & 0x0f + channel = data[0] & 0x0f e = (e[0], tuple ([data[0] & 0xf0] + data[1:])) - chs[c].append (e) + track.add (e, channel) else: - chs[0].append (e) - - for i in range (16): - if chs[i] == []: - del chs[i] - - threads = [] - for v in chs.values (): - events = events_on_channel (v) - thread = unthread_notes (events) - if len (thread): - threads.append (thread) - return threads - + track.add (e) + return track def quantise_clocks (clocks, quant): q = int (clocks / quant) * quant @@ -439,7 +580,7 @@ def end_note (pitches, notes, t, e): (lt, vel) = pitches[e] del pitches[e] - i = len (notes) - 1 + i = len (notes) - 1 while i > 0: if notes[i][0] > lt: i = i -1 @@ -457,102 +598,6 @@ def end_note (pitches, notes, t, e): except KeyError: pass -def events_on_channel (channel): - pitches = {} - - notes = [] - events = [] - last_lyric = 0 - last_time = 0 - for e in channel: - t = e[0] - - if start_quant_clocks: - t = quantise_clocks (t, start_quant_clocks) - - - if e[1][0] == midi.NOTE_OFF \ - or (e[1][0] == midi.NOTE_ON and e[1][2] == 0): - end_note (pitches, notes, t, e[1][1]) - - elif e[1][0] == midi.NOTE_ON: - if not pitches.has_key (e[1][1]): - pitches[e[1][1]] = (t, e[1][2]) - - # all include ALL_NOTES_OFF - elif e[1][0] >= midi.ALL_SOUND_OFF \ - and e[1][0] <= midi.POLY_MODE_ON: - for i in pitches: - end_note (pitches, notes, t, i) - - elif e[1][0] == midi.META_EVENT: - if e[1][1] == midi.END_OF_TRACK: - for i in pitches: - end_note (pitches, notes, t, i) - break - - elif e[1][1] == midi.SET_TEMPO: - (u0, u1, u2) = map (ord, e[1][2]) - us_per_4 = u2 + 256 * (u1 + 256 * u0) - seconds_per_1 = us_per_4 * 4 / 1e6 - events.append ((t, Tempo (seconds_per_1))) - elif e[1][1] == midi.TIME_SIGNATURE: - (num, dur, clocks4, count32) = map (ord, e[1][2]) - den = 2 ** dur - events.append ((t, Time (num, den))) - elif e[1][1] == midi.KEY_SIGNATURE: - (alterations, minor) = map (ord, e[1][2]) - sharps = 0 - flats = 0 - if alterations < 127: - sharps = alterations - else: - flats = 256 - alterations - - k = Key (sharps, flats, minor) - events.append ((t, k)) - - # ugh, must set key while parsing - # because Note init uses key - # Better do Note.calc () at dump time? - global_options.key = k - - elif e[1][1] == midi.LYRIC \ - or (global_options.text_lyrics and e[1][1] == midi.TEXT_EVENT): - if last_lyric: - last_lyric.clocks = t - last_time - events.append ((last_time, last_lyric)) - last_time = t - last_lyric = Text (midi.LYRIC, e[1][2]) - - elif e[1][1] >= midi.SEQUENCE_NUMBER \ - and e[1][1] <= midi.CUE_POINT: - events.append ((t, Text (e[1][1], e[1][2]))) - else: - if global_options.verbose: - sys.stderr.write ("SKIP: %s\n" % `e`) - pass - else: - if global_options.verbose: - sys.stderr.write ("SKIP: %s\n" % `e`) - pass - - if last_lyric: - # last_lyric.clocks = t - last_time - # hmm - last_lyric.clocks = clocks_per_4 - events.append ((last_time, last_lyric)) - last_lyric = 0 - - i = 0 - while len (notes): - if i < len (events) and notes[0][0] >= events[i][0]: - i = i + 1 - else: - events.insert (i, notes[0]) - del notes[0] - return events - def unthread_notes (channel): threads = [] while channel: @@ -562,17 +607,17 @@ def unthread_notes (channel): todo = [] for e in channel: t = e[0] - if e[1].__class__ == Note \ - and ((t == start_busy_t \ - and e[1].clocks + t == end_busy_t) \ - or t >= end_busy_t): + if (e[1].__class__ == Note + and ((t == start_busy_t + and e[1].clocks + t == end_busy_t) + or t >= end_busy_t)): thread.append (e) start_busy_t = t end_busy_t = t + e[1].clocks - elif e[1].__class__ == Time \ - or e[1].__class__ == Key \ - or e[1].__class__ == Text \ - or e[1].__class__ == Tempo: + elif (e[1].__class__ == Time + or e[1].__class__ == Key + or e[1].__class__ == Text + or e[1].__class__ == Tempo): thread.append (e) else: todo.append (e) @@ -585,12 +630,12 @@ def gcd (a,b): if b == 0: return a c = a - while c: + while c: c = a % b a = b b = c return a - + def dump_skip (skip, clocks): return skip + Duration (clocks).dump () + ' ' @@ -610,13 +655,12 @@ def dump_chord (ch): elif len (notes) > 1: global reference_note s = s + '<' - s = s + notes[0].dump (dump_dur = 0) + s = s + notes[0].dump (dump_dur=False) r = reference_note for i in notes[1:]: - s = s + i.dump (dump_dur = 0 ) + s = s + i.dump (dump_dur=False) s = s + '>' - - s = s + notes[0].duration.dump() + ' ' + s = s + notes[0].duration.dump () + ' ' reference_note = r return s @@ -625,26 +669,25 @@ def dump_bar_line (last_bar_t, t, bar_count): bar_t = time.bar_clocks () if t - last_bar_t >= bar_t: bar_count = bar_count + (t - last_bar_t) / bar_t - + if t - last_bar_t == bar_t: - s = '|\n %% %d\n ' % bar_count + s = '\n | %% %(bar_count)d\n ' % locals () last_bar_t = t else: # urg, this will barf at meter changes last_bar_t = last_bar_t + (t - last_bar_t) / bar_t * bar_t - + return (s, last_bar_t, bar_count) - -def dump_channel (thread, skip): - global reference_note, time - global_options.key = Key (0, 0, 0) - time = Time (4, 4) - # urg LilyPond doesn't start at c4, but - # remembers from previous tracks! - # reference_note = Note (clocks_per_4, 4*12, 0) - reference_note = Note (0, 4*12, 0) +def dump_voice (thread, skip): + global reference_note, time + ref = Note (0, 4*12, 0) + if not reference_note: + reference_note = ref + else: + ref.duration = reference_note.duration + reference_note = ref last_e = None chs = [] ch = [] @@ -655,9 +698,9 @@ def dump_channel (thread, skip): else: if ch: chs.append ((last_e[0], ch)) - + ch = [e[1]] - + last_e = e if ch: @@ -666,9 +709,9 @@ def dump_channel (thread, skip): last_t = 0 last_bar_t = 0 bar_count = 1 - + lines = [''] - for ch in chs: + for ch in chs: t = ch[0] i = lines[-1].rfind ('\n') + 1 @@ -676,124 +719,223 @@ def dump_channel (thread, skip): lines.append ('') if t - last_t > 0: - lines[-1] = lines[-1] + dump_skip (skip, t-last_t) + d = t - last_t + if bar_max and t > time.bar_clocks () * bar_max: + d = time.bar_clocks () * bar_max - last_t + lines[-1] = lines[-1] + dump_skip (skip, d) elif t - last_t < 0: errorport.write ('BUG: time skew') (s, last_bar_t, bar_count) = dump_bar_line (last_bar_t, t, bar_count) + + if bar_max and bar_count > bar_max: + break + lines[-1] = lines[-1] + s - lines[-1] = lines[-1] + dump_chord (ch[1]) clocks = 0 for i in ch[1]: if i.clocks > clocks: clocks = i.clocks - + last_t = t + clocks - + (s, last_bar_t, bar_count) = dump_bar_line (last_bar_t, - last_t, bar_count) + last_t, bar_count) lines[-1] = lines[-1] + s return '\n '.join (lines) + '\n' -def track_name (i): - return 'track%c' % (i + ord ('A')) - -def channel_name (i): - return 'channel%c' % (i + ord ('A')) +def number2ascii (i): + s = '' + i += 1 + while i > 0: + m = (i - 1) % 26 + s = '%c' % (m + ord ('A')) + s + i = (i - m)/26 + return s -def dump_track (channels, n): +def get_track_name (i): + return 'track' + number2ascii (i) + +def get_channel_name (i): + return 'channel' + number2ascii (i) + +def get_voice_name (i, zero_too_p=False): + if i or zero_too_p: + return 'voice' + number2ascii (i) + return '' + +def lst_append (lst, x): + lst.append (x) + return lst + +def get_voice_layout (average_pitch): + d = {} + for i in range (len (average_pitch)): + d[average_pitch[i]] = lst_append (d.get (average_pitch[i], []), i) + s = list (reversed (sorted (average_pitch))) + non_empty = len (filter (lambda x: x, s)) + names = ['One', 'Two'] + if non_empty > 2: + names = ['One', 'Three', 'Four', 'Two'] + layout = map (lambda x: '', range (len (average_pitch))) + for i, n in zip (s, names): + if i: + v = d[i] + if type (v) == list: + d[i] = v[1:] + v = v[0] + layout[v] = n + return layout + +def dump_track (track, n): s = '\n' - track = track_name (n) - clef = guess_clef (channels) - - for i in range (len (channels)): - channel = channel_name (i) - item = thread_first_item (channels[i]) - - if item and item.__class__ == Note: - skip = 's' - s = s + '%s = ' % (track + channel) - if not global_options.absolute_pitches: - s = s + '\\relative c ' - elif item and item.__class__ == Text: - skip = '" "' - s = s + '%s = \\lyricmode ' % (track + channel) - else: - skip = '\\skip ' - s = s + '%s = ' % (track + channel) - s = s + '{\n' - s = s + ' ' + dump_channel (channels[i][0], skip) - s = s + '}\n\n' + track_name = get_track_name (n) + + average_pitch = track_average_pitch (track) + voices = len (filter (lambda x: x, average_pitch[1:])) + clef = get_best_clef (average_pitch[0]) + + c = 0 + vv = 0 + for channel in track: + v = 0 + channel_name = get_channel_name (c) + c += 1 + for voice in channel: + voice_name = get_voice_name (v) + voice_id = track_name + channel_name + voice_name + item = voice_first_item (voice) + + if item and item.__class__ == Note: + skip = 'r' + if global_options.skip: + skip = 's' + s += '%(voice_id)s = ' % locals () + if not global_options.absolute_pitches: + s += '\\relative c ' + elif item and item.__class__ == Text: + skip = '" "' + s += '%(voice_id)s = \\lyricmode ' % locals () + else: + skip = '\\skip ' + s += '%(voice_id)s = ' % locals () + s += '{\n' + if not n and not vv and global_options.key: + s += global_options.key.dump () + if average_pitch[vv+1] and voices > 1: + vl = get_voice_layout (average_pitch[1:])[vv] + if vl: + s += ' \\voice' + vl + '\n' + else: + warning (_ ('found more than 5 voices on a staff, expect bad output')) + s += ' ' + dump_voice (voice, skip) + s += '}\n\n' + v += 1 + vv += 1 - s = s + '%s = <<\n' % track + s += '%(track_name)s = <<\n' % locals () if clef.type != 2: - s = s + clef.dump () + '\n' - - for i in range (len (channels)): - channel = channel_name (i) - item = thread_first_item (channels[i]) - if item and item.__class__ == Text: - s = s + ' \\context Lyrics = %s \\%s\n' % (channel, - track + channel) - else: - s = s + ' \\context Voice = %s \\%s\n' % (channel, - track + channel) - s = s + '>>\n\n' + s += clef.dump () + '\n' + + c = 0 + vv = 0 + for channel in track: + v = 0 + channel_name = get_channel_name (c) + c += 1 + for voice in channel: + voice_context_name = get_voice_name (vv, zero_too_p=True) + voice_name = get_voice_name (v) + v += 1 + vv += 1 + voice_id = track_name + channel_name + voice_name + item = voice_first_item (voice) + context = 'Voice' + if item and item.__class__ == Text: + context = 'Lyrics' + s += ' \\context %(context)s = %(voice_context_name)s \\%(voice_id)s\n' % locals () + s += '>>\n\n' return s -def thread_first_item (thread): - for chord in thread: - for event in chord: - if (event[1].__class__ == Note - or (event[1].__class__ == Text +def voice_first_item (voice): + for event in voice: + if (event[1].__class__ == Note + or (event[1].__class__ == Text and event[1].type == midi.LYRIC)): - - return event[1] + return event[1] + return None + +def channel_first_item (channel): + for voice in channel: + first = voice_first_item (voice) + if first: + return first return None def track_first_item (track): - for thread in track: - first = thread_first_item (thread) + for channel in track: + first = channel_first_item (channel) if first: return first return None -def guess_clef (track): +def track_average_pitch (track): i = 0 - p = 0 - for thread in track: - for chord in thread: - for event in chord: + p = [0] + v = 1 + for channel in track: + for voice in channel: + c = 0 + p.append (0) + for event in voice: if event[1].__class__ == Note: - i = i + 1 - p = p + event[1].pitch - if i and p / i <= 3*12: - return Clef (0) - elif i and p / i <= 5*12: - return Clef (1) - elif i and p / i >= 7*12: - return Clef (3) - else: - return Clef (2) - + i += 1 + c += 1 + p[v] += event[1].pitch + if c: + p[0] += p[v] + p[v] = p[v] / c + v += 1 + if i: + p[0] = p[0] / i + return p + +def get_best_clef (average_pitch): + if average_pitch: + if average_pitch <= 3*12: + return Clef (0) + elif average_pitch <= 5*12: + return Clef (1) + elif average_pitch >= 7*12: + return Clef (3) + return Clef (2) + +class Staff: + def __init__ (self, track): + self.voices = track.get_voices () + def dump (self, i): + return dump_track (self.voices, i) def convert_midi (in_file, out_file): global clocks_per_1, clocks_per_4, key global start_quant_clocks - global duration_quant_clocks + global duration_quant_clocks global allowed_tuplet_clocks + global time + + str = open (in_file, 'rb').read () + clocks_max = bar_max * clocks_per_1 * 2 + midi_dump = midi.parse (str, clocks_max) - str = open (in_file).read () - midi_dump = midi.parse (str) - clocks_per_1 = midi_dump[0][1] clocks_per_4 = clocks_per_1 / 4 - + time = Time (4, 4) + if global_options.start_quant: start_quant_clocks = clocks_per_1 / global_options.start_quant @@ -802,35 +944,88 @@ def convert_midi (in_file, out_file): allowed_tuplet_clocks = [] for (dur, num, den) in global_options.allowed_tuplets: - allowed_tuplet_clocks.append (clocks_per_1 / den) + allowed_tuplet_clocks.append (clocks_per_1 / dur * num / den) - tracks = [] - for t in midi_dump[1]: - global_options.key = Key (0, 0, 0) - tracks.append (split_track (t)) + if global_options.verbose: + print 'allowed tuplet clocks:', allowed_tuplet_clocks + + tracks = [create_track (t) for t in midi_dump[1]] + # urg, parse all global track events, such as Key first + # this fixes key in different voice/staff problem + for t in tracks: + t.music = t.parse () + prev = None + staves = [] + for t in tracks: + voices = t.get_voices () + if ((t.name and prev and prev.name) + and t.name.split (':')[0] == prev.name.split (':')[0]): + # staves[-1].voices += voices + # all global track events first + staves[-1].voices = ([staves[-1].voices[0]] + + [voices[0]] + + staves[-1].voices[1:] + + voices[1:]) + else: + staves.append (Staff (t)) + prev = t tag = '%% Lily was here -- automatically converted by %s from %s' % ( program_name, in_file) - - s = '' - s = tag + '\n\\version "2.7.18"\n\n' - for i in range (len (tracks)): - s = s + dump_track (tracks[i], i) - s = s + '\n\\score {\n <<\n' - + s = tag + s += r''' +\version "2.13.53" +''' + + s += r''' +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + \remove "Rest_engraver" + \consists "Completion_rest_engraver" + } +} +''' + + for i in global_options.include_header: + s += '\n%% included from %(i)s\n' % locals () + s += open (i).read () + if s[-1] != '\n': + s += '\n' + s += '% end\n' + + for i, t in enumerate (staves): + s += t.dump (i) + + s += '\n\\score {\n <<\n' + + control_track = False i = 0 - for t in tracks: - track = track_name (i) - item = track_first_item (t) - - if item and item.__class__ == Note: - s = s + ' \\context Staff=%s \\%s\n' % (track, track) + for i, staff in enumerate (staves): + track_name = get_track_name (i) + item = track_first_item (staff.voices) + staff_name = track_name + context = None + if not i and not item and len (staves) > 1: + control_track = track_name + continue + elif (item and item.__class__ == Note): + context = 'Staff' + if control_track: + s += ' \\context %(context)s=%(staff_name)s \\%(control_track)s\n' % locals () elif item and item.__class__ == Text: - s = s + ' \\context Lyrics=%s \\%s\n' % (track, track) - - i += 1 - s = s + ' >>\n}\n' + context = 'Lyrics' + if context: + s += ' \\context %(context)s=%(staff_name)s \\%(track_name)s\n' % locals () + + s = s + ''' >> + \layout {} + \midi {} +} +''' progress (_ ("%s output to `%s'...") % ('LY', out_file)) @@ -850,44 +1045,57 @@ def get_option_parser (): p.add_option ('-a', '--absolute-pitches', action='store_true', - help=_ ("print absolute pitches")) + help=_ ('print absolute pitches')) p.add_option ('-d', '--duration-quant', - metavar= _("DUR"), - help=_ ("quantise note durations on DUR")) + metavar=_ ('DUR'), + help=_ ('quantise note durations on DUR')) + p.add_option ('-D', '--debug', + action='store_true', + help=_ ('debug printing')) p.add_option ('-e', '--explicit-durations', action='store_true', - help=_ ("print explicit durations")) - p.add_option("-h", "--help", - action="help", - help=_ ("show this help and exit")) - p.add_option('-k', '--key', help=_ ("set key: ALT=+sharps|-flats; MINOR=1"), - metavar=_ ("ALT[:MINOR]"), - default='0'), - p.add_option ('-o', '--output', help=_ ("write output to FILE"), - metavar=_("FILE"), + help=_ ('print explicit durations')) + p.add_option('-h', '--help', + action='help', + help=_ ('show this help and exit')) + p.add_option('-i', '--include-header', + help=_ ('prepend FILE to output'), + action='append', + default=[], + metavar=_ ('FILE')) + p.add_option('-k', '--key', help=_ ('set key: ALT=+sharps|-flats; MINOR=1'), + metavar=_ ('ALT[:MINOR]'), + default=None), + p.add_option ('-o', '--output', help=_ ('write output to FILE'), + metavar=_ ('FILE'), action='store') - p.add_option ('-s', '--start-quant',help= _ ("quantise note starts on DUR"), - metavar=_ ("DUR")) + p.add_option ('-p', '--preview', help=_ ('preview of first 4 bars'), + action='store_true') + p.add_option ('-s', '--start-quant',help= _ ('quantise note starts on DUR'), + metavar=_ ('DUR')) + p.add_option ('-S', '--skip', + action = "store_true", + help =_ ("use s instead of r for rests")) p.add_option ('-t', '--allow-tuplet', - metavar=_ ("DUR*NUM/DEN"), - action = "append", - dest="allowed_tuplets", - help=_ ("allow tuplet durations DUR*NUM/DEN"), + metavar=_ ('DUR*NUM/DEN'), + action = 'append', + dest='allowed_tuplets', + help=_ ('allow tuplet durations DUR*NUM/DEN'), default=[]) - p.add_option ('-V', '--verbose', help=_ ("be verbose"), + p.add_option ('-V', '--verbose', help=_ ('be verbose'), action='store_true' ), - p.version = "midi2ly (LilyPond) @TOPLEVEL_VERSION@" - p.add_option("--version", - action="version", - help=_ ("show version number and exit")) - p.add_option ('-w', '--warranty', help=_ ("show warranty and copyright"), + p.version = 'midi2ly (LilyPond) @TOPLEVEL_VERSION@' + p.add_option ('--version', + action='version', + help=_ ('show version number and exit')) + p.add_option ('-w', '--warranty', help=_ ('show warranty and copyright'), action='store_true', ), - p.add_option ('-x', '--text-lyrics', help=_ ("treat every text as a lyric"), + p.add_option ('-x', '--text-lyrics', help=_ ('treat every text as a lyric'), action='store_true') - p.add_option_group (ly.display_encode (_ ("Examples")), + p.add_option_group (ly.display_encode (_ ('Examples')), description = r''' $ midi2ly --key=-2:1 --duration-quant=32 --allow-tuplet=4*2/3 --allow-tuplet=2*4/3 foo.midi ''') @@ -901,22 +1109,23 @@ def get_option_parser (): def do_options (): - opt_parser = get_option_parser() + opt_parser = get_option_parser () (options, args) = opt_parser.parse_args () + if options.warranty: + warranty () + sys.exit (0) + if not args or args[0] == '-': opt_parser.print_help () - ly.stderr_write ('\n%s: %s %s\n' % (program_name, _ ("error: "), - _ ("no files specified on command line."))) + ly.stderr_write ('\n%s: %s %s\n' % (program_name, _ ('error: '), + _ ('no files specified on command line.'))) sys.exit (2) if options.duration_quant: options.duration_quant = int (options.duration_quant) - if options.warranty: - warranty () - sys.exit (0) - if 1: + if options.key: (alterations, minor) = map (int, (options.key + ':0').split (':'))[0:2] sharps = 0 flats = 0 @@ -924,49 +1133,58 @@ def do_options (): sharps = alterations else: flats = - alterations - options.key = Key (sharps, flats, minor) - if options.start_quant: options.start_quant = int (options.start_quant) - + + global bar_max + if options.preview: + bar_max = 4 + options.allowed_tuplets = [map (int, a.replace ('/','*').split ('*')) for a in options.allowed_tuplets] - + + if options.verbose: + sys.stderr.write ('Allowed tuplets: %s\n' % `options.allowed_tuplets`) + global global_options global_options = options return args -def main(): - files = do_options() +def main (): + files = do_options () + exts = ['.midi', '.mid', '.MID'] for f in files: g = f - g = strip_extension (g, '.midi') - g = strip_extension (g, '.mid') - g = strip_extension (g, '.MID') - (outdir, outbase) = ('','') + for e in exts: + g = strip_extension (g, e) + if not os.path.exists (f): + for e in exts: + n = g + e + if os.path.exists (n): + f = n + break if not global_options.output: outdir = '.' outbase = os.path.basename (g) - o = os.path.join (outdir, outbase + '-midi.ly') - elif global_options.output[-1] == os.sep: + o = outbase + '-midi.ly' + elif (global_options.output[-1] == os.sep + or os.path.isdir (global_options.output)): outdir = global_options.output outbase = os.path.basename (g) - os.path.join (outdir, outbase + '-gen.ly') + o = os.path.join (outdir, outbase + '-midi.ly') else: o = global_options.output (outdir, outbase) = os.path.split (o) - if outdir != '.' and outdir != '': - try: - os.mkdir (outdir, 0777) - except OSError: - pass + if outdir and outdir != '.' and not os.path.exists (outdir): + os.mkdir (outdir, 0777) convert_midi (f, o) + if __name__ == '__main__': - main() + main () diff --git a/scripts/musicxml2ly.py b/scripts/musicxml2ly.py index b0f8091582..76d989f7a0 100644 --- a/scripts/musicxml2ly.py +++ b/scripts/musicxml2ly.py @@ -30,7 +30,7 @@ class Conversion_Settings: conversion_settings = Conversion_Settings () # Use a global variable to store the setting needed inside a \layout block. -# whenever we need to change a setting or add/remove an engraver, we can access +# whenever we need to change a setting or add/remove an engraver, we can access # this layout and add the corresponding settings layout_information = musicexp.Layout () @@ -45,43 +45,12 @@ def error_message (str): needed_additional_definitions = [] additional_definitions = { - "snappizzicato": """#(define-markup-command (snappizzicato layout props) () - (interpret-markup layout props - (markup #:stencil - (ly:stencil-translate-axis - (ly:stencil-add - (make-circle-stencil 0.7 0.1 #f) - (ly:make-stencil - (list 'draw-line 0.1 0 0.1 0 1) - '(-0.1 . 0.1) '(0.1 . 1))) - 0.7 X))))""", - - "eyeglasses": """eyeglassesps = #"0.15 setlinewidth - -0.9 0 translate - 1.1 1.1 scale - 1.2 0.7 moveto - 0.7 0.7 0.5 0 361 arc - stroke - 2.20 0.70 0.50 0 361 arc - stroke - 1.45 0.85 0.30 0 180 arc - stroke - 0.20 0.70 moveto - 0.80 2.00 lineto - 0.92 2.26 1.30 2.40 1.15 1.70 curveto - stroke - 2.70 0.70 moveto - 3.30 2.00 lineto - 3.42 2.26 3.80 2.40 3.65 1.70 curveto - stroke" -eyeglasses = \markup { \with-dimensions #'(0 . 4.4) #'(0 . 2.5) \postscript #eyeglassesps }""", - - "tuplet-note-wrapper": """ % a formatter function, which is simply a wrapper around an existing + "tuplet-note-wrapper": """ % a formatter function, which is simply a wrapper around an existing % tuplet formatter function. It takes the value returned by the given - % function and appends a note of given length. + % function and appends a note of given length. #(define-public ((tuplet-number::append-note-wrapper function note) grob) (let* ((txt (if function (function grob) #f))) - (if txt + (if txt (markup txt #:fontsize -5 #:note note UP) (markup #:fontsize -5 #:note note UP) ) @@ -89,8 +58,8 @@ eyeglasses = \markup { \with-dimensions #'(0 . 4.4) #'(0 . 2.5) \postscript #ey )""", "tuplet-non-default-denominator": """#(define ((tuplet-number::non-default-tuplet-denominator-text denominator) grob) - (number->string (if denominator - denominator + (number->string (if denominator + denominator (ly:event-property (event-cause grob) 'denominator)))) """, @@ -100,107 +69,6 @@ eyeglasses = \markup { \with-dimensions #'(0 . 4.4) #'(0 . 2.5) \postscript #ey (num (if numerator numerator (ly:event-property ev 'numerator)))) (format "~a:~a" den num))) """, - - "compound-time-signature": """%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Formatting of (possibly complex) compound time signatures -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -#(define-public (insert-markups l m) - (let* ((ll (reverse l))) - (let join-markups ((markups (list (car ll))) - (remaining (cdr ll))) - (if (pair? remaining) - (join-markups (cons (car remaining) (cons m markups)) (cdr remaining)) - markups)))) - -% Use a centered-column inside a left-column, because the centered column -% moves its reference point to the center, which the left-column undoes. -% The center-column also aligns its contented centered, which is not undone... -#(define-public (format-time-fraction time-sig-fraction) - (let* ((revargs (reverse (map number->string time-sig-fraction))) - (den (car revargs)) - (nums (reverse (cdr revargs)))) - (make-override-markup '(baseline-skip . 0) - (make-number-markup - (make-left-column-markup (list - (make-center-column-markup (list - (make-line-markup (insert-markups nums "+")) - den)))))))) - -#(define-public (format-complex-compound-time time-sig) - (let* ((sigs (map format-time-fraction time-sig))) - (make-override-markup '(baseline-skip . 0) - (make-number-markup - (make-line-markup - (insert-markups sigs (make-vcenter-markup "+"))))))) - -#(define-public (format-compound-time time-sig) - (cond - ((not (pair? time-sig)) (null-markup)) - ((pair? (car time-sig)) (format-complex-compound-time time-sig)) - (else (format-time-fraction time-sig)))) - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Measure length calculation of (possibly complex) compound time signatures -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -#(define-public (calculate-time-fraction time-sig-fraction) - (let* ((revargs (reverse time-sig-fraction)) - (den (car revargs)) - (nums (cdr revargs))) - (ly:make-moment (apply + nums) den))) - -#(define-public (calculate-complex-compound-time time-sig) - (let* ((sigs (map calculate-time-fraction time-sig))) - (let add-moment ((moment ZERO-MOMENT) - (remaining sigs)) - (if (pair? remaining) - (add-moment (ly:moment-add moment (car remaining)) (cdr remaining)) - moment)))) - -#(define-public (calculate-compound-measure-length time-sig) - (cond - ((not (pair? time-sig)) (ly:make-moment 4 4)) - ((pair? (car time-sig)) (calculate-complex-compound-time time-sig)) - (else (calculate-time-fraction time-sig)))) - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Base beat lenth -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -#(define-public (calculate-compound-base-beat-full time-sig) - (let* ((den (map last time-sig))) - (apply max den))) - -#(define-public (calculate-compound-base-beat time-sig) - (ly:make-moment 1 (cond - ((not (pair? time-sig)) 4) - ((pair? (car time-sig)) (calculate-compound-base-beat-full time-sig)) - (else (calculate-compound-base-beat-full (list time-sig)))))) - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The music function to set the complex time signature -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -compoundMeter = -#(define-music-function (parser location args) (pair?) - (let ((mlen (calculate-compound-measure-length args)) - (beat (calculate-compound-base-beat args))) - #{ -\once \override Staff.TimeSignature #'stencil = #ly:text-interface::print -\once \override Staff.TimeSignature #'text = #(format-compound-time $args) -% \set Staff.beatGrouping = #(reverse (cdr (reverse $args))) -\set Timing.measureLength = $mlen -\set Timing.timeSignatureFraction = #(cons (ly:moment-main-numerator $mlen) - (ly:moment-main-denominator $mlen)) -\set Timing.beatLength = $beat - -% TODO: Implement beatGrouping and auto-beam-settings!!! -#} )) -""" } def round_to_two_digits (val): @@ -304,16 +172,16 @@ def extract_score_information (tree): if value: header.set_field (field, musicxml.escape_ly_output_string (value)) + movement_title = tree.get_maybe_exist_named_child ('movement-title') + if movement_title: + set_if_exists ('title', movement_title.get_text ()) work = tree.get_maybe_exist_named_child ('work') if work: + # Overwrite the title from movement-title with work->title set_if_exists ('title', work.get_work_title ()) set_if_exists ('worknumber', work.get_work_number ()) set_if_exists ('opus', work.get_opus ()) - else: - movement_title = tree.get_maybe_exist_named_child ('movement-title') - if movement_title: - set_if_exists ('title', movement_title.get_text ()) - + identifications = tree.get_named_children ('identification') for ids in identifications: set_if_exists ('copyright', ids.get_rights ()) @@ -321,17 +189,17 @@ def extract_score_information (tree): set_if_exists ('arranger', ids.get_arranger ()) set_if_exists ('editor', ids.get_editor ()) set_if_exists ('poet', ids.get_poet ()) - + set_if_exists ('tagline', ids.get_encoding_software ()) set_if_exists ('encodingsoftware', ids.get_encoding_software ()) set_if_exists ('encodingdate', ids.get_encoding_date ()) set_if_exists ('encoder', ids.get_encoding_person ()) set_if_exists ('encodingdescription', ids.get_encoding_description ()) - + set_if_exists ('texidoc', ids.get_file_description ()); # Finally, apply the required compatibility modes - # Some applications created wrong MusicXML files, so we need to + # Some applications created wrong MusicXML files, so we need to # apply some compatibility mode, e.g. ignoring some features/tags # in those files software = ids.get_encoding_software_list () @@ -373,6 +241,13 @@ class PartGroupInfo: error_message (_ ("Unprocessed PartGroupInfo %s encountered") % self) return '' +def musicxml_step_to_lily (step): + if step: + return (ord (step) - ord ('A') + 7 - 2) % 7 + else: + return None + + def staff_attributes_to_string_tunings (mxl_attr): details = mxl_attr.get_maybe_exist_named_child ('staff-details') if not details: @@ -382,7 +257,7 @@ def staff_attributes_to_string_tunings (mxl_attr): if staff_lines: lines = string.atoi (staff_lines.get_text ()) - tunings = [0]*lines + tunings = [musicexp.Pitch()]*lines staff_tunings = details.get_named_children ('staff-tuning') for i in staff_tunings: p = musicexp.Pitch() @@ -432,6 +307,8 @@ def staff_attributes_to_lily_staff (mxl_attr): if staff_lines: lines = string.atoi (staff_lines.get_text ()) + # TODO: Handle other staff attributes like staff-space, etc. + staff = None if clef_sign == "percussion" and lines == 1: staff = musicexp.RhythmicStaff () @@ -443,8 +320,11 @@ def staff_attributes_to_lily_staff (mxl_attr): staff.string_tunings = staff_attributes_to_string_tunings (attributes) # staff.tablature_format = ??? else: - # TODO: Handle case with lines <> 5! staff = musicexp.Staff () + # TODO: Handle case with lines <> 5! + if (lines != 5): + staff.add_context_modification ("\\override StaffSymbol #'line-count = #%s" % lines) + return staff @@ -453,7 +333,7 @@ def extract_score_structure (part_list, staffinfo): score = musicexp.Score () structure = musicexp.StaffGroup (None) score.set_contents (structure) - + if not part_list: return structure @@ -470,9 +350,20 @@ def extract_score_structure (part_list, staffinfo): # Finale gives unnamed parts the name "MusicXML Part" automatically! if partname and partname.get_text() != "MusicXML Part": staff.instrument_name = partname.get_text () - if el.get_maybe_exist_named_child ('part-abbreviation'): - staff.short_instrument_name = el.get_maybe_exist_named_child ('part-abbreviation').get_text () + # part-name-display overrides part-name! + partname = el.get_maybe_exist_named_child ("part-name-display") + if partname: + staff.instrument_name = extract_display_text (partname) + + partdisplay = el.get_maybe_exist_named_child ('part-abbreviation') + if partdisplay: + staff.short_instrument_name = partdisplay.get_text () + # part-abbreviation-display overrides part-abbreviation! + partdisplay = el.get_maybe_exist_named_child ("part-abbreviation-display") + if partdisplay: + staff.short_instrument_name = extract_display_text (partdisplay) # TODO: Read in the MIDI device / instrument + return staff def read_score_group (el): @@ -590,7 +481,7 @@ def musicxml_duration_to_lily (mxl_note): d = musicexp.Duration () d.duration_log = dur[0] d.dots = dur[1] - # Grace notes by specification have duration 0, so no time modification + # Grace notes by specification have duration 0, so no time modification # factor is possible. It even messes up the output with *0/1 if not mxl_note.get_maybe_exist_typed_child (musicxml.Grace): d.factor = mxl_note._duration / d.get_length () @@ -611,10 +502,11 @@ def rational_to_lily_duration (rational_len): d_log = {1: 0, 2: 1, 4:2, 8:3, 16:4, 32:5, 64:6, 128:7, 256:8, 512:9}.get (rational_len.denominator (), -1) # Duration of the form 1/2^n or 3/2^n can be converted to a simple lilypond duration - if (d_log >= 0 and rational_len.numerator() in (1,3,5,7) ): + dots = {1: 0, 3: 1, 7: 2, 15: 3, 31: 4, 63: 5, 127: 6}.get (rational_len.numerator(), -1) + if ( d_log >= dots >= 0 ): # account for the dots! - d.dots = (rational_len.numerator()-1)/2 - d.duration_log = d_log - d.dots + d.duration_log = d_log - dots + d.dots = dots elif (d_log >= 0): d.duration_log = d_log d.factor = Rational (rational_len.numerator ()) @@ -733,7 +625,7 @@ def group_repeats (music_list): return music_list -# Extract the settings for tuplets from the and the +# Extract the settings for tuplets from the and the # elements of the note: def musicxml_tuplet_to_lily (tuplet_elt, time_modification): tsm = musicexp.TimeScaledMusic () @@ -759,7 +651,7 @@ def musicxml_tuplet_to_lily (tuplet_elt, time_modification): actual_type = tuplet_elt.get_actual_type () if actual_type: actual_note = musicexp.Duration () - (actual_note.duration_log, actual_note.dots) = normal_type + (actual_note.duration_log, actual_note.dots) = actual_type tsm.actual_type = actual_note # Obtain non-default nrs of notes from the tuplet object! @@ -777,14 +669,8 @@ def musicxml_tuplet_to_lily (tuplet_elt, time_modification): display_values = {"none": None, "actual": "actual", "both": "both"} if hasattr (tuplet_elt, "show-number"): tsm.display_number = display_values.get (getattr (tuplet_elt, "show-number"), "actual") - if tsm.display_number == "actual" and tsm.display_denominator: - needed_additional_definitions.append ("tuplet-non-default-denominator") - elif tsm.display_number == "both" and (tsm.display_numerator or tsm.display_denominator): - needed_additional_definitions.append ("tuplet-non-default-fraction") if hasattr (tuplet_elt, "show-type"): - if getattr (tuplet_elt, "show-type") == "actual": - needed_additional_definitions.append ("tuplet-note-wrapper") tsm.display_type = display_values.get (getattr (tuplet_elt, "show-type"), None) return tsm @@ -797,7 +683,7 @@ def group_tuplets (music_list, events): MUSIC_LIST demarcated by EVENTS_LIST in TimeScaledMusic objects. """ - + indices = [] brackets = {} @@ -845,15 +731,13 @@ def musicxml_clef_to_lily (attributes): change = musicexp.ClefChange () (change.type, change.position, change.octave) = attributes.get_clef_information () return change - + def musicxml_time_to_lily (attributes): sig = attributes.get_time_signature () if not sig: return None change = musicexp.TimeSignatureChange() change.fractions = sig - if (len(sig) != 2) or isinstance (sig[0], list): - needed_additional_definitions.append ("compound-time-signature") time_elm = attributes.get_maybe_exist_named_child ('time') if time_elm and hasattr (time_elm, 'symbol'): @@ -866,19 +750,19 @@ def musicxml_time_to_lily (attributes): # TODO: Handle senza-misura measures # TODO: Handle hidden time signatures (print-object="no") - # TODO: What shall we do if the symbol clashes with the sig? e.g. "cut" + # TODO: What shall we do if the symbol clashes with the sig? e.g. "cut" # with 3/8 or "single-number" with (2+3)/8 or 3/8+2/4? return change def musicxml_key_to_lily (attributes): - key_sig = attributes.get_key_signature () + key_sig = attributes.get_key_signature () if not key_sig or not (isinstance (key_sig, list) or isinstance (key_sig, tuple)): error_message (_ ("Unable to extract key signature!")) return None - + change = musicexp.KeySignatureChange() - + if len (key_sig) == 2 and not isinstance (key_sig[0], list): # standard key signature, (fifths, mode) (fifths, mode) = key_sig @@ -916,7 +800,12 @@ def musicxml_key_to_lily (attributes): else: # Non-standard key signature of the form [[step,alter<,octave>],...] - change.non_standard_alterations = key_sig + # MusicXML contains C,D,E,F,G,A,B as steps, lily uses 0-7, so convert + alterations = [] + for k in key_sig: + k[0] = musicxml_step_to_lily (k[0]) + alterations.append (k) + change.non_standard_alterations = alterations return change def musicxml_transpose_to_lily (attributes): @@ -931,10 +820,10 @@ def musicxml_transpose_to_lily (attributes): chromatic_shift = string.atoi (transpose.get_named_child ('chromatic').get_text ()) chromatic_shift_normalized = chromatic_shift % 12; (shift.step, shift.alteration) = [ - (0,0), (0,1), (1,0), (2,-1), (2,0), - (3,0), (3,1), (4,0), (5,-1), (5,0), + (0,0), (0,1), (1,0), (2,-1), (2,0), + (3,0), (3,1), (4,0), (5,-1), (5,0), (6,-1), (6,0)][chromatic_shift_normalized]; - + shift.octave += (chromatic_shift - chromatic_shift_normalized) / 12 diatonic = transpose.get_maybe_exist_named_child ('diatonic') @@ -951,6 +840,22 @@ def musicxml_transpose_to_lily (attributes): transposition.pitch = musicexp.Pitch ().transposed (shift) return transposition +def musicxml_staff_details_to_lily (attributes): + details = attributes.get_maybe_exist_named_child ('staff-details') + if not details: + return None + + ## TODO: Handle staff-type, staff-lines, staff-tuning, capo, staff-size + ret = [] + + stafflines = details.get_maybe_exist_named_child ('staff-lines') + if stafflines: + lines = string.atoi (stafflines.get_text ()); + lines_event = musicexp.StaffLinesEvent (lines); + ret.append (lines_event); + + return ret; + def musicxml_attributes_to_lily (attrs): elts = [] @@ -959,16 +864,60 @@ def musicxml_attributes_to_lily (attrs): 'time': musicxml_time_to_lily, 'key': musicxml_key_to_lily, 'transpose': musicxml_transpose_to_lily, + 'staff-details': musicxml_staff_details_to_lily, } for (k, func) in attr_dispatch.items (): children = attrs.get_named_children (k) if children: ev = func (attrs) - if ev: + if isinstance (ev, list): + for e in ev: + elts.append (e) + elif ev: elts.append (ev) - + + return elts + +def extract_display_text (el): + child = el.get_maybe_exist_named_child ("display-text") + if child: + return child.get_text () + else: + return False + + +def musicxml_print_to_lily (el): + # TODO: Implement other print attributes + # + # + elts = [] + if (hasattr (el, "new-system") and conversion_settings.convert_page_layout): + val = getattr (el, "new-system") + if (val == "yes"): + elts.append (musicexp.Break ("break")) + if (hasattr (el, "new-page") and conversion_settings.convert_page_layout): + val = getattr (el, "new-page") + if (val == "yes"): + elts.append (musicexp.Break ("pageBreak")) + child = el.get_maybe_exist_named_child ("part-name-display") + if child: + elts.append (musicexp.SetEvent ("Staff.instrumentName", + "\"%s\"" % extract_display_text (child))) + child = el.get_maybe_exist_named_child ("part-abbreviation-display") + if child: + elts.append (musicexp.SetEvent ("Staff.shortInstrumentName", + "\"%s\"" % extract_display_text (child))) return elts + class Marker (musicexp.Music): def __init__ (self): self.direction = 0 @@ -1062,7 +1011,7 @@ spanner_type_dict = { def musicxml_spanner_to_lily_event (mxl_event): ev = None - + name = mxl_event.get_name() func = spanner_event_dict.get (name) if func: @@ -1149,12 +1098,6 @@ def musicxml_fingering_event (mxl_event): ev.type = mxl_event.get_text () return ev -def musicxml_snappizzicato_event (mxl_event): - needed_additional_definitions.append ("snappizzicato") - ev = musicexp.MarkupEvent () - ev.contents = "\\snappizzicato" - return ev - def musicxml_string_event (mxl_event): ev = musicexp.NoDirectionArticulationEvent () ev.type = mxl_event.get_text () @@ -1216,7 +1159,7 @@ articulations_dict = { #"schleifer": "?", #"scoop": "?", #"shake": "?", - "snap-pizzicato": musicxml_snappizzicato_event, + "snap-pizzicato": "snappizzicato", #"spiccato": "?", "staccatissimo": (musicexp.ShortArticulationEvent, "|"), # or "staccatissimo" "staccato": (musicexp.ShortArticulationEvent, "."), # or "staccato" @@ -1270,7 +1213,7 @@ def musicxml_articulation_to_lily_event (mxl_event): def musicxml_dynamics_to_lily_event (dynentry): dynamics_available = ( - "ppppp", "pppp", "ppp", "pp", "p", "mp", "mf", + "ppppp", "pppp", "ppp", "pp", "p", "mp", "mf", "f", "ff", "fff", "ffff", "fp", "sf", "sff", "sp", "spp", "sfz", "rfz" ) dynamicsname = dynentry.get_name () if dynamicsname == "other-dynamics": @@ -1357,7 +1300,7 @@ def musicxml_words_to_lily_event (words): # TODO: How should I best convert the font-family attribute? # TODO: How can I represent the underline, overline and line-through - # attributes in Lilypond? Values of these attributes indicate + # attributes in LilyPond? Values of these attributes indicate # the number of lines return event @@ -1375,11 +1318,11 @@ def musicxml_accordion_to_markup (mxl_event): if high: commandname += "H" command += """\\combine - \\raise #2.5 \\musicglyph #\"accordion.accDot\" + \\raise #2.5 \\musicglyph #\"accordion.dot\" """ middle = mxl_event.get_maybe_exist_named_child ('accordion-middle') if middle: - # By default, use one dot (when no or invalid content is given). The + # By default, use one dot (when no or invalid content is given). The # MusicXML spec is quiet about this case... txt = 1 try: @@ -1389,32 +1332,32 @@ def musicxml_accordion_to_markup (mxl_event): if txt == 3: commandname += "MMM" command += """\\combine - \\raise #1.5 \\musicglyph #\"accordion.accDot\" + \\raise #1.5 \\musicglyph #\"accordion.dot\" \\combine - \\raise #1.5 \\translate #(cons 1 0) \\musicglyph #\"accordion.accDot\" + \\raise #1.5 \\translate #(cons 1 0) \\musicglyph #\"accordion.dot\" \\combine - \\raise #1.5 \\translate #(cons -1 0) \\musicglyph #\"accordion.accDot\" + \\raise #1.5 \\translate #(cons -1 0) \\musicglyph #\"accordion.dot\" """ elif txt == 2: commandname += "MM" command += """\\combine - \\raise #1.5 \\translate #(cons 0.5 0) \\musicglyph #\"accordion.accDot\" + \\raise #1.5 \\translate #(cons 0.5 0) \\musicglyph #\"accordion.dot\" \\combine - \\raise #1.5 \\translate #(cons -0.5 0) \\musicglyph #\"accordion.accDot\" + \\raise #1.5 \\translate #(cons -0.5 0) \\musicglyph #\"accordion.dot\" """ elif not txt <= 0: commandname += "M" command += """\\combine - \\raise #1.5 \\musicglyph #\"accordion.accDot\" + \\raise #1.5 \\musicglyph #\"accordion.dot\" """ low = mxl_event.get_maybe_exist_named_child ('accordion-low') if low: commandname += "L" command += """\\combine - \\raise #0.5 \musicglyph #\"accordion.accDot\" + \\raise #0.5 \musicglyph #\"accordion.dot\" """ - command += "\musicglyph #\"accordion.accDiscant\"" + command += "\musicglyph #\"accordion.discant\"" command = "\\markup { \\normalsize %s }" % command # Define the newly built command \accReg[H][MMM][L] additional_definitions[commandname] = "%s = %s" % (commandname, command) @@ -1459,7 +1402,7 @@ def musicxml_harp_pedals_to_ly (mxl_event): def musicxml_eyeglasses_to_ly (mxl_event): needed_additional_definitions.append ("eyeglasses") - return musicexp.MarkEvent ("\\eyeglasses") + return musicexp.MarkEvent ("\\markup { \\eyeglasses }") def next_non_hash_index (lst, pos): pos += 1 @@ -1474,7 +1417,7 @@ def musicxml_metronome_to_ly (mxl_event): index = -1 index = next_non_hash_index (children, index) - if isinstance (children[index], musicxml.BeatUnit): + if isinstance (children[index], musicxml.BeatUnit): # first form of metronome-mark, using unit and beats/min or other unit ev = musicexp.TempoMark () if hasattr (mxl_event, 'parentheses'): @@ -1540,7 +1483,7 @@ def musicxml_direction_to_lily (n): if hasattr (n, 'placement') and options.convert_directions: dir = musicxml_direction_to_indicator (n.placement) dirtype_children = [] - # TODO: The direction-type is used for grouping (e.g. dynamics with text), + # TODO: The direction-type is used for grouping (e.g. dynamics with text), # so we can't simply flatten them out! for dt in n.get_typed_children (musicxml.DirType): dirtype_children += dt.get_all_children () @@ -1565,6 +1508,7 @@ def musicxml_direction_to_lily (n): if ev: # TODO: set the correct direction! Unfortunately, \mark in ly does # not seem to support directions! + ev.force_direction = dir res.append (ev) continue @@ -1729,15 +1673,15 @@ def musicxml_harmony_to_lily_chordname (n): ev.bass = musicxml_chordpitch_to_lily (bass) inversion = n.get_maybe_exist_named_child ('inversion') if inversion: - # TODO: Lilypond does not support inversions, does it? + # TODO: LilyPond does not support inversions, does it? # Mail from Carl Sorensen on lilypond-devel, June 11, 2008: - # 4. LilyPond supports the first inversion in the form of added - # bass notes. So the first inversion of C major would be c:/g. - # To get the second inversion of C major, you would need to do - # e:6-3-^5 or e:m6-^5. However, both of these techniques - # require you to know the chord and calculate either the fifth - # pitch (for the first inversion) or the third pitch (for the + # 4. LilyPond supports the first inversion in the form of added + # bass notes. So the first inversion of C major would be c:/g. + # To get the second inversion of C major, you would need to do + # e:6-3-^5 or e:m6-^5. However, both of these techniques + # require you to know the chord and calculate either the fifth + # pitch (for the first inversion) or the third pitch (for the # second inversion) so they may not be helpful for musicxml2ly. inversion_count = string.atoi (inversion.get_text ()) if inversion_count == 1: @@ -1750,7 +1694,7 @@ def musicxml_harmony_to_lily_chordname (n): d.step = deg.get_value () d.alteration = deg.get_alter () ev.add_modification (d) - #TODO: convert the user-symbols attribute: + #TODO: convert the user-symbols attribute: #major: a triangle, like Unicode 25B3 #minor: -, like Unicode 002D #augmented: +, like Unicode 002B @@ -1763,12 +1707,12 @@ def musicxml_harmony_to_lily_chordname (n): def musicxml_figured_bass_note_to_lily (n): res = musicexp.FiguredBassNote () - suffix_dict = { 'sharp' : "+", - 'flat' : "-", - 'natural' : "!", - 'double-sharp' : "++", - 'flat-flat' : "--", - 'sharp-sharp' : "++", + suffix_dict = { 'sharp' : "+", + 'flat' : "-", + 'natural' : "!", + 'double-sharp' : "++", + 'flat-flat' : "--", + 'sharp-sharp' : "++", 'slash' : "/" } prefix = n.get_maybe_exist_named_child ('prefix') if prefix: @@ -1780,7 +1724,7 @@ def musicxml_figured_bass_note_to_lily (n): if suffix: res.set_suffix (suffix_dict.get (suffix.get_text (), "")) if n.get_maybe_exist_named_child ('extend'): - # TODO: Implement extender lines (unfortunately, in lilypond you have + # TODO: Implement extender lines (unfortunately, in lilypond you have # to use \set useBassFigureExtenders = ##t, which turns them on # globally, while MusicXML has a property for each note... # I'm not sure there is a proper way to implement this cleanly @@ -1832,8 +1776,10 @@ def musicxml_note_to_lily_main_event (n): acc = n.get_maybe_exist_named_child ('accidental') if acc: - # let's not force accs everywhere. - event.cautionary = acc.editorial + # let's not force accs everywhere. + event.cautionary = acc.cautionary + # TODO: Handle editorial accidentals + # 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 @@ -1841,7 +1787,7 @@ def musicxml_note_to_lily_main_event (n): 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 # treated like an ordinary note pitch @@ -1953,17 +1899,17 @@ class LilyPondVoiceBuilder: self.end_moment = self.begin_moment + duration def current_duration (self): return self.end_moment - self.begin_moment - - def add_music (self, music, duration): + + def add_music (self, music, duration, relevant = True): assert isinstance (music, musicexp.Music) if self.pending_multibar > Rational (0): self._insert_multibar () - self.has_relevant_elements = True + self.has_relevant_elements = self.has_relevant_elements or relevant self.elements.append (music) self.begin_moment = self.end_moment self.set_duration (duration) - + # Insert all pending dynamics right after the note/rest: if isinstance (music, musicexp.ChordEvent) and self.pending_dynamics: for d in self.pending_dynamics: @@ -1971,18 +1917,27 @@ class LilyPondVoiceBuilder: self.pending_dynamics = [] # Insert some music command that does not affect the position in the measure - def add_command (self, command): + def add_command (self, command, relevant = True): assert isinstance (command, musicexp.Music) if self.pending_multibar > Rational (0): self._insert_multibar () - self.has_relevant_elements = True + self.has_relevant_elements = self.has_relevant_elements or relevant self.elements.append (command) - def add_barline (self, barline): - # TODO: Implement merging of default barline and custom bar line - self.add_music (barline, Rational (0)) + def add_barline (self, barline, relevant = False): + # Insert only if we don't have a barline already + # TODO: Implement proper merging of default barline and custom bar line + has_relevant = self.has_relevant_elements + if (not (self.elements) or + not (isinstance (self.elements[-1], musicexp.BarLine)) or + (self.pending_multibar > Rational (0))): + self.add_music (barline, Rational (0)) + self.has_relevant_elements = has_relevant or relevant def add_partial (self, command): self.ignore_skips = True + # insert the partial, but restore relevant_elements (partial is not relevant) + relevant = self.has_relevant_elements self.add_command (command) + self.has_relevant_elements = relevant def add_dynamics (self, dynamic): # store the dynamic item(s) until we encounter the next note/rest: @@ -1991,18 +1946,16 @@ class LilyPondVoiceBuilder: def add_bar_check (self, number): # re/store has_relevant_elements, so that a barline alone does not # trigger output for figured bass, chord names - has_relevant = self.has_relevant_elements b = musicexp.BarLine () b.bar_number = number self.add_barline (b) - self.has_relevant_elements = has_relevant def jumpto (self, moment): current_end = self.end_moment + self.pending_multibar diff = moment - current_end - + if diff < Rational (0): - error_message (_ ('Negative skip %s (from position %s to %s)') % + error_message (_ ('Negative skip %s (from position %s to %s)') % (diff, current_end, moment)) diff = Rational (0) @@ -2011,7 +1964,7 @@ class LilyPondVoiceBuilder: duration_factor = 1 duration_log = {1: 0, 2: 1, 4:2, 8:3, 16:4, 32:5, 64:6, 128:7, 256:8, 512:9}.get (diff.denominator (), -1) duration_dots = 0 - # TODO: Use the time signature for skips, too. Problem: The skip + # TODO: Use the time signature for skips, too. Problem: The skip # might not start at a measure boundary! if duration_log > 0: # denominator is a power of 2... if diff.numerator () == 3: @@ -2029,7 +1982,7 @@ class LilyPondVoiceBuilder: evc = musicexp.ChordEvent () evc.elements.append (skip) - self.add_music (evc, diff) + self.add_music (evc, diff, False) if diff > Rational (0) and moment == 0: self.ignore_skips = False @@ -2054,7 +2007,7 @@ class LilyPondVoiceBuilder: self.jumpto (starting_at) value = None return value - + def correct_negative_skip (self, goto): self.end_moment = goto self.begin_moment = goto @@ -2072,12 +2025,6 @@ class VoiceData: self.lyrics_dict = {} self.lyrics_order = [] -def musicxml_step_to_lily (step): - if step: - return (ord (step) - ord ('A') + 7 - 2) % 7 - else: - return None - def measure_length_from_attributes (attr, current_measure_length): len = attr.get_measure_length () if not len: @@ -2090,7 +2037,7 @@ def musicxml_voice_to_lily_voice (voice): lyrics = {} return_value = VoiceData () return_value.voicedata = voice - + # First pitch needed for relative mode (if selected in command-line options) first_pitch = None @@ -2102,7 +2049,7 @@ def musicxml_voice_to_lily_voice (voice): ignore_lyrics = False current_staff = None - + pending_figured_bass = [] pending_chordnames = [] @@ -2120,6 +2067,7 @@ def musicxml_voice_to_lily_voice (voice): voice_builder.set_measure_length (current_measure_length) for n in voice._elements: + tie_started = False if n.get_name () == 'forward': continue staff = n.get_maybe_exist_named_child ('staff') @@ -2133,6 +2081,8 @@ def musicxml_voice_to_lily_voice (voice): a = musicxml_partial_to_lily (n.partial) if a: voice_builder.add_partial (a) + figured_bass_builder.add_partial (a) + chordnames_builder.add_partial (a) continue is_chord = n.get_maybe_exist_named_child ('chord') @@ -2140,8 +2090,12 @@ def musicxml_voice_to_lily_voice (voice): if not is_chord and not is_after_grace: try: voice_builder.jumpto (n._when) + figured_bass_builder.jumpto (n._when) + chordnames_builder.jumpto (n._when) except NegativeSkip, neg: voice_builder.correct_negative_skip (n._when) + figured_bass_builder.correct_negative_skip (n._when) + chordnames_builder.correct_negative_skip (n._when) n.message (_ ("Negative skip found: from %s to %s, difference is %s") % (neg.here, neg.dest, neg.dest - neg.here)) if isinstance (n, musicxml.Barline): @@ -2149,8 +2103,18 @@ def musicxml_voice_to_lily_voice (voice): for a in barlines: if isinstance (a, musicexp.BarLine): voice_builder.add_barline (a) + figured_bass_builder.add_barline (a, False) + chordnames_builder.add_barline (a, False) elif isinstance (a, RepeatMarker) or isinstance (a, EndingMarker): voice_builder.add_command (a) + figured_bass_builder.add_barline (a, False) + chordnames_builder.add_barline (a, False) + continue + + + if isinstance (n, musicxml.Print): + for a in musicxml_print_to_lily (n): + voice_builder.add_command (a, False) continue # Continue any multimeasure-rests before trying to add bar checks! @@ -2215,7 +2179,7 @@ def musicxml_voice_to_lily_voice (voice): if not n.__class__.__name__ == 'Note': n.message (_ ('unexpected %s; expected %s or %s or %s') % (n, 'Note', 'Attributes', 'Barline')) continue - + main_event = musicxml_note_to_lily_main_event (n) if main_event and not first_pitch: first_pitch = main_event.pitch @@ -2226,7 +2190,7 @@ def musicxml_voice_to_lily_voice (voice): modes_found['drummode'] = True ev_chord = voice_builder.last_event_chord (n._when) - if not ev_chord: + if not ev_chord: ev_chord = musicexp.ChordEvent() voice_builder.add_music (ev_chord, n._duration) @@ -2239,7 +2203,7 @@ def musicxml_voice_to_lily_voice (voice): grace_chord = None # after-graces and other graces use different lists; Depending on - # whether we have a chord or not, obtain either a new ChordEvent or + # whether we have a chord or not, obtain either a new ChordEvent or # the previous one to create a chord if is_after_grace: if ev_chord.after_grace_elements and n.get_maybe_exist_typed_child (musicxml.Chord): @@ -2270,7 +2234,7 @@ def musicxml_voice_to_lily_voice (voice): # with duration 0. The following correct this when we hit the real note! if voice_builder.current_duration () == 0 and n._duration > 0: voice_builder.set_duration (n._duration) - + # if we have a figured bass, set its voice builder to the correct position # and insert the pending figures if pending_figured_bass: @@ -2287,7 +2251,7 @@ def musicxml_voice_to_lily_voice (voice): fb.duration = ev_chord.get_duration () figured_bass_builder.add_music (fb, dur) pending_figured_bass = [] - + if pending_chordnames: try: chordnames_builder.jumpto (n._when) @@ -2304,9 +2268,9 @@ def musicxml_voice_to_lily_voice (voice): span_events = [] # The element can have the following children (+ means implemented, ~ partially, - not): - # +tied | +slur | +tuplet | glissando | slide | + # +tied | +slur | +tuplet | glissando | slide | # ornaments | technical | articulations | dynamics | - # +fermata | arpeggiate | non-arpeggiate | + # +fermata | arpeggiate | non-arpeggiate | # accidental-mark | other-notation for notations in notations_children: for tuplet_event in notations.get_tuplets(): @@ -2346,13 +2310,14 @@ def musicxml_voice_to_lily_voice (voice): if mxl_tie and mxl_tie.type == 'start': ev_chord.append (musicexp.TieEvent ()) is_tied = True + tie_started = True else: is_tied = False fermatas = notations.get_named_children ('fermata') for a in fermatas: ev = musicxml_fermata_to_lily_event (a) - if ev: + if ev: ev_chord.append (ev) arpeggiate = notations.get_named_children ('arpeggiate') @@ -2383,7 +2348,7 @@ def musicxml_voice_to_lily_voice (voice): # Articulations can contain the following child elements: # accent | strong-accent | staccato | tenuto | # detached-legato | staccatissimo | spiccato | - # scoop | plop | doit | falloff | breath-mark | + # scoop | plop | doit | falloff | breath-mark | # caesura | stress | unstress # Technical can contain the following child elements: # up-bow | down-bow | harmonic | open-string | @@ -2393,7 +2358,7 @@ def musicxml_voice_to_lily_voice (voice): # toe | fingernails | other-technical # Ornaments can contain the following child elements: # trill-mark | turn | delayed-turn | inverted-turn | - # shake | wavy-line | mordent | inverted-mordent | + # shake | wavy-line | mordent | inverted-mordent | # schleifer | tremolo | other-ornament, accidental-mark ornaments = notations.get_named_children ('ornaments') ornaments += notations.get_named_children ('articulations') @@ -2415,7 +2380,7 @@ def musicxml_voice_to_lily_voice (voice): mxl_beams = [b for b in n.get_named_children ('beam') if (b.get_type () in ('begin', 'end') - and b.is_primary ())] + and b.is_primary ())] if mxl_beams and not conversion_settings.ignore_beaming: beam_ev = musicxml_spanner_to_lily_event (mxl_beams[0]) if beam_ev: @@ -2441,9 +2406,15 @@ def musicxml_voice_to_lily_voice (voice): if not lnr in note_lyrics_processed: lyrics[lnr].append ("\skip4") - ## force trailing mm rests to be written out. + # Assume that a element only lasts for one note. + # This might not be correct MusicXML interpretation, but works for + # most cases and fixes broken files, which have the end tag missing + if is_tied and not tie_started: + is_tied = False + + ## force trailing mm rests to be written out. voice_builder.add_music (musicexp.ChordEvent (), Rational (0)) - + ly_voice = group_tuplets (voice_builder.elements, tuplet_events) ly_voice = group_repeats (ly_voice) @@ -2453,16 +2424,16 @@ def musicxml_voice_to_lily_voice (voice): ## \key barfs in drummode. ly_voice = [e for e in ly_voice if not isinstance(e, musicexp.KeySignatureChange)] - + seq_music.elements = ly_voice for k in lyrics.keys (): return_value.lyrics_dict[k] = musicexp.Lyrics () return_value.lyrics_dict[k].lyrics_syllables = lyrics[k] - - + + if len (modes_found) > 1: error_message (_ ('cannot simultaneously have more than one mode: %s') % modes_found.keys ()) - + if options.relative: v = musicexp.RelativeMusic () v.element = seq_music @@ -2475,31 +2446,31 @@ def musicxml_voice_to_lily_voice (voice): v.element = seq_music v.mode = mode return_value.ly_voice = v - + # create \figuremode { figured bass elements } if figured_bass_builder.has_relevant_elements: fbass_music = musicexp.SequentialMusic () - fbass_music.elements = figured_bass_builder.elements + fbass_music.elements = group_repeats (figured_bass_builder.elements) v = musicexp.ModeChangingMusicWrapper() v.mode = 'figuremode' v.element = fbass_music return_value.figured_bass = v - + # create \chordmode { chords } if chordnames_builder.has_relevant_elements: cname_music = musicexp.SequentialMusic () - cname_music.elements = chordnames_builder.elements + cname_music.elements = group_repeats (chordnames_builder.elements) v = musicexp.ModeChangingMusicWrapper() v.mode = 'chordmode' v.element = cname_music return_value.chordnames = v - + return return_value def musicxml_id_to_lily (id): digits = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten'] - + for digit in digits: d = digits.index (digit) id = re.sub ('%d' % d, digit, id) @@ -2592,7 +2563,7 @@ If the given filename is -, musicxml2ly reads from the command line. p.version = ('''%prog (LilyPond) @TOPLEVEL_VERSION@\n\n''' + -_ ("""Copyright (c) 2005--2009 by +_ ("""Copyright (c) 2005--2011 by Han-Wen Nienhuys , Jan Nieuwenhuizen and Reinhold Kainhofer @@ -2639,21 +2610,27 @@ information.""") % 'lilypond') p.add_option ('-l', '--language', metavar = _ ("LANG"), action = "store", - help = _ ("use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly")) + help = _ ("use LANG for pitch names, e.g. 'deutsch' for note names in German")) - p.add_option ('--nd', '--no-articulation-directions', + p.add_option ('--nd', '--no-articulation-directions', action = "store_false", default = True, dest = "convert_directions", help = _ ("do not convert directions (^, _ or -) for articulations, dynamics, etc.")) - p.add_option ('--nrp', '--no-rest-positions', + p.add_option ('--nrp', '--no-rest-positions', action = "store_false", default = True, dest = "convert_rest_positions", help = _ ("do not convert exact vertical positions of rests")) - p.add_option ('--no-beaming', + p.add_option ('--npl', '--no-page-layout', + action = "store_false", + default = True, + dest = "convert_page_layout", + help = _ ("do not convert the exact page layout and breaks")) + + p.add_option ('--no-beaming', action = "store_false", default = True, dest = "convert_beaming", @@ -2675,19 +2652,19 @@ information.""") % 'lilypond') def music_xml_voice_name_to_lily_name (part_id, name): str = "Part%sVoice%s" % (part_id, name) - return musicxml_id_to_lily (str) + return musicxml_id_to_lily (str) def music_xml_lyrics_name_to_lily_name (part_id, name, lyricsnr): str = "Part%sVoice%sLyrics%s" % (part_id, name, lyricsnr) - return musicxml_id_to_lily (str) + return musicxml_id_to_lily (str) def music_xml_figuredbass_name_to_lily_name (part_id, voicename): str = "Part%sVoice%sFiguredBass" % (part_id, voicename) - return musicxml_id_to_lily (str) + return musicxml_id_to_lily (str) def music_xml_chordnames_name_to_lily_name (part_id, voicename): str = "Part%sVoice%sChords" % (part_id, voicename) - return musicxml_id_to_lily (str) + return musicxml_id_to_lily (str) def print_voice_definitions (printer, part_list, voices): for part in part_list: @@ -2718,7 +2695,7 @@ def print_voice_definitions (printer, part_list, voices): def uniq_list (l): return dict ([(elt,1) for elt in l]).keys () -# format the information about the staff in the form +# format the information about the staff in the form # [staffid, # [ # [voiceid1, [lyricsid11, lyricsid12,...], figuredbassid1], @@ -2761,12 +2738,12 @@ def update_score_setup (score_structure, part_list, voices): staves = uniq_list (staves) staves.sort () for s in staves: - thisstaff_raw_voices = [(voice_name, voice.lyrics_order, voice.figured_bass, voice.chordnames) + thisstaff_raw_voices = [(voice_name, voice.lyrics_order, voice.figured_bass, voice.chordnames) for (voice_name, voice) in nv_dict.items () if voice.voicedata._start_staff == s] staves_info.append (format_staff_info (part_id, s, thisstaff_raw_voices)) else: - thisstaff_raw_voices = [(voice_name, voice.lyrics_order, voice.figured_bass, voice.chordnames) + thisstaff_raw_voices = [(voice_name, voice.lyrics_order, voice.figured_bass, voice.chordnames) for (voice_name, voice) in nv_dict.items ()] staves_info.append (format_staff_info (part_id, None, thisstaff_raw_voices)) score_structure.set_part_information (part_id, staves_info) @@ -2790,7 +2767,7 @@ def print_ly_additional_definitions (printer, filename): printer.newline () printer.newline () -# Read in the tree from the given I/O object (either file or string) and +# Read in the tree from the given I/O object (either file or string) and # demarshall it using the classes from the musicxml.py file def read_xml (io_object, use_lxml): if use_lxml: @@ -2866,7 +2843,7 @@ def convert (filename, options): update_layout_information () if not options.output_name: - options.output_name = os.path.basename (filename) + options.output_name = os.path.basename (filename) options.output_name = os.path.splitext (options.output_name)[0] elif re.match (".*\.ly", options.output_name): options.output_name = os.path.splitext (options.output_name)[0] @@ -2889,12 +2866,12 @@ def convert (filename, options): print_ly_additional_definitions (printer, filename) if score_information: score_information.print_ly (printer) - if paper_information: + if paper_information and conversion_settings.convert_page_layout: paper_information.print_ly (printer) if layout_information: layout_information.print_ly (printer) print_voice_definitions (printer, part_list, voices) - + printer.newline () printer.dump ("% The score definition") printer.newline () @@ -2926,13 +2903,14 @@ def main (): if options.language: musicexp.set_pitch_language (options.language) needed_additional_definitions.append (options.language) - additional_definitions[options.language] = "\\include \"%s.ly\"\n" % options.language + additional_definitions[options.language] = "\\language \"%s\"\n" % options.language conversion_settings.ignore_beaming = not options.convert_beaming + conversion_settings.convert_page_layout = options.convert_page_layout # Allow the user to leave out the .xml or xml on the filename basefilename = args[0].decode('utf-8') if basefilename == "-": # Read from stdin - basefilename = "-" + filename = "-" else: filename = get_existing_filename_with_extension (basefilename, "xml") if not filename: diff --git a/stepmake/README b/stepmake/README index 22375a6104..a29e0e50e5 100644 --- a/stepmake/README +++ b/stepmake/README @@ -9,9 +9,10 @@ to be broken. Fixes/patches/suggestions appreciated. -StepMake is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. +StepMake 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. Jan Nieuwenhuizen ftp://pcnov095.win.tue.nl/pub/lilypond/development diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4 index 83c07c3a2d..8fe2dddb72 100644 --- a/stepmake/aclocal.m4 +++ b/stepmake/aclocal.m4 @@ -32,9 +32,13 @@ AC_DEFUN(STEPMAKE_GET_VERSION, [ ## for compatibility reasons. ## grab the first version number in --version output. - eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \ - | head -n 1 \ - | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\" + eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1 | + tr ' ' '\n' | + sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | + grep -E '(^| )[0-9][0-9]*\.[0-9]' | + head -n 1\`\" if test -z "$_ver"; then ## If empty, try date [fontforge] @@ -174,19 +178,23 @@ AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [ pipe_b=yes AC_ARG_ENABLE(debugging, - [ --enable-debugging compile with debugging info. Default: on], + [AS_HELP_STRING([--enable-debugging], + [compile with debugging info. Default: on])], [debug_b=$enableval]) AC_ARG_ENABLE(optimising, - [ --enable-optimising compile with optimising. Default: on], + [AS_HELP_STRING([--enable-optimising], + [compile with optimising. Default: on])], [optimise_b=$enableval]) AC_ARG_ENABLE(profiling, - [ --enable-profiling compile with gprof support. Default: off], + [AS_HELP_STRING([--enable-profiling], + [compile with gprof support. Default: off])], [profile_b=$enableval]) AC_ARG_ENABLE(pipe, - [ --enable-pipe compile with -pipe. Default: on], + [AS_HELP_STRING([--enable-pipe], + [compile with -pipe. Default: on])], [pipe_b=$enableval]) if test "$optimise_b" = yes; then @@ -254,7 +262,6 @@ AC_DEFUN(STEPMAKE_COMPILE, [ ]) AC_DEFUN(STEPMAKE_CXX, [ - AC_LANG([C++]) AC_PROG_CXX STEPMAKE_OPTIONAL_REQUIRED(CXX, c++, $1) @@ -399,7 +406,7 @@ EOF fi for d in 2 3 4 ; do - for mf in `cd $srcdir ; find -maxdepth $d -mindepth $d -name GNUmakefile`; do + for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name GNUmakefile`; do mkdir -p $(dirname $mf) cat < $mf print 'depth=' + ('../' * ( $d-1 ) ) @@ -408,7 +415,7 @@ print 'include \$(configure-srcdir)/$mf' print 'MODULE_INCLUDES += \$(src-dir)/\$(outbase)' EOF done - for mf in `cd $srcdir ; find -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do + for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do mkdir -p $(dirname $mf) cat < $mf print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make' @@ -419,7 +426,7 @@ EOF cat < GNUmakefile -depth = ./ +depth = . include config\$(if \$(conf),-\$(conf),).make include \$(configure-srcdir)/GNUmakefile.in EOF @@ -448,7 +455,6 @@ AC_DEFUN(STEPMAKE_FLEXLEXER, [ fi # check for yyFlexLexer.yy_current_buffer, # in 2.5.4 <= flex < 2.5.29 - AC_LANG_PUSH(C++) AC_CACHE_CHECK([for yyFlexLexer.yy_current_buffer], [stepmake_cv_flexlexer_yy_current_buffer], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @@ -468,7 +474,6 @@ class yy_flex_lexer: public yyFlexLexer if test $stepmake_cv_flexlexer_yy_current_buffer = yes; then AC_DEFINE(HAVE_FLEXLEXER_YY_CURRENT_BUFFER, 1, [Define to 1 if yyFlexLexer has yy_current_buffer.]) fi - AC_LANG_POP(C++) ]) @@ -507,24 +512,8 @@ AC_DEFUN(STEPMAKE_GETTEXT, [ AC_SUBST(localedir) AC_DEFINE_UNQUOTED(LOCALEDIR, ["${LOCALEDIR}"]) - # ouch. autoconf <= 2.57's gettext check fails for - # g++ >= 3.3 (with -std=gnu++98, the default). - # While the check is OK for g++ -std=c++98, - # LilyPond needs GNU g++, so who is to blame here? - # Use a workaround until this is resolved: - # for g++ >= 3.3, select C language. - GCC_UNSUPPORTED= - STEPMAKE_CHECK_VERSION_UNSUPPORTED(CXX, GCC_UNSUPPORTED, 3.3) - if test -n "$GCC_UNSUPPORTED"; then - AC_MSG_WARN([autoconf <= 2.59 with g++ >= 3.3 gettext test broken.]) - AC_MSG_WARN([Trying gcc, cross fingers.]) - AC_LANG_PUSH(C) - fi AC_CHECK_LIB(intl, gettext) AC_CHECK_FUNCS(gettext) - if test -n "$GCC_UNSUPPORTED"; then - AC_LANG_POP(C) - fi ]) @@ -639,7 +628,6 @@ AC_DEFUN(STEPMAKE_GXX, [ AC_DEFUN(STEPMAKE_INIT, [ - AC_PREREQ(2.50) . $srcdir/VERSION FULL_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL MICRO_VERSION=$PATCH_LEVEL @@ -761,8 +749,9 @@ AC_DEFUN(STEPMAKE_INIT, [ CONFIGSUFFIX= AC_ARG_ENABLE(config, - [ --enable-config=CONF put settings in config-CONF.make and config-CONF.h; - do `make conf=CONF' to get output in ./out-CONF], + [AS_HELP_STRING([--enable-config=CONF], + [put settings in config-CONF.make and config-CONF.h; + do `make conf=CONF' to get output in ./out-CONF])], [CONFIGURATION=$enableval]) ##'`# @@ -853,12 +842,14 @@ AC_DEFUN(STEPMAKE_LOCALE, [ # with/enable ?? AC_ARG_WITH(localedir, - [ --with-localedir=DIR location of locales. Default: PREFIX/share/locale ], + [AS_HELP_STRING([--with-localedir=DIR], + [location of locales. Default: PREFIX/share/locale])], localedir=$with_localedir, localedir='${prefix}/share/locale') AC_ARG_WITH(lang, - [ --with-lang=LANG use LANG as language to emit messages], + [AS_HELP_STRING([--with-lang=LANG], + [use LANG as language to emit messages])], language=$with_lang, language=English) @@ -962,30 +953,32 @@ AC_DEFUN(STEPMAKE_PYTHON, [ AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [ AC_ARG_WITH(python-include, - [ --with-python-include=DIR - location of the python include dir],[ - if test "$withval" = "yes" -o "$withval" = "no"; then - AC_MSG_WARN(Usage: --with-python-include=includedir) - else - PYTHON_CFLAGS="-I${withval}" - fi - ]) + [AS_HELP_STRING([--with-python-include=DIR], + [location of the python include dir])],[ + if test "$withval" = "yes" -o "$withval" = "no"; then + AC_MSG_WARN(Usage: --with-python-include=includedir) + else + PYTHON_CFLAGS="-I${withval}" + fi + ]) AC_ARG_WITH(python-lib, - [ --with-python-lib=NAME name of the python lib],[ - if test "$withval" = "yes" -o "$withval" = "no"; then - AC_MSG_WARN(Usage: --with-python-lib=name) - else - LDFLAGS="$LDFLAGS -l${withval}" - fi - ]) + [AS_HELP_STRING([--with-python-lib=NAME], + [name of the python lib])],[ + if test "$withval" = "yes" -o "$withval" = "no"; then + AC_MSG_WARN(Usage: --with-python-lib=name) + else + LDFLAGS="$LDFLAGS -l${withval}" + fi + ]) AC_CHECK_PROGS(PYTHON_CONFIG, python-config, no) if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then # Clean out junk: http://bugs.python.org/issue3290 # Python headers may need some -f* flags, leave them in. - PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/ -\(W\|D\|O\|m\)\(\w\|-\|=\|,\)\+//g'` + # We want the sed commands to look like 's/-[WDOm][[:alnum:][:punct:]][[:alnum:][:punct:]]*//g' and 's/-arch [^[:space:]]*//g', but automake eats brackets. + PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'` PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags` fi @@ -1012,7 +1005,6 @@ AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [ AC_DEFUN(STEPMAKE_STL_DATA_METHOD, [ - AC_LANG_PUSH(C++) AC_CACHE_CHECK([for stl.data () method], [stepmake_cv_stl_data_method], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @@ -1026,7 +1018,6 @@ void *p = v.data (); if test $stepmake_cv_stl_data_method = yes; then AC_DEFINE(HAVE_STL_DATA_METHOD, 1, [define if stl classes have data () method]) fi - AC_LANG_POP(C++) ]) @@ -1038,7 +1029,6 @@ AC_DEFUN(STEPMAKE_TEXMF_DIRS, [ AC_DEFUN(STEPMAKE_TEXMF, [ STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1) STEPMAKE_PROGS(METAPOST, mpost, $1) - # STEPMAKE_PROGS(INIMETAFONT, inimf inimfont "$METAFONT -ini", $1) AC_MSG_CHECKING(for working metafont mode) modelist='ljfour lj4 lj3 lj2 ljet laserjet' @@ -1135,28 +1125,6 @@ AC_DEFUN(STEPMAKE_FREETYPE2, [ fi ]) -AC_DEFUN(STEPMAKE_GTK2, [ - PKG_CHECK_MODULES(GTK2, $1 >= $3, have_gtk2=yes, true) - if test "$have_gtk2" = yes ; then - AC_DEFINE(HAVE_GTK2) - # Do not pollute user-CPPFLAGS with configure-CPPFLAGS - save_CPPFLAGS="$CPPFLAGS" - save_LIBS="$LIBS" - CPPFLAGS="$GTK2_CFLAGS $CPPFLAGS" - LIBS="$GTK2_LIBS $LIBS" - AC_SUBST(GTK2_CFLAGS) - AC_SUBST(GTK2_LIBS) - CPPFLAGS="$save_CPPFLAGS" - LIBS="$save_LIBS" - else - # UGR - # r="lib$1-dev or $1-devel" - r="libgtk2.0-dev or gtk2-devel" - ver="`pkg-config --modversion $1`" - STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"]) - fi -]) - AC_DEFUN(STEPMAKE_PANGO, [ PKG_CHECK_MODULES(PANGO, $1 >= $3, have_pango16=yes, true) if test "$have_pango16" = yes ; then diff --git a/stepmake/autogen.sh b/stepmake/autogen.sh index 2fd8bebd5a..34c022e082 100755 --- a/stepmake/autogen.sh +++ b/stepmake/autogen.sh @@ -18,26 +18,6 @@ if [ ! -f autogen.sh -o stepmake/autogen.sh -nt autogen.sh ]; then exec ./autogen.sh "$@" fi -# Be paranoid: check for autoconf >= 2.50 -# Some setups have both autoconf 2.13 and 2.5x available through -# a wrapper script: /usr/bin/autoconf. -# This wrapper may incorrectly autoselect autoconf 2.50, but it -# advertises itself as autoconf 2.13. -# If you have such a setup, invoke this script as: -# autoconf=autoconf2.50 ./autogen.sh -for i in autoconf2.50 autoconf-2.50 autoconf false; do - version=`$i --version 2>/dev/null | head -n 1 | awk '{print $NF}' | awk -F. '{print $1 * 100 + $2}'` - if test "0$version" -ge 250; then - autoconf=$i - break - fi -done - -if test -z "$autoconf"; then - echo "ERROR: Please install autoconf 2.50 or newer" - exit 1 -fi - for i in $srcdir/configure.in #`find $srcdir -name configure.in -print` do dir=`dirname $i` @@ -45,8 +25,11 @@ do ( cd $dir echo "Running autoconf ..." - $autoconf + autoconf || exit 1 ) + # Autoconf automatically checks its own minimum required + # version, and it aborts when the check fails. + test "$?" -eq 1 && exit 1 done #conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c diff --git a/stepmake/bin/config.guess b/stepmake/bin/config.guess index a1a58a86cc..115f944a61 100755 --- a/stepmake/bin/config.guess +++ b/stepmake/bin/config.guess @@ -1,9 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. -timestamp='2002-03-20' +timestamp='2010-04-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -17,28 +18,30 @@ timestamp='2002-03-20' # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTIONS] +Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. @@ -53,8 +56,9 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -66,11 +70,11 @@ Try \`$me --help' for more information." while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; + echo "$timestamp" ; exit ;; --version | -v ) - echo "$version" ; exit 0 ;; + echo "$version" ; exit ;; --help | --h* | -h ) - echo "$usage"; exit 0 ;; + echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. @@ -88,30 +92,42 @@ if test $# != 0; then exit 1 fi +trap 'exit 1' HUP INT TERM -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. -# CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. -set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int dummy(){}" > $dummy.c ; +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do - ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; - if test $? = 0 ; then + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; - rm -f $dummy.c $dummy.o $dummy.rel ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac' +esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) @@ -142,9 +158,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched @@ -153,7 +171,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -167,141 +185,128 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # The OS release - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mipseb-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then + case $UNAME_RELEASE in + *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - cat <$dummy.s - .data -\$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - eval $set_cc_for_build - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - 2-1307) - UNAME_MACHINE="alphaev68" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix - exit 0 ;; + exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 - exit 0 ;; + exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 - exit 0;; + exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; + exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos - exit 0 ;; + exit ;; *:OS/390:*:*) echo i370-ibm-openedition - exit 0 ;; + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp - exit 0;; + exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then @@ -309,25 +314,51 @@ EOF else echo pyramid-pyramid-bsd fi - exit 0 ;; + exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 - exit 0 ;; + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) @@ -336,10 +367,10 @@ EOF esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; + exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; + exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 @@ -351,10 +382,10 @@ EOF echo sparc-sun-sunos${UNAME_RELEASE} ;; esac - exit 0 ;; + exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; + exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor @@ -365,37 +396,40 @@ EOF # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; + exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 - exit 0 ;; + exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; + exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -419,27 +453,33 @@ EOF exit (-1); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; + exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax - exit 0 ;; + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix - exit 0 ;; + exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 - exit 0 ;; + exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 - exit 0 ;; + exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` @@ -455,29 +495,29 @@ EOF else echo i586-dg-dgux${UNAME_RELEASE} fi - exit 0 ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 - exit 0 ;; + exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 - exit 0 ;; + exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd - exit 0 ;; + exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; + exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix - exit 0 ;; + exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` @@ -485,7 +525,7 @@ EOF IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; + exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build @@ -500,16 +540,19 @@ EOF exit(0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi - exit 0 ;; - *:AIX:*:[45]) + exit ;; + *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 @@ -522,28 +565,28 @@ EOF IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; + exit ;; *:AIX:*:*) echo rs6000-ibm-aix - exit 0 ;; + exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 - exit 0 ;; + exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 + exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx - exit 0 ;; + exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 - exit 0 ;; + exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd - exit 0 ;; + exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 - exit 0 ;; + exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in @@ -599,17 +642,37 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy` - if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi - rm -f $dummy.c $dummy + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -637,174 +700,248 @@ EOF exit (0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 - exit 0 ;; + exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd - exit 0 ;; + exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd - exit 0 ;; + exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix - exit 0 ;; + exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf - exit 0 ;; + exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf - exit 0 ;; + exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi - exit 0 ;; + exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites - exit 0 ;; + exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit 0 ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit 0 ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit 0 ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit 0 ;; + exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) + exit ;; + *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - x86:Interix*:3*) - echo i386-pc-interix3 - exit 0 ;; + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? - echo i386-pc-interix - exit 0 ;; + echo i586-pc-interix + exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin - exit 0 ;; + exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; *:GNU:*:*) + # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips - #undef mipsel + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - rm -f $dummy.c - test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit 0 ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit 0 ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in @@ -812,82 +949,40 @@ EOF PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit 0 ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #ifdef __INTEL_COMPILER - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - rm -f $dummy.c - test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 - exit 0 ;; + exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... @@ -895,7 +990,27 @@ EOF # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then @@ -903,99 +1018,113 @@ EOF else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi - exit 0 ;; - i*86:*:5:[78]*) + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit 0 ;; + exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 - (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi - exit 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; + exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit 0 ;; + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 - exit 0 ;; + exit ;; paragon:*:*:*) echo i860-intel-osf1 - exit 0 ;; + exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi - exit 0 ;; + exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; + exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 - exit 0 ;; + exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 - exit 0 ;; + exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` @@ -1003,61 +1132,94 @@ EOF else echo ns32k-sni-sysv fi - exit 0 ;; + exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 - exit 0 ;; + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 - exit 0 ;; + exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 - exit 0 ;; + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos - exit 0 ;; + exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; + exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 - exit 0 ;; + exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi - exit 0 ;; + exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos - exit 0 ;; + exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos - exit 0 ;; + exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos - exit 0 ;; + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; + exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Darwin:*:*) - echo `uname -p`-apple-darwin${UNAME_RELEASE} - exit 0 ;; + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then @@ -1065,22 +1227,25 @@ EOF UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit 0 ;; + exit ;; *:QNX:*:4*) echo i386-pc-qnx - exit 0 ;; - NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*) + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; + exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux - exit 0 ;; + exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv - exit 0 ;; + exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 @@ -1091,36 +1256,50 @@ EOF UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; + exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 - exit 0 ;; + exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex - exit 0 ;; + exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 - exit 0 ;; + exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 - exit 0 ;; + exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 - exit 0 ;; + exit ;; *:ITS:*:*) echo pdp10-unknown-its - exit 0 ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 @@ -1152,7 +1331,7 @@ main () #endif #if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); + printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) @@ -1241,12 +1420,12 @@ main () } EOF -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 -rm -f $dummy.c $dummy +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) @@ -1255,22 +1434,22 @@ then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd - exit 0 ;; + exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; c34*) echo c34-convex-bsd - exit 0 ;; + exit ;; c38*) echo c38-convex-bsd - exit 0 ;; + exit ;; c4*) echo c4-convex-bsd - exit 0 ;; + exit ;; esac fi @@ -1281,7 +1460,9 @@ This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from - ftp://ftp.gnu.org/pub/gnu/config/ + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +and + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be diff --git a/stepmake/bin/config.sub b/stepmake/bin/config.sub index c99bd1a79d..204218c073 100755 --- a/stepmake/bin/config.sub +++ b/stepmake/bin/config.sub @@ -1,9 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. -timestamp='2002-03-07' +timestamp='2010-05-21' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -21,22 +22,26 @@ timestamp='2002-03-07' # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. + # Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -55,8 +60,8 @@ timestamp='2002-03-07' me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTIONS] CPU-MFR-OPSYS - $0 [OPTIONS] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS Canonicalize a configuration name. @@ -70,8 +75,9 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -83,11 +89,11 @@ Try \`$me --help' for more information." while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; + echo "$timestamp" ; exit ;; --version | -v ) - echo "$version" ; exit 0 ;; + echo "$version" ; exit ;; --help | --h* | -h ) - echo "$usage"; exit 0 ;; + echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. @@ -99,7 +105,7 @@ while test $# -gt 0 ; do *local*) # First pass through any local machine types. echo $1 - exit 0;; + exit ;; * ) break ;; @@ -118,7 +124,11 @@ esac # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*) + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -144,10 +154,13 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -169,6 +182,10 @@ case $os in -hiux*) os=-hiuxwe2 ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -185,6 +202,10 @@ case $os in # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -228,41 +249,80 @@ case $basic_machine in | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ | c4x | clipper \ - | d10v | d30v | dsp16xx \ - | fr30 \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ - | m32r | m68000 | m68k | m88k | mcore \ - | mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el | mips64vr4300 \ - | mips64vr4300el | mips64vr5000 | mips64vr5000el \ - | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ - | mipsisa32 | mipsisa64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ | ns16k | ns32k \ - | openrisc | or32 \ + | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ - | sh | sh[34] | sh[34]eb | shbe | shle | sh64 \ - | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic80 | tron \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ | v850 | v850e \ | we32k \ - | x86 | xscale | xstormy16 | xtensa \ - | z8k) + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; + ms1) + basic_machine=mt-unknown + ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and @@ -281,40 +341,70 @@ case $basic_machine in | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armv*-* \ - | avr-* \ - | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c54x-* \ - | clipper-* | cydra-* \ - | d10v-* | d30v-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | fx80-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ - | m32r-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | mcore-* \ - | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ - | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ - | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ - | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile-* | tilegx-* \ + | tron-* \ + | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ - | xtensa-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -332,6 +422,9 @@ case $basic_machine in basic_machine=a29k-amd os=-udi ;; + abacus) + basic_machine=abacus-unknown + ;; adobe68k) basic_machine=m68010-adobe os=-scout @@ -346,6 +439,12 @@ case $basic_machine in basic_machine=a29k-none os=-bsd ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; amdahl) basic_machine=580-amdahl os=-sysv @@ -369,6 +468,10 @@ case $basic_machine in basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; aux) basic_machine=m68k-apple os=-aux @@ -377,10 +480,35 @@ case $basic_machine in basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -405,12 +533,27 @@ case $basic_machine in basic_machine=j90-cray os=-unicos ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; crds | unos) basic_machine=m68k-crds ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; da30 | da30-*) basic_machine=m68k-da30 ;; @@ -433,6 +576,14 @@ case $basic_machine in basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx @@ -583,6 +734,14 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; @@ -594,10 +753,17 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; miniframe) basic_machine=m68000-convergent ;; @@ -611,10 +777,6 @@ case $basic_machine in mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; monitor) basic_machine=m68k-rom68k os=-coff @@ -627,6 +789,9 @@ case $basic_machine in basic_machine=i386-pc os=-msdos ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; mvs) basic_machine=i370-ibm os=-mvs @@ -702,9 +867,12 @@ case $basic_machine in basic_machine=hppa1.1-oki os=-proelf ;; - or32 | or32-*) + openrisc | openrisc-*) basic_machine=or32-unknown - os=-coff + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson @@ -722,55 +890,75 @@ case $basic_machine in basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; - pc532 | pc532-*) + pc532 | pc532-*) basic_machine=ns32k-pc532 ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; - pentiumpro | p6 | 6x86 | athlon) + pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; - pentiumii | pentium2) + pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; + pentium4) + basic_machine=i786-pc + ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumii-* | pentium2-*) + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown - ;; + ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown - ;; + ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown - ;; + ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown - ;; + ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; @@ -781,6 +969,10 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; rom68k) basic_machine=m68k-rom68k os=-coff @@ -801,6 +993,20 @@ case $basic_machine in basic_machine=a29k-amd os=-udi ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; sequent) basic_machine=i386-sequent ;; @@ -808,6 +1014,12 @@ case $basic_machine in basic_machine=sh-hitachi os=-hms ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks @@ -866,7 +1078,7 @@ case $basic_machine in sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; - sv1) + sv1) basic_machine=sv1-cray os=-unicos ;; @@ -874,10 +1086,6 @@ case $basic_machine in basic_machine=i386-sequent os=-dynix ;; - t3d) - basic_machine=alpha-cray - os=-unicos - ;; t3e) basic_machine=alphaev5-cray os=-unicos @@ -886,9 +1094,14 @@ case $basic_machine in basic_machine=t90-cray os=-unicos ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff + # This must be matched before tile*. + tilegx*) + basic_machine=tilegx-unknown + os=-linux-gnu + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown @@ -903,6 +1116,10 @@ case $basic_machine in tower | tower-32) basic_machine=m68k-ncr ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; udi29k) basic_machine=a29k-amd os=-udi @@ -924,8 +1141,8 @@ case $basic_machine in os=-vms ;; vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; + basic_machine=f301-fujitsu + ;; vxworks960) basic_machine=i960-wrs os=-vxworks @@ -946,11 +1163,11 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; - windows32) - basic_machine=i386-pc - os=-windows32-msvcrt + xbox) + basic_machine=i686-pc + os=-mingw32 ;; - xps | xps100) + xps | xps100) basic_machine=xps100-honeywell ;; ymp) @@ -961,6 +1178,10 @@ case $basic_machine in basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -980,6 +1201,9 @@ case $basic_machine in romp) basic_machine=romp-ibm ;; + mmix) + basic_machine=mmix-knuth + ;; rs6000) basic_machine=rs6000-ibm ;; @@ -996,16 +1220,13 @@ case $basic_machine in we32k) basic_machine=we32k-att ;; - sh3 | sh4 | sh3eb | sh4eb) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sh64) - basic_machine=sh64-unknown - ;; - sparc | sparcv9 | sparcv9b) + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; - cydra) + cydra) basic_machine=cydra-cydrome ;; orion) @@ -1020,10 +1241,6 @@ case $basic_machine in pmac | pmac-mpw) basic_machine=powerpc-apple ;; - c4x*) - basic_machine=c4x-none - os=-coff - ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; @@ -1053,6 +1270,9 @@ case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; @@ -1073,24 +1293,31 @@ case $os in # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ + | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova*) + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1102,16 +1329,21 @@ case $os in ;; esac ;; + -nto-qnx*) + ;; -nto*) - os=-nto-qnx + os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; @@ -1124,6 +1356,9 @@ case $os in -opened*) os=-openedition ;; + -os400*) + os=-os400 + ;; -wince*) os=-wince ;; @@ -1145,6 +1380,9 @@ case $os in -atheos*) os=-atheos ;; + -syllable*) + os=-syllable + ;; -386bsd) os=-bsd ;; @@ -1155,7 +1393,7 @@ case $os in os=-rtmk-nova ;; -ns2 ) - os=-nextstep2 + os=-nextstep2 ;; -nsk*) os=-nsk @@ -1167,6 +1405,9 @@ case $os in -sinix*) os=-sysv4 ;; + -tpf*) + os=-tpf + ;; -triton*) os=-sysv3 ;; @@ -1194,9 +1435,23 @@ case $os in -xenix) os=-xenix ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; -none) ;; *) @@ -1219,6 +1474,12 @@ else # system, and we'll never get to this point. case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; *-acorn) os=-riscix1.2 ;; @@ -1228,11 +1489,23 @@ case $basic_machine in arm*-semi) os=-aout ;; + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; - pdp11-*) + pdp11-*) os=-none ;; *-dec | vax-*) @@ -1253,6 +1526,9 @@ case $basic_machine in m68*-cisco) os=-aout ;; + mep-*) + os=-elf + ;; mips*-cisco) os=-elf ;; @@ -1271,9 +1547,15 @@ case $basic_machine in *-be) os=-beos ;; + *-haiku) + os=-haiku + ;; *-ibm) os=-aix ;; + *-knuth) + os=-mmixware + ;; *-wec) os=-proelf ;; @@ -1325,19 +1607,19 @@ case $basic_machine in *-next) os=-nextstep3 ;; - *-gould) + *-gould) os=-sysv ;; - *-highlevel) + *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; - *-sgi) + *-sgi) os=-irix ;; - *-siemens) + *-siemens) os=-sysv4 ;; *-masscomp) @@ -1376,7 +1658,7 @@ case $basic_machine in -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) @@ -1406,10 +1688,16 @@ case $basic_machine in -mvs* | -opened*) vendor=ibm ;; + -os400*) + vendor=ibm + ;; -ptx*) vendor=sequent ;; - -vxsim* | -vxworks*) + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) @@ -1433,7 +1721,7 @@ case $basic_machine in esac echo $basic_machine$os -exit 0 +exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) diff --git a/stepmake/stepmake/documentation-vars.make b/stepmake/stepmake/documentation-vars.make index 9f6b5148a1..b22da2e9f5 100644 --- a/stepmake/stepmake/documentation-vars.make +++ b/stepmake/stepmake/documentation-vars.make @@ -1,5 +1,4 @@ -at-dir = $(doc-dir)/ +at-dir = $(doc-dir) at-ext = .in -CSS_FILES := $(call src-wildcard,*.css) -EXTRA_DIST_FILES += $(CSS_FILES) +EXTRA_DIST_FILES += $(call src-wildcard,*.ihtml) diff --git a/stepmake/stepmake/generic-rules.make b/stepmake/stepmake/generic-rules.make index 2500d80d41..0b04186db4 100644 --- a/stepmake/stepmake/generic-rules.make +++ b/stepmake/stepmake/generic-rules.make @@ -4,3 +4,5 @@ $(outdir)/%: %.m4 %.gz: % gzip -c9 $< > $@ +$(outdir)/%.css: $(CSS_DIRECTORY)/%.css + ln -f $< $@ diff --git a/stepmake/stepmake/generic-targets.make b/stepmake/stepmake/generic-targets.make index a36faaeb23..dcb196c4dc 100644 --- a/stepmake/stepmake/generic-targets.make +++ b/stepmake/stepmake/generic-targets.make @@ -8,12 +8,12 @@ man: $(LOOP) clean: local-clean - -rm -rf "./$(outdir)" + -rm -rf $(outdir) $(LOOP) ifeq (,$(findstring metafont,$(STEPMAKE_TEMPLATES))) bin-clean: local-bin-clean - -rm -rf "./$(outdir)" + -rm -rf $(outdir) $(LOOP) else bin-clean: @@ -27,7 +27,6 @@ dist: endif distclean: clean - $(LOOP) $(MAKE) local-distclean cvs-clean: @@ -48,32 +47,33 @@ config: generic-help: - @echo -e "\ -Makefile for $(PACKAGE_NAME) $(TOPLEVEL_VERSION)\n\ -Usage: make ["VARIABLE=value"]... [TARGET]\n\ -\n\ -Targets specific to current directory:\n" + @echo "Makefile for $(PACKAGE_NAME) $(TOPLEVEL_VERSION)" + @echo "Usage: make ["VARIABLE=value"]... [TARGET]" + @echo + @echo "Targets specific to current directory:" help: generic-help local-help - @echo -e "Generic targets:\n\ - all * update everything except documentation with images\n\ - clean * remove all generated stuff in $(outdir)\n\ - bin-clean * same as clean, except that mf/out is preserved\n\ - default same as the empty target\n\ - doc * update documentation with images in directory \`out-www'\n\ - doc-stage-1 * update only PDF and Info documentation in directory \`out-www'\n\ - doc-clean * clean \`out-www' directory\n\ - exe update all executables\n\ - help this help\n\ - install * install programs and data (prefix=$(prefix))\n\ - lib update all libraries\n\ - uninstall* uninstall programs and data\n\ - TAGS generate tagfiles\n\ -\n\ -\`make' may be invoked from any subdirectory.\n\ -Note that all commands marked with a star (*) recurse into subdirectories;\n\ -prepend \`local-' to restrict operation to the current directory.\n\ -Example: \`local-clean'." + @echo "Generic targets that recurse into subdirectories*:" + @echo " all update everything except documentation with images" + @echo " clean remove all generated stuff in $(outdir)" + @echo " bin-clean same as clean, except that mf/out is preserved" + @echo " doc update documentation with images in directory \`out-www'" + @echo " doc-stage-1 update only PDF and Info documentation in directory \`out-www'" + @echo " doc-clean clean \`out-www' directory" + @echo " install install programs and data (prefix=$(prefix))" + @echo " uninstall uninstall programs and data" + @echo + @echo " *Note: Prepend \`local-' (eg. \`local-clean') to restrict" + @echo " any of the above commands to the current directory." + @echo + @echo "Other generic targets:" + @echo " default same as the empty target" + @echo " exe update all executables" + @echo " help this help" + @echo " lib update all libraries" + @echo " TAGS generate tagfiles" + @echo + @echo "\`make' may be invoked from any subdirectory." local-help: @@ -190,6 +190,11 @@ doc: doc-stage-1 $(MAKE) out=www WWW-2 $(MAKE) out=www WWW-post +local-doc: + $(MAKE) out=www local-WWW-1 + $(MAKE) out=www local-WWW-2 + $(MAKE) out=www WWW-post + doc-stage-1: $(MAKE) -C $(depth)/scripts/build out= $(MAKE) out=www WWW-1 diff --git a/stepmake/stepmake/generic-vars.make b/stepmake/stepmake/generic-vars.make index f4c8436494..6a8729df5f 100644 --- a/stepmake/stepmake/generic-vars.make +++ b/stepmake/stepmake/generic-vars.make @@ -65,12 +65,12 @@ TOPLEVEL_VERSION=$(TOPLEVEL_MAJOR_VERSION).$(TOPLEVEL_MINOR_VERSION).$(TOPLEVEL_ endif -# no local settings in the build process. +# no locale settings in the build process. LANG= export LANG -INFO_DIRECTORIES = Documentation/user input/lsr +INFO_DIRECTORIES = Documentation # clean file lists: # @@ -103,6 +103,11 @@ SOURCE_FILES += $(IN_FILES) # Preprocessed .in documentation _FILES: OUTIN_FILES = $(addprefix $(outdir)/, $(IN_FILES:%.in=%)) +# CSS source files are in a unique directory +CSS_DIRECTORY = $(top-src-dir)/Documentation/css +CSS_FILES := $(shell ls $(CSS_DIRECTORY)/*.css) +OUT_CSS_FILES = $(CSS_FILES:$(CSS_DIRECTORY)/%.css=$(outdir)/%.css) + ALL_SOURCES = $(SOURCE_FILES) ifeq (cygwin,$(findstring cygwin,$(HOST_ARCH))) diff --git a/stepmake/stepmake/install-targets.make b/stepmake/stepmake/install-targets.make index 89c4129f1d..1344a2f524 100644 --- a/stepmake/stepmake/install-targets.make +++ b/stepmake/stepmake/install-targets.make @@ -10,7 +10,7 @@ local-install-files: $(INSTALLATION_FILES) $(INSTALLPY) -m 644 $(addprefix $(src-dir)/,$(INSTALLATION_FILES)) $(DESTDIR)$(INSTALLATION_DIR)/ $(foreach suff, $(INSTALLATION_SUFFIXES), \ ($(INSTALLPY) -d $(DESTDIR)$(INSTALLATION_DIR$(suff)) || true) && \ - $(INSTALLPY) -m 644 $(addprefix $(src-dir)/, $(INSTALLATION_FILES$(suff))) $(DESTDIR)$(INSTALLATION_DIR$(suff))/ ) + $(INSTALLPY) -m 644 $(addprefix $(src-dir), $(INSTALLATION_FILES$(suff))) $(DESTDIR)$(INSTALLATION_DIR$(suff))/ ) $(POST_INSTALL) local-uninstall: local-uninstall-outfiles local-uninstall-files diff --git a/stepmake/stepmake/makedir-vars.make b/stepmake/stepmake/makedir-vars.make index 7a78a59344..ac5d1b6e87 100644 --- a/stepmake/stepmake/makedir-vars.make +++ b/stepmake/stepmake/makedir-vars.make @@ -12,7 +12,7 @@ EXTRA_DIST_FILES += $(MAKE_FILES) # these two outdir FILES are distributed, since they make sense to have # without running configure and make. -at-dir = $(doc-dir)/ +at-dir = $(doc-dir) at-ext = .in diff --git a/stepmake/stepmake/metafont-rules.make b/stepmake/stepmake/metafont-rules.make index 3a7b158aea..c1728f9924 100644 --- a/stepmake/stepmake/metafont-rules.make +++ b/stepmake/stepmake/metafont-rules.make @@ -15,10 +15,14 @@ $(outdir)/%.tfm $(outdir)/%.log: %.mf # 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 diff --git a/stepmake/stepmake/omf-targets.make b/stepmake/stepmake/omf-targets.make index 2a51b1bd58..49325215e6 100644 --- a/stepmake/stepmake/omf-targets.make +++ b/stepmake/stepmake/omf-targets.make @@ -1,14 +1,14 @@ omf: $(OMF_FILES) -local-install: omf-local-install - omf-local-install: $(OMF_FILES) -$(INSTALLPY) -d $(DESTDIR)$(local_package_omfdir) $(foreach a, $(OMF_FILES), $(INSTALLPY) -m 644 $(a) $(DESTDIR)$(local_package_omfdir)/$(notdir $(a)) && ) true @echo "Run scrollkeeper-update to register newly installed OMF files." +ifeq ($(out),www) local-uninstall: omf-local-uninstall +endif omf-local-uninstall: rm -f $(foreach i, $(OMF_FILES), $(DESTDIR)$(local_package_omfdir)/$(notdir $(i))) diff --git a/stepmake/stepmake/script-vars.make b/stepmake/stepmake/script-vars.make index a16046128c..7bf8053123 100644 --- a/stepmake/stepmake/script-vars.make +++ b/stepmake/stepmake/script-vars.make @@ -14,4 +14,4 @@ SCM_SCRIPTS = $(addprefix $(outdir)/, $(SCM_SCRIPTS_IN:.scm=)) SH_SCRIPTS = $(addprefix $(outdir)/, $(SH_SCRIPTS_IN:.sh=)) ALL_SCRIPTS_IN = $(BASH_SCRIPTS_IN) $(EXPECT_SCRIPTS_IN) $(PERL_SCRIPTS_IN) $(PYTHON_SCRIPTS_IN) $(SCM_SCRIPTS_IN) $(SH_SCRIPTS_IN) -EXTRA_DIST_FILES += $(ALL_SCRIPTS_IN) +SOURCE_FILES += $(ALL_SCRIPTS_IN) diff --git a/stepmake/stepmake/texinfo-rules.make b/stepmake/stepmake/texinfo-rules.make index 351a1cc2d8..f9e471a167 100644 --- a/stepmake/stepmake/texinfo-rules.make +++ b/stepmake/stepmake/texinfo-rules.make @@ -13,7 +13,7 @@ # prerequisite, otherwise %.info are always outdated (because older # than $(outdir)), hence this .dep file -$(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep: $(INFO_DOCS:%=$(outdir)/%.texi) +$(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep: $(OUT_TEXI_FILES) ifneq ($(INFO_IMAGES_DIR),) rm -f $(INFO_IMAGES_DIR) ln -s $(outdir) $(INFO_IMAGES_DIR) @@ -23,45 +23,62 @@ ifneq ($(INFO_IMAGES_DIR),) endif touch $@ -$(outdir)/%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi +$(outdir)/%.texi: $(src-dir)/%.texi + cp -p $< $@ + +$(outdir)/%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi $(outdir)/weblinks.itexi +ifeq ($(WEB_VERSION),yes) + $(MAKEINFO) -I$(src-dir) -I$(outdir) -D web_version --output=$@ $< +else $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $< +endif -$(outdir)/%-big-page.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) -D bigpage --output=$@ $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) +$(outdir)/%-big-page.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi $(outdir)/weblinks.itexi +ifeq ($(WEB_VERSION),yes) + DEPTH=$(depth) AJAX_SEARCH=$(AJAX_SEARCH) $(TEXI2HTML) $(TEXI2HTML_FLAGS) -D bigpage -D web_version --output=$@ $< +else + DEPTH=$(depth) AJAX_SEARCH=$(AJAX_SEARCH) $(TEXI2HTML) $(TEXI2HTML_FLAGS) -D bigpage --output=$@ $< +endif -$(outdir)/%.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) --output=$@ $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) +$(outdir)/%.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi $(outdir)/weblinks.itexi + DEPTH=$(depth) AJAX_SEARCH=$(AJAX_SEARCH) $(TEXI2HTML) $(TEXI2HTML_FLAGS) --output=$@ $< -$(outdir)/%/index.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi $(outdir)/%.html.omf +$(outdir)/%/index.html: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map $(outdir)/version.itexi $(outdir)/weblinks.itexi $(outdir)/%.html.omf mkdir -p $(dir $@) - $(TEXI2HTML) --I=$(src-dir) --I=$(outdir) --output=$(dir $@) --prefix=index --split=section $(TEXI2HTML_INIT) $< - cp $(top-src-dir)/Documentation/lilypond*.css $(dir $@) - +ifeq ($(WEB_VERSION),yes) + DEPTH=$(depth)/../ AJAX_SEARCH=$(AJAX_SEARCH) $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) -D web_version --output=$(dir $@) $< +else + DEPTH=$(depth)/../ AJAX_SEARCH=$(AJAX_SEARCH) $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) --output=$(dir $@) $< +endif + cp $(top-src-dir)/Documentation/css/*.css $(dir $@) -$(outdir)/%.html.omf: %.texi - $(call GENERATE_OMF,html) +$(XREF_MAPS_DIR)/%.xref-map: $(outdir)/%.texi + $(buildscript-dir)/extract_texi_filenames $(XREF_MAP_FLAGS) -o $(XREF_MAPS_DIR) $< -$(outdir)/%.pdf.omf: %.texi - $(call GENERATE_OMF,pdf) +$(outdir)/%.info: %.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi $(outdir)/weblinks.itexi + $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $< -$(outdir)/%.pdf: $(outdir)/%.texi $(outdir)/version.itexi $(outdir)/%.pdf.omf +$(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) $( $@ - echo $(TOPLEVEL_VERSION)>> $@ - echo '@end macro'>> $@ + $(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@ + +$(outdir)/weblinks.%: $(top-src-dir)/VERSION + $(PYTHON) $(top-src-dir)/scripts/build/create-weblinks-itexi.py > $@ .SECONDARY: $(outdir)/version.itexi $(outdir)/version.texi \ $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep \ diff --git a/stepmake/stepmake/texinfo-targets.make b/stepmake/stepmake/texinfo-targets.make index ede79d46e1..487ee97e49 100644 --- a/stepmake/stepmake/texinfo-targets.make +++ b/stepmake/stepmake/texinfo-targets.make @@ -4,9 +4,11 @@ default: $(INFO_FILES) ifeq ($(out),www) local-WWW-1: $(XREF_MAPS_FILES) + +local-WWW-2: $(OUT_CSS_FILES) endif -local-doc: $(OUTTXT_FILES) +local-txt-doc: $(OUTTXT_FILES) check-info: texinfo-all-menus-update @@ -41,7 +43,7 @@ install-info-images: # remove $(infodir)/$(INFO_IMAGES_DIR) in case it is a symlink -rm -f $(DESTDIR)$(infodir)/$(INFO_IMAGES_DIR) $(INSTALL) -d $(DESTDIR)$(infodir)/$(INFO_IMAGES_DIR) - rsync -r --include '[0-9a-f][0-9a-f]' --include '*.png' --exclude '*' $(outdir)/ $(DESTDIR)$(infodir)/$(INFO_IMAGES_DIR)/ + rsync -r --include '[0-9a-f][0-9a-f]' --include '*.png' --exclude '*' $(outdir)/ $(DESTDIR)$(infodir)/$(INFO_IMAGES_DIR) uninstall-info-images: rm -f $(DESTDIR)$(infodir)/$(INFO_IMAGES_DIR) || rm -rf $(DESTDIR)$(infodir)/$(INFO_IMAGES_DIR) @@ -161,8 +163,9 @@ texinfo-all-menus-update: local-help: local-texinfo-help local-texinfo-help: - @echo -e "\ - info [out=www] update Info documentation (use \`out=www' for having images)\n\ - install-info [out=www] install Info documentation (idem)\n\ - texinfo-all-menus-update update node menus in Texinfo source files (use with caution)\n" + @echo " info [out=www] update Info documentation" + @echo " (use \`out=www' for having images)" + @echo " install-info [out=www] install Info documentation (idem)" + @echo " texinfo-all-menus-update update node menus in Texinfo source files" + @echo " (use with caution)" diff --git a/stepmake/stepmake/texinfo-vars.make b/stepmake/stepmake/texinfo-vars.make index bcd5f1e576..4c990d9f04 100644 --- a/stepmake/stepmake/texinfo-vars.make +++ b/stepmake/stepmake/texinfo-vars.make @@ -4,7 +4,9 @@ TEXINFO_SOURCES = $(TEXI_FILES) OUTTXT_FILES += $(addprefix $(outdir)/,$(TEXI_FILES:.texi=.txt)) -GENERATE_OMF = $(buildscript-dir)/texi2omf --format $(1) --location $(webdir)/$(tree-dir)/out-www/$(notdir $(basename $@)) --version $(TOPLEVEL_VERSION) $< > $@ +OMF_FILES += $(foreach format, html pdf, $(foreach f, $(TEXI_FILES), $(outdir)/$(f:.texi=.$(format)).omf)) + +GENERATE_OMF = $(buildscript-dir)/texi2omf --format $(1) --location $(webdir)$(tree-dir)/$(notdir $(basename $@)) --version $(TOPLEVEL_VERSION) $< > $@ TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper) @@ -14,16 +16,26 @@ MAKEINFO_FLAGS += --enable-encoding $(DOCUMENTATION_INCLUDES) MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS) # texi2html xref map files -XREF_MAPS_DIR=$(top-build-dir)/out/xref-maps -XREF_MAPS_FILES=$(INFO_DOCS:%=$(XREF_MAPS_DIR)/%.xref-map) +# FIXME: duplicated in stepake/texinfo-vars.make make/doc-i18n-root-vars.make +XREF_MAPS_DIR = $(top-build-dir)/$(outdir)/xref-maps +XREF_MAPS_FILES += $(TEXI_FILES:%.texi=$(XREF_MAPS_DIR)/%.xref-map) \ + $(TELY_FILES:%.tely=$(XREF_MAPS_DIR)/%.xref-map) +XREF_MAP_FLAGS += -I $(outdir) -I $(src-dir) -# texi2html flags +########### ifneq ($(ISOLANG),) TEXI2HTML_LANG = --lang=$(ISOLANG) endif -TEXI2HTML_FLAGS += $(DOCUMENTATION_INCLUDES) --I=$(XREF_MAPS_DIR) + TEXI2HTML_INIT = --init-file=$(top-src-dir)/Documentation/lilypond-texi2html.init -TEXI2HTML = PERL_UNICODE=SD $(TEXI2HTML_PROGRAM) $(TEXI2HTML_FLAGS) $(TEXI2HTML_LANG) + +TEXI2HTML_SPLIT = --prefix=index --split=section + +TEXI2HTML_INCLUDES += --I=$(src-dir) --I=$(outdir) $(DOCUMENTATION_INCLUDES) --I=$(XREF_MAPS_DIR) +TEXI2HTML_FLAGS += $(TEXI2HTML_INCLUDES) $(TEXI2HTML_INIT) $(TEXI2HTML_LANG) +TEXI2HTML = TOP_SRC_DIR=$(top-src-dir) PERL_UNICODE=SD $(TEXI2HTML_PROGRAM) +########### + TEXI2PDF_FLAGS += $(DOCUMENTATION_INCLUDES) @@ -33,7 +45,7 @@ endif # info stuff INFO_INSTALL_FILES = $(wildcard $(addsuffix *, $(INFO_FILES))) -INFO_INSTALL_COMMAND =$(if $(INFO_INSTALL_FILES),\ +INFO_INSTALL_COMMAND = $(if $(INFO_INSTALL_FILES),\ $(INSTALLPY) -d $(DESTDIR)$(infodir) ; \ $(MAKE) INSTALLATION_OUT_DIR=$(infodir) \ depth=$(depth) INSTALLATION_OUT_FILES="$(INFO_INSTALL_FILES)" \ diff --git a/stepmake/stepmake/topdocs-targets.make b/stepmake/stepmake/topdocs-targets.make index acacbb3c69..f884cadb9a 100644 --- a/stepmake/stepmake/topdocs-targets.make +++ b/stepmake/stepmake/topdocs-targets.make @@ -1,5 +1,5 @@ -default: local-doc +default: local-txt-doc ifeq ($(out),www) local-WWW-1: $(PDF_FILES) diff --git a/stepmake/stepmake/topdocs-vars.make b/stepmake/stepmake/topdocs-vars.make index b47fb8867d..f2fc5610ed 100644 --- a/stepmake/stepmake/topdocs-vars.make +++ b/stepmake/stepmake/topdocs-vars.make @@ -1,3 +1,7 @@ TO_TOP_FILES=$(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES))) -DOCUMENTATION_INCLUDES += -I $(top-src-dir)/Documentation/user +DOCUMENTATION_INCLUDES +=\ + -I $(top-src-dir)/Documentation/usage\ + -I $(top-src-dir)/Documentation/contributor\ + +# diff --git a/stepmake/stepmake/toplevel-targets.make b/stepmake/stepmake/toplevel-targets.make index 94f9e234f3..d2748a97a3 100644 --- a/stepmake/stepmake/toplevel-targets.make +++ b/stepmake/stepmake/toplevel-targets.make @@ -9,9 +9,9 @@ local-distclean: config.cache config.status config.log index.html \ stepmake/stepmake/stepmake stepmake/stepmake/bin rm -rf autom4te.cache + rm -rf $(outdir) local-maintainerclean: - rm -f configure GNUmakefile: GNUmakefile.in $(MAKE) INFILE=$< OUTFILE=$@ -f $(stepdir)/automatically-generated.sub.make @@ -27,7 +27,7 @@ endif $(package-icon): - $(MAKE) -C Documentation/pictures icon + $(MAKE) -C Documentation/logo icon top-doc: @@ -52,27 +52,32 @@ dist: chmod -R a+r $(distdir) chmod a+x `find $(distdir) -type d -print` (cd ./$(depth)/$(outdir); $(TAR) -cf - --owner=0 --group=0 $(DIST_NAME) | gzip -9 > $(DIST_NAME).tar.gz) - rm -rf $(distdir)/ + rm -rf $(distdir) local-help: - @echo -e "\ - config rerun configure\n\ - dist roll tarball: $(depth)/$(outdir)/$(distname).tar.gz\n\ - distclean also remove configure output\n\ - cvs-clean also remove out directories and generated files\n\ - maintainerclean also remove distributed generated files\n\ - po make new translation Portable Object database\n\ - po-replace do po-update and replace catalogs with msgmerged versions\n\ - po-update update translation Portable Object database\n\ -\n\ - install-doc install website documentation in (webdir=$(webdir))\n\ - and Info documentation with images\n\ - uninstall-doc remove installed documentation with images\n\ - info build Info documentation with images\n\ - install-info install Info documentation with images\n\ -\n\ -Some more targets are available for testing changes:\n\ - test-baseline check test-redo test-clean\n\ -For more information on these targets, see Testing LilyPond\n\ -in Application Usage documentation.\n" + @echo " config rerun configure" + @echo " dist roll tarball: $(depth)/$(outdir)/$(distname).tar.gz" + @echo " distclean also remove configure output" + @echo " cvs-clean also remove out directories and generated files" + @echo " maintainerclean also remove distributed generated files" + @echo " po make new translation Portable Object database" + @echo " po-replace do po-update and replace catalogs with msgmerged versions" + @echo " po-update update translation Portable Object database" + @echo + @echo " install-doc install website documentation in" + @echo " (webdir=$(webdir))" + @echo " and Info documentation with images" + @echo " uninstall-doc remove installed documentation with images" + @echo " info build Info documentation with images" + @echo " install-info install Info documentation with images" + @echo + @echo "Some more targets are available for testing changes:" + @echo " test-baseline" + @echo " check" + @echo " test-redo" + @echo " test-clean" + @echo + @echo " For more information on these targets, see" + @echo " \`Testing LilyPond' in the Contributor's Guide." + @echo diff --git a/tex/GNUmakefile b/tex/GNUmakefile index 64e2653bd9..51a54a43aa 100644 --- a/tex/GNUmakefile +++ b/tex/GNUmakefile @@ -5,7 +5,7 @@ TEX_FILES = $(filter-out $(TEXINFO_FILES),$(call src-wildcard,*.tex)) EXTRA_DIST_FILES = $(TEX_FILES) $(TEXINFO_FILES) STEPMAKE_TEMPLATES = install install-out -INSTALLATION_DIR = $(local_lilypond_datadir)/tex/ +INSTALLATION_DIR = $(local_lilypond_datadir)/tex INSTALLATION_FILES = $(TEX_FILES) include $(depth)/make/stepmake.make diff --git a/tex/texinfo.tex b/tex/texinfo.tex index c7c92b8de7..91408263bc 100644 --- a/tex/texinfo.tex +++ b/tex/texinfo.tex @@ -1,13 +1,13 @@ % texinfo.tex -- TeX macros to handle Texinfo files. -% +% % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2008-12-16.21} +\def\texinfoversion{2009-08-14.15} % -% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, -% 2007, 2008 Free Software Foundation, Inc. +% 2007, 2008, 2009 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as @@ -100,6 +100,7 @@ \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% Math-mode def from plain.tex. +\let\ptexraggedright=\raggedright % If this character appears in an error message or help string, it % starts a new line in the output. @@ -357,7 +358,7 @@ % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; - % it needs to be + % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. @@ -708,7 +709,7 @@ \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. -% +% \def\onword{on} \def\offword{off} % @@ -1284,7 +1285,7 @@ where each line of input produces a line of output.} % that's what we do). % double active backslashes. -% +% {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslashdouble{% @catcode`@\=@active @@ -1296,11 +1297,11 @@ where each line of input produces a line of output.} % us) handles it with this amazing macro to replace tokens, with minor % changes for Texinfo. It is included here under the GPL by permission % from the author, Heiko Oberdiek. -% +% % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. -% +% \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% @@ -1331,13 +1332,16 @@ output) for that.)} \ifpdf % - % Color manipulation macros based on pdfcolor.tex. - \def\cmykDarkRed{0.28 1 1 0.35} - \def\cmykBlack{0 0 0 1} + % Color manipulation macros based on pdfcolor.tex, + % except using rgb instead of cmyk; the latter is said to render as a + % very dark gray on-screen and a very dark halftone in print, instead + % of actual black. + \def\rgbDarkRed{0.50 0.09 0.12} + \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). - \def\pdfsetcolor#1{\pdfliteral{#1 k #1 K}} + \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. @@ -1347,7 +1351,7 @@ output) for that.)} \pdfsetcolor{#1}% } % - \def\maincolor{\cmykBlack} + \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} @@ -1442,8 +1446,8 @@ output) for that.)} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. - \def\urlcolor{\cmykDarkRed} - \def\linkcolor{\cmykDarkRed} + \def\urlcolor{\rgbDarkRed} + \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines @@ -1572,11 +1576,15 @@ output) for that.)} % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. - % + % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable + % do we want to go so far as to use \indexnofonts instead of just + % special-casing \var here? + \def\var##1{##1}% + % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% @@ -1976,7 +1984,7 @@ end % Definitions for a main text size of 11pt. This is the default in % Texinfo. -% +% \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} @@ -2107,7 +2115,7 @@ end % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. -% +% \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} @@ -2196,7 +2204,7 @@ end \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} -\font\seci=cmmi12 +\font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} @@ -2240,7 +2248,7 @@ end % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. -% +% \def\xword{10} \def\xiword{11} % @@ -2250,7 +2258,7 @@ end % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. - % + % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi @@ -2467,8 +2475,8 @@ end % from cmtt (char 0x0d). The undirected quote is ugly, so don't make it % the default, but it works for pasting with more pdf viewers (at least % evince), the lilypond developers report. xpdf does work with the -% regular 0x27. -% +% regular 0x27. +% \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax @@ -2480,7 +2488,7 @@ end % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. -% +% \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax @@ -2581,7 +2589,7 @@ end % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % -\def\key#1{{\setupmarkupstyle{key} +\def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} @@ -2664,7 +2672,7 @@ end % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. -% +% \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} @@ -2789,7 +2797,7 @@ end % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. -% +% \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% @@ -2801,7 +2809,7 @@ end % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. -% +% \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% @@ -2858,52 +2866,59 @@ end % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -% +% % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. -% +% % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted -% +% % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. -% +% % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. -% -% +% +% \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. - % + % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. - % + % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. - % + % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % - \ifx\curfontstyle\bfstylename + \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize - \else + \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } -% Hacks for glyphs from the EC fonts similar to \euro. We don't -% use \let for the aliases, because sometimes we redefine the original -% macro, and the alias should reflect the redefinition. +% Glyphs from the EC fonts. We don't use \let for the aliases, because +% sometimes we redefine the original macro, and the alias should reflect +% the redefinition. +% +% Use LaTeX names for the Icelandic letters. +\def\DH{{\ecfont \char"D0}} % Eth +\def\dh{{\ecfont \char"F0}} % eth +\def\TH{{\ecfont \char"DE}} % Thorn +\def\th{{\ecfont \char"FE}} % thorn +% \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} @@ -2917,7 +2932,7 @@ end % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. -% +% % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. @@ -2940,6 +2955,7 @@ end \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % +% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German @@ -2974,7 +2990,7 @@ end % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. -% +% \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi @@ -3320,7 +3336,7 @@ end % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. - % + % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse @@ -3414,9 +3430,18 @@ end \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi + % + % Try typesetting the item mark that if the document erroneously says + % something like @itemize @samp (intending @table), there's an error + % right away at the @itemize. It's not the best error message in the + % world, but it's better than leaving it to the @item. This means if + % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% + \setbox0 = \hbox{\itemcontents}% + % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + % \let\item=\itemizeitem } @@ -3437,6 +3462,7 @@ end \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } @@ -3658,12 +3684,19 @@ end % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group -% of an alignment entry. Note that \everycr resets \everytab. -\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% of an alignment entry. \everycr resets \everytab so we don't have to +% undo it ourselves. +\def\headitemfont{\b}% for people to use in the template row; not changeable +\def\headitem{% + \checkenv\multitable + \crcr + \global\everytab={\bf}% can't use \headitemfont since the parsing differs + \the\everytab % for the first item +}% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until -% we encounter the problem it was intended to solve again. +% we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% @@ -4116,7 +4149,7 @@ end % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. - % + % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} @@ -4124,12 +4157,12 @@ end % @end macro % ... % @funindex commtest - % + % % The above is not enough to reproduce the bug, but it gives the flavor. - % + % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} - % + % % So: \let\endinput = \empty % @@ -4181,19 +4214,23 @@ end % Non-English letters. \definedummyword\AA \definedummyword\AE + \definedummyword\DH \definedummyword\L - \definedummyword\OE \definedummyword\O + \definedummyword\OE + \definedummyword\TH \definedummyword\aa \definedummyword\ae + \definedummyword\dh + \definedummyword\exclamdown \definedummyword\l - \definedummyword\oe \definedummyword\o - \definedummyword\ss - \definedummyword\exclamdown - \definedummyword\questiondown + \definedummyword\oe \definedummyword\ordf \definedummyword\ordm + \definedummyword\questiondown + \definedummyword\ss + \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf @@ -4288,6 +4325,7 @@ end \definedummyword\code \definedummyword\command \definedummyword\dfn + \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file @@ -4336,19 +4374,23 @@ end % Non-English letters. \def\AA{AA}% \def\AE{AE}% + \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% + \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% + \def\dh{dzz}% + \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% - \def\o{o}% - \def\ss{ss}% - \def\exclamdown{!}% - \def\questiondown{?}% \def\ordf{a}% \def\ordm{o}% + \def\o{o}% + \def\questiondown{?}% + \def\ss{ss}% + \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% @@ -4358,20 +4400,19 @@ end \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% - \def\registeredsymbol{R}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% + \def\expansion{==>}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% - \def\expansion{==>}% \def\minus{-}% - \def\pounds{pounds}% \def\point{.}% + \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% @@ -4379,19 +4420,20 @@ end \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% + \def\registeredsymbol{R}% \def\result{=>}% - \def\textdegree{degrees}% + \def\textdegree{o}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. - % + % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. - % + % \macrolist } @@ -4519,7 +4561,7 @@ end % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: - % + % % @deffn deffn-whatever % @vindex index-whatever % Description. @@ -5100,7 +5142,9 @@ end \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % - \message{\putwordChapter\space \the\chapno}% + % \putwordChapter can contain complex things in translations. + \toks0=\expandafter{\putwordChapter}% + \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% @@ -5111,15 +5155,17 @@ end \global\let\subsubsection = \numberedsubsubsec } -\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz +% \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % - \def\appendixnum{\putwordAppendix\space \appendixletter}% - \message{\appendixnum}% + % \putwordAppendix can contain complex things in translations. + \toks0=\expandafter{\putwordAppendix}% + \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % @@ -5259,7 +5305,7 @@ end \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright + \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent @@ -5352,7 +5398,10 @@ end \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% - \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum: + % \noexpand\putwordAppendix avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} + \noexpand\thischapternum: \noexpand\thischaptername}% }% \else @@ -5360,7 +5409,10 @@ end \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% - \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum: + % \noexpand\putwordChapter avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordChapter{} + \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi @@ -5416,7 +5468,7 @@ end % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% @@ -5440,7 +5492,7 @@ end % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright + \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts @@ -5503,7 +5555,10 @@ end \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% - \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi @@ -5513,7 +5568,10 @@ end \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% - \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi @@ -5573,7 +5631,7 @@ end \nobreak % % Output the actual section heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% @@ -5589,11 +5647,11 @@ end % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip - % + % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: - % + % % @section sec-whatever % @deffn def-whatever \penalty 10001 @@ -5651,7 +5709,7 @@ end % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. -% +% \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active @@ -5701,7 +5759,7 @@ end % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. -% +% \def\tocreadfilename{\jobname.toc} % Normal (long) toc. @@ -6151,6 +6209,30 @@ end \let\Eflushright = \afterenvbreak +% @raggedright does more-or-less normal line breaking but no right +% justification. From plain.tex. +\envdef\raggedright{% + \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax +} +\let\Eraggedright\par + +\envdef\raggedleft{% + \parindent=0pt \leftskip0pt plus2em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedleft\par + +\envdef\raggedcenter{% + \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedcenter\par + + % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and @@ -6769,7 +6851,7 @@ end % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). -% +% \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname @@ -7929,21 +8011,22 @@ end \closein 1 \endgroup % end raw TeX \endgroup} -} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. -% -\def\documentlanguagetrywithoutunderscore#1_#2\finish{% +% +\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else + \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } +}% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current @@ -7952,16 +8035,16 @@ directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. -% +% % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. -% +% % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) -% +% \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. @@ -8016,7 +8099,7 @@ directory should work if nowhere else does.} \setnonasciicharscatcode\active \lattwochardefs % - \else \ifx \declaredencoding \latone + \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % @@ -8028,7 +8111,7 @@ directory should work if nowhere else does.} \setnonasciicharscatcode\active \utfeightchardefs % - \else + \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight @@ -8040,7 +8123,7 @@ directory should work if nowhere else does.} % A message to be logged when using a character that isn't available % the default font encoding (OT1). -% +% \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. @@ -8053,21 +8136,21 @@ directory should work if nowhere else does.} % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% - \gdef^^a0{~} + \gdef^^a0{~} \gdef^^a1{\exclamdown} - \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} - \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} - \gdef^^a8{\"{}} - \gdef^^a9{\copyright} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} - \gdef^^ad{\-} - \gdef^^ae{\registeredsymbol} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} @@ -8094,7 +8177,7 @@ directory should work if nowhere else does.} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} - \gdef^^c5{\ringaccent A} + \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} @@ -8106,7 +8189,7 @@ directory should work if nowhere else does.} \gdef^^ce{\^I} \gdef^^cf{\"I} % - \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}} + \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} @@ -8120,7 +8203,7 @@ directory should work if nowhere else does.} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} - \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}} + \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} @@ -8140,7 +8223,7 @@ directory should work if nowhere else does.} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % - \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}} + \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} @@ -8154,7 +8237,7 @@ directory should work if nowhere else does.} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} - \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}} + \gdef^^fe{\th} \gdef^^ff{\"y} } @@ -8226,7 +8309,7 @@ directory should work if nowhere else does.} \gdef^^ce{\^I} \gdef^^cf{\v D} % - \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}} + \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} @@ -8235,7 +8318,7 @@ directory should work if nowhere else does.} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} - \gdef^^d9{\ringaccent U} + \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} @@ -8260,7 +8343,7 @@ directory should work if nowhere else does.} \gdef^^ee{\^\i} \gdef^^ef{\v d} % - \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}} + \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} @@ -8279,11 +8362,11 @@ directory should work if nowhere else does.} } % UTF-8 character definitions. -% +% % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. -% +% \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz @@ -8433,6 +8516,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} + \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} @@ -8445,6 +8529,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} @@ -8464,6 +8549,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} @@ -8476,6 +8562,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} @@ -9132,7 +9219,7 @@ directory should work if nowhere else does.} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. -% +% @def@normalturnoffactive{% @let\=@normalbackslash @let"=@normaldoublequote @@ -9188,7 +9275,7 @@ directory should work if nowhere else does.} @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault - + @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" diff --git a/tex/txi-hu.tex b/tex/txi-hu.tex new file mode 100644 index 0000000000..7f03a7cb95 --- /dev/null +++ b/tex/txi-hu.tex @@ -0,0 +1,87 @@ +% 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 . + +\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 diff --git a/tex/txi-it.tex b/tex/txi-it.tex new file mode 100644 index 0000000000..06f4f1d6b4 --- /dev/null +++ b/tex/txi-it.tex @@ -0,0 +1,70 @@ +% $Id: txi-it.tex,v 1.7 2008/10/16 17:13:10 karl Exp $ +% txi-it.tex -- Italian translations for texinfo.tex +% +% Copyright 1999, 2007, 2008 Free Software Foundation. +% +% 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 . + +\txisetlanguage{italian}{2}{2} + +\plainfrenchspacing + +\gdef\putwordAppendix{Appendice} +\gdef\putwordChapter{Capitolo} +\gdef\putwordfile{file} +\gdef\putwordin{in} +\gdef\putwordIndexIsEmpty{(L'indice \'e vuoto)} +\gdef\putwordIndexNonexistent{(L'indice non esiste)} +\gdef\putwordInfo{Info} +\gdef\putwordInstanceVariableof{Variabile di istanza di} +\gdef\putwordMethodon{Metodo di} +\gdef\putwordNoTitle{Nessun titolo} +\gdef\putwordof{di} +\gdef\putwordon{su} +\gdef\putwordpage{pagina} +\gdef\putwordsection{sezione} +\gdef\putwordSection{Sezione} +\gdef\putwordsee{vedi} +\gdef\putwordSee{Vedi} +\gdef\putwordShortTOC{Sommario abbreviato} +\gdef\putwordTOC{Sommario} +% +\gdef\putwordMJan{Gennaio} +\gdef\putwordMFeb{Febbraio} +\gdef\putwordMMar{Marzo} +\gdef\putwordMApr{Aprile} +\gdef\putwordMMay{Maggio} +\gdef\putwordMJun{Giugno} +\gdef\putwordMJul{Luglio} +\gdef\putwordMAug{Agosto} +\gdef\putwordMSep{Settembre} +\gdef\putwordMOct{Ottobre} +\gdef\putwordMNov{Novembre} +\gdef\putwordMDec{Dicembre} +% +\gdef\putwordDefmac{Macro} +\gdef\putwordDefspec{Forma speciale} +\gdef\putwordDefvar{Variabile} +\gdef\putwordDefopt{Opzione} +\gdef\putwordDeffunc{Funzione} + +% Produces Day Month Year style of output. +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} diff --git a/vim/lilypond-ftdetect.vim b/vim/lilypond-ftdetect.vim index 9147fc81dd..756e65b80f 100644 --- a/vim/lilypond-ftdetect.vim +++ b/vim/lilypond-ftdetect.vim @@ -1,4 +1,4 @@ " " Installed As: vim/ftdetect/lilypond.vim " -au! BufNewFile,BufRead *.ly,*.ily setf lilypond +au! BufNewFile,BufRead *.ly,*.ily set ft=lilypond diff --git a/vim/lilypond-ftplugin.vim b/vim/lilypond-ftplugin.vim index 1579388a42..6d60ca3bf6 100644 --- a/vim/lilypond-ftplugin.vim +++ b/vim/lilypond-ftplugin.vim @@ -1,10 +1,10 @@ " LilyPond filetype plugin " Language: LilyPond (ft=ly) " Maintainer: Heikki Junes -" Last Change: 2004 March 1 +" Last Change: 2010 Jul 26 " " Installed As: vim/ftplugin/lilypond.vim -" Uses Generated File: vim/syntax/lilypond-words.el +" Uses Generated File: vim/syntax/lilypond-words.vim " " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -19,18 +19,15 @@ setlocal shiftwidth=2 " " some handy key mappings " -" save & make and play midi +" save & make and play midi with timidity map :w:se makeprg=lilypond\ -m\ %<:make:!timidity %<.midi " -" save & make dvi, midi, ps +" save & make map :w:se makeprg=lilypond\ %<:make " -" view ps +" view ps with ghostview map :!gv --watch %<.ps & " -" view dvi -map :!xdvi %<.dvi & -" " prev error map :cp " diff --git a/vim/lilypond-indent.vim b/vim/lilypond-indent.vim index 25d92e9baa..224f5de4cd 100644 --- a/vim/lilypond-indent.vim +++ b/vim/lilypond-indent.vim @@ -1,7 +1,7 @@ " LilyPond indent file " Language: LilyPond " Maintainer: Heikki Junes -" Last Change: 2004 Mar 01 +" Last Change: 2010 Jul 26 " " Installed As: vim/indent/lilypond.vim " @@ -38,6 +38,21 @@ function GetLilyPondIndent() let ind = ind - &sw endif + " Check if the first character from the previous line is within + " a `lilyScheme' region, and if so, use lisp-style indentation + " for the current line. + " + " TODO: + " - Only works in version 7.1.215 or later, though it should + " silently fail in older versions. + " - We should support `lilyScheme' regions that begin in the + " middle of the line, too. + for id in synstack(lnum, 1) + if synIDattr(id, "name") == "lilyScheme" + let ind = lispindent(v:lnum) + endif + endfor + return ind endfunction " diff --git a/vim/lilypond-syntax.vim b/vim/lilypond-syntax.vim index 7d0a6d89e7..c8322f697e 100644 --- a/vim/lilypond-syntax.vim +++ b/vim/lilypond-syntax.vim @@ -1,9 +1,7 @@ " LilyPond syntax file " Language: LilyPond " Maintainer: Heikki Junes -" Created: Oct 17, 2002 -" Last Change: Sep 23, 2003 -" Version: 6.1-1 +" Last Change: 2010 Jul 26 " " Installed As: vim/syntax/lilypond.vim " Uses Generated File: vim/syntax/lilypond-words.vim @@ -33,7 +31,7 @@ setlocal mps+=<:> " Case matters syn case match -syn cluster lilyMatchGroup contains=lilyMatcher,lilyString,lilyComment,lilyStatement,lilyNumber,lilyEquation,lilySlur,lilySpecial,lilyNote,lilyKeyword,lilyArticulation,lilyReservedWord +syn cluster lilyMatchGroup contains=lilyMatcher,lilyString,lilyComment,lilyStatement,lilyNumber,lilySlur,lilySpecial,lilyNote,lilyKeyword,lilyArticulation,lilyReservedWord,lilyScheme syn region lilyMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[<>]" end="}" contains=@lilyMatchGroup fold syn region lilyMatcher matchgroup=Delimiter start="\[" end="]" contains=@lilyMatchGroup fold @@ -44,7 +42,6 @@ syn region lilyComment start="%{" skip="%$" end="%}" syn region lilyComment start="%\([^{]\|$\)" end="$" syn match lilyNumber "[-_^.]\?\d\+[.]\?" -syn match lilyEquation "\(#['`]\)\?\(\a*[-]\)*\a*\s*=\s*\(#[#'`]\?\)\?\a*" syn match lilySlur "[(~)]" syn match lilySlur "\\[()]" syn match lilySpecial "\\[\\]" @@ -52,6 +49,11 @@ syn match lilySpecial "\\[\\]" " c--\mf c^^\mf c__\mf syn match lilyArticulation "[-_^][-_^+|>.]" +" Include Scheme syntax highlighting, where appropriate +syn include @embeddedScheme syntax/scheme.vim +unlet b:current_syntax +syn region lilyScheme matchgroup=Delimiter start="#['`]\?(" matchgroup=Delimiter end=")" contains=@embeddedScheme + " Rest of syntax highlighting rules start here " " " Define the default highlighting. @@ -81,3 +83,5 @@ if version >= 508 || !exists("did_lily_syn_inits") delcommand HiLink endif + +let b:current_syntax = "lilypond" -- 2.39.2
  • + + \IMAGE-FILE\ + +

    + (クリックすると拡大します) +

    +
    + + \IMAGE-FILE\ + +

    + (clicca per ingrandire) +

    +
    + + \IMAGE-FILE\ + +

    + (Kattints a képre a nagyításhoz) +

    +
    + + \IMAGE-FILE\ + +

    + (cliquez pour agrandir) +

    +
    + + \IMAGE-FILE\ + +

    + (pulse para ver una imagen más grande) +

    +

    Go back to the Documentation index.

    + + \IMAGE-FILE\ + +

    + (Klick zum Vergrößern) +

    +
    + + \IMAGE-FILE\ + +

    + (Klepnout pro zvětšení) +

    +